diff --git a/cmake_targets/CMakeLists.txt b/cmake_targets/CMakeLists.txt index e3d2bed6f4..ba7aa6c932 100644 --- a/cmake_targets/CMakeLists.txt +++ b/cmake_targets/CMakeLists.txt @@ -126,10 +126,26 @@ add_list_string_option(CMAKE_BUILD_TYPE "RelWithDebInfo" "Choose the type of bui Message("Architecture is ${CMAKE_SYSTEM_PROCESSOR}") if (CMAKE_SYSTEM_PROCESSOR STREQUAL "armv7l") - set(C_FLAGS_PROCESSOR "-mfloat-abi=softfp -mfpu=neon") + set(C_FLAGS_PROCESSOR "-gdwarf-2 -mfloat-abi=hard -mfpu=neon -lgcc -lrt") else (CMAKE_SYSTEM_PROCESSOR STREQUAL "armv7l") - set(C_FLAGS_PROCESSOR "-msse4.2") + file(STRINGS "/proc/cpuinfo" CPUINFO REGEX flags LIMIT_COUNT 1) + #Message("CPUINFO is ${CPUINFO}") + if (CPUINFO MATCHES "avx2") + set(C_FLAGS_PROCESSOR "${C_FLAGS_PROCESSOR} -mavx2") + endif() + if (CPUINFO MATCHES "sse4_2") + set(C_FLAGS_PROCESSOR "${C_FLAGS_PROCESSOR} -msse4.2") + endif() + if (CPUINFO MATCHES "sse4_1") + set(C_FLAGS_PROCESSOR "${C_FLAGS_PROCESSOR} -msse4.1") + endif() + if (CPUINFO MATCHES "ssse3") + set(C_FLAGS_PROCESSOR "${C_FLAGS_PROCESSOR} -mssse3") + endif() endif() +Message("C_FLAGS_PROCESSOR is ${C_FLAGS_PROCESSOR}") + + # set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${C_FLAGS_PROCESSOR} -std=gnu99 -Wall -Wstrict-prototypes -fno-strict-aliasing -rdynamic -funroll-loops -Wno-packed-bitfield-compat -fPIC ") @@ -137,11 +153,14 @@ set(CMAKE_C_FLAGS set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_FCNTL_H=1 -DHAVE_ARPA_INET_H=1 -DHAVE_SYS_TIME_H=1 -DHAVE_SYS_SOCKET_H=1 -DHAVE_STRERROR=1 -DHAVE_SOCKET=1 -DHAVE_MEMSET=1 -DHAVE_GETTIMEOFDAY=1 -DHAVE_STDLIB_H=1 -DHAVE_MALLOC=1 -DHAVE_LIBSCTP" ) +set(CMAKE_CXX_FLAGS + "${CMAKE_CXX_FLAGS} ${C_FLAGS_PROCESSOR}" +) # set a flag for changes in the source code # these changes are related to hardcoded path to include .h files add_definitions(-DCMAKER) -set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS} -ggdb -DMALLOC_CHECK_=3") -set(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS} -ggdb -DMALLOC_CHECK_=3 -O2") +set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS} -g -DMALLOC_CHECK_=3") +set(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS} -g -DMALLOC_CHECK_=3 -O2") # Below has been put in comment because does not work with # SVN authentication. @@ -170,10 +189,15 @@ add_boolean_option(MSG_PRINT False "print debug messages") add_boolean_option(DISABLE_XER_PRINT False "print XER Format") add_boolean_option(XER_PRINT False "print XER Format") add_boolean_option(RRC_MSG_PRINT False "print RRC messages") -add_boolean_option(PDCP_MSG_PRINT False "print PDCP messages") +add_boolean_option(PDCP_MSG_PRINT False "print PDCP messages to /tmp/pdcp.log") +add_boolean_option(DEBUG_PDCP_PAYLOAD False "print PDCP PDU to stdout") # if true, make sure that global and PDCP log levels are trace +add_boolean_option(DEBUG_MAC_INTERFACE False "print MAC-RLC PDU exchange to stdout") # if true, make sure that global and PDCP log levels are trace +add_boolean_option(TRACE_RLC_PAYLOAD False "print RLC PDU to stdout") # if true, make sure that global and PDCP log levels are trace add_boolean_option(TEST_OMG False "???") add_boolean_option(DEBUG_OMG False "???") add_boolean_option(XFORMS False "This adds the possibility to see the signal oscilloscope") +add_boolean_option(PRINT_STATS False "This adds the possibility to see the status") + add_boolean_option(DEBUG_CONSOLE False "makes debugging easier, disables stdout/stderr buffering") add_boolean_option(ENABLE_ITTI True "ITTI is internal messaging, should remain enabled for most targets") @@ -272,7 +296,7 @@ set(S1AP_ASN_FILES ${S1AP_ASN_DIR}/S1AP-PDU.asn ) set(S1AP_C_DIR ${asn1_generated_dir}/${ASN1RELDIR}) - +#message("calling ${asn1c_call} ${S1AP_C_DIR} ${S1AP_ASN_FILES}") execute_process(COMMAND ${asn1c_call} ${S1AP_C_DIR} ${S1AP_ASN_FILES}) file(GLOB S1AP_source ${S1AP_C_DIR}/*.c) @@ -327,6 +351,58 @@ add_library(S1AP_EPC ${S1AP_DIR}/s1ap_mme_retransmission.c ${S1AP_DIR}/s1ap_mme_ta.c ) + +#X2AP +# Same limitation as described in RRC/S1AP: unknown generated file list +# so we generate it at cmake time +############## +add_list1_option(X2AP_VERSION R11 "X2AP Asn.1 grammar version" R10 R11) +set(X2AP_DIR ${OPENAIR2_DIR}/X2AP) +if (${X2AP_VERSION} STREQUAL "R11") + set (ASN1RELDIR R11.2) +elseif (${X2AP_VERSION} STREQUAL "R10") + set (ASN1RELDIR R.UNKNOWN) +endif(${X2AP_VERSION} STREQUAL "R11") +set(X2AP_ASN_DIR ${X2AP_DIR}/MESSAGES/ASN1/${ASN1RELDIR}) +set(X2AP_ASN_FILES + ${X2AP_ASN_DIR}/X2AP-CommonDataTypes.asn + ${X2AP_ASN_DIR}/X2AP-Constants.asn + ${X2AP_ASN_DIR}/X2AP-IEs.asn + ${X2AP_ASN_DIR}/X2AP-PDU.asn + ${X2AP_ASN_DIR}/X2AP-Containers.asn + ) + +set(X2AP_C_DIR ${asn1_generated_dir}/${ASN1RELDIR}) +#message("calling ${asn1c_call} ${X2AP_C_DIR} ${X2AP_ASN_FILES}") +execute_process(COMMAND ${asn1c_call} ${X2AP_C_DIR} ${X2AP_ASN_FILES}) +file(GLOB X2AP_source ${X2AP_C_DIR}/*.c) + +set(X2AP_OAI_generated + ${X2AP_C_DIR}/x2ap_decoder.c + ${X2AP_C_DIR}/x2ap_encoder.c + ${X2AP_C_DIR}/x2ap_xer_print.c + ${X2AP_C_DIR}/x2ap_ies_defs.h + ) +file(GLOB x2ap_h ${X2AP_C_DIR}/*.h) +set(x2ap_h ${x2ap_h} ) + +#message("calling ${X2AP_DIR}/MESSAGES/ASN1/asn1tostruct.py -f ${X2AP_ASN_DIR}/X2AP-PDU-Contents.asn -o ${X2AP_C_DIR}") +add_custom_command ( + OUTPUT ${X2AP_OAI_generated} + COMMAND ${asn1c_call} ${X2AP_C_DIR} ${X2AP_ASN_FILES} + COMMAND python ${X2AP_DIR}/MESSAGES/ASN1/asn1tostruct.py -f ${X2AP_ASN_DIR}/X2AP-PDU-Contents.asn -o ${X2AP_C_DIR} + DEPENDS ${X2AP_ASN_FILES} + ) + +add_library(X2AP_LIB + ${X2AP_OAI_generated} + ${X2AP_source} + ${X2AP_DIR}/x2ap_common.c + ) + +include_directories ("${X2AP_C_DIR}") +include_directories ("${X2AP_DIR}") + # Hardware dependant options ################################### add_list1_option(NB_ANTENNAS_RX "2" "Number of antennas in reception" "1" "2" "4") @@ -359,15 +435,17 @@ elseif (${RF_BOARD} STREQUAL "OAI_BLADERF") set(HW_SOURCE ${HW_SOURCE} ${OPENAIR_TARGETS}/ARCH/BLADERF/USERSPACE/LIB/bladerf_lib.c ) - LINK_DIRECTORIES("/usr/lib/x86_64-linux-gnu/") + LINK_DIRECTORIES("/usr/lib/x86_64-linux-gnu") set(option_HW_lib "bladeRF") +#set(LOWLATENCY False) elseif (${RF_BOARD} STREQUAL "ETHERNET") include_directories ("${OPENAIR_TARGETS}/ARCH/ETHERNET/USERSPACE/LIB") set(HW_SOURCE ${HW_SOURCE} - ${OPENAIR_TARGETS}/ARCH/ETHERNET/USERSPACE/LIB/ethernet_lib.c - ) - + ${OPENAIR_TARGETS}/ARCH/ETHERNET/USERSPACE/LIB/ethernet_lib.c + ) + set(LOWLATENCY True) + elseif (${RF_BOARD} STREQUAL "CPRIGW") set(HW_SOURCE ${HW_SOURCE} ${OPENAIR_TARGETS}/ARCH/CPRIGW/USERSPACE/LIB/cprigw_lib.c @@ -389,21 +467,16 @@ add_boolean_option(USER_MODE True "????") add_boolean_option(OAI_NW_DRIVER_TYPE_ETHERNET False "????") add_boolean_option(DISABLE_USE_NAS False "???") -add_boolean_option(ENABLE_PDCP_NETLINK_FIFO False "????") add_boolean_option(ENABLE_STANDALONE_EPC True "Compile MME, SGW and PGW in a single executable") -add_boolean_option(ENABLE_USE_GTPU_IN_KERNEL True "as per name") -add_boolean_option(ENABLE_USE_NETFILTER_FOR_SGI False "SGI option") -add_boolean_option(ENABLE_USE_PCAP_FOR_SGI False "SGI option") -add_boolean_option(ENABLE_USE_RAW_SOCKET_FOR_SGI False "As per name") add_boolean_option(EPC_BUILD False "???") -add_boolean_option(LOWLATENCY True "Use the Linux scheduler SCHED_DEADLINE: kernel >= 3.14") +add_boolean_option(LOWLATENCY True "Use the Linux scheduler SCHED_DEADLINE: kernel >= 3.14") add_boolean_option(NAS_ADDRESS_FIX False "specific to oaisim: for nasmesh driver") add_boolean_option(NAS_NETLINK False "???? Must be True to compile nasmesh driver without rtai") add_boolean_option(OAISIM False "specific to oaisim") add_boolean_option(OAI_NW_DRIVER_USE_NETLINK True "????") add_boolean_option(USE_MME False "this flag is used only one time in lte-softmodem.c") add_list_string_option(PACKAGE_NAME "NotDefined" "As per attribute name") -add_boolean_option(MESSAGE_CHART_GENERATOR True "For generating sequence diagrams") +add_boolean_option(MESSAGE_CHART_GENERATOR False "For generating sequence diagrams") add_boolean_option(MESSAGE_CHART_GENERATOR_RLC_MAC False "trace RLC-MAC exchanges in sequence diagrams") add_boolean_option(MESSAGE_CHART_GENERATOR_PHY False "trace some PHY exchanges in sequence diagrams") ######################## @@ -455,6 +528,9 @@ add_boolean_option(PHY_EMUL False "not clear: must remain False f add_boolean_option(PUCCH True "????") add_boolean_option(RANDOM_BF False "????") add_boolean_option(SMBV False "Rohde&Schwarz SMBV100A vector signal generator") +add_boolean_option(DEBUG_PHY False "Enable PHY layer debugging options") +add_boolean_option(DEBUG_PHY_PROC False "Enable debugging of PHY layer procedures") +add_boolean_option(DEBUG_DLSCH False "Enable debugging of DLSCH physical layer channel") ########################## # 802.21 options @@ -523,14 +599,14 @@ add_boolean_option(RRC_DEFAULT_RAB_IS_AM False "Otherwise it is UM, confi ########################## # S1AP LAYER OPTIONS ########################## -add_boolean_option(S1AP_LIMIT_STREAM_ID_TO_1 True "FIXME: Despite Eurecom has implemented the spec concerning management of stream ids, there are always issues with other EPCs than EURECOM") +# none ########################## # PROJECTS (IST, FRENCH COLL., etc) # SPECIFIC OPTIONS ########################## add_boolean_option(SPECTRA False "???") -add_boolean_option(MIH_C_MEDIEVAL_EXTENSIONS True "EXTENSIONS TO MIH 802.21 IN CONTEXT OF IST PROJECT CALLED MEDIEVAL") +add_boolean_option(MIH_C_MEDIEVAL_EXTENSIONS False "EXTENSIONS TO MIH 802.21 IN CONTEXT OF IST PROJECT CALLED MEDIEVAL") @@ -582,16 +658,16 @@ include_directories("${OPENAIR3_DIR}/RAL-LTE/LTE_RAL_ENB/INCLUDE") include_directories("${OPENAIR3_DIR}/RAL-LTE/LTE_RAL_UE/INCLUDE") include_directories("${OPENAIR_DIR}/common/utils") include_directories("${OPENAIR_DIR}/common/utils/itti") -include_directories("${OPENAIRCN_DIR}/NAS/EURECOM-NAS/src/api/network") -include_directories("${OPENAIRCN_DIR}/NAS/EURECOM-NAS/src/include") -include_directories("${OPENAIRCN_DIR}/NAS/EURECOM-NAS/src/ies") -include_directories("${OPENAIRCN_DIR}/NAS/EURECOM-NAS/src/emm/msg") -include_directories("${OPENAIRCN_DIR}/NAS/EURECOM-NAS/src/esm/msg") -include_directories("${OPENAIRCN_DIR}/NAS/EURECOM-NAS/src/util") +include_directories("${OPENAIRCN_DIR}/NAS/COMMON") +include_directories("${OPENAIRCN_DIR}/NAS/COMMON/API/NETWORK") +include_directories("${OPENAIRCN_DIR}/NAS/COMMON/EMM/MSG") +include_directories("${OPENAIRCN_DIR}/NAS/COMMON/ESM/MSG") +include_directories("${OPENAIRCN_DIR}/NAS/COMMON/IES") +include_directories("${OPENAIRCN_DIR}/NAS/COMMON/UTIL") include_directories("${OPENAIRCN_DIR}/SECU") include_directories("${OPENAIRCN_DIR}/SCTP") -include_directories("${OPENAIR2_DIR}/X2AP") include_directories("${OPENAIRCN_DIR}/S1AP") +include_directories("${OPENAIR2_DIR}/X2AP") include_directories("${OPENAIRCN_DIR}/UDP") include_directories("${OPENAIRCN_DIR}/GTPV1-U") include_directories("${OPENAIR_DIR}/targets/COMMON") @@ -613,27 +689,26 @@ include_directories("${OPENAIR2_DIR}/UTIL/CLI") include_directories("${OPENAIR2_DIR}/UTIL/OPT") include_directories("${OPENAIR2_DIR}/UTIL/OMV") include_directories("${OPENAIR2_DIR}/RRC/LITE/MESSAGES") -include_directories("${OPENAIRCN_DIR}/NAS") include_directories("${OPENAIRCN_DIR}/GTPV1-U/nw-gtpv1u/shared") include_directories("${OPENAIRCN_DIR}/GTPV1-U/nw-gtpv1u/include") include_directories("${OPENAIRCN_DIR}/SGW-LITE") include_directories("${OPENAIRCN_DIR}/MME_APP") -include_directories("${OPENAIRCN_DIR}/SGI") include_directories("${OPENAIRCN_DIR}/S6A") include_directories("${OPENAIR_DIR}") # Utilities Library ################ add_library(HASHTABLE - ${OPENAIRCN_DIR}/UTILS/HASHTABLE/hashtable.c - ${OPENAIRCN_DIR}/UTILS/HASHTABLE/obj_hashtable.c + ${OPENAIR_DIR}/common/utils/collection/hashtable/hashtable.c + ${OPENAIR_DIR}/common/utils/collection/hashtable/obj_hashtable.c ) -include_directories(${OPENAIRCN_DIR}/UTILS/HASHTABLE) +include_directories(${OPENAIR_DIR}/common/utils/collection/hashtable) if (MESSAGE_CHART_GENERATOR) - add_library(MSC + add_library(MSC ${OPENAIR_DIR}/common/utils/msc/msc.c - ) + ) + set(MSC_LIB MSC) endif() include_directories(${OPENAIR_DIR}/common/utils/msc) @@ -785,7 +860,6 @@ set(PHY_SRC ${OPENAIR1_DIR}/PHY/TOOLS/log2_approx.c ${OPENAIR1_DIR}/PHY/TOOLS/cmult_sv.c ${OPENAIR1_DIR}/PHY/TOOLS/cmult_vv.c - ${OPENAIR1_DIR}/PHY/TOOLS/cadd_vv.c ${OPENAIR1_DIR}/PHY/TOOLS/cdot_prod.c ${OPENAIR1_DIR}/PHY/TOOLS/signal_energy.c ${OPENAIR1_DIR}/PHY/TOOLS/dB_routines.c @@ -908,7 +982,7 @@ if (${ENABLE_RAL}) set(RAL_LIB RAL) endif() -if(MIH_C_MEDIEVAL_EXTENSIONS) +if(${MIH_C_MEDIEVAL_EXTENSIONS}) set(MIH_SRC ${RAL_LTE_DIR}INTERFACE-802.21/C/MIH_C_header_codec.c ${RAL_LTE_DIR}INTERFACE-802.21/C/MIH_C_msg_codec.c @@ -970,15 +1044,15 @@ string(REGEX REPLACE "[a-zA-Z .\r\n]" "" IPTVERSION ${iptables_version}) string(REGEX REPLACE "[a-zA-Z \r\n]" "" IPTABLES_VERSION_STRING ${iptables_version}) # From original Polaris code, added _lib because cmake doesn't accept two targets with the same name -# and the driver is also named xt_GTPUAH +# and the driver is also named xt_GTPUSP # the _lib suffix is removed during installation in /lib/xtables -add_library(xt_GTPUAH_lib SHARED ${OPENAIRCN_DIR}/GTPV1-U/GTPUAH/libxt_GTPUAH.c) -target_compile_definitions(xt_GTPUAH_lib PRIVATE +add_library(xt_GTPUSP_lib SHARED ${OPENAIRCN_DIR}/GTPV1-U/GTPU_SP/libxt_GTPUSP.c) +target_compile_definitions(xt_GTPUSP_lib PRIVATE -D_LARGEFILE_SOURCE=1 -D_LARGE_FILES -D_FILE_OFFSET_BITS=64 -D_REENTRANT --D_INIT=libxt_GTPUAH_init +-D_INIT=libxt_GTPUSP_init -DKVERSION=3 -DPIC IPTVERSION=${IPTVERSION} -DIPTABLES_VERSION_STRING=\"${IPTABLES_VERSION_STRING}\" @@ -986,27 +1060,6 @@ IPTVERSION=${IPTVERSION} -DIPTABLES_VERSION_STRING=\"${IPTABLES_VERSION_STRING}\ -set(SGI_DIR ${OPENAIRCN_DIR}/SGI) -set(SGI_SRC - ${SGI_DIR}/sgi_task.c - ${SGI_DIR}/sgi_socket.c - ${SGI_DIR}/sgi_egress.c - ${SGI_DIR}/sgi_util.c -) -if(ENABLE_USE_PCAP_FOR_SGI) - set(SGI_SRC ${SGI_SRC} - ${SGI_DIR}/sgi_pcap.c - ) - set(SGI_option_lib ${SGI_option_lib} pcap) -endif() -if (ENABLE_USE_NETFILTER_FOR_SGI) - set(SGI_SRC ${SGI_SRC} - ${SGI_DIR}/sgi_nf.c - ) - set(SGI_option_lib ${SGI_option_lib} netfilter_queue nfnetlink) -endif() -add_library(SGI ${SGI_SRC}) - set(SCTP_SRC ${OPENAIRCN_DIR}/SCTP/sctp_common.c ${OPENAIRCN_DIR}/SCTP/sctp_eNB_task.c @@ -1070,284 +1123,361 @@ add_library(MME_APP ${MME_DIR}/s6a_2_nas_cause.c ) -set(NAS_SRC ${OPENAIRCN_DIR}/NAS/EURECOM-NAS/src/) + + + +set(NAS_SRC ${OPENAIRCN_DIR}/NAS/) set(libnas_api_OBJS - ${NAS_SRC}api/mme/mme_api.c - ${NAS_SRC}api/network/nas_message.c - ${NAS_SRC}api/network/as_message.c - ${NAS_SRC}api/network/network_api.c + ${NAS_SRC}COMMON/API/NETWORK/as_message.c + ${NAS_SRC}COMMON/API/NETWORK/nas_message.c + ${NAS_SRC}COMMON/API/NETWORK/network_api.c ) - -set(libnas_emm_OBJS - ${NAS_SRC}emm/Attach.c - ${NAS_SRC}emm/Authentication.c - ${NAS_SRC}emm/Detach.c - ${NAS_SRC}emm/EmmCommon.c - ${NAS_SRC}emm/emm_data_ctx.c - ${NAS_SRC}emm/emm_main.c - ${NAS_SRC}emm/EmmStatusHdl.c - ${NAS_SRC}emm/Identification.c - ${NAS_SRC}emm/IdleMode.c - ${NAS_SRC}emm/LowerLayer.c - ${NAS_SRC}emm/SecurityModeControl.c - ${NAS_SRC}emm/ServiceRequestHdl.c - ${NAS_SRC}emm/TrackingAreaUpdate.c - ) - + set(libnas_emm_msg_OBJS - ${NAS_SRC}emm/msg/AttachAccept.c - ${NAS_SRC}emm/msg/AuthenticationFailure.c - ${NAS_SRC}emm/msg/CsServiceNotification.c - ${NAS_SRC}emm/msg/ExtendedServiceRequest.c - ${NAS_SRC}emm/msg/IdentityResponse.c - ${NAS_SRC}emm/msg/EmmInformation.c - ${NAS_SRC}emm/msg/ServiceReject.c - ${NAS_SRC}emm/msg/TrackingAreaUpdateReject.c - ${NAS_SRC}emm/msg/AttachComplete.c - ${NAS_SRC}emm/msg/AuthenticationReject.c - ${NAS_SRC}emm/msg/DetachAccept.c - ${NAS_SRC}emm/msg/GutiReallocationCommand.c - ${NAS_SRC}emm/msg/emm_msg.c - ${NAS_SRC}emm/msg/SecurityModeCommand.c - ${NAS_SRC}emm/msg/ServiceRequest.c - ${NAS_SRC}emm/msg/TrackingAreaUpdateRequest.c - ${NAS_SRC}emm/msg/AttachReject.c - ${NAS_SRC}emm/msg/AuthenticationRequest.c - ${NAS_SRC}emm/msg/DetachRequest.c - ${NAS_SRC}emm/msg/GutiReallocationComplete.c - ${NAS_SRC}emm/msg/SecurityModeComplete.c - ${NAS_SRC}emm/msg/TrackingAreaUpdateAccept.c - ${NAS_SRC}emm/msg/UplinkNasTransport.c - ${NAS_SRC}emm/msg/AttachRequest.c - ${NAS_SRC}emm/msg/AuthenticationResponse.c - ${NAS_SRC}emm/msg/DownlinkNasTransport.c - ${NAS_SRC}emm/msg/EmmStatus.c - ${NAS_SRC}emm/msg/IdentityRequest.c - ${NAS_SRC}emm/msg/SecurityModeReject.c - ${NAS_SRC}emm/msg/TrackingAreaUpdateComplete.c + ${NAS_SRC}COMMON/EMM/MSG/AttachAccept.c + ${NAS_SRC}COMMON/EMM/MSG/AttachComplete.c + ${NAS_SRC}COMMON/EMM/MSG/AttachReject.c + ${NAS_SRC}COMMON/EMM/MSG/AttachRequest.c + ${NAS_SRC}COMMON/EMM/MSG/AuthenticationFailure.c + ${NAS_SRC}COMMON/EMM/MSG/AuthenticationReject.c + ${NAS_SRC}COMMON/EMM/MSG/AuthenticationRequest.c + ${NAS_SRC}COMMON/EMM/MSG/AuthenticationResponse.c + ${NAS_SRC}COMMON/EMM/MSG/CsServiceNotification.c + ${NAS_SRC}COMMON/EMM/MSG/DetachAccept.c + ${NAS_SRC}COMMON/EMM/MSG/DetachRequest.c + ${NAS_SRC}COMMON/EMM/MSG/DownlinkNasTransport.c + ${NAS_SRC}COMMON/EMM/MSG/EmmInformation.c + ${NAS_SRC}COMMON/EMM/MSG/emm_msg.c + ${NAS_SRC}COMMON/EMM/MSG/EmmStatus.c + ${NAS_SRC}COMMON/EMM/MSG/ExtendedServiceRequest.c + ${NAS_SRC}COMMON/EMM/MSG/GutiReallocationCommand.c + ${NAS_SRC}COMMON/EMM/MSG/GutiReallocationComplete.c + ${NAS_SRC}COMMON/EMM/MSG/IdentityRequest.c + ${NAS_SRC}COMMON/EMM/MSG/IdentityResponse.c + ${NAS_SRC}COMMON/EMM/MSG/SecurityModeCommand.c + ${NAS_SRC}COMMON/EMM/MSG/SecurityModeComplete.c + ${NAS_SRC}COMMON/EMM/MSG/SecurityModeReject.c + ${NAS_SRC}COMMON/EMM/MSG/ServiceReject.c + ${NAS_SRC}COMMON/EMM/MSG/ServiceRequest.c + ${NAS_SRC}COMMON/EMM/MSG/TrackingAreaUpdateAccept.c + ${NAS_SRC}COMMON/EMM/MSG/TrackingAreaUpdateComplete.c + ${NAS_SRC}COMMON/EMM/MSG/TrackingAreaUpdateReject.c + ${NAS_SRC}COMMON/EMM/MSG/TrackingAreaUpdateRequest.c + ${NAS_SRC}COMMON/EMM/MSG/UplinkNasTransport.c ) - -set(libnas_emm_sap_OBJS - ${NAS_SRC}emm/sap/emm_as.c - ${NAS_SRC}emm/sap/emm_cn.c - ${NAS_SRC}emm/sap/EmmDeregisteredNoImsi.c - ${NAS_SRC}emm/sap/emm_reg.c - ${NAS_SRC}emm/sap/EmmRegisteredUpdateNeeded.c - ${NAS_SRC}emm/sap/EmmDeregisteredNormalService.c - ${NAS_SRC}emm/sap/emm_sap.c - ${NAS_SRC}emm/sap/EmmDeregisteredPlmnSearch.c - ${NAS_SRC}emm/sap/emm_esm.c - ${NAS_SRC}emm/sap/EmmRegisteredAttemptingToUpdate.c - ${NAS_SRC}emm/sap/emm_send.c - ${NAS_SRC}emm/sap/EmmCommonProcedureInitiated.c - ${NAS_SRC}emm/sap/EmmRegistered.c - ${NAS_SRC}emm/sap/EmmDeregisteredAttachNeeded.c - ${NAS_SRC}emm/sap/EmmRegisteredImsiDetachInitiated.c - ${NAS_SRC}emm/sap/EmmServiceRequestInitiated.c - ${NAS_SRC}emm/sap/EmmDeregisteredAttemptingToAttach.c - ${NAS_SRC}emm/sap/emm_fsm.c - ${NAS_SRC}emm/sap/EmmRegisteredInitiated.c - ${NAS_SRC}emm/sap/EmmTrackingAreaUpdatingInitiated.c - ${NAS_SRC}emm/sap/EmmDeregistered.c - ${NAS_SRC}emm/sap/EmmRegisteredLimitedService.c - ${NAS_SRC}emm/sap/EmmDeregisteredInitiated.c - ${NAS_SRC}emm/sap/EmmNull.c - ${NAS_SRC}emm/sap/EmmRegisteredNoCellAvailable.c - ${NAS_SRC}emm/sap/EmmDeregisteredLimitedService.c - ${NAS_SRC}emm/sap/emm_recv.c - ${NAS_SRC}emm/sap/EmmRegisteredNormalService.c - ${NAS_SRC}emm/sap/EmmDeregisteredNoCellAvailable.c - ${NAS_SRC}emm/sap/EmmRegisteredPlmnSearch.c -) - -set (libnas_esm_OBJS - ${NAS_SRC}esm/esm_ebr_context.c - ${NAS_SRC}esm/PdnConnectivity.c - ${NAS_SRC}esm/esm_ebr.c - ${NAS_SRC}esm/EpsBearerContextDeactivation.c - ${NAS_SRC}esm/DefaultEpsBearerContextActivation.c - ${NAS_SRC}esm/DedicatedEpsBearerContextActivation.c - ${NAS_SRC}esm/PdnDisconnect.c - ${NAS_SRC}esm/EsmStatusHdl.c - ${NAS_SRC}esm/esm_main.c - ${NAS_SRC}esm/esm_pt.c - ${NAS_SRC}esm/esm_ip.c -) - + set(libnas_esm_msg_OBJS - ${NAS_SRC}esm/msg/ModifyEpsBearerContextRequest.c - ${NAS_SRC}esm/msg/DeactivateEpsBearerContextRequest.c - ${NAS_SRC}esm/msg/BearerResourceAllocationReject.c - ${NAS_SRC}esm/msg/BearerResourceModificationRequest.c - ${NAS_SRC}esm/msg/ActivateDedicatedEpsBearerContextRequest.c - ${NAS_SRC}esm/msg/EsmInformationResponse.c - ${NAS_SRC}esm/msg/PdnDisconnectReject.c - ${NAS_SRC}esm/msg/ActivateDedicatedEpsBearerContextAccept.c - ${NAS_SRC}esm/msg/PdnDisconnectRequest.c - ${NAS_SRC}esm/msg/BearerResourceModificationReject.c - ${NAS_SRC}esm/msg/ActivateDefaultEpsBearerContextAccept.c - ${NAS_SRC}esm/msg/ActivateDedicatedEpsBearerContextReject.c - ${NAS_SRC}esm/msg/ModifyEpsBearerContextAccept.c - ${NAS_SRC}esm/msg/DeactivateEpsBearerContextAccept.c - ${NAS_SRC}esm/msg/esm_msg.c - ${NAS_SRC}esm/msg/EsmInformationRequest.c - ${NAS_SRC}esm/msg/ActivateDefaultEpsBearerContextRequest.c - ${NAS_SRC}esm/msg/ModifyEpsBearerContextReject.c - ${NAS_SRC}esm/msg/EsmStatus.c - ${NAS_SRC}esm/msg/PdnConnectivityReject.c - ${NAS_SRC}esm/msg/ActivateDefaultEpsBearerContextReject.c - ${NAS_SRC}esm/msg/PdnConnectivityRequest.c - ${NAS_SRC}esm/msg/BearerResourceAllocationRequest.c -) - -set(libnas_esm_sap_OBJS - ${NAS_SRC}esm/sap/esm_recv.c - ${NAS_SRC}esm/sap/esm_send.c - ${NAS_SRC}esm/sap/esm_sap.c + ${NAS_SRC}COMMON/ESM/MSG/ActivateDedicatedEpsBearerContextAccept.c + ${NAS_SRC}COMMON/ESM/MSG/ActivateDedicatedEpsBearerContextReject.c + ${NAS_SRC}COMMON/ESM/MSG/ActivateDedicatedEpsBearerContextRequest.c + ${NAS_SRC}COMMON/ESM/MSG/ActivateDefaultEpsBearerContextAccept.c + ${NAS_SRC}COMMON/ESM/MSG/ActivateDefaultEpsBearerContextReject.c + ${NAS_SRC}COMMON/ESM/MSG/ActivateDefaultEpsBearerContextRequest.c + ${NAS_SRC}COMMON/ESM/MSG/BearerResourceAllocationReject.c + ${NAS_SRC}COMMON/ESM/MSG/BearerResourceAllocationRequest.c + ${NAS_SRC}COMMON/ESM/MSG/BearerResourceModificationReject.c + ${NAS_SRC}COMMON/ESM/MSG/BearerResourceModificationRequest.c + ${NAS_SRC}COMMON/ESM/MSG/DeactivateEpsBearerContextAccept.c + ${NAS_SRC}COMMON/ESM/MSG/DeactivateEpsBearerContextRequest.c + ${NAS_SRC}COMMON/ESM/MSG/EsmInformationRequest.c + ${NAS_SRC}COMMON/ESM/MSG/EsmInformationResponse.c + ${NAS_SRC}COMMON/ESM/MSG/esm_msg.c + ${NAS_SRC}COMMON/ESM/MSG/EsmStatus.c + ${NAS_SRC}COMMON/ESM/MSG/ModifyEpsBearerContextAccept.c + ${NAS_SRC}COMMON/ESM/MSG/ModifyEpsBearerContextReject.c + ${NAS_SRC}COMMON/ESM/MSG/ModifyEpsBearerContextRequest.c + ${NAS_SRC}COMMON/ESM/MSG/PdnConnectivityReject.c + ${NAS_SRC}COMMON/ESM/MSG/PdnConnectivityRequest.c + ${NAS_SRC}COMMON/ESM/MSG/PdnDisconnectReject.c + ${NAS_SRC}COMMON/ESM/MSG/PdnDisconnectRequest.c ) set(libnas_ies_OBJS - ${NAS_SRC}ies/UeSecurityCapability.c - ${NAS_SRC}ies/SecurityHeaderType.c - ${NAS_SRC}ies/RadioPriority.c - ${NAS_SRC}ies/EpsAttachResult.c - ${NAS_SRC}ies/ImeisvRequest.c - ${NAS_SRC}ies/EmergencyNumberList.c - ${NAS_SRC}ies/SupportedCodecList.c - ${NAS_SRC}ies/EsmCause.c - ${NAS_SRC}ies/NetworkName.c - ${NAS_SRC}ies/AuthenticationResponseParameter.c - ${NAS_SRC}ies/Cli.c - ${NAS_SRC}ies/AccessPointName.c - ${NAS_SRC}ies/DaylightSavingTime.c - ${NAS_SRC}ies/LcsIndicator.c - ${NAS_SRC}ies/PagingIdentity.c - ${NAS_SRC}ies/EpsMobileIdentity.c - ${NAS_SRC}ies/GutiType.c - ${NAS_SRC}ies/NasKeySetIdentifier.c - ${NAS_SRC}ies/CsfbResponse.c - ${NAS_SRC}ies/PacketFlowIdentifier.c - ${NAS_SRC}ies/ApnAggregateMaximumBitRate.c - ${NAS_SRC}ies/EpsBearerContextStatus.c - ${NAS_SRC}ies/MobileIdentity.c - ${NAS_SRC}ies/AuthenticationFailureParameter.c - ${NAS_SRC}ies/EpsUpdateResult.c - ${NAS_SRC}ies/TimeZone.c - ${NAS_SRC}ies/MessageType.c - ${NAS_SRC}ies/EmmCause.c - ${NAS_SRC}ies/MobileStationClassmark2.c - ${NAS_SRC}ies/AuthenticationParameterRand.c - ${NAS_SRC}ies/PdnAddress.c - ${NAS_SRC}ies/MobileStationClassmark3.c - ${NAS_SRC}ies/ServiceType.c - ${NAS_SRC}ies/NasRequestType.c - ${NAS_SRC}ies/PlmnList.c - ${NAS_SRC}ies/EpsQualityOfService.c - ${NAS_SRC}ies/NasMessageContainer.c - ${NAS_SRC}ies/EsmInformationTransferFlag.c - ${NAS_SRC}ies/TrafficFlowTemplate.c - ${NAS_SRC}ies/LinkedEpsBearerIdentity.c - ${NAS_SRC}ies/NasSecurityAlgorithms.c - ${NAS_SRC}ies/LlcServiceAccessPointIdentifier.c - ${NAS_SRC}ies/ShortMac.c - ${NAS_SRC}ies/TrafficFlowAggregateDescription.c - ${NAS_SRC}ies/PTmsiSignature.c - ${NAS_SRC}ies/ProtocolDiscriminator.c - ${NAS_SRC}ies/EpsBearerIdentity.c - ${NAS_SRC}ies/TimeZoneAndTime.c - ${NAS_SRC}ies/TrackingAreaIdentityList.c - ${NAS_SRC}ies/QualityOfService.c - ${NAS_SRC}ies/EpsUpdateType.c - ${NAS_SRC}ies/PdnType.c - ${NAS_SRC}ies/UeRadioCapabilityInformationUpdateNeeded.c - ${NAS_SRC}ies/AuthenticationParameterAutn.c - ${NAS_SRC}ies/EpsAttachType.c - ${NAS_SRC}ies/IdentityType2.c - ${NAS_SRC}ies/LcsClientIdentity.c - ${NAS_SRC}ies/DetachType.c - ${NAS_SRC}ies/LocationAreaIdentification.c - ${NAS_SRC}ies/TrackingAreaIdentity.c - ${NAS_SRC}ies/CipheringKeySequenceNumber.c - ${NAS_SRC}ies/MsNetworkCapability.c - ${NAS_SRC}ies/UeNetworkCapability.c - ${NAS_SRC}ies/ProtocolConfigurationOptions.c - ${NAS_SRC}ies/AdditionalUpdateType.c - ${NAS_SRC}ies/TmsiStatus.c - ${NAS_SRC}ies/EsmMessageContainer.c - ${NAS_SRC}ies/Nonce.c - ${NAS_SRC}ies/ProcedureTransactionIdentity.c - ${NAS_SRC}ies/TransactionIdentifier.c - ${NAS_SRC}ies/AdditionalUpdateResult.c - ${NAS_SRC}ies/GprsTimer.c - ${NAS_SRC}ies/EpsNetworkFeatureSupport.c - ${NAS_SRC}ies/SsCode.c - ${NAS_SRC}ies/DrxParameter.c - ${NAS_SRC}ies/KsiAndSequenceNumber.c - ${NAS_SRC}ies/VoiceDomainPreferenceAndUeUsageSetting.c + ${NAS_SRC}COMMON/IES/AccessPointName.c + ${NAS_SRC}COMMON/IES/AdditionalUpdateResult.c + ${NAS_SRC}COMMON/IES/AdditionalUpdateType.c + ${NAS_SRC}COMMON/IES/ApnAggregateMaximumBitRate.c + ${NAS_SRC}COMMON/IES/AuthenticationFailureParameter.c + ${NAS_SRC}COMMON/IES/AuthenticationParameterAutn.c + ${NAS_SRC}COMMON/IES/AuthenticationParameterRand.c + ${NAS_SRC}COMMON/IES/AuthenticationResponseParameter.c + ${NAS_SRC}COMMON/IES/CipheringKeySequenceNumber.c + ${NAS_SRC}COMMON/IES/Cli.c + ${NAS_SRC}COMMON/IES/CsfbResponse.c + ${NAS_SRC}COMMON/IES/DaylightSavingTime.c + ${NAS_SRC}COMMON/IES/DetachType.c + ${NAS_SRC}COMMON/IES/DrxParameter.c + ${NAS_SRC}COMMON/IES/EmergencyNumberList.c + ${NAS_SRC}COMMON/IES/EmmCause.c + ${NAS_SRC}COMMON/IES/EpsAttachResult.c + ${NAS_SRC}COMMON/IES/EpsAttachType.c + ${NAS_SRC}COMMON/IES/EpsBearerContextStatus.c + ${NAS_SRC}COMMON/IES/EpsBearerIdentity.c + ${NAS_SRC}COMMON/IES/EpsMobileIdentity.c + ${NAS_SRC}COMMON/IES/EpsNetworkFeatureSupport.c + ${NAS_SRC}COMMON/IES/EpsQualityOfService.c + ${NAS_SRC}COMMON/IES/EpsUpdateResult.c + ${NAS_SRC}COMMON/IES/EpsUpdateType.c + ${NAS_SRC}COMMON/IES/EsmCause.c + ${NAS_SRC}COMMON/IES/EsmInformationTransferFlag.c + ${NAS_SRC}COMMON/IES/EsmMessageContainer.c + ${NAS_SRC}COMMON/IES/GprsTimer.c + ${NAS_SRC}COMMON/IES/GutiType.c + ${NAS_SRC}COMMON/IES/IdentityType2.c + ${NAS_SRC}COMMON/IES/ImeisvRequest.c + ${NAS_SRC}COMMON/IES/KsiAndSequenceNumber.c + ${NAS_SRC}COMMON/IES/LcsClientIdentity.c + ${NAS_SRC}COMMON/IES/LcsIndicator.c + ${NAS_SRC}COMMON/IES/LinkedEpsBearerIdentity.c + ${NAS_SRC}COMMON/IES/LlcServiceAccessPointIdentifier.c + ${NAS_SRC}COMMON/IES/LocationAreaIdentification.c + ${NAS_SRC}COMMON/IES/MessageType.c + ${NAS_SRC}COMMON/IES/MobileIdentity.c + ${NAS_SRC}COMMON/IES/MobileStationClassmark2.c + ${NAS_SRC}COMMON/IES/MobileStationClassmark3.c + ${NAS_SRC}COMMON/IES/MsNetworkCapability.c + ${NAS_SRC}COMMON/IES/MsNetworkFeatureSupport.c + ${NAS_SRC}COMMON/IES/NasKeySetIdentifier.c + ${NAS_SRC}COMMON/IES/NasMessageContainer.c + ${NAS_SRC}COMMON/IES/NasRequestType.c + ${NAS_SRC}COMMON/IES/NasSecurityAlgorithms.c + ${NAS_SRC}COMMON/IES/NetworkName.c + ${NAS_SRC}COMMON/IES/Nonce.c + ${NAS_SRC}COMMON/IES/PacketFlowIdentifier.c + ${NAS_SRC}COMMON/IES/PagingIdentity.c + ${NAS_SRC}COMMON/IES/PdnAddress.c + ${NAS_SRC}COMMON/IES/PdnType.c + ${NAS_SRC}COMMON/IES/PlmnList.c + ${NAS_SRC}COMMON/IES/ProcedureTransactionIdentity.c + ${NAS_SRC}COMMON/IES/ProtocolConfigurationOptions.c + ${NAS_SRC}COMMON/IES/ProtocolDiscriminator.c + ${NAS_SRC}COMMON/IES/PTmsiSignature.c + ${NAS_SRC}COMMON/IES/QualityOfService.c + ${NAS_SRC}COMMON/IES/RadioPriority.c + ${NAS_SRC}COMMON/IES/SecurityHeaderType.c + ${NAS_SRC}COMMON/IES/ServiceType.c + ${NAS_SRC}COMMON/IES/ShortMac.c + ${NAS_SRC}COMMON/IES/SsCode.c + ${NAS_SRC}COMMON/IES/SupportedCodecList.c + ${NAS_SRC}COMMON/IES/TimeZoneAndTime.c + ${NAS_SRC}COMMON/IES/TimeZone.c + ${NAS_SRC}COMMON/IES/TmsiStatus.c + ${NAS_SRC}COMMON/IES/TrackingAreaIdentity.c + ${NAS_SRC}COMMON/IES/TrackingAreaIdentityList.c + ${NAS_SRC}COMMON/IES/TrafficFlowAggregateDescription.c + ${NAS_SRC}COMMON/IES/TrafficFlowTemplate.c + ${NAS_SRC}COMMON/IES/TransactionIdentifier.c + ${NAS_SRC}COMMON/IES/UeNetworkCapability.c + ${NAS_SRC}COMMON/IES/UeRadioCapabilityInformationUpdateNeeded.c + ${NAS_SRC}COMMON/IES/UeSecurityCapability.c + ${NAS_SRC}COMMON/IES/VoiceDomainPreferenceAndUeUsageSetting.c ) set (libnas_utils_OBJS - ${NAS_SRC}util/device.c - ${NAS_SRC}util/memory.c - ${NAS_SRC}util/nas_log.c - ${NAS_SRC}util/nas_timer.c - ${NAS_SRC}util/socket.c - ${NAS_SRC}util/stty.c - ${NAS_SRC}util/TLVEncoder.c - ${NAS_SRC}util/TLVDecoder.c - ${NAS_SRC}util/OctetString.c + ${NAS_SRC}COMMON/UTIL/device.c + ${NAS_SRC}COMMON/UTIL/memory.c + ${NAS_SRC}COMMON/UTIL/nas_log.c + ${NAS_SRC}COMMON/UTIL/nas_timer.c + ${NAS_SRC}COMMON/UTIL/socket.c + ${NAS_SRC}COMMON/UTIL/stty.c + ${NAS_SRC}COMMON/UTIL/TLVEncoder.c + ${NAS_SRC}COMMON/UTIL/TLVDecoder.c + ${NAS_SRC}COMMON/UTIL/OctetString.c ) -set (libnas_user_OBJS - ${NAS_SRC}api/user/user_api.c - ${NAS_SRC}api/user/user_indication.c - ${NAS_SRC}api/user/at_command.c - ${NAS_SRC}api/user/at_error.c - ${NAS_SRC}api/user/at_response.c -) - -set(libnas_usim_OBJS - ${NAS_SRC}api/usim/aka_functions.c - ${NAS_SRC}api/usim/usim_api.c -) - -add_library(NAS_UE - ${OPENAIRCN_DIR}/NAS/nas_ue_task.c -) - -set(libnas_OBJS - - ${OPENAIRCN_DIR}/NAS/nas_itti_messaging.c - ${NAS_SRC}nas_parser.c - ${NAS_SRC}nas_proc.c - ${NAS_SRC}nas_user.c - ${NAS_SRC}nas_network.c - ${libnas_utils_OBJS} - ${libnas_user_OBJS} - ${libnas_usim_OBJS} - ${libnas_emm_OBJS} - ${libnas_emm_msg_OBJS} - ${libnas_emm_sap_OBJS} - ${libnas_esm_OBJS} - ${libnas_esm_msg_OBJS} - ${libnas_esm_sap_OBJS} - ${libnas_ies_OBJS} - ${libnas_api_OBJS} +if(NAS_UE) + set(libnas_ue_api_OBJS + ${NAS_SRC}UE/API/USER/at_command.c + ${NAS_SRC}UE/API/USER/at_error.c + ${NAS_SRC}UE/API/USER/at_response.c + ${NAS_SRC}UE/API/USER/user_api.c + ${NAS_SRC}UE/API/USER/user_indication.c + ${NAS_SRC}UE/API/USIM/aka_functions.c + ${NAS_SRC}UE/API/USIM/usim_api.c ) -add_library(NAS ${libnas_OBJS}) + set(libnas_ue_emm_OBJS + ${NAS_SRC}UE/EMM/Attach.c + ${NAS_SRC}UE/EMM/Authentication.c + ${NAS_SRC}UE/EMM/Detach.c + ${NAS_SRC}UE/EMM/emm_main.c + ${NAS_SRC}UE/EMM/EmmStatusHdl.c + ${NAS_SRC}UE/EMM/Identification.c + ${NAS_SRC}UE/EMM/IdleMode.c + ${NAS_SRC}UE/EMM/LowerLayer.c + ${NAS_SRC}UE/EMM/SecurityModeControl.c + ${NAS_SRC}UE/EMM/ServiceRequestHdl.c + ${NAS_SRC}UE/EMM/TrackingAreaUpdate.c + ) + set(libnas_ue_emm_sap_OBJS + ${NAS_SRC}UE/EMM/SAP/emm_as.c + ${NAS_SRC}UE/EMM/SAP/EmmDeregisteredAttachNeeded.c + ${NAS_SRC}UE/EMM/SAP/EmmDeregisteredAttemptingToAttach.c + ${NAS_SRC}UE/EMM/SAP/EmmDeregistered.c + ${NAS_SRC}UE/EMM/SAP/EmmDeregisteredInitiated.c + ${NAS_SRC}UE/EMM/SAP/EmmDeregisteredLimitedService.c + ${NAS_SRC}UE/EMM/SAP/EmmDeregisteredNoCellAvailable.c + ${NAS_SRC}UE/EMM/SAP/EmmDeregisteredNoImsi.c + ${NAS_SRC}UE/EMM/SAP/EmmDeregisteredNormalService.c + ${NAS_SRC}UE/EMM/SAP/EmmDeregisteredPlmnSearch.c + ${NAS_SRC}UE/EMM/SAP/emm_esm.c + ${NAS_SRC}UE/EMM/SAP/emm_fsm.c + ${NAS_SRC}UE/EMM/SAP/EmmNull.c + ${NAS_SRC}UE/EMM/SAP/emm_recv.c + ${NAS_SRC}UE/EMM/SAP/emm_reg.c + ${NAS_SRC}UE/EMM/SAP/EmmRegisteredAttemptingToUpdate.c + ${NAS_SRC}UE/EMM/SAP/EmmRegistered.c + ${NAS_SRC}UE/EMM/SAP/EmmRegisteredImsiDetachInitiated.c + ${NAS_SRC}UE/EMM/SAP/EmmRegisteredInitiated.c + ${NAS_SRC}UE/EMM/SAP/EmmRegisteredLimitedService.c + ${NAS_SRC}UE/EMM/SAP/EmmRegisteredNoCellAvailable.c + ${NAS_SRC}UE/EMM/SAP/EmmRegisteredNormalService.c + ${NAS_SRC}UE/EMM/SAP/EmmRegisteredPlmnSearch.c + ${NAS_SRC}UE/EMM/SAP/EmmRegisteredUpdateNeeded.c + ${NAS_SRC}UE/EMM/SAP/emm_sap.c + ${NAS_SRC}UE/EMM/SAP/emm_send.c + ${NAS_SRC}UE/EMM/SAP/EmmServiceRequestInitiated.c + ${NAS_SRC}UE/EMM/SAP/EmmTrackingAreaUpdatingInitiated.c + ) + set (libnas_ue_esm_OBJS + ${NAS_SRC}UE/ESM/DedicatedEpsBearerContextActivation.c + ${NAS_SRC}UE/ESM/DefaultEpsBearerContextActivation.c + ${NAS_SRC}UE/ESM/EpsBearerContextDeactivation.c + ${NAS_SRC}UE/ESM/esm_ebr.c + ${NAS_SRC}UE/ESM/esm_ebr_context.c + ${NAS_SRC}UE/ESM/esm_ip.c + ${NAS_SRC}UE/ESM/esm_main.c + ${NAS_SRC}UE/ESM/esm_pt.c + ${NAS_SRC}UE/ESM/EsmStatusHdl.c + ${NAS_SRC}UE/ESM/PdnConnectivity.c + ${NAS_SRC}UE/ESM/PdnDisconnect.c + ) + set(libnas_ue_esm_sap_OBJS + ${NAS_SRC}UE/ESM/SAP/esm_recv.c + ${NAS_SRC}UE/ESM/SAP/esm_send.c + ${NAS_SRC}UE/ESM/SAP/esm_sap.c + ) + add_library(LIB_NAS_UE + ${NAS_SRC}UE/nas_itti_messaging.c + ${NAS_SRC}UE/nas_network.c + ${NAS_SRC}UE/nas_parser.c + ${NAS_SRC}UE/nas_proc.c + ${NAS_SRC}UE/nas_user.c + ${libnas_api_OBJS} + ${libnas_ue_api_OBJS} + ${libnas_emm_msg_OBJS} + ${libnas_esm_msg_OBJS} + ${libnas_ies_OBJS} + ${libnas_utils_OBJS} + ${libnas_ue_emm_OBJS} + ${libnas_ue_emm_sap_OBJS} + ${libnas_ue_esm_OBJS} + ${libnas_ue_esm_sap_OBJS} + ) + set(NAS_UE_LIB LIB_NAS_UE) -if(NAS_UE) - set(NAS_LIB NAS NAS_UE) + include_directories(${NAS_SRC}UE) + include_directories(${NAS_SRC}UE/API/USER) + include_directories(${NAS_SRC}UE/API/USIM) + include_directories(${NAS_SRC}UE/EMM) + include_directories(${NAS_SRC}UE/EMM/SAP) + include_directories(${NAS_SRC}UE/ESM) + include_directories(${NAS_SRC}UE/ESM/SAP) endif() -include_directories(${NAS_SRC}) -include_directories(${NAS_SRC}/api/user) -include_directories(${NAS_SRC}/esm) -include_directories(${NAS_SRC}/esm/sap) -include_directories(${NAS_SRC}/emm) -include_directories(${NAS_SRC}/emm/sap) -include_directories(${NAS_SRC}/api/usim) -include_directories(${NAS_SRC}/api/mme) +if(NAS_MME) + set(libnas_mme_api_OBJS + ${NAS_SRC}MME/API/MME/mme_api.c + ) + set(libnas_mme_emm_OBJS + ${NAS_SRC}MME/EMM/Attach.c + ${NAS_SRC}MME/EMM/Authentication.c + ${NAS_SRC}MME/EMM/Detach.c + ${NAS_SRC}MME/EMM/EmmCommon.c + ${NAS_SRC}MME/EMM/emm_data_ctx.c + ${NAS_SRC}MME/EMM/emm_main.c + ${NAS_SRC}MME/EMM/EmmStatusHdl.c + ${NAS_SRC}MME/EMM/Identification.c + ${NAS_SRC}MME/EMM/IdleMode.c + ${NAS_SRC}MME/EMM/LowerLayer.c + ${NAS_SRC}MME/EMM/SecurityModeControl.c + ${NAS_SRC}MME/EMM/ServiceRequestHdl.c + ${NAS_SRC}MME/EMM/TrackingAreaUpdate.c + ) + set(libnas_mme_emm_sap_OBJS + ${NAS_SRC}MME/EMM/SAP/emm_as.c + ${NAS_SRC}MME/EMM/SAP/emm_cn.c + ${NAS_SRC}MME/EMM/SAP/EmmCommonProcedureInitiated.c + ${NAS_SRC}MME/EMM/SAP/EmmDeregisteredAttachNeeded.c + ${NAS_SRC}MME/EMM/SAP/EmmDeregisteredAttemptingToAttach.c + ${NAS_SRC}MME/EMM/SAP/EmmDeregistered.c + ${NAS_SRC}MME/EMM/SAP/EmmDeregisteredInitiated.c + ${NAS_SRC}MME/EMM/SAP/EmmDeregisteredLimitedService.c + ${NAS_SRC}MME/EMM/SAP/EmmDeregisteredNoCellAvailable.c + ${NAS_SRC}MME/EMM/SAP/EmmDeregisteredNoImsi.c + ${NAS_SRC}MME/EMM/SAP/EmmDeregisteredNormalService.c + ${NAS_SRC}MME/EMM/SAP/EmmDeregisteredPlmnSearch.c + ${NAS_SRC}MME/EMM/SAP/emm_esm.c + ${NAS_SRC}MME/EMM/SAP/emm_fsm.c + ${NAS_SRC}MME/EMM/SAP/EmmNull.c + ${NAS_SRC}MME/EMM/SAP/emm_recv.c + ${NAS_SRC}MME/EMM/SAP/emm_reg.c + ${NAS_SRC}MME/EMM/SAP/EmmRegisteredAttemptingToUpdate.c + ${NAS_SRC}MME/EMM/SAP/EmmRegistered.c + ${NAS_SRC}MME/EMM/SAP/EmmRegisteredImsiDetachInitiated.c + ${NAS_SRC}MME/EMM/SAP/EmmRegisteredInitiated.c + ${NAS_SRC}MME/EMM/SAP/EmmRegisteredLimitedService.c + ${NAS_SRC}MME/EMM/SAP/EmmRegisteredNoCellAvailable.c + ${NAS_SRC}MME/EMM/SAP/EmmRegisteredNormalService.c + ${NAS_SRC}MME/EMM/SAP/EmmRegisteredPlmnSearch.c + ${NAS_SRC}MME/EMM/SAP/EmmRegisteredUpdateNeeded.c + ${NAS_SRC}MME/EMM/SAP/emm_sap.c + ${NAS_SRC}MME/EMM/SAP/emm_send.c + ${NAS_SRC}MME/EMM/SAP/EmmServiceRequestInitiated.c + ${NAS_SRC}MME/EMM/SAP/EmmTrackingAreaUpdatingInitiated.c + ) + set (libnas_mme_esm_OBJS + ${NAS_SRC}MME/ESM/DedicatedEpsBearerContextActivation.c + ${NAS_SRC}MME/ESM/DefaultEpsBearerContextActivation.c + ${NAS_SRC}MME/ESM/EpsBearerContextDeactivation.c + ${NAS_SRC}MME/ESM/esm_ebr.c + ${NAS_SRC}MME/ESM/esm_ebr_context.c + ${NAS_SRC}MME/ESM/esm_ip.c + ${NAS_SRC}MME/ESM/esm_main.c + ${NAS_SRC}MME/ESM/esm_pt.c + ${NAS_SRC}MME/ESM/EsmStatusHdl.c + ${NAS_SRC}MME/ESM/PdnConnectivity.c + ${NAS_SRC}MME/ESM/PdnDisconnect.c + ) + set(libnas_mme_esm_sap_OBJS + ${NAS_SRC}MME/ESM/SAP/esm_recv.c + ${NAS_SRC}MME/ESM/SAP/esm_send.c + ${NAS_SRC}MME/ESM/SAP/esm_sap.c + ) + add_library(LIB_NAS_MME + ${NAS_SRC}MME/nas_itti_messaging.c + ${NAS_SRC}MME/nas_network.c + ${NAS_SRC}MME/nas_parser.c + ${NAS_SRC}MME/nas_proc.c + ${libnas_api_OBJS} + ${libnas_mme_api_OBJS} + ${libnas_emm_msg_OBJS} + ${libnas_esm_msg_OBJS} + ${libnas_ies_OBJS} + ${libnas_utils_OBJS} + ${libnas_mme_emm_OBJS} + ${libnas_mme_emm_sap_OBJS} + ${libnas_mme_esm_OBJS} + ${libnas_mme_esm_sap_OBJS} + ) + include_directories(${NAS_SRC}MME) + include_directories(${NAS_SRC}MME/API/MME) + include_directories(${NAS_SRC}MME/EMM) + include_directories(${NAS_SRC}MME/EMM/SAP) + include_directories(${NAS_SRC}MME/ESM) + include_directories(${NAS_SRC}MME/ESM/SAP) +endif() + + # Make lfds as a own source code (even if it is a outside library) # For better intergration with compilation flags & structure of cmake @@ -1356,7 +1486,7 @@ set(lfds ${OPENAIR2_DIR}/UTIL/LFDS/liblfds6.1.1/liblfds611/src/) file(GLOB lfds_queue ${lfds}/lfds611_queue/*.c) file(GLOB lfds_ring ${lfds}/lfds611_ringbuffer/*.c) file(GLOB lfds_slist ${lfds}/lfds611_slist/*.c) -file(GLOB lfds_stack ${lfds}/lfds611_stack/*.c/) +file(GLOB lfds_stack ${lfds}/lfds611_stack/*.c) file(GLOB lfds_freelist ${lfds}/lfds611_freelist/*.c) include_directories(${lfds}) @@ -1484,23 +1614,59 @@ add_executable(lte-softmodem ${OPENAIR1_DIR}/SIMULATION/TOOLS/taus.c ${OPENAIR_TARGETS}/SIMU/USER/init_lte.c ${OPENAIR_TARGETS}/COMMON/create_tasks.c + ${OPENAIR_TARGETS}/ARCH/COMMON/common_lib.c ${OPENAIR1_DIR}/SIMULATION/ETH_TRANSPORT/netlink_init.c + ${OPENAIRCN_DIR}/NAS/UE/nas_ue_task.c ${GTPU_need_ITTI} ${HW_SOURCE} ${RTAI_SOURCE} ${XFORMS_SOURCE} ${XFORMS_SOURCE_SOFTMODEM} ) + target_link_libraries (lte-softmodem -Wl,--start-group - RRC_LIB S1AP_LIB S1AP_ENB GTPV1U SECU_CN SECU_OSA UTIL HASHTABLE SCTP_CLIENT UDP SCHED_LIB PHY LFDS L2 ${RAL_LIB} ${NAS_LIB} ${ITTI_LIB} ${MIH_LIB} + RRC_LIB S1AP_LIB S1AP_ENB GTPV1U SECU_CN SECU_OSA UTIL HASHTABLE SCTP_CLIENT UDP SCHED_LIB PHY LFDS L2 ${MSC_LIB} ${RAL_LIB} ${NAS_UE_LIB} ${ITTI_LIB} ${MIH_LIB} -Wl,--end-group ) + + target_link_libraries (lte-softmodem ${LIBXML2_LIBRARIES}) target_link_libraries (lte-softmodem pthread m ${CONFIG_LIBRARIES} rt crypt ${CRYPTO_LIBRARIES} ${OPENSSL_LIBRARIES} ${NETTLE_LIBRARIES} sctp ${option_HW_lib} ${XFORMS_LIBRARIES} ) target_link_libraries (lte-softmodem ${LIBBOOST_LIBRARIES}) -if (MESSAGE_CHART_GENERATOR) - target_link_libraries (lte-softmodem MSC) -endif() + +# lte-softmodem-nos1 is both eNB and UE implementation +################################################### +add_executable(lte-softmodem-nos1 + ${rrc_h} + ${s1ap_h} + ${OPENAIR_BIN_DIR}/messages_xml.h + ${OPENAIR_TARGETS}/RT/USER/sched_dlsch.c + ${OPENAIR_TARGETS}/RT/USER/sched_rx_pdsch.c + ${OPENAIR_TARGETS}/RT/USER/rt_wrapper.c + ${OPENAIR_TARGETS}/RT/USER/lte-ue.c + ${OPENAIR_TARGETS}/RT/USER/lte-softmodem.c + ${OPENAIR1_DIR}/SIMULATION/TOOLS/taus.c + ${OPENAIR_TARGETS}/SIMU/USER/init_lte.c + ${OPENAIR_TARGETS}/COMMON/create_tasks.c + ${OPENAIR_TARGETS}/ARCH/COMMON/common_lib.c + #${OPENAIR2_DIR}/RRC/NAS/nas_config.c # enable if you want rrc to mount ip interface + #${OPENAIR2_DIR}/RRC/NAS/rb_config.c + ${OPENAIR1_DIR}/SIMULATION/ETH_TRANSPORT/netlink_init.c + ${HW_SOURCE} + ${RTAI_SOURCE} + ${XFORMS_SOURCE} + ${XFORMS_SOURCE_SOFTMODEM} + ) +target_link_libraries (lte-softmodem-nos1 + -Wl,--start-group + RRC_LIB SECU_CN SECU_OSA UTIL HASHTABLE SCHED_LIB PHY LFDS L2 ${MSC_LIB} ${RAL_LIB} ${ITTI_LIB} ${MIH_LIB} + -Wl,--end-group ) + +target_link_libraries (lte-softmodem-nos1 ${LIBXML2_LIBRARIES}) +target_link_libraries (lte-softmodem-nos1 pthread m ${CONFIG_LIBRARIES} rt crypt ${CRYPTO_LIBRARIES} ${OPENSSL_LIBRARIES} ${NETTLE_LIBRARIES} ${option_HW_lib} ${XFORMS_LIBRARIES} ) +target_link_libraries (lte-softmodem-nos1 ${LIBBOOST_LIBRARIES}) + + # EPC is ??? nodes implementation in one process ################################ @@ -1510,17 +1676,15 @@ add_executable(mme_gw ${OPENAIRCN_DIR}/OAI_EPC/oai_epc.c ${GTPV1U_DIR}/gtpv1u_task.c ${OPENAIRCN_DIR}/SCTP/sctp_primitives_server.c - ${OPENAIRCN_DIR}/NAS/nas_main.c + ${OPENAIRCN_DIR}/NAS/MME/nas_mme_task.c ) target_link_libraries (mme_gw -Wl,--start-group - NAS S1AP_LIB S1AP_EPC GTPV1U GTPV2C SCTP_SERVER UDP_SERVER SECU_CN SECU_OSA SGI S6A SGW MME_APP LFDS ${ITTI_LIB} CN_UTILS HASHTABLE + LIB_NAS_MME S1AP_LIB S1AP_EPC GTPV1U GTPV2C SCTP_SERVER UDP_SERVER SECU_CN SECU_OSA S6A SGW MME_APP LFDS ${MSC_LIB} ${ITTI_LIB} CN_UTILS HASHTABLE -Wl,--end-group pthread m sctp rt crypt ${CRYPTO_LIBRARIES} ${OPENSSL_LIBRARIES} ${NETTLE_LIBRARIES} ${CONFIG_LIBRARIES} fdproto fdcore ) -if (MESSAGE_CHART_GENERATOR) - target_link_libraries (mme_gw MSC) -endif() + # Default parameters # Does not work on simple install (fqdn in /etc/hosts 127.0.1.1) @@ -1603,35 +1767,62 @@ add_executable(oai_sgw ) target_link_libraries (oai_sgw -Wl,--start-group - GTPV1U SECU_CN SECU_OSA SGI S6A SGW CN_UTILS LFDS ${ITTI_LIB} + GTPV1U SECU_CN SECU_OSA S6A SGW CN_UTILS LFDS ${MSC_LIB} ${ITTI_LIB} -Wl,--end-group pthread m sctp rt crypt ${CRYPTO_LIBRARIES} ${OPENSSL_LIBRARIES} ${NETTLE_LIBRARIES} ${CONFIG_LIBRARIES} fdproto fdcore ) -if (MESSAGE_CHART_GENERATOR) - target_link_libraries (oai_sgw MSC) -endif() + + + +# rrh +################################ +set(DRIVER2013) + +#Note: only on RF type is currently supported for RRH +add_executable(rrh_gw + ${OPENAIR_TARGETS}/RT/USER/rrh_gw.c + ${OPENAIR_TARGETS}/RT/USER/eNB_transport_IQ.c + ${OPENAIR_TARGETS}/RT/USER/UE_transport_IQ.c + ${OPENAIR_TARGETS}/RT/USER/rt_wrapper.c + ${OPENAIR_TARGETS}/ARCH/COMMON/common_lib.c + ${OPENAIR_TARGETS}/ARCH/ETHERNET/USERSPACE/LIB/ethernet_lib.c + ${HW_SOURCE} + ) +# assert and common_lib.h +target_include_directories(rrh_gw PRIVATE ${OPENAIR_DIR}/common/utils/itti ${OPENAIR_TARGETS}/ARCH/COMMON ${OPENAIR_TARGETS}/ARCH/ETHERNET/USERSPACE/LIB/ ) + +target_link_libraries(rrh_gw + -Wl,--start-group + UTIL LFDS + -Wl,--end-group ) +target_link_libraries (rrh_gw rt pthread m ) +target_link_libraries (rrh_gw ${option_HW_lib} ${LIBBOOST_LIBRARIES} ) + +#Message("-- default_HW_lib=ETHERNET") # only in case of RRH +Message("-- option_HW_lib=${option_HW_lib}") +Message("-- HW_SOURCE=${HW_SOURCE}") # USIM process ################# #add_executable(usim -# ${OPENAIRCN_DIR}/NAS/EURECOM-NAS/tools/usim_data.c -# ${OPENAIRCN_DIR}/NAS/EURECOM-NAS/src/api/usim/usim_api.c -# ${OPENAIRCN_DIR}/NAS/EURECOM-NAS/src/api/usim/aka_functions.c -# ${OPENAIRCN_DIR}/NAS/EURECOM-NAS/src/util/memory.c -# ${OPENAIRCN_DIR}/NAS/EURECOM-NAS/src/util/nas_log.c -# ${OPENAIRCN_DIR}/NAS/EURECOM-NAS/src/util/OctetString.c -# ${OPENAIRCN_DIR}/NAS/EURECOM-NAS/src/util/TLVEncoder.c +# ${OPENAIRCN_DIR}/NAS/TOOLS/usim_data.c +# ${OPENAIRCN_DIR}/NAS/USER/API/USIM/usim_api.c +# ${OPENAIRCN_DIR}/NAS/USER/API/USIM/aka_functions.c +# ${OPENAIRCN_DIR}/NAS/COMMON/UTIL/memory.c +# ${OPENAIRCN_DIR}/NAS/COMMON/UTIL/nas_log.c +# ${OPENAIRCN_DIR}/NAS/COMMON/UTIL/OctetString.c +# ${OPENAIRCN_DIR}/NAS/COMMON/UTIL/TLVEncoder.c # ) #target_link_libraries (usim ${NAS_LIB} UTIL ${ITTI_LIB} LFDS pthread rt nettle crypto m) # ??? ##################### #add_executable(nvram -# ${OPENAIRCN_DIR}/NAS/EURECOM-NAS/tools/ue_data.c -# ${OPENAIRCN_DIR}/NAS/EURECOM-NAS/src/util/memory.c -# ${OPENAIRCN_DIR}/NAS/EURECOM-NAS/src/util/nas_log.c +# ${OPENAIRCN_DIR}/NAS/TOOLS/ue_data.c +# ${OPENAIRCN_DIR}/NAS/COMMON/UTIL/memory.c +# ${OPENAIRCN_DIR}/NAS/COMMON/UTIL/nas_log.c # ) -#target_link_libraries (nvram ${NAS_LIB} UTIL ${ITTI_LIB} LFDS pthread rt nettle crypto m) +#target_link_libraries (nvram LIB_NAS_UE UTIL ${ITTI_LIB} LFDS pthread rt nettle crypto m) ###################################" @@ -1643,6 +1834,7 @@ endif() add_executable(oaisim ${rrc_h} ${s1ap_h} + ${x2ap_h} ${OPENAIR_BIN_DIR}/messages_xml.h ${OPENAIR_TARGETS}/SIMU/USER/channel_sim.c ${OPENAIR_TARGETS}/SIMU/USER/init_lte.c @@ -1655,24 +1847,26 @@ add_executable(oaisim ${OPENAIR2_DIR}/RRC/NAS/nas_config.c ${OPENAIR2_DIR}/RRC/NAS/rb_config.c ${OPENAIR2_DIR}/UTIL/OMG/sumo.c + ${OPENAIRCN_DIR}/NAS/UE/nas_ue_task.c ${GTPU_need_ITTI} ${OPENAIR_TARGETS}/COMMON/create_tasks.c ${HW_SOURCE} ${XFORMS_SOURCE} ) + + target_include_directories(oaisim PUBLIC ${OPENAIR_TARGETS}/SIMU/USER) target_link_libraries (oaisim -Wl,--start-group - RRC_LIB S1AP_LIB S1AP_ENB GTPV1U SECU_CN UTIL HASHTABLE SCTP_CLIENT UDP SCHED_LIB PHY LFDS L2 ${RAL_LIB} ${NAS_LIB} SIMU SIMU_ETH SECU_OSA ${ITTI_LIB} ${MIH_LIB} + RRC_LIB S1AP_LIB S1AP_ENB X2AP_LIB GTPV1U SECU_CN UTIL HASHTABLE SCTP_CLIENT UDP SCHED_LIB PHY LFDS ${MSC_LIB} L2 ${RAL_LIB} LIB_NAS_UE SIMU SIMU_ETH SECU_OSA ${ITTI_LIB} ${MIH_LIB} -Wl,--end-group ) + target_link_libraries (oaisim ${LIBXML2_LIBRARIES} ${LAPACK_LIBRARIES}) target_link_libraries (oaisim pthread m ${CONFIG_LIBRARIES} rt crypt ${CRYPTO_LIBRARIES} ${OPENSSL_LIBRARIES} ${NETTLE_LIBRARIES} sctp ${option_HW_lib} ${ATLAS_LIBRARIES} ${XFORMS_LIBRARIES} ${OPENPGM_LIBRARIES}) #Force link with forms, regardless XFORMS option target_link_libraries (oaisim forms) -if (MESSAGE_CHART_GENERATOR) - target_link_libraries (oaisim MSC) -endif() + # A all in one network simulator @@ -1680,6 +1874,7 @@ endif() add_executable(oaisim_nos1 ${rrc_h} ${s1ap_h} + ${x2ap_h} ${OPENAIR_BIN_DIR}/messages_xml.h ${OPENAIR_TARGETS}/SIMU/USER/channel_sim.c ${OPENAIR_TARGETS}/SIMU/USER/init_lte.c @@ -1699,16 +1894,14 @@ add_executable(oaisim_nos1 target_include_directories(oaisim_nos1 PUBLIC ${OPENAIR_TARGETS}/SIMU/USER) target_link_libraries (oaisim_nos1 -Wl,--start-group - RRC_LIB SECU_CN UTIL HASHTABLE UDP SCHED_LIB PHY LFDS L2 ${RAL_LIB} ${NAS_LIB} SIMU SIMU_ETH SECU_OSA ${ITTI_LIB} ${MIH_LIB} + RRC_LIB X2AP_LIB SECU_CN UTIL HASHTABLE SCHED_LIB PHY LFDS ${MSC_LIB} L2 ${RAL_LIB} SIMU SIMU_ETH SECU_OSA ${ITTI_LIB} ${MIH_LIB} -Wl,--end-group ) + target_link_libraries (oaisim_nos1 ${LIBXML2_LIBRARIES} ${LAPACK_LIBRARIES}) target_link_libraries (oaisim_nos1 pthread m ${CONFIG_LIBRARIES} rt crypt ${CRYPTO_LIBRARIES} ${OPENSSL_LIBRARIES} ${NETTLE_LIBRARIES} ${option_HW_lib} ${ATLAS_LIBRARIES} ${XFORMS_LIBRARIES} ${OPENPGM_LIBRARIES}) #Force link with forms, regardless XFORMS option target_link_libraries (oaisim_nos1 forms) -if (MESSAGE_CHART_GENERATOR) - target_link_libraries (oaisim_nos1 MSC) -endif() # Unitary tests for each piece of L1: example, mbmssim is MBMS L1 simulator @@ -1716,11 +1909,12 @@ endif() foreach(myExe dlsim ulsim pbchsim scansim mbmssim pdcchsim pucchsim prachsim syncsim) add_executable(${myExe} + ${OPENAIR_BIN_DIR}/messages_xml.h ${OPENAIR1_DIR}/SIMULATION/LTE_PHY/${myExe}.c ${XFORMS_SOURCE} ) target_link_libraries (${myExe} - -Wl,--start-group SIMU UTIL SCHED_LIB PHY LFDS MSC ${ITTI_LIB} -Wl,--end-group + -Wl,--start-group SIMU UTIL SCHED_LIB PHY LFDS ${ITTI_LIB} -Wl,--end-group pthread m rt ${CONFIG_LIBRARIES} ${ATLAS_LIBRARIES} ${XFORMS_LIBRARIES} ) endforeach(myExe) @@ -1750,13 +1944,21 @@ add_executable(test_s1c_mme ${OPENAIRCN_DIR}/TEST/oaisim_mme_test_s1c.c ${OPENAIRCN_DIR}/TEST/oaisim_mme_test_s1c_scenario.h ${OPENAIRCN_DIR}/TEST/oaisim_mme_test_s1c_scenario1.c + ${OPENAIRCN_DIR}/TEST/oaisim_mme_test_s1c_scenario.c + ${OPENAIRCN_DIR}/TEST/oaisim_mme_test_s1c_scenario.h + ${OPENAIRCN_DIR}/TEST/oaisim_mme_test_s1c_s1ap.c + ${OPENAIRCN_DIR}/TEST/oaisim_mme_test_s1c_s1ap.h ${OPENAIR2_DIR}/ENB_APP/enb_config.c ${OPENAIR2_DIR}/ENB_APP/enb_config.h - ${s1ap_h} + ${OPENAIR2_DIR}/COMMON/commonDef.h + ${OPENAIR2_DIR}/COMMON/messages_def.h + ${OPENAIR2_DIR}/COMMON/messages_types.h + ${OPENAIRCN_DIR}/S1AP/s1ap_eNB_defs.h + ${S1AP_DIR}/s1ap_eNB_management_procedures.c ${OPENAIR_BIN_DIR}/messages_xml.h ) target_link_libraries (test_s1c_mme - -Wl,--start-group SECU_CN S1AP_LIB S1AP_ENB SCTP_CLIENT UTIL LFDS ${ITTI_LIB} -Wl,--end-group pthread m rt crypt sctp ${LIBXML2_LIBRARIES} ${CRYPTO_LIBRARIES} ${OPENSSL_LIBRARIES} ${NETTLE_LIBRARIES} ${CONFIG_LIBRARIES} fdproto fdcore + -Wl,--start-group SECU_CN S1AP_LIB SCTP_CLIENT UTIL LFDS ${ITTI_LIB} -Wl,--end-group pthread m rt crypt sctp ${LIBXML2_LIBRARIES} ${CRYPTO_LIBRARIES} ${OPENSSL_LIBRARIES} ${NETTLE_LIBRARIES} ${CONFIG_LIBRARIES} fdproto fdcore ) @@ -1767,21 +1969,19 @@ target_link_libraries (test_s1c_mme # ??? ########################### -add_executable(oaisim_mme - ${OPENAIR_BIN_DIR}/messages_xml.h - ${OPENAIRCN_DIR}/OAISIM_MME/oai_mme_log.c - ${OPENAIRCN_DIR}/OAISIM_MME/oaisim_mme.c - ${OPENAIRCN_DIR}/NAS/nas_main.c -) -target_link_libraries (oaisim_mme - -Wl,--start-group - NAS S1AP_LIB S1AP_EPC GTPV1U GTPV2C SCTP_SERVER UDP_SERVER SECU_CN SECU_OSA SGI S6A S11 SGW MME_APP LFDS MSC ${ITTI_LIB} CN_UTILS HASHTABLE - -Wl,--end-group - pthread m sctp rt crypt ${CRYPTO_LIBRARIES} ${OPENSSL_LIBRARIES} ${NETTLE_LIBRARIES} ${CONFIG_LIBRARIES} fdproto fdcore -) -if (MESSAGE_CHART_GENERATOR) - target_link_libraries (oaisim_mme MSC) -endif() +#add_executable(oaisim_mme +# ${OPENAIR_BIN_DIR}/messages_xml.h +# ${OPENAIRCN_DIR}/OAISIM_MME/oai_mme_log.c +# ${OPENAIRCN_DIR}/OAISIM_MME/oaisim_mme.c +# ${OPENAIRCN_DIR}/NAS/nas_main.c +#) +#target_link_libraries (oaisim_mme +# -Wl,--start-group +# NAS S1AP_LIB S1AP_EPC GTPV1U GTPV2C SCTP_SERVER UDP_SERVER SECU_CN SECU_OSA S6A S11 SGW MME_APP LFDS MSC ${ITTI_LIB} CN_UTILS HASHTABLE +# -Wl,--end-group +# pthread m sctp rt crypt ${CRYPTO_LIBRARIES} ${OPENSSL_LIBRARIES} ${NETTLE_LIBRARIES} ${CONFIG_LIBRARIES} fdproto fdcore +#) + ################################################## # Generated specific cases is not regular code @@ -1914,7 +2114,7 @@ make_driver(ue_ip ${OPENAIR2_DIR}/NETWORK_DRIVER/UE_IP ${ue_ip_src}) ######################## # KVERSION is not used in the code, but required set(module_cc_opt "${module_cc_opt} -DKVERSION=3") -make_driver(xt_GTPUAH ${OPENAIRCN_DIR}/GTPV1-U/GTPUAH "") +make_driver(xt_GTPUSP ${OPENAIRCN_DIR}/GTPV1-U/GTPU_SP "") # add the install targets #install (TARGETS Tutorial DESTINATION bin) @@ -1953,3 +2153,37 @@ ADD_CUSTOM_TARGET(oarf DEPENDS ${OCT_FILES} ) +#CMAKE INSTALL and CPACK + +#INSTALL(PROGRAMS lte-softmodem ${OPENAIR_DIR}/targets DESTINATION bin) +#INSTALL(PROGRAMS oaisim ${OPENAIR_DIR}/targets DESTINATION bin) + + +#SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "OpenAirInterface") +#SET(CPACK_PACKAGE_VENDOR "Eurecom") +#SET(CPACK_PACKAGE_DESCRIPTION_FILE "${OPENAIR_DIR}/README.txt") +#SET(CPACK_RESOURCE_FILE_LICENSE "${OPENAIR_DIR}/COPYING") +#SET(CPACK_PACKAGE_VERSION_MAJOR "1") +#SET(CPACK_PACKAGE_VERSION_MINOR "1") +#SET(CPACK_PACKAGE_VERSION_PATCH "1") + +#SET(CPACK_PACKAGE_INSTALL_DIRECTORY "CMake ${CMake_VERSION_MAJOR}.${CMake_VERSION_MINOR}") +#SET(CPACK_STRIP_FILES "${OPENAIR_TARGETS}/bin") +#SET(CPACK_SOURCE_STRIP_FILES "") + +##debian specific +#SET(CPACK_DEBIAN_PACKAGE_NAME "OAI") +#SET(CPACK_DEBIAN_PACKAGE_VERSION "${CMake_VERSION_MAJOR}.${CMake_VERSION_MINOR}") +##dpkg --print-architecture (do not use i686 +#SET(CPACK_DEBIAN_PACKAGE_ARCHITECTURE "amd64") + +#SET(CPACK_DEBIAN_PACKAGE_DEPENDS "libc6 (>= 2.3.1-6), libgcc1 (>= 1:3.4.2-12)") +#SET(CPACK_DEBIAN_PACKAGE_DEPENDS "libpthread.so.0 libm.so.6 libconfig.so.9 librt.so.1 libcrypt.so.1 libcrypto.so.1.0.0 libnettle.so.4 libsctp.so.1 libc.so.6") +#SET(CPACK_DEBIAN_PACKAGE_MAINTAINER "EURECOM-OSA") + +#SET(CPACK_PACKAGE_EXECUTABLES "lte-softmodem" "mme_gw.Rel10" "openair-hss") + +#SET(CPACK_DEBIAN_PACKAGE_DESCRIPTION "OpenAirInterface") +#SET(CPACK_DEBIAN_PACKAGE_Section "Beta-Release") + +#INCLUDE(CPack) diff --git a/cmake_targets/at_commands/CMakeLists.txt b/cmake_targets/at_commands/CMakeLists.txt index 83180c41f9..cfdb6ec2aa 100755 --- a/cmake_targets/at_commands/CMakeLists.txt +++ b/cmake_targets/at_commands/CMakeLists.txt @@ -15,7 +15,7 @@ # You should have received a copy of the GNU General Public License # along with OpenAirInterface.The full GNU General Public License is # included in this distribution in the file called "COPYING". If not, -# see . +# see . # # Contact Information # OpenAirInterface Admin: openair_admin@eurecom.fr @@ -51,7 +51,7 @@ set(OPENAIRCN_DIR ${OPENAIR_DIR}/openair-cn) set(OPENAIR_TARGETS ${OPENAIR_DIR}/targets) set(OPENAIR_CMAKE_SCRIPTS ${OPENAIR_DIR}/cmake_targets/tools) set(OPENAIR_BIN_DIR ${OPENAIR_DIR}/targets/bin) -set(OPENAIR_NAS_DIR ${OPENAIR_DIR}/openair-cn/NAS/EURECOM-NAS) +set(OPENAIR_NAS_DIR ${OPENAIR_DIR}/openair-cn/NAS) set(CMAKE_MODULE_PATH "${OPENAIR_DIR}/cmake_targets/tools/MODULES" "${CMAKE_MODULE_PATH}") @@ -151,229 +151,229 @@ target_include_directories(secu_cn PRIVATE # UTIL LIB ################################################################################ set(util_SRC - ${OPENAIR_NAS_DIR}/src/util/device.c - ${OPENAIR_NAS_DIR}/src/util/memory.c - ${OPENAIR_NAS_DIR}/src/util/nas_log.c - ${OPENAIR_NAS_DIR}/src/util/nas_timer.c - ${OPENAIR_NAS_DIR}/src/util/OctetString.c - ${OPENAIR_NAS_DIR}/src/util/parser.c - ${OPENAIR_NAS_DIR}/src/util/TLVDecoder.c - ${OPENAIR_NAS_DIR}/src/util/TLVEncoder.c - ${OPENAIR_NAS_DIR}/src/util/socket.c - ${OPENAIR_NAS_DIR}/src/util/stty.c + ${OPENAIR_NAS_DIR}/COMMON/UTIL/device.c + ${OPENAIR_NAS_DIR}/COMMON/UTIL/memory.c + ${OPENAIR_NAS_DIR}/COMMON/UTIL/nas_log.c + ${OPENAIR_NAS_DIR}/COMMON/UTIL/nas_timer.c + ${OPENAIR_NAS_DIR}/COMMON/UTIL/OctetString.c + ${OPENAIR_NAS_DIR}/COMMON/UTIL/parser.c + ${OPENAIR_NAS_DIR}/COMMON/UTIL/TLVDecoder.c + ${OPENAIR_NAS_DIR}/COMMON/UTIL/TLVEncoder.c + ${OPENAIR_NAS_DIR}/COMMON/UTIL/socket.c + ${OPENAIR_NAS_DIR}/COMMON/UTIL/stty.c ) set(util_HDR - ${OPENAIR_NAS_DIR}/src/util/device.h - ${OPENAIR_NAS_DIR}/src/util/memory.h - ${OPENAIR_NAS_DIR}/src/util/nas_log.h - ${OPENAIR_NAS_DIR}/src/util/nas_timer.h - ${OPENAIR_NAS_DIR}/src/util/OctetString.h - ${OPENAIR_NAS_DIR}/src/util/parser.h - ${OPENAIR_NAS_DIR}/src/util/TLVDecoder.h - ${OPENAIR_NAS_DIR}/src/util/TLVEncoder.h - ${OPENAIR_NAS_DIR}/src/util/socket.h + ${OPENAIR_NAS_DIR}/COMMON/UTIL/device.h + ${OPENAIR_NAS_DIR}/COMMON/UTIL/memory.h + ${OPENAIR_NAS_DIR}/COMMON/UTIL/nas_log.h + ${OPENAIR_NAS_DIR}/COMMON/UTIL/nas_timer.h + ${OPENAIR_NAS_DIR}/COMMON/UTIL/OctetString.h + ${OPENAIR_NAS_DIR}/COMMON/UTIL/parser.h + ${OPENAIR_NAS_DIR}/COMMON/UTIL/TLVDecoder.h + ${OPENAIR_NAS_DIR}/COMMON/UTIL/TLVEncoder.h + ${OPENAIR_NAS_DIR}/COMMON/UTIL/socket.h ) add_library(util ${util_SRC} ${util_HDR}) -target_include_directories(util PRIVATE ${OPENAIR_NAS_DIR}/src/util) +target_include_directories(util PRIVATE ${OPENAIR_NAS_DIR}/COMMON/UTIL + ${OPENAIR_NAS_DIR}/COMMON + ) ################################################################################ # api_user LIB ################################################################################ set(api_user_SRC - ${OPENAIR_NAS_DIR}/src/api/user/at_command.c - ${OPENAIR_NAS_DIR}/src/api/user/at_error.c - ${OPENAIR_NAS_DIR}/src/api/user/at_response.c - ${OPENAIR_NAS_DIR}/src/api/user/user_api.c - ${OPENAIR_NAS_DIR}/src/api/user/user_indication.c + ${OPENAIR_NAS_DIR}/UE/API/USER/at_command.c + ${OPENAIR_NAS_DIR}/UE/API/USER/at_error.c + ${OPENAIR_NAS_DIR}/UE/API/USER/at_response.c + ${OPENAIR_NAS_DIR}/UE/API/USER/user_api.c + ${OPENAIR_NAS_DIR}/UE/API/USER/user_indication.c ) set(api_user_HDR - ${OPENAIR_NAS_DIR}/src/api/user/at_command.h - ${OPENAIR_NAS_DIR}/src/api/user/at_error.h - ${OPENAIR_NAS_DIR}/src/api/user/at_response.h - ${OPENAIR_NAS_DIR}/src/api/user/user_api.h - ${OPENAIR_NAS_DIR}/src/api/user/user_indication.h + ${OPENAIR_NAS_DIR}/UE/API/USER/at_command.h + ${OPENAIR_NAS_DIR}/UE/API/USER/at_error.h + ${OPENAIR_NAS_DIR}/UE/API/USER/at_response.h + ${OPENAIR_NAS_DIR}/UE/API/USER/user_api.h + ${OPENAIR_NAS_DIR}/UE/API/USER/user_indication.h ) add_library(api_user ${api_user_SRC} ${api_user_HDR}) -target_include_directories(api_user PRIVATE ${OPENAIR_NAS_DIR}/src/api/user) +target_include_directories(api_user PRIVATE ${OPENAIR_NAS_DIR}/UE/API/USER + ${OPENAIR_NAS_DIR}/UE + ${OPENAIR_NAS_DIR}/COMMON + ) ################################################################################ # api_usim LIB ################################################################################ set(api_usim_SRC - ${OPENAIR_NAS_DIR}/src/api/usim/aka_functions.c - ${OPENAIR_NAS_DIR}/src/api/usim/usim_api.c + ${OPENAIR_NAS_DIR}/UE/API/USIM/aka_functions.c + ${OPENAIR_NAS_DIR}/UE/API/USIM/usim_api.c ) set(api_usim_HDR - ${OPENAIR_NAS_DIR}/src/api/usim/aka_functions.h - ${OPENAIR_NAS_DIR}/src/api/usim/usim_api.h + ${OPENAIR_NAS_DIR}/UE/API/USIM/aka_functions.h + ${OPENAIR_NAS_DIR}/UE/API/USIM/usim_api.h ) add_library(api_usim ${api_usim_SRC} ${api_usim_HDR}) -target_include_directories(api_usim PRIVATE ${OPENAIR_NAS_DIR}/src/api/usim) +target_include_directories(api_usim PRIVATE ${OPENAIR_NAS_DIR}/UE/API/USIM) ################################################################################ # api_network LIB ################################################################################ set(api_network_SRC - ${OPENAIR_NAS_DIR}/src/api/network/as_message.c - ${OPENAIR_NAS_DIR}/src/api/network/nas_message.c - ${OPENAIR_NAS_DIR}/src/api/network/network_api.c + ${OPENAIR_NAS_DIR}/COMMON/API/NETWORK/as_message.c + ${OPENAIR_NAS_DIR}/COMMON/API/NETWORK/nas_message.c + ${OPENAIR_NAS_DIR}/COMMON/API/NETWORK/network_api.c ) set(api_network_HDR - ${OPENAIR_NAS_DIR}/src/api/network/as_message.h - ${OPENAIR_NAS_DIR}/src/api/network/nas_message.h - ${OPENAIR_NAS_DIR}/src/api/network/network_api.h + ${OPENAIR_NAS_DIR}/COMMON/API/NETWORK/as_message.h + ${OPENAIR_NAS_DIR}/COMMON/API/NETWORK/nas_message.h + ${OPENAIR_NAS_DIR}/COMMON/API/NETWORK/network_api.h ) add_library(api_network ${api_network_SRC} ${api_network_HDR}) -target_include_directories(api_network PRIVATE ${OPENAIR_NAS_DIR}/src/api/network) +target_include_directories(api_network PRIVATE ${OPENAIR_NAS_DIR}/COMMON/API/NETWORK + ${OPENAIR_NAS_DIR}/COMMON + ) ################################################################################ # emm LIB ################################################################################ set(emm_SRC - ${OPENAIR_NAS_DIR}/src/emm//Attach.c - ${OPENAIR_NAS_DIR}/src/emm//Authentication.c - ${OPENAIR_NAS_DIR}/src/emm//Detach.c - ${OPENAIR_NAS_DIR}/src/emm//EmmCommon.c - ${OPENAIR_NAS_DIR}/src/emm//emm_data_ctx.c - ${OPENAIR_NAS_DIR}/src/emm//emm_main.c - ${OPENAIR_NAS_DIR}/src/emm//EmmStatusHdl.c - ${OPENAIR_NAS_DIR}/src/emm//Identification.c - ${OPENAIR_NAS_DIR}/src/emm//IdleMode.c - ${OPENAIR_NAS_DIR}/src/emm//LowerLayer.c - ${OPENAIR_NAS_DIR}/src/emm//SecurityModeControl.c - ${OPENAIR_NAS_DIR}/src/emm//ServiceRequestHdl.c - ${OPENAIR_NAS_DIR}/src/emm//TrackingAreaUpdate.c + ${OPENAIR_NAS_DIR}/UE/EMM/Attach.c + ${OPENAIR_NAS_DIR}/UE/EMM/Authentication.c + ${OPENAIR_NAS_DIR}/UE/EMM/Detach.c + ${OPENAIR_NAS_DIR}/UE/EMM/emm_main.c + ${OPENAIR_NAS_DIR}/UE/EMM/EmmStatusHdl.c + ${OPENAIR_NAS_DIR}/UE/EMM/Identification.c + ${OPENAIR_NAS_DIR}/UE/EMM/IdleMode.c + ${OPENAIR_NAS_DIR}/UE/EMM/LowerLayer.c + ${OPENAIR_NAS_DIR}/UE/EMM/SecurityModeControl.c + ${OPENAIR_NAS_DIR}/UE/EMM/ServiceRequestHdl.c + ${OPENAIR_NAS_DIR}/UE/EMM/TrackingAreaUpdate.c - ${OPENAIR_NAS_DIR}/src/emm/msg/emm_msg.c - ${OPENAIR_NAS_DIR}/src/emm/msg/AttachAccept.c - ${OPENAIR_NAS_DIR}/src/emm/msg/AttachComplete.c - ${OPENAIR_NAS_DIR}/src/emm/msg/AttachReject.c - ${OPENAIR_NAS_DIR}/src/emm/msg/AttachAccept.c - ${OPENAIR_NAS_DIR}/src/emm/msg/AttachComplete.c - ${OPENAIR_NAS_DIR}/src/emm/msg/AttachReject.c - ${OPENAIR_NAS_DIR}/src/emm/msg/AttachRequest.c - ${OPENAIR_NAS_DIR}/src/emm/msg/AuthenticationFailure.c - ${OPENAIR_NAS_DIR}/src/emm/msg/AuthenticationReject.c - ${OPENAIR_NAS_DIR}/src/emm/msg/AuthenticationRequest.c - ${OPENAIR_NAS_DIR}/src/emm/msg/AuthenticationResponse.c - ${OPENAIR_NAS_DIR}/src/emm/msg/CsServiceNotification.c - ${OPENAIR_NAS_DIR}/src/emm/msg/DetachAccept.c - ${OPENAIR_NAS_DIR}/src/emm/msg/DetachRequest.c - ${OPENAIR_NAS_DIR}/src/emm/msg/DownlinkNasTransport.c - ${OPENAIR_NAS_DIR}/src/emm/msg/EmmInformation.c - ${OPENAIR_NAS_DIR}/src/emm/msg/emm_msg.c - ${OPENAIR_NAS_DIR}/src/emm/msg/EmmStatus.c - ${OPENAIR_NAS_DIR}/src/emm/msg/ExtendedServiceRequest.c - ${OPENAIR_NAS_DIR}/src/emm/msg/GutiReallocationCommand.c - ${OPENAIR_NAS_DIR}/src/emm/msg/GutiReallocationComplete.c - ${OPENAIR_NAS_DIR}/src/emm/msg/IdentityRequest.c - ${OPENAIR_NAS_DIR}/src/emm/msg/IdentityResponse.c - ${OPENAIR_NAS_DIR}/src/emm/msg/SecurityModeCommand.c - ${OPENAIR_NAS_DIR}/src/emm/msg/SecurityModeComplete.c - ${OPENAIR_NAS_DIR}/src/emm/msg/SecurityModeReject.c - ${OPENAIR_NAS_DIR}/src/emm/msg/ServiceReject.c - ${OPENAIR_NAS_DIR}/src/emm/msg/ServiceRequest.c - ${OPENAIR_NAS_DIR}/src/emm/msg/TrackingAreaUpdateAccept.c - ${OPENAIR_NAS_DIR}/src/emm/msg/TrackingAreaUpdateComplete.c - ${OPENAIR_NAS_DIR}/src/emm/msg/TrackingAreaUpdateReject.c - ${OPENAIR_NAS_DIR}/src/emm/msg/TrackingAreaUpdateRequest.c - ${OPENAIR_NAS_DIR}/src/emm/msg/UplinkNasTransport.c + ${OPENAIR_NAS_DIR}/COMMON/EMM/MSG/emm_msg.c + ${OPENAIR_NAS_DIR}/COMMON/EMM/MSG/AttachAccept.c + ${OPENAIR_NAS_DIR}/COMMON/EMM/MSG/AttachComplete.c + ${OPENAIR_NAS_DIR}/COMMON/EMM/MSG/AttachReject.c + ${OPENAIR_NAS_DIR}/COMMON/EMM/MSG/AttachAccept.c + ${OPENAIR_NAS_DIR}/COMMON/EMM/MSG/AttachComplete.c + ${OPENAIR_NAS_DIR}/COMMON/EMM/MSG/AttachReject.c + ${OPENAIR_NAS_DIR}/COMMON/EMM/MSG/AttachRequest.c + ${OPENAIR_NAS_DIR}/COMMON/EMM/MSG/AuthenticationFailure.c + ${OPENAIR_NAS_DIR}/COMMON/EMM/MSG/AuthenticationReject.c + ${OPENAIR_NAS_DIR}/COMMON/EMM/MSG/AuthenticationRequest.c + ${OPENAIR_NAS_DIR}/COMMON/EMM/MSG/AuthenticationResponse.c + ${OPENAIR_NAS_DIR}/COMMON/EMM/MSG/CsServiceNotification.c + ${OPENAIR_NAS_DIR}/COMMON/EMM/MSG/DetachAccept.c + ${OPENAIR_NAS_DIR}/COMMON/EMM/MSG/DetachRequest.c + ${OPENAIR_NAS_DIR}/COMMON/EMM/MSG/DownlinkNasTransport.c + ${OPENAIR_NAS_DIR}/COMMON/EMM/MSG/EmmInformation.c + ${OPENAIR_NAS_DIR}/COMMON/EMM/MSG/emm_msg.c + ${OPENAIR_NAS_DIR}/COMMON/EMM/MSG/EmmStatus.c + ${OPENAIR_NAS_DIR}/COMMON/EMM/MSG/ExtendedServiceRequest.c + ${OPENAIR_NAS_DIR}/COMMON/EMM/MSG/GutiReallocationCommand.c + ${OPENAIR_NAS_DIR}/COMMON/EMM/MSG/GutiReallocationComplete.c + ${OPENAIR_NAS_DIR}/COMMON/EMM/MSG/IdentityRequest.c + ${OPENAIR_NAS_DIR}/COMMON/EMM/MSG/IdentityResponse.c + ${OPENAIR_NAS_DIR}/COMMON/EMM/MSG/SecurityModeCommand.c + ${OPENAIR_NAS_DIR}/COMMON/EMM/MSG/SecurityModeComplete.c + ${OPENAIR_NAS_DIR}/COMMON/EMM/MSG/SecurityModeReject.c + ${OPENAIR_NAS_DIR}/COMMON/EMM/MSG/ServiceReject.c + ${OPENAIR_NAS_DIR}/COMMON/EMM/MSG/ServiceRequest.c + ${OPENAIR_NAS_DIR}/COMMON/EMM/MSG/TrackingAreaUpdateAccept.c + ${OPENAIR_NAS_DIR}/COMMON/EMM/MSG/TrackingAreaUpdateComplete.c + ${OPENAIR_NAS_DIR}/COMMON/EMM/MSG/TrackingAreaUpdateReject.c + ${OPENAIR_NAS_DIR}/COMMON/EMM/MSG/TrackingAreaUpdateRequest.c + ${OPENAIR_NAS_DIR}/COMMON/EMM/MSG/UplinkNasTransport.c - ${OPENAIR_NAS_DIR}/src/emm/sap//emm_as.c -# ${OPENAIR_NAS_DIR}/src/emm/sap//emm_cn.c - ${OPENAIR_NAS_DIR}/src/emm/sap//EmmCommonProcedureInitiated.c - ${OPENAIR_NAS_DIR}/src/emm/sap//EmmDeregisteredAttachNeeded.c - ${OPENAIR_NAS_DIR}/src/emm/sap//EmmDeregisteredAttemptingToAttach.c - ${OPENAIR_NAS_DIR}/src/emm/sap//EmmDeregistered.c - ${OPENAIR_NAS_DIR}/src/emm/sap//EmmDeregisteredInitiated.c - ${OPENAIR_NAS_DIR}/src/emm/sap//EmmDeregisteredLimitedService.c - ${OPENAIR_NAS_DIR}/src/emm/sap//EmmDeregisteredNoCellAvailable.c - ${OPENAIR_NAS_DIR}/src/emm/sap//EmmDeregisteredNoImsi.c - ${OPENAIR_NAS_DIR}/src/emm/sap//EmmDeregisteredNormalService.c - ${OPENAIR_NAS_DIR}/src/emm/sap//EmmDeregisteredPlmnSearch.c - ${OPENAIR_NAS_DIR}/src/emm/sap//emm_esm.c - ${OPENAIR_NAS_DIR}/src/emm/sap//emm_fsm.c - ${OPENAIR_NAS_DIR}/src/emm/sap//EmmNull.c - ${OPENAIR_NAS_DIR}/src/emm/sap//emm_recv.c - ${OPENAIR_NAS_DIR}/src/emm/sap//emm_reg.c - ${OPENAIR_NAS_DIR}/src/emm/sap//EmmRegisteredAttemptingToUpdate.c - ${OPENAIR_NAS_DIR}/src/emm/sap//EmmRegistered.c - ${OPENAIR_NAS_DIR}/src/emm/sap//EmmRegisteredImsiDetachInitiated.c - ${OPENAIR_NAS_DIR}/src/emm/sap//EmmRegisteredInitiated.c - ${OPENAIR_NAS_DIR}/src/emm/sap//EmmRegisteredLimitedService.c - ${OPENAIR_NAS_DIR}/src/emm/sap//EmmRegisteredNoCellAvailable.c - ${OPENAIR_NAS_DIR}/src/emm/sap//EmmRegisteredNormalService.c - ${OPENAIR_NAS_DIR}/src/emm/sap//EmmRegisteredPlmnSearch.c - ${OPENAIR_NAS_DIR}/src/emm/sap//EmmRegisteredUpdateNeeded.c - ${OPENAIR_NAS_DIR}/src/emm/sap//emm_sap.c - ${OPENAIR_NAS_DIR}/src/emm/sap//emm_send.c - ${OPENAIR_NAS_DIR}/src/emm/sap//EmmServiceRequestInitiated.c - ${OPENAIR_NAS_DIR}/src/emm/sap//EmmTrackingAreaUpdatingInitiated.c + ${OPENAIR_NAS_DIR}/UE/EMM/SAP/emm_as.c + ${OPENAIR_NAS_DIR}/UE/EMM/SAP/EmmDeregisteredAttachNeeded.c + ${OPENAIR_NAS_DIR}/UE/EMM/SAP/EmmDeregisteredAttemptingToAttach.c + ${OPENAIR_NAS_DIR}/UE/EMM/SAP/EmmDeregistered.c + ${OPENAIR_NAS_DIR}/UE/EMM/SAP/EmmDeregisteredInitiated.c + ${OPENAIR_NAS_DIR}/UE/EMM/SAP/EmmDeregisteredLimitedService.c + ${OPENAIR_NAS_DIR}/UE/EMM/SAP/EmmDeregisteredNoCellAvailable.c + ${OPENAIR_NAS_DIR}/UE/EMM/SAP/EmmDeregisteredNoImsi.c + ${OPENAIR_NAS_DIR}/UE/EMM/SAP/EmmDeregisteredNormalService.c + ${OPENAIR_NAS_DIR}/UE/EMM/SAP/EmmDeregisteredPlmnSearch.c + ${OPENAIR_NAS_DIR}/UE/EMM/SAP/emm_esm.c + ${OPENAIR_NAS_DIR}/UE/EMM/SAP/emm_fsm.c + ${OPENAIR_NAS_DIR}/UE/EMM/SAP/EmmNull.c + ${OPENAIR_NAS_DIR}/UE/EMM/SAP/emm_recv.c + ${OPENAIR_NAS_DIR}/UE/EMM/SAP/emm_reg.c + ${OPENAIR_NAS_DIR}/UE/EMM/SAP/EmmRegisteredAttemptingToUpdate.c + ${OPENAIR_NAS_DIR}/UE/EMM/SAP/EmmRegistered.c + ${OPENAIR_NAS_DIR}/UE/EMM/SAP/EmmRegisteredImsiDetachInitiated.c + ${OPENAIR_NAS_DIR}/UE/EMM/SAP/EmmRegisteredInitiated.c + ${OPENAIR_NAS_DIR}/UE/EMM/SAP/EmmRegisteredLimitedService.c + ${OPENAIR_NAS_DIR}/UE/EMM/SAP/EmmRegisteredNoCellAvailable.c + ${OPENAIR_NAS_DIR}/UE/EMM/SAP/EmmRegisteredNormalService.c + ${OPENAIR_NAS_DIR}/UE/EMM/SAP/EmmRegisteredPlmnSearch.c + ${OPENAIR_NAS_DIR}/UE/EMM/SAP/EmmRegisteredUpdateNeeded.c + ${OPENAIR_NAS_DIR}/UE/EMM/SAP/emm_sap.c + ${OPENAIR_NAS_DIR}/UE/EMM/SAP/emm_send.c + ${OPENAIR_NAS_DIR}/UE/EMM/SAP/EmmServiceRequestInitiated.c + ${OPENAIR_NAS_DIR}/UE/EMM/SAP/EmmTrackingAreaUpdatingInitiated.c ) set(emm_HDR - ${OPENAIR_NAS_DIR}/src/emm//EmmCommon.h - ${OPENAIR_NAS_DIR}/src/emm//emmData.h - ${OPENAIR_NAS_DIR}/src/emm//emm_main.h - ${OPENAIR_NAS_DIR}/src/emm//emm_proc.h - ${OPENAIR_NAS_DIR}/src/emm//IdleMode.h - ${OPENAIR_NAS_DIR}/src/emm//LowerLayer.h + ${OPENAIR_NAS_DIR}/UE/EMM/emmData.h + ${OPENAIR_NAS_DIR}/UE/EMM/emm_main.h + ${OPENAIR_NAS_DIR}/UE/EMM/emm_proc.h + ${OPENAIR_NAS_DIR}/UE/EMM/IdleMode.h + ${OPENAIR_NAS_DIR}/UE/EMM/LowerLayer.h - ${OPENAIR_NAS_DIR}/src/emm/msg/AttachAccept.h - ${OPENAIR_NAS_DIR}/src/emm/msg/AttachComplete.h - ${OPENAIR_NAS_DIR}/src/emm/msg/AttachReject.h - ${OPENAIR_NAS_DIR}/src/emm/msg/AttachRequest.h - ${OPENAIR_NAS_DIR}/src/emm/msg/AuthenticationFailure.h - ${OPENAIR_NAS_DIR}/src/emm/msg/AuthenticationReject.h - ${OPENAIR_NAS_DIR}/src/emm/msg/AuthenticationRequest.h - ${OPENAIR_NAS_DIR}/src/emm/msg/AuthenticationResponse.h - ${OPENAIR_NAS_DIR}/src/emm/msg/CsServiceNotification.h - ${OPENAIR_NAS_DIR}/src/emm/msg/DetachAccept.h - ${OPENAIR_NAS_DIR}/src/emm/msg/DetachRequest.h - ${OPENAIR_NAS_DIR}/src/emm/msg/DownlinkNasTransport.h - ${OPENAIR_NAS_DIR}/src/emm/msg/emm_cause.h - ${OPENAIR_NAS_DIR}/src/emm/msg/EmmInformation.h - ${OPENAIR_NAS_DIR}/src/emm/msg/emm_msgDef.h - ${OPENAIR_NAS_DIR}/src/emm/msg/emm_msg.h - ${OPENAIR_NAS_DIR}/src/emm/msg/EmmStatus.h - ${OPENAIR_NAS_DIR}/src/emm/msg/ExtendedServiceRequest.h - ${OPENAIR_NAS_DIR}/src/emm/msg/GutiReallocationCommand.h - ${OPENAIR_NAS_DIR}/src/emm/msg/GutiReallocationComplete.h - ${OPENAIR_NAS_DIR}/src/emm/msg/IdentityRequest.h - ${OPENAIR_NAS_DIR}/src/emm/msg/IdentityResponse.h - ${OPENAIR_NAS_DIR}/src/emm/msg/NASSecurityModeCommand.h - ${OPENAIR_NAS_DIR}/src/emm/msg/NASSecurityModeComplete.h - ${OPENAIR_NAS_DIR}/src/emm/msg/SecurityModeReject.h - ${OPENAIR_NAS_DIR}/src/emm/msg/ServiceReject.h - ${OPENAIR_NAS_DIR}/src/emm/msg/ServiceRequest.h - ${OPENAIR_NAS_DIR}/src/emm/msg/TrackingAreaUpdateAccept.h - ${OPENAIR_NAS_DIR}/src/emm/msg/TrackingAreaUpdateComplete.h - ${OPENAIR_NAS_DIR}/src/emm/msg/TrackingAreaUpdateReject.h - ${OPENAIR_NAS_DIR}/src/emm/msg/TrackingAreaUpdateRequest.h - ${OPENAIR_NAS_DIR}/src/emm/msg/UplinkNasTransport.h + ${OPENAIR_NAS_DIR}/COMMON/EMM/MSG/AttachAccept.h + ${OPENAIR_NAS_DIR}/COMMON/EMM/MSG/AttachComplete.h + ${OPENAIR_NAS_DIR}/COMMON/EMM/MSG/AttachReject.h + ${OPENAIR_NAS_DIR}/COMMON/EMM/MSG/AttachRequest.h + ${OPENAIR_NAS_DIR}/COMMON/EMM/MSG/AuthenticationFailure.h + ${OPENAIR_NAS_DIR}/COMMON/EMM/MSG/AuthenticationReject.h + ${OPENAIR_NAS_DIR}/COMMON/EMM/MSG/AuthenticationRequest.h + ${OPENAIR_NAS_DIR}/COMMON/EMM/MSG/AuthenticationResponse.h + ${OPENAIR_NAS_DIR}/COMMON/EMM/MSG/CsServiceNotification.h + ${OPENAIR_NAS_DIR}/COMMON/EMM/MSG/DetachAccept.h + ${OPENAIR_NAS_DIR}/COMMON/EMM/MSG/DetachRequest.h + ${OPENAIR_NAS_DIR}/COMMON/EMM/MSG/DownlinkNasTransport.h + ${OPENAIR_NAS_DIR}/COMMON/EMM/MSG/emm_cause.h + ${OPENAIR_NAS_DIR}/COMMON/EMM/MSG/EmmInformation.h + ${OPENAIR_NAS_DIR}/COMMON/EMM/MSG/emm_msgDef.h + ${OPENAIR_NAS_DIR}/COMMON/EMM/MSG/emm_msg.h + ${OPENAIR_NAS_DIR}/COMMON/EMM/MSG/EmmStatus.h + ${OPENAIR_NAS_DIR}/COMMON/EMM/MSG/ExtendedServiceRequest.h + ${OPENAIR_NAS_DIR}/COMMON/EMM/MSG/GutiReallocationCommand.h + ${OPENAIR_NAS_DIR}/COMMON/EMM/MSG/GutiReallocationComplete.h + ${OPENAIR_NAS_DIR}/COMMON/EMM/MSG/IdentityRequest.h + ${OPENAIR_NAS_DIR}/COMMON/EMM/MSG/IdentityResponse.h + ${OPENAIR_NAS_DIR}/COMMON/EMM/MSG/NASSecurityModeCommand.h + ${OPENAIR_NAS_DIR}/COMMON/EMM/MSG/NASSecurityModeComplete.h + ${OPENAIR_NAS_DIR}/COMMON/EMM/MSG/SecurityModeReject.h + ${OPENAIR_NAS_DIR}/COMMON/EMM/MSG/ServiceReject.h + ${OPENAIR_NAS_DIR}/COMMON/EMM/MSG/ServiceRequest.h + ${OPENAIR_NAS_DIR}/COMMON/EMM/MSG/TrackingAreaUpdateAccept.h + ${OPENAIR_NAS_DIR}/COMMON/EMM/MSG/TrackingAreaUpdateComplete.h + ${OPENAIR_NAS_DIR}/COMMON/EMM/MSG/TrackingAreaUpdateReject.h + ${OPENAIR_NAS_DIR}/COMMON/EMM/MSG/TrackingAreaUpdateRequest.h + ${OPENAIR_NAS_DIR}/COMMON/EMM/MSG/UplinkNasTransport.h - ${OPENAIR_NAS_DIR}/src/emm/sap//emm_asDef.h - ${OPENAIR_NAS_DIR}/src/emm/sap//emm_as.h - ${OPENAIR_NAS_DIR}/src/emm/sap//emm_cnDef.h - ${OPENAIR_NAS_DIR}/src/emm/sap//emm_cn.h - ${OPENAIR_NAS_DIR}/src/emm/sap//emm_esmDef.h - ${OPENAIR_NAS_DIR}/src/emm/sap//emm_esm.h - ${OPENAIR_NAS_DIR}/src/emm/sap//emm_fsm.h - ${OPENAIR_NAS_DIR}/src/emm/sap//emm_recv.h - ${OPENAIR_NAS_DIR}/src/emm/sap//emm_regDef.h - ${OPENAIR_NAS_DIR}/src/emm/sap//emm_reg.h - ${OPENAIR_NAS_DIR}/src/emm/sap//emm_sap.h - ${OPENAIR_NAS_DIR}/src/emm/sap//emm_send.h + ${OPENAIR_NAS_DIR}/UE/EMM/SAP/emm_asDef.h + ${OPENAIR_NAS_DIR}/UE/EMM/SAP/emm_as.h + ${OPENAIR_NAS_DIR}/UE/EMM/SAP/emm_esmDef.h + ${OPENAIR_NAS_DIR}/UE/EMM/SAP/emm_esm.h + ${OPENAIR_NAS_DIR}/UE/EMM/SAP/emm_fsm.h + ${OPENAIR_NAS_DIR}/UE/EMM/SAP/emm_recv.h + ${OPENAIR_NAS_DIR}/UE/EMM/SAP/emm_regDef.h + ${OPENAIR_NAS_DIR}/UE/EMM/SAP/emm_reg.h + ${OPENAIR_NAS_DIR}/UE/EMM/SAP/emm_sap.h + ${OPENAIR_NAS_DIR}/UE/EMM/SAP/emm_send.h ) @@ -381,12 +381,13 @@ add_library(emm ${emm_SRC} ${emm_HDR}) target_include_directories(emm PRIVATE ${OPENAIR_DIR}/common/utils/msc - ${OPENAIR_NAS_DIR}/src/api/usim - ${OPENAIR_NAS_DIR}/src/api/mme - ${OPENAIR_NAS_DIR}/src/emm - ${OPENAIR_NAS_DIR}/src/emm/msg - ${OPENAIR_NAS_DIR}/src/emm/sap - ${OPENAIR_NAS_DIR}/src/ies + ${OPENAIR_DIR}/common/utils + ${OPENAIR_DIR}/openair2/COMMON + ${OPENAIR_NAS_DIR}/UE/API/USIM + ${OPENAIR_NAS_DIR}/UE/EMM + ${OPENAIR_NAS_DIR}/COMMON/EMM/MSG + ${OPENAIR_NAS_DIR}/UE/EMM/SAP + ${OPENAIR_NAS_DIR}/COMMON/IES ) @@ -394,258 +395,259 @@ target_include_directories(emm PRIVATE # esm LIB ################################################################################ set(esm_SRC - ${OPENAIR_NAS_DIR}/src/esm/esm_main.c - ${OPENAIR_NAS_DIR}/src/esm/DedicatedEpsBearerContextActivation.c - ${OPENAIR_NAS_DIR}/src/esm/DefaultEpsBearerContextActivation.c - ${OPENAIR_NAS_DIR}/src/esm/EpsBearerContextDeactivation.c - ${OPENAIR_NAS_DIR}/src/esm/esm_ebr.c - ${OPENAIR_NAS_DIR}/src/esm/esm_ebr_context.c - ${OPENAIR_NAS_DIR}/src/esm/esm_ip.c - ${OPENAIR_NAS_DIR}/src/esm/esm_main.c - ${OPENAIR_NAS_DIR}/src/esm/esm_pt.c - ${OPENAIR_NAS_DIR}/src/esm/EsmStatusHdl.c - ${OPENAIR_NAS_DIR}/src/esm/PdnConnectivity.c - ${OPENAIR_NAS_DIR}/src/esm/PdnDisconnect.c + ${OPENAIR_NAS_DIR}/UE/ESM/esm_main.c + ${OPENAIR_NAS_DIR}/UE/ESM/DedicatedEpsBearerContextActivation.c + ${OPENAIR_NAS_DIR}/UE/ESM/DefaultEpsBearerContextActivation.c + ${OPENAIR_NAS_DIR}/UE/ESM/EpsBearerContextDeactivation.c + ${OPENAIR_NAS_DIR}/UE/ESM/esm_ebr.c + ${OPENAIR_NAS_DIR}/UE/ESM/esm_ebr_context.c + ${OPENAIR_NAS_DIR}/UE/ESM/esm_ip.c + ${OPENAIR_NAS_DIR}/UE/ESM/esm_main.c + ${OPENAIR_NAS_DIR}/UE/ESM/esm_pt.c + ${OPENAIR_NAS_DIR}/UE/ESM/EsmStatusHdl.c + ${OPENAIR_NAS_DIR}/UE/ESM/PdnConnectivity.c + ${OPENAIR_NAS_DIR}/UE/ESM/PdnDisconnect.c - ${OPENAIR_NAS_DIR}/src/esm/msg/ActivateDedicatedEpsBearerContextAccept.c - ${OPENAIR_NAS_DIR}/src/esm/msg/ActivateDedicatedEpsBearerContextReject.c - ${OPENAIR_NAS_DIR}/src/esm/msg/ActivateDedicatedEpsBearerContextRequest.c - ${OPENAIR_NAS_DIR}/src/esm/msg/ActivateDefaultEpsBearerContextAccept.c - ${OPENAIR_NAS_DIR}/src/esm/msg/ActivateDefaultEpsBearerContextReject.c - ${OPENAIR_NAS_DIR}/src/esm/msg/ActivateDefaultEpsBearerContextRequest.c - ${OPENAIR_NAS_DIR}/src/esm/msg/BearerResourceAllocationReject.c - ${OPENAIR_NAS_DIR}/src/esm/msg/BearerResourceAllocationRequest.c - ${OPENAIR_NAS_DIR}/src/esm/msg/BearerResourceModificationReject.c - ${OPENAIR_NAS_DIR}/src/esm/msg/BearerResourceModificationRequest.c - ${OPENAIR_NAS_DIR}/src/esm/msg/DeactivateEpsBearerContextAccept.c - ${OPENAIR_NAS_DIR}/src/esm/msg/DeactivateEpsBearerContextRequest.c - ${OPENAIR_NAS_DIR}/src/esm/msg/EsmInformationRequest.c - ${OPENAIR_NAS_DIR}/src/esm/msg/EsmInformationResponse.c - ${OPENAIR_NAS_DIR}/src/esm/msg/esm_msg.c - ${OPENAIR_NAS_DIR}/src/esm/msg/EsmStatus.c - ${OPENAIR_NAS_DIR}/src/esm/msg/ModifyEpsBearerContextAccept.c - ${OPENAIR_NAS_DIR}/src/esm/msg/ModifyEpsBearerContextReject.c - ${OPENAIR_NAS_DIR}/src/esm/msg/ModifyEpsBearerContextRequest.c - ${OPENAIR_NAS_DIR}/src/esm/msg/PdnConnectivityReject.c - ${OPENAIR_NAS_DIR}/src/esm/msg/PdnConnectivityRequest.c - ${OPENAIR_NAS_DIR}/src/esm/msg/PdnDisconnectReject.c - ${OPENAIR_NAS_DIR}/src/esm/msg/PdnDisconnectRequest.c + ${OPENAIR_NAS_DIR}/COMMON/ESM/MSG/ActivateDedicatedEpsBearerContextAccept.c + ${OPENAIR_NAS_DIR}/COMMON/ESM/MSG/ActivateDedicatedEpsBearerContextReject.c + ${OPENAIR_NAS_DIR}/COMMON/ESM/MSG/ActivateDedicatedEpsBearerContextRequest.c + ${OPENAIR_NAS_DIR}/COMMON/ESM/MSG/ActivateDefaultEpsBearerContextAccept.c + ${OPENAIR_NAS_DIR}/COMMON/ESM/MSG/ActivateDefaultEpsBearerContextReject.c + ${OPENAIR_NAS_DIR}/COMMON/ESM/MSG/ActivateDefaultEpsBearerContextRequest.c + ${OPENAIR_NAS_DIR}/COMMON/ESM/MSG/BearerResourceAllocationReject.c + ${OPENAIR_NAS_DIR}/COMMON/ESM/MSG/BearerResourceAllocationRequest.c + ${OPENAIR_NAS_DIR}/COMMON/ESM/MSG/BearerResourceModificationReject.c + ${OPENAIR_NAS_DIR}/COMMON/ESM/MSG/BearerResourceModificationRequest.c + ${OPENAIR_NAS_DIR}/COMMON/ESM/MSG/DeactivateEpsBearerContextAccept.c + ${OPENAIR_NAS_DIR}/COMMON/ESM/MSG/DeactivateEpsBearerContextRequest.c + ${OPENAIR_NAS_DIR}/COMMON/ESM/MSG/EsmInformationRequest.c + ${OPENAIR_NAS_DIR}/COMMON/ESM/MSG/EsmInformationResponse.c + ${OPENAIR_NAS_DIR}/COMMON/ESM/MSG/esm_msg.c + ${OPENAIR_NAS_DIR}/COMMON/ESM/MSG/EsmStatus.c + ${OPENAIR_NAS_DIR}/COMMON/ESM/MSG/ModifyEpsBearerContextAccept.c + ${OPENAIR_NAS_DIR}/COMMON/ESM/MSG/ModifyEpsBearerContextReject.c + ${OPENAIR_NAS_DIR}/COMMON/ESM/MSG/ModifyEpsBearerContextRequest.c + ${OPENAIR_NAS_DIR}/COMMON/ESM/MSG/PdnConnectivityReject.c + ${OPENAIR_NAS_DIR}/COMMON/ESM/MSG/PdnConnectivityRequest.c + ${OPENAIR_NAS_DIR}/COMMON/ESM/MSG/PdnDisconnectReject.c + ${OPENAIR_NAS_DIR}/COMMON/ESM/MSG/PdnDisconnectRequest.c - ${OPENAIR_NAS_DIR}/src/esm/sap/esm_recv.c - ${OPENAIR_NAS_DIR}/src/esm/sap/esm_sap.c - ${OPENAIR_NAS_DIR}/src/esm/sap/esm_send.c + ${OPENAIR_NAS_DIR}/UE/ESM/SAP/esm_recv.c + ${OPENAIR_NAS_DIR}/UE/ESM/SAP/esm_sap.c + ${OPENAIR_NAS_DIR}/UE/ESM/SAP/esm_send.c ) set(esm_HDR - ${OPENAIR_NAS_DIR}/src/esm/esm_main.h - ${OPENAIR_NAS_DIR}/src/esm/msg/ActivateDedicatedEpsBearerContextAccept.h - ${OPENAIR_NAS_DIR}/src/esm/msg/ActivateDedicatedEpsBearerContextReject.h - ${OPENAIR_NAS_DIR}/src/esm/msg/ActivateDedicatedEpsBearerContextRequest.h - ${OPENAIR_NAS_DIR}/src/esm/msg/ActivateDefaultEpsBearerContextAccept.h - ${OPENAIR_NAS_DIR}/src/esm/msg/ActivateDefaultEpsBearerContextReject.h - ${OPENAIR_NAS_DIR}/src/esm/msg/ActivateDefaultEpsBearerContextRequest.h - ${OPENAIR_NAS_DIR}/src/esm/msg/BearerResourceAllocationReject.h - ${OPENAIR_NAS_DIR}/src/esm/msg/BearerResourceAllocationRequest.h - ${OPENAIR_NAS_DIR}/src/esm/msg/BearerResourceModificationReject.h - ${OPENAIR_NAS_DIR}/src/esm/msg/BearerResourceModificationRequest.h - ${OPENAIR_NAS_DIR}/src/esm/msg/DeactivateEpsBearerContextAccept.h - ${OPENAIR_NAS_DIR}/src/esm/msg/DeactivateEpsBearerContextRequest.h - ${OPENAIR_NAS_DIR}/src/esm/msg/esm_cause.h - ${OPENAIR_NAS_DIR}/src/esm/msg/EsmInformationRequest.h - ${OPENAIR_NAS_DIR}/src/esm/msg/EsmInformationResponse.h - ${OPENAIR_NAS_DIR}/src/esm/msg/esm_msgDef.h - ${OPENAIR_NAS_DIR}/src/esm/msg/esm_msg.h - ${OPENAIR_NAS_DIR}/src/esm/msg/EsmStatus.h - ${OPENAIR_NAS_DIR}/src/esm/msg/ModifyEpsBearerContextAccept.h - ${OPENAIR_NAS_DIR}/src/esm/msg/ModifyEpsBearerContextReject.h - ${OPENAIR_NAS_DIR}/src/esm/msg/ModifyEpsBearerContextRequest.h - ${OPENAIR_NAS_DIR}/src/esm/msg/PdnConnectivityReject.h - ${OPENAIR_NAS_DIR}/src/esm/msg/PdnConnectivityRequest.h - ${OPENAIR_NAS_DIR}/src/esm/msg/PdnDisconnectReject.h - ${OPENAIR_NAS_DIR}/src/esm/msg/PdnDisconnectRequest.h - ${OPENAIR_NAS_DIR}/src/esm/sap/esm_recv.h - ${OPENAIR_NAS_DIR}/src/esm/sap/esm_sap.h - ${OPENAIR_NAS_DIR}/src/esm/sap/esm_send.h + ${OPENAIR_NAS_DIR}/UE/ESM/esm_main.h + ${OPENAIR_NAS_DIR}/COMMON/ESM/MSG/ActivateDedicatedEpsBearerContextAccept.h + ${OPENAIR_NAS_DIR}/COMMON/ESM/MSG/ActivateDedicatedEpsBearerContextReject.h + ${OPENAIR_NAS_DIR}/COMMON/ESM/MSG/ActivateDedicatedEpsBearerContextRequest.h + ${OPENAIR_NAS_DIR}/COMMON/ESM/MSG/ActivateDefaultEpsBearerContextAccept.h + ${OPENAIR_NAS_DIR}/COMMON/ESM/MSG/ActivateDefaultEpsBearerContextReject.h + ${OPENAIR_NAS_DIR}/COMMON/ESM/MSG/ActivateDefaultEpsBearerContextRequest.h + ${OPENAIR_NAS_DIR}/COMMON/ESM/MSG/BearerResourceAllocationReject.h + ${OPENAIR_NAS_DIR}/COMMON/ESM/MSG/BearerResourceAllocationRequest.h + ${OPENAIR_NAS_DIR}/COMMON/ESM/MSG/BearerResourceModificationReject.h + ${OPENAIR_NAS_DIR}/COMMON/ESM/MSG/BearerResourceModificationRequest.h + ${OPENAIR_NAS_DIR}/COMMON/ESM/MSG/DeactivateEpsBearerContextAccept.h + ${OPENAIR_NAS_DIR}/COMMON/ESM/MSG/DeactivateEpsBearerContextRequest.h + ${OPENAIR_NAS_DIR}/COMMON/ESM/MSG/esm_cause.h + ${OPENAIR_NAS_DIR}/COMMON/ESM/MSG/EsmInformationRequest.h + ${OPENAIR_NAS_DIR}/COMMON/ESM/MSG/EsmInformationResponse.h + ${OPENAIR_NAS_DIR}/COMMON/ESM/MSG/esm_msgDef.h + ${OPENAIR_NAS_DIR}/COMMON/ESM/MSG/esm_msg.h + ${OPENAIR_NAS_DIR}/COMMON/ESM/MSG/EsmStatus.h + ${OPENAIR_NAS_DIR}/COMMON/ESM/MSG/ModifyEpsBearerContextAccept.h + ${OPENAIR_NAS_DIR}/COMMON/ESM/MSG/ModifyEpsBearerContextReject.h + ${OPENAIR_NAS_DIR}/COMMON/ESM/MSG/ModifyEpsBearerContextRequest.h + ${OPENAIR_NAS_DIR}/COMMON/ESM/MSG/PdnConnectivityReject.h + ${OPENAIR_NAS_DIR}/COMMON/ESM/MSG/PdnConnectivityRequest.h + ${OPENAIR_NAS_DIR}/COMMON/ESM/MSG/PdnDisconnectReject.h + ${OPENAIR_NAS_DIR}/COMMON/ESM/MSG/PdnDisconnectRequest.h + ${OPENAIR_NAS_DIR}/UE/ESM/SAP/esm_recv.h + ${OPENAIR_NAS_DIR}/UE/ESM/SAP/esm_sap.h + ${OPENAIR_NAS_DIR}/UE/ESM/SAP/esm_send.h ) add_library(esm ${esm_SRC} ${esm_HDR}) target_include_directories(esm PRIVATE - ${OPENAIR_NAS_DIR}/src/api/user - ${OPENAIR_NAS_DIR}/src/api/mme - ${OPENAIR_NAS_DIR}/src/esm - ${OPENAIR_NAS_DIR}/src/esm/msg - ${OPENAIR_NAS_DIR}/src/esm/sap - ${OPENAIR_NAS_DIR}/src/ies + ${OPENAIR_NAS_DIR}/UE/API/USER + ${OPENAIR_NAS_DIR}/UE/ESM + ${OPENAIR_NAS_DIR}/COMMON/ESM/MSG + ${OPENAIR_NAS_DIR}/UE/ESM/SAP + ${OPENAIR_NAS_DIR}/COMMON/IES ) ################################################################################ # ies LIB ################################################################################ set(ies_SRC - ${OPENAIR_NAS_DIR}/src/ies/AccessPointName.c - ${OPENAIR_NAS_DIR}/src/ies/AdditionalUpdateResult.c - ${OPENAIR_NAS_DIR}/src/ies/AdditionalUpdateType.c - ${OPENAIR_NAS_DIR}/src/ies/ApnAggregateMaximumBitRate.c - ${OPENAIR_NAS_DIR}/src/ies/AuthenticationFailureParameter.c - ${OPENAIR_NAS_DIR}/src/ies/AuthenticationParameterAutn.c - ${OPENAIR_NAS_DIR}/src/ies/AuthenticationParameterRand.c - ${OPENAIR_NAS_DIR}/src/ies/AuthenticationResponseParameter.c - ${OPENAIR_NAS_DIR}/src/ies/CipheringKeySequenceNumber.c - ${OPENAIR_NAS_DIR}/src/ies/Cli.c - ${OPENAIR_NAS_DIR}/src/ies/CsfbResponse.c - ${OPENAIR_NAS_DIR}/src/ies/DaylightSavingTime.c - ${OPENAIR_NAS_DIR}/src/ies/DetachType.c - ${OPENAIR_NAS_DIR}/src/ies/DrxParameter.c - ${OPENAIR_NAS_DIR}/src/ies/EmergencyNumberList.c - ${OPENAIR_NAS_DIR}/src/ies/EmmCause.c - ${OPENAIR_NAS_DIR}/src/ies/EpsAttachResult.c - ${OPENAIR_NAS_DIR}/src/ies/EpsAttachType.c - ${OPENAIR_NAS_DIR}/src/ies/EpsBearerContextStatus.c - ${OPENAIR_NAS_DIR}/src/ies/EpsBearerIdentity.c - ${OPENAIR_NAS_DIR}/src/ies/EpsMobileIdentity.c - ${OPENAIR_NAS_DIR}/src/ies/EpsNetworkFeatureSupport.c - ${OPENAIR_NAS_DIR}/src/ies/EpsQualityOfService.c - ${OPENAIR_NAS_DIR}/src/ies/EpsUpdateResult.c - ${OPENAIR_NAS_DIR}/src/ies/EpsUpdateType.c - ${OPENAIR_NAS_DIR}/src/ies/EsmCause.c - ${OPENAIR_NAS_DIR}/src/ies/EsmInformationTransferFlag.c - ${OPENAIR_NAS_DIR}/src/ies/EsmMessageContainer.c - ${OPENAIR_NAS_DIR}/src/ies/GprsTimer.c - ${OPENAIR_NAS_DIR}/src/ies/GutiType.c - ${OPENAIR_NAS_DIR}/src/ies/IdentityType2.c - ${OPENAIR_NAS_DIR}/src/ies/ImeisvRequest.c - ${OPENAIR_NAS_DIR}/src/ies/KsiAndSequenceNumber.c - ${OPENAIR_NAS_DIR}/src/ies/LcsClientIdentity.c - ${OPENAIR_NAS_DIR}/src/ies/LcsIndicator.c - ${OPENAIR_NAS_DIR}/src/ies/LinkedEpsBearerIdentity.c - ${OPENAIR_NAS_DIR}/src/ies/LlcServiceAccessPointIdentifier.c - ${OPENAIR_NAS_DIR}/src/ies/LocationAreaIdentification.c - ${OPENAIR_NAS_DIR}/src/ies/MessageType.c - ${OPENAIR_NAS_DIR}/src/ies/MobileIdentity.c - ${OPENAIR_NAS_DIR}/src/ies/MobileStationClassmark2.c - ${OPENAIR_NAS_DIR}/src/ies/MobileStationClassmark3.c - ${OPENAIR_NAS_DIR}/src/ies/MsNetworkCapability.c - ${OPENAIR_NAS_DIR}/src/ies/NasKeySetIdentifier.c - ${OPENAIR_NAS_DIR}/src/ies/NasMessageContainer.c - ${OPENAIR_NAS_DIR}/src/ies/NasRequestType.c - ${OPENAIR_NAS_DIR}/src/ies/NasSecurityAlgorithms.c - ${OPENAIR_NAS_DIR}/src/ies/NetworkName.c - ${OPENAIR_NAS_DIR}/src/ies/Nonce.c - ${OPENAIR_NAS_DIR}/src/ies/PacketFlowIdentifier.c - ${OPENAIR_NAS_DIR}/src/ies/PagingIdentity.c - ${OPENAIR_NAS_DIR}/src/ies/PdnAddress.c - ${OPENAIR_NAS_DIR}/src/ies/PdnType.c - ${OPENAIR_NAS_DIR}/src/ies/PlmnList.c - ${OPENAIR_NAS_DIR}/src/ies/ProcedureTransactionIdentity.c - ${OPENAIR_NAS_DIR}/src/ies/ProtocolConfigurationOptions.c - ${OPENAIR_NAS_DIR}/src/ies/ProtocolDiscriminator.c - ${OPENAIR_NAS_DIR}/src/ies/PTmsiSignature.c - ${OPENAIR_NAS_DIR}/src/ies/QualityOfService.c - ${OPENAIR_NAS_DIR}/src/ies/RadioPriority.c - ${OPENAIR_NAS_DIR}/src/ies/SecurityHeaderType.c - ${OPENAIR_NAS_DIR}/src/ies/ServiceType.c - ${OPENAIR_NAS_DIR}/src/ies/ShortMac.c - ${OPENAIR_NAS_DIR}/src/ies/SsCode.c - ${OPENAIR_NAS_DIR}/src/ies/SupportedCodecList.c - ${OPENAIR_NAS_DIR}/src/ies/TimeZoneAndTime.c - ${OPENAIR_NAS_DIR}/src/ies/TimeZone.c - ${OPENAIR_NAS_DIR}/src/ies/TmsiStatus.c - ${OPENAIR_NAS_DIR}/src/ies/TrackingAreaIdentity.c - ${OPENAIR_NAS_DIR}/src/ies/TrackingAreaIdentityList.c - ${OPENAIR_NAS_DIR}/src/ies/TrafficFlowAggregateDescription.c - ${OPENAIR_NAS_DIR}/src/ies/TrafficFlowTemplate.c - ${OPENAIR_NAS_DIR}/src/ies/TransactionIdentifier.c - ${OPENAIR_NAS_DIR}/src/ies/UeNetworkCapability.c - ${OPENAIR_NAS_DIR}/src/ies/UeRadioCapabilityInformationUpdateNeeded.c - ${OPENAIR_NAS_DIR}/src/ies/UeSecurityCapability.c - ${OPENAIR_NAS_DIR}/src/ies/VoiceDomainPreferenceAndUeUsageSetting.c + ${OPENAIR_NAS_DIR}/COMMON/IES/AccessPointName.c + ${OPENAIR_NAS_DIR}/COMMON/IES/AdditionalUpdateResult.c + ${OPENAIR_NAS_DIR}/COMMON/IES/AdditionalUpdateType.c + ${OPENAIR_NAS_DIR}/COMMON/IES/ApnAggregateMaximumBitRate.c + ${OPENAIR_NAS_DIR}/COMMON/IES/AuthenticationFailureParameter.c + ${OPENAIR_NAS_DIR}/COMMON/IES/AuthenticationParameterAutn.c + ${OPENAIR_NAS_DIR}/COMMON/IES/AuthenticationParameterRand.c + ${OPENAIR_NAS_DIR}/COMMON/IES/AuthenticationResponseParameter.c + ${OPENAIR_NAS_DIR}/COMMON/IES/CipheringKeySequenceNumber.c + ${OPENAIR_NAS_DIR}/COMMON/IES/Cli.c + ${OPENAIR_NAS_DIR}/COMMON/IES/CsfbResponse.c + ${OPENAIR_NAS_DIR}/COMMON/IES/DaylightSavingTime.c + ${OPENAIR_NAS_DIR}/COMMON/IES/DetachType.c + ${OPENAIR_NAS_DIR}/COMMON/IES/DrxParameter.c + ${OPENAIR_NAS_DIR}/COMMON/IES/EmergencyNumberList.c + ${OPENAIR_NAS_DIR}/COMMON/IES/EmmCause.c + ${OPENAIR_NAS_DIR}/COMMON/IES/EpsAttachResult.c + ${OPENAIR_NAS_DIR}/COMMON/IES/EpsAttachType.c + ${OPENAIR_NAS_DIR}/COMMON/IES/EpsBearerContextStatus.c + ${OPENAIR_NAS_DIR}/COMMON/IES/EpsBearerIdentity.c + ${OPENAIR_NAS_DIR}/COMMON/IES/EpsMobileIdentity.c + ${OPENAIR_NAS_DIR}/COMMON/IES/EpsNetworkFeatureSupport.c + ${OPENAIR_NAS_DIR}/COMMON/IES/EpsQualityOfService.c + ${OPENAIR_NAS_DIR}/COMMON/IES/EpsUpdateResult.c + ${OPENAIR_NAS_DIR}/COMMON/IES/EpsUpdateType.c + ${OPENAIR_NAS_DIR}/COMMON/IES/EsmCause.c + ${OPENAIR_NAS_DIR}/COMMON/IES/EsmInformationTransferFlag.c + ${OPENAIR_NAS_DIR}/COMMON/IES/EsmMessageContainer.c + ${OPENAIR_NAS_DIR}/COMMON/IES/GprsTimer.c + ${OPENAIR_NAS_DIR}/COMMON/IES/GutiType.c + ${OPENAIR_NAS_DIR}/COMMON/IES/IdentityType2.c + ${OPENAIR_NAS_DIR}/COMMON/IES/ImeisvRequest.c + ${OPENAIR_NAS_DIR}/COMMON/IES/KsiAndSequenceNumber.c + ${OPENAIR_NAS_DIR}/COMMON/IES/LcsClientIdentity.c + ${OPENAIR_NAS_DIR}/COMMON/IES/LcsIndicator.c + ${OPENAIR_NAS_DIR}/COMMON/IES/LinkedEpsBearerIdentity.c + ${OPENAIR_NAS_DIR}/COMMON/IES/LlcServiceAccessPointIdentifier.c + ${OPENAIR_NAS_DIR}/COMMON/IES/LocationAreaIdentification.c + ${OPENAIR_NAS_DIR}/COMMON/IES/MessageType.c + ${OPENAIR_NAS_DIR}/COMMON/IES/MobileIdentity.c + ${OPENAIR_NAS_DIR}/COMMON/IES/MobileStationClassmark2.c + ${OPENAIR_NAS_DIR}/COMMON/IES/MobileStationClassmark3.c + ${OPENAIR_NAS_DIR}/COMMON/IES/MsNetworkCapability.c + ${OPENAIR_NAS_DIR}/COMMON/IES/MsNetworkFeatureSupport.c + ${OPENAIR_NAS_DIR}/COMMON/IES/NasKeySetIdentifier.c + ${OPENAIR_NAS_DIR}/COMMON/IES/NasMessageContainer.c + ${OPENAIR_NAS_DIR}/COMMON/IES/NasRequestType.c + ${OPENAIR_NAS_DIR}/COMMON/IES/NasSecurityAlgorithms.c + ${OPENAIR_NAS_DIR}/COMMON/IES/NetworkName.c + ${OPENAIR_NAS_DIR}/COMMON/IES/Nonce.c + ${OPENAIR_NAS_DIR}/COMMON/IES/PacketFlowIdentifier.c + ${OPENAIR_NAS_DIR}/COMMON/IES/PagingIdentity.c + ${OPENAIR_NAS_DIR}/COMMON/IES/PdnAddress.c + ${OPENAIR_NAS_DIR}/COMMON/IES/PdnType.c + ${OPENAIR_NAS_DIR}/COMMON/IES/PlmnList.c + ${OPENAIR_NAS_DIR}/COMMON/IES/ProcedureTransactionIdentity.c + ${OPENAIR_NAS_DIR}/COMMON/IES/ProtocolConfigurationOptions.c + ${OPENAIR_NAS_DIR}/COMMON/IES/ProtocolDiscriminator.c + ${OPENAIR_NAS_DIR}/COMMON/IES/PTmsiSignature.c + ${OPENAIR_NAS_DIR}/COMMON/IES/QualityOfService.c + ${OPENAIR_NAS_DIR}/COMMON/IES/RadioPriority.c + ${OPENAIR_NAS_DIR}/COMMON/IES/SecurityHeaderType.c + ${OPENAIR_NAS_DIR}/COMMON/IES/ServiceType.c + ${OPENAIR_NAS_DIR}/COMMON/IES/ShortMac.c + ${OPENAIR_NAS_DIR}/COMMON/IES/SsCode.c + ${OPENAIR_NAS_DIR}/COMMON/IES/SupportedCodecList.c + ${OPENAIR_NAS_DIR}/COMMON/IES/TimeZoneAndTime.c + ${OPENAIR_NAS_DIR}/COMMON/IES/TimeZone.c + ${OPENAIR_NAS_DIR}/COMMON/IES/TmsiStatus.c + ${OPENAIR_NAS_DIR}/COMMON/IES/TrackingAreaIdentity.c + ${OPENAIR_NAS_DIR}/COMMON/IES/TrackingAreaIdentityList.c + ${OPENAIR_NAS_DIR}/COMMON/IES/TrafficFlowAggregateDescription.c + ${OPENAIR_NAS_DIR}/COMMON/IES/TrafficFlowTemplate.c + ${OPENAIR_NAS_DIR}/COMMON/IES/TransactionIdentifier.c + ${OPENAIR_NAS_DIR}/COMMON/IES/UeNetworkCapability.c + ${OPENAIR_NAS_DIR}/COMMON/IES/UeRadioCapabilityInformationUpdateNeeded.c + ${OPENAIR_NAS_DIR}/COMMON/IES/UeSecurityCapability.c + ${OPENAIR_NAS_DIR}/COMMON/IES/VoiceDomainPreferenceAndUeUsageSetting.c ) set(ies_HDR - ${OPENAIR_NAS_DIR}/src/ies/AccessPointName.h - ${OPENAIR_NAS_DIR}/src/ies/AdditionalUpdateResult.h - ${OPENAIR_NAS_DIR}/src/ies/AdditionalUpdateType.h - ${OPENAIR_NAS_DIR}/src/ies/ApnAggregateMaximumBitRate.h - ${OPENAIR_NAS_DIR}/src/ies/AuthenticationFailureParameter.h - ${OPENAIR_NAS_DIR}/src/ies/AuthenticationParameterAutn.h - ${OPENAIR_NAS_DIR}/src/ies/AuthenticationParameterRand.h - ${OPENAIR_NAS_DIR}/src/ies/AuthenticationResponseParameter.h - ${OPENAIR_NAS_DIR}/src/ies/CipheringKeySequenceNumber.h - ${OPENAIR_NAS_DIR}/src/ies/Cli.h - ${OPENAIR_NAS_DIR}/src/ies/CsfbResponse.h - ${OPENAIR_NAS_DIR}/src/ies/DaylightSavingTime.h - ${OPENAIR_NAS_DIR}/src/ies/DetachType.h - ${OPENAIR_NAS_DIR}/src/ies/DrxParameter.h - ${OPENAIR_NAS_DIR}/src/ies/EmergencyNumberList.h - ${OPENAIR_NAS_DIR}/src/ies/EmmCause.h - ${OPENAIR_NAS_DIR}/src/ies/EpsAttachResult.h - ${OPENAIR_NAS_DIR}/src/ies/EpsAttachType.h - ${OPENAIR_NAS_DIR}/src/ies/EpsBearerContextStatus.h - ${OPENAIR_NAS_DIR}/src/ies/EpsBearerIdentity.h - ${OPENAIR_NAS_DIR}/src/ies/EpsMobileIdentity.h - ${OPENAIR_NAS_DIR}/src/ies/EpsNetworkFeatureSupport.h - ${OPENAIR_NAS_DIR}/src/ies/EpsQualityOfService.h - ${OPENAIR_NAS_DIR}/src/ies/EpsUpdateResult.h - ${OPENAIR_NAS_DIR}/src/ies/EpsUpdateType.h - ${OPENAIR_NAS_DIR}/src/ies/EsmCause.h - ${OPENAIR_NAS_DIR}/src/ies/EsmInformationTransferFlag.h - ${OPENAIR_NAS_DIR}/src/ies/EsmMessageContainer.h - ${OPENAIR_NAS_DIR}/src/ies/GprsTimer.h - ${OPENAIR_NAS_DIR}/src/ies/GutiType.h - ${OPENAIR_NAS_DIR}/src/ies/IdentityType2.h - ${OPENAIR_NAS_DIR}/src/ies/ImeisvRequest.h - ${OPENAIR_NAS_DIR}/src/ies/KsiAndSequenceNumber.h - ${OPENAIR_NAS_DIR}/src/ies/LcsClientIdentity.h - ${OPENAIR_NAS_DIR}/src/ies/LcsIndicator.h - ${OPENAIR_NAS_DIR}/src/ies/LinkedEpsBearerIdentity.h - ${OPENAIR_NAS_DIR}/src/ies/LlcServiceAccessPointIdentifier.h - ${OPENAIR_NAS_DIR}/src/ies/LocationAreaIdentification.h - ${OPENAIR_NAS_DIR}/src/ies/MessageType.h - ${OPENAIR_NAS_DIR}/src/ies/MobileIdentity.h - ${OPENAIR_NAS_DIR}/src/ies/MobileStationClassmark2.h - ${OPENAIR_NAS_DIR}/src/ies/MobileStationClassmark3.h - ${OPENAIR_NAS_DIR}/src/ies/MsNetworkCapability.h - ${OPENAIR_NAS_DIR}/src/ies/NasKeySetIdentifier.h - ${OPENAIR_NAS_DIR}/src/ies/NasMessageContainer.h - ${OPENAIR_NAS_DIR}/src/ies/NasRequestType.h - ${OPENAIR_NAS_DIR}/src/ies/NasSecurityAlgorithms.h - ${OPENAIR_NAS_DIR}/src/ies/NetworkName.h - ${OPENAIR_NAS_DIR}/src/ies/Nonce.h - ${OPENAIR_NAS_DIR}/src/ies/PacketFlowIdentifier.h - ${OPENAIR_NAS_DIR}/src/ies/PagingIdentity.h - ${OPENAIR_NAS_DIR}/src/ies/PdnAddress.h - ${OPENAIR_NAS_DIR}/src/ies/PdnType.h - ${OPENAIR_NAS_DIR}/src/ies/PlmnList.h - ${OPENAIR_NAS_DIR}/src/ies/ProcedureTransactionIdentity.h - ${OPENAIR_NAS_DIR}/src/ies/ProtocolConfigurationOptions.h - ${OPENAIR_NAS_DIR}/src/ies/ProtocolDiscriminator.h - ${OPENAIR_NAS_DIR}/src/ies/PTmsiSignature.h - ${OPENAIR_NAS_DIR}/src/ies/QualityOfService.h - ${OPENAIR_NAS_DIR}/src/ies/RadioPriority.h - ${OPENAIR_NAS_DIR}/src/ies/SecurityHeaderType.h - ${OPENAIR_NAS_DIR}/src/ies/ServiceType.h - ${OPENAIR_NAS_DIR}/src/ies/ShortMac.h - ${OPENAIR_NAS_DIR}/src/ies/SsCode.h - ${OPENAIR_NAS_DIR}/src/ies/SupportedCodecList.h - ${OPENAIR_NAS_DIR}/src/ies/TimeZoneAndTime.h - ${OPENAIR_NAS_DIR}/src/ies/TimeZone.h - ${OPENAIR_NAS_DIR}/src/ies/TmsiStatus.h - ${OPENAIR_NAS_DIR}/src/ies/TrackingAreaIdentity.h - ${OPENAIR_NAS_DIR}/src/ies/TrackingAreaIdentityList.h - ${OPENAIR_NAS_DIR}/src/ies/TrafficFlowAggregateDescription.h - ${OPENAIR_NAS_DIR}/src/ies/TrafficFlowTemplate.h - ${OPENAIR_NAS_DIR}/src/ies/TransactionIdentifier.h - ${OPENAIR_NAS_DIR}/src/ies/UeNetworkCapability.h - ${OPENAIR_NAS_DIR}/src/ies/UeRadioCapabilityInformationUpdateNeeded.h - ${OPENAIR_NAS_DIR}/src/ies/UeSecurityCapability.h - ${OPENAIR_NAS_DIR}/src/ies/VoiceDomainPreferenceAndUeUsageSetting.h + ${OPENAIR_NAS_DIR}/COMMON/IES/AccessPointName.h + ${OPENAIR_NAS_DIR}/COMMON/IES/AdditionalUpdateResult.h + ${OPENAIR_NAS_DIR}/COMMON/IES/AdditionalUpdateType.h + ${OPENAIR_NAS_DIR}/COMMON/IES/ApnAggregateMaximumBitRate.h + ${OPENAIR_NAS_DIR}/COMMON/IES/AuthenticationFailureParameter.h + ${OPENAIR_NAS_DIR}/COMMON/IES/AuthenticationParameterAutn.h + ${OPENAIR_NAS_DIR}/COMMON/IES/AuthenticationParameterRand.h + ${OPENAIR_NAS_DIR}/COMMON/IES/AuthenticationResponseParameter.h + ${OPENAIR_NAS_DIR}/COMMON/IES/CipheringKeySequenceNumber.h + ${OPENAIR_NAS_DIR}/COMMON/IES/Cli.h + ${OPENAIR_NAS_DIR}/COMMON/IES/CsfbResponse.h + ${OPENAIR_NAS_DIR}/COMMON/IES/DaylightSavingTime.h + ${OPENAIR_NAS_DIR}/COMMON/IES/DetachType.h + ${OPENAIR_NAS_DIR}/COMMON/IES/DrxParameter.h + ${OPENAIR_NAS_DIR}/COMMON/IES/EmergencyNumberList.h + ${OPENAIR_NAS_DIR}/COMMON/IES/EmmCause.h + ${OPENAIR_NAS_DIR}/COMMON/IES/EpsAttachResult.h + ${OPENAIR_NAS_DIR}/COMMON/IES/EpsAttachType.h + ${OPENAIR_NAS_DIR}/COMMON/IES/EpsBearerContextStatus.h + ${OPENAIR_NAS_DIR}/COMMON/IES/EpsBearerIdentity.h + ${OPENAIR_NAS_DIR}/COMMON/IES/EpsMobileIdentity.h + ${OPENAIR_NAS_DIR}/COMMON/IES/EpsNetworkFeatureSupport.h + ${OPENAIR_NAS_DIR}/COMMON/IES/EpsQualityOfService.h + ${OPENAIR_NAS_DIR}/COMMON/IES/EpsUpdateResult.h + ${OPENAIR_NAS_DIR}/COMMON/IES/EpsUpdateType.h + ${OPENAIR_NAS_DIR}/COMMON/IES/EsmCause.h + ${OPENAIR_NAS_DIR}/COMMON/IES/EsmInformationTransferFlag.h + ${OPENAIR_NAS_DIR}/COMMON/IES/EsmMessageContainer.h + ${OPENAIR_NAS_DIR}/COMMON/IES/GprsTimer.h + ${OPENAIR_NAS_DIR}/COMMON/IES/GutiType.h + ${OPENAIR_NAS_DIR}/COMMON/IES/IdentityType2.h + ${OPENAIR_NAS_DIR}/COMMON/IES/ImeisvRequest.h + ${OPENAIR_NAS_DIR}/COMMON/IES/KsiAndSequenceNumber.h + ${OPENAIR_NAS_DIR}/COMMON/IES/LcsClientIdentity.h + ${OPENAIR_NAS_DIR}/COMMON/IES/LcsIndicator.h + ${OPENAIR_NAS_DIR}/COMMON/IES/LinkedEpsBearerIdentity.h + ${OPENAIR_NAS_DIR}/COMMON/IES/LlcServiceAccessPointIdentifier.h + ${OPENAIR_NAS_DIR}/COMMON/IES/LocationAreaIdentification.h + ${OPENAIR_NAS_DIR}/COMMON/IES/MessageType.h + ${OPENAIR_NAS_DIR}/COMMON/IES/MobileIdentity.h + ${OPENAIR_NAS_DIR}/COMMON/IES/MobileStationClassmark2.h + ${OPENAIR_NAS_DIR}/COMMON/IES/MobileStationClassmark3.h + ${OPENAIR_NAS_DIR}/COMMON/IES/MsNetworkCapability.h + ${OPENAIR_NAS_DIR}/COMMON/IES/MsNetworkFeatureSupport.h + ${OPENAIR_NAS_DIR}/COMMON/IES/NasKeySetIdentifier.h + ${OPENAIR_NAS_DIR}/COMMON/IES/NasMessageContainer.h + ${OPENAIR_NAS_DIR}/COMMON/IES/NasRequestType.h + ${OPENAIR_NAS_DIR}/COMMON/IES/NasSecurityAlgorithms.h + ${OPENAIR_NAS_DIR}/COMMON/IES/NetworkName.h + ${OPENAIR_NAS_DIR}/COMMON/IES/Nonce.h + ${OPENAIR_NAS_DIR}/COMMON/IES/PacketFlowIdentifier.h + ${OPENAIR_NAS_DIR}/COMMON/IES/PagingIdentity.h + ${OPENAIR_NAS_DIR}/COMMON/IES/PdnAddress.h + ${OPENAIR_NAS_DIR}/COMMON/IES/PdnType.h + ${OPENAIR_NAS_DIR}/COMMON/IES/PlmnList.h + ${OPENAIR_NAS_DIR}/COMMON/IES/ProcedureTransactionIdentity.h + ${OPENAIR_NAS_DIR}/COMMON/IES/ProtocolConfigurationOptions.h + ${OPENAIR_NAS_DIR}/COMMON/IES/ProtocolDiscriminator.h + ${OPENAIR_NAS_DIR}/COMMON/IES/PTmsiSignature.h + ${OPENAIR_NAS_DIR}/COMMON/IES/QualityOfService.h + ${OPENAIR_NAS_DIR}/COMMON/IES/RadioPriority.h + ${OPENAIR_NAS_DIR}/COMMON/IES/SecurityHeaderType.h + ${OPENAIR_NAS_DIR}/COMMON/IES/ServiceType.h + ${OPENAIR_NAS_DIR}/COMMON/IES/ShortMac.h + ${OPENAIR_NAS_DIR}/COMMON/IES/SsCode.h + ${OPENAIR_NAS_DIR}/COMMON/IES/SupportedCodecList.h + ${OPENAIR_NAS_DIR}/COMMON/IES/TimeZoneAndTime.h + ${OPENAIR_NAS_DIR}/COMMON/IES/TimeZone.h + ${OPENAIR_NAS_DIR}/COMMON/IES/TmsiStatus.h + ${OPENAIR_NAS_DIR}/COMMON/IES/TrackingAreaIdentity.h + ${OPENAIR_NAS_DIR}/COMMON/IES/TrackingAreaIdentityList.h + ${OPENAIR_NAS_DIR}/COMMON/IES/TrafficFlowAggregateDescription.h + ${OPENAIR_NAS_DIR}/COMMON/IES/TrafficFlowTemplate.h + ${OPENAIR_NAS_DIR}/COMMON/IES/TransactionIdentifier.h + ${OPENAIR_NAS_DIR}/COMMON/IES/UeNetworkCapability.h + ${OPENAIR_NAS_DIR}/COMMON/IES/UeRadioCapabilityInformationUpdateNeeded.h + ${OPENAIR_NAS_DIR}/COMMON/IES/UeSecurityCapability.h + ${OPENAIR_NAS_DIR}/COMMON/IES/VoiceDomainPreferenceAndUeUsageSetting.h ) add_library(ies ${ies_SRC} ${ies_HDR}) target_include_directories(ies PRIVATE - ${OPENAIR_NAS_DIR}/src/ies + ${OPENAIR_NAS_DIR}/COMMON/IES ) @@ -658,23 +660,23 @@ include_directories( ${OPENAIRCN_DIR}/COMMON ${OPENAIRCN_DIR}/SECU ${OPENAIR_NAS_DIR}/src - ${OPENAIR_NAS_DIR}/src/api/network - ${OPENAIR_NAS_DIR}/src/api/user - ${OPENAIR_NAS_DIR}/src/emm - ${OPENAIR_NAS_DIR}/src/emm/msg - ${OPENAIR_NAS_DIR}/src/emm/sap - ${OPENAIR_NAS_DIR}/src/esm - ${OPENAIR_NAS_DIR}/src/esm/sap - ${OPENAIR_NAS_DIR}/src/esm/msg - ${OPENAIR_NAS_DIR}/src/ies - ${OPENAIR_NAS_DIR}/src/include - ${OPENAIR_NAS_DIR}/src/util ) + ${OPENAIR_NAS_DIR}/COMMON + ${OPENAIR_NAS_DIR}/COMMON/API/NETWORK + ${OPENAIR_NAS_DIR}/UE/API/USER + ${OPENAIR_NAS_DIR}/UE/EMM + ${OPENAIR_NAS_DIR}/COMMON/EMM/MSG + ${OPENAIR_NAS_DIR}/UE/EMM/SAP + ${OPENAIR_NAS_DIR}/UE/ESM + ${OPENAIR_NAS_DIR}/UE/ESM/SAP + ${OPENAIR_NAS_DIR}/COMMON/ESM/MSG + ${OPENAIR_NAS_DIR}/COMMON/IES + ${OPENAIR_NAS_DIR}/COMMON/UTIL ) -ADD_EXECUTABLE(at_nas_ue ${OPENAIR_NAS_DIR}/src/UEprocess.c - ${OPENAIR_NAS_DIR}/src/nas_network.c - ${OPENAIR_NAS_DIR}/src/nas_parser.c - ${OPENAIR_NAS_DIR}/src/nas_proc.c - ${OPENAIR_NAS_DIR}/src/nas_user.c +ADD_EXECUTABLE(at_nas_ue ${OPENAIR_NAS_DIR}/UE/UEprocess.c + ${OPENAIR_NAS_DIR}/UE/nas_network.c + ${OPENAIR_NAS_DIR}/UE/nas_parser.c + ${OPENAIR_NAS_DIR}/UE/nas_proc.c + ${OPENAIR_NAS_DIR}/UE/nas_user.c ) target_link_libraries (at_nas_ue diff --git a/cmake_targets/autotests/0200/CMakeLists.template b/cmake_targets/autotests/0200/CMakeLists.template new file mode 100644 index 0000000000..1ccd57fffd --- /dev/null +++ b/cmake_targets/autotests/0200/CMakeLists.template @@ -0,0 +1,82 @@ +cmake_minimum_required(VERSION 2.8) + +set ( CMAKE_BUILD_TYPE "RelWithDebInfo" ) +set ( ADDR_CONF False ) +set ( DEBUG_OMG False ) +set ( DISABLE_XER_PRINT False ) +set ( DRIVER2013 True ) +set ( EMOS False ) +set ( ENABLE_FXP True ) +set ( ENABLE_ITTI True ) +set ( ENABLE_NAS_UE_LOGGING False ) +set ( ENABLE_NEW_MULTICAST True ) +set ( ENABLE_PGM_TRANSPORT True ) +set ( ENABLE_RAL False ) +set ( ENABLE_SECURITY False ) +set ( ENABLE_STANDALONE_EPC False) +set ( ENABLE_USE_CPU_EXECUTION_TIME True ) +set ( ENABLE_USE_MME False ) +set ( ENABLE_USE_RAW_SOCKET_FOR_SGI False) +set ( ENABLE_VCD_FIFO False ) +set ( ENB_MODE True ) +set ( EXMIMO_IOT True ) +set ( HARD_RT False ) +set ( JUMBO_FRAME True ) +set ( LARGE_SCALE False ) +set ( LINK_ENB_PDCP_TO_GTPV1U False) +set ( LINUX_LIST False ) +set ( LINUX True ) +set ( LOCALIZATION False ) +set ( LOG_NO_THREAD 1 ) +set ( LOWLATENCY False ) +set ( MAC_CONTEXT 1 ) +set ( MAX_NUM_CCs 1 ) +set ( MESSAGE_CHART_GENERATOR False ) +set ( MESSAGE_CHART_GENERATOR_RLC_MAC False ) +set ( MESSAGE_CHART_GENERATOR_PHY False ) +set ( MIH_C_MEDIEVAL_EXTENSIONS False ) +set ( MSG_PRINT False ) +set ( MU_RECEIVER False ) +set ( NAS_ADDRESS_FIX True ) +set ( NAS_BUILT_IN_UE False) +set ( NAS_MME False ) +set ( NAS_UE False ) +set ( NB_ANTENNAS_RX "2" ) +set ( NB_ANTENNAS_TX "2" ) +set ( NB_ANTENNAS_TXRX "2" ) +set ( NEW_FFT True ) +set ( NO_RRM True ) +set ( OAI_EMU True ) +set ( OAISIM True ) +set ( OAI_NW_DRIVER_TYPE_ETHERNET True ) +set ( OAI_NW_DRIVER_USE_NETLINK True ) +set ( OPENAIR1 True ) +set ( OPENAIR2 True ) +set ( OPENAIR_EMU False ) +set ( OPENAIR_LTE True ) +set ( PACKAGE_NAME "oaisim" ) +set ( PBS_SIM False ) +set ( PDCP_USE_NETLINK True ) +set ( PC_DSP True ) +set ( PC_TARGET True ) +set ( PDCP_MSG_PRINT False ) +set ( PERFECT_CE False ) +set ( PHY_ABSTRACTION True ) +set ( PHY_CONTEXT False ) +set ( PHY_EMUL False ) +set ( PHYSIM True ) +set ( PUCCH True ) +set ( RANDOM_BF False ) +set ( RF_BOARD "False" ) +set ( RRC_ASN1_VERSION "Rel10" ) +set ( RLC_STOP_ON_LOST_PDU False ) +set ( RRC_MSG_PRINT False ) +set ( RTAI False ) +set ( SECU False ) +set ( SMBV False ) +set ( SPECTRA False ) +set ( TEST_OMG False ) +set ( USE_3GPP_ADDR_AS_LINK_ADDR False ) +set ( USE_MME "R10" ) +set ( USER_MODE True ) +set ( XER_PRINT False ) diff --git a/cmake_targets/autotests/0200/CMakeLists.txt b/cmake_targets/autotests/0200/CMakeLists.txt new file mode 100644 index 0000000000..e6c4bdfe47 --- /dev/null +++ b/cmake_targets/autotests/0200/CMakeLists.txt @@ -0,0 +1,87 @@ +cmake_minimum_required(VERSION 2.8) + +set ( CMAKE_BUILD_TYPE "RelWithDebInfo" ) +set ( ADDR_CONF False ) +set ( DEBUG_OMG False ) +set ( DISABLE_XER_PRINT False ) +set ( DRIVER2013 True ) +set ( EMOS False ) +set ( ENABLE_FXP True ) +set ( ENABLE_ITTI True ) +set ( ENABLE_NAS_UE_LOGGING False ) +set ( ENABLE_NEW_MULTICAST True ) +set ( ENABLE_PGM_TRANSPORT True ) +set ( ENABLE_RAL False ) +set ( ENABLE_SECURITY False ) +set ( ENABLE_STANDALONE_EPC False) +set ( ENABLE_USE_CPU_EXECUTION_TIME True ) +set ( ENABLE_USE_MME False ) +set ( ENABLE_USE_RAW_SOCKET_FOR_SGI False) +set ( ENABLE_VCD_FIFO False ) +set ( ENB_MODE True ) +set ( EXMIMO_IOT True ) +set ( HARD_RT False ) +set ( JUMBO_FRAME True ) +set ( LARGE_SCALE False ) +set ( LINK_ENB_PDCP_TO_GTPV1U False) +set ( LINUX_LIST False ) +set ( LINUX True ) +set ( LOCALIZATION False ) +set ( LOG_NO_THREAD 1 ) +set ( LOWLATENCY False ) +set ( MAC_CONTEXT 1 ) +set ( MAX_NUM_CCs 1 ) +set ( MESSAGE_CHART_GENERATOR False ) +set ( MESSAGE_CHART_GENERATOR_RLC_MAC False ) +set ( MESSAGE_CHART_GENERATOR_PHY False ) +set ( MIH_C_MEDIEVAL_EXTENSIONS False ) +set ( MSG_PRINT False ) +set ( MU_RECEIVER False ) +set ( NAS_ADDRESS_FIX True ) +set ( NAS_BUILT_IN_UE False) +set ( NAS_MME False ) +set ( NAS_UE False ) +set ( NB_ANTENNAS_RX "2" ) +set ( NB_ANTENNAS_TX "2" ) +set ( NB_ANTENNAS_TXRX "2" ) +set ( NEW_FFT True ) +set ( NO_RRM True ) +set ( OAI_EMU True ) +set ( OAISIM True ) +set ( OAI_NW_DRIVER_TYPE_ETHERNET True ) +set ( OAI_NW_DRIVER_USE_NETLINK True ) +set ( OPENAIR1 True ) +set ( OPENAIR2 True ) +set ( OPENAIR_EMU False ) +set ( OPENAIR_LTE True ) +set ( PACKAGE_NAME "oaisim" ) +set ( PBS_SIM False ) +set ( PDCP_USE_NETLINK True ) +set ( PC_DSP True ) +set ( PC_TARGET True ) +set ( PDCP_MSG_PRINT False ) +set ( PERFECT_CE False ) +set ( PHY_ABSTRACTION True ) +set ( PHY_CONTEXT False ) +set ( PHY_EMUL False ) +set ( PHYSIM True ) +set ( PUCCH True ) +set ( RANDOM_BF False ) +set ( RF_BOARD "False" ) +set ( RRC_ASN1_VERSION "Rel10" ) +set ( RLC_STOP_ON_LOST_PDU False ) +set ( RRC_MSG_PRINT False ) +set ( RTAI False ) +set ( SECU False ) +set ( SMBV False ) +set ( SPECTRA False ) +set ( TEST_OMG False ) +set ( USE_3GPP_ADDR_AS_LINK_ADDR False ) +set ( USE_MME "R10" ) +set ( USER_MODE True ) +set ( XER_PRINT False ) +set ( XFORMS False ) +set ( PRINT_STATS False ) +set ( RRC_ASN1_VERSION "Rel10") +set ( ENABLE_VCD_FIFO False ) +include(${CMAKE_CURRENT_SOURCE_DIR}/../../CMakeLists.txt) diff --git a/cmake_targets/autotests/0201/CMakeLists.template b/cmake_targets/autotests/0201/CMakeLists.template new file mode 100644 index 0000000000..1ccd57fffd --- /dev/null +++ b/cmake_targets/autotests/0201/CMakeLists.template @@ -0,0 +1,82 @@ +cmake_minimum_required(VERSION 2.8) + +set ( CMAKE_BUILD_TYPE "RelWithDebInfo" ) +set ( ADDR_CONF False ) +set ( DEBUG_OMG False ) +set ( DISABLE_XER_PRINT False ) +set ( DRIVER2013 True ) +set ( EMOS False ) +set ( ENABLE_FXP True ) +set ( ENABLE_ITTI True ) +set ( ENABLE_NAS_UE_LOGGING False ) +set ( ENABLE_NEW_MULTICAST True ) +set ( ENABLE_PGM_TRANSPORT True ) +set ( ENABLE_RAL False ) +set ( ENABLE_SECURITY False ) +set ( ENABLE_STANDALONE_EPC False) +set ( ENABLE_USE_CPU_EXECUTION_TIME True ) +set ( ENABLE_USE_MME False ) +set ( ENABLE_USE_RAW_SOCKET_FOR_SGI False) +set ( ENABLE_VCD_FIFO False ) +set ( ENB_MODE True ) +set ( EXMIMO_IOT True ) +set ( HARD_RT False ) +set ( JUMBO_FRAME True ) +set ( LARGE_SCALE False ) +set ( LINK_ENB_PDCP_TO_GTPV1U False) +set ( LINUX_LIST False ) +set ( LINUX True ) +set ( LOCALIZATION False ) +set ( LOG_NO_THREAD 1 ) +set ( LOWLATENCY False ) +set ( MAC_CONTEXT 1 ) +set ( MAX_NUM_CCs 1 ) +set ( MESSAGE_CHART_GENERATOR False ) +set ( MESSAGE_CHART_GENERATOR_RLC_MAC False ) +set ( MESSAGE_CHART_GENERATOR_PHY False ) +set ( MIH_C_MEDIEVAL_EXTENSIONS False ) +set ( MSG_PRINT False ) +set ( MU_RECEIVER False ) +set ( NAS_ADDRESS_FIX True ) +set ( NAS_BUILT_IN_UE False) +set ( NAS_MME False ) +set ( NAS_UE False ) +set ( NB_ANTENNAS_RX "2" ) +set ( NB_ANTENNAS_TX "2" ) +set ( NB_ANTENNAS_TXRX "2" ) +set ( NEW_FFT True ) +set ( NO_RRM True ) +set ( OAI_EMU True ) +set ( OAISIM True ) +set ( OAI_NW_DRIVER_TYPE_ETHERNET True ) +set ( OAI_NW_DRIVER_USE_NETLINK True ) +set ( OPENAIR1 True ) +set ( OPENAIR2 True ) +set ( OPENAIR_EMU False ) +set ( OPENAIR_LTE True ) +set ( PACKAGE_NAME "oaisim" ) +set ( PBS_SIM False ) +set ( PDCP_USE_NETLINK True ) +set ( PC_DSP True ) +set ( PC_TARGET True ) +set ( PDCP_MSG_PRINT False ) +set ( PERFECT_CE False ) +set ( PHY_ABSTRACTION True ) +set ( PHY_CONTEXT False ) +set ( PHY_EMUL False ) +set ( PHYSIM True ) +set ( PUCCH True ) +set ( RANDOM_BF False ) +set ( RF_BOARD "False" ) +set ( RRC_ASN1_VERSION "Rel10" ) +set ( RLC_STOP_ON_LOST_PDU False ) +set ( RRC_MSG_PRINT False ) +set ( RTAI False ) +set ( SECU False ) +set ( SMBV False ) +set ( SPECTRA False ) +set ( TEST_OMG False ) +set ( USE_3GPP_ADDR_AS_LINK_ADDR False ) +set ( USE_MME "R10" ) +set ( USER_MODE True ) +set ( XER_PRINT False ) diff --git a/cmake_targets/autotests/0201/CMakeLists.txt b/cmake_targets/autotests/0201/CMakeLists.txt new file mode 100644 index 0000000000..e6c4bdfe47 --- /dev/null +++ b/cmake_targets/autotests/0201/CMakeLists.txt @@ -0,0 +1,87 @@ +cmake_minimum_required(VERSION 2.8) + +set ( CMAKE_BUILD_TYPE "RelWithDebInfo" ) +set ( ADDR_CONF False ) +set ( DEBUG_OMG False ) +set ( DISABLE_XER_PRINT False ) +set ( DRIVER2013 True ) +set ( EMOS False ) +set ( ENABLE_FXP True ) +set ( ENABLE_ITTI True ) +set ( ENABLE_NAS_UE_LOGGING False ) +set ( ENABLE_NEW_MULTICAST True ) +set ( ENABLE_PGM_TRANSPORT True ) +set ( ENABLE_RAL False ) +set ( ENABLE_SECURITY False ) +set ( ENABLE_STANDALONE_EPC False) +set ( ENABLE_USE_CPU_EXECUTION_TIME True ) +set ( ENABLE_USE_MME False ) +set ( ENABLE_USE_RAW_SOCKET_FOR_SGI False) +set ( ENABLE_VCD_FIFO False ) +set ( ENB_MODE True ) +set ( EXMIMO_IOT True ) +set ( HARD_RT False ) +set ( JUMBO_FRAME True ) +set ( LARGE_SCALE False ) +set ( LINK_ENB_PDCP_TO_GTPV1U False) +set ( LINUX_LIST False ) +set ( LINUX True ) +set ( LOCALIZATION False ) +set ( LOG_NO_THREAD 1 ) +set ( LOWLATENCY False ) +set ( MAC_CONTEXT 1 ) +set ( MAX_NUM_CCs 1 ) +set ( MESSAGE_CHART_GENERATOR False ) +set ( MESSAGE_CHART_GENERATOR_RLC_MAC False ) +set ( MESSAGE_CHART_GENERATOR_PHY False ) +set ( MIH_C_MEDIEVAL_EXTENSIONS False ) +set ( MSG_PRINT False ) +set ( MU_RECEIVER False ) +set ( NAS_ADDRESS_FIX True ) +set ( NAS_BUILT_IN_UE False) +set ( NAS_MME False ) +set ( NAS_UE False ) +set ( NB_ANTENNAS_RX "2" ) +set ( NB_ANTENNAS_TX "2" ) +set ( NB_ANTENNAS_TXRX "2" ) +set ( NEW_FFT True ) +set ( NO_RRM True ) +set ( OAI_EMU True ) +set ( OAISIM True ) +set ( OAI_NW_DRIVER_TYPE_ETHERNET True ) +set ( OAI_NW_DRIVER_USE_NETLINK True ) +set ( OPENAIR1 True ) +set ( OPENAIR2 True ) +set ( OPENAIR_EMU False ) +set ( OPENAIR_LTE True ) +set ( PACKAGE_NAME "oaisim" ) +set ( PBS_SIM False ) +set ( PDCP_USE_NETLINK True ) +set ( PC_DSP True ) +set ( PC_TARGET True ) +set ( PDCP_MSG_PRINT False ) +set ( PERFECT_CE False ) +set ( PHY_ABSTRACTION True ) +set ( PHY_CONTEXT False ) +set ( PHY_EMUL False ) +set ( PHYSIM True ) +set ( PUCCH True ) +set ( RANDOM_BF False ) +set ( RF_BOARD "False" ) +set ( RRC_ASN1_VERSION "Rel10" ) +set ( RLC_STOP_ON_LOST_PDU False ) +set ( RRC_MSG_PRINT False ) +set ( RTAI False ) +set ( SECU False ) +set ( SMBV False ) +set ( SPECTRA False ) +set ( TEST_OMG False ) +set ( USE_3GPP_ADDR_AS_LINK_ADDR False ) +set ( USE_MME "R10" ) +set ( USER_MODE True ) +set ( XER_PRINT False ) +set ( XFORMS False ) +set ( PRINT_STATS False ) +set ( RRC_ASN1_VERSION "Rel10") +set ( ENABLE_VCD_FIFO False ) +include(${CMAKE_CURRENT_SOURCE_DIR}/../../CMakeLists.txt) diff --git a/cmake_targets/autotests/run_compilation_autotests.bash b/cmake_targets/autotests/run_compilation_autotests.bash index 9963edead6..f27d1dcca8 100755 --- a/cmake_targets/autotests/run_compilation_autotests.bash +++ b/cmake_targets/autotests/run_compilation_autotests.bash @@ -7,81 +7,109 @@ else exit 1 fi +tdir=$OPENAIR_DIR/cmake_targets/autotests + +results_file=$tdir/log/compilation_autotests.xml + # include the jUnit-like logging functions source $OPENAIR_DIR/cmake_targets/tools/test_helper test_compile() { xUnit_start + test_name=$1 + compile_prog=$2 + exec_prog=$3 + build_dir=$tdir/$1/build + log_file=$tdir/log/$1.txt + target=$5 + echo "Compiling test case $test_name. Log file = $log_file" + rm -fr $build_dir mkdir -p $tdir/$1/build - cd $tdir/$1/build + cd $build_dir { cmake .. - rm -f $3 - make -j4 $2 - } > $tdir/log/$1.txt 2>&1 - if [ -s $3 ] ; then - cp $3 $tdir/bin/`basename $3`.$1 - echo_success "$1 test compiled" - xUnit_success "compilation" $1 + rm -f $exec_prog + make -j`nproc` $compile_prog + } > $log_file 2>&1 + if [ -s $exec_prog ] ; then + cp $exec_prog $tdir/bin/`basename $exec_prog`.$target.$test_name + echo_success "$test_name $exec_prog $target compiled" + xUnit_success "compilation" $test_name "PASS" 1 else - echo_error "$1 test compilation failed" - xUnit_fail "compilation" $1 + echo_error "$test_name $exec_prog $target compilation failed" + xUnit_fail "compilation" $test_name "FAIL" 1 fi } -tdir=$OPENAIR_DIR/cmake_targets/autotests mkdir -p $tdir/bin $tdir/log updated=$(svn st -q $OPENAIR_DIR) if [ "$updated" != "" ] ; then - echo_warning "some files are not in svn: $updated" + echo_warning "some files are not in svn:\n $updated" fi cd $tdir test_compile \ - test.0101 oaisim \ - oaisim $tdir/bin/oaisim.r8 + test.0101 oaisim_nos1 \ + oaisim_nos1 $tdir/bin/oaisim.r8 rel8.nos1 test_compile \ - test.0102 oaisim \ - oaisim $tdir/bin/oaisim.r8.nas + test.0102 oaisim_nos1 \ + oaisim_nos1 $tdir/bin/oaisim.r8.nas rel8.nos1.nas +cp $tdir/test.0103/CMakeLists.txt.Rel8 $tdir/test.0103/CMakeLists.txt test_compile \ test.0103 lte-softmodem \ - lte-softmodem $tdir/bin/lte-softmodem.r8.rf + lte-softmodem $tdir/bin/lte-softmodem.r8.rf Rel8.EXMIMO + +cp $tdir/test.0103/CMakeLists.txt.Rel10 $tdir/test.0103/CMakeLists.txt +test_compile \ + test.0103 lte-softmodem \ + lte-softmodem $tdir/bin/lte-softmodem.r10.rf Rel10.EXMIMO + +cp $tdir/test.0103/CMakeLists.txt.USRP $tdir/test.0103/CMakeLists.txt +test_compile \ + test.0103 lte-softmodem \ + lte-softmodem $tdir/bin/lte-softmodem.r10.rf Rel10.USRP test_compile \ test.0104 dlsim \ - dlsim $tdir/bin/dlsim + dlsim $tdir/bin/dlsim dlsim.Rel8 test_compile \ test.0104 ulsim \ - ulsim $tdir/bin/ulsim + ulsim $tdir/bin/ulsim ulsim.Rel8 test_compile \ test.0106 oaisim \ - oaisim $tdir/bin/oaisim.r8.itti + oaisim $tdir/bin/oaisim.r8.itti Rel8.itti test_compile \ - test.0107 oaisim \ - oaisim $tdir/bin/oaisim.r10 + test.0107 oaisim_nos1 \ + oaisim_nos1 $tdir/bin/oaisim.r10 Rel10.nos1 test_compile \ test.0108 oaisim \ - oaisim $tdir/bin/oaisim.r10.itti + oaisim $tdir/bin/oaisim.r10.itti rel10.itti -test_compile \ - test.0114 oaisim \ - oaisim $tdir/bin/oaisim.r8.itti.ral +#test_compile \ LG: RAL REMOVED +# test.0114 oaisim \ +# oaisim $tdir/bin/oaisim.r8.itti.ral rel8.itti.ral -test_compile \ - test.0115 oaisim \ - oaisim $tdir/bin/oaisim.r10.itti.ral +#test_compile \ LG: RAL REMOVED +# test.0115 oaisim \ +# oaisim $tdir/bin/oaisim.r10.itti.ral rel10.itti.ral test_compile \ test.0120 nasmesh \ - CMakeFiles/nasmesh/nasmesh.ko $tdir/bin/nasmesh.ko + CMakeFiles/nasmesh/nasmesh.ko $tdir/bin/nasmesh.ko + +test_compile \ + test.0130 rrh_gw \ + rrh_gw $tdir/bin/rrh_gw # write the test results into a file -xUnit_write "$tdir/log/compilation_autotests.xml" +xUnit_write "$results_file" + +echo "Test Results are written to $results_file" diff --git a/cmake_targets/autotests/run_exec_autotests.bash b/cmake_targets/autotests/run_exec_autotests.bash index d5939140d8..6731bcc12d 100755 --- a/cmake_targets/autotests/run_exec_autotests.bash +++ b/cmake_targets/autotests/run_exec_autotests.bash @@ -1,12 +1,102 @@ #!/bin/bash -if [ -s $OPENAIR_DIR/cmake_targets/tools/build_helper ] ; then - source $OPENAIR_DIR/cmake_targets/tools/build_helper +if [ -s $OPENAIR_DIR/cmake_targets/tools/test_helper ] ; then + source $OPENAIR_DIR/cmake_targets/tools/test_helper else echo "Error: no file in the file tree: is OPENAIR_DIR variable set?" exit 1 fi + +SUDO="sudo -E " +tdir=$OPENAIR_DIR/cmake_targets/autotests +mkdir -p $tdir/bin $tdir/log +results_file="$tdir/log/execution_autotests.xml" + +updated=$(svn st -q $OPENAIR_DIR) +if [ "$updated" != "" ] ; then + echo "some files are not in svn:\n $updated" +fi + +cd $tdir + + +#\param $1 -> name of test case +#\param $2 -> name of compilation program +#\param $3 -> arguments for compilation program +#\param $4 -> name of pre-executable to install kernel modules, etc +#\param $5 -> arguments of pre-executable +#\param $6 -> name of executable +#\param $7 -> arguments for running the program +#\param $8 -> search expression +#\param $9 -> number of runs + +test_compile_and_run() { + xUnit_start + test_case_name=$1 + log_dir=$tdir/log + log_file=$tdir/log/test.$1.txt + compile_prog=$2 + compile_args=$3 + pre_exec_file=$4 + pre_exec_args=$5 + exec_args=$7 + search_expr=$8 + nruns=$9 + build_dir=$tdir/$1/build + exec_file=$build_dir/$6 + + #Temporary log file where execution log is stored. + temp_exec_log=$log_dir/temp_log.txt + + echo "Compiling test case $test_case_name. Log file = $log_file" + + rm -fr $build_dir + mkdir -p $build_dir + +# echo "log_dir = $log_dir" +# echo "log_file = $log_file" +# echo "exec_file = $exec_file" +# echo "args = $args" +# echo "search_expr = $search_expr" +# echo "pre_exec_file = $pre_exec_file" + + echo "" > $log_file + cd $build_dir + { + cmake .. + #rm -fv $exec_file + make -j`nproc` $compile_prog + }>> $log_file 2>&1 + echo "" >> $log_file 2>&1 + + for (( run_index=1; run_index <= $nruns; run_index++ )) + do + + echo "Executing test case $test_case_name, Run Index = $run_index, Log file = $log_file" + + echo "-----------------------------------------------------------------------------" >> $log_file 2>&1 + echo "" >> $log_file 2>&1 + + + source $pre_exec_file $pre_exec_args >> $log_file 2>&1 + $exec_file $exec_args > $temp_exec_log 2>&1 + cat $temp_exec_log >> $log_file 2>&1 + echo "" >> $log_file 2>&1 + + search_result=`grep "$search_expr" $temp_exec_log` + + if [ -z "$search_result" ]; then + xUnit_fail "execution" "$test_case_name" "FAIL" "$run_index" + else + xUnit_success "execution" "$test_case_name" "PASS" "$run_index" + fi + +# End of for loop + done + +} + dbin=$OPENAIR_DIR/cmake_targets/autotests/bin dlog=$OPENAIR_DIR/cmake_targets/autotests/log @@ -14,6 +104,9 @@ run_test() { case=case$1; shift cmd=$1; shift expected=$3; shift +echo "expected = $expected" +exit + $cmd > $dlog/$case.txt 2>&1 if [ $expected = "true" ] ; then if $* $dlog/$case.txt; then @@ -30,7 +123,29 @@ else fi } -run_test 0200 "$dbin/oaisim.r8 -a -A AWGN -n 100" false grep -q '(Segmentation.fault)|(Exiting)|(FATAL)' +#$1 -> name of test case +#$2 -> name of compilation program +#$3 -> arguments for compilation program +#$4 -> name of pre-executable to install kernel modules, etc +#$5 -> arguments of pre-executable +#$6 -> name of executable +#$7 -> arguments for running the program +#$8 -> search expression +#$9 -> number of runs -run_test 0201 "$dbin/oaisim.r8 -a -A AWGN -n 100" false fgrep -q '[E]' +test_compile_and_run 0200 "oaisim_nos1" "" "$OPENAIR_DIR/cmake_targets/tools/init_nas_nos1" "" "oaisim_nos1" " -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -b1 -u1 -n1000" "RRC_CONN" 3 + +test_compile_and_run 0201 "oaisim_nos1" "" "$OPENAIR_DIR/cmake_targets/tools/init_nas_nos1" "" "oaisim_nos1" " -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -b1 -u1 -a -n1000" "RRC_CONN" 3 + +#test_compile_and_run 0200 "oaisim_nos1" "" "$OPENAIR_DIR/cmake_targets/tools/init_nas_nos1" "" "oaisim_nos1" " -O /home/calisson/rohit/oai_snav/taets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -b1 -u1 -a " "RRC_CONN" 3 + +#run_test 0200 "$dbin/oaisim.r8 -a -A AWGN -n 100" false grep -q '(Segmentation.fault)|(Exiting)|(FATAL)' + +#run_test 0201 "$dbin/oaisim.r8 -a -A AWGN -n 100" false fgrep -q '[E]' + +# write the test results into a file + +xUnit_write "$results_file" + +echo "Test Results are written to $results_file" diff --git a/cmake_targets/autotests/test.0101/CMakeLists.txt b/cmake_targets/autotests/test.0101/CMakeLists.txt index d4c2d85cdc..ed913b0fb9 100644 --- a/cmake_targets/autotests/test.0101/CMakeLists.txt +++ b/cmake_targets/autotests/test.0101/CMakeLists.txt @@ -10,26 +10,20 @@ set ( ENABLE_FXP True ) set ( ENABLE_ITTI False ) set ( ENABLE_NAS_UE_LOGGING False ) set ( ENABLE_NEW_MULTICAST True ) -set ( ENABLE_PDCP_NETLINK_FIFO False ) set ( ENABLE_PGM_TRANSPORT True ) set ( ENABLE_RAL False ) set ( ENABLE_SECURITY False ) set ( ENABLE_STANDALONE_EPC False ) set ( ENABLE_USE_CPU_EXECUTION_TIME True ) -set ( ENABLE_USE_GTPU_IN_KERNEL False ) set ( ENABLE_USE_MME False ) -set ( ENABLE_USE_NETFILTER_FOR_SGI False ) -set ( ENABLE_USE_PCAP_FOR_SGI False ) -set ( ENABLE_USE_RAW_SOCKET_FOR_SGI False ) -set ( ENABLE_VCD_FIFO True ) +set ( ENABLE_USE_RAW_SOCKET_FOR_SGI False) +set ( ENABLE_VCD_FIFO False ) set ( ENB_MODE True ) -set ( EPC_BUILD False ) set ( HARD_RT False ) set ( JUMBO_FRAME True ) set ( LARGE_SCALE False ) set ( LINK_ENB_PDCP_TO_GTPV1U False ) set ( LINK_ENB_PDCP_TO_IP_DRIVER False ) -set ( LINK_PDCP_TO_GTPV1U False ) set ( LINUX_LIST False ) set ( LINUX True ) set ( LOCALIZATION False ) @@ -37,7 +31,10 @@ set ( LOG_NO_THREAD True ) set ( LOWLATENCY False ) set ( MAC_CONTEXT 1 ) set ( MAX_NUM_CCs 1 ) -set ( MIH_C_MEDIEVAL_EXTENSIONS True ) +set ( MESSAGE_CHART_GENERATOR False ) +set ( MESSAGE_CHART_GENERATOR_RLC_MAC False ) +set ( MESSAGE_CHART_GENERATOR_PHY False ) +set ( MIH_C_MEDIEVAL_EXTENSIONS False ) set ( MSG_PRINT False ) set ( MU_RECEIVER False ) set ( NAS_ADDRESS_FIX False ) @@ -55,7 +52,7 @@ set ( OAI_EMU True ) set ( OAI_NW_DRIVER_TYPE_ETHERNET False ) set ( OAI_NW_DRIVER_USE_NETLINK False ) set ( OAISIM True ) -set ( OPENAIR1 False ) +set ( OPENAIR1 True ) set ( OPENAIR2 True ) set ( OPENAIR_EMU False ) set ( OPENAIR_LTE True ) @@ -72,7 +69,7 @@ set ( PHY_EMUL False ) set ( PHYSIM False ) set ( PUCCH True ) set ( RANDOM_BF False ) -set ( RF_BOARD False ) +set ( RF_BOARD "False" ) set ( RLC_STOP_ON_LOST_PDU False ) set ( RRC_ASN1_VERSION Rel8 ) set ( RRC_DEFAULT_RAB_IS_AM False ) @@ -102,8 +99,8 @@ set ( TRACE_RLC_UM_RX False ) set ( TRACE_RLC_UM_SEGMENT False ) set ( TRACE_RLC_UM_TX_STATUS False ) set ( USE_3GPP_ADDR_AS_LINK_ADDR False ) -set ( USE_MME False ) +set ( USE_MME "R8" ) set ( USER_MODE True ) set ( XER_PRINT True ) set ( XFORMS False ) -include(${CMAKE_CURRENT_SOURCE_DIR}/../../CMakeLists.txt) +include(${CMAKE_CURRENT_SOURCE_DIR}/../../CMakeLists.txt) \ No newline at end of file diff --git a/cmake_targets/autotests/test.0102/CMakeLists.txt b/cmake_targets/autotests/test.0102/CMakeLists.txt index 37e9dc3791..d05856ebb0 100644 --- a/cmake_targets/autotests/test.0102/CMakeLists.txt +++ b/cmake_targets/autotests/test.0102/CMakeLists.txt @@ -10,17 +10,12 @@ set ( ENABLE_FXP True ) set ( ENABLE_ITTI False ) set ( ENABLE_NAS_UE_LOGGING False ) set ( ENABLE_NEW_MULTICAST True ) -set ( ENABLE_PDCP_NETLINK_FIFO False ) set ( ENABLE_PGM_TRANSPORT True ) set ( ENABLE_RAL False ) set ( ENABLE_SECURITY False ) set ( ENABLE_STANDALONE_EPC False ) set ( ENABLE_USE_CPU_EXECUTION_TIME True ) -set ( ENABLE_USE_GTPU_IN_KERNEL False ) set ( ENABLE_USE_MME False ) -set ( ENABLE_USE_NETFILTER_FOR_SGI False ) -set ( ENABLE_USE_PCAP_FOR_SGI False ) -set ( ENABLE_USE_RAW_SOCKET_FOR_SGI False ) set ( ENABLE_VCD_FIFO True ) set ( ENB_MODE True ) set ( EPC_BUILD False ) @@ -29,7 +24,6 @@ set ( JUMBO_FRAME True ) set ( LARGE_SCALE False ) set ( LINK_ENB_PDCP_TO_GTPV1U False ) set ( LINK_ENB_PDCP_TO_IP_DRIVER False ) -set ( LINK_PDCP_TO_GTPV1U False ) set ( LINUX_LIST False ) set ( LINUX True ) set ( LOCALIZATION False ) @@ -37,7 +31,10 @@ set ( LOG_NO_THREAD True ) set ( LOWLATENCY False ) set ( MAC_CONTEXT 1 ) set ( MAX_NUM_CCs 1 ) -set ( MIH_C_MEDIEVAL_EXTENSIONS True ) +set ( MESSAGE_CHART_GENERATOR False ) +set ( MESSAGE_CHART_GENERATOR_RLC_MAC False ) +set ( MESSAGE_CHART_GENERATOR_PHY False ) +set ( MIH_C_MEDIEVAL_EXTENSIONS False ) set ( MSG_PRINT False ) set ( MU_RECEIVER False ) set ( NAS_ADDRESS_FIX False ) diff --git a/cmake_targets/autotests/test.0103/CMakeLists.txt b/cmake_targets/autotests/test.0103/CMakeLists.txt index 2d4e85aec3..9603067fe1 100644 --- a/cmake_targets/autotests/test.0103/CMakeLists.txt +++ b/cmake_targets/autotests/test.0103/CMakeLists.txt @@ -10,17 +10,12 @@ set ( ENABLE_FXP True ) set ( ENABLE_ITTI False ) set ( ENABLE_NAS_UE_LOGGING False ) set ( ENABLE_NEW_MULTICAST False ) -set ( ENABLE_PDCP_NETLINK_FIFO False ) set ( ENABLE_PGM_TRANSPORT False ) set ( ENABLE_RAL False ) set ( ENABLE_SECURITY False ) set ( ENABLE_STANDALONE_EPC False ) set ( ENABLE_USE_CPU_EXECUTION_TIME True ) -set ( ENABLE_USE_GTPU_IN_KERNEL False ) set ( ENABLE_USE_MME False ) -set ( ENABLE_USE_NETFILTER_FOR_SGI False ) -set ( ENABLE_USE_PCAP_FOR_SGI False ) -set ( ENABLE_USE_RAW_SOCKET_FOR_SGI False ) set ( ENABLE_VCD_FIFO True ) set ( ENB_MODE True ) set ( EPC_BUILD False ) @@ -29,7 +24,6 @@ set ( JUMBO_FRAME True ) set ( LARGE_SCALE False ) set ( LINK_ENB_PDCP_TO_GTPV1U False ) set ( LINK_ENB_PDCP_TO_IP_DRIVER False ) -set ( LINK_PDCP_TO_GTPV1U False ) set ( LINUX False ) set ( LINUX_LIST False ) set ( LOCALIZATION False ) @@ -37,7 +31,10 @@ set ( LOG_NO_THREAD True ) set ( LOWLATENCY False ) set ( MAC_CONTEXT 1 ) set ( MAX_NUM_CCs 1 ) -set ( MIH_C_MEDIEVAL_EXTENSIONS True ) +set ( MESSAGE_CHART_GENERATOR False ) +set ( MESSAGE_CHART_GENERATOR_RLC_MAC False ) +set ( MESSAGE_CHART_GENERATOR_PHY False ) +set ( MIH_C_MEDIEVAL_EXTENSIONS False ) set ( MSG_PRINT False ) set ( MU_RECEIVER False ) set ( NAS_ADDRESS_FIX False ) @@ -72,9 +69,9 @@ set ( PHY_EMUL False ) set ( PHYSIM True ) set ( PUCCH True ) set ( RANDOM_BF False ) -set ( RF_BOARD EXMIMO ) +set ( RF_BOARD OAI_USRP ) set ( RLC_STOP_ON_LOST_PDU False ) -set ( RRC_ASN1_VERSION Rel8 ) +set ( RRC_ASN1_VERSION Rel10 ) set ( RRC_DEFAULT_RAB_IS_AM False ) set ( RRC_MSG_PRINT False ) set ( RTAI False ) @@ -106,5 +103,5 @@ set ( USE_MME False ) set ( USER_MODE True ) set ( XER_PRINT False ) set ( XFORMS False ) - +set(PACKAGE_NAME "lte-softmodem") include(${CMAKE_CURRENT_SOURCE_DIR}/../../CMakeLists.txt) diff --git a/cmake_targets/autotests/test.0103/CMakeLists.txt.Rel10 b/cmake_targets/autotests/test.0103/CMakeLists.txt.Rel10 new file mode 100644 index 0000000000..6af3c58762 --- /dev/null +++ b/cmake_targets/autotests/test.0103/CMakeLists.txt.Rel10 @@ -0,0 +1,107 @@ +cmake_minimum_required(VERSION 2.8) + +set ( ADDR_CONF False ) +set ( DEBUG_OMG False ) +set ( DISABLE_USE_NAS False ) +set ( DISABLE_XER_PRINT False ) +set ( DRIVER2013 True ) +set ( EMOS False ) +set ( ENABLE_FXP True ) +set ( ENABLE_ITTI False ) +set ( ENABLE_NAS_UE_LOGGING False ) +set ( ENABLE_NEW_MULTICAST False ) +set ( ENABLE_PGM_TRANSPORT False ) +set ( ENABLE_RAL False ) +set ( ENABLE_SECURITY False ) +set ( ENABLE_STANDALONE_EPC False ) +set ( ENABLE_USE_CPU_EXECUTION_TIME True ) +set ( ENABLE_USE_MME False ) +set ( ENABLE_VCD_FIFO True ) +set ( ENB_MODE True ) +set ( EPC_BUILD False ) +set ( HARD_RT False ) +set ( JUMBO_FRAME True ) +set ( LARGE_SCALE False ) +set ( LINK_ENB_PDCP_TO_GTPV1U False ) +set ( LINK_ENB_PDCP_TO_IP_DRIVER False ) +set ( LINUX False ) +set ( LINUX_LIST False ) +set ( LOCALIZATION False ) +set ( LOG_NO_THREAD True ) +set ( LOWLATENCY False ) +set ( MAC_CONTEXT 1 ) +set ( MAX_NUM_CCs 1 ) +set ( MESSAGE_CHART_GENERATOR False ) +set ( MESSAGE_CHART_GENERATOR_RLC_MAC False ) +set ( MESSAGE_CHART_GENERATOR_PHY False ) +set ( MIH_C_MEDIEVAL_EXTENSIONS False ) +set ( MSG_PRINT False ) +set ( MU_RECEIVER False ) +set ( NAS_ADDRESS_FIX False ) +set ( NAS_BUILT_IN_EPC False ) +set ( NAS_BUILT_IN_UE False ) +set ( NAS_MME False ) +set ( NAS_NETLINK False ) +set ( NAS_UE False ) +set ( NB_ANTENNAS_RX 2 ) +set ( NB_ANTENNAS_TX 2 ) +set ( NB_ANTENNAS_TXRX 2 ) +set ( NEW_FFT True ) +set ( NO_RRM True ) +set ( OAI_EMU False ) +set ( OAI_NW_DRIVER_TYPE_ETHERNET False ) +set ( OAI_NW_DRIVER_USE_NETLINK False ) +set ( OAISIM False ) +set ( OPENAIR1 True ) +set ( OPENAIR2 True ) +set ( OPENAIR_EMU False ) +set ( OPENAIR_LTE True ) +set ( PBS_SIM False ) +set ( PC_DSP True ) +set ( PC_TARGET True ) +set ( PDCP_MSG_PRINT False ) +set ( PDCP_USE_NETLINK False ) +set ( PDCP_USE_NETLINK_QUEUES False ) +set ( PERFECT_CE False ) +set ( PHY_ABSTRACTION False ) +set ( PHY_CONTEXT 1 ) +set ( PHY_EMUL False ) +set ( PHYSIM True ) +set ( PUCCH True ) +set ( RANDOM_BF False ) +set ( RF_BOARD EXMIMO ) +set ( RLC_STOP_ON_LOST_PDU False ) +set ( RRC_ASN1_VERSION Rel10 ) +set ( RRC_DEFAULT_RAB_IS_AM False ) +set ( RRC_MSG_PRINT False ) +set ( RTAI False ) +set ( S1AP_LIMIT_STREAM_ID_TO_1 False ) +set ( S1AP_VERSION R10 ) +set ( SMBV False ) +set ( SPECTRA False ) +set ( STOP_ON_IP_TRAFFIC_OVERLOAD False ) +set ( TEST_OMG False ) +set ( TRACE_RLC_AM_BO False ) +set ( TRACE_RLC_AM_FREE_SDU False ) +set ( TRACE_RLC_AM_HOLE False ) +set ( TRACE_RLC_AM_PDU False ) +set ( TRACE_RLC_AM_RESEGMENT False ) +set ( TRACE_RLC_AM_RX_DECODE False ) +set ( TRACE_RLC_AM_RX False ) +set ( TRACE_RLC_AM_STATUS_CREATION False ) +set ( TRACE_RLC_AM_TX False ) +set ( TRACE_RLC_AM_TX_STATUS False ) +set ( TRACE_RLC_PAYLOAD False ) +set ( TRACE_RLC_UM_DAR False ) +set ( TRACE_RLC_UM_DISPLAY_ASCII_DATA False ) +set ( TRACE_RLC_UM_PDU False ) +set ( TRACE_RLC_UM_RX False ) +set ( TRACE_RLC_UM_SEGMENT False ) +set ( TRACE_RLC_UM_TX_STATUS False ) +set ( USE_3GPP_ADDR_AS_LINK_ADDR False ) +set ( USE_MME False ) +set ( USER_MODE True ) +set ( XER_PRINT False ) +set ( XFORMS False ) +set(PACKAGE_NAME "lte-softmodem") +include(${CMAKE_CURRENT_SOURCE_DIR}/../../CMakeLists.txt) diff --git a/cmake_targets/autotests/test.0103/CMakeLists.txt.Rel8 b/cmake_targets/autotests/test.0103/CMakeLists.txt.Rel8 new file mode 100644 index 0000000000..dafbed61d9 --- /dev/null +++ b/cmake_targets/autotests/test.0103/CMakeLists.txt.Rel8 @@ -0,0 +1,107 @@ +cmake_minimum_required(VERSION 2.8) + +set ( ADDR_CONF False ) +set ( DEBUG_OMG False ) +set ( DISABLE_USE_NAS False ) +set ( DISABLE_XER_PRINT False ) +set ( DRIVER2013 True ) +set ( EMOS False ) +set ( ENABLE_FXP True ) +set ( ENABLE_ITTI False ) +set ( ENABLE_NAS_UE_LOGGING False ) +set ( ENABLE_NEW_MULTICAST False ) +set ( ENABLE_PGM_TRANSPORT False ) +set ( ENABLE_RAL False ) +set ( ENABLE_SECURITY False ) +set ( ENABLE_STANDALONE_EPC False ) +set ( ENABLE_USE_CPU_EXECUTION_TIME True ) +set ( ENABLE_USE_MME False ) +set ( ENABLE_VCD_FIFO True ) +set ( ENB_MODE True ) +set ( EPC_BUILD False ) +set ( HARD_RT False ) +set ( JUMBO_FRAME True ) +set ( LARGE_SCALE False ) +set ( LINK_ENB_PDCP_TO_GTPV1U False ) +set ( LINK_ENB_PDCP_TO_IP_DRIVER False ) +set ( LINUX False ) +set ( LINUX_LIST False ) +set ( LOCALIZATION False ) +set ( LOG_NO_THREAD True ) +set ( LOWLATENCY False ) +set ( MAC_CONTEXT 1 ) +set ( MAX_NUM_CCs 1 ) +set ( MESSAGE_CHART_GENERATOR False ) +set ( MESSAGE_CHART_GENERATOR_RLC_MAC False ) +set ( MESSAGE_CHART_GENERATOR_PHY False ) +set ( MIH_C_MEDIEVAL_EXTENSIONS False ) +set ( MSG_PRINT False ) +set ( MU_RECEIVER False ) +set ( NAS_ADDRESS_FIX False ) +set ( NAS_BUILT_IN_EPC False ) +set ( NAS_BUILT_IN_UE False ) +set ( NAS_MME False ) +set ( NAS_NETLINK False ) +set ( NAS_UE False ) +set ( NB_ANTENNAS_RX 2 ) +set ( NB_ANTENNAS_TX 2 ) +set ( NB_ANTENNAS_TXRX 2 ) +set ( NEW_FFT True ) +set ( NO_RRM True ) +set ( OAI_EMU False ) +set ( OAI_NW_DRIVER_TYPE_ETHERNET False ) +set ( OAI_NW_DRIVER_USE_NETLINK False ) +set ( OAISIM False ) +set ( OPENAIR1 True ) +set ( OPENAIR2 True ) +set ( OPENAIR_EMU False ) +set ( OPENAIR_LTE True ) +set ( PBS_SIM False ) +set ( PC_DSP True ) +set ( PC_TARGET True ) +set ( PDCP_MSG_PRINT False ) +set ( PDCP_USE_NETLINK False ) +set ( PDCP_USE_NETLINK_QUEUES False ) +set ( PERFECT_CE False ) +set ( PHY_ABSTRACTION False ) +set ( PHY_CONTEXT 1 ) +set ( PHY_EMUL False ) +set ( PHYSIM True ) +set ( PUCCH True ) +set ( RANDOM_BF False ) +set ( RF_BOARD EXMIMO ) +set ( RLC_STOP_ON_LOST_PDU False ) +set ( RRC_ASN1_VERSION Rel8 ) +set ( RRC_DEFAULT_RAB_IS_AM False ) +set ( RRC_MSG_PRINT False ) +set ( RTAI False ) +set ( S1AP_LIMIT_STREAM_ID_TO_1 False ) +set ( S1AP_VERSION R10 ) +set ( SMBV False ) +set ( SPECTRA False ) +set ( STOP_ON_IP_TRAFFIC_OVERLOAD False ) +set ( TEST_OMG False ) +set ( TRACE_RLC_AM_BO False ) +set ( TRACE_RLC_AM_FREE_SDU False ) +set ( TRACE_RLC_AM_HOLE False ) +set ( TRACE_RLC_AM_PDU False ) +set ( TRACE_RLC_AM_RESEGMENT False ) +set ( TRACE_RLC_AM_RX_DECODE False ) +set ( TRACE_RLC_AM_RX False ) +set ( TRACE_RLC_AM_STATUS_CREATION False ) +set ( TRACE_RLC_AM_TX False ) +set ( TRACE_RLC_AM_TX_STATUS False ) +set ( TRACE_RLC_PAYLOAD False ) +set ( TRACE_RLC_UM_DAR False ) +set ( TRACE_RLC_UM_DISPLAY_ASCII_DATA False ) +set ( TRACE_RLC_UM_PDU False ) +set ( TRACE_RLC_UM_RX False ) +set ( TRACE_RLC_UM_SEGMENT False ) +set ( TRACE_RLC_UM_TX_STATUS False ) +set ( USE_3GPP_ADDR_AS_LINK_ADDR False ) +set ( USE_MME False ) +set ( USER_MODE True ) +set ( XER_PRINT False ) +set ( XFORMS False ) +set(PACKAGE_NAME "lte-softmodem") +include(${CMAKE_CURRENT_SOURCE_DIR}/../../CMakeLists.txt) diff --git a/cmake_targets/autotests/test.0103/CMakeLists.txt.USRP b/cmake_targets/autotests/test.0103/CMakeLists.txt.USRP new file mode 100644 index 0000000000..9603067fe1 --- /dev/null +++ b/cmake_targets/autotests/test.0103/CMakeLists.txt.USRP @@ -0,0 +1,107 @@ +cmake_minimum_required(VERSION 2.8) + +set ( ADDR_CONF False ) +set ( DEBUG_OMG False ) +set ( DISABLE_USE_NAS False ) +set ( DISABLE_XER_PRINT False ) +set ( DRIVER2013 True ) +set ( EMOS False ) +set ( ENABLE_FXP True ) +set ( ENABLE_ITTI False ) +set ( ENABLE_NAS_UE_LOGGING False ) +set ( ENABLE_NEW_MULTICAST False ) +set ( ENABLE_PGM_TRANSPORT False ) +set ( ENABLE_RAL False ) +set ( ENABLE_SECURITY False ) +set ( ENABLE_STANDALONE_EPC False ) +set ( ENABLE_USE_CPU_EXECUTION_TIME True ) +set ( ENABLE_USE_MME False ) +set ( ENABLE_VCD_FIFO True ) +set ( ENB_MODE True ) +set ( EPC_BUILD False ) +set ( HARD_RT False ) +set ( JUMBO_FRAME True ) +set ( LARGE_SCALE False ) +set ( LINK_ENB_PDCP_TO_GTPV1U False ) +set ( LINK_ENB_PDCP_TO_IP_DRIVER False ) +set ( LINUX False ) +set ( LINUX_LIST False ) +set ( LOCALIZATION False ) +set ( LOG_NO_THREAD True ) +set ( LOWLATENCY False ) +set ( MAC_CONTEXT 1 ) +set ( MAX_NUM_CCs 1 ) +set ( MESSAGE_CHART_GENERATOR False ) +set ( MESSAGE_CHART_GENERATOR_RLC_MAC False ) +set ( MESSAGE_CHART_GENERATOR_PHY False ) +set ( MIH_C_MEDIEVAL_EXTENSIONS False ) +set ( MSG_PRINT False ) +set ( MU_RECEIVER False ) +set ( NAS_ADDRESS_FIX False ) +set ( NAS_BUILT_IN_EPC False ) +set ( NAS_BUILT_IN_UE False ) +set ( NAS_MME False ) +set ( NAS_NETLINK False ) +set ( NAS_UE False ) +set ( NB_ANTENNAS_RX 2 ) +set ( NB_ANTENNAS_TX 2 ) +set ( NB_ANTENNAS_TXRX 2 ) +set ( NEW_FFT True ) +set ( NO_RRM True ) +set ( OAI_EMU False ) +set ( OAI_NW_DRIVER_TYPE_ETHERNET False ) +set ( OAI_NW_DRIVER_USE_NETLINK False ) +set ( OAISIM False ) +set ( OPENAIR1 True ) +set ( OPENAIR2 True ) +set ( OPENAIR_EMU False ) +set ( OPENAIR_LTE True ) +set ( PBS_SIM False ) +set ( PC_DSP True ) +set ( PC_TARGET True ) +set ( PDCP_MSG_PRINT False ) +set ( PDCP_USE_NETLINK False ) +set ( PDCP_USE_NETLINK_QUEUES False ) +set ( PERFECT_CE False ) +set ( PHY_ABSTRACTION False ) +set ( PHY_CONTEXT 1 ) +set ( PHY_EMUL False ) +set ( PHYSIM True ) +set ( PUCCH True ) +set ( RANDOM_BF False ) +set ( RF_BOARD OAI_USRP ) +set ( RLC_STOP_ON_LOST_PDU False ) +set ( RRC_ASN1_VERSION Rel10 ) +set ( RRC_DEFAULT_RAB_IS_AM False ) +set ( RRC_MSG_PRINT False ) +set ( RTAI False ) +set ( S1AP_LIMIT_STREAM_ID_TO_1 False ) +set ( S1AP_VERSION R10 ) +set ( SMBV False ) +set ( SPECTRA False ) +set ( STOP_ON_IP_TRAFFIC_OVERLOAD False ) +set ( TEST_OMG False ) +set ( TRACE_RLC_AM_BO False ) +set ( TRACE_RLC_AM_FREE_SDU False ) +set ( TRACE_RLC_AM_HOLE False ) +set ( TRACE_RLC_AM_PDU False ) +set ( TRACE_RLC_AM_RESEGMENT False ) +set ( TRACE_RLC_AM_RX_DECODE False ) +set ( TRACE_RLC_AM_RX False ) +set ( TRACE_RLC_AM_STATUS_CREATION False ) +set ( TRACE_RLC_AM_TX False ) +set ( TRACE_RLC_AM_TX_STATUS False ) +set ( TRACE_RLC_PAYLOAD False ) +set ( TRACE_RLC_UM_DAR False ) +set ( TRACE_RLC_UM_DISPLAY_ASCII_DATA False ) +set ( TRACE_RLC_UM_PDU False ) +set ( TRACE_RLC_UM_RX False ) +set ( TRACE_RLC_UM_SEGMENT False ) +set ( TRACE_RLC_UM_TX_STATUS False ) +set ( USE_3GPP_ADDR_AS_LINK_ADDR False ) +set ( USE_MME False ) +set ( USER_MODE True ) +set ( XER_PRINT False ) +set ( XFORMS False ) +set(PACKAGE_NAME "lte-softmodem") +include(${CMAKE_CURRENT_SOURCE_DIR}/../../CMakeLists.txt) diff --git a/cmake_targets/autotests/test.0104/CMakeLists.txt b/cmake_targets/autotests/test.0104/CMakeLists.txt index 6f93e687e5..eab37127a7 100644 --- a/cmake_targets/autotests/test.0104/CMakeLists.txt +++ b/cmake_targets/autotests/test.0104/CMakeLists.txt @@ -10,4 +10,8 @@ set(RANDOM_BF False) set(PBS_SIM False) set(PERFECT_CE True) +set(MESSAGE_CHART_GENERATOR False) +set(MESSAGE_CHART_GENERATOR_RLC_MAC False) +set(MESSAGE_CHART_GENERATOR_PHY False) + include(${CMAKE_CURRENT_SOURCE_DIR}/../../CMakeLists.txt) diff --git a/cmake_targets/autotests/test.0106/CMakeLists.txt b/cmake_targets/autotests/test.0106/CMakeLists.txt index 5e12f11149..2b315ad411 100644 --- a/cmake_targets/autotests/test.0106/CMakeLists.txt +++ b/cmake_targets/autotests/test.0106/CMakeLists.txt @@ -8,7 +8,6 @@ set(ENABLE_FXP True) set(ENABLE_ITTI True) set(ENABLE_NAS_UE_LOGGING False) set(ENABLE_NEW_MULTICAST True) -set(ENABLE_PDCP_NETLINK_FIFO False) set(ENABLE_PGM_TRANSPORT True) set(ENABLE_RAL False) set(ENABLE_SECURITY False) @@ -18,7 +17,7 @@ set(ENABLE_VCD_FIFO True) set(HARD_RT False) set(JUMBO_FRAME True) set(LARGE_SCALE False) -set(LINK_PDCP_TO_GTPV1U False) +set(LINK_ENB_PDCP_TO_GTPV1U False) set(LINUX_LIST False) set(LINUX True) set(LOCALIZATION False) @@ -26,7 +25,10 @@ set(LOG_NO_THREAD True) set(LOWLATENCY False) set(MAC_CONTEXT 1) set(MAX_NUM_CCs 1) -set(MIH_C_MEDIEVAL_EXTENSIONS True) +set(MESSAGE_CHART_GENERATOR False ) +set(MESSAGE_CHART_GENERATOR_RLC_MAC False ) +set(MESSAGE_CHART_GENERATOR_PHY False ) +set(MIH_C_MEDIEVAL_EXTENSIONS False) set(MSG_PRINT False) set(MU_RECEIVER False) set(NAS_ADDRESS_FIX true) diff --git a/cmake_targets/autotests/test.0107/CMakeLists.txt b/cmake_targets/autotests/test.0107/CMakeLists.txt index aa4f098d78..a2aa19942e 100644 --- a/cmake_targets/autotests/test.0107/CMakeLists.txt +++ b/cmake_targets/autotests/test.0107/CMakeLists.txt @@ -10,17 +10,12 @@ set ( ENABLE_FXP True ) set ( ENABLE_ITTI False ) set ( ENABLE_NAS_UE_LOGGING False ) set ( ENABLE_NEW_MULTICAST True ) -set ( ENABLE_PDCP_NETLINK_FIFO False ) set ( ENABLE_PGM_TRANSPORT True ) set ( ENABLE_RAL False ) set ( ENABLE_SECURITY False ) set ( ENABLE_STANDALONE_EPC False ) set ( ENABLE_USE_CPU_EXECUTION_TIME True ) -set ( ENABLE_USE_GTPU_IN_KERNEL False ) set ( ENABLE_USE_MME False ) -set ( ENABLE_USE_NETFILTER_FOR_SGI False ) -set ( ENABLE_USE_PCAP_FOR_SGI False ) -set ( ENABLE_USE_RAW_SOCKET_FOR_SGI False ) set ( ENABLE_VCD_FIFO True ) set ( ENB_MODE True ) set ( EPC_BUILD False ) @@ -29,7 +24,6 @@ set ( JUMBO_FRAME True ) set ( LARGE_SCALE False ) set ( LINK_ENB_PDCP_TO_GTPV1U False ) set ( LINK_ENB_PDCP_TO_IP_DRIVER False ) -set ( LINK_PDCP_TO_GTPV1U False ) set ( LINUX_LIST False ) set ( LINUX True ) set ( LOCALIZATION False ) @@ -37,7 +31,10 @@ set ( LOG_NO_THREAD True ) set ( LOWLATENCY False ) set ( MAC_CONTEXT 1 ) set ( MAX_NUM_CCs 1 ) -set ( MIH_C_MEDIEVAL_EXTENSIONS True ) +set ( MESSAGE_CHART_GENERATOR False ) +set ( MESSAGE_CHART_GENERATOR_RLC_MAC False ) +set ( MESSAGE_CHART_GENERATOR_PHY False ) +set ( MIH_C_MEDIEVAL_EXTENSIONS False ) set ( MSG_PRINT False ) set ( MU_RECEIVER False ) set ( NAS_ADDRESS_FIX False ) diff --git a/cmake_targets/autotests/test.0108/CMakeLists.txt b/cmake_targets/autotests/test.0108/CMakeLists.txt index a0648e1767..63bfb1066f 100644 --- a/cmake_targets/autotests/test.0108/CMakeLists.txt +++ b/cmake_targets/autotests/test.0108/CMakeLists.txt @@ -8,7 +8,6 @@ set(ENABLE_FXP True) set(ENABLE_ITTI True) set(ENABLE_NAS_UE_LOGGING False) set(ENABLE_NEW_MULTICAST True) -set(ENABLE_PDCP_NETLINK_FIFO False) set(ENABLE_PGM_TRANSPORT True) set(ENABLE_RAL False) set(ENABLE_SECURITY False) @@ -18,7 +17,7 @@ set(ENABLE_VCD_FIFO True) set(HARD_RT False) set(JUMBO_FRAME True) set(LARGE_SCALE False) -set(LINK_PDCP_TO_GTPV1U False) +set(LINK_ENB_PDCP_TO_GTPV1U False) set(LINUX_LIST False) set(LINUX True) set(LOCALIZATION False) @@ -26,7 +25,10 @@ set(LOG_NO_THREAD True) set(LOWLATENCY False) set(MAC_CONTEXT 1) set(MAX_NUM_CCs 1) -set(MIH_C_MEDIEVAL_EXTENSIONS True) +set(MESSAGE_CHART_GENERATOR False) +set(MESSAGE_CHART_GENERATOR_RLC_MAC False) +set(MESSAGE_CHART_GENERATOR_PHY False) +set(MIH_C_MEDIEVAL_EXTENSIONS False) set(MSG_PRINT False) set(MU_RECEIVER False) set(NAS_ADDRESS_FIX true) @@ -35,7 +37,6 @@ set(NAS_UE True) set(NEW_FFT True) set(NO_RRM True) set(OAI_EMU True) -set(OAI_EMU True) set(OAI_NW_DRIVER_TYPE_ETHERNET False) set(OPENAIR1 False) set(OPENAIR2 True) diff --git a/cmake_targets/autotests/test.0114/CMakeLists.txt b/cmake_targets/autotests/test.0114/CMakeLists.txt index 1f85bc1042..23497976f1 100644 --- a/cmake_targets/autotests/test.0114/CMakeLists.txt +++ b/cmake_targets/autotests/test.0114/CMakeLists.txt @@ -8,9 +8,8 @@ set(ENABLE_FXP True) set(ENABLE_ITTI True) set(ENABLE_NAS_UE_LOGGING False) set(ENABLE_NEW_MULTICAST True) -set(ENABLE_PDCP_NETLINK_FIFO True) set(ENABLE_PGM_TRANSPORT True) -set(ENABLE_RAL True) +set(ENABLE_RAL False) set(ENABLE_SECURITY False) set(ENABLE_USE_CPU_EXECUTION_TIME True) set(ENABLE_USE_MME False) @@ -18,7 +17,7 @@ set(ENABLE_VCD_FIFO True) set(HARD_RT False) set(JUMBO_FRAME True) set(LARGE_SCALE False) -set(LINK_PDCP_TO_GTPV1U False) +set(LINK_ENB_PDCP_TO_GTPV1U False) set(LINUX_LIST False) set(LINUX True) set(LOCALIZATION False) @@ -26,7 +25,7 @@ set(LOG_NO_THREAD True) set(LOWLATENCY False) set(MAC_CONTEXT 1) set(MAX_NUM_CCs 1) -set(MIH_C_MEDIEVAL_EXTENSIONS True) +set(MIH_C_MEDIEVAL_EXTENSIONS False) set(MSG_PRINT False) set(MU_RECEIVER False) set(NAS_ADDRESS_FIX true) diff --git a/cmake_targets/autotests/test.0115/CMakeLists.txt b/cmake_targets/autotests/test.0115/CMakeLists.txt index 147c01f852..01c00574a4 100644 --- a/cmake_targets/autotests/test.0115/CMakeLists.txt +++ b/cmake_targets/autotests/test.0115/CMakeLists.txt @@ -10,17 +10,12 @@ set ( ENABLE_FXP True ) set ( ENABLE_ITTI True ) set ( ENABLE_NAS_UE_LOGGING False ) set ( ENABLE_NEW_MULTICAST True ) -set ( ENABLE_PDCP_NETLINK_FIFO False ) set ( ENABLE_PGM_TRANSPORT True ) -set ( ENABLE_RAL True ) +set ( ENABLE_RAL False ) set ( ENABLE_SECURITY False ) set ( ENABLE_STANDALONE_EPC False ) set ( ENABLE_USE_CPU_EXECUTION_TIME True ) -set ( ENABLE_USE_GTPU_IN_KERNEL False ) set ( ENABLE_USE_MME False ) -set ( ENABLE_USE_NETFILTER_FOR_SGI False ) -set ( ENABLE_USE_PCAP_FOR_SGI False ) -set ( ENABLE_USE_RAW_SOCKET_FOR_SGI False ) set ( ENABLE_VCD_FIFO True ) set ( ENB_MODE True ) set ( EPC_BUILD False ) @@ -29,7 +24,6 @@ set ( JUMBO_FRAME True ) set ( LARGE_SCALE False ) set ( LINK_ENB_PDCP_TO_GTPV1U False ) set ( LINK_ENB_PDCP_TO_IP_DRIVER False ) -set ( LINK_PDCP_TO_GTPV1U False ) set ( LINUX_LIST False ) set ( LINUX True ) set ( LOCALIZATION False ) @@ -37,7 +31,10 @@ set ( LOG_NO_THREAD True ) set ( LOWLATENCY False ) set ( MAC_CONTEXT 1 ) set ( MAX_NUM_CCs 1 ) -set ( MIH_C_MEDIEVAL_EXTENSIONS True ) +set ( MESSAGE_CHART_GENERATOR False ) +set ( MESSAGE_CHART_GENERATOR_RLC_MAC False ) +set ( MESSAGE_CHART_GENERATOR_PHY False ) +set ( MIH_C_MEDIEVAL_EXTENSIONS False ) set ( MSG_PRINT False ) set ( MU_RECEIVER False ) set ( NAS_ADDRESS_FIX False ) diff --git a/cmake_targets/autotests/test.0120/CMakeLists.txt b/cmake_targets/autotests/test.0120/CMakeLists.txt index 37e9dc3791..d05856ebb0 100644 --- a/cmake_targets/autotests/test.0120/CMakeLists.txt +++ b/cmake_targets/autotests/test.0120/CMakeLists.txt @@ -10,17 +10,12 @@ set ( ENABLE_FXP True ) set ( ENABLE_ITTI False ) set ( ENABLE_NAS_UE_LOGGING False ) set ( ENABLE_NEW_MULTICAST True ) -set ( ENABLE_PDCP_NETLINK_FIFO False ) set ( ENABLE_PGM_TRANSPORT True ) set ( ENABLE_RAL False ) set ( ENABLE_SECURITY False ) set ( ENABLE_STANDALONE_EPC False ) set ( ENABLE_USE_CPU_EXECUTION_TIME True ) -set ( ENABLE_USE_GTPU_IN_KERNEL False ) set ( ENABLE_USE_MME False ) -set ( ENABLE_USE_NETFILTER_FOR_SGI False ) -set ( ENABLE_USE_PCAP_FOR_SGI False ) -set ( ENABLE_USE_RAW_SOCKET_FOR_SGI False ) set ( ENABLE_VCD_FIFO True ) set ( ENB_MODE True ) set ( EPC_BUILD False ) @@ -29,7 +24,6 @@ set ( JUMBO_FRAME True ) set ( LARGE_SCALE False ) set ( LINK_ENB_PDCP_TO_GTPV1U False ) set ( LINK_ENB_PDCP_TO_IP_DRIVER False ) -set ( LINK_PDCP_TO_GTPV1U False ) set ( LINUX_LIST False ) set ( LINUX True ) set ( LOCALIZATION False ) @@ -37,7 +31,10 @@ set ( LOG_NO_THREAD True ) set ( LOWLATENCY False ) set ( MAC_CONTEXT 1 ) set ( MAX_NUM_CCs 1 ) -set ( MIH_C_MEDIEVAL_EXTENSIONS True ) +set ( MESSAGE_CHART_GENERATOR False ) +set ( MESSAGE_CHART_GENERATOR_RLC_MAC False ) +set ( MESSAGE_CHART_GENERATOR_PHY False ) +set ( MIH_C_MEDIEVAL_EXTENSIONS False ) set ( MSG_PRINT False ) set ( MU_RECEIVER False ) set ( NAS_ADDRESS_FIX False ) diff --git a/cmake_targets/autotests/test.0130/CMakeLists.txt b/cmake_targets/autotests/test.0130/CMakeLists.txt new file mode 100644 index 0000000000..45c99b01ab --- /dev/null +++ b/cmake_targets/autotests/test.0130/CMakeLists.txt @@ -0,0 +1,6 @@ +cmake_minimum_required(VERSION 2.8) +set(ENABLE_VCD_FIFO False ) +set(ENABLE_ITTI False ) +set(RF_BOARD "ETHERNET") +set(PACKAGE_NAME "\"rrh_gw\"") +include(${CMAKE_CURRENT_SOURCE_DIR}/../../CMakeLists.txt) diff --git a/cmake_targets/build_oai b/cmake_targets/build_oai index 3119361c22..c1974f90e8 100755 --- a/cmake_targets/build_oai +++ b/cmake_targets/build_oai @@ -41,10 +41,12 @@ source $THIS_SCRIPT_PATH/tools/build_helper MSC_GEN="False" XFORMS="False" +PRINT_STATS="False" VCD_TIMING="False" REL="Rel10" HW="EXMIMO" EPC=0 +VERBOSE_COMPILE=0 function print_help() { echo_info ' @@ -74,14 +76,16 @@ Options Makes the UE specific parts (ue_ip, usim, nvram) --EPC Makes the EPC (MME-SPGW, HSS) +--RRH + Makes the RRH -r | --3gpp-release default is Rel10, Rel8 limits the implementation to 3GPP Release 8 version -w | --hardware - EXMIMO (Default), USRP, BLADERF, None + EXMIMO (Default), USRP, BLADERF, ETHERNET, None Adds this RF board support (in external packages installation and in compilation) --oaisim - Makes the oaisim simulator + Makes the oaisim simulator. Hardware will be defaulted to "NONE". --phy_simulators Makes the unitary tests Layer 1 simulators --core_simulators @@ -91,11 +95,22 @@ Options -V | --vcd Adds a debgging facility to the binary files: GUI with major internal synchronization events -x | --xforms - Adds a software oscilloscope feature to the produced binaries + Adds a software oscilloscope feature to the produced binaries. If oaisim, then enable PRINT_STATS. --install-system-files Install OpenArInterface required files in Linux system (will ask root password) -Typical Options for a quick startup with a COTS UE and Eurecom RF board: build_oai -I -g -eNB -EPC -x --install-system-files' +--noS1 + Compiles oaisim or lte-softmodem without S1 interface, using direct link to IP instead +--verbose-compile + Shows detailed compilation instructions in makefile +Usage (first build): + oaisim (eNB + UE): ./build_oai -I -g --oaisim -x --install-system-files + Eurecom EXMIMO + COTS UE : ./build_oai -I -g --eNB --EPC -x --install-system-files + NI/ETTUS B201 + COTS UE : ./build_oai -I -g --eNB --EPC -x --install-system-files -w USRP +Usage (Regular): + oaisim : ./build_oai --oaisim -x + Eurecom EXMIMO + OAI ENB : ./build_oai --eNB -x + NI/ETTUS B201 + OAI ENB : ./build_oai --eNB -x -w USRP' } @@ -137,6 +152,10 @@ function main() { EPC=1 echo_info "Will compile EPC" shift;; + --RRH) + RRH=1 + echo_info "Will compile RRH" + shift;; -r | --3gpp-release) REL=$2 echo_info "setting release to: $REL" @@ -174,7 +193,7 @@ function main() { EXE_ARGUMENTS="$EXE_ARGUMENTS -V" shift;; -x | --xforms) - XFORMS=1 + XFORMS="True" EXE_ARGUMENTS="$EXE_ARGUMENTS -d" echo_info "Will generate the software oscilloscope features" shift;; @@ -182,6 +201,14 @@ function main() { INSTALL_SYSTEM_FILES=1 echo_info "Will copy OpenAirInterface files in Linux directories" shift;; + --noS1) + NOS1=1 + echo_info "Will compile without S1 interface" + shift;; + --verbose-compile) + VERBOSE_COMPILE=1 + echo_info "Will compile with verbose instructions" + shift;; -h | --help) print_help exit 1;; @@ -243,37 +270,70 @@ function main() { check_install_additional_tools fi + if [ "$oaisim" = "1" ] ; then + if [ "$HW" != "ETHERNET" ] ; then + HW="NONE" + fi + if [ "$XFORMS" == "True" ] ; then + PRINT_STATS="True" + fi + fi + + echo_info "3. building the compilation directives ..." DIR=$OPENAIR_DIR/cmake_targets + if [ "$NOS1" = "1" ] ; then + lte_build_dir=lte_noS1_build_oai + lte_exec=lte-softmodem-nos1 + else + lte_build_dir=lte_build_oai + lte_exec=lte-softmodem + fi + # first generate the CMakefile in the right directory + if [ "$eNB" = "1" -o "$UE" = "1" -o "$HW" = "EXMIMO" ] ; then - if [ "$eNB" = "1" -o "$UE" = "1" ] ; then # LTE softmodem compilation - [ "$CLEAN" = "1" ] && rm -rf $DIR/lte_build_oai/build - mkdir -p $DIR/lte_build_oai/build - cmake_file=$DIR/lte_build_oai/CMakeLists.txt - echo "cmake_minimum_required(VERSION 2.8)" > $cmake_file - echo "set(XFORMS $XFORMS )" >> $cmake_file - echo "set(RRC_ASN1_VERSION \"${REL}\")" >> $cmake_file - echo "set(ENABLE_VCD_FIFO $VCD_TIMING )" >> $cmake_file - echo "set(RF_BOARD \"${HW}\")" >> $cmake_file - echo 'set(PACKAGE_NAME "\"lte-softmodem\"")' >> $cmake_file + [ "$CLEAN" = "1" ] && rm -rf $DIR/$lte_build_dir/build + mkdir -p $DIR/$lte_build_dir/build + cmake_file=$DIR/$lte_build_dir/CMakeLists.txt + echo "cmake_minimum_required(VERSION 2.8)" > $cmake_file + if [ "$NOS1" = "1" ] ; then + cat $DIR/$lte_build_dir/CMakeLists.template >> $cmake_file + fi + echo "set ( XFORMS $XFORMS )" >> $cmake_file + echo "set ( RRC_ASN1_VERSION \"${REL}\")" >> $cmake_file + echo "set ( ENABLE_VCD_FIFO $VCD_TIMING )" >> $cmake_file + echo "set ( RF_BOARD \"${HW}\")" >> $cmake_file + echo "set(PACKAGE_NAME \"${lte_exec}\")" >> $cmake_file echo 'include(${CMAKE_CURRENT_SOURCE_DIR}/../CMakeLists.txt)' >> $cmake_file - cd $DIR/lte_build_oai/build + cd $DIR/$lte_build_dir/build cmake .. - echo_info "Compiling LTE softmodem" - compilations \ - lte_build_oai lte-softmodem \ - lte-softmodem lte-softmodem.$REL + fi + if [ "$eNB" = "1" ] ; then + echo_info "Compiling $lte_exec" + compilations \ + $lte_build_dir $lte_exec \ + $lte_exec $dbin/$lte_exec.$REL + + if [ "$NOS1" = "1" ] ; then + compilations \ + $lte_build_dir nasmesh \ + CMakeFiles/nasmesh/nasmesh.ko $dbin/nasmesh.ko + compilations \ + $lte_build_dir rb_tool \ + rb_tool $dbin/rb_tool + cp $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 $dbin + fi fi if [ "$UE" = 1 ] ; then # ue_ip driver compilation echo_info "Compiling UE specific part" compilations \ - lte_build_oai ue_ip \ + $lte_build_dir ue_ip \ CMakeFiles/ue_ip/ue_ip.ko $dbin/ue_ip.ko # mkdir -p $DIR/at_commands/build @@ -282,7 +342,7 @@ function main() { # compilations \ # at_commands at_nas_ue \ # at_nas_ue $dbin/at_nas_ue - + [ "$CLEAN" = "1" ] && rm -rf $DIR/nas_sim_tools/build mkdir -p $DIR/nas_sim_tools/build cd $DIR/nas_sim_tools/build @@ -341,140 +401,165 @@ function main() { if [ "$HW" = "EXMIMO" -a "$EPC" = "0" ] ; then echo_info "Compiling Express MIMO 2 board drivers" - mkdir -p $DIR/lte_noS1_build_oai/build - cd $DIR/lte_noS1_build_oai/build - cmake .. compilations \ - lte_noS1_build_oai openair_rf \ + $lte_build_dir openair_rf \ CMakeFiles/openair_rf/openair_rf.ko $dbin/openair_rf.ko compilations \ - lte_noS1_build_oai updatefw \ + $lte_build_dir updatefw \ updatefw $dbin/updatefw - make -C $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build oarf > $dlog/oarf.txt 2>&1 - cp $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/*.oct $dbin - echo_success "oarf tools compiled" + make -C $OPENAIR_DIR/cmake_targets/$lte_build_dir/build oarf > $dlog/oarf.txt 2>&1 + cp $OPENAIR_DIR/cmake_targets/$lte_build_dir/build/*.oct $dbin + if [ -s $dbin/oarf_config_exmimo.oct ] ; then + echo_success "oarf tools compiled" + else + echo_error "oarf tools compilation failed" + fi cp $OPENAIR_DIR/cmake_targets/tools/init_exmimo2 $dbin fi if [ "$oaisim" = "1" ] ; then dconf=$OPENAIR_DIR/targets/bin - - echo_info "Compiling at_nas_ue" - [ "$CLEAN" = "1" ] && rm -rf $DIR/at_commands/build - mkdir -p $DIR/at_commands/build - cd $DIR/at_commands/build - cmake .. - compilations \ - at_commands at_nas_ue \ - at_nas_ue $dbin/at_nas_ue - - echo_info "Compiling oaisim" - cmake_file=$DIR/oaisim_build_oai/CMakeLists.txt - cp $DIR/oaisim_build_oai/CMakeLists.template $cmake_file - echo "set(XFORMS $XFORMS )" >> $cmake_file - echo "set(RRC_ASN1_VERSION \"${REL}\")" >> $cmake_file - echo "set(ENABLE_VCD_FIFO $VCD_TIMING )" >> $cmake_file + if [ "$NOS1" = "1" ] ; then + oaisim_build_dir=oaisim_noS1_build_oai + oaisim_exec=oaisim_nos1 + else + oaisim_build_dir=oaisim_build_oai + oaisim_exec=oaisim + fi + + echo_info "Compiling $oaisim_exec ($oaisim_build_dir)" + cmake_file=$DIR/$oaisim_build_dir/CMakeLists.txt + cp $DIR/$oaisim_build_dir/CMakeLists.template $cmake_file + echo "set ( XFORMS $XFORMS )" >> $cmake_file + echo "set ( PRINT_STATS $PRINT_STATS )" >> $cmake_file + echo "set ( RRC_ASN1_VERSION \"${REL}\")" >> $cmake_file + echo "set ( ENABLE_VCD_FIFO $VCD_TIMING )" >> $cmake_file echo 'include(${CMAKE_CURRENT_SOURCE_DIR}/../CMakeLists.txt)' >> $cmake_file - [ "$CLEAN" = "1" ] && rm -rf $DIR/oaisim_build_oai/build - mkdir -p $DIR/oaisim_build_oai/build - cd $DIR/oaisim_build_oai/build + [ "$CLEAN" = "1" ] && rm -rf $DIR/$oaisim_build_dir/build + mkdir -p $DIR/$oaisim_build_dir/build + cd $DIR/$oaisim_build_dir/build cmake .. compilations \ - oaisim_build_oai oaisim \ - oaisim $dbin/oaisim.$REL + $oaisim_build_dir $oaisim_exec \ + $oaisim_exec $dbin/$oaisim_exec.$REL - # ue_ip driver compilation - echo_info "Compiling UE specific part (ue_ip driver and usim tools)" - compilations \ - oaisim_build_oai ue_ip \ - CMakeFiles/ue_ip/ue_ip.ko $dbin/ue_ip.ko + if [ "$NOS1" != "1" ] ; then - [ "$CLEAN" = "1" ] && rm -rf $DIR/nas_sim_tools/build - mkdir -p $DIR/nas_sim_tools/build - cd $DIR/nas_sim_tools/build - cmake .. - compilations \ - nas_sim_tools usim \ - usim $dbin/usim - compilations \ - nas_sim_tools nvram \ - nvram $dbin/nvram + [ "$CLEAN" = "1" ] && rm -rf $DIR/at_commands/build + echo_info "Compiling at_nas_ue" + mkdir -p $DIR/at_commands/build + cd $DIR/at_commands/build + cmake .. + compilations \ + at_commands at_nas_ue \ + at_nas_ue $dbin/at_nas_ue - # generate USIM data - if [ -f $dbin/nvram ]; then - install_nas_tools $dbin $dconf + # ue_ip driver compilation + echo_info "Compiling UE specific part (ue_ip driver and usim tools)" + compilations \ + oaisim_build_oai ue_ip \ + CMakeFiles/ue_ip/ue_ip.ko $dbin/ue_ip.ko + + [ "$CLEAN" = "1" ] && rm -rf $DIR/nas_sim_tools/build + mkdir -p $DIR/nas_sim_tools/build + cd $DIR/nas_sim_tools/build + cmake .. + compilations \ + nas_sim_tools usim \ + usim $dbin/usim + compilations \ + nas_sim_tools nvram \ + nvram $dbin/nvram + + # generate USIM data + if [ -f $dbin/nvram ]; then + install_nas_tools $dbin $dconf + else + echo_warning "not generated UE NAS files: binaries not found" + fi else - echo_warning "not generated UE NAS files: binaries not found" + + compilations \ + $oaisim_build_dir rb_tool \ + rb_tool $dbin/rb_tool + + # nasmesh driver compilation + compilations \ + $oaisim_build_dir nasmesh \ + CMakeFiles/nasmesh/nasmesh.ko $dbin/nasmesh.ko + + #oai_nw_drv + compilations \ + $oaisim_build_dir oai_nw_drv \ + CMakeFiles/oai_nw_drv/oai_nw_drv.ko $dbin/oai_nw_drv.ko fi - echo_info "Compiling oaisim_nos1" - cmake_file=$DIR/oaisim_noS1_build_oai/CMakeLists.txt - cp $DIR/oaisim_noS1_build_oai/CMakeLists.template $cmake_file - echo "set(XFORMS $XFORMS )" >> $cmake_file - echo "set(RRC_ASN1_VERSION \"${REL}\")" >> $cmake_file - echo "set(ENABLE_VCD_FIFO $VCD_TIMING )" >> $cmake_file - echo 'include(${CMAKE_CURRENT_SOURCE_DIR}/../CMakeLists.txt)' >> $cmake_file - [ "$CLEAN" = "1" ] && rm -rf $DIR/oaisim_noS1_build_oai/build - mkdir -p $DIR/oaisim_noS1_build_oai/build - cd $DIR/oaisim_noS1_build_oai/build - cmake .. - compilations \ - oaisim_noS1_build_oai oaisim_nos1 \ - oaisim_nos1 $dbin/oaisim_nos1.$REL - - compilations \ - oaisim_noS1_build_oai rb_tool \ - rb_tool $dbin/rb_tool - - # nasmesh driver compilation - compilations \ - oaisim_noS1_build_oai nasmesh \ - CMakeFiles/nasmesh/nasmesh.ko $dbin/nasmesh.ko - #oai_nw_drv - compilations \ - oaisim_noS1_build_oai oai_nw_drv \ - CMakeFiles/oai_nw_drv/oai_nw_drv.ko $dbin/oai_nw_drv.ko - cmake_file=$DIR/oaisim_mme_build_oai/CMakeLists.txt cp $DIR/oaisim_mme_build_oai/CMakeLists.template $cmake_file echo "set(XFORMS $XFORMS )" >> $cmake_file echo "set(RRC_ASN1_VERSION \"${REL}\")" >> $cmake_file echo "set(ENABLE_VCD_FIFO $VCD_TIMING )" >> $cmake_file echo 'include(${CMAKE_CURRENT_SOURCE_DIR}/../CMakeLists.txt)' >> $cmake_file - [ "$CLEAN" = "1" ] && rm -rf $DIR/oaisim_mme_build_oai/build - mkdir -p $DIR/oaisim_mme_build_oai/build - cd $DIR/oaisim_mme_build_oai/build + #[ "$CLEAN" = "1" ] && rm -rf $DIR/oaisim_mme_build_oai/build + #mkdir -p $DIR/oaisim_mme_build_oai/build + #cd $DIR/oaisim_mme_build_oai/build + #cmake .. + #compilations \ + # oaisim_mme_build_oai oaisim_mme \ + # oaisim_mme $dbin/oaisim_mme.$REL + fi + + # RRH compilation + ################## + if [ "$RRH" = "1" ] ; then + echo_info "Compiling RRH" + if [ $HW == "ETHERNET" ] ; then + echo_info "RF frontend for RRH is not defined. This mode is used for testing (loopback)." + elif [ $HW != "EXMIMO" -a $HW != "OAI_USRP" -a $HW != "OAI_BLADERF" ] ; then + echo_fatal "Hardware not defined ($HW)" + fi + cmake_file=$DIR/rrh_gw/CMakeLists.txt + echo "cmake_minimum_required(VERSION 2.8)" > $cmake_file + echo "set(ENABLE_VCD_FIFO $VCD_TIMING )" >> $cmake_file + echo "set(ENABLE_ITTI False )" >> $cmake_file + echo "set(RF_BOARD \"${HW}\")" >> $cmake_file + echo 'set(PACKAGE_NAME "\"rrh_gw\"")' >> $cmake_file + echo 'include(${CMAKE_CURRENT_SOURCE_DIR}/../CMakeLists.txt)' >> $cmake_file + + [ "$CLEAN" = "1" ] && rm -rf $DIR/rrh_gw/build + mkdir -p $DIR/rrh_gw/build + cd $DIR/rrh_gw/build cmake .. compilations \ - oaisim_mme_build_oai oaisim_mme \ - oaisim_mme $dbin/oaisim_mme.$REL + rrh_gw rrh_gw \ + rrh_gw $dbin/rrh_gw fi # EPC compilation ################## if [ "$EPC" = "1" ] ; then - echo_info "Compiling EPC" - # Example HSS and EPC run on the same host - if [ "$CLEAN" = "1" ]; then - $OPENAIR_DIR/cmake_targets/tools/build_epc --clean --debug --transport-tcp-only --transport-prefer-tcp --s6a-server - $OPENAIR_DIR/cmake_targets/tools/build_hss --clean --debug --transport-tcp-only --transport-prefer-tcp --fqdn `hostname --fqdn` --connect-to-mme `hostname --fqdn` - else - $OPENAIR_DIR/cmake_targets/tools/build_epc --debug --transport-tcp-only --transport-prefer-tcp --s6a-server - $OPENAIR_DIR/cmake_targets/tools/build_hss --debug --transport-tcp-only --transport-prefer-tcp --fqdn `hostname --fqdn` --connect-to-mme `hostname --fqdn` - fi - -# if [ "$INSTALL_SYSTEM_FILES" = "1" ] ;then -# if [ -f $dbin/hss.conf ] ; then -# sed -e 's/ *= */=/' $dbin/hss.conf > $dconf/hss.conf.nospace -# source $dconf/hss.conf.nospace -# rm -f $dconf/hss.conf.nospace -# create_hss_database root linux "$MYSQL_user" "$MYSQL_pass" "$MYSQL_db" -# else -# echo_warning "not created HSS database: config not found" -# fi -# fi -fi - + echo_info "Compiling EPC" + # Example HSS and EPC run on the same host + if [ "$CLEAN" = "1" ]; then + $OPENAIR_DIR/cmake_targets/tools/build_epc --clean --debug --transport-tcp-only --transport-prefer-tcp --s6a-server + $OPENAIR_DIR/cmake_targets/tools/build_hss --clean --debug --transport-tcp-only --transport-prefer-tcp --fqdn `hostname --fqdn` --connect-to-mme `hostname --fqdn` + else + $OPENAIR_DIR/cmake_targets/tools/build_epc --debug --transport-tcp-only --transport-prefer-tcp --s6a-server + $OPENAIR_DIR/cmake_targets/tools/build_hss --debug --transport-tcp-only --transport-prefer-tcp --fqdn `hostname --fqdn` --connect-to-mme `hostname --fqdn` + fi + + # if [ "$INSTALL_SYSTEM_FILES" = "1" ] ;then + # if [ -f $dbin/hss.conf ] ; then + # sed -e 's/ *= */=/' $dbin/hss.conf > $dconf/hss.conf.nospace + # source $dconf/hss.conf.nospace + # rm -f $dconf/hss.conf.nospace + # create_hss_database root linux "$MYSQL_user" "$MYSQL_pass" "$MYSQL_db" + # else + # echo_warning "not created HSS database: config not found" + # fi + # fi + fi + # Auto-tests ##################### if [ "$OAI_TEST" = "1" ]; then diff --git a/cmake_targets/doxygen/CMakeLists.txt b/cmake_targets/doxygen/CMakeLists.txt new file mode 100644 index 0000000000..8823f48cb6 --- /dev/null +++ b/cmake_targets/doxygen/CMakeLists.txt @@ -0,0 +1,11 @@ +cmake_minimum_required(VERSION 2.8) +include(${CMAKE_CURRENT_SOURCE_DIR}/../CMakeLists.txt) +find_package(Doxygen) +if(DOXYGEN_FOUND) +configure_file(${OPENAIR_TARGETS}/DOCS/Doxyfile ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile @ONLY) +add_custom_target(doc +${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile +WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} +COMMENT "Generating API documentation with Doxygen" VERBATIM +) +endif(DOXYGEN_FOUND) diff --git a/cmake_targets/epc_build_oai/CMakeLists.template b/cmake_targets/epc_build_oai/CMakeLists.template index b93370b503..da80f6d4d2 100644 --- a/cmake_targets/epc_build_oai/CMakeLists.template +++ b/cmake_targets/epc_build_oai/CMakeLists.template @@ -12,13 +12,11 @@ set ( ENABLE_FXP False ) set ( ENABLE_ITTI True ) set ( ENABLE_NAS_UE_LOGGING False ) set ( ENABLE_NEW_MULTICAST False ) -set ( ENABLE_PDCP_NETLINK_FIFO False ) set ( ENABLE_PGM_TRANSPORT False ) set ( ENABLE_RAL False ) set ( ENABLE_SECURITY False ) set ( ENABLE_STANDALONE_EPC True ) set ( ENABLE_USE_CPU_EXECUTION_TIME False ) -set ( ENABLE_USE_GTPU_IN_KERNEL True ) set ( ENABLE_USE_MME False ) set ( ENABLE_VCD_FIFO False ) set ( ENB_MODE False ) @@ -28,7 +26,7 @@ set ( FLAG_GTPV1U_KERNEL_THREAD_SOCK_NO_WAIT False) set ( HARD_RT False ) set ( JUMBO_FRAME False ) set ( LARGE_SCALE False ) -set ( LINK_PDCP_TO_GTPV1U False ) +set ( LINK_ENB_PDCP_TO_GTPV1U False ) set ( LINUX_LIST False ) set ( LINUX False ) set ( LOCALIZATION False ) diff --git a/cmake_targets/lte-simulators/CMakeLists.txt b/cmake_targets/lte-simulators/CMakeLists.txt index 7e38c9d594..50a473dd4b 100644 --- a/cmake_targets/lte-simulators/CMakeLists.txt +++ b/cmake_targets/lte-simulators/CMakeLists.txt @@ -10,5 +10,6 @@ set(RANDOM_BF False) set(PBS_SIM False) set(PERFECT_CE False) set(NAS_UE False) +set(MESSAGE_CHART_GENERATOR False) include(${CMAKE_CURRENT_SOURCE_DIR}/../CMakeLists.txt) diff --git a/cmake_targets/lte_noS1_build_oai/CMakeLists.template b/cmake_targets/lte_noS1_build_oai/CMakeLists.template new file mode 100644 index 0000000000..c8fc68da52 --- /dev/null +++ b/cmake_targets/lte_noS1_build_oai/CMakeLists.template @@ -0,0 +1,9 @@ +set(ENABLE_ITTI True) +set(ENABLE_USE_MME False) +set(PDCP_USE_NETLINK True) +set(LINK_ENB_PDCP_TO_IP_DRIVER True) +set(LINK_ENB_PDCP_TO_GTPV1U False) +set(PDCP_USE_NETLINK_QUEUES False) +set(LINUX True) +set(SECU False) +set(NAS_UE False) diff --git a/cmake_targets/lte_noS1_build_oai/CMakeLists.txt b/cmake_targets/lte_noS1_build_oai/CMakeLists.txt deleted file mode 100644 index 19c684d31b..0000000000 --- a/cmake_targets/lte_noS1_build_oai/CMakeLists.txt +++ /dev/null @@ -1,13 +0,0 @@ -cmake_minimum_required(VERSION 2.8) -set(XFORMS 1 ) -set(RRC_ASN1_VERSION "Rel10") -set(ENABLE_VCD_FIFO False ) -set(RF_BOARD "EXMIMO") -set(NAS 1) -set(ENABLE_ITTI False) -set(ENABLE_USE_MME False) -set(LINK_ENB_PDCP_TO_GTPV1U False) -set(SECU False) -set(NAS_UE False) -set(PACKAGE_NAME "\"lte-softmodem\"") -include(${CMAKE_CURRENT_SOURCE_DIR}/../CMakeLists.txt) diff --git a/cmake_targets/nas_sim_tools/CMakeLists.txt b/cmake_targets/nas_sim_tools/CMakeLists.txt index 99a6990ae7..1894ba6697 100644 --- a/cmake_targets/nas_sim_tools/CMakeLists.txt +++ b/cmake_targets/nas_sim_tools/CMakeLists.txt @@ -20,30 +20,30 @@ set(OPENAIR_TARGETS $ENV{OPENAIR_DIR}/targets) # Add .h files for dependancies set(usim_SRC - ${OPENAIR_DIR}/openair-cn/NAS/EURECOM-NAS/tools/usim_data.c - ${OPENAIR_DIR}/openair-cn/NAS/EURECOM-NAS/src/api/usim/usim_api.c - ${OPENAIR_DIR}/openair-cn/NAS/EURECOM-NAS/src/api/usim/aka_functions.c - ${OPENAIR_DIR}/openair-cn/NAS/EURECOM-NAS/src/util/memory.c - ${OPENAIR_DIR}/openair-cn/NAS/EURECOM-NAS/src/util/nas_log.c - ${OPENAIR_DIR}/openair-cn/NAS/EURECOM-NAS/src/util/OctetString.c - ${OPENAIR_DIR}/openair-cn/NAS/EURECOM-NAS/src/util/TLVEncoder.c + ${OPENAIR_DIR}/openair-cn/NAS/TOOLS/usim_data.c + ${OPENAIR_DIR}/openair-cn/NAS/UE/API/USIM/usim_api.c + ${OPENAIR_DIR}/openair-cn/NAS/UE/API/USIM/aka_functions.c + ${OPENAIR_DIR}/openair-cn/NAS/COMMON/UTIL/memory.c + ${OPENAIR_DIR}/openair-cn/NAS/COMMON/UTIL/nas_log.c + ${OPENAIR_DIR}/openair-cn/NAS/COMMON/UTIL/OctetString.c + ${OPENAIR_DIR}/openair-cn/NAS/COMMON/UTIL/TLVEncoder.c ) set(usim_HDR - ${OPENAIR_DIR}/openair-cn/NAS/EURECOM-NAS/tools/network.h - ${OPENAIR_DIR}/openair-cn/NAS/EURECOM-NAS/src/api/usim/usim_api.h - ${OPENAIR_DIR}/openair-cn/NAS/EURECOM-NAS/src/api/usim/aka_functions.h - ${OPENAIR_DIR}/openair-cn/NAS/EURECOM-NAS/src/util/memory.h - ${OPENAIR_DIR}/openair-cn/NAS/EURECOM-NAS/src/util/nas_log.h - ${OPENAIR_DIR}/openair-cn/NAS/EURECOM-NAS/src/util/OctetString.h - ${OPENAIR_DIR}/openair-cn/NAS/EURECOM-NAS/src/util/TLVEncoder.h + ${OPENAIR_DIR}/openair-cn/NAS/TOOLS/network.h + ${OPENAIR_DIR}/openair-cn/NAS/UE/API/USIM/usim_api.h + ${OPENAIR_DIR}/openair-cn/NAS/UE/API/USIM/aka_functions.h + ${OPENAIR_DIR}/openair-cn/NAS/COMMON/UTIL/memory.h + ${OPENAIR_DIR}/openair-cn/NAS/COMMON/UTIL/nas_log.h + ${OPENAIR_DIR}/openair-cn/NAS/COMMON/UTIL/OctetString.h + ${OPENAIR_DIR}/openair-cn/NAS/COMMON/UTIL/TLVEncoder.h ) include_directories( - ${OPENAIR_DIR}/openair-cn/NAS/EURECOM-NAS/src/include - ${OPENAIR_DIR}/openair-cn/NAS/EURECOM-NAS/src/api/usim - ${OPENAIR_DIR}/openair-cn/NAS/EURECOM-NAS/src/emm/ - ${OPENAIR_DIR}/openair-cn/NAS/EURECOM-NAS/src/esm/ - ${OPENAIR_DIR}/openair-cn/NAS/EURECOM-NAS/src/ies/ - ${OPENAIR_DIR}/openair-cn/NAS/EURECOM-NAS/src/util + ${OPENAIR_DIR}/openair-cn/NAS/COMMON + ${OPENAIR_DIR}/openair-cn/NAS/UE/API/USIM + ${OPENAIR_DIR}/openair-cn/NAS/UE/EMM/ + ${OPENAIR_DIR}/openair-cn/NAS/UE/ESM/ + ${OPENAIR_DIR}/openair-cn/NAS/COMMON/IES/ + ${OPENAIR_DIR}/openair-cn/NAS/COMMON/UTIL ) ADD_EXECUTABLE(usim ${usim_SRC} ${usim_HDR}) @@ -51,15 +51,15 @@ ADD_EXECUTABLE(usim ${usim_SRC} ${usim_HDR}) set(nvram_SRC - ${OPENAIR_DIR}/openair-cn/NAS/EURECOM-NAS/tools/ue_data.c - ${OPENAIR_DIR}/openair-cn/NAS/EURECOM-NAS/src/util/memory.c - ${OPENAIR_DIR}/openair-cn/NAS/EURECOM-NAS/src/util/nas_log.c + ${OPENAIR_DIR}/openair-cn/NAS/TOOLS/ue_data.c + ${OPENAIR_DIR}/openair-cn/NAS/COMMON/UTIL/memory.c + ${OPENAIR_DIR}/openair-cn/NAS/COMMON/UTIL/nas_log.c ) set(nvram_HDR - ${OPENAIR_DIR}/openair-cn/NAS/EURECOM-NAS/src/emm/emmData.h - ${OPENAIR_DIR}/openair-cn/NAS/EURECOM-NAS/src/util/memory.h - ${OPENAIR_DIR}/openair-cn/NAS/EURECOM-NAS/src/include/userDef.h + ${OPENAIR_DIR}/openair-cn/NAS/UE/EMM/emmData.h + ${OPENAIR_DIR}/openair-cn/NAS/COMMON/UTIL/memory.h + ${OPENAIR_DIR}/openair-cn/NAS/COMMON/userDef.h ) ADD_EXECUTABLE(nvram ${nvram_SRC} ${nvram_HDR}) diff --git a/cmake_targets/oaisim_build_oai/CMakeLists.template b/cmake_targets/oaisim_build_oai/CMakeLists.template index 7b5de3093f..76564d8fdd 100644 --- a/cmake_targets/oaisim_build_oai/CMakeLists.template +++ b/cmake_targets/oaisim_build_oai/CMakeLists.template @@ -10,7 +10,6 @@ set ( ENABLE_FXP True ) set ( ENABLE_ITTI True ) set ( ENABLE_NAS_UE_LOGGING True ) set ( ENABLE_NEW_MULTICAST True ) -set ( ENABLE_PDCP_NETLINK_FIFO False ) set ( ENABLE_PGM_TRANSPORT True ) set ( ENABLE_RAL False ) set ( ENABLE_SECURITY True ) @@ -79,4 +78,3 @@ set ( USE_3GPP_ADDR_AS_LINK_ADDR False ) set ( USE_MME "R10" ) set ( USER_MODE True ) set ( XER_PRINT False ) -set ( XFORMS False ) diff --git a/cmake_targets/oaisim_mme_build_oai/CMakeLists.template b/cmake_targets/oaisim_mme_build_oai/CMakeLists.template index dcac0c4f97..1035a28599 100644 --- a/cmake_targets/oaisim_mme_build_oai/CMakeLists.template +++ b/cmake_targets/oaisim_mme_build_oai/CMakeLists.template @@ -10,13 +10,11 @@ set ( ENABLE_FXP False ) set ( ENABLE_ITTI True ) set ( ENABLE_NAS_UE_LOGGING False ) set ( ENABLE_NEW_MULTICAST False ) -set ( ENABLE_PDCP_NETLINK_FIFO False ) set ( ENABLE_PGM_TRANSPORT False ) set ( ENABLE_RAL False ) set ( ENABLE_SECURITY False ) set ( ENABLE_STANDALONE_EPC False ) set ( ENABLE_USE_CPU_EXECUTION_TIME False ) -set ( ENABLE_USE_GTPU_IN_KERNEL True ) set ( ENABLE_USE_MME False ) set ( ENABLE_USE_RAW_SOCKET_FOR_SGI True) set ( ENABLE_VCD_FIFO False ) diff --git a/cmake_targets/oaisim_noS1_build_oai/CMakeLists.template b/cmake_targets/oaisim_noS1_build_oai/CMakeLists.template index 67bb68d54b..a905510150 100644 --- a/cmake_targets/oaisim_noS1_build_oai/CMakeLists.template +++ b/cmake_targets/oaisim_noS1_build_oai/CMakeLists.template @@ -10,7 +10,6 @@ set ( ENABLE_FXP True ) set ( ENABLE_ITTI True ) set ( ENABLE_NAS_UE_LOGGING False ) set ( ENABLE_NEW_MULTICAST True ) -set ( ENABLE_PDCP_NETLINK_FIFO False ) set ( ENABLE_PGM_TRANSPORT True ) set ( ENABLE_RAL False ) set ( ENABLE_SECURITY False ) @@ -32,9 +31,9 @@ set ( LOG_NO_THREAD 1 ) set ( LOWLATENCY False ) set ( MAC_CONTEXT 1 ) set ( MAX_NUM_CCs 1 ) -set ( MESSAGE_CHART_GENERATOR True ) -set ( MESSAGE_CHART_GENERATOR_RLC_MAC True ) -set ( MESSAGE_CHART_GENERATOR_PHY True ) +set ( MESSAGE_CHART_GENERATOR False ) +set ( MESSAGE_CHART_GENERATOR_RLC_MAC False ) +set ( MESSAGE_CHART_GENERATOR_PHY False ) set ( MIH_C_MEDIEVAL_EXTENSIONS False ) set ( MSG_PRINT False ) set ( MU_RECEIVER False ) @@ -81,4 +80,6 @@ set ( USE_3GPP_ADDR_AS_LINK_ADDR False ) set ( USE_MME "R10" ) set ( USER_MODE True ) set ( XER_PRINT False ) -set ( XFORMS False ) +set ( DEBUG_PHY False ) +set ( DEBUG_PHY_PROC False) +set ( DEBUG_DLSCH False) diff --git a/cmake_targets/rrh_gw/CMakeLists.txt b/cmake_targets/rrh_gw/CMakeLists.txt new file mode 100644 index 0000000000..9ff1437f0c --- /dev/null +++ b/cmake_targets/rrh_gw/CMakeLists.txt @@ -0,0 +1,6 @@ +cmake_minimum_required(VERSION 2.8) +set(ENABLE_VCD_FIFO False ) +set(ENABLE_ITTI False ) +set(RF_BOARD "ETHERNET") +set(PACKAGE_NAME "\"rrh_gw\"") +include(${CMAKE_CURRENT_SOURCE_DIR}/../CMakeLists.txt) diff --git a/cmake_targets/tools/asn1tostruct.py b/cmake_targets/tools/asn1tostruct.py new file mode 100644 index 0000000000..c298e8ae87 --- /dev/null +++ b/cmake_targets/tools/asn1tostruct.py @@ -0,0 +1,706 @@ +import re, os, sys, string +import datetime +import getopt +import getpass + +version = "1.0.2" + +lines = "" +iesDefs = {} +ieofielist = {} +outdir = './' + +filenames = [] +verbosity = 0 +prefix = "" + +FAIL = '\033[91m' +WARN = '\033[93m' +ENDC = '\033[0m' + +fileprefix = "" +fileprefix_first_upper = "" + +def printFail(string): + sys.stderr.write(FAIL + string + ENDC + "\n") + +def printWarning(string): + print WARN + string + ENDC + +def printDebug(string): + if verbosity > 0: + print string + +def outputHeaderToFile(f, filename): + now = datetime.datetime.now() + f.write("""/******************************************************************************* + + Eurecom OpenAirInterface + Copyright(c) 1999 - 2013 Eurecom + + This program is free software; you can redistribute it and/or modify it + under the terms and conditions of the GNU General Public License, + version 2, as published by the Free Software Foundation. + + This program is distributed in the hope it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + more details. + + You should have received a copy of the GNU General Public License along with + this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. + + The full GNU General Public License is included in this distribution in + the file called "COPYING". + + Contact Information + Openair Admin: openair_admin@eurecom.fr + Openair Tech : openair_tech@eurecom.fr + Forums : http://forums.eurecom.fr/openairinterface + Address : EURECOM, Campus SophiaTech, 450 Route des Chappes + 06410 Biot FRANCE + +*******************************************************************************/ + +""") + f.write("/*******************************************************************************\n") + f.write(" * This file had been created by asn1tostruct.py script v%s\n" % (version)) + f.write(" * Please do not modify this file but regenerate it via script.\n") + f.write(" * Created on: %s by %s\n * from %s\n" % (str(now), getpass.getuser(), filenames)) + f.write(" ******************************************************************************/\n") + +def lowerFirstCamelWord(word): + """ puts the first word in a CamelCase Word in lowercase. + + I.e. CustomerID becomes customerID, XMLInfoTest becomes xmlInfoTest + """ + newstr = '' + swapped = word.swapcase() + idx = 0 + + # if it's all-caps, return an all-lowered version + lowered = word.lower() + + if swapped == lowered: + return lowered + + for c in swapped: + if c in string.lowercase: + newstr += c + idx += 1 + else: + break + if idx < 2: + newstr += word[idx:] + else: + newstr = newstr[:-1]+ word[idx-1:] + + return newstr + +def usage(): + print "Python parser for asn1 v%s" % (version) + print "Usage: python asn1tostruct.py [options]" + print "Available options:" + print "-d Enable script debug" + print "-f [file] Input file to parse" + print "-o [dir] Output files to given directory" + print "-h Print this help and return" + +try: + opts, args = getopt.getopt(sys.argv[1:], "df:ho:", ["debug", "file", "help", "outdir"]) +except getopt.GetoptError as err: + # print help information and exit: + usage() + sys.exit(2) + +for o, a in opts: + if o in ("-f", "--file"): + filenames.append(a) + if o in ("-d", "--debug"): + verbosity = 1 + if o in ("-o", "--outdir"): + outdir = a + if outdir.rfind('/') != len(outdir): + outdir += '/' + if o in ("-h", "--help"): + usage() + sys.exit(2) + +for filename in filenames: + file = open(filename, 'r') + for line in file: + # Removing any comment + if line.find('--') >= 0: + line = line[:line.find('--')] + # Removing any carriage return + lines += re.sub('\r', '', line) + + for m in re.findall(r'([a-zA-Z0-9-]+)\s*::=\s+SEQUENCE\s+\(\s*SIZE\s*\(\s*\d+\s*\.\.\s*[0-9a-zA-Z-]+\s*\)\s*\)\s*OF\s+[a-zA-Z-]+\s*\{\s*\{\s*([0-9a-zA-Z-]+)\s*\}\s*\}', lines, re.MULTILINE): + ieofielist[m[0]] = m[1] + for m in re.findall(r'([a-zA-Z0-9-]+)\s*::=\s+E-RAB-IE-ContainerList\s*\{\s*\{\s*([a-zA-Z0-9-]+)\s*\}\s*\}', lines, re.MULTILINE): + ieofielist[m[0]] = m[1] + + for i in re.findall(r'([a-zA-Z0-9-]+)\s+([A-Z0-9-]+)\s*::=\s*\{\s+([\,\|\{\}\t\n\.{3}\ \-a-zA-Z0-9]+)\s+}\n', lines, re.MULTILINE): + ies = [] + maxLength = 0 + # TODO: handle extensions + if i[1].find('EXTENSION') >= 0: + continue + if fileprefix == "": + fileprefix = i[1][:i[1].find('-')].lower() + for j in re.findall(r'\s*\{\s*([a-zA-Z0-9-\ \t]+)\s*\}\s*[\|,]*', i[2], re.MULTILINE): + for k in re.findall(r'ID\s*([a-zA-Z0-9\-]+)\s*CRITICALITY\s*([a-zA-Z0-9\-]+)\s+[A-Z]+\s+([a-zA-Z0-9\-]+)\s*PRESENCE\s*([a-zA-Z0-9\-]+)', j, re.MULTILINE): + printDebug("Got new ie for message " + i[0] + ": " + str(k)) + if len(k[2]) > maxLength: + maxLength = len(k[2]) + ies.append(k) + + if len(ies) > 0: + iesDefs[i[0]] = { "length": maxLength, "ies": ies } + else: + printWarning("Didn't find any information element for message: " + i[0]) + +if len(iesDefs) == 0: + printFail("No Information Element parsed, exiting") + sys.exit(0) + +fileprefix_first_upper = fileprefix[0].upper() + fileprefix[1:] + +f = open(outdir + fileprefix + '_ies_defs.h', 'w') +outputHeaderToFile(f, filename) +f.write("#include \"%s_common.h\"\n\n" % (fileprefix)) +f.write("#ifndef %s_IES_DEFS_H_\n#define %s_IES_DEFS_H_\n\n" % (fileprefix.upper(), fileprefix.upper())) +f.write("/* Define the version of script used to generate this file */\n") +f.write("#define %s_SCRIPT_VERSION (%s)\n\n" % (fileprefix.upper(), re.sub('\.', '', version))) + +for key in iesDefs: + + if key not in ieofielist.values(): + continue + + for (i, j) in ieofielist.items(): + if j == key: + break + + f.write("typedef struct %sIEs_s {\n" % (re.sub('-', '_', i))) + f.write(" A_SEQUENCE_OF(struct %s_s) %s;\n" % (re.sub('IEs', '', re.sub('-', '_', ieofielist[i])), lowerFirstCamelWord(re.sub('IEs', '', re.sub('-', '_', ieofielist[i]))))) + f.write("} %sIEs_t;\n\n" % (re.sub('-', '_', i))) + +for key in iesDefs: + keyupperunderscore = re.sub('-', '_', key.upper()) + keylowerunderscore = re.sub('-', '_', key.lower()) + shift = 0 + + if len(iesDefs[key]["ies"]) == 0: + continue + + # Presence mask + for ie in iesDefs[key]["ies"]: + ieupperunderscore = re.sub('-', '_', re.sub('id-', '', ie[0])).upper() + + if ie[3] == "optional" or ie[3] == "conditional": + f.write("#define {0:<{pad}} {1}\n".format("%s_%s_PRESENT" % (keyupperunderscore, ieupperunderscore), "(1 << %d)" % shift, + pad=iesDefs[key]["length"] + len(keyupperunderscore) + 9)) + shift += 1 + if (shift > 0): + f.write("\n") + + f.write("typedef struct %s_s {\n" % (re.sub('-', '_', key))) + if (shift > 0): + f.write(" {0:<{pad}} {1};\n".format("uint16_t", "presenceMask", pad=iesDefs[key]["length"] + 2)) + for ie in iesDefs[key]["ies"]: + ieunderscore = re.sub('-', '_', ie[2]) + iename = re.sub('id-', '', ie[0]) + ienameunderscore = lowerFirstCamelWord(re.sub('-', '_', iename)) + if ie[2] in ieofielist: + f.write(" %sIEs_t %s;" % (re.sub('-', '_', ie[2]), ienameunderscore)) + else: + f.write(" {0:<{pad}} {1};".format("%s_t" % ieunderscore, ienameunderscore, pad=iesDefs[key]["length"] + 2)) + if ie[3] == "optional": + f.write(" ///< Optional field") + elif ie[3] == "conditional": + f.write(" ///< Conditional field") + f.write("\n") + + f.write("} %s_t;\n\n" % (re.sub('-', '_', key))) + +f.write("typedef struct %s_message_s {\n" % (fileprefix)) +f.write(" %s_ProcedureCode_t procedureCode;\n" % (fileprefix_first_upper)) +f.write(" %s_Criticality_t criticality;\n" % (fileprefix_first_upper)) +f.write(" uint8_t direction;\n") +f.write(" union {\n") + +messageList = iesDefs.keys() +messageList.sort() +for message in messageList: + if message in ieofielist.values(): + continue + if len(iesDefs[message]["ies"]) == 0: + continue + f.write(" %s_t %s;\n" % (re.sub('-', '_', message), lowerFirstCamelWord(re.sub('-', '_', message)))) +f.write(" } msg;\n") +f.write("} %s_message;\n\n" % (fileprefix)) + +for key in iesDefs: + if key in ieofielist.values(): + continue + structName = re.sub('ies', '', key) + asn1cStruct = re.sub('-', '_', re.sub('IEs', '', re.sub('-IEs', '', key))) + asn1cStruct = re.sub('Item', 'List', asn1cStruct) + keylowerunderscore = re.sub('-', '_', key.lower()) + firstlower = re.sub('Item', 'List', re.sub('enb', 'eNB', lowerFirstCamelWord(asn1cStruct))) + f.write("/** \\brief Decode function for %s ies.\n" % (key)) + if len(iesDefs[key]["ies"]) != 0: + f.write(" * \\param %s Pointer to ASN1 structure in which data will be stored\n" % (lowerFirstCamelWord(re.sub('-', '_', key)))) + f.write(" * \\param any_p Pointer to the ANY value to decode.\n") + f.write(" **/\n") + f.write("int %s_decode_%s(\n" % (fileprefix, keylowerunderscore)) + + if len(iesDefs[key]["ies"]) != 0: + f.write(" %s_t *%s,\n" % (re.sub('-', '_', key), lowerFirstCamelWord(re.sub('-', '_', key)))) + f.write(" ANY_t *any_p);\n\n") + + if len(iesDefs[key]["ies"]) == 0: + continue + + f.write("/** \\brief Encode function for %s ies.\n" % (key)) + f.write(" * \\param %s Pointer to the ASN1 structure.\n" % (firstlower)) + f.write(" * \\param %s Pointer to the IES structure.\n" % (lowerFirstCamelWord(re.sub('-', '_', key)))) + f.write(" **/\n") + f.write("int %s_encode_%s(\n" % (fileprefix, re.sub('-', '_', structName.lower()))) + f.write(" %s_t *%s,\n" % (asn1cStruct, firstlower)) + f.write(" %s_t *%s);\n\n" % (re.sub('-', '_', key), lowerFirstCamelWord(re.sub('-', '_', key)))) + +for key in iesDefs: + if key not in ieofielist.values(): + continue + asn1cStruct = re.sub('-', '_', re.sub('IEs', '', key)) + asn1cStruct = re.sub('Item', 'List', asn1cStruct) + firstlower = re.sub('Item', 'List', re.sub('enb', 'eNB', lowerFirstCamelWord(asn1cStruct))) + f.write("/** \\brief Encode function for %s ies.\n" % (key)) + f.write(" * \\param %s Pointer to the ASN1 structure.\n" % (firstlower)) + f.write(" * \\param %s Pointer to the IES structure.\n" % (lowerFirstCamelWord(re.sub('-', '_', key)))) + f.write(" **/\n") + f.write("int %s_encode_%s(\n" % (fileprefix, firstlower.lower())) + f.write(" %s_t *%s,\n" % (asn1cStruct, firstlower)) + f.write(" %sIEs_t *%sIEs);\n\n" % (asn1cStruct, firstlower)) + f.write("/** \\brief Decode function for %s ies.\n" % (key)) + f.write(" * \\param any_p Pointer to the ANY value to decode.\n") + f.write(" * \\param callback Callback function called when any_p is successfully decoded.\n") + f.write(" **/\n") + f.write("int %s_decode_%s(\n" % (fileprefix, firstlower.lower())) + f.write(" %sIEs_t *%sIEs,\n" % (asn1cStruct, firstlower)) + f.write(" %s_t *%s);\n\n" % (asn1cStruct, lowerFirstCamelWord(asn1cStruct))) + +for key in iesDefs: + asn1cStruct = re.sub('-', '_', re.sub('IEs', '', key)) + asn1cStruct = re.sub('Item', 'List', asn1cStruct) + firstlower = re.sub('Item', 'List', re.sub('enb', 'eNB', lowerFirstCamelWord(asn1cStruct))) + + if key in ieofielist.values(): + f.write("/** \\brief Display %s encapsulated IE using XER encoding.\n" % (asn1cStruct)) + f.write(" * \\param %s Pointer to the IES structure.\n" % (lowerFirstCamelWord(re.sub('-', '_', key)))) + f.write(" * \\param file File descriptor to write output.\n") + f.write(" **/\n") + f.write("asn_enc_rval_t %s_xer_print_%s(\n" % (fileprefix, re.sub('item', 'list', firstlower.lower()))) + f.write(" asn_app_consume_bytes_f *cb,\n") + f.write(" void *app_key,\n") + f.write(" %sIEs_t *%sIEs);\n\n" % (re.sub('item', 'list', asn1cStruct), firstlower)) + else: + f.write("/** \\brief Display %s message using XER encoding.\n" % (asn1cStruct)) + f.write(" * \\param message_p Pointer to root message.\n") + f.write(" * \\param file File descriptor to write output.\n") + f.write(" **/\n") + f.write("asn_enc_rval_t %s_xer_print_%s(\n" % (fileprefix, firstlower.lower())) + f.write(" asn_app_consume_bytes_f *cb,\n") + f.write(" void *app_key,\n") + f.write(" %s_message *message_p);\n\n" % (fileprefix)) + +f.write("int %s_xer__print2sp(const void *buffer, size_t size, void *app_key);\n\n" % (fileprefix.lower())) +f.write("int %s_xer__print2fp(const void *buffer, size_t size, void *app_key);\n\n" % (fileprefix.lower())) +f.write("extern size_t %s_string_total_size;\n\n" % (fileprefix.lower())) +f.write("#endif /* %s_IES_DEFS_H_ */\n\n" % (fileprefix.upper())) + +#Generate Decode functions +f = open(outdir + fileprefix + '_decoder.c', 'w') +outputHeaderToFile(f, filename) +f.write("#include \"%s_common.h\"\n#include \"%s_ies_defs.h\"\n\n" % (fileprefix, fileprefix)) +for key in iesDefs: + if key in ieofielist.values(): + continue + structName = re.sub('ies', '', key) + asn1cStruct = re.sub('-', '_', re.sub('IEs', '', key)) + if asn1cStruct.rfind('_') == len(asn1cStruct) - 1: + asn1cStruct = asn1cStruct[:-1] + asn1cStruct = re.sub('Item', 'List', asn1cStruct) + ielistname = re.sub('UE', 'ue', asn1cStruct) + ielistnamefirstlower = ielistname[:1].lower() + ielistname[1:] + asn1cStructfirstlower = asn1cStruct[:1].lower() + asn1cStruct[1:] + keyName = re.sub('-', '_', key) + keyupperunderscore = keyName.upper() + firstlower = re.sub('Item', 'List', re.sub('enb', 'eNB', lowerFirstCamelWord(asn1cStruct))) + + iesaccess = "" + if key not in ieofielist.values(): + iesaccess = "%s_ies." % (firstlower) + + f.write("int %s_decode_%s(\n" % (fileprefix, re.sub('-', '_', structName.lower()))) + if len(iesDefs[key]["ies"]) != 0: + f.write(" %s_t *%s,\n" % (re.sub('-', '_', key), lowerFirstCamelWord(re.sub('-', '_', key)))) + f.write(" ANY_t *any_p) {\n\n") + + f.write(" %s_t %s;\n %s_t *%s_p = &%s;\n" % (asn1cStruct, asn1cStructfirstlower, asn1cStruct, asn1cStructfirstlower, asn1cStructfirstlower)) + f.write(" int i, decoded = 0;\n") + if len(iesDefs[key]["ies"]) != 0: + f.write(" int tempDecoded = 0;\n") + + f.write(" assert(any_p != NULL);\n") + if len(iesDefs[key]["ies"]) != 0: + f.write(" assert(%s != NULL);\n\n" % (lowerFirstCamelWord(re.sub('-', '_', key)))) + + f.write(" %s_DEBUG(\"Decoding message %s (%%s:%%d)\\n\", __FILE__, __LINE__);\n\n" % (fileprefix.upper(), re.sub('-', '_', keyName))) + f.write(" ANY_to_type_aper(any_p, &asn_DEF_%s, (void**)&%s_p);\n\n" % (asn1cStruct, asn1cStructfirstlower)) + f.write(" for (i = 0; i < %s_p->%slist.count; i++) {\n" % (asn1cStructfirstlower, iesaccess)) + f.write(" %s_IE_t *ie_p;\n" % (fileprefix[0].upper() + fileprefix[1:])) + f.write(" ie_p = %s_p->%slist.array[i];\n" % (asn1cStructfirstlower, iesaccess)) + f.write(" switch(ie_p->id) {\n") + for ie in iesDefs[key]["ies"]: + iename = re.sub('id-', '', ie[0]) + ienameunderscore = lowerFirstCamelWord(re.sub('-', '_', iename)) + ienameunderscorefirstlower = lowerFirstCamelWord(ienameunderscore) + ietypesubst = re.sub('-', '', ie[2]) + ietypeunderscore = re.sub('-', '_', ie[2]) + ieupperunderscore = re.sub('-', '_', re.sub('id-', '', ie[0])).upper() + + if ie[3] == "optional": + f.write(" /* Optional field */\n") + elif ie[3] == "conditional": + f.write(" /* Conditional field */\n") + f.write(" case %s_ProtocolIE_ID_%s:\n" % (fileprefix_first_upper, re.sub('-', '_', ie[0]))) + f.write(" {\n") + f.write(" %s_t *%s_p = NULL;\n" % (ietypeunderscore, lowerFirstCamelWord(ietypesubst))) + if ie[3] != "mandatory": + f.write(" %s->presenceMask |= %s_%s_PRESENT;\n" % (lowerFirstCamelWord(re.sub('-', '_', key)), keyupperunderscore, ieupperunderscore)) + f.write(" tempDecoded = ANY_to_type_aper(&ie_p->value, &asn_DEF_%s, (void**)&%s_p);\n" % (ietypeunderscore, lowerFirstCamelWord(ietypesubst))) + f.write(" if (tempDecoded < 0 || %s_p == NULL) {\n" % (lowerFirstCamelWord(ietypesubst))) + f.write(" %s_ERROR(\"Decoding of IE %s failed\\n\");\n" % (fileprefix.upper(), ienameunderscore)) + f.write(" if (%s_p)\n" % (lowerFirstCamelWord(ietypesubst))) + f.write(" ASN_STRUCT_FREE(asn_DEF_%s, %s_p);\n" % (ietypeunderscore, lowerFirstCamelWord(ietypesubst))) + f.write(" return -1;\n") + f.write(" }\n") + f.write(" decoded += tempDecoded;\n") + f.write(" if (asn1_xer_print)\n") + f.write(" xer_fprint(stdout, &asn_DEF_%s, %s_p);\n" % (ietypeunderscore, lowerFirstCamelWord(ietypesubst))) + if ie[2] in ieofielist.keys(): + f.write(" if (%s_decode_%s(&%s->%s, %s_p) < 0) {\n" % (fileprefix, ietypeunderscore.lower(), lowerFirstCamelWord(re.sub('-', '_', key)), ienameunderscore, lowerFirstCamelWord(ietypesubst))) + f.write(" %s_ERROR(\"Decoding of encapsulated IE %s failed\\n\");\n" % (fileprefix.upper(), lowerFirstCamelWord(ietypesubst))) + f.write(" ASN_STRUCT_FREE(asn_DEF_%s, %s_p);\n" % (ietypeunderscore, lowerFirstCamelWord(ietypesubst))) + f.write(" }\n") + else: + f.write(" memcpy(&%s->%s, %s_p, sizeof(%s_t));\n" % (lowerFirstCamelWord(re.sub('-', '_', key)), ienameunderscore, lowerFirstCamelWord(ietypesubst), ietypeunderscore)) + #f.write(" ASN_STRUCT_FREE(asn_DEF_%s, %s_p);\n" % (ietypeunderscore, lowerFirstCamelWord(ietypesubst))) + f.write(" } break;\n") + f.write(" default:\n") + f.write(" %s_ERROR(\"Unknown protocol IE id (%%d) for message %s\\n\", (int)ie_p->id);\n" % (fileprefix.upper(), re.sub('-', '_', structName.lower()))) + f.write(" return -1;\n") + f.write(" }\n") + f.write(" }\n") + f.write(" return decoded;\n") + f.write("}\n\n") + +for key in iesDefs: + if key not in ieofielist.values(): + continue + + keyname = re.sub('IEs', '', re.sub('Item', 'List', key)) + + f.write("int %s_decode_%s(\n" % (fileprefix, re.sub('-', '_', keyname).lower())) + f.write(" %sIEs_t *%sIEs,\n" % (re.sub('-', '_', keyname), lowerFirstCamelWord(re.sub('-', '_', keyname)))) + f.write(" %s_t *%s) {\n\n" % (re.sub('-', '_', keyname), lowerFirstCamelWord(re.sub('-', '_', keyname)))) + f.write(" int i, decoded = 0;\n") + f.write(" int tempDecoded = 0;\n\n") + + f.write(" assert(%s != NULL);\n" % (lowerFirstCamelWord(re.sub('-', '_', keyname)))); + f.write(" assert(%sIEs != NULL);\n\n" % (lowerFirstCamelWord(re.sub('-', '_', keyname)))); + + f.write(" for (i = 0; i < %s->list.count; i++) {\n" % (lowerFirstCamelWord(re.sub('-', '_', keyname)))) + f.write(" %s_IE_t *ie_p = %s->list.array[i];\n" % (fileprefix[0].upper() + fileprefix[1:], lowerFirstCamelWord(re.sub('-', '_', keyname)))) + f.write(" switch (ie_p->id) {\n") + for ie in iesDefs[key]["ies"]: + iename = re.sub('id-', '', ie[0]) + ienameunderscore = lowerFirstCamelWord(re.sub('-', '_', iename)) + f.write(" case %s_ProtocolIE_ID_%s:\n" % (fileprefix_first_upper, re.sub('-', '_', ie[0]))) + f.write(" {\n") + f.write(" %s_t *%s_p = NULL;\n" % (re.sub('-', '_', ie[2]), lowerFirstCamelWord(re.sub('-', '', ie[2])))) + f.write(" tempDecoded = ANY_to_type_aper(&ie_p->value, &asn_DEF_%s, (void**)&%s_p);\n" % (re.sub('-', '_', ie[2]), lowerFirstCamelWord(re.sub('-', '', ie[2])))) + f.write(" if (tempDecoded < 0 || %s_p == NULL) {\n" % (lowerFirstCamelWord(re.sub('-', '', ie[2])))) + f.write(" %s_ERROR(\"Decoding of IE %s for message %s failed\\n\");\n" % (fileprefix.upper(), ienameunderscore, re.sub('-', '_', keyname))) + f.write(" if (%s_p)\n" % (lowerFirstCamelWord(re.sub('-', '', ie[2])))) + #f.write(" free(%s_p);\n" % (lowerFirstCamelWord(re.sub('-', '', ie[2])))) + f.write(" ASN_STRUCT_FREE(asn_DEF_%s, %s_p);\n" % (re.sub('-', '_', ie[2]), lowerFirstCamelWord(re.sub('-', '', ie[2])))) + f.write(" return -1;\n") + f.write(" }\n") + f.write(" decoded += tempDecoded;\n") + f.write(" if (asn1_xer_print)\n") + f.write(" xer_fprint(stdout, &asn_DEF_%s, %s_p);\n" % (re.sub('-', '_', ie[2]), lowerFirstCamelWord(re.sub('-', '', ie[2])))) + f.write(" ASN_SEQUENCE_ADD(&%sIEs->%s, %s_p);\n" % (lowerFirstCamelWord(re.sub('-', '_', keyname)), + re.sub('IEs', '', lowerFirstCamelWord(re.sub('-', '_', key))), lowerFirstCamelWord(re.sub('-', '', ie[2])))) + f.write(" } break;\n") + f.write(" default:\n") + f.write(" %s_ERROR(\"Unknown protocol IE id (%%d) for message %s\\n\", (int)ie_p->id);\n" % (fileprefix.upper(), re.sub('-', '_', structName.lower()))) + f.write(" return -1;\n") + f.write(" }\n") + f.write(" }\n") + f.write(" return decoded;\n") + f.write("}\n\n") + + +#Generate IES Encode functions +f = open(outdir + fileprefix + '_encoder.c', 'w') +outputHeaderToFile(f,filename) +f.write("#include \"%s_common.h\"\n" % (fileprefix)) +f.write("#include \"%s_ies_defs.h\"\n\n" % (fileprefix)) +for key in iesDefs: + if key in ieofielist.values(): + continue + + structName = re.sub('ies', '', key) + asn1cStruct = re.sub('-', '_', re.sub('IEs', '', key)) + asn1cStruct = re.sub('Item', 'List', asn1cStruct) + if asn1cStruct.rfind('_') == len(asn1cStruct) - 1: + asn1cStruct = asn1cStruct[:-1] + asn1cStructfirstlower = asn1cStruct[:1].lower() + asn1cStruct[1:] + firstwordlower = re.sub('Item', 'List', re.sub('enb', 'eNB', lowerFirstCamelWord(asn1cStruct))) + + iesaccess = "" + if key not in ieofielist.values(): + iesaccess = "%s_ies." % (firstwordlower) + + keyName = re.sub('-', '_', key) + keyupperunderscore = keyName.upper() + # No IE to encode... + if len(iesDefs[key]["ies"]) == 0: + continue + + f.write("int %s_encode_%s(\n" % (fileprefix, re.sub('-', '_', structName.lower()))) + f.write(" %s_t *%s,\n" % (asn1cStruct, firstwordlower)) + f.write(" %s_t *%s) {\n\n" % (re.sub('-', '_', key), lowerFirstCamelWord(re.sub('-', '_', key)))) + + f.write(" %s_IE_t *ie;\n\n" % (fileprefix_first_upper)) + + f.write(" assert(%s != NULL);\n" % (firstwordlower)); + f.write(" assert(%s != NULL);\n\n" % (lowerFirstCamelWord(re.sub('-', '_', key)))); + + for ie in iesDefs[key]["ies"]: + iename = re.sub('-', '_', re.sub('id-', '', ie[0])) + ienameunderscore = re.sub('-', '_', iename) + ienamefirstwordlower = lowerFirstCamelWord(iename) + ieupperunderscore = re.sub('-', '_', re.sub('id-', '', ie[0])).upper() + ietypeunderscore = re.sub('-', '_', ie[2]) + + if ie[3] != "mandatory": + if ie[3] == "optional": + f.write(" /* Optional field */\n") + elif ie[3] == "conditional": + f.write(" /* Conditional field */\n") + f.write(" if (%s->presenceMask & %s_%s_PRESENT) {\n" % (lowerFirstCamelWord(re.sub('-', '_', key)), keyupperunderscore, ieupperunderscore)) + #f.write(" == %s_%s_PRESENT) {\n" % (keyupperunderscore, ieupperunderscore)) + f.write(" if ((ie = %s_new_ie(%s_ProtocolIE_ID_%s,\n" % (fileprefix, fileprefix_first_upper, re.sub('-', '_', ie[0]))) + f.write(" %s_Criticality_%s,\n" % (fileprefix_first_upper, ie[1])) + f.write(" &asn_DEF_%s,\n" % (ietypeunderscore)) + f.write(" &%s->%s)) == NULL) {\n" % (lowerFirstCamelWord(re.sub('-', '_', key)), ienamefirstwordlower)) + f.write(" return -1;\n") + f.write(" }\n") + f.write(" ASN_SEQUENCE_ADD(&%s->%slist, ie);\n" % (firstwordlower, iesaccess)) + f.write(" }\n\n") + else: + if ie[2] in ieofielist.keys(): + f.write(" %s_t %s;\n\n" % (ietypeunderscore, ienamefirstwordlower)) + f.write(" memset(&%s, 0, sizeof(%s_t));\n" % (ienamefirstwordlower, ietypeunderscore)) + f.write("\n") + f.write(" if (%s_encode_%s(&%s, &%s->%s) < 0) return -1;\n" % (fileprefix, ietypeunderscore.lower(), ienamefirstwordlower, lowerFirstCamelWord(re.sub('-', '_', key)), ienamefirstwordlower)) + f.write(" if ((ie = %s_new_ie(%s_ProtocolIE_ID_%s,\n" % (fileprefix, fileprefix_first_upper, re.sub('-', '_', ie[0]))) + f.write(" %s_Criticality_%s,\n" % (fileprefix_first_upper, ie[1])) + f.write(" &asn_DEF_%s,\n" % (ietypeunderscore)) + if ie[2] in ieofielist.keys(): + f.write(" &%s)) == NULL) {\n" % (ienamefirstwordlower)) + else: + f.write(" &%s->%s)) == NULL) {\n" % (lowerFirstCamelWord(re.sub('-', '_', key)), ienamefirstwordlower)) + f.write(" return -1;\n") + f.write(" }\n") + f.write(" ASN_SEQUENCE_ADD(&%s->%slist, ie);\n\n" % (firstwordlower, iesaccess)) + if ie[2] in ieofielist.keys(): + f.write(" /* Free any dynamic allocation that is no more used */\n") + f.write(" ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_%s, &%s);\n\n" % (ietypeunderscore, ienamefirstwordlower)) + + f.write(" return 0;\n") + f.write("}\n\n") + +for (key, value) in iesDefs.items(): + if key not in ieofielist.values(): + continue + + ie = value["ies"][0] + ietypeunderscore = re.sub('-', '_', ie[2]) + asn1cStruct = re.sub('-', '_', re.sub('IEs', '', re.sub('-IEs', '', key))) + asn1cStruct = re.sub('Item', 'List', asn1cStruct) + firstwordlower = re.sub('Item', 'List', re.sub('enb', 'eNB', lowerFirstCamelWord(asn1cStruct))) + + for (i, j) in ieofielist.items(): + if j == key: + break + f.write("int %s_encode_%s(\n" % (fileprefix, re.sub('-', '_', i).lower())) + f.write(" %s_t *%s,\n" % (asn1cStruct, firstwordlower)) + f.write(" %sIEs_t *%sIEs) {\n\n" % (re.sub('-', '_', i), lowerFirstCamelWord(re.sub('-', '_', i)))) + f.write(" int i;\n") + + f.write(" %s_IE_t *ie;\n\n" % (fileprefix_first_upper)) + + f.write(" assert(%s != NULL);\n" % (firstwordlower)); + f.write(" assert(%sIEs != NULL);\n\n" % (lowerFirstCamelWord(re.sub('-', '_', i)))); + + f.write(" for (i = 0; i < %sIEs->%s.count; i++) {\n" % (firstwordlower, re.sub('IEs', '', lowerFirstCamelWord(re.sub('-', '_', key))))) + f.write(" if ((ie = %s_new_ie(%s_ProtocolIE_ID_%s,\n" % (fileprefix, fileprefix_first_upper, re.sub('-', '_', ie[0]))) + f.write(" %s_Criticality_%s,\n" % (fileprefix_first_upper, ie[1])) + f.write(" &asn_DEF_%s,\n" % (ietypeunderscore)) + f.write(" %sIEs->%s.array[i])) == NULL) {\n" % (firstwordlower, re.sub('IEs', '', lowerFirstCamelWord(re.sub('-', '_', key))))) + f.write(" return -1;\n") + f.write(" }\n") + f.write(" ASN_SEQUENCE_ADD(&%s->list, ie);\n" % (firstwordlower)) + f.write(" }\n") + f.write(" return 0;\n") + f.write("}\n\n") + +#Generate xer print functions +f = open(outdir + fileprefix + '_xer_print.c', 'w') +outputHeaderToFile(f, filename) +f.write("#include \n") +f.write("#include \n\n") +f.write("#include \n#include \n\n") +f.write("#include \"%s_common.h\"\n#include \"%s_ies_defs.h\"\n\n" % (fileprefix, fileprefix)) + +f.write("size_t %s_string_total_size = 0;\n\n" % (fileprefix.lower())) +f.write("""int +%s_xer__print2fp(const void *buffer, size_t size, void *app_key) { + FILE *stream = (FILE *)app_key; + + if(fwrite(buffer, 1, size, stream) != size) + return -1; + + return 0; +} + +""" % (fileprefix.lower())) + +f.write("""int %s_xer__print2sp(const void *buffer, size_t size, void *app_key) { + char *string = (char *)app_key; + + /* Copy buffer to the formatted string */ + memcpy(&string[%s_string_total_size], buffer, size); + + %s_string_total_size += size; + + return 0; +} + +""" % (fileprefix.lower(), fileprefix.lower(), fileprefix.lower())) + +f.write("""static asn_enc_rval_t +xer_encode_local(asn_TYPE_descriptor_t *td, void *sptr, + asn_app_consume_bytes_f *cb, void *app_key, int indent) { + asn_enc_rval_t er, tmper; + const char *mname; + size_t mlen; + int xcan = 2; + + if(!td || !sptr) goto cb_failed; + + mname = td->xml_tag; + mlen = strlen(mname); + + _i_ASN_TEXT_INDENT(0, indent); + _ASN_CALLBACK3("<", 1, mname, mlen, ">", 1); + + tmper = td->xer_encoder(td, sptr, indent + 1, XER_F_BASIC, cb, app_key); + if(tmper.encoded == -1) return tmper; + + _ASN_CALLBACK3("\\n", xcan); + + er.encoded = 4 + xcan + (2 * mlen) + tmper.encoded; + + _ASN_ENCODED_OK(er); +cb_failed: + _ASN_ENCODE_FAILED; +} +""") + +for (key, value) in iesDefs.items(): + keyName = re.sub('-', '_', key) + keyupperunderscore = keyName.upper() + iesStructName = lowerFirstCamelWord(re.sub('-', '_', key)) + + ie = value["ies"][0] + ietypeunderscore = re.sub('-', '_', ie[2]) + + if key in ieofielist.values(): + f.write("asn_enc_rval_t %s_xer_print_%s(\n" % (fileprefix, re.sub('ies', '', re.sub('item', 'list', re.sub('-', '_', key).lower())))) + else: + f.write("asn_enc_rval_t %s_xer_print_%s(\n" % (fileprefix, re.sub('ies', '', re.sub('-', '_', key).lower()))) + #f.write(" FILE *file,\n") + f.write(" asn_app_consume_bytes_f *cb,\n") + f.write(" void *app_key,\n") + if key in ieofielist.values(): + iesStructName = lowerFirstCamelWord(re.sub('Item', 'List', re.sub('-', '_', key))) + f.write(" %sIEs_t *%s) {\n\n" % (re.sub('IEs', '', re.sub('Item', 'List', re.sub('-', '_', key))), iesStructName)) + f.write(" int i;\n") + f.write(" asn_enc_rval_t er;\n") + else: + f.write(" %s_message *message_p)\n{\n" % (fileprefix)) + f.write(" %s_t *%s;\n" % (re.sub('-', '_', key), iesStructName)) + f.write(" asn_enc_rval_t er;\n") + #f.write(" void *app_key = (void *)file;\n") + #f.write(" asn_app_consume_bytes_f *cb = %s_xer__print2fp;\n\n" % (fileprefix.lower())) + + f.write(" %s = &message_p->msg.%s;\n\n" % (iesStructName, iesStructName)) + + if key in ieofielist.values(): + # Increase indentation level + f.write(" for (i = 0; i < %s->%s.count; i++) {\n" % (iesStructName, re.sub('IEs', '', lowerFirstCamelWord(re.sub('-', '_', key))))) + #f.write(" xer_fprint(file, &asn_DEF_%s, %s->%s.array[i]);\n" % (ietypeunderscore, iesStructName, re.sub('IEs', '', lowerFirstCamelWord(re.sub('-', '_', key))))) + f.write(" er = xer_encode(&asn_DEF_%s, %s->%s.array[i], XER_F_BASIC, cb, app_key);\n" % (ietypeunderscore, iesStructName, re.sub('IEs', '', lowerFirstCamelWord(re.sub('-', '_', key))))) + f.write(" }\n") + else: + f.write(" cb(\"<%s-PDU>\\n\", %d, app_key);\n" % (key, len("<%s-PDU>\n" % (key)))) + f.write(" xer_encode_local(&asn_DEF_%s_Criticality, &message_p->criticality, cb, app_key, 1);\n" % fileprefix_first_upper) + f.write(" xer_encode_local(&asn_DEF_%s_ProcedureCode, &message_p->procedureCode, cb, app_key, 1);\n" % fileprefix_first_upper) + + f.write(" cb(\" <%s>\\n\", %d, app_key);\n" % (key, len(" <%s>\n" % (key)))) + + for ie in iesDefs[key]["ies"]: + iename = re.sub('-', '_', re.sub('id-', '', ie[0])) + ienameunderscore = re.sub('-', '_', iename) + ienamefirstwordlower = lowerFirstCamelWord(iename) + ietypeunderscore = re.sub('-', '_', ie[2]) + ieupperunderscore = re.sub('-', '_', re.sub('id-', '', ie[0])).upper() + + if ie[3] != "mandatory": + if ie[3] == "optional": + f.write(" /* Optional field */\n") + elif ie[3] == "conditional": + f.write(" /* Conditional field */\n") + f.write(" if (%s->presenceMask & %s_%s_PRESENT)\n " % (iesStructName, keyupperunderscore, ieupperunderscore)) + + # Is it an encapsulated IE ? + if ie[2] in ieofielist.keys(): + f.write(" %s_xer_print_%s(cb, app_key, &%s->%s);\n" % (fileprefix, re.sub('ies', '', re.sub('-', '_', ie[2]).lower()), iesStructName, ienamefirstwordlower)) + else: + f.write(" xer_encode_local(&asn_DEF_%s, &%s->%s, cb, app_key, 2);\n" % (ietypeunderscore, iesStructName, ienamefirstwordlower)) + f.write(" cb(\" \\n\", %d, app_key);\n" % (key, len(" \n" % (key)))) + f.write(" cb(\"\\n\", %d, app_key);\n" % (key, len("\n" % (key)))) + + f.write(" _ASN_ENCODED_OK(er);\n") + #if key not in ieofielist.values(): + #f.write("cb_failed:\n") + #f.write(" return er;\n") + f.write("}\n\n") diff --git a/cmake_targets/tools/build_epc b/cmake_targets/tools/build_epc index 0f2cc9715f..0caeaf2617 100755 --- a/cmake_targets/tools/build_epc +++ b/cmake_targets/tools/build_epc @@ -233,12 +233,12 @@ function main() ############################################################################## # Compile userspace executable ############################################################################## - rm -f $OPENAIR_DIR/targets/bin/mme_gw cd $OPENAIR_DIR/cmake_targets/epc_build_oai if [ $clean -ne 0 ]; then if [[ $verbose -eq 1 ]]; then - echo "Cleaning EPC" + echo "Cleaning EPC: certificates, generated configuration files, obj files, mme_gw executable, GTP kernel module" fi + rm -f $OPENAIR_DIR/targets/bin/mme_gw rm -Rf build 2>&1 $SUDO rm -Rf $OPENAIR_TARGETS/CMAKE/EPC/MME_GW/build 2>&1 $SUDO rm -f /usr/local/etc/freeDiameter/mme* 2>&1 @@ -246,8 +246,8 @@ function main() $SUDO rm -f /usr/etc/freeDiameter/mme* 2>&1 $SUDO rm -f /usr/etc/freeDiameter/epc* 2>&1 $SUDO rm -f $OPENAIR_DIR/targets/bin/xt_GTPU*.ko 2>&1 - (cd $OPENAIRCN_DIR/GTPV1-U/GTPUAH && $SUDO make clean) - $SUDO rm -f $OPENAIRCN_DIR/GTPV1-U/GTPUAH/Bin/* 2>&1 + (cd $OPENAIRCN_DIR/GTPV1-U/GTPU_SP && $SUDO make clean) + $SUDO rm -f $OPENAIRCN_DIR/GTPV1-U/GTPU_SP/Bin/* 2>&1 $SUDO rm -f /lib/xtables/libxt_GTPU*.so 2>&1 mkdir -m 777 -p -v build fi @@ -273,20 +273,17 @@ function main() epc_build_oai mme_gw \ mme_gw $dbin/mme_gw.$REL # Only integrated mme+sgw+pgw is operational today - # compilations \ - # epc_build_oai oai_sgw \ - # oai_sgw $dbin/oai_sgw.$REL compilations \ - epc_build_oai xt_GTPUAH_lib \ - libxt_GTPUAH_lib.so $dbin + epc_build_oai xt_GTPUSP_lib \ + libxt_GTPUSP_lib.so $dbin compilations \ - epc_build_oai xt_GTPUAH \ - CMakeFiles/xt_GTPUAH/xt_GTPUAH.ko $dbin + epc_build_oai xt_GTPUSP \ + CMakeFiles/xt_GTPUSP/xt_GTPUSP.ko $dbin echo_info "Copying iptables libraries into system directory: /lib/xtables" - if [ -f $dbin/libxt_GTPUAH_lib.so ] ; then - $SUDO rm -f /lib/xtables/libxt_GTPUAH.so - $SUDO ln -s $dbin/libxt_GTPUAH_lib.so /lib/xtables/libxt_GTPUAH.so + if [ -f $dbin/libxt_GTPUSP_lib.so ] ; then + $SUDO rm -f /lib/xtables/libxt_GTPUSP.so + $SUDO ln -s $dbin/libxt_GTPUSP_lib.so /lib/xtables/libxt_GTPUSP.so else echo_fatal "not installed GTP-U iptables: binaries not found" fi @@ -298,9 +295,6 @@ function main() else echo_fatal "not installed EPC config files: not found" fi - - - } diff --git a/cmake_targets/tools/build_helper b/cmake_targets/tools/build_helper index 0c9f813236..100effd872 100755 --- a/cmake_targets/tools/build_helper +++ b/cmake_targets/tools/build_helper @@ -31,7 +31,7 @@ # author Laurent Thomas # ####################################### -SUDO=sudo +SUDO='sudo -E' ############################### ## echo and family @@ -40,7 +40,7 @@ black='\E[30m' red='\E[31m' green='\E[32m' yellow='\E[33m' -blue='\E[34m' +blue='\E[1;34m' magenta='\E[35m' cyan='\E[36m' white='\E[37m' @@ -112,10 +112,11 @@ compilations() { cd $OPENAIR_DIR/cmake_targets/$1/build { rm -f $3 - make -j4 $2 + make -j`nproc` $2 VERBOSE=$VERBOSE_COMPILE } > $dlog/$2.$REL.txt 2>&1 + echo_info "Log file for compilation has been written to: $dlog/$2.$REL.txt" if [ -s $3 ] ; then - cp $3 $dbin + cp $3 $4 echo_success "$2 compiled" else echo_error "$2 compilation failed" @@ -179,7 +180,7 @@ install_nettle_from_source() { cd nettle-2.5/ ./configure --disable-openssl --enable-shared --prefix=/usr echo "Compiling nettle" - make -j4 + make -j`nproc` make check $SUDO make install rm -rf /tmp/nettle-2.5.tar.gz /tmp/nettle-2.5 @@ -194,14 +195,14 @@ install_gnutls_from_source(){ cd gnutls-3.1.23/ ./configure --prefix=/usr echo "Compiling gnutls" - make -j4 + make -j`nproc` $SUDO make install rm -rf /tmp/gnutls-3.1.23.tar.xz /tmp/gnutls-3.1.23 } install_1.1.5_freediameter_from_source() { cd /tmp - echo "Downloading 1.1.5 freeDiameter archive" + echo "Downloading 1.1.5 freeDiameter archive" rm -rf /tmp/1.1.5.tar.gz* /tmp/freeDiameter-1.1.5 wget http://www.freediameter.net/hg/freeDiameter/archive/1.1.5.tar.gz tar xzf 1.1.5.tar.gz @@ -211,7 +212,7 @@ install_1.1.5_freediameter_from_source() { cd build cmake -DCMAKE_INSTALL_PREFIX:PATH=/usr ../ echo "Compiling freeDiameter" - make -j4 + make -j`nproc` #make test $SUDO make install rm -rf /tmp/1.1.5.tar.gz /tmp/freeDiameter-1.1.5 @@ -229,12 +230,30 @@ install_freediameter_from_source() { cd build cmake -DCMAKE_INSTALL_PREFIX:PATH=/usr ../ echo "Compiling freeDiameter" - make -j4 + make -j`nproc` #make test $SUDO make install rm -rf /tmp/1.2.0.tar.gz /tmp/freeDiameter-1.2.0 } +install_latest_freediameter_from_source() { + cd /tmp + rm -rf /tmp/freeDiameter + echo "Downloading latest freeDiameter trunk (may be unstable)" + git clone https://github.com/Metaswitch/freeDiameter.git + cd freeDiameter + patch -p1 < $OPENAIR_DIR/openair-cn/S6A/freediameter/freediameter-1.2.0.patch + mkdir build + cd build + cmake -DCMAKE_INSTALL_PREFIX:PATH=/usr ../ + echo "Compiling freeDiameter" + make -j`nproc` + #make test + $SUDO make install + rm -rf /tmp/freeDiameter +} + + check_install_usrp_uhd_driver(){ v=$(lsb_release -cs) $SUDO apt-add-repository "deb http://files.ettus.com/binaries/uhd/repo/uhd/ubuntu/$v $v main" @@ -279,17 +298,20 @@ check_install_oai_software() { $SUDO apt-get update $SUDO apt-get install -y \ - autoconf \ + autoconf \ automake \ bison \ build-essential \ cmake \ cmake-curses-gui \ doxygen \ + doxygen-gui\ + texlive-latex-base\ ethtool \ flex \ - gccxml \ - gdb \ + gccxml \ + gdb \ + git \ graphviz \ gtkwave \ guile-2.0-dev \ @@ -308,7 +330,7 @@ check_install_oai_software() { libgmp-dev \ libgtk-3-dev \ libidn2-0-dev \ - libidn11-dev \ + libidn11-dev \ libmysqlclient-dev \ liboctave-dev \ libpgm-5.1 \ @@ -350,6 +372,7 @@ install_asn1c_from_source(){ svn co https://github.com/vlm/asn1c/trunk /tmp/asn1c-r1516 -r 1516 > /tmp/log_compile_asn1c patch -p0 < $OPENAIR_DIR/openair-cn/S1AP/MESSAGES/ASN1/asn1cpatch.p0 >> /tmp/log_compile_asn1c patch -p0 < $OPENAIR_DIR/openair-cn/S1AP/MESSAGES/ASN1/asn1cpatch_2.p0 >> /tmp/log_compile_asn1c + patch -p0 < $OPENAIR_DIR/openair2/RRC/LITE/MESSAGES/asn1c/asn1cpatch.p0 >> /tmp/log_compile_asn1c ./configure make > /tmp/log_compile_asn1c 2>&1 $SUDO make install diff --git a/cmake_targets/tools/check_mme_s6a_certificate b/cmake_targets/tools/check_mme_s6a_certificate index 62d0c53468..aac91f3abe 100755 --- a/cmake_targets/tools/check_mme_s6a_certificate +++ b/cmake_targets/tools/check_mme_s6a_certificate @@ -86,7 +86,11 @@ function main() { else echo_error "Bad mme fqdn found in cert file: $full_hostname fqdn is $fqdn" fi + else + echo_error "File $freediameter_path/etc/freeDiameter/mme.cert.pem not found" fi + else + echo_error "Directory $freediameter_path/etc/freeDiameter not found" fi echo_error "MME S6A: Did not find valid certificate in $freediameter_path/etc/freeDiameter" echo_warning "MME S6A: generating new certificate in $freediameter_path/etc/freeDiameter..." diff --git a/cmake_targets/tools/epc.conf.in b/cmake_targets/tools/epc.conf.in index 1bd7795492..7af3cca4cc 100755 --- a/cmake_targets/tools/epc.conf.in +++ b/cmake_targets/tools/epc.conf.in @@ -1,3 +1,36 @@ +# Internet +# | +# PGW_IPV4_ADDRESS_FOR_SGI | +# +-----------+-------+------------+---------------+--------------------------+ +# |host y | | PGW_INTERFACE_NAME_FOR_SGI | | +# +-----------+ +------------+---------------+ | +# | | | +# | +----+----+ (HSS may run on this host | +# | | mme_gw | or on another one) | +# | +----+----+ | +# | | | +# | +-----------------+--------------------+ | +# | | SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP | | +# | | MME_INTERFACE_NAME_FOR_S1_MME | | +# +----------------------------+---+--+---------------------------------------+ +# MME_IPV4_ADDRESS_FOR_S1_MME | (S1-C and S1-U addresses/interfaces may be the same) +# SGW_IPV4_ADDRESS_FOR_S1U_S12_S4_UP +# | +# | +# a.b.c.d | +# +---------------+------------+---+--+---------------------------------------+ +# |eNBx | | ethx | | +# +---------------+ +---+--+ | +# | | | +# | +------+---------+ | +# | | lte-softmodem | | +# | | or | | +# | | oaisim (1)eNB (x UEs) | +# | +-------+--------+ | +# +---------------------------------+-----------------------------------------+ +# | +# O (RF antenna) + MME : { @@ -34,8 +67,8 @@ MME : SCTP : { # Number of streams to use in input/output - SCTP_INSTREAMS = 32; - SCTP_OUTSTREAMS = 32; + SCTP_INSTREAMS = 8; + SCTP_OUTSTREAMS = 8; }; # ------- S1AP definitions @@ -61,7 +94,7 @@ MME : # TA (mcc.mnc:tracking area code) DEFAULT = 208.34:0 # max values = 999.999:65535 # maximum of 32 values, comma separated - PLMN = ( + TAI_LIST = ( {MCC="208" ; MNC="95"; TAC = "1"; } # YOUR PLMN CONFIG HERE ); }; @@ -123,9 +156,8 @@ P-GW = ); }; - #WARNING DNS ARE HARDCODED IN openair-cn/NAS/EURECOM-NAS/src/esm/msg/ActivateDefaultEpsBearerContextRequest.c:305 - DEFAULT_DNS_1_IPV4_ADDRESS = "192.168.12.100"; # YOUR NETWORK CONFIG HERE - DEFAULT_DNS_2_IPV4_ADDRESS = "192.168.106.12"; # YOUR NETWORK CONFIG HERE + DEFAULT_DNS_IPV4_ADDRESS = "192.168.106.12"; # YOUR NETWORK CONFIG HERE + DEFAULT_DNS_SEC_IPV4_ADDRESS = "192.168.12.100"; # YOUR NETWORK CONFIG HERE }; diff --git a/cmake_targets/tools/epc.local.enb.conf.in b/cmake_targets/tools/epc.local.enb.conf.in index 7d1a5dd476..353a294f64 100755 --- a/cmake_targets/tools/epc.local.enb.conf.in +++ b/cmake_targets/tools/epc.local.enb.conf.in @@ -34,8 +34,8 @@ MME : SCTP : { # Number of streams to use in input/output - SCTP_INSTREAMS = 32; - SCTP_OUTSTREAMS = 32; + SCTP_INSTREAMS = 8; + SCTP_OUTSTREAMS = 8; }; # ------- S1AP definitions @@ -61,9 +61,8 @@ MME : # TA (mcc.mnc:tracking area code) DEFAULT = 208.34:0 # max values = 999.999:65535 # maximum of 32 values, comma separated - PLMN = ( - {MCC="208" ; MNC="95"; TAC = "1"; }, # YOUR PLMN CONFIG HERE - {MCC="208" ; MNC="10"; TAC = "1"; } # YOUR PLMN CONFIG HERE + TAI_LIST = ( + {MCC="208" ; MNC="95"; TAC = "1"; } # YOUR PLMN CONFIG HERE ); }; @@ -124,9 +123,8 @@ P-GW = ); }; - #WARNING DNS ARE HARDCODED IN openair-cn/NAS/EURECOM-NAS/src/esm/msg/ActivateDefaultEpsBearerContextRequest.c:305 - DEFAULT_DNS_1_IPV4_ADDRESS = "192.168.12.100"; # YOUR NETWORK CONFIG HERE - DEFAULT_DNS_2_IPV4_ADDRESS = "192.168.106.12"; # YOUR NETWORK CONFIG HERE + DEFAULT_DNS_IPV4_ADDRESS = "192.168.106.12"; # YOUR NETWORK CONFIG HERE + DEFAULT_DNS_SEC_IPV4_ADDRESS = "192.168.12.100"; # YOUR NETWORK CONFIG HERE }; diff --git a/cmake_targets/tools/generate_asn1 b/cmake_targets/tools/generate_asn1 index 9705838489..79becbf288 100755 --- a/cmake_targets/tools/generate_asn1 +++ b/cmake_targets/tools/generate_asn1 @@ -6,7 +6,110 @@ mkdir -p $1 cd $1 shift -asn1c -gen-PER -fcompound-names $* 2>&1 | grep -v -- '->' | grep -v '^Compiled' |grep -v sample +#if this script is called with only 2 arguments (so 1 here after the shift), it's for RRC +#(there may be a better way...) +if [ $# -eq 1 ]; then + +#asn1c does not work well with extension groups, we need the following fix: +# replace [[ by ' SEQUENCE {' +# and ]] by '} OPTIONAL' +# is ext with N starting from 1 and incremented at each new [[ ]] just +#following another [[ ]] +# +#this is what the following C program does + +echo generate asnfix.c + +cat << EOF > asnfix.c +/* transforms: + * '[[' to 'name SEQUENCE {' + * ']]' to '} OPTIONAL' + * name is ext1, ext2, ..., for each [[ at the same level + * levels are delimited by { and } + * -- to end of line is a comment and unprocessed + * nested [[ ]] not handled + * { and } must be balanced + * [[ and ]] can be whatever, every combination is valid + */ +#include +#include + +void level(int toplevel) +{ + int c; + int next_name = 1; + + while (1) { + c = getchar(); +next: + if (c == EOF) { if (toplevel) break; abort(); } + + if (c == '-') { + c = getchar(); + if (c != '-') { putchar('-'); goto next; } + putchar(c); putchar(c); + while (1) { + c = getchar(); if (c == EOF) abort(); + putchar(c); + if (c == '\n') break; + } + continue; + } + + if (c == '[') { + c = getchar(); + if (c != '[') { putchar('['); goto next; } + printf("ext%d SEQUENCE {", next_name); + next_name++; + continue; + } + + if (c == ']') { + c = getchar(); + if (c != ']') { putchar(']'); goto next; } + printf("} OPTIONAL"); + continue; + } + + putchar(c); + if (c == '}') { if (toplevel) abort(); break; } + if (c == '{') level(0); + } +} + +int main(void) +{ + level(1); + fflush(stdout); + return 0; +} +EOF + +echo compile asnfix.c + +gcc -Wall -o asnfix asnfix.c + +echo run asnfix on $1 + +./asnfix < $1 > fixed_grammar.asn + +rm -f asnfix asnfix.c + +echo done with asnfix + +echo running asn1c + +asn1c -gen-PER -fcompound-names fixed_grammar.asn 2>&1 | grep -v -- '->' | grep -v '^Compiled' |grep -v sample + +rm -f fixed_grammar.asn + +echo asn1c done + +else + +asn1c -gen-PER -fcompound-names $* 2>&1 | grep -v -- '->' | grep -v '^Compiled' |grep -v sample + +fi awk ' BEGIN { diff --git a/cmake_targets/tools/init_exmimo2 b/cmake_targets/tools/init_exmimo2 index 421d458cbb..5e4d13bec3 100755 --- a/cmake_targets/tools/init_exmimo2 +++ b/cmake_targets/tools/init_exmimo2 @@ -1,5 +1,39 @@ #!/bin/bash +################################################################################ +# OpenAirInterface +# Copyright(c) 1999 - 2015 Eurecom +# +# OpenAirInterface is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# +# OpenAirInterface is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with OpenAirInterface.The full GNU General Public License is +# included in this distribution in the file called "COPYING". If not, +# see . +# +# Contact Information +# OpenAirInterface Admin: openair_admin@eurecom.fr +# OpenAirInterface Tech : openair_tech@eurecom.fr +# OpenAirInterface Dev : openair4g-devel@eurecom.fr +# +# Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE +# +################################################################################ +# file init_nas_nos1 +# brief loads the nasmesh module and sets up the radio bearers (used to provide ip interface without S1 interface) +# author Florian Kaltenberger +# +####################################### + load_module() { mod_name=${1##*/} diff --git a/cmake_targets/tools/init_nas_nos1 b/cmake_targets/tools/init_nas_nos1 new file mode 100644 index 0000000000..fed8eacc10 --- /dev/null +++ b/cmake_targets/tools/init_nas_nos1 @@ -0,0 +1,61 @@ +#!/bin/bash + +################################################################################ +# OpenAirInterface +# Copyright(c) 1999 - 2015 Eurecom +# +# OpenAirInterface is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# +# OpenAirInterface is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with OpenAirInterface.The full GNU General Public License is +# included in this distribution in the file called "COPYING". If not, +# see . +# +# Contact Information +# OpenAirInterface Admin: openair_admin@eurecom.fr +# OpenAirInterface Tech : openair_tech@eurecom.fr +# OpenAirInterface Dev : openair4g-devel@eurecom.fr +# +# Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE +# +################################################################################ +# file init_nas_nos1 +# brief loads the nasmesh module and sets up the radio bearers (used to provide ip interface without S1 interface) +# author Florian Kaltenberger +# +####################################### + +load_module() { + mod_name=${1##*/} + mod_name=${mod_name%.*} + if awk "/$mod_name/ {found=1 ;exit} END {if (found!=1) exit 1}" /proc/modules + then + echo "module $mod_name already loaded: I remove it first" + sudo rmmod $mod_name + fi + echo loading $mod_name + sudo insmod $1 +} + +load_module $OPENAIR_DIR/targets/bin/nasmesh.ko + +if [ "$1" = "eNB" ]; then + echo "bring up oai0 interface for enb" + sudo ifconfig oai0 10.0.1.1 netmask 255.255.255.0 broadcast 10.0.1.255 + $OPENAIR_DIR/targets/bin/rb_tool -a -c0 -i0 -z0 -s 10.0.1.1 -t 10.0.1.9 -r 1 +else + if [ "$1" = "UE" ]; then + echo "bring up oai0 interface for UE" + sudo ifconfig oai0 10.0.1.9 netmask 255.255.255.0 broadcast 10.0.1.255 + $OPENAIR_DIR/targets/bin/rb_tool -a -c0 -i0 -z0 -s 10.0.1.9 -t 10.0.1.1 -r 1 + fi +fi diff --git a/cmake_targets/tools/mem_usage b/cmake_targets/tools/mem_usage new file mode 100755 index 0000000000..4290372f02 --- /dev/null +++ b/cmake_targets/tools/mem_usage @@ -0,0 +1,27 @@ +#!/usr/bin/env bash + +pid=$1 +sleep_sec=0.5 + +if [ "$2" != "" ] ; then +sleep_sec=$2 +fi +#declare -r cnt=$sleep_sec +OUTPUT_FILE="/tmp/mem_usage_${pid}_${sleep_sec}.csv" +echo "RSS(KB);PSS(KB);SHARED_CLEAN(KB);SHARED_DIRTY(KB);PRIVATE)KB)" >> $OUTPUT_FILE +echo "Mem usage for PID $pid with observation period of ${sleep_sec}" + +while ps $pid >/dev/null +do + if [ -f /proc/$pid/smaps ]; then + rss=$(awk '/^Rss/ {i = i + $2} END {print i}' /proc/$pid/smaps) + pss=$(awk '/^Pss/ {i = i + $2 + 0.5} END {print i}' /proc/$pid/smaps) + sc=$(awk '/^Shared_Clean/ {i = i + $2} END {print i}' /proc/$pid/smaps) + sd=$(awk '/^Shared_Dirty/ {i = i + $2} END {print i}' /proc/$pid/smaps) + pc=$(awk '/^Private_Clean/ {i = i + $2} END {print i}' /proc/$pid/smaps) + pd=$(awk '/^Private_Dirty/ {i = i + $2} END {print i}' /proc/$pid/smaps) + echo "$cnt;$rss;$pss;$sc;$pc;$pd;" >> $OUTPUT_FILE + fi + + sleep $sleep_sec +done diff --git a/cmake_targets/tools/run_enb_s1_usrp b/cmake_targets/tools/run_enb_s1_usrp index 606bd82d79..a4766ed658 100755 --- a/cmake_targets/tools/run_enb_s1_usrp +++ b/cmake_targets/tools/run_enb_s1_usrp @@ -39,6 +39,8 @@ ################################ THIS_SCRIPT_PATH=$(dirname $(readlink -f $0)) source $THIS_SCRIPT_PATH/build_helper +declare -i g_run_msc_gen=0 +declare g_msc_dir="/tmp" function help() @@ -57,6 +59,7 @@ function help() echo_error " -K, --itti-dump-file filename ITTI dump file containing all ITTI events occuring during EPC runtime.(can omit file name if last argument)" echo_error " -M, --target-dl-mcs mcs Downlink target MCS." echo_error " -m, --mscgen directory Generate mscgen output files in a directory" + echo_error " -s, --show-stdout Do not redirect stdout and stderr to file /tmp/lte_softmodem.stdout.txt." echo_error " -S, --enable-missed-slot Continue execution in case of missed slot." echo_error " -T, --target-ul-mcs mcs Uplink target MCS." echo_error " -V, --vcd Dump timings of processing in a GTKWave compliant file format." @@ -68,13 +71,40 @@ function help() } +function do_msc_gen() +{ + cd $g_msc_dir + last_created_file=`ls -t mscgen* | head -1 | tr -d ':'` + $OPENAIR_DIR/targets/SCRIPTS/msc_gen.py + sync + last_created_file2=`ls -t mscgen* | head -1 | tr -d ':'` + + if [ x"$last_created_file" != x"$last_created_file2" ]; then + if [ -f ./$last_created_file2/oai_mscgen_page_0.png ]; then + command -v eog 2>/dev/null && eog ./$last_created_file2/oai_mscgen_page_0.png + fi + fi + +} + + +function control_c() +# run if user hits control-c +{ + echo_warning "\nExiting by ctrl+c\n" + if [ $g_run_msc_gen -eq 1 ]; then + do_msc_gen + fi + exit $? +} + function main() { local -i run_gdb=0 - local -i run_mscgen=0 + local -i show_stdout=0 local exe_arguments="" - local MSC_DIR="/tmp" + local itti_dump_file="" until [ -z "$1" ] do @@ -99,7 +129,7 @@ function main() ;; -g | --gdb) run_gdb=1 - echo "setting GDB flag to: $GDB" + echo "setting GDB flag to: $run_gdb" shift; ;; -h | --help) @@ -108,23 +138,23 @@ function main() exit 0 ;; -K | --itti-dump-file) - ITTI_DUMP_FILE=$2 + itti_dump_file=$2 # can omit file name if last arg on the line - if [ "x$ITTI_DUMP_FILE" = "x" ]; then - ITTI_DUMP_FILE="/tmp/enb_s1_usrp_itti.log" + if [ "x$itti_dump_file" = "x" ]; then + itti_dump_file="/tmp/enb_s1_usrp_itti.log" shift 1; else shift 2; fi - echo "setting ITTI dump file to: $ITTI_DUMP_FILE" - exe_arguments="$exe_arguments -K $ITTI_DUMP_FILE" + echo "setting ITTI dump file to: $itti_dump_file" + exe_arguments="$exe_arguments -K $itti_dump_file" ;; -m | --mscgen) - MSC_DIR=$2 + g_msc_dir=$2 # can omit file name if last arg on the line - if [ -d "$MSC_DIR" ]; then - echo "setting mscgen log files to dir: $MSC_DIR" - run_mscgen=1 + if [ -d "$g_msc_dir" ]; then + echo "setting mscgen log files to dir: $g_msc_dir" + g_run_msc_gen=1 shift 2; else echo_error "Mscgen log dir does not exist" @@ -141,6 +171,11 @@ function main() exe_arguments="$exe_arguments -V /tmp/oai_gtk_wave.vcd" shift ; ;; + -s | --show-stdout) + echo "setting show stdout" + show_stdout=1 + shift ; + ;; -S | --enable-missed-slot) echo "setting continue even if missed slot" exe_arguments="$exe_arguments -S" @@ -151,14 +186,14 @@ function main() exe_arguments="$exe_arguments -t $2" shift 2; ;; - -W | ----wireshark-l2) + -W | --wireshark-l2) echo "setting l2 pcap dump output" exe_arguments="$exe_arguments -W" shift ; ;; -x | --xforms) exe_arguments="$exe_arguments -d" - echo "setting xforms to: $XFORMS" + echo "setting xforms" shift; ;; *) @@ -174,37 +209,38 @@ function main() cecho "OPENAIR_DIR = $OPENAIR_DIR" $green - if [ ! -e $OPENAIR_DIR/targets/bin/lte-softmodem ]; then - echo_fatal "Cannot find $OPENAIR_DIR/targets/bin/lte-softmodem executable" + if [ ! -e $OPENAIR_DIR/targets/bin/lte-softmodem.Rel10 ]; then + echo_fatal "Cannot find $OPENAIR_DIR/targets/bin/lte-softmodem.Rel10 executable" fi if [ $run_gdb -eq 0 ]; then - exec $OPENAIR_DIR/targets/bin/lte-softmodem `echo $exe_arguments` 2>&1 > /tmp/lte_softmodem.stdout.txt + # trap keyboard interrupt (control-c) + trap control_c SIGINT + if [ $show_stdout -eq 0 ]; then + echo_warning "stdout/sderr of lte-softmodem executable redirected to /tmp/lte_softmodem.stdout.txt" + exec $OPENAIR_DIR/targets/bin/lte-softmodem.Rel10 `echo $exe_arguments` 2>&1 > /tmp/lte_softmodem.stdout.txt + else + exec $OPENAIR_DIR/targets/bin/lte-softmodem.Rel10 `echo $exe_arguments` + fi else + # trap keyboard interrupt (control-c) is done by gdb touch ~/.gdb_lte_softmodem chmod 777 ~/.gdb_lte_softmodem - echo "file $OPENAIR_DIR/targets/bin/lte-softmodem" > ~/.gdb_lte_softmodem + echo "file $OPENAIR_DIR/targets/bin/lte-softmodem.Rel10" > ~/.gdb_lte_softmodem echo "set args $exe_arguments" >> ~/.gdb_lte_softmodem echo "run" >> ~/.gdb_lte_softmodem cat ~/.gdb_lte_softmodem - gdb -n -x ~/.gdb_lte_softmodem 2>&1 > /tmp/gdb_lte_softmodem.stdout.txt + if [ $show_stdout -eq 0 ]; then + echo_warning "stdout/sderr of lte-softmodem executable redirected to /tmp/gdb_lte_softmodem.stdout.txt" + gdb -n -x ~/.gdb_lte_softmodem 2>&1 > /tmp/gdb_lte_softmodem.stdout.txt + else + gdb -n -x ~/.gdb_lte_softmodem + fi + if [ $g_run_msc_gen -eq 1 ]; then + do_msc_gen + fi fi - - if [ $run_mscgen -eq 1 ]; then - cd $MSC_DIR - last_created_file=`ls -t mscgen* | head -1 | tr -d ':'` - $OPENAIR_DIR/targets/SCRIPTS/msc_gen.py --profile E_UTRAN - sync - last_created_file2=`ls -t mscgen* | head -1 | tr -d ':'` - - if [ x"$last_created_file" != x"$last_created_file2" ]; then - if [ -f ./$last_created_file2/oai_mscgen_page_0.png ]; then - command -v eog 2>/dev/null && eog ./$last_created_file2/oai_mscgen_page_0.png - fi - fi - fi - } diff --git a/cmake_targets/tools/run_enb_ue_virt_noS1 b/cmake_targets/tools/run_enb_ue_virt_noS1 index 82f302ff2e..c1ce434fa5 100755 --- a/cmake_targets/tools/run_enb_ue_virt_noS1 +++ b/cmake_targets/tools/run_enb_ue_virt_noS1 @@ -57,9 +57,11 @@ function help() echo_error " " echo_error "Options:" echo_error "Mandatory arguments to long options are mandatory for short options too." + echo_error " -a, --abstraction enable phy abstraction mode" echo_error " -c, -C, --config-file eNB_config_file eNB config file, (see $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF)" echo_error " Default eNB config file if not set is $1" echo_error " -g, --gdb Run with GDB." + echo_error " -l, --log-level set the global log level (8:trace, 7:debug, 6:info, 4:warn, 3:error). Note that the log configuration is eNB config file is ignored for oaisim." echo_error " -h, --help Print this help." echo_error " -K, --itti-dump-file filename ITTI dump file containing all ITTI events occuring during EPC runtime.(can omit file name if last argument)" echo_error " -m, --mscgen directory Generate mscgen output files in a directory" @@ -84,17 +86,24 @@ function main() local DEFAULT_CONFIG_FILE_ENB=$OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf local CONFIG_FILE_ENB=$DEFAULT_CONFIG_FILE_ENB local MSC_DIR="/tmp" - + local abstraction_flag=0 + until [ -z "$1" ] do case "$1" in - -c | -C | --config-file) + -a | --abstraction ) + abstraction_flag=1 + echo "enabling abstraction mode" + exe_arguments="$exe_arguments -a" + shift; + ;; + -c | -C | --config-file) CONFIG_FILE_ENB=$2 # may be relative path if [ -f $(dirname $(readlink -f $0))/$CONFIG_FILE ]; then CONFIG_FILE_ENB=$(dirname $(readlink -f $0))/$CONFIG_FILE echo "setting config file to: $CONFIG_FILE" - CONFIG_FILE_ACCESS_OK=1 + config_FILE_ACCESS_OK=1 else # may be absolute path if [ -f $CONFIG_FILE_ENB ]; then @@ -110,6 +119,11 @@ function main() echo "setting GDB flag to: $GDB" shift; ;; + -l | --log-level) + echo "setting the log level to $2" + exe_arguments="$exe_arguments -l $2" + shift 2; + ;; -h | --help) help $DEFAULT_CONFIG_FILE_ENB shift; @@ -130,7 +144,6 @@ function main() -m | --mscgen) MSC_DIR=$2 - # can omit file name if last arg on the line if [ -d "$MSC_DIR" ]; then echo "setting mscgen log files to dir: $MSC_DIR" run_mscgen=1 @@ -140,16 +153,17 @@ function main() exit -1 fi ;; - +# -u | --num-ue ) + -V | --vcd) "setting gtk-wave output" exe_arguments="$exe_arguments -V /tmp/oai_gtk_wave.vcd" shift ; ;; - -W | ----wireshark-l2) + -W | --wireshark-l2) echo "setting l2 pcap dump output" exe_arguments="$exe_arguments -P wireshark" - shift 2; + shift 1; ;; *) echo "Unknown option $1" @@ -185,8 +199,11 @@ function main() # ue1 -> enb $OPENAIR_DIR/targets/bin/rb_tool -a -c0 -i1 -z0 -s 10.0.2.2 -t 10.0.2.1 -r 1 - - exe_arguments="$exe_arguments -s15 -AAWGN -b1 -u1" + if [ "$abstraction_flag" -eq "0" ] ; then + exe_arguments="$exe_arguments -s15 -AAWGN -b1 -u1" + else + exe_arguments="$exe_arguments -b1 -u1" + fi cd $OPENAIR_DIR/targets/bin @@ -194,13 +211,13 @@ function main() if [ $run_mscgen -eq 1 ]; then $SUDO rm -f /tmp/openair.msc.* fi - + if [ $run_gdb -eq 0 ]; then - exec $SUDO $OPENAIR_DIR/targets/bin/oaisim_nos1 $exe_arguments | tee /tmp/enb_ue_nos1.log.txt + exec $SUDO $OPENAIR_DIR/targets/bin/oaisim_nos1.Rel10 $exe_arguments | tee /tmp/enb_ue_nos1.log.txt else touch ~/.gdb_enb_ue_nos1 chmod 777 ~/.gdb_enb_ue_nos1 - echo "file $OPENAIR_DIR/targets/bin/oaisim_nos1" > ~/.gdb_enb_ue_nos1 + echo "file $OPENAIR_DIR/targets/bin/oaisim_nos1.Rel10" > ~/.gdb_enb_ue_nos1 echo "set args $exe_arguments" >> ~/.gdb_enb_ue_nos1 echo "run" >> ~/.gdb_enb_ue_nos1 cat ~/.gdb_enb_ue_nos1 diff --git a/cmake_targets/tools/run_enb_ue_virt_s1 b/cmake_targets/tools/run_enb_ue_virt_s1 index 6340feee66..2ce29429b1 100755 --- a/cmake_targets/tools/run_enb_ue_virt_s1 +++ b/cmake_targets/tools/run_enb_ue_virt_s1 @@ -214,12 +214,12 @@ function main() is_tun=`is_tun_interface $ENB_INTERFACE_NAME_FOR_S1_MME $ENB_INTERFACE_NAME_FOR_S1U` # if [ $is_tun = "1" ]; then -# $SUDO openvpn --mktun --dev $ENB_INTERFACE_NAME_FOR_S1U;sync -# $SUDO openvpn --mktun --dev $ENB_INTERFACE_NAME_FOR_S1_MME;sync -# $SUDO ip -4 addr add $ENB_IPV4_ADDRESS_FOR_S1U/$ENB_IPV4_NETMASK_FOR_S1U dev $ENB_INTERFACE_NAME_FOR_S1U;sync -# $SUDO ip -4 addr add $ENB_IPV4_ADDRESS_FOR_S1_MME/$ENB_IPV4_NETMASK_FOR_S1_MME dev $ENB_INTERFACE_NAME_FOR_S1_MME;sync -# $SUDO ifconfig $ENB_INTERFACE_NAME_FOR_S1U up;sync -# $SUDO ifconfig $ENB_INTERFACE_NAME_FOR_S1_MME up;sync +# openvpn --mktun --dev $ENB_INTERFACE_NAME_FOR_S1U;sync +# openvpn --mktun --dev $ENB_INTERFACE_NAME_FOR_S1_MME;sync +# ip -4 addr add $ENB_IPV4_ADDRESS_FOR_S1U/$ENB_IPV4_NETMASK_FOR_S1U dev $ENB_INTERFACE_NAME_FOR_S1U;sync +# ip -4 addr add $ENB_IPV4_ADDRESS_FOR_S1_MME/$ENB_IPV4_NETMASK_FOR_S1_MME dev $ENB_INTERFACE_NAME_FOR_S1_MME;sync +# ifconfig $ENB_INTERFACE_NAME_FOR_S1U up;sync +# ifconfig $ENB_INTERFACE_NAME_FOR_S1_MME up;sync # echo_success "Configured local eNB S1 tun interfaces" # else # echo_success "eNB S1 tun interfaces should be ethernet interfaces (no tunnels configured)" @@ -228,21 +228,21 @@ function main() ################################################## # LAUNCH eNB + UE executable ################################################## - $SUDO pkill oaisim - $SUDO rmmod ue_ip > /dev/null 2>&1 + pkill oaisim + rmmod ue_ip > /dev/null 2>&1 echo_success "Bringup UE interface..." - $SUDO insmod $OPENAIR_DIR/targets/bin/ue_ip.ko + insmod $OPENAIR_DIR/targets/bin/ue_ip.ko - $SUDO ip route flush cache + ip route flush cache # Check table 200 lte in /etc/iproute2/rt_tables fgrep lte /etc/iproute2/rt_tables > /dev/null if [ $? -ne 0 ]; then - $SUDO echo "200 lte " >> /etc/iproute2/rt_tables + bash -c echo "200 lte " >> /etc/iproute2/rt_tables fi - $SUDO ip rule add fwmark 1 table lte - $SUDO ip route add default dev oip1 table lte + ip rule add fwmark 1 table lte + ip route add default dev oip1 table lte exe_arguments="$exe_arguments -s15 -AAWGN -y1 -b1 -u1 -Q0" @@ -250,19 +250,19 @@ function main() if [ $run_mscgen -eq 1 ]; then - $SUDO rm -f /tmp/openair.msc.* + rm -f /tmp/openair.msc.* fi if [ $run_gdb -eq 0 ]; then - exec $SUDO $OPENAIR_DIR/targets/bin/oaisim $exe_arguments | tee /tmp/enb_ue_s1.log.txt + exec $OPENAIR_DIR/targets/bin/oaisim.Rel10 $exe_arguments | tee /tmp/enb_ue_s1.log.txt else touch ~/.gdb_enb_ue_s1 chmod 777 ~/.gdb_enb_ue_s1 - echo "file $OPENAIR_DIR/targets/bin/oaisim" > ~/.gdb_enb_ue_s1 + echo "file $OPENAIR_DIR/targets/bin/oaisim.Rel10" > ~/.gdb_enb_ue_s1 echo "set args $exe_arguments" >> ~/.gdb_enb_ue_s1 echo "run" >> ~/.gdb_enb_ue_s1 cat ~/.gdb_enb_ue_s1 - $SUDO gdb -n -x ~/.gdb_enb_ue_s1 + gdb -n -x ~/.gdb_enb_ue_s1 fi if [ $run_mscgen -eq 1 ]; then @@ -281,4 +281,12 @@ function main() } +sudo echo +is_sudo=$? +if [[ "$is_sudo" -ne 0 ]]; then + echo_error "This script must be run by root or a sudo'er" + echo + exit 1 +fi + main "$@" diff --git a/cmake_targets/tools/run_epc b/cmake_targets/tools/run_epc index efc791253b..08a014cde0 100755 --- a/cmake_targets/tools/run_epc +++ b/cmake_targets/tools/run_epc @@ -39,6 +39,8 @@ ################################ THIS_SCRIPT_PATH=$(dirname $(readlink -f $0)) source $THIS_SCRIPT_PATH/build_helper +declare -i g_run_msc_gen=0 +declare g_msc_dir="/tmp" set_openair_env @@ -62,17 +64,39 @@ function help() echo_error " 2 -> ASN1 XER printf on and ASN1 debug on" } +function do_msc_gen() +{ + cd $g_msc_dir + last_created_file=`ls -t mscgen* | head -1 | tr -d ':'` + $OPENAIR_DIR/targets/SCRIPTS/msc_gen.py + sync + last_created_file2=`ls -t mscgen* | head -1 | tr -d ':'` + + if [ x"$last_created_file" != x"$last_created_file2" ]; then + if [ -f ./$last_created_file2/oai_mscgen_page_0.png ]; then + command -v eog 2>/dev/null && eog ./$last_created_file2/oai_mscgen_page_0.png + fi + fi +} + +function control_c() +# run if user hits control-c +{ + echo_warning "\nExiting by ctrl+c\n" + if [ $g_run_msc_gen -eq 1 ]; then + do_msc_gen + fi + exit $? +} function main() { local -i run_gdb=0 - local -i run_mscgen=0 local exe_arguments=" " local -i epc_local=0 local -r epc_default_config_file="$OPENAIR_TARGETS/bin/epc.conf" local epc_config_file=$epc_default_config_file - local MSC_DIR="/tmp" until [ -z "$1" ] do @@ -103,12 +127,10 @@ function main() shift; ;; -m | --mscgen) - MSC_DIR=$2 - # can omit file name if last arg on the line - if [ -d "$MSC_DIR" ]; then - echo "setting mscgen log files to dir: $MSC_DIR" - run_mscgen=1 - exe_arguments="-m $exe_arguments" + g_msc_dir=$2 + if [ -d "$g_msc_dir" ]; then + echo "setting mscgen log files to dir: $g_msc_dir" + g_run_msc_gen=1 shift 2; else echo_error "Mscgen log dir does not exist" @@ -133,47 +155,45 @@ function main() cecho "OPENAIR_DIR = $OPENAIR_DIR" $green - if [ ! -e $OPENAIR_DIR/targets/bin/mme_gw ]; then - echo_fatal "Cannot find $OPENAIR_DIR/targets/bin/mme_gw executable, have a look at the output of build_epc executable" + if [ ! -e $OPENAIR_DIR/targets/bin/mme_gw.Rel10 ]; then + echo_fatal "Cannot find $OPENAIR_DIR/targets/bin/mme_gw.Rel10 executable, have a look at the output of build_epc executable" fi if [ $epc_local -eq 1 ]; then epc_config_file="$OPENAIR_DIR/targets/bin/epc.local.enb.conf" fi - if [ $run_mscgen -eq 1 ]; then + if [ $g_run_msc_gen -eq 1 ]; then rm -f /tmp/openair.msc.* fi exe_arguments="-O $epc_config_file $exe_arguments" if [ $run_gdb -eq 0 ]; then - $OPENAIR_DIR/targets/bin/mme_gw `echo $exe_arguments` 2>&1 + # trap keyboard interrupt (control-c) + trap control_c SIGINT + $OPENAIR_DIR/targets/bin/mme_gw.Rel10 `echo $exe_arguments` 2>&1 else + # trap keyboard interrupt (control-c) is done by gdb touch ~/.gdb_mme_gw chmod 777 ~/.gdb_mme_gw - echo "file $OPENAIR_DIR/targets/bin/mme_gw" > ~/.gdb_mme_gw + echo "file $OPENAIR_DIR/targets/bin/mme_gw.Rel10" > ~/.gdb_mme_gw echo "set args $exe_arguments " >> ~/.gdb_mme_gw echo "run" >> ~/.gdb_mme_gw cat ~/.gdb_mme_gw - gdb -n -x ~/.gdb_mme_gw + gdb -n -x ~/.gdb_mme_gw + if [ $g_run_msc_gen -eq 1 ]; then + do_msc_gen + fi fi - - if [ $run_mscgen -eq 1 ]; then - cd $MSC_DIR - last_created_file=`ls -t mscgen* | head -1 | tr -d ':'` - $OPENAIR_DIR/targets/SCRIPTS/msc_gen.py - sync - last_created_file2=`ls -t mscgen* | head -1 | tr -d ':'` - - if [ x"$last_created_file" != x"$last_created_file2" ]; then - if [ -f ./$last_created_file2/oai_mscgen_page_0.png ]; then - command -v eog 2>/dev/null && eog ./$last_created_file2/oai_mscgen_page_0.png - fi - fi - fi - } +sudo echo +is_sudo=$? +if [[ "$is_sudo" -ne 0 ]]; then + echo_error "This script must be run by root or a sudo'er" + echo + exit 1 +fi main "$@" diff --git a/cmake_targets/tools/test_helper b/cmake_targets/tools/test_helper index e408102364..59ab9bc840 100644 --- a/cmake_targets/tools/test_helper +++ b/cmake_targets/tools/test_helper @@ -23,11 +23,17 @@ xUnit_start() { # \pre xUnit_start() must have been called before # \param $1 classname # \param $2 testcase name +# \param $3 testcase result +# \param $4 run index xUnit_fail() { + class=$1 + test_case=$2 + result=$3 + run_index=$4 currtime=$(date +%s.%N) time=$(echo "$currtime - $XUNIT_START" | bc -l) - xml="" - XUNIT_TESTCASES_XML="$XUNIT_TESTCASES_XML $xml" + xml="" + XUNIT_TESTCASES_XML="$XUNIT_TESTCASES_XML \n$xml" XUNIT_FAILED=$((XUNIT_FAILED+1)) } @@ -36,11 +42,17 @@ xUnit_fail() { # \pre xUnit_start() must have been called before # \param $1 classname # \param $2 testcase name +# \param $3 testcase result +# \param $4 run index xUnit_success() { + class=$1 + test_case=$2 + result=$3 + run_index=$4 currtime=$(date +%s.%N) time=$(echo "$currtime - $XUNIT_START" | bc -l) - xml="" - XUNIT_TESTCASES_XML="$XUNIT_TESTCASES_XML $xml" + xml="" + XUNIT_TESTCASES_XML="$XUNIT_TESTCASES_XML \n$xml" XUNIT_SUCCESS=$((XUNIT_SUCCESS+1)) } @@ -48,17 +60,18 @@ xUnit_success() { # This functions writes out the test report. # \param $1 filename xUnit_write() { + filename=$1 tests=$((XUNIT_FAILED+XUNIT_SUCCESS)) timestamp=$(date --iso-8601=seconds) time=$(echo "$currtime - $XUNIT_TESTSUITE_START" | bc -l) xml_header="" - echo $xml_header > $1 - echo $XUNIT_TESTCASES_XML >> $1 - echo "" >> $1 + echo $xml_header > $filename + echo -e $XUNIT_TESTCASES_XML >> $filename + echo "" >> $filename XUNIT_TESTSUITE_START=0 XUNIT_START=0 XUNIT_TOTAL=0 XUNIT_FAILED=0 XUNIT_SUCCESS=0 XUNIT_TESTCASES_XML="" -} \ No newline at end of file +} diff --git a/common/utils/itti/intertask_interface.c b/common/utils/itti/intertask_interface.c index 3207e82463..c61dd07636 100644 --- a/common/utils/itti/intertask_interface.c +++ b/common/utils/itti/intertask_interface.c @@ -457,7 +457,9 @@ int itti_send_msg_to_task(task_id_t destination_task_id, instance_t instance, Me new->message_priority = priority; /* Enqueue message in destination task queue */ - lfds611_queue_enqueue(itti_desc.tasks[destination_task_id].message_queue, new); + if (lfds611_queue_enqueue(itti_desc.tasks[destination_task_id].message_queue, new) == 0) { + AssertFatal(0, "Error: lfds611_queue_enqueue returns 0, queue is full, exiting\n"); + } #if defined(OAI_EMU) || defined(RTAI) VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_ITTI_ENQUEUE_MESSAGE, VCD_FUNCTION_OUT); @@ -880,7 +882,7 @@ int itti_init(task_id_t task_max, thread_id_t thread_max, MessagesIds messages_i ret = lfds611_queue_new(&itti_desc.tasks[task_id].message_queue, itti_desc.tasks_info[task_id].queue_size); - if (ret < 0) { + if (0 == ret) { AssertFatal (0, "lfds611_queue_new failed for task %s!\n", itti_get_task_name(task_id)); } } diff --git a/common/utils/itti/intertask_interface_types.h b/common/utils/itti/intertask_interface_types.h index 3361911a11..3e0203df6d 100644 --- a/common/utils/itti/intertask_interface_types.h +++ b/common/utils/itti/intertask_interface_types.h @@ -37,6 +37,7 @@ #define INTERTASK_INTERFACE_TYPES_H_ #include "itti_types.h" +#include "platform_types.h" /* Defines to handle bit fields on unsigned long values */ #define UL_BIT_MASK(lENGTH) ((1UL << (lENGTH)) - 1UL) diff --git a/common/utils/itti/signals.c b/common/utils/itti/signals.c index c19427293f..e1950b4665 100644 --- a/common/utils/itti/signals.c +++ b/common/utils/itti/signals.c @@ -112,7 +112,7 @@ int signal_handle(int *end) return ret; } - printf("Received signal %d\n", info.si_signo); + //printf("Received signal %d\n", info.si_signo); /* Real-time signals are non constant and are therefore not suitable for * use in switch. diff --git a/common/utils/itti/timer.c b/common/utils/itti/timer.c index ec63c9fe9d..25f70f04d7 100644 --- a/common/utils/itti/timer.c +++ b/common/utils/itti/timer.c @@ -93,7 +93,8 @@ int timer_handle_signal(siginfo_t *info) /* Get back pointer to timer list element */ timer_p = (struct timer_elm_s *)info->si_ptr; - TMR_DEBUG("Timer with id 0x%lx has expired\n", (long)timer_p->timer); + // LG: To many traces for msc timer: + // TMR_DEBUG("Timer with id 0x%lx has expired\n", (long)timer_p->timer); task_id = timer_p->task_id; instance = timer_p->instance; diff --git a/common/utils/itti_analyzer/INSTALL b/common/utils/itti_analyzer/INSTALL index a1e89e18ad..2099840756 100644 --- a/common/utils/itti_analyzer/INSTALL +++ b/common/utils/itti_analyzer/INSTALL @@ -1,7 +1,7 @@ Installation Instructions ************************* -Copyright (C) 1994-1996, 1999-2002, 2004-2011 Free Software Foundation, +Copyright (C) 1994-1996, 1999-2002, 2004-2013 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, @@ -12,8 +12,8 @@ without warranty of any kind. Basic Installation ================== - Briefly, the shell commands `./configure; make; make install' should -configure, build, and install this package. The following + Briefly, the shell command `./configure && make && make install' +should configure, build, and install this package. The following more-detailed instructions are generic; see the `README' file for instructions specific to this package. Some packages provide this `INSTALL' file but do not implement all of the features documented @@ -309,9 +309,10 @@ causes the specified `gcc' to be used as the C compiler (unless it is overridden in the site shell script). Unfortunately, this technique does not work for `CONFIG_SHELL' due to -an Autoconf bug. Until the bug is fixed you can use this workaround: +an Autoconf limitation. Until the limitation is lifted, you can use +this workaround: - CONFIG_SHELL=/bin/bash /bin/bash ./configure CONFIG_SHELL=/bin/bash + CONFIG_SHELL=/bin/bash ./configure CONFIG_SHELL=/bin/bash `configure' Invocation ====================== @@ -367,4 +368,3 @@ operates. `configure' also accepts some other, not widely useful, options. Run `configure --help' for more details. - diff --git a/common/utils/itti_analyzer/filters_mme.xml b/common/utils/itti_analyzer/filters_mme.xml index 5a0ee89e95..7838982613 100644 --- a/common/utils/itti_analyzer/filters_mme.xml +++ b/common/utils/itti_analyzer/filters_mme.xml @@ -1,95 +1,111 @@ - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + - - + + + + + + + + + + + + - - - - - - - - - - - - - - - + + + + + + + + + + - - - + + + + + + + + + + + + + + + + - - - - + + + + + + + + + + + + + + + + - - - - + + + + + + + + - + - @@ -101,9 +117,8 @@ - + - diff --git a/common/utils/msc/msc.c b/common/utils/msc/msc.c index dcb620381f..9f7ed5ac3c 100644 --- a/common/utils/msc/msc.c +++ b/common/utils/msc/msc.c @@ -27,7 +27,7 @@ *******************************************************************************/ /*! \file msc.c - * \brief Message chart generator logging utility (generated files to processed by a scrip to produce a mscgen input file for generating a sequence diagram document) + * \brief Message chart generator logging utility (generated files to processed by a script to produce a mscgen input file for generating a sequence diagram document) * \author Lionel GAUTHIER * \date 2015 * \email: lionel.gauthier@eurecom.fr @@ -38,296 +38,358 @@ #include #include #include + +#include "liblfds611.h" +#include "intertask_interface.h" +#include "timer.h" + #include "msc.h" +#include "assertions.h" + //------------------------------- +#define MSC_MAX_QUEUE_ELEMENTS 1024 #define MSC_MAX_PROTO_NAME_LENGTH 16 +#define MSC_MAX_MESSAGE_LENGTH 512 + //------------------------------- -FILE* msc_fd[MAX_MSC_PROTOS]; // may need to split in more files to avoid overwrites (want to avoid mutexes) -char msc_proto2str[MAX_MSC_PROTOS][MSC_MAX_PROTO_NAME_LENGTH]; -uint64_t msc_event_counter = 0; +FILE* g_msc_fd; +char g_msc_proto2str[MAX_MSC_PROTOS][MSC_MAX_PROTO_NAME_LENGTH]; + + +typedef unsigned long msc_message_number_t; +typedef struct msc_queue_item_s { + char *message_str; + uint32_t message_str_size; + uint8_t *message_bin; + uint32_t message_bin_size; +} msc_queue_item_t; + +msc_message_number_t g_message_number = 0; +struct lfds611_queue_state *g_msc_message_queue_p = NULL; +struct lfds611_stack_state *g_msc_memory_stack_p = NULL; //------------------------------------------------------------------------------ -int msc_init(msc_env_t envP) +void *msc_task(void *args_p) //------------------------------------------------------------------------------ { - int i; - int rv; + MessageDef *received_message_p = NULL; + const char *msg_name = NULL; + instance_t instance = 0; + long timer_id; + itti_mark_task_ready(TASK_MSC); + + msc_start_use(); + + + timer_setup(0, // seconds + 50000, // usec + TASK_MSC, + INSTANCE_DEFAULT, + TIMER_PERIODIC, + NULL, + &timer_id); + + while(1) { + itti_receive_msg(TASK_MSC, &received_message_p); + + if (received_message_p != NULL) { + msg_name = ITTI_MSG_NAME (received_message_p); + instance = ITTI_MSG_INSTANCE (received_message_p); + + switch (ITTI_MSG_ID(received_message_p)) { + + case TIMER_HAS_EXPIRED: { + msc_flush_messages(); + } + break; + + case TERMINATE_MESSAGE: { + timer_remove(timer_id); + msc_end(); + itti_exit_task(); + } + break; + + case MESSAGE_TEST: { + } + break; + + default: { + } + break; + } + } + } + fprintf(stderr, "Task MSC exiting\n"); + return NULL; +} + +//------------------------------------------------------------------------------ +int msc_init(const msc_env_t envP, const int max_threadsP) +//------------------------------------------------------------------------------ +{ + int i; + int rv; + void *pointer_p; + char msc_filename[256]; fprintf(stderr, "Initializing MSC logs\n"); + + rv = snprintf(msc_filename, 256, "/tmp/openair.msc.%u.log", envP); // TODO NAME + if ((0 >= rv) || (256 < rv)){ + fprintf(stderr, "Error in MSC log file name"); + } + g_msc_fd = fopen(msc_filename,"w"); + AssertFatal(g_msc_fd != NULL, "Could not open MSC log file %s : %s", msc_filename, strerror(errno)); + + rv = lfds611_stack_new(&g_msc_memory_stack_p, (lfds611_atom_t)max_threadsP + 2); + if (0 >= rv) { + AssertFatal (0, "lfds611_stack_new failed!\n"); + } + + rv = lfds611_queue_new(&g_msc_message_queue_p, (lfds611_atom_t)MSC_MAX_QUEUE_ELEMENTS); + AssertFatal (rv, "lfds611_queue_new failed!\n"); + AssertFatal (g_msc_message_queue_p != NULL, "g_msc_message_queue_p is NULL!\n"); + msc_start_use(); + + for (i=0; i < max_threadsP * 30; i++) { + pointer_p = malloc(MSC_MAX_MESSAGE_LENGTH); + AssertFatal (pointer_p, "malloc failed!\n"); + rv = lfds611_stack_guaranteed_push( g_msc_memory_stack_p, pointer_p ); + AssertFatal (rv, "lfds611_stack_guaranteed_push failed for item %u\n", i); + } + for (i = MIN_MSC_PROTOS; i < MAX_MSC_PROTOS; i++) { - msc_fd[i] = NULL; - switch (i) { + switch (i) { case MSC_IP_UE: - rv = snprintf(&msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "IP_UE"); - if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;} + rv = snprintf(&g_msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "IP_UE"); + if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {g_msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;} if ((envP == MSC_E_UTRAN) || (envP == MSC_E_UTRAN_LIPA)) { - msc_fd[i] = fopen("/tmp/openair.msc.ip_ue.log","w"); - if (msc_fd[i] == NULL) fprintf(stderr, "Could not open MSC log file /tmp/openair.msc.ip_ue.log : %s", strerror(errno)); msc_log_declare_proto(i); } break; case MSC_IP_ENB: - rv = snprintf(&msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "IP_ENB"); - if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;} + rv = snprintf(&g_msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "IP_ENB"); + if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {g_msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;} if (envP == MSC_E_UTRAN_LIPA) { - msc_fd[i] = fopen("/tmp/openair.msc.ip_enb.log","w"); - if (msc_fd[i] == NULL) fprintf(stderr, "Could not open MSC log file /tmp/openair.msc.ip_enb.log : %s", strerror(errno)); msc_log_declare_proto(i); } break; case MSC_NAS_UE: - rv = snprintf(&msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "NAS_UE"); - if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;} + rv = snprintf(&g_msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "NAS_UE"); + if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {g_msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;} if ((envP == MSC_E_UTRAN) || (envP == MSC_E_UTRAN_LIPA)) { - msc_fd[i] = fopen("/tmp/openair.msc.nas_ue.log","w"); - if (msc_fd[i] == NULL) fprintf(stderr, "Could not open MSC log file /tmp/openair.msc.nas_ue.log : %s", strerror(errno)); msc_log_declare_proto(i); } break; - case MSC_RRC_UE: - rv = snprintf(&msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "RRC_UE"); - if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;} - if ((envP == MSC_E_UTRAN) || (envP == MSC_E_UTRAN_LIPA)) { - msc_fd[i] = fopen("/tmp/openair.msc.rrc_ue.log","w"); - if (msc_fd[i] == NULL) fprintf(stderr, "Could not open MSC log file /tmp/openair.msc.rrc_ue.log : %s", strerror(errno)); - msc_log_declare_proto(i); - } - break; - case MSC_PDCP_UE: - rv = snprintf(&msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "PDCP_UE"); - if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;} - if ((envP == MSC_E_UTRAN) || (envP == MSC_E_UTRAN_LIPA)) { - msc_fd[i] = fopen("/tmp/openair.msc.pdcp_ue.log","w"); - if (msc_fd[i] == NULL) fprintf(stderr, "Could not open MSC log file /tmp/openair.msc.pdcp_ue.log : %s", strerror(errno)); - msc_log_declare_proto(i); - } - break; - case MSC_RLC_UE: - rv = snprintf(&msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "RLC_UE"); - if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;} - if ((envP == MSC_E_UTRAN) || (envP == MSC_E_UTRAN_LIPA)) { - msc_fd[i] = fopen("/tmp/openair.msc.rlc_ue.log","w"); - if (msc_fd[i] == NULL) fprintf(stderr, "Could not open MSC log file /tmp/openair.msc.rlc_ue.log : %s", strerror(errno)); - msc_log_declare_proto(i); - } - break; - case MSC_MAC_UE: - rv = snprintf(&msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "MAC_UE"); - if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;} - if ((envP == MSC_E_UTRAN) || (envP == MSC_E_UTRAN_LIPA)) { - msc_fd[i] = fopen("/tmp/openair.msc.mac_ue.log","w"); - if (msc_fd[i] == NULL) fprintf(stderr, "Could not open MSC log file /tmp/openair.msc.mac_ue.log : %s", strerror(errno)); - msc_log_declare_proto(i); - } - break; - case MSC_PHY_UE: - rv = snprintf(&msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "PHY_UE"); - if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;} - if ((envP == MSC_E_UTRAN) || (envP == MSC_E_UTRAN_LIPA)) { - msc_fd[i] = fopen("/tmp/openair.msc.phy_ue.log","w"); - if (msc_fd[i] == NULL) fprintf(stderr, "Could not open MSC log file /tmp/openair.msc.phy_ue.log : %s", strerror(errno)); - msc_log_declare_proto(i); - } - break; - case MSC_PHY_ENB: - rv = snprintf(&msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "PHY_ENB"); - if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;} - if ((envP == MSC_E_UTRAN) || (envP == MSC_E_UTRAN_LIPA)) { - msc_fd[i] = fopen("/tmp/openair.msc.phy_enb.log","w"); - if (msc_fd[i] == NULL) fprintf(stderr, "Could not open MSC log file /tmp/openair.msc.phy_enb.log : %s", strerror(errno)); - msc_log_declare_proto(i); - } - break; - case MSC_MAC_ENB: - rv = snprintf(&msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "MAC_ENB"); - if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;} - if ((envP == MSC_E_UTRAN) || (envP == MSC_E_UTRAN_LIPA)) { - msc_fd[i] = fopen("/tmp/openair.msc.mac_enb.log","w"); - if (msc_fd[i] == NULL) fprintf(stderr, "Could not open MSC log file /tmp/openair.msc.mac_enb.log : %s", strerror(errno)); - msc_log_declare_proto(i); - } - break; - case MSC_RLC_ENB: - rv = snprintf(&msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "RLC_ENB"); - if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;} - if ((envP == MSC_E_UTRAN) || (envP == MSC_E_UTRAN_LIPA)) { - msc_fd[i] = fopen("/tmp/openair.msc.rlc_enb.log","w"); - if (msc_fd[i] == NULL) fprintf(stderr, "Could not open MSC log file /tmp/openair.msc.rlc_enb.log : %s", strerror(errno)); - msc_log_declare_proto(i); - } - break; - case MSC_PDCP_ENB: - rv = snprintf(&msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "PDCP_ENB"); - if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;} - if ((envP == MSC_E_UTRAN) || (envP == MSC_E_UTRAN_LIPA)) { - msc_fd[i] = fopen("/tmp/openair.msc.pdcp_enb.log","w"); - if (msc_fd[i] == NULL) fprintf(stderr, "Could not open MSC log file /tmp/openair.msc.pdcp_enb.log : %s", strerror(errno)); - msc_log_declare_proto(i); - } - break; - case MSC_RRC_ENB: - rv = snprintf(&msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "RRC_ENB"); - if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;} - if ((envP == MSC_E_UTRAN) || (envP == MSC_E_UTRAN_LIPA)) { - msc_fd[i] = fopen("/tmp/openair.msc.rrc_enb.log","w"); - if (msc_fd[i] == NULL) fprintf(stderr, "Could not open MSC log file /tmp/openair.msc.rrc_enb.log : %s", strerror(errno)); - msc_log_declare_proto(i); - } - break; - case MSC_S1AP_ENB: - rv = snprintf(&msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "S1AP_ENB"); - if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;} - if ((envP == MSC_E_UTRAN) || (envP == MSC_EPC) || (envP == MSC_MME)) { - if ((envP == MSC_E_UTRAN) || (envP == MSC_E_UTRAN_LIPA)) { - msc_fd[i] = fopen("/tmp/openair.msc.s1ap_enb.log","w"); - if (msc_fd[i] == NULL) fprintf(stderr, "Could not open MSC log file /tmp/openair.msc.s1ap_enb.log : %s", strerror(errno)); - } else { - msc_fd[i] = fopen("/tmp/openair.msc.s1ap_enb.epc.log","w"); - if (msc_fd[i] == NULL) fprintf(stderr, "Could not open MSC log file /tmp/openair.msc.s1ap_enb.epc.log : %s", strerror(errno)); - } - msc_log_declare_proto(i); - } - break; - case MSC_GTPU_ENB: - rv = snprintf(&msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "GTPU_ENB"); - if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;} - if ((envP == MSC_E_UTRAN) || (envP == MSC_E_UTRAN_LIPA)) { - msc_fd[i] = fopen("/tmp/openair.msc.gtpu_enb.log","w"); - if (msc_fd[i] == NULL) fprintf(stderr, "Could not open MSC log file /tmp/openair.msc.gtpu_enb.log : %s", strerror(errno)); - msc_log_declare_proto(i); - } - break; - case MSC_GTPU_SGW: - rv = snprintf(&msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "GTPU_SGW"); - if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;} - if ((envP == MSC_EPC) || (envP == MSC_E_UTRAN) || (envP == MSC_E_UTRAN_LIPA)) { - if ((envP == MSC_E_UTRAN) || (envP == MSC_E_UTRAN_LIPA)) { - msc_fd[i] = fopen("/tmp/openair.msc.gtpu_sgw.utran.log","w"); - if (msc_fd[i] == NULL) fprintf(stderr, "Could not open MSC log file /tmp/openair.msc.gtpu_sgw.utran.log : %s", strerror(errno)); - } else { - msc_fd[i] = fopen("/tmp/openair.msc.gtpu_sgw.log","w"); - if (msc_fd[i] == NULL) fprintf(stderr, "Could not open MSC log file /tmp/openair.msc.gtpu_sgw.log : %s", strerror(errno)); - } - msc_log_declare_proto(i); - } - break; - case MSC_S1AP_MME: - rv = snprintf(&msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "S1AP_MME"); - if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;} - if ((envP == MSC_EPC) || (envP == MSC_MME) || (envP == MSC_E_UTRAN) || (envP == MSC_E_UTRAN_LIPA)) { - if ((envP == MSC_E_UTRAN) || (envP == MSC_E_UTRAN_LIPA)) { - msc_fd[i] = fopen("/tmp/openair.msc.s1ap_mme.utran.log","w"); - if (msc_fd[i] == NULL) fprintf(stderr, "Could not open MSC log file /tmp/openair.msc.s1ap_mme.utran.log : %s", strerror(errno)); - } else { - msc_fd[i] = fopen("/tmp/openair.msc.s1ap_mme.log","w"); - if (msc_fd[i] == NULL) fprintf(stderr, "Could not open MSC log file /tmp/openair.msc.s1ap_mme.log : %s", strerror(errno)); - } - msc_log_declare_proto(i); - } - break; - case MSC_MMEAPP_MME: - rv = snprintf(&msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "MME_APP"); - if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;} - if ((envP == MSC_EPC) || (envP == MSC_MME)) { - msc_fd[i] = fopen("/tmp/openair.msc.mme_app.log","w"); - if (msc_fd[i] == NULL) fprintf(stderr, "Could not open MSC log file /tmp/openair.msc.mme_app.log : %s", strerror(errno)); - msc_log_declare_proto(i); - } - break; - case MSC_NAS_MME: - rv = snprintf(&msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "NAS_MME"); - if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;} - if ((envP == MSC_E_UTRAN) || (envP == MSC_E_UTRAN_LIPA)) { - msc_fd[i] = fopen("/tmp/openair.msc.nas_mme.utran.log","w"); - if (msc_fd[i] == NULL) fprintf(stderr, "Could not open MSC log file /tmp/openair.msc.nas_mme.utran.log : %s", strerror(errno)); - } else { - msc_fd[i] = fopen("/tmp/openair.msc.nas_mme.log","w"); - if (msc_fd[i] == NULL) fprintf(stderr, "Could not open MSC log file /tmp/openair.msc.nas_mme.log : %s", strerror(errno)); - } + case MSC_RRC_UE: + rv = snprintf(&g_msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "RRC_UE"); + if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {g_msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;} + if ((envP == MSC_E_UTRAN) || (envP == MSC_E_UTRAN_LIPA)) { msc_log_declare_proto(i); - break; - case MSC_NAS_EMM_MME: - rv = snprintf(&msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "NAS_EMM"); - if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;} - if ((envP == MSC_EPC) || (envP == MSC_MME)) { - msc_fd[i] = fopen("/tmp/openair.msc.nas_emm_mme.log","w"); - if (msc_fd[i] == NULL) fprintf(stderr, "Could not open MSC log file /tmp/openair.msc.nas_emm_mme.log : %s", strerror(errno)); - msc_log_declare_proto(i); - } - break; - case MSC_NAS_ESM_MME: - rv = snprintf(&msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "NAS_ESM"); - if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;} - if ((envP == MSC_EPC) || (envP == MSC_MME)) { - msc_fd[i] = fopen("/tmp/openair.msc.nas_esm_mme.log","w"); - if (msc_fd[i] == NULL) fprintf(stderr, "Could not open MSC log file /tmp/openair.msc.nas_esm_mme.log : %s", strerror(errno)); - msc_log_declare_proto(i); - } - break; - case MSC_SP_GWAPP_MME: - rv = snprintf(&msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "SP_GW_MME"); - if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;} - if (envP == MSC_EPC) { - msc_fd[i] = fopen("/tmp/openair.msc.spgwapp_mme.log","w"); - if (msc_fd[i] == NULL) fprintf(stderr, "Could not open MSC log file /tmp/openair.msc.spgwapp_mme.log : %s", strerror(errno)); - msc_log_declare_proto(i); - } - break; - case MSC_S11_MME: - rv = snprintf(&msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "S11_MME"); - if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;} - if (envP == MSC_MME) { - msc_fd[i] = fopen("/tmp/openair.msc.s11_mme.log","w"); - if (msc_fd[i] == NULL) fprintf(stderr, "Could not open MSC log file /tmp/openair.msc.s11_mme.log : %s", strerror(errno)); - msc_log_declare_proto(i); - } - break; - case MSC_S6A_MME: - rv = snprintf(&msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "S6A"); - if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;} - if ((envP == MSC_EPC) || (envP == MSC_MME)) { - msc_fd[i] = fopen("/tmp/openair.msc.s6a_mme.log","w"); - if (msc_fd[i] == NULL) fprintf(stderr, "Could not open MSC log file /tmp/openair.msc.s6a_mme.log : %s", strerror(errno)); - msc_log_declare_proto(i); - } - break; - case MSC_HSS: - rv = snprintf(&msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "HSS"); - if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;} - if ((envP == MSC_EPC) || (envP == MSC_MME)) { - msc_fd[i] = fopen("/tmp/openair.msc.hss.log","w"); - if (msc_fd[i] == NULL) fprintf(stderr, "Could not open MSC log file /tmp/openair.msc.hss.log : %s", strerror(errno)); - msc_log_declare_proto(i); - } - break; - default: - rv = snprintf(&msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "UNKNOWN"); - if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;} - msc_fd[i] = NULL; - } + } + break; + case MSC_PDCP_UE: + rv = snprintf(&g_msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "PDCP_UE"); + if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {g_msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;} + if ((envP == MSC_E_UTRAN) || (envP == MSC_E_UTRAN_LIPA)) { + msc_log_declare_proto(i); + } + break; + case MSC_RLC_UE: + rv = snprintf(&g_msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "RLC_UE"); + if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {g_msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;} + if ((envP == MSC_E_UTRAN) || (envP == MSC_E_UTRAN_LIPA)) { + msc_log_declare_proto(i); + } + break; + case MSC_MAC_UE: + rv = snprintf(&g_msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "MAC_UE"); + if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {g_msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;} + if ((envP == MSC_E_UTRAN) || (envP == MSC_E_UTRAN_LIPA)) { + msc_log_declare_proto(i); + } + break; + case MSC_PHY_UE: + rv = snprintf(&g_msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "PHY_UE"); + if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {g_msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;} + if ((envP == MSC_E_UTRAN) || (envP == MSC_E_UTRAN_LIPA)) { + msc_log_declare_proto(i); + } + break; + case MSC_PHY_ENB: + rv = snprintf(&g_msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "PHY_ENB"); + if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {g_msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;} + if ((envP == MSC_E_UTRAN) || (envP == MSC_E_UTRAN_LIPA)) { + msc_log_declare_proto(i); + } + break; + case MSC_MAC_ENB: + rv = snprintf(&g_msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "MAC_ENB"); + if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {g_msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;} + if ((envP == MSC_E_UTRAN) || (envP == MSC_E_UTRAN_LIPA)) { + msc_log_declare_proto(i); + } + break; + case MSC_RLC_ENB: + rv = snprintf(&g_msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "RLC_ENB"); + if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {g_msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;} + if ((envP == MSC_E_UTRAN) || (envP == MSC_E_UTRAN_LIPA)) { + msc_log_declare_proto(i); + } + break; + case MSC_PDCP_ENB: + rv = snprintf(&g_msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "PDCP_ENB"); + if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {g_msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;} + if ((envP == MSC_E_UTRAN) || (envP == MSC_E_UTRAN_LIPA)) { + msc_log_declare_proto(i); + } + break; + case MSC_RRC_ENB: + rv = snprintf(&g_msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "RRC_ENB"); + if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {g_msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;} + if ((envP == MSC_E_UTRAN) || (envP == MSC_E_UTRAN_LIPA)) { + msc_log_declare_proto(i); + } + break; + case MSC_S1AP_ENB: + rv = snprintf(&g_msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "S1AP_ENB"); + if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {g_msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;} + if ((envP == MSC_E_UTRAN) || (envP == MSC_MME_GW) || (envP == MSC_MME)) { + msc_log_declare_proto(i); + } + break; + case MSC_GTPU_ENB: + rv = snprintf(&g_msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "GTPU_ENB"); + if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {g_msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;} + if ((envP == MSC_E_UTRAN) || (envP == MSC_E_UTRAN_LIPA)) { + msc_log_declare_proto(i); + } + break; + case MSC_GTPU_SGW: + rv = snprintf(&g_msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "GTPU_SGW"); + if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {g_msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;} + if ((envP == MSC_MME_GW) || (envP == MSC_E_UTRAN) || (envP == MSC_E_UTRAN_LIPA)) { + msc_log_declare_proto(i); + } + break; + case MSC_S1AP_MME: + rv = snprintf(&g_msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "S1AP_MME"); + if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {g_msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;} + if ((envP == MSC_MME_GW) || (envP == MSC_MME) || (envP == MSC_E_UTRAN) || (envP == MSC_E_UTRAN_LIPA)) { + msc_log_declare_proto(i); + } + break; + case MSC_MMEAPP_MME: + rv = snprintf(&g_msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "MME_APP"); + if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {g_msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;} + if ((envP == MSC_MME_GW) || (envP == MSC_MME)) { + msc_log_declare_proto(i); + } + break; + case MSC_NAS_MME: + rv = snprintf(&g_msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "NAS_MME"); + if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {g_msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;} + msc_log_declare_proto(i); + break; + case MSC_NAS_EMM_MME: + rv = snprintf(&g_msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "NAS_EMM"); + if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {g_msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;} + if ((envP == MSC_MME_GW) || (envP == MSC_MME)) { + msc_log_declare_proto(i); + } + break; + case MSC_NAS_ESM_MME: + rv = snprintf(&g_msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "NAS_ESM"); + if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {g_msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;} + if ((envP == MSC_MME_GW) || (envP == MSC_MME)) { + msc_log_declare_proto(i); + } + break; + case MSC_SP_GWAPP_MME: + rv = snprintf(&g_msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "SP_GW_MME"); + if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {g_msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;} + if (envP == MSC_MME_GW) { + msc_log_declare_proto(i); + } + break; + case MSC_S11_MME: + rv = snprintf(&g_msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "S11_MME"); + if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {g_msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;} + if (envP == MSC_MME) { + msc_log_declare_proto(i); + } + break; + case MSC_S6A_MME: + rv = snprintf(&g_msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "S6A"); + if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {g_msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;} + if ((envP == MSC_MME_GW) || (envP == MSC_MME)) { + msc_log_declare_proto(i); + } + break; + case MSC_HSS: + rv = snprintf(&g_msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "HSS"); + if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {g_msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;} + if ((envP == MSC_MME_GW) || (envP == MSC_MME)) { + msc_log_declare_proto(i); + } + break; + default: + rv = snprintf(&g_msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "UNKNOWN"); + if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {g_msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;} + } } + rv = itti_create_task (TASK_MSC, msc_task, NULL); + AssertFatal (rv == 0, "Create task for MSC failed!\n"); + fprintf(stderr, "Initializing MSC logs Done\n"); return 0; } +//------------------------------------------------------------------------------ +void msc_start_use(void) +//------------------------------------------------------------------------------ +{ + lfds611_queue_use(g_msc_message_queue_p); + lfds611_stack_use(g_msc_memory_stack_p); +} + + +//------------------------------------------------------------------------------ +void msc_flush_messages(void) +//------------------------------------------------------------------------------ +{ + int rv; + msc_queue_item_t *item_p = NULL; + + while ((rv = lfds611_queue_dequeue( g_msc_message_queue_p, (void**)&item_p )) == 1) { + if (NULL != item_p->message_str) { + fputs(item_p->message_str, g_msc_fd); + // TODO BIN DATA + rv = lfds611_stack_guaranteed_push( g_msc_memory_stack_p, item_p->message_str ); + } + // TODO FREE BIN DATA + free(item_p); + } + fflush(g_msc_fd); +} + //------------------------------------------------------------------------------ void msc_end(void) //------------------------------------------------------------------------------ { int rv; - int i; - for (i = MIN_MSC_PROTOS; i < MAX_MSC_PROTOS; i++) { - if (msc_fd[i] != NULL) { - rv = fflush(msc_fd[i]); - if (rv != 0) { - fprintf(stderr, "Error while flushing stream of MSC log file: %s", strerror(errno)); - } - rv = fclose(msc_fd[i]); - if (rv != 0) { - fprintf(stderr, "Error while closing MSC log file: %s", strerror(errno)); - } - } + if (NULL != g_msc_fd ) { + msc_flush_messages(); + rv = fflush(g_msc_fd); + if (rv != 0) { + fprintf(stderr, "Error while flushing stream of MSC log file: %s", strerror(errno)); + } + rv = fclose(g_msc_fd); + if (rv != 0) { + fprintf(stderr, "Error while closing MSC log file: %s", strerror(errno)); + } } } @@ -337,20 +399,46 @@ void msc_log_declare_proto( ) //------------------------------------------------------------------------------ { - int rv; - uint64_t local_msc_event_counter = msc_event_counter; - msc_event_counter++; - if ((protoP >= MIN_MSC_PROTOS) && (protoP < MAX_MSC_PROTOS)) { - if (msc_fd[protoP] != NULL) { - rv = fprintf(msc_fd[protoP], "%"PRIu64" [PROTO] %d %s\n", local_msc_event_counter, protoP, &msc_proto2str[protoP][0]); - if (rv < 0) { - fprintf(stderr, "Error while declaring new protocol in MSC log file: %s", strerror(errno)); - } - rv = fflush(msc_fd[protoP]); - if (rv != 0) { - fprintf(stderr, "Error while flushing stream of MSC log file: %s", strerror(errno)); - } - } + int rv = 0; + msc_queue_item_t *new_item_p = NULL; + char *char_message_p = NULL; + + if ((MIN_MSC_PROTOS <= protoP) && (MAX_MSC_PROTOS > protoP)) { + // may be build a memory pool for that also ? + new_item_p = malloc(sizeof(msc_queue_item_t)); + if (NULL != new_item_p) { + + rv = lfds611_stack_pop(g_msc_memory_stack_p, (void**)&char_message_p); + if (0 == rv) { + msc_flush_messages(); + rv = lfds611_stack_pop(g_msc_memory_stack_p, (void**)&char_message_p); + } + if (1 == rv) { + rv = snprintf(char_message_p, MSC_MAX_MESSAGE_LENGTH, "%"PRIu64" [PROTO] %d %s\n", __sync_fetch_and_add (&g_message_number, 1), protoP, &g_msc_proto2str[protoP][0]); + if (0 > rv) { + fprintf(stderr, "Error while declaring new protocol in MSC: %s", strerror(errno)); + } + new_item_p->message_str = char_message_p; + new_item_p->message_str_size = rv; + new_item_p->message_bin = NULL; + new_item_p->message_bin_size = 0; + rv = lfds611_queue_enqueue( g_msc_message_queue_p, new_item_p ); + if (0 == rv) { + rv = lfds611_queue_guaranteed_enqueue(g_msc_message_queue_p, new_item_p ); + if (0 == rv) { + fprintf(stderr, "Error while lfds611_queue_guaranteed_enqueue message %s in MSC", char_message_p); + rv = lfds611_stack_guaranteed_push( g_msc_memory_stack_p, char_message_p ); + free(new_item_p); + } + } + return; + } else { + fprintf(stderr, "Error while lfds611_stack_pop()\n"); + } + free(new_item_p); + } else { + fprintf(stderr, "Error while malloc in MSC"); + } } } //------------------------------------------------------------------------------ @@ -359,202 +447,134 @@ void msc_log_event( char *format, ...) //------------------------------------------------------------------------------ { - va_list args; - int rv; - uint64_t local_msc_event_counter = msc_event_counter; + va_list args; + int rv; + int rv2; + msc_queue_item_t *new_item_p = NULL; + char *char_message_p = NULL; - msc_event_counter++; - if ((protoP < MIN_MSC_PROTOS) || (protoP >= MAX_MSC_PROTOS)) { + if ((MIN_MSC_PROTOS > protoP) || (MAX_MSC_PROTOS <= protoP)) { return; } - if (msc_fd[protoP] != NULL) { - rv = fprintf(msc_fd[protoP], "%"PRIu64" [EVENT] %d ", local_msc_event_counter, protoP); - if (rv < 0) { - fprintf(stderr, "Error while logging MSC event : %s", &msc_proto2str[protoP][0]); + new_item_p = malloc(sizeof(msc_queue_item_t)); + if (NULL != new_item_p) { + + rv = lfds611_stack_pop(g_msc_memory_stack_p, (void**)&char_message_p); + if (0 == rv) { + msc_flush_messages(); + rv = lfds611_stack_pop(g_msc_memory_stack_p, (void**)&char_message_p); + } + if (1 == rv) { + rv = snprintf(char_message_p, MSC_MAX_MESSAGE_LENGTH, "%"PRIu64" [EVENT] %d ", __sync_fetch_and_add (&g_message_number, 1), protoP); + if ((0 > rv) || (MSC_MAX_MESSAGE_LENGTH < rv)) { + fprintf(stderr, "Error while logging MSC event : %s", &g_msc_proto2str[protoP][0]); + goto error_event; } va_start(args, format); - rv = vfprintf(msc_fd[protoP], format, args); + rv2 = vsnprintf(&char_message_p[rv],MSC_MAX_MESSAGE_LENGTH - rv, format, args); va_end(args); - if (rv < 0) { - fprintf(stderr, "Error while logging MSC event : %s", &msc_proto2str[protoP][0]); + if ((0 > rv2) || ((MSC_MAX_MESSAGE_LENGTH - rv) < rv2)) { + fprintf(stderr, "Error while logging MSC event : %s", &g_msc_proto2str[protoP][0]); + goto error_event; } - rv = fprintf(msc_fd[protoP], "\n"); - if (rv < 0) { - fprintf(stderr, "Error while logging MSC event : %s", &msc_proto2str[protoP][0]); + rv += rv2; + rv2 = snprintf(&char_message_p[rv],MSC_MAX_MESSAGE_LENGTH - rv, "\n"); + if ((0 > rv2) || ((MSC_MAX_MESSAGE_LENGTH - rv) < rv2)) { + fprintf(stderr, "Error while logging MSC event : %s", &g_msc_proto2str[protoP][0]); + goto error_event; } -#if 1 - rv = fflush(msc_fd[protoP]); - if (rv != 0) { - fprintf(stderr, "Error while flushing stream of MSC log file: %s", strerror(errno)); + rv += rv2; + new_item_p->message_str = char_message_p; + new_item_p->message_str_size = rv; + new_item_p->message_bin = NULL; + new_item_p->message_bin_size = 0; + rv = lfds611_queue_enqueue( g_msc_message_queue_p, new_item_p ); + if (0 == rv) { + fprintf(stderr, "Error while lfds611_queue_guaranteed_enqueue message %s in MSC", char_message_p); + rv = lfds611_stack_guaranteed_push( g_msc_memory_stack_p, char_message_p ); + free(new_item_p); } -#endif + } else { + fprintf(stderr, "Error while lfds611_stack_pop()\n"); + } } + return; +error_event: + rv = lfds611_stack_guaranteed_push( g_msc_memory_stack_p, char_message_p ); + free(new_item_p); } //------------------------------------------------------------------------------ -void msc_log_rx_message( - const msc_proto_t receiverP, - const msc_proto_t senderP, - const char* bytesP, +void msc_log_message( + const char * const message_operationP, + const msc_proto_t proto1P, + const msc_proto_t proto2P, + const uint8_t * const bytesP, const unsigned int num_bytes, char *format, ...) //------------------------------------------------------------------------------ { - va_list args; - int rv; - uint64_t mac = 0; - uint64_t local_msc_event_counter = msc_event_counter; + va_list args; + uint64_t mac = 0; // TO DO mac on bytesP param + int rv; + int rv2; + msc_queue_item_t *new_item_p = NULL; + char *char_message_p = NULL; - msc_event_counter++; - if ((receiverP < MIN_MSC_PROTOS) || (receiverP >= MAX_MSC_PROTOS) || - (senderP < MIN_MSC_PROTOS) || (senderP >= MAX_MSC_PROTOS)) { - return; + if ((MIN_MSC_PROTOS > proto1P) || (MAX_MSC_PROTOS <= proto1P) || + (MIN_MSC_PROTOS > proto2P) || (MAX_MSC_PROTOS <= proto2P) ) { + return; } - if (msc_fd[receiverP] != NULL) { - rv = fprintf(msc_fd[receiverP], "%"PRIu64" [MESSAGE] %d <- %d %"PRIu64" ", - local_msc_event_counter, receiverP, senderP, mac); - if (rv < 0) { - fprintf(stderr, "Error while logging MSC RX message : %s", &msc_proto2str[receiverP][0]); + + new_item_p = malloc(sizeof(msc_queue_item_t)); + if (NULL != new_item_p) { + + rv = lfds611_stack_pop(g_msc_memory_stack_p, (void**)&char_message_p); + if (0 == rv) { + msc_flush_messages(); + rv = lfds611_stack_pop(g_msc_memory_stack_p, (void**)&char_message_p); + } + if (1 == rv) { + rv = snprintf(char_message_p, MSC_MAX_MESSAGE_LENGTH, "%"PRIu64" [MESSAGE] %d %s %d %"PRIu64" ", + __sync_fetch_and_add (&g_message_number, 1), proto1P, message_operationP, proto2P, mac); + if ((0 > rv) || (MSC_MAX_MESSAGE_LENGTH < rv)) { + fprintf(stderr, "Error while logging MSC message : %s/%s", &g_msc_proto2str[proto1P][0], &g_msc_proto2str[proto2P][0]); + goto error_event; } va_start(args, format); - rv = vfprintf(msc_fd[receiverP], format, args); + rv2 = vsnprintf(&char_message_p[rv],MSC_MAX_MESSAGE_LENGTH - rv, format, args); va_end(args); - if (rv < 0) { - fprintf(stderr, "Error while logging MSC RX message : %s", &msc_proto2str[receiverP][0]); + if ((0 > rv2) || ((MSC_MAX_MESSAGE_LENGTH - rv) < rv2)) { + fprintf(stderr, "Error while logging MSC message : %s/%s", &g_msc_proto2str[proto1P][0], &g_msc_proto2str[proto2P][0]); + goto error_event; } - rv = fprintf(msc_fd[receiverP], "\n"); - if (rv < 0) { - fprintf(stderr, "Error while logging MSC RX message : %s", &msc_proto2str[receiverP][0]); - } - if ((msc_event_counter & 0x000000000000000F) == 0x000000000000000F) { - fflush(msc_fd[receiverP]); - } - } -} -//------------------------------------------------------------------------------ -void msc_log_rx_discarded_message( - const msc_proto_t receiverP, - const msc_proto_t senderP, - const char* bytesP, - const unsigned int num_bytes, - char *format, ...) -//------------------------------------------------------------------------------ -{ - va_list args; - int rv; - uint64_t mac = 0; - uint64_t local_msc_event_counter = msc_event_counter; - - msc_event_counter++; - - if ((receiverP < MIN_MSC_PROTOS) || (receiverP >= MAX_MSC_PROTOS) || - (senderP < MIN_MSC_PROTOS) || (senderP >= MAX_MSC_PROTOS)) { - return; - } - if (msc_fd[receiverP] != NULL) { - rv = fprintf(msc_fd[receiverP], "%"PRIu64" [MESSAGE] %d x- %d %"PRIu64" ", - local_msc_event_counter, receiverP, senderP, mac); - if (rv < 0) { - fprintf(stderr, "Error while logging MSC RX message : %s", &msc_proto2str[receiverP][0]); - } - va_start(args, format); - rv = vfprintf(msc_fd[receiverP], format, args); - va_end(args); - if (rv < 0) { - fprintf(stderr, "Error while logging MSC RX message : %s", &msc_proto2str[receiverP][0]); - } - rv = fprintf(msc_fd[receiverP], "\n"); - if (rv < 0) { - fprintf(stderr, "Error while logging MSC RX message : %s", &msc_proto2str[receiverP][0]); - } - if ((msc_event_counter & 0x000000000000000F) == 0x000000000000000F) { - fflush(msc_fd[receiverP]); - } - } -} -//------------------------------------------------------------------------------ -void msc_log_tx_message( - const msc_proto_t senderP, - const msc_proto_t receiverP, - const char* bytesP, - const unsigned int num_bytes, - char *format, ...) -//------------------------------------------------------------------------------ -{ - va_list args; - int rv; - uint64_t mac = 0; - uint64_t local_msc_event_counter = msc_event_counter; - - msc_event_counter++; - - if ((receiverP < MIN_MSC_PROTOS) || (receiverP >= MAX_MSC_PROTOS) || - (senderP < MIN_MSC_PROTOS) || (senderP >= MAX_MSC_PROTOS)) { - return; - } - if (msc_fd[senderP] != NULL) { - rv = fprintf(msc_fd[senderP], "%"PRIu64" [MESSAGE] %d -> %d %"PRIu64" ", - local_msc_event_counter, senderP, receiverP, mac); - if (rv < 0) { - fprintf(stderr, "Error while logging MSC TX message : %s", &msc_proto2str[senderP][0]); - } - va_start(args, format); - rv = vfprintf(msc_fd[senderP], format, args); - va_end(args); - if (rv < 0) { - fprintf(stderr, "Error while logging MSC TX message : %s", &msc_proto2str[senderP][0]); - } - rv = fprintf(msc_fd[senderP], "\n"); - if (rv < 0) { - fprintf(stderr, "Error while logging MSC TX message : %s", &msc_proto2str[senderP][0]); - } - if ((msc_event_counter & 0x000000000000000F) == 0x000000000000000F) { - fflush(msc_fd[senderP]); - } - } -} - -//------------------------------------------------------------------------------ -void msc_log_tx_message_failed( - const msc_proto_t senderP, - const msc_proto_t receiverP, - const char* bytesP, - const unsigned int num_bytes, - char *format, ...) -//------------------------------------------------------------------------------ -{ - va_list args; - int rv; - uint64_t mac = 0; - uint64_t local_msc_event_counter = msc_event_counter; - - msc_event_counter++; - - if ((receiverP < MIN_MSC_PROTOS) || (receiverP >= MAX_MSC_PROTOS) || - (senderP < MIN_MSC_PROTOS) || (senderP >= MAX_MSC_PROTOS)) { - return; - } - if (msc_fd[senderP] != NULL) { - rv = fprintf(msc_fd[senderP], "%"PRIu64" [MESSAGE] %d -x %d %"PRIu64" ", - local_msc_event_counter, senderP, receiverP, mac); - if (rv < 0) { - fprintf(stderr, "Error while logging MSC TX message : %s", &msc_proto2str[senderP][0]); - } - va_start(args, format); - rv = vfprintf(msc_fd[senderP], format, args); - va_end(args); - if (rv < 0) { - fprintf(stderr, "Error while logging MSC TX message : %s", &msc_proto2str[senderP][0]); - } - rv = fprintf(msc_fd[senderP], "\n"); - if (rv < 0) { - fprintf(stderr, "Error while logging MSC TX message : %s", &msc_proto2str[senderP][0]); - } - if ((msc_event_counter & 0x000000000000000F) == 0x000000000000000F) { - fflush(msc_fd[senderP]); + rv += rv2; + rv2 = snprintf(&char_message_p[rv],MSC_MAX_MESSAGE_LENGTH - rv, "\n"); + if ((0 > rv2) || ((MSC_MAX_MESSAGE_LENGTH - rv) < rv2)) { + fprintf(stderr, "Error while logging MSC message : %s/%s", &g_msc_proto2str[proto1P][0], &g_msc_proto2str[proto2P][0]); + goto error_event; } + rv += rv2; + new_item_p->message_str = char_message_p; + new_item_p->message_str_size = rv; + new_item_p->message_bin = NULL; // TO DO + new_item_p->message_bin_size = 0; // TO DO + rv = lfds611_queue_enqueue( g_msc_message_queue_p, new_item_p ); + if (0 == rv) { + fprintf(stderr, "Error while lfds611_queue_guaranteed_enqueue message %s in MSC", char_message_p); + rv = lfds611_stack_guaranteed_push( g_msc_memory_stack_p, char_message_p ); + free(new_item_p); + } + } else { + fprintf(stderr, "Error while lfds611_stack_pop()\n"); + msc_flush_messages(); + } } + return; +error_event: + rv = lfds611_stack_guaranteed_push( g_msc_memory_stack_p, char_message_p ); + free(new_item_p); } diff --git a/common/utils/msc/msc.h b/common/utils/msc/msc.h index c7d541e5a6..b5c0c83280 100644 --- a/common/utils/msc/msc.h +++ b/common/utils/msc/msc.h @@ -30,12 +30,13 @@ #ifndef MSC_H_ #define MSC_H_ #include +#include typedef enum { MIN_MSC_ENV = 0, MSC_E_UTRAN = MIN_MSC_ENV, MSC_E_UTRAN_LIPA, - MSC_EPC, + MSC_MME_GW, MSC_MME, MSC_SP_GW, MAX_MSC_ENV @@ -81,44 +82,32 @@ typedef enum { (CTXT_Pp)->frame, \ (CTXT_Pp)->subframe #if defined(MESSAGE_CHART_GENERATOR) -int msc_init(msc_env_t envP); +int msc_init(const msc_env_t envP, const int max_threadsP); +void msc_start_use(void); +void msc_flush_messages(void); void msc_end(void); void msc_log_declare_proto(const msc_proto_t protoP); void msc_log_event(const msc_proto_t protoP,char *format, ...); -void msc_log_rx_message( +void msc_log_message( + const char * const message_operationP, const msc_proto_t receiverP, const msc_proto_t senderP, - const char* bytesP, + const uint8_t* const bytesP, const unsigned int num_bytes, char *format, ...); -void msc_log_rx_discarded_message( - const msc_proto_t receiverP, - const msc_proto_t senderP, - const char* bytesP, - const unsigned int num_bytes, - char *format, ...); -void msc_log_tx_message( - const msc_proto_t senderP, - const msc_proto_t receiverP, - const char* bytesP, - const unsigned int num_bytes, - char *format, ...); -void msc_log_tx_message_failed( - const msc_proto_t senderP, - const msc_proto_t receiverP, - const char* bytesP, - const unsigned int num_bytes, - char *format, ...); -#define MSC_INIT(mScPaRaMs) msc_init(mScPaRaMs) + +#define MSC_INIT(arg1,arg2) msc_init(arg1,arg2) +#define MSC_START_USE msc_start_use #define MSC_END msc_end #define MSC_LOG_EVENT(mScPaRaMs, fORMAT, aRGS...) msc_log_event(mScPaRaMs, fORMAT, ##aRGS) -#define MSC_LOG_RX_MESSAGE(mScPaRaMs, fORMAT, aRGS...) msc_log_rx_message(mScPaRaMs, fORMAT, ##aRGS) -#define MSC_LOG_RX_DISCARDED_MESSAGE(mScPaRaMs, fORMAT, aRGS...) msc_log_rx_discarded_message(mScPaRaMs, fORMAT, ##aRGS) -#define MSC_LOG_TX_MESSAGE(mScPaRaMs, fORMAT, aRGS...) msc_log_tx_message(mScPaRaMs, fORMAT, ##aRGS) -#define MSC_LOG_TX_MESSAGE_FAILED(mScPaRaMs, fORMAT, aRGS...) msc_log_tx_message_failed(mScPaRaMs, fORMAT, ##aRGS) +#define MSC_LOG_RX_MESSAGE(rECEIVER, sENDER, bYTES, nUMbYTES, fORMAT, aRGS...) msc_log_message("<-",rECEIVER, sENDER, bYTES, nUMbYTES, fORMAT, ##aRGS) +#define MSC_LOG_RX_DISCARDED_MESSAGE(rECEIVER, sENDER, bYTES, nUMbYTES, fORMAT, aRGS...) msc_log_message("x-",rECEIVER, sENDER, bYTES, nUMbYTES, fORMAT, ##aRGS) +#define MSC_LOG_TX_MESSAGE(sENDER, rECEIVER, bYTES, nUMbYTES, fORMAT, aRGS...) msc_log_message("->",sENDER, rECEIVER, bYTES, nUMbYTES, fORMAT, ##aRGS) +#define MSC_LOG_TX_MESSAGE_FAILED(sENDER, rECEIVER, bYTES, nUMbYTES, fORMAT, aRGS...) msc_log_message("-x",sENDER, rECEIVER, bYTES, nUMbYTES, fORMAT, ##aRGS) #else -#define MSC_INIT(mScPaRaMs) -#define MSC_END +#define MSC_INIT(arg1,arg2) +#define MSC_START_USE(mScPaRaMs) +#define MSC_END(mScPaRaMs) #define MSC_LOG_EVENT(mScPaRaMs, fORMAT, aRGS...) #define MSC_LOG_RX_MESSAGE(mScPaRaMs, fORMAT, aRGS...) #define MSC_LOG_RX_DISCARDED_MESSAGE(mScPaRaMs, fORMAT, aRGS...) diff --git a/maketags b/maketags index df3ded634c..ec283c8bec 100755 --- a/maketags +++ b/maketags @@ -1,3 +1,3 @@ #!/bin/sh echo "building ctags for openair1 and openair2 ..." -ctags -e -R --exclude=openair3/ --exclude=openair1/DOCS/ --exclude=openair2/DOCS/ --exclude=openair2/RRC/CELLULAR/ --exclude=openair2/NAS/DRIVER/CELLULAR/ --exclude=openair2/SIMULATION/ --exclude=openairITS/ --exclude=openair1/SIMULATION/ +ctags -e -R --exclude=openair1/DOCS/ --exclude=openair2/DOCS/ --exclude=openair2/RRC/CELLULAR/ --exclude=openair2/NAS/DRIVER/CELLULAR/ --exclude=openair2/SIMULATION/ --exclude=targets/DOCS/ --exclude=targets/PROJECTS/ openair1 openair2 targets diff --git a/openair-cn/COMMON/ip_forward_messages_types.h b/openair-cn/COMMON/ip_forward_messages_types.h index 89ca43d715..40db8d5c38 100755 --- a/openair-cn/COMMON/ip_forward_messages_types.h +++ b/openair-cn/COMMON/ip_forward_messages_types.h @@ -57,6 +57,7 @@ typedef struct { ebi_t eps_bearer_id; ///< EPS bearer identifier pdn_type_t pdn_type; ///< PDN Type PAA_t paa; ///< PDN Address Allocation + pco_flat_t pco; ///< Protocol configuration options } SGICreateEndpointResp; typedef struct { diff --git a/openair-cn/COMMON/nas_messages_types.h b/openair-cn/COMMON/nas_messages_types.h index 7e5b49f228..6c03d25252 100644 --- a/openair-cn/COMMON/nas_messages_types.h +++ b/openair-cn/COMMON/nas_messages_types.h @@ -177,6 +177,7 @@ typedef struct nas_pdn_connectivity_req_s { char imsi[16]; uint8_t imsi_length; network_qos_t qos; + pco_flat_t pco; OctetString apn; OctetString pdn_addr; int pdn_type; @@ -189,6 +190,7 @@ typedef struct nas_pdn_connectivity_rsp_s { int pti; // nas ref Identity of the procedure transaction executed to activate the PDN connection entry unsigned ue_id; // nas ref network_qos_t qos; + pco_flat_t pco; OctetString apn; OctetString pdn_addr; int pdn_type; diff --git a/openair-cn/COMMON/sgw_lite_messages_types.h b/openair-cn/COMMON/sgw_lite_messages_types.h index 178618423b..f83015b6bb 100644 --- a/openair-cn/COMMON/sgw_lite_messages_types.h +++ b/openair-cn/COMMON/sgw_lite_messages_types.h @@ -55,6 +55,10 @@ /** @struct SgwCreateSessionRequest * @brief Create Session Request * + * Spec 3GPP TS 29.274, Universal Mobile Telecommunications System (UMTS); + * LTE; 3GPP Evolved Packet System (EPS); + * Evolved General Packet Radio Service (GPRS); + * Tunnelling Protocol for Control plane (GTPv2-C); Stage 3 * The Create Session Request will be sent on S11 interface as * part of these procedures: * - E-UTRAN Initial Attach @@ -250,7 +254,8 @@ typedef struct SgwCreateSessionRequest_s { ///< RAU/TAU/HO procedures with SGW change to identify the ///< default bearer of the PDN Connection - // PCO protocol_configuration_options ///< This IE is not applicable to TAU/RAU/Handover. If + pco_flat_t pco; /// PCO protocol_configuration_options + ///< This IE is not applicable to TAU/RAU/Handover. If ///< MME/SGSN receives PCO from UE (during the attach ///< procedures), the MME/SGSN shall forward the PCO IE to ///< SGW. The SGW shall also forward it to PGW. @@ -413,7 +418,9 @@ typedef struct SgwCreateSessionResponse_s { ///< Gn/Gp SGSN to S4-SGSN/MME RAU/TAU procedure to ///< identify the default bearer the PGW selects for the PDN ///< Connection. - // PCO protocol_configuration_options ///< This IE is not applicable for TAU/RAU/Handover. If PGW + + pco_flat_t pco;// PCO protocol_configuration_options + ///< This IE is not applicable for TAU/RAU/Handover. If PGW ///< decides to return PCO to the UE, PGW shall send PCO to ///< SGW. If SGW receives the PCO IE, SGW shall forward it ///< MME/SGSN. diff --git a/openair-cn/COMMON/tasks_def.h b/openair-cn/COMMON/tasks_def.h index 0334eb45c6..e257778052 100644 --- a/openair-cn/COMMON/tasks_def.h +++ b/openair-cn/COMMON/tasks_def.h @@ -51,3 +51,5 @@ TASK_DEF(TASK_SCTP, TASK_PRIORITY_MED, 200) TASK_DEF(TASK_SPGW_APP, TASK_PRIORITY_MED, 200) /// UDP task TASK_DEF(TASK_UDP, TASK_PRIORITY_MED, 200) +//MESSAGE GENERATOR TASK +TASK_DEF(TASK_MSC, TASK_PRIORITY_MED, 200) diff --git a/openair-cn/DOCS/EPC_User_Guide.docx b/openair-cn/DOCS/EPC_User_Guide.docx new file mode 100644 index 0000000000..b9cca8254c Binary files /dev/null and b/openair-cn/DOCS/EPC_User_Guide.docx differ diff --git a/openair-cn/DOCS/EPC_User_Guide.pdf b/openair-cn/DOCS/EPC_User_Guide.pdf new file mode 100644 index 0000000000..6b8a476bad Binary files /dev/null and b/openair-cn/DOCS/EPC_User_Guide.pdf differ diff --git a/openair-cn/GTPV1-U/GTPUAH/cmd.sh b/openair-cn/GTPV1-U/GTPUAH/cmd.sh deleted file mode 100755 index 94c35b043e..0000000000 --- a/openair-cn/GTPV1-U/GTPUAH/cmd.sh +++ /dev/null @@ -1,18 +0,0 @@ -# Clear the iptables mangle table -iptables -t mangle -F - -# Remove GTPU KLM -rmmod xt_GTPUAH - -# Insert the GTPUAH KLM -insmod ./Bin/xt_GTPUAH.ko - -# Copy the userland iptables extenstion library -if [ -d /lib/xtables ]; then - /bin/cp -f ./Bin/libxt_GTPUAH.so /lib/xtables/ -fi - -if [ -d /lib/iptables ]; then - /bin/cp -f ./Bin/libxt_GTPUAH.so /lib/iptables/libipt_GTPUAH.so -fi - diff --git a/openair-cn/GTPV1-U/GTPUAH/COPYING b/openair-cn/GTPV1-U/GTPU_SP/COPYING similarity index 100% rename from openair-cn/GTPV1-U/GTPUAH/COPYING rename to openair-cn/GTPV1-U/GTPU_SP/COPYING diff --git a/openair-cn/GTPV1-U/GTPUAH/INSTALL b/openair-cn/GTPV1-U/GTPU_SP/INSTALL similarity index 100% rename from openair-cn/GTPV1-U/GTPUAH/INSTALL rename to openair-cn/GTPV1-U/GTPU_SP/INSTALL diff --git a/openair-cn/GTPV1-U/GTPUAH/Makefile b/openair-cn/GTPV1-U/GTPU_SP/Makefile similarity index 90% rename from openair-cn/GTPV1-U/GTPUAH/Makefile rename to openair-cn/GTPV1-U/GTPU_SP/Makefile index 1c581789e4..f8b59266e1 100755 --- a/openair-cn/GTPV1-U/GTPUAH/Makefile +++ b/openair-cn/GTPV1-U/GTPU_SP/Makefile @@ -1,5 +1,5 @@ #################################################################################### -# Makefile for iptables extension for the GTPUAH target and GTPUAH klm +# Makefile for iptables extension for the GTPUSP target and GTPUSP klm # # Copyright (c) 2010-2011 Polaris Networks # Author: Pradip Biswas @@ -14,20 +14,20 @@ export BIN_DIR ?= $(shell pwd)/Bin KVERSION = $(shell uname -r) KVERSION_LAST_DIGIT = $(shell echo ${KVERSION} | cut -d "." -f 3 | cut -d "-" -f 1) -obj-m = xt_GTPUAH.o +obj-m = xt_GTPUSP.o EXTRA_CFLAGS += -DKVERSION=$(KVERSION_LAST_DIGIT) all: xtlib echo "Building for Kernel Version: $(KVERSION_LAST_DIGIT)" make -C /lib/modules/$(KVERSION)/build M=$(PWD) modules - chmod 777 xt_GTPUAH.ko - mv xt_GTPUAH.ko $(BIN_DIR)/ + chmod 777 xt_GTPUSP.ko + mv xt_GTPUSP.ko $(BIN_DIR)/ clean: libclean make -C /lib/modules/$(KVERSION)/build M=$(PWD) clean ################################################################################ -# The next section is used by libxt_GTPUAH +# The next section is used by libxt_GTPUSP ################################################################################ XT_IPTABLES_VERSION = $(shell /sbin/iptables -V | cut -d " " -f 2 | cut -b 2-) @@ -47,11 +47,11 @@ endif LIB_CFLAGS := -fPIC -Wall -MMD -D_LARGEFILE_SOURCE=1 -D_LARGE_FILES -D_FILE_OFFSET_BITS=64 \ -D_REENTRANT -pipe -DXTABLES_LIBDIR=\"/usr/local/libexec/xtables\" -DXTABLES_INTERNAL \ - -D_INIT=libxt_GTPUAH_init -DPIC -fPIC -O2 \ + -D_INIT=libxt_GTPUSP_init -DPIC -fPIC -O2 \ -DIPTVERSION=$(IPTVERSION) \ -DIPTABLES_VERSION_STRING=$(IPTABLES_VERSION_STRING) -XT_TARGET := xt_GTPUAH +XT_TARGET := xt_GTPUSP XT_LIBNAME := lib$(XT_TARGET).so XT_BUILD_DIR = $(BIN_DIR)/$(XT_TARGET) @@ -70,7 +70,7 @@ INCLUDE_DIR = -I. \ -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include \ -I/usr/lib64/glib-2.0/include -XT_SOURCES = libxt_GTPUAH.c +XT_SOURCES = libxt_GTPUSP.c XT_OBJECTS := $(addprefix $(XT_BUILD_DIR)/, $(notdir $(XT_SOURCES:.c=.o))) @@ -91,7 +91,7 @@ $(BIN_DIR)/$(XT_LIBNAME): $(XT_OBJECTS) @$(LIB_LD) -shared $(XT_OBJECTS) -o $@ $(XT_BUILD_DIR)/%.o : %.c - @echo "Building GTPUAH ext for version $(IPTVERSION) $(IPTABLES_VERSION_STRING)" + @echo "Building GTPUSP ext for version $(IPTVERSION) $(IPTABLES_VERSION_STRING)" @echo Compiling $< @$(LIB_CC) $(LIB_CFLAGS) -MF $(DF).d $(INCLUDE_DIR) -o $@ -c $< @cp $(DF).d $(DF).P; \ diff --git a/openair-cn/GTPV1-U/GTPUAH/README b/openair-cn/GTPV1-U/GTPU_SP/README similarity index 100% rename from openair-cn/GTPV1-U/GTPUAH/README rename to openair-cn/GTPV1-U/GTPU_SP/README diff --git a/openair-cn/GTPV1-U/GTPUAH/RELEASE_NOTES b/openair-cn/GTPV1-U/GTPU_SP/RELEASE_NOTES similarity index 70% rename from openair-cn/GTPV1-U/GTPUAH/RELEASE_NOTES rename to openair-cn/GTPV1-U/GTPU_SP/RELEASE_NOTES index e8617a4978..022846fcd5 100755 --- a/openair-cn/GTPV1-U/GTPUAH/RELEASE_NOTES +++ b/openair-cn/GTPV1-U/GTPU_SP/RELEASE_NOTES @@ -3,5 +3,4 @@ Known issues in GTPU v1.0 ------------------------- 1. Does not implement the "Transport" action. -2. Does not handle segmented GTPu packets. diff --git a/openair-cn/GTPV1-U/GTPU_SP/cmd.sh b/openair-cn/GTPV1-U/GTPU_SP/cmd.sh new file mode 100755 index 0000000000..428b5b155a --- /dev/null +++ b/openair-cn/GTPV1-U/GTPU_SP/cmd.sh @@ -0,0 +1,18 @@ +# Clear the iptables mangle table +iptables -t mangle -F + +# Remove GTPU KLM +rmmod xt_GTPUSP + +# Insert the GTPUSP KLM +insmod ./Bin/xt_GTPUSP.ko + +# Copy the userland iptables extenstion library +if [ -d /lib/xtables ]; then + /bin/cp -f ./Bin/libxt_GTPUSP.so /lib/xtables/ +fi + +if [ -d /lib/iptables ]; then + /bin/cp -f ./Bin/libxt_GTPUSP.so /lib/iptables/libipt_GTPUSP.so +fi + diff --git a/openair-cn/GTPV1-U/GTPUAH/libxt_GTPUAH.c b/openair-cn/GTPV1-U/GTPU_SP/libxt_GTPUSP.c similarity index 54% rename from openair-cn/GTPV1-U/GTPUAH/libxt_GTPUAH.c rename to openair-cn/GTPV1-U/GTPU_SP/libxt_GTPUSP.c index 0e9c4dc28d..0b749a8759 100755 --- a/openair-cn/GTPV1-U/GTPUAH/libxt_GTPUAH.c +++ b/openair-cn/GTPV1-U/GTPU_SP/libxt_GTPUSP.c @@ -1,4 +1,4 @@ -/* Shared library add-on to iptables for the GTPUAH target +/* Shared library add-on to iptables for the GTPUSP target * * Copyright (c) 2010-2011 Polaris Networks * Author: Pradip Biswas @@ -19,7 +19,7 @@ #include #include -#include "xt_GTPUAH.h" +#include "xt_GTPUSP.h" #if (IPTVERSION <= 135) #include @@ -28,25 +28,25 @@ #endif #if (IPTVERSION <= 135) -#define GTPUAH_PARAM_BAD_VALUE 0 -#define GTPUAH_PARAM_ONLY_ONCE 1 -#define XT_GTPUAH_VERSION IPTABLES_VERSION_STRING -#define gtpuah_strtoui(s,v,m,M) !string_to_number(s,m,M,v) -#define gtpuah_exit_error exit_error +#define GTPUSP_PARAM_BAD_VALUE 0 +#define GTPUSP_PARAM_ONLY_ONCE 1 +#define XT_GTPUSP_VERSION IPTABLES_VERSION_STRING +#define gtpusp_strtoui(s,v,m,M) !string_to_number(s,m,M,v) +#define gtpusp_exit_error exit_error #elif (IPTVERSION > 135) && (IPTVERSION <= 141) -#define GTPUAH_PARAM_BAD_VALUE P_BAD_VALUE -#define GTPUAH_PARAM_ONLY_ONCE P_ONLY_ONCE -#define XT_GTPUAH_VERSION XTABLES_VERSION -#define gtpuah_param_act param_act -#define gtpuah_strtoui(s,v,m,M) !string_to_number(s,m,M,v) -#define gtpuah_exit_error exit_error +#define GTPUSP_PARAM_BAD_VALUE P_BAD_VALUE +#define GTPUSP_PARAM_ONLY_ONCE P_ONLY_ONCE +#define XT_GTPUSP_VERSION XTABLES_VERSION +#define gtpusp_param_act param_act +#define gtpusp_strtoui(s,v,m,M) !string_to_number(s,m,M,v) +#define gtpusp_exit_error exit_error #elif (IPTVERSION > 141) -#define GTPUAH_PARAM_BAD_VALUE XTF_BAD_VALUE -#define GTPUAH_PARAM_ONLY_ONCE XTF_ONLY_ONCE -#define XT_GTPUAH_VERSION XTABLES_VERSION -#define gtpuah_param_act xtables_param_act -#define gtpuah_strtoui(s,v,m,M) xtables_strtoui(s,NULL,v,m,M) -#define gtpuah_exit_error xtables_error +#define GTPUSP_PARAM_BAD_VALUE XTF_BAD_VALUE +#define GTPUSP_PARAM_ONLY_ONCE XTF_ONLY_ONCE +#define XT_GTPUSP_VERSION XTABLES_VERSION +#define gtpusp_param_act xtables_param_act +#define gtpusp_strtoui(s,v,m,M) xtables_strtoui(s,NULL,v,m,M) +#define gtpusp_exit_error xtables_error #endif enum { @@ -57,10 +57,10 @@ enum { PARAM_ACTION = 1 << 4, }; -static void GTPUAH_help(void) +static void GTPUSP_help(void) { printf( - "GTPUAH target options\n" + "GTPUSP target options\n" " --action value Set action \n" " --own-ip value Set own IP address\n" " --own-tun value Set own tunnel id \n" @@ -70,7 +70,7 @@ static void GTPUAH_help(void) #if (IPTVERSION <= 135) /* Stolen from iptables v1.4.7 code */ -void gtpuah_param_act(unsigned int status, const char *p1, ...) +void gtpusp_param_act(unsigned int status, const char *p1, ...) { const char *p2, *p3; va_list args; @@ -79,7 +79,7 @@ void gtpuah_param_act(unsigned int status, const char *p1, ...) va_start(args, p1); switch (status) { - case GTPUAH_PARAM_ONLY_ONCE: + case GTPUSP_PARAM_ONLY_ONCE: p2 = va_arg(args, const char *); b = va_arg(args, unsigned int); @@ -91,7 +91,7 @@ void gtpuah_param_act(unsigned int status, const char *p1, ...) p1, p2); break; - case GTPUAH_PARAM_BAD_VALUE: + case GTPUSP_PARAM_BAD_VALUE: p2 = va_arg(args, const char *); p3 = va_arg(args, const char *); exit_error(PARAMETER_PROBLEM, @@ -109,18 +109,18 @@ void gtpuah_param_act(unsigned int status, const char *p1, ...) #endif -static void parse_gtpuah_addr(const char *s, struct xt_gtpuah_target_info *info, int flag) +static void parse_gtpusp_addr(const char *s, struct xt_gtpusp_target_info *info, int flag) { in_addr_t addr; if ((addr = inet_addr(s)) == -1) { switch (flag) { case PARAM_LADDR: - gtpuah_param_act(GTPUAH_PARAM_BAD_VALUE, "GTPUAH", "--own-ip", s); + gtpusp_param_act(GTPUSP_PARAM_BAD_VALUE, "GTPUSP", "--own-ip", s); break; case PARAM_RADDR: - gtpuah_param_act(GTPUAH_PARAM_BAD_VALUE, "GTPUAH", "--peer-ip", s); + gtpusp_param_act(GTPUSP_PARAM_BAD_VALUE, "GTPUSP", "--peer-ip", s); break; } } @@ -136,18 +136,18 @@ static void parse_gtpuah_addr(const char *s, struct xt_gtpuah_target_info *info, } } -static void parse_gtpuah_tunid(char *s, struct xt_gtpuah_target_info *info, int flag) +static void parse_gtpusp_tunid(char *s, struct xt_gtpusp_target_info *info, int flag) { unsigned int value; - if (!gtpuah_strtoui(s, &value, 0, UINT32_MAX)) { + if (!gtpusp_strtoui(s, &value, 0, UINT32_MAX)) { switch (flag) { case PARAM_LTUN: - gtpuah_param_act(GTPUAH_PARAM_BAD_VALUE, "GTPUAH", "--own-tun", s); + gtpusp_param_act(GTPUSP_PARAM_BAD_VALUE, "GTPUSP", "--own-tun", s); break; case PARAM_RTUN: - gtpuah_param_act(GTPUAH_PARAM_BAD_VALUE, "GTPUAH", "--peer-tun", s); + gtpusp_param_act(GTPUSP_PARAM_BAD_VALUE, "GTPUSP", "--peer-tun", s); break; } } @@ -163,57 +163,57 @@ static void parse_gtpuah_tunid(char *s, struct xt_gtpuah_target_info *info, int } } -static void parse_gtpuah_action(char *s, struct xt_gtpuah_target_info *info, unsigned int *flags) +static void parse_gtpusp_action(char *s, struct xt_gtpusp_target_info *info, unsigned int *flags) { if (!strcmp(s, "add")) { - info->action = PARAM_GTPUAH_ACTION_ADD; - *flags |= PARAM_GTPUAH_ACTION_ADD; + info->action = PARAM_GTPUSP_ACTION_ADD; + *flags |= PARAM_GTPUSP_ACTION_ADD; } else { - gtpuah_param_act(GTPUAH_PARAM_BAD_VALUE, "GTPUAH", "--action", s); + gtpusp_param_act(GTPUSP_PARAM_BAD_VALUE, "GTPUSP", "--action", s); } } #if (IPTVERSION <= 135) static int -GTPUAH_parse(int c, char **argv, int invert, unsigned int *flags, +GTPUSP_parse(int c, char **argv, int invert, unsigned int *flags, const struct ipt_entry *entry, struct ipt_entry_target **target) #else static int -GTPUAH_parse(int c, char **argv, int invert, unsigned int *flags, +GTPUSP_parse(int c, char **argv, int invert, unsigned int *flags, const void *entry, struct xt_entry_target **target) #endif { - struct xt_gtpuah_target_info *info = (struct xt_gtpuah_target_info *) (*target)->data; + struct xt_gtpusp_target_info *info = (struct xt_gtpusp_target_info *) (*target)->data; switch (c) { case '1': - gtpuah_param_act(GTPUAH_PARAM_ONLY_ONCE, "GTPUAH", "--own-ip", *flags & PARAM_LADDR); - parse_gtpuah_addr(optarg, info, PARAM_LADDR); + gtpusp_param_act(GTPUSP_PARAM_ONLY_ONCE, "GTPUSP", "--own-ip", *flags & PARAM_LADDR); + parse_gtpusp_addr(optarg, info, PARAM_LADDR); *flags |= PARAM_LADDR; return 1; case '2': - gtpuah_param_act(GTPUAH_PARAM_ONLY_ONCE, "GTPUAH", "--own-tun", *flags & PARAM_LTUN); - parse_gtpuah_tunid(optarg, info, PARAM_LTUN); + gtpusp_param_act(GTPUSP_PARAM_ONLY_ONCE, "GTPUSP", "--own-tun", *flags & PARAM_LTUN); + parse_gtpusp_tunid(optarg, info, PARAM_LTUN); *flags |= PARAM_LTUN; return 1; case '3': - gtpuah_param_act(GTPUAH_PARAM_ONLY_ONCE, "GTPUAH", "--peer-ip", *flags & PARAM_RADDR); - parse_gtpuah_addr(optarg, info, PARAM_RADDR); + gtpusp_param_act(GTPUSP_PARAM_ONLY_ONCE, "GTPUSP", "--peer-ip", *flags & PARAM_RADDR); + parse_gtpusp_addr(optarg, info, PARAM_RADDR); *flags |= PARAM_RADDR; return 1; case '4': - gtpuah_param_act(GTPUAH_PARAM_ONLY_ONCE, "GTPUAH", "--peer-tun", *flags & PARAM_RTUN); - parse_gtpuah_tunid(optarg, info, PARAM_RTUN); + gtpusp_param_act(GTPUSP_PARAM_ONLY_ONCE, "GTPUSP", "--peer-tun", *flags & PARAM_RTUN); + parse_gtpusp_tunid(optarg, info, PARAM_RTUN); *flags |= PARAM_RTUN; return 1; case '5': - gtpuah_param_act(GTPUAH_PARAM_ONLY_ONCE, "GTPUAH", "--action", *flags & PARAM_ACTION); - parse_gtpuah_action(optarg, info, flags); + gtpusp_param_act(GTPUSP_PARAM_ONLY_ONCE, "GTPUSP", "--action", *flags & PARAM_ACTION); + parse_gtpusp_action(optarg, info, flags); *flags |= PARAM_ACTION; return 1; } @@ -221,33 +221,33 @@ GTPUAH_parse(int c, char **argv, int invert, unsigned int *flags, return 1; } -static void GTPUAH_check(unsigned int flags) +static void GTPUSP_check(unsigned int flags) { if (!(flags & PARAM_ACTION)) { - gtpuah_exit_error(PARAMETER_PROBLEM, "GTPUAH: You must specify action"); + gtpusp_exit_error(PARAMETER_PROBLEM, "GTPUSP: You must specify action"); } if (!(flags & PARAM_LADDR)) { - gtpuah_exit_error(PARAMETER_PROBLEM, "GTPUAH: You must specify local addr"); + gtpusp_exit_error(PARAMETER_PROBLEM, "GTPUSP: You must specify local addr"); } if (!(flags & PARAM_LTUN)) { - gtpuah_exit_error(PARAMETER_PROBLEM, "GTPUAH: You must specify local tunnel id"); + gtpusp_exit_error(PARAMETER_PROBLEM, "GTPUSP: You must specify local tunnel id"); } if (!(flags & PARAM_RADDR)) { - gtpuah_exit_error(PARAMETER_PROBLEM, "GTPUAH: You must specify remote addr"); + gtpusp_exit_error(PARAMETER_PROBLEM, "GTPUSP: You must specify remote addr"); } if (!(flags & PARAM_RTUN)) { - gtpuah_exit_error(PARAMETER_PROBLEM, "GTPUAH: You must specify remote tunnel id"); + gtpusp_exit_error(PARAMETER_PROBLEM, "GTPUSP: You must specify remote tunnel id"); } } static void convert_action_to_string(int action, char *actionstr) { switch(action) { - case PARAM_GTPUAH_ACTION_ADD: + case PARAM_GTPUSP_ACTION_ADD: sprintf (actionstr, "add"); break; @@ -259,19 +259,19 @@ static void convert_action_to_string(int action, char *actionstr) #if (IPTVERSION <= 135) static void -GTPUAH_print(const struct ipt_ip *ip, +GTPUSP_print(const struct ipt_ip *ip, const struct ipt_entry_target *target, int numeric) #else static void -GTPUAH_print(const void *ip, +GTPUSP_print(const void *ip, const struct xt_entry_target *target, int numeric) #endif { - const struct xt_gtpuah_target_info *info = - (struct xt_gtpuah_target_info *) target->data; + const struct xt_gtpusp_target_info *info = + (struct xt_gtpusp_target_info *) target->data; char laddr[64], raddr[64], actionstr[32]; @@ -279,11 +279,11 @@ GTPUAH_print(const void *ip, sprintf (laddr, "%s", inet_ntoa(*(struct in_addr*)&info->laddr)); sprintf (raddr, "%s", inet_ntoa(*(struct in_addr*)&info->raddr)); - printf("GTPUAH self: %s tunnel: 0x%x / peer: %s tunnel: 0x%x / action: %s", + printf("GTPUSP self: %s tunnel: 0x%x / peer: %s tunnel: 0x%x / action: %s", laddr, info->ltun, raddr, info->rtun, actionstr); } -static struct option GTPUAH_opts[] = { +static struct option GTPUSP_opts[] = { { "own-ip", 1, NULL, '1' }, { "own-tun", 1, NULL, '2' }, { "peer-ip", 1, NULL, '3' }, @@ -293,30 +293,30 @@ static struct option GTPUAH_opts[] = { }; #if (IPTVERSION <= 135) -static struct iptables_target gtpuah_tg_reg = { +static struct iptables_target gtpusp_tg_reg = { #else -static struct xtables_target gtpuah_tg_reg = { +static struct xtables_target gtpusp_tg_reg = { #endif - .name = "GTPUAH", - .version = XT_GTPUAH_VERSION, + .name = "GTPUSP", + .version = XT_GTPUSP_VERSION, #if (IPTVERSION > 135) .family = NFPROTO_IPV4, #endif - .size = XT_ALIGN(sizeof(struct xt_gtpuah_target_info)), - .userspacesize = XT_ALIGN(sizeof(struct xt_gtpuah_target_info)), - .help = GTPUAH_help, - .parse = GTPUAH_parse, - .final_check = GTPUAH_check, - .print = GTPUAH_print, - .extra_opts = GTPUAH_opts, + .size = XT_ALIGN(sizeof(struct xt_gtpusp_target_info)), + .userspacesize = XT_ALIGN(sizeof(struct xt_gtpusp_target_info)), + .help = GTPUSP_help, + .parse = GTPUSP_parse, + .final_check = GTPUSP_check, + .print = GTPUSP_print, + .extra_opts = GTPUSP_opts, }; void _init(void) { #if (IPTVERSION <= 135) - register_target(>puah_tg_reg); + register_target(>pusp_tg_reg); #else - xtables_register_target(>puah_tg_reg); + xtables_register_target(>pusp_tg_reg); #endif } diff --git a/openair-cn/GTPV1-U/GTPUAH/xt_GTPUAH.c b/openair-cn/GTPV1-U/GTPU_SP/xt_GTPUSP.c similarity index 77% rename from openair-cn/GTPV1-U/GTPUAH/xt_GTPUAH.c rename to openair-cn/GTPV1-U/GTPU_SP/xt_GTPUSP.c index 1da3edbdb2..24f210e371 100755 --- a/openair-cn/GTPV1-U/GTPUAH/xt_GTPUAH.c +++ b/openair-cn/GTPV1-U/GTPU_SP/xt_GTPUSP.c @@ -47,14 +47,14 @@ #if defined(CONFIG_IP6_NF_IPTABLES) || defined(CONFIG_IP6_NF_IPTABLES_MODULE) # define WITH_IPV6 1 #endif -#include "xt_GTPUAH.h" +#include "xt_GTPUSP.h" #if !(defined KVERSION) # error "Kernel version is not defined!!!! Exiting." #endif -#define TRACE_IN_KERN_LOG 1 +#define GTPU_TRACE_IN_KERN_LOG 0 -#if defined(TRACE_IN_KERN_LOG) +#if defined(GTPU_TRACE_IN_KERN_LOG) #define PR_INFO(fORMAT, aRGS...) pr_info(fORMAT, ##aRGS) #else #define PR_INFO(fORMAT, aRGS...) @@ -62,27 +62,27 @@ #define INT_MODULE_PARM(n, v) static int n = v; module_param(n, int, 0444) #define STRING_MODULE_PARM(s, v) static char* s = v; module_param(s, charp, 0000); //----------------------------------------------------------------------------- -static char* _gtpuah_nf_inet_hook_2_string(int nf_inet_hookP); -static void _gtpuah_print_hex_octets(unsigned char* data_pP, unsigned short sizeP); -static void _gtpuah_tg4_add(struct sk_buff *old_skb_pP, const struct xt_action_param *par_pP); +static char* _gtpusp_nf_inet_hook_2_string(int nf_inet_hookP); +static void _gtpusp_print_hex_octets(unsigned char* data_pP, unsigned short sizeP); +static void _gtpusp_tg4_add(struct sk_buff *old_skb_pP, const struct xt_action_param *par_pP); #ifdef WITH_IPV6 -static void _gtpuah_tg6_add(struct sk_buff *old_skb_pP, const struct xt_action_param *par_pP); -static unsigned int _gtpuah_tg6(struct sk_buff *skb_pP, const struct xt_action_param *par_pP); +static void _gtpusp_tg6_add(struct sk_buff *old_skb_pP, const struct xt_action_param *par_pP); +static unsigned int _gtpusp_tg6(struct sk_buff *skb_pP, const struct xt_action_param *par_pP); #endif -static unsigned int _gtpuah_tg4(struct sk_buff *skb_pP, const struct xt_action_param *par_pP); -static int __init gtpuah_tg_init(void); -static void __exit gtpuah_tg_exit(void); +static unsigned int _gtpusp_tg4(struct sk_buff *skb_pP, const struct xt_action_param *par_pP); +static int __init gtpusp_tg_init(void); +static void __exit gtpusp_tg_exit(void); static int _udp_thread(void *data); -static int _gtpuah_ksocket_send(struct socket *sock_pP, struct sockaddr_in *addr_pP, unsigned char *gtpuh_pP, int len_gtpP, unsigned char *buf_ip_pP, int len_ipP); -static int _gtpuah_ksocket_receive(struct socket* sock_pP, struct sockaddr_in* addr_pP, unsigned char* buf_pP, int lenP); -static int _gtpuah_ksocket_process_gtp(const unsigned char * const rx_buf_pP, const int lenP, unsigned char* tx_buf_pP); +static int _gtpusp_ksocket_send(struct socket *sock_pP, struct sockaddr_in *addr_pP, unsigned char *gtpuh_pP, int len_gtpP, unsigned char *buf_ip_pP, int len_ipP); +static int _gtpusp_ksocket_receive(struct socket* sock_pP, struct sockaddr_in* addr_pP, unsigned char* buf_pP, int lenP); +static int _gtpusp_ksocket_process_gtp(const unsigned char * const rx_buf_pP, const int lenP, unsigned char* tx_buf_pP); //----------------------------------------------------------------------------- -#define MODULE_NAME "GTPUAH" +#define MODULE_NAME "GTPUSP" MODULE_LICENSE("GPL"); MODULE_AUTHOR("Pradip Biswas "); MODULE_DESCRIPTION("GTPu Data Path extension on netfilter"); //----------------------------------------------------------------------------- -static struct xt_target gtpuah_tg_reg[] __read_mostly = { +static struct xt_target gtpusp_tg_reg[] __read_mostly = { { .name = MODULE_NAME, .revision = 0, @@ -91,8 +91,8 @@ static struct xt_target gtpuah_tg_reg[] __read_mostly = { (1 << NF_INET_LOCAL_IN) | (1 << NF_INET_FORWARD), .table = "mangle", - .target = _gtpuah_tg4, - .targetsize = sizeof(struct xt_gtpuah_target_info), + .target = _gtpusp_tg4, + .targetsize = sizeof(struct xt_gtpusp_target_info), .me = THIS_MODULE, }, #ifdef WITH_IPV6 @@ -104,8 +104,8 @@ static struct xt_target gtpuah_tg_reg[] __read_mostly = { (1 << NF_INET_LOCAL_IN) | (1 << NF_INET_FORWARD), .table = "mangle", - .target = _gtpuah_tg6, - .targetsize = sizeof(struct xt_gtpuah_target_info), + .target = _gtpusp_tg6, + .targetsize = sizeof(struct xt_gtpusp_target_info), .me = THIS_MODULE, }, #endif @@ -138,14 +138,14 @@ struct gtpuhdr { u_int16_t length; u_int32_t tunid; }; -typedef struct gtpuah_sock_s { +typedef struct gtpusp_sock_s { struct task_struct *thread; struct sockaddr_in addr; struct socket *sock; struct sockaddr_in addr_send; int running; int thread_stop_requested; -} gtpuah_sock_t; +} gtpusp_sock_t; //----------------------------------------------------------------------------- #define GTPU_HDR_PNBIT 1 @@ -155,7 +155,7 @@ typedef struct gtpuah_sock_s { #define GTPU_FAILURE 1 #define GTPU_SUCCESS !GTPU_FAILURE -#define GTPUAH_2_PRINT_BUFFER_LEN 8192 +#define GTPUSP_2_PRINT_BUFFER_LEN 8192 #define IP_MORE_FRAGMENTS 0x2000 #define NIPADDR(addr) \ @@ -164,8 +164,8 @@ typedef struct gtpuah_sock_s { (uint8_t)((addr & 0x00FF0000) >> 16), \ (uint8_t)((addr & 0xFF000000) >> 24) //----------------------------------------------------------------------------- -static char _gtpuah_print_buffer[GTPUAH_2_PRINT_BUFFER_LEN]; -gtpuah_sock_t _gtpuah_sock; +static char _gtpusp_print_buffer[GTPUSP_2_PRINT_BUFFER_LEN]; +gtpusp_sock_t _gtpusp_sock; INT_MODULE_PARM(gtpu_sgw_port, 2152); MODULE_PARM_DESC(gtpu_sgw_port, "UDP port number for S1U interface (s-GW side)"); @@ -178,7 +178,7 @@ MODULE_PARM_DESC(sgw_addr, "IPv4 address of the S1U IP interface"); //----------------------------------------------------------------------------- static char* -_gtpuah_icmph_type_2_string(uint8_t typeP) +_gtpusp_icmph_type_2_string(uint8_t typeP) //----------------------------------------------------------------------------- { switch (typeP) { @@ -200,7 +200,7 @@ _gtpuah_icmph_type_2_string(uint8_t typeP) } //----------------------------------------------------------------------------- static char* -_gtpuah_nf_inet_hook_2_string(int nf_inet_hookP) +_gtpusp_nf_inet_hook_2_string(int nf_inet_hookP) { //----------------------------------------------------------------------------- switch (nf_inet_hookP) { @@ -230,7 +230,7 @@ _gtpuah_nf_inet_hook_2_string(int nf_inet_hookP) } //----------------------------------------------------------------------------- void -_gtpuah_print_hex_octets(unsigned char* data_pP, unsigned short sizeP) +_gtpusp_print_hex_octets(unsigned char* data_pP, unsigned short sizeP) { //----------------------------------------------------------------------------- @@ -255,27 +255,27 @@ _gtpuah_print_hex_octets(unsigned char* data_pP, unsigned short sizeP) s = tv.tv_sec % 60; snprintf(timeofday, 64, "%02d:%02d:%02d.%06ld", h,m,s,tv.tv_usec); - buffer_marker+=snprintf(&_gtpuah_print_buffer[buffer_marker], GTPUAH_2_PRINT_BUFFER_LEN - buffer_marker,"%s------+-------------------------------------------------+\n",timeofday); - buffer_marker+=snprintf(&_gtpuah_print_buffer[buffer_marker], GTPUAH_2_PRINT_BUFFER_LEN - buffer_marker,"%s | 0 1 2 3 4 5 6 7 8 9 a b c d e f |\n",timeofday); - buffer_marker+=snprintf(&_gtpuah_print_buffer[buffer_marker], GTPUAH_2_PRINT_BUFFER_LEN - buffer_marker,"%s------+-------------------------------------------------+\n",timeofday); - pr_info("%s",_gtpuah_print_buffer); + buffer_marker+=snprintf(&_gtpusp_print_buffer[buffer_marker], GTPUSP_2_PRINT_BUFFER_LEN - buffer_marker,"%s------+-------------------------------------------------+\n",timeofday); + buffer_marker+=snprintf(&_gtpusp_print_buffer[buffer_marker], GTPUSP_2_PRINT_BUFFER_LEN - buffer_marker,"%s | 0 1 2 3 4 5 6 7 8 9 a b c d e f |\n",timeofday); + buffer_marker+=snprintf(&_gtpusp_print_buffer[buffer_marker], GTPUSP_2_PRINT_BUFFER_LEN - buffer_marker,"%s------+-------------------------------------------------+\n",timeofday); + pr_info("%s",_gtpusp_print_buffer); buffer_marker = 0; for (octet_index = 0; octet_index < sizeP; octet_index++) { if ((octet_index % 16) == 0) { if (octet_index != 0) { - buffer_marker+=snprintf(&_gtpuah_print_buffer[buffer_marker], GTPUAH_2_PRINT_BUFFER_LEN - buffer_marker, " |\n"); - pr_info("%s",_gtpuah_print_buffer); + buffer_marker+=snprintf(&_gtpusp_print_buffer[buffer_marker], GTPUSP_2_PRINT_BUFFER_LEN - buffer_marker, " |\n"); + pr_info("%s",_gtpusp_print_buffer); buffer_marker = 0; } - buffer_marker+=snprintf(&_gtpuah_print_buffer[buffer_marker], GTPUAH_2_PRINT_BUFFER_LEN - buffer_marker, "%s %04ld |",timeofday, octet_index); + buffer_marker+=snprintf(&_gtpusp_print_buffer[buffer_marker], GTPUSP_2_PRINT_BUFFER_LEN - buffer_marker, "%s %04ld |",timeofday, octet_index); } /* * Print every single octet in hexadecimal form */ - buffer_marker+=snprintf(&_gtpuah_print_buffer[buffer_marker], GTPUAH_2_PRINT_BUFFER_LEN - buffer_marker, " %02x", data_pP[octet_index]); + buffer_marker+=snprintf(&_gtpusp_print_buffer[buffer_marker], GTPUSP_2_PRINT_BUFFER_LEN - buffer_marker, " %02x", data_pP[octet_index]); /* * Align newline and pipes according to the octets in groups of 2 */ @@ -285,11 +285,11 @@ _gtpuah_print_hex_octets(unsigned char* data_pP, unsigned short sizeP) * Append enough spaces and put final pipe */ for (aindex = octet_index; aindex < 16; ++aindex) - buffer_marker+=snprintf(&_gtpuah_print_buffer[buffer_marker], GTPUAH_2_PRINT_BUFFER_LEN - buffer_marker, " "); + buffer_marker+=snprintf(&_gtpusp_print_buffer[buffer_marker], GTPUSP_2_PRINT_BUFFER_LEN - buffer_marker, " "); //SGI_IF_DEBUG(" "); - buffer_marker+=snprintf(&_gtpuah_print_buffer[buffer_marker], GTPUAH_2_PRINT_BUFFER_LEN - buffer_marker, " |\n"); - pr_info("%s",_gtpuah_print_buffer); + buffer_marker+=snprintf(&_gtpusp_print_buffer[buffer_marker], GTPUSP_2_PRINT_BUFFER_LEN - buffer_marker, " |\n"); + pr_info("%s",_gtpusp_print_buffer); } // for uplink GTPU traffic on S-GW @@ -307,18 +307,18 @@ static int _udp_thread(void *data) unsigned char gtp_resp[1024]; /* kernel thread initialization */ - _gtpuah_sock.running = 1; + _gtpusp_sock.running = 1; PR_INFO(MODULE_NAME": listening on port %d\n", gtpu_sgw_port); /* main loop */ - while(_gtpuah_sock.thread_stop_requested == 0){ + while(_gtpusp_sock.thread_stop_requested == 0){ if (kthread_should_stop()) { - _gtpuah_sock.running = 0; + _gtpusp_sock.running = 0; PR_INFO(MODULE_NAME": kthread_stop initiated exit at %lu \n", jiffies); return -1; //Exit from the thread. Return value will be passed to kthread_stop() } - size = _gtpuah_ksocket_receive(_gtpuah_sock.sock, &_gtpuah_sock.addr, buf, bufsize); + size = _gtpusp_ksocket_receive(_gtpusp_sock.sock, &_gtpusp_sock.addr, buf, bufsize); if (size <= 0) { if (size != -EAGAIN) { @@ -337,12 +337,12 @@ static int _udp_thread(void *data) #endif PR_INFO(MODULE_NAME": received %d bytes\n", size); - if ((tx_size = _gtpuah_ksocket_process_gtp(buf, size, gtp_resp)) > 0) { - //ksocket_send(_gtpuah_sock.sock, &_gtpuah_sock.addr_send, buf, gtp_resp, tx_size, NULL, 0)); + if ((tx_size = _gtpusp_ksocket_process_gtp(buf, size, gtp_resp)) > 0) { + //ksocket_send(_gtpusp_sock.sock, &_gtpusp_sock.addr_send, buf, gtp_resp, tx_size, NULL, 0)); } } } - _gtpuah_sock.running = 0; + _gtpusp_sock.running = 0; if (kthread_should_stop()) { PR_INFO(MODULE_NAME": kthread_stop initiated exit at %lu \n", jiffies); return -1; //Exit from the thread. Return value will be passed to kthread_stop() @@ -352,7 +352,7 @@ static int _udp_thread(void *data) } //----------------------------------------------------------------------------- -static int _gtpuah_ksocket_process_gtp(const unsigned char * const rx_buf_pP, const int lenP, unsigned char* tx_buf_pP) +static int _gtpusp_ksocket_process_gtp(const unsigned char * const rx_buf_pP, const int lenP, unsigned char* tx_buf_pP) //----------------------------------------------------------------------------- { gtpv1u_msg_t gtpv1u_msg; @@ -482,7 +482,7 @@ free_skb: } //----------------------------------------------------------------------------- -static int _gtpuah_ksocket_receive(struct socket* sock_pP, struct sockaddr_in* addr_pP, unsigned char* buf_pP, int lenP) +static int _gtpusp_ksocket_receive(struct socket* sock_pP, struct sockaddr_in* addr_pP, unsigned char* buf_pP, int lenP) //----------------------------------------------------------------------------- { struct msghdr msg; @@ -517,7 +517,7 @@ static int _gtpuah_ksocket_receive(struct socket* sock_pP, struct sockaddr_in* a } //----------------------------------------------------------------------------- -static int _gtpuah_ksocket_send(struct socket *sock_pP, struct sockaddr_in *addr_pP, unsigned char *gtpuh_pP, int len_gtpP, unsigned char *buf_ip_pP, int len_ipP) +static int _gtpusp_ksocket_send(struct socket *sock_pP, struct sockaddr_in *addr_pP, unsigned char *gtpuh_pP, int len_gtpP, unsigned char *buf_ip_pP, int len_ipP) //----------------------------------------------------------------------------- { struct msghdr msg; @@ -566,7 +566,7 @@ static int _gtpuah_ksocket_send(struct socket *sock_pP, struct sockaddr_in *addr #ifdef WITH_IPV6 //----------------------------------------------------------------------------- static void -_gtpuah_tg6_add(struct sk_buff *old_skb_pP, const struct xt_action_param *par_pP) +_gtpusp_tg6_add(struct sk_buff *old_skb_pP, const struct xt_action_param *par_pP) { //----------------------------------------------------------------------------- } @@ -574,7 +574,7 @@ _gtpuah_tg6_add(struct sk_buff *old_skb_pP, const struct xt_action_param *par_pP //----------------------------------------------------------------------------- static void -_gtpuah_tg4_add(struct sk_buff *old_skb_pP, const struct xt_action_param *par_pP) +_gtpusp_tg4_add(struct sk_buff *old_skb_pP, const struct xt_action_param *par_pP) { //----------------------------------------------------------------------------- struct iphdr *old_iph_p = ip_hdr(old_skb_pP); @@ -596,21 +596,21 @@ _gtpuah_tg4_add(struct sk_buff *old_skb_pP, const struct xt_action_param *par_pP //---------------------------------------------------------------------------- ct = nf_ct_get(old_skb_pP, &ctinfo); if (ct == NULL) { - PR_INFO(MODULE_NAME": _gtpuah_target_add force targinfo ltun %u to skb_pP mark %u\n", - ((const struct xt_gtpuah_target_info *)(par_pP->targinfo))->ltun, + PR_INFO(MODULE_NAME": _gtpusp_target_add force targinfo ltun %u to skb_pP mark %u\n", + ((const struct xt_gtpusp_target_info *)(par_pP->targinfo))->ltun, old_skb_pP->mark); - newmark = ((const struct xt_gtpuah_target_info *)(par_pP->targinfo))->ltun; + newmark = ((const struct xt_gtpusp_target_info *)(par_pP->targinfo))->ltun; } else { //XT_CONNMARK_RESTORE: newmark = old_skb_pP->mark ^ ct->mark; - PR_INFO(MODULE_NAME": _gtpuah_target_add restore mark %u (skb mark %u ct mark %u) len %u sgw addr %x\n", + PR_INFO(MODULE_NAME": _gtpusp_target_add restore mark %u (skb mark %u ct mark %u) len %u sgw addr %x\n", newmark, old_skb_pP->mark, ct->mark, orig_iplen, - ((const struct xt_gtpuah_target_info *)(par_pP->targinfo))->raddr); - if (newmark != ((const struct xt_gtpuah_target_info *)(par_pP->targinfo))->ltun) { - pr_warn(MODULE_NAME": _gtpuah_target_add restore mark 0x%x mismatch ltun 0x%x (rtun 0x%x)", - newmark, ((const struct xt_gtpuah_target_info *)(par_pP->targinfo))->ltun, - ((const struct xt_gtpuah_target_info *)(par_pP->targinfo))->rtun); + ((const struct xt_gtpusp_target_info *)(par_pP->targinfo))->raddr); + if (newmark != ((const struct xt_gtpusp_target_info *)(par_pP->targinfo))->ltun) { + pr_warn(MODULE_NAME": _gtpusp_target_add restore mark 0x%x mismatch ltun 0x%x (rtun 0x%x)", + newmark, ((const struct xt_gtpusp_target_info *)(par_pP->targinfo))->ltun, + ((const struct xt_gtpusp_target_info *)(par_pP->targinfo))->rtun); } } @@ -619,28 +619,28 @@ _gtpuah_tg4_add(struct sk_buff *old_skb_pP, const struct xt_action_param *par_pP gtpuh.flags = 0x30; /* v1 and Protocol-type=GTP */ gtpuh.msgtype = 0xff; /* T-PDU */ gtpuh.length = htons(orig_iplen); - gtpuh.tunid = htonl(((const struct xt_gtpuah_target_info *)(par_pP->targinfo))->rtun); + gtpuh.tunid = htonl(((const struct xt_gtpusp_target_info *)(par_pP->targinfo))->rtun); - _gtpuah_sock.addr_send.sin_addr.s_addr = ((const struct xt_gtpuah_target_info *)(par_pP->targinfo))->raddr; - _gtpuah_ksocket_send(_gtpuah_sock.sock, &_gtpuah_sock.addr_send, (unsigned char*)>puh, sizeof(gtpuh), (unsigned char*)old_iph_p, orig_iplen); + _gtpusp_sock.addr_send.sin_addr.s_addr = ((const struct xt_gtpusp_target_info *)(par_pP->targinfo))->raddr; + _gtpusp_ksocket_send(_gtpusp_sock.sock, &_gtpusp_sock.addr_send, (unsigned char*)>puh, sizeof(gtpuh), (unsigned char*)old_iph_p, orig_iplen); return ; } #ifdef WITH_IPV6 //----------------------------------------------------------------------------- static unsigned int -_gtpuah_tg6(struct sk_buff *skb_pP, const struct xt_action_param *par_pP) +_gtpusp_tg6(struct sk_buff *skb_pP, const struct xt_action_param *par_pP) { //----------------------------------------------------------------------------- - const struct xt_gtpuah_target_info *tgi_p = par_pP->targinfo; + const struct xt_gtpusp_target_info *tgi_p = par_pP->targinfo; if (tgi_p == NULL) { return NF_ACCEPT; } - if (tgi_p->action == PARAM_GTPUAH_ACTION_ADD) { - _gtpuah_tg6_add(skb_pP, par_pP); + if (tgi_p->action == PARAM_GTPUSP_ACTION_ADD) { + _gtpusp_tg6_add(skb_pP, par_pP); return NF_DROP; // TODO } @@ -650,17 +650,17 @@ _gtpuah_tg6(struct sk_buff *skb_pP, const struct xt_action_param *par_pP) //----------------------------------------------------------------------------- static unsigned int -_gtpuah_tg4(struct sk_buff *skb_pP, const struct xt_action_param *par_pP) +_gtpusp_tg4(struct sk_buff *skb_pP, const struct xt_action_param *par_pP) { //----------------------------------------------------------------------------- - const struct xt_gtpuah_target_info *tgi_p = par_pP->targinfo; + const struct xt_gtpusp_target_info *tgi_p = par_pP->targinfo; if (tgi_p == NULL) { return NF_ACCEPT; } - if (tgi_p->action == PARAM_GTPUAH_ACTION_ADD) { - _gtpuah_tg4_add(skb_pP, par_pP); + if (tgi_p->action == PARAM_GTPUSP_ACTION_ADD) { + _gtpusp_tg4_add(skb_pP, par_pP); return NF_DROP; } @@ -669,7 +669,7 @@ _gtpuah_tg4(struct sk_buff *skb_pP, const struct xt_action_param *par_pP) //----------------------------------------------------------------------------- static int -__init gtpuah_tg_init(void) +__init gtpusp_tg_init(void) //----------------------------------------------------------------------------- { int err; @@ -689,69 +689,69 @@ __init gtpuah_tg_init(void) gtpu_enb_port, gtpu_sgw_port, sgw_addr); // UDP socket socket - memset(&_gtpuah_sock, 0, sizeof(gtpuah_sock_t)); + memset(&_gtpusp_sock, 0, sizeof(gtpusp_sock_t)); /* create a socket */ - if ((err = sock_create(AF_INET, SOCK_DGRAM, IPPROTO_UDP, &_gtpuah_sock.sock)) < 0 ) { + if ((err = sock_create(AF_INET, SOCK_DGRAM, IPPROTO_UDP, &_gtpusp_sock.sock)) < 0 ) { PR_INFO(": Could not create a datagram socket, error = %d\n", -ENXIO); return err; } - _gtpuah_sock.addr.sin_family = AF_INET; - _gtpuah_sock.addr.sin_port = htons(gtpu_sgw_port); - _gtpuah_sock.addr.sin_addr.s_addr = in_aton(sgw_addr); + _gtpusp_sock.addr.sin_family = AF_INET; + _gtpusp_sock.addr.sin_port = htons(gtpu_sgw_port); + _gtpusp_sock.addr.sin_addr.s_addr = in_aton(sgw_addr); - _gtpuah_sock.addr_send.sin_family = AF_INET; - _gtpuah_sock.addr_send.sin_port = htons(gtpu_enb_port); - _gtpuah_sock.addr_send.sin_addr.s_addr = in_aton(sgw_addr); + _gtpusp_sock.addr_send.sin_family = AF_INET; + _gtpusp_sock.addr_send.sin_port = htons(gtpu_enb_port); + _gtpusp_sock.addr_send.sin_addr.s_addr = in_aton(sgw_addr); - _gtpuah_sock.thread_stop_requested = 0; + _gtpusp_sock.thread_stop_requested = 0; - if ( (err = _gtpuah_sock.sock->ops->bind(_gtpuah_sock.sock, (struct sockaddr *)&_gtpuah_sock.addr, sizeof(struct sockaddr) ) ) < 0) { + if ( (err = _gtpusp_sock.sock->ops->bind(_gtpusp_sock.sock, (struct sockaddr *)&_gtpusp_sock.addr, sizeof(struct sockaddr) ) ) < 0) { pr_info(MODULE_NAME": Could not bind socket, error = %d\n", -err); goto close_and_out; } // start kernel thread - _gtpuah_sock.thread = kthread_run((void *)_udp_thread, NULL, MODULE_NAME); - if (IS_ERR(_gtpuah_sock.thread)) { + _gtpusp_sock.thread = kthread_run((void *)_udp_thread, NULL, MODULE_NAME); + if (IS_ERR(_gtpusp_sock.thread)) { pr_info(MODULE_NAME": unable to start kernel thread\n"); return -ENOMEM; } - if((_gtpuah_sock.thread)) { - wake_up_process(_gtpuah_sock.thread); + if((_gtpusp_sock.thread)) { + wake_up_process(_gtpusp_sock.thread); } - return xt_register_targets(gtpuah_tg_reg, ARRAY_SIZE(gtpuah_tg_reg)); + return xt_register_targets(gtpusp_tg_reg, ARRAY_SIZE(gtpusp_tg_reg)); close_and_out: - sock_release(_gtpuah_sock.sock); - _gtpuah_sock.sock = NULL; + sock_release(_gtpusp_sock.sock); + _gtpusp_sock.sock = NULL; return err; } //----------------------------------------------------------------------------- static void -__exit gtpuah_tg_exit(void) +__exit gtpusp_tg_exit(void) //----------------------------------------------------------------------------- { int err; int loop = 0; - if (_gtpuah_sock.thread==NULL) { + if (_gtpusp_sock.thread==NULL) { pr_info(MODULE_NAME": no kernel thread to kill\n"); } else { - if (_gtpuah_sock.running > 0) { - _gtpuah_sock.thread_stop_requested = 1; + if (_gtpusp_sock.running > 0) { + _gtpusp_sock.thread_stop_requested = 1; pr_info(MODULE_NAME": exit kernel thread requested\n"); do { pr_info(MODULE_NAME": waking up thread with datagram\n"); msleep(5); pr_info(MODULE_NAME": waiting for thread...\n"); loop++; - } while ((_gtpuah_sock.running > 0) && (loop < 20)); - if (_gtpuah_sock.running > 0) { + } while ((_gtpusp_sock.running > 0) && (loop < 20)); + if (_gtpusp_sock.running > 0) { pr_info(MODULE_NAME": stopping kernel thread\n"); - err = kthread_stop(_gtpuah_sock.thread); + err = kthread_stop(_gtpusp_sock.thread); if(!err) { pr_info(MODULE_NAME": Successfully killed kernel thread!\n"); } else { @@ -764,17 +764,17 @@ __exit gtpuah_tg_exit(void) } /* free allocated resources before exit */ - if (_gtpuah_sock.sock != NULL) { - sock_release(_gtpuah_sock.sock); - _gtpuah_sock.sock = NULL; + if (_gtpusp_sock.sock != NULL) { + sock_release(_gtpusp_sock.sock); + _gtpusp_sock.sock = NULL; } - xt_unregister_targets(gtpuah_tg_reg, ARRAY_SIZE(gtpuah_tg_reg)); + xt_unregister_targets(gtpusp_tg_reg, ARRAY_SIZE(gtpusp_tg_reg)); pr_info(MODULE_NAME": Unloading module\n"); } -module_init(gtpuah_tg_init); -module_exit(gtpuah_tg_exit); -MODULE_ALIAS("ipt6_GTPUAH"); -MODULE_ALIAS("ipt_GTPUAH"); +module_init(gtpusp_tg_init); +module_exit(gtpusp_tg_exit); +MODULE_ALIAS("ipt6_GTPUSP"); +MODULE_ALIAS("ipt_GTPUSP"); diff --git a/openair-cn/GTPV1-U/GTPUAH/xt_GTPUAH.h b/openair-cn/GTPV1-U/GTPU_SP/xt_GTPUSP.h similarity index 84% rename from openair-cn/GTPV1-U/GTPUAH/xt_GTPUAH.h rename to openair-cn/GTPV1-U/GTPU_SP/xt_GTPUSP.h index e59b722627..e4d72f5875 100755 --- a/openair-cn/GTPV1-U/GTPUAH/xt_GTPUAH.h +++ b/openair-cn/GTPV1-U/GTPU_SP/xt_GTPUSP.h @@ -9,11 +9,11 @@ * */ -enum xt_gtpuah_mode_ { - PARAM_GTPUAH_ACTION_ADD = 1 << 8, +enum xt_gtpusp_mode_ { + PARAM_GTPUSP_ACTION_ADD = 1 << 8, }; -struct xt_gtpuah_target_info { +struct xt_gtpusp_target_info { u_int32_t laddr __attribute__((aligned(8))); u_int32_t raddr __attribute__((aligned(8))); u_int32_t ltun __attribute__((aligned(8))); diff --git a/openair-cn/GTPV1-U/gtpv1u_eNB.c b/openair-cn/GTPV1-U/gtpv1u_eNB.c index 5514483b67..704123c3b2 100644 --- a/openair-cn/GTPV1-U/gtpv1u_eNB.c +++ b/openair-cn/GTPV1-U/gtpv1u_eNB.c @@ -78,19 +78,19 @@ gtpv1u_eNB_send_init_udp( NwGtpv1uRcT gtpv1u_eNB_log_request( NwGtpv1uLogMgrHandleT hLogMgr, - NwU32T logLevel, + uint32_t logLevel, NwCharT *file, - NwU32T line, + uint32_t line, NwCharT *logStr); NwGtpv1uRcT gtpv1u_eNB_send_udp_msg( NwGtpv1uUdpHandleT udpHandle, - NwU8T *buffer, - NwU32T buffer_len, - NwU32T buffer_offset, - NwU32T peerIpAddr, - NwU16T peerPort); + uint8_t *buffer, + uint32_t buffer_len, + uint32_t buffer_offset, + uint32_t peerIpAddr, + uint16_t peerPort); NwGtpv1uRcT gtpv1u_eNB_process_stack_req( @@ -114,9 +114,9 @@ data_recv_callback( static NwGtpv1uRcT gtpv1u_start_timer_wrapper( NwGtpv1uTimerMgrHandleT tmrMgrHandle, - NwU32T timeoutSec, - NwU32T timeoutUsec, - NwU32T tmrType, + uint32_t timeoutSec, + uint32_t timeoutUsec, + uint32_t tmrType, void *timeoutArg, NwGtpv1uTimerHandleT *hTmr); @@ -142,10 +142,11 @@ gtpv1u_new_data_req( uint32_t buf_offsetP ); -static int +int gtpv1u_create_s1u_tunnel( const instance_t instanceP, - const gtpv1u_enb_create_tunnel_req_t * const create_tunnel_req_pP); + const gtpv1u_enb_create_tunnel_req_t * const create_tunnel_req_pP, + gtpv1u_enb_create_tunnel_resp_t * const create_tunnel_resp_pP); static int gtpv1u_delete_s1u_tunnel( @@ -241,9 +242,9 @@ static int gtpv1u_eNB_send_init_udp(uint16_t port_number) //----------------------------------------------------------------------------- NwGtpv1uRcT gtpv1u_eNB_log_request(NwGtpv1uLogMgrHandleT hLogMgr, - NwU32T logLevel, + uint32_t logLevel, NwCharT *file, - NwU32T line, + uint32_t line, NwCharT *logStr) { LOG_D(GTPU, "%s\n", logStr); @@ -253,11 +254,11 @@ NwGtpv1uRcT gtpv1u_eNB_log_request(NwGtpv1uLogMgrHandleT hLogMgr, //----------------------------------------------------------------------------- NwGtpv1uRcT gtpv1u_eNB_send_udp_msg( NwGtpv1uUdpHandleT udpHandle, - NwU8T *buffer, - NwU32T buffer_len, - NwU32T buffer_offset, - NwU32T peerIpAddr, - NwU16T peerPort) + uint8_t *buffer, + uint32_t buffer_len, + uint32_t buffer_offset, + uint32_t peerIpAddr, + uint16_t peerPort) { // Create and alloc new message MessageDef *message_p = NULL; @@ -491,9 +492,9 @@ int data_recv_callback(uint16_t portP, //----------------------------------------------------------------------------- static NwGtpv1uRcT gtpv1u_start_timer_wrapper( NwGtpv1uTimerMgrHandleT tmrMgrHandle, - NwU32T timeoutSec, - NwU32T timeoutUsec, - NwU32T tmrType, + uint32_t timeoutSec, + uint32_t timeoutUsec, + uint32_t tmrType, void *timeoutArg, NwGtpv1uTimerHandleT *hTmr) { @@ -658,10 +659,12 @@ gtpv1u_new_data_req( } //----------------------------------------------------------------------------- -static int +int gtpv1u_create_s1u_tunnel( - const instance_t instanceP, - const gtpv1u_enb_create_tunnel_req_t * const create_tunnel_req_pP) + const instance_t instanceP, + const gtpv1u_enb_create_tunnel_req_t * const create_tunnel_req_pP, + gtpv1u_enb_create_tunnel_resp_t * const create_tunnel_resp_pP + ) { /* Create a new nw-gtpv1-u stack req using API */ NwGtpv1uUlpApiT stack_req; @@ -689,10 +692,9 @@ gtpv1u_create_s1u_tunnel( create_tunnel_req_pP->num_tunnels, create_tunnel_req_pP->eps_bearer_id[0], create_tunnel_req_pP->sgw_S1u_teid[0]); - message_p = itti_alloc_new_message(TASK_GTPV1_U, GTPV1U_ENB_CREATE_TUNNEL_RESP); - GTPV1U_ENB_CREATE_TUNNEL_RESP(message_p).rnti = create_tunnel_req_pP->rnti; - GTPV1U_ENB_CREATE_TUNNEL_RESP(message_p).status = 0; - GTPV1U_ENB_CREATE_TUNNEL_RESP(message_p).num_tunnels = 0; + create_tunnel_resp_pP->rnti = create_tunnel_req_pP->rnti; + create_tunnel_resp_pP->status = 0; + create_tunnel_resp_pP->num_tunnels = 0; for (i = 0; i < create_tunnel_req_pP->num_tunnels; i++) { ip_offset = 0; @@ -729,10 +731,10 @@ gtpv1u_create_s1u_tunnel( gtpv1u_ue_data_p->ue_id = create_tunnel_req_pP->rnti; gtpv1u_ue_data_p->instance_id = 0; // TO DO - memcpy(>PV1U_ENB_CREATE_TUNNEL_RESP(message_p).enb_addr.buffer, + memcpy(&create_tunnel_resp_pP->enb_addr.buffer, >pv1u_data_g.enb_ip_address_for_S1u_S12_S4_up, sizeof (in_addr_t)); - GTPV1U_ENB_CREATE_TUNNEL_RESP(message_p).enb_addr.length = sizeof (in_addr_t); + create_tunnel_resp_pP->enb_addr.length = sizeof (in_addr_t); addrs_length_in_bytes = create_tunnel_req_pP->sgw_addr[i].length / 8; AssertFatal((addrs_length_in_bytes == 4) || @@ -755,18 +757,19 @@ gtpv1u_create_s1u_tunnel( 16); } - gtpv1u_ue_data_p->bearers[eps_bearer_id - GTPV1U_BEARER_OFFSET].state = BEARER_IN_CONFIG; - gtpv1u_ue_data_p->bearers[eps_bearer_id - GTPV1U_BEARER_OFFSET].teid_eNB = s1u_teid; - gtpv1u_ue_data_p->bearers[eps_bearer_id - GTPV1U_BEARER_OFFSET].teid_sgw = create_tunnel_req_pP->sgw_S1u_teid[i]; - GTPV1U_ENB_CREATE_TUNNEL_RESP(message_p).enb_S1u_teid[i] = s1u_teid; + gtpv1u_ue_data_p->bearers[eps_bearer_id - GTPV1U_BEARER_OFFSET].state = BEARER_IN_CONFIG; + gtpv1u_ue_data_p->bearers[eps_bearer_id - GTPV1U_BEARER_OFFSET].teid_eNB = s1u_teid; + gtpv1u_ue_data_p->bearers[eps_bearer_id - GTPV1U_BEARER_OFFSET].teid_eNB_stack_session = stack_req.apiInfo.createTunnelEndPointInfo.hStackSession; + gtpv1u_ue_data_p->bearers[eps_bearer_id - GTPV1U_BEARER_OFFSET].teid_sgw = create_tunnel_req_pP->sgw_S1u_teid[i]; + create_tunnel_resp_pP->enb_S1u_teid[i] = s1u_teid; } else { - GTPV1U_ENB_CREATE_TUNNEL_RESP(message_p).enb_S1u_teid[i] = 0; - GTPV1U_ENB_CREATE_TUNNEL_RESP(message_p).status = 0xFF; + create_tunnel_resp_pP->enb_S1u_teid[i] = 0; + create_tunnel_resp_pP->status = 0xFF; } - GTPV1U_ENB_CREATE_TUNNEL_RESP(message_p).eps_bearer_id[i] = eps_bearer_id; - GTPV1U_ENB_CREATE_TUNNEL_RESP(message_p).num_tunnels += 1; + create_tunnel_resp_pP->eps_bearer_id[i] = eps_bearer_id; + create_tunnel_resp_pP->num_tunnels += 1; //----------------------- // GTPV1U->PDCP mapping @@ -781,8 +784,8 @@ gtpv1u_create_s1u_tunnel( hash_rc = hashtable_insert(gtpv1u_data_g.teid_mapping, s1u_teid, gtpv1u_teid_data_p); AssertFatal(hash_rc == HASH_TABLE_OK, "Error inserting teid mapping in GTPV1U hashtable"); } else { - GTPV1U_ENB_CREATE_TUNNEL_RESP(message_p).enb_S1u_teid[i] = 0; - GTPV1U_ENB_CREATE_TUNNEL_RESP(message_p).status = 0xFF; + create_tunnel_resp_pP->enb_S1u_teid[i] = 0; + create_tunnel_resp_pP->status = 0xFF; } } MSC_LOG_TX_MESSAGE( @@ -790,13 +793,13 @@ gtpv1u_create_s1u_tunnel( MSC_RRC_ENB, NULL,0, "0 GTPV1U_ENB_CREATE_TUNNEL_RESP rnti %x teid %x", - GTPV1U_ENB_CREATE_TUNNEL_RESP(message_p).rnti, + create_tunnel_resp_pP->rnti, s1u_teid); LOG_D(GTPU, "Tx GTPV1U_ENB_CREATE_TUNNEL_RESP ue rnti %x status %d\n", create_tunnel_req_pP->rnti, - GTPV1U_ENB_CREATE_TUNNEL_RESP(message_p).status); - return itti_send_msg_to_task(TASK_RRC_ENB, instanceP, message_p); + create_tunnel_resp_pP->status); + return 0; } @@ -835,9 +838,7 @@ static int gtpv1u_delete_s1u_tunnel( LOG_D(GTPU, "gtpv1u_delete_s1u_tunnel erab %u %u\n", req_pP->eps_bearer_id[erab_index], teid_eNB); - stack_req.apiInfo.createTunnelEndPointInfo.teid = teid_eNB; - stack_req.apiInfo.createTunnelEndPointInfo.hUlpSession = 0; - stack_req.apiInfo.createTunnelEndPointInfo.hStackSession = 0; + stack_req.apiInfo.destroyTunnelEndPointInfo.hStackSessionHandle = gtpv1u_ue_data_p->bearers[req_pP->eps_bearer_id[erab_index] - GTPV1U_BEARER_OFFSET].teid_eNB_stack_session; rc = nwGtpv1uProcessUlpReq(gtpv1u_data_g.gtpv1u_stack, &stack_req); LOG_D(GTPU, ".\n"); @@ -1000,6 +1001,7 @@ void *gtpv1u_eNB_task(void *args) rc = gtpv1u_eNB_init(); AssertFatal(rc == 0, "gtpv1u_eNB_init Failed"); itti_mark_task_ready(TASK_GTPV1_U); + MSC_START_USE(); while(1) { /* Trying to fetch a message from the message queue. @@ -1015,10 +1017,6 @@ void *gtpv1u_eNB_task(void *args) msg_name_p = ITTI_MSG_NAME(received_message_p); switch (ITTI_MSG_ID(received_message_p)) { - case GTPV1U_ENB_CREATE_TUNNEL_REQ: { - gtpv1u_create_s1u_tunnel(instance, &received_message_p->ittiMsg.Gtpv1uCreateTunnelReq); - } - break; case GTPV1U_ENB_DELETE_TUNNEL_REQ: { gtpv1u_delete_s1u_tunnel(instance, &received_message_p->ittiMsg.Gtpv1uDeleteTunnelReq); @@ -1081,14 +1079,14 @@ void *gtpv1u_eNB_task(void *args) if (rc != NW_GTPV1U_OK) { LOG_E(GTPU, "nwGtpv1uGpduMsgNew failed: 0x%x\n", rc); - MSC_LOG_EVENT(MSC_GTPU_ENB,"Failed send G-PDU ltid %u rtid %u size %u", + MSC_LOG_EVENT(MSC_GTPU_ENB,"0 Failed send G-PDU ltid %u rtid %u size %u", enb_s1u_teid,sgw_s1u_teid,data_req_p->length); } else { rc = nwGtpv1uProcessUlpReq(gtpv1u_data_g.gtpv1u_stack, &stack_req); if (rc != NW_GTPV1U_OK) { LOG_E(GTPU, "nwGtpv1uProcessUlpReq failed: 0x%x\n", rc); - MSC_LOG_EVENT(MSC_GTPU_ENB,"Failed send G-PDU ltid %u rtid %u size %u", + MSC_LOG_EVENT(MSC_GTPU_ENB,"0 Failed send G-PDU ltid %u rtid %u size %u", enb_s1u_teid,sgw_s1u_teid,data_req_p->length); } else { MSC_LOG_TX_MESSAGE( diff --git a/openair-cn/GTPV1-U/gtpv1u_eNB_defs.h b/openair-cn/GTPV1-U/gtpv1u_eNB_defs.h index 454f4effc9..81f00005d9 100644 --- a/openair-cn/GTPV1-U/gtpv1u_eNB_defs.h +++ b/openair-cn/GTPV1-U/gtpv1u_eNB_defs.h @@ -35,7 +35,7 @@ */ #include "hashtable.h" - +#include "asn1_constants.h" #ifndef GTPV1U_ENB_DEFS_H_ #define GTPV1U_ENB_DEFS_H_ @@ -65,8 +65,9 @@ typedef struct gtpv1u_teid_data_s { typedef struct gtpv1u_bearer_s { /* TEID used in dl and ul */ - teid_t teid_eNB; ///< eNB TEID - teid_t teid_sgw; ///< Remote TEID + teid_t teid_eNB; ///< eNB TEID + uintptr_t teid_eNB_stack_session; ///< eNB TEID + teid_t teid_sgw; ///< Remote TEID in_addr_t sgw_ip_addr; struct in6_addr sgw_ip6_addr; tcp_udp_port_t port; diff --git a/openair-cn/GTPV1-U/gtpv1u_eNB_task.h b/openair-cn/GTPV1-U/gtpv1u_eNB_task.h index 701f4c7c93..ce6643b131 100755 --- a/openair-cn/GTPV1-U/gtpv1u_eNB_task.h +++ b/openair-cn/GTPV1-U/gtpv1u_eNB_task.h @@ -36,6 +36,8 @@ #ifndef GTPV1U_ENB_TASK_H_ #define GTPV1U_ENB_TASK_H_ +#include "messages_types.h" + int gtpv1u_new_data_req( uint8_t enb_id, @@ -45,4 +47,11 @@ gtpv1u_new_data_req( uint32_t buf_len); void *gtpv1u_eNB_task(void *args); +int +gtpv1u_create_s1u_tunnel( + const instance_t instanceP, + const gtpv1u_enb_create_tunnel_req_t * const create_tunnel_req_pP, + gtpv1u_enb_create_tunnel_resp_t * const create_tunnel_resp_pP); + + #endif /* GTPV1U_ENB_TASK_H_ */ diff --git a/openair-cn/GTPV1-U/gtpv1u_sgw_defs.h b/openair-cn/GTPV1-U/gtpv1u_sgw_defs.h index 75d72c08d8..a525c388a2 100644 --- a/openair-cn/GTPV1-U/gtpv1u_sgw_defs.h +++ b/openair-cn/GTPV1-U/gtpv1u_sgw_defs.h @@ -48,12 +48,12 @@ typedef enum { BEARER_MAX, } bearer_state_t; -#define BUFFER_TO_NwU32T(buf, x) \ +#define BUFFER_TO_uint32_t(buf, x) \ do { \ - x = ((NwU32T)((buf)[0]) ) | \ - ((NwU32T)((buf)[1]) << 8) | \ - ((NwU32T)((buf)[2]) << 16) | \ - ((NwU32T)((buf)[3]) << 24); \ + x = ((uint32_t)((buf)[0]) ) | \ + ((uint32_t)((buf)[1]) << 8) | \ + ((uint32_t)((buf)[2]) << 16) | \ + ((uint32_t)((buf)[3]) << 24); \ } while(0) diff --git a/openair-cn/GTPV1-U/gtpv1u_task.c b/openair-cn/GTPV1-U/gtpv1u_task.c index efb849c5ea..f98db6056e 100644 --- a/openair-cn/GTPV1-U/gtpv1u_task.c +++ b/openair-cn/GTPV1-U/gtpv1u_task.c @@ -50,13 +50,12 @@ #include "NwLog.h" #include "gtpv1u_sgw_defs.h" #include "NwGtpv1uPrivate.h" +#include "msc.h" //static NwGtpv1uStackHandleT gtpv1u_stack = 0; static gtpv1u_data_t gtpv1u_sgw_data; -#if !defined(ENABLE_USE_GTPU_IN_KERNEL) -static int gtpv1u_send_init_udp(uint16_t port_number); -#endif + static int gtpv1u_create_s1u_tunnel(Gtpv1uCreateTunnelReq *create_tunnel_reqP); static int gtpv1u_delete_s1u_tunnel(Teid_t context_teidP, Teid_t S1U_teidP); static int gtpv1u_update_s1u_tunnel(Gtpv1uUpdateTunnelReq *reqP); @@ -64,17 +63,17 @@ static void *gtpv1u_thread(void *args); NwGtpv1uRcT gtpv1u_send_udp_msg( NwGtpv1uUdpHandleT udpHandle, - NwU8T *buffer, - NwU32T buffer_len, - NwU32T buffer_offset, - NwU32T peerIpAddr, - NwU32T peerPort); + uint8_t *buffer, + uint32_t buffer_len, + uint32_t buffer_offset, + uint32_t peerIpAddr, + uint32_t peerPort); NwGtpv1uRcT gtpv1u_log_request( NwGtpv1uLogMgrHandleT hLogMgr, - NwU32T logLevel, + uint32_t logLevel, NwCharT *file, - NwU32T line, + uint32_t line, NwCharT *logStr); NwGtpv1uRcT gtpv1u_process_stack_req( @@ -149,48 +148,23 @@ void gtpu_print_hex_octets(unsigned char* dataP, unsigned long sizeP) } -#if !defined(ENABLE_USE_GTPU_IN_KERNEL) -static int gtpv1u_send_init_udp(uint16_t port_number) -{ - // Create and alloc new message - MessageDef *message_p; - struct in_addr addr; - - message_p = itti_alloc_new_message(TASK_GTPV1_U, UDP_INIT); - - if (message_p == NULL) { - return -1; - } - - UDP_INIT(message_p).port = port_number; - //LG UDP_INIT(message_p).address = "0.0.0.0"; //ANY address - - addr.s_addr = gtpv1u_sgw_data.sgw_ip_address_for_S1u_S12_S4_up; - UDP_INIT(message_p).address = inet_ntoa(addr); - GTPU_DEBUG("Tx UDP_INIT IP addr %s\n", UDP_INIT(message_p).address); - - return itti_send_msg_to_task(TASK_UDP, INSTANCE_DEFAULT, message_p); -} -#endif - NwGtpv1uRcT gtpv1u_log_request(NwGtpv1uLogMgrHandleT hLogMgr, - NwU32T logLevel, + uint32_t logLevel, NwCharT *file, - NwU32T line, + uint32_t line, NwCharT *logStr) { GTPU_DEBUG("%s\n", logStr); return NW_GTPV1U_OK; } -#if !defined(ENABLE_USE_GTPU_IN_KERNEL) NwGtpv1uRcT gtpv1u_send_udp_msg( NwGtpv1uUdpHandleT udpHandle, - NwU8T *buffer, - NwU32T buffer_len, - NwU32T buffer_offset, - NwU32T peerIpAddr, - NwU32T peerPort) + uint8_t *buffer, + uint32_t buffer_len, + uint32_t buffer_offset, + uint32_t peerIpAddr, + uint32_t peerPort) { // Create and alloc new message MessageDef *message_p; @@ -208,7 +182,7 @@ NwGtpv1uRcT gtpv1u_send_udp_msg( return itti_send_msg_to_task(TASK_UDP, INSTANCE_DEFAULT, message_p); } -#endif + /* Callback called when a gtpv1u message arrived on UDP interface */ NwGtpv1uRcT gtpv1u_process_stack_req( NwGtpv1uUlpHandleT hUlp, @@ -229,7 +203,7 @@ NwGtpv1uRcT gtpv1u_process_stack_req( * task for transmission. */ /*if (NW_GTPV1U_OK != nwGtpv1uMsgGetTpdu(pUlpApi->apiInfo.recvMsgInfo.hMsg, - buffer, (NwU32T *)&buffer_len)) { + buffer, (uint32_t *)&buffer_len)) { GTPU_ERROR("Error while retrieving T-PDU\n"); }*/ GTPU_DEBUG("Received TPDU from gtpv1u stack %u with size %d\n", @@ -397,9 +371,9 @@ static int gtpv1u_update_s1u_tunnel(Gtpv1uUpdateTunnelReq *reqP) static NwGtpv1uRcT gtpv1u_start_timer_wrapper( NwGtpv1uTimerMgrHandleT tmrMgrHandle, - NwU32T timeoutSec, - NwU32T timeoutUsec, - NwU32T tmrType, + uint32_t timeoutSec, + uint32_t timeoutUsec, + uint32_t tmrType, void *timeoutArg, NwGtpv1uTimerHandleT *hTmr) { @@ -441,6 +415,7 @@ static NwGtpv1uRcT gtpv1u_stop_timer_wrapper( static void *gtpv1u_thread(void *args) { itti_mark_task_ready(TASK_GTPV1_U); + MSC_START_USE(); while(1) { /* Trying to fetch a message from the message queue. @@ -451,21 +426,11 @@ static void *gtpv1u_thread(void *args) itti_receive_msg(TASK_GTPV1_U, &received_message_p); DevAssert(received_message_p != NULL); -#if !defined(ENABLE_USE_GTPU_IN_KERNEL) switch (ITTI_MSG_ID(received_message_p)) { - case GTPV1U_CREATE_TUNNEL_REQ: { - gtpv1u_create_s1u_tunnel(&received_message_p->ittiMsg.gtpv1uCreateTunnelReq); - } - break; - case GTPV1U_DELETE_TUNNEL_REQ: { - gtpv1u_delete_s1u_tunnel(received_message_p->ittiMsg.gtpv1uDeleteTunnelReq.context_teid, received_message_p->ittiMsg.gtpv1uDeleteTunnelReq.S1u_teid); - } - break; - - case GTPV1U_UPDATE_TUNNEL_REQ: { - gtpv1u_update_s1u_tunnel(&received_message_p->ittiMsg.gtpv1uUpdateTunnelReq); + case TERMINATE_MESSAGE: { + itti_exit_task(); } break; @@ -474,85 +439,11 @@ static void *gtpv1u_thread(void *args) udp_data_ind_t *udp_data_ind_p; udp_data_ind_p = &received_message_p->ittiMsg.udp_data_ind; nwGtpv1uProcessUdpReq(gtpv1u_sgw_data.gtpv1u_stack, - udp_data_ind_p->buffer, - udp_data_ind_p->buffer_length, - udp_data_ind_p->peer_port, - udp_data_ind_p->peer_address); - //itti_free(ITTI_MSG_ORIGIN_ID(received_message_p), udp_data_ind_p->buffer); - } - break; - - // DATA TO BE SENT TO UDP - case GTPV1U_TUNNEL_DATA_REQ: { - Gtpv1uTunnelDataReq *data_req_p = NULL; - NwGtpv1uUlpApiT stack_req; - NwGtpv1uRcT rc; - hashtable_rc_t hash_rc; - gtpv1u_teid2enb_info_t *gtpv1u_teid2enb_info = NULL; - - data_req_p = &received_message_p->ittiMsg.gtpv1uTunnelDataReq; - - //GTPU_DEBUG("-- GTPV1U_TUNNEL_DATA_REQ -----------------------------------------------------\n%s :\n", - // __FUNCTION__); - //gtpu_print_hex_octets(data_req_p->buffer, data_req_p->length); - - - memset(&stack_req, 0, sizeof(NwGtpv1uUlpApiT)); - - hash_rc = hashtable_get(gtpv1u_sgw_data.S1U_mapping, (uint64_t)data_req_p->local_S1u_teid, (void**)>pv1u_teid2enb_info); - - if (hash_rc == HASH_TABLE_KEY_NOT_EXISTS) { - GTPU_ERROR("nwGtpv1uProcessUlpReq failed: while getting teid %u in hashtable S1U_mapping\n", data_req_p->local_S1u_teid); - } else { - stack_req.apiType = NW_GTPV1U_ULP_API_SEND_TPDU; - //stack_req.apiInfo.sendtoInfo.teid = data_req_p->local_S1u_teid; - stack_req.apiInfo.sendtoInfo.teid = gtpv1u_teid2enb_info->teid_enb; - BUFFER_TO_NwU32T(gtpv1u_teid2enb_info->enb_ip_addr.address.ipv4_address, stack_req.apiInfo.sendtoInfo.ipAddr); - - /*nwGtpv1uGpduMsgNew( NW_IN NwGtpv1uStackHandleT hGtpuStackHandle, - NW_IN NwU32T teid, - NW_IN NwU8T seqNumFlag, - NW_IN NwU16T seqNum, - NW_IN NwU8T *tpdu, - NW_IN NwU16T tpduLength, - NW_OUT NwGtpv1uMsgHandleT *phMsg)*/ - GTPU_DEBUG("GTPV1U_TUNNEL_DATA_REQ seq num %d %d bytes\n", - gtpv1u_sgw_data.seq_num, - data_req_p->length); - rc = nwGtpv1uGpduMsgNew(gtpv1u_sgw_data.gtpv1u_stack, - 00,// TO DO bearer_p->port, but not needed when looking at processing - NW_FALSE, - gtpv1u_sgw_data.seq_num++, - data_req_p->buffer, - data_req_p->length, - data_req_p->offset, - &(stack_req.apiInfo.sendtoInfo.hMsg)); - - if (rc != NW_GTPV1U_OK) { - GTPU_ERROR("nwGtpv1uGpduMsgNew failed: 0x%x\n", rc); - } else { - rc = nwGtpv1uProcessUlpReq(gtpv1u_sgw_data.gtpv1u_stack, &stack_req); - - if (rc != NW_GTPV1U_OK) { - GTPU_ERROR("nwGtpv1uProcessUlpReq failed: 0x%x\n", rc); - } - - rc = nwGtpv1uMsgDelete(gtpv1u_sgw_data.gtpv1u_stack, - stack_req.apiInfo.sendtoInfo.hMsg); - - if (rc != NW_GTPV1U_OK) { - GTPU_ERROR("nwGtpv1uMsgDelete failed: 0x%x\n", rc); - } - } - } - - /* Buffer is still needed, do not free it */ - //itti_free(ITTI_MSG_ORIGIN_ID(received_message_p), data_req_p->buffer); - } - break; - - case TERMINATE_MESSAGE: { - itti_exit_task(); + udp_data_ind_p->buffer, + udp_data_ind_p->buffer_length, + udp_data_ind_p->peer_port, + udp_data_ind_p->peer_address); + //itti_free(ITTI_MSG_ORIGIN_ID(received_message_p), udp_data_ind_p->buffer); } break; @@ -568,7 +459,6 @@ static void *gtpv1u_thread(void *args) break; } -#endif itti_free(ITTI_MSG_ORIGIN_ID(received_message_p), received_message_p); received_message_p = NULL; } @@ -591,82 +481,11 @@ int gtpv1u_init(const mme_config_t *mme_config_p) gtpv1u_sgw_data.sgw_ip_address_for_S1u_S12_S4_up = mme_config_p->ipv4.sgw_ip_address_for_S1u_S12_S4_up; -#if !defined(ENABLE_USE_GTPU_IN_KERNEL) - gtpv1u_sgw_data.S1U_mapping = hashtable_create (8192, NULL, NULL); - - if (gtpv1u_sgw_data.S1U_mapping == NULL) { - perror("hashtable_create"); - GTPU_ERROR("Initializing TASK_GTPV1_U task interface: ERROR\n"); - return -1; - } - - /* Initializing GTPv1-U stack */ - if ((rc = nwGtpv1uInitialize(>pv1u_sgw_data.gtpv1u_stack, GTPU_STACK_SGW)) != NW_GTPV1U_OK) { - GTPU_ERROR("Failed to setup nwGtpv1u stack %x\n", rc); - return -1; - } - - if ((rc = nwGtpv1uSetLogLevel(gtpv1u_sgw_data.gtpv1u_stack, - NW_LOG_LEVEL_DEBG)) != NW_GTPV1U_OK) { - GTPU_ERROR("Failed to setup loglevel for stack %x\n", rc); - return -1; - } - - /* Set the ULP API callback. Called once message have been processed by the - * nw-gtpv1u stack. - */ - ulp.ulpReqCallback = gtpv1u_process_stack_req; - - if ((rc = nwGtpv1uSetUlpEntity(gtpv1u_sgw_data.gtpv1u_stack, &ulp)) != NW_GTPV1U_OK) { - GTPU_ERROR("nwGtpv1uSetUlpEntity: %x", rc); - return -1; - } - - /* nw-gtpv1u stack requires an udp callback to send data over UDP. - * We provide a wrapper to UDP task. - */ - udp.udpDataReqCallback = gtpv1u_send_udp_msg; - - if ((rc = nwGtpv1uSetUdpEntity(gtpv1u_sgw_data.gtpv1u_stack, &udp)) != NW_GTPV1U_OK) { - GTPU_ERROR("nwGtpv1uSetUdpEntity: %x", rc); - return -1; - } - - log.logReqCallback = gtpv1u_log_request; - - if ((rc = nwGtpv1uSetLogMgrEntity(gtpv1u_sgw_data.gtpv1u_stack, &log)) != NW_GTPV1U_OK) { - GTPU_ERROR("nwGtpv1uSetLogMgrEntity: %x", rc); - return -1; - } - - /* Timer interface is more complicated as both wrappers doesn't send a message - * to the timer task but call the timer API functions start/stop timer. - */ - tmr.tmrMgrHandle = 0; - tmr.tmrStartCallback = gtpv1u_start_timer_wrapper; - tmr.tmrStopCallback = gtpv1u_stop_timer_wrapper; - - if ((rc = nwGtpv1uSetTimerMgrEntity(gtpv1u_sgw_data.gtpv1u_stack, &tmr)) != NW_GTPV1U_OK) { - GTPU_ERROR("nwGtpv1uSetTimerMgrEntity: %x", rc); - return -1; - } - -#endif - if (itti_create_task(TASK_GTPV1_U, >pv1u_thread, NULL) < 0) { GTPU_ERROR("gtpv1u phtread_create: %s", strerror(errno)); return -1; } -#if !defined(ENABLE_USE_GTPU_IN_KERNEL) - - ret = gtpv1u_send_init_udp(mme_config_p->gtpv1u_config.port_number); - - if (ret < 0) { - return ret; - } - -#endif GTPU_DEBUG("Initializing GTPV1U interface: DONE\n"); return ret; diff --git a/openair-cn/GTPV1-U/gtpv1u_teid_pool.c b/openair-cn/GTPV1-U/gtpv1u_teid_pool.c index 05db901e93..3cbafd8979 100644 --- a/openair-cn/GTPV1-U/gtpv1u_teid_pool.c +++ b/openair-cn/GTPV1-U/gtpv1u_teid_pool.c @@ -37,7 +37,7 @@ #include "gtpv1u.h" -#define GTPV1U_LINEAR_TEID_ALLOCATION 1 +//#define GTPV1U_LINEAR_TEID_ALLOCATION 1 #ifdef GTPV1U_LINEAR_TEID_ALLOCATION static uint32_t g_gtpv1u_teid = 0; diff --git a/openair-cn/GTPV1-U/nw-gtpv1u/include/NwGtpv1uPrivate.h b/openair-cn/GTPV1-U/nw-gtpv1u/include/NwGtpv1uPrivate.h index 5cd030feb9..59ffb1e174 100644 --- a/openair-cn/GTPV1-U/nw-gtpv1u/include/NwGtpv1uPrivate.h +++ b/openair-cn/GTPV1-U/nw-gtpv1u/include/NwGtpv1uPrivate.h @@ -79,15 +79,15 @@ extern "C" { */ typedef struct NwGtpv1uStack { - NwU32T stackType;/**< GTPU_STACK_ENB or GTPU_STACK_SGW */ + uint32_t stackType;/**< GTPU_STACK_ENB or GTPU_STACK_SGW */ NwPtrT id; - NwU32T seq; + uint32_t seq; NwGtpv1uUlpEntityT ulp; NwGtpv1uUdpEntityT udp; NwGtpv1uMemMgrEntityT memMgr; NwGtpv1uTimerMgrEntityT tmrMgr; NwGtpv1uLogMgrEntityT logMgr; - NwU32T logLevel; + uint32_t logLevel; RB_HEAD( NwGtpv1uOutstandingTxSeqNumTrxnMap, NwGtpv1uTrxn) outstandingTxSeqNumMap; RB_HEAD( NwGtpv1uOutstandingRxSeqNumTrxnMap, NwGtpv1uTrxn) outstandingRxSeqNumMap; RB_HEAD(NwGtpv1uTunnelEndPointTMap, NwGtpv1uTunnelEndPoint) sessionMap; @@ -99,8 +99,8 @@ typedef struct NwGtpv1uStack { */ typedef struct NwGtpv1uTunnelEndPoint { - NwU32T teid; /**< Gtpu Tunnel End Point Identifier */ - NwU32T peerAddr; /**< Peer IP address for the session */ + uint32_t teid; /**< Gtpu Tunnel End Point Identifier */ + uint32_t peerAddr; /**< Peer IP address for the session */ NwGtpv1uStackT* pStack; /**< Pointer to the parent stack */ NwGtpv1uUlpSessionHandleT hUlpSession; /**< ULP session handle for the session */ RB_ENTRY (NwGtpv1uTunnelEndPoint) sessionMapRbtNode; /**< RB Tree Data Structure Node */ @@ -152,20 +152,20 @@ nwGtpStopTrxnPeerRspTimer(NwGtpv1uStackT* thiz, NwGtpv1uTimerHandleT* phTmr); * NwGtpv1uMsgT holds gtpv1u messages to/from the peer. */ typedef struct NwGtpv1uMsg { - NwU8T version; - NwU8T protocolType; - NwU8T extHdrFlag; - NwU8T seqNumFlag; - NwU16T npduNumFlag; - NwU32T msgType; - NwU16T msgLen; - NwU32T teid; - NwU16T seqNum; - NwU8T npduNum; - NwU8T nextExtHdrType; - NwU8T* msgBuf; - NwU32T msgBufLen; - NwU32T msgBufOffset; + uint8_t version; + uint8_t protocolType; + uint8_t extHdrFlag; + uint8_t seqNumFlag; + uint16_t npduNumFlag; + uint32_t msgType; + uint16_t msgLen; + uint32_t teid; + uint16_t seqNum; + uint8_t npduNum; + uint8_t nextExtHdrType; + uint8_t* msgBuf; + uint32_t msgBufLen; + uint32_t msgBufOffset; struct NwGtpv1uMsg* next; } NwGtpv1uMsgT; @@ -179,16 +179,16 @@ typedef struct NwGtpv1uMsg { */ typedef struct NwGtpv1uTrxn { - NwU32T seqNum; - NwU32T peerIp; - NwU32T peerPort; - NwU8T maxRetries; - NwU8T t3Timer; + uint32_t seqNum; + uint32_t peerIp; + uint32_t peerPort; + uint8_t maxRetries; + uint8_t t3Timer; NwGtpv1uTimerHandleT hRspTmr; NwGtpv1uTimeoutInfoT peerRspTimeoutInfo; NwGtpv1uStackT* pStack; NwGtpv1uTunnelEndPointT* pSession; - NwU32T hUlpTrxn; + uint32_t hUlpTrxn; NwGtpv1uMsgT* pMsg; RB_ENTRY (NwGtpv1uTrxn) outstandingTxSeqNumMapRbtNode; /**< RB Tree Data Structure Node */ RB_ENTRY (NwGtpv1uTrxn) outstandingRxSeqNumMapRbtNode; /**< RB Tree Data Structure Node */ @@ -203,15 +203,15 @@ typedef struct NwGtpv1uTrxn { #pragma pack(1) typedef struct NwGtpv1uMsgHeader { - NwU8T PN:1; - NwU8T S:1; - NwU8T E:1; - NwU8T spare:1; - NwU8T PT:1; - NwU8T version:3; - NwU8T msgType; - NwU16T msgLength; - NwU32T teid; + uint8_t PN:1; + uint8_t S:1; + uint8_t E:1; + uint8_t spare:1; + uint8_t PT:1; + uint8_t version:3; + uint8_t msgType; + uint16_t msgLength; + uint32_t teid; } NwGtpv1uMsgHeaderT; #pragma pack() diff --git a/openair-cn/GTPV1-U/nw-gtpv1u/include/NwGtpv1uTrxn.h b/openair-cn/GTPV1-U/nw-gtpv1u/include/NwGtpv1uTrxn.h index 52de4aafd0..76228416a9 100644 --- a/openair-cn/GTPV1-U/nw-gtpv1u/include/NwGtpv1uTrxn.h +++ b/openair-cn/GTPV1-U/nw-gtpv1u/include/NwGtpv1uTrxn.h @@ -56,7 +56,7 @@ nwGtpv1uTrxnNew( NW_IN NwGtpv1uStackT* thiz, NwGtpv1uRcT nwGtpv1uTrxnWithSeqNew( NW_IN NwGtpv1uStackT* thiz, - NW_IN NwU32T seqNum, + NW_IN uint32_t seqNum, NW_OUT NwGtpv1uTrxnT **ppTrxn); NwGtpv1uRcT @@ -72,8 +72,8 @@ nwGtpv1uTrxnDelete( NW_INOUT NwGtpv1uTrxnT **pthiz); NwGtpv1uRcT nwGtpv1uTrxnCreateAndSendMsg( NW_IN NwGtpv1uStackT* thiz, NW_IN NwGtpv1uTrxnT *pTrxn, - NW_IN NwU32T peerIp, - NW_IN NwU32T peerPort, + NW_IN uint32_t peerIp, + NW_IN uint32_t peerPort, NW_IN NwGtpv1uMsgT *pMsg); #ifdef __cplusplus diff --git a/openair-cn/GTPV1-U/nw-gtpv1u/shared/NwGtpv1u.h b/openair-cn/GTPV1-U/nw-gtpv1u/shared/NwGtpv1u.h index 7ba8a29348..c6f7c3d6fa 100644 --- a/openair-cn/GTPV1-U/nw-gtpv1u/shared/NwGtpv1u.h +++ b/openair-cn/GTPV1-U/nw-gtpv1u/shared/NwGtpv1u.h @@ -80,7 +80,7 @@ typedef NwPtrT NwGtpv1uTimerHandleT; /**< Gtpv2 Stack Timer typedef NwPtrT NwGtpv1uMsgHandleT; /**< Gtpv2 Msg Handle */ typedef struct NwGtpv1uStackConfig { - NwU16T udpSrcPort; + uint16_t udpSrcPort; } NwGtpv1uStackConfigT; /*--------------------------------------------------------------------------* @@ -121,7 +121,7 @@ typedef enum { *--------------------------------------------------------------------------*/ typedef NwPtrT NwGtpv1uStackSessionHandleT;/**< Gtpv2 Stack session Handle */ -typedef NwU8T NwGtpv1uMsgTypeT; /**< Gtpv2 Msg Type */ +typedef uint8_t NwGtpv1uMsgTypeT; /**< Gtpv2 Msg Type */ typedef NwPtrT NwGtpv1uTrxnHandleT; /**< Gtpv2 Transaction Handle */ typedef NwPtrT NwGtpv1uUlpTrxnHandleT; /**< Gtpv2 Ulp Transaction Handle */ typedef NwPtrT NwGtpv1uUlpSessionHandleT; /**< Gtpv2 Ulp session Handle */ @@ -132,7 +132,7 @@ typedef NwPtrT NwGtpv1uUlpSessionHandleT; /**< Gtpv2 Ulp session Handle */ */ typedef struct { - NW_IN NwU32T teid; + NW_IN uint32_t teid; NW_IN NwGtpv1uUlpSessionHandleT hUlpSession; NW_OUT NwGtpv1uStackSessionHandleT hStackSession; } NwGtpv1uCreateTunnelEndPointT; @@ -153,10 +153,10 @@ typedef struct { typedef struct { NW_IN NwGtpv1uUlpTrxnHandleT hUlpTrxn; - NW_IN NwU32T peerIp; - NW_IN NwU32T peerPort; - NW_IN NwU8T flags; - NW_IN NwU32T teid; + NW_IN uint32_t peerIp; + NW_IN uint32_t peerPort; + NW_IN uint8_t flags; + NW_IN uint32_t teid; } NwGtpv1uInitialReqInfoT; /** @@ -166,11 +166,11 @@ typedef struct { typedef struct { NW_IN NwGtpv1uUlpTrxnHandleT hUlpTrxn; - NW_IN NwU32T peerIp; - NW_IN NwU32T peerPort; - NW_IN NwU8T flags; - NW_IN NwU32T teid; - NW_IN NwU32T seqNum; + NW_IN uint32_t peerIp; + NW_IN uint32_t peerPort; + NW_IN uint8_t flags; + NW_IN uint32_t teid; + NW_IN uint32_t seqNum; NW_IN NwGtpv1uMsgHandleT hMsg; } NwGtpv1uTriggeredRspInfoT; @@ -181,11 +181,11 @@ typedef struct { typedef struct { NW_IN NwGtpv1uUlpTrxnHandleT hUlpTrxn; - NW_IN NwU32T peerIp; - NW_IN NwU32T peerPort; - NW_IN NwU8T flags; - NW_IN NwU32T teid; - NW_IN NwU32T seqNum; + NW_IN uint32_t peerIp; + NW_IN uint32_t peerPort; + NW_IN uint8_t flags; + NW_IN uint32_t teid; + NW_IN uint32_t seqNum; NW_IN NwGtpv1uMsgHandleT hMsg; } NwGtpv1uTriggeredReqInfoT; @@ -196,9 +196,9 @@ typedef struct { */ typedef struct { - NW_IN NwU32T teid; - NW_IN NwU32T ipAddr; - NW_IN NwU8T flags; + NW_IN uint32_t teid; + NW_IN uint32_t ipAddr; + NW_IN uint8_t flags; NW_IN NwGtpv1uMsgHandleT hMsg; } NwGtpv1uSendtoInfoT; @@ -213,7 +213,7 @@ typedef struct { NW_INOUT NwGtpv1uTrxnHandleT hTrxn; NW_IN NwGtpv1uUlpTrxnHandleT hUlpTrxn; NW_IN NwGtpv1uMsgTypeT msgType; - NW_IN NwU8T flags; + NW_IN uint8_t flags; NW_IN NwGtpv1uMsgHandleT hMsg; } NwGtpv1uSendMsgInfoT; @@ -225,10 +225,10 @@ typedef struct { typedef struct { NW_IN NwGtpv1uUlpSessionHandleT hUlpSession; NW_IN NwGtpv1uUlpTrxnHandleT hUlpTrxn; - NW_IN NwU32T teid; - NW_IN NwU32T peerIp; - NW_IN NwU32T peerPort; - NW_IN NwU32T msgType; /**< Message type */ + NW_IN uint32_t teid; + NW_IN uint32_t peerIp; + NW_IN uint32_t peerPort; + NW_IN uint32_t msgType; /**< Message type */ NW_IN NwGtpv1uMsgHandleT hMsg; /**< Gtp Message handle */ } NwGtpv1uRecvMsgInfoT; @@ -297,11 +297,11 @@ typedef struct { typedef struct { NwGtpv1uUdpHandleT hUdp; NwGtpv1uRcT (*udpDataReqCallback) ( NW_IN NwGtpv1uUdpHandleT udpHandle, - NW_IN NwU8T* dataBuf, - NW_IN NwU32T dataSize, - NW_IN NwU32T dataOffset, - NW_IN NwU32T peerIP, - NW_IN NwU16T peerPort); + NW_IN uint8_t* dataBuf, + NW_IN uint32_t dataSize, + NW_IN uint32_t dataOffset, + NW_IN uint32_t peerIP, + NW_IN uint16_t peerPort); } NwGtpv1uUdpEntityT; /** @@ -311,14 +311,14 @@ typedef struct { typedef struct { NwGtpv1uMemMgrHandleT hMemMgr; void* (*memAlloc)( NW_IN NwGtpv1uMemMgrHandleT hMemMgr, - NW_IN NwU32T memSize, + NW_IN uint32_t memSize, NW_IN NwCharT* fileName, - NW_IN NwU32T lineNumber); + NW_IN uint32_t lineNumber); void (*memFree) ( NW_IN NwGtpv1uMemMgrHandleT hMemMgr, NW_IN void* hMem, NW_IN NwCharT* fileName, - NW_IN NwU32T lineNumber); + NW_IN uint32_t lineNumber); } NwGtpv1uMemMgrEntityT; @@ -336,9 +336,9 @@ typedef struct { typedef struct { NwGtpv1uTimerMgrHandleT tmrMgrHandle; NwGtpv1uRcT (*tmrStartCallback)( NW_IN NwGtpv1uTimerMgrHandleT tmrMgrHandle, - NW_IN NwU32T timeoutSecs, - NW_IN NwU32T timeoutUsec, - NW_IN NwU32T tmrType, + NW_IN uint32_t timeoutSecs, + NW_IN uint32_t timeoutUsec, + NW_IN uint32_t tmrType, NW_IN void* tmrArg, NW_OUT NwGtpv1uTimerHandleT* tmrHandle); @@ -358,9 +358,9 @@ typedef struct { typedef struct { NwGtpv1uLogMgrHandleT logMgrHandle; NwGtpv1uRcT (*logReqCallback) (NW_IN NwGtpv1uLogMgrHandleT logMgrHandle, - NW_IN NwU32T logLevel, + NW_IN uint32_t logLevel, NW_IN NwCharT* file, - NW_IN NwU32T line, + NW_IN uint32_t line, NW_IN NwCharT* logStr); } NwGtpv1uLogMgrEntityT; @@ -385,7 +385,7 @@ extern "C" { */ NwGtpv1uRcT -nwGtpv1uInitialize( NW_INOUT NwGtpv1uStackHandleT* phGtpv1uStackHandle, NwU32T stackType); +nwGtpv1uInitialize( NW_INOUT NwGtpv1uStackHandleT* phGtpv1uStackHandle, uint32_t stackType); /*--------------------------------------------------------------------------- * Destructor @@ -493,7 +493,7 @@ nwGtpv1uSetLogMgrEntity( NW_IN NwGtpv1uStackHandleT hGtpv1uStackHandle, NwGtpv1uRcT nwGtpv1uSetLogLevel( NW_IN NwGtpv1uStackHandleT hGtpuStackHandle, - NW_IN NwU32T logLevel); + NW_IN uint32_t logLevel); /*--------------------------------------------------------------------------- * Process Request from Udp Layer *--------------------------------------------------------------------------*/ @@ -511,10 +511,10 @@ nwGtpv1uSetLogLevel( NW_IN NwGtpv1uStackHandleT hGtpuStackHandle, NwGtpv1uRcT nwGtpv1uProcessUdpReq( NW_IN NwGtpv1uStackHandleT hGtpv1uStackHandle, - NW_IN NwU8T* udpData, - NW_IN NwU32T udpDataLen, - NW_IN NwU16T peerPort, - NW_IN NwU32T peerIP); + NW_IN uint8_t* udpData, + NW_IN uint32_t udpDataLen, + NW_IN uint16_t peerPort, + NW_IN uint32_t peerIP); /*--------------------------------------------------------------------------- * Process Request from Upper Layer diff --git a/openair-cn/GTPV1-U/nw-gtpv1u/shared/NwGtpv1uMsg.h b/openair-cn/GTPV1-U/nw-gtpv1u/shared/NwGtpv1uMsg.h index a105736f58..f6bc0415f2 100644 --- a/openair-cn/GTPV1-U/nw-gtpv1u/shared/NwGtpv1uMsg.h +++ b/openair-cn/GTPV1-U/nw-gtpv1u/shared/NwGtpv1uMsg.h @@ -53,23 +53,23 @@ extern "C" { #pragma pack(1) typedef struct NwGtpv1uIeTv1 { - NwU8T t; - NwU8T v; + uint8_t t; + uint8_t v; } NwGtpv1uIeTv1T; typedef struct NwGtpv1uIeTv2 { - NwU8T t; - NwU8T v; + uint8_t t; + uint8_t v; } NwGtpv1uIeTv2T; typedef struct NwGtpv1uIeTv4 { - NwU8T t; - NwU32T v; + uint8_t t; + uint32_t v; } NwGtpv1uIeTv4T; typedef struct NwGtpv1uIeTlv { - NwU8T t; - NwU16T l; + uint8_t t; + uint16_t l; } NwGtpv1uIeTlvT; #pragma pack() @@ -87,14 +87,14 @@ typedef struct NwGtpv1uIeTlv { NwGtpv1uRcT nwGtpv1uMsgNew( NW_IN NwGtpv1uStackHandleT hGtpuStackHandle, - NW_IN NwU8T seqNumFlag, - NW_IN NwU8T npduNumFlag, - NW_IN NwU8T extHdrFlag, - NW_IN NwU8T msgType, - NW_IN NwU8T teid, - NW_IN NwU16T seqNum, - NW_IN NwU8T npduNum, - NW_IN NwU8T nextExtHeader, + NW_IN uint8_t seqNumFlag, + NW_IN uint8_t npduNumFlag, + NW_IN uint8_t extHdrFlag, + NW_IN uint8_t msgType, + NW_IN uint8_t teid, + NW_IN uint16_t seqNum, + NW_IN uint8_t npduNum, + NW_IN uint8_t nextExtHeader, NW_OUT NwGtpv1uMsgHandleT *phMsg); @@ -112,12 +112,12 @@ nwGtpv1uMsgNew( NW_IN NwGtpv1uStackHandleT hGtpuStackHandle, NwGtpv1uRcT nwGtpv1uGpduMsgNew( NW_IN NwGtpv1uStackHandleT hGtpuStackHandle, - NW_IN NwU32T teid, - NW_IN NwU8T seqNumFlag, - NW_IN NwU16T seqNum, - NW_IN NwU8T* tpdu, - NW_IN NwU16T tpduLength, - NW_IN NwU32T tpduOffset, + NW_IN uint32_t teid, + NW_IN uint8_t seqNumFlag, + NW_IN uint16_t seqNum, + NW_IN uint8_t* tpdu, + NW_IN uint16_t tpduLength, + NW_IN uint32_t tpduOffset, NW_OUT NwGtpv1uMsgHandleT *phMsg); /** @@ -143,8 +143,8 @@ nwGtpv1uMsgFromMsgNew( NW_IN NwGtpv1uStackHandleT hGtpuStackHandle, NwGtpv1uRcT nwGtpv1uMsgFromBufferNew( NW_IN NwGtpv1uStackHandleT hGtpuStackHandle, - NW_IN NwU8T* pBuf, - NW_IN NwU32T bufLen, + NW_IN uint8_t* pBuf, + NW_IN uint32_t bufLen, NW_OUT NwGtpv1uMsgHandleT *phMsg); /** @@ -166,7 +166,7 @@ nwGtpv1uMsgDelete( NW_IN NwGtpv1uStackHandleT hGtpuStackHandle, */ NwGtpv1uRcT -nwGtpv1uMsgSetTeid(NW_IN NwGtpv1uMsgHandleT hMsg, NwU32T teid); +nwGtpv1uMsgSetTeid(NW_IN NwGtpv1uMsgHandleT hMsg, uint32_t teid); /** * Set TEID present flag for gtpv1u message. @@ -186,7 +186,7 @@ nwGtpv1uMsgSetTeidPresent(NW_IN NwGtpv1uMsgHandleT hMsg, NwBoolT teidPresent); */ NwGtpv1uRcT -nwGtpv1uMsgSetSeqNumber(NW_IN NwGtpv1uMsgHandleT hMsg, NwU32T seqNum); +nwGtpv1uMsgSetSeqNumber(NW_IN NwGtpv1uMsgHandleT hMsg, uint32_t seqNum); /** * Get TEID present for gtpv1u message. @@ -194,7 +194,7 @@ nwGtpv1uMsgSetSeqNumber(NW_IN NwGtpv1uMsgHandleT hMsg, NwU32T seqNum); * @param[in] hMsg : Message handle. */ -NwU32T +uint32_t nwGtpv1uMsgGetTeid(NW_IN NwGtpv1uMsgHandleT hMsg); /** @@ -212,7 +212,7 @@ nwGtpv1uMsgGetTeidPresent(NW_IN NwGtpv1uMsgHandleT hMsg); * @param[in] hMsg : Message handle. */ -NwU32T +uint32_t nwGtpv1uMsgGetSeqNumber(NW_IN NwGtpv1uMsgHandleT hMsg); /** @@ -223,13 +223,13 @@ nwGtpv1uMsgGetSeqNumber(NW_IN NwGtpv1uMsgHandleT hMsg); * @param[out] hMsg : T-PDU length. */ -NwU32T -nwGtpv1uMsgGetTpdu(NW_IN NwGtpv1uMsgHandleT hMsg, NwU8T* pTpduBuf, NwU32T* pTpduLength); +uint32_t +nwGtpv1uMsgGetTpdu(NW_IN NwGtpv1uMsgHandleT hMsg, uint8_t* pTpduBuf, uint32_t* pTpduLength); -NwU8T* +uint8_t* nwGtpv1uMsgGetTpduHandle(NW_IN NwGtpv1uMsgHandleT hMsg); -NwU32T +uint32_t nwGtpv1uMsgGetTpduLength(NW_IN NwGtpv1uMsgHandleT hMsg); /** @@ -242,8 +242,8 @@ nwGtpv1uMsgGetTpduLength(NW_IN NwGtpv1uMsgHandleT hMsg); NwGtpv1uRcT nwGtpv1uMsgAddIeTV1(NW_IN NwGtpv1uMsgHandleT hMsg, - NW_IN NwU8T type, - NW_IN NwU8T value); + NW_IN uint8_t type, + NW_IN uint8_t value); /** @@ -256,9 +256,9 @@ nwGtpv1uMsgAddIeTV1(NW_IN NwGtpv1uMsgHandleT hMsg, NwGtpv1uRcT nwGtpv1uMsgAddIeTV2(NW_IN NwGtpv1uMsgHandleT hMsg, - NW_IN NwU8T type, - NW_IN NwU16T length, - NW_IN NwU16T value); + NW_IN uint8_t type, + NW_IN uint16_t length, + NW_IN uint16_t value); /** @@ -271,9 +271,9 @@ nwGtpv1uMsgAddIeTV2(NW_IN NwGtpv1uMsgHandleT hMsg, NwGtpv1uRcT nwGtpv1uMsgAddIeTV4(NW_IN NwGtpv1uMsgHandleT hMsg, - NW_IN NwU8T type, - NW_IN NwU16T length, - NW_IN NwU32T value); + NW_IN uint8_t type, + NW_IN uint16_t length, + NW_IN uint32_t value); /** @@ -287,9 +287,9 @@ nwGtpv1uMsgAddIeTV4(NW_IN NwGtpv1uMsgHandleT hMsg, NwGtpv1uRcT nwGtpv1uMsgAddIe(NW_IN NwGtpv1uMsgHandleT hMsg, - NW_IN NwU8T type, - NW_IN NwU16T length, - NW_IN NwU8T* pVal); + NW_IN uint8_t type, + NW_IN uint16_t length, + NW_IN uint8_t* pVal); /** * Dump the contents of gtpv1u mesasge. @@ -301,7 +301,7 @@ nwGtpv1uMsgAddIe(NW_IN NwGtpv1uMsgHandleT hMsg, NwGtpv1uRcT nwGtpv1uMsgHexDump(NwGtpv1uMsgHandleT hMsg, FILE* fp); -NwU32T +uint32_t nwGtpv1uMsgGetMsgType(NW_IN NwGtpv1uMsgHandleT hMsg); #ifdef __cplusplus diff --git a/openair-cn/GTPV1-U/nw-gtpv1u/shared/NwLog.h b/openair-cn/GTPV1-U/nw-gtpv1u/shared/NwLog.h index 7c19d66bad..7215216e68 100644 --- a/openair-cn/GTPV1-U/nw-gtpv1u/shared/NwLog.h +++ b/openair-cn/GTPV1-U/nw-gtpv1u/shared/NwLog.h @@ -68,15 +68,15 @@ extern "C" { * IPv4 logging macros *--------------------------------------------------------------------------*/ #define NW_IPV4_ADDR "%u.%u.%u.%u" -#define NW_IPV4_ADDR_FORMAT(__addr) (NwU8T)((__addr) & 0x000000ff), \ - (NwU8T)(((__addr) & 0x0000ff00) >> 8 ), \ - (NwU8T)(((__addr) & 0x00ff0000) >> 16), \ - (NwU8T)(((__addr) & 0xff000000) >> 24) +#define NW_IPV4_ADDR_FORMAT(__addr) (uint8_t)((__addr) & 0x000000ff), \ + (uint8_t)(((__addr) & 0x0000ff00) >> 8 ), \ + (uint8_t)(((__addr) & 0x00ff0000) >> 16), \ + (uint8_t)(((__addr) & 0xff000000) >> 24) -#define NW_IPV4_ADDR_FORMATP(__paddr) (NwU8T)(*((NwU8T*)(__paddr)) & 0x000000ff), \ - (NwU8T)(*((NwU8T*)(__paddr + 1)) & 0x000000ff), \ - (NwU8T)(*((NwU8T*)(__paddr + 2)) & 0x000000ff), \ - (NwU8T)(*((NwU8T*)(__paddr + 3)) & 0x000000ff) +#define NW_IPV4_ADDR_FORMATP(__paddr) (uint8_t)(*((uint8_t*)(__paddr)) & 0x000000ff), \ + (uint8_t)(*((uint8_t*)(__paddr + 1)) & 0x000000ff), \ + (uint8_t)(*((uint8_t*)(__paddr + 2)) & 0x000000ff), \ + (uint8_t)(*((uint8_t*)(__paddr + 3)) & 0x000000ff) #ifdef __cplusplus diff --git a/openair-cn/GTPV1-U/nw-gtpv1u/shared/NwTypes.h b/openair-cn/GTPV1-U/nw-gtpv1u/shared/NwTypes.h index c4cb2156fb..aae5c8a95b 100644 --- a/openair-cn/GTPV1-U/nw-gtpv1u/shared/NwTypes.h +++ b/openair-cn/GTPV1-U/nw-gtpv1u/shared/NwTypes.h @@ -54,11 +54,6 @@ extern "C" { #define NW_TRUE (1) /**< Truth value */ #define NW_FALSE (0) /**< False value */ -typedef unsigned char NwU8T; /**< Unsigned 1 byte */ -typedef unsigned short NwU16T; /**< Unsigned 2 byte */ -typedef unsigned int NwU32T; /**< Unsigned 4 byte */ -typedef unsigned long long NwU64T; /**< Unsigned 8 byte */ - typedef signed char NwS8T; /**< Signed 1 byte */ typedef signed short NwS16T; /**< Signed 2 byte */ typedef signed int NwS32T; /**< Signed 4 byte */ diff --git a/openair-cn/GTPV1-U/nw-gtpv1u/shared/NwUtils.h b/openair-cn/GTPV1-U/nw-gtpv1u/shared/NwUtils.h index c29b0a550a..c197ab323e 100644 --- a/openair-cn/GTPV1-U/nw-gtpv1u/shared/NwUtils.h +++ b/openair-cn/GTPV1-U/nw-gtpv1u/shared/NwUtils.h @@ -52,10 +52,10 @@ ( ( (x) & 0x0000ff00 ) << 8 ) | ( ( (x) & 0x000000ff) << 24 ) ) #define NW_HTONLL(x) ( \ - ( ( ((NwU64T)x) & 0xff00000000000000ULL ) >> 56 ) | ( ( ((NwU64T)x) & 0x00ff000000000000ULL ) >> 40 ) | \ - ( ( ((NwU64T)x) & 0x0000ff0000000000ULL ) >> 24 ) | ( ( ((NwU64T)x) & 0x000000ff00000000ULL ) >> 8 ) | \ - ( ( ((NwU64T)x) & 0x000000000000ff00ULL ) << 40 ) | ( ( ((NwU64T)x) & 0x00000000000000ffULL ) << 56 ) | \ - ( ( ((NwU64T)x) & 0x0000000000ff0000ULL ) << 24 ) | ( ( ((NwU64T)x) & 0x00000000ff000000ULL ) << 8 ) \ + ( ( ((uint64_t)x) & 0xff00000000000000ULL ) >> 56 ) | ( ( ((uint64_t)x) & 0x00ff000000000000ULL ) >> 40 ) | \ + ( ( ((uint64_t)x) & 0x0000ff0000000000ULL ) >> 24 ) | ( ( ((uint64_t)x) & 0x000000ff00000000ULL ) >> 8 ) | \ + ( ( ((uint64_t)x) & 0x000000000000ff00ULL ) << 40 ) | ( ( ((uint64_t)x) & 0x00000000000000ffULL ) << 56 ) | \ + ( ( ((uint64_t)x) & 0x0000000000ff0000ULL ) << 24 ) | ( ( ((uint64_t)x) & 0x00000000ff000000ULL ) << 8 ) \ ) #define NW_NTOHS NW_HTONS diff --git a/openair-cn/GTPV1-U/nw-gtpv1u/src/NwGtpv1u.c b/openair-cn/GTPV1-U/nw-gtpv1u/src/NwGtpv1u.c index 30008207b3..5308c0c86c 100644 --- a/openair-cn/GTPV1-U/nw-gtpv1u/src/NwGtpv1u.c +++ b/openair-cn/GTPV1-U/nw-gtpv1u/src/NwGtpv1u.c @@ -196,11 +196,11 @@ nwGtpv1uCompareSeqNum(struct NwGtpv1uTrxn *a, struct NwGtpv1uTrxn *b) */ static NwGtpv1uRcT -nwGtpv1uCreateAndSendMsg( NwGtpv1uStackT *thiz, NwU32T peerIp, NwU16T peerPort, +nwGtpv1uCreateAndSendMsg( NwGtpv1uStackT *thiz, uint32_t peerIp, uint16_t peerPort, NwGtpv1uMsgT *pMsg) { NwGtpv1uRcT rc = NW_GTPV1U_FAILURE; - NwU8T *msgHdr; + uint8_t *msgHdr; NW_ASSERT(thiz); NW_ASSERT(pMsg); @@ -219,10 +219,10 @@ nwGtpv1uCreateAndSendMsg( NwGtpv1uStackT *thiz, NwU32T peerIp, NwU16T peerPort, (pMsg->npduNumFlag); *(msgHdr++) = (pMsg->msgType); - *((NwU16T *) msgHdr) = htons(pMsg->msgLen); + *((uint16_t *) msgHdr) = htons(pMsg->msgLen); msgHdr += 2; - *((NwU32T *) msgHdr) = htonl(pMsg->teid); + *((uint32_t *) msgHdr) = htonl(pMsg->teid); msgHdr += 4; #if defined(LOG_GTPU) && LOG_GTPU > 0 GTPU_DEBUG("nwGtpv1uCreateAndSendMsg to teid %u length %d offset %d\n", @@ -232,13 +232,13 @@ nwGtpv1uCreateAndSendMsg( NwGtpv1uStackT *thiz, NwU32T peerIp, NwU16T peerPort, #endif if(pMsg->seqNumFlag || pMsg->extHdrFlag || pMsg->npduNumFlag) { - *((NwU16T *) msgHdr) = (pMsg->seqNumFlag ? htons(pMsg->seqNum) : 0x0000); + *((uint16_t *) msgHdr) = (pMsg->seqNumFlag ? htons(pMsg->seqNum) : 0x0000); msgHdr += 2; - *((NwU8T *) msgHdr) = (pMsg->npduNumFlag ? htons(pMsg->npduNum) : 0x00); + *((uint8_t *) msgHdr) = (pMsg->npduNumFlag ? htons(pMsg->npduNum) : 0x00); msgHdr++; - *((NwU8T *) msgHdr) = (pMsg->extHdrFlag ? htons(pMsg->nextExtHdrType) : 0x00); + *((uint8_t *) msgHdr) = (pMsg->extHdrFlag ? htons(pMsg->nextExtHdrType) : 0x00); msgHdr++; } @@ -264,13 +264,13 @@ nwGtpv1uCreateAndSendMsg( NwGtpv1uStackT *thiz, NwU32T peerIp, NwU16T peerPort, static NwGtpv1uRcT nwGtpv1uSendUlpMessageIndication( NW_IN NwGtpv1uStackT *thiz, - NW_IN NwU32T hUlpTrxn, - NW_IN NwU32T apiType, - NW_IN NwU32T msgType, - NW_IN NwU32T peerIp, - NW_IN NwU16T peerPort, - NW_IN NwU8T *pMsgBuf, - NW_IN NwU16T msgLength) + NW_IN uint32_t hUlpTrxn, + NW_IN uint32_t apiType, + NW_IN uint32_t msgType, + NW_IN uint32_t peerIp, + NW_IN uint16_t peerPort, + NW_IN uint8_t *pMsgBuf, + NW_IN uint16_t msgLength) { NwGtpv1uRcT rc = NW_GTPV1U_FAILURE; NwGtpv1uUlpApiT ulpApi; @@ -344,7 +344,7 @@ nwGtpv1uPeerRspTimeout(void *arg) static NwGtpv1uRcT NwGtpv1uCreateTunnelEndPoint( NW_IN NwGtpv1uStackT *thiz, - NW_IN NwU32T teid, + NW_IN uint32_t teid, NW_IN NwGtpv1uUlpSessionHandleT hUlpSession, NW_OUT NwGtpv1uStackSessionHandleT *phStackSession ) { @@ -515,16 +515,16 @@ nwGtpv1uSendto( NwGtpv1uStackT *thiz, NW_IN NwGtpv1uUlpApiT *pUlpReq) static NwGtpv1uRcT nwGtpv1uProcessGpdu( NwGtpv1uStackT *thiz, - NW_IN NwU8T *gpdu, - NW_IN NwU32T gpduLen, - NW_IN NwU32T peerIp) + NW_IN uint8_t *gpdu, + NW_IN uint32_t gpduLen, + NW_IN uint32_t peerIp) { NwGtpv1uRcT rc = NW_GTPV1U_FAILURE; NwGtpv1uMsgHeaderT *msgHdr = NULL; NwGtpv1uTunnelEndPointT *pTunnelEndPoint = NULL; NwGtpv1uTunnelEndPointT tunnelEndPointKey; - // NwU16T hdr_len = 0; + // uint16_t hdr_len = 0; #if defined(LOG_GTPU) && LOG_GTPU > 0 NW_ENTER(thiz); @@ -542,14 +542,14 @@ nwGtpv1uProcessGpdu( NwGtpv1uStackT *thiz, NwGtpv1uMsgHandleT hMsg; rc = nwGtpv1uMsgFromBufferNew( (NwGtpv1uStackHandleT)thiz, - (NwU8T *)gpdu, + (uint8_t *)gpdu, gpduLen, &hMsg); /* - NwU8T* msgBuf; - NwU32T msgBufLen; - NwU32T msgBufOffset; + uint8_t* msgBuf; + uint32_t msgBufLen; + uint32_t msgBufOffset; */ if(NW_GTPV1U_OK == rc) { NwGtpv1uMsgT *pMsg = (NwGtpv1uMsgT *) hMsg; @@ -596,17 +596,17 @@ nwGtpv1uProcessGpdu( NwGtpv1uStackT *thiz, static NwGtpv1uRcT nwGtpv1uHandleEchoReq(NW_IN NwGtpv1uStackT *thiz, - NW_IN NwU8T *msgBuf, - NW_IN NwU32T msgBufLen, - NW_IN NwU16T peerPort, - NW_IN NwU32T peerIp) + NW_IN uint8_t *msgBuf, + NW_IN uint32_t msgBufLen, + NW_IN uint16_t peerPort, + NW_IN uint32_t peerIp) { NwGtpv1uRcT rc = NW_GTPV1U_FAILURE; - NwU16T seqNum = 0; + uint16_t seqNum = 0; NwGtpv1uMsgHandleT hMsg = 0; int bufLen = 0; - seqNum = ntohs(*(NwU16T *) (msgBuf + (((*msgBuf) & 0x02) ? 8 : 4))); + seqNum = ntohs(*(uint16_t *) (msgBuf + (((*msgBuf) & 0x02) ? 8 : 4))); MSC_LOG_RX_MESSAGE( (thiz->stackType == GTPU_STACK_ENB) ? MSC_GTPU_ENB:MSC_GTPU_SGW, @@ -630,10 +630,15 @@ nwGtpv1uHandleEchoReq(NW_IN NwGtpv1uStackT *thiz, bufLen = sizeof(NwGtpv1uIeTv1T)+ ((NwGtpv1uMsgT*)hMsg)->msgLen; +#warning CROUX DIRTY +16, TO BE FIXED!!! + /* the +16 is there because by analyzing memory allocation with some external + * tool, I saw that there were 6 bytes accessed after bufLen in nwGtpv1uCreateAndSendMsg + * the value "16" has been chosen arbitrarily, just bigger than 6 + */ ((NwGtpv1uMsgT*)hMsg)->msgBuf = itti_malloc( TASK_GTPV1_U, TASK_UDP, - bufLen); + bufLen + 16 /* CROUX - dirty +16, to be fixed! */); ((NwGtpv1uMsgT*)hMsg)->msgBufLen = bufLen; NW_ASSERT(NW_GTPV1U_OK == rc); @@ -678,7 +683,7 @@ nwGtpv1uHandleEchoReq(NW_IN NwGtpv1uStackT *thiz, *--------------------------------------------------------------------------*/ NwGtpv1uRcT -nwGtpv1uInitialize( NW_INOUT NwGtpv1uStackHandleT *hGtpuStackHandle, NwU32T stackType) +nwGtpv1uInitialize( NW_INOUT NwGtpv1uStackHandleT *hGtpuStackHandle, uint32_t stackType) { NwGtpv1uRcT rc = NW_GTPV1U_FAILURE; NwGtpv1uStackT *thiz; @@ -689,7 +694,7 @@ nwGtpv1uInitialize( NW_INOUT NwGtpv1uStackHandleT *hGtpuStackHandle, NwU32T stac if(thiz) { thiz->id = (NwPtrT)thiz; thiz->stackType = stackType; - thiz->seq = (NwU16T) ((NwU32T)thiz) ; // FIXME interesting casts... don't know what this is good for... + thiz->seq = (uint16_t) ((uint32_t)thiz) ; // FIXME interesting casts... don't know what this is good for... RB_INIT(&(thiz->outstandingTxSeqNumMap)); RB_INIT(&(thiz->outstandingRxSeqNumMap)); RB_INIT(&(thiz->sessionMap)); @@ -824,7 +829,7 @@ nwGtpv1uSetLogMgrEntity( NW_IN NwGtpv1uStackHandleT hGtpuStackHandle, NwGtpv1uRcT nwGtpv1uSetLogLevel( NW_IN NwGtpv1uStackHandleT hGtpuStackHandle, - NW_IN NwU32T logLevel) + NW_IN uint32_t logLevel) { NwGtpv1uStackT *thiz = (NwGtpv1uStackT *) hGtpuStackHandle; thiz->logLevel = logLevel; @@ -837,14 +842,14 @@ nwGtpv1uSetLogLevel( NW_IN NwGtpv1uStackHandleT hGtpuStackHandle, NwGtpv1uRcT nwGtpv1uProcessUdpReq( NW_IN NwGtpv1uStackHandleT hGtpuStackHandle, - NW_IN NwU8T *udpData, - NW_IN NwU32T udpDataLen, - NW_IN NwU16T peerPort, - NW_IN NwU32T peerIp) + NW_IN uint8_t *udpData, + NW_IN uint32_t udpDataLen, + NW_IN uint16_t peerPort, + NW_IN uint32_t peerIp) { NwGtpv1uRcT ret = NW_GTPV1U_FAILURE; NwGtpv1uStackT *thiz; - NwU16T msgType; + uint16_t msgType; #if defined(ENB_MODE) VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_GTPV1U_PROCESS_UDP_REQ, VCD_FUNCTION_IN); @@ -853,7 +858,7 @@ nwGtpv1uProcessUdpReq( NW_IN NwGtpv1uStackHandleT hGtpuStackHandle, NW_ASSERT(thiz); - msgType = *((NwU8T *)(udpData + 1)); + msgType = *((uint8_t *)(udpData + 1)); switch(msgType) { case NW_GTP_ECHO_REQ: diff --git a/openair-cn/GTPV1-U/nw-gtpv1u/src/NwGtpv1uMsg.c b/openair-cn/GTPV1-U/nw-gtpv1u/src/NwGtpv1uMsg.c index ce3a8ae1ba..fe1c509fef 100644 --- a/openair-cn/GTPV1-U/nw-gtpv1u/src/NwGtpv1uMsg.c +++ b/openair-cn/GTPV1-U/nw-gtpv1u/src/NwGtpv1uMsg.c @@ -60,14 +60,14 @@ static NwGtpv1uMsgT *gpGtpv1uMsgPool = NULL; NwGtpv1uRcT nwGtpv1uMsgNew( NW_IN NwGtpv1uStackHandleT hGtpuStackHandle, - NW_IN NwU8T seqNumFlag, - NW_IN NwU8T npduNumFlag, - NW_IN NwU8T extHdrFlag, - NW_IN NwU8T msgType, - NW_IN NwU8T teid, - NW_IN NwU16T seqNum, - NW_IN NwU8T npduNum, - NW_IN NwU8T nextExtHeader, + NW_IN uint8_t seqNumFlag, + NW_IN uint8_t npduNumFlag, + NW_IN uint8_t extHdrFlag, + NW_IN uint8_t msgType, + NW_IN uint8_t teid, + NW_IN uint16_t seqNum, + NW_IN uint8_t npduNum, + NW_IN uint8_t nextExtHeader, NW_OUT NwGtpv1uMsgHandleT *phMsg) { NwGtpv1uStackT *pStack = (NwGtpv1uStackT *) hGtpuStackHandle; @@ -118,18 +118,18 @@ nwGtpv1uMsgNew( NW_IN NwGtpv1uStackHandleT hGtpuStackHandle, NwGtpv1uRcT nwGtpv1uGpduMsgNew( NW_IN NwGtpv1uStackHandleT hGtpuStackHandle, - NW_IN NwU32T teid, - NW_IN NwU8T seqNumFlag, - NW_IN NwU16T seqNum, - NW_IN NwU8T *tpdu, - NW_IN NwU16T tpduLength, - NW_IN NwU32T tpduOffset, + NW_IN uint32_t teid, + NW_IN uint8_t seqNumFlag, + NW_IN uint16_t seqNum, + NW_IN uint8_t *tpdu, + NW_IN uint16_t tpduLength, + NW_IN uint32_t tpduOffset, NW_OUT NwGtpv1uMsgHandleT *phMsg) { NwGtpv1uStackT *pStack = (NwGtpv1uStackT *) hGtpuStackHandle; NwGtpv1uMsgT *pMsg; - //NwU32T header_len = 0; - NwU32T msgExtraLen = 0; + //uint32_t header_len = 0; + uint32_t msgExtraLen = 0; if(gpGtpv1uMsgPool) { pMsg = gpGtpv1uMsgPool; @@ -237,8 +237,8 @@ nwGtpv1uMsgFromMsgNew( NW_IN NwGtpv1uStackHandleT hGtpuStackHandle, NwGtpv1uRcT nwGtpv1uMsgFromBufferNew( NW_IN NwGtpv1uStackHandleT hGtpuStackHandle, - NW_IN NwU8T *pBuf, - NW_IN NwU32T bufLen, + NW_IN uint8_t *pBuf, + NW_IN uint32_t bufLen, NW_OUT NwGtpv1uMsgHandleT *phMsg) { NwGtpv1uStackT *pStack = (NwGtpv1uStackT *) hGtpuStackHandle; @@ -267,17 +267,17 @@ nwGtpv1uMsgFromBufferNew( NW_IN NwGtpv1uStackHandleT hGtpuStackHandle, pBuf += 2; - pMsg->teid = ntohl(*((NwU32T *)pBuf)); + pMsg->teid = ntohl(*((uint32_t *)pBuf)); pBuf += 4; if(pMsg->extHdrFlag || pMsg->seqNumFlag || pMsg->npduNumFlag) { - pMsg->seqNum = ntohs(*(((NwU16T *)pBuf))); + pMsg->seqNum = ntohs(*(((uint16_t *)pBuf))); pBuf += 2; pMsg->npduNum = *(pBuf++); pMsg->nextExtHdrType = *(pBuf++); } - pMsg->msgBufOffset = (NwU32T)(pBuf - pMsg->msgBuf); + pMsg->msgBufOffset = (uint32_t)(pBuf - pMsg->msgBuf); pMsg->msgBufLen = bufLen - pMsg->msgBufOffset; pMsg->msgLen = bufLen; #if defined(LOG_GTPU) && LOG_GTPU > 0 @@ -308,7 +308,7 @@ nwGtpv1uMsgDelete( NW_IN NwGtpv1uStackHandleT hGtpuStackHandle, */ NwGtpv1uRcT -nwGtpv1uMsgSetTeid(NW_IN NwGtpv1uMsgHandleT hMsg, NwU32T teid) +nwGtpv1uMsgSetTeid(NW_IN NwGtpv1uMsgHandleT hMsg, uint32_t teid) { NwGtpv1uMsgT *thiz = (NwGtpv1uMsgT *) hMsg; thiz->teid = teid; @@ -326,7 +326,7 @@ nwGtpv1uMsgSetTeid(NW_IN NwGtpv1uMsgHandleT hMsg, NwU32T teid) */ NwGtpv1uRcT -nwGtpv1uMsgSetSeqNumber(NW_IN NwGtpv1uMsgHandleT hMsg, NwU32T seqNum) +nwGtpv1uMsgSetSeqNumber(NW_IN NwGtpv1uMsgHandleT hMsg, uint32_t seqNum) { NwGtpv1uMsgT *thiz = (NwGtpv1uMsgT *) hMsg; thiz->seqNum = seqNum; @@ -339,7 +339,7 @@ nwGtpv1uMsgSetSeqNumber(NW_IN NwGtpv1uMsgHandleT hMsg, NwU32T seqNum) * @param[in] hMsg : Message handle. */ -NwU32T +uint32_t nwGtpv1uMsgGetTeid(NW_IN NwGtpv1uMsgHandleT hMsg) { NwGtpv1uMsgT *thiz = (NwGtpv1uMsgT *) hMsg; @@ -353,7 +353,7 @@ nwGtpv1uMsgGetTeid(NW_IN NwGtpv1uMsgHandleT hMsg) * @param[in] hMsg : Message handle. */ -NwU32T +uint32_t nwGtpv1uMsgGetSeqNumber(NW_IN NwGtpv1uMsgHandleT hMsg) { NwGtpv1uMsgT *thiz = (NwGtpv1uMsgT *) hMsg; @@ -366,7 +366,7 @@ nwGtpv1uMsgGetSeqNumber(NW_IN NwGtpv1uMsgHandleT hMsg) * @param[in] hMsg : Message handle. */ -NwU32T +uint32_t nwGtpv1uMsgGetMsgType(NW_IN NwGtpv1uMsgHandleT hMsg) { NwGtpv1uMsgT *thiz = (NwGtpv1uMsgT *) hMsg; @@ -380,11 +380,11 @@ nwGtpv1uMsgGetMsgType(NW_IN NwGtpv1uMsgHandleT hMsg) */ NwGtpv1uRcT -nwGtpv1uMsgGetTpdu(NW_IN NwGtpv1uMsgHandleT hMsg, NwU8T *pTpduBuf, - NwU32T *pTpduLength) +nwGtpv1uMsgGetTpdu(NW_IN NwGtpv1uMsgHandleT hMsg, uint8_t *pTpduBuf, + uint32_t *pTpduLength) { NwGtpv1uMsgT *thiz = (NwGtpv1uMsgT *) hMsg; - NwU8T headerLength = ((thiz->seqNumFlag || thiz->extHdrFlag + uint8_t headerLength = ((thiz->seqNumFlag || thiz->extHdrFlag || thiz->npduNumFlag) ? 12 : 8); *pTpduLength = thiz->msgLen - headerLength; @@ -392,7 +392,7 @@ nwGtpv1uMsgGetTpdu(NW_IN NwGtpv1uMsgHandleT hMsg, NwU8T *pTpduBuf, return NW_GTPV1U_OK; } -NwU8T * +uint8_t * nwGtpv1uMsgGetTpduHandle(NW_IN NwGtpv1uMsgHandleT hMsg) { NwGtpv1uMsgT *thiz = (NwGtpv1uMsgT *) hMsg; @@ -400,7 +400,7 @@ nwGtpv1uMsgGetTpduHandle(NW_IN NwGtpv1uMsgHandleT hMsg) || thiz->npduNumFlag) ? 12 : 8)); } -NwU32T +uint32_t nwGtpv1uMsgGetTpduLength(NW_IN NwGtpv1uMsgHandleT hMsg) { NwGtpv1uMsgT *thiz = (NwGtpv1uMsgT *) hMsg; @@ -410,8 +410,8 @@ nwGtpv1uMsgGetTpduLength(NW_IN NwGtpv1uMsgHandleT hMsg) NwGtpv1uRcT nwGtpv1uMsgAddIeTV1(NW_IN NwGtpv1uMsgHandleT hMsg, - NW_IN NwU8T type, - NW_IN NwU8T value) + NW_IN uint8_t type, + NW_IN uint8_t value) { NwGtpv1uMsgT *pMsg = (NwGtpv1uMsgT *) hMsg; NwGtpv1uIeTv1T *pIe; @@ -428,9 +428,9 @@ nwGtpv1uMsgAddIeTV1(NW_IN NwGtpv1uMsgHandleT hMsg, NwGtpv1uRcT nwGtpv1uMsgAddIeTV2(NW_IN NwGtpv1uMsgHandleT hMsg, - NW_IN NwU8T type, - NW_IN NwU16T length, - NW_IN NwU16T value) + NW_IN uint8_t type, + NW_IN uint16_t length, + NW_IN uint16_t value) { NwGtpv1uMsgT *pMsg = (NwGtpv1uMsgT *) hMsg; NwGtpv1uIeTv2T *pIe; @@ -447,9 +447,9 @@ nwGtpv1uMsgAddIeTV2(NW_IN NwGtpv1uMsgHandleT hMsg, NwGtpv1uRcT nwGtpv1uMsgAddIeTV4(NW_IN NwGtpv1uMsgHandleT hMsg, - NW_IN NwU8T type, - NW_IN NwU16T length, - NW_IN NwU32T value) + NW_IN uint8_t type, + NW_IN uint16_t length, + NW_IN uint32_t value) { NwGtpv1uMsgT *pMsg = (NwGtpv1uMsgT *) hMsg; NwGtpv1uIeTv4T *pIe; @@ -466,9 +466,9 @@ nwGtpv1uMsgAddIeTV4(NW_IN NwGtpv1uMsgHandleT hMsg, NwGtpv1uRcT nwGtpv1uMsgAddIe(NW_IN NwGtpv1uMsgHandleT hMsg, - NW_IN NwU8T type, - NW_IN NwU16T length, - NW_IN NwU8T *pVal) + NW_IN uint8_t type, + NW_IN uint16_t length, + NW_IN uint8_t *pVal) { NwGtpv1uMsgT *pMsg = (NwGtpv1uMsgT *) hMsg; NwGtpv1uIeTlvT *pIe; @@ -489,8 +489,8 @@ nwGtpv1uMsgHexDump(NwGtpv1uMsgHandleT hMsg, FILE *fp) { NwGtpv1uMsgT *pMsg = (NwGtpv1uMsgT *) hMsg; - NwU8T *data = pMsg->msgBuf; - NwU32T size = pMsg->msgLen; + uint8_t *data = pMsg->msgBuf; + uint32_t size = pMsg->msgLen; unsigned char *p = (unsigned char *)data; unsigned char c; diff --git a/openair-cn/GTPV1-U/nw-gtpv1u/src/NwGtpv1uTrxn.c b/openair-cn/GTPV1-U/nw-gtpv1u/src/NwGtpv1uTrxn.c index 63db205e0c..27cb59050f 100644 --- a/openair-cn/GTPV1-U/nw-gtpv1u/src/NwGtpv1uTrxn.c +++ b/openair-cn/GTPV1-U/nw-gtpv1u/src/NwGtpv1uTrxn.c @@ -232,7 +232,7 @@ nwGtpv1uTrxnNew( NW_IN NwGtpv1uStackT *thiz, */ NwGtpv1uRcT nwGtpv1uTrxnWithSeqNew( NW_IN NwGtpv1uStackT *thiz, - NW_IN NwU32T seqNum, + NW_IN uint32_t seqNum, NW_OUT NwGtpv1uTrxnT **ppTrxn) { NwGtpv1uRcT rc = NW_GTPV1U_OK; @@ -313,12 +313,12 @@ nwGtpv1uTrxnDelete( NW_INOUT NwGtpv1uTrxnT **pthiz) NwGtpv1uRcT nwGtpv1uTrxnCreateAndSendMsg( NW_IN NwGtpv1uStackT *thiz, NW_IN NwGtpv1uTrxnT *pTrxn, - NW_IN NwU32T peerIp, - NW_IN NwU32T peerPort, + NW_IN uint32_t peerIp, + NW_IN uint32_t peerPort, NW_IN NwGtpv1uMsgT *pMsg) { NwGtpv1uRcT rc; - NwU8T *msgHdr; + uint8_t *msgHdr; NW_ASSERT(thiz); NW_ASSERT(pMsg); @@ -334,33 +334,33 @@ nwGtpv1uTrxnCreateAndSendMsg( NW_IN NwGtpv1uStackT *thiz, (pMsg->npduNumFlag); *(msgHdr++) = (pMsg->msgType); - *((NwU16T *) msgHdr) = htons(pMsg->msgLen); + *((uint16_t *) msgHdr) = htons(pMsg->msgLen); msgHdr += 2; - *((NwU32T *) msgHdr) = htonl(pMsg->teid); + *((uint32_t *) msgHdr) = htonl(pMsg->teid); msgHdr += 4; if(pMsg->seqNumFlag | pMsg->extHdrFlag | pMsg->npduNumFlag) { if(pMsg->seqNumFlag) { - *((NwU16T *) msgHdr) = htons((pTrxn ? pTrxn->seqNum : pMsg->seqNum)); + *((uint16_t *) msgHdr) = htons((pTrxn ? pTrxn->seqNum : pMsg->seqNum)); } else { - *((NwU16T *) msgHdr) = 0x0000; + *((uint16_t *) msgHdr) = 0x0000; } msgHdr += 2; if(pMsg->npduNumFlag) { - *((NwU8T *) msgHdr) = pMsg->npduNumFlag; + *((uint8_t *) msgHdr) = pMsg->npduNumFlag; } else { - *((NwU8T *) msgHdr) = 0x00; + *((uint8_t *) msgHdr) = 0x00; } msgHdr++; if(pMsg->extHdrFlag) { - *((NwU8T *) msgHdr) = pMsg->extHdrFlag; + *((uint8_t *) msgHdr) = pMsg->extHdrFlag; } else { - *((NwU8T *) msgHdr) = 0x00; + *((uint8_t *) msgHdr) = 0x00; } msgHdr++; diff --git a/openair-cn/GTPV1-U/nw-gtpv1u/test-app/nw-helloworld/NwMiniLogMgrEntity.c b/openair-cn/GTPV1-U/nw-gtpv1u/test-app/nw-helloworld/NwMiniLogMgrEntity.c index 86c059a1bb..c50e6a17db 100644 --- a/openair-cn/GTPV1-U/nw-gtpv1u/test-app/nw-helloworld/NwMiniLogMgrEntity.c +++ b/openair-cn/GTPV1-U/nw-gtpv1u/test-app/nw-helloworld/NwMiniLogMgrEntity.c @@ -23,27 +23,27 @@ extern "C" { #endif -NwU32T g_log_level = NW_LOG_LEVEL_INFO; +uint32_t g_log_level = NW_LOG_LEVEL_INFO; /*--------------------------------------------------------------------------- * Public functions *--------------------------------------------------------------------------*/ -NwGtpv1uRcT nwMiniLogMgrInit(NwMiniLogMgrT *thiz, NwU32T logLevel ) +NwGtpv1uRcT nwMiniLogMgrInit(NwMiniLogMgrT *thiz, uint32_t logLevel ) { thiz->logLevel = logLevel; return NW_GTPV1U_OK; } -NwGtpv1uRcT nwMiniLogMgrSetLogLevel(NwMiniLogMgrT *thiz, NwU32T logLevel) +NwGtpv1uRcT nwMiniLogMgrSetLogLevel(NwMiniLogMgrT *thiz, uint32_t logLevel) { thiz->logLevel = logLevel; } NwGtpv1uRcT nwMiniLogMgrLogRequest (NwGtpv1uLogMgrHandleT hLogMgr, - NwU32T logLevel, + uint32_t logLevel, NwCharT *file, - NwU32T line, + uint32_t line, NwCharT *logStr) { NwMiniLogMgrT *thiz = (NwMiniLogMgrT *) hLogMgr; diff --git a/openair-cn/GTPV1-U/nw-gtpv1u/test-app/nw-helloworld/NwMiniLogMgrEntity.h b/openair-cn/GTPV1-U/nw-gtpv1u/test-app/nw-helloworld/NwMiniLogMgrEntity.h index cff5649b09..ffa9c0c85e 100644 --- a/openair-cn/GTPV1-U/nw-gtpv1u/test-app/nw-helloworld/NwMiniLogMgrEntity.h +++ b/openair-cn/GTPV1-U/nw-gtpv1u/test-app/nw-helloworld/NwMiniLogMgrEntity.h @@ -23,7 +23,7 @@ #ifndef __NW_MINI_LOG_MGR_H__ #define __NW_MINI_LOG_MGR_H__ -extern NwU32T g_log_level; +extern uint32_t g_log_level; #define NW_LOG( _logLevel, ...) \ @@ -37,7 +37,7 @@ extern NwU32T g_log_level; } while(0) typedef struct { - NwU8T logLevel; + uint8_t logLevel; } NwMiniLogMgrT; #ifdef __cplusplus @@ -45,9 +45,9 @@ extern "C" { #endif NwGtpv1uRcT nwMiniLogMgrLogRequest (NwGtpv1uLogMgrHandleT logMgrHandle, - NwU32T logLevel, + uint32_t logLevel, NwCharT* file, - NwU32T line, + uint32_t line, NwCharT* logStr); #ifdef __cplusplus diff --git a/openair-cn/GTPV1-U/nw-gtpv1u/test-app/nw-helloworld/NwMiniTmrMgrEntity.c b/openair-cn/GTPV1-U/nw-gtpv1u/test-app/nw-helloworld/NwMiniTmrMgrEntity.c index 67112b7d30..f6102d5250 100644 --- a/openair-cn/GTPV1-U/nw-gtpv1u/test-app/nw-helloworld/NwMiniTmrMgrEntity.c +++ b/openair-cn/GTPV1-U/nw-gtpv1u/test-app/nw-helloworld/NwMiniTmrMgrEntity.c @@ -53,9 +53,9 @@ NW_TMR_CALLBACK(nwMiniTmrMgrHandleTimeout) *--------------------------------------------------------------------------*/ NwGtpv1uRcT nwTimerStart( NwGtpv1uTimerMgrHandleT tmrMgrHandle, - NwU32T timeoutSec, - NwU32T timeoutUsec, - NwU32T tmrType, + uint32_t timeoutSec, + uint32_t timeoutUsec, + uint32_t tmrType, void *timeoutArg, NwGtpv1uTimerHandleT *hTmr) { diff --git a/openair-cn/GTPV1-U/nw-gtpv1u/test-app/nw-helloworld/NwMiniTmrMgrEntity.h b/openair-cn/GTPV1-U/nw-gtpv1u/test-app/nw-helloworld/NwMiniTmrMgrEntity.h index 34ba9a944d..b17228c9cf 100644 --- a/openair-cn/GTPV1-U/nw-gtpv1u/test-app/nw-helloworld/NwMiniTmrMgrEntity.h +++ b/openair-cn/GTPV1-U/nw-gtpv1u/test-app/nw-helloworld/NwMiniTmrMgrEntity.h @@ -35,9 +35,9 @@ extern "C" { #endif NwGtpv1uRcT nwTimerStart( NwGtpv1uTimerMgrHandleT tmrMgrHandle, - NwU32T timeoutSec, - NwU32T timeoutUsec, - NwU32T tmrType, + uint32_t timeoutSec, + uint32_t timeoutUsec, + uint32_t tmrType, void* timeoutArg, NwGtpv1uTimerHandleT* hTmr); diff --git a/openair-cn/GTPV1-U/nw-gtpv1u/test-app/nw-helloworld/NwMiniUdpEntity.c b/openair-cn/GTPV1-U/nw-gtpv1u/test-app/nw-helloworld/NwMiniUdpEntity.c index 224138dc52..a63b02985c 100644 --- a/openair-cn/GTPV1-U/nw-gtpv1u/test-app/nw-helloworld/NwMiniUdpEntity.c +++ b/openair-cn/GTPV1-U/nw-gtpv1u/test-app/nw-helloworld/NwMiniUdpEntity.c @@ -44,9 +44,9 @@ static void NW_TMR_CALLBACK(nwUdpDataIndicationCallbackData) { NwGtpv1uRcT rc; - NwU8T udpBuf[MAX_UDP_PAYLOAD_LEN]; + uint8_t udpBuf[MAX_UDP_PAYLOAD_LEN]; NwS32T bytesRead; - NwU32T peerLen; + uint32_t peerLen; struct sockaddr_in peer; NwMiniUdpEntityT *thiz = (NwMiniUdpEntityT *) arg; @@ -71,7 +71,7 @@ void NW_TMR_CALLBACK(nwUdpDataIndicationCallbackData) *--------------------------------------------------------------------------*/ NwGtpv1uRcT nwMiniUdpInit(NwMiniUdpEntityT *thiz, - NwGtpv1uStackHandleT hGtpv1uStack, NwU8T *ipAddr) + NwGtpv1uStackHandleT hGtpv1uStack, uint8_t *ipAddr) { int sd; struct sockaddr_in addr; @@ -109,10 +109,10 @@ NwGtpv1uRcT nwMiniUdpDestroy(NwMiniUdpEntityT *thiz) } NwGtpv1uRcT nwMiniUdpDataReq(NwGtpv1uUdpHandleT udpHandle, - NwU8T *dataBuf, - NwU32T dataSize, - NwU32T peerIpAddr, - NwU32T peerPort) + uint8_t *dataBuf, + uint32_t dataSize, + uint32_t peerIpAddr, + uint32_t peerPort) { struct sockaddr_in peerAddr; NwS32T bytesSent; diff --git a/openair-cn/GTPV1-U/nw-gtpv1u/test-app/nw-helloworld/NwMiniUdpEntity.h b/openair-cn/GTPV1-U/nw-gtpv1u/test-app/nw-helloworld/NwMiniUdpEntity.h index 018175a25c..2e19ebbb8e 100644 --- a/openair-cn/GTPV1-U/nw-gtpv1u/test-app/nw-helloworld/NwMiniUdpEntity.h +++ b/openair-cn/GTPV1-U/nw-gtpv1u/test-app/nw-helloworld/NwMiniUdpEntity.h @@ -25,7 +25,7 @@ #define __NW_MINI_UDP_ENTITY_H__ typedef struct { - NwU32T hSocket; + uint32_t hSocket; NwEventT ev; NwGtpv1uStackHandleT hGtpv1uStack; } NwMiniUdpEntityT; @@ -34,15 +34,15 @@ typedef struct { extern "C" { #endif -NwGtpv1uRcT nwMiniUdpInit(NwMiniUdpEntityT* thiz, NwGtpv1uStackHandleT hGtpv1uStack, NwU8T* ipAddr); +NwGtpv1uRcT nwMiniUdpInit(NwMiniUdpEntityT* thiz, NwGtpv1uStackHandleT hGtpv1uStack, uint8_t* ipAddr); NwGtpv1uRcT nwMiniUdpDestroy(NwMiniUdpEntityT* thiz); NwGtpv1uRcT nwMiniUdpDataReq(NwGtpv1uUdpHandleT udpHandle, - NwU8T* dataBuf, - NwU32T dataSize, - NwU32T peerAddr, - NwU32T peerPort); + uint8_t* dataBuf, + uint32_t dataSize, + uint32_t peerAddr, + uint32_t peerPort); #ifdef __cplusplus } diff --git a/openair-cn/GTPV1-U/nw-gtpv1u/test-app/nw-helloworld/NwMiniUlpEntity.c b/openair-cn/GTPV1-U/nw-gtpv1u/test-app/nw-helloworld/NwMiniUlpEntity.c index 8f05c794c2..e2f505b4eb 100644 --- a/openair-cn/GTPV1-U/nw-gtpv1u/test-app/nw-helloworld/NwMiniUlpEntity.c +++ b/openair-cn/GTPV1-U/nw-gtpv1u/test-app/nw-helloworld/NwMiniUlpEntity.c @@ -36,7 +36,7 @@ extern "C" { #define MAX_UDP_PAYLOAD_LEN (4096) NwGtpv1uRcT -nwMiniUlpSendEchoRequestToPeer(NwMiniUlpEntityT *thiz, NwU32T peerIp) +nwMiniUlpSendEchoRequestToPeer(NwMiniUlpEntityT *thiz, uint32_t peerIp) { NwGtpv1uRcT rc; NwGtpv1uUlpApiT ulpReq; @@ -82,9 +82,9 @@ void NW_EVT_CALLBACK(nwMiniUlpDataIndicationCallbackData) { NwMiniUlpEntityT *thiz = (NwMiniUlpEntityT *) arg; NwGtpv1uRcT rc; - NwU8T udpBuf[MAX_UDP_PAYLOAD_LEN]; + uint8_t udpBuf[MAX_UDP_PAYLOAD_LEN]; NwS32T bytesRead; - NwU32T peerLen; + uint32_t peerLen; struct sockaddr_in peer; peerLen = sizeof(peer); @@ -123,7 +123,7 @@ nwMiniUlpDestroy(NwMiniUlpEntityT *thiz) } NwGtpv1uRcT -nwMiniUlpCreateConn(NwMiniUlpEntityT *thiz, char *localIpStr, NwU16T localport, +nwMiniUlpCreateConn(NwMiniUlpEntityT *thiz, char *localIpStr, uint16_t localport, char *peerIpStr) { NwGtpv1uRcT rc; @@ -214,8 +214,8 @@ nwMiniUlpDestroyConn(NwMiniUlpEntityT *thiz) NwGtpv1uRcT -nwMiniUlpTpduSend(NwMiniUlpEntityT *thiz, NwU8T *tpduBuf, NwU32T tpduLen , - NwU16T fromPort) +nwMiniUlpTpduSend(NwMiniUlpEntityT *thiz, uint8_t *tpduBuf, uint32_t tpduLen , + uint16_t fromPort) { NwGtpv1uRcT rc; NwGtpv1uUlpApiT ulpReq; @@ -260,9 +260,9 @@ nwMiniUlpProcessStackReqCallback (NwGtpv1uUlpHandleT hUlp, case NW_GTPV1U_ULP_API_RECV_TPDU: { struct sockaddr_in peerAddr; NwS32T bytesSent; - NwU8T dataBuf[4096]; - NwU32T dataSize; - NwU32T peerIpAddr = (inet_addr(thiz->peerIpStr)); + uint8_t dataBuf[4096]; + uint32_t dataSize; + uint32_t peerIpAddr = (inet_addr(thiz->peerIpStr)); NW_ASSERT( NW_GTPV1U_OK == nwGtpv1uMsgGetTpdu(pUlpApi->apiInfo.recvMsgInfo.hMsg, dataBuf, &dataSize) ); diff --git a/openair-cn/GTPV1-U/nw-gtpv1u/test-app/nw-helloworld/NwMiniUlpEntity.h b/openair-cn/GTPV1-U/nw-gtpv1u/test-app/nw-helloworld/NwMiniUlpEntity.h index f50fa84ab6..dd55e8ed7c 100644 --- a/openair-cn/GTPV1-U/nw-gtpv1u/test-app/nw-helloworld/NwMiniUlpEntity.h +++ b/openair-cn/GTPV1-U/nw-gtpv1u/test-app/nw-helloworld/NwMiniUlpEntity.h @@ -21,11 +21,11 @@ typedef struct { int hSocket; - NwU16T seqNum; - NwU8T restartCounter; - NwU8T localIpStr[16]; - NwU8T peerIpStr[16]; - NwU32T localPort[1025]; + uint16_t seqNum; + uint8_t restartCounter; + uint8_t localIpStr[16]; + uint8_t peerIpStr[16]; + uint32_t localPort[1025]; NwEventT ev[1025]; NwGtpv1uStackHandleT hGtpv1uStack; NwGtpv1uStackSessionHandleT hGtpv1uConn; @@ -42,7 +42,7 @@ NwGtpv1uRcT nwMiniUlpDestroy(NwMiniUlpEntityT* thiz); NwGtpv1uRcT -nwMiniUlpCreateConn(NwMiniUlpEntityT* thiz, char* localIpStr, NwU16T localPort, char* peerIpStr); +nwMiniUlpCreateConn(NwMiniUlpEntityT* thiz, char* localIpStr, uint16_t localPort, char* peerIpStr); NwGtpv1uRcT nwMiniUlpDestroyConn(NwMiniUlpEntityT* thiz); @@ -51,7 +51,7 @@ NwGtpv1uRcT nwMiniUlpSendMsg(NwMiniUlpEntityT* thiz); NwGtpv1uRcT -nwMiniUlpTpduSend(NwMiniUlpEntityT* thiz, NwU8T* tpduBuf, NwU32T tpduLen , NwU16T fromPort); +nwMiniUlpTpduSend(NwMiniUlpEntityT* thiz, uint8_t* tpduBuf, uint32_t tpduLen , uint16_t fromPort); NwGtpv1uRcT nwMiniUlpProcessStackReqCallback (NwGtpv1uUlpHandleT hUlp, diff --git a/openair-cn/GTPV1-U/nw-gtpv1u/test-app/nw-helloworld/helloworld.c b/openair-cn/GTPV1-U/nw-gtpv1u/test-app/nw-helloworld/helloworld.c index faf490a743..2f618ad642 100644 --- a/openair-cn/GTPV1-U/nw-gtpv1u/test-app/nw-helloworld/helloworld.c +++ b/openair-cn/GTPV1-U/nw-gtpv1u/test-app/nw-helloworld/helloworld.c @@ -37,8 +37,8 @@ int main(int argc, char *argv[]) { NwGtpv1uRcT rc; char *logLevelStr; - NwU32T logLevel; - NwU32T num_of_connections; + uint32_t logLevel; + uint32_t num_of_connections; NwGtpv1uStackHandleT hGtpv1uStack = 0; NwMiniUlpEntityT ulpObj; diff --git a/openair-cn/GTPV2-C/nwgtpv2c-0.11/include/NwGtpv2cMsgIeParseInfo.h b/openair-cn/GTPV2-C/nwgtpv2c-0.11/include/NwGtpv2cMsgIeParseInfo.h index bcedf5e4bc..38a37a5d4a 100644 --- a/openair-cn/GTPV2-C/nwgtpv2c-0.11/include/NwGtpv2cMsgIeParseInfo.h +++ b/openair-cn/GTPV2-C/nwgtpv2c-0.11/include/NwGtpv2cMsgIeParseInfo.h @@ -43,25 +43,25 @@ */ typedef struct { - NwU8T groupedIeType; - NwU16T mandatoryIeCount; + uint8_t groupedIeType; + uint16_t mandatoryIeCount; NwGtpv2cStackHandleT hStack; struct { - NwU8T ieMinLength; - NwU8T iePresence; + uint8_t ieMinLength; + uint8_t iePresence; } ieParseInfo[NW_GTPV2C_IE_TYPE_MAXIMUM][NW_GTPV2C_IE_INSTANCE_MAXIMUM]; } NwGtpv2cGroupedIeParseInfoT; typedef struct { - NwU16T msgType; - NwU16T mandatoryIeCount; + uint16_t msgType; + uint16_t mandatoryIeCount; NwGtpv2cStackHandleT hStack; struct { - NwU8T ieMinLength; - NwU8T iePresence; + uint8_t ieMinLength; + uint8_t iePresence; NwGtpv2cGroupedIeParseInfoT* pGroupedIeInfo; } ieParseInfo[NW_GTPV2C_IE_TYPE_MAXIMUM][NW_GTPV2C_IE_INSTANCE_MAXIMUM]; @@ -72,7 +72,7 @@ extern "C" { #endif NwGtpv2cMsgIeParseInfoT* -nwGtpv2cMsgIeParseInfoNew(NwGtpv2cStackHandleT hStack, NwU8T msgType); +nwGtpv2cMsgIeParseInfoNew(NwGtpv2cStackHandleT hStack, uint8_t msgType); NwRcT nwGtpv2cMsgIeParseInfoDelete(NwGtpv2cMsgIeParseInfoT* thiz); diff --git a/openair-cn/GTPV2-C/nwgtpv2c-0.11/include/NwGtpv2cPrivate.h b/openair-cn/GTPV2-C/nwgtpv2c-0.11/include/NwGtpv2cPrivate.h index d52d136eba..29be2c3f29 100644 --- a/openair-cn/GTPV2-C/nwgtpv2c-0.11/include/NwGtpv2cPrivate.h +++ b/openair-cn/GTPV2-C/nwgtpv2c-0.11/include/NwGtpv2cPrivate.h @@ -90,16 +90,16 @@ extern "C" { */ typedef struct NwGtpv2cStack { - NwU32T id; + uint32_t id; NwGtpv2cUlpEntityT ulp; NwGtpv2cUdpEntityT udp; NwGtpv2cMemMgrEntityT memMgr; NwGtpv2cTimerMgrEntityT tmrMgr; NwGtpv2cLogMgrEntityT logMgr; - NwU32T seqNum; - NwU32T logLevel; - NwU32T restartCounter; + uint32_t seqNum; + uint32_t logLevel; + uint32_t restartCounter; NwGtpv2cMsgIeParseInfoT *pGtpv2cMsgIeParseInfo[NW_GTP_MSG_END]; struct NwGtpv2cTimeoutInfo *activeTimerInfo; @@ -123,12 +123,12 @@ typedef struct NwGtpv2cStack { typedef struct NwGtpv2cTimeoutInfo { NwGtpv2cStackHandleT hStack; struct timeval tvTimeout; - NwU32T tmrType; + uint32_t tmrType; void* timeoutArg; NwRcT (*timeoutCallbackFunc)(void*); NwGtpv2cTimerHandleT hTimer; RB_ENTRY (NwGtpv2cTimeoutInfo) activeTimerListRbtNode; /**< RB Tree Data Structure Node */ - NwU32T timerMinHeapIndex; + uint32_t timerMinHeapIndex; struct NwGtpv2cTimeoutInfo *next; } NwGtpv2cTimeoutInfoT; @@ -143,23 +143,23 @@ typedef struct NwGtpv2cTimeoutInfo { * NwGtpv2cMsgT holds gtpv2c messages to/from the peer. */ typedef struct NwGtpv2cMsgS { - NwU8T version; - NwU8T teidPresent; - NwU8T msgType; - NwU16T msgLen; - NwU32T teid; - NwU32T seqNum; - NwU8T* pMsgStart; + uint8_t version; + uint8_t teidPresent; + uint8_t msgType; + uint16_t msgLen; + uint32_t teid; + uint32_t seqNum; + uint8_t* pMsgStart; #define NW_GTPV2C_MAX_GROUPED_IE_DEPTH (2) struct { NwGtpv2cIeTlvT *pIe[NW_GTPV2C_MAX_GROUPED_IE_DEPTH]; - NwU8T top; + uint8_t top; } groupedIeEncodeStack; NwBoolT isIeValid[NW_GTPV2C_IE_TYPE_MAXIMUM][NW_GTPV2C_IE_INSTANCE_MAXIMUM]; - NwU8T *pIe[NW_GTPV2C_IE_TYPE_MAXIMUM][NW_GTPV2C_IE_INSTANCE_MAXIMUM]; - NwU8T msgBuf[NW_GTPV2C_MAX_MSG_LEN]; + uint8_t *pIe[NW_GTPV2C_IE_TYPE_MAXIMUM][NW_GTPV2C_IE_INSTANCE_MAXIMUM]; + uint8_t msgBuf[NW_GTPV2C_MAX_MSG_LEN]; NwGtpv2cStackHandleT hStack; struct NwGtpv2cMsgS* next; } NwGtpv2cMsgT; @@ -169,11 +169,11 @@ typedef struct NwGtpv2cMsgS { */ typedef struct NwGtpv2cTrxn { - NwU32T seqNum; - NwU32T peerIp; - NwU32T peerPort; - NwU8T t3Timer; - NwU8T maxRetries; + uint32_t seqNum; + uint32_t peerIp; + uint32_t peerPort; + uint8_t t3Timer; + uint8_t maxRetries; NwGtpv2cMsgT* pMsg; NwGtpv2cStackT* pStack; NwGtpv2cTimerHandleT hRspTmr; /**< Handle to reponse timer */ @@ -189,11 +189,11 @@ typedef struct NwGtpv2cTrxn { */ typedef struct NwGtpv2cPathS { - NwU32T hUlpPath; /**< Handle to ULP path contect */ - NwU32T ipv4Address; - NwU32T restartCounter; - NwU16T t3ResponseTimout; - NwU16T n3RequestCount; + uint32_t hUlpPath; /**< Handle to ULP path contect */ + uint32_t ipv4Address; + uint32_t restartCounter; + uint16_t t3ResponseTimout; + uint16_t n3RequestCount; NwGtpv2cTimerHandleT hKeepAliveTmr; /**< Handle to path keep alive echo timer */ RB_ENTRY (NwGtpv2cPathS) pathMapRbtNode; } NwGtpv2cPathT; @@ -210,9 +210,9 @@ RB_PROTOTYPE(NwGtpv2cActiveTimerList, NwGtpv2cTimeoutInfo, activeTimerListRbtNod NwRcT nwGtpv2cStartTimer(NwGtpv2cStackT* thiz, - NwU32T timeoutSec, - NwU32T timeoutUsec, - NwU32T tmrType, + uint32_t timeoutSec, + uint32_t timeoutUsec, + uint32_t tmrType, NwRcT (*timeoutCallbackFunc)(void*), void* timeoutCallbackArg, NwGtpv2cTimerHandleT *phTimer); diff --git a/openair-cn/GTPV2-C/nwgtpv2c-0.11/include/NwGtpv2cTrxn.h b/openair-cn/GTPV2-C/nwgtpv2c-0.11/include/NwGtpv2cTrxn.h index ebf727583c..26ae1875c3 100644 --- a/openair-cn/GTPV2-C/nwgtpv2c-0.11/include/NwGtpv2cTrxn.h +++ b/openair-cn/GTPV2-C/nwgtpv2c-0.11/include/NwGtpv2cTrxn.h @@ -60,7 +60,7 @@ nwGtpv2cTrxnNew( NW_IN NwGtpv2cStackT* pStack); */ NwGtpv2cTrxnT* nwGtpv2cTrxnWithSeqNumNew( NW_IN NwGtpv2cStackT* pStack, - NW_IN NwU32T seqNum); + NW_IN uint32_t seqNum); /** * Another overloaded constructor. Create transaction as outstanding @@ -76,10 +76,10 @@ nwGtpv2cTrxnWithSeqNumNew( NW_IN NwGtpv2cStackT* pStack, NwGtpv2cTrxnT* nwGtpv2cTrxnOutstandingRxNew( NW_IN NwGtpv2cStackT* pStack, - NW_IN NwU32T teidLocal, - NW_IN NwU32T peerIp, - NW_IN NwU32T peerPort, - NW_IN NwU32T seqNum); + NW_IN uint32_t teidLocal, + NW_IN uint32_t peerIp, + NW_IN uint32_t peerPort, + NW_IN uint32_t seqNum); NwRcT nwGtpv2cTrxnDelete( NW_INOUT NwGtpv2cTrxnT **ppTrxn); diff --git a/openair-cn/GTPV2-C/nwgtpv2c-0.11/include/NwGtpv2cTunnel.h b/openair-cn/GTPV2-C/nwgtpv2c-0.11/include/NwGtpv2cTunnel.h index 0f0d3c00c4..33c437ada7 100644 --- a/openair-cn/GTPV2-C/nwgtpv2c-0.11/include/NwGtpv2cTunnel.h +++ b/openair-cn/GTPV2-C/nwgtpv2c-0.11/include/NwGtpv2cTunnel.h @@ -51,15 +51,15 @@ extern "C" { struct NwGtpv2cStack; typedef struct NwGtpv2cTunnel { - NwU32T teid; - NwU32T ipv4AddrRemote; + uint32_t teid; + uint32_t ipv4AddrRemote; NwGtpv2cUlpTunnelHandleT hUlpTunnel; RB_ENTRY (NwGtpv2cTunnel) tunnelMapRbtNode; /**< RB Tree Data Structure Node */ struct NwGtpv2cTunnel* next; } NwGtpv2cTunnelT; NwGtpv2cTunnelT* -nwGtpv2cTunnelNew(struct NwGtpv2cStack *hStack, NwU32T teid, NwU32T peerIpv4Addr, NwGtpv2cUlpTunnelHandleT hUlpTunnel); +nwGtpv2cTunnelNew(struct NwGtpv2cStack *hStack, uint32_t teid, uint32_t peerIpv4Addr, NwGtpv2cUlpTunnelHandleT hUlpTunnel); NwRcT nwGtpv2cTunnelDelete(struct NwGtpv2cStack *pStack, NwGtpv2cTunnelT* thiz); diff --git a/openair-cn/GTPV2-C/nwgtpv2c-0.11/shared/NwGtpv2c.h b/openair-cn/GTPV2-C/nwgtpv2c-0.11/shared/NwGtpv2c.h index 7b4039fb12..e3178fb11b 100644 --- a/openair-cn/GTPV2-C/nwgtpv2c-0.11/shared/NwGtpv2c.h +++ b/openair-cn/GTPV2-C/nwgtpv2c-0.11/shared/NwGtpv2c.h @@ -120,10 +120,10 @@ typedef NwPtrT NwGtpv2cTunnelHandleT; /**< Gtpv2c Ulp typedef NwPtrT NwGtpv2cUlpTrxnHandleT; /**< Gtpv2c Ulp Transaction Handle */ typedef NwPtrT NwGtpv2cUlpTunnelHandleT; /**< Gtpv2c Ulp Tunnel Handle */ -typedef NwU8T NwGtpv2cMsgTypeT; /**< Gtpv2c Msg Type */ +typedef uint8_t NwGtpv2cMsgTypeT; /**< Gtpv2c Msg Type */ typedef struct NwGtpv2cStackConfigS { - NwU16T __tbd; + uint16_t __tbd; } NwGtpv2cStackConfigT; /*--------------------------------------------------------------------------* @@ -172,11 +172,11 @@ typedef enum { */ typedef struct NwGtpv2cErrorS { - NW_IN NwU8T cause; - NW_IN NwU8T flags; + NW_IN uint8_t cause; + NW_IN uint8_t flags; struct { - NW_IN NwU8T type; - NW_IN NwU8T instance; + NW_IN uint8_t type; + NW_IN uint8_t instance; } offendingIe; } NwGtpv2cErrorT; @@ -187,12 +187,12 @@ typedef struct NwGtpv2cErrorS { typedef struct { NW_INOUT NwGtpv2cTunnelHandleT hTunnel; /**< Tunnel handle over which the mesasge is to be sent.*/ - NW_IN NwU16T t3Timer; - NW_IN NwU16T maxRetries; + NW_IN uint16_t t3Timer; + NW_IN uint16_t maxRetries; NW_IN NwGtpv2cUlpTrxnHandleT hUlpTrxn; /**< Optional handle to be returned in rsp of this msg. */ - NW_IN NwU32T peerIp; /**< Required only in case when hTunnel == 0 */ - NW_IN NwU32T teidLocal; /**< Required only in case when hTunnel == 0 */ + NW_IN uint32_t peerIp; /**< Required only in case when hTunnel == 0 */ + NW_IN uint32_t teidLocal; /**< Required only in case when hTunnel == 0 */ NW_IN NwGtpv2cUlpTunnelHandleT hUlpTunnel; /**< Required only in case when hTunnel == 0 */ } NwGtpv2cInitialReqInfoT; @@ -204,11 +204,11 @@ typedef struct { typedef struct { NW_IN NwGtpv2cTunnelHandleT hTunnel; /**< Tunnel handle over which the mesasge is to be sent */ NW_IN NwGtpv2cTrxnHandleT hTrxn; /**< Request Trxn handle which to which triggered req is being sent */ - NW_IN NwU16T t3Timer; - NW_IN NwU16T maxRetries; + NW_IN uint16_t t3Timer; + NW_IN uint16_t maxRetries; NW_IN NwGtpv2cUlpTrxnHandleT hUlpTrxn; /**< Optional handle to be returned in rsp of this msg. */ - NW_IN NwU32T peerIp; /**< Required only in case when hTunnel == 0 */ - NW_IN NwU32T teidLocal; /**< Required only in case when hTunnel == 0 */ + NW_IN uint32_t peerIp; /**< Required only in case when hTunnel == 0 */ + NW_IN uint32_t teidLocal; /**< Required only in case when hTunnel == 0 */ NW_IN NwGtpv2cUlpTunnelHandleT hUlpTunnel; /**< Required only in case when hTunnel == 0 */ } NwGtpv2cTriggeredReqInfoT; @@ -220,7 +220,7 @@ typedef struct { typedef struct { NW_IN NwGtpv2cTrxnHandleT hTrxn; /**< Request Trxn handle which to which triggered rsp is being sent */ - NW_IN NwU32T teidLocal; /**< Required only if NW_GTPV2C_ULP_API_FLAG_CREATE_LOCAL_TUNNEL is set to flags. */ + NW_IN uint32_t teidLocal; /**< Required only if NW_GTPV2C_ULP_API_FLAG_CREATE_LOCAL_TUNNEL is set to flags. */ NW_IN NwGtpv2cUlpTunnelHandleT hUlpTunnel; /**< Required only if NW_GTPV2C_ULP_API_FLAG_CREATE_LOCAL_TUNNEL is set to flags. */ NW_OUT NwGtpv2cTunnelHandleT hTunnel; /**< Returned only in case flags is set to @@ -237,8 +237,8 @@ typedef struct { NW_IN NwGtpv2cTrxnHandleT hTrxn; NW_IN NwGtpv2cUlpTrxnHandleT hUlpTrxn; NW_IN NwGtpv2cMsgTypeT msgType; - NW_IN NwU32T peerIp; - NW_IN NwU32T peerPort; + NW_IN uint32_t peerIp; + NW_IN uint32_t peerPort; NW_IN NwGtpv2cUlpTunnelHandleT hUlpTunnel; NW_INOUT NwGtpv2cTunnelHandleT hTunnel; } NwGtpv2cInitialReqIndInfoT; @@ -253,9 +253,9 @@ typedef struct { NW_IN NwGtpv2cTrxnHandleT hTrxn; NW_IN NwGtpv2cUlpTrxnHandleT hUlpTrxn; NW_IN NwGtpv2cMsgTypeT msgType; - NW_IN NwU32T seqNum; - NW_IN NwU32T teidLocal; - NW_IN NwU32T teidRemote; + NW_IN uint32_t seqNum; + NW_IN uint32_t teidLocal; + NW_IN uint32_t teidRemote; NW_IN NwGtpv2cUlpTunnelHandleT hUlpTunnel; } NwGtpv2cTriggeredReqIndInfoT; @@ -289,8 +289,8 @@ typedef struct { typedef struct { NW_OUT NwGtpv2cTunnelHandleT hTunnel; NW_IN NwGtpv2cUlpTunnelHandleT hUlpTunnel; - NW_IN NwU32T teidLocal; - NW_IN NwU32T peerIp; + NW_IN uint32_t teidLocal; + NW_IN uint32_t peerIp; } NwGtpv2cCreateLocalTunnelInfoT; @@ -347,10 +347,10 @@ typedef struct { typedef struct { NwGtpv2cUdpHandleT hUdp; NwRcT (*udpDataReqCallback) ( NW_IN NwGtpv2cUdpHandleT udpHandle, - NW_IN NwU8T* dataBuf, - NW_IN NwU32T dataSize, - NW_IN NwU32T peerIp, - NW_IN NwU32T peerPort); + NW_IN uint8_t* dataBuf, + NW_IN uint32_t dataSize, + NW_IN uint32_t peerIp, + NW_IN uint32_t peerPort); } NwGtpv2cUdpEntityT; /** @@ -360,14 +360,14 @@ typedef struct { typedef struct { NwGtpv2cMemMgrHandleT hMemMgr; void* (*memAlloc)( NW_IN NwGtpv2cMemMgrHandleT hMemMgr, - NW_IN NwU32T memSize, + NW_IN uint32_t memSize, NW_IN NwCharT* fileName, - NW_IN NwU32T lineNumber); + NW_IN uint32_t lineNumber); void (*memFree) ( NW_IN NwGtpv2cMemMgrHandleT hMemMgr, NW_IN void* hMem, NW_IN NwCharT* fileName, - NW_IN NwU32T lineNumber); + NW_IN uint32_t lineNumber); } NwGtpv2cMemMgrEntityT; @@ -380,9 +380,9 @@ typedef struct { typedef struct { NwGtpv2cTimerMgrHandleT tmrMgrHandle; NwRcT (*tmrStartCallback)( NW_IN NwGtpv2cTimerMgrHandleT tmrMgrHandle, - NW_IN NwU32T timeoutSec, - NW_IN NwU32T timeoutUsec, - NW_IN NwU32T tmrType, + NW_IN uint32_t timeoutSec, + NW_IN uint32_t timeoutUsec, + NW_IN uint32_t tmrType, NW_IN void* tmrArg, NW_OUT NwGtpv2cTimerHandleT* tmrHandle); @@ -397,9 +397,9 @@ typedef struct { typedef struct { NwGtpv2cLogMgrHandleT logMgrHandle; NwRcT (*logReqCallback) (NW_IN NwGtpv2cLogMgrHandleT logMgrHandle, - NW_IN NwU32T logLevel, + NW_IN uint32_t logLevel, NW_IN NwCharT* filename, - NW_IN NwU32T line, + NW_IN uint32_t line, NW_IN NwCharT* logStr); } NwGtpv2cLogMgrEntityT; @@ -519,7 +519,7 @@ nwGtpv2cSetLogMgrEntity( NW_IN NwGtpv2cStackHandleT hGtpcStackHandle, NwRcT nwGtpv2cSetLogLevel( NW_IN NwGtpv2cStackHandleT hGtpcStackHandle, - NW_IN NwU32T logLevel); + NW_IN uint32_t logLevel); /** @@ -535,10 +535,10 @@ nwGtpv2cSetLogLevel( NW_IN NwGtpv2cStackHandleT hGtpcStackHandle, NwRcT nwGtpv2cProcessUdpReq( NW_IN NwGtpv2cStackHandleT hGtpcStackHandle, - NW_IN NwU8T* udpData, - NW_IN NwU32T udpDataLen, - NW_IN NwU16T peerPort, - NW_IN NwU32T peerIP); + NW_IN uint8_t* udpData, + NW_IN uint32_t udpDataLen, + NW_IN uint16_t peerPort, + NW_IN uint32_t peerIP); /** Process Request from ULP entity. diff --git a/openair-cn/GTPV2-C/nwgtpv2c-0.11/shared/NwGtpv2cMsg.h b/openair-cn/GTPV2-C/nwgtpv2c-0.11/shared/NwGtpv2cMsg.h index 30e12debfa..7c7476383b 100644 --- a/openair-cn/GTPV2-C/nwgtpv2c-0.11/shared/NwGtpv2cMsg.h +++ b/openair-cn/GTPV2-C/nwgtpv2c-0.11/shared/NwGtpv2cMsg.h @@ -186,37 +186,37 @@ extern "C" { #pragma pack(1) typedef struct NwGtpv2cIeTv1 { - NwU8T t; - NwU16T l; - NwU8T i; - NwU8T v; + uint8_t t; + uint16_t l; + uint8_t i; + uint8_t v; } NwGtpv2cIeTv1T; typedef struct NwGtpv2cIeTv2 { - NwU8T t; - NwU16T l; - NwU8T i; - NwU16T v; + uint8_t t; + uint16_t l; + uint8_t i; + uint16_t v; } NwGtpv2cIeTv2T; typedef struct NwGtpv2cIeTv4 { - NwU8T t; - NwU16T l; - NwU8T i; - NwU32T v; + uint8_t t; + uint16_t l; + uint8_t i; + uint32_t v; } NwGtpv2cIeTv4T; typedef struct NwGtpv2cIeTv8 { - NwU8T t; - NwU16T l; - NwU8T i; - NwU64T v; + uint8_t t; + uint16_t l; + uint8_t i; + uint64_t v; } NwGtpv2cIeTv8T; typedef struct NwGtpv2cIeTlv { - NwU8T t; - NwU16T l; - NwU8T i; + uint8_t t; + uint16_t l; + uint8_t i; } NwGtpv2cIeTlvT; #pragma pack() @@ -235,10 +235,10 @@ typedef struct NwGtpv2cIeTlv { NwRcT nwGtpv2cMsgNew( NW_IN NwGtpv2cStackHandleT hGtpcStackHandle, - NW_IN NwU8T teidPresent, - NW_IN NwU8T msgType, - NW_IN NwU32T teid, - NW_IN NwU32T seqNum, + NW_IN uint8_t teidPresent, + NW_IN uint8_t msgType, + NW_IN uint32_t teid, + NW_IN uint32_t seqNum, NW_OUT NwGtpv2cMsgHandleT *phMsg); @@ -253,8 +253,8 @@ nwGtpv2cMsgNew( NW_IN NwGtpv2cStackHandleT hGtpcStackHandle, NwRcT nwGtpv2cMsgFromBufferNew( NW_IN NwGtpv2cStackHandleT hGtpcStackHandle, - NW_IN NwU8T* pBuf, - NW_IN NwU32T bufLen, + NW_IN uint8_t* pBuf, + NW_IN uint32_t bufLen, NW_OUT NwGtpv2cMsgHandleT *phMsg); /** @@ -276,7 +276,7 @@ nwGtpv2cMsgDelete( NW_IN NwGtpv2cStackHandleT hGtpcStackHandle, */ NwRcT -nwGtpv2cMsgSetTeid(NW_IN NwGtpv2cMsgHandleT hMsg, NwU32T teid); +nwGtpv2cMsgSetTeid(NW_IN NwGtpv2cMsgHandleT hMsg, uint32_t teid); /** * Set TEID present flag for gtpv2c message. @@ -296,7 +296,7 @@ nwGtpv2cMsgSetTeidPresent(NW_IN NwGtpv2cMsgHandleT hMsg, NwBoolT teidPresent); */ NwRcT -nwGtpv2cMsgSetSeqNumber(NW_IN NwGtpv2cMsgHandleT hMsg, NwU32T seqNum); +nwGtpv2cMsgSetSeqNumber(NW_IN NwGtpv2cMsgHandleT hMsg, uint32_t seqNum); /** * Get TEID present for gtpv2c message. @@ -304,7 +304,7 @@ nwGtpv2cMsgSetSeqNumber(NW_IN NwGtpv2cMsgHandleT hMsg, NwU32T seqNum); * @param[in] hMsg : Message handle. */ -NwU32T +uint32_t nwGtpv2cMsgGetTeid(NW_IN NwGtpv2cMsgHandleT hMsg); /** @@ -322,7 +322,7 @@ nwGtpv2cMsgGetTeidPresent(NW_IN NwGtpv2cMsgHandleT hMsg); * @param[in] hMsg : Message handle. */ -NwU32T +uint32_t nwGtpv2cMsgGetSeqNumber(NW_IN NwGtpv2cMsgHandleT hMsg); /** @@ -331,7 +331,7 @@ nwGtpv2cMsgGetSeqNumber(NW_IN NwGtpv2cMsgHandleT hMsg); * @param[in] hMsg : Message handle. */ -NwU32T +uint32_t nwGtpv2cMsgGetLength(NW_IN NwGtpv2cMsgHandleT hMsg); /** @@ -345,9 +345,9 @@ nwGtpv2cMsgGetLength(NW_IN NwGtpv2cMsgHandleT hMsg); NwRcT nwGtpv2cMsgAddIeTV1(NW_IN NwGtpv2cMsgHandleT hMsg, - NW_IN NwU8T type, - NW_IN NwU8T instance, - NW_IN NwU8T value); + NW_IN uint8_t type, + NW_IN uint8_t instance, + NW_IN uint8_t value); /** @@ -361,9 +361,9 @@ nwGtpv2cMsgAddIeTV1(NW_IN NwGtpv2cMsgHandleT hMsg, NwRcT nwGtpv2cMsgAddIeTV2(NW_IN NwGtpv2cMsgHandleT hMsg, - NW_IN NwU8T type, - NW_IN NwU8T instance, - NW_IN NwU16T value); + NW_IN uint8_t type, + NW_IN uint8_t instance, + NW_IN uint16_t value); /** @@ -377,9 +377,9 @@ nwGtpv2cMsgAddIeTV2(NW_IN NwGtpv2cMsgHandleT hMsg, NwRcT nwGtpv2cMsgAddIeTV4(NW_IN NwGtpv2cMsgHandleT hMsg, - NW_IN NwU8T type, - NW_IN NwU8T instance, - NW_IN NwU32T value); + NW_IN uint8_t type, + NW_IN uint8_t instance, + NW_IN uint32_t value); /** @@ -394,10 +394,10 @@ nwGtpv2cMsgAddIeTV4(NW_IN NwGtpv2cMsgHandleT hMsg, NwRcT nwGtpv2cMsgAddIe(NW_IN NwGtpv2cMsgHandleT hMsg, - NW_IN NwU8T type, - NW_IN NwU16T length, - NW_IN NwU8T instance, - NW_IN NwU8T* pVal); + NW_IN uint8_t type, + NW_IN uint16_t length, + NW_IN uint8_t instance, + NW_IN uint8_t* pVal); /** * Add CAUSE information element to gtpv2c message. @@ -412,11 +412,11 @@ nwGtpv2cMsgAddIe(NW_IN NwGtpv2cMsgHandleT hMsg, NwRcT nwGtpv2cMsgAddIeCause(NW_IN NwGtpv2cMsgHandleT hMsg, - NW_IN NwU8T instance, - NW_IN NwU8T causeValue, - NW_IN NwU8T bitFlags, - NW_IN NwU8T offendingIeType, - NW_IN NwU8T offendingIeInstance); + NW_IN uint8_t instance, + NW_IN uint8_t causeValue, + NW_IN uint8_t bitFlags, + NW_IN uint8_t offendingIeType, + NW_IN uint8_t offendingIeInstance); /** * Add F-TEID information element to gtpv2c message. @@ -431,16 +431,16 @@ nwGtpv2cMsgAddIeCause(NW_IN NwGtpv2cMsgHandleT hMsg, NwRcT nwGtpv2cMsgAddIeFteid(NW_IN NwGtpv2cMsgHandleT hMsg, - NW_IN NwU8T instance, - NW_IN NwU8T ifType, - NW_IN NwU32T teidOrGreKey, - NW_IN NwU32T ipv4Addr, - NW_IN NwU8T* pIpv6Addr); + NW_IN uint8_t instance, + NW_IN uint8_t ifType, + NW_IN uint32_t teidOrGreKey, + NW_IN uint32_t ipv4Addr, + NW_IN uint8_t* pIpv6Addr); NwRcT nwGtpv2cMsgGroupedIeStart(NW_IN NwGtpv2cMsgHandleT hMsg, - NW_IN NwU8T type, - NW_IN NwU8T instance); + NW_IN uint8_t type, + NW_IN uint8_t instance); NwRcT nwGtpv2cMsgGroupedIeEnd(NW_IN NwGtpv2cMsgHandleT hMsg); @@ -458,11 +458,11 @@ nwGtpv2cMsgGroupedIeEnd(NW_IN NwGtpv2cMsgHandleT hMsg); NwBoolT nwGtpv2cMsgIsIePresent(NW_IN NwGtpv2cMsgHandleT hMsg, - NW_IN NwU8T type, - NW_IN NwU8T instance); + NW_IN uint8_t type, + NW_IN uint8_t instance); /** - * Get an information element of type 'NwU8T' from gtpv2c message. + * Get an information element of type 'uint8_t' from gtpv2c message. * * @param[in] hMsg : Handle to gtpv2c message. * @param[in] type : IE Type. @@ -473,12 +473,12 @@ nwGtpv2cMsgIsIePresent(NW_IN NwGtpv2cMsgHandleT hMsg, NwRcT nwGtpv2cMsgGetIeTV1(NW_IN NwGtpv2cMsgHandleT hMsg, - NW_IN NwU8T type, - NW_IN NwU8T instance, - NW_OUT NwU8T* pVal); + NW_IN uint8_t type, + NW_IN uint8_t instance, + NW_OUT uint8_t* pVal); /** - * Get an information element of type 'NwU16T' from gtpv2c message. + * Get an information element of type 'uint16_t' from gtpv2c message. * * @param[in] hMsg : Handle to gtpv2c message. * @param[in] tyep : IE Type. @@ -490,12 +490,12 @@ nwGtpv2cMsgGetIeTV1(NW_IN NwGtpv2cMsgHandleT hMsg, NwRcT nwGtpv2cMsgGetIeTV2(NW_IN NwGtpv2cMsgHandleT hMsg, - NW_IN NwU8T type, - NW_IN NwU8T instance, - NW_OUT NwU16T* pVal); + NW_IN uint8_t type, + NW_IN uint8_t instance, + NW_OUT uint16_t* pVal); /** - * Get an information element of type 'NwU32T' from gtpv2c message. + * Get an information element of type 'uint32_t' from gtpv2c message. * * @param[in] hMsg : Handle to gtpv2c message. * @param[in] tyep : IE Type. @@ -507,12 +507,12 @@ nwGtpv2cMsgGetIeTV2(NW_IN NwGtpv2cMsgHandleT hMsg, NwRcT nwGtpv2cMsgGetIeTV4(NW_IN NwGtpv2cMsgHandleT hMsg, - NW_IN NwU8T type, - NW_IN NwU8T instance, - NW_OUT NwU32T* pVal); + NW_IN uint8_t type, + NW_IN uint8_t instance, + NW_OUT uint32_t* pVal); /** - * Get an information element of type 'NwU64T' from gtpv2c message. + * Get an information element of type 'uint64_t' from gtpv2c message. * * @param[in] hMsg : Handle to gtpv2c message. * @param[in] tyep : IE Type. @@ -524,9 +524,9 @@ nwGtpv2cMsgGetIeTV4(NW_IN NwGtpv2cMsgHandleT hMsg, NwRcT nwGtpv2cMsgGetIeTV8(NW_IN NwGtpv2cMsgHandleT hMsg, - NW_IN NwU8T type, - NW_IN NwU8T instance, - NW_OUT NwU64T* pVal); + NW_IN uint8_t type, + NW_IN uint8_t instance, + NW_OUT uint64_t* pVal); /** * Get an information element of variable length from gtpv2c message. @@ -542,11 +542,11 @@ nwGtpv2cMsgGetIeTV8(NW_IN NwGtpv2cMsgHandleT hMsg, NwRcT nwGtpv2cMsgGetIeTlv(NW_IN NwGtpv2cMsgHandleT hMsg, - NW_IN NwU8T type, - NW_IN NwU8T instance, - NW_IN NwU16T maxLen, - NW_OUT NwU8T* pVal, - NW_OUT NwU16T* pLen); + NW_IN uint8_t type, + NW_IN uint8_t instance, + NW_IN uint16_t maxLen, + NW_OUT uint8_t* pVal, + NW_OUT uint16_t* pLen); /** * Get an information element of variable length from gtpv2c message. @@ -561,10 +561,10 @@ nwGtpv2cMsgGetIeTlv(NW_IN NwGtpv2cMsgHandleT hMsg, NwRcT nwGtpv2cMsgGetIeTlvP(NW_IN NwGtpv2cMsgHandleT hMsg, - NW_IN NwU8T type, - NW_IN NwU8T instance, - NW_OUT NwU8T** ppVal, - NW_OUT NwU16T* pLen); + NW_IN uint8_t type, + NW_IN uint8_t instance, + NW_OUT uint8_t** ppVal, + NW_OUT uint16_t* pLen); /** @@ -580,19 +580,19 @@ nwGtpv2cMsgGetIeTlvP(NW_IN NwGtpv2cMsgHandleT hMsg, NwRcT nwGtpv2cMsgGetIeFteid(NW_IN NwGtpv2cMsgHandleT hMsg, - NW_IN NwU8T instance, - NW_OUT NwU8T* ifType, - NW_OUT NwU32T* teidOrGreKey, - NW_OUT NwU32T* ipv4Addr, - NW_OUT NwU8T* pIpv6Addr); + NW_IN uint8_t instance, + NW_OUT uint8_t* ifType, + NW_OUT uint32_t* teidOrGreKey, + NW_OUT uint32_t* ipv4Addr, + NW_OUT uint8_t* pIpv6Addr); NwRcT nwGtpv2cMsgGetIeCause(NW_IN NwGtpv2cMsgHandleT hMsg, - NW_IN NwU8T instance, - NW_OUT NwU8T* causeValue, - NW_OUT NwU8T* flags, - NW_OUT NwU8T* offendingIeType, - NW_OUT NwU8T* offendingIeInstance); + NW_IN uint8_t instance, + NW_OUT uint8_t* causeValue, + NW_OUT uint8_t* flags, + NW_OUT uint8_t* offendingIeType, + NW_OUT uint8_t* offendingIeInstance); /** * Get msg type for gtpv2c message. @@ -600,7 +600,7 @@ nwGtpv2cMsgGetIeCause(NW_IN NwGtpv2cMsgHandleT hMsg, * @param[in] hMsg : Message handle. */ -NwU32T +uint32_t nwGtpv2cMsgGetMsgType(NW_IN NwGtpv2cMsgHandleT hMsg); /** diff --git a/openair-cn/GTPV2-C/nwgtpv2c-0.11/shared/NwGtpv2cMsgParser.h b/openair-cn/GTPV2-C/nwgtpv2c-0.11/shared/NwGtpv2cMsgParser.h index 968fbacaab..a16bf4800a 100644 --- a/openair-cn/GTPV2-C/nwgtpv2c-0.11/shared/NwGtpv2cMsgParser.h +++ b/openair-cn/GTPV2-C/nwgtpv2c-0.11/shared/NwGtpv2cMsgParser.h @@ -45,19 +45,19 @@ */ typedef struct { - NwU16T msgType; - NwU16T mandatoryIeCount; + uint16_t msgType; + uint16_t mandatoryIeCount; NwGtpv2cStackHandleT hStack; - NwRcT (*ieReadCallback) (NwU8T ieType, NwU8T ieLength, NwU8T ieInstance, NwU8T* ieValue, void* ieReadCallbackArg); + NwRcT (*ieReadCallback) (uint8_t ieType, uint8_t ieLength, uint8_t ieInstance, uint8_t* ieValue, void* ieReadCallbackArg); void* ieReadCallbackArg; struct { - NwU8T iePresence; - NwRcT (*ieReadCallback) (NwU8T ieType, NwU8T ieLength, NwU8T ieInstance, NwU8T* ieValue, void* ieReadCallbackArg); + uint8_t iePresence; + NwRcT (*ieReadCallback) (uint8_t ieType, uint8_t ieLength, uint8_t ieInstance, uint8_t* ieValue, void* ieReadCallbackArg); void* ieReadCallbackArg; } ieParseInfo[NW_GTPV2C_IE_TYPE_MAXIMUM][NW_GTPV2C_IE_INSTANCE_MAXIMUM]; - NwU8T *pIe[NW_GTPV2C_IE_TYPE_MAXIMUM][NW_GTPV2C_IE_INSTANCE_MAXIMUM]; + uint8_t *pIe[NW_GTPV2C_IE_TYPE_MAXIMUM][NW_GTPV2C_IE_INSTANCE_MAXIMUM]; } NwGtpv2cMsgParserT; #ifdef __cplusplus @@ -74,11 +74,11 @@ extern "C" { NwRcT nwGtpv2cMsgParserNew( NW_IN NwGtpv2cStackHandleT hGtpcStackHandle, - NW_IN NwU8T msgType, - NW_IN NwRcT (*ieReadCallback) (NwU8T ieType, - NwU8T ieLength, - NwU8T ieInstance, - NwU8T* ieValue, + NW_IN uint8_t msgType, + NW_IN NwRcT (*ieReadCallback) (uint8_t ieType, + uint8_t ieLength, + uint8_t ieInstance, + uint8_t* ieValue, void* ieReadCallbackArg), NW_IN void* ieReadCallbackArg, NW_IN NwGtpv2cMsgParserT **pthiz); @@ -97,23 +97,23 @@ nwGtpv2cMsgParserDelete( NW_IN NwGtpv2cStackHandleT hGtpcStackHandle, NwRcT nwGtpv2cMsgParserUpdateIe( NW_IN NwGtpv2cMsgParserT* thiz, - NW_IN NwU8T ieType, - NW_IN NwU8T ieInstance, - NW_IN NwU8T iePresence, - NW_IN NwRcT (*ieReadCallback) (NwU8T ieType, - NwU8T ieLength, - NwU8T ieInstance, - NwU8T* ieValue, + NW_IN uint8_t ieType, + NW_IN uint8_t ieInstance, + NW_IN uint8_t iePresence, + NW_IN NwRcT (*ieReadCallback) (uint8_t ieType, + uint8_t ieLength, + uint8_t ieInstance, + uint8_t* ieValue, void* ieReadCallbackArg), NW_IN void* ieReadCallbackArg); NwRcT nwGtpv2cMsgParserUpdateIeReadCallback( NW_IN NwGtpv2cMsgParserT* thiz, - NW_IN NwRcT (*ieReadCallback) (NwU8T ieType, - NwU8T ieLength, - NwU8T ieInstance, - NwU8T* ieValue, + NW_IN NwRcT (*ieReadCallback) (uint8_t ieType, + uint8_t ieLength, + uint8_t ieInstance, + uint8_t* ieValue, void* ieReadCallbackArg)); @@ -123,22 +123,22 @@ nwGtpv2cMsgParserUpdateIeReadCallbackArg( NW_IN NwGtpv2cMsgParserT* thiz, NwRcT nwGtpv2cMsgParserAddIe( NW_IN NwGtpv2cMsgParserT* thiz, - NW_IN NwU8T ieType, - NW_IN NwU8T ieInstance, - NW_IN NwU8T iePresence, - NW_IN NwRcT (*ieReadCallback) (NwU8T ieType, - NwU8T ieLength, - NwU8T ieInstance, - NwU8T* ieValue, + NW_IN uint8_t ieType, + NW_IN uint8_t ieInstance, + NW_IN uint8_t iePresence, + NW_IN NwRcT (*ieReadCallback) (uint8_t ieType, + uint8_t ieLength, + uint8_t ieInstance, + uint8_t* ieValue, void* ieReadCallbackArg), NW_IN void* ieReadCallbackArg); NwRcT nwGtpv2cMsgParserRun( NW_IN NwGtpv2cMsgParserT *thiz, NW_IN NwGtpv2cMsgHandleT hMsg, - NW_OUT NwU8T *pOffendingIeType, - NW_OUT NwU8T *pOffendingIeInstance, - NW_OUT NwU16T *pOffendingIeLength); + NW_OUT uint8_t *pOffendingIeType, + NW_OUT uint8_t *pOffendingIeInstance, + NW_OUT uint16_t *pOffendingIeLength); #ifdef __cplusplus } diff --git a/openair-cn/GTPV2-C/nwgtpv2c-0.11/shared/NwLog.h b/openair-cn/GTPV2-C/nwgtpv2c-0.11/shared/NwLog.h index 9456540d0c..a941a31905 100644 --- a/openair-cn/GTPV2-C/nwgtpv2c-0.11/shared/NwLog.h +++ b/openair-cn/GTPV2-C/nwgtpv2c-0.11/shared/NwLog.h @@ -66,15 +66,15 @@ extern "C" { *--------------------------------------------------------------------------*/ #define NW_IPV4_ADDR "%u.%u.%u.%u" -#define NW_IPV4_ADDR_FORMAT(__addr) (NwU8T)((__addr) & 0x000000ff), \ - (NwU8T)(((__addr) & 0x0000ff00) >> 8 ), \ - (NwU8T)(((__addr) & 0x00ff0000) >> 16), \ - (NwU8T)(((__addr) & 0xff000000) >> 24) +#define NW_IPV4_ADDR_FORMAT(__addr) (uint8_t)((__addr) & 0x000000ff), \ + (uint8_t)(((__addr) & 0x0000ff00) >> 8 ), \ + (uint8_t)(((__addr) & 0x00ff0000) >> 16), \ + (uint8_t)(((__addr) & 0xff000000) >> 24) -#define NW_IPV4_ADDR_FORMATP(__paddr) (NwU8T)(*((NwU8T*)(__paddr)) & 0x000000ff), \ - (NwU8T)(*((NwU8T*)(__paddr + 1)) & 0x000000ff), \ - (NwU8T)(*((NwU8T*)(__paddr + 2)) & 0x000000ff), \ - (NwU8T)(*((NwU8T*)(__paddr + 3)) & 0x000000ff) +#define NW_IPV4_ADDR_FORMATP(__paddr) (uint8_t)(*((uint8_t*)(__paddr)) & 0x000000ff), \ + (uint8_t)(*((uint8_t*)(__paddr + 1)) & 0x000000ff), \ + (uint8_t)(*((uint8_t*)(__paddr + 2)) & 0x000000ff), \ + (uint8_t)(*((uint8_t*)(__paddr + 3)) & 0x000000ff) #ifdef __cplusplus } diff --git a/openair-cn/GTPV2-C/nwgtpv2c-0.11/shared/NwTypes.h b/openair-cn/GTPV2-C/nwgtpv2c-0.11/shared/NwTypes.h index 949d528e74..78be53a5d0 100644 --- a/openair-cn/GTPV2-C/nwgtpv2c-0.11/shared/NwTypes.h +++ b/openair-cn/GTPV2-C/nwgtpv2c-0.11/shared/NwTypes.h @@ -54,10 +54,10 @@ extern "C" { #define NW_TRUE (1) /**< Truth value */ #define NW_FALSE (0) /**< False value */ -typedef unsigned char NwU8T; /**< Unsigned 1 byte */ -typedef unsigned short NwU16T; /**< Unsigned 2 byte */ -typedef unsigned int NwU32T; /**< Unsigned 4 byte */ -typedef unsigned long long NwU64T; /**< Unsigned 8 byte */ +typedef unsigned char uint8_t; /**< Unsigned 1 byte */ +typedef unsigned short uint16_t; /**< Unsigned 2 byte */ +typedef unsigned int uint32_t; /**< Unsigned 4 byte */ +typedef unsigned long long uint64_t; /**< Unsigned 8 byte */ typedef signed char NwS8T; /**< Signed 1 byte */ typedef signed short NwS16T; /**< Signed 2 byte */ diff --git a/openair-cn/GTPV2-C/nwgtpv2c-0.11/shared/NwUtils.h b/openair-cn/GTPV2-C/nwgtpv2c-0.11/shared/NwUtils.h index 7d57f63139..a51437bce8 100644 --- a/openair-cn/GTPV2-C/nwgtpv2c-0.11/shared/NwUtils.h +++ b/openair-cn/GTPV2-C/nwgtpv2c-0.11/shared/NwUtils.h @@ -52,10 +52,10 @@ ( ( (x) & 0x0000ff00 ) << 8 ) | ( ( (x) & 0x000000ff) << 24 ) ) #define NW_HTONLL(x) ( \ - ( ( ((NwU64T)x) & 0xff00000000000000ULL ) >> 56 ) | ( ( ((NwU64T)x) & 0x00ff000000000000ULL ) >> 40 ) | \ - ( ( ((NwU64T)x) & 0x0000ff0000000000ULL ) >> 24 ) | ( ( ((NwU64T)x) & 0x000000ff00000000ULL ) >> 8 ) | \ - ( ( ((NwU64T)x) & 0x000000000000ff00ULL ) << 40 ) | ( ( ((NwU64T)x) & 0x00000000000000ffULL ) << 56 ) | \ - ( ( ((NwU64T)x) & 0x0000000000ff0000ULL ) << 24 ) | ( ( ((NwU64T)x) & 0x00000000ff000000ULL ) << 8 ) \ + ( ( ((uint64_t)x) & 0xff00000000000000ULL ) >> 56 ) | ( ( ((uint64_t)x) & 0x00ff000000000000ULL ) >> 40 ) | \ + ( ( ((uint64_t)x) & 0x0000ff0000000000ULL ) >> 24 ) | ( ( ((uint64_t)x) & 0x000000ff00000000ULL ) >> 8 ) | \ + ( ( ((uint64_t)x) & 0x000000000000ff00ULL ) << 40 ) | ( ( ((uint64_t)x) & 0x00000000000000ffULL ) << 56 ) | \ + ( ( ((uint64_t)x) & 0x0000000000ff0000ULL ) << 24 ) | ( ( ((uint64_t)x) & 0x00000000ff000000ULL ) << 8 ) \ ) diff --git a/openair-cn/GTPV2-C/nwgtpv2c-0.11/src/NwGtpv2c.c b/openair-cn/GTPV2-C/nwgtpv2c-0.11/src/NwGtpv2c.c index cd50e81738..123fe0932a 100644 --- a/openair-cn/GTPV2-C/nwgtpv2c-0.11/src/NwGtpv2c.c +++ b/openair-cn/GTPV2-C/nwgtpv2c-0.11/src/NwGtpv2c.c @@ -393,13 +393,13 @@ RB_GENERATE(NwGtpv2cActiveTimerList, NwGtpv2cTimeoutInfo, activeTimerListRbtNode */ static NwRcT nwGtpv2cCreateAndSendMsg(NW_IN NwGtpv2cStackT* thiz, - NW_IN NwU32T seqNum, - NW_IN NwU32T peerIp, - NW_IN NwU32T peerPort, + NW_IN uint32_t seqNum, + NW_IN uint32_t peerIp, + NW_IN uint32_t peerPort, NW_IN NwGtpv2cMsgT *pMsg) { NwRcT rc; - NwU8T* msgHdr; + uint8_t* msgHdr; NW_ASSERT(thiz); NW_ASSERT(pMsg); @@ -413,17 +413,17 @@ nwGtpv2cCreateAndSendMsg(NW_IN NwGtpv2cStackT* thiz, *(msgHdr++) = (pMsg->msgType); /* Set msg length in header*/ - *((NwU16T*) msgHdr) = htons(pMsg->msgLen - 4 ); + *((uint16_t*) msgHdr) = htons(pMsg->msgLen - 4 ); msgHdr += 2; /* Set TEID, if present in header */ if(pMsg->teidPresent) { - *((NwU32T*) msgHdr) = htonl(pMsg->teid); + *((uint32_t*) msgHdr) = htonl(pMsg->teid); msgHdr += 4; } /* Set seq num in header */ - *((NwU32T*) msgHdr) = htonl(seqNum << 8); + *((uint32_t*) msgHdr) = htonl(seqNum << 8); /* Call UDP data request callback */ NW_ASSERT(thiz->udp.udpDataReqCallback != NULL); @@ -446,9 +446,9 @@ nwGtpv2cCreateAndSendMsg(NW_IN NwGtpv2cStackT* thiz, static NwRcT nwGtpv2cSendVersionNotSupportedInd( NW_IN NwGtpv2cStackT* thiz, - NW_IN NwU32T peerIp, - NW_IN NwU32T peerPort, - NW_IN NwU32T seqNum) + NW_IN uint32_t peerIp, + NW_IN uint32_t peerPort, + NW_IN uint32_t seqNum) { NwRcT rc; NwGtpv2cMsgHandleT hMsg = 0; @@ -485,8 +485,8 @@ nwGtpv2cSendVersionNotSupportedInd( NW_IN NwGtpv2cStackT* thiz, static NwRcT nwGtpv2cCreateLocalTunnel( NW_IN NwGtpv2cStackT* thiz, - NW_IN NwU32T teid, - NW_IN NwU32T ipv4Remote, + NW_IN uint32_t teid, + NW_IN uint32_t ipv4Remote, NW_IN NwGtpv2cUlpTunnelHandleT hUlpTunnel, NW_OUT NwGtpv2cTunnelHandleT *phTunnel) { @@ -798,10 +798,10 @@ static NwRcT nwGtpv2cSendInitialReqIndToUlp( NW_IN NwGtpv2cStackT *thiz, NW_IN NwGtpv2cErrorT *pError, NW_IN NwGtpv2cTrxnT *pTrxn, - NW_IN NwU32T hUlpTunnel, - NW_IN NwU32T msgType, - NW_IN NwU32T peerIp, - NW_IN NwU16T peerPort, + NW_IN uint32_t hUlpTunnel, + NW_IN uint32_t msgType, + NW_IN uint32_t peerIp, + NW_IN uint16_t peerPort, NW_IN NwGtpv2cMsgHandleT hMsg) { NwRcT rc; @@ -836,9 +836,9 @@ nwGtpv2cSendInitialReqIndToUlp( NW_IN NwGtpv2cStackT *thiz, static NwRcT nwGtpv2cSendTriggeredRspIndToUlp( NW_IN NwGtpv2cStackT* thiz, NW_IN NwGtpv2cErrorT *pError, - NW_IN NwU32T hUlpTrxn, - NW_IN NwU32T hUlpTunnel, - NW_IN NwU32T msgType, + NW_IN uint32_t hUlpTrxn, + NW_IN uint32_t hUlpTunnel, + NW_IN uint32_t msgType, NW_IN NwGtpv2cMsgHandleT hMsg) { NwRcT rc; @@ -870,17 +870,17 @@ nwGtpv2cSendTriggeredRspIndToUlp( NW_IN NwGtpv2cStackT* thiz, static NwRcT nwGtpv2cHandleEchoReq(NW_IN NwGtpv2cStackT *thiz, - NW_IN NwU32T msgType, - NW_IN NwU8T* msgBuf, - NW_IN NwU32T msgBufLen, - NW_IN NwU16T peerPort, - NW_IN NwU32T peerIp) + NW_IN uint32_t msgType, + NW_IN uint8_t* msgBuf, + NW_IN uint32_t msgBufLen, + NW_IN uint16_t peerPort, + NW_IN uint32_t peerIp) { NwRcT rc; - NwU32T seqNum = 0; + uint32_t seqNum = 0; NwGtpv2cMsgHandleT hMsg = 0; - seqNum = ntohl(*((NwU32T*)(msgBuf + (((*msgBuf) & 0x08) ? 8 : 4)))) >> 8; + seqNum = ntohl(*((uint32_t*)(msgBuf + (((*msgBuf) & 0x08) ? 8 : 4)))) >> 8; /* Send Echo Response */ @@ -918,22 +918,22 @@ nwGtpv2cHandleEchoReq(NW_IN NwGtpv2cStackT *thiz, static NwRcT nwGtpv2cHandleInitialReq(NW_IN NwGtpv2cStackT *thiz, - NW_IN NwU32T msgType, - NW_IN NwU8T* msgBuf, - NW_IN NwU32T msgBufLen, - NW_IN NwU16T peerPort, - NW_IN NwU32T peerIp) + NW_IN uint32_t msgType, + NW_IN uint8_t* msgBuf, + NW_IN uint32_t msgBufLen, + NW_IN uint16_t peerPort, + NW_IN uint32_t peerIp) { NwRcT rc; - NwU32T seqNum = 0; - NwU32T teidLocal = 0; + uint32_t seqNum = 0; + uint32_t teidLocal = 0; NwGtpv2cTrxnT *pTrxn; NwGtpv2cTunnelT *pLocalTunnel, keyTunnel; NwGtpv2cMsgHandleT hMsg = 0; NwGtpv2cUlpTunnelHandleT hUlpTunnel; NwGtpv2cErrorT error; - teidLocal = *((NwU32T*)(msgBuf + 4)); + teidLocal = *((uint32_t*)(msgBuf + 4)); if(teidLocal) { keyTunnel.teid = ntohl(teidLocal); @@ -950,7 +950,7 @@ nwGtpv2cHandleInitialReq(NW_IN NwGtpv2cStackT *thiz, hUlpTunnel = 0; } - seqNum = ntohl(*((NwU32T*)(msgBuf + (((*msgBuf) & 0x08) ? 8 : 4)))) >> 8; + seqNum = ntohl(*((uint32_t*)(msgBuf + (((*msgBuf) & 0x08) ? 8 : 4)))) >> 8; pTrxn = nwGtpv2cTrxnOutstandingRxNew(thiz, ntohl(teidLocal), peerIp, peerPort, (seqNum)); if(pTrxn) { @@ -987,25 +987,25 @@ nwGtpv2cHandleInitialReq(NW_IN NwGtpv2cStackT *thiz, static NwRcT nwGtpv2cHandleTriggeredRsp(NW_IN NwGtpv2cStackT *thiz, - NW_IN NwU32T msgType, - NW_IN NwU8T* msgBuf, - NW_IN NwU32T msgBufLen, - NW_IN NwU16T peerPort, - NW_IN NwU32T peerIp) + NW_IN uint32_t msgType, + NW_IN uint8_t* msgBuf, + NW_IN uint32_t msgBufLen, + NW_IN uint16_t peerPort, + NW_IN uint32_t peerIp) { NwRcT rc; NwGtpv2cTrxnT *pTrxn, keyTrxn; NwGtpv2cMsgHandleT hMsg = 0; NwGtpv2cErrorT error; - keyTrxn.seqNum = ntohl(*((NwU32T*)(msgBuf + (((*msgBuf) & 0x08) ? 8 : 4)))) >> 8;; + keyTrxn.seqNum = ntohl(*((uint32_t*)(msgBuf + (((*msgBuf) & 0x08) ? 8 : 4)))) >> 8;; keyTrxn.peerIp = peerIp; pTrxn = RB_FIND(NwGtpv2cOutstandingTxSeqNumTrxnMap, &(thiz->outstandingTxSeqNumMap), &keyTrxn); if(pTrxn) { - NwU32T hUlpTrxn; - NwU32T hUlpTunnel; + uint32_t hUlpTrxn; + uint32_t hUlpTunnel; hUlpTrxn = pTrxn->hUlpTrxn; hUlpTunnel = (pTrxn->hTunnel ? ((NwGtpv2cTunnelT*)(pTrxn->hTunnel))->hUlpTunnel : 0); @@ -1021,7 +1021,7 @@ nwGtpv2cHandleTriggeredRsp(NW_IN NwGtpv2cStackT *thiz, rc = nwGtpv2cMsgIeParse(thiz->pGtpv2cMsgIeParseInfo[msgType], hMsg, &error); if(rc != NW_OK) { - NW_LOG(thiz, NW_LOG_LEVEL_WARN, "Malformed message received on TEID %u from peer 0x%x. Notifying ULP.", ntohl((*((NwU32T*)(msgBuf + 4)))), htonl(peerIp)); + NW_LOG(thiz, NW_LOG_LEVEL_WARN, "Malformed message received on TEID %u from peer 0x%x. Notifying ULP.", ntohl((*((uint32_t*)(msgBuf + 4)))), htonl(peerIp)); } rc = nwGtpv2cSendTriggeredRspIndToUlp( thiz, @@ -1057,8 +1057,8 @@ nwGtpv2cInitialize( NW_INOUT NwGtpv2cStackHandleT* hGtpcStackHandle) memset(thiz, 0, sizeof(NwGtpv2cStackT)); if(thiz) { - thiz->id = (NwU32T) thiz; - thiz->seqNum = ((NwU32T) thiz) & 0x0000FFFF; + thiz->id = (uint32_t) thiz; + thiz->seqNum = ((uint32_t) thiz) & 0x0000FFFF; RB_INIT(&(thiz->tunnelMap)); RB_INIT(&(thiz->outstandingTxSeqNumMap)); @@ -1205,7 +1205,7 @@ nwGtpv2cSetLogMgrEntity( NW_IN NwGtpv2cStackHandleT hGtpcStackHandle, NwRcT nwGtpv2cSetLogLevel( NW_IN NwGtpv2cStackHandleT hGtpcStackHandle, - NW_IN NwU32T logLevel) + NW_IN uint32_t logLevel) { NwGtpv2cStackT* thiz = (NwGtpv2cStackT*) hGtpcStackHandle; thiz->logLevel = logLevel; @@ -1218,14 +1218,14 @@ nwGtpv2cSetLogLevel( NW_IN NwGtpv2cStackHandleT hGtpcStackHandle, NwRcT nwGtpv2cProcessUdpReq( NW_IN NwGtpv2cStackHandleT hGtpcStackHandle, - NW_IN NwU8T* udpData, - NW_IN NwU32T udpDataLen, - NW_IN NwU16T peerPort, - NW_IN NwU32T peerIp) + NW_IN uint8_t* udpData, + NW_IN uint32_t udpDataLen, + NW_IN uint16_t peerPort, + NW_IN uint32_t peerIp) { NwRcT rc; NwGtpv2cStackT* thiz; - NwU16T msgType; + uint16_t msgType; thiz = (NwGtpv2cStackT*) hGtpcStackHandle; NW_ASSERT(thiz); @@ -1243,26 +1243,26 @@ nwGtpv2cProcessUdpReq( NW_IN NwGtpv2cStackHandleT hGtpcStackHandle, return NW_OK; } - if( (ntohs(*((NwU16T*)((NwU8T*)udpData + 2))) /* Length */ - + ((*((NwU8T*)(udpData)) & 0x08) ? 4 : 0) /* Extra Header length if TEID present */) > udpDataLen) { + if( (ntohs(*((uint16_t*)((uint8_t*)udpData + 2))) /* Length */ + + ((*((uint8_t*)(udpData)) & 0x08) ? 4 : 0) /* Extra Header length if TEID present */) > udpDataLen) { NW_LOG(thiz, NW_LOG_LEVEL_WARN, "Received message with errneous length of %u against expected length of %u! Discarding", udpDataLen, - ntohs(*((NwU16T*)((NwU8T*)udpData + 2))) + ((*((NwU8T*)(udpData)) & 0x08) ? 4 : 0)); + ntohs(*((uint16_t*)((uint8_t*)udpData + 2))) + ((*((uint8_t*)(udpData)) & 0x08) ? 4 : 0)); return NW_OK; } - if(((*((NwU8T*)(udpData)) & 0xE0) >> 5) != NW_GTP_VERSION) { - NW_LOG(thiz, NW_LOG_LEVEL_WARN, "Received unsupported GTP version '%u' message! Discarding.", ((*((NwU8T*)(udpData)) & 0xE0) >> 5)); + if(((*((uint8_t*)(udpData)) & 0xE0) >> 5) != NW_GTP_VERSION) { + NW_LOG(thiz, NW_LOG_LEVEL_WARN, "Received unsupported GTP version '%u' message! Discarding.", ((*((uint8_t*)(udpData)) & 0xE0) >> 5)); /* Send Version Not Supported Message to peer */ rc = nwGtpv2cSendVersionNotSupportedInd( thiz, peerIp, peerPort, - *((NwU32T*)(udpData + ((*((NwU8T*)(udpData)) & 0x08) ? 8 : 4))) /* Seq Num */); + *((uint32_t*)(udpData + ((*((uint8_t*)(udpData)) & 0x08) ? 8 : 4))) /* Seq Num */); return NW_OK; } - msgType = *((NwU8T*)(udpData + 1)); + msgType = *((uint8_t*)(udpData + 1)); switch(msgType) { case NW_GTP_ECHO_REQ: { @@ -1520,9 +1520,9 @@ nwGtpv2cProcessTimeout(void* arg) NwRcT nwGtpv2cStartTimer(NwGtpv2cStackT* thiz, - NwU32T timeoutSec, - NwU32T timeoutUsec, - NwU32T tmrType, + uint32_t timeoutSec, + uint32_t timeoutUsec, + uint32_t tmrType, NwRcT (*timeoutCallbackFunc)(void*), void* timeoutCallbackArg, NwGtpv2cTimerHandleT *phTimer) @@ -1610,9 +1610,9 @@ nwGtpv2cStartTimer(NwGtpv2cStackT* thiz, NwRcT nwGtpv2cStartTimerOld(NwGtpv2cStackT* thiz, - NwU32T timeoutSec, - NwU32T timeoutUsec, - NwU32T tmrType, + uint32_t timeoutSec, + uint32_t timeoutUsec, + uint32_t tmrType, NwRcT (*timeoutCallbackFunc)(void*), void* timeoutCallbackArg, NwGtpv2cTimerHandleT *phTimer) diff --git a/openair-cn/GTPV2-C/nwgtpv2c-0.11/src/NwGtpv2cMsg.c b/openair-cn/GTPV2-C/nwgtpv2c-0.11/src/NwGtpv2cMsg.c index 044b5f7b06..e566a08594 100644 --- a/openair-cn/GTPV2-C/nwgtpv2c-0.11/src/NwGtpv2cMsg.c +++ b/openair-cn/GTPV2-C/nwgtpv2c-0.11/src/NwGtpv2cMsg.c @@ -62,10 +62,10 @@ static NwGtpv2cMsgT* gpGtpv2cMsgPool = NULL; NwRcT nwGtpv2cMsgNew( NW_IN NwGtpv2cStackHandleT hGtpcStackHandle, - NW_IN NwU8T teidPresent, - NW_IN NwU8T msgType, - NW_IN NwU32T teid, - NW_IN NwU32T seqNum, + NW_IN uint8_t teidPresent, + NW_IN uint8_t msgType, + NW_IN uint32_t teid, + NW_IN uint32_t seqNum, NW_OUT NwGtpv2cMsgHandleT *phMsg) { NwGtpv2cStackT* pStack = (NwGtpv2cStackT*) hGtpcStackHandle; @@ -101,8 +101,8 @@ nwGtpv2cMsgNew( NW_IN NwGtpv2cStackHandleT hGtpcStackHandle, NwRcT nwGtpv2cMsgFromBufferNew( NW_IN NwGtpv2cStackHandleT hGtpcStackHandle, - NW_IN NwU8T* pBuf, - NW_IN NwU32T bufLen, + NW_IN uint8_t* pBuf, + NW_IN uint32_t bufLen, NW_OUT NwGtpv2cMsgHandleT *phMsg) { NwGtpv2cStackT* pStack = (NwGtpv2cStackT*) hGtpcStackHandle; @@ -130,11 +130,11 @@ nwGtpv2cMsgFromBufferNew( NW_IN NwGtpv2cStackHandleT hGtpcStackHandle, pBuf += 3; if(pMsg->teidPresent) { - pMsg->teid = ntohl(*((NwU32T*)(pBuf))); + pMsg->teid = ntohl(*((uint32_t*)(pBuf))); pBuf += 4; } - memcpy(((NwU8T*)&pMsg->seqNum) + 1, pBuf, 3); + memcpy(((uint8_t*)&pMsg->seqNum) + 1, pBuf, 3); pMsg->seqNum = ntohl(pMsg->seqNum); pMsg->hStack = hGtpcStackHandle; @@ -166,7 +166,7 @@ nwGtpv2cMsgDelete( NW_IN NwGtpv2cStackHandleT hGtpcStackHandle, */ NwRcT -nwGtpv2cMsgSetTeid(NW_IN NwGtpv2cMsgHandleT hMsg, NwU32T teid) +nwGtpv2cMsgSetTeid(NW_IN NwGtpv2cMsgHandleT hMsg, uint32_t teid) { NwGtpv2cMsgT *thiz = (NwGtpv2cMsgT*) hMsg; thiz->teid = teid; @@ -196,7 +196,7 @@ nwGtpv2cMsgSetTeidPresent(NW_IN NwGtpv2cMsgHandleT hMsg, NwBoolT teidPresent) */ NwRcT -nwGtpv2cMsgSetSeqNumber(NW_IN NwGtpv2cMsgHandleT hMsg, NwU32T seqNum) +nwGtpv2cMsgSetSeqNumber(NW_IN NwGtpv2cMsgHandleT hMsg, uint32_t seqNum) { NwGtpv2cMsgT *thiz = (NwGtpv2cMsgT*) hMsg; thiz->seqNum = seqNum; @@ -209,7 +209,7 @@ nwGtpv2cMsgSetSeqNumber(NW_IN NwGtpv2cMsgHandleT hMsg, NwU32T seqNum) * @param[in] hMsg : Message handle. */ -NwU32T +uint32_t nwGtpv2cMsgGetTeid(NW_IN NwGtpv2cMsgHandleT hMsg) { NwGtpv2cMsgT *thiz = (NwGtpv2cMsgT*) hMsg; @@ -235,7 +235,7 @@ nwGtpv2cMsgGetTeidPresent(NW_IN NwGtpv2cMsgHandleT hMsg) * @param[in] hMsg : Message handle. */ -NwU32T +uint32_t nwGtpv2cMsgGetSeqNumber(NW_IN NwGtpv2cMsgHandleT hMsg) { NwGtpv2cMsgT *thiz = (NwGtpv2cMsgT*) hMsg; @@ -248,7 +248,7 @@ nwGtpv2cMsgGetSeqNumber(NW_IN NwGtpv2cMsgHandleT hMsg) * @param[in] hMsg : Message handle. */ -NwU32T +uint32_t nwGtpv2cMsgGetMsgType(NW_IN NwGtpv2cMsgHandleT hMsg) { NwGtpv2cMsgT *thiz = (NwGtpv2cMsgT*) hMsg; @@ -261,7 +261,7 @@ nwGtpv2cMsgGetMsgType(NW_IN NwGtpv2cMsgHandleT hMsg) * @param[in] hMsg : Message handle. */ -NwU32T +uint32_t nwGtpv2cMsgGetLength(NW_IN NwGtpv2cMsgHandleT hMsg) { NwGtpv2cMsgT *thiz = (NwGtpv2cMsgT*) hMsg; @@ -271,9 +271,9 @@ nwGtpv2cMsgGetLength(NW_IN NwGtpv2cMsgHandleT hMsg) NwRcT nwGtpv2cMsgAddIeTV1(NW_IN NwGtpv2cMsgHandleT hMsg, - NW_IN NwU8T type, - NW_IN NwU8T instance, - NW_IN NwU8T value) + NW_IN uint8_t type, + NW_IN uint8_t instance, + NW_IN uint8_t value) { NwGtpv2cMsgT *pMsg = (NwGtpv2cMsgT*) hMsg; NwGtpv2cIeTv1T *pIe; @@ -292,9 +292,9 @@ nwGtpv2cMsgAddIeTV1(NW_IN NwGtpv2cMsgHandleT hMsg, NwRcT nwGtpv2cMsgAddIeTV2(NW_IN NwGtpv2cMsgHandleT hMsg, - NW_IN NwU8T type, - NW_IN NwU8T instance, - NW_IN NwU16T value) + NW_IN uint8_t type, + NW_IN uint8_t instance, + NW_IN uint16_t value) { NwGtpv2cMsgT *pMsg = (NwGtpv2cMsgT*) hMsg; NwGtpv2cIeTv2T *pIe; @@ -313,9 +313,9 @@ nwGtpv2cMsgAddIeTV2(NW_IN NwGtpv2cMsgHandleT hMsg, NwRcT nwGtpv2cMsgAddIeTV4(NW_IN NwGtpv2cMsgHandleT hMsg, - NW_IN NwU8T type, - NW_IN NwU8T instance, - NW_IN NwU32T value) + NW_IN uint8_t type, + NW_IN uint8_t instance, + NW_IN uint32_t value) { NwGtpv2cMsgT *pMsg = (NwGtpv2cMsgT*) hMsg; NwGtpv2cIeTv4T *pIe; @@ -334,10 +334,10 @@ nwGtpv2cMsgAddIeTV4(NW_IN NwGtpv2cMsgHandleT hMsg, NwRcT nwGtpv2cMsgAddIe(NW_IN NwGtpv2cMsgHandleT hMsg, - NW_IN NwU8T type, - NW_IN NwU16T length, - NW_IN NwU8T instance, - NW_IN NwU8T* pVal) + NW_IN uint8_t type, + NW_IN uint16_t length, + NW_IN uint8_t instance, + NW_IN uint8_t* pVal) { NwGtpv2cMsgT *pMsg = (NwGtpv2cMsgT*) hMsg; NwGtpv2cIeTlvT *pIe; @@ -348,7 +348,7 @@ nwGtpv2cMsgAddIe(NW_IN NwGtpv2cMsgHandleT hMsg, pIe->l = htons(length); pIe->i = instance & 0x00ff; - memcpy(((NwU8T*)pIe) + 4, pVal, length); + memcpy(((uint8_t*)pIe) + 4, pVal, length); pMsg->msgLen += (4 + length); return NW_OK; @@ -356,8 +356,8 @@ nwGtpv2cMsgAddIe(NW_IN NwGtpv2cMsgHandleT hMsg, NwRcT nwGtpv2cMsgGroupedIeStart(NW_IN NwGtpv2cMsgHandleT hMsg, - NW_IN NwU8T type, - NW_IN NwU8T instance) + NW_IN uint8_t type, + NW_IN uint8_t instance) { NwGtpv2cMsgT *pMsg = (NwGtpv2cMsgT*) hMsg; NwGtpv2cIeTlvT *pIe; @@ -395,13 +395,13 @@ nwGtpv2cMsgGroupedIeEnd(NW_IN NwGtpv2cMsgHandleT hMsg) NwRcT nwGtpv2cMsgAddIeCause(NW_IN NwGtpv2cMsgHandleT hMsg, - NW_IN NwU8T instance, - NW_IN NwU8T causeValue, - NW_IN NwU8T bitFlags, - NW_IN NwU8T offendingIeType, - NW_IN NwU8T offendingIeInstance) + NW_IN uint8_t instance, + NW_IN uint8_t causeValue, + NW_IN uint8_t bitFlags, + NW_IN uint8_t offendingIeType, + NW_IN uint8_t offendingIeInstance) { - NwU8T causeBuf[8]; + uint8_t causeBuf[8]; causeBuf[0] = causeValue; causeBuf[1] = bitFlags; @@ -418,25 +418,25 @@ nwGtpv2cMsgAddIeCause(NW_IN NwGtpv2cMsgHandleT hMsg, NwRcT nwGtpv2cMsgAddIeFteid(NW_IN NwGtpv2cMsgHandleT hMsg, - NW_IN NwU8T instance, - NW_IN NwU8T ifType, - NW_IN NwU32T teidOrGreKey, - NW_IN NwU32T ipv4Addr, - NW_IN NwU8T* pIpv6Addr) + NW_IN uint8_t instance, + NW_IN uint8_t ifType, + NW_IN uint32_t teidOrGreKey, + NW_IN uint32_t ipv4Addr, + NW_IN uint8_t* pIpv6Addr) { - NwU8T fteidBuf[32]; - NwU8T *pFteidBuf = fteidBuf; + uint8_t fteidBuf[32]; + uint8_t *pFteidBuf = fteidBuf; fteidBuf[0] = (ifType & 0x1F); pFteidBuf++; - *((NwU32T*)(pFteidBuf)) = htonl((teidOrGreKey)); + *((uint32_t*)(pFteidBuf)) = htonl((teidOrGreKey)); pFteidBuf += 4; if(ipv4Addr) { fteidBuf[0] |= (0x01 << 7); - *((NwU32T*)(pFteidBuf)) = htonl(ipv4Addr); + *((uint32_t*)(pFteidBuf)) = htonl(ipv4Addr); pFteidBuf += 4; } @@ -452,8 +452,8 @@ nwGtpv2cMsgAddIeFteid(NW_IN NwGtpv2cMsgHandleT hMsg, NwBoolT nwGtpv2cMsgIsIePresent(NW_IN NwGtpv2cMsgHandleT hMsg, - NW_IN NwU8T type, - NW_IN NwU8T instance) + NW_IN uint8_t type, + NW_IN uint8_t instance) { NwGtpv2cMsgT *thiz = (NwGtpv2cMsgT*) hMsg; @@ -465,9 +465,9 @@ nwGtpv2cMsgIsIePresent(NW_IN NwGtpv2cMsgHandleT hMsg, NwRcT nwGtpv2cMsgGetIeTV1(NW_IN NwGtpv2cMsgHandleT hMsg, - NW_IN NwU8T type, - NW_IN NwU8T instance, - NW_OUT NwU8T* pVal) + NW_IN uint8_t type, + NW_IN uint8_t instance, + NW_OUT uint8_t* pVal) { NwGtpv2cMsgT *thiz = (NwGtpv2cMsgT*) hMsg; NwGtpv2cIeTv1T *pIe; @@ -489,9 +489,9 @@ nwGtpv2cMsgGetIeTV1(NW_IN NwGtpv2cMsgHandleT hMsg, NwRcT nwGtpv2cMsgGetIeTV2( NW_IN NwGtpv2cMsgHandleT hMsg, - NW_IN NwU8T type, - NW_IN NwU8T instance, - NW_OUT NwU16T* pVal) + NW_IN uint8_t type, + NW_IN uint8_t instance, + NW_OUT uint16_t* pVal) { NwGtpv2cMsgT *thiz = (NwGtpv2cMsgT*) hMsg; NwGtpv2cIeTv2T *pIe; @@ -513,9 +513,9 @@ nwGtpv2cMsgGetIeTV2( NW_IN NwGtpv2cMsgHandleT hMsg, NwRcT nwGtpv2cMsgGetIeTV4( NW_IN NwGtpv2cMsgHandleT hMsg, - NW_IN NwU8T type, - NW_IN NwU8T instance, - NW_OUT NwU32T* pVal) + NW_IN uint8_t type, + NW_IN uint8_t instance, + NW_OUT uint32_t* pVal) { NwGtpv2cMsgT *thiz = (NwGtpv2cMsgT*) hMsg; NwGtpv2cIeTv4T *pIe; @@ -537,9 +537,9 @@ nwGtpv2cMsgGetIeTV4( NW_IN NwGtpv2cMsgHandleT hMsg, NwRcT nwGtpv2cMsgGetIeTV8( NW_IN NwGtpv2cMsgHandleT hMsg, - NW_IN NwU8T type, - NW_IN NwU8T instance, - NW_OUT NwU64T* pVal) + NW_IN uint8_t type, + NW_IN uint8_t instance, + NW_OUT uint64_t* pVal) { NwGtpv2cMsgT *thiz = (NwGtpv2cMsgT*) hMsg; NwGtpv2cIeTv8T *pIe; @@ -562,11 +562,11 @@ nwGtpv2cMsgGetIeTV8( NW_IN NwGtpv2cMsgHandleT hMsg, NwRcT nwGtpv2cMsgGetIeTlv( NW_IN NwGtpv2cMsgHandleT hMsg, - NW_IN NwU8T type, - NW_IN NwU8T instance, - NW_IN NwU16T maxLen, - NW_OUT NwU8T* pVal, - NW_OUT NwU16T* pLen) + NW_IN uint8_t type, + NW_IN uint8_t instance, + NW_IN uint16_t maxLen, + NW_OUT uint8_t* pVal, + NW_OUT uint16_t* pLen) { NwGtpv2cMsgT *thiz = (NwGtpv2cMsgT*) hMsg; NwGtpv2cIeTlvT *pIe; @@ -576,7 +576,7 @@ nwGtpv2cMsgGetIeTlv( NW_IN NwGtpv2cMsgHandleT hMsg, pIe = (NwGtpv2cIeTlvT*) thiz->pIe[type][instance]; if(ntohs(pIe->l) <= maxLen) { - if(pVal) memcpy(pVal, ((NwU8T*) pIe) + 4, ntohs(pIe->l)); + if(pVal) memcpy(pVal, ((uint8_t*) pIe) + 4, ntohs(pIe->l)); if(pLen) *pLen = ntohs(pIe->l); @@ -589,10 +589,10 @@ nwGtpv2cMsgGetIeTlv( NW_IN NwGtpv2cMsgHandleT hMsg, NwRcT nwGtpv2cMsgGetIeTlvP( NW_IN NwGtpv2cMsgHandleT hMsg, - NW_IN NwU8T type, - NW_IN NwU8T instance, - NW_OUT NwU8T** ppVal, - NW_OUT NwU16T* pLen) + NW_IN uint8_t type, + NW_IN uint8_t instance, + NW_OUT uint8_t** ppVal, + NW_OUT uint16_t* pLen) { NwGtpv2cMsgT *thiz = (NwGtpv2cMsgT*) hMsg; NwGtpv2cIeTlvT *pIe; @@ -601,7 +601,7 @@ nwGtpv2cMsgGetIeTlvP( NW_IN NwGtpv2cMsgHandleT hMsg, if(thiz->isIeValid[type][instance]) { pIe = (NwGtpv2cIeTlvT*) thiz->pIe[type][instance]; - if(ppVal) *ppVal = ((NwU8T*) pIe) + 4; + if(ppVal) *ppVal = ((uint8_t*) pIe) + 4; if(pLen) *pLen = ntohs(pIe->l); @@ -613,11 +613,11 @@ nwGtpv2cMsgGetIeTlvP( NW_IN NwGtpv2cMsgHandleT hMsg, NwRcT nwGtpv2cMsgGetIeCause(NW_IN NwGtpv2cMsgHandleT hMsg, - NW_IN NwU8T instance, - NW_OUT NwU8T* causeValue, - NW_OUT NwU8T* flags, - NW_OUT NwU8T* offendingIeType, - NW_OUT NwU8T* offendingIeInstance) + NW_IN uint8_t instance, + NW_OUT uint8_t* causeValue, + NW_OUT uint8_t* flags, + NW_OUT uint8_t* offendingIeType, + NW_OUT uint8_t* offendingIeInstance) { NwGtpv2cMsgT *thiz = (NwGtpv2cMsgT*) hMsg; NwGtpv2cIeTlvT *pIe; @@ -626,12 +626,12 @@ nwGtpv2cMsgGetIeCause(NW_IN NwGtpv2cMsgHandleT hMsg, if(thiz->isIeValid[NW_GTPV2C_IE_CAUSE][instance]) { pIe = (NwGtpv2cIeTlvT*) thiz->pIe[NW_GTPV2C_IE_CAUSE][instance]; - *causeValue = *((NwU8T*)(((NwU8T*)pIe) + 4)); - *flags = *((NwU8T*)(((NwU8T*)pIe) + 5)); + *causeValue = *((uint8_t*)(((uint8_t*)pIe) + 4)); + *flags = *((uint8_t*)(((uint8_t*)pIe) + 5)); if(pIe->l == 6) { - *offendingIeType = *((NwU8T*)(((NwU8T*)pIe) + 6)); - *offendingIeType = *((NwU8T*)(((NwU8T*)pIe) + 8)); + *offendingIeType = *((uint8_t*)(((uint8_t*)pIe) + 6)); + *offendingIeType = *((uint8_t*)(((uint8_t*)pIe) + 8)); } return NW_OK; @@ -642,11 +642,11 @@ nwGtpv2cMsgGetIeCause(NW_IN NwGtpv2cMsgHandleT hMsg, NwRcT nwGtpv2cMsgGetIeFteid(NW_IN NwGtpv2cMsgHandleT hMsg, - NW_IN NwU8T instance, - NW_OUT NwU8T* ifType, - NW_OUT NwU32T* teidOrGreKey, - NW_OUT NwU32T* ipv4Addr, - NW_OUT NwU8T* pIpv6Addr) + NW_IN uint8_t instance, + NW_OUT uint8_t* ifType, + NW_OUT uint32_t* teidOrGreKey, + NW_OUT uint32_t* ipv4Addr, + NW_OUT uint8_t* pIpv6Addr) { NwGtpv2cMsgT *thiz = (NwGtpv2cMsgT*) hMsg; NwGtpv2cIeTlvT *pIe; @@ -655,17 +655,17 @@ nwGtpv2cMsgGetIeFteid(NW_IN NwGtpv2cMsgHandleT hMsg, if(thiz->isIeValid[NW_GTPV2C_IE_FTEID][instance]) { pIe = (NwGtpv2cIeTlvT*) thiz->pIe[NW_GTPV2C_IE_FTEID][instance]; - NwU8T flags; - NwU8T* pIeValue = ((NwU8T*) pIe) + 4; + uint8_t flags; + uint8_t* pIeValue = ((uint8_t*) pIe) + 4; flags = (*pIeValue) & 0xE0; *ifType = (*pIeValue) & 0x1F; pIeValue += 1; - *teidOrGreKey = ntohl(*((NwU32T*)(pIeValue))); + *teidOrGreKey = ntohl(*((uint32_t*)(pIeValue))); pIeValue += 4; if(flags & 0x80) { - *ipv4Addr = ntohl(*((NwU32T*)(pIeValue))); + *ipv4Addr = ntohl(*((uint32_t*)(pIeValue))); pIeValue += 4; } @@ -680,8 +680,8 @@ nwGtpv2cMsgHexDump(NwGtpv2cMsgHandleT hMsg, FILE* fp) { NwGtpv2cMsgT* pMsg = (NwGtpv2cMsgT*) hMsg; - NwU8T* data = pMsg->msgBuf; - NwU32T size = pMsg->msgLen; + uint8_t* data = pMsg->msgBuf; + uint32_t size = pMsg->msgLen; unsigned char *p = (unsigned char*)data; unsigned char c; diff --git a/openair-cn/GTPV2-C/nwgtpv2c-0.11/src/NwGtpv2cMsgIeParseInfo.c b/openair-cn/GTPV2-C/nwgtpv2c-0.11/src/NwGtpv2cMsgIeParseInfo.c index d71d93c0a0..22607df8aa 100644 --- a/openair-cn/GTPV2-C/nwgtpv2c-0.11/src/NwGtpv2cMsgIeParseInfo.c +++ b/openair-cn/GTPV2-C/nwgtpv2c-0.11/src/NwGtpv2cMsgIeParseInfo.c @@ -50,10 +50,10 @@ extern "C" { typedef struct NwGtpv2cMsgIeInfo { - NwU8T ieType; - NwU8T ieMinLength; - NwU8T ieInstance; - NwU8T iePresence; + uint8_t ieType; + uint8_t ieMinLength; + uint8_t ieInstance; + uint8_t iePresence; struct NwGtpv2cMsgIeInfo *pGroupedIeInfo; } NwGtpv2cMsgIeInfoT; @@ -351,10 +351,10 @@ NwGtpv2cMsgIeInfoT forwardRelocationCompleteAckIeInfoTbl[] = { * P R I V A T E F U N C T I O N S * *----------------------------------------------------------------------------*/ -static NwU32T +static uint32_t nwGtpv2cMsgGroupedIeCount(NwGtpv2cMsgIeInfoT *pMsgIeInfo) { - NwU32T count = 0; + uint32_t count = 0; NwGtpv2cMsgIeInfoT *pGroupedIeInfo = pMsgIeInfo; while (pGroupedIeInfo++) { @@ -372,7 +372,7 @@ static NwRcT nwGtpv2cMsgIeParseInfoUpdate(NwGtpv2cMsgIeParseInfoT *thiz, NwGtpv2cMsgIeInfoT *pMsgIeInfo) { - NwU32T i, j; + uint32_t i, j; for (i = 0; pMsgIeInfo[i].ieType; i++) { if (pMsgIeInfo[i].pGroupedIeInfo) { @@ -411,10 +411,10 @@ nwGtpv2cMsgIeParseInfoUpdate(NwGtpv2cMsgIeParseInfoT *thiz, static NwRcT nwGtpv2cMsgGroupedIeParse(NW_IN NwGtpv2cGroupedIeParseInfoT* thiz, - NW_IN NwU8T ieType, - NW_IN NwU16T ieLength, - NW_IN NwU8T ieInstance, - NW_IN NwU8T *pIeValue) + NW_IN uint8_t ieType, + NW_IN uint16_t ieLength, + NW_IN uint8_t ieInstance, + NW_IN uint8_t *pIeValue) { NW_ASSERT(thiz); @@ -434,7 +434,7 @@ nwGtpv2cMsgGroupedIeParse(NW_IN NwGtpv2cGroupedIeParseInfoT* thiz, */ NwGtpv2cMsgIeParseInfoT* -nwGtpv2cMsgIeParseInfoNew(NwGtpv2cStackHandleT hStack, NwU8T msgType) +nwGtpv2cMsgIeParseInfoNew(NwGtpv2cStackHandleT hStack, uint8_t msgType) { NwRcT rc; NwGtpv2cMsgIeParseInfoT *thiz; @@ -578,21 +578,21 @@ nwGtpv2cMsgIeParse(NW_IN NwGtpv2cMsgIeParseInfoT* thiz, NW_INOUT NwGtpv2cErrorT *pError) { NwRcT rc = NW_OK; - NwU16T mandatoryIeCount =0; - NwU8T *pIeBufStart; - NwU8T *pIeBufEnd; - NwU16T ieType; - NwU16T ieLength; - NwU16T ieInstance; + uint16_t mandatoryIeCount =0; + uint8_t *pIeBufStart; + uint8_t *pIeBufEnd; + uint16_t ieType; + uint16_t ieLength; + uint16_t ieInstance; NwGtpv2cIeTlvT *pIe; NwGtpv2cMsgT *pMsg = (NwGtpv2cMsgT*) hMsg; - NwU8T flags = *((NwU8T*)(pMsg->msgBuf)); + uint8_t flags = *((uint8_t*)(pMsg->msgBuf)); - pIeBufStart = (NwU8T *) (pMsg->msgBuf + (flags & 0x08 ? 12: 8)); - pIeBufEnd = (NwU8T *) (pMsg->msgBuf + pMsg->msgLen); + pIeBufStart = (uint8_t *) (pMsg->msgBuf + (flags & 0x08 ? 12: 8)); + pIeBufEnd = (uint8_t *) (pMsg->msgBuf + pMsg->msgLen); - //memset(pMsg->pIe, 0, sizeof(NwU8T*) * (NW_GTPV2C_IE_TYPE_MAXIMUM) * (NW_GTPV2C_IE_INSTANCE_MAXIMUM)); - memset(pMsg->isIeValid, (NW_FALSE), sizeof(NwU8T) * (NW_GTPV2C_IE_TYPE_MAXIMUM) * (NW_GTPV2C_IE_INSTANCE_MAXIMUM)); + //memset(pMsg->pIe, 0, sizeof(uint8_t*) * (NW_GTPV2C_IE_TYPE_MAXIMUM) * (NW_GTPV2C_IE_INSTANCE_MAXIMUM)); + memset(pMsg->isIeValid, (NW_FALSE), sizeof(uint8_t) * (NW_GTPV2C_IE_TYPE_MAXIMUM) * (NW_GTPV2C_IE_INSTANCE_MAXIMUM)); while (pIeBufStart < pIeBufEnd) { pIe = (NwGtpv2cIeTlvT*) pIeBufStart; @@ -640,12 +640,12 @@ nwGtpv2cMsgIeParse(NW_IN NwGtpv2cMsgIeParseInfoT* thiz, continue; } - pMsg->pIe[ieType][ieInstance] = (NwU8T*) pIeBufStart; + pMsg->pIe[ieType][ieInstance] = (uint8_t*) pIeBufStart; pMsg->isIeValid[ieType][ieInstance] = NW_TRUE; if(thiz->ieParseInfo[ieType][ieInstance].pGroupedIeInfo) { /* Parse the grouped IE */ - rc = nwGtpv2cMsgGroupedIeParse(thiz->ieParseInfo[ieType][ieInstance].pGroupedIeInfo, ieType, ieLength, ieInstance, ((NwU8T*) pIe) + 4); + rc = nwGtpv2cMsgGroupedIeParse(thiz->ieParseInfo[ieType][ieInstance].pGroupedIeInfo, ieType, ieLength, ieInstance, ((uint8_t*) pIe) + 4); if (rc != NW_OK) { pError->cause = NW_GTPV2C_CAUSE_MANDATORY_IE_INCORRECT; diff --git a/openair-cn/GTPV2-C/nwgtpv2c-0.11/src/NwGtpv2cMsgParser.c b/openair-cn/GTPV2-C/nwgtpv2c-0.11/src/NwGtpv2cMsgParser.c index 42a8aad023..a19ddc1bcc 100644 --- a/openair-cn/GTPV2-C/nwgtpv2c-0.11/src/NwGtpv2cMsgParser.c +++ b/openair-cn/GTPV2-C/nwgtpv2c-0.11/src/NwGtpv2cMsgParser.c @@ -54,11 +54,11 @@ extern "C" { NwRcT nwGtpv2cMsgParserNew( NW_IN NwGtpv2cStackHandleT hGtpcStackHandle, - NW_IN NwU8T msgType, - NW_IN NwRcT (*ieReadCallback) (NwU8T ieType, - NwU8T ieLength, - NwU8T ieInstance, - NwU8T* ieValue, + NW_IN uint8_t msgType, + NW_IN NwRcT (*ieReadCallback) (uint8_t ieType, + uint8_t ieLength, + uint8_t ieInstance, + uint8_t* ieValue, void* ieReadCallbackArg), NW_IN void* ieReadCallbackArg, NW_IN NwGtpv2cMsgParserT **pthiz) @@ -97,10 +97,10 @@ nwGtpv2cMsgParserDelete( NW_IN NwGtpv2cStackHandleT hGtpcStackHandle, NwRcT nwGtpv2cMsgParserUpdateIeReadCallback( NW_IN NwGtpv2cMsgParserT* thiz, - NW_IN NwRcT (*ieReadCallback) (NwU8T ieType, - NwU8T ieLength, - NwU8T ieInstance, - NwU8T* ieValue, + NW_IN NwRcT (*ieReadCallback) (uint8_t ieType, + uint8_t ieLength, + uint8_t ieInstance, + uint8_t* ieValue, void* ieReadCallbackArg)) { if(thiz) { @@ -125,13 +125,13 @@ nwGtpv2cMsgParserUpdateIeReadCallbackArg( NW_IN NwGtpv2cMsgParserT* thiz, NwRcT nwGtpv2cMsgParserAddIe( NW_IN NwGtpv2cMsgParserT* thiz, - NW_IN NwU8T ieType, - NW_IN NwU8T ieInstance, - NW_IN NwU8T iePresence, - NW_IN NwRcT (*ieReadCallback) (NwU8T ieType, - NwU8T ieLength, - NwU8T ieInstance, - NwU8T* ieValue, + NW_IN uint8_t ieType, + NW_IN uint8_t ieInstance, + NW_IN uint8_t iePresence, + NW_IN NwRcT (*ieReadCallback) (uint8_t ieType, + uint8_t ieLength, + uint8_t ieInstance, + uint8_t* ieValue, void* ieReadCallbackArg), NW_IN void* ieReadCallbackArg) { @@ -156,13 +156,13 @@ nwGtpv2cMsgParserAddIe( NW_IN NwGtpv2cMsgParserT* thiz, NwRcT nwGtpv2cMsgParserUpdateIe( NW_IN NwGtpv2cMsgParserT* thiz, - NW_IN NwU8T ieType, - NW_IN NwU8T ieInstance, - NW_IN NwU8T iePresence, - NW_IN NwRcT (*ieReadCallback) (NwU8T ieType, - NwU8T ieLength, - NwU8T ieInstance, - NwU8T* ieValue, + NW_IN uint8_t ieType, + NW_IN uint8_t ieInstance, + NW_IN uint8_t iePresence, + NW_IN NwRcT (*ieReadCallback) (uint8_t ieType, + uint8_t ieLength, + uint8_t ieInstance, + uint8_t* ieValue, void* ieReadCallbackArg), NW_IN void* ieReadCallbackArg) { @@ -186,26 +186,26 @@ nwGtpv2cMsgParserUpdateIe( NW_IN NwGtpv2cMsgParserT* thiz, NwRcT nwGtpv2cMsgParserRun( NW_IN NwGtpv2cMsgParserT *thiz, NW_IN NwGtpv2cMsgHandleT hMsg, - NW_OUT NwU8T *pOffendingIeType, - NW_OUT NwU8T *pOffendingIeInstance, - NW_OUT NwU16T *pOffendingIeLength) + NW_OUT uint8_t *pOffendingIeType, + NW_OUT uint8_t *pOffendingIeInstance, + NW_OUT uint16_t *pOffendingIeLength) { NwRcT rc = NW_OK; - NwU8T flags; - NwU16T mandatoryIeCount =0; + uint8_t flags; + uint16_t mandatoryIeCount =0; NwGtpv2cIeTlvT *pIe; - NwU8T *pIeStart; - NwU8T *pIeEnd; - NwU16T ieLength; + uint8_t *pIeStart; + uint8_t *pIeEnd; + uint16_t ieLength; NwGtpv2cMsgT *pMsg = (NwGtpv2cMsgT*) hMsg; NW_ASSERT(pMsg); - flags = *((NwU8T*)(pMsg->msgBuf)); - pIeStart = (NwU8T *) (pMsg->msgBuf + (flags & 0x08 ? 12: 8)); - pIeEnd = (NwU8T *) (pMsg->msgBuf + pMsg->msgLen); + flags = *((uint8_t*)(pMsg->msgBuf)); + pIeStart = (uint8_t *) (pMsg->msgBuf + (flags & 0x08 ? 12: 8)); + pIeEnd = (uint8_t *) (pMsg->msgBuf + pMsg->msgLen); - memset(thiz->pIe, 0, sizeof(NwU8T*) * (NW_GTPV2C_IE_TYPE_MAXIMUM) * (NW_GTPV2C_IE_INSTANCE_MAXIMUM)); - memset(pMsg->pIe, 0, sizeof(NwU8T*) * (NW_GTPV2C_IE_TYPE_MAXIMUM) * (NW_GTPV2C_IE_INSTANCE_MAXIMUM)); + memset(thiz->pIe, 0, sizeof(uint8_t*) * (NW_GTPV2C_IE_TYPE_MAXIMUM) * (NW_GTPV2C_IE_INSTANCE_MAXIMUM)); + memset(pMsg->pIe, 0, sizeof(uint8_t*) * (NW_GTPV2C_IE_TYPE_MAXIMUM) * (NW_GTPV2C_IE_INSTANCE_MAXIMUM)); while (pIeStart < pIeEnd) { pIe = (NwGtpv2cIeTlvT*) pIeStart; @@ -219,8 +219,8 @@ nwGtpv2cMsgParserRun( NW_IN NwGtpv2cMsgParserT *thiz, } if((thiz->ieParseInfo[pIe->t][pIe->i].iePresence)) { - thiz->pIe[pIe->t][pIe->i] = (NwU8T*) pIeStart; - pMsg->pIe[pIe->t][pIe->i] = (NwU8T*) pIeStart; + thiz->pIe[pIe->t][pIe->i] = (uint8_t*) pIeStart; + pMsg->pIe[pIe->t][pIe->i] = (uint8_t*) pIeStart; NW_LOG(thiz->hStack, NW_LOG_LEVEL_DEBG, "Received IE %u of length %u!", pIe->t, ieLength); @@ -258,7 +258,7 @@ nwGtpv2cMsgParserRun( NW_IN NwGtpv2cMsgParserT *thiz, } if((NW_OK == rc) && (mandatoryIeCount != thiz->mandatoryIeCount)) { - NwU16T t, i; + uint16_t t, i; *pOffendingIeType = 0; *pOffendingIeInstance = 0; *pOffendingIeLength = 0; diff --git a/openair-cn/GTPV2-C/nwgtpv2c-0.11/src/NwGtpv2cTrxn.c b/openair-cn/GTPV2-C/nwgtpv2c-0.11/src/NwGtpv2cTrxn.c index 9a67386085..4d052d05f1 100644 --- a/openair-cn/GTPV2-C/nwgtpv2c-0.11/src/NwGtpv2cTrxn.c +++ b/openair-cn/GTPV2-C/nwgtpv2c-0.11/src/NwGtpv2cTrxn.c @@ -253,7 +253,7 @@ nwGtpv2cTrxnNew( NW_IN NwGtpv2cStackT* thiz) */ NwGtpv2cTrxnT* nwGtpv2cTrxnWithSeqNumNew( NW_IN NwGtpv2cStackT* thiz, - NW_IN NwU32T seqNum) + NW_IN uint32_t seqNum) { NwGtpv2cTrxnT *pTrxn; @@ -292,10 +292,10 @@ nwGtpv2cTrxnWithSeqNumNew( NW_IN NwGtpv2cStackT* thiz, NwGtpv2cTrxnT* nwGtpv2cTrxnOutstandingRxNew( NW_IN NwGtpv2cStackT* thiz, - NW_IN NwU32T teidLocal, - NW_IN NwU32T peerIp, - NW_IN NwU32T peerPort, - NW_IN NwU32T seqNum) + NW_IN uint32_t teidLocal, + NW_IN uint32_t peerIp, + NW_IN uint32_t peerPort, + NW_IN uint32_t seqNum) { NwRcT rc; NwGtpv2cTrxnT *pTrxn, *pCollision; @@ -321,7 +321,7 @@ nwGtpv2cTrxnOutstandingRxNew( NW_IN NwGtpv2cStackT* thiz, if(pCollision) { NW_LOG(thiz, NW_LOG_LEVEL_WARN, "Duplicate request message received for seq num 0x%x!", - (NwU32T) seqNum); + (uint32_t) seqNum); /* Case of duplicate request message from peer. Retransmit response. */ if(pCollision->pMsg) { diff --git a/openair-cn/GTPV2-C/nwgtpv2c-0.11/src/NwGtpv2cTunnel.c b/openair-cn/GTPV2-C/nwgtpv2c-0.11/src/NwGtpv2cTunnel.c index ab82e4f5df..865d2c155a 100644 --- a/openair-cn/GTPV2-C/nwgtpv2c-0.11/src/NwGtpv2cTunnel.c +++ b/openair-cn/GTPV2-C/nwgtpv2c-0.11/src/NwGtpv2cTunnel.c @@ -48,7 +48,7 @@ extern "C" { static NwGtpv2cTunnelT* gpGtpv2cTunnelPool = NULL; NwGtpv2cTunnelT* -nwGtpv2cTunnelNew(struct NwGtpv2cStack *pStack, NwU32T teid, NwU32T ipv4AddrRemote, NwGtpv2cUlpTunnelHandleT hUlpTunnel) +nwGtpv2cTunnelNew(struct NwGtpv2cStack *pStack, uint32_t teid, uint32_t ipv4AddrRemote, NwGtpv2cUlpTunnelHandleT hUlpTunnel) { NwGtpv2cTunnelT* thiz; diff --git a/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-egtping/NwEgtPingMain.c b/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-egtping/NwEgtPingMain.c index 6681461c38..a346ab1faf 100644 --- a/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-egtping/NwEgtPingMain.c +++ b/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-egtping/NwEgtPingMain.c @@ -30,10 +30,10 @@ NwCharT* gLogLevelStr[] = {"EMER", "ALER", "CRIT", "ERRO", "WARN", "NOTI", "INF typedef struct NwEgtPingS { - NwU8T localIpStr[20]; - NwU8T targetIpStr[20]; - NwU32T pingInterval; - NwU32T pingCount; + uint8_t localIpStr[20]; + uint8_t targetIpStr[20]; + uint32_t pingInterval; + uint32_t pingCount; NwGtpv2cNodeUlpT ulpObj; NwGtpv2cNodeUdpT udpObj; } NwEgtPingT; @@ -136,8 +136,8 @@ nwEgtPingParseCmdLineOpts(int argc, char* argv[]) int main(int argc, char* argv[]) { NwRcT rc; - NwU32T logLevel; - NwU8T* logLevelStr; + uint32_t logLevel; + uint8_t* logLevelStr; NwGtpv2cStackHandleT hGtpv2cStack = 0; diff --git a/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-egtping/NwMiniLogMgrEntity.c b/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-egtping/NwMiniLogMgrEntity.c index a1f2c32dc2..585f7fa7c7 100644 --- a/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-egtping/NwMiniLogMgrEntity.c +++ b/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-egtping/NwMiniLogMgrEntity.c @@ -40,21 +40,21 @@ NwMiniLogMgrT* nwMiniLogMgrGetInstance() return &(__gLogMgr); } -NwRcT nwMiniLogMgrInit(NwMiniLogMgrT* thiz, NwU32T logLevel ) +NwRcT nwMiniLogMgrInit(NwMiniLogMgrT* thiz, uint32_t logLevel ) { thiz->logLevel = logLevel; return NW_OK; } -NwRcT nwMiniLogMgrSetLogLevel(NwMiniLogMgrT* thiz, NwU32T logLevel) +NwRcT nwMiniLogMgrSetLogLevel(NwMiniLogMgrT* thiz, uint32_t logLevel) { thiz->logLevel = logLevel; } NwRcT nwMiniLogMgrLogRequest (NwGtpv2cLogMgrHandleT hLogMgr, - NwU32T logLevel, + uint32_t logLevel, NwCharT* file, - NwU32T line, + uint32_t line, NwCharT* logStr) { NwMiniLogMgrT* thiz = (NwMiniLogMgrT*) hLogMgr; diff --git a/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-egtping/NwMiniLogMgrEntity.h b/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-egtping/NwMiniLogMgrEntity.h index ac209efb21..3f37dec409 100644 --- a/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-egtping/NwMiniLogMgrEntity.h +++ b/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-egtping/NwMiniLogMgrEntity.h @@ -37,7 +37,7 @@ * MiniLogMgr Class Definition */ typedef struct NwMiniLogMgr { - NwU8T logLevel; /*< Log level */ + uint8_t logLevel; /*< Log level */ } NwMiniLogMgrT; @@ -59,14 +59,14 @@ NwMiniLogMgrT* nwMiniLogMgrGetInstance(); * @param thiz : Pointer to global singleton MiniLogMgr instance * @param logLevel : Log Level */ -NwRcT nwMiniLogMgrInit(NwMiniLogMgrT* thiz, NwU32T logLevel ); +NwRcT nwMiniLogMgrInit(NwMiniLogMgrT* thiz, uint32_t logLevel ); /** * Set MiniLogMgr log level * @param thiz : Pointer to global singleton MiniLogMgr instance * @param logLevel : Log Level */ -NwRcT nwMiniLogMgrSetLogLevel(NwMiniLogMgrT* thiz, NwU32T logLevel); +NwRcT nwMiniLogMgrSetLogLevel(NwMiniLogMgrT* thiz, uint32_t logLevel); /** * Process log request from stack @@ -77,9 +77,9 @@ NwRcT nwMiniLogMgrSetLogLevel(NwMiniLogMgrT* thiz, NwU32T logLevel); * @param logStr : Log string */ NwRcT nwMiniLogMgrLogRequest (NwGtpv2cLogMgrHandleT logMgrHandle, - NwU32T logLevel, + uint32_t logLevel, NwCharT* file, - NwU32T line, + uint32_t line, NwCharT* logStr); #ifdef __cplusplus diff --git a/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-egtping/NwMiniTmrMgrEntity.c b/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-egtping/NwMiniTmrMgrEntity.c index 9dad245081..7b5553aa6b 100644 --- a/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-egtping/NwMiniTmrMgrEntity.c +++ b/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-egtping/NwMiniTmrMgrEntity.c @@ -55,9 +55,9 @@ NW_TMR_CALLBACK(nwGtpv2cNodeHandleStackTimerTimeout) *--------------------------------------------------------------------------*/ NwRcT nwTimerStart( NwGtpv2cTimerMgrHandleT tmrMgrHandle, - NwU32T timeoutSec, - NwU32T timeoutUsec, - NwU32T tmrType, + uint32_t timeoutSec, + uint32_t timeoutUsec, + uint32_t tmrType, void* timeoutArg, NwGtpv2cTimerHandleT* hTmr) { diff --git a/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-egtping/NwMiniTmrMgrEntity.h b/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-egtping/NwMiniTmrMgrEntity.h index 5db18d8a82..85970c6cc2 100644 --- a/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-egtping/NwMiniTmrMgrEntity.h +++ b/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-egtping/NwMiniTmrMgrEntity.h @@ -25,7 +25,7 @@ #define __NW_MINI_TMR_MGR_H__ typedef struct { - NwU8T _tbd; + uint8_t _tbd; } NwGtpv2cNodeTmrMgrT; typedef struct { @@ -39,9 +39,9 @@ extern "C" { #endif NwRcT nwTimerStart( NwGtpv2cTimerMgrHandleT tmrMgrHandle, - NwU32T timeoutSec, - NwU32T timeoutUsec, - NwU32T tmrType, + uint32_t timeoutSec, + uint32_t timeoutUsec, + uint32_t tmrType, void* timeoutArg, NwGtpv2cTimerHandleT* hTmr); diff --git a/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-egtping/NwMiniUdpEntity.c b/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-egtping/NwMiniUdpEntity.c index e2add191f7..16f5f2bcea 100644 --- a/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-egtping/NwMiniUdpEntity.c +++ b/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-egtping/NwMiniUdpEntity.c @@ -47,10 +47,10 @@ static void NW_EVT_CALLBACK(nwUdpDataIndicationCallbackData) { NwRcT rc; - NwU8T udpBuf[MAX_UDP_PAYLOAD_LEN]; + uint8_t udpBuf[MAX_UDP_PAYLOAD_LEN]; NwS32T bytesRead; struct sockaddr_in peer; - NwU32T peerLen; + uint32_t peerLen; NwGtpv2cNodeUdpT* thiz = (NwGtpv2cNodeUdpT*) arg; peerLen = sizeof(peer); @@ -96,7 +96,7 @@ void NW_EVT_CALLBACK(nwUdpDataIndicationCallbackData) * Public functions *--------------------------------------------------------------------------*/ -NwRcT nwGtpv2cUdpInit(NwGtpv2cNodeUdpT* thiz, NwGtpv2cStackHandleT hGtpv2cStack, NwU8T* ipAddrStr) +NwRcT nwGtpv2cUdpInit(NwGtpv2cNodeUdpT* thiz, NwGtpv2cStackHandleT hGtpv2cStack, uint8_t* ipAddrStr) { int sd; struct sockaddr_in addr; @@ -179,10 +179,10 @@ NwRcT nwGtpv2cUdpReset(NwGtpv2cNodeUdpT* thiz) } NwRcT nwGtpv2cUdpDataReq(NwGtpv2cUdpHandleT udpHandle, - NwU8T* dataBuf, - NwU32T dataSize, - NwU32T peerIp, - NwU32T peerPort) + uint8_t* dataBuf, + uint32_t dataSize, + uint32_t peerIp, + uint32_t peerPort) { struct sockaddr_in peerAddr; NwS32T bytesSent; diff --git a/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-egtping/NwMiniUdpEntity.h b/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-egtping/NwMiniUdpEntity.h index d1a653c3eb..37061e95e4 100644 --- a/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-egtping/NwMiniUdpEntity.h +++ b/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-egtping/NwMiniUdpEntity.h @@ -25,27 +25,27 @@ #define __NW_MINI_UDP_ENTITY_H__ typedef struct { - NwU32T ipv4Addr; - NwU32T hSocket; + uint32_t ipv4Addr; + uint32_t hSocket; NwEventT ev; NwGtpv2cStackHandleT hGtpv2cStack; - NwU32T packetsSent; - NwU32T packetsRcvd; + uint32_t packetsSent; + uint32_t packetsRcvd; } NwGtpv2cNodeUdpT; #ifdef __cplusplus extern "C" { #endif -NwRcT nwGtpv2cUdpInit(NwGtpv2cNodeUdpT* thiz, NwGtpv2cStackHandleT hGtpv2cStack, NwU8T* ipAddrStr); +NwRcT nwGtpv2cUdpInit(NwGtpv2cNodeUdpT* thiz, NwGtpv2cStackHandleT hGtpv2cStack, uint8_t* ipAddrStr); NwRcT nwGtpv2cUdpDestroy(NwGtpv2cNodeUdpT* thiz); NwRcT nwGtpv2cUdpDataReq(NwGtpv2cUdpHandleT udpHandle, - NwU8T* dataBuf, - NwU32T dataSize, - NwU32T peerIp, - NwU32T peerPort); + uint8_t* dataBuf, + uint32_t dataSize, + uint32_t peerIp, + uint32_t peerPort); NwRcT nwGtpv2cUdpReset(NwGtpv2cNodeUdpT* thiz); diff --git a/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-egtping/NwMiniUlpEntity.c b/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-egtping/NwMiniUlpEntity.c index f9c20cba1e..fc5cc809d0 100644 --- a/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-egtping/NwMiniUlpEntity.c +++ b/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-egtping/NwMiniUlpEntity.c @@ -56,18 +56,18 @@ nwGtpv2cUlpDestroy(NwGtpv2cNodeUlpT* thiz) } typedef struct NwGtpv2cPeerS { - NwU32T ipv4Addr; - NwU32T pingCount; - NwU32T pingInterval; - NwU32T t3Time; - NwU32T n3Count; + uint32_t ipv4Addr; + uint32_t pingCount; + uint32_t pingInterval; + uint32_t t3Time; + uint32_t n3Count; - NwU32T sendTimeStamp; + uint32_t sendTimeStamp; NwGtpv2cTunnelHandleT hTunnel; } NwGtpv2cPeerT; NwGtpv2cPeerT* -nwGtpv2cUlpCreatePeerContext(NwGtpv2cNodeUlpT* thiz, NwU32T peerIp) +nwGtpv2cUlpCreatePeerContext(NwGtpv2cNodeUlpT* thiz, uint32_t peerIp) { NwRcT rc; NwGtpv2cUlpApiT ulpReq; @@ -135,11 +135,11 @@ nwGtpv2cUlpSendEchoRequestToPeer(NwGtpv2cNodeUlpT* thiz, NwGtpv2cPeerT *pPeer) NwRcT nwGtpv2cUlpPing(NwGtpv2cNodeUlpT* thiz, - NwU32T peerIp, - NwU32T pingCount, - NwU32T pingInterval, - NwU32T t3Time, - NwU32T n3Count) + uint32_t peerIp, + uint32_t pingCount, + uint32_t pingInterval, + uint32_t t3Time, + uint32_t n3Count) { NwRcT rc; NwGtpv2cPeerT *pPeer; @@ -165,9 +165,9 @@ nwGtpv2cUlpProcessStackReqCallback (NwGtpv2cUlpHandleT hUlp, NwGtpv2cUlpApiT *pUlpApi) { NwRcT rc; - NwU32T seqNum; - NwU32T len; - NwU32T recvTimeStamp; + uint32_t seqNum; + uint32_t len; + uint32_t recvTimeStamp; struct timeval tv; NwGtpv2cPeerT *pPeer; NwGtpv2cNodeUlpT* thiz; diff --git a/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-egtping/NwMiniUlpEntity.h b/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-egtping/NwMiniUlpEntity.h index 782074df7c..3f56bf58e8 100644 --- a/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-egtping/NwMiniUlpEntity.h +++ b/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-egtping/NwMiniUlpEntity.h @@ -20,8 +20,8 @@ #define __NW_MINI_ULP_H__ typedef struct { - NwU8T peerIpStr[16]; - NwU32T restartCounter; + uint8_t peerIpStr[16]; + uint32_t restartCounter; NwGtpv2cStackHandleT hGtpv2cStack; } NwGtpv2cNodeUlpT; @@ -41,11 +41,11 @@ nwGtpv2cUlpProcessStackReqCallback (NwGtpv2cUlpHandleT hUlp, NwRcT nwGtpv2cUlpPing(NwGtpv2cNodeUlpT* thiz, - NwU32T peerIp, - NwU32T pingCount, - NwU32T pingInterval, - NwU32T t3Time, - NwU32T n3Count); + uint32_t peerIp, + uint32_t pingCount, + uint32_t pingInterval, + uint32_t t3Time, + uint32_t n3Count); #ifdef __cplusplus } diff --git a/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-helloworld/NwMiniLogMgrEntity.c b/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-helloworld/NwMiniLogMgrEntity.c index 5d0343655c..3ebc6a3a23 100644 --- a/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-helloworld/NwMiniLogMgrEntity.c +++ b/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-helloworld/NwMiniLogMgrEntity.c @@ -40,21 +40,21 @@ NwMiniLogMgrT* nwMiniLogMgrGetInstance() return &(__gLogMgr); } -NwRcT nwMiniLogMgrInit(NwMiniLogMgrT* thiz, NwU32T logLevel ) +NwRcT nwMiniLogMgrInit(NwMiniLogMgrT* thiz, uint32_t logLevel ) { thiz->logLevel = logLevel; return NW_OK; } -NwRcT nwMiniLogMgrSetLogLevel(NwMiniLogMgrT* thiz, NwU32T logLevel) +NwRcT nwMiniLogMgrSetLogLevel(NwMiniLogMgrT* thiz, uint32_t logLevel) { thiz->logLevel = logLevel; } NwRcT nwMiniLogMgrLogRequest (NwGtpv2cLogMgrHandleT hLogMgr, - NwU32T logLevel, + uint32_t logLevel, NwCharT* file, - NwU32T line, + uint32_t line, NwCharT* logStr) { NwMiniLogMgrT* thiz = (NwMiniLogMgrT*) hLogMgr; diff --git a/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-helloworld/NwMiniLogMgrEntity.h b/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-helloworld/NwMiniLogMgrEntity.h index ebf63729cd..361a2c6d95 100644 --- a/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-helloworld/NwMiniLogMgrEntity.h +++ b/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-helloworld/NwMiniLogMgrEntity.h @@ -37,7 +37,7 @@ * MiniLogMgr Class Definition */ typedef struct NwMiniLogMgr { - NwU8T logLevel; /*< Log level */ + uint8_t logLevel; /*< Log level */ } NwMiniLogMgrT; @@ -59,14 +59,14 @@ NwMiniLogMgrT* nwMiniLogMgrGetInstance(); * @param thiz : Pointer to global singleton MiniLogMgr instance * @param logLevel : Log Level */ -NwRcT nwMiniLogMgrInit(NwMiniLogMgrT* thiz, NwU32T logLevel ); +NwRcT nwMiniLogMgrInit(NwMiniLogMgrT* thiz, uint32_t logLevel ); /** * Set MiniLogMgr log level * @param thiz : Pointer to global singleton MiniLogMgr instance * @param logLevel : Log Level */ -NwRcT nwMiniLogMgrSetLogLevel(NwMiniLogMgrT* thiz, NwU32T logLevel); +NwRcT nwMiniLogMgrSetLogLevel(NwMiniLogMgrT* thiz, uint32_t logLevel); /** * Process log request from stack @@ -77,9 +77,9 @@ NwRcT nwMiniLogMgrSetLogLevel(NwMiniLogMgrT* thiz, NwU32T logLevel); * @param logStr : Log string */ NwRcT nwMiniLogMgrLogRequest (NwGtpv2cLogMgrHandleT logMgrHandle, - NwU32T logLevel, + uint32_t logLevel, NwCharT* file, - NwU32T line, + uint32_t line, NwCharT* logStr); #ifdef __cplusplus diff --git a/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-helloworld/NwMiniTmrMgrEntity.c b/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-helloworld/NwMiniTmrMgrEntity.c index b18c79a4f2..38d2ee6374 100644 --- a/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-helloworld/NwMiniTmrMgrEntity.c +++ b/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-helloworld/NwMiniTmrMgrEntity.c @@ -55,9 +55,9 @@ NW_TMR_CALLBACK(nwGtpv2cNodeHandleStackTimerTimeout) *--------------------------------------------------------------------------*/ NwRcT nwTimerStart( NwGtpv2cTimerMgrHandleT tmrMgrHandle, - NwU32T timeoutSec, - NwU32T timeoutUsec, - NwU32T tmrType, + uint32_t timeoutSec, + uint32_t timeoutUsec, + uint32_t tmrType, void* timeoutArg, NwGtpv2cTimerHandleT* hTmr) { diff --git a/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-helloworld/NwMiniTmrMgrEntity.h b/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-helloworld/NwMiniTmrMgrEntity.h index 5db18d8a82..85970c6cc2 100644 --- a/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-helloworld/NwMiniTmrMgrEntity.h +++ b/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-helloworld/NwMiniTmrMgrEntity.h @@ -25,7 +25,7 @@ #define __NW_MINI_TMR_MGR_H__ typedef struct { - NwU8T _tbd; + uint8_t _tbd; } NwGtpv2cNodeTmrMgrT; typedef struct { @@ -39,9 +39,9 @@ extern "C" { #endif NwRcT nwTimerStart( NwGtpv2cTimerMgrHandleT tmrMgrHandle, - NwU32T timeoutSec, - NwU32T timeoutUsec, - NwU32T tmrType, + uint32_t timeoutSec, + uint32_t timeoutUsec, + uint32_t tmrType, void* timeoutArg, NwGtpv2cTimerHandleT* hTmr); diff --git a/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-helloworld/NwMiniUdpEntity.c b/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-helloworld/NwMiniUdpEntity.c index 286d228058..a5352349f5 100644 --- a/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-helloworld/NwMiniUdpEntity.c +++ b/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-helloworld/NwMiniUdpEntity.c @@ -46,9 +46,9 @@ static void NW_EVT_CALLBACK(nwUdpDataIndicationCallbackData) { NwRcT rc; - NwU8T udpBuf[MAX_UDP_PAYLOAD_LEN]; + uint8_t udpBuf[MAX_UDP_PAYLOAD_LEN]; NwS32T bytesRead; - NwU32T peerLen; + uint32_t peerLen; struct sockaddr_in peer; NwGtpv2cNodeUdpT* thiz = (NwGtpv2cNodeUdpT*) arg; @@ -57,7 +57,7 @@ void NW_EVT_CALLBACK(nwUdpDataIndicationCallbackData) bytesRead = recvfrom(fd, udpBuf, MAX_UDP_PAYLOAD_LEN , 0, (struct sockaddr *) &peer,(socklen_t*) &peerLen); if(bytesRead) { - NwU32T peerIp = (peer.sin_addr.s_addr); + uint32_t peerIp = (peer.sin_addr.s_addr); NW_LOG(NW_LOG_LEVEL_DEBG, "Received UDP message of size %u from peer %u.%u.%u.%u:%u", bytesRead, (peerIp & 0x000000ff), (peerIp & 0x0000ff00) >> 8, @@ -75,7 +75,7 @@ void NW_EVT_CALLBACK(nwUdpDataIndicationCallbackData) * Public functions *--------------------------------------------------------------------------*/ -NwRcT nwGtpv2cUdpInit(NwGtpv2cNodeUdpT* thiz, NwGtpv2cStackHandleT hGtpv2cStack, NwU8T* ipv4Addr) +NwRcT nwGtpv2cUdpInit(NwGtpv2cNodeUdpT* thiz, NwGtpv2cStackHandleT hGtpv2cStack, uint8_t* ipv4Addr) { int sd; struct sockaddr_in addr; @@ -111,10 +111,10 @@ NwRcT nwGtpv2cUdpDestroy(NwGtpv2cNodeUdpT* thiz) } NwRcT nwGtpv2cUdpDataReq(NwGtpv2cUdpHandleT udpHandle, - NwU8T* dataBuf, - NwU32T dataSize, - NwU32T peerIp, - NwU32T peerPort) + uint8_t* dataBuf, + uint32_t dataSize, + uint32_t peerIp, + uint32_t peerPort) { struct sockaddr_in peerAddr; NwS32T bytesSent; diff --git a/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-helloworld/NwMiniUdpEntity.h b/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-helloworld/NwMiniUdpEntity.h index a8f36a2787..4f1bb3eef9 100644 --- a/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-helloworld/NwMiniUdpEntity.h +++ b/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-helloworld/NwMiniUdpEntity.h @@ -25,7 +25,7 @@ #define __NW_MINI_UDP_ENTITY_H__ typedef struct { - NwU32T hSocket; + uint32_t hSocket; NwEventT ev; NwGtpv2cStackHandleT hGtpv2cStack; } NwGtpv2cNodeUdpT; @@ -34,15 +34,15 @@ typedef struct { extern "C" { #endif -NwRcT nwGtpv2cUdpInit(NwGtpv2cNodeUdpT* thiz, NwGtpv2cStackHandleT hGtpv2cStack, NwU8T* ipv4Addr); +NwRcT nwGtpv2cUdpInit(NwGtpv2cNodeUdpT* thiz, NwGtpv2cStackHandleT hGtpv2cStack, uint8_t* ipv4Addr); NwRcT nwGtpv2cUdpDestroy(NwGtpv2cNodeUdpT* thiz); NwRcT nwGtpv2cUdpDataReq(NwGtpv2cUdpHandleT udpHandle, - NwU8T* dataBuf, - NwU32T dataSize, - NwU32T peerIp, - NwU32T peerPort); + uint8_t* dataBuf, + uint32_t dataSize, + uint32_t peerIp, + uint32_t peerPort); #ifdef __cplusplus } diff --git a/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-helloworld/NwMiniUlpEntity.c b/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-helloworld/NwMiniUlpEntity.c index 5868e724eb..82bc6580af 100644 --- a/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-helloworld/NwMiniUlpEntity.c +++ b/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-helloworld/NwMiniUlpEntity.c @@ -34,7 +34,7 @@ static NwCharT* gLogLevelStr[] = {"EMER", "ALER", "CRIT", "ERRO", "WARN", "NOTI", "INFO", "DEBG"}; static NwRcT -nwGtpv2cCreateSessionRequestIeIndication(NwU8T ieType, NwU8T ieLength, NwU8T ieInstance, NwU8T* ieValue, void* arg) +nwGtpv2cCreateSessionRequestIeIndication(uint8_t ieType, uint8_t ieLength, uint8_t ieInstance, uint8_t* ieValue, void* arg) { NW_LOG(NW_LOG_LEVEL_DEBG, "Received IE Parse Indication for of type %u, length %u, instance %u!", ieType, ieLength, ieInstance); return NW_OK; @@ -62,7 +62,7 @@ nwGtpv2cUlpDestroy(NwGtpv2cNodeUlpT* thiz) } NwRcT -nwGtpv2cUlpSenEchoRequestToPeer(NwGtpv2cNodeUlpT* thiz, NwU32T peerIp) +nwGtpv2cUlpSenEchoRequestToPeer(NwGtpv2cNodeUlpT* thiz, uint32_t peerIp) { NwRcT rc; NwGtpv2cUlpApiT ulpReq; @@ -153,18 +153,18 @@ nwGtpv2cUlpProcessStackReqCallback (NwGtpv2cUlpHandleT hUlp, if(pUlpApi->apiInfo.initialReqIndInfo.msgType == NW_GTP_CREATE_SESSION_REQ) { struct { - NwU8T causeValue; - NwU8T spare:5; - NwU8T pce:1; - NwU8T bce:1; - NwU8T cs:1; + uint8_t causeValue; + uint8_t spare:5; + uint8_t pce:1; + uint8_t bce:1; + uint8_t cs:1; } cause; rc = nwGtpv2cMsgParserAddIe(pMsgParser, NW_GTPV2C_IE_RECOVERY, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_MANDATORY, nwGtpv2cCreateSessionRequestIeIndication, NULL); NW_ASSERT(NW_OK == rc); - NwU8T offendingIeType, OffendingIeLength; + uint8_t offendingIeType, OffendingIeLength; rc = nwGtpv2cMsgParserRun(pMsgParser, (pUlpApi->hMsg), &offendingIeType, &OffendingIeLength); if( rc != NW_OK ) { @@ -198,7 +198,7 @@ nwGtpv2cUlpProcessStackReqCallback (NwGtpv2cUlpHandleT hUlp, nwGtpv2cMsgGetSeqNumber(pUlpApi->hMsg), &(ulpReq.hMsg)); - rc = nwGtpv2cMsgAddIe((ulpReq.hMsg), NW_GTPV2C_IE_CAUSE, 2, 0, (NwU8T*)&cause); + rc = nwGtpv2cMsgAddIe((ulpReq.hMsg), NW_GTPV2C_IE_CAUSE, 2, 0, (uint8_t*)&cause); NW_ASSERT(NW_OK == rc); NW_LOG(NW_LOG_LEVEL_NOTI, "Received NW_GTP_CREATE_SESSION_REQ, Sending NW_GTP_CREATE_SESSION_RSP!"); @@ -227,7 +227,7 @@ nwGtpv2cUlpProcessStackReqCallback (NwGtpv2cUlpHandleT hUlp, rc = nwGtpv2cMsgParserAddIe(pMsgParser, NW_GTPV2C_IE_CAUSE, NW_GTPV2C_IE_INSTANCE_ZERO, NW_GTPV2C_IE_PRESENCE_MANDATORY, nwGtpv2cCreateSessionRequestIeIndication, NULL); NW_ASSERT(NW_OK == rc); - NwU8T offendingIeType, OffendingIeLength; + uint8_t offendingIeType, OffendingIeLength; rc = nwGtpv2cMsgParserRun(pMsgParser, (pUlpApi->hMsg), &offendingIeType, &OffendingIeLength); if( rc != NW_OK ) { diff --git a/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-helloworld/NwMiniUlpEntity.h b/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-helloworld/NwMiniUlpEntity.h index f446dad27f..e92a6ba6bc 100644 --- a/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-helloworld/NwMiniUlpEntity.h +++ b/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-helloworld/NwMiniUlpEntity.h @@ -20,8 +20,8 @@ #define __NW_MINI_ULP_H__ typedef struct { - NwU8T peerIpStr[16]; - NwU32T restartCounter; + uint8_t peerIpStr[16]; + uint32_t restartCounter; NwGtpv2cStackHandleT hGtpv2cStack; } NwGtpv2cNodeUlpT; diff --git a/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-helloworld/helloworld.c b/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-helloworld/helloworld.c index 2335fcd08b..2b78e104e2 100644 --- a/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-helloworld/helloworld.c +++ b/openair-cn/GTPV2-C/nwgtpv2c-0.11/test-app/nw-helloworld/helloworld.c @@ -40,8 +40,8 @@ NwCharT* gLogLevelStr[] = {"EMER", "ALER", "CRIT", "ERRO", "WARN", "NOTI", "INF int main(int argc, char* argv[]) { NwRcT rc; - NwU32T logLevel; - NwU8T* logLevelStr; + uint32_t logLevel; + uint8_t* logLevelStr; NwGtpv2cStackHandleT hGtpv2cStack = 0; diff --git a/openair-cn/MME_APP/mme_app_authentication.c b/openair-cn/MME_APP/mme_app_authentication.c index 514db141f1..d10e7d645b 100644 --- a/openair-cn/MME_APP/mme_app_authentication.c +++ b/openair-cn/MME_APP/mme_app_authentication.c @@ -170,8 +170,8 @@ int mme_app_handle_authentication_info_answer( const s6a_auth_info_ans_t * const s6a_auth_info_ans_pP) { - struct ue_context_s *ue_context; - uint64_t imsi; + struct ue_context_s *ue_context = NULL; + uint64_t imsi = 0; DevAssert(s6a_auth_info_ans_pP != NULL); diff --git a/openair-cn/MME_APP/mme_app_bearer.c b/openair-cn/MME_APP/mme_app_bearer.c index e28f40b009..fd909b198e 100644 --- a/openair-cn/MME_APP/mme_app_bearer.c +++ b/openair-cn/MME_APP/mme_app_bearer.c @@ -43,6 +43,7 @@ #include "mme_app_extern.h" #include "mme_app_ue_context.h" #include "mme_app_defs.h" +#include "sgw_lite_ie_defs.h" #include "secu_defs.h" @@ -246,6 +247,13 @@ mme_app_send_s11_create_session_req( } } + if ((ue_context_pP->pending_pdn_connectivity_req_pco.length >= PCO_MIN_LENGTH) && (ue_context_pP->pending_pdn_connectivity_req_pco.length <= PCO_MAX_LENGTH)) { + memcpy(&session_request_p->pco.byte[0], + &ue_context_pP->pending_pdn_connectivity_req_pco.byte[0], + ue_context_pP->pending_pdn_connectivity_req_pco.length); + session_request_p->pco.length = ue_context_pP->pending_pdn_connectivity_req_pco.length; + } + config_read_lock(&mme_config); session_request_p->peer_ip = mme_config.ipv4.sgw_ip_address_for_S11; config_unlock(&mme_config); @@ -321,6 +329,11 @@ mme_app_handle_nas_pdn_connectivity_req( ue_context_p->pending_pdn_connectivity_req_pti = nas_pdn_connectivity_req_pP->pti; ue_context_p->pending_pdn_connectivity_req_ue_id = nas_pdn_connectivity_req_pP->ue_id; + memcpy(&ue_context_p->pending_pdn_connectivity_req_pco.byte[0], + &nas_pdn_connectivity_req_pP->pco.byte[0], + nas_pdn_connectivity_req_pP->pco.length); + ue_context_p->pending_pdn_connectivity_req_pco.length = nas_pdn_connectivity_req_pP->pco.length; + memcpy(&ue_context_p->pending_pdn_connectivity_req_qos, &nas_pdn_connectivity_req_pP->qos, sizeof(network_qos_t)); @@ -759,6 +772,11 @@ mme_app_handle_create_sess_resp( NAS_PDN_CONNECTIVITY_RSP(message_p).ambr.br_dl = ue_context_p->subscribed_ambr.br_dl; + memcpy(&NAS_PDN_CONNECTIVITY_RSP(message_p).pco.byte[0], + &create_sess_resp_pP->pco.byte[0], + create_sess_resp_pP->pco.length); + NAS_PDN_CONNECTIVITY_RSP(message_p).pco.length = create_sess_resp_pP->pco.length; + MSC_LOG_TX_MESSAGE( MSC_MMEAPP_MME, MSC_NAS_MME, diff --git a/openair-cn/MME_APP/mme_app_context.c b/openair-cn/MME_APP/mme_app_context.c index 43c6628fb4..f7ca54f8da 100644 --- a/openair-cn/MME_APP/mme_app_context.c +++ b/openair-cn/MME_APP/mme_app_context.c @@ -275,6 +275,29 @@ int mme_insert_ue_context(mme_ue_context_t *mme_ue_context, struct ue_context_s return 0; } + + +//------------------------------------------------------------------------------ +void mme_remove_ue_context(mme_ue_context_t *mme_ue_context, struct ue_context_s *ue_context_p) +//------------------------------------------------------------------------------ +{ + struct ue_context_s *collision_p = NULL; + + DevAssert(mme_ue_context != NULL); + DevAssert(ue_context_p != NULL); + + /* Updating statistics */ + mme_ue_context->nb_ue_managed++; + mme_ue_context->nb_ue_since_last_stat++; + + collision_p = RB_REMOVE(ue_context_map, &mme_ue_context->ue_context_tree, + ue_context_p); +#warning "TODO mme_ue_context_free_content" + //TODO mme_ue_context_free_content(ue_context_p); + free(ue_context_p); + return 0; +} + //------------------------------------------------------------------------------ void mme_app_dump_ue_contexts(mme_ue_context_t *mme_ue_context) //------------------------------------------------------------------------------ @@ -451,13 +474,12 @@ void mme_app_dump_ue_contexts(mme_ue_context_t *mme_ue_context) void mme_app_handle_s1ap_ue_context_release_req(const s1ap_ue_context_release_req_t const *s1ap_ue_context_release_req) //------------------------------------------------------------------------------ { - struct ue_context_s *ue_context_p = NULL; + struct ue_context_s *ue_context_p = NULL; + MessageDef *message_p = NULL; MME_APP_DEBUG("Received S1AP_UE_CONTEXT_RELEASE_REQ from S1AP\n"); - ue_context_p = mme_ue_context_exists_nas_ue_id(&mme_app_desc.mme_ue_contexts, s1ap_ue_context_release_req->mme_ue_s1ap_id); - if (ue_context_p == NULL) { MSC_LOG_EVENT( MSC_MMEAPP_MME, @@ -467,7 +489,29 @@ void mme_app_handle_s1ap_ue_context_release_req(const s1ap_ue_context_release_re s1ap_ue_context_release_req->mme_ue_s1ap_id); return; } - mme_app_send_s11_release_access_bearers_req(ue_context_p); + if ((ue_context_p->mme_s11_teid == 0) && + (ue_context_p->sgw_s11_teid == 0)) { + // no session was created, no need for releasing bearers in SGW + message_p = itti_alloc_new_message(TASK_MME_APP, S1AP_UE_CONTEXT_RELEASE_COMMAND); + + AssertFatal(message_p != NULL, "itti_alloc_new_message Failed"); + memset((void*)&message_p->ittiMsg.s1ap_ue_context_release_command, + 0, + sizeof(s1ap_ue_context_release_command_t)); + + S1AP_UE_CONTEXT_RELEASE_COMMAND(message_p).mme_ue_s1ap_id = ue_context_p->mme_ue_s1ap_id; + MSC_LOG_TX_MESSAGE( + MSC_MMEAPP_MME, + MSC_S1AP_MME, + NULL,0, + "0 S1AP_UE_CONTEXT_RELEASE_COMMAND mme_ue_s1ap_id %06"PRIX32" ", + S1AP_UE_CONTEXT_RELEASE_COMMAND(message_p).mme_ue_s1ap_id); + + + itti_send_msg_to_task(TASK_S1AP, INSTANCE_DEFAULT, message_p); + } else { + mme_app_send_s11_release_access_bearers_req(ue_context_p); + } } @@ -506,4 +550,6 @@ void mme_app_handle_s1ap_ue_context_release_complete(const s1ap_ue_context_relea "0 S1AP_DEREGISTER_UE_REQ"); itti_send_msg_to_task(TASK_NAS_MME, INSTANCE_DEFAULT, message_p); + + mme_remove_ue_context(&mme_app_desc.mme_ue_contexts, ue_context_p); } diff --git a/openair-cn/MME_APP/mme_app_main.c b/openair-cn/MME_APP/mme_app_main.c index 22ebe29658..ddd00e1faf 100644 --- a/openair-cn/MME_APP/mme_app_main.c +++ b/openair-cn/MME_APP/mme_app_main.c @@ -51,6 +51,7 @@ void *mme_app_thread(void *args); void *mme_app_thread(void *args) { itti_mark_task_ready(TASK_MME_APP); + MSC_START_USE(); while(1) { MessageDef *received_message_p = NULL; diff --git a/openair-cn/MME_APP/mme_app_ue_context.h b/openair-cn/MME_APP/mme_app_ue_context.h index 6ac65697ba..d87f0fa4c0 100644 --- a/openair-cn/MME_APP/mme_app_ue_context.h +++ b/openair-cn/MME_APP/mme_app_ue_context.h @@ -177,6 +177,7 @@ typedef struct ue_context_s { int pending_pdn_connectivity_req_pti; unsigned pending_pdn_connectivity_req_ue_id; network_qos_t pending_pdn_connectivity_req_qos; + pco_flat_t pending_pdn_connectivity_req_pco; void *pending_pdn_connectivity_req_proc_data; int pending_pdn_connectivity_req_request_type; @@ -240,6 +241,13 @@ ue_context_t *mme_ue_context_exists_guti(mme_ue_context_t *mme_ue_context, int mme_insert_ue_context(mme_ue_context_t *mme_ue_context, struct ue_context_s *ue_context_p); +/** \brief Remove a UE context of the tree of known UEs. + * \param ue_context_p The UE context to remove + **/ +void mme_remove_ue_context(mme_ue_context_t *mme_ue_context, + struct ue_context_s *ue_context_p); + + /** \brief Allocate memory for a new UE context * @returns Pointer to the new structure, NULL if allocation failed **/ diff --git a/openair-cn/NAS/EURECOM-NAS/COPYING b/openair-cn/NAS/COMMON/API/NETWORK/COPYING similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/COPYING rename to openair-cn/NAS/COMMON/API/NETWORK/COPYING diff --git a/openair-cn/NAS/EURECOM-NAS/src/api/network/Makefile b/openair-cn/NAS/COMMON/API/NETWORK/Makefile similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/api/network/Makefile rename to openair-cn/NAS/COMMON/API/NETWORK/Makefile diff --git a/openair-cn/NAS/EURECOM-NAS/src/api/network/as_message.c b/openair-cn/NAS/COMMON/API/NETWORK/as_message.c similarity index 99% rename from openair-cn/NAS/EURECOM-NAS/src/api/network/as_message.c rename to openair-cn/NAS/COMMON/API/NETWORK/as_message.c index b0f07f937d..5b29016f3a 100644 --- a/openair-cn/NAS/EURECOM-NAS/src/api/network/as_message.c +++ b/openair-cn/NAS/COMMON/API/NETWORK/as_message.c @@ -91,8 +91,8 @@ int as_message_decode(const char* buffer, as_message_t* msg, int length) Byte_t** data = NULL; /* Get the message type */ - msg->msgID = *(UInt16_t*)(buffer); - bytes = sizeof(UInt16_t); + msg->msgID = *(uint16_t*)(buffer); + bytes = sizeof(uint16_t); switch (msg->msgID) { case AS_NAS_ESTABLISH_REQ: diff --git a/openair-cn/NAS/COMMON/API/NETWORK/as_message.h b/openair-cn/NAS/COMMON/API/NETWORK/as_message.h new file mode 120000 index 0000000000..ef8d3686fd --- /dev/null +++ b/openair-cn/NAS/COMMON/API/NETWORK/as_message.h @@ -0,0 +1 @@ +../../../../../openair2/COMMON/as_message.h \ No newline at end of file diff --git a/openair-cn/NAS/EURECOM-NAS/src/api/network/l2_message.h b/openair-cn/NAS/COMMON/API/NETWORK/l2_message.h similarity index 97% rename from openair-cn/NAS/EURECOM-NAS/src/api/network/l2_message.h rename to openair-cn/NAS/COMMON/API/NETWORK/l2_message.h index ced2b54bc3..d24d78b503 100644 --- a/openair-cn/NAS/EURECOM-NAS/src/api/network/l2_message.h +++ b/openair-cn/NAS/COMMON/API/NETWORK/l2_message.h @@ -204,13 +204,13 @@ typedef struct {} paging_ind_t; /* Structure of the SAE Temporary Mobile Subscriber Identity */ typedef struct { - UInt8_t MMEcode; /* MME code that allocated the GUTI */ - UInt32_t m_tmsi; /* M-Temporary Mobile Subscriber Identity */ + uint8_t MMEcode; /* MME code that allocated the GUTI */ + uint32_t m_tmsi; /* M-Temporary Mobile Subscriber Identity */ } as_stmsi_t; /* Structure of the dedicated NAS information */ typedef struct { - UInt32_t length; /* Length of the NAS information data */ + uint32_t length; /* Length of the NAS information data */ Byte_t* data; /* Dedicated NAS information data container */ } as_nas_info_t; @@ -220,8 +220,8 @@ typedef struct { * to transfer initial NAS message to the network while UE is in IDLE mode. */ typedef struct { - UInt8_t cause; /* Connection establishment cause */ - UInt8_t type; /* Associated call type */ + uint8_t cause; /* Connection establishment cause */ + uint8_t type; /* Associated call type */ plmn_t plmnID; /* Identifier of the selected PLMN */ as_stmsi_t s_tmsi; /* SAE Temporary Mobile Subscriber Identity */ as_nas_info_t initialNasMsg;/* Initial NAS message to transfer */ @@ -274,7 +274,7 @@ typedef as_nas_info_t ul_info_transfer_t; * -------------------------------------------------------------------------- */ typedef struct { - UInt16_t msgID; + uint16_t msgID; union { cell_info_req_t cell_info_req; cell_info_rsp_t cell_info_rsp; diff --git a/openair-cn/NAS/EURECOM-NAS/src/api/network/nas_message.c b/openair-cn/NAS/COMMON/API/NETWORK/nas_message.c similarity index 97% rename from openair-cn/NAS/EURECOM-NAS/src/api/network/nas_message.c rename to openair-cn/NAS/COMMON/API/NETWORK/nas_message.c index 9896ebfde0..611ad6fc3a 100644 --- a/openair-cn/NAS/EURECOM-NAS/src/api/network/nas_message.c +++ b/openair-cn/NAS/COMMON/API/NETWORK/nas_message.c @@ -97,9 +97,9 @@ static int _nas_message_protected_encode( static int _nas_message_decrypt( char* dest, const char* src, - UInt8_t type, - UInt32_t code, - UInt8_t seq, + uint8_t type, + uint32_t code, + uint8_t seq, int length, const emm_security_context_t * const emm_security_context); @@ -108,15 +108,15 @@ static int _nas_message_encrypt( char *dest, const char *src, - UInt8_t type, - UInt32_t code, - UInt8_t seq, + uint8_t type, + uint32_t code, + uint8_t seq, int const direction, int length, const emm_security_context_t * const emm_security_context); /* Functions used for integrity protection of layer 3 NAS messages */ -static UInt32_t _nas_message_get_mac( +static uint32_t _nas_message_get_mac( const char * const buffer, int const length, int const direction, @@ -180,9 +180,9 @@ nas_message_encrypt( /* Integrity protected the NAS message */ if (bytes > 0) { /* Compute offset of the sequence number field */ - int offset = size - sizeof(UInt8_t); + int offset = size - sizeof(uint8_t); /* Compute the NAS message authentication code */ - UInt32_t mac = _nas_message_get_mac( + uint32_t mac = _nas_message_get_mac( outbuf + offset, bytes + size - offset, #ifdef NAS_MME @@ -192,7 +192,7 @@ nas_message_encrypt( #endif emm_security_context); /* Set the message authentication code of the NAS message */ - *(UInt32_t*)(outbuf + sizeof(UInt8_t)) = htonl(mac); + *(uint32_t*)(outbuf + sizeof(uint8_t)) = htonl(mac); } } else { /* The input buffer does not need to be encrypted */ @@ -301,9 +301,9 @@ int nas_message_decrypt( } /* Compute offset of the sequence number field */ - int offset = size - sizeof(UInt8_t); + int offset = size - sizeof(uint8_t); /* Compute the NAS message authentication code */ - UInt32_t mac = _nas_message_get_mac( + uint32_t mac = _nas_message_get_mac( inbuf + offset, length - offset, #ifdef NAS_MME @@ -410,9 +410,9 @@ int nas_message_decode( } /* Compute offset of the sequence number field */ - int offset = size - sizeof(UInt8_t); + int offset = size - sizeof(uint8_t); /* Compute the NAS message authentication code */ - UInt32_t mac = _nas_message_get_mac( + uint32_t mac = _nas_message_get_mac( buffer + offset, length - offset, #ifdef NAS_MME @@ -524,13 +524,13 @@ int nas_message_encode( /* Integrity protect the NAS message */ if (bytes > 0) { /* Compute offset of the sequence number field */ - int offset = size - sizeof(UInt8_t); + int offset = size - sizeof(uint8_t); /* Compute the NAS message authentication code */ LOG_TRACE(DEBUG, "offset %d = %d - %d, hdr encode = %d, length = %d bytes = %d", - offset, size, sizeof(UInt8_t), + offset, size, sizeof(uint8_t), size, length, bytes); - UInt32_t mac = _nas_message_get_mac( + uint32_t mac = _nas_message_get_mac( buffer + offset, bytes + size - offset, #ifdef NAS_MME @@ -540,7 +540,7 @@ int nas_message_encode( #endif emm_security_context); /* Set the message authentication code of the NAS message */ - *(UInt32_t*)(buffer + sizeof(UInt8_t)) = htonl(mac); + *(uint32_t*)(buffer + sizeof(uint8_t)) = htonl(mac); if (emm_security_context) { #ifdef NAS_MME @@ -644,7 +644,7 @@ _nas_message_header_decode( /* Decode the first octet of the header (security header type or EPS bearer * identity, and protocol discriminator) */ - DECODE_U8(buffer, *(UInt8_t*)(header), size); + DECODE_U8(buffer, *(uint8_t*)(header), size); if (header->protocol_discriminator == EPS_MOBILITY_MANAGEMENT_MESSAGE) { if (header->security_header_type != SECURITY_HEADER_TYPE_NOT_PROTECTED) { @@ -798,7 +798,7 @@ static int _nas_message_header_encode( /* Encode the first octet of the header (security header type or EPS bearer * identity, and protocol discriminator) */ - ENCODE_U8(buffer, *(UInt8_t*)(header), size); + ENCODE_U8(buffer, *(uint8_t*)(header), size); if (header->protocol_discriminator == EPS_MOBILITY_MANAGEMENT_MESSAGE) { if (header->security_header_type != SECURITY_HEADER_TYPE_NOT_PROTECTED) { @@ -956,9 +956,9 @@ static int _nas_message_protected_encode( static int _nas_message_decrypt( char *dest, const char *src, - UInt8_t security_header_type, - UInt32_t code, - UInt8_t seq, + uint8_t security_header_type, + uint32_t code, + uint8_t seq, int length, const emm_security_context_t * const emm_security_context) { @@ -986,7 +986,7 @@ static int _nas_message_decrypt( "No decryption of message length %u according to security header type 0x%02x", length, security_header_type); memcpy(dest, src, length); - DECODE_U8(dest, *(UInt8_t*)(&header), size); + DECODE_U8(dest, *(uint8_t*)(&header), size); LOG_FUNC_RETURN (header.protocol_discriminator); //LOG_FUNC_RETURN (length); break; @@ -1022,7 +1022,7 @@ static int _nas_message_decrypt( nas_stream_encrypt_eea1(&stream_cipher, dest); /* Decode the first octet (security header type or EPS bearer identity, * and protocol discriminator) */ - DECODE_U8(dest, *(UInt8_t*)(&header), size); + DECODE_U8(dest, *(uint8_t*)(&header), size); LOG_FUNC_RETURN (header.protocol_discriminator); @@ -1056,7 +1056,7 @@ static int _nas_message_decrypt( nas_stream_encrypt_eea1(&stream_cipher, dest); /* Decode the first octet (security header type or EPS bearer identity, * and protocol discriminator) */ - DECODE_U8(dest, *(UInt8_t*)(&header), size); + DECODE_U8(dest, *(uint8_t*)(&header), size); LOG_FUNC_RETURN (header.protocol_discriminator); } @@ -1071,7 +1071,7 @@ static int _nas_message_decrypt( memcpy(dest, src, length); /* Decode the first octet (security header type or EPS bearer identity, * and protocol discriminator) */ - DECODE_U8(dest, *(UInt8_t*)(&header), size); + DECODE_U8(dest, *(uint8_t*)(&header), size); LOG_FUNC_RETURN (header.protocol_discriminator); @@ -1084,7 +1084,7 @@ static int _nas_message_decrypt( memcpy(dest, src, length); /* Decode the first octet (security header type or EPS bearer identity, * and protocol discriminator) */ - DECODE_U8(dest, *(UInt8_t*)(&header), size); + DECODE_U8(dest, *(uint8_t*)(&header), size); LOG_FUNC_RETURN (header.protocol_discriminator); break; @@ -1124,9 +1124,9 @@ static int _nas_message_decrypt( static int _nas_message_encrypt( char *dest, const char *src, - UInt8_t security_header_type, - UInt32_t code, - UInt8_t seq, + uint8_t security_header_type, + uint32_t code, + uint8_t seq, int const direction, int length, const emm_security_context_t * const emm_security_context) @@ -1274,7 +1274,7 @@ static int _nas_message_encrypt( ** Others: None ** ** ** ***************************************************************************/ -static UInt32_t _nas_message_get_mac( +static uint32_t _nas_message_get_mac( const char * const buffer, int const length, int const direction, @@ -1296,10 +1296,10 @@ static UInt32_t _nas_message_get_mac( switch (emm_security_context->selected_algorithms.integrity) { case NAS_SECURITY_ALGORITHMS_EIA1: { - UInt8_t mac[4]; + uint8_t mac[4]; nas_stream_cipher_t stream_cipher; - UInt32_t count; - UInt32_t *mac32; + uint32_t count; + uint32_t *mac32; int i,bytes = 0; @@ -1354,20 +1354,20 @@ static UInt32_t _nas_message_get_mac( LOG_TRACE(DEBUG, "NAS_SECURITY_ALGORITHMS_EIA1 returned MAC %x.%x.%x.%x(%u) for length %d direction %d, count %d", mac[0], mac[1], mac[2],mac[3], - *((UInt32_t*)&mac), + *((uint32_t*)&mac), length, direction, count); - mac32 = (UInt32_t*)&mac; + mac32 = (uint32_t*)&mac; LOG_FUNC_RETURN (ntohl(*mac32)); } break; case NAS_SECURITY_ALGORITHMS_EIA2: { - UInt8_t mac[4]; + uint8_t mac[4]; nas_stream_cipher_t stream_cipher; - UInt32_t count; - UInt32_t *mac32; + uint32_t count; + uint32_t *mac32; if (direction == SECU_DIRECTION_UPLINK) { count = 0x00000000 || @@ -1400,11 +1400,11 @@ static UInt32_t _nas_message_get_mac( LOG_TRACE(DEBUG, "NAS_SECURITY_ALGORITHMS_EIA2 returned MAC %x.%x.%x.%x(%u) for length %d direction %d, count %d", mac[0], mac[1], mac[2],mac[3], - *((UInt32_t*)&mac), + *((uint32_t*)&mac), length, direction, count); - mac32 = (UInt32_t*)&mac; + mac32 = (uint32_t*)&mac; LOG_FUNC_RETURN (ntohl(*mac32)); } break; diff --git a/openair-cn/NAS/EURECOM-NAS/src/api/network/nas_message.h b/openair-cn/NAS/COMMON/API/NETWORK/nas_message.h similarity index 95% rename from openair-cn/NAS/EURECOM-NAS/src/api/network/nas_message.h rename to openair-cn/NAS/COMMON/API/NETWORK/nas_message.h index d7d09f1145..f4187b7396 100644 --- a/openair-cn/NAS/EURECOM-NAS/src/api/network/nas_message.h +++ b/openair-cn/NAS/COMMON/API/NETWORK/nas_message.h @@ -68,14 +68,14 @@ Description Defines the layer 3 messages supported by the NAS sublayer typedef struct { #ifdef __LITTLE_ENDIAN_BITFIELD eps_protocol_discriminator_t protocol_discriminator:4; - UInt8_t security_header_type:4; + uint8_t security_header_type:4; #endif #ifdef __BIG_ENDIAN_BITFIELD - UInt8_t security_header_type:4; - UInt8_t protocol_discriminator:4; + uint8_t security_header_type:4; + uint8_t protocol_discriminator:4; #endif - UInt32_t message_authentication_code; - UInt8_t sequence_number; + uint32_t message_authentication_code; + uint8_t sequence_number; } nas_message_security_header_t; /* Structure of plain NAS message */ diff --git a/openair-cn/NAS/EURECOM-NAS/src/api/network/network_api.c b/openair-cn/NAS/COMMON/API/NETWORK/network_api.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/api/network/network_api.c rename to openair-cn/NAS/COMMON/API/NETWORK/network_api.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/api/network/network_api.h b/openair-cn/NAS/COMMON/API/NETWORK/network_api.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/api/network/network_api.h rename to openair-cn/NAS/COMMON/API/NETWORK/network_api.h diff --git a/openair-cn/NAS/EURECOM-NAS/bin/COPYING b/openair-cn/NAS/COMMON/COPYING similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/bin/COPYING rename to openair-cn/NAS/COMMON/COPYING diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/msg/AttachAccept.c b/openair-cn/NAS/COMMON/EMM/MSG/AttachAccept.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/emm/msg/AttachAccept.c rename to openair-cn/NAS/COMMON/EMM/MSG/AttachAccept.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/msg/AttachAccept.h b/openair-cn/NAS/COMMON/EMM/MSG/AttachAccept.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/emm/msg/AttachAccept.h rename to openair-cn/NAS/COMMON/EMM/MSG/AttachAccept.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/msg/AttachComplete.c b/openair-cn/NAS/COMMON/EMM/MSG/AttachComplete.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/emm/msg/AttachComplete.c rename to openair-cn/NAS/COMMON/EMM/MSG/AttachComplete.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/msg/AttachComplete.h b/openair-cn/NAS/COMMON/EMM/MSG/AttachComplete.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/emm/msg/AttachComplete.h rename to openair-cn/NAS/COMMON/EMM/MSG/AttachComplete.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/msg/AttachReject.c b/openair-cn/NAS/COMMON/EMM/MSG/AttachReject.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/emm/msg/AttachReject.c rename to openair-cn/NAS/COMMON/EMM/MSG/AttachReject.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/msg/AttachReject.h b/openair-cn/NAS/COMMON/EMM/MSG/AttachReject.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/emm/msg/AttachReject.h rename to openair-cn/NAS/COMMON/EMM/MSG/AttachReject.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/msg/AttachRequest.c b/openair-cn/NAS/COMMON/EMM/MSG/AttachRequest.c similarity index 93% rename from openair-cn/NAS/EURECOM-NAS/src/emm/msg/AttachRequest.c rename to openair-cn/NAS/COMMON/EMM/MSG/AttachRequest.c index 15a29b1f29..f301b44a86 100644 --- a/openair-cn/NAS/EURECOM-NAS/src/emm/msg/AttachRequest.c +++ b/openair-cn/NAS/COMMON/EMM/MSG/AttachRequest.c @@ -217,8 +217,9 @@ int decode_attach_request(attach_request_msg *attach_request, uint8_t *buffer, u case ATTACH_REQUEST_SUPPORTED_CODECS_IEI: if ((decoded_result = decode_supported_codec_list(&attach_request->supportedcodecs, - ATTACH_REQUEST_SUPPORTED_CODECS_IEI, buffer + decoded, len - - decoded)) <= 0) { + ATTACH_REQUEST_SUPPORTED_CODECS_IEI, + buffer + decoded, + len - decoded)) <= 0) { // return decoded_result; LOG_FUNC_RETURN(decoded_result); } @@ -270,12 +271,26 @@ int decode_attach_request(attach_request_msg *attach_request, uint8_t *buffer, u attach_request->presencemask |= ATTACH_REQUEST_VOICE_DOMAIN_PREFERENCE_AND_UE_USAGE_SETTING_PRESENT; break; - + case ATTACH_REQUEST_MS_NETWORK_FEATURE_SUPPORT_IEI: + if ((decoded_result = + decode_ms_network_feature_support(&attach_request->msnetworkfeaturesupport, + ATTACH_REQUEST_MS_NETWORK_FEATURE_SUPPORT_IEI, + buffer + decoded, len - decoded)) <= 0) { + // return decoded_result; + LOG_FUNC_RETURN(decoded_result); + } + + decoded += decoded_result; + /* Set corresponding mask to 1 in presencemask */ + attach_request->presencemask |= ATTACH_REQUEST_MS_NETWORK_FEATURE_SUPPORT_PRESENT; + break; default: + errorCodeDecoder = TLV_DECODE_UNEXPECTED_IEI; { // return TLV_DECODE_UNEXPECTED_IEI; - LOG_FUNC_RETURN(TLV_DECODE_UNEXPECTED_IEI); + LOG_TRACE(INFO,"EMM: Can't decode the message with iei %d\n",ieiDecoded); + LOG_FUNC_RETURN(TLV_DECODE_UNEXPECTED_IEI); } } } @@ -469,6 +484,19 @@ int encode_attach_request(attach_request_msg *attach_request, uint8_t *buffer, u encoded += encode_result; } + if ((attach_request->presencemask & ATTACH_REQUEST_MS_NETWORK_FEATURE_SUPPORT_PRESENT) + == ATTACH_REQUEST_MS_NETWORK_FEATURE_SUPPORT_PRESENT) { + if ((encode_result = + encode_ms_network_feature_support(&attach_request->msnetworkfeaturesupport, + ATTACH_REQUEST_MS_NETWORK_FEATURE_SUPPORT_IEI, + buffer + encoded, + len - encoded)) < 0) + // Return in case of error + return encode_result; + else + encoded += encode_result; + } + return encoded; } diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/msg/AttachRequest.h b/openair-cn/NAS/COMMON/EMM/MSG/AttachRequest.h similarity index 95% rename from openair-cn/NAS/EURECOM-NAS/src/emm/msg/AttachRequest.h rename to openair-cn/NAS/COMMON/EMM/MSG/AttachRequest.h index 5368df7fc7..f19c53f1ad 100644 --- a/openair-cn/NAS/EURECOM-NAS/src/emm/msg/AttachRequest.h +++ b/openair-cn/NAS/COMMON/EMM/MSG/AttachRequest.h @@ -42,6 +42,7 @@ #include "TrackingAreaIdentity.h" #include "DrxParameter.h" #include "MsNetworkCapability.h" +#include "MsNetworkFeatureSupport.h" #include "LocationAreaIdentification.h" #include "TmsiStatus.h" #include "MobileStationClassmark2.h" @@ -74,6 +75,7 @@ TRACKING_AREA_IDENTITY_MAXIMUM_LENGTH + \ DRX_PARAMETER_MAXIMUM_LENGTH + \ MS_NETWORK_CAPABILITY_MAXIMUM_LENGTH + \ + MS_NETWORK_FEATURE_SUPPORT_MAXIMUM_LENGTH + \ LOCATION_AREA_IDENTIFICATION_MAXIMUM_LENGTH + \ TMSI_STATUS_MAXIMUM_LENGTH + \ MOBILE_STATION_CLASSMARK_2_MAXIMUM_LENGTH + \ @@ -98,12 +100,14 @@ # define ATTACH_REQUEST_ADDITIONAL_UPDATE_TYPE_PRESENT (1<<10) # define ATTACH_REQUEST_OLD_GUTI_TYPE_PRESENT (1<<11) # define ATTACH_REQUEST_VOICE_DOMAIN_PREFERENCE_AND_UE_USAGE_SETTING_PRESENT (1<<12) +# define ATTACH_REQUEST_MS_NETWORK_FEATURE_SUPPORT_PRESENT (1<<13) typedef enum attach_request_iei_tag { ATTACH_REQUEST_OLD_PTMSI_SIGNATURE_IEI = 0x19, /* 0x19 = 25 */ ATTACH_REQUEST_ADDITIONAL_GUTI_IEI = 0x50, /* 0x50 = 80 */ ATTACH_REQUEST_LAST_VISITED_REGISTERED_TAI_IEI = 0x52, /* 0x52 = 82 */ ATTACH_REQUEST_DRX_PARAMETER_IEI = 0x5C, /* 0x5C = 92 */ + ATTACH_REQUEST_MS_NETWORK_FEATURE_SUPPORT_IEI = 0xC0, /* 0xC- = 192- */ ATTACH_REQUEST_MS_NETWORK_CAPABILITY_IEI = 0x31, /* 0x31 = 49 */ ATTACH_REQUEST_OLD_LOCATION_AREA_IDENTIFICATION_IEI = 0x13, /* 0x13 = 19 */ ATTACH_REQUEST_TMSI_STATUS_IEI = 0x90, /* 0x90 = 144 */ @@ -147,6 +151,7 @@ typedef struct attach_request_msg_tag { AdditionalUpdateType additionalupdatetype; GutiType oldgutitype; VoiceDomainPreferenceAndUeUsageSetting voicedomainpreferenceandueusagesetting; + MsNetworkFeatureSupport msnetworkfeaturesupport; } attach_request_msg; int decode_attach_request(attach_request_msg *attachrequest, uint8_t *buffer, uint32_t len); diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/msg/AuthenticationFailure.c b/openair-cn/NAS/COMMON/EMM/MSG/AuthenticationFailure.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/emm/msg/AuthenticationFailure.c rename to openair-cn/NAS/COMMON/EMM/MSG/AuthenticationFailure.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/msg/AuthenticationFailure.h b/openair-cn/NAS/COMMON/EMM/MSG/AuthenticationFailure.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/emm/msg/AuthenticationFailure.h rename to openair-cn/NAS/COMMON/EMM/MSG/AuthenticationFailure.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/msg/AuthenticationReject.c b/openair-cn/NAS/COMMON/EMM/MSG/AuthenticationReject.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/emm/msg/AuthenticationReject.c rename to openair-cn/NAS/COMMON/EMM/MSG/AuthenticationReject.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/msg/AuthenticationReject.h b/openair-cn/NAS/COMMON/EMM/MSG/AuthenticationReject.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/emm/msg/AuthenticationReject.h rename to openair-cn/NAS/COMMON/EMM/MSG/AuthenticationReject.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/msg/AuthenticationRequest.c b/openair-cn/NAS/COMMON/EMM/MSG/AuthenticationRequest.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/emm/msg/AuthenticationRequest.c rename to openair-cn/NAS/COMMON/EMM/MSG/AuthenticationRequest.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/msg/AuthenticationRequest.h b/openair-cn/NAS/COMMON/EMM/MSG/AuthenticationRequest.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/emm/msg/AuthenticationRequest.h rename to openair-cn/NAS/COMMON/EMM/MSG/AuthenticationRequest.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/msg/AuthenticationResponse.c b/openair-cn/NAS/COMMON/EMM/MSG/AuthenticationResponse.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/emm/msg/AuthenticationResponse.c rename to openair-cn/NAS/COMMON/EMM/MSG/AuthenticationResponse.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/msg/AuthenticationResponse.h b/openair-cn/NAS/COMMON/EMM/MSG/AuthenticationResponse.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/emm/msg/AuthenticationResponse.h rename to openair-cn/NAS/COMMON/EMM/MSG/AuthenticationResponse.h diff --git a/openair-cn/NAS/EURECOM-NAS/lib/COPYING b/openair-cn/NAS/COMMON/EMM/MSG/COPYING similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/lib/COPYING rename to openair-cn/NAS/COMMON/EMM/MSG/COPYING diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/msg/CsServiceNotification.c b/openair-cn/NAS/COMMON/EMM/MSG/CsServiceNotification.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/emm/msg/CsServiceNotification.c rename to openair-cn/NAS/COMMON/EMM/MSG/CsServiceNotification.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/msg/CsServiceNotification.h b/openair-cn/NAS/COMMON/EMM/MSG/CsServiceNotification.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/emm/msg/CsServiceNotification.h rename to openair-cn/NAS/COMMON/EMM/MSG/CsServiceNotification.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/msg/DetachAccept.c b/openair-cn/NAS/COMMON/EMM/MSG/DetachAccept.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/emm/msg/DetachAccept.c rename to openair-cn/NAS/COMMON/EMM/MSG/DetachAccept.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/msg/DetachAccept.h b/openair-cn/NAS/COMMON/EMM/MSG/DetachAccept.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/emm/msg/DetachAccept.h rename to openair-cn/NAS/COMMON/EMM/MSG/DetachAccept.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/msg/DetachRequest.c b/openair-cn/NAS/COMMON/EMM/MSG/DetachRequest.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/emm/msg/DetachRequest.c rename to openair-cn/NAS/COMMON/EMM/MSG/DetachRequest.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/msg/DetachRequest.h b/openair-cn/NAS/COMMON/EMM/MSG/DetachRequest.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/emm/msg/DetachRequest.h rename to openair-cn/NAS/COMMON/EMM/MSG/DetachRequest.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/msg/DownlinkNasTransport.c b/openair-cn/NAS/COMMON/EMM/MSG/DownlinkNasTransport.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/emm/msg/DownlinkNasTransport.c rename to openair-cn/NAS/COMMON/EMM/MSG/DownlinkNasTransport.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/msg/DownlinkNasTransport.h b/openair-cn/NAS/COMMON/EMM/MSG/DownlinkNasTransport.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/emm/msg/DownlinkNasTransport.h rename to openair-cn/NAS/COMMON/EMM/MSG/DownlinkNasTransport.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/msg/EmmInformation.c b/openair-cn/NAS/COMMON/EMM/MSG/EmmInformation.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/emm/msg/EmmInformation.c rename to openair-cn/NAS/COMMON/EMM/MSG/EmmInformation.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/msg/EmmInformation.h b/openair-cn/NAS/COMMON/EMM/MSG/EmmInformation.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/emm/msg/EmmInformation.h rename to openair-cn/NAS/COMMON/EMM/MSG/EmmInformation.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/msg/EmmStatus.c b/openair-cn/NAS/COMMON/EMM/MSG/EmmStatus.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/emm/msg/EmmStatus.c rename to openair-cn/NAS/COMMON/EMM/MSG/EmmStatus.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/msg/EmmStatus.h b/openair-cn/NAS/COMMON/EMM/MSG/EmmStatus.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/emm/msg/EmmStatus.h rename to openair-cn/NAS/COMMON/EMM/MSG/EmmStatus.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/msg/ExtendedServiceRequest.c b/openair-cn/NAS/COMMON/EMM/MSG/ExtendedServiceRequest.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/emm/msg/ExtendedServiceRequest.c rename to openair-cn/NAS/COMMON/EMM/MSG/ExtendedServiceRequest.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/msg/ExtendedServiceRequest.h b/openair-cn/NAS/COMMON/EMM/MSG/ExtendedServiceRequest.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/emm/msg/ExtendedServiceRequest.h rename to openair-cn/NAS/COMMON/EMM/MSG/ExtendedServiceRequest.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/msg/GutiReallocationCommand.c b/openair-cn/NAS/COMMON/EMM/MSG/GutiReallocationCommand.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/emm/msg/GutiReallocationCommand.c rename to openair-cn/NAS/COMMON/EMM/MSG/GutiReallocationCommand.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/msg/GutiReallocationCommand.h b/openair-cn/NAS/COMMON/EMM/MSG/GutiReallocationCommand.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/emm/msg/GutiReallocationCommand.h rename to openair-cn/NAS/COMMON/EMM/MSG/GutiReallocationCommand.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/msg/GutiReallocationComplete.c b/openair-cn/NAS/COMMON/EMM/MSG/GutiReallocationComplete.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/emm/msg/GutiReallocationComplete.c rename to openair-cn/NAS/COMMON/EMM/MSG/GutiReallocationComplete.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/msg/GutiReallocationComplete.h b/openair-cn/NAS/COMMON/EMM/MSG/GutiReallocationComplete.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/emm/msg/GutiReallocationComplete.h rename to openair-cn/NAS/COMMON/EMM/MSG/GutiReallocationComplete.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/msg/IdentityRequest.c b/openair-cn/NAS/COMMON/EMM/MSG/IdentityRequest.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/emm/msg/IdentityRequest.c rename to openair-cn/NAS/COMMON/EMM/MSG/IdentityRequest.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/msg/IdentityRequest.h b/openair-cn/NAS/COMMON/EMM/MSG/IdentityRequest.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/emm/msg/IdentityRequest.h rename to openair-cn/NAS/COMMON/EMM/MSG/IdentityRequest.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/msg/IdentityResponse.c b/openair-cn/NAS/COMMON/EMM/MSG/IdentityResponse.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/emm/msg/IdentityResponse.c rename to openair-cn/NAS/COMMON/EMM/MSG/IdentityResponse.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/msg/IdentityResponse.h b/openair-cn/NAS/COMMON/EMM/MSG/IdentityResponse.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/emm/msg/IdentityResponse.h rename to openair-cn/NAS/COMMON/EMM/MSG/IdentityResponse.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/msg/Makefile b/openair-cn/NAS/COMMON/EMM/MSG/Makefile similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/emm/msg/Makefile rename to openair-cn/NAS/COMMON/EMM/MSG/Makefile diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/msg/NASSecurityModeCommand.h b/openair-cn/NAS/COMMON/EMM/MSG/NASSecurityModeCommand.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/emm/msg/NASSecurityModeCommand.h rename to openair-cn/NAS/COMMON/EMM/MSG/NASSecurityModeCommand.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/msg/NASSecurityModeComplete.h b/openair-cn/NAS/COMMON/EMM/MSG/NASSecurityModeComplete.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/emm/msg/NASSecurityModeComplete.h rename to openair-cn/NAS/COMMON/EMM/MSG/NASSecurityModeComplete.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/msg/SecurityModeCommand.c b/openair-cn/NAS/COMMON/EMM/MSG/SecurityModeCommand.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/emm/msg/SecurityModeCommand.c rename to openair-cn/NAS/COMMON/EMM/MSG/SecurityModeCommand.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/msg/SecurityModeComplete.c b/openair-cn/NAS/COMMON/EMM/MSG/SecurityModeComplete.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/emm/msg/SecurityModeComplete.c rename to openair-cn/NAS/COMMON/EMM/MSG/SecurityModeComplete.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/msg/SecurityModeReject.c b/openair-cn/NAS/COMMON/EMM/MSG/SecurityModeReject.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/emm/msg/SecurityModeReject.c rename to openair-cn/NAS/COMMON/EMM/MSG/SecurityModeReject.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/msg/SecurityModeReject.h b/openair-cn/NAS/COMMON/EMM/MSG/SecurityModeReject.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/emm/msg/SecurityModeReject.h rename to openair-cn/NAS/COMMON/EMM/MSG/SecurityModeReject.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/msg/ServiceReject.c b/openair-cn/NAS/COMMON/EMM/MSG/ServiceReject.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/emm/msg/ServiceReject.c rename to openair-cn/NAS/COMMON/EMM/MSG/ServiceReject.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/msg/ServiceReject.h b/openair-cn/NAS/COMMON/EMM/MSG/ServiceReject.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/emm/msg/ServiceReject.h rename to openair-cn/NAS/COMMON/EMM/MSG/ServiceReject.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/msg/ServiceRequest.c b/openair-cn/NAS/COMMON/EMM/MSG/ServiceRequest.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/emm/msg/ServiceRequest.c rename to openair-cn/NAS/COMMON/EMM/MSG/ServiceRequest.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/msg/ServiceRequest.h b/openair-cn/NAS/COMMON/EMM/MSG/ServiceRequest.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/emm/msg/ServiceRequest.h rename to openair-cn/NAS/COMMON/EMM/MSG/ServiceRequest.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/msg/TrackingAreaUpdateAccept.c b/openair-cn/NAS/COMMON/EMM/MSG/TrackingAreaUpdateAccept.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/emm/msg/TrackingAreaUpdateAccept.c rename to openair-cn/NAS/COMMON/EMM/MSG/TrackingAreaUpdateAccept.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/msg/TrackingAreaUpdateAccept.h b/openair-cn/NAS/COMMON/EMM/MSG/TrackingAreaUpdateAccept.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/emm/msg/TrackingAreaUpdateAccept.h rename to openair-cn/NAS/COMMON/EMM/MSG/TrackingAreaUpdateAccept.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/msg/TrackingAreaUpdateComplete.c b/openair-cn/NAS/COMMON/EMM/MSG/TrackingAreaUpdateComplete.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/emm/msg/TrackingAreaUpdateComplete.c rename to openair-cn/NAS/COMMON/EMM/MSG/TrackingAreaUpdateComplete.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/msg/TrackingAreaUpdateComplete.h b/openair-cn/NAS/COMMON/EMM/MSG/TrackingAreaUpdateComplete.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/emm/msg/TrackingAreaUpdateComplete.h rename to openair-cn/NAS/COMMON/EMM/MSG/TrackingAreaUpdateComplete.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/msg/TrackingAreaUpdateReject.c b/openair-cn/NAS/COMMON/EMM/MSG/TrackingAreaUpdateReject.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/emm/msg/TrackingAreaUpdateReject.c rename to openair-cn/NAS/COMMON/EMM/MSG/TrackingAreaUpdateReject.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/msg/TrackingAreaUpdateReject.h b/openair-cn/NAS/COMMON/EMM/MSG/TrackingAreaUpdateReject.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/emm/msg/TrackingAreaUpdateReject.h rename to openair-cn/NAS/COMMON/EMM/MSG/TrackingAreaUpdateReject.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/msg/TrackingAreaUpdateRequest.c b/openair-cn/NAS/COMMON/EMM/MSG/TrackingAreaUpdateRequest.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/emm/msg/TrackingAreaUpdateRequest.c rename to openair-cn/NAS/COMMON/EMM/MSG/TrackingAreaUpdateRequest.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/msg/TrackingAreaUpdateRequest.h b/openair-cn/NAS/COMMON/EMM/MSG/TrackingAreaUpdateRequest.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/emm/msg/TrackingAreaUpdateRequest.h rename to openair-cn/NAS/COMMON/EMM/MSG/TrackingAreaUpdateRequest.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/msg/UplinkNasTransport.c b/openair-cn/NAS/COMMON/EMM/MSG/UplinkNasTransport.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/emm/msg/UplinkNasTransport.c rename to openair-cn/NAS/COMMON/EMM/MSG/UplinkNasTransport.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/msg/UplinkNasTransport.h b/openair-cn/NAS/COMMON/EMM/MSG/UplinkNasTransport.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/emm/msg/UplinkNasTransport.h rename to openair-cn/NAS/COMMON/EMM/MSG/UplinkNasTransport.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/msg/emm_cause.h b/openair-cn/NAS/COMMON/EMM/MSG/emm_cause.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/emm/msg/emm_cause.h rename to openair-cn/NAS/COMMON/EMM/MSG/emm_cause.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/msg/emm_msg.c b/openair-cn/NAS/COMMON/EMM/MSG/emm_msg.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/emm/msg/emm_msg.c rename to openair-cn/NAS/COMMON/EMM/MSG/emm_msg.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/msg/emm_msg.h b/openair-cn/NAS/COMMON/EMM/MSG/emm_msg.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/emm/msg/emm_msg.h rename to openair-cn/NAS/COMMON/EMM/MSG/emm_msg.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/msg/emm_msgDef.h b/openair-cn/NAS/COMMON/EMM/MSG/emm_msgDef.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/emm/msg/emm_msgDef.h rename to openair-cn/NAS/COMMON/EMM/MSG/emm_msgDef.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/esm/msg/ActivateDedicatedEpsBearerContextAccept.c b/openair-cn/NAS/COMMON/ESM/MSG/ActivateDedicatedEpsBearerContextAccept.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/esm/msg/ActivateDedicatedEpsBearerContextAccept.c rename to openair-cn/NAS/COMMON/ESM/MSG/ActivateDedicatedEpsBearerContextAccept.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/esm/msg/ActivateDedicatedEpsBearerContextAccept.h b/openair-cn/NAS/COMMON/ESM/MSG/ActivateDedicatedEpsBearerContextAccept.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/esm/msg/ActivateDedicatedEpsBearerContextAccept.h rename to openair-cn/NAS/COMMON/ESM/MSG/ActivateDedicatedEpsBearerContextAccept.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/esm/msg/ActivateDedicatedEpsBearerContextReject.c b/openair-cn/NAS/COMMON/ESM/MSG/ActivateDedicatedEpsBearerContextReject.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/esm/msg/ActivateDedicatedEpsBearerContextReject.c rename to openair-cn/NAS/COMMON/ESM/MSG/ActivateDedicatedEpsBearerContextReject.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/esm/msg/ActivateDedicatedEpsBearerContextReject.h b/openair-cn/NAS/COMMON/ESM/MSG/ActivateDedicatedEpsBearerContextReject.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/esm/msg/ActivateDedicatedEpsBearerContextReject.h rename to openair-cn/NAS/COMMON/ESM/MSG/ActivateDedicatedEpsBearerContextReject.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/esm/msg/ActivateDedicatedEpsBearerContextRequest.c b/openair-cn/NAS/COMMON/ESM/MSG/ActivateDedicatedEpsBearerContextRequest.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/esm/msg/ActivateDedicatedEpsBearerContextRequest.c rename to openair-cn/NAS/COMMON/ESM/MSG/ActivateDedicatedEpsBearerContextRequest.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/esm/msg/ActivateDedicatedEpsBearerContextRequest.h b/openair-cn/NAS/COMMON/ESM/MSG/ActivateDedicatedEpsBearerContextRequest.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/esm/msg/ActivateDedicatedEpsBearerContextRequest.h rename to openair-cn/NAS/COMMON/ESM/MSG/ActivateDedicatedEpsBearerContextRequest.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/esm/msg/ActivateDefaultEpsBearerContextAccept.c b/openair-cn/NAS/COMMON/ESM/MSG/ActivateDefaultEpsBearerContextAccept.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/esm/msg/ActivateDefaultEpsBearerContextAccept.c rename to openair-cn/NAS/COMMON/ESM/MSG/ActivateDefaultEpsBearerContextAccept.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/esm/msg/ActivateDefaultEpsBearerContextAccept.h b/openair-cn/NAS/COMMON/ESM/MSG/ActivateDefaultEpsBearerContextAccept.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/esm/msg/ActivateDefaultEpsBearerContextAccept.h rename to openair-cn/NAS/COMMON/ESM/MSG/ActivateDefaultEpsBearerContextAccept.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/esm/msg/ActivateDefaultEpsBearerContextReject.c b/openair-cn/NAS/COMMON/ESM/MSG/ActivateDefaultEpsBearerContextReject.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/esm/msg/ActivateDefaultEpsBearerContextReject.c rename to openair-cn/NAS/COMMON/ESM/MSG/ActivateDefaultEpsBearerContextReject.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/esm/msg/ActivateDefaultEpsBearerContextReject.h b/openair-cn/NAS/COMMON/ESM/MSG/ActivateDefaultEpsBearerContextReject.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/esm/msg/ActivateDefaultEpsBearerContextReject.h rename to openair-cn/NAS/COMMON/ESM/MSG/ActivateDefaultEpsBearerContextReject.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/esm/msg/ActivateDefaultEpsBearerContextRequest.c b/openair-cn/NAS/COMMON/ESM/MSG/ActivateDefaultEpsBearerContextRequest.c similarity index 99% rename from openair-cn/NAS/EURECOM-NAS/src/esm/msg/ActivateDefaultEpsBearerContextRequest.c rename to openair-cn/NAS/COMMON/ESM/MSG/ActivateDefaultEpsBearerContextRequest.c index 578f53f75a..3dec0a429a 100644 --- a/openair-cn/NAS/EURECOM-NAS/src/esm/msg/ActivateDefaultEpsBearerContextRequest.c +++ b/openair-cn/NAS/COMMON/ESM/MSG/ActivateDefaultEpsBearerContextRequest.c @@ -297,7 +297,7 @@ int encode_activate_default_eps_bearer_context_request(activate_default_eps_bear encoded += encode_result; } -#if 1 /* LW: force Protocol Configuration Options to be included in the ESM message */ +#if 0 /* LW: force Protocol Configuration Options to be included in the ESM message */ { #define CONFIGURATION_PROTOCOL_PPP 0 diff --git a/openair-cn/NAS/EURECOM-NAS/src/esm/msg/ActivateDefaultEpsBearerContextRequest.h b/openair-cn/NAS/COMMON/ESM/MSG/ActivateDefaultEpsBearerContextRequest.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/esm/msg/ActivateDefaultEpsBearerContextRequest.h rename to openair-cn/NAS/COMMON/ESM/MSG/ActivateDefaultEpsBearerContextRequest.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/esm/msg/BearerResourceAllocationReject.c b/openair-cn/NAS/COMMON/ESM/MSG/BearerResourceAllocationReject.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/esm/msg/BearerResourceAllocationReject.c rename to openair-cn/NAS/COMMON/ESM/MSG/BearerResourceAllocationReject.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/esm/msg/BearerResourceAllocationReject.h b/openair-cn/NAS/COMMON/ESM/MSG/BearerResourceAllocationReject.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/esm/msg/BearerResourceAllocationReject.h rename to openair-cn/NAS/COMMON/ESM/MSG/BearerResourceAllocationReject.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/esm/msg/BearerResourceAllocationRequest.c b/openair-cn/NAS/COMMON/ESM/MSG/BearerResourceAllocationRequest.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/esm/msg/BearerResourceAllocationRequest.c rename to openair-cn/NAS/COMMON/ESM/MSG/BearerResourceAllocationRequest.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/esm/msg/BearerResourceAllocationRequest.h b/openair-cn/NAS/COMMON/ESM/MSG/BearerResourceAllocationRequest.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/esm/msg/BearerResourceAllocationRequest.h rename to openair-cn/NAS/COMMON/ESM/MSG/BearerResourceAllocationRequest.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/esm/msg/BearerResourceModificationReject.c b/openair-cn/NAS/COMMON/ESM/MSG/BearerResourceModificationReject.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/esm/msg/BearerResourceModificationReject.c rename to openair-cn/NAS/COMMON/ESM/MSG/BearerResourceModificationReject.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/esm/msg/BearerResourceModificationReject.h b/openair-cn/NAS/COMMON/ESM/MSG/BearerResourceModificationReject.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/esm/msg/BearerResourceModificationReject.h rename to openair-cn/NAS/COMMON/ESM/MSG/BearerResourceModificationReject.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/esm/msg/BearerResourceModificationRequest.c b/openair-cn/NAS/COMMON/ESM/MSG/BearerResourceModificationRequest.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/esm/msg/BearerResourceModificationRequest.c rename to openair-cn/NAS/COMMON/ESM/MSG/BearerResourceModificationRequest.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/esm/msg/BearerResourceModificationRequest.h b/openair-cn/NAS/COMMON/ESM/MSG/BearerResourceModificationRequest.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/esm/msg/BearerResourceModificationRequest.h rename to openair-cn/NAS/COMMON/ESM/MSG/BearerResourceModificationRequest.h diff --git a/openair-cn/NAS/EURECOM-NAS/libMME/COPYING b/openair-cn/NAS/COMMON/ESM/MSG/COPYING similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/libMME/COPYING rename to openair-cn/NAS/COMMON/ESM/MSG/COPYING diff --git a/openair-cn/NAS/EURECOM-NAS/src/esm/msg/DeactivateEpsBearerContextAccept.c b/openair-cn/NAS/COMMON/ESM/MSG/DeactivateEpsBearerContextAccept.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/esm/msg/DeactivateEpsBearerContextAccept.c rename to openair-cn/NAS/COMMON/ESM/MSG/DeactivateEpsBearerContextAccept.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/esm/msg/DeactivateEpsBearerContextAccept.h b/openair-cn/NAS/COMMON/ESM/MSG/DeactivateEpsBearerContextAccept.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/esm/msg/DeactivateEpsBearerContextAccept.h rename to openair-cn/NAS/COMMON/ESM/MSG/DeactivateEpsBearerContextAccept.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/esm/msg/DeactivateEpsBearerContextRequest.c b/openair-cn/NAS/COMMON/ESM/MSG/DeactivateEpsBearerContextRequest.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/esm/msg/DeactivateEpsBearerContextRequest.c rename to openair-cn/NAS/COMMON/ESM/MSG/DeactivateEpsBearerContextRequest.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/esm/msg/DeactivateEpsBearerContextRequest.h b/openair-cn/NAS/COMMON/ESM/MSG/DeactivateEpsBearerContextRequest.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/esm/msg/DeactivateEpsBearerContextRequest.h rename to openair-cn/NAS/COMMON/ESM/MSG/DeactivateEpsBearerContextRequest.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/esm/msg/EsmInformationRequest.c b/openair-cn/NAS/COMMON/ESM/MSG/EsmInformationRequest.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/esm/msg/EsmInformationRequest.c rename to openair-cn/NAS/COMMON/ESM/MSG/EsmInformationRequest.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/esm/msg/EsmInformationRequest.h b/openair-cn/NAS/COMMON/ESM/MSG/EsmInformationRequest.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/esm/msg/EsmInformationRequest.h rename to openair-cn/NAS/COMMON/ESM/MSG/EsmInformationRequest.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/esm/msg/EsmInformationResponse.c b/openair-cn/NAS/COMMON/ESM/MSG/EsmInformationResponse.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/esm/msg/EsmInformationResponse.c rename to openair-cn/NAS/COMMON/ESM/MSG/EsmInformationResponse.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/esm/msg/EsmInformationResponse.h b/openair-cn/NAS/COMMON/ESM/MSG/EsmInformationResponse.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/esm/msg/EsmInformationResponse.h rename to openair-cn/NAS/COMMON/ESM/MSG/EsmInformationResponse.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/esm/msg/EsmStatus.c b/openair-cn/NAS/COMMON/ESM/MSG/EsmStatus.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/esm/msg/EsmStatus.c rename to openair-cn/NAS/COMMON/ESM/MSG/EsmStatus.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/esm/msg/EsmStatus.h b/openair-cn/NAS/COMMON/ESM/MSG/EsmStatus.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/esm/msg/EsmStatus.h rename to openair-cn/NAS/COMMON/ESM/MSG/EsmStatus.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/esm/msg/Makefile b/openair-cn/NAS/COMMON/ESM/MSG/Makefile similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/esm/msg/Makefile rename to openair-cn/NAS/COMMON/ESM/MSG/Makefile diff --git a/openair-cn/NAS/EURECOM-NAS/src/esm/msg/ModifyEpsBearerContextAccept.c b/openair-cn/NAS/COMMON/ESM/MSG/ModifyEpsBearerContextAccept.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/esm/msg/ModifyEpsBearerContextAccept.c rename to openair-cn/NAS/COMMON/ESM/MSG/ModifyEpsBearerContextAccept.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/esm/msg/ModifyEpsBearerContextAccept.h b/openair-cn/NAS/COMMON/ESM/MSG/ModifyEpsBearerContextAccept.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/esm/msg/ModifyEpsBearerContextAccept.h rename to openair-cn/NAS/COMMON/ESM/MSG/ModifyEpsBearerContextAccept.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/esm/msg/ModifyEpsBearerContextReject.c b/openair-cn/NAS/COMMON/ESM/MSG/ModifyEpsBearerContextReject.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/esm/msg/ModifyEpsBearerContextReject.c rename to openair-cn/NAS/COMMON/ESM/MSG/ModifyEpsBearerContextReject.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/esm/msg/ModifyEpsBearerContextReject.h b/openair-cn/NAS/COMMON/ESM/MSG/ModifyEpsBearerContextReject.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/esm/msg/ModifyEpsBearerContextReject.h rename to openair-cn/NAS/COMMON/ESM/MSG/ModifyEpsBearerContextReject.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/esm/msg/ModifyEpsBearerContextRequest.c b/openair-cn/NAS/COMMON/ESM/MSG/ModifyEpsBearerContextRequest.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/esm/msg/ModifyEpsBearerContextRequest.c rename to openair-cn/NAS/COMMON/ESM/MSG/ModifyEpsBearerContextRequest.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/esm/msg/ModifyEpsBearerContextRequest.h b/openair-cn/NAS/COMMON/ESM/MSG/ModifyEpsBearerContextRequest.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/esm/msg/ModifyEpsBearerContextRequest.h rename to openair-cn/NAS/COMMON/ESM/MSG/ModifyEpsBearerContextRequest.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/esm/msg/PdnConnectivityReject.c b/openair-cn/NAS/COMMON/ESM/MSG/PdnConnectivityReject.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/esm/msg/PdnConnectivityReject.c rename to openair-cn/NAS/COMMON/ESM/MSG/PdnConnectivityReject.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/esm/msg/PdnConnectivityReject.h b/openair-cn/NAS/COMMON/ESM/MSG/PdnConnectivityReject.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/esm/msg/PdnConnectivityReject.h rename to openair-cn/NAS/COMMON/ESM/MSG/PdnConnectivityReject.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/esm/msg/PdnConnectivityRequest.c b/openair-cn/NAS/COMMON/ESM/MSG/PdnConnectivityRequest.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/esm/msg/PdnConnectivityRequest.c rename to openair-cn/NAS/COMMON/ESM/MSG/PdnConnectivityRequest.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/esm/msg/PdnConnectivityRequest.h b/openair-cn/NAS/COMMON/ESM/MSG/PdnConnectivityRequest.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/esm/msg/PdnConnectivityRequest.h rename to openair-cn/NAS/COMMON/ESM/MSG/PdnConnectivityRequest.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/esm/msg/PdnDisconnectReject.c b/openair-cn/NAS/COMMON/ESM/MSG/PdnDisconnectReject.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/esm/msg/PdnDisconnectReject.c rename to openair-cn/NAS/COMMON/ESM/MSG/PdnDisconnectReject.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/esm/msg/PdnDisconnectReject.h b/openair-cn/NAS/COMMON/ESM/MSG/PdnDisconnectReject.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/esm/msg/PdnDisconnectReject.h rename to openair-cn/NAS/COMMON/ESM/MSG/PdnDisconnectReject.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/esm/msg/PdnDisconnectRequest.c b/openair-cn/NAS/COMMON/ESM/MSG/PdnDisconnectRequest.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/esm/msg/PdnDisconnectRequest.c rename to openair-cn/NAS/COMMON/ESM/MSG/PdnDisconnectRequest.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/esm/msg/PdnDisconnectRequest.h b/openair-cn/NAS/COMMON/ESM/MSG/PdnDisconnectRequest.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/esm/msg/PdnDisconnectRequest.h rename to openair-cn/NAS/COMMON/ESM/MSG/PdnDisconnectRequest.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/esm/msg/esm_cause.h b/openair-cn/NAS/COMMON/ESM/MSG/esm_cause.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/esm/msg/esm_cause.h rename to openair-cn/NAS/COMMON/ESM/MSG/esm_cause.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/esm/msg/esm_msg.c b/openair-cn/NAS/COMMON/ESM/MSG/esm_msg.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/esm/msg/esm_msg.c rename to openair-cn/NAS/COMMON/ESM/MSG/esm_msg.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/esm/msg/esm_msg.h b/openair-cn/NAS/COMMON/ESM/MSG/esm_msg.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/esm/msg/esm_msg.h rename to openair-cn/NAS/COMMON/ESM/MSG/esm_msg.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/esm/msg/esm_msgDef.h b/openair-cn/NAS/COMMON/ESM/MSG/esm_msgDef.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/esm/msg/esm_msgDef.h rename to openair-cn/NAS/COMMON/ESM/MSG/esm_msgDef.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/AccessPointName.c b/openair-cn/NAS/COMMON/IES/AccessPointName.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/AccessPointName.c rename to openair-cn/NAS/COMMON/IES/AccessPointName.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/AccessPointName.h b/openair-cn/NAS/COMMON/IES/AccessPointName.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/AccessPointName.h rename to openair-cn/NAS/COMMON/IES/AccessPointName.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/AdditionalUpdateResult.c b/openair-cn/NAS/COMMON/IES/AdditionalUpdateResult.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/AdditionalUpdateResult.c rename to openair-cn/NAS/COMMON/IES/AdditionalUpdateResult.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/AdditionalUpdateResult.h b/openair-cn/NAS/COMMON/IES/AdditionalUpdateResult.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/AdditionalUpdateResult.h rename to openair-cn/NAS/COMMON/IES/AdditionalUpdateResult.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/AdditionalUpdateType.c b/openair-cn/NAS/COMMON/IES/AdditionalUpdateType.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/AdditionalUpdateType.c rename to openair-cn/NAS/COMMON/IES/AdditionalUpdateType.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/AdditionalUpdateType.h b/openair-cn/NAS/COMMON/IES/AdditionalUpdateType.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/AdditionalUpdateType.h rename to openair-cn/NAS/COMMON/IES/AdditionalUpdateType.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/ApnAggregateMaximumBitRate.c b/openair-cn/NAS/COMMON/IES/ApnAggregateMaximumBitRate.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/ApnAggregateMaximumBitRate.c rename to openair-cn/NAS/COMMON/IES/ApnAggregateMaximumBitRate.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/ApnAggregateMaximumBitRate.h b/openair-cn/NAS/COMMON/IES/ApnAggregateMaximumBitRate.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/ApnAggregateMaximumBitRate.h rename to openair-cn/NAS/COMMON/IES/ApnAggregateMaximumBitRate.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/AuthenticationFailureParameter.c b/openair-cn/NAS/COMMON/IES/AuthenticationFailureParameter.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/AuthenticationFailureParameter.c rename to openair-cn/NAS/COMMON/IES/AuthenticationFailureParameter.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/AuthenticationFailureParameter.h b/openair-cn/NAS/COMMON/IES/AuthenticationFailureParameter.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/AuthenticationFailureParameter.h rename to openair-cn/NAS/COMMON/IES/AuthenticationFailureParameter.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/AuthenticationParameterAutn.c b/openair-cn/NAS/COMMON/IES/AuthenticationParameterAutn.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/AuthenticationParameterAutn.c rename to openair-cn/NAS/COMMON/IES/AuthenticationParameterAutn.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/AuthenticationParameterAutn.h b/openair-cn/NAS/COMMON/IES/AuthenticationParameterAutn.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/AuthenticationParameterAutn.h rename to openair-cn/NAS/COMMON/IES/AuthenticationParameterAutn.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/AuthenticationParameterRand.c b/openair-cn/NAS/COMMON/IES/AuthenticationParameterRand.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/AuthenticationParameterRand.c rename to openair-cn/NAS/COMMON/IES/AuthenticationParameterRand.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/AuthenticationParameterRand.h b/openair-cn/NAS/COMMON/IES/AuthenticationParameterRand.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/AuthenticationParameterRand.h rename to openair-cn/NAS/COMMON/IES/AuthenticationParameterRand.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/AuthenticationResponseParameter.c b/openair-cn/NAS/COMMON/IES/AuthenticationResponseParameter.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/AuthenticationResponseParameter.c rename to openair-cn/NAS/COMMON/IES/AuthenticationResponseParameter.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/AuthenticationResponseParameter.h b/openair-cn/NAS/COMMON/IES/AuthenticationResponseParameter.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/AuthenticationResponseParameter.h rename to openair-cn/NAS/COMMON/IES/AuthenticationResponseParameter.h diff --git a/openair-cn/NAS/EURECOM-NAS/libUE/COPYING b/openair-cn/NAS/COMMON/IES/COPYING similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/libUE/COPYING rename to openair-cn/NAS/COMMON/IES/COPYING diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/CipheringKeySequenceNumber.c b/openair-cn/NAS/COMMON/IES/CipheringKeySequenceNumber.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/CipheringKeySequenceNumber.c rename to openair-cn/NAS/COMMON/IES/CipheringKeySequenceNumber.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/CipheringKeySequenceNumber.h b/openair-cn/NAS/COMMON/IES/CipheringKeySequenceNumber.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/CipheringKeySequenceNumber.h rename to openair-cn/NAS/COMMON/IES/CipheringKeySequenceNumber.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/Cli.c b/openair-cn/NAS/COMMON/IES/Cli.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/Cli.c rename to openair-cn/NAS/COMMON/IES/Cli.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/Cli.h b/openair-cn/NAS/COMMON/IES/Cli.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/Cli.h rename to openair-cn/NAS/COMMON/IES/Cli.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/CsfbResponse.c b/openair-cn/NAS/COMMON/IES/CsfbResponse.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/CsfbResponse.c rename to openair-cn/NAS/COMMON/IES/CsfbResponse.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/CsfbResponse.h b/openair-cn/NAS/COMMON/IES/CsfbResponse.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/CsfbResponse.h rename to openair-cn/NAS/COMMON/IES/CsfbResponse.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/DaylightSavingTime.c b/openair-cn/NAS/COMMON/IES/DaylightSavingTime.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/DaylightSavingTime.c rename to openair-cn/NAS/COMMON/IES/DaylightSavingTime.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/DaylightSavingTime.h b/openair-cn/NAS/COMMON/IES/DaylightSavingTime.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/DaylightSavingTime.h rename to openair-cn/NAS/COMMON/IES/DaylightSavingTime.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/DetachType.c b/openair-cn/NAS/COMMON/IES/DetachType.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/DetachType.c rename to openair-cn/NAS/COMMON/IES/DetachType.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/DetachType.h b/openair-cn/NAS/COMMON/IES/DetachType.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/DetachType.h rename to openair-cn/NAS/COMMON/IES/DetachType.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/DrxParameter.c b/openair-cn/NAS/COMMON/IES/DrxParameter.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/DrxParameter.c rename to openair-cn/NAS/COMMON/IES/DrxParameter.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/DrxParameter.h b/openair-cn/NAS/COMMON/IES/DrxParameter.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/DrxParameter.h rename to openair-cn/NAS/COMMON/IES/DrxParameter.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/EmergencyNumberList.c b/openair-cn/NAS/COMMON/IES/EmergencyNumberList.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/EmergencyNumberList.c rename to openair-cn/NAS/COMMON/IES/EmergencyNumberList.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/EmergencyNumberList.h b/openair-cn/NAS/COMMON/IES/EmergencyNumberList.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/EmergencyNumberList.h rename to openair-cn/NAS/COMMON/IES/EmergencyNumberList.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/EmmCause.c b/openair-cn/NAS/COMMON/IES/EmmCause.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/EmmCause.c rename to openair-cn/NAS/COMMON/IES/EmmCause.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/EmmCause.h b/openair-cn/NAS/COMMON/IES/EmmCause.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/EmmCause.h rename to openair-cn/NAS/COMMON/IES/EmmCause.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/EpsAttachResult.c b/openair-cn/NAS/COMMON/IES/EpsAttachResult.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/EpsAttachResult.c rename to openair-cn/NAS/COMMON/IES/EpsAttachResult.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/EpsAttachResult.h b/openair-cn/NAS/COMMON/IES/EpsAttachResult.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/EpsAttachResult.h rename to openair-cn/NAS/COMMON/IES/EpsAttachResult.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/EpsAttachType.c b/openair-cn/NAS/COMMON/IES/EpsAttachType.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/EpsAttachType.c rename to openair-cn/NAS/COMMON/IES/EpsAttachType.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/EpsAttachType.h b/openair-cn/NAS/COMMON/IES/EpsAttachType.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/EpsAttachType.h rename to openair-cn/NAS/COMMON/IES/EpsAttachType.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/EpsBearerContextStatus.c b/openair-cn/NAS/COMMON/IES/EpsBearerContextStatus.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/EpsBearerContextStatus.c rename to openair-cn/NAS/COMMON/IES/EpsBearerContextStatus.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/EpsBearerContextStatus.h b/openair-cn/NAS/COMMON/IES/EpsBearerContextStatus.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/EpsBearerContextStatus.h rename to openair-cn/NAS/COMMON/IES/EpsBearerContextStatus.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/EpsBearerIdentity.c b/openair-cn/NAS/COMMON/IES/EpsBearerIdentity.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/EpsBearerIdentity.c rename to openair-cn/NAS/COMMON/IES/EpsBearerIdentity.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/EpsBearerIdentity.h b/openair-cn/NAS/COMMON/IES/EpsBearerIdentity.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/EpsBearerIdentity.h rename to openair-cn/NAS/COMMON/IES/EpsBearerIdentity.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/EpsMobileIdentity.c b/openair-cn/NAS/COMMON/IES/EpsMobileIdentity.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/EpsMobileIdentity.c rename to openair-cn/NAS/COMMON/IES/EpsMobileIdentity.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/EpsMobileIdentity.h b/openair-cn/NAS/COMMON/IES/EpsMobileIdentity.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/EpsMobileIdentity.h rename to openair-cn/NAS/COMMON/IES/EpsMobileIdentity.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/EpsNetworkFeatureSupport.c b/openair-cn/NAS/COMMON/IES/EpsNetworkFeatureSupport.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/EpsNetworkFeatureSupport.c rename to openair-cn/NAS/COMMON/IES/EpsNetworkFeatureSupport.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/EpsNetworkFeatureSupport.h b/openair-cn/NAS/COMMON/IES/EpsNetworkFeatureSupport.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/EpsNetworkFeatureSupport.h rename to openair-cn/NAS/COMMON/IES/EpsNetworkFeatureSupport.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/EpsQualityOfService.c b/openair-cn/NAS/COMMON/IES/EpsQualityOfService.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/EpsQualityOfService.c rename to openair-cn/NAS/COMMON/IES/EpsQualityOfService.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/EpsQualityOfService.h b/openair-cn/NAS/COMMON/IES/EpsQualityOfService.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/EpsQualityOfService.h rename to openair-cn/NAS/COMMON/IES/EpsQualityOfService.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/EpsUpdateResult.c b/openair-cn/NAS/COMMON/IES/EpsUpdateResult.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/EpsUpdateResult.c rename to openair-cn/NAS/COMMON/IES/EpsUpdateResult.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/EpsUpdateResult.h b/openair-cn/NAS/COMMON/IES/EpsUpdateResult.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/EpsUpdateResult.h rename to openair-cn/NAS/COMMON/IES/EpsUpdateResult.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/EpsUpdateType.c b/openair-cn/NAS/COMMON/IES/EpsUpdateType.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/EpsUpdateType.c rename to openair-cn/NAS/COMMON/IES/EpsUpdateType.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/EpsUpdateType.h b/openair-cn/NAS/COMMON/IES/EpsUpdateType.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/EpsUpdateType.h rename to openair-cn/NAS/COMMON/IES/EpsUpdateType.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/EsmCause.c b/openair-cn/NAS/COMMON/IES/EsmCause.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/EsmCause.c rename to openair-cn/NAS/COMMON/IES/EsmCause.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/EsmCause.h b/openair-cn/NAS/COMMON/IES/EsmCause.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/EsmCause.h rename to openair-cn/NAS/COMMON/IES/EsmCause.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/EsmInformationTransferFlag.c b/openair-cn/NAS/COMMON/IES/EsmInformationTransferFlag.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/EsmInformationTransferFlag.c rename to openair-cn/NAS/COMMON/IES/EsmInformationTransferFlag.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/EsmInformationTransferFlag.h b/openair-cn/NAS/COMMON/IES/EsmInformationTransferFlag.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/EsmInformationTransferFlag.h rename to openair-cn/NAS/COMMON/IES/EsmInformationTransferFlag.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/EsmMessageContainer.c b/openair-cn/NAS/COMMON/IES/EsmMessageContainer.c similarity index 99% rename from openair-cn/NAS/EURECOM-NAS/src/ies/EsmMessageContainer.c rename to openair-cn/NAS/COMMON/IES/EsmMessageContainer.c index 507a01f2f8..edb4cef9d8 100644 --- a/openair-cn/NAS/EURECOM-NAS/src/ies/EsmMessageContainer.c +++ b/openair-cn/NAS/COMMON/IES/EsmMessageContainer.c @@ -54,6 +54,7 @@ int decode_esm_message_container(EsmMessageContainer *esmmessagecontainer, uint8 CHECK_LENGTH_DECODER(len - decoded, ielen); + if ((decode_result = decode_octet_string(&esmmessagecontainer->esmmessagecontainercontents, ielen, buffer + decoded, len - decoded)) < 0) { LOG_FUNC_RETURN(decode_result); } else { diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/EsmMessageContainer.h b/openair-cn/NAS/COMMON/IES/EsmMessageContainer.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/EsmMessageContainer.h rename to openair-cn/NAS/COMMON/IES/EsmMessageContainer.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/GprsTimer.c b/openair-cn/NAS/COMMON/IES/GprsTimer.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/GprsTimer.c rename to openair-cn/NAS/COMMON/IES/GprsTimer.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/GprsTimer.h b/openair-cn/NAS/COMMON/IES/GprsTimer.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/GprsTimer.h rename to openair-cn/NAS/COMMON/IES/GprsTimer.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/GutiType.c b/openair-cn/NAS/COMMON/IES/GutiType.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/GutiType.c rename to openair-cn/NAS/COMMON/IES/GutiType.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/GutiType.h b/openair-cn/NAS/COMMON/IES/GutiType.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/GutiType.h rename to openair-cn/NAS/COMMON/IES/GutiType.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/IdentityType2.c b/openair-cn/NAS/COMMON/IES/IdentityType2.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/IdentityType2.c rename to openair-cn/NAS/COMMON/IES/IdentityType2.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/IdentityType2.h b/openair-cn/NAS/COMMON/IES/IdentityType2.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/IdentityType2.h rename to openair-cn/NAS/COMMON/IES/IdentityType2.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/ImeisvRequest.c b/openair-cn/NAS/COMMON/IES/ImeisvRequest.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/ImeisvRequest.c rename to openair-cn/NAS/COMMON/IES/ImeisvRequest.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/ImeisvRequest.h b/openair-cn/NAS/COMMON/IES/ImeisvRequest.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/ImeisvRequest.h rename to openair-cn/NAS/COMMON/IES/ImeisvRequest.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/KsiAndSequenceNumber.c b/openair-cn/NAS/COMMON/IES/KsiAndSequenceNumber.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/KsiAndSequenceNumber.c rename to openair-cn/NAS/COMMON/IES/KsiAndSequenceNumber.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/KsiAndSequenceNumber.h b/openair-cn/NAS/COMMON/IES/KsiAndSequenceNumber.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/KsiAndSequenceNumber.h rename to openair-cn/NAS/COMMON/IES/KsiAndSequenceNumber.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/LcsClientIdentity.c b/openair-cn/NAS/COMMON/IES/LcsClientIdentity.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/LcsClientIdentity.c rename to openair-cn/NAS/COMMON/IES/LcsClientIdentity.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/LcsClientIdentity.h b/openair-cn/NAS/COMMON/IES/LcsClientIdentity.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/LcsClientIdentity.h rename to openair-cn/NAS/COMMON/IES/LcsClientIdentity.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/LcsIndicator.c b/openair-cn/NAS/COMMON/IES/LcsIndicator.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/LcsIndicator.c rename to openair-cn/NAS/COMMON/IES/LcsIndicator.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/LcsIndicator.h b/openair-cn/NAS/COMMON/IES/LcsIndicator.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/LcsIndicator.h rename to openair-cn/NAS/COMMON/IES/LcsIndicator.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/LinkedEpsBearerIdentity.c b/openair-cn/NAS/COMMON/IES/LinkedEpsBearerIdentity.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/LinkedEpsBearerIdentity.c rename to openair-cn/NAS/COMMON/IES/LinkedEpsBearerIdentity.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/LinkedEpsBearerIdentity.h b/openair-cn/NAS/COMMON/IES/LinkedEpsBearerIdentity.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/LinkedEpsBearerIdentity.h rename to openair-cn/NAS/COMMON/IES/LinkedEpsBearerIdentity.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/LlcServiceAccessPointIdentifier.c b/openair-cn/NAS/COMMON/IES/LlcServiceAccessPointIdentifier.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/LlcServiceAccessPointIdentifier.c rename to openair-cn/NAS/COMMON/IES/LlcServiceAccessPointIdentifier.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/LlcServiceAccessPointIdentifier.h b/openair-cn/NAS/COMMON/IES/LlcServiceAccessPointIdentifier.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/LlcServiceAccessPointIdentifier.h rename to openair-cn/NAS/COMMON/IES/LlcServiceAccessPointIdentifier.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/LocationAreaIdentification.c b/openair-cn/NAS/COMMON/IES/LocationAreaIdentification.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/LocationAreaIdentification.c rename to openair-cn/NAS/COMMON/IES/LocationAreaIdentification.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/LocationAreaIdentification.h b/openair-cn/NAS/COMMON/IES/LocationAreaIdentification.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/LocationAreaIdentification.h rename to openair-cn/NAS/COMMON/IES/LocationAreaIdentification.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/Makefile b/openair-cn/NAS/COMMON/IES/Makefile similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/Makefile rename to openair-cn/NAS/COMMON/IES/Makefile diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/MessageType.c b/openair-cn/NAS/COMMON/IES/MessageType.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/MessageType.c rename to openair-cn/NAS/COMMON/IES/MessageType.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/MessageType.h b/openair-cn/NAS/COMMON/IES/MessageType.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/MessageType.h rename to openair-cn/NAS/COMMON/IES/MessageType.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/MobileIdentity.c b/openair-cn/NAS/COMMON/IES/MobileIdentity.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/MobileIdentity.c rename to openair-cn/NAS/COMMON/IES/MobileIdentity.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/MobileIdentity.h b/openair-cn/NAS/COMMON/IES/MobileIdentity.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/MobileIdentity.h rename to openair-cn/NAS/COMMON/IES/MobileIdentity.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/MobileStationClassmark2.c b/openair-cn/NAS/COMMON/IES/MobileStationClassmark2.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/MobileStationClassmark2.c rename to openair-cn/NAS/COMMON/IES/MobileStationClassmark2.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/MobileStationClassmark2.h b/openair-cn/NAS/COMMON/IES/MobileStationClassmark2.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/MobileStationClassmark2.h rename to openair-cn/NAS/COMMON/IES/MobileStationClassmark2.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/MobileStationClassmark3.c b/openair-cn/NAS/COMMON/IES/MobileStationClassmark3.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/MobileStationClassmark3.c rename to openair-cn/NAS/COMMON/IES/MobileStationClassmark3.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/MobileStationClassmark3.h b/openair-cn/NAS/COMMON/IES/MobileStationClassmark3.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/MobileStationClassmark3.h rename to openair-cn/NAS/COMMON/IES/MobileStationClassmark3.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/MsNetworkCapability.c b/openair-cn/NAS/COMMON/IES/MsNetworkCapability.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/MsNetworkCapability.c rename to openair-cn/NAS/COMMON/IES/MsNetworkCapability.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/MsNetworkCapability.h b/openair-cn/NAS/COMMON/IES/MsNetworkCapability.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/MsNetworkCapability.h rename to openair-cn/NAS/COMMON/IES/MsNetworkCapability.h diff --git a/openair-cn/NAS/COMMON/IES/MsNetworkFeatureSupport.c b/openair-cn/NAS/COMMON/IES/MsNetworkFeatureSupport.c new file mode 100644 index 0000000000..e05968c2d5 --- /dev/null +++ b/openair-cn/NAS/COMMON/IES/MsNetworkFeatureSupport.c @@ -0,0 +1,85 @@ +/******************************************************************************* + OpenAirInterface + Copyright(c) 1999 - 2014 Eurecom + + OpenAirInterface is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + + OpenAirInterface is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with OpenAirInterface.The full GNU General Public License is + included in this distribution in the file called "COPYING". If not, + see . + + Contact Information + OpenAirInterface Admin: openair_admin@eurecom.fr + OpenAirInterface Tech : openair_tech@eurecom.fr + OpenAirInterface Dev : openair4g-devel@eurecom.fr + + Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. + + *******************************************************************************/ +#include +#include +#include + + +#include "TLVEncoder.h" +#include "TLVDecoder.h" +#include "MsNetworkFeatureSupport.h" + +int decode_ms_network_feature_support(MsNetworkFeatureSupport *msnetworkfeaturesupport, uint8_t iei, uint8_t *buffer, uint32_t len) +{ + int decoded = 0; + + + if (iei > 0) { + CHECK_IEI_DECODER(iei, (*buffer & 0xc0)); + } + msnetworkfeaturesupport->spare_bits= (*(buffer + decoded) >> 3) & 0x7; + msnetworkfeaturesupport->extended_periodic_timers= *(buffer + decoded) & 0x1; + decoded++; + +#if defined (NAS_DEBUG) + dump_ms_network_feature_support_xml(msnetworkfeaturesupport, iei); +#endif + return decoded; +} +int encode_ms_network_feature_support(MsNetworkFeatureSupport *msnetworkfeaturesupport, uint8_t iei, uint8_t *buffer, uint32_t len) +{ + uint8_t *lenPtr; + uint32_t encoded = 0; + int encode_result; + /* Checking IEI and pointer */ + CHECK_PDU_POINTER_AND_LENGTH_ENCODER(buffer, MS_NETWORK_FEATURE_SUPPORT_MINIMUM_LENGTH, len); +#if defined (NAS_DEBUG) + dump_ms_network_feature_support_xml(msnetworkfeaturesupport, iei); +#endif + + + *(buffer + encoded) = 0x00 | ((msnetworkfeaturesupport->spare_bits & 0x7) << 3) + | (msnetworkfeaturesupport->extended_periodic_timers & 0x1); + encoded++; + return encoded; +} + +void dump_ms_network_feature_support_xml(MsNetworkFeatureSupport *msnetworkfeaturesupport, uint8_t iei) +{ + printf("\n"); + + if (iei > 0) + /* Don't display IEI if = 0 */ + printf(" 0x%X\n", iei); + + printf(" %u\n",msnetworkfeaturesupport->spare_bits); + printf(" %u\n",msnetworkfeaturesupport->extended_periodic_timers); + printf("\n"); +} + diff --git a/openair3/RAL-LTE/RAL-DUMMY/INCLUDE/mRALlte_proto.h b/openair-cn/NAS/COMMON/IES/MsNetworkFeatureSupport.h old mode 100755 new mode 100644 similarity index 56% rename from openair3/RAL-LTE/RAL-DUMMY/INCLUDE/mRALlte_proto.h rename to openair-cn/NAS/COMMON/IES/MsNetworkFeatureSupport.h index 69070c6d87..334430de1a --- a/openair3/RAL-LTE/RAL-DUMMY/INCLUDE/mRALlte_proto.h +++ b/openair-cn/NAS/COMMON/IES/MsNetworkFeatureSupport.h @@ -23,26 +23,31 @@ OpenAirInterface Tech : openair_tech@eurecom.fr OpenAirInterface Dev : openair4g-devel@eurecom.fr - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE + Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. *******************************************************************************/ -#ifndef __RAL_LTE_PROTO_H__ -#define __RAL_LTE_PROTO_H__ +#include +#include +#include +#include "OctetString.h" +#ifndef MS_NETWORK_FEATURE_SUPPORT_H_ +#define MS_NETWORK_FEATURE_SUPPORT_H_ +#define MS_NETWORK_FEATURE_SUPPORT_MINIMUM_LENGTH 3 +#define MS_NETWORK_FEATURE_SUPPORT_MAXIMUM_LENGTH 10 -//mRALuD_NAS.c -int IAL_decode_NAS_message(void); -int IAL_process_DNAS_message(int ioctl_obj, int ioctl_cmd, int ioctl_cellid); +typedef struct MsNetworkFeatureSupport_tag { + uint8_t spare_bits:3; + uint8_t extended_periodic_timers:1; +} MsNetworkFeatureSupport; -//mRALuD_process.c -void IAL_NAS_measures_init(void); -void IAL_NAS_measures_update(int i); -void IAL_integrate_measure(int measure, int i); -void rallte_NAS_measures_polling(void); -int rallte_NAS_corresponding_cell(int req_index); -void rallte_verifyPendingConnection(void); +int encode_ms_network_feature_support(MsNetworkFeatureSupport *msnetworkfeaturesupport, uint8_t iei, uint8_t *buffer, uint32_t len); -#endif +int decode_ms_network_feature_support(MsNetworkFeatureSupport *msnetworkfeaturesupport, uint8_t iei, uint8_t *buffer, uint32_t len); + +void dump_ms_network_feature_support_xml(MsNetworkFeatureSupport *msnetworkfeaturesupport, uint8_t iei); + +#endif /* MS NETWORK CAPABILITY_H_ */ diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/NasKeySetIdentifier.c b/openair-cn/NAS/COMMON/IES/NasKeySetIdentifier.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/NasKeySetIdentifier.c rename to openair-cn/NAS/COMMON/IES/NasKeySetIdentifier.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/NasKeySetIdentifier.h b/openair-cn/NAS/COMMON/IES/NasKeySetIdentifier.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/NasKeySetIdentifier.h rename to openair-cn/NAS/COMMON/IES/NasKeySetIdentifier.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/NasMessageContainer.c b/openair-cn/NAS/COMMON/IES/NasMessageContainer.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/NasMessageContainer.c rename to openair-cn/NAS/COMMON/IES/NasMessageContainer.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/NasMessageContainer.h b/openair-cn/NAS/COMMON/IES/NasMessageContainer.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/NasMessageContainer.h rename to openair-cn/NAS/COMMON/IES/NasMessageContainer.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/NasRequestType.c b/openair-cn/NAS/COMMON/IES/NasRequestType.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/NasRequestType.c rename to openair-cn/NAS/COMMON/IES/NasRequestType.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/NasRequestType.h b/openair-cn/NAS/COMMON/IES/NasRequestType.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/NasRequestType.h rename to openair-cn/NAS/COMMON/IES/NasRequestType.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/NasSecurityAlgorithms.c b/openair-cn/NAS/COMMON/IES/NasSecurityAlgorithms.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/NasSecurityAlgorithms.c rename to openair-cn/NAS/COMMON/IES/NasSecurityAlgorithms.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/NasSecurityAlgorithms.h b/openair-cn/NAS/COMMON/IES/NasSecurityAlgorithms.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/NasSecurityAlgorithms.h rename to openair-cn/NAS/COMMON/IES/NasSecurityAlgorithms.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/NetworkName.c b/openair-cn/NAS/COMMON/IES/NetworkName.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/NetworkName.c rename to openair-cn/NAS/COMMON/IES/NetworkName.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/NetworkName.h b/openair-cn/NAS/COMMON/IES/NetworkName.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/NetworkName.h rename to openair-cn/NAS/COMMON/IES/NetworkName.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/Nonce.c b/openair-cn/NAS/COMMON/IES/Nonce.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/Nonce.c rename to openair-cn/NAS/COMMON/IES/Nonce.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/Nonce.h b/openair-cn/NAS/COMMON/IES/Nonce.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/Nonce.h rename to openair-cn/NAS/COMMON/IES/Nonce.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/PTmsiSignature.c b/openair-cn/NAS/COMMON/IES/PTmsiSignature.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/PTmsiSignature.c rename to openair-cn/NAS/COMMON/IES/PTmsiSignature.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/PTmsiSignature.h b/openair-cn/NAS/COMMON/IES/PTmsiSignature.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/PTmsiSignature.h rename to openair-cn/NAS/COMMON/IES/PTmsiSignature.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/PacketFlowIdentifier.c b/openair-cn/NAS/COMMON/IES/PacketFlowIdentifier.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/PacketFlowIdentifier.c rename to openair-cn/NAS/COMMON/IES/PacketFlowIdentifier.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/PacketFlowIdentifier.h b/openair-cn/NAS/COMMON/IES/PacketFlowIdentifier.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/PacketFlowIdentifier.h rename to openair-cn/NAS/COMMON/IES/PacketFlowIdentifier.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/PagingIdentity.c b/openair-cn/NAS/COMMON/IES/PagingIdentity.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/PagingIdentity.c rename to openair-cn/NAS/COMMON/IES/PagingIdentity.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/PagingIdentity.h b/openair-cn/NAS/COMMON/IES/PagingIdentity.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/PagingIdentity.h rename to openair-cn/NAS/COMMON/IES/PagingIdentity.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/PdnAddress.c b/openair-cn/NAS/COMMON/IES/PdnAddress.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/PdnAddress.c rename to openair-cn/NAS/COMMON/IES/PdnAddress.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/PdnAddress.h b/openair-cn/NAS/COMMON/IES/PdnAddress.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/PdnAddress.h rename to openair-cn/NAS/COMMON/IES/PdnAddress.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/PdnType.c b/openair-cn/NAS/COMMON/IES/PdnType.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/PdnType.c rename to openair-cn/NAS/COMMON/IES/PdnType.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/PdnType.h b/openair-cn/NAS/COMMON/IES/PdnType.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/PdnType.h rename to openair-cn/NAS/COMMON/IES/PdnType.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/PlmnList.c b/openair-cn/NAS/COMMON/IES/PlmnList.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/PlmnList.c rename to openair-cn/NAS/COMMON/IES/PlmnList.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/PlmnList.h b/openair-cn/NAS/COMMON/IES/PlmnList.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/PlmnList.h rename to openair-cn/NAS/COMMON/IES/PlmnList.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/ProcedureTransactionIdentity.c b/openair-cn/NAS/COMMON/IES/ProcedureTransactionIdentity.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/ProcedureTransactionIdentity.c rename to openair-cn/NAS/COMMON/IES/ProcedureTransactionIdentity.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/ProcedureTransactionIdentity.h b/openair-cn/NAS/COMMON/IES/ProcedureTransactionIdentity.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/ProcedureTransactionIdentity.h rename to openair-cn/NAS/COMMON/IES/ProcedureTransactionIdentity.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/ProtocolConfigurationOptions.c b/openair-cn/NAS/COMMON/IES/ProtocolConfigurationOptions.c similarity index 64% rename from openair-cn/NAS/EURECOM-NAS/src/ies/ProtocolConfigurationOptions.c rename to openair-cn/NAS/COMMON/IES/ProtocolConfigurationOptions.c index ebdafdf66c..dc17201da0 100644 --- a/openair-cn/NAS/EURECOM-NAS/src/ies/ProtocolConfigurationOptions.c +++ b/openair-cn/NAS/COMMON/IES/ProtocolConfigurationOptions.c @@ -64,16 +64,23 @@ int decode_protocol_configuration_options(ProtocolConfigurationOptions *protocol decoded++; //IES_DECODE_U16(protocolconfigurationoptions->protocolid, *(buffer + decoded)); + protocolconfigurationoptions->num_protocol_id_or_container_id = 0; while ((len - decoded) > 0) { - IES_DECODE_U16(buffer, decoded, protocolconfigurationoptions->protocolid); - DECODE_U8(buffer + decoded, protocolconfigurationoptions->lengthofprotocolid, decoded); + IES_DECODE_U16(buffer, decoded, protocolconfigurationoptions->protocolid[protocolconfigurationoptions->num_protocol_id_or_container_id]); + DECODE_U8(buffer + decoded, protocolconfigurationoptions->lengthofprotocolid[protocolconfigurationoptions->num_protocol_id_or_container_id], decoded); - if ((decode_result = decode_octet_string(&protocolconfigurationoptions->protocolidcontents, - protocolconfigurationoptions->lengthofprotocolid, buffer + decoded, len - decoded)) < 0) { - return decode_result; + if (protocolconfigurationoptions->lengthofprotocolid[protocolconfigurationoptions->num_protocol_id_or_container_id] > 0) { + if ((decode_result = decode_octet_string(&protocolconfigurationoptions->protocolidcontents[protocolconfigurationoptions->num_protocol_id_or_container_id], + protocolconfigurationoptions->lengthofprotocolid[protocolconfigurationoptions->num_protocol_id_or_container_id], buffer + decoded, len - decoded)) < 0) { + return decode_result; + } else { + decoded += decode_result; + } } else { - decoded += decode_result; + protocolconfigurationoptions->protocolidcontents[protocolconfigurationoptions->num_protocol_id_or_container_id].length = 0; + protocolconfigurationoptions->protocolidcontents[protocolconfigurationoptions->num_protocol_id_or_container_id].value = NULL; } + protocolconfigurationoptions->num_protocol_id_or_container_id += 1; } #if defined (NAS_DEBUG) @@ -84,6 +91,7 @@ int decode_protocol_configuration_options(ProtocolConfigurationOptions *protocol int encode_protocol_configuration_options(ProtocolConfigurationOptions *protocolconfigurationoptions, uint8_t iei, uint8_t *buffer, uint32_t len) { uint8_t *lenPtr; + uint8_t num_protocol_id_or_container_id = 0; uint32_t encoded = 0; int encode_result; /* Checking IEI and pointer */ @@ -102,21 +110,29 @@ int encode_protocol_configuration_options(ProtocolConfigurationOptions *protocol *(buffer + encoded) = 0x00 | (1 << 7) | (protocolconfigurationoptions->configurationprotol & 0x7); encoded++; - IES_ENCODE_U16(buffer, encoded, protocolconfigurationoptions->protocolid); - *(buffer + encoded) = protocolconfigurationoptions->lengthofprotocolid; - encoded++; - if ((encode_result = encode_octet_string(&protocolconfigurationoptions->protocolidcontents, buffer + encoded, len - encoded)) < 0) - return encode_result; - else - encoded += encode_result; + while (num_protocol_id_or_container_id < protocolconfigurationoptions->num_protocol_id_or_container_id) { + IES_ENCODE_U16(buffer, encoded, protocolconfigurationoptions->protocolid[num_protocol_id_or_container_id]); + *(buffer + encoded) = protocolconfigurationoptions->lengthofprotocolid[num_protocol_id_or_container_id]; + encoded++; + + if ((encode_result = encode_octet_string(&protocolconfigurationoptions->protocolidcontents[num_protocol_id_or_container_id], + buffer + encoded, + len - encoded)) < 0) + return encode_result; + else + encoded += encode_result; + + num_protocol_id_or_container_id += 1; + } *lenPtr = encoded - 1 - ((iei > 0) ? 1 : 0); return encoded; } void dump_protocol_configuration_options_xml(ProtocolConfigurationOptions *protocolconfigurationoptions, uint8_t iei) { + int i; printf("\n"); if (iei > 0) @@ -124,9 +140,13 @@ void dump_protocol_configuration_options_xml(ProtocolConfigurationOptions *proto printf(" 0x%X\n", iei); printf(" %u\n", protocolconfigurationoptions->configurationprotol); - printf(" %u\n", protocolconfigurationoptions->protocolid); - printf(" %u\n", protocolconfigurationoptions->lengthofprotocolid); - printf("%s",dump_octet_string_xml(&protocolconfigurationoptions->protocolidcontents)); + i = 0; + while (i < protocolconfigurationoptions->num_protocol_id_or_container_id) { + printf(" %u\n", protocolconfigurationoptions->protocolid[i]); + printf(" %u\n", protocolconfigurationoptions->lengthofprotocolid[i]); + printf(" %s",dump_octet_string_xml(&protocolconfigurationoptions->protocolidcontents[i])); + i++; + } printf("\n"); } diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/ProtocolConfigurationOptions.h b/openair-cn/NAS/COMMON/IES/ProtocolConfigurationOptions.h similarity index 83% rename from openair-cn/NAS/EURECOM-NAS/src/ies/ProtocolConfigurationOptions.h rename to openair-cn/NAS/COMMON/IES/ProtocolConfigurationOptions.h index f73f4be832..bd59d2c4ac 100644 --- a/openair-cn/NAS/EURECOM-NAS/src/ies/ProtocolConfigurationOptions.h +++ b/openair-cn/NAS/COMMON/IES/ProtocolConfigurationOptions.h @@ -38,6 +38,10 @@ #define PROTOCOL_CONFIGURATION_OPTIONS_MINIMUM_LENGTH 3 #define PROTOCOL_CONFIGURATION_OPTIONS_MAXIMUM_LENGTH 253 +// arbitrary value, theoricaly can be greater than defined (250/3) +#define PROTOCOL_CONFIGURATION_OPTIONS_MAXIMUM_PROTOCOL_ID_OR_CONTAINER_ID 16 + + /* 3GPP TS 24.008 Table 10.5.154 * MS to network table */ @@ -58,10 +62,11 @@ typedef enum ProtocolConfigurationOptionsList_ids_tag { */ typedef struct ProtocolConfigurationOptions_tag { - uint8_t configurationprotol:3; - uint16_t protocolid; - uint8_t lengthofprotocolid; - OctetString protocolidcontents; + uint8_t configurationprotol:3; + uint8_t num_protocol_id_or_container_id; + uint16_t protocolid[PROTOCOL_CONFIGURATION_OPTIONS_MAXIMUM_PROTOCOL_ID_OR_CONTAINER_ID]; + uint8_t lengthofprotocolid[PROTOCOL_CONFIGURATION_OPTIONS_MAXIMUM_PROTOCOL_ID_OR_CONTAINER_ID]; + OctetString protocolidcontents[PROTOCOL_CONFIGURATION_OPTIONS_MAXIMUM_PROTOCOL_ID_OR_CONTAINER_ID]; } ProtocolConfigurationOptions; int encode_protocol_configuration_options(ProtocolConfigurationOptions *protocolconfigurationoptions, uint8_t iei, uint8_t *buffer, uint32_t len); diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/ProtocolDiscriminator.c b/openair-cn/NAS/COMMON/IES/ProtocolDiscriminator.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/ProtocolDiscriminator.c rename to openair-cn/NAS/COMMON/IES/ProtocolDiscriminator.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/ProtocolDiscriminator.h b/openair-cn/NAS/COMMON/IES/ProtocolDiscriminator.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/ProtocolDiscriminator.h rename to openair-cn/NAS/COMMON/IES/ProtocolDiscriminator.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/QualityOfService.c b/openair-cn/NAS/COMMON/IES/QualityOfService.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/QualityOfService.c rename to openair-cn/NAS/COMMON/IES/QualityOfService.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/QualityOfService.h b/openair-cn/NAS/COMMON/IES/QualityOfService.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/QualityOfService.h rename to openair-cn/NAS/COMMON/IES/QualityOfService.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/RadioPriority.c b/openair-cn/NAS/COMMON/IES/RadioPriority.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/RadioPriority.c rename to openair-cn/NAS/COMMON/IES/RadioPriority.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/RadioPriority.h b/openair-cn/NAS/COMMON/IES/RadioPriority.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/RadioPriority.h rename to openair-cn/NAS/COMMON/IES/RadioPriority.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/SecurityHeaderType.c b/openair-cn/NAS/COMMON/IES/SecurityHeaderType.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/SecurityHeaderType.c rename to openair-cn/NAS/COMMON/IES/SecurityHeaderType.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/SecurityHeaderType.h b/openair-cn/NAS/COMMON/IES/SecurityHeaderType.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/SecurityHeaderType.h rename to openair-cn/NAS/COMMON/IES/SecurityHeaderType.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/ServiceType.c b/openair-cn/NAS/COMMON/IES/ServiceType.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/ServiceType.c rename to openair-cn/NAS/COMMON/IES/ServiceType.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/ServiceType.h b/openair-cn/NAS/COMMON/IES/ServiceType.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/ServiceType.h rename to openair-cn/NAS/COMMON/IES/ServiceType.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/ShortMac.c b/openair-cn/NAS/COMMON/IES/ShortMac.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/ShortMac.c rename to openair-cn/NAS/COMMON/IES/ShortMac.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/ShortMac.h b/openair-cn/NAS/COMMON/IES/ShortMac.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/ShortMac.h rename to openair-cn/NAS/COMMON/IES/ShortMac.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/SsCode.c b/openair-cn/NAS/COMMON/IES/SsCode.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/SsCode.c rename to openair-cn/NAS/COMMON/IES/SsCode.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/SsCode.h b/openair-cn/NAS/COMMON/IES/SsCode.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/SsCode.h rename to openair-cn/NAS/COMMON/IES/SsCode.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/SupportedCodecList.c b/openair-cn/NAS/COMMON/IES/SupportedCodecList.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/SupportedCodecList.c rename to openair-cn/NAS/COMMON/IES/SupportedCodecList.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/SupportedCodecList.h b/openair-cn/NAS/COMMON/IES/SupportedCodecList.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/SupportedCodecList.h rename to openair-cn/NAS/COMMON/IES/SupportedCodecList.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/TimeZone.c b/openair-cn/NAS/COMMON/IES/TimeZone.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/TimeZone.c rename to openair-cn/NAS/COMMON/IES/TimeZone.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/TimeZone.h b/openair-cn/NAS/COMMON/IES/TimeZone.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/TimeZone.h rename to openair-cn/NAS/COMMON/IES/TimeZone.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/TimeZoneAndTime.c b/openair-cn/NAS/COMMON/IES/TimeZoneAndTime.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/TimeZoneAndTime.c rename to openair-cn/NAS/COMMON/IES/TimeZoneAndTime.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/TimeZoneAndTime.h b/openair-cn/NAS/COMMON/IES/TimeZoneAndTime.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/TimeZoneAndTime.h rename to openair-cn/NAS/COMMON/IES/TimeZoneAndTime.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/TmsiStatus.c b/openair-cn/NAS/COMMON/IES/TmsiStatus.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/TmsiStatus.c rename to openair-cn/NAS/COMMON/IES/TmsiStatus.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/TmsiStatus.h b/openair-cn/NAS/COMMON/IES/TmsiStatus.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/TmsiStatus.h rename to openair-cn/NAS/COMMON/IES/TmsiStatus.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/TrackingAreaIdentity.c b/openair-cn/NAS/COMMON/IES/TrackingAreaIdentity.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/TrackingAreaIdentity.c rename to openair-cn/NAS/COMMON/IES/TrackingAreaIdentity.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/TrackingAreaIdentity.h b/openair-cn/NAS/COMMON/IES/TrackingAreaIdentity.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/TrackingAreaIdentity.h rename to openair-cn/NAS/COMMON/IES/TrackingAreaIdentity.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/TrackingAreaIdentityList.c b/openair-cn/NAS/COMMON/IES/TrackingAreaIdentityList.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/TrackingAreaIdentityList.c rename to openair-cn/NAS/COMMON/IES/TrackingAreaIdentityList.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/TrackingAreaIdentityList.h b/openair-cn/NAS/COMMON/IES/TrackingAreaIdentityList.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/TrackingAreaIdentityList.h rename to openair-cn/NAS/COMMON/IES/TrackingAreaIdentityList.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/TrafficFlowAggregateDescription.c b/openair-cn/NAS/COMMON/IES/TrafficFlowAggregateDescription.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/TrafficFlowAggregateDescription.c rename to openair-cn/NAS/COMMON/IES/TrafficFlowAggregateDescription.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/TrafficFlowAggregateDescription.h b/openair-cn/NAS/COMMON/IES/TrafficFlowAggregateDescription.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/TrafficFlowAggregateDescription.h rename to openair-cn/NAS/COMMON/IES/TrafficFlowAggregateDescription.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/TrafficFlowTemplate.c b/openair-cn/NAS/COMMON/IES/TrafficFlowTemplate.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/TrafficFlowTemplate.c rename to openair-cn/NAS/COMMON/IES/TrafficFlowTemplate.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/TrafficFlowTemplate.h b/openair-cn/NAS/COMMON/IES/TrafficFlowTemplate.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/TrafficFlowTemplate.h rename to openair-cn/NAS/COMMON/IES/TrafficFlowTemplate.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/TransactionIdentifier.c b/openair-cn/NAS/COMMON/IES/TransactionIdentifier.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/TransactionIdentifier.c rename to openair-cn/NAS/COMMON/IES/TransactionIdentifier.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/TransactionIdentifier.h b/openair-cn/NAS/COMMON/IES/TransactionIdentifier.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/TransactionIdentifier.h rename to openair-cn/NAS/COMMON/IES/TransactionIdentifier.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/UeNetworkCapability.c b/openair-cn/NAS/COMMON/IES/UeNetworkCapability.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/UeNetworkCapability.c rename to openair-cn/NAS/COMMON/IES/UeNetworkCapability.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/UeNetworkCapability.h b/openair-cn/NAS/COMMON/IES/UeNetworkCapability.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/UeNetworkCapability.h rename to openair-cn/NAS/COMMON/IES/UeNetworkCapability.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/UeRadioCapabilityInformationUpdateNeeded.c b/openair-cn/NAS/COMMON/IES/UeRadioCapabilityInformationUpdateNeeded.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/UeRadioCapabilityInformationUpdateNeeded.c rename to openair-cn/NAS/COMMON/IES/UeRadioCapabilityInformationUpdateNeeded.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/UeRadioCapabilityInformationUpdateNeeded.h b/openair-cn/NAS/COMMON/IES/UeRadioCapabilityInformationUpdateNeeded.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/UeRadioCapabilityInformationUpdateNeeded.h rename to openair-cn/NAS/COMMON/IES/UeRadioCapabilityInformationUpdateNeeded.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/UeSecurityCapability.c b/openair-cn/NAS/COMMON/IES/UeSecurityCapability.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/UeSecurityCapability.c rename to openair-cn/NAS/COMMON/IES/UeSecurityCapability.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/UeSecurityCapability.h b/openair-cn/NAS/COMMON/IES/UeSecurityCapability.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/UeSecurityCapability.h rename to openair-cn/NAS/COMMON/IES/UeSecurityCapability.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/VoiceDomainPreferenceAndUeUsageSetting.c b/openair-cn/NAS/COMMON/IES/VoiceDomainPreferenceAndUeUsageSetting.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/VoiceDomainPreferenceAndUeUsageSetting.c rename to openair-cn/NAS/COMMON/IES/VoiceDomainPreferenceAndUeUsageSetting.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/VoiceDomainPreferenceAndUeUsageSetting.h b/openair-cn/NAS/COMMON/IES/VoiceDomainPreferenceAndUeUsageSetting.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/VoiceDomainPreferenceAndUeUsageSetting.h rename to openair-cn/NAS/COMMON/IES/VoiceDomainPreferenceAndUeUsageSetting.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/COPYING b/openair-cn/NAS/COMMON/UTIL/COPYING similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/COPYING rename to openair-cn/NAS/COMMON/UTIL/COPYING diff --git a/openair-cn/NAS/EURECOM-NAS/src/util/Makefile b/openair-cn/NAS/COMMON/UTIL/Makefile similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/util/Makefile rename to openair-cn/NAS/COMMON/UTIL/Makefile diff --git a/openair-cn/NAS/EURECOM-NAS/src/util/OctetString.c b/openair-cn/NAS/COMMON/UTIL/OctetString.c similarity index 68% rename from openair-cn/NAS/EURECOM-NAS/src/util/OctetString.c rename to openair-cn/NAS/COMMON/UTIL/OctetString.c index 9b29ab02dd..fd16e27014 100644 --- a/openair-cn/NAS/EURECOM-NAS/src/util/OctetString.c +++ b/openair-cn/NAS/COMMON/UTIL/OctetString.c @@ -48,7 +48,6 @@ OctetString* dup_octet_string(OctetString *octetstring) memcpy(os_p->value, octetstring->value, octetstring->length); os_p->value[octetstring->length] = '\0'; } - return os_p; } @@ -57,7 +56,6 @@ void free_octet_string(OctetString *octetstring) { if (octetstring) { if (octetstring->value) free(octetstring->value); - octetstring->value = NULL; octetstring->length = 0; free(octetstring); @@ -67,9 +65,17 @@ void free_octet_string(OctetString *octetstring) int encode_octet_string(OctetString *octetstring, uint8_t *buffer, uint32_t buflen) { - CHECK_PDU_POINTER_AND_LENGTH_ENCODER(buffer, octetstring->length, buflen); - memcpy((void*)buffer, (void*)octetstring->value, octetstring->length); - return octetstring->length; + if (octetstring != NULL) { + if ((octetstring->value != NULL) && (octetstring->length > 0)) { + CHECK_PDU_POINTER_AND_LENGTH_ENCODER(buffer, octetstring->length, buflen); + memcpy((void*)buffer, (void*)octetstring->value, octetstring->length); + return octetstring->length; + } else { + return 0; + } + } else { + return 0; + } } int decode_octet_string(OctetString *octetstring, uint16_t pdulen, uint8_t *buffer, uint32_t buflen) @@ -77,11 +83,15 @@ int decode_octet_string(OctetString *octetstring, uint16_t pdulen, uint8_t *buff if (buflen < pdulen) return -1; - octetstring->length = pdulen; - octetstring->value = malloc(sizeof(uint8_t) * (pdulen+1)); - memcpy((void*)octetstring->value, (void*)buffer, pdulen); - octetstring->value[pdulen] = '\0'; - return octetstring->length; + if ((octetstring != NULL) && (buffer!= NULL)) { + octetstring->length = pdulen; + octetstring->value = malloc(sizeof(uint8_t) * (pdulen+1)); + memcpy((void*)octetstring->value, (void*)buffer, pdulen); + octetstring->value[pdulen] = '\0'; + return octetstring->length; + } else { + return -1; + } } char* dump_octet_string_xml( const OctetString * const octetstring) @@ -89,15 +99,19 @@ char* dump_octet_string_xml( const OctetString * const octetstring) int i; int remaining_size = DUMP_OUTPUT_SIZE; int size = 0; - size = snprintf(_dump_output, remaining_size, "%u\n\t", octetstring->length); - remaining_size -= size; + int size_print = 0; + + size_print = snprintf(_dump_output, remaining_size, "%u\n\t", octetstring->length); + size += size_print; + remaining_size -= size_print; for (i = 0; i < octetstring->length; i++) { - size +=snprintf(&_dump_output[size], remaining_size, "0x%x ", octetstring->value[i]); - remaining_size -= size; + size_print = snprintf(&_dump_output[size], remaining_size, "0x%x ", octetstring->value[i]); + size += size_print; + remaining_size -= size_print; } - size +=snprintf(&_dump_output[size], remaining_size, "\n"); + size_print = snprintf(&_dump_output[size], remaining_size, "\n"); return _dump_output; } @@ -106,10 +120,12 @@ char* dump_octet_string( const OctetString * const octetstring) int i; int remaining_size = DUMP_OUTPUT_SIZE; int size = 0; + int size_print = 0; for (i = 0; i < octetstring->length; i++) { - size +=snprintf(&_dump_output[size], remaining_size, "0x%x ", octetstring->value[i]); - remaining_size -= size; + size_print = snprintf(&_dump_output[size], remaining_size, "0x%x ", octetstring->value[i]); + size += size_print; + remaining_size -= size_print; } return _dump_output; diff --git a/openair-cn/NAS/EURECOM-NAS/src/util/OctetString.h b/openair-cn/NAS/COMMON/UTIL/OctetString.h similarity index 90% rename from openair-cn/NAS/EURECOM-NAS/src/util/OctetString.h rename to openair-cn/NAS/COMMON/UTIL/OctetString.h index c7f564a3b6..15cd8f6823 100644 --- a/openair-cn/NAS/EURECOM-NAS/src/util/OctetString.h +++ b/openair-cn/NAS/COMMON/UTIL/OctetString.h @@ -46,19 +46,19 @@ typedef struct OctetString_tag { } while (0); -#define DUP_OCTET_STRING(oCTETsTRINGoRIG,oCTETsTRINGcOPY) \ - do { \ - if ((oCTETsTRINGoRIG).value == NULL) { \ - (oCTETsTRINGcOPY).length = 0; \ - (oCTETsTRINGcOPY).value = NULL; \ - break; \ - } \ - (oCTETsTRINGcOPY).length = strlen((const char*)(oCTETsTRINGoRIG).value);\ - assert((oCTETsTRINGoRIG).length == (oCTETsTRINGcOPY).length); \ - (oCTETsTRINGcOPY).value = malloc((oCTETsTRINGoRIG).length); \ - memcpy((oCTETsTRINGcOPY).value, \ - (oCTETsTRINGoRIG).value, \ - (oCTETsTRINGoRIG).length); \ +#define DUP_OCTET_STRING(oCTETsTRINGoRIG,oCTETsTRINGcOPY) \ + do { \ + if ((oCTETsTRINGoRIG).value == NULL) { \ + (oCTETsTRINGcOPY).length = 0; \ + (oCTETsTRINGcOPY).value = NULL; \ + break; \ + } \ + (oCTETsTRINGcOPY).length = (oCTETsTRINGoRIG).length; \ + (oCTETsTRINGcOPY).value = malloc((oCTETsTRINGoRIG).length+1); \ + (oCTETsTRINGcOPY).value[(oCTETsTRINGoRIG).length] = '\0'; \ + memcpy((oCTETsTRINGcOPY).value, \ + (oCTETsTRINGoRIG).value, \ + (oCTETsTRINGoRIG).length); \ } while (0); OctetString* dup_octet_string(OctetString*octetstring); diff --git a/openair-cn/NAS/EURECOM-NAS/src/util/TLVDecoder.c b/openair-cn/NAS/COMMON/UTIL/TLVDecoder.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/util/TLVDecoder.c rename to openair-cn/NAS/COMMON/UTIL/TLVDecoder.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/util/TLVDecoder.h b/openair-cn/NAS/COMMON/UTIL/TLVDecoder.h similarity index 98% rename from openair-cn/NAS/EURECOM-NAS/src/util/TLVDecoder.h rename to openair-cn/NAS/COMMON/UTIL/TLVDecoder.h index 6e1764edad..152fd9c737 100644 --- a/openair-cn/NAS/EURECOM-NAS/src/util/TLVDecoder.h +++ b/openair-cn/NAS/COMMON/UTIL/TLVDecoder.h @@ -132,7 +132,7 @@ void tlv_decode_perror(void); if(iEI != bUFFER) \ { \ printf("IEI is different than the one expected." \ - "(Got: 0x%x, expecting: 0x%x\n", bUFFER, iEI); \ + "(Got: 0x%x, expecting: 0x%x)\n", bUFFER, iEI); \ errorCodeDecoder = TLV_DECODE_UNEXPECTED_IEI; \ LOG_FUNC_RETURN(TLV_DECODE_UNEXPECTED_IEI); \ } diff --git a/openair-cn/NAS/EURECOM-NAS/src/util/TLVEncoder.c b/openair-cn/NAS/COMMON/UTIL/TLVEncoder.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/util/TLVEncoder.c rename to openair-cn/NAS/COMMON/UTIL/TLVEncoder.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/util/TLVEncoder.h b/openair-cn/NAS/COMMON/UTIL/TLVEncoder.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/util/TLVEncoder.h rename to openair-cn/NAS/COMMON/UTIL/TLVEncoder.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/util/device.c b/openair-cn/NAS/COMMON/UTIL/device.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/util/device.c rename to openair-cn/NAS/COMMON/UTIL/device.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/util/device.h b/openair-cn/NAS/COMMON/UTIL/device.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/util/device.h rename to openair-cn/NAS/COMMON/UTIL/device.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/util/memory.c b/openair-cn/NAS/COMMON/UTIL/memory.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/util/memory.c rename to openair-cn/NAS/COMMON/UTIL/memory.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/util/memory.h b/openair-cn/NAS/COMMON/UTIL/memory.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/util/memory.h rename to openair-cn/NAS/COMMON/UTIL/memory.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/util/nas_log.c b/openair-cn/NAS/COMMON/UTIL/nas_log.c similarity index 99% rename from openair-cn/NAS/EURECOM-NAS/src/util/nas_log.c rename to openair-cn/NAS/COMMON/UTIL/nas_log.c index 5479122b5f..a781d25971 100644 --- a/openair-cn/NAS/EURECOM-NAS/src/util/nas_log.c +++ b/openair-cn/NAS/COMMON/UTIL/nas_log.c @@ -49,6 +49,7 @@ int nas_log_func_indent; #else #include // stderr, sprintf, fprintf, vfprintf #include // va_list, va_start, va_end +#include // strlen /****************************************************************************/ /**************** E X T E R N A L D E F I N I T I O N S ****************/ diff --git a/openair-cn/NAS/EURECOM-NAS/src/util/nas_log.h b/openair-cn/NAS/COMMON/UTIL/nas_log.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/util/nas_log.h rename to openair-cn/NAS/COMMON/UTIL/nas_log.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/util/nas_timer.c b/openair-cn/NAS/COMMON/UTIL/nas_timer.c similarity index 99% rename from openair-cn/NAS/EURECOM-NAS/src/util/nas_timer.c rename to openair-cn/NAS/COMMON/UTIL/nas_timer.c index 4eea8c36ce..d7c1eb9f0e 100644 --- a/openair-cn/NAS/EURECOM-NAS/src/util/nas_timer.c +++ b/openair-cn/NAS/COMMON/UTIL/nas_timer.c @@ -60,6 +60,7 @@ Description Timer utilities #endif #include "nas_timer.h" #include "commonDef.h" +#include "msc.h" /****************************************************************************/ /**************** E X T E R N A L D E F I N I T I O N S ****************/ @@ -278,7 +279,7 @@ int nas_timer_start(long sec, nas_timer_callback_t cb, void *args) /* Insert the new entry into the timer queue */ _nas_timer_db_insert_entry(id, te); #if defined(ENABLE_ITTI) -# if defined(NAS_BUILT_IN_EPC) +# if defined(NAS_MME) ret = timer_setup(sec, 0, TASK_NAS_MME, INSTANCE_DEFAULT, TIMER_PERIODIC, args, &timer_id); # else ret = timer_setup(sec, 0, TASK_NAS_UE, INSTANCE_DEFAULT, TIMER_PERIODIC, args, &timer_id); @@ -542,7 +543,8 @@ static nas_timer_entry_t *_nas_timer_db_create_entry( if (te != NULL) { te->itv.tv_sec = sec; te->itv.tv_usec = 0; - te->tv = te->itv; + te->tv.tv_sec = te->itv.tv_sec; + te->tv.tv_usec = te->itv.tv_usec; te->cb = cb; te->args = args; } diff --git a/openair-cn/NAS/EURECOM-NAS/src/util/nas_timer.h b/openair-cn/NAS/COMMON/UTIL/nas_timer.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/util/nas_timer.h rename to openair-cn/NAS/COMMON/UTIL/nas_timer.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/util/parser.c b/openair-cn/NAS/COMMON/UTIL/parser.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/util/parser.c rename to openair-cn/NAS/COMMON/UTIL/parser.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/util/parser.h b/openair-cn/NAS/COMMON/UTIL/parser.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/util/parser.h rename to openair-cn/NAS/COMMON/UTIL/parser.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/util/socket.c b/openair-cn/NAS/COMMON/UTIL/socket.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/util/socket.c rename to openair-cn/NAS/COMMON/UTIL/socket.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/util/socket.h b/openair-cn/NAS/COMMON/UTIL/socket.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/util/socket.h rename to openair-cn/NAS/COMMON/UTIL/socket.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/util/stty.c b/openair-cn/NAS/COMMON/UTIL/stty.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/util/stty.c rename to openair-cn/NAS/COMMON/UTIL/stty.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/util/tst/Makefile b/openair-cn/NAS/COMMON/UTIL/tst/Makefile similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/util/tst/Makefile rename to openair-cn/NAS/COMMON/UTIL/tst/Makefile diff --git a/openair-cn/NAS/EURECOM-NAS/src/util/tst/timer.c b/openair-cn/NAS/COMMON/UTIL/tst/timer.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/util/tst/timer.c rename to openair-cn/NAS/COMMON/UTIL/tst/timer.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/util/tst/timer_debug.txt b/openair-cn/NAS/COMMON/UTIL/tst/timer_debug.txt similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/util/tst/timer_debug.txt rename to openair-cn/NAS/COMMON/UTIL/tst/timer_debug.txt diff --git a/openair-cn/NAS/COMMON/commonDef.h b/openair-cn/NAS/COMMON/commonDef.h new file mode 120000 index 0000000000..19553e9b64 --- /dev/null +++ b/openair-cn/NAS/COMMON/commonDef.h @@ -0,0 +1 @@ +../../../openair2/COMMON/commonDef.h \ No newline at end of file diff --git a/openair-cn/NAS/COMMON/networkDef.h b/openair-cn/NAS/COMMON/networkDef.h new file mode 120000 index 0000000000..2648b55e99 --- /dev/null +++ b/openair-cn/NAS/COMMON/networkDef.h @@ -0,0 +1 @@ +../../../openair2/COMMON/networkDef.h \ No newline at end of file diff --git a/openair-cn/NAS/EURECOM-NAS/src/include/securityDef.h b/openair-cn/NAS/COMMON/securityDef.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/include/securityDef.h rename to openair-cn/NAS/COMMON/securityDef.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/include/userDef.h b/openair-cn/NAS/COMMON/userDef.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/include/userDef.h rename to openair-cn/NAS/COMMON/userDef.h diff --git a/openair-cn/NAS/EURECOM-NAS/Makefile b/openair-cn/NAS/EURECOM-NAS/Makefile deleted file mode 100644 index c4a02b99d7..0000000000 --- a/openair-cn/NAS/EURECOM-NAS/Makefile +++ /dev/null @@ -1,96 +0,0 @@ -################################################################################ -# OpenAirInterface -# Copyright(c) 1999 - 2014 Eurecom -# -# OpenAirInterface is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# -# OpenAirInterface is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with OpenAirInterface.The full GNU General Public License is -# included in this distribution in the file called "COPYING". If not, -# see . -# -# Contact Information -# OpenAirInterface Admin: openair_admin@eurecom.fr -# OpenAirInterface Tech : openair_tech@eurecom.fr -# OpenAirInterface Dev : openair4g-devel@eurecom.fr -# -# Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. -# -################################################################################ -# To be run as: make or make PROCESS=UE or make PROCESS=MME -# make and make PROCESS=UE build ./bin/UEprocess -# make PROCESS=MME builds ./bin/MMEprocess - -include Makerules -include Makefile.inc - -export PROJDIR = $(CURDIR) - -all: -ifeq ($(PROCESS), UE) - @$(CD) $(SECUDIR) && $(MAKE) -f Makefile.NAS -endif - @$(CD) $(UTILDIR) && $(MAKE) - @$(CD) $(APIDIR) && $(MAKE) - @$(CD) $(IESDIR) && $(MAKE) - @$(CD) $(EMMDIR) && $(MAKE) - @$(CD) $(ESMDIR) && $(MAKE) - @$(CD) $(SRCDIR) && $(MAKE) -ifeq ($(PROCESS), UE) - @$(CD) $(TOOLSDIR) && $(MAKE) - @$(CD) $(USRTSTDIR) && $(MAKE) -endif -ifeq ($(PROCESS), MME) - @$(CD) $(NETTSTDIR) && $(MAKE) - @$(CD) $(ASSIMUDIR) && $(MAKE) -endif -# SR include all objects in a single archive - $(AR) rcs libUE/libNasUE.a `find . -name *.o` `find $(OPENAIRCN_DIR)/SECU -name *.o` - -clean: - @$(CD) $(SRCDIR) && $(MAKE) $@ - @$(CD) $(APIDIR) && $(MAKE) $@ - @$(CD) $(EMMDIR) && $(MAKE) $@ - @$(CD) $(ESMDIR) && $(MAKE) $@ - -veryclean: clean - @$(CD) $(SRCDIR) && $(MAKE) $@ - @$(CD) $(APIDIR) && $(MAKE) $@ - @$(CD) $(EMMDIR) && $(MAKE) $@ - @$(CD) $(ESMDIR) && $(MAKE) $@ - @$(CD) $(UTILDIR) && $(MAKE) $@ - @$(CD) $(IESDIR) && $(MAKE) $@ - @$(CD) $(TOOLSDIR) && $(MAKE) $@ - @$(CD) $(USRTSTDIR) && $(MAKE) $@ - @$(CD) $(NETTSTDIR) && $(MAKE) $@ - @$(CD) $(ASSIMUDIR) && $(MAKE) $@ - @$(RM) libUE/libNasUE.a - -veryveryclean: veryclean - @$(CD) $(BINDIR) && $(RM) * .*.nvram - @$(CD) $(LIBDIR) && $(RM) * - @$(CD) $(LIBDIR)UE && $(RM) * - @$(CD) $(LIBDIR)MME && $(RM) * - -depend: - @$(CD) $(SRCDIR) && $(MAKE) depend - @$(CD) $(APIDIR) && $(MAKE) depend - @$(CD) $(EMMDIR) && $(MAKE) depend - @$(CD) $(ESMDIR) && $(MAKE) depend - @$(CD) $(UTILDIR) && $(MAKE) depend - @$(CD) $(IESDIR) && $(MAKE) depend - @$(CD) $(TOOLSDIR) && $(MAKE) depend - @$(CD) $(USRTSTDIR) && $(MAKE) depend - @$(CD) $(NETTSTDIR) && $(MAKE) depend - @$(CD) $(ASSIMUDIR) && $(MAKE) depend - -# DO NOT DELETE diff --git a/openair-cn/NAS/EURECOM-NAS/Makefile.inc b/openair-cn/NAS/EURECOM-NAS/Makefile.inc deleted file mode 100644 index 6244567e3d..0000000000 --- a/openair-cn/NAS/EURECOM-NAS/Makefile.inc +++ /dev/null @@ -1,68 +0,0 @@ -################################################################################ -# OpenAirInterface -# Copyright(c) 1999 - 2014 Eurecom -# -# OpenAirInterface is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# -# OpenAirInterface is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with OpenAirInterface.The full GNU General Public License is -# included in this distribution in the file called "COPYING". If not, -# see . -# -# Contact Information -# OpenAirInterface Admin: openair_admin@eurecom.fr -# OpenAirInterface Tech : openair_tech@eurecom.fr -# OpenAirInterface Dev : openair4g-devel@eurecom.fr -# -# Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. -# -################################################################################ -# list of generated libraries -LIBUTIL = libutil -LIBAPI = libapi -LIBIES = libies -LIBEMMMSG = libEMMmsg -LIBEMMSAP = libEMMsap -LIBESMMSG = libESMmsg -LIBESMSAP = libESMsap - -# Binary directories -BINDIR = $(PROJDIR)/bin -LIBDIR = $(PROJDIR)/lib -LIBPROCESS = $(LIBDIR)$(PROCESS) - -# Source directories -SECUDIR = $(OPENAIRCN_DIR)/SECU -SRCDIR = $(PROJDIR)/src -INCDIR = $(SRCDIR)/include -UTILDIR = $(SRCDIR)/util -APIDIR = $(SRCDIR)/api -USERAPIDIR = $(APIDIR)/user -NETAPIDIR = $(APIDIR)/network -USIMAPIDIR = $(APIDIR)/usim -MMEAPIDIR = $(APIDIR)/mme -IESDIR = $(SRCDIR)/ies -EMMDIR = $(SRCDIR)/emm -ESMDIR = $(SRCDIR)/esm -EMMMSGDIR = $(EMMDIR)/msg -EMMSAPDIR = $(EMMDIR)/sap -ESMMSGDIR = $(ESMDIR)/msg -ESMSAPDIR = $(ESMDIR)/sap - -# Tools directory -TOOLSDIR = $(PROJDIR)/tools - -# Test directories -TSTDIR = $(PROJDIR)/tst -USRTSTDIR = $(TSTDIR)/user -NETTSTDIR = $(TSTDIR)/network -ASSIMUDIR = $(TSTDIR)/as_simulator diff --git a/openair-cn/NAS/EURECOM-NAS/Makerules b/openair-cn/NAS/EURECOM-NAS/Makerules deleted file mode 100644 index c3e2f765fe..0000000000 --- a/openair-cn/NAS/EURECOM-NAS/Makerules +++ /dev/null @@ -1,61 +0,0 @@ -################################################################################ -# OpenAirInterface -# Copyright(c) 1999 - 2014 Eurecom -# -# OpenAirInterface is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# -# OpenAirInterface is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with OpenAirInterface.The full GNU General Public License is -# included in this distribution in the file called "COPYING". If not, -# see . -# -# Contact Information -# OpenAirInterface Admin: openair_admin@eurecom.fr -# OpenAirInterface Tech : openair_tech@eurecom.fr -# OpenAirInterface Dev : openair4g-devel@eurecom.fr -# -# Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. -# -################################################################################ -CC = gcc -RM = rm -f -CP = cp -p -LD = /usr/bin/ld -AR = /usr/bin/ar -CD = cd -MAKE = make - -# machine hardware name -HARDWARE_NAME = $(shell uname -m) -ifeq ($(HARDWARE_NAME), x86_64) - CFLAGS = $(INCLUDES) $(DEFINES) -fPIC -g -pthread -else - CFLAGS = $(INCLUDES) $(DEFINES) -g -pthread -endif -DEFINES = -DLINUX -D_REENTRANT -Wall -O -std=gnu99 - -SVN_REV = $(shell svnversion -n .) -DATE_REV = $(shell date '+%F %T') - -# Default builds UEprocess -ifeq ($(PROCESS), MME) - DEFINES += -DNAS_MME -else - PROCESS = UE - DEFINES += -DNAS_UE -endif - -LDFLAGS = -pthread -L$(LIBDIR) -L$(LIBPROCESS) -lrt - -SRCS = $(wildcard *.c) -OBJS = $(SRCS:.c=.o) - diff --git a/openair-cn/NAS/EURECOM-NAS/src/Makefile b/openair-cn/NAS/EURECOM-NAS/src/Makefile deleted file mode 100644 index e9b2e87b81..0000000000 --- a/openair-cn/NAS/EURECOM-NAS/src/Makefile +++ /dev/null @@ -1,82 +0,0 @@ -################################################################################ -# OpenAirInterface -# Copyright(c) 1999 - 2014 Eurecom -# -# OpenAirInterface is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# -# OpenAirInterface is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with OpenAirInterface.The full GNU General Public License is -# included in this distribution in the file called "COPYING". If not, -# see . -# -# Contact Information -# OpenAirInterface Admin: openair_admin@eurecom.fr -# OpenAirInterface Tech : openair_tech@eurecom.fr -# OpenAirInterface Dev : openair4g-devel@eurecom.fr -# -# Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. -# -################################################################################ -ifndef PROJDIR -PROJDIR = $(PWD)/.. -endif - -include $(PROJDIR)/Makerules -include $(PROJDIR)/Makefile.inc - -export LD_RUN_PATH = $(LIBDIR):$(LIBPROCESS) - -TARGET = $(PROCESS)process - -# Define the version number -DEFINES += -D'FIRMWARE_VERSION="$(SVN_REV) - $(DATE_REV)"' - -ifeq ($(TARGET), MMEprocess) - SRCS = MMEprocess.c nas_network.c nas_parser.c nas_proc.c -endif -ifeq ($(TARGET), UEprocess) - SRCS = UEprocess.c nas_network.c nas_parser.c nas_proc.c nas_user.c -endif - -LIBS = -lutil -lapi -lEMMmsg -lESMmsg -lEMMsap -lESMsap -lies -lrt -lnettle -lcrypto -lm -INCLUDES = -I. -I$(INCDIR) -I$(UTILDIR) -I$(USERAPIDIR) -I$(NETAPIDIR) \ - -I$(EMMDIR) -I$(EMMMSGDIR) -I$(EMMSAPDIR) \ - -I$(ESMDIR) -I$(ESMMSGDIR) -I$(ESMSAPDIR) \ - -I$(IESDIR) -I$(MMEAPIDIR) - -.PHONY: $(TARGET) - -%.o: %.c Makefile $(PROJDIR)/Makerules $(PROJDIR)/Makefile.inc - @echo Compiling $< - @$(CC) $(CFLAGS) -c $< -o $@ - -$(TARGET): $(OBJS) - $(CC) $(LDFLAGS) -o $@ $^ $(EMMDIR)/*.o $(ESMDIR)/*.o $(SECUDIR)/*.o $(LIBS) - @echo Replacing $@ to $(BINDIR) - @$(RM) $(BINDIR)/$@ - @$(CP) $@ $(BINDIR) - -# Always build the main object file which contains the version number -$(TARGET).o: .FORCE -.FORCE: - -clean: - $(RM) $(OBJS) *.bak *~ - -veryclean: clean - $(RM) UE$(TARGET) MME$(TARGET) - -depend: - makedepend -- ${CFLAGS} -- ${SRCS} - -# DO NOT DELETE THIS LINE -- make depend depends on it. - diff --git a/openair-cn/NAS/EURECOM-NAS/src/api/Makefile b/openair-cn/NAS/EURECOM-NAS/src/api/Makefile deleted file mode 100644 index cc4ae1eb25..0000000000 --- a/openair-cn/NAS/EURECOM-NAS/src/api/Makefile +++ /dev/null @@ -1,83 +0,0 @@ -################################################################################ -# OpenAirInterface -# Copyright(c) 1999 - 2014 Eurecom -# -# OpenAirInterface is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# -# OpenAirInterface is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with OpenAirInterface.The full GNU General Public License is -# included in this distribution in the file called "COPYING". If not, -# see . -# -# Contact Information -# OpenAirInterface Admin: openair_admin@eurecom.fr -# OpenAirInterface Tech : openair_tech@eurecom.fr -# OpenAirInterface Dev : openair4g-devel@eurecom.fr -# -# Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. -# -################################################################################ -ifndef PROJDIR -export PROJDIR = $(PWD)/../.. -endif - -include $(PROJDIR)/Makerules -include $(PROJDIR)/Makefile.inc - -export INCLUDES = -I. -I$(INCDIR) -I$(UTILDIR) -I$(IESDIR) \ - -I$(EMMDIR) \ - -I$(ESMDIR) \ - -I$(EMMMSGDIR) \ - -I$(ESMMSGDIR) \ - -I$(SRCDIR) \ - -I$(OPENAIRCN_DIR)/COMMON \ - -I$(OPENAIRCN_DIR)/SECU - -TARGET = $(LIBAPI) -TARGETS = $(TARGET).a $(TARGET).so -OBJS = $(USERAPIDIR)/*.o $(NETAPIDIR)/*.o $(USIMAPIDIR)/*.o $(MMEAPIDIR)/*.o - -all: - @$(CD) $(NETAPIDIR) && $(MAKE) - @$(CD) $(USERAPIDIR) && $(MAKE) - @$(CD) $(USIMAPIDIR) && $(MAKE) - @$(CD) $(MMEAPIDIR) && $(MAKE) - @$(MAKE) $(TARGETS) - -$(TARGET).a: $(OBJS) - @echo target.a - @$(RM) $@ - @$(AR) $(ARFLAGS) $@ $^ - @echo Replacing $@ to $(LIBPROCESS) - @$(RM) $(LIBPROCESS)/$@ - @$(CP) $@ $(LIBPROCESS) - -$(TARGET).so: $(OBJS) - @$(LD) -G -o $@ $^ - @echo Replacing $@ to $(LIBPROCESS) - @$(RM) $(LIBPROCESS)/$@ - @$(CP) $@ $(LIBPROCESS) - -clean: - $(RM) *.bak *~ - @$(CD) $(USERAPIDIR) && $(MAKE) $@ - @$(CD) $(NETAPIDIR) && $(MAKE) $@ - @$(CD) $(USIMAPIDIR) && $(MAKE) $@ - @$(CD) $(MMEAPIDIR) && $(MAKE) $@ - -veryclean: clean - $(RM) $(TARGETS) - -depend: - makedepend -- ${CFLAGS} -- ${SRCS} - -# DO NOT DELETE THIS LINE -- make depend depends on it. diff --git a/openair-cn/NAS/EURECOM-NAS/src/api/network/as_message.h b/openair-cn/NAS/EURECOM-NAS/src/api/network/as_message.h deleted file mode 120000 index 91405a472b..0000000000 --- a/openair-cn/NAS/EURECOM-NAS/src/api/network/as_message.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../openair2/COMMON/as_message.h \ No newline at end of file diff --git a/openair-cn/NAS/EURECOM-NAS/src/include/commonDef.h b/openair-cn/NAS/EURECOM-NAS/src/include/commonDef.h deleted file mode 120000 index 5d0024abc5..0000000000 --- a/openair-cn/NAS/EURECOM-NAS/src/include/commonDef.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../openair2/COMMON/commonDef.h \ No newline at end of file diff --git a/openair-cn/NAS/EURECOM-NAS/src/include/networkDef.h b/openair-cn/NAS/EURECOM-NAS/src/include/networkDef.h deleted file mode 120000 index 5fab87cc92..0000000000 --- a/openair-cn/NAS/EURECOM-NAS/src/include/networkDef.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../openair2/COMMON/networkDef.h \ No newline at end of file diff --git a/openair-cn/NAS/EURECOM-NAS/tst/COPYING b/openair-cn/NAS/EURECOM-NAS/tst/COPYING deleted file mode 100644 index 94a9ed024d..0000000000 --- a/openair-cn/NAS/EURECOM-NAS/tst/COPYING +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. diff --git a/openair-cn/NAS/EURECOM-NAS/tst/MSC/COPYING b/openair-cn/NAS/EURECOM-NAS/tst/MSC/COPYING deleted file mode 100644 index 94a9ed024d..0000000000 --- a/openair-cn/NAS/EURECOM-NAS/tst/MSC/COPYING +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. diff --git a/openair-cn/NAS/EURECOM-NAS/tst/as_simulator/COPYING b/openair-cn/NAS/EURECOM-NAS/tst/as_simulator/COPYING deleted file mode 100644 index 94a9ed024d..0000000000 --- a/openair-cn/NAS/EURECOM-NAS/tst/as_simulator/COPYING +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. diff --git a/openair-cn/NAS/EURECOM-NAS/tst/network/COPYING b/openair-cn/NAS/EURECOM-NAS/tst/network/COPYING deleted file mode 100644 index 94a9ed024d..0000000000 --- a/openair-cn/NAS/EURECOM-NAS/tst/network/COPYING +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. diff --git a/openair-cn/NAS/EURECOM-NAS/tst/user/COPYING b/openair-cn/NAS/EURECOM-NAS/tst/user/COPYING deleted file mode 100644 index 94a9ed024d..0000000000 --- a/openair-cn/NAS/EURECOM-NAS/tst/user/COPYING +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. diff --git a/openair-cn/NAS/EURECOM-NAS/src/api/COPYING b/openair-cn/NAS/MME/API/MME/COPYING similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/api/COPYING rename to openair-cn/NAS/MME/API/MME/COPYING diff --git a/openair-cn/NAS/EURECOM-NAS/src/api/mme/Makefile b/openair-cn/NAS/MME/API/MME/Makefile similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/api/mme/Makefile rename to openair-cn/NAS/MME/API/MME/Makefile diff --git a/openair-cn/NAS/EURECOM-NAS/src/api/mme/mme_api.c b/openair-cn/NAS/MME/API/MME/mme_api.c similarity index 99% rename from openair-cn/NAS/EURECOM-NAS/src/api/mme/mme_api.c rename to openair-cn/NAS/MME/API/MME/mme_api.c index dd0ff9c2f6..91b688558c 100644 --- a/openair-cn/NAS/EURECOM-NAS/src/api/mme/mme_api.c +++ b/openair-cn/NAS/MME/API/MME/mme_api.c @@ -44,7 +44,6 @@ Description Implements the API used by the NAS layer running in the MME *****************************************************************************/ -#ifdef NAS_MME #include "mme_api.h" #include "nas_log.h" @@ -99,19 +98,19 @@ static const plmn_t mme_api_plmn = {0, 2, 0xf, 8, 0, 1}; // 20810 /* Authentication parameter RAND */ -static const UInt8_t _mme_api_rand[AUTH_RAND_SIZE] = { +static const uint8_t _mme_api_rand[AUTH_RAND_SIZE] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x03, 0x04 }; /* Authentication parameter AUTN */ -static const UInt8_t _mme_api_autn[AUTH_AUTN_SIZE] = { +static const uint8_t _mme_api_autn[AUTH_AUTN_SIZE] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x05, 0x04, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00 }; /* Authentication response parameter */ -static const UInt8_t _mme_api_xres[AUTH_XRES_SIZE] = { +static const uint8_t _mme_api_xres[AUTH_XRES_SIZE] = { 0x67, 0x70, 0x3a, 0x31, 0xf2, 0x2a, 0x2d, 0x51, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; @@ -568,5 +567,3 @@ int mme_api_unsubscribe(OctetString *apn) LOG_FUNC_RETURN(rc); } - -#endif // NAS_MME diff --git a/openair-cn/NAS/EURECOM-NAS/src/api/mme/mme_api.h b/openair-cn/NAS/MME/API/MME/mme_api.h similarity index 97% rename from openair-cn/NAS/EURECOM-NAS/src/api/mme/mme_api.h rename to openair-cn/NAS/MME/API/MME/mme_api.h index dc3a603fcf..a8f83e1237 100644 --- a/openair-cn/NAS/EURECOM-NAS/src/api/mme/mme_api.h +++ b/openair-cn/NAS/MME/API/MME/mme_api.h @@ -46,23 +46,20 @@ Description Implements the API used by the NAS layer running in the MME #ifndef __MME_API_H__ #define __MME_API_H__ -#ifdef NAS_MME # if defined(NAS_BUILT_IN_EPC) # include "mme_config.h" # endif #include "commonDef.h" #include "securityDef.h" #include "OctetString.h" -#endif /****************************************************************************/ /********************* G L O B A L C O N S T A N T S *******************/ /****************************************************************************/ /* Maximum number of UEs the MME may simultaneously support */ -#define MME_API_NB_UE_MAX 1 +#define MME_API_NB_UE_MAX 256 -#ifdef NAS_MME /* Features supported by the MME */ typedef enum mme_api_feature_s { @@ -99,6 +96,8 @@ typedef struct mme_api_emm_config_s { */ typedef struct mme_api_esm_config_s { mme_api_feature_t features; /* Supported features */ + uint8_t dns_prim_ipv4[4]; /* Network byte order */ + uint8_t dns_sec_ipv4[4]; /* Network byte order */ } mme_api_esm_config_t; /****************************************************************************/ @@ -144,6 +143,4 @@ int mme_api_subscribe(OctetString *apn, mme_api_ip_version_t mme_pdn_index, Octe int is_emergency, mme_api_qos_t *qos); int mme_api_unsubscribe(OctetString *apn); -#endif // NAS_MME - #endif /* __MME_API_H__*/ diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/Attach.c b/openair-cn/NAS/MME/EMM/Attach.c similarity index 54% rename from openair-cn/NAS/EURECOM-NAS/src/emm/Attach.c rename to openair-cn/NAS/MME/EMM/Attach.c index cea1945847..ec7a873cd9 100644 --- a/openair-cn/NAS/EURECOM-NAS/src/emm/Attach.c +++ b/openair-cn/NAS/MME/EMM/Attach.c @@ -73,13 +73,11 @@ Description Defines the attach related EMM procedure executed by the #include "NasSecurityAlgorithms.h" -#ifdef NAS_MME #include "mme_api.h" #include "mme_config.h" # if defined(NAS_BUILT_IN_EPC) # include "nas_itti_messaging.h" # endif -#endif #include // memcmp, memcpy #include // malloc, free @@ -97,40 +95,12 @@ static const char *_emm_attach_type_str[] = { "EPS", "IMSI", "EMERGENCY", "RESERVED" }; -/* - * -------------------------------------------------------------------------- - * Internal data handled by the attach procedure in the UE - * -------------------------------------------------------------------------- - */ -#ifdef NAS_UE -/* - * Timer handlers - */ -void *_emm_attach_t3410_handler(void *); -static void *_emm_attach_t3411_handler(void *); -static void *_emm_attach_t3402_handler(void *); - -/* - * Abnormal case attach procedure - */ -static void _emm_attach_abnormal_cases_bcd(emm_sap_t *); - -/* - * Internal data used for attach procedure - */ -static struct { -#define EMM_ATTACH_COUNTER_MAX 5 - unsigned int attempt_count; /* Counter used to limit the number of - * subsequently rejected attach attempts */ -} _emm_attach_data = {0}; -#endif // NAS_UE /* * -------------------------------------------------------------------------- * Internal data handled by the attach procedure in the MME * -------------------------------------------------------------------------- */ -#ifdef NAS_MME /* * Timer handlers */ @@ -160,12 +130,12 @@ static int _emm_attach_update(emm_data_context_t *ctx, unsigned int ueid, GUTI_t *guti, imsi_t *imsi, imei_t *imei, int eea, int eia, int ucs2, int uea, int uia, int gea, int umts_present, int gprs_present, - const OctetString *esm_msg); + const OctetString *esm_msg_pP); /* * Internal data used for attach procedure */ -typedef struct { +typedef struct attach_data_s { unsigned int ueid; /* UE identifier */ #define ATTACH_COUNTER_MAX 5 unsigned int retransmission_count; /* Retransmission counter */ @@ -175,872 +145,16 @@ typedef struct { static int _emm_attach_accept(emm_data_context_t *emm_ctx, attach_data_t *data); -#endif // NAS_MME - /****************************************************************************/ /****************** E X P O R T E D F U N C T I O N S ******************/ /****************************************************************************/ -/* - * -------------------------------------------------------------------------- - * Attach procedure executed by the UE - * -------------------------------------------------------------------------- - */ -#ifdef NAS_UE -/**************************************************************************** - ** ** - ** Name: emm_proc_attach() ** - ** ** - ** Description: Initiate EPS attach procedure to register a UE in PS mode ** - ** of operation for EPS services only, or register a UE for ** - ** emergency bearer services. ** - ** ** - ** 3GPP TS 24.301, section 5.5.1.2.2 ** - ** In state EMM-DEREGISTERED, the UE initiates the attach ** - ** procedure by sending an ATTACH REQUEST message to the MME,** - ** starting timer T3410 and entering state EMM-REGISTERED- ** - ** INITIATED. ** - ** ** - ** Inputs: type: Type of the requested attach ** - ** Others: _emm_data ** - ** ** - ** Outputs: None ** - ** Return: RETURNok, RETURNerror ** - ** Others: T3402, T3410, T3411 ** - ** ** - ***************************************************************************/ -int emm_proc_attach(emm_proc_attach_type_t type) -{ - LOG_FUNC_IN; - - emm_sap_t emm_sap; - emm_as_establish_t *emm_as = &emm_sap.u.emm_as.u.establish; - esm_sap_t esm_sap; - int rc; - - LOG_TRACE(INFO, "EMM-PROC - Initiate EPS attach type = %s (%d)", - _emm_attach_type_str[type], type); - - /* Update the emergency bearer service indicator */ - if (type == EMM_ATTACH_TYPE_EMERGENCY) { - _emm_data.is_emergency = TRUE; - } - - /* Setup initial NAS information message to transfer */ - emm_as->NASinfo = EMM_AS_NAS_INFO_ATTACH; - /* Set the attach type */ - emm_as->type = type; - - /* Set the RRC connection establishment cause */ - if (_emm_data.is_emergency) { - emm_as->RRCcause = NET_ESTABLISH_CAUSE_EMERGENCY; - emm_as->RRCtype = NET_ESTABLISH_TYPE_EMERGENCY_CALLS; - } else { - emm_as->RRCcause = NET_ESTABLISH_CAUSE_MO_SIGNAL; - emm_as->RRCtype = NET_ESTABLISH_TYPE_ORIGINATING_SIGNAL; - } - - /* Set the PLMN identifier of the selected PLMN */ - emm_as->plmnID = &_emm_data.splmn; - /* - * Process the EPS mobile identity - */ - emm_as->UEid.guti = NULL; - emm_as->UEid.tai = NULL; - emm_as->UEid.imsi = NULL; - emm_as->UEid.imei = NULL; - - /* Check whether the UE is configured for "AttachWithIMSI" */ - if (_emm_data.AttachWithImsi) { - /* Check whether the selected PLMN is neither the registered PLMN - * nor in the list of equivalent PLMNs */ - if ( (!_emm_data.is_rplmn) && (!_emm_data.is_eplmn) ) { - LOG_TRACE(INFO, "EMM-PROC - Initiate EPS attach with IMSI"); - /* Include the IMSI */ - emm_as->UEid.imsi = _emm_data.imsi; - } else { - LOG_TRACE(INFO, - "EMM-PROC - Initiate EPS attach with NO IMSI, is registered PLMN %d, is equivalent PLMN %d", - _emm_data.is_rplmn, - _emm_data.is_eplmn); - } - } else if (_emm_data.guti) { - LOG_TRACE(INFO, "EMM-PROC - Initiate EPS attach with GUTI"); - /* Include a valid GUTI and the last visited registered TAI */ - emm_as->UEid.guti = _emm_data.guti; - emm_as->UEid.tai = _emm_data.tai; - } else if (!_emm_data.is_emergency) { - LOG_TRACE(INFO, "EMM-PROC - Initiate EPS attach with IMSI cause is no emergency and no GUTI"); - /* Include the IMSI if no valid GUTI is available */ - emm_as->UEid.imsi = _emm_data.imsi; - } else { - /* The UE is attaching for emergency bearer services and - * does not hold a valid GUTI */ - if (_emm_data.imsi) { - /* Include the IMSI if valid (USIM is present) */ - LOG_TRACE(INFO, "EMM-PROC - Initiate EPS attach with IMSI cause is emergency and no GUTI"); - emm_as->UEid.imsi = _emm_data.imsi; - } else { - LOG_TRACE(INFO, "EMM-PROC - Initiate EPS attach with IMSI cause is emergency and no GUTI and no IMSI"); - /* Include the IMEI if the IMSI is not valid */ - emm_as->UEid.imei = _emm_data.imei; - } - } - - /* Setup EPS NAS security data */ - emm_as_set_security_data(&emm_as->sctx, _emm_data.security, FALSE, FALSE); - emm_as->ksi = EMM_AS_NO_KEY_AVAILABLE; - - if (_emm_data.security) { - if (_emm_data.security->type != EMM_KSI_NOT_AVAILABLE) { - emm_as->ksi = _emm_data.security->eksi; - } - - LOG_TRACE(INFO, "EMM-PROC - eps_encryption 0x%X", _emm_data.security->capability.eps_encryption); - LOG_TRACE(INFO, "EMM-PROC - eps_integrity 0x%X", _emm_data.security->capability.eps_integrity); - emm_as->encryption = _emm_data.security->capability.eps_encryption; - emm_as->integrity = _emm_data.security->capability.eps_integrity; - } - - /* - * Notify ESM that initiation of a PDN connectivity procedure - * is requested to setup a default EPS bearer - */ - esm_sap.primitive = ESM_PDN_CONNECTIVITY_REQ; - esm_sap.is_standalone = FALSE; - esm_sap.data.pdn_connect.is_defined = TRUE; - esm_sap.data.pdn_connect.cid = 1; - /* TODO: PDN type should be set according to the IP capability of the UE */ - esm_sap.data.pdn_connect.pdn_type = NET_PDN_TYPE_IPV4V6; - esm_sap.data.pdn_connect.apn = NULL; - esm_sap.data.pdn_connect.is_emergency = _emm_data.is_emergency; - rc = esm_sap_send(&esm_sap); - - if (rc != RETURNerror) { - /* Setup EMM procedure handler to be executed upon receiving - * lower layer notification */ - rc = emm_proc_lowerlayer_initialize(emm_proc_attach_request, - emm_proc_attach_failure, - emm_proc_attach_release, NULL); - - if (rc != RETURNok) { - LOG_TRACE(WARNING, "Failed to initialize EMM procedure handler"); - LOG_FUNC_RETURN (RETURNerror); - } - - /* Start T3410 timer */ - T3410.id = nas_timer_start(T3410.sec, _emm_attach_t3410_handler, NULL); - LOG_TRACE(INFO,"EMM-PROC - Timer T3410 (%d) expires in %ld seconds", - T3410.id, T3410.sec); - /* Stop T3402 and T3411 timers if running */ - T3402.id = nas_timer_stop(T3402.id); - T3411.id = nas_timer_stop(T3411.id); - - /* - * Notify EMM-AS SAP that a RRC connection establishment procedure - * is requested from the Access-Stratum to send initial NAS message - * attach request to the network - */ - emm_sap.primitive = EMMAS_ESTABLISH_REQ; - /* Get the PDN connectivity request to transfer within the ESM - * container of the initial attach request message */ - emm_sap.u.emm_as.u.establish.NASmsg = esm_sap.send; - rc = emm_sap_send(&emm_sap); - } - - LOG_FUNC_RETURN(rc); -} - -/**************************************************************************** - ** ** - ** Name: emm_proc_attach_request() ** - ** ** - ** Description: Performs the attach procedure upon receipt of indication ** - ** from lower layers that Attach Request message has been ** - ** successfully delivered to the network. ** - ** ** - ** Inputs: args: Not used ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -int emm_proc_attach_request(void *args) -{ - LOG_FUNC_IN; - - emm_sap_t emm_sap; - int rc; - - /* - * Notify EMM that Attach Request has been sent to the network - */ - emm_sap.primitive = EMMREG_ATTACH_REQ; - rc = emm_sap_send(&emm_sap); - - LOG_FUNC_RETURN(rc); -} - -/**************************************************************************** - ** ** - ** Name: emm_proc_attach_accept() ** - ** ** - ** Description: Performs the attach procedure accepted by the network. ** - ** ** - ** 3GPP TS 24.301, section 5.5.1.2.4 ** - ** Upon receiving the ATTACH ACCEPT message, the UE shall ** - ** stop timer T3410 and send an ATTACH COMPLETE message to ** - ** the MME. ** - ** ** - ** Inputs: t3412: Value of the T3412 timer in seconds ** - ** t3402: Value of the T3402 timer in seconds ** - ** t3423: Value of the T3423 timer in seconds ** - ** n_tais: Number of tracking area identities contai- ** - ** ned in the TAI list ** - ** tai: The TAI list that identifies the tracking ** - ** areas the UE is registered to ** - ** guti: New UE's temporary identity assigned by ** - ** the MME (GUTI reallocation) ** - ** n_eplmns: Number of equivalent PLMNs ** - ** eplmns: List of equivalent PLMNs ** - ** esm_msg: Activate default EPS bearer context re- ** - ** quest ESM message ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: RETURNok, RETURNerror ** - ** Others: _emm_data, T3412, T3402, T3423 ** - ** ** - ***************************************************************************/ -int emm_proc_attach_accept(long t3412, long t3402, long t3423, - int n_tais, tai_t *tai, GUTI_t *guti, - int n_eplmns, plmn_t *eplmn, - const OctetString *esm_msg) -{ - LOG_FUNC_IN; - - emm_sap_t emm_sap; - esm_sap_t esm_sap; - int rc; - int i; - int j; - - LOG_TRACE(INFO, "EMM-PROC - EPS attach accepted by the network"); - - /* Stop timer T3410 */ - LOG_TRACE(INFO, "EMM-PROC - Stop timer T3410 (%d)", T3410.id); - T3410.id = nas_timer_stop(T3410.id); - - /* Delete old TAI list and store the received TAI list */ - _emm_data.ltai.n_tais = n_tais; - - for (i = 0; (i < n_tais) && (i < EMM_DATA_TAI_MAX); i++) { - _emm_data.ltai.tai[i] = tai[i]; - } - - /* Update periodic tracking area update timer value */ - T3412.sec = t3412; - - /* Update attach failure timer value */ - if ( !(t3402 < 0) ) { - T3402.sec = t3402; - } - - /* Update E-UTRAN deactivate ISR timer value */ - if ( !(t3423 < 0) ) { - T3423.sec = t3423; - } - - /* Delete old GUTI and store the new assigned GUTI if provided */ - if (guti) { - *_emm_data.guti = *guti; - } - - /* Update the stored list of equivalent PLMNs */ - _emm_data.nvdata.eplmn.n_plmns = 0; - - if (n_eplmns > 0) { - for (i = 0; (i < n_eplmns) && (i < EMM_DATA_EPLMN_MAX); i++) { - int is_forbidden = FALSE; - - if (!_emm_data.is_emergency) { - /* If the attach procedure is not for emergency bearer - * services, the UE shall remove from the list any PLMN - * code that is already in the list of forbidden PLMNs */ - for (j = 0; j < _emm_data.fplmn.n_plmns; j++) { - if (PLMNS_ARE_EQUAL(eplmn[i], _emm_data.fplmn.plmn[j])) { - is_forbidden = TRUE; - break; - } - } - } - - if ( !is_forbidden ) { - _emm_data.nvdata.eplmn.plmn[_emm_data.nvdata.eplmn.n_plmns++] = - eplmn[i]; - } - } - - /* Add the PLMN code of the registered PLMN that sent the list */ - if (_emm_data.nvdata.eplmn.n_plmns < EMM_DATA_EPLMN_MAX) { - _emm_data.nvdata.eplmn.plmn[_emm_data.nvdata.eplmn.n_plmns++] = - _emm_data.splmn; - } - } - - /* - * Notify ESM that a default EPS bearer has to be activated - */ - esm_sap.primitive = ESM_DEFAULT_EPS_BEARER_CONTEXT_ACTIVATE_REQ; - esm_sap.is_standalone = FALSE; - esm_sap.recv = esm_msg; - rc = esm_sap_send(&esm_sap); - - if ( (rc != RETURNerror) && (esm_sap.err == ESM_SAP_SUCCESS) ) { - /* Setup EMM procedure handler to be executed upon receiving - * lower layer notification */ - rc = emm_proc_lowerlayer_initialize(emm_proc_attach_complete, - emm_proc_attach_failure, - NULL, NULL); - - if (rc != RETURNok) { - LOG_TRACE(WARNING, - "EMM-PROC - Failed to initialize EMM procedure handler"); - LOG_FUNC_RETURN (RETURNerror); - } - - /* - * Notify EMM-AS SAP that Attach Complete message together with - * an Activate Default EPS Bearer Context Accept message has to - * be sent to the network - */ - emm_sap.primitive = EMMAS_DATA_REQ; - emm_sap.u.emm_as.u.data.guti = _emm_data.guti; - emm_sap.u.emm_as.u.data.ueid = 0; - /* Setup EPS NAS security data */ - emm_as_set_security_data(&emm_sap.u.emm_as.u.data.sctx, - _emm_data.security, FALSE, TRUE); - /* Get the activate default EPS bearer context accept message - * to be transfered within the ESM container of the attach - * complete message */ - emm_sap.u.emm_as.u.data.NASinfo = EMM_AS_NAS_DATA_ATTACH; - emm_sap.u.emm_as.u.data.NASmsg = esm_sap.send; - rc = emm_sap_send(&emm_sap); - } else if (esm_sap.err != ESM_SAP_DISCARDED) { - /* 3GPP TS 24.301, section 5.5.1.2.6, case j - * If the ACTIVATE DEFAULT BEARER CONTEXT REQUEST message combined - * with the ATTACH ACCEPT is not accepted by the UE due to failure - * in the UE ESM sublayer, then the UE shall initiate the detach - * procedure by sending a DETACH REQUEST message to the network. - */ - emm_sap.primitive = EMMREG_DETACH_INIT; - rc = emm_sap_send(&emm_sap); - } else { - /* - * ESM procedure failed and, received message has been discarded or - * Status message has been returned; ignore ESM procedure failure - */ - rc = RETURNok; - } - - LOG_FUNC_RETURN(rc); -} - -/**************************************************************************** - ** ** - ** Name: emm_proc_attach_reject() ** - ** ** - ** Description: Performs the attach procedure rejected by the network. ** - ** ** - ** 3GPP TS 24.301, section 5.5.1.2.5 ** - ** Upon receiving the ATTACH REJECT message, the UE shall ** - ** stop timer T3410 and take actions depending on the EMM ** - ** cause value received. ** - ** ** - ** Inputs: emm_cause: EMM cause indicating why the network re- ** - ** jected the attach request ** - ** esm_msg: PDN connectivity reject ESM message ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: RETURNok, RETURNerror ** - ** Others: _emm_data, _emm_attach_data, T3410 ** - ** ** - ***************************************************************************/ -int emm_proc_attach_reject(int emm_cause, const OctetString *esm_msg) -{ - LOG_FUNC_IN; - - emm_sap_t emm_sap; - int rc; - - LOG_TRACE(WARNING, "EMM-PROC - EPS attach rejected by the network, " - "EMM cause = %d", emm_cause); - - /* Stop timer T3410 */ - LOG_TRACE(INFO, "EMM-PROC - Stop timer T3410 (%d)", T3410.id); - T3410.id = nas_timer_stop(T3410.id); - - /* Update the EPS update status, the GUTI, the visited registered TAI and - * the eKSI */ - switch (emm_cause) { - case EMM_CAUSE_ILLEGAL_UE: - case EMM_CAUSE_ILLEGAL_ME: - case EMM_CAUSE_EPS_NOT_ALLOWED: - case EMM_CAUSE_BOTH_NOT_ALLOWED: - case EMM_CAUSE_PLMN_NOT_ALLOWED: - case EMM_CAUSE_NOT_AUTHORIZED_IN_PLMN: - case EMM_CAUSE_EPS_NOT_ALLOWED_IN_PLMN: - case EMM_CAUSE_TA_NOT_ALLOWED: - case EMM_CAUSE_ROAMING_NOT_ALLOWED: - case EMM_CAUSE_NO_SUITABLE_CELLS: - /* Set the EPS update status to EU3 ROAMING NOT ALLOWED */ - _emm_data.status = EU3_ROAMING_NOT_ALLOWED; - /* Delete the GUTI */ - _emm_data.guti = NULL; - /* Delete the last visited registered TAI */ - _emm_data.tai = NULL; - - /* Delete the eKSI */ - if (_emm_data.security) { - _emm_data.security->type = EMM_KSI_NOT_AVAILABLE; - } - - break; - - default : - break; - } - - /* Update list of equivalents PLMNs and attach attempt counter */ - switch (emm_cause) { - case EMM_CAUSE_ILLEGAL_UE: - case EMM_CAUSE_ILLEGAL_ME: - case EMM_CAUSE_EPS_NOT_ALLOWED: - case EMM_CAUSE_BOTH_NOT_ALLOWED: - /* Consider the USIM as invalid for EPS services */ - _emm_data.usim_is_valid = FALSE; - /* Delete the list of equivalent PLMNs */ - _emm_data.nvdata.eplmn.n_plmns = 0; - break; - - case EMM_CAUSE_PLMN_NOT_ALLOWED: - case EMM_CAUSE_NOT_AUTHORIZED_IN_PLMN: - case EMM_CAUSE_ROAMING_NOT_ALLOWED: - /* Delete the list of equivalent PLMNs */ - _emm_data.nvdata.eplmn.n_plmns = 0; - /* Reset the attach attempt counter */ - _emm_attach_data.attempt_count = 0; - break; - - case EMM_CAUSE_TA_NOT_ALLOWED: - case EMM_CAUSE_EPS_NOT_ALLOWED_IN_PLMN: - case EMM_CAUSE_NO_SUITABLE_CELLS: - /* Reset the attach attempt counter */ - _emm_attach_data.attempt_count = 0; - break; - - case EMM_CAUSE_ESM_FAILURE: - - /* 3GPP TS 24.301, section 5.5.1.2.6, case d */ - if (_emm_data.NAS_SignallingPriority != 1) { - /* The UE is not configured for NAS signalling low priority; - * set the attach attempt counter to 5 */ - _emm_attach_data.attempt_count = EMM_ATTACH_COUNTER_MAX; - } - - break; - - case EMM_CAUSE_SEMANTICALLY_INCORRECT: - case EMM_CAUSE_INVALID_MANDATORY_INFO: - case EMM_CAUSE_MESSAGE_TYPE_NOT_IMPLEMENTED: - case EMM_CAUSE_IE_NOT_IMPLEMENTED: - case EMM_CAUSE_PROTOCOL_ERROR: - /* 3GPP TS 24.301, section 5.5.1.2.6, case d - * Set the attach attempt counter to 5 */ - _emm_attach_data.attempt_count = EMM_ATTACH_COUNTER_MAX; - break; - - default : - break; - } - - /* Update "forbidden lists" */ - switch (emm_cause) { - case EMM_CAUSE_PLMN_NOT_ALLOWED: - case EMM_CAUSE_NOT_AUTHORIZED_IN_PLMN: - /* Store the PLMN identity in the "forbidden PLMN list" */ - _emm_data.fplmn.plmn[_emm_data.fplmn.n_plmns++] = _emm_data.splmn; - break; - - case EMM_CAUSE_TA_NOT_ALLOWED: - /* Store the current TAI in the list of "forbidden tracking - * areas for regional provision of service" */ - _emm_data.ftai.tai[_emm_data.ftai.n_tais++] = *_emm_data.tai; - break; - - case EMM_CAUSE_ROAMING_NOT_ALLOWED: - /* Store the current TAI in the list of "forbidden tracking - * areas for roaming" */ - _emm_data.ftai_roaming.tai[_emm_data.ftai_roaming.n_tais++] = *_emm_data.tai; - break; - - case EMM_CAUSE_EPS_NOT_ALLOWED_IN_PLMN: - /* Store the PLMN identity in the "forbidden PLMNs for GPRS - * service" list */ - _emm_data.fplmn_gprs.plmn[_emm_data.fplmn_gprs.n_plmns++] = _emm_data.splmn; - break; - - default : - break; - } - - /* Update state of EMM sublayer */ - switch (emm_cause) { - case EMM_CAUSE_ILLEGAL_UE: - case EMM_CAUSE_ILLEGAL_ME: - case EMM_CAUSE_EPS_NOT_ALLOWED: - case EMM_CAUSE_BOTH_NOT_ALLOWED: - /* - * Notify EMM that EPS attach is rejected - */ - emm_sap.primitive = EMMREG_ATTACH_REJ; - break; - - case EMM_CAUSE_PLMN_NOT_ALLOWED: - case EMM_CAUSE_NOT_AUTHORIZED_IN_PLMN: - case EMM_CAUSE_EPS_NOT_ALLOWED_IN_PLMN: - /* - * Notify EMM that the UE has to perform a PLMN selection because - * it is not allowed to operate in the currently selected PLMN - */ - emm_sap.primitive = EMMREG_REGISTER_REQ; - break; - - case EMM_CAUSE_TA_NOT_ALLOWED: - case EMM_CAUSE_ROAMING_NOT_ALLOWED: - case EMM_CAUSE_NO_SUITABLE_CELLS: - /* - * Notify EMM that the UE failed to register to the network for - * EPS services because it is not allowed to operate in the - * requested tracking area - */ - emm_sap.primitive = EMMREG_REGISTER_REJ; - break; - - case EMM_CAUSE_IMEI_NOT_ACCEPTED: - if (_emm_data.is_emergency) { - /* - * Notify EMM that the UE failed to register to the network - * for emergency bearer services because "IMEI not accepted" - */ - emm_sap.primitive = EMMREG_NO_IMSI; - break; - } - - /* break is volontary missing */ - - default : - /* Other values are considered as abnormal cases - * 3GPP TS 24.301, section 5.5.1.2.6, case d */ - _emm_attach_abnormal_cases_bcd(&emm_sap); - break; - } - - rc = emm_sap_send(&emm_sap); - - /* - * Notify ESM that the network rejected connectivity to the PDN - */ - if (esm_msg != NULL) { - esm_sap_t esm_sap; - esm_sap.primitive = ESM_PDN_CONNECTIVITY_REJ; - esm_sap.is_standalone = FALSE; - esm_sap.recv = esm_msg; - rc = esm_sap_send(&esm_sap); - } - - LOG_FUNC_RETURN(rc); -} - -/**************************************************************************** - ** ** - ** Name: emm_proc_attach_complete() ** - ** ** - ** Description: Terminates the attach procedure when Attach Complete mes- ** - ** sage has been successfully delivered to the MME. ** - ** ** - ** 3GPP TS 24.301, section 5.5.1.2.4 ** - ** Upon successfully sending the ATTACH COMPLETE message, ** - ** the UE shall reset the attach attempt counter and tra- ** - ** cking area updating attempt counter, enter state EMM- ** - ** REGISTERED and set the EPS update status to EU1-UPDATED. ** - ** ** - ** Inputs: args: Not used ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: RETURNok, RETURNerror ** - ** Others: _emm_data, _emm_attach_data ** - ** ** - ***************************************************************************/ -int emm_proc_attach_complete(void *args) -{ - LOG_FUNC_IN; - - emm_sap_t emm_sap; - esm_sap_t esm_sap; - int rc; - - LOG_TRACE(INFO, "EMM-PROC - EPS attach complete"); - - /* Reset EMM procedure handler */ - (void) emm_proc_lowerlayer_initialize(NULL, NULL, NULL, NULL); - - /* Reset the attach attempt counter */ - _emm_attach_data.attempt_count = 0; - /* TODO: Reset the tracking area updating attempt counter */ - - /* Set the EPS update status to EU1 UPDATED */ - _emm_data.status = EU1_UPDATED; - _emm_data.is_attached = TRUE; - - /* - * Notify EMM that network attach complete message has been delivered - * to the network - */ - emm_sap.primitive = EMMREG_ATTACH_CNF; - rc = emm_sap_send(&emm_sap); - - if (rc != RETURNerror) { - /* - * Notify ESM that the Activate Default EPS Bearer Context Accept - * message has been delivered to the network within the Attach - * Complete message - */ - esm_sap.primitive = ESM_DEFAULT_EPS_BEARER_CONTEXT_ACTIVATE_CNF; - esm_sap.is_standalone = FALSE; - rc = esm_sap_send(&esm_sap); - } - - LOG_FUNC_RETURN(rc); -} - -/**************************************************************************** - ** ** - ** Name: emm_proc_attach_failure() ** - ** ** - ** Description: Performs the attach procedure abnormal case upon receipt ** - ** of transmission failure of Attach Request message or At- ** - ** tach Complete message. ** - ** ** - ** 3GPP TS 24.301, section 5.5.1.2.6, cases h and i ** - ** The UE shall restart the attach procedure when timer ** - ** T3411 expires. ** - ** ** - ** Inputs: is_initial: TRUE if the NAS message that failed to be ** - ** transfered is an initial NAS message (ESM ** - ** message embedded within an Attach Request ** - ** message) ** - ** args: Not used ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: RETURNok, RETURNerror ** - ** Others: T3410, T3411 ** - ** ** - ***************************************************************************/ -int emm_proc_attach_failure(int is_initial, void *args) -{ - LOG_FUNC_IN; - - int rc = RETURNok; - esm_sap_t esm_sap; - - LOG_TRACE(WARNING, "EMM-PROC - EPS attach failure"); - - /* Reset EMM procedure handler */ - (void) emm_proc_lowerlayer_initialize(NULL, NULL, NULL, NULL); - - /* Stop timer T3410 if still running */ - if (T3410.id != NAS_TIMER_INACTIVE_ID) { - LOG_TRACE(INFO, "EMM-PROC - Stop timer T3410 (%d)", T3410.id); - T3410.id = nas_timer_stop(T3410.id); - } - - if (is_initial) { - /* - * Notify ESM that the PDN CONNECTIVITY REQUEST message contained - * in the ESM message container IE of the ATTACH REQUEST has failed - * to be transmitted - */ - esm_sap.primitive = ESM_PDN_CONNECTIVITY_REJ; - esm_sap.is_standalone = FALSE; - esm_sap.recv = NULL; - } else { - /* - * Notify ESM that ACTIVATE DEFAULT EPS BEARER CONTEXT REQUEST message - * contained in the ESM message container IE of the ATTACH COMPLETE - * has failed to be transmitted - */ - esm_sap.primitive = ESM_DEFAULT_EPS_BEARER_CONTEXT_ACTIVATE_REJ; - esm_sap.is_standalone = FALSE; - esm_sap.recv = NULL; - } - - rc = esm_sap_send(&esm_sap); - - if (rc != RETURNerror) { - /* Start T3411 timer */ - T3411.id = nas_timer_start(T3411.sec, _emm_attach_t3411_handler, NULL); - LOG_TRACE(INFO, "EMM-PROC - Timer T3411 (%d) expires in %ld seconds", - T3411.id, T3411.sec); - } - - LOG_FUNC_RETURN(rc); -} - -/**************************************************************************** - ** ** - ** Name: emm_proc_attach_release() ** - ** ** - ** Description: Performs the attach procedure abnormal case upon receipt ** - ** of NAS signalling connection release indication. ** - ** ** - ** 3GPP TS 24.301, section 5.5.1.2.6, case b ** - ** The attach procedure shall be aborted and the UE shall ** - ** execute abnormal case attach procedure. ** - ** ** - ** Inputs: args: Not used ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -int emm_proc_attach_release(void *args) -{ - LOG_FUNC_IN; - - emm_sap_t emm_sap; - int rc; - - LOG_TRACE(WARNING, "EMM-PROC - NAS signalling connection released"); - - /* Execute abnormal case attach procedure */ - _emm_attach_abnormal_cases_bcd(&emm_sap); - - rc = emm_sap_send(&emm_sap); - - LOG_FUNC_RETURN(rc); -} - -/**************************************************************************** - ** ** - ** Name: emm_proc_attach_restart() ** - ** ** - ** Description: Restarts the attach procedure ** - ** ** - ** Inputs: None ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -int emm_proc_attach_restart(void) -{ - LOG_FUNC_IN; - - emm_sap_t emm_sap; - int rc; - - LOG_TRACE(INFO, "EMM-PROC - Restart EPS attach procedure"); - - /* - * Notify EMM that the attach procedure has to be restarted - */ - emm_sap.primitive = EMMREG_ATTACH_INIT; - emm_sap.u.emm_reg.u.attach.is_emergency = _emm_data.is_emergency; - rc = emm_sap_send(&emm_sap); - - LOG_FUNC_RETURN(rc); -} - -/**************************************************************************** - ** ** - ** Name: emm_proc_attach_set_emergency() ** - ** ** - ** Description: Set the emergency bearer services indicator ** - ** ** - ** Inputs: None ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: RETURNok, RETURNerror ** - ** Others: _emm_data ** - ** ** - ***************************************************************************/ -int emm_proc_attach_set_emergency(void) -{ - LOG_FUNC_IN; - - LOG_TRACE(WARNING, "EMM-PROC - UE is now attached to the network for " - "emergency bearer services only"); - - _emm_data.is_emergency = TRUE; - - LOG_FUNC_RETURN(RETURNok); -} - -/**************************************************************************** - ** ** - ** Name: emm_proc_attach_set_detach() ** - ** ** - ** Description: Reset the network attachment indicator and enter state ** - ** EMM-DEREGISTERED - ** ** - ** Inputs: None ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: RETURNok, RETURNerror ** - ** Others: _emm_data ** - ** ** - ***************************************************************************/ -int emm_proc_attach_set_detach(void) -{ - LOG_FUNC_IN; - - int rc; - - LOG_TRACE(WARNING, - "EMM-PROC - UE is now locally detached from the network"); - - /* Reset the network attachment indicator */ - _emm_data.is_attached = FALSE; - /* - * Notify that the UE is locally detached from the network - */ - emm_sap_t emm_sap; - emm_sap.primitive = EMMREG_DETACH_CNF; - rc = emm_sap_send(&emm_sap); - - LOG_FUNC_RETURN(rc); -} - -#endif /* * -------------------------------------------------------------------------- * Attach procedure executed by the MME * -------------------------------------------------------------------------- */ -#ifdef NAS_MME /**************************************************************************** ** ** ** Name: emm_proc_attach_request() ** @@ -1067,7 +181,7 @@ int emm_proc_attach_set_detach(void) ** the UE is registered to ** ** eea: Supported EPS encryption algorithms ** ** eia: Supported EPS integrity algorithms ** - ** esm_msg: PDN connectivity request ESM message ** + ** esm_msg_pP: PDN connectivity request ESM message ** ** Others: _emm_data ** ** ** ** Outputs: None ** @@ -1086,14 +200,14 @@ int emm_proc_attach_request( tai_t *tai, int eea, int eia, int ucs2, int uea, int uia, int gea, int umts_present, int gprs_present, - const OctetString *esm_msg) + const OctetString *esm_msg_pP) { LOG_FUNC_IN; int rc; emm_data_context_t ue_ctx; - LOG_TRACE(INFO, "EMM-PROC - EPS attach type = %s (%d) requested (ueid=0x%08x)", + LOG_TRACE(INFO, "EMM-PROC - EPS attach type = %s (%d) requested (ueid="NAS_UE_ID_FMT")", _emm_attach_type_str[type], type, ueid); LOG_TRACE(INFO, "EMM-PROC - umts_present = %u umts_present = %u", umts_present, gprs_present); @@ -1168,7 +282,7 @@ int emm_proc_attach_request( rc = emm_proc_attach_request(ueid, type, native_ksi, ksi, native_guti, guti, imsi, imei, tai, eea, eia, ucs2, uea, uia, gea, - umts_present, gprs_present, esm_msg); + umts_present, gprs_present, esm_msg_pP); } LOG_FUNC_RETURN(rc); @@ -1200,6 +314,15 @@ int emm_proc_attach_request( (*emm_ctx)->emm_cause = EMM_CAUSE_SUCCESS; (*emm_ctx)->_emm_fsm_status = EMM_INVALID; (*emm_ctx)->ueid = ueid; + /* + * Initialize EMM timers + */ + (*emm_ctx)->T3450.id = NAS_TIMER_INACTIVE_ID; + (*emm_ctx)->T3450.sec = T3450_DEFAULT_VALUE; + (*emm_ctx)->T3460.id = NAS_TIMER_INACTIVE_ID; + (*emm_ctx)->T3460.sec = T3460_DEFAULT_VALUE; + (*emm_ctx)->T3470.id = NAS_TIMER_INACTIVE_ID; + (*emm_ctx)->T3470.sec = T3470_DEFAULT_VALUE; emm_fsm_set_status(ueid, *emm_ctx, EMM_DEREGISTERED); #if defined(NAS_BUILT_IN_EPC) @@ -1210,7 +333,7 @@ int emm_proc_attach_request( if (tai) { LOG_TRACE(WARNING, - "EMM-PROC - Set tac %u in context %u ", + "EMM-PROC - Set tac %u in context", tai->tac); (*emm_ctx)->tac = tai->tac; } else { @@ -1221,7 +344,7 @@ int emm_proc_attach_request( /* Update the EMM context with the current attach procedure parameters */ rc = _emm_attach_update(*emm_ctx, ueid, type, ksi, guti, imsi, imei, - eea, eia, ucs2, uea, uia, gea, umts_present, gprs_present, esm_msg); + eea, eia, ucs2, uea, uia, gea, umts_present, gprs_present, esm_msg_pP); if (rc != RETURNok) { LOG_TRACE(WARNING, "EMM-PROC - Failed to update EMM context"); @@ -1301,7 +424,7 @@ int emm_proc_attach_reject(unsigned int ueid, int emm_cause) ** the GUTI sent in the ATTACH ACCEPT message as valid. ** ** ** ** Inputs: ueid: UE lower layer identifier ** - ** esm_msg: Activate default EPS bearer context accept ** + ** esm_msg_pP: Activate default EPS bearer context accept ** ** ESM message ** ** Others: _emm_data ** ** ** @@ -1310,7 +433,7 @@ int emm_proc_attach_reject(unsigned int ueid, int emm_cause) ** Others: _emm_data, T3450 ** ** ** ***************************************************************************/ -int emm_proc_attach_complete(unsigned int ueid, const OctetString *esm_msg) +int emm_proc_attach_complete(unsigned int ueid, const OctetString *esm_msg_pP) { emm_data_context_t *emm_ctx = NULL; int rc = RETURNerror; @@ -1319,11 +442,7 @@ int emm_proc_attach_complete(unsigned int ueid, const OctetString *esm_msg) LOG_FUNC_IN; - LOG_TRACE(INFO, "EMM-PROC - EPS attach complete (ueid=%u)", ueid); - - /* Stop timer T3450 */ - LOG_TRACE(INFO, "EMM-PROC - Stop timer T3450 (%d)", T3450.id); - T3450.id = nas_timer_stop(T3450.id); + LOG_TRACE(INFO, "EMM-PROC - EPS attach complete (ueid="NAS_UE_ID_FMT")", ueid); /* Release retransmission timer parameters */ attach_data_t *data = (attach_data_t *)(emm_proc_common_get_args(ueid)); @@ -1332,28 +451,27 @@ int emm_proc_attach_complete(unsigned int ueid, const OctetString *esm_msg) if (data->esm_msg.length > 0) { free(data->esm_msg.value); } - free(data); } /* Get the UE context */ - #if defined(NAS_BUILT_IN_EPC) - if (ueid > 0) { emm_ctx = emm_data_context_get(&_emm_data, ueid); } - #else - if (ueid < EMM_DATA_NB_UE_MAX) { emm_ctx = _emm_data.ctx[ueid]; } - #endif if (emm_ctx) { - /* Delete the old GUTI and consider the GUTI sent in the Attach + /* Stop timer T3450 */ + LOG_TRACE(INFO, "EMM-PROC - Stop timer T3450 (%d)", emm_ctx->T3450.id); + emm_ctx->T3450.id = nas_timer_stop(emm_ctx->T3450.id); + MSC_LOG_EVENT(MSC_NAS_EMM_MME, "0 T3450 stopped UE "NAS_UE_ID_FMT" ", ueid); + + /* Delete the old GUTI and consider the GUTI sent in the Attach * Accept message as valid */ emm_ctx->guti_is_new = FALSE; emm_ctx->old_guti = NULL; @@ -1364,7 +482,7 @@ int emm_proc_attach_complete(unsigned int ueid, const OctetString *esm_msg) esm_sap.primitive = ESM_DEFAULT_EPS_BEARER_CONTEXT_ACTIVATE_CNF; esm_sap.is_standalone = FALSE; esm_sap.ueid = ueid; - esm_sap.recv = esm_msg; + esm_sap.recv = esm_msg_pP; esm_sap.ctx = emm_ctx; rc = esm_sap_send(&esm_sap); } else { @@ -1400,236 +518,13 @@ int emm_proc_attach_complete(unsigned int ueid, const OctetString *esm_msg) LOG_FUNC_RETURN(rc); } -#endif // NAS_MME /****************************************************************************/ /********************* L O C A L F U N C T I O N S *********************/ /****************************************************************************/ -#ifdef NAS_UE -/* - * -------------------------------------------------------------------------- - * Timer handlers - * -------------------------------------------------------------------------- - */ -/**************************************************************************** - ** ** - ** Name: _emm_attach_t3410_handler() ** - ** ** - ** Description: T3410 timeout handler ** - ** ** - ** 3GPP TS 24.301, section 5.5.1.2.6, case c ** - ** Upon T3410 timer expiration, the attach procedure shall ** - ** be aborted and the UE shall execute abnormal case attach ** - ** procedure. ** - ** The NAS signalling connection shall be released locally. ** - ** ** - ** Inputs: args: handler parameters ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: None ** - ** Others: T3410 ** - ** ** - ***************************************************************************/ -void *_emm_attach_t3410_handler(void *args) -{ - LOG_FUNC_IN; - emm_sap_t emm_sap; - int rc; - - LOG_TRACE(WARNING, "EMM-PROC - T3410 timer expired"); - - /* Stop T3410 timer */ - T3410.id = nas_timer_stop(T3410.id); - /* Execute abnormal case attach procedure */ - _emm_attach_abnormal_cases_bcd(&emm_sap); - - rc = emm_sap_send(&emm_sap); - - if (rc != RETURNerror) { - /* Locally release the NAS signalling connection */ - _emm_data.ecm_status = ECM_IDLE; - } - - LOG_FUNC_RETURN(NULL); -} - -/**************************************************************************** - ** ** - ** Name: _emm_attach_t3411_handler() ** - ** ** - ** Description: T3411 timeout handler ** - ** ** - ** 3GPP TS 24.301, section 5.5.1.2.6 ** - ** Upon T3411 timer expiration, the attach procedure shall ** - ** be restarted, if still required by ESM sublayer. ** - ** ** - ** Inputs: args: handler parameters ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: None ** - ** Others: T3411 ** - ** ** - ***************************************************************************/ -static void *_emm_attach_t3411_handler(void *args) -{ - LOG_FUNC_IN; - - emm_sap_t emm_sap; - - LOG_TRACE(WARNING, "EMM-PROC - T3411 timer expired"); - - /* Stop T3411 timer */ - T3411.id = nas_timer_stop(T3411.id); - /* - * Notify EMM that timer T3411 expired and attach procedure has to be - * restarted - */ - emm_sap.primitive = EMMREG_ATTACH_INIT; - emm_sap.u.emm_reg.u.attach.is_emergency = _emm_data.is_emergency; - - (void) emm_sap_send(&emm_sap); - - LOG_FUNC_RETURN(NULL); -} - -/**************************************************************************** - ** ** - ** Name: _emm_attach_t3402_handler() ** - ** ** - ** Description: T3402 timeout handler ** - ** ** - ** Upon T3402 timer expiration: ** - ** 3GPP TS 24.301, section 5.5.1.1 ** - ** the attach attempt counter shall be reset when the UE is ** - ** in substate DEREGISTERED.ATTEMPTING-TO-ATTACH; ** - ** 3GPP TS 24.301, section 5.2.2.3.3 ** - ** the UE shall initiate an attach or combined attach proce- ** - ** dure in substate DEREGISTERED.ATTEMPTING-TO-ATTACH; ** - ** ** - ** Inputs: args: handler parameters ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: None ** - ** Others: _emm_attach_data, T3402 ** - ** ** - ***************************************************************************/ -static void *_emm_attach_t3402_handler(void *args) -{ - LOG_FUNC_IN; - - emm_sap_t emm_sap; - - LOG_TRACE(WARNING, "EMM-PROC - T3402 timer expired"); - - /* Stop T3402 timer */ - T3402.id = nas_timer_stop(T3402.id); - /* Reset the attach attempt counter */ - _emm_attach_data.attempt_count = 0; - /* - * Notify EMM that timer T3402 expired and attach procedure has to be - * restarted - */ - emm_sap.primitive = EMMREG_ATTACH_INIT; - emm_sap.u.emm_reg.u.attach.is_emergency = _emm_data.is_emergency; - - (void) emm_sap_send(&emm_sap); - - LOG_FUNC_RETURN(NULL); -} - -/* - * -------------------------------------------------------------------------- - * Abnormal cases in the UE - * -------------------------------------------------------------------------- - */ - -/**************************************************************************** - ** ** - ** Name: _emm_attach_abnormal_cases_bcd() ** - ** ** - ** Description: Performs the abnormal case attach procedure. ** - ** ** - ** 3GPP TS 24.301, section 5.5.1.2.6, cases b, c and d ** - ** The Timer T3410 shall be stopped if still running, the ** - ** attach attempt counter shall be incremented and the UE ** - ** shall proceed depending on whether the attach attempt ** - ** counter reached its maximum value or not. ** - ** ** - ** Inputs: None ** - ** Others: None ** - ** ** - ** Outputs: emm_sap: EMM service access point ** - ** Return: None ** - ** Others: _emm_data, _emm_attach_data, T3402, T3410, ** - ** T3411 ** - ** ** - ***************************************************************************/ -static void _emm_attach_abnormal_cases_bcd(emm_sap_t *emm_sap) -{ - LOG_FUNC_IN; - - LOG_TRACE(WARNING, "EMM-PROC - Abnormal case, attach counter = %d", - _emm_attach_data.attempt_count); - - /* Stop timer T3410 */ - if (T3410.id != NAS_TIMER_INACTIVE_ID) { - LOG_TRACE(INFO, "EMM-PROC - Stop timer T3410 (%d)", T3410.id); - T3410.id = nas_timer_stop(T3410.id); - } - - if (_emm_attach_data.attempt_count < EMM_ATTACH_COUNTER_MAX) { - /* Increment the attach attempt counter */ - _emm_attach_data.attempt_count += 1; - /* Start T3411 timer */ - T3411.id = nas_timer_start(T3411.sec, _emm_attach_t3411_handler, NULL); - LOG_TRACE(INFO, "EMM-PROC - Timer T3411 (%d) expires in %ld seconds", - T3411.id, T3411.sec); - /* - * Notify EMM that the attempt to attach for EPS services failed and - * the attach attempt counter didn't reach its maximum value; network - * attach procedure shall be restarted when timer T3411 expires. - */ - emm_sap->primitive = EMMREG_ATTACH_FAILED; - } else { - /* Delete the GUTI */ - _emm_data.guti = NULL; - /* Delete the TAI list */ - _emm_data.ltai.n_tais = 0; - /* Delete the last visited registered TAI */ - _emm_data.tai = NULL; - /* Delete the list of equivalent PLMNs */ - _emm_data.nvdata.eplmn.n_plmns = 0; - - /* Delete the eKSI */ - if (_emm_data.security) { - _emm_data.security->type = EMM_KSI_NOT_AVAILABLE; - } - - /* Set the EPS update status to EU2 NOT UPDATED */ - _emm_data.status = EU2_NOT_UPDATED; - - /* Start T3402 timer */ - T3402.id = nas_timer_start(T3402.sec, _emm_attach_t3402_handler, NULL); - LOG_TRACE(INFO, "EMM-PROC - Timer T3402 (%d) expires in %ld seconds", - T3402.id, T3402.sec); - /* - * Notify EMM that the attempt to attach for EPS services failed and - * the attach attempt counter reached its maximum value. - */ - emm_sap->primitive = EMMREG_ATTACH_EXCEEDED; - } - - LOG_FUNC_OUT; -} -#endif // NAS_UE - -#ifdef NAS_MME /* * -------------------------------------------------------------------------- * Timer handlers @@ -1721,7 +616,7 @@ static int _emm_attach_release(void *args) emm_data_context_t *emm_ctx = (emm_data_context_t *)(args); if (emm_ctx) { - LOG_TRACE(WARNING, "EMM-PROC - Release UE context data (ueid=%u)", + LOG_TRACE(WARNING, "EMM-PROC - Release UE context data (ueid="NAS_UE_ID_FMT")", emm_ctx->ueid); unsigned int ueid = emm_ctx->ueid; @@ -1772,6 +667,25 @@ static int _emm_attach_release(void *args) emm_ctx->security = NULL; } + /* Stop timer T3450 */ + if (emm_ctx->T3450.id != NAS_TIMER_INACTIVE_ID) { + LOG_TRACE(INFO, "EMM-PROC - Stop timer T3450 (%d)", emm_ctx->T3450.id); + emm_ctx->T3450.id = nas_timer_stop(emm_ctx->T3450.id); + MSC_LOG_EVENT(MSC_NAS_EMM_MME, "0 T3450 stopped UE "NAS_UE_ID_FMT" ", emm_ctx->ueid); + } + /* Stop timer T3460 */ + if (emm_ctx->T3460.id != NAS_TIMER_INACTIVE_ID) { + LOG_TRACE(INFO, "EMM-PROC - Stop timer T3460 (%d)", emm_ctx->T3460.id); + emm_ctx->T3460.id = nas_timer_stop(emm_ctx->T3460.id); + MSC_LOG_EVENT(MSC_NAS_EMM_MME, "0 T3460 stopped UE "NAS_UE_ID_FMT" ", emm_ctx->ueid); + } + /* Stop timer T3470 */ + if (emm_ctx->T3470.id != NAS_TIMER_INACTIVE_ID) { + LOG_TRACE(INFO, "EMM-PROC - Stop timer T3470 (%d)", emm_ctx->T3460.id); + emm_ctx->T3470.id = nas_timer_stop(emm_ctx->T3470.id); + MSC_LOG_EVENT(MSC_NAS_EMM_MME, "0 T3470 stopped UE "NAS_UE_ID_FMT" ", emm_ctx->ueid); + } + /* Release the EMM context */ #if defined(NAS_BUILT_IN_EPC) emm_data_context_remove(&_emm_data, emm_ctx); @@ -1822,7 +736,7 @@ static int _emm_attach_reject(void *args) if (emm_ctx) { emm_sap_t emm_sap; LOG_TRACE(WARNING, "EMM-PROC - EMM attach procedure not accepted " - "by the network (ueid=%08x, cause=%d)", + "by the network (ueid="NAS_UE_ID_FMT", cause=%d)", emm_ctx->ueid, emm_ctx->emm_cause); /* * Notify EMM-AS SAP that Attach Reject message has to be sent @@ -1892,13 +806,20 @@ static int _emm_attach_abort(void *args) unsigned int ueid = data->ueid; esm_sap_t esm_sap; - LOG_TRACE(WARNING, "EMM-PROC - Abort the attach procedure (ueid=%u)", + LOG_TRACE(WARNING, "EMM-PROC - Abort the attach procedure (ueid="NAS_UE_ID_FMT")", ueid); - - /* Stop timer T3450 */ - if (T3450.id != NAS_TIMER_INACTIVE_ID) { - LOG_TRACE(INFO, "EMM-PROC - Stop timer T3450 (%d)", T3450.id); - T3450.id = nas_timer_stop(T3450.id); +#if defined(NAS_BUILT_IN_EPC) + ctx = emm_data_context_get(&_emm_data, ueid); +#else + ctx = _emm_data.ctx[ueid]; +#endif + if (ctx) { + /* Stop timer T3450 */ + if (ctx->T3450.id != NAS_TIMER_INACTIVE_ID) { + LOG_TRACE(INFO, "EMM-PROC - Stop timer T3450 (%d)", ctx->T3450.id); + ctx->T3450.id = nas_timer_stop(ctx->T3450.id); + MSC_LOG_EVENT(MSC_NAS_EMM_MME, "0 T3450 stopped UE "NAS_UE_ID_FMT" ", data->ueid); + } } /* Release retransmission timer parameters */ @@ -1908,11 +829,7 @@ static int _emm_attach_abort(void *args) free(data); -#if defined(NAS_BUILT_IN_EPC) - ctx = emm_data_context_get(&_emm_data, ueid); -#else - ctx = _emm_data.ctx[ueid]; -#endif + /* * Notify ESM that the network locally refused PDN connectivity @@ -1974,7 +891,7 @@ static int _emm_attach_identify(void *args) LOG_FUNC_IN; - LOG_TRACE(INFO, "EMM-PROC - Identify incoming UE (ueid=0x%08x) using %s", + LOG_TRACE(INFO, "EMM-PROC - Identify incoming UE (ueid="NAS_UE_ID_FMT") using %s", emm_ctx->ueid, (emm_ctx->imsi)? "IMSI" : (emm_ctx->guti)? "GUTI" : (emm_ctx->imei)? "IMEI" : "none"); @@ -2164,7 +1081,7 @@ static int _emm_attach_security(void *args) int rc; emm_data_context_t *emm_ctx = (emm_data_context_t *)(args); - LOG_TRACE(INFO, "EMM-PROC - Setup NAS security (ueid=%u)", emm_ctx->ueid); + LOG_TRACE(INFO, "EMM-PROC - Setup NAS security (ueid="NAS_UE_ID_FMT")", emm_ctx->ueid); /* Create new NAS security context */ if (emm_ctx->security == NULL) { @@ -2240,7 +1157,7 @@ static int _emm_attach(void *args) emm_data_context_t *emm_ctx = (emm_data_context_t *)(args); - LOG_TRACE(INFO, "EMM-PROC - Attach UE (ueid=%u)", emm_ctx->ueid); + LOG_TRACE(INFO, "EMM-PROC - Attach UE (ueid="NAS_UE_ID_FMT")", emm_ctx->ueid); /* 3GPP TS 24.401, Figure 5.3.2.1-1, point 5a * At this point, all NAS messages shall be protected by the NAS security @@ -2384,71 +1301,77 @@ static int _emm_attach_accept(emm_data_context_t *emm_ctx, attach_data_t *data) emm_sap_t emm_sap; int rc; - /* - * Notify EMM-AS SAP that Attach Accept message together with an Activate - * Default EPS Bearer Context Request message has to be sent to the UE - */ + // may be caused by timer not stopped when deleted context + if (emm_ctx) { + /* + * Notify EMM-AS SAP that Attach Accept message together with an Activate + * Default EPS Bearer Context Request message has to be sent to the UE + */ - emm_sap.primitive = EMMAS_ESTABLISH_CNF; - emm_sap.u.emm_as.u.establish.ueid = emm_ctx->ueid; + emm_sap.primitive = EMMAS_ESTABLISH_CNF; + emm_sap.u.emm_as.u.establish.ueid = emm_ctx->ueid; - if (emm_ctx->guti_is_new && emm_ctx->old_guti) { - /* Implicit GUTI reallocation; - * include the new assigned GUTI in the Attach Accept message */ - LOG_TRACE(INFO,"EMM-PROC - Implicit GUTI reallocation, include the new assigned GUTI in the Attach Accept message"); - emm_sap.u.emm_as.u.establish.UEid.guti = emm_ctx->old_guti; - emm_sap.u.emm_as.u.establish.new_guti = emm_ctx->guti; - } else if (emm_ctx->guti_is_new && emm_ctx->guti) { - /* include the new assigned GUTI in the Attach Accept message */ - LOG_TRACE(INFO,"EMM-PROC - Include the new assigned GUTI in the Attach Accept message"); - emm_sap.u.emm_as.u.establish.UEid.guti = emm_ctx->guti; - emm_sap.u.emm_as.u.establish.new_guti = emm_ctx->guti; - } else { - emm_sap.u.emm_as.u.establish.UEid.guti = emm_ctx->guti; + if (emm_ctx->guti_is_new && emm_ctx->old_guti) { + /* Implicit GUTI reallocation; + * include the new assigned GUTI in the Attach Accept message */ + LOG_TRACE(INFO,"EMM-PROC - Implicit GUTI reallocation, include the new assigned GUTI in the Attach Accept message"); + emm_sap.u.emm_as.u.establish.UEid.guti = emm_ctx->old_guti; + emm_sap.u.emm_as.u.establish.new_guti = emm_ctx->guti; + } else if (emm_ctx->guti_is_new && emm_ctx->guti) { + /* include the new assigned GUTI in the Attach Accept message */ + LOG_TRACE(INFO,"EMM-PROC - Include the new assigned GUTI in the Attach Accept message"); + emm_sap.u.emm_as.u.establish.UEid.guti = emm_ctx->guti; + emm_sap.u.emm_as.u.establish.new_guti = emm_ctx->guti; + } else { + emm_sap.u.emm_as.u.establish.UEid.guti = emm_ctx->guti; #warning "TEST LG FORCE GUTI IE IN ATTACH ACCEPT" - emm_sap.u.emm_as.u.establish.new_guti = emm_ctx->guti; - //emm_sap.u.emm_as.u.establish.new_guti = NULL; - } + emm_sap.u.emm_as.u.establish.new_guti = emm_ctx->guti; + //emm_sap.u.emm_as.u.establish.new_guti = NULL; + } - emm_sap.u.emm_as.u.establish.n_tacs = emm_ctx->n_tacs; - emm_sap.u.emm_as.u.establish.tac = emm_ctx->tac; - emm_sap.u.emm_as.u.establish.NASinfo = EMM_AS_NAS_INFO_ATTACH; - /* Setup EPS NAS security data */ - emm_as_set_security_data(&emm_sap.u.emm_as.u.establish.sctx, + emm_sap.u.emm_as.u.establish.n_tacs = emm_ctx->n_tacs; + emm_sap.u.emm_as.u.establish.tac = emm_ctx->tac; + emm_sap.u.emm_as.u.establish.NASinfo = EMM_AS_NAS_INFO_ATTACH; + /* Setup EPS NAS security data */ + emm_as_set_security_data(&emm_sap.u.emm_as.u.establish.sctx, emm_ctx->security, FALSE, TRUE); - LOG_TRACE(INFO,"EMM-PROC - encryption = 0x%X ", emm_sap.u.emm_as.u.establish.encryption); - LOG_TRACE(INFO,"EMM-PROC - integrity = 0x%X ", emm_sap.u.emm_as.u.establish.integrity); - emm_sap.u.emm_as.u.establish.encryption = emm_ctx->security->selected_algorithms.encryption; - emm_sap.u.emm_as.u.establish.integrity = emm_ctx->security->selected_algorithms.integrity; - LOG_TRACE(INFO,"EMM-PROC - encryption = 0x%X (0x%X)", + LOG_TRACE(INFO,"EMM-PROC - encryption = 0x%X ", emm_sap.u.emm_as.u.establish.encryption); + LOG_TRACE(INFO,"EMM-PROC - integrity = 0x%X ", emm_sap.u.emm_as.u.establish.integrity); + emm_sap.u.emm_as.u.establish.encryption = emm_ctx->security->selected_algorithms.encryption; + emm_sap.u.emm_as.u.establish.integrity = emm_ctx->security->selected_algorithms.integrity; + LOG_TRACE(INFO,"EMM-PROC - encryption = 0x%X (0x%X)", emm_sap.u.emm_as.u.establish.encryption, emm_ctx->security->selected_algorithms.encryption); - LOG_TRACE(INFO,"EMM-PROC - integrity = 0x%X (0x%X)", + LOG_TRACE(INFO,"EMM-PROC - integrity = 0x%X (0x%X)", emm_sap.u.emm_as.u.establish.integrity, emm_ctx->security->selected_algorithms.integrity); /* Get the activate default EPS bearer context request message to * transfer within the ESM container of the attach accept message */ - emm_sap.u.emm_as.u.establish.NASmsg = data->esm_msg; - LOG_TRACE(INFO,"EMM-PROC - NASmsg src size = %d NASmsg dst size = %d ", + emm_sap.u.emm_as.u.establish.NASmsg = data->esm_msg; + LOG_TRACE(INFO,"EMM-PROC - NASmsg src size = %d NASmsg dst size = %d ", data->esm_msg.length, emm_sap.u.emm_as.u.establish.NASmsg.length); - rc = emm_sap_send(&emm_sap); + rc = emm_sap_send(&emm_sap); - if (rc != RETURNerror) { - if (T3450.id != NAS_TIMER_INACTIVE_ID) { - /* Re-start T3450 timer */ - T3450.id = nas_timer_restart(T3450.id); - } else { - /* Start T3450 timer */ - T3450.id = nas_timer_start(T3450.sec, _emm_attach_t3450_handler, data); + if (rc != RETURNerror) { + if (emm_ctx->T3450.id != NAS_TIMER_INACTIVE_ID) { + /* Re-start T3450 timer */ + emm_ctx->T3450.id = nas_timer_restart(emm_ctx->T3450.id); + MSC_LOG_EVENT(MSC_NAS_EMM_MME, "0 T3450 restarted UE "NAS_UE_ID_FMT"", data->ueid); + } else { + /* Start T3450 timer */ + emm_ctx->T3450.id = nas_timer_start(emm_ctx->T3450.sec, _emm_attach_t3450_handler, data); + MSC_LOG_EVENT(MSC_NAS_EMM_MME, "0 T3450 started UE "NAS_UE_ID_FMT" ", data->ueid); + } + + LOG_TRACE(INFO,"EMM-PROC - Timer T3450 (%d) expires in %ld seconds", + emm_ctx->T3450.id, emm_ctx->T3450.sec); } - - LOG_TRACE(INFO,"EMM-PROC - Timer T3450 (%d) expires in %ld seconds", - T3450.id, T3450.sec); + } else { + LOG_TRACE(WARNING,"EMM-PROC - emm_ctx NULL"); } - LOG_FUNC_RETURN (rc); } @@ -2601,7 +1524,7 @@ static int _emm_attach_have_changed(const emm_data_context_t *ctx, ** imei: The IMEI provided by the UE ** ** eea: Supported EPS encryption algorithms ** ** eia: Supported EPS integrity algorithms ** - ** esm_msg: ESM message contained with the attach re- ** + ** esm_msg_pP: ESM message contained with the attach re- ** ** quest ** ** Others: None ** ** ** @@ -2615,7 +1538,7 @@ static int _emm_attach_update(emm_data_context_t *ctx, unsigned int ueid, GUTI_t *guti, imsi_t *imsi, imei_t *imei, int eea, int eia, int ucs2, int uea, int uia, int gea, int umts_present, int gprs_present, - const OctetString *esm_msg) + const OctetString *esm_msg_pP) { int mnc_length; LOG_FUNC_IN; @@ -2743,24 +1666,27 @@ static int _emm_attach_update(emm_data_context_t *ctx, unsigned int ueid, } /* The ESM message contained within the attach request */ - if (esm_msg->length > 0) { - if (ctx->esm_msg.length == 0) { - ctx->esm_msg.value = (uint8_t *)malloc(esm_msg->length); + if (esm_msg_pP->length > 0) { + if (ctx->esm_msg.value != NULL) { + free(ctx->esm_msg.value); + ctx->esm_msg.value = NULL; + ctx->esm_msg.length = 0; } + ctx->esm_msg.value = (uint8_t *)malloc(esm_msg_pP->length); + if (ctx->esm_msg.value != NULL) { - strncpy((char *)ctx->esm_msg.value, - (char *)esm_msg->value, esm_msg->length); + memcpy((char *)ctx->esm_msg.value, + (char *)esm_msg_pP->value, esm_msg_pP->length); + } else { LOG_FUNC_RETURN (RETURNerror); } } - ctx->esm_msg.length = esm_msg->length; + ctx->esm_msg.length = esm_msg_pP->length; /* Attachment indicator */ ctx->is_attached = FALSE; LOG_FUNC_RETURN (RETURNok); } - -#endif // NAS_MME diff --git a/openair-cn/NAS/MME/EMM/Authentication.c b/openair-cn/NAS/MME/EMM/Authentication.c new file mode 100644 index 0000000000..19eb5c13a8 --- /dev/null +++ b/openair-cn/NAS/MME/EMM/Authentication.c @@ -0,0 +1,660 @@ +/******************************************************************************* + OpenAirInterface + Copyright(c) 1999 - 2014 Eurecom + + OpenAirInterface is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + + OpenAirInterface is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with OpenAirInterface.The full GNU General Public License is + included in this distribution in the file called "COPYING". If not, + see . + + Contact Information + OpenAirInterface Admin: openair_admin@eurecom.fr + OpenAirInterface Tech : openair_tech@eurecom.fr + OpenAirInterface Dev : openair4g-devel@eurecom.fr + + Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. + + *******************************************************************************/ +/***************************************************************************** +Source Authentication.c + +Version 0.1 + +Date 2013/03/04 + +Product NAS stack + +Subsystem EPS Mobility Management + +Author Frederic Maurel + +Description Defines the authentication EMM procedure executed by the + Non-Access Stratum. + + The purpose of the EPS authentication and key agreement (AKA) + procedure is to provide mutual authentication between the user + and the network and to agree on a key KASME. The procedure is + always initiated and controlled by the network. However, the + UE can reject the EPS authentication challenge sent by the + network. + + A partial native EPS security context is established in the + UE and the network when an EPS authentication is successfully + performed. The computed key material KASME is used as the + root for the EPS integrity protection and ciphering key + hierarchy. + +*****************************************************************************/ + +#include // malloc, free +#include // memcpy, memcmp, memset +#include // htons + +#include "emm_proc.h" +#include "nas_log.h" +#include "nas_timer.h" +#include "emmData.h" +#include "emm_sap.h" +#include "emm_cause.h" + +# if defined(NAS_BUILT_IN_EPC) +# include "nas_itti_messaging.h" +# endif +#include "msc.h" + +/****************************************************************************/ +/**************** E X T E R N A L D E F I N I T I O N S ****************/ +/****************************************************************************/ + +/****************************************************************************/ +/******************* L O C A L D E F I N I T I O N S *******************/ +/****************************************************************************/ + +/* + * -------------------------------------------------------------------------- + * Internal data handled by the authentication procedure in the UE + * -------------------------------------------------------------------------- + */ + +/* + * -------------------------------------------------------------------------- + * Internal data handled by the authentication procedure in the MME + * -------------------------------------------------------------------------- + */ +/* + * Timer handlers + */ +static void *_authentication_t3460_handler(void *); + +/* + * Function executed whenever the ongoing EMM procedure that initiated + * the authentication procedure is aborted or the maximum value of the + * retransmission timer counter is exceed + */ +static int _authentication_abort(void *); + +/* + * Internal data used for authentication procedure + */ +typedef struct { + unsigned int ueid; /* UE identifier */ +#define AUTHENTICATION_COUNTER_MAX 5 + unsigned int retransmission_count; /* Retransmission counter */ + int ksi; /* NAS key set identifier */ + OctetString rand; /* Random challenge number */ + OctetString autn; /* Authentication token */ + int notify_failure; /* Indicates whether the authentication + * procedure failure shall be notified + * to the ongoing EMM procedure */ +} authentication_data_t; + +static int _authentication_request(authentication_data_t *data); +static int _authentication_reject(unsigned int ueid); + +/****************************************************************************/ +/****************** E X P O R T E D F U N C T I O N S ******************/ +/****************************************************************************/ + + +/* + * -------------------------------------------------------------------------- + * Authentication procedure executed by the MME + * -------------------------------------------------------------------------- + */ +/**************************************************************************** + ** ** + ** Name: emm_proc_authentication() ** + ** ** + ** Description: Initiates authentication procedure to establish partial ** + ** native EPS security context in the UE and the MME. ** + ** ** + ** 3GPP TS 24.301, section 5.4.2.2 ** + ** The network initiates the authentication procedure by ** + ** sending an AUTHENTICATION REQUEST message to the UE and ** + ** starting the timer T3460. The AUTHENTICATION REQUEST mes- ** + ** sage contains the parameters necessary to calculate the ** + ** authentication response. ** + ** ** + ** Inputs: ueid: UE lower layer identifier ** + ** ksi: NAS key set identifier ** + ** rand: Random challenge number ** + ** autn: Authentication token ** + ** success: Callback function executed when the authen-** + ** tication procedure successfully completes ** + ** reject: Callback function executed when the authen-** + ** tication procedure fails or is rejected ** + ** failure: Callback function executed whener a lower ** + ** layer failure occured before the authenti- ** + ** cation procedure comnpletes ** + ** Others: None ** + ** ** + ** Outputs: None ** + ** Return: RETURNok, RETURNerror ** + ** Others: None ** + ** ** + ***************************************************************************/ +int emm_proc_authentication(void *ctx, unsigned int ueid, int ksi, + const OctetString *_rand, const OctetString *autn, + emm_common_success_callback_t success, + emm_common_reject_callback_t reject, + emm_common_failure_callback_t failure) + +{ + int rc = RETURNerror; + authentication_data_t *data; + + LOG_FUNC_IN; + + LOG_TRACE(INFO, "EMM-PROC - Initiate authentication KSI = %d, ctx = %p", ksi, ctx); + + /* Allocate parameters of the retransmission timer callback */ + data = (authentication_data_t *)malloc(sizeof(authentication_data_t)); + + if (data != NULL) { + /* Setup ongoing EMM procedure callback functions */ + rc = emm_proc_common_initialize(ueid, success, reject, failure, + _authentication_abort, data); + + if (rc != RETURNok) { + LOG_TRACE(WARNING, "Failed to initialize EMM callback functions"); + LOG_FUNC_RETURN (RETURNerror); + } + + /* Set the UE identifier */ + data->ueid = ueid; + /* Reset the retransmission counter */ + data->retransmission_count = 0; + /* Set the key set identifier */ + data->ksi = ksi; + + /* Set the authentication random challenge number */ + if (_rand->length > 0) { + data->rand.value = (uint8_t *)malloc(_rand->length); + data->rand.length = 0; + + if (data->rand.value) { + memcpy(data->rand.value, _rand->value, _rand->length); + data->rand.length = _rand->length; + } + } + + /* Set the authentication token */ + if (autn->length > 0) { + data->autn.value = (uint8_t *)malloc(autn->length); + data->autn.length = 0; + + if (data->autn.value) { + memcpy(data->autn.value, autn->value, autn->length); + data->autn.length = autn->length; + } + } + + /* Set the failure notification indicator */ + data->notify_failure = FALSE; + /* Send authentication request message to the UE */ + rc = _authentication_request(data); + + if (rc != RETURNerror) { + /* + * Notify EMM that common procedure has been initiated + */ + + + MSC_LOG_TX_MESSAGE( + MSC_NAS_EMM_MME, + MSC_NAS_EMM_MME, + NULL,0, + "0 EMMREG_COMMON_PROC_REQ ue id "NAS_UE_ID_FMT" (authentication)", ueid); + + emm_sap_t emm_sap; + emm_sap.primitive = EMMREG_COMMON_PROC_REQ; + emm_sap.u.emm_reg.ueid = ueid; + emm_sap.u.emm_reg.ctx = ctx; + rc = emm_sap_send(&emm_sap); + } + } + + LOG_FUNC_RETURN (rc); +} + +/**************************************************************************** + ** ** + ** Name: emm_proc_authentication_complete() ** + ** ** + ** Description: Performs the authentication completion procedure executed ** + ** by the network. ** + ** ** + ** 3GPP TS 24.301, section 5.4.2.4 ** + ** Upon receiving the AUTHENTICATION RESPONSE message, the ** + ** MME shall stop timer T3460 and check the correctness of ** + ** the RES parameter. ** + ** ** + ** Inputs: ueid: UE lower layer identifier ** + ** emm_cause: Authentication failure EMM cause code ** + ** res: Authentication response parameter. or auts ** + ** in case of sync failure ** + ** Others: None ** + ** ** + ** Outputs: None ** + ** Return: RETURNok, RETURNerror ** + ** Others: _emm_data, T3460 ** + ** ** + ***************************************************************************/ +int emm_proc_authentication_complete(unsigned int ueid, int emm_cause, + const OctetString *res) +{ + int rc; + emm_sap_t emm_sap; + + LOG_FUNC_IN; + + LOG_TRACE(INFO, "EMM-PROC - Authentication complete (ueid="NAS_UE_ID_FMT", cause=%d)", + ueid, emm_cause); + + + /* Release retransmission timer paramaters */ + authentication_data_t *data = + (authentication_data_t *)(emm_proc_common_get_args(ueid)); + + if (data) { + if (data->rand.length > 0) { + free(data->rand.value); + } + + if (data->autn.length > 0) { + free(data->autn.value); + } + + free(data); + } + + /* Get the UE context */ + emm_data_context_t *emm_ctx = NULL; +#if defined(NAS_BUILT_IN_EPC) + if (ueid > 0) { + emm_ctx = emm_data_context_get(&_emm_data, ueid); + } +#else + if (ueid < EMM_DATA_NB_UE_MAX) { + emm_ctx = _emm_data.ctx[ueid]; + } +#endif + + if (emm_ctx) { + /* Stop timer T3460 */ + LOG_TRACE(INFO, "EMM-PROC - Stop timer T3460 (%d)", emm_ctx->T3460.id); + emm_ctx->T3460.id = nas_timer_stop(emm_ctx->T3460.id); + MSC_LOG_EVENT(MSC_NAS_EMM_MME, "0 T3460 stopped UE "NAS_UE_ID_FMT" ", data->ueid); + } + if (emm_cause == EMM_CAUSE_SUCCESS) { + /* Check the received RES parameter */ + if ( (emm_ctx == NULL) || + (memcmp(res->value, &emm_ctx->vector.xres, res->length) != 0) ) { + /* RES does not match the XRES parameter */ + LOG_TRACE(WARNING, "EMM-PROC - Failed to authentify the UE"); + emm_cause = EMM_CAUSE_ILLEGAL_UE; + } else { + LOG_TRACE(DEBUG, "EMM-PROC - Success to authentify the UE RESP XRES == XRES UE CONTEXT"); + } + } + + if (emm_cause != EMM_CAUSE_SUCCESS) { + switch (emm_cause) { + +#if defined(NAS_BUILT_IN_EPC) + + case EMM_CAUSE_SYNCH_FAILURE: + /* USIM has detected a mismatch in SQN. + * Ask for a new vector. + */ + MSC_LOG_EVENT( + MSC_NAS_EMM_MME, + "0 SQN SYNCH_FAILURE ue id "NAS_UE_ID_FMT" ", ueid); + + LOG_TRACE(DEBUG, "EMM-PROC - USIM has detected a mismatch in SQN Ask for a new vector"); + nas_itti_auth_info_req(ueid, emm_ctx->imsi, 0, res->value); + + rc = RETURNok; + LOG_FUNC_RETURN (rc); + break; +#endif + + default: + LOG_TRACE(DEBUG, "EMM-PROC - The MME received an authentication failure message or the RES does not match the XRES parameter computed by the network"); + /* The MME received an authentication failure message or the RES + * contained in the Authentication Response message received from + * the UE does not match the XRES parameter computed by the network */ + (void) _authentication_reject(ueid); + /* + * Notify EMM that the authentication procedure failed + */ + MSC_LOG_TX_MESSAGE( + MSC_NAS_EMM_MME, + MSC_NAS_EMM_MME, + NULL,0, + "0 EMMREG_COMMON_PROC_REJ ue id "NAS_UE_ID_FMT" ", ueid); + + + emm_sap.primitive = EMMREG_COMMON_PROC_REJ; + emm_sap.u.emm_reg.ueid = ueid; + emm_sap.u.emm_reg.ctx = emm_ctx; + break; + } + } else { + /* + * Notify EMM that the authentication procedure successfully completed + */ + MSC_LOG_TX_MESSAGE( + MSC_NAS_EMM_MME, + MSC_NAS_EMM_MME, + NULL,0, + "0 EMMREG_COMMON_PROC_CNF ue id "NAS_UE_ID_FMT" ", ueid); + + LOG_TRACE(DEBUG, "EMM-PROC - Notify EMM that the authentication procedure successfully completed"); + emm_sap.primitive = EMMREG_COMMON_PROC_CNF; + emm_sap.u.emm_reg.ueid = ueid; + emm_sap.u.emm_reg.ctx = emm_ctx; + emm_sap.u.emm_reg.u.common.is_attached = emm_ctx->is_attached; + } + + rc = emm_sap_send(&emm_sap); + + LOG_FUNC_RETURN (rc); +} + +/****************************************************************************/ +/********************* L O C A L F U N C T I O N S *********************/ +/****************************************************************************/ + + +/* + * -------------------------------------------------------------------------- + * Timer handlers + * -------------------------------------------------------------------------- + */ + +/**************************************************************************** + ** ** + ** Name: _authentication_t3460_handler() ** + ** ** + ** Description: T3460 timeout handler ** + ** Upon T3460 timer expiration, the authentication request ** + ** message is retransmitted and the timer restarted. When ** + ** retransmission counter is exceed, the MME shall abort the ** + ** authentication procedure and any ongoing EMM specific ** + ** procedure and release the NAS signalling connection. ** + ** ** + ** 3GPP TS 24.301, section 5.4.2.7, case b ** + ** ** + ** Inputs: args: handler parameters ** + ** Others: None ** + ** ** + ** Outputs: None ** + ** Return: None ** + ** Others: None ** + ** ** + ***************************************************************************/ +static void *_authentication_t3460_handler(void *args) +{ + LOG_FUNC_IN; + + int rc; + + authentication_data_t *data = (authentication_data_t *)(args); + + /* Increment the retransmission counter */ + data->retransmission_count += 1; + + LOG_TRACE(WARNING, "EMM-PROC - T3460 timer expired, retransmission " + "counter = %d", data->retransmission_count); + + if (data->retransmission_count < AUTHENTICATION_COUNTER_MAX) { + /* Send authentication request message to the UE */ + rc = _authentication_request(data); + } else { + unsigned int ueid = data->ueid; + /* Set the failure notification indicator */ + data->notify_failure = TRUE; + /* Abort the authentication procedure */ + rc = _authentication_abort(data); + + /* Release the NAS signalling connection */ + if (rc != RETURNerror) { + emm_sap_t emm_sap; + emm_sap.primitive = EMMAS_RELEASE_REQ; + emm_sap.u.emm_as.u.release.guti = NULL; + emm_sap.u.emm_as.u.release.ueid = ueid; + emm_sap.u.emm_as.u.release.cause = EMM_AS_CAUSE_AUTHENTICATION; + rc = emm_sap_send(&emm_sap); + } + } + + LOG_FUNC_RETURN (NULL); +} + +/* + * -------------------------------------------------------------------------- + * MME specific local functions + * -------------------------------------------------------------------------- + */ + +/**************************************************************************** + ** ** + ** Name: _authentication_request() ** + ** ** + ** Description: Sends AUTHENTICATION REQUEST message and start timer T3460** + ** ** + ** Inputs: args: handler parameters ** + ** Others: None ** + ** ** + ** Outputs: None ** + ** Return: RETURNok, RETURNerror ** + ** Others: T3460 ** + ** ** + ***************************************************************************/ +int _authentication_request(authentication_data_t *data) +{ + LOG_FUNC_IN; + + emm_sap_t emm_sap; + int rc; + struct emm_data_context_s *emm_ctx; + + /* + * Notify EMM-AS SAP that Authentication Request message has to be sent + * to the UE + */ + emm_sap.primitive = EMMAS_SECURITY_REQ; + emm_sap.u.emm_as.u.security.guti = NULL; + emm_sap.u.emm_as.u.security.ueid = data->ueid; + emm_sap.u.emm_as.u.security.msgType = EMM_AS_MSG_TYPE_AUTH; + emm_sap.u.emm_as.u.security.ksi = data->ksi; + emm_sap.u.emm_as.u.security.rand = &data->rand; + emm_sap.u.emm_as.u.security.autn = &data->autn; + + /* TODO: check for pointer validity */ +#if defined(NAS_BUILT_IN_EPC) + emm_ctx = emm_data_context_get(&_emm_data, data->ueid); +#else + emm_ctx = _emm_data.ctx[data->ueid]; +#endif + + /* Setup EPS NAS security data */ + emm_as_set_security_data(&emm_sap.u.emm_as.u.security.sctx, + emm_ctx->security, FALSE, TRUE); + + MSC_LOG_TX_MESSAGE( + MSC_NAS_EMM_MME, + MSC_NAS_EMM_MME, + NULL,0, + "0 EMMAS_SECURITY_REQ ue id "NAS_UE_ID_FMT" ", data->ueid); + + rc = emm_sap_send(&emm_sap); + + if (rc != RETURNerror) { + if (emm_ctx) { + if (emm_ctx->T3460.id != NAS_TIMER_INACTIVE_ID) { + /* Re-start T3460 timer */ + emm_ctx->T3460.id = nas_timer_restart(emm_ctx->T3460.id); + MSC_LOG_EVENT(MSC_NAS_EMM_MME, "0 T3460 restarted UE "NAS_UE_ID_FMT" ", data->ueid); + } else { + /* Start T3460 timer */ + emm_ctx->T3460.id = nas_timer_start(emm_ctx->T3460.sec, _authentication_t3460_handler, + data); + MSC_LOG_EVENT(MSC_NAS_EMM_MME, "0 T3460 started UE "NAS_UE_ID_FMT" ", data->ueid); + } + } + + LOG_TRACE(INFO,"EMM-PROC - Timer T3460 (%d) expires in %ld seconds", + emm_ctx->T3460.id, emm_ctx->T3460.sec); + } + + LOG_FUNC_RETURN (rc); +} + +/**************************************************************************** + ** ** + ** Name: _authentication_reject() ** + ** ** + ** Description: Sends AUTHENTICATION REJECT message ** + ** ** + ** Inputs: ueid: UE lower layer identifier ** + ** Others: None ** + ** ** + ** Outputs: None ** + ** Return: RETURNok, RETURNerror ** + ** Others: None ** + ** ** + ***************************************************************************/ +static int _authentication_reject(unsigned int ueid) +{ + LOG_FUNC_IN; + + emm_sap_t emm_sap; + int rc; + struct emm_data_context_s *emm_ctx; + + /* + * Notify EMM-AS SAP that Authentication Reject message has to be sent + * to the UE + */ + emm_sap.primitive = EMMAS_SECURITY_REJ; + emm_sap.u.emm_as.u.security.guti = NULL; + emm_sap.u.emm_as.u.security.ueid = ueid; + emm_sap.u.emm_as.u.security.msgType = EMM_AS_MSG_TYPE_AUTH; + +#if defined(NAS_BUILT_IN_EPC) + emm_ctx = emm_data_context_get(&_emm_data, ueid); +#else + emm_ctx = _emm_data.ctx[ueid]; +#endif + /* Setup EPS NAS security data */ + emm_as_set_security_data(&emm_sap.u.emm_as.u.security.sctx, + emm_ctx->security, FALSE, TRUE); + rc = emm_sap_send(&emm_sap); + + LOG_FUNC_RETURN (rc); +} + +/**************************************************************************** + ** ** + ** Name: _authentication_abort() ** + ** ** + ** Description: Aborts the authentication procedure currently in progress ** + ** ** + ** Inputs: args: Authentication data to be released ** + ** Others: None ** + ** ** + ** Outputs: None ** + ** Return: RETURNok, RETURNerror ** + ** Others: T3460 ** + ** ** + ***************************************************************************/ +static int _authentication_abort(void *args) +{ + LOG_FUNC_IN; + + int rc = RETURNerror; + struct emm_data_context_s *emm_ctx; + + authentication_data_t *data = (authentication_data_t *)(args); + + if (data) { + unsigned int ueid = data->ueid; + int notify_failure = data->notify_failure; + + LOG_TRACE(WARNING, "EMM-PROC - Abort authentication procedure " + "(ueid="NAS_UE_ID_FMT")", ueid); +#if defined(NAS_BUILT_IN_EPC) + emm_ctx = emm_data_context_get(&_emm_data, ueid); +#else + emm_ctx = _emm_data.ctx[ueid]; +#endif + if (emm_ctx) { + /* Stop timer T3460 */ + if (emm_ctx->T3460.id != NAS_TIMER_INACTIVE_ID) { + LOG_TRACE(INFO, "EMM-PROC - Stop timer T3460 (%d)", emm_ctx->T3460.id); + emm_ctx->T3460.id = nas_timer_stop(emm_ctx->T3460.id); + MSC_LOG_EVENT(MSC_NAS_EMM_MME, "0 T3460 stopped UE "NAS_UE_ID_FMT" ", data->ueid); + } + } + + /* Release retransmission timer paramaters */ + if (data->rand.length > 0) { + free(data->rand.value); + } + + if (data->autn.length > 0) { + free(data->autn.value); + } + + free(data); + + /* + * Notify EMM that the authentication procedure failed + */ + if (notify_failure) { + emm_sap_t emm_sap; + emm_sap.primitive = EMMREG_COMMON_PROC_REJ; + emm_sap.u.emm_reg.ueid = ueid; + rc = emm_sap_send(&emm_sap); + } else { + rc = RETURNok; + } + } + + LOG_FUNC_RETURN (rc); +} + + diff --git a/openair-cn/NAS/EURECOM-NAS/src/api/mme/COPYING b/openair-cn/NAS/MME/EMM/COPYING similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/api/mme/COPYING rename to openair-cn/NAS/MME/EMM/COPYING diff --git a/openair-cn/NAS/MME/EMM/Detach.c b/openair-cn/NAS/MME/EMM/Detach.c new file mode 100644 index 0000000000..1ba60e5b6d --- /dev/null +++ b/openair-cn/NAS/MME/EMM/Detach.c @@ -0,0 +1,346 @@ +/******************************************************************************* + OpenAirInterface + Copyright(c) 1999 - 2014 Eurecom + + OpenAirInterface is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + + OpenAirInterface is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with OpenAirInterface.The full GNU General Public License is + included in this distribution in the file called "COPYING". If not, + see . + + Contact Information + OpenAirInterface Admin: openair_admin@eurecom.fr + OpenAirInterface Tech : openair_tech@eurecom.fr + OpenAirInterface Dev : openair4g-devel@eurecom.fr + + Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. + + *******************************************************************************/ +/***************************************************************************** +Source Detach.c + +Version 0.1 + +Date 2013/05/07 + +Product NAS stack + +Subsystem EPS Mobility Management + +Author Frederic Maurel + +Description Defines the detach related EMM procedure executed by the + Non-Access Stratum. + + The detach procedure is used by the UE to detach for EPS servi- + ces, to disconnect from the last PDN it is connected to; by the + network to inform the UE that it is detached for EPS services + or non-EPS services or both, to disconnect the UE from the last + PDN to which it is connected and to inform the UE to re-attach + to the network and re-establish all PDN connections. + +*****************************************************************************/ + +#include "emm_proc.h" +#include "nas_log.h" +#include "nas_timer.h" + +#include "emmData.h" + +#include "emm_sap.h" +#include "esm_sap.h" +#include "msc.h" + +#include // free + +/****************************************************************************/ +/**************** E X T E R N A L D E F I N I T I O N S ****************/ +/****************************************************************************/ + +/****************************************************************************/ +/******************* L O C A L D E F I N I T I O N S *******************/ +/****************************************************************************/ + +/* String representation of the detach type */ +static const char *_emm_detach_type_str[] = { + "EPS", "IMSI", "EPS/IMSI", + "RE-ATTACH REQUIRED", "RE-ATTACH NOT REQUIRED", "RESERVED" +}; + +/* + * -------------------------------------------------------------------------- + * Internal data handled by the detach procedure in the UE + * -------------------------------------------------------------------------- + */ + + +/* + * -------------------------------------------------------------------------- + * Internal data handled by the detach procedure in the MME + * -------------------------------------------------------------------------- + */ + + +/****************************************************************************/ +/****************** E X P O R T E D F U N C T I O N S ******************/ +/****************************************************************************/ + +/* + * -------------------------------------------------------------------------- + * Detach procedure executed by the UE + * -------------------------------------------------------------------------- + */ + +/* + * -------------------------------------------------------------------------- + * Detach procedure executed by the MME + * -------------------------------------------------------------------------- + */ +/**************************************************************************** + ** ** + ** Name: emm_proc_detach() ** + ** ** + ** Description: Initiate the detach procedure to inform the UE that it is ** + ** detached for EPS services, or to re-attach to the network ** + ** and re-establish all PDN connections. ** + ** ** + ** 3GPP TS 24.301, section 5.5.2.3.1 ** + ** In state EMM-REGISTERED the network initiates the detach ** + ** procedure by sending a DETACH REQUEST message to the UE, ** + ** starting timer T3422 and entering state EMM-DEREGISTERED- ** + ** INITIATED. ** + ** ** + ** Inputs: ueid: UE lower layer identifier ** + ** type: Type of the requested detach ** + ** Others: _emm_detach_type_str ** + ** ** + ** Outputs: None ** + ** Return: RETURNok, RETURNerror ** + ** Others: T3422 ** + ** ** + ***************************************************************************/ +int emm_proc_detach(unsigned int ueid, emm_proc_detach_type_t type) +{ + LOG_FUNC_IN; + + int rc = RETURNerror; + + LOG_TRACE(INFO, "EMM-PROC - Initiate detach type = %s (%d)", + _emm_detach_type_str[type], type); + + /* TODO */ + + LOG_FUNC_RETURN(rc); +} + +/**************************************************************************** + ** ** + ** Name: emm_proc_detach_request() ** + ** ** + ** Description: Performs the UE initiated detach procedure for EPS servi- ** + ** ces only When the DETACH REQUEST message is received by ** + ** the network. ** + ** ** + ** 3GPP TS 24.301, section 5.5.2.2.2 ** + ** Upon receiving the DETACH REQUEST message the network ** + ** shall send a DETACH ACCEPT message to the UE and store ** + ** the current EPS security context, if the detach type IE ** + ** does not indicate "switch off". Otherwise, the procedure ** + ** is completed when the network receives the DETACH REQUEST ** + ** message. ** + ** The network shall deactivate the EPS bearer context(s) ** + ** for this UE locally without peer-to-peer signalling and ** + ** shall enter state EMM-DEREGISTERED. ** + ** ** + ** Inputs: ueid: UE lower layer identifier ** + ** type: Type of the requested detach ** + ** switch_off: Indicates whether the detach is required ** + ** because the UE is switched off or not ** + ** native_ksi: TRUE if the security context is of type ** + ** native ** + ** ksi: The NAS ket sey identifier ** + ** guti: The GUTI if provided by the UE ** + ** imsi: The IMSI if provided by the UE ** + ** imei: The IMEI if provided by the UE ** + ** Others: _emm_data ** + ** ** + ** Outputs: None ** + ** Return: RETURNok, RETURNerror ** + ** Others: None ** + ** ** + ***************************************************************************/ +int emm_proc_detach_request(unsigned int ueid, emm_proc_detach_type_t type, + int switch_off, int native_ksi, int ksi, + GUTI_t *guti, imsi_t *imsi, imei_t *imei) +{ + LOG_FUNC_IN; + + int rc; + emm_data_context_t *emm_ctx = NULL; + + LOG_TRACE(INFO, "EMM-PROC - Detach type = %s (%d) requested (ueid="NAS_UE_ID_FMT")", + _emm_detach_type_str[type], type, ueid); + + /* Get the UE context */ +#if defined(NAS_BUILT_IN_EPC) + + if (ueid > 0) { + emm_ctx = emm_data_context_get(&_emm_data, ueid); + } + +#else + + if (ueid < EMM_DATA_NB_UE_MAX) { + emm_ctx = _emm_data.ctx[ueid]; + } + +#endif + + if (emm_ctx == NULL) { + LOG_TRACE(WARNING, "No EMM context exists for the UE (ueid="NAS_UE_ID_FMT")", ueid); + LOG_FUNC_RETURN(RETURNok); + } + + if (switch_off) { + MSC_LOG_EVENT(MSC_NAS_EMM_MME, + "0 Removing UE context ue id "NAS_UE_ID_FMT" ", ueid); + /* The UE is switched off */ + if (emm_ctx->guti) { + free(emm_ctx->guti); + } + + if (emm_ctx->imsi) { + free(emm_ctx->imsi); + } + + if (emm_ctx->imei) { + free(emm_ctx->imei); + } + + if (emm_ctx->esm_msg.length > 0) { + free(emm_ctx->esm_msg.value); + } + + /* Release NAS security context */ + if (emm_ctx->security) { + emm_security_context_t *security = emm_ctx->security; + + if (security->kasme.value) { + free(security->kasme.value); + } + + if (security->knas_enc.value) { + free(security->knas_enc.value); + } + + if (security->knas_int.value) { + free(security->knas_int.value); + } + + free(emm_ctx->security); + } + /* Stop timer T3450 */ + if (emm_ctx->T3450.id != NAS_TIMER_INACTIVE_ID) { + LOG_TRACE(INFO, "EMM-PROC - Stop timer T3450 (%d)", emm_ctx->T3450.id); + emm_ctx->T3450.id = nas_timer_stop(emm_ctx->T3450.id); + MSC_LOG_EVENT(MSC_NAS_EMM_MME, "0 T3450 stopped UE "NAS_UE_ID_FMT" ", emm_ctx->ueid); + } + /* Stop timer T3460 */ + if (emm_ctx->T3460.id != NAS_TIMER_INACTIVE_ID) { + LOG_TRACE(INFO, "EMM-PROC - Stop timer T3460 (%d)", emm_ctx->T3460.id); + emm_ctx->T3460.id = nas_timer_stop(emm_ctx->T3460.id); + MSC_LOG_EVENT(MSC_NAS_EMM_MME, "0 T3460 stopped UE "NAS_UE_ID_FMT" ", emm_ctx->ueid); + } + /* Stop timer T3470 */ + if (emm_ctx->T3470.id != NAS_TIMER_INACTIVE_ID) { + LOG_TRACE(INFO, "EMM-PROC - Stop timer T3470 (%d)", emm_ctx->T3460.id); + emm_ctx->T3470.id = nas_timer_stop(emm_ctx->T3470.id); + MSC_LOG_EVENT(MSC_NAS_EMM_MME, "0 T3470 stopped UE "NAS_UE_ID_FMT" ", emm_ctx->ueid); + } + /* Release the EMM context */ +#if defined(NAS_BUILT_IN_EPC) + emm_data_context_remove(&_emm_data, emm_ctx); + free(emm_ctx); +#else + free(_emm_data.ctx[ueid]); + _emm_data.ctx[ueid] = NULL; +#endif + rc = RETURNok; + } else { + /* Normal detach without UE switch-off */ + emm_sap_t emm_sap; + emm_as_data_t *emm_as = &emm_sap.u.emm_as.u.data; + MSC_LOG_TX_MESSAGE( + MSC_NAS_EMM_MME, + MSC_NAS_EMM_MME, + NULL,0, + "0 EMM_AS_NAS_INFO_DETACH ue id "NAS_UE_ID_FMT" ", ueid); + + /* Setup NAS information message to transfer */ + emm_as->NASinfo = EMM_AS_NAS_INFO_DETACH; + emm_as->NASmsg.length = 0; + emm_as->NASmsg.value = NULL; + /* Set the UE identifier */ + emm_as->guti = NULL; + emm_as->ueid = ueid; + /* Setup EPS NAS security data */ + emm_as_set_security_data(&emm_as->sctx, emm_ctx->security, FALSE, TRUE); + /* + * Notify EMM-AS SAP that Detach Accept message has to + * be sent to the network + */ + emm_sap.primitive = EMMAS_DATA_REQ; + rc = emm_sap_send(&emm_sap); + } + + if (rc != RETURNerror) { + /* + * Notify ESM that all EPS bearer contexts allocated for this UE have + * to be locally deactivated + */ + MSC_LOG_TX_MESSAGE( + MSC_NAS_EMM_MME, + MSC_NAS_ESM_MME, + NULL,0, + "0 ESM_EPS_BEARER_CONTEXT_DEACTIVATE_REQ ue id "NAS_UE_ID_FMT" ", ueid); + esm_sap_t esm_sap; + esm_sap.primitive = ESM_EPS_BEARER_CONTEXT_DEACTIVATE_REQ; + esm_sap.ueid = ueid; + esm_sap.ctx = emm_ctx; + esm_sap.data.eps_bearer_context_deactivate.ebi = ESM_SAP_ALL_EBI; + rc = esm_sap_send(&esm_sap); + + if (rc != RETURNerror) { + emm_sap_t emm_sap; + /* + * Notify EMM that the UE has been implicitly detached + */ + MSC_LOG_TX_MESSAGE( + MSC_NAS_EMM_MME, + MSC_NAS_EMM_MME, + NULL,0, + "0 EMMREG_DETACH_REQ ue id "NAS_UE_ID_FMT" ", ueid); + emm_sap.primitive = EMMREG_DETACH_REQ; + emm_sap.u.emm_reg.ueid = ueid; + emm_sap.u.emm_reg.ctx = emm_ctx; + rc = emm_sap_send(&emm_sap); + } + } + + LOG_FUNC_RETURN(rc); +} + +/****************************************************************************/ +/********************* L O C A L F U N C T I O N S *********************/ +/****************************************************************************/ + diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/EmmCommon.c b/openair-cn/NAS/MME/EMM/EmmCommon.c similarity index 99% rename from openair-cn/NAS/EURECOM-NAS/src/emm/EmmCommon.c rename to openair-cn/NAS/MME/EMM/EmmCommon.c index d142ec405e..a30c7675d8 100644 --- a/openair-cn/NAS/EURECOM-NAS/src/emm/EmmCommon.c +++ b/openair-cn/NAS/MME/EMM/EmmCommon.c @@ -53,7 +53,6 @@ Description Defines callback functions executed within EMM common procedures *****************************************************************************/ -#ifdef NAS_MME #include "EmmCommon.h" @@ -513,4 +512,3 @@ static void _emm_common_cleanup(unsigned int ueid) } } } -#endif // NAS_MME diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/EmmCommon.h b/openair-cn/NAS/MME/EMM/EmmCommon.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/emm/EmmCommon.h rename to openair-cn/NAS/MME/EMM/EmmCommon.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/EmmStatusHdl.c b/openair-cn/NAS/MME/EMM/EmmStatusHdl.c similarity index 98% rename from openair-cn/NAS/EURECOM-NAS/src/emm/EmmStatusHdl.c rename to openair-cn/NAS/MME/EMM/EmmStatusHdl.c index 67780db755..fec9f2314f 100644 --- a/openair-cn/NAS/EURECOM-NAS/src/emm/EmmStatusHdl.c +++ b/openair-cn/NAS/MME/EMM/EmmStatusHdl.c @@ -140,12 +140,6 @@ int emm_proc_status(unsigned int ueid, int emm_cause) emm_sap.primitive = EMMAS_STATUS_IND; emm_sap.u.emm_as.u.status.emm_cause = emm_cause; emm_sap.u.emm_as.u.status.ueid = ueid; - -#ifdef NAS_UE - emm_sap.u.emm_as.u.status.guti = _emm_data.guti; - sctx = _emm_data.security; -#endif -#ifdef NAS_MME emm_sap.u.emm_as.u.status.guti = NULL; # if defined(NAS_BUILT_IN_EPC) ctx = emm_data_context_get(&_emm_data, ueid); @@ -157,7 +151,6 @@ int emm_proc_status(unsigned int ueid, int emm_cause) sctx = ctx->security; } -#endif /* Setup EPS NAS security data */ emm_as_set_security_data(&emm_sap.u.emm_as.u.status.sctx, sctx, FALSE, TRUE); diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/Identification.c b/openair-cn/NAS/MME/EMM/Identification.c similarity index 74% rename from openair-cn/NAS/EURECOM-NAS/src/emm/Identification.c rename to openair-cn/NAS/MME/EMM/Identification.c index 988834899d..a4e34f5be3 100644 --- a/openair-cn/NAS/EURECOM-NAS/src/emm/Identification.c +++ b/openair-cn/NAS/MME/EMM/Identification.c @@ -73,20 +73,12 @@ static const char *_emm_identity_type_str[] = { "NOT AVAILABLE", "IMSI", "IMEI", "IMEISV", "TMSI" }; -/* - * -------------------------------------------------------------------------- - * Internal data handled by the identification procedure in the UE - * -------------------------------------------------------------------------- - */ -#ifdef NAS_UE -#endif // NAS_UE /* * -------------------------------------------------------------------------- * Internal data handled by the identification procedure in the MME * -------------------------------------------------------------------------- */ -#ifdef NAS_MME /* * Timer handlers */ @@ -113,147 +105,17 @@ typedef struct { } identification_data_t; static int _identification_request(identification_data_t *data); -#endif // NAS_MME /****************************************************************************/ /****************** E X P O R T E D F U N C T I O N S ******************/ /****************************************************************************/ -/* - * -------------------------------------------------------------------------- - * Identification procedure executed by the UE - * -------------------------------------------------------------------------- - */ -#ifdef NAS_UE -/**************************************************************************** - ** ** - ** Name: emm_proc_identification_request() ** - ** ** - ** Description: Performs the MME requested identification procedure. ** - ** ** - ** 3GPP TS 24.301, section 5.4.4.3 ** - ** Upon receiving the IDENTITY REQUEST message, the UE shall ** - ** send an IDENTITY RESPONSE message to the network. The ** - ** IDENTITY RESPONSE message shall contain the identifica- ** - ** tion parameters as requested by the network. ** - ** ** - ** Inputs: type: Type of the requested identity ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -int emm_proc_identification_request(emm_proc_identity_type_t type) -{ - LOG_FUNC_IN; - - int rc; - emm_sap_t emm_sap; - - LOG_TRACE(INFO, "EMM-PROC - Identification requested type = %s (%d)", - _emm_identity_type_str[type], type); - - /* Setup EMM procedure handler to be executed upon receiving - * lower layer notification */ - rc = emm_proc_lowerlayer_initialize(NULL, NULL, NULL, NULL); - - if (rc != RETURNok) { - LOG_TRACE(WARNING, - "EMM-PROC - Failed to initialize EMM procedure handler"); - LOG_FUNC_RETURN (RETURNerror); - } - - emm_sap.u.emm_as.u.security.identType = EMM_IDENT_TYPE_NOT_AVAILABLE; - - switch (type) { - case EMM_IDENT_TYPE_IMSI: { - imsi_t modified_imsi; - - /* International Mobile Subscriber Identity is requested */ - if (_emm_data.imsi) { - memcpy (&modified_imsi, _emm_data.imsi, sizeof (modified_imsi)); - - /* LW: Eventually replace the 0xF value set in MNC digit 3 by a 0 to avoid IMSI to be truncated before reaching HSS */ - if (modified_imsi.u.num.digit6 == 0xF) { - modified_imsi.u.num.digit6 = 0; - } - - emm_sap.u.emm_as.u.security.identType = EMM_IDENT_TYPE_IMSI; - emm_sap.u.emm_as.u.security.imsi = &modified_imsi; - - LOG_TRACE(INFO, "EMM-PROC - IMSI = %u%u%u %u%u%u %u%u%u%u%x%x%x%x%x", - emm_sap.u.emm_as.u.security.imsi->u.num.digit1, - emm_sap.u.emm_as.u.security.imsi->u.num.digit2, - emm_sap.u.emm_as.u.security.imsi->u.num.digit3, - - emm_sap.u.emm_as.u.security.imsi->u.num.digit4, - emm_sap.u.emm_as.u.security.imsi->u.num.digit5, - emm_sap.u.emm_as.u.security.imsi->u.num.digit6, - - emm_sap.u.emm_as.u.security.imsi->u.num.digit7, - emm_sap.u.emm_as.u.security.imsi->u.num.digit8, - emm_sap.u.emm_as.u.security.imsi->u.num.digit9, - emm_sap.u.emm_as.u.security.imsi->u.num.digit10, - emm_sap.u.emm_as.u.security.imsi->u.num.digit11, - emm_sap.u.emm_as.u.security.imsi->u.num.digit12, - emm_sap.u.emm_as.u.security.imsi->u.num.digit13, - emm_sap.u.emm_as.u.security.imsi->u.num.digit14, - emm_sap.u.emm_as.u.security.imsi->u.num.digit15); - } - - break; - } - - case EMM_IDENT_TYPE_IMEI: - - /* International Mobile Equipment Identity is requested */ - if (_emm_data.imei) { - emm_sap.u.emm_as.u.security.identType = EMM_IDENT_TYPE_IMEI; - emm_sap.u.emm_as.u.security.imei = _emm_data.imei; - } - - break; - - case EMM_IDENT_TYPE_TMSI: - - /* Temporary Mobile Subscriber Identity is requested */ - if (_emm_data.guti) { - emm_sap.u.emm_as.u.security.identType = EMM_IDENT_TYPE_TMSI; - emm_sap.u.emm_as.u.security.tmsi = _emm_data.guti->m_tmsi; - } - - break; - - default: - /* Other identities are not available */ - break; - } - - /* - * Notify EMM-AS SAP that Identity Response message has to be sent - * to the MME - */ - emm_sap.primitive = EMMAS_SECURITY_RES; - emm_sap.u.emm_as.u.security.guti = _emm_data.guti; - emm_sap.u.emm_as.u.security.ueid = 0; - emm_sap.u.emm_as.u.security.msgType = EMM_AS_MSG_TYPE_IDENT; - /* Setup EPS NAS security data */ - emm_as_set_security_data(&emm_sap.u.emm_as.u.security.sctx, - _emm_data.security, FALSE, TRUE); - rc = emm_sap_send(&emm_sap); - - LOG_FUNC_RETURN (rc); -} -#endif // NAS_UE /* * -------------------------------------------------------------------------- * Identification procedure executed by the MME * -------------------------------------------------------------------------- */ -#ifdef NAS_MME /******************************************************************** ** ** ** Name: emm_proc_identification() ** @@ -331,7 +193,7 @@ int emm_proc_identification(unsigned int ueid, MSC_NAS_EMM_MME, MSC_NAS_EMM_MME, NULL,0, - "0 EMMREG_COMMON_PROC_REQ ue id %06x (identification)", ueid); + "0 EMMREG_COMMON_PROC_REQ ue id "NAS_UE_ID_FMT" (identification)", ueid); emm_sap_t emm_sap; emm_sap.primitive = EMMREG_COMMON_PROC_REQ; @@ -367,7 +229,7 @@ int emm_proc_identification(unsigned int ueid, ** ** ***************************************************************************/ int emm_proc_identification_complete(unsigned int ueid, const imsi_t *imsi, - const imei_t *imei, UInt32_t *tmsi) + const imei_t *imei, uint32_t *tmsi) { int rc = RETURNerror; emm_sap_t emm_sap; @@ -376,36 +238,32 @@ int emm_proc_identification_complete(unsigned int ueid, const imsi_t *imsi, LOG_FUNC_IN; - LOG_TRACE(INFO, "EMM-PROC - Identification complete (ueid=%u)", ueid); - - /* Stop timer T3470 */ - LOG_TRACE(INFO, "EMM-PROC - Stop timer T3470 (%d)", T3470.id); - T3470.id = nas_timer_stop(T3470.id); + LOG_TRACE(INFO, "EMM-PROC - Identification complete (ueid="NAS_UE_ID_FMT")", ueid); /* Release retransmission timer paramaters */ identification_data_t *data = (identification_data_t *)(emm_proc_common_get_args(ueid)); - if (data) { free(data); } /* Get the UE context */ #if defined(NAS_BUILT_IN_EPC) - if (ueid > 0) { emm_ctx = emm_data_context_get(&_emm_data, ueid); } - #else - if (ueid < EMM_DATA_NB_UE_MAX) { emm_ctx = _emm_data.ctx[ueid]; } - #endif if (emm_ctx) { + /* Stop timer T3470 */ + LOG_TRACE(INFO, "EMM-PROC - Stop timer T3470 (%d)", emm_ctx->T3470.id); + emm_ctx->T3470.id = nas_timer_stop(emm_ctx->T3470.id); + MSC_LOG_EVENT(MSC_NAS_EMM_MME, "0 T3470 stopped UE "NAS_UE_ID_FMT" ", ueid); + if (imsi) { /* Update the IMSI */ if (emm_ctx->imsi == NULL) { @@ -444,7 +302,7 @@ int emm_proc_identification_complete(unsigned int ueid, const imsi_t *imsi, MSC_NAS_EMM_MME, MSC_NAS_EMM_MME, NULL,0, - "0 EMMREG_COMMON_PROC_CNF ue id %06x", ueid); + "0 EMMREG_COMMON_PROC_CNF ue id "NAS_UE_ID_FMT" ", ueid); emm_sap.primitive = EMMREG_COMMON_PROC_CNF; emm_sap.u.emm_reg.ueid = ueid; @@ -459,7 +317,7 @@ int emm_proc_identification_complete(unsigned int ueid, const imsi_t *imsi, MSC_NAS_EMM_MME, MSC_NAS_EMM_MME, NULL,0, - "0 EMMREG_COMMON_PROC_REJ ue id %06x", ueid); + "0 EMMREG_COMMON_PROC_REJ ue id "NAS_UE_ID_FMT" ", ueid); emm_sap.primitive = EMMREG_COMMON_PROC_REJ; emm_sap.u.emm_reg.ueid = ueid; @@ -471,13 +329,11 @@ int emm_proc_identification_complete(unsigned int ueid, const imsi_t *imsi, LOG_FUNC_RETURN (rc); } -#endif // NAS_MME /****************************************************************************/ /********************* L O C A L F U N C T I O N S *********************/ /****************************************************************************/ -#ifdef NAS_MME /* * -------------------------------------------------------------------------- * Timer handlers @@ -568,7 +424,7 @@ int _identification_request(identification_data_t *data) MSC_NAS_EMM_MME, MSC_NAS_EMM_MME, NULL,0, - "0 EMMAS_SECURITY_REQ ue id %06x", data->ueid); + "0 EMMAS_SECURITY_REQ ue id "NAS_UE_ID_FMT" ", data->ueid); emm_sap.primitive = EMMAS_SECURITY_REQ; emm_sap.u.emm_as.u.security.guti = NULL; @@ -577,17 +433,13 @@ int _identification_request(identification_data_t *data) emm_sap.u.emm_as.u.security.identType = data->type; #if defined(NAS_BUILT_IN_EPC) - if (data->ueid > 0) { emm_ctx = emm_data_context_get(&_emm_data, data->ueid); } - #else - if (data->ueid < EMM_DATA_NB_UE_MAX) { emm_ctx = _emm_data.ctx[data->ueid]; } - #endif /* Setup EPS NAS security data */ emm_as_set_security_data(&emm_sap.u.emm_as.u.security.sctx, @@ -595,17 +447,19 @@ int _identification_request(identification_data_t *data) rc = emm_sap_send(&emm_sap); if (rc != RETURNerror) { - if (T3470.id != NAS_TIMER_INACTIVE_ID) { + if (emm_ctx->T3470.id != NAS_TIMER_INACTIVE_ID) { /* Re-start T3470 timer */ - T3470.id = nas_timer_restart(T3470.id); + emm_ctx->T3470.id = nas_timer_restart(emm_ctx->T3470.id); + MSC_LOG_EVENT(MSC_NAS_EMM_MME, "0 T3470 restarted UE "NAS_UE_ID_FMT" ", data->ueid); } else { /* Start T3470 timer */ - T3470.id = nas_timer_start(T3470.sec, _identification_t3470_handler, + emm_ctx->T3470.id = nas_timer_start(emm_ctx->T3470.sec, _identification_t3470_handler, data); + MSC_LOG_EVENT(MSC_NAS_EMM_MME, "0 T3470 started UE "NAS_UE_ID_FMT" ", data->ueid); } LOG_TRACE(INFO,"EMM-PROC - Timer T3470 (%d) expires in %ld seconds", - T3470.id, T3470.sec); + emm_ctx->T3470.id, emm_ctx->T3470.sec); } LOG_FUNC_RETURN (rc); @@ -636,14 +490,25 @@ static int _identification_abort(void *args) if (data) { unsigned int ueid = data->ueid; int notify_failure = data->notify_failure; - + struct emm_data_context_s *emm_ctx = NULL; + /* Get the UE context */ + #if defined(NAS_BUILT_IN_EPC) + if (ueid > 0) { + emm_ctx = emm_data_context_get(&_emm_data, ueid); + } + #else + if (ueid < EMM_DATA_NB_UE_MAX) { + emm_ctx = _emm_data.ctx[ueid]; + } + #endif LOG_TRACE(WARNING, "EMM-PROC - Abort identification procedure " - "(ueid=%u)", ueid); + "(ueid="NAS_UE_ID_FMT")", ueid); /* Stop timer T3470 */ - if (T3470.id != NAS_TIMER_INACTIVE_ID) { - LOG_TRACE(INFO, "EMM-PROC - Stop timer T3470 (%d)", T3470.id); - T3470.id = nas_timer_stop(T3470.id); + if (emm_ctx->T3470.id != NAS_TIMER_INACTIVE_ID) { + LOG_TRACE(INFO, "EMM-PROC - Stop timer T3470 (%d)", emm_ctx->T3470.id); + emm_ctx->T3470.id = nas_timer_stop(emm_ctx->T3470.id); + MSC_LOG_EVENT(MSC_NAS_EMM_MME, "0 T3470 stopped UE "NAS_UE_ID_FMT" ", data->ueid); } /* Release retransmission timer paramaters */ @@ -657,7 +522,7 @@ static int _identification_abort(void *args) MSC_NAS_EMM_MME, MSC_NAS_EMM_MME, NULL,0, - "0 EMMREG_COMMON_PROC_REJ ue id %06x", ueid); + "0 EMMREG_COMMON_PROC_REJ ue id "NAS_UE_ID_FMT" ", ueid); emm_sap_t emm_sap; emm_sap.primitive = EMMREG_COMMON_PROC_REJ; emm_sap.u.emm_reg.ueid = ueid; @@ -670,5 +535,4 @@ static int _identification_abort(void *args) LOG_FUNC_RETURN(rc); } -#endif // NAS_MME diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/ChangeLog b/openair-cn/NAS/MME/EMM/IdleMode.c old mode 100755 new mode 100644 similarity index 100% rename from openair3/PMIPv6/pmipv6-daemon-umip/ChangeLog rename to openair-cn/NAS/MME/EMM/IdleMode.c diff --git a/openair-cn/NAS/MME/EMM/IdleMode.h b/openair-cn/NAS/MME/EMM/IdleMode.h new file mode 100644 index 0000000000..e69de29bb2 diff --git a/openair-cn/NAS/MME/EMM/LowerLayer.c b/openair-cn/NAS/MME/EMM/LowerLayer.c new file mode 100644 index 0000000000..2012164975 --- /dev/null +++ b/openair-cn/NAS/MME/EMM/LowerLayer.c @@ -0,0 +1,384 @@ +/******************************************************************************* + OpenAirInterface + Copyright(c) 1999 - 2014 Eurecom + + OpenAirInterface is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + + OpenAirInterface is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with OpenAirInterface.The full GNU General Public License is + included in this distribution in the file called "COPYING". If not, + see . + + Contact Information + OpenAirInterface Admin: openair_admin@eurecom.fr + OpenAirInterface Tech : openair_tech@eurecom.fr + OpenAirInterface Dev : openair4g-devel@eurecom.fr + + Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. + + *******************************************************************************/ +/***************************************************************************** +Source LowerLayer.c + +Version 0.1 + +Date 2012/03/14 + +Product NAS stack + +Subsystem EPS Mobility Management + +Author Frederic Maurel + +Description Defines EMM procedures executed by the Non-Access Stratum + upon receiving notifications from lower layers so that data + transfer succeed or failed, or NAS signalling connection is + released, or ESM unit data has been received from under layer, + and to request ESM unit data transfer to under layer. + +*****************************************************************************/ + +#include "LowerLayer.h" +#include "commonDef.h" +#include "nas_log.h" + +#include "emmData.h" + +#include "emm_sap.h" +#include "esm_sap.h" +#include "nas_log.h" + +#include // memset + +/****************************************************************************/ +/**************** E X T E R N A L D E F I N I T I O N S ****************/ +/****************************************************************************/ + +/****************************************************************************/ +/******************* L O C A L D E F I N I T I O N S *******************/ +/****************************************************************************/ + + +/****************************************************************************/ +/****************** E X P O R T E D F U N C T I O N S ******************/ +/****************************************************************************/ + +/* + * -------------------------------------------------------------------------- + * Lower layer notification handlers + * -------------------------------------------------------------------------- + */ + +/**************************************************************************** + ** ** + ** Name: lowerlayer_success() ** + ** ** + ** Description: Notify the EPS Mobility Management entity that data have ** + ** been successfully delivered to the network ** + ** ** + ** Inputs: ueid: UE lower layer identifier ** + ** Others: None ** + ** ** + ** Outputs: None ** + ** Return: RETURNok, RETURNerror ** + ** Others: None ** + ** ** + ***************************************************************************/ +int lowerlayer_success(unsigned int ueid) +{ + LOG_FUNC_IN; + + emm_sap_t emm_sap; + int rc; + + emm_sap.primitive = EMMREG_LOWERLAYER_SUCCESS; + emm_sap.u.emm_reg.ueid = ueid; + emm_sap.u.emm_reg.ctx = NULL; + rc = emm_sap_send(&emm_sap); + + LOG_FUNC_RETURN (rc); +} + +/**************************************************************************** + ** ** + ** Name: lowerlayer_failure() ** + ** ** + ** Description: Notify the EPS Mobility Management entity that lower la- ** + ** yers failed to deliver data to the network ** + ** ** + ** Inputs: ueid: UE lower layer identifier ** + ** Others: None ** + ** ** + ** Outputs: None ** + ** Return: RETURNok, RETURNerror ** + ** Others: None ** + ** ** + ***************************************************************************/ +int lowerlayer_failure(unsigned int ueid) +{ + LOG_FUNC_IN; + + emm_sap_t emm_sap; + int rc; + + emm_sap.primitive = EMMREG_LOWERLAYER_FAILURE; + emm_sap.u.emm_reg.ueid = ueid; +#if defined(NAS_BUILT_IN_EPC) + emm_data_context_t *emm_ctx = NULL; + if (ueid > 0) { + emm_ctx = emm_data_context_get(&_emm_data, ueid); + } + emm_sap.u.emm_reg.ctx = emm_ctx; +#else + emm_sap.u.emm_reg.ctx = NULL; +#endif + rc = emm_sap_send(&emm_sap); + + LOG_FUNC_RETURN (rc); +} + +/**************************************************************************** + ** ** + ** Name: lowerlayer_establish() ** + ** ** + ** Description: Update the EPS connection management status upon recei- ** + ** ving indication so that the NAS signalling connection is ** + ** established ** + ** ** + ** Inputs: None ** + ** Others: None ** + ** ** + ** Outputs: None ** + ** Return: RETURNok, RETURNerror ** + ** Others: None ** + ** ** + ***************************************************************************/ +int lowerlayer_establish(void) +{ + LOG_FUNC_IN; + LOG_FUNC_RETURN (RETURNok); +} + +/**************************************************************************** + ** ** + ** Name: lowerlayer_release() ** + ** ** + ** Description: Notify the EPS Mobility Management entity that NAS signal-** + ** ling connection has been released ** + ** ** + ** Inputs: cause: Release cause ** + ** Others: None ** + ** ** + ** Outputs: None ** + ** Return: RETURNok, RETURNerror ** + ** Others: None ** + ** ** + ***************************************************************************/ +int lowerlayer_release(int cause) +{ + LOG_FUNC_IN; + + emm_sap_t emm_sap; + int rc; + + emm_sap.primitive = EMMREG_LOWERLAYER_RELEASE; + emm_sap.u.emm_reg.ueid = 0; + emm_sap.u.emm_reg.ctx = NULL; + rc = emm_sap_send(&emm_sap); + + LOG_FUNC_RETURN (rc); +} + +/**************************************************************************** + ** ** + ** Name: lowerlayer_data_ind() ** + ** ** + ** Description: Notify the EPS Session Management entity that data have ** + ** been received from lower layers ** + ** ** + ** Inputs: ueid: UE lower layer identifier ** + ** data: Data transfered from lower layers ** + ** Others: None ** + ** ** + ** Outputs: None ** + ** Return: RETURNok, RETURNerror ** + ** Others: None ** + ** ** + ***************************************************************************/ +int lowerlayer_data_ind(unsigned int ueid, const OctetString *data) +{ + esm_sap_t esm_sap; + int rc; + emm_data_context_t *emm_ctx = NULL; + + LOG_FUNC_IN; + +#if defined(NAS_BUILT_IN_EPC) + if (ueid > 0) { + emm_ctx = emm_data_context_get(&_emm_data, ueid); + } + +#endif + + esm_sap.primitive = ESM_UNITDATA_IND; + esm_sap.is_standalone = TRUE; + esm_sap.ueid = ueid; + esm_sap.ctx = emm_ctx; + esm_sap.recv = data; + rc = esm_sap_send(&esm_sap); + + LOG_FUNC_RETURN (rc); +} + +/**************************************************************************** + ** ** + ** Name: lowerlayer_data_req() ** + ** ** + ** Description: Notify the EPS Mobility Management entity that data have ** + ** to be transfered to lower layers ** + ** ** + ** Inputs: ueid: UE lower layer identifier ** + ** data: Data to be transfered to lower layers ** + ** Others: None ** + ** ** + ** Outputs: None ** + ** Return: RETURNok, RETURNerror ** + ** Others: None ** + ** ** + ***************************************************************************/ +int lowerlayer_data_req(unsigned int ueid, const OctetString *data) +{ + LOG_FUNC_IN; + + int rc; + emm_sap_t emm_sap; + emm_security_context_t *sctx = NULL; + struct emm_data_context_s *ctx = NULL; + + emm_sap.primitive = EMMAS_DATA_REQ; + emm_sap.u.emm_as.u.data.guti = NULL; + emm_sap.u.emm_as.u.data.ueid = ueid; +# if defined(NAS_BUILT_IN_EPC) + + if (ueid > 0) { + ctx = emm_data_context_get(&_emm_data, ueid); + } + +# else + + if (ueid < EMM_DATA_NB_UE_MAX) { + ctx = _emm_data.ctx[ueid]; + } + +# endif + + if (ctx) { + sctx = ctx->security; + } + emm_sap.u.emm_as.u.data.NASinfo = 0; + emm_sap.u.emm_as.u.data.NASmsg.length = data->length; + emm_sap.u.emm_as.u.data.NASmsg.value = data->value; + /* Setup EPS NAS security data */ + emm_as_set_security_data(&emm_sap.u.emm_as.u.data.sctx, sctx, FALSE, TRUE); + rc = emm_sap_send(&emm_sap); + + LOG_FUNC_RETURN (rc); +} + +/* + * -------------------------------------------------------------------------- + * EMM procedure handlers + * -------------------------------------------------------------------------- + */ + +/**************************************************************************** + ** ** + ** Name: emm_as_set_security_data() ** + ** ** + ** Description: Setup security data according to the given EPS security ** + ** context when data transfer to lower layers is requested ** + ** ** + ** Inputs: args: EPS security context currently in use ** + ** is_new: Indicates whether a new security context ** + ** has just been taken into use ** + ** is_ciphered: Indicates whether the NAS message has to ** + ** be sent ciphered ** + ** Others: None ** + ** ** + ** Outputs: data: EPS NAS security data to be setup ** + ** Return: None ** + ** Others: None ** + ** ** + ***************************************************************************/ +void emm_as_set_security_data(emm_as_security_data_t *data, const void *args, + int is_new, int is_ciphered) +{ + LOG_FUNC_IN; + + const emm_security_context_t *context = (emm_security_context_t *)(args); + + memset(data, 0, sizeof(emm_as_security_data_t)); + + if ( context && (context->type != EMM_KSI_NOT_AVAILABLE) ) { + /* 3GPP TS 24.301, sections 5.4.3.3 and 5.4.3.4 + * Once a valid EPS security context exists and has been taken + * into use, UE and MME shall cipher and integrity protect all + * NAS signalling messages with the selected NAS ciphering and + * NAS integrity algorithms */ + LOG_TRACE(INFO, + "EPS security context exists is new %u KSI %u SQN %u count %u", + is_new, + context->eksi, + context->ul_count.seq_num, + *(uint32_t *)(&context->ul_count)); + LOG_TRACE(INFO, + "knas_int %s",dump_octet_string(&context->knas_int)); + LOG_TRACE(INFO, + "knas_enc %s",dump_octet_string(&context->knas_enc)); + LOG_TRACE(INFO, + "kasme %s",dump_octet_string(&context->kasme)); + + data->is_new = is_new; + data->ksi = context->eksi; + data->sqn = context->dl_count.seq_num; + // LG data->count = *(uint32_t *)(&context->ul_count); + data->count = 0x00000000 | (context->dl_count.overflow << 8 ) | context->dl_count.seq_num; + /* NAS integrity and cyphering keys may not be available if the + * current security context is a partial EPS security context + * and not a full native EPS security context */ + data->k_int = &context->knas_int; + + if (is_ciphered) { + /* 3GPP TS 24.301, sections 4.4.5 + * When the UE establishes a new NAS signalling connection, + * it shall send initial NAS messages integrity protected + * and unciphered */ + /* 3GPP TS 24.301, section 5.4.3.2 + * The MME shall send the SECURITY MODE COMMAND message integrity + * protected and unciphered */ + LOG_TRACE(WARNING, + "EPS security context exists knas_enc"); + data->k_enc = &context->knas_enc; + } + } else { + LOG_TRACE(WARNING, "EMM_AS_NO_KEY_AVAILABLE"); + /* No valid EPS security context exists */ + data->ksi = EMM_AS_NO_KEY_AVAILABLE; + } + + LOG_FUNC_OUT; +} + +/****************************************************************************/ +/********************* L O C A L F U N C T I O N S *********************/ +/****************************************************************************/ + diff --git a/openair-cn/NAS/MME/EMM/LowerLayer.h b/openair-cn/NAS/MME/EMM/LowerLayer.h new file mode 100644 index 0000000000..a0cef2582b --- /dev/null +++ b/openair-cn/NAS/MME/EMM/LowerLayer.h @@ -0,0 +1,79 @@ +/******************************************************************************* + OpenAirInterface + Copyright(c) 1999 - 2014 Eurecom + + OpenAirInterface is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + + OpenAirInterface is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with OpenAirInterface.The full GNU General Public License is + included in this distribution in the file called "COPYING". If not, + see . + + Contact Information + OpenAirInterface Admin: openair_admin@eurecom.fr + OpenAirInterface Tech : openair_tech@eurecom.fr + OpenAirInterface Dev : openair4g-devel@eurecom.fr + + Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. + + *******************************************************************************/ +/***************************************************************************** +Source lowerlayer.h + +Version 0.1 + +Date 2013/06/19 + +Product NAS stack + +Subsystem EPS Mobility Management + +Author Frederic Maurel + +Description Defines EMM procedures executed by the Non-Access Stratum + upon receiving notifications from lower layers so that data + transfer succeed or failed, or NAS signalling connection is + released, or ESM unit data has been received from under layer, + and to request ESM unit data transfer to under layer. + +*****************************************************************************/ +#ifndef __LOWERLAYER_H__ +#define __LOWERLAYER_H__ + +#include "OctetString.h" + +/****************************************************************************/ +/********************* G L O B A L C O N S T A N T S *******************/ +/****************************************************************************/ + + +/****************************************************************************/ +/************************ G L O B A L T Y P E S ************************/ +/****************************************************************************/ + +/****************************************************************************/ +/******************** G L O B A L V A R I A B L E S ********************/ +/****************************************************************************/ + +/****************************************************************************/ +/****************** E X P O R T E D F U N C T I O N S ******************/ +/****************************************************************************/ + +int lowerlayer_success(unsigned int ueid); +int lowerlayer_failure(unsigned int ueid); +int lowerlayer_establish(void); +int lowerlayer_release(int cause); + +int lowerlayer_data_ind(unsigned int ueid, const OctetString *data); +int lowerlayer_data_req(unsigned int ueid, const OctetString *data); + +#endif /* __LOWERLAYER_H__*/ diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/Makefile b/openair-cn/NAS/MME/EMM/Makefile similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/emm/Makefile rename to openair-cn/NAS/MME/EMM/Makefile diff --git a/openair-cn/NAS/EURECOM-NAS/src/api/network/COPYING b/openair-cn/NAS/MME/EMM/SAP/COPYING similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/api/network/COPYING rename to openair-cn/NAS/MME/EMM/SAP/COPYING diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/sap/EmmCommonProcedureInitiated.c b/openair-cn/NAS/MME/EMM/SAP/EmmCommonProcedureInitiated.c similarity index 99% rename from openair-cn/NAS/EURECOM-NAS/src/emm/sap/EmmCommonProcedureInitiated.c rename to openair-cn/NAS/MME/EMM/SAP/EmmCommonProcedureInitiated.c index 98495f7c43..91fad0d62f 100644 --- a/openair-cn/NAS/EURECOM-NAS/src/emm/sap/EmmCommonProcedureInitiated.c +++ b/openair-cn/NAS/MME/EMM/SAP/EmmCommonProcedureInitiated.c @@ -49,7 +49,6 @@ Description Implements the EPS Mobility Management procedures executed *****************************************************************************/ -#ifdef NAS_MME #include "emm_fsm.h" #include "commonDef.h" @@ -185,4 +184,3 @@ int EmmCommonProcedureInitiated(const emm_reg_t *evt) /********************* L O C A L F U N C T I O N S *********************/ /****************************************************************************/ -#endif diff --git a/openair-cn/NAS/MME/EMM/SAP/EmmDeregistered.c b/openair-cn/NAS/MME/EMM/SAP/EmmDeregistered.c new file mode 100644 index 0000000000..627986ba14 --- /dev/null +++ b/openair-cn/NAS/MME/EMM/SAP/EmmDeregistered.c @@ -0,0 +1,157 @@ +/******************************************************************************* + OpenAirInterface + Copyright(c) 1999 - 2014 Eurecom + + OpenAirInterface is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + + OpenAirInterface is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with OpenAirInterface.The full GNU General Public License is + included in this distribution in the file called "COPYING". If not, + see . + + Contact Information + OpenAirInterface Admin: openair_admin@eurecom.fr + OpenAirInterface Tech : openair_tech@eurecom.fr + OpenAirInterface Dev : openair4g-devel@eurecom.fr + + Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. + + *******************************************************************************/ +/***************************************************************************** + +Source EmmDeregistered.c + +Version 0.1 + +Date 2012/10/03 + +Product NAS stack + +Subsystem EPS Mobility Management + +Author Frederic Maurel + +Description Implements the EPS Mobility Management procedures executed + when the EMM-SAP is in EMM-DEREGISTERED state. + + In EMM-DEREGISTERED state, no EMM context has been established + or the EMM context is marked as detached. + The UE shall start the attach or combined attach procedure to + establish an EMM context. + + The MME may answer to an attach or a combined attach procedure + initiated by the UE. It may also answer to a tracking area + updating procedure or combined tracking area updating procedure + initiated by a UE if the EMM context is marked as detached. + +*****************************************************************************/ + +#include "emm_fsm.h" +#include "commonDef.h" +#include "networkDef.h" +#include "nas_log.h" + +#include "emm_proc.h" + +#include + +/****************************************************************************/ +/**************** E X T E R N A L D E F I N I T I O N S ****************/ +/****************************************************************************/ + +/****************************************************************************/ +/******************* L O C A L D E F I N I T I O N S *******************/ +/****************************************************************************/ + +/****************************************************************************/ +/****************** E X P O R T E D F U N C T I O N S ******************/ +/****************************************************************************/ + +/**************************************************************************** + ** ** + ** Name: EmmDeregistered() ** + ** ** + ** Description: Handles the behaviour of the UE and the MME while the ** + ** EMM-SAP is in EMM-DEREGISTERED state. ** + ** ** + ** 3GPP TS 24.301, section 5.2.2.2 ** + ** ** + ** Inputs: evt: The received EMM-SAP event ** + ** Others: emm_fsm_status ** + ** ** + ** Outputs: None ** + ** Return: RETURNok, RETURNerror ** + ** Others: emm_fsm_status ** + ** ** + ***************************************************************************/ +int EmmDeregistered(const emm_reg_t *evt) +{ + LOG_FUNC_IN; + + int rc = RETURNerror; + + assert(emm_fsm_get_status(evt->ueid, evt->ctx) == EMM_DEREGISTERED); + + switch (evt->primitive) { + + case _EMMREG_PROC_ABORT: + /* + * Ongoing EMM procedure aborted + */ + rc = RETURNok; + break; + + case _EMMREG_COMMON_PROC_REQ: + /* + * An EMM common procedure has been initiated; + * enter state EMM-COMMON-PROCEDURE-INITIATED. + */ + rc = emm_fsm_set_status(evt->ueid, evt->ctx, EMM_COMMON_PROCEDURE_INITIATED); + break; + + case _EMMREG_ATTACH_CNF: + /* + * Attach procedure successful and default EPS bearer + * context activated; + * enter state EMM-REGISTERED. + */ + rc = emm_fsm_set_status(evt->ueid, evt->ctx, EMM_REGISTERED); + break; + + case _EMMREG_LOWERLAYER_SUCCESS: + /* + * Data successfully delivered to the network + */ + rc = RETURNok; + break; + + case _EMMREG_LOWERLAYER_FAILURE: + /* + * Data failed to be delivered to the network + */ + rc = RETURNok; + break; + + default: + LOG_TRACE(ERROR, "EMM-FSM - Primitive is not valid (%d)", + evt->primitive); + break; + } + + + LOG_FUNC_RETURN (rc); +} + +/****************************************************************************/ +/********************* L O C A L F U N C T I O N S *********************/ +/****************************************************************************/ + diff --git a/openair-cn/NAS/MME/EMM/SAP/EmmDeregisteredAttachNeeded.c b/openair-cn/NAS/MME/EMM/SAP/EmmDeregisteredAttachNeeded.c new file mode 100644 index 0000000000..e69de29bb2 diff --git a/openair-cn/NAS/MME/EMM/SAP/EmmDeregisteredAttemptingToAttach.c b/openair-cn/NAS/MME/EMM/SAP/EmmDeregisteredAttemptingToAttach.c new file mode 100644 index 0000000000..e69de29bb2 diff --git a/openair-cn/NAS/MME/EMM/SAP/EmmDeregisteredInitiated.c b/openair-cn/NAS/MME/EMM/SAP/EmmDeregisteredInitiated.c new file mode 100644 index 0000000000..74cb43fbb5 --- /dev/null +++ b/openair-cn/NAS/MME/EMM/SAP/EmmDeregisteredInitiated.c @@ -0,0 +1,110 @@ +/******************************************************************************* + OpenAirInterface + Copyright(c) 1999 - 2014 Eurecom + + OpenAirInterface is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + + OpenAirInterface is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with OpenAirInterface.The full GNU General Public License is + included in this distribution in the file called "COPYING". If not, + see . + + Contact Information + OpenAirInterface Admin: openair_admin@eurecom.fr + OpenAirInterface Tech : openair_tech@eurecom.fr + OpenAirInterface Dev : openair4g-devel@eurecom.fr + + Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. + + *******************************************************************************/ +/***************************************************************************** +Source EmmDeregisteredInitiated.c + +Version 0.1 + +Date 2012/10/03 + +Product NAS stack + +Subsystem EPS Mobility Management + +Author Frederic Maurel + +Description Implements the EPS Mobility Management procedures executed + when the EMM-SAP is in EMM-DEREGISTERED-INITIATED state. + + In EMM-DEREGISTERED-INITIATED state, the UE has requested + release of the EMM context by starting the detach or combined + detach procedure and is waiting for a response from the MME. + The MME has started a detach procedure and is waiting for a + response from the UE. + +*****************************************************************************/ + +#include "emm_fsm.h" +#include "commonDef.h" +#include "nas_log.h" + +#include "emm_proc.h" + +#include + +/****************************************************************************/ +/**************** E X T E R N A L D E F I N I T I O N S ****************/ +/****************************************************************************/ + +/****************************************************************************/ +/******************* L O C A L D E F I N I T I O N S *******************/ +/****************************************************************************/ + +/****************************************************************************/ +/****************** E X P O R T E D F U N C T I O N S ******************/ +/****************************************************************************/ + +/**************************************************************************** + ** ** + ** Name: EmmDeregisteredInitiated() ** + ** ** + ** Description: Handles the behaviour of the UE and the MME while the ** + ** EMM-SAP is in EMM-DEREGISTERED-INITIATED state. ** + ** ** + ** Inputs: evt: The received EMM-SAP event ** + ** Others: emm_fsm_status ** + ** ** + ** Outputs: None ** + ** Return: RETURNok, RETURNerror ** + ** Others: emm_fsm_status ** + ** ** + ***************************************************************************/ +int EmmDeregisteredInitiated(const emm_reg_t *evt) +{ + LOG_FUNC_IN; + + int rc = RETURNerror; + + assert(emm_fsm_get_status(evt->ueid, evt->ctx) == EMM_DEREGISTERED_INITIATED); + + switch (evt->primitive) { + + default: + LOG_TRACE(ERROR, "EMM-FSM - Primitive is not valid (%d)", + evt->primitive); + break; + } + + LOG_FUNC_RETURN (rc); +} + +/****************************************************************************/ +/********************* L O C A L F U N C T I O N S *********************/ +/****************************************************************************/ + diff --git a/openair-cn/NAS/MME/EMM/SAP/EmmDeregisteredLimitedService.c b/openair-cn/NAS/MME/EMM/SAP/EmmDeregisteredLimitedService.c new file mode 100644 index 0000000000..e69de29bb2 diff --git a/openair-cn/NAS/MME/EMM/SAP/EmmDeregisteredNoCellAvailable.c b/openair-cn/NAS/MME/EMM/SAP/EmmDeregisteredNoCellAvailable.c new file mode 100644 index 0000000000..e69de29bb2 diff --git a/openair-cn/NAS/MME/EMM/SAP/EmmDeregisteredNoImsi.c b/openair-cn/NAS/MME/EMM/SAP/EmmDeregisteredNoImsi.c new file mode 100644 index 0000000000..e69de29bb2 diff --git a/openair-cn/NAS/MME/EMM/SAP/EmmDeregisteredNormalService.c b/openair-cn/NAS/MME/EMM/SAP/EmmDeregisteredNormalService.c new file mode 100644 index 0000000000..e69de29bb2 diff --git a/openair-cn/NAS/MME/EMM/SAP/EmmDeregisteredPlmnSearch.c b/openair-cn/NAS/MME/EMM/SAP/EmmDeregisteredPlmnSearch.c new file mode 100644 index 0000000000..e69de29bb2 diff --git a/openair-cn/NAS/MME/EMM/SAP/EmmNull.c b/openair-cn/NAS/MME/EMM/SAP/EmmNull.c new file mode 100644 index 0000000000..e69de29bb2 diff --git a/openair-cn/NAS/MME/EMM/SAP/EmmRegistered.c b/openair-cn/NAS/MME/EMM/SAP/EmmRegistered.c new file mode 100644 index 0000000000..5c311dc8ee --- /dev/null +++ b/openair-cn/NAS/MME/EMM/SAP/EmmRegistered.c @@ -0,0 +1,153 @@ +/******************************************************************************* + OpenAirInterface + Copyright(c) 1999 - 2014 Eurecom + + OpenAirInterface is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + + OpenAirInterface is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with OpenAirInterface.The full GNU General Public License is + included in this distribution in the file called "COPYING". If not, + see . + + Contact Information + OpenAirInterface Admin: openair_admin@eurecom.fr + OpenAirInterface Tech : openair_tech@eurecom.fr + OpenAirInterface Dev : openair4g-devel@eurecom.fr + + Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. + + *******************************************************************************/ +/***************************************************************************** +Source EmmRegistered.c + +Version 0.1 + +Date 2012/10/03 + +Product NAS stack + +Subsystem EPS Mobility Management + +Author Frederic Maurel + +Description Implements the EPS Mobility Management procedures executed + when the EMM-SAP is in EMM-REGISTERED state. + + In EMM-REGISTERED state, an EMM context has been established + and a default EPS bearer context has been activated in the UE + and the MME. + The UE may initiate sending and receiving user data and signal- + ling information and reply to paging. Additionally, tracking + area updating or combined tracking area updating procedure is + performed. + +*****************************************************************************/ + +#include "emm_fsm.h" +#include "commonDef.h" +#include "networkDef.h" +#include "nas_log.h" + +#include "emm_proc.h" + +#include + +/****************************************************************************/ +/**************** E X T E R N A L D E F I N I T I O N S ****************/ +/****************************************************************************/ + +/****************************************************************************/ +/******************* L O C A L D E F I N I T I O N S *******************/ +/****************************************************************************/ + +/****************************************************************************/ +/****************** E X P O R T E D F U N C T I O N S ******************/ +/****************************************************************************/ + +/**************************************************************************** + ** ** + ** Name: EmmRegistered() ** + ** ** + ** Description: Handles the behaviour of the UE and the MME while the ** + ** EMM-SAP is in EMM-REGISTERED state. ** + ** ** + ** Inputs: evt: The received EMM-SAP event ** + ** Others: emm_fsm_status ** + ** ** + ** Outputs: None ** + ** Return: RETURNok, RETURNerror ** + ** Others: emm_fsm_status ** + ** ** + ***************************************************************************/ +int EmmRegistered(const emm_reg_t *evt) +{ + LOG_FUNC_IN; + + int rc = RETURNerror; + + assert(emm_fsm_get_status(evt->ueid, evt->ctx) == EMM_REGISTERED); + + switch (evt->primitive) { + + + + case _EMMREG_DETACH_REQ: + /* + * Network detach has been requested (implicit detach); + * enter state EMM-DEREGISTERED + */ + rc = emm_fsm_set_status(evt->ueid, evt->ctx, EMM_DEREGISTERED); + break; + + case _EMMREG_COMMON_PROC_REQ: + /* + * An EMM common procedure has been initiated; + * enter state EMM-COMMON-PROCEDURE-INITIATED. + */ + rc = emm_fsm_set_status(evt->ueid, evt->ctx, EMM_COMMON_PROCEDURE_INITIATED); + break; + + case _EMMREG_TAU_REJ: + /* + * TODO: Tracking Area Update has been rejected + */ + LOG_TRACE(ERROR, "EMM-FSM - Tracking Area Update procedure " + "is not implemented"); + break; + + case _EMMREG_LOWERLAYER_SUCCESS: + /* + * Data successfully delivered to the network + */ + rc = RETURNok; + break; + + case _EMMREG_LOWERLAYER_FAILURE: + /* + * Data failed to be delivered to the network + */ + rc = RETURNok; + break; + + default: + LOG_TRACE(ERROR, "EMM-FSM - Primitive is not valid (%d)", + evt->primitive); + break; + } + + LOG_FUNC_RETURN (rc); +} + +/****************************************************************************/ +/********************* L O C A L F U N C T I O N S *********************/ +/****************************************************************************/ + diff --git a/openair-cn/NAS/MME/EMM/SAP/EmmRegisteredAttemptingToUpdate.c b/openair-cn/NAS/MME/EMM/SAP/EmmRegisteredAttemptingToUpdate.c new file mode 100644 index 0000000000..e69de29bb2 diff --git a/openair-cn/NAS/MME/EMM/SAP/EmmRegisteredImsiDetachInitiated.c b/openair-cn/NAS/MME/EMM/SAP/EmmRegisteredImsiDetachInitiated.c new file mode 100644 index 0000000000..e69de29bb2 diff --git a/openair-cn/NAS/MME/EMM/SAP/EmmRegisteredInitiated.c b/openair-cn/NAS/MME/EMM/SAP/EmmRegisteredInitiated.c new file mode 100644 index 0000000000..e69de29bb2 diff --git a/openair-cn/NAS/MME/EMM/SAP/EmmRegisteredLimitedService.c b/openair-cn/NAS/MME/EMM/SAP/EmmRegisteredLimitedService.c new file mode 100644 index 0000000000..e69de29bb2 diff --git a/openair-cn/NAS/MME/EMM/SAP/EmmRegisteredNoCellAvailable.c b/openair-cn/NAS/MME/EMM/SAP/EmmRegisteredNoCellAvailable.c new file mode 100644 index 0000000000..e69de29bb2 diff --git a/openair-cn/NAS/MME/EMM/SAP/EmmRegisteredNormalService.c b/openair-cn/NAS/MME/EMM/SAP/EmmRegisteredNormalService.c new file mode 100644 index 0000000000..e69de29bb2 diff --git a/openair-cn/NAS/MME/EMM/SAP/EmmRegisteredPlmnSearch.c b/openair-cn/NAS/MME/EMM/SAP/EmmRegisteredPlmnSearch.c new file mode 100644 index 0000000000..e69de29bb2 diff --git a/openair-cn/NAS/MME/EMM/SAP/EmmRegisteredUpdateNeeded.c b/openair-cn/NAS/MME/EMM/SAP/EmmRegisteredUpdateNeeded.c new file mode 100644 index 0000000000..e69de29bb2 diff --git a/openair-cn/NAS/MME/EMM/SAP/EmmServiceRequestInitiated.c b/openair-cn/NAS/MME/EMM/SAP/EmmServiceRequestInitiated.c new file mode 100644 index 0000000000..e69de29bb2 diff --git a/openair-cn/NAS/MME/EMM/SAP/EmmTrackingAreaUpdatingInitiated.c b/openair-cn/NAS/MME/EMM/SAP/EmmTrackingAreaUpdatingInitiated.c new file mode 100644 index 0000000000..e69de29bb2 diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/sap/Makefile b/openair-cn/NAS/MME/EMM/SAP/Makefile similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/emm/sap/Makefile rename to openair-cn/NAS/MME/EMM/SAP/Makefile diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/sap/emm_as.c b/openair-cn/NAS/MME/EMM/SAP/emm_as.c similarity index 74% rename from openair-cn/NAS/EURECOM-NAS/src/emm/sap/emm_as.c rename to openair-cn/NAS/MME/EMM/SAP/emm_as.c index 12f1874e6c..882c9e800e 100644 --- a/openair-cn/NAS/EURECOM-NAS/src/emm/sap/emm_as.c +++ b/openair-cn/NAS/MME/EMM/SAP/emm_as.c @@ -63,7 +63,7 @@ Description Defines the EMMAS Service Access Point that provides #include // memset #include // malloc, free -#if (defined(NAS_BUILT_IN_EPC) && defined(NAS_MME)) || (defined(NAS_BUILT_IN_UE) && defined(NAS_UE)) +#if defined(NAS_BUILT_IN_EPC) # include "nas_itti_messaging.h" #endif #include "msc.h" @@ -72,9 +72,6 @@ Description Defines the EMMAS Service Access Point that provides /**************** E X T E R N A L D E F I N I T I O N S ****************/ /****************************************************************************/ -#ifdef NAS_UE -extern int emm_proc_plmn_selection_end(int found, tac_t tac, ci_t ci, AcT_t rat); -#endif extern int emm_proc_status(unsigned int ueid, int emm_cause); @@ -111,20 +108,10 @@ static const char *_emm_as_primitive_str[] = { static int _emm_as_recv(unsigned int ueid, const char *msg, int len, int *emm_cause); -#ifdef NAS_UE -static int _emm_as_establish_cnf(const emm_as_establish_t *msg, int *emm_cause); -static int _emm_as_establish_rej(void); -static int _emm_as_release_ind(const emm_as_release_t *msg); -static int _emm_as_page_ind(const emm_as_page_t *msg); -#endif -#ifdef NAS_MME static int _emm_as_establish_req(const emm_as_establish_t *msg, int *emm_cause); -#endif - static int _emm_as_cell_info_res(const emm_as_cell_info_t *msg); static int _emm_as_cell_info_ind(const emm_as_cell_info_t *msg); - static int _emm_as_data_ind(const emm_as_data_t *msg, int *emm_cause); /* @@ -149,14 +136,6 @@ static int _emm_as_encrypt( static int _emm_as_send(const emm_as_t *msg); -#ifdef NAS_UE -static int _emm_as_security_res(const emm_as_security_t *, - ul_info_transfer_req_t *); -static int _emm_as_establish_req(const emm_as_establish_t *, - nas_establish_req_t *); -#endif - -#ifdef NAS_MME static int _emm_as_security_req(const emm_as_security_t *, dl_info_transfer_req_t *); static int _emm_as_security_rej(const emm_as_security_t *, @@ -166,7 +145,6 @@ static int _emm_as_establish_cnf(const emm_as_establish_t *, static int _emm_as_establish_rej(const emm_as_establish_t *, nas_establish_rsp_t *); static int _emm_as_page_ind(const emm_as_page_t *, paging_req_t *); -#endif static int _emm_as_cell_info_req(const emm_as_cell_info_t *, cell_info_req_t *); @@ -223,7 +201,7 @@ int emm_as_send(const emm_as_t *msg) int emm_cause = EMM_CAUSE_SUCCESS; emm_as_primitive_t primitive = msg->primitive; - UInt32_t ueid = 0; + uint32_t ueid = 0; LOG_TRACE(INFO, "EMMAS-SAP - Received primitive %s (%d)", _emm_as_primitive_str[primitive - _EMMAS_START - 1], primitive); @@ -234,31 +212,10 @@ int emm_as_send(const emm_as_t *msg) ueid = msg->u.data.ueid; break; -#ifdef NAS_UE - - case _EMMAS_ESTABLISH_CNF: - rc = _emm_as_establish_cnf(&msg->u.establish, &emm_cause); - break; - - case _EMMAS_ESTABLISH_REJ: - rc = _emm_as_establish_rej(); - break; - - case _EMMAS_RELEASE_IND: - rc = _emm_as_release_ind(&msg->u.release); - break; - - case _EMMAS_PAGE_IND: - rc = _emm_as_page_ind(&msg->u.page); - break; -#endif -#ifdef NAS_MME - case _EMMAS_ESTABLISH_REQ: rc = _emm_as_establish_req(&msg->u.establish, &emm_cause); ueid = msg->u.establish.ueid; break; -#endif case _EMMAS_CELL_INFO_RES: rc = _emm_as_cell_info_res(&msg->u.cell_info); @@ -356,7 +313,6 @@ static int _emm_as_recv(unsigned int ueid, const char *msg, int len, memset(&nas_msg, 0 , sizeof(nas_message_t)); emm_security_context_t *security = NULL; /* Current EPS NAS security context */ -#if defined(NAS_MME) #if defined(NAS_BUILT_IN_EPC) emm_data_context_t *emm_ctx = NULL; #endif @@ -378,9 +334,6 @@ static int _emm_as_recv(unsigned int ueid, const char *msg, int len, } } -#endif -#else /* NAS_MME */ - security = _emm_data.security; #endif /* Decode the received message */ @@ -401,50 +354,6 @@ static int _emm_as_recv(unsigned int ueid, const char *msg, int len, rc = emm_recv_status(ueid, &emm_msg->emm_status, emm_cause); break; -#ifdef NAS_UE - - case IDENTITY_REQUEST: - rc = emm_recv_identity_request(&emm_msg->identity_request, - emm_cause); - break; - - case AUTHENTICATION_REQUEST: - rc = emm_recv_authentication_request( - &emm_msg->authentication_request, - emm_cause); - break; - - case AUTHENTICATION_REJECT: - rc = emm_recv_authentication_reject( - &emm_msg->authentication_reject, - emm_cause); - break; - - case SECURITY_MODE_COMMAND: - rc = emm_recv_security_mode_command( - &emm_msg->security_mode_command, - emm_cause); - break; - - case DETACH_ACCEPT: - rc = emm_recv_detach_accept(&emm_msg->detach_accept, emm_cause); - break; -#endif - -#ifdef NAS_UE - - case TRACKING_AREA_UPDATE_ACCEPT: - case TRACKING_AREA_UPDATE_REJECT: - case SERVICE_REJECT: - case GUTI_REALLOCATION_COMMAND: - case EMM_INFORMATION: - case DOWNLINK_NAS_TRANSPORT: - case CS_SERVICE_NOTIFICATION: - /* TODO */ - break; -#endif -#ifdef NAS_MME - case ATTACH_REQUEST: rc = emm_recv_attach_request( ueid, @@ -501,7 +410,6 @@ static int _emm_as_recv(unsigned int ueid, const char *msg, int len, rc = emm_recv_detach_request(ueid, &emm_msg->detach_request, emm_cause); break; -#endif default: LOG_TRACE(WARNING, "EMMAS-SAP - EMM message 0x%x is not valid", @@ -537,7 +445,7 @@ static int _emm_as_data_ind(const emm_as_data_t *msg, int *emm_cause) int rc = RETURNerror; LOG_TRACE(INFO, "EMMAS-SAP - Received AS data transfer indication " - "(ueid=%u, delivered=%s, length=%d)", msg->ueid, + "(ueid="NAS_UE_ID_FMT", delivered=%s, length=%d)", msg->ueid, (msg->delivered)? "TRUE" : "FALSE", msg->NASmsg.length); if (msg->delivered) { @@ -551,7 +459,6 @@ static int _emm_as_data_ind(const emm_as_data_t *msg, int *emm_cause) memset(&header, 0, sizeof(header)); /* Decrypt the received security protected message */ -#if defined(NAS_MME) emm_data_context_t *emm_ctx = NULL; #if defined(NAS_BUILT_IN_EPC) @@ -573,9 +480,6 @@ static int _emm_as_data_ind(const emm_as_data_t *msg, int *emm_cause) } } -#endif -#else - security = _emm_data.security; #endif int bytes = nas_message_decrypt((char *)(msg->NASmsg.value), plain_msg, @@ -613,184 +517,6 @@ static int _emm_as_data_ind(const emm_as_data_t *msg, int *emm_cause) LOG_FUNC_RETURN (rc); } -#ifdef NAS_UE -/**************************************************************************** - ** ** - ** Name: _emm_as_establish_cnf() ** - ** ** - ** Description: Processes the EMMAS-SAP connection establish confirmation ** - ** primitive ** - ** ** - ** EMMAS-SAP - AS->EMM: ESTABLISH_CNF - NAS signalling connection ** - ** ** - ** Inputs: msg: The EMMAS-SAP primitive to process ** - ** Others: None ** - ** ** - ** Outputs: emm_cause: EMM cause code ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -static int _emm_as_establish_cnf(const emm_as_establish_t *msg, - int *emm_cause) -{ - LOG_FUNC_IN; - - int decoder_rc; - int rc = RETURNerror; - - LOG_TRACE(INFO, "EMMAS-SAP - Received AS connection establish confirm"); - - if (msg->NASmsg.length > 0) { - /* The NAS signalling connection is established */ - (void) lowerlayer_establish(); - } else { - /* The initial NAS message has been successfully delivered to - * lower layers */ - rc = lowerlayer_success(0); - LOG_FUNC_RETURN (rc); - } - - nas_message_t nas_msg; - memset(&nas_msg, 0 , sizeof(nas_message_t)); - - /* Decode initial NAS message */ - decoder_rc = nas_message_decode((char *)(msg->NASmsg.value), - &nas_msg, - msg->NASmsg.length, - _emm_data.security); - - if (decoder_rc < 0) { - LOG_TRACE(WARNING, "EMMAS-SAP - Failed to decode initial NAS message" - "(err=%d)", decoder_rc); - *emm_cause = EMM_CAUSE_PROTOCOL_ERROR; - LOG_FUNC_RETURN (decoder_rc); - } - - /* Process initial NAS message */ - EMM_msg *emm_msg = &nas_msg.plain.emm; - - switch (emm_msg->header.message_type) { - case ATTACH_ACCEPT: - rc = emm_recv_attach_accept(&emm_msg->attach_accept, emm_cause); - break; - - case ATTACH_REJECT: - rc = emm_recv_attach_reject(&emm_msg->attach_reject, emm_cause); - break; - - case DETACH_ACCEPT: - break; - - case TRACKING_AREA_UPDATE_ACCEPT: - break; - - default: - LOG_TRACE(WARNING, "EMMAS-SAP - Initial NAS message 0x%x is " - "not valid", emm_msg->header.message_type); - *emm_cause = EMM_CAUSE_MESSAGE_TYPE_NOT_COMPATIBLE; - break; - } - - LOG_FUNC_RETURN (rc); -} - -/**************************************************************************** - ** ** - ** Name: _emm_as_establish_rej() ** - ** ** - ** Description: Processes the EMMAS-SAP connection establish reject ** - ** primitive ** - ** ** - ** EMMAS-SAP - AS->EMM: ESTABLISH_REJ - NAS signalling connection ** - ** ** - ** Inputs: None ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -static int _emm_as_establish_rej(void) -{ - LOG_FUNC_IN; - - int rc; - - LOG_TRACE(INFO, "EMMAS-SAP - Received AS initial NAS message transmission " - "failure"); - - /* Process lower layer transmission failure of initial NAS message */ - rc = lowerlayer_failure(0); - - LOG_FUNC_RETURN (rc); -} - -/**************************************************************************** - ** ** - ** Name: _emm_as_release_ind() ** - ** ** - ** Description: Processes the EMMAS-SAP connection release indication ** - ** primitive ** - ** ** - ** EMMAS-SAP - AS->EMM: RELEASE_IND - NAS signalling release procedure ** - ** ** - ** Inputs: msg: The EMMAS-SAP primitive to process ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -static int _emm_as_release_ind(const emm_as_release_t *msg) -{ - LOG_FUNC_IN; - - int rc = RETURNok; - - LOG_TRACE(INFO, "EMMAS-SAP - Received AS connection release indication " - "(cause=%d)", msg->cause); - - /* Process NAS signalling connection release indication */ - rc = lowerlayer_release(msg->cause); - - LOG_FUNC_RETURN (rc); -} - -/**************************************************************************** - ** ** - ** Name: _emm_as_page_ind() ** - ** ** - ** Description: Processes the EMMAS-SAP paging data indication primitive ** - ** ** - ** EMMAS-SAP - AS->EMM: PAGE_IND - Paging data procedure ** - ** ** - ** Inputs: msg: The EMMAS-SAP primitive to process ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -static int _emm_as_page_ind(const emm_as_page_t *msg) -{ - LOG_FUNC_IN; - - int rc = RETURNok; - - LOG_TRACE(INFO, "EMMAS-SAP - Received AS paging data indication"); - - /* TODO */ - - LOG_FUNC_RETURN (rc); -} - -#endif - -#ifdef NAS_MME /**************************************************************************** ** ** ** Name: _emm_as_establish_req() ** @@ -825,7 +551,6 @@ static int _emm_as_establish_req(const emm_as_establish_t *msg, int *emm_cause) nas_message_t nas_msg; memset(&nas_msg, 0 , sizeof(nas_message_t)); -#if defined(NAS_MME) #if defined(NAS_BUILT_IN_EPC) emm_ctx = emm_data_context_get(&_emm_data, msg->ueid); #else @@ -840,11 +565,6 @@ static int _emm_as_establish_req(const emm_as_establish_t *msg, int *emm_cause) emm_security_context = emm_ctx->security; } -#else /* NAS_MME */ - security = _emm_data.security; -#endif - - /* Decode initial NAS message */ decoder_rc = nas_message_decode( (char *)(msg->NASmsg.value), @@ -900,7 +620,6 @@ static int _emm_as_establish_req(const emm_as_establish_t *msg, int *emm_cause) LOG_FUNC_RETURN (rc); } -#endif /**************************************************************************** ** ** @@ -931,23 +650,7 @@ static int _emm_as_cell_info_res(const emm_as_cell_info_t *msg) LOG_TRACE(INFO, "EMMAS-SAP - Received AS cell information response"); -#ifdef NAS_UE - int AcT = NET_ACCESS_EUTRAN; - if (msg->found == TRUE) { - /* Get the first supported access technology */ - while (AcT != NET_ACCESS_UNAVAILABLE) { - if (msg->rat & (1 << AcT)) { - break; - } - - AcT -= 1; - } - } - - /* Notify EMM that a cell has been found */ - rc = emm_proc_plmn_selection_end(msg->found, msg->tac, msg->cellID, AcT); -#endif LOG_FUNC_RETURN (rc); } @@ -1216,23 +919,6 @@ static int _emm_as_send(const emm_as_t *msg) &as_msg.msg.nas_release_req); break; -#ifdef NAS_UE - - case _EMMAS_SECURITY_RES: - as_msg.msgID = _emm_as_security_res( - &msg->u.security, - &as_msg.msg.ul_info_transfer_req); - break; - - case _EMMAS_ESTABLISH_REQ: - as_msg.msgID = _emm_as_establish_req( - &msg->u.establish, - &as_msg.msg.nas_establish_req); - break; - -#endif -#ifdef NAS_MME - case _EMMAS_SECURITY_REQ: as_msg.msgID = _emm_as_security_req( &msg->u.security, @@ -1262,7 +948,6 @@ static int _emm_as_send(const emm_as_t *msg) &as_msg.msg.paging_req); break; -#endif case _EMMAS_CELL_INFO_REQ: as_msg.msgID = _emm_as_cell_info_req(&msg->u.cell_info, @@ -1280,7 +965,7 @@ static int _emm_as_send(const emm_as_t *msg) /* Send the message to the Access Stratum or S1AP in case of MME */ if (as_msg.msgID > 0) { -#if defined(NAS_BUILT_IN_EPC) && defined(NAS_MME) +#if defined(NAS_BUILT_IN_EPC) LOG_TRACE(DEBUG, "EMMAS-SAP - " "Sending msg with id 0x%x, primitive %s (%d) to S1AP layer for transmission", as_msg.msgID, @@ -1307,7 +992,7 @@ static int _emm_as_send(const emm_as_t *msg) LOG_FUNC_RETURN (RETURNok); } else { LOG_TRACE(DEBUG, "EMMAS-SAP - " - "Sending nas_itti_establish_cnf to S1AP UE ID %d" + "Sending nas_itti_establish_cnf to S1AP UE ID 0x%x" " selected_encryption_algorithm 0x%04X", " selected_integrity_algorithm 0x%04X", as_msg.msg.nas_establish_rsp.UEid, @@ -1330,65 +1015,6 @@ static int _emm_as_send(const emm_as_t *msg) break; } -#else -# if defined(NAS_BUILT_IN_UE) && defined(NAS_UE) - LOG_TRACE(DEBUG, "EMMAS-SAP - " - "Sending msg with id 0x%x, primitive %s (%d) to RRC layer for transmission", - as_msg.msgID, - _emm_as_primitive_str[msg->primitive - _EMMAS_START - 1], - msg->primitive); - - switch (as_msg.msgID) { - case AS_CELL_INFO_REQ: { - nas_itti_cell_info_req( - as_msg.msg.cell_info_req.plmnID, - as_msg.msg.cell_info_req.rat); - LOG_FUNC_RETURN (RETURNok); - } - break; - - case AS_NAS_ESTABLISH_REQ: { - nas_itti_nas_establish_req( - as_msg.msg.nas_establish_req.cause, - as_msg.msg.nas_establish_req.type, - as_msg.msg.nas_establish_req.s_tmsi, - as_msg.msg.nas_establish_req.plmnID, - as_msg.msg.nas_establish_req.initialNasMsg.data, - as_msg.msg.nas_establish_req.initialNasMsg.length); - LOG_FUNC_RETURN (RETURNok); - } - break; - - case AS_UL_INFO_TRANSFER_REQ: { - nas_itti_ul_data_req( - as_msg.msg.ul_info_transfer_req.UEid, - as_msg.msg.ul_info_transfer_req.nasMsg.data, - as_msg.msg.ul_info_transfer_req.nasMsg.length); - LOG_FUNC_RETURN (RETURNok); - } - break; - - case AS_RAB_ESTABLISH_RSP: { - nas_itti_rab_establish_rsp( - as_msg.msg.rab_establish_rsp.s_tmsi, - as_msg.msg.rab_establish_rsp.rabID, - as_msg.msg.rab_establish_rsp.errCode); - LOG_FUNC_RETURN (RETURNok); - } - break; - - default: - break; - } - -# else - int bytes = as_message_send(&as_msg); - - if (bytes > 0) { - LOG_FUNC_RETURN (RETURNok); - } - -# endif #endif } @@ -1438,23 +1064,10 @@ static int _emm_as_data_req(const emm_as_data_t *msg, /* Setup the NAS information message */ if (emm_msg != NULL) switch (msg->NASinfo) { -#ifdef NAS_UE - - case EMM_AS_NAS_DATA_ATTACH: - size = emm_send_attach_complete(msg, &emm_msg->attach_complete); - break; - - case EMM_AS_NAS_DATA_DETACH: - size = emm_send_detach_request(msg, &emm_msg->detach_request); - break; -#endif - -#ifdef NAS_MME case EMM_AS_NAS_DATA_DETACH: size = emm_send_detach_accept(msg, &emm_msg->detach_accept); break; -#endif default: /* Send other NAS messages as already encoded ESM messages */ @@ -1466,7 +1079,6 @@ static int _emm_as_data_req(const emm_as_data_t *msg, if (size > 0) { int bytes; emm_security_context_t *emm_security_context = NULL; -#if defined(NAS_MME) struct emm_data_context_s *emm_ctx = NULL; #if defined(NAS_BUILT_IN_EPC) emm_ctx = emm_data_context_get(&_emm_data, msg->ueid); @@ -1482,16 +1094,10 @@ static int _emm_as_data_req(const emm_as_data_t *msg, emm_security_context = emm_ctx->security; } -#else - emm_security_context = _emm_data.security; -#endif + if (emm_security_context) { -#ifdef NAS_MME nas_msg.header.sequence_number = emm_security_context->dl_count.seq_num; -#else - nas_msg.header.sequence_number = emm_security_context->ul_count.seq_num; -#endif LOG_TRACE(DEBUG, "Set nas_msg.header.sequence_number -> %u", nas_msg.header.sequence_number); @@ -1513,12 +1119,7 @@ static int _emm_as_data_req(const emm_as_data_t *msg, } if (bytes > 0) { -#ifdef NAS_UE - LOG_FUNC_RETURN (AS_UL_INFO_TRANSFER_REQ); -#endif -#ifdef NAS_MME LOG_FUNC_RETURN (AS_DL_INFO_TRANSFER_REQ); -#endif } } @@ -1572,7 +1173,6 @@ static int _emm_as_status_ind(const emm_as_status_t *msg, if (size > 0) { emm_security_context_t *emm_security_context = NULL; -#if defined(NAS_MME) struct emm_data_context_s *emm_ctx = NULL; #if defined(NAS_BUILT_IN_EPC) emm_ctx = emm_data_context_get(&_emm_data, msg->ueid); @@ -1588,16 +1188,8 @@ static int _emm_as_status_ind(const emm_as_status_t *msg, emm_security_context = emm_ctx->security; } -#else - emm_security_context = _emm_data.security; -#endif - if (emm_security_context) { -#ifdef NAS_MME nas_msg.header.sequence_number = emm_security_context->dl_count.seq_num; -#else - nas_msg.header.sequence_number = emm_security_context->ul_count.seq_num; -#endif LOG_TRACE(DEBUG, "Set nas_msg.header.sequence_number -> %u", nas_msg.header.sequence_number); @@ -1611,12 +1203,7 @@ static int _emm_as_status_ind(const emm_as_status_t *msg, emm_security_context); if (bytes > 0) { -#ifdef NAS_UE - LOG_FUNC_RETURN (AS_UL_INFO_TRANSFER_REQ); -#endif -#ifdef NAS_MME LOG_FUNC_RETURN (AS_DL_INFO_TRANSFER_REQ); -#endif } } @@ -1664,193 +1251,7 @@ static int _emm_as_release_req(const emm_as_release_t *msg, LOG_FUNC_RETURN (AS_NAS_RELEASE_REQ); } -#ifdef NAS_UE -/**************************************************************************** - ** ** - ** Name: _emm_as_security_res() ** - ** ** - ** Description: Processes the EMMAS-SAP security response primitive ** - ** ** - ** EMMAS-SAP - EMM->AS: SECURITY_RES - Security mode control procedure ** - ** ** - ** Inputs: msg: The EMMAS-SAP primitive to process ** - ** Others: None ** - ** ** - ** Outputs: as_msg: The message to send to the AS ** - ** Return: The identifier of the AS message ** - ** Others: None ** - ** ** - ***************************************************************************/ -static int _emm_as_security_res(const emm_as_security_t *msg, - ul_info_transfer_req_t *as_msg) -{ - LOG_FUNC_IN; - int size = 0; - - LOG_TRACE(INFO, "EMMAS-SAP - Send AS security response"); - - nas_message_t nas_msg; - memset(&nas_msg, 0 , sizeof(nas_message_t)); - - /* Setup the AS message */ - if (msg->guti) { - as_msg->s_tmsi.MMEcode = msg->guti->gummei.MMEcode; - as_msg->s_tmsi.m_tmsi = msg->guti->m_tmsi; - } - - /* Setup the NAS security header */ - EMM_msg *emm_msg = _emm_as_set_header(&nas_msg, &msg->sctx); - - /* Setup the NAS security message */ - if (emm_msg != NULL) switch (msg->msgType) { - case EMM_AS_MSG_TYPE_IDENT: - size = emm_send_identity_response( - msg, - &emm_msg->identity_response); - break; - - case EMM_AS_MSG_TYPE_AUTH: - if (msg->emm_cause != EMM_CAUSE_SUCCESS) { - size = emm_send_authentication_failure( - msg, - &emm_msg->authentication_failure); - } else { - size = emm_send_authentication_response( - msg, - &emm_msg->authentication_response); - } - - break; - - case EMM_AS_MSG_TYPE_SMC: - if (msg->emm_cause != EMM_CAUSE_SUCCESS) { - size = emm_send_security_mode_reject( - msg, - &emm_msg->security_mode_reject); - } else { - size = emm_send_security_mode_complete( - msg, - &emm_msg->security_mode_complete); - } - - break; - - default: - LOG_TRACE(WARNING, "EMMAS-SAP - Type of NAS security " - "message 0x%.2x is not valid", msg->msgType); - } - - if (size > 0) { - /* Encode the NAS security message */ - int bytes = _emm_as_encode(&as_msg->nasMsg, - &nas_msg, - size, - _emm_data.security); - - if (bytes > 0) { - LOG_FUNC_RETURN (AS_UL_INFO_TRANSFER_REQ); - } - } - - LOG_FUNC_RETURN (0); -} - -/**************************************************************************** - ** ** - ** Name: _emm_as_establish_req() ** - ** ** - ** Description: Processes the EMMAS-SAP connection establish request ** - ** primitive ** - ** ** - ** EMMAS-SAP - EMM->AS: ESTABLISH_REQ - NAS signalling connection ** - ** The NAS requests the AS to establish signalling connection ** - ** to tranfer initial NAS message to the network. ** - ** ** - ** Inputs: msg: The EMMAS-SAP primitive to process ** - ** Others: None ** - ** ** - ** Outputs: as_msg: The message to send to the AS ** - ** Return: The identifier of the AS message ** - ** Others: None ** - ** ** - ***************************************************************************/ -static int _emm_as_establish_req(const emm_as_establish_t *msg, - nas_establish_req_t *as_msg) -{ - LOG_FUNC_IN; - - int size = 0; - - LOG_TRACE(INFO, "EMMAS-SAP - Send AS connection establish request"); - - nas_message_t nas_msg; - memset(&nas_msg, 0 , sizeof(nas_message_t)); - - /* Setup the AS message */ - as_msg->cause = msg->RRCcause; - as_msg->type = msg->RRCtype; - as_msg->plmnID = *msg->plmnID; - - /* Derive the S-TMSI from the GUTI, if valid */ - if (msg->UEid.guti) { - as_msg->s_tmsi.MMEcode = msg->UEid.guti->gummei.MMEcode; - as_msg->s_tmsi.m_tmsi = msg->UEid.guti->m_tmsi; - } - - /* Setup the NAS security header */ - EMM_msg *emm_msg = _emm_as_set_header(&nas_msg, &msg->sctx); - - /* Setup the initial NAS information message */ - if (emm_msg != NULL) switch (msg->NASinfo) { - case EMM_AS_NAS_INFO_ATTACH: - size = emm_send_attach_request(msg, &emm_msg->attach_request); - break; - - case EMM_AS_NAS_INFO_DETACH: - size = emm_send_initial_detach_request(msg, - &emm_msg->detach_request); - break; - - case EMM_AS_NAS_INFO_TAU: - size = emm_send_initial_tau_request(msg, - &emm_msg->tracking_area_update_request); - break; - - case EMM_AS_NAS_INFO_SR: - size = emm_send_initial_sr_request(msg, - &emm_msg->service_request); - break; - - case EMM_AS_NAS_INFO_EXTSR: - size = emm_send_initial_extsr_request(msg, - &emm_msg->extended_service_request); - break; - - default: - LOG_TRACE(WARNING, "EMMAS-SAP - Type of initial NAS " - "message 0x%.2x is not valid", msg->NASinfo); - break; - } - - if (size > 0) { - /* Encode the initial NAS information message */ - int bytes = _emm_as_encode( - &as_msg->initialNasMsg, - &nas_msg, - size, - _emm_data.security); - - if (bytes > 0) { - LOG_FUNC_RETURN (AS_NAS_ESTABLISH_REQ); - } - } - - LOG_FUNC_RETURN (0); -} -#endif // NAS_UE - -#ifdef NAS_MME /**************************************************************************** ** ** ** Name: _emm_as_security_req() ** @@ -1894,9 +1295,9 @@ static int _emm_as_security_req(const emm_as_security_t *msg, if (emm_msg != NULL) switch (msg->msgType) { case EMM_AS_MSG_TYPE_IDENT: if (msg->guti) { - MSC_LOG_EVENT(MSC_NAS_EMM_MME, "send IDENTITY_REQUEST to s_TMSI %u.%u ", as_msg->s_tmsi.MMEcode, as_msg->s_tmsi.m_tmsi); + MSC_LOG_EVENT(MSC_NAS_EMM_MME, "0 send IDENTITY_REQUEST to s_TMSI %u.%u ", as_msg->s_tmsi.MMEcode, as_msg->s_tmsi.m_tmsi); } else { - MSC_LOG_EVENT(MSC_NAS_EMM_MME, "send IDENTITY_REQUEST to ue id %u ", as_msg->UEid); + MSC_LOG_EVENT(MSC_NAS_EMM_MME, "0 send IDENTITY_REQUEST to ue id "NAS_UE_ID_FMT" ", as_msg->UEid); } size = emm_send_identity_request(msg, &emm_msg->identity_request); @@ -1904,9 +1305,9 @@ static int _emm_as_security_req(const emm_as_security_t *msg, case EMM_AS_MSG_TYPE_AUTH: if (msg->guti) { - MSC_LOG_EVENT(MSC_NAS_EMM_MME, "send AUTHENTICATION_REQUEST to s_TMSI %u.%u ", as_msg->s_tmsi.MMEcode, as_msg->s_tmsi.m_tmsi); + MSC_LOG_EVENT(MSC_NAS_EMM_MME, "0 send AUTHENTICATION_REQUEST to s_TMSI %u.%u ", as_msg->s_tmsi.MMEcode, as_msg->s_tmsi.m_tmsi); } else { - MSC_LOG_EVENT(MSC_NAS_EMM_MME, "send AUTHENTICATION_REQUEST to ue id %u ", as_msg->UEid); + MSC_LOG_EVENT(MSC_NAS_EMM_MME, "0 send AUTHENTICATION_REQUEST to ue id "NAS_UE_ID_FMT" ", as_msg->UEid); } size = emm_send_authentication_request(msg, &emm_msg->authentication_request); @@ -1914,9 +1315,9 @@ static int _emm_as_security_req(const emm_as_security_t *msg, case EMM_AS_MSG_TYPE_SMC: if (msg->guti) { - MSC_LOG_EVENT(MSC_NAS_EMM_MME, "send SECURITY_MODE_COMMAND to s_TMSI %u.%u ", as_msg->s_tmsi.MMEcode, as_msg->s_tmsi.m_tmsi); + MSC_LOG_EVENT(MSC_NAS_EMM_MME, "0 send SECURITY_MODE_COMMAND to s_TMSI %u.%u ", as_msg->s_tmsi.MMEcode, as_msg->s_tmsi.m_tmsi); } else { - MSC_LOG_EVENT(MSC_NAS_EMM_MME, "send SECURITY_MODE_COMMAND to ue id %u ", as_msg->UEid); + MSC_LOG_EVENT(MSC_NAS_EMM_MME, "0 send SECURITY_MODE_COMMAND to ue id "NAS_UE_ID_FMT" ", as_msg->UEid); } size = emm_send_security_mode_command(msg, &emm_msg->security_mode_command); @@ -2009,9 +1410,9 @@ static int _emm_as_security_rej(const emm_as_security_t *msg, if (emm_msg != NULL) switch (msg->msgType) { case EMM_AS_MSG_TYPE_AUTH: if (msg->guti) { - MSC_LOG_EVENT(MSC_NAS_EMM_MME, "send AUTHENTICATION_REJECT to s_TMSI %u.%u ", as_msg->s_tmsi.MMEcode, as_msg->s_tmsi.m_tmsi); + MSC_LOG_EVENT(MSC_NAS_EMM_MME, "0 send AUTHENTICATION_REJECT to s_TMSI %u.%u ", as_msg->s_tmsi.MMEcode, as_msg->s_tmsi.m_tmsi); } else { - MSC_LOG_EVENT(MSC_NAS_EMM_MME, "send AUTHENTICATION_REJECT to ue id %x ", as_msg->UEid); + MSC_LOG_EVENT(MSC_NAS_EMM_MME, "0 send AUTHENTICATION_REJECT to ue id "NAS_UE_ID_FMT" ", as_msg->UEid); } size = emm_send_authentication_reject( &emm_msg->authentication_reject); @@ -2115,7 +1516,7 @@ static int _emm_as_establish_cnf(const emm_as_establish_t *msg, "EMMAS-SAP - emm_as_establish.nasMSG.length=%d", msg->NASmsg.length); - MSC_LOG_EVENT(MSC_NAS_EMM_MME, "send ATTACH_ACCEPT to s_TMSI %u.%u ", as_msg->s_tmsi.MMEcode, as_msg->s_tmsi.m_tmsi); + MSC_LOG_EVENT(MSC_NAS_EMM_MME, "0 send ATTACH_ACCEPT to s_TMSI %u.%u ", as_msg->s_tmsi.MMEcode, as_msg->s_tmsi.m_tmsi); size = emm_send_attach_accept(msg, &emm_msg->attach_accept); break; @@ -2231,18 +1632,18 @@ static int _emm_as_establish_rej(const emm_as_establish_t *msg, if (emm_msg != NULL) switch (msg->NASinfo) { case EMM_AS_NAS_INFO_ATTACH: if (msg->UEid.guti) { - MSC_LOG_EVENT(MSC_NAS_EMM_MME, "send ATTACH_REJECT to s_TMSI %u.%u ", as_msg->s_tmsi.MMEcode, as_msg->s_tmsi.m_tmsi); + MSC_LOG_EVENT(MSC_NAS_EMM_MME, "0 send ATTACH_REJECT to s_TMSI %u.%u ", as_msg->s_tmsi.MMEcode, as_msg->s_tmsi.m_tmsi); } else { - MSC_LOG_EVENT(MSC_NAS_EMM_MME, "send ATTACH_REJECT to ue id 0x%06"PRIX32" ", as_msg->UEid); + MSC_LOG_EVENT(MSC_NAS_EMM_MME, "0 send ATTACH_REJECT to ue id "NAS_UE_ID_FMT" ", as_msg->UEid); } size = emm_send_attach_reject(msg, &emm_msg->attach_reject); break; case EMM_AS_NAS_INFO_TAU: if (msg->UEid.guti) { - MSC_LOG_EVENT(MSC_NAS_EMM_MME, "send TRACKING_AREA_UPDATE_REJECT to s_TMSI %u.%u ", as_msg->s_tmsi.MMEcode, as_msg->s_tmsi.m_tmsi); + MSC_LOG_EVENT(MSC_NAS_EMM_MME, "0 send TRACKING_AREA_UPDATE_REJECT to s_TMSI %u.%u ", as_msg->s_tmsi.MMEcode, as_msg->s_tmsi.m_tmsi); } else { - MSC_LOG_EVENT(MSC_NAS_EMM_MME, "send TRACKING_AREA_UPDATE_REJECT to ue id 0x%06"PRIX32" ", as_msg->UEid); + MSC_LOG_EVENT(MSC_NAS_EMM_MME, "0 send TRACKING_AREA_UPDATE_REJECT to ue id "NAS_UE_ID_FMT" ", as_msg->UEid); } size = emm_send_tracking_area_update_reject(msg, &emm_msg->tracking_area_update_reject); @@ -2327,7 +1728,6 @@ static int _emm_as_page_ind(const emm_as_page_t *msg, paging_req_t *as_msg) LOG_FUNC_RETURN (0); } -#endif // NAS_MME /**************************************************************************** ** ** diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/sap/emm_as.h b/openair-cn/NAS/MME/EMM/SAP/emm_as.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/emm/sap/emm_as.h rename to openair-cn/NAS/MME/EMM/SAP/emm_as.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/sap/emm_asDef.h b/openair-cn/NAS/MME/EMM/SAP/emm_asDef.h similarity index 79% rename from openair-cn/NAS/EURECOM-NAS/src/emm/sap/emm_asDef.h rename to openair-cn/NAS/MME/EMM/SAP/emm_asDef.h index ddc98e9b4c..fbd2a6b38e 100644 --- a/openair-cn/NAS/EURECOM-NAS/src/emm/sap/emm_asDef.h +++ b/openair-cn/NAS/MME/EMM/SAP/emm_asDef.h @@ -58,7 +58,7 @@ Description Defines the EMM primitives available at the EMMAS Service /* * EMMAS-SAP primitives */ -typedef enum { +typedef enum emm_as_primitive_u { _EMMAS_START = 200, _EMMAS_SECURITY_REQ, /* EMM->AS: Security request */ _EMMAS_SECURITY_IND, /* AS->EMM: Security indication */ @@ -80,12 +80,12 @@ typedef enum { } emm_as_primitive_t; /* Data used to setup EPS NAS security */ -typedef struct { - UInt8_t is_new; /* New security data indicator */ +typedef struct emm_as_security_data_s { + uint8_t is_new; /* New security data indicator */ #define EMM_AS_NO_KEY_AVAILABLE 0xff - UInt8_t ksi; /* NAS key set identifier */ - UInt8_t sqn; /* Sequence number */ - UInt32_t count; /* NAS counter */ + uint8_t ksi; /* NAS key set identifier */ + uint8_t sqn; /* Sequence number */ + uint32_t count; /* NAS counter */ const OctetString *k_enc; /* NAS cyphering key */ const OctetString *k_int; /* NAS integrity key */ } emm_as_security_data_t; @@ -98,22 +98,22 @@ typedef struct { * EMMAS primitive for security * ---------------------------- */ -typedef struct { - UInt32_t ueid; /* UE lower layer identifier */ +typedef struct emm_as_security_s { + uint32_t ueid; /* UE lower layer identifier */ const GUTI_t *guti; /* GUTI temporary mobile identity */ emm_as_security_data_t sctx;/* EPS NAS security context */ int emm_cause; /* EMM failure cause code */ /* * Identity request/response */ - UInt8_t identType; /* Type of requested UE's identity */ + uint8_t identType; /* Type of requested UE's identity */ const imsi_t *imsi; /* The requested IMSI of the UE */ const imei_t *imei; /* The requested IMEI of the UE */ - UInt32_t tmsi; /* The requested TMSI of the UE */ + uint32_t tmsi; /* The requested TMSI of the UE */ /* * Authentication request/response */ - UInt8_t ksi; /* NAS key set identifier */ + uint8_t ksi; /* NAS key set identifier */ const OctetString *rand; /* Random challenge number */ const OctetString *autn; /* Authentication token */ const OctetString *res; /* Authentication response */ @@ -121,30 +121,30 @@ typedef struct { /* * Security Mode Command */ - UInt8_t eea; /* Replayed EPS encryption algorithms */ - UInt8_t eia; /* Replayed EPS integrity algorithms */ - UInt8_t uea; /* Replayed UMTS encryption algorithms */ + uint8_t eea; /* Replayed EPS encryption algorithms */ + uint8_t eia; /* Replayed EPS integrity algorithms */ + uint8_t uea; /* Replayed UMTS encryption algorithms */ uint8_t ucs2; - UInt8_t uia; /* Replayed UMTS integrity algorithms */ - UInt8_t gea; /* Replayed GPRS encryption algorithms */ - UInt8_t umts_present; - UInt8_t gprs_present; + uint8_t uia; /* Replayed UMTS integrity algorithms */ + uint8_t gea; /* Replayed GPRS encryption algorithms */ + uint8_t umts_present; + uint8_t gprs_present; // Added by LG - UInt8_t selected_eea; /* Selected EPS encryption algorithms */ - UInt8_t selected_eia; /* Selected EPS integrity algorithms */ + uint8_t selected_eea; /* Selected EPS encryption algorithms */ + uint8_t selected_eia; /* Selected EPS integrity algorithms */ #define EMM_AS_MSG_TYPE_IDENT 0x01 /* Identification message */ #define EMM_AS_MSG_TYPE_AUTH 0x02 /* Authentication message */ #define EMM_AS_MSG_TYPE_SMC 0x03 /* Security Mode Command */ - UInt8_t msgType; /* Type of NAS security message to transfer */ + uint8_t msgType; /* Type of NAS security message to transfer */ } emm_as_security_t; /* * EMMAS primitive for connection establishment * -------------------------------------------- */ -typedef struct { +typedef struct emm_as_EPS_identity_s { const GUTI_t *guti; /* The GUTI, if valid */ const tai_t *tai; /* The last visited registered Tracking * Area Identity, if available */ @@ -152,18 +152,18 @@ typedef struct { const imei_t *imei; /* UE's IMEI for emergency bearer services */ } emm_as_EPS_identity_t; -typedef struct { - UInt32_t ueid; /* UE lower layer identifier */ +typedef struct emm_as_establish_s { + uint32_t ueid; /* UE lower layer identifier */ emm_as_EPS_identity_t UEid; /* UE's EPS mobile identity */ emm_as_security_data_t sctx;/* EPS NAS security context */ int switch_off; /* TRUE if the UE is switched off */ - UInt8_t type; /* Network attach/detach type */ - UInt8_t RRCcause; /* Connection establishment cause */ - UInt8_t RRCtype; /* Associated call type */ + uint8_t type; /* Network attach/detach type */ + uint8_t RRCcause; /* Connection establishment cause */ + uint8_t RRCtype; /* Associated call type */ const plmn_t *plmnID; /* Identifier of the selected PLMN */ - UInt8_t ksi; /* NAS key set identifier */ - UInt8_t encryption:4; /* Ciphering algorithm */ - UInt8_t integrity:4; /* Integrity protection algorithm */ + uint8_t ksi; /* NAS key set identifier */ + uint8_t encryption:4; /* Ciphering algorithm */ + uint8_t integrity:4; /* Integrity protection algorithm */ int emm_cause; /* EMM failure cause code */ const GUTI_t *new_guti; /* New GUTI, if re-allocated */ int n_tacs; /* Number of concecutive tracking areas @@ -175,7 +175,7 @@ typedef struct { #define EMM_AS_NAS_INFO_TAU 0x03 /* Tracking Area Update request */ #define EMM_AS_NAS_INFO_SR 0x04 /* Service Request */ #define EMM_AS_NAS_INFO_EXTSR 0x05 /* Extended Service Request */ - UInt8_t NASinfo; /* Type of initial NAS information to transfer */ + uint8_t NASinfo; /* Type of initial NAS information to transfer */ OctetString NASmsg; /* NAS message to be transfered within * initial NAS information message */ } emm_as_establish_t; @@ -184,28 +184,28 @@ typedef struct { * EMMAS primitive for connection release * -------------------------------------- */ -typedef struct { - UInt32_t ueid; /* UE lower layer identifier */ +typedef struct emm_as_release_s { + uint32_t ueid; /* UE lower layer identifier */ const GUTI_t *guti; /* GUTI temporary mobile identity */ #define EMM_AS_CAUSE_AUTHENTICATION 0x01 /* Authentication failure */ #define EMM_AS_CAUSE_DETACH 0x02 /* Detach requested */ - UInt8_t cause; /* Release cause */ + uint8_t cause; /* Release cause */ } emm_as_release_t; /* * EMMAS primitive for data transfer * --------------------------------- */ -typedef struct { - UInt32_t ueid; /* UE lower layer identifier */ +typedef struct emm_as_data_s { + uint32_t ueid; /* UE lower layer identifier */ const GUTI_t *guti; /* GUTI temporary mobile identity */ emm_as_security_data_t sctx;/* EPS NAS security context */ int switch_off; /* TRUE if the UE is switched off */ - UInt8_t type; /* Network detach type */ - UInt8_t delivered; /* Data message delivery indicator */ + uint8_t type; /* Network detach type */ + uint8_t delivered; /* Data message delivery indicator */ #define EMM_AS_NAS_DATA_ATTACH 0x01 /* Attach complete */ #define EMM_AS_NAS_DATA_DETACH 0x02 /* Detach request */ - UInt8_t NASinfo; /* Type of NAS information to transfer */ + uint8_t NASinfo; /* Type of NAS information to transfer */ OctetString NASmsg; /* NAS message to be transfered */ } emm_as_data_t; @@ -213,14 +213,14 @@ typedef struct { * EMMAS primitive for paging * -------------------------- */ -typedef struct {} emm_as_page_t; +typedef struct emm_as_page_s {} emm_as_page_t; /* * EMMAS primitive for status indication * ------------------------------------- */ -typedef struct { - UInt32_t ueid; /* UE lower layer identifier */ +typedef struct emm_as_status_s { + uint32_t ueid; /* UE lower layer identifier */ const GUTI_t *guti; /* GUTI temporary mobile identity */ emm_as_security_data_t sctx;/* EPS NAS security context */ int emm_cause; /* EMM failure cause code */ @@ -230,8 +230,8 @@ typedef struct { * EMMAS primitive for cell information * ------------------------------------ */ -typedef struct { - UInt8_t found; /* Indicates whether a suitable cell is found */ +typedef struct emm_as_cell_info_s { + uint8_t found; /* Indicates whether a suitable cell is found */ #define EMM_AS_PLMN_LIST_SIZE 6 PLMN_LIST_T(EMM_AS_PLMN_LIST_SIZE) plmnIDs; /* List of identifiers of available PLMNs */ @@ -245,7 +245,7 @@ typedef struct { * Structure of EMMAS-SAP primitive * -------------------------------- */ -typedef struct { +typedef struct emm_as_s { emm_as_primitive_t primitive; union { emm_as_security_t security; diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/sap/emm_cn.c b/openair-cn/NAS/MME/EMM/SAP/emm_cn.c similarity index 78% rename from openair-cn/NAS/EURECOM-NAS/src/emm/sap/emm_cn.c rename to openair-cn/NAS/MME/EMM/SAP/emm_cn.c index abb2d3e1ff..603e849c14 100644 --- a/openair-cn/NAS/EURECOM-NAS/src/emm/sap/emm_cn.c +++ b/openair-cn/NAS/MME/EMM/SAP/emm_cn.c @@ -105,7 +105,7 @@ static int _emm_cn_authentication_res(const emm_cn_auth_res_t *msg) if (emm_ctx == NULL) { LOG_TRACE(ERROR, "EMM-PROC - " - "Failed to find UE associated to id %u...", msg->ue_id); + "Failed to find UE associated to id "NAS_UE_ID_FMT"...", msg->ue_id); LOG_FUNC_RETURN (rc); } @@ -166,13 +166,13 @@ static int _emm_cn_authentication_fail(const emm_cn_auth_fail_t *msg) LOG_FUNC_RETURN (rc); } -static int _emm_cn_deregister_ue(const UInt32_t ue_id) +static int _emm_cn_deregister_ue(const uint32_t ue_id) { int rc = RETURNok; LOG_FUNC_IN; LOG_TRACE(WARNING, "EMM-PROC - " - "TODO deregister UE %u, following procedure is a test"); + "TODO deregister UE "NAS_UE_ID_FMT", following procedure is a test", ue_id); emm_proc_detach_request(ue_id, EMM_DETACH_TYPE_EPS /* ??? emm_proc_detach_type_t*/, 1 /*switch_off*/, 0 /*native_ksi*/, 0 /*ksi*/, NULL /*guti*/, NULL /*imsi*/, NULL /*imei*/); @@ -181,26 +181,33 @@ static int _emm_cn_deregister_ue(const UInt32_t ue_id) static int _emm_cn_pdn_connectivity_res(const emm_cn_pdn_res_t *msg_pP) { - int rc = RETURNok; - struct emm_data_context_s *emm_ctx_p = NULL; - esm_proc_pdn_type_t esm_pdn_type = ESM_PDN_TYPE_IPV4; - esm_proc_data_t *esm_proc_data_p = NULL; - ESM_msg esm_msg; - EpsQualityOfService qos; - OctetString rsp = { 0, NULL}; - int is_standalone = 0; // warning hardcoded - int triggered_by_ue = 1; // warning hardcoded - attach_data_t *data_p = NULL; - int esm_cause = ESM_CAUSE_SUCCESS; - int pid = 0; - unsigned int new_ebi = 0; + int rc = RETURNok; + struct emm_data_context_s *emm_ctx_p = NULL; + esm_proc_pdn_type_t esm_pdn_type = ESM_PDN_TYPE_IPV4; + esm_proc_data_t *esm_proc_data_p = NULL; + ESM_msg esm_msg; + EpsQualityOfService qos; + ProtocolConfigurationOptions pco; + unsigned int pco_in_index = 0; + signed int length_in_pco = 0; + uint16_t pi_or_ci = 0; // protocol identifier or container identifier; + uint8_t length_pi_or_ci = 0; + + OctetString rsp = { 0, NULL}; + int is_standalone = 0; // warning hardcoded + int triggered_by_ue = 1; // warning hardcoded + attach_data_t *data_p = NULL; + int esm_cause = ESM_CAUSE_SUCCESS; + int pid = 0; + unsigned int new_ebi = 0; + LOG_FUNC_IN; emm_ctx_p = emm_data_context_get(&_emm_data, msg_pP->ue_id); if (emm_ctx_p == NULL) { LOG_TRACE(ERROR, "EMMCN-SAP - " - "Failed to find UE associated to id %u...", msg_pP->ue_id); + "Failed to find UE associated to id "NAS_UE_ID_FMT"...", msg_pP->ue_id); LOG_FUNC_RETURN (rc); } @@ -247,7 +254,44 @@ static int _emm_cn_pdn_connectivity_res(const emm_cn_pdn_res_t *msg_pP) qos.bitRatesExt.guarBitRateForUL = 0; qos.bitRatesExt.guarBitRateForDL = 0; + //-------------------------------------------------------------------------- + // PCO processing + //-------------------------------------------------------------------------- + memset(&pco, 0, sizeof(ProtocolConfigurationOptions)); + length_in_pco = msg_pP->pco.byte[1]; + if ((length_in_pco+1+1) != msg_pP->pco.length) { + LOG_TRACE(WARNING, "PCO: mismatch in lengths length_pco+1+1 %u != msg_pP->pco.length %u\n", + length_in_pco+1+1, msg_pP->pco.length); + } + pco.configurationprotol = msg_pP->pco.byte[2] & 0x07; + for (int i = 0; i < msg_pP->pco.length; i++) { + LOG_TRACE(WARNING, "EMMCN_PDN_CONNECTIVITY_RES.pco.byte[%u] = 0x%x", i, msg_pP->pco.byte[i]); + } + + + if ((length_in_pco > 0) && (msg_pP->pco.byte[2] & 0x80)) { + pco_in_index = PCO_MIN_LENGTH; + while (length_in_pco >= 3) { + pi_or_ci = (((uint16_t)msg_pP->pco.byte[pco_in_index]) << 8) | (uint16_t)msg_pP->pco.byte[pco_in_index+1]; + pco_in_index += 2; + length_pi_or_ci = msg_pP->pco.byte[pco_in_index++]; + pco.protocolid[pco.num_protocol_id_or_container_id] = pi_or_ci; + pco.lengthofprotocolid[pco.num_protocol_id_or_container_id] = length_pi_or_ci; + pco.protocolidcontents[pco.num_protocol_id_or_container_id].value = malloc(length_pi_or_ci); + pco.protocolidcontents[pco.num_protocol_id_or_container_id].length = length_pi_or_ci; + memcpy(pco.protocolidcontents[pco.num_protocol_id_or_container_id].value, + &msg_pP->pco.byte[pco_in_index], + length_pi_or_ci); + + LOG_TRACE(WARNING, "PCO: Found pi_or_ci 0x%x length %u content %s\n", + pi_or_ci, length_pi_or_ci, dump_octet_string(&pco.protocolidcontents[pco.num_protocol_id_or_container_id])); + pco.num_protocol_id_or_container_id++; + pco_in_index += length_pi_or_ci; + + length_in_pco = length_in_pco - (length_pi_or_ci + 2 + 1); + } // while (length_in_pco >= 3) { + } // if ((length_in_pco > 0) && (msg_pP->pco.byte[2] & 0x80)) { /*************************************************************************/ /* CODE THAT WAS IN esm_recv.c/esm_recv_pdn_connectivity_request() */ /*************************************************************************/ @@ -294,6 +338,7 @@ static int _emm_cn_pdn_connectivity_res(const emm_cn_pdn_res_t *msg_pP) new_ebi, //msg_pP->ebi, &esm_msg.activate_default_eps_bearer_context_request, &msg_pP->apn, + &pco, esm_pdn_type, &msg_pP->pdn_addr, &qos, diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/sap/emm_cn.h b/openair-cn/NAS/MME/EMM/SAP/emm_cn.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/emm/sap/emm_cn.h rename to openair-cn/NAS/MME/EMM/SAP/emm_cn.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/sap/emm_cnDef.h b/openair-cn/NAS/MME/EMM/SAP/emm_cnDef.h similarity index 99% rename from openair-cn/NAS/EURECOM-NAS/src/emm/sap/emm_cnDef.h rename to openair-cn/NAS/MME/EMM/SAP/emm_cnDef.h index d5a88b9923..738871e5eb 100644 --- a/openair-cn/NAS/EURECOM-NAS/src/emm/sap/emm_cnDef.h +++ b/openair-cn/NAS/MME/EMM/SAP/emm_cnDef.h @@ -70,7 +70,7 @@ typedef nas_pdn_connectivity_rsp_t emm_cn_pdn_res_t; typedef nas_pdn_connectivity_fail_t emm_cn_pdn_fail_t; typedef struct emm_cn_deregister_ue_s { - UInt32_t UEid; + uint32_t UEid; } emm_cn_deregister_ue_t; typedef struct emm_mme_ul_s { diff --git a/openair-cn/NAS/MME/EMM/SAP/emm_esm.c b/openair-cn/NAS/MME/EMM/SAP/emm_esm.c new file mode 100644 index 0000000000..2a7af5c780 --- /dev/null +++ b/openair-cn/NAS/MME/EMM/SAP/emm_esm.c @@ -0,0 +1,147 @@ +/******************************************************************************* + OpenAirInterface + Copyright(c) 1999 - 2014 Eurecom + + OpenAirInterface is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + + OpenAirInterface is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with OpenAirInterface.The full GNU General Public License is + included in this distribution in the file called "COPYING". If not, + see . + + Contact Information + OpenAirInterface Admin: openair_admin@eurecom.fr + OpenAirInterface Tech : openair_tech@eurecom.fr + OpenAirInterface Dev : openair4g-devel@eurecom.fr + + Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. + + *******************************************************************************/ +/***************************************************************************** +Source emm_esm.c + +Version 0.1 + +Date 2012/10/16 + +Product NAS stack + +Subsystem EPS Mobility Management + +Author Frederic Maurel + +Description Defines the EMMESM Service Access Point that provides + interlayer services to the EPS Session Management sublayer + for service registration and activate/deactivate PDN + connections. + +*****************************************************************************/ + +#include "emm_esm.h" +#include "commonDef.h" +#include "nas_log.h" + +#include "LowerLayer.h" + + +/****************************************************************************/ +/**************** E X T E R N A L D E F I N I T I O N S ****************/ +/****************************************************************************/ + +/****************************************************************************/ +/******************* L O C A L D E F I N I T I O N S *******************/ +/****************************************************************************/ + +/* + * String representation of EMMESM-SAP primitives + */ +static const char *_emm_esm_primitive_str[] = { + "EMMESM_RELEASE_IND", + "EMMESM_UNITDATA_REQ", + "EMMESM_UNITDATA_IND", +}; + +/****************************************************************************/ +/****************** E X P O R T E D F U N C T I O N S ******************/ +/****************************************************************************/ + +/**************************************************************************** + ** ** + ** Name: emm_esm_initialize() ** + ** ** + ** Description: Initializes the EMMESM Service Access Point ** + ** ** + ** Inputs: None ** + ** Others: None ** + ** ** + ** Outputs: None ** + ** Return: None ** + ** Others: NONE ** + ** ** + ***************************************************************************/ +void emm_esm_initialize(void) +{ + LOG_FUNC_IN; + + /* TODO: Initialize the EMMESM-SAP */ + + LOG_FUNC_OUT; +} + +/**************************************************************************** + ** ** + ** Name: emm_esm_send() ** + ** ** + ** Description: Processes the EMMESM Service Access Point primitive ** + ** ** + ** Inputs: msg: The EMMESM-SAP primitive to process ** + ** Others: None ** + ** ** + ** Outputs: None ** + ** Return: RETURNok, RETURNerror ** + ** Others: None ** + ** ** + ***************************************************************************/ +int emm_esm_send(const emm_esm_t *msg) +{ + LOG_FUNC_IN; + + int rc = RETURNerror; + emm_esm_primitive_t primitive = msg->primitive; + + LOG_TRACE(INFO, "EMMESM-SAP - Received primitive %s (%d)", + _emm_esm_primitive_str[primitive - _EMMESM_START - 1], primitive); + + switch (primitive) { + + case _EMMESM_UNITDATA_REQ: + /* ESM requests EMM to transfer ESM data unit to lower layer */ + rc = lowerlayer_data_req(msg->ueid, &msg->u.data.msg); + break; + + default: + break; + + } + + if (rc != RETURNok) { + LOG_TRACE(WARNING, "EMMESM-SAP - Failed to process primitive %s (%d)", + _emm_esm_primitive_str[primitive - _EMMESM_START - 1], + primitive); + } + + LOG_FUNC_RETURN (rc); +} + +/****************************************************************************/ +/********************* L O C A L F U N C T I O N S *********************/ +/****************************************************************************/ diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/sap/emm_esm.h b/openair-cn/NAS/MME/EMM/SAP/emm_esm.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/emm/sap/emm_esm.h rename to openair-cn/NAS/MME/EMM/SAP/emm_esm.h diff --git a/openair-cn/NAS/MME/EMM/SAP/emm_esmDef.h b/openair-cn/NAS/MME/EMM/SAP/emm_esmDef.h new file mode 100644 index 0000000000..3fbc035bdf --- /dev/null +++ b/openair-cn/NAS/MME/EMM/SAP/emm_esmDef.h @@ -0,0 +1,116 @@ +/******************************************************************************* + OpenAirInterface + Copyright(c) 1999 - 2014 Eurecom + + OpenAirInterface is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + + OpenAirInterface is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with OpenAirInterface.The full GNU General Public License is + included in this distribution in the file called "COPYING". If not, + see . + + Contact Information + OpenAirInterface Admin: openair_admin@eurecom.fr + OpenAirInterface Tech : openair_tech@eurecom.fr + OpenAirInterface Dev : openair4g-devel@eurecom.fr + + Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. + + *******************************************************************************/ +/***************************************************************************** +Source emm_esmDef.h + +Version 0.1 + +Date 2012/10/16 + +Product NAS stack + +Subsystem EPS Mobility Management + +Author Frederic Maurel + +Description Defines the EMMESM Service Access Point that provides + interlayer services to the EPS Session Management sublayer + for service registration and activate/deactivate PDN + connections. + +*****************************************************************************/ +#ifndef __EMM_ESMDEF_H__ +#define __EMM_ESMDEF_H__ + +#include "OctetString.h" +#include "emmData.h" + +/****************************************************************************/ +/********************* G L O B A L C O N S T A N T S *******************/ +/****************************************************************************/ + +/* + * EMMESM-SAP primitives + */ +typedef enum { + _EMMESM_START = 100, + _EMMESM_RELEASE_IND, + _EMMESM_UNITDATA_REQ, + _EMMESM_UNITDATA_IND, + _EMMESM_END +} emm_esm_primitive_t; + +/****************************************************************************/ +/************************ G L O B A L T Y P E S ************************/ +/****************************************************************************/ + +/* + * EMMESM primitive for connection establishment + * --------------------------------------------- + */ +typedef struct { + int is_emergency; /* Indicates whether the PDN connection is established + * for emergency bearer services only */ + int is_attached; /* Indicates whether the UE remains attached to the + * network */ +} emm_esm_establish_t; + +/* + * EMMESM primitive for data transfer + * ---------------------------------- + */ +typedef struct { + OctetString msg; /* ESM message to be transfered */ +} emm_esm_data_t; + +/* + * --------------------------------- + * Structure of EMMESM-SAP primitive + * --------------------------------- + */ +typedef struct { + emm_esm_primitive_t primitive; + unsigned int ueid; + emm_data_context_t *ctx; + union { + emm_esm_establish_t establish; + emm_esm_data_t data; + } u; + /* TODO: complete emm_esm_t structure definition */ +} emm_esm_t; + +/****************************************************************************/ +/******************** G L O B A L V A R I A B L E S ********************/ +/****************************************************************************/ + +/****************************************************************************/ +/****************** E X P O R T E D F U N C T I O N S ******************/ +/****************************************************************************/ + +#endif /* __EMM_ESMDEF_H__*/ diff --git a/openair-cn/NAS/MME/EMM/SAP/emm_fsm.c b/openair-cn/NAS/MME/EMM/SAP/emm_fsm.c new file mode 100644 index 0000000000..bbbace861b --- /dev/null +++ b/openair-cn/NAS/MME/EMM/SAP/emm_fsm.c @@ -0,0 +1,328 @@ +/******************************************************************************* + OpenAirInterface + Copyright(c) 1999 - 2014 Eurecom + + OpenAirInterface is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + + OpenAirInterface is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with OpenAirInterface.The full GNU General Public License is + included in this distribution in the file called "COPYING". If not, + see . + + Contact Information + OpenAirInterface Admin: openair_admin@eurecom.fr + OpenAirInterface Tech : openair_tech@eurecom.fr + OpenAirInterface Dev : openair4g-devel@eurecom.fr + + Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. + + *******************************************************************************/ +/***************************************************************************** + +Source emm_fsm.c + +Version 0.1 + +Date 2012/10/03 + +Product NAS stack + +Subsystem EPS Mobility Management + +Author Frederic Maurel + +Description Defines the EPS Mobility Management procedures executed at + the EMMREG Service Access Point. + +*****************************************************************************/ + +#include "emm_fsm.h" +#include "commonDef.h" +#include "nas_log.h" + +#include "mme_api.h" +#include "emmData.h" + +#if defined(NAS_BUILT_IN_EPC) +# include "assertions.h" +#endif +# include "msc.h" + +/****************************************************************************/ +/**************** E X T E R N A L D E F I N I T I O N S ****************/ +/****************************************************************************/ + + +#define EMM_FSM_NB_UE_MAX (MME_API_NB_UE_MAX + 1) + +/****************************************************************************/ +/******************* L O C A L D E F I N I T I O N S *******************/ +/****************************************************************************/ + +/* + * ----------------------------------------------------------------------------- + * Data used for trace logging + * ----------------------------------------------------------------------------- + */ + +/* String representation of EMM events */ +static const char *_emm_fsm_event_str[] = { + "COMMON_PROC_REQ", + "COMMON_PROC_CNF", + "COMMON_PROC_REJ", + "PROC_ABORT", + "ATTACH_CNF", + "ATTACH_REJ", + "DETACH_INIT", + "DETACH_REQ", + "DETACH_FAILED", + "DETACH_CNF", + "TAU_REQ", + "TAU_CNF", + "TAU_REJ", + "SERVICE_REQ", + "SERVICE_CNF", + "SERVICE_REJ", + "LOWERLAYER_SUCCESS", + "LOWERLAYER_FAILURE", + "LOWERLAYER_RELEASE", +}; + +/* String representation of EMM status */ +static const char *_emm_fsm_status_str[EMM_STATE_MAX] = { + "INVALID", + "DEREGISTERED", + "REGISTERED", + "DEREGISTERED-INITIATED", + "COMMON-PROCEDURE-INITIATED", +}; + +/* + * ----------------------------------------------------------------------------- + * EPS Mobility Management state machine handlers + * ----------------------------------------------------------------------------- + */ + +/* Type of the EPS Mobility Management state machine handler */ +typedef int(*emm_fsm_handler_t)(const emm_reg_t *); + +int EmmDeregistered(const emm_reg_t *); +int EmmRegistered(const emm_reg_t *); +int EmmDeregisteredInitiated(const emm_reg_t *); +int EmmCommonProcedureInitiated(const emm_reg_t *); + +/* EMM state machine handlers */ +static const emm_fsm_handler_t _emm_fsm_handlers[EMM_STATE_MAX] = { + NULL, + EmmDeregistered, + EmmRegistered, + EmmDeregisteredInitiated, + EmmCommonProcedureInitiated, +}; + +/* + * ----------------------------------------------------------------------------- + * Current EPS Mobility Management status + * ----------------------------------------------------------------------------- + */ + +#if !defined(NAS_BUILT_IN_EPC) +emm_fsm_state_t _emm_fsm_status[EMM_FSM_NB_UE_MAX]; +#endif + +/****************************************************************************/ +/****************** E X P O R T E D F U N C T I O N S ******************/ +/****************************************************************************/ + +/**************************************************************************** + ** ** + ** Name: emm_fsm_initialize() ** + ** ** + ** Description: Initializes the EMM state machine ** + ** ** + ** Inputs: None ** + ** Others: None ** + ** ** + ** Outputs: None ** + ** Return: None ** + ** Others: _emm_fsm_status ** + ** ** + ***************************************************************************/ +void emm_fsm_initialize(void) +{ + int ueid; + LOG_FUNC_IN; + + +#if !defined(NAS_BUILT_IN_EPC) + + for (ueid = 0; ueid < EMM_FSM_NB_UE_MAX; ueid++) { + _emm_fsm_status[ueid] = EMM_DEREGISTERED; + } + +#endif + + LOG_FUNC_OUT; +} + +/**************************************************************************** + ** ** + ** Name: emm_fsm_set_status() ** + ** ** + ** Description: Set the EPS Mobility Management status to the given state ** + ** ** + ** Inputs: ueid: Lower layers UE identifier ** + ** status: The new EMM status ** + ** Others: None ** + ** ** + ** Outputs: None ** + ** Return: RETURNok, RETURNerror ** + ** Others: _emm_fsm_status ** + ** ** + ***************************************************************************/ +int emm_fsm_set_status( + unsigned int ueid, + void *ctx, + emm_fsm_state_t status) +{ + LOG_FUNC_IN; + +#if defined(NAS_BUILT_IN_EPC) + emm_data_context_t *emm_ctx = (emm_data_context_t *)ctx; + + DevAssert(emm_ctx != NULL); + + if ((status < EMM_STATE_MAX) && (ueid > 0)) { + + if (status != emm_ctx->_emm_fsm_status) { + LOG_TRACE(INFO, "EMM-FSM - Status changed: %s ===> %s", + _emm_fsm_status_str[emm_ctx->_emm_fsm_status], + _emm_fsm_status_str[status]); + MSC_LOG_EVENT(MSC_NAS_EMM_MME, "0 EMM state %s ", _emm_fsm_status_str[status]); + emm_ctx->_emm_fsm_status = status; + } + + LOG_FUNC_RETURN (RETURNok); + } + +#else + + if ( (status < EMM_STATE_MAX) && (ueid < EMM_FSM_NB_UE_MAX) ) { + if (status != _emm_fsm_status[ueid]) { + LOG_TRACE(INFO, "EMM-FSM - Status changed: %s ===> %s", + _emm_fsm_status_str[_emm_fsm_status[ueid]], + _emm_fsm_status_str[status]); + + _emm_fsm_status[ueid] = status; + } + + LOG_FUNC_RETURN (RETURNok); + } + +#endif + + LOG_FUNC_RETURN (RETURNerror); +} + +/**************************************************************************** + ** ** + ** Name: emm_fsm_get_status() ** + ** ** + ** Description: Get the current value of the EPS Mobility Management ** + ** status ** + ** ** + ** Inputs: ueid: Lower layers UE identifier ** + ** Others: _emm_fsm_status ** + ** ** + ** Outputs: None ** + ** Return: The current value of the EMM status ** + ** Others: None ** + ** ** + ***************************************************************************/ +emm_fsm_state_t emm_fsm_get_status(unsigned int ueid, void *ctx) +{ +# if defined(NAS_BUILT_IN_EPC) + emm_data_context_t *emm_ctx = (emm_data_context_t *)ctx; + if (emm_ctx == NULL) { + LOG_TRACE(INFO, "EMM-FSM - try again get context ueid "NAS_UE_ID_FMT" ", + ueid); + emm_ctx = emm_data_context_get(&_emm_data, ueid); + } + if (emm_ctx != NULL) { + return emm_ctx->_emm_fsm_status; + } + +# else + + if (ueid < EMM_FSM_NB_UE_MAX) { + return (_emm_fsm_status[ueid]); + } +#endif + return EMM_STATE_MAX; +} + +/**************************************************************************** + ** ** + ** Name: emm_fsm_process() ** + ** ** + ** Description: Executes the EMM state machine ** + ** ** + ** Inputs: evt: The EMMREG-SAP event to process ** + ** Others: _emm_fsm_status ** + ** ** + ** Outputs: None ** + ** Return: RETURNok, RETURNerror ** + ** Others: None ** + ** ** + ***************************************************************************/ +int emm_fsm_process(const emm_reg_t *evt) +{ + int rc; + emm_fsm_state_t status; + emm_reg_primitive_t primitive; + + LOG_FUNC_IN; + + primitive = evt->primitive; + +# if defined(NAS_BUILT_IN_EPC) + emm_data_context_t *emm_ctx = (emm_data_context_t *)evt->ctx; + DevAssert(emm_ctx != NULL); + + status = emm_fsm_get_status(0, emm_ctx); +# else + + if (evt->ueid >= EMM_FSM_NB_UE_MAX) { + LOG_FUNC_RETURN (RETURNerror); + } + + status = _emm_fsm_status[evt->ueid]; +# endif + + LOG_TRACE(INFO, "EMM-FSM - Received event %s (%d) in state %s", + _emm_fsm_event_str[primitive - _EMMREG_START - 1], primitive, + _emm_fsm_status_str[status]); + +#if defined(NAS_BUILT_IN_EPC) + DevAssert(status != EMM_INVALID); +#endif + + /* Execute the EMM state machine */ + rc = (_emm_fsm_handlers[status])(evt); + + LOG_FUNC_RETURN (rc); +} + +/****************************************************************************/ +/********************* L O C A L F U N C T I O N S *********************/ +/****************************************************************************/ + diff --git a/openair-cn/NAS/MME/EMM/SAP/emm_fsm.h b/openair-cn/NAS/MME/EMM/SAP/emm_fsm.h new file mode 100644 index 0000000000..15ca989cc5 --- /dev/null +++ b/openair-cn/NAS/MME/EMM/SAP/emm_fsm.h @@ -0,0 +1,91 @@ +/******************************************************************************* + OpenAirInterface + Copyright(c) 1999 - 2014 Eurecom + + OpenAirInterface is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + + OpenAirInterface is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with OpenAirInterface.The full GNU General Public License is + included in this distribution in the file called "COPYING". If not, + see . + + Contact Information + OpenAirInterface Admin: openair_admin@eurecom.fr + OpenAirInterface Tech : openair_tech@eurecom.fr + OpenAirInterface Dev : openair4g-devel@eurecom.fr + + Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. + + *******************************************************************************/ +/***************************************************************************** + +Source emm_fsm.h + +Version 0.1 + +Date 2012/10/03 + +Product NAS stack + +Subsystem EPS Mobility Management + +Author Frederic Maurel + +Description Defines the EPS Mobility Management procedures executed at + the EMMREG Service Access Point. + +*****************************************************************************/ +#ifndef __EMM_FSM_H__ +#define __EMM_FSM_H__ + +#include "emm_regDef.h" + +/****************************************************************************/ +/********************* G L O B A L C O N S T A N T S *******************/ +/****************************************************************************/ + +/****************************************************************************/ +/************************ G L O B A L T Y P E S ************************/ +/****************************************************************************/ + +/* + * States of the EPS Mobility Management sublayer + * ---------------------------------------------- + * The EMM protocol of the UE and the network is described by means of two + * different state machines. + */ +typedef enum { + EMM_INVALID, + EMM_DEREGISTERED, + EMM_REGISTERED, + EMM_DEREGISTERED_INITIATED, + EMM_COMMON_PROCEDURE_INITIATED, + EMM_STATE_MAX +} emm_fsm_state_t; + +/****************************************************************************/ +/******************** G L O B A L V A R I A B L E S ********************/ +/****************************************************************************/ + +/****************************************************************************/ +/****************** E X P O R T E D F U N C T I O N S ******************/ +/****************************************************************************/ + +void emm_fsm_initialize(void); + +//LG 2015-03-13 struct emm_data_context_t; +int emm_fsm_set_status(unsigned int ueid, void *ctx, emm_fsm_state_t status); +emm_fsm_state_t emm_fsm_get_status(unsigned int ueid, void *ctx); + +int emm_fsm_process(const emm_reg_t *evt); + +#endif /* __EMM_FSM_H__*/ diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/sap/emm_recv.c b/openair-cn/NAS/MME/EMM/SAP/emm_recv.c similarity index 68% rename from openair-cn/NAS/EURECOM-NAS/src/emm/sap/emm_recv.c rename to openair-cn/NAS/MME/EMM/SAP/emm_recv.c index d37de4fc90..2f0d944679 100644 --- a/openair-cn/NAS/EURECOM-NAS/src/emm/sap/emm_recv.c +++ b/openair-cn/NAS/MME/EMM/SAP/emm_recv.c @@ -113,385 +113,11 @@ int emm_recv_status(unsigned int ueid, emm_status_msg *msg, int *emm_cause) LOG_FUNC_RETURN (rc); } -/* - * -------------------------------------------------------------------------- - * Functions executed by the UE upon receiving EMM message from the network - * -------------------------------------------------------------------------- - */ -#ifdef NAS_UE -/**************************************************************************** - ** ** - ** Name: emm_recv_attach_accept() ** - ** ** - ** Description: Processes Attach Accept message ** - ** ** - ** Inputs: msg: The received EMM message ** - ** Others: None ** - ** ** - ** Outputs: emm_cause: EMM cause code ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -int emm_recv_attach_accept(attach_accept_msg *msg, int *emm_cause) -{ - LOG_FUNC_IN; - - int rc; - int i; - - LOG_TRACE(INFO, "EMMAS-SAP - Received Attach Accept message"); - - /* - * Message checking - */ - if (msg->tailist.typeoflist != - TRACKING_AREA_IDENTITY_LIST_ONE_PLMN_CONSECUTIVE_TACS) { - /* Only list of TACs belonging to one PLMN with consecutive - * TAC values is supported */ - *emm_cause = EMM_CAUSE_IE_NOT_IMPLEMENTED; - } else if ( (msg->presencemask & ATTACH_ACCEPT_GUTI_PRESENT) && - (msg->guti.guti.typeofidentity != EPS_MOBILE_IDENTITY_GUTI) ) { - /* The only supported type of EPS mobile identity is GUTI */ - *emm_cause = EMM_CAUSE_IE_NOT_IMPLEMENTED; - } - - /* Handle message checking error */ - if (*emm_cause != EMM_CAUSE_SUCCESS) { - LOG_FUNC_RETURN (RETURNerror); - } - - /* - * Message processing - */ - /* Compute timers value */ - long T3412, T3402 = -1, T3423 = -1; - T3412 = gprs_timer_value(&msg->t3412value); - - if (msg->presencemask & ATTACH_ACCEPT_T3402_VALUE_PRESENT) { - T3402 = gprs_timer_value(&msg->t3402value); - } - - if (msg->presencemask & ATTACH_ACCEPT_T3423_VALUE_PRESENT) { - T3423 = gprs_timer_value(&msg->t3423value); - } - - /* Get the tracking area list the UE is registered to */ - - /* LW: number of elements is coded as N-1 (0 -> 1 element, 1 -> 2 elements...), - * see 3GPP TS 24.301, section 9.9.3.33.1 */ - int n_tais = msg->tailist.numberofelements + 1; - tai_t tai[n_tais]; - - for (i = 0; i < n_tais; i++) { - tai[i].plmn.MCCdigit1 = msg->tailist.mccdigit1; - tai[i].plmn.MCCdigit2 = msg->tailist.mccdigit2; - tai[i].plmn.MCCdigit3 = msg->tailist.mccdigit3; - tai[i].plmn.MNCdigit1 = msg->tailist.mncdigit1; - tai[i].plmn.MNCdigit2 = msg->tailist.mncdigit2; - tai[i].plmn.MNCdigit3 = msg->tailist.mncdigit3; - tai[i].tac = msg->tailist.tac + i; - } - - /* Get the GUTI */ - GUTI_t *pguti = NULL; - GUTI_t guti; - - if (msg->presencemask & ATTACH_ACCEPT_GUTI_PRESENT) { - pguti = &guti; - guti.gummei.plmn.MCCdigit1 = msg->guti.guti.mccdigit1; - guti.gummei.plmn.MCCdigit2 = msg->guti.guti.mccdigit2; - guti.gummei.plmn.MCCdigit3 = msg->guti.guti.mccdigit3; - guti.gummei.plmn.MNCdigit1 = msg->guti.guti.mncdigit1; - guti.gummei.plmn.MNCdigit2 = msg->guti.guti.mncdigit2; - guti.gummei.plmn.MNCdigit3 = msg->guti.guti.mncdigit3; - guti.gummei.MMEgid = msg->guti.guti.mmegroupid; - guti.gummei.MMEcode = msg->guti.guti.mmecode; - guti.m_tmsi = msg->guti.guti.mtmsi; - } - - /* Get the list of equivalent PLMNs */ - int n_eplmns = 0; - plmn_t eplmn; - - if (msg->presencemask & ATTACH_ACCEPT_EQUIVALENT_PLMNS_PRESENT) { - n_eplmns = 1; - eplmn.MCCdigit1 = msg->equivalentplmns.mccdigit1; - eplmn.MCCdigit2 = msg->equivalentplmns.mccdigit2; - eplmn.MCCdigit3 = msg->equivalentplmns.mccdigit3; - eplmn.MNCdigit1 = msg->equivalentplmns.mncdigit1; - eplmn.MNCdigit2 = msg->equivalentplmns.mncdigit2; - eplmn.MNCdigit3 = msg->equivalentplmns.mncdigit3; - } - - /* Execute attach procedure accepted by the network */ - rc = emm_proc_attach_accept(T3412, T3402, T3423, n_tais, tai, pguti, - n_eplmns, &eplmn, - &msg->esmmessagecontainer.esmmessagecontainercontents); - - LOG_FUNC_RETURN (rc); -} - -/**************************************************************************** - ** ** - ** Name: emm_recv_attach_reject() ** - ** ** - ** Description: Processes Attach Reject message ** - ** ** - ** Inputs: msg: The received EMM message ** - ** Others: None ** - ** ** - ** Outputs: emm_cause: EMM cause code ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -int emm_recv_attach_reject(attach_reject_msg *msg, int *emm_cause) -{ - LOG_FUNC_IN; - - int rc; - - LOG_TRACE(INFO, "EMMAS-SAP - Received Attach Reject message (cause=%d)", - msg->emmcause); - - /* - * Message checking - */ - if ( (msg->emmcause == EMM_CAUSE_ESM_FAILURE) && - !(msg->presencemask & ATTACH_REJECT_ESM_MESSAGE_CONTAINER_PRESENT) ) { - /* The ATTACH REJECT message shall be combined with a PDN - * CONNECTIVITY REJECT message contained in the ESM message - * container information element */ - *emm_cause = EMM_CAUSE_INVALID_MANDATORY_INFO; - } - - /* Handle message checking error */ - if (*emm_cause != EMM_CAUSE_SUCCESS) { - LOG_FUNC_RETURN (RETURNerror); - } - - /* - * Message processing - */ - if (msg->presencemask & ATTACH_REJECT_ESM_MESSAGE_CONTAINER_PRESENT) { - /* Execute attach procedure rejected by the network */ - rc = emm_proc_attach_reject(msg->emmcause, - &msg->esmmessagecontainer.esmmessagecontainercontents); - } else { - /* Execute attach procedure rejected by the network */ - rc = emm_proc_attach_reject(msg->emmcause, NULL); - } - - LOG_FUNC_RETURN (rc); -} - -/**************************************************************************** - ** ** - ** Name: emm_recv_detach_accept() ** - ** ** - ** Description: Processes Detach Accept message ** - ** ** - ** Inputs: msg: The received EMM message ** - ** Others: None ** - ** ** - ** Outputs: emm_cause: EMM cause code ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -int emm_recv_detach_accept(detach_accept_msg *msg, int *emm_cause) -{ - LOG_FUNC_IN; - - int rc; - - LOG_TRACE(INFO, "EMMAS-SAP - Received Detach Accept message"); - - /* - * Message processing - */ - /* Execute the UE initiated detach procedure completion by the UE */ - rc = emm_proc_detach_accept(); - - LOG_FUNC_RETURN (rc); -} - -/**************************************************************************** - ** ** - ** Name: emm_recv_identity_request() ** - ** ** - ** Description: Processes Identity Request message ** - ** ** - ** Inputs: msg: The received EMM message ** - ** Others: None ** - ** ** - ** Outputs: emm_cause: EMM cause code ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -int emm_recv_identity_request(identity_request_msg *msg, int *emm_cause) -{ - LOG_FUNC_IN; - - int rc; - - LOG_TRACE(INFO, "EMMAS-SAP - Received Identity Request message"); - - /* - * Message processing - */ - /* Get the requested identity type */ - emm_proc_identity_type_t type; - - if (msg->identitytype == IDENTITY_TYPE_2_IMSI) { - type = EMM_IDENT_TYPE_IMSI; - } else if (msg->identitytype == IDENTITY_TYPE_2_IMEI) { - type = EMM_IDENT_TYPE_IMEI; - } else if (msg->identitytype == IDENTITY_TYPE_2_IMEISV) { - type = EMM_IDENT_TYPE_IMEISV; - } else if (msg->identitytype == IDENTITY_TYPE_2_TMSI) { - type = EMM_IDENT_TYPE_TMSI; - } else { - /* All other values are interpreted as IMSI */ - type = EMM_IDENT_TYPE_IMSI; - } - - /* Execute the identification procedure initiated by the network */ - rc = emm_proc_identification_request(type); - - LOG_FUNC_RETURN (rc); -} - -/**************************************************************************** - ** ** - ** Name: emm_recv_authentication_request() ** - ** ** - ** Description: Processes Authentication Request message ** - ** ** - ** Inputs: msg: The received EMM message ** - ** Others: None ** - ** ** - ** Outputs: emm_cause: EMM cause code ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -int emm_recv_authentication_request(authentication_request_msg *msg, - int *emm_cause) -{ - LOG_FUNC_IN; - - int rc; - - LOG_TRACE(INFO, "EMMAS-SAP - Received Authentication Request message"); - - /* - * Message checking - */ - if ( (msg->authenticationparameterrand.rand.length == 0) || - (msg->authenticationparameterautn.autn.length == 0) ) { - /* RAND and AUTN parameters shall not be null */ - *emm_cause = EMM_CAUSE_INVALID_MANDATORY_INFO; - } - - /* Handle message checking error */ - if (*emm_cause != EMM_CAUSE_SUCCESS) { - LOG_FUNC_RETURN (RETURNerror); - } - - /* - * Message processing - */ - /* Execute the authentication procedure initiated by the network */ - rc = emm_proc_authentication_request( - msg->naskeysetidentifierasme.tsc != NAS_KEY_SET_IDENTIFIER_MAPPED, - msg->naskeysetidentifierasme.naskeysetidentifier, - &msg->authenticationparameterrand.rand, - &msg->authenticationparameterautn.autn); - - LOG_FUNC_RETURN (rc); -} - -/**************************************************************************** - ** ** - ** Name: emm_recv_authentication_reject() ** - ** ** - ** Description: Processes Authentication Reject message ** - ** ** - ** Inputs: msg: The received EMM message ** - ** Others: None ** - ** ** - ** Outputs: emm_cause: EMM cause code ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -int emm_recv_authentication_reject(authentication_reject_msg *msg, - int *emm_cause) -{ - LOG_FUNC_IN; - - int rc; - - LOG_TRACE(INFO, "EMMAS-SAP - Received Authentication Reject message"); - - /* - * Message processing - */ - /* Execute the authentication procedure not accepted by the network */ - rc = emm_proc_authentication_reject(); - - LOG_FUNC_RETURN (rc); -} - -/**************************************************************************** - ** ** - ** Name: emm_recv_security_mode_command() ** - ** ** - ** Description: Processes Security Mode Command message ** - ** ** - ** Inputs: msg: The received EMM message ** - ** Others: None ** - ** ** - ** Outputs: emm_cause: EMM cause code ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -int emm_recv_security_mode_command(security_mode_command_msg *msg, - int *emm_cause) -{ - LOG_FUNC_IN; - - int rc; - - LOG_TRACE(INFO, "EMMAS-SAP - Received Security Mode Command message"); - - /* - * Message processing - */ - /* Execute the security mode control procedure initiated by the network */ - rc = emm_proc_security_mode_command( - msg->naskeysetidentifier.tsc != NAS_KEY_SET_IDENTIFIER_MAPPED, - msg->naskeysetidentifier.naskeysetidentifier, - msg->selectednassecurityalgorithms.typeofcipheringalgorithm, - msg->selectednassecurityalgorithms.typeofintegrityalgorithm, - msg->replayeduesecuritycapabilities.eea, - msg->replayeduesecuritycapabilities.eia); - - LOG_FUNC_RETURN (rc); -} - -#endif // NAS_UE - /* * -------------------------------------------------------------------------- * Functions executed by the MME upon receiving EMM message from the UE * -------------------------------------------------------------------------- */ -#ifdef NAS_MME /**************************************************************************** ** ** ** Name: emm_recv_attach_request() ** @@ -936,7 +562,7 @@ int emm_recv_identity_response(unsigned int ueid, identity_response_msg *msg, /* Execute the identification completion procedure */ rc = emm_proc_identification_complete(ueid, p_imsi, p_imei, - (UInt32_t *)(p_tmsi)); + (uint32_t *)(p_tmsi)); LOG_FUNC_RETURN (rc); } @@ -1120,4 +746,3 @@ int emm_recv_security_mode_reject(unsigned int ueid, LOG_FUNC_RETURN (rc); } -#endif // NAS_MME diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/sap/emm_recv.h b/openair-cn/NAS/MME/EMM/SAP/emm_recv.h similarity index 82% rename from openair-cn/NAS/EURECOM-NAS/src/emm/sap/emm_recv.h rename to openair-cn/NAS/MME/EMM/SAP/emm_recv.h index 2141396207..6b59722c54 100644 --- a/openair-cn/NAS/EURECOM-NAS/src/emm/sap/emm_recv.h +++ b/openair-cn/NAS/MME/EMM/SAP/emm_recv.h @@ -53,23 +53,7 @@ Description Defines functions executed at the EMMAS Service Access #include "DetachRequest.h" #include "DetachAccept.h" -#ifdef NAS_UE -#include "AttachAccept.h" -#include "AttachReject.h" -#include "TrackingAreaUpdateAccept.h" -#include "TrackingAreaUpdateReject.h" -#include "ServiceReject.h" -#include "GutiReallocationCommand.h" -#include "AuthenticationRequest.h" -#include "AuthenticationReject.h" -#include "IdentityRequest.h" -#include "NASSecurityModeCommand.h" -#include "EmmInformation.h" -#include "DownlinkNasTransport.h" -#include "CsServiceNotification.h" -#endif -#ifdef NAS_MME #include "AttachRequest.h" #include "AttachComplete.h" #include "TrackingAreaUpdateRequest.h" @@ -83,7 +67,6 @@ Description Defines functions executed at the EMMAS Service Access #include "NASSecurityModeComplete.h" #include "SecurityModeReject.h" #include "UplinkNasTransport.h" -#endif /****************************************************************************/ /********************* G L O B A L C O N S T A N T S *******************/ @@ -113,27 +96,13 @@ int emm_recv_status(unsigned int ueid, emm_status_msg *msg, int *emm_cause); * Functions executed by the UE upon receiving EMM message from the network * -------------------------------------------------------------------------- */ -#ifdef NAS_UE -int emm_recv_attach_accept(attach_accept_msg *msg, int *emm_cause); -int emm_recv_attach_reject(attach_reject_msg *msg, int *emm_cause); -int emm_recv_detach_accept(detach_accept_msg *msg, int *emm_cause); - -int emm_recv_identity_request(identity_request_msg *msg, int *emm_cause); -int emm_recv_authentication_request(authentication_request_msg *msg, - int *emm_cause); -int emm_recv_authentication_reject(authentication_reject_msg *msg, - int *emm_cause); -int emm_recv_security_mode_command(security_mode_command_msg *msg, - int *emm_cause); -#endif /* * -------------------------------------------------------------------------- * Functions executed by the MME upon receiving EMM message from the UE * -------------------------------------------------------------------------- */ -#ifdef NAS_MME int emm_recv_attach_request(unsigned int ueid, const attach_request_msg *msg, int *emm_cause); int emm_recv_attach_complete(unsigned int ueid, const attach_complete_msg *msg, @@ -156,6 +125,5 @@ int emm_recv_security_mode_complete(unsigned int ueid, security_mode_complete_msg *msg, int *emm_cause); int emm_recv_security_mode_reject(unsigned int ueid, security_mode_reject_msg *msg, int *emm_cause); -#endif #endif /* __EMM_RECV_H__*/ diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/sap/emm_reg.c b/openair-cn/NAS/MME/EMM/SAP/emm_reg.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/emm/sap/emm_reg.c rename to openair-cn/NAS/MME/EMM/SAP/emm_reg.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/sap/emm_reg.h b/openair-cn/NAS/MME/EMM/SAP/emm_reg.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/emm/sap/emm_reg.h rename to openair-cn/NAS/MME/EMM/SAP/emm_reg.h diff --git a/openair-cn/NAS/MME/EMM/SAP/emm_regDef.h b/openair-cn/NAS/MME/EMM/SAP/emm_regDef.h new file mode 100644 index 0000000000..801e107fe1 --- /dev/null +++ b/openair-cn/NAS/MME/EMM/SAP/emm_regDef.h @@ -0,0 +1,138 @@ +/******************************************************************************* + OpenAirInterface + Copyright(c) 1999 - 2014 Eurecom + + OpenAirInterface is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + + OpenAirInterface is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with OpenAirInterface.The full GNU General Public License is + included in this distribution in the file called "COPYING". If not, + see . + + Contact Information + OpenAirInterface Admin: openair_admin@eurecom.fr + OpenAirInterface Tech : openair_tech@eurecom.fr + OpenAirInterface Dev : openair4g-devel@eurecom.fr + + Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. + + *******************************************************************************/ +/***************************************************************************** + +Source emm_regDef.h + +Version 0.1 + +Date 2012/10/16 + +Product NAS stack + +Subsystem EPS Mobility Management + +Author Frederic Maurel + +Description Defines the EMMREG Service Access Point that provides + registration services for location updating and attach/detach + procedures. + +*****************************************************************************/ +#ifndef __EMM_REGDEF_H__ +#define __EMM_REGDEF_H__ + +#include "commonDef.h" + +/****************************************************************************/ +/********************* G L O B A L C O N S T A N T S *******************/ +/****************************************************************************/ + +/* + * EMMREG-SAP primitives + */ +typedef enum { + _EMMREG_START = 0, + _EMMREG_COMMON_PROC_REQ, /* EMM common procedure requested */ + _EMMREG_COMMON_PROC_CNF, /* EMM common procedure successful */ + _EMMREG_COMMON_PROC_REJ, /* EMM common procedure failed */ + _EMMREG_PROC_ABORT, /* EMM procedure aborted */ + _EMMREG_ATTACH_CNF, /* EPS network attach accepted */ + _EMMREG_ATTACH_REJ, /* EPS network attach rejected */ + _EMMREG_DETACH_INIT, /* Network detach initiated */ + _EMMREG_DETACH_REQ, /* Network detach requested */ + _EMMREG_DETACH_FAILED, /* Network detach attempt failed */ + _EMMREG_DETACH_CNF, /* Network detach accepted */ + _EMMREG_TAU_REQ, + _EMMREG_TAU_CNF, + _EMMREG_TAU_REJ, + _EMMREG_SERVICE_REQ, + _EMMREG_SERVICE_CNF, + _EMMREG_SERVICE_REJ, + _EMMREG_LOWERLAYER_SUCCESS, /* Data successfully delivered */ + _EMMREG_LOWERLAYER_FAILURE, /* Lower layer failure indication */ + _EMMREG_LOWERLAYER_RELEASE, /* NAS signalling connection released */ + _EMMREG_END +} emm_reg_primitive_t; + +/****************************************************************************/ +/************************ G L O B A L T Y P E S ************************/ +/****************************************************************************/ + + +/* + * EMMREG primitive for attach procedure + * ------------------------------------- + */ +typedef struct { + int is_emergency; /* TRUE if the UE was attempting to register to + * the network for emergency services only */ +} emm_reg_attach_t; + +/* + * EMMREG primitive for detach procedure + * ------------------------------------- + */ +typedef struct { + int switch_off; /* TRUE if the UE is switched off */ + int type; /* Network detach type */ +} emm_reg_detach_t; + +/* + * EMMREG primitive for EMM common procedures + * ------------------------------------------ + */ +typedef struct { + int is_attached; /* UE context attach indicator */ +} emm_reg_common_t; + +/* + * Structure of EMMREG-SAP primitive + */ +typedef struct { + emm_reg_primitive_t primitive; + unsigned int ueid; + void *ctx; + + union { + emm_reg_attach_t attach; + emm_reg_detach_t detach; + emm_reg_common_t common; + } u; +} emm_reg_t; + +/****************************************************************************/ +/******************** G L O B A L V A R I A B L E S ********************/ +/****************************************************************************/ + +/****************************************************************************/ +/****************** E X P O R T E D F U N C T I O N S ******************/ +/****************************************************************************/ + +#endif /* __EMM_REGDEF_H__*/ diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/sap/emm_sap.c b/openair-cn/NAS/MME/EMM/SAP/emm_sap.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/emm/sap/emm_sap.c rename to openair-cn/NAS/MME/EMM/SAP/emm_sap.c diff --git a/openair-cn/NAS/MME/EMM/SAP/emm_sap.h b/openair-cn/NAS/MME/EMM/SAP/emm_sap.h new file mode 100644 index 0000000000..7cee702e60 --- /dev/null +++ b/openair-cn/NAS/MME/EMM/SAP/emm_sap.h @@ -0,0 +1,171 @@ +/******************************************************************************* + OpenAirInterface + Copyright(c) 1999 - 2014 Eurecom + + OpenAirInterface is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + + OpenAirInterface is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with OpenAirInterface.The full GNU General Public License is + included in this distribution in the file called "COPYING". If not, + see . + + Contact Information + OpenAirInterface Admin: openair_admin@eurecom.fr + OpenAirInterface Tech : openair_tech@eurecom.fr + OpenAirInterface Dev : openair4g-devel@eurecom.fr + + Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. + + *******************************************************************************/ +/***************************************************************************** + +Source emm_sap.h + +Version 0.1 + +Date 2012/10/01 + +Product NAS stack + +Subsystem EPS Mobility Management + +Author Frederic Maurel + +Description Defines the EMM Service Access Points at which the EPS + Mobility Management sublayer provides procedures for the + control of security and mobility when the User Equipment + is using the Evolved UTRA Network. + +*****************************************************************************/ +#ifndef __EMM_SAP_H__ +#define __EMM_SAP_H__ + +#include "emmData.h" +#include "emm_regDef.h" +#include "emm_esmDef.h" +#include "emm_asDef.h" +#include "emm_cnDef.h" + +/****************************************************************************/ +/********************* G L O B A L C O N S T A N T S *******************/ +/****************************************************************************/ + +/* + * EPS Mobility Management primitives + * ---------------------------------- + * EMMREG-SAP provides registration services for location updating and + * attach/detach procedures; + * EMMESM-SAP provides interlayer services to the EPS Session Management + * sublayer for service registration and activate/deactivate PDP context; + * EMMAS-SAP provides services to the Access Stratum sublayer for NAS message + * transfer; + */ +typedef enum { + /* EMMREG-SAP */ + EMMREG_COMMON_PROC_REQ = _EMMREG_COMMON_PROC_REQ, + EMMREG_COMMON_PROC_CNF = _EMMREG_COMMON_PROC_CNF, + EMMREG_COMMON_PROC_REJ = _EMMREG_COMMON_PROC_REJ, + EMMREG_PROC_ABORT = _EMMREG_PROC_ABORT, + EMMREG_ATTACH_CNF = _EMMREG_ATTACH_CNF, + EMMREG_ATTACH_REJ = _EMMREG_ATTACH_REJ, + EMMREG_DETACH_INIT = _EMMREG_DETACH_INIT, + EMMREG_DETACH_REQ = _EMMREG_DETACH_REQ, + EMMREG_DETACH_FAILED = _EMMREG_DETACH_FAILED, + EMMREG_DETACH_CNF = _EMMREG_DETACH_CNF, + EMMREG_TAU_REQ = _EMMREG_TAU_REQ, + EMMREG_TAU_CNF = _EMMREG_TAU_CNF, + EMMREG_TAU_REJ = _EMMREG_TAU_REJ, + EMMREG_SERVICE_REQ = _EMMREG_SERVICE_REQ, + EMMREG_SERVICE_CNF = _EMMREG_SERVICE_CNF, + EMMREG_SERVICE_REJ = _EMMREG_SERVICE_REJ, + EMMREG_LOWERLAYER_SUCCESS = _EMMREG_LOWERLAYER_SUCCESS, + EMMREG_LOWERLAYER_FAILURE = _EMMREG_LOWERLAYER_FAILURE, + EMMREG_LOWERLAYER_RELEASE = _EMMREG_LOWERLAYER_RELEASE, + /* EMMESM-SAP */ + EMMESM_RELEASE_IND = _EMMESM_RELEASE_IND, + EMMESM_UNITDATA_REQ = _EMMESM_UNITDATA_REQ, + EMMESM_UNITDATA_IND = _EMMESM_UNITDATA_IND, + /* EMMAS-SAP */ + EMMAS_SECURITY_REQ = _EMMAS_SECURITY_REQ, + EMMAS_SECURITY_IND = _EMMAS_SECURITY_IND, + EMMAS_SECURITY_RES = _EMMAS_SECURITY_RES, + EMMAS_SECURITY_REJ = _EMMAS_SECURITY_REJ, + EMMAS_ESTABLISH_REQ = _EMMAS_ESTABLISH_REQ, + EMMAS_ESTABLISH_CNF = _EMMAS_ESTABLISH_CNF, + EMMAS_ESTABLISH_REJ = _EMMAS_ESTABLISH_REJ, + EMMAS_RELEASE_REQ = _EMMAS_RELEASE_REQ, + EMMAS_RELEASE_IND = _EMMAS_RELEASE_IND, + EMMAS_DATA_REQ = _EMMAS_DATA_REQ, + EMMAS_DATA_IND = _EMMAS_DATA_IND, + EMMAS_PAGE_IND = _EMMAS_PAGE_IND, + EMMAS_STATUS_IND = _EMMAS_STATUS_IND, + EMMAS_CELL_INFO_REQ = _EMMAS_CELL_INFO_REQ, + EMMAS_CELL_INFO_RES = _EMMAS_CELL_INFO_RES, + EMMAS_CELL_INFO_IND = _EMMAS_CELL_INFO_IND, + +#ifdef NAS_BUILT_IN_EPC + EMMCN_AUTHENTICATION_PARAM_RES = _EMMCN_AUTHENTICATION_PARAM_RES, + EMMCN_AUTHENTICATION_PARAM_FAIL = _EMMCN_AUTHENTICATION_PARAM_FAIL, + EMMCN_DEREGISTER_UE = _EMMCN_DEREGISTER_UE, + EMMCN_PDN_CONNECTIVITY_RES = _EMMCN_PDN_CONNECTIVITY_RES, + EMMCN_PDN_CONNECTIVITY_FAIL = _EMMCN_PDN_CONNECTIVITY_FAIL +#endif +} emm_primitive_t; + +/* + * Minimal identifier for EMM-SAP primitives + */ +#define EMMREG_PRIMITIVE_MIN _EMMREG_START +#define EMMESM_PRIMITIVE_MIN _EMMESM_START +#define EMMAS_PRIMITIVE_MIN _EMMAS_START +#define EMMCN_PRIMITIVE_MIN _EMMCN_START + +/* + * Maximal identifier for EMM-SAP primitives + */ +#define EMMREG_PRIMITIVE_MAX _EMMREG_END +#define EMMESM_PRIMITIVE_MAX _EMMESM_END +#define EMMAS_PRIMITIVE_MAX _EMMAS_END +#define EMMCN_PRIMITIVE_MAX _EMMCN_END + +/****************************************************************************/ +/************************ G L O B A L T Y P E S ************************/ +/****************************************************************************/ + +/* + * Structure of EPS Mobility Management primitive + */ +typedef struct emm_sap_s { + emm_primitive_t primitive; + union { + emm_reg_t emm_reg; /* EMMREG-SAP primitives */ + emm_esm_t emm_esm; /* EMMESM-SAP primitives */ + emm_as_t emm_as; /* EMMAS-SAP primitives */ +#if defined(NAS_BUILT_IN_EPC) + emm_cn_t emm_cn; /* EMMCN-SAP primitives */ +#endif + } u; +} emm_sap_t; + +/****************************************************************************/ +/******************** G L O B A L V A R I A B L E S ********************/ +/****************************************************************************/ + +/****************************************************************************/ +/****************** E X P O R T E D F U N C T I O N S ******************/ +/****************************************************************************/ + +void emm_sap_initialize(void); + +int emm_sap_send(emm_sap_t *msg); + +#endif /* __EMM_SAP_H__*/ diff --git a/openair-cn/NAS/MME/EMM/SAP/emm_send.c b/openair-cn/NAS/MME/EMM/SAP/emm_send.c new file mode 100644 index 0000000000..3dac6eb7e0 --- /dev/null +++ b/openair-cn/NAS/MME/EMM/SAP/emm_send.c @@ -0,0 +1,509 @@ +/******************************************************************************* + OpenAirInterface + Copyright(c) 1999 - 2014 Eurecom + + OpenAirInterface is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + + OpenAirInterface is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with OpenAirInterface.The full GNU General Public License is + included in this distribution in the file called "COPYING". If not, + see . + + Contact Information + OpenAirInterface Admin: openair_admin@eurecom.fr + OpenAirInterface Tech : openair_tech@eurecom.fr + OpenAirInterface Dev : openair4g-devel@eurecom.fr + + Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. + + *******************************************************************************/ +/***************************************************************************** + +Source emm_send.c + +Version 0.1 + +Date 2013/01/30 + +Product NAS stack + +Subsystem EPS Mobility Management + +Author Frederic Maurel + +Description Defines functions executed at the EMMAS Service Access + Point to send EPS Mobility Management messages to the + Access Stratum sublayer. + +*****************************************************************************/ + +#include "emm_send.h" +#include "commonDef.h" +#include "nas_log.h" + +#include "emm_msgDef.h" +#include "emm_proc.h" + +#include // strlen + +/****************************************************************************/ +/**************** E X T E R N A L D E F I N I T I O N S ****************/ +/****************************************************************************/ + +/****************************************************************************/ +/******************* L O C A L D E F I N I T I O N S *******************/ +/****************************************************************************/ + +/****************************************************************************/ +/****************** E X P O R T E D F U N C T I O N S ******************/ +/****************************************************************************/ + +/* + * -------------------------------------------------------------------------- + * Functions executed by both the UE and the MME to send EMM messages + * -------------------------------------------------------------------------- + */ +/**************************************************************************** + ** ** + ** Name: emm_send_status() ** + ** ** + ** Description: Builds EMM status message ** + ** ** + ** The EMM status message is sent by the UE or the network ** + ** at any time to report certain error conditions. ** + ** ** + ** Inputs: emm_cause: EMM cause code ** + ** Others: None ** + ** ** + ** Outputs: emm_msg: The EMM message to be sent ** + ** Return: The size of the EMM message ** + ** Others: None ** + ** ** + ***************************************************************************/ +int emm_send_status(const emm_as_status_t *msg, emm_status_msg *emm_msg) +{ + LOG_FUNC_IN; + + int size = EMM_HEADER_MAXIMUM_LENGTH; + + LOG_TRACE(WARNING, "EMMAS-SAP - Send EMM Status message (cause=%d)", + msg->emm_cause); + + /* Mandatory - Message type */ + emm_msg->messagetype = EMM_STATUS; + + /* Mandatory - EMM cause */ + size += EMM_CAUSE_MAXIMUM_LENGTH; + emm_msg->emmcause = msg->emm_cause; + + LOG_FUNC_RETURN (size); +} + +/**************************************************************************** + ** ** + ** Name: emm_send_detach_accept() ** + ** ** + ** Description: Builds Detach Accept message ** + ** ** + ** The Detach Accept message is sent by the UE or the net- ** + ** work to indicate that the detach procedure has been com- ** + ** pleted. ** + ** ** + ** Inputs: msg: The EMMAS-SAP primitive to process ** + ** Others: None ** + ** ** + ** Outputs: emm_msg: The EMM message to be sent ** + ** Return: The size of the EMM message ** + ** Others: None ** + ** ** + ***************************************************************************/ +int emm_send_detach_accept(const emm_as_data_t *msg, + detach_accept_msg *emm_msg) +{ + LOG_FUNC_IN; + + int size = EMM_HEADER_MAXIMUM_LENGTH; + + LOG_TRACE(INFO, "EMMAS-SAP - Send Detach Accept message"); + + /* Mandatory - Message type */ + emm_msg->messagetype = DETACH_ACCEPT; + + LOG_FUNC_RETURN (size); +} + + +/* + * -------------------------------------------------------------------------- + * Functions executed by the MME to send EMM messages to the UE + * -------------------------------------------------------------------------- + */ +/**************************************************************************** + ** ** + ** Name: emm_send_attach_accept() ** + ** ** + ** Description: Builds Attach Accept message ** + ** ** + ** The Attach Accept message is sent by the network to the ** + ** UE to indicate that the corresponding attach request has ** + ** been accepted. ** + ** ** + ** Inputs: msg: The EMMAS-SAP primitive to process ** + ** Others: None ** + ** ** + ** Outputs: emm_msg: The EMM message to be sent ** + ** Return: The size of the EMM message ** + ** Others: None ** + ** ** + ***************************************************************************/ +int emm_send_attach_accept(const emm_as_establish_t *msg, + attach_accept_msg *emm_msg) +{ + LOG_FUNC_IN; + + int size = EMM_HEADER_MAXIMUM_LENGTH; + + LOG_TRACE(INFO, "EMMAS-SAP - Send Attach Accept message"); + LOG_TRACE(INFO, "EMMAS-SAP - size = EMM_HEADER_MAXIMUM_LENGTH(%d)", + size); + + /* Mandatory - Message type */ + emm_msg->messagetype = ATTACH_ACCEPT; + + /* Mandatory - EPS attach result */ + size += EPS_ATTACH_RESULT_MAXIMUM_LENGTH; + emm_msg->epsattachresult = EPS_ATTACH_RESULT_EPS; + + /* Mandatory - T3412 value */ + size += GPRS_TIMER_MAXIMUM_LENGTH; + emm_msg->t3412value.unit = GPRS_TIMER_UNIT_0S; + LOG_TRACE(INFO, "EMMAS-SAP - size += GPRS_TIMER_MAXIMUM_LENGTH(%d) (%d)", + GPRS_TIMER_MAXIMUM_LENGTH, size); + + /* Mandatory - Tracking area identity list */ + size += TRACKING_AREA_IDENTITY_LIST_MINIMUM_LENGTH; + emm_msg->tailist.typeoflist = + TRACKING_AREA_IDENTITY_LIST_ONE_PLMN_CONSECUTIVE_TACS; + emm_msg->tailist.numberofelements = msg->n_tacs; + emm_msg->tailist.mccdigit1 = msg->UEid.guti->gummei.plmn.MCCdigit1; + emm_msg->tailist.mccdigit2 = msg->UEid.guti->gummei.plmn.MCCdigit2; + emm_msg->tailist.mccdigit3 = msg->UEid.guti->gummei.plmn.MCCdigit3; + emm_msg->tailist.mncdigit1 = msg->UEid.guti->gummei.plmn.MNCdigit1; + emm_msg->tailist.mncdigit2 = msg->UEid.guti->gummei.plmn.MNCdigit2; + emm_msg->tailist.mncdigit3 = msg->UEid.guti->gummei.plmn.MNCdigit3; + emm_msg->tailist.tac = msg->tac; + LOG_TRACE(INFO, + "EMMAS-SAP - size += "\ + "TRACKING_AREA_IDENTITY_LIST_MINIMUM_LENGTH(%d) (%d)", + TRACKING_AREA_IDENTITY_LIST_MINIMUM_LENGTH, + size); + + /* Mandatory - ESM message container */ + size += ESM_MESSAGE_CONTAINER_MINIMUM_LENGTH + msg->NASmsg.length; + emm_msg->esmmessagecontainer.esmmessagecontainercontents = msg->NASmsg; + LOG_TRACE(INFO, + "EMMAS-SAP - size += "\ + "ESM_MESSAGE_CONTAINER_MINIMUM_LENGTH(%d) (%d)", + ESM_MESSAGE_CONTAINER_MINIMUM_LENGTH, + size); + + /* Optional - GUTI */ + if (msg->new_guti) { + size += EPS_MOBILE_IDENTITY_MAXIMUM_LENGTH; + emm_msg->presencemask |= ATTACH_ACCEPT_GUTI_PRESENT; + emm_msg->guti.guti.typeofidentity = EPS_MOBILE_IDENTITY_GUTI; + emm_msg->guti.guti.oddeven = EPS_MOBILE_IDENTITY_EVEN; + emm_msg->guti.guti.mmegroupid = msg->new_guti->gummei.MMEgid; + emm_msg->guti.guti.mmecode = msg->new_guti->gummei.MMEcode; + emm_msg->guti.guti.mtmsi = msg->new_guti->m_tmsi; + emm_msg->guti.guti.mccdigit1 = msg->new_guti->gummei.plmn.MCCdigit1; + emm_msg->guti.guti.mccdigit2 = msg->new_guti->gummei.plmn.MCCdigit2; + emm_msg->guti.guti.mccdigit3 = msg->new_guti->gummei.plmn.MCCdigit3; + emm_msg->guti.guti.mncdigit1 = msg->new_guti->gummei.plmn.MNCdigit1; + emm_msg->guti.guti.mncdigit2 = msg->new_guti->gummei.plmn.MNCdigit2; + emm_msg->guti.guti.mncdigit3 = msg->new_guti->gummei.plmn.MNCdigit3; + LOG_TRACE(INFO, + "EMMAS-SAP - size += "\ + "EPS_MOBILE_IDENTITY_MAXIMUM_LENGTH(%d) (%d)", + EPS_MOBILE_IDENTITY_MAXIMUM_LENGTH, + size); + } + + LOG_FUNC_RETURN (size); +} + +/**************************************************************************** + ** ** + ** Name: emm_send_attach_reject() ** + ** ** + ** Description: Builds Attach Reject message ** + ** ** + ** The Attach Reject message is sent by the network to the ** + ** UE to indicate that the corresponding attach request has ** + ** been rejected. ** + ** ** + ** Inputs: msg: The EMMAS-SAP primitive to process ** + ** Others: None ** + ** ** + ** Outputs: emm_msg: The EMM message to be sent ** + ** Return: The size of the EMM message ** + ** Others: None ** + ** ** + ***************************************************************************/ +int emm_send_attach_reject(const emm_as_establish_t *msg, + attach_reject_msg *emm_msg) +{ + LOG_FUNC_IN; + + int size = EMM_HEADER_MAXIMUM_LENGTH; + + LOG_TRACE(INFO, "EMMAS-SAP - Send Attach Reject message (cause=%d)", + msg->emm_cause); + + /* Mandatory - Message type */ + emm_msg->messagetype = ATTACH_REJECT; + + /* Mandatory - EMM cause */ + size += EMM_CAUSE_MAXIMUM_LENGTH; + emm_msg->emmcause = msg->emm_cause; + + /* Optional - ESM message container */ + if (msg->NASmsg.length > 0) { + size += ESM_MESSAGE_CONTAINER_MINIMUM_LENGTH + msg->NASmsg.length; + emm_msg->presencemask |= ATTACH_REJECT_ESM_MESSAGE_CONTAINER_PRESENT; + emm_msg->esmmessagecontainer.esmmessagecontainercontents = msg->NASmsg; + } + + LOG_FUNC_RETURN (size); +} + +/**************************************************************************** + ** ** + ** Name: emm_send_tracking_area_update_reject() ** + ** ** + ** Description: Builds Tracking Area Update Reject message ** + ** ** + ** The Tracking Area Update Reject message is sent by the ** + ** network to the UE to indicate that the corresponding ** + ** tracking area update has been rejected. ** + ** ** + ** Inputs: msg: The EMMAS-SAP primitive to process ** + ** Others: None ** + ** ** + ** Outputs: emm_msg: The EMM message to be sent ** + ** Return: The size of the EMM message ** + ** Others: None ** + ** ** + ***************************************************************************/ +int emm_send_tracking_area_update_reject(const emm_as_establish_t *msg, + tracking_area_update_reject_msg *emm_msg) +{ + LOG_FUNC_IN; + + int size = EMM_HEADER_MAXIMUM_LENGTH; + + LOG_TRACE(INFO, "EMMAS-SAP - Send Tracking Area Update Reject message (cause=%d)", + msg->emm_cause); + + /* Mandatory - Message type */ + emm_msg->messagetype = TRACKING_AREA_UPDATE_REJECT; + + /* Mandatory - EMM cause */ + size += EMM_CAUSE_MAXIMUM_LENGTH; + emm_msg->emmcause = msg->emm_cause; + + LOG_FUNC_RETURN (size); +} + +/**************************************************************************** + ** ** + ** Name: emm_send_identity_request() ** + ** ** + ** Description: Builds Identity Request message ** + ** ** + ** The Identity Request message is sent by the network to ** + ** the UE to request the UE to provide the specified identi- ** + ** ty. ** + ** ** + ** Inputs: msg: The EMMAS-SAP primitive to process ** + ** Others: None ** + ** ** + ** Outputs: emm_msg: The EMM message to be sent ** + ** Return: The size of the EMM message ** + ** Others: None ** + ** ** + ***************************************************************************/ +int emm_send_identity_request(const emm_as_security_t *msg, + identity_request_msg *emm_msg) +{ + LOG_FUNC_IN; + + int size = EMM_HEADER_MAXIMUM_LENGTH; + + LOG_TRACE(INFO, "EMMAS-SAP - Send Identity Request message"); + + /* Mandatory - Message type */ + emm_msg->messagetype = IDENTITY_REQUEST; + + /* Mandatory - Identity type 2 */ + size += IDENTITY_TYPE_2_MAXIMUM_LENGTH; + + if (msg->identType == EMM_IDENT_TYPE_IMSI) { + emm_msg->identitytype = IDENTITY_TYPE_2_IMSI; + } else if (msg->identType == EMM_IDENT_TYPE_TMSI) { + emm_msg->identitytype = IDENTITY_TYPE_2_TMSI; + } else if (msg->identType == EMM_IDENT_TYPE_IMEI) { + emm_msg->identitytype = IDENTITY_TYPE_2_IMEI; + } else { + /* All other values are interpreted as "IMSI" */ + emm_msg->identitytype = IDENTITY_TYPE_2_IMSI; + } + + LOG_FUNC_RETURN (size); +} + +/**************************************************************************** + ** ** + ** Name: emm_send_authentication_request() ** + ** ** + ** Description: Builds Authentication Request message ** + ** ** + ** The Authentication Request message is sent by the network ** + ** to the UE to initiate authentication of the UE identity. ** + ** ** + ** Inputs: msg: The EMMAS-SAP primitive to process ** + ** Others: None ** + ** ** + ** Outputs: emm_msg: The EMM message to be sent ** + ** Return: The size of the EMM message ** + ** Others: None ** + ** ** + ***************************************************************************/ +int emm_send_authentication_request(const emm_as_security_t *msg, + authentication_request_msg *emm_msg) +{ + LOG_FUNC_IN; + + int size = EMM_HEADER_MAXIMUM_LENGTH; + + LOG_TRACE(INFO, "EMMAS-SAP - Send Authentication Request message"); + + /* Mandatory - Message type */ + emm_msg->messagetype = AUTHENTICATION_REQUEST; + + /* Mandatory - NAS key set identifier */ + size += NAS_KEY_SET_IDENTIFIER_MAXIMUM_LENGTH; + emm_msg->naskeysetidentifierasme.tsc = NAS_KEY_SET_IDENTIFIER_NATIVE; + emm_msg->naskeysetidentifierasme.naskeysetidentifier = msg->ksi; + + /* Mandatory - Authentication parameter RAND */ + size += AUTHENTICATION_PARAMETER_RAND_MAXIMUM_LENGTH; + emm_msg->authenticationparameterrand.rand = *msg->rand; + + /* Mandatory - Authentication parameter AUTN */ + size += AUTHENTICATION_PARAMETER_AUTN_MAXIMUM_LENGTH; + emm_msg->authenticationparameterautn.autn = *msg->autn; + + LOG_FUNC_RETURN (size); +} + +/**************************************************************************** + ** ** + ** Name: emm_send_authentication_reject() ** + ** ** + ** Description: Builds Authentication Reject message ** + ** ** + ** The Authentication Reject message is sent by the network ** + ** to the UE to indicate that the authentication procedure ** + ** has failed and that the UE shall abort all activities. ** + ** ** + ** Inputs: None ** + ** Others: None ** + ** ** + ** Outputs: emm_msg: The EMM message to be sent ** + ** Return: The size of the EMM message ** + ** Others: None ** + ** ** + ***************************************************************************/ +int emm_send_authentication_reject(authentication_reject_msg *emm_msg) +{ + LOG_FUNC_IN; + + int size = EMM_HEADER_MAXIMUM_LENGTH; + + LOG_TRACE(INFO, "EMMAS-SAP - Send Authentication Reject message"); + + /* Mandatory - Message type */ + emm_msg->messagetype = AUTHENTICATION_REJECT; + + LOG_FUNC_RETURN (size); +} + +/**************************************************************************** + ** ** + ** Name: emm_send_security_mode_command() ** + ** ** + ** Description: Builds Security Mode Command message ** + ** ** + ** The Security Mode Command message is sent by the network ** + ** to the UE to establish NAS signalling security. ** + ** ** + ** Inputs: msg: The EMMAS-SAP primitive to process ** + ** Others: None ** + ** ** + ** Outputs: emm_msg: The EMM message to be sent ** + ** Return: The size of the EMM message ** + ** Others: None ** + ** ** + ***************************************************************************/ +int emm_send_security_mode_command(const emm_as_security_t *msg, + security_mode_command_msg *emm_msg) +{ + LOG_FUNC_IN; + + int size = EMM_HEADER_MAXIMUM_LENGTH; + + LOG_TRACE(INFO, "EMMAS-SAP - Send Security Mode Command message"); + + /* Mandatory - Message type */ + emm_msg->messagetype = SECURITY_MODE_COMMAND; + + /* Selected NAS security algorithms */ + size += NAS_SECURITY_ALGORITHMS_MAXIMUM_LENGTH; + emm_msg->selectednassecurityalgorithms.typeofcipheringalgorithm = + msg->selected_eea; + emm_msg->selectednassecurityalgorithms.typeofintegrityalgorithm = + msg->selected_eia; + + /* NAS key set identifier */ + size += NAS_KEY_SET_IDENTIFIER_MAXIMUM_LENGTH; + emm_msg->naskeysetidentifier.tsc = NAS_KEY_SET_IDENTIFIER_NATIVE; + emm_msg->naskeysetidentifier.naskeysetidentifier = msg->ksi; + + /* Replayed UE security capabilities */ + size += UE_SECURITY_CAPABILITY_MAXIMUM_LENGTH; + emm_msg->replayeduesecuritycapabilities.eea = msg->eea; + emm_msg->replayeduesecuritycapabilities.eia = msg->eia; + emm_msg->replayeduesecuritycapabilities.umts_present = msg->umts_present; + emm_msg->replayeduesecuritycapabilities.gprs_present = msg->gprs_present; + + emm_msg->replayeduesecuritycapabilities.uea = msg->uea; + emm_msg->replayeduesecuritycapabilities.uia = msg->uia; + emm_msg->replayeduesecuritycapabilities.gea = msg->gea; + + LOG_FUNC_RETURN (size); +} + + +/****************************************************************************/ +/********************* L O C A L F U N C T I O N S *********************/ +/****************************************************************************/ diff --git a/openair-cn/NAS/MME/EMM/SAP/emm_send.h b/openair-cn/NAS/MME/EMM/SAP/emm_send.h new file mode 100644 index 0000000000..16c9c5f9d5 --- /dev/null +++ b/openair-cn/NAS/MME/EMM/SAP/emm_send.h @@ -0,0 +1,122 @@ +/******************************************************************************* + OpenAirInterface + Copyright(c) 1999 - 2014 Eurecom + + OpenAirInterface is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + + OpenAirInterface is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with OpenAirInterface.The full GNU General Public License is + included in this distribution in the file called "COPYING". If not, + see . + + Contact Information + OpenAirInterface Admin: openair_admin@eurecom.fr + OpenAirInterface Tech : openair_tech@eurecom.fr + OpenAirInterface Dev : openair4g-devel@eurecom.fr + + Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. + + *******************************************************************************/ +/***************************************************************************** + +Source emm_send.h + +Version 0.1 + +Date 2013/01/30 + +Product NAS stack + +Subsystem EPS Mobility Management + +Author Frederic Maurel + +Description Defines functions executed at the EMMAS Service Access + Point to send EPS Mobility Management messages to the + Access Stratum sublayer. + +*****************************************************************************/ +#ifndef __EMM_SEND_H__ +#define __EMM_SEND_H__ + +#include "EmmStatus.h" + +#include "DetachRequest.h" +#include "DetachAccept.h" + +#include "AttachAccept.h" +#include "AttachReject.h" +#include "TrackingAreaUpdateAccept.h" +#include "TrackingAreaUpdateReject.h" +#include "ServiceReject.h" +#include "GutiReallocationCommand.h" +#include "AuthenticationRequest.h" +#include "AuthenticationReject.h" +#include "IdentityRequest.h" +#include "NASSecurityModeCommand.h" +#include "EmmInformation.h" +#include "DownlinkNasTransport.h" +#include "CsServiceNotification.h" + +#include "emm_asDef.h" + +/****************************************************************************/ +/********************* G L O B A L C O N S T A N T S *******************/ +/****************************************************************************/ + +/****************************************************************************/ +/************************ G L O B A L T Y P E S ************************/ +/****************************************************************************/ + +/****************************************************************************/ +/******************** G L O B A L V A R I A B L E S ********************/ +/****************************************************************************/ + +/****************************************************************************/ +/****************** E X P O R T E D F U N C T I O N S ******************/ +/****************************************************************************/ + +/* + * -------------------------------------------------------------------------- + * Functions executed by both the UE and the MME to send EMM messages + * -------------------------------------------------------------------------- + */ +int emm_send_status(const emm_as_status_t *, emm_status_msg *); + +int emm_send_detach_accept(const emm_as_data_t *, detach_accept_msg *); + +/* + * -------------------------------------------------------------------------- + * Functions executed by the UE to send EMM messages to the network + * -------------------------------------------------------------------------- + */ + + +/* + * -------------------------------------------------------------------------- + * Functions executed by the MME to send EMM messages to the UE + * -------------------------------------------------------------------------- + */ +int emm_send_attach_accept(const emm_as_establish_t *, attach_accept_msg *); +int emm_send_attach_reject(const emm_as_establish_t *, attach_reject_msg *); + +int emm_send_tracking_area_update_reject(const emm_as_establish_t *msg, + tracking_area_update_reject_msg *emm_msg); + +int emm_send_identity_request(const emm_as_security_t *, identity_request_msg *); +int emm_send_authentication_request(const emm_as_security_t *, + authentication_request_msg *); +int emm_send_authentication_reject(authentication_reject_msg *); +int emm_send_security_mode_command(const emm_as_security_t *, + security_mode_command_msg *); + +#endif /* __EMM_SEND_H__*/ diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/SecurityModeControl.c b/openair-cn/NAS/MME/EMM/SecurityModeControl.c similarity index 58% rename from openair-cn/NAS/EURECOM-NAS/src/emm/SecurityModeControl.c rename to openair-cn/NAS/MME/EMM/SecurityModeControl.c index eaceb2fd17..bd04316ee2 100644 --- a/openair-cn/NAS/EURECOM-NAS/src/emm/SecurityModeControl.c +++ b/openair-cn/NAS/MME/EMM/SecurityModeControl.c @@ -87,33 +87,12 @@ Description Defines the security mode control EMM procedure executed by the * Internal data handled by the security mode control procedure in the UE * -------------------------------------------------------------------------- */ -#ifdef NAS_UE -static int _security_kdf(const OctetString *kasme, OctetString *key, - UInt8_t algo_dist, UInt8_t algo_id); - -static int _security_knas_enc(const OctetString *kasme, OctetString *knas_enc, - UInt8_t eia); -static int _security_knas_int(const OctetString *kasme, OctetString *knas_int, - UInt8_t eea); -static int _security_kenb(const OctetString *kasme, OctetString *kenb, - UInt32_t count); - -/* - * Internal data used for security mode control procedure - */ -static struct { - OctetString kenb; /* eNodeB security key */ -} _security_data; - -static void _security_release(emm_security_context_t *ctx); -#endif // NAS_UE /* * -------------------------------------------------------------------------- * Internal data handled by the security mode control procedure in the MME * -------------------------------------------------------------------------- */ -#ifdef NAS_MME /* * Timer handlers */ @@ -154,245 +133,17 @@ typedef struct { } security_data_t; static int _security_request(security_data_t *data, int is_new); -#endif // NAS_MME /****************************************************************************/ /****************** E X P O R T E D F U N C T I O N S ******************/ /****************************************************************************/ -/* - * -------------------------------------------------------------------------- - * Security mode control procedure executed by the UE - * -------------------------------------------------------------------------- - */ -#ifdef NAS_UE -/**************************************************************************** - ** ** - ** Name: emm_proc_security_mode_command() ** - ** ** - ** Description: Performs the MME requested security mode control proce- ** - ** dure. ** - ** ** - ** 3GPP TS 24.301, section 5.4.3.3 ** - ** Upon receiving the SECURITY MODE COMMAND message, the UE ** - ** shall check whether the message can be accepted or not. ** - ** If accepted the UE shall send a SECURITY MODE COMPLETE ** - ** message integrity protected with the selected NAS inte- ** - ** grity algorithm and ciphered with the selected NAS ciphe- ** - ** ring algorithm. ** - ** ** - ** Inputs: native_ksi: TRUE if the security context is of type ** - ** native (for KSIASME) ** - ** ksi: The NAS ket sey identifier ** - ** seea: Selected EPS cyphering algorithm ** - ** seia: Selected EPS integrity algorithm ** - ** reea: Replayed EPS cyphering algorithm ** - ** reia: Replayed EPS integrity algorithm ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -int emm_proc_security_mode_command(int native_ksi, int ksi, - int seea, int seia, int reea, int reia) -{ - LOG_FUNC_IN; - - int rc = RETURNerror; - int emm_cause = EMM_CAUSE_SUCCESS; - int security_context_is_new = FALSE; - - LOG_TRACE(INFO, "EMM-PROC - Security mode control requested (ksi=%d)", - ksi); - - /* Delete any previously stored RAND and RES and stop timer T3416 */ - (void) emm_proc_authentication_delete(); - - /* - * Check the replayed UE security capabilities - */ - UInt8_t eea = (0x80 >> _emm_data.security->capability.eps_encryption); - UInt8_t eia = (0x80 >> _emm_data.security->capability.eps_integrity); - - if ( (reea != eea) || (reia != eia) ) { - LOG_TRACE(WARNING, "EMM-PROC - Replayed UE security capabilities " - "rejected"); - emm_cause = EMM_CAUSE_UE_SECURITY_MISMATCH; - - /* XXX - For testing purpose UE always accepts EIA0 - * The UE shall accept "null integrity protection algorithm" EIA0 only - * if a PDN connection for emergency bearer services is established or - * the UE is establishing a PDN connection for emergency bearer services - */ - } - /* - * Check the non-current EPS security context - */ - else if (_emm_data.non_current == NULL) { - LOG_TRACE(WARNING, "EMM-PROC - Non-current EPS security context " - "is not valid"); - emm_cause = EMM_CAUSE_SECURITY_MODE_REJECTED; - } - /* - * Update the non-current EPS security context - */ - else { - LOG_TRACE(INFO, "EMM-PROC - Update the non-current EPS security context seea=%u seia=%u", seea, seia); - /* Update selected cyphering and integrity algorithms */ - //LG COMENTED _emm_data.non_current->capability.encryption = seea; - //LG COMENTED _emm_data.non_current->capability.integrity = seia; - - _emm_data.non_current->selected_algorithms.encryption = seea; - _emm_data.non_current->selected_algorithms.integrity = seia; - - /* Derive the NAS cyphering key */ - if (_emm_data.non_current->knas_enc.value == NULL) { - _emm_data.non_current->knas_enc.value = - (uint8_t *)calloc(1,AUTH_KNAS_ENC_SIZE); - _emm_data.non_current->knas_enc.length = AUTH_KNAS_ENC_SIZE; - } - - if (_emm_data.non_current->knas_enc.value != NULL) { - LOG_TRACE(INFO, "EMM-PROC - Update the non-current EPS security context knas_enc"); - rc = _security_knas_enc(&_emm_data.non_current->kasme, - &_emm_data.non_current->knas_enc, seea); - } - - /* Derive the NAS integrity key */ - if (_emm_data.non_current->knas_int.value == NULL) { - _emm_data.non_current->knas_int.value = - (uint8_t *)calloc(1,AUTH_KNAS_INT_SIZE); - _emm_data.non_current->knas_int.length = AUTH_KNAS_INT_SIZE; - } - - if (_emm_data.non_current->knas_int.value != NULL) { - if (rc != RETURNerror) { - LOG_TRACE(INFO, "EMM-PROC - Update the non-current EPS security context knas_int"); - rc = _security_knas_int(&_emm_data.non_current->kasme, - &_emm_data.non_current->knas_int, seia); - } - } - - /* Derive the eNodeB key */ - if (_security_data.kenb.value == NULL) { - _security_data.kenb.value = (uint8_t *)calloc(1,AUTH_KENB_SIZE); - _security_data.kenb.length = AUTH_KENB_SIZE; - } - - if (_security_data.kenb.value != NULL) { - if (rc != RETURNerror) { - LOG_TRACE(INFO, "EMM-PROC - Update the non-current EPS security context kenb"); - // LG COMMENT rc = _security_kenb(&_emm_data.security->kasme, - rc = _security_kenb(&_emm_data.non_current->kasme, - &_security_data.kenb, - *(UInt32_t *)(&_emm_data.non_current->ul_count)); - } - } - - /* - * NAS security mode command accepted by the UE - */ - if (rc != RETURNerror) { - LOG_TRACE(INFO, "EMM-PROC - NAS security mode command accepted by the UE"); - - /* Update the current EPS security context */ - if ( native_ksi && (_emm_data.security->type != EMM_KSI_NATIVE) ) { - /* The type of security context flag included in the SECURITY - * MODE COMMAND message is set to "native security context" and - * the UE has a mapped EPS security context as the current EPS - * security context */ - if ( (_emm_data.non_current->type == EMM_KSI_NATIVE) && - (_emm_data.non_current->eksi == ksi) ) { - /* The KSI matches the non-current native EPS security - * context; the UE shall take the non-current native EPS - * security context into use which then becomes the - * current native EPS security context and delete the - * mapped EPS security context */ - LOG_TRACE(INFO, - "EMM-PROC - Update Current security context"); - /* Release non-current security context */ - _security_release(_emm_data.security); - _emm_data.security = _emm_data.non_current; - /* Reset the uplink NAS COUNT counter */ - _emm_data.security->ul_count.overflow = 0; - _emm_data.security->ul_count.seq_num = 0; - /* Set new security context indicator */ - security_context_is_new = TRUE; - } - } - - if ( !native_ksi && (_emm_data.security->type != EMM_KSI_NATIVE) ) { - /* The type of security context flag included in the SECURITY - * MODE COMMAND message is set to "mapped security context" and - * the UE has a mapped EPS security context as the current EPS - * security context */ - if (ksi != _emm_data.security->eksi) { - /* The KSI does not match the current EPS security context; - * the UE shall reset the uplink NAS COUNT counter */ - LOG_TRACE(INFO, - "EMM-PROC - Reset uplink NAS COUNT counter"); - _emm_data.security->ul_count.overflow = 0; - _emm_data.security->ul_count.seq_num = 0; - } - } - - _emm_data.security->selected_algorithms.encryption = seea; - _emm_data.security->selected_algorithms.integrity = seia; - - } - /* - * NAS security mode command not accepted by the UE - */ - else { - /* Setup EMM cause code */ - emm_cause = EMM_CAUSE_SECURITY_MODE_REJECTED; - - /* Release security mode control internal data */ - if (_security_data.kenb.value) { - free(_security_data.kenb.value); - _security_data.kenb.value = NULL; - _security_data.kenb.length = 0; - } - } - } - - /* Setup EMM procedure handler to be executed upon receiving - * lower layer notification */ - rc = emm_proc_lowerlayer_initialize(NULL, NULL, NULL, NULL); - - if (rc != RETURNok) { - LOG_TRACE(WARNING, - "EMM-PROC - Failed to initialize EMM procedure handler"); - LOG_FUNC_RETURN (RETURNerror); - } - - /* - * Notify EMM-AS SAP that Security Mode response message has to be sent - * to the network - */ - emm_sap_t emm_sap; - emm_sap.primitive = EMMAS_SECURITY_RES; - emm_sap.u.emm_as.u.security.guti = _emm_data.guti; - emm_sap.u.emm_as.u.security.ueid = 0; - emm_sap.u.emm_as.u.security.msgType = EMM_AS_MSG_TYPE_SMC; - emm_sap.u.emm_as.u.security.emm_cause = emm_cause; - /* Setup EPS NAS security data */ - emm_as_set_security_data(&emm_sap.u.emm_as.u.security.sctx, - _emm_data.security, security_context_is_new, TRUE); - rc = emm_sap_send(&emm_sap); - - LOG_FUNC_RETURN (rc); -} -#endif // NAS_UE /* * -------------------------------------------------------------------------- * Security mode control procedure executed by the MME * -------------------------------------------------------------------------- */ -#ifdef NAS_MME /**************************************************************************** @@ -587,7 +338,7 @@ int emm_proc_security_mode_control(unsigned int ueid, int ksi, MSC_NAS_EMM_MME, MSC_NAS_EMM_MME, NULL,0, - "0 EMMREG_COMMON_PROC_REQ ue id %06x (security mode control)", ueid); + "0 EMMREG_COMMON_PROC_REQ ue id "NAS_UE_ID_FMT" (security mode control)", ueid); emm_sap_t emm_sap; emm_sap.primitive = EMMREG_COMMON_PROC_REQ; emm_sap.u.emm_reg.ueid = ueid; @@ -630,12 +381,26 @@ int emm_proc_security_mode_complete(unsigned int ueid) LOG_FUNC_IN; - LOG_TRACE(INFO, "EMM-PROC - Security mode complete (ueid=%u)", ueid); + LOG_TRACE(INFO, "EMM-PROC - Security mode complete (ueid="NAS_UE_ID_FMT")", ueid); - /* Stop timer T3460 */ - LOG_TRACE(INFO, "EMM-PROC - Stop timer T3460 (%d)", T3460.id); - T3460.id = nas_timer_stop(T3460.id); + /* Get the UE context */ +#if defined(NAS_BUILT_IN_EPC) + if (ueid > 0) { + emm_ctx = emm_data_context_get(&_emm_data, ueid); + } +#else + if (ueid < EMM_DATA_NB_UE_MAX) { + emm_ctx = _emm_data.ctx[ueid]; + } +#endif + + if (emm_ctx) { + /* Stop timer T3460 */ + LOG_TRACE(INFO, "EMM-PROC - Stop timer T3460 (%d)", emm_ctx->T3460.id); + emm_ctx->T3460.id = nas_timer_stop(emm_ctx->T3460.id); + MSC_LOG_EVENT(MSC_NAS_EMM_MME, "0 T3460 stopped UE "NAS_UE_ID_FMT" ", ueid); + } /* Release retransmission timer paramaters */ security_data_t *data = (security_data_t *)(emm_proc_common_get_args(ueid)); @@ -643,21 +408,6 @@ int emm_proc_security_mode_complete(unsigned int ueid) free(data); } - /* Get the UE context */ -#if defined(NAS_BUILT_IN_EPC) - - if (ueid > 0) { - emm_ctx = emm_data_context_get(&_emm_data, ueid); - } - -#else - - if (ueid < EMM_DATA_NB_UE_MAX) { - emm_ctx = _emm_data.ctx[ueid]; - } - -#endif - if (emm_ctx && emm_ctx->security) { /* * Notify EMM that the authentication procedure successfully completed @@ -666,7 +416,7 @@ int emm_proc_security_mode_complete(unsigned int ueid) MSC_NAS_EMM_MME, MSC_NAS_EMM_MME, NULL,0, - "0 EMMREG_COMMON_PROC_CNF ue id %06x (security mode complete)", ueid); + "0 EMMREG_COMMON_PROC_CNF ue id "NAS_UE_ID_FMT" (security mode complete)", ueid); emm_sap.primitive = EMMREG_COMMON_PROC_CNF; emm_sap.u.emm_reg.ueid = ueid; emm_sap.u.emm_reg.ctx = emm_ctx; @@ -680,7 +430,7 @@ int emm_proc_security_mode_complete(unsigned int ueid) MSC_NAS_EMM_MME, MSC_NAS_EMM_MME, NULL,0, - "0 EMMREG_COMMON_PROC_REJ ue id %06x (security mode complete)", ueid); + "0 EMMREG_COMMON_PROC_REJ ue id "NAS_UE_ID_FMT" (security mode complete)", ueid); emm_sap.primitive = EMMREG_COMMON_PROC_REJ; emm_sap.u.emm_reg.ueid = ueid; emm_sap.u.emm_reg.ctx = emm_ctx; @@ -723,34 +473,32 @@ int emm_proc_security_mode_reject(unsigned int ueid) LOG_FUNC_IN; LOG_TRACE(WARNING, "EMM-PROC - Security mode command not accepted by the UE" - "(ueid=0x%08x)", ueid); + "(ueid="NAS_UE_ID_FMT")", ueid); - /* Stop timer T3460 */ - LOG_TRACE(INFO, "EMM-PROC - Stop timer T3460 (%d)", T3460.id); - T3460.id = nas_timer_stop(T3460.id); - /* Release retransmission timer paramaters */ - security_data_t *data = (security_data_t *)(emm_proc_common_get_args(ueid)); - - if (data) { - free(data); - } /* Get the UE context */ #if defined(NAS_BUILT_IN_EPC) - if (ueid > 0) { emm_ctx = emm_data_context_get(&_emm_data, ueid); DevAssert(emm_ctx != NULL); } - #else - if (ueid < EMM_DATA_NB_UE_MAX) { emm_ctx = _emm_data.ctx[ueid]; } - #endif + if (emm_ctx) { + /* Stop timer T3460 */ + LOG_TRACE(INFO, "EMM-PROC - Stop timer T3460 (%d)", emm_ctx->T3460.id); + emm_ctx->T3460.id = nas_timer_stop(emm_ctx->T3460.id); + MSC_LOG_EVENT(MSC_NAS_EMM_MME, "0 T3460 stopped UE "NAS_UE_ID_FMT" ", ueid); + } + /* Release retransmission timer paramaters */ + security_data_t *data = (security_data_t *)(emm_proc_common_get_args(ueid)); + if (data) { + free(data); + } /* Set the key set identifier to its previous value */ if (emm_ctx && emm_ctx->security) { @@ -770,7 +518,7 @@ int emm_proc_security_mode_reject(unsigned int ueid) MSC_NAS_EMM_MME, MSC_NAS_EMM_MME, NULL,0, - "0 EMMREG_COMMON_PROC_REJ ue id %06x (security mode reject)", ueid); + "0 EMMREG_COMMON_PROC_REJ ue id "NAS_UE_ID_FMT" (security mode reject)", ueid); emm_sap_t emm_sap; emm_sap.primitive = EMMREG_COMMON_PROC_REJ; emm_sap.u.emm_reg.ueid = ueid; @@ -779,218 +527,13 @@ int emm_proc_security_mode_reject(unsigned int ueid) LOG_FUNC_RETURN (rc); } -#endif // NAS_MME /****************************************************************************/ /********************* L O C A L F U N C T I O N S *********************/ /****************************************************************************/ -#ifdef NAS_UE -/* - * -------------------------------------------------------------------------- - * UE specific local functions - * -------------------------------------------------------------------------- - */ -/**************************************************************************** - ** ** - ** Name: _security_release() ** - ** ** - ** Description: Releases the given EPS NAS security context ** - ** ** - ** Inputs: ctx: The EPS NAS security context to release ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: None ** - ** Others: None ** - ** ** - ***************************************************************************/ -static void _security_release(emm_security_context_t *ctx) -{ - LOG_FUNC_IN; - if (ctx) { - /* Release Kasme security key */ - if (ctx->kasme.value) { - free(ctx->kasme.value); - ctx->kasme.value = NULL; - ctx->kasme.length = 0; - } - - /* Release NAS cyphering key */ - if (ctx->knas_enc.value) { - free(ctx->knas_enc.value); - ctx->knas_enc.value = NULL; - ctx->knas_enc.length = 0; - } - - /* Release NAS integrity key */ - if (ctx->knas_int.value) { - free(ctx->knas_int.value); - ctx->knas_int.value = NULL; - ctx->knas_int.length = 0; - } - - /* Release the NAS security context */ - free(ctx); - } - - LOG_FUNC_OUT; -} - -/**************************************************************************** - ** ** - ** Name: _security_knas_enc() ** - ** ** - ** Description: Algorithm Key generation function used for the derivation ** - ** of NAS encryption key Knas-enc from the Kasme. ** - ** ** - ** 3GPP TS 33.401, Annex A.7 ** - ** ** - ** Inputs: kasme: Key Access Security Management Entity ** - ** eea: Cyphering algorithm identity ** - ** Others: None ** - ** ** - ** Outputs: knas_enc: Derived key for NAS cyphering algorithm ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -static int _security_knas_enc(const OctetString *kasme, OctetString *knas_enc, - UInt8_t eea) -{ - LOG_FUNC_IN; - LOG_TRACE(INFO, "%s with algo dist %d algo id %d", __FUNCTION__,0x01, eea); - LOG_FUNC_RETURN (_security_kdf(kasme, knas_enc, 0x01, eea)); -} - -/**************************************************************************** - ** ** - ** Name: _security_knas_int() ** - ** ** - ** Description: Algorithm Key generation function used for the derivation ** - ** of NAS integrity key Knas-int from the Kasme. ** - ** ** - ** 3GPP TS 33.401, Annex A.7 ** - ** ** - ** Inputs: kasme: Key Access Security Management Entity ** - ** eia: Integrity algorithm identity ** - ** Others: None ** - ** ** - ** Outputs: knas_int: Derived key for NAS integrity algorithm ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -static int _security_knas_int(const OctetString *kasme, OctetString *knas_int, - UInt8_t eia) -{ - LOG_FUNC_IN; - LOG_TRACE(INFO, "%s with algo dist %d algo id %d", __FUNCTION__,0x02, eia); - LOG_FUNC_RETURN (_security_kdf(kasme, knas_int, 0x02, eia)); -} - -/**************************************************************************** - ** ** - ** Name: _security_kenb() ** - ** ** - ** Description: Computes the eNodeB key from Kasme and the given value of ** - ** uplink NAS counter. ** - ** ** - ** 3GPP TS 33.401, Annex A.3 ** - ** ** - ** Inputs: kasme: Key Access Security Management Entity ** - ** count: Uplink NAS counter value ** - ** Others: None ** - ** ** - ** Outputs: kenb: eNodeB security key ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -static int _security_kenb(const OctetString *kasme, OctetString *kenb, - UInt32_t count) -{ - /* Compute the KDF input parameter - * S = FC(0x11) || UL NAS Count || 0x00 0x04 - */ - UInt8_t input[32]; - // UInt16_t length = 4; - // int offset = 0; - - LOG_TRACE(INFO, "%s with count= %d", __FUNCTION__, count); - memset(input, 0, 32); - input[0] = 0x11; - // P0 - input[1] = count >> 24; - input[2] = (UInt8_t)(count >> 16); - input[3] = (UInt8_t)(count >> 8); - input[4] = (UInt8_t)count; - // L0 - input[5] = 0; - input[6] = 4; - - kdf(kasme->value, 32, input, 7, kenb->value, 32); - kenb->length = 32; - return (RETURNok); -} - -/**************************************************************************** - ** ** - ** Name: _security_kdf() ** - ** ** - ** Description: Algorithm Key generation function used for the derivation ** - ** of keys for NAS integrity and NAS encryption algorithms ** - ** from Kasme, algorithm types and algorithm identities. ** - ** ** - ** 3GPP TS 33.401, Annex A.7 ** - ** ** - ** Inputs: kasme: Key Access Security Management Entity ** - ** algo_dist: Algorithm type distinguisher ** - ** algo_id: Algorithm identity ** - ** Others: None ** - ** ** - ** Outputs: key: Derived key for NAS security protection ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -static int _security_kdf(const OctetString *kasme, OctetString *key, - UInt8_t algo_dist, UInt8_t algo_id) -{ - /* Compute the KDF input parameter - * S = FC(0x15) || Algorithm distinguisher || 0x00 0x01 - || Algorithm identity || 0x00 0x01 - */ - UInt8_t input[32]; - UInt8_t output[32]; - LOG_TRACE(DEBUG, "%s:%u output key mem %p lenth %u", - __FUNCTION__, __LINE__, - key->value, - key->length); - memset(input, 0, 32); - // FC - input[0] = 0x15; - // P0 = Algorithm distinguisher - input[1] = algo_dist; - // L0 = 0x00 01 - input[2] = 0x00; - input[3] = 0x01; - // P1 = Algorithm identity - input[4] = algo_id; - // L1 = length of Algorithm identity 0x00 0x01 - input[5] = 0x00; - input[6] = 0x01; - - /* Compute the derived key */ - kdf(kasme->value, kasme->length, input, 7, output, 32); - memcpy(key->value, &output[31 - key->length + 1], key->length); - return (RETURNok); -} -#endif // NAS_UE - -#ifdef NAS_MME /* * -------------------------------------------------------------------------- * Timer handlers @@ -1096,17 +639,13 @@ int _security_request(security_data_t *data, int is_new) emm_sap.u.emm_as.u.security.selected_eia = data->selected_eia; #if defined(NAS_BUILT_IN_EPC) - if (data->ueid > 0) { emm_ctx = emm_data_context_get(&_emm_data, data->ueid); } - #else - if (data->ueid < EMM_DATA_NB_UE_MAX) { emm_ctx = _emm_data.ctx[data->ueid]; } - #endif /* Setup EPS NAS security data */ @@ -1116,22 +655,22 @@ int _security_request(security_data_t *data, int is_new) MSC_NAS_EMM_MME, MSC_NAS_EMM_MME, NULL,0, - "0 EMMAS_SECURITY_REQ ue id %06x", data->ueid); + "0 EMMAS_SECURITY_REQ ue id "NAS_UE_ID_FMT" ", data->ueid); rc = emm_sap_send(&emm_sap); if (rc != RETURNerror) { - if (T3460.id != NAS_TIMER_INACTIVE_ID) { + if (emm_ctx->T3460.id != NAS_TIMER_INACTIVE_ID) { /* Re-start T3460 timer */ - T3460.id = nas_timer_restart(T3460.id); + emm_ctx->T3460.id = nas_timer_restart(emm_ctx->T3460.id); + MSC_LOG_EVENT(MSC_NAS_EMM_MME, "0 T3460 restarted UE "NAS_UE_ID_FMT" ", data->ueid); } else { /* Start T3460 timer */ - T3460.id = nas_timer_start(T3460.sec, _security_t3460_handler, data); + emm_ctx->T3460.id = nas_timer_start(emm_ctx->T3460.sec, _security_t3460_handler, data); + MSC_LOG_EVENT(MSC_NAS_EMM_MME, "0 T3460 started UE "NAS_UE_ID_FMT" ", data->ueid); } - LOG_TRACE(INFO,"EMM-PROC - Timer T3460 (%d) expires in %ld seconds", - T3460.id, T3460.sec); + emm_ctx->T3460.id, emm_ctx->T3460.sec); } - LOG_FUNC_RETURN (rc); } @@ -1154,6 +693,7 @@ static int _security_abort(void *args) { LOG_FUNC_IN; + struct emm_data_context_s *emm_ctx = NULL; int rc = RETURNerror; security_data_t *data = (security_data_t *)(args); @@ -1163,12 +703,21 @@ static int _security_abort(void *args) int notify_failure = data->notify_failure; LOG_TRACE(WARNING, "EMM-PROC - Abort security mode control procedure " - "(ueid=%u)", ueid); - + "(ueid="NAS_UE_ID_FMT")", ueid); +#if defined(NAS_BUILT_IN_EPC) + if (data->ueid > 0) { + emm_ctx = emm_data_context_get(&_emm_data, data->ueid); + } +#else + if (data->ueid < EMM_DATA_NB_UE_MAX) { + emm_ctx = _emm_data.ctx[data->ueid]; + } +#endif /* Stop timer T3460 */ - if (T3460.id != NAS_TIMER_INACTIVE_ID) { - LOG_TRACE(INFO, "EMM-PROC - Stop timer T3460 (%d)", T3460.id); - T3460.id = nas_timer_stop(T3460.id); + if (emm_ctx->T3460.id != NAS_TIMER_INACTIVE_ID) { + LOG_TRACE(INFO, "EMM-PROC - Stop timer T3460 (%d)", emm_ctx->T3460.id); + emm_ctx->T3460.id = nas_timer_stop(emm_ctx->T3460.id); + MSC_LOG_EVENT(MSC_NAS_EMM_MME, "0 T3460 stopped UE "NAS_UE_ID_FMT" ", ueid); } /* Release retransmission timer paramaters */ @@ -1182,7 +731,7 @@ static int _security_abort(void *args) MSC_NAS_EMM_MME, MSC_NAS_EMM_MME, NULL,0, - "0 EMMREG_COMMON_PROC_REJ ue id %06x (security abort)", data->ueid); + "0 EMMREG_COMMON_PROC_REJ ue id "NAS_UE_ID_FMT" (security abort)", data->ueid); emm_sap_t emm_sap; emm_sap.primitive = EMMREG_COMMON_PROC_REJ; emm_sap.u.emm_reg.ueid = ueid; @@ -1252,5 +801,4 @@ static int _security_select_algorithms( LOG_FUNC_RETURN (RETURNok); } -#endif // NAS_MME diff --git a/openair-cn/NAS/MME/EMM/ServiceRequestHdl.c b/openair-cn/NAS/MME/EMM/ServiceRequestHdl.c new file mode 100644 index 0000000000..1655b22d71 --- /dev/null +++ b/openair-cn/NAS/MME/EMM/ServiceRequestHdl.c @@ -0,0 +1,93 @@ +/******************************************************************************* + OpenAirInterface + Copyright(c) 1999 - 2014 Eurecom + + OpenAirInterface is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + + OpenAirInterface is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with OpenAirInterface.The full GNU General Public License is + included in this distribution in the file called "COPYING". If not, + see . + + Contact Information + OpenAirInterface Admin: openair_admin@eurecom.fr + OpenAirInterface Tech : openair_tech@eurecom.fr + OpenAirInterface Dev : openair4g-devel@eurecom.fr + + Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. + + *******************************************************************************/ +/***************************************************************************** +Source ServiceRequest.c + +Version 0.1 + +Date 2013/05/07 + +Product NAS stack + +Subsystem EPS Mobility Management + +Author Frederic Maurel + +Description Defines the service request EMM procedure executed by the + Non-Access Stratum. + + The purpose of the service request procedure is to transfer + the EMM mode from EMM-IDLE to EMM-CONNECTED mode and establish + the radio and S1 bearers when uplink user data or signalling + is to be sent. + + This procedure is used when the network has downlink signalling + pending, the UE has uplink signalling pending, the UE or the + network has user data pending and the UE is in EMM-IDLE mode. + +*****************************************************************************/ + +#include "emm_proc.h" +#include "nas_log.h" +#include "nas_timer.h" + +#include "emmData.h" + +#include "emm_sap.h" + +/****************************************************************************/ +/**************** E X T E R N A L D E F I N I T I O N S ****************/ +/****************************************************************************/ + +/****************************************************************************/ +/******************* L O C A L D E F I N I T I O N S *******************/ +/****************************************************************************/ + +/* + * -------------------------------------------------------------------------- + * Internal data handled by the service request procedure in the UE + * -------------------------------------------------------------------------- + */ + +/* + * -------------------------------------------------------------------------- + * Internal data handled by the service request procedure in the MME + * -------------------------------------------------------------------------- + */ + + +/****************************************************************************/ +/****************** E X P O R T E D F U N C T I O N S ******************/ +/****************************************************************************/ + +/****************************************************************************/ +/********************* L O C A L F U N C T I O N S *********************/ +/****************************************************************************/ + + diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/TrackingAreaUpdate.c b/openair-cn/NAS/MME/EMM/TrackingAreaUpdate.c similarity index 77% rename from openair-cn/NAS/EURECOM-NAS/src/emm/TrackingAreaUpdate.c rename to openair-cn/NAS/MME/EMM/TrackingAreaUpdate.c index 2e95dd303c..09ae70da85 100644 --- a/openair-cn/NAS/EURECOM-NAS/src/emm/TrackingAreaUpdate.c +++ b/openair-cn/NAS/MME/EMM/TrackingAreaUpdate.c @@ -69,32 +69,17 @@ Description Defines the tracking area update EMM procedure executed by the /******************* L O C A L D E F I N I T I O N S *******************/ /****************************************************************************/ -/* - * -------------------------------------------------------------------------- - * Internal data handled by the tracking area update procedure in the UE - * -------------------------------------------------------------------------- - */ -#ifdef NAS_UE -/* - * Timer handlers - */ -void *_emm_tau_t3430_handler(void *); -#endif // NAS_UE - /* * -------------------------------------------------------------------------- * Internal data handled by the tracking area update procedure in the MME * -------------------------------------------------------------------------- */ -#ifdef NAS_MME static int _emm_tracking_area_update_reject(void *args); -#endif // NAS_MME /****************************************************************************/ /****************** E X P O R T E D F U N C T I O N S ******************/ /****************************************************************************/ -#ifdef NAS_MME /**************************************************************************** ** ** ** Name: emm_proc_tracking_area_update_reject() ** @@ -140,50 +125,13 @@ int emm_proc_tracking_area_update_reject(unsigned int ueid, int emm_cause) LOG_FUNC_RETURN(rc); } -#endif // NAS_MME /****************************************************************************/ /********************* L O C A L F U N C T I O N S *********************/ /****************************************************************************/ -#ifdef NAS_UE -/* - * -------------------------------------------------------------------------- - * Timer handlers - * -------------------------------------------------------------------------- - */ -/**************************************************************************** - ** ** - ** Name: _emm_tau_t3430_handler() ** - ** ** - ** Description: T3430 timeout handler ** - ** ** - ** 3GPP TS 24.301, section 5.5.3.2.6 case c ** - ** ** - ** Inputs: args: handler parameters ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: None ** - ** Others: None ** - ** ** - ***************************************************************************/ -void *_emm_tau_t3430_handler(void *args) -{ - LOG_FUNC_IN; - LOG_TRACE(WARNING, "EMM-PROC - T3430 timer expired"); - - /* Stop timer T3430 */ - T3430.id = nas_timer_stop(T3430.id); - - LOG_FUNC_RETURN(NULL); -} - -#endif // NAS_UE - -#ifdef NAS_MME /**************************************************************************** ** ** ** Name: _emm_tracking_area_update_reject() ** @@ -210,7 +158,7 @@ static int _emm_tracking_area_update_reject(void *args) if (emm_ctx) { emm_sap_t emm_sap; LOG_TRACE(WARNING, "EMM-PROC - EMM tracking area update procedure not accepted " - "by the network (ueid=%08x, cause=%d)", + "by the network (ueid="NAS_UE_ID_FMT", cause=%d)", emm_ctx->ueid, emm_ctx->emm_cause); /* * Notify EMM-AS SAP that Tracking Area Update Reject message has to be sent @@ -238,4 +186,3 @@ static int _emm_tracking_area_update_reject(void *args) LOG_FUNC_RETURN(rc); } -#endif // NAS_MME diff --git a/openair-cn/NAS/MME/EMM/emmData.h b/openair-cn/NAS/MME/EMM/emmData.h new file mode 100644 index 0000000000..e17214badb --- /dev/null +++ b/openair-cn/NAS/MME/EMM/emmData.h @@ -0,0 +1,285 @@ +/******************************************************************************* + OpenAirInterface + Copyright(c) 1999 - 2014 Eurecom + + OpenAirInterface is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + + OpenAirInterface is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with OpenAirInterface.The full GNU General Public License is + included in this distribution in the file called "COPYING". If not, + see . + + Contact Information + OpenAirInterface Admin: openair_admin@eurecom.fr + OpenAirInterface Tech : openair_tech@eurecom.fr + OpenAirInterface Dev : openair4g-devel@eurecom.fr + + Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. + + *******************************************************************************/ +/***************************************************************************** +Source emmData.h + +Version 0.1 + +Date 2012/10/18 + +Product NAS stack + +Subsystem EPS Mobility Management + +Author Frederic Maurel + +Description Defines internal private data handled by EPS Mobility + Management sublayer. + +*****************************************************************************/ +#ifndef __EMMDATA_H__ +#define __EMMDATA_H__ + +#include "commonDef.h" +#include "networkDef.h" +#include "securityDef.h" + +#include "OctetString.h" +#include "nas_timer.h" + +#include "esmData.h" + +#include "emm_fsm.h" +#include "mme_api.h" +# if defined(NAS_BUILT_IN_EPC) +# include "tree.h" +# endif + +/****************************************************************************/ +/********************* G L O B A L C O N S T A N T S *******************/ +/****************************************************************************/ + + +/* Checks Mobile Country Code equality */ +#define MCCS_ARE_EQUAL(n1, n2) (((n1).MCCdigit1 == (n2).MCCdigit1) && \ + ((n1).MCCdigit2 == (n2).MCCdigit2) && \ + ((n1).MCCdigit3 == (n2).MCCdigit3)) + +/* Checks Mobile Network Code equality */ +#define MNCS_ARE_EQUAL(n1, n2) (((n1).MNCdigit1 == (n2).MNCdigit1) && \ + ((n1).MNCdigit2 == (n2).MNCdigit2) && \ + ((n1).MNCdigit3 == (n2).MNCdigit3)) + +/* Checks PLMNs equality */ +#define PLMNS_ARE_EQUAL(p1, p2) ((MCCS_ARE_EQUAL((p1),(p2))) && \ + (MNCS_ARE_EQUAL((p1),(p2)))) + +/* Checks TAIs equality */ +#define TAIS_ARE_EQUAL(t1, t2) ((PLMNS_ARE_EQUAL((t1).plmn,(t2).plmn)) && \ + ((t1).tac == (t2).tac)) + +/****************************************************************************/ +/************************ G L O B A L T Y P E S ************************/ +/****************************************************************************/ + +/* + * -------------------------------------------------------------------------- + * EPS NAS security context handled by EPS Mobility Management sublayer in + * the UE and in the MME + * -------------------------------------------------------------------------- + */ +/* Type of security context */ +typedef enum { + EMM_KSI_NOT_AVAILABLE = 0, + EMM_KSI_NATIVE, + EMM_KSI_MAPPED +} emm_ksi_t; + +/* EPS NAS security context structure */ +typedef struct emm_security_context_s { + emm_ksi_t type; /* Type of security context */ + int eksi; /* NAS key set identifier for E-UTRAN */ + OctetString kasme; /* ASME security key (native context) */ + //OctetString ksgsn; /* SGSN security key (mapped context) */ + OctetString knas_enc; /* NAS cyphering key */ + OctetString knas_int; /* NAS integrity key */ + struct count_s{ + uint32_t spare:8; + uint32_t overflow:16; + uint32_t seq_num:8; + } dl_count, ul_count; /* Downlink and uplink count parameters */ + struct { + uint8_t eps_encryption; /* algorithm used for ciphering */ + uint8_t eps_integrity; /* algorithm used for integrity protection */ + uint8_t umts_encryption; /* algorithm used for ciphering */ + uint8_t umts_integrity; /* algorithm used for integrity protection */ + uint8_t gprs_encryption; /* algorithm used for ciphering */ + uint8_t umts_present:1; + uint8_t gprs_present:1; + } capability; /* UE network capability */ + struct { + uint8_t encryption:4; /* algorithm used for ciphering */ + uint8_t integrity:4; /* algorithm used for integrity protection */ + } selected_algorithms; /* MME selected algorithms */ +} emm_security_context_t; + +/* + * -------------------------------------------------------------------------- + * EMM internal data handled by EPS Mobility Management sublayer in the UE + * -------------------------------------------------------------------------- + */ + +/* + * -------------------------------------------------------------------------- + * EMM internal data handled by EPS Mobility Management sublayer in the MME + * -------------------------------------------------------------------------- + */ +/* + * Structure of the EMM context established by the network for a particular UE + * --------------------------------------------------------------------------- + */ +typedef struct emm_data_context_s { +#if defined(NAS_BUILT_IN_EPC) + RB_ENTRY(emm_data_context_s) entries; +#endif + + unsigned int ueid; /* UE identifier */ + int is_dynamic; /* Dynamically allocated context indicator */ + int is_attached; /* Attachment indicator */ + int is_emergency;/* Emergency bearer services indicator */ + + imsi_t *imsi; /* The IMSI provided by the UE or the MME */ + imei_t *imei; /* The IMEI provided by the UE */ + int guti_is_new; /* New GUTI indicator */ + GUTI_t *guti; /* The GUTI assigned to the UE */ + GUTI_t *old_guti; /* The old GUTI */ + int n_tacs; /* Number of consecutive tracking areas the UE is + * registered to */ + tac_t tac; /* Code of the first tracking area the UE is + * registered to */ + + int ksi; /* Security key set identifier provided by the UE */ + int eea; /* EPS encryption algorithms supported by the UE */ + int eia; /* EPS integrity algorithms supported by the UE */ + int ucs2; /* UCS2 Alphabet*/ + int uea; /* UMTS encryption algorithms supported by the UE */ + int uia; /* UMTS integrity algorithms supported by the UE */ + int gea; /* GPRS encryption algorithms supported by the UE */ + int umts_present; /* For encoding ue network capabilities (variable size)*/ + int gprs_present; /* For encoding ue network capabilities (variable size)*/ + + auth_vector_t vector;/* EPS authentication vector */ + emm_security_context_t *security; /* Current EPS NAS security context */ + OctetString esm_msg; /* ESM message contained within the initial request*/ + int emm_cause; /* EMM failure cause code */ + + emm_fsm_state_t _emm_fsm_status; + + struct nas_timer_t T3450; /* EMM message retransmission timer */ + struct nas_timer_t T3460; /* Authentication timer */ + struct nas_timer_t T3470; /* Identification timer */ + + esm_data_context_t esm_data_ctx; +} emm_data_context_t; + +/* + * Structure of the EMM data + * ------------------------- + */ +typedef struct emm_data_s { + /* + * MME configuration + * ----------------- + */ + mme_api_emm_config_t conf; + /* + * EMM contexts + * ------------ + */ +# if defined(NAS_BUILT_IN_EPC) + /* Use a tree for ue data context within MME */ + RB_HEAD(emm_data_context_map, emm_data_context_s) ctx_map; +# else +# define EMM_DATA_NB_UE_MAX (MME_API_NB_UE_MAX + 1) + emm_data_context_t *ctx [EMM_DATA_NB_UE_MAX]; +# endif +} emm_data_t; + +struct emm_data_context_s *emm_data_context_get( + emm_data_t *_emm_data, unsigned int _ueid); + +struct emm_data_context_s *emm_data_context_remove( + emm_data_t *_emm_data, struct emm_data_context_s *elm); + +void emm_data_context_add(emm_data_t *emm_data, struct emm_data_context_s *elm); +void emm_data_context_dump(struct emm_data_context_s *elm_pP); + +void emm_data_context_dump_all(void); + + +/****************************************************************************/ +/******************** G L O B A L V A R I A B L E S ********************/ +/****************************************************************************/ + +/* + * -------------------------------------------------------------------------- + * EPS mobility management data (used within EMM only) + * -------------------------------------------------------------------------- + */ +emm_data_t _emm_data; + + +/* + * -------------------------------------------------------------------------- + * EPS mobility management timers – Network side + * -------------------------------------------------------------------------- + */ +#define T3450_DEFAULT_VALUE 6 /* 6 seconds */ +#define T3460_DEFAULT_VALUE 6 /* 6 seconds */ +#define T3470_DEFAULT_VALUE 6 /* 6 seconds */ + +/* + * mobile reachable timer + * ---------------------- + * The network supervises the periodic tracking area updating procedure + * of the UE by means of the mobile reachable timer. + * If the UE is not attached for emergency bearer services, the mobile + * reachable timer is 4 minutes greater than T3412. + * If the UE is attached for emergency bearer services, the MME shall + * set the mobile reachable timer with a value equal to T3412. When + * the mobile reachable timer expires, the MME shall locally detach the UE. + * + * The mobile reachable timer shall be reset and started, when the MME + * releases the NAS signalling connection for the UE. The mobile reachable + * timer shall be stopped when a NAS signalling connection is established + * for the UE. + */ + +/* + * implicit detach timer + * --------------------- + * If ISR is activated, the default value of the implicit detach timer is + * 4 minutes greater than T3423. + * If the implicit detach timer expires before the UE contacts the network, + * the network shall implicitly detach the UE. + * If the MME includes timer T3346 in the TRACKING AREA UPDATE REJECT message + * or the SERVICE REJECT message and T3346 is greater than T3412, the MME + * sets the mobile reachable timer and the implicit detach timer such that + * the sum of the timer values is greater than T3346. + * + * Upon expiry of the mobile reachable timer the network shall start the + * implicit detach timer. The implicit detach timer shall be stopped when + * a NAS signalling connection is established for the UE. + */ + +/****************************************************************************/ +/****************** E X P O R T E D F U N C T I O N S ******************/ +/****************************************************************************/ + +#endif /* __EMMDATA_H__*/ diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/emm_data_ctx.c b/openair-cn/NAS/MME/EMM/emm_data_ctx.c similarity index 96% rename from openair-cn/NAS/EURECOM-NAS/src/emm/emm_data_ctx.c rename to openair-cn/NAS/MME/EMM/emm_data_ctx.c index 9fead509fa..4030e08e95 100644 --- a/openair-cn/NAS/EURECOM-NAS/src/emm/emm_data_ctx.c +++ b/openair-cn/NAS/MME/EMM/emm_data_ctx.c @@ -30,7 +30,7 @@ #include #include -#if defined(NAS_BUILT_IN_EPC) && defined(NAS_MME) +#if defined(NAS_BUILT_IN_EPC) #include "assertions.h" #include "tree.h" #include "emmData.h" @@ -80,13 +80,13 @@ struct emm_data_context_s *emm_data_context_get( struct emm_data_context_s *emm_data_context_remove( emm_data_t *emm_data, struct emm_data_context_s *elm) { - LOG_TRACE(INFO, "EMM-CTX - Remove in context %p UE id %u", elm, elm->ueid); + LOG_TRACE(INFO, "EMM-CTX - Remove in context %p UE id "NAS_UE_ID_FMT" ", elm, elm->ueid); return RB_REMOVE(emm_data_context_map, &emm_data->ctx_map, elm); } void emm_data_context_add(emm_data_t *emm_data, struct emm_data_context_s *elm) { - LOG_TRACE(INFO, "EMM-CTX - Add in context %p UE id %u", elm, elm->ueid); + LOG_TRACE(INFO, "EMM-CTX - Add in context %p UE id "NAS_UE_ID_FMT" ", elm, elm->ueid); RB_INSERT(emm_data_context_map, &emm_data->ctx_map, elm); } @@ -97,7 +97,7 @@ void emm_data_context_dump(struct emm_data_context_s *elm_pP) char guti_str[22]; int k, size, remaining_size; char key_string[KASME_LENGTH_OCTETS*2]; - LOG_TRACE(INFO, "EMM-CTX: ue id: 0x%06"PRIX32" (UE identifier)", elm_pP->ueid); + LOG_TRACE(INFO, "EMM-CTX: ue id: "NAS_UE_ID_FMT" (UE identifier)", elm_pP->ueid); LOG_TRACE(INFO, " is_dynamic: %u (Dynamically allocated context indicator)", elm_pP->is_dynamic); LOG_TRACE(INFO, " is_attached: %u (Attachment indicator)", elm_pP->is_attached); LOG_TRACE(INFO, " is_emergency: %u (Emergency bearer services indicator)", elm_pP->is_emergency); diff --git a/openair-cn/NAS/MME/EMM/emm_main.c b/openair-cn/NAS/MME/EMM/emm_main.c new file mode 100644 index 0000000000..c90a7836f5 --- /dev/null +++ b/openair-cn/NAS/MME/EMM/emm_main.c @@ -0,0 +1,138 @@ +/******************************************************************************* + OpenAirInterface + Copyright(c) 1999 - 2014 Eurecom + + OpenAirInterface is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + + OpenAirInterface is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with OpenAirInterface.The full GNU General Public License is + included in this distribution in the file called "COPYING". If not, + see . + + Contact Information + OpenAirInterface Admin: openair_admin@eurecom.fr + OpenAirInterface Tech : openair_tech@eurecom.fr + OpenAirInterface Dev : openair4g-devel@eurecom.fr + + Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. + + *******************************************************************************/ +/***************************************************************************** +Source emm_main.c + +Version 0.1 + +Date 2012/10/10 + +Product NAS stack + +Subsystem EPS Mobility Management + +Author Frederic Maurel + +Description Defines the EPS Mobility Management procedure call manager, + the main entry point for elementary EMM processing. + +*****************************************************************************/ + +#include "emm_main.h" +#include "nas_log.h" +#include "emmData.h" + + +#if defined(NAS_BUILT_IN_EPC) +# include "mme_config.h" +#endif + +/****************************************************************************/ +/**************** E X T E R N A L D E F I N I T I O N S ****************/ +/****************************************************************************/ + +/****************************************************************************/ +/******************* L O C A L D E F I N I T I O N S *******************/ +/****************************************************************************/ + + +/****************************************************************************/ +/****************** E X P O R T E D F U N C T I O N S ******************/ +/****************************************************************************/ + + +/**************************************************************************** + ** ** + ** Name: emm_main_initialize() ** + ** ** + ** Description: Initializes EMM internal data ** + ** ** + ** Inputs: None ** + ** Others: None ** + ** ** + ** Outputs: None ** + ** Return: None ** + ** Others: _emm_data ** + ** ** + ***************************************************************************/ +#if defined(NAS_BUILT_IN_EPC) +void emm_main_initialize(mme_config_t *mme_config_p) +#else +void emm_main_initialize(void) +#endif +{ + LOG_FUNC_IN; + + /* Retreive MME supported configuration data */ +#if defined(NAS_BUILT_IN_EPC) + + if (mme_api_get_emm_config(&_emm_data.conf, mme_config_p) != RETURNok) +#else + if (mme_api_get_emm_config(&_emm_data.conf) != RETURNok) +#endif + { + LOG_TRACE(ERROR, "EMM-MAIN - Failed to get MME configuration data"); + } + +#if defined(NAS_BUILT_IN_EPC) + RB_INIT(&_emm_data.ctx_map); +#endif + + LOG_FUNC_OUT; +} + +/**************************************************************************** + ** ** + ** Name: emm_main_cleanup() ** + ** ** + ** Description: Performs the EPS Mobility Management clean up procedure ** + ** ** + ** Inputs: None ** + ** Others: None ** + ** ** + ** Outputs: None ** + ** Return: None ** + ** Others: None ** + ** ** + ***************************************************************************/ +void emm_main_cleanup(void) +{ + LOG_FUNC_IN; + + + LOG_FUNC_OUT; +} + + + +/****************************************************************************/ +/********************* L O C A L F U N C T I O N S *********************/ +/****************************************************************************/ + + diff --git a/openair-cn/NAS/MME/EMM/emm_main.h b/openair-cn/NAS/MME/EMM/emm_main.h new file mode 100644 index 0000000000..ac3772a24f --- /dev/null +++ b/openair-cn/NAS/MME/EMM/emm_main.h @@ -0,0 +1,82 @@ +/******************************************************************************* + OpenAirInterface + Copyright(c) 1999 - 2014 Eurecom + + OpenAirInterface is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + + OpenAirInterface is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with OpenAirInterface.The full GNU General Public License is + included in this distribution in the file called "COPYING". If not, + see . + + Contact Information + OpenAirInterface Admin: openair_admin@eurecom.fr + OpenAirInterface Tech : openair_tech@eurecom.fr + OpenAirInterface Dev : openair4g-devel@eurecom.fr + + Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. + + *******************************************************************************/ +/***************************************************************************** +Source emm_main.h + +Version 0.1 + +Date 2012/10/10 + +Product NAS stack + +Subsystem EPS Mobility Management + +Author Frederic Maurel + +Description Defines the EPS Mobility Management procedure call manager, + the main entry point for elementary EMM processing. + +*****************************************************************************/ +#ifndef __EMM_MAIN_H__ +#define __EMM_MAIN_H__ + +#if defined(NAS_BUILT_IN_EPC) +# include "mme_config.h" +#endif + +#include "commonDef.h" +#include "networkDef.h" + +/****************************************************************************/ +/********************* G L O B A L C O N S T A N T S *******************/ +/****************************************************************************/ + +/****************************************************************************/ +/************************ G L O B A L T Y P E S ************************/ +/****************************************************************************/ + +/****************************************************************************/ +/******************** G L O B A L V A R I A B L E S ********************/ +/****************************************************************************/ + +/****************************************************************************/ +/****************** E X P O R T E D F U N C T I O N S ******************/ +/****************************************************************************/ + + +# if defined(NAS_BUILT_IN_EPC) +void emm_main_initialize(mme_config_t *mme_config_p); +# else +void emm_main_initialize(void); +# endif +void emm_main_cleanup(void); + + + +#endif /* __EMM_MAIN_H__*/ diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/emm_proc.h b/openair-cn/NAS/MME/EMM/emm_proc.h similarity index 76% rename from openair-cn/NAS/EURECOM-NAS/src/emm/emm_proc.h rename to openair-cn/NAS/MME/EMM/emm_proc.h index 32d0b06493..d7892a03b1 100644 --- a/openair-cn/NAS/EURECOM-NAS/src/emm/emm_proc.h +++ b/openair-cn/NAS/MME/EMM/emm_proc.h @@ -49,14 +49,9 @@ Description Defines the EPS Mobility Management procedures executed at #include "commonDef.h" #include "OctetString.h" -#ifdef NAS_MME #include "EmmCommon.h" #include "emmData.h" -#endif -#ifdef NAS_UE -#include "LowerLayer.h" -#endif /****************************************************************************/ /********************* G L O B A L C O N S T A N T S *******************/ @@ -114,49 +109,22 @@ int emm_proc_status(unsigned int ueid, int emm_cause); * Lower layer procedure *--------------------------------------------------------------------------- */ -#ifdef NAS_UE -int emm_proc_lowerlayer_initialize(lowerlayer_success_callback_t success, - lowerlayer_failure_callback_t failure, - lowerlayer_release_callback_t release, - void *args); -int emm_proc_lowerlayer_success(void); -int emm_proc_lowerlayer_failure(int is_initial); -int emm_proc_lowerlayer_release(void); -#endif + /* *--------------------------------------------------------------------------- * UE's Idle mode procedure *--------------------------------------------------------------------------- */ -#ifdef NAS_UE -int emm_proc_initialize(void); -int emm_proc_plmn_selection(int index); -int emm_proc_plmn_selection_end(int found, tac_t tac, ci_t ci, AcT_t rat); -#endif + /* * -------------------------------------------------------------------------- * Attach procedure * -------------------------------------------------------------------------- */ -#ifdef NAS_UE -int emm_proc_attach(emm_proc_attach_type_t type); -int emm_proc_attach_request(void *args); -int emm_proc_attach_accept(long T3412, long T3402, long T3423, int n_tais, - tai_t *tai, GUTI_t *guti, int n_eplmns, plmn_t *eplmn, - const OctetString *esm_msg); -int emm_proc_attach_reject(int emm_cause, const OctetString *esm_msg); -int emm_proc_attach_complete(void *args); -int emm_proc_attach_failure(int is_initial, void *args); -int emm_proc_attach_release(void *args); -int emm_proc_attach_restart(void); -int emm_proc_attach_set_emergency(void); -int emm_proc_attach_set_detach(void); -#endif -#ifdef NAS_MME int emm_proc_attach_request(unsigned int ueid, emm_proc_attach_type_t type, int native_ksi, int ksi, int native_guti, GUTI_t *guti, imsi_t *imsi, imei_t *imei, tai_t *tai, int eea, int eia, int ucs2, int uea, int uia, int gea, @@ -164,38 +132,23 @@ int emm_proc_attach_request(unsigned int ueid, emm_proc_attach_type_t type, int emm_proc_attach_reject(unsigned int ueid, int emm_cause); int emm_proc_attach_complete(unsigned int ueid, const OctetString *esm_msg); int emm_proc_tracking_area_update_reject(unsigned int ueid, int emm_cause); -#endif /* * -------------------------------------------------------------------------- * Detach procedure * -------------------------------------------------------------------------- */ -#ifdef NAS_UE -int emm_proc_detach(emm_proc_detach_type_t type, int switch_off); -int emm_proc_detach_request(void *args); -int emm_proc_detach_accept(void); -int emm_proc_detach_failure(int is_initial, void *args); -int emm_proc_detach_release(void *args); -#endif -#ifdef NAS_MME int emm_proc_detach(unsigned int ueid, emm_proc_detach_type_t type); int emm_proc_detach_request(unsigned int ueid, emm_proc_detach_type_t type, int switch_off, int native_ksi, int ksi, GUTI_t *guti, imsi_t *imsi, imei_t *imei); -#endif /* * -------------------------------------------------------------------------- * Identification procedure * -------------------------------------------------------------------------- */ -#ifdef NAS_UE -int emm_proc_identification_request(emm_proc_identity_type_t type); -#endif - -#ifdef NAS_MME int emm_proc_identification(unsigned int ueid, emm_data_context_t *emm_ctx, emm_proc_identity_type_t type, @@ -203,22 +156,14 @@ int emm_proc_identification(unsigned int ueid, emm_common_reject_callback_t reject, emm_common_failure_callback_t failure); int emm_proc_identification_complete(unsigned int ueid, const imsi_t *imsi, - const imei_t *imei, UInt32_t *tmsi); -#endif + const imei_t *imei, uint32_t *tmsi); /* * -------------------------------------------------------------------------- * Authentication procedure * -------------------------------------------------------------------------- */ -#ifdef NAS_UE -int emm_proc_authentication_request(int native_ksi, int ksi, - const OctetString *rand, const OctetString *autn); -int emm_proc_authentication_reject(void); -int emm_proc_authentication_delete(void); -#endif -#ifdef NAS_MME int emm_proc_authentication(void *ctx, unsigned int ueid, int ksi, const OctetString *_rand, const OctetString *autn, emm_common_success_callback_t success, @@ -228,19 +173,13 @@ int emm_proc_authentication_complete(unsigned int ueid, int emm_cause, const OctetString *res); int emm_attach_security(void *args); -#endif /* * -------------------------------------------------------------------------- * Security mode control procedure * -------------------------------------------------------------------------- */ -#ifdef NAS_UE -int emm_proc_security_mode_command(int native_ksi, int ksi, int seea, int seia, - int reea, int reia); -#endif -#ifdef NAS_MME int emm_proc_security_mode_control(unsigned int ueid, int ksi, int eea, int eia,int ucs2, int uea, int uia, int gea, int umts_present, int gprs_present, @@ -249,17 +188,12 @@ int emm_proc_security_mode_control(unsigned int ueid, int ksi, emm_common_failure_callback_t failure); int emm_proc_security_mode_complete(unsigned int ueid); int emm_proc_security_mode_reject(unsigned int ueid); -#endif /* *--------------------------------------------------------------------------- * Network indication handlers *--------------------------------------------------------------------------- */ -#ifdef NAS_UE -int emm_proc_registration_notify(Stat_t status); -int emm_proc_location_notify(tac_t tac, ci_t ci, AcT_t rat); -int emm_proc_network_notify(int index); -#endif + #endif /* __EMM_PROC_H__*/ diff --git a/openair-cn/NAS/EURECOM-NAS/src/api/user/COPYING b/openair-cn/NAS/MME/ESM/COPYING similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/api/user/COPYING rename to openair-cn/NAS/MME/ESM/COPYING diff --git a/openair-cn/NAS/EURECOM-NAS/src/esm/DedicatedEpsBearerContextActivation.c b/openair-cn/NAS/MME/ESM/DedicatedEpsBearerContextActivation.c similarity index 65% rename from openair-cn/NAS/EURECOM-NAS/src/esm/DedicatedEpsBearerContextActivation.c rename to openair-cn/NAS/MME/ESM/DedicatedEpsBearerContextActivation.c index 303e41285e..813b29770d 100644 --- a/openair-cn/NAS/EURECOM-NAS/src/esm/DedicatedEpsBearerContextActivation.c +++ b/openair-cn/NAS/MME/ESM/DedicatedEpsBearerContextActivation.c @@ -80,7 +80,6 @@ Description Defines the dedicated EPS bearer context activation ESM * procedure in the MME * -------------------------------------------------------------------------- */ -#ifdef NAS_MME /* * Timer handlers */ @@ -92,7 +91,6 @@ static void *_dedicated_eps_bearer_activate_t3485_handler(void *); static int _dedicated_eps_bearer_activate(emm_data_context_t *ctx, int ebi, const OctetString *msg); -#endif // NAS_MME /****************************************************************************/ /****************** E X P O R T E D F U N C T I O N S ******************/ @@ -103,7 +101,6 @@ static int _dedicated_eps_bearer_activate(emm_data_context_t *ctx, int ebi, * Dedicated EPS bearer context activation procedure executed by the MME * -------------------------------------------------------------------------- */ -#ifdef NAS_MME /**************************************************************************** ** ** ** Name: esm_proc_dedicated_eps_bearer_context() ** @@ -137,7 +134,7 @@ int esm_proc_dedicated_eps_bearer_context(emm_data_context_t *ctx, int pid, LOG_FUNC_IN; LOG_TRACE(INFO, "ESM-PROC - Dedicated EPS bearer context activation " - "(ueid=%u, pid=%d)", ctx->ueid, pid); + "(ueid="NAS_UE_ID_FMT", pid=%d)", ctx->ueid, pid); /* Assign new EPS bearer context */ *ebi = esm_ebr_assign(ctx, ESM_EBI_UNASSIGNED); @@ -197,7 +194,7 @@ int esm_proc_dedicated_eps_bearer_context_request(int is_standalone, int rc = RETURNok; LOG_TRACE(INFO,"ESM-PROC - Initiate dedicated EPS bearer context " - "activation (ueid=%d, ebi=%d)", ctx->ueid, ebi); + "activation (ueid="NAS_UE_ID_FMT", ebi=%d)", ctx->ueid, ebi); /* Send activate dedicated EPS bearer context request message and * start timer T3485 */ @@ -247,7 +244,7 @@ int esm_proc_dedicated_eps_bearer_context_accept(emm_data_context_t *ctx, int eb int rc; LOG_TRACE(INFO, "ESM-PROC - Dedicated EPS bearer context activation " - "accepted by the UE (ueid=%u, ebi=%d)", ctx->ueid, ebi); + "accepted by the UE (ueid="NAS_UE_ID_FMT", ebi=%d)", ctx->ueid, ebi); /* Stop T3485 timer */ rc = esm_ebr_stop_timer(ctx, ebi); @@ -300,7 +297,7 @@ int esm_proc_dedicated_eps_bearer_context_reject(emm_data_context_t *ctx, int eb LOG_FUNC_IN; LOG_TRACE(WARNING, "ESM-PROC - Dedicated EPS bearer context activation " - "not accepted by the UE (ueid=%u, ebi=%d)", ctx->ueid, ebi); + "not accepted by the UE (ueid="NAS_UE_ID_FMT", ebi=%d)", ctx->ueid, ebi); /* Stop T3485 timer if running */ rc = esm_ebr_stop_timer(ctx, ebi); @@ -319,230 +316,7 @@ int esm_proc_dedicated_eps_bearer_context_reject(emm_data_context_t *ctx, int eb LOG_FUNC_RETURN (rc); } -#endif // NAS_MME -/* - * -------------------------------------------------------------------------- - * Dedicated EPS bearer context activation procedure executed by the UE - * -------------------------------------------------------------------------- - */ -#ifdef NAS_UE -/**************************************************************************** - ** ** - ** Name: esm_proc_dedicated_eps_bearer_context_request() ** - ** ** - ** Description: Creates local dedicated EPS bearer context upon receipt ** - ** of the ACTIVATE DEDICATED EPS BEARER CONTEXT REQUEST ** - ** message. ** - ** ** - ** Inputs: ebi: EPS bearer identity ** - ** default_ebi: EPS bearer identity of the associated de- ** - ** fault EPS bearer context ** - ** esm_qos: EPS bearer level QoS parameters ** - ** tft: Traffic flow template parameters ** - ** Others: None ** - ** ** - ** Outputs: esm_cause: Cause code returned upon ESM procedure ** - ** failure ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -int esm_proc_dedicated_eps_bearer_context_request(int ebi, int default_ebi, - const esm_proc_qos_t *qos, - const esm_proc_tft_t *tft, - int *esm_cause) -{ - LOG_FUNC_IN; - - int rc = RETURNerror; - - LOG_TRACE(INFO, "ESM-PROC - Dedicated EPS bearer context activation " - "requested by the network (ebi=%d)", ebi); - - /* Get the PDN connection the dedicated EPS bearer is linked to */ - int pid = esm_ebr_context_get_pid(default_ebi); - - if (pid < 0) { - /* 3GPP TS 24.301, section 6.4.2.5, abnormal case c - * No default EPS bearer context with linked EPS bearer identity - * activated - */ - LOG_TRACE(WARNING, "ESM-PROC - Failed to get PDN connection the " - "dedicated EPS bearer is linked to (ebi=%d)", default_ebi); - *esm_cause = ESM_CAUSE_INVALID_EPS_BEARER_IDENTITY; - LOG_FUNC_RETURN (RETURNerror); - } - - /* Assign dedicated EPS bearer context */ - int new_ebi = esm_ebr_assign(ebi, pid+1, FALSE); - - if (new_ebi == ESM_EBI_UNASSIGNED) { - /* 3GPP TS 24.301, section 6.4.2.5, abnormal cases a and b - * Dedicated EPS bearer context activation request for an already - * activated default or dedicated EPS bearer context - */ - int old_pid, old_bid; - /* Locally deactivate the existing EPS bearer context and proceed - * with the requested dedicated EPS bearer context activation */ - rc = esm_proc_eps_bearer_context_deactivate(TRUE, ebi, - &old_pid, &old_bid); - - if (rc != RETURNok) { - /* Failed to release EPS bearer context */ - *esm_cause = ESM_CAUSE_PROTOCOL_ERROR; - } else { - /* Assign new dedicated EPS bearer context */ - ebi = esm_ebr_assign(ebi, pid+1, FALSE); - } - } - - if (ebi != ESM_EBI_UNASSIGNED) { - /* Check syntactical errors in packet filters */ - rc = esm_ebr_context_check_tft(pid, ebi, tft, - ESM_EBR_CONTEXT_TFT_CREATE); - - if (rc != RETURNok) { - /* Syntactical errors in packet filters */ - LOG_TRACE(WARNING, "ESM-PROC - Syntactical errors in packet " - "filters"); - *esm_cause = ESM_CAUSE_SYNTACTICAL_ERROR_IN_PACKET_FILTER; - } else { - /* Create new dedicated EPS bearer context */ - default_ebi = esm_ebr_context_create(pid, ebi, FALSE, qos, tft); - - if (default_ebi != ESM_EBI_UNASSIGNED) { - /* Dedicated EPS bearer contextx successfully created */ - rc = RETURNok; - } else { - /* No resource available */ - LOG_TRACE(WARNING, "ESM-PROC - Failed to create new dedicated " - "EPS bearer context"); - *esm_cause = ESM_CAUSE_INSUFFICIENT_RESOURCES; - } - } - } - - LOG_FUNC_RETURN (rc); -} - -/**************************************************************************** - ** ** - ** Name: esm_proc_dedicated_eps_bearer_context_accept() ** - ** ** - ** Description: Performs dedicated EPS bearer context activation proce- ** - ** dure accepted by the UE. ** - ** ** - ** 3GPP TS 24.301, section 6.4.2.3 ** - ** The UE accepts dedicated EPS bearer context activation by ** - ** sending ACTIVATE DEDICATED EPS BEARER CONTEXT ACCEPT mes- ** - ** sage and entering the state BEARER CONTEXT ACTIVE. ** - ** ** - ** Inputs: is_standalone: Not used ** - ** ebi: EPS bearer identity ** - ** msg: Encoded ESM message to be sent ** - ** ue_triggered: TRUE if the EPS bearer context procedure ** - ** was triggered by the UE ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -int esm_proc_dedicated_eps_bearer_context_accept(int is_standalone, int ebi, - OctetString *msg, int ue_triggered) -{ - LOG_FUNC_IN; - - int rc; - - LOG_TRACE(INFO,"ESM-PROC - Dedicated EPS bearer context activation " - "accepted by the UE (ebi=%d)", ebi); - - emm_sap_t emm_sap; - emm_esm_data_t *emm_esm = &emm_sap.u.emm_esm.u.data; - /* - * Notity EMM that ESM PDU has to be forwarded to lower layers - */ - emm_sap.primitive = EMMESM_UNITDATA_REQ; - emm_sap.u.emm_esm.ueid = 0; - emm_esm->msg.length = msg->length; - emm_esm->msg.value = msg->value; - rc = emm_sap_send(&emm_sap); - - if (rc != RETURNerror) { - /* Set the EPS bearer context state to ACTIVE */ - rc = esm_ebr_set_status(ebi, ESM_EBR_ACTIVE, ue_triggered); - - if (rc != RETURNok) { - /* The EPS bearer context was already in ACTIVE state */ - LOG_TRACE(WARNING, "ESM-PROC - EBI %d was already ACTIVE", ebi); - /* Accept network retransmission of already accepted activate - * dedicated EPS bearer context request */ - LOG_FUNC_RETURN (RETURNok); - } - } - - LOG_FUNC_RETURN (rc); -} - -/**************************************************************************** - ** ** - ** Name: esm_proc_dedicated_eps_bearer_context_reject() ** - ** ** - ** Description: Performs dedicated EPS bearer context activation proce- ** - ** dure not accepted by the UE. ** - ** ** - ** 3GPP TS 24.301, section 6.4.2.4 ** - ** The UE rejects dedicated EPS bearer context activation by ** - ** sending ACTIVATE DEDICATED EPS BEARER CONTEXT REJECT mes- ** - ** sage. ** - ** ** - ** Inputs: is_standalone: Not used ** - ** ebi: EPS bearer identity ** - ** msg: Encoded ESM message to be sent ** - ** ue_triggered: Not used ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -int esm_proc_dedicated_eps_bearer_context_reject(int is_standalone, int ebi, - OctetString *msg, int ue_triggered) -{ - LOG_FUNC_IN; - - int rc = RETURNok; - - LOG_TRACE(WARNING, "ESM-PROC - Dedicated EPS bearer context activation " - "not accepted by the UE (ebi=%d)", ebi); - - if ( !esm_ebr_is_not_in_use(ebi) ) { - /* Release EPS bearer data currently in use */ - rc = esm_ebr_release(ebi); - } - - if (rc != RETURNok) { - LOG_TRACE(WARNING, "ESM-PROC - Failed to release EPS bearer data"); - } else { - emm_sap_t emm_sap; - emm_esm_data_t *emm_esm = &emm_sap.u.emm_esm.u.data; - /* - * Notity EMM that ESM PDU has to be forwarded to lower layers - */ - emm_sap.primitive = EMMESM_UNITDATA_REQ; - emm_sap.u.emm_esm.ueid = 0; - emm_esm->msg.length = msg->length; - emm_esm->msg.value = msg->value; - rc = emm_sap_send(&emm_sap); - } - - LOG_FUNC_RETURN (rc); -} -#endif // NAS_UE /****************************************************************************/ /********************* L O C A L F U N C T I O N S *********************/ @@ -553,7 +327,6 @@ int esm_proc_dedicated_eps_bearer_context_reject(int is_standalone, int ebi, * Timer handlers * -------------------------------------------------------------------------- */ -#ifdef NAS_MME /**************************************************************************** ** ** ** Name: _dedicated_eps_bearer_activate_t3485_handler() ** @@ -589,7 +362,7 @@ static void *_dedicated_eps_bearer_activate_t3485_handler(void *args) /* Increment the retransmission counter */ data->count += 1; - LOG_TRACE(WARNING, "ESM-PROC - T3485 timer expired (ueid=%d, ebi=%d), " + LOG_TRACE(WARNING, "ESM-PROC - T3485 timer expired (ueid="NAS_UE_ID_FMT", ebi=%d), " "retransmission counter = %d", data->ueid, data->ebi, data->count); @@ -667,4 +440,3 @@ static int _dedicated_eps_bearer_activate(emm_data_context_t *ctx, int ebi, LOG_FUNC_RETURN (rc); } -#endif // NAS_MME diff --git a/openair-cn/NAS/EURECOM-NAS/src/esm/DefaultEpsBearerContextActivation.c b/openair-cn/NAS/MME/ESM/DefaultEpsBearerContextActivation.c similarity index 60% rename from openair-cn/NAS/EURECOM-NAS/src/esm/DefaultEpsBearerContextActivation.c rename to openair-cn/NAS/MME/ESM/DefaultEpsBearerContextActivation.c index 6163bcd4da..831fc3327d 100644 --- a/openair-cn/NAS/EURECOM-NAS/src/esm/DefaultEpsBearerContextActivation.c +++ b/openair-cn/NAS/MME/ESM/DefaultEpsBearerContextActivation.c @@ -70,19 +70,6 @@ Description Defines the default EPS bearer context activation ESM /******************* L O C A L D E F I N I T I O N S *******************/ /****************************************************************************/ -/* - * -------------------------------------------------------------------------- - * Internal data handled by the default EPS bearer context activation - * procedure in the UE - * -------------------------------------------------------------------------- - */ -#ifdef NAS_UE -static struct { - int ebi; /* EPS bearer identity of the default EPS bearer associated - * to the PDN connection to be activated */ -} _default_eps_bearer_context_data = {ESM_EBI_UNASSIGNED}; - -#endif // NAS_UE /* * -------------------------------------------------------------------------- @@ -90,7 +77,6 @@ static struct { * procedure in the MME * -------------------------------------------------------------------------- */ -#ifdef NAS_MME /* * Timer handlers */ @@ -102,7 +88,6 @@ static void *_default_eps_bearer_activate_t3485_handler(void *); static int _default_eps_bearer_activate(emm_data_context_t *ctx, int ebi, const OctetString *msg); -#endif // NAS_MME /****************************************************************************/ /****************** E X P O R T E D F U N C T I O N S ******************/ @@ -113,7 +98,6 @@ static int _default_eps_bearer_activate(emm_data_context_t *ctx, int ebi, * Default EPS bearer context activation procedure executed by the MME * -------------------------------------------------------------------------- */ -#ifdef NAS_MME /**************************************************************************** ** ** ** Name: esm_proc_default_eps_bearer_context() ** @@ -142,7 +126,7 @@ int esm_proc_default_eps_bearer_context(emm_data_context_t *ctx, int pid, LOG_FUNC_IN; LOG_TRACE(INFO, "ESM-PROC - Default EPS bearer context activation " - "(ueid=%u, pid=%d, GBR UL %u GBR DL %u, MBR UL %u MBR DL %u QCI %u)", + "(ueid="NAS_UE_ID_FMT", pid=%d, GBR UL %u GBR DL %u, MBR UL %u MBR DL %u QCI %u)", ctx->ueid, pid, qos->gbrUL, @@ -216,11 +200,11 @@ int esm_proc_default_eps_bearer_context_request(int is_standalone, /* Send activate default EPS bearer context request message and * start timer T3485 */ LOG_TRACE(INFO,"ESM-PROC - Initiate standalone default EPS bearer context activation " - "(ueid=%u, ebi=%d)", ctx->ueid, ebi); + "(ueid="NAS_UE_ID_FMT", ebi=%d)", ctx->ueid, ebi); rc = _default_eps_bearer_activate(ctx, ebi, msg); } else { LOG_TRACE(INFO,"ESM-PROC - Initiate non standalone default EPS bearer context activation " - "(ueid=%u, ebi=%d)", ctx->ueid, ebi); + "(ueid="NAS_UE_ID_FMT", ebi=%d)", ctx->ueid, ebi); } if (rc != RETURNerror) { @@ -267,7 +251,7 @@ int esm_proc_default_eps_bearer_context_accept(emm_data_context_t *ctx, int ebi, int rc; LOG_TRACE(INFO, "ESM-PROC - Default EPS bearer context activation " - "accepted by the UE (ueid=%u, ebi=%d)", ctx->ueid, ebi); + "accepted by the UE (ueid="NAS_UE_ID_FMT", ebi=%d)", ctx->ueid, ebi); /* Stop T3485 timer if running */ rc = esm_ebr_stop_timer(ctx, ebi); @@ -316,7 +300,7 @@ int esm_proc_default_eps_bearer_context_reject(emm_data_context_t *ctx, int ebi, int rc; LOG_TRACE(WARNING, "ESM-PROC - Default EPS bearer context activation " - "not accepted by the UE (ueid=%u, ebi=%d)", ctx->ueid, ebi); + "not accepted by the UE (ueid="NAS_UE_ID_FMT", ebi=%d)", ctx->ueid, ebi); /* Stop T3485 timer if running */ rc = esm_ebr_stop_timer(ctx, ebi); @@ -368,7 +352,7 @@ int esm_proc_default_eps_bearer_context_failure(emm_data_context_t *ctx) LOG_FUNC_IN; LOG_TRACE(WARNING, "ESM-PROC - Default EPS bearer context activation " - "failure (ueid=%u)", ctx->ueid); + "failure (ueid="NAS_UE_ID_FMT")", ctx->ueid); /* Get the EPS bearer identity of the EPS bearer context which is still * pending in the active pending state */ @@ -388,295 +372,7 @@ int esm_proc_default_eps_bearer_context_failure(emm_data_context_t *ctx) LOG_FUNC_RETURN (RETURNerror); } -#endif // NAS_MME -/* - * -------------------------------------------------------------------------- - * Default EPS bearer context activation procedure executed by the UE - * -------------------------------------------------------------------------- - */ -#ifdef NAS_UE -/**************************************************************************** - ** ** - ** Name: esm_proc_default_eps_bearer_context_request() ** - ** ** - ** Description: Creates local default EPS bearer context upon receipt of ** - ** the ACTIVATE DEFAULT EPS BEARER CONTEXT REQUEST message. ** - ** ** - ** Inputs: pid: PDN connection identifier ** - ** ebi: EPS bearer identity ** - ** qos: EPS bearer level QoS parameters ** - ** Others: None ** - ** ** - ** Outputs: esm_cause: Cause code returned upon ESM procedure ** - ** failure ** - ** Return: RETURNok, RETURNerror ** - ** Others: _default_eps_bearer_context_data ** - ** ** - ***************************************************************************/ -int esm_proc_default_eps_bearer_context_request(int pid, int ebi, - const esm_proc_qos_t *qos, - int *esm_cause) -{ - LOG_FUNC_IN; - - int rc = RETURNerror; - - LOG_TRACE(INFO, "ESM-PROC - Default EPS bearer context activation " - "requested by the network (ebi=%d)", ebi); - - /* Assign default EPS bearer context */ - int new_ebi = esm_ebr_assign(ebi, pid+1, TRUE); - - if (new_ebi == ESM_EBI_UNASSIGNED) { - /* 3GPP TS 24.301, section 6.4.1.5, abnormal cases a and b - * Default EPS bearer context activation request for an already - * activated default or dedicated EPS bearer context - */ - int old_pid, old_bid; - /* Locally deactivate the existing EPS bearer context and proceed - * with the requested default EPS bearer context activation */ - rc = esm_proc_eps_bearer_context_deactivate(TRUE, ebi, - &old_pid, &old_bid); - - if (rc != RETURNok) { - /* Failed to release EPS bearer context */ - *esm_cause = ESM_CAUSE_PROTOCOL_ERROR; - } else { - /* Assign new default EPS bearer context */ - ebi = esm_ebr_assign(ebi, pid+1, TRUE); - } - } - - if (ebi != ESM_EBI_UNASSIGNED) { - /* Create new default EPS bearer context */ - ebi = esm_ebr_context_create(pid, ebi, TRUE, qos, NULL); - - if (ebi != ESM_EBI_UNASSIGNED) { - /* Default EPS bearer contextx successfully created */ - _default_eps_bearer_context_data.ebi = ebi; - rc = RETURNok; - } else { - /* No resource available */ - LOG_TRACE(WARNING, "ESM-PROC - Failed to create new default EPS " - "bearer context"); - *esm_cause = ESM_CAUSE_INSUFFICIENT_RESOURCES; - } - } - - LOG_FUNC_RETURN (rc); -} - -/**************************************************************************** - ** ** - ** Name: esm_proc_default_eps_bearer_context_accept() ** - ** ** - ** Description: Performs default EPS bearer context activation procedure ** - ** accepted by the UE. ** - ** ** - ** 3GPP TS 24.301, section 6.4.1.3 ** - ** The UE accepts default EPS bearer context activation by ** - ** sending ACTIVATE DEFAULT EPS BEARER CONTEXT ACCEPT mes- ** - ** sage and entering the state BEARER CONTEXT ACTIVE. ** - ** If the default bearer is activated as part of the attach ** - ** procedure, the UE shall send the accept message together ** - ** with ATTACH COMPLETE message. ** - ** ** - ** Inputs: is_standalone: Indicates whether the activate default EPS ** - ** bearer context accept has to be sent stand-** - ** alone or together within an attach comple- ** - ** te message ** - ** ebi: EPS bearer identity ** - ** msg: Encoded ESM message to be sent ** - ** ue_triggered: TRUE if the EPS bearer context procedure ** - ** was triggered by the UE (should be always ** - ** TRUE) ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -int esm_proc_default_eps_bearer_context_accept(int is_standalone, int ebi, - OctetString *msg, int ue_triggered) -{ - LOG_FUNC_IN; - - int rc = RETURNok; - - LOG_TRACE(INFO,"ESM-PROC - Default EPS bearer context activation " - "accepted by the UE (ebi=%d)", ebi); - - if (is_standalone) { - emm_sap_t emm_sap; - emm_esm_data_t *emm_esm = &emm_sap.u.emm_esm.u.data; - /* - * Notity EMM that ESM PDU has to be forwarded to lower layers - */ - emm_sap.primitive = EMMESM_UNITDATA_REQ; - emm_sap.u.emm_esm.ueid = 0; - emm_esm->msg.length = msg->length; - emm_esm->msg.value = msg->value; - rc = emm_sap_send(&emm_sap); - } - - if (rc != RETURNerror) { - /* Set the EPS bearer context state to ACTIVE */ - rc = esm_ebr_set_status(ebi, ESM_EBR_ACTIVE, ue_triggered); - - if (rc != RETURNok) { - /* The EPS bearer context was already in ACTIVE state */ - LOG_TRACE(WARNING, "ESM-PROC - EBI %d was already ACTIVE", ebi); - /* Accept network retransmission of already accepted activate - * default EPS bearer context request */ - LOG_FUNC_RETURN (RETURNok); - } - } - - LOG_FUNC_RETURN (rc); -} - -/**************************************************************************** - ** ** - ** Name: esm_proc_default_eps_bearer_context_reject() ** - ** ** - ** Description: Performs default EPS bearer context activation procedure ** - ** not accepted by the UE. ** - ** ** - ** 3GPP TS 24.301, section 6.4.1.4 ** - ** The UE rejects default EPS bearer context activation by ** - ** sending ACTIVATE DEFAULT EPS BEARER CONTEXT REJECT mes- ** - ** sage and entering the state BEARER CONTEXT INACTIVE. ** - ** If the default EPS bearer context activation is part of ** - ** the attach procedure, the ESM sublayer shall notify the ** - ** EMM sublayer of an ESM failure. ** - ** ** - ** Inputs: is_standalone: Indicates whether the activate default EPS ** - ** bearer context accept has to be sent stand-** - ** alone or together within an attach comple- ** - ** te message ** - ** ebi: EPS bearer identity ** - ** msg: Encoded ESM message to be sent ** - ** ue_triggered: Not used ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -int esm_proc_default_eps_bearer_context_reject(int is_standalone, int ebi, - OctetString *msg, int ue_triggered) -{ - LOG_FUNC_IN; - - int rc = RETURNok; - - LOG_TRACE(WARNING, "ESM-PROC - Default EPS bearer context activation " - "not accepted by the UE (ebi=%d)", ebi); - - if ( !esm_ebr_is_not_in_use(ebi) ) { - /* Release EPS bearer data currently in use */ - rc = esm_ebr_release(ebi); - } - - if (rc != RETURNok) { - LOG_TRACE(WARNING, "ESM-PROC - Failed to release EPS bearer data"); - } else if (is_standalone) { - emm_sap_t emm_sap; - emm_esm_data_t *emm_esm = &emm_sap.u.emm_esm.u.data; - /* - * Notity EMM that ESM PDU has to be forwarded to lower layers - */ - emm_sap.primitive = EMMESM_UNITDATA_REQ; - emm_sap.u.emm_esm.ueid = 0; - emm_esm->msg.length = msg->length; - emm_esm->msg.value = msg->value; - rc = emm_sap_send(&emm_sap); - } else { - /* An error is returned to notify EMM that the default EPS bearer - * activation procedure initiated as part of the initial attach - * procedure has failed - */ - rc = RETURNerror; - } - - LOG_FUNC_RETURN (rc); -} - -/**************************************************************************** - ** ** - ** Name: esm_proc_default_eps_bearer_context_complete() ** - ** ** - ** Description: Terminates the default EPS bearer context activation pro- ** - ** cedure upon receiving indication from the EPS Mobility ** - ** Management sublayer that the ACTIVATE DEFAULT EPS BEARER ** - ** CONTEXT ACCEPT message has been successfully delivered to ** - ** the MME. ** - ** ** - ** Inputs: None ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: RETURNok, RETURNerror ** - ** Others: _default_eps_bearer_context_data ** - ** ** - ***************************************************************************/ -int esm_proc_default_eps_bearer_context_complete(void) -{ - LOG_FUNC_IN; - - LOG_TRACE(INFO, - "ESM-PROC - Default EPS bearer context activation complete"); - - /* Reset default EPS bearer context internal data */ - _default_eps_bearer_context_data.ebi = ESM_EBI_UNASSIGNED; - - LOG_FUNC_RETURN (RETURNok); -} - -/**************************************************************************** - ** ** - ** Name: esm_proc_default_eps_bearer_context_failure() ** - ** ** - ** Description: Performs default EPS bearer context activation procedure ** - ** upon receiving transmission failure of ESM message indi- ** - ** cation from the EPS Mobility Management sublayer ** - ** ** - ** The UE releases the default EPS bearer context previously ** - ** allocated before the ACTIVATE DEFAULT EPS BEARER CONTEXT ** - ** ACCEPT message was sent. ** - ** ** - ** Inputs: None ** - ** Others: _default_eps_bearer_context_data ** - ** ** - ** Outputs: None ** - ** Return: RETURNok, RETURNerror ** - ** Others: _default_eps_bearer_context_data ** - ** ** - ***************************************************************************/ -int esm_proc_default_eps_bearer_context_failure(void) -{ - LOG_FUNC_IN; - - int ebi = _default_eps_bearer_context_data.ebi; - int pid, bid; - - LOG_TRACE(WARNING, - "ESM-PROC - Default EPS bearer context activation failure"); - - /* Release the default EPS bearer context and enter state INACTIVE */ - int rc = esm_proc_eps_bearer_context_deactivate(TRUE, ebi, &pid, &bid); - - if (rc != RETURNerror) { - /* Reset default EPS bearer context internal data */ - _default_eps_bearer_context_data.ebi = ESM_EBI_UNASSIGNED; - } - - LOG_FUNC_RETURN (rc); -} -#endif // NAS_UE /****************************************************************************/ /********************* L O C A L F U N C T I O N S *********************/ @@ -687,7 +383,6 @@ int esm_proc_default_eps_bearer_context_failure(void) * Timer handlers * -------------------------------------------------------------------------- */ -#ifdef NAS_MME /**************************************************************************** ** ** ** Name: _default_eps_bearer_activate_t3485_handler() ** @@ -722,7 +417,7 @@ static void *_default_eps_bearer_activate_t3485_handler(void *args) /* Increment the retransmission counter */ data->count += 1; - LOG_TRACE(WARNING, "ESM-PROC - T3485 timer expired (ueid=%d, ebi=%d), " + LOG_TRACE(WARNING, "ESM-PROC - T3485 timer expired (ueid="NAS_UE_ID_FMT", ebi=%d), " "retransmission counter = %d", data->ueid, data->ebi, data->count); @@ -800,4 +495,3 @@ static int _default_eps_bearer_activate(emm_data_context_t *ctx, int ebi, LOG_FUNC_RETURN (rc); } -#endif // NAS_MME diff --git a/openair-cn/NAS/EURECOM-NAS/src/esm/EpsBearerContextDeactivation.c b/openair-cn/NAS/MME/ESM/EpsBearerContextDeactivation.c similarity index 61% rename from openair-cn/NAS/EURECOM-NAS/src/esm/EpsBearerContextDeactivation.c rename to openair-cn/NAS/MME/ESM/EpsBearerContextDeactivation.c index 2e4791f907..b26240a848 100644 --- a/openair-cn/NAS/EURECOM-NAS/src/esm/EpsBearerContextDeactivation.c +++ b/openair-cn/NAS/MME/ESM/EpsBearerContextDeactivation.c @@ -62,10 +62,6 @@ Description Defines the EPS bearer context deactivation ESM procedure #include "esm_ebr.h" #include "esm_ebr_context.h" -#ifdef NAS_UE -#include "esm_main.h" -#endif - #include "emm_sap.h" #include "esm_sap.h" @@ -77,15 +73,7 @@ Description Defines the EPS bearer context deactivation ESM procedure /******************* L O C A L D E F I N I T I O N S *******************/ /****************************************************************************/ -/* - * -------------------------------------------------------------------------- - * Internal data handled by the EPS bearer context deactivation procedure - * in the UE - * -------------------------------------------------------------------------- - */ -#ifdef NAS_UE -static int _eps_bearer_release(int ebi, int *pid, int *bid); -#endif // NAS_UE + /* * -------------------------------------------------------------------------- @@ -93,7 +81,6 @@ static int _eps_bearer_release(int ebi, int *pid, int *bid); * in the MME * -------------------------------------------------------------------------- */ -#ifdef NAS_MME /* * Timer handlers */ @@ -107,7 +94,6 @@ static int _eps_bearer_deactivate(emm_data_context_t *ctx, int ebi, const OctetString *msg); static int _eps_bearer_release(emm_data_context_t *ctx, int ebi, int *pid, int *bid); -#endif // NAS_MME /****************************************************************************/ /****************** E X P O R T E D F U N C T I O N S ******************/ @@ -118,7 +104,6 @@ static int _eps_bearer_release(emm_data_context_t *ctx, int ebi, int *pid, int * * EPS bearer context deactivation procedure executed by the MME * -------------------------------------------------------------------------- */ -#ifdef NAS_MME /**************************************************************************** ** ** ** Name: esm_proc_eps_bearer_context_deactivate() ** @@ -179,7 +164,7 @@ int esm_proc_eps_bearer_context_deactivate(emm_data_context_t *ctx, int is_local } LOG_TRACE(INFO, "ESM-PROC - EPS bearer context deactivation " - "(ueid=%u, ebi=%d)", ctx->ueid, ebi); + "(ueid="NAS_UE_ID_FMT", ebi=%d)", ctx->ueid, ebi); if ((ctx != NULL) && (*pid < ESM_DATA_PDN_MAX) ) { @@ -249,7 +234,7 @@ int esm_proc_eps_bearer_context_deactivate_request(int is_standalone, int rc; LOG_TRACE(INFO,"ESM-PROC - Initiate EPS bearer context deactivation " - "(ueid=%d, ebi=%d)", ctx->ueid, ebi); + "(ueid="NAS_UE_ID_FMT", ebi=%d)", ctx->ueid, ebi); /* Send deactivate EPS bearer context request message and * start timer T3495 */ @@ -303,7 +288,7 @@ int esm_proc_eps_bearer_context_deactivate_accept(emm_data_context_t *ctx, int e int pid = RETURNerror; LOG_TRACE(INFO, "ESM-PROC - EPS bearer context deactivation " - "accepted by the UE (ueid=%u, ebi=%d)", ctx->ueid, ebi); + "accepted by the UE (ueid="NAS_UE_ID_FMT", ebi=%d)", ctx->ueid, ebi); /* Stop T3495 timer if running */ rc = esm_ebr_stop_timer(ctx, ebi); @@ -323,243 +308,7 @@ int esm_proc_eps_bearer_context_deactivate_accept(emm_data_context_t *ctx, int e LOG_FUNC_RETURN (pid); } -#endif // NAS_MME -/* - * -------------------------------------------------------------------------- - * EPS bearer context deactivation procedure executed by the UE - * -------------------------------------------------------------------------- - */ -#ifdef NAS_UE -/**************************************************************************** - ** ** - ** Name: esm_proc_eps_bearer_context_deactivate() ** - ** ** - ** Description: Locally releases the EPS bearer context identified by the ** - ** given EPS bearer identity, without peer-to-peer signal- ** - ** ling between the UE and the MME, or checks whether the UE ** - ** has an EPS bearer context with specified EPS bearer iden- ** - ** tity activated. ** - ** ** - ** Inputs: is local: TRUE if the EPS bearer context has to be ** - ** locally released without peer-to-peer si- ** - ** gnalling between the UE and the MME ** - ** ebi: EPS bearer identity of the EPS bearer con- ** - ** text to be deactivated ** - ** Others: _esm_data ** - ** ** - ** Outputs: pid: Identifier of the PDN connection the EPS ** - ** bearer belongs to ** - ** bid: Identifier of the released EPS bearer con- ** - ** text entry ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -int esm_proc_eps_bearer_context_deactivate(int is_local, int ebi, - int *pid, int *bid) -{ - LOG_FUNC_IN; - - int rc = RETURNerror; - int i; - - if (is_local) { - if (ebi != ESM_SAP_ALL_EBI) { - /* Locally release the EPS bearer context */ - rc = _eps_bearer_release(ebi, pid, bid); - } else { - /* Locally release all the EPS bearer contexts */ - *bid = 0; - - for (*pid = 0; *pid < ESM_DATA_PDN_MAX; (*pid)++) { - if (_esm_data.pdn[*pid].data) { - rc = _eps_bearer_release(ESM_EBI_UNASSIGNED, pid, bid); - - if (rc != RETURNok) { - break; - } - } - } - } - - LOG_FUNC_RETURN (rc); - } - - LOG_TRACE(WARNING, "ESM-PROC - EPS bearer context deactivation (ebi=%d)", - ebi); - - if (*pid < ESM_DATA_PDN_MAX) { - if (_esm_data.pdn[*pid].pid != *pid) { - LOG_TRACE(ERROR, "ESM-PROC - PDN connection identifier %d " - "is not valid", *pid); - } else if (_esm_data.pdn[*pid].data == NULL) { - LOG_TRACE(ERROR, "ESM-PROC - PDN connection %d has not been " - "allocated", *pid); - } else if (!_esm_data.pdn[*pid].is_active) { - LOG_TRACE(WARNING, "ESM-PROC - PDN connection %d is not active", - *pid); - } else { - esm_pdn_t *pdn = _esm_data.pdn[*pid].data; - - for (i = 0; i < pdn->n_bearers; i++) { - if (pdn->bearer[i]->ebi != ebi) { - continue; - } - - /* The EPS bearer context to be released is valid */ - rc = RETURNok; - } - } - } - - LOG_FUNC_RETURN (rc); -} - -/**************************************************************************** - ** ** - ** Name: esm_proc_eps_bearer_context_deactivate_request() ** - ** ** - ** Description: Deletes the EPS bearer context identified by the EPS bea- ** - ** rer identity upon receipt of the DEACTIVATE EPS BEARER ** - ** CONTEXT REQUEST message. ** - ** ** - ** Inputs: ebi: EPS bearer identity ** - ** Others: None ** - ** ** - ** Outputs: esm_cause: Cause code returned upon ESM procedure ** - ** failure ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -int esm_proc_eps_bearer_context_deactivate_request(int ebi, int *esm_cause) -{ - LOG_FUNC_IN; - - int pid, bid; - int rc = RETURNok; - - LOG_TRACE(INFO, "ESM-PROC - EPS bearer context deactivation " - "requested by the network (ebi=%d)", ebi); - - /* Release the EPS bearer context entry */ - if (esm_ebr_context_release(ebi, &pid, &bid) == ESM_EBI_UNASSIGNED) { - LOG_TRACE(WARNING, "ESM-PROC - Failed to release EPS bearer context"); - *esm_cause = ESM_CAUSE_PROTOCOL_ERROR; - LOG_FUNC_RETURN (RETURNerror); - } - - if (bid == 0) { - /* The EPS bearer identity is that of the default bearer assigned to - * the PDN connection */ - if (*esm_cause == ESM_CAUSE_REACTIVATION_REQUESTED) { - esm_sap_t esm_sap; - int active = FALSE; - - /* 3GPP TS 24.301, section 6.4.4.3 - * The UE should re-initiate the UE requested PDN connectivity - * procedure for the APN associated to the PDN it was connected - * to in order to reactivate the EPS bearer context - */ - LOG_TRACE(WARNING, "ESM-PROC - The network requests PDN " - "connection reactivation"); - - /* Get PDN context parameters */ - rc = esm_main_get_pdn(pid + 1, &esm_sap.data.pdn_connect.pdn_type, - &esm_sap.data.pdn_connect.apn, - &esm_sap.data.pdn_connect.is_emergency, - &active); - - if (rc != RETURNerror) { - if (active) { - LOG_TRACE(ERROR, "ESM-PROC - Connectivity to APN %s " - "has not been deactivated", - esm_sap.data.pdn_connect.apn); - *esm_cause = ESM_CAUSE_REQUEST_REJECTED_UNSPECIFIED; - LOG_FUNC_RETURN (RETURNerror); - } - - /* - * Notify ESM to re-initiate PDN connectivity procedure - */ - esm_sap.primitive = ESM_PDN_CONNECTIVITY_REQ; - esm_sap.is_standalone = TRUE; - esm_sap.data.pdn_connect.is_defined = TRUE; - esm_sap.data.pdn_connect.cid = pid + 1; - rc = esm_sap_send(&esm_sap); - } - } - } - - LOG_FUNC_RETURN (rc); -} - -/**************************************************************************** - ** ** - ** Name: esm_proc_eps_bearer_context_deactivate_accept() ** - ** ** - ** Description: Performs EPS bearer context deactivation procedure accep- ** - ** ted by the UE. ** - ** ** - ** 3GPP TS 24.301, section 6.4.4.3 ** - ** The UE accepts EPS bearer context deactivation by sending ** - ** DEACTIVATE EPS BEARER CONTEXT ACCEPT message and entering ** - ** the state BEARER CONTEXT INACTIVE. ** - ** ** - ** Inputs: is_standalone: Should be always TRUE ** - ** ebi: EPS bearer identity ** - ** msg: Encoded ESM message to be sent ** - ** ue_triggered: TRUE if the EPS bearer context procedure ** - ** was triggered by the UE ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -int esm_proc_eps_bearer_context_deactivate_accept(int is_standalone, int ebi, - OctetString *msg, int ue_triggered) -{ - LOG_FUNC_IN; - - int rc = RETURNok; - - LOG_TRACE(INFO,"ESM-PROC - EPS bearer context deactivation accepted"); - - if (is_standalone) { - emm_sap_t emm_sap; - /* - * Notity EMM that ESM PDU has to be forwarded to lower layers - */ - emm_sap.primitive = EMMESM_UNITDATA_REQ; - emm_sap.u.emm_esm.ueid = 0; - emm_sap.u.emm_esm.u.data.msg.length = msg->length; - emm_sap.u.emm_esm.u.data.msg.value = msg->value; - rc = emm_sap_send(&emm_sap); - } - - if (rc != RETURNerror) { - /* Set the EPS bearer context state to INACTIVE */ - rc = esm_ebr_set_status(ebi, ESM_EBR_INACTIVE, ue_triggered); - - if (rc != RETURNok) { - /* The EPS bearer context was already in INACTIVE state */ - LOG_TRACE(WARNING, "ESM-PROC - EBI %d was already INACTIVE", ebi); - /* Accept network retransmission of already accepted deactivate - * EPS bearer context request */ - LOG_FUNC_RETURN (RETURNok); - } - - /* Release EPS bearer data */ - rc = esm_ebr_release(ebi); - } - - LOG_FUNC_RETURN (rc); -} - -#endif // NAS_UE /****************************************************************************/ /********************* L O C A L F U N C T I O N S *********************/ @@ -570,7 +319,6 @@ int esm_proc_eps_bearer_context_deactivate_accept(int is_standalone, int ebi, * Timer handlers * -------------------------------------------------------------------------- */ -#ifdef NAS_MME /**************************************************************************** ** ** ** Name: _eps_bearer_deactivate_t3495_handler() ** @@ -605,7 +353,7 @@ static void *_eps_bearer_deactivate_t3495_handler(void *args) /* Increment the retransmission counter */ data->count += 1; - LOG_TRACE(WARNING, "ESM-PROC - T3495 timer expired (ueid=%d, ebi=%d), " + LOG_TRACE(WARNING, "ESM-PROC - T3495 timer expired (ueid="NAS_UE_ID_FMT", ebi=%d), " "retransmission counter = %d", data->ueid, data->ebi, data->count); @@ -630,7 +378,6 @@ static void *_eps_bearer_deactivate_t3495_handler(void *args) LOG_FUNC_RETURN (NULL); } -#endif // NAS_MME /* * -------------------------------------------------------------------------- @@ -638,7 +385,6 @@ static void *_eps_bearer_deactivate_t3495_handler(void *args) * -------------------------------------------------------------------------- */ -#ifdef NAS_MME /**************************************************************************** ** ** ** Name: _eps_bearer_deactivate() ** @@ -734,62 +480,4 @@ static int _eps_bearer_release(emm_data_context_t *ctx, int ebi, int *pid, int * LOG_FUNC_RETURN (rc); } -#endif // NAS_MME -/* - * -------------------------------------------------------------------------- - * UE specific local functions - * -------------------------------------------------------------------------- - */ - -#ifdef NAS_UE -/**************************************************************************** - ** ** - ** Name: _eps_bearer_release() ** - ** ** - ** Description: Releases the EPS bearer context identified by the given ** - ** EPS bearer identity and enters state INACTIVE. ** - ** ** - ** Inputs: ebi: EPS bearer identity ** - ** Others: None ** - ** ** - ** Outputs: pid: Identifier of the PDN connection the EPS ** - ** bearer belongs to ** - ** bid: Identifier of the released EPS bearer con- ** - ** text entry ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -static int _eps_bearer_release(int ebi, int *pid, int *bid) -{ - LOG_FUNC_IN; - - int rc = RETURNerror; - - /* Release the EPS bearer context entry */ - ebi = esm_ebr_context_release(ebi, pid, bid); - - if (ebi == ESM_EBI_UNASSIGNED) { - LOG_TRACE(WARNING, "ESM-PROC - Failed to release EPS bearer context"); - } else { - /* Set the EPS bearer context state to INACTIVE */ - rc = esm_ebr_set_status(ebi, ESM_EBR_INACTIVE, FALSE); - - if (rc != RETURNok) { - /* The EPS bearer context was already in INACTIVE state */ - LOG_TRACE(WARNING, "ESM-PROC - EBI %d was already INACTIVE", ebi); - } else { - /* Release EPS bearer data */ - rc = esm_ebr_release(ebi); - - if (rc != RETURNok) { - LOG_TRACE(WARNING, - "ESM-PROC - Failed to release EPS bearer data"); - } - } - } - - LOG_FUNC_RETURN (rc); -} -#endif // NAS_UE diff --git a/openair-cn/NAS/EURECOM-NAS/src/esm/EsmStatusHdl.c b/openair-cn/NAS/MME/ESM/EsmStatusHdl.c similarity index 98% rename from openair-cn/NAS/EURECOM-NAS/src/esm/EsmStatusHdl.c rename to openair-cn/NAS/MME/ESM/EsmStatusHdl.c index d01020f395..6edada9f0c 100644 --- a/openair-cn/NAS/EURECOM-NAS/src/esm/EsmStatusHdl.c +++ b/openair-cn/NAS/MME/ESM/EsmStatusHdl.c @@ -97,9 +97,7 @@ Description Defines the ESM status procedure executed by the Non-Access ** ** ***************************************************************************/ int esm_proc_status_ind( -#ifdef NAS_MME emm_data_context_t *ctx, -#endif int pti, int ebi, int *esm_cause) { LOG_FUNC_IN; @@ -172,9 +170,7 @@ int esm_proc_status_ind( ** ** ***************************************************************************/ int esm_proc_status(int is_standalone, -#ifdef NAS_MME emm_data_context_t *ctx, -#endif int ebi, OctetString *msg, int ue_triggered) { @@ -189,13 +185,8 @@ int esm_proc_status(int is_standalone, * Notity EMM that ESM PDU has to be forwarded to lower layers */ emm_sap.primitive = EMMESM_UNITDATA_REQ; -#ifdef NAS_UE - emm_sap.u.emm_esm.ueid = 0; -#endif -#ifdef NAS_MME emm_sap.u.emm_esm.ueid = ctx->ueid; emm_sap.u.emm_esm.ctx = ctx; -#endif emm_sap.u.emm_esm.u.data.msg.length = msg->length; emm_sap.u.emm_esm.u.data.msg.value = msg->value; rc = emm_sap_send(&emm_sap); diff --git a/openair-cn/NAS/EURECOM-NAS/src/esm/Makefile b/openair-cn/NAS/MME/ESM/Makefile similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/esm/Makefile rename to openair-cn/NAS/MME/ESM/Makefile diff --git a/openair-cn/NAS/MME/ESM/PdnConnectivity.c b/openair-cn/NAS/MME/ESM/PdnConnectivity.c new file mode 100644 index 0000000000..e2eda77bed --- /dev/null +++ b/openair-cn/NAS/MME/ESM/PdnConnectivity.c @@ -0,0 +1,556 @@ +/******************************************************************************* + OpenAirInterface + Copyright(c) 1999 - 2014 Eurecom + + OpenAirInterface is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + + OpenAirInterface is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with OpenAirInterface.The full GNU General Public License is + included in this distribution in the file called "COPYING". If not, + see . + + Contact Information + OpenAirInterface Admin: openair_admin@eurecom.fr + OpenAirInterface Tech : openair_tech@eurecom.fr + OpenAirInterface Dev : openair4g-devel@eurecom.fr + + Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. + + *******************************************************************************/ +/***************************************************************************** +Source PdnConnectivity.c + +Version 0.1 + +Date 2013/01/02 + +Product NAS stack + +Subsystem EPS Session Management + +Author Frederic Maurel + +Description Defines the PDN connectivity ESM procedure executed by the + Non-Access Stratum. + + The PDN connectivity procedure is used by the UE to request + the setup of a default EPS bearer to a PDN. + + The procedure is used either to establish the 1st default + bearer by including the PDN CONNECTIVITY REQUEST message + into the initial attach message, or to establish subsequent + default bearers to additional PDNs in order to allow the UE + simultaneous access to multiple PDNs by sending the message + stand-alone. + +*****************************************************************************/ + +#include // malloc, free +#include // memset, memcpy, memcmp +#include // isprint + +#include "esm_proc.h" +#include "commonDef.h" +#include "nas_log.h" + +#include "esmData.h" +#include "esm_cause.h" +#include "esm_pt.h" + +# include "mme_api.h" + +#include "emm_sap.h" + +#if defined(ENABLE_ITTI) +# include "assertions.h" +#endif + +/****************************************************************************/ +/**************** E X T E R N A L D E F I N I T I O N S ****************/ +/****************************************************************************/ + +/****************************************************************************/ +/******************* L O C A L D E F I N I T I O N S *******************/ +/****************************************************************************/ + + + +/* + * -------------------------------------------------------------------------- + * Internal data handled by the PDN connectivity procedure in the MME + * -------------------------------------------------------------------------- + */ +/* + * PDN connection handlers + */ +static int _pdn_connectivity_create(emm_data_context_t *ctx, + int pti, + const OctetString *apn, + esm_proc_pdn_type_t pdn_type, + const OctetString *pdn_addr, + int is_emergency); +int _pdn_connectivity_delete(emm_data_context_t *ctx, int pid); + + +/****************************************************************************/ +/****************** E X P O R T E D F U N C T I O N S ******************/ +/****************************************************************************/ + + +/* + * -------------------------------------------------------------------------- + * PDN connectivity procedure executed by the MME + * -------------------------------------------------------------------------- + */ +/**************************************************************************** + ** ** + ** Name: esm_proc_pdn_connectivity_request() ** + ** ** + ** Description: Performs PDN connectivity procedure requested by the UE. ** + ** ** + ** 3GPP TS 24.301, section 6.5.1.3 ** + ** Upon receipt of the PDN CONNECTIVITY REQUEST message, the ** + ** MME checks if connectivity with the requested PDN can be ** + ** established. If no requested APN is provided the MME ** + ** shall use the default APN as the requested APN if the ** + ** request type is different from "emergency", or the APN ** + ** configured for emergency bearer services if the request ** + ** type is "emergency". ** + ** If connectivity with the requested PDN is accepted by the ** + ** network, the MME shall initiate the default EPS bearer ** + ** context activation procedure. ** + ** ** + ** Inputs: ueid: UE local identifier ** + ** pti: Identifies the PDN connectivity procedure ** + ** requested by the UE ** + ** request_type: Type of the PDN request ** + ** pdn_type: PDN type value (IPv4, IPv6, IPv4v6) ** + ** apn: Requested Access Point Name ** + ** Others: _esm_data ** + ** ** + ** Outputs: apn: Default Access Point Name ** + ** pdn_addr: Assigned IPv4 address and/or IPv6 suffix ** + ** esm_qos: EPS bearer level QoS parameters ** + ** esm_cause: Cause code returned upon ESM procedure ** + ** failure ** + ** Return: The identifier of the PDN connection if ** + ** successfully created; ** + ** RETURNerror otherwise. ** + ** Others: _esm_data ** + ** ** + ***************************************************************************/ +int esm_proc_pdn_connectivity_request(emm_data_context_t *ctx, int pti, + esm_proc_pdn_request_t request_type, + OctetString *apn, + esm_proc_pdn_type_t pdn_type, + OctetString *pdn_addr, + esm_proc_qos_t *esm_qos, + int *esm_cause) +{ + int rc = RETURNerror; + int pid = RETURNerror; + + LOG_FUNC_IN; + + LOG_TRACE(INFO, "ESM-PROC - PDN connectivity requested by the UE " + "(ueid="NAS_UE_ID_FMT", pti=%d) PDN type = %s, APN = %s pdn addr = %s", ctx->ueid, pti, + (pdn_type == ESM_PDN_TYPE_IPV4)? "IPv4" : + (pdn_type == ESM_PDN_TYPE_IPV6)? "IPv6" : "IPv4v6", + (apn) ? (char *)(apn->value) : "null", + (pdn_addr) ? (char *)(pdn_addr->value) : "null"); + +#if !defined(NAS_BUILT_IN_EPC) + + /* UE identifier sanity check */ + if (ctx->ueid >= ESM_DATA_NB_UE_MAX) { + LOG_TRACE(WARNING, "ESM-PROC - Number of connected UEs exceeded"); + LOG_FUNC_RETURN (RETURNerror); + } + +#endif + + /* + * Check network IP capabilities + */ + *esm_cause = ESM_CAUSE_SUCCESS; + LOG_TRACE(INFO, "ESM-PROC - _esm_data.conf.features %08x", _esm_data.conf.features); +#warning "Uncomment code about _esm_data.conf.features & (MME_API_IPV4 | MME_API_IPV6) later" +#if defined(ORIGINAL_CODE) + + switch (_esm_data.conf.features & (MME_API_IPV4 | MME_API_IPV6)) { + case (MME_API_IPV4 | MME_API_IPV6): + + /* The network supports both IPv4 and IPv6 connection */ + if ( (pdn_type == ESM_PDN_TYPE_IPV4V6) && + (_esm_data.conf.features & MME_API_SINGLE_ADDR_BEARERS) ) { + /* The network supports single IP version bearers only */ + *esm_cause = ESM_CAUSE_SINGLE_ADDRESS_BEARERS_ONLY_ALLOWED; + } + + rc = RETURNok; + break; + + case MME_API_IPV6: + /* The network supports connection to IPv6 only */ + *esm_cause = ESM_CAUSE_PDN_TYPE_IPV6_ONLY_ALLOWED; + + if (pdn_type != ESM_PDN_TYPE_IPV4) { + rc = RETURNok; + } + + break; + + case MME_API_IPV4: + /* The network supports connection to IPv4 only */ + *esm_cause = ESM_CAUSE_PDN_TYPE_IPV4_ONLY_ALLOWED; + + if (pdn_type != ESM_PDN_TYPE_IPV6) { + rc = RETURNok; + } + + break; + + default: + LOG_TRACE(ERROR, + "ESM-PROC - _esm_data.conf.features incorrect value (no IPV4 or IPV6 ) %X", + _esm_data.conf.features); + } + +#else + rc = RETURNok; +#endif + + if (rc != RETURNerror) { + int is_emergency = (request_type == ESM_PDN_REQUEST_EMERGENCY); +#if defined(ORIGINAL_CODE) + mme_api_ip_version_t mme_pdn_index; + mme_api_qos_t qos; + + switch (pdn_type) { + case ESM_PDN_TYPE_IPV4: + mme_pdn_index = MME_API_IPV4_ADDR; + break; + + case ESM_PDN_TYPE_IPV6: + mme_pdn_index = MME_API_IPV6_ADDR; + break; + + case ESM_PDN_TYPE_IPV4V6: + default: + mme_pdn_index = MME_API_IPV4V6_ADDR; + break; + } + + /* Check if connectivity with the requested PDN can be established */ + rc = mme_api_subscribe(apn, mme_pdn_index, pdn_addr, is_emergency, &qos); + + if (rc != RETURNok) { + LOG_TRACE(WARNING, "ESM-PROC - Connectivity to the requested PDN " + "cannot be established"); + *esm_cause = ESM_CAUSE_REQUEST_REJECTED_UNSPECIFIED; + LOG_FUNC_RETURN (RETURNerror); + } + +#endif + + /* Create new PDN connection */ + pid = _pdn_connectivity_create(ctx, pti, apn, pdn_type, + pdn_addr, is_emergency); +#if defined(ORIGINAL_CODE) + + /* Setup ESM QoS parameters */ + if (esm_qos) { + esm_qos->gbrUL = qos.gbr[MME_API_UPLINK]; + esm_qos->gbrDL = qos.gbr[MME_API_DOWNLINK]; + esm_qos->mbrUL = qos.mbr[MME_API_UPLINK]; + esm_qos->mbrDL = qos.mbr[MME_API_DOWNLINK]; + esm_qos->qci = qos.qci; + } + +#endif + + if (pid < 0) { + LOG_TRACE(WARNING, "ESM-PROC - Failed to create PDN connection"); + *esm_cause = ESM_CAUSE_INSUFFICIENT_RESOURCES; + LOG_FUNC_RETURN(RETURNerror); + } + } + + LOG_FUNC_RETURN(pid); +} + +/**************************************************************************** + ** ** + ** Name: esm_proc_pdn_connectivity_reject() ** + ** ** + ** Description: Performs PDN connectivity procedure not accepted by the ** + ** network. ** + ** ** + ** 3GPP TS 24.301, section 6.5.1.4 ** + ** If connectivity with the requested PDN cannot be accepted ** + ** by the network, the MME shall send a PDN CONNECTIVITY RE- ** + ** JECT message to the UE. ** + ** ** + ** Inputs: is_standalone: Indicates whether the PDN connectivity ** + ** procedure was initiated as part of the at- ** + ** tach procedure ** + ** ueid: UE lower layer identifier ** + ** ebi: Not used ** + ** msg: Encoded PDN connectivity reject message to ** + ** be sent ** + ** ue_triggered: Not used ** + ** Others: None ** + ** ** + ** Outputs: None ** + ** Return: RETURNok, RETURNerror ** + ** Others: None ** + ** ** + ***************************************************************************/ +int esm_proc_pdn_connectivity_reject(int is_standalone, emm_data_context_t *ctx, + int ebi, OctetString *msg, int ue_triggered) +{ + LOG_FUNC_IN; + + int rc = RETURNerror; + + LOG_TRACE(WARNING, "ESM-PROC - PDN connectivity not accepted by the " + "network (ueid="NAS_UE_ID_FMT")", ctx->ueid); + + if (is_standalone) { + emm_sap_t emm_sap; + /* + * Notity EMM that ESM PDU has to be forwarded to lower layers + */ + emm_sap.primitive = EMMESM_UNITDATA_REQ; + emm_sap.u.emm_esm.ctx = ctx; + emm_sap.u.emm_esm.u.data.msg.length = msg->length; + emm_sap.u.emm_esm.u.data.msg.value = msg->value; + rc = emm_sap_send(&emm_sap); + } + + /* If the PDN connectivity procedure initiated as part of the initial + * attach procedure has failed, an error is returned to notify EMM that + * the ESM sublayer did not accept UE requested PDN connectivity */ + LOG_FUNC_RETURN (rc); +} + +/**************************************************************************** + ** ** + ** Name: esm_proc_pdn_connectivity_failure() ** + ** ** + ** Description: Performs PDN connectivity procedure upon receiving noti- ** + ** fication from the EPS Mobility Management sublayer that ** + ** EMM procedure that initiated PDN connectivity activation ** + ** locally failed. ** + ** ** + ** The MME releases the PDN connection entry allocated when ** + ** the PDN connectivity procedure was requested by the UE. ** + ** ** + ** Inputs: ueid: UE local identifier ** + ** pid: Identifier of the PDN connection to be ** + ** released ** + ** Others: None ** + ** ** + ** Outputs: None ** + ** Return: RETURNok, RETURNerror ** + ** Others: None ** + ** ** + ***************************************************************************/ +int esm_proc_pdn_connectivity_failure(emm_data_context_t *ctx, int pid) +{ + int pti; + + LOG_FUNC_IN; + + LOG_TRACE(WARNING, "ESM-PROC - PDN connectivity failure (ueid="NAS_UE_ID_FMT", pid=%d)", + ctx->ueid, pid); + + /* Delete the PDN connection entry */ + pti = _pdn_connectivity_delete(ctx, pid); + + if (pti != ESM_PT_UNASSIGNED) { + LOG_FUNC_RETURN (RETURNok); + } + + LOG_FUNC_RETURN (RETURNerror); +} + +/****************************************************************************/ +/********************* L O C A L F U N C T I O N S *********************/ +/****************************************************************************/ + + +/* + *--------------------------------------------------------------------------- + * PDN connection handlers + *--------------------------------------------------------------------------- + */ +/**************************************************************************** + ** ** + ** Name: _pdn_connectivity_create() ** + ** ** + ** Description: Creates a new PDN connection entry for the specified UE ** + ** ** + ** Inputs: ueid: UE local identifier ** + ** ctx: UE context ** + ** pti: Procedure transaction identity ** + ** apn: Access Point Name of the PDN connection ** + ** pdn_type: PDN type (IPv4, IPv6, IPv4v6) ** + ** pdn_addr: Network allocated PDN IPv4 or IPv6 address ** + ** is_emergency: TRUE if the PDN connection has to be esta- ** + ** blished for emergency bearer services ** + ** Others: _esm_data ** + ** ** + ** Outputs: None ** + ** Return: The identifier of the PDN connection if ** + ** successfully created; -1 otherwise. ** + ** Others: _esm_data ** + ** ** + ***************************************************************************/ +static int _pdn_connectivity_create(emm_data_context_t *ctx, + int pti, + const OctetString *apn, + esm_proc_pdn_type_t pdn_type, + const OctetString *pdn_addr, + int is_emergency) +{ + int pid = ESM_DATA_PDN_MAX; + + LOG_TRACE(INFO, "ESM-PROC - Create new PDN connection " + "(pti=%d) APN = %s, IP address = %s (ueid="NAS_UE_ID_FMT")", pti, apn->value, + (pdn_type == ESM_PDN_TYPE_IPV4)? esm_data_get_ipv4_addr(pdn_addr) : + (pdn_type == ESM_PDN_TYPE_IPV6)? esm_data_get_ipv6_addr(pdn_addr) : + esm_data_get_ipv4v6_addr(pdn_addr), ctx->ueid); + + /* Search for an available PDN connection entry */ + for (pid = 0; pid < ESM_DATA_PDN_MAX; pid++) { + if (ctx->esm_data_ctx.pdn[pid].data != NULL) { + continue; + } + + break; + } + + if (pid < ESM_DATA_PDN_MAX) { + /* Create new PDN connection */ + esm_pdn_t *pdn = (esm_pdn_t *)malloc(sizeof(esm_pdn_t)); + + if (pdn != NULL) { + memset(pdn, 0, sizeof(esm_pdn_t)); + /* Increment the number of PDN connections */ + ctx->esm_data_ctx.n_pdns += 1; + /* Set the PDN connection identifier */ + ctx->esm_data_ctx.pdn[pid].pid = pid; + /* Reset the PDN connection active indicator */ + ctx->esm_data_ctx.pdn[pid].is_active = FALSE; + /* Setup the PDN connection data */ + ctx->esm_data_ctx.pdn[pid].data = pdn; + + /* Set the procedure transaction identity */ + pdn->pti = pti; + /* Set the emergency bearer services indicator */ + pdn->is_emergency = is_emergency; + + /* Setup the Access Point Name */ + if ( apn && (apn->length > 0) ) { + pdn->apn.value = (uint8_t *)malloc(apn->length + 1); + + if (pdn->apn.value) { + pdn->apn.length = apn->length; + memcpy(pdn->apn.value, apn->value, apn->length); + pdn->apn.value[pdn->apn.length] = '\0'; + } + } + + /* Setup the IP address allocated by the network */ + if ( pdn_addr && (pdn_addr->length > 0) ) { + int length = + ((pdn_addr->length < ESM_DATA_IP_ADDRESS_SIZE) ? + pdn_addr->length : ESM_DATA_IP_ADDRESS_SIZE); + memcpy(pdn->ip_addr, pdn_addr->value, length); + pdn->type = pdn_type; + } + + /* Return the identifier of the new PDN connection */ + return (ctx->esm_data_ctx.pdn[pid].pid); + } + + LOG_TRACE(WARNING, "ESM-PROC - Failed to create new PDN connection " + "(pid=%d)", pid); + } + + return (-1); +} + +/**************************************************************************** + ** ** + ** Name: _pdn_connectivity_delete() ** + ** ** + ** Description: Deletes PDN connection to the specified UE associated to ** + ** PDN connection entry with given identifier ** + ** ** + ** Inputs: ueid: UE local identifier ** + ** pid: Identifier of the PDN connection to be ** + ** released ** + ** Others: _esm_data ** + ** ** + ** Outputs: None ** + ** Return: The identity of the procedure transaction ** + ** assigned to the PDN connection when suc- ** + ** cessfully released; ** + ** UNASSIGNED value otherwise. ** + ** Others: _esm_data ** + ** ** + ***************************************************************************/ +int _pdn_connectivity_delete(emm_data_context_t *ctx, int pid) +{ + int pti = ESM_PT_UNASSIGNED; + + if (ctx == NULL) { + return pti; + } + + if (pid < ESM_DATA_PDN_MAX) { + if (pid != ctx->esm_data_ctx.pdn[pid].pid) { + LOG_TRACE(ERROR, + "ESM-PROC - PDN connection identifier is not valid"); + } else if (ctx->esm_data_ctx.pdn[pid].data == NULL) { + LOG_TRACE(ERROR, + "ESM-PROC - PDN connection has not been allocated"); + } else if (ctx->esm_data_ctx.pdn[pid].is_active) { + LOG_TRACE(ERROR, "ESM-PROC - PDN connection is active"); + } else { + /* Get the identity of the procedure transaction that created + * the PDN connection */ + pti = ctx->esm_data_ctx.pdn[pid].data->pti; + } + } + + if (pti != ESM_PT_UNASSIGNED) { + /* Decrement the number of PDN connections */ + ctx->esm_data_ctx.n_pdns -= 1; + /* Set the PDN connection as available */ + ctx->esm_data_ctx.pdn[pid].pid = -1; + + /* Release allocated PDN connection data */ + if (ctx->esm_data_ctx.pdn[pid].data->apn.length > 0) { + free(ctx->esm_data_ctx.pdn[pid].data->apn.value); + } + + free(ctx->esm_data_ctx.pdn[pid].data); + ctx->esm_data_ctx.pdn[pid].data = NULL; + LOG_TRACE(WARNING, "ESM-PROC - PDN connection %d released", pid); + } + + /* Return the procedure transaction identity */ + return (pti); +} diff --git a/openair-cn/NAS/MME/ESM/PdnDisconnect.c b/openair-cn/NAS/MME/ESM/PdnDisconnect.c new file mode 100644 index 0000000000..9dfcbd66fb --- /dev/null +++ b/openair-cn/NAS/MME/ESM/PdnDisconnect.c @@ -0,0 +1,299 @@ +/******************************************************************************* + OpenAirInterface + Copyright(c) 1999 - 2014 Eurecom + + OpenAirInterface is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + + OpenAirInterface is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with OpenAirInterface.The full GNU General Public License is + included in this distribution in the file called "COPYING". If not, + see . + + Contact Information + OpenAirInterface Admin: openair_admin@eurecom.fr + OpenAirInterface Tech : openair_tech@eurecom.fr + OpenAirInterface Dev : openair4g-devel@eurecom.fr + + Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. + + *******************************************************************************/ +/***************************************************************************** +Source PdnDisconnect.c + +Version 0.1 + +Date 2013/05/15 + +Product NAS stack + +Subsystem EPS Session Management + +Author Frederic Maurel + +Description Defines the PDN disconnect ESM procedure executed by the + Non-Access Stratum. + + The PDN disconnect procedure is used by the UE to request + disconnection from one PDN. + + All EPS bearer contexts established towards this PDN, inclu- + ding the default EPS bearer context, are released. + +*****************************************************************************/ + +#include "esm_proc.h" +#include "commonDef.h" +#include "nas_log.h" + +#include "esmData.h" +#include "esm_cause.h" +#include "esm_pt.h" +#include "emm_sap.h" + +/****************************************************************************/ +/**************** E X T E R N A L D E F I N I T I O N S ****************/ +/****************************************************************************/ + +extern int _pdn_connectivity_delete(emm_data_context_t *ctx, int pid); + +/****************************************************************************/ +/******************* L O C A L D E F I N I T I O N S *******************/ +/****************************************************************************/ + + +/* + * -------------------------------------------------------------------------- + * Internal data handled by the PDN disconnect procedure in the MME + * -------------------------------------------------------------------------- + */ +/* + * PDN disconnection handlers + */ +static int _pdn_disconnect_get_pid(esm_data_context_t *ctx, int pti); + + +/****************************************************************************/ +/****************** E X P O R T E D F U N C T I O N S ******************/ +/****************************************************************************/ + + + +/* + * -------------------------------------------------------------------------- + * PDN disconnect procedure executed by the MME + * -------------------------------------------------------------------------- + */ +/**************************************************************************** + ** ** + ** Name: esm_proc_pdn_disconnect_request() ** + ** ** + ** Description: Performs PDN disconnect procedure requested by the UE. ** + ** ** + ** 3GPP TS 24.301, section 6.5.2.3 ** + ** Upon receipt of the PDN DISCONNECT REQUEST message, if it ** + ** is accepted by the network, the MME shall initiate the ** + ** bearer context deactivation procedure. ** + ** ** + ** Inputs: ueid: UE lower layer identifier ** + ** pti: Identifies the PDN disconnect procedure ** + ** requested by the UE ** + ** Others: _esm_data ** + ** ** + ** Outputs: esm_cause: Cause code returned upon ESM procedure ** + ** failure ** + ** Return: The identifier of the PDN connection to be ** + ** released, if it exists; ** + ** RETURNerror otherwise. ** + ** Others: None ** + ** ** + ***************************************************************************/ +int esm_proc_pdn_disconnect_request(emm_data_context_t *ctx, int pti, int *esm_cause) +{ + int pid = RETURNerror; + + LOG_FUNC_IN; + + LOG_TRACE(INFO, "ESM-PROC - PDN disconnect requested by the UE " + "(ueid="NAS_UE_ID_FMT", pti=%d)", ctx->ueid, pti); + + /* Get UE's ESM context */ + if (ctx->esm_data_ctx.n_pdns > 1) { + /* Get the identifier of the PDN connection entry assigned to the + * procedure transaction identity */ + pid = _pdn_disconnect_get_pid(&ctx->esm_data_ctx, pti); + + if (pid < 0) { + LOG_TRACE(ERROR, "ESM-PROC - No PDN connection found (pti=%d)", + pti); + *esm_cause = ESM_CAUSE_PROTOCOL_ERROR; + LOG_FUNC_RETURN (RETURNerror); + } + } else { + /* Attempt to disconnect from the last PDN disconnection + * is not allowed */ + *esm_cause = ESM_CAUSE_LAST_PDN_DISCONNECTION_NOT_ALLOWED; + } + + LOG_FUNC_RETURN(pid); +} + +/**************************************************************************** + ** ** + ** Name: esm_proc_pdn_disconnect_accept() ** + ** ** + ** Description: Performs PDN disconnect procedure accepted by the UE. ** + ** ** + ** 3GPP TS 24.301, section 6.5.2.3 ** + ** On reception of DEACTIVATE EPS BEARER CONTEXT ACCEPT mes- ** + ** sage from the UE, the MME releases all the resources re- ** + ** served for the PDN in the network. ** + ** ** + ** Inputs: ueid: UE lower layer identifier ** + ** pid: Identifier of the PDN connection to be ** + ** released ** + ** Others: _esm_data ** + ** ** + ** Outputs: esm_cause: Cause code returned upon ESM procedure ** + ** failure ** + ** Return: RETURNok, RETURNerror ** + ** Others: None ** + ** ** + ***************************************************************************/ +int esm_proc_pdn_disconnect_accept(emm_data_context_t *ctx, int pid, int *esm_cause) +{ + LOG_FUNC_IN; + + LOG_TRACE(INFO, "ESM-PROC - PDN disconnect accepted by the UE " + "(ueid="NAS_UE_ID_FMT", pid=%d)", ctx->ueid, pid); + + /* Release the connectivity with the requested PDN */ + int rc = mme_api_unsubscribe(NULL); + + if (rc != RETURNerror) { + /* Delete the PDN connection entry */ + int pti = _pdn_connectivity_delete(ctx, pid); + + if (pti != ESM_PT_UNASSIGNED) { + LOG_FUNC_RETURN (RETURNok); + } + } + + *esm_cause = ESM_CAUSE_PROTOCOL_ERROR; + LOG_FUNC_RETURN (RETURNerror); +} + +/**************************************************************************** + ** ** + ** Name: esm_proc_pdn_disconnect_reject() ** + ** ** + ** Description: Performs PDN disconnect procedure not accepted by the ** + ** network. ** + ** ** + ** 3GPP TS 24.301, section 6.5.2.4 ** + ** Upon receipt of the PDN DISCONNECT REQUEST message, if it ** + ** is not accepted by the network, the MME shall send a PDN ** + ** DISCONNECT REJECT message to the UE. ** + ** ** + ** Inputs: is_standalone: Not used - Always TRUE ** + ** ueid: UE lower layer identifier ** + ** ebi: Not used ** + ** msg: Encoded PDN disconnect reject message to ** + ** be sent ** + ** ue_triggered: Not used ** + ** Others: None ** + ** ** + ** Outputs: None ** + ** Return: RETURNok, RETURNerror ** + ** Others: None ** + ** ** + ***************************************************************************/ +int esm_proc_pdn_disconnect_reject(int is_standalone, emm_data_context_t *ctx, + int ebi, OctetString *msg, int ue_triggered) +{ + LOG_FUNC_IN; + + int rc; + emm_sap_t emm_sap; + + LOG_TRACE(WARNING, "ESM-PROC - PDN disconnect not accepted by the network " + "(ueid="NAS_UE_ID_FMT")", ctx->ueid); + + /* + * Notity EMM that ESM PDU has to be forwarded to lower layers + */ + emm_sap.primitive = EMMESM_UNITDATA_REQ; + emm_sap.u.emm_esm.ueid = ctx->ueid; + emm_sap.u.emm_esm.ctx = ctx; + emm_sap.u.emm_esm.u.data.msg.length = msg->length; + emm_sap.u.emm_esm.u.data.msg.value = msg->value; + rc = emm_sap_send(&emm_sap); + + LOG_FUNC_RETURN(rc); +} + +/****************************************************************************/ +/********************* L O C A L F U N C T I O N S *********************/ +/****************************************************************************/ + +/* + * -------------------------------------------------------------------------- + * Timer handlers + * -------------------------------------------------------------------------- + */ + + +/* + *--------------------------------------------------------------------------- + * PDN disconnection handlers + *--------------------------------------------------------------------------- + */ + + +/**************************************************************************** + ** ** + ** Name: _pdn_disconnect_get_pid() ** + ** ** + ** Description: Returns the identifier of the PDN connection to which the ** + ** given procedure transaction identity has been assigned ** + ** to establish connectivity to the specified UE ** + ** ** + ** Inputs: ueid: UE local identifier ** + ** pti: The procedure transaction identity ** + ** Others: _esm_data ** + ** ** + ** Outputs: None ** + ** Return: The identifier of the PDN connection if ** + ** found in the list; -1 otherwise. ** + ** Others: None ** + ** ** + ***************************************************************************/ +static int _pdn_disconnect_get_pid(esm_data_context_t *ctx, int pti) +{ + int i = ESM_DATA_PDN_MAX; + + if (ctx != NULL) { + for (i = 0; i < ESM_DATA_PDN_MAX; i++) { + if ( (ctx->pdn[i].pid != -1) && + (ctx->pdn[i].data != NULL) ) { + if (ctx->pdn[i].data->pti != pti) { + continue; + } + + /* PDN entry found */ + break; + } + } + } + + /* Return the identifier of the PDN connection */ + return (ctx->pdn[i].pid); +} diff --git a/openair-cn/NAS/EURECOM-NAS/src/api/usim/COPYING b/openair-cn/NAS/MME/ESM/SAP/COPYING similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/api/usim/COPYING rename to openair-cn/NAS/MME/ESM/SAP/COPYING diff --git a/openair-cn/NAS/EURECOM-NAS/src/esm/sap/Makefile b/openair-cn/NAS/MME/ESM/SAP/Makefile similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/esm/sap/Makefile rename to openair-cn/NAS/MME/ESM/SAP/Makefile diff --git a/openair-cn/NAS/EURECOM-NAS/src/esm/sap/esm_recv.c b/openair-cn/NAS/MME/ESM/SAP/esm_recv.c similarity index 55% rename from openair-cn/NAS/EURECOM-NAS/src/esm/sap/esm_recv.c rename to openair-cn/NAS/MME/ESM/SAP/esm_recv.c index a3f1b719c7..1114178154 100644 --- a/openair-cn/NAS/EURECOM-NAS/src/esm/sap/esm_recv.c +++ b/openair-cn/NAS/MME/ESM/SAP/esm_recv.c @@ -54,13 +54,8 @@ Description Defines functions executed at the ESM Service Access #include "esm_proc.h" #include "esm_cause.h" -#ifdef NAS_MME #include "nas_itti_messaging.h" -#endif -#ifdef NAS_UE -#include // malloc, free -#include // memset -#endif + /****************************************************************************/ /**************** E X T E R N A L D E F I N I T I O N S ****************/ @@ -97,13 +92,9 @@ Description Defines functions executed at the ESM Service Access ** Others: None ** ** ** ***************************************************************************/ -#ifdef NAS_UE -int esm_recv_status(int pti, int ebi, const esm_status_msg *msg) -#endif -#ifdef NAS_MME + int esm_recv_status(emm_data_context_t *ctx, int pti, int ebi, const esm_status_msg *msg) -#endif { int esm_cause; int rc; @@ -120,12 +111,7 @@ int esm_recv_status(emm_data_context_t *ctx, int pti, int ebi, esm_cause = msg->esmcause; /* Execute the ESM status procedure */ -#ifdef NAS_UE - rc = esm_proc_status_ind(pti, ebi, &esm_cause); -#endif -#ifdef NAS_MME rc = esm_proc_status_ind(ctx, pti, ebi, &esm_cause); -#endif if (rc != RETURNerror) { esm_cause = ESM_CAUSE_SUCCESS; @@ -135,582 +121,12 @@ int esm_recv_status(emm_data_context_t *ctx, int pti, int ebi, LOG_FUNC_RETURN (esm_cause); } -/* - * -------------------------------------------------------------------------- - * Functions executed by the UE upon receiving ESM message from the network - * -------------------------------------------------------------------------- - */ -#ifdef NAS_UE -/**************************************************************************** - ** ** - ** Name: esm_recv_pdn_connectivity_reject() ** - ** ** - ** Description: Processes PDN Connectivity Reject message ** - ** ** - ** Inputs: pti: Procedure transaction identity ** - ** ebi: EPS bearer identity ** - ** msg: The received ESM message ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: ESM cause code whenever the processing of ** - ** the ESM message fails ** - ** Others: None ** - ** ** - ***************************************************************************/ -int esm_recv_pdn_connectivity_reject(int pti, int ebi, - const pdn_connectivity_reject_msg *msg) -{ - LOG_FUNC_IN; - - int esm_cause; - - LOG_TRACE(INFO, "ESM-SAP - Received PDN Connectivity Reject message " - "(pti=%d, ebi=%d, cause=%d)", pti, ebi, msg->esmcause); - - /* - * Procedure transaction identity checking - */ - if ( (pti == ESM_PT_UNASSIGNED) || esm_pt_is_reserved(pti) ) { - /* 3GPP TS 24.301, section 7.3.1, case a - * Reserved or unassigned PTI value - */ - LOG_TRACE(WARNING, "ESM-SAP - Invalid PTI value (pti=%d)", pti); - LOG_FUNC_RETURN (ESM_CAUSE_INVALID_PTI_VALUE); - } else if ( esm_pt_is_not_in_use(pti) ) { - /* 3GPP TS 24.301, section 7.3.1, case a - * Assigned value that does not match any PTI in use - */ - LOG_TRACE(WARNING, "ESM-SAP - PTI mismatch (pti=%d)", pti); - LOG_FUNC_RETURN (ESM_CAUSE_PTI_MISMATCH); - } - /* - * EPS bearer identity checking - */ - else if ( (ebi != ESM_EBI_UNASSIGNED) || esm_ebr_is_reserved(ebi) ) { - /* 3GPP TS 24.301, section 7.3.2, case a - * Assigned or reserved EPS bearer identity value */ - LOG_TRACE(WARNING, "ESM-SAP - Invalid EPS bearer identity (ebi=%d)", - ebi); - LOG_FUNC_RETURN (ESM_CAUSE_INVALID_EPS_BEARER_IDENTITY); - } - - /* - * Message processing - */ - /* Get the ESM cause */ - esm_cause = msg->esmcause; - - /* Execute the PDN connectivity procedure not accepted by the network */ - int rc = esm_proc_pdn_connectivity_reject(pti, &esm_cause); - - if (rc != RETURNerror) { - esm_cause = ESM_CAUSE_SUCCESS; - } - - /* Return the ESM cause value */ - LOG_FUNC_RETURN (esm_cause); -} - -/**************************************************************************** - ** ** - ** Name: esm_recv_pdn_disconnect_reject() ** - ** ** - ** Description: Processes PDN Disconnect Reject message ** - ** ** - ** Inputs: pti: Procedure transaction identity ** - ** ebi: EPS bearer identity ** - ** msg: The received ESM message ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: ESM cause code whenever the processing of ** - ** the ESM message fails ** - ** Others: None ** - ** ** - ***************************************************************************/ -int esm_recv_pdn_disconnect_reject(int pti, int ebi, - const pdn_disconnect_reject_msg *msg) -{ - LOG_FUNC_IN; - - int esm_cause; - - LOG_TRACE(INFO, "ESM-SAP - Received PDN Disconnect Reject message " - "(pti=%d, ebi=%d, cause=%d)", pti, ebi, msg->esmcause); - - /* - * Procedure transaction identity checking - */ - if ( (pti == ESM_PT_UNASSIGNED) || esm_pt_is_reserved(pti) ) { - /* 3GPP TS 24.301, section 7.3.1, case b - * Reserved or unassigned PTI value - */ - LOG_TRACE(WARNING, "ESM-SAP - Invalid PTI value (pti=%d)", pti); - LOG_FUNC_RETURN (ESM_CAUSE_INVALID_PTI_VALUE); - } else if ( esm_pt_is_not_in_use(pti) ) { - /* 3GPP TS 24.301, section 7.3.1, case b - * Assigned value that does not match any PTI in use - */ - LOG_TRACE(WARNING, "ESM-SAP - PTI mismatch (pti=%d)", pti); - LOG_FUNC_RETURN (ESM_CAUSE_PTI_MISMATCH); - } - /* - * EPS bearer identity checking - */ - else if ( (ebi != ESM_EBI_UNASSIGNED) || esm_ebr_is_reserved(ebi) ) { - /* 3GPP TS 24.301, section 7.3.2, case b - * Assigned or reserved EPS bearer identity value */ - LOG_TRACE(WARNING, "ESM-SAP - Invalid EPS bearer identity (ebi=%d)", - ebi); - LOG_FUNC_RETURN (ESM_CAUSE_INVALID_EPS_BEARER_IDENTITY); - } - - /* - * Message processing - */ - /* Get the ESM cause */ - esm_cause = msg->esmcause; - - /* Execute the PDN disconnect procedure not accepted by the network */ - int rc = esm_proc_pdn_disconnect_reject(pti, &esm_cause); - - if (rc != RETURNerror) { - esm_cause = ESM_CAUSE_SUCCESS; - } - - /* Return the ESM cause value */ - LOG_FUNC_RETURN (esm_cause); -} - -/**************************************************************************** - ** ** - ** Name: esm_recv_activate_default_eps_bearer_context_request() ** - ** ** - ** Description: Processes Activate Default EPS Bearer Context Request ** - ** message ** - ** ** - ** Inputs: pti: Procedure transaction identity ** - ** ebi: EPS bearer identity ** - ** msg: The received ESM message ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: ESM cause code whenever the processing of ** - ** the ESM message fails ** - ** Others: None ** - ** ** - ***************************************************************************/ -int esm_recv_activate_default_eps_bearer_context_request(int pti, int ebi, - const activate_default_eps_bearer_context_request_msg *msg) -{ - LOG_FUNC_IN; - - int esm_cause = ESM_CAUSE_SUCCESS; - - LOG_TRACE(INFO, "ESM-SAP - Received Activate Default EPS Bearer Context " - "Request message (pti=%d, ebi=%d)", pti, ebi); - - /* - * Procedure transaction identity checking - */ - if ( (pti == ESM_PT_UNASSIGNED) || esm_pt_is_reserved(pti) ) { - /* 3GPP TS 24.301, section 7.3.1, case h - * Reserved or unassigned PTI value - */ - LOG_TRACE(WARNING, "ESM-SAP - Invalid PTI value (pti=%d)", pti); - LOG_FUNC_RETURN (ESM_CAUSE_INVALID_PTI_VALUE); - } else if ( esm_pt_is_not_in_use(pti) ) { - /* 3GPP TS 24.301, section 7.3.1, case g - * Assigned value that does not match any PTI in use - */ - LOG_TRACE(WARNING, "ESM-SAP - PTI mismatch (pti=%d)", pti); - LOG_FUNC_RETURN (ESM_CAUSE_PTI_MISMATCH); - } - /* - * EPS bearer identity checking - */ - else if ( (ebi == ESM_EBI_UNASSIGNED) || esm_ebr_is_reserved(ebi) ) { - /* 3GPP TS 24.301, section 7.3.2, case g - * Reserved or unassigned EPS bearer identity value - */ - LOG_TRACE(WARNING, "ESM-SAP - Invalid EPS bearer identity (ebi=%d)", - ebi); - LOG_FUNC_RETURN (ESM_CAUSE_INVALID_EPS_BEARER_IDENTITY); - } - - /* - * Message processing - */ - esm_proc_qos_t qos = {-1, -1, -1, -1, -1}; - - /* Get the maximum bit rate for uplink and downlink */ - if (msg->epsqos.bitRatesExtPresent) { - qos.mbrUL = - eps_qos_bit_rate_ext_value(msg->epsqos.bitRatesExt.maxBitRateForUL); - qos.mbrDL = - eps_qos_bit_rate_ext_value(msg->epsqos.bitRatesExt.maxBitRateForDL); - } else if (msg->epsqos.bitRatesPresent) { - qos.mbrUL = - eps_qos_bit_rate_value(msg->epsqos.bitRates.maxBitRateForUL); - qos.mbrDL = - eps_qos_bit_rate_value(msg->epsqos.bitRates.maxBitRateForDL); - } - - /* Get the guaranteed bit rate for uplink and downlink */ - if (msg->epsqos.bitRatesExtPresent) { - qos.gbrUL = - eps_qos_bit_rate_ext_value(msg->epsqos.bitRatesExt.guarBitRateForUL); - qos.gbrDL = - eps_qos_bit_rate_ext_value(msg->epsqos.bitRatesExt.guarBitRateForDL); - } else if (msg->epsqos.bitRatesPresent) { - qos.gbrUL = - eps_qos_bit_rate_value(msg->epsqos.bitRates.guarBitRateForUL); - qos.gbrDL = - eps_qos_bit_rate_value(msg->epsqos.bitRates.guarBitRateForDL); - } - - /* Get the QoS Class Identifier */ - qos.qci = msg->epsqos.qci; - /* Get the value of the PDN type indicator */ - int pdn_type = -1; - - if (msg->pdnaddress.pdntypevalue == PDN_VALUE_TYPE_IPV4) { - pdn_type = ESM_PDN_TYPE_IPV4; - } else if (msg->pdnaddress.pdntypevalue == PDN_VALUE_TYPE_IPV6) { - pdn_type = ESM_PDN_TYPE_IPV6; - } else if (msg->pdnaddress.pdntypevalue == PDN_VALUE_TYPE_IPV4V6) { - pdn_type = ESM_PDN_TYPE_IPV4V6; - } - - /* Get the ESM cause */ - if (msg->presencemask & - ACTIVATE_DEFAULT_EPS_BEARER_CONTEXT_REQUEST_ESM_CAUSE_PRESENT) { - /* The network allocated a PDN address of a PDN type which is different - * from the requested PDN type */ - esm_cause = msg->esmcause; - } - - /* Execute the PDN connectivity procedure accepted by the network */ - int pid = esm_proc_pdn_connectivity_accept(pti, pdn_type, - &msg->pdnaddress.pdnaddressinformation, - &msg->accesspointname.accesspointnamevalue, - &esm_cause); - - if (pid != RETURNerror) { - /* Create local default EPS bearer context */ - int rc = esm_proc_default_eps_bearer_context_request(pid, ebi, &qos, - &esm_cause); - - if (rc != RETURNerror) { - esm_cause = ESM_CAUSE_SUCCESS; - } - } - - /* Return the ESM cause value */ - LOG_FUNC_RETURN (esm_cause); -} - -/**************************************************************************** - ** ** - ** Name: esm_recv_activate_dedicated_eps_bearer_context_request() ** - ** ** - ** Description: Processes Activate Dedicated EPS Bearer Context Request ** - ** message ** - ** ** - ** Inputs: pti: Procedure transaction identity ** - ** ebi: EPS bearer identity ** - ** msg: The received ESM message ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: ESM cause code whenever the processing of ** - ** the ESM message fails ** - ** Others: None ** - ** ** - ***************************************************************************/ -int esm_recv_activate_dedicated_eps_bearer_context_request(int pti, int ebi, - const activate_dedicated_eps_bearer_context_request_msg *msg) -{ - LOG_FUNC_IN; - - int esm_cause = ESM_CAUSE_SUCCESS; - int i; - int j; - - LOG_TRACE(INFO, "ESM-SAP - Received Activate Dedicated EPS Bearer " - "Context Request message (pti=%d, ebi=%d)", pti, ebi); - - /* - * Procedure transaction identity checking - */ - if ( esm_pt_is_reserved(pti) ) { - /* 3GPP TS 24.301, section 7.3.1, case j - * Reserved PTI value - */ - LOG_TRACE(WARNING, "ESM-SAP - Invalid PTI value (pti=%d)", pti); - LOG_FUNC_RETURN (ESM_CAUSE_INVALID_PTI_VALUE); - } else if ( (pti != ESM_PT_UNASSIGNED) && esm_pt_is_not_in_use(pti) ) { - /* 3GPP TS 24.301, section 7.3.1, case i - * Assigned value that does not match any PTI in use - */ - LOG_TRACE(WARNING, "ESM-SAP - PTI mismatch (pti=%d)", pti); - LOG_FUNC_RETURN (ESM_CAUSE_PTI_MISMATCH); - } - /* - * EPS bearer identity checking - */ - else if ( (ebi == ESM_EBI_UNASSIGNED) || esm_ebr_is_reserved(ebi) ) { - /* 3GPP TS 24.301, section 7.3.2, case h - * Reserved or unassigned EPS bearer identity value - */ - LOG_TRACE(WARNING, "ESM-SAP - Invalid EPS bearer identity (ebi=%d)", - ebi); - LOG_FUNC_RETURN (ESM_CAUSE_INVALID_EPS_BEARER_IDENTITY); - } - /* - * TFT checking - */ - else if (msg->tft.tftoperationcode != TRAFFIC_FLOW_TEMPLATE_OPCODE_CREATE) { - /* 3GPP TS 24.301, section 6.4.2.4, case a1 - * Semantic errors in TFT operations - */ - LOG_FUNC_RETURN (ESM_CAUSE_SEMANTIC_ERROR_IN_THE_TFT_OPERATION); - } else if (msg->tft.numberofpacketfilters == 0) { - /* 3GPP TS 24.301, section 6.4.2.4, case b1 - * Syntactical errors in TFT operations - */ - LOG_FUNC_RETURN (ESM_CAUSE_SYNTACTICAL_ERROR_IN_THE_TFT_OPERATION); - } - - /* - * Message processing - */ - /* Processing of the EPS bearer level QoS parameters */ - esm_proc_qos_t qos = {-1, -1, -1, -1, -1}; - - /* Get the maximum bit rate for uplink and downlink */ - if (msg->epsqos.bitRatesExtPresent) { - qos.mbrUL = - eps_qos_bit_rate_ext_value(msg->epsqos.bitRatesExt.maxBitRateForUL); - qos.mbrDL = - eps_qos_bit_rate_ext_value(msg->epsqos.bitRatesExt.maxBitRateForDL); - } else if (msg->epsqos.bitRatesPresent) { - qos.mbrUL = - eps_qos_bit_rate_value(msg->epsqos.bitRates.maxBitRateForUL); - qos.mbrDL = - eps_qos_bit_rate_value(msg->epsqos.bitRates.maxBitRateForDL); - } - - /* Get the guaranteed bit rate for uplink and downlink */ - if (msg->epsqos.bitRatesExtPresent) { - qos.gbrUL = - eps_qos_bit_rate_ext_value(msg->epsqos.bitRatesExt.guarBitRateForUL); - qos.gbrDL = - eps_qos_bit_rate_ext_value(msg->epsqos.bitRatesExt.guarBitRateForDL); - } else if (msg->epsqos.bitRatesPresent) { - qos.gbrUL = - eps_qos_bit_rate_value(msg->epsqos.bitRates.guarBitRateForUL); - qos.gbrDL = - eps_qos_bit_rate_value(msg->epsqos.bitRates.guarBitRateForDL); - } - - /* Get the QoS Class Identifier */ - qos.qci = msg->epsqos.qci; - - /* Processing of the traffic flow template parameters */ - esm_proc_tft_t tft = {0, {NULL}}; - /* Get the list of packet filters */ - const PacketFilters *pkfs = &(msg->tft.packetfilterlist.createtft); - - for (i = 0; i < msg->tft.numberofpacketfilters; i++) { - /* Create new temporary packet filter */ - tft.pkf[i] = (network_pkf_t *)malloc(sizeof(network_pkf_t)); - - if (tft.pkf[i] != NULL) { - /* Initialize the temporary packet filter */ - memset(tft.pkf[i], 0, sizeof(network_pkf_t)); - /* Increment the number of packet filters contained in the TFT */ - tft.n_pkfs += 1; - /* Packet filter identifier */ - tft.pkf[i]->id = pkfs[i]->identifier; - /* Packet filter direction */ - tft.pkf[i]->dir = pkfs[i]->direction; - /* Evaluation precedence */ - tft.pkf[i]->precedence = pkfs[i]->eval_precedence; - - /* Get the packet filter components */ - const PacketFilter *pkf = &(pkfs[i]->packetfilter); - - if (pkf->flags & TRAFFIC_FLOW_TEMPLATE_IPV4_REMOTE_ADDR_FLAG) { - /* IPv4 remote address component */ - for (j = 0; - (j < TRAFFIC_FLOW_TEMPLATE_IPV4_ADDR_SIZE) - && (j < NET_PACKET_FILTER_IPV4_ADDR_SIZE); j++) { - tft.pkf[i]->data.ipv4.addr[j] = pkf->ipv4remoteaddr[j].addr; - tft.pkf[i]->data.ipv4.mask[j] = pkf->ipv4remoteaddr[j].mask; - } - } else if (pkf->flags & TRAFFIC_FLOW_TEMPLATE_IPV6_REMOTE_ADDR_FLAG) { - /* IPv6 remote address component */ - for (j = 0; - (j < TRAFFIC_FLOW_TEMPLATE_IPV6_ADDR_SIZE) - && (j < NET_PACKET_FILTER_IPV6_ADDR_SIZE); j++) { - tft.pkf[i]->data.ipv6.addr[j] = pkf->ipv6remoteaddr[j].addr; - tft.pkf[i]->data.ipv6.mask[j] = pkf->ipv6remoteaddr[j].mask; - } - } - - if (pkf->flags & TRAFFIC_FLOW_TEMPLATE_PROTOCOL_NEXT_HEADER_FLAG) { - /* Protocol identifier/Next header component */ - tft.pkf[i]->data.ipv4.protocol = - pkf->protocolidentifier_nextheader; - } - - if (pkf->flags & TRAFFIC_FLOW_TEMPLATE_SINGLE_LOCAL_PORT_FLAG) { - /* Single local port component */ - tft.pkf[i]->lport = pkf->singlelocalport; - } else if (pkf->flags & TRAFFIC_FLOW_TEMPLATE_LOCAL_PORT_RANGE_FLAG) { - /* Local port range component */ - /* TODO: Add port range type to network_pkf_t in networkDef.h */ - tft.pkf[i]->lport = pkf->localportrange.lowlimit; - } - - if (pkf->flags & TRAFFIC_FLOW_TEMPLATE_SINGLE_REMOTE_PORT_FLAG) { - /* Single remote port component */ - tft.pkf[i]->rport = pkf->singleremoteport; - } else if (pkf->flags & TRAFFIC_FLOW_TEMPLATE_REMOTE_PORT_RANGE_FLAG) { - /* Remote port range component */ - /* TODO: Add port range type to network_pkf_t in networkDef.h */ - tft.pkf[i]->rport = pkf->remoteportrange.lowlimit; - } - - if (pkf->flags & TRAFFIC_FLOW_TEMPLATE_SECURITY_PARAMETER_INDEX) { - /* Security parameter index component */ - tft.pkf[i]->data.ipv6.ipsec = pkf->securityparameterindex; - } - - if (pkf->flags & TRAFFIC_FLOW_TEMPLATE_TYPE_OF_SERVICE_TRAFFIC_CLASS) { - /* Type of service/Traffic class component */ - tft.pkf[i]->data.ipv4.tos = - pkf->typdeofservice_trafficclass.value; - } - - if (pkf->flags & TRAFFIC_FLOW_TEMPLATE_FLOW_LABEL) { - /* Flow label component */ - tft.pkf[i]->data.ipv6.fl = pkf->flowlabel; - } - } - } - - /* Execute the dedicated EPS bearer context activation procedure */ - int rc = esm_proc_dedicated_eps_bearer_context_request(ebi, - msg->linkedepsbeareridentity, - &qos, &tft, &esm_cause); - - if (rc != RETURNerror) { - esm_cause = ESM_CAUSE_SUCCESS; - } - - /* Release temporary traffic flow template data */ - for (i = 0; i < tft.n_pkfs; i++) { - free(tft.pkf[i]); - } - - /* Return the ESM cause value */ - LOG_FUNC_RETURN (esm_cause); -} - -/**************************************************************************** - ** ** - ** Name: esm_recv_deactivate_eps_bearer_context_request() ** - ** ** - ** Description: Processes Deactivate EPS Bearer Context Request message ** - ** ** - ** Inputs: pti: Procedure transaction identity ** - ** ebi: EPS bearer identity ** - ** msg: The received ESM message ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: ESM cause code whenever the processing of ** - ** the ESM message fails ** - ** Others: None ** - ** ** - ***************************************************************************/ -int esm_recv_deactivate_eps_bearer_context_request(int pti, int ebi, - const deactivate_eps_bearer_context_request_msg *msg) -{ - LOG_FUNC_IN; - - int rc = RETURNok; - int esm_cause; - - LOG_TRACE(INFO, "ESM-SAP - Received Deactivate EPS Bearer Context " - "Request message (pti=%d, ebi=%d)", pti, ebi); - - /* - * Procedure transaction identity checking - */ - if ( esm_pt_is_reserved(pti) ) { - /* 3GPP TS 24.301, section 7.3.1, case m - * Reserved PTI value - */ - LOG_TRACE(WARNING, "ESM-SAP - Invalid PTI value (pti=%d)", pti); - LOG_FUNC_RETURN (ESM_CAUSE_INVALID_PTI_VALUE); - } else if ( esm_pt_is_not_in_use(pti) ) { - /* 3GPP TS 24.301, section 7.3.1, case m - * Assigned value does not match any PTI in use - */ - LOG_TRACE(WARNING, "ESM-SAP - PTI mismatch (pti=%d)", pti); - LOG_FUNC_RETURN (ESM_CAUSE_PTI_MISMATCH); - } - /* - * EPS bearer identity checking - */ - else if ( (ebi == ESM_EBI_UNASSIGNED) || esm_ebr_is_reserved(ebi) || - esm_ebr_is_not_in_use(ebi) ) { - /* 3GPP TS 24.301, section 7.3.2, case j - * Reserved or unassigned EPS bearer identity value or, - * assigned value that does not match an existing EPS bearer context - */ - LOG_TRACE(WARNING, "ESM-SAP - Invalid EPS bearer identity (ebi=%d)", - ebi); - /* Respond with a DEACTIVATE EPS BEARER CONTEXT ACCEPT message with - * the EPS bearer identity set to the received EPS bearer identity */ - LOG_FUNC_RETURN (ESM_CAUSE_INVALID_EPS_BEARER_IDENTITY); - } - - /* - * Message processing - */ - /* Get the ESM cause */ - esm_cause = msg->esmcause; - - /* Execute the PDN disconnect procedure accepted by the network */ - if (pti != ESM_PT_UNASSIGNED) { - rc = esm_proc_pdn_disconnect_accept(pti, &esm_cause); - } - - if (rc != RETURNerror) { - /* Execute the EPS bearer context deactivation procedure */ - rc = esm_proc_eps_bearer_context_deactivate_request(ebi, &esm_cause); - - if (rc != RETURNerror) { - esm_cause = ESM_CAUSE_SUCCESS; - } - } - - /* Return the ESM cause value */ - LOG_FUNC_RETURN (esm_cause); -} -#endif // NAS_UE /* * -------------------------------------------------------------------------- * Functions executed by the MME upon receiving ESM message from the UE * -------------------------------------------------------------------------- */ -#ifdef NAS_MME /**************************************************************************** ** ** ** Name: esm_recv_pdn_connectivity_request() ** @@ -735,6 +151,7 @@ int esm_recv_pdn_connectivity_request(emm_data_context_t *ctx, int pti, int ebi, unsigned int *new_ebi, void *data) { int esm_cause = ESM_CAUSE_SUCCESS; + uint8_t i; LOG_FUNC_IN; @@ -823,6 +240,13 @@ int esm_recv_pdn_connectivity_request(emm_data_context_t *ctx, int pti, int ebi, */ //TODO: rc = esm_proc_information_request(); } + esm_data->pco = msg->protocolconfigurationoptions; + for (i = 0; i < msg->protocolconfigurationoptions.num_protocol_id_or_container_id; i++) { + DUP_OCTET_STRING(msg->protocolconfigurationoptions.protocolidcontents[i], esm_data->pco.protocolidcontents[i]); + esm_data->pco.protocolid[i] = msg->protocolconfigurationoptions.protocolid[i]; + esm_data->pco.lengthofprotocolid[i] = msg->protocolconfigurationoptions.lengthofprotocolid[i]; + } + #if defined(ORIGINAL_CODE) /* Execute the PDN connectivity procedure requested by the UE */ @@ -1284,8 +708,6 @@ int esm_recv_deactivate_eps_bearer_context_accept(emm_data_context_t *ctx, LOG_FUNC_RETURN (esm_cause); } -#endif // NAS_MME - /****************************************************************************/ /********************* L O C A L F U N C T I O N S *********************/ /****************************************************************************/ diff --git a/openair-cn/NAS/EURECOM-NAS/src/esm/sap/esm_recv.h b/openair-cn/NAS/MME/ESM/SAP/esm_recv.h similarity index 76% rename from openair-cn/NAS/EURECOM-NAS/src/esm/sap/esm_recv.h rename to openair-cn/NAS/MME/ESM/SAP/esm_recv.h index f7da2b773b..6883d61885 100644 --- a/openair-cn/NAS/EURECOM-NAS/src/esm/sap/esm_recv.h +++ b/openair-cn/NAS/MME/ESM/SAP/esm_recv.h @@ -50,21 +50,7 @@ Description Defines functions executed at the ESM Service Access #include "EsmStatus.h" #include "emmData.h" -#ifdef NAS_UE -#include "PdnConnectivityReject.h" -#include "PdnDisconnectReject.h" -#include "BearerResourceAllocationReject.h" -#include "BearerResourceModificationReject.h" -#include "ActivateDefaultEpsBearerContextRequest.h" -#include "ActivateDedicatedEpsBearerContextRequest.h" -#include "ModifyEpsBearerContextRequest.h" -#include "DeactivateEpsBearerContextRequest.h" - -#include "EsmInformationRequest.h" -#endif - -#ifdef NAS_MME #include "PdnConnectivityRequest.h" #include "PdnDisconnectRequest.h" #include "BearerResourceAllocationRequest.h" @@ -79,7 +65,6 @@ Description Defines functions executed at the ESM Service Access #include "DeactivateEpsBearerContextAccept.h" #include "EsmInformationResponse.h" -#endif /****************************************************************************/ /********************* G L O B A L C O N S T A N T S *******************/ @@ -102,50 +87,15 @@ Description Defines functions executed at the ESM Service Access * Functions executed by both the UE and the MME upon receiving ESM messages * -------------------------------------------------------------------------- */ -#ifdef NAS_UE -int esm_recv_status(int pti, int ebi, const esm_status_msg *msg); -#endif -#ifdef NAS_MME + int esm_recv_status(emm_data_context_t *ctx, int pti, int ebi, const esm_status_msg *msg); -#endif - -/* - * -------------------------------------------------------------------------- - * Functions executed by the UE upon receiving ESM message from the network - * -------------------------------------------------------------------------- - */ -#ifdef NAS_UE -/* - * Transaction related messages - * ---------------------------- - */ -int esm_recv_pdn_connectivity_reject(int pti, int ebi, - const pdn_connectivity_reject_msg *msg); - -int esm_recv_pdn_disconnect_reject(int pti, int ebi, - const pdn_disconnect_reject_msg *msg); - -/* - * Messages related to EPS bearer contexts - * --------------------------------------- - */ -int esm_recv_activate_default_eps_bearer_context_request(int pti, int ebi, - const activate_default_eps_bearer_context_request_msg *msg); - -int esm_recv_activate_dedicated_eps_bearer_context_request(int pti, int ebi, - const activate_dedicated_eps_bearer_context_request_msg *msg); - -int esm_recv_deactivate_eps_bearer_context_request(int pti, int ebi, - const deactivate_eps_bearer_context_request_msg *msg); -#endif /* * -------------------------------------------------------------------------- * Functions executed by the MME upon receiving ESM message from the UE * -------------------------------------------------------------------------- */ -#ifdef NAS_MME /* * Transaction related messages * ---------------------------- @@ -175,6 +125,5 @@ int esm_recv_activate_dedicated_eps_bearer_context_reject(emm_data_context_t *ct int esm_recv_deactivate_eps_bearer_context_accept(emm_data_context_t *ctx, int pti, int ebi, const deactivate_eps_bearer_context_accept_msg *msg); -#endif #endif /* __ESM_RECV_H__*/ diff --git a/openair-cn/NAS/EURECOM-NAS/src/esm/sap/esm_sap.c b/openair-cn/NAS/MME/ESM/SAP/esm_sap.c similarity index 70% rename from openair-cn/NAS/EURECOM-NAS/src/esm/sap/esm_sap.c rename to openair-cn/NAS/MME/ESM/SAP/esm_sap.c index 5220aba605..9c2d07c2c5 100644 --- a/openair-cn/NAS/EURECOM-NAS/src/esm/sap/esm_sap.c +++ b/openair-cn/NAS/MME/ESM/SAP/esm_sap.c @@ -70,19 +70,11 @@ Description Defines the ESM Service Access Points at which the EPS /******************* L O C A L D E F I N I T I O N S *******************/ /****************************************************************************/ -#ifdef NAS_UE -static int _esm_sap_recv(int msg_type, int is_standalone, - const OctetString *req, OctetString *rsp, esm_sap_error_t *err); -static int _esm_sap_send(int msg_type, int is_standalone, int pti, int ebi, - const esm_sap_data_t *data, OctetString *rsp); -#endif -#ifdef NAS_MME static int _esm_sap_recv(int msg_type, int is_standalone, emm_data_context_t *ctx, const OctetString *req, OctetString *rsp, esm_sap_error_t *err); static int _esm_sap_send(int msg_type, int is_standalone, emm_data_context_t *ctx, int pti, int ebi, const esm_sap_data_t *data, OctetString *rsp); -#endif /* * String representation of ESM-SAP primitives @@ -175,102 +167,22 @@ int esm_sap_send(esm_sap_t *msg) switch (primitive) { case ESM_PDN_CONNECTIVITY_REQ: -#ifdef NAS_UE - { - esm_pdn_connectivity_t *pdn_connect = &msg->data.pdn_connect; - if ( !msg->is_standalone || !pdn_connect->is_defined ) { - OctetString apn = {0, NULL}; - - if (pdn_connect->apn) { - apn.length = strlen(pdn_connect->apn); - apn.value = (uint8_t *)pdn_connect->apn; - } - - /* Define new PDN context */ - rc = esm_proc_pdn_connectivity(pdn_connect->cid, TRUE, - pdn_connect->pdn_type, &apn, - pdn_connect->is_emergency, NULL); - - if ( msg->is_standalone || (rc != RETURNok) ) { - break; - } - } - - if (pdn_connect->is_defined) { - unsigned int pti; - /* Assign new procedure transaction identity */ - rc = esm_proc_pdn_connectivity(pdn_connect->cid, TRUE, - pdn_connect->pdn_type, NULL, - pdn_connect->is_emergency, &pti); - - if (rc != RETURNerror) { - /* Send PDN connectivity request */ - rc = _esm_sap_send(PDN_CONNECTIVITY_REQUEST, - msg->is_standalone, - pti, EPS_BEARER_IDENTITY_UNASSIGNED, - &msg->data, &msg->send); - } - } - } - -#endif -#ifdef NAS_MME /* The MME received a PDN connectivity request message */ rc = _esm_sap_recv(PDN_CONNECTIVITY_REQUEST, msg->is_standalone, msg->ctx, msg->recv, &msg->send, &msg->err); -#endif break; case ESM_PDN_CONNECTIVITY_REJ: -#ifdef NAS_MME /* PDN connectivity locally failed */ pid = esm_proc_default_eps_bearer_context_failure(msg->ctx); if (pid != RETURNerror) { rc = esm_proc_pdn_connectivity_failure(msg->ctx, pid); } - -#endif -#ifdef NAS_UE - { - esm_pdn_connectivity_t *pdn_connect = &msg->data.pdn_connect; - - if ( msg->is_standalone && pdn_connect->is_defined ) { - /* Undefine the specified PDN context */ - rc = esm_proc_pdn_connectivity(pdn_connect->cid, FALSE, - pdn_connect->pdn_type, NULL, - pdn_connect->is_emergency, NULL); - } else if (msg->recv != NULL) { - /* The UE received a PDN connectivity reject message */ - rc = _esm_sap_recv(PDN_CONNECTIVITY_REJECT, msg->is_standalone, - msg->recv, &msg->send, &msg->err); - } else { - /* The PDN connectivity procedure locally failed */ - rc = esm_proc_pdn_connectivity_failure(TRUE); - } - } -#endif break; case ESM_PDN_DISCONNECT_REQ: -#ifdef NAS_UE - { - unsigned int pti, ebi; - /* Get the procedure transaction identity and the EPS bearer - * identity of the default bearer assigned to the PDN to - * disconnect from */ - rc = esm_proc_pdn_disconnect(msg->data.pdn_disconnect.cid, - &pti, &ebi); - - if (rc != RETURNerror) { - /* Send PDN disconnect request */ - rc = _esm_sap_send(PDN_DISCONNECT_REQUEST, TRUE, pti, ebi, - &msg->data, &msg->send); - } - } - -#endif break; case ESM_PDN_DISCONNECT_REJ: @@ -289,53 +201,20 @@ int esm_sap_send(esm_sap_t *msg) break; case ESM_DEFAULT_EPS_BEARER_CONTEXT_ACTIVATE_REQ: -#ifdef NAS_UE - /* The UE received activate default ESP bearer context request */ - rc = _esm_sap_recv(ACTIVATE_DEFAULT_EPS_BEARER_CONTEXT_REQUEST, - msg->is_standalone, - msg->recv, &msg->send, &msg->err); -#endif break; case ESM_DEFAULT_EPS_BEARER_CONTEXT_ACTIVATE_CNF: -#ifdef NAS_MME /* The MME received activate default ESP bearer context accept */ rc = _esm_sap_recv(ACTIVATE_DEFAULT_EPS_BEARER_CONTEXT_ACCEPT, msg->is_standalone, msg->ctx, msg->recv, &msg->send, &msg->err); -#endif -#ifdef NAS_UE - /* - * The activate default ESP bearer context accept message - * has been successfully delivered to the other side - */ - rc = esm_proc_default_eps_bearer_context_complete(); - - if (rc != RETURNerror) { - rc = esm_proc_pdn_connectivity_complete(); - } - -#endif break; case ESM_DEFAULT_EPS_BEARER_CONTEXT_ACTIVATE_REJ: -#ifdef NAS_MME /* The MME received activate default ESP bearer context reject */ rc = _esm_sap_recv(ACTIVATE_DEFAULT_EPS_BEARER_CONTEXT_REJECT, msg->is_standalone, msg->ctx, msg->recv, &msg->send, &msg->err); -#endif -#ifdef NAS_UE - /* - * Default ESP bearer context activation procedure locally failed - */ - rc = esm_proc_default_eps_bearer_context_failure(); - - if (rc != RETURNerror) { - rc = esm_proc_pdn_connectivity_failure(FALSE); - } - -#endif break; case ESM_DEDICATED_EPS_BEARER_CONTEXT_ACTIVATE_REQ: @@ -361,15 +240,9 @@ int esm_sap_send(esm_sap_t *msg) /* * Locally deactivate EPS bearer context */ -#ifdef NAS_UE - rc = esm_proc_eps_bearer_context_deactivate(TRUE, - msg->data.eps_bearer_context_deactivate.ebi, &pid, &bid); -#endif -#ifdef NAS_MME rc = esm_proc_eps_bearer_context_deactivate(msg->ctx, TRUE, msg->data.eps_bearer_context_deactivate.ebi, &pid, &bid, NULL); -#endif } break; @@ -377,28 +250,20 @@ int esm_sap_send(esm_sap_t *msg) break; case ESM_UNITDATA_IND: -#ifdef NAS_UE - rc = _esm_sap_recv(-1, msg->is_standalone, msg->recv, - &msg->send, &msg->err); -#endif -#ifdef NAS_MME rc = _esm_sap_recv(-1, msg->is_standalone, msg->ctx, msg->recv, &msg->send, &msg->err); -#endif break; default: break; } -#ifdef NAS_MME if (rc != RETURNok) { LOG_TRACE(ERROR, "ESM-SAP - Failed to process primitive %s (%d)", _esm_sap_primitive_str[primitive - ESM_START - 1], primitive); } -#endif LOG_FUNC_RETURN (rc); } @@ -438,9 +303,7 @@ int esm_sap_send(esm_sap_t *msg) ** ** ***************************************************************************/ static int _esm_sap_recv(int msg_type, int is_standalone, -#ifdef NAS_MME emm_data_context_t *ctx, -#endif const OctetString *req, OctetString *rsp, esm_sap_error_t *err) { @@ -511,188 +374,7 @@ static int _esm_sap_recv(int msg_type, int is_standalone, } /* Process the received ESM message */ else switch (esm_msg.header.message_type) { -#ifdef NAS_UE - case ACTIVATE_DEFAULT_EPS_BEARER_CONTEXT_REQUEST: - /* - * Process activate default EPS bearer context request message - * received from the MME - */ - esm_cause = esm_recv_activate_default_eps_bearer_context_request( - pti, ebi, - &esm_msg.activate_default_eps_bearer_context_request); - - if ( (esm_cause == ESM_CAUSE_SUCCESS) || - (esm_cause == ESM_CAUSE_PTI_ALREADY_IN_USE) ) { - /* Return accept message */ - rc = esm_send_activate_default_eps_bearer_context_accept(ebi, - &esm_msg.activate_default_eps_bearer_context_accept); - /* Setup the callback function used to send activate default - * EPS bearer context accept message onto the network */ - esm_procedure = esm_proc_default_eps_bearer_context_accept; - - if (esm_cause == ESM_CAUSE_PTI_ALREADY_IN_USE) { - /* 3GPP TS 24.301, section 7.3.1, case g - * Return accept message, even to network retransmission - * of already accepted activate default EPS bearer context - * request message - */ - is_discarded = TRUE; - } - } else { - /* Return reject message */ - rc = esm_send_activate_default_eps_bearer_context_reject(ebi, - &esm_msg.activate_default_eps_bearer_context_reject, - esm_cause); - /* Setup the callback function used to send activate default - * EPS bearer context reject message onto the network */ - esm_procedure = esm_proc_default_eps_bearer_context_reject; - } - - break; - - case ACTIVATE_DEDICATED_EPS_BEARER_CONTEXT_REQUEST: - /* - * Process activate dedicated EPS bearer context request message - * received from the MME - */ - esm_cause = esm_recv_activate_dedicated_eps_bearer_context_request( - pti, ebi, - &esm_msg.activate_dedicated_eps_bearer_context_request); - - if ( (esm_cause == ESM_CAUSE_SUCCESS) || - (esm_cause == ESM_CAUSE_PTI_ALREADY_IN_USE) ) { - /* Return accept message */ - rc = esm_send_activate_dedicated_eps_bearer_context_accept(ebi, - &esm_msg.activate_dedicated_eps_bearer_context_accept); - /* Setup the callback function used to send activate dedicated - * EPS bearer context accept message onto the network */ - esm_procedure = esm_proc_dedicated_eps_bearer_context_accept; - - if (esm_cause == ESM_CAUSE_PTI_ALREADY_IN_USE) { - /* 3GPP TS 24.301, section 7.3.1, case i - * Return accept message, even to network retransmission - * of already accepted activate dedicated EPS bearer context - * request message - */ - is_discarded = TRUE; - } - } else { - /* Return reject message */ - rc = esm_send_activate_dedicated_eps_bearer_context_reject(ebi, - &esm_msg.activate_dedicated_eps_bearer_context_reject, - esm_cause); - /* Setup the callback function used to send activate dedicated - * EPS bearer context reject message onto the network */ - esm_procedure = esm_proc_dedicated_eps_bearer_context_reject; - } - - break; - - case MODIFY_EPS_BEARER_CONTEXT_REQUEST: - break; - - case DEACTIVATE_EPS_BEARER_CONTEXT_REQUEST: - /* - * Process deactivate EPS bearer context request message - * received from the MME - */ - esm_cause = esm_recv_deactivate_eps_bearer_context_request(pti, ebi, - &esm_msg.deactivate_eps_bearer_context_request); - - if ( (esm_cause == ESM_CAUSE_INVALID_PTI_VALUE) || - (esm_cause == ESM_CAUSE_PTI_MISMATCH) ) { - /* 3GPP TS 24.301, section 7.3.1, case m - * Ignore deactivate EPS bearer context request message - * received with PTI reserved value, or assigned value - * that does not match any PTI in use - */ - is_discarded = TRUE; - } else if ( (esm_cause == ESM_CAUSE_SUCCESS) || - (esm_cause == ESM_CAUSE_INVALID_EPS_BEARER_IDENTITY) ) { - /* Return accept message */ - rc = esm_send_deactivate_eps_bearer_context_accept(ebi, - &esm_msg.deactivate_eps_bearer_context_accept); - /* Setup the callback function used to send deactivate - * EPS bearer context accept message onto the network */ - esm_procedure = esm_proc_eps_bearer_context_deactivate_accept; - - if (esm_cause == ESM_CAUSE_INVALID_EPS_BEARER_IDENTITY) { - /* 3GPP TS 24.301, section 7.3.2, case j - * Respond with a deactivate EPS bearer context accept - * message with the EPS bearer identity set to the received - * EPS bearer identity - */ - is_discarded = TRUE; - } - } - - break; - - case PDN_CONNECTIVITY_REJECT: - /* - * Process PDN connectivity reject message received from the MME - */ - esm_cause = esm_recv_pdn_connectivity_reject(pti, ebi, - &esm_msg.pdn_connectivity_reject); - - if ( (esm_cause == ESM_CAUSE_INVALID_PTI_VALUE) || - (esm_cause == ESM_CAUSE_PTI_MISMATCH) || - (esm_cause == ESM_CAUSE_INVALID_EPS_BEARER_IDENTITY) ) { - /* 3GPP TS 24.301, section 7.3.1, case a - * Ignore PDN connectivity reject message received with - * reserved or unassigned PTI value, or assigned value that - * does not match any PTI in use - * 3GPP TS 24.301, section 7.3.2, case a - * Ignore PDN connectivity reject message received with - * reserved or unassigned EPS bearer identity value - */ - is_discarded = TRUE; - } - - break; - - case PDN_DISCONNECT_REJECT: - /* - * Process PDN disconnect reject message received from the MME - */ - esm_cause = esm_recv_pdn_disconnect_reject(pti, ebi, - &esm_msg.pdn_disconnect_reject); - - if ( (esm_cause == ESM_CAUSE_INVALID_PTI_VALUE) || - (esm_cause == ESM_CAUSE_PTI_MISMATCH) || - (esm_cause == ESM_CAUSE_INVALID_EPS_BEARER_IDENTITY) ) { - /* 3GPP TS 24.301, section 7.3.1, case b - * Ignore PDN disconnect reject message received with - * reserved or unassigned PTI value, or assigned value that - * does not match any PTI in use - * 3GPP TS 24.301, section 7.3.2, case b - * Ignore PDN disconnect reject message received with - * reserved or unassigned EPS bearer identity value - */ - is_discarded = TRUE; - } - - break; - - case BEARER_RESOURCE_ALLOCATION_REJECT: - break; - - case BEARER_RESOURCE_MODIFICATION_REJECT: - break; - - case ESM_INFORMATION_REQUEST: - break; - - case ESM_STATUS: - /* - * Process received ESM status message - */ - esm_cause = esm_recv_status(pti, ebi, &esm_msg.esm_status); - break; -#endif - -#ifdef NAS_MME case ACTIVATE_DEFAULT_EPS_BEARER_CONTEXT_ACCEPT: /* @@ -962,7 +644,6 @@ static int _esm_sap_recv(int msg_type, int is_standalone, */ esm_cause = esm_recv_status(ctx, pti, ebi, &esm_msg.esm_status); break; -#endif default: LOG_TRACE(WARNING, "ESM-SAP - Received unexpected ESM message " @@ -1003,12 +684,7 @@ static int _esm_sap_recv(int msg_type, int is_standalone, } /* Complete the relevant ESM procedure */ -#ifdef NAS_UE - rc = (*esm_procedure)(is_standalone, ebi, rsp, triggered_by_ue); -#endif -#ifdef NAS_MME rc = (*esm_procedure)(is_standalone, ctx, ebi, rsp, triggered_by_ue); -#endif if (is_discarded) { /* Return indication that received message has been discarded */ @@ -1052,9 +728,7 @@ static int _esm_sap_recv(int msg_type, int is_standalone, ** ** ***************************************************************************/ static int _esm_sap_send(int msg_type, int is_standalone, -#ifdef NAS_MME emm_data_context_t *ctx, -#endif int pti, int ebi, const esm_sap_data_t *data, OctetString *rsp) { @@ -1064,74 +738,15 @@ static int _esm_sap_send(int msg_type, int is_standalone, int rc = RETURNok; /* Indicate whether the message is sent by the UE or the MME */ -#ifdef NAS_UE - int sent_by_ue = TRUE; -#endif -#ifdef NAS_MME int sent_by_ue = FALSE; -#endif ESM_msg esm_msg; memset(&esm_msg, 0 , sizeof(ESM_msg)); /* Process the ESM message to send */ switch (msg_type) { -#ifdef NAS_UE - case ACTIVATE_DEFAULT_EPS_BEARER_CONTEXT_ACCEPT: - break; - case ACTIVATE_DEFAULT_EPS_BEARER_CONTEXT_REJECT: - break; - - case ACTIVATE_DEDICATED_EPS_BEARER_CONTEXT_ACCEPT: - break; - - case ACTIVATE_DEDICATED_EPS_BEARER_CONTEXT_REJECT: - break; - - case MODIFY_EPS_BEARER_CONTEXT_ACCEPT: - break; - - case MODIFY_EPS_BEARER_CONTEXT_REJECT: - break; - - case DEACTIVATE_EPS_BEARER_CONTEXT_ACCEPT: - break; - - case PDN_CONNECTIVITY_REQUEST: { - /* - * Process PDN connectivity request message to send to the MME - */ - const esm_pdn_connectivity_t *msg = &data->pdn_connect; - rc = esm_send_pdn_connectivity_request(pti, msg->is_emergency, - msg->pdn_type, msg->apn, - &esm_msg.pdn_connectivity_request); - /* Setup callback function used to send PDN connectivity request - * message onto the network */ - esm_procedure = esm_proc_pdn_connectivity_request; - break; - } - - case PDN_DISCONNECT_REQUEST: - /* - * Process PDN disconnect request message to send to the MME - */ - rc = esm_send_pdn_disconnect_request(pti, ebi, - &esm_msg.pdn_disconnect_request); - /* Setup callback function used to send PDN disconnect request - * message onto the network */ - esm_procedure = esm_proc_pdn_disconnect_request; - break; - - case BEARER_RESOURCE_ALLOCATION_REQUEST: - break; - - case BEARER_RESOURCE_MODIFICATION_REQUEST: - break; -#endif - -#ifdef NAS_MME case ACTIVATE_DEFAULT_EPS_BEARER_CONTEXT_REQUEST: break; @@ -1156,7 +771,6 @@ static int _esm_sap_send(int msg_type, int is_standalone, case BEARER_RESOURCE_MODIFICATION_REJECT: break; -#endif default: LOG_TRACE(WARNING, "ESM-SAP - Send unexpected ESM message 0x%x", @@ -1176,12 +790,7 @@ static int _esm_sap_send(int msg_type, int is_standalone, /* Execute the relevant ESM procedure */ if (esm_procedure) { -#ifdef NAS_UE - rc = (*esm_procedure)(is_standalone, pti, rsp, sent_by_ue); -#endif -#ifdef NAS_MME rc = (*esm_procedure)(is_standalone, ctx, pti, rsp, sent_by_ue); -#endif } } diff --git a/openair-cn/NAS/EURECOM-NAS/src/esm/sap/esm_sap.h b/openair-cn/NAS/MME/ESM/SAP/esm_sap.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/esm/sap/esm_sap.h rename to openair-cn/NAS/MME/ESM/SAP/esm_sap.h diff --git a/openair-cn/NAS/MME/ESM/SAP/esm_sapDef.h b/openair-cn/NAS/MME/ESM/SAP/esm_sapDef.h new file mode 100644 index 0000000000..a1372193f1 --- /dev/null +++ b/openair-cn/NAS/MME/ESM/SAP/esm_sapDef.h @@ -0,0 +1,179 @@ +/******************************************************************************* + OpenAirInterface + Copyright(c) 1999 - 2014 Eurecom + + OpenAirInterface is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + + OpenAirInterface is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with OpenAirInterface.The full GNU General Public License is + included in this distribution in the file called "COPYING". If not, + see . + + Contact Information + OpenAirInterface Admin: openair_admin@eurecom.fr + OpenAirInterface Tech : openair_tech@eurecom.fr + OpenAirInterface Dev : openair4g-devel@eurecom.fr + + Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. + + *******************************************************************************/ +/***************************************************************************** +Source esm_sapDef.h + +Version 0.1 + +Date 2012/11/21 + +Product NAS stack + +Subsystem EPS Session Management + +Author Frederic Maurel + +Description Defines the ESM Service Access Point that provides EPS + bearer context handling and resources allocation procedures. + +*****************************************************************************/ + +#include "emmData.h" + +#ifndef __ESM_SAPDEF_H__ +#define __ESM_SAPDEF_H__ + +#include "OctetString.h" + +/****************************************************************************/ +/********************* G L O B A L C O N S T A N T S *******************/ +/****************************************************************************/ + +/* + * EPS Session Management primitives + * --------------------------------- + */ +typedef enum esm_primitive_s { + ESM_START = 0, + /* Procedures related to EPS bearer contexts (initiated by the network) */ + ESM_DEFAULT_EPS_BEARER_CONTEXT_ACTIVATE_REQ, + ESM_DEFAULT_EPS_BEARER_CONTEXT_ACTIVATE_CNF, + ESM_DEFAULT_EPS_BEARER_CONTEXT_ACTIVATE_REJ, + ESM_DEDICATED_EPS_BEARER_CONTEXT_ACTIVATE_REQ, + ESM_DEDICATED_EPS_BEARER_CONTEXT_ACTIVATE_CNF, + ESM_DEDICATED_EPS_BEARER_CONTEXT_ACTIVATE_REJ, + ESM_EPS_BEARER_CONTEXT_MODIFY_REQ, + ESM_EPS_BEARER_CONTEXT_MODIFY_CNF, + ESM_EPS_BEARER_CONTEXT_MODIFY_REJ, + ESM_EPS_BEARER_CONTEXT_DEACTIVATE_REQ, + ESM_EPS_BEARER_CONTEXT_DEACTIVATE_CNF, + /* Transaction related procedures (initiated by the UE) */ + ESM_PDN_CONNECTIVITY_REQ, + ESM_PDN_CONNECTIVITY_REJ, + ESM_PDN_DISCONNECT_REQ, + ESM_PDN_DISCONNECT_REJ, + ESM_BEARER_RESOURCE_ALLOCATE_REQ, + ESM_BEARER_RESOURCE_ALLOCATE_REJ, + ESM_BEARER_RESOURCE_MODIFY_REQ, + ESM_BEARER_RESOURCE_MODIFY_REJ, + /* ESM data indication ("raw" ESM message) */ + ESM_UNITDATA_IND, + ESM_END +} esm_primitive_t; + +/****************************************************************************/ +/************************ G L O B A L T Y P E S ************************/ +/****************************************************************************/ + +/* + * Error code returned upon processing ESM-SAP primitive + */ +typedef enum { + ESM_SAP_SUCCESS = 1, /* ESM-SAP primitive succeed */ + ESM_SAP_DISCARDED, /* ESM-SAP primitive failed, the caller should + * ignore the error */ + ESM_SAP_FAILED /* ESM-SAP primitive failed, the caller should + * take specific action and state transition may + * occurs */ +} esm_sap_error_t; + +/* + * ESM primitive for activate EPS default bearer context procedure + * --------------------------------------------------------------- + */ +typedef struct esm_activate_eps_default_bearer_context_s { +} esm_activate_eps_default_bearer_context_t; + +/* + * ESM primitive for PDN connectivity procedure + * -------------------------------------------- + */ +typedef struct esm_pdn_connectivity_s { + int cid; /* PDN connection local identifier */ + int is_defined; /* Indicates whether a PDN context has been defined + * for the specified APN */ + int pdn_type; /* PDN address type (IPv4, IPv6, IPv4v6) */ + const char *apn; /* PDN's Access Point Name */ + int is_emergency; /* Indicates whether the PDN context has been + * defined to establish connection for emergency + * bearer services */ +} esm_pdn_connectivity_t; + +/* + * ESM primitive for PDN disconnect procedure + * ------------------------------------------ + */ +typedef struct esm_pdn_disconnect_s { + int cid; /* PDN connection local identifier */ +} esm_pdn_disconnect_t; + +/* + * ESM primitive for deactivate EPS bearer context procedure + * --------------------------------------------------------- + */ +typedef struct esm_eps_bearer_context_deactivate_s { +#define ESM_SAP_ALL_EBI 0xff + unsigned int ebi; /* EPS bearer identity of the EPS bearer context + * to be deactivated */ +} esm_eps_bearer_context_deactivate_t; + +/* + * ------------------------------ + * Structure of ESM-SAP primitive + * ------------------------------ + */ +typedef union { + esm_pdn_connectivity_t pdn_connect; + esm_pdn_disconnect_t pdn_disconnect; + esm_eps_bearer_context_deactivate_t eps_bearer_context_deactivate; +} esm_sap_data_t; + +typedef struct esm_sap_s { + esm_primitive_t primitive; /* ESM-SAP primitive to process */ + int is_standalone; /* Indicates whether the ESM message handled + * within this primitive has to be sent/received + * standalone or together within an EMM related + * message */ + emm_data_context_t *ctx; /* UE context */ + unsigned int ueid; /* Local UE identifier */ + esm_sap_error_t err; /* ESM-SAP error code */ + const OctetString *recv; /* Encoded ESM message received */ + OctetString send; /* Encoded ESM message to be sent */ + esm_sap_data_t data; /* ESM message data parameters */ +} esm_sap_t; + +/****************************************************************************/ +/******************** G L O B A L V A R I A B L E S ********************/ +/****************************************************************************/ + +/****************************************************************************/ +/****************** E X P O R T E D F U N C T I O N S ******************/ +/****************************************************************************/ + +#endif /* __ESM_SAPDEF_H__*/ diff --git a/openair-cn/NAS/MME/ESM/SAP/esm_send.c b/openair-cn/NAS/MME/ESM/SAP/esm_send.c new file mode 100644 index 0000000000..4926c749a2 --- /dev/null +++ b/openair-cn/NAS/MME/ESM/SAP/esm_send.c @@ -0,0 +1,427 @@ +/******************************************************************************* + OpenAirInterface + Copyright(c) 1999 - 2014 Eurecom + + OpenAirInterface is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + + OpenAirInterface is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with OpenAirInterface.The full GNU General Public License is + included in this distribution in the file called "COPYING". If not, + see . + + Contact Information + OpenAirInterface Admin: openair_admin@eurecom.fr + OpenAirInterface Tech : openair_tech@eurecom.fr + OpenAirInterface Dev : openair4g-devel@eurecom.fr + + Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. + + *******************************************************************************/ +/***************************************************************************** +Source esm_send.c + +Version 0.1 + +Date 2013/02/11 + +Product NAS stack + +Subsystem EPS Session Management + +Author Frederic Maurel + +Description Defines functions executed at the ESM Service Access + Point to send EPS Session Management messages to the + EPS Mobility Management sublayer. + +*****************************************************************************/ + +#include "esm_send.h" +#include "commonDef.h" +#include "nas_log.h" + + +#include "esm_msgDef.h" +#include "esm_cause.h" + +#include // strlen + +/****************************************************************************/ +/**************** E X T E R N A L D E F I N I T I O N S ****************/ +/****************************************************************************/ + +/****************************************************************************/ +/******************* L O C A L D E F I N I T I O N S *******************/ +/****************************************************************************/ + +/****************************************************************************/ +/****************** E X P O R T E D F U N C T I O N S ******************/ +/****************************************************************************/ + +/* + * -------------------------------------------------------------------------- + * Functions executed by both the UE and the MME to send ESM messages + * -------------------------------------------------------------------------- + */ +/**************************************************************************** + ** ** + ** Name: esm_send_status() ** + ** ** + ** Description: Builds ESM status message ** + ** ** + ** The ESM status message is sent by the network or the UE ** + ** to pass information on the status of the indicated EPS ** + ** bearer context and report certain error conditions. ** + ** ** + ** Inputs: pti: Procedure transaction identity ** + ** ebi: EPS bearer identity ** + ** esm_cause: ESM cause code ** + ** Others: None ** + ** ** + ** Outputs: msg: The ESM message to be sent ** + ** Return: RETURNok, RETURNerror ** + ** Others: None ** + ** ** + ***************************************************************************/ +int esm_send_status(int pti, int ebi, esm_status_msg *msg, int esm_cause) +{ + LOG_FUNC_IN; + + /* Mandatory - ESM message header */ + msg->protocoldiscriminator = EPS_SESSION_MANAGEMENT_MESSAGE; + msg->epsbeareridentity = ebi; + msg->messagetype = ESM_STATUS; + msg->proceduretransactionidentity = pti; + + /* Mandatory - ESM cause code */ + msg->esmcause = esm_cause; + + LOG_TRACE(WARNING, "ESM-SAP - Send ESM Status message (pti=%d, ebi=%d)", + msg->proceduretransactionidentity, msg->epsbeareridentity); + + LOG_FUNC_RETURN(RETURNok); +} + + +/* + * -------------------------------------------------------------------------- + * Functions executed by the MME to send ESM message to the UE + * -------------------------------------------------------------------------- + */ +/**************************************************************************** + ** ** + ** Name: esm_send_pdn_connectivity_reject() ** + ** ** + ** Description: Builds PDN Connectivity Reject message ** + ** ** + ** The PDN connectivity reject message is sent by the net- ** + ** work to the UE to reject establishment of a PDN connec- ** + ** tion. ** + ** ** + ** Inputs: pti: Procedure transaction identity ** + ** esm_cause: ESM cause code ** + ** Others: None ** + ** ** + ** Outputs: msg: The ESM message to be sent ** + ** Return: RETURNok, RETURNerror ** + ** Others: None ** + ** ** + ***************************************************************************/ +int esm_send_pdn_connectivity_reject(int pti, pdn_connectivity_reject_msg *msg, + int esm_cause) +{ + LOG_FUNC_IN; + + /* Mandatory - ESM message header */ + msg->protocoldiscriminator = EPS_SESSION_MANAGEMENT_MESSAGE; + msg->epsbeareridentity = EPS_BEARER_IDENTITY_UNASSIGNED; + msg->messagetype = PDN_CONNECTIVITY_REJECT; + msg->proceduretransactionidentity = pti; + + /* Mandatory - ESM cause code */ + msg->esmcause = esm_cause; + /* Optional IEs */ + msg->presencemask = 0; + + LOG_TRACE(INFO, "ESM-SAP - Send PDN Connectivity Reject message " + "(pti=%d, ebi=%d)", + msg->proceduretransactionidentity, msg->epsbeareridentity); + + LOG_FUNC_RETURN(RETURNok); +} + +/**************************************************************************** + ** ** + ** Name: esm_send_pdn_disconnect_reject() ** + ** ** + ** Description: Builds PDN Disconnect Reject message ** + ** ** + ** The PDN disconnect reject message is sent by the network ** + ** to the UE to reject release of a PDN connection. ** + ** ** + ** Inputs: pti: Procedure transaction identity ** + ** esm_cause: ESM cause code ** + ** Others: None ** + ** ** + ** Outputs: msg: The ESM message to be sent ** + ** Return: RETURNok, RETURNerror ** + ** Others: None ** + ** ** + ***************************************************************************/ +int esm_send_pdn_disconnect_reject(int pti, pdn_disconnect_reject_msg *msg, + int esm_cause) +{ + LOG_FUNC_IN; + + /* Mandatory - ESM message header */ + msg->protocoldiscriminator = EPS_SESSION_MANAGEMENT_MESSAGE; + msg->epsbeareridentity = EPS_BEARER_IDENTITY_UNASSIGNED; + msg->messagetype = PDN_DISCONNECT_REJECT; + msg->proceduretransactionidentity = pti; + + /* Mandatory - ESM cause code */ + msg->esmcause = esm_cause; + /* Optional IEs */ + msg->presencemask = 0; + + LOG_TRACE(INFO, "ESM-SAP - Send PDN Disconnect Reject message " + "(pti=%d, ebi=%d)", + msg->proceduretransactionidentity, msg->epsbeareridentity); + + LOG_FUNC_RETURN(RETURNok); +} + +/**************************************************************************** + ** ** + ** Name: esm_send_activate_default_eps_bearer_context_request() ** + ** ** + ** Description: Builds Activate Default EPS Bearer Context Request ** + ** message ** + ** ** + ** The activate default EPS bearer context request message ** + ** is sent by the network to the UE to request activation of ** + ** a default EPS bearer context. ** + ** ** + ** Inputs: pti: Procedure transaction identity ** + ** ebi: EPS bearer identity ** + ** qos: Subscribed EPS quality of service ** + ** apn: Access Point Name in used ** + ** pdn_addr: PDN IPv4 address and/or IPv6 suffix ** + ** esm_cause: ESM cause code ** + ** Others: None ** + ** ** + ** Outputs: msg: The ESM message to be sent ** + ** Return: RETURNok, RETURNerror ** + ** Others: None ** + ** ** + ***************************************************************************/ +int esm_send_activate_default_eps_bearer_context_request(int pti, + int ebi, + activate_default_eps_bearer_context_request_msg *msg, + const OctetString *apn, + const ProtocolConfigurationOptions *pco, + int pdn_type, + const OctetString *pdn_addr, + const EpsQualityOfService *qos, + int esm_cause) +{ + LOG_FUNC_IN; + + /* Mandatory - ESM message header */ + msg->protocoldiscriminator = EPS_SESSION_MANAGEMENT_MESSAGE; + msg->epsbeareridentity = ebi; + msg->messagetype = ACTIVATE_DEFAULT_EPS_BEARER_CONTEXT_REQUEST; + msg->proceduretransactionidentity = pti; + + /* Mandatory - EPS QoS */ + msg->epsqos = *qos; + LOG_TRACE(INFO, "ESM-SAP - epsqos qci: %u", qos->qci); + + if (qos->bitRatesPresent) { + LOG_TRACE(INFO, "ESM-SAP - epsqos maxBitRateForUL: %u", qos->bitRates.maxBitRateForUL); + LOG_TRACE(INFO, "ESM-SAP - epsqos maxBitRateForDL: %u", qos->bitRates.maxBitRateForDL); + LOG_TRACE(INFO, "ESM-SAP - epsqos guarBitRateForUL: %u", qos->bitRates.guarBitRateForUL); + LOG_TRACE(INFO, "ESM-SAP - epsqos guarBitRateForDL: %u", qos->bitRates.guarBitRateForDL); + } else { + LOG_TRACE(INFO, "ESM-SAP - epsqos no bit rates defined"); + } + + if (qos->bitRatesExtPresent) { + LOG_TRACE(INFO, "ESM-SAP - epsqos maxBitRateForUL Ext: %u", qos->bitRatesExt.maxBitRateForUL); + LOG_TRACE(INFO, "ESM-SAP - epsqos maxBitRateForDL Ext: %u", qos->bitRatesExt.maxBitRateForDL); + LOG_TRACE(INFO, "ESM-SAP - epsqos guarBitRateForUL Ext: %u", qos->bitRatesExt.guarBitRateForUL); + LOG_TRACE(INFO, "ESM-SAP - epsqos guarBitRateForDL Ext: %u", qos->bitRatesExt.guarBitRateForDL); + } else { + LOG_TRACE(INFO, "ESM-SAP - epsqos no bit rates ext defined"); + } + + + if ((apn == NULL) || ((apn != NULL) && (apn->value == NULL))) { + LOG_TRACE(WARNING, "ESM-SAP - apn is NULL!"); + } + + LOG_TRACE(INFO, "ESM-SAP - apn is %s", apn->value); + + /* Mandatory - Access Point Name */ + msg->accesspointname.accesspointnamevalue = *apn; + + /* Mandatory - PDN address */ + LOG_TRACE(INFO, "ESM-SAP - pdn_type is %u", pdn_type); + msg->pdnaddress.pdntypevalue = pdn_type; + LOG_TRACE(INFO, "ESM-SAP - pdn_addr is %u", dump_octet_string(pdn_addr)); + msg->pdnaddress.pdnaddressinformation = *pdn_addr; + + /* Optional - ESM cause code */ + msg->presencemask = 0; + + if (esm_cause != ESM_CAUSE_SUCCESS) { + msg->presencemask |= + ACTIVATE_DEFAULT_EPS_BEARER_CONTEXT_REQUEST_ESM_CAUSE_PRESENT; + msg->esmcause = esm_cause; + } + + if (pco != NULL) { + msg->presencemask |= + ACTIVATE_DEFAULT_EPS_BEARER_CONTEXT_REQUEST_PROTOCOL_CONFIGURATION_OPTIONS_PRESENT; + msg->protocolconfigurationoptions = *pco; + } + +#warning "TEST LG FORCE APN-AMBR" + LOG_TRACE(INFO, "ESM-SAP - FORCE APN-AMBR"); + msg->presencemask |= + ACTIVATE_DEFAULT_EPS_BEARER_CONTEXT_REQUEST_APNAMBR_PRESENT; + msg->apnambr.apnambrfordownlink = 0xfe; // (8640kbps) + msg->apnambr.apnambrforuplink = 0xfe; // (8640kbps) + msg->apnambr.apnambrfordownlink_extended = 0xde; // (200Mbps) + msg->apnambr.apnambrforuplink_extended = 0x9e; // (100Mbps) + msg->apnambr.apnambrfordownlink_extended2 = 0; + msg->apnambr.apnambrforuplink_extended2 = 0; + msg->apnambr.extensions = 0 | APN_AGGREGATE_MAXIMUM_BIT_RATE_MAXIMUM_EXTENSION_PRESENT; + + LOG_TRACE(INFO, "ESM-SAP - Send Activate Default EPS Bearer Context " + "Request message (pti=%d, ebi=%d)", + msg->proceduretransactionidentity, msg->epsbeareridentity); + + LOG_FUNC_RETURN(RETURNok); +} + +/**************************************************************************** + ** ** + ** Name: esm_send_activate_dedicated_eps_bearer_context_request() ** + ** ** + ** Description: Builds Activate Dedicated EPS Bearer Context Request ** + ** message ** + ** ** + ** The activate dedicated EPS bearer context request message ** + ** is sent by the network to the UE to request activation of ** + ** a dedicated EPS bearer context associated with the same ** + ** PDN address(es) and APN as an already active default EPS ** + ** bearer context. ** + ** ** + ** Inputs: pti: Procedure transaction identity ** + ** ebi: EPS bearer identity ** + ** linked_ebi: EPS bearer identity of the default bearer ** + ** associated with the EPS dedicated bearer ** + ** to be activated ** + ** qos: EPS quality of service ** + ** tft: Traffic flow template ** + ** Others: None ** + ** ** + ** Outputs: msg: The ESM message to be sent ** + ** Return: RETURNok, RETURNerror ** + ** Others: None ** + ** ** + ***************************************************************************/ +int esm_send_activate_dedicated_eps_bearer_context_request(int pti, int ebi, + activate_dedicated_eps_bearer_context_request_msg *msg, + int linked_ebi, const EpsQualityOfService *qos, + PacketFilters *pkfs, int n_pkfs) +{ + int i; + LOG_FUNC_IN; + + /* Mandatory - ESM message header */ + msg->protocoldiscriminator = EPS_SESSION_MANAGEMENT_MESSAGE; + msg->epsbeareridentity = ebi; + msg->messagetype = ACTIVATE_DEDICATED_EPS_BEARER_CONTEXT_REQUEST; + msg->proceduretransactionidentity = pti; + + /* Mandatory - EPS QoS */ + msg->epsqos = *qos; + + /* Mandatory - traffic flow template */ + msg->tft.tftoperationcode = TRAFFIC_FLOW_TEMPLATE_OPCODE_CREATE; + msg->tft.ebit = TRAFFIC_FLOW_TEMPLATE_PARAMETER_LIST_IS_NOT_INCLUDED; + msg->tft.numberofpacketfilters = n_pkfs; + + for (i = 0; i < msg->tft.numberofpacketfilters; i++) { + msg->tft.packetfilterlist.createtft[i] = (*pkfs)[i]; + } + + /* Optional */ + msg->presencemask = 0; + + LOG_TRACE(INFO, "ESM-SAP - Send Activate Dedicated EPS Bearer Context " + "Request message (pti=%d, ebi=%d)", + msg->proceduretransactionidentity, msg->epsbeareridentity); + + LOG_FUNC_RETURN(RETURNok); +} + +/**************************************************************************** + ** ** + ** Name: esm_send_deactivate_eps_bearer_context_request() ** + ** ** + ** Description: Builds Deactivate EPS Bearer Context Request message ** + ** ** + ** The deactivate EPS bearer context request message is sent ** + ** by the network to request deactivation of an active EPS ** + ** bearer context. ** + ** ** + ** Inputs: pti: Procedure transaction identity ** + ** ebi: EPS bearer identity ** + ** esm_cause: ESM cause code ** + ** Others: None ** + ** ** + ** Outputs: msg: The ESM message to be sent ** + ** Return: RETURNok, RETURNerror ** + ** Others: None ** + ** ** + ***************************************************************************/ +int esm_send_deactivate_eps_bearer_context_request(int pti, int ebi, + deactivate_eps_bearer_context_request_msg *msg, + int esm_cause) +{ + LOG_FUNC_IN; + + /* Mandatory - ESM message header */ + msg->protocoldiscriminator = EPS_SESSION_MANAGEMENT_MESSAGE; + msg->epsbeareridentity = ebi; + msg->messagetype = DEACTIVATE_EPS_BEARER_CONTEXT_REQUEST; + msg->proceduretransactionidentity = pti; + + /* Mandatory - ESM cause code */ + msg->esmcause = esm_cause; + /* Optional IEs */ + msg->presencemask = 0; + + LOG_TRACE(INFO, "ESM-SAP - Send Deactivate EPS Bearer Context Request " + "message (pti=%d, ebi=%d)", + msg->proceduretransactionidentity, msg->epsbeareridentity); + + LOG_FUNC_RETURN(RETURNok); +} + +/****************************************************************************/ +/********************* L O C A L F U N C T I O N S *********************/ +/****************************************************************************/ + diff --git a/openair-cn/NAS/MME/ESM/SAP/esm_send.h b/openair-cn/NAS/MME/ESM/SAP/esm_send.h new file mode 100644 index 0000000000..07c0af4635 --- /dev/null +++ b/openair-cn/NAS/MME/ESM/SAP/esm_send.h @@ -0,0 +1,119 @@ +/******************************************************************************* + OpenAirInterface + Copyright(c) 1999 - 2014 Eurecom + + OpenAirInterface is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + + OpenAirInterface is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with OpenAirInterface.The full GNU General Public License is + included in this distribution in the file called "COPYING". If not, + see . + + Contact Information + OpenAirInterface Admin: openair_admin@eurecom.fr + OpenAirInterface Tech : openair_tech@eurecom.fr + OpenAirInterface Dev : openair4g-devel@eurecom.fr + + Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. + + *******************************************************************************/ +/***************************************************************************** +Source esm_send.h + +Version 0.1 + +Date 2013/02/11 + +Product NAS stack + +Subsystem EPS Session Management + +Author Frederic Maurel + +Description Defines functions executed at the ESM Service Access + Point to send EPS Session Management messages to the + EPS Mobility Management sublayer. + +*****************************************************************************/ +#ifndef __ESM_SEND_H__ +#define __ESM_SEND_H__ + +#include "EsmStatus.h" + +#include "PdnConnectivityReject.h" +#include "PdnDisconnectReject.h" +#include "BearerResourceAllocationReject.h" +#include "BearerResourceModificationReject.h" + +#include "ActivateDefaultEpsBearerContextRequest.h" +#include "ActivateDedicatedEpsBearerContextRequest.h" +#include "ModifyEpsBearerContextRequest.h" +#include "DeactivateEpsBearerContextRequest.h" + +#include "EsmInformationRequest.h" + +/****************************************************************************/ +/********************* G L O B A L C O N S T A N T S *******************/ +/****************************************************************************/ + +/****************************************************************************/ +/************************ G L O B A L T Y P E S ************************/ +/****************************************************************************/ + +/****************************************************************************/ +/******************** G L O B A L V A R I A B L E S ********************/ +/****************************************************************************/ + +/****************************************************************************/ +/****************** E X P O R T E D F U N C T I O N S ******************/ +/****************************************************************************/ + +/* + * -------------------------------------------------------------------------- + * Functions executed by both the UE and the MME to send ESM messages + * -------------------------------------------------------------------------- + */ +int esm_send_status(int pti, int ebi, esm_status_msg *msg, int esm_cause); + + +/* + * -------------------------------------------------------------------------- + * Functions executed by the MME to send ESM message to the UE + * -------------------------------------------------------------------------- + */ +/* + * Transaction related messages + * ---------------------------- + */ +int esm_send_pdn_connectivity_reject(int pti, pdn_connectivity_reject_msg *msg, + int esm_cause); + +int esm_send_pdn_disconnect_reject(int pti, pdn_disconnect_reject_msg *msg, + int esm_cause); + +/* + * Messages related to EPS bearer contexts + * --------------------------------------- + */ +int esm_send_activate_default_eps_bearer_context_request(int pti, int ebi, + activate_default_eps_bearer_context_request_msg *msg, const OctetString *apn, + const ProtocolConfigurationOptions *pco, int pdn_type, const OctetString *pdn_addr, + const EpsQualityOfService *qos, int esm_cause); + +int esm_send_activate_dedicated_eps_bearer_context_request(int pti, int ebi, + activate_dedicated_eps_bearer_context_request_msg *msg, int linked_ebi, + const EpsQualityOfService *qos, PacketFilters *pkfs, int n_pkfs); + +int esm_send_deactivate_eps_bearer_context_request(int pti, int ebi, + deactivate_eps_bearer_context_request_msg *msg, int esm_cause); + +#endif /* __ESM_SEND_H__*/ diff --git a/openair-cn/NAS/EURECOM-NAS/src/esm/esmData.h b/openair-cn/NAS/MME/ESM/esmData.h similarity index 91% rename from openair-cn/NAS/EURECOM-NAS/src/esm/esmData.h rename to openair-cn/NAS/MME/ESM/esmData.h index 4718597254..a5f839c1dc 100644 --- a/openair-cn/NAS/EURECOM-NAS/src/esm/esmData.h +++ b/openair-cn/NAS/MME/ESM/esmData.h @@ -49,9 +49,7 @@ Description Defines internal private data handled by EPS Session #include "OctetString.h" #include "EpsBearerIdentity.h" -#ifdef NAS_MME #include "mme_api.h" -#endif #if defined(NAS_BUILT_IN_EPC) # include "tree.h" @@ -83,49 +81,38 @@ typedef enum { ESM_EBR_INACTIVE, /* No EPS bearer context exists */ ESM_EBR_ACTIVE, /* The EPS bearer context is active, * in the UE, in the network */ -#ifdef NAS_MME ESM_EBR_INACTIVE_PENDING, /* The network has initiated an EPS bearer * context deactivation towards the UE */ ESM_EBR_MODIFY_PENDING, /* The network has initiated an EPS bearer * context modification towards the UE */ ESM_EBR_ACTIVE_PENDING, /* The network has initiated an EPS bearer * context activation towards the UE */ -#endif ESM_EBR_STATE_MAX } esm_ebr_state; -#ifdef NAS_MME /* ESM message timer retransmission data */ -typedef struct { +typedef struct esm_ebr_timer_data_s { void *ctx; unsigned int ueid; /* Lower layers UE identifier */ unsigned int ebi; /* EPS bearer identity */ unsigned int count; /* Retransmission counter */ OctetString msg; /* Encoded ESM message to re-transmit */ } esm_ebr_timer_data_t; -#endif /* * ----------------------- * EPS bearer context data * ----------------------- */ -typedef struct { +typedef struct esm_ebr_context_s { unsigned char ebi; /* EPS bearer identity */ esm_ebr_state status; /* EPS bearer context status */ -#ifdef NAS_UE - int is_default_ebr; /* TRUE if the bearer context is associated - * to a default EPS bearer */ - char cid; /* Identifier of the PDN context the EPS - * bearer context has been assigned to */ -#endif -#ifdef NAS_MME + struct nas_timer_t timer; /* Retransmission timer */ esm_ebr_timer_data_t *args; /* Retransmission timer parameters data */ -#endif } esm_ebr_context_t; -typedef struct { +typedef struct esm_ebr_data_s { unsigned char index; /* Index of the next EPS bearer context * identity to be used */ #define ESM_EBR_DATA_SIZE (ESM_EBI_MAX - ESM_EBI_MIN + 1) @@ -147,7 +134,7 @@ typedef struct { * butes. An EPS bearer corresponds to one Quality of Service policy * applied within the EPC and E-UTRAN. */ -typedef struct { +typedef struct esm_bearer_s { int bid; /* Identifier of the EPS bearer */ unsigned int ebi; /* EPS bearer identity */ network_qos_t qos; /* EPS bearer level QoS parameters */ @@ -161,7 +148,7 @@ typedef struct { * one IPv4 address and/or one IPv6 prefix and a PDN represented by * an Access Point Name (APN). */ -typedef struct { +typedef struct esm_pdn_s { unsigned int pti; /* Identity of the procedure transaction executed * to activate the PDN connection entry */ int is_emergency; /* Emergency bearer services indicator */ @@ -211,30 +198,18 @@ typedef struct esm_data_context_s { esm_ebr_data_t ebr; } esm_data_context_t; -/* - * -------------------------------------------------------------------------- - * ESM internal data handled by EPS Session Management sublayer in the UE - * -------------------------------------------------------------------------- - */ -#ifdef NAS_UE -/* - * Structure of the ESM data - * ------------------------- - */ -typedef esm_data_context_t esm_data_t; -#endif // NAS_UE + /* * -------------------------------------------------------------------------- * ESM internal data handled by EPS Session Management sublayer in the MME * -------------------------------------------------------------------------- */ -#ifdef NAS_MME /* * Structure of the ESM data * ------------------------- */ -typedef struct { +typedef struct esm_data_s { /* * MME configuration * ----------------- @@ -264,7 +239,6 @@ void esm_data_context_add(esm_data_t *esm_data, struct esm_data_context_s *elm); # endif -#endif //NAS_MME /****************************************************************************/ /******************** G L O B A L V A R I A B L E S ********************/ diff --git a/openair-cn/NAS/EURECOM-NAS/src/esm/esm_ebr.c b/openair-cn/NAS/MME/ESM/esm_ebr.c similarity index 87% rename from openair-cn/NAS/EURECOM-NAS/src/esm/esm_ebr.c rename to openair-cn/NAS/MME/ESM/esm_ebr.c index 1b24bee2f6..720e69a5eb 100644 --- a/openair-cn/NAS/EURECOM-NAS/src/esm/esm_ebr.c +++ b/openair-cn/NAS/MME/ESM/esm_ebr.c @@ -53,17 +53,14 @@ Description Defines functions used to handle state of EPS bearer contexts #include "nas_log.h" #include "mme_api.h" +#include "msc.h" /****************************************************************************/ /**************** E X T E R N A L D E F I N I T I O N S ****************/ /****************************************************************************/ -#ifdef NAS_UE -#define ESM_EBR_NB_UE_MAX 1 -#endif -#ifdef NAS_MME + #define ESM_EBR_NB_UE_MAX (MME_API_NB_UE_MAX + 1) -#endif /****************************************************************************/ /******************* L O C A L D E F I N I T I O N S *******************/ @@ -73,11 +70,9 @@ Description Defines functions used to handle state of EPS bearer contexts static const char *_esm_ebr_state_str[ESM_EBR_STATE_MAX] = { "BEARER CONTEXT INACTIVE", "BEARER CONTEXT ACTIVE", -#ifdef NAS_MME "BEARER CONTEXT INACTIVE PENDING", "BEARER CONTEXT MODIFY PENDING", "BEARER CONTEXT ACTIVE PENDING" -#endif }; /* @@ -95,37 +90,12 @@ static esm_ebr_data_t _esm_ebr_data[ESM_EBR_NB_UE_MAX]; * User notification data * ---------------------- */ -#ifdef NAS_UE -/* User notification callback executed whenever an EPS bearer context becomes - * active or inactive */ -static esm_indication_callback_t _esm_ebr_callback; -/* PDN connection and EPS bearer status [NW/UE][Dedicated/Default][status] */ -static const network_pdn_state_t _esm_ebr_pdn_state[2][2][2] = { - /* Status modification triggerer by the network */ - { - /* Dedicated EPS bearer */ - {NET_PDN_NW_DEDICATED_DEACT, NET_PDN_NW_DEDICATED_ACT}, - /* Default EPS bearer */ - {NET_PDN_NW_DEFAULT_DEACT, 0} - }, - /* Status modification triggered by the UE */ - { - /* Dedicated EPS bearer */ - {NET_PDN_MT_DEDICATED_DEACT, NET_PDN_MT_DEDICATED_ACT}, - /* Default EPS bearer */ - {NET_PDN_MT_DEFAULT_DEACT, NET_PDN_MT_DEFAULT_ACT} - } -}; -#endif + /* Returns the index of the next available entry in the list of EPS bearer * context data */ -#ifdef NAS_MME static int _esm_ebr_get_available_entry(emm_data_context_t *ctx); -#endif -#ifdef NAS_UE -static int _esm_ebr_get_available_entry(unsigned int ueid); -#endif + /****************************************************************************/ /****************** E X P O R T E D F U N C T I O N S ******************/ @@ -145,10 +115,7 @@ static int _esm_ebr_get_available_entry(unsigned int ueid); ** Others: _esm_ebr_data ** ** ** ***************************************************************************/ -void esm_ebr_initialize( -#ifdef NAS_UE - esm_indication_callback_t cb -#endif +void esm_ebr_initialize(void ) { #if !defined(NAS_BUILT_IN_EPC) @@ -164,12 +131,6 @@ void esm_ebr_initialize( _esm_ebr_data[ueid].context[i] = NULL; } } - -# ifdef NAS_UE - /* Initialize the user notification callback */ - _esm_ebr_callback = *cb; -# endif - LOG_FUNC_OUT; #endif } @@ -195,12 +156,7 @@ void esm_ebr_initialize( ** Others: _esm_ebr_data ** ** ** ***************************************************************************/ -#ifdef NAS_UE -int esm_ebr_assign(int ebi, int cid, int default_ebr) -#endif -#ifdef NAS_MME int esm_ebr_assign(emm_data_context_t *ctx, int ebi) -#endif { esm_ebr_context_t *ebr_ctx = NULL; unsigned int ueid = 0; @@ -208,11 +164,7 @@ int esm_ebr_assign(emm_data_context_t *ctx, int ebi) LOG_FUNC_IN; -#if defined(NAS_UE) - ebr_ctx = _esm_ebr_data[ueid].context[ebi - ESM_EBI_MIN]; -#else ebr_ctx = ctx->esm_data_ctx.ebr.context[ebi - ESM_EBI_MIN]; -#endif if (ebi != ESM_EBI_UNASSIGNED) { if ( (ebi < ESM_EBI_MIN) || (ebi > ESM_EBI_MAX) ) { @@ -227,11 +179,7 @@ int esm_ebr_assign(emm_data_context_t *ctx, int ebi) i = ebi - ESM_EBI_MIN; } else { /* Search for an available EPS bearer identity */ -#ifdef NAS_UE - i = _esm_ebr_get_available_entry(ueid); -#else i = _esm_ebr_get_available_entry(ctx); -#endif if (i < 0) { LOG_FUNC_RETURN(ESM_EBI_UNASSIGNED); @@ -256,28 +204,17 @@ int esm_ebr_assign(emm_data_context_t *ctx, int ebi) #endif /* Store the index of the next available EPS bearer identity */ -#ifdef NAS_MME ctx->esm_data_ctx.ebr.index = i + 1; -#else - _esm_ebr_data[ueid].index = i + 1; -#endif + /* Set the EPS bearer identity */ ebr_ctx->ebi = ebi; /* Set the EPS bearer context status to INACTIVE */ ebr_ctx->status = ESM_EBR_INACTIVE; -#ifdef NAS_UE - /* Set the default EPS bearer indicator */ - ebr_ctx->is_default_ebr = default_ebr; - /* Set the identifier of the PDN context the EPS bearer is assigned to */ - ebr_ctx->cid = cid; -#endif -#ifdef NAS_MME /* Disable the retransmission timer */ ebr_ctx->timer.id = NAS_TIMER_INACTIVE_ID; /* Setup retransmission timer parameters */ ebr_ctx->args = NULL; -#endif LOG_TRACE(INFO, "ESM-FSM - EPS bearer context %d assigned", ebi); LOG_FUNC_RETURN(ebr_ctx->ebi); @@ -302,14 +239,9 @@ int esm_ebr_assign(emm_data_context_t *ctx, int ebi) ** ** ***************************************************************************/ int esm_ebr_release( -#ifdef NAS_MME emm_data_context_t *ctx, -#endif int ebi) { -#ifdef NAS_UE - unsigned int ueid = 0; -#endif esm_ebr_context_t *ebr_ctx; LOG_FUNC_IN; @@ -319,11 +251,7 @@ int esm_ebr_release( } /* Get EPS bearer context data */ -#if defined(NAS_MME) ebr_ctx = ctx->esm_data_ctx.ebr.context[ebi - ESM_EBI_MIN]; -#else - ebr_ctx = _esm_ebr_data[ueid].context[ebi - ESM_EBI_MIN]; -#endif if ( (ebr_ctx == NULL) || (ebr_ctx->ebi != ebi) ) { /* EPS bearer context not assigned */ @@ -336,13 +264,12 @@ int esm_ebr_release( LOG_FUNC_RETURN (RETURNerror); } -#ifdef NAS_MME - /* Stop the retransmission timer if still running */ if (ebr_ctx->timer.id != NAS_TIMER_INACTIVE_ID) { LOG_TRACE(INFO, "ESM-FSM - Stop retransmission timer %d", ebr_ctx->timer.id); ebr_ctx->timer.id = nas_timer_stop(ebr_ctx->timer.id); + MSC_LOG_EVENT(MSC_NAS_ESM_MME, "0 Timer %x ebi %u stopped",ebr_ctx->timer.id, ebi); } /* Release the retransmisison timer parameters */ @@ -355,8 +282,6 @@ int esm_ebr_release( ebr_ctx->args = NULL; } -#endif - /* Release EPS bearer context data */ free(ebr_ctx); ebr_ctx = NULL; @@ -365,7 +290,6 @@ int esm_ebr_release( LOG_FUNC_RETURN (RETURNok); } -#ifdef NAS_MME /**************************************************************************** ** ** ** Name: esm_ebr_start_timer() ** @@ -413,6 +337,7 @@ int esm_ebr_start_timer(emm_data_context_t *ctx, int ebi, const OctetString *msg if (ebr_ctx->args) { /* Re-start the retransmission timer */ ebr_ctx->timer.id = nas_timer_restart(ebr_ctx->timer.id); + MSC_LOG_EVENT(MSC_NAS_ESM_MME, "0 Timer %x ebi %u restarted",ebr_ctx->timer.id, ebi); } } else { /* Setup the retransmission timer parameters */ @@ -437,6 +362,7 @@ int esm_ebr_start_timer(emm_data_context_t *ctx, int ebi, const OctetString *msg /* Setup the retransmission timer to expire at the given * time interval */ ebr_ctx->timer.id = nas_timer_start(sec, cb, ebr_ctx->args); + MSC_LOG_EVENT(MSC_NAS_ESM_MME, "0 Timer %x ebi %u started",ebr_ctx->timer.id, ebi); ebr_ctx->timer.sec = sec; } } @@ -493,6 +419,7 @@ int esm_ebr_stop_timer(emm_data_context_t *ctx, int ebi) LOG_TRACE(INFO, "ESM-FSM - Stop retransmission timer %d", ebr_ctx->timer.id); ebr_ctx->timer.id = nas_timer_stop(ebr_ctx->timer.id); + MSC_LOG_EVENT(MSC_NAS_ESM_MME, "0 Timer %x ebi %u stopped",ebr_ctx->timer.id, ebi); } /* Release the retransmisison timer parameters */ @@ -552,7 +479,6 @@ int esm_ebr_get_pending_ebi(emm_data_context_t *ctx, esm_ebr_state status) /* EPS bearer context entry not found */ LOG_FUNC_RETURN (ESM_EBI_UNASSIGNED); } -#endif /**************************************************************************** ** ** @@ -575,9 +501,7 @@ int esm_ebr_get_pending_ebi(emm_data_context_t *ctx, esm_ebr_state status) ** ** ***************************************************************************/ int esm_ebr_set_status( -#ifdef NAS_MME emm_data_context_t *ctx, -#endif int ebi, esm_ebr_state status, int ue_requested) { esm_ebr_context_t *ebr_ctx; @@ -585,31 +509,17 @@ int esm_ebr_set_status( LOG_FUNC_IN; -#ifdef NAS_UE - unsigned int ueid = 0; - - if (ueid >= ESM_EBR_NB_UE_MAX) { - LOG_FUNC_RETURN (RETURNerror); - } - -#else - if (ctx == NULL) { LOG_FUNC_RETURN (RETURNerror); } -#endif if ( (ebi < ESM_EBI_MIN) || (ebi > ESM_EBI_MAX) ) { LOG_FUNC_RETURN (RETURNerror); } /* Get EPS bearer context data */ -#ifdef NAS_UE - ebr_ctx = _esm_ebr_data[ueid].context[ebi - ESM_EBI_MIN]; -#else ebr_ctx = ctx->esm_data_ctx.ebr.context[ebi - ESM_EBI_MIN]; -#endif if ( (ebr_ctx == NULL) || (ebr_ctx->ebi != ebi) ) { /* EPS bearer context not assigned */ @@ -621,20 +531,18 @@ int esm_ebr_set_status( old_status = ebr_ctx->status; if (status < ESM_EBR_STATE_MAX) { - LOG_TRACE(INFO, "ESM-FSM - Status of EPS bearer context %d changed:" - " %s ===> %s", ebi, - _esm_ebr_state_str[old_status], _esm_ebr_state_str[status]); - if (status != old_status) { + LOG_TRACE(INFO, "ESM-FSM - Status of EPS bearer context %d changed:" + " %s ===> %s", ebi, + _esm_ebr_state_str[old_status], _esm_ebr_state_str[status]); + MSC_LOG_EVENT(MSC_NAS_ESM_MME, "0 ESM state %s => %s "NAS_UE_ID_FMT" ", + _esm_ebr_state_str[old_status], _esm_ebr_state_str[status], ctx->ueid); + ebr_ctx->status = status; -#ifdef NAS_UE - /* - * Notify the user that the state of the EPS bearer has changed - */ - (*_esm_ebr_callback)(ebr_ctx->cid, - _esm_ebr_pdn_state[ue_requested][ebr_ctx->is_default_ebr][status]); -#endif LOG_FUNC_RETURN (RETURNok); + } else { + LOG_TRACE(INFO, "ESM-FSM - Status of EPS bearer context %d unchanged:" + " %s ", ebi, _esm_ebr_state_str[status]); } } @@ -658,7 +566,6 @@ int esm_ebr_set_status( ** Others: None ** ** ** ***************************************************************************/ -#ifdef NAS_MME esm_ebr_state esm_ebr_get_status( emm_data_context_t *ctx, int ebi) @@ -679,31 +586,7 @@ esm_ebr_state esm_ebr_get_status( return (ctx->esm_data_ctx.ebr.context[ebi - ESM_EBI_MIN]->status); } -#endif -#ifdef NAS_UE -esm_ebr_state esm_ebr_get_status( - int ebi) -{ - unsigned int ueid = 0; - - if ( (ebi < ESM_EBI_MIN) || (ebi > ESM_EBI_MAX) ) { - return (ESM_EBR_INACTIVE); - } - - if (_esm_ebr_data[ueid].context[ebi - ESM_EBI_MIN] == NULL) { - /* EPS bearer context not allocated */ - return (ESM_EBR_INACTIVE); - } - - if (_esm_ebr_data[ueid].context[ebi - ESM_EBI_MIN]->ebi != ebi) { - /* EPS bearer context not assigned */ - return (ESM_EBR_INACTIVE); - } - - return (_esm_ebr_data[ueid].context[ebi - ESM_EBI_MIN]->status); -} -#endif /**************************************************************************** ** ** @@ -742,22 +625,13 @@ int esm_ebr_is_reserved(int ebi) ** ** ***************************************************************************/ int esm_ebr_is_not_in_use( -#ifdef NAS_MME emm_data_context_t *ctx, -#endif int ebi) { -#ifdef NAS_UE - unsigned int ueid = 0; - return ( (ebi == ESM_EBI_UNASSIGNED) || - (_esm_ebr_data[ueid].context[ebi - ESM_EBI_MIN] == NULL) || - (_esm_ebr_data[ueid].context[ebi - ESM_EBI_MIN]->ebi) != ebi); -#else return ( (ebi == ESM_EBI_UNASSIGNED) || (ctx->esm_data_ctx.ebr.context[ebi - ESM_EBI_MIN] == NULL) || (ctx->esm_data_ctx.ebr.context[ebi - ESM_EBI_MIN]->ebi) != ebi); -#endif } /****************************************************************************/ @@ -781,7 +655,6 @@ int esm_ebr_is_not_in_use( ** Others: None ** ** ** ***************************************************************************/ -#ifdef NAS_MME static int _esm_ebr_get_available_entry(emm_data_context_t *ctx) { int i; @@ -805,29 +678,3 @@ static int _esm_ebr_get_available_entry(emm_data_context_t *ctx) /* No available EBI entry found */ return (-1); } -#endif -#ifdef NAS_UE -static int _esm_ebr_get_available_entry(unsigned int ueid) -{ - int i; - - for (i = _esm_ebr_data[ueid].index; i < ESM_EBR_DATA_SIZE; i++) { - if (_esm_ebr_data[ueid].context[i] != NULL) { - continue; - } - - return i; - } - - for (i = 0; i < _esm_ebr_data[ueid].index; i++) { - if (_esm_ebr_data[ueid].context[i] != NULL) { - continue; - } - - return i; - } - - /* No available EBI entry found */ - return (-1); -} -#endif diff --git a/openair-cn/NAS/EURECOM-NAS/src/esm/esm_ebr.h b/openair-cn/NAS/MME/ESM/esm_ebr.h similarity index 90% rename from openair-cn/NAS/EURECOM-NAS/src/esm/esm_ebr.h rename to openair-cn/NAS/MME/ESM/esm_ebr.h index 15f7523b3f..bacd62802c 100644 --- a/openair-cn/NAS/EURECOM-NAS/src/esm/esm_ebr.h +++ b/openair-cn/NAS/MME/ESM/esm_ebr.h @@ -47,11 +47,6 @@ Description Defines functions used to handle state of EPS bearer contexts #define __ESM_EBR_H__ #include "OctetString.h" - -#ifdef NAS_UE -#include "networkDef.h" -#endif - #include "nas_timer.h" /****************************************************************************/ @@ -75,18 +70,6 @@ Description Defines functions used to handle state of EPS bearer contexts int esm_ebr_is_reserved(int ebi); -#ifdef NAS_UE -void esm_ebr_initialize(esm_indication_callback_t cb); -int esm_ebr_assign(int ebi, int cid, int default_ebr); -int esm_ebr_release(int ebi); - -int esm_ebr_set_status(int ebi, esm_ebr_state status, int ue_requested); -esm_ebr_state esm_ebr_get_status(int ebi); - -int esm_ebr_is_not_in_use(int ebi); -#endif - -#ifdef NAS_MME void esm_ebr_initialize(void); int esm_ebr_assign(emm_data_context_t *ctx, int ebi); int esm_ebr_release(emm_data_context_t *ctx, int ebi); @@ -102,6 +85,5 @@ int esm_ebr_set_status(emm_data_context_t *ctx, int ebi, esm_ebr_state status, esm_ebr_state esm_ebr_get_status(emm_data_context_t *ctx, int ebi); int esm_ebr_is_not_in_use(emm_data_context_t *ctx, int ebi); -#endif #endif /* __ESM_EBR_H__*/ diff --git a/openair-cn/NAS/MME/ESM/esm_ebr_context.c b/openair-cn/NAS/MME/ESM/esm_ebr_context.c new file mode 100644 index 0000000000..db0d99500f --- /dev/null +++ b/openair-cn/NAS/MME/ESM/esm_ebr_context.c @@ -0,0 +1,431 @@ +/******************************************************************************* + OpenAirInterface + Copyright(c) 1999 - 2014 Eurecom + + OpenAirInterface is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + + OpenAirInterface is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with OpenAirInterface.The full GNU General Public License is + included in this distribution in the file called "COPYING". If not, + see . + + Contact Information + OpenAirInterface Admin: openair_admin@eurecom.fr + OpenAirInterface Tech : openair_tech@eurecom.fr + OpenAirInterface Dev : openair4g-devel@eurecom.fr + + Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. + + *******************************************************************************/ +/***************************************************************************** +Source esm_ebr_context.h + +Version 0.1 + +Date 2013/05/28 + +Product NAS stack + +Subsystem EPS Session Management + +Author Frederic Maurel + +Description Defines functions used to handle EPS bearer contexts. + +*****************************************************************************/ +#include // malloc, free +#include // memset + +#include "commonDef.h" +#include "nas_log.h" + +#include "emmData.h" +#include "esm_ebr.h" + +#include "esm_ebr_context.h" + +#include "emm_sap.h" + +#if defined(ENABLE_ITTI) +# include "assertions.h" +#endif + + + +/****************************************************************************/ +/**************** E X T E R N A L D E F I N I T I O N S ****************/ +/****************************************************************************/ + +/****************************************************************************/ +/******************* L O C A L D E F I N I T I O N S *******************/ +/****************************************************************************/ + + +/****************************************************************************/ +/****************** E X P O R T E D F U N C T I O N S ******************/ +/****************************************************************************/ + +/**************************************************************************** + ** ** + ** Name: esm_ebr_context_create() ** + ** ** + ** Description: Creates a new EPS bearer context to the PDN with the spe- ** + ** cified PDN connection identifier ** + ** ** + ** Inputs: ueid: UE identifier ** + ** pid: PDN connection identifier ** + ** ebi: EPS bearer identity ** + ** is_default: TRUE if the new bearer is a default EPS ** + ** bearer context ** + ** esm_qos: EPS bearer level QoS parameters ** + ** tft: Traffic flow template parameters ** + ** Others: _esm_data ** + ** ** + ** Outputs: None ** + ** Return: The EPS bearer identity of the default EPS ** + ** bearer associated to the new EPS bearer ** + ** context if successfully created; ** + ** UNASSIGN EPS bearer value otherwise. ** + ** Others: _esm_data ** + ** ** + ***************************************************************************/ +int esm_ebr_context_create( + emm_data_context_t *ctx, + int pid, int ebi, int is_default, + const network_qos_t *qos, const network_tft_t *tft) +{ + int bid = 0; + esm_data_context_t *esm_ctx = NULL; + esm_pdn_t *pdn = NULL; + unsigned int ueid = 0; + + LOG_FUNC_IN; + + +# if defined(NAS_BUILT_IN_EPC) + esm_ctx = &ctx->esm_data_ctx; +# else + + if (ueid < ESM_DATA_NB_UE_MAX) { + ctx = _esm_data.ctx[ueid]; + } else { + LOG_FUNC_RETURN (ESM_EBI_UNASSIGNED); + } + +# endif + + bid = ESM_DATA_EPS_BEARER_MAX; + + LOG_TRACE(INFO, "ESM-PROC - Create new %s EPS bearer context (ebi=%d) " + "for PDN connection (pid=%d)", + (is_default)? "default" : "dedicated", ebi, pid); + + if (pid < ESM_DATA_PDN_MAX) { + if (pid != esm_ctx->pdn[pid].pid) { + LOG_TRACE(ERROR, "ESM-PROC - PDN connection identifier %d is " + "not valid", pid); + } else if (esm_ctx->pdn[pid].data == NULL) { + LOG_TRACE(ERROR, "ESM-PROC - PDN connection %d has not been " + "allocated", pid); + } + /* Check the total number of active EPS bearers */ + else if (esm_ctx->n_ebrs > ESM_DATA_EPS_BEARER_TOTAL) { + LOG_TRACE(WARNING, "ESM-PROC - The total number of active EPS" + "bearers is exceeded"); + } else { + /* Get the PDN connection entry */ + pdn = esm_ctx->pdn[pid].data; + + if (is_default) { + /* Default EPS bearer entry is defined at index 0 */ + bid = 0; + + if (pdn->bearer[bid] != NULL) { + LOG_TRACE(ERROR, "ESM-PROC - A default EPS bearer context " + "is already allocated"); + LOG_FUNC_RETURN (ESM_EBI_UNASSIGNED); + } + } else { + /* Search for an available EPS bearer context entry */ + for (bid = 1; bid < ESM_DATA_EPS_BEARER_MAX; bid++) { + if (pdn->bearer[bid] != NULL) { + continue; + } + + break; + } + } + } + } + + if (bid < ESM_DATA_EPS_BEARER_MAX) { + /* Create new EPS bearer context */ + esm_bearer_t *ebr = (esm_bearer_t *)malloc(sizeof(esm_bearer_t)); + + if (ebr != NULL) { + memset(ebr, 0 , sizeof(esm_bearer_t)); + /* Increment the total number of active EPS bearers */ + esm_ctx->n_ebrs += 1; + /* Increment the number of EPS bearer for this PDN connection */ + pdn->n_bearers += 1; + /* Setup the EPS bearer data */ + pdn->bearer[bid] = ebr; + ebr->bid = bid; + ebr->ebi = ebi; + + if (qos != NULL) { + /* EPS bearer level QoS parameters */ + ebr->qos = *qos; + } + + if ( (tft != NULL) && (tft->n_pkfs < NET_PACKET_FILTER_MAX) ) { + int i; + + /* Traffic flow template parameters */ + for (i = 0; i < tft->n_pkfs; i++) { + ebr->tft.pkf[i] = + (network_pkf_t *)malloc(sizeof(network_pkf_t)); + + if (ebr->tft.pkf[i] != NULL) { + *(ebr->tft.pkf[i]) = *(tft->pkf[i]); + ebr->tft.n_pkfs += 1; + } + } + } + + if (is_default) { + /* Set the PDN connection activation indicator */ + esm_ctx->pdn[pid].is_active = TRUE; + + /* Update the emergency bearer services indicator */ + if (pdn->is_emergency) { + esm_ctx->emergency = TRUE; + } + + + } + + /* Return the EPS bearer identity of the default EPS bearer + * associated to the new EPS bearer context */ + LOG_FUNC_RETURN (pdn->bearer[0]->ebi); + } + + LOG_TRACE(WARNING, "ESM-PROC - Failed to create new EPS bearer " + "context (ebi=%d)", ebi); + } + + LOG_FUNC_RETURN (ESM_EBI_UNASSIGNED); +} + +/**************************************************************************** + ** ** + ** Name: esm_ebr_context_release() ** + ** ** + ** Description: Releases EPS bearer context entry previously allocated ** + ** to the EPS bearer with the specified EPS bearer identity ** + ** ** + ** Inputs: ueid: UE identifier ** + ** ebi: EPS bearer identity ** + ** Others: _esm_data ** + ** ** + ** Outputs: pid: Identifier of the PDN connection entry the ** + ** EPS bearer context belongs to ** + ** bid: Identifier of the released EPS bearer con- ** + ** text entry ** + ** Return: The EPS bearer identity associated to the ** + ** EPS bearer context if successfully relea- ** + ** sed; UNASSIGN EPS bearer value otherwise. ** + ** Others: _esm_data ** + ** ** + ***************************************************************************/ +int esm_ebr_context_release( + emm_data_context_t *ctx, + int ebi, int *pid, int *bid) +{ + int found = FALSE; + esm_pdn_t *pdn = NULL; + esm_data_context_t *esm_ctx; + + unsigned int ueid = 0; + + LOG_FUNC_IN; + + + +# if defined(NAS_BUILT_IN_EPC) + esm_ctx = &ctx->esm_data_ctx; +# else + + if (ueid < ESM_DATA_NB_UE_MAX) { + ctx = &_esm_data.ctx[ueid]; + } else { + LOG_FUNC_RETURN (ESM_EBI_UNASSIGNED); + } + +# endif + + if (ebi != ESM_EBI_UNASSIGNED) { + /* + * The identity of the EPS bearer to released is given; + * Release the EPS bearer context entry that match the specified EPS + * bearer identity + */ + + /* Search for active PDN connection */ + for (*pid = 0; *pid < ESM_DATA_PDN_MAX; (*pid)++) { + if ( !esm_ctx->pdn[*pid].is_active ) { + continue; + } + + /* An active PDN connection is found */ + if (esm_ctx->pdn[*pid].data != NULL) { + pdn = esm_ctx->pdn[*pid].data; + + /* Search for the specified EPS bearer context entry */ + for (*bid = 0; *bid < pdn->n_bearers; (*bid)++) { + if (pdn->bearer[*bid] != NULL) { + if (pdn->bearer[*bid]->ebi != ebi) { + continue; + } + + /* The EPS bearer context entry is found */ + found = TRUE; + break; + } + } + } + + if (found) { + break; + } + } + } else { + /* + * The identity of the EPS bearer to released is not given; + * Release the EPS bearer context entry allocated with the EPS + * bearer context identifier (bid) to establish connectivity to + * the PDN identified by the PDN connection identifier (pid). + * Default EPS bearer to a given PDN is always identified by the + * first EPS bearer context entry at index bid = 0 + */ + if (*pid < ESM_DATA_PDN_MAX) { + if (*pid != esm_ctx->pdn[*pid].pid) { + LOG_TRACE(ERROR, "ESM-PROC - PDN connection identifier %d " + "is not valid", *pid); + } else if (!esm_ctx->pdn[*pid].is_active) { + LOG_TRACE(WARNING,"ESM-PROC - PDN connection %d is not active", + *pid); + } else if (esm_ctx->pdn[*pid].data == NULL) { + LOG_TRACE(ERROR, "ESM-PROC - PDN connection %d has not been " + "allocated", *pid); + } else { + pdn = esm_ctx->pdn[*pid].data; + + if (pdn->bearer[*bid] != NULL) { + ebi = pdn->bearer[*bid]->ebi; + found = TRUE; + } + } + } + } + + if (found) { + int i, j; + + /* + * Delete the specified EPS bearer context entry + */ + if (pdn->bearer[*bid]->bid != *bid) { + LOG_TRACE(ERROR, "ESM-PROC - EPS bearer identifier %d is " + "not valid", *bid); + LOG_FUNC_RETURN (ESM_EBI_UNASSIGNED); + } + + LOG_TRACE(WARNING, "ESM-PROC - Release EPS bearer context " + "(ebi=%d)", ebi); + + /* Delete the TFT */ + for (i = 0; i < pdn->bearer[*bid]->tft.n_pkfs; i++) { + free(pdn->bearer[*bid]->tft.pkf[i]); + } + + /* Release the specified EPS bearer data */ + free(pdn->bearer[*bid]); + pdn->bearer[*bid] = NULL; + /* Decrement the number of EPS bearer context allocated + * to the PDN connection */ + pdn->n_bearers -= 1; + /* Decrement the total number of active EPS bearers */ + esm_ctx->n_ebrs -= 1; + + if (*bid == 0) { + /* 3GPP TS 24.301, section 6.4.4.3, 6.4.4.6 + * If the EPS bearer identity is that of the default bearer to a + * PDN, the UE shall delete all EPS bearer contexts associated to + * that PDN connection. + */ + for (i = 1; pdn->n_bearers > 0; i++) { + if (pdn->bearer[i]) { + + LOG_TRACE(WARNING, "ESM-PROC - Release EPS bearer context " + "(ebi=%d)", pdn->bearer[i]->ebi); + + /* Delete the TFT */ + for (j = 0; j < pdn->bearer[i]->tft.n_pkfs; j++) { + free(pdn->bearer[i]->tft.pkf[j]); + } + + /* Set the EPS bearer context state to INACTIVE */ + + (void) esm_ebr_set_status(ctx, pdn->bearer[i]->ebi, + ESM_EBR_INACTIVE, TRUE); + + /* Release EPS bearer data */ + (void) esm_ebr_release(ctx, pdn->bearer[i]->ebi); + // esm_ebr_release() + /* Release dedicated EPS bearer data */ + free(pdn->bearer[i]); + pdn->bearer[i] = NULL; + /* Decrement the number of EPS bearer context allocated + * to the PDN connection */ + pdn->n_bearers -= 1; + /* Decrement the total number of active EPS bearers */ + esm_ctx->n_ebrs -= 1; + } + } + + /* Reset the PDN connection activation indicator */ + esm_ctx->pdn[*pid].is_active = FALSE; + + /* Update the emergency bearer services indicator */ + if (pdn->is_emergency) { + esm_ctx->emergency = FALSE; + } + } + + if (esm_ctx->n_ebrs == 0) { + /* TODO: Release the PDN connection and marked the UE as inactive + * in the network for EPS services (is_attached = FALSE) */ + } + + LOG_FUNC_RETURN (ebi); + } + + LOG_FUNC_RETURN (ESM_EBI_UNASSIGNED); +} + + +/****************************************************************************/ +/********************* L O C A L F U N C T I O N S *********************/ +/****************************************************************************/ + + diff --git a/openair-cn/NAS/MME/ESM/esm_ebr_context.h b/openair-cn/NAS/MME/ESM/esm_ebr_context.h new file mode 100644 index 0000000000..c59661d768 --- /dev/null +++ b/openair-cn/NAS/MME/ESM/esm_ebr_context.h @@ -0,0 +1,73 @@ +/******************************************************************************* + OpenAirInterface + Copyright(c) 1999 - 2014 Eurecom + + OpenAirInterface is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + + OpenAirInterface is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with OpenAirInterface.The full GNU General Public License is + included in this distribution in the file called "COPYING". If not, + see . + + Contact Information + OpenAirInterface Admin: openair_admin@eurecom.fr + OpenAirInterface Tech : openair_tech@eurecom.fr + OpenAirInterface Dev : openair4g-devel@eurecom.fr + + Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. + + *******************************************************************************/ +/***************************************************************************** +Source esm_ebr_context.h + +Version 0.1 + +Date 2013/05/28 + +Product NAS stack + +Subsystem EPS Session Management + +Author Frederic Maurel + +Description Defines functions used to handle EPS bearer contexts. + +*****************************************************************************/ +#ifndef __ESM_EBR_CONTEXT_H__ +#define __ESM_EBR_CONTEXT_H__ + +#include "networkDef.h" + +/****************************************************************************/ +/********************* G L O B A L C O N S T A N T S *******************/ +/****************************************************************************/ + +/****************************************************************************/ +/************************ G L O B A L T Y P E S ************************/ +/****************************************************************************/ + + +/****************************************************************************/ +/******************** G L O B A L V A R I A B L E S ********************/ +/****************************************************************************/ + +/****************************************************************************/ +/****************** E X P O R T E D F U N C T I O N S ******************/ +/****************************************************************************/ + + +int esm_ebr_context_create(emm_data_context_t *ctx, int pid, int ebi, int is_default, + const network_qos_t *qos, const network_tft_t *tft); + +int esm_ebr_context_release(emm_data_context_t *ctx, int ebi, int *pid, int *bid); + +#endif /* __ESM_EBR_CONTEXT_H__ */ diff --git a/openair-cn/NAS/EURECOM-NAS/src/esm/esm_ip.c b/openair-cn/NAS/MME/ESM/esm_ip.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/esm/esm_ip.c rename to openair-cn/NAS/MME/ESM/esm_ip.c diff --git a/openair-cn/NAS/MME/ESM/esm_main.c b/openair-cn/NAS/MME/ESM/esm_main.c new file mode 100644 index 0000000000..3e883527b9 --- /dev/null +++ b/openair-cn/NAS/MME/ESM/esm_main.c @@ -0,0 +1,134 @@ +/******************************************************************************* + OpenAirInterface + Copyright(c) 1999 - 2014 Eurecom + + OpenAirInterface is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + + OpenAirInterface is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with OpenAirInterface.The full GNU General Public License is + included in this distribution in the file called "COPYING". If not, + see . + + Contact Information + OpenAirInterface Admin: openair_admin@eurecom.fr + OpenAirInterface Tech : openair_tech@eurecom.fr + OpenAirInterface Dev : openair4g-devel@eurecom.fr + + Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. + + *******************************************************************************/ +/***************************************************************************** +Source esm_main.c + +Version 0.1 + +Date 2012/12/04 + +Product NAS stack + +Subsystem EPS Session Management + +Author Frederic Maurel + +Description Defines the EPS Session Management procedure call manager, + the main entry point for elementary ESM processing. + +*****************************************************************************/ + +#include "esm_main.h" +#include "commonDef.h" +#include "nas_log.h" + +#include "emmData.h" +#include "esmData.h" +#include "esm_pt.h" +#include "esm_ebr.h" + +/****************************************************************************/ +/**************** E X T E R N A L D E F I N I T I O N S ****************/ +/****************************************************************************/ + +/****************************************************************************/ +/******************* L O C A L D E F I N I T I O N S *******************/ +/****************************************************************************/ + +/****************************************************************************/ +/****************** E X P O R T E D F U N C T I O N S ******************/ +/****************************************************************************/ + + +/**************************************************************************** + ** ** + ** Name: esm_main_initialize() ** + ** ** + ** Description: Initializes ESM internal data ** + ** ** + ** Inputs: None ** + ** Others: None ** + ** ** + ** Outputs: None ** + ** Return: None ** + ** Others: None ** + ** ** + ***************************************************************************/ +void esm_main_initialize(void) +{ + int i; + + LOG_FUNC_IN; + + /* Retreive MME supported configuration data */ + if (mme_api_get_esm_config(&_esm_data.conf) != RETURNok) { + LOG_TRACE(ERROR, "ESM-MAIN - Failed to get MME configuration data"); + } + +# if !defined(NAS_BUILT_IN_EPC) + + /* Initialize ESM contexts */ + for (i = 0; i < ESM_DATA_NB_UE_MAX; i++) { + _esm_data.ctx[i] = NULL; + } + +# endif + + /* Initialize the EPS bearer context manager */ + esm_ebr_initialize(); + + LOG_FUNC_OUT; +} + +/**************************************************************************** + ** ** + ** Name: esm_main_cleanup() ** + ** ** + ** Description: Performs the EPS Session Management clean up procedure ** + ** ** + ** Inputs: None ** + ** Others: None ** + ** ** + ** Outputs: None ** + ** Return: None ** + ** Others: None ** + ** ** + ***************************************************************************/ +void esm_main_cleanup(void) +{ + LOG_FUNC_IN; + + LOG_FUNC_OUT; +} + + +/****************************************************************************/ +/********************* L O C A L F U N C T I O N S *********************/ +/****************************************************************************/ + diff --git a/openair3/RAL-LTE/RAL-DUMMY/INCLUDE/eRALlte_subscribe.h b/openair-cn/NAS/MME/ESM/esm_main.h similarity index 75% rename from openair3/RAL-LTE/RAL-DUMMY/INCLUDE/eRALlte_subscribe.h rename to openair-cn/NAS/MME/ESM/esm_main.h index 4f649998ae..feb80c1c45 100644 --- a/openair3/RAL-LTE/RAL-DUMMY/INCLUDE/eRALlte_subscribe.h +++ b/openair-cn/NAS/MME/ESM/esm_main.h @@ -23,23 +23,31 @@ OpenAirInterface Tech : openair_tech@eurecom.fr OpenAirInterface Dev : openair4g-devel@eurecom.fr - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE + Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. *******************************************************************************/ -/*! \file eRALlte_subscribe.h - * \brief - * \author BRIZZOLA Davide, GAUTHIER Lionel, MAUREL Frederic, WETTERWALD Michelle - * \date 2012 - * \version - * \note - * \bug - * \warning - */ +/***************************************************************************** +Source esm_main.h -#ifndef __RAL_LTE_SUBSCRIBE_H__ -#define __RAL_LTE_SUBSCRIBE_H__ +Version 0.1 -#include "MIH_C.h" +Date 2012/12/04 + +Product NAS stack + +Subsystem EPS Session Management + +Author Frederic Maurel + +Description Defines the EPS Session Management procedure call manager, + the main entry point for elementary ESM processing. + +*****************************************************************************/ + +#ifndef __ESM_MAIN_H__ +#define __ESM_MAIN_H__ + +#include "networkDef.h" /****************************************************************************/ /********************* G L O B A L C O N S T A N T S *******************/ @@ -57,8 +65,9 @@ /****************** E X P O R T E D F U N C T I O N S ******************/ /****************************************************************************/ -void eRALlte_subscribe_request(MIH_C_Message_Link_Event_Subscribe_request_t* msgP); -void eRALlte_unsubscribe_request(MIH_C_Message_Link_Event_Unsubscribe_request_t* msgP); +void esm_main_initialize(void); +void esm_main_cleanup(void); -#endif + +#endif /* __ESM_MAIN_H__*/ diff --git a/openair-cn/NAS/EURECOM-NAS/src/esm/esm_proc.h b/openair-cn/NAS/MME/ESM/esm_proc.h similarity index 73% rename from openair-cn/NAS/EURECOM-NAS/src/esm/esm_proc.h rename to openair-cn/NAS/MME/ESM/esm_proc.h index e44379a4df..3015be6543 100644 --- a/openair-cn/NAS/EURECOM-NAS/src/esm/esm_proc.h +++ b/openair-cn/NAS/MME/ESM/esm_proc.h @@ -49,6 +49,7 @@ Description Defines the EPS Session Management procedures executed at #include "networkDef.h" #include "OctetString.h" #include "emmData.h" +#include "ProtocolConfigurationOptions.h" /****************************************************************************/ /********************* G L O B A L C O N S T A N T S *******************/ @@ -58,15 +59,9 @@ Description Defines the EPS Session Management procedures executed at * ESM retransmission timers * ------------------------- */ -#ifdef NAS_UE -#define T3482_DEFAULT_VALUE 8 /* PDN connectivity request */ -#define T3492_DEFAULT_VALUE 6 /* PDN disconnect request */ -#endif -#ifdef NAS_MME #define T3485_DEFAULT_VALUE 8 /* Activate EPS bearer request */ #define T3495_DEFAULT_VALUE 8 /* Deactivate EPS bearer request */ -#endif /* Type of PDN address */ typedef enum { @@ -90,12 +85,7 @@ typedef enum { * Type of the ESM procedure callback executed when requested by the UE * or initiated by the network */ -#ifdef NAS_UE -typedef int (*esm_proc_procedure_t) (int, int, OctetString *, int); -#endif -#ifdef NAS_MME typedef int (*esm_proc_procedure_t) (int, emm_data_context_t *, int, OctetString *, int); -#endif /* EPS bearer level QoS parameters */ typedef network_qos_t esm_proc_qos_t; @@ -103,6 +93,8 @@ typedef network_qos_t esm_proc_qos_t; /* Traffic Flow Template for packet filtering */ typedef network_tft_t esm_proc_tft_t; +typedef ProtocolConfigurationOptions esm_proc_pco_t; + /* PDN connection and EPS bearer context data */ typedef struct { OctetString apn; @@ -110,6 +102,7 @@ typedef struct { OctetString pdn_addr; esm_proc_qos_t qos; esm_proc_tft_t tft; + esm_proc_pco_t pco; } esm_proc_data_t; /****************************************************************************/ @@ -125,17 +118,11 @@ typedef struct { * ESM status procedure * -------------------------------------------------------------------------- */ -#ifdef NAS_UE -int esm_proc_status_ind(int pti, int ebi, int *esm_cause); -int esm_proc_status(int is_standalone, int pti, OctetString *msg, - int sent_by_ue); -#endif -#ifdef NAS_MME + int esm_proc_status_ind(emm_data_context_t *ctx, int pti, int ebi, int *esm_cause); int esm_proc_status(int is_standalone, emm_data_context_t *ctx, int pti, OctetString *msg, int sent_by_ue); -#endif /* @@ -143,20 +130,7 @@ int esm_proc_status(int is_standalone, emm_data_context_t *ctx, int pti, * PDN connectivity procedure * -------------------------------------------------------------------------- */ -#ifdef NAS_UE -int esm_proc_pdn_connectivity(int cid, int to_define, - esm_proc_pdn_type_t pdn_type, const OctetString *apn, int is_emergency, - unsigned int *pti); -int esm_proc_pdn_connectivity_request(int is_standalone, int pti, - OctetString *msg, int sent_by_ue); -int esm_proc_pdn_connectivity_accept(int pti, esm_proc_pdn_type_t pdn_type, - const OctetString *pdn_address, const OctetString *apn, int *esm_cause); -int esm_proc_pdn_connectivity_reject(int pti, int *esm_cause); -int esm_proc_pdn_connectivity_complete(void); -int esm_proc_pdn_connectivity_failure(int is_pending); -#endif -#ifdef NAS_MME int esm_proc_pdn_connectivity_request(emm_data_context_t *ctx, int pti, esm_proc_pdn_request_t request_type, OctetString *apn, esm_proc_pdn_type_t pdn_type, OctetString *pdn_addr, esm_proc_qos_t *esm_qos, @@ -165,36 +139,24 @@ int esm_proc_pdn_connectivity_request(emm_data_context_t *ctx, int pti, int esm_proc_pdn_connectivity_reject(int is_standalone, emm_data_context_t *ctx, int ebi, OctetString *msg, int ue_triggered); int esm_proc_pdn_connectivity_failure(emm_data_context_t *ctx, int pid); -#endif /* * -------------------------------------------------------------------------- * PDN disconnect procedure * -------------------------------------------------------------------------- */ -#ifdef NAS_UE -int esm_proc_pdn_disconnect(int cid, unsigned int *pti, unsigned int *ebi); -int esm_proc_pdn_disconnect_request(int is_standalone, int pti, - OctetString *msg, int sent_by_ue); -int esm_proc_pdn_disconnect_accept(int pti, int *esm_cause); -int esm_proc_pdn_disconnect_reject(int pti, int *esm_cause); -#endif - -#ifdef NAS_MME int esm_proc_pdn_disconnect_request(emm_data_context_t *ctx, int pti, int *esm_cause); int esm_proc_pdn_disconnect_accept(emm_data_context_t *ctx, int pid, int *esm_cause); int esm_proc_pdn_disconnect_reject(int is_standalone, emm_data_context_t *ctx, int ebi, OctetString *msg, int ue_triggered); -#endif /* * -------------------------------------------------------------------------- * Default EPS bearer context activation procedure * -------------------------------------------------------------------------- */ -#ifdef NAS_MME int esm_proc_default_eps_bearer_context(emm_data_context_t *ctx, int pid, unsigned int *ebi, const esm_proc_qos_t *esm_qos, int *esm_cause); int esm_proc_default_eps_bearer_context_request(int is_standalone, @@ -205,26 +167,13 @@ int esm_proc_default_eps_bearer_context_accept(emm_data_context_t *ctx, int ebi, int *esm_cause); int esm_proc_default_eps_bearer_context_reject(emm_data_context_t *ctx, int ebi, int *esm_cause); -#endif -#ifdef NAS_UE -int esm_proc_default_eps_bearer_context_request(int pid, int ebi, - const esm_proc_qos_t *esm_qos, int *esm_cause); -int esm_proc_default_eps_bearer_context_complete(void); -int esm_proc_default_eps_bearer_context_failure(void); - -int esm_proc_default_eps_bearer_context_accept(int is_standalone, int ebi, - OctetString *msg, int ue_triggered); -int esm_proc_default_eps_bearer_context_reject(int is_standalone, int ebi, - OctetString *msg, int ue_triggered); -#endif /* * -------------------------------------------------------------------------- * Dedicated EPS bearer context activation procedure * -------------------------------------------------------------------------- */ -#ifdef NAS_MME int esm_proc_dedicated_eps_bearer_context(emm_data_context_t *ctx, int pid, unsigned int *ebi, unsigned int *default_ebi, const esm_proc_qos_t *qos, const esm_proc_tft_t *tft, int *esm_cause); @@ -235,24 +184,13 @@ int esm_proc_dedicated_eps_bearer_context_accept(emm_data_context_t *ctx, int eb int *esm_cause); int esm_proc_dedicated_eps_bearer_context_reject(emm_data_context_t *ctx, int ebi, int *esm_cause); -#endif -#ifdef NAS_UE -int esm_proc_dedicated_eps_bearer_context_request(int ebi, int default_ebi, - const esm_proc_qos_t *qos, const esm_proc_tft_t *tft, int *esm_cause); - -int esm_proc_dedicated_eps_bearer_context_accept(int is_standalone, int ebi, - OctetString *msg, int ue_triggered); -int esm_proc_dedicated_eps_bearer_context_reject(int is_standalone, int ebi, - OctetString *msg, int ue_triggered); -#endif /* * -------------------------------------------------------------------------- * EPS bearer context deactivation procedure * -------------------------------------------------------------------------- */ -#ifdef NAS_MME int esm_proc_eps_bearer_context_deactivate(emm_data_context_t *ctx, int is_local, int ebi, int *pid, int *bid, int *esm_cause); @@ -260,15 +198,7 @@ int esm_proc_eps_bearer_context_deactivate_request(int is_standalone, emm_data_context_t *ctx, int ebi, OctetString *msg, int ue_triggered); int esm_proc_eps_bearer_context_deactivate_accept(emm_data_context_t *ctx, int ebi, int *esm_cause); -#endif -#ifdef NAS_UE -int esm_proc_eps_bearer_context_deactivate(int is_local, int ebi, int *pid, - int *bid); -int esm_proc_eps_bearer_context_deactivate_request(int ebi, int *esm_cause); -int esm_proc_eps_bearer_context_deactivate_accept(int is_standalone, int ebi, - OctetString *msg, int ue_triggered); -#endif #endif /* __ESM_PROC_H__*/ diff --git a/openair-cn/NAS/MME/ESM/esm_pt.c b/openair-cn/NAS/MME/ESM/esm_pt.c new file mode 100644 index 0000000000..d9e1be5150 --- /dev/null +++ b/openair-cn/NAS/MME/ESM/esm_pt.c @@ -0,0 +1,95 @@ +/******************************************************************************* + OpenAirInterface + Copyright(c) 1999 - 2014 Eurecom + + OpenAirInterface is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + + OpenAirInterface is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with OpenAirInterface.The full GNU General Public License is + included in this distribution in the file called "COPYING". If not, + see . + + Contact Information + OpenAirInterface Admin: openair_admin@eurecom.fr + OpenAirInterface Tech : openair_tech@eurecom.fr + OpenAirInterface Dev : openair4g-devel@eurecom.fr + + Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. + + *******************************************************************************/ +/***************************************************************************** +Source esm_pt.c + +Version 0.1 + +Date 2013/01/03 + +Product NAS stack + +Subsystem EPS Session Management + +Author Frederic Maurel + +Description Defines functions used to handle ESM procedure transactions. + +*****************************************************************************/ + +#include "esm_pt.h" + + +/****************************************************************************/ +/**************** E X T E R N A L D E F I N I T I O N S ****************/ +/****************************************************************************/ + +/* + * Minimal and maximal value of a procedure transaction identity: + * The Procedure Transaction Identity (PTI) identifies bi-directional + * messages flows + */ +#define ESM_PTI_MIN (PROCEDURE_TRANSACTION_IDENTITY_FIRST) +#define ESM_PTI_MAX (PROCEDURE_TRANSACTION_IDENTITY_LAST) + +/****************************************************************************/ +/******************* L O C A L D E F I N I T I O N S *******************/ +/****************************************************************************/ + + +/****************************************************************************/ +/****************** E X P O R T E D F U N C T I O N S ******************/ +/****************************************************************************/ + + + +/**************************************************************************** + ** ** + ** Name: esm_pt_is_reserved() ** + ** ** + ** Description: Check whether the given procedure transaction identity is ** + ** a reserved value ** + ** ** + ** Inputs: pti: The identity of the procedure transaction ** + ** Others: None ** + ** ** + ** Outputs: None ** + ** Return: TRUE, FALSE ** + ** Others: None ** + ** ** + ***************************************************************************/ +int esm_pt_is_reserved(int pti) +{ + return ( (pti != ESM_PT_UNASSIGNED) && (pti > ESM_PTI_MAX) ); +} + +/****************************************************************************/ +/********************* L O C A L F U N C T I O N S *********************/ +/****************************************************************************/ + diff --git a/openair3/RAL-LTE/RAL-DUMMY/INCLUDE/eRALlte_action.h b/openair-cn/NAS/MME/ESM/esm_pt.h similarity index 74% rename from openair3/RAL-LTE/RAL-DUMMY/INCLUDE/eRALlte_action.h rename to openair-cn/NAS/MME/ESM/esm_pt.h index fbb4e82d7c..2a2cf81202 100644 --- a/openair3/RAL-LTE/RAL-DUMMY/INCLUDE/eRALlte_action.h +++ b/openair-cn/NAS/MME/ESM/esm_pt.h @@ -23,33 +23,42 @@ OpenAirInterface Tech : openair_tech@eurecom.fr OpenAirInterface Dev : openair4g-devel@eurecom.fr - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE + Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. *******************************************************************************/ -/*! \file eRALlte_action.h - * \brief - * \author BRIZZOLA Davide, GAUTHIER Lionel, MAUREL Frederic, WETTERWALD Michelle - * \date 2012 - * \version - * \note - * \bug - * \warning - */ +/***************************************************************************** +Source esm_pt.h -#ifndef __RAL_LTE_ACTION_H__ -#define __RAL_LTE_ACTION_H__ +Version 0.1 -#include "MIH_C_msg_codec.h" -#include "MIH_C_Link_Messages.h" +Date 2013/01/03 + +Product NAS stack + +Subsystem EPS Session Management + +Author Frederic Maurel + +Description Defines functions used to handle ESM procedure transactions. + +*****************************************************************************/ +#ifndef __ESM_PT_H__ +#define __ESM_PT_H__ + +#include "ProcedureTransactionIdentity.h" /****************************************************************************/ /********************* G L O B A L C O N S T A N T S *******************/ /****************************************************************************/ +/* Unassigned procedure transaction identity value */ +#define ESM_PT_UNASSIGNED (PROCEDURE_TRANSACTION_IDENTITY_UNASSIGNED) + /****************************************************************************/ /************************ G L O B A L T Y P E S ************************/ /****************************************************************************/ + /****************************************************************************/ /******************** G L O B A L V A R I A B L E S ********************/ /****************************************************************************/ @@ -58,6 +67,8 @@ /****************** E X P O R T E D F U N C T I O N S ******************/ /****************************************************************************/ -void eRALlte_action_request(MIH_C_Message_Link_Action_request_t* messageP); +int esm_pt_is_reserved(int pti); -#endif + + +#endif /* __ESM_PT_H__*/ diff --git a/openair-cn/NAS/EURECOM-NAS/src/MMEprocess.c b/openair-cn/NAS/MME/MMEprocess.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/MMEprocess.c rename to openair-cn/NAS/MME/MMEprocess.c diff --git a/openair-cn/NAS/nas_defs.h b/openair-cn/NAS/MME/nas_defs.h similarity index 100% rename from openair-cn/NAS/nas_defs.h rename to openair-cn/NAS/MME/nas_defs.h diff --git a/openair-cn/NAS/MME/nas_itti_messaging.c b/openair-cn/NAS/MME/nas_itti_messaging.c new file mode 100644 index 0000000000..c22f408954 --- /dev/null +++ b/openair-cn/NAS/MME/nas_itti_messaging.c @@ -0,0 +1,211 @@ +/******************************************************************************* + OpenAirInterface + Copyright(c) 1999 - 2014 Eurecom + + OpenAirInterface is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + + OpenAirInterface is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with OpenAirInterface.The full GNU General Public License is + included in this distribution in the file called "COPYING". If not, + see . + + Contact Information + OpenAirInterface Admin: openair_admin@eurecom.fr + OpenAirInterface Tech : openair_tech@eurecom.fr + OpenAirInterface Dev : openair4g-devel@eurecom.fr + + Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. + + *******************************************************************************/ +#include + +#include "intertask_interface.h" +#include "nas_itti_messaging.h" +#include "msc.h" + + +#define TASK_ORIGIN TASK_NAS_MME + + +#if defined(NAS_BUILT_IN_EPC) +static const uint8_t emm_message_ids[] = { + ATTACH_REQUEST, + ATTACH_ACCEPT, + ATTACH_COMPLETE, + ATTACH_REJECT, + DETACH_REQUEST, + DETACH_ACCEPT, + TRACKING_AREA_UPDATE_REQUEST, + TRACKING_AREA_UPDATE_ACCEPT, + TRACKING_AREA_UPDATE_COMPLETE, + TRACKING_AREA_UPDATE_REJECT, + EXTENDED_SERVICE_REQUEST, + SERVICE_REQUEST, + SERVICE_REJECT, + GUTI_REALLOCATION_COMMAND, + GUTI_REALLOCATION_COMPLETE, + AUTHENTICATION_REQUEST, + AUTHENTICATION_RESPONSE, + AUTHENTICATION_REJECT, + AUTHENTICATION_FAILURE, + IDENTITY_REQUEST, + IDENTITY_RESPONSE, + SECURITY_MODE_COMMAND, + SECURITY_MODE_COMPLETE, + SECURITY_MODE_REJECT, + EMM_STATUS, + EMM_INFORMATION, + DOWNLINK_NAS_TRANSPORT, + UPLINK_NAS_TRANSPORT, + CS_SERVICE_NOTIFICATION, +}; + +static const uint8_t esm_message_ids[] = { + ACTIVATE_DEFAULT_EPS_BEARER_CONTEXT_REQUEST, + ACTIVATE_DEFAULT_EPS_BEARER_CONTEXT_ACCEPT, + ACTIVATE_DEFAULT_EPS_BEARER_CONTEXT_REJECT, + ACTIVATE_DEDICATED_EPS_BEARER_CONTEXT_REQUEST, + ACTIVATE_DEDICATED_EPS_BEARER_CONTEXT_ACCEPT, + ACTIVATE_DEDICATED_EPS_BEARER_CONTEXT_REJECT, + MODIFY_EPS_BEARER_CONTEXT_REQUEST, + MODIFY_EPS_BEARER_CONTEXT_ACCEPT, + MODIFY_EPS_BEARER_CONTEXT_REJECT, + DEACTIVATE_EPS_BEARER_CONTEXT_REQUEST, + DEACTIVATE_EPS_BEARER_CONTEXT_ACCEPT, + PDN_CONNECTIVITY_REQUEST, + PDN_CONNECTIVITY_REJECT, + PDN_DISCONNECT_REQUEST, + PDN_DISCONNECT_REJECT, + BEARER_RESOURCE_ALLOCATION_REQUEST, + BEARER_RESOURCE_ALLOCATION_REJECT, + BEARER_RESOURCE_MODIFICATION_REQUEST, + BEARER_RESOURCE_MODIFICATION_REJECT, + ESM_INFORMATION_REQUEST, + ESM_INFORMATION_RESPONSE, + ESM_STATUS, +}; + +static int _nas_find_message_index(const uint8_t message_id, const uint8_t *message_ids, const int ids_number) +{ + int i; + + for(i = 0; i < ids_number; i ++) { + if (message_id == message_ids[i]) { + return (2 + i); + } + } + + return (1); +} + +int nas_itti_plain_msg(const char *buffer, const nas_message_t *msg, const int length, const int down_link) +{ + MessageDef *message_p; + int data_length = length < NAS_DATA_LENGHT_MAX ? length : NAS_DATA_LENGHT_MAX; + int message_type = -1; + MessagesIds messageId_raw = -1; + MessagesIds messageId_plain = -1; + + /* Define message ids */ + if (msg->header.protocol_discriminator == EPS_MOBILITY_MANAGEMENT_MESSAGE) { + message_type = 0; + messageId_raw = down_link ? NAS_DL_EMM_RAW_MSG : NAS_UL_EMM_RAW_MSG; + messageId_plain = down_link ? NAS_DL_EMM_PLAIN_MSG : NAS_UL_EMM_PLAIN_MSG; + } else { + if (msg->header.protocol_discriminator == EPS_SESSION_MANAGEMENT_MESSAGE) { + message_type = 1; + messageId_raw = down_link ? NAS_DL_ESM_RAW_MSG : NAS_UL_ESM_RAW_MSG; + messageId_plain = down_link ? NAS_DL_ESM_PLAIN_MSG : NAS_UL_ESM_PLAIN_MSG; + } + } + + if (message_type >= 0) { + /* Create and send the RAW message */ + message_p = itti_alloc_new_message(TASK_ORIGIN, messageId_raw); + + NAS_DL_EMM_RAW_MSG(message_p).lenght = length; + memset ((void *) &(NAS_DL_EMM_RAW_MSG(message_p).data), 0, NAS_DATA_LENGHT_MAX); + memcpy ((void *) &(NAS_DL_EMM_RAW_MSG(message_p).data), buffer, data_length); + + itti_send_msg_to_task(TASK_UNKNOWN, INSTANCE_DEFAULT, message_p); + + /* Create and send the plain message */ + if (message_type == 0) { + message_p = itti_alloc_new_message(TASK_ORIGIN, messageId_plain); + + NAS_DL_EMM_PLAIN_MSG(message_p).present = _nas_find_message_index(msg->plain.emm.header.message_type, emm_message_ids, sizeof(emm_message_ids) / sizeof(emm_message_ids[0])); + memcpy ((void *) &(NAS_DL_EMM_PLAIN_MSG(message_p).choice), &msg->plain.emm, sizeof (EMM_msg)); + } else { + message_p = itti_alloc_new_message(TASK_ORIGIN, messageId_plain); + + NAS_DL_ESM_PLAIN_MSG(message_p).present = _nas_find_message_index(msg->plain.esm.header.message_type, esm_message_ids, sizeof(esm_message_ids) / sizeof(esm_message_ids[0])); + memcpy ((void *) &(NAS_DL_ESM_PLAIN_MSG(message_p).choice), &msg->plain.esm, sizeof (ESM_msg)); + } + + return itti_send_msg_to_task(TASK_UNKNOWN, INSTANCE_DEFAULT, message_p); + } + + return EXIT_FAILURE; +} + +int nas_itti_protected_msg(const char *buffer, const nas_message_t *msg, const int length, const int down_link) +{ + MessageDef *message_p = NULL; + + if (msg->header.protocol_discriminator == EPS_MOBILITY_MANAGEMENT_MESSAGE) { + message_p = itti_alloc_new_message(TASK_ORIGIN, down_link ? NAS_DL_EMM_PROTECTED_MSG : NAS_UL_EMM_PROTECTED_MSG); + + memcpy ((void *) &(NAS_DL_EMM_PROTECTED_MSG(message_p).header), &msg->header, sizeof (nas_message_security_header_t)); + NAS_DL_EMM_PROTECTED_MSG(message_p).present = _nas_find_message_index(msg->security_protected.plain.emm.header.message_type, emm_message_ids, sizeof(emm_message_ids) / sizeof(emm_message_ids[0])); + memcpy ((void *) &(NAS_DL_EMM_PROTECTED_MSG(message_p).choice), &msg->security_protected.plain.emm, sizeof (EMM_msg)); + } else { + if (msg->header.protocol_discriminator == EPS_SESSION_MANAGEMENT_MESSAGE) { + message_p = itti_alloc_new_message(TASK_ORIGIN, down_link ? NAS_DL_ESM_PROTECTED_MSG : NAS_UL_ESM_PROTECTED_MSG); + + memcpy ((void *) &(NAS_DL_ESM_PROTECTED_MSG(message_p).header), &msg->header, sizeof (nas_message_security_header_t)); + NAS_DL_ESM_PROTECTED_MSG(message_p).present = _nas_find_message_index(msg->security_protected.plain.esm.header.message_type, esm_message_ids, sizeof(esm_message_ids) / sizeof(esm_message_ids[0])); + memcpy ((void *) &(NAS_DL_ESM_PROTECTED_MSG(message_p).choice), &msg->security_protected.plain.esm, sizeof (ESM_msg)); + } + } + + if (message_p != NULL) { + return itti_send_msg_to_task(TASK_UNKNOWN, INSTANCE_DEFAULT, message_p); + } + + return EXIT_FAILURE; +} +#endif + +#if defined(NAS_BUILT_IN_EPC) +int nas_itti_dl_data_req(const uint32_t ue_id, void *const data, + const uint32_t length) +{ + MessageDef *message_p; + + message_p = itti_alloc_new_message(TASK_NAS_MME, NAS_DOWNLINK_DATA_REQ); + + NAS_DL_DATA_REQ(message_p).UEid = ue_id; + NAS_DL_DATA_REQ(message_p).nasMsg.data = data; + NAS_DL_DATA_REQ(message_p).nasMsg.length = length; + + MSC_LOG_TX_MESSAGE( + MSC_NAS_MME, + MSC_S1AP_MME, + NULL,0, + "0 NAS_DOWNLINK_DATA_REQ ue id "NAS_UE_ID_FMT" len %u", ue_id, length); + + return itti_send_msg_to_task(TASK_S1AP, INSTANCE_DEFAULT, message_p); +} + +#endif + + diff --git a/openair-cn/NAS/nas_itti_messaging.h b/openair-cn/NAS/MME/nas_itti_messaging.h similarity index 84% rename from openair-cn/NAS/nas_itti_messaging.h rename to openair-cn/NAS/MME/nas_itti_messaging.h index b9d422a613..e18741f815 100644 --- a/openair-cn/NAS/nas_itti_messaging.h +++ b/openair-cn/NAS/MME/nas_itti_messaging.h @@ -38,7 +38,7 @@ #ifndef NAS_ITTI_MESSAGING_H_ #define NAS_ITTI_MESSAGING_H_ -# if ((defined(NAS_BUILT_IN_EPC) && defined(NAS_MME)) || (defined(ENABLE_NAS_UE_LOGGING) && defined(NAS_BUILT_IN_UE) && defined(NAS_UE))) +# if defined(NAS_BUILT_IN_EPC) int nas_itti_plain_msg( const char *buffer, const nas_message_t *msg, @@ -52,7 +52,7 @@ int nas_itti_protected_msg( const int instance); # endif -# if defined(NAS_BUILT_IN_EPC) && defined(NAS_MME) +# if defined(NAS_BUILT_IN_EPC) #include "conversions.h" int nas_itti_dl_data_req( @@ -68,6 +68,8 @@ static inline void nas_itti_pdn_connectivity_req( esm_proc_pdn_request_t request_typeP) { MessageDef *message_p = NULL; + uint8_t i; + uint8_t index; AssertFatal(imsi_pP != NULL, "imsi_pP param is NULL"); AssertFatal(proc_data_pP != NULL, "proc_data_pP param is NULL"); @@ -125,6 +127,30 @@ static inline void nas_itti_pdn_connectivity_req( NAS_PDN_CONNECTIVITY_REQ(message_p).request_type = request_typeP; + if (proc_data_pP->pco.num_protocol_id_or_container_id <= PROTOCOL_CONFIGURATION_OPTIONS_MAXIMUM_PROTOCOL_ID_OR_CONTAINER_ID) { + NAS_PDN_CONNECTIVITY_REQ(message_p).pco.byte[0] = ACTIVATE_DEDICATED_EPS_BEARER_CONTEXT_ACCEPT_PROTOCOL_CONFIGURATION_OPTIONS_IEI; + NAS_PDN_CONNECTIVITY_REQ(message_p).pco.byte[1] = 1 + 3 * proc_data_pP->pco.num_protocol_id_or_container_id; + NAS_PDN_CONNECTIVITY_REQ(message_p).pco.byte[2] = 0x80; // do it fast + i = 0; + index = 3; + while (( i < proc_data_pP->pco.num_protocol_id_or_container_id) && + ((index + proc_data_pP->pco.protocolidcontents[i].length) <= PROTOCOL_CONFIGURATION_OPTIONS_MAXIMUM_LENGTH)){ + NAS_PDN_CONNECTIVITY_REQ(message_p).pco.byte[1] += proc_data_pP->pco.lengthofprotocolid[i]; + NAS_PDN_CONNECTIVITY_REQ(message_p).pco.byte[index++] = (proc_data_pP->pco.protocolid[i] >> 8); + NAS_PDN_CONNECTIVITY_REQ(message_p).pco.byte[index++] = (proc_data_pP->pco.protocolid[i] & 0x00FF); + NAS_PDN_CONNECTIVITY_REQ(message_p).pco.byte[index++] = proc_data_pP->pco.lengthofprotocolid[i]; + if (proc_data_pP->pco.lengthofprotocolid[i] > 0) { + memcpy( &NAS_PDN_CONNECTIVITY_REQ(message_p).pco.byte[index], + proc_data_pP->pco.protocolidcontents[i].value, + proc_data_pP->pco.lengthofprotocolid[i]); + index += proc_data_pP->pco.lengthofprotocolid[i]; + } + i++; + } + NAS_PDN_CONNECTIVITY_REQ(message_p).pco.length = index; + } + + MSC_LOG_TX_MESSAGE( MSC_NAS_MME, MSC_MMEAPP_MME, @@ -253,13 +279,5 @@ static inline void nas_itti_establish_rej( } # endif -# if defined(NAS_BUILT_IN_UE) && defined(NAS_UE) -int nas_itti_cell_info_req(const plmn_t plmnID, const Byte_t rat); -int nas_itti_nas_establish_req(as_cause_t cause, as_call_type_t type, as_stmsi_t s_tmsi, plmn_t plmnID, Byte_t *data_pP, UInt32_t lengthP); - -int nas_itti_ul_data_req(const uint32_t ue_idP, void *const data_pP, const uint32_t lengthP); - -int nas_itti_rab_establish_rsp(const as_stmsi_t s_tmsi, const as_rab_id_t rabID, const nas_error_code_t errCode); -# endif #endif /* NAS_ITTI_MESSAGING_H_ */ diff --git a/openair-cn/NAS/nas_main.c b/openair-cn/NAS/MME/nas_mme_task.c similarity index 99% rename from openair-cn/NAS/nas_main.c rename to openair-cn/NAS/MME/nas_mme_task.c index e2f9000285..88939f93c2 100644 --- a/openair-cn/NAS/nas_main.c +++ b/openair-cn/NAS/MME/nas_mme_task.c @@ -34,8 +34,8 @@ #include "intertask_interface.h" #include "mme_config.h" - #include "nas_defs.h" +#include "msc.h" #if !defined(DISABLE_USE_NAS) # include "nas_network.h" @@ -52,6 +52,7 @@ static void *nas_intertask_interface(void *args_p) { itti_mark_task_ready(TASK_NAS_MME); + MSC_START_USE(); while(1) { MessageDef *received_message_p; diff --git a/openair-cn/NAS/MME/nas_network.c b/openair-cn/NAS/MME/nas_network.c new file mode 100644 index 0000000000..0af3aa3425 --- /dev/null +++ b/openair-cn/NAS/MME/nas_network.c @@ -0,0 +1,208 @@ +/******************************************************************************* + OpenAirInterface + Copyright(c) 1999 - 2014 Eurecom + + OpenAirInterface is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + + OpenAirInterface is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with OpenAirInterface.The full GNU General Public License is + included in this distribution in the file called "COPYING". If not, + see . + + Contact Information + OpenAirInterface Admin: openair_admin@eurecom.fr + OpenAirInterface Tech : openair_tech@eurecom.fr + OpenAirInterface Dev : openair4g-devel@eurecom.fr + + Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. + + *******************************************************************************/ +/***************************************************************************** +Source nas_network.h + +Version 0.1 + +Date 2012/09/20 + +Product NAS stack + +Subsystem NAS main process + +Author Frederic Maurel + +Description NAS procedure functions triggered by the network + +*****************************************************************************/ + +#include "nas_network.h" +#include "commonDef.h" +#include "nas_log.h" +#include "nas_timer.h" + +#include "as_message.h" +#include "nas_proc.h" + +/****************************************************************************/ +/**************** E X T E R N A L D E F I N I T I O N S ****************/ +/****************************************************************************/ + +/****************************************************************************/ +/******************* L O C A L D E F I N I T I O N S *******************/ +/****************************************************************************/ + +/****************************************************************************/ +/****************** E X P O R T E D F U N C T I O N S ******************/ +/****************************************************************************/ + +/**************************************************************************** + ** ** + ** Name: nas_network_initialize() ** + ** ** + ** Description: Initializes network internal data ** + ** ** + ** Inputs: None ** + ** Others: None ** + ** ** + ** Outputs: None ** + ** Return: None ** + ** Others: None ** + ** ** + ***************************************************************************/ +#if defined(NAS_BUILT_IN_EPC) +void nas_network_initialize(mme_config_t *mme_config_p) +#else +void nas_network_initialize(void) +#endif +{ + LOG_FUNC_IN; + + /* Initialize the internal NAS processing data */ +# if defined(NAS_BUILT_IN_EPC) + nas_timer_init(); + nas_proc_initialize(mme_config_p); +# else + nas_proc_initialize(); +# endif + + LOG_FUNC_OUT; +} + +/**************************************************************************** + ** ** + ** Name: nas_network_cleanup() ** + ** ** + ** Description: Performs clean up procedure before the system is shutdown ** + ** ** + ** Inputs: None ** + ** Others: None ** + ** ** + ** Outputs: None ** + ** Return: None ** + ** Others: None ** + ** ** + ***************************************************************************/ +void nas_network_cleanup(void) +{ + LOG_FUNC_IN; + + nas_proc_cleanup(); + + LOG_FUNC_OUT; +} + +/**************************************************************************** + ** ** + ** Name: nas_network_process_data() ** + ** ** + ** Description: Process Access Stratum messages received from the network ** + ** and call applicable NAS procedure function. ** + ** ** + ** Inputs: msg_id: AS message identifier ** + ** data: Generic pointer to data structure that has ** + ** to be processed ** + ** Others: None ** + ** ** + ** Outputs: None ** + ** Return: RETURNok if the message has been success- ** + ** fully processed; RETURNerror otherwise ** + ** Others: None ** + ** ** + ***************************************************************************/ +int nas_network_process_data(int msg_id, const void *data) +{ + LOG_FUNC_IN; + + const as_message_t *msg = (as_message_t *)(data); + int rc = RETURNok; + + /* Sanity check */ + if (msg_id != msg->msgID) { + LOG_TRACE(ERROR, "NET-MAIN - Message identifier 0x%x to process " + "is different from that of the network data (0x%x)", + msg_id, msg->msgID); + LOG_FUNC_RETURN (RETURNerror); + } + + switch (msg_id) { + + + case AS_NAS_ESTABLISH_IND: { + /* Received NAS signalling connection establishment indication */ + const nas_establish_ind_t *indication = &msg->msg.nas_establish_ind; + rc = nas_proc_establish_ind(indication->UEid, + indication->tac, + indication->initialNasMsg.data, + indication->initialNasMsg.length); + break; + } + + case AS_DL_INFO_TRANSFER_CNF: { + const dl_info_transfer_cnf_t *info = &msg->msg.dl_info_transfer_cnf; + + /* Received downlink data transfer confirm */ + if (info->errCode != AS_SUCCESS) { + LOG_TRACE(WARNING, "NET-MAIN - " + "Downlink NAS message not delivered"); + rc = nas_proc_dl_transfer_rej(info->UEid); + } else { + rc = nas_proc_dl_transfer_cnf(info->UEid); + } + + break; + } + + case AS_UL_INFO_TRANSFER_IND: { + const ul_info_transfer_ind_t *info = &msg->msg.ul_info_transfer_ind; + /* Received uplink data transfer indication */ + rc = nas_proc_ul_transfer_ind(info->UEid, + info->nasMsg.data, + info->nasMsg.length); + break; + } + + case AS_RAB_ESTABLISH_CNF: + break; + + default: + LOG_TRACE(ERROR, "NET-MAIN - Unexpected AS message type: 0x%x", + msg_id); + rc = RETURNerror; + break; + } + + LOG_FUNC_RETURN (rc); +} + +/****************************************************************************/ +/********************* L O C A L F U N C T I O N S *********************/ +/****************************************************************************/ + diff --git a/openair-cn/NAS/EURECOM-NAS/src/nas_network.h b/openair-cn/NAS/MME/nas_network.h similarity index 96% rename from openair-cn/NAS/EURECOM-NAS/src/nas_network.h rename to openair-cn/NAS/MME/nas_network.h index 193d98784a..ef235dcdb7 100644 --- a/openair-cn/NAS/EURECOM-NAS/src/nas_network.h +++ b/openair-cn/NAS/MME/nas_network.h @@ -43,7 +43,7 @@ Description NAS procedure functions triggered by the network *****************************************************************************/ -#if defined(NAS_BUILT_IN_EPC) && defined(NAS_MME) +#if defined(NAS_BUILT_IN_EPC) # include "mme_config.h" #endif @@ -66,7 +66,7 @@ Description NAS procedure functions triggered by the network /****************** E X P O R T E D F U N C T I O N S ******************/ /****************************************************************************/ -#if defined(NAS_BUILT_IN_EPC) && defined(NAS_MME) +#if defined(NAS_BUILT_IN_EPC) void nas_network_initialize(mme_config_t *mme_config_p); #else void nas_network_initialize(void); diff --git a/openair-cn/NAS/MME/nas_parser.c b/openair-cn/NAS/MME/nas_parser.c new file mode 100644 index 0000000000..af87d1ce97 --- /dev/null +++ b/openair-cn/NAS/MME/nas_parser.c @@ -0,0 +1,243 @@ +/******************************************************************************* + OpenAirInterface + Copyright(c) 1999 - 2014 Eurecom + + OpenAirInterface is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + + OpenAirInterface is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with OpenAirInterface.The full GNU General Public License is + included in this distribution in the file called "COPYING". If not, + see . + + Contact Information + OpenAirInterface Admin: openair_admin@eurecom.fr + OpenAirInterface Tech : openair_tech@eurecom.fr + OpenAirInterface Dev : openair4g-devel@eurecom.fr + + Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. + + *******************************************************************************/ +/***************************************************************************** +Source nas_parser.c + +Version 0.1 + +Date 2012/02/27 + +Product NAS stack + +Subsystem NAS main process + +Author Frederic Maurel + +Description NAS command line parser + +*****************************************************************************/ + +#include "nas_parser.h" +#include "parser.h" + +#include // fprintf +#include // atoi + +/****************************************************************************/ +/**************** E X T E R N A L D E F I N I T I O N S ****************/ +/****************************************************************************/ + +/****************************************************************************/ +/******************* L O C A L D E F I N I T I O N S *******************/ +/****************************************************************************/ + +/* + * Identifiers of the NAS command line options + */ +enum { + NAS_PARSER_TRACE_LEVEL, /* Logging trace level */ + NAS_PARSER_NETWORK_HOST, /* Network layer's hostname */ + NAS_PARSER_NETWORK_PORT, /* Network layer's port number */ + NAS_PARSER_NB_OPTIONS +}; + +/* ----------------------------------------------------- + * Definition of the internal NAS command line structure + * ----------------------------------------------------- + * The command line is defined with a name (default is "NASprocess" + * but it will be replaced by the command name actually used at + * runtime), a number of options and the list of options. + * An option is defined with a name, an argument following the name, + * the usage displayed by the usage function and a default value. + */ +static parser_command_line_t nasParserCommandLine = { + "NASprocess", /* Command name */ + NAS_PARSER_NB_OPTIONS, /* Number of options */ + { /* Command line options */ + { + "-trace", "", "Logging trace level\t\t", + NAS_PARSER_DEFAULT_TRACE_LEVEL + }, + { + "-nhost", "", "Network layer's hostname\t", + NAS_PARSER_DEFAULT_NETWORK_HOSTNAME + }, + { + "-nport", "", "Network layer's port number\t", + NAS_PARSER_DEFAULT_NETWORK_PORT_NUMBER + }, + } +}; + +/* + * Converts a string, containing hexadecimal formatted integer, to an integer + */ +static int atohex(const char *a_char); + +/****************************************************************************/ +/****************** E X P O R T E D F U N C T I O N S ******************/ +/****************************************************************************/ + +/**************************************************************************** + ** ** + ** Name: nas_parser_print_usage() ** + ** ** + ** Description: Displays the command line options used to run the NAS ** + ** process and the firmware version defined at compilation ** + ** time ** + ** ** + ** Inputs: version: Firmware version ** + ** Others: None ** + ** ** + ** Outputs: Return: None ** + ** Others: None ** + ** ** + ***************************************************************************/ +void nas_parser_print_usage(const char *version) +{ + parser_print_usage(&nasParserCommandLine); + fprintf(stderr, "Version: %s\n", version); +} + +/**************************************************************************** + ** ** + ** Name: nas_parser_get_options() ** + ** ** + ** Description: Gets the command line options used to run the NAS process ** + ** ** + ** Inputs: argc: Number of options ** + ** argv: Pointer to the list of options ** + ** Others: None ** + ** ** + ** Outputs: Return: RETURNerror, RETURNok ** + ** Others: None ** + ** ** + ***************************************************************************/ +int nas_parser_get_options(int argc, const char **argv) +{ + return parser_get_options(argc, argv, &nasParserCommandLine); +} + +/**************************************************************************** + ** ** + ** Name: nas_parser_get_nb_options() ** + ** ** + ** Description: Returns the number of the command line options used to ** + ** run the NAS process ** + ** ** + ** Inputs: None ** + ** Others: None ** + ** ** + ** Outputs: Return: Number of command line options ** + ** Others: None ** + ** ** + ***************************************************************************/ +int nas_parser_get_nb_options(void) +{ + return nasParserCommandLine.nb_options; +} + +/**************************************************************************** + ** ** + ** Name: nas_parser_get_trace_level() ** + ** ** + ** Description: Returns the value of the logging trace level ** + ** ** + ** Inputs: None ** + ** Others: None ** + ** ** + ** Outputs: Return: Value of the logging trace level ** + ** Others: None ** + ** ** + ***************************************************************************/ +int nas_parser_get_trace_level(void) +{ + return atohex( nasParserCommandLine.options[NAS_PARSER_TRACE_LEVEL].pvalue ); +} + +/**************************************************************************** + ** ** + ** Name: nas_parser_get_network_host() ** + ** ** + ** Description: Returns the value of the network layer hostname ** + ** ** + ** Inputs: None ** + ** Others: None ** + ** ** + ** Outputs: Return: Value of the network layer hostname ** + ** Others: None ** + ** ** + ***************************************************************************/ +const char *nas_parser_get_network_host(void) +{ + return nasParserCommandLine.options[NAS_PARSER_NETWORK_HOST].pvalue; +} + +/**************************************************************************** + ** ** + ** Name: nas_parser_get_network_port() ** + ** ** + ** Description: Returns the value of the network layer port number ** + ** ** + ** Inputs: None ** + ** Others: None ** + ** ** + ** Outputs: Return: Value of the network layer port number ** + ** Others: None ** + ** ** + ***************************************************************************/ +const char *nas_parser_get_network_port(void) +{ + return nasParserCommandLine.options[NAS_PARSER_NETWORK_PORT].pvalue; +} + + + +/****************************************************************************/ +/********************* L O C A L F U N C T I O N S *********************/ +/****************************************************************************/ + +static int atohex(const char *a_char) +{ + int result; + + for (result=0; a_char; a_char++) { + if (*a_char >= '0' && *a_char <= '9') { + result = (result << 4) + (*a_char - '0'); + } else if (*a_char >= 'A' && *a_char <= 'F') { + result = (result << 4) + (*a_char - 'A' + 10); + } else if (*a_char >= 'a' && *a_char <= 'f') { + result = (result << 4) + (*a_char - 'a' + 10); + } else { + break; + } + } + + return result; +} diff --git a/openair-cn/NAS/MME/nas_parser.h b/openair-cn/NAS/MME/nas_parser.h new file mode 100644 index 0000000000..c536c1375c --- /dev/null +++ b/openair-cn/NAS/MME/nas_parser.h @@ -0,0 +1,84 @@ +/******************************************************************************* + OpenAirInterface + Copyright(c) 1999 - 2014 Eurecom + + OpenAirInterface is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + + OpenAirInterface is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with OpenAirInterface.The full GNU General Public License is + included in this distribution in the file called "COPYING". If not, + see . + + Contact Information + OpenAirInterface Admin: openair_admin@eurecom.fr + OpenAirInterface Tech : openair_tech@eurecom.fr + OpenAirInterface Dev : openair4g-devel@eurecom.fr + + Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. + + *******************************************************************************/ +/***************************************************************************** +Source nas_parser.h + +Version 0.1 + +Date 2012/02/27 + +Product NAS stack + +Subsystem NAS main process + +Author Frederic Maurel + +Description NAS command line parser + +*****************************************************************************/ +#ifndef __NAS_PARSER_H__ +#define __NAS_PARSER_H__ + +/****************************************************************************/ +/********************* G L O B A L C O N S T A N T S *******************/ +/****************************************************************************/ + +/* Logging trace level default value */ +#define NAS_PARSER_DEFAULT_TRACE_LEVEL "0" /* No trace */ + +/* Network layer default hostname */ +#define NAS_PARSER_DEFAULT_NETWORK_HOSTNAME "localhost" + +/* Network layer default port number */ +#define NAS_PARSER_DEFAULT_NETWORK_PORT_NUMBER "12000" + + + +/****************************************************************************/ +/************************ G L O B A L T Y P E S ************************/ +/****************************************************************************/ + +/****************************************************************************/ +/******************** G L O B A L V A R I A B L E S ********************/ +/****************************************************************************/ + +/****************************************************************************/ +/****************** E X P O R T E D F U N C T I O N S ******************/ +/****************************************************************************/ + +void nas_parser_print_usage(const char *version); +int nas_parser_get_options(int argc, const char **argv); + +int nas_parser_get_nb_options(void); +int nas_parser_get_trace_level(void); +const char *nas_parser_get_network_host(void); +const char *nas_parser_get_network_port(void); + + +#endif /* __NAS_PARSER_H__*/ diff --git a/openair-cn/NAS/MME/nas_proc.c b/openair-cn/NAS/MME/nas_proc.c new file mode 100644 index 0000000000..7fae146a89 --- /dev/null +++ b/openair-cn/NAS/MME/nas_proc.c @@ -0,0 +1,443 @@ +/******************************************************************************* + OpenAirInterface + Copyright(c) 1999 - 2014 Eurecom + + OpenAirInterface is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + + OpenAirInterface is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with OpenAirInterface.The full GNU General Public License is + included in this distribution in the file called "COPYING". If not, + see . + + Contact Information + OpenAirInterface Admin: openair_admin@eurecom.fr + OpenAirInterface Tech : openair_tech@eurecom.fr + OpenAirInterface Dev : openair4g-devel@eurecom.fr + + Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. + + *******************************************************************************/ +/***************************************************************************** +Source nas_proc.c + +Version 0.1 + +Date 2012/09/20 + +Product NAS stack + +Subsystem NAS main process + +Author Frederic Maurel + +Description NAS procedure call manager + +*****************************************************************************/ + +#include "nas_proc.h" +#include "nas_log.h" + +#include "emm_main.h" +#include "emm_sap.h" + +#include "esm_main.h" +#include "esm_sap.h" +#include "msc.h" + +#include // sprintf + +/****************************************************************************/ +/**************** E X T E R N A L D E F I N I T I O N S ****************/ +/****************************************************************************/ + +/****************************************************************************/ +/******************* L O C A L D E F I N I T I O N S *******************/ +/****************************************************************************/ + + + +/****************************************************************************/ +/****************** E X P O R T E D F U N C T I O N S ******************/ +/****************************************************************************/ + +/**************************************************************************** + ** ** + ** Name: nas_proc_initialize() ** + ** ** + ** Description: ** + ** ** + ** Inputs: None ** + ** Others: None ** + ** ** + ** Outputs: None ** + ** Return: None ** + ** Others: None ** + ** ** + ***************************************************************************/ +# if defined(NAS_BUILT_IN_EPC) +void nas_proc_initialize(mme_config_t *mme_config_p) +{ + LOG_FUNC_IN; + + /* Initialize the EMM procedure manager */ + emm_main_initialize(mme_config_p); + + /* Initialize the ESM procedure manager */ + esm_main_initialize(); + + LOG_FUNC_OUT; +} +# else +void nas_proc_initialize(void) +{ + LOG_FUNC_IN; + + /* Initialize the EMM procedure manager */ + emm_main_initialize(); + + /* Initialize the ESM procedure manager */ + esm_main_initialize(); + + LOG_FUNC_OUT; +} +# endif + +/**************************************************************************** + ** ** + ** Name: nas_proc_cleanup() ** + ** ** + ** Description: Performs clean up procedure before the system is shutdown ** + ** ** + ** Inputs: None ** + ** Others: None ** + ** ** + ** Outputs: None ** + ** Return: None ** + ** Others: None ** + ** ** + ***************************************************************************/ +void nas_proc_cleanup(void) +{ + LOG_FUNC_IN; + + /* Perform the EPS Mobility Manager's clean up procedure */ + emm_main_cleanup(); + + /* Perform the EPS Session Manager's clean up procedure */ + esm_main_cleanup(); + + LOG_FUNC_OUT; +} + +/* + * -------------------------------------------------------------------------- + * NAS procedures triggered by the user + * -------------------------------------------------------------------------- + */ + + +/**************************************************************************** + ** ** + ** Name: nas_proc_establish_ind() ** + ** ** + ** Description: Processes the NAS signalling connection establishment ** + ** indication message received from the network ** + ** ** + ** Inputs: ueid: UE identifier ** + ** tac: The code of the tracking area the initia- ** + ** ting UE belongs to ** + ** data: The initial NAS message transfered within ** + ** the message ** + ** len: The length of the initial NAS message ** + ** Others: None ** + ** ** + ** Outputs: None ** + ** Return: RETURNok, RETURNerror ** + ** Others: None ** + ** ** + ***************************************************************************/ +int nas_proc_establish_ind(uint32_t ueid, tac_t tac, + const Byte_t *data, uint32_t len) +{ + LOG_FUNC_IN; + + int rc = RETURNerror; + + if (len > 0) { + emm_sap_t emm_sap; + + MSC_LOG_TX_MESSAGE( + MSC_NAS_MME, + MSC_NAS_EMM_MME, + NULL,0, + "0 EMMAS_ESTABLISH_REQ ue id "NAS_UE_ID_FMT" tac %u", ueid, tac); + /* + * Notify the EMM procedure call manager that NAS signalling + * connection establishment indication message has been received + * from the Access-Stratum sublayer + */ + emm_sap.primitive = EMMAS_ESTABLISH_REQ; + emm_sap.u.emm_as.u.establish.ueid = ueid; + emm_sap.u.emm_as.u.establish.NASmsg.length = len; + emm_sap.u.emm_as.u.establish.NASmsg.value = (uint8_t *)data; + rc = emm_sap_send(&emm_sap); + } + + LOG_FUNC_RETURN (rc); +} + +/**************************************************************************** + ** ** + ** Name: nas_proc_dl_transfer_cnf() ** + ** ** + ** Description: Processes the downlink data transfer confirm message re- ** + ** ceived from the network while NAS message has been succes-** + ** sfully delivered to the NAS sublayer on the receiver side.** + ** ** + ** Inputs: ueid: UE identifier ** + ** Others: None ** + ** ** + ** Outputs: None ** + ** Return: RETURNok, RETURNerror ** + ** Others: None ** + ** ** + ***************************************************************************/ +int nas_proc_dl_transfer_cnf(uint32_t ueid) +{ + LOG_FUNC_IN; + + emm_sap_t emm_sap; + int rc; + + MSC_LOG_TX_MESSAGE( + MSC_NAS_MME, + MSC_NAS_EMM_MME, + NULL,0, + "0 EMMAS_DATA_IND dl_transfer_conf ue id "NAS_UE_ID_FMT" ", ueid); + + /* + * Notify the EMM procedure call manager that downlink NAS message + * has been successfully delivered to the NAS sublayer on the + * receiver side + */ + emm_sap.primitive = EMMAS_DATA_IND; + emm_sap.u.emm_as.u.data.ueid = ueid; + emm_sap.u.emm_as.u.data.delivered = TRUE; + emm_sap.u.emm_as.u.data.NASmsg.length = 0; + rc = emm_sap_send(&emm_sap); + + LOG_FUNC_RETURN (rc); +} + +/**************************************************************************** + ** ** + ** Name: nas_proc_dl_transfer_rej() ** + ** ** + ** Description: Processes the downlink data transfer confirm message re- ** + ** ceived from the network while NAS message has not been ** + ** delivered to the NAS sublayer on the receiver side. ** + ** ** + ** Inputs: ueid: UE identifier ** + ** Others: None ** + ** ** + ** Outputs: None ** + ** Return: RETURNok, RETURNerror ** + ** Others: None ** + ** ** + ***************************************************************************/ +int nas_proc_dl_transfer_rej(uint32_t ueid) +{ + LOG_FUNC_IN; + + emm_sap_t emm_sap; + int rc; + + MSC_LOG_TX_MESSAGE( + MSC_NAS_MME, + MSC_NAS_EMM_MME, + NULL,0, + "0 EMMAS_DATA_IND dl_transfer_reject ue id "NAS_UE_ID_FMT" ", ueid); + + /* + * Notify the EMM procedure call manager that transmission + * failure of downlink NAS message indication has been received + * from lower layers + */ + emm_sap.primitive = EMMAS_DATA_IND; + emm_sap.u.emm_as.u.data.ueid = ueid; + emm_sap.u.emm_as.u.data.delivered = FALSE; + emm_sap.u.emm_as.u.data.NASmsg.length = 0; + rc = emm_sap_send(&emm_sap); + + LOG_FUNC_RETURN (rc); +} + +/**************************************************************************** + ** ** + ** Name: nas_proc_ul_transfer_ind() ** + ** ** + ** Description: Processes uplink data transfer indication message recei- ** + ** ved from the network ** + ** ** + ** Inputs: ueid: UE identifier ** + ** data: The transfered NAS message ** + ** len: The length of the NAS message ** + ** Others: None ** + ** ** + ** Outputs: None ** + ** Return: RETURNok, RETURNerror ** + ** Others: None ** + ** ** + ***************************************************************************/ +int nas_proc_ul_transfer_ind(uint32_t ueid, const Byte_t *data, uint32_t len) +{ + int rc = RETURNerror; + + LOG_FUNC_IN; + + if (len > 0) { + emm_sap_t emm_sap; + /* + * Notify the EMM procedure call manager that data transfer + * indication has been received from the Access-Stratum sublayer + */ + MSC_LOG_TX_MESSAGE( + MSC_NAS_MME, + MSC_NAS_EMM_MME, + NULL,0, + "0 EMMAS_DATA_IND ue id "NAS_UE_ID_FMT" len %u", ueid, len); + + emm_sap.primitive = EMMAS_DATA_IND; + emm_sap.u.emm_as.u.data.ueid = ueid; + emm_sap.u.emm_as.u.data.delivered = TRUE; + emm_sap.u.emm_as.u.data.NASmsg.length = len; + emm_sap.u.emm_as.u.data.NASmsg.value = (uint8_t *)data; + rc = emm_sap_send(&emm_sap); + } + + LOG_FUNC_RETURN (rc); +} + +# if defined(NAS_BUILT_IN_EPC) +int nas_proc_auth_param_res(emm_cn_auth_res_t *emm_cn_auth_res) +{ + int rc = RETURNerror; + emm_sap_t emm_sap; + + LOG_FUNC_IN; + + MSC_LOG_TX_MESSAGE( + MSC_NAS_MME, + MSC_NAS_EMM_MME, + NULL,0, + "0 EMMCN_AUTHENTICATION_PARAM_RES"); + + emm_sap.primitive = EMMCN_AUTHENTICATION_PARAM_RES; + emm_sap.u.emm_cn.u.auth_res = emm_cn_auth_res; + + rc = emm_sap_send(&emm_sap); + + LOG_FUNC_RETURN (rc); +} + +int nas_proc_auth_param_fail(emm_cn_auth_fail_t *emm_cn_auth_fail) +{ + int rc = RETURNerror; + emm_sap_t emm_sap; + + LOG_FUNC_IN; + + MSC_LOG_TX_MESSAGE( + MSC_NAS_MME, + MSC_NAS_EMM_MME, + NULL,0, + "0 EMMCN_AUTHENTICATION_PARAM_FAIL"); + + emm_sap.primitive = EMMCN_AUTHENTICATION_PARAM_FAIL; + emm_sap.u.emm_cn.u.auth_fail = emm_cn_auth_fail; + + rc = emm_sap_send(&emm_sap); + + LOG_FUNC_RETURN (rc); +} + +int nas_proc_deregister_ue(uint32_t ue_id) +{ + int rc = RETURNerror; + emm_sap_t emm_sap; + + LOG_FUNC_IN; + + MSC_LOG_TX_MESSAGE( + MSC_NAS_MME, + MSC_NAS_EMM_MME, + NULL,0, + "0 EMMCN_DEREGISTER_UE ue_id "NAS_UE_ID_FMT" ",ue_id); + + emm_sap.primitive = EMMCN_DEREGISTER_UE; + emm_sap.u.emm_cn.u.deregister.UEid = ue_id; + + rc = emm_sap_send(&emm_sap); + + LOG_FUNC_RETURN (rc); +} + +int nas_proc_pdn_connectivity_res(emm_cn_pdn_res_t *emm_cn_pdn_res) +{ + int rc = RETURNerror; + emm_sap_t emm_sap; + + LOG_FUNC_IN; + + MSC_LOG_TX_MESSAGE( + MSC_NAS_MME, + MSC_NAS_EMM_MME, + NULL,0, + "0 EMMCN_PDN_CONNECTIVITY_RES"); + + emm_sap.primitive = EMMCN_PDN_CONNECTIVITY_RES; + emm_sap.u.emm_cn.u.emm_cn_pdn_res = emm_cn_pdn_res; + + rc = emm_sap_send(&emm_sap); + + LOG_FUNC_RETURN (rc); +} + +int nas_proc_pdn_connectivity_fail(emm_cn_pdn_fail_t *emm_cn_pdn_fail) +{ + int rc = RETURNerror; + emm_sap_t emm_sap; + + LOG_FUNC_IN; + + MSC_LOG_TX_MESSAGE( + MSC_NAS_MME, + MSC_NAS_EMM_MME, + NULL,0, + "0 EMMCN_PDN_CONNECTIVITY_FAIL"); + + emm_sap.primitive = EMMCN_PDN_CONNECTIVITY_FAIL; + emm_sap.u.emm_cn.u.emm_cn_pdn_fail = emm_cn_pdn_fail; + + rc = emm_sap_send(&emm_sap); + + LOG_FUNC_RETURN (rc); +} + + + +# endif + +/****************************************************************************/ +/********************* L O C A L F U N C T I O N S *********************/ +/****************************************************************************/ + diff --git a/openair-cn/NAS/MME/nas_proc.h b/openair-cn/NAS/MME/nas_proc.h new file mode 100644 index 0000000000..a00060ed9d --- /dev/null +++ b/openair-cn/NAS/MME/nas_proc.h @@ -0,0 +1,116 @@ +/******************************************************************************* + OpenAirInterface + Copyright(c) 1999 - 2014 Eurecom + + OpenAirInterface is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + + OpenAirInterface is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with OpenAirInterface.The full GNU General Public License is + included in this distribution in the file called "COPYING". If not, + see . + + Contact Information + OpenAirInterface Admin: openair_admin@eurecom.fr + OpenAirInterface Tech : openair_tech@eurecom.fr + OpenAirInterface Dev : openair4g-devel@eurecom.fr + + Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. + + *******************************************************************************/ +/***************************************************************************** +Source nas_proc.h + +Version 0.1 + +Date 2012/09/20 + +Product NAS stack + +Subsystem NAS main process + +Author Frederic Maurel + +Description NAS procedure call manager + +*****************************************************************************/ +#ifndef __NAS_PROC_H__ +#define __NAS_PROC_H__ + +#if defined(NAS_BUILT_IN_EPC) +# include "mme_config.h" +# include "emm_cnDef.h" +#endif + +#include "commonDef.h" +#include "networkDef.h" + +/****************************************************************************/ +/********************* G L O B A L C O N S T A N T S *******************/ +/****************************************************************************/ + +/****************************************************************************/ +/************************ G L O B A L T Y P E S ************************/ +/****************************************************************************/ + +/****************************************************************************/ +/******************** G L O B A L V A R I A B L E S ********************/ +/****************************************************************************/ + +/****************************************************************************/ +/****************** E X P O R T E D F U N C T I O N S ******************/ +/****************************************************************************/ + + +# if defined(NAS_BUILT_IN_EPC) +void nas_proc_initialize(mme_config_t *mme_config_p); +# else +void nas_proc_initialize(void); +# endif + +void nas_proc_cleanup(void); + +/* + * -------------------------------------------------------------------------- + * NAS procedures triggered by the user + * -------------------------------------------------------------------------- + */ + + +/* + * -------------------------------------------------------------------------- + * NAS procedures triggered by the network + * -------------------------------------------------------------------------- + */ + + + +int nas_proc_establish_ind(uint32_t ueid, tac_t tac, const Byte_t *data, + uint32_t len); + +int nas_proc_dl_transfer_cnf(uint32_t ueid); +int nas_proc_dl_transfer_rej(uint32_t ueid); +int nas_proc_ul_transfer_ind(uint32_t ueid, const Byte_t *data, uint32_t len); + +/* + * -------------------------------------------------------------------------- + * NAS procedures triggered by the mme applicative layer + * -------------------------------------------------------------------------- + */ +#if defined(NAS_BUILT_IN_EPC) +int nas_proc_auth_param_res(emm_cn_auth_res_t *emm_cn_auth_res); +int nas_proc_auth_param_fail(emm_cn_auth_fail_t *emm_cn_auth_fail); +int nas_proc_deregister_ue(uint32_t ue_id); +int nas_proc_pdn_connectivity_res(nas_pdn_connectivity_rsp_t *nas_pdn_connectivity_rsp); +int nas_proc_pdn_connectivity_fail(nas_pdn_connectivity_fail_t *nas_pdn_connectivity_fail); +#endif + +#endif /* __NAS_PROC_H__*/ diff --git a/openair-cn/NAS/Makefile.UE b/openair-cn/NAS/Makefile.UE deleted file mode 100644 index 7700c683d0..0000000000 --- a/openair-cn/NAS/Makefile.UE +++ /dev/null @@ -1,341 +0,0 @@ -################################################################################ -# OpenAirInterface -# Copyright(c) 1999 - 2014 Eurecom -# -# OpenAirInterface is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# -# OpenAirInterface is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with OpenAirInterface.The full GNU General Public License is -# included in this distribution in the file called "COPYING". If not, -# see . -# -# Contact Information -# OpenAirInterface Admin: openair_admin@eurecom.fr -# OpenAirInterface Tech : openair_tech@eurecom.fr -# OpenAirInterface Dev : openair4g-devel@eurecom.fr -# -# Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. -# -################################################################################ -PROJDIR = $(UE_NAS_DIR)/EURECOM-NAS - -include $(UE_NAS_DIR)/EURECOM-NAS/Makefile.inc - -libnas_INCLUDES = \ - -I$(OPENAIR2_DIR) \ - -I$(UE_NAS_DIR) \ - -I$(SRCDIR) \ - -I$(INCDIR) \ - -I$(UTILDIR) \ - -I$(USERAPIDIR) \ - -I$(NETAPIDIR) \ - -I$(EMMDIR) \ - -I$(EMMMSGDIR) \ - -I$(EMMSAPDIR) \ - -I$(ESMDIR) \ - -I$(ESMMSGDIR) \ - -I$(ESMSAPDIR) \ - -I$(MMEAPIDIR) \ - -I$(USIMAPIDIR) \ - -I$(IESDIR) \ - -I$(SECU_DIR) \ - -I$(OPENAIRCN_DIR)/COMMON \ - -I$(OPENAIRCN_DIR)/UTILS - -OUTDIR = $(UE_NAS_DIR)/ue_objs - -libnas_api_OBJS = \ - EURECOM-NAS/src/api/mme/mme_api.o \ - EURECOM-NAS/src/api/network/nas_message.o - -libnas_emm_OBJS = \ - EURECOM-NAS/src/emm/Attach.o \ - EURECOM-NAS/src/emm/Authentication.o \ - EURECOM-NAS/src/emm/Detach.o \ - EURECOM-NAS/src/emm/EmmCommon.o \ - EURECOM-NAS/src/emm/emm_data_ctx.o \ - EURECOM-NAS/src/emm/emm_main.o \ - EURECOM-NAS/src/emm/EmmStatusHdl.o \ - EURECOM-NAS/src/emm/Identification.o \ - EURECOM-NAS/src/emm/IdleMode.o \ - EURECOM-NAS/src/emm/LowerLayer.o \ - EURECOM-NAS/src/emm/SecurityModeControl.o \ - EURECOM-NAS/src/emm/ServiceRequestHdl.o \ - EURECOM-NAS/src/emm/TrackingAreaUpdate.o - -libnas_emm_msg_OBJS = \ - EURECOM-NAS/src/emm/msg/AttachAccept.o \ - EURECOM-NAS/src/emm/msg/AuthenticationFailure.o \ - EURECOM-NAS/src/emm/msg/CsServiceNotification.o \ - EURECOM-NAS/src/emm/msg/ExtendedServiceRequest.o \ - EURECOM-NAS/src/emm/msg/IdentityResponse.o \ - EURECOM-NAS/src/emm/msg/EmmInformation.o \ - EURECOM-NAS/src/emm/msg/ServiceReject.o \ - EURECOM-NAS/src/emm/msg/TrackingAreaUpdateReject.o \ - EURECOM-NAS/src/emm/msg/AttachComplete.o \ - EURECOM-NAS/src/emm/msg/AuthenticationReject.o \ - EURECOM-NAS/src/emm/msg/DetachAccept.o \ - EURECOM-NAS/src/emm/msg/GutiReallocationCommand.o \ - EURECOM-NAS/src/emm/msg/emm_msg.o \ - EURECOM-NAS/src/emm/msg/SecurityModeCommand.o \ - EURECOM-NAS/src/emm/msg/ServiceRequest.o \ - EURECOM-NAS/src/emm/msg/TrackingAreaUpdateRequest.o \ - EURECOM-NAS/src/emm/msg/AttachReject.o \ - EURECOM-NAS/src/emm/msg/AuthenticationRequest.o \ - EURECOM-NAS/src/emm/msg/DetachRequest.o \ - EURECOM-NAS/src/emm/msg/GutiReallocationComplete.o \ - EURECOM-NAS/src/emm/msg/SecurityModeComplete.o \ - EURECOM-NAS/src/emm/msg/TrackingAreaUpdateAccept.o \ - EURECOM-NAS/src/emm/msg/UplinkNasTransport.o \ - EURECOM-NAS/src/emm/msg/AttachRequest.o \ - EURECOM-NAS/src/emm/msg/AuthenticationResponse.o \ - EURECOM-NAS/src/emm/msg/DownlinkNasTransport.o \ - EURECOM-NAS/src/emm/msg/EmmStatus.o \ - EURECOM-NAS/src/emm/msg/IdentityRequest.o \ - EURECOM-NAS/src/emm/msg/SecurityModeReject.o \ - EURECOM-NAS/src/emm/msg/TrackingAreaUpdateComplete.o - -libnas_emm_sap_OBJS = \ - EURECOM-NAS/src/emm/sap/emm_as.o \ - EURECOM-NAS/src/emm/sap/emm_cn.o \ - EURECOM-NAS/src/emm/sap/EmmDeregisteredNoImsi.o \ - EURECOM-NAS/src/emm/sap/emm_reg.o \ - EURECOM-NAS/src/emm/sap/EmmRegisteredUpdateNeeded.o \ - EURECOM-NAS/src/emm/sap/EmmDeregisteredNormalService.o \ - EURECOM-NAS/src/emm/sap/emm_sap.o \ - EURECOM-NAS/src/emm/sap/EmmDeregisteredPlmnSearch.o \ - EURECOM-NAS/src/emm/sap/emm_esm.o \ - EURECOM-NAS/src/emm/sap/EmmRegisteredAttemptingToUpdate.o \ - EURECOM-NAS/src/emm/sap/emm_send.o \ - EURECOM-NAS/src/emm/sap/EmmCommonProcedureInitiated.o \ - EURECOM-NAS/src/emm/sap/EmmRegistered.o \ - EURECOM-NAS/src/emm/sap/EmmDeregisteredAttachNeeded.o \ - EURECOM-NAS/src/emm/sap/EmmRegisteredImsiDetachInitiated.o \ - EURECOM-NAS/src/emm/sap/EmmServiceRequestInitiated.o \ - EURECOM-NAS/src/emm/sap/EmmDeregisteredAttemptingToAttach.o \ - EURECOM-NAS/src/emm/sap/emm_fsm.o \ - EURECOM-NAS/src/emm/sap/EmmRegisteredInitiated.o \ - EURECOM-NAS/src/emm/sap/EmmTrackingAreaUpdatingInitiated.o \ - EURECOM-NAS/src/emm/sap/EmmDeregistered.o \ - EURECOM-NAS/src/emm/sap/EmmRegisteredLimitedService.o \ - EURECOM-NAS/src/emm/sap/EmmDeregisteredInitiated.o \ - EURECOM-NAS/src/emm/sap/EmmNull.o \ - EURECOM-NAS/src/emm/sap/EmmRegisteredNoCellAvailable.o \ - EURECOM-NAS/src/emm/sap/EmmDeregisteredLimitedService.o \ - EURECOM-NAS/src/emm/sap/emm_recv.o \ - EURECOM-NAS/src/emm/sap/EmmRegisteredNormalService.o \ - EURECOM-NAS/src/emm/sap/EmmDeregisteredNoCellAvailable.o \ - EURECOM-NAS/src/emm/sap/EmmRegisteredPlmnSearch.o - -libnas_esm_OBJS = \ - EURECOM-NAS/src/esm/esm_ebr_context.o \ - EURECOM-NAS/src/esm/PdnConnectivity.o \ - EURECOM-NAS/src/esm/esm_ebr.o \ - EURECOM-NAS/src/esm/EpsBearerContextDeactivation.o \ - EURECOM-NAS/src/esm/DefaultEpsBearerContextActivation.o \ - EURECOM-NAS/src/esm/DedicatedEpsBearerContextActivation.o \ - EURECOM-NAS/src/esm/PdnDisconnect.o \ - EURECOM-NAS/src/esm/EsmStatusHdl.o \ - EURECOM-NAS/src/esm/esm_main.o \ - EURECOM-NAS/src/esm/esm_pt.o \ - EURECOM-NAS/src/esm/esm_ip.o - -libnas_esm_msg_OBJS = \ - EURECOM-NAS/src/esm/msg/ModifyEpsBearerContextRequest.o \ - EURECOM-NAS/src/esm/msg/DeactivateEpsBearerContextRequest.o \ - EURECOM-NAS/src/esm/msg/BearerResourceAllocationReject.o \ - EURECOM-NAS/src/esm/msg/BearerResourceModificationRequest.o \ - EURECOM-NAS/src/esm/msg/ActivateDedicatedEpsBearerContextRequest.o \ - EURECOM-NAS/src/esm/msg/EsmInformationResponse.o \ - EURECOM-NAS/src/esm/msg/PdnDisconnectReject.o \ - EURECOM-NAS/src/esm/msg/ActivateDedicatedEpsBearerContextAccept.o \ - EURECOM-NAS/src/esm/msg/PdnDisconnectRequest.o \ - EURECOM-NAS/src/esm/msg/BearerResourceModificationReject.o \ - EURECOM-NAS/src/esm/msg/ActivateDefaultEpsBearerContextAccept.o \ - EURECOM-NAS/src/esm/msg/ActivateDedicatedEpsBearerContextReject.o \ - EURECOM-NAS/src/esm/msg/ModifyEpsBearerContextAccept.o \ - EURECOM-NAS/src/esm/msg/DeactivateEpsBearerContextAccept.o \ - EURECOM-NAS/src/esm/msg/esm_msg.o \ - EURECOM-NAS/src/esm/msg/EsmInformationRequest.o \ - EURECOM-NAS/src/esm/msg/ActivateDefaultEpsBearerContextRequest.o \ - EURECOM-NAS/src/esm/msg/ModifyEpsBearerContextReject.o \ - EURECOM-NAS/src/esm/msg/EsmStatus.o \ - EURECOM-NAS/src/esm/msg/PdnConnectivityReject.o \ - EURECOM-NAS/src/esm/msg/ActivateDefaultEpsBearerContextReject.o \ - EURECOM-NAS/src/esm/msg/PdnConnectivityRequest.o \ - EURECOM-NAS/src/esm/msg/BearerResourceAllocationRequest.o - -libnas_esm_sap_OBJS = \ - EURECOM-NAS/src/esm/sap/esm_recv.o \ - EURECOM-NAS/src/esm/sap/esm_send.o \ - EURECOM-NAS/src/esm/sap/esm_sap.o - -libnas_ies_OBJS = \ - EURECOM-NAS/src/ies/UeSecurityCapability.o \ - EURECOM-NAS/src/ies/SecurityHeaderType.o \ - EURECOM-NAS/src/ies/RadioPriority.o \ - EURECOM-NAS/src/ies/EpsAttachResult.o \ - EURECOM-NAS/src/ies/ImeisvRequest.o \ - EURECOM-NAS/src/ies/EmergencyNumberList.o \ - EURECOM-NAS/src/ies/SupportedCodecList.o \ - EURECOM-NAS/src/ies/EsmCause.o \ - EURECOM-NAS/src/ies/NetworkName.o \ - EURECOM-NAS/src/ies/AuthenticationResponseParameter.o \ - EURECOM-NAS/src/ies/Cli.o \ - EURECOM-NAS/src/ies/AccessPointName.o \ - EURECOM-NAS/src/ies/DaylightSavingTime.o \ - EURECOM-NAS/src/ies/LcsIndicator.o \ - EURECOM-NAS/src/ies/PagingIdentity.o \ - EURECOM-NAS/src/ies/EpsMobileIdentity.o \ - EURECOM-NAS/src/ies/GutiType.o \ - EURECOM-NAS/src/ies/NasKeySetIdentifier.o \ - EURECOM-NAS/src/ies/CsfbResponse.o \ - EURECOM-NAS/src/ies/PacketFlowIdentifier.o \ - EURECOM-NAS/src/ies/ApnAggregateMaximumBitRate.o \ - EURECOM-NAS/src/ies/EpsBearerContextStatus.o \ - EURECOM-NAS/src/ies/MobileIdentity.o \ - EURECOM-NAS/src/ies/AuthenticationFailureParameter.o \ - EURECOM-NAS/src/ies/EpsUpdateResult.o \ - EURECOM-NAS/src/ies/TimeZone.o \ - EURECOM-NAS/src/ies/MessageType.o \ - EURECOM-NAS/src/ies/EmmCause.o \ - EURECOM-NAS/src/ies/MobileStationClassmark2.o \ - EURECOM-NAS/src/ies/AuthenticationParameterRand.o \ - EURECOM-NAS/src/ies/PdnAddress.o \ - EURECOM-NAS/src/ies/MobileStationClassmark3.o \ - EURECOM-NAS/src/ies/ServiceType.o \ - EURECOM-NAS/src/ies/NasRequestType.o \ - EURECOM-NAS/src/ies/PlmnList.o \ - EURECOM-NAS/src/ies/EpsQualityOfService.o \ - EURECOM-NAS/src/ies/NasMessageContainer.o \ - EURECOM-NAS/src/ies/EsmInformationTransferFlag.o \ - EURECOM-NAS/src/ies/TrafficFlowTemplate.o \ - EURECOM-NAS/src/ies/LinkedEpsBearerIdentity.o \ - EURECOM-NAS/src/ies/NasSecurityAlgorithms.o \ - EURECOM-NAS/src/ies/LlcServiceAccessPointIdentifier.o \ - EURECOM-NAS/src/ies/ShortMac.o \ - EURECOM-NAS/src/ies/TrafficFlowAggregateDescription.o \ - EURECOM-NAS/src/ies/PTmsiSignature.o \ - EURECOM-NAS/src/ies/ProtocolDiscriminator.o \ - EURECOM-NAS/src/ies/EpsBearerIdentity.o \ - EURECOM-NAS/src/ies/TimeZoneAndTime.o \ - EURECOM-NAS/src/ies/TrackingAreaIdentityList.o \ - EURECOM-NAS/src/ies/QualityOfService.o \ - EURECOM-NAS/src/ies/EpsUpdateType.o \ - EURECOM-NAS/src/ies/PdnType.o \ - EURECOM-NAS/src/ies/UeRadioCapabilityInformationUpdateNeeded.o \ - EURECOM-NAS/src/ies/AuthenticationParameterAutn.o \ - EURECOM-NAS/src/ies/EpsAttachType.o \ - EURECOM-NAS/src/ies/IdentityType2.o \ - EURECOM-NAS/src/ies/LcsClientIdentity.o \ - EURECOM-NAS/src/ies/DetachType.o \ - EURECOM-NAS/src/ies/LocationAreaIdentification.o \ - EURECOM-NAS/src/ies/TrackingAreaIdentity.o \ - EURECOM-NAS/src/ies/CipheringKeySequenceNumber.o \ - EURECOM-NAS/src/ies/MsNetworkCapability.o \ - EURECOM-NAS/src/ies/UeNetworkCapability.o \ - EURECOM-NAS/src/ies/ProtocolConfigurationOptions.o \ - EURECOM-NAS/src/ies/AdditionalUpdateType.o \ - EURECOM-NAS/src/ies/TmsiStatus.o \ - EURECOM-NAS/src/ies/EsmMessageContainer.o \ - EURECOM-NAS/src/ies/Nonce.o \ - EURECOM-NAS/src/ies/ProcedureTransactionIdentity.o \ - EURECOM-NAS/src/ies/TransactionIdentifier.o \ - EURECOM-NAS/src/ies/AdditionalUpdateResult.o \ - EURECOM-NAS/src/ies/GprsTimer.o \ - EURECOM-NAS/src/ies/EpsNetworkFeatureSupport.o \ - EURECOM-NAS/src/ies/SsCode.o \ - EURECOM-NAS/src/ies/DrxParameter.o \ - EURECOM-NAS/src/ies/KsiAndSequenceNumber.o \ - EURECOM-NAS/src/ies/VoiceDomainPreferenceAndUeUsageSetting.o - -libnas_utils_OBJS = \ - EURECOM-NAS/src/util/device.o \ - EURECOM-NAS/src/util/memory.o \ - EURECOM-NAS/src/util/nas_log.o \ - EURECOM-NAS/src/util/nas_timer.o \ - EURECOM-NAS/src/util/socket.o \ - EURECOM-NAS/src/util/stty.o \ - EURECOM-NAS/src/util/TLVEncoder.o \ - EURECOM-NAS/src/util/TLVDecoder.o \ - EURECOM-NAS/src/util/OctetString.o - -libnas_user_OBJS = \ - EURECOM-NAS/src/api/user/user_api.o \ - EURECOM-NAS/src/api/user/user_indication.o \ - EURECOM-NAS/src/api/user/at_command.o \ - EURECOM-NAS/src/api/user/at_error.o \ - EURECOM-NAS/src/api/user/at_response.o - -libnas_usim_OBJS = \ - EURECOM-NAS/src/api/usim/aka_functions.o \ - EURECOM-NAS/src/api/usim/usim_api.o - -libnas_OBJS = \ - nas_ue_task.o \ - nas_itti_messaging.o \ - EURECOM-NAS/src/nas_parser.o \ - EURECOM-NAS/src/nas_proc.o \ - EURECOM-NAS/src/nas_user.o \ - $(libnas_utils_OBJS) \ - $(libnas_user_OBJS) \ - $(libnas_usim_OBJS) \ - $(libnas_emm_OBJS) \ - $(libnas_emm_msg_OBJS) \ - $(libnas_emm_sap_OBJS) \ - $(libnas_esm_OBJS) \ - $(libnas_esm_msg_OBJS) \ - $(libnas_esm_sap_OBJS) \ - $(libnas_ies_OBJS) \ - $(libnas_api_OBJS) - -NAS_UE_COMPILED_OBJS = $(addprefix $(OUTDIR)/,$(libnas_OBJS)) - -# pull in dependency info for *existing* .o files --include $(NAS_UE_COMPILED_OBJS:.o=.d) - -CFLAGS = \ - -g \ - -Wall \ - -DNAS_UE \ - -DNAS_BUILT_IN_UE \ - -Wuninitialized \ - -Werror=implicit-function-declaration \ - $(UENAS_CFLAGS) \ - $(libnas_INCLUDES) - -.SECONDEXPANSION: -$(NAS_UE_COMPILED_OBJS): %.o : $$(subst $(OUTDIR), $(UE_NAS_DIR), $$*.c) - @echo "Compiling $<" - @if [ ! -d $(dir $@) ]; then mkdir -p $(dir $@); fi; - @$(CC) -c $(CFLAGS) -o $@ $< - @$(CC) -MM $(CFLAGS) $< > $(basename $@).d - @mv -f $(basename $@).d $(basename $@).d.tmp - @sed -e 's|.*:|$@:|' < $(basename $@).d.tmp > $(basename $@).d - @sed -e 's/.*://' -e 's/\\$$//' < $(basename $@).d.tmp | fmt -1 | \ - sed -e 's/^ *//' -e 's/$$/:/' >> $(basename $@).d - @rm -f $(basename $@).d.tmp - -$(OUTDIR)/libuenas.a: $(NAS_UE_COMPILED_OBJS) - @echo Creating UE_NAS archive - @$(AR) rcs $@ $(addprefix $(OUTDIR)/,$(libnas_OBJS)) - -clean: - @$(RM_F_V) -r $(OUTDIR)/*.o - @$(RM_F_V) -r $(OUTDIR)/*.d - @$(RM_F_V) $(OUTDIR)/libuenas.a - -cleanall: - @$(RM_F_V) -r $(OUTDIR) - -showcflags: - @echo uenas cflags: $(CFLAGS) diff --git a/openair-cn/NAS/Makefile.am b/openair-cn/NAS/Makefile.am deleted file mode 100644 index 4e71ef5e72..0000000000 --- a/openair-cn/NAS/Makefile.am +++ /dev/null @@ -1,67 +0,0 @@ -################################################################################ -# OpenAirInterface -# Copyright(c) 1999 - 2014 Eurecom -# -# OpenAirInterface is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# -# OpenAirInterface is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with OpenAirInterface.The full GNU General Public License is -# included in this distribution in the file called "COPYING". If not, -# see . -# -# Contact Information -# OpenAirInterface Admin: openair_admin@eurecom.fr -# OpenAirInterface Tech : openair_tech@eurecom.fr -# OpenAirInterface Dev : openair4g-devel@eurecom.fr -# -# Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. -# -################################################################################ -noinst_LTLIBRARIES = libnas.la - -libnas_la_LDFLAGS = -all-static - -AM_CFLAGS = \ - @ADD_CFLAGS@ \ - -DNAS_MME \ - -DNAS_BUILT_IN_EPC \ - -DENABLE_ITTI \ - -I$(top_srcdir)/COMMON \ - -I$(top_srcdir)/SECU \ - -I$(top_srcdir)/INTERTASK_INTERFACE \ - -I$(top_srcdir)/NAS/EURECOM-NAS/src/api/user \ - -I$(top_srcdir)/NAS/EURECOM-NAS/src/api/mme \ - -I$(top_srcdir)/NAS/EURECOM-NAS/src/api/network \ - -I$(top_srcdir)/NAS/EURECOM-NAS/src/emm/msg \ - -I$(top_srcdir)/NAS/EURECOM-NAS/src/emm/sap \ - -I$(top_srcdir)/NAS/EURECOM-NAS/src/emm \ - -I$(top_srcdir)/NAS/EURECOM-NAS/src/esm/msg \ - -I$(top_srcdir)/NAS/EURECOM-NAS/src/esm/sap/msg \ - -I$(top_srcdir)/NAS/EURECOM-NAS/src/esm/sap \ - -I$(top_srcdir)/NAS/EURECOM-NAS/src/esm \ - -I$(top_srcdir)/NAS/EURECOM-NAS/src/ies \ - -I$(top_srcdir)/NAS/EURECOM-NAS/src/include \ - -I$(top_srcdir)/NAS/EURECOM-NAS/src/util \ - -I$(top_srcdir)/NAS/EURECOM-NAS/src/ \ - -I$(top_srcdir)/UTILS - -if DISABLE_USE_NAS -libnas_la_SOURCES = \ - nas_main.c -else -include Makefile.inc -libnas_la_SOURCES = \ - nas_main.c \ - nas_itti_messaging.c \ - nas_itti_messaging.h \ - $(libnas_SRCS) -endif \ No newline at end of file diff --git a/openair-cn/NAS/Makefile.inc b/openair-cn/NAS/Makefile.inc deleted file mode 100644 index d4518ae573..0000000000 --- a/openair-cn/NAS/Makefile.inc +++ /dev/null @@ -1,429 +0,0 @@ -################################################################################ -# OpenAirInterface -# Copyright(c) 1999 - 2014 Eurecom -# -# OpenAirInterface is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# -# OpenAirInterface is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with OpenAirInterface.The full GNU General Public License is -# included in this distribution in the file called "COPYING". If not, -# see . -# -# Contact Information -# OpenAirInterface Admin: openair_admin@eurecom.fr -# OpenAirInterface Tech : openair_tech@eurecom.fr -# OpenAirInterface Dev : openair4g-devel@eurecom.fr -# -# Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. -# -################################################################################ -libnas_api_SRCS = \ - EURECOM-NAS/src/api/mme/mme_api.c \ - EURECOM-NAS/src/api/mme/mme_api.h \ - EURECOM-NAS/src/api/network/nas_message.c \ - EURECOM-NAS/src/api/network/nas_message.h - -libnas_emm_SRCS = \ - EURECOM-NAS/src/emm/Attach.c \ - EURECOM-NAS/src/emm/Authentication.c \ - EURECOM-NAS/src/emm/Detach.c \ - EURECOM-NAS/src/emm/EmmCommon.c \ - EURECOM-NAS/src/emm/EmmCommon.h \ - EURECOM-NAS/src/emm/emmData.h \ - EURECOM-NAS/src/emm/emm_data_ctx.c \ - EURECOM-NAS/src/emm/emm_main.c \ - EURECOM-NAS/src/emm/emm_main.h \ - EURECOM-NAS/src/emm/emm_proc.h \ - EURECOM-NAS/src/emm/EmmStatusHdl.c \ - EURECOM-NAS/src/emm/Identification.c \ - EURECOM-NAS/src/emm/IdleMode.c \ - EURECOM-NAS/src/emm/IdleMode.h \ - EURECOM-NAS/src/emm/LowerLayer.c \ - EURECOM-NAS/src/emm/LowerLayer.h \ - EURECOM-NAS/src/emm/SecurityModeControl.c \ - EURECOM-NAS/src/emm/ServiceRequestHdl.c \ - EURECOM-NAS/src/emm/TrackingAreaUpdate.c - -libnas_emm_msg_SRCS = \ - EURECOM-NAS/src/emm/msg/AttachAccept.c \ - EURECOM-NAS/src/emm/msg/AuthenticationFailure.c \ - EURECOM-NAS/src/emm/msg/CsServiceNotification.c \ - EURECOM-NAS/src/emm/msg/emm_cause.h \ - EURECOM-NAS/src/emm/msg/ExtendedServiceRequest.c \ - EURECOM-NAS/src/emm/msg/IdentityResponse.c \ - EURECOM-NAS/src/emm/msg/SecurityModeReject.h \ - EURECOM-NAS/src/emm/msg/TrackingAreaUpdateComplete.h \ - EURECOM-NAS/src/emm/msg/AttachAccept.h \ - EURECOM-NAS/src/emm/msg/AuthenticationFailure.h \ - EURECOM-NAS/src/emm/msg/CsServiceNotification.h \ - EURECOM-NAS/src/emm/msg/EmmInformation.c \ - EURECOM-NAS/src/emm/msg/ExtendedServiceRequest.h \ - EURECOM-NAS/src/emm/msg/IdentityResponse.h \ - EURECOM-NAS/src/emm/msg/ServiceReject.c \ - EURECOM-NAS/src/emm/msg/TrackingAreaUpdateReject.c \ - EURECOM-NAS/src/emm/msg/AttachComplete.c \ - EURECOM-NAS/src/emm/msg/AuthenticationReject.c \ - EURECOM-NAS/src/emm/msg/DetachAccept.c \ - EURECOM-NAS/src/emm/msg/EmmInformation.h \ - EURECOM-NAS/src/emm/msg/GutiReallocationCommand.c \ - EURECOM-NAS/src/emm/msg/ServiceReject.h \ - EURECOM-NAS/src/emm/msg/TrackingAreaUpdateReject.h \ - EURECOM-NAS/src/emm/msg/AttachComplete.h \ - EURECOM-NAS/src/emm/msg/AuthenticationReject.h \ - EURECOM-NAS/src/emm/msg/DetachAccept.h \ - EURECOM-NAS/src/emm/msg/emm_msg.c \ - EURECOM-NAS/src/emm/msg/GutiReallocationCommand.h \ - EURECOM-NAS/src/emm/msg/SecurityModeCommand.c \ - EURECOM-NAS/src/emm/msg/ServiceRequest.c \ - EURECOM-NAS/src/emm/msg/TrackingAreaUpdateRequest.c \ - EURECOM-NAS/src/emm/msg/AttachReject.c \ - EURECOM-NAS/src/emm/msg/AuthenticationRequest.c \ - EURECOM-NAS/src/emm/msg/DetachRequest.c \ - EURECOM-NAS/src/emm/msg/emm_msgDef.h \ - EURECOM-NAS/src/emm/msg/GutiReallocationComplete.c \ - EURECOM-NAS/src/emm/msg/NASSecurityModeCommand.h \ - EURECOM-NAS/src/emm/msg/ServiceRequest.h \ - EURECOM-NAS/src/emm/msg/TrackingAreaUpdateRequest.h \ - EURECOM-NAS/src/emm/msg/AttachReject.h \ - EURECOM-NAS/src/emm/msg/AuthenticationRequest.h \ - EURECOM-NAS/src/emm/msg/DetachRequest.h \ - EURECOM-NAS/src/emm/msg/emm_msg.h \ - EURECOM-NAS/src/emm/msg/GutiReallocationComplete.h \ - EURECOM-NAS/src/emm/msg/SecurityModeComplete.c \ - EURECOM-NAS/src/emm/msg/TrackingAreaUpdateAccept.c \ - EURECOM-NAS/src/emm/msg/UplinkNasTransport.c \ - EURECOM-NAS/src/emm/msg/AttachRequest.c \ - EURECOM-NAS/src/emm/msg/AuthenticationResponse.c \ - EURECOM-NAS/src/emm/msg/DownlinkNasTransport.c \ - EURECOM-NAS/src/emm/msg/EmmStatus.c \ - EURECOM-NAS/src/emm/msg/IdentityRequest.c \ - EURECOM-NAS/src/emm/msg/NASSecurityModeComplete.h \ - EURECOM-NAS/src/emm/msg/TrackingAreaUpdateAccept.h \ - EURECOM-NAS/src/emm/msg/UplinkNasTransport.h \ - EURECOM-NAS/src/emm/msg/AttachRequest.h \ - EURECOM-NAS/src/emm/msg/AuthenticationResponse.h \ - EURECOM-NAS/src/emm/msg/DownlinkNasTransport.h \ - EURECOM-NAS/src/emm/msg/EmmStatus.h \ - EURECOM-NAS/src/emm/msg/IdentityRequest.h \ - EURECOM-NAS/src/emm/msg/SecurityModeReject.c \ - EURECOM-NAS/src/emm/msg/TrackingAreaUpdateComplete.c - -libnas_emm_sap_SRCS = \ - EURECOM-NAS/src/emm/sap/emm_as.c \ - EURECOM-NAS/src/emm/sap/emm_cn.c \ - EURECOM-NAS/src/emm/sap/emm_cn.h \ - EURECOM-NAS/src/emm/sap/EmmDeregisteredNoImsi.c \ - EURECOM-NAS/src/emm/sap/emm_reg.c \ - EURECOM-NAS/src/emm/sap/EmmRegisteredUpdateNeeded.c \ - EURECOM-NAS/src/emm/sap/emm_asDef.h \ - EURECOM-NAS/src/emm/sap/EmmDeregisteredNormalService.c \ - EURECOM-NAS/src/emm/sap/emm_regDef.h \ - EURECOM-NAS/src/emm/sap/emm_sap.c \ - EURECOM-NAS/src/emm/sap/EmmDeregisteredPlmnSearch.c \ - EURECOM-NAS/src/emm/sap/emm_reg.h \ - EURECOM-NAS/src/emm/sap/emm_sap.h \ - EURECOM-NAS/src/emm/sap/emm_as.h \ - EURECOM-NAS/src/emm/sap/emm_esm.c \ - EURECOM-NAS/src/emm/sap/EmmRegisteredAttemptingToUpdate.c \ - EURECOM-NAS/src/emm/sap/emm_send.c \ - EURECOM-NAS/src/emm/sap/EmmCommonProcedureInitiated.c \ - EURECOM-NAS/src/emm/sap/emm_esmDef.h \ - EURECOM-NAS/src/emm/sap/EmmRegistered.c \ - EURECOM-NAS/src/emm/sap/emm_send.h \ - EURECOM-NAS/src/emm/sap/EmmDeregisteredAttachNeeded.c \ - EURECOM-NAS/src/emm/sap/emm_esm.h \ - EURECOM-NAS/src/emm/sap/EmmRegisteredImsiDetachInitiated.c \ - EURECOM-NAS/src/emm/sap/EmmServiceRequestInitiated.c \ - EURECOM-NAS/src/emm/sap/EmmDeregisteredAttemptingToAttach.c \ - EURECOM-NAS/src/emm/sap/emm_fsm.c \ - EURECOM-NAS/src/emm/sap/EmmRegisteredInitiated.c \ - EURECOM-NAS/src/emm/sap/EmmTrackingAreaUpdatingInitiated.c \ - EURECOM-NAS/src/emm/sap/EmmDeregistered.c \ - EURECOM-NAS/src/emm/sap/emm_fsm.h \ - EURECOM-NAS/src/emm/sap/EmmRegisteredLimitedService.c \ - EURECOM-NAS/src/emm/sap/EmmDeregisteredInitiated.c \ - EURECOM-NAS/src/emm/sap/EmmNull.c \ - EURECOM-NAS/src/emm/sap/EmmRegisteredNoCellAvailable.c \ - EURECOM-NAS/src/emm/sap/EmmDeregisteredLimitedService.c \ - EURECOM-NAS/src/emm/sap/emm_recv.c \ - EURECOM-NAS/src/emm/sap/EmmRegisteredNormalService.c \ - EURECOM-NAS/src/emm/sap/EmmDeregisteredNoCellAvailable.c \ - EURECOM-NAS/src/emm/sap/emm_recv.h \ - EURECOM-NAS/src/emm/sap/EmmRegisteredPlmnSearch.c - -libnas_esm_SRCS = \ - EURECOM-NAS/src/esm/esm_ebr_context.c \ - EURECOM-NAS/src/esm/PdnConnectivity.c \ - EURECOM-NAS/src/esm/sap/esm_recv.c \ - EURECOM-NAS/src/esm/sap/esm_send.c \ - EURECOM-NAS/src/esm/sap/esm_sap.c \ - EURECOM-NAS/src/esm/esm_ebr.c \ - EURECOM-NAS/src/esm/EpsBearerContextDeactivation.c \ - EURECOM-NAS/src/esm/DefaultEpsBearerContextActivation.c \ - EURECOM-NAS/src/esm/DedicatedEpsBearerContextActivation.c \ - EURECOM-NAS/src/esm/PdnDisconnect.c \ - EURECOM-NAS/src/esm/EsmStatusHdl.c \ - EURECOM-NAS/src/esm/esm_main.c \ - EURECOM-NAS/src/esm/esm_pt.c \ - EURECOM-NAS/src/esm/esm_proc.h \ - EURECOM-NAS/src/esm/esm_main.h \ - EURECOM-NAS/src/esm/sap/esm_recv.h \ - EURECOM-NAS/src/esm/sap/esm_sap.h \ - EURECOM-NAS/src/esm/sap/esm_send.h \ - EURECOM-NAS/src/esm/sap/esm_sapDef.h \ - EURECOM-NAS/src/esm/esm_ebr_context.h \ - EURECOM-NAS/src/esm/esmData.h \ - EURECOM-NAS/src/esm/esm_pt.h \ - EURECOM-NAS/src/esm/esm_ebr.h \ - EURECOM-NAS/src/esm/esm_ip.c - -libnas_esm_msg_SRCS = \ - EURECOM-NAS/src/esm/msg/EsmInformationRequest.h \ - EURECOM-NAS/src/esm/msg/EsmStatus.h \ - EURECOM-NAS/src/esm/msg/DeactivateEpsBearerContextAccept.h \ - EURECOM-NAS/src/esm/msg/BearerResourceAllocationReject.h \ - EURECOM-NAS/src/esm/msg/ActivateDefaultEpsBearerContextReject.h \ - EURECOM-NAS/src/esm/msg/BearerResourceModificationReject.h \ - EURECOM-NAS/src/esm/msg/PdnConnectivityReject.h \ - EURECOM-NAS/src/esm/msg/PdnDisconnectRequest.h \ - EURECOM-NAS/src/esm/msg/DeactivateEpsBearerContextRequest.h \ - EURECOM-NAS/src/esm/msg/PdnConnectivityRequest.h \ - EURECOM-NAS/src/esm/msg/BearerResourceModificationRequest.h \ - EURECOM-NAS/src/esm/msg/PdnDisconnectReject.h \ - EURECOM-NAS/src/esm/msg/ActivateDedicatedEpsBearerContextRequest.h \ - EURECOM-NAS/src/esm/msg/ActivateDefaultEpsBearerContextAccept.h \ - EURECOM-NAS/src/esm/msg/ActivateDedicatedEpsBearerContextReject.h \ - EURECOM-NAS/src/esm/msg/esm_msg.h \ - EURECOM-NAS/src/esm/msg/ModifyEpsBearerContextAccept.h \ - EURECOM-NAS/src/esm/msg/ModifyEpsBearerContextReject.h \ - EURECOM-NAS/src/esm/msg/EsmInformationResponse.h \ - EURECOM-NAS/src/esm/msg/ModifyEpsBearerContextRequest.h \ - EURECOM-NAS/src/esm/msg/ActivateDedicatedEpsBearerContextAccept.h \ - EURECOM-NAS/src/esm/msg/esm_cause.h \ - EURECOM-NAS/src/esm/msg/BearerResourceAllocationRequest.h \ - EURECOM-NAS/src/esm/msg/ActivateDefaultEpsBearerContextRequest.h \ - EURECOM-NAS/src/esm/msg/esm_msgDef.h \ - EURECOM-NAS/src/esm/msg/ModifyEpsBearerContextRequest.c \ - EURECOM-NAS/src/esm/msg/DeactivateEpsBearerContextRequest.c \ - EURECOM-NAS/src/esm/msg/BearerResourceAllocationReject.c \ - EURECOM-NAS/src/esm/msg/BearerResourceModificationRequest.c \ - EURECOM-NAS/src/esm/msg/ActivateDedicatedEpsBearerContextRequest.c \ - EURECOM-NAS/src/esm/msg/EsmInformationResponse.c \ - EURECOM-NAS/src/esm/msg/PdnDisconnectReject.c \ - EURECOM-NAS/src/esm/msg/ActivateDedicatedEpsBearerContextAccept.c \ - EURECOM-NAS/src/esm/msg/PdnDisconnectRequest.c \ - EURECOM-NAS/src/esm/msg/BearerResourceModificationReject.c \ - EURECOM-NAS/src/esm/msg/ActivateDefaultEpsBearerContextAccept.c \ - EURECOM-NAS/src/esm/msg/ActivateDedicatedEpsBearerContextReject.c \ - EURECOM-NAS/src/esm/msg/ModifyEpsBearerContextAccept.c \ - EURECOM-NAS/src/esm/msg/DeactivateEpsBearerContextAccept.c \ - EURECOM-NAS/src/esm/msg/esm_msg.c \ - EURECOM-NAS/src/esm/msg/EsmInformationRequest.c \ - EURECOM-NAS/src/esm/msg/ActivateDefaultEpsBearerContextRequest.c \ - EURECOM-NAS/src/esm/msg/ModifyEpsBearerContextReject.c \ - EURECOM-NAS/src/esm/msg/EsmStatus.c \ - EURECOM-NAS/src/esm/msg/PdnConnectivityReject.c \ - EURECOM-NAS/src/esm/msg/ActivateDefaultEpsBearerContextReject.c \ - EURECOM-NAS/src/esm/msg/PdnConnectivityRequest.c \ - EURECOM-NAS/src/esm/msg/BearerResourceAllocationRequest.c - -libnas_esm_sap_SRCS = \ - EURECOM-NAS/src/esm/sap/esm_recv.c \ - EURECOM-NAS/src/esm/sap/esm_send.c \ - EURECOM-NAS/src/esm/sap/esm_sap.c - -libnas_ies_SRCS = \ - EURECOM-NAS/src/ies/UeSecurityCapability.c \ - EURECOM-NAS/src/ies/SecurityHeaderType.c \ - EURECOM-NAS/src/ies/RadioPriority.c \ - EURECOM-NAS/src/ies/EpsAttachResult.c \ - EURECOM-NAS/src/ies/ImeisvRequest.c \ - EURECOM-NAS/src/ies/EmergencyNumberList.c \ - EURECOM-NAS/src/ies/SupportedCodecList.c \ - EURECOM-NAS/src/ies/EsmCause.c \ - EURECOM-NAS/src/ies/NetworkName.c \ - EURECOM-NAS/src/ies/AuthenticationResponseParameter.c \ - EURECOM-NAS/src/ies/Cli.c \ - EURECOM-NAS/src/ies/AccessPointName.c \ - EURECOM-NAS/src/ies/DaylightSavingTime.c \ - EURECOM-NAS/src/ies/LcsIndicator.c \ - EURECOM-NAS/src/ies/PagingIdentity.c \ - EURECOM-NAS/src/ies/EpsMobileIdentity.c \ - EURECOM-NAS/src/ies/GutiType.c \ - EURECOM-NAS/src/ies/NasKeySetIdentifier.c \ - EURECOM-NAS/src/ies/CsfbResponse.c \ - EURECOM-NAS/src/ies/PacketFlowIdentifier.c \ - EURECOM-NAS/src/ies/ApnAggregateMaximumBitRate.c \ - EURECOM-NAS/src/ies/EpsBearerContextStatus.c \ - EURECOM-NAS/src/ies/MobileIdentity.c \ - EURECOM-NAS/src/ies/AuthenticationFailureParameter.c \ - EURECOM-NAS/src/ies/EpsUpdateResult.c \ - EURECOM-NAS/src/ies/TimeZone.c \ - EURECOM-NAS/src/ies/MessageType.c \ - EURECOM-NAS/src/ies/EmmCause.c \ - EURECOM-NAS/src/ies/MobileStationClassmark2.c \ - EURECOM-NAS/src/ies/AuthenticationParameterRand.c \ - EURECOM-NAS/src/ies/PdnAddress.c \ - EURECOM-NAS/src/ies/MobileStationClassmark3.c \ - EURECOM-NAS/src/ies/ServiceType.c \ - EURECOM-NAS/src/ies/NasRequestType.c \ - EURECOM-NAS/src/ies/PlmnList.c \ - EURECOM-NAS/src/ies/EpsQualityOfService.c \ - EURECOM-NAS/src/ies/NasMessageContainer.c \ - EURECOM-NAS/src/ies/EsmInformationTransferFlag.c \ - EURECOM-NAS/src/ies/TrafficFlowTemplate.c \ - EURECOM-NAS/src/ies/LinkedEpsBearerIdentity.c \ - EURECOM-NAS/src/ies/NasSecurityAlgorithms.c \ - EURECOM-NAS/src/ies/LlcServiceAccessPointIdentifier.c \ - EURECOM-NAS/src/ies/ShortMac.c \ - EURECOM-NAS/src/ies/TrafficFlowAggregateDescription.c \ - EURECOM-NAS/src/ies/PTmsiSignature.c \ - EURECOM-NAS/src/ies/ProtocolDiscriminator.c \ - EURECOM-NAS/src/ies/EpsBearerIdentity.c \ - EURECOM-NAS/src/ies/TimeZoneAndTime.c \ - EURECOM-NAS/src/ies/TrackingAreaIdentityList.c \ - EURECOM-NAS/src/ies/QualityOfService.c \ - EURECOM-NAS/src/ies/EpsUpdateType.c \ - EURECOM-NAS/src/ies/PdnType.c \ - EURECOM-NAS/src/ies/UeRadioCapabilityInformationUpdateNeeded.c \ - EURECOM-NAS/src/ies/AuthenticationParameterAutn.c \ - EURECOM-NAS/src/ies/EpsAttachType.c \ - EURECOM-NAS/src/ies/IdentityType2.c \ - EURECOM-NAS/src/ies/LcsClientIdentity.c \ - EURECOM-NAS/src/ies/DetachType.c \ - EURECOM-NAS/src/ies/LocationAreaIdentification.c \ - EURECOM-NAS/src/ies/TrackingAreaIdentity.c \ - EURECOM-NAS/src/ies/CipheringKeySequenceNumber.c \ - EURECOM-NAS/src/ies/MsNetworkCapability.c \ - EURECOM-NAS/src/ies/UeNetworkCapability.c \ - EURECOM-NAS/src/ies/ProtocolConfigurationOptions.c \ - EURECOM-NAS/src/ies/AdditionalUpdateType.c \ - EURECOM-NAS/src/ies/TmsiStatus.c \ - EURECOM-NAS/src/ies/EsmMessageContainer.c \ - EURECOM-NAS/src/ies/Nonce.c \ - EURECOM-NAS/src/ies/ProcedureTransactionIdentity.c \ - EURECOM-NAS/src/ies/TransactionIdentifier.c \ - EURECOM-NAS/src/ies/AdditionalUpdateResult.c \ - EURECOM-NAS/src/ies/GprsTimer.c \ - EURECOM-NAS/src/ies/EpsNetworkFeatureSupport.c \ - EURECOM-NAS/src/ies/SsCode.c \ - EURECOM-NAS/src/ies/DrxParameter.c \ - EURECOM-NAS/src/ies/KsiAndSequenceNumber.c \ - EURECOM-NAS/src/ies/EpsBearerContextStatus.h \ - EURECOM-NAS/src/ies/MobileStationClassmark2.h \ - EURECOM-NAS/src/ies/LcsClientIdentity.h \ - EURECOM-NAS/src/ies/ServiceType.h \ - EURECOM-NAS/src/ies/Cli.h \ - EURECOM-NAS/src/ies/GprsTimer.h \ - EURECOM-NAS/src/ies/AuthenticationParameterAutn.h \ - EURECOM-NAS/src/ies/EmmCause.h \ - EURECOM-NAS/src/ies/PdnAddress.h \ - EURECOM-NAS/src/ies/QualityOfService.h \ - EURECOM-NAS/src/ies/LocationAreaIdentification.h \ - EURECOM-NAS/src/ies/EmergencyNumberList.h \ - EURECOM-NAS/src/ies/UeRadioCapabilityInformationUpdateNeeded.h \ - EURECOM-NAS/src/ies/SupportedCodecList.h \ - EURECOM-NAS/src/ies/AuthenticationFailureParameter.h \ - EURECOM-NAS/src/ies/MobileIdentity.h \ - EURECOM-NAS/src/ies/UeNetworkCapability.h \ - EURECOM-NAS/src/ies/ShortMac.h \ - EURECOM-NAS/src/ies/MessageType.h \ - EURECOM-NAS/src/ies/AdditionalUpdateType.h \ - EURECOM-NAS/src/ies/NasMessageContainer.h \ - EURECOM-NAS/src/ies/TrafficFlowAggregateDescription.h \ - EURECOM-NAS/src/ies/NasKeySetIdentifier.h \ - EURECOM-NAS/src/ies/NasSecurityAlgorithms.h \ - EURECOM-NAS/src/ies/GutiType.h \ - EURECOM-NAS/src/ies/EpsMobileIdentity.h \ - EURECOM-NAS/src/ies/EpsUpdateType.h \ - EURECOM-NAS/src/ies/TrackingAreaIdentity.h \ - EURECOM-NAS/src/ies/TimeZoneAndTime.h \ - EURECOM-NAS/src/ies/AccessPointName.h \ - EURECOM-NAS/src/ies/PdnType.h \ - EURECOM-NAS/src/ies/LlcServiceAccessPointIdentifier.h \ - EURECOM-NAS/src/ies/DaylightSavingTime.h \ - EURECOM-NAS/src/ies/PagingIdentity.h \ - EURECOM-NAS/src/ies/CsfbResponse.h \ - EURECOM-NAS/src/ies/LcsIndicator.h \ - EURECOM-NAS/src/ies/EsmInformationTransferFlag.h \ - EURECOM-NAS/src/ies/EsmMessageContainer.h \ - EURECOM-NAS/src/ies/ImeisvRequest.h \ - EURECOM-NAS/src/ies/PTmsiSignature.h \ - EURECOM-NAS/src/ies/SsCode.h \ - EURECOM-NAS/src/ies/EpsAttachResult.h \ - EURECOM-NAS/src/ies/UeSecurityCapability.h \ - EURECOM-NAS/src/ies/TimeZone.h \ - EURECOM-NAS/src/ies/EpsBearerIdentity.h \ - EURECOM-NAS/src/ies/IdentityType2.h \ - EURECOM-NAS/src/ies/LinkedEpsBearerIdentity.h \ - EURECOM-NAS/src/ies/PacketFlowIdentifier.h \ - EURECOM-NAS/src/ies/RadioPriority.h \ - EURECOM-NAS/src/ies/Nonce.h \ - EURECOM-NAS/src/ies/KsiAndSequenceNumber.h \ - EURECOM-NAS/src/ies/NasRequestType.h \ - EURECOM-NAS/src/ies/ProtocolConfigurationOptions.h \ - EURECOM-NAS/src/ies/AuthenticationResponseParameter.h \ - EURECOM-NAS/src/ies/MobileStationClassmark3.h \ - EURECOM-NAS/src/ies/EpsQualityOfService.h \ - EURECOM-NAS/src/ies/DrxParameter.h \ - EURECOM-NAS/src/ies/EsmCause.h \ - EURECOM-NAS/src/ies/ProcedureTransactionIdentity.h \ - EURECOM-NAS/src/ies/TransactionIdentifier.h \ - EURECOM-NAS/src/ies/ProtocolDiscriminator.h \ - EURECOM-NAS/src/ies/EpsAttachType.h \ - EURECOM-NAS/src/ies/AdditionalUpdateResult.h \ - EURECOM-NAS/src/ies/SecurityHeaderType.h \ - EURECOM-NAS/src/ies/TrafficFlowTemplate.h \ - EURECOM-NAS/src/ies/NetworkName.h \ - EURECOM-NAS/src/ies/PlmnList.h \ - EURECOM-NAS/src/ies/TrackingAreaIdentityList.h \ - EURECOM-NAS/src/ies/DetachType.h \ - EURECOM-NAS/src/ies/AuthenticationParameterRand.h \ - EURECOM-NAS/src/ies/EpsUpdateResult.h \ - EURECOM-NAS/src/ies/MsNetworkCapability.h \ - EURECOM-NAS/src/ies/TmsiStatus.h \ - EURECOM-NAS/src/ies/CipheringKeySequenceNumber.h \ - EURECOM-NAS/src/ies/ApnAggregateMaximumBitRate.h \ - EURECOM-NAS/src/ies/EpsNetworkFeatureSupport.h \ - EURECOM-NAS/src/ies/VoiceDomainPreferenceAndUeUsageSetting.c \ - EURECOM-NAS/src/ies/VoiceDomainPreferenceAndUeUsageSetting.h - -libnas_utils_SRCS = \ - EURECOM-NAS/src/util/nas_log.h \ - EURECOM-NAS/src/util/nas_log.c \ - EURECOM-NAS/src/util/nas_timer.h \ - EURECOM-NAS/src/util/nas_timer.c \ - EURECOM-NAS/src/util/TLVEncoder.h \ - EURECOM-NAS/src/util/TLVEncoder.c \ - EURECOM-NAS/src/util/TLVDecoder.h \ - EURECOM-NAS/src/util/TLVDecoder.c \ - EURECOM-NAS/src/util/OctetString.h \ - EURECOM-NAS/src/util/OctetString.c - -libnas_SRCS = \ - EURECOM-NAS/src/nas_network.c \ - EURECOM-NAS/src/nas_network.h \ - EURECOM-NAS/src/nas_parser.c \ - EURECOM-NAS/src/nas_parser.h \ - EURECOM-NAS/src/nas_proc.c \ - EURECOM-NAS/src/nas_proc.h \ - EURECOM-NAS/src/nas_user.c \ - EURECOM-NAS/src/nas_user.h \ - $(libnas_utils_SRCS) \ - $(libnas_emm_SRCS) \ - $(libnas_emm_msg_SRCS) \ - $(libnas_emm_sap_SRCS) \ - $(libnas_esm_SRCS) \ - $(libnas_esm_msg_SRCS) \ - $(libnas_esm_sap_SRCS) \ - $(libnas_ies_SRCS) \ - $(libnas_api_SRCS) diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/COPYING b/openair-cn/NAS/TEST/AS_SIMULATOR/COPYING similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/emm/COPYING rename to openair-cn/NAS/TEST/AS_SIMULATOR/COPYING diff --git a/openair-cn/NAS/EURECOM-NAS/tst/as_simulator/Makefile b/openair-cn/NAS/TEST/AS_SIMULATOR/Makefile similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/tst/as_simulator/Makefile rename to openair-cn/NAS/TEST/AS_SIMULATOR/Makefile diff --git a/openair-cn/NAS/EURECOM-NAS/tst/as_simulator/as_data.c b/openair-cn/NAS/TEST/AS_SIMULATOR/as_data.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/tst/as_simulator/as_data.c rename to openair-cn/NAS/TEST/AS_SIMULATOR/as_data.c diff --git a/openair-cn/NAS/EURECOM-NAS/tst/as_simulator/as_data.h b/openair-cn/NAS/TEST/AS_SIMULATOR/as_data.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/tst/as_simulator/as_data.h rename to openair-cn/NAS/TEST/AS_SIMULATOR/as_data.h diff --git a/openair-cn/NAS/EURECOM-NAS/tst/as_simulator/as_process.c b/openair-cn/NAS/TEST/AS_SIMULATOR/as_process.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/tst/as_simulator/as_process.c rename to openair-cn/NAS/TEST/AS_SIMULATOR/as_process.c diff --git a/openair-cn/NAS/EURECOM-NAS/tst/as_simulator/as_process.h b/openair-cn/NAS/TEST/AS_SIMULATOR/as_process.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/tst/as_simulator/as_process.h rename to openair-cn/NAS/TEST/AS_SIMULATOR/as_process.h diff --git a/openair-cn/NAS/EURECOM-NAS/tst/as_simulator/as_simulator.c b/openair-cn/NAS/TEST/AS_SIMULATOR/as_simulator.c similarity index 99% rename from openair-cn/NAS/EURECOM-NAS/tst/as_simulator/as_simulator.c rename to openair-cn/NAS/TEST/AS_SIMULATOR/as_simulator.c index 39139e11df..20c49981bd 100644 --- a/openair-cn/NAS/EURECOM-NAS/tst/as_simulator/as_simulator.c +++ b/openair-cn/NAS/TEST/AS_SIMULATOR/as_simulator.c @@ -57,12 +57,12 @@ Description Implements the Access-Stratum simulator operating between /* * Direction of the message to be transfered to the UE NAS process */ -static UInt8_t _as_simulator_ue_transfer = AS_SIMULATOR_NO_TRANSFER; +static uint8_t _as_simulator_ue_transfer = AS_SIMULATOR_NO_TRANSFER; /* * Direction of the message to be transfered to the MME NAS process */ -static UInt8_t _as_simulator_mme_transfer = AS_SIMULATOR_NO_TRANSFER; +static uint8_t _as_simulator_mme_transfer = AS_SIMULATOR_NO_TRANSFER; /* * Size of the message to be transfered to the UE NAS process diff --git a/openair-cn/NAS/EURECOM-NAS/tst/as_simulator/as_simulator_parser.c b/openair-cn/NAS/TEST/AS_SIMULATOR/as_simulator_parser.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/tst/as_simulator/as_simulator_parser.c rename to openair-cn/NAS/TEST/AS_SIMULATOR/as_simulator_parser.c diff --git a/openair-cn/NAS/EURECOM-NAS/tst/as_simulator/as_simulator_parser.h b/openair-cn/NAS/TEST/AS_SIMULATOR/as_simulator_parser.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/tst/as_simulator/as_simulator_parser.h rename to openair-cn/NAS/TEST/AS_SIMULATOR/as_simulator_parser.h diff --git a/openair-cn/NAS/EURECOM-NAS/tst/as_simulator/nas_data.c b/openair-cn/NAS/TEST/AS_SIMULATOR/nas_data.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/tst/as_simulator/nas_data.c rename to openair-cn/NAS/TEST/AS_SIMULATOR/nas_data.c diff --git a/openair-cn/NAS/EURECOM-NAS/tst/as_simulator/nas_data.h b/openair-cn/NAS/TEST/AS_SIMULATOR/nas_data.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/tst/as_simulator/nas_data.h rename to openair-cn/NAS/TEST/AS_SIMULATOR/nas_data.h diff --git a/openair-cn/NAS/EURECOM-NAS/tst/as_simulator/nas_process.c b/openair-cn/NAS/TEST/AS_SIMULATOR/nas_process.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/tst/as_simulator/nas_process.c rename to openair-cn/NAS/TEST/AS_SIMULATOR/nas_process.c diff --git a/openair-cn/NAS/EURECOM-NAS/tst/as_simulator/nas_process.h b/openair-cn/NAS/TEST/AS_SIMULATOR/nas_process.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/tst/as_simulator/nas_process.h rename to openair-cn/NAS/TEST/AS_SIMULATOR/nas_process.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/msg/COPYING b/openair-cn/NAS/TEST/COPYING similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/emm/msg/COPYING rename to openair-cn/NAS/TEST/COPYING diff --git a/openair-cn/NAS/EURECOM-NAS/tst/MSC/ActivatePDN.png b/openair-cn/NAS/TEST/MSC/ActivatePDN.png similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/tst/MSC/ActivatePDN.png rename to openair-cn/NAS/TEST/MSC/ActivatePDN.png diff --git a/openair-cn/NAS/EURECOM-NAS/tst/MSC/AuthenticationReject.png b/openair-cn/NAS/TEST/MSC/AuthenticationReject.png similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/tst/MSC/AuthenticationReject.png rename to openair-cn/NAS/TEST/MSC/AuthenticationReject.png diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/sap/COPYING b/openair-cn/NAS/TEST/MSC/COPYING similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/emm/sap/COPYING rename to openair-cn/NAS/TEST/MSC/COPYING diff --git a/openair-cn/NAS/EURECOM-NAS/tst/MSC/DeactivatePDN.png b/openair-cn/NAS/TEST/MSC/DeactivatePDN.png similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/tst/MSC/DeactivatePDN.png rename to openair-cn/NAS/TEST/MSC/DeactivatePDN.png diff --git a/openair-cn/NAS/EURECOM-NAS/tst/MSC/InitialAttach.png b/openair-cn/NAS/TEST/MSC/InitialAttach.png similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/tst/MSC/InitialAttach.png rename to openair-cn/NAS/TEST/MSC/InitialAttach.png diff --git a/openair-cn/NAS/EURECOM-NAS/tst/MSC/InitialAttachReject.png b/openair-cn/NAS/TEST/MSC/InitialAttachReject.png similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/tst/MSC/InitialAttachReject.png rename to openair-cn/NAS/TEST/MSC/InitialAttachReject.png diff --git a/openair-cn/NAS/EURECOM-NAS/tst/MSC/NomalDetach.png b/openair-cn/NAS/TEST/MSC/NomalDetach.png similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/tst/MSC/NomalDetach.png rename to openair-cn/NAS/TEST/MSC/NomalDetach.png diff --git a/openair-cn/NAS/EURECOM-NAS/tst/MSC/README b/openair-cn/NAS/TEST/MSC/README similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/tst/MSC/README rename to openair-cn/NAS/TEST/MSC/README diff --git a/openair-cn/NAS/EURECOM-NAS/tst/MSC/SwitchOffDetach.png b/openair-cn/NAS/TEST/MSC/SwitchOffDetach.png similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/tst/MSC/SwitchOffDetach.png rename to openair-cn/NAS/TEST/MSC/SwitchOffDetach.png diff --git a/openair-cn/NAS/EURECOM-NAS/tst/MSC/msc_gen.py b/openair-cn/NAS/TEST/MSC/msc_gen.py similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/tst/MSC/msc_gen.py rename to openair-cn/NAS/TEST/MSC/msc_gen.py diff --git a/openair-cn/NAS/EURECOM-NAS/tst/MSC/mscgen b/openair-cn/NAS/TEST/MSC/mscgen similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/tst/MSC/mscgen rename to openair-cn/NAS/TEST/MSC/mscgen diff --git a/openair-cn/NAS/EURECOM-NAS/src/esm/COPYING b/openair-cn/NAS/TEST/NETWORK/COPYING similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/esm/COPYING rename to openair-cn/NAS/TEST/NETWORK/COPYING diff --git a/openair-cn/NAS/EURECOM-NAS/tst/network/Makefile b/openair-cn/NAS/TEST/NETWORK/Makefile similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/tst/network/Makefile rename to openair-cn/NAS/TEST/NETWORK/Makefile diff --git a/openair-cn/NAS/EURECOM-NAS/tst/network/README b/openair-cn/NAS/TEST/NETWORK/README similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/tst/network/README rename to openair-cn/NAS/TEST/NETWORK/README diff --git a/openair-cn/NAS/EURECOM-NAS/tst/network/network_parser.c b/openair-cn/NAS/TEST/NETWORK/network_parser.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/tst/network/network_parser.c rename to openair-cn/NAS/TEST/NETWORK/network_parser.c diff --git a/openair-cn/NAS/EURECOM-NAS/tst/network/network_parser.h b/openair-cn/NAS/TEST/NETWORK/network_parser.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/tst/network/network_parser.h rename to openair-cn/NAS/TEST/NETWORK/network_parser.h diff --git a/openair-cn/NAS/EURECOM-NAS/tst/network/network_simulator.c b/openair-cn/NAS/TEST/NETWORK/network_simulator.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/tst/network/network_simulator.c rename to openair-cn/NAS/TEST/NETWORK/network_simulator.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/esm/msg/COPYING b/openair-cn/NAS/TEST/USER/COPYING similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/esm/msg/COPYING rename to openair-cn/NAS/TEST/USER/COPYING diff --git a/openair-cn/NAS/EURECOM-NAS/tst/user/Makefile b/openair-cn/NAS/TEST/USER/Makefile similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/tst/user/Makefile rename to openair-cn/NAS/TEST/USER/Makefile diff --git a/openair-cn/NAS/EURECOM-NAS/tst/user/user_parser.c b/openair-cn/NAS/TEST/USER/user_parser.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/tst/user/user_parser.c rename to openair-cn/NAS/TEST/USER/user_parser.c diff --git a/openair-cn/NAS/EURECOM-NAS/tst/user/user_parser.h b/openair-cn/NAS/TEST/USER/user_parser.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/tst/user/user_parser.h rename to openair-cn/NAS/TEST/USER/user_parser.h diff --git a/openair-cn/NAS/EURECOM-NAS/tst/user/user_simulator.c b/openair-cn/NAS/TEST/USER/user_simulator.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/tst/user/user_simulator.c rename to openair-cn/NAS/TEST/USER/user_simulator.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/esm/sap/COPYING b/openair-cn/NAS/TOOLS/COPYING similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/esm/sap/COPYING rename to openair-cn/NAS/TOOLS/COPYING diff --git a/openair-cn/NAS/EURECOM-NAS/tools/Makefile b/openair-cn/NAS/TOOLS/Makefile similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/tools/Makefile rename to openair-cn/NAS/TOOLS/Makefile diff --git a/openair-cn/NAS/EURECOM-NAS/tools/network.h b/openair-cn/NAS/TOOLS/network.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/tools/network.h rename to openair-cn/NAS/TOOLS/network.h diff --git a/openair-cn/NAS/EURECOM-NAS/tools/ue_data.c b/openair-cn/NAS/TOOLS/ue_data.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/tools/ue_data.c rename to openair-cn/NAS/TOOLS/ue_data.c diff --git a/openair-cn/NAS/EURECOM-NAS/tools/usim_data.c b/openair-cn/NAS/TOOLS/usim_data.c similarity index 99% rename from openair-cn/NAS/EURECOM-NAS/tools/usim_data.c rename to openair-cn/NAS/TOOLS/usim_data.c index 5354ebac88..ea867fef3c 100644 --- a/openair-cn/NAS/EURECOM-NAS/tools/usim_data.c +++ b/openair-cn/NAS/TOOLS/usim_data.c @@ -515,9 +515,9 @@ static void _display_usim_data(const usim_data_t* data) memcpy(kasme, data->securityctx.Kasme.value, USIM_K_ASME_SIZE); printf("\tKasme\t: \"%s\"\n", kasme); printf("\tulNAScount\t: 0x%.8x\n", - *(UInt32_t*)data->securityctx.ulNAScount.value); + *(uint32_t*)data->securityctx.ulNAScount.value); printf("\tdlNAScount\t: 0x%.8x\n", - *(UInt32_t*)data->securityctx.dlNAScount.value); + *(uint32_t*)data->securityctx.dlNAScount.value); printf("\talgorithmID\t: 0x%.2x\n\n", data->securityctx.algorithmID.value[0]); diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/COPYING b/openair-cn/NAS/UE/API/USER/COPYING similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/ies/COPYING rename to openair-cn/NAS/UE/API/USER/COPYING diff --git a/openair-cn/NAS/EURECOM-NAS/src/api/user/Makefile b/openair-cn/NAS/UE/API/USER/Makefile similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/api/user/Makefile rename to openair-cn/NAS/UE/API/USER/Makefile diff --git a/openair-cn/NAS/EURECOM-NAS/src/api/user/at_command.c b/openair-cn/NAS/UE/API/USER/at_command.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/api/user/at_command.c rename to openair-cn/NAS/UE/API/USER/at_command.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/api/user/at_command.h b/openair-cn/NAS/UE/API/USER/at_command.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/api/user/at_command.h rename to openair-cn/NAS/UE/API/USER/at_command.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/api/user/at_error.c b/openair-cn/NAS/UE/API/USER/at_error.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/api/user/at_error.c rename to openair-cn/NAS/UE/API/USER/at_error.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/api/user/at_error.h b/openair-cn/NAS/UE/API/USER/at_error.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/api/user/at_error.h rename to openair-cn/NAS/UE/API/USER/at_error.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/api/user/at_response.c b/openair-cn/NAS/UE/API/USER/at_response.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/api/user/at_response.c rename to openair-cn/NAS/UE/API/USER/at_response.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/api/user/at_response.h b/openair-cn/NAS/UE/API/USER/at_response.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/api/user/at_response.h rename to openair-cn/NAS/UE/API/USER/at_response.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/api/user/tst/Makefile b/openair-cn/NAS/UE/API/USER/tst/Makefile similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/api/user/tst/Makefile rename to openair-cn/NAS/UE/API/USER/tst/Makefile diff --git a/openair-cn/NAS/EURECOM-NAS/src/api/user/tst/at_parser.c b/openair-cn/NAS/UE/API/USER/tst/at_parser.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/api/user/tst/at_parser.c rename to openair-cn/NAS/UE/API/USER/tst/at_parser.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/api/user/tst/at_parser.in b/openair-cn/NAS/UE/API/USER/tst/at_parser.in similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/api/user/tst/at_parser.in rename to openair-cn/NAS/UE/API/USER/tst/at_parser.in diff --git a/openair-cn/NAS/EURECOM-NAS/src/api/user/tst/at_parser.in.bis b/openair-cn/NAS/UE/API/USER/tst/at_parser.in.bis similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/api/user/tst/at_parser.in.bis rename to openair-cn/NAS/UE/API/USER/tst/at_parser.in.bis diff --git a/openair-cn/NAS/EURECOM-NAS/src/api/user/tst/at_parser.out b/openair-cn/NAS/UE/API/USER/tst/at_parser.out similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/api/user/tst/at_parser.out rename to openair-cn/NAS/UE/API/USER/tst/at_parser.out diff --git a/openair-cn/NAS/EURECOM-NAS/src/api/user/tst/at_parser.out.bis b/openair-cn/NAS/UE/API/USER/tst/at_parser.out.bis similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/api/user/tst/at_parser.out.bis rename to openair-cn/NAS/UE/API/USER/tst/at_parser.out.bis diff --git a/openair-cn/NAS/EURECOM-NAS/src/api/user/tst/smartcom.txt b/openair-cn/NAS/UE/API/USER/tst/smartcom.txt similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/api/user/tst/smartcom.txt rename to openair-cn/NAS/UE/API/USER/tst/smartcom.txt diff --git a/openair-cn/NAS/EURECOM-NAS/src/api/user/user_api.c b/openair-cn/NAS/UE/API/USER/user_api.c similarity index 99% rename from openair-cn/NAS/EURECOM-NAS/src/api/user/user_api.c rename to openair-cn/NAS/UE/API/USER/user_api.c index f8a522de40..42e7cb1538 100644 --- a/openair-cn/NAS/EURECOM-NAS/src/api/user/user_api.c +++ b/openair-cn/NAS/UE/API/USER/user_api.c @@ -45,7 +45,6 @@ Description Implements the API used by the NAS layer running in the UE *****************************************************************************/ -#ifdef NAS_UE #include "user_api.h" #include "nas_log.h" @@ -850,4 +849,3 @@ static int _user_api_pdn_connection_handler(unsigned char id, const void* data, LOG_FUNC_RETURN (bytes); } -#endif // NAS_UE diff --git a/openair-cn/NAS/EURECOM-NAS/src/api/user/user_api.h b/openair-cn/NAS/UE/API/USER/user_api.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/api/user/user_api.h rename to openair-cn/NAS/UE/API/USER/user_api.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/api/user/user_indication.c b/openair-cn/NAS/UE/API/USER/user_indication.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/api/user/user_indication.c rename to openair-cn/NAS/UE/API/USER/user_indication.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/api/user/user_indication.h b/openair-cn/NAS/UE/API/USER/user_indication.h similarity index 98% rename from openair-cn/NAS/EURECOM-NAS/src/api/user/user_indication.h rename to openair-cn/NAS/UE/API/USER/user_indication.h index 799b021148..4cf762b609 100644 --- a/openair-cn/NAS/EURECOM-NAS/src/api/user/user_indication.h +++ b/openair-cn/NAS/UE/API/USER/user_indication.h @@ -90,7 +90,7 @@ typedef struct { * has activated or desactivated a PDN connection */ typedef struct { - UInt8_t cid; /* PDN connection identifier */ + uint8_t cid; /* PDN connection identifier */ network_pdn_state_t status; /* PDN connection status */ } user_ind_pdn_t; diff --git a/openair-cn/NAS/EURECOM-NAS/src/include/COPYING b/openair-cn/NAS/UE/API/USIM/COPYING similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/include/COPYING rename to openair-cn/NAS/UE/API/USIM/COPYING diff --git a/openair-cn/NAS/EURECOM-NAS/src/api/usim/Makefile b/openair-cn/NAS/UE/API/USIM/Makefile similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/api/usim/Makefile rename to openair-cn/NAS/UE/API/USIM/Makefile diff --git a/openair-cn/NAS/EURECOM-NAS/src/api/usim/aka_functions.c b/openair-cn/NAS/UE/API/USIM/aka_functions.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/api/usim/aka_functions.c rename to openair-cn/NAS/UE/API/USIM/aka_functions.c diff --git a/openair-cn/NAS/EURECOM-NAS/src/api/usim/aka_functions.h b/openair-cn/NAS/UE/API/USIM/aka_functions.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/api/usim/aka_functions.h rename to openair-cn/NAS/UE/API/USIM/aka_functions.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/api/usim/usim_api.c b/openair-cn/NAS/UE/API/USIM/usim_api.c similarity index 96% rename from openair-cn/NAS/EURECOM-NAS/src/api/usim/usim_api.c rename to openair-cn/NAS/UE/API/USIM/usim_api.c index c9900ac68f..e69e78ddec 100644 --- a/openair-cn/NAS/EURECOM-NAS/src/api/usim/usim_api.c +++ b/openair-cn/NAS/UE/API/USIM/usim_api.c @@ -45,7 +45,6 @@ Description Implements the API used by the NAS layer to read/write *****************************************************************************/ -#ifdef NAS_UE #include "usim_api.h" #include "nas_log.h" @@ -80,7 +79,7 @@ Description Implements the API used by the NAS layer to read/write #define USIM_API_K_SIZE 16 #define USIM_API_K_VALUE "8BAF473F2F8FD09487CCCBD7097C6862" -static UInt8_t _usim_api_k[USIM_API_K_SIZE]; +static uint8_t _usim_api_k[USIM_API_K_SIZE]; /* @@ -88,16 +87,16 @@ static UInt8_t _usim_api_k[USIM_API_K_SIZE]; */ static struct _usim_api_data_s { /* Highest sequence number the USIM has ever accepted */ - UInt32_t sqn_ms; + uint32_t sqn_ms; /* List of the last used sequence numbers */ #define USIM_API_SQN_LIST_SIZE 32 - UInt8_t n_sqns; - UInt32_t sqn[USIM_API_SQN_LIST_SIZE]; + uint8_t n_sqns; + uint32_t sqn[USIM_API_SQN_LIST_SIZE]; } _usim_api_data; -static UInt8_t _usim_api_hex_char_to_hex_value (char c); -static void _usim_api_hex_string_to_hex_value (UInt8_t *hex_value, const char *hex_string, int size); -static int _usim_api_check_sqn(UInt32_t seq, UInt8_t ind); +static uint8_t _usim_api_hex_char_to_hex_value (char c); +static void _usim_api_hex_string_to_hex_value (uint8_t *hex_value, const char *hex_string, int size); +static int _usim_api_check_sqn(uint32_t seq, uint8_t ind); /****************************************************************************/ /****************** E X P O R T E D F U N C T I O N S ******************/ @@ -275,7 +274,7 @@ int usim_api_authenticate(const OctetString* rand_pP, const OctetString* autn_pP } /* Verify that the received sequence number SQN is in the correct range */ - rc = _usim_api_check_sqn(*(UInt32_t*)(sqn), sqn[USIM_API_SQN_SIZE - 1]); + rc = _usim_api_check_sqn(*(uint32_t*)(sqn), sqn[USIM_API_SQN_SIZE - 1]); if (rc != RETURNok) { /* Synchronisation failure; compute the AUTS parameter */ @@ -292,7 +291,7 @@ int usim_api_authenticate(const OctetString* rand_pP, const OctetString* autn_pP for (i = 0; i < USIM_API_SQN_MS_SIZE; i++) { #warning "LG:BUG HERE TODO" sqn_ms[USIM_API_SQNMS_SIZE - i] = - ((UInt8_t*)(_usim_api_data.sqn_ms))[USIM_API_SQN_MS_SIZE - i]; + ((uint8_t*)(_usim_api_data.sqn_ms))[USIM_API_SQN_MS_SIZE - i]; } u8 sqnms[USIM_API_SQNMS_SIZE]; @@ -341,7 +340,7 @@ int usim_api_authenticate(const OctetString* rand_pP, const OctetString* autn_pP ** Others: None ** ** ** ***************************************************************************/ -static UInt8_t _usim_api_hex_char_to_hex_value (char c) +static uint8_t _usim_api_hex_char_to_hex_value (char c) { if (c >= 'A') { /* Remove case bit */ @@ -369,7 +368,7 @@ static UInt8_t _usim_api_hex_char_to_hex_value (char c) ** Others: None ** ** ** ***************************************************************************/ -static void _usim_api_hex_string_to_hex_value (UInt8_t *hex_value, const char *hex_string, int size) +static void _usim_api_hex_string_to_hex_value (uint8_t *hex_value, const char *hex_string, int size) { int i; @@ -397,10 +396,9 @@ static void _usim_api_hex_string_to_hex_value (UInt8_t *hex_value, const char *h ** Others: None ** ** ** ***************************************************************************/ -static int _usim_api_check_sqn(UInt32_t seq, UInt8_t ind) +static int _usim_api_check_sqn(uint32_t seq, uint8_t ind) { /* TODO */ return (RETURNok); } -#endif // NAS_UE diff --git a/openair-cn/NAS/EURECOM-NAS/src/api/usim/usim_api.h b/openair-cn/NAS/UE/API/USIM/usim_api.h similarity index 97% rename from openair-cn/NAS/EURECOM-NAS/src/api/usim/usim_api.h rename to openair-cn/NAS/UE/API/USIM/usim_api.h index e2c09c41a6..7b5a767d98 100644 --- a/openair-cn/NAS/EURECOM-NAS/src/api/usim/usim_api.h +++ b/openair-cn/NAS/UE/API/USIM/usim_api.h @@ -63,7 +63,7 @@ Description Implements the API used by the NAS layer to read/write * USIM TLV parameter structure * ---------------------------- */ -#define USIM_TLV_T(SIZE) struct {UInt8_t type; UInt8_t length; Byte_t value[SIZE];} +#define USIM_TLV_T(SIZE) struct {uint8_t type; uint8_t length; Byte_t value[SIZE];} /* * Non Access Stratum Configuration @@ -123,7 +123,7 @@ typedef struct { typedef struct { /* Length of all subsequent data */ #define USIM_EPS_NAS_SECURITY_CONTEXT_TAG 0xA0U - UInt8_t length; + uint8_t length; /* Key set identifier KSI_ASME */ #define USIM_KSI_ASME_TAG 0x80U USIM_TLV_T(1) KSIasme; @@ -197,7 +197,7 @@ typedef struct { tac_t start; tac_t end; /* PLMN Network Name Record Identifier */ - UInt8_t record_id; + uint8_t record_id; } usim_opl_t; /* @@ -212,7 +212,7 @@ typedef struct { #define USIM_ACT_CDMA_1xRTT 0x1000 #define USIM_ACT_UTRAN 0x0080 #define USIM_ACT_EUTRAN 0x0040 - UInt16_t AcT; + uint16_t AcT; } usim_plmn_act_t; /* @@ -220,7 +220,7 @@ typedef struct { * ------------------------------ */ typedef struct { - UInt32_t tmsi; /* Temporary Mobile Subscriber Identity */ + uint32_t tmsi; /* Temporary Mobile Subscriber Identity */ lai_t lai; /* Location Area Identity */ Byte_t reserved; /* Reserved for future use */ #define USIM_LOCI_UPDATED 0x00 @@ -235,7 +235,7 @@ typedef struct { * ---------------------------------------------- */ typedef struct { - UInt32_t p_tmsi; /* Packet Temporary Mobile Subscriber Identity */ + uint32_t p_tmsi; /* Packet Temporary Mobile Subscriber Identity */ Byte_t signature[3]; /* P-TMSI signature value */ RAI_t rai; /* Routing Area Identity */ #define USIM_PSLOCI_UPDATED 0x00 @@ -280,7 +280,7 @@ typedef struct { #define USIM_MAINTENANCE_MODE 0x02U #define USIM_CELL_TEST_MODE 0x04U Byte_t UE_Operation_Mode; /* Mode of operation for the UE */ - UInt16_t Additional_Info; /* Additional information depending on + uint16_t Additional_Info; /* Additional information depending on * the UE operation mode */ Byte_t MNC_Length; /* Number of digits used for extracting * the MNC from the IMSI */ diff --git a/openair-cn/NAS/UE/EMM/Attach.c b/openair-cn/NAS/UE/EMM/Attach.c new file mode 100755 index 0000000000..3a0c079685 --- /dev/null +++ b/openair-cn/NAS/UE/EMM/Attach.c @@ -0,0 +1,1198 @@ +/******************************************************************************* + OpenAirInterface + Copyright(c) 1999 - 2014 Eurecom + + OpenAirInterface is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + + OpenAirInterface is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with OpenAirInterface.The full GNU General Public License is + included in this distribution in the file called "COPYING". If not, + see . + + Contact Information + OpenAirInterface Admin: openair_admin@eurecom.fr + OpenAirInterface Tech : openair_tech@eurecom.fr + OpenAirInterface Dev : openair4g-devel@eurecom.fr + + Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. + + *******************************************************************************/ +/***************************************************************************** + +Source Attach.c + +Version 0.1 + +Date 2012/12/04 + +Product NAS stack + +Subsystem EPS Mobility Management + +Author Frederic Maurel + +Description Defines the attach related EMM procedure executed by the + Non-Access Stratum. + + To get internet connectivity from the network, the network + have to know about the UE. When the UE is switched on, it + has to initiate the attach procedure to get initial access + to the network and register its presence to the Evolved + Packet Core (EPC) network in order to receive EPS services. + + As a result of a successful attach procedure, a context is + created for the UE in the MME, and a default bearer is esta- + blished between the UE and the PDN-GW. The UE gets the home + agent IPv4 and IPv6 addresses and full connectivity to the + IP network. + + The network may also initiate the activation of additional + dedicated bearers for the support of a specific service. + +*****************************************************************************/ + +#include "emm_proc.h" +#include "networkDef.h" +#include "nas_log.h" +#include "nas_timer.h" + +#include "emmData.h" + +#include "emm_sap.h" +#include "esm_sap.h" +#include "emm_cause.h" + +#include "NasSecurityAlgorithms.h" + +#include // memcmp, memcpy +#include // malloc, free + +/****************************************************************************/ +/**************** E X T E R N A L D E F I N I T I O N S ****************/ +/****************************************************************************/ + +/****************************************************************************/ +/******************* L O C A L D E F I N I T I O N S *******************/ +/****************************************************************************/ + +/* String representation of the EPS attach type */ +static const char *_emm_attach_type_str[] = { + "EPS", "IMSI", "EMERGENCY", "RESERVED" +}; + +/* + * -------------------------------------------------------------------------- + * Internal data handled by the attach procedure in the UE + * -------------------------------------------------------------------------- + */ +/* + * Timer handlers + */ +void *_emm_attach_t3410_handler(void *); +static void *_emm_attach_t3411_handler(void *); +static void *_emm_attach_t3402_handler(void *); + +/* + * Abnormal case attach procedure + */ +static void _emm_attach_abnormal_cases_bcd(emm_sap_t *); + +/* + * Internal data used for attach procedure + */ +static struct { +#define EMM_ATTACH_COUNTER_MAX 5 + unsigned int attempt_count; /* Counter used to limit the number of + * subsequently rejected attach attempts */ +} _emm_attach_data = {0}; + + +/****************************************************************************/ +/****************** E X P O R T E D F U N C T I O N S ******************/ +/****************************************************************************/ + +/* + * -------------------------------------------------------------------------- + * Attach procedure executed by the UE + * -------------------------------------------------------------------------- + */ +/**************************************************************************** + ** ** + ** Name: emm_proc_attach() ** + ** ** + ** Description: Initiate EPS attach procedure to register a UE in PS mode ** + ** of operation for EPS services only, or register a UE for ** + ** emergency bearer services. ** + ** ** + ** 3GPP TS 24.301, section 5.5.1.2.2 ** + ** In state EMM-DEREGISTERED, the UE initiates the attach ** + ** procedure by sending an ATTACH REQUEST message to the MME,** + ** starting timer T3410 and entering state EMM-REGISTERED- ** + ** INITIATED. ** + ** ** + ** Inputs: type: Type of the requested attach ** + ** Others: _emm_data ** + ** ** + ** Outputs: None ** + ** Return: RETURNok, RETURNerror ** + ** Others: T3402, T3410, T3411 ** + ** ** + ***************************************************************************/ +int emm_proc_attach(emm_proc_attach_type_t type) +{ + LOG_FUNC_IN; + + emm_sap_t emm_sap; + emm_as_establish_t *emm_as = &emm_sap.u.emm_as.u.establish; + esm_sap_t esm_sap; + int rc; + + LOG_TRACE(INFO, "EMM-PROC - Initiate EPS attach type = %s (%d)", + _emm_attach_type_str[type], type); + + /* Update the emergency bearer service indicator */ + if (type == EMM_ATTACH_TYPE_EMERGENCY) { + _emm_data.is_emergency = TRUE; + } + + /* Setup initial NAS information message to transfer */ + emm_as->NASinfo = EMM_AS_NAS_INFO_ATTACH; + /* Set the attach type */ + emm_as->type = type; + + /* Set the RRC connection establishment cause */ + if (_emm_data.is_emergency) { + emm_as->RRCcause = NET_ESTABLISH_CAUSE_EMERGENCY; + emm_as->RRCtype = NET_ESTABLISH_TYPE_EMERGENCY_CALLS; + } else { + emm_as->RRCcause = NET_ESTABLISH_CAUSE_MO_SIGNAL; + emm_as->RRCtype = NET_ESTABLISH_TYPE_ORIGINATING_SIGNAL; + } + + /* Set the PLMN identifier of the selected PLMN */ + emm_as->plmnID = &_emm_data.splmn; + /* + * Process the EPS mobile identity + */ + emm_as->UEid.guti = NULL; + emm_as->UEid.tai = NULL; + emm_as->UEid.imsi = NULL; + emm_as->UEid.imei = NULL; + + /* Check whether the UE is configured for "AttachWithIMSI" */ + if (_emm_data.AttachWithImsi) { + /* Check whether the selected PLMN is neither the registered PLMN + * nor in the list of equivalent PLMNs */ + if ( (!_emm_data.is_rplmn) && (!_emm_data.is_eplmn) ) { + LOG_TRACE(INFO, "EMM-PROC - Initiate EPS attach with IMSI"); + /* Include the IMSI */ + emm_as->UEid.imsi = _emm_data.imsi; + } else { + LOG_TRACE(INFO, + "EMM-PROC - Initiate EPS attach with NO IMSI, is registered PLMN %d, is equivalent PLMN %d", + _emm_data.is_rplmn, + _emm_data.is_eplmn); + } + } else if (_emm_data.guti) { + LOG_TRACE(INFO, "EMM-PROC - Initiate EPS attach with GUTI"); + /* Include a valid GUTI and the last visited registered TAI */ + emm_as->UEid.guti = _emm_data.guti; + emm_as->UEid.tai = _emm_data.tai; + } else if (!_emm_data.is_emergency) { + LOG_TRACE(INFO, "EMM-PROC - Initiate EPS attach with IMSI cause is no emergency and no GUTI"); + /* Include the IMSI if no valid GUTI is available */ + emm_as->UEid.imsi = _emm_data.imsi; + } else { + /* The UE is attaching for emergency bearer services and + * does not hold a valid GUTI */ + if (_emm_data.imsi) { + /* Include the IMSI if valid (USIM is present) */ + LOG_TRACE(INFO, "EMM-PROC - Initiate EPS attach with IMSI cause is emergency and no GUTI"); + emm_as->UEid.imsi = _emm_data.imsi; + } else { + LOG_TRACE(INFO, "EMM-PROC - Initiate EPS attach with IMSI cause is emergency and no GUTI and no IMSI"); + /* Include the IMEI if the IMSI is not valid */ + emm_as->UEid.imei = _emm_data.imei; + } + } + + /* Setup EPS NAS security data */ + emm_as_set_security_data(&emm_as->sctx, _emm_data.security, FALSE, FALSE); + emm_as->ksi = EMM_AS_NO_KEY_AVAILABLE; + + if (_emm_data.security) { + if (_emm_data.security->type != EMM_KSI_NOT_AVAILABLE) { + emm_as->ksi = _emm_data.security->eksi; + } + + LOG_TRACE(INFO, "EMM-PROC - eps_encryption 0x%X", _emm_data.security->capability.eps_encryption); + LOG_TRACE(INFO, "EMM-PROC - eps_integrity 0x%X", _emm_data.security->capability.eps_integrity); + emm_as->encryption = _emm_data.security->capability.eps_encryption; + emm_as->integrity = _emm_data.security->capability.eps_integrity; + } + + /* + * Notify ESM that initiation of a PDN connectivity procedure + * is requested to setup a default EPS bearer + */ + esm_sap.primitive = ESM_PDN_CONNECTIVITY_REQ; + esm_sap.is_standalone = FALSE; + esm_sap.data.pdn_connect.is_defined = TRUE; + esm_sap.data.pdn_connect.cid = 1; + /* TODO: PDN type should be set according to the IP capability of the UE */ + esm_sap.data.pdn_connect.pdn_type = NET_PDN_TYPE_IPV4V6; + esm_sap.data.pdn_connect.apn = NULL; + esm_sap.data.pdn_connect.is_emergency = _emm_data.is_emergency; + rc = esm_sap_send(&esm_sap); + + if (rc != RETURNerror) { + /* Setup EMM procedure handler to be executed upon receiving + * lower layer notification */ + rc = emm_proc_lowerlayer_initialize(emm_proc_attach_request, + emm_proc_attach_failure, + emm_proc_attach_release, NULL); + + if (rc != RETURNok) { + LOG_TRACE(WARNING, "Failed to initialize EMM procedure handler"); + LOG_FUNC_RETURN (RETURNerror); + } + + /* Start T3410 timer */ + T3410.id = nas_timer_start(T3410.sec, _emm_attach_t3410_handler, NULL); + LOG_TRACE(INFO,"EMM-PROC - Timer T3410 (%d) expires in %ld seconds", + T3410.id, T3410.sec); + /* Stop T3402 and T3411 timers if running */ + T3402.id = nas_timer_stop(T3402.id); + T3411.id = nas_timer_stop(T3411.id); + + /* + * Notify EMM-AS SAP that a RRC connection establishment procedure + * is requested from the Access-Stratum to send initial NAS message + * attach request to the network + */ + emm_sap.primitive = EMMAS_ESTABLISH_REQ; + /* Get the PDN connectivity request to transfer within the ESM + * container of the initial attach request message */ + emm_sap.u.emm_as.u.establish.NASmsg = esm_sap.send; + rc = emm_sap_send(&emm_sap); + } + + LOG_FUNC_RETURN(rc); +} + +/**************************************************************************** + ** ** + ** Name: emm_proc_attach_request() ** + ** ** + ** Description: Performs the attach procedure upon receipt of indication ** + ** from lower layers that Attach Request message has been ** + ** successfully delivered to the network. ** + ** ** + ** Inputs: args: Not used ** + ** Others: None ** + ** ** + ** Outputs: None ** + ** Return: RETURNok, RETURNerror ** + ** Others: None ** + ** ** + ***************************************************************************/ +int emm_proc_attach_request(void *args) +{ + LOG_FUNC_IN; + + emm_sap_t emm_sap; + int rc; + + /* + * Notify EMM that Attach Request has been sent to the network + */ + emm_sap.primitive = EMMREG_ATTACH_REQ; + rc = emm_sap_send(&emm_sap); + + LOG_FUNC_RETURN(rc); +} + +/**************************************************************************** + ** ** + ** Name: emm_proc_attach_accept() ** + ** ** + ** Description: Performs the attach procedure accepted by the network. ** + ** ** + ** 3GPP TS 24.301, section 5.5.1.2.4 ** + ** Upon receiving the ATTACH ACCEPT message, the UE shall ** + ** stop timer T3410 and send an ATTACH COMPLETE message to ** + ** the MME. ** + ** ** + ** Inputs: t3412: Value of the T3412 timer in seconds ** + ** t3402: Value of the T3402 timer in seconds ** + ** t3423: Value of the T3423 timer in seconds ** + ** n_tais: Number of tracking area identities contai- ** + ** ned in the TAI list ** + ** tai: The TAI list that identifies the tracking ** + ** areas the UE is registered to ** + ** guti: New UE's temporary identity assigned by ** + ** the MME (GUTI reallocation) ** + ** n_eplmns: Number of equivalent PLMNs ** + ** eplmns: List of equivalent PLMNs ** + ** esm_msg_pP: Activate default EPS bearer context re- ** + ** quest ESM message ** + ** Others: None ** + ** ** + ** Outputs: None ** + ** Return: RETURNok, RETURNerror ** + ** Others: _emm_data, T3412, T3402, T3423 ** + ** ** + ***************************************************************************/ +int emm_proc_attach_accept(long t3412, long t3402, long t3423, + int n_tais, tai_t *tai, GUTI_t *guti, + int n_eplmns, plmn_t *eplmn, + const OctetString *esm_msg_pP) +{ + LOG_FUNC_IN; + + emm_sap_t emm_sap; + esm_sap_t esm_sap; + int rc; + int i; + int j; + + LOG_TRACE(INFO, "EMM-PROC - EPS attach accepted by the network"); + + /* Stop timer T3410 */ + LOG_TRACE(INFO, "EMM-PROC - Stop timer T3410 (%d)", T3410.id); + T3410.id = nas_timer_stop(T3410.id); + + /* Delete old TAI list and store the received TAI list */ + _emm_data.ltai.n_tais = n_tais; + + for (i = 0; (i < n_tais) && (i < EMM_DATA_TAI_MAX); i++) { + _emm_data.ltai.tai[i] = tai[i]; + } + + /* Update periodic tracking area update timer value */ + T3412.sec = t3412; + + /* Update attach failure timer value */ + if ( !(t3402 < 0) ) { + T3402.sec = t3402; + } + + /* Update E-UTRAN deactivate ISR timer value */ + if ( !(t3423 < 0) ) { + T3423.sec = t3423; + } + + /* Delete old GUTI and store the new assigned GUTI if provided */ + if (guti) { + *_emm_data.guti = *guti; + } + + /* Update the stored list of equivalent PLMNs */ + _emm_data.nvdata.eplmn.n_plmns = 0; + + if (n_eplmns > 0) { + for (i = 0; (i < n_eplmns) && (i < EMM_DATA_EPLMN_MAX); i++) { + int is_forbidden = FALSE; + + if (!_emm_data.is_emergency) { + /* If the attach procedure is not for emergency bearer + * services, the UE shall remove from the list any PLMN + * code that is already in the list of forbidden PLMNs */ + for (j = 0; j < _emm_data.fplmn.n_plmns; j++) { + if (PLMNS_ARE_EQUAL(eplmn[i], _emm_data.fplmn.plmn[j])) { + is_forbidden = TRUE; + break; + } + } + } + + if ( !is_forbidden ) { + _emm_data.nvdata.eplmn.plmn[_emm_data.nvdata.eplmn.n_plmns++] = + eplmn[i]; + } + } + + /* Add the PLMN code of the registered PLMN that sent the list */ + if (_emm_data.nvdata.eplmn.n_plmns < EMM_DATA_EPLMN_MAX) { + _emm_data.nvdata.eplmn.plmn[_emm_data.nvdata.eplmn.n_plmns++] = + _emm_data.splmn; + } + } + + /* + * Notify ESM that a default EPS bearer has to be activated + */ + esm_sap.primitive = ESM_DEFAULT_EPS_BEARER_CONTEXT_ACTIVATE_REQ; + esm_sap.is_standalone = FALSE; + esm_sap.recv = esm_msg_pP; + rc = esm_sap_send(&esm_sap); + + if ( (rc != RETURNerror) && (esm_sap.err == ESM_SAP_SUCCESS) ) { + /* Setup EMM procedure handler to be executed upon receiving + * lower layer notification */ + rc = emm_proc_lowerlayer_initialize(emm_proc_attach_complete, + emm_proc_attach_failure, + NULL, NULL); + + if (rc != RETURNok) { + LOG_TRACE(WARNING, + "EMM-PROC - Failed to initialize EMM procedure handler"); + LOG_FUNC_RETURN (RETURNerror); + } + + /* + * Notify EMM-AS SAP that Attach Complete message together with + * an Activate Default EPS Bearer Context Accept message has to + * be sent to the network + */ + emm_sap.primitive = EMMAS_DATA_REQ; + emm_sap.u.emm_as.u.data.guti = _emm_data.guti; + emm_sap.u.emm_as.u.data.ueid = 0; + /* Setup EPS NAS security data */ + emm_as_set_security_data(&emm_sap.u.emm_as.u.data.sctx, + _emm_data.security, FALSE, TRUE); + /* Get the activate default EPS bearer context accept message + * to be transfered within the ESM container of the attach + * complete message */ + emm_sap.u.emm_as.u.data.NASinfo = EMM_AS_NAS_DATA_ATTACH; + emm_sap.u.emm_as.u.data.NASmsg = esm_sap.send; + rc = emm_sap_send(&emm_sap); + } else if (esm_sap.err != ESM_SAP_DISCARDED) { + /* 3GPP TS 24.301, section 5.5.1.2.6, case j + * If the ACTIVATE DEFAULT BEARER CONTEXT REQUEST message combined + * with the ATTACH ACCEPT is not accepted by the UE due to failure + * in the UE ESM sublayer, then the UE shall initiate the detach + * procedure by sending a DETACH REQUEST message to the network. + */ + emm_sap.primitive = EMMREG_DETACH_INIT; + rc = emm_sap_send(&emm_sap); + } else { + /* + * ESM procedure failed and, received message has been discarded or + * Status message has been returned; ignore ESM procedure failure + */ + rc = RETURNok; + } + + LOG_FUNC_RETURN(rc); +} + +/**************************************************************************** + ** ** + ** Name: emm_proc_attach_reject() ** + ** ** + ** Description: Performs the attach procedure rejected by the network. ** + ** ** + ** 3GPP TS 24.301, section 5.5.1.2.5 ** + ** Upon receiving the ATTACH REJECT message, the UE shall ** + ** stop timer T3410 and take actions depending on the EMM ** + ** cause value received. ** + ** ** + ** Inputs: emm_cause: EMM cause indicating why the network re- ** + ** jected the attach request ** + ** esm_msg_pP: PDN connectivity reject ESM message ** + ** Others: None ** + ** ** + ** Outputs: None ** + ** Return: RETURNok, RETURNerror ** + ** Others: _emm_data, _emm_attach_data, T3410 ** + ** ** + ***************************************************************************/ +int emm_proc_attach_reject(int emm_cause, const OctetString *esm_msg_pP) +{ + LOG_FUNC_IN; + + emm_sap_t emm_sap; + int rc; + + LOG_TRACE(WARNING, "EMM-PROC - EPS attach rejected by the network, " + "EMM cause = %d", emm_cause); + + /* Stop timer T3410 */ + LOG_TRACE(INFO, "EMM-PROC - Stop timer T3410 (%d)", T3410.id); + T3410.id = nas_timer_stop(T3410.id); + + /* Update the EPS update status, the GUTI, the visited registered TAI and + * the eKSI */ + switch (emm_cause) { + case EMM_CAUSE_ILLEGAL_UE: + case EMM_CAUSE_ILLEGAL_ME: + case EMM_CAUSE_EPS_NOT_ALLOWED: + case EMM_CAUSE_BOTH_NOT_ALLOWED: + case EMM_CAUSE_PLMN_NOT_ALLOWED: + case EMM_CAUSE_NOT_AUTHORIZED_IN_PLMN: + case EMM_CAUSE_EPS_NOT_ALLOWED_IN_PLMN: + case EMM_CAUSE_TA_NOT_ALLOWED: + case EMM_CAUSE_ROAMING_NOT_ALLOWED: + case EMM_CAUSE_NO_SUITABLE_CELLS: + /* Set the EPS update status to EU3 ROAMING NOT ALLOWED */ + _emm_data.status = EU3_ROAMING_NOT_ALLOWED; + /* Delete the GUTI */ + _emm_data.guti = NULL; + /* Delete the last visited registered TAI */ + _emm_data.tai = NULL; + + /* Delete the eKSI */ + if (_emm_data.security) { + _emm_data.security->type = EMM_KSI_NOT_AVAILABLE; + } + + break; + + default : + break; + } + + /* Update list of equivalents PLMNs and attach attempt counter */ + switch (emm_cause) { + case EMM_CAUSE_ILLEGAL_UE: + case EMM_CAUSE_ILLEGAL_ME: + case EMM_CAUSE_EPS_NOT_ALLOWED: + case EMM_CAUSE_BOTH_NOT_ALLOWED: + /* Consider the USIM as invalid for EPS services */ + _emm_data.usim_is_valid = FALSE; + /* Delete the list of equivalent PLMNs */ + _emm_data.nvdata.eplmn.n_plmns = 0; + break; + + case EMM_CAUSE_PLMN_NOT_ALLOWED: + case EMM_CAUSE_NOT_AUTHORIZED_IN_PLMN: + case EMM_CAUSE_ROAMING_NOT_ALLOWED: + /* Delete the list of equivalent PLMNs */ + _emm_data.nvdata.eplmn.n_plmns = 0; + /* Reset the attach attempt counter */ + _emm_attach_data.attempt_count = 0; + break; + + case EMM_CAUSE_TA_NOT_ALLOWED: + case EMM_CAUSE_EPS_NOT_ALLOWED_IN_PLMN: + case EMM_CAUSE_NO_SUITABLE_CELLS: + /* Reset the attach attempt counter */ + _emm_attach_data.attempt_count = 0; + break; + + case EMM_CAUSE_ESM_FAILURE: + + /* 3GPP TS 24.301, section 5.5.1.2.6, case d */ + if (_emm_data.NAS_SignallingPriority != 1) { + /* The UE is not configured for NAS signalling low priority; + * set the attach attempt counter to 5 */ + _emm_attach_data.attempt_count = EMM_ATTACH_COUNTER_MAX; + } + + break; + + case EMM_CAUSE_SEMANTICALLY_INCORRECT: + case EMM_CAUSE_INVALID_MANDATORY_INFO: + case EMM_CAUSE_MESSAGE_TYPE_NOT_IMPLEMENTED: + case EMM_CAUSE_IE_NOT_IMPLEMENTED: + case EMM_CAUSE_PROTOCOL_ERROR: + /* 3GPP TS 24.301, section 5.5.1.2.6, case d + * Set the attach attempt counter to 5 */ + _emm_attach_data.attempt_count = EMM_ATTACH_COUNTER_MAX; + break; + + default : + break; + } + + /* Update "forbidden lists" */ + switch (emm_cause) { + case EMM_CAUSE_PLMN_NOT_ALLOWED: + case EMM_CAUSE_NOT_AUTHORIZED_IN_PLMN: + /* Store the PLMN identity in the "forbidden PLMN list" */ + _emm_data.fplmn.plmn[_emm_data.fplmn.n_plmns++] = _emm_data.splmn; + break; + + case EMM_CAUSE_TA_NOT_ALLOWED: + /* Store the current TAI in the list of "forbidden tracking + * areas for regional provision of service" */ + _emm_data.ftai.tai[_emm_data.ftai.n_tais++] = *_emm_data.tai; + break; + + case EMM_CAUSE_ROAMING_NOT_ALLOWED: + /* Store the current TAI in the list of "forbidden tracking + * areas for roaming" */ + _emm_data.ftai_roaming.tai[_emm_data.ftai_roaming.n_tais++] = *_emm_data.tai; + break; + + case EMM_CAUSE_EPS_NOT_ALLOWED_IN_PLMN: + /* Store the PLMN identity in the "forbidden PLMNs for GPRS + * service" list */ + _emm_data.fplmn_gprs.plmn[_emm_data.fplmn_gprs.n_plmns++] = _emm_data.splmn; + break; + + default : + break; + } + + /* Update state of EMM sublayer */ + switch (emm_cause) { + case EMM_CAUSE_ILLEGAL_UE: + case EMM_CAUSE_ILLEGAL_ME: + case EMM_CAUSE_EPS_NOT_ALLOWED: + case EMM_CAUSE_BOTH_NOT_ALLOWED: + /* + * Notify EMM that EPS attach is rejected + */ + emm_sap.primitive = EMMREG_ATTACH_REJ; + break; + + case EMM_CAUSE_PLMN_NOT_ALLOWED: + case EMM_CAUSE_NOT_AUTHORIZED_IN_PLMN: + case EMM_CAUSE_EPS_NOT_ALLOWED_IN_PLMN: + /* + * Notify EMM that the UE has to perform a PLMN selection because + * it is not allowed to operate in the currently selected PLMN + */ + emm_sap.primitive = EMMREG_REGISTER_REQ; + break; + + case EMM_CAUSE_TA_NOT_ALLOWED: + case EMM_CAUSE_ROAMING_NOT_ALLOWED: + case EMM_CAUSE_NO_SUITABLE_CELLS: + /* + * Notify EMM that the UE failed to register to the network for + * EPS services because it is not allowed to operate in the + * requested tracking area + */ + emm_sap.primitive = EMMREG_REGISTER_REJ; + break; + + case EMM_CAUSE_IMEI_NOT_ACCEPTED: + if (_emm_data.is_emergency) { + /* + * Notify EMM that the UE failed to register to the network + * for emergency bearer services because "IMEI not accepted" + */ + emm_sap.primitive = EMMREG_NO_IMSI; + break; + } + + /* break is volontary missing */ + + default : + /* Other values are considered as abnormal cases + * 3GPP TS 24.301, section 5.5.1.2.6, case d */ + _emm_attach_abnormal_cases_bcd(&emm_sap); + break; + } + + rc = emm_sap_send(&emm_sap); + + /* + * Notify ESM that the network rejected connectivity to the PDN + */ + if (esm_msg_pP != NULL) { + esm_sap_t esm_sap; + esm_sap.primitive = ESM_PDN_CONNECTIVITY_REJ; + esm_sap.is_standalone = FALSE; + esm_sap.recv = esm_msg_pP; + rc = esm_sap_send(&esm_sap); + } + + LOG_FUNC_RETURN(rc); +} + +/**************************************************************************** + ** ** + ** Name: emm_proc_attach_complete() ** + ** ** + ** Description: Terminates the attach procedure when Attach Complete mes- ** + ** sage has been successfully delivered to the MME. ** + ** ** + ** 3GPP TS 24.301, section 5.5.1.2.4 ** + ** Upon successfully sending the ATTACH COMPLETE message, ** + ** the UE shall reset the attach attempt counter and tra- ** + ** cking area updating attempt counter, enter state EMM- ** + ** REGISTERED and set the EPS update status to EU1-UPDATED. ** + ** ** + ** Inputs: args: Not used ** + ** Others: None ** + ** ** + ** Outputs: None ** + ** Return: RETURNok, RETURNerror ** + ** Others: _emm_data, _emm_attach_data ** + ** ** + ***************************************************************************/ +int emm_proc_attach_complete(void *args) +{ + LOG_FUNC_IN; + + emm_sap_t emm_sap; + esm_sap_t esm_sap; + int rc; + + LOG_TRACE(INFO, "EMM-PROC - EPS attach complete"); + + /* Reset EMM procedure handler */ + (void) emm_proc_lowerlayer_initialize(NULL, NULL, NULL, NULL); + + /* Reset the attach attempt counter */ + _emm_attach_data.attempt_count = 0; + /* TODO: Reset the tracking area updating attempt counter */ + + /* Set the EPS update status to EU1 UPDATED */ + _emm_data.status = EU1_UPDATED; + _emm_data.is_attached = TRUE; + + /* + * Notify EMM that network attach complete message has been delivered + * to the network + */ + emm_sap.primitive = EMMREG_ATTACH_CNF; + rc = emm_sap_send(&emm_sap); + + if (rc != RETURNerror) { + /* + * Notify ESM that the Activate Default EPS Bearer Context Accept + * message has been delivered to the network within the Attach + * Complete message + */ + esm_sap.primitive = ESM_DEFAULT_EPS_BEARER_CONTEXT_ACTIVATE_CNF; + esm_sap.is_standalone = FALSE; + rc = esm_sap_send(&esm_sap); + } + + LOG_FUNC_RETURN(rc); +} + +/**************************************************************************** + ** ** + ** Name: emm_proc_attach_failure() ** + ** ** + ** Description: Performs the attach procedure abnormal case upon receipt ** + ** of transmission failure of Attach Request message or At- ** + ** tach Complete message. ** + ** ** + ** 3GPP TS 24.301, section 5.5.1.2.6, cases h and i ** + ** The UE shall restart the attach procedure when timer ** + ** T3411 expires. ** + ** ** + ** Inputs: is_initial: TRUE if the NAS message that failed to be ** + ** transfered is an initial NAS message (ESM ** + ** message embedded within an Attach Request ** + ** message) ** + ** args: Not used ** + ** Others: None ** + ** ** + ** Outputs: None ** + ** Return: RETURNok, RETURNerror ** + ** Others: T3410, T3411 ** + ** ** + ***************************************************************************/ +int emm_proc_attach_failure(int is_initial, void *args) +{ + LOG_FUNC_IN; + + int rc = RETURNok; + esm_sap_t esm_sap; + + LOG_TRACE(WARNING, "EMM-PROC - EPS attach failure"); + + /* Reset EMM procedure handler */ + (void) emm_proc_lowerlayer_initialize(NULL, NULL, NULL, NULL); + + /* Stop timer T3410 if still running */ + if (T3410.id != NAS_TIMER_INACTIVE_ID) { + LOG_TRACE(INFO, "EMM-PROC - Stop timer T3410 (%d)", T3410.id); + T3410.id = nas_timer_stop(T3410.id); + } + + if (is_initial) { + /* + * Notify ESM that the PDN CONNECTIVITY REQUEST message contained + * in the ESM message container IE of the ATTACH REQUEST has failed + * to be transmitted + */ + esm_sap.primitive = ESM_PDN_CONNECTIVITY_REJ; + esm_sap.is_standalone = FALSE; + esm_sap.recv = NULL; + } else { + /* + * Notify ESM that ACTIVATE DEFAULT EPS BEARER CONTEXT REQUEST message + * contained in the ESM message container IE of the ATTACH COMPLETE + * has failed to be transmitted + */ + esm_sap.primitive = ESM_DEFAULT_EPS_BEARER_CONTEXT_ACTIVATE_REJ; + esm_sap.is_standalone = FALSE; + esm_sap.recv = NULL; + } + + rc = esm_sap_send(&esm_sap); + + if (rc != RETURNerror) { + /* Start T3411 timer */ + T3411.id = nas_timer_start(T3411.sec, _emm_attach_t3411_handler, NULL); + LOG_TRACE(INFO, "EMM-PROC - Timer T3411 (%d) expires in %ld seconds", + T3411.id, T3411.sec); + } + + LOG_FUNC_RETURN(rc); +} + +/**************************************************************************** + ** ** + ** Name: emm_proc_attach_release() ** + ** ** + ** Description: Performs the attach procedure abnormal case upon receipt ** + ** of NAS signalling connection release indication. ** + ** ** + ** 3GPP TS 24.301, section 5.5.1.2.6, case b ** + ** The attach procedure shall be aborted and the UE shall ** + ** execute abnormal case attach procedure. ** + ** ** + ** Inputs: args: Not used ** + ** Others: None ** + ** ** + ** Outputs: None ** + ** Return: RETURNok, RETURNerror ** + ** Others: None ** + ** ** + ***************************************************************************/ +int emm_proc_attach_release(void *args) +{ + LOG_FUNC_IN; + + emm_sap_t emm_sap; + int rc; + + LOG_TRACE(WARNING, "EMM-PROC - NAS signalling connection released"); + + /* Execute abnormal case attach procedure */ + _emm_attach_abnormal_cases_bcd(&emm_sap); + + rc = emm_sap_send(&emm_sap); + + LOG_FUNC_RETURN(rc); +} + +/**************************************************************************** + ** ** + ** Name: emm_proc_attach_restart() ** + ** ** + ** Description: Restarts the attach procedure ** + ** ** + ** Inputs: None ** + ** Others: None ** + ** ** + ** Outputs: None ** + ** Return: RETURNok, RETURNerror ** + ** Others: None ** + ** ** + ***************************************************************************/ +int emm_proc_attach_restart(void) +{ + LOG_FUNC_IN; + + emm_sap_t emm_sap; + int rc; + + LOG_TRACE(INFO, "EMM-PROC - Restart EPS attach procedure"); + + /* + * Notify EMM that the attach procedure has to be restarted + */ + emm_sap.primitive = EMMREG_ATTACH_INIT; + emm_sap.u.emm_reg.u.attach.is_emergency = _emm_data.is_emergency; + rc = emm_sap_send(&emm_sap); + + LOG_FUNC_RETURN(rc); +} + +/**************************************************************************** + ** ** + ** Name: emm_proc_attach_set_emergency() ** + ** ** + ** Description: Set the emergency bearer services indicator ** + ** ** + ** Inputs: None ** + ** Others: None ** + ** ** + ** Outputs: None ** + ** Return: RETURNok, RETURNerror ** + ** Others: _emm_data ** + ** ** + ***************************************************************************/ +int emm_proc_attach_set_emergency(void) +{ + LOG_FUNC_IN; + + LOG_TRACE(WARNING, "EMM-PROC - UE is now attached to the network for " + "emergency bearer services only"); + + _emm_data.is_emergency = TRUE; + + LOG_FUNC_RETURN(RETURNok); +} + +/**************************************************************************** + ** ** + ** Name: emm_proc_attach_set_detach() ** + ** ** + ** Description: Reset the network attachment indicator and enter state ** + ** EMM-DEREGISTERED + ** ** + ** Inputs: None ** + ** Others: None ** + ** ** + ** Outputs: None ** + ** Return: RETURNok, RETURNerror ** + ** Others: _emm_data ** + ** ** + ***************************************************************************/ +int emm_proc_attach_set_detach(void) +{ + LOG_FUNC_IN; + + int rc; + + LOG_TRACE(WARNING, + "EMM-PROC - UE is now locally detached from the network"); + + /* Reset the network attachment indicator */ + _emm_data.is_attached = FALSE; + /* + * Notify that the UE is locally detached from the network + */ + emm_sap_t emm_sap; + emm_sap.primitive = EMMREG_DETACH_CNF; + rc = emm_sap_send(&emm_sap); + + LOG_FUNC_RETURN(rc); +} + + +/****************************************************************************/ +/********************* L O C A L F U N C T I O N S *********************/ +/****************************************************************************/ + +/* + * -------------------------------------------------------------------------- + * Timer handlers + * -------------------------------------------------------------------------- + */ + +/**************************************************************************** + ** ** + ** Name: _emm_attach_t3410_handler() ** + ** ** + ** Description: T3410 timeout handler ** + ** ** + ** 3GPP TS 24.301, section 5.5.1.2.6, case c ** + ** Upon T3410 timer expiration, the attach procedure shall ** + ** be aborted and the UE shall execute abnormal case attach ** + ** procedure. ** + ** The NAS signalling connection shall be released locally. ** + ** ** + ** Inputs: args: handler parameters ** + ** Others: None ** + ** ** + ** Outputs: None ** + ** Return: None ** + ** Others: T3410 ** + ** ** + ***************************************************************************/ +void *_emm_attach_t3410_handler(void *args) +{ + LOG_FUNC_IN; + + emm_sap_t emm_sap; + int rc; + + LOG_TRACE(WARNING, "EMM-PROC - T3410 timer expired"); + + /* Stop T3410 timer */ + T3410.id = nas_timer_stop(T3410.id); + /* Execute abnormal case attach procedure */ + _emm_attach_abnormal_cases_bcd(&emm_sap); + + rc = emm_sap_send(&emm_sap); + + if (rc != RETURNerror) { + /* Locally release the NAS signalling connection */ + _emm_data.ecm_status = ECM_IDLE; + } + + LOG_FUNC_RETURN(NULL); +} + +/**************************************************************************** + ** ** + ** Name: _emm_attach_t3411_handler() ** + ** ** + ** Description: T3411 timeout handler ** + ** ** + ** 3GPP TS 24.301, section 5.5.1.2.6 ** + ** Upon T3411 timer expiration, the attach procedure shall ** + ** be restarted, if still required by ESM sublayer. ** + ** ** + ** Inputs: args: handler parameters ** + ** Others: None ** + ** ** + ** Outputs: None ** + ** Return: None ** + ** Others: T3411 ** + ** ** + ***************************************************************************/ +static void *_emm_attach_t3411_handler(void *args) +{ + LOG_FUNC_IN; + + emm_sap_t emm_sap; + + LOG_TRACE(WARNING, "EMM-PROC - T3411 timer expired"); + + /* Stop T3411 timer */ + T3411.id = nas_timer_stop(T3411.id); + /* + * Notify EMM that timer T3411 expired and attach procedure has to be + * restarted + */ + emm_sap.primitive = EMMREG_ATTACH_INIT; + emm_sap.u.emm_reg.u.attach.is_emergency = _emm_data.is_emergency; + + (void) emm_sap_send(&emm_sap); + + LOG_FUNC_RETURN(NULL); +} + +/**************************************************************************** + ** ** + ** Name: _emm_attach_t3402_handler() ** + ** ** + ** Description: T3402 timeout handler ** + ** ** + ** Upon T3402 timer expiration: ** + ** 3GPP TS 24.301, section 5.5.1.1 ** + ** the attach attempt counter shall be reset when the UE is ** + ** in substate DEREGISTERED.ATTEMPTING-TO-ATTACH; ** + ** 3GPP TS 24.301, section 5.2.2.3.3 ** + ** the UE shall initiate an attach or combined attach proce- ** + ** dure in substate DEREGISTERED.ATTEMPTING-TO-ATTACH; ** + ** ** + ** Inputs: args: handler parameters ** + ** Others: None ** + ** ** + ** Outputs: None ** + ** Return: None ** + ** Others: _emm_attach_data, T3402 ** + ** ** + ***************************************************************************/ +static void *_emm_attach_t3402_handler(void *args) +{ + LOG_FUNC_IN; + + emm_sap_t emm_sap; + + LOG_TRACE(WARNING, "EMM-PROC - T3402 timer expired"); + + /* Stop T3402 timer */ + T3402.id = nas_timer_stop(T3402.id); + /* Reset the attach attempt counter */ + _emm_attach_data.attempt_count = 0; + /* + * Notify EMM that timer T3402 expired and attach procedure has to be + * restarted + */ + emm_sap.primitive = EMMREG_ATTACH_INIT; + emm_sap.u.emm_reg.u.attach.is_emergency = _emm_data.is_emergency; + + (void) emm_sap_send(&emm_sap); + + LOG_FUNC_RETURN(NULL); +} + +/* + * -------------------------------------------------------------------------- + * Abnormal cases in the UE + * -------------------------------------------------------------------------- + */ + +/**************************************************************************** + ** ** + ** Name: _emm_attach_abnormal_cases_bcd() ** + ** ** + ** Description: Performs the abnormal case attach procedure. ** + ** ** + ** 3GPP TS 24.301, section 5.5.1.2.6, cases b, c and d ** + ** The Timer T3410 shall be stopped if still running, the ** + ** attach attempt counter shall be incremented and the UE ** + ** shall proceed depending on whether the attach attempt ** + ** counter reached its maximum value or not. ** + ** ** + ** Inputs: None ** + ** Others: None ** + ** ** + ** Outputs: emm_sap: EMM service access point ** + ** Return: None ** + ** Others: _emm_data, _emm_attach_data, T3402, T3410, ** + ** T3411 ** + ** ** + ***************************************************************************/ +static void _emm_attach_abnormal_cases_bcd(emm_sap_t *emm_sap) +{ + LOG_FUNC_IN; + + LOG_TRACE(WARNING, "EMM-PROC - Abnormal case, attach counter = %d", + _emm_attach_data.attempt_count); + + /* Stop timer T3410 */ + if (T3410.id != NAS_TIMER_INACTIVE_ID) { + LOG_TRACE(INFO, "EMM-PROC - Stop timer T3410 (%d)", T3410.id); + T3410.id = nas_timer_stop(T3410.id); + } + + if (_emm_attach_data.attempt_count < EMM_ATTACH_COUNTER_MAX) { + /* Increment the attach attempt counter */ + _emm_attach_data.attempt_count += 1; + /* Start T3411 timer */ + T3411.id = nas_timer_start(T3411.sec, _emm_attach_t3411_handler, NULL); + LOG_TRACE(INFO, "EMM-PROC - Timer T3411 (%d) expires in %ld seconds", + T3411.id, T3411.sec); + /* + * Notify EMM that the attempt to attach for EPS services failed and + * the attach attempt counter didn't reach its maximum value; network + * attach procedure shall be restarted when timer T3411 expires. + */ + emm_sap->primitive = EMMREG_ATTACH_FAILED; + } else { + /* Delete the GUTI */ + _emm_data.guti = NULL; + /* Delete the TAI list */ + _emm_data.ltai.n_tais = 0; + /* Delete the last visited registered TAI */ + _emm_data.tai = NULL; + /* Delete the list of equivalent PLMNs */ + _emm_data.nvdata.eplmn.n_plmns = 0; + + /* Delete the eKSI */ + if (_emm_data.security) { + _emm_data.security->type = EMM_KSI_NOT_AVAILABLE; + } + + /* Set the EPS update status to EU2 NOT UPDATED */ + _emm_data.status = EU2_NOT_UPDATED; + + /* Start T3402 timer */ + T3402.id = nas_timer_start(T3402.sec, _emm_attach_t3402_handler, NULL); + LOG_TRACE(INFO, "EMM-PROC - Timer T3402 (%d) expires in %ld seconds", + T3402.id, T3402.sec); + /* + * Notify EMM that the attempt to attach for EPS services failed and + * the attach attempt counter reached its maximum value. + */ + emm_sap->primitive = EMMREG_ATTACH_EXCEEDED; + } + + LOG_FUNC_OUT; +} diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/Authentication.c b/openair-cn/NAS/UE/EMM/Authentication.c old mode 100644 new mode 100755 similarity index 66% rename from openair-cn/NAS/EURECOM-NAS/src/emm/Authentication.c rename to openair-cn/NAS/UE/EMM/Authentication.c index 9fb9498089..e0acb302ac --- a/openair-cn/NAS/EURECOM-NAS/src/emm/Authentication.c +++ b/openair-cn/NAS/UE/EMM/Authentication.c @@ -70,23 +70,14 @@ Description Defines the authentication EMM procedure executed by the #include "emm_sap.h" #include "emm_cause.h" -#ifdef NAS_UE #include "usim_api.h" #include "secu_defs.h" -#endif -#ifdef NAS_MME -# if defined(NAS_BUILT_IN_EPC) -# include "nas_itti_messaging.h" -# endif -#include "msc.h" -#endif /****************************************************************************/ /**************** E X T E R N A L D E F I N I T I O N S ****************/ /****************************************************************************/ -#ifdef NAS_UE /* * Retransmission timer handlers */ @@ -94,7 +85,6 @@ extern void *_emm_attach_t3410_handler(void *); extern void *_emm_service_t3417_handler(void *); extern void *_emm_detach_t3421_handler(void *); extern void *_emm_tau_t3430_handler(void *); -#endif // NAS_UE /****************************************************************************/ /******************* L O C A L D E F I N I T I O N S *******************/ @@ -105,7 +95,6 @@ extern void *_emm_tau_t3430_handler(void *); * Internal data handled by the authentication procedure in the UE * -------------------------------------------------------------------------- */ -#ifdef NAS_UE /* * Timer handlers */ @@ -144,44 +133,12 @@ static int _authentication_start_timers(void); static int _authentication_kasme(const OctetString *autn, const OctetString *ck, const OctetString *ik, const plmn_t *plmn, OctetString *kasme); -#endif // NAS_UE /* * -------------------------------------------------------------------------- * Internal data handled by the authentication procedure in the MME * -------------------------------------------------------------------------- */ -#ifdef NAS_MME -/* - * Timer handlers - */ -static void *_authentication_t3460_handler(void *); - -/* - * Function executed whenever the ongoing EMM procedure that initiated - * the authentication procedure is aborted or the maximum value of the - * retransmission timer counter is exceed - */ -static int _authentication_abort(void *); - -/* - * Internal data used for authentication procedure - */ -typedef struct { - unsigned int ueid; /* UE identifier */ -#define AUTHENTICATION_COUNTER_MAX 5 - unsigned int retransmission_count; /* Retransmission counter */ - int ksi; /* NAS key set identifier */ - OctetString rand; /* Random challenge number */ - OctetString autn; /* Authentication token */ - int notify_failure; /* Indicates whether the authentication - * procedure failure shall be notified - * to the ongoing EMM procedure */ -} authentication_data_t; - -static int _authentication_request(authentication_data_t *data); -static int _authentication_reject(unsigned int ueid); -#endif // NAS_MME /****************************************************************************/ /****************** E X P O R T E D F U N C T I O N S ******************/ @@ -192,7 +149,6 @@ static int _authentication_reject(unsigned int ueid); * Authentication procedure executed by the UE * -------------------------------------------------------------------------- */ -#ifdef NAS_UE /**************************************************************************** ** ** ** Name: emm_proc_authentication_request() ** @@ -538,283 +494,12 @@ int emm_proc_authentication_delete(void) LOG_FUNC_RETURN (RETURNok); } -#endif // NAS_UE -/* - * -------------------------------------------------------------------------- - * Authentication procedure executed by the MME - * -------------------------------------------------------------------------- - */ -#ifdef NAS_MME -/**************************************************************************** - ** ** - ** Name: emm_proc_authentication() ** - ** ** - ** Description: Initiates authentication procedure to establish partial ** - ** native EPS security context in the UE and the MME. ** - ** ** - ** 3GPP TS 24.301, section 5.4.2.2 ** - ** The network initiates the authentication procedure by ** - ** sending an AUTHENTICATION REQUEST message to the UE and ** - ** starting the timer T3460. The AUTHENTICATION REQUEST mes- ** - ** sage contains the parameters necessary to calculate the ** - ** authentication response. ** - ** ** - ** Inputs: ueid: UE lower layer identifier ** - ** ksi: NAS key set identifier ** - ** rand: Random challenge number ** - ** autn: Authentication token ** - ** success: Callback function executed when the authen-** - ** tication procedure successfully completes ** - ** reject: Callback function executed when the authen-** - ** tication procedure fails or is rejected ** - ** failure: Callback function executed whener a lower ** - ** layer failure occured before the authenti- ** - ** cation procedure comnpletes ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -int emm_proc_authentication(void *ctx, unsigned int ueid, int ksi, - const OctetString *_rand, const OctetString *autn, - emm_common_success_callback_t success, - emm_common_reject_callback_t reject, - emm_common_failure_callback_t failure) - -{ - int rc = RETURNerror; - authentication_data_t *data; - - LOG_FUNC_IN; - - LOG_TRACE(INFO, "EMM-PROC - Initiate authentication KSI = %d, ctx = %p", ksi, ctx); - - /* Allocate parameters of the retransmission timer callback */ - data = (authentication_data_t *)malloc(sizeof(authentication_data_t)); - - if (data != NULL) { - /* Setup ongoing EMM procedure callback functions */ - rc = emm_proc_common_initialize(ueid, success, reject, failure, - _authentication_abort, data); - - if (rc != RETURNok) { - LOG_TRACE(WARNING, "Failed to initialize EMM callback functions"); - LOG_FUNC_RETURN (RETURNerror); - } - - /* Set the UE identifier */ - data->ueid = ueid; - /* Reset the retransmission counter */ - data->retransmission_count = 0; - /* Set the key set identifier */ - data->ksi = ksi; - - /* Set the authentication random challenge number */ - if (_rand->length > 0) { - data->rand.value = (uint8_t *)malloc(_rand->length); - data->rand.length = 0; - - if (data->rand.value) { - memcpy(data->rand.value, _rand->value, _rand->length); - data->rand.length = _rand->length; - } - } - - /* Set the authentication token */ - if (autn->length > 0) { - data->autn.value = (uint8_t *)malloc(autn->length); - data->autn.length = 0; - - if (data->autn.value) { - memcpy(data->autn.value, autn->value, autn->length); - data->autn.length = autn->length; - } - } - - /* Set the failure notification indicator */ - data->notify_failure = FALSE; - /* Send authentication request message to the UE */ - rc = _authentication_request(data); - - if (rc != RETURNerror) { - /* - * Notify EMM that common procedure has been initiated - */ - - - MSC_LOG_TX_MESSAGE( - MSC_NAS_EMM_MME, - MSC_NAS_EMM_MME, - NULL,0, - "0 EMMREG_COMMON_PROC_REQ ue id %06x (authentication)", ueid); - - emm_sap_t emm_sap; - emm_sap.primitive = EMMREG_COMMON_PROC_REQ; - emm_sap.u.emm_reg.ueid = ueid; - emm_sap.u.emm_reg.ctx = ctx; - rc = emm_sap_send(&emm_sap); - } - } - - LOG_FUNC_RETURN (rc); -} - -/**************************************************************************** - ** ** - ** Name: emm_proc_authentication_complete() ** - ** ** - ** Description: Performs the authentication completion procedure executed ** - ** by the network. ** - ** ** - ** 3GPP TS 24.301, section 5.4.2.4 ** - ** Upon receiving the AUTHENTICATION RESPONSE message, the ** - ** MME shall stop timer T3460 and check the correctness of ** - ** the RES parameter. ** - ** ** - ** Inputs: ueid: UE lower layer identifier ** - ** emm_cause: Authentication failure EMM cause code ** - ** res: Authentication response parameter. or auts ** - ** in case of sync failure ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: RETURNok, RETURNerror ** - ** Others: _emm_data, T3460 ** - ** ** - ***************************************************************************/ -int emm_proc_authentication_complete(unsigned int ueid, int emm_cause, - const OctetString *res) -{ - int rc; - emm_sap_t emm_sap; - - LOG_FUNC_IN; - - LOG_TRACE(INFO, "EMM-PROC - Authentication complete (ueid=%u, cause=%d)", - ueid, emm_cause); - - /* Stop timer T3460 */ - LOG_TRACE(INFO, "EMM-PROC - Stop timer T3460 (%d)", T3460.id); - T3460.id = nas_timer_stop(T3460.id); - - /* Release retransmission timer paramaters */ - authentication_data_t *data = - (authentication_data_t *)(emm_proc_common_get_args(ueid)); - - if (data) { - if (data->rand.length > 0) { - free(data->rand.value); - } - - if (data->autn.length > 0) { - free(data->autn.value); - } - - free(data); - } - - /* Get the UE context */ - emm_data_context_t *emm_ctx = NULL; - -#if defined(NAS_BUILT_IN_EPC) - - if (ueid > 0) { - emm_ctx = emm_data_context_get(&_emm_data, ueid); - } - -#else - - if (ueid < EMM_DATA_NB_UE_MAX) { - emm_ctx = _emm_data.ctx[ueid]; - } - -#endif - - if (emm_cause == EMM_CAUSE_SUCCESS) { - /* Check the received RES parameter */ - if ( (emm_ctx == NULL) || - (memcmp(res->value, &emm_ctx->vector.xres, res->length) != 0) ) { - /* RES does not match the XRES parameter */ - LOG_TRACE(WARNING, "EMM-PROC - Failed to authentify the UE"); - emm_cause = EMM_CAUSE_ILLEGAL_UE; - } else { - LOG_TRACE(DEBUG, "EMM-PROC - Success to authentify the UE RESP XRES == XRES UE CONTEXT"); - } - } - - if (emm_cause != EMM_CAUSE_SUCCESS) { - switch (emm_cause) { - -#if defined(NAS_BUILT_IN_EPC) - - case EMM_CAUSE_SYNCH_FAILURE: - /* USIM has detected a mismatch in SQN. - * Ask for a new vector. - */ - MSC_LOG_EVENT( - MSC_NAS_EMM_MME, - "SQN SYNCH_FAILURE ue id %06x", ueid); - - LOG_TRACE(DEBUG, "EMM-PROC - USIM has detected a mismatch in SQN Ask for a new vector"); - nas_itti_auth_info_req(ueid, emm_ctx->imsi, 0, res->value); - - rc = RETURNok; - LOG_FUNC_RETURN (rc); - break; -#endif - - default: - LOG_TRACE(DEBUG, "EMM-PROC - The MME received an authentication failure message or the RES does not match the XRES parameter computed by the network"); - /* The MME received an authentication failure message or the RES - * contained in the Authentication Response message received from - * the UE does not match the XRES parameter computed by the network */ - (void) _authentication_reject(ueid); - /* - * Notify EMM that the authentication procedure failed - */ - MSC_LOG_TX_MESSAGE( - MSC_NAS_EMM_MME, - MSC_NAS_EMM_MME, - NULL,0, - "0 EMMREG_COMMON_PROC_REJ ue id %06x", ueid); - - - emm_sap.primitive = EMMREG_COMMON_PROC_REJ; - emm_sap.u.emm_reg.ueid = ueid; - emm_sap.u.emm_reg.ctx = emm_ctx; - break; - } - } else { - /* - * Notify EMM that the authentication procedure successfully completed - */ - MSC_LOG_TX_MESSAGE( - MSC_NAS_EMM_MME, - MSC_NAS_EMM_MME, - NULL,0, - "0 EMMREG_COMMON_PROC_CNF ue id %06x", ueid); - - LOG_TRACE(DEBUG, "EMM-PROC - Notify EMM that the authentication procedure successfully completed"); - emm_sap.primitive = EMMREG_COMMON_PROC_CNF; - emm_sap.u.emm_reg.ueid = ueid; - emm_sap.u.emm_reg.ctx = emm_ctx; - emm_sap.u.emm_reg.u.common.is_attached = emm_ctx->is_attached; - } - - rc = emm_sap_send(&emm_sap); - - LOG_FUNC_RETURN (rc); -} -#endif // NAS_MME /****************************************************************************/ /********************* L O C A L F U N C T I O N S *********************/ /****************************************************************************/ -#ifdef NAS_UE /* * -------------------------------------------------------------------------- * Timer handlers @@ -1260,16 +945,16 @@ static int _authentication_kasme(const OctetString *autn, kasme->length); /* Compute the derivation key KEY = CK || IK */ - UInt8_t key[ck->length + ik->length]; + uint8_t key[ck->length + ik->length]; memcpy(key, ck->value, ck->length); memcpy(key + ck->length, ik->value, ik->length); /* Compute the KDF input_s parameter * S = FC(0x10) || SNid(MCC, MNC) || 0x00 0x03 || SQN ⊕ AK || 0x00 0x06 */ - UInt8_t input_s[16]; // less than 16 - UInt8_t sn_id[AUTH_SNID_SIZE]; // less than 16 - UInt16_t length; + uint8_t input_s[16]; // less than 16 + uint8_t sn_id[AUTH_SNID_SIZE]; // less than 16 + uint16_t length; int offset = 0; int size_of_length = sizeof(length); @@ -1325,255 +1010,3 @@ static int _authentication_kasme(const OctetString *autn, LOG_FUNC_RETURN (RETURNok); } -#endif // NAS_UE - -#ifdef NAS_MME -/* - * -------------------------------------------------------------------------- - * Timer handlers - * -------------------------------------------------------------------------- - */ - -/**************************************************************************** - ** ** - ** Name: _authentication_t3460_handler() ** - ** ** - ** Description: T3460 timeout handler ** - ** Upon T3460 timer expiration, the authentication request ** - ** message is retransmitted and the timer restarted. When ** - ** retransmission counter is exceed, the MME shall abort the ** - ** authentication procedure and any ongoing EMM specific ** - ** procedure and release the NAS signalling connection. ** - ** ** - ** 3GPP TS 24.301, section 5.4.2.7, case b ** - ** ** - ** Inputs: args: handler parameters ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: None ** - ** Others: None ** - ** ** - ***************************************************************************/ -static void *_authentication_t3460_handler(void *args) -{ - LOG_FUNC_IN; - - int rc; - - authentication_data_t *data = (authentication_data_t *)(args); - - /* Increment the retransmission counter */ - data->retransmission_count += 1; - - LOG_TRACE(WARNING, "EMM-PROC - T3460 timer expired, retransmission " - "counter = %d", data->retransmission_count); - - if (data->retransmission_count < AUTHENTICATION_COUNTER_MAX) { - /* Send authentication request message to the UE */ - rc = _authentication_request(data); - } else { - unsigned int ueid = data->ueid; - /* Set the failure notification indicator */ - data->notify_failure = TRUE; - /* Abort the authentication procedure */ - rc = _authentication_abort(data); - - /* Release the NAS signalling connection */ - if (rc != RETURNerror) { - emm_sap_t emm_sap; - emm_sap.primitive = EMMAS_RELEASE_REQ; - emm_sap.u.emm_as.u.release.guti = NULL; - emm_sap.u.emm_as.u.release.ueid = ueid; - emm_sap.u.emm_as.u.release.cause = EMM_AS_CAUSE_AUTHENTICATION; - rc = emm_sap_send(&emm_sap); - } - } - - LOG_FUNC_RETURN (NULL); -} - -/* - * -------------------------------------------------------------------------- - * MME specific local functions - * -------------------------------------------------------------------------- - */ - -/**************************************************************************** - ** ** - ** Name: _authentication_request() ** - ** ** - ** Description: Sends AUTHENTICATION REQUEST message and start timer T3460** - ** ** - ** Inputs: args: handler parameters ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: RETURNok, RETURNerror ** - ** Others: T3460 ** - ** ** - ***************************************************************************/ -int _authentication_request(authentication_data_t *data) -{ - LOG_FUNC_IN; - - emm_sap_t emm_sap; - int rc; - struct emm_data_context_s *emm_ctx; - - /* - * Notify EMM-AS SAP that Authentication Request message has to be sent - * to the UE - */ - emm_sap.primitive = EMMAS_SECURITY_REQ; - emm_sap.u.emm_as.u.security.guti = NULL; - emm_sap.u.emm_as.u.security.ueid = data->ueid; - emm_sap.u.emm_as.u.security.msgType = EMM_AS_MSG_TYPE_AUTH; - emm_sap.u.emm_as.u.security.ksi = data->ksi; - emm_sap.u.emm_as.u.security.rand = &data->rand; - emm_sap.u.emm_as.u.security.autn = &data->autn; - - /* TODO: check for pointer validity */ -#if defined(NAS_BUILT_IN_EPC) - emm_ctx = emm_data_context_get(&_emm_data, data->ueid); -#else - emm_ctx = _emm_data.ctx[data->ueid]; -#endif - - /* Setup EPS NAS security data */ - emm_as_set_security_data(&emm_sap.u.emm_as.u.security.sctx, - emm_ctx->security, FALSE, TRUE); - - MSC_LOG_TX_MESSAGE( - MSC_NAS_EMM_MME, - MSC_NAS_EMM_MME, - NULL,0, - "0 EMMAS_SECURITY_REQ ue id %06x", data->ueid); - - rc = emm_sap_send(&emm_sap); - - if (rc != RETURNerror) { - if (T3460.id != NAS_TIMER_INACTIVE_ID) { - /* Re-start T3460 timer */ - T3460.id = nas_timer_restart(T3460.id); - } else { - /* Start T3460 timer */ - T3460.id = nas_timer_start(T3460.sec, _authentication_t3460_handler, - data); - } - - LOG_TRACE(INFO,"EMM-PROC - Timer T3460 (%d) expires in %ld seconds", - T3460.id, T3460.sec); - } - - LOG_FUNC_RETURN (rc); -} - -/**************************************************************************** - ** ** - ** Name: _authentication_reject() ** - ** ** - ** Description: Sends AUTHENTICATION REJECT message ** - ** ** - ** Inputs: ueid: UE lower layer identifier ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -static int _authentication_reject(unsigned int ueid) -{ - LOG_FUNC_IN; - - emm_sap_t emm_sap; - int rc; - struct emm_data_context_s *emm_ctx; - - /* - * Notify EMM-AS SAP that Authentication Reject message has to be sent - * to the UE - */ - emm_sap.primitive = EMMAS_SECURITY_REJ; - emm_sap.u.emm_as.u.security.guti = NULL; - emm_sap.u.emm_as.u.security.ueid = ueid; - emm_sap.u.emm_as.u.security.msgType = EMM_AS_MSG_TYPE_AUTH; - -#if defined(NAS_BUILT_IN_EPC) - emm_ctx = emm_data_context_get(&_emm_data, ueid); -#else - emm_ctx = _emm_data.ctx[ueid]; -#endif - /* Setup EPS NAS security data */ - emm_as_set_security_data(&emm_sap.u.emm_as.u.security.sctx, - emm_ctx->security, FALSE, TRUE); - rc = emm_sap_send(&emm_sap); - - LOG_FUNC_RETURN (rc); -} - -/**************************************************************************** - ** ** - ** Name: _authentication_abort() ** - ** ** - ** Description: Aborts the authentication procedure currently in progress ** - ** ** - ** Inputs: args: Authentication data to be released ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: RETURNok, RETURNerror ** - ** Others: T3460 ** - ** ** - ***************************************************************************/ -static int _authentication_abort(void *args) -{ - LOG_FUNC_IN; - - int rc = RETURNerror; - - authentication_data_t *data = (authentication_data_t *)(args); - - if (data) { - unsigned int ueid = data->ueid; - int notify_failure = data->notify_failure; - - LOG_TRACE(WARNING, "EMM-PROC - Abort authentication procedure " - "(ueid=%u)", ueid); - - /* Stop timer T3460 */ - if (T3460.id != NAS_TIMER_INACTIVE_ID) { - LOG_TRACE(INFO, "EMM-PROC - Stop timer T3460 (%d)", T3460.id); - T3460.id = nas_timer_stop(T3460.id); - } - - /* Release retransmission timer paramaters */ - if (data->rand.length > 0) { - free(data->rand.value); - } - - if (data->autn.length > 0) { - free(data->autn.value); - } - - free(data); - - /* - * Notify EMM that the authentication procedure failed - */ - if (notify_failure) { - emm_sap_t emm_sap; - emm_sap.primitive = EMMREG_COMMON_PROC_REJ; - emm_sap.u.emm_reg.ueid = ueid; - rc = emm_sap_send(&emm_sap); - } else { - rc = RETURNok; - } - } - - LOG_FUNC_RETURN (rc); -} - -#endif // NAS_MME - diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/Detach.c b/openair-cn/NAS/UE/EMM/Detach.c old mode 100644 new mode 100755 similarity index 70% rename from openair-cn/NAS/EURECOM-NAS/src/emm/Detach.c rename to openair-cn/NAS/UE/EMM/Detach.c index bbf0528c08..d494515107 --- a/openair-cn/NAS/EURECOM-NAS/src/emm/Detach.c +++ b/openair-cn/NAS/UE/EMM/Detach.c @@ -82,7 +82,6 @@ static const char *_emm_detach_type_str[] = { * Internal data handled by the detach procedure in the UE * -------------------------------------------------------------------------- */ -#ifdef NAS_UE /* * Timer handlers */ @@ -104,15 +103,8 @@ static struct { emm_proc_detach_type_t type; /* Type of the detach procedure * currently in progress */ } _emm_detach_data = {0, FALSE, EMM_DETACH_TYPE_RESERVED}; -#endif // NAS_UE -/* - * -------------------------------------------------------------------------- - * Internal data handled by the detach procedure in the MME - * -------------------------------------------------------------------------- - */ -#ifdef NAS_MME -#endif // NAS_MME + /****************************************************************************/ /****************** E X P O R T E D F U N C T I O N S ******************/ @@ -123,7 +115,6 @@ static struct { * Detach procedure executed by the UE * -------------------------------------------------------------------------- */ -#ifdef NAS_UE /**************************************************************************** ** ** ** Name: emm_proc_detach() ** @@ -363,237 +354,12 @@ int emm_proc_detach_release(void *args) LOG_FUNC_RETURN(rc); } -#endif // NAS_UE -/* - * -------------------------------------------------------------------------- - * Detach procedure executed by the MME - * -------------------------------------------------------------------------- - */ -#ifdef NAS_MME -/**************************************************************************** - ** ** - ** Name: emm_proc_detach() ** - ** ** - ** Description: Initiate the detach procedure to inform the UE that it is ** - ** detached for EPS services, or to re-attach to the network ** - ** and re-establish all PDN connections. ** - ** ** - ** 3GPP TS 24.301, section 5.5.2.3.1 ** - ** In state EMM-REGISTERED the network initiates the detach ** - ** procedure by sending a DETACH REQUEST message to the UE, ** - ** starting timer T3422 and entering state EMM-DEREGISTERED- ** - ** INITIATED. ** - ** ** - ** Inputs: ueid: UE lower layer identifier ** - ** type: Type of the requested detach ** - ** Others: _emm_detach_type_str ** - ** ** - ** Outputs: None ** - ** Return: RETURNok, RETURNerror ** - ** Others: T3422 ** - ** ** - ***************************************************************************/ -int emm_proc_detach(unsigned int ueid, emm_proc_detach_type_t type) -{ - LOG_FUNC_IN; - - int rc = RETURNerror; - - LOG_TRACE(INFO, "EMM-PROC - Initiate detach type = %s (%d)", - _emm_detach_type_str[type], type); - - /* TODO */ - - LOG_FUNC_RETURN(rc); -} - -/**************************************************************************** - ** ** - ** Name: emm_proc_detach_request() ** - ** ** - ** Description: Performs the UE initiated detach procedure for EPS servi- ** - ** ces only When the DETACH REQUEST message is received by ** - ** the network. ** - ** ** - ** 3GPP TS 24.301, section 5.5.2.2.2 ** - ** Upon receiving the DETACH REQUEST message the network ** - ** shall send a DETACH ACCEPT message to the UE and store ** - ** the current EPS security context, if the detach type IE ** - ** does not indicate "switch off". Otherwise, the procedure ** - ** is completed when the network receives the DETACH REQUEST ** - ** message. ** - ** The network shall deactivate the EPS bearer context(s) ** - ** for this UE locally without peer-to-peer signalling and ** - ** shall enter state EMM-DEREGISTERED. ** - ** ** - ** Inputs: ueid: UE lower layer identifier ** - ** type: Type of the requested detach ** - ** switch_off: Indicates whether the detach is required ** - ** because the UE is switched off or not ** - ** native_ksi: TRUE if the security context is of type ** - ** native ** - ** ksi: The NAS ket sey identifier ** - ** guti: The GUTI if provided by the UE ** - ** imsi: The IMSI if provided by the UE ** - ** imei: The IMEI if provided by the UE ** - ** Others: _emm_data ** - ** ** - ** Outputs: None ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -int emm_proc_detach_request(unsigned int ueid, emm_proc_detach_type_t type, - int switch_off, int native_ksi, int ksi, - GUTI_t *guti, imsi_t *imsi, imei_t *imei) -{ - LOG_FUNC_IN; - - int rc; - emm_data_context_t *emm_ctx = NULL; - - LOG_TRACE(INFO, "EMM-PROC - Detach type = %s (%d) requested (ueid=%u)", - _emm_detach_type_str[type], type, ueid); - - /* Get the UE context */ -#if defined(NAS_BUILT_IN_EPC) - - if (ueid > 0) { - emm_ctx = emm_data_context_get(&_emm_data, ueid); - } - -#else - - if (ueid < EMM_DATA_NB_UE_MAX) { - emm_ctx = _emm_data.ctx[ueid]; - } - -#endif - - if (emm_ctx == NULL) { - LOG_TRACE(WARNING, "No EMM context exists for the UE (ueid=%u)", ueid); - LOG_FUNC_RETURN(RETURNok); - } - - if (switch_off) { - MSC_LOG_EVENT(MSC_NAS_EMM_MME, - "0 Removing UE context ue id %06x", ueid); - /* The UE is switched off */ - if (emm_ctx->guti) { - free(emm_ctx->guti); - } - - if (emm_ctx->imsi) { - free(emm_ctx->imsi); - } - - if (emm_ctx->imei) { - free(emm_ctx->imei); - } - - if (emm_ctx->esm_msg.length > 0) { - free(emm_ctx->esm_msg.value); - } - - /* Release NAS security context */ - if (emm_ctx->security) { - emm_security_context_t *security = emm_ctx->security; - - if (security->kasme.value) { - free(security->kasme.value); - } - - if (security->knas_enc.value) { - free(security->knas_enc.value); - } - - if (security->knas_int.value) { - free(security->knas_int.value); - } - - free(emm_ctx->security); - } - - /* Release the EMM context */ -#if defined(NAS_BUILT_IN_EPC) - emm_data_context_remove(&_emm_data, emm_ctx); - free(emm_ctx); -#else - free(_emm_data.ctx[ueid]); - _emm_data.ctx[ueid] = NULL; -#endif - rc = RETURNok; - } else { - /* Normal detach without UE switch-off */ - emm_sap_t emm_sap; - emm_as_data_t *emm_as = &emm_sap.u.emm_as.u.data; - MSC_LOG_TX_MESSAGE( - MSC_NAS_EMM_MME, - MSC_NAS_EMM_MME, - NULL,0, - "0 EMM_AS_NAS_INFO_DETACH ue id %06x", ueid); - - /* Setup NAS information message to transfer */ - emm_as->NASinfo = EMM_AS_NAS_INFO_DETACH; - emm_as->NASmsg.length = 0; - emm_as->NASmsg.value = NULL; - /* Set the UE identifier */ - emm_as->guti = NULL; - emm_as->ueid = ueid; - /* Setup EPS NAS security data */ - emm_as_set_security_data(&emm_as->sctx, emm_ctx->security, FALSE, TRUE); - /* - * Notify EMM-AS SAP that Detach Accept message has to - * be sent to the network - */ - emm_sap.primitive = EMMAS_DATA_REQ; - rc = emm_sap_send(&emm_sap); - } - - if (rc != RETURNerror) { - /* - * Notify ESM that all EPS bearer contexts allocated for this UE have - * to be locally deactivated - */ - MSC_LOG_TX_MESSAGE( - MSC_NAS_EMM_MME, - MSC_NAS_ESM_MME, - NULL,0, - "0 ESM_EPS_BEARER_CONTEXT_DEACTIVATE_REQ ue id %06x", ueid); - esm_sap_t esm_sap; - esm_sap.primitive = ESM_EPS_BEARER_CONTEXT_DEACTIVATE_REQ; - esm_sap.ueid = ueid; - esm_sap.ctx = emm_ctx; - esm_sap.data.eps_bearer_context_deactivate.ebi = ESM_SAP_ALL_EBI; - rc = esm_sap_send(&esm_sap); - - if (rc != RETURNerror) { - emm_sap_t emm_sap; - /* - * Notify EMM that the UE has been implicitly detached - */ - MSC_LOG_TX_MESSAGE( - MSC_NAS_EMM_MME, - MSC_NAS_EMM_MME, - NULL,0, - "0 EMMREG_DETACH_REQ ue id %06x", ueid); - emm_sap.primitive = EMMREG_DETACH_REQ; - emm_sap.u.emm_reg.ueid = ueid; - emm_sap.u.emm_reg.ctx = emm_ctx; - rc = emm_sap_send(&emm_sap); - } - } - - LOG_FUNC_RETURN(rc); -} -#endif // NAS_MME /****************************************************************************/ /********************* L O C A L F U N C T I O N S *********************/ /****************************************************************************/ -#ifdef NAS_UE /* * -------------------------------------------------------------------------- * Timer handlers @@ -720,4 +486,3 @@ static int _emm_detach_abort(emm_proc_detach_type_t type) LOG_FUNC_RETURN (rc); } -#endif // NAS_UE diff --git a/openair-cn/NAS/UE/EMM/EmmStatusHdl.c b/openair-cn/NAS/UE/EMM/EmmStatusHdl.c new file mode 100755 index 0000000000..b81f7d5051 --- /dev/null +++ b/openair-cn/NAS/UE/EMM/EmmStatusHdl.c @@ -0,0 +1,157 @@ +/******************************************************************************* + OpenAirInterface + Copyright(c) 1999 - 2014 Eurecom + + OpenAirInterface is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + + OpenAirInterface is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with OpenAirInterface.The full GNU General Public License is + included in this distribution in the file called "COPYING". If not, + see . + + Contact Information + OpenAirInterface Admin: openair_admin@eurecom.fr + OpenAirInterface Tech : openair_tech@eurecom.fr + OpenAirInterface Dev : openair4g-devel@eurecom.fr + + Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. + + *******************************************************************************/ +/***************************************************************************** +Source Emmstatus.c + +Version 0.1 + +Date 2013/06/26 + +Product NAS stack + +Subsystem EPS Mobility Management + +Author Frederic Maurel + +Description Defines the EMM status procedure executed by the Non-Access + Stratum. + + The purpose of the sending of the EMM STATUS message is to + report at any time certain error conditions detected upon + receipt of EMM protocol data. The EMM STATUS message can be + sent by both the MME and the UE. + +*****************************************************************************/ + +#include "emm_proc.h" +#include "commonDef.h" +#include "nas_log.h" + +#include "emm_cause.h" +#include "emmData.h" + +#include "emm_sap.h" + +/****************************************************************************/ +/**************** E X T E R N A L D E F I N I T I O N S ****************/ +/****************************************************************************/ + +/****************************************************************************/ +/******************* L O C A L D E F I N I T I O N S *******************/ +/****************************************************************************/ + +/****************************************************************************/ +/****************** E X P O R T E D F U N C T I O N S ******************/ +/****************************************************************************/ + +/**************************************************************************** + ** ** + ** Name: emm_proc_status_ind() ** + ** ** + ** Description: Processes received EMM status message. ** + ** ** + ** 3GPP TS 24.301, section 5.7 ** + ** On receipt of an EMM STATUS message no state transition ** + ** and no specific action shall be taken. Local actions are ** + ** possible and are implementation dependent. ** + ** ** + ** Inputs: ueid: UE lower layer identifier ** + ** emm_cause: Received EMM cause code ** + ** Others: None ** + ** ** + ** Outputs: None ** + ** Return: RETURNok, RETURNerror ** + ** Others: None ** + ** ** + ***************************************************************************/ +int emm_proc_status_ind(unsigned int ueid, int emm_cause) +{ + LOG_FUNC_IN; + + int rc; + + LOG_TRACE(INFO,"EMM-PROC - EMM status procedure requested (cause=%d)", + emm_cause); + + LOG_TRACE(DEBUG, "EMM-PROC - To be implemented"); + + /* TODO */ + rc = RETURNok; + + LOG_FUNC_RETURN (rc); +} + +/**************************************************************************** + ** ** + ** Name: emm_proc_status() ** + ** ** + ** Description: Initiates EMM status procedure. ** + ** ** + ** Inputs: ueid: UE lower layer identifier ** + ** emm_cause: EMM cause code to be reported ** + ** Others: None ** + ** ** + ** Outputs: None ** + ** Return: RETURNok, RETURNerror ** + ** Others: None ** + ** ** + ***************************************************************************/ +int emm_proc_status(unsigned int ueid, int emm_cause) +{ + LOG_FUNC_IN; + + int rc; + emm_sap_t emm_sap; + + emm_security_context_t *sctx = NULL; + struct emm_data_context_s *ctx = NULL; + + LOG_TRACE(INFO,"EMM-PROC - EMM status procedure requested"); + + /* + * Notity EMM that EMM status indication has to be sent to lower layers + */ + emm_sap.primitive = EMMAS_STATUS_IND; + emm_sap.u.emm_as.u.status.emm_cause = emm_cause; + emm_sap.u.emm_as.u.status.ueid = ueid; + + emm_sap.u.emm_as.u.status.guti = _emm_data.guti; + sctx = _emm_data.security; + /* Setup EPS NAS security data */ + emm_as_set_security_data(&emm_sap.u.emm_as.u.status.sctx, sctx, + FALSE, TRUE); + + rc = emm_sap_send(&emm_sap); + + LOG_FUNC_RETURN (rc); +} + +/****************************************************************************/ +/********************* L O C A L F U N C T I O N S *********************/ +/****************************************************************************/ diff --git a/openair-cn/NAS/UE/EMM/Identification.c b/openair-cn/NAS/UE/EMM/Identification.c new file mode 100755 index 0000000000..b9d75f1917 --- /dev/null +++ b/openair-cn/NAS/UE/EMM/Identification.c @@ -0,0 +1,219 @@ +/******************************************************************************* + OpenAirInterface + Copyright(c) 1999 - 2014 Eurecom + + OpenAirInterface is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + + OpenAirInterface is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with OpenAirInterface.The full GNU General Public License is + included in this distribution in the file called "COPYING". If not, + see . + + Contact Information + OpenAirInterface Admin: openair_admin@eurecom.fr + OpenAirInterface Tech : openair_tech@eurecom.fr + OpenAirInterface Dev : openair4g-devel@eurecom.fr + + Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. + + *******************************************************************************/ +/***************************************************************************** +Source Identification.c + +Version 0.1 + +Date 2013/04/09 + +Product NAS stack + +Subsystem EPS Mobility Management + +Author Frederic Maurel + +Description Defines the identification EMM procedure executed by the + Non-Access Stratum. + + The identification procedure is used by the network to request + a particular UE to provide specific identification parameters + (IMSI, IMEI). + +*****************************************************************************/ + +#include "emm_proc.h" +#include "nas_log.h" +#include "nas_timer.h" + +#include "emmData.h" + +#include "emm_sap.h" +#include "msc.h" + +#include // malloc, free +#include // memcpy + +/****************************************************************************/ +/**************** E X T E R N A L D E F I N I T I O N S ****************/ +/****************************************************************************/ + +/****************************************************************************/ +/******************* L O C A L D E F I N I T I O N S *******************/ +/****************************************************************************/ + +/* String representation of the requested identity type */ +static const char *_emm_identity_type_str[] = { + "NOT AVAILABLE", "IMSI", "IMEI", "IMEISV", "TMSI" +}; + +/* + * -------------------------------------------------------------------------- + * Internal data handled by the identification procedure in the UE + * -------------------------------------------------------------------------- + */ + + +/****************************************************************************/ +/****************** E X P O R T E D F U N C T I O N S ******************/ +/****************************************************************************/ + +/* + * -------------------------------------------------------------------------- + * Identification procedure executed by the UE + * -------------------------------------------------------------------------- + */ +/**************************************************************************** + ** ** + ** Name: emm_proc_identification_request() ** + ** ** + ** Description: Performs the MME requested identification procedure. ** + ** ** + ** 3GPP TS 24.301, section 5.4.4.3 ** + ** Upon receiving the IDENTITY REQUEST message, the UE shall ** + ** send an IDENTITY RESPONSE message to the network. The ** + ** IDENTITY RESPONSE message shall contain the identifica- ** + ** tion parameters as requested by the network. ** + ** ** + ** Inputs: type: Type of the requested identity ** + ** Others: None ** + ** ** + ** Outputs: None ** + ** Return: RETURNok, RETURNerror ** + ** Others: None ** + ** ** + ***************************************************************************/ +int emm_proc_identification_request(emm_proc_identity_type_t type) +{ + LOG_FUNC_IN; + + int rc; + emm_sap_t emm_sap; + + LOG_TRACE(INFO, "EMM-PROC - Identification requested type = %s (%d)", + _emm_identity_type_str[type], type); + + /* Setup EMM procedure handler to be executed upon receiving + * lower layer notification */ + rc = emm_proc_lowerlayer_initialize(NULL, NULL, NULL, NULL); + + if (rc != RETURNok) { + LOG_TRACE(WARNING, + "EMM-PROC - Failed to initialize EMM procedure handler"); + LOG_FUNC_RETURN (RETURNerror); + } + + emm_sap.u.emm_as.u.security.identType = EMM_IDENT_TYPE_NOT_AVAILABLE; + + switch (type) { + case EMM_IDENT_TYPE_IMSI: { + imsi_t modified_imsi; + + /* International Mobile Subscriber Identity is requested */ + if (_emm_data.imsi) { + memcpy (&modified_imsi, _emm_data.imsi, sizeof (modified_imsi)); + + /* LW: Eventually replace the 0xF value set in MNC digit 3 by a 0 to avoid IMSI to be truncated before reaching HSS */ + if (modified_imsi.u.num.digit6 == 0xF) { + modified_imsi.u.num.digit6 = 0; + } + + emm_sap.u.emm_as.u.security.identType = EMM_IDENT_TYPE_IMSI; + emm_sap.u.emm_as.u.security.imsi = &modified_imsi; + + LOG_TRACE(INFO, "EMM-PROC - IMSI = %u%u%u %u%u%u %u%u%u%u%x%x%x%x%x", + emm_sap.u.emm_as.u.security.imsi->u.num.digit1, + emm_sap.u.emm_as.u.security.imsi->u.num.digit2, + emm_sap.u.emm_as.u.security.imsi->u.num.digit3, + + emm_sap.u.emm_as.u.security.imsi->u.num.digit4, + emm_sap.u.emm_as.u.security.imsi->u.num.digit5, + emm_sap.u.emm_as.u.security.imsi->u.num.digit6, + + emm_sap.u.emm_as.u.security.imsi->u.num.digit7, + emm_sap.u.emm_as.u.security.imsi->u.num.digit8, + emm_sap.u.emm_as.u.security.imsi->u.num.digit9, + emm_sap.u.emm_as.u.security.imsi->u.num.digit10, + emm_sap.u.emm_as.u.security.imsi->u.num.digit11, + emm_sap.u.emm_as.u.security.imsi->u.num.digit12, + emm_sap.u.emm_as.u.security.imsi->u.num.digit13, + emm_sap.u.emm_as.u.security.imsi->u.num.digit14, + emm_sap.u.emm_as.u.security.imsi->u.num.digit15); + } + + break; + } + + case EMM_IDENT_TYPE_IMEI: + + /* International Mobile Equipment Identity is requested */ + if (_emm_data.imei) { + emm_sap.u.emm_as.u.security.identType = EMM_IDENT_TYPE_IMEI; + emm_sap.u.emm_as.u.security.imei = _emm_data.imei; + } + + break; + + case EMM_IDENT_TYPE_TMSI: + + /* Temporary Mobile Subscriber Identity is requested */ + if (_emm_data.guti) { + emm_sap.u.emm_as.u.security.identType = EMM_IDENT_TYPE_TMSI; + emm_sap.u.emm_as.u.security.tmsi = _emm_data.guti->m_tmsi; + } + + break; + + default: + /* Other identities are not available */ + break; + } + + /* + * Notify EMM-AS SAP that Identity Response message has to be sent + * to the MME + */ + emm_sap.primitive = EMMAS_SECURITY_RES; + emm_sap.u.emm_as.u.security.guti = _emm_data.guti; + emm_sap.u.emm_as.u.security.ueid = 0; + emm_sap.u.emm_as.u.security.msgType = EMM_AS_MSG_TYPE_IDENT; + /* Setup EPS NAS security data */ + emm_as_set_security_data(&emm_sap.u.emm_as.u.security.sctx, + _emm_data.security, FALSE, TRUE); + rc = emm_sap_send(&emm_sap); + + LOG_FUNC_RETURN (rc); +} + + +/****************************************************************************/ +/********************* L O C A L F U N C T I O N S *********************/ +/****************************************************************************/ + + diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/IdleMode.c b/openair-cn/NAS/UE/EMM/IdleMode.c old mode 100644 new mode 100755 similarity index 99% rename from openair-cn/NAS/EURECOM-NAS/src/emm/IdleMode.c rename to openair-cn/NAS/UE/EMM/IdleMode.c index 027ed0fc5d..78c21205e3 --- a/openair-cn/NAS/EURECOM-NAS/src/emm/IdleMode.c +++ b/openair-cn/NAS/UE/EMM/IdleMode.c @@ -63,7 +63,6 @@ Description Defines EMM procedures executed by the Non-Access Stratum *****************************************************************************/ -#ifdef NAS_UE #include "emm_proc.h" #include "nas_log.h" @@ -1069,13 +1068,11 @@ int emm_proc_network_notify(int index) LOG_FUNC_RETURN (rc); } -#endif // NAS_UE /****************************************************************************/ /********************* L O C A L F U N C T I O N S *********************/ /****************************************************************************/ -#ifdef NAS_UE /**************************************************************************** ** ** ** Name: _IdleMain_plmn_str() ** @@ -1223,5 +1220,4 @@ static int _IdleMode_get_suitable_cell(int index) return emm_sap_send(&emm_sap); } -#endif // NAS_UE diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/IdleMode.h b/openair-cn/NAS/UE/EMM/IdleMode.h old mode 100644 new mode 100755 similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/emm/IdleMode.h rename to openair-cn/NAS/UE/EMM/IdleMode.h diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/LowerLayer.c b/openair-cn/NAS/UE/EMM/LowerLayer.c old mode 100644 new mode 100755 similarity index 95% rename from openair-cn/NAS/EURECOM-NAS/src/emm/LowerLayer.c rename to openair-cn/NAS/UE/EMM/LowerLayer.c index 0a19feb0a5..10f7c4ccc9 --- a/openair-cn/NAS/EURECOM-NAS/src/emm/LowerLayer.c +++ b/openair-cn/NAS/UE/EMM/LowerLayer.c @@ -67,7 +67,6 @@ Description Defines EMM procedures executed by the Non-Access Stratum /******************* L O C A L D E F I N I T I O N S *******************/ /****************************************************************************/ -#ifdef NAS_UE /* * Data structure used to handle EMM procedures executed by the UE upon * receiving lower layer notifications @@ -78,7 +77,6 @@ static struct { lowerlayer_release_callback_t release; /* NAS signalling release */ void *args; /* EMM procedure argument parameters */ } _lowerlayer_data; -#endif /****************************************************************************/ /****************** E X P O R T E D F U N C T I O N S ******************/ @@ -168,10 +166,8 @@ int lowerlayer_establish(void) { LOG_FUNC_IN; -#ifdef NAS_UE /* Update the EPS Connection Management status */ _emm_data.ecm_status = ECM_CONNECTED; -#endif LOG_FUNC_RETURN (RETURNok); } @@ -198,10 +194,8 @@ int lowerlayer_release(int cause) emm_sap_t emm_sap; int rc; -#ifdef NAS_UE /* Update the EPS Connection Management status */ _emm_data.ecm_status = ECM_IDLE; -#endif emm_sap.primitive = EMMREG_LOWERLAYER_RELEASE; emm_sap.u.emm_reg.ueid = 0; @@ -230,26 +224,14 @@ int lowerlayer_data_ind(unsigned int ueid, const OctetString *data) { esm_sap_t esm_sap; int rc; -#if defined(NAS_MME) - emm_data_context_t *emm_ctx = NULL; -#endif + LOG_FUNC_IN; -#if defined(NAS_BUILT_IN_EPC) && defined(NAS_MME) - - if (ueid > 0) { - emm_ctx = emm_data_context_get(&_emm_data, ueid); - } - -#endif - esm_sap.primitive = ESM_UNITDATA_IND; esm_sap.is_standalone = TRUE; esm_sap.ueid = ueid; -#if defined(NAS_MME) - esm_sap.ctx = emm_ctx; -#endif + esm_sap.recv = data; rc = esm_sap_send(&esm_sap); @@ -282,33 +264,10 @@ int lowerlayer_data_req(unsigned int ueid, const OctetString *data) struct emm_data_context_s *ctx = NULL; emm_sap.primitive = EMMAS_DATA_REQ; -#ifdef NAS_UE emm_sap.u.emm_as.u.data.guti = _emm_data.guti; emm_sap.u.emm_as.u.data.ueid = 0; sctx = _emm_data.security; -#endif -#ifdef NAS_MME - emm_sap.u.emm_as.u.data.guti = NULL; - emm_sap.u.emm_as.u.data.ueid = ueid; -# if defined(NAS_BUILT_IN_EPC) - if (ueid > 0) { - ctx = emm_data_context_get(&_emm_data, ueid); - } - -# else - - if (ueid < EMM_DATA_NB_UE_MAX) { - ctx = _emm_data.ctx[ueid]; - } - -# endif - - if (ctx) { - sctx = ctx->security; - } - -#endif emm_sap.u.emm_as.u.data.NASinfo = 0; emm_sap.u.emm_as.u.data.NASmsg.length = data->length; emm_sap.u.emm_as.u.data.NASmsg.value = data->value; @@ -324,7 +283,6 @@ int lowerlayer_data_req(unsigned int ueid, const OctetString *data) * EMM procedure handlers * -------------------------------------------------------------------------- */ -#ifdef NAS_UE /**************************************************************************** ** ** ** Name: emm_proc_lowerlayer_initialize() ** @@ -455,7 +413,6 @@ int emm_proc_lowerlayer_release(void) LOG_FUNC_RETURN (rc); } -#endif // NAS_UE /**************************************************************************** ** ** @@ -496,7 +453,7 @@ void emm_as_set_security_data(emm_as_security_data_t *data, const void *args, is_new, context->eksi, context->ul_count.seq_num, - *(UInt32_t *)(&context->ul_count)); + *(uint32_t *)(&context->ul_count)); LOG_TRACE(INFO, "knas_int %s",dump_octet_string(&context->knas_int)); LOG_TRACE(INFO, @@ -506,15 +463,9 @@ void emm_as_set_security_data(emm_as_security_data_t *data, const void *args, data->is_new = is_new; data->ksi = context->eksi; -#if defined (NAS_UE) data->sqn = context->ul_count.seq_num; - // LG data->count = *(UInt32_t *)(&context->ul_count); + // LG data->count = *(uint32_t *)(&context->ul_count); data->count = 0x00000000 | (context->ul_count.overflow << 8 ) | context->ul_count.seq_num; -#else - data->sqn = context->dl_count.seq_num; - // LG data->count = *(UInt32_t *)(&context->ul_count); - data->count = 0x00000000 | (context->dl_count.overflow << 8 ) | context->dl_count.seq_num; -#endif /* NAS integrity and cyphering keys may not be available if the * current security context is a partial EPS security context * and not a full native EPS security context */ diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/LowerLayer.h b/openair-cn/NAS/UE/EMM/LowerLayer.h old mode 100644 new mode 100755 similarity index 99% rename from openair-cn/NAS/EURECOM-NAS/src/emm/LowerLayer.h rename to openair-cn/NAS/UE/EMM/LowerLayer.h index eead2a909c..4d9b4c5d39 --- a/openair-cn/NAS/EURECOM-NAS/src/emm/LowerLayer.h +++ b/openair-cn/NAS/UE/EMM/LowerLayer.h @@ -55,7 +55,6 @@ Description Defines EMM procedures executed by the Non-Access Stratum /********************* G L O B A L C O N S T A N T S *******************/ /****************************************************************************/ -#ifdef NAS_UE /* * Type of EMM procedure callback function executed whenever data are * successfully delivered to the network @@ -73,7 +72,6 @@ typedef int (*lowerlayer_failure_callback_t)(int, void *); * connection is released */ typedef int (*lowerlayer_release_callback_t)(void *); -#endif /****************************************************************************/ /************************ G L O B A L T Y P E S ************************/ diff --git a/openair-cn/NAS/EURECOM-NAS/src/util/COPYING b/openair-cn/NAS/UE/EMM/SAP/COPYING old mode 100644 new mode 100755 similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/util/COPYING rename to openair-cn/NAS/UE/EMM/SAP/COPYING diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/sap/EmmDeregistered.c b/openair-cn/NAS/UE/EMM/SAP/EmmDeregistered.c old mode 100644 new mode 100755 similarity index 89% rename from openair-cn/NAS/EURECOM-NAS/src/emm/sap/EmmDeregistered.c rename to openair-cn/NAS/UE/EMM/SAP/EmmDeregistered.c index 7c3233312b..83ae79f428 --- a/openair-cn/NAS/EURECOM-NAS/src/emm/sap/EmmDeregistered.c +++ b/openair-cn/NAS/UE/EMM/SAP/EmmDeregistered.c @@ -99,14 +99,9 @@ int EmmDeregistered(const emm_reg_t *evt) int rc = RETURNerror; -#ifdef NAS_UE assert(emm_fsm_get_status() == EMM_DEREGISTERED); -#endif -#ifdef NAS_MME - assert(emm_fsm_get_status(evt->ueid, evt->ctx) == EMM_DEREGISTERED); -#endif -#ifdef NAS_UE + /* Delete the authentication data RAND and RES */ rc = emm_proc_authentication_delete(); @@ -120,11 +115,9 @@ int EmmDeregistered(const emm_reg_t *evt) * DEREGISTERED from any other state except EMM-NULL or when the UE aborts * the attach procedure without having left EMM-DEREGISTERED. */ -#endif switch (evt->primitive) { -#ifdef NAS_UE case _EMMREG_NO_IMSI: /* @@ -168,36 +161,6 @@ int EmmDeregistered(const emm_reg_t *evt) break; -#endif - -#ifdef NAS_MME - - case _EMMREG_PROC_ABORT: - /* - * Ongoing EMM procedure aborted - */ - rc = RETURNok; - break; - - case _EMMREG_COMMON_PROC_REQ: - /* - * An EMM common procedure has been initiated; - * enter state EMM-COMMON-PROCEDURE-INITIATED. - */ - rc = emm_fsm_set_status(evt->ueid, evt->ctx, EMM_COMMON_PROCEDURE_INITIATED); - break; - - case _EMMREG_ATTACH_CNF: - /* - * Attach procedure successful and default EPS bearer - * context activated; - * enter state EMM-REGISTERED. - */ - rc = emm_fsm_set_status(evt->ueid, evt->ctx, EMM_REGISTERED); - break; - -#endif - case _EMMREG_LOWERLAYER_SUCCESS: /* * Data successfully delivered to the network @@ -218,14 +181,12 @@ int EmmDeregistered(const emm_reg_t *evt) break; } -#ifdef NAS_UE /* TODO: 3GPP TS 24.301, section 4.4.2.1 * The UE shall mark the EPS security context on the USIM or in the non- * volatile memory as invalid when the UE initiates an attach procedure * or when the UE leaves state EMM-DEREGISTERED for any other state except * EMM-NULL. */ -#endif LOG_FUNC_RETURN (rc); } diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/sap/EmmDeregisteredAttachNeeded.c b/openair-cn/NAS/UE/EMM/SAP/EmmDeregisteredAttachNeeded.c old mode 100644 new mode 100755 similarity index 99% rename from openair-cn/NAS/EURECOM-NAS/src/emm/sap/EmmDeregisteredAttachNeeded.c rename to openair-cn/NAS/UE/EMM/SAP/EmmDeregisteredAttachNeeded.c index 91c161fceb..b2def20a57 --- a/openair-cn/NAS/EURECOM-NAS/src/emm/sap/EmmDeregisteredAttachNeeded.c +++ b/openair-cn/NAS/UE/EMM/SAP/EmmDeregisteredAttachNeeded.c @@ -50,7 +50,6 @@ Description Implements the EPS Mobility Management procedures executed *****************************************************************************/ -#ifdef NAS_UE #include "emm_fsm.h" #include "commonDef.h" @@ -100,4 +99,3 @@ int EmmDeregisteredAttachNeeded(const emm_reg_t *evt) /********************* L O C A L F U N C T I O N S *********************/ /****************************************************************************/ -#endif diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/sap/EmmDeregisteredAttemptingToAttach.c b/openair-cn/NAS/UE/EMM/SAP/EmmDeregisteredAttemptingToAttach.c old mode 100644 new mode 100755 similarity index 99% rename from openair-cn/NAS/EURECOM-NAS/src/emm/sap/EmmDeregisteredAttemptingToAttach.c rename to openair-cn/NAS/UE/EMM/SAP/EmmDeregisteredAttemptingToAttach.c index bdfafe4a7a..51053ab925 --- a/openair-cn/NAS/EURECOM-NAS/src/emm/sap/EmmDeregisteredAttemptingToAttach.c +++ b/openair-cn/NAS/UE/EMM/SAP/EmmDeregisteredAttemptingToAttach.c @@ -48,7 +48,6 @@ Description Implements the EPS Mobility Management procedures executed *****************************************************************************/ -#ifdef NAS_UE #include "emm_fsm.h" #include "commonDef.h" @@ -144,4 +143,3 @@ int EmmDeregisteredAttemptingToAttach(const emm_reg_t *evt) /********************* L O C A L F U N C T I O N S *********************/ /****************************************************************************/ -#endif diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/sap/EmmDeregisteredInitiated.c b/openair-cn/NAS/UE/EMM/SAP/EmmDeregisteredInitiated.c old mode 100644 new mode 100755 similarity index 97% rename from openair-cn/NAS/EURECOM-NAS/src/emm/sap/EmmDeregisteredInitiated.c rename to openair-cn/NAS/UE/EMM/SAP/EmmDeregisteredInitiated.c index 65443fc4ab..fc0e0524be --- a/openair-cn/NAS/EURECOM-NAS/src/emm/sap/EmmDeregisteredInitiated.c +++ b/openair-cn/NAS/UE/EMM/SAP/EmmDeregisteredInitiated.c @@ -91,15 +91,9 @@ int EmmDeregisteredInitiated(const emm_reg_t *evt) int rc = RETURNerror; -#ifdef NAS_UE assert(emm_fsm_get_status() == EMM_DEREGISTERED_INITIATED); -#endif -#ifdef NAS_MME - assert(emm_fsm_get_status(evt->ueid, evt->ctx) == EMM_DEREGISTERED_INITIATED); -#endif switch (evt->primitive) { -#ifdef NAS_UE case _EMMREG_DETACH_CNF: /* @@ -138,7 +132,6 @@ int EmmDeregisteredInitiated(const emm_reg_t *evt) */ rc = emm_proc_lowerlayer_release(); break; -#endif default: LOG_TRACE(ERROR, "EMM-FSM - Primitive is not valid (%d)", diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/sap/EmmDeregisteredLimitedService.c b/openair-cn/NAS/UE/EMM/SAP/EmmDeregisteredLimitedService.c old mode 100644 new mode 100755 similarity index 99% rename from openair-cn/NAS/EURECOM-NAS/src/emm/sap/EmmDeregisteredLimitedService.c rename to openair-cn/NAS/UE/EMM/SAP/EmmDeregisteredLimitedService.c index 1c650bfb0a..6af83fd855 --- a/openair-cn/NAS/EURECOM-NAS/src/emm/sap/EmmDeregisteredLimitedService.c +++ b/openair-cn/NAS/UE/EMM/SAP/EmmDeregisteredLimitedService.c @@ -48,7 +48,6 @@ Description Implements the EPS Mobility Management procedures executed *****************************************************************************/ -#ifdef NAS_UE #include "emm_fsm.h" #include "commonDef.h" @@ -164,4 +163,3 @@ int EmmDeregisteredLimitedService(const emm_reg_t *evt) /********************* L O C A L F U N C T I O N S *********************/ /****************************************************************************/ -#endif diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/sap/EmmDeregisteredNoCellAvailable.c b/openair-cn/NAS/UE/EMM/SAP/EmmDeregisteredNoCellAvailable.c old mode 100644 new mode 100755 similarity index 99% rename from openair-cn/NAS/EURECOM-NAS/src/emm/sap/EmmDeregisteredNoCellAvailable.c rename to openair-cn/NAS/UE/EMM/SAP/EmmDeregisteredNoCellAvailable.c index 2273b93b90..9708f3a6be --- a/openair-cn/NAS/EURECOM-NAS/src/emm/sap/EmmDeregisteredNoCellAvailable.c +++ b/openair-cn/NAS/UE/EMM/SAP/EmmDeregisteredNoCellAvailable.c @@ -50,7 +50,6 @@ Description Implements the EPS Mobility Management procedures executed *****************************************************************************/ -#ifdef NAS_UE #include "emm_fsm.h" #include "commonDef.h" @@ -144,4 +143,3 @@ int EmmDeregisteredNoCellAvailable(const emm_reg_t *evt) /********************* L O C A L F U N C T I O N S *********************/ /****************************************************************************/ -#endif diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/sap/EmmDeregisteredNoImsi.c b/openair-cn/NAS/UE/EMM/SAP/EmmDeregisteredNoImsi.c old mode 100644 new mode 100755 similarity index 99% rename from openair-cn/NAS/EURECOM-NAS/src/emm/sap/EmmDeregisteredNoImsi.c rename to openair-cn/NAS/UE/EMM/SAP/EmmDeregisteredNoImsi.c index d66ec7c09f..315ce0f8ff --- a/openair-cn/NAS/EURECOM-NAS/src/emm/sap/EmmDeregisteredNoImsi.c +++ b/openair-cn/NAS/UE/EMM/SAP/EmmDeregisteredNoImsi.c @@ -47,7 +47,6 @@ Description Implements the EPS Mobility Management procedures executed *****************************************************************************/ -#ifdef NAS_UE #include "emm_fsm.h" #include "commonDef.h" @@ -101,4 +100,3 @@ int EmmDeregisteredNoImsi(const emm_reg_t *evt) /********************* L O C A L F U N C T I O N S *********************/ /****************************************************************************/ -#endif diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/sap/EmmDeregisteredNormalService.c b/openair-cn/NAS/UE/EMM/SAP/EmmDeregisteredNormalService.c old mode 100644 new mode 100755 similarity index 99% rename from openair-cn/NAS/EURECOM-NAS/src/emm/sap/EmmDeregisteredNormalService.c rename to openair-cn/NAS/UE/EMM/SAP/EmmDeregisteredNormalService.c index 9068bb24cc..386a4fd4b4 --- a/openair-cn/NAS/EURECOM-NAS/src/emm/sap/EmmDeregisteredNormalService.c +++ b/openair-cn/NAS/UE/EMM/SAP/EmmDeregisteredNormalService.c @@ -49,7 +49,6 @@ Description Implements the EPS Mobility Management procedures executed *****************************************************************************/ -#ifdef NAS_UE #include "emm_fsm.h" #include "commonDef.h" @@ -173,4 +172,3 @@ int EmmDeregisteredNormalService(const emm_reg_t *evt) /********************* L O C A L F U N C T I O N S *********************/ /****************************************************************************/ -#endif diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/sap/EmmDeregisteredPlmnSearch.c b/openair-cn/NAS/UE/EMM/SAP/EmmDeregisteredPlmnSearch.c old mode 100644 new mode 100755 similarity index 99% rename from openair-cn/NAS/EURECOM-NAS/src/emm/sap/EmmDeregisteredPlmnSearch.c rename to openair-cn/NAS/UE/EMM/SAP/EmmDeregisteredPlmnSearch.c index 681f5e061b..071b9a576c --- a/openair-cn/NAS/EURECOM-NAS/src/emm/sap/EmmDeregisteredPlmnSearch.c +++ b/openair-cn/NAS/UE/EMM/SAP/EmmDeregisteredPlmnSearch.c @@ -47,7 +47,6 @@ Description Implements the EPS Mobility Management procedures executed *****************************************************************************/ -#ifdef NAS_UE #include "emm_fsm.h" #include "commonDef.h" @@ -161,4 +160,3 @@ int EmmDeregisteredPlmnSearch(const emm_reg_t *evt) /********************* L O C A L F U N C T I O N S *********************/ /****************************************************************************/ -#endif diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/sap/EmmNull.c b/openair-cn/NAS/UE/EMM/SAP/EmmNull.c old mode 100644 new mode 100755 similarity index 99% rename from openair-cn/NAS/EURECOM-NAS/src/emm/sap/EmmNull.c rename to openair-cn/NAS/UE/EMM/SAP/EmmNull.c index 5416fd92f5..c1583d56e1 --- a/openair-cn/NAS/EURECOM-NAS/src/emm/sap/EmmNull.c +++ b/openair-cn/NAS/UE/EMM/SAP/EmmNull.c @@ -47,7 +47,6 @@ Description Implements the EPS Mobility Management procedures executed *****************************************************************************/ -#ifdef NAS_UE #include "emm_fsm.h" #include "commonDef.h" @@ -133,4 +132,3 @@ int EmmNull(const emm_reg_t *evt) /********************* L O C A L F U N C T I O N S *********************/ /****************************************************************************/ -#endif diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/sap/EmmRegistered.c b/openair-cn/NAS/UE/EMM/SAP/EmmRegistered.c old mode 100644 new mode 100755 similarity index 84% rename from openair-cn/NAS/EURECOM-NAS/src/emm/sap/EmmRegistered.c rename to openair-cn/NAS/UE/EMM/SAP/EmmRegistered.c index 0bf682b7e1..7db6e86b74 --- a/openair-cn/NAS/EURECOM-NAS/src/emm/sap/EmmRegistered.c +++ b/openair-cn/NAS/UE/EMM/SAP/EmmRegistered.c @@ -94,15 +94,10 @@ int EmmRegistered(const emm_reg_t *evt) int rc = RETURNerror; -#ifdef NAS_UE assert(emm_fsm_get_status() == EMM_REGISTERED); -#endif -#ifdef NAS_MME - assert(emm_fsm_get_status(evt->ueid, evt->ctx) == EMM_REGISTERED); -#endif + switch (evt->primitive) { -#ifdef NAS_UE case _EMMREG_DETACH_INIT: /* @@ -164,48 +159,6 @@ int EmmRegistered(const emm_reg_t *evt) */ rc = emm_proc_lowerlayer_release(); break; -#endif - -#ifdef NAS_MME - - case _EMMREG_DETACH_REQ: - /* - * Network detach has been requested (implicit detach); - * enter state EMM-DEREGISTERED - */ - rc = emm_fsm_set_status(evt->ueid, evt->ctx, EMM_DEREGISTERED); - break; - - case _EMMREG_COMMON_PROC_REQ: - /* - * An EMM common procedure has been initiated; - * enter state EMM-COMMON-PROCEDURE-INITIATED. - */ - rc = emm_fsm_set_status(evt->ueid, evt->ctx, EMM_COMMON_PROCEDURE_INITIATED); - break; - - case _EMMREG_TAU_REJ: - /* - * TODO: Tracking Area Update has been rejected - */ - LOG_TRACE(ERROR, "EMM-FSM - Tracking Area Update procedure " - "is not implemented"); - break; - - case _EMMREG_LOWERLAYER_SUCCESS: - /* - * Data successfully delivered to the network - */ - rc = RETURNok; - break; - - case _EMMREG_LOWERLAYER_FAILURE: - /* - * Data failed to be delivered to the network - */ - rc = RETURNok; - break; -#endif default: LOG_TRACE(ERROR, "EMM-FSM - Primitive is not valid (%d)", diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/sap/EmmRegisteredAttemptingToUpdate.c b/openair-cn/NAS/UE/EMM/SAP/EmmRegisteredAttemptingToUpdate.c old mode 100644 new mode 100755 similarity index 99% rename from openair-cn/NAS/EURECOM-NAS/src/emm/sap/EmmRegisteredAttemptingToUpdate.c rename to openair-cn/NAS/UE/EMM/SAP/EmmRegisteredAttemptingToUpdate.c index 4d96f1a016..6b15df4a54 --- a/openair-cn/NAS/EURECOM-NAS/src/emm/sap/EmmRegisteredAttemptingToUpdate.c +++ b/openair-cn/NAS/UE/EMM/SAP/EmmRegisteredAttemptingToUpdate.c @@ -52,8 +52,6 @@ Description Implements the EPS Mobility Management procedures executed *****************************************************************************/ -#ifdef NAS_UE - #include "emm_fsm.h" #include "commonDef.h" #include "nas_log.h" @@ -102,4 +100,3 @@ int EmmRegisteredAttemptingToUpdate(const emm_reg_t *evt) /********************* L O C A L F U N C T I O N S *********************/ /****************************************************************************/ -#endif diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/sap/EmmRegisteredImsiDetachInitiated.c b/openair-cn/NAS/UE/EMM/SAP/EmmRegisteredImsiDetachInitiated.c old mode 100644 new mode 100755 similarity index 99% rename from openair-cn/NAS/EURECOM-NAS/src/emm/sap/EmmRegisteredImsiDetachInitiated.c rename to openair-cn/NAS/UE/EMM/SAP/EmmRegisteredImsiDetachInitiated.c index ac794db3a0..ba40a549d8 --- a/openair-cn/NAS/EURECOM-NAS/src/emm/sap/EmmRegisteredImsiDetachInitiated.c +++ b/openair-cn/NAS/UE/EMM/SAP/EmmRegisteredImsiDetachInitiated.c @@ -51,7 +51,6 @@ Description Implements the EPS Mobility Management procedures executed *****************************************************************************/ -#ifdef NAS_UE #include "emm_fsm.h" #include "commonDef.h" @@ -101,4 +100,3 @@ int EmmRegisteredImsiDetachInitiated(const emm_reg_t *evt) /********************* L O C A L F U N C T I O N S *********************/ /****************************************************************************/ -#endif diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/sap/EmmRegisteredInitiated.c b/openair-cn/NAS/UE/EMM/SAP/EmmRegisteredInitiated.c old mode 100644 new mode 100755 similarity index 99% rename from openair-cn/NAS/EURECOM-NAS/src/emm/sap/EmmRegisteredInitiated.c rename to openair-cn/NAS/UE/EMM/SAP/EmmRegisteredInitiated.c index 6a17c2ca09..2ee8b8dea6 --- a/openair-cn/NAS/EURECOM-NAS/src/emm/sap/EmmRegisteredInitiated.c +++ b/openair-cn/NAS/UE/EMM/SAP/EmmRegisteredInitiated.c @@ -48,7 +48,6 @@ Description Implements the EPS Mobility Management procedures executed *****************************************************************************/ -#ifdef NAS_UE #include "emm_fsm.h" #include "commonDef.h" @@ -270,5 +269,3 @@ int EmmRegisteredInitiated(const emm_reg_t *evt) /****************************************************************************/ /********************* L O C A L F U N C T I O N S *********************/ /****************************************************************************/ - -#endif diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/sap/EmmRegisteredLimitedService.c b/openair-cn/NAS/UE/EMM/SAP/EmmRegisteredLimitedService.c old mode 100644 new mode 100755 similarity index 99% rename from openair-cn/NAS/EURECOM-NAS/src/emm/sap/EmmRegisteredLimitedService.c rename to openair-cn/NAS/UE/EMM/SAP/EmmRegisteredLimitedService.c index b0be7df11a..799914d119 --- a/openair-cn/NAS/EURECOM-NAS/src/emm/sap/EmmRegisteredLimitedService.c +++ b/openair-cn/NAS/UE/EMM/SAP/EmmRegisteredLimitedService.c @@ -47,7 +47,6 @@ Description Implements the EPS Mobility Management procedures executed *****************************************************************************/ -#ifdef NAS_UE #include "emm_fsm.h" #include "commonDef.h" @@ -97,4 +96,3 @@ int EmmRegisteredLimitedService(const emm_reg_t *evt) /********************* L O C A L F U N C T I O N S *********************/ /****************************************************************************/ -#endif diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/sap/EmmRegisteredNoCellAvailable.c b/openair-cn/NAS/UE/EMM/SAP/EmmRegisteredNoCellAvailable.c old mode 100644 new mode 100755 similarity index 99% rename from openair-cn/NAS/EURECOM-NAS/src/emm/sap/EmmRegisteredNoCellAvailable.c rename to openair-cn/NAS/UE/EMM/SAP/EmmRegisteredNoCellAvailable.c index 38a14a1332..0578d8acfd --- a/openair-cn/NAS/EURECOM-NAS/src/emm/sap/EmmRegisteredNoCellAvailable.c +++ b/openair-cn/NAS/UE/EMM/SAP/EmmRegisteredNoCellAvailable.c @@ -48,7 +48,6 @@ Description Implements the EPS Mobility Management procedures executed *****************************************************************************/ -#ifdef NAS_UE #include "emm_fsm.h" #include "commonDef.h" @@ -98,4 +97,3 @@ int EmmRegisteredNoCellAvailable(const emm_reg_t *evt) /********************* L O C A L F U N C T I O N S *********************/ /****************************************************************************/ -#endif diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/sap/EmmRegisteredNormalService.c b/openair-cn/NAS/UE/EMM/SAP/EmmRegisteredNormalService.c old mode 100644 new mode 100755 similarity index 99% rename from openair-cn/NAS/EURECOM-NAS/src/emm/sap/EmmRegisteredNormalService.c rename to openair-cn/NAS/UE/EMM/SAP/EmmRegisteredNormalService.c index 8b462348b8..51e28d2068 --- a/openair-cn/NAS/EURECOM-NAS/src/emm/sap/EmmRegisteredNormalService.c +++ b/openair-cn/NAS/UE/EMM/SAP/EmmRegisteredNormalService.c @@ -47,7 +47,6 @@ Description Implements the EPS Mobility Management procedures executed *****************************************************************************/ -#ifdef NAS_UE #include "emm_fsm.h" #include "commonDef.h" @@ -97,4 +96,3 @@ int EmmRegisteredNormalService(const emm_reg_t *evt) /********************* L O C A L F U N C T I O N S *********************/ /****************************************************************************/ -#endif diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/sap/EmmRegisteredPlmnSearch.c b/openair-cn/NAS/UE/EMM/SAP/EmmRegisteredPlmnSearch.c old mode 100644 new mode 100755 similarity index 99% rename from openair-cn/NAS/EURECOM-NAS/src/emm/sap/EmmRegisteredPlmnSearch.c rename to openair-cn/NAS/UE/EMM/SAP/EmmRegisteredPlmnSearch.c index d659fc082e..c4c053515d --- a/openair-cn/NAS/EURECOM-NAS/src/emm/sap/EmmRegisteredPlmnSearch.c +++ b/openair-cn/NAS/UE/EMM/SAP/EmmRegisteredPlmnSearch.c @@ -47,7 +47,6 @@ Description Implements the EPS Mobility Management procedures executed *****************************************************************************/ -#ifdef NAS_UE #include "emm_fsm.h" #include "commonDef.h" @@ -125,4 +124,3 @@ int EmmRegisteredPlmnSearch_xxx(const emm_reg_t *evt) /********************* L O C A L F U N C T I O N S *********************/ /****************************************************************************/ -#endif diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/sap/EmmRegisteredUpdateNeeded.c b/openair-cn/NAS/UE/EMM/SAP/EmmRegisteredUpdateNeeded.c old mode 100644 new mode 100755 similarity index 99% rename from openair-cn/NAS/EURECOM-NAS/src/emm/sap/EmmRegisteredUpdateNeeded.c rename to openair-cn/NAS/UE/EMM/SAP/EmmRegisteredUpdateNeeded.c index 10a9e9b053..ead9ce7aa8 --- a/openair-cn/NAS/EURECOM-NAS/src/emm/sap/EmmRegisteredUpdateNeeded.c +++ b/openair-cn/NAS/UE/EMM/SAP/EmmRegisteredUpdateNeeded.c @@ -53,7 +53,6 @@ Description Implements the EPS Mobility Management procedures executed *****************************************************************************/ -#ifdef NAS_UE #include "emm_fsm.h" #include "commonDef.h" @@ -103,4 +102,3 @@ int EmmRegisteredUpdateNeeded(const emm_reg_t *evt) /********************* L O C A L F U N C T I O N S *********************/ /****************************************************************************/ -#endif diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/sap/EmmServiceRequestInitiated.c b/openair-cn/NAS/UE/EMM/SAP/EmmServiceRequestInitiated.c old mode 100644 new mode 100755 similarity index 99% rename from openair-cn/NAS/EURECOM-NAS/src/emm/sap/EmmServiceRequestInitiated.c rename to openair-cn/NAS/UE/EMM/SAP/EmmServiceRequestInitiated.c index 464d9ba54f..3d9b593dbc --- a/openair-cn/NAS/EURECOM-NAS/src/emm/sap/EmmServiceRequestInitiated.c +++ b/openair-cn/NAS/UE/EMM/SAP/EmmServiceRequestInitiated.c @@ -49,7 +49,6 @@ Description Implements the EPS Mobility Management procedures executed *****************************************************************************/ -#ifdef NAS_UE #include "emm_fsm.h" #include "commonDef.h" @@ -99,4 +98,3 @@ int EmmServiceRequestInitiated(const emm_reg_t *evt) /********************* L O C A L F U N C T I O N S *********************/ /****************************************************************************/ -#endif diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/sap/EmmTrackingAreaUpdatingInitiated.c b/openair-cn/NAS/UE/EMM/SAP/EmmTrackingAreaUpdatingInitiated.c old mode 100644 new mode 100755 similarity index 99% rename from openair-cn/NAS/EURECOM-NAS/src/emm/sap/EmmTrackingAreaUpdatingInitiated.c rename to openair-cn/NAS/UE/EMM/SAP/EmmTrackingAreaUpdatingInitiated.c index ab6ba17f36..7adb4e12fa --- a/openair-cn/NAS/EURECOM-NAS/src/emm/sap/EmmTrackingAreaUpdatingInitiated.c +++ b/openair-cn/NAS/UE/EMM/SAP/EmmTrackingAreaUpdatingInitiated.c @@ -49,7 +49,6 @@ Description Implements the EPS Mobility Management procedures executed *****************************************************************************/ -#ifdef NAS_UE #include "emm_fsm.h" #include "commonDef.h" @@ -99,4 +98,3 @@ int EmmTrackingAreaUpdatingInitiated(const emm_reg_t *evt) /********************* L O C A L F U N C T I O N S *********************/ /****************************************************************************/ -#endif diff --git a/openair-cn/NAS/UE/EMM/SAP/emm_as.c b/openair-cn/NAS/UE/EMM/SAP/emm_as.c new file mode 100755 index 0000000000..433b4e5304 --- /dev/null +++ b/openair-cn/NAS/UE/EMM/SAP/emm_as.c @@ -0,0 +1,1486 @@ +/******************************************************************************* + OpenAirInterface + Copyright(c) 1999 - 2014 Eurecom + + OpenAirInterface is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + + OpenAirInterface is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with OpenAirInterface.The full GNU General Public License is + included in this distribution in the file called "COPYING". If not, + see . + + Contact Information + OpenAirInterface Admin: openair_admin@eurecom.fr + OpenAirInterface Tech : openair_tech@eurecom.fr + OpenAirInterface Dev : openair4g-devel@eurecom.fr + + Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. + + *******************************************************************************/ +/***************************************************************************** + +Source emm_as.c + +Version 0.1 + +Date 2012/10/16 + +Product NAS stack + +Subsystem EPS Mobility Management + +Author Frederic Maurel + +Description Defines the EMMAS Service Access Point that provides + services to the EPS Mobility Management for NAS message + transfer to/from the Access Stratum sublayer. + +*****************************************************************************/ + +#include "emm_as.h" +#include "emm_recv.h" +#include "emm_send.h" +#include "emmData.h" +#include "commonDef.h" +#include "nas_log.h" + +#include "TLVDecoder.h" +#include "as_message.h" +#include "nas_message.h" + +#include "emm_cause.h" +#include "LowerLayer.h" + +#include // memset +#include // malloc, free + +#if defined(NAS_BUILT_IN_UE) +# include "nas_itti_messaging.h" +#endif +#include "msc.h" + +/****************************************************************************/ +/**************** E X T E R N A L D E F I N I T I O N S ****************/ +/****************************************************************************/ + +extern int emm_proc_plmn_selection_end(int found, tac_t tac, ci_t ci, AcT_t rat); + +extern int emm_proc_status(unsigned int ueid, int emm_cause); + +/****************************************************************************/ +/******************* L O C A L D E F I N I T I O N S *******************/ +/****************************************************************************/ + +/* + * String representation of EMMAS-SAP primitives + */ +static const char *_emm_as_primitive_str[] = { + "EMMAS_SECURITY_REQ", + "EMMAS_SECURITY_IND", + "EMMAS_SECURITY_RES", + "EMMAS_SECURITY_REJ", + "EMMAS_ESTABLISH_REQ", + "EMMAS_ESTABLISH_CNF", + "EMMAS_ESTABLISH_REJ", + "EMMAS_RELEASE_REQ", + "EMMAS_RELEASE_IND", + "EMMAS_DATA_REQ", + "EMMAS_DATA_IND", + "EMMAS_PAGE_IND", + "EMMAS_STATUS_IND", + "EMMAS_CELL_INFO_REQ", + "EMMAS_CELL_INFO_RES", + "EMMAS_CELL_INFO_IND", +}; + +/* + * Functions executed to process EMM procedures upon receiving + * data from the network + */ +static int _emm_as_recv(unsigned int ueid, const char *msg, int len, + int *emm_cause); + +static int _emm_as_establish_cnf(const emm_as_establish_t *msg, int *emm_cause); +static int _emm_as_establish_rej(void); +static int _emm_as_release_ind(const emm_as_release_t *msg); +static int _emm_as_page_ind(const emm_as_page_t *msg); + + +static int _emm_as_cell_info_res(const emm_as_cell_info_t *msg); +static int _emm_as_cell_info_ind(const emm_as_cell_info_t *msg); + +static int _emm_as_data_ind(const emm_as_data_t *msg, int *emm_cause); + +/* + * Functions executed to send data to the network when requested + * within EMM procedure processing + */ +static EMM_msg *_emm_as_set_header(nas_message_t *msg, + const emm_as_security_data_t *security); +static int +_emm_as_encode( + as_nas_info_t *info, + nas_message_t *msg, + int length, + emm_security_context_t *emm_security_context); + +static int _emm_as_encrypt( + as_nas_info_t *info, + const nas_message_security_header_t *header, + const char *buffer, + int length, + emm_security_context_t *emm_security_context); + +static int _emm_as_send(const emm_as_t *msg); + +static int _emm_as_security_res(const emm_as_security_t *, + ul_info_transfer_req_t *); +static int _emm_as_establish_req(const emm_as_establish_t *, + nas_establish_req_t *); + + +static int _emm_as_cell_info_req(const emm_as_cell_info_t *, cell_info_req_t *); + +static int _emm_as_data_req(const emm_as_data_t *, ul_info_transfer_req_t *); +static int _emm_as_status_ind(const emm_as_status_t *, ul_info_transfer_req_t *); +static int _emm_as_release_req(const emm_as_release_t *, nas_release_req_t *); + +/****************************************************************************/ +/****************** E X P O R T E D F U N C T I O N S ******************/ +/****************************************************************************/ + +/**************************************************************************** + ** ** + ** Name: emm_as_initialize() ** + ** ** + ** Description: Initializes the EMMAS Service Access Point ** + ** ** + ** Inputs: None ** + ** Others: None ** + ** ** + ** Outputs: None ** + ** Return: None ** + ** Others: NONE ** + ** ** + ***************************************************************************/ +void emm_as_initialize(void) +{ + LOG_FUNC_IN; + + /* TODO: Initialize the EMMAS-SAP */ + + LOG_FUNC_OUT; +} + +/**************************************************************************** + ** ** + ** Name: emm_as_send() ** + ** ** + ** Description: Processes the EMMAS Service Access Point primitive. ** + ** ** + ** Inputs: msg: The EMMAS-SAP primitive to process ** + ** Others: None ** + ** ** + ** Outputs: None ** + ** Return: RETURNok, RETURNerror ** + ** Others: None ** + ** ** + ***************************************************************************/ +int emm_as_send(const emm_as_t *msg) +{ + LOG_FUNC_IN; + + int rc; + int emm_cause = EMM_CAUSE_SUCCESS; + emm_as_primitive_t primitive = msg->primitive; + + uint32_t ueid = 0; + + LOG_TRACE(INFO, "EMMAS-SAP - Received primitive %s (%d)", + _emm_as_primitive_str[primitive - _EMMAS_START - 1], primitive); + + switch (primitive) { + case _EMMAS_DATA_IND: + rc = _emm_as_data_ind(&msg->u.data, &emm_cause); + ueid = msg->u.data.ueid; + break; + + + case _EMMAS_ESTABLISH_CNF: + rc = _emm_as_establish_cnf(&msg->u.establish, &emm_cause); + break; + + case _EMMAS_ESTABLISH_REJ: + rc = _emm_as_establish_rej(); + break; + + case _EMMAS_RELEASE_IND: + rc = _emm_as_release_ind(&msg->u.release); + break; + + case _EMMAS_PAGE_IND: + rc = _emm_as_page_ind(&msg->u.page); + break; + + case _EMMAS_CELL_INFO_RES: + rc = _emm_as_cell_info_res(&msg->u.cell_info); + break; + + case _EMMAS_CELL_INFO_IND: + rc = _emm_as_cell_info_ind(&msg->u.cell_info); + break; + + default: + /* Other primitives are forwarded to the Access Stratum */ + rc = _emm_as_send(msg); + + if (rc != RETURNok) { + LOG_TRACE(ERROR, "EMMAS-SAP - " + "Failed to process primitive %s (%d)", + _emm_as_primitive_str[primitive - _EMMAS_START - 1], + primitive); + LOG_FUNC_RETURN (RETURNerror); + } + + break; + } + + /* Handle decoding errors */ + if (emm_cause != EMM_CAUSE_SUCCESS) { + /* Ignore received message that is too short to contain a complete + * message type information element */ + if (rc == TLV_DECODE_BUFFER_TOO_SHORT) { + LOG_FUNC_RETURN (RETURNok); + } + /* Ignore received message that contains not supported protocol + * discriminator */ + else if (rc == TLV_DECODE_PROTOCOL_NOT_SUPPORTED) { + LOG_FUNC_RETURN (RETURNok); + } else if (rc == TLV_DECODE_WRONG_MESSAGE_TYPE) { + emm_cause = EMM_CAUSE_MESSAGE_TYPE_NOT_IMPLEMENTED; + } + + /* EMM message processing failed */ + LOG_TRACE(WARNING, "EMMAS-SAP - Received EMM message is not valid " + "(cause=%d)", emm_cause); + /* Return an EMM status message */ + rc = emm_proc_status(ueid, emm_cause); + } + + if (rc != RETURNok) { + LOG_TRACE(ERROR, "EMMAS-SAP - Failed to process primitive %s (%d)", + _emm_as_primitive_str[primitive - _EMMAS_START - 1], + primitive); + } + + LOG_FUNC_RETURN (rc); +} + +/****************************************************************************/ +/********************* L O C A L F U N C T I O N S *********************/ +/****************************************************************************/ + +/* + * -------------------------------------------------------------------------- + * Functions executed to process EMM procedures upon receiving data from the + * network + * -------------------------------------------------------------------------- + */ + +/**************************************************************************** + ** ** + ** Name: _emm_as_recv() ** + ** ** + ** Description: Decodes and processes the EPS Mobility Management message ** + ** received from the Access Stratum ** + ** ** + ** Inputs: ueid: UE lower layer identifier ** + ** msg: The EMM message to process ** + ** len: The length of the EMM message ** + ** Others: None ** + ** ** + ** Outputs: emm_cause: EMM cause code ** + ** Return: RETURNok, RETURNerror ** + ** Others: None ** + ** ** + ***************************************************************************/ +static int _emm_as_recv(unsigned int ueid, const char *msg, int len, + int *emm_cause) +{ + LOG_FUNC_IN; + + int decoder_rc; + int rc = RETURNerror; + + LOG_TRACE(INFO, "EMMAS-SAP - Received EMM message (length=%d)", len); + + nas_message_t nas_msg; + memset(&nas_msg, 0 , sizeof(nas_message_t)); + + emm_security_context_t *security = NULL; /* Current EPS NAS security context */ + + security = _emm_data.security; + + /* Decode the received message */ + decoder_rc = nas_message_decode(msg, &nas_msg, len, security); + + if (decoder_rc < 0) { + LOG_TRACE(WARNING, "EMMAS-SAP - Failed to decode NAS message " + "(err=%d)", decoder_rc); + *emm_cause = EMM_CAUSE_PROTOCOL_ERROR; + LOG_FUNC_RETURN (decoder_rc); + } + + /* Process NAS message */ + EMM_msg *emm_msg = &nas_msg.plain.emm; + + switch (emm_msg->header.message_type) { + case EMM_STATUS: + rc = emm_recv_status(ueid, &emm_msg->emm_status, emm_cause); + break; + + case IDENTITY_REQUEST: + rc = emm_recv_identity_request(&emm_msg->identity_request, + emm_cause); + break; + + case AUTHENTICATION_REQUEST: + rc = emm_recv_authentication_request( + &emm_msg->authentication_request, + emm_cause); + break; + + case AUTHENTICATION_REJECT: + rc = emm_recv_authentication_reject( + &emm_msg->authentication_reject, + emm_cause); + break; + + case SECURITY_MODE_COMMAND: + rc = emm_recv_security_mode_command( + &emm_msg->security_mode_command, + emm_cause); + break; + + case DETACH_ACCEPT: + rc = emm_recv_detach_accept(&emm_msg->detach_accept, emm_cause); + break; + + + case TRACKING_AREA_UPDATE_ACCEPT: + case TRACKING_AREA_UPDATE_REJECT: + case SERVICE_REJECT: + case GUTI_REALLOCATION_COMMAND: + case EMM_INFORMATION: + case DOWNLINK_NAS_TRANSPORT: + case CS_SERVICE_NOTIFICATION: + /* TODO */ + break; + + default: + LOG_TRACE(WARNING, "EMMAS-SAP - EMM message 0x%x is not valid", + emm_msg->header.message_type); + *emm_cause = EMM_CAUSE_MESSAGE_TYPE_NOT_COMPATIBLE; + break; + } + + LOG_FUNC_RETURN (rc); +} + +/**************************************************************************** + ** ** + ** Name: _emm_as_data_ind() ** + ** ** + ** Description: Processes the EMMAS-SAP data transfer indication ** + ** primitive ** + ** ** + ** EMMAS-SAP - AS->EMM: DATA_IND - Data transfer procedure ** + ** ** + ** Inputs: msg: The EMMAS-SAP primitive to process ** + ** Others: None ** + ** ** + ** Outputs: emm_cause: EMM cause code ** + ** Return: RETURNok, RETURNerror ** + ** Others: None ** + ** ** + ***************************************************************************/ +static int _emm_as_data_ind(const emm_as_data_t *msg, int *emm_cause) +{ + LOG_FUNC_IN; + + int rc = RETURNerror; + + LOG_TRACE(INFO, "EMMAS-SAP - Received AS data transfer indication " + "(ueid=%u, delivered=%s, length=%d)", msg->ueid, + (msg->delivered)? "TRUE" : "FALSE", msg->NASmsg.length); + + if (msg->delivered) { + if (msg->NASmsg.length > 0) { + /* Process the received NAS message */ + char *plain_msg = (char *)malloc(msg->NASmsg.length); + + if (plain_msg) { + nas_message_security_header_t header; + emm_security_context_t *security = NULL; /* Current EPS NAS security context */ + + memset(&header, 0, sizeof(header)); + /* Decrypt the received security protected message */ + + security = _emm_data.security; + int bytes = nas_message_decrypt((char *)(msg->NASmsg.value), + plain_msg, + &header, + msg->NASmsg.length, + security + ); + + if (bytes < 0) { + /* Failed to decrypt the message */ + *emm_cause = EMM_CAUSE_PROTOCOL_ERROR; + LOG_FUNC_RETURN (bytes); + } else if (header.protocol_discriminator == + EPS_MOBILITY_MANAGEMENT_MESSAGE) { + /* Process EMM data */ + rc = _emm_as_recv(msg->ueid, plain_msg, bytes, emm_cause); + } else if (header.protocol_discriminator == + EPS_SESSION_MANAGEMENT_MESSAGE) { + const OctetString data = {bytes, (uint8_t *)plain_msg}; + /* Foward ESM data to EPS session management */ + rc = lowerlayer_data_ind(msg->ueid, &data); + } + + free(plain_msg); + } + } else { + /* Process successfull lower layer transfer indication */ + rc = lowerlayer_success(msg->ueid); + } + } else { + /* Process lower layer transmission failure of NAS message */ + rc = lowerlayer_failure(msg->ueid); + } + + LOG_FUNC_RETURN (rc); +} + +/**************************************************************************** + ** ** + ** Name: _emm_as_establish_cnf() ** + ** ** + ** Description: Processes the EMMAS-SAP connection establish confirmation ** + ** primitive ** + ** ** + ** EMMAS-SAP - AS->EMM: ESTABLISH_CNF - NAS signalling connection ** + ** ** + ** Inputs: msg: The EMMAS-SAP primitive to process ** + ** Others: None ** + ** ** + ** Outputs: emm_cause: EMM cause code ** + ** Return: RETURNok, RETURNerror ** + ** Others: None ** + ** ** + ***************************************************************************/ +static int _emm_as_establish_cnf(const emm_as_establish_t *msg, + int *emm_cause) +{ + LOG_FUNC_IN; + + int decoder_rc; + int rc = RETURNerror; + + LOG_TRACE(INFO, "EMMAS-SAP - Received AS connection establish confirm"); + + if (msg->NASmsg.length > 0) { + /* The NAS signalling connection is established */ + (void) lowerlayer_establish(); + } else { + /* The initial NAS message has been successfully delivered to + * lower layers */ + rc = lowerlayer_success(0); + LOG_FUNC_RETURN (rc); + } + + nas_message_t nas_msg; + memset(&nas_msg, 0 , sizeof(nas_message_t)); + + /* Decode initial NAS message */ + decoder_rc = nas_message_decode((char *)(msg->NASmsg.value), + &nas_msg, + msg->NASmsg.length, + _emm_data.security); + + if (decoder_rc < 0) { + LOG_TRACE(WARNING, "EMMAS-SAP - Failed to decode initial NAS message" + "(err=%d)", decoder_rc); + *emm_cause = EMM_CAUSE_PROTOCOL_ERROR; + LOG_FUNC_RETURN (decoder_rc); + } + + /* Process initial NAS message */ + EMM_msg *emm_msg = &nas_msg.plain.emm; + + switch (emm_msg->header.message_type) { + case ATTACH_ACCEPT: + rc = emm_recv_attach_accept(&emm_msg->attach_accept, emm_cause); + break; + + case ATTACH_REJECT: + rc = emm_recv_attach_reject(&emm_msg->attach_reject, emm_cause); + break; + + case DETACH_ACCEPT: + break; + + case TRACKING_AREA_UPDATE_ACCEPT: + break; + + default: + LOG_TRACE(WARNING, "EMMAS-SAP - Initial NAS message 0x%x is " + "not valid", emm_msg->header.message_type); + *emm_cause = EMM_CAUSE_MESSAGE_TYPE_NOT_COMPATIBLE; + break; + } + + LOG_FUNC_RETURN (rc); +} + +/**************************************************************************** + ** ** + ** Name: _emm_as_establish_rej() ** + ** ** + ** Description: Processes the EMMAS-SAP connection establish reject ** + ** primitive ** + ** ** + ** EMMAS-SAP - AS->EMM: ESTABLISH_REJ - NAS signalling connection ** + ** ** + ** Inputs: None ** + ** Others: None ** + ** ** + ** Outputs: None ** + ** Return: RETURNok, RETURNerror ** + ** Others: None ** + ** ** + ***************************************************************************/ +static int _emm_as_establish_rej(void) +{ + LOG_FUNC_IN; + + int rc; + + LOG_TRACE(INFO, "EMMAS-SAP - Received AS initial NAS message transmission " + "failure"); + + /* Process lower layer transmission failure of initial NAS message */ + rc = lowerlayer_failure(0); + + LOG_FUNC_RETURN (rc); +} + +/**************************************************************************** + ** ** + ** Name: _emm_as_release_ind() ** + ** ** + ** Description: Processes the EMMAS-SAP connection release indication ** + ** primitive ** + ** ** + ** EMMAS-SAP - AS->EMM: RELEASE_IND - NAS signalling release procedure ** + ** ** + ** Inputs: msg: The EMMAS-SAP primitive to process ** + ** Others: None ** + ** ** + ** Outputs: None ** + ** Return: RETURNok, RETURNerror ** + ** Others: None ** + ** ** + ***************************************************************************/ +static int _emm_as_release_ind(const emm_as_release_t *msg) +{ + LOG_FUNC_IN; + + int rc = RETURNok; + + LOG_TRACE(INFO, "EMMAS-SAP - Received AS connection release indication " + "(cause=%d)", msg->cause); + + /* Process NAS signalling connection release indication */ + rc = lowerlayer_release(msg->cause); + + LOG_FUNC_RETURN (rc); +} + +/**************************************************************************** + ** ** + ** Name: _emm_as_page_ind() ** + ** ** + ** Description: Processes the EMMAS-SAP paging data indication primitive ** + ** ** + ** EMMAS-SAP - AS->EMM: PAGE_IND - Paging data procedure ** + ** ** + ** Inputs: msg: The EMMAS-SAP primitive to process ** + ** Others: None ** + ** ** + ** Outputs: None ** + ** Return: RETURNok, RETURNerror ** + ** Others: None ** + ** ** + ***************************************************************************/ +static int _emm_as_page_ind(const emm_as_page_t *msg) +{ + LOG_FUNC_IN; + + int rc = RETURNok; + + LOG_TRACE(INFO, "EMMAS-SAP - Received AS paging data indication"); + + /* TODO */ + + LOG_FUNC_RETURN (rc); +} + + + + +/**************************************************************************** + ** ** + ** Name: _emm_as_cell_info_res() ** + ** ** + ** Description: Processes the EMMAS-SAP cell information response ** + ** primitive ** + ** ** + ** EMMAS-SAP - AS->EMM: CELL_INFO_RES - PLMN and cell selection procedure ** + ** The NAS received a response to cell selection request pre- ** + ** viously sent to the Access-Startum. If a suitable cell is ** + ** found to serve the selected PLMN with associated Radio Ac- ** + ** cess Technologies, this cell is selected to camp on. ** + ** ** + ** Inputs: msg: The EMMAS-SAP primitive to process ** + ** Others: None ** + ** ** + ** Outputs: None ** + ** Return: RETURNok, RETURNerror ** + ** Others: None ** + ** ** + ***************************************************************************/ +static int _emm_as_cell_info_res(const emm_as_cell_info_t *msg) +{ + LOG_FUNC_IN; + + int rc = RETURNok; + + LOG_TRACE(INFO, "EMMAS-SAP - Received AS cell information response"); + + int AcT = NET_ACCESS_EUTRAN; + + if (msg->found == TRUE) { + /* Get the first supported access technology */ + while (AcT != NET_ACCESS_UNAVAILABLE) { + if (msg->rat & (1 << AcT)) { + break; + } + + AcT -= 1; + } + } + + /* Notify EMM that a cell has been found */ + rc = emm_proc_plmn_selection_end(msg->found, msg->tac, msg->cellID, AcT); + + LOG_FUNC_RETURN (rc); +} + +/**************************************************************************** + ** ** + ** Name: _emm_as_cell_info_ind() ** + ** ** + ** Description: Processes the EMMAS-SAP cell information indication ** + ** primitive ** + ** ** + ** EMMAS-SAP - AS->EMM: CELL_INFO_IND - PLMN and cell selection procedure ** + ** ** + ** Inputs: msg: The EMMAS-SAP primitive to process ** + ** Others: None ** + ** ** + ** Outputs: None ** + ** Return: RETURNok, RETURNerror ** + ** Others: None ** + ** ** + ***************************************************************************/ +static int _emm_as_cell_info_ind(const emm_as_cell_info_t *msg) +{ + LOG_FUNC_IN; + + int rc = RETURNok; + + LOG_TRACE(INFO, "EMMAS-SAP - Received AS cell information indication"); + + /* TODO */ + + LOG_FUNC_RETURN (rc); +} + +/* + * -------------------------------------------------------------------------- + * Functions executed to send data to the network when requested within EMM + * procedure processing + * -------------------------------------------------------------------------- + */ + +/**************************************************************************** + ** ** + ** Name: _emm_as_set_header() ** + ** ** + ** Description: Setup the security header of the given NAS message ** + ** ** + ** Inputs: security: The NAS security data to use ** + ** Others: None ** + ** ** + ** Outputs: msg: The NAS message ** + ** Return: Pointer to the plain NAS message to be se- ** + ** curity protected if setting of the securi- ** + ** ty header succeed; ** + ** NULL pointer otherwise ** + ** Others: None ** + ** ** + ***************************************************************************/ +static EMM_msg *_emm_as_set_header(nas_message_t *msg, + const emm_as_security_data_t *security) +{ + LOG_FUNC_IN; + + msg->header.protocol_discriminator = EPS_MOBILITY_MANAGEMENT_MESSAGE; + + if ( security && (security->ksi != EMM_AS_NO_KEY_AVAILABLE) ) { + /* A valid EPS security context exists */ + if (security->is_new) { + /* New EPS security context is taken into use */ + if (security->k_int) { + if (security->k_enc) { + /* NAS integrity and cyphering keys are available */ + msg->header.security_header_type = + SECURITY_HEADER_TYPE_INTEGRITY_PROTECTED_CYPHERED_NEW; + } else { + /* NAS integrity key only is available */ + msg->header.security_header_type = + SECURITY_HEADER_TYPE_INTEGRITY_PROTECTED_NEW; + } + + LOG_FUNC_RETURN (&msg->security_protected.plain.emm); + } + } else if (security->k_int) { + if (security->k_enc) { + /* NAS integrity and cyphering keys are available */ + msg->header.security_header_type = + SECURITY_HEADER_TYPE_INTEGRITY_PROTECTED_CYPHERED; + } else { + /* NAS integrity key only is available */ + msg->header.security_header_type = + SECURITY_HEADER_TYPE_INTEGRITY_PROTECTED; + } + + LOG_FUNC_RETURN (&msg->security_protected.plain.emm); + } else { + /* No valid EPS security context exists */ + msg->header.security_header_type = SECURITY_HEADER_TYPE_NOT_PROTECTED; + LOG_FUNC_RETURN (&msg->plain.emm); + } + } else { + /* No valid EPS security context exists */ + msg->header.security_header_type = SECURITY_HEADER_TYPE_NOT_PROTECTED; + LOG_FUNC_RETURN (&msg->plain.emm); + } + + /* A valid EPS security context exists but NAS integrity key + * is not available */ + LOG_FUNC_RETURN (NULL); +} + +/**************************************************************************** + ** ** + ** Name: _emm_as_encode() ** + ** ** + ** Description: Encodes NAS message into NAS information container ** + ** ** + ** Inputs: msg: The NAS message to encode ** + ** length: The maximum length of the NAS message ** + ** Others: None ** + ** ** + ** Outputs: info: The NAS information container ** + ** msg: The NAS message to encode ** + ** Return: The number of bytes successfully encoded ** + ** Others: None ** + ** ** + ***************************************************************************/ +static int +_emm_as_encode( + as_nas_info_t *info, + nas_message_t *msg, + int length, + emm_security_context_t *emm_security_context) +{ + LOG_FUNC_IN; + + int bytes = 0; + + if (msg->header.security_header_type != SECURITY_HEADER_TYPE_NOT_PROTECTED) { + emm_msg_header_t *header = &msg->security_protected.plain.emm.header; + /* Expand size of protected NAS message */ + length += NAS_MESSAGE_SECURITY_HEADER_SIZE; + /* Set header of plain NAS message */ + header->protocol_discriminator = EPS_MOBILITY_MANAGEMENT_MESSAGE; + header->security_header_type = SECURITY_HEADER_TYPE_NOT_PROTECTED; + } + + /* Allocate memory to the NAS information container */ + info->data = (Byte_t *)malloc(length * sizeof(Byte_t)); + + if (info->data != NULL) { + /* Encode the NAS message */ + bytes = nas_message_encode( + (char *)(info->data), + msg, + length, + emm_security_context); + + if (bytes > 0) { + info->length = bytes; + } else { + free(info->data); + info->length = 0; + info->data = NULL; + } + } + + LOG_FUNC_RETURN (bytes); +} + +/**************************************************************************** + ** ** + ** Name: _emm_as_encrypt() ** + ** ** + ** Description: Encryts NAS message into NAS information container ** + ** ** + ** Inputs: header: The Security header in used ** + ** msg: The NAS message to encrypt ** + ** length: The maximum length of the NAS message ** + ** Others: None ** + ** ** + ** Outputs: info: The NAS information container ** + ** Return: The number of bytes successfully encrypted ** + ** Others: None ** + ** ** + ***************************************************************************/ +static int +_emm_as_encrypt( + as_nas_info_t *info, + const nas_message_security_header_t *header, + const char *msg, + int length, + emm_security_context_t *emm_security_context) +{ + LOG_FUNC_IN; + + int bytes = 0; + + if (header->security_header_type != SECURITY_HEADER_TYPE_NOT_PROTECTED) { + /* Expand size of protected NAS message */ + length += NAS_MESSAGE_SECURITY_HEADER_SIZE; + } + + /* Allocate memory to the NAS information container */ + info->data = (Byte_t *)malloc(length * sizeof(Byte_t)); + + if (info->data != NULL) { + /* Encrypt the NAS information message */ + bytes = nas_message_encrypt( + msg, + (char *)(info->data), + header, + length, + emm_security_context); + + if (bytes > 0) { + info->length = bytes; + } else { + free(info->data); + info->length = 0; + info->data = NULL; + } + } + + LOG_FUNC_RETURN (bytes); +} + +/**************************************************************************** + ** ** + ** Name: _emm_as_send() ** + ** ** + ** Description: Builds NAS message according to the given EMMAS Service ** + ** Access Point primitive and sends it to the Access Stratum ** + ** sublayer ** + ** ** + ** Inputs: msg: The EMMAS-SAP primitive to be sent ** + ** Others: None ** + ** ** + ** Outputs: None ** + ** Return: RETURNok, RETURNerror ** + ** Others: None ** + ** ** + ***************************************************************************/ +static int _emm_as_send(const emm_as_t *msg) +{ + LOG_FUNC_IN; + + as_message_t as_msg; + memset(&as_msg, 0 , sizeof(as_message_t)); + + switch (msg->primitive) { + case _EMMAS_DATA_REQ: + as_msg.msgID = _emm_as_data_req( + &msg->u.data, + &as_msg.msg.ul_info_transfer_req); + break; + + case _EMMAS_STATUS_IND: + as_msg.msgID = _emm_as_status_ind( + &msg->u.status, + &as_msg.msg.ul_info_transfer_req); + break; + + case _EMMAS_RELEASE_REQ: + as_msg.msgID = _emm_as_release_req( + &msg->u.release, + &as_msg.msg.nas_release_req); + break; + + + case _EMMAS_SECURITY_RES: + as_msg.msgID = _emm_as_security_res( + &msg->u.security, + &as_msg.msg.ul_info_transfer_req); + break; + + case _EMMAS_ESTABLISH_REQ: + as_msg.msgID = _emm_as_establish_req( + &msg->u.establish, + &as_msg.msg.nas_establish_req); + break; + + + case _EMMAS_CELL_INFO_REQ: + as_msg.msgID = _emm_as_cell_info_req(&msg->u.cell_info, + &as_msg.msg.cell_info_req); + /* + * TODO: NAS may provide a list of equivalent PLMNs, if available, + * that AS shall use for cell selection and cell reselection. + */ + break; + + default: + as_msg.msgID = 0; + break; + } + + /* Send the message to the Access Stratum or S1AP in case of MME */ + if (as_msg.msgID > 0) { + +# if defined(NAS_BUILT_IN_UE) + LOG_TRACE(DEBUG, "EMMAS-SAP - " + "Sending msg with id 0x%x, primitive %s (%d) to RRC layer for transmission", + as_msg.msgID, + _emm_as_primitive_str[msg->primitive - _EMMAS_START - 1], + msg->primitive); + + switch (as_msg.msgID) { + case AS_CELL_INFO_REQ: { + nas_itti_cell_info_req( + as_msg.msg.cell_info_req.plmnID, + as_msg.msg.cell_info_req.rat); + LOG_FUNC_RETURN (RETURNok); + } + break; + + case AS_NAS_ESTABLISH_REQ: { + nas_itti_nas_establish_req( + as_msg.msg.nas_establish_req.cause, + as_msg.msg.nas_establish_req.type, + as_msg.msg.nas_establish_req.s_tmsi, + as_msg.msg.nas_establish_req.plmnID, + as_msg.msg.nas_establish_req.initialNasMsg.data, + as_msg.msg.nas_establish_req.initialNasMsg.length); + LOG_FUNC_RETURN (RETURNok); + } + break; + + case AS_UL_INFO_TRANSFER_REQ: { + nas_itti_ul_data_req( + as_msg.msg.ul_info_transfer_req.UEid, + as_msg.msg.ul_info_transfer_req.nasMsg.data, + as_msg.msg.ul_info_transfer_req.nasMsg.length); + LOG_FUNC_RETURN (RETURNok); + } + break; + + case AS_RAB_ESTABLISH_RSP: { + nas_itti_rab_establish_rsp( + as_msg.msg.rab_establish_rsp.s_tmsi, + as_msg.msg.rab_establish_rsp.rabID, + as_msg.msg.rab_establish_rsp.errCode); + LOG_FUNC_RETURN (RETURNok); + } + break; + + default: + break; + } + +# else + int bytes = as_message_send(&as_msg); + + if (bytes > 0) { + LOG_FUNC_RETURN (RETURNok); + } + +# endif + } + + LOG_FUNC_RETURN (RETURNerror); +} + +/**************************************************************************** + ** ** + ** Name: _emm_as_data_req() ** + ** ** + ** Description: Processes the EMMAS-SAP data transfer request ** + ** primitive ** + ** ** + ** EMMAS-SAP - EMM->AS: DATA_REQ - Data transfer procedure ** + ** ** + ** Inputs: msg: The EMMAS-SAP primitive to process ** + ** Others: None ** + ** ** + ** Outputs: as_msg: The message to send to the AS ** + ** Return: The identifier of the AS message ** + ** Others: None ** + ** ** + ***************************************************************************/ +static int _emm_as_data_req(const emm_as_data_t *msg, + ul_info_transfer_req_t *as_msg) +{ + LOG_FUNC_IN; + + int size = 0; + int is_encoded = FALSE; + + LOG_TRACE(INFO, "EMMAS-SAP - Send AS data transfer request"); + + nas_message_t nas_msg; + memset(&nas_msg, 0 , sizeof(nas_message_t)); + + /* Setup the AS message */ + if (msg->guti) { + as_msg->s_tmsi.MMEcode = msg->guti->gummei.MMEcode; + as_msg->s_tmsi.m_tmsi = msg->guti->m_tmsi; + } else { + as_msg->UEid = msg->ueid; + } + + /* Setup the NAS security header */ + EMM_msg *emm_msg = _emm_as_set_header(&nas_msg, &msg->sctx); + + /* Setup the NAS information message */ + if (emm_msg != NULL) switch (msg->NASinfo) { + + case EMM_AS_NAS_DATA_ATTACH: + size = emm_send_attach_complete(msg, &emm_msg->attach_complete); + break; + + case EMM_AS_NAS_DATA_DETACH: + size = emm_send_detach_request(msg, &emm_msg->detach_request); + break; + + + default: + /* Send other NAS messages as already encoded ESM messages */ + size = msg->NASmsg.length; + is_encoded = TRUE; + break; + } + + if (size > 0) { + int bytes; + emm_security_context_t *emm_security_context = NULL; + + emm_security_context = _emm_data.security; + + if (emm_security_context) { + + nas_msg.header.sequence_number = emm_security_context->ul_count.seq_num; + LOG_TRACE(DEBUG, + "Set nas_msg.header.sequence_number -> %u", + nas_msg.header.sequence_number); + } + + if (!is_encoded) { + /* Encode the NAS information message */ + bytes = _emm_as_encode(&as_msg->nasMsg, + &nas_msg, + size, + emm_security_context); + } else { + /* Encrypt the NAS information message */ + bytes = _emm_as_encrypt(&as_msg->nasMsg, + &nas_msg.header, + (char *)(msg->NASmsg.value), + size, + emm_security_context); + } + + if (bytes > 0) { + LOG_FUNC_RETURN (AS_UL_INFO_TRANSFER_REQ); + } + } + + LOG_FUNC_RETURN (0); +} + +/**************************************************************************** + ** ** + ** Name: _emm_as_status_ind() ** + ** ** + ** Description: Processes the EMMAS-SAP status indication primitive ** + ** ** + ** EMMAS-SAP - EMM->AS: STATUS_IND - EMM status report procedure ** + ** ** + ** Inputs: msg: The EMMAS-SAP primitive to process ** + ** Others: None ** + ** ** + ** Outputs: as_msg: The message to send to the AS ** + ** Return: The identifier of the AS message ** + ** Others: None ** + ** ** + ***************************************************************************/ +static int _emm_as_status_ind(const emm_as_status_t *msg, + ul_info_transfer_req_t *as_msg) +{ + LOG_FUNC_IN; + + int size = 0; + + LOG_TRACE(INFO, "EMMAS-SAP - Send AS status indication (cause=%d)", + msg->emm_cause); + + nas_message_t nas_msg; + memset(&nas_msg, 0 , sizeof(nas_message_t)); + + /* Setup the AS message */ + if (msg->guti) { + as_msg->s_tmsi.MMEcode = msg->guti->gummei.MMEcode; + as_msg->s_tmsi.m_tmsi = msg->guti->m_tmsi; + } else { + as_msg->UEid = msg->ueid; + } + + /* Setup the NAS security header */ + EMM_msg *emm_msg = _emm_as_set_header(&nas_msg, &msg->sctx); + + /* Setup the NAS information message */ + if (emm_msg != NULL) { + size = emm_send_status(msg, &emm_msg->emm_status); + } + + if (size > 0) { + emm_security_context_t *emm_security_context = NULL; + + emm_security_context = _emm_data.security; + + if (emm_security_context) { + + nas_msg.header.sequence_number = emm_security_context->ul_count.seq_num; + LOG_TRACE(DEBUG, + "Set nas_msg.header.sequence_number -> %u", + nas_msg.header.sequence_number); + } + + /* Encode the NAS information message */ + int bytes = _emm_as_encode( + &as_msg->nasMsg, + &nas_msg, + size, + emm_security_context); + + if (bytes > 0) { + LOG_FUNC_RETURN (AS_UL_INFO_TRANSFER_REQ); + } + } + + LOG_FUNC_RETURN (0); +} + +/**************************************************************************** + ** ** + ** Name: _emm_as_release_req() ** + ** ** + ** Description: Processes the EMMAS-SAP connection release request ** + ** primitive ** + ** ** + ** EMMAS-SAP - EMM->AS: RELEASE_REQ - NAS signalling release procedure ** + ** ** + ** Inputs: msg: The EMMAS-SAP primitive to process ** + ** Others: None ** + ** ** + ** Outputs: as_msg: The message to send to the AS ** + ** Return: The identifier of the AS message ** + ** Others: None ** + ** ** + ***************************************************************************/ +static int _emm_as_release_req(const emm_as_release_t *msg, + nas_release_req_t *as_msg) +{ + LOG_FUNC_IN; + + LOG_TRACE(INFO, "EMMAS-SAP - Send AS release request"); + + /* Setup the AS message */ + if (msg->guti) { + as_msg->s_tmsi.MMEcode = msg->guti->gummei.MMEcode; + as_msg->s_tmsi.m_tmsi = msg->guti->m_tmsi; + } else { + as_msg->UEid = msg->ueid; + } + + if (msg->cause == EMM_AS_CAUSE_AUTHENTICATION) { + as_msg->cause = AS_AUTHENTICATION_FAILURE; + } else if (msg->cause == EMM_AS_CAUSE_DETACH) { + as_msg->cause = AS_DETACH; + } + + LOG_FUNC_RETURN (AS_NAS_RELEASE_REQ); +} + +/**************************************************************************** + ** ** + ** Name: _emm_as_security_res() ** + ** ** + ** Description: Processes the EMMAS-SAP security response primitive ** + ** ** + ** EMMAS-SAP - EMM->AS: SECURITY_RES - Security mode control procedure ** + ** ** + ** Inputs: msg: The EMMAS-SAP primitive to process ** + ** Others: None ** + ** ** + ** Outputs: as_msg: The message to send to the AS ** + ** Return: The identifier of the AS message ** + ** Others: None ** + ** ** + ***************************************************************************/ +static int _emm_as_security_res(const emm_as_security_t *msg, + ul_info_transfer_req_t *as_msg) +{ + LOG_FUNC_IN; + + int size = 0; + + LOG_TRACE(INFO, "EMMAS-SAP - Send AS security response"); + + nas_message_t nas_msg; + memset(&nas_msg, 0 , sizeof(nas_message_t)); + + /* Setup the AS message */ + if (msg->guti) { + as_msg->s_tmsi.MMEcode = msg->guti->gummei.MMEcode; + as_msg->s_tmsi.m_tmsi = msg->guti->m_tmsi; + } + + /* Setup the NAS security header */ + EMM_msg *emm_msg = _emm_as_set_header(&nas_msg, &msg->sctx); + + /* Setup the NAS security message */ + if (emm_msg != NULL) switch (msg->msgType) { + case EMM_AS_MSG_TYPE_IDENT: + size = emm_send_identity_response( + msg, + &emm_msg->identity_response); + break; + + case EMM_AS_MSG_TYPE_AUTH: + if (msg->emm_cause != EMM_CAUSE_SUCCESS) { + size = emm_send_authentication_failure( + msg, + &emm_msg->authentication_failure); + } else { + size = emm_send_authentication_response( + msg, + &emm_msg->authentication_response); + } + + break; + + case EMM_AS_MSG_TYPE_SMC: + if (msg->emm_cause != EMM_CAUSE_SUCCESS) { + size = emm_send_security_mode_reject( + msg, + &emm_msg->security_mode_reject); + } else { + size = emm_send_security_mode_complete( + msg, + &emm_msg->security_mode_complete); + } + + break; + + default: + LOG_TRACE(WARNING, "EMMAS-SAP - Type of NAS security " + "message 0x%.2x is not valid", msg->msgType); + } + + if (size > 0) { + /* Encode the NAS security message */ + int bytes = _emm_as_encode(&as_msg->nasMsg, + &nas_msg, + size, + _emm_data.security); + + if (bytes > 0) { + LOG_FUNC_RETURN (AS_UL_INFO_TRANSFER_REQ); + } + } + + LOG_FUNC_RETURN (0); +} + +/**************************************************************************** + ** ** + ** Name: _emm_as_establish_req() ** + ** ** + ** Description: Processes the EMMAS-SAP connection establish request ** + ** primitive ** + ** ** + ** EMMAS-SAP - EMM->AS: ESTABLISH_REQ - NAS signalling connection ** + ** The NAS requests the AS to establish signalling connection ** + ** to tranfer initial NAS message to the network. ** + ** ** + ** Inputs: msg: The EMMAS-SAP primitive to process ** + ** Others: None ** + ** ** + ** Outputs: as_msg: The message to send to the AS ** + ** Return: The identifier of the AS message ** + ** Others: None ** + ** ** + ***************************************************************************/ +static int _emm_as_establish_req(const emm_as_establish_t *msg, + nas_establish_req_t *as_msg) +{ + LOG_FUNC_IN; + + int size = 0; + + LOG_TRACE(INFO, "EMMAS-SAP - Send AS connection establish request"); + + nas_message_t nas_msg; + memset(&nas_msg, 0 , sizeof(nas_message_t)); + + /* Setup the AS message */ + as_msg->cause = msg->RRCcause; + as_msg->type = msg->RRCtype; + as_msg->plmnID = *msg->plmnID; + + /* Derive the S-TMSI from the GUTI, if valid */ + if (msg->UEid.guti) { + as_msg->s_tmsi.MMEcode = msg->UEid.guti->gummei.MMEcode; + as_msg->s_tmsi.m_tmsi = msg->UEid.guti->m_tmsi; + } + + /* Setup the NAS security header */ + EMM_msg *emm_msg = _emm_as_set_header(&nas_msg, &msg->sctx); + + /* Setup the initial NAS information message */ + if (emm_msg != NULL) switch (msg->NASinfo) { + case EMM_AS_NAS_INFO_ATTACH: + size = emm_send_attach_request(msg, &emm_msg->attach_request); + break; + + case EMM_AS_NAS_INFO_DETACH: + size = emm_send_initial_detach_request(msg, + &emm_msg->detach_request); + break; + + case EMM_AS_NAS_INFO_TAU: + size = emm_send_initial_tau_request(msg, + &emm_msg->tracking_area_update_request); + break; + + case EMM_AS_NAS_INFO_SR: + size = emm_send_initial_sr_request(msg, + &emm_msg->service_request); + break; + + case EMM_AS_NAS_INFO_EXTSR: + size = emm_send_initial_extsr_request(msg, + &emm_msg->extended_service_request); + break; + + default: + LOG_TRACE(WARNING, "EMMAS-SAP - Type of initial NAS " + "message 0x%.2x is not valid", msg->NASinfo); + break; + } + + if (size > 0) { + /* Encode the initial NAS information message */ + int bytes = _emm_as_encode( + &as_msg->initialNasMsg, + &nas_msg, + size, + _emm_data.security); + + if (bytes > 0) { + LOG_FUNC_RETURN (AS_NAS_ESTABLISH_REQ); + } + } + + LOG_FUNC_RETURN (0); +} + + + +/**************************************************************************** + ** ** + ** Name: _emm_as_cell_info_req() ** + ** ** + ** Description: Processes the EMMAS-SAP cell information request ** + ** primitive ** + ** ** + ** EMMAS-SAP - EMM->AS: CELL_INFO_REQ - PLMN and cell selection procedure ** + ** The NAS requests the AS to select a cell belonging to the ** + ** selected PLMN with associated Radio Access Technologies. ** + ** ** + ** Inputs: msg: The EMMAS-SAP primitive to process ** + ** Others: None ** + ** ** + ** Outputs: as_msg: The message to send to the AS ** + ** Return: The identifier of the AS message ** + ** Others: None ** + ** ** + ***************************************************************************/ +static int _emm_as_cell_info_req(const emm_as_cell_info_t *msg, + cell_info_req_t *as_msg) +{ + LOG_FUNC_IN; + + LOG_TRACE(INFO, "EMMAS-SAP - Send AS cell information request"); + + as_msg->plmnID = msg->plmnIDs.plmn[0]; + as_msg->rat = msg->rat; + + LOG_FUNC_RETURN (AS_CELL_INFO_REQ); +} + diff --git a/openair-cn/NAS/UE/EMM/SAP/emm_as.h b/openair-cn/NAS/UE/EMM/SAP/emm_as.h new file mode 100755 index 0000000000..ca4fc449b7 --- /dev/null +++ b/openair-cn/NAS/UE/EMM/SAP/emm_as.h @@ -0,0 +1,72 @@ +/******************************************************************************* + OpenAirInterface + Copyright(c) 1999 - 2014 Eurecom + + OpenAirInterface is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + + OpenAirInterface is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with OpenAirInterface.The full GNU General Public License is + included in this distribution in the file called "COPYING". If not, + see . + + Contact Information + OpenAirInterface Admin: openair_admin@eurecom.fr + OpenAirInterface Tech : openair_tech@eurecom.fr + OpenAirInterface Dev : openair4g-devel@eurecom.fr + + Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. + + *******************************************************************************/ +/***************************************************************************** +Source emm_as.h + +Version 0.1 + +Date 2012/10/16 + +Product NAS stack + +Subsystem EPS Mobility Management + +Author Frederic Maurel + +Description Defines the EMMAS Service Access Point that provides + services to the EPS Mobility Management for NAS message + transfer to/from the Access Stratum sublayer. + +*****************************************************************************/ +#ifndef __EMM_AS_H__ +#define __EMM_AS_H__ + +#include "emm_asDef.h" + +/****************************************************************************/ +/********************* G L O B A L C O N S T A N T S *******************/ +/****************************************************************************/ + +/****************************************************************************/ +/************************ G L O B A L T Y P E S ************************/ +/****************************************************************************/ + +/****************************************************************************/ +/******************** G L O B A L V A R I A B L E S ********************/ +/****************************************************************************/ + +/****************************************************************************/ +/****************** E X P O R T E D F U N C T I O N S ******************/ +/****************************************************************************/ + +void emm_as_initialize(void); + +int emm_as_send(const emm_as_t *msg); + +#endif /* __EMM_AS_H__*/ diff --git a/openair-cn/NAS/UE/EMM/SAP/emm_asDef.h b/openair-cn/NAS/UE/EMM/SAP/emm_asDef.h new file mode 100755 index 0000000000..fbd2a6b38e --- /dev/null +++ b/openair-cn/NAS/UE/EMM/SAP/emm_asDef.h @@ -0,0 +1,276 @@ +/******************************************************************************* + OpenAirInterface + Copyright(c) 1999 - 2014 Eurecom + + OpenAirInterface is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + + OpenAirInterface is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with OpenAirInterface.The full GNU General Public License is + included in this distribution in the file called "COPYING". If not, + see . + + Contact Information + OpenAirInterface Admin: openair_admin@eurecom.fr + OpenAirInterface Tech : openair_tech@eurecom.fr + OpenAirInterface Dev : openair4g-devel@eurecom.fr + + Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. + + *******************************************************************************/ +/***************************************************************************** + +Source emm_asDef.h + +Version 0.1 + +Date 2012/10/16 + +Product NAS stack + +Subsystem EPS Mobility Management + +Author Frederic Maurel + +Description Defines the EMM primitives available at the EMMAS Service + Access Point to transfer NAS messages to/from the Access + Stratum sublayer. + +*****************************************************************************/ +#ifndef __EMM_ASDEF_H__ +#define __EMM_ASDEF_H__ + +#include "commonDef.h" +#include "OctetString.h" + +/****************************************************************************/ +/********************* G L O B A L C O N S T A N T S *******************/ +/****************************************************************************/ + +/* + * EMMAS-SAP primitives + */ +typedef enum emm_as_primitive_u { + _EMMAS_START = 200, + _EMMAS_SECURITY_REQ, /* EMM->AS: Security request */ + _EMMAS_SECURITY_IND, /* AS->EMM: Security indication */ + _EMMAS_SECURITY_RES, /* EMM->AS: Security response */ + _EMMAS_SECURITY_REJ, /* EMM->AS: Security reject */ + _EMMAS_ESTABLISH_REQ, /* EMM->AS: Connection establish request */ + _EMMAS_ESTABLISH_CNF, /* AS->EMM: Connection establish confirm */ + _EMMAS_ESTABLISH_REJ, /* AS->EMM: Connection establish reject */ + _EMMAS_RELEASE_REQ, /* EMM->AS: Connection release request */ + _EMMAS_RELEASE_IND, /* AS->EMM: Connection release indication */ + _EMMAS_DATA_REQ, /* EMM->AS: Data transfer request */ + _EMMAS_DATA_IND, /* AS->EMM: Data transfer indication */ + _EMMAS_PAGE_IND, /* AS->EMM: Paging data indication */ + _EMMAS_STATUS_IND, /* AS->EMM: Status indication */ + _EMMAS_CELL_INFO_REQ, /* EMM->AS: Cell information request */ + _EMMAS_CELL_INFO_RES, /* AS->EMM: Cell information response */ + _EMMAS_CELL_INFO_IND, /* AS->EMM: Cell information indication */ + _EMMAS_END +} emm_as_primitive_t; + +/* Data used to setup EPS NAS security */ +typedef struct emm_as_security_data_s { + uint8_t is_new; /* New security data indicator */ +#define EMM_AS_NO_KEY_AVAILABLE 0xff + uint8_t ksi; /* NAS key set identifier */ + uint8_t sqn; /* Sequence number */ + uint32_t count; /* NAS counter */ + const OctetString *k_enc; /* NAS cyphering key */ + const OctetString *k_int; /* NAS integrity key */ +} emm_as_security_data_t; + +/****************************************************************************/ +/************************ G L O B A L T Y P E S ************************/ +/****************************************************************************/ + +/* + * EMMAS primitive for security + * ---------------------------- + */ +typedef struct emm_as_security_s { + uint32_t ueid; /* UE lower layer identifier */ + const GUTI_t *guti; /* GUTI temporary mobile identity */ + emm_as_security_data_t sctx;/* EPS NAS security context */ + int emm_cause; /* EMM failure cause code */ + /* + * Identity request/response + */ + uint8_t identType; /* Type of requested UE's identity */ + const imsi_t *imsi; /* The requested IMSI of the UE */ + const imei_t *imei; /* The requested IMEI of the UE */ + uint32_t tmsi; /* The requested TMSI of the UE */ + /* + * Authentication request/response + */ + uint8_t ksi; /* NAS key set identifier */ + const OctetString *rand; /* Random challenge number */ + const OctetString *autn; /* Authentication token */ + const OctetString *res; /* Authentication response */ + const OctetString *auts; /* Synchronisation failure */ + /* + * Security Mode Command + */ + uint8_t eea; /* Replayed EPS encryption algorithms */ + uint8_t eia; /* Replayed EPS integrity algorithms */ + uint8_t uea; /* Replayed UMTS encryption algorithms */ + uint8_t ucs2; + uint8_t uia; /* Replayed UMTS integrity algorithms */ + uint8_t gea; /* Replayed GPRS encryption algorithms */ + uint8_t umts_present; + uint8_t gprs_present; + + // Added by LG + uint8_t selected_eea; /* Selected EPS encryption algorithms */ + uint8_t selected_eia; /* Selected EPS integrity algorithms */ + +#define EMM_AS_MSG_TYPE_IDENT 0x01 /* Identification message */ +#define EMM_AS_MSG_TYPE_AUTH 0x02 /* Authentication message */ +#define EMM_AS_MSG_TYPE_SMC 0x03 /* Security Mode Command */ + uint8_t msgType; /* Type of NAS security message to transfer */ +} emm_as_security_t; + +/* + * EMMAS primitive for connection establishment + * -------------------------------------------- + */ +typedef struct emm_as_EPS_identity_s { + const GUTI_t *guti; /* The GUTI, if valid */ + const tai_t *tai; /* The last visited registered Tracking + * Area Identity, if available */ + const imsi_t *imsi; /* IMSI in case of "AttachWithImsi" */ + const imei_t *imei; /* UE's IMEI for emergency bearer services */ +} emm_as_EPS_identity_t; + +typedef struct emm_as_establish_s { + uint32_t ueid; /* UE lower layer identifier */ + emm_as_EPS_identity_t UEid; /* UE's EPS mobile identity */ + emm_as_security_data_t sctx;/* EPS NAS security context */ + int switch_off; /* TRUE if the UE is switched off */ + uint8_t type; /* Network attach/detach type */ + uint8_t RRCcause; /* Connection establishment cause */ + uint8_t RRCtype; /* Associated call type */ + const plmn_t *plmnID; /* Identifier of the selected PLMN */ + uint8_t ksi; /* NAS key set identifier */ + uint8_t encryption:4; /* Ciphering algorithm */ + uint8_t integrity:4; /* Integrity protection algorithm */ + int emm_cause; /* EMM failure cause code */ + const GUTI_t *new_guti; /* New GUTI, if re-allocated */ + int n_tacs; /* Number of concecutive tracking areas + * the UE is registered to */ + tac_t tac; /* Code of the first tracking area the UE + * is registered to */ +#define EMM_AS_NAS_INFO_ATTACH 0x01 /* Attach request */ +#define EMM_AS_NAS_INFO_DETACH 0x02 /* Detach request */ +#define EMM_AS_NAS_INFO_TAU 0x03 /* Tracking Area Update request */ +#define EMM_AS_NAS_INFO_SR 0x04 /* Service Request */ +#define EMM_AS_NAS_INFO_EXTSR 0x05 /* Extended Service Request */ + uint8_t NASinfo; /* Type of initial NAS information to transfer */ + OctetString NASmsg; /* NAS message to be transfered within + * initial NAS information message */ +} emm_as_establish_t; + +/* + * EMMAS primitive for connection release + * -------------------------------------- + */ +typedef struct emm_as_release_s { + uint32_t ueid; /* UE lower layer identifier */ + const GUTI_t *guti; /* GUTI temporary mobile identity */ +#define EMM_AS_CAUSE_AUTHENTICATION 0x01 /* Authentication failure */ +#define EMM_AS_CAUSE_DETACH 0x02 /* Detach requested */ + uint8_t cause; /* Release cause */ +} emm_as_release_t; + +/* + * EMMAS primitive for data transfer + * --------------------------------- + */ +typedef struct emm_as_data_s { + uint32_t ueid; /* UE lower layer identifier */ + const GUTI_t *guti; /* GUTI temporary mobile identity */ + emm_as_security_data_t sctx;/* EPS NAS security context */ + int switch_off; /* TRUE if the UE is switched off */ + uint8_t type; /* Network detach type */ + uint8_t delivered; /* Data message delivery indicator */ +#define EMM_AS_NAS_DATA_ATTACH 0x01 /* Attach complete */ +#define EMM_AS_NAS_DATA_DETACH 0x02 /* Detach request */ + uint8_t NASinfo; /* Type of NAS information to transfer */ + OctetString NASmsg; /* NAS message to be transfered */ +} emm_as_data_t; + +/* + * EMMAS primitive for paging + * -------------------------- + */ +typedef struct emm_as_page_s {} emm_as_page_t; + +/* + * EMMAS primitive for status indication + * ------------------------------------- + */ +typedef struct emm_as_status_s { + uint32_t ueid; /* UE lower layer identifier */ + const GUTI_t *guti; /* GUTI temporary mobile identity */ + emm_as_security_data_t sctx;/* EPS NAS security context */ + int emm_cause; /* EMM failure cause code */ +} emm_as_status_t; + +/* + * EMMAS primitive for cell information + * ------------------------------------ + */ +typedef struct emm_as_cell_info_s { + uint8_t found; /* Indicates whether a suitable cell is found */ +#define EMM_AS_PLMN_LIST_SIZE 6 + PLMN_LIST_T(EMM_AS_PLMN_LIST_SIZE) plmnIDs; + /* List of identifiers of available PLMNs */ + Byte_t rat; /* Bitmap of Radio Access Technologies */ + tac_t tac; /* Tracking Area Code */ + ci_t cellID; /* cell identity */ +} emm_as_cell_info_t; + +/* + * -------------------------------- + * Structure of EMMAS-SAP primitive + * -------------------------------- + */ +typedef struct emm_as_s { + emm_as_primitive_t primitive; + union { + emm_as_security_t security; + emm_as_establish_t establish; + emm_as_release_t release; + emm_as_data_t data; + emm_as_page_t page; + emm_as_status_t status; + emm_as_cell_info_t cell_info; + } u; +} emm_as_t; + +/****************************************************************************/ +/******************** G L O B A L V A R I A B L E S ********************/ +/****************************************************************************/ + +/****************************************************************************/ +/****************** E X P O R T E D F U N C T I O N S ******************/ +/****************************************************************************/ + +/* + * Defined in LowerLayer.c + * Setup security data according to the given EPS security context + */ +void emm_as_set_security_data(emm_as_security_data_t *data, const void *context, + int is_new, int is_ciphered); + +#endif /* __EMM_ASDEF_H__*/ diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/sap/emm_esm.c b/openair-cn/NAS/UE/EMM/SAP/emm_esm.c old mode 100644 new mode 100755 similarity index 99% rename from openair-cn/NAS/EURECOM-NAS/src/emm/sap/emm_esm.c rename to openair-cn/NAS/UE/EMM/SAP/emm_esm.c index 3ffdecb80a..4a5400e0c1 --- a/openair-cn/NAS/EURECOM-NAS/src/emm/sap/emm_esm.c +++ b/openair-cn/NAS/UE/EMM/SAP/emm_esm.c @@ -52,9 +52,7 @@ Description Defines the EMMESM Service Access Point that provides #include "LowerLayer.h" -#ifdef NAS_UE #include "emm_proc.h" -#endif /****************************************************************************/ /**************** E X T E R N A L D E F I N I T I O N S ****************/ @@ -68,11 +66,9 @@ Description Defines the EMMESM Service Access Point that provides * String representation of EMMESM-SAP primitives */ static const char *_emm_esm_primitive_str[] = { -#ifdef NAS_UE "EMMESM_ESTABLISH_REQ", "EMMESM_ESTABLISH_CNF", "EMMESM_ESTABLISH_REJ", -#endif "EMMESM_RELEASE_IND", "EMMESM_UNITDATA_REQ", "EMMESM_UNITDATA_IND", @@ -130,7 +126,6 @@ int emm_esm_send(const emm_esm_t *msg) _emm_esm_primitive_str[primitive - _EMMESM_START - 1], primitive); switch (primitive) { -#ifdef NAS_UE case _EMMESM_ESTABLISH_REQ: /* ESM requests EMM to initiate an attach procedure before @@ -158,7 +153,6 @@ int emm_esm_send(const emm_esm_t *msg) case _EMMESM_ESTABLISH_REJ: /* ESM notifies EMM that PDN connectivity procedure failed */ break; -#endif case _EMMESM_UNITDATA_REQ: /* ESM requests EMM to transfer ESM data unit to lower layer */ diff --git a/openair-cn/NAS/UE/EMM/SAP/emm_esm.h b/openair-cn/NAS/UE/EMM/SAP/emm_esm.h new file mode 100755 index 0000000000..6967b97ca1 --- /dev/null +++ b/openair-cn/NAS/UE/EMM/SAP/emm_esm.h @@ -0,0 +1,73 @@ +/******************************************************************************* + OpenAirInterface + Copyright(c) 1999 - 2014 Eurecom + + OpenAirInterface is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + + OpenAirInterface is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with OpenAirInterface.The full GNU General Public License is + included in this distribution in the file called "COPYING". If not, + see . + + Contact Information + OpenAirInterface Admin: openair_admin@eurecom.fr + OpenAirInterface Tech : openair_tech@eurecom.fr + OpenAirInterface Dev : openair4g-devel@eurecom.fr + + Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. + + *******************************************************************************/ +/***************************************************************************** + +Source emm_esm.h + +Version 0.1 + +Date 2012/10/16 + +Product NAS stack + +Subsystem EPS Mobility Management + +Author Frederic Maurel + +Description Defines the EMMESM Service Access Point that provides + interlayer services to the EPS Session Management sublayer + for service registration and activate/deactivate PDP context. + +*****************************************************************************/ +#ifndef __EMM_ESM_H__ +#define __EMM_ESM_H__ + +#include "emm_esmDef.h" + +/****************************************************************************/ +/********************* G L O B A L C O N S T A N T S *******************/ +/****************************************************************************/ + +/****************************************************************************/ +/************************ G L O B A L T Y P E S ************************/ +/****************************************************************************/ + +/****************************************************************************/ +/******************** G L O B A L V A R I A B L E S ********************/ +/****************************************************************************/ + +/****************************************************************************/ +/****************** E X P O R T E D F U N C T I O N S ******************/ +/****************************************************************************/ + +void emm_esm_initialize(void); + +int emm_esm_send(const emm_esm_t *msg); + +#endif /* __EMM_ESM_H__*/ diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/sap/emm_esmDef.h b/openair-cn/NAS/UE/EMM/SAP/emm_esmDef.h old mode 100644 new mode 100755 similarity index 98% rename from openair-cn/NAS/EURECOM-NAS/src/emm/sap/emm_esmDef.h rename to openair-cn/NAS/UE/EMM/SAP/emm_esmDef.h index 179cdcb1af..215be4fa6d --- a/openair-cn/NAS/EURECOM-NAS/src/emm/sap/emm_esmDef.h +++ b/openair-cn/NAS/UE/EMM/SAP/emm_esmDef.h @@ -60,11 +60,9 @@ Description Defines the EMMESM Service Access Point that provides */ typedef enum { _EMMESM_START = 100, -#ifdef NAS_UE _EMMESM_ESTABLISH_REQ, _EMMESM_ESTABLISH_CNF, _EMMESM_ESTABLISH_REJ, -#endif _EMMESM_RELEASE_IND, _EMMESM_UNITDATA_REQ, _EMMESM_UNITDATA_IND, @@ -102,9 +100,6 @@ typedef struct { typedef struct { emm_esm_primitive_t primitive; unsigned int ueid; -#if defined(NAS_MME) - emm_data_context_t *ctx; -#endif union { emm_esm_establish_t establish; emm_esm_data_t data; diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/sap/emm_fsm.c b/openair-cn/NAS/UE/EMM/SAP/emm_fsm.c old mode 100644 new mode 100755 similarity index 84% rename from openair-cn/NAS/EURECOM-NAS/src/emm/sap/emm_fsm.c rename to openair-cn/NAS/UE/EMM/SAP/emm_fsm.c index 7a93c1e92d..59c78be3e2 --- a/openair-cn/NAS/EURECOM-NAS/src/emm/sap/emm_fsm.c +++ b/openair-cn/NAS/UE/EMM/SAP/emm_fsm.c @@ -49,23 +49,15 @@ Description Defines the EPS Mobility Management procedures executed at #include "commonDef.h" #include "nas_log.h" -#include "mme_api.h" #include "emmData.h" -#if defined(NAS_BUILT_IN_EPC) -# include "assertions.h" -#endif + /****************************************************************************/ /**************** E X T E R N A L D E F I N I T I O N S ****************/ /****************************************************************************/ -#ifdef NAS_UE #define EMM_FSM_NB_UE_MAX 1 -#endif -#ifdef NAS_MME -#define EMM_FSM_NB_UE_MAX (MME_API_NB_UE_MAX + 1) -#endif /****************************************************************************/ /******************* L O C A L D E F I N I T I O N S *******************/ @@ -79,7 +71,6 @@ Description Defines the EPS Mobility Management procedures executed at /* String representation of EMM events */ static const char *_emm_fsm_event_str[] = { -#ifdef NAS_UE "S1_ENABLED", "S1_DISABLED", "NO_IMSI", @@ -92,13 +83,6 @@ static const char *_emm_fsm_event_str[] = { "ATTACH_FAILED", "ATTACH_EXCEEDED", "AUTHENTICATION_REJ", -#endif -#ifdef NAS_MME - "COMMON_PROC_REQ", - "COMMON_PROC_CNF", - "COMMON_PROC_REJ", - "PROC_ABORT", -#endif "ATTACH_CNF", "ATTACH_REJ", "DETACH_INIT", @@ -119,13 +103,10 @@ static const char *_emm_fsm_event_str[] = { /* String representation of EMM status */ static const char *_emm_fsm_status_str[EMM_STATE_MAX] = { "INVALID", -#ifdef NAS_UE "NULL", -#endif "DEREGISTERED", "REGISTERED", "DEREGISTERED-INITIATED", -#ifdef NAS_UE "DEREGISTERED.NORMAL-SERVICE", "DEREGISTERED.LIMITED-SERVICE", "DEREGISTERED.ATTEMPTING-TO-ATTACH", @@ -144,10 +125,6 @@ static const char *_emm_fsm_status_str[EMM_STATE_MAX] = { "REGISTERED.IMSI-DETACH-INITIATED", "TRACKING-AREA-UPDATING-INITIATED", "SERVICE-REQUEST-INITIATED", -#endif -#ifdef NAS_MME - "COMMON-PROCEDURE-INITIATED", -#endif }; /* @@ -159,13 +136,10 @@ static const char *_emm_fsm_status_str[EMM_STATE_MAX] = { /* Type of the EPS Mobility Management state machine handler */ typedef int(*emm_fsm_handler_t)(const emm_reg_t *); -#ifdef NAS_UE int EmmNull(const emm_reg_t *); -#endif int EmmDeregistered(const emm_reg_t *); int EmmRegistered(const emm_reg_t *); int EmmDeregisteredInitiated(const emm_reg_t *); -#ifdef NAS_UE int EmmDeregisteredNormalService(const emm_reg_t *); int EmmDeregisteredLimitedService(const emm_reg_t *); int EmmDeregisteredAttemptingToAttach(const emm_reg_t *); @@ -184,21 +158,15 @@ int EmmRegisteredAttemptingToUpdate(const emm_reg_t *); int EmmRegisteredImsiDetachInitiated(const emm_reg_t *); int EmmTrackingAreaUpdatingInitiated(const emm_reg_t *); int EmmServiceRequestInitiated(const emm_reg_t *); -#endif -#ifdef NAS_MME -int EmmCommonProcedureInitiated(const emm_reg_t *); -#endif + /* EMM state machine handlers */ static const emm_fsm_handler_t _emm_fsm_handlers[EMM_STATE_MAX] = { NULL, -#ifdef NAS_UE EmmNull, -#endif EmmDeregistered, EmmRegistered, EmmDeregisteredInitiated, -#ifdef NAS_UE EmmDeregisteredNormalService, EmmDeregisteredLimitedService, EmmDeregisteredAttemptingToAttach, @@ -217,10 +185,6 @@ static const emm_fsm_handler_t _emm_fsm_handlers[EMM_STATE_MAX] = { EmmRegisteredImsiDetachInitiated, EmmTrackingAreaUpdatingInitiated, EmmServiceRequestInitiated, -#endif -#ifdef NAS_MME - EmmCommonProcedureInitiated, -#endif }; /* @@ -229,9 +193,7 @@ static const emm_fsm_handler_t _emm_fsm_handlers[EMM_STATE_MAX] = { * ----------------------------------------------------------------------------- */ -#if !defined(NAS_BUILT_IN_EPC) emm_fsm_state_t _emm_fsm_status[EMM_FSM_NB_UE_MAX]; -#endif /****************************************************************************/ /****************** E X P O R T E D F U N C T I O N S ******************/ @@ -256,17 +218,7 @@ void emm_fsm_initialize(void) int ueid; LOG_FUNC_IN; -#ifdef NAS_UE _emm_fsm_status[0] = EMM_NULL; -#endif - -#if defined(NAS_MME) && !defined(NAS_BUILT_IN_EPC) - - for (ueid = 0; ueid < EMM_FSM_NB_UE_MAX; ueid++) { - _emm_fsm_status[ueid] = EMM_DEREGISTERED; - } - -#endif LOG_FUNC_OUT; } @@ -287,36 +239,13 @@ void emm_fsm_initialize(void) ** ** ***************************************************************************/ int emm_fsm_set_status( -#ifdef NAS_MME - unsigned int ueid, - void *ctx, -#endif emm_fsm_state_t status) { LOG_FUNC_IN; -#ifdef NAS_UE unsigned int ueid = 0; -#endif -#if defined(NAS_BUILT_IN_EPC) - emm_data_context_t *emm_ctx = (emm_data_context_t *)ctx; - DevAssert(emm_ctx != NULL); - - if ((status < EMM_STATE_MAX) && (ueid > 0)) { - LOG_TRACE(INFO, "EMM-FSM - Status changed: %s ===> %s", - _emm_fsm_status_str[emm_ctx->_emm_fsm_status], - _emm_fsm_status_str[status]); - - if (status != emm_ctx->_emm_fsm_status) { - emm_ctx->_emm_fsm_status = status; - } - - LOG_FUNC_RETURN (RETURNok); - } - -#else if ( (status < EMM_STATE_MAX) && (ueid < EMM_FSM_NB_UE_MAX) ) { LOG_TRACE(INFO, "EMM-FSM - Status changed: %s ===> %s", @@ -330,8 +259,6 @@ int emm_fsm_set_status( LOG_FUNC_RETURN (RETURNok); } -#endif - LOG_FUNC_RETURN (RETURNerror); } @@ -350,33 +277,10 @@ int emm_fsm_set_status( ** Others: None ** ** ** ***************************************************************************/ -#ifdef NAS_UE emm_fsm_state_t emm_fsm_get_status(void) { return (_emm_fsm_status[0]); } -#endif - -#ifdef NAS_MME -emm_fsm_state_t emm_fsm_get_status(unsigned int ueid, void *ctx) -{ -# if defined(NAS_BUILT_IN_EPC) - emm_data_context_t *emm_ctx = (emm_data_context_t *)ctx; - - if (emm_ctx != NULL) { - return emm_ctx->_emm_fsm_status; - } - -# else - - if (ueid < EMM_FSM_NB_UE_MAX) { - return (_emm_fsm_status[ueid]); - } - -#endif - return EMM_STATE_MAX; -} -#endif /**************************************************************************** ** ** @@ -402,33 +306,12 @@ int emm_fsm_process(const emm_reg_t *evt) primitive = evt->primitive; -#ifdef NAS_UE status = _emm_fsm_status[0]; -#endif -#ifdef NAS_MME -# if defined(NAS_BUILT_IN_EPC) - emm_data_context_t *emm_ctx = (emm_data_context_t *)evt->ctx; - - DevAssert(emm_ctx != NULL); - - status = emm_fsm_get_status(0, emm_ctx); -# else - - if (evt->ueid >= EMM_FSM_NB_UE_MAX) { - LOG_FUNC_RETURN (RETURNerror); - } - - status = _emm_fsm_status[evt->ueid]; -# endif -#endif LOG_TRACE(INFO, "EMM-FSM - Received event %s (%d) in state %s", _emm_fsm_event_str[primitive - _EMMREG_START - 1], primitive, _emm_fsm_status_str[status]); -#if defined(NAS_BUILT_IN_EPC) - DevAssert(status != EMM_INVALID); -#endif /* Execute the EMM state machine */ rc = (_emm_fsm_handlers[status])(evt); diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/sap/emm_fsm.h b/openair-cn/NAS/UE/EMM/SAP/emm_fsm.h old mode 100644 new mode 100755 similarity index 92% rename from openair-cn/NAS/EURECOM-NAS/src/emm/sap/emm_fsm.h rename to openair-cn/NAS/UE/EMM/SAP/emm_fsm.h index 69e6ae7934..e554f0f9e2 --- a/openair-cn/NAS/EURECOM-NAS/src/emm/sap/emm_fsm.h +++ b/openair-cn/NAS/UE/EMM/SAP/emm_fsm.h @@ -65,13 +65,10 @@ Description Defines the EPS Mobility Management procedures executed at */ typedef enum { EMM_INVALID, -#ifdef NAS_UE EMM_NULL, -#endif EMM_DEREGISTERED, EMM_REGISTERED, EMM_DEREGISTERED_INITIATED, -#ifdef NAS_UE EMM_DEREGISTERED_NORMAL_SERVICE, EMM_DEREGISTERED_LIMITED_SERVICE, EMM_DEREGISTERED_ATTEMPTING_TO_ATTACH, @@ -90,10 +87,6 @@ typedef enum { EMM_REGISTERED_IMSI_DETACH_INITIATED, EMM_TRACKING_AREA_UPDATING_INITIATED, EMM_SERVICE_REQUEST_INITIATED, -#endif -#ifdef NAS_MME - EMM_COMMON_PROCEDURE_INITIATED, -#endif EMM_STATE_MAX } emm_fsm_state_t; @@ -107,15 +100,9 @@ typedef enum { void emm_fsm_initialize(void); -#ifdef NAS_UE int emm_fsm_set_status(emm_fsm_state_t status); emm_fsm_state_t emm_fsm_get_status(void); -#endif -#ifdef NAS_MME -//LG 2015-03-13 struct emm_data_context_t; -int emm_fsm_set_status(unsigned int ueid, void *ctx, emm_fsm_state_t status); -emm_fsm_state_t emm_fsm_get_status(unsigned int ueid, void *ctx); -#endif + int emm_fsm_process(const emm_reg_t *evt); diff --git a/openair-cn/NAS/UE/EMM/SAP/emm_recv.c b/openair-cn/NAS/UE/EMM/SAP/emm_recv.c new file mode 100755 index 0000000000..de9347fcff --- /dev/null +++ b/openair-cn/NAS/UE/EMM/SAP/emm_recv.c @@ -0,0 +1,486 @@ +/******************************************************************************* + OpenAirInterface + Copyright(c) 1999 - 2014 Eurecom + + OpenAirInterface is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + + OpenAirInterface is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with OpenAirInterface.The full GNU General Public License is + included in this distribution in the file called "COPYING". If not, + see . + + Contact Information + OpenAirInterface Admin: openair_admin@eurecom.fr + OpenAirInterface Tech : openair_tech@eurecom.fr + OpenAirInterface Dev : openair4g-devel@eurecom.fr + + Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. + + *******************************************************************************/ +/***************************************************************************** + +Source emm_recv.c + +Version 0.1 + +Date 2013/01/30 + +Product NAS stack + +Subsystem EPS Mobility Management + +Author Frederic Maurel + +Description Defines functions executed at the EMMAS Service Access + Point upon receiving EPS Mobility Management messages + from the Access Stratum sublayer. + +*****************************************************************************/ + +#include "emm_recv.h" +#include "commonDef.h" +#include "nas_log.h" + +#include "emm_msgDef.h" +#include "emm_cause.h" +#include "emm_proc.h" + +#include // memcpy + +/****************************************************************************/ +/**************** E X T E R N A L D E F I N I T I O N S ****************/ +/****************************************************************************/ + +/****************************************************************************/ +/******************* L O C A L D E F I N I T I O N S *******************/ +/****************************************************************************/ + +/****************************************************************************/ +/****************** E X P O R T E D F U N C T I O N S ******************/ +/****************************************************************************/ + +/****************************************************************************/ +/********************* L O C A L F U N C T I O N S *********************/ +/****************************************************************************/ + +/* + * -------------------------------------------------------------------------- + * Functions executed by both the UE and the MME upon receiving EMM messages + * -------------------------------------------------------------------------- + */ +/**************************************************************************** + ** ** + ** Name: emm_recv_status() ** + ** ** + ** Description: Processes EMM status message ** + ** ** + ** Inputs: ueid: UE lower layer identifier ** + ** msg: The received EMM message ** + ** Others: None ** + ** ** + ** Outputs: emm_cause: EMM cause code ** + ** Return: RETURNok, RETURNerror ** + ** Others: None ** + ** ** + ***************************************************************************/ +int emm_recv_status(unsigned int ueid, emm_status_msg *msg, int *emm_cause) +{ + LOG_FUNC_IN; + + int rc; + + LOG_TRACE(INFO, "EMMAS-SAP - Received EMM Status message (cause=%d)", + msg->emmcause); + + /* + * Message checking + */ + *emm_cause = EMM_CAUSE_SUCCESS; + /* + * Message processing + */ + rc = emm_proc_status_ind(ueid, msg->emmcause); + + LOG_FUNC_RETURN (rc); +} + +/* + * -------------------------------------------------------------------------- + * Functions executed by the UE upon receiving EMM message from the network + * -------------------------------------------------------------------------- + */ +/**************************************************************************** + ** ** + ** Name: emm_recv_attach_accept() ** + ** ** + ** Description: Processes Attach Accept message ** + ** ** + ** Inputs: msg: The received EMM message ** + ** Others: None ** + ** ** + ** Outputs: emm_cause: EMM cause code ** + ** Return: RETURNok, RETURNerror ** + ** Others: None ** + ** ** + ***************************************************************************/ +int emm_recv_attach_accept(attach_accept_msg *msg, int *emm_cause) +{ + LOG_FUNC_IN; + + int rc; + int i; + + LOG_TRACE(INFO, "EMMAS-SAP - Received Attach Accept message"); + + /* + * Message checking + */ + if (msg->tailist.typeoflist != + TRACKING_AREA_IDENTITY_LIST_ONE_PLMN_CONSECUTIVE_TACS) { + /* Only list of TACs belonging to one PLMN with consecutive + * TAC values is supported */ + *emm_cause = EMM_CAUSE_IE_NOT_IMPLEMENTED; + } else if ( (msg->presencemask & ATTACH_ACCEPT_GUTI_PRESENT) && + (msg->guti.guti.typeofidentity != EPS_MOBILE_IDENTITY_GUTI) ) { + /* The only supported type of EPS mobile identity is GUTI */ + *emm_cause = EMM_CAUSE_IE_NOT_IMPLEMENTED; + } + + /* Handle message checking error */ + if (*emm_cause != EMM_CAUSE_SUCCESS) { + LOG_FUNC_RETURN (RETURNerror); + } + + /* + * Message processing + */ + /* Compute timers value */ + long T3412, T3402 = -1, T3423 = -1; + T3412 = gprs_timer_value(&msg->t3412value); + + if (msg->presencemask & ATTACH_ACCEPT_T3402_VALUE_PRESENT) { + T3402 = gprs_timer_value(&msg->t3402value); + } + + if (msg->presencemask & ATTACH_ACCEPT_T3423_VALUE_PRESENT) { + T3423 = gprs_timer_value(&msg->t3423value); + } + + /* Get the tracking area list the UE is registered to */ + + /* LW: number of elements is coded as N-1 (0 -> 1 element, 1 -> 2 elements...), + * see 3GPP TS 24.301, section 9.9.3.33.1 */ + int n_tais = msg->tailist.numberofelements + 1; + tai_t tai[n_tais]; + + for (i = 0; i < n_tais; i++) { + tai[i].plmn.MCCdigit1 = msg->tailist.mccdigit1; + tai[i].plmn.MCCdigit2 = msg->tailist.mccdigit2; + tai[i].plmn.MCCdigit3 = msg->tailist.mccdigit3; + tai[i].plmn.MNCdigit1 = msg->tailist.mncdigit1; + tai[i].plmn.MNCdigit2 = msg->tailist.mncdigit2; + tai[i].plmn.MNCdigit3 = msg->tailist.mncdigit3; + tai[i].tac = msg->tailist.tac + i; + } + + /* Get the GUTI */ + GUTI_t *pguti = NULL; + GUTI_t guti; + + if (msg->presencemask & ATTACH_ACCEPT_GUTI_PRESENT) { + pguti = &guti; + guti.gummei.plmn.MCCdigit1 = msg->guti.guti.mccdigit1; + guti.gummei.plmn.MCCdigit2 = msg->guti.guti.mccdigit2; + guti.gummei.plmn.MCCdigit3 = msg->guti.guti.mccdigit3; + guti.gummei.plmn.MNCdigit1 = msg->guti.guti.mncdigit1; + guti.gummei.plmn.MNCdigit2 = msg->guti.guti.mncdigit2; + guti.gummei.plmn.MNCdigit3 = msg->guti.guti.mncdigit3; + guti.gummei.MMEgid = msg->guti.guti.mmegroupid; + guti.gummei.MMEcode = msg->guti.guti.mmecode; + guti.m_tmsi = msg->guti.guti.mtmsi; + } + + /* Get the list of equivalent PLMNs */ + int n_eplmns = 0; + plmn_t eplmn; + + if (msg->presencemask & ATTACH_ACCEPT_EQUIVALENT_PLMNS_PRESENT) { + n_eplmns = 1; + eplmn.MCCdigit1 = msg->equivalentplmns.mccdigit1; + eplmn.MCCdigit2 = msg->equivalentplmns.mccdigit2; + eplmn.MCCdigit3 = msg->equivalentplmns.mccdigit3; + eplmn.MNCdigit1 = msg->equivalentplmns.mncdigit1; + eplmn.MNCdigit2 = msg->equivalentplmns.mncdigit2; + eplmn.MNCdigit3 = msg->equivalentplmns.mncdigit3; + } + + /* Execute attach procedure accepted by the network */ + rc = emm_proc_attach_accept(T3412, T3402, T3423, n_tais, tai, pguti, + n_eplmns, &eplmn, + &msg->esmmessagecontainer.esmmessagecontainercontents); + + LOG_FUNC_RETURN (rc); +} + +/**************************************************************************** + ** ** + ** Name: emm_recv_attach_reject() ** + ** ** + ** Description: Processes Attach Reject message ** + ** ** + ** Inputs: msg: The received EMM message ** + ** Others: None ** + ** ** + ** Outputs: emm_cause: EMM cause code ** + ** Return: RETURNok, RETURNerror ** + ** Others: None ** + ** ** + ***************************************************************************/ +int emm_recv_attach_reject(attach_reject_msg *msg, int *emm_cause) +{ + LOG_FUNC_IN; + + int rc; + + LOG_TRACE(INFO, "EMMAS-SAP - Received Attach Reject message (cause=%d)", + msg->emmcause); + + /* + * Message checking + */ + if ( (msg->emmcause == EMM_CAUSE_ESM_FAILURE) && + !(msg->presencemask & ATTACH_REJECT_ESM_MESSAGE_CONTAINER_PRESENT) ) { + /* The ATTACH REJECT message shall be combined with a PDN + * CONNECTIVITY REJECT message contained in the ESM message + * container information element */ + *emm_cause = EMM_CAUSE_INVALID_MANDATORY_INFO; + } + + /* Handle message checking error */ + if (*emm_cause != EMM_CAUSE_SUCCESS) { + LOG_FUNC_RETURN (RETURNerror); + } + + /* + * Message processing + */ + if (msg->presencemask & ATTACH_REJECT_ESM_MESSAGE_CONTAINER_PRESENT) { + /* Execute attach procedure rejected by the network */ + rc = emm_proc_attach_reject(msg->emmcause, + &msg->esmmessagecontainer.esmmessagecontainercontents); + } else { + /* Execute attach procedure rejected by the network */ + rc = emm_proc_attach_reject(msg->emmcause, NULL); + } + + LOG_FUNC_RETURN (rc); +} + +/**************************************************************************** + ** ** + ** Name: emm_recv_detach_accept() ** + ** ** + ** Description: Processes Detach Accept message ** + ** ** + ** Inputs: msg: The received EMM message ** + ** Others: None ** + ** ** + ** Outputs: emm_cause: EMM cause code ** + ** Return: RETURNok, RETURNerror ** + ** Others: None ** + ** ** + ***************************************************************************/ +int emm_recv_detach_accept(detach_accept_msg *msg, int *emm_cause) +{ + LOG_FUNC_IN; + + int rc; + + LOG_TRACE(INFO, "EMMAS-SAP - Received Detach Accept message"); + + /* + * Message processing + */ + /* Execute the UE initiated detach procedure completion by the UE */ + rc = emm_proc_detach_accept(); + + LOG_FUNC_RETURN (rc); +} + +/**************************************************************************** + ** ** + ** Name: emm_recv_identity_request() ** + ** ** + ** Description: Processes Identity Request message ** + ** ** + ** Inputs: msg: The received EMM message ** + ** Others: None ** + ** ** + ** Outputs: emm_cause: EMM cause code ** + ** Return: RETURNok, RETURNerror ** + ** Others: None ** + ** ** + ***************************************************************************/ +int emm_recv_identity_request(identity_request_msg *msg, int *emm_cause) +{ + LOG_FUNC_IN; + + int rc; + + LOG_TRACE(INFO, "EMMAS-SAP - Received Identity Request message"); + + /* + * Message processing + */ + /* Get the requested identity type */ + emm_proc_identity_type_t type; + + if (msg->identitytype == IDENTITY_TYPE_2_IMSI) { + type = EMM_IDENT_TYPE_IMSI; + } else if (msg->identitytype == IDENTITY_TYPE_2_IMEI) { + type = EMM_IDENT_TYPE_IMEI; + } else if (msg->identitytype == IDENTITY_TYPE_2_IMEISV) { + type = EMM_IDENT_TYPE_IMEISV; + } else if (msg->identitytype == IDENTITY_TYPE_2_TMSI) { + type = EMM_IDENT_TYPE_TMSI; + } else { + /* All other values are interpreted as IMSI */ + type = EMM_IDENT_TYPE_IMSI; + } + + /* Execute the identification procedure initiated by the network */ + rc = emm_proc_identification_request(type); + + LOG_FUNC_RETURN (rc); +} + +/**************************************************************************** + ** ** + ** Name: emm_recv_authentication_request() ** + ** ** + ** Description: Processes Authentication Request message ** + ** ** + ** Inputs: msg: The received EMM message ** + ** Others: None ** + ** ** + ** Outputs: emm_cause: EMM cause code ** + ** Return: RETURNok, RETURNerror ** + ** Others: None ** + ** ** + ***************************************************************************/ +int emm_recv_authentication_request(authentication_request_msg *msg, + int *emm_cause) +{ + LOG_FUNC_IN; + + int rc; + + LOG_TRACE(INFO, "EMMAS-SAP - Received Authentication Request message"); + + /* + * Message checking + */ + if ( (msg->authenticationparameterrand.rand.length == 0) || + (msg->authenticationparameterautn.autn.length == 0) ) { + /* RAND and AUTN parameters shall not be null */ + *emm_cause = EMM_CAUSE_INVALID_MANDATORY_INFO; + } + + /* Handle message checking error */ + if (*emm_cause != EMM_CAUSE_SUCCESS) { + LOG_FUNC_RETURN (RETURNerror); + } + + /* + * Message processing + */ + /* Execute the authentication procedure initiated by the network */ + rc = emm_proc_authentication_request( + msg->naskeysetidentifierasme.tsc != NAS_KEY_SET_IDENTIFIER_MAPPED, + msg->naskeysetidentifierasme.naskeysetidentifier, + &msg->authenticationparameterrand.rand, + &msg->authenticationparameterautn.autn); + + LOG_FUNC_RETURN (rc); +} + +/**************************************************************************** + ** ** + ** Name: emm_recv_authentication_reject() ** + ** ** + ** Description: Processes Authentication Reject message ** + ** ** + ** Inputs: msg: The received EMM message ** + ** Others: None ** + ** ** + ** Outputs: emm_cause: EMM cause code ** + ** Return: RETURNok, RETURNerror ** + ** Others: None ** + ** ** + ***************************************************************************/ +int emm_recv_authentication_reject(authentication_reject_msg *msg, + int *emm_cause) +{ + LOG_FUNC_IN; + + int rc; + + LOG_TRACE(INFO, "EMMAS-SAP - Received Authentication Reject message"); + + /* + * Message processing + */ + /* Execute the authentication procedure not accepted by the network */ + rc = emm_proc_authentication_reject(); + + LOG_FUNC_RETURN (rc); +} + +/**************************************************************************** + ** ** + ** Name: emm_recv_security_mode_command() ** + ** ** + ** Description: Processes Security Mode Command message ** + ** ** + ** Inputs: msg: The received EMM message ** + ** Others: None ** + ** ** + ** Outputs: emm_cause: EMM cause code ** + ** Return: RETURNok, RETURNerror ** + ** Others: None ** + ** ** + ***************************************************************************/ +int emm_recv_security_mode_command(security_mode_command_msg *msg, + int *emm_cause) +{ + LOG_FUNC_IN; + + int rc; + + LOG_TRACE(INFO, "EMMAS-SAP - Received Security Mode Command message"); + + /* + * Message processing + */ + /* Execute the security mode control procedure initiated by the network */ + rc = emm_proc_security_mode_command( + msg->naskeysetidentifier.tsc != NAS_KEY_SET_IDENTIFIER_MAPPED, + msg->naskeysetidentifier.naskeysetidentifier, + msg->selectednassecurityalgorithms.typeofcipheringalgorithm, + msg->selectednassecurityalgorithms.typeofintegrityalgorithm, + msg->replayeduesecuritycapabilities.eea, + msg->replayeduesecuritycapabilities.eia); + + LOG_FUNC_RETURN (rc); +} + + diff --git a/openair-cn/NAS/UE/EMM/SAP/emm_recv.h b/openair-cn/NAS/UE/EMM/SAP/emm_recv.h new file mode 100755 index 0000000000..a096eef376 --- /dev/null +++ b/openair-cn/NAS/UE/EMM/SAP/emm_recv.h @@ -0,0 +1,111 @@ +/******************************************************************************* + OpenAirInterface + Copyright(c) 1999 - 2014 Eurecom + + OpenAirInterface is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + + OpenAirInterface is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with OpenAirInterface.The full GNU General Public License is + included in this distribution in the file called "COPYING". If not, + see . + + Contact Information + OpenAirInterface Admin: openair_admin@eurecom.fr + OpenAirInterface Tech : openair_tech@eurecom.fr + OpenAirInterface Dev : openair4g-devel@eurecom.fr + + Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. + + *******************************************************************************/ +/***************************************************************************** + +Source emm_recv.h + +Version 0.1 + +Date 2013/01/30 + +Product NAS stack + +Subsystem EPS Mobility Management + +Author Frederic Maurel + +Description Defines functions executed at the EMMAS Service Access + Point upon receiving EPS Mobility Management messages + from the Access Stratum sublayer. + +*****************************************************************************/ +#ifndef __EMM_RECV_H__ +#define __EMM_RECV_H__ + +#include "EmmStatus.h" + +#include "DetachRequest.h" +#include "DetachAccept.h" + +#include "AttachAccept.h" +#include "AttachReject.h" +#include "TrackingAreaUpdateAccept.h" +#include "TrackingAreaUpdateReject.h" +#include "ServiceReject.h" +#include "GutiReallocationCommand.h" +#include "AuthenticationRequest.h" +#include "AuthenticationReject.h" +#include "IdentityRequest.h" +#include "NASSecurityModeCommand.h" +#include "EmmInformation.h" +#include "DownlinkNasTransport.h" +#include "CsServiceNotification.h" + +/****************************************************************************/ +/********************* G L O B A L C O N S T A N T S *******************/ +/****************************************************************************/ + +/****************************************************************************/ +/************************ G L O B A L T Y P E S ************************/ +/****************************************************************************/ + +/****************************************************************************/ +/******************** G L O B A L V A R I A B L E S ********************/ +/****************************************************************************/ + +/****************************************************************************/ +/****************** E X P O R T E D F U N C T I O N S ******************/ +/****************************************************************************/ + +/* + * -------------------------------------------------------------------------- + * Functions executed by both the UE and the MME upon receiving EMM messages + * -------------------------------------------------------------------------- + */ +int emm_recv_status(unsigned int ueid, emm_status_msg *msg, int *emm_cause); + +/* + * -------------------------------------------------------------------------- + * Functions executed by the UE upon receiving EMM message from the network + * -------------------------------------------------------------------------- + */ +int emm_recv_attach_accept(attach_accept_msg *msg, int *emm_cause); +int emm_recv_attach_reject(attach_reject_msg *msg, int *emm_cause); + +int emm_recv_detach_accept(detach_accept_msg *msg, int *emm_cause); + +int emm_recv_identity_request(identity_request_msg *msg, int *emm_cause); +int emm_recv_authentication_request(authentication_request_msg *msg, + int *emm_cause); +int emm_recv_authentication_reject(authentication_reject_msg *msg, + int *emm_cause); +int emm_recv_security_mode_command(security_mode_command_msg *msg, + int *emm_cause); + +#endif /* __EMM_RECV_H__*/ diff --git a/openair-cn/NAS/UE/EMM/SAP/emm_reg.c b/openair-cn/NAS/UE/EMM/SAP/emm_reg.c new file mode 100755 index 0000000000..ca19566cb9 --- /dev/null +++ b/openair-cn/NAS/UE/EMM/SAP/emm_reg.c @@ -0,0 +1,126 @@ +/******************************************************************************* + OpenAirInterface + Copyright(c) 1999 - 2014 Eurecom + + OpenAirInterface is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + + OpenAirInterface is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with OpenAirInterface.The full GNU General Public License is + included in this distribution in the file called "COPYING". If not, + see . + + Contact Information + OpenAirInterface Admin: openair_admin@eurecom.fr + OpenAirInterface Tech : openair_tech@eurecom.fr + OpenAirInterface Dev : openair4g-devel@eurecom.fr + + Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. + + *******************************************************************************/ +/***************************************************************************** + +Source emm_reg.c + +Version 0.1 + +Date 2012/10/16 + +Product NAS stack + +Subsystem EPS Mobility Management + +Author Frederic Maurel + +Description Defines the EMMREG Service Access Point that provides + registration services for location updating and attach/detach + procedures. + +*****************************************************************************/ + +#include "emm_reg.h" +#include "commonDef.h" +#include "nas_log.h" + +#include "emm_fsm.h" + +#include + +/****************************************************************************/ +/**************** E X T E R N A L D E F I N I T I O N S ****************/ +/****************************************************************************/ + +/****************************************************************************/ +/******************* L O C A L D E F I N I T I O N S *******************/ +/****************************************************************************/ + +/****************************************************************************/ +/****************** E X P O R T E D F U N C T I O N S ******************/ +/****************************************************************************/ + +/**************************************************************************** + ** ** + ** Name: emm_reg_initialize() ** + ** ** + ** Description: Initializes the EMMREG Service Access Point ** + ** ** + ** Inputs: None ** + ** Others: None ** + ** ** + ** Outputs: None ** + ** Return: None ** + ** Others: NONE ** + ** ** + ***************************************************************************/ +void emm_reg_initialize(void) +{ + LOG_FUNC_IN; + + /* Initialize the EMM state machine */ + emm_fsm_initialize(); + + LOG_FUNC_OUT; +} + +/**************************************************************************** + ** ** + ** Name: emm_reg_send() ** + ** ** + ** Description: Processes the EMMREG Service Access Point primitive ** + ** ** + ** Inputs: msg: The EMMREG-SAP primitive to process ** + ** Others: None ** + ** ** + ** Outputs: None ** + ** Return: RETURNok, RETURNerror ** + ** Others: None ** + ** ** + ***************************************************************************/ +int emm_reg_send(const emm_reg_t *msg) +{ + LOG_FUNC_IN; + + int rc; + + /* Check the EMM-SAP primitive */ + emm_reg_primitive_t primitive = msg->primitive; + assert( (primitive > _EMMREG_START) && (primitive < _EMMREG_END)); + + /* Execute the EMM procedure */ + rc = emm_fsm_process(msg); + + LOG_FUNC_RETURN (rc); +} + +/****************************************************************************/ +/********************* L O C A L F U N C T I O N S *********************/ +/****************************************************************************/ + diff --git a/openair3/RAL-LTE/RAL-DUMMY/INCLUDE/eRALlte_parameters.h b/openair-cn/NAS/UE/EMM/SAP/emm_reg.h old mode 100644 new mode 100755 similarity index 74% rename from openair3/RAL-LTE/RAL-DUMMY/INCLUDE/eRALlte_parameters.h rename to openair-cn/NAS/UE/EMM/SAP/emm_reg.h index 73f0054c33..62d333395c --- a/openair3/RAL-LTE/RAL-DUMMY/INCLUDE/eRALlte_parameters.h +++ b/openair-cn/NAS/UE/EMM/SAP/emm_reg.h @@ -23,23 +23,32 @@ OpenAirInterface Tech : openair_tech@eurecom.fr OpenAirInterface Dev : openair4g-devel@eurecom.fr - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE + Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. *******************************************************************************/ -/*! \file eRALlte_parameters.h - * \brief - * \author BRIZZOLA Davide, GAUTHIER Lionel, MAUREL Frederic, WETTERWALD Michelle - * \date 2012 - * \version - * \note - * \bug - * \warning - */ +/***************************************************************************** -#ifndef __RAL_LTE_PARAMETERS_H__ -#define __RAL_LTE_PARAMETERS_H__ +Source emm_reg.h -#include "MIH_C.h" +Version 0.1 + +Date 2012/10/16 + +Product NAS stack + +Subsystem EPS Mobility Management + +Author Frederic Maurel + +Description Defines the EMMREG Service Access Point that provides + registration services for location updating and attach/detach + procedures. + +*****************************************************************************/ +#ifndef __EMM_REG_H__ +#define __EMM_REG_H__ + +#include "emm_regDef.h" /****************************************************************************/ /********************* G L O B A L C O N S T A N T S *******************/ @@ -57,6 +66,8 @@ /****************** E X P O R T E D F U N C T I O N S ******************/ /****************************************************************************/ -void eRALlte_get_parameters_request(MIH_C_Message_Link_Get_Parameters_request_t* messageP); +void emm_reg_initialize(void); -#endif +int emm_reg_send(const emm_reg_t *msg); + +#endif /* __EMM_REG_H__*/ diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/sap/emm_regDef.h b/openair-cn/NAS/UE/EMM/SAP/emm_regDef.h old mode 100644 new mode 100755 similarity index 89% rename from openair-cn/NAS/EURECOM-NAS/src/emm/sap/emm_regDef.h rename to openair-cn/NAS/UE/EMM/SAP/emm_regDef.h index c3343eabb7..6a85d8923d --- a/openair-cn/NAS/EURECOM-NAS/src/emm/sap/emm_regDef.h +++ b/openair-cn/NAS/UE/EMM/SAP/emm_regDef.h @@ -59,7 +59,6 @@ Description Defines the EMMREG Service Access Point that provides */ typedef enum { _EMMREG_START = 0, -#ifdef NAS_UE _EMMREG_S1_ENABLED, /* S1 mode is enabled */ _EMMREG_S1_DISABLED, /* S1 mode is disabled */ _EMMREG_NO_IMSI, /* The UE is powered on without a valid USIM */ @@ -72,13 +71,6 @@ typedef enum { _EMMREG_ATTACH_FAILED, /* Attach attempt failed */ _EMMREG_ATTACH_EXCEEDED, /* Attach attempt exceeded */ _EMMREG_AUTH_REJ, /* Authentication rejected */ -#endif -#ifdef NAS_MME - _EMMREG_COMMON_PROC_REQ, /* EMM common procedure requested */ - _EMMREG_COMMON_PROC_CNF, /* EMM common procedure successful */ - _EMMREG_COMMON_PROC_REJ, /* EMM common procedure failed */ - _EMMREG_PROC_ABORT, /* EMM procedure aborted */ -#endif _EMMREG_ATTACH_CNF, /* EPS network attach accepted */ _EMMREG_ATTACH_REJ, /* EPS network attach rejected */ _EMMREG_DETACH_INIT, /* Network detach initiated */ @@ -101,7 +93,6 @@ typedef enum { /************************ G L O B A L T Y P E S ************************/ /****************************************************************************/ -#ifdef NAS_UE /* * EMMREG primitive for network registration procedure * ---------------------------------------------------- @@ -110,7 +101,6 @@ typedef struct { int index; /* Index of the currently selected PLMN in the ordered * list of available PLMNs */ } emm_reg_register_t; -#endif /* * EMMREG primitive for attach procedure @@ -130,15 +120,6 @@ typedef struct { int type; /* Network detach type */ } emm_reg_detach_t; -#ifdef NAS_MME -/* - * EMMREG primitive for EMM common procedures - * ------------------------------------------ - */ -typedef struct { - int is_attached; /* UE context attach indicator */ -} emm_reg_common_t; -#endif /* * Structure of EMMREG-SAP primitive @@ -151,12 +132,7 @@ typedef struct { union { emm_reg_attach_t attach; emm_reg_detach_t detach; -#ifdef NAS_UE emm_reg_register_t regist; -#endif -#ifdef NAS_MME - emm_reg_common_t common; -#endif } u; } emm_reg_t; diff --git a/openair-cn/NAS/UE/EMM/SAP/emm_sap.c b/openair-cn/NAS/UE/EMM/SAP/emm_sap.c new file mode 100755 index 0000000000..84184f4f76 --- /dev/null +++ b/openair-cn/NAS/UE/EMM/SAP/emm_sap.c @@ -0,0 +1,143 @@ +/******************************************************************************* + OpenAirInterface + Copyright(c) 1999 - 2014 Eurecom + + OpenAirInterface is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + + OpenAirInterface is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with OpenAirInterface.The full GNU General Public License is + included in this distribution in the file called "COPYING". If not, + see . + + Contact Information + OpenAirInterface Admin: openair_admin@eurecom.fr + OpenAirInterface Tech : openair_tech@eurecom.fr + OpenAirInterface Dev : openair4g-devel@eurecom.fr + + Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. + + *******************************************************************************/ +/***************************************************************************** +Source emm_sap.c + +Version 0.1 + +Date 2012/10/01 + +Product NAS stack + +Subsystem EPS Mobility Management + +Author Frederic Maurel + +Description Defines the EMM Service Access Points at which the EPS + Mobility Management sublayer provides procedures for the + control of security and mobility when the User Equipment + is using the Evolved UTRA Network. + +*****************************************************************************/ + +#include "emm_sap.h" +#include "commonDef.h" +#include "nas_log.h" + +#include "emm_reg.h" +#include "emm_esm.h" +#include "emm_as.h" + +/****************************************************************************/ +/**************** E X T E R N A L D E F I N I T I O N S ****************/ +/****************************************************************************/ + +/****************************************************************************/ +/******************* L O C A L D E F I N I T I O N S *******************/ +/****************************************************************************/ + +/****************************************************************************/ +/****************** E X P O R T E D F U N C T I O N S ******************/ +/****************************************************************************/ + +/**************************************************************************** + ** ** + ** Name: emm_sap_initialize() ** + ** ** + ** Description: Initializes the EMM Service Access Points ** + ** ** + ** Inputs: None ** + ** Others: None ** + ** ** + ** Outputs: None ** + ** Return: None ** + ** Others: NONE ** + ** ** + ***************************************************************************/ +void emm_sap_initialize(void) +{ + LOG_FUNC_IN; + + emm_reg_initialize(); + emm_esm_initialize(); + emm_as_initialize(); + + LOG_FUNC_OUT; +} + +/**************************************************************************** + ** ** + ** Name: emm_sap_send() ** + ** ** + ** Description: Processes the EMM Service Access Point primitive ** + ** ** + ** Inputs: msg: The EMM-SAP primitive to process ** + ** Others: None ** + ** ** + ** Outputs: msg: The EMM-SAP primitive to process ** + ** Return: RETURNok, RETURNerror ** + ** Others: None ** + ** ** + ***************************************************************************/ +int emm_sap_send(emm_sap_t *msg) +{ + int rc = RETURNerror; + + emm_primitive_t primitive = msg->primitive; + + LOG_FUNC_IN; + + /* Check the EMM-SAP primitive */ + if ( (primitive > (emm_primitive_t)EMMREG_PRIMITIVE_MIN) && + (primitive < (emm_primitive_t)EMMREG_PRIMITIVE_MAX) ) { + /* Forward to the EMMREG-SAP */ + msg->u.emm_reg.primitive = primitive; + rc = emm_reg_send(&msg->u.emm_reg); + } else if ( (primitive > (emm_primitive_t)EMMESM_PRIMITIVE_MIN) && + (primitive < (emm_primitive_t)EMMESM_PRIMITIVE_MAX) ) { + /* Forward to the EMMESM-SAP */ + msg->u.emm_esm.primitive = primitive; + rc = emm_esm_send(&msg->u.emm_esm); + } else if ( (primitive > (emm_primitive_t)EMMAS_PRIMITIVE_MIN) && + (primitive < (emm_primitive_t)EMMAS_PRIMITIVE_MAX) ) { + /* Forward to the EMMAS-SAP */ + msg->u.emm_as.primitive = primitive; + rc = emm_as_send(&msg->u.emm_as); + } + else { + LOG_TRACE(WARNING, "EMM-SAP - Out of range primitive (%d)", primitive); + } + + LOG_FUNC_RETURN (rc); +} + +/****************************************************************************/ +/********************* L O C A L F U N C T I O N S *********************/ +/****************************************************************************/ + diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/sap/emm_sap.h b/openair-cn/NAS/UE/EMM/SAP/emm_sap.h old mode 100644 new mode 100755 similarity index 89% rename from openair-cn/NAS/EURECOM-NAS/src/emm/sap/emm_sap.h rename to openair-cn/NAS/UE/EMM/SAP/emm_sap.h index 865bc0e012..c0c38d13a6 --- a/openair-cn/NAS/EURECOM-NAS/src/emm/sap/emm_sap.h +++ b/openair-cn/NAS/UE/EMM/SAP/emm_sap.h @@ -53,7 +53,6 @@ Description Defines the EMM Service Access Points at which the EPS #include "emm_regDef.h" #include "emm_esmDef.h" #include "emm_asDef.h" -#include "emm_cnDef.h" /****************************************************************************/ /********************* G L O B A L C O N S T A N T S *******************/ @@ -71,7 +70,6 @@ Description Defines the EMM Service Access Points at which the EPS */ typedef enum { /* EMMREG-SAP */ -#ifdef NAS_UE EMMREG_S1_ENABLED = _EMMREG_S1_ENABLED, EMMREG_S1_DISABLED = _EMMREG_S1_DISABLED, EMMREG_NO_IMSI = _EMMREG_NO_IMSI, @@ -84,13 +82,6 @@ typedef enum { EMMREG_ATTACH_FAILED = _EMMREG_ATTACH_FAILED, EMMREG_ATTACH_EXCEEDED = _EMMREG_ATTACH_EXCEEDED, EMMREG_AUTH_REJ = _EMMREG_AUTH_REJ, -#endif -#ifdef NAS_MME - EMMREG_COMMON_PROC_REQ = _EMMREG_COMMON_PROC_REQ, - EMMREG_COMMON_PROC_CNF = _EMMREG_COMMON_PROC_CNF, - EMMREG_COMMON_PROC_REJ = _EMMREG_COMMON_PROC_REJ, - EMMREG_PROC_ABORT = _EMMREG_PROC_ABORT, -#endif EMMREG_ATTACH_CNF = _EMMREG_ATTACH_CNF, EMMREG_ATTACH_REJ = _EMMREG_ATTACH_REJ, EMMREG_DETACH_INIT = _EMMREG_DETACH_INIT, @@ -107,11 +98,9 @@ typedef enum { EMMREG_LOWERLAYER_FAILURE = _EMMREG_LOWERLAYER_FAILURE, EMMREG_LOWERLAYER_RELEASE = _EMMREG_LOWERLAYER_RELEASE, /* EMMESM-SAP */ -#ifdef NAS_UE EMMESM_ESTABLISH_REQ = _EMMESM_ESTABLISH_REQ, EMMESM_ESTABLISH_CNF = _EMMESM_ESTABLISH_CNF, EMMESM_ESTABLISH_REJ = _EMMESM_ESTABLISH_REJ, -#endif EMMESM_RELEASE_IND = _EMMESM_RELEASE_IND, EMMESM_UNITDATA_REQ = _EMMESM_UNITDATA_REQ, EMMESM_UNITDATA_IND = _EMMESM_UNITDATA_IND, @@ -132,14 +121,6 @@ typedef enum { EMMAS_CELL_INFO_REQ = _EMMAS_CELL_INFO_REQ, EMMAS_CELL_INFO_RES = _EMMAS_CELL_INFO_RES, EMMAS_CELL_INFO_IND = _EMMAS_CELL_INFO_IND, - -#ifdef NAS_BUILT_IN_EPC - EMMCN_AUTHENTICATION_PARAM_RES = _EMMCN_AUTHENTICATION_PARAM_RES, - EMMCN_AUTHENTICATION_PARAM_FAIL = _EMMCN_AUTHENTICATION_PARAM_FAIL, - EMMCN_DEREGISTER_UE = _EMMCN_DEREGISTER_UE, - EMMCN_PDN_CONNECTIVITY_RES = _EMMCN_PDN_CONNECTIVITY_RES, - EMMCN_PDN_CONNECTIVITY_FAIL = _EMMCN_PDN_CONNECTIVITY_FAIL -#endif } emm_primitive_t; /* @@ -165,15 +146,12 @@ typedef enum { /* * Structure of EPS Mobility Management primitive */ -typedef struct { +typedef struct emm_sap_s { emm_primitive_t primitive; union { emm_reg_t emm_reg; /* EMMREG-SAP primitives */ emm_esm_t emm_esm; /* EMMESM-SAP primitives */ emm_as_t emm_as; /* EMMAS-SAP primitives */ -#if defined(NAS_BUILT_IN_EPC) - emm_cn_t emm_cn; /* EMMCN-SAP primitives */ -#endif } u; } emm_sap_t; diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/sap/emm_send.c b/openair-cn/NAS/UE/EMM/SAP/emm_send.c old mode 100644 new mode 100755 similarity index 70% rename from openair-cn/NAS/EURECOM-NAS/src/emm/sap/emm_send.c rename to openair-cn/NAS/UE/EMM/SAP/emm_send.c index d5fac26fe1..75431ae388 --- a/openair-cn/NAS/EURECOM-NAS/src/emm/sap/emm_send.c +++ b/openair-cn/NAS/UE/EMM/SAP/emm_send.c @@ -146,7 +146,6 @@ int emm_send_detach_accept(const emm_as_data_t *msg, * Functions executed by the UE to send EMM messages to the network * -------------------------------------------------------------------------- */ -#ifdef NAS_UE /**************************************************************************** ** ** ** Name: emm_send_attach_request() ** @@ -904,371 +903,6 @@ int emm_send_security_mode_reject(const emm_as_security_t *msg, LOG_FUNC_RETURN (size); } -#endif // NAS_UE - -/* - * -------------------------------------------------------------------------- - * Functions executed by the MME to send EMM messages to the UE - * -------------------------------------------------------------------------- - */ -#ifdef NAS_MME -/**************************************************************************** - ** ** - ** Name: emm_send_attach_accept() ** - ** ** - ** Description: Builds Attach Accept message ** - ** ** - ** The Attach Accept message is sent by the network to the ** - ** UE to indicate that the corresponding attach request has ** - ** been accepted. ** - ** ** - ** Inputs: msg: The EMMAS-SAP primitive to process ** - ** Others: None ** - ** ** - ** Outputs: emm_msg: The EMM message to be sent ** - ** Return: The size of the EMM message ** - ** Others: None ** - ** ** - ***************************************************************************/ -int emm_send_attach_accept(const emm_as_establish_t *msg, - attach_accept_msg *emm_msg) -{ - LOG_FUNC_IN; - - int size = EMM_HEADER_MAXIMUM_LENGTH; - - LOG_TRACE(INFO, "EMMAS-SAP - Send Attach Accept message"); - LOG_TRACE(INFO, "EMMAS-SAP - size = EMM_HEADER_MAXIMUM_LENGTH(%d)", - size); - - /* Mandatory - Message type */ - emm_msg->messagetype = ATTACH_ACCEPT; - - /* Mandatory - EPS attach result */ - size += EPS_ATTACH_RESULT_MAXIMUM_LENGTH; - emm_msg->epsattachresult = EPS_ATTACH_RESULT_EPS; - - /* Mandatory - T3412 value */ - size += GPRS_TIMER_MAXIMUM_LENGTH; - emm_msg->t3412value.unit = GPRS_TIMER_UNIT_0S; - LOG_TRACE(INFO, "EMMAS-SAP - size += GPRS_TIMER_MAXIMUM_LENGTH(%d) (%d)", - GPRS_TIMER_MAXIMUM_LENGTH, size); - - /* Mandatory - Tracking area identity list */ - size += TRACKING_AREA_IDENTITY_LIST_MINIMUM_LENGTH; - emm_msg->tailist.typeoflist = - TRACKING_AREA_IDENTITY_LIST_ONE_PLMN_CONSECUTIVE_TACS; - emm_msg->tailist.numberofelements = msg->n_tacs; - emm_msg->tailist.mccdigit1 = msg->UEid.guti->gummei.plmn.MCCdigit1; - emm_msg->tailist.mccdigit2 = msg->UEid.guti->gummei.plmn.MCCdigit2; - emm_msg->tailist.mccdigit3 = msg->UEid.guti->gummei.plmn.MCCdigit3; - emm_msg->tailist.mncdigit1 = msg->UEid.guti->gummei.plmn.MNCdigit1; - emm_msg->tailist.mncdigit2 = msg->UEid.guti->gummei.plmn.MNCdigit2; - emm_msg->tailist.mncdigit3 = msg->UEid.guti->gummei.plmn.MNCdigit3; - emm_msg->tailist.tac = msg->tac; - LOG_TRACE(INFO, - "EMMAS-SAP - size += "\ - "TRACKING_AREA_IDENTITY_LIST_MINIMUM_LENGTH(%d) (%d)", - TRACKING_AREA_IDENTITY_LIST_MINIMUM_LENGTH, - size); - - /* Mandatory - ESM message container */ - size += ESM_MESSAGE_CONTAINER_MINIMUM_LENGTH + msg->NASmsg.length; - emm_msg->esmmessagecontainer.esmmessagecontainercontents = msg->NASmsg; - LOG_TRACE(INFO, - "EMMAS-SAP - size += "\ - "ESM_MESSAGE_CONTAINER_MINIMUM_LENGTH(%d) (%d)", - ESM_MESSAGE_CONTAINER_MINIMUM_LENGTH, - size); - - /* Optional - GUTI */ - if (msg->new_guti) { - size += EPS_MOBILE_IDENTITY_MAXIMUM_LENGTH; - emm_msg->presencemask |= ATTACH_ACCEPT_GUTI_PRESENT; - emm_msg->guti.guti.typeofidentity = EPS_MOBILE_IDENTITY_GUTI; - emm_msg->guti.guti.oddeven = EPS_MOBILE_IDENTITY_EVEN; - emm_msg->guti.guti.mmegroupid = msg->new_guti->gummei.MMEgid; - emm_msg->guti.guti.mmecode = msg->new_guti->gummei.MMEcode; - emm_msg->guti.guti.mtmsi = msg->new_guti->m_tmsi; - emm_msg->guti.guti.mccdigit1 = msg->new_guti->gummei.plmn.MCCdigit1; - emm_msg->guti.guti.mccdigit2 = msg->new_guti->gummei.plmn.MCCdigit2; - emm_msg->guti.guti.mccdigit3 = msg->new_guti->gummei.plmn.MCCdigit3; - emm_msg->guti.guti.mncdigit1 = msg->new_guti->gummei.plmn.MNCdigit1; - emm_msg->guti.guti.mncdigit2 = msg->new_guti->gummei.plmn.MNCdigit2; - emm_msg->guti.guti.mncdigit3 = msg->new_guti->gummei.plmn.MNCdigit3; - LOG_TRACE(INFO, - "EMMAS-SAP - size += "\ - "EPS_MOBILE_IDENTITY_MAXIMUM_LENGTH(%d) (%d)", - EPS_MOBILE_IDENTITY_MAXIMUM_LENGTH, - size); - } - - LOG_FUNC_RETURN (size); -} - -/**************************************************************************** - ** ** - ** Name: emm_send_attach_reject() ** - ** ** - ** Description: Builds Attach Reject message ** - ** ** - ** The Attach Reject message is sent by the network to the ** - ** UE to indicate that the corresponding attach request has ** - ** been rejected. ** - ** ** - ** Inputs: msg: The EMMAS-SAP primitive to process ** - ** Others: None ** - ** ** - ** Outputs: emm_msg: The EMM message to be sent ** - ** Return: The size of the EMM message ** - ** Others: None ** - ** ** - ***************************************************************************/ -int emm_send_attach_reject(const emm_as_establish_t *msg, - attach_reject_msg *emm_msg) -{ - LOG_FUNC_IN; - - int size = EMM_HEADER_MAXIMUM_LENGTH; - - LOG_TRACE(INFO, "EMMAS-SAP - Send Attach Reject message (cause=%d)", - msg->emm_cause); - - /* Mandatory - Message type */ - emm_msg->messagetype = ATTACH_REJECT; - - /* Mandatory - EMM cause */ - size += EMM_CAUSE_MAXIMUM_LENGTH; - emm_msg->emmcause = msg->emm_cause; - - /* Optional - ESM message container */ - if (msg->NASmsg.length > 0) { - size += ESM_MESSAGE_CONTAINER_MINIMUM_LENGTH + msg->NASmsg.length; - emm_msg->presencemask |= ATTACH_REJECT_ESM_MESSAGE_CONTAINER_PRESENT; - emm_msg->esmmessagecontainer.esmmessagecontainercontents = msg->NASmsg; - } - - LOG_FUNC_RETURN (size); -} - -/**************************************************************************** - ** ** - ** Name: emm_send_tracking_area_update_reject() ** - ** ** - ** Description: Builds Tracking Area Update Reject message ** - ** ** - ** The Tracking Area Update Reject message is sent by the ** - ** network to the UE to indicate that the corresponding ** - ** tracking area update has been rejected. ** - ** ** - ** Inputs: msg: The EMMAS-SAP primitive to process ** - ** Others: None ** - ** ** - ** Outputs: emm_msg: The EMM message to be sent ** - ** Return: The size of the EMM message ** - ** Others: None ** - ** ** - ***************************************************************************/ -int emm_send_tracking_area_update_reject(const emm_as_establish_t *msg, - tracking_area_update_reject_msg *emm_msg) -{ - LOG_FUNC_IN; - - int size = EMM_HEADER_MAXIMUM_LENGTH; - - LOG_TRACE(INFO, "EMMAS-SAP - Send Tracking Area Update Reject message (cause=%d)", - msg->emm_cause); - - /* Mandatory - Message type */ - emm_msg->messagetype = TRACKING_AREA_UPDATE_REJECT; - - /* Mandatory - EMM cause */ - size += EMM_CAUSE_MAXIMUM_LENGTH; - emm_msg->emmcause = msg->emm_cause; - - LOG_FUNC_RETURN (size); -} - -/**************************************************************************** - ** ** - ** Name: emm_send_identity_request() ** - ** ** - ** Description: Builds Identity Request message ** - ** ** - ** The Identity Request message is sent by the network to ** - ** the UE to request the UE to provide the specified identi- ** - ** ty. ** - ** ** - ** Inputs: msg: The EMMAS-SAP primitive to process ** - ** Others: None ** - ** ** - ** Outputs: emm_msg: The EMM message to be sent ** - ** Return: The size of the EMM message ** - ** Others: None ** - ** ** - ***************************************************************************/ -int emm_send_identity_request(const emm_as_security_t *msg, - identity_request_msg *emm_msg) -{ - LOG_FUNC_IN; - - int size = EMM_HEADER_MAXIMUM_LENGTH; - - LOG_TRACE(INFO, "EMMAS-SAP - Send Identity Request message"); - - /* Mandatory - Message type */ - emm_msg->messagetype = IDENTITY_REQUEST; - - /* Mandatory - Identity type 2 */ - size += IDENTITY_TYPE_2_MAXIMUM_LENGTH; - - if (msg->identType == EMM_IDENT_TYPE_IMSI) { - emm_msg->identitytype = IDENTITY_TYPE_2_IMSI; - } else if (msg->identType == EMM_IDENT_TYPE_TMSI) { - emm_msg->identitytype = IDENTITY_TYPE_2_TMSI; - } else if (msg->identType == EMM_IDENT_TYPE_IMEI) { - emm_msg->identitytype = IDENTITY_TYPE_2_IMEI; - } else { - /* All other values are interpreted as "IMSI" */ - emm_msg->identitytype = IDENTITY_TYPE_2_IMSI; - } - - LOG_FUNC_RETURN (size); -} - -/**************************************************************************** - ** ** - ** Name: emm_send_authentication_request() ** - ** ** - ** Description: Builds Authentication Request message ** - ** ** - ** The Authentication Request message is sent by the network ** - ** to the UE to initiate authentication of the UE identity. ** - ** ** - ** Inputs: msg: The EMMAS-SAP primitive to process ** - ** Others: None ** - ** ** - ** Outputs: emm_msg: The EMM message to be sent ** - ** Return: The size of the EMM message ** - ** Others: None ** - ** ** - ***************************************************************************/ -int emm_send_authentication_request(const emm_as_security_t *msg, - authentication_request_msg *emm_msg) -{ - LOG_FUNC_IN; - - int size = EMM_HEADER_MAXIMUM_LENGTH; - - LOG_TRACE(INFO, "EMMAS-SAP - Send Authentication Request message"); - - /* Mandatory - Message type */ - emm_msg->messagetype = AUTHENTICATION_REQUEST; - - /* Mandatory - NAS key set identifier */ - size += NAS_KEY_SET_IDENTIFIER_MAXIMUM_LENGTH; - emm_msg->naskeysetidentifierasme.tsc = NAS_KEY_SET_IDENTIFIER_NATIVE; - emm_msg->naskeysetidentifierasme.naskeysetidentifier = msg->ksi; - - /* Mandatory - Authentication parameter RAND */ - size += AUTHENTICATION_PARAMETER_RAND_MAXIMUM_LENGTH; - emm_msg->authenticationparameterrand.rand = *msg->rand; - - /* Mandatory - Authentication parameter AUTN */ - size += AUTHENTICATION_PARAMETER_AUTN_MAXIMUM_LENGTH; - emm_msg->authenticationparameterautn.autn = *msg->autn; - - LOG_FUNC_RETURN (size); -} - -/**************************************************************************** - ** ** - ** Name: emm_send_authentication_reject() ** - ** ** - ** Description: Builds Authentication Reject message ** - ** ** - ** The Authentication Reject message is sent by the network ** - ** to the UE to indicate that the authentication procedure ** - ** has failed and that the UE shall abort all activities. ** - ** ** - ** Inputs: None ** - ** Others: None ** - ** ** - ** Outputs: emm_msg: The EMM message to be sent ** - ** Return: The size of the EMM message ** - ** Others: None ** - ** ** - ***************************************************************************/ -int emm_send_authentication_reject(authentication_reject_msg *emm_msg) -{ - LOG_FUNC_IN; - - int size = EMM_HEADER_MAXIMUM_LENGTH; - - LOG_TRACE(INFO, "EMMAS-SAP - Send Authentication Reject message"); - - /* Mandatory - Message type */ - emm_msg->messagetype = AUTHENTICATION_REJECT; - - LOG_FUNC_RETURN (size); -} - -/**************************************************************************** - ** ** - ** Name: emm_send_security_mode_command() ** - ** ** - ** Description: Builds Security Mode Command message ** - ** ** - ** The Security Mode Command message is sent by the network ** - ** to the UE to establish NAS signalling security. ** - ** ** - ** Inputs: msg: The EMMAS-SAP primitive to process ** - ** Others: None ** - ** ** - ** Outputs: emm_msg: The EMM message to be sent ** - ** Return: The size of the EMM message ** - ** Others: None ** - ** ** - ***************************************************************************/ -int emm_send_security_mode_command(const emm_as_security_t *msg, - security_mode_command_msg *emm_msg) -{ - LOG_FUNC_IN; - - int size = EMM_HEADER_MAXIMUM_LENGTH; - - LOG_TRACE(INFO, "EMMAS-SAP - Send Security Mode Command message"); - - /* Mandatory - Message type */ - emm_msg->messagetype = SECURITY_MODE_COMMAND; - - /* Selected NAS security algorithms */ - size += NAS_SECURITY_ALGORITHMS_MAXIMUM_LENGTH; - emm_msg->selectednassecurityalgorithms.typeofcipheringalgorithm = - msg->selected_eea; - emm_msg->selectednassecurityalgorithms.typeofintegrityalgorithm = - msg->selected_eia; - - /* NAS key set identifier */ - size += NAS_KEY_SET_IDENTIFIER_MAXIMUM_LENGTH; - emm_msg->naskeysetidentifier.tsc = NAS_KEY_SET_IDENTIFIER_NATIVE; - emm_msg->naskeysetidentifier.naskeysetidentifier = msg->ksi; - - /* Replayed UE security capabilities */ - size += UE_SECURITY_CAPABILITY_MAXIMUM_LENGTH; - emm_msg->replayeduesecuritycapabilities.eea = msg->eea; - emm_msg->replayeduesecuritycapabilities.eia = msg->eia; - emm_msg->replayeduesecuritycapabilities.umts_present = msg->umts_present; - emm_msg->replayeduesecuritycapabilities.gprs_present = msg->gprs_present; - - emm_msg->replayeduesecuritycapabilities.uea = msg->uea; - emm_msg->replayeduesecuritycapabilities.uia = msg->uia; - emm_msg->replayeduesecuritycapabilities.gea = msg->gea; - - LOG_FUNC_RETURN (size); -} - -#endif // NAS_MME /****************************************************************************/ /********************* L O C A L F U N C T I O N S *********************/ diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/sap/emm_send.h b/openair-cn/NAS/UE/EMM/SAP/emm_send.h old mode 100644 new mode 100755 similarity index 78% rename from openair-cn/NAS/EURECOM-NAS/src/emm/sap/emm_send.h rename to openair-cn/NAS/UE/EMM/SAP/emm_send.h index 72791b028e..ea90bd1775 --- a/openair-cn/NAS/EURECOM-NAS/src/emm/sap/emm_send.h +++ b/openair-cn/NAS/UE/EMM/SAP/emm_send.h @@ -53,7 +53,6 @@ Description Defines functions executed at the EMMAS Service Access #include "DetachRequest.h" #include "DetachAccept.h" -#ifdef NAS_UE #include "AttachRequest.h" #include "AttachComplete.h" #include "TrackingAreaUpdateRequest.h" @@ -67,23 +66,7 @@ Description Defines functions executed at the EMMAS Service Access #include "NASSecurityModeComplete.h" #include "SecurityModeReject.h" #include "UplinkNasTransport.h" -#endif -#ifdef NAS_MME -#include "AttachAccept.h" -#include "AttachReject.h" -#include "TrackingAreaUpdateAccept.h" -#include "TrackingAreaUpdateReject.h" -#include "ServiceReject.h" -#include "GutiReallocationCommand.h" -#include "AuthenticationRequest.h" -#include "AuthenticationReject.h" -#include "IdentityRequest.h" -#include "NASSecurityModeCommand.h" -#include "EmmInformation.h" -#include "DownlinkNasTransport.h" -#include "CsServiceNotification.h" -#endif #include "emm_asDef.h" @@ -117,7 +100,6 @@ int emm_send_detach_accept(const emm_as_data_t *, detach_accept_msg *); * Functions executed by the UE to send EMM messages to the network * -------------------------------------------------------------------------- */ -#ifdef NAS_UE int emm_send_attach_request(const emm_as_establish_t *, attach_request_msg *); int emm_send_attach_complete(const emm_as_data_t *, attach_complete_msg *); @@ -145,26 +127,6 @@ int emm_send_security_mode_complete(const emm_as_security_t *, security_mode_complete_msg *); int emm_send_security_mode_reject(const emm_as_security_t *, security_mode_reject_msg *); -#endif -/* - * -------------------------------------------------------------------------- - * Functions executed by the MME to send EMM messages to the UE - * -------------------------------------------------------------------------- - */ -#ifdef NAS_MME -int emm_send_attach_accept(const emm_as_establish_t *, attach_accept_msg *); -int emm_send_attach_reject(const emm_as_establish_t *, attach_reject_msg *); - -int emm_send_tracking_area_update_reject(const emm_as_establish_t *msg, - tracking_area_update_reject_msg *emm_msg); - -int emm_send_identity_request(const emm_as_security_t *, identity_request_msg *); -int emm_send_authentication_request(const emm_as_security_t *, - authentication_request_msg *); -int emm_send_authentication_reject(authentication_reject_msg *); -int emm_send_security_mode_command(const emm_as_security_t *, - security_mode_command_msg *); -#endif #endif /* __EMM_SEND_H__*/ diff --git a/openair-cn/NAS/UE/EMM/SecurityModeControl.c b/openair-cn/NAS/UE/EMM/SecurityModeControl.c new file mode 100755 index 0000000000..359ce1ea2f --- /dev/null +++ b/openair-cn/NAS/UE/EMM/SecurityModeControl.c @@ -0,0 +1,549 @@ +/******************************************************************************* + OpenAirInterface + Copyright(c) 1999 - 2014 Eurecom + + OpenAirInterface is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + + OpenAirInterface is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with OpenAirInterface.The full GNU General Public License is + included in this distribution in the file called "COPYING". If not, + see . + + Contact Information + OpenAirInterface Admin: openair_admin@eurecom.fr + OpenAirInterface Tech : openair_tech@eurecom.fr + OpenAirInterface Dev : openair4g-devel@eurecom.fr + + Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. + + *******************************************************************************/ +/***************************************************************************** +Source SecurityModeControl.c + +Version 0.1 + +Date 2013/04/22 + +Product NAS stack + +Subsystem Template body file + +Author Frederic Maurel + +Description Defines the security mode control EMM procedure executed by the + Non-Access Stratum. + + The purpose of the NAS security mode control procedure is to + take an EPS security context into use, and initialise and start + NAS signalling security between the UE and the MME with the + corresponding EPS NAS keys and EPS security algorithms. + + Furthermore, the network may also initiate a SECURITY MODE COM- + MAND in order to change the NAS security algorithms for a cur- + rent EPS security context already in use. + +*****************************************************************************/ + +#include // malloc, free +#include // memcpy +#include + +#include "emm_proc.h" +#include "nas_log.h" +#include "nas_timer.h" + +#include "emmData.h" + +#include "emm_sap.h" +#include "emm_cause.h" + +#include "UeSecurityCapability.h" + +# include "assertions.h" +#include "secu_defs.h" +#include "msc.h" + +/****************************************************************************/ +/**************** E X T E R N A L D E F I N I T I O N S ****************/ +/****************************************************************************/ + +/****************************************************************************/ +/******************* L O C A L D E F I N I T I O N S *******************/ +/****************************************************************************/ + +/* + * -------------------------------------------------------------------------- + * Internal data handled by the security mode control procedure in the UE + * -------------------------------------------------------------------------- + */ +static int _security_kdf(const OctetString *kasme, OctetString *key, + uint8_t algo_dist, uint8_t algo_id); + +static int _security_knas_enc(const OctetString *kasme, OctetString *knas_enc, + uint8_t eia); +static int _security_knas_int(const OctetString *kasme, OctetString *knas_int, + uint8_t eea); +static int _security_kenb(const OctetString *kasme, OctetString *kenb, + uint32_t count); + +/* + * Internal data used for security mode control procedure + */ +static struct { + OctetString kenb; /* eNodeB security key */ +} _security_data; + +static void _security_release(emm_security_context_t *ctx); + +/* + * -------------------------------------------------------------------------- + * Internal data handled by the security mode control procedure in the MME + * -------------------------------------------------------------------------- + */ + +/****************************************************************************/ +/****************** E X P O R T E D F U N C T I O N S ******************/ +/****************************************************************************/ + +/* + * -------------------------------------------------------------------------- + * Security mode control procedure executed by the UE + * -------------------------------------------------------------------------- + */ +/**************************************************************************** + ** ** + ** Name: emm_proc_security_mode_command() ** + ** ** + ** Description: Performs the MME requested security mode control proce- ** + ** dure. ** + ** ** + ** 3GPP TS 24.301, section 5.4.3.3 ** + ** Upon receiving the SECURITY MODE COMMAND message, the UE ** + ** shall check whether the message can be accepted or not. ** + ** If accepted the UE shall send a SECURITY MODE COMPLETE ** + ** message integrity protected with the selected NAS inte- ** + ** grity algorithm and ciphered with the selected NAS ciphe- ** + ** ring algorithm. ** + ** ** + ** Inputs: native_ksi: TRUE if the security context is of type ** + ** native (for KSIASME) ** + ** ksi: The NAS ket sey identifier ** + ** seea: Selected EPS cyphering algorithm ** + ** seia: Selected EPS integrity algorithm ** + ** reea: Replayed EPS cyphering algorithm ** + ** reia: Replayed EPS integrity algorithm ** + ** Others: None ** + ** ** + ** Outputs: None ** + ** Return: RETURNok, RETURNerror ** + ** Others: None ** + ** ** + ***************************************************************************/ +int emm_proc_security_mode_command(int native_ksi, int ksi, + int seea, int seia, int reea, int reia) +{ + LOG_FUNC_IN; + + int rc = RETURNerror; + int emm_cause = EMM_CAUSE_SUCCESS; + int security_context_is_new = FALSE; + + LOG_TRACE(INFO, "EMM-PROC - Security mode control requested (ksi=%d)", + ksi); + + /* Delete any previously stored RAND and RES and stop timer T3416 */ + (void) emm_proc_authentication_delete(); + + /* + * Check the replayed UE security capabilities + */ + uint8_t eea = (0x80 >> _emm_data.security->capability.eps_encryption); + uint8_t eia = (0x80 >> _emm_data.security->capability.eps_integrity); + + if ( (reea != eea) || (reia != eia) ) { + LOG_TRACE(WARNING, "EMM-PROC - Replayed UE security capabilities " + "rejected"); + emm_cause = EMM_CAUSE_UE_SECURITY_MISMATCH; + + /* XXX - For testing purpose UE always accepts EIA0 + * The UE shall accept "null integrity protection algorithm" EIA0 only + * if a PDN connection for emergency bearer services is established or + * the UE is establishing a PDN connection for emergency bearer services + */ + } + /* + * Check the non-current EPS security context + */ + else if (_emm_data.non_current == NULL) { + LOG_TRACE(WARNING, "EMM-PROC - Non-current EPS security context " + "is not valid"); + emm_cause = EMM_CAUSE_SECURITY_MODE_REJECTED; + } + /* + * Update the non-current EPS security context + */ + else { + LOG_TRACE(INFO, "EMM-PROC - Update the non-current EPS security context seea=%u seia=%u", seea, seia); + /* Update selected cyphering and integrity algorithms */ + //LG COMENTED _emm_data.non_current->capability.encryption = seea; + //LG COMENTED _emm_data.non_current->capability.integrity = seia; + + _emm_data.non_current->selected_algorithms.encryption = seea; + _emm_data.non_current->selected_algorithms.integrity = seia; + + /* Derive the NAS cyphering key */ + if (_emm_data.non_current->knas_enc.value == NULL) { + _emm_data.non_current->knas_enc.value = + (uint8_t *)calloc(1,AUTH_KNAS_ENC_SIZE); + _emm_data.non_current->knas_enc.length = AUTH_KNAS_ENC_SIZE; + } + + if (_emm_data.non_current->knas_enc.value != NULL) { + LOG_TRACE(INFO, "EMM-PROC - Update the non-current EPS security context knas_enc"); + rc = _security_knas_enc(&_emm_data.non_current->kasme, + &_emm_data.non_current->knas_enc, seea); + } + + /* Derive the NAS integrity key */ + if (_emm_data.non_current->knas_int.value == NULL) { + _emm_data.non_current->knas_int.value = + (uint8_t *)calloc(1,AUTH_KNAS_INT_SIZE); + _emm_data.non_current->knas_int.length = AUTH_KNAS_INT_SIZE; + } + + if (_emm_data.non_current->knas_int.value != NULL) { + if (rc != RETURNerror) { + LOG_TRACE(INFO, "EMM-PROC - Update the non-current EPS security context knas_int"); + rc = _security_knas_int(&_emm_data.non_current->kasme, + &_emm_data.non_current->knas_int, seia); + } + } + + /* Derive the eNodeB key */ + if (_security_data.kenb.value == NULL) { + _security_data.kenb.value = (uint8_t *)calloc(1,AUTH_KENB_SIZE); + _security_data.kenb.length = AUTH_KENB_SIZE; + } + + if (_security_data.kenb.value != NULL) { + if (rc != RETURNerror) { + LOG_TRACE(INFO, "EMM-PROC - Update the non-current EPS security context kenb"); + // LG COMMENT rc = _security_kenb(&_emm_data.security->kasme, + rc = _security_kenb(&_emm_data.non_current->kasme, + &_security_data.kenb, + *(uint32_t *)(&_emm_data.non_current->ul_count)); + } + } + + /* + * NAS security mode command accepted by the UE + */ + if (rc != RETURNerror) { + LOG_TRACE(INFO, "EMM-PROC - NAS security mode command accepted by the UE"); + + /* Update the current EPS security context */ + if ( native_ksi && (_emm_data.security->type != EMM_KSI_NATIVE) ) { + /* The type of security context flag included in the SECURITY + * MODE COMMAND message is set to "native security context" and + * the UE has a mapped EPS security context as the current EPS + * security context */ + if ( (_emm_data.non_current->type == EMM_KSI_NATIVE) && + (_emm_data.non_current->eksi == ksi) ) { + /* The KSI matches the non-current native EPS security + * context; the UE shall take the non-current native EPS + * security context into use which then becomes the + * current native EPS security context and delete the + * mapped EPS security context */ + LOG_TRACE(INFO, + "EMM-PROC - Update Current security context"); + /* Release non-current security context */ + _security_release(_emm_data.security); + _emm_data.security = _emm_data.non_current; + /* Reset the uplink NAS COUNT counter */ + _emm_data.security->ul_count.overflow = 0; + _emm_data.security->ul_count.seq_num = 0; + /* Set new security context indicator */ + security_context_is_new = TRUE; + } + } + + if ( !native_ksi && (_emm_data.security->type != EMM_KSI_NATIVE) ) { + /* The type of security context flag included in the SECURITY + * MODE COMMAND message is set to "mapped security context" and + * the UE has a mapped EPS security context as the current EPS + * security context */ + if (ksi != _emm_data.security->eksi) { + /* The KSI does not match the current EPS security context; + * the UE shall reset the uplink NAS COUNT counter */ + LOG_TRACE(INFO, + "EMM-PROC - Reset uplink NAS COUNT counter"); + _emm_data.security->ul_count.overflow = 0; + _emm_data.security->ul_count.seq_num = 0; + } + } + + _emm_data.security->selected_algorithms.encryption = seea; + _emm_data.security->selected_algorithms.integrity = seia; + + } + /* + * NAS security mode command not accepted by the UE + */ + else { + /* Setup EMM cause code */ + emm_cause = EMM_CAUSE_SECURITY_MODE_REJECTED; + + /* Release security mode control internal data */ + if (_security_data.kenb.value) { + free(_security_data.kenb.value); + _security_data.kenb.value = NULL; + _security_data.kenb.length = 0; + } + } + } + + /* Setup EMM procedure handler to be executed upon receiving + * lower layer notification */ + rc = emm_proc_lowerlayer_initialize(NULL, NULL, NULL, NULL); + + if (rc != RETURNok) { + LOG_TRACE(WARNING, + "EMM-PROC - Failed to initialize EMM procedure handler"); + LOG_FUNC_RETURN (RETURNerror); + } + + /* + * Notify EMM-AS SAP that Security Mode response message has to be sent + * to the network + */ + emm_sap_t emm_sap; + emm_sap.primitive = EMMAS_SECURITY_RES; + emm_sap.u.emm_as.u.security.guti = _emm_data.guti; + emm_sap.u.emm_as.u.security.ueid = 0; + emm_sap.u.emm_as.u.security.msgType = EMM_AS_MSG_TYPE_SMC; + emm_sap.u.emm_as.u.security.emm_cause = emm_cause; + /* Setup EPS NAS security data */ + emm_as_set_security_data(&emm_sap.u.emm_as.u.security.sctx, + _emm_data.security, security_context_is_new, TRUE); + rc = emm_sap_send(&emm_sap); + + LOG_FUNC_RETURN (rc); +} + + +/****************************************************************************/ +/********************* L O C A L F U N C T I O N S *********************/ +/****************************************************************************/ + +/* + * -------------------------------------------------------------------------- + * UE specific local functions + * -------------------------------------------------------------------------- + */ + +/**************************************************************************** + ** ** + ** Name: _security_release() ** + ** ** + ** Description: Releases the given EPS NAS security context ** + ** ** + ** Inputs: ctx: The EPS NAS security context to release ** + ** Others: None ** + ** ** + ** Outputs: None ** + ** Return: None ** + ** Others: None ** + ** ** + ***************************************************************************/ +static void _security_release(emm_security_context_t *ctx) +{ + LOG_FUNC_IN; + + if (ctx) { + /* Release Kasme security key */ + if (ctx->kasme.value) { + free(ctx->kasme.value); + ctx->kasme.value = NULL; + ctx->kasme.length = 0; + } + + /* Release NAS cyphering key */ + if (ctx->knas_enc.value) { + free(ctx->knas_enc.value); + ctx->knas_enc.value = NULL; + ctx->knas_enc.length = 0; + } + + /* Release NAS integrity key */ + if (ctx->knas_int.value) { + free(ctx->knas_int.value); + ctx->knas_int.value = NULL; + ctx->knas_int.length = 0; + } + + /* Release the NAS security context */ + free(ctx); + } + + LOG_FUNC_OUT; +} + +/**************************************************************************** + ** ** + ** Name: _security_knas_enc() ** + ** ** + ** Description: Algorithm Key generation function used for the derivation ** + ** of NAS encryption key Knas-enc from the Kasme. ** + ** ** + ** 3GPP TS 33.401, Annex A.7 ** + ** ** + ** Inputs: kasme: Key Access Security Management Entity ** + ** eea: Cyphering algorithm identity ** + ** Others: None ** + ** ** + ** Outputs: knas_enc: Derived key for NAS cyphering algorithm ** + ** Return: RETURNok, RETURNerror ** + ** Others: None ** + ** ** + ***************************************************************************/ +static int _security_knas_enc(const OctetString *kasme, OctetString *knas_enc, + uint8_t eea) +{ + LOG_FUNC_IN; + LOG_TRACE(INFO, "%s with algo dist %d algo id %d", __FUNCTION__,0x01, eea); + LOG_FUNC_RETURN (_security_kdf(kasme, knas_enc, 0x01, eea)); +} + +/**************************************************************************** + ** ** + ** Name: _security_knas_int() ** + ** ** + ** Description: Algorithm Key generation function used for the derivation ** + ** of NAS integrity key Knas-int from the Kasme. ** + ** ** + ** 3GPP TS 33.401, Annex A.7 ** + ** ** + ** Inputs: kasme: Key Access Security Management Entity ** + ** eia: Integrity algorithm identity ** + ** Others: None ** + ** ** + ** Outputs: knas_int: Derived key for NAS integrity algorithm ** + ** Return: RETURNok, RETURNerror ** + ** Others: None ** + ** ** + ***************************************************************************/ +static int _security_knas_int(const OctetString *kasme, OctetString *knas_int, + uint8_t eia) +{ + LOG_FUNC_IN; + LOG_TRACE(INFO, "%s with algo dist %d algo id %d", __FUNCTION__,0x02, eia); + LOG_FUNC_RETURN (_security_kdf(kasme, knas_int, 0x02, eia)); +} + +/**************************************************************************** + ** ** + ** Name: _security_kenb() ** + ** ** + ** Description: Computes the eNodeB key from Kasme and the given value of ** + ** uplink NAS counter. ** + ** ** + ** 3GPP TS 33.401, Annex A.3 ** + ** ** + ** Inputs: kasme: Key Access Security Management Entity ** + ** count: Uplink NAS counter value ** + ** Others: None ** + ** ** + ** Outputs: kenb: eNodeB security key ** + ** Return: RETURNok, RETURNerror ** + ** Others: None ** + ** ** + ***************************************************************************/ +static int _security_kenb(const OctetString *kasme, OctetString *kenb, + uint32_t count) +{ + /* Compute the KDF input parameter + * S = FC(0x11) || UL NAS Count || 0x00 0x04 + */ + uint8_t input[32]; + // uint16_t length = 4; + // int offset = 0; + + LOG_TRACE(INFO, "%s with count= %d", __FUNCTION__, count); + memset(input, 0, 32); + input[0] = 0x11; + // P0 + input[1] = count >> 24; + input[2] = (uint8_t)(count >> 16); + input[3] = (uint8_t)(count >> 8); + input[4] = (uint8_t)count; + // L0 + input[5] = 0; + input[6] = 4; + + kdf(kasme->value, 32, input, 7, kenb->value, 32); + kenb->length = 32; + return (RETURNok); +} + +/**************************************************************************** + ** ** + ** Name: _security_kdf() ** + ** ** + ** Description: Algorithm Key generation function used for the derivation ** + ** of keys for NAS integrity and NAS encryption algorithms ** + ** from Kasme, algorithm types and algorithm identities. ** + ** ** + ** 3GPP TS 33.401, Annex A.7 ** + ** ** + ** Inputs: kasme: Key Access Security Management Entity ** + ** algo_dist: Algorithm type distinguisher ** + ** algo_id: Algorithm identity ** + ** Others: None ** + ** ** + ** Outputs: key: Derived key for NAS security protection ** + ** Return: RETURNok, RETURNerror ** + ** Others: None ** + ** ** + ***************************************************************************/ +static int _security_kdf(const OctetString *kasme, OctetString *key, + uint8_t algo_dist, uint8_t algo_id) +{ + /* Compute the KDF input parameter + * S = FC(0x15) || Algorithm distinguisher || 0x00 0x01 + || Algorithm identity || 0x00 0x01 + */ + uint8_t input[32]; + uint8_t output[32]; + LOG_TRACE(DEBUG, "%s:%u output key mem %p lenth %u", + __FUNCTION__, __LINE__, + key->value, + key->length); + memset(input, 0, 32); + // FC + input[0] = 0x15; + // P0 = Algorithm distinguisher + input[1] = algo_dist; + // L0 = 0x00 01 + input[2] = 0x00; + input[3] = 0x01; + // P1 = Algorithm identity + input[4] = algo_id; + // L1 = length of Algorithm identity 0x00 0x01 + input[5] = 0x00; + input[6] = 0x01; + + /* Compute the derived key */ + kdf(kasme->value, kasme->length, input, 7, output, 32); + memcpy(key->value, &output[31 - key->length + 1], key->length); + return (RETURNok); +} + diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/ServiceRequestHdl.c b/openair-cn/NAS/UE/EMM/ServiceRequestHdl.c old mode 100644 new mode 100755 similarity index 98% rename from openair-cn/NAS/EURECOM-NAS/src/emm/ServiceRequestHdl.c rename to openair-cn/NAS/UE/EMM/ServiceRequestHdl.c index c00653823c..6f74b4fbbe --- a/openair-cn/NAS/EURECOM-NAS/src/emm/ServiceRequestHdl.c +++ b/openair-cn/NAS/UE/EMM/ServiceRequestHdl.c @@ -74,20 +74,17 @@ Description Defines the service request EMM procedure executed by the * Internal data handled by the service request procedure in the UE * -------------------------------------------------------------------------- */ -#ifdef NAS_UE /* * Timer handlers */ void *_emm_service_t3417_handler(void *); -#endif // NAS_UE /* * -------------------------------------------------------------------------- * Internal data handled by the service request procedure in the MME * -------------------------------------------------------------------------- */ -#ifdef NAS_MME -#endif // NAS_MME + /****************************************************************************/ /****************** E X P O R T E D F U N C T I O N S ******************/ @@ -97,7 +94,6 @@ void *_emm_service_t3417_handler(void *); /********************* L O C A L F U N C T I O N S *********************/ /****************************************************************************/ -#ifdef NAS_UE /* * -------------------------------------------------------------------------- * Timer handlers @@ -132,4 +128,3 @@ void *_emm_service_t3417_handler(void *args) LOG_FUNC_RETURN(NULL); } -#endif // NAS_UE diff --git a/openair-cn/NAS/UE/EMM/TrackingAreaUpdate.c b/openair-cn/NAS/UE/EMM/TrackingAreaUpdate.c new file mode 100755 index 0000000000..fbec3f7060 --- /dev/null +++ b/openair-cn/NAS/UE/EMM/TrackingAreaUpdate.c @@ -0,0 +1,132 @@ +/******************************************************************************* + OpenAirInterface + Copyright(c) 1999 - 2014 Eurecom + + OpenAirInterface is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + + OpenAirInterface is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with OpenAirInterface.The full GNU General Public License is + included in this distribution in the file called "COPYING". If not, + see . + + Contact Information + OpenAirInterface Admin: openair_admin@eurecom.fr + OpenAirInterface Tech : openair_tech@eurecom.fr + OpenAirInterface Dev : openair4g-devel@eurecom.fr + + Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. + + *******************************************************************************/ +/***************************************************************************** +Source TrackingAreaUpdate.c + +Version 0.1 + +Date 2013/05/07 + +Product NAS stack + +Subsystem EPS Mobility Management + +Author Frederic Maurel + +Description Defines the tracking area update EMM procedure executed by the + Non-Access Stratum. + + The tracking area updating procedure is always initiated by the + UE and is used to update the registration of the actual tracking + area of a UE in the network, to periodically notify the availa- + bility of the UE to the network, for MME load balancing, to up- + date certain UE specific parameters in the network. + +*****************************************************************************/ + +#include "emm_proc.h" +#include "nas_log.h" +#include "nas_timer.h" + +#include "emmData.h" + +#include "emm_sap.h" +#include "emm_cause.h" + +#include // memcmp, memcpy + +/****************************************************************************/ +/**************** E X T E R N A L D E F I N I T I O N S ****************/ +/****************************************************************************/ + +/****************************************************************************/ +/******************* L O C A L D E F I N I T I O N S *******************/ +/****************************************************************************/ + +/* + * -------------------------------------------------------------------------- + * Internal data handled by the tracking area update procedure in the UE + * -------------------------------------------------------------------------- + */ +/* + * Timer handlers + */ +void *_emm_tau_t3430_handler(void *); + +/* + * -------------------------------------------------------------------------- + * Internal data handled by the tracking area update procedure in the MME + * -------------------------------------------------------------------------- + */ + + +/****************************************************************************/ +/****************** E X P O R T E D F U N C T I O N S ******************/ +/****************************************************************************/ + + +/****************************************************************************/ +/********************* L O C A L F U N C T I O N S *********************/ +/****************************************************************************/ + +/* + * -------------------------------------------------------------------------- + * Timer handlers + * -------------------------------------------------------------------------- + */ + +/**************************************************************************** + ** ** + ** Name: _emm_tau_t3430_handler() ** + ** ** + ** Description: T3430 timeout handler ** + ** ** + ** 3GPP TS 24.301, section 5.5.3.2.6 case c ** + ** ** + ** Inputs: args: handler parameters ** + ** Others: None ** + ** ** + ** Outputs: None ** + ** Return: None ** + ** Others: None ** + ** ** + ***************************************************************************/ +void *_emm_tau_t3430_handler(void *args) +{ + LOG_FUNC_IN; + + LOG_TRACE(WARNING, "EMM-PROC - T3430 timer expired"); + + /* Stop timer T3430 */ + T3430.id = nas_timer_stop(T3430.id); + + LOG_FUNC_RETURN(NULL); +} + + diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/emmData.h b/openair-cn/NAS/UE/EMM/emmData.h old mode 100644 new mode 100755 similarity index 69% rename from openair-cn/NAS/EURECOM-NAS/src/emm/emmData.h rename to openair-cn/NAS/UE/EMM/emmData.h index f1eb78d517..7a81600871 --- a/openair-cn/NAS/EURECOM-NAS/src/emm/emmData.h +++ b/openair-cn/NAS/UE/EMM/emmData.h @@ -55,19 +55,12 @@ Description Defines internal private data handled by EPS Mobility #include "esmData.h" -#ifdef NAS_MME -#include "emm_fsm.h" -#include "mme_api.h" -# if defined(NAS_BUILT_IN_EPC) -# include "tree.h" -# endif -#endif + /****************************************************************************/ /********************* G L O B A L C O N S T A N T S *******************/ /****************************************************************************/ -#ifdef NAS_UE /* * The name of the file used as non-volatile memory device to store * persistent EMM data when the UE is switched off @@ -84,7 +77,6 @@ Description Defines internal private data handled by EPS Mobility #define EMM_DATA_PLMN_AUTO NET_PLMN_AUTO #define EMM_DATA_PLMN_MANUAL NET_PLMN_MANUAL -#endif // NAS_UE /* Checks Mobile Country Code equality */ #define MCCS_ARE_EQUAL(n1, n2) (((n1).MCCdigit1 == (n2).MCCdigit1) && \ @@ -130,22 +122,22 @@ typedef struct emm_security_context_s { OctetString knas_enc; /* NAS cyphering key */ OctetString knas_int; /* NAS integrity key */ struct count_s{ - UInt32_t spare:8; - UInt32_t overflow:16; - UInt32_t seq_num:8; + uint32_t spare:8; + uint32_t overflow:16; + uint32_t seq_num:8; } dl_count, ul_count; /* Downlink and uplink count parameters */ struct { - UInt8_t eps_encryption; /* algorithm used for ciphering */ - UInt8_t eps_integrity; /* algorithm used for integrity protection */ - UInt8_t umts_encryption; /* algorithm used for ciphering */ - UInt8_t umts_integrity; /* algorithm used for integrity protection */ - UInt8_t gprs_encryption; /* algorithm used for ciphering */ - UInt8_t umts_present:1; - UInt8_t gprs_present:1; + uint8_t eps_encryption; /* algorithm used for ciphering */ + uint8_t eps_integrity; /* algorithm used for integrity protection */ + uint8_t umts_encryption; /* algorithm used for ciphering */ + uint8_t umts_integrity; /* algorithm used for integrity protection */ + uint8_t gprs_encryption; /* algorithm used for ciphering */ + uint8_t umts_present:1; + uint8_t gprs_present:1; } capability; /* UE network capability */ struct { - UInt8_t encryption:4; /* algorithm used for ciphering */ - UInt8_t integrity:4; /* algorithm used for integrity protection */ + uint8_t encryption:4; /* algorithm used for ciphering */ + uint8_t integrity:4; /* algorithm used for integrity protection */ } selected_algorithms; /* MME selected algorithms */ } emm_security_context_t; @@ -154,7 +146,6 @@ typedef struct emm_security_context_s { * EMM internal data handled by EPS Mobility Management sublayer in the UE * -------------------------------------------------------------------------- */ -#ifdef NAS_UE /* * EPS update status * ----------------- @@ -284,14 +275,14 @@ typedef struct emm_data_s { /* List of user controlled PLMNs */ #define EMM_DATA_PLMN_MAX 4 PLMN_LIST_T(EMM_DATA_PLMN_MAX) plmn; - UInt16_t userAcT[EMM_DATA_PLMN_MAX]; + uint16_t userAcT[EMM_DATA_PLMN_MAX]; /* List of operator controlled PLMNs */ #define EMM_DATA_OPLMN_MAX 4 PLMN_LIST_T(EMM_DATA_OPLMN_MAX) oplmn; - UInt16_t operAcT[EMM_DATA_OPLMN_MAX]; + uint16_t operAcT[EMM_DATA_OPLMN_MAX]; /* List of operator network name records */ #define EMM_DATA_OPNN_MAX 16 - UInt8_t n_opnns; + uint8_t n_opnns; struct { const plmn_t *plmn; const char *fullname; @@ -343,93 +334,7 @@ typedef struct emm_data_s { } emm_data_t; -#endif // NAS_UE -/* - * -------------------------------------------------------------------------- - * EMM internal data handled by EPS Mobility Management sublayer in the MME - * -------------------------------------------------------------------------- - */ -#ifdef NAS_MME -/* - * Structure of the EMM context established by the network for a particular UE - * --------------------------------------------------------------------------- - */ -typedef struct emm_data_context_s { -#if defined(NAS_BUILT_IN_EPC) - RB_ENTRY(emm_data_context_s) entries; -#endif - - unsigned int ueid; /* UE identifier */ - int is_dynamic; /* Dynamically allocated context indicator */ - int is_attached; /* Attachment indicator */ - int is_emergency;/* Emergency bearer services indicator */ - - imsi_t *imsi; /* The IMSI provided by the UE or the MME */ - imei_t *imei; /* The IMEI provided by the UE */ - int guti_is_new; /* New GUTI indicator */ - GUTI_t *guti; /* The GUTI assigned to the UE */ - GUTI_t *old_guti; /* The old GUTI */ - int n_tacs; /* Number of consecutive tracking areas the UE is - * registered to */ - tac_t tac; /* Code of the first tracking area the UE is - * registered to */ - - int ksi; /* Security key set identifier provided by the UE */ - int eea; /* EPS encryption algorithms supported by the UE */ - int eia; /* EPS integrity algorithms supported by the UE */ - int ucs2; /* UCS2 Alphabet*/ - int uea; /* UMTS encryption algorithms supported by the UE */ - int uia; /* UMTS integrity algorithms supported by the UE */ - int gea; /* GPRS encryption algorithms supported by the UE */ - int umts_present; /* For encoding ue network capabilities (variable size)*/ - int gprs_present; /* For encoding ue network capabilities (variable size)*/ - - auth_vector_t vector;/* EPS authentication vector */ - emm_security_context_t *security; /* Current EPS NAS security context */ - OctetString esm_msg; /* ESM message contained within the initial request*/ - int emm_cause; /* EMM failure cause code */ - - emm_fsm_state_t _emm_fsm_status; - - esm_data_context_t esm_data_ctx; -} emm_data_context_t; - -/* - * Structure of the EMM data - * ------------------------- - */ -typedef struct { - /* - * MME configuration - * ----------------- - */ - mme_api_emm_config_t conf; - /* - * EMM contexts - * ------------ - */ -# if defined(NAS_BUILT_IN_EPC) - /* Use a tree for ue data context within MME */ - RB_HEAD(emm_data_context_map, emm_data_context_s) ctx_map; -# else -# define EMM_DATA_NB_UE_MAX (MME_API_NB_UE_MAX + 1) - emm_data_context_t *ctx [EMM_DATA_NB_UE_MAX]; -# endif -} emm_data_t; - -struct emm_data_context_s *emm_data_context_get( - emm_data_t *_emm_data, unsigned int _ueid); - -struct emm_data_context_s *emm_data_context_remove( - emm_data_t *_emm_data, struct emm_data_context_s *elm); - -void emm_data_context_add(emm_data_t *emm_data, struct emm_data_context_s *elm); -void emm_data_context_dump(struct emm_data_context_s *elm_pP); - -void emm_data_context_dump_all(void); - -#endif // NAS_MME /****************************************************************************/ /******************** G L O B A L V A R I A B L E S ********************/ @@ -447,7 +352,6 @@ emm_data_t _emm_data; * EPS mobility management timers – UE side * -------------------------------------------------------------------------- */ -#ifdef NAS_UE #define T3402_DEFAULT_VALUE 720 /* 12 minutes */ #define T3410_DEFAULT_VALUE 15 /* 15 seconds */ #define T3411_DEFAULT_VALUE 10 /* 10 seconds */ @@ -474,56 +378,6 @@ struct nas_timer_t T3421; /* Detach timer */ struct nas_timer_t T3430; /* tracking area update timer */ struct nas_timer_t T3423; /* E-UTRAN deactivate ISR timer */ -#endif - -/* - * -------------------------------------------------------------------------- - * EPS mobility management timers – Network side - * -------------------------------------------------------------------------- - */ -#ifdef NAS_MME -#define T3450_DEFAULT_VALUE 6 /* 6 seconds */ -#define T3460_DEFAULT_VALUE 6 /* 6 seconds */ -#define T3470_DEFAULT_VALUE 6 /* 6 seconds */ - -struct nas_timer_t T3450; /* EMM message retransmission timer */ -struct nas_timer_t T3460; /* Authentication timer */ -struct nas_timer_t T3470; /* Identification timer */ - -/* - * mobile reachable timer - * ---------------------- - * The network supervises the periodic tracking area updating procedure - * of the UE by means of the mobile reachable timer. - * If the UE is not attached for emergency bearer services, the mobile - * reachable timer is 4 minutes greater than T3412. - * If the UE is attached for emergency bearer services, the MME shall - * set the mobile reachable timer with a value equal to T3412. When - * the mobile reachable timer expires, the MME shall locally detach the UE. - * - * The mobile reachable timer shall be reset and started, when the MME - * releases the NAS signalling connection for the UE. The mobile reachable - * timer shall be stopped when a NAS signalling connection is established - * for the UE. - */ - -/* - * implicit detach timer - * --------------------- - * If ISR is activated, the default value of the implicit detach timer is - * 4 minutes greater than T3423. - * If the implicit detach timer expires before the UE contacts the network, - * the network shall implicitly detach the UE. - * If the MME includes timer T3346 in the TRACKING AREA UPDATE REJECT message - * or the SERVICE REJECT message and T3346 is greater than T3412, the MME - * sets the mobile reachable timer and the implicit detach timer such that - * the sum of the timer values is greater than T3346. - * - * Upon expiry of the mobile reachable timer the network shall start the - * implicit detach timer. The implicit detach timer shall be stopped when - * a NAS signalling connection is established for the UE. - */ -#endif /****************************************************************************/ /****************** E X P O R T E D F U N C T I O N S ******************/ diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/emm_main.c b/openair-cn/NAS/UE/EMM/emm_main.c old mode 100644 new mode 100755 similarity index 95% rename from openair-cn/NAS/EURECOM-NAS/src/emm/emm_main.c rename to openair-cn/NAS/UE/EMM/emm_main.c index 8d91573c89..51b6b693fb --- a/openair-cn/NAS/EURECOM-NAS/src/emm/emm_main.c +++ b/openair-cn/NAS/UE/EMM/emm_main.c @@ -48,7 +48,6 @@ Description Defines the EPS Mobility Management procedure call manager, #include "nas_log.h" #include "emmData.h" -#ifdef NAS_UE #include "memory.h" #include "usim_api.h" #include "IdleMode.h" @@ -56,11 +55,6 @@ Description Defines the EPS Mobility Management procedure call manager, #include // memset, memcpy, strlen #include // sprintf #include // malloc, free -#endif - -#if defined(NAS_BUILT_IN_EPC) && defined(NAS_MME) -# include "mme_config.h" -#endif /****************************************************************************/ /**************** E X T E R N A L D E F I N I T I O N S ****************/ @@ -70,7 +64,6 @@ Description Defines the EPS Mobility Management procedure call manager, /******************* L O C A L D E F I N I T I O N S *******************/ /****************************************************************************/ -#ifdef NAS_UE static int _emm_main_get_imei(imei_t *imei, const char *imei_str); static int _emm_main_imsi_cmp(imsi_t *imsi1, imsi_t *imsi2); @@ -91,13 +84,11 @@ static usim_data_t _usim_data; */ static emm_indication_callback_t _emm_main_user_callback; static int _emm_main_callback(int); -#endif /****************************************************************************/ /****************** E X P O R T E D F U N C T I O N S ******************/ /****************************************************************************/ -#ifdef NAS_UE /**************************************************************************** ** ** ** Name: emm_main_initialize() ** @@ -296,14 +287,14 @@ void emm_main_initialize(emm_indication_callback_t cb, const char *imei) } /* Downlink count parameter */ - if (_usim_data.securityctx.dlNAScount.length <= sizeof(UInt32_t)) { + if (_usim_data.securityctx.dlNAScount.length <= sizeof(uint32_t)) { memcpy(&_emm_data.security->dl_count, _usim_data.securityctx.dlNAScount.value, _usim_data.securityctx.dlNAScount.length); } /* Uplink count parameter */ - if (_usim_data.securityctx.ulNAScount.length <= sizeof(UInt32_t)) { + if (_usim_data.securityctx.ulNAScount.length <= sizeof(uint32_t)) { memcpy(&_emm_data.security->ul_count, _usim_data.securityctx.ulNAScount.value, _usim_data.securityctx.ulNAScount.length); @@ -409,58 +400,7 @@ void emm_main_initialize(emm_indication_callback_t cb, const char *imei) LOG_FUNC_OUT; } -#endif -#ifdef NAS_MME -/**************************************************************************** - ** ** - ** Name: emm_main_initialize() ** - ** ** - ** Description: Initializes EMM internal data ** - ** ** - ** Inputs: None ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: None ** - ** Others: _emm_data ** - ** ** - ***************************************************************************/ -#if defined(NAS_BUILT_IN_EPC) -void emm_main_initialize(mme_config_t *mme_config_p) -#else -void emm_main_initialize(void) -#endif -{ - LOG_FUNC_IN; - /* Retreive MME supported configuration data */ -#if defined(NAS_BUILT_IN_EPC) - - if (mme_api_get_emm_config(&_emm_data.conf, mme_config_p) != RETURNok) -#else - if (mme_api_get_emm_config(&_emm_data.conf) != RETURNok) -#endif - { - LOG_TRACE(ERROR, "EMM-MAIN - Failed to get MME configuration data"); - } - -#if defined(NAS_BUILT_IN_EPC) - RB_INIT(&_emm_data.ctx_map); -#endif - - /* - * Initialize EMM timers - */ - T3450.id = NAS_TIMER_INACTIVE_ID; - T3450.sec = T3450_DEFAULT_VALUE; - T3460.id = NAS_TIMER_INACTIVE_ID; - T3460.sec = T3460_DEFAULT_VALUE; - T3470.id = NAS_TIMER_INACTIVE_ID; - T3470.sec = T3470_DEFAULT_VALUE; - - LOG_FUNC_OUT; -} -#endif /**************************************************************************** ** ** @@ -480,8 +420,6 @@ void emm_main_cleanup(void) { LOG_FUNC_IN; -#ifdef NAS_UE - if (_emm_data.usim_is_valid) { /* * TODO: Update USIM application data @@ -577,13 +515,9 @@ void emm_main_cleanup(void) free(_emm_data.security); _emm_data.security = NULL; } - -#endif // NAS_UE - LOG_FUNC_OUT; } -#ifdef NAS_UE /**************************************************************************** ** ** ** Name: emm_main_get_imsi() ** @@ -934,13 +868,11 @@ int emm_main_is_emergency(void) LOG_FUNC_IN; LOG_FUNC_RETURN (_emm_data.is_attached && _emm_data.is_emergency); } -#endif // NAS_UE /****************************************************************************/ /********************* L O C A L F U N C T I O N S *********************/ /****************************************************************************/ -#ifdef NAS_UE /**************************************************************************** ** ** ** Name: _emm_main_callback() ** @@ -1144,5 +1076,4 @@ static int _emm_main_get_plmn_index(const char *plmn, int format) return (index); } -#endif // NAS_UE diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/emm_main.h b/openair-cn/NAS/UE/EMM/emm_main.h old mode 100644 new mode 100755 similarity index 93% rename from openair-cn/NAS/EURECOM-NAS/src/emm/emm_main.h rename to openair-cn/NAS/UE/EMM/emm_main.h index 09eff87635..3d3d441843 --- a/openair-cn/NAS/EURECOM-NAS/src/emm/emm_main.h +++ b/openair-cn/NAS/UE/EMM/emm_main.h @@ -46,10 +46,6 @@ Description Defines the EPS Mobility Management procedure call manager, #ifndef __EMM_MAIN_H__ #define __EMM_MAIN_H__ -#if defined(NAS_BUILT_IN_EPC) -# include "mme_config.h" -#endif - #include "commonDef.h" #include "networkDef.h" @@ -69,19 +65,10 @@ Description Defines the EPS Mobility Management procedure call manager, /****************** E X P O R T E D F U N C T I O N S ******************/ /****************************************************************************/ -#ifdef NAS_UE void emm_main_initialize(emm_indication_callback_t cb, const char *imei); -#endif -#ifdef NAS_MME -# if defined(NAS_BUILT_IN_EPC) -void emm_main_initialize(mme_config_t *mme_config_p); -# else -void emm_main_initialize(void); -# endif -#endif + void emm_main_cleanup(void); -#ifdef NAS_UE /* User's getter of UE's identity */ const imsi_t *emm_main_get_imsi(void); @@ -107,6 +94,5 @@ const char *emm_main_get_registered_plmn(network_plmn_t *plmn, int format); int emm_main_is_attached(void); int emm_main_is_emergency(void); -#endif // NAS_UE #endif /* __EMM_MAIN_H__*/ diff --git a/openair-cn/NAS/UE/EMM/emm_proc.h b/openair-cn/NAS/UE/EMM/emm_proc.h new file mode 100755 index 0000000000..267a64fcef --- /dev/null +++ b/openair-cn/NAS/UE/EMM/emm_proc.h @@ -0,0 +1,195 @@ +/******************************************************************************* + OpenAirInterface + Copyright(c) 1999 - 2014 Eurecom + + OpenAirInterface is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + + OpenAirInterface is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with OpenAirInterface.The full GNU General Public License is + included in this distribution in the file called "COPYING". If not, + see . + + Contact Information + OpenAirInterface Admin: openair_admin@eurecom.fr + OpenAirInterface Tech : openair_tech@eurecom.fr + OpenAirInterface Dev : openair4g-devel@eurecom.fr + + Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. + + *******************************************************************************/ +/***************************************************************************** +Source emm_proc.h + +Version 0.1 + +Date 2012/10/16 + +Product NAS stack + +Subsystem EPS Mobility Management + +Author Frederic Maurel + +Description Defines the EPS Mobility Management procedures executed at + the EMM Service Access Points. + +*****************************************************************************/ +#ifndef __EMM_PROC_H__ +#define __EMM_PROC_H__ + +#include "commonDef.h" +#include "OctetString.h" +#include "LowerLayer.h" + +/****************************************************************************/ +/********************* G L O B A L C O N S T A N T S *******************/ +/****************************************************************************/ + +/* Type of network attachment */ +typedef enum { + EMM_ATTACH_TYPE_EPS = 0, + EMM_ATTACH_TYPE_IMSI, + EMM_ATTACH_TYPE_EMERGENCY, + EMM_ATTACH_TYPE_RESERVED, +} emm_proc_attach_type_t; + +/* Type of network detach */ +typedef enum { + EMM_DETACH_TYPE_EPS = 0, + EMM_DETACH_TYPE_IMSI, + EMM_DETACH_TYPE_EPS_IMSI, + EMM_DETACH_TYPE_REATTACH, + EMM_DETACH_TYPE_NOT_REATTACH, + EMM_DETACH_TYPE_RESERVED, +} emm_proc_detach_type_t; + +/* Type of requested identity */ +typedef enum { + EMM_IDENT_TYPE_NOT_AVAILABLE = 0, + EMM_IDENT_TYPE_IMSI, + EMM_IDENT_TYPE_IMEI, + EMM_IDENT_TYPE_IMEISV, + EMM_IDENT_TYPE_TMSI +} emm_proc_identity_type_t; + +/****************************************************************************/ +/************************ G L O B A L T Y P E S ************************/ +/****************************************************************************/ + +/****************************************************************************/ +/******************** G L O B A L V A R I A B L E S ********************/ +/****************************************************************************/ + +/****************************************************************************/ +/****************** E X P O R T E D F U N C T I O N S ******************/ +/****************************************************************************/ + +/* + *--------------------------------------------------------------------------- + * EMM status procedure + *--------------------------------------------------------------------------- + */ +int emm_proc_status_ind(unsigned int ueid, int emm_cause); +int emm_proc_status(unsigned int ueid, int emm_cause); + +/* + *--------------------------------------------------------------------------- + * Lower layer procedure + *--------------------------------------------------------------------------- + */ +int emm_proc_lowerlayer_initialize(lowerlayer_success_callback_t success, + lowerlayer_failure_callback_t failure, + lowerlayer_release_callback_t release, + void *args); +int emm_proc_lowerlayer_success(void); +int emm_proc_lowerlayer_failure(int is_initial); +int emm_proc_lowerlayer_release(void); + +/* + *--------------------------------------------------------------------------- + * UE's Idle mode procedure + *--------------------------------------------------------------------------- + */ +int emm_proc_initialize(void); +int emm_proc_plmn_selection(int index); +int emm_proc_plmn_selection_end(int found, tac_t tac, ci_t ci, AcT_t rat); + +/* + * -------------------------------------------------------------------------- + * Attach procedure + * -------------------------------------------------------------------------- + */ +int emm_proc_attach(emm_proc_attach_type_t type); +int emm_proc_attach_request(void *args); +int emm_proc_attach_accept(long T3412, long T3402, long T3423, int n_tais, + tai_t *tai, GUTI_t *guti, int n_eplmns, plmn_t *eplmn, + const OctetString *esm_msg); +int emm_proc_attach_reject(int emm_cause, const OctetString *esm_msg); +int emm_proc_attach_complete(void *args); +int emm_proc_attach_failure(int is_initial, void *args); +int emm_proc_attach_release(void *args); +int emm_proc_attach_restart(void); + +int emm_proc_attach_set_emergency(void); +int emm_proc_attach_set_detach(void); + + + +/* + * -------------------------------------------------------------------------- + * Detach procedure + * -------------------------------------------------------------------------- + */ +int emm_proc_detach(emm_proc_detach_type_t type, int switch_off); +int emm_proc_detach_request(void *args); +int emm_proc_detach_accept(void); +int emm_proc_detach_failure(int is_initial, void *args); +int emm_proc_detach_release(void *args); + + +/* + * -------------------------------------------------------------------------- + * Identification procedure + * -------------------------------------------------------------------------- + */ +int emm_proc_identification_request(emm_proc_identity_type_t type); + + +/* + * -------------------------------------------------------------------------- + * Authentication procedure + * -------------------------------------------------------------------------- + */ +int emm_proc_authentication_request(int native_ksi, int ksi, + const OctetString *rand, const OctetString *autn); +int emm_proc_authentication_reject(void); +int emm_proc_authentication_delete(void); + + +/* + * -------------------------------------------------------------------------- + * Security mode control procedure + * -------------------------------------------------------------------------- + */ +int emm_proc_security_mode_command(int native_ksi, int ksi, int seea, int seia, + int reea, int reia); + +/* + *--------------------------------------------------------------------------- + * Network indication handlers + *--------------------------------------------------------------------------- + */ +int emm_proc_registration_notify(Stat_t status); +int emm_proc_location_notify(tac_t tac, ci_t ci, AcT_t rat); +int emm_proc_network_notify(int index); + +#endif /* __EMM_PROC_H__*/ diff --git a/openair-cn/NAS/UE/ESM/DedicatedEpsBearerContextActivation.c b/openair-cn/NAS/UE/ESM/DedicatedEpsBearerContextActivation.c new file mode 100755 index 0000000000..65fdaf4b3e --- /dev/null +++ b/openair-cn/NAS/UE/ESM/DedicatedEpsBearerContextActivation.c @@ -0,0 +1,317 @@ +/******************************************************************************* + OpenAirInterface + Copyright(c) 1999 - 2014 Eurecom + + OpenAirInterface is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + + OpenAirInterface is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with OpenAirInterface.The full GNU General Public License is + included in this distribution in the file called "COPYING". If not, + see . + + Contact Information + OpenAirInterface Admin: openair_admin@eurecom.fr + OpenAirInterface Tech : openair_tech@eurecom.fr + OpenAirInterface Dev : openair4g-devel@eurecom.fr + + Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. + + *******************************************************************************/ +/***************************************************************************** +Source DedicatedEpsBearerContextActivation.c + +Version 0.1 + +Date 2013/07/16 + +Product NAS stack + +Subsystem EPS Session Management + +Author Frederic Maurel + +Description Defines the dedicated EPS bearer context activation ESM + procedure executed by the Non-Access Stratum. + + The purpose of the dedicated EPS bearer context activation + procedure is to establish an EPS bearer context with specific + QoS and TFT between the UE and the EPC. + + The procedure is initiated by the network, but may be requested + by the UE by means of the UE requested bearer resource alloca- + tion procedure or the UE requested bearer resource modification + procedure. + It can be part of the attach procedure or be initiated together + with the default EPS bearer context activation procedure when + the UE initiated stand-alone PDN connectivity procedure. + +*****************************************************************************/ + +#include "esm_proc.h" +#include "commonDef.h" +#include "nas_log.h" + +#include "esm_cause.h" +#include "esm_ebr.h" +#include "esm_ebr_context.h" + +#include "emm_sap.h" + +/****************************************************************************/ +/**************** E X T E R N A L D E F I N I T I O N S ****************/ +/****************************************************************************/ + +/****************************************************************************/ +/******************* L O C A L D E F I N I T I O N S *******************/ +/****************************************************************************/ + + +/****************************************************************************/ +/****************** E X P O R T E D F U N C T I O N S ******************/ +/****************************************************************************/ + +/* + * -------------------------------------------------------------------------- + * Dedicated EPS bearer context activation procedure executed by the MME + * -------------------------------------------------------------------------- + */ + +/* + * -------------------------------------------------------------------------- + * Dedicated EPS bearer context activation procedure executed by the UE + * -------------------------------------------------------------------------- + */ +/**************************************************************************** + ** ** + ** Name: esm_proc_dedicated_eps_bearer_context_request() ** + ** ** + ** Description: Creates local dedicated EPS bearer context upon receipt ** + ** of the ACTIVATE DEDICATED EPS BEARER CONTEXT REQUEST ** + ** message. ** + ** ** + ** Inputs: ebi: EPS bearer identity ** + ** default_ebi: EPS bearer identity of the associated de- ** + ** fault EPS bearer context ** + ** esm_qos: EPS bearer level QoS parameters ** + ** tft: Traffic flow template parameters ** + ** Others: None ** + ** ** + ** Outputs: esm_cause: Cause code returned upon ESM procedure ** + ** failure ** + ** Return: RETURNok, RETURNerror ** + ** Others: None ** + ** ** + ***************************************************************************/ +int esm_proc_dedicated_eps_bearer_context_request(int ebi, int default_ebi, + const esm_proc_qos_t *qos, + const esm_proc_tft_t *tft, + int *esm_cause) +{ + LOG_FUNC_IN; + + int rc = RETURNerror; + + LOG_TRACE(INFO, "ESM-PROC - Dedicated EPS bearer context activation " + "requested by the network (ebi=%d)", ebi); + + /* Get the PDN connection the dedicated EPS bearer is linked to */ + int pid = esm_ebr_context_get_pid(default_ebi); + + if (pid < 0) { + /* 3GPP TS 24.301, section 6.4.2.5, abnormal case c + * No default EPS bearer context with linked EPS bearer identity + * activated + */ + LOG_TRACE(WARNING, "ESM-PROC - Failed to get PDN connection the " + "dedicated EPS bearer is linked to (ebi=%d)", default_ebi); + *esm_cause = ESM_CAUSE_INVALID_EPS_BEARER_IDENTITY; + LOG_FUNC_RETURN (RETURNerror); + } + + /* Assign dedicated EPS bearer context */ + int new_ebi = esm_ebr_assign(ebi, pid+1, FALSE); + + if (new_ebi == ESM_EBI_UNASSIGNED) { + /* 3GPP TS 24.301, section 6.4.2.5, abnormal cases a and b + * Dedicated EPS bearer context activation request for an already + * activated default or dedicated EPS bearer context + */ + int old_pid, old_bid; + /* Locally deactivate the existing EPS bearer context and proceed + * with the requested dedicated EPS bearer context activation */ + rc = esm_proc_eps_bearer_context_deactivate(TRUE, ebi, + &old_pid, &old_bid); + + if (rc != RETURNok) { + /* Failed to release EPS bearer context */ + *esm_cause = ESM_CAUSE_PROTOCOL_ERROR; + } else { + /* Assign new dedicated EPS bearer context */ + ebi = esm_ebr_assign(ebi, pid+1, FALSE); + } + } + + if (ebi != ESM_EBI_UNASSIGNED) { + /* Check syntactical errors in packet filters */ + rc = esm_ebr_context_check_tft(pid, ebi, tft, + ESM_EBR_CONTEXT_TFT_CREATE); + + if (rc != RETURNok) { + /* Syntactical errors in packet filters */ + LOG_TRACE(WARNING, "ESM-PROC - Syntactical errors in packet " + "filters"); + *esm_cause = ESM_CAUSE_SYNTACTICAL_ERROR_IN_PACKET_FILTER; + } else { + /* Create new dedicated EPS bearer context */ + default_ebi = esm_ebr_context_create(pid, ebi, FALSE, qos, tft); + + if (default_ebi != ESM_EBI_UNASSIGNED) { + /* Dedicated EPS bearer contextx successfully created */ + rc = RETURNok; + } else { + /* No resource available */ + LOG_TRACE(WARNING, "ESM-PROC - Failed to create new dedicated " + "EPS bearer context"); + *esm_cause = ESM_CAUSE_INSUFFICIENT_RESOURCES; + } + } + } + + LOG_FUNC_RETURN (rc); +} + +/**************************************************************************** + ** ** + ** Name: esm_proc_dedicated_eps_bearer_context_accept() ** + ** ** + ** Description: Performs dedicated EPS bearer context activation proce- ** + ** dure accepted by the UE. ** + ** ** + ** 3GPP TS 24.301, section 6.4.2.3 ** + ** The UE accepts dedicated EPS bearer context activation by ** + ** sending ACTIVATE DEDICATED EPS BEARER CONTEXT ACCEPT mes- ** + ** sage and entering the state BEARER CONTEXT ACTIVE. ** + ** ** + ** Inputs: is_standalone: Not used ** + ** ebi: EPS bearer identity ** + ** msg: Encoded ESM message to be sent ** + ** ue_triggered: TRUE if the EPS bearer context procedure ** + ** was triggered by the UE ** + ** Others: None ** + ** ** + ** Outputs: None ** + ** Return: RETURNok, RETURNerror ** + ** Others: None ** + ** ** + ***************************************************************************/ +int esm_proc_dedicated_eps_bearer_context_accept(int is_standalone, int ebi, + OctetString *msg, int ue_triggered) +{ + LOG_FUNC_IN; + + int rc; + + LOG_TRACE(INFO,"ESM-PROC - Dedicated EPS bearer context activation " + "accepted by the UE (ebi=%d)", ebi); + + emm_sap_t emm_sap; + emm_esm_data_t *emm_esm = &emm_sap.u.emm_esm.u.data; + /* + * Notity EMM that ESM PDU has to be forwarded to lower layers + */ + emm_sap.primitive = EMMESM_UNITDATA_REQ; + emm_sap.u.emm_esm.ueid = 0; + emm_esm->msg.length = msg->length; + emm_esm->msg.value = msg->value; + rc = emm_sap_send(&emm_sap); + + if (rc != RETURNerror) { + /* Set the EPS bearer context state to ACTIVE */ + rc = esm_ebr_set_status(ebi, ESM_EBR_ACTIVE, ue_triggered); + + if (rc != RETURNok) { + /* The EPS bearer context was already in ACTIVE state */ + LOG_TRACE(WARNING, "ESM-PROC - EBI %d was already ACTIVE", ebi); + /* Accept network retransmission of already accepted activate + * dedicated EPS bearer context request */ + LOG_FUNC_RETURN (RETURNok); + } + } + + LOG_FUNC_RETURN (rc); +} + +/**************************************************************************** + ** ** + ** Name: esm_proc_dedicated_eps_bearer_context_reject() ** + ** ** + ** Description: Performs dedicated EPS bearer context activation proce- ** + ** dure not accepted by the UE. ** + ** ** + ** 3GPP TS 24.301, section 6.4.2.4 ** + ** The UE rejects dedicated EPS bearer context activation by ** + ** sending ACTIVATE DEDICATED EPS BEARER CONTEXT REJECT mes- ** + ** sage. ** + ** ** + ** Inputs: is_standalone: Not used ** + ** ebi: EPS bearer identity ** + ** msg: Encoded ESM message to be sent ** + ** ue_triggered: Not used ** + ** Others: None ** + ** ** + ** Outputs: None ** + ** Return: RETURNok, RETURNerror ** + ** Others: None ** + ** ** + ***************************************************************************/ +int esm_proc_dedicated_eps_bearer_context_reject(int is_standalone, int ebi, + OctetString *msg, int ue_triggered) +{ + LOG_FUNC_IN; + + int rc = RETURNok; + + LOG_TRACE(WARNING, "ESM-PROC - Dedicated EPS bearer context activation " + "not accepted by the UE (ebi=%d)", ebi); + + if ( !esm_ebr_is_not_in_use(ebi) ) { + /* Release EPS bearer data currently in use */ + rc = esm_ebr_release(ebi); + } + + if (rc != RETURNok) { + LOG_TRACE(WARNING, "ESM-PROC - Failed to release EPS bearer data"); + } else { + emm_sap_t emm_sap; + emm_esm_data_t *emm_esm = &emm_sap.u.emm_esm.u.data; + /* + * Notity EMM that ESM PDU has to be forwarded to lower layers + */ + emm_sap.primitive = EMMESM_UNITDATA_REQ; + emm_sap.u.emm_esm.ueid = 0; + emm_esm->msg.length = msg->length; + emm_esm->msg.value = msg->value; + rc = emm_sap_send(&emm_sap); + } + + LOG_FUNC_RETURN (rc); +} + +/****************************************************************************/ +/********************* L O C A L F U N C T I O N S *********************/ +/****************************************************************************/ + +/* + * -------------------------------------------------------------------------- + * Timer handlers + * -------------------------------------------------------------------------- + */ diff --git a/openair-cn/NAS/UE/ESM/DefaultEpsBearerContextActivation.c b/openair-cn/NAS/UE/ESM/DefaultEpsBearerContextActivation.c new file mode 100755 index 0000000000..b6b7fb13fa --- /dev/null +++ b/openair-cn/NAS/UE/ESM/DefaultEpsBearerContextActivation.c @@ -0,0 +1,385 @@ +/******************************************************************************* + OpenAirInterface + Copyright(c) 1999 - 2014 Eurecom + + OpenAirInterface is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + + OpenAirInterface is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with OpenAirInterface.The full GNU General Public License is + included in this distribution in the file called "COPYING". If not, + see . + + Contact Information + OpenAirInterface Admin: openair_admin@eurecom.fr + OpenAirInterface Tech : openair_tech@eurecom.fr + OpenAirInterface Dev : openair4g-devel@eurecom.fr + + Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. + + *******************************************************************************/ +/***************************************************************************** +Source DefaultEpsBearerContextActivation.c + +Version 0.1 + +Date 2013/01/28 + +Product NAS stack + +Subsystem EPS Session Management + +Author Frederic Maurel + +Description Defines the default EPS bearer context activation ESM + procedure executed by the Non-Access Stratum. + + The purpose of the default bearer context activation procedure + is to establish a default EPS bearer context between the UE + and the EPC. + + The procedure is initiated by the network as a response to + the PDN CONNECTIVITY REQUEST message received from the UE. + It can be part of the attach procedure. + +*****************************************************************************/ + +#include "esm_proc.h" +#include "commonDef.h" +#include "nas_log.h" + +#include "esm_cause.h" +#include "esm_ebr.h" +#include "esm_ebr_context.h" + +#include "emm_sap.h" + +/****************************************************************************/ +/**************** E X T E R N A L D E F I N I T I O N S ****************/ +/****************************************************************************/ + +/****************************************************************************/ +/******************* L O C A L D E F I N I T I O N S *******************/ +/****************************************************************************/ + +/* + * -------------------------------------------------------------------------- + * Internal data handled by the default EPS bearer context activation + * procedure in the UE + * -------------------------------------------------------------------------- + */ +static struct { + int ebi; /* EPS bearer identity of the default EPS bearer associated + * to the PDN connection to be activated */ +} _default_eps_bearer_context_data = {ESM_EBI_UNASSIGNED}; + + + +/****************************************************************************/ +/****************** E X P O R T E D F U N C T I O N S ******************/ +/****************************************************************************/ + + +/* + * -------------------------------------------------------------------------- + * Default EPS bearer context activation procedure executed by the UE + * -------------------------------------------------------------------------- + */ +/**************************************************************************** + ** ** + ** Name: esm_proc_default_eps_bearer_context_request() ** + ** ** + ** Description: Creates local default EPS bearer context upon receipt of ** + ** the ACTIVATE DEFAULT EPS BEARER CONTEXT REQUEST message. ** + ** ** + ** Inputs: pid: PDN connection identifier ** + ** ebi: EPS bearer identity ** + ** qos: EPS bearer level QoS parameters ** + ** Others: None ** + ** ** + ** Outputs: esm_cause: Cause code returned upon ESM procedure ** + ** failure ** + ** Return: RETURNok, RETURNerror ** + ** Others: _default_eps_bearer_context_data ** + ** ** + ***************************************************************************/ +int esm_proc_default_eps_bearer_context_request(int pid, int ebi, + const esm_proc_qos_t *qos, + int *esm_cause) +{ + LOG_FUNC_IN; + + int rc = RETURNerror; + + LOG_TRACE(INFO, "ESM-PROC - Default EPS bearer context activation " + "requested by the network (ebi=%d)", ebi); + + /* Assign default EPS bearer context */ + int new_ebi = esm_ebr_assign(ebi, pid+1, TRUE); + + if (new_ebi == ESM_EBI_UNASSIGNED) { + /* 3GPP TS 24.301, section 6.4.1.5, abnormal cases a and b + * Default EPS bearer context activation request for an already + * activated default or dedicated EPS bearer context + */ + int old_pid, old_bid; + /* Locally deactivate the existing EPS bearer context and proceed + * with the requested default EPS bearer context activation */ + rc = esm_proc_eps_bearer_context_deactivate(TRUE, ebi, + &old_pid, &old_bid); + + if (rc != RETURNok) { + /* Failed to release EPS bearer context */ + *esm_cause = ESM_CAUSE_PROTOCOL_ERROR; + } else { + /* Assign new default EPS bearer context */ + ebi = esm_ebr_assign(ebi, pid+1, TRUE); + } + } + + if (ebi != ESM_EBI_UNASSIGNED) { + /* Create new default EPS bearer context */ + ebi = esm_ebr_context_create(pid, ebi, TRUE, qos, NULL); + + if (ebi != ESM_EBI_UNASSIGNED) { + /* Default EPS bearer contextx successfully created */ + _default_eps_bearer_context_data.ebi = ebi; + rc = RETURNok; + } else { + /* No resource available */ + LOG_TRACE(WARNING, "ESM-PROC - Failed to create new default EPS " + "bearer context"); + *esm_cause = ESM_CAUSE_INSUFFICIENT_RESOURCES; + } + } + + LOG_FUNC_RETURN (rc); +} + +/**************************************************************************** + ** ** + ** Name: esm_proc_default_eps_bearer_context_accept() ** + ** ** + ** Description: Performs default EPS bearer context activation procedure ** + ** accepted by the UE. ** + ** ** + ** 3GPP TS 24.301, section 6.4.1.3 ** + ** The UE accepts default EPS bearer context activation by ** + ** sending ACTIVATE DEFAULT EPS BEARER CONTEXT ACCEPT mes- ** + ** sage and entering the state BEARER CONTEXT ACTIVE. ** + ** If the default bearer is activated as part of the attach ** + ** procedure, the UE shall send the accept message together ** + ** with ATTACH COMPLETE message. ** + ** ** + ** Inputs: is_standalone: Indicates whether the activate default EPS ** + ** bearer context accept has to be sent stand-** + ** alone or together within an attach comple- ** + ** te message ** + ** ebi: EPS bearer identity ** + ** msg: Encoded ESM message to be sent ** + ** ue_triggered: TRUE if the EPS bearer context procedure ** + ** was triggered by the UE (should be always ** + ** TRUE) ** + ** Others: None ** + ** ** + ** Outputs: None ** + ** Return: RETURNok, RETURNerror ** + ** Others: None ** + ** ** + ***************************************************************************/ +int esm_proc_default_eps_bearer_context_accept(int is_standalone, int ebi, + OctetString *msg, int ue_triggered) +{ + LOG_FUNC_IN; + + int rc = RETURNok; + + LOG_TRACE(INFO,"ESM-PROC - Default EPS bearer context activation " + "accepted by the UE (ebi=%d)", ebi); + + if (is_standalone) { + emm_sap_t emm_sap; + emm_esm_data_t *emm_esm = &emm_sap.u.emm_esm.u.data; + /* + * Notity EMM that ESM PDU has to be forwarded to lower layers + */ + emm_sap.primitive = EMMESM_UNITDATA_REQ; + emm_sap.u.emm_esm.ueid = 0; + emm_esm->msg.length = msg->length; + emm_esm->msg.value = msg->value; + rc = emm_sap_send(&emm_sap); + } + + if (rc != RETURNerror) { + /* Set the EPS bearer context state to ACTIVE */ + rc = esm_ebr_set_status(ebi, ESM_EBR_ACTIVE, ue_triggered); + + if (rc != RETURNok) { + /* The EPS bearer context was already in ACTIVE state */ + LOG_TRACE(WARNING, "ESM-PROC - EBI %d was already ACTIVE", ebi); + /* Accept network retransmission of already accepted activate + * default EPS bearer context request */ + LOG_FUNC_RETURN (RETURNok); + } + } + + LOG_FUNC_RETURN (rc); +} + +/**************************************************************************** + ** ** + ** Name: esm_proc_default_eps_bearer_context_reject() ** + ** ** + ** Description: Performs default EPS bearer context activation procedure ** + ** not accepted by the UE. ** + ** ** + ** 3GPP TS 24.301, section 6.4.1.4 ** + ** The UE rejects default EPS bearer context activation by ** + ** sending ACTIVATE DEFAULT EPS BEARER CONTEXT REJECT mes- ** + ** sage and entering the state BEARER CONTEXT INACTIVE. ** + ** If the default EPS bearer context activation is part of ** + ** the attach procedure, the ESM sublayer shall notify the ** + ** EMM sublayer of an ESM failure. ** + ** ** + ** Inputs: is_standalone: Indicates whether the activate default EPS ** + ** bearer context accept has to be sent stand-** + ** alone or together within an attach comple- ** + ** te message ** + ** ebi: EPS bearer identity ** + ** msg: Encoded ESM message to be sent ** + ** ue_triggered: Not used ** + ** Others: None ** + ** ** + ** Outputs: None ** + ** Return: RETURNok, RETURNerror ** + ** Others: None ** + ** ** + ***************************************************************************/ +int esm_proc_default_eps_bearer_context_reject(int is_standalone, int ebi, + OctetString *msg, int ue_triggered) +{ + LOG_FUNC_IN; + + int rc = RETURNok; + + LOG_TRACE(WARNING, "ESM-PROC - Default EPS bearer context activation " + "not accepted by the UE (ebi=%d)", ebi); + + if ( !esm_ebr_is_not_in_use(ebi) ) { + /* Release EPS bearer data currently in use */ + rc = esm_ebr_release(ebi); + } + + if (rc != RETURNok) { + LOG_TRACE(WARNING, "ESM-PROC - Failed to release EPS bearer data"); + } else if (is_standalone) { + emm_sap_t emm_sap; + emm_esm_data_t *emm_esm = &emm_sap.u.emm_esm.u.data; + /* + * Notity EMM that ESM PDU has to be forwarded to lower layers + */ + emm_sap.primitive = EMMESM_UNITDATA_REQ; + emm_sap.u.emm_esm.ueid = 0; + emm_esm->msg.length = msg->length; + emm_esm->msg.value = msg->value; + rc = emm_sap_send(&emm_sap); + } else { + /* An error is returned to notify EMM that the default EPS bearer + * activation procedure initiated as part of the initial attach + * procedure has failed + */ + rc = RETURNerror; + } + + LOG_FUNC_RETURN (rc); +} + +/**************************************************************************** + ** ** + ** Name: esm_proc_default_eps_bearer_context_complete() ** + ** ** + ** Description: Terminates the default EPS bearer context activation pro- ** + ** cedure upon receiving indication from the EPS Mobility ** + ** Management sublayer that the ACTIVATE DEFAULT EPS BEARER ** + ** CONTEXT ACCEPT message has been successfully delivered to ** + ** the MME. ** + ** ** + ** Inputs: None ** + ** Others: None ** + ** ** + ** Outputs: None ** + ** Return: RETURNok, RETURNerror ** + ** Others: _default_eps_bearer_context_data ** + ** ** + ***************************************************************************/ +int esm_proc_default_eps_bearer_context_complete(void) +{ + LOG_FUNC_IN; + + LOG_TRACE(INFO, + "ESM-PROC - Default EPS bearer context activation complete"); + + /* Reset default EPS bearer context internal data */ + _default_eps_bearer_context_data.ebi = ESM_EBI_UNASSIGNED; + + LOG_FUNC_RETURN (RETURNok); +} + +/**************************************************************************** + ** ** + ** Name: esm_proc_default_eps_bearer_context_failure() ** + ** ** + ** Description: Performs default EPS bearer context activation procedure ** + ** upon receiving transmission failure of ESM message indi- ** + ** cation from the EPS Mobility Management sublayer ** + ** ** + ** The UE releases the default EPS bearer context previously ** + ** allocated before the ACTIVATE DEFAULT EPS BEARER CONTEXT ** + ** ACCEPT message was sent. ** + ** ** + ** Inputs: None ** + ** Others: _default_eps_bearer_context_data ** + ** ** + ** Outputs: None ** + ** Return: RETURNok, RETURNerror ** + ** Others: _default_eps_bearer_context_data ** + ** ** + ***************************************************************************/ +int esm_proc_default_eps_bearer_context_failure(void) +{ + LOG_FUNC_IN; + + int ebi = _default_eps_bearer_context_data.ebi; + int pid, bid; + + LOG_TRACE(WARNING, + "ESM-PROC - Default EPS bearer context activation failure"); + + /* Release the default EPS bearer context and enter state INACTIVE */ + int rc = esm_proc_eps_bearer_context_deactivate(TRUE, ebi, &pid, &bid); + + if (rc != RETURNerror) { + /* Reset default EPS bearer context internal data */ + _default_eps_bearer_context_data.ebi = ESM_EBI_UNASSIGNED; + } + + LOG_FUNC_RETURN (rc); +} + +/****************************************************************************/ +/********************* L O C A L F U N C T I O N S *********************/ +/****************************************************************************/ + +/* + * -------------------------------------------------------------------------- + * Timer handlers + * -------------------------------------------------------------------------- + */ diff --git a/openair-cn/NAS/UE/ESM/EpsBearerContextDeactivation.c b/openair-cn/NAS/UE/ESM/EpsBearerContextDeactivation.c new file mode 100755 index 0000000000..a8a5a4c952 --- /dev/null +++ b/openair-cn/NAS/UE/ESM/EpsBearerContextDeactivation.c @@ -0,0 +1,392 @@ +/******************************************************************************* + OpenAirInterface + Copyright(c) 1999 - 2014 Eurecom + + OpenAirInterface is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + + OpenAirInterface is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with OpenAirInterface.The full GNU General Public License is + included in this distribution in the file called "COPYING". If not, + see . + + Contact Information + OpenAirInterface Admin: openair_admin@eurecom.fr + OpenAirInterface Tech : openair_tech@eurecom.fr + OpenAirInterface Dev : openair4g-devel@eurecom.fr + + Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. + + *******************************************************************************/ +/***************************************************************************** +Source EpsBearerContextDeactivation.c + +Version 0.1 + +Date 2013/05/22 + +Product NAS stack + +Subsystem EPS Session Management + +Author Frederic Maurel + +Description Defines the EPS bearer context deactivation ESM procedure + executed by the Non-Access Stratum. + + The purpose of the EPS bearer context deactivation procedure + is to deactivate an EPS bearer context or disconnect from a + PDN by deactivating all EPS bearer contexts to the PDN. + The EPS bearer context deactivation procedure is initiated + by the network, and it may be triggered by the UE by means + of the UE requested bearer resource modification procedure + or UE requested PDN disconnect procedure. + +*****************************************************************************/ + +#include "esm_proc.h" +#include "commonDef.h" +#include "nas_log.h" + +#include "emmData.h" +#include "esmData.h" +#include "esm_cause.h" +#include "esm_ebr.h" +#include "esm_ebr_context.h" + +#include "esm_main.h" + +#include "emm_sap.h" +#include "esm_sap.h" + +/****************************************************************************/ +/**************** E X T E R N A L D E F I N I T I O N S ****************/ +/****************************************************************************/ + +/****************************************************************************/ +/******************* L O C A L D E F I N I T I O N S *******************/ +/****************************************************************************/ + +/* + * -------------------------------------------------------------------------- + * Internal data handled by the EPS bearer context deactivation procedure + * in the UE + * -------------------------------------------------------------------------- + */ +static int _eps_bearer_release(int ebi, int *pid, int *bid); + + +/****************************************************************************/ +/****************** E X P O R T E D F U N C T I O N S ******************/ +/****************************************************************************/ + + +/* + * -------------------------------------------------------------------------- + * EPS bearer context deactivation procedure executed by the UE + * -------------------------------------------------------------------------- + */ +/**************************************************************************** + ** ** + ** Name: esm_proc_eps_bearer_context_deactivate() ** + ** ** + ** Description: Locally releases the EPS bearer context identified by the ** + ** given EPS bearer identity, without peer-to-peer signal- ** + ** ling between the UE and the MME, or checks whether the UE ** + ** has an EPS bearer context with specified EPS bearer iden- ** + ** tity activated. ** + ** ** + ** Inputs: is local: TRUE if the EPS bearer context has to be ** + ** locally released without peer-to-peer si- ** + ** gnalling between the UE and the MME ** + ** ebi: EPS bearer identity of the EPS bearer con- ** + ** text to be deactivated ** + ** Others: _esm_data ** + ** ** + ** Outputs: pid: Identifier of the PDN connection the EPS ** + ** bearer belongs to ** + ** bid: Identifier of the released EPS bearer con- ** + ** text entry ** + ** Return: RETURNok, RETURNerror ** + ** Others: None ** + ** ** + ***************************************************************************/ +int esm_proc_eps_bearer_context_deactivate(int is_local, int ebi, + int *pid, int *bid) +{ + LOG_FUNC_IN; + + int rc = RETURNerror; + int i; + + if (is_local) { + if (ebi != ESM_SAP_ALL_EBI) { + /* Locally release the EPS bearer context */ + rc = _eps_bearer_release(ebi, pid, bid); + } else { + /* Locally release all the EPS bearer contexts */ + *bid = 0; + + for (*pid = 0; *pid < ESM_DATA_PDN_MAX; (*pid)++) { + if (_esm_data.pdn[*pid].data) { + rc = _eps_bearer_release(ESM_EBI_UNASSIGNED, pid, bid); + + if (rc != RETURNok) { + break; + } + } + } + } + + LOG_FUNC_RETURN (rc); + } + + LOG_TRACE(WARNING, "ESM-PROC - EPS bearer context deactivation (ebi=%d)", + ebi); + + if (*pid < ESM_DATA_PDN_MAX) { + if (_esm_data.pdn[*pid].pid != *pid) { + LOG_TRACE(ERROR, "ESM-PROC - PDN connection identifier %d " + "is not valid", *pid); + } else if (_esm_data.pdn[*pid].data == NULL) { + LOG_TRACE(ERROR, "ESM-PROC - PDN connection %d has not been " + "allocated", *pid); + } else if (!_esm_data.pdn[*pid].is_active) { + LOG_TRACE(WARNING, "ESM-PROC - PDN connection %d is not active", + *pid); + } else { + esm_pdn_t *pdn = _esm_data.pdn[*pid].data; + + for (i = 0; i < pdn->n_bearers; i++) { + if (pdn->bearer[i]->ebi != ebi) { + continue; + } + + /* The EPS bearer context to be released is valid */ + rc = RETURNok; + } + } + } + + LOG_FUNC_RETURN (rc); +} + +/**************************************************************************** + ** ** + ** Name: esm_proc_eps_bearer_context_deactivate_request() ** + ** ** + ** Description: Deletes the EPS bearer context identified by the EPS bea- ** + ** rer identity upon receipt of the DEACTIVATE EPS BEARER ** + ** CONTEXT REQUEST message. ** + ** ** + ** Inputs: ebi: EPS bearer identity ** + ** Others: None ** + ** ** + ** Outputs: esm_cause: Cause code returned upon ESM procedure ** + ** failure ** + ** Return: RETURNok, RETURNerror ** + ** Others: None ** + ** ** + ***************************************************************************/ +int esm_proc_eps_bearer_context_deactivate_request(int ebi, int *esm_cause) +{ + LOG_FUNC_IN; + + int pid, bid; + int rc = RETURNok; + + LOG_TRACE(INFO, "ESM-PROC - EPS bearer context deactivation " + "requested by the network (ebi=%d)", ebi); + + /* Release the EPS bearer context entry */ + if (esm_ebr_context_release(ebi, &pid, &bid) == ESM_EBI_UNASSIGNED) { + LOG_TRACE(WARNING, "ESM-PROC - Failed to release EPS bearer context"); + *esm_cause = ESM_CAUSE_PROTOCOL_ERROR; + LOG_FUNC_RETURN (RETURNerror); + } + + if (bid == 0) { + /* The EPS bearer identity is that of the default bearer assigned to + * the PDN connection */ + if (*esm_cause == ESM_CAUSE_REACTIVATION_REQUESTED) { + esm_sap_t esm_sap; + int active = FALSE; + + /* 3GPP TS 24.301, section 6.4.4.3 + * The UE should re-initiate the UE requested PDN connectivity + * procedure for the APN associated to the PDN it was connected + * to in order to reactivate the EPS bearer context + */ + LOG_TRACE(WARNING, "ESM-PROC - The network requests PDN " + "connection reactivation"); + + /* Get PDN context parameters */ + rc = esm_main_get_pdn(pid + 1, &esm_sap.data.pdn_connect.pdn_type, + &esm_sap.data.pdn_connect.apn, + &esm_sap.data.pdn_connect.is_emergency, + &active); + + if (rc != RETURNerror) { + if (active) { + LOG_TRACE(ERROR, "ESM-PROC - Connectivity to APN %s " + "has not been deactivated", + esm_sap.data.pdn_connect.apn); + *esm_cause = ESM_CAUSE_REQUEST_REJECTED_UNSPECIFIED; + LOG_FUNC_RETURN (RETURNerror); + } + + /* + * Notify ESM to re-initiate PDN connectivity procedure + */ + esm_sap.primitive = ESM_PDN_CONNECTIVITY_REQ; + esm_sap.is_standalone = TRUE; + esm_sap.data.pdn_connect.is_defined = TRUE; + esm_sap.data.pdn_connect.cid = pid + 1; + rc = esm_sap_send(&esm_sap); + } + } + } + + LOG_FUNC_RETURN (rc); +} + +/**************************************************************************** + ** ** + ** Name: esm_proc_eps_bearer_context_deactivate_accept() ** + ** ** + ** Description: Performs EPS bearer context deactivation procedure accep- ** + ** ted by the UE. ** + ** ** + ** 3GPP TS 24.301, section 6.4.4.3 ** + ** The UE accepts EPS bearer context deactivation by sending ** + ** DEACTIVATE EPS BEARER CONTEXT ACCEPT message and entering ** + ** the state BEARER CONTEXT INACTIVE. ** + ** ** + ** Inputs: is_standalone: Should be always TRUE ** + ** ebi: EPS bearer identity ** + ** msg: Encoded ESM message to be sent ** + ** ue_triggered: TRUE if the EPS bearer context procedure ** + ** was triggered by the UE ** + ** Others: None ** + ** ** + ** Outputs: None ** + ** Return: RETURNok, RETURNerror ** + ** Others: None ** + ** ** + ***************************************************************************/ +int esm_proc_eps_bearer_context_deactivate_accept(int is_standalone, int ebi, + OctetString *msg, int ue_triggered) +{ + LOG_FUNC_IN; + + int rc = RETURNok; + + LOG_TRACE(INFO,"ESM-PROC - EPS bearer context deactivation accepted"); + + if (is_standalone) { + emm_sap_t emm_sap; + /* + * Notity EMM that ESM PDU has to be forwarded to lower layers + */ + emm_sap.primitive = EMMESM_UNITDATA_REQ; + emm_sap.u.emm_esm.ueid = 0; + emm_sap.u.emm_esm.u.data.msg.length = msg->length; + emm_sap.u.emm_esm.u.data.msg.value = msg->value; + rc = emm_sap_send(&emm_sap); + } + + if (rc != RETURNerror) { + /* Set the EPS bearer context state to INACTIVE */ + rc = esm_ebr_set_status(ebi, ESM_EBR_INACTIVE, ue_triggered); + + if (rc != RETURNok) { + /* The EPS bearer context was already in INACTIVE state */ + LOG_TRACE(WARNING, "ESM-PROC - EBI %d was already INACTIVE", ebi); + /* Accept network retransmission of already accepted deactivate + * EPS bearer context request */ + LOG_FUNC_RETURN (RETURNok); + } + + /* Release EPS bearer data */ + rc = esm_ebr_release(ebi); + } + + LOG_FUNC_RETURN (rc); +} + + +/****************************************************************************/ +/********************* L O C A L F U N C T I O N S *********************/ +/****************************************************************************/ + +/* + * -------------------------------------------------------------------------- + * Timer handlers + * -------------------------------------------------------------------------- + */ + + + +/* + * -------------------------------------------------------------------------- + * UE specific local functions + * -------------------------------------------------------------------------- + */ + +/**************************************************************************** + ** ** + ** Name: _eps_bearer_release() ** + ** ** + ** Description: Releases the EPS bearer context identified by the given ** + ** EPS bearer identity and enters state INACTIVE. ** + ** ** + ** Inputs: ebi: EPS bearer identity ** + ** Others: None ** + ** ** + ** Outputs: pid: Identifier of the PDN connection the EPS ** + ** bearer belongs to ** + ** bid: Identifier of the released EPS bearer con- ** + ** text entry ** + ** Return: RETURNok, RETURNerror ** + ** Others: None ** + ** ** + ***************************************************************************/ +static int _eps_bearer_release(int ebi, int *pid, int *bid) +{ + LOG_FUNC_IN; + + int rc = RETURNerror; + + /* Release the EPS bearer context entry */ + ebi = esm_ebr_context_release(ebi, pid, bid); + + if (ebi == ESM_EBI_UNASSIGNED) { + LOG_TRACE(WARNING, "ESM-PROC - Failed to release EPS bearer context"); + } else { + /* Set the EPS bearer context state to INACTIVE */ + rc = esm_ebr_set_status(ebi, ESM_EBR_INACTIVE, FALSE); + + if (rc != RETURNok) { + /* The EPS bearer context was already in INACTIVE state */ + LOG_TRACE(WARNING, "ESM-PROC - EBI %d was already INACTIVE", ebi); + } else { + /* Release EPS bearer data */ + rc = esm_ebr_release(ebi); + + if (rc != RETURNok) { + LOG_TRACE(WARNING, + "ESM-PROC - Failed to release EPS bearer data"); + } + } + } + + LOG_FUNC_RETURN (rc); +} diff --git a/openair-cn/NAS/UE/ESM/EsmStatusHdl.c b/openair-cn/NAS/UE/ESM/EsmStatusHdl.c new file mode 100755 index 0000000000..8ff3a21b0b --- /dev/null +++ b/openair-cn/NAS/UE/ESM/EsmStatusHdl.c @@ -0,0 +1,196 @@ +/******************************************************************************* + OpenAirInterface + Copyright(c) 1999 - 2014 Eurecom + + OpenAirInterface is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + + OpenAirInterface is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with OpenAirInterface.The full GNU General Public License is + included in this distribution in the file called "COPYING". If not, + see . + + Contact Information + OpenAirInterface Admin: openair_admin@eurecom.fr + OpenAirInterface Tech : openair_tech@eurecom.fr + OpenAirInterface Dev : openair4g-devel@eurecom.fr + + Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. + + *******************************************************************************/ +/***************************************************************************** +Source EsmStatus.c + +Version 0.1 + +Date 2013/06/17 + +Product NAS stack + +Subsystem EPS Session Management + +Author Frederic Maurel + +Description Defines the ESM status procedure executed by the Non-Access + Stratum. + + ESM status procedure can be related to an EPS bearer context + or to a procedure transaction. + + The purpose of the sending of the ESM STATUS message is to + report at any time certain error conditions detected upon + receipt of ESM protocol data. The ESM STATUS message can be + sent by both the MME and the UE. + +*****************************************************************************/ + +#include "esm_proc.h" +#include "commonDef.h" +#include "nas_log.h" + +#include "esm_cause.h" + +#include "emm_sap.h" + +/****************************************************************************/ +/**************** E X T E R N A L D E F I N I T I O N S ****************/ +/****************************************************************************/ + +/****************************************************************************/ +/******************* L O C A L D E F I N I T I O N S *******************/ +/****************************************************************************/ + +/****************************************************************************/ +/****************** E X P O R T E D F U N C T I O N S ******************/ +/****************************************************************************/ + +/**************************************************************************** + ** ** + ** Name: esm_proc_status_ind() ** + ** ** + ** Description: Processes received ESM status message. ** + ** ** + ** 3GPP TS 24.301, section 6.7 ** + ** Upon receiving ESM Status message the UE/MME shall take ** + ** different actions depending on the received ESM cause ** + ** value. ** + ** ** + ** Inputs: ueid: UE lower layer identifier ** + ** pti: Procedure transaction identity ** + ** ebi: EPS bearer identity ** + ** esm_cause: Received ESM cause code ** + ** failure ** + ** Others: None ** + ** ** + ** Outputs: esm_cause: Cause code returned upon ESM procedure ** + ** failure ** + ** Return: RETURNok, RETURNerror ** + ** Others: None ** + ** ** + ***************************************************************************/ +int esm_proc_status_ind( + int pti, int ebi, int *esm_cause) +{ + LOG_FUNC_IN; + + int rc; + + LOG_TRACE(INFO,"ESM-PROC - ESM status procedure requested (cause=%d)", + *esm_cause); + + LOG_TRACE(DEBUG, "ESM-PROC - To be implemented"); + + switch (*esm_cause) { + case ESM_CAUSE_INVALID_EPS_BEARER_IDENTITY: + /* + * Abort any ongoing ESM procedure related to the received EPS + * bearer identity, stop any related timer, and deactivate the + * corresponding EPS bearer context locally + */ + /* TODO */ + rc = RETURNok; + break; + + case ESM_CAUSE_INVALID_PTI_VALUE: + /* + * Abort any ongoing ESM procedure related to the received PTI + * value and stop any related timer + */ + /* TODO */ + rc = RETURNok; + break; + + case ESM_CAUSE_MESSAGE_TYPE_NOT_IMPLEMENTED: + /* + * Abort any ongoing ESM procedure related to the PTI or + * EPS bearer identity and stop any related timer + */ + /* TODO */ + rc = RETURNok; + break; + + default: + /* + * No state transition and no specific action shall be taken; + * local actions are possible + */ + /* TODO */ + rc = RETURNok; + break; + } + + LOG_FUNC_RETURN (rc); +} + +/**************************************************************************** + ** ** + ** Name: esm_proc_status() ** + ** ** + ** Description: Initiates ESM status procedure. ** + ** ** + ** Inputs: is_standalone: Not used - Always TRUE ** + ** ueid: UE lower layer identifier ** + ** ebi: Not used ** + ** msg: Encoded ESM status message to be sent ** + ** ue_triggered: Not used ** + ** Others: None ** + ** ** + ** Outputs: None ** + ** Return: RETURNok, RETURNerror ** + ** Others: None ** + ** ** + ***************************************************************************/ +int esm_proc_status(int is_standalone, + int ebi, OctetString *msg, + int ue_triggered) +{ + LOG_FUNC_IN; + + int rc; + emm_sap_t emm_sap; + + LOG_TRACE(INFO,"ESM-PROC - ESM status procedure requested"); + + /* + * Notity EMM that ESM PDU has to be forwarded to lower layers + */ + emm_sap.primitive = EMMESM_UNITDATA_REQ; + emm_sap.u.emm_esm.ueid = 0; + emm_sap.u.emm_esm.u.data.msg.length = msg->length; + emm_sap.u.emm_esm.u.data.msg.value = msg->value; + rc = emm_sap_send(&emm_sap); + + LOG_FUNC_RETURN (rc); +} + +/****************************************************************************/ +/********************* L O C A L F U N C T I O N S *********************/ +/****************************************************************************/ diff --git a/openair-cn/NAS/EURECOM-NAS/src/esm/PdnConnectivity.c b/openair-cn/NAS/UE/ESM/PdnConnectivity.c old mode 100644 new mode 100755 similarity index 68% rename from openair-cn/NAS/EURECOM-NAS/src/esm/PdnConnectivity.c rename to openair-cn/NAS/UE/ESM/PdnConnectivity.c index 76552f12c3..2cfc2f58f0 --- a/openair-cn/NAS/EURECOM-NAS/src/esm/PdnConnectivity.c +++ b/openair-cn/NAS/UE/ESM/PdnConnectivity.c @@ -66,10 +66,6 @@ Description Defines the PDN connectivity ESM procedure executed by the #include "esm_cause.h" #include "esm_pt.h" -#ifdef NAS_MME -# include "mme_api.h" -#endif - #include "emm_sap.h" #if defined(ENABLE_ITTI) @@ -89,7 +85,6 @@ Description Defines the PDN connectivity ESM procedure executed by the * Internal data handled by the PDN connectivity procedure in the UE * -------------------------------------------------------------------------- */ -#ifdef NAS_UE /* * PDN connection handlers */ @@ -112,26 +107,6 @@ static void *_pdn_connectivity_t3482_handler(void *); /* Maximum value of the PDN connectivity request retransmission counter */ #define ESM_PDN_CONNECTIVITY_COUNTER_MAX 5 -#endif // NAS_UE - -/* - * -------------------------------------------------------------------------- - * Internal data handled by the PDN connectivity procedure in the MME - * -------------------------------------------------------------------------- - */ -#ifdef NAS_MME -/* - * PDN connection handlers - */ -static int _pdn_connectivity_create(emm_data_context_t *ctx, - int pti, - const OctetString *apn, - esm_proc_pdn_type_t pdn_type, - const OctetString *pdn_addr, - int is_emergency); -int _pdn_connectivity_delete(emm_data_context_t *ctx, int pid); - -#endif // NAS_MME /****************************************************************************/ /****************** E X P O R T E D F U N C T I O N S ******************/ @@ -142,7 +117,6 @@ int _pdn_connectivity_delete(emm_data_context_t *ctx, int pid); * PDN connectivity procedure executed by the UE * -------------------------------------------------------------------------- */ -#ifdef NAS_UE /**************************************************************************** ** ** ** Name: esm_proc_pdn_connectivity() ** @@ -601,293 +575,12 @@ int esm_proc_pdn_connectivity_failure(int is_pending) LOG_FUNC_RETURN(rc); } -#endif // NAS_UE -/* - * -------------------------------------------------------------------------- - * PDN connectivity procedure executed by the MME - * -------------------------------------------------------------------------- - */ -#ifdef NAS_MME -/**************************************************************************** - ** ** - ** Name: esm_proc_pdn_connectivity_request() ** - ** ** - ** Description: Performs PDN connectivity procedure requested by the UE. ** - ** ** - ** 3GPP TS 24.301, section 6.5.1.3 ** - ** Upon receipt of the PDN CONNECTIVITY REQUEST message, the ** - ** MME checks if connectivity with the requested PDN can be ** - ** established. If no requested APN is provided the MME ** - ** shall use the default APN as the requested APN if the ** - ** request type is different from "emergency", or the APN ** - ** configured for emergency bearer services if the request ** - ** type is "emergency". ** - ** If connectivity with the requested PDN is accepted by the ** - ** network, the MME shall initiate the default EPS bearer ** - ** context activation procedure. ** - ** ** - ** Inputs: ueid: UE local identifier ** - ** pti: Identifies the PDN connectivity procedure ** - ** requested by the UE ** - ** request_type: Type of the PDN request ** - ** pdn_type: PDN type value (IPv4, IPv6, IPv4v6) ** - ** apn: Requested Access Point Name ** - ** Others: _esm_data ** - ** ** - ** Outputs: apn: Default Access Point Name ** - ** pdn_addr: Assigned IPv4 address and/or IPv6 suffix ** - ** esm_qos: EPS bearer level QoS parameters ** - ** esm_cause: Cause code returned upon ESM procedure ** - ** failure ** - ** Return: The identifier of the PDN connection if ** - ** successfully created; ** - ** RETURNerror otherwise. ** - ** Others: _esm_data ** - ** ** - ***************************************************************************/ -int esm_proc_pdn_connectivity_request(emm_data_context_t *ctx, int pti, - esm_proc_pdn_request_t request_type, - OctetString *apn, - esm_proc_pdn_type_t pdn_type, - OctetString *pdn_addr, - esm_proc_qos_t *esm_qos, - int *esm_cause) -{ - int rc = RETURNerror; - int pid = RETURNerror; - - LOG_FUNC_IN; - - LOG_TRACE(INFO, "ESM-PROC - PDN connectivity requested by the UE " - "(ueid=%u, pti=%d) PDN type = %s, APN = %s pdn addr = %s", ctx->ueid, pti, - (pdn_type == ESM_PDN_TYPE_IPV4)? "IPv4" : - (pdn_type == ESM_PDN_TYPE_IPV6)? "IPv6" : "IPv4v6", - (apn) ? (char *)(apn->value) : "null", - (pdn_addr) ? (char *)(pdn_addr->value) : "null"); - -#if !defined(NAS_BUILT_IN_EPC) - - /* UE identifier sanity check */ - if (ctx->ueid >= ESM_DATA_NB_UE_MAX) { - LOG_TRACE(WARNING, "ESM-PROC - Number of connected UEs exceeded"); - LOG_FUNC_RETURN (RETURNerror); - } - -#endif - - /* - * Check network IP capabilities - */ - *esm_cause = ESM_CAUSE_SUCCESS; - LOG_TRACE(INFO, "ESM-PROC - _esm_data.conf.features %08x", _esm_data.conf.features); -#warning "Uncomment code about _esm_data.conf.features & (MME_API_IPV4 | MME_API_IPV6) later" -#if defined(ORIGINAL_CODE) - - switch (_esm_data.conf.features & (MME_API_IPV4 | MME_API_IPV6)) { - case (MME_API_IPV4 | MME_API_IPV6): - - /* The network supports both IPv4 and IPv6 connection */ - if ( (pdn_type == ESM_PDN_TYPE_IPV4V6) && - (_esm_data.conf.features & MME_API_SINGLE_ADDR_BEARERS) ) { - /* The network supports single IP version bearers only */ - *esm_cause = ESM_CAUSE_SINGLE_ADDRESS_BEARERS_ONLY_ALLOWED; - } - - rc = RETURNok; - break; - - case MME_API_IPV6: - /* The network supports connection to IPv6 only */ - *esm_cause = ESM_CAUSE_PDN_TYPE_IPV6_ONLY_ALLOWED; - - if (pdn_type != ESM_PDN_TYPE_IPV4) { - rc = RETURNok; - } - - break; - - case MME_API_IPV4: - /* The network supports connection to IPv4 only */ - *esm_cause = ESM_CAUSE_PDN_TYPE_IPV4_ONLY_ALLOWED; - - if (pdn_type != ESM_PDN_TYPE_IPV6) { - rc = RETURNok; - } - - break; - - default: - LOG_TRACE(ERROR, - "ESM-PROC - _esm_data.conf.features incorrect value (no IPV4 or IPV6 ) %X", - _esm_data.conf.features); - } - -#else - rc = RETURNok; -#endif - - if (rc != RETURNerror) { - int is_emergency = (request_type == ESM_PDN_REQUEST_EMERGENCY); -#if defined(ORIGINAL_CODE) - mme_api_ip_version_t mme_pdn_index; - mme_api_qos_t qos; - - switch (pdn_type) { - case ESM_PDN_TYPE_IPV4: - mme_pdn_index = MME_API_IPV4_ADDR; - break; - - case ESM_PDN_TYPE_IPV6: - mme_pdn_index = MME_API_IPV6_ADDR; - break; - - case ESM_PDN_TYPE_IPV4V6: - default: - mme_pdn_index = MME_API_IPV4V6_ADDR; - break; - } - - /* Check if connectivity with the requested PDN can be established */ - rc = mme_api_subscribe(apn, mme_pdn_index, pdn_addr, is_emergency, &qos); - - if (rc != RETURNok) { - LOG_TRACE(WARNING, "ESM-PROC - Connectivity to the requested PDN " - "cannot be established"); - *esm_cause = ESM_CAUSE_REQUEST_REJECTED_UNSPECIFIED; - LOG_FUNC_RETURN (RETURNerror); - } - -#endif - - /* Create new PDN connection */ - pid = _pdn_connectivity_create(ctx, pti, apn, pdn_type, - pdn_addr, is_emergency); -#if defined(ORIGINAL_CODE) - - /* Setup ESM QoS parameters */ - if (esm_qos) { - esm_qos->gbrUL = qos.gbr[MME_API_UPLINK]; - esm_qos->gbrDL = qos.gbr[MME_API_DOWNLINK]; - esm_qos->mbrUL = qos.mbr[MME_API_UPLINK]; - esm_qos->mbrDL = qos.mbr[MME_API_DOWNLINK]; - esm_qos->qci = qos.qci; - } - -#endif - - if (pid < 0) { - LOG_TRACE(WARNING, "ESM-PROC - Failed to create PDN connection"); - *esm_cause = ESM_CAUSE_INSUFFICIENT_RESOURCES; - LOG_FUNC_RETURN(RETURNerror); - } - } - - LOG_FUNC_RETURN(pid); -} - -/**************************************************************************** - ** ** - ** Name: esm_proc_pdn_connectivity_reject() ** - ** ** - ** Description: Performs PDN connectivity procedure not accepted by the ** - ** network. ** - ** ** - ** 3GPP TS 24.301, section 6.5.1.4 ** - ** If connectivity with the requested PDN cannot be accepted ** - ** by the network, the MME shall send a PDN CONNECTIVITY RE- ** - ** JECT message to the UE. ** - ** ** - ** Inputs: is_standalone: Indicates whether the PDN connectivity ** - ** procedure was initiated as part of the at- ** - ** tach procedure ** - ** ueid: UE lower layer identifier ** - ** ebi: Not used ** - ** msg: Encoded PDN connectivity reject message to ** - ** be sent ** - ** ue_triggered: Not used ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -int esm_proc_pdn_connectivity_reject(int is_standalone, emm_data_context_t *ctx, - int ebi, OctetString *msg, int ue_triggered) -{ - LOG_FUNC_IN; - - int rc = RETURNerror; - - LOG_TRACE(WARNING, "ESM-PROC - PDN connectivity not accepted by the " - "network (ueid=%d)", ctx->ueid); - - if (is_standalone) { - emm_sap_t emm_sap; - /* - * Notity EMM that ESM PDU has to be forwarded to lower layers - */ - emm_sap.primitive = EMMESM_UNITDATA_REQ; - emm_sap.u.emm_esm.ctx = ctx; - emm_sap.u.emm_esm.u.data.msg.length = msg->length; - emm_sap.u.emm_esm.u.data.msg.value = msg->value; - rc = emm_sap_send(&emm_sap); - } - - /* If the PDN connectivity procedure initiated as part of the initial - * attach procedure has failed, an error is returned to notify EMM that - * the ESM sublayer did not accept UE requested PDN connectivity */ - LOG_FUNC_RETURN (rc); -} - -/**************************************************************************** - ** ** - ** Name: esm_proc_pdn_connectivity_failure() ** - ** ** - ** Description: Performs PDN connectivity procedure upon receiving noti- ** - ** fication from the EPS Mobility Management sublayer that ** - ** EMM procedure that initiated PDN connectivity activation ** - ** locally failed. ** - ** ** - ** The MME releases the PDN connection entry allocated when ** - ** the PDN connectivity procedure was requested by the UE. ** - ** ** - ** Inputs: ueid: UE local identifier ** - ** pid: Identifier of the PDN connection to be ** - ** released ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -int esm_proc_pdn_connectivity_failure(emm_data_context_t *ctx, int pid) -{ - int pti; - - LOG_FUNC_IN; - - LOG_TRACE(WARNING, "ESM-PROC - PDN connectivity failure (ueid=%u, pid=%d)", - ctx->ueid, pid); - - /* Delete the PDN connection entry */ - pti = _pdn_connectivity_delete(ctx, pid); - - if (pti != ESM_PT_UNASSIGNED) { - LOG_FUNC_RETURN (RETURNok); - } - - LOG_FUNC_RETURN (RETURNerror); -} -#endif // NAS_MME /****************************************************************************/ /********************* L O C A L F U N C T I O N S *********************/ /****************************************************************************/ -#ifdef NAS_UE /* *--------------------------------------------------------------------------- * Timer handlers @@ -1341,173 +1034,3 @@ static int _pdn_connectivity_find_pdn(const OctetString *apn, /* Return the identifier of the PDN connection */ return (_esm_data.pdn[i].pid); } -#endif // NAS_UE - -#ifdef NAS_MME -/* - *--------------------------------------------------------------------------- - * PDN connection handlers - *--------------------------------------------------------------------------- - */ -/**************************************************************************** - ** ** - ** Name: _pdn_connectivity_create() ** - ** ** - ** Description: Creates a new PDN connection entry for the specified UE ** - ** ** - ** Inputs: ueid: UE local identifier ** - ** ctx: UE context ** - ** pti: Procedure transaction identity ** - ** apn: Access Point Name of the PDN connection ** - ** pdn_type: PDN type (IPv4, IPv6, IPv4v6) ** - ** pdn_addr: Network allocated PDN IPv4 or IPv6 address ** - ** is_emergency: TRUE if the PDN connection has to be esta- ** - ** blished for emergency bearer services ** - ** Others: _esm_data ** - ** ** - ** Outputs: None ** - ** Return: The identifier of the PDN connection if ** - ** successfully created; -1 otherwise. ** - ** Others: _esm_data ** - ** ** - ***************************************************************************/ -static int _pdn_connectivity_create(emm_data_context_t *ctx, - int pti, - const OctetString *apn, - esm_proc_pdn_type_t pdn_type, - const OctetString *pdn_addr, - int is_emergency) -{ - int pid = ESM_DATA_PDN_MAX; - - LOG_TRACE(INFO, "ESM-PROC - Create new PDN connection " - "(pti=%d) APN = %s, IP address = %s (ueid=%u)", pti, apn->value, - (pdn_type == ESM_PDN_TYPE_IPV4)? esm_data_get_ipv4_addr(pdn_addr) : - (pdn_type == ESM_PDN_TYPE_IPV6)? esm_data_get_ipv6_addr(pdn_addr) : - esm_data_get_ipv4v6_addr(pdn_addr), ctx->ueid); - - /* Search for an available PDN connection entry */ - for (pid = 0; pid < ESM_DATA_PDN_MAX; pid++) { - if (ctx->esm_data_ctx.pdn[pid].data != NULL) { - continue; - } - - break; - } - - if (pid < ESM_DATA_PDN_MAX) { - /* Create new PDN connection */ - esm_pdn_t *pdn = (esm_pdn_t *)malloc(sizeof(esm_pdn_t)); - - if (pdn != NULL) { - memset(pdn, 0, sizeof(esm_pdn_t)); - /* Increment the number of PDN connections */ - ctx->esm_data_ctx.n_pdns += 1; - /* Set the PDN connection identifier */ - ctx->esm_data_ctx.pdn[pid].pid = pid; - /* Reset the PDN connection active indicator */ - ctx->esm_data_ctx.pdn[pid].is_active = FALSE; - /* Setup the PDN connection data */ - ctx->esm_data_ctx.pdn[pid].data = pdn; - - /* Set the procedure transaction identity */ - pdn->pti = pti; - /* Set the emergency bearer services indicator */ - pdn->is_emergency = is_emergency; - - /* Setup the Access Point Name */ - if ( apn && (apn->length > 0) ) { - pdn->apn.value = (uint8_t *)malloc(apn->length + 1); - - if (pdn->apn.value) { - pdn->apn.length = apn->length; - memcpy(pdn->apn.value, apn->value, apn->length); - pdn->apn.value[pdn->apn.length] = '\0'; - } - } - - /* Setup the IP address allocated by the network */ - if ( pdn_addr && (pdn_addr->length > 0) ) { - int length = - ((pdn_addr->length < ESM_DATA_IP_ADDRESS_SIZE) ? - pdn_addr->length : ESM_DATA_IP_ADDRESS_SIZE); - memcpy(pdn->ip_addr, pdn_addr->value, length); - pdn->type = pdn_type; - } - - /* Return the identifier of the new PDN connection */ - return (ctx->esm_data_ctx.pdn[pid].pid); - } - - LOG_TRACE(WARNING, "ESM-PROC - Failed to create new PDN connection " - "(pid=%d)", pid); - } - - return (-1); -} - -/**************************************************************************** - ** ** - ** Name: _pdn_connectivity_delete() ** - ** ** - ** Description: Deletes PDN connection to the specified UE associated to ** - ** PDN connection entry with given identifier ** - ** ** - ** Inputs: ueid: UE local identifier ** - ** pid: Identifier of the PDN connection to be ** - ** released ** - ** Others: _esm_data ** - ** ** - ** Outputs: None ** - ** Return: The identity of the procedure transaction ** - ** assigned to the PDN connection when suc- ** - ** cessfully released; ** - ** UNASSIGNED value otherwise. ** - ** Others: _esm_data ** - ** ** - ***************************************************************************/ -int _pdn_connectivity_delete(emm_data_context_t *ctx, int pid) -{ - int pti = ESM_PT_UNASSIGNED; - - if (ctx == NULL) { - return pti; - } - - if (pid < ESM_DATA_PDN_MAX) { - if (pid != ctx->esm_data_ctx.pdn[pid].pid) { - LOG_TRACE(ERROR, - "ESM-PROC - PDN connection identifier is not valid"); - } else if (ctx->esm_data_ctx.pdn[pid].data == NULL) { - LOG_TRACE(ERROR, - "ESM-PROC - PDN connection has not been allocated"); - } else if (ctx->esm_data_ctx.pdn[pid].is_active) { - LOG_TRACE(ERROR, "ESM-PROC - PDN connection is active"); - } else { - /* Get the identity of the procedure transaction that created - * the PDN connection */ - pti = ctx->esm_data_ctx.pdn[pid].data->pti; - } - } - - if (pti != ESM_PT_UNASSIGNED) { - /* Decrement the number of PDN connections */ - ctx->esm_data_ctx.n_pdns -= 1; - /* Set the PDN connection as available */ - ctx->esm_data_ctx.pdn[pid].pid = -1; - - /* Release allocated PDN connection data */ - if (ctx->esm_data_ctx.pdn[pid].data->apn.length > 0) { - free(ctx->esm_data_ctx.pdn[pid].data->apn.value); - } - - free(ctx->esm_data_ctx.pdn[pid].data); - ctx->esm_data_ctx.pdn[pid].data = NULL; - LOG_TRACE(WARNING, "ESM-PROC - PDN connection %d released", pid); - } - - /* Return the procedure transaction identity */ - return (pti); -} - -#endif // NAS_MME diff --git a/openair-cn/NAS/EURECOM-NAS/src/esm/PdnDisconnect.c b/openair-cn/NAS/UE/ESM/PdnDisconnect.c old mode 100644 new mode 100755 similarity index 68% rename from openair-cn/NAS/EURECOM-NAS/src/esm/PdnDisconnect.c rename to openair-cn/NAS/UE/ESM/PdnDisconnect.c index 6fb091ae43..54105a1c3b --- a/openair-cn/NAS/EURECOM-NAS/src/esm/PdnDisconnect.c +++ b/openair-cn/NAS/UE/ESM/PdnDisconnect.c @@ -58,9 +58,7 @@ Description Defines the PDN disconnect ESM procedure executed by the #include "esm_cause.h" #include "esm_pt.h" -#ifdef NAS_UE #include "esm_sap.h" -#endif #include "emm_sap.h" @@ -68,9 +66,7 @@ Description Defines the PDN disconnect ESM procedure executed by the /**************** E X T E R N A L D E F I N I T I O N S ****************/ /****************************************************************************/ -#ifdef NAS_MME -extern int _pdn_connectivity_delete(emm_data_context_t *ctx, int pid); -#endif + /****************************************************************************/ /******************* L O C A L D E F I N I T I O N S *******************/ @@ -81,7 +77,6 @@ extern int _pdn_connectivity_delete(emm_data_context_t *ctx, int pid); * Internal data handled by the PDN disconnect procedure in the UE * -------------------------------------------------------------------------- */ -#ifdef NAS_UE /* * PDN disconnection handlers */ @@ -95,20 +90,7 @@ static void *_pdn_disconnect_t3492_handler(void *); /* Maximum value of the PDN disconnect request retransmission counter */ #define ESM_PDN_DISCONNECT_COUNTER_MAX 5 -#endif // NAS_UE -/* - * -------------------------------------------------------------------------- - * Internal data handled by the PDN disconnect procedure in the MME - * -------------------------------------------------------------------------- - */ -#ifdef NAS_MME -/* - * PDN disconnection handlers - */ -static int _pdn_disconnect_get_pid(esm_data_context_t *ctx, int pti); - -#endif // NAS_MME /****************************************************************************/ /****************** E X P O R T E D F U N C T I O N S ******************/ @@ -119,7 +101,6 @@ static int _pdn_disconnect_get_pid(esm_data_context_t *ctx, int pti); * PDN disconnect procedure executed by the UE * -------------------------------------------------------------------------- */ -#ifdef NAS_UE /**************************************************************************** ** ** ** Name: esm_proc_pdn_disconnect() ** @@ -368,163 +349,8 @@ int esm_proc_pdn_disconnect_reject(int pti, int *esm_cause) LOG_FUNC_RETURN(rc); } -#endif // NAS_UE -/* - * -------------------------------------------------------------------------- - * PDN disconnect procedure executed by the MME - * -------------------------------------------------------------------------- - */ -#ifdef NAS_MME -/**************************************************************************** - ** ** - ** Name: esm_proc_pdn_disconnect_request() ** - ** ** - ** Description: Performs PDN disconnect procedure requested by the UE. ** - ** ** - ** 3GPP TS 24.301, section 6.5.2.3 ** - ** Upon receipt of the PDN DISCONNECT REQUEST message, if it ** - ** is accepted by the network, the MME shall initiate the ** - ** bearer context deactivation procedure. ** - ** ** - ** Inputs: ueid: UE lower layer identifier ** - ** pti: Identifies the PDN disconnect procedure ** - ** requested by the UE ** - ** Others: _esm_data ** - ** ** - ** Outputs: esm_cause: Cause code returned upon ESM procedure ** - ** failure ** - ** Return: The identifier of the PDN connection to be ** - ** released, if it exists; ** - ** RETURNerror otherwise. ** - ** Others: None ** - ** ** - ***************************************************************************/ -int esm_proc_pdn_disconnect_request(emm_data_context_t *ctx, int pti, int *esm_cause) -{ - int pid = RETURNerror; - - LOG_FUNC_IN; - - LOG_TRACE(INFO, "ESM-PROC - PDN disconnect requested by the UE " - "(ueid=%d, pti=%d)", ctx->ueid, pti); - - /* Get UE's ESM context */ - if (ctx->esm_data_ctx.n_pdns > 1) { - /* Get the identifier of the PDN connection entry assigned to the - * procedure transaction identity */ - pid = _pdn_disconnect_get_pid(&ctx->esm_data_ctx, pti); - - if (pid < 0) { - LOG_TRACE(ERROR, "ESM-PROC - No PDN connection found (pti=%d)", - pti); - *esm_cause = ESM_CAUSE_PROTOCOL_ERROR; - LOG_FUNC_RETURN (RETURNerror); - } - } else { - /* Attempt to disconnect from the last PDN disconnection - * is not allowed */ - *esm_cause = ESM_CAUSE_LAST_PDN_DISCONNECTION_NOT_ALLOWED; - } - - LOG_FUNC_RETURN(pid); -} - -/**************************************************************************** - ** ** - ** Name: esm_proc_pdn_disconnect_accept() ** - ** ** - ** Description: Performs PDN disconnect procedure accepted by the UE. ** - ** ** - ** 3GPP TS 24.301, section 6.5.2.3 ** - ** On reception of DEACTIVATE EPS BEARER CONTEXT ACCEPT mes- ** - ** sage from the UE, the MME releases all the resources re- ** - ** served for the PDN in the network. ** - ** ** - ** Inputs: ueid: UE lower layer identifier ** - ** pid: Identifier of the PDN connection to be ** - ** released ** - ** Others: _esm_data ** - ** ** - ** Outputs: esm_cause: Cause code returned upon ESM procedure ** - ** failure ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -int esm_proc_pdn_disconnect_accept(emm_data_context_t *ctx, int pid, int *esm_cause) -{ - LOG_FUNC_IN; - - LOG_TRACE(INFO, "ESM-PROC - PDN disconnect accepted by the UE " - "(ueid=%d, pid=%d)", ctx->ueid, pid); - - /* Release the connectivity with the requested PDN */ - int rc = mme_api_unsubscribe(NULL); - - if (rc != RETURNerror) { - /* Delete the PDN connection entry */ - int pti = _pdn_connectivity_delete(ctx, pid); - - if (pti != ESM_PT_UNASSIGNED) { - LOG_FUNC_RETURN (RETURNok); - } - } - - *esm_cause = ESM_CAUSE_PROTOCOL_ERROR; - LOG_FUNC_RETURN (RETURNerror); -} - -/**************************************************************************** - ** ** - ** Name: esm_proc_pdn_disconnect_reject() ** - ** ** - ** Description: Performs PDN disconnect procedure not accepted by the ** - ** network. ** - ** ** - ** 3GPP TS 24.301, section 6.5.2.4 ** - ** Upon receipt of the PDN DISCONNECT REQUEST message, if it ** - ** is not accepted by the network, the MME shall send a PDN ** - ** DISCONNECT REJECT message to the UE. ** - ** ** - ** Inputs: is_standalone: Not used - Always TRUE ** - ** ueid: UE lower layer identifier ** - ** ebi: Not used ** - ** msg: Encoded PDN disconnect reject message to ** - ** be sent ** - ** ue_triggered: Not used ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -int esm_proc_pdn_disconnect_reject(int is_standalone, emm_data_context_t *ctx, - int ebi, OctetString *msg, int ue_triggered) -{ - LOG_FUNC_IN; - - int rc; - emm_sap_t emm_sap; - - LOG_TRACE(WARNING, "ESM-PROC - PDN disconnect not accepted by the network " - "(ueid=%d)", ctx->ueid); - - /* - * Notity EMM that ESM PDU has to be forwarded to lower layers - */ - emm_sap.primitive = EMMESM_UNITDATA_REQ; - emm_sap.u.emm_esm.ueid = ctx->ueid; - emm_sap.u.emm_esm.ctx = ctx; - emm_sap.u.emm_esm.u.data.msg.length = msg->length; - emm_sap.u.emm_esm.u.data.msg.value = msg->value; - rc = emm_sap_send(&emm_sap); - - LOG_FUNC_RETURN(rc); -} -#endif // NAS_MME /****************************************************************************/ /********************* L O C A L F U N C T I O N S *********************/ @@ -536,7 +362,6 @@ int esm_proc_pdn_disconnect_reject(int is_standalone, emm_data_context_t *ctx, * -------------------------------------------------------------------------- */ -#ifdef NAS_UE /**************************************************************************** ** ** ** Name: _pdn_disconnect_t3492_handler() ** @@ -637,7 +462,6 @@ static void *_pdn_disconnect_t3492_handler(void *args) LOG_FUNC_RETURN(NULL); } -#endif // NAS_UE /* *--------------------------------------------------------------------------- @@ -645,7 +469,6 @@ static void *_pdn_disconnect_t3492_handler(void *args) *--------------------------------------------------------------------------- */ -#ifdef NAS_UE /**************************************************************************** ** ** ** Name: _pdn_disconnect_get_default_ebi() ** @@ -687,46 +510,3 @@ static int _pdn_disconnect_get_default_ebi(int pti) return (ebi); } -#endif // NAS_UE - -#ifdef NAS_MME -/**************************************************************************** - ** ** - ** Name: _pdn_disconnect_get_pid() ** - ** ** - ** Description: Returns the identifier of the PDN connection to which the ** - ** given procedure transaction identity has been assigned ** - ** to establish connectivity to the specified UE ** - ** ** - ** Inputs: ueid: UE local identifier ** - ** pti: The procedure transaction identity ** - ** Others: _esm_data ** - ** ** - ** Outputs: None ** - ** Return: The identifier of the PDN connection if ** - ** found in the list; -1 otherwise. ** - ** Others: None ** - ** ** - ***************************************************************************/ -static int _pdn_disconnect_get_pid(esm_data_context_t *ctx, int pti) -{ - int i = ESM_DATA_PDN_MAX; - - if (ctx != NULL) { - for (i = 0; i < ESM_DATA_PDN_MAX; i++) { - if ( (ctx->pdn[i].pid != -1) && - (ctx->pdn[i].data != NULL) ) { - if (ctx->pdn[i].data->pti != pti) { - continue; - } - - /* PDN entry found */ - break; - } - } - } - - /* Return the identifier of the PDN connection */ - return (ctx->pdn[i].pid); -} -#endif // NAS_MME diff --git a/openair-cn/NAS/EURECOM-NAS/tools/COPYING b/openair-cn/NAS/UE/ESM/SAP/COPYING old mode 100644 new mode 100755 similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/tools/COPYING rename to openair-cn/NAS/UE/ESM/SAP/COPYING diff --git a/openair-cn/NAS/UE/ESM/SAP/esm_recv.c b/openair-cn/NAS/UE/ESM/SAP/esm_recv.c new file mode 100755 index 0000000000..77805030a7 --- /dev/null +++ b/openair-cn/NAS/UE/ESM/SAP/esm_recv.c @@ -0,0 +1,695 @@ +/******************************************************************************* + OpenAirInterface + Copyright(c) 1999 - 2014 Eurecom + + OpenAirInterface is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + + OpenAirInterface is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with OpenAirInterface.The full GNU General Public License is + included in this distribution in the file called "COPYING". If not, + see . + + Contact Information + OpenAirInterface Admin: openair_admin@eurecom.fr + OpenAirInterface Tech : openair_tech@eurecom.fr + OpenAirInterface Dev : openair4g-devel@eurecom.fr + + Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. + + *******************************************************************************/ +/***************************************************************************** +Source esm_recv.c + +Version 0.1 + +Date 2013/02/06 + +Product NAS stack + +Subsystem EPS Session Management + +Author Frederic Maurel + +Description Defines functions executed at the ESM Service Access + Point upon receiving EPS Session Management messages + from the EPS Mobility Management sublayer. + +*****************************************************************************/ + +#include "esm_recv.h" +#include "commonDef.h" +#include "nas_log.h" + +#include "esm_pt.h" +#include "esm_ebr.h" +#include "esm_proc.h" + +#include "esm_cause.h" + +#include // malloc, free +#include // memset + +/****************************************************************************/ +/**************** E X T E R N A L D E F I N I T I O N S ****************/ +/****************************************************************************/ + +/****************************************************************************/ +/******************* L O C A L D E F I N I T I O N S *******************/ +/****************************************************************************/ + +/****************************************************************************/ +/****************** E X P O R T E D F U N C T I O N S ******************/ +/****************************************************************************/ + +/* + * -------------------------------------------------------------------------- + * Functions executed by both the UE and the MME upon receiving ESM messages + * -------------------------------------------------------------------------- + */ +/**************************************************************************** + ** ** + ** Name: esm_recv_status() ** + ** ** + ** Description: Processes ESM status message ** + ** ** + ** Inputs: ueid: UE local identifier ** + ** pti: Procedure transaction identity ** + ** ebi: EPS bearer identity ** + ** msg: The received ESM message ** + ** Others: None ** + ** ** + ** Outputs: None ** + ** Return: ESM cause code whenever the processing of ** + ** the ESM message fails ** + ** Others: None ** + ** ** + ***************************************************************************/ +int esm_recv_status(int pti, int ebi, const esm_status_msg *msg) +{ + int esm_cause; + int rc; + + LOG_FUNC_IN; + + LOG_TRACE(INFO, "ESM-SAP - Received ESM status message (pti=%d, ebi=%d)", + pti, ebi); + + /* + * Message processing + */ + /* Get the ESM cause */ + esm_cause = msg->esmcause; + + /* Execute the ESM status procedure */ + rc = esm_proc_status_ind(pti, ebi, &esm_cause); + + if (rc != RETURNerror) { + esm_cause = ESM_CAUSE_SUCCESS; + } + + /* Return the ESM cause value */ + LOG_FUNC_RETURN (esm_cause); +} + +/* + * -------------------------------------------------------------------------- + * Functions executed by the UE upon receiving ESM message from the network + * -------------------------------------------------------------------------- + */ +/**************************************************************************** + ** ** + ** Name: esm_recv_pdn_connectivity_reject() ** + ** ** + ** Description: Processes PDN Connectivity Reject message ** + ** ** + ** Inputs: pti: Procedure transaction identity ** + ** ebi: EPS bearer identity ** + ** msg: The received ESM message ** + ** Others: None ** + ** ** + ** Outputs: None ** + ** Return: ESM cause code whenever the processing of ** + ** the ESM message fails ** + ** Others: None ** + ** ** + ***************************************************************************/ +int esm_recv_pdn_connectivity_reject(int pti, int ebi, + const pdn_connectivity_reject_msg *msg) +{ + LOG_FUNC_IN; + + int esm_cause; + + LOG_TRACE(INFO, "ESM-SAP - Received PDN Connectivity Reject message " + "(pti=%d, ebi=%d, cause=%d)", pti, ebi, msg->esmcause); + + /* + * Procedure transaction identity checking + */ + if ( (pti == ESM_PT_UNASSIGNED) || esm_pt_is_reserved(pti) ) { + /* 3GPP TS 24.301, section 7.3.1, case a + * Reserved or unassigned PTI value + */ + LOG_TRACE(WARNING, "ESM-SAP - Invalid PTI value (pti=%d)", pti); + LOG_FUNC_RETURN (ESM_CAUSE_INVALID_PTI_VALUE); + } else if ( esm_pt_is_not_in_use(pti) ) { + /* 3GPP TS 24.301, section 7.3.1, case a + * Assigned value that does not match any PTI in use + */ + LOG_TRACE(WARNING, "ESM-SAP - PTI mismatch (pti=%d)", pti); + LOG_FUNC_RETURN (ESM_CAUSE_PTI_MISMATCH); + } + /* + * EPS bearer identity checking + */ + else if ( (ebi != ESM_EBI_UNASSIGNED) || esm_ebr_is_reserved(ebi) ) { + /* 3GPP TS 24.301, section 7.3.2, case a + * Assigned or reserved EPS bearer identity value */ + LOG_TRACE(WARNING, "ESM-SAP - Invalid EPS bearer identity (ebi=%d)", + ebi); + LOG_FUNC_RETURN (ESM_CAUSE_INVALID_EPS_BEARER_IDENTITY); + } + + /* + * Message processing + */ + /* Get the ESM cause */ + esm_cause = msg->esmcause; + + /* Execute the PDN connectivity procedure not accepted by the network */ + int rc = esm_proc_pdn_connectivity_reject(pti, &esm_cause); + + if (rc != RETURNerror) { + esm_cause = ESM_CAUSE_SUCCESS; + } + + /* Return the ESM cause value */ + LOG_FUNC_RETURN (esm_cause); +} + +/**************************************************************************** + ** ** + ** Name: esm_recv_pdn_disconnect_reject() ** + ** ** + ** Description: Processes PDN Disconnect Reject message ** + ** ** + ** Inputs: pti: Procedure transaction identity ** + ** ebi: EPS bearer identity ** + ** msg: The received ESM message ** + ** Others: None ** + ** ** + ** Outputs: None ** + ** Return: ESM cause code whenever the processing of ** + ** the ESM message fails ** + ** Others: None ** + ** ** + ***************************************************************************/ +int esm_recv_pdn_disconnect_reject(int pti, int ebi, + const pdn_disconnect_reject_msg *msg) +{ + LOG_FUNC_IN; + + int esm_cause; + + LOG_TRACE(INFO, "ESM-SAP - Received PDN Disconnect Reject message " + "(pti=%d, ebi=%d, cause=%d)", pti, ebi, msg->esmcause); + + /* + * Procedure transaction identity checking + */ + if ( (pti == ESM_PT_UNASSIGNED) || esm_pt_is_reserved(pti) ) { + /* 3GPP TS 24.301, section 7.3.1, case b + * Reserved or unassigned PTI value + */ + LOG_TRACE(WARNING, "ESM-SAP - Invalid PTI value (pti=%d)", pti); + LOG_FUNC_RETURN (ESM_CAUSE_INVALID_PTI_VALUE); + } else if ( esm_pt_is_not_in_use(pti) ) { + /* 3GPP TS 24.301, section 7.3.1, case b + * Assigned value that does not match any PTI in use + */ + LOG_TRACE(WARNING, "ESM-SAP - PTI mismatch (pti=%d)", pti); + LOG_FUNC_RETURN (ESM_CAUSE_PTI_MISMATCH); + } + /* + * EPS bearer identity checking + */ + else if ( (ebi != ESM_EBI_UNASSIGNED) || esm_ebr_is_reserved(ebi) ) { + /* 3GPP TS 24.301, section 7.3.2, case b + * Assigned or reserved EPS bearer identity value */ + LOG_TRACE(WARNING, "ESM-SAP - Invalid EPS bearer identity (ebi=%d)", + ebi); + LOG_FUNC_RETURN (ESM_CAUSE_INVALID_EPS_BEARER_IDENTITY); + } + + /* + * Message processing + */ + /* Get the ESM cause */ + esm_cause = msg->esmcause; + + /* Execute the PDN disconnect procedure not accepted by the network */ + int rc = esm_proc_pdn_disconnect_reject(pti, &esm_cause); + + if (rc != RETURNerror) { + esm_cause = ESM_CAUSE_SUCCESS; + } + + /* Return the ESM cause value */ + LOG_FUNC_RETURN (esm_cause); +} + +/**************************************************************************** + ** ** + ** Name: esm_recv_activate_default_eps_bearer_context_request() ** + ** ** + ** Description: Processes Activate Default EPS Bearer Context Request ** + ** message ** + ** ** + ** Inputs: pti: Procedure transaction identity ** + ** ebi: EPS bearer identity ** + ** msg: The received ESM message ** + ** Others: None ** + ** ** + ** Outputs: None ** + ** Return: ESM cause code whenever the processing of ** + ** the ESM message fails ** + ** Others: None ** + ** ** + ***************************************************************************/ +int esm_recv_activate_default_eps_bearer_context_request(int pti, int ebi, + const activate_default_eps_bearer_context_request_msg *msg) +{ + LOG_FUNC_IN; + + int esm_cause = ESM_CAUSE_SUCCESS; + + LOG_TRACE(INFO, "ESM-SAP - Received Activate Default EPS Bearer Context " + "Request message (pti=%d, ebi=%d)", pti, ebi); + + /* + * Procedure transaction identity checking + */ + if ( (pti == ESM_PT_UNASSIGNED) || esm_pt_is_reserved(pti) ) { + /* 3GPP TS 24.301, section 7.3.1, case h + * Reserved or unassigned PTI value + */ + LOG_TRACE(WARNING, "ESM-SAP - Invalid PTI value (pti=%d)", pti); + LOG_FUNC_RETURN (ESM_CAUSE_INVALID_PTI_VALUE); + } else if ( esm_pt_is_not_in_use(pti) ) { + /* 3GPP TS 24.301, section 7.3.1, case g + * Assigned value that does not match any PTI in use + */ + LOG_TRACE(WARNING, "ESM-SAP - PTI mismatch (pti=%d)", pti); + LOG_FUNC_RETURN (ESM_CAUSE_PTI_MISMATCH); + } + /* + * EPS bearer identity checking + */ + else if ( (ebi == ESM_EBI_UNASSIGNED) || esm_ebr_is_reserved(ebi) ) { + /* 3GPP TS 24.301, section 7.3.2, case g + * Reserved or unassigned EPS bearer identity value + */ + LOG_TRACE(WARNING, "ESM-SAP - Invalid EPS bearer identity (ebi=%d)", + ebi); + LOG_FUNC_RETURN (ESM_CAUSE_INVALID_EPS_BEARER_IDENTITY); + } + + /* + * Message processing + */ + esm_proc_qos_t qos = {-1, -1, -1, -1, -1}; + + /* Get the maximum bit rate for uplink and downlink */ + if (msg->epsqos.bitRatesExtPresent) { + qos.mbrUL = + eps_qos_bit_rate_ext_value(msg->epsqos.bitRatesExt.maxBitRateForUL); + qos.mbrDL = + eps_qos_bit_rate_ext_value(msg->epsqos.bitRatesExt.maxBitRateForDL); + } else if (msg->epsqos.bitRatesPresent) { + qos.mbrUL = + eps_qos_bit_rate_value(msg->epsqos.bitRates.maxBitRateForUL); + qos.mbrDL = + eps_qos_bit_rate_value(msg->epsqos.bitRates.maxBitRateForDL); + } + + /* Get the guaranteed bit rate for uplink and downlink */ + if (msg->epsqos.bitRatesExtPresent) { + qos.gbrUL = + eps_qos_bit_rate_ext_value(msg->epsqos.bitRatesExt.guarBitRateForUL); + qos.gbrDL = + eps_qos_bit_rate_ext_value(msg->epsqos.bitRatesExt.guarBitRateForDL); + } else if (msg->epsqos.bitRatesPresent) { + qos.gbrUL = + eps_qos_bit_rate_value(msg->epsqos.bitRates.guarBitRateForUL); + qos.gbrDL = + eps_qos_bit_rate_value(msg->epsqos.bitRates.guarBitRateForDL); + } + + /* Get the QoS Class Identifier */ + qos.qci = msg->epsqos.qci; + /* Get the value of the PDN type indicator */ + int pdn_type = -1; + + if (msg->pdnaddress.pdntypevalue == PDN_VALUE_TYPE_IPV4) { + pdn_type = ESM_PDN_TYPE_IPV4; + } else if (msg->pdnaddress.pdntypevalue == PDN_VALUE_TYPE_IPV6) { + pdn_type = ESM_PDN_TYPE_IPV6; + } else if (msg->pdnaddress.pdntypevalue == PDN_VALUE_TYPE_IPV4V6) { + pdn_type = ESM_PDN_TYPE_IPV4V6; + } + + /* Get the ESM cause */ + if (msg->presencemask & + ACTIVATE_DEFAULT_EPS_BEARER_CONTEXT_REQUEST_ESM_CAUSE_PRESENT) { + /* The network allocated a PDN address of a PDN type which is different + * from the requested PDN type */ + esm_cause = msg->esmcause; + } + + /* Execute the PDN connectivity procedure accepted by the network */ + int pid = esm_proc_pdn_connectivity_accept(pti, pdn_type, + &msg->pdnaddress.pdnaddressinformation, + &msg->accesspointname.accesspointnamevalue, + &esm_cause); + + if (pid != RETURNerror) { + /* Create local default EPS bearer context */ + int rc = esm_proc_default_eps_bearer_context_request(pid, ebi, &qos, + &esm_cause); + + if (rc != RETURNerror) { + esm_cause = ESM_CAUSE_SUCCESS; + } + } + + /* Return the ESM cause value */ + LOG_FUNC_RETURN (esm_cause); +} + +/**************************************************************************** + ** ** + ** Name: esm_recv_activate_dedicated_eps_bearer_context_request() ** + ** ** + ** Description: Processes Activate Dedicated EPS Bearer Context Request ** + ** message ** + ** ** + ** Inputs: pti: Procedure transaction identity ** + ** ebi: EPS bearer identity ** + ** msg: The received ESM message ** + ** Others: None ** + ** ** + ** Outputs: None ** + ** Return: ESM cause code whenever the processing of ** + ** the ESM message fails ** + ** Others: None ** + ** ** + ***************************************************************************/ +int esm_recv_activate_dedicated_eps_bearer_context_request(int pti, int ebi, + const activate_dedicated_eps_bearer_context_request_msg *msg) +{ + LOG_FUNC_IN; + + int esm_cause = ESM_CAUSE_SUCCESS; + int i; + int j; + + LOG_TRACE(INFO, "ESM-SAP - Received Activate Dedicated EPS Bearer " + "Context Request message (pti=%d, ebi=%d)", pti, ebi); + + /* + * Procedure transaction identity checking + */ + if ( esm_pt_is_reserved(pti) ) { + /* 3GPP TS 24.301, section 7.3.1, case j + * Reserved PTI value + */ + LOG_TRACE(WARNING, "ESM-SAP - Invalid PTI value (pti=%d)", pti); + LOG_FUNC_RETURN (ESM_CAUSE_INVALID_PTI_VALUE); + } else if ( (pti != ESM_PT_UNASSIGNED) && esm_pt_is_not_in_use(pti) ) { + /* 3GPP TS 24.301, section 7.3.1, case i + * Assigned value that does not match any PTI in use + */ + LOG_TRACE(WARNING, "ESM-SAP - PTI mismatch (pti=%d)", pti); + LOG_FUNC_RETURN (ESM_CAUSE_PTI_MISMATCH); + } + /* + * EPS bearer identity checking + */ + else if ( (ebi == ESM_EBI_UNASSIGNED) || esm_ebr_is_reserved(ebi) ) { + /* 3GPP TS 24.301, section 7.3.2, case h + * Reserved or unassigned EPS bearer identity value + */ + LOG_TRACE(WARNING, "ESM-SAP - Invalid EPS bearer identity (ebi=%d)", + ebi); + LOG_FUNC_RETURN (ESM_CAUSE_INVALID_EPS_BEARER_IDENTITY); + } + /* + * TFT checking + */ + else if (msg->tft.tftoperationcode != TRAFFIC_FLOW_TEMPLATE_OPCODE_CREATE) { + /* 3GPP TS 24.301, section 6.4.2.4, case a1 + * Semantic errors in TFT operations + */ + LOG_FUNC_RETURN (ESM_CAUSE_SEMANTIC_ERROR_IN_THE_TFT_OPERATION); + } else if (msg->tft.numberofpacketfilters == 0) { + /* 3GPP TS 24.301, section 6.4.2.4, case b1 + * Syntactical errors in TFT operations + */ + LOG_FUNC_RETURN (ESM_CAUSE_SYNTACTICAL_ERROR_IN_THE_TFT_OPERATION); + } + + /* + * Message processing + */ + /* Processing of the EPS bearer level QoS parameters */ + esm_proc_qos_t qos = {-1, -1, -1, -1, -1}; + + /* Get the maximum bit rate for uplink and downlink */ + if (msg->epsqos.bitRatesExtPresent) { + qos.mbrUL = + eps_qos_bit_rate_ext_value(msg->epsqos.bitRatesExt.maxBitRateForUL); + qos.mbrDL = + eps_qos_bit_rate_ext_value(msg->epsqos.bitRatesExt.maxBitRateForDL); + } else if (msg->epsqos.bitRatesPresent) { + qos.mbrUL = + eps_qos_bit_rate_value(msg->epsqos.bitRates.maxBitRateForUL); + qos.mbrDL = + eps_qos_bit_rate_value(msg->epsqos.bitRates.maxBitRateForDL); + } + + /* Get the guaranteed bit rate for uplink and downlink */ + if (msg->epsqos.bitRatesExtPresent) { + qos.gbrUL = + eps_qos_bit_rate_ext_value(msg->epsqos.bitRatesExt.guarBitRateForUL); + qos.gbrDL = + eps_qos_bit_rate_ext_value(msg->epsqos.bitRatesExt.guarBitRateForDL); + } else if (msg->epsqos.bitRatesPresent) { + qos.gbrUL = + eps_qos_bit_rate_value(msg->epsqos.bitRates.guarBitRateForUL); + qos.gbrDL = + eps_qos_bit_rate_value(msg->epsqos.bitRates.guarBitRateForDL); + } + + /* Get the QoS Class Identifier */ + qos.qci = msg->epsqos.qci; + + /* Processing of the traffic flow template parameters */ + esm_proc_tft_t tft = {0, {NULL}}; + /* Get the list of packet filters */ + const PacketFilters *pkfs = &(msg->tft.packetfilterlist.createtft); + + for (i = 0; i < msg->tft.numberofpacketfilters; i++) { + /* Create new temporary packet filter */ + tft.pkf[i] = (network_pkf_t *)malloc(sizeof(network_pkf_t)); + + if (tft.pkf[i] != NULL) { + /* Initialize the temporary packet filter */ + memset(tft.pkf[i], 0, sizeof(network_pkf_t)); + /* Increment the number of packet filters contained in the TFT */ + tft.n_pkfs += 1; + /* Packet filter identifier */ + tft.pkf[i]->id = pkfs[i]->identifier; + /* Packet filter direction */ + tft.pkf[i]->dir = pkfs[i]->direction; + /* Evaluation precedence */ + tft.pkf[i]->precedence = pkfs[i]->eval_precedence; + + /* Get the packet filter components */ + const PacketFilter *pkf = &(pkfs[i]->packetfilter); + + if (pkf->flags & TRAFFIC_FLOW_TEMPLATE_IPV4_REMOTE_ADDR_FLAG) { + /* IPv4 remote address component */ + for (j = 0; + (j < TRAFFIC_FLOW_TEMPLATE_IPV4_ADDR_SIZE) + && (j < NET_PACKET_FILTER_IPV4_ADDR_SIZE); j++) { + tft.pkf[i]->data.ipv4.addr[j] = pkf->ipv4remoteaddr[j].addr; + tft.pkf[i]->data.ipv4.mask[j] = pkf->ipv4remoteaddr[j].mask; + } + } else if (pkf->flags & TRAFFIC_FLOW_TEMPLATE_IPV6_REMOTE_ADDR_FLAG) { + /* IPv6 remote address component */ + for (j = 0; + (j < TRAFFIC_FLOW_TEMPLATE_IPV6_ADDR_SIZE) + && (j < NET_PACKET_FILTER_IPV6_ADDR_SIZE); j++) { + tft.pkf[i]->data.ipv6.addr[j] = pkf->ipv6remoteaddr[j].addr; + tft.pkf[i]->data.ipv6.mask[j] = pkf->ipv6remoteaddr[j].mask; + } + } + + if (pkf->flags & TRAFFIC_FLOW_TEMPLATE_PROTOCOL_NEXT_HEADER_FLAG) { + /* Protocol identifier/Next header component */ + tft.pkf[i]->data.ipv4.protocol = + pkf->protocolidentifier_nextheader; + } + + if (pkf->flags & TRAFFIC_FLOW_TEMPLATE_SINGLE_LOCAL_PORT_FLAG) { + /* Single local port component */ + tft.pkf[i]->lport = pkf->singlelocalport; + } else if (pkf->flags & TRAFFIC_FLOW_TEMPLATE_LOCAL_PORT_RANGE_FLAG) { + /* Local port range component */ + /* TODO: Add port range type to network_pkf_t in networkDef.h */ + tft.pkf[i]->lport = pkf->localportrange.lowlimit; + } + + if (pkf->flags & TRAFFIC_FLOW_TEMPLATE_SINGLE_REMOTE_PORT_FLAG) { + /* Single remote port component */ + tft.pkf[i]->rport = pkf->singleremoteport; + } else if (pkf->flags & TRAFFIC_FLOW_TEMPLATE_REMOTE_PORT_RANGE_FLAG) { + /* Remote port range component */ + /* TODO: Add port range type to network_pkf_t in networkDef.h */ + tft.pkf[i]->rport = pkf->remoteportrange.lowlimit; + } + + if (pkf->flags & TRAFFIC_FLOW_TEMPLATE_SECURITY_PARAMETER_INDEX) { + /* Security parameter index component */ + tft.pkf[i]->data.ipv6.ipsec = pkf->securityparameterindex; + } + + if (pkf->flags & TRAFFIC_FLOW_TEMPLATE_TYPE_OF_SERVICE_TRAFFIC_CLASS) { + /* Type of service/Traffic class component */ + tft.pkf[i]->data.ipv4.tos = + pkf->typdeofservice_trafficclass.value; + } + + if (pkf->flags & TRAFFIC_FLOW_TEMPLATE_FLOW_LABEL) { + /* Flow label component */ + tft.pkf[i]->data.ipv6.fl = pkf->flowlabel; + } + } + } + + /* Execute the dedicated EPS bearer context activation procedure */ + int rc = esm_proc_dedicated_eps_bearer_context_request(ebi, + msg->linkedepsbeareridentity, + &qos, &tft, &esm_cause); + + if (rc != RETURNerror) { + esm_cause = ESM_CAUSE_SUCCESS; + } + + /* Release temporary traffic flow template data */ + for (i = 0; i < tft.n_pkfs; i++) { + free(tft.pkf[i]); + } + + /* Return the ESM cause value */ + LOG_FUNC_RETURN (esm_cause); +} + +/**************************************************************************** + ** ** + ** Name: esm_recv_deactivate_eps_bearer_context_request() ** + ** ** + ** Description: Processes Deactivate EPS Bearer Context Request message ** + ** ** + ** Inputs: pti: Procedure transaction identity ** + ** ebi: EPS bearer identity ** + ** msg: The received ESM message ** + ** Others: None ** + ** ** + ** Outputs: None ** + ** Return: ESM cause code whenever the processing of ** + ** the ESM message fails ** + ** Others: None ** + ** ** + ***************************************************************************/ +int esm_recv_deactivate_eps_bearer_context_request(int pti, int ebi, + const deactivate_eps_bearer_context_request_msg *msg) +{ + LOG_FUNC_IN; + + int rc = RETURNok; + int esm_cause; + + LOG_TRACE(INFO, "ESM-SAP - Received Deactivate EPS Bearer Context " + "Request message (pti=%d, ebi=%d)", pti, ebi); + + /* + * Procedure transaction identity checking + */ + if ( esm_pt_is_reserved(pti) ) { + /* 3GPP TS 24.301, section 7.3.1, case m + * Reserved PTI value + */ + LOG_TRACE(WARNING, "ESM-SAP - Invalid PTI value (pti=%d)", pti); + LOG_FUNC_RETURN (ESM_CAUSE_INVALID_PTI_VALUE); + } else if ( esm_pt_is_not_in_use(pti) ) { + /* 3GPP TS 24.301, section 7.3.1, case m + * Assigned value does not match any PTI in use + */ + LOG_TRACE(WARNING, "ESM-SAP - PTI mismatch (pti=%d)", pti); + LOG_FUNC_RETURN (ESM_CAUSE_PTI_MISMATCH); + } + /* + * EPS bearer identity checking + */ + else if ( (ebi == ESM_EBI_UNASSIGNED) || esm_ebr_is_reserved(ebi) || + esm_ebr_is_not_in_use(ebi) ) { + /* 3GPP TS 24.301, section 7.3.2, case j + * Reserved or unassigned EPS bearer identity value or, + * assigned value that does not match an existing EPS bearer context + */ + LOG_TRACE(WARNING, "ESM-SAP - Invalid EPS bearer identity (ebi=%d)", + ebi); + /* Respond with a DEACTIVATE EPS BEARER CONTEXT ACCEPT message with + * the EPS bearer identity set to the received EPS bearer identity */ + LOG_FUNC_RETURN (ESM_CAUSE_INVALID_EPS_BEARER_IDENTITY); + } + + /* + * Message processing + */ + /* Get the ESM cause */ + esm_cause = msg->esmcause; + + /* Execute the PDN disconnect procedure accepted by the network */ + if (pti != ESM_PT_UNASSIGNED) { + rc = esm_proc_pdn_disconnect_accept(pti, &esm_cause); + } + + if (rc != RETURNerror) { + /* Execute the EPS bearer context deactivation procedure */ + rc = esm_proc_eps_bearer_context_deactivate_request(ebi, &esm_cause); + + if (rc != RETURNerror) { + esm_cause = ESM_CAUSE_SUCCESS; + } + } + + /* Return the ESM cause value */ + LOG_FUNC_RETURN (esm_cause); +} + + + +/****************************************************************************/ +/********************* L O C A L F U N C T I O N S *********************/ +/****************************************************************************/ diff --git a/openair-cn/NAS/UE/ESM/SAP/esm_recv.h b/openair-cn/NAS/UE/ESM/SAP/esm_recv.h new file mode 100755 index 0000000000..f3c6a174d0 --- /dev/null +++ b/openair-cn/NAS/UE/ESM/SAP/esm_recv.h @@ -0,0 +1,118 @@ +/******************************************************************************* + OpenAirInterface + Copyright(c) 1999 - 2014 Eurecom + + OpenAirInterface is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + + OpenAirInterface is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with OpenAirInterface.The full GNU General Public License is + included in this distribution in the file called "COPYING". If not, + see . + + Contact Information + OpenAirInterface Admin: openair_admin@eurecom.fr + OpenAirInterface Tech : openair_tech@eurecom.fr + OpenAirInterface Dev : openair4g-devel@eurecom.fr + + Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. + + *******************************************************************************/ +/***************************************************************************** +Source esm_recv.h + +Version 0.1 + +Date 2013/02/06 + +Product NAS stack + +Subsystem EPS Session Management + +Author Frederic Maurel + +Description Defines functions executed at the ESM Service Access + Point upon receiving EPS Session Management messages + from the EPS Mobility Management sublayer. + +*****************************************************************************/ +#ifndef __ESM_RECV_H__ +#define __ESM_RECV_H__ + +#include "EsmStatus.h" +#include "emmData.h" + +#include "PdnConnectivityReject.h" +#include "PdnDisconnectReject.h" +#include "BearerResourceAllocationReject.h" +#include "BearerResourceModificationReject.h" + +#include "ActivateDefaultEpsBearerContextRequest.h" +#include "ActivateDedicatedEpsBearerContextRequest.h" +#include "ModifyEpsBearerContextRequest.h" +#include "DeactivateEpsBearerContextRequest.h" + +#include "EsmInformationRequest.h" + +/****************************************************************************/ +/********************* G L O B A L C O N S T A N T S *******************/ +/****************************************************************************/ + +/****************************************************************************/ +/************************ G L O B A L T Y P E S ************************/ +/****************************************************************************/ + +/****************************************************************************/ +/******************** G L O B A L V A R I A B L E S ********************/ +/****************************************************************************/ + +/****************************************************************************/ +/****************** E X P O R T E D F U N C T I O N S ******************/ +/****************************************************************************/ + +/* + * -------------------------------------------------------------------------- + * Functions executed by both the UE and the MME upon receiving ESM messages + * -------------------------------------------------------------------------- + */ +int esm_recv_status(int pti, int ebi, const esm_status_msg *msg); + + +/* + * -------------------------------------------------------------------------- + * Functions executed by the UE upon receiving ESM message from the network + * -------------------------------------------------------------------------- + */ +/* + * Transaction related messages + * ---------------------------- + */ +int esm_recv_pdn_connectivity_reject(int pti, int ebi, + const pdn_connectivity_reject_msg *msg); + +int esm_recv_pdn_disconnect_reject(int pti, int ebi, + const pdn_disconnect_reject_msg *msg); + +/* + * Messages related to EPS bearer contexts + * --------------------------------------- + */ +int esm_recv_activate_default_eps_bearer_context_request(int pti, int ebi, + const activate_default_eps_bearer_context_request_msg *msg); + +int esm_recv_activate_dedicated_eps_bearer_context_request(int pti, int ebi, + const activate_dedicated_eps_bearer_context_request_msg *msg); + +int esm_recv_deactivate_eps_bearer_context_request(int pti, int ebi, + const deactivate_eps_bearer_context_request_msg *msg); + + +#endif /* __ESM_RECV_H__*/ diff --git a/openair-cn/NAS/UE/ESM/SAP/esm_sap.c b/openair-cn/NAS/UE/ESM/SAP/esm_sap.c new file mode 100755 index 0000000000..dd0c0114a9 --- /dev/null +++ b/openair-cn/NAS/UE/ESM/SAP/esm_sap.c @@ -0,0 +1,797 @@ +/******************************************************************************* + OpenAirInterface + Copyright(c) 1999 - 2014 Eurecom + + OpenAirInterface is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + + OpenAirInterface is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with OpenAirInterface.The full GNU General Public License is + included in this distribution in the file called "COPYING". If not, + see . + + Contact Information + OpenAirInterface Admin: openair_admin@eurecom.fr + OpenAirInterface Tech : openair_tech@eurecom.fr + OpenAirInterface Dev : openair4g-devel@eurecom.fr + + Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. + + *******************************************************************************/ +/***************************************************************************** +Source esm_sap.c + +Version 0.1 + +Date 2012/11/22 + +Product NAS stack + +Subsystem EPS Session Management + +Author Frederic Maurel + +Description Defines the ESM Service Access Points at which the EPS + Session Management sublayer provides procedures for the + EPS bearer context handling and resources allocation. + +*****************************************************************************/ + +#include "esm_sap.h" +#include "esm_recv.h" +#include "esm_send.h" +#include "commonDef.h" +#include "nas_log.h" + +#include "OctetString.h" +#include "TLVDecoder.h" +#include "esm_msgDef.h" +#include "esm_msg.h" + +#include "esm_cause.h" +#include "esm_proc.h" + +#include // memset, strlen +#include + +/****************************************************************************/ +/**************** E X T E R N A L D E F I N I T I O N S ****************/ +/****************************************************************************/ + +/****************************************************************************/ +/******************* L O C A L D E F I N I T I O N S *******************/ +/****************************************************************************/ + +static int _esm_sap_recv(int msg_type, int is_standalone, + const OctetString *req, OctetString *rsp, esm_sap_error_t *err); +static int _esm_sap_send(int msg_type, int is_standalone, int pti, int ebi, + const esm_sap_data_t *data, OctetString *rsp); + + +/* + * String representation of ESM-SAP primitives + */ +static const char *_esm_sap_primitive_str[] = { + "ESM_DEFAULT_EPS_BEARER_CONTEXT_ACTIVATE_REQ", + "ESM_DEFAULT_EPS_BEARER_CONTEXT_ACTIVATE_CNF", + "ESM_DEFAULT_EPS_BEARER_CONTEXT_ACTIVATE_REJ", + "ESM_DEDICATED_EPS_BEARER_CONTEXT_ACTIVATE_REQ", + "ESM_DEDICATED_EPS_BEARER_CONTEXT_ACTIVATE_CNF", + "ESM_DEDICATED_EPS_BEARER_CONTEXT_ACTIVATE_REJ", + "ESM_EPS_BEARER_CONTEXT_MODIFY_REQ", + "ESM_EPS_BEARER_CONTEXT_MODIFY_CNF", + "ESM_EPS_BEARER_CONTEXT_MODIFY_REJ", + "ESM_EPS_BEARER_CONTEXT_DEACTIVATE_REQ", + "ESM_EPS_BEARER_CONTEXT_DEACTIVATE_CNF", + "ESM_PDN_CONNECTIVITY_REQ", + "ESM_PDN_CONNECTIVITY_REJ", + "ESM_PDN_DISCONNECT_REQ", + "ESM_PDN_DISCONNECT_REJ", + "ESM_BEARER_RESOURCE_ALLOCATE_REQ", + "ESM_BEARER_RESOURCE_ALLOCATE_REJ", + "ESM_BEARER_RESOURCE_MODIFY_REQ", + "ESM_BEARER_RESOURCE_MODIFY_REJ", + "ESM_UNITDATA_IND", +}; + +/* + * Buffer used to encode ESM messages before being returned to the EPS + * Mobility Management sublayer in order to be sent onto the network + */ +#define ESM_SAP_BUFFER_SIZE 4096 +static char _esm_sap_buffer[ESM_SAP_BUFFER_SIZE]; + +/****************************************************************************/ +/****************** E X P O R T E D F U N C T I O N S ******************/ +/****************************************************************************/ + +/**************************************************************************** + ** ** + ** Name: esm_sap_initialize() ** + ** ** + ** Description: Initializes the ESM Service Access Point state machine ** + ** ** + ** Inputs: None ** + ** Others: None ** + ** ** + ** Outputs: None ** + ** Return: None ** + ** Others: NONE ** + ** ** + ***************************************************************************/ +void esm_sap_initialize(void) +{ + LOG_FUNC_IN; + + /* Initialize ESM state machine */ + //esm_fsm_initialize(); + + LOG_FUNC_OUT; +} + +/**************************************************************************** + ** ** + ** Name: esm_sap_send() ** + ** ** + ** Description: Processes the ESM Service Access Point primitive ** + ** ** + ** Inputs: msg: The ESM-SAP primitive to process ** + ** Others: None ** + ** ** + ** Outputs: None ** + ** Return: RETURNok, RETURNerror ** + ** Others: None ** + ** ** + ***************************************************************************/ +int esm_sap_send(esm_sap_t *msg) +{ + LOG_FUNC_IN; + + int rc = RETURNerror; + int pid; + + /* Check the ESM-SAP primitive */ + esm_primitive_t primitive = msg->primitive; + assert( (primitive > ESM_START) && (primitive < ESM_END)); + + LOG_TRACE(INFO, "ESM-SAP - Received primitive %s (%d)", + _esm_sap_primitive_str[primitive - ESM_START - 1], primitive); + + switch (primitive) { + case ESM_PDN_CONNECTIVITY_REQ: + { + esm_pdn_connectivity_t *pdn_connect = &msg->data.pdn_connect; + + if ( !msg->is_standalone || !pdn_connect->is_defined ) { + OctetString apn = {0, NULL}; + + if (pdn_connect->apn) { + apn.length = strlen(pdn_connect->apn); + apn.value = (uint8_t *)pdn_connect->apn; + } + + /* Define new PDN context */ + rc = esm_proc_pdn_connectivity(pdn_connect->cid, TRUE, + pdn_connect->pdn_type, &apn, + pdn_connect->is_emergency, NULL); + + if ( msg->is_standalone || (rc != RETURNok) ) { + break; + } + } + + if (pdn_connect->is_defined) { + unsigned int pti; + /* Assign new procedure transaction identity */ + rc = esm_proc_pdn_connectivity(pdn_connect->cid, TRUE, + pdn_connect->pdn_type, NULL, + pdn_connect->is_emergency, &pti); + + if (rc != RETURNerror) { + /* Send PDN connectivity request */ + rc = _esm_sap_send(PDN_CONNECTIVITY_REQUEST, + msg->is_standalone, + pti, EPS_BEARER_IDENTITY_UNASSIGNED, + &msg->data, &msg->send); + } + } + } + break; + + case ESM_PDN_CONNECTIVITY_REJ: + + { + esm_pdn_connectivity_t *pdn_connect = &msg->data.pdn_connect; + + if ( msg->is_standalone && pdn_connect->is_defined ) { + /* Undefine the specified PDN context */ + rc = esm_proc_pdn_connectivity(pdn_connect->cid, FALSE, + pdn_connect->pdn_type, NULL, + pdn_connect->is_emergency, NULL); + } else if (msg->recv != NULL) { + /* The UE received a PDN connectivity reject message */ + rc = _esm_sap_recv(PDN_CONNECTIVITY_REJECT, msg->is_standalone, + msg->recv, &msg->send, &msg->err); + } else { + /* The PDN connectivity procedure locally failed */ + rc = esm_proc_pdn_connectivity_failure(TRUE); + } + } + break; + + case ESM_PDN_DISCONNECT_REQ: + { + unsigned int pti, ebi; + /* Get the procedure transaction identity and the EPS bearer + * identity of the default bearer assigned to the PDN to + * disconnect from */ + rc = esm_proc_pdn_disconnect(msg->data.pdn_disconnect.cid, + &pti, &ebi); + + if (rc != RETURNerror) { + /* Send PDN disconnect request */ + rc = _esm_sap_send(PDN_DISCONNECT_REQUEST, TRUE, pti, ebi, + &msg->data, &msg->send); + } + } + break; + + case ESM_PDN_DISCONNECT_REJ: + break; + + case ESM_BEARER_RESOURCE_ALLOCATE_REQ: + break; + + case ESM_BEARER_RESOURCE_ALLOCATE_REJ: + break; + + case ESM_BEARER_RESOURCE_MODIFY_REQ: + break; + + case ESM_BEARER_RESOURCE_MODIFY_REJ: + break; + + case ESM_DEFAULT_EPS_BEARER_CONTEXT_ACTIVATE_REQ: + /* The UE received activate default ESP bearer context request */ + rc = _esm_sap_recv(ACTIVATE_DEFAULT_EPS_BEARER_CONTEXT_REQUEST, + msg->is_standalone, + msg->recv, &msg->send, &msg->err); + break; + + case ESM_DEFAULT_EPS_BEARER_CONTEXT_ACTIVATE_CNF: + /* + * The activate default ESP bearer context accept message + * has been successfully delivered to the other side + */ + rc = esm_proc_default_eps_bearer_context_complete(); + + if (rc != RETURNerror) { + rc = esm_proc_pdn_connectivity_complete(); + } + + break; + + case ESM_DEFAULT_EPS_BEARER_CONTEXT_ACTIVATE_REJ: + /* + * Default ESP bearer context activation procedure locally failed + */ + rc = esm_proc_default_eps_bearer_context_failure(); + + if (rc != RETURNerror) { + rc = esm_proc_pdn_connectivity_failure(FALSE); + } + + break; + + case ESM_DEDICATED_EPS_BEARER_CONTEXT_ACTIVATE_REQ: + break; + + case ESM_DEDICATED_EPS_BEARER_CONTEXT_ACTIVATE_CNF: + break; + + case ESM_DEDICATED_EPS_BEARER_CONTEXT_ACTIVATE_REJ: + break; + + case ESM_EPS_BEARER_CONTEXT_MODIFY_REQ: + break; + + case ESM_EPS_BEARER_CONTEXT_MODIFY_CNF: + break; + + case ESM_EPS_BEARER_CONTEXT_MODIFY_REJ: + break; + + case ESM_EPS_BEARER_CONTEXT_DEACTIVATE_REQ: { + int bid; + /* + * Locally deactivate EPS bearer context + */ + rc = esm_proc_eps_bearer_context_deactivate(TRUE, + msg->data.eps_bearer_context_deactivate.ebi, &pid, &bid); + } + break; + + case ESM_EPS_BEARER_CONTEXT_DEACTIVATE_CNF: + break; + + case ESM_UNITDATA_IND: + rc = _esm_sap_recv(-1, msg->is_standalone, msg->recv, + &msg->send, &msg->err); + break; + + default: + break; + } + + LOG_FUNC_RETURN (rc); +} + +/****************************************************************************/ +/********************* L O C A L F U N C T I O N S *********************/ +/****************************************************************************/ + +/**************************************************************************** + ** ** + ** Name: _esm_sap_recv() ** + ** ** + ** Description: Processes ESM messages received from the network: Decodes ** + ** the message and checks whether it is of the expected ty- ** + ** pe, checks the validity of the procedure transaction iden-** + ** tity, checks the validity of the EPS bearer identity, and ** + ** parses the message content. ** + ** If no protocol error is found the ESM response message is ** + ** returned in order to be sent back onto the network upon ** + ** the relevant ESM procedure completion. ** + ** If a protocol error is found the ESM status message is ** + ** returned including the value of the ESM cause code. ** + ** ** + ** Inputs: msg_type: Expected type of the received ESM message ** + ** is_standalone: Indicates whether the ESM message has been ** + ** received standalone or together within EMM ** + ** attach related message ** + ** ueid: UE identifier within the MME ** + ** req: The encoded ESM request message to process ** + ** Others: None ** + ** ** + ** Outputs: rsp: The encoded ESM response message to be re- ** + ** turned upon ESM procedure completion ** + ** err: Error code of the ESM procedure ** + ** Return: RETURNok, RETURNerror ** + ** Others: _esm_sap_buffer ** + ** ** + ***************************************************************************/ +static int _esm_sap_recv(int msg_type, int is_standalone, + const OctetString *req, OctetString *rsp, + esm_sap_error_t *err) +{ + esm_proc_procedure_t esm_procedure = NULL; + int esm_cause = ESM_CAUSE_SUCCESS; + int rc = RETURNerror; + int decoder_rc; + + ESM_msg esm_msg; + + LOG_FUNC_IN; + + memset(&esm_msg, 0 , sizeof(ESM_msg)); + + /* Decode the received ESM message */ + decoder_rc = esm_msg_decode(&esm_msg, req->value, req->length); + + /* Process decoding errors */ + if (decoder_rc < 0) { + /* 3GPP TS 24.301, section 7.2 + * Ignore received message that is too short to contain a complete + * message type information element */ + if (decoder_rc == TLV_DECODE_BUFFER_TOO_SHORT) { + LOG_TRACE(WARNING, "ESM-SAP - Discard message too short to " + "contain a complete message type IE"); + /* Return indication that received message has been discarded */ + *err = ESM_SAP_DISCARDED; + LOG_FUNC_RETURN (RETURNok); + } + /* 3GPP TS 24.301, section 7.2 + * Unknown or unforeseen message type */ + else if (decoder_rc == TLV_DECODE_WRONG_MESSAGE_TYPE) { + esm_cause = ESM_CAUSE_MESSAGE_TYPE_NOT_IMPLEMENTED; + } + /* 3GPP TS 24.301, section 7.7.2 + * Conditional IE errors */ + else if (decoder_rc == TLV_DECODE_UNEXPECTED_IEI) { + esm_cause = ESM_CAUSE_CONDITIONAL_IE_ERROR; + } else { + esm_cause = ESM_CAUSE_PROTOCOL_ERROR; + } + } + /* Check the type of the ESM message actually received */ + else if ( (msg_type > 0) && (msg_type != esm_msg.header.message_type) ) { + if (esm_msg.header.message_type != ESM_STATUS) { + /* Semantically incorrect ESM message */ + LOG_TRACE(ERROR, "ESM-SAP - Received ESM message 0x%x is not " + "of the expected type (0x%x)", + esm_msg.header.message_type, msg_type); + esm_cause = ESM_CAUSE_SEMANTICALLY_INCORRECT; + } + } + + /* Get the procedure transaction identity */ + unsigned int pti = esm_msg.header.procedure_transaction_identity; + /* Get the EPS bearer identity */ + unsigned int ebi = esm_msg.header.eps_bearer_identity; + /* Indicate whether the ESM bearer context related procedure was triggered + * by the receipt of a transaction related request message from the UE or + * was triggered network-internally */ + int triggered_by_ue = (pti != PROCEDURE_TRANSACTION_IDENTITY_UNASSIGNED); + /* Indicate whether the received message shall be ignored */ + int is_discarded = FALSE; + + if (esm_cause != ESM_CAUSE_SUCCESS) { + LOG_TRACE(ERROR, "ESM-SAP - Failed to decode expected ESM message " + "0x%x", msg_type); + } + /* Process the received ESM message */ + else switch (esm_msg.header.message_type) { + + case ACTIVATE_DEFAULT_EPS_BEARER_CONTEXT_REQUEST: + /* + * Process activate default EPS bearer context request message + * received from the MME + */ + esm_cause = esm_recv_activate_default_eps_bearer_context_request( + pti, ebi, + &esm_msg.activate_default_eps_bearer_context_request); + + if ( (esm_cause == ESM_CAUSE_SUCCESS) || + (esm_cause == ESM_CAUSE_PTI_ALREADY_IN_USE) ) { + /* Return accept message */ + rc = esm_send_activate_default_eps_bearer_context_accept(ebi, + &esm_msg.activate_default_eps_bearer_context_accept); + /* Setup the callback function used to send activate default + * EPS bearer context accept message onto the network */ + esm_procedure = esm_proc_default_eps_bearer_context_accept; + + if (esm_cause == ESM_CAUSE_PTI_ALREADY_IN_USE) { + /* 3GPP TS 24.301, section 7.3.1, case g + * Return accept message, even to network retransmission + * of already accepted activate default EPS bearer context + * request message + */ + is_discarded = TRUE; + } + } else { + /* Return reject message */ + rc = esm_send_activate_default_eps_bearer_context_reject(ebi, + &esm_msg.activate_default_eps_bearer_context_reject, + esm_cause); + /* Setup the callback function used to send activate default + * EPS bearer context reject message onto the network */ + esm_procedure = esm_proc_default_eps_bearer_context_reject; + } + + break; + + case ACTIVATE_DEDICATED_EPS_BEARER_CONTEXT_REQUEST: + /* + * Process activate dedicated EPS bearer context request message + * received from the MME + */ + esm_cause = esm_recv_activate_dedicated_eps_bearer_context_request( + pti, ebi, + &esm_msg.activate_dedicated_eps_bearer_context_request); + + if ( (esm_cause == ESM_CAUSE_SUCCESS) || + (esm_cause == ESM_CAUSE_PTI_ALREADY_IN_USE) ) { + /* Return accept message */ + rc = esm_send_activate_dedicated_eps_bearer_context_accept(ebi, + &esm_msg.activate_dedicated_eps_bearer_context_accept); + /* Setup the callback function used to send activate dedicated + * EPS bearer context accept message onto the network */ + esm_procedure = esm_proc_dedicated_eps_bearer_context_accept; + + if (esm_cause == ESM_CAUSE_PTI_ALREADY_IN_USE) { + /* 3GPP TS 24.301, section 7.3.1, case i + * Return accept message, even to network retransmission + * of already accepted activate dedicated EPS bearer context + * request message + */ + is_discarded = TRUE; + } + } else { + /* Return reject message */ + rc = esm_send_activate_dedicated_eps_bearer_context_reject(ebi, + &esm_msg.activate_dedicated_eps_bearer_context_reject, + esm_cause); + /* Setup the callback function used to send activate dedicated + * EPS bearer context reject message onto the network */ + esm_procedure = esm_proc_dedicated_eps_bearer_context_reject; + } + + break; + + case MODIFY_EPS_BEARER_CONTEXT_REQUEST: + break; + + case DEACTIVATE_EPS_BEARER_CONTEXT_REQUEST: + /* + * Process deactivate EPS bearer context request message + * received from the MME + */ + esm_cause = esm_recv_deactivate_eps_bearer_context_request(pti, ebi, + &esm_msg.deactivate_eps_bearer_context_request); + + if ( (esm_cause == ESM_CAUSE_INVALID_PTI_VALUE) || + (esm_cause == ESM_CAUSE_PTI_MISMATCH) ) { + /* 3GPP TS 24.301, section 7.3.1, case m + * Ignore deactivate EPS bearer context request message + * received with PTI reserved value, or assigned value + * that does not match any PTI in use + */ + is_discarded = TRUE; + } else if ( (esm_cause == ESM_CAUSE_SUCCESS) || + (esm_cause == ESM_CAUSE_INVALID_EPS_BEARER_IDENTITY) ) { + /* Return accept message */ + rc = esm_send_deactivate_eps_bearer_context_accept(ebi, + &esm_msg.deactivate_eps_bearer_context_accept); + /* Setup the callback function used to send deactivate + * EPS bearer context accept message onto the network */ + esm_procedure = esm_proc_eps_bearer_context_deactivate_accept; + + if (esm_cause == ESM_CAUSE_INVALID_EPS_BEARER_IDENTITY) { + /* 3GPP TS 24.301, section 7.3.2, case j + * Respond with a deactivate EPS bearer context accept + * message with the EPS bearer identity set to the received + * EPS bearer identity + */ + is_discarded = TRUE; + } + } + + break; + + case PDN_CONNECTIVITY_REJECT: + /* + * Process PDN connectivity reject message received from the MME + */ + esm_cause = esm_recv_pdn_connectivity_reject(pti, ebi, + &esm_msg.pdn_connectivity_reject); + + if ( (esm_cause == ESM_CAUSE_INVALID_PTI_VALUE) || + (esm_cause == ESM_CAUSE_PTI_MISMATCH) || + (esm_cause == ESM_CAUSE_INVALID_EPS_BEARER_IDENTITY) ) { + /* 3GPP TS 24.301, section 7.3.1, case a + * Ignore PDN connectivity reject message received with + * reserved or unassigned PTI value, or assigned value that + * does not match any PTI in use + * 3GPP TS 24.301, section 7.3.2, case a + * Ignore PDN connectivity reject message received with + * reserved or unassigned EPS bearer identity value + */ + is_discarded = TRUE; + } + + break; + + case PDN_DISCONNECT_REJECT: + /* + * Process PDN disconnect reject message received from the MME + */ + esm_cause = esm_recv_pdn_disconnect_reject(pti, ebi, + &esm_msg.pdn_disconnect_reject); + + if ( (esm_cause == ESM_CAUSE_INVALID_PTI_VALUE) || + (esm_cause == ESM_CAUSE_PTI_MISMATCH) || + (esm_cause == ESM_CAUSE_INVALID_EPS_BEARER_IDENTITY) ) { + /* 3GPP TS 24.301, section 7.3.1, case b + * Ignore PDN disconnect reject message received with + * reserved or unassigned PTI value, or assigned value that + * does not match any PTI in use + * 3GPP TS 24.301, section 7.3.2, case b + * Ignore PDN disconnect reject message received with + * reserved or unassigned EPS bearer identity value + */ + is_discarded = TRUE; + } + + break; + + case BEARER_RESOURCE_ALLOCATION_REJECT: + break; + + case BEARER_RESOURCE_MODIFICATION_REJECT: + break; + + case ESM_INFORMATION_REQUEST: + break; + + case ESM_STATUS: + /* + * Process received ESM status message + */ + esm_cause = esm_recv_status(pti, ebi, &esm_msg.esm_status); + break; + + default: + LOG_TRACE(WARNING, "ESM-SAP - Received unexpected ESM message " + "0x%x", esm_msg.header.message_type); + esm_cause = ESM_CAUSE_MESSAGE_TYPE_NOT_IMPLEMENTED; + break; + } + + if ( (esm_cause != ESM_CAUSE_SUCCESS) && (esm_procedure == NULL) ) { + /* ESM message processing failed */ + if (!is_discarded) { + /* 3GPP TS 24.301, section 7.1 + * Handling of unknown, unforeseen, and erroneous protocol data */ + LOG_TRACE(WARNING, "ESM-SAP - Received ESM message is not valid " + "(cause=%d)", esm_cause); + /* Return an ESM status message */ + rc = esm_send_status(pti, ebi, &esm_msg.esm_status, esm_cause); + /* Setup the callback function used to send ESM status message + * onto the network */ + esm_procedure = esm_proc_status; + /* Discard received ESM message */ + is_discarded = TRUE; + } + } else { + /* ESM message processing succeed */ + *err = ESM_SAP_SUCCESS; + rc = RETURNok; + } + + if ( (rc != RETURNerror) && (esm_procedure != NULL) ) { + /* Encode the returned ESM response message */ + int size = esm_msg_encode(&esm_msg, (uint8_t *)_esm_sap_buffer, + ESM_SAP_BUFFER_SIZE); + + if (size > 0) { + rsp->length = size; + rsp->value = (uint8_t *)(_esm_sap_buffer); + } + + /* Complete the relevant ESM procedure */ + rc = (*esm_procedure)(is_standalone, ebi, rsp, triggered_by_ue); + + if (is_discarded) { + /* Return indication that received message has been discarded */ + *err = ESM_SAP_DISCARDED; + } else if (rc != RETURNok) { + /* Return indication that ESM procedure failed */ + *err = ESM_SAP_FAILED; + } + } else if (is_discarded) { + LOG_TRACE(WARNING, "ESM-SAP - Silently discard message type 0x%x", + esm_msg.header.message_type); + /* Return indication that received message has been discarded */ + *err = ESM_SAP_DISCARDED; + rc = RETURNok; + } + + LOG_FUNC_RETURN(rc); +} + +/**************************************************************************** + ** ** + ** Name: _esm_sap_send() ** + ** ** + ** Description: Processes ESM messages to send onto the network: Encoded ** + ** the message and execute the relevant ESM procedure. ** + ** ** + ** Inputs: msg_type: Type of the ESM message to be sent ** + ** is_standalone: Indicates whether the ESM message has to ** + ** be sent standalone or together within EMM ** + ** attach related message ** + ** ueid: UE identifier within the MME ** + ** pti: Procedure transaction identity ** + ** ebi: EPS bearer identity ** + ** data: Data required to build the message ** + ** Others: None ** + ** ** + ** Outputs: rsp: The encoded ESM response message to be re- ** + ** turned upon ESM procedure completion ** + ** Return: RETURNok, RETURNerror ** + ** Others: _esm_sap_buffer ** + ** ** + ***************************************************************************/ +static int _esm_sap_send(int msg_type, int is_standalone, + int pti, int ebi, const esm_sap_data_t *data, + OctetString *rsp) +{ + LOG_FUNC_IN; + + esm_proc_procedure_t esm_procedure = NULL; + int rc = RETURNok; + + /* Indicate whether the message is sent by the UE or the MME */ + int sent_by_ue = TRUE; + + ESM_msg esm_msg; + memset(&esm_msg, 0 , sizeof(ESM_msg)); + + /* Process the ESM message to send */ + switch (msg_type) { + + case ACTIVATE_DEFAULT_EPS_BEARER_CONTEXT_ACCEPT: + break; + + case ACTIVATE_DEFAULT_EPS_BEARER_CONTEXT_REJECT: + break; + + case ACTIVATE_DEDICATED_EPS_BEARER_CONTEXT_ACCEPT: + break; + + case ACTIVATE_DEDICATED_EPS_BEARER_CONTEXT_REJECT: + break; + + case MODIFY_EPS_BEARER_CONTEXT_ACCEPT: + break; + + case MODIFY_EPS_BEARER_CONTEXT_REJECT: + break; + + case DEACTIVATE_EPS_BEARER_CONTEXT_ACCEPT: + break; + + case PDN_CONNECTIVITY_REQUEST: { + /* + * Process PDN connectivity request message to send to the MME + */ + const esm_pdn_connectivity_t *msg = &data->pdn_connect; + rc = esm_send_pdn_connectivity_request(pti, msg->is_emergency, + msg->pdn_type, msg->apn, + &esm_msg.pdn_connectivity_request); + /* Setup callback function used to send PDN connectivity request + * message onto the network */ + esm_procedure = esm_proc_pdn_connectivity_request; + break; + } + + case PDN_DISCONNECT_REQUEST: + /* + * Process PDN disconnect request message to send to the MME + */ + rc = esm_send_pdn_disconnect_request(pti, ebi, + &esm_msg.pdn_disconnect_request); + /* Setup callback function used to send PDN disconnect request + * message onto the network */ + esm_procedure = esm_proc_pdn_disconnect_request; + break; + + case BEARER_RESOURCE_ALLOCATION_REQUEST: + break; + + case BEARER_RESOURCE_MODIFICATION_REQUEST: + break; + + default: + LOG_TRACE(WARNING, "ESM-SAP - Send unexpected ESM message 0x%x", + msg_type); + break; + } + + if (rc != RETURNerror) { + /* Encode the returned ESM response message */ + int size = esm_msg_encode(&esm_msg, (uint8_t *)_esm_sap_buffer, + ESM_SAP_BUFFER_SIZE); + + if (size > 0) { + rsp->length = size; + rsp->value = (uint8_t *)(_esm_sap_buffer); + } + + /* Execute the relevant ESM procedure */ + if (esm_procedure) { + rc = (*esm_procedure)(is_standalone, pti, rsp, sent_by_ue); + } + } + + LOG_FUNC_RETURN(rc); +} + diff --git a/openair-cn/NAS/UE/ESM/SAP/esm_sap.h b/openair-cn/NAS/UE/ESM/SAP/esm_sap.h new file mode 100755 index 0000000000..c2d900a4ae --- /dev/null +++ b/openair-cn/NAS/UE/ESM/SAP/esm_sap.h @@ -0,0 +1,72 @@ +/******************************************************************************* + OpenAirInterface + Copyright(c) 1999 - 2014 Eurecom + + OpenAirInterface is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + + OpenAirInterface is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with OpenAirInterface.The full GNU General Public License is + included in this distribution in the file called "COPYING". If not, + see . + + Contact Information + OpenAirInterface Admin: openair_admin@eurecom.fr + OpenAirInterface Tech : openair_tech@eurecom.fr + OpenAirInterface Dev : openair4g-devel@eurecom.fr + + Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. + + *******************************************************************************/ +/***************************************************************************** +Source esm_sap.h + +Version 0.1 + +Date 2012/11/22 + +Product NAS stack + +Subsystem EPS Session Management + +Author Frederic Maurel + +Description Defines the ESM Service Access Points at which the EPS + Session Management sublayer provides procedures for the + EPS bearer context handling and resources allocation. + +*****************************************************************************/ +#ifndef __ESM_SAP_H__ +#define __ESM_SAP_H__ + +#include "esm_sapDef.h" + +/****************************************************************************/ +/********************* G L O B A L C O N S T A N T S *******************/ +/****************************************************************************/ + +/****************************************************************************/ +/************************ G L O B A L T Y P E S ************************/ +/****************************************************************************/ + +/****************************************************************************/ +/******************** G L O B A L V A R I A B L E S ********************/ +/****************************************************************************/ + +/****************************************************************************/ +/****************** E X P O R T E D F U N C T I O N S ******************/ +/****************************************************************************/ + +void esm_sap_initialize(void); + +int esm_sap_send(esm_sap_t *msg); + +#endif /* __ESM_SAP_H__*/ diff --git a/openair-cn/NAS/EURECOM-NAS/src/esm/sap/esm_sapDef.h b/openair-cn/NAS/UE/ESM/SAP/esm_sapDef.h old mode 100644 new mode 100755 similarity index 91% rename from openair-cn/NAS/EURECOM-NAS/src/esm/sap/esm_sapDef.h rename to openair-cn/NAS/UE/ESM/SAP/esm_sapDef.h index e77cf15da7..e36d1faed5 --- a/openair-cn/NAS/EURECOM-NAS/src/esm/sap/esm_sapDef.h +++ b/openair-cn/NAS/UE/ESM/SAP/esm_sapDef.h @@ -59,7 +59,7 @@ Description Defines the ESM Service Access Point that provides EPS * EPS Session Management primitives * --------------------------------- */ -typedef enum { +typedef enum esm_primitive_s { ESM_START = 0, /* Procedures related to EPS bearer contexts (initiated by the network) */ ESM_DEFAULT_EPS_BEARER_CONTEXT_ACTIVATE_REQ, @@ -107,14 +107,14 @@ typedef enum { * ESM primitive for activate EPS default bearer context procedure * --------------------------------------------------------------- */ -typedef struct { +typedef struct esm_activate_eps_default_bearer_context_s { } esm_activate_eps_default_bearer_context_t; /* * ESM primitive for PDN connectivity procedure * -------------------------------------------- */ -typedef struct { +typedef struct esm_pdn_connectivity_s { int cid; /* PDN connection local identifier */ int is_defined; /* Indicates whether a PDN context has been defined * for the specified APN */ @@ -129,7 +129,7 @@ typedef struct { * ESM primitive for PDN disconnect procedure * ------------------------------------------ */ -typedef struct { +typedef struct esm_pdn_disconnect_s { int cid; /* PDN connection local identifier */ } esm_pdn_disconnect_t; @@ -137,7 +137,7 @@ typedef struct { * ESM primitive for deactivate EPS bearer context procedure * --------------------------------------------------------- */ -typedef struct { +typedef struct esm_eps_bearer_context_deactivate_s { #define ESM_SAP_ALL_EBI 0xff unsigned int ebi; /* EPS bearer identity of the EPS bearer context * to be deactivated */ @@ -154,20 +154,17 @@ typedef union { esm_eps_bearer_context_deactivate_t eps_bearer_context_deactivate; } esm_sap_data_t; -typedef struct { +typedef struct esm_sap_s { esm_primitive_t primitive; /* ESM-SAP primitive to process */ int is_standalone; /* Indicates whether the ESM message handled * within this primitive has to be sent/received * standalone or together within an EMM related * message */ -#if defined(NAS_MME) - emm_data_context_t *ctx; /* UE context */ -#endif - unsigned int ueid; /* Local UE identifier */ - esm_sap_error_t err; /* ESM-SAP error code */ - const OctetString *recv; /* Encoded ESM message received */ - OctetString send; /* Encoded ESM message to be sent */ - esm_sap_data_t data; /* ESM message data parameters */ + unsigned int ueid; /* Local UE identifier */ + esm_sap_error_t err; /* ESM-SAP error code */ + const OctetString *recv; /* Encoded ESM message received */ + OctetString send; /* Encoded ESM message to be sent */ + esm_sap_data_t data; /* ESM message data parameters */ } esm_sap_t; /****************************************************************************/ diff --git a/openair-cn/NAS/EURECOM-NAS/src/esm/sap/esm_send.c b/openair-cn/NAS/UE/ESM/SAP/esm_send.c old mode 100644 new mode 100755 similarity index 59% rename from openair-cn/NAS/EURECOM-NAS/src/esm/sap/esm_send.c rename to openair-cn/NAS/UE/ESM/SAP/esm_send.c index c7f58eaf52..c5de9958ca --- a/openair-cn/NAS/EURECOM-NAS/src/esm/sap/esm_send.c +++ b/openair-cn/NAS/UE/ESM/SAP/esm_send.c @@ -49,9 +49,7 @@ Description Defines functions executed at the ESM Service Access #include "commonDef.h" #include "nas_log.h" -#ifdef NAS_UE #include "networkDef.h" -#endif #include "esm_msgDef.h" #include "esm_cause.h" @@ -119,7 +117,6 @@ int esm_send_status(int pti, int ebi, esm_status_msg *msg, int esm_cause) * Functions executed by the UE to send ESM message to the network * -------------------------------------------------------------------------- */ -#ifdef NAS_UE /**************************************************************************** ** ** ** Name: esm_send_pdn_connectivity_request() ** @@ -436,311 +433,7 @@ int esm_send_deactivate_eps_bearer_context_accept(int ebi, LOG_FUNC_RETURN(RETURNok); } -#endif // NAS_UE -/* - * -------------------------------------------------------------------------- - * Functions executed by the MME to send ESM message to the UE - * -------------------------------------------------------------------------- - */ -#ifdef NAS_MME -/**************************************************************************** - ** ** - ** Name: esm_send_pdn_connectivity_reject() ** - ** ** - ** Description: Builds PDN Connectivity Reject message ** - ** ** - ** The PDN connectivity reject message is sent by the net- ** - ** work to the UE to reject establishment of a PDN connec- ** - ** tion. ** - ** ** - ** Inputs: pti: Procedure transaction identity ** - ** esm_cause: ESM cause code ** - ** Others: None ** - ** ** - ** Outputs: msg: The ESM message to be sent ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -int esm_send_pdn_connectivity_reject(int pti, pdn_connectivity_reject_msg *msg, - int esm_cause) -{ - LOG_FUNC_IN; - - /* Mandatory - ESM message header */ - msg->protocoldiscriminator = EPS_SESSION_MANAGEMENT_MESSAGE; - msg->epsbeareridentity = EPS_BEARER_IDENTITY_UNASSIGNED; - msg->messagetype = PDN_CONNECTIVITY_REJECT; - msg->proceduretransactionidentity = pti; - - /* Mandatory - ESM cause code */ - msg->esmcause = esm_cause; - /* Optional IEs */ - msg->presencemask = 0; - - LOG_TRACE(INFO, "ESM-SAP - Send PDN Connectivity Reject message " - "(pti=%d, ebi=%d)", - msg->proceduretransactionidentity, msg->epsbeareridentity); - - LOG_FUNC_RETURN(RETURNok); -} - -/**************************************************************************** - ** ** - ** Name: esm_send_pdn_disconnect_reject() ** - ** ** - ** Description: Builds PDN Disconnect Reject message ** - ** ** - ** The PDN disconnect reject message is sent by the network ** - ** to the UE to reject release of a PDN connection. ** - ** ** - ** Inputs: pti: Procedure transaction identity ** - ** esm_cause: ESM cause code ** - ** Others: None ** - ** ** - ** Outputs: msg: The ESM message to be sent ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -int esm_send_pdn_disconnect_reject(int pti, pdn_disconnect_reject_msg *msg, - int esm_cause) -{ - LOG_FUNC_IN; - - /* Mandatory - ESM message header */ - msg->protocoldiscriminator = EPS_SESSION_MANAGEMENT_MESSAGE; - msg->epsbeareridentity = EPS_BEARER_IDENTITY_UNASSIGNED; - msg->messagetype = PDN_DISCONNECT_REJECT; - msg->proceduretransactionidentity = pti; - - /* Mandatory - ESM cause code */ - msg->esmcause = esm_cause; - /* Optional IEs */ - msg->presencemask = 0; - - LOG_TRACE(INFO, "ESM-SAP - Send PDN Disconnect Reject message " - "(pti=%d, ebi=%d)", - msg->proceduretransactionidentity, msg->epsbeareridentity); - - LOG_FUNC_RETURN(RETURNok); -} - -/**************************************************************************** - ** ** - ** Name: esm_send_activate_default_eps_bearer_context_request() ** - ** ** - ** Description: Builds Activate Default EPS Bearer Context Request ** - ** message ** - ** ** - ** The activate default EPS bearer context request message ** - ** is sent by the network to the UE to request activation of ** - ** a default EPS bearer context. ** - ** ** - ** Inputs: pti: Procedure transaction identity ** - ** ebi: EPS bearer identity ** - ** qos: Subscribed EPS quality of service ** - ** apn: Access Point Name in used ** - ** pdn_addr: PDN IPv4 address and/or IPv6 suffix ** - ** esm_cause: ESM cause code ** - ** Others: None ** - ** ** - ** Outputs: msg: The ESM message to be sent ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -int esm_send_activate_default_eps_bearer_context_request(int pti, - int ebi, - activate_default_eps_bearer_context_request_msg *msg, - const OctetString *apn, - int pdn_type, - const OctetString *pdn_addr, - const EpsQualityOfService *qos, - int esm_cause) -{ - LOG_FUNC_IN; - - /* Mandatory - ESM message header */ - msg->protocoldiscriminator = EPS_SESSION_MANAGEMENT_MESSAGE; - msg->epsbeareridentity = ebi; - msg->messagetype = ACTIVATE_DEFAULT_EPS_BEARER_CONTEXT_REQUEST; - msg->proceduretransactionidentity = pti; - - /* Mandatory - EPS QoS */ - msg->epsqos = *qos; - LOG_TRACE(INFO, "ESM-SAP - epsqos qci: %u", qos->qci); - - if (qos->bitRatesPresent) { - LOG_TRACE(INFO, "ESM-SAP - epsqos maxBitRateForUL: %u", qos->bitRates.maxBitRateForUL); - LOG_TRACE(INFO, "ESM-SAP - epsqos maxBitRateForDL: %u", qos->bitRates.maxBitRateForDL); - LOG_TRACE(INFO, "ESM-SAP - epsqos guarBitRateForUL: %u", qos->bitRates.guarBitRateForUL); - LOG_TRACE(INFO, "ESM-SAP - epsqos guarBitRateForDL: %u", qos->bitRates.guarBitRateForDL); - } else { - LOG_TRACE(INFO, "ESM-SAP - epsqos no bit rates defined"); - } - - if (qos->bitRatesExtPresent) { - LOG_TRACE(INFO, "ESM-SAP - epsqos maxBitRateForUL Ext: %u", qos->bitRatesExt.maxBitRateForUL); - LOG_TRACE(INFO, "ESM-SAP - epsqos maxBitRateForDL Ext: %u", qos->bitRatesExt.maxBitRateForDL); - LOG_TRACE(INFO, "ESM-SAP - epsqos guarBitRateForUL Ext: %u", qos->bitRatesExt.guarBitRateForUL); - LOG_TRACE(INFO, "ESM-SAP - epsqos guarBitRateForDL Ext: %u", qos->bitRatesExt.guarBitRateForDL); - } else { - LOG_TRACE(INFO, "ESM-SAP - epsqos no bit rates ext defined"); - } - - - if ((apn == NULL) || ((apn != NULL) && (apn->value == NULL))) { - LOG_TRACE(WARNING, "ESM-SAP - apn is NULL!"); - } - - LOG_TRACE(INFO, "ESM-SAP - apn is %s", apn->value); - - /* Mandatory - Access Point Name */ - msg->accesspointname.accesspointnamevalue = *apn; - - /* Mandatory - PDN address */ - LOG_TRACE(INFO, "ESM-SAP - pdn_type is %u", pdn_type); - msg->pdnaddress.pdntypevalue = pdn_type; - LOG_TRACE(INFO, "ESM-SAP - pdn_addr is %u", dump_octet_string(pdn_addr)); - msg->pdnaddress.pdnaddressinformation = *pdn_addr; - - /* Optional - ESM cause code */ - msg->presencemask = 0; - - if (esm_cause != ESM_CAUSE_SUCCESS) { - msg->presencemask |= - ACTIVATE_DEFAULT_EPS_BEARER_CONTEXT_REQUEST_ESM_CAUSE_PRESENT; - msg->esmcause = esm_cause; - } - -#warning "TEST LG FORCE APN-AMBR" - LOG_TRACE(INFO, "ESM-SAP - FORCE APN-AMBR"); - msg->presencemask |= - ACTIVATE_DEFAULT_EPS_BEARER_CONTEXT_REQUEST_APNAMBR_PRESENT; - msg->apnambr.apnambrfordownlink = 0xfe; // (8640kbps) - msg->apnambr.apnambrforuplink = 0xfe; // (8640kbps) - msg->apnambr.apnambrfordownlink_extended = 0xde; // (200Mbps) - msg->apnambr.apnambrforuplink_extended = 0x9e; // (100Mbps) - msg->apnambr.apnambrfordownlink_extended2 = 0; - msg->apnambr.apnambrforuplink_extended2 = 0; - msg->apnambr.extensions = 0 | APN_AGGREGATE_MAXIMUM_BIT_RATE_MAXIMUM_EXTENSION_PRESENT; - - LOG_TRACE(INFO, "ESM-SAP - Send Activate Default EPS Bearer Context " - "Request message (pti=%d, ebi=%d)", - msg->proceduretransactionidentity, msg->epsbeareridentity); - - LOG_FUNC_RETURN(RETURNok); -} - -/**************************************************************************** - ** ** - ** Name: esm_send_activate_dedicated_eps_bearer_context_request() ** - ** ** - ** Description: Builds Activate Dedicated EPS Bearer Context Request ** - ** message ** - ** ** - ** The activate dedicated EPS bearer context request message ** - ** is sent by the network to the UE to request activation of ** - ** a dedicated EPS bearer context associated with the same ** - ** PDN address(es) and APN as an already active default EPS ** - ** bearer context. ** - ** ** - ** Inputs: pti: Procedure transaction identity ** - ** ebi: EPS bearer identity ** - ** linked_ebi: EPS bearer identity of the default bearer ** - ** associated with the EPS dedicated bearer ** - ** to be activated ** - ** qos: EPS quality of service ** - ** tft: Traffic flow template ** - ** Others: None ** - ** ** - ** Outputs: msg: The ESM message to be sent ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -int esm_send_activate_dedicated_eps_bearer_context_request(int pti, int ebi, - activate_dedicated_eps_bearer_context_request_msg *msg, - int linked_ebi, const EpsQualityOfService *qos, - PacketFilters *pkfs, int n_pkfs) -{ - int i; - LOG_FUNC_IN; - - /* Mandatory - ESM message header */ - msg->protocoldiscriminator = EPS_SESSION_MANAGEMENT_MESSAGE; - msg->epsbeareridentity = ebi; - msg->messagetype = ACTIVATE_DEDICATED_EPS_BEARER_CONTEXT_REQUEST; - msg->proceduretransactionidentity = pti; - - /* Mandatory - EPS QoS */ - msg->epsqos = *qos; - - /* Mandatory - traffic flow template */ - msg->tft.tftoperationcode = TRAFFIC_FLOW_TEMPLATE_OPCODE_CREATE; - msg->tft.ebit = TRAFFIC_FLOW_TEMPLATE_PARAMETER_LIST_IS_NOT_INCLUDED; - msg->tft.numberofpacketfilters = n_pkfs; - - for (i = 0; i < msg->tft.numberofpacketfilters; i++) { - msg->tft.packetfilterlist.createtft[i] = (*pkfs)[i]; - } - - /* Optional */ - msg->presencemask = 0; - - LOG_TRACE(INFO, "ESM-SAP - Send Activate Dedicated EPS Bearer Context " - "Request message (pti=%d, ebi=%d)", - msg->proceduretransactionidentity, msg->epsbeareridentity); - - LOG_FUNC_RETURN(RETURNok); -} - -/**************************************************************************** - ** ** - ** Name: esm_send_deactivate_eps_bearer_context_request() ** - ** ** - ** Description: Builds Deactivate EPS Bearer Context Request message ** - ** ** - ** The deactivate EPS bearer context request message is sent ** - ** by the network to request deactivation of an active EPS ** - ** bearer context. ** - ** ** - ** Inputs: pti: Procedure transaction identity ** - ** ebi: EPS bearer identity ** - ** esm_cause: ESM cause code ** - ** Others: None ** - ** ** - ** Outputs: msg: The ESM message to be sent ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -int esm_send_deactivate_eps_bearer_context_request(int pti, int ebi, - deactivate_eps_bearer_context_request_msg *msg, - int esm_cause) -{ - LOG_FUNC_IN; - - /* Mandatory - ESM message header */ - msg->protocoldiscriminator = EPS_SESSION_MANAGEMENT_MESSAGE; - msg->epsbeareridentity = ebi; - msg->messagetype = DEACTIVATE_EPS_BEARER_CONTEXT_REQUEST; - msg->proceduretransactionidentity = pti; - - /* Mandatory - ESM cause code */ - msg->esmcause = esm_cause; - /* Optional IEs */ - msg->presencemask = 0; - - LOG_TRACE(INFO, "ESM-SAP - Send Deactivate EPS Bearer Context Request " - "message (pti=%d, ebi=%d)", - msg->proceduretransactionidentity, msg->epsbeareridentity); - - LOG_FUNC_RETURN(RETURNok); -} -#endif // NAS_MME /****************************************************************************/ /********************* L O C A L F U N C T I O N S *********************/ diff --git a/openair-cn/NAS/EURECOM-NAS/src/esm/sap/esm_send.h b/openair-cn/NAS/UE/ESM/SAP/esm_send.h old mode 100644 new mode 100755 similarity index 73% rename from openair-cn/NAS/EURECOM-NAS/src/esm/sap/esm_send.h rename to openair-cn/NAS/UE/ESM/SAP/esm_send.h index 87abe596d8..4e261300c5 --- a/openair-cn/NAS/EURECOM-NAS/src/esm/sap/esm_send.h +++ b/openair-cn/NAS/UE/ESM/SAP/esm_send.h @@ -49,21 +49,7 @@ Description Defines functions executed at the ESM Service Access #include "EsmStatus.h" -#ifdef NAS_MME -#include "PdnConnectivityReject.h" -#include "PdnDisconnectReject.h" -#include "BearerResourceAllocationReject.h" -#include "BearerResourceModificationReject.h" -#include "ActivateDefaultEpsBearerContextRequest.h" -#include "ActivateDedicatedEpsBearerContextRequest.h" -#include "ModifyEpsBearerContextRequest.h" -#include "DeactivateEpsBearerContextRequest.h" - -#include "EsmInformationRequest.h" -#endif - -#ifdef NAS_UE #include "PdnConnectivityRequest.h" #include "PdnDisconnectRequest.h" #include "BearerResourceAllocationRequest.h" @@ -78,7 +64,6 @@ Description Defines functions executed at the ESM Service Access #include "DeactivateEpsBearerContextAccept.h" #include "EsmInformationResponse.h" -#endif /****************************************************************************/ /********************* G L O B A L C O N S T A N T S *******************/ @@ -108,7 +93,6 @@ int esm_send_status(int pti, int ebi, esm_status_msg *msg, int esm_cause); * Functions executed by the UE to send ESM message to the network * -------------------------------------------------------------------------- */ -#ifdef NAS_UE /* * Transaction related messages * ---------------------------- @@ -135,40 +119,5 @@ int esm_send_activate_dedicated_eps_bearer_context_reject(int ebi, int esm_send_deactivate_eps_bearer_context_accept(int ebi, deactivate_eps_bearer_context_accept_msg *msg); -#endif - -/* - * -------------------------------------------------------------------------- - * Functions executed by the MME to send ESM message to the UE - * -------------------------------------------------------------------------- - */ -#ifdef NAS_MME -/* - * Transaction related messages - * ---------------------------- - */ -int esm_send_pdn_connectivity_reject(int pti, pdn_connectivity_reject_msg *msg, - int esm_cause); - -int esm_send_pdn_disconnect_reject(int pti, pdn_disconnect_reject_msg *msg, - int esm_cause); - -/* - * Messages related to EPS bearer contexts - * --------------------------------------- - */ -int esm_send_activate_default_eps_bearer_context_request(int pti, int ebi, - activate_default_eps_bearer_context_request_msg *msg, const OctetString *apn, - int pdn_type, const OctetString *pdn_addr, const EpsQualityOfService *qos, - int esm_cause); - -int esm_send_activate_dedicated_eps_bearer_context_request(int pti, int ebi, - activate_dedicated_eps_bearer_context_request_msg *msg, int linked_ebi, - const EpsQualityOfService *qos, PacketFilters *pkfs, int n_pkfs); - -int esm_send_deactivate_eps_bearer_context_request(int pti, int ebi, - deactivate_eps_bearer_context_request_msg *msg, int esm_cause); - -#endif #endif /* __ESM_SEND_H__*/ diff --git a/openair-cn/NAS/UE/ESM/esmData.h b/openair-cn/NAS/UE/ESM/esmData.h new file mode 100755 index 0000000000..9726e83e8a --- /dev/null +++ b/openair-cn/NAS/UE/ESM/esmData.h @@ -0,0 +1,218 @@ +/******************************************************************************* + OpenAirInterface + Copyright(c) 1999 - 2014 Eurecom + + OpenAirInterface is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + + OpenAirInterface is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with OpenAirInterface.The full GNU General Public License is + included in this distribution in the file called "COPYING". If not, + see . + + Contact Information + OpenAirInterface Admin: openair_admin@eurecom.fr + OpenAirInterface Tech : openair_tech@eurecom.fr + OpenAirInterface Dev : openair4g-devel@eurecom.fr + + Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. + + *******************************************************************************/ +/***************************************************************************** +Source esmData.h + +Version 0.1 + +Date 2012/12/04 + +Product NAS stack + +Subsystem EPS Session Management + +Author Frederic Maurel + +Description Defines internal private data handled by EPS Session + Management sublayer. + +*****************************************************************************/ +#include // sprintf + +#include "networkDef.h" +#include "OctetString.h" +#include "EpsBearerIdentity.h" + + +#ifndef __ESMDATA_H__ +#define __ESMDATA_H__ + +/****************************************************************************/ +/********************* G L O B A L C O N S T A N T S *******************/ +/****************************************************************************/ + +/* Total number of active EPS bearers */ +#define ESM_DATA_EPS_BEARER_TOTAL 11 + +/****************************************************************************/ +/************************ G L O B A L T Y P E S ************************/ +/****************************************************************************/ + +/* + * Minimal and maximal value of an EPS bearer identity: + * The EPS Bearer Identity (EBI) identifies a message flow + */ +#define ESM_EBI_MIN (EPS_BEARER_IDENTITY_FIRST) +#define ESM_EBI_MAX (EPS_BEARER_IDENTITY_LAST) + +/* EPS bearer context states */ +typedef enum { + ESM_EBR_INACTIVE, /* No EPS bearer context exists */ + ESM_EBR_ACTIVE, /* The EPS bearer context is active, + * in the UE, in the network */ + ESM_EBR_STATE_MAX +} esm_ebr_state; + + + +/* + * ----------------------- + * EPS bearer context data + * ----------------------- + */ +typedef struct esm_ebr_context_s { + unsigned char ebi; /* EPS bearer identity */ + esm_ebr_state status; /* EPS bearer context status */ + int is_default_ebr; /* TRUE if the bearer context is associated + * to a default EPS bearer */ + char cid; /* Identifier of the PDN context the EPS + * bearer context has been assigned to */ +} esm_ebr_context_t; + +typedef struct esm_ebr_data_s { + unsigned char index; /* Index of the next EPS bearer context + * identity to be used */ +#define ESM_EBR_DATA_SIZE (ESM_EBI_MAX - ESM_EBI_MIN + 1) + esm_ebr_context_t *context[ESM_EBR_DATA_SIZE + 1]; +} esm_ebr_data_t; + +/* + * -------------------------------------------------------------------------- + * Structure of data handled by EPS Session Management sublayer in the UE + * and in the MME + * -------------------------------------------------------------------------- + */ + +/* + * Structure of an EPS bearer + * -------------------------- + * An EPS bearer is a logical concept which applies to the connection + * between two endpoints (UE and PDN Gateway) with specific QoS attri- + * butes. An EPS bearer corresponds to one Quality of Service policy + * applied within the EPC and E-UTRAN. + */ +typedef struct esm_bearer_s { + int bid; /* Identifier of the EPS bearer */ + unsigned int ebi; /* EPS bearer identity */ + network_qos_t qos; /* EPS bearer level QoS parameters */ + network_tft_t tft; /* Traffic Flow Template for packet filtering */ +} esm_bearer_t; + +/* + * Structure of a PDN connection + * ----------------------------- + * A PDN connection is the association between a UE represented by + * one IPv4 address and/or one IPv6 prefix and a PDN represented by + * an Access Point Name (APN). + */ +typedef struct esm_pdn_s { + unsigned int pti; /* Identity of the procedure transaction executed + * to activate the PDN connection entry */ + int is_emergency; /* Emergency bearer services indicator */ + OctetString apn; /* Access Point Name currently in used */ + int ambr; /* Aggregate Maximum Bit Rate of this APN */ + int type; /* Address PDN type (IPv4, IPv6, IPv4v6) */ +#define ESM_DATA_IPV4_ADDRESS_SIZE 4 +#define ESM_DATA_IPV6_ADDRESS_SIZE 8 +#define ESM_DATA_IP_ADDRESS_SIZE (ESM_DATA_IPV4_ADDRESS_SIZE + \ + ESM_DATA_IPV6_ADDRESS_SIZE) + /* IPv4 PDN address and/or IPv6 prefix */ + char ip_addr[ESM_DATA_IP_ADDRESS_SIZE+1]; + int addr_realloc; /* Indicates whether the UE is allowed to subsequently + * request another PDN connectivity to the same APN + * using an address PDN type (IPv4 or IPv6) other + * than the one already activated */ + int n_bearers; /* Number of allocated EPS bearers; + * default EPS bearer is defined at index 0 */ +#define ESM_DATA_EPS_BEARER_MAX 4 + esm_bearer_t *bearer[ESM_DATA_EPS_BEARER_MAX]; +} esm_pdn_t; + +/* + * Structure of the ESM data + * ------------------------- + * The EPS Session Management sublayer handles data related to PDN + * connections and EPS bearers. Each active PDN connection has a de- + * fault EPS bearer. Several dedicated EPS bearers may exist within + * a PDN connection. + */ +typedef struct esm_data_context_s { + unsigned int ue_id; + + int n_ebrs; /* Total number of active EPS bearer contexts */ + int n_pdns; /* Number of active PDN connections */ + int emergency; /* Indicates whether a PDN connection for emergency + * bearer services is established */ +#define ESM_DATA_PDN_MAX 4 + struct { + int pid; /* Identifier of the PDN connection */ + int is_active; /* TRUE/FALSE if the PDN connection is active/inactive + * or the process to activate/deactivate the PDN + * connection is in progress */ + esm_pdn_t *data; /* Active PDN connection data */ + } pdn[ESM_DATA_PDN_MAX+1]; + + esm_ebr_data_t ebr; +} esm_data_context_t; + +/* + * -------------------------------------------------------------------------- + * ESM internal data handled by EPS Session Management sublayer in the UE + * -------------------------------------------------------------------------- + */ +/* + * Structure of the ESM data + * ------------------------- + */ +typedef esm_data_context_t esm_data_t; + + +/****************************************************************************/ +/******************** G L O B A L V A R I A B L E S ********************/ +/****************************************************************************/ + +/* + * ESM internal data (used within ESM only) + * ---------------------------------------- + */ +esm_data_t _esm_data; + +/****************************************************************************/ +/****************** E X P O R T E D F U N C T I O N S ******************/ +/****************************************************************************/ + +extern char ip_addr_str[100]; + +extern char *esm_data_get_ipv4_addr(const OctetString *ip_addr); + +extern char *esm_data_get_ipv6_addr(const OctetString *ip_addr); + +extern char *esm_data_get_ipv4v6_addr(const OctetString *ip_addr); + +#endif /* __ESMDATA_H__*/ diff --git a/openair-cn/NAS/UE/ESM/esm_ebr.c b/openair-cn/NAS/UE/ESM/esm_ebr.c new file mode 100755 index 0000000000..d7a36cc6db --- /dev/null +++ b/openair-cn/NAS/UE/ESM/esm_ebr.c @@ -0,0 +1,492 @@ +/******************************************************************************* + OpenAirInterface + Copyright(c) 1999 - 2014 Eurecom + + OpenAirInterface is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + + OpenAirInterface is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with OpenAirInterface.The full GNU General Public License is + included in this distribution in the file called "COPYING". If not, + see . + + Contact Information + OpenAirInterface Admin: openair_admin@eurecom.fr + OpenAirInterface Tech : openair_tech@eurecom.fr + OpenAirInterface Dev : openair4g-devel@eurecom.fr + + Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. + + *******************************************************************************/ +/***************************************************************************** +Source esm_ebr.c + +Version 0.1 + +Date 2013/01/29 + +Product NAS stack + +Subsystem EPS Session Management + +Author Frederic Maurel + +Description Defines functions used to handle state of EPS bearer contexts + and manage ESM messages re-transmission. + +*****************************************************************************/ + +#include // malloc, free +#include // memcpy + +#include "emmData.h" +#include "esm_ebr.h" +#include "commonDef.h" +#include "nas_log.h" + + +/****************************************************************************/ +/**************** E X T E R N A L D E F I N I T I O N S ****************/ +/****************************************************************************/ + +#define ESM_EBR_NB_UE_MAX 1 + + +/****************************************************************************/ +/******************* L O C A L D E F I N I T I O N S *******************/ +/****************************************************************************/ + +/* String representation of EPS bearer context status */ +static const char *_esm_ebr_state_str[ESM_EBR_STATE_MAX] = { + "BEARER CONTEXT INACTIVE", + "BEARER CONTEXT ACTIVE", +}; + +/* + * ---------------------------------- + * List of EPS bearer contexts per UE + * ---------------------------------- + */ + +#if !defined(NAS_BUILT_IN_EPC) +static esm_ebr_data_t _esm_ebr_data[ESM_EBR_NB_UE_MAX]; +#endif + +/* + * ---------------------- + * User notification data + * ---------------------- + */ +/* User notification callback executed whenever an EPS bearer context becomes + * active or inactive */ +static esm_indication_callback_t _esm_ebr_callback; +/* PDN connection and EPS bearer status [NW/UE][Dedicated/Default][status] */ +static const network_pdn_state_t _esm_ebr_pdn_state[2][2][2] = { + /* Status modification triggerer by the network */ + { + /* Dedicated EPS bearer */ + {NET_PDN_NW_DEDICATED_DEACT, NET_PDN_NW_DEDICATED_ACT}, + /* Default EPS bearer */ + {NET_PDN_NW_DEFAULT_DEACT, 0} + }, + /* Status modification triggered by the UE */ + { + /* Dedicated EPS bearer */ + {NET_PDN_MT_DEDICATED_DEACT, NET_PDN_MT_DEDICATED_ACT}, + /* Default EPS bearer */ + {NET_PDN_MT_DEFAULT_DEACT, NET_PDN_MT_DEFAULT_ACT} + } +}; + +/* Returns the index of the next available entry in the list of EPS bearer + * context data */ + +static int _esm_ebr_get_available_entry(unsigned int ueid); + +/****************************************************************************/ +/****************** E X P O R T E D F U N C T I O N S ******************/ +/****************************************************************************/ + +/**************************************************************************** + ** ** + ** Name: esm_ebr_initialize() ** + ** ** + ** Description: Initialize EPS bearer context data ** + ** ** + ** Inputs: cb: User notification callback ** + ** Others: None ** + ** ** + ** Outputs: None ** + ** Return: None ** + ** Others: _esm_ebr_data ** + ** ** + ***************************************************************************/ +void esm_ebr_initialize( + esm_indication_callback_t cb +) +{ +#if !defined(NAS_BUILT_IN_EPC) + int ueid, i; + + LOG_FUNC_IN; + + for (ueid = 0; ueid < ESM_EBR_NB_UE_MAX; ueid++) { + _esm_ebr_data[ueid].index = 0; + + /* Initialize EPS bearer context data */ + for (i = 0; i < ESM_EBR_DATA_SIZE + 1; i++) { + _esm_ebr_data[ueid].context[i] = NULL; + } + } + + /* Initialize the user notification callback */ + _esm_ebr_callback = *cb; + + LOG_FUNC_OUT; +#endif +} + +/**************************************************************************** + ** ** + ** Name: esm_ebr_assign() ** + ** ** + ** Description: Assigns a new EPS bearer context ** + ** ** + ** Inputs: ueid: Lower layers UE identifier ** + ** ebi: Identity of the new EPS bearer context ** + ** cid: Identifier of the PDN context the EPS bea- ** + ** rer context is associated to ** + ** default_ebr TRUE if the new bearer context is associa- ** + ** ted to a default EPS bearer ** + ** Others: None ** + ** ** + ** Outputs: None ** + ** Return: The identity of the new EPS bearer context ** + ** if successfully assigned; ** + ** the not assigned EBI (0) otherwise. ** + ** Others: _esm_ebr_data ** + ** ** + ***************************************************************************/ +int esm_ebr_assign(int ebi, int cid, int default_ebr) +{ + esm_ebr_context_t *ebr_ctx = NULL; + unsigned int ueid = 0; + int i; + + LOG_FUNC_IN; + + ebr_ctx = _esm_ebr_data[ueid].context[ebi - ESM_EBI_MIN]; + + + if (ebi != ESM_EBI_UNASSIGNED) { + if ( (ebi < ESM_EBI_MIN) || (ebi > ESM_EBI_MAX) ) { + LOG_FUNC_RETURN (ESM_EBI_UNASSIGNED); + } else if (ebr_ctx != NULL) { + LOG_TRACE(WARNING, "ESM-FSM - EPS bearer context already " + "assigned (ebi=%d)", ebi); + LOG_FUNC_RETURN (ESM_EBI_UNASSIGNED); + } + + /* The specified EPS bearer context is available */ + i = ebi - ESM_EBI_MIN; + } else { + /* Search for an available EPS bearer identity */ + i = _esm_ebr_get_available_entry(ueid); + + if (i < 0) { + LOG_FUNC_RETURN(ESM_EBI_UNASSIGNED); + } + + /* An available EPS bearer context is found */ + ebi = i + ESM_EBI_MIN; + } + + /* Assign new EPS bearer context */ + ebr_ctx = + (esm_ebr_context_t *)malloc(sizeof(esm_ebr_context_t)); + + if (ebr_ctx == NULL) { + LOG_FUNC_RETURN(ESM_EBI_UNASSIGNED); + } + + + _esm_ebr_data[ueid].context[ebi - ESM_EBI_MIN] = ebr_ctx; + + /* Store the index of the next available EPS bearer identity */ + _esm_ebr_data[ueid].index = i + 1; + + /* Set the EPS bearer identity */ + ebr_ctx->ebi = ebi; + /* Set the EPS bearer context status to INACTIVE */ + ebr_ctx->status = ESM_EBR_INACTIVE; + /* Set the default EPS bearer indicator */ + ebr_ctx->is_default_ebr = default_ebr; + /* Set the identifier of the PDN context the EPS bearer is assigned to */ + ebr_ctx->cid = cid; + + LOG_TRACE(INFO, "ESM-FSM - EPS bearer context %d assigned", ebi); + LOG_FUNC_RETURN(ebr_ctx->ebi); +} + +/**************************************************************************** + ** ** + ** Name: esm_ebr_release() ** + ** ** + ** Description: Release the given EPS bearer identity ** + ** ** + ** Inputs: ueid: Lower layers UE identifier ** + ** ebi: The identity of the EPS bearer context to ** + ** be released ** + ** Others: None ** + ** ** + ** Outputs: None ** + ** Return: RETURNok if the EPS bearer context has ** + ** been successfully released; ** + ** RETURNerror otherwise. ** + ** Others: _esm_ebr_data ** + ** ** + ***************************************************************************/ +int esm_ebr_release( + int ebi) +{ + unsigned int ueid = 0; + esm_ebr_context_t *ebr_ctx; + + LOG_FUNC_IN; + + if ( (ebi < ESM_EBI_MIN) || (ebi > ESM_EBI_MAX) ) { + LOG_FUNC_RETURN (RETURNerror); + } + + /* Get EPS bearer context data */ + ebr_ctx = _esm_ebr_data[ueid].context[ebi - ESM_EBI_MIN]; + + if ( (ebr_ctx == NULL) || (ebr_ctx->ebi != ebi) ) { + /* EPS bearer context not assigned */ + LOG_FUNC_RETURN (RETURNerror); + } + + /* Do not release active EPS bearer context */ + if (ebr_ctx->status != ESM_EBR_INACTIVE) { + LOG_TRACE(ERROR, "ESM-FSM - EPS bearer context is not INACTIVE"); + LOG_FUNC_RETURN (RETURNerror); + } + + /* Release EPS bearer context data */ + free(ebr_ctx); + ebr_ctx = NULL; + + LOG_TRACE(INFO, "ESM-FSM - EPS bearer context %d released", ebi); + LOG_FUNC_RETURN (RETURNok); +} + + + +/**************************************************************************** + ** ** + ** Name: esm_ebr_set_status() ** + ** ** + ** Description: Set the status of the specified EPS bearer context to the ** + ** given state ** + ** ** + ** Inputs: ueid: Lower layers UE identifier ** + ** ebi: The identity of the EPS bearer ** + ** status: The new EPS bearer context status ** + ** ue_requested: TRUE/FALSE if the modification of the EPS ** + ** bearer context status was requested by the ** + ** UE/network ** + ** Others: None ** + ** ** + ** Outputs: None ** + ** Return: RETURNok, RETURNerror ** + ** Others: _esm_ebr_data ** + ** ** + ***************************************************************************/ +int esm_ebr_set_status( + int ebi, esm_ebr_state status, int ue_requested) +{ + esm_ebr_context_t *ebr_ctx; + esm_ebr_state old_status; + + LOG_FUNC_IN; + + unsigned int ueid = 0; + + if (ueid >= ESM_EBR_NB_UE_MAX) { + LOG_FUNC_RETURN (RETURNerror); + } + + + if ( (ebi < ESM_EBI_MIN) || (ebi > ESM_EBI_MAX) ) { + LOG_FUNC_RETURN (RETURNerror); + } + + /* Get EPS bearer context data */ + ebr_ctx = _esm_ebr_data[ueid].context[ebi - ESM_EBI_MIN]; + + if ( (ebr_ctx == NULL) || (ebr_ctx->ebi != ebi) ) { + /* EPS bearer context not assigned */ + LOG_TRACE(ERROR, "ESM-FSM - EPS bearer context not assigned " + "(ebi=%d)", ebi); + LOG_FUNC_RETURN (RETURNerror); + } + + old_status = ebr_ctx->status; + + if (status < ESM_EBR_STATE_MAX) { + LOG_TRACE(INFO, "ESM-FSM - Status of EPS bearer context %d changed:" + " %s ===> %s", ebi, + _esm_ebr_state_str[old_status], _esm_ebr_state_str[status]); + + if (status != old_status) { + ebr_ctx->status = status; + /* + * Notify the user that the state of the EPS bearer has changed + */ + (*_esm_ebr_callback)(ebr_ctx->cid, + _esm_ebr_pdn_state[ue_requested][ebr_ctx->is_default_ebr][status]); + LOG_FUNC_RETURN (RETURNok); + } + } + + LOG_FUNC_RETURN (RETURNerror); +} + +/**************************************************************************** + ** ** + ** Name: esm_ebr_get_status() ** + ** ** + ** Description: Get the current status value of the specified EPS bearer ** + ** context ** + ** ** + ** Inputs: ueid: Lower layers UE identifier ** + ** ebi: The identity of the EPS bearer ** + ** Others: _esm_ebr_data ** + ** ** + ** Outputs: None ** + ** Return: The current value of the EPS bearer con- ** + ** text status ** + ** Others: None ** + ** ** + ***************************************************************************/ + +esm_ebr_state esm_ebr_get_status( + int ebi) +{ + unsigned int ueid = 0; + + if ( (ebi < ESM_EBI_MIN) || (ebi > ESM_EBI_MAX) ) { + return (ESM_EBR_INACTIVE); + } + + if (_esm_ebr_data[ueid].context[ebi - ESM_EBI_MIN] == NULL) { + /* EPS bearer context not allocated */ + return (ESM_EBR_INACTIVE); + } + + if (_esm_ebr_data[ueid].context[ebi - ESM_EBI_MIN]->ebi != ebi) { + /* EPS bearer context not assigned */ + return (ESM_EBR_INACTIVE); + } + + return (_esm_ebr_data[ueid].context[ebi - ESM_EBI_MIN]->status); +} + +/**************************************************************************** + ** ** + ** Name: esm_ebr_is_reserved() ** + ** ** + ** Description: Check whether the given EPS bearer identity is a reserved ** + ** value ** + ** ** + ** Inputs: ebi: The identity of the EPS bearer ** + ** Others: None ** + ** ** + ** Outputs: None ** + ** Return: TRUE, FALSE ** + ** Others: None ** + ** ** + ***************************************************************************/ +int esm_ebr_is_reserved(int ebi) +{ + return ( (ebi != ESM_EBI_UNASSIGNED) && (ebi < ESM_EBI_MIN) ); +} + +/**************************************************************************** + ** ** + ** Name: esm_ebr_is_not_in_use() ** + ** ** + ** Description: Check whether the given EPS bearer identity does not ** + ** match an assigned EBI value currently in use ** + ** ** + ** Inputs: ueid: Lower layers UE identifier ** + ** ebi: The identity of the EPS bearer ** + ** Others: _esm_ebr_data ** + ** ** + ** Outputs: None ** + ** Return: TRUE, FALSE ** + ** Others: None ** + ** ** + ***************************************************************************/ +int esm_ebr_is_not_in_use( + int ebi) +{ + unsigned int ueid = 0; + + return ( (ebi == ESM_EBI_UNASSIGNED) || + (_esm_ebr_data[ueid].context[ebi - ESM_EBI_MIN] == NULL) || + (_esm_ebr_data[ueid].context[ebi - ESM_EBI_MIN]->ebi) != ebi); +} + +/****************************************************************************/ +/********************* L O C A L F U N C T I O N S *********************/ +/****************************************************************************/ + +/**************************************************************************** + ** ** + ** Name: _esm_ebr_get_available_entry() ** + ** ** + ** Description: Returns the index of the next available entry in the list ** + ** of EPS bearer context data ** + ** ** + ** Inputs: ueid: Lower layers UE identifier ** + ** Others: _esm_ebr_data ** + ** ** + ** Outputs: None ** + ** Return: The index of the next available EPS bearer ** + ** context data entry; -1 if no any entry is ** + ** available. ** + ** Others: None ** + ** ** + ***************************************************************************/ +static int _esm_ebr_get_available_entry(unsigned int ueid) +{ + int i; + + for (i = _esm_ebr_data[ueid].index; i < ESM_EBR_DATA_SIZE; i++) { + if (_esm_ebr_data[ueid].context[i] != NULL) { + continue; + } + + return i; + } + + for (i = 0; i < _esm_ebr_data[ueid].index; i++) { + if (_esm_ebr_data[ueid].context[i] != NULL) { + continue; + } + + return i; + } + + /* No available EBI entry found */ + return (-1); +} diff --git a/openair-cn/NAS/UE/ESM/esm_ebr.h b/openair-cn/NAS/UE/ESM/esm_ebr.h new file mode 100755 index 0000000000..163983f8c0 --- /dev/null +++ b/openair-cn/NAS/UE/ESM/esm_ebr.h @@ -0,0 +1,85 @@ +/******************************************************************************* + OpenAirInterface + Copyright(c) 1999 - 2014 Eurecom + + OpenAirInterface is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + + OpenAirInterface is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with OpenAirInterface.The full GNU General Public License is + included in this distribution in the file called "COPYING". If not, + see . + + Contact Information + OpenAirInterface Admin: openair_admin@eurecom.fr + OpenAirInterface Tech : openair_tech@eurecom.fr + OpenAirInterface Dev : openair4g-devel@eurecom.fr + + Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. + + *******************************************************************************/ +/***************************************************************************** +Source esm_ebr.h + +Version 0.1 + +Date 2013/01/29 + +Product NAS stack + +Subsystem EPS Session Management + +Author Frederic Maurel + +Description Defines functions used to handle state of EPS bearer contexts + and manage ESM messages re-transmission. + +*****************************************************************************/ +#ifndef __ESM_EBR_H__ +#define __ESM_EBR_H__ + +#include "OctetString.h" + +#include "networkDef.h" + +#include "nas_timer.h" + +/****************************************************************************/ +/********************* G L O B A L C O N S T A N T S *******************/ +/****************************************************************************/ + +/* Unassigned EPS bearer identity value */ +#define ESM_EBI_UNASSIGNED (EPS_BEARER_IDENTITY_UNASSIGNED) + +/****************************************************************************/ +/************************ G L O B A L T Y P E S ************************/ +/****************************************************************************/ + +/****************************************************************************/ +/******************** G L O B A L V A R I A B L E S ********************/ +/****************************************************************************/ + +/****************************************************************************/ +/****************** E X P O R T E D F U N C T I O N S ******************/ +/****************************************************************************/ + +int esm_ebr_is_reserved(int ebi); + +void esm_ebr_initialize(esm_indication_callback_t cb); +int esm_ebr_assign(int ebi, int cid, int default_ebr); +int esm_ebr_release(int ebi); + +int esm_ebr_set_status(int ebi, esm_ebr_state status, int ue_requested); +esm_ebr_state esm_ebr_get_status(int ebi); + +int esm_ebr_is_not_in_use(int ebi); + +#endif /* __ESM_EBR_H__*/ diff --git a/openair-cn/NAS/EURECOM-NAS/src/esm/esm_ebr_context.c b/openair-cn/NAS/UE/ESM/esm_ebr_context.c old mode 100644 new mode 100755 similarity index 95% rename from openair-cn/NAS/EURECOM-NAS/src/esm/esm_ebr_context.c rename to openair-cn/NAS/UE/ESM/esm_ebr_context.c index 05a2ae473a..cbc46a9461 --- a/openair-cn/NAS/EURECOM-NAS/src/esm/esm_ebr_context.c +++ b/openair-cn/NAS/UE/ESM/esm_ebr_context.c @@ -60,11 +60,9 @@ Description Defines functions used to handle EPS bearer contexts. #endif -#ifdef NAS_UE #include #include #include -#endif /****************************************************************************/ @@ -75,12 +73,10 @@ Description Defines functions used to handle EPS bearer contexts. /******************* L O C A L D E F I N I T I O N S *******************/ /****************************************************************************/ -#ifdef NAS_UE static int _esm_ebr_context_check_identifiers(const network_tft_t *, const network_tft_t *); static int _esm_ebr_context_check_precedence(const network_tft_t *, const network_tft_t *); -#endif /****************************************************************************/ /****************** E X P O R T E D F U N C T I O N S ******************/ @@ -111,9 +107,7 @@ static int _esm_ebr_context_check_precedence(const network_tft_t *, ** ** ***************************************************************************/ int esm_ebr_context_create( -#ifdef NAS_MME - emm_data_context_t *ctx, -#endif + int pid, int ebi, int is_default, const network_qos_t *qos, const network_tft_t *tft) { @@ -124,22 +118,7 @@ int esm_ebr_context_create( LOG_FUNC_IN; -#ifdef NAS_UE esm_ctx = &_esm_data; -#endif -#ifdef NAS_MME -# if defined(NAS_BUILT_IN_EPC) - esm_ctx = &ctx->esm_data_ctx; -# else - - if (ueid < ESM_DATA_NB_UE_MAX) { - ctx = _esm_data.ctx[ueid]; - } else { - LOG_FUNC_RETURN (ESM_EBI_UNASSIGNED); - } - -# endif -#endif bid = ESM_DATA_EPS_BEARER_MAX; @@ -229,7 +208,6 @@ int esm_ebr_context_create( esm_ctx->emergency = TRUE; } -#ifdef NAS_UE // LG ADD TEMP { char *tmp = NULL; @@ -320,7 +298,6 @@ int esm_ebr_context_create( } } // AssertFatal(0, "Forced stop in NAS UE"); -#endif } /* Return the EPS bearer identity of the default EPS bearer @@ -357,9 +334,7 @@ int esm_ebr_context_create( ** ** ***************************************************************************/ int esm_ebr_context_release( -#ifdef NAS_MME - emm_data_context_t *ctx, -#endif + int ebi, int *pid, int *bid) { int found = FALSE; @@ -370,23 +345,7 @@ int esm_ebr_context_release( LOG_FUNC_IN; -#ifdef NAS_UE esm_ctx = &_esm_data; -#endif - -#ifdef NAS_MME -# if defined(NAS_BUILT_IN_EPC) - esm_ctx = &ctx->esm_data_ctx; -# else - - if (ueid < ESM_DATA_NB_UE_MAX) { - ctx = &_esm_data.ctx[ueid]; - } else { - LOG_FUNC_RETURN (ESM_EBI_UNASSIGNED); - } - -# endif -#endif if (ebi != ESM_EBI_UNASSIGNED) { /* @@ -500,21 +459,12 @@ int esm_ebr_context_release( } /* Set the EPS bearer context state to INACTIVE */ -#ifdef NAS_UE (void) esm_ebr_set_status(pdn->bearer[i]->ebi, ESM_EBR_INACTIVE, TRUE); -#endif -#ifdef NAS_MME - (void) esm_ebr_set_status(ctx, pdn->bearer[i]->ebi, - ESM_EBR_INACTIVE, TRUE); -#endif + /* Release EPS bearer data */ -#ifdef NAS_UE (void) esm_ebr_release(pdn->bearer[i]->ebi); -#endif -#ifdef NAS_MME - (void) esm_ebr_release(ctx, pdn->bearer[i]->ebi); -#endif + // esm_ebr_release() /* Release dedicated EPS bearer data */ free(pdn->bearer[i]); @@ -536,7 +486,6 @@ int esm_ebr_context_release( } } -#ifdef NAS_UE /* 3GPP TS 24.301, section 6.4.4.6 * If the UE locally deactivated all EPS bearer contexts, the UE @@ -562,23 +511,12 @@ int esm_ebr_context_release( (void) emm_sap_send(&emm_sap); } -#endif // NAS_UE -#ifdef NAS_MME - - if (esm_ctx->n_ebrs == 0) { - /* TODO: Release the PDN connection and marked the UE as inactive - * in the network for EPS services (is_attached = FALSE) */ - } - -#endif - LOG_FUNC_RETURN (ebi); } LOG_FUNC_RETURN (ESM_EBI_UNASSIGNED); } -#ifdef NAS_UE /**************************************************************************** ** ** ** Name: esm_ebr_context_get_pid() ** @@ -694,13 +632,11 @@ int esm_ebr_context_check_tft(int pid, int ebi, LOG_FUNC_RETURN (rc); } -#endif // NAS_UE /****************************************************************************/ /********************* L O C A L F U N C T I O N S *********************/ /****************************************************************************/ -#ifdef NAS_UE /**************************************************************************** ** ** ** Name: _esm_ebr_context_check_identifiers() ** @@ -788,4 +724,3 @@ static int _esm_ebr_context_check_precedence(const network_tft_t *tft1, return (RETURNok); } -#endif // NAS_UE diff --git a/openair-cn/NAS/EURECOM-NAS/src/esm/esm_ebr_context.h b/openair-cn/NAS/UE/ESM/esm_ebr_context.h old mode 100644 new mode 100755 similarity index 91% rename from openair-cn/NAS/EURECOM-NAS/src/esm/esm_ebr_context.h rename to openair-cn/NAS/UE/ESM/esm_ebr_context.h index 8ec48a52c1..2a9d55a197 --- a/openair-cn/NAS/EURECOM-NAS/src/esm/esm_ebr_context.h +++ b/openair-cn/NAS/UE/ESM/esm_ebr_context.h @@ -55,7 +55,6 @@ Description Defines functions used to handle EPS bearer contexts. /************************ G L O B A L T Y P E S ************************/ /****************************************************************************/ -#ifdef NAS_UE /* Traffic flow template operation */ typedef enum { ESM_EBR_CONTEXT_TFT_CREATE, @@ -64,7 +63,6 @@ typedef enum { ESM_EBR_CONTEXT_TFT_REPLACE_PACKET, ESM_EBR_CONTEXT_TFT_DELETE_PACKET, } esm_ebr_context_tft_t; -#endif /****************************************************************************/ /******************** G L O B A L V A R I A B L E S ********************/ @@ -74,7 +72,6 @@ typedef enum { /****************** E X P O R T E D F U N C T I O N S ******************/ /****************************************************************************/ -#ifdef NAS_UE int esm_ebr_context_create(int pid, int ebi, int is_default, const network_qos_t *qos, const network_tft_t *tft); @@ -84,13 +81,6 @@ int esm_ebr_context_get_pid(int ebi); int esm_ebr_context_check_tft(int pid, int ebi, const network_tft_t *tft, esm_ebr_context_tft_t operation); -#endif -#ifdef NAS_MME -int esm_ebr_context_create(emm_data_context_t *ctx, int pid, int ebi, int is_default, - const network_qos_t *qos, const network_tft_t *tft); - -int esm_ebr_context_release(emm_data_context_t *ctx, int ebi, int *pid, int *bid); -#endif #endif /* __ESM_EBR_CONTEXT_H__ */ diff --git a/openair-cn/NAS/UE/ESM/esm_ip.c b/openair-cn/NAS/UE/ESM/esm_ip.c new file mode 100755 index 0000000000..b2fb84b970 --- /dev/null +++ b/openair-cn/NAS/UE/ESM/esm_ip.c @@ -0,0 +1,74 @@ +/******************************************************************************* + OpenAirInterface + Copyright(c) 1999 - 2014 Eurecom + + OpenAirInterface is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + + OpenAirInterface is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with OpenAirInterface.The full GNU General Public License is + included in this distribution in the file called "COPYING". If not, + see . + + Contact Information + OpenAirInterface Admin: openair_admin@eurecom.fr + OpenAirInterface Tech : openair_tech@eurecom.fr + OpenAirInterface Dev : openair4g-devel@eurecom.fr + + Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. + + *******************************************************************************/ +#include "emmData.h" +#include "esmData.h" + +char ip_addr_str[100]; + +inline char *esm_data_get_ipv4_addr(const OctetString *ip_addr) +{ + if (ip_addr->length > 0) { + sprintf(ip_addr_str, "%u.%u.%u.%u", + ip_addr->value[0], ip_addr->value[1], + ip_addr->value[2], ip_addr->value[3]); + return ip_addr_str; + } + + return (NULL); +} + +inline char *esm_data_get_ipv6_addr(const OctetString *ip_addr) +{ + if (ip_addr->length > 0) { + sprintf(ip_addr_str, "%x%.2x:%x%.2x:%x%.2x:%x%.2x", + ip_addr->value[0], ip_addr->value[1], + ip_addr->value[2], ip_addr->value[3], + ip_addr->value[4], ip_addr->value[5], + ip_addr->value[6], ip_addr->value[7]); + return ip_addr_str; + } + + return (NULL); +} + +inline char *esm_data_get_ipv4v6_addr(const OctetString *ip_addr) +{ + if (ip_addr->length > 0) { + sprintf(ip_addr_str, "%u.%u.%u.%u / %x%.2x:%x%.2x:%x%.2x:%x%.2x", + ip_addr->value[0], ip_addr->value[1], + ip_addr->value[2], ip_addr->value[3], + ip_addr->value[4], ip_addr->value[5], + ip_addr->value[6], ip_addr->value[7], + ip_addr->value[8], ip_addr->value[9], + ip_addr->value[10], ip_addr->value[11]); + return ip_addr_str; + } + + return (NULL); +} diff --git a/openair-cn/NAS/EURECOM-NAS/src/esm/esm_main.c b/openair-cn/NAS/UE/ESM/esm_main.c old mode 100644 new mode 100755 similarity index 91% rename from openair-cn/NAS/EURECOM-NAS/src/esm/esm_main.c rename to openair-cn/NAS/UE/ESM/esm_main.c index a87b0830bb..2d2124e495 --- a/openair-cn/NAS/EURECOM-NAS/src/esm/esm_main.c +++ b/openair-cn/NAS/UE/ESM/esm_main.c @@ -65,7 +65,6 @@ Description Defines the EPS Session Management procedure call manager, /****************** E X P O R T E D F U N C T I O N S ******************/ /****************************************************************************/ -#ifdef NAS_UE /**************************************************************************** ** ** ** Name: esm_main_initialize() ** @@ -108,48 +107,7 @@ void esm_main_initialize(esm_indication_callback_t cb) LOG_FUNC_OUT; } -#endif -#ifdef NAS_MME -/**************************************************************************** - ** ** - ** Name: esm_main_initialize() ** - ** ** - ** Description: Initializes ESM internal data ** - ** ** - ** Inputs: None ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: None ** - ** Others: None ** - ** ** - ***************************************************************************/ -void esm_main_initialize(void) -{ - int i; - LOG_FUNC_IN; - - /* Retreive MME supported configuration data */ - if (mme_api_get_esm_config(&_esm_data.conf) != RETURNok) { - LOG_TRACE(ERROR, "ESM-MAIN - Failed to get MME configuration data"); - } - -# if !defined(NAS_BUILT_IN_EPC) - - /* Initialize ESM contexts */ - for (i = 0; i < ESM_DATA_NB_UE_MAX; i++) { - _esm_data.ctx[i] = NULL; - } - -# endif - - /* Initialize the EPS bearer context manager */ - esm_ebr_initialize(); - - LOG_FUNC_OUT; -} -#endif /**************************************************************************** ** ** @@ -169,7 +127,6 @@ void esm_main_cleanup(void) { LOG_FUNC_IN; -#ifdef NAS_UE { int i; int pid; @@ -206,12 +163,10 @@ void esm_main_cleanup(void) } } } -#endif LOG_FUNC_OUT; } -#ifdef NAS_UE /**************************************************************************** ** ** ** Name: esm_main_get_nb_pdn_max() ** @@ -429,7 +384,6 @@ int esm_main_get_pdn_addr(int cid, const char **ipv4addr, const char **ipv6addr) LOG_FUNC_RETURN (RETURNok); } -#endif // NAS_UE /****************************************************************************/ /********************* L O C A L F U N C T I O N S *********************/ diff --git a/openair-cn/NAS/EURECOM-NAS/src/esm/esm_main.h b/openair-cn/NAS/UE/ESM/esm_main.h old mode 100644 new mode 100755 similarity index 96% rename from openair-cn/NAS/EURECOM-NAS/src/esm/esm_main.h rename to openair-cn/NAS/UE/ESM/esm_main.h index d7a5a3696c..2fd2e58939 --- a/openair-cn/NAS/EURECOM-NAS/src/esm/esm_main.h +++ b/openair-cn/NAS/UE/ESM/esm_main.h @@ -65,15 +65,10 @@ Description Defines the EPS Session Management procedure call manager, /****************** E X P O R T E D F U N C T I O N S ******************/ /****************************************************************************/ -#ifdef NAS_UE void esm_main_initialize(esm_indication_callback_t cb); -#endif -#ifdef NAS_MME -void esm_main_initialize(void); -#endif + void esm_main_cleanup(void); -#ifdef NAS_UE /* User's getter for PDN connections and EPS bearer contexts */ int esm_main_get_nb_pdns_max(void); @@ -84,6 +79,5 @@ int esm_main_get_pdn(int cid, int *type, const char **apn, int *is_emergency, int *is_active); int esm_main_get_pdn_addr(int cid, const char **ipv4addr, const char **ipv6addr); -#endif // NAS_UE #endif /* __ESM_MAIN_H__*/ diff --git a/openair-cn/NAS/UE/ESM/esm_proc.h b/openair-cn/NAS/UE/ESM/esm_proc.h new file mode 100755 index 0000000000..f4721aa00c --- /dev/null +++ b/openair-cn/NAS/UE/ESM/esm_proc.h @@ -0,0 +1,198 @@ +/******************************************************************************* + OpenAirInterface + Copyright(c) 1999 - 2014 Eurecom + + OpenAirInterface is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + + OpenAirInterface is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with OpenAirInterface.The full GNU General Public License is + included in this distribution in the file called "COPYING". If not, + see . + + Contact Information + OpenAirInterface Admin: openair_admin@eurecom.fr + OpenAirInterface Tech : openair_tech@eurecom.fr + OpenAirInterface Dev : openair4g-devel@eurecom.fr + + Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. + + *******************************************************************************/ +/***************************************************************************** +Source esm_proc.h + +Version 0.1 + +Date 2013/01/02 + +Product NAS stack + +Subsystem EPS Session Management + +Author Frederic Maurel + +Description Defines the EPS Session Management procedures executed at + the ESM Service Access Points. + +*****************************************************************************/ +#ifndef __ESM_PROC_H__ +#define __ESM_PROC_H__ + +#include "networkDef.h" +#include "OctetString.h" +#include "emmData.h" +#include "ProtocolConfigurationOptions.h" + +/****************************************************************************/ +/********************* G L O B A L C O N S T A N T S *******************/ +/****************************************************************************/ + +/* + * ESM retransmission timers + * ------------------------- + */ +#define T3482_DEFAULT_VALUE 8 /* PDN connectivity request */ +#define T3492_DEFAULT_VALUE 6 /* PDN disconnect request */ + + +/* Type of PDN address */ +typedef enum { + ESM_PDN_TYPE_IPV4 = NET_PDN_TYPE_IPV4, + ESM_PDN_TYPE_IPV6 = NET_PDN_TYPE_IPV6, + ESM_PDN_TYPE_IPV4V6 = NET_PDN_TYPE_IPV4V6 +} esm_proc_pdn_type_t; + +/* Type of PDN request */ +typedef enum { + ESM_PDN_REQUEST_INITIAL = 1, + ESM_PDN_REQUEST_HANDOVER, + ESM_PDN_REQUEST_EMERGENCY +} esm_proc_pdn_request_t; + +/****************************************************************************/ +/************************ G L O B A L T Y P E S ************************/ +/****************************************************************************/ + +/* + * Type of the ESM procedure callback executed when requested by the UE + * or initiated by the network + */ +typedef int (*esm_proc_procedure_t) (int, int, OctetString *, int); + +/* EPS bearer level QoS parameters */ +typedef network_qos_t esm_proc_qos_t; + +/* Traffic Flow Template for packet filtering */ +typedef network_tft_t esm_proc_tft_t; + +typedef ProtocolConfigurationOptions esm_proc_pco_t; + +/* PDN connection and EPS bearer context data */ +typedef struct { + OctetString apn; + esm_proc_pdn_type_t pdn_type; + OctetString pdn_addr; + esm_proc_qos_t qos; + esm_proc_tft_t tft; + esm_proc_pco_t pco; +} esm_proc_data_t; + +/****************************************************************************/ +/******************** G L O B A L V A R I A B L E S ********************/ +/****************************************************************************/ + +/****************************************************************************/ +/****************** E X P O R T E D F U N C T I O N S ******************/ +/****************************************************************************/ + +/* + * -------------------------------------------------------------------------- + * ESM status procedure + * -------------------------------------------------------------------------- + */ +int esm_proc_status_ind(int pti, int ebi, int *esm_cause); +int esm_proc_status(int is_standalone, int pti, OctetString *msg, + int sent_by_ue); + + +/* + * -------------------------------------------------------------------------- + * PDN connectivity procedure + * -------------------------------------------------------------------------- + */ +int esm_proc_pdn_connectivity(int cid, int to_define, + esm_proc_pdn_type_t pdn_type, const OctetString *apn, int is_emergency, + unsigned int *pti); +int esm_proc_pdn_connectivity_request(int is_standalone, int pti, + OctetString *msg, int sent_by_ue); +int esm_proc_pdn_connectivity_accept(int pti, esm_proc_pdn_type_t pdn_type, + const OctetString *pdn_address, const OctetString *apn, int *esm_cause); +int esm_proc_pdn_connectivity_reject(int pti, int *esm_cause); +int esm_proc_pdn_connectivity_complete(void); +int esm_proc_pdn_connectivity_failure(int is_pending); + + +/* + * -------------------------------------------------------------------------- + * PDN disconnect procedure + * -------------------------------------------------------------------------- + */ +int esm_proc_pdn_disconnect(int cid, unsigned int *pti, unsigned int *ebi); +int esm_proc_pdn_disconnect_request(int is_standalone, int pti, + OctetString *msg, int sent_by_ue); + +int esm_proc_pdn_disconnect_accept(int pti, int *esm_cause); +int esm_proc_pdn_disconnect_reject(int pti, int *esm_cause); + +/* + * -------------------------------------------------------------------------- + * Default EPS bearer context activation procedure + * -------------------------------------------------------------------------- + */ + +int esm_proc_default_eps_bearer_context_request(int pid, int ebi, + const esm_proc_qos_t *esm_qos, int *esm_cause); +int esm_proc_default_eps_bearer_context_complete(void); +int esm_proc_default_eps_bearer_context_failure(void); + +int esm_proc_default_eps_bearer_context_accept(int is_standalone, int ebi, + OctetString *msg, int ue_triggered); +int esm_proc_default_eps_bearer_context_reject(int is_standalone, int ebi, + OctetString *msg, int ue_triggered); + +/* + * -------------------------------------------------------------------------- + * Dedicated EPS bearer context activation procedure + * -------------------------------------------------------------------------- + */ + +int esm_proc_dedicated_eps_bearer_context_request(int ebi, int default_ebi, + const esm_proc_qos_t *qos, const esm_proc_tft_t *tft, int *esm_cause); + +int esm_proc_dedicated_eps_bearer_context_accept(int is_standalone, int ebi, + OctetString *msg, int ue_triggered); +int esm_proc_dedicated_eps_bearer_context_reject(int is_standalone, int ebi, + OctetString *msg, int ue_triggered); + +/* + * -------------------------------------------------------------------------- + * EPS bearer context deactivation procedure + * -------------------------------------------------------------------------- + */ + +int esm_proc_eps_bearer_context_deactivate(int is_local, int ebi, int *pid, + int *bid); +int esm_proc_eps_bearer_context_deactivate_request(int ebi, int *esm_cause); + +int esm_proc_eps_bearer_context_deactivate_accept(int is_standalone, int ebi, + OctetString *msg, int ue_triggered); + +#endif /* __ESM_PROC_H__*/ diff --git a/openair-cn/NAS/EURECOM-NAS/src/esm/esm_pt.c b/openair-cn/NAS/UE/ESM/esm_pt.c old mode 100644 new mode 100755 similarity index 99% rename from openair-cn/NAS/EURECOM-NAS/src/esm/esm_pt.c rename to openair-cn/NAS/UE/ESM/esm_pt.c index 96b18625ff..954049203c --- a/openair-cn/NAS/EURECOM-NAS/src/esm/esm_pt.c +++ b/openair-cn/NAS/UE/ESM/esm_pt.c @@ -45,13 +45,11 @@ Description Defines functions used to handle ESM procedure transactions. #include "esm_pt.h" -#ifdef NAS_UE #include "commonDef.h" #include "nas_log.h" #include // malloc, free #include // memcpy -#endif // NAS_UE /****************************************************************************/ /**************** E X T E R N A L D E F I N I T I O N S ****************/ @@ -69,7 +67,6 @@ Description Defines functions used to handle ESM procedure transactions. /******************* L O C A L D E F I N I T I O N S *******************/ /****************************************************************************/ -#ifdef NAS_UE /* String representation of ESM procedure transaction status */ static const char *_esm_pt_state_str[ESM_PT_STATE_MAX] = { "PROCEDURE TRANSACTION INACTIVE", @@ -103,13 +100,11 @@ static struct { /* Return the index of the next available entry in the list of procedure * transaction data */ static int _esm_pt_get_available_entry(void); -#endif // NAS_UE /****************************************************************************/ /****************** E X P O R T E D F U N C T I O N S ******************/ /****************************************************************************/ -#ifdef NAS_UE /**************************************************************************** ** ** ** Name: esm_pt_initialize() ** @@ -536,7 +531,6 @@ int esm_pt_is_not_in_use(int pti) (_esm_pt_data.context[pti - ESM_PTI_MIN] == NULL) || (_esm_pt_data.context[pti - ESM_PTI_MIN]->pti) != pti); } -#endif // NAS_UE /**************************************************************************** ** ** @@ -562,7 +556,6 @@ int esm_pt_is_reserved(int pti) /********************* L O C A L F U N C T I O N S *********************/ /****************************************************************************/ -#ifdef NAS_UE /**************************************************************************** ** ** ** Name: _esm_pt_get_available_entry() ** @@ -603,4 +596,3 @@ static int _esm_pt_get_available_entry(void) /* No available PTI entry found */ return (-1); } -#endif // NAS_UE diff --git a/openair-cn/NAS/EURECOM-NAS/src/esm/esm_pt.h b/openair-cn/NAS/UE/ESM/esm_pt.h old mode 100644 new mode 100755 similarity index 97% rename from openair-cn/NAS/EURECOM-NAS/src/esm/esm_pt.h rename to openair-cn/NAS/UE/ESM/esm_pt.h index a2aa313c9a..0abe6ea558 --- a/openair-cn/NAS/EURECOM-NAS/src/esm/esm_pt.h +++ b/openair-cn/NAS/UE/ESM/esm_pt.h @@ -45,10 +45,8 @@ Description Defines functions used to handle ESM procedure transactions. #ifndef __ESM_PT_H__ #define __ESM_PT_H__ -#ifdef NAS_UE #include "OctetString.h" #include "nas_timer.h" -#endif #include "ProcedureTransactionIdentity.h" @@ -63,7 +61,6 @@ Description Defines functions used to handle ESM procedure transactions. /************************ G L O B A L T Y P E S ************************/ /****************************************************************************/ -#ifdef NAS_UE /* Procedure transaction states */ typedef enum { ESM_PT_INACTIVE, /* No procedure transaction exists */ @@ -78,7 +75,6 @@ typedef struct { unsigned int count; /* Retransmission counter */ OctetString msg; /* Encoded ESM message to re-transmit */ } esm_pt_timer_data_t; -#endif // NAS_UE /****************************************************************************/ /******************** G L O B A L V A R I A B L E S ********************/ @@ -90,7 +86,6 @@ typedef struct { int esm_pt_is_reserved(int pti); -#ifdef NAS_UE void esm_pt_initialize(void); int esm_pt_assign(void); @@ -105,6 +100,5 @@ esm_pt_state esm_pt_get_status(int pti); int esm_pt_get_pending_pti(esm_pt_state status); int esm_pt_is_not_in_use(int pti); -#endif // NAS_UE #endif /* __ESM_PT_H__*/ diff --git a/openair-cn/NAS/EURECOM-NAS/src/UEprocess.c b/openair-cn/NAS/UE/UEprocess.c similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/UEprocess.c rename to openair-cn/NAS/UE/UEprocess.c diff --git a/openair-cn/NAS/nas_itti_messaging.c b/openair-cn/NAS/UE/nas_itti_messaging.c old mode 100644 new mode 100755 similarity index 87% rename from openair-cn/NAS/nas_itti_messaging.c rename to openair-cn/NAS/UE/nas_itti_messaging.c index 8f7dac6531..d832585ebd --- a/openair-cn/NAS/nas_itti_messaging.c +++ b/openair-cn/NAS/UE/nas_itti_messaging.c @@ -32,16 +32,10 @@ #include "nas_itti_messaging.h" #include "msc.h" -#if ((defined(NAS_BUILT_IN_EPC) && defined(NAS_MME)) || (defined(NAS_BUILT_IN_UE) && defined(NAS_UE))) -# if (defined(NAS_BUILT_IN_EPC) && defined(NAS_MME)) -# define TASK_ORIGIN TASK_NAS_MME -# else # define TASK_ORIGIN TASK_NAS_UE -# endif -#endif -#if ((defined(NAS_BUILT_IN_EPC) && defined(NAS_MME)) || (defined(ENABLE_NAS_UE_LOGGING) && defined(NAS_BUILT_IN_UE) && defined(NAS_UE))) -static const UInt8_t emm_message_ids[] = { +#if (defined(ENABLE_NAS_UE_LOGGING) && defined(NAS_BUILT_IN_UE) ) +static const uint8_t emm_message_ids[] = { ATTACH_REQUEST, ATTACH_ACCEPT, ATTACH_COMPLETE, @@ -73,7 +67,7 @@ static const UInt8_t emm_message_ids[] = { CS_SERVICE_NOTIFICATION, }; -static const UInt8_t esm_message_ids[] = { +static const uint8_t esm_message_ids[] = { ACTIVATE_DEFAULT_EPS_BEARER_CONTEXT_REQUEST, ACTIVATE_DEFAULT_EPS_BEARER_CONTEXT_ACCEPT, ACTIVATE_DEFAULT_EPS_BEARER_CONTEXT_REJECT, @@ -98,7 +92,7 @@ static const UInt8_t esm_message_ids[] = { ESM_STATUS, }; -static int _nas_find_message_index(const UInt8_t message_id, const UInt8_t *message_ids, const int ids_number) +static int _nas_find_message_index(const uint8_t message_id, const uint8_t *message_ids, const int ids_number) { int i; @@ -189,30 +183,8 @@ int nas_itti_protected_msg(const char *buffer, const nas_message_t *msg, const i } #endif -#if defined(NAS_BUILT_IN_EPC) && defined(NAS_MME) -int nas_itti_dl_data_req(const uint32_t ue_id, void *const data, - const uint32_t length) -{ - MessageDef *message_p; - message_p = itti_alloc_new_message(TASK_NAS_MME, NAS_DOWNLINK_DATA_REQ); - NAS_DL_DATA_REQ(message_p).UEid = ue_id; - NAS_DL_DATA_REQ(message_p).nasMsg.data = data; - NAS_DL_DATA_REQ(message_p).nasMsg.length = length; - - MSC_LOG_TX_MESSAGE( - MSC_NAS_MME, - MSC_S1AP_MME, - NULL,0, - "0 NAS_DOWNLINK_DATA_REQ ue id %06"PRIX32" len %u", ue_id, length); - - return itti_send_msg_to_task(TASK_S1AP, INSTANCE_DEFAULT, message_p); -} - -#endif - -#if defined(NAS_BUILT_IN_UE) && defined(NAS_UE) extern unsigned char NB_eNB_INST; int nas_itti_cell_info_req(const plmn_t plmnID, const Byte_t rat) @@ -235,7 +207,7 @@ int nas_itti_cell_info_req(const plmn_t plmnID, const Byte_t rat) return itti_send_msg_to_task(TASK_RRC_UE, NB_eNB_INST + 0 /* TODO to be virtualized */, message_p); } -int nas_itti_nas_establish_req(as_cause_t cause, as_call_type_t type, as_stmsi_t s_tmsi, plmn_t plmnID, Byte_t *data, UInt32_t length) +int nas_itti_nas_establish_req(as_cause_t cause, as_call_type_t type, as_stmsi_t s_tmsi, plmn_t plmnID, Byte_t *data, uint32_t length) { MessageDef *message_p; @@ -291,4 +263,3 @@ int nas_itti_rab_establish_rsp(const as_stmsi_t s_tmsi, const as_rab_id_t rabID, s_tmsi.MMEcode, s_tmsi.m_tmsi,rabID, errCode ); return itti_send_msg_to_task(TASK_RRC_UE, NB_eNB_INST + 0 /* TODO to be virtualized */, message_p); } -#endif diff --git a/openair3/RAL-LTE/LTE_RAL_UE/INCLUDE/nas_ue_ioctl.h b/openair-cn/NAS/UE/nas_itti_messaging.h similarity index 52% rename from openair3/RAL-LTE/LTE_RAL_UE/INCLUDE/nas_ue_ioctl.h rename to openair-cn/NAS/UE/nas_itti_messaging.h index 01bdf75fc9..4165119570 100755 --- a/openair3/RAL-LTE/LTE_RAL_UE/INCLUDE/nas_ue_ioctl.h +++ b/openair-cn/NAS/UE/nas_itti_messaging.h @@ -23,43 +23,43 @@ OpenAirInterface Tech : openair_tech@eurecom.fr OpenAirInterface Dev : openair4g-devel@eurecom.fr - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE + Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. *******************************************************************************/ -/*! \file nas_ue_ioctl.h - * \brief This file defines the constants for triggering the ioctl interface - * \author WETTERWALD Michelle, GAUTHIER Lionel, MAUREL Frederic - * \date 2013 - * \company EURECOM - * \email: michelle.wetterwald@eurecom.fr, lionel.gauthier@eurecom.fr, frederic.maurel@eurecom.fr - */ -/*******************************************************************************/ -#ifndef _IAL_IOCTL_H -#define _IAL_IOCTL_H - -#include #include -#include -#include -#include +#include +#include -#include +#include "assertions.h" +#include "intertask_interface.h" +#include "esm_proc.h" +#include "msc.h" -// Temp constants = arguments gioctl -//arg[0] -#define IO_OBJ_STATS 0 -#define IO_OBJ_CNX 1 -#define IO_OBJ_RB 2 -#define IO_OBJ_MEAS 3 -#define IO_OBJ_IMEI 4 -//arg[1] -#define IO_CMD_ADD 0 -#define IO_CMD_DEL 1 -#define IO_CMD_LIST 2 +#ifndef NAS_ITTI_MESSAGING_H_ +#define NAS_ITTI_MESSAGING_H_ + +# if (defined(ENABLE_NAS_UE_LOGGING) && defined(NAS_BUILT_IN_UE)) +int nas_itti_plain_msg( + const char *buffer, + const nas_message_t *msg, + const int lengthP, + const int instance); + +int nas_itti_protected_msg( + const char *buffer, + const nas_message_t *msg, + const int lengthP, + const int instance); +# endif +# if defined(NAS_BUILT_IN_UE) +int nas_itti_cell_info_req(const plmn_t plmnID, const Byte_t rat); -//LGextern int inet_pton(int af, const char *src, void *dst); -//LGextern char *inet_ntop(int af, const void *src, char *dst, size_t sise); +int nas_itti_nas_establish_req(as_cause_t cause, as_call_type_t type, as_stmsi_t s_tmsi, plmn_t plmnID, Byte_t *data_pP, uint32_t lengthP); -#endif +int nas_itti_ul_data_req(const uint32_t ue_idP, void *const data_pP, const uint32_t lengthP); + +int nas_itti_rab_establish_rsp(const as_stmsi_t s_tmsi, const as_rab_id_t rabID, const nas_error_code_t errCode); +# endif +#endif /* NAS_ITTI_MESSAGING_H_ */ diff --git a/openair-cn/NAS/EURECOM-NAS/src/nas_network.c b/openair-cn/NAS/UE/nas_network.c old mode 100644 new mode 100755 similarity index 84% rename from openair-cn/NAS/EURECOM-NAS/src/nas_network.c rename to openair-cn/NAS/UE/nas_network.c index 9c5a0c38fe..5c63d56067 --- a/openair-cn/NAS/EURECOM-NAS/src/nas_network.c +++ b/openair-cn/NAS/UE/nas_network.c @@ -77,24 +77,10 @@ Description NAS procedure functions triggered by the network ** Others: None ** ** ** ***************************************************************************/ -#if defined(NAS_BUILT_IN_EPC) && defined(NAS_MME) -void nas_network_initialize(mme_config_t *mme_config_p) -#else void nas_network_initialize(void) -#endif { LOG_FUNC_IN; -#ifdef NAS_MME - /* Initialize the internal NAS processing data */ -# if defined(NAS_BUILT_IN_EPC) - nas_timer_init(); - nas_proc_initialize(mme_config_p); -# else - nas_proc_initialize(); -# endif -#endif - LOG_FUNC_OUT; } @@ -155,7 +141,6 @@ int nas_network_process_data(int msg_id, const void *data) } switch (msg_id) { -#ifdef NAS_UE case AS_BROADCAST_INFO_IND: break; @@ -224,46 +209,6 @@ int nas_network_process_data(int msg_id, const void *data) case AS_RAB_RELEASE_IND: break; -#endif -#ifdef NAS_MME - - case AS_NAS_ESTABLISH_IND: { - /* Received NAS signalling connection establishment indication */ - const nas_establish_ind_t *indication = &msg->msg.nas_establish_ind; - rc = nas_proc_establish_ind(indication->UEid, - indication->tac, - indication->initialNasMsg.data, - indication->initialNasMsg.length); - break; - } - - case AS_DL_INFO_TRANSFER_CNF: { - const dl_info_transfer_cnf_t *info = &msg->msg.dl_info_transfer_cnf; - - /* Received downlink data transfer confirm */ - if (info->errCode != AS_SUCCESS) { - LOG_TRACE(WARNING, "NET-MAIN - " - "Downlink NAS message not delivered"); - rc = nas_proc_dl_transfer_rej(info->UEid); - } else { - rc = nas_proc_dl_transfer_cnf(info->UEid); - } - - break; - } - - case AS_UL_INFO_TRANSFER_IND: { - const ul_info_transfer_ind_t *info = &msg->msg.ul_info_transfer_ind; - /* Received uplink data transfer indication */ - rc = nas_proc_ul_transfer_ind(info->UEid, - info->nasMsg.data, - info->nasMsg.length); - break; - } - - case AS_RAB_ESTABLISH_CNF: - break; -#endif default: LOG_TRACE(ERROR, "NET-MAIN - Unexpected AS message type: 0x%x", diff --git a/openair3/RAL-LTE/RAL-DUMMY/INCLUDE/eRALlte_thresholds.h b/openair-cn/NAS/UE/nas_network.h old mode 100644 new mode 100755 similarity index 74% rename from openair3/RAL-LTE/RAL-DUMMY/INCLUDE/eRALlte_thresholds.h rename to openair-cn/NAS/UE/nas_network.h index fbd0a4039c..25a8729eac --- a/openair3/RAL-LTE/RAL-DUMMY/INCLUDE/eRALlte_thresholds.h +++ b/openair-cn/NAS/UE/nas_network.h @@ -23,23 +23,29 @@ OpenAirInterface Tech : openair_tech@eurecom.fr OpenAirInterface Dev : openair4g-devel@eurecom.fr - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE + Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. *******************************************************************************/ -/*! \file eRALlte_thresholds.h - * \brief - * \author BRIZZOLA Davide, GAUTHIER Lionel, MAUREL Frederic, WETTERWALD Michelle - * \date 2012 - * \version - * \note - * \bug - * \warning - */ +/***************************************************************************** +Source nas_network.h -#ifndef __RAL_LTE_THRESHOLDS_H__ -#define __RAL_LTE_THRESHOLDS_H__ +Version 0.1 -#include "MIH_C.h" +Date 2012/09/20 + +Product NAS stack + +Subsystem NAS main process + +Author Frederic Maurel + +Description NAS procedure functions triggered by the network + +*****************************************************************************/ + + +#ifndef __NAS_NETWORK_H__ +#define __NAS_NETWORK_H__ /****************************************************************************/ /********************* G L O B A L C O N S T A N T S *******************/ @@ -53,12 +59,17 @@ /******************** G L O B A L V A R I A B L E S ********************/ /****************************************************************************/ -//LIST(MIH_C_LINK_CFG_PARAM, g_link_cfg_param_thresholds); - /****************************************************************************/ /****************** E X P O R T E D F U N C T I O N S ******************/ /****************************************************************************/ -void eRALlte_configure_thresholds_request(MIH_C_Message_Link_Configure_Thresholds_request_t* messageP); -#endif +void nas_network_initialize(void); + +void nas_network_cleanup(void); + +int nas_network_process_data(int command_id, const void *data); + +const void *nas_network_get_data(void); + +#endif /* __NAS_NETWORK_H__*/ diff --git a/openair-cn/NAS/EURECOM-NAS/src/nas_parser.c b/openair-cn/NAS/UE/nas_parser.c old mode 100644 new mode 100755 similarity index 98% rename from openair-cn/NAS/EURECOM-NAS/src/nas_parser.c rename to openair-cn/NAS/UE/nas_parser.c index 8c7c7c5fcf..aae894b783 --- a/openair-cn/NAS/EURECOM-NAS/src/nas_parser.c +++ b/openair-cn/NAS/UE/nas_parser.c @@ -61,22 +61,14 @@ Description NAS command line parser * Identifiers of the NAS command line options */ enum { -#ifdef NAS_UE NAS_PARSER_UE_ID, /* User Equipement Identifier */ -#endif // NAS_UE NAS_PARSER_TRACE_LEVEL, /* Logging trace level */ -#ifdef NAS_UE NAS_PARSER_USER_HOST, /* User app layer's hostname */ -#endif // NAS_UE NAS_PARSER_NETWORK_HOST, /* Network layer's hostname */ -#ifdef NAS_UE NAS_PARSER_USER_PORT, /* User app layer's port number */ -#endif // NAS_UE NAS_PARSER_NETWORK_PORT, /* Network layer's port number */ -#ifdef NAS_UE NAS_PARSER_DEVICE_PATH, /* Device pathname */ NAS_PARSER_DEVICE_ATTR, /* Device attribute parameters */ -#endif // NAS_UE NAS_PARSER_NB_OPTIONS }; @@ -93,40 +85,32 @@ static parser_command_line_t nasParserCommandLine = { "NASprocess", /* Command name */ NAS_PARSER_NB_OPTIONS, /* Number of options */ { /* Command line options */ -#ifdef NAS_UE { "-ueid", "", "UE identifier\t\t\t", NAS_PARSER_DEFAULT_UE_ID }, -#endif // NAS_UE { "-trace", "", "Logging trace level\t\t", NAS_PARSER_DEFAULT_TRACE_LEVEL }, -#ifdef NAS_UE { "-uhost", "", "User app layer's hostname\t", NAS_PARSER_DEFAULT_USER_HOSTNAME }, -#endif // NAS_UE { "-nhost", "", "Network layer's hostname\t", NAS_PARSER_DEFAULT_NETWORK_HOSTNAME }, -#ifdef NAS_UE { "-uport", "", "User app layer's port number\t", NAS_PARSER_DEFAULT_USER_PORT_NUMBER }, -#endif // NAS_UE { "-nport", "", "Network layer's port number\t", NAS_PARSER_DEFAULT_NETWORK_PORT_NUMBER }, -#ifdef NAS_UE {"-dev", "", "Device pathname\t\t", "NULL"}, {"-params", "", "Device attribute parameters", "NULL"}, -#endif // NAS_UE } }; @@ -252,7 +236,6 @@ const char *nas_parser_get_network_port(void) return nasParserCommandLine.options[NAS_PARSER_NETWORK_PORT].pvalue; } -#ifdef NAS_UE /**************************************************************************** ** ** ** Name: nas_parser_get_ueid() ** @@ -343,7 +326,6 @@ const char *nas_parser_get_device_params(void) { return nasParserCommandLine.options[NAS_PARSER_DEVICE_ATTR].pvalue; } -#endif // NAS_UE /****************************************************************************/ /********************* L O C A L F U N C T I O N S *********************/ diff --git a/openair-cn/NAS/EURECOM-NAS/src/nas_parser.h b/openair-cn/NAS/UE/nas_parser.h old mode 100644 new mode 100755 similarity index 98% rename from openair-cn/NAS/EURECOM-NAS/src/nas_parser.h rename to openair-cn/NAS/UE/nas_parser.h index e8d18ae212..4e9be0aa28 --- a/openair-cn/NAS/EURECOM-NAS/src/nas_parser.h +++ b/openair-cn/NAS/UE/nas_parser.h @@ -58,7 +58,6 @@ Description NAS command line parser /* Network layer default port number */ #define NAS_PARSER_DEFAULT_NETWORK_PORT_NUMBER "12000" -#ifdef NAS_UE /* User Identifier default value */ #define NAS_PARSER_DEFAULT_UE_ID "1" @@ -67,7 +66,6 @@ Description NAS command line parser /* User application layer default port number */ #define NAS_PARSER_DEFAULT_USER_PORT_NUMBER "10000" -#endif // NAS_UE /****************************************************************************/ /************************ G L O B A L T Y P E S ************************/ @@ -89,12 +87,10 @@ int nas_parser_get_trace_level(void); const char *nas_parser_get_network_host(void); const char *nas_parser_get_network_port(void); -#ifdef NAS_UE int nas_parser_get_ueid(void); const char *nas_parser_get_user_host(void); const char *nas_parser_get_user_port(void); const char *nas_parser_get_device_path(void); const char *nas_parser_get_device_params(void); -#endif // NAS_UE #endif /* __NAS_PARSER_H__*/ diff --git a/openair-cn/NAS/EURECOM-NAS/src/nas_proc.c b/openair-cn/NAS/UE/nas_proc.c old mode 100644 new mode 100755 similarity index 84% rename from openair-cn/NAS/EURECOM-NAS/src/nas_proc.c rename to openair-cn/NAS/UE/nas_proc.c index 662dd6dfaa..f6327fd627 --- a/openair-cn/NAS/EURECOM-NAS/src/nas_proc.c +++ b/openair-cn/NAS/UE/nas_proc.c @@ -63,7 +63,6 @@ Description NAS procedure call manager /******************* L O C A L D E F I N I T I O N S *******************/ /****************************************************************************/ -#ifdef NAS_UE /* * Signal strength/quality value not known or not detectable */ @@ -84,12 +83,10 @@ static struct { static int _nas_proc_activate(int cid, int apply_to_all); static int _nas_proc_deactivate(int cid, int apply_to_all); -#endif /****************************************************************************/ /****************** E X P O R T E D F U N C T I O N S ******************/ /****************************************************************************/ -#ifdef NAS_UE /**************************************************************************** ** ** ** Name: nas_proc_initialize() ** @@ -125,50 +122,7 @@ void nas_proc_initialize(emm_indication_callback_t emm_cb, LOG_FUNC_OUT; } -#endif -#ifdef NAS_MME -/**************************************************************************** - ** ** - ** Name: nas_proc_initialize() ** - ** ** - ** Description: ** - ** ** - ** Inputs: None ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: None ** - ** Others: None ** - ** ** - ***************************************************************************/ -# if defined(NAS_BUILT_IN_EPC) -void nas_proc_initialize(mme_config_t *mme_config_p) -{ - LOG_FUNC_IN; - /* Initialize the EMM procedure manager */ - emm_main_initialize(mme_config_p); - - /* Initialize the ESM procedure manager */ - esm_main_initialize(); - - LOG_FUNC_OUT; -} -# else -void nas_proc_initialize(void) -{ - LOG_FUNC_IN; - - /* Initialize the EMM procedure manager */ - emm_main_initialize(); - - /* Initialize the ESM procedure manager */ - esm_main_initialize(); - - LOG_FUNC_OUT; -} -# endif -#endif /**************************************************************************** ** ** @@ -188,7 +142,6 @@ void nas_proc_cleanup(void) { LOG_FUNC_IN; -#ifdef NAS_UE /* Detach the UE from the EPS network */ int rc = nas_proc_detach(TRUE); @@ -196,7 +149,6 @@ void nas_proc_cleanup(void) LOG_TRACE(ERROR, "NAS-PROC - Failed to detach from the network"); } -#endif /* Perform the EPS Mobility Manager's clean up procedure */ emm_main_cleanup(); @@ -212,7 +164,6 @@ void nas_proc_cleanup(void) * NAS procedures triggered by the user * -------------------------------------------------------------------------- */ -#ifdef NAS_UE /**************************************************************************** ** ** ** Name: nas_proc_enable_s1_mode() ** @@ -1078,7 +1029,7 @@ int nas_proc_activate_pdn(int cid) ** ** ***************************************************************************/ int nas_proc_cell_info(int found, tac_t tac, ci_t ci, AcT_t AcT, - UInt8_t rsrq, UInt8_t rsrp) + uint8_t rsrq, uint8_t rsrp) { LOG_FUNC_IN; @@ -1122,7 +1073,7 @@ int nas_proc_cell_info(int found, tac_t tac, ci_t ci, AcT_t AcT, ** Others: None ** ** ** ***************************************************************************/ -int nas_proc_establish_cnf(const Byte_t *data, UInt32_t len) +int nas_proc_establish_cnf(const Byte_t *data, uint32_t len) { LOG_FUNC_IN; @@ -1300,7 +1251,7 @@ int nas_proc_ul_transfer_rej(void) ** Others: None ** ** ** ***************************************************************************/ -int nas_proc_dl_transfer_ind(const Byte_t *data, UInt32_t len) +int nas_proc_dl_transfer_ind(const Byte_t *data, uint32_t len) { LOG_FUNC_IN; @@ -1322,307 +1273,13 @@ int nas_proc_dl_transfer_ind(const Byte_t *data, UInt32_t len) LOG_FUNC_RETURN (rc); } -#endif // NAS_UE - -#ifdef NAS_MME -/**************************************************************************** - ** ** - ** Name: nas_proc_establish_ind() ** - ** ** - ** Description: Processes the NAS signalling connection establishment ** - ** indication message received from the network ** - ** ** - ** Inputs: ueid: UE identifier ** - ** tac: The code of the tracking area the initia- ** - ** ting UE belongs to ** - ** data: The initial NAS message transfered within ** - ** the message ** - ** len: The length of the initial NAS message ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -int nas_proc_establish_ind(UInt32_t ueid, tac_t tac, - const Byte_t *data, UInt32_t len) -{ - LOG_FUNC_IN; - - int rc = RETURNerror; - - if (len > 0) { - emm_sap_t emm_sap; - - MSC_LOG_TX_MESSAGE( - MSC_NAS_MME, - MSC_NAS_EMM_MME, - NULL,0, - "0 EMMAS_ESTABLISH_REQ ue id %06"PRIX32" tac %u", ueid, tac); - /* - * Notify the EMM procedure call manager that NAS signalling - * connection establishment indication message has been received - * from the Access-Stratum sublayer - */ - emm_sap.primitive = EMMAS_ESTABLISH_REQ; - emm_sap.u.emm_as.u.establish.ueid = ueid; - emm_sap.u.emm_as.u.establish.NASmsg.length = len; - emm_sap.u.emm_as.u.establish.NASmsg.value = (uint8_t *)data; - rc = emm_sap_send(&emm_sap); - } - - LOG_FUNC_RETURN (rc); -} - -/**************************************************************************** - ** ** - ** Name: nas_proc_dl_transfer_cnf() ** - ** ** - ** Description: Processes the downlink data transfer confirm message re- ** - ** ceived from the network while NAS message has been succes-** - ** sfully delivered to the NAS sublayer on the receiver side.** - ** ** - ** Inputs: ueid: UE identifier ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -int nas_proc_dl_transfer_cnf(UInt32_t ueid) -{ - LOG_FUNC_IN; - - emm_sap_t emm_sap; - int rc; - - MSC_LOG_TX_MESSAGE( - MSC_NAS_MME, - MSC_NAS_EMM_MME, - NULL,0, - "0 EMMAS_DATA_IND dl_transfer_conf ue id %06"PRIX32"", ueid); - - /* - * Notify the EMM procedure call manager that downlink NAS message - * has been successfully delivered to the NAS sublayer on the - * receiver side - */ - emm_sap.primitive = EMMAS_DATA_IND; - emm_sap.u.emm_as.u.data.ueid = ueid; - emm_sap.u.emm_as.u.data.delivered = TRUE; - emm_sap.u.emm_as.u.data.NASmsg.length = 0; - rc = emm_sap_send(&emm_sap); - - LOG_FUNC_RETURN (rc); -} - -/**************************************************************************** - ** ** - ** Name: nas_proc_dl_transfer_rej() ** - ** ** - ** Description: Processes the downlink data transfer confirm message re- ** - ** ceived from the network while NAS message has not been ** - ** delivered to the NAS sublayer on the receiver side. ** - ** ** - ** Inputs: ueid: UE identifier ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -int nas_proc_dl_transfer_rej(UInt32_t ueid) -{ - LOG_FUNC_IN; - - emm_sap_t emm_sap; - int rc; - - MSC_LOG_TX_MESSAGE( - MSC_NAS_MME, - MSC_NAS_EMM_MME, - NULL,0, - "0 EMMAS_DATA_IND dl_transfer_reject ue id %06"PRIX32"", ueid); - - /* - * Notify the EMM procedure call manager that transmission - * failure of downlink NAS message indication has been received - * from lower layers - */ - emm_sap.primitive = EMMAS_DATA_IND; - emm_sap.u.emm_as.u.data.ueid = ueid; - emm_sap.u.emm_as.u.data.delivered = FALSE; - emm_sap.u.emm_as.u.data.NASmsg.length = 0; - rc = emm_sap_send(&emm_sap); - - LOG_FUNC_RETURN (rc); -} - -/**************************************************************************** - ** ** - ** Name: nas_proc_ul_transfer_ind() ** - ** ** - ** Description: Processes uplink data transfer indication message recei- ** - ** ved from the network ** - ** ** - ** Inputs: ueid: UE identifier ** - ** data: The transfered NAS message ** - ** len: The length of the NAS message ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: RETURNok, RETURNerror ** - ** Others: None ** - ** ** - ***************************************************************************/ -int nas_proc_ul_transfer_ind(UInt32_t ueid, const Byte_t *data, UInt32_t len) -{ - int rc = RETURNerror; - - LOG_FUNC_IN; - - if (len > 0) { - emm_sap_t emm_sap; - /* - * Notify the EMM procedure call manager that data transfer - * indication has been received from the Access-Stratum sublayer - */ - MSC_LOG_TX_MESSAGE( - MSC_NAS_MME, - MSC_NAS_EMM_MME, - NULL,0, - "0 EMMAS_DATA_IND ue id %06"PRIX32" len %u", ueid, len); - - emm_sap.primitive = EMMAS_DATA_IND; - emm_sap.u.emm_as.u.data.ueid = ueid; - emm_sap.u.emm_as.u.data.delivered = TRUE; - emm_sap.u.emm_as.u.data.NASmsg.length = len; - emm_sap.u.emm_as.u.data.NASmsg.value = (uint8_t *)data; - rc = emm_sap_send(&emm_sap); - } - - LOG_FUNC_RETURN (rc); -} - -# if defined(NAS_BUILT_IN_EPC) -int nas_proc_auth_param_res(emm_cn_auth_res_t *emm_cn_auth_res) -{ - int rc = RETURNerror; - emm_sap_t emm_sap; - - LOG_FUNC_IN; - - MSC_LOG_TX_MESSAGE( - MSC_NAS_MME, - MSC_NAS_EMM_MME, - NULL,0, - "0 EMMCN_AUTHENTICATION_PARAM_RES"); - - emm_sap.primitive = EMMCN_AUTHENTICATION_PARAM_RES; - emm_sap.u.emm_cn.u.auth_res = emm_cn_auth_res; - - rc = emm_sap_send(&emm_sap); - - LOG_FUNC_RETURN (rc); -} - -int nas_proc_auth_param_fail(emm_cn_auth_fail_t *emm_cn_auth_fail) -{ - int rc = RETURNerror; - emm_sap_t emm_sap; - - LOG_FUNC_IN; - - MSC_LOG_TX_MESSAGE( - MSC_NAS_MME, - MSC_NAS_EMM_MME, - NULL,0, - "0 EMMCN_AUTHENTICATION_PARAM_FAIL"); - - emm_sap.primitive = EMMCN_AUTHENTICATION_PARAM_FAIL; - emm_sap.u.emm_cn.u.auth_fail = emm_cn_auth_fail; - - rc = emm_sap_send(&emm_sap); - - LOG_FUNC_RETURN (rc); -} - -int nas_proc_deregister_ue(UInt32_t ue_id) -{ - int rc = RETURNerror; - emm_sap_t emm_sap; - - LOG_FUNC_IN; - - MSC_LOG_TX_MESSAGE( - MSC_NAS_MME, - MSC_NAS_EMM_MME, - NULL,0, - "0 EMMCN_DEREGISTER_UE ue_id %06"PRIX32"",ue_id); - - emm_sap.primitive = EMMCN_DEREGISTER_UE; - emm_sap.u.emm_cn.u.deregister.UEid = ue_id; - - rc = emm_sap_send(&emm_sap); - - LOG_FUNC_RETURN (rc); -} - -int nas_proc_pdn_connectivity_res(emm_cn_pdn_res_t *emm_cn_pdn_res) -{ - int rc = RETURNerror; - emm_sap_t emm_sap; - - LOG_FUNC_IN; - - MSC_LOG_TX_MESSAGE( - MSC_NAS_MME, - MSC_NAS_EMM_MME, - NULL,0, - "0 EMMCN_PDN_CONNECTIVITY_RES"); - - emm_sap.primitive = EMMCN_PDN_CONNECTIVITY_RES; - emm_sap.u.emm_cn.u.emm_cn_pdn_res = emm_cn_pdn_res; - - rc = emm_sap_send(&emm_sap); - - LOG_FUNC_RETURN (rc); -} - -int nas_proc_pdn_connectivity_fail(emm_cn_pdn_fail_t *emm_cn_pdn_fail) -{ - int rc = RETURNerror; - emm_sap_t emm_sap; - - LOG_FUNC_IN; - - MSC_LOG_TX_MESSAGE( - MSC_NAS_MME, - MSC_NAS_EMM_MME, - NULL,0, - "0 EMMCN_PDN_CONNECTIVITY_FAIL"); - - emm_sap.primitive = EMMCN_PDN_CONNECTIVITY_FAIL; - emm_sap.u.emm_cn.u.emm_cn_pdn_fail = emm_cn_pdn_fail; - - rc = emm_sap_send(&emm_sap); - - LOG_FUNC_RETURN (rc); -} -# endif -#endif // NAS_MME - /****************************************************************************/ /********************* L O C A L F U N C T I O N S *********************/ /****************************************************************************/ -#ifdef NAS_UE /**************************************************************************** ** ** ** Name: _nas_proc_activate() ** @@ -1763,5 +1420,4 @@ static int _nas_proc_deactivate(int cid, int apply_to_all) LOG_FUNC_RETURN (rc); } -#endif // NAS_UE diff --git a/openair-cn/NAS/EURECOM-NAS/src/nas_proc.h b/openair-cn/NAS/UE/nas_proc.h old mode 100644 new mode 100755 similarity index 77% rename from openair-cn/NAS/EURECOM-NAS/src/nas_proc.h rename to openair-cn/NAS/UE/nas_proc.h index 11573a1764..8d4897eddb --- a/openair-cn/NAS/EURECOM-NAS/src/nas_proc.h +++ b/openair-cn/NAS/UE/nas_proc.h @@ -45,11 +45,6 @@ Description NAS procedure call manager #ifndef __NAS_PROC_H__ #define __NAS_PROC_H__ -#if defined(NAS_BUILT_IN_EPC) -# include "mme_config.h" -# include "emm_cnDef.h" -#endif - #include "commonDef.h" #include "networkDef.h" @@ -69,17 +64,8 @@ Description NAS procedure call manager /****************** E X P O R T E D F U N C T I O N S ******************/ /****************************************************************************/ -#ifdef NAS_UE void nas_proc_initialize(emm_indication_callback_t emm_cb, esm_indication_callback_t esm_cb, const char *imei); -#endif -#ifdef NAS_MME -# if defined(NAS_BUILT_IN_EPC) -void nas_proc_initialize(mme_config_t *mme_config_p); -# else -void nas_proc_initialize(void); -# endif -#endif void nas_proc_cleanup(void); @@ -89,7 +75,6 @@ void nas_proc_cleanup(void); * -------------------------------------------------------------------------- */ -#ifdef NAS_UE int nas_proc_enable_s1_mode(void); int nas_proc_disable_s1_mode(void); int nas_proc_get_eps(int *stat); @@ -123,7 +108,6 @@ int nas_proc_get_pdn_addr(int cid, int *cids, const char **addr1, const char **addr2, int n_addr_max); int nas_proc_deactivate_pdn(int cid); int nas_proc_activate_pdn(int cid); -#endif /* * -------------------------------------------------------------------------- @@ -131,40 +115,18 @@ int nas_proc_activate_pdn(int cid); * -------------------------------------------------------------------------- */ -#ifdef NAS_UE -int nas_proc_cell_info(int found, tac_t tac, ci_t ci, AcT_t rat, UInt8_t rsrp, - UInt8_t rsrq); +int nas_proc_cell_info(int found, tac_t tac, ci_t ci, AcT_t rat, uint8_t rsrp, + uint8_t rsrq); -int nas_proc_establish_cnf(const Byte_t *data, UInt32_t len); +int nas_proc_establish_cnf(const Byte_t *data, uint32_t len); int nas_proc_establish_rej(void); int nas_proc_release_ind(int cause); int nas_proc_ul_transfer_cnf(void); int nas_proc_ul_transfer_rej(void); -int nas_proc_dl_transfer_ind(const Byte_t *data, UInt32_t len); -#endif +int nas_proc_dl_transfer_ind(const Byte_t *data, uint32_t len); -#ifdef NAS_MME -int nas_proc_establish_ind(UInt32_t ueid, tac_t tac, const Byte_t *data, - UInt32_t len); -int nas_proc_dl_transfer_cnf(UInt32_t ueid); -int nas_proc_dl_transfer_rej(UInt32_t ueid); -int nas_proc_ul_transfer_ind(UInt32_t ueid, const Byte_t *data, UInt32_t len); -#endif - -/* - * -------------------------------------------------------------------------- - * NAS procedures triggered by the mme applicative layer - * -------------------------------------------------------------------------- - */ -#if defined(NAS_MME) && defined(NAS_BUILT_IN_EPC) -int nas_proc_auth_param_res(emm_cn_auth_res_t *emm_cn_auth_res); -int nas_proc_auth_param_fail(emm_cn_auth_fail_t *emm_cn_auth_fail); -int nas_proc_deregister_ue(UInt32_t ue_id); -int nas_proc_pdn_connectivity_res(nas_pdn_connectivity_rsp_t *nas_pdn_connectivity_rsp); -int nas_proc_pdn_connectivity_fail(nas_pdn_connectivity_fail_t *nas_pdn_connectivity_fail); -#endif #endif /* __NAS_PROC_H__*/ diff --git a/openair-cn/NAS/nas_ue_task.c b/openair-cn/NAS/UE/nas_ue_task.c similarity index 99% rename from openair-cn/NAS/nas_ue_task.c rename to openair-cn/NAS/UE/nas_ue_task.c index ef9b7af02a..48c15a4835 100644 --- a/openair-cn/NAS/nas_ue_task.c +++ b/openair-cn/NAS/UE/nas_ue_task.c @@ -36,6 +36,7 @@ # include "user_api.h" # include "nas_parser.h" # include "nas_proc.h" +# include "msc.h" # define NAS_UE_AUTOSTART 1 @@ -76,7 +77,7 @@ void *nas_ue_task(void *args_p) int result; itti_mark_task_ready (TASK_NAS_UE); - + MSC_START_USE(); /* Initialize UE NAS (EURECOM-NAS) */ { /* Initialize user interface (to exchange AT commands with user process) */ diff --git a/openair-cn/NAS/EURECOM-NAS/src/nas_user.c b/openair-cn/NAS/UE/nas_user.c similarity index 99% rename from openair-cn/NAS/EURECOM-NAS/src/nas_user.c rename to openair-cn/NAS/UE/nas_user.c index 37e55c7e7f..4abb2f4040 100644 --- a/openair-cn/NAS/EURECOM-NAS/src/nas_user.c +++ b/openair-cn/NAS/UE/nas_user.c @@ -43,7 +43,6 @@ Description NAS procedure functions triggered by the user *****************************************************************************/ -#ifdef NAS_UE #include "nas_user.h" #include "userDef.h" @@ -2676,4 +2675,3 @@ static int _nas_user_proc_clac(const at_command_t *data) LOG_FUNC_RETURN (ret_code); } -#endif // NAS_UE diff --git a/openair-cn/NAS/EURECOM-NAS/src/nas_user.h b/openair-cn/NAS/UE/nas_user.h similarity index 100% rename from openair-cn/NAS/EURECOM-NAS/src/nas_user.h rename to openair-cn/NAS/UE/nas_user.h diff --git a/openair-cn/OAISIM_MME/oaisim_mme.c b/openair-cn/OAISIM_MME/oaisim_mme.c index c2fd062598..14a9871e58 100644 --- a/openair-cn/OAISIM_MME/oaisim_mme.c +++ b/openair-cn/OAISIM_MME/oaisim_mme.c @@ -48,7 +48,6 @@ #include "log.h" #include "timer.h" #include "sgw_lite_defs.h" -#include "sgi.h" #include "mme_app_extern.h" #include "nas_defs.h" #include "s11_mme.h" @@ -74,12 +73,10 @@ int main(int argc, char *argv[]) CHECK_INIT_RETURN(udp_init(&mme_config)); CHECK_INIT_RETURN(s11_mme_init(&mme_config)); CHECK_INIT_RETURN(s1ap_mme_init(&mme_config)); - // if (sgi_init(&mme_config) < 0) return -1; // if (gtpv1u_init(&mme_config) < 0) return -1; CHECK_INIT_RETURN(mme_app_init(&mme_config)); CHECK_INIT_RETURN(s6a_init(&mme_config)); - // if (sgw_lite_init(&mme_config) < 0) return -1; /* Handle signals here */ itti_wait_tasks_end(); diff --git a/openair-cn/OAI_EPC/oai_epc.c b/openair-cn/OAI_EPC/oai_epc.c index 66eadb9d8c..f2fe6776be 100644 --- a/openair-cn/OAI_EPC/oai_epc.c +++ b/openair-cn/OAI_EPC/oai_epc.c @@ -55,7 +55,6 @@ #include "log.h" #include "timer.h" #include "sgw_lite_defs.h" -#include "sgi.h" #include "mme_app_extern.h" #include "nas_defs.h" @@ -65,18 +64,20 @@ #include "s6a_defs.h" #include "oai_epc.h" +#include "msc.h" int main(int argc, char *argv[]) { - /* Parse the command line for options and set the mme_config accordingly. */ - CHECK_INIT_RETURN(config_parse_opt_line(argc, argv, &mme_config) < 0); - /* Calling each layer init function */ - CHECK_INIT_RETURN(log_init(&mme_config, oai_epc_log_specific)); CHECK_INIT_RETURN(itti_init(TASK_MAX, THREAD_MAX, MESSAGES_ID_MAX, tasks_info, messages_info, messages_definition_xml, mme_config.itti_config.log_file)); + /* Parse the command line for options and set the mme_config accordingly. */ + CHECK_INIT_RETURN(config_parse_opt_line(argc, argv, &mme_config) < 0); + MSC_INIT(MSC_MME_GW, THREAD_MAX+TASK_MAX); + /* Calling each layer init function */ + CHECK_INIT_RETURN(log_init(&mme_config, oai_epc_log_specific)); CHECK_INIT_RETURN(nas_init(&mme_config)); CHECK_INIT_RETURN(sctp_init(&mme_config)); CHECK_INIT_RETURN(udp_init(&mme_config)); @@ -85,9 +86,6 @@ int main(int argc, char *argv[]) CHECK_INIT_RETURN(mme_app_init(&mme_config)); CHECK_INIT_RETURN(s6a_init(&mme_config)); CHECK_INIT_RETURN(sgw_lite_init(mme_config.config_file)); -#if ! defined(ENABLE_USE_GTPU_IN_KERNEL) - CHECK_INIT_RETURN(sgi_init(&spgw_config.pgw_config)); -#endif /* Handle signals here */ itti_wait_tasks_end(); diff --git a/openair-cn/OAI_SGW/oai_sgw.c b/openair-cn/OAI_SGW/oai_sgw.c index a70f839a1c..902c4c24c1 100644 --- a/openair-cn/OAI_SGW/oai_sgw.c +++ b/openair-cn/OAI_SGW/oai_sgw.c @@ -54,7 +54,6 @@ #include "s11_sgw.h" #include "sgw_lite_defs.h" #include "gtpv1u_sgw_defs.h" -#include "sgi.h" #include "oai_sgw.h" @@ -70,7 +69,6 @@ int main(int argc, char *argv[]) CHECK_INIT_RETURN(udp_init(&mme_config)); CHECK_INIT_RETURN(s11_sgw_init(&mme_config)); CHECK_INIT_RETURN(gtpv1u_init(&mme_config)); - CHECK_INIT_RETURN(sgi_init(&pgw_config)); CHECK_INIT_RETURN(sgw_lite_init(mme_config.config_file)); diff --git a/openair-cn/OPENAIRHSS/db/db_connector.c b/openair-cn/OPENAIRHSS/db/db_connector.c index 6585036b04..f96032896a 100644 --- a/openair-cn/OPENAIRHSS/db/db_connector.c +++ b/openair-cn/OPENAIRHSS/db/db_connector.c @@ -394,7 +394,8 @@ int hss_mysql_push_rand_sqn(const char *imsi, uint8_t *rand_p, uint8_t *sqn) } sqn_decimal = ((uint64_t)sqn[0] << 40) | ((uint64_t)sqn[1] << 32) | - (sqn[2] << 24) | (sqn[3] << 16) | (sqn[4] << 8) | sqn[5]; + ((uint64_t)sqn[2] << 24) | (sqn[3] << 16) | + (sqn[4] << 8) | sqn[5]; query_length = sprintf(query, "UPDATE `users` SET `rand`=UNHEX('"); diff --git a/openair-cn/S11/s11_common.c b/openair-cn/S11/s11_common.c index 58d80e1bd2..b24e82b586 100644 --- a/openair-cn/S11/s11_common.c +++ b/openair-cn/S11/s11_common.c @@ -34,10 +34,10 @@ #include "s11_common.h" -NwRcT s11_ie_indication_generic(NwU8T ieType, - NwU8T ieLength, - NwU8T ieInstance, - NwU8T *ieValue, +NwRcT s11_ie_indication_generic(uint8_t ieType, + uint8_t ieLength, + uint8_t ieInstance, + uint8_t *ieValue, void *arg) { S11_DEBUG("Received IE Parse Indication for of type %u, length %u, " diff --git a/openair-cn/S11/s11_common.h b/openair-cn/S11/s11_common.h index 0712a4a4d2..a1f59006b2 100644 --- a/openair-cn/S11/s11_common.h +++ b/openair-cn/S11/s11_common.h @@ -34,10 +34,10 @@ #define S11_WARN(x, args...) fprintf(stdout, "[S11] [W]"x, ##args) #define S11_ERROR(x, args...) fprintf(stderr, "[S11] [E]"x, ##args) -NwRcT s11_ie_indication_generic(NwU8T ieType, - NwU8T ieLength, - NwU8T ieInstance, - NwU8T *ieValue, +NwRcT s11_ie_indication_generic(uint8_t ieType, + uint8_t ieLength, + uint8_t ieInstance, + uint8_t *ieValue, void *arg); #endif /* S11_COMMON_H_ */ diff --git a/openair-cn/S11/s11_ie_formatter.c b/openair-cn/S11/s11_ie_formatter.c index 9381efa5a9..1b3f85acf4 100644 --- a/openair-cn/S11/s11_ie_formatter.c +++ b/openair-cn/S11/s11_ie_formatter.c @@ -45,7 +45,7 @@ #include "s11_ie_formatter.h" NwRcT s11_imsi_ie_get( - NwU8T ieType, NwU8T ieLength, NwU8T ieInstance, NwU8T *ieValue, void *arg) + uint8_t ieType, uint8_t ieLength, uint8_t ieInstance, uint8_t *ieValue, void *arg) { Imsi_t *imsi; uint8_t i; @@ -108,7 +108,7 @@ int s11_imsi_ie_set(NwGtpv2cMsgHandleT *msg, const Imsi_t *imsi) } NwRcT s11_msisdn_ie_get( - NwU8T ieType, NwU8T ieLength, NwU8T ieInstance, NwU8T *ieValue, void *arg) + uint8_t ieType, uint8_t ieLength, uint8_t ieInstance, uint8_t *ieValue, void *arg) { Msisdn_t *msisdn; uint8_t i; @@ -143,7 +143,7 @@ NwRcT s11_msisdn_ie_get( } NwRcT s11_mei_ie_get( - NwU8T ieType, NwU8T ieLength, NwU8T ieInstance, NwU8T *ieValue, void *arg) + uint8_t ieType, uint8_t ieLength, uint8_t ieInstance, uint8_t *ieValue, void *arg) { Mei_t *mei = (Mei_t *)arg; @@ -155,7 +155,7 @@ NwRcT s11_mei_ie_get( } NwRcT s11_pdn_type_ie_get( - NwU8T ieType, NwU8T ieLength, NwU8T ieInstance, NwU8T *ieValue, void *arg) + uint8_t ieType, uint8_t ieLength, uint8_t ieInstance, uint8_t *ieValue, void *arg) { pdn_type_t *pdn_type = (pdn_type_t *)arg; @@ -207,14 +207,14 @@ int s11_pdn_type_ie_set(NwGtpv2cMsgHandleT *msg, const pdn_type_t *pdn_type) return -1; } - rc = nwGtpv2cMsgAddIe(*msg, NW_GTPV2C_IE_PDN_TYPE, 1, 0, (NwU8T*)&value); + rc = nwGtpv2cMsgAddIe(*msg, NW_GTPV2C_IE_PDN_TYPE, 1, 0, (uint8_t*)&value); DevAssert(NW_OK == rc); return 0; } NwRcT s11_rat_type_ie_get( - NwU8T ieType, NwU8T ieLength, NwU8T ieInstance, NwU8T *ieValue, void *arg) + uint8_t ieType, uint8_t ieLength, uint8_t ieInstance, uint8_t *ieValue, void *arg) { rat_type_t *rat_type = (rat_type_t *)arg; @@ -295,7 +295,7 @@ int s11_rat_type_ie_set(NwGtpv2cMsgHandleT *msg, const rat_type_t *rat_type) return -1; } - rc = nwGtpv2cMsgAddIe(*msg, NW_GTPV2C_IE_RAT_TYPE, 1, 0, (NwU8T*)&value); + rc = nwGtpv2cMsgAddIe(*msg, NW_GTPV2C_IE_RAT_TYPE, 1, 0, (uint8_t*)&value); DevAssert(NW_OK == rc); return 0; @@ -316,7 +316,7 @@ int s11_ebi_ie_set(NwGtpv2cMsgHandleT *msg, const unsigned ebi) } NwRcT s11_ebi_ie_get( - NwU8T ieType, NwU8T ieLength, NwU8T ieInstance, NwU8T *ieValue, void *arg) + uint8_t ieType, uint8_t ieLength, uint8_t ieInstance, uint8_t *ieValue, void *arg) { uint8_t *ebi = (uint8_t *)arg; @@ -330,7 +330,7 @@ NwRcT s11_ebi_ie_get( } NwRcT s11_cause_ie_get( - NwU8T ieType, NwU8T ieLength, NwU8T ieInstance, NwU8T *ieValue, void *arg) + uint8_t ieType, uint8_t ieLength, uint8_t ieInstance, uint8_t *ieValue, void *arg) { SGWCause_t *cause = (SGWCause_t *)arg; @@ -371,7 +371,7 @@ int s11_cause_ie_set(NwGtpv2cMsgHandleT *msg, } NwRcT s11_bearer_context_ie_get( - NwU8T ieType, NwU8T ieLength, NwU8T ieInstance, NwU8T *ieValue, void *arg) + uint8_t ieType, uint8_t ieLength, uint8_t ieInstance, uint8_t *ieValue, void *arg) { bearer_to_create_t *bearer_to_create = (bearer_to_create_t *)arg; uint8_t read = 0; @@ -428,7 +428,7 @@ int s11_bearer_context_to_create_ie_set( } NwRcT s11_bearer_context_to_modifiy_ie_get( - NwU8T ieType, NwU8T ieLength, NwU8T ieInstance, NwU8T *ieValue, void *arg) + uint8_t ieType, uint8_t ieLength, uint8_t ieInstance, uint8_t *ieValue, void *arg) { bearer_context_to_modify_t *bearer_to_modify = (bearer_context_to_modify_t *)arg; uint8_t read = 0; @@ -467,7 +467,7 @@ NwRcT s11_bearer_context_to_modifiy_ie_get( } NwRcT s11_bearer_context_created_ie_get( - NwU8T ieType, NwU8T ieLength, NwU8T ieInstance, NwU8T *ieValue, void *arg) + uint8_t ieType, uint8_t ieLength, uint8_t ieInstance, uint8_t *ieValue, void *arg) { bearer_context_created_t *bearer_created = (bearer_context_created_t *)arg; uint8_t read = 0; @@ -534,7 +534,7 @@ int s11_bearer_context_created_ie_set( bearer->s1u_sgw_fteid.interface_type, bearer->s1u_sgw_fteid.teid, bearer->s1u_sgw_fteid.ipv4 ? htonl(bearer->s1u_sgw_fteid.ipv4_address) : 0, - bearer->s1u_sgw_fteid.ipv6 ? (NwU8T*)bearer->s1u_sgw_fteid.ipv6_address : NULL); + bearer->s1u_sgw_fteid.ipv6 ? (uint8_t*)bearer->s1u_sgw_fteid.ipv6_address : NULL); DevAssert(NW_OK == rc); /* End section for grouped IE: bearer context created */ @@ -558,14 +558,14 @@ int s11_apn_restriction_ie_set( DevAssert(msg != NULL); rc = nwGtpv2cMsgAddIe(*msg, NW_GTPV2C_IE_APN_RESTRICTION, 1, 0, - (NwU8T *)&apn_restriction); + (uint8_t *)&apn_restriction); DevAssert(NW_OK == rc); return 0; } NwRcT s11_serving_network_ie_get( - NwU8T ieType, NwU8T ieLength, NwU8T ieInstance, NwU8T *ieValue, void *arg) + uint8_t ieType, uint8_t ieLength, uint8_t ieInstance, uint8_t *ieValue, void *arg) { ServingNetwork_t *serving_net = (ServingNetwork_t *)arg; @@ -628,7 +628,7 @@ int s11_serving_network_ie_set( } NwRcT s11_fteid_ie_get( - NwU8T ieType, NwU8T ieLength, NwU8T ieInstance, NwU8T *ieValue, void *arg) + uint8_t ieType, uint8_t ieLength, uint8_t ieInstance, uint8_t *ieValue, void *arg) { uint8_t offset = 0; FTeid_t *fteid = (FTeid_t *)arg; @@ -670,7 +670,7 @@ NwRcT s11_fteid_ie_get( } NwRcT s11_paa_ie_get( - NwU8T ieType, NwU8T ieLength, NwU8T ieInstance, NwU8T *ieValue, void *arg) + uint8_t ieType, uint8_t ieLength, uint8_t ieInstance, uint8_t *ieValue, void *arg) { uint8_t offset = 0; PAA_t *paa = (PAA_t *)arg; @@ -756,7 +756,7 @@ int s11_paa_ie_set(NwGtpv2cMsgHandleT *msg, const PAA_t *paa) * and the hyphen (-). */ NwRcT s11_apn_ie_get( - NwU8T ieType, NwU8T ieLength, NwU8T ieInstance, NwU8T *ieValue, void *arg) + uint8_t ieType, uint8_t ieLength, uint8_t ieInstance, uint8_t *ieValue, void *arg) { uint8_t read = 1; uint8_t word_length; @@ -831,7 +831,7 @@ int s11_apn_ie_set(NwGtpv2cMsgHandleT *msg, const char *apn) } NwRcT s11_ambr_ie_get( - NwU8T ieType, NwU8T ieLength, NwU8T ieInstance, NwU8T *ieValue, void *arg) + uint8_t ieType, uint8_t ieLength, uint8_t ieInstance, uint8_t *ieValue, void *arg) { ambr_t *ambr = (ambr_t *)arg; @@ -847,7 +847,7 @@ NwRcT s11_ambr_ie_get( } NwRcT s11_uli_ie_get( - NwU8T ieType, NwU8T ieLength, NwU8T ieInstance, NwU8T *ieValue, void *arg) + uint8_t ieType, uint8_t ieLength, uint8_t ieInstance, uint8_t *ieValue, void *arg) { Uli_t *uli = (Uli_t *)arg; @@ -886,7 +886,7 @@ int s11_bearer_qos_ie_set(NwGtpv2cMsgHandleT *msg, const BearerQOS_t *bearer_qos } NwRcT s11_ip_address_ie_get( - NwU8T ieType, NwU8T ieLength, NwU8T ieInstance, NwU8T *ieValue, void *arg) + uint8_t ieType, uint8_t ieLength, uint8_t ieInstance, uint8_t *ieValue, void *arg) { gtp_ip_address_t *ip_address = (gtp_ip_address_t *)arg; @@ -915,7 +915,7 @@ int s11_ip_address_ie_set(NwGtpv2cMsgHandleT *msg, } NwRcT s11_delay_value_ie_get( - NwU8T ieType, NwU8T ieLength, NwU8T ieInstance, NwU8T *ieValue, void *arg) + uint8_t ieType, uint8_t ieLength, uint8_t ieInstance, uint8_t *ieValue, void *arg) { DelayValue_t *delay_value = (DelayValue_t *)arg; @@ -943,14 +943,14 @@ int s11_delay_value_ie_set(NwGtpv2cMsgHandleT *msg, value = *delay_value; - rc = nwGtpv2cMsgAddIe(*msg, NW_GTPV2C_IE_DELAY_VALUE, 1, 0, (NwU8T*)&value); + rc = nwGtpv2cMsgAddIe(*msg, NW_GTPV2C_IE_DELAY_VALUE, 1, 0, (uint8_t*)&value); DevAssert(NW_OK == rc); return 0; } NwRcT s11_ue_time_zone_ie_get( - NwU8T ieType, NwU8T ieLength, NwU8T ieInstance, NwU8T *ieValue, void *arg) + uint8_t ieType, uint8_t ieLength, uint8_t ieInstance, uint8_t *ieValue, void *arg) { UETimeZone_t *ue_time_zone = (UETimeZone_t *)arg; @@ -988,7 +988,7 @@ int s11_ue_time_zone_ie_set(NwGtpv2cMsgHandleT *msg, } NwRcT s11_target_identification_ie_get( - NwU8T ieType, NwU8T ieLength, NwU8T ieInstance, NwU8T *ieValue, void *arg) + uint8_t ieType, uint8_t ieLength, uint8_t ieInstance, uint8_t *ieValue, void *arg) { target_identification_t *target_identification = (target_identification_t *)arg; @@ -1055,7 +1055,7 @@ NwRcT s11_target_identification_ie_get( } NwRcT s11_bearer_flags_ie_get( - NwU8T ieType, NwU8T ieLength, NwU8T ieInstance, NwU8T *ieValue, void *arg) + uint8_t ieType, uint8_t ieLength, uint8_t ieInstance, uint8_t *ieValue, void *arg) { bearer_flags_t *bearer_flags = (bearer_flags_t *)arg; @@ -1082,14 +1082,14 @@ int s11_bearer_flags_ie_set(NwGtpv2cMsgHandleT *msg, value = (bearer_flags->vb << 1) | bearer_flags->ppc; - rc = nwGtpv2cMsgAddIe(*msg, NW_GTPV2C_IE_BEARER_FLAGS, 1, 0, (NwU8T*)&value); + rc = nwGtpv2cMsgAddIe(*msg, NW_GTPV2C_IE_BEARER_FLAGS, 1, 0, (uint8_t*)&value); DevAssert(NW_OK == rc); return 0; } NwRcT s11_indication_flags_ie_get( - NwU8T ieType, NwU8T ieLength, NwU8T ieInstance, NwU8T *ieValue, void *arg) + uint8_t ieType, uint8_t ieLength, uint8_t ieInstance, uint8_t *ieValue, void *arg) { indication_flags_t *indication_flags = (indication_flags_t*)arg; @@ -1107,7 +1107,7 @@ NwRcT s11_indication_flags_ie_get( } NwRcT s11_fqcsid_ie_get( - NwU8T ieType, NwU8T ieLength, NwU8T ieInstance, NwU8T *ieValue, void *arg) + uint8_t ieType, uint8_t ieLength, uint8_t ieInstance, uint8_t *ieValue, void *arg) { FQ_CSID_t *fq_csid = (FQ_CSID_t *)arg; diff --git a/openair-cn/S11/s11_ie_formatter.h b/openair-cn/S11/s11_ie_formatter.h index 2b2ecb4732..0d820b3462 100644 --- a/openair-cn/S11/s11_ie_formatter.h +++ b/openair-cn/S11/s11_ie_formatter.h @@ -37,12 +37,12 @@ * octet n+4 | Number digit m | Number digit m-1 | */ NwRcT s11_imsi_ie_get( - NwU8T ieType, NwU8T ieLength, NwU8T ieInstance, NwU8T *ieValue, void *arg); + uint8_t ieType, uint8_t ieLength, uint8_t ieInstance, uint8_t *ieValue, void *arg); int s11_imsi_ie_set(NwGtpv2cMsgHandleT *msg, const Imsi_t *imsi); NwRcT s11_msisdn_ie_get( - NwU8T ieType, NwU8T ieLength, NwU8T ieInstance, NwU8T *ieValue, void *arg); + uint8_t ieType, uint8_t ieLength, uint8_t ieInstance, uint8_t *ieValue, void *arg); /* PDN Type Information Element * 3GPP TS 29.274 #8.34 @@ -52,7 +52,7 @@ NwRcT s11_msisdn_ie_get( * * 3 = IPv4v6 */ NwRcT s11_pdn_type_ie_get( - NwU8T ieType, NwU8T ieLength, NwU8T ieInstance, NwU8T *ieValue, void *arg); + uint8_t ieType, uint8_t ieLength, uint8_t ieInstance, uint8_t *ieValue, void *arg); int s11_pdn_type_ie_set(NwGtpv2cMsgHandleT *msg, const pdn_type_t *pdn_type); @@ -61,7 +61,7 @@ int s11_pdn_type_ie_set(NwGtpv2cMsgHandleT *msg, const pdn_type_t *pdn_type); * for S11 interface defined in 3GPP TS 29.274 #8.17. */ NwRcT s11_rat_type_ie_get( - NwU8T ieType, NwU8T ieLength, NwU8T ieInstance, NwU8T *ieValue, void *arg); + uint8_t ieType, uint8_t ieLength, uint8_t ieInstance, uint8_t *ieValue, void *arg); int s11_rat_type_ie_set(NwGtpv2cMsgHandleT *msg, const rat_type_t *rat_type); @@ -69,7 +69,7 @@ int s11_rat_type_ie_set(NwGtpv2cMsgHandleT *msg, const rat_type_t *rat_type); * 3GPP TS 29.274 #8.8 */ NwRcT s11_ebi_ie_get( - NwU8T ieType, NwU8T ieLength, NwU8T ieInstance, NwU8T *ieValue, void *arg); + uint8_t ieType, uint8_t ieLength, uint8_t ieInstance, uint8_t *ieValue, void *arg); int s11_ebi_ie_set(NwGtpv2cMsgHandleT *msg, const unsigned ebi); @@ -77,13 +77,13 @@ int s11_ebi_ie_set(NwGtpv2cMsgHandleT *msg, const unsigned ebi); * 3GPP TS 29.274 Table 7.2.1-2. */ NwRcT s11_bearer_context_ie_get( - NwU8T ieType, NwU8T ieLength, NwU8T ieInstance, NwU8T *ieValue, void *arg); + uint8_t ieType, uint8_t ieLength, uint8_t ieInstance, uint8_t *ieValue, void *arg); int s11_bearer_context_to_create_ie_set( NwGtpv2cMsgHandleT *msg, const bearer_to_create_t *bearer_to_create); NwRcT s11_bearer_context_to_modifiy_ie_get( - NwU8T ieType, NwU8T ieLength, NwU8T ieInstance, NwU8T *ieValue, void *arg); + uint8_t ieType, uint8_t ieLength, uint8_t ieInstance, uint8_t *ieValue, void *arg); /* EPS Bearer Id Information Element * 3GPP TS 29.274 #8.8 @@ -93,14 +93,14 @@ int s11_ebi_ie_set(NwGtpv2cMsgHandleT *msg, const unsigned ebi); /* Cause Information Element */ NwRcT s11_cause_ie_get( - NwU8T ieType, NwU8T ieLength, NwU8T ieInstance, NwU8T *ieValue, void *arg); + uint8_t ieType, uint8_t ieLength, uint8_t ieInstance, uint8_t *ieValue, void *arg); int s11_cause_ie_set(NwGtpv2cMsgHandleT *msg, const gtp_cause_t *cause); /* Bearer Context Created grouped Information Element */ NwRcT s11_bearer_context_created_ie_get( - NwU8T ieType, NwU8T ieLength, NwU8T ieInstance, NwU8T *ieValue, void *arg); + uint8_t ieType, uint8_t ieLength, uint8_t ieInstance, uint8_t *ieValue, void *arg); int s11_bearer_context_created_ie_set( NwGtpv2cMsgHandleT *msg, const bearer_context_created_t *bearer); @@ -109,18 +109,18 @@ int s11_bearer_context_created_ie_set( * 3GPP TS 29.274 #8.18 */ NwRcT s11_serving_network_ie_get( - NwU8T ieType, NwU8T ieLength, NwU8T ieInstance, NwU8T *ieValue, void *arg); + uint8_t ieType, uint8_t ieLength, uint8_t ieInstance, uint8_t *ieValue, void *arg); int s11_serving_network_ie_set( NwGtpv2cMsgHandleT *msg, const ServingNetwork_t *serving_network); NwRcT s11_fteid_ie_get( - NwU8T ieType, NwU8T ieLength, NwU8T ieInstance, NwU8T *ieValue, void *arg); + uint8_t ieType, uint8_t ieLength, uint8_t ieInstance, uint8_t *ieValue, void *arg); /* PDN Address Allocation Information Element */ NwRcT s11_paa_ie_get( - NwU8T ieType, NwU8T ieLength, NwU8T ieInstance, NwU8T *ieValue, void *arg); + uint8_t ieType, uint8_t ieLength, uint8_t ieInstance, uint8_t *ieValue, void *arg); int s11_paa_ie_set(NwGtpv2cMsgHandleT *msg, const PAA_t *paa); @@ -131,18 +131,18 @@ int s11_paa_ie_set(NwGtpv2cMsgHandleT *msg, const PAA_t *paa); * The encoding of the APN field follows 3GPP TS 23.003 subclause 9.1 */ NwRcT s11_apn_ie_get( - NwU8T ieType, NwU8T ieLength, NwU8T ieInstance, NwU8T *ieValue, void *arg); + uint8_t ieType, uint8_t ieLength, uint8_t ieInstance, uint8_t *ieValue, void *arg); int s11_apn_ie_set(NwGtpv2cMsgHandleT *msg, const char *apn); NwRcT s11_ambr_ie_get( - NwU8T ieType, NwU8T ieLength, NwU8T ieInstance, NwU8T *ieValue, void *arg); + uint8_t ieType, uint8_t ieLength, uint8_t ieInstance, uint8_t *ieValue, void *arg); NwRcT s11_mei_ie_get( - NwU8T ieType, NwU8T ieLength, NwU8T ieInstance, NwU8T *ieValue, void *arg); + uint8_t ieType, uint8_t ieLength, uint8_t ieInstance, uint8_t *ieValue, void *arg); NwRcT s11_uli_ie_get( - NwU8T ieType, NwU8T ieLength, NwU8T ieInstance, NwU8T *ieValue, void *arg); + uint8_t ieType, uint8_t ieLength, uint8_t ieInstance, uint8_t *ieValue, void *arg); /* APN restrtiction Information Element */ int s11_apn_restriction_ie_set( @@ -157,7 +157,7 @@ int s11_bearer_qos_ie_set(NwGtpv2cMsgHandleT *msg, const BearerQOS_t *bearer_qos * 3GPP TS 29.274 #8.9 */ NwRcT s11_ip_address_ie_get( - NwU8T ieType, NwU8T ieLength, NwU8T ieInstance, NwU8T *ieValue, void *arg); + uint8_t ieType, uint8_t ieLength, uint8_t ieInstance, uint8_t *ieValue, void *arg); int s11_ip_address_ie_set(NwGtpv2cMsgHandleT *msg, const gtp_ip_address_t *ip_address); @@ -166,7 +166,7 @@ int s11_ip_address_ie_set(NwGtpv2cMsgHandleT *msg, * 3GPP TS 29.274 #8.27 */ NwRcT s11_delay_value_ie_get( - NwU8T ieType, NwU8T ieLength, NwU8T ieInstance, NwU8T *ieValue, void *arg); + uint8_t ieType, uint8_t ieLength, uint8_t ieInstance, uint8_t *ieValue, void *arg); int s11_delay_value_ie_set(NwGtpv2cMsgHandleT *msg, const DelayValue_t *delay_value); @@ -175,7 +175,7 @@ int s11_delay_value_ie_set(NwGtpv2cMsgHandleT *msg, * 3GPP TS 29.274 #8.44 */ NwRcT s11_ue_time_zone_ie_get( - NwU8T ieType, NwU8T ieLength, NwU8T ieInstance, NwU8T *ieValue, void *arg); + uint8_t ieType, uint8_t ieLength, uint8_t ieInstance, uint8_t *ieValue, void *arg); int s11_ue_time_zone_ie_set(NwGtpv2cMsgHandleT *msg, const UETimeZone_t *ue_time_zone); @@ -184,25 +184,25 @@ int s11_ue_time_zone_ie_set(NwGtpv2cMsgHandleT *msg, * 3GPP TS 29.274 #8.51 */ NwRcT s11_target_identification_ie_get( - NwU8T ieType, NwU8T ieLength, NwU8T ieInstance, NwU8T *ieValue, void *arg); + uint8_t ieType, uint8_t ieLength, uint8_t ieInstance, uint8_t *ieValue, void *arg); /* Bearer Flags Information Element * 3GPP TS 29.274 #8.32 */ NwRcT s11_bearer_flags_ie_get( - NwU8T ieType, NwU8T ieLength, NwU8T ieInstance, NwU8T *ieValue, void *arg); + uint8_t ieType, uint8_t ieLength, uint8_t ieInstance, uint8_t *ieValue, void *arg); int s11_bearer_flags_ie_set(NwGtpv2cMsgHandleT *msg, const bearer_flags_t *bearer_flags); NwRcT s11_indication_flags_ie_get( - NwU8T ieType, NwU8T ieLength, NwU8T ieInstance, NwU8T *ieValue, void *arg); + uint8_t ieType, uint8_t ieLength, uint8_t ieInstance, uint8_t *ieValue, void *arg); /* FQ-CSID Information Element * 3GPP TS 29.274 #8.62 */ NwRcT s11_fqcsid_ie_get( - NwU8T ieType, NwU8T ieLength, NwU8T ieInstance, NwU8T *ieValue, void *arg); + uint8_t ieType, uint8_t ieLength, uint8_t ieInstance, uint8_t *ieValue, void *arg); #endif /* S11_IE_FORMATTER_H_ */ diff --git a/openair-cn/S11/s11_mme_session_manager.c b/openair-cn/S11/s11_mme_session_manager.c index d0fe543a8c..5adf2c492b 100644 --- a/openair-cn/S11/s11_mme_session_manager.c +++ b/openair-cn/S11/s11_mme_session_manager.c @@ -70,7 +70,7 @@ int s11_mme_create_session_request(NwGtpv2cStackHandleT *stack_p, /* Add recovery if contacting the peer for the first time */ rc = nwGtpv2cMsgAddIe((ulp_req.hMsg), NW_GTPV2C_IE_RECOVERY, 1, 0, - (NwU8T*)&restart_counter); + (uint8_t*)&restart_counter); DevAssert(NW_OK == rc); /* Putting the information Elements */ @@ -114,8 +114,8 @@ int s11_mme_handle_create_session_response(NwGtpv2cStackHandleT *stack_p, NwGtpv2cUlpApiT *pUlpApi) { NwRcT rc = NW_OK; - NwU8T offendingIeType, offendingIeInstance; - NwU16T offendingIeLength; + uint8_t offendingIeType, offendingIeInstance; + uint16_t offendingIeLength; SgwCreateSessionResponse *create_session_resp_p; MessageDef *message_p; diff --git a/openair-cn/S11/s11_mme_task.c b/openair-cn/S11/s11_mme_task.c index fad5aecda7..d2a52aff96 100644 --- a/openair-cn/S11/s11_mme_task.c +++ b/openair-cn/S11/s11_mme_task.c @@ -55,9 +55,9 @@ static NwGtpv2cStackHandleT s11_mme_stack_handle; static NwRcT s11_mme_log_wrapper(NwGtpv2cLogMgrHandleT hLogMgr, - NwU32T logLevel, + uint32_t logLevel, NwCharT* file, - NwU32T line, + uint32_t line, NwCharT* logStr) { S11_DEBUG("%s\n", logStr); @@ -101,10 +101,10 @@ NwRcT s11_mme_ulp_process_stack_req_cb( static NwRcT s11_mme_send_udp_msg( NwGtpv2cUdpHandleT udpHandle, - NwU8T *buffer, - NwU32T buffer_len, - NwU32T peerIpAddr, - NwU32T peerPort) + uint8_t *buffer, + uint32_t buffer_len, + uint32_t peerIpAddr, + uint32_t peerPort) { // Create and alloc new message MessageDef *message_p; @@ -128,9 +128,9 @@ NwRcT s11_mme_send_udp_msg( static NwRcT s11_mme_start_timer_wrapper( NwGtpv2cTimerMgrHandleT tmrMgrHandle, - NwU32T timeoutSec, - NwU32T timeoutUsec, - NwU32T tmrType, + uint32_t timeoutSec, + uint32_t timeoutUsec, + uint32_t tmrType, void *timeoutArg, NwGtpv2cTimerHandleT *hTmr) { diff --git a/openair-cn/S11/s11_sgw.c b/openair-cn/S11/s11_sgw.c index a2f86ddabb..ae62a1334a 100644 --- a/openair-cn/S11/s11_sgw.c +++ b/openair-cn/S11/s11_sgw.c @@ -104,10 +104,10 @@ NwRcT s11_sgw_ulp_process_stack_req_cb( static NwRcT s11_sgw_send_udp_msg( NwGtpv2cUdpHandleT udpHandle, - NwU8T *buffer, - NwU32T buffer_len, - NwU32T peerIpAddr, - NwU32T peerPort) + uint8_t *buffer, + uint32_t buffer_len, + uint32_t peerIpAddr, + uint32_t peerPort) { // Create and alloc new message MessageDef *message_p; @@ -130,9 +130,9 @@ NwRcT s11_sgw_send_udp_msg( static NwRcT s11_sgw_log_wrapper(NwGtpv2cLogMgrHandleT hLogMgr, - NwU32T logLevel, + uint32_t logLevel, NwCharT* file, - NwU32T line, + uint32_t line, NwCharT* logStr) { S11_DEBUG("%s\n", logStr); @@ -142,9 +142,9 @@ NwRcT s11_sgw_log_wrapper(NwGtpv2cLogMgrHandleT hLogMgr, static NwRcT s11_sgw_start_timer_wrapper( NwGtpv2cTimerMgrHandleT tmrMgrHandle, - NwU32T timeoutSec, - NwU32T timeoutUsec, - NwU32T tmrType, + uint32_t timeoutSec, + uint32_t timeoutUsec, + uint32_t tmrType, void *timeoutArg, NwGtpv2cTimerHandleT *hTmr) { diff --git a/openair-cn/S11/s11_sgw_bearer_manager.c b/openair-cn/S11/s11_sgw_bearer_manager.c index bf0be507cc..27337a25f3 100644 --- a/openair-cn/S11/s11_sgw_bearer_manager.c +++ b/openair-cn/S11/s11_sgw_bearer_manager.c @@ -50,8 +50,8 @@ int s11_sgw_handle_modify_bearer_request(NwGtpv2cStackHandleT *stack_p, NwGtpv2cUlpApiT *pUlpApi) { NwRcT rc = NW_OK; - NwU8T offendingIeType, offendingIeInstance; - NwU16T offendingIeLength; + uint8_t offendingIeType, offendingIeInstance; + uint16_t offendingIeLength; SgwModifyBearerRequest *modify_bearer_request_p; MessageDef *message_p; diff --git a/openair-cn/S11/s11_sgw_session_manager.c b/openair-cn/S11/s11_sgw_session_manager.c index 13440645fd..dc313c7935 100644 --- a/openair-cn/S11/s11_sgw_session_manager.c +++ b/openair-cn/S11/s11_sgw_session_manager.c @@ -50,8 +50,8 @@ int s11_sgw_handle_create_session_request(NwGtpv2cStackHandleT *stack_p, NwGtpv2cUlpApiT *pUlpApi) { NwRcT rc = NW_OK; - NwU8T offendingIeType, offendingIeInstance; - NwU16T offendingIeLength; + uint8_t offendingIeType, offendingIeInstance; + uint16_t offendingIeLength; SgwCreateSessionRequest *create_session_request_p; MessageDef *message_p; @@ -352,8 +352,8 @@ int s11_sgw_handle_delete_session_request(NwGtpv2cStackHandleT *stack_p, NwGtpv2cUlpApiT *pUlpApi) { NwRcT rc = NW_OK; - NwU8T offendingIeType, offendingIeInstance; - NwU16T offendingIeLength; + uint8_t offendingIeType, offendingIeInstance; + uint16_t offendingIeLength; SgwDeleteSessionRequest *delete_session_request_p; MessageDef *message_p; diff --git a/openair-cn/S1AP/s1ap_eNB.c b/openair-cn/S1AP/s1ap_eNB.c index 8841127929..da11f2893f 100644 --- a/openair-cn/S1AP/s1ap_eNB.c +++ b/openair-cn/S1AP/s1ap_eNB.c @@ -56,7 +56,7 @@ #include "s1ap_eNB_itti_messaging.h" #include "s1ap_eNB_ue_context.h" // test, to be removed - +#include "msc.h" #include "assertions.h" #include "conversions.h" @@ -98,7 +98,9 @@ uint32_t s1ap_generate_eNB_id(void) static void s1ap_eNB_register_mme(s1ap_eNB_instance_t *instance_p, net_ip_address_t *mme_ip_address, - net_ip_address_t *local_ip_addr) + net_ip_address_t *local_ip_addr, + uint16_t in_streams, + uint16_t out_streams) { MessageDef *message_p = NULL; sctp_new_association_req_t *sctp_new_association_req_p = NULL; @@ -114,6 +116,9 @@ static void s1ap_eNB_register_mme(s1ap_eNB_instance_t *instance_p, sctp_new_association_req_p->port = S1AP_PORT_NUMBER; sctp_new_association_req_p->ppid = S1AP_SCTP_PPID; + sctp_new_association_req_p->in_streams = in_streams; + sctp_new_association_req_p->out_streams = out_streams; + memcpy(&sctp_new_association_req_p->remote_address, mme_ip_address, sizeof(*mme_ip_address)); @@ -197,8 +202,11 @@ void s1ap_eNB_handle_register_eNB(instance_t instance, s1ap_register_enb_req_t * /* Trying to connect to provided list of MME ip address */ for (index = 0; index < s1ap_register_eNB->nb_mme; index++) { - s1ap_eNB_register_mme(new_instance, &s1ap_register_eNB->mme_ip_address[index], - &s1ap_register_eNB->enb_ip_address); + s1ap_eNB_register_mme(new_instance, + &s1ap_register_eNB->mme_ip_address[index], + &s1ap_register_eNB->enb_ip_address, + s1ap_register_eNB->sctp_in_streams, + s1ap_register_eNB->sctp_out_streams); } } @@ -264,6 +272,7 @@ void *s1ap_eNB_task(void *arg) s1ap_eNB_prepare_internal_data(); itti_mark_task_ready(TASK_S1AP); + MSC_START_USE(); while (1) { itti_receive_msg(TASK_S1AP, &received_msg); diff --git a/openair-cn/S1AP/s1ap_eNB_context_management_procedures.c b/openair-cn/S1AP/s1ap_eNB_context_management_procedures.c index 314dbd3c8f..0e6de0b0f2 100755 --- a/openair-cn/S1AP/s1ap_eNB_context_management_procedures.c +++ b/openair-cn/S1AP/s1ap_eNB_context_management_procedures.c @@ -117,7 +117,7 @@ int s1ap_ue_context_release_complete(instance_t instance, /* UE associated signalling -> use the allocated stream */ s1ap_eNB_itti_send_sctp_data_req(s1ap_eNB_instance_p->instance, ue_context_p->mme_ref->assoc_id, buffer, - length, ue_context_p->stream); + length, ue_context_p->tx_stream); //LG s1ap_eNB_itti_send_sctp_close_association(s1ap_eNB_instance_p->instance, @@ -234,7 +234,7 @@ int s1ap_ue_context_release_req(instance_t instance, /* UE associated signalling -> use the allocated stream */ s1ap_eNB_itti_send_sctp_data_req(s1ap_eNB_instance_p->instance, ue_context_p->mme_ref->assoc_id, buffer, - length, ue_context_p->stream); + length, ue_context_p->tx_stream); return 0; } diff --git a/openair-cn/S1AP/s1ap_eNB_encoder.c b/openair-cn/S1AP/s1ap_eNB_encoder.c index 90bcf5888a..5ec2f21613 100644 --- a/openair-cn/S1AP/s1ap_eNB_encoder.c +++ b/openair-cn/S1AP/s1ap_eNB_encoder.c @@ -38,7 +38,6 @@ #include #include -#include "assertions.h" #include "conversions.h" #include "intertask_interface.h" diff --git a/openair-cn/S1AP/s1ap_eNB_handlers.c b/openair-cn/S1AP/s1ap_eNB_handlers.c index 56528f13bb..7469e83ac2 100644 --- a/openair-cn/S1AP/s1ap_eNB_handlers.c +++ b/openair-cn/S1AP/s1ap_eNB_handlers.c @@ -67,6 +67,11 @@ int s1ap_eNB_handle_s1_setup_failure(uint32_t assoc_id, uint32_t stream, struct s1ap_message_s *message_p); +static +int s1ap_eNB_handle_error_indication(uint32_t assoc_id, + uint32_t stream, + struct s1ap_message_s *message_p); + static int s1ap_eNB_handle_initial_context_request(uint32_t assoc_id, uint32_t stream, @@ -94,7 +99,7 @@ s1ap_message_decoded_callback messages_callback[][3] = { { 0, 0, 0 }, /* initialUEMessage */ { 0, 0, 0 }, /* uplinkNASTransport */ { 0, 0, 0 }, /* Reset */ - { 0, 0, 0 }, /* ErrorIndication */ + { s1ap_eNB_handle_error_indication, 0, 0 }, /* ErrorIndication */ { 0, 0, 0 }, /* NASNonDeliveryIndication */ { 0, s1ap_eNB_handle_s1_setup_response, s1ap_eNB_handle_s1_setup_failure }, /* S1Setup */ { 0, 0, 0 }, /* UEContextReleaseRequest */ @@ -286,7 +291,10 @@ int s1ap_eNB_handle_s1_setup_response(uint32_t assoc_id, /* The list of served gummei can contain at most 8 elements. * LTE related gummei is the first element in the list, i.e with an id of 0. */ - DevAssert(s1SetupResponse_p->servedGUMMEIs.list.count == 1); + S1AP_DEBUG("servedGUMMEIs.list.count %d\n",s1SetupResponse_p->servedGUMMEIs.list.count); + DevAssert(s1SetupResponse_p->servedGUMMEIs.list.count > 0); + DevAssert(s1SetupResponse_p->servedGUMMEIs.list.count <= 8); + for (i = 0; i < s1SetupResponse_p->servedGUMMEIs.list.count; i++) { struct S1ap_ServedGUMMEIsItem *gummei_item_p; @@ -300,12 +308,13 @@ int s1ap_eNB_handle_s1_setup_response(uint32_t assoc_id, STAILQ_INIT(&new_gummei_p->served_plmns); STAILQ_INIT(&new_gummei_p->served_group_ids); STAILQ_INIT(&new_gummei_p->mme_codes); - + + S1AP_DEBUG("servedPLMNs.list.count %d\n",gummei_item_p->servedPLMNs.list.count); for (j = 0; j < gummei_item_p->servedPLMNs.list.count; j++) { S1ap_PLMNidentity_t *plmn_identity_p; struct plmn_identity_s *new_plmn_identity_p; - - plmn_identity_p = gummei_item_p->servedPLMNs.list.array[i]; + + plmn_identity_p = gummei_item_p->servedPLMNs.list.array[j]; new_plmn_identity_p = calloc(1, sizeof(struct plmn_identity_s)); TBCD_TO_MCC_MNC(plmn_identity_p, new_plmn_identity_p->mcc, new_plmn_identity_p->mnc, new_plmn_identity_p->mnc_digit_length); @@ -317,7 +326,7 @@ int s1ap_eNB_handle_s1_setup_response(uint32_t assoc_id, S1ap_MME_Group_ID_t *mme_group_id_p; struct served_group_id_s *new_group_id_p; - mme_group_id_p = gummei_item_p->servedGroupIDs.list.array[i]; + mme_group_id_p = gummei_item_p->servedGroupIDs.list.array[j]; new_group_id_p = calloc(1, sizeof(struct served_group_id_s)); OCTET_STRING_TO_INT16(mme_group_id_p, new_group_id_p->mme_group_id); STAILQ_INSERT_TAIL(&new_gummei_p->served_group_ids, new_group_id_p, next); @@ -328,7 +337,7 @@ int s1ap_eNB_handle_s1_setup_response(uint32_t assoc_id, S1ap_MME_Code_t *mme_code_p; struct mme_code_s *new_mme_code_p; - mme_code_p = gummei_item_p->servedMMECs.list.array[i]; + mme_code_p = gummei_item_p->servedMMECs.list.array[j]; new_mme_code_p = calloc(1, sizeof(struct mme_code_s)); OCTET_STRING_TO_INT8(mme_code_p, new_mme_code_p->mme_code); @@ -418,6 +427,264 @@ int s1ap_eNB_handle_s1_setup_response(uint32_t assoc_id, return 0; } + +static +int s1ap_eNB_handle_error_indication(uint32_t assoc_id, + uint32_t stream, + struct s1ap_message_s *message_p) +{ + S1ap_ErrorIndicationIEs_t *s1_error_indication_p; + s1ap_eNB_mme_data_t *mme_desc_p; + + DevAssert(message_p != NULL); + + s1_error_indication_p = &message_p->msg.s1ap_ErrorIndicationIEs; + + /* S1 Setup Failure == Non UE-related procedure -> stream 0 */ + if (stream != 0) { + S1AP_WARN("[SCTP %d] Received s1 Error indication on stream != 0 (%d)\n", + assoc_id, stream); + } + + if ((mme_desc_p = s1ap_eNB_get_MME(NULL, assoc_id, 0)) == NULL) { + S1AP_ERROR("[SCTP %d] Received S1 Error indication for non existing " + "MME context\n", assoc_id); + return -1; + } + if ( s1_error_indication_p->presenceMask & S1AP_ERRORINDICATIONIES_MME_UE_S1AP_ID_PRESENT) { + S1AP_WARN("Received S1 Error indication MME UE S1AP ID 0x%x\n", s1_error_indication_p->mme_ue_s1ap_id); + } + if ( s1_error_indication_p->presenceMask & S1AP_ERRORINDICATIONIES_ENB_UE_S1AP_ID_PRESENT) { + S1AP_WARN("Received S1 Error indication eNB UE S1AP ID 0x%x\n", s1_error_indication_p->eNB_UE_S1AP_ID); + } + + if ( s1_error_indication_p->presenceMask & S1AP_ERRORINDICATIONIES_CAUSE_PRESENT) { + switch(s1_error_indication_p->cause.present) { + case S1ap_Cause_PR_NOTHING: + S1AP_WARN("Received S1 Error indication cause NOTHING\n"); + break; + case S1ap_Cause_PR_radioNetwork: + switch (s1_error_indication_p->cause.choice.radioNetwork) { + case S1ap_CauseRadioNetwork_unspecified: + S1AP_WARN("Received S1 Error indication S1ap_CauseRadioNetwork_unspecified\n"); + break; + case S1ap_CauseRadioNetwork_tx2relocoverall_expiry: + S1AP_WARN("Received S1 Error indication S1ap_CauseRadioNetwork_tx2relocoverall_expiry\n"); + break; + case S1ap_CauseRadioNetwork_successful_handover: + S1AP_WARN("Received S1 Error indication S1ap_CauseRadioNetwork_successful_handover\n"); + break; + case S1ap_CauseRadioNetwork_release_due_to_eutran_generated_reason: + S1AP_WARN("Received S1 Error indication S1ap_CauseRadioNetwork_release_due_to_eutran_generated_reason\n"); + break; + case S1ap_CauseRadioNetwork_handover_cancelled: + S1AP_WARN("Received S1 Error indication S1ap_CauseRadioNetwork_handover_cancelled\n"); + break; + case S1ap_CauseRadioNetwork_partial_handover: + S1AP_WARN("Received S1 Error indication S1ap_CauseRadioNetwork_partial_handover\n"); + break; + case S1ap_CauseRadioNetwork_ho_failure_in_target_EPC_eNB_or_target_system: + S1AP_WARN("Received S1 Error indication S1ap_CauseRadioNetwork_ho_failure_in_target_EPC_eNB_or_target_system\n"); + break; + case S1ap_CauseRadioNetwork_ho_target_not_allowed: + S1AP_WARN("Received S1 Error indication S1ap_CauseRadioNetwork_ho_target_not_allowed\n"); + break; + case S1ap_CauseRadioNetwork_tS1relocoverall_expiry: + S1AP_WARN("Received S1 Error indication S1ap_CauseRadioNetwork_tS1relocoverall_expiry\n"); + break; + case S1ap_CauseRadioNetwork_tS1relocprep_expiry: + S1AP_WARN("Received S1 Error indication S1ap_CauseRadioNetwork_tS1relocprep_expiry\n"); + break; + case S1ap_CauseRadioNetwork_cell_not_available: + S1AP_WARN("Received S1 Error indication S1ap_CauseRadioNetwork_cell_not_available\n"); + break; + case S1ap_CauseRadioNetwork_unknown_targetID: + S1AP_WARN("Received S1 Error indication S1ap_CauseRadioNetwork_unknown_targetID\n"); + break; + case S1ap_CauseRadioNetwork_no_radio_resources_available_in_target_cell: + S1AP_WARN("Received S1 Error indication S1ap_CauseRadioNetwork_no_radio_resources_available_in_target_cell\n"); + break; + case S1ap_CauseRadioNetwork_unknown_mme_ue_s1ap_id: + S1AP_WARN("Received S1 Error indication S1ap_CauseRadioNetwork_unknown_mme_ue_s1ap_id\n"); + break; + case S1ap_CauseRadioNetwork_unknown_enb_ue_s1ap_id: + S1AP_WARN("Received S1 Error indication S1ap_CauseRadioNetwork_unknown_enb_ue_s1ap_id\n"); + break; + case S1ap_CauseRadioNetwork_unknown_pair_ue_s1ap_id: + S1AP_WARN("Received S1 Error indication S1ap_CauseRadioNetwork_unknown_pair_ue_s1ap_id\n"); + break; + case S1ap_CauseRadioNetwork_handover_desirable_for_radio_reason: + S1AP_WARN("Received S1 Error indication S1ap_CauseRadioNetwork_handover_desirable_for_radio_reason\n"); + break; + case S1ap_CauseRadioNetwork_time_critical_handover: + S1AP_WARN("Received S1 Error indication S1ap_CauseRadioNetwork_time_critical_handover\n"); + break; + case S1ap_CauseRadioNetwork_resource_optimisation_handover: + S1AP_WARN("Received S1 Error indication S1ap_CauseRadioNetwork_resource_optimisation_handover\n"); + break; + case S1ap_CauseRadioNetwork_reduce_load_in_serving_cell: + S1AP_WARN("Received S1 Error indication S1ap_CauseRadioNetwork_reduce_load_in_serving_cell\n"); + break; + case S1ap_CauseRadioNetwork_user_inactivity: + S1AP_WARN("Received S1 Error indication S1ap_CauseRadioNetwork_user_inactivity\n"); + break; + case S1ap_CauseRadioNetwork_radio_connection_with_ue_lost: + S1AP_WARN("Received S1 Error indication S1ap_CauseRadioNetwork_radio_connection_with_ue_lost\n"); + break; + case S1ap_CauseRadioNetwork_load_balancing_tau_required: + S1AP_WARN("Received S1 Error indication S1ap_CauseRadioNetwork_load_balancing_tau_required\n"); + break; + case S1ap_CauseRadioNetwork_cs_fallback_triggered: + S1AP_WARN("Received S1 Error indication S1ap_CauseRadioNetwork_cs_fallback_triggered\n"); + break; + case S1ap_CauseRadioNetwork_ue_not_available_for_ps_service: + S1AP_WARN("Received S1 Error indication S1ap_CauseRadioNetwork_ue_not_available_for_ps_service\n"); + break; + case S1ap_CauseRadioNetwork_radio_resources_not_available: + S1AP_WARN("Received S1 Error indication S1ap_CauseRadioNetwork_radio_resources_not_available\n"); + break; + case S1ap_CauseRadioNetwork_failure_in_radio_interface_procedure: + S1AP_WARN("Received S1 Error indication S1ap_CauseRadioNetwork_failure_in_radio_interface_procedure\n"); + break; + case S1ap_CauseRadioNetwork_invals1ap_id_qos_combination: + S1AP_WARN("Received S1 Error indication S1ap_CauseRadioNetwork_invals1ap_id_qos_combination\n"); + break; + case S1ap_CauseRadioNetwork_interrat_redirection: + S1AP_WARN("Received S1 Error indication S1ap_CauseRadioNetwork_interrat_redirection\n"); + break; + case S1ap_CauseRadioNetwork_interaction_with_other_procedure: + S1AP_WARN("Received S1 Error indication S1ap_CauseRadioNetwork_interaction_with_other_procedure\n"); + break; + case S1ap_CauseRadioNetwork_unknown_E_RAB_ID: + S1AP_WARN("Received S1 Error indication S1ap_CauseRadioNetwork_unknown_E_RAB_ID\n"); + break; + case S1ap_CauseRadioNetwork_multiple_E_RAB_ID_instances: + S1AP_WARN("Received S1 Error indication S1ap_CauseRadioNetwork_multiple_E_RAB_ID_instances\n"); + break; + case S1ap_CauseRadioNetwork_encryption_and_or_integrity_protection_algorithms_not_supported: + S1AP_WARN("Received S1 Error indication S1ap_CauseRadioNetwork_encryption_and_or_integrity_protection_algorithms_not_supported\n"); + break; + case S1ap_CauseRadioNetwork_s1_intra_system_handover_triggered: + S1AP_WARN("Received S1 Error indication S1ap_CauseRadioNetwork_s1_intra_system_handover_triggered\n"); + break; + case S1ap_CauseRadioNetwork_s1_inter_system_handover_triggered: + S1AP_WARN("Received S1 Error indication S1ap_CauseRadioNetwork_s1_inter_system_handover_triggered\n"); + break; + case S1ap_CauseRadioNetwork_x2_handover_triggered: + S1AP_WARN("Received S1 Error indication S1ap_CauseRadioNetwork_x2_handover_triggered\n"); + break; + case S1ap_CauseRadioNetwork_redirection_towards_1xRTT: + S1AP_WARN("Received S1 Error indication S1ap_CauseRadioNetwork_redirection_towards_1xRTT\n"); + break; + case S1ap_CauseRadioNetwork_not_supported_QCI_value: + S1AP_WARN("Received S1 Error indication S1ap_CauseRadioNetwork_not_supported_QCI_value\n"); + break; + case S1ap_CauseRadioNetwork_invals1ap_id_CSG_Id: + S1AP_WARN("Received S1 Error indication S1ap_CauseRadioNetwork_invals1ap_id_CSG_Id\n"); + break; + default: + S1AP_WARN("Received S1 Error indication cause radio network case not handled\n"); + } + break; + + case S1ap_Cause_PR_transport: + switch (s1_error_indication_p->cause.choice.transport) { + case S1ap_CauseTransport_transport_resource_unavailable: + S1AP_WARN("Received S1 Error indication S1ap_CauseTransport_transport_resource_unavailable\n"); + break; + case S1ap_CauseTransport_unspecified: + S1AP_WARN("Received S1 Error indication S1ap_CauseTransport_unspecified\n"); + break; + default: + S1AP_WARN("Received S1 Error indication cause transport case not handled\n"); + } + break; + + case S1ap_Cause_PR_nas: + switch (s1_error_indication_p->cause.choice.nas) { + case S1ap_CauseNas_normal_release: + S1AP_WARN("Received S1 Error indication S1ap_CauseNas_normal_release\n"); + break; + case S1ap_CauseNas_authentication_failure: + S1AP_WARN("Received S1 Error indication S1ap_CauseNas_authentication_failure\n"); + break; + case S1ap_CauseNas_detach: + S1AP_WARN("Received S1 Error indication S1ap_CauseNas_detach\n"); + break; + case S1ap_CauseNas_unspecified: + S1AP_WARN("Received S1 Error indication S1ap_CauseNas_unspecified\n"); + break; + case S1ap_CauseNas_csg_subscription_expiry: + S1AP_WARN("Received S1 Error indication S1ap_CauseNas_csg_subscription_expiry\n"); + break; + default: + S1AP_WARN("Received S1 Error indication cause nas case not handled\n"); + } + break; + + case S1ap_Cause_PR_protocol: + switch (s1_error_indication_p->cause.choice.protocol) { + case S1ap_CauseProtocol_transfer_syntax_error: + S1AP_WARN("Received S1 Error indication S1ap_CauseProtocol_transfer_syntax_error\n"); + break; + case S1ap_CauseProtocol_abstract_syntax_error_reject: + S1AP_WARN("Received S1 Error indication S1ap_CauseProtocol_abstract_syntax_error_reject\n"); + break; + case S1ap_CauseProtocol_abstract_syntax_error_ignore_and_notify: + S1AP_WARN("Received S1 Error indication S1ap_CauseProtocol_abstract_syntax_error_ignore_and_notify\n"); + break; + case S1ap_CauseProtocol_message_not_compatible_with_receiver_state: + S1AP_WARN("Received S1 Error indication S1ap_CauseProtocol_message_not_compatible_with_receiver_state\n"); + break; + case S1ap_CauseProtocol_semantic_error: + S1AP_WARN("Received S1 Error indication S1ap_CauseProtocol_semantic_error\n"); + break; + case S1ap_CauseProtocol_abstract_syntax_error_falsely_constructed_message: + S1AP_WARN("Received S1 Error indication S1ap_CauseProtocol_abstract_syntax_error_falsely_constructed_message\n"); + break; + case S1ap_CauseProtocol_unspecified: + S1AP_WARN("Received S1 Error indication S1ap_CauseProtocol_unspecified\n"); + break; + default: + S1AP_WARN("Received S1 Error indication cause protocol case not handled\n"); + } + break; + + case S1ap_Cause_PR_misc: + switch (s1_error_indication_p->cause.choice.protocol) { + case S1ap_CauseMisc_control_processing_overload: + S1AP_WARN("Received S1 Error indication S1ap_CauseMisc_control_processing_overload\n"); + break; + case S1ap_CauseMisc_not_enough_user_plane_processing_resources: + S1AP_WARN("Received S1 Error indication S1ap_CauseMisc_not_enough_user_plane_processing_resources\n"); + break; + case S1ap_CauseMisc_hardware_failure: + S1AP_WARN("Received S1 Error indication S1ap_CauseMisc_hardware_failure\n"); + break; + case S1ap_CauseMisc_om_intervention: + S1AP_WARN("Received S1 Error indication S1ap_CauseMisc_om_intervention\n"); + break; + case S1ap_CauseMisc_unspecified: + S1AP_WARN("Received S1 Error indication S1ap_CauseMisc_unspecified\n"); + break; + case S1ap_CauseMisc_unknown_PLMN: + S1AP_WARN("Received S1 Error indication S1ap_CauseMisc_unknown_PLMN\n"); + break; + default: + S1AP_WARN("Received S1 Error indication cause misc case not handled\n"); + } + break; + } + } + if ( s1_error_indication_p->presenceMask & S1AP_ERRORINDICATIONIES_CRITICALITYDIAGNOSTICS_PRESENT) { + // TODO continue + } + // TODO continue + + return 0; +} + + static int s1ap_eNB_handle_initial_context_request(uint32_t assoc_id, uint32_t stream, @@ -449,12 +716,14 @@ int s1ap_eNB_handle_initial_context_request(uint32_t assoc_id, } /* Initial context request = UE-related procedure -> stream != 0 */ - if (stream != ue_desc_p->stream) { - S1AP_ERROR("[SCTP %d] Received UE-related procedure on stream (%d) whereas expecting (%d)\n", - assoc_id, stream, ue_desc_p->stream); + if (stream == 0) { + S1AP_ERROR("[SCTP %d] Received UE-related procedure on stream (%d)\n", + assoc_id, stream); return -1; } + ue_desc_p->rx_stream = stream; + ue_desc_p->mme_ue_s1ap_id = initialContextSetupRequest_p->mme_ue_s1ap_id; message_p = itti_alloc_new_message(TASK_S1AP, S1AP_INITIAL_CONTEXT_SETUP_REQ); diff --git a/openair-cn/S1AP/s1ap_eNB_nas_procedures.c b/openair-cn/S1AP/s1ap_eNB_nas_procedures.c index 4521148984..612d6dfc7e 100644 --- a/openair-cn/S1AP/s1ap_eNB_nas_procedures.c +++ b/openair-cn/S1AP/s1ap_eNB_nas_procedures.c @@ -155,7 +155,7 @@ int s1ap_eNB_handle_nas_first_req( initial_ue_message_p->rrC_Establishment_Cause = s1ap_nas_first_req_p->establishment_cause; if (s1ap_nas_first_req_p->ue_identity.presenceMask & UE_IDENTITIES_s_tmsi) { - S1AP_DEBUG("S_TMSI_PRESENT"); + S1AP_DEBUG("S_TMSI_PRESENT\n"); initial_ue_message_p->presenceMask |= S1AP_INITIALUEMESSAGEIES_S_TMSI_PRESENT; MME_CODE_TO_OCTET_STRING(s1ap_nas_first_req_p->ue_identity.s_tmsi.mme_code, @@ -165,7 +165,7 @@ int s1ap_eNB_handle_nas_first_req( } if (s1ap_nas_first_req_p->ue_identity.presenceMask & UE_IDENTITIES_gummei) { - S1AP_DEBUG("GUMMEI_ID_PRESENT"); + S1AP_DEBUG("GUMMEI_ID_PRESENT\n"); initial_ue_message_p->presenceMask |= S1AP_INITIALUEMESSAGEIES_GUMMEI_ID_PRESENT; MCC_MNC_TO_PLMNID( @@ -191,8 +191,10 @@ int s1ap_eNB_handle_nas_first_req( * The cell identity is defined on 28 bits but as we use macro enb id, * we have to pad. */ +#warning "TODO get cell id from RRC" MACRO_ENB_ID_TO_CELL_IDENTITY(instance_p->eNB_id, - &initial_ue_message_p->eutran_cgi.cell_ID); + 0, // Cell ID + &initial_ue_message_p->eutran_cgi.cell_ID); MCC_MNC_TO_TBCD(instance_p->mcc, instance_p->mnc, instance_p->mnc_digit_length, @@ -224,14 +226,7 @@ int s1ap_eNB_handle_nas_first_req( mme_desc_p->nextstream += 1; } -#if defined(S1AP_LIMIT_STREAM_ID_TO_0) - mme_desc_p->nextstream = 0; -#else -# if defined(S1AP_LIMIT_STREAM_ID_TO_1) - mme_desc_p->nextstream = 1; -# endif -#endif - ue_desc_p->stream = mme_desc_p->nextstream; + ue_desc_p->tx_stream = mme_desc_p->nextstream; MSC_LOG_TX_MESSAGE( MSC_S1AP_ENB, @@ -244,7 +239,7 @@ int s1ap_eNB_handle_nas_first_req( /* Send encoded message over sctp */ s1ap_eNB_itti_send_sctp_data_req(instance_p->instance, mme_desc_p->assoc_id, - buffer, length, ue_desc_p->stream); + buffer, length, ue_desc_p->tx_stream); return 0; } @@ -300,6 +295,14 @@ int s1ap_eNB_handle_nas_downlink(const uint32_t assoc_id, return -1; } + if (0 == ue_desc_p->rx_stream) { + ue_desc_p->rx_stream = stream; + } else if (stream != ue_desc_p->rx_stream) { + S1AP_ERROR("[SCTP %d] Received UE-related procedure on stream %u, expecting %u\n", + assoc_id, stream, ue_desc_p->rx_stream); + return -1; + } + /* Is it the first outcome of the MME for this UE ? If so store the mme * UE s1ap id. */ @@ -313,6 +316,7 @@ int s1ap_eNB_handle_nas_downlink(const uint32_t assoc_id, downlink_NAS_transport_p->mme_ue_s1ap_id, ue_desc_p->mme_ue_s1ap_id ); + return -1; } } @@ -396,8 +400,10 @@ int s1ap_eNB_nas_uplink(instance_t instance, s1ap_uplink_nas_t *s1ap_uplink_nas_ s1ap_eNB_instance_p->mnc_digit_length, &uplink_NAS_transport_p->eutran_cgi.pLMNidentity); +#warning "TODO get cell id from RRC" MACRO_ENB_ID_TO_CELL_IDENTITY(s1ap_eNB_instance_p->eNB_id, - &uplink_NAS_transport_p->eutran_cgi.cell_ID); + 0, + &uplink_NAS_transport_p->eutran_cgi.cell_ID); /* MCC/MNC should be repeated in TAI and EUTRAN CGI */ MCC_MNC_TO_PLMNID( @@ -428,7 +434,7 @@ int s1ap_eNB_nas_uplink(instance_t instance, s1ap_uplink_nas_t *s1ap_uplink_nas_ /* UE associated signalling -> use the allocated stream */ s1ap_eNB_itti_send_sctp_data_req(s1ap_eNB_instance_p->instance, ue_context_p->mme_ref->assoc_id, buffer, - length, ue_context_p->stream); + length, ue_context_p->tx_stream); return 0; } @@ -506,7 +512,7 @@ void s1ap_eNB_nas_non_delivery_ind(instance_t instance, /* UE associated signalling -> use the allocated stream */ s1ap_eNB_itti_send_sctp_data_req(s1ap_eNB_instance_p->instance, ue_context_p->mme_ref->assoc_id, buffer, - length, ue_context_p->stream); + length, ue_context_p->tx_stream); } //------------------------------------------------------------------------------ @@ -596,7 +602,7 @@ int s1ap_eNB_initial_ctxt_resp( /* UE associated signalling -> use the allocated stream */ s1ap_eNB_itti_send_sctp_data_req(s1ap_eNB_instance_p->instance, ue_context_p->mme_ref->assoc_id, buffer, - length, ue_context_p->stream); + length, ue_context_p->tx_stream); return ret; } @@ -675,7 +681,7 @@ int s1ap_eNB_ue_capabilities(instance_t instance, /* UE associated signalling -> use the allocated stream */ s1ap_eNB_itti_send_sctp_data_req(s1ap_eNB_instance_p->instance, ue_context_p->mme_ref->assoc_id, buffer, - length, ue_context_p->stream); + length, ue_context_p->tx_stream); return ret; } diff --git a/openair-cn/S1AP/s1ap_eNB_trace.c b/openair-cn/S1AP/s1ap_eNB_trace.c index 5a523c1fd3..e792c81120 100644 --- a/openair-cn/S1AP/s1ap_eNB_trace.c +++ b/openair-cn/S1AP/s1ap_eNB_trace.c @@ -76,7 +76,7 @@ void s1ap_eNB_generate_trace_failure(struct s1ap_eNB_ue_context_s *ue_desc_p, s1ap_eNB_itti_send_sctp_data_req(ue_desc_p->mme_ref->s1ap_eNB_instance->instance, ue_desc_p->mme_ref->assoc_id, buffer, - length, ue_desc_p->stream); + length, ue_desc_p->tx_stream); } int s1ap_eNB_handle_trace_start(uint32_t assoc_id, diff --git a/openair-cn/S1AP/s1ap_eNB_ue_context.h b/openair-cn/S1AP/s1ap_eNB_ue_context.h index 911f6e3671..a153fa1952 100644 --- a/openair-cn/S1AP/s1ap_eNB_ue_context.h +++ b/openair-cn/S1AP/s1ap_eNB_ue_context.h @@ -66,7 +66,8 @@ typedef struct s1ap_eNB_ue_context_s { uint32_t mme_ue_s1ap_id; /* Stream used for this particular UE */ - int32_t stream; + int32_t tx_stream; + int32_t rx_stream; /* Current UE state. */ s1ap_ue_state ue_state; diff --git a/openair-cn/S1AP/s1ap_mme.c b/openair-cn/S1AP/s1ap_mme.c index 5112ec30ce..a599d32c68 100644 --- a/openair-cn/S1AP/s1ap_mme.c +++ b/openair-cn/S1AP/s1ap_mme.c @@ -48,6 +48,7 @@ #include "s1ap_mme_nas_procedures.h" #include "s1ap_mme_retransmission.h" +#include "msc.h" #define S1AP_DEBUG_LIST #ifdef S1AP_DEBUG_LIST @@ -95,6 +96,7 @@ void *s1ap_mme_thread(void *args) MessageDef *received_message_p; itti_mark_task_ready(TASK_S1AP); + MSC_START_USE(); while(1) { /* Trying to fetch a message from the message queue. diff --git a/openair-cn/S6A/s6a_peer.c b/openair-cn/S6A/s6a_peer.c index 176807cff6..c611cb6981 100644 --- a/openair-cn/S6A/s6a_peer.c +++ b/openair-cn/S6A/s6a_peer.c @@ -59,12 +59,6 @@ void s6a_peer_connected_cb(struct peer_info *info, void *arg) itti_send_msg_to_task(TASK_S1AP, INSTANCE_DEFAULT, message_p); -#if ! defined(ENABLE_USE_GTPU_IN_KERNEL) - /* Inform SGI that connection to HSS is established */ - message_p = itti_alloc_new_message(TASK_S6A, ACTIVATE_MESSAGE); - - itti_send_msg_to_task(TASK_FW_IP, INSTANCE_DEFAULT, message_p); -#endif } /* For test */ diff --git a/openair-cn/S6A/s6a_task.c b/openair-cn/S6A/s6a_task.c index 9849b6caba..2ee79ac3ab 100644 --- a/openair-cn/S6A/s6a_task.c +++ b/openair-cn/S6A/s6a_task.c @@ -45,6 +45,7 @@ #include "s6a_messages.h" #include "assertions.h" +#include "msc.h" #if defined(DISABLE_USE_HSS) # error "Disabling HSS support is currently not supported \ @@ -67,6 +68,7 @@ static void fd_gnutls_debug(int level, const char *str) void *s6a_thread(void *args) { itti_mark_task_ready(TASK_S6A); + MSC_START_USE(); while(1) { MessageDef *received_message_p = NULL; diff --git a/openair-cn/SCTP/sctp_default_values.h b/openair-cn/SCTP/sctp_default_values.h index 5985dd907c..28b6cc1fbf 100644 --- a/openair-cn/SCTP/sctp_default_values.h +++ b/openair-cn/SCTP/sctp_default_values.h @@ -29,8 +29,8 @@ #ifndef SCTP_DEFAULT_VALUES_H_ #define SCTP_DEFAULT_VALUES_H_ -#define SCTP_OUT_STREAMS (64) -#define SCTP_IN_STREAMS (64) +#define SCTP_OUT_STREAMS (16) +#define SCTP_IN_STREAMS (16) #define SCTP_MAX_ATTEMPTS (2) #define SCTP_TIMEOUT (5) #define SCTP_RECV_BUFFER_SIZE (1024) diff --git a/openair-cn/SCTP/sctp_eNB_task.c b/openair-cn/SCTP/sctp_eNB_task.c index 8a7e50ee5f..c9039f714d 100644 --- a/openair-cn/SCTP/sctp_eNB_task.c +++ b/openair-cn/SCTP/sctp_eNB_task.c @@ -55,6 +55,7 @@ #include "sctp_default_values.h" #include "sctp_common.h" #include "sctp_eNB_itti_messaging.h" +#include "msc.h" /* Used to format an uint32_t containing an ipv4 address */ #define IPV4_ADDR "%u.%u.%u.%u" @@ -124,7 +125,7 @@ sctp_handle_new_association_req( const task_id_t requestor, const sctp_new_association_req_t * const sctp_new_association_req_p) { - int sd; + int sd = 0; int32_t assoc_id = 0; struct sctp_event_subscribe events; @@ -133,8 +134,10 @@ sctp_handle_new_association_req( enum sctp_connection_type_e connection_type = SCTP_TYPE_CLIENT; struct ifreq ifr; - struct ifaddrs *ifaddr, *ifa; - int family, s; + struct ifaddrs *ifaddr = NULL; + struct ifaddrs *ifa = NULL; + int family = 0; + int s = 0; struct in_addr in; struct in6_addr in6; /* Prepare a new SCTP association as requested by upper layer and try to connect @@ -143,6 +146,7 @@ sctp_handle_new_association_req( DevAssert(sctp_new_association_req_p != NULL); /* Create new socket with IPv6 affinity */ +#warning "SCTP may Force IPv4 only, here" #ifdef NO_VIRTUAL_MACHINE // in init chunk appears a list of host addresses, IPv4 and IPv4 in an arbitrary (unsorted) order @@ -161,8 +165,10 @@ sctp_handle_new_association_req( /* Add the socket to list of fd monitored by ITTI */ itti_subscribe_event_fd(TASK_SCTP, sd); - if (sctp_set_init_opt(sd, SCTP_IN_STREAMS, SCTP_OUT_STREAMS, - SCTP_MAX_ATTEMPTS, SCTP_TIMEOUT) != 0) { + if (sctp_set_init_opt(sd, + sctp_new_association_req_p->in_streams, + sctp_new_association_req_p->out_streams, + SCTP_MAX_ATTEMPTS, SCTP_TIMEOUT) != 0) { SCTP_ERROR("Setsockopt IPPROTO_SCTP_INITMSG failed: %s\n", strerror(errno)); itti_unsubscribe_event_fd(TASK_SCTP, sd); @@ -805,6 +811,7 @@ void *sctp_eNB_task(void *arg) STAILQ_INIT(&sctp_cnx_list); itti_mark_task_ready(TASK_SCTP); + MSC_START_USE(); while (1) { itti_receive_msg(TASK_SCTP, &received_msg); diff --git a/openair-cn/SCTP/sctp_primitives_server.c b/openair-cn/SCTP/sctp_primitives_server.c index 59f7f53aa6..654d0b6f4d 100644 --- a/openair-cn/SCTP/sctp_primitives_server.c +++ b/openair-cn/SCTP/sctp_primitives_server.c @@ -60,6 +60,7 @@ #include "sctp_common.h" #include "sctp_itti_messaging.h" +#include "msc.h" #define SCTP_DUMP_LIST @@ -553,6 +554,7 @@ void *sctp_receiver_thread(void *args_p) FD_SET(sctp_arg_p->sd, &master); fdmax = sctp_arg_p->sd; /* so far, it's this one*/ + MSC_START_USE(); while(1) { @@ -616,6 +618,7 @@ void *sctp_receiver_thread(void *args_p) static void *sctp_intertask_interface(void *args_p) { itti_mark_task_ready(TASK_SCTP); + MSC_START_USE(); while(1) { MessageDef *received_message_p; diff --git a/openair-cn/SGI/COPYING b/openair-cn/SGI/COPYING deleted file mode 100644 index 94a9ed024d..0000000000 --- a/openair-cn/SGI/COPYING +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. diff --git a/openair-cn/SGI/Makefile.am b/openair-cn/SGI/Makefile.am deleted file mode 100644 index 9a386ed1d5..0000000000 --- a/openair-cn/SGI/Makefile.am +++ /dev/null @@ -1,64 +0,0 @@ -################################################################################ -# OpenAirInterface -# Copyright(c) 1999 - 2014 Eurecom -# -# OpenAirInterface is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# -# OpenAirInterface is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with OpenAirInterface.The full GNU General Public License is -# included in this distribution in the file called "COPYING". If not, -# see . -# -# Contact Information -# OpenAirInterface Admin: openair_admin@eurecom.fr -# OpenAirInterface Tech : openair_tech@eurecom.fr -# OpenAirInterface Dev : openair4g-devel@eurecom.fr -# -# Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. -# -################################################################################ -AM_CFLAGS = @ADD_CFLAGS@ \ - -I$(top_srcdir)/COMMON \ - -I$(top_srcdir)/SGW-LITE \ - -I$(top_srcdir)/UTILS \ - -I$(top_srcdir)/UTILS/HASHTABLE \ - -I$(top_srcdir)/NAS/EURECOM-NAS/src/api/network \ - -I$(top_srcdir)/NAS/EURECOM-NAS/src/include \ - -I$(top_srcdir)/NAS/EURECOM-NAS/src/ies \ - -I$(top_srcdir)/NAS/EURECOM-NAS/src/emm/msg \ - -I$(top_srcdir)/NAS/EURECOM-NAS/src/esm/msg \ - -I$(top_srcdir)/NAS/EURECOM-NAS/src/util \ - -I$(top_srcdir)/GTPV1-U \ - -I$(top_srcdir)/INTERTASK_INTERFACE - -noinst_LTLIBRARIES = libsgi.la -libsgi_la_LDFLAGS = -all-static -libsgi_la_SOURCES = \ - sgi_task.c sgi.h \ - sgi_socket.c \ - sgi_egress.c \ - sgi_util.c - -if ENABLE_USE_PCAP_FOR_SGI - libsgi_la_SOURCES += sgi_pcap.c \ - /usr/lib/libpcap.a - -endif - - -if ENABLE_USE_NETFILTER_FOR_SGI - libsgi_la_SOURCES += sgi_nf.c \ - /usr/lib/libnetfilter_queue.a \ - /usr/lib/libnfnetlink.la -endif - - diff --git a/openair-cn/SGI/sgi.h b/openair-cn/SGI/sgi.h deleted file mode 100755 index c0e4ebda49..0000000000 --- a/openair-cn/SGI/sgi.h +++ /dev/null @@ -1,301 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -/*! \file sgi.h -* \brief -* \author Lionel Gauthier -* \company Eurecom -* \email: lionel.gauthier@eurecom.fr -*/ -#ifndef SGI_H_ -#define SGI_H_ - -#include -#include -#include -#include - -#ifdef ENABLE_USE_NETFILTER_FOR_SGI -#warning "ENABLE_USE_NETFILTER_FOR_SGI" -#define SGI_SOCKET_RAW 1 -#define SGI_SOCKET_BIND_TO_IF 1 -#undef SGI_MARKING -#undef SGI_PACKET_RX_RING -#undef SGI_SOCKET_UDP -#else -#warning "DISABLE_USE_NETFILTER_FOR_SGI" -//#define SGI_SOCKET_RAW 1 -#undef SGI_SOCKET_RAW -#define SGI_SOCKET_DGRAM 1 -#define SGI_SOCKET_BIND_TO_IF 1 -#undef SGI_PACKET_RX_RING -#undef SGI_MARKING -#undef SGI_SOCKET_UDP -#endif - -#ifdef ENABLE_USE_PCAP_FOR_SGI -#include -#endif - -//#define SGI_TEST -// Packets include a ethernet header if SGI_PF_PACKET is defined -#define SGI_PF_PACKET - -#include "common_types.h" -#include "hashtable.h" -#include "obj_hashtable.h" -#include "sgw_lite_ie_defs.h" -#include "ip_forward_messages_types.h" - -# define SGI_IF_DEBUG(x, args...) -# define SGI_IF_ERROR(x, args...) -# define SGI_IF_WARNING(x, args...) -//----------------------------------------------------------------------------- -#ifndef SGI_IF_DEBUG -# define SGI_IF_DEBUG(x, args...) do { fprintf(stdout, "[SGI_IF][D]"x, ##args); } \ - while(0) -#endif -#ifndef SGI_IF_ERROR -# define SGI_IF_ERROR(x, args...) do { fprintf(stderr, "[SGI_IF][E]"x, ##args); } \ - while(0) -#endif -#ifndef SGI_IF_WARNING -# define SGI_IF_WARNING(x, args...) do { fprintf(stderr, "[SGI_IF][W]"x, ##args); } \ - while(0) -#endif - -// refer to 3GPP TS 23.203 V10.6.0 (2012-03) page 33 -//#define MAX_DEFINED_QCI 0 -#define MAX_DEFINED_QCI 9 -#define SGI_MIN_EPS_BEARER_ID 5 -#define SGI_MAX_SERVED_USERS_PER_PGW 1024 -#define SGI_MAX_EPS_BEARERS_PER_USER 11 -#define MAX_DEFINED_IPV6_ADDRESSES_PER_UE 16 - - -#define NIP6ADDR(addr) \ - ntohs((addr)->s6_addr16[0]), \ - ntohs((addr)->s6_addr16[1]), \ - ntohs((addr)->s6_addr16[2]), \ - ntohs((addr)->s6_addr16[3]), \ - ntohs((addr)->s6_addr16[4]), \ - ntohs((addr)->s6_addr16[5]), \ - ntohs((addr)->s6_addr16[6]), \ - ntohs((addr)->s6_addr16[7]) - -#define NIPADDR(addr) \ - (uint8_t)(addr & 0x000000FF), \ - (uint8_t)((addr & 0x0000FF00) >> 8), \ - (uint8_t)((addr & 0x00FF0000) >> 16), \ - (uint8_t)((addr & 0xFF000000) >> 24) - -#define NMACADDR(addr) \ - (uint8_t)(addr[0]), \ - (uint8_t)(addr[1]), \ - (uint8_t)(addr[2]), \ - (uint8_t)(addr[3]), \ - (uint8_t)(addr[4]), \ - (uint8_t)(addr[5]) -#ifdef VLAN8021Q -typedef struct vlan_tag_s { - uint16_t vlan_tpid; /* ETH_P_8021Q */ - uint16_t vlan_tci; /* VLAN TCI */ -} vlan_tag_t __attribute__ ((__packed__)); - -typedef struct ether_header_8021q_s { - u_int8_t ether_dhost[ETH_ALEN]; /* destination eth addr */ - u_int8_t ether_shost[ETH_ALEN]; /* source ether addr */ - vlan_tag_t ether_vlan8021q; - u_int16_t ether_type; /* packet type ID field */ -} ether_header_8021q_t __attribute__ ((__packed__)); -#endif - -typedef struct arphdr_s { - __be16 ar_hrd; /* format of hardware address */ - __be16 ar_pro; /* format of protocol address */ - unsigned char ar_hln; /* length of hardware address */ - unsigned char ar_pln; /* length of protocol address */ - __be16 ar_op; /* ARP opcode (command) */ - /* - * Ethernet looks like this : This bit is variable sized however... - */ - unsigned char ar_sha[ETH_ALEN]; /* sender hardware address */ - unsigned char ar_sip[4]; /* sender IP address */ - unsigned char ar_tha[ETH_ALEN]; /* target hardware address */ - unsigned char ar_tip[4]; /* target IP address */ - -} arphdr_t; - -typedef struct sgi_teid_mapping_s { - int is_outgoing_ipv4_packet_seen; - int is_outgoing_ipv6_packet_seen; - Teid_t enb_S1U_teid; ///< dest tunnel identifier - qci_t qci; - ebi_t eps_bearer_id; ///< EPS bearer identifier - char hw_addrlen; -#ifdef SGI_UE_ETHER_TRAFFIC - char ue_mac_addr[8]; -#endif - struct in6_addr in6_addr_captured[MAX_DEFINED_IPV6_ADDRESSES_PER_UE]; - struct in_addr in_add_captured; -} sgi_teid_mapping_t; - - -// Main goal is to do an association IP address <-> MAC address -// may be usefull for netfilter that does not capture MAC address -// if not set on certain hook points (table,path). -typedef struct sgi_addr_mapping_s { - int is_outgoing_packet_seen; - ebi_t eps_bearer_id; ///< EPS default bearer identifier, (really ?) - Teid_t enb_S1U_teid; ///< dest tunnel identifier, for default bearer - Teid_t sgw_S1U_teid; ///< dest tunnel identifier, for default bearer -#ifdef SGI_UE_ETHER_TRAFFIC - char ue_mac_addr[ETH_ALEN]; -#endif -} sgi_addr_mapping_t; - - - - -typedef struct sgi_data_s { - int sd[SGI_MAX_EPS_BEARERS_PER_USER]; - unsigned int if_index[SGI_MAX_EPS_BEARERS_PER_USER]; - int sd6; - char *interface_name; - int interface_name_len; - int interface_index; -#ifndef SGI_UE_ETHER_TRAFFIC - char interface_hw_address[ETH_ALEN]; -#ifdef VLAN8021Q - struct ether_header_8021q_s eh; -#else - struct ether_header eh; -#endif -#endif - uint32_t ipv4_addr; - hash_table_t *teid_mapping; - hash_table_t *addr_v4_mapping; - obj_hash_table_t *addr_v6_mapping; - pthread_t capture_on_sgi_if_thread; - pthread_mutex_t thread_started_mutex; - int thread_started; - - void *sock_mmap_ring; - struct iovec *malloc_ring; - - int hw_address_of_router_captured; - uint32_t local_addr_v4_4_hw_address_router_capture; - uint32_t ipv4_addr_of_router; - char hss_associated; - - -#ifdef ENABLE_USE_PCAP_FOR_SGI - //brief PCAP descriptor for capturing packets on SGI interface. - pcap_t * pcap_descr; -#endif -#define SGI_BUFFER_RECV_LEN 3000 - unsigned char recv_buffer[sizeof(struct ether_header) + SGI_BUFFER_RECV_LEN][SGI_MAX_EPS_BEARERS_PER_USER]; - -} sgi_data_t; - - -typedef struct sgi_read_thread_args_s { - sgi_data_t *sgi_data; - int socket_index; -} sgi_read_thread_args_t; -//----------------------------------------------------------------------------- - -#include "mme_config.h" - - -#define SGI_MAX_EPS_BEARERS (SGI_MAX_SERVED_USERS_PER_PGW*SGI_MAX_EPS_BEARERS_PER_USER) - - - -//----------------------------------------------------------------------------- -// sgi_task.c -//----------------------------------------------------------------------------- -#include "spgw_config.h" -int sgi_init(const pgw_config_t *pgw_config_p); -char* sgi_status_2_str(SGIStatus_t statusP); - -//----------------------------------------------------------------------------- -// sgi_nf.c -//----------------------------------------------------------------------------- -#ifdef ENABLE_USE_NETFILTER_FOR_SGI -void* sgi_nf_fw_2_gtpv1u_thread(void *args_p); -#endif - -//----------------------------------------------------------------------------- -// sgi_pcap.c -//----------------------------------------------------------------------------- -#ifdef ENABLE_USE_PCAP_FOR_SGI -# define SGI_PCAPMAXBYTES2CAPTURE 65535 -# define SGI_PCAPTIMEDELAYKERNEL2USERSPACE 1000 - -/*! \fn void* sgi_pcap_loop(void*) -* \brief -* \param[in] devname The name of the device (ex "eth1") that will be listened for capturing packets. -* \param[in] iif The interface identifier that will be listened for capturing packets. -*/ -void* sgi_pcap_fw_2_gtpv1u_thread(void*); -#endif -//----------------------------------------------------------------------------- -// sgi_util.c -//----------------------------------------------------------------------------- -void sgi_print_hex_octets(unsigned char* dataP, unsigned long sizeP); -char* sgi_status_2_str (SGIStatus_t statusP); -char* sgi_arpopcode_2_str (unsigned short int opcodeP); -unsigned short in_cksum(unsigned short *addr, int len); -void sgi_send_arp_request(sgi_data_t *sgi_dataP, char* dst_ip_addrP); - -//----------------------------------------------------------------------------- -// sgi_socket.c -//----------------------------------------------------------------------------- -int sgi_create_sockets(sgi_data_t *sgi_data_p); -int sgi_send_data(uint8_t *buffer, uint32_t length, sgi_data_t *sgi_dataP, Teid_t originating_sgw_S1u_teidP); -int sgi_dgram_send_data(uint8_t *buffer_pP, uint32_t length, sgi_data_t *sgi_data_pP, Teid_t originating_sgw_S1u_teidP); - -#ifdef SGI_TEST -unsigned short in_cksum(unsigned short *addr, int len); -void sgi_test_send_ping(sgi_data_t *sgi_dataP, uint32_t markP, uint64_t src_mac_addrP, uint64_t dst_mac_addrP, char* src_ip_addrP, char* dst_ip_addrP); -#endif -#ifdef ENABLE_USE_RAW_SOCKET_FOR_SGI -void sgi_sock_raw_cleanup_handler(void *args_p); -void* sgi_sock_raw_fw_2_gtpv1u_thread(void* args_p); -#endif - -//----------------------------------------------------------------------------- -// sgi_egress.c -//----------------------------------------------------------------------------- -void sgi_forward_ip_packet(sgi_data_t *sgi_dataP, struct ether_header *ehP, int packet_sizeP, sgi_addr_mapping_t *addr_mappingP); -#ifdef ENABLE_USE_RAW_SOCKET_FOR_SGI -void sgi_process_raw_packet(sgi_data_t *sgi_dataP, unsigned char* dataP, int packet_sizeP); -#endif -void sgi_process_dgram_packet(sgi_data_t *sgi_dataP, unsigned char* dataP, int packet_sizeP); -#endif /* SGI_H_ */ diff --git a/openair-cn/SGI/sgi_egress.c b/openair-cn/SGI/sgi_egress.c deleted file mode 100755 index 526c088bdd..0000000000 --- a/openair-cn/SGI/sgi_egress.c +++ /dev/null @@ -1,427 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -/*! \file sgi_egress.c -* \brief -* \author Lionel Gauthier -* \company Eurecom -* \email: lionel.gauthier@eurecom.fr -*/ -#include -#include -#include -#include - - -#include "sgi.h" -#include "gtpv1u.h" -#include "intertask_interface.h" -#include "assertions.h" - -#include -#include -#include - - -struct ipv6hdr { - __u8 priority:4, - version:4; - __u8 flow_lbl[3]; - - __be16 payload_len; - __u8 nexthdr; - __u8 hop_limit; - - struct in6_addr saddr; - struct in6_addr daddr; -}; - -#ifdef ENABLE_USE_RAW_SOCKET_FOR_SGI - -#ifdef SGI_UE_ETHER_TRAFFIC -void sgi_process_raw_packet(sgi_data_t *sgi_data_pP, unsigned char* data_pP, int packet_sizeP) -{ - Gtpv1uTunnelDataReq *gtpv1u_tunnel_data_req_p = NULL; - MessageDef *message_p = NULL; - unsigned char *message_payload_p = NULL ; - struct ether_header *eh_p = (struct ether_header *) data_pP; - struct arphdr *arph_p = NULL; - struct iphdr *iph_p = NULL; - struct ipv6hdr *ip6h_p = NULL; - //struct arphdr *rarph = NULL; - //unsigned char *rarp_ptr = NULL; - //unsigned char *sha = NULL; /* Sender hardware address. */ - //unsigned char *tha = NULL; /* Target hardware address. */ - sgi_addr_mapping_t *addr_mapping_p = NULL; - //__be32 sip, tip; /* Sender, target IP address. */ - struct in6_addr dest6_addr; - u_int32_t dest4_addr; - struct in_addr in_dest_addr; - - - switch (htons(eh_p->ether_type)) { - - //******************* - case ETHERTYPE_IP: - //******************* - iph_p = (struct iphdr *) (data_pP + sizeof(struct ether_header)); - dest4_addr = iph_p->daddr; - - if (hashtable_get(sgi_data_pP->addr_v4_mapping, dest4_addr, (void**)&addr_mapping_p) == HASH_TABLE_OK) { - memcpy(eh_p->ether_dhost, addr_mapping_p->ue_mac_addr, ETH_ALEN); - //SGI_IF_DEBUG("--------------------------------------------------------------\n%s :\n", __FUNCTION__); - //sgi_print_hex_octets(data_pP, packet_sizeP); - - } else { - if (sgi_data_pP->ipv4_addr == dest4_addr) { - //SGI_IF_DEBUG("%s Dropping incoming egress IPV4 packet not UE IP flow\n", __FUNCTION__); - return; - } else { - in_dest_addr.s_addr = dest4_addr; - //SGI_IF_WARNING("%s Dropping incoming egress IPV4 packet, IPV4 dest %s not found \n", __FUNCTION__, inet_ntoa(in_dest_addr)); - return; - } - } - - break; - - - //******************* - case ETHERTYPE_IPV6: - //******************* - ip6h_p = (struct ipv6hdr *) (data_pP + sizeof(struct ether_header)); - memcpy(dest6_addr.__in6_u.__u6_addr8, ip6h_p->daddr.__in6_u.__u6_addr8, 16); - - if (obj_hashtable_get(sgi_data_pP->addr_v6_mapping, (void*)&dest6_addr, sizeof(struct in6_addr), (void**)&addr_mapping_p) == HASH_TABLE_OK) { - memcpy(eh_p->ether_dhost, addr_mapping_p->ue_mac_addr, ETH_ALEN); - //SGI_IF_DEBUG("--------------------------------------------------------------\n%s :\n", __FUNCTION__); - //sgi_print_hex_octets(data_pP, packet_sizeP); - } else { - //SGI_IF_WARNING("%s Dropping incoming egress IPV6 packet, IPV6 dest %X:%X:%X:%X:%X:%X:%X:%X not found \n", __FUNCTION__, NIP6ADDR(&dest6_addr)); - return; - } - - break; - - - //******************* - case ETHERTYPE_REVARP: - //******************* - SGI_IF_ERROR("%s UNHANDLED ETHERTYPE_REVARP of incoming egress packet\n", __FUNCTION__); - return; - break; - - - //******************* - case ETHERTYPE_ARP: - //******************* - SGI_IF_DEBUG("%s HANDLED ETHERTYPE_ARP of incoming egress packet\n", __FUNCTION__); - arph_p = (struct arphdr *) (data_pP + sizeof(struct ether_header)); -#ifdef SGI_UE_ETHER_TRAFFIC - // The entry should be here but all signalling tied with RRC procedures not finished so - // a data packet can arrive before the MODIFY_BEARER REQUEST - // get " unsigned char __ar_tip[4]; /* Target IP address. */" (from /usr/include/net/if_apr.h line 68) - memcpy(&dest4_addr, &((unsigned char*)(&arph_p[1]))[ETH_ALEN*2+4], 4); - SGI_IF_DEBUG("%s ARP OPCODE %s TARGET IP %d.%d.%d.%d\n", __FUNCTION__, sgi_arpopcode_2_str(ntohl(arph_p->ar_op)), NIPADDR(dest4_addr)); - - if (hashtable_get(sgi_data_pP->addr_v4_mapping, dest4_addr, (void**)&addr_mapping_p) == HASH_TABLE_OK) { - memcpy(eh_p->ether_dhost, addr_mapping_p->ue_mac_addr, ETH_ALEN); - } else { - if (sgi_data_pP->ipv4_addr == dest4_addr) { - //SGI_IF_DEBUG("%s Dropping incoming egress IPV4 packet not UE IP flow\n", __FUNCTION__); - return; - } else { - in_dest_addr.s_addr = dest4_addr; - //SGI_IF_WARNING("%s Dropping incoming egress IPV4 packet, IPV4 dest %s not found \n", __FUNCTION__, inet_ntoa(in_dest_addr)); - return; - } - } - -#else -#endif - break; - // rarph = (struct arphdr *)(data_pP + sizeof(struct ether_header)); - // - // // If it's not Ethernet, delete it. - // if (rarph->ar_pro != htons(ETH_P_IP)) { - // SGI_IF_ERROR("%s ARP PACKET PROTOCOL OG INCOMING PACKET IS NOT ETHERNET\n",__FUNCTION__); - // break; - // } - // rarp_ptr = (unsigned char *) (rarph + 1); - // sha = rarp_ptr; - // rarp_ptr += ETH_ALEN; - // memcpy(&sip, rarp_ptr, 4); - // rarp_ptr += 4; - // tha = rarp_ptr; - // rarp_ptr += ETH_ALEN; - // memcpy(&tip, rarp_ptr, 4); - // SGI_IF_DEBUG("%s ARP DEST IP transport IP = %d.%d.%d.%d\n",__FUNCTION__, NIPADDR(tip)); - // // TO DO IF NECESSARY - // break; - // - - default: - SGI_IF_ERROR("%s UNHANDLED ether type %d of incoming egress packet\n", __FUNCTION__, eh_p->ether_type); - return; - } - - message_p = itti_alloc_new_message(TASK_FW_IP, GTPV1U_TUNNEL_DATA_REQ); - - if (message_p == NULL) { - SGI_IF_ERROR("%s OUT OF MEMORY DROP EGRESS PACKET\n", __FUNCTION__); - return; - } - - message_payload_p = itti_malloc(TASK_FW_IP, TASK_GTPV1_U, packet_sizeP); - - if (message_payload_p == NULL) { - SGI_IF_ERROR("%s OUT OF MEMORY DROP EGRESS PACKET\n", __FUNCTION__); - return; - } - - memcpy(message_payload_p, data_pP, packet_sizeP); - - gtpv1u_tunnel_data_req_p = &message_p->ittiMsg.gtpv1uTunnelDataReq; - //LG HACK gtpv1u_tunnel_data_req_p->S1u_enb_teid = addr_mapping_p->enb_S1U_teid; -#warning forced S1u_enb_teid to 1 for testing, waiting for MODIFY_BEARER REQUEST - gtpv1u_tunnel_data_req_p->S1u_enb_teid = 1; - gtpv1u_tunnel_data_req_p->local_S1u_teid = addr_mapping_p->sgw_S1U_teid; - gtpv1u_tunnel_data_req_p->length = packet_sizeP; - gtpv1u_tunnel_data_req_p->buffer = message_payload_p; - SGI_IF_DEBUG("%s ETHER send GTPV1U_TUNNEL_DATA_REQ to GTPV1U S1u_enb_teid %u local_S1u_teid %u size %u\n", __FUNCTION__, gtpv1u_tunnel_data_req_p->S1u_enb_teid, - gtpv1u_tunnel_data_req_p->local_S1u_teid, packet_sizeP); - - itti_send_msg_to_task(TASK_GTPV1_U, INSTANCE_DEFAULT, message_p); - -} -#else -void sgi_process_raw_packet(sgi_data_t *sgi_data_pP, unsigned char* data_pP, int packet_sizeP) -{ - Gtpv1uTunnelDataReq *gtpv1u_tunnel_data_req_p = NULL; - MessageDef *message_p = NULL; - unsigned char *message_payload_p = NULL ; - struct ether_header *eh_p = (struct ether_header *) data_pP; - struct arphdr *arph_p = NULL; - struct iphdr *iph_p = NULL; - struct ipv6hdr *ip6h_p = NULL; - sgi_addr_mapping_t *addr_mapping_p = NULL; - struct in6_addr dest6_addr; - u_int32_t dest4_addr; - u_int32_t src4_addr; - struct in_addr in_dest_addr; - - - switch (htons(eh_p->ether_type)) { - //sgi_print_hex_octets(data_pP, packet_sizeP); - - //******************* - case ETHERTYPE_IP: - //******************* - iph_p = (struct iphdr *) (data_pP + sizeof(struct ether_header)); - dest4_addr = iph_p->daddr; - - if (hashtable_get(sgi_data_pP->addr_v4_mapping, dest4_addr, (void**)&addr_mapping_p) != HASH_TABLE_OK) { - if (sgi_data_pP->ipv4_addr == dest4_addr) { - //SGI_IF_DEBUG("%s Dropping incoming egress IPV4 packet not UE IP flow\n", __FUNCTION__); - return; - } else { - in_dest_addr.s_addr = dest4_addr; - //SGI_IF_WARNING("%s Dropping incoming egress IPV4 packet, IPV4 dest %s not found \n", __FUNCTION__, inet_ntoa(in_dest_addr)); - return; - } - } - - break; - - - //******************* - case ETHERTYPE_IPV6: - //******************* - ip6h_p = (struct ipv6hdr *) (data_pP + sizeof(struct ether_header)); - memcpy(dest6_addr.__in6_u.__u6_addr8, ip6h_p->daddr.__in6_u.__u6_addr8, 16); - - if (obj_hashtable_get(sgi_data_pP->addr_v6_mapping, (void*)&dest6_addr, sizeof(struct in6_addr), (void**)&addr_mapping_p) != HASH_TABLE_OK) { - SGI_IF_WARNING("%s Dropping incoming egress IPV6 packet, IPV6 dest %X:%X:%X:%X:%X:%X:%X:%X not found \n", __FUNCTION__, NIP6ADDR(&dest6_addr)); - return; - } - - break; - - - //******************* - case ETHERTYPE_REVARP: - //******************* - SGI_IF_ERROR("%s UNHANDLED ETHERTYPE_REVARP of incoming egress packet\n", __FUNCTION__); - return; - break; - - - //******************* - case ETHERTYPE_ARP: - //******************* - SGI_IF_DEBUG("%s HANDLED ETHERTYPE_ARP of incoming egress packet\n", __FUNCTION__); - arph_p = (struct arphdr *) (data_pP + sizeof(struct ether_header)); - // The entry should be here but all signalling tied with RRC procedures not finished so - // a data packet can arrive before the MODIFY_BEARER REQUEST - // get " unsigned char __ar_tip[4]; /* Target IP address. */" (from /usr/include/net/if_apr.h line 68) - memcpy(&dest4_addr, &((unsigned char*)(&arph_p[1]))[ETH_ALEN*2+4], 4); - SGI_IF_DEBUG("%s ARP OPCODE %s TARGET IP %d.%d.%d.%d\n", __FUNCTION__, sgi_arpopcode_2_str(ntohl(arph_p->ar_op)), NIPADDR(dest4_addr)); - - if (hashtable_get(sgi_data_pP->addr_v4_mapping, dest4_addr, (void**)&addr_mapping_p) != HASH_TABLE_OK) { - if (sgi_data_pP->ipv4_addr == dest4_addr) { - SGI_IF_DEBUG("%s Dropping incoming egress IPV4 packet not UE IP flow\n", __FUNCTION__); - return; - } else { - if (sgi_data_pP->hw_address_of_router_captured) { - in_dest_addr.s_addr = dest4_addr; - SGI_IF_WARNING("%s Dropping incoming egress IPV4 packet, IPV4 dest %s not found \n", __FUNCTION__, inet_ntoa(in_dest_addr)); - } else { - // may be a response to our ARP request to router - if (htons(arph_p->ar_op) == ARPOP_REPLY) { - memcpy(&src4_addr, &((unsigned char*)(&arph_p[1]))[ETH_ALEN], 4); - SGI_IF_DEBUG("%s FOR ROUTER HW ADDRESS COMPARING: %d - %d %d - %d\n", - __FUNCTION__, - sgi_data_pP->local_addr_v4_4_hw_address_router_capture, - dest4_addr, - sgi_data_pP->ipv4_addr_of_router, - src4_addr); - - if ((sgi_data_pP->local_addr_v4_4_hw_address_router_capture == dest4_addr) && (sgi_data_pP->ipv4_addr_of_router == src4_addr)) { - sgi_data_pP->hw_address_of_router_captured = 1; - sgi_data_pP->eh.ether_dhost[0] = ((unsigned char*)(&arph_p[1]))[0]; - sgi_data_pP->eh.ether_dhost[1] = ((unsigned char*)(&arph_p[1]))[1]; - sgi_data_pP->eh.ether_dhost[2] = ((unsigned char*)(&arph_p[1]))[2]; - sgi_data_pP->eh.ether_dhost[3] = ((unsigned char*)(&arph_p[1]))[3]; - sgi_data_pP->eh.ether_dhost[4] = ((unsigned char*)(&arph_p[1]))[4]; - sgi_data_pP->eh.ether_dhost[5] = ((unsigned char*)(&arph_p[1]))[5]; - SGI_IF_DEBUG("%s FOUND ROUTER HW ADDRESS: %02x:%02x:%02x:%02x:%02x:%02x\n", __FUNCTION__, NMACADDR(sgi_data_pP->eh.ether_dhost)); - } - } - } - - return; - } - } - - break; - - default: - //SGI_IF_ERROR("%s UNHANDLED ether type %d of incoming egress packet\n", __FUNCTION__, eh_p->ether_type); - return; - } - - //SGI_IF_DEBUG("--------------------------------------------------------------\n%s :\n", __FUNCTION__); - //sgi_print_hex_octets(data_pP+sizeof(sgi_data_pP->eh), packet_sizeP - sizeof(sgi_data_pP->eh)); - - message_p = itti_alloc_new_message(TASK_FW_IP, GTPV1U_TUNNEL_DATA_REQ); - - if (message_p == NULL) { - SGI_IF_ERROR("%s OUT OF MEMORY DROP EGRESS PACKET\n", __FUNCTION__); - return; - } - - AssertFatal((packet_sizeP - sizeof(sgi_data_pP->eh)) > 20, "BAD IP PACKET SIZE"); - message_payload_p = itti_malloc(TASK_FW_IP, TASK_GTPV1_U, packet_sizeP - sizeof(sgi_data_pP->eh) + GTPU_HEADER_OVERHEAD_MAX); - - if (message_payload_p == NULL) { - SGI_IF_ERROR("%s OUT OF MEMORY DROP EGRESS PACKET\n", __FUNCTION__); - return; - } - - memcpy(message_payload_p + GTPU_HEADER_OVERHEAD_MAX, data_pP+sizeof(sgi_data_pP->eh), packet_sizeP - sizeof(sgi_data_pP->eh)); - - gtpv1u_tunnel_data_req_p = &message_p->ittiMsg.gtpv1uTunnelDataReq; - gtpv1u_tunnel_data_req_p->S1u_enb_teid = addr_mapping_p->enb_S1U_teid; - //#warning forced S1u_enb_teid to 1 for testing, waiting for MODIFY_BEARER REQUEST - // gtpv1u_tunnel_data_req_p->S1u_enb_teid = 1; - gtpv1u_tunnel_data_req_p->local_S1u_teid = addr_mapping_p->sgw_S1U_teid; - gtpv1u_tunnel_data_req_p->length = packet_sizeP - sizeof(sgi_data_pP->eh); - gtpv1u_tunnel_data_req_p->offset = GTPU_HEADER_OVERHEAD_MAX; - gtpv1u_tunnel_data_req_p->buffer = message_payload_p; - SGI_IF_DEBUG("%s send GTPV1U_TUNNEL_DATA_REQ to GTPV1U S1u_enb_teid %u local_S1u_teid %u size %u\n", - __FUNCTION__, - gtpv1u_tunnel_data_req_p->S1u_enb_teid, - gtpv1u_tunnel_data_req_p->local_S1u_teid, - gtpv1u_tunnel_data_req_p->length); - - itti_send_msg_to_task(TASK_GTPV1_U, INSTANCE_DEFAULT, message_p); - -} -#endif -#endif -void sgi_process_dgram_packet(sgi_data_t *sgi_data_pP, unsigned char* data_pP, int packet_sizeP) -{ - Gtpv1uTunnelDataReq *gtpv1u_tunnel_data_req_p = NULL; - MessageDef *message_p = NULL; - unsigned char *message_payload_p = NULL ; - struct arphdr *arph_p = NULL; - struct iphdr *iph_p = NULL; - struct ipv6hdr *ip6h_p = NULL; - sgi_addr_mapping_t *addr_mapping_p = NULL; - struct in6_addr dest6_addr; - u_int32_t dest4_addr; - u_int32_t src4_addr; - struct in_addr in_dest_addr; - - sgi_print_hex_octets(data_pP, packet_sizeP); - - return; - message_p = itti_alloc_new_message(TASK_FW_IP, GTPV1U_TUNNEL_DATA_REQ); - - if (message_p == NULL) { - SGI_IF_ERROR("%s OUT OF MEMORY DROP EGRESS PACKET\n", __FUNCTION__); - return; - } - - AssertFatal(packet_sizeP > 20, "BAD IP PACKET SIZE"); - message_payload_p = itti_malloc(TASK_FW_IP, TASK_GTPV1_U, packet_sizeP + GTPU_HEADER_OVERHEAD_MAX); - - if (message_payload_p == NULL) { - SGI_IF_ERROR("%s OUT OF MEMORY DROP EGRESS PACKET\n", __FUNCTION__); - return; - } - - memcpy(message_payload_p + GTPU_HEADER_OVERHEAD_MAX, data_pP, packet_sizeP); - - gtpv1u_tunnel_data_req_p = &message_p->ittiMsg.gtpv1uTunnelDataReq; - gtpv1u_tunnel_data_req_p->S1u_enb_teid = addr_mapping_p->enb_S1U_teid; - //#warning forced S1u_enb_teid to 1 for testing, waiting for MODIFY_BEARER REQUEST - // gtpv1u_tunnel_data_req_p->S1u_enb_teid = 1; - gtpv1u_tunnel_data_req_p->local_S1u_teid = addr_mapping_p->sgw_S1U_teid; - gtpv1u_tunnel_data_req_p->length = packet_sizeP ; - gtpv1u_tunnel_data_req_p->offset = GTPU_HEADER_OVERHEAD_MAX; - gtpv1u_tunnel_data_req_p->buffer = message_payload_p; - SGI_IF_DEBUG("%s send GTPV1U_TUNNEL_DATA_REQ to GTPV1U S1u_enb_teid %u local_S1u_teid %u size %u\n", - __FUNCTION__, - gtpv1u_tunnel_data_req_p->S1u_enb_teid, - gtpv1u_tunnel_data_req_p->local_S1u_teid, - gtpv1u_tunnel_data_req_p->length); - - itti_send_msg_to_task(TASK_GTPV1_U, INSTANCE_DEFAULT, message_p); - -} diff --git a/openair-cn/SGI/sgi_nf.c b/openair-cn/SGI/sgi_nf.c deleted file mode 100755 index c81dcf64d6..0000000000 --- a/openair-cn/SGI/sgi_nf.c +++ /dev/null @@ -1,362 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -/*! \file sgi_nf.c -* \brief -* \author Lionel Gauthier -* \company Eurecom -* \email: lionel.gauthier@eurecom.fr -*/ -#include -#include - -#include -#include /* Defines verdicts (NF_ACCEPT, etc) */ -#include -#include -#include - -#include "mme_config.h" -#include "intertask_interface.h" -#include "sgi.h" -//----------------------------------------------------------------------------- -struct nfq_handle { - struct nfnl_handle *nfnlh; - struct nfnl_subsys_handle *nfnlssh; - struct nfq_q_handle *qh_list; -}; - -struct nfq_q_handle { - struct nfq_q_handle *next; - struct nfq_handle *h; - u_int16_t id; - - nfq_callback *cb; - void *data; -}; - -struct nfq_data { - struct nfattr **data; -}; - - -enum { - NFQ_XML_HW = (1 << 0), NFQ_XML_MARK = (1 << 1), NFQ_XML_DEV = (1 << 2), NFQ_XML_PHYSDEV = (1 << 3), - NFQ_XML_PAYLOAD = (1 << 4), NFQ_XML_TIME = (1 << 5), NFQ_XML_ALL = ~0U -}; -//------------------------------------------------------ -#define SNPRINTF_FAILURE(ret, rem, offset, len) \ -do { \ - if (ret < 0) \ - return ret; \ - len += ret; \ - if (ret > rem) \ - ret = rem; \ - offset += ret; \ - rem -= ret; \ -} while (0) - -//------------------------------------------------------ -static int nfq_snprintf(char *buf, size_t rem, struct nfq_data *tb, int flags) -//------------------------------------------------------ -{ - struct nfqnl_msg_packet_hdr *ph; - struct nfqnl_msg_packet_hw *hwph; - u_int32_t mark, ifi; - int size, offset = 0, len = 0, ret; - unsigned char *data; - - size = snprintf(buf + offset, rem, ""); - SNPRINTF_FAILURE(size, rem, offset, len); - - - - ph = nfq_get_msg_packet_hdr(tb); - - if (ph) { - size = snprintf(buf + offset, rem, - " %u %u", - ph->hook, ntohl(ph->packet_id)); - SNPRINTF_FAILURE(size, rem, offset, len); - - hwph = nfq_get_packet_hw(tb); - - if (hwph && (flags & NFQ_XML_HW)) { - int i, hlen = ntohs(hwph->hw_addrlen); - - size = snprintf(buf + offset, rem, "%04x" - "", - ntohs(ph->hw_protocol)); - SNPRINTF_FAILURE(size, rem, offset, len); - - size = snprintf(buf + offset, rem, ""); - SNPRINTF_FAILURE(size, rem, offset, len); - - for (i=0; ihw_addr[i]); - SNPRINTF_FAILURE(size, rem, offset, len); - } - - size = snprintf(buf + offset, rem, ""); - SNPRINTF_FAILURE(size, rem, offset, len); - } else if (flags & NFQ_XML_HW) { - size = snprintf(buf + offset, rem, "%04x" - "", - ntohs(ph->hw_protocol)); - SNPRINTF_FAILURE(size, rem, offset, len); - } - } - - mark = nfq_get_nfmark(tb); - - if (mark && (flags & NFQ_XML_MARK)) { - size = snprintf(buf + offset, rem, "%u", mark); - SNPRINTF_FAILURE(size, rem, offset, len); - } - - ifi = nfq_get_indev(tb); - - if (ifi && (flags & NFQ_XML_DEV)) { - size = snprintf(buf + offset, rem, "%u", ifi); - SNPRINTF_FAILURE(size, rem, offset, len); - } - - ifi = nfq_get_outdev(tb); - - if (ifi && (flags & NFQ_XML_DEV)) { - size = snprintf(buf + offset, rem, "%u", ifi); - SNPRINTF_FAILURE(size, rem, offset, len); - } - - ifi = nfq_get_physindev(tb); - - if (ifi && (flags & NFQ_XML_PHYSDEV)) { - size = snprintf(buf + offset, rem, - "%u", ifi); - SNPRINTF_FAILURE(size, rem, offset, len); - } - - ifi = nfq_get_physoutdev(tb); - - if (ifi && (flags & NFQ_XML_PHYSDEV)) { - size = snprintf(buf + offset, rem, - "%u", ifi); - SNPRINTF_FAILURE(size, rem, offset, len); - } - - ret = nfq_get_payload(tb, &data); - - if (ret >= 0 && (flags & NFQ_XML_PAYLOAD)) { - int i; - - size = snprintf(buf + offset, rem, ""); - SNPRINTF_FAILURE(size, rem, offset, len); - - for (i=0; i"); - SNPRINTF_FAILURE(size, rem, offset, len); - } - - size = snprintf(buf + offset, rem, ""); - SNPRINTF_FAILURE(size, rem, offset, len); - - return len; -} -//------------------------------------------------------ -static int sgi_nfqueue_callback(struct nfq_q_handle *myQueue, struct nfgenmsg *msg, - struct nfq_data *pkt, void *cbData) -//----------------------------------------------------------------------------- -{ - uint32_t id = 0; - struct nfqnl_msg_packet_hdr *header; - struct nfqnl_msg_packet_hw *macAddr; - MessageDef *message_p; - Gtpv1uTunnelDataReq *data_req_p; - Teid_t local_teid; - u_int32_t verdict; - - if ((header = nfq_get_msg_packet_hdr(pkt))) { - id = ntohl(header->packet_id); - SGI_IF_DEBUG("packet_id %u hw_protocol %u hook %u\n", ntohl(header->packet_id), ntohs(header->hw_protocol), header->hook); - } - - // The HW address is only fetchable at certain hook points - // LG Warning HW address is src address - macAddr = nfq_get_packet_hw(pkt); - - if (macAddr) { - SGI_IF_DEBUG("MAC len %u addr %02X:%02X:%02X:%02X:%02X:%02X\n", - ntohs(macAddr->hw_addrlen), - macAddr->hw_addr[0], - macAddr->hw_addr[1], - macAddr->hw_addr[2], - macAddr->hw_addr[3], - macAddr->hw_addr[4], - macAddr->hw_addr[5]); - } else { - SGI_IF_DEBUG("No MAC addr\n"); - } - - /*timeval tv; - if (!nfq_get_timestamp(pkt, &tv)) { - cout << "; tstamp " << tv.tv_sec << "." << tv.tv_usec; - } else { - cout << "; no tstamp"; - }*/ - - //cout << "; mark " << nfq_get_nfmark(pkt); - // Print the payload; in copy meta mode, only headers will be included; - // in copy packet mode, whole packet will be returned. - char *pktData; - int len = nfq_get_payload(pkt, &pktData); - - // Note that you can also get the physical devices - SGI_IF_DEBUG("pkt id %d recvd: indev %d outdev %d mark %d len %d\n", - id, - nfq_get_indev(pkt), - nfq_get_outdev(pkt), - nfq_get_nfmark(pkt), - len); - - - //sgi_print_hex_octets((unsigned char *)pktData, len); - - message_p = itti_alloc_new_message(TASK_FW_IP, GTPV1U_TUNNEL_DATA_REQ); - - if (message_p == NULL) { - return -1; - } - - data_req_p = &message_p->ittiMsg.gtpv1uTunnelDataReq; - data_req_p->buffer = malloc(sizeof(uint8_t) * len); - - if (data_req_p->buffer == NULL) { - SGI_IF_ERROR("Failed to allocate new buffer\n"); - itti_free(ITTI_MSG_ORIGIN_ID(message_p), message_p); - message_p = NULL; - return -1; - } else { - // MAY BE TO BE CHANGED - local_teid = nfq_get_nfmark(pkt); - - // if packet is marked, it is a packet going into a EPS bearer - //if (local_teid != 0) { - if (1) { - data_req_p->local_S1u_teid = local_teid; - - memcpy(data_req_p->buffer, pktData, len); - data_req_p->length = len; - - if (itti_send_msg_to_task(TASK_GTPV1_U, INSTANCE_DEFAULT, message_p) < 0) { - SGI_IF_ERROR("Failed to send message to task\n"); - itti_free(ITTI_MSG_ORIGIN_ID(message_p), message_p); - message_p = NULL; - } - - verdict = NF_STOLEN; - return nfq_set_verdict(myQueue, id, verdict, 0, NULL); - } else { - verdict = NF_ACCEPT; - return nfq_set_verdict(myQueue, id, verdict, len, pktData); - } - } - - return 0; - // end sgi_nfqueue_callback -} -//----------------------------------------------------------------------------- -void* sgi_nf_fw_2_gtpv1u_thread(void *args_p) -//----------------------------------------------------------------------------- -{ - struct nfq_handle *nfqHandle; - struct nfq_q_handle *myQueue; - struct nfnl_handle *netlinkHandle; - int fd, res; - volatile sgi_data_t *sgi_data_p; - - sgi_data_p = (sgi_data_t*)args_p; - - SGI_IF_DEBUG("RX thread on netfilter queue started, operating on Device %s iif %d\n", sgi_data_p->interface_name, sgi_data_p->interface_index); - - // Get a queue connection handle from the module - if (!(nfqHandle = nfq_open())) { - SGI_IF_ERROR("Error in nfq_open()"); - exit(-1); - } - - // Unbind the handler from processing any IP packets - // Not totally sure why this is done, or if it's necessary... - if (nfq_unbind_pf(nfqHandle, PF_INET) < 0) { - SGI_IF_ERROR("Error in nfq_unbind_pf()"); - exit(-1); - } - - // Bind this handler to process IP packets... - if (nfq_bind_pf(nfqHandle, PF_INET) < 0) { - SGI_IF_ERROR("Error in nfq_bind_pf()"); - exit(-1); - } - - // Install a callback on queue 1 - if (!(myQueue = nfq_create_queue(nfqHandle, 1, &sgi_nfqueue_callback, NULL))) { - SGI_IF_ERROR("Error in nfq_create_queue()"); - exit(-1); - } - - // Turn on packet copy mode - if (nfq_set_mode(myQueue, NFQNL_COPY_PACKET, 0xffff) < 0) { - SGI_IF_ERROR("Could not set packet copy mode"); - exit(-1); - } - - netlinkHandle = nfq_nfnlh(nfqHandle); - fd = nfnl_fd(netlinkHandle); - - SGI_IF_DEBUG("Waiting for egress packets\n"); - sgi_data_p->thread_started = 1; - - while ((res = recv(fd, &sgi_data_p->recv_buffer[sizeof(struct ether_header)], SGI_BUFFER_RECV_LEN, 0)) && res >= 0) { - // a callback mechanism is used - // rather than just handling it directly here, but that - // seems to be the convention... - nfq_handle_packet(nfqHandle, &sgi_data_p->recv_buffer[sizeof(struct ether_header)], res); - // end while receiving traffic - } - - nfq_destroy_queue(myQueue); - - nfq_close(nfqHandle); - - return NULL; -} diff --git a/openair-cn/SGI/sgi_pcap.c b/openair-cn/SGI/sgi_pcap.c deleted file mode 100755 index b81d743562..0000000000 --- a/openair-cn/SGI/sgi_pcap.c +++ /dev/null @@ -1,99 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -/*! \file sgi_pcap.c -* \brief -* \author Lionel Gauthier -* \company Eurecom -* \email: lionel.gauthier@eurecom.fr -*/ -#include -#include "sgi.h" - - -//--------------------------------------------------------------------------------------------------------------------- -void* sgi_pcap_fw_2_gtpv1u_thread(void* args_p) -{ - bpf_u_int32 netaddr = 0, mask = 0; // To store network address and netmask - struct bpf_program filter; // Place to store the BPF filter program - char errbuf[PCAP_ERRBUF_SIZE]; // Error buffer - struct pcap_pkthdr pkthdr; // Packet information (timestamp, size...) - const unsigned char *packet = NULL; // Received raw data - char filter_string[] = ""; - sgi_data_t *sgi_data_p; - - sgi_data_p = (sgi_data_t*)args_p; - - SGI_IF_DEBUG("[PCAP] Device is %s and iif is %d\n", sgi_data_p->interface_name, sgi_data_p->interface_index); - - memset(errbuf, 0, PCAP_ERRBUF_SIZE); - - sgi_data_p->pcap_descr = pcap_open_live(sgi_data_p->interface_name, SGI_PCAPMAXBYTES2CAPTURE, 0, SGI_PCAPTIMEDELAYKERNEL2USERSPACE, errbuf); - - if (sgi_data_p->pcap_descr == NULL) - SGI_IF_ERROR("Error %s", errbuf); - else if (*errbuf) - SGI_IF_WARNING("Warning %s\n", errbuf); - - // Look up info from the capture device - if (pcap_lookupnet(sgi_data_p->interface_name, &netaddr, &mask, errbuf) == -1) { - SGI_IF_ERROR("Can't get netmask for device %s\n", sgi_data_p->interface_name); - netaddr = 0; - mask = 0; - pthread_exit(NULL); - } - - // Compiles the filter expression into a BPF filter program - if (pcap_compile(sgi_data_p->pcap_descr, &filter, filter_string, 0, mask) == -1) { - SGI_IF_ERROR("Couldn't parse filter : %s\n", pcap_geterr(sgi_data_p->pcap_descr)); - pthread_exit(NULL); - } - - // Load the filter program into the packet capture device - if (pcap_setfilter(sgi_data_p->pcap_descr, &filter) == -1) { - SGI_IF_ERROR("Couldn't install filter: %s\n", pcap_geterr(sgi_data_p->pcap_descr)); - pthread_exit(NULL); - } - - pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL); - sgi_data_p->thread_started = 1; - - while (1) { - packet = pcap_next(sgi_data_p->pcap_descr, &pkthdr); // Get one packet - - if ( ( pkthdr.len > 0 ) && ( packet != NULL ) ) { - sgi_print_hex_octets(packet, pkthdr.len); - - if (packet[54] == 0x85) { // case ROUTER SOLICITATION WITH ETHERNET HEADER - } - } - } - - pthread_exit(NULL); -} - diff --git a/openair-cn/SGI/sgi_socket.c b/openair-cn/SGI/sgi_socket.c deleted file mode 100644 index a73fcbd9d2..0000000000 --- a/openair-cn/SGI/sgi_socket.c +++ /dev/null @@ -1,1035 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -/*! \file sgi_socket.c -* \brief -* \author Lionel Gauthier -* \company Eurecom -* \email: lionel.gauthier@eurecom.fr -*/ -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include //mmap - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#ifndef SGI_UE_ETHER_TRAFFIC -#include -#endif - - -#include -#include -#include "sgi.h" -#include "intertask_interface.h" - - -//static char sgi_command_buffer[256]; - -#define HW_ADDRESS "%02x:%02x:%02x:%02x:%02x:%02x" -#define HW_ADDRESS_FORMAT(iFR) \ - (uint8_t)(iFR)[0], \ - (uint8_t)(iFR)[1], \ - (uint8_t)(iFR)[2], \ - (uint8_t)(iFR)[3], \ - (uint8_t)(iFR)[4], \ - (uint8_t)(iFR)[5] - -#define IPV4_ADDR "%u.%u.%u.%u" -#define IPV4_ADDR_FORMAT(aDDRESS) \ - (uint8_t)((aDDRESS) & 0x000000ff), \ - (uint8_t)(((aDDRESS) & 0x0000ff00) >> 8 ), \ - (uint8_t)(((aDDRESS) & 0x00ff0000) >> 16), \ - (uint8_t)(((aDDRESS) & 0xff000000) >> 24) - -struct ipv6hdr { - __u8 priority:4, - version:4; - __u8 flow_lbl[3]; - - __be16 payload_len; - __u8 nexthdr; - __u8 hop_limit; - - struct in6_addr saddr; - struct in6_addr daddr; -}; - - -/// The number of frames in the ring -// This number is not set in stone. Nor are block_size, block_nr or frame_size -#define CONF_RING_FRAMES 128 - -/// Offset of data from start of frame -#define PKT_OFFSET (TPACKET_ALIGN(sizeof(struct tpacket_hdr)) + \ - TPACKET_ALIGN(sizeof(struct sockaddr_ll))) - -int sgi_create_vlan_interface(char *interface_nameP, int vlan_idP) -{ - char vlan_interface_name[IFNAMSIZ]; - char command_line[256]; - int ret = 0; - - ret = sprintf(vlan_interface_name, "%s.%d", interface_nameP, vlan_idP); - - if (ret > 0) { - ret = sprintf(command_line, "ifconfig %s down > /dev/null 2>&1", vlan_interface_name); - - if (ret > 0) ret = system(command_line); - else return -1; - - ret = sprintf(command_line, "vconfig rem %s > /dev/null 2>&1", vlan_interface_name); - - if (ret > 0) ret = system(command_line); - else return -1; - - ret = sprintf(command_line, "vconfig add %s %d", interface_nameP, vlan_idP); - - if (ret > 0) ret = system(command_line); - else return -1; - - ret = sprintf(command_line, "ifconfig %s up", vlan_interface_name); - - if (ret > 0) ret = system(command_line); - else return -1; - - ret = sprintf(command_line, "sync"); - - if (ret > 0) ret = system(command_line); - else return -1; - - //ret = sprintf(command_line, "ip -4 addr add 10.0.%d.2/24 dev %s", vlan_idP+200, vlan_interface_name); - //if (ret > 0) ret = system(command_line); else return -1; - return 0; - } else { - return -1; - } -} - - -int sgi_create_sockets(sgi_data_t *sgi_data_p) -{ -#ifdef SGI_SOCKET_BIND_TO_IF - struct sockaddr_ll socket_address; - char if_name[16]; -#endif -#ifdef SGI_MARKING - int value = 0; - const int *val_p=&value; -#endif -#ifdef SGI_PACKET_RX_RING - struct tpacket_req tp; -#endif - uint32_t i = 0; -#ifndef SGI_UE_ETHER_TRAFFIC - FILE *fp = NULL; - char filename[128]; - int rc = 0; - char *router_mac_addr = NULL; - int b = 0; - char addr_mac_byte[16]; -#endif - - if (sgi_data_p == NULL) { - return -1; - } - - SGI_IF_DEBUG("Creating sockets for sgi on interface %s\n", sgi_data_p->interface_name); - - // qci = 0 is for the default bearers QOS, Non-GBR - /* Create a RAW IP socket and request for all internet IP traffic */ - // work - for (i = 0; i < SGI_MAX_EPS_BEARERS_PER_USER; i++) { - - sgi_create_vlan_interface(sgi_data_p->interface_name,i+SGI_MIN_EPS_BEARER_ID); - - // works also -#if defined SGI_SOCKET_RAW - sgi_data_p->sd[i] = socket(PF_PACKET, SOCK_RAW, htons(IPPROTO_RAW)); -#else -#if defined SGI_SOCKET_DGRAM - SGI_IF_DEBUG("Created socket PF_PACKET/SOCK_DGRAM/ETH_P_ALL\n",strerror(errno), errno); - sgi_data_p->sd[i] = socket(PF_PACKET, SOCK_DGRAM, htons(ETH_P_ALL)); -#endif -#endif - //sgi_data_p->sd[i] = socket(AF_INET, SOCK_RAW, ETH_P_IP); - //sgi_data_p->sd[i] = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_IP)); - - if (sgi_data_p->sd[i] < 0) { - SGI_IF_ERROR("Error during socket creation (%s:%d)\n",strerror(errno), errno); - goto error; - } - - /* socket options, tell the kernel we provide the IP structure - int one = 1; - const int *val = &one; - if(setsockopt(sgi_data_p->sd[i], IPPROTO_IP, IP_HDRINCL, val, sizeof(one)) < 0) - { - SGI_IF_ERROR("Error during socket setsockopt IP_HDRINCL (%s:%d)\n", strerror(errno), errno); - goto error; - }*/ - - -#ifdef SGI_MARKING - // setting socket option to use MARK value - //value = rab_id + SGI_MIN_EPS_BEARER_ID; - value = 5; - - if (setsockopt (sgi_data_p->sd[i], SOL_SOCKET, SO_MARK, val_p, sizeof (value)) < 0) { - SGI_IF_ERROR("error notifying kernel about MARK"); - goto error; - } - - SGI_IF_DEBUG("Created socket %d for rab_id %d (for any UE context)\n", sgi_data_p->sd[i], value); -#endif - -#ifdef SGI_PACKET_RX_RING - // tell kernel to export data through mmap()ped ring - tp.tp_block_size = CONF_RING_FRAMES * getpagesize(); - tp.tp_block_nr = 1; - tp.tp_frame_size = getpagesize(); - tp.tp_frame_nr = CONF_RING_FRAMES; - - if (setsockopt(sgi_data_p->sd[i], SOL_PACKET, PACKET_RX_RING, (void*) &tp, sizeof(tp))) { - SGI_IF_ERROR("setsockopt() ring\n"); - goto error; - } - - // open ring - sgi_data_p->sock_mmap_ring = mmap(0, tp.tp_block_size * tp.tp_block_nr, PROT_READ | PROT_WRITE, MAP_SHARED, sgi_data_p->sd[i], 0); - - if (!sgi_data_p->sock_mmap_ring) { - SGI_IF_ERROR("Failed to mmap socket (%s:%d)\n", strerror(errno), errno); - goto error; - } - - /* Setup our ringbuffer */ - sgi_data_p->malloc_ring = malloc(tp.tp_frame_nr * sizeof(struct iovec)); - - for(i=0; imalloc_ring[i].iov_base=(void *)((long)sgi_data_p->sock_mmap_ring)+(i*tp.tp_frame_size); - sgi_data_p->malloc_ring[i].iov_len=tp.tp_frame_size; - } - -#endif - -#ifdef SGI_SOCKET_BIND_TO_IF - sprintf(if_name, "%s.%d",sgi_data_p->interface_name,i+SGI_MIN_EPS_BEARER_ID); - - memset(&socket_address, 0, sizeof(struct sockaddr_ll)); - socket_address.sll_family = AF_PACKET; //always PF_PACKET - - //socket_address.sll_addr = ;// Filled when we want to tx - //socket_address.sll_halen = ;// Filled when we want to tx - //socket_address.sll_family ;// Filled when we want to tx - - //socket_address.sll_hatype = ;// Filled when packet received - //socket_address.sll_pkttype = ;// Filled when packet received - sgi_data_p->if_index[i] = if_nametoindex(if_name); - socket_address.sll_ifindex = sgi_data_p->if_index[i]; - //LG 2014-11-07socket_address.sll_protocol = htons(ETH_P_IP);/* Protocol phy level */ - socket_address.sll_protocol = htons(ETH_P_ALL); - - // Now we can bind the socket to send the IP traffic - if (bind(sgi_data_p->sd[i], (struct sockaddr *)&socket_address, sizeof(struct sockaddr_ll)) < 0) { - SGI_IF_ERROR("Bind socket to %s (%s:%d)\n", if_name, strerror(errno), errno); - goto error; - } else { - SGI_IF_DEBUG("Bind EPS bearer ID %d socket %d to %s\n", - i+SGI_MIN_EPS_BEARER_ID, sgi_data_p->sd[i], if_name); - } - -#endif - - } - -#ifndef SGI_SOCKET_DGRAM - - if (sprintf(filename, "/sys/class/net/%s/address", sgi_data_p->interface_name) <= 0 ) { - SGI_IF_ERROR("Build of file name /sys/class/net/sgi_if_name/address Failed (%s:%d)\n", strerror(errno), errno); - goto error; - } - - fp = fopen(filename, "r"); - - if (fp) { - rc = fscanf(fp, "%hhx:%hhx:%hhx:%hhx:%hhx:%hhx", - &sgi_data_p->interface_hw_address[0], - &sgi_data_p->interface_hw_address[1], - &sgi_data_p->interface_hw_address[2], - &sgi_data_p->interface_hw_address[3], - &sgi_data_p->interface_hw_address[4], - &sgi_data_p->interface_hw_address[5]); - fclose(fp); - - if (rc <= 0) { - SGI_IF_ERROR("ERROR reading %s\n" ,filename); - goto error; - } - } else { - SGI_IF_ERROR("Correct /sys/class/net/sgi_if_name file not found\n"); - goto error; - } - - memcpy((void*)(&sgi_data_p->eh.ether_shost[0]), (void*)(&sgi_data_p->interface_hw_address[0]), ETH_ALEN); - router_mac_addr = getenv("MAC_ROUTER"); - - if (router_mac_addr == NULL) { - SGI_IF_ERROR("ERROR getting ENV variable MAC_ROUTER, should be set by start script\n"); - goto error; - } - - for (b = 0 ; b < 6; b++) { - strncpy(addr_mac_byte, router_mac_addr+2*b, 2); - addr_mac_byte[2] = '\0'; - // we can do (unsigned int*) because x86 processors are little-endian - // (done for suppressing a warning) - rc = sscanf ((const char*)addr_mac_byte, "%02x", (uint32_t*)&i); - - if (rc < 1) { - SGI_IF_ERROR("Error in converting string MAC_ROUTER address %s in char array\n", router_mac_addr); - goto error; - } - - sgi_data_p->eh.ether_dhost[b] = (i & 0x000000FF); - } - - SGI_IF_DEBUG("Found MAC address for ROUTER : %02x:%02x:%02x:%02x:%02x:%02x\n", - NMACADDR(sgi_data_p->eh.ether_dhost)); - -#ifdef VLAN8021Q - sgi_data_p->eh.ether_vlan8021q.vlan_tpid = htons(0x8100); - sgi_data_p->eh.ether_vlan8021q.vlan_tci = htons(0x7000 | 0x0000 | 0x0000); -#endif - SGI_IF_DEBUG("Found MAC address for SGI IF %s: %02x:%02x:%02x:%02x:%02x:%02x\n", - sgi_data_p->interface_name, NMACADDR(sgi_data_p->eh.ether_shost)); - -#endif - return 0; -error: - SGI_IF_ERROR("ERROR (%s)\n", strerror(errno)); - - for (i=0; isd[i] > 0) { - close(sgi_data_p->sd[i]); - } - - sgi_data_p->sd[i] = -1; - } - - return -1; -} -#ifdef SGI_UE_ETHER_TRAFFIC -int sgi_send_data(uint8_t *buffer_pP, uint32_t length, sgi_data_t *sgi_data_pP, Teid_t originating_sgw_S1u_teidP) -{ - struct ether_header *eh_p = (struct ether_header *) buffer_pP; - struct iphdr *iph_p = NULL; - struct arphdr *arph_p = NULL; - struct ipv6hdr *ip6h_p = NULL; - sgi_teid_mapping_t *mapping_p = NULL; - sgi_addr_mapping_t *addr_mapping_p = NULL; - hashtable_rc_t hash_rc; - struct in6_addr src6_addr; /* source address */ - struct in6_addr *src6_addr_p; /* source address */ - u_int32_t src4_addr; - - if (buffer_pP == NULL) { - SGI_IF_ERROR("sgi_send_data: received bad parameter\n"); - return -1; - } - - // get IP version of this packet - switch (htons(eh_p->ether_type)) { - - //******************* - case ETHERTYPE_IP: - //******************* - iph_p = (struct iphdr *) (buffer_pP + sizeof(struct ether_header)); - // The entry should be here but all signalling tied with RRC procedures not finished so - // a data packet can arrive before the MODIFY_BEARER REQUEST - src4_addr = iph_p->saddr; - - if (hashtable_get(sgi_data_pP->addr_v4_mapping, src4_addr, (void**)&addr_mapping_p) != HASH_TABLE_OK) { - hash_rc = hashtable_get(sgi_data_pP->teid_mapping, originating_sgw_S1u_teidP, (void**)&mapping_p); - - if (hash_rc == HASH_TABLE_KEY_NOT_EXISTS) { - SGI_IF_ERROR("%s Error unknown context SGW teid %d\n", __FUNCTION__, originating_sgw_S1u_teidP); - return -1; - } else { - if (mapping_p->is_outgoing_ipv4_packet_seen == 0) { - mapping_p->hw_addrlen = ETH_ALEN; // TO DO - memcpy(mapping_p->ue_mac_addr, eh_p->ether_shost, ETH_ALEN); - mapping_p->is_outgoing_ipv4_packet_seen = 1; - mapping_p->in_add_captured.s_addr = src4_addr; - - addr_mapping_p = calloc(1, sizeof(sgi_addr_mapping_t)); - memcpy(addr_mapping_p->ue_mac_addr, eh_p->ether_shost, ETH_ALEN); - addr_mapping_p->is_outgoing_packet_seen = 1; - addr_mapping_p->enb_S1U_teid = mapping_p->enb_S1U_teid; - addr_mapping_p->sgw_S1U_teid = originating_sgw_S1u_teidP; - hashtable_insert(sgi_data_pP->addr_v4_mapping, src4_addr, (void*)addr_mapping_p); - SGI_IF_DEBUG("%s ASSOCIATED %d.%d.%d.%d to MAC %02x:%02x:%02x:%02x:%02x:%02x teid %d\n", - __FUNCTION__, NIPADDR(src4_addr), NMACADDR(eh_p->ether_shost), originating_sgw_S1u_teidP); - } else { - SGI_IF_ERROR("Error IPv4 address already registered for teid %d\n", originating_sgw_S1u_teidP); - return -1; - } - } - - } else { - hash_rc = hashtable_get(sgi_data_pP->teid_mapping, originating_sgw_S1u_teidP, (void**)&mapping_p); - } - - break; - - //******************* - case ETHERTYPE_ARP: - //******************* - arph_p = (struct arphdr *) (buffer_pP + sizeof(struct ether_header)); - // The entry should be here but all signalling tied with RRC procedures not finished so - // a data packet can arrive before the MODIFY_BEARER REQUEST - memcpy(&src4_addr, &((unsigned char*)(&arph_p[1]))[ETH_ALEN], 4); - SGI_IF_ERROR("%s ARP OPCODE %s TARGET IP %d.%d.%d.%d\n", __FUNCTION__, sgi_arpopcode_2_str(ntohl(arph_p->ar_op)), NIPADDR(src4_addr)); - - if (hashtable_get(sgi_data_pP->addr_v4_mapping, src4_addr, (void**)&addr_mapping_p) != HASH_TABLE_OK) { - hash_rc = hashtable_get(sgi_data_pP->teid_mapping, originating_sgw_S1u_teidP, (void**)&mapping_p); - - if (hash_rc == HASH_TABLE_KEY_NOT_EXISTS) { - SGI_IF_ERROR("%s Error unknown context SGW teid %d\n", __FUNCTION__, originating_sgw_S1u_teidP); - return -1; - } else { - if (mapping_p->is_outgoing_ipv4_packet_seen == 0) { - mapping_p->hw_addrlen = ETH_ALEN; // TO DO - memcpy(mapping_p->ue_mac_addr, eh_p->ether_shost, ETH_ALEN); - mapping_p->is_outgoing_ipv4_packet_seen = 1; - mapping_p->in_add_captured.s_addr = src4_addr; - - addr_mapping_p = calloc(1, sizeof(sgi_addr_mapping_t)); - memcpy(addr_mapping_p->ue_mac_addr, eh_p->ether_shost, ETH_ALEN); - addr_mapping_p->is_outgoing_packet_seen = 1; - addr_mapping_p->enb_S1U_teid = mapping_p->enb_S1U_teid; - addr_mapping_p->sgw_S1U_teid = originating_sgw_S1u_teidP; - hashtable_insert(sgi_data_pP->addr_v4_mapping, src4_addr, (void*)addr_mapping_p); - SGI_IF_DEBUG("%s ASSOCIATED %d.%d.%d.%d to MAC %02x:%02x:%02x:%02x:%02x:%02x teid %d\n", - __FUNCTION__, NIPADDR(src4_addr), NMACADDR(eh_p->ether_shost), originating_sgw_S1u_teidP); - } else { - SGI_IF_ERROR("Error IPv4 address already registered for teid %d\n", originating_sgw_S1u_teidP); - return -1; - } - } - - } else { - hash_rc = hashtable_get(sgi_data_pP->teid_mapping, originating_sgw_S1u_teidP, (void**)&mapping_p); - } - - break; - - - //******************* - case ETHERTYPE_IPV6: - ip6h_p = (struct ipv6hdr *) (buffer_pP + sizeof(struct ether_header)); - - if (obj_hashtable_get(sgi_data_pP->addr_v6_mapping, &src6_addr, sizeof(struct in6_addr), (void**)&addr_mapping_p) != HASH_TABLE_OK) { - hash_rc = hashtable_get(sgi_data_pP->teid_mapping, originating_sgw_S1u_teidP, (void**)&mapping_p); - - if (hash_rc == HASH_TABLE_KEY_NOT_EXISTS) { - SGI_IF_ERROR("%s Error unknown context SGW teid %d\n", __FUNCTION__, originating_sgw_S1u_teidP); - return -1; - } else { - - if (mapping_p->is_outgoing_ipv6_packet_seen < MAX_DEFINED_IPV6_ADDRESSES_PER_UE) { - mapping_p->hw_addrlen = ETH_ALEN; - memcpy(mapping_p->ue_mac_addr, eh_p->ether_shost, ETH_ALEN); - - memcpy(&mapping_p->in6_addr_captured[mapping_p->is_outgoing_ipv6_packet_seen].s6_addr, src6_addr.s6_addr, 16); - mapping_p->is_outgoing_ipv6_packet_seen +=1; - - addr_mapping_p = calloc(1, sizeof(sgi_addr_mapping_t)); - memcpy(addr_mapping_p->ue_mac_addr, eh_p->ether_shost, ETH_ALEN); - addr_mapping_p->is_outgoing_packet_seen = 1; - addr_mapping_p->enb_S1U_teid = mapping_p->enb_S1U_teid; - addr_mapping_p->sgw_S1U_teid = originating_sgw_S1u_teidP; - - src6_addr_p = malloc(sizeof(struct in6_addr)); - - if (src6_addr_p == NULL) { - return -1; - } - - memcpy(src6_addr_p->s6_addr, ip6h_p->saddr.s6_addr, 16); - obj_hashtable_insert(sgi_data_pP->addr_v6_mapping, src6_addr_p,sizeof(struct in6_addr), (void*)addr_mapping_p); - } else { - SGI_IF_ERROR("Error TOO MANY IPv6 address already registered for teid %d\n", originating_sgw_S1u_teidP); - return -1; - } - } - - } else { - hash_rc = hashtable_get(sgi_data_pP->teid_mapping, originating_sgw_S1u_teidP, (void**)&mapping_p); - } - - break; - - default: - SGI_IF_WARNING("%s UNHANDLED ETHERTYPE: %X\n", __FUNCTION__, htons(eh_p->ether_type)); - break; - } - - assert(mapping_p != NULL); - - if (send(sgi_data_pP->sd[mapping_p->eps_bearer_id - SGI_MIN_EPS_BEARER_ID], (void *)buffer_pP, length, 0) < 0) { - SGI_IF_ERROR("Error during send to socket %d bearer id %d : (%s:%d)\n", - sgi_data_pP->sd[mapping_p->eps_bearer_id - SGI_MIN_EPS_BEARER_ID], - mapping_p->eps_bearer_id, - strerror(errno), - errno); - return -1; - } - - return 0; -} -#else -int sgi_send_data(uint8_t *buffer_pP, uint32_t length, sgi_data_t *sgi_data_pP, Teid_t originating_sgw_S1u_teidP) -{ - struct iphdr *iph_p = (struct iphdr *) buffer_pP; - struct ipv6hdr *ip6h_p = (struct ipv6hdr *) buffer_pP; - sgi_teid_mapping_t *mapping_p = NULL; - sgi_addr_mapping_t *addr_mapping_p = NULL; - hashtable_rc_t hash_rc; - struct in6_addr src6_addr; /* source address */ - struct in6_addr *src6_addr_p; /* source address */ - u_int32_t src4_addr; - struct iovec iov[2]; - - if (buffer_pP == NULL) { - SGI_IF_ERROR("sgi_send_data: received bad parameter\n"); - return -1; - } - - // get IP version of this packet - switch (iph_p->version) { - - //******************* - case 4: - //******************* - // The entry should be here but all signalling tied with RRC procedures not finished so - // a data packet can arrive before the MODIFY_BEARER REQUEST - sgi_data_pP->eh.ether_type = htons(ETHERTYPE_IP); - src4_addr = iph_p->saddr; - - if (hashtable_get(sgi_data_pP->addr_v4_mapping, src4_addr, (void**)&addr_mapping_p) != HASH_TABLE_OK) { - hash_rc = hashtable_get(sgi_data_pP->teid_mapping, originating_sgw_S1u_teidP, (void**)&mapping_p); - - if (hash_rc == HASH_TABLE_KEY_NOT_EXISTS) { - SGI_IF_ERROR("%s Error unknown context SGW teid %d\n", __FUNCTION__, originating_sgw_S1u_teidP); - return -1; - } else { - if (mapping_p->is_outgoing_ipv4_packet_seen == 0) { - mapping_p->hw_addrlen = ETH_ALEN; // TO DO - mapping_p->is_outgoing_ipv4_packet_seen = 1; - mapping_p->in_add_captured.s_addr = src4_addr; - - addr_mapping_p = calloc(1, sizeof(sgi_addr_mapping_t)); - addr_mapping_p->is_outgoing_packet_seen = 1; - addr_mapping_p->enb_S1U_teid = mapping_p->enb_S1U_teid; - addr_mapping_p->sgw_S1U_teid = originating_sgw_S1u_teidP; - hashtable_insert(sgi_data_pP->addr_v4_mapping, src4_addr, (void*)addr_mapping_p); - SGI_IF_DEBUG("%s ASSOCIATED %d.%d.%d.%d to teid %d\n", - __FUNCTION__, NIPADDR(src4_addr), originating_sgw_S1u_teidP); - } else { - SGI_IF_ERROR("Error IPv4 address already registered for teid %d\n", originating_sgw_S1u_teidP); - return -1; - } - } - - } else { - hash_rc = hashtable_get(sgi_data_pP->teid_mapping, originating_sgw_S1u_teidP, (void**)&mapping_p); - } - - break; - - - - //******************* - case 6: - sgi_data_pP->eh.ether_type = htons(ETHERTYPE_IPV6); - - if (obj_hashtable_get(sgi_data_pP->addr_v6_mapping, &src6_addr, sizeof(struct in6_addr), (void**)&addr_mapping_p) != HASH_TABLE_OK) { - hash_rc = hashtable_get(sgi_data_pP->teid_mapping, originating_sgw_S1u_teidP, (void**)&mapping_p); - - if (hash_rc == HASH_TABLE_KEY_NOT_EXISTS) { - SGI_IF_ERROR("%s Error unknown context SGW teid %d\n", __FUNCTION__, originating_sgw_S1u_teidP); - return -1; - } else { - - if (mapping_p->is_outgoing_ipv6_packet_seen < MAX_DEFINED_IPV6_ADDRESSES_PER_UE) { - mapping_p->hw_addrlen = 0; - - memcpy(&mapping_p->in6_addr_captured[mapping_p->is_outgoing_ipv6_packet_seen].s6_addr, src6_addr.s6_addr, 16); - mapping_p->is_outgoing_ipv6_packet_seen +=1; - - addr_mapping_p = calloc(1, sizeof(sgi_addr_mapping_t)); - addr_mapping_p->is_outgoing_packet_seen = 1; - addr_mapping_p->enb_S1U_teid = mapping_p->enb_S1U_teid; - addr_mapping_p->sgw_S1U_teid = originating_sgw_S1u_teidP; - - src6_addr_p = malloc(sizeof(struct in6_addr)); - - if (src6_addr_p == NULL) { - return -1; - } - - memcpy(src6_addr_p->s6_addr, ip6h_p->saddr.s6_addr, 16); - obj_hashtable_insert(sgi_data_pP->addr_v6_mapping, src6_addr_p,sizeof(struct in6_addr), (void*)addr_mapping_p); - } else { - SGI_IF_ERROR("Error TOO MANY IPv6 address already registered for teid %d\n", originating_sgw_S1u_teidP); - return -1; - } - } - - } else { - hash_rc = hashtable_get(sgi_data_pP->teid_mapping, originating_sgw_S1u_teidP, (void**)&mapping_p); - } - - break; - - default: - SGI_IF_WARNING("%s UNHANDLED IP VERSION: %X\n", __FUNCTION__, iph_p->version); - break; - } - - assert(mapping_p != NULL); - iov[0].iov_base = &sgi_data_pP->eh; - iov[0].iov_len = sizeof(sgi_data_pP->eh); - iov[1].iov_base = (void *)buffer_pP; - iov[1].iov_len = length; -#ifdef VLAN8021Q - sgi_data_pP->eh.ether_vlan8021q.vlan_tci = htons(0x7000 | 0x0000 | mapping_p->eps_bearer_id); -#endif - - //sgi_print_hex_octets(iov[0].iov_base, iov[0].iov_len); - //sgi_print_hex_octets(iov[1].iov_base, iov[1].iov_len); - if (writev(sgi_data_pP->sd[mapping_p->eps_bearer_id - SGI_MIN_EPS_BEARER_ID], (const struct iovec *)iov, 2) < 0) { - SGI_IF_ERROR("Error during writev to socket %d bearer id %d : (%s:%d)\n", - sgi_data_pP->sd[mapping_p->eps_bearer_id - SGI_MIN_EPS_BEARER_ID], - mapping_p->eps_bearer_id, - strerror(errno), - errno); - return -1; - } - - /* if (send(sgi_data_pP->sd[mapping_p->eps_bearer_id - SGI_MIN_EPS_BEARER_ID], (void *)buffer_pP, length, 0) < 0) { - SGI_IF_ERROR("Error during send to socket %d bearer id %d : (%s:%d)\n", - sgi_data_pP->sd[mapping_p->eps_bearer_id - SGI_MIN_EPS_BEARER_ID], - mapping_p->eps_bearer_id, - strerror(errno), - errno); - return -1; - } - */ - return 0; -} - -#endif -int sgi_dgram_send_data(uint8_t *buffer_pP, uint32_t length, sgi_data_t *sgi_data_pP, Teid_t originating_sgw_S1u_teidP) -{ - struct iphdr *iph_p = (struct iphdr *) buffer_pP; - struct ipv6hdr *ip6h_p = (struct ipv6hdr *) buffer_pP; - sgi_teid_mapping_t *mapping_p = NULL; - sgi_addr_mapping_t *addr_mapping_p = NULL; - hashtable_rc_t hash_rc; - struct in6_addr src6_addr; /* source address */ - struct in6_addr *src6_addr_p; /* source address */ - u_int32_t src4_addr; - - struct sockaddr_ll device; - - if (buffer_pP == NULL) { - SGI_IF_ERROR("sgi_send_data: received bad parameter\n"); - return -1; - } - - // get IP version of this packet - switch (iph_p->version) { - - //******************* - case 4: - //******************* - // The entry should be here but all signalling tied with RRC procedures not finished so - // a data packet can arrive before the MODIFY_BEARER REQUEST - sgi_data_pP->eh.ether_type = htons(ETHERTYPE_IP); - src4_addr = iph_p->saddr; - - if (hashtable_get(sgi_data_pP->addr_v4_mapping, src4_addr, (void**)&addr_mapping_p) != HASH_TABLE_OK) { - hash_rc = hashtable_get(sgi_data_pP->teid_mapping, originating_sgw_S1u_teidP, (void**)&mapping_p); - - if (hash_rc == HASH_TABLE_KEY_NOT_EXISTS) { - SGI_IF_ERROR("%s Error unknown context SGW teid %d\n", __FUNCTION__, originating_sgw_S1u_teidP); - return -1; - } else { - if (mapping_p->is_outgoing_ipv4_packet_seen == 0) { - mapping_p->hw_addrlen = 0; // TO DO - mapping_p->is_outgoing_ipv4_packet_seen = 1; - mapping_p->in_add_captured.s_addr = src4_addr; - - addr_mapping_p = calloc(1, sizeof(sgi_addr_mapping_t)); - addr_mapping_p->is_outgoing_packet_seen = 1; - addr_mapping_p->enb_S1U_teid = mapping_p->enb_S1U_teid; - addr_mapping_p->sgw_S1U_teid = originating_sgw_S1u_teidP; - hashtable_insert(sgi_data_pP->addr_v4_mapping, src4_addr, (void*)addr_mapping_p); - SGI_IF_DEBUG("%s ASSOCIATED %d.%d.%d.%d to teid %d\n", - __FUNCTION__, NIPADDR(src4_addr), originating_sgw_S1u_teidP); - } else { - SGI_IF_ERROR("Error IPv4 address already registered for teid %d\n", originating_sgw_S1u_teidP); - return -1; - } - } - } else { - hash_rc = hashtable_get(sgi_data_pP->teid_mapping, originating_sgw_S1u_teidP, (void**)&mapping_p); - } - - break; - - - - //******************* - case 6: - sgi_data_pP->eh.ether_type = htons(ETHERTYPE_IPV6); - - if (obj_hashtable_get(sgi_data_pP->addr_v6_mapping, &src6_addr, sizeof(struct in6_addr), (void**)&addr_mapping_p) != HASH_TABLE_OK) { - hash_rc = hashtable_get(sgi_data_pP->teid_mapping, originating_sgw_S1u_teidP, (void**)&mapping_p); - - if (hash_rc == HASH_TABLE_KEY_NOT_EXISTS) { - SGI_IF_ERROR("%s Error unknown context SGW teid %d\n", __FUNCTION__, originating_sgw_S1u_teidP); - return -1; - } else { - - if (mapping_p->is_outgoing_ipv6_packet_seen < MAX_DEFINED_IPV6_ADDRESSES_PER_UE) { - mapping_p->hw_addrlen = 0; - - memcpy(&mapping_p->in6_addr_captured[mapping_p->is_outgoing_ipv6_packet_seen].s6_addr, src6_addr.s6_addr, 16); - mapping_p->is_outgoing_ipv6_packet_seen +=1; - - addr_mapping_p = calloc(1, sizeof(sgi_addr_mapping_t)); - addr_mapping_p->is_outgoing_packet_seen = 1; - addr_mapping_p->enb_S1U_teid = mapping_p->enb_S1U_teid; - addr_mapping_p->sgw_S1U_teid = originating_sgw_S1u_teidP; - - src6_addr_p = malloc(sizeof(struct in6_addr)); - - if (src6_addr_p == NULL) { - return -1; - } - - memcpy(src6_addr_p->s6_addr, ip6h_p->saddr.s6_addr, 16); - obj_hashtable_insert(sgi_data_pP->addr_v6_mapping, src6_addr_p,sizeof(struct in6_addr), (void*)addr_mapping_p); - } else { - SGI_IF_ERROR("Error TOO MANY IPv6 address already registered for teid %d\n", originating_sgw_S1u_teidP); - return -1; - } - } - - } else { - hash_rc = hashtable_get(sgi_data_pP->teid_mapping, originating_sgw_S1u_teidP, (void**)&mapping_p); - } - - break; - - default: - SGI_IF_WARNING("%s UNHANDLED IP VERSION: %X\n", __FUNCTION__, iph_p->version); - break; - } - - memset(&device, 0, sizeof(device)); - device.sll_family = AF_PACKET; - device.sll_protocol = htons(ETH_P_ALL); - device.sll_ifindex = sgi_data_pP->if_index[mapping_p->eps_bearer_id - SGI_MIN_EPS_BEARER_ID]; - - - if (sendto(sgi_data_pP->sd[mapping_p->eps_bearer_id - SGI_MIN_EPS_BEARER_ID], - buffer_pP, - length, - 0, - (struct sockaddr *) &device, - sizeof (device)) < 0) { - SGI_IF_ERROR("%d Error during send to socket %d bearer id %d : (%s:%d)\n", - __LINE__, - sgi_data_pP->sd[mapping_p->eps_bearer_id - SGI_MIN_EPS_BEARER_ID], - mapping_p->eps_bearer_id, - strerror(errno), - errno); - return -1; - } - - - return 0; -} - -#ifdef SGI_TEST -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#define SGI_TEST_BUFF_LEN 500 -unsigned char sgi_test_tx_buffer[SGI_TEST_BUFF_LEN]; - - -void sgi_test_send_ping(sgi_data_t *sgi_dataP, uint32_t markP, uint64_t src_mac_addrP, uint64_t dst_mac_addrP, char* src_ip_addrP, char* dst_ip_addrP) -{ -#ifdef SGI_PF_PACKET - struct ether_header *eh = (struct ether_header *) sgi_test_tx_buffer; - struct iphdr *iph = (struct iphdr *) (sgi_test_tx_buffer + sizeof(struct ether_header)); - struct icmphdr *icmp = (struct icmphdr *) (sgi_test_tx_buffer + sizeof(struct ether_header) + sizeof(struct iphdr)); -#else - struct iphdr *iph = (struct iphdr *) sgi_test_tx_buffer; - struct icmphdr *icmp = (struct icmphdr *) (sgi_test_tx_buffer + sizeof(struct iphdr)); -#endif - struct hostent *hp, *hp2; - struct in_addr ip_dst; - struct in_addr ip_src; - - - -#ifdef SGI_PF_PACKET - eh->ether_shost[0] = (u_int8_t)((src_mac_addrP & 0x0000FF0000000000) >> 40); - eh->ether_shost[1] = (u_int8_t)((src_mac_addrP & 0x000000FF00000000) >> 32); - eh->ether_shost[2] = (u_int8_t)((src_mac_addrP & 0x00000000FF000000) >> 24); - eh->ether_shost[3] = (u_int8_t)((src_mac_addrP & 0x0000000000FF0000) >> 16); - eh->ether_shost[4] = (u_int8_t)((src_mac_addrP & 0x000000000000FF00) >> 8); - eh->ether_shost[5] = (u_int8_t) (src_mac_addrP & 0x00000000000000FF); - - eh->ether_dhost[0] = (u_int8_t)((dst_mac_addrP & 0x0000FF0000000000) >> 40); - eh->ether_dhost[1] = (u_int8_t)((dst_mac_addrP & 0x000000FF00000000) >> 32); - eh->ether_dhost[2] = (u_int8_t)((dst_mac_addrP & 0x00000000FF000000) >> 24); - eh->ether_dhost[3] = (u_int8_t)((dst_mac_addrP & 0x0000000000FF0000) >> 16); - eh->ether_dhost[4] = (u_int8_t)((dst_mac_addrP & 0x000000000000FF00) >> 8); - eh->ether_dhost[5] = (u_int8_t) (dst_mac_addrP & 0x00000000000000FF); - eh->ether_type = htons(ETH_P_IP); -#endif - - if ((hp = gethostbyname(dst_ip_addrP)) == NULL) { - SGI_IF_DEBUG("gethostbyname() is OK.\n"); - - if ((ip_dst.s_addr = inet_addr(dst_ip_addrP)) == -1) { - fprintf(stderr, "%s: Can't resolve, unknown host.\n", dst_ip_addrP); - exit(1); - } - } else - bcopy(hp->h_addr_list[0], &ip_dst.s_addr, hp->h_length); - - /* The following source address just redundant for target to collect */ - if ((hp2 = gethostbyname(src_ip_addrP)) == NULL) { - SGI_IF_DEBUG("gethostbyname() is OK.\n"); - - if ((ip_src.s_addr = inet_addr(src_ip_addrP)) == -1) { - fprintf(stderr, "%s: Can't resolve, unknown host\n", src_ip_addrP); - exit(1); - } - } else - bcopy(hp2->h_addr_list[0], &ip_src.s_addr, hp->h_length); - - printf("Sending to %08X from spoofed %08X\n", ip_dst.s_addr, ip_src.s_addr); - /* Ip structure, check the ip.h */ - iph->version = 4; - iph->ihl = sizeof *iph >> 2; - iph->tos = 0; - iph->tot_len = htons(SGI_TEST_BUFF_LEN-sizeof(struct ether_header)); - iph->id = htons(4321); - iph->frag_off = htons(0); - iph->ttl = 255; - iph->protocol = IPPROTO_ICMP; - iph->check = htons(0); - iph->saddr = ip_src.s_addr; - iph->daddr = ip_dst.s_addr; - - icmp->type = ICMP_ECHO; - icmp->code = 0; - icmp->un.echo.id = 1000; - icmp->un.echo.sequence = 10; - /* Header checksum */ - icmp->checksum = 0; - - icmp-> checksum = in_cksum((unsigned short *)icmp, sizeof(struct icmphdr)); - iph->check = in_cksum((unsigned short *)iph, sizeof(struct iphdr)); - - /* sending time */ - if (send(sgi_dataP->sd[0], sgi_test_tx_buffer, SGI_TEST_BUFF_LEN, 0) < 0) { - SGI_IF_ERROR("sendto() error (%s:%d)\n", strerror(errno), errno); - } else - SGI_IF_DEBUG("sendto() is OK.\n"); -} - -#endif - -#ifdef ENABLE_USE_RAW_SOCKET_FOR_SGI - -void sgi_sock_raw_cleanup_handler(void *args_p) -{ - sgi_data_t *sgi_data_p; - int socket_index; - - sgi_data_p = ((sgi_read_thread_args_t*)args_p)->sgi_data; - socket_index = ((sgi_read_thread_args_t*)args_p)->socket_index; - - SGI_IF_DEBUG("Called %s\n", __FUNCTION__); -#ifdef SGI_PACKET_RX_RING - free(sgi_data_p->malloc_ring); - sgi_data_p->malloc_ring = NULL; - - if (munmap(sgi_data_p->sock_mmap_ring, CONF_RING_FRAMES * getpagesize())) { - SGI_IF_ERROR("munmap\n"); - } else { - sgi_data_p->sock_mmap_ring = NULL; - } - -#endif - - if (sgi_data_p->sd[socket_index] > 0) { - close(sgi_data_p->sd[socket_index]); - SGI_IF_DEBUG("Closed soket %d\n", sgi_data_p->sd[socket_index]); - } - - sgi_data_p->sd[socket_index] = -1; - - free(args_p); -} - -void* sgi_sock_raw_fw_2_gtpv1u_thread(void* args_p) -{ - sgi_data_t *sgi_data_p; - int socket_index; -#ifdef SGI_PACKET_RX_RING - struct pollfd pfd; - int i; - pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; - char *names[]= { - "<", /* incoming */ - "B", /* broadcast */ - "M", /* multicast */ - "P", /* promisc */ - ">", /* outgoing */ - }; -#else - int num_bytes; -#endif - sgi_data_p = ((sgi_read_thread_args_t*)args_p)->sgi_data; - socket_index = ((sgi_read_thread_args_t*)args_p)->socket_index; - - SGI_IF_DEBUG("RX thread on raw socket started, operating on Device %s.%d\n", sgi_data_p->interface_name, socket_index+SGI_MIN_EPS_BEARER_ID); - - - pthread_cleanup_push(sgi_sock_raw_cleanup_handler, args_p); - - pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL); - - pthread_mutex_lock (&sgi_data_p->thread_started_mutex); - sgi_data_p->thread_started += 1; - pthread_mutex_unlock (&sgi_data_p->thread_started_mutex); - -#ifdef SGI_PACKET_RX_RING - i = 0; - - while (1) { - while(*(unsigned long*)sgi_data_p->malloc_ring[i].iov_base) { - struct tpacket_hdr *h=sgi_data_p->malloc_ring[i].iov_base; - struct sockaddr_ll *sll=(void *)h + TPACKET_ALIGN(sizeof(*h)); - unsigned char *bp=(unsigned char *)h + h->tp_mac; - - SGI_IF_DEBUG("%u.%.6u: if%u %s %u bytes\n", - h->tp_sec, h->tp_usec, - sll->sll_ifindex, - names[sll->sll_pkttype], - h->tp_len); - - sgi_process_raw_packet(sgi_data_p, bp, h->tp_len); - pthread_mutex_lock(&mutex); /* memory barrier */ - /* tell the kernel this packet is done with */ - h->tp_status=0; - pthread_mutex_unlock(&mutex); /* memory barrier */ - - i=(i==CONF_RING_FRAMES-1) ? 0 : i+1; - } - - /* Sleep when nothings happen */ - pfd.fd=sgi_data_p->sd; - pfd.events=POLLIN|POLLERR; - pfd.revents=0; - poll(&pfd, 1, -1); - } - -#else - - while (1) { - num_bytes = recvfrom(sgi_data_p->sd[socket_index], &sgi_data_p->recv_buffer[0][socket_index], SGI_BUFFER_RECV_LEN, 0, NULL, NULL); - - if (num_bytes > 0) { - SGI_IF_DEBUG("recvfrom bearer id %d %d bytes\n", socket_index + SGI_MIN_EPS_BEARER_ID, num_bytes); -#ifdef SGI_SOCKET_RAW - sgi_process_raw_packet(sgi_data_p, &sgi_data_p->recv_buffer[0][socket_index], num_bytes); -#else -#ifdef SGI_SOCKET_DGRAM - sgi_process_dgram_packet(sgi_data_p, &sgi_data_p->recv_buffer[0][socket_index], num_bytes); -#endif -#endif - } else { - SGI_IF_DEBUG("recvfrom bearer id %d %d (%s:%d)\n", socket_index + SGI_MIN_EPS_BEARER_ID, num_bytes, strerror(errno), errno); - } - } - -#endif - pthread_cleanup_pop(0); - pthread_exit(NULL); -} -#endif - diff --git a/openair-cn/SGI/sgi_task.c b/openair-cn/SGI/sgi_task.c deleted file mode 100644 index aa7e99eef5..0000000000 --- a/openair-cn/SGI/sgi_task.c +++ /dev/null @@ -1,361 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -/*! \file sgi_task.c -* \brief -* \author Lionel Gauthier -* \company Eurecom -* \email: lionel.gauthier@eurecom.fr -*/ - -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -//----------------------------------------------------------------------------- -#include "assertions.h" -#include "mme_config.h" -#include "intertask_interface.h" -#include "sgi.h" - -//----------------------------------------------------------------------------- -static void* sgi_task_thread(void *args_p); -static int sgi_create_endpoint_request(sgi_data_t *sgi_dataP, SGICreateEndpointReq *req_p); -static int sgi_update_endpoint_request(sgi_data_t *sgi_dataP, SGIUpdateEndpointReq *req_p); -static int sgi_init_phase2(sgi_data_t *sgi_data_pP); -//----------------------------------------------------------------------------- -static pthread_t fw_2_sgi_task_thread; -//----------------------------------------------------------------------------- -static void* sgi_task_thread(void *args_p) -//----------------------------------------------------------------------------- -{ - sgi_data_t *sgi_data_p; - - if (args_p == NULL) { - return NULL; - } - - itti_mark_task_ready(TASK_FW_IP); - - sgi_data_p = (sgi_data_t *)args_p; - - - while(1) { - /* Trying to fetch a message from the message queue. - * If the queue is empty, this function will block till a - * message is sent to the task. - */ - MessageDef *received_message_p; - itti_receive_msg(TASK_FW_IP, &received_message_p); - - DevAssert(received_message_p != NULL); - - if (sgi_data_p->hss_associated) { - switch (ITTI_MSG_ID(received_message_p)) { - case GTPV1U_TUNNEL_DATA_IND: { - /* We received data from GTPV1_U incoming from an UE. - * Forward it host adapter. - */ - Gtpv1uTunnelDataInd *data_ind_p; - data_ind_p = &received_message_p->ittiMsg.gtpv1uTunnelDataInd; -#ifdef SGI_SOCKET_RAW - sgi_send_data(&data_ind_p->buffer[data_ind_p->offset], data_ind_p->length, sgi_data_p, data_ind_p->local_S1u_teid); -#else -#ifdef SGI_SOCKET_DGRAM - sgi_dgram_send_data(&data_ind_p->buffer[data_ind_p->offset], data_ind_p->length, sgi_data_p, data_ind_p->local_S1u_teid); -#endif -#endif - /* Buffer is no longer needed, free it */ - itti_free(ITTI_MSG_ORIGIN_ID(received_message_p), data_ind_p->buffer); - } - break; - - case SGI_CREATE_ENDPOINT_REQUEST: { - SGICreateEndpointReq *req_p; - req_p = &received_message_p->ittiMsg.sgiCreateEndpointReq; - sgi_create_endpoint_request(sgi_data_p, req_p); - } - break; - - case SGI_UPDATE_ENDPOINT_REQUEST: { - SGIUpdateEndpointReq *req_p; - req_p = &received_message_p->ittiMsg.sgiUpdateEndpointReq; - sgi_update_endpoint_request(sgi_data_p, req_p); - } - break; - - default: { - SGI_IF_ERROR("Unkwnon message ID %d:%s\n", - ITTI_MSG_ID(received_message_p), ITTI_MSG_NAME(received_message_p)); - } - break; - } - } else { - switch (ITTI_MSG_ID(received_message_p)) { - case ACTIVATE_MESSAGE: { - sgi_data_p->hss_associated = 1; -#if !defined(ENABLE_USE_GTPU_IN_KERNEL) - SGI_IF_DEBUG("HSS ASSOCIATED, CAN START VLANS (bug in freediameter)"); - sgi_init_phase2(sgi_data_p); -#endif - } - break; - - default: { - SGI_IF_ERROR("Unkwnon or ignored message ID %d:%s\n", - ITTI_MSG_ID(received_message_p), ITTI_MSG_NAME(received_message_p)); - } - break; - } - } - - itti_free(ITTI_MSG_ORIGIN_ID(received_message_p), received_message_p); - received_message_p = NULL; - } - - return NULL; -} - - -//------------------------------------------------------ -static int sgi_create_endpoint_request(sgi_data_t *sgi_dataP, SGICreateEndpointReq *req_p) -//------------------------------------------------------ -{ - SGICreateEndpointResp *sgi_create_endpoint_resp_p; - MessageDef *message_p; - sgi_teid_mapping_t *mapping; - - SGI_IF_DEBUG("Rx IP_FW_CREATE_SGI_ENDPOINT_REQUEST, Context: S-GW S11 teid %u, S-GW S1U teid %u EPS bearer id %u\n", - req_p->context_teid, req_p->sgw_S1u_teid, req_p->eps_bearer_id); - - message_p = itti_alloc_new_message(TASK_FW_IP, SGI_CREATE_ENDPOINT_RESPONSE); - - if (message_p == NULL) { - return -1; - } - - sgi_create_endpoint_resp_p = &message_p->ittiMsg.sgiCreateEndpointResp; - sgi_create_endpoint_resp_p->context_teid = req_p->context_teid; - sgi_create_endpoint_resp_p->sgw_S1u_teid = req_p->sgw_S1u_teid; - sgi_create_endpoint_resp_p->eps_bearer_id = req_p->eps_bearer_id; - sgi_create_endpoint_resp_p->pdn_type = req_p->pdn_type; - sgi_create_endpoint_resp_p->paa = req_p->paa; - sgi_create_endpoint_resp_p->status = SGI_STATUS_OK; - - if (hashtable_is_key_exists(sgi_dataP->teid_mapping, req_p->sgw_S1u_teid) == HASH_TABLE_OK) { - SGI_IF_ERROR("SGI_STATUS_ERROR_CONTEXT_ALREADY_EXIST Context: S11 teid %u\n", req_p->context_teid); - sgi_create_endpoint_resp_p->status = SGI_STATUS_ERROR_CONTEXT_ALREADY_EXIST; - } else { - mapping = malloc(sizeof(sgi_teid_mapping_t)); - - if (mapping == NULL) { - sgi_create_endpoint_resp_p->status = SGI_STATUS_ERROR_NO_MEMORY_AVAILABLE; - } else { - memset(mapping, 0 , sizeof(sgi_teid_mapping_t)); - - mapping->eps_bearer_id = req_p->eps_bearer_id; - mapping->enb_S1U_teid = -1; - - if (hashtable_insert(sgi_dataP->teid_mapping, req_p->sgw_S1u_teid, mapping) != 0) { - SGI_IF_ERROR("SGI_STATUS_ERROR_SYSTEM_FAILURE Context: S11 teid %u\n", req_p->context_teid); - sgi_create_endpoint_resp_p->status = SGI_STATUS_ERROR_SYSTEM_FAILURE; - free(mapping); - } else { - SGI_IF_ERROR("SGI_STATUS_OK Context: S11 teid %u\n", req_p->context_teid); - sgi_create_endpoint_resp_p->status = SGI_STATUS_OK; - } - } - } - - return itti_send_msg_to_task(TASK_SPGW_APP, INSTANCE_DEFAULT, message_p); -} - -//------------------------------------------------------ -static int sgi_update_endpoint_request(sgi_data_t *sgi_dataP, SGIUpdateEndpointReq *req_p) -//------------------------------------------------------ -{ - SGIUpdateEndpointResp *sgi_update_endpoint_resp_p = NULL; - MessageDef *message_p = NULL; - sgi_teid_mapping_t *mapping = NULL; - - SGI_IF_DEBUG("Rx IP_FW_UPDATE_SGI_ENDPOINT_REQUEST, Context: S-GW S11 teid %u, S-GW S1U teid %u EPS bearer id %u\n", - req_p->context_teid, req_p->sgw_S1u_teid, req_p->eps_bearer_id); - - message_p = itti_alloc_new_message(TASK_FW_IP, SGI_UPDATE_ENDPOINT_RESPONSE); - - if (message_p == NULL) { - return -1; - } - - sgi_update_endpoint_resp_p = &message_p->ittiMsg.sgiUpdateEndpointResp; - sgi_update_endpoint_resp_p->context_teid = req_p->context_teid; - sgi_update_endpoint_resp_p->sgw_S1u_teid = req_p->sgw_S1u_teid; - sgi_update_endpoint_resp_p->eps_bearer_id = req_p->eps_bearer_id; - sgi_update_endpoint_resp_p->enb_S1u_teid = req_p->enb_S1u_teid; - sgi_update_endpoint_resp_p->status = SGI_STATUS_OK; - - if (hashtable_get(sgi_dataP->teid_mapping, req_p->sgw_S1u_teid, (void**)&mapping) == HASH_TABLE_OK) { - mapping->enb_S1U_teid = req_p->enb_S1u_teid; - } else { - SGI_IF_ERROR("SGI_STATUS_ERROR_CONTEXT_NOT_FOUND Context: S11 teid %u\n", req_p->context_teid); - sgi_update_endpoint_resp_p->status = SGI_STATUS_ERROR_CONTEXT_NOT_FOUND; - } - - return itti_send_msg_to_task(TASK_SPGW_APP, INSTANCE_DEFAULT, message_p); -} - -//----------------------------------------------------------------------------- -int sgi_init(const pgw_config_t *pgw_config_p) -//----------------------------------------------------------------------------- -{ - - volatile sgi_data_t *sgi_data_p; - int len; - int i; - - SGI_IF_DEBUG("Initializing FW_IP task interface\n"); - - sgi_data_p = malloc(sizeof(sgi_data_t)); - memset((void *)sgi_data_p, 0, sizeof(sgi_data_t)); - - for (i=0; i < SGI_MAX_EPS_BEARERS_PER_USER; i++) { - sgi_data_p->sd[i] = -1; - } - - sgi_data_p->thread_started = 0; - pthread_mutex_init (&sgi_data_p->thread_started_mutex, NULL); - - sgi_data_p->teid_mapping = hashtable_create (SGI_MAX_EPS_BEARERS, NULL, NULL); - - if (sgi_data_p->teid_mapping == NULL) { - SGI_IF_ERROR("Failed to create SGI hashtable teid_mapping\n"); - return -1; - } - - sgi_data_p->addr_v4_mapping = hashtable_create (SGI_MAX_SERVED_USERS_PER_PGW, NULL, NULL); - - if (sgi_data_p->addr_v4_mapping == NULL) { - SGI_IF_ERROR("Failed to create SGI hashtable addr_v4_mapping\n"); - return -1; - } - - sgi_data_p->addr_v6_mapping = obj_hashtable_create (SGI_MAX_SERVED_USERS_PER_PGW, NULL, NULL, NULL); - - if (sgi_data_p->addr_v6_mapping == NULL) { - SGI_IF_ERROR("Failed to create SGI hashtable addr_v6_mapping\n"); - return -1; - } - - - len = strlen(pgw_config_p->ipv4.pgw_interface_name_for_SGI); - sgi_data_p->interface_name = calloc(len + 1, sizeof(char)); - memcpy(sgi_data_p->interface_name, pgw_config_p->ipv4.pgw_interface_name_for_SGI, len); - sgi_data_p->interface_name[len] = '\0'; - sgi_data_p->ipv4_addr = pgw_config_p->ipv4.pgw_ipv4_address_for_SGI; - - - if (pthread_create(&fw_2_sgi_task_thread, NULL, &sgi_task_thread, (void *)sgi_data_p) < 0) { - SGI_IF_ERROR("sgi_task_thread pthread_create: %s", strerror(errno)); - return -1; - } - - return 0; -} - -int sgi_init_phase2(sgi_data_t *sgi_data_pP) -{ - int i; - - if (strcmp(sgi_data_pP->interface_name, PGW_CONFIG_STRING_INTERFACE_DISABLED) != 0) { - sgi_data_pP->interface_index = if_nametoindex(sgi_data_pP->interface_name); - - if (sgi_create_sockets(sgi_data_pP) < 0) { - SGI_IF_ERROR("Could not create socket, leaving thread %s\n", __FUNCTION__); - free(sgi_data_pP); - return -1; - } - } else { - SGI_IF_WARNING("SGI interface disabled by config file\n"); - } - - - if (strcmp(sgi_data_pP->interface_name, PGW_CONFIG_STRING_INTERFACE_DISABLED) != 0) { -#ifdef ENABLE_USE_PCAP_FOR_SGI - - if (pthread_create(&sgi_data_pP->capture_on_sgi_if_thread, NULL, &sgi_pcap_fw_2_gtpv1u_thread, (void *)sgi_data_pP) < 0) { - SGI_IF_ERROR("sgi_pcap_fw_2_gtpv1u_thread pthread_create: %s", strerror(errno)); - return -1; - } - -#endif -#ifdef ENABLE_USE_NETFILTER_FOR_SGI - - if (pthread_create(&sgi_data_pP->capture_on_sgi_if_thread, NULL, &sgi_nf_fw_2_gtpv1u_thread, (void *)sgi_data_pP) < 0) { - SGI_IF_ERROR("sgi_nf_fw_2_gtpv1u_thread pthread_create: %s", strerror(errno)); - return -1; - } - -#endif - //#if 0 -#ifdef ENABLE_USE_RAW_SOCKET_FOR_SGI - - for (i=0; i < SGI_MAX_EPS_BEARERS_PER_USER; i++) { - sgi_read_thread_args_t *args_p = malloc(sizeof(sgi_read_thread_args_t)); - args_p->sgi_data = sgi_data_pP; - args_p->socket_index = i; - - if (pthread_create(&sgi_data_pP->capture_on_sgi_if_thread, NULL, &sgi_sock_raw_fw_2_gtpv1u_thread, (void *)args_p) < 0) { - SGI_IF_ERROR("sgi_sock_raw_fw_2_gtpv1u_thread pthread_create: %s", strerror(errno)); - return -1; - } - } - -#endif - //#endif - } - - while (sgi_data_pP->thread_started != SGI_MAX_EPS_BEARERS_PER_USER ) { - usleep(1000); - } - - /*SGI_IF_DEBUG("ARP RESOLVING ROUTER...\n"); - while (sgi_data_p->hw_address_of_router_captured == 0) { - sgi_send_arp_request(sgi_data_p, "router.eur"); - sleep(2); - }*/ - SGI_IF_DEBUG("Initializing FW_IP task interface: DONE\n"); - return 0; -} diff --git a/openair-cn/SGI/sgi_util.c b/openair-cn/SGI/sgi_util.c deleted file mode 100755 index 879b451e50..0000000000 --- a/openair-cn/SGI/sgi_util.c +++ /dev/null @@ -1,304 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. - - *******************************************************************************/ -/*! \file sgi_util.c -* \brief -* \author Lionel Gauthier -* \company Eurecom -* \email: lionel.gauthier@eurecom.fr -*/ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "sgi.h" - -#define FW_2_PRINT_BUFFER_LEN 10000 -static char fw_2_print_buffer[FW_2_PRINT_BUFFER_LEN]; -//----------------------------------------------------------------------------- -void sgi_print_hex_octets(unsigned char* dataP, unsigned long sizeP) -//----------------------------------------------------------------------------- -{ - unsigned long octet_index = 0; - unsigned long buffer_marker = 0; - unsigned char aindex; - struct timeval tv; - struct timezone tz; - char timeofday[64]; - unsigned int h,m,s; - - if (dataP == NULL) { - return; - } - - gettimeofday(&tv, &tz); - h = (tv.tv_sec/3600) % 24; - m = (tv.tv_sec / 60) % 60; - s = tv.tv_sec % 60; - snprintf(timeofday, 64, "%02d:%02d:%02d.%06d", h,m,s,tv.tv_usec); - - SGI_IF_DEBUG("%s------+-------------------------------------------------+\n",timeofday); - SGI_IF_DEBUG("%s | 0 1 2 3 4 5 6 7 8 9 a b c d e f |\n",timeofday); - SGI_IF_DEBUG("%s------+-------------------------------------------------+\n",timeofday); - - for (octet_index = 0; octet_index < sizeP; octet_index++) { - if ((octet_index % 16) == 0) { - if (octet_index != 0) { - buffer_marker+=snprintf(&fw_2_print_buffer[buffer_marker], FW_2_PRINT_BUFFER_LEN - buffer_marker, " |\n"); - SGI_IF_DEBUG("%s%s",timeofday, fw_2_print_buffer); - buffer_marker = 0; - } - - buffer_marker+=snprintf(&fw_2_print_buffer[buffer_marker], FW_2_PRINT_BUFFER_LEN - buffer_marker, " %04ld |", octet_index); - } - - /* - * Print every single octet in hexadecimal form - */ - buffer_marker+=snprintf(&fw_2_print_buffer[buffer_marker], FW_2_PRINT_BUFFER_LEN - buffer_marker, " %02x", dataP[octet_index]); - /* - * Align newline and pipes according to the octets in groups of 2 - */ - } - - /* - * Append enough spaces and put final pipe - */ - for (aindex = octet_index; aindex < 16; ++aindex) - buffer_marker+=snprintf(&fw_2_print_buffer[buffer_marker], FW_2_PRINT_BUFFER_LEN - buffer_marker, " "); - - //SGI_IF_DEBUG(" "); - buffer_marker+=snprintf(&fw_2_print_buffer[buffer_marker], FW_2_PRINT_BUFFER_LEN - buffer_marker, " |\n"); - SGI_IF_DEBUG("%s%s",timeofday,fw_2_print_buffer); -} - -//----------------------------------------------------------------------------- -char* sgi_status_2_str(SGIStatus_t statusP) -//----------------------------------------------------------------------------- -{ - switch (statusP) { - case SGI_STATUS_OK: - return "SGI_STATUS_OK"; - break; - - case SGI_STATUS_ERROR_CONTEXT_ALREADY_EXIST: - return "SGI_STATUS_ERROR_CONTEXT_ALREADY_EXIST"; - break; - - case SGI_STATUS_ERROR_CONTEXT_NOT_FOUND: - return "SGI_STATUS_ERROR_CONTEXT_NOT_FOUND"; - break; - - case SGI_STATUS_ERROR_INVALID_MESSAGE_FORMAT: - return "SGI_STATUS_ERROR_INVALID_MESSAGE_FORMAT"; - break; - - case SGI_STATUS_ERROR_SERVICE_NOT_SUPPORTED: - return "SGI_STATUS_ERROR_SERVICE_NOT_SUPPORTED"; - break; - - case SGI_STATUS_ERROR_SYSTEM_FAILURE: - return "SGI_STATUS_ERROR_SYSTEM_FAILURE"; - break; - - case SGI_STATUS_ERROR_NO_RESOURCES_AVAILABLE: - return "SGI_STATUS_ERROR_NO_RESOURCES_AVAILABLE"; - break; - - case SGI_STATUS_ERROR_NO_MEMORY_AVAILABLE: - return "SGI_STATUS_ERROR_NO_MEMORY_AVAILABLE"; - break; - - default: - return "UNKNOWN_SGI_STATUS"; - } -} - -//----------------------------------------------------------------------------- -char* sgi_arpopcode_2_str(unsigned short int opcodeP) -//----------------------------------------------------------------------------- -{ - switch (opcodeP) { - case ARPOP_REQUEST: - return "ARPOP_REQUEST"; - break; - - case ARPOP_REPLY: - return "ARPOP_REPLY"; - break; - - case ARPOP_RREQUEST: - return "ARPOP_RREQUEST"; - break; - - case ARPOP_RREPLY: - return "ARPOP_RREPLY"; - break; - - case ARPOP_InREQUEST: - return "ARPOP_InREQUEST"; - break; - - case ARPOP_InREPLY: - return "ARPOP_InREPLY"; - break; - - case ARPOP_NAK: - return "ARPOP_NAK"; - break; - - default: - return "UNKNOWN_ARP_OPCODE"; - } -} -//----------------------------------------------------------------------------- -unsigned short in_cksum(unsigned short *addr, int len) -//----------------------------------------------------------------------------- -{ - register int sum = 0; - u_short answer = 0; - register u_short *w = addr; - register int nleft = len; - - /* - * Our algorithm is simple, using a 32 bit accumulator (sum), we add - * sequential 16 bit words to it, and at the end, fold back all the - * carry bits from the top 16 bits into the lower 16 bits. - */ - while (nleft > 1) { - sum += *w++; - nleft -= 2; - } - - /* mop up an odd byte, if necessary */ - if (nleft == 1) { - *(u_char *) (&answer) = *(u_char *) w; - sum += answer; - } - - /* add back carry outs from top 16 bits to low 16 bits */ - sum = (sum >> 16) + (sum & 0xffff); /* add hi 16 to low 16 */ - sum += (sum >> 16); /* add carry */ - answer = ~sum; /* truncate to 16 bits */ - return (answer); -} -//----------------------------------------------------------------------------- -void sgi_send_arp_request(sgi_data_t *sgi_dataP, char* dst_ip_addrP) -//----------------------------------------------------------------------------- -{ - char buffer[100]; // ARP request is 60 bytes including ethernet - struct arphdr_s *arph = (struct arphdr_s *)(buffer); - struct hostent *hp = NULL; - uint32_t i; - struct in_addr ip_dst; - struct ifreq ifr; - struct iovec iov[2]; - - sgi_dataP->eh.ether_dhost[0] = (u_int8_t)(0xFF); - sgi_dataP->eh.ether_dhost[1] = (u_int8_t)(0xFF); - sgi_dataP->eh.ether_dhost[2] = (u_int8_t)(0xFF); - sgi_dataP->eh.ether_dhost[3] = (u_int8_t)(0xFF); - sgi_dataP->eh.ether_dhost[4] = (u_int8_t)(0xFF); - sgi_dataP->eh.ether_dhost[5] = (u_int8_t)(0xFF); - - // get IP address of the default virtual interface - ifr.ifr_addr.sa_family = AF_INET; - sprintf(ifr.ifr_name, "%s.%d",sgi_dataP->interface_name,SGI_MIN_EPS_BEARER_ID); - - if (ioctl(sgi_dataP->sd[0], SIOCGIFADDR, &ifr) != 0) { - SGI_IF_ERROR("Error during IP ADDRESS RETRIEVAL ON SGI INTERFACE (%s:%d)\n",strerror(errno), errno); - exit (-1); - } - - if ((hp = gethostbyname(dst_ip_addrP)) == NULL) { - SGI_IF_DEBUG("gethostbyname() is OK.\n"); - - if ((ip_dst.s_addr = inet_addr(dst_ip_addrP)) == -1) { - SGI_IF_ERROR("%s: Can't resolve, unknown host.\n", dst_ip_addrP); - exit(1); - } - } else - bcopy(hp->h_addr_list[0], &ip_dst.s_addr, hp->h_length); - - arph->ar_hrd = htons(ARPHRD_ETHER); - arph->ar_pro = htons(ETH_P_IP); - arph->ar_hln = ETH_ALEN; - arph->ar_pln = 4; - arph->ar_op = htons(ARPOP_REQUEST); - - // sources - memcpy(arph->ar_sha, sgi_dataP->eh.ether_shost, ETH_ALEN); - - i = ((struct sockaddr_in *)&ifr.ifr_addr)->sin_addr.s_addr; - arph->ar_sip[3] = i >> 24; - arph->ar_sip[2] = (i & 0x00FF0000) >> 16; - arph->ar_sip[1] = (i & 0x0000FF00) >> 8; - arph->ar_sip[0] = (i & 0x000000FF); - - // destinations - memset(arph->ar_tha, 0, ETH_ALEN); - - i = ip_dst.s_addr; - arph->ar_tip[3] = i >> 24; - arph->ar_tip[2] = (i & 0x00FF0000) >> 16; - arph->ar_tip[1] = (i & 0x0000FF00) >> 8; - arph->ar_tip[0] = (i & 0x000000FF); - // save ip address of router for comparing with ARP REPLY - sgi_dataP->ipv4_addr_of_router = ip_dst.s_addr; - - iov[0].iov_base = &sgi_dataP->eh; - iov[0].iov_len = sizeof(sgi_dataP->eh); - iov[1].iov_base = (void *)buffer; - iov[1].iov_len = sizeof (struct arphdr) + ETH_ALEN*2 + 4*2; -#ifdef VLAN8021Q - sgi_data_p->eh.ether_vlan8021q.vlan_tpid = htons(0x8100); - sgi_dataP->eh.ether_vlan8021q.vlan_tci = htons(0x7000 | 0x0000 | SGI_MIN_EPS_BEARER_ID); -#endif - sgi_dataP->eh.ether_type = htons(ETH_P_ARP); - - sgi_print_hex_octets(iov[0].iov_base, iov[0].iov_len); - sgi_print_hex_octets(iov[1].iov_base, iov[1].iov_len); - - if (writev(sgi_dataP->sd[0], (const struct iovec *)&iov, 2) < 0) { - SGI_IF_ERROR("Error during send ARP to socket %d bearer id %d : (%s:%d)\n", - sgi_dataP->sd[0], - SGI_MIN_EPS_BEARER_ID, - strerror(errno), - errno); - exit(1); - } - -} - diff --git a/openair-cn/SGW-LITE/sgw_lite_context_manager.h b/openair-cn/SGW-LITE/sgw_lite_context_manager.h index 16d558b1bb..7cdd2676f4 100644 --- a/openair-cn/SGW-LITE/sgw_lite_context_manager.h +++ b/openair-cn/SGW-LITE/sgw_lite_context_manager.h @@ -119,9 +119,7 @@ typedef struct pgw_eps_bearer_context_information_s { // A primary key for a EPS Bearer entry can be a tuple (eps bearer id, imsi) typedef struct sgw_eps_bearer_entry_s { -#if defined (ENABLE_USE_GTPU_IN_KERNEL) PAA_t paa; -#endif ebi_t eps_bearer_id; ///< An EPS bearer identity uniquely identifies an EPS bearer for one UE accessing via E-UTRAN // TO DO traffic_flow_template_t tft; ///< Traffic Flow Template diff --git a/openair-cn/SGW-LITE/sgw_lite_handlers.c b/openair-cn/SGW-LITE/sgw_lite_handlers.c index d3cdb6abe0..66db5a9675 100644 --- a/openair-cn/SGW-LITE/sgw_lite_handlers.c +++ b/openair-cn/SGW-LITE/sgw_lite_handlers.c @@ -52,6 +52,7 @@ #include "sgw_lite_handlers.h" #include "sgw_lite_context_manager.h" #include "sgw_lite.h" +#include "sgw_lite_ie_defs.h" #include "pgw_lite_paa.h" #include "spgw_config.h" @@ -213,7 +214,6 @@ sgw_lite_handle_create_session_request( return -1; } -#if defined (ENABLE_USE_GTPU_IN_KERNEL) { Gtpv1uCreateTunnelResp createTunnelResp; @@ -223,14 +223,6 @@ sgw_lite_handle_create_session_request( createTunnelResp.S1u_teid = sgw_get_new_teid(); sgw_lite_handle_gtpv1uCreateTunnelResp(&createTunnelResp); } -#else - message_p->ittiMsg.gtpv1uCreateTunnelReq.context_teid = new_endpoint_p->local_teid; - message_p->ittiMsg.gtpv1uCreateTunnelReq.eps_bearer_id = session_req_pP->bearer_to_create.eps_bearer_id; - SPGW_APP_DEBUG("Tx GTPV1U_CREATE_TUNNEL_REQ -> TASK_GTPV1_U, Context: S-GW S11 teid %u eps bearer id %d (from session req)\n", - message_p->ittiMsg.gtpv1uCreateTunnelReq.context_teid, - message_p->ittiMsg.gtpv1uCreateTunnelReq.eps_bearer_id); - return itti_send_msg_to_task(TASK_GTPV1_U, INSTANCE_DEFAULT, message_p); -#endif } else { SPGW_APP_WARN("Could not create new transaction for SESSION_CREATE message\n"); free(new_endpoint_p); @@ -252,6 +244,9 @@ sgw_lite_handle_sgi_endpoint_created( MessageDef *message_p = NULL; hashtable_rc_t hash_rc; + + + SPGW_APP_DEBUG("Rx SGI_CREATE_ENDPOINT_RESPONSE,Context: S11 teid %u, SGW S1U teid %u EPS bearer id %u\n", resp_pP->context_teid, resp_pP->sgw_S1u_teid, resp_pP->eps_bearer_id); hash_rc = hashtable_get(sgw_app.s11_bearer_context_information_hashtable, resp_pP->context_teid, (void**)&new_bearer_ctxt_info_p); @@ -289,7 +284,6 @@ sgw_lite_handle_sgi_endpoint_created( create_session_response_p->ambr.br_dl = 100000000; create_session_response_p->ambr.br_ul = 40000000; -#if defined(ENABLE_USE_GTPU_IN_KERNEL) { sgw_eps_bearer_entry_t* eps_bearer_entry_p = NULL; hash_rc = hashtable_get (new_bearer_ctxt_info_p->sgw_eps_bearer_context_information.pdn_connection.sgw_eps_bearers, @@ -305,10 +299,14 @@ sgw_lite_handle_sgi_endpoint_created( sizeof(PAA_t)); } } -#endif memcpy(&create_session_response_p->paa, &resp_pP->paa, sizeof(PAA_t)); + + memcpy(&create_session_response_p->pco, + &resp_pP->pco, + sizeof(pco_flat_t)); + /* Set the Cause information from bearer context created. * "Request accepted" is returned when the GTPv2 entity has accepted a control plane request. */ @@ -368,6 +366,33 @@ sgw_lite_handle_gtpv1uCreateTunnelResp( hashtable_rc_t hash_rc; struct in_addr inaddr ; struct in6_addr in6addr = IN6ADDR_ANY_INIT; + SGICreateEndpointResp sgi_create_endpoint_resp; + + unsigned int pco_in_index = 0; + unsigned int pco_out_index = 0; + signed int length_in_pco = 0; + uint16_t pi_or_ci = 0; // protocol identifier or container identifier; + uint8_t length_pi_or_ci = 0; + uint8_t length_out_pi_or_ci = 0; + + uint16_t ipcp_length = 0; + uint16_t ipcp_out_length = 0; + signed int ipcp_remaining_length = 0; + uint8_t ipcp_option = 0; + uint8_t ipcp_option_length = 0; + uint8_t ipcp_code = 0; + uint8_t ipcp_out_code = IPCP_CODE_CONFIGURE_ACK; + uint8_t ipcp_identifier = 0; + uint32_t ipcp_dns_prim_ipv4_addr = 0xFFFFFFFF; + uint32_t ipcp_dns_sec_ipv4_addr = 0xFFFFFFFF; + uint32_t ipcp_out_dns_prim_ipv4_addr = 0xFFFFFFFF; + uint32_t ipcp_out_dns_sec_ipv4_addr = 0xFFFFFFFF; + pco_flat_t *in_pco_p = NULL; + pco_flat_t out_pco ; + + uint8_t address_allocation_via_nas_signalling = FALSE; + uint8_t address_allocation_via_dhcpv4 = FALSE; + #if defined(ENABLE_STANDALONE_EPC) to_task = TASK_MME_APP; @@ -401,10 +426,173 @@ sgw_lite_handle_gtpv1uCreateTunnelResp( sgw_lite_display_s11_bearer_context_information_mapping(); -#if defined (ENABLE_USE_GTPU_IN_KERNEL) - SGICreateEndpointResp sgi_create_endpoint_resp; - memset(&sgi_create_endpoint_resp, 0, sizeof(SGICreateEndpointResp)); + + + //-------------------------------------------------------------------------- + // PCO processing + //-------------------------------------------------------------------------- + in_pco_p = &new_bearer_ctxt_info_p->sgw_eps_bearer_context_information.saved_message.pco; + + length_in_pco = in_pco_p->byte[1]; + if ((length_in_pco+1+1) != in_pco_p->length) { + SPGW_APP_DEBUG("PCO: mismatch in lengths length_pco+1+1 %u != in_pco_p->length %u\n", + length_in_pco+1+1, in_pco_p->length); + } + sgi_create_endpoint_resp.pco.byte[0] = in_pco_p->byte[0]; + pco_out_index = 2; + + if ((length_in_pco > 0) && (in_pco_p->byte[2] & 0x80)) { + sgi_create_endpoint_resp.pco.byte[pco_out_index++] = in_pco_p->byte[2]; + + pco_in_index = PCO_MIN_LENGTH; + while (length_in_pco >= 3) { + SPGW_APP_DEBUG("PCO: Protocol identifier in length_in_pco %d\n", length_in_pco); + pi_or_ci = (((uint16_t)in_pco_p->byte[pco_in_index]) << 8) | (uint16_t)in_pco_p->byte[pco_in_index+1]; + pco_in_index += 2; + length_pi_or_ci = in_pco_p->byte[pco_in_index++]; + switch (pi_or_ci) { + case PCO_PI_LCP: + case PCO_PI_PAP: + case PCO_PI_CHAP: + pco_in_index += length_pi_or_ci; + SPGW_APP_WARN("PCO: Protocol identifier 0x%X not supported now\n", pi_or_ci); + break; + + case PCO_PI_IPCP: + ipcp_code = in_pco_p->byte[pco_in_index++]; + ipcp_identifier = in_pco_p->byte[pco_in_index++]; + ipcp_length = (((uint16_t)in_pco_p->byte[pco_in_index]) << 8) | ((uint16_t)in_pco_p->byte[pco_in_index+1]); + SPGW_APP_DEBUG("PCO: Protocol identifier IPCP (0x%x) code 0x%x identifier 0x%x length %u\n", + pi_or_ci, ipcp_code, ipcp_identifier, ipcp_length); + pco_in_index += 2; + ipcp_remaining_length = ipcp_length - 1 - 1 - 2; + ipcp_out_length = 1 + 1 + 2; + + // Protocol Id: Internet Protocol Control Protocol ... + sgi_create_endpoint_resp.pco.byte[pco_out_index++] = (uint8_t)(pi_or_ci >> 8); + sgi_create_endpoint_resp.pco.byte[pco_out_index++] = (uint8_t)(pi_or_ci & 0x00FF); + + while (ipcp_remaining_length >= 2) { + ipcp_option = in_pco_p->byte[pco_in_index]; + ipcp_option_length = in_pco_p->byte[pco_in_index+1]; + ipcp_remaining_length = ipcp_remaining_length - ipcp_option_length; + SPGW_APP_DEBUG("PCO: Protocol identifier IPCP ipcp_option %u ipcp_option_length %u ipcp_remaining_length %u pco_in_index %u\n", + ipcp_option, ipcp_option_length, ipcp_remaining_length, pco_in_index); + + switch (ipcp_option) { + case IPCP_OPTION_PRIMARY_DNS_SERVER_IP_ADDRESS: + SPGW_APP_DEBUG("PCO: Protocol identifier IPCP option PRIMARY_DNS_SERVER_IP_ADDRESS length %u\n", ipcp_option_length); + if (ipcp_option_length >= 6) { + ipcp_dns_prim_ipv4_addr = (((uint32_t)in_pco_p->byte[pco_in_index+2]) << 24 ) | + (((uint32_t)in_pco_p->byte[pco_in_index+3]) << 16 ) | + (((uint32_t)in_pco_p->byte[pco_in_index+4]) << 8 ) | + (((uint32_t)in_pco_p->byte[pco_in_index+5]) ); + + SPGW_APP_DEBUG("PCO: Protocol identifier IPCP option SECONDARY_DNS_SERVER_IP_ADDRESS ipcp_dns_prim_ipv4_addr 0x%x\n", ipcp_dns_prim_ipv4_addr); + if ((ipcp_dns_prim_ipv4_addr == 0) || + (spgw_config.pgw_config.ipv4.default_dns_v4 != ipcp_dns_prim_ipv4_addr)){ + ipcp_out_code = IPCP_CODE_CONFIGURE_NACK; + ipcp_out_dns_prim_ipv4_addr = spgw_config.pgw_config.ipv4.default_dns_v4; + } else { + ipcp_out_dns_prim_ipv4_addr = ipcp_dns_prim_ipv4_addr; + } + SPGW_APP_DEBUG("PCO: Protocol identifier IPCP option SECONDARY_DNS_SERVER_IP_ADDRESS ipcp_out_dns_prim_ipv4_addr 0x%x\n", ipcp_out_dns_prim_ipv4_addr); + } else { + ipcp_out_code = IPCP_CODE_CONFIGURE_NACK;// not sure + } + ipcp_out_length += 6; + break; + case IPCP_OPTION_SECONDARY_DNS_SERVER_IP_ADDRESS: + SPGW_APP_DEBUG("PCO: Protocol identifier IPCP option SECONDARY_DNS_SERVER_IP_ADDRESS length %u\n", ipcp_option_length); + if (ipcp_option_length >= 6) { + ipcp_dns_sec_ipv4_addr = (((uint32_t)in_pco_p->byte[pco_in_index+2]) << 24 ) | + (((uint32_t)in_pco_p->byte[pco_in_index+3]) << 16 ) | + (((uint32_t)in_pco_p->byte[pco_in_index+4]) << 8 ) | + (((uint32_t)in_pco_p->byte[pco_in_index+5]) ); + SPGW_APP_DEBUG("PCO: Protocol identifier IPCP option SECONDARY_DNS_SERVER_IP_ADDRESS ipcp_dns_sec_ipv4_addr 0x%x\n", ipcp_dns_sec_ipv4_addr); + if ((ipcp_dns_prim_ipv4_addr == 0) || + (spgw_config.pgw_config.ipv4.default_dns_sec_v4 != ipcp_dns_sec_ipv4_addr)){ + ipcp_out_code = IPCP_CODE_CONFIGURE_NACK; + ipcp_out_dns_sec_ipv4_addr = spgw_config.pgw_config.ipv4.default_dns_sec_v4; + } else { + ipcp_out_dns_sec_ipv4_addr = ipcp_dns_sec_ipv4_addr; + } + SPGW_APP_DEBUG("PCO: Protocol identifier IPCP option SECONDARY_DNS_SERVER_IP_ADDRESS ipcp_out_dns_sec_ipv4_addr 0x%x\n", ipcp_out_dns_sec_ipv4_addr); + } else { + ipcp_out_code = IPCP_CODE_CONFIGURE_NACK; // not sure + } + ipcp_out_length += 6; + break; + default: + SPGW_APP_WARN("PCO: Protocol identifier IPCP option 0x%04X unknown\n", ipcp_option); + } + pco_in_index += ipcp_option_length; + } + // ... continuing Protocol Id: Internet Protocol Control Protocol + sgi_create_endpoint_resp.pco.byte[pco_out_index++] = ipcp_out_length; // option length + + break; + + case PCO_CI_P_CSCF_IPV6_ADDRESS_REQUEST: + case PCO_CI_DNS_SERVER_IPV6_ADDRESS_REQUEST: + case PCO_CI_MS_SUPPORT_OF_NETWORK_REQUESTED_BEARER_CONTROL_INDICATOR: + case PCO_CI_DSMIPV6_HOME_AGENT_ADDRESS_REQUEST: + case PCO_CI_DSMIPV6_HOME_NETWORK_PREFIX_REQUEST: + case PCO_CI_DSMIPV6_IPV4_HOME_AGENT_ADDRESS_REQUEST: + case PCO_CI_P_CSCF_IPV4_ADDRESS_REQUEST: + case PCO_CI_MSISDN_REQUEST: + case PCO_CI_IFOM_SUPPORT_REQUEST: + pco_in_index += length_pi_or_ci; + SPGW_APP_WARN("PCO: Container identifier 0x%X not supported now\n", pi_or_ci); + break; + + case PCO_CI_DNS_SERVER_IPV4_ADDRESS_REQUEST: + // PPP IP Control Protocol + sgi_create_endpoint_resp.pco.byte[pco_out_index++] = ipcp_out_code; + sgi_create_endpoint_resp.pco.byte[pco_out_index++] = ipcp_identifier; + sgi_create_endpoint_resp.pco.byte[pco_out_index++] = (uint8_t)(ipcp_out_length >> 8); + sgi_create_endpoint_resp.pco.byte[pco_out_index++] = (uint8_t)(ipcp_out_length & 0x00FF); + + if (ipcp_out_dns_prim_ipv4_addr != 0xFFFFFFFF) { + sgi_create_endpoint_resp.pco.byte[pco_out_index++] = IPCP_OPTION_PRIMARY_DNS_SERVER_IP_ADDRESS; + sgi_create_endpoint_resp.pco.byte[pco_out_index++] = 6; + sgi_create_endpoint_resp.pco.byte[pco_out_index++] = (uint8_t)(ipcp_out_dns_prim_ipv4_addr & 0x000000FF); + sgi_create_endpoint_resp.pco.byte[pco_out_index++] = (uint8_t)((ipcp_out_dns_prim_ipv4_addr >> 8 ) & 0x000000FF); + sgi_create_endpoint_resp.pco.byte[pco_out_index++] = (uint8_t)((ipcp_out_dns_prim_ipv4_addr >> 16 ) & 0x000000FF); + sgi_create_endpoint_resp.pco.byte[pco_out_index++] = (uint8_t)((ipcp_out_dns_prim_ipv4_addr >> 24 ) & 0x000000FF); + } + if (ipcp_out_dns_sec_ipv4_addr != 0xFFFFFFFF) { + sgi_create_endpoint_resp.pco.byte[pco_out_index++] = IPCP_OPTION_SECONDARY_DNS_SERVER_IP_ADDRESS; + sgi_create_endpoint_resp.pco.byte[pco_out_index++] = 6; + sgi_create_endpoint_resp.pco.byte[pco_out_index++] = (uint8_t)(ipcp_out_dns_sec_ipv4_addr & 0x000000FF); + sgi_create_endpoint_resp.pco.byte[pco_out_index++] = (uint8_t)((ipcp_out_dns_sec_ipv4_addr >> 8 ) & 0x000000FF); + sgi_create_endpoint_resp.pco.byte[pco_out_index++] = (uint8_t)((ipcp_out_dns_sec_ipv4_addr >> 16 ) & 0x000000FF); + sgi_create_endpoint_resp.pco.byte[pco_out_index++] = (uint8_t)((ipcp_out_dns_sec_ipv4_addr >> 24 ) & 0x000000FF); + } + break; + + case PCO_CI_IP_ADDRESS_ALLOCATION_VIA_NAS_SIGNALLING: + address_allocation_via_nas_signalling = TRUE; + break; + + case PCO_CI_IPV4_ADDRESS_ALLOCATION_VIA_DHCPV4: + address_allocation_via_dhcpv4 = TRUE; + break; + + case PCO_CI_IPV4_LINK_MTU_REQUEST: + SPGW_APP_WARN("PCO: Container identifier IPV4_LINK_MTU_REQUEST TODO\n"); + break; + } + length_in_pco = length_in_pco - (length_pi_or_ci + 2 + 1); + SPGW_APP_DEBUG("PCO: Protocol identifier out length_in_pco %d\n", length_in_pco); + } // while (length_in_pco >= 3) { + } // if ((length_in_pco > 0) && (in_pco_p->byte[2] & 0x80)) { + sgi_create_endpoint_resp.pco.length = pco_out_index; + sgi_create_endpoint_resp.pco.byte[1] = pco_out_index - 2; + //-------------------------------------------------------------------------- + + // IP forward will forward packets to this teid sgi_create_endpoint_resp.context_teid = endpoint_created_pP->context_teid; sgi_create_endpoint_resp.sgw_S1u_teid = endpoint_created_pP->S1u_teid; @@ -430,11 +618,15 @@ sgw_lite_handle_gtpv1uCreateTunnelResp( break; case IPv4: - if (pgw_lite_get_free_ipv4_paa_address(&inaddr) == 0) { - IN_ADDR_TO_BUFFER(inaddr, sgi_create_endpoint_resp.paa.ipv4_address); - } else { - SPGW_APP_ERROR("Failed to allocate IPv4 PAA for PDN type IPv4\n"); - } + if (address_allocation_via_nas_signalling == TRUE) { + if (pgw_lite_get_free_ipv4_paa_address(&inaddr) == 0) { + IN_ADDR_TO_BUFFER(inaddr, sgi_create_endpoint_resp.paa.ipv4_address); + } else { + SPGW_APP_ERROR("Failed to allocate IPv4 PAA for PDN type IPv4\n"); + } + } /*else { + // TODO + }*/ break; @@ -469,82 +661,7 @@ sgw_lite_handle_gtpv1uCreateTunnelResp( sgi_create_endpoint_resp.status = SGI_STATUS_OK; sgw_lite_handle_sgi_endpoint_created(&sgi_create_endpoint_resp); -#else - /* SEND IP_FW_CREATE_IP_ENDPOINT_REQUEST to FW_IP task */ - message_p = itti_alloc_new_message(TASK_SPGW_APP, SGI_CREATE_ENDPOINT_REQUEST); - - if (message_p == NULL) { - return -1; - } - - sgi_create_endpoint_req_p = &message_p->ittiMsg.sgiCreateEndpointReq; - memset(sgi_create_endpoint_req_p, 0, sizeof(SGICreateEndpointReq)); - // IP forward will forward packets to this teid - sgi_create_endpoint_req_p->context_teid = endpoint_created_pP->context_teid; - sgi_create_endpoint_req_p->sgw_S1u_teid = endpoint_created_pP->S1u_teid; - sgi_create_endpoint_req_p->eps_bearer_id = endpoint_created_pP->eps_bearer_id; - - // TO DO NOW - sgi_create_endpoint_req_p->paa.pdn_type = new_bearer_ctxt_info_p->sgw_eps_bearer_context_information.saved_message.pdn_type; - - switch (sgi_create_endpoint_req_p->paa.pdn_type) { - case IPv4_OR_v6: - if (pgw_lite_get_free_ipv4_paa_address(&inaddr) == 0) { - IN_ADDR_TO_BUFFER(inaddr, sgi_create_endpoint_req_p->paa.ipv4_address); - } else { - SPGW_APP_WARN("Failed to allocate IPv4 PAA for PDN type IPv4_OR_v6\n"); - - if (pgw_lite_get_free_ipv6_paa_prefix(&in6addr) == 0) { - IN6_ADDR_TO_BUFFER(in6addr, sgi_create_endpoint_req_p->paa.ipv6_address); - } else { - SPGW_APP_ERROR("Failed to allocate IPv6 PAA for PDN type IPv4_OR_v6\n"); - } - } - - break; - - case IPv4: - if (pgw_lite_get_free_ipv4_paa_address(&inaddr) == 0) { - IN_ADDR_TO_BUFFER(inaddr, sgi_create_endpoint_req_p->paa.ipv4_address); - } else { - SPGW_APP_ERROR("Failed to allocate IPv4 PAA for PDN type IPv4\n"); - } - - break; - - case IPv6: - if (pgw_lite_get_free_ipv6_paa_prefix(&in6addr) == 0) { - IN6_ADDR_TO_BUFFER(in6addr, sgi_create_endpoint_req_p->paa.ipv6_address); - } else { - SPGW_APP_ERROR("Failed to allocate IPv6 PAA for PDN type IPv6\n"); - } - - break; - - case IPv4_AND_v6: - if (pgw_lite_get_free_ipv4_paa_address(&inaddr) == 0) { - IN_ADDR_TO_BUFFER(inaddr, sgi_create_endpoint_req_p->paa.ipv4_address); - } else { - SPGW_APP_ERROR("Failed to allocate IPv4 PAA for PDN type IPv4_AND_v6\n"); - } - - if (pgw_lite_get_free_ipv6_paa_prefix(&in6addr) == 0) { - IN6_ADDR_TO_BUFFER(in6addr, sgi_create_endpoint_req_p->paa.ipv6_address); - } else { - SPGW_APP_ERROR("Failed to allocate IPv6 PAA for PDN type IPv4_AND_v6\n"); - } - - break; - - default: - AssertFatal(0,"BAD paa.pdn_type %d", sgi_create_endpoint_req_p->paa.pdn_type); - break; - } - - // TO DO TFT, QOS - return itti_send_msg_to_task(TASK_FW_IP, INSTANCE_DEFAULT, message_p); -#endif - } else { + } else { // if (hash_rc == HASH_TABLE_OK) { SPGW_APP_DEBUG("Rx SGW_S1U_ENDPOINT_CREATED, Context: teid %u NOT FOUND\n", endpoint_created_pP->context_teid); message_p = itti_alloc_new_message(TASK_SPGW_APP, SGW_CREATE_SESSION_RESPONSE); @@ -683,11 +800,9 @@ sgw_lite_handle_sgi_endpoint_updated( sgw_eps_bearer_entry_t *eps_bearer_entry_p = NULL; hashtable_rc_t hash_rc; task_id_t to_task; -#if defined (ENABLE_USE_GTPU_IN_KERNEL) static uint8_t iptable_uplink_remove_gtpu = FALSE; char cmd[256]; int ret; -#endif #if defined(ENABLE_STANDALONE_EPC) to_task = TASK_MME_APP; @@ -749,7 +864,6 @@ sgw_lite_handle_sgi_endpoint_updated( modify_response_p->bearer_choice.bearer_contexts_modified.cause = REQUEST_ACCEPTED; modify_response_p->cause = REQUEST_ACCEPTED; modify_response_p->trxn = new_bearer_ctxt_info_p->sgw_eps_bearer_context_information.trxn; -#if defined (ENABLE_USE_GTPU_IN_KERNEL) // if default bearer #warning "TODO define constant for default eps_bearer id" @@ -757,7 +871,7 @@ sgw_lite_handle_sgi_endpoint_updated( if (resp_pP->eps_bearer_id == 5) { ret = snprintf(cmd, 256, // mangle -I - "iptables -t mangle -A %s -d %u.%u.%u.%u -m mark --mark 0 -j GTPUAH --own-ip %u.%u.%u.%u --own-tun %u --peer-ip %u.%u.%u.%u --peer-tun %u --action add", + "iptables -t mangle -A %s -d %u.%u.%u.%u -m mark --mark 0 -j GTPUSP --own-ip %u.%u.%u.%u --own-tun %u --peer-ip %u.%u.%u.%u --peer-tun %u --action add", (spgw_config.sgw_config.local_to_eNB) ? "FORWARD":"FORWARD", // test eps_bearer_entry_p->paa.ipv4_address[0], eps_bearer_entry_p->paa.ipv4_address[1], @@ -788,7 +902,7 @@ sgw_lite_handle_sgi_endpoint_updated( //------------------------- ret = snprintf(cmd, 256, - "iptables -t mangle -I %s -d %u.%u.%u.%u -m mark --mark %u -j GTPUAH --own-ip %u.%u.%u.%u --own-tun %u --peer-ip %u.%u.%u.%u --peer-tun %u --action add", + "iptables -t mangle -I %s -d %u.%u.%u.%u -m mark --mark %u -j GTPUSP --own-ip %u.%u.%u.%u --own-tun %u --peer-ip %u.%u.%u.%u --peer-tun %u --action add", (spgw_config.sgw_config.local_to_eNB) ? "FORWARD":"FORWARD", // test eps_bearer_entry_p->paa.ipv4_address[0], eps_bearer_entry_p->paa.ipv4_address[1], @@ -819,7 +933,6 @@ sgw_lite_handle_sgi_endpoint_updated( SPGW_APP_ERROR("ERROR in setting up downlink TUNNEL\n"); } -#endif } MSC_LOG_TX_MESSAGE( MSC_SP_GWAPP_MME, @@ -928,7 +1041,6 @@ sgw_lite_handle_modify_bearer_request( FTEID_T_2_IP_ADDRESS_T( (&modify_bearer_pP->bearer_context_to_modify.s1_eNB_fteid) , (&eps_bearer_entry_p->enb_ip_address_for_S1u) ); eps_bearer_entry_p->enb_teid_for_S1u = modify_bearer_pP->bearer_context_to_modify.s1_eNB_fteid.teid; -#if defined (ENABLE_USE_GTPU_IN_KERNEL) { SGIUpdateEndpointResp sgi_update_end_point_resp; sgi_update_end_point_resp.context_teid = modify_bearer_pP->teid; @@ -938,29 +1050,6 @@ sgw_lite_handle_modify_bearer_request( sgi_update_end_point_resp.status = 0x00; sgw_lite_handle_sgi_endpoint_updated(&sgi_update_end_point_resp); } -#else - // UPDATE GTPV1U mapping tables with eNB references (teid, addresses) - message_p = itti_alloc_new_message(TASK_SPGW_APP, GTPV1U_UPDATE_TUNNEL_REQ); - - if (message_p == NULL) { - return -1; - } - - gtpv1u_update_tunnel_req_p = &message_p->ittiMsg.gtpv1uUpdateTunnelReq; - memset(gtpv1u_update_tunnel_req_p, 0, sizeof(Gtpv1uUpdateTunnelReq)); - gtpv1u_update_tunnel_req_p->context_teid = modify_bearer_pP->teid; - gtpv1u_update_tunnel_req_p->sgw_S1u_teid = eps_bearer_entry_p->s_gw_teid_for_S1u_S12_S4_up; ///< SGW S1U local Tunnel Endpoint Identifier - gtpv1u_update_tunnel_req_p->enb_S1u_teid = eps_bearer_entry_p->enb_teid_for_S1u; ///< eNB S1U Tunnel Endpoint Identifier - gtpv1u_update_tunnel_req_p->enb_ip_address_for_S1u = eps_bearer_entry_p->enb_ip_address_for_S1u; - gtpv1u_update_tunnel_req_p->eps_bearer_id = eps_bearer_entry_p->eps_bearer_id; - SPGW_APP_DEBUG("Rx MODIFY_BEARER_REQUEST, gtpv1u_update_tunnel_req_p->context_teid = %u\n",modify_bearer_pP->teid); - SPGW_APP_DEBUG("Rx MODIFY_BEARER_REQUEST, gtpv1u_update_tunnel_req_p->sgw_S1u_teid = %u\n",gtpv1u_update_tunnel_req_p->sgw_S1u_teid); - SPGW_APP_DEBUG("Rx MODIFY_BEARER_REQUEST, gtpv1u_update_tunnel_req_p->enb_S1u_teid = %u\n",gtpv1u_update_tunnel_req_p->enb_S1u_teid); - //SPGW_APP_DEBUG("Rx MODIFY_BEARER_REQUEST, gtpv1u_update_tunnel_req_p->enb_ip_address_for_S1u = %u\n",modify_bearer_pP->enb_ip_address_for_S1u); - SPGW_APP_DEBUG("Rx MODIFY_BEARER_REQUEST, gtpv1u_update_tunnel_req_p->eps_bearer_id = %u\n",gtpv1u_update_tunnel_req_p->eps_bearer_id); - - return itti_send_msg_to_task(TASK_GTPV1_U, INSTANCE_DEFAULT, message_p); -#endif } } else { message_p = itti_alloc_new_message(TASK_SPGW_APP, SGW_MODIFY_BEARER_RESPONSE); diff --git a/openair-cn/SGW-LITE/sgw_lite_ie_defs.h b/openair-cn/SGW-LITE/sgw_lite_ie_defs.h index 7e95a58398..68683272fb 100644 --- a/openair-cn/SGW-LITE/sgw_lite_ie_defs.h +++ b/openair-cn/SGW-LITE/sgw_lite_ie_defs.h @@ -99,6 +99,66 @@ typedef struct { uint8_t ipv6_prefix_length; } PAA_t; +/* Protocol configuration options from ts124008*/ +#define PCO_MIN_LENGTH 3 +#define PCO_MAX_LENGTH 253 +#define PCO_CONFIGURATION_PROTOCOL_PPP_FOR_USE_WITH_IP_PDP_TYPE_OR_IP_PDN_TYPE 000b + +#define PCO_PI_LCP (0xC021) +#define PCO_PI_PAP (0xC023) +#define PCO_PI_CHAP (0xC223) +#define PCO_PI_IPCP (0x8021) + +#define IPCP_CODE_CONFIGURE_REQUEST (0x01) +#define IPCP_CODE_CONFIGURE_ACK (0x02) +#define IPCP_CODE_CONFIGURE_NACK (0x03) +#define IPCP_CODE_CONFIGURE_REJECT (0x04) +#define IPCP_CODE_TERMINATE_REQUEST (0x05) +#define IPCP_CODE_TERMINATE_ACK (0x06) +#define IPCP_CODE_REJECT (0x07) + +#define IPCP_OPTION_PRIMARY_DNS_SERVER_IP_ADDRESS (0x81) +#define IPCP_OPTION_SECONDARY_DNS_SERVER_IP_ADDRESS (0x83) + +/* CONTAINER IDENTIFIER MS to network direction:*/ +#define PCO_CI_P_CSCF_IPV6_ADDRESS_REQUEST (0x0001) +#define PCO_CI_DNS_SERVER_IPV6_ADDRESS_REQUEST (0x0003) +#define PCO_CI_MS_SUPPORT_OF_NETWORK_REQUESTED_BEARER_CONTROL_INDICATOR (0x0005) +#define PCO_CI_DSMIPV6_HOME_AGENT_ADDRESS_REQUEST (0x0007) +#define PCO_CI_DSMIPV6_HOME_NETWORK_PREFIX_REQUEST (0x0008) +#define PCO_CI_DSMIPV6_IPV4_HOME_AGENT_ADDRESS_REQUEST (0x0009) +#define PCO_CI_IP_ADDRESS_ALLOCATION_VIA_NAS_SIGNALLING (0x000A) +#define PCO_CI_IPV4_ADDRESS_ALLOCATION_VIA_DHCPV4 (0x000B) +#define PCO_CI_P_CSCF_IPV4_ADDRESS_REQUEST (0x000C) +#define PCO_CI_DNS_SERVER_IPV4_ADDRESS_REQUEST (0x000D) +#define PCO_CI_MSISDN_REQUEST (0x000E) +#define PCO_CI_IFOM_SUPPORT_REQUEST (0x000F) +#define PCO_CI_IPV4_LINK_MTU_REQUEST (0x0010) + +/* CONTAINER IDENTIFIER Network to MS direction:*/ +#define PCO_CI_P_CSCF_IPV6_ADDRESS (0x0001) +#define PCO_CI_IM_CN_SUBSYSTEM_SIGNALING_FLAG (0x0002) +#define PCO_CI_DNS_SERVER_IPV6_ADDRESS (0x0003) +#define PCO_CI_POLICY_CONTROL_REJECTION_CODE (0x0004) +#define PCO_CI_SELECTED_BEARER_CONTROL_MODE (0x0005) +#define PCO_CI_DSMIPV6_HOME_AGENT_ADDRESS (0x0007) +#define PCO_CI_DSMIPV6_HOME_NETWORK_PREFIX (0x0008) +#define PCO_CI_DSMIPV6_IPV4_HOME_AGENT_ADDRESS (0x0009) +#define PCO_CI_P_CSCF_IPV4_ADDRESS (0x000C) +#define PCO_CI_DNS_SERVER_IPV4_ADDRESS (0x000D) +#define PCO_CI_MSISDN (0x000E) +#define PCO_CI_IFOM_SUPPORT (0x000F) +#define PCO_CI_IPV4_LINK_MTU (0x0010) + +/* Both directions:*/ +#define PCO_CI_IM_CN_SUBSYSTEM_SIGNALING_FLAG (0x0002) + +typedef struct pco_flat_s{ + uint8_t byte[PCO_MAX_LENGTH]; + uint8_t length; +} pco_flat_t; + + #define IMSI(imsi) \ (imsi)->digit[0], \ (imsi)->digit[1], \ diff --git a/openair-cn/SGW-LITE/sgw_lite_task.c b/openair-cn/SGW-LITE/sgw_lite_task.c index 9d5698b4b6..27f5836bb4 100644 --- a/openair-cn/SGW-LITE/sgw_lite_task.c +++ b/openair-cn/SGW-LITE/sgw_lite_task.c @@ -49,6 +49,7 @@ #include "hashtable.h" #include "spgw_config.h" #include "pgw_lite_paa.h" +#include "msc.h" spgw_config_t spgw_config; sgw_app_t sgw_app; @@ -57,6 +58,7 @@ pgw_app_t pgw_app; static void *sgw_lite_intertask_interface(void *args_p) { itti_mark_task_ready(TASK_SPGW_APP); + MSC_START_USE(); while(1) { MessageDef *received_message_p; @@ -137,7 +139,6 @@ static void *sgw_lite_intertask_interface(void *args_p) int sgw_lite_init(char* config_file_name_pP) { SPGW_APP_DEBUG("Initializing SPGW-APP task interface\n"); -#if defined (ENABLE_USE_GTPU_IN_KERNEL) spgw_system("modprobe ip_tables", SPGW_ABORT_ON_ERROR, __FILE__, __LINE__); spgw_system("modprobe x_tables", SPGW_ABORT_ON_ERROR, __FILE__, __LINE__); spgw_system("iptables -P INPUT ACCEPT", SPGW_WARN_ON_ERROR, __FILE__, __LINE__); @@ -180,7 +181,7 @@ int sgw_lite_init(char* config_file_name_pP) spgw_system("sysctl -w net.ipv4.conf.all.route_localnet=1",SPGW_WARN_ON_ERROR, __FILE__, __LINE__); spgw_system("sysctl -w net.ipv4.conf.all.rp_filter=0",SPGW_WARN_ON_ERROR, __FILE__, __LINE__); spgw_system("sync", SPGW_ABORT_ON_ERROR, __FILE__, __LINE__); -#endif + spgw_config_init(config_file_name_pP, &spgw_config); pgw_lite_load_pool_ip_addresses(); diff --git a/openair-cn/SGW-LITE/spgw_config.c b/openair-cn/SGW-LITE/spgw_config.c index 7a4b896e21..6a490e772d 100755 --- a/openair-cn/SGW-LITE/spgw_config.c +++ b/openair-cn/SGW-LITE/spgw_config.c @@ -170,12 +170,12 @@ int spgw_config_process(spgw_config_t* config_pP) config_pP->sgw_config.local_to_eNB = FALSE; if (snprintf(system_cmd, 256, - "insmod $OPENAIR_TARGETS/bin/xt_GTPUAH.ko gtpu_enb_port=2152 gtpu_sgw_port=%u sgw_addr=\"%s\" ", + "insmod $OPENAIR_TARGETS/bin/xt_GTPUSP.ko gtpu_enb_port=2152 gtpu_sgw_port=%u sgw_addr=\"%s\" ", config_pP->sgw_config.sgw_udp_port_for_S1u_S12_S4_up, inet_ntoa(inaddr)) > 0) { ret += spgw_system(system_cmd, SPGW_WARN_ON_ERROR, __FILE__, __LINE__); } else { - SPGW_APP_ERROR("GTPUAH kernel module\n"); + SPGW_APP_ERROR("GTPUSP kernel module\n"); ret = -1; } } @@ -201,20 +201,18 @@ int spgw_config_process(spgw_config_t* config_pP) } if (snprintf(system_cmd, 256, - "insmod $OPENAIR_TARGETS/bin/xt_GTPUAH.ko gtpu_enb_port=2153 gtpu_sgw_port=%u sgw_addr=\"%s\" ", + "insmod $OPENAIR_TARGETS/bin/xt_GTPUSP.ko gtpu_enb_port=2153 gtpu_sgw_port=%u sgw_addr=\"%s\" ", config_pP->sgw_config.sgw_udp_port_for_S1u_S12_S4_up, inet_ntoa(inaddr)) > 0) { ret += spgw_system(system_cmd, SPGW_WARN_ON_ERROR, __FILE__, __LINE__); } else { - SPGW_APP_ERROR("GTPUAH kernel module\n"); + SPGW_APP_ERROR("GTPUSP kernel module\n"); ret = -1; } } -#if defined (ENABLE_USE_GTPU_IN_KERNEL) ret += spgw_system("echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects", SPGW_ABORT_ON_ERROR, __FILE__, __LINE__); -#endif if (snprintf(system_cmd, 256, @@ -367,26 +365,6 @@ int spgw_config_init(char* lib_config_file_name_pP, spgw_config_t* config_pP) } } - - if( ( - config_setting_lookup_string( setting_sgw, SGW_CONFIG_STRING_SGW_DROP_UPLINK_S1U_TRAFFIC, - (const char **)&sgw_drop_uplink_s1u_traffic) - && config_setting_lookup_string( setting_sgw, SGW_CONFIG_STRING_SGW_DROP_DOWNLINK_S1U_TRAFFIC, - (const char **)&sgw_drop_downlink_s1u_traffic) - ) - ) { - if (strcasecmp(sgw_drop_uplink_s1u_traffic, "yes") == 0) { - config_pP->sgw_config.sgw_drop_uplink_traffic=1; - } else { - config_pP->sgw_config.sgw_drop_uplink_traffic=0; - } - - if (strcasecmp(sgw_drop_downlink_s1u_traffic, "yes") == 0) { - config_pP->sgw_config.sgw_drop_downlink_traffic=1; - } else { - config_pP->sgw_config.sgw_drop_downlink_traffic=0; - } - } } setting_pgw = config_lookup(&cfg, PGW_CONFIG_STRING_PGW_CONFIG); @@ -477,7 +455,7 @@ int spgw_config_init(char* lib_config_file_name_pP, spgw_config_t* config_pP) // valid address atoken2 = strtok(NULL, PGW_CONFIG_STRING_IPV4_PREFIX_DELIMITER); prefix_mask = atoi(atoken2); -#if defined (ENABLE_USE_GTPU_IN_KERNEL) + in_addr_var.s_addr = config_pP->sgw_config.ipv4.sgw_ipv4_address_for_S1u_S12_S4_up; if (snprintf(system_cmd, 256, @@ -489,7 +467,7 @@ int spgw_config_init(char* lib_config_file_name_pP, spgw_config_t* config_pP) } if (snprintf(system_cmd, 256, - "iptables -I OUTPUT -t mangle -m mark -s %s/%s ! --mark 0 -j CONNMARK --save-mark", + "iptables -I OUTPUT -t mangle -s %s/%s -m mark ! --mark 0 -j CONNMARK --save-mark", astring, atoken2) > 0) { spgw_system(system_cmd, SPGW_ABORT_ON_ERROR, __FILE__, __LINE__); } else { @@ -503,7 +481,6 @@ int spgw_config_init(char* lib_config_file_name_pP, spgw_config_t* config_pP) SPGW_APP_ERROR("Route for UEs\n"); } -#endif if ((prefix_mask >= 2)&&(prefix_mask < 32)) { memcpy (&addr_start, buf_in_addr, sizeof(struct in_addr)); @@ -599,15 +576,19 @@ int spgw_config_init(char* lib_config_file_name_pP, spgw_config_t* config_pP) } if( - config_setting_lookup_string(subsetting, + config_setting_lookup_string(setting_pgw, PGW_CONFIG_STRING_DEFAULT_DNS_IPV4_ADDRESS, (const char **)&pgw_default_dns_ipv4_address) - && config_setting_lookup_string(subsetting, + && config_setting_lookup_string(setting_pgw, PGW_CONFIG_STRING_DEFAULT_DNS_SEC_IPV4_ADDRESS, (const char **)&pgw_default_dns_sec_ipv4_address)) { config_pP->pgw_config.ipv4.pgw_interface_name_for_S5_S8 = strdup(pgw_interface_name_for_S5_S8); IPV4_STR_ADDR_TO_INT_NWBO ( pgw_default_dns_ipv4_address, config_pP->pgw_config.ipv4.default_dns_v4, "BAD IPv4 ADDRESS FORMAT FOR DEFAULT DNS !\n" ) IPV4_STR_ADDR_TO_INT_NWBO ( pgw_default_dns_sec_ipv4_address, config_pP->pgw_config.ipv4.default_dns_sec_v4, "BAD IPv4 ADDRESS FORMAT FOR DEFAULT DNS SEC!\n" ) + SPGW_APP_INFO("Parsing configuration file default primary DNS IPv4 address: %x\n", + config_pP->pgw_config.ipv4.default_dns_v4); + SPGW_APP_INFO("Parsing configuration file default secondary DNS IPv4 address: %x\n", + config_pP->pgw_config.ipv4.default_dns_sec_v4); } else { SPGW_APP_WARN("NO DNS CONFIGURATION FOUND\n"); } diff --git a/openair-cn/SGW-LITE/spgw_config.h b/openair-cn/SGW-LITE/spgw_config.h index 3c2f5a13df..5a201e4482 100755 --- a/openair-cn/SGW-LITE/spgw_config.h +++ b/openair-cn/SGW-LITE/spgw_config.h @@ -50,8 +50,6 @@ #define SGW_CONFIG_STRING_SGW_IPV4_ADDRESS_FOR_S5_S8_UP "SGW_IPV4_ADDRESS_FOR_S5_S8_UP" #define SGW_CONFIG_STRING_SGW_INTERFACE_NAME_FOR_S11 "SGW_INTERFACE_NAME_FOR_S11" #define SGW_CONFIG_STRING_SGW_IPV4_ADDRESS_FOR_S11 "SGW_IPV4_ADDRESS_FOR_S11" -#define SGW_CONFIG_STRING_SGW_DROP_UPLINK_S1U_TRAFFIC "SGW_DROP_UPLINK_S1U_TRAFFIC" -#define SGW_CONFIG_STRING_SGW_DROP_DOWNLINK_S1U_TRAFFIC "SGW_DROP_DOWNLINK_S1U_TRAFFIC" #define PGW_CONFIG_STRING_PGW_CONFIG "P-GW" #define PGW_CONFIG_STRING_NETWORK_INTERFACES_CONFIG "NETWORK_INTERFACES" diff --git a/openair-cn/TEST/mme_test_s1_generate_scenario_from_pcap b/openair-cn/TEST/mme_test_s1_generate_scenario_from_pcap new file mode 100755 index 0000000000..247814f553 --- /dev/null +++ b/openair-cn/TEST/mme_test_s1_generate_scenario_from_pcap @@ -0,0 +1,76 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- +import sys +import subprocess +import re +import socket +import datetime +from datetime import date +import os, errno +import argparse +import tempfile +from xml.dom.minidom import parse, parseString +#from xml.etree.ElementTree import ElementTree + +##################### +# program arguments +##################### +parser = argparse.ArgumentParser() +parser.add_argument("--pcap_file", "-p", type=str,help="input pcap file to be translated") +args = parser.parse_args() + +##################### +# get xml document from pcap +##################### +orig_pcap_file_name = args.pcap_file.strip() +orig_pdml_string = subprocess.check_output(["tshark", '-T', 'pdml', '-r', orig_pcap_file_name]) + +orig_dom = parseString(orig_pdml_string) +#orig_etree = ElementTree() +#orig_etree.parse(orig_pcap_pdml_file.name) + +##################### +# filtering unwanted packets +##################### +#cases = orig_etree.findall(".//proto[@name='sctp']") +packets = orig_dom.getElementsByTagName("packet") +for packet in packets: + found_sctp = False + found_s1ap = False + protos = packet.getElementsByTagName("proto") + for proto in protos: + attrs = proto.attributes + urlnode = attrs['name'] + if urlnode.nodeValue == 'sctp': + found_sctp = True + elif urlnode.nodeValue == 's1ap': + found_s1ap = True + elif urlnode.nodeValue == 'geninfo': + packet.removeChild(proto) + elif urlnode.nodeValue == 'eth': + packet.removeChild(proto) + if found_s1ap == False: + # hopefully it seems to work (remove iterated packet) + packet.parentNode.removeChild(packet) + +##################### +# dom to xml string +##################### +filtered_pdml_string = orig_dom.toxml() +cleaned_pdml_string = "" +##################### +# remove blank lines in xml string +##################### +lines = filtered_pdml_string.splitlines() +for line in lines: + if line[:-1]: + cleaned_pdml_string += line + '\r\n' +#print "'%s'" % cleaned_pdml_string +##################### +# write xml string to pdml file +##################### +out_pdml_file_name = os.path.dirname(orig_pcap_file_name) + os.path.splitext(os.path.basename(orig_pcap_file_name))[0] + '.pdml' +out_file = open(out_pdml_file_name, "w") +out_file.write(cleaned_pdml_string) +out_file.close() + diff --git a/openair-cn/TEST/oaisim_mme_test_s1c.c b/openair-cn/TEST/oaisim_mme_test_s1c.c index ff271eebaf..0f1d1e6428 100644 --- a/openair-cn/TEST/oaisim_mme_test_s1c.c +++ b/openair-cn/TEST/oaisim_mme_test_s1c.c @@ -61,13 +61,19 @@ static void get_options (int argc, char **argv); static uint32_t eNB_app_register(const uint32_t enb_id_start, const uint32_t enb_id_end, const Enb_properties_array_t *enb_properties); static void *eNB_app_task (void *args_p); -static void mme_test_s1_start_test(instance_t instance); +void mme_test_s1_start_test(instance_t instance); //------------------------------------------------------------------------------ static char *conf_config_file_name = NULL; static char *itti_dump_file = NULL; const Enb_properties_array_t *enb_properties = NULL; int16_t glog_level = LOG_INFO; int16_t glog_verbosity = LOG_MED; +s1c_test_t s1c_test = { + 0, // scenario_index + 0, // tx_next_message_index + 0, // rx_next_message_index + 0 // assoc_id + }; //------------------------------------------------------------------------------ static void get_options (int argc, char **argv) @@ -116,7 +122,7 @@ static uint32_t eNB_app_register(const uint32_t enb_id_start, const uint32_t enb char *str = NULL; struct in_addr addr; - + // 1 eNB should be max. // 1 eNB should be max. for (enb_id = enb_id_start; (enb_id < enb_id_end) ; enb_id++) { { @@ -228,7 +234,7 @@ static void *eNB_app_task(void *args_p) /* Check if all register eNB requests have been processed */ if (register_enb_pending == 0) { if (registered_enb == enb_nb) { - mme_test_s1_start_test(); + mme_test_s1_start_test(instance); } else { @@ -288,10 +294,10 @@ void mme_test_s1_start_test(instance_t instance) //------------------------------------------------------------------------------ { s1ap_eNB_itti_send_sctp_data_req(instance, - int32_t assoc_id, - s1ap_scenario1[scenario_message_index].buffer, - s1ap_scenario1[scenario_message_index].buf_len, - s1ap_scenario1[scenario_message_index].sctp_stream_id); + s1c_test.assoc_id, + s1ap_scenarios[s1c_test.scenario_index][s1c_test.tx_next_message_index].buffer, + s1ap_scenarios[s1c_test.scenario_index][s1c_test.tx_next_message_index].buf_len, + s1ap_scenarios[s1c_test.scenario_index][s1c_test.tx_next_message_index].sctp_stream_id); } @@ -302,6 +308,7 @@ void mme_test_s1_notify_sctp_data_ind(uint32_t assoc_id, int32_t stream, const u } + //------------------------------------------------------------------------------ int main( int argc, char **argv ) //------------------------------------------------------------------------------ diff --git a/openair-cn/TEST/oaisim_mme_test_s1c.h b/openair-cn/TEST/oaisim_mme_test_s1c.h index 107a7a6d7d..af59dd1a23 100644 --- a/openair-cn/TEST/oaisim_mme_test_s1c.h +++ b/openair-cn/TEST/oaisim_mme_test_s1c.h @@ -28,4 +28,12 @@ *******************************************************************************/ +typedef struct s1c_test_s { + int scenario_index; + int tx_next_message_index; + int rx_next_message_index; + int32_t assoc_id; +}s1c_test_t; + +void mme_test_s1_start_test(instance_t instance); void mme_test_s1_notify_sctp_data_ind(uint32_t assoc_id, int32_t stream, const uint8_t * const data, const uint32_t data_length); diff --git a/openair-cn/TEST/oaisim_mme_test_s1c_s1ap.c b/openair-cn/TEST/oaisim_mme_test_s1c_s1ap.c new file mode 100755 index 0000000000..a46c8fa6b4 --- /dev/null +++ b/openair-cn/TEST/oaisim_mme_test_s1c_s1ap.c @@ -0,0 +1,337 @@ +/******************************************************************************* + OpenAirInterface + Copyright(c) 1999 - 2014 Eurecom + + OpenAirInterface is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + + OpenAirInterface is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with OpenAirInterface.The full GNU General Public License is + included in this distribution in the file called "COPYING". If not, + see . + + Contact Information + OpenAirInterface Admin: openair_admin@eurecom.fr + OpenAirInterface Tech : openair_tech@eurecom.fr + OpenAirInterface Dev : openair4g-devel@eurecom.fr + + Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE + +*******************************************************************************/ +#define _GNU_SOURCE +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +#include "tree.h" +#include "queue.h" +#include "intertask_interface.h" +#include "s1ap_eNB_default_values.h" +#include "s1ap_common.h" +#include "s1ap_ies_defs.h" +#include "s1ap_eNB_defs.h" +#include "s1ap_eNB_management_procedures.h" +#include "assertions.h" + +#include "platform_types.h" +#include "oaisim_mme_test_s1c.h" + + +void s1ap_eNB_handle_sctp_data_ind(sctp_data_ind_t *sctp_data_ind) +{ + int result; + + DevAssert(sctp_data_ind != NULL); + mme_test_s1_notify_sctp_data_ind(sctp_data_ind->assoc_id, sctp_data_ind->stream, + sctp_data_ind->buffer, sctp_data_ind->buffer_length); + + result = itti_free(TASK_UNKNOWN, sctp_data_ind->buffer); + AssertFatal (result == EXIT_SUCCESS, "Failed to free memory (%d)!\n", result); +} + + +void s1ap_eNB_itti_send_sctp_data_req(instance_t instance, int32_t assoc_id, uint8_t *buffer, + uint32_t buffer_length, uint16_t stream) +{ + MessageDef *message_p; + sctp_data_req_t *sctp_data_req; + + message_p = itti_alloc_new_message(TASK_S1AP, SCTP_DATA_REQ); + + sctp_data_req = &message_p->ittiMsg.sctp_data_req; + + sctp_data_req->assoc_id = assoc_id; + sctp_data_req->buffer = buffer; + sctp_data_req->buffer_length = buffer_length; + sctp_data_req->stream = stream; + + itti_send_msg_to_task(TASK_SCTP, instance, message_p); +} + +void s1ap_handle_s1_setup_message(s1ap_eNB_mme_data_t *mme_desc_p, int sctp_shutdown) +{ + if (sctp_shutdown) { + /* A previously connected MME has been shutdown */ + + /* TODO check if it was used by some eNB and send a message to inform these eNB if there is no more associated MME */ + if (mme_desc_p->state == S1AP_ENB_STATE_CONNECTED) { + mme_desc_p->state = S1AP_ENB_STATE_DISCONNECTED; + + if (mme_desc_p->s1ap_eNB_instance->s1ap_mme_associated_nb > 0) { + /* Decrease associated MME number */ + mme_desc_p->s1ap_eNB_instance->s1ap_mme_associated_nb --; + } + + /* If there are no more associated MME, inform eNB app */ + if (mme_desc_p->s1ap_eNB_instance->s1ap_mme_associated_nb == 0) { + MessageDef *message_p; + + message_p = itti_alloc_new_message(TASK_S1AP, S1AP_DEREGISTERED_ENB_IND); + S1AP_DEREGISTERED_ENB_IND(message_p).nb_mme = 0; + itti_send_msg_to_task(TASK_ENB_APP, mme_desc_p->s1ap_eNB_instance->instance, message_p); + } + } + } else { + /* Check that at least one setup message is pending */ + DevCheck(mme_desc_p->s1ap_eNB_instance->s1ap_mme_pending_nb > 0, mme_desc_p->s1ap_eNB_instance->instance, + mme_desc_p->s1ap_eNB_instance->s1ap_mme_pending_nb, 0); + + if (mme_desc_p->s1ap_eNB_instance->s1ap_mme_pending_nb > 0) { + /* Decrease pending messages number */ + mme_desc_p->s1ap_eNB_instance->s1ap_mme_pending_nb --; + } + + /* If there are no more pending messages, inform eNB app */ + if (mme_desc_p->s1ap_eNB_instance->s1ap_mme_pending_nb == 0) { + MessageDef *message_p; + + message_p = itti_alloc_new_message(TASK_S1AP, S1AP_REGISTER_ENB_CNF); + S1AP_REGISTER_ENB_CNF(message_p).nb_mme = mme_desc_p->s1ap_eNB_instance->s1ap_mme_associated_nb; + itti_send_msg_to_task(TASK_ENB_APP, mme_desc_p->s1ap_eNB_instance->instance, message_p); + } + } +} + +void s1ap_eNB_handle_sctp_association_resp(instance_t instance, sctp_new_association_resp_t *sctp_new_association_resp) +{ + s1ap_eNB_instance_t *instance_p; + s1ap_eNB_mme_data_t *s1ap_mme_data_p; + + DevAssert(sctp_new_association_resp != NULL); + + instance_p = s1ap_eNB_get_instance(instance); + DevAssert(instance_p != NULL); + + s1ap_mme_data_p = s1ap_eNB_get_MME(instance_p, -1, + sctp_new_association_resp->ulp_cnx_id); + DevAssert(s1ap_mme_data_p != NULL); + + if (sctp_new_association_resp->sctp_state != SCTP_STATE_ESTABLISHED) { + S1AP_WARN("Received unsuccessful result for SCTP association (%u), instance %d, cnx_id %u\n", + sctp_new_association_resp->sctp_state, + instance, + sctp_new_association_resp->ulp_cnx_id); + + s1ap_handle_s1_setup_message(s1ap_mme_data_p, sctp_new_association_resp->sctp_state == SCTP_STATE_SHUTDOWN); + + return; + } + + /* Update parameters */ + s1ap_mme_data_p->assoc_id = sctp_new_association_resp->assoc_id; + s1ap_mme_data_p->in_streams = sctp_new_association_resp->in_streams; + s1ap_mme_data_p->out_streams = sctp_new_association_resp->out_streams; + + /* Prepare new S1 Setup Request */ + mme_test_s1_start_test(instance_p, s1ap_mme_data_p); +} + +void s1ap_eNB_register_mme(s1ap_eNB_instance_t *instance_p, + net_ip_address_t *mme_ip_address, + net_ip_address_t *local_ip_addr) +{ + MessageDef *message_p = NULL; + sctp_new_association_req_t *sctp_new_association_req_p = NULL; + s1ap_eNB_mme_data_t *s1ap_mme_data_p = NULL; + + DevAssert(instance_p != NULL); + DevAssert(mme_ip_address != NULL); + + message_p = itti_alloc_new_message(TASK_S1AP, SCTP_NEW_ASSOCIATION_REQ); + + sctp_new_association_req_p = &message_p->ittiMsg.sctp_new_association_req; + + sctp_new_association_req_p->port = S1AP_PORT_NUMBER; + sctp_new_association_req_p->ppid = S1AP_SCTP_PPID; + + memcpy(&sctp_new_association_req_p->remote_address, + mme_ip_address, + sizeof(*mme_ip_address)); + + memcpy(&sctp_new_association_req_p->local_address, + local_ip_addr, + sizeof(*local_ip_addr)); + + /* Create new MME descriptor */ + s1ap_mme_data_p = calloc(1, sizeof(*s1ap_mme_data_p)); + DevAssert(s1ap_mme_data_p != NULL); + + s1ap_mme_data_p->cnx_id = s1ap_eNB_fetch_add_global_cnx_id(); + sctp_new_association_req_p->ulp_cnx_id = s1ap_mme_data_p->cnx_id; + + s1ap_mme_data_p->assoc_id = -1; + s1ap_mme_data_p->s1ap_eNB_instance = instance_p; + + STAILQ_INIT(&s1ap_mme_data_p->served_gummei); + + /* Insert the new descriptor in list of known MME + * but not yet associated. + */ + RB_INSERT(s1ap_mme_map, &instance_p->s1ap_mme_head, s1ap_mme_data_p); + s1ap_mme_data_p->state = S1AP_ENB_STATE_WAITING; + instance_p->s1ap_mme_nb ++; + instance_p->s1ap_mme_pending_nb ++; + + itti_send_msg_to_task(TASK_SCTP, instance_p->instance, message_p); +} + + + +void s1ap_eNB_handle_register_eNB(instance_t instance, s1ap_register_enb_req_t *s1ap_register_eNB) +{ + s1ap_eNB_instance_t *new_instance; + uint8_t index; + + DevAssert(s1ap_register_eNB != NULL); + + /* Look if the provided instance already exists */ + new_instance = s1ap_eNB_get_instance(instance); + + if (new_instance != NULL) { + /* Checks if it is a retry on the same eNB */ + DevCheck(new_instance->eNB_id == s1ap_register_eNB->eNB_id, new_instance->eNB_id, s1ap_register_eNB->eNB_id, 0); + DevCheck(new_instance->cell_type == s1ap_register_eNB->cell_type, new_instance->cell_type, s1ap_register_eNB->cell_type, 0); + DevCheck(new_instance->tac == s1ap_register_eNB->tac, new_instance->tac, s1ap_register_eNB->tac, 0); + DevCheck(new_instance->mcc == s1ap_register_eNB->mcc, new_instance->mcc, s1ap_register_eNB->mcc, 0); + DevCheck(new_instance->mnc == s1ap_register_eNB->mnc, new_instance->mnc, s1ap_register_eNB->mnc, 0); + DevCheck(new_instance->mnc_digit_length == s1ap_register_eNB->mnc_digit_length, new_instance->mnc_digit_length, s1ap_register_eNB->mnc_digit_length, 0); + DevCheck(new_instance->default_drx == s1ap_register_eNB->default_drx, new_instance->default_drx, s1ap_register_eNB->default_drx, 0); + } else { + new_instance = calloc(1, sizeof(s1ap_eNB_instance_t)); + DevAssert(new_instance != NULL); + + RB_INIT(&new_instance->s1ap_ue_head); + RB_INIT(&new_instance->s1ap_mme_head); + + /* Copy usefull parameters */ + new_instance->instance = instance; + new_instance->eNB_name = s1ap_register_eNB->eNB_name; + new_instance->eNB_id = s1ap_register_eNB->eNB_id; + new_instance->cell_type = s1ap_register_eNB->cell_type; + new_instance->tac = s1ap_register_eNB->tac; + new_instance->mcc = s1ap_register_eNB->mcc; + new_instance->mnc = s1ap_register_eNB->mnc; + new_instance->mnc_digit_length = s1ap_register_eNB->mnc_digit_length; + new_instance->default_drx = s1ap_register_eNB->default_drx; + + /* Add the new instance to the list of eNB (meaningfull in virtual mode) */ + s1ap_eNB_insert_new_instance(new_instance); + + S1AP_DEBUG("Registered new eNB[%d] and %s eNB id %u\n", + instance, + s1ap_register_eNB->cell_type == CELL_MACRO_ENB ? "macro" : "home", + s1ap_register_eNB->eNB_id); + } + + DevCheck(s1ap_register_eNB->nb_mme <= S1AP_MAX_NB_MME_IP_ADDRESS, + S1AP_MAX_NB_MME_IP_ADDRESS, s1ap_register_eNB->nb_mme, 0); + + /* Trying to connect to provided list of MME ip address */ + for (index = 0; index < s1ap_register_eNB->nb_mme; index++) { + s1ap_eNB_register_mme(new_instance, &s1ap_register_eNB->mme_ip_address[index], + &s1ap_register_eNB->enb_ip_address); + } +} + + + + +void *s1ap_eNB_task(void *arg) +{ + MessageDef *received_msg = NULL; + int result; + + S1AP_DEBUG("Starting S1AP layer\n"); + + s1ap_eNB_prepare_internal_data(); + + itti_mark_task_ready(TASK_S1AP); + + while (1) { + itti_receive_msg(TASK_S1AP, &received_msg); + + switch (ITTI_MSG_ID(received_msg)) { + case TERMINATE_MESSAGE: + itti_exit_task(); + break; + + case S1AP_REGISTER_ENB_REQ: { + /* Register a new eNB. + * in Virtual mode eNBs will be distinguished using the mod_id/ + * Each eNB has to send an S1AP_REGISTER_ENB message with its + * own parameters. + */ + s1ap_eNB_handle_register_eNB(ITTI_MESSAGE_GET_INSTANCE(received_msg), + &S1AP_REGISTER_ENB_REQ(received_msg)); + } + break; + + case SCTP_NEW_ASSOCIATION_RESP: { + s1ap_eNB_handle_sctp_association_resp(ITTI_MESSAGE_GET_INSTANCE(received_msg), + &received_msg->ittiMsg.sctp_new_association_resp); + } + break; + + case SCTP_DATA_IND: { + s1ap_eNB_handle_sctp_data_ind(&received_msg->ittiMsg.sctp_data_ind); + } + break; + + + + default: + S1AP_ERROR("Received unhandled message: %d:%s\n", + ITTI_MSG_ID(received_msg), ITTI_MSG_NAME(received_msg)); + break; + } + + result = itti_free (ITTI_MSG_ORIGIN_ID(received_msg), received_msg); + AssertFatal (result == EXIT_SUCCESS, "Failed to free memory (%d)!\n", result); + + received_msg = NULL; + } + + return NULL; +} diff --git a/openair-cn/TEST/oaisim_mme_test_s1c_s1ap.h b/openair-cn/TEST/oaisim_mme_test_s1c_s1ap.h new file mode 100755 index 0000000000..3e3c186d19 --- /dev/null +++ b/openair-cn/TEST/oaisim_mme_test_s1c_s1ap.h @@ -0,0 +1,62 @@ +/******************************************************************************* + OpenAirInterface + Copyright(c) 1999 - 2014 Eurecom + + OpenAirInterface is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + + OpenAirInterface is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with OpenAirInterface.The full GNU General Public License is + included in this distribution in the file called "COPYING". If not, + see . + + Contact Information + OpenAirInterface Admin: openair_admin@eurecom.fr + OpenAirInterface Tech : openair_tech@eurecom.fr + OpenAirInterface Dev : openair4g-devel@eurecom.fr + + Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE + +*******************************************************************************/ +#define _GNU_SOURCE +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +void s1ap_eNB_handle_sctp_data_ind(sctp_data_ind_t *sctp_data_ind); + +void s1ap_eNB_itti_send_sctp_data_req(instance_t instance, int32_t assoc_id, uint8_t *buffer, + uint32_t buffer_length, uint16_t stream); + +void s1ap_handle_s1_setup_message(s1ap_eNB_mme_data_t *mme_desc_p, int sctp_shutdown); + +void s1ap_eNB_handle_sctp_association_resp(instance_t instance, sctp_new_association_resp_t *sctp_new_association_resp); + +void s1ap_eNB_register_mme(s1ap_eNB_instance_t *instance_p, + net_ip_address_t *mme_ip_address, + net_ip_address_t *local_ip_addr, + uint16_t in_streams, + uint16_t out_streams); +void s1ap_eNB_handle_register_eNB(instance_t instance, s1ap_register_enb_req_t *s1ap_register_eNB); +void *s1ap_eNB_task(void *arg); diff --git a/openair-cn/TEST/oaisim_mme_test_s1c_scenario.c b/openair-cn/TEST/oaisim_mme_test_s1c_scenario.c new file mode 100755 index 0000000000..416ac99904 --- /dev/null +++ b/openair-cn/TEST/oaisim_mme_test_s1c_scenario.c @@ -0,0 +1,286 @@ +/******************************************************************************* + OpenAirInterface + Copyright(c) 1999 - 2014 Eurecom + + OpenAirInterface is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + + OpenAirInterface is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with OpenAirInterface.The full GNU General Public License is + included in this distribution in the file called "COPYING". If not, + see . + + Contact Information + OpenAirInterface Admin: openair_admin@eurecom.fr + OpenAirInterface Tech : openair_tech@eurecom.fr + OpenAirInterface Dev : openair4g-devel@eurecom.fr + + Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE + +*******************************************************************************/ +#include +#include +#include +#include + +#include "oaisim_mme_test_s1c_scenario.h" + +int scenario_index = 0; +int scenario_message_index = 0; +int debug = 0; +int error_count = 0; +int break_on_error = 0; + + +extern s1ap_message_test_t s1ap_scenario1[]; + +s1ap_message_test_t s1ap_scenarios[][] = {s1ap_scenario1}; + +/* -1 means invalid */ +static const signed char hex_digits[0x100] = { + -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, + -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, + -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,-1,-1,-1,-1,-1,-1, + -1,10,11,12,13,14,15,-1,-1,-1,-1,-1,-1,-1,-1,-1, + -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, + -1,10,11,12,13,14,15,-1,-1,-1,-1,-1,-1,-1,-1,-1, + -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, + -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, + -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, + -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, + -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, + -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, + -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, + -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, + -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 +}; + +//------------------------------------------------------------------------------ +void +fail (const char *format, ...) +//------------------------------------------------------------------------------ +{ + char str[1024]; + va_list arg_ptr; + + va_start (arg_ptr, format); + vsnprintf ( str, sizeof(str), format, arg_ptr); + va_end (arg_ptr); + fputs(str, stderr); + error_count++; + + if (break_on_error) + exit (1); +} + +//------------------------------------------------------------------------------ +void +success (const char *format, ...) +//------------------------------------------------------------------------------ +{ + char str[1024]; + va_list arg_ptr; + + va_start (arg_ptr, format); + vsnprintf ( str, sizeof(str), format, arg_ptr); + va_end (arg_ptr); + fputs(str, stderr); +} + +//------------------------------------------------------------------------------ +void +escapeprint (const char *str, size_t len) +//------------------------------------------------------------------------------ +{ + size_t i; + + printf (" (length %d bytes):\n\t", (int) len); + + for (i = 0; i < len; i++) { + if (((str[i] & 0xFF) >= 'A' && (str[i] & 0xFF) <= 'Z') || + ((str[i] & 0xFF) >= 'a' && (str[i] & 0xFF) <= 'z') || + ((str[i] & 0xFF) >= '0' && (str[i] & 0xFF) <= '9') + || (str[i] & 0xFF) == ' ' || (str[i] & 0xFF) == '.') + printf ("%c", (str[i] & 0xFF)); + else + printf ("\\x%02X", (str[i] & 0xFF)); + + if ((i + 1) % 16 == 0 && (i + 1) < len) + printf ("'\n\t'"); + } + + printf ("\n"); +} + +//------------------------------------------------------------------------------ +void +hexprint (const void *_str, size_t len) +//------------------------------------------------------------------------------ +{ + size_t i; + const char* str = _str; + + printf ("\t;; "); + + for (i = 0; i < len; i++) { + printf ("%02x ", (str[i] & 0xFF)); + + if ((i + 1) % 8 == 0) + printf (" "); + + if ((i + 1) % 16 == 0 && i + 1 < len) + printf ("\n\t;; "); + } + + printf ("\n"); +} + +//------------------------------------------------------------------------------ +void +binprint (const void *_str, size_t len) +//------------------------------------------------------------------------------ +{ + size_t i; + const char* str = _str; + + printf ("\t;; "); + + for (i = 0; i < len; i++) { + printf ("%d%d%d%d%d%d%d%d ", + (str[i] & 0xFF) & 0x80 ? 1 : 0, + (str[i] & 0xFF) & 0x40 ? 1 : 0, + (str[i] & 0xFF) & 0x20 ? 1 : 0, + (str[i] & 0xFF) & 0x10 ? 1 : 0, + (str[i] & 0xFF) & 0x08 ? 1 : 0, + (str[i] & 0xFF) & 0x04 ? 1 : 0, + (str[i] & 0xFF) & 0x02 ? 1 : 0, (str[i] & 0xFF) & 0x01 ? 1 : 0); + + if ((i + 1) % 3 == 0) + printf (" "); + + if ((i + 1) % 6 == 0 && i + 1 < len) + printf ("\n\t;; "); + } + + printf ("\n"); +} + +//------------------------------------------------------------------------------ +int +compare_buffer(const uint8_t *buffer, const uint32_t length_buffer, + const uint8_t *pattern, const uint32_t length_pattern) +//------------------------------------------------------------------------------ +{ + int i; + + if (length_buffer != length_pattern) { + printf("Length mismatch, expecting %d bytes, got %d bytes\n", length_pattern, + length_buffer); + hexprint(buffer, length_buffer); + return -1; + } + + for (i = 0; i < length_buffer; i++) { + if (pattern[i] != buffer[i]) { + printf("Expecting:\n"); + hexprint(pattern, length_pattern); + printf("Received:\n"); + hexprint(buffer, length_buffer); + printf("Mismatch fount in byte %d\nExpecting 0x%02x, got 0x%02x\n", + i, pattern[i], buffer[i]); + return -1; + } + } + + return 0; +} + +//------------------------------------------------------------------------------ +unsigned +decode_hex_length(const char *h) +//------------------------------------------------------------------------------ +{ + const unsigned char *hex = (const unsigned char *) h; + unsigned count; + unsigned i; + + for (count = i = 0; hex[i]; i++) { + if (isspace(hex[i])) + continue; + + if (hex_digits[hex[i]] < 0) + abort(); + + count++; + } + + if (count % 2) + abort(); + + return count / 2; +} + +//------------------------------------------------------------------------------ +int +decode_hex(uint8_t *dst, const char *h) +//------------------------------------------------------------------------------ +{ + const unsigned char *hex = (const unsigned char *) h; + unsigned i = 0; + + for (;;) { + int high, low; + + while (*hex && isspace(*hex)) + hex++; + + if (!*hex) + return 1; + + high = hex_digits[*hex++]; + + if (high < 0) + return 0; + + while (*hex && isspace(*hex)) + hex++; + + if (!*hex) + return 0; + + low = hex_digits[*hex++]; + + if (low < 0) + return 0; + + dst[i++] = (high << 4) | low; + } +} + +//------------------------------------------------------------------------------ +uint8_t * +decode_hex_dup(const char *hex) +//------------------------------------------------------------------------------ +{ + uint8_t *p; + unsigned length = decode_hex_length(hex); + + p = malloc(length * sizeof(uint8_t)); + + if (decode_hex(p, hex)) + return p; + else { + free(p); + return NULL; + } +} + diff --git a/openair-cn/TEST/oaisim_mme_test_s1c_scenario.h b/openair-cn/TEST/oaisim_mme_test_s1c_scenario.h index 993b42ff8d..25bbdb9c87 100644 --- a/openair-cn/TEST/oaisim_mme_test_s1c_scenario.h +++ b/openair-cn/TEST/oaisim_mme_test_s1c_scenario.h @@ -26,6 +26,7 @@ Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE *******************************************************************************/ +#include #include #define MME_TEST_S1_MAX_BUF_LENGTH (1024) @@ -36,14 +37,15 @@ typedef enum entity_s{ ENB } entity_t; -typedef struct s1ap_test_s{ +typedef struct s1ap_message_test_s{ char *procedure_name; uint8_t buffer[MME_TEST_S1_MAX_BUF_LENGTH]; uint16_t dont_check[MME_TEST_S1_MAX_BYTES_TEST]; // bytes index test that can be omitted uint32_t buf_len; entity_t originating; uint16_t sctp_stream_id; -} s1ap_test_t; + uint32_t assoc_id; +} s1ap_message_test_t; void fail (const char *format, ...); void success (const char *format, ...); diff --git a/openair-cn/TEST/oaisim_mme_test_s1c_scenario1.c b/openair-cn/TEST/oaisim_mme_test_s1c_scenario1.c index d9c775a79d..93d7e5fedf 100644 --- a/openair-cn/TEST/oaisim_mme_test_s1c_scenario1.c +++ b/openair-cn/TEST/oaisim_mme_test_s1c_scenario1.c @@ -26,12 +26,13 @@ Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE *******************************************************************************/ +#include #include "oaisim_mme_test_s1c_scenario.h" // Description succesfull attach of UE, release UE. -s1ap_test_t s1ap_scenario1[] = { +s1ap_message_test_t s1ap_scenario1[] = { { .procedure_name = "id-initialUEMessage", .buffer = { diff --git a/openair-cn/UDP/udp_eNB_task.c b/openair-cn/UDP/udp_eNB_task.c index ce29ebc9e0..32b3317fcf 100644 --- a/openair-cn/UDP/udp_eNB_task.c +++ b/openair-cn/UDP/udp_eNB_task.c @@ -51,6 +51,7 @@ #include "UTIL/LOG/log.h" #include "UTIL/LOG/vcd_signal_dumper.h" +#include "msc.h" #define IPV4_ADDR "%u.%u.%u.%u" @@ -304,6 +305,7 @@ void *udp_eNB_task(void *args_p) udp_enb_init(NULL); itti_mark_task_ready(TASK_UDP); + MSC_START_USE(); while(1) { itti_receive_msg(TASK_UDP, &received_message_p); diff --git a/openair-cn/UDP/udp_primitives_server.c b/openair-cn/UDP/udp_primitives_server.c index b5c293d11d..6639331ee8 100644 --- a/openair-cn/UDP/udp_primitives_server.c +++ b/openair-cn/UDP/udp_primitives_server.c @@ -53,6 +53,7 @@ #include "assertions.h" #include "conversions.h" +#include "msc.h" #define UDP_DEBUG(x, args...) do { fprintf(stdout, "[UDP] [D]"x, ##args); } while(0) #define UDP_ERROR(x, args...) do { fprintf(stderr, "[UDP] [E]"x, ##args); } while(0) @@ -330,13 +331,13 @@ static void *udp_intertask_interface(void *args_p) struct epoll_event *events = NULL; itti_mark_task_ready(TASK_UDP); + MSC_START_USE(); while(1) { MessageDef *received_message_p = NULL; itti_receive_msg(TASK_UDP, &received_message_p); if (received_message_p != NULL) { -#if !defined(ENABLE_USE_GTPU_IN_KERNEL) switch (ITTI_MSG_ID(received_message_p)) { case UDP_INIT: { @@ -422,7 +423,6 @@ static void *udp_intertask_interface(void *args_p) break; } -#endif on_error: rc = itti_free(ITTI_MSG_ORIGIN_ID(received_message_p), received_message_p); AssertFatal(rc == EXIT_SUCCESS, "Failed to free memory (%d)!\n", rc); diff --git a/openair-cn/UTILS/HASHTABLE/hashtable.c b/openair-cn/UTILS/HASHTABLE/hashtable.c index 23149c1389..48d806cd0f 100755 --- a/openair-cn/UTILS/HASHTABLE/hashtable.c +++ b/openair-cn/UTILS/HASHTABLE/hashtable.c @@ -233,7 +233,7 @@ hashtable_rc_t hashtable_remove(hash_table_t *hashtblP, const uint64_t keyP) node=hashtblP->nodes[hash]; while(node) { - if(node->key != keyP) { + if(node->key == keyP) { if(prevnode) prevnode->next=node->next; else hashtblP->nodes[hash]=node->next; diff --git a/openair-cn/UTILS/conversions.h b/openair-cn/UTILS/conversions.h index 6d35833eaf..4762f93873 100644 --- a/openair-cn/UTILS/conversions.h +++ b/openair-cn/UTILS/conversions.h @@ -259,6 +259,13 @@ do { \ + pLMN.MNCdigit2 * 10 + pLMN.MNCdigit1; \ } while(0) +/* TS 36.413 v10.9.0 section 9.2.1.37: + * Macro eNB ID: + * Equal to the 20 leftmost bits of the Cell + * Identity IE contained in the E-UTRAN CGI + * IE (see subclause 9.2.1.38) of each cell + * served by the eNB. + */ #define MACRO_ENB_ID_TO_BIT_STRING(mACRO, bITsTRING) \ do { \ (bITsTRING)->buf = calloc(3, sizeof(uint8_t)); \ @@ -268,14 +275,20 @@ do { \ (bITsTRING)->size = 3; \ (bITsTRING)->bits_unused = 4; \ } while(0) - -#define MACRO_ENB_ID_TO_CELL_IDENTITY(mACRO, bITsTRING) \ +/* +/* TS 36.413 v10.9.0 section 9.2.1.38: + * E-UTRAN CGI/Cell Identity + * The leftmost bits of the Cell + * Identity correspond to the eNB + * ID (defined in subclause 9.2.1.37). + */ +#define MACRO_ENB_ID_TO_CELL_IDENTITY(mACRO, cELL_iD, bITsTRING) \ do { \ (bITsTRING)->buf = calloc(4, sizeof(uint8_t)); \ - (bITsTRING)->buf[0] = 0; \ - (bITsTRING)->buf[1] = ((mACRO) >> 12); \ - (bITsTRING)->buf[2] = (mACRO) >> 4; \ - (bITsTRING)->buf[3] = ((mACRO) & 0x0f) << 4; \ + (bITsTRING)->buf[0] = ((mACRO) >> 12); \ + (bITsTRING)->buf[1] = (mACRO) >> 4; \ + (bITsTRING)->buf[2] = (((mACRO) & 0x0f) << 4) | ((cELL_iD) >> 4); \ + (bITsTRING)->buf[3] = ((cELL_iD) & 0x0f) << 4; \ (bITsTRING)->size = 4; \ (bITsTRING)->bits_unused = 4; \ } while(0) diff --git a/openair-cn/UTILS/mme_config.c b/openair-cn/UTILS/mme_config.c index 6f401ae5f7..c162199bb4 100644 --- a/openair-cn/UTILS/mme_config.c +++ b/openair-cn/UTILS/mme_config.c @@ -41,6 +41,7 @@ #include /* To provide inet_addr */ +#include "intertask_interface.h" #include "assertions.h" #include "msc.h" #include "mme_config.h" @@ -202,9 +203,7 @@ static int config_parse_file(mme_config_t *mme_config_p) char *mme_interface_name_for_S11 = NULL; char *mme_ip_address_for_S11 = NULL; char *sgw_ip_address_for_S11 = NULL; -#if defined (ENABLE_USE_GTPU_IN_KERNEL) char system_cmd[256]; -#endif config_init(&cfg); @@ -369,7 +368,7 @@ static int config_parse_file(mme_config_t *mme_config_p) } } - subsetting = config_setting_get_member (setting, MME_CONFIG_STRING_PLMN); + subsetting = config_setting_get_member (setting, MME_CONFIG_STRING_TAI_LIST); if (subsetting != NULL) { num = config_setting_length(subsetting); @@ -654,10 +653,6 @@ static void usage(void) fprintf(stdout, "Usage: oaisim_mme [options]\n\n"); fprintf(stdout, "Available options:\n"); fprintf(stdout, "-h Print this help and return\n"); - fprintf(stdout, "-i\n"); - fprintf(stdout, " Set the network card to use for IPv4 forwarding\n"); - fprintf(stdout, "-m\n"); - fprintf(stdout, " Use mscgen dump trace tool\n"); fprintf(stdout, "-c\n"); fprintf(stdout, " Set the configuration file for mme\n"); fprintf(stdout, " See template in UTILS/CONF\n"); @@ -678,7 +673,7 @@ int config_parse_opt_line(int argc, char *argv[], mme_config_t *mme_config_p) mme_config_init(mme_config_p); /* Parsing command line */ - while ((c = getopt (argc, argv, "O:c:hi:K:mv:V")) != -1) { + while ((c = getopt (argc, argv, "O:c:hi:K:v:V")) != -1) { switch (c) { case 'O': case 'c': { @@ -693,21 +688,6 @@ int config_parse_opt_line(int argc, char *argv[], mme_config_t *mme_config_p) } break; - case 'm': { - fprintf(stdout, "Logging Message chart(mscgen)\n"); - MSC_INIT(MSC_EPC); - } - break; - - /*case 'i': { - int interface_len = 0; - - // Copying provided interface name to use for ipv4 forwarding - interface_len = strlen(optarg); - mme_config_p->ipv4.sgw_interface_name_for_S1u_S12_S4_up = calloc(interface_len + 1, sizeof(char)); - memcpy(mme_config_p->ipv4.sgw_interface_name_for_S1u_S12_S4_up, optarg, interface_len); - mme_config_p->ipv4.sgw_interface_name_for_S1u_S12_S4_up[interface_len] = '\0'; - } break;*/ case 'v': { mme_config_p->verbosity_level = atoi(optarg); } diff --git a/openair-cn/UTILS/mme_config.h b/openair-cn/UTILS/mme_config.h index 449ad0f434..36ce25b169 100644 --- a/openair-cn/UTILS/mme_config.h +++ b/openair-cn/UTILS/mme_config.h @@ -62,7 +62,7 @@ #define MME_CONFIG_STRING_GUMMEI_CONFIG "GUMMEI" #define MME_CONFIG_STRING_MME_CODE "MME_CODE" #define MME_CONFIG_STRING_MME_GID "MME_GID" -#define MME_CONFIG_STRING_PLMN "PLMN" +#define MME_CONFIG_STRING_TAI_LIST "TAI_LIST" #define MME_CONFIG_STRING_MCC "MCC" #define MME_CONFIG_STRING_MNC "MNC" #define MME_CONFIG_STRING_TAC "TAC" diff --git a/openair-cn/UTILS/mme_default_values.h b/openair-cn/UTILS/mme_default_values.h index 547d0f2f7d..25111aea60 100644 --- a/openair-cn/UTILS/mme_default_values.h +++ b/openair-cn/UTILS/mme_default_values.h @@ -59,8 +59,8 @@ ******************************************************************************/ #define SCTP_RECV_BUFFER_SIZE (1 << 16) -#define SCTP_OUT_STREAMS (64) -#define SCTP_IN_STREAMS (64) +#define SCTP_OUT_STREAMS (32) +#define SCTP_IN_STREAMS (32) #define SCTP_MAX_ATTEMPTS (5) /******************************************************************************* diff --git a/openair1/PHY/CODING/3gpplte.c b/openair1/PHY/CODING/3gpplte.c index 0f7dbf7468..fd33bf999c 100644 --- a/openair1/PHY/CODING/3gpplte.c +++ b/openair1/PHY/CODING/3gpplte.c @@ -31,8 +31,9 @@ author: raymond.knopp@eurecom.fr date: 10.2009 */ -#include "defs.h" -//#include "lte_interleaver_inline.h" +#ifndef TC_MAIN +//#include "defs.h" +#endif #include "extern_3GPPinterleaver.h" diff --git a/openair1/PHY/CODING/3gpplte_sse.c b/openair1/PHY/CODING/3gpplte_sse.c index 850a8ecb5f..c66a42016d 100755 --- a/openair1/PHY/CODING/3gpplte_sse.c +++ b/openair1/PHY/CODING/3gpplte_sse.c @@ -1,349 +1,531 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ -/* file: 3gpplte_sse.c - purpose: Encoding routines for implementing Turbo-coded (DLSCH) transport channels from 36-212, V8.6 2009-03 - author: Laurent Thomas - maintainer: raymond.knopp@eurecom.fr - date: 09.2012 -*/ -#include "defs.h" -#include "extern_3GPPinterleaver.h" -#include - -#include "PHY/sse_intrin.h" - -//#define DEBUG_TURBO_ENCODER 1 -#define CALLGRIND 1 -unsigned short threegpplte_interleaver_output; -unsigned long long threegpplte_interleaver_tmp; - -struct treillis { - union { - __m64 systematic_64[3]; - char systematic_8[24]; - }; - union { - __m64 parity1_64[3]; - char parity1_8[24]; - }; - union { - __m64 parity2_64[3]; - char parity2_8[24]; - }; - int exit_state; -} __attribute__ ((aligned(64))); - -struct treillis all_treillis[8][256]; -int all_treillis_initialized=0; - -static inline unsigned char threegpplte_rsc(unsigned char input,unsigned char *state) -{ - unsigned char output; - output = (input ^ (*state>>2) ^ (*state>>1))&1; - *state = (((input<<2)^(*state>>1))^((*state>>1)<<2)^((*state)<<2))&7; - return(output); -} - -static inline void threegpplte_rsc_termination(unsigned char *x,unsigned char *z,unsigned char *state) -{ - *z = ((*state>>2) ^ (*state)) &1; - *x = ((*state) ^ (*state>>1)) &1; - *state = (*state)>>1; -} - -void treillis_table_init(void) -{ - //struct treillis t[][]=all_treillis; - //t=memalign(16,sizeof(struct treillis)*8*256); - int i, j,b; - unsigned char v, current_state; - - // clear all_treillis - for (i=0; i<8; i++) - bzero( all_treillis[i], sizeof(all_treillis[0]) ); - - for (i=0; i<8; i++) { //all possible initial states - for (j=0; j<=255; j++) { // all possible values of a byte - current_state=i; - - for (b=0; b<8 ; b++ ) { // pre-compute the image of the byte j in _m128i vector right place - all_treillis[i][j].systematic_8[b*3]= (j&(1<<(7-b)))>>(7-b); - v=threegpplte_rsc( all_treillis[i][j].systematic_8[b*3] , - ¤t_state); - all_treillis[i][j].parity1_8[b*3+1]=v; // for the yparity1 - all_treillis[i][j].parity2_8[b*3+2]=v; // for the yparity2 - } - - all_treillis[i][j].exit_state=current_state; - } - } - - all_treillis_initialized=1; - return ; -} - - -char interleave_compact_byte(short * base_interleaver,unsigned char * input, unsigned char * output, int n) -{ - - char expandInput[768*8] __attribute__((aligned(16))); - int i,loop=n>>4; - __m128i *i_128=(__m128i *)input, *o_128=(__m128i*)expandInput; - __m128i tmp1, tmp2, tmp3, tmp4; - __m128i BIT_MASK = _mm_set_epi8( 0b00000001, - 0b00000010, - 0b00000100, - 0b00001000, - 0b00010000, - 0b00100000, - 0b01000000, - 0b10000000, - 0b00000001, - 0b00000010, - 0b00000100, - 0b00001000, - 0b00010000, - 0b00100000, - 0b01000000, - 0b10000000); - - if ((n&15) > 0) - loop++; - - for (i=0; i>(7-b); */ - tmp1=_mm_load_si128(i_128++); - tmp2=_mm_unpacklo_epi8(tmp1,tmp1); - tmp3=_mm_unpacklo_epi16(tmp2,tmp2); - tmp4=_mm_unpacklo_epi32(tmp3,tmp3); - *o_128++=_mm_cmpeq_epi8(_mm_and_si128(tmp4,BIT_MASK),BIT_MASK); - - tmp4=_mm_unpackhi_epi32(tmp3,tmp3); - *o_128++=_mm_cmpeq_epi8(_mm_and_si128(tmp4,BIT_MASK),BIT_MASK);; - - tmp3=_mm_unpackhi_epi16(tmp2,tmp2); - tmp4=_mm_unpacklo_epi32(tmp3,tmp3); - *o_128++=_mm_cmpeq_epi8(_mm_and_si128(tmp4,BIT_MASK),BIT_MASK);; - - tmp4=_mm_unpackhi_epi32(tmp3,tmp3); - *o_128++=_mm_cmpeq_epi8(_mm_and_si128(tmp4,BIT_MASK),BIT_MASK);; - - tmp2=_mm_unpackhi_epi8(tmp1,tmp1); - tmp3=_mm_unpacklo_epi16(tmp2,tmp2); - tmp4=_mm_unpacklo_epi32(tmp3,tmp3); - *o_128++=_mm_cmpeq_epi8(_mm_and_si128(tmp4,BIT_MASK),BIT_MASK);; - - tmp4=_mm_unpackhi_epi32(tmp3,tmp3); - *o_128++=_mm_cmpeq_epi8(_mm_and_si128(tmp4,BIT_MASK),BIT_MASK);; - - tmp3=_mm_unpackhi_epi16(tmp2,tmp2); - tmp4=_mm_unpacklo_epi32(tmp3,tmp3); - *o_128++=_mm_cmpeq_epi8(_mm_and_si128(tmp4,BIT_MASK),BIT_MASK);; - - tmp4=_mm_unpackhi_epi32(tmp3,tmp3); - *o_128++=_mm_cmpeq_epi8(_mm_and_si128(tmp4,BIT_MASK),BIT_MASK);; - } - - short * ptr_intl=base_interleaver; - __m128i tmp; - int input_length_words=n>>1; - unsigned short * systematic2_ptr=(unsigned short *) output; - - // int j; - for ( i=0; i< input_length_words ; i ++ ) { - - // for (j=0;j<16;j++) printf("%d(%d).",ptr_intl[j],expandInput[ptr_intl[j]]); - // printf("\n"); - tmp=_mm_insert_epi8(tmp,expandInput[*ptr_intl++],7); - tmp=_mm_insert_epi8(tmp,expandInput[*ptr_intl++],6); - tmp=_mm_insert_epi8(tmp,expandInput[*ptr_intl++],5); - tmp=_mm_insert_epi8(tmp,expandInput[*ptr_intl++],4); - tmp=_mm_insert_epi8(tmp,expandInput[*ptr_intl++],3); - tmp=_mm_insert_epi8(tmp,expandInput[*ptr_intl++],2); - tmp=_mm_insert_epi8(tmp,expandInput[*ptr_intl++],1); - tmp=_mm_insert_epi8(tmp,expandInput[*ptr_intl++],0); - tmp=_mm_insert_epi8(tmp,expandInput[*ptr_intl++],8+7); - tmp=_mm_insert_epi8(tmp,expandInput[*ptr_intl++],8+6); - tmp=_mm_insert_epi8(tmp,expandInput[*ptr_intl++],8+5); - tmp=_mm_insert_epi8(tmp,expandInput[*ptr_intl++],8+4); - tmp=_mm_insert_epi8(tmp,expandInput[*ptr_intl++],8+3); - tmp=_mm_insert_epi8(tmp,expandInput[*ptr_intl++],8+2); - tmp=_mm_insert_epi8(tmp,expandInput[*ptr_intl++],8+1); - tmp=_mm_insert_epi8(tmp,expandInput[*ptr_intl++],8+0); - *systematic2_ptr++=(unsigned short)_mm_movemask_epi8(tmp); - } - - return n; -} - - - -#define _mm_expand_si128(xmmx, out, bit_mask) \ - { \ - __m128i loc_mm; \ - loc_mm=(xmmx); \ - loc_mm=_mm_and_si128(loc_mm,bit_mask); \ - out=_mm_cmpeq_epi8(loc_mm,bit_mask); \ - } - -void threegpplte_turbo_encoder(unsigned char *input, - unsigned short input_length_bytes, - unsigned char *output, - unsigned char F, - unsigned short interleaver_f1, - unsigned short interleaver_f2) -{ - - int i; - unsigned char *x; - unsigned char state0=0,state1=0; - unsigned short input_length_bits = input_length_bytes<<3; - short * base_interleaver; - - if ( all_treillis_initialized == 0 ) - treillis_table_init(); - - // look for f1 and f2 precomputed interleaver values - for (i=0; i < 188 && f1f2mat[i].nb_bits != input_length_bits; i++); - - if ( i == 188 ) { - msg("Illegal frame length!\n"); - return; - } else { - base_interleaver=il_tb+f1f2mat[i].beg_index; - } - - - unsigned char systematic2[768]; - interleave_compact_byte(base_interleaver,input,systematic2,input_length_bytes); - - __m64 *ptr_output=(__m64*) output; - unsigned char cur_s1, cur_s2; - int code_rate; - - for ( state0=state1=i=0 ; i%d) : (%d,%d)\n",state,state2,i,out); - } - } - - printf("\n"); - - for (state=0; state<8; state++) { - - state2=state; - threegpplte_rsc_termination(&x,&z,&state2); - printf("Termination: (%d->%d) : (%d,%d)\n",state,state2,x,z); - } - - for (i=0; i<5; i++) { - input[i] = i*219; - printf("Input %d : %x\n",i,input[i]); - } - - threegpplte_turbo_encoder(&input[0], - 5, - &output[0], - F1, - F2); - return(0); -} - -#endif // MAIN +/******************************************************************************* + OpenAirInterface + Copyright(c) 1999 - 2014 Eurecom + + OpenAirInterface is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + + OpenAirInterface is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with OpenAirInterface.The full GNU General Public License is + included in this distribution in the file called "COPYING". If not, + see . + + Contact Information + OpenAirInterface Admin: openair_admin@eurecom.fr + OpenAirInterface Tech : openair_tech@eurecom.fr + OpenAirInterface Dev : openair4g-devel@eurecom.fr + + Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE + + *******************************************************************************/ +/* file: 3gpplte_sse.c + purpose: Encoding routines for implementing Turbo-coded (DLSCH) transport channels from 36-212, V8.6 2009-03 + author: Laurent Thomas + maintainer: raymond.knopp@eurecom.fr + date: 09.2012 +*/ +#ifndef TC_MAIN +#include "defs.h" +#include "extern_3GPPinterleaver.h" +#else +#include "vars.h" +#endif +#include +#include +#include + +#include "PHY/sse_intrin.h" + +#define print_bytes(s,x) printf("%s %x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x\n",s,(x)[0],(x)[1],(x)[2],(x)[3],(x)[4],(x)[5],(x)[6],(x)[7],(x)[8],(x)[9],(x)[10],(x)[11],(x)[12],(x)[13],(x)[14],(x)[15]) +#define print_shorts(s,x) printf("%s %x,%x,%x,%x,%x,%x,%x,%x\n",s,(x)[0],(x)[1],(x)[2],(x)[3],(x)[4],(x)[5],(x)[6],(x)[7]) +#define print_ints(s,x) printf("%s %x %x %x %x\n",s,(x)[0],(x)[1],(x)[2],(x)[3]) + + +//#define DEBUG_TURBO_ENCODER 1 +#define CALLGRIND 1 +unsigned short threegpplte_interleaver_output; +unsigned long long threegpplte_interleaver_tmp; + +#if defined(__x86_64__) || defined(__i386__) +struct treillis { + union { + __m64 systematic_64[3]; + char systematic_8[24]; + }; + union { + __m64 parity1_64[3]; + char parity1_8[24]; + }; + union { + __m64 parity2_64[3]; + char parity2_8[24]; + }; + int exit_state; +} __attribute__ ((aligned(64))); + +#elif defined(__arm__) + +struct treillis { + union { + uint8x8_t systematic_64[3]; + char systematic_8[24]; + }__attribute__((aligned(64))); + union { + uint8x8_t parity1_64[3]; + char parity1_8[24]; + }__attribute__((aligned(64))); + union { + uint8x8_t parity2_64[3]; + char parity2_8[24]; + }__attribute__((aligned(64))); + int exit_state; +}; +#endif + +struct treillis all_treillis[8][256]; +int all_treillis_initialized=0; + +static inline unsigned char threegpplte_rsc(unsigned char input,unsigned char *state) +{ + unsigned char output; + output = (input ^ (*state>>2) ^ (*state>>1))&1; + *state = (((input<<2)^(*state>>1))^((*state>>1)<<2)^((*state)<<2))&7; + return(output); +} + +static inline void threegpplte_rsc_termination(unsigned char *x,unsigned char *z,unsigned char *state) +{ + *z = ((*state>>2) ^ (*state)) &1; + *x = ((*state) ^ (*state>>1)) &1; + *state = (*state)>>1; +} + +void treillis_table_init(void) +{ + //struct treillis t[][]=all_treillis; + //t=memalign(16,sizeof(struct treillis)*8*256); + int i, j,b; + unsigned char v, current_state; + + // clear all_treillis + for (i=0; i<8; i++) + bzero( all_treillis[i], sizeof(all_treillis[0]) ); + + for (i=0; i<8; i++) { //all possible initial states + for (j=0; j<=255; j++) { // all possible values of a byte + current_state=i; + + for (b=0; b<8 ; b++ ) { // pre-compute the image of the byte j in _m128i vector right place + all_treillis[i][j].systematic_8[b*3]= (j&(1<<(7-b)))>>(7-b); + v=threegpplte_rsc( all_treillis[i][j].systematic_8[b*3] , + ¤t_state); + all_treillis[i][j].parity1_8[b*3+1]=v; // for the yparity1 + all_treillis[i][j].parity2_8[b*3+2]=v; // for the yparity2 + } + + all_treillis[i][j].exit_state=current_state; + } + } + + all_treillis_initialized=1; + return ; +} + + +char interleave_compact_byte(short * base_interleaver,unsigned char * input, unsigned char * output, int n) +{ + + char expandInput[768*8] __attribute__((aligned(16))); + int i,loop=n>>4; +#if defined(__x86_64__) || defined(__i386__) + __m128i *i_128=(__m128i *)input, *o_128=(__m128i*)expandInput; + __m128i tmp1, tmp2, tmp3, tmp4; + __m128i BIT_MASK = _mm_set_epi8( 0b00000001, + 0b00000010, + 0b00000100, + 0b00001000, + 0b00010000, + 0b00100000, + 0b01000000, + 0b10000000, + 0b00000001, + 0b00000010, + 0b00000100, + 0b00001000, + 0b00010000, + 0b00100000, + 0b01000000, + 0b10000000); +#elif defined(__arm__) + uint8x16_t *i_128=(uint8x16_t *)input, *o_128=(uint8x16_t *)expandInput; + uint8x16_t tmp1,tmp2; + uint16x8_t tmp3; + uint32x4_t tmp4; + uint8x16_t and_tmp; + uint8x16_t BIT_MASK = { 0b10000000, + 0b01000000, + 0b00100000, + 0b00010000, + 0b00001000, + 0b00000100, + 0b00000010, + 0b00000001, + 0b10000000, + 0b01000000, + 0b00100000, + 0b00010000, + 0b00001000, + 0b00000100, + 0b00000010, + 0b00000001}; +#endif + if ((n&15) > 0) + loop++; + + for (i=0; i>(7-b); */ + +#if defined(__x86_64__) || defined(__i386__) + tmp1=_mm_load_si128(i_128++); + tmp2=_mm_unpacklo_epi8(tmp1,tmp1); + tmp3=_mm_unpacklo_epi16(tmp2,tmp2); + tmp4=_mm_unpacklo_epi32(tmp3,tmp3); + *o_128++=_mm_cmpeq_epi8(_mm_and_si128(tmp4,BIT_MASK),BIT_MASK); + + tmp4=_mm_unpackhi_epi32(tmp3,tmp3); + *o_128++=_mm_cmpeq_epi8(_mm_and_si128(tmp4,BIT_MASK),BIT_MASK);; + + tmp3=_mm_unpackhi_epi16(tmp2,tmp2); + tmp4=_mm_unpacklo_epi32(tmp3,tmp3); + *o_128++=_mm_cmpeq_epi8(_mm_and_si128(tmp4,BIT_MASK),BIT_MASK);; + + tmp4=_mm_unpackhi_epi32(tmp3,tmp3); + *o_128++=_mm_cmpeq_epi8(_mm_and_si128(tmp4,BIT_MASK),BIT_MASK);; + + tmp2=_mm_unpackhi_epi8(tmp1,tmp1); + tmp3=_mm_unpacklo_epi16(tmp2,tmp2); + tmp4=_mm_unpacklo_epi32(tmp3,tmp3); + *o_128++=_mm_cmpeq_epi8(_mm_and_si128(tmp4,BIT_MASK),BIT_MASK);; + + tmp4=_mm_unpackhi_epi32(tmp3,tmp3); + *o_128++=_mm_cmpeq_epi8(_mm_and_si128(tmp4,BIT_MASK),BIT_MASK);; + + tmp3=_mm_unpackhi_epi16(tmp2,tmp2); + tmp4=_mm_unpacklo_epi32(tmp3,tmp3); + *o_128++=_mm_cmpeq_epi8(_mm_and_si128(tmp4,BIT_MASK),BIT_MASK);; + + tmp4=_mm_unpackhi_epi32(tmp3,tmp3); + *o_128++=_mm_cmpeq_epi8(_mm_and_si128(tmp4,BIT_MASK),BIT_MASK);; + +#elif defined(__arm__) + tmp1=vld1q_u8((uint8_t*)i_128); + //print_bytes("tmp1:",(uint8_t*)&tmp1); + + uint8x16x2_t temp1 = vzipq_u8(tmp1,tmp1); + tmp2 = temp1.val[0]; + + uint16x8x2_t temp2 = vzipq_u16((uint16x8_t)tmp2,(uint16x8_t)tmp2); + tmp3 = temp2.val[0]; + + uint32x4x2_t temp3 = vzipq_u32((uint32x4_t)tmp3,(uint32x4_t)tmp3); + tmp4 = temp3.val[0]; + //print_bytes("tmp4:",(uint8_t*)&tmp4); + + *o_128++=vceqq_u8(vandq_u8((uint8x16_t)tmp4,BIT_MASK),BIT_MASK); //1 + //print_bytes("o:",(uint8_t*)(o_128-1)); + + tmp4 = temp3.val[1]; + //print_bytes("tmp4:",(uint8_t*)&tmp4); + + *o_128++=vceqq_u8(vandq_u8((uint8x16_t)tmp4,BIT_MASK),BIT_MASK); //2 + //print_bytes("o:",(uint8_t*)(o_128-1)); + + tmp3 = temp2.val[1]; + temp3 = vzipq_u32((uint32x4_t)tmp3,(uint32x4_t)tmp3); + tmp4 = temp3.val[0]; + //print_bytes("tmp4:",(uint8_t*)&tmp4); + + *o_128++=vceqq_u8(vandq_u8((uint8x16_t)tmp4,BIT_MASK),BIT_MASK); //3 + //print_bytes("o:",(uint8_t*)(o_128-1)); + + tmp4 = temp3.val[1]; + //print_bytes("tmp4:",(uint8_t*)&tmp4); + + *o_128++=vceqq_u8(vandq_u8((uint8x16_t)tmp4,BIT_MASK),BIT_MASK); //4 + //and_tmp = vandq_u8((uint8x16_t)tmp4,BIT_MASK); print_bytes("and:",and_tmp); + //print_bytes("o:",(uint8_t*)(o_128-1)); + + + temp1 = vzipq_u8(tmp1,tmp1); + tmp2 = temp1.val[1]; + temp2 = vzipq_u16((uint16x8_t)tmp2,(uint16x8_t)tmp2); + tmp3 = temp2.val[0]; + temp3 = vzipq_u32((uint32x4_t)tmp3,(uint32x4_t)tmp3); + tmp4 = temp3.val[0]; + //print_bytes("tmp4:",(uint8_t*)&tmp4); + + *o_128++=vceqq_u8(vandq_u8((uint8x16_t)tmp4,BIT_MASK),BIT_MASK); //5 + //print_bytes("o:",(uint8_t*)(o_128-1)); + + tmp4 = temp3.val[1]; + //print_bytes("tmp4:",(uint8_t*)&tmp4); + + *o_128++=vceqq_u8(vandq_u8((uint8x16_t)tmp4,BIT_MASK),BIT_MASK); //6 + //print_bytes("o:",(uint8_t*)(o_128-1)); + + + temp2 = vzipq_u16((uint16x8_t)tmp2,(uint16x8_t)tmp2); + tmp3 = temp2.val[1]; + temp3 = vzipq_u32((uint32x4_t)tmp3,(uint32x4_t)tmp3); + tmp4 = temp3.val[0]; + //print_bytes("tmp4:",(uint8_t*)&tmp4); + + *o_128++=vceqq_u8(vandq_u8((uint8x16_t)tmp4,BIT_MASK),BIT_MASK); //7 + //print_bytes("o:",(uint8_t*)(o_128-1)); + + tmp4 = temp3.val[1]; + //print_bytes("tmp4:",(uint8_t*)&tmp4); + + *o_128++=vceqq_u8(vandq_u8((uint8x16_t)tmp4,BIT_MASK),BIT_MASK); //7 + //print_bytes("o:",(uint8_t*)(o_128-1)); + + i_128++; +#endif + } + + short * ptr_intl=base_interleaver; +#if defined(__x86_64) || defined(__i386__) + __m128i tmp; + uint16_t *systematic2_ptr=(unsigned short *) output; +#elif defined(__arm__) + uint8x16_t tmp; + const uint8_t __attribute__ ((aligned (16))) _Powers[16]= + { 1, 2, 4, 8, 16, 32, 64, 128, 1, 2, 4, 8, 16, 32, 64, 128 }; + +// Set the powers of 2 (do it once for all, if applicable) + uint8x16_t Powers= vld1q_u8(_Powers); + uint8_t *systematic2_ptr=(uint8_t *) output; +#endif + int input_length_words=n>>1; + + for ( i=0; i< input_length_words ; i ++ ) { + +#if defined(__x86_64__) || defined(__i386__) + tmp=_mm_insert_epi8(tmp,expandInput[*ptr_intl++],7); + tmp=_mm_insert_epi8(tmp,expandInput[*ptr_intl++],6); + tmp=_mm_insert_epi8(tmp,expandInput[*ptr_intl++],5); + tmp=_mm_insert_epi8(tmp,expandInput[*ptr_intl++],4); + tmp=_mm_insert_epi8(tmp,expandInput[*ptr_intl++],3); + tmp=_mm_insert_epi8(tmp,expandInput[*ptr_intl++],2); + tmp=_mm_insert_epi8(tmp,expandInput[*ptr_intl++],1); + tmp=_mm_insert_epi8(tmp,expandInput[*ptr_intl++],0); + tmp=_mm_insert_epi8(tmp,expandInput[*ptr_intl++],8+7); + tmp=_mm_insert_epi8(tmp,expandInput[*ptr_intl++],8+6); + tmp=_mm_insert_epi8(tmp,expandInput[*ptr_intl++],8+5); + tmp=_mm_insert_epi8(tmp,expandInput[*ptr_intl++],8+4); + tmp=_mm_insert_epi8(tmp,expandInput[*ptr_intl++],8+3); + tmp=_mm_insert_epi8(tmp,expandInput[*ptr_intl++],8+2); + tmp=_mm_insert_epi8(tmp,expandInput[*ptr_intl++],8+1); + tmp=_mm_insert_epi8(tmp,expandInput[*ptr_intl++],8+0); + *systematic2_ptr++=(unsigned short)_mm_movemask_epi8(tmp); +#elif defined(__arm__) + tmp=vsetq_lane_u8(expandInput[*ptr_intl++],tmp,7); + tmp=vsetq_lane_u8(expandInput[*ptr_intl++],tmp,6); + tmp=vsetq_lane_u8(expandInput[*ptr_intl++],tmp,5); + tmp=vsetq_lane_u8(expandInput[*ptr_intl++],tmp,4); + tmp=vsetq_lane_u8(expandInput[*ptr_intl++],tmp,3); + tmp=vsetq_lane_u8(expandInput[*ptr_intl++],tmp,2); + tmp=vsetq_lane_u8(expandInput[*ptr_intl++],tmp,1); + tmp=vsetq_lane_u8(expandInput[*ptr_intl++],tmp,0); + tmp=vsetq_lane_u8(expandInput[*ptr_intl++],tmp,8+7); + tmp=vsetq_lane_u8(expandInput[*ptr_intl++],tmp,8+6); + tmp=vsetq_lane_u8(expandInput[*ptr_intl++],tmp,8+5); + tmp=vsetq_lane_u8(expandInput[*ptr_intl++],tmp,8+4); + tmp=vsetq_lane_u8(expandInput[*ptr_intl++],tmp,8+3); + tmp=vsetq_lane_u8(expandInput[*ptr_intl++],tmp,8+2); + tmp=vsetq_lane_u8(expandInput[*ptr_intl++],tmp,8+1); + tmp=vsetq_lane_u8(expandInput[*ptr_intl++],tmp,8+0); +// Compute the mask from the input + uint64x2_t Mask= vpaddlq_u32(vpaddlq_u16(vpaddlq_u8(vandq_u8(tmp, Powers)))); + vst1q_lane_u8(systematic2_ptr++, (uint8x16_t)Mask, 0); + vst1q_lane_u8(systematic2_ptr++, (uint8x16_t)Mask, 8); + +#endif + } + + return n; +} + + +/* +#define _mm_expand_si128(xmmx, out, bit_mask) \ + { \ + __m128i loc_mm; \ + loc_mm=(xmmx); \ + loc_mm=_mm_and_si128(loc_mm,bit_mask); \ + out=_mm_cmpeq_epi8(loc_mm,bit_mask); \ + } +*/ + +void threegpplte_turbo_encoder(unsigned char *input, + unsigned short input_length_bytes, + unsigned char *output, + unsigned char F, + unsigned short interleaver_f1, + unsigned short interleaver_f2) +{ + + int i; + unsigned char *x; + unsigned char state0=0,state1=0; + unsigned short input_length_bits = input_length_bytes<<3; + short * base_interleaver; + + if ( all_treillis_initialized == 0 ) + treillis_table_init(); + + // look for f1 and f2 precomputed interleaver values + for (i=0; i < 188 && f1f2mat[i].nb_bits != input_length_bits; i++); + + if ( i == 188 ) { + printf("Illegal frame length!\n"); + return; + } else { + base_interleaver=il_tb+f1f2mat[i].beg_index; + } + + + unsigned char systematic2[768]; + interleave_compact_byte(base_interleaver,input,systematic2,input_length_bytes); + +#if defined(__x86_64__) || defined(__i386__) + __m64 *ptr_output=(__m64*) output; +#elif defined(__arm__) + uint8x8_t *ptr_output=(uint8x8_t*)output; +#endif + unsigned char cur_s1, cur_s2; + int code_rate; + + for ( state0=state1=i=0 ; i%d) : (%d,%d)\n",state,state2,i,out); + } + } + + printf("\n"); + + for (state=0; state<8; state++) { + + state2=state; + threegpplte_rsc_termination(&x,&z,&state2); + printf("Termination: (%d->%d) : (%d,%d)\n",state,state2,x,z); + } + + memset((void*)input,0,INPUT_LENGTH+16); + for (i=0; i>3; for (k=0; k>3; K1 = (frame_length>>3); for (l=K1;; l=l2,rerun_flag=1) { +#if defined(__x86_64__) || defined(__i386__) alpha128 = (__m128i *)alpha; +#elif defined(__arm__) + alpha128 = (int16x8_t *)alpha; +#endif if (rerun_flag == 0) { +#if defined(__x86_64__) || defined(__i386__) alpha128[0] = _mm_set_epi16(-MAX/2,-MAX/2,-MAX/2,-MAX/2,-MAX/2,-MAX/2,-MAX/2,0); alpha128[1] = _mm_set_epi16(-MAX/2,-MAX/2,-MAX/2,-MAX/2,-MAX/2,-MAX/2,-MAX/2,-MAX/2); alpha128[2] = _mm_set_epi16(-MAX/2,-MAX/2,-MAX/2,-MAX/2,-MAX/2,-MAX/2,-MAX/2,-MAX/2); @@ -215,8 +206,31 @@ void compute_alpha16(llr_t* alpha,llr_t* beta,llr_t* m_11,llr_t* m_10,unsigned s alpha128[5] = _mm_set_epi16(-MAX/2,-MAX/2,-MAX/2,-MAX/2,-MAX/2,-MAX/2,-MAX/2,-MAX/2); alpha128[6] = _mm_set_epi16(-MAX/2,-MAX/2,-MAX/2,-MAX/2,-MAX/2,-MAX/2,-MAX/2,-MAX/2); alpha128[7] = _mm_set_epi16(-MAX/2,-MAX/2,-MAX/2,-MAX/2,-MAX/2,-MAX/2,-MAX/2,-MAX/2); +#elif defined(__arm__) + alpha128[0] = vdupq_n_s16(-MAX/2); + alpha128[0] = vsetq_lane_s16(0,alpha128[0],0); + alpha128[1] = vdupq_n_s16(-MAX/2); + alpha128[2] = vdupq_n_s16(-MAX/2); + alpha128[3] = vdupq_n_s16(-MAX/2); + alpha128[4] = vdupq_n_s16(-MAX/2); + alpha128[5] = vdupq_n_s16(-MAX/2); + alpha128[6] = vdupq_n_s16(-MAX/2); + alpha128[7] = vdupq_n_s16(-MAX/2); +#endif +#ifdef DEBUG_LOGMAP + printf("Initial alpha\n"); + print_shorts("a0",(int16_t*)&alpha128[0]); + print_shorts("a1",(int16_t*)&alpha128[1]); + print_shorts("a2",(int16_t*)&alpha128[2]); + print_shorts("a3",(int16_t*)&alpha128[3]); + print_shorts("a4",(int16_t*)&alpha128[4]); + print_shorts("a5",(int16_t*)&alpha128[5]); + print_shorts("a6",(int16_t*)&alpha128[6]); + print_shorts("a7",(int16_t*)&alpha128[7]); +#endif } else { //set initial alpha in columns 1-7 from final alpha from last run in columns 0-6 +#if defined(__x86_64__) || defined(__i386__) alpha128[0] = _mm_slli_si128(alpha128[frame_length],2); alpha128[1] = _mm_slli_si128(alpha128[1+frame_length],2); alpha128[2] = _mm_slli_si128(alpha128[2+frame_length],2); @@ -225,6 +239,16 @@ void compute_alpha16(llr_t* alpha,llr_t* beta,llr_t* m_11,llr_t* m_10,unsigned s alpha128[5] = _mm_slli_si128(alpha128[5+frame_length],2); alpha128[6] = _mm_slli_si128(alpha128[6+frame_length],2); alpha128[7] = _mm_slli_si128(alpha128[7+frame_length],2); +#elif defined(__arm__) + alpha128[0] = (int16x8_t)vshlq_n_s64((int64x2_t)alpha128[frame_length],16); alpha128[0] = vsetq_lane_s16(alpha[8],alpha128[0],3); + alpha128[1] = (int16x8_t)vshlq_n_s64((int64x2_t)alpha128[1+frame_length],16); alpha128[1] = vsetq_lane_s16(alpha[24],alpha128[0],3); + alpha128[2] = (int16x8_t)vshlq_n_s64((int64x2_t)alpha128[2+frame_length],16); alpha128[2] = vsetq_lane_s16(alpha[40],alpha128[0],3); + alpha128[3] = (int16x8_t)vshlq_n_s64((int64x2_t)alpha128[3+frame_length],16); alpha128[3] = vsetq_lane_s16(alpha[56],alpha128[0],3); + alpha128[4] = (int16x8_t)vshlq_n_s64((int64x2_t)alpha128[4+frame_length],16); alpha128[4] = vsetq_lane_s16(alpha[72],alpha128[0],3); + alpha128[5] = (int16x8_t)vshlq_n_s64((int64x2_t)alpha128[5+frame_length],16); alpha128[5] = vsetq_lane_s16(alpha[88],alpha128[0],3); + alpha128[6] = (int16x8_t)vshlq_n_s64((int64x2_t)alpha128[6+frame_length],16); alpha128[6] = vsetq_lane_s16(alpha[104],alpha128[0],3); + alpha128[7] = (int16x8_t)vshlq_n_s64((int64x2_t)alpha128[7+frame_length],16); alpha128[7] = vsetq_lane_s16(alpha[120],alpha128[0],3); +#endif // set initial alpha in column 0 to (0,-MAX/2,...,-MAX/2) alpha[8] = -MAX/2; alpha[16] = -MAX/2; @@ -233,17 +257,33 @@ void compute_alpha16(llr_t* alpha,llr_t* beta,llr_t* m_11,llr_t* m_10,unsigned s alpha[40] = -MAX/2; alpha[48] = -MAX/2; alpha[56] = -MAX/2; +#ifdef DEBUG_LOGMAP + printf("Second run\n"); + print_shorts("a0",(int16_t*)&alpha128[0]); + print_shorts("a1",(int16_t*)&alpha128[1]); + print_shorts("a2",(int16_t*)&alpha128[2]); + print_shorts("a3",(int16_t*)&alpha128[3]); + print_shorts("a4",(int16_t*)&alpha128[4]); + print_shorts("a5",(int16_t*)&alpha128[5]); + print_shorts("a6",(int16_t*)&alpha128[6]); + print_shorts("a7",(int16_t*)&alpha128[7]); +#endif + } alpha_ptr = &alpha128[0]; - +#if defined(__x86_64__) || defined(__i386__) m11p = (__m128i*)m_11; m10p = (__m128i*)m_10; - +#elif defined(__arm__) + m11p = (int16x8_t*)m_11; + m10p = (int16x8_t*)m_10; +#endif for (k=0; k>3)); for (k=(frame_length>>3)-1; k>=loopval; k--) { +#if defined(__x86_64__) || defined(__i386__) m11_128=((__m128i*)m_11)[k]; m10_128=((__m128i*)m_10)[k]; @@ -465,7 +634,55 @@ void compute_beta16(llr_t* alpha,llr_t* beta,llr_t *m_11,llr_t* m_10,unsigned sh beta_ptr[5] = _mm_subs_epi16(beta_ptr[5],beta_max); beta_ptr[6] = _mm_subs_epi16(beta_ptr[6],beta_max); beta_ptr[7] = _mm_subs_epi16(beta_ptr[7],beta_max); +#elif defined(__arm__) + m11_128=((int16x8_t*)m_11)[k]; + m10_128=((int16x8_t*)m_10)[k]; + m_b0 = vqaddq_s16(beta_ptr[4],m11_128); //m11 + m_b1 = vqsubq_s16(beta_ptr[4],m11_128); //m00 + m_b2 = vqsubq_s16(beta_ptr[5],m10_128); //m01 + m_b3 = vqaddq_s16(beta_ptr[5],m10_128); //m10 + m_b4 = vqaddq_s16(beta_ptr[6],m10_128); //m10 + m_b5 = vqsubq_s16(beta_ptr[6],m10_128); //m01 + m_b6 = vqsubq_s16(beta_ptr[7],m11_128); //m00 + m_b7 = vqaddq_s16(beta_ptr[7],m11_128); //m11 + new0 = vqsubq_s16(beta_ptr[0],m11_128); //m00 + new1 = vqaddq_s16(beta_ptr[0],m11_128); //m11 + new2 = vqaddq_s16(beta_ptr[1],m10_128); //m10 + new3 = vqsubq_s16(beta_ptr[1],m10_128); //m01 + new4 = vqsubq_s16(beta_ptr[2],m10_128); //m01 + new5 = vqaddq_s16(beta_ptr[2],m10_128); //m10 + new6 = vqaddq_s16(beta_ptr[3],m11_128); //m11 + new7 = vqsubq_s16(beta_ptr[3],m11_128); //m00 + + beta_ptr-=8; + + beta_ptr[0] = vmaxq_s16(m_b0,new0); + beta_ptr[1] = vmaxq_s16(m_b1,new1); + beta_ptr[2] = vmaxq_s16(m_b2,new2); + beta_ptr[3] = vmaxq_s16(m_b3,new3); + beta_ptr[4] = vmaxq_s16(m_b4,new4); + beta_ptr[5] = vmaxq_s16(m_b5,new5); + beta_ptr[6] = vmaxq_s16(m_b6,new6); + beta_ptr[7] = vmaxq_s16(m_b7,new7); + + beta_max = vmaxq_s16(beta_ptr[0],beta_ptr[1]); + beta_max = vmaxq_s16(beta_max ,beta_ptr[2]); + beta_max = vmaxq_s16(beta_max ,beta_ptr[3]); + beta_max = vmaxq_s16(beta_max ,beta_ptr[4]); + beta_max = vmaxq_s16(beta_max ,beta_ptr[5]); + beta_max = vmaxq_s16(beta_max ,beta_ptr[6]); + beta_max = vmaxq_s16(beta_max ,beta_ptr[7]); + + beta_ptr[0] = vqsubq_s16(beta_ptr[0],beta_max); + beta_ptr[1] = vqsubq_s16(beta_ptr[1],beta_max); + beta_ptr[2] = vqsubq_s16(beta_ptr[2],beta_max); + beta_ptr[3] = vqsubq_s16(beta_ptr[3],beta_max); + beta_ptr[4] = vqsubq_s16(beta_ptr[4],beta_max); + beta_ptr[5] = vqsubq_s16(beta_ptr[5],beta_max); + beta_ptr[6] = vqsubq_s16(beta_ptr[6],beta_max); + beta_ptr[7] = vqsubq_s16(beta_ptr[7],beta_max); +#endif } @@ -477,6 +694,7 @@ void compute_beta16(llr_t* alpha,llr_t* beta,llr_t *m_11,llr_t* m_10,unsigned sh void compute_ext16(llr_t* alpha,llr_t* beta,llr_t* m_11,llr_t* m_10,llr_t* ext, llr_t* systematic,unsigned short frame_length) { +#if defined(__x86_64__) || defined(__i386__) __m128i *alpha128=(__m128i *)alpha; __m128i *beta128=(__m128i *)beta; __m128i *m11_128,*m10_128,*ext_128; @@ -485,6 +703,17 @@ void compute_ext16(llr_t* alpha,llr_t* beta,llr_t* m_11,llr_t* m_10,llr_t* ext, __m128i m01_1,m01_2,m01_3,m01_4; __m128i m10_1,m10_2,m10_3,m10_4; __m128i m11_1,m11_2,m11_3,m11_4; +#elif defined(__arm__) + int16x8_t *alpha128=(int16x8_t *)alpha; + int16x8_t *beta128=(int16x8_t *)beta; + int16x8_t *m11_128,*m10_128,*ext_128; + int16x8_t *alpha_ptr,*beta_ptr; + int16x8_t m00_1,m00_2,m00_3,m00_4; + int16x8_t m01_1,m01_2,m01_3,m01_4; + int16x8_t m10_1,m10_2,m10_3,m10_4; + int16x8_t m11_1,m11_2,m11_3,m11_4; +#endif + int k; // @@ -501,9 +730,11 @@ void compute_ext16(llr_t* alpha,llr_t* beta,llr_t* m_11,llr_t* m_10,llr_t* ext, for (k=0; k<(frame_length>>3); k++) { +#if defined(__x86_64__) || defined(__i386__) m11_128 = (__m128i*)&m_11[k<<3]; m10_128 = (__m128i*)&m_10[k<<3]; ext_128 = (__m128i*)&ext[k<<3]; + /* printf("EXT %03d\n",k); print_shorts("a0:",&alpha_ptr[0]); @@ -594,7 +825,54 @@ void compute_ext16(llr_t* alpha,llr_t* beta,llr_t* m_11,llr_t* m_10,llr_t* ext, print_shorts("m01_1:",&m01_1); print_shorts("syst:",systematic_128); */ +#elif defined(__arm__) + m11_128 = (int16x8_t*)&m_11[k<<3]; + m10_128 = (int16x8_t*)&m_10[k<<3]; + ext_128 = (int16x8_t*)&ext[k<<3]; + m00_4 = vqaddq_s16(alpha_ptr[7],beta_ptr[3]); //ALPHA_BETA_4m00; + m11_4 = vqaddq_s16(alpha_ptr[7],beta_ptr[7]); //ALPHA_BETA_4m11; + m00_3 = vqaddq_s16(alpha_ptr[6],beta_ptr[7]); //ALPHA_BETA_3m00; + m11_3 = vqaddq_s16(alpha_ptr[6],beta_ptr[3]); //ALPHA_BETA_3m11; + m00_2 = vqaddq_s16(alpha_ptr[1],beta_ptr[4]); //ALPHA_BETA_2m00; + m11_2 = vqaddq_s16(alpha_ptr[1],beta_ptr[0]); //ALPHA_BETA_2m11; + m11_1 = vqaddq_s16(alpha_ptr[0],beta_ptr[4]); //ALPHA_BETA_1m11; + m00_1 = vqaddq_s16(alpha_ptr[0],beta_ptr[0]); //ALPHA_BETA_1m00; + m01_4 = vqaddq_s16(alpha_ptr[5],beta_ptr[6]); //ALPHA_BETA_4m01; + m10_4 = vqaddq_s16(alpha_ptr[5],beta_ptr[2]); //ALPHA_BETA_4m10; + m01_3 = vqaddq_s16(alpha_ptr[4],beta_ptr[2]); //ALPHA_BETA_3m01; + m10_3 = vqaddq_s16(alpha_ptr[4],beta_ptr[6]); //ALPHA_BETA_3m10; + m01_2 = vqaddq_s16(alpha_ptr[3],beta_ptr[1]); //ALPHA_BETA_2m01; + m10_2 = vqaddq_s16(alpha_ptr[3],beta_ptr[5]); //ALPHA_BETA_2m10; + m10_1 = vqaddq_s16(alpha_ptr[2],beta_ptr[1]); //ALPHA_BETA_1m10; + m01_1 = vqaddq_s16(alpha_ptr[2],beta_ptr[5]); //ALPHA_BETA_1m01; + + m01_1 = vmaxq_s16(m01_1,m01_2); + m01_1 = vmaxq_s16(m01_1,m01_3); + m01_1 = vmaxq_s16(m01_1,m01_4); + m00_1 = vmaxq_s16(m00_1,m00_2); + m00_1 = vmaxq_s16(m00_1,m00_3); + m00_1 = vmaxq_s16(m00_1,m00_4); + m10_1 = vmaxq_s16(m10_1,m10_2); + m10_1 = vmaxq_s16(m10_1,m10_3); + m10_1 = vmaxq_s16(m10_1,m10_4); + m11_1 = vmaxq_s16(m11_1,m11_2); + m11_1 = vmaxq_s16(m11_1,m11_3); + m11_1 = vmaxq_s16(m11_1,m11_4); + + + m01_1 = vqsubq_s16(m01_1,*m10_128); + m00_1 = vqsubq_s16(m00_1,*m11_128); + m10_1 = vqaddq_s16(m10_1,*m10_128); + m11_1 = vqaddq_s16(m11_1,*m11_128); + + + m01_1 = vmaxq_s16(m01_1,m00_1); + m10_1 = vmaxq_s16(m10_1,m11_1); + + + *ext_128 = vqsubq_s16(m10_1,m01_1); +#endif alpha_ptr+=8; beta_ptr+=8; } @@ -703,15 +981,23 @@ unsigned char phy_threegpplte_turbo_decoder16(short *y, int *pi2_p,*pi4_p,*pi5_p,*pi6_p; llr_t *s,*s1,*s2,*yp1,*yp2,*yp; - __m128i *yp128; unsigned int i,j,iind;//,pi; unsigned char iteration_cnt=0; unsigned int crc,oldcrc,crc_len; uint8_t temp; +#if defined(__x86_64__) || defined(__i386__) + __m128i *yp128; __m128i tmp, zeros=_mm_setzero_si128(); - register __m128i tmpe; +#elif defined(__arm__) + int16x8_t *yp128; +// int16x8_t tmp128[(n+8)>>3]; + int16x8_t tmp, zeros=vdupq_n_s16(0); + const uint16_t __attribute__ ((aligned (16))) _Powers[8]= + { 1, 2, 4, 8, 16, 32, 64, 128}; + uint16x8_t Powers= vld1q_u16(_Powers); +#endif int offset8_flag=0; if (crc_type > 3) { @@ -749,7 +1035,11 @@ unsigned char phy_threegpplte_turbo_decoder16(short *y, crc_len=3; } +#if defined(__x86_64__) || defined(__i386__) yp128 = (__m128i*)y; +#elif defined(__arm__) + yp128 = (int16x8_t*)y; +#endif @@ -767,7 +1057,7 @@ unsigned char phy_threegpplte_turbo_decoder16(short *y, j=pi2_p[0]; - +#if defined(__x86_64__) || defined(__i386__) tmpe = _mm_load_si128(yp128); s[j] = _mm_extract_epi16(tmpe,0); @@ -826,6 +1116,46 @@ unsigned char phy_threegpplte_turbo_decoder16(short *y, yp2[j] = _mm_extract_epi16(tmpe,7); // printf("init: j %d, s[j] %d yp1[j] %d yp2[j] %d\n",j,s[j],yp1[j],yp2[j]); +#elif defined(__arm__) + s[j] = vgetq_lane_s16(yp128[0],0); + yp1[j] = vgetq_lane_s16(yp128[0],1); + yp2[j] = vgetq_lane_s16(yp128[0],2); + + j=pi2_p[1]; + s[j] = vgetq_lane_s16(yp128[0],3); + yp1[j] = vgetq_lane_s16(yp128[0],4); + yp2[j] = vgetq_lane_s16(yp128[0],5); + + j=pi2_p[2]; + s[j] = vgetq_lane_s16(yp128[0],6); + yp1[j] = vgetq_lane_s16(yp128[0],7); + yp2[j] = vgetq_lane_s16(yp128[1],0); + + j=pi2_p[3]; + s[j] = vgetq_lane_s16(yp128[1],1); + yp1[j] = vgetq_lane_s16(yp128[1],2); + yp2[j] = vgetq_lane_s16(yp128[1],3); + + j=pi2_p[4]; + s[j] = vgetq_lane_s16(yp128[1],4); + yp1[j] = vgetq_lane_s16(yp128[1],5); + yp2[j] = vgetq_lane_s16(yp128[1],6); + + j=pi2_p[5]; + s[j] = vgetq_lane_s16(yp128[1],7); + yp1[j] = vgetq_lane_s16(yp128[2],0); + yp2[j] = vgetq_lane_s16(yp128[2],1); + + j=pi2_p[6]; + s[j] = vgetq_lane_s16(yp128[2],2); + yp1[j] = vgetq_lane_s16(yp128[2],3); + yp2[j] = vgetq_lane_s16(yp128[2],4); + + j=pi2_p[7]; + s[j] = vgetq_lane_s16(yp128[2],5); + yp1[j] = vgetq_lane_s16(yp128[2],6); + yp2[j] = vgetq_lane_s16(yp128[2],7); +#endif yp128+=3; } @@ -879,7 +1209,7 @@ unsigned char phy_threegpplte_turbo_decoder16(short *y, pi4_p=pi4tab16[iind]; for (i=0; i<(n>>3); i++) { // steady-state portion - +#if defined(__x86_64__) || defined(__i386__) ((__m128i *)systematic2)[i]=_mm_insert_epi16(((__m128i *)systematic2)[i],((llr_t*)ext)[*pi4_p++],0); ((__m128i *)systematic2)[i]=_mm_insert_epi16(((__m128i *)systematic2)[i],((llr_t*)ext)[*pi4_p++],1); ((__m128i *)systematic2)[i]=_mm_insert_epi16(((__m128i *)systematic2)[i],((llr_t*)ext)[*pi4_p++],2); @@ -888,6 +1218,16 @@ unsigned char phy_threegpplte_turbo_decoder16(short *y, ((__m128i *)systematic2)[i]=_mm_insert_epi16(((__m128i *)systematic2)[i],((llr_t*)ext)[*pi4_p++],5); ((__m128i *)systematic2)[i]=_mm_insert_epi16(((__m128i *)systematic2)[i],((llr_t*)ext)[*pi4_p++],6); ((__m128i *)systematic2)[i]=_mm_insert_epi16(((__m128i *)systematic2)[i],((llr_t*)ext)[*pi4_p++],7); +#elif defined(__arm__) + ((int16x8_t*)systematic2)[i]=vsetq_lane_s16(((llr_t*)ext)[*pi4_p++],((int16x8_t*)systematic2)[i],0); + ((int16x8_t*)systematic2)[i]=vsetq_lane_s16(((llr_t*)ext)[*pi4_p++],((int16x8_t*)systematic2)[i],1); + ((int16x8_t*)systematic2)[i]=vsetq_lane_s16(((llr_t*)ext)[*pi4_p++],((int16x8_t*)systematic2)[i],2); + ((int16x8_t*)systematic2)[i]=vsetq_lane_s16(((llr_t*)ext)[*pi4_p++],((int16x8_t*)systematic2)[i],3); + ((int16x8_t*)systematic2)[i]=vsetq_lane_s16(((llr_t*)ext)[*pi4_p++],((int16x8_t*)systematic2)[i],4); + ((int16x8_t*)systematic2)[i]=vsetq_lane_s16(((llr_t*)ext)[*pi4_p++],((int16x8_t*)systematic2)[i],5); + ((int16x8_t*)systematic2)[i]=vsetq_lane_s16(((llr_t*)ext)[*pi4_p++],((int16x8_t*)systematic2)[i],6); + ((int16x8_t*)systematic2)[i]=vsetq_lane_s16(((llr_t*)ext)[*pi4_p++],((int16x8_t*)systematic2)[i],7); +#endif } stop_meas(intl1_stats); @@ -901,6 +1241,7 @@ unsigned char phy_threegpplte_turbo_decoder16(short *y, pi5_p=pi5tab16[iind]; for (i=0; i<(n>>3); i++) { +#if defined(__x86_64__) || defined(__i386__) tmp=_mm_insert_epi16(tmp,ext2[*pi5_p++],0); tmp=_mm_insert_epi16(tmp,ext2[*pi5_p++],1); tmp=_mm_insert_epi16(tmp,ext2[*pi5_p++],2); @@ -910,6 +1251,17 @@ unsigned char phy_threegpplte_turbo_decoder16(short *y, tmp=_mm_insert_epi16(tmp,ext2[*pi5_p++],6); tmp=_mm_insert_epi16(tmp,ext2[*pi5_p++],7); ((__m128i *)systematic1)[i] = _mm_adds_epi16(_mm_subs_epi16(tmp,((__m128i*)ext)[i]),((__m128i *)systematic0)[i]); +#elif defined(__arm__) + tmp=vsetq_lane_s16(ext2[*pi5_p++],tmp,0); + tmp=vsetq_lane_s16(ext2[*pi5_p++],tmp,1); + tmp=vsetq_lane_s16(ext2[*pi5_p++],tmp,2); + tmp=vsetq_lane_s16(ext2[*pi5_p++],tmp,3); + tmp=vsetq_lane_s16(ext2[*pi5_p++],tmp,4); + tmp=vsetq_lane_s16(ext2[*pi5_p++],tmp,5); + tmp=vsetq_lane_s16(ext2[*pi5_p++],tmp,6); + tmp=vsetq_lane_s16(ext2[*pi5_p++],tmp,7); + ((int16x8_t *)systematic1)[i] = vqaddq_s16(vqsubq_s16(tmp,((int16x8_t*)ext)[i]),((int16x8_t *)systematic0)[i]); +#endif } if (iteration_cnt>1) { @@ -917,6 +1269,7 @@ unsigned char phy_threegpplte_turbo_decoder16(short *y, pi6_p=pi6tab16[iind]; for (i=0; i<(n>>3); i++) { +#if defined(__x86_64__) || defined(__i386__) tmp=_mm_insert_epi16(tmp, ((llr_t*)ext2)[*pi6_p++],7); tmp=_mm_insert_epi16(tmp, ((llr_t*)ext2)[*pi6_p++],6); tmp=_mm_insert_epi16(tmp, ((llr_t*)ext2)[*pi6_p++],5); @@ -927,7 +1280,24 @@ unsigned char phy_threegpplte_turbo_decoder16(short *y, tmp=_mm_insert_epi16(tmp, ((llr_t*)ext2)[*pi6_p++],0); tmp=_mm_cmpgt_epi8(_mm_packs_epi16(tmp,zeros),zeros); decoded_bytes[i]=(unsigned char)_mm_movemask_epi8(tmp); - +#elif defined(__arm__) + tmp=vsetq_lane_s16(ext2[*pi6_p++],tmp,7); + tmp=vsetq_lane_s16(ext2[*pi6_p++],tmp,6); + tmp=vsetq_lane_s16(ext2[*pi6_p++],tmp,5); + tmp=vsetq_lane_s16(ext2[*pi6_p++],tmp,4); + tmp=vsetq_lane_s16(ext2[*pi6_p++],tmp,3); + tmp=vsetq_lane_s16(ext2[*pi6_p++],tmp,2); + tmp=vsetq_lane_s16(ext2[*pi6_p++],tmp,1); + tmp=vsetq_lane_s16(ext2[*pi6_p++],tmp,0); +// This does: +// [1 2 4 8 16 32 64 128] .* I(ext_i > 0) = 2.^[b0 b1 b2 b3 b4 b5 b6 b7], where bi =I(ext_i > 0) +// [2^b0 + 2^b1 2^b2 + 2^b3 2^b4 + 2^b5 2^b6 + 2^b7] +// [2^b0 + 2^b1 + 2^b2 + 2^b3 2^b4 + 2^b5 + 2^b6 + 2^b7] +// Mask64 = 2^b0 + 2^b1 + 2^b2 + 2^b3 + 2^b4 + 2^b5 + 2^b6 + 2^b7 + uint64x2_t Mask = vpaddlq_u32(vpaddlq_u16(vandq_u16(vcgtq_s16(tmp,zeros), Powers))); + uint64x1_t Mask64 = vget_high_u64(Mask)+vget_low_u64(Mask); + decoded_bytes[i] = (uint8_t)Mask64; +#endif } } @@ -983,14 +1353,23 @@ unsigned char phy_threegpplte_turbo_decoder16(short *y, // do log_map from first parity bit if (iteration_cnt < max_iterations) { log_map16(systematic1,yparity1,m11,m10,alpha,beta,ext,n,0,F,offset8_flag,alpha_stats,beta_stats,gamma_stats,ext_stats); +#if defined(__x86_64__) || defined(__i386__) __m128i* ext_128=(__m128i*) ext; __m128i* s1_128=(__m128i*) systematic1; __m128i* s0_128=(__m128i*) systematic0; - +#elif defined(__arm__) + int16x8_t* ext_128=(int16x8_t*) ext; + int16x8_t* s1_128=(int16x8_t*) systematic1; + int16x8_t* s0_128=(int16x8_t*) systematic0; +#endif int myloop=n>>3; for (i=0; i>4); for (k=0; k>4, rerun_flag=0; rerun_flag<2; loopval=L, rerun_flag++) { alpha_ptr = &alpha128[0]; + m11p = (__m128i*)m_11; m10p = (__m128i*)m_10; @@ -289,6 +316,95 @@ void compute_alpha8(llr_t* alpha,llr_t* beta,llr_t* m_11,llr_t* m_10,unsigned sh alpha[112] = -MAX8/2; } +#elif defined(__arm__) + alpha128[0] = vdupq_n_s8(-MAX8/2); + alpha128[0] = vsetq_lane_s8(0,alpha128[0],0); + alpha128[1] = vdupq_n_s8(-MAX8/2); + alpha128[2] = vdupq_n_s8(-MAX8/2); + alpha128[3] = vdupq_n_s8(-MAX8/2); + alpha128[4] = vdupq_n_s8(-MAX8/2); + alpha128[5] = vdupq_n_s8(-MAX8/2); + alpha128[6] = vdupq_n_s8(-MAX8/2); + alpha128[7] = vdupq_n_s8(-MAX8/2); + for (loopval=frame_length>>4, rerun_flag=0; rerun_flag<2; loopval=L, rerun_flag++) { + + alpha_ptr = &alpha128[0]; + + m11p = (int8x16_t*)m_11; + m10p = (int8x16_t*)m_10; + + for (k=0; k>1; + alpha128[0] = (int8x16_t)vshlq_n_s64((int64x2_t)alpha128[K1],8); alpha128[0] = vsetq_lane_s8(alpha[8],alpha128[0],7); + alpha128[1] = (int8x16_t)vshlq_n_s64((int64x2_t)alpha128[1+K1],8); alpha128[1] = vsetq_lane_s8(alpha[24],alpha128[0],7); + alpha128[2] = (int8x16_t)vshlq_n_s64((int64x2_t)alpha128[2+K1],8); alpha128[2] = vsetq_lane_s8(alpha[40],alpha128[0],7); + alpha128[3] = (int8x16_t)vshlq_n_s64((int64x2_t)alpha128[3+K1],8); alpha128[3] = vsetq_lane_s8(alpha[56],alpha128[0],7); + alpha128[4] = (int8x16_t)vshlq_n_s64((int64x2_t)alpha128[4+K1],8); alpha128[4] = vsetq_lane_s8(alpha[72],alpha128[0],7); + alpha128[5] = (int8x16_t)vshlq_n_s64((int64x2_t)alpha128[5+K1],8); alpha128[5] = vsetq_lane_s8(alpha[88],alpha128[0],7); + alpha128[6] = (int8x16_t)vshlq_n_s64((int64x2_t)alpha128[6+K1],8); alpha128[6] = vsetq_lane_s8(alpha[104],alpha128[0],7); + alpha128[7] = (int8x16_t)vshlq_n_s64((int64x2_t)alpha128[7+K1],8); alpha128[7] = vsetq_lane_s8(alpha[120],alpha128[0],7); + alpha[16] = -MAX8/2; + alpha[32] = -MAX8/2; + alpha[48] = -MAX8/2; + alpha[64] = -MAX8/2; + alpha[80] = -MAX8/2; + alpha[96] = -MAX8/2; + alpha[112] = -MAX8/2; + + } +#endif + } @@ -297,13 +413,21 @@ void compute_beta8(llr_t* alpha,llr_t* beta,llr_t *m_11,llr_t* m_10,unsigned sho { int k,rerun_flag, loopval; +#if defined(__x86_64__) || defined(__i386__) __m128i m11_128,m10_128; __m128i m_b0,m_b1,m_b2,m_b3,m_b4,m_b5,m_b6,m_b7; __m128i new0,new1,new2,new3,new4,new5,new6,new7; __m128i *beta128,*alpha128,*beta_ptr; __m128i beta_max; +#elif defined(__arm__) + int8x16_t m11_128,m10_128; + int8x16_t m_b0,m_b1,m_b2,m_b3,m_b4,m_b5,m_b6,m_b7; + int8x16_t new0,new1,new2,new3,new4,new5,new6,new7; + int8x16_t *beta128,*alpha128,*beta_ptr; + int8x16_t beta_max; +#endif llr_t beta0,beta1; llr_t beta2,beta3,beta4,beta5,beta6,beta7; @@ -371,8 +495,14 @@ void compute_beta8(llr_t* alpha,llr_t* beta,llr_t *m_11,llr_t* m_10,unsigned sho // we are supposed to run compute_alpha just before compute_beta // so the initial states of backward computation can be set from last value of alpha states (forward computation) + +#if defined(__x86_64__) || defined(__i386__) beta_ptr = (__m128i*)&beta[frame_length<<3]; alpha128 = (__m128i*)&alpha[0]; +#elif defined(__arm__) + beta_ptr = (int8x16_t*)&beta[frame_length<<3]; + alpha128 = (int8x16_t*)&alpha[0]; +#endif beta_ptr[0] = alpha128[(frame_length>>1)]; beta_ptr[1] = alpha128[1+(frame_length>>1)]; beta_ptr[2] = alpha128[2+(frame_length>>1)]; @@ -391,6 +521,7 @@ void compute_beta8(llr_t* alpha,llr_t* beta,llr_t *m_11,llr_t* m_10,unsigned sho // workaround: init with 0 beta0 = beta1 = beta2 = beta3 = beta4 = beta5 = beta6 = beta7 = 0; +#if defined(__x86_64__) || defined(__i386__) beta_ptr[0] = _mm_insert_epi8(beta_ptr[0],beta0,15); beta_ptr[1] = _mm_insert_epi8(beta_ptr[1],beta1,15); beta_ptr[2] = _mm_insert_epi8(beta_ptr[2],beta2,15); @@ -399,12 +530,27 @@ void compute_beta8(llr_t* alpha,llr_t* beta,llr_t *m_11,llr_t* m_10,unsigned sho beta_ptr[5] = _mm_insert_epi8(beta_ptr[5],beta5,15); beta_ptr[6] = _mm_insert_epi8(beta_ptr[6],beta6,15); beta_ptr[7] = _mm_insert_epi8(beta_ptr[7],beta7,15); +#elif defined(__arm__) + beta_ptr[0] = vsetq_lane_s8(beta0,beta_ptr[0],15); + beta_ptr[1] = vsetq_lane_s8(beta1,beta_ptr[1],15); + beta_ptr[2] = vsetq_lane_s8(beta2,beta_ptr[2],15); + beta_ptr[3] = vsetq_lane_s8(beta3,beta_ptr[3],15); + beta_ptr[4] = vsetq_lane_s8(beta4,beta_ptr[4],15); + beta_ptr[5] = vsetq_lane_s8(beta5,beta_ptr[5],15); + beta_ptr[6] = vsetq_lane_s8(beta6,beta_ptr[6],15); + beta_ptr[7] = vsetq_lane_s8(beta7,beta_ptr[7],15); +#endif } - for (k=(frame_length>>4)-1, beta_ptr = (__m128i*)&beta[frame_length<<3] ; +#if defined(__x86_64__) || defined(__i386__) + beta_ptr = (__m128i*)&beta[frame_length<<3]; +#elif defined(__arm__) + beta_ptr = (int8x16_t*)&beta[frame_length<<3]; +#endif + for (k=(frame_length>>4)-1; k>=loopval; k--) { - +#if defined(__x86_64__) || defined(__i386__) m11_128=((__m128i*)m_11)[k]; m10_128=((__m128i*)m_10)[k]; m_b0 = _mm_adds_epi8(beta_ptr[4],m11_128); //m11 @@ -452,12 +598,62 @@ void compute_beta8(llr_t* alpha,llr_t* beta,llr_t *m_11,llr_t* m_10,unsigned sho beta_ptr[5] = _mm_subs_epi8(beta_ptr[5],beta_max); beta_ptr[6] = _mm_subs_epi8(beta_ptr[6],beta_max); beta_ptr[7] = _mm_subs_epi8(beta_ptr[7],beta_max); +#elif defined(__arm__) + m11_128=((int8x16_t*)m_11)[k]; + m10_128=((int8x16_t*)m_10)[k]; + m_b0 = vqaddq_s8(beta_ptr[4],m11_128); //m11 + m_b1 = vqsubq_s8(beta_ptr[4],m11_128); //m00 + m_b2 = vqsubq_s8(beta_ptr[5],m10_128); //m01 + m_b3 = vqaddq_s8(beta_ptr[5],m10_128); //m10 + m_b4 = vqaddq_s8(beta_ptr[6],m10_128); //m10 + m_b5 = vqsubq_s8(beta_ptr[6],m10_128); //m01 + m_b6 = vqsubq_s8(beta_ptr[7],m11_128); //m00 + m_b7 = vqaddq_s8(beta_ptr[7],m11_128); //m11 + new0 = vqsubq_s8(beta_ptr[0],m11_128); //m00 + new1 = vqaddq_s8(beta_ptr[0],m11_128); //m11 + new2 = vqaddq_s8(beta_ptr[1],m10_128); //m10 + new3 = vqsubq_s8(beta_ptr[1],m10_128); //m01 + new4 = vqsubq_s8(beta_ptr[2],m10_128); //m01 + new5 = vqaddq_s8(beta_ptr[2],m10_128); //m10 + new6 = vqaddq_s8(beta_ptr[3],m11_128); //m11 + new7 = vqsubq_s8(beta_ptr[3],m11_128); //m00 + + beta_ptr-=8; + + beta_ptr[0] = vmaxq_s8(m_b0,new0); + beta_ptr[1] = vmaxq_s8(m_b1,new1); + beta_ptr[2] = vmaxq_s8(m_b2,new2); + beta_ptr[3] = vmaxq_s8(m_b3,new3); + beta_ptr[4] = vmaxq_s8(m_b4,new4); + beta_ptr[5] = vmaxq_s8(m_b5,new5); + beta_ptr[6] = vmaxq_s8(m_b6,new6); + beta_ptr[7] = vmaxq_s8(m_b7,new7); + + beta_max = vmaxq_s8(beta_ptr[0],beta_ptr[1]); + beta_max = vmaxq_s8(beta_max ,beta_ptr[2]); + beta_max = vmaxq_s8(beta_max ,beta_ptr[3]); + beta_max = vmaxq_s8(beta_max ,beta_ptr[4]); + beta_max = vmaxq_s8(beta_max ,beta_ptr[5]); + beta_max = vmaxq_s8(beta_max ,beta_ptr[6]); + beta_max = vmaxq_s8(beta_max ,beta_ptr[7]); + + beta_ptr[0] = vqsubq_s8(beta_ptr[0],beta_max); + beta_ptr[1] = vqsubq_s8(beta_ptr[1],beta_max); + beta_ptr[2] = vqsubq_s8(beta_ptr[2],beta_max); + beta_ptr[3] = vqsubq_s8(beta_ptr[3],beta_max); + beta_ptr[4] = vqsubq_s8(beta_ptr[4],beta_max); + beta_ptr[5] = vqsubq_s8(beta_ptr[5],beta_max); + beta_ptr[6] = vqsubq_s8(beta_ptr[6],beta_max); + beta_ptr[7] = vqsubq_s8(beta_ptr[7],beta_max); +#endif } // Set intial state for next iteration from the last state // as column last states are the first states of the next column - // The initial state of colum 0 is coming from tail bits (to be computed) + // The initial state of column 0 is coming from tail bits (to be computed) + +#if defined(__x86_64__) || defined(__i386__) beta128 = (__m128i*)&beta[0]; beta_ptr = (__m128i*)&beta[frame_length<<3]; beta_ptr[0] = _mm_srli_si128(beta128[0],1); @@ -468,12 +664,25 @@ void compute_beta8(llr_t* alpha,llr_t* beta,llr_t *m_11,llr_t* m_10,unsigned sho beta_ptr[5] = _mm_srli_si128(beta128[5],1); beta_ptr[6] = _mm_srli_si128(beta128[6],1); beta_ptr[7] = _mm_srli_si128(beta128[7],1); +#elif defined(__arm__) + beta128 = (int8x16_t*)&beta[0]; + beta_ptr = (int8x16_t*)&beta[frame_length<<3]; + beta_ptr[0] = (int8x16_t)vshrq_n_s64((int64x2_t)beta128[0],8); beta_ptr[0] = vsetq_lane_s8(beta[7],beta_ptr[0],8); + beta_ptr[1] = (int8x16_t)vshrq_n_s64((int64x2_t)beta128[1],8); beta_ptr[1] = vsetq_lane_s8(beta[23],beta_ptr[1],8); + beta_ptr[2] = (int8x16_t)vshrq_n_s64((int64x2_t)beta128[2],8); beta_ptr[2] = vsetq_lane_s8(beta[39],beta_ptr[2],8); + beta_ptr[3] = (int8x16_t)vshrq_n_s64((int64x2_t)beta128[3],8); beta_ptr[3] = vsetq_lane_s8(beta[55],beta_ptr[3],8); + beta_ptr[4] = (int8x16_t)vshrq_n_s64((int64x2_t)beta128[4],8); beta_ptr[4] = vsetq_lane_s8(beta[71],beta_ptr[4],8); + beta_ptr[5] = (int8x16_t)vshrq_n_s64((int64x2_t)beta128[5],8); beta_ptr[5] = vsetq_lane_s8(beta[87],beta_ptr[5],8); + beta_ptr[6] = (int8x16_t)vshrq_n_s64((int64x2_t)beta128[6],8); beta_ptr[6] = vsetq_lane_s8(beta[103],beta_ptr[6],8); + beta_ptr[7] = (int8x16_t)vshrq_n_s64((int64x2_t)beta128[7],8); beta_ptr[7] = vsetq_lane_s8(beta[119],beta_ptr[7],8); +#endif } } void compute_ext8(llr_t* alpha,llr_t* beta,llr_t* m_11,llr_t* m_10,llr_t* ext, llr_t* systematic,unsigned short frame_length) { +#if defined(__x86_64__) || defined(__i386__) __m128i *alpha128=(__m128i *)alpha; __m128i *beta128=(__m128i *)beta; __m128i *m11_128,*m10_128,*ext_128; @@ -482,6 +691,16 @@ void compute_ext8(llr_t* alpha,llr_t* beta,llr_t* m_11,llr_t* m_10,llr_t* ext, l __m128i m01_1,m01_2,m01_3,m01_4; __m128i m10_1,m10_2,m10_3,m10_4; __m128i m11_1,m11_2,m11_3,m11_4; +#elif defined(__arm__) + int8x16_t *alpha128=(int8x16_t *)alpha; + int8x16_t *beta128=(int8x16_t *)beta; + int8x16_t *m11_128,*m10_128,*ext_128; + int8x16_t *alpha_ptr,*beta_ptr; + int8x16_t m00_1,m00_2,m00_3,m00_4; + int8x16_t m01_1,m01_2,m01_3,m01_4; + int8x16_t m10_1,m10_2,m10_3,m10_4; + int8x16_t m11_1,m11_2,m11_3,m11_4; +#endif int k; // @@ -498,6 +717,8 @@ void compute_ext8(llr_t* alpha,llr_t* beta,llr_t* m_11,llr_t* m_10,llr_t* ext, l for (k=0; k<(frame_length>>4); k++) { +#if defined(__x86_64__) || defined(__i386__) + m11_128 = (__m128i*)&m_11[k<<4]; m10_128 = (__m128i*)&m_10[k<<4]; ext_128 = (__m128i*)&ext[k<<4]; @@ -547,6 +768,59 @@ void compute_ext8(llr_t* alpha,llr_t* beta,llr_t* m_11,llr_t* m_10,llr_t* ext, l alpha_ptr+=8; beta_ptr+=8; +#elif defined(__arm__) + + m11_128 = (int8x16_t*)&m_11[k<<4]; + m10_128 = (int8x16_t*)&m_10[k<<4]; + ext_128 = (int8x16_t*)&ext[k<<4]; + + m00_4 = vqaddq_s8(alpha_ptr[7],beta_ptr[3]); //ALPHA_BETA_4m00; + m11_4 = vqaddq_s8(alpha_ptr[7],beta_ptr[7]); //ALPHA_BETA_4m11; + m00_3 = vqaddq_s8(alpha_ptr[6],beta_ptr[7]); //ALPHA_BETA_3m00; + m11_3 = vqaddq_s8(alpha_ptr[6],beta_ptr[3]); //ALPHA_BETA_3m11; + m00_2 = vqaddq_s8(alpha_ptr[1],beta_ptr[4]); //ALPHA_BETA_2m00; + m11_2 = vqaddq_s8(alpha_ptr[1],beta_ptr[0]); //ALPHA_BETA_2m11; + m11_1 = vqaddq_s8(alpha_ptr[0],beta_ptr[4]); //ALPHA_BETA_1m11; + m00_1 = vqaddq_s8(alpha_ptr[0],beta_ptr[0]); //ALPHA_BETA_1m00; + m01_4 = vqaddq_s8(alpha_ptr[5],beta_ptr[6]); //ALPHA_BETA_4m01; + m10_4 = vqaddq_s8(alpha_ptr[5],beta_ptr[2]); //ALPHA_BETA_4m10; + m01_3 = vqaddq_s8(alpha_ptr[4],beta_ptr[2]); //ALPHA_BETA_3m01; + m10_3 = vqaddq_s8(alpha_ptr[4],beta_ptr[6]); //ALPHA_BETA_3m10; + m01_2 = vqaddq_s8(alpha_ptr[3],beta_ptr[1]); //ALPHA_BETA_2m01; + m10_2 = vqaddq_s8(alpha_ptr[3],beta_ptr[5]); //ALPHA_BETA_2m10; + m10_1 = vqaddq_s8(alpha_ptr[2],beta_ptr[1]); //ALPHA_BETA_1m10; + m01_1 = vqaddq_s8(alpha_ptr[2],beta_ptr[5]); //ALPHA_BETA_1m01; + + m01_1 = vmaxq_s8(m01_1,m01_2); + m01_1 = vmaxq_s8(m01_1,m01_3); + m01_1 = vmaxq_s8(m01_1,m01_4); + m00_1 = vmaxq_s8(m00_1,m00_2); + m00_1 = vmaxq_s8(m00_1,m00_3); + m00_1 = vmaxq_s8(m00_1,m00_4); + m10_1 = vmaxq_s8(m10_1,m10_2); + m10_1 = vmaxq_s8(m10_1,m10_3); + m10_1 = vmaxq_s8(m10_1,m10_4); + m11_1 = vmaxq_s8(m11_1,m11_2); + m11_1 = vmaxq_s8(m11_1,m11_3); + m11_1 = vmaxq_s8(m11_1,m11_4); + + + m01_1 = vqsubq_s8(m01_1,*m10_128); + m00_1 = vqsubq_s8(m00_1,*m11_128); + m10_1 = vqaddq_s8(m10_1,*m10_128); + m11_1 = vqaddq_s8(m11_1,*m11_128); + + + m01_1 = vmaxq_s8(m01_1,m00_1); + m10_1 = vmaxq_s8(m10_1,m11_1); + + + *ext_128 = vqsubq_s8(m10_1,m01_1); + + alpha_ptr+=8; + beta_ptr+=8; + +#endif } @@ -661,14 +935,25 @@ unsigned char phy_threegpplte_turbo_decoder8(short *y, // int *pi2_p,*pi4_p,*pi5_p,*pi6_p; int *pi4_p,*pi5_p,*pi6_p; llr_t *s,*s1,*s2,*yp1,*yp2,*yp; - __m128i *yp128; + unsigned int i,j,iind;//,pi; unsigned char iteration_cnt=0; unsigned int crc,oldcrc,crc_len; uint8_t temp; +#if defined(__x86_64__) || defined(__i386__) + __m128i *yp128; __m128i tmp128[(n+8)>>3]; __m128i tmp, zeros=_mm_setzero_si128(); - +#elif defined(__arm__) + int8x16_t *yp128; + int8x16_t tmp128[(n+8)>>3]; + int8x16_t tmp, zeros=vdupq_n_s8(0); + const uint8_t __attribute__ ((aligned (16))) _Powers[16]= + { 1, 2, 4, 8, 16, 32, 64, 128, 1, 2, 4, 8, 16, 32, 64, 128 }; + + // Set the powers of 2 (do it once for all, if applicable) + uint8x16_t Powers= vld1q_u8(_Powers); +#endif int offset8_flag=0; @@ -713,6 +998,8 @@ unsigned char phy_threegpplte_turbo_decoder8(short *y, crc_len=3; } +#if defined(__x86_64__) || defined(__i386__) + __m128i avg=_mm_set1_epi32(0); for (i=0; i<(3*(n>>4))+1; i++) { @@ -721,7 +1008,7 @@ unsigned char phy_threegpplte_turbo_decoder8(short *y, avg=_mm_add_epi32(_mm_cvtepi16_epi32(tmp),avg); } - int round_avg=(_mm_extract_epi32(avg,0)+_mm_extract_epi32(avg,1)+_mm_extract_epi32(avg,2)+_mm_extract_epi32(avg,3))/(n*3); + int32_t round_avg=(_mm_extract_epi32(avg,0)+_mm_extract_epi32(avg,1)+_mm_extract_epi32(avg,2)+_mm_extract_epi32(avg,3))/(n*3); //printf("avg input turbo: %d sum %d taille bloc %d\n",round_avg,round_sum,n); @@ -734,12 +1021,44 @@ unsigned char phy_threegpplte_turbo_decoder8(short *y, else if (round_avg < 64 ) for (i=0,j=0; i<(3*(n2>>4))+1; i++,j+=2) ((__m128i *)y8)[i] = _mm_packs_epi16(_mm_srai_epi16(((__m128i *)y)[j],2),_mm_srai_epi16(((__m128i *)y)[j+1],2)); - else + else if (round_avg < 128) for (i=0,j=0; i<(3*(n2>>4))+1; i++,j+=2) ((__m128i *)y8)[i] = _mm_packs_epi16(_mm_srai_epi16(((__m128i *)y)[j],3),_mm_srai_epi16(((__m128i *)y)[j+1],3)); + else + for (i=0,j=0; i<(3*(n2>>4))+1; i++,j+=2) + ((__m128i *)y8)[i] = _mm_packs_epi16(_mm_srai_epi16(((__m128i *)y)[j],3),_mm_srai_epi16(((__m128i *)y)[j+1],4)); yp128 = (__m128i*)y8; +#elif defined(__arm__) + + int32x4_t avg=vdupq_n_s32(0); + + for (i=0; i<(3*(n>>4))+1; i++) { + int16x8_t tmp=vabsq_s16(((int16x8_t*)y)[i]); + avg = vqaddq_s32(avg,vaddl_s16(((int16x4_t*)&tmp)[0],((int16x4_t*)&tmp)[1])); + } + + int32_t round_avg=(vgetq_lane_s32(avg,0)+vgetq_lane_s32(avg,1)+vgetq_lane_s32(avg,2)+vgetq_lane_s32(avg,3))/(n*3); + + //printf("avg input turbo: %d sum %d taille bloc %d\n",round_avg,round_sum,n); + + if (round_avg < 16 ) + for (i=0,j=0; i<(3*(n2>>3))+1; i++,j+=2) + ((int8x8_t *)y8)[i] = vqmovn_s16(((int16x8_t *)y)[j]); + else if (round_avg < 32) + for (i=0,j=0; i<(3*(n2>>3))+1; i++,j+=2) + ((int8x8_t *)y8)[i] = vqmovn_s16(vshrq_n_s16(((int16x8_t *)y)[j],1)); + else if (round_avg < 64 ) + for (i=0,j=0; i<(3*(n2>>3))+1; i++,j+=2) + ((int8x8_t *)y8)[i] = vqmovn_s16(vshrq_n_s16(((int16x8_t *)y)[j],2)); + else + for (i=0,j=0; i<(3*(n2>>3))+1; i++,j+=2) + ((int8x8_t *)y8)[i] = vqmovn_s16(vshrq_n_s16(((int16x8_t *)y)[j],3)); + + yp128 = (int8x16_t*)y8; + +#endif s = systematic0; s1 = systematic1; @@ -764,101 +1083,198 @@ unsigned char phy_threegpplte_turbo_decoder8(short *y, pi2_p = &pi2tab8[iind][i]; j=pi2_p[0]; +#if defined(__x86_64__) || defined(__i386__) s[j] = _mm_extract_epi8(yp128[0],0); yp1[j] = _mm_extract_epi8(yp128[0],1); yp2[j] = _mm_extract_epi8(yp128[0],2); - // printf("init: j %d, s[j] %d yp1[j] %d yp2[j] %d\n",j,s[j],yp1[j],yp2[j]); + j=pi2_p[1]; s[j] = _mm_extract_epi8(yp128[0],3); yp1[j] = _mm_extract_epi8(yp128[0],4); yp2[j] = _mm_extract_epi8(yp128[0],5); - // printf("init: j %d, s[j] %d yp1[j] %d yp2[j] %d\n",j,s[j],yp1[j],yp2[j]); + j=pi2_p[2]; s[j] = _mm_extract_epi8(yp128[0],6); yp1[j] = _mm_extract_epi8(yp128[0],7); yp2[j] = _mm_extract_epi8(yp128[0],8); - // printf("init: j %d, s[j] %d yp1[j] %d yp2[j] %d\n",j,s[j],yp1[j],yp2[j]); + j=pi2_p[3]; s[j] = _mm_extract_epi8(yp128[0],9); yp1[j] = _mm_extract_epi8(yp128[0],10); yp2[j] = _mm_extract_epi8(yp128[0],11); - // printf("init: j %d, s[j] %d yp1[j] %d yp2[j] %d\n",j,s[j],yp1[j],yp2[j]); + j=pi2_p[4]; s[j] = _mm_extract_epi8(yp128[0],12); yp1[j] = _mm_extract_epi8(yp128[0],13); yp2[j] = _mm_extract_epi8(yp128[0],14); - // printf("init: j %d, s[j] %d yp1[j] %d yp2[j] %d\n",j,s[j],yp1[j],yp2[j]); + j=pi2_p[5]; s[j] = _mm_extract_epi8(yp128[0],15); yp1[j] = _mm_extract_epi8(yp128[1],0); yp2[j] = _mm_extract_epi8(yp128[1],1); - // printf("init: j %d, s[j] %d yp1[j] %d yp2[j] %d\n",j,s[j],yp1[j],yp2[j]); + j=pi2_p[6]; s[j] = _mm_extract_epi8(yp128[1],2); yp1[j] = _mm_extract_epi8(yp128[1],3); yp2[j] = _mm_extract_epi8(yp128[1],4); - // printf("init: j %d, s[j] %d yp1[j] %d yp2[j] %d\n",j,s[j],yp1[j],yp2[j]); + j=pi2_p[7]; s[j] = _mm_extract_epi8(yp128[1],5); yp1[j] = _mm_extract_epi8(yp128[1],6); yp2[j] = _mm_extract_epi8(yp128[1],7); - // printf("init: j %d, s[j] %d yp1[j] %d yp2[j] %d\n",j,s[j],yp1[j],yp2[j]); + j=pi2_p[8]; s[j] = _mm_extract_epi8(yp128[1],8); yp1[j] = _mm_extract_epi8(yp128[1],9); yp2[j] = _mm_extract_epi8(yp128[1],10); - // printf("init: j %d, s[j] %d yp1[j] %d yp2[j] %d\n",j,s[j],yp1[j],yp2[j]); + j=pi2_p[9]; s[j] = _mm_extract_epi8(yp128[1],11); yp1[j] = _mm_extract_epi8(yp128[1],12); yp2[j] = _mm_extract_epi8(yp128[1],13); - // printf("init: j %d, s[j] %d yp1[j] %d yp2[j] %d\n",j,s[j],yp1[j],yp2[j]); + j=pi2_p[10]; s[j] = _mm_extract_epi8(yp128[1],14); yp1[j] = _mm_extract_epi8(yp128[1],15); yp2[j] = _mm_extract_epi8(yp128[2],0); - // printf("init: j %d, s[j] %d yp1[j] %d yp2[j] %d\n",j,s[j],yp1[j],yp2[j]); + j=pi2_p[11]; s[j] = _mm_extract_epi8(yp128[2],1); yp1[j] = _mm_extract_epi8(yp128[2],2); yp2[j] = _mm_extract_epi8(yp128[2],3); - // printf("init: j %d, s[j] %d yp1[j] %d yp2[j] %d\n",j,s[j],yp1[j],yp2[j]); + j=pi2_p[12]; s[j] = _mm_extract_epi8(yp128[2],4); yp1[j] = _mm_extract_epi8(yp128[2],5); yp2[j] = _mm_extract_epi8(yp128[2],6); - // printf("init: j %d, s[j] %d yp1[j] %d yp2[j] %d\n",j,s[j],yp1[j],yp2[j]); + j=pi2_p[13]; s[j] = _mm_extract_epi8(yp128[2],7); yp1[j] = _mm_extract_epi8(yp128[2],8); yp2[j] = _mm_extract_epi8(yp128[2],9); - // printf("init: j %d, s[j] %d yp1[j] %d yp2[j] %d\n",j,s[j],yp1[j],yp2[j]); + j=pi2_p[14]; s[j] = _mm_extract_epi8(yp128[2],10); yp1[j] = _mm_extract_epi8(yp128[2],11); yp2[j] = _mm_extract_epi8(yp128[2],12); - // printf("init: j %d, s[j] %d yp1[j] %d yp2[j] %d\n",j,s[j],yp1[j],yp2[j]); + j=pi2_p[15]; s[j] = _mm_extract_epi8(yp128[2],13); yp1[j] = _mm_extract_epi8(yp128[2],14); yp2[j] = _mm_extract_epi8(yp128[2],15); - // printf("init: j %d, s[j] %d yp1[j] %d yp2[j] %d\n",j,s[j],yp1[j],yp2[j]); + +#elif defined(__arm__) + s[j] = vgetq_lane_s8(yp128[0],0); + yp1[j] = vgetq_lane_s8(yp128[0],1); + yp2[j] = vgetq_lane_s8(yp128[0],2); + + + j=pi2_p[1]; + s[j] = vgetq_lane_s8(yp128[0],3); + yp1[j] = vgetq_lane_s8(yp128[0],4); + yp2[j] = vgetq_lane_s8(yp128[0],5); + + + j=pi2_p[2]; + s[j] = vgetq_lane_s8(yp128[0],6); + yp1[j] = vgetq_lane_s8(yp128[0],7); + yp2[j] = vgetq_lane_s8(yp128[0],8); + + + j=pi2_p[3]; + s[j] = vgetq_lane_s8(yp128[0],9); + yp1[j] = vgetq_lane_s8(yp128[0],10); + yp2[j] = vgetq_lane_s8(yp128[0],11); + + + j=pi2_p[4]; + s[j] = vgetq_lane_s8(yp128[0],12); + yp1[j] = vgetq_lane_s8(yp128[0],13); + yp2[j] = vgetq_lane_s8(yp128[0],14); + + + j=pi2_p[5]; + s[j] = vgetq_lane_s8(yp128[0],15); + yp1[j] = vgetq_lane_s8(yp128[1],0); + yp2[j] = vgetq_lane_s8(yp128[1],1); + + + j=pi2_p[6]; + s[j] = vgetq_lane_s8(yp128[1],2); + yp1[j] = vgetq_lane_s8(yp128[1],3); + yp2[j] = vgetq_lane_s8(yp128[1],4); + + + j=pi2_p[7]; + s[j] = vgetq_lane_s8(yp128[1],5); + yp1[j] = vgetq_lane_s8(yp128[1],6); + yp2[j] = vgetq_lane_s8(yp128[1],7); + + + j=pi2_p[8]; + s[j] = vgetq_lane_s8(yp128[1],8); + yp1[j] = vgetq_lane_s8(yp128[1],9); + yp2[j] = vgetq_lane_s8(yp128[1],10); + + + j=pi2_p[9]; + s[j] = vgetq_lane_s8(yp128[1],11); + yp1[j] = vgetq_lane_s8(yp128[1],12); + yp2[j] = vgetq_lane_s8(yp128[1],13); + + + j=pi2_p[10]; + s[j] = vgetq_lane_s8(yp128[1],14); + yp1[j] = vgetq_lane_s8(yp128[1],15); + yp2[j] = vgetq_lane_s8(yp128[2],0); + + + j=pi2_p[11]; + s[j] = vgetq_lane_s8(yp128[2],1); + yp1[j] = vgetq_lane_s8(yp128[2],2); + yp2[j] = vgetq_lane_s8(yp128[2],3); + + + j=pi2_p[12]; + s[j] = vgetq_lane_s8(yp128[2],4); + yp1[j] = vgetq_lane_s8(yp128[2],5); + yp2[j] = vgetq_lane_s8(yp128[2],6); + + + j=pi2_p[13]; + s[j] = vgetq_lane_s8(yp128[2],7); + yp1[j] = vgetq_lane_s8(yp128[2],8); + yp2[j] = vgetq_lane_s8(yp128[2],9); + + + j=pi2_p[14]; + s[j] = vgetq_lane_s8(yp128[2],10); + yp1[j] = vgetq_lane_s8(yp128[2],11); + yp2[j] = vgetq_lane_s8(yp128[2],12); + + + j=pi2_p[15]; + s[j] = vgetq_lane_s8(yp128[2],13); + yp1[j] = vgetq_lane_s8(yp128[2],14); + yp2[j] = vgetq_lane_s8(yp128[2],15); + +#endif yp128+=3; } @@ -918,13 +1334,14 @@ unsigned char phy_threegpplte_turbo_decoder8(short *y, while (iteration_cnt++ < max_iterations) { #ifdef DEBUG_LOGMAP - printf("\n*******************ITERATION %d (n %d), ext %p\n\n",iteration_cnt,n,ext); + printf("\n*******************ITERATION %d (n %d, n2 %d), ext %p\n\n",iteration_cnt,n,n2,ext); #endif //DEBUG_LOGMAP start_meas(intl1_stats); pi4_p=pi4tab8[iind]; for (i=0; i<(n2>>4); i++) { // steady-state portion +#if defined(__x86_64__) || defined(__i386__) tmp=_mm_insert_epi8(tmp,((llr_t*)ext)[*pi4_p++],0); tmp=_mm_insert_epi8(tmp,((llr_t*)ext)[*pi4_p++],1); tmp=_mm_insert_epi8(tmp,((llr_t*)ext)[*pi4_p++],2); @@ -941,6 +1358,24 @@ unsigned char phy_threegpplte_turbo_decoder8(short *y, tmp=_mm_insert_epi8(tmp,((llr_t*)ext)[*pi4_p++],13); tmp=_mm_insert_epi8(tmp,((llr_t*)ext)[*pi4_p++],14); ((__m128i *)systematic2)[i]=_mm_insert_epi8(tmp,((llr_t*)ext)[*pi4_p++],15); +#elif defined(__arm__) + tmp=vsetq_lane_s8(((llr_t*)ext)[*pi4_p++],tmp,0); + tmp=vsetq_lane_s8(((llr_t*)ext)[*pi4_p++],tmp,1); + tmp=vsetq_lane_s8(((llr_t*)ext)[*pi4_p++],tmp,2); + tmp=vsetq_lane_s8(((llr_t*)ext)[*pi4_p++],tmp,3); + tmp=vsetq_lane_s8(((llr_t*)ext)[*pi4_p++],tmp,4); + tmp=vsetq_lane_s8(((llr_t*)ext)[*pi4_p++],tmp,5); + tmp=vsetq_lane_s8(((llr_t*)ext)[*pi4_p++],tmp,6); + tmp=vsetq_lane_s8(((llr_t*)ext)[*pi4_p++],tmp,7); + tmp=vsetq_lane_s8(((llr_t*)ext)[*pi4_p++],tmp,8); + tmp=vsetq_lane_s8(((llr_t*)ext)[*pi4_p++],tmp,9); + tmp=vsetq_lane_s8(((llr_t*)ext)[*pi4_p++],tmp,10); + tmp=vsetq_lane_s8(((llr_t*)ext)[*pi4_p++],tmp,11); + tmp=vsetq_lane_s8(((llr_t*)ext)[*pi4_p++],tmp,12); + tmp=vsetq_lane_s8(((llr_t*)ext)[*pi4_p++],tmp,13); + tmp=vsetq_lane_s8(((llr_t*)ext)[*pi4_p++],tmp,14); + ((int8x16_t *)systematic2)[i]=vsetq_lane_s8(((llr_t*)ext)[*pi4_p++],tmp,15); +#endif } stop_meas(intl1_stats); @@ -956,6 +1391,7 @@ unsigned char phy_threegpplte_turbo_decoder8(short *y, if ((n2&0x7f) == 0) { // n2 is a multiple of 128 bits for (i=0; i<(n2>>4); i++) { +#if defined(__x86_64__) || defined(__i386__) tmp=_mm_insert_epi8(tmp,ext2[*pi5_p++],0); tmp=_mm_insert_epi8(tmp,ext2[*pi5_p++],1); tmp=_mm_insert_epi8(tmp,ext2[*pi5_p++],2); @@ -974,9 +1410,33 @@ unsigned char phy_threegpplte_turbo_decoder8(short *y, tmp=_mm_insert_epi8(tmp,ext2[*pi5_p++],15); decoded_bytes_interl[i]=(uint16_t) _mm_movemask_epi8(_mm_cmpgt_epi8(tmp,zeros)); ((__m128i *)systematic1)[i] = _mm_adds_epi8(_mm_subs_epi8(tmp,((__m128i*)ext)[i]),((__m128i *)systematic0)[i]); +#elif defined(__arm__) + tmp=vsetq_lane_s8(ext2[*pi5_p++],tmp,0); + tmp=vsetq_lane_s8(ext2[*pi5_p++],tmp,1); + tmp=vsetq_lane_s8(ext2[*pi5_p++],tmp,2); + tmp=vsetq_lane_s8(ext2[*pi5_p++],tmp,3); + tmp=vsetq_lane_s8(ext2[*pi5_p++],tmp,4); + tmp=vsetq_lane_s8(ext2[*pi5_p++],tmp,5); + tmp=vsetq_lane_s8(ext2[*pi5_p++],tmp,6); + tmp=vsetq_lane_s8(ext2[*pi5_p++],tmp,7); + tmp=vsetq_lane_s8(ext2[*pi5_p++],tmp,8); + tmp=vsetq_lane_s8(ext2[*pi5_p++],tmp,9); + tmp=vsetq_lane_s8(ext2[*pi5_p++],tmp,10); + tmp=vsetq_lane_s8(ext2[*pi5_p++],tmp,11); + tmp=vsetq_lane_s8(ext2[*pi5_p++],tmp,12); + tmp=vsetq_lane_s8(ext2[*pi5_p++],tmp,13); + tmp=vsetq_lane_s8(ext2[*pi5_p++],tmp,14); + tmp=vsetq_lane_s8(ext2[*pi5_p++],tmp,15); + uint64x2_t Mask= vpaddlq_u32(vpaddlq_u16(vpaddlq_u8(vandq_u8(vcgtq_s8(tmp,zeros), Powers)))); + vst1q_lane_u8(&((uint8_t*)&decoded_bytes[i])[0], (uint8x16_t)Mask, 0); + vst1q_lane_u8(&((uint8_t*)&decoded_bytes[i])[1], (uint8x16_t)Mask, 8); + ((int8x16_t *)systematic1)[i] = vqaddq_s8(vqsubq_s8(tmp,((int8x16_t*)ext)[i]),((int8x16_t *)systematic0)[i]); +#endif } + } else { for (i=0; i<(n2>>4); i++) { +#if defined(__x86_64__) || defined(__i386__) tmp=_mm_insert_epi8(tmp,ext2[*pi5_p++],0); tmp=_mm_insert_epi8(tmp,ext2[*pi5_p++],1); tmp=_mm_insert_epi8(tmp,ext2[*pi5_p++],2); @@ -996,7 +1456,29 @@ unsigned char phy_threegpplte_turbo_decoder8(short *y, tmp128[i] = _mm_adds_epi8(((__m128i *)ext2)[i],((__m128i *)systematic2)[i]); ((__m128i *)systematic1)[i] = _mm_adds_epi8(_mm_subs_epi8(tmp,((__m128i*)ext)[i]),((__m128i *)systematic0)[i]); - } +#elif defined(__arm__) + tmp=vsetq_lane_s8(ext2[*pi5_p++],tmp,0); + tmp=vsetq_lane_s8(ext2[*pi5_p++],tmp,1); + tmp=vsetq_lane_s8(ext2[*pi5_p++],tmp,2); + tmp=vsetq_lane_s8(ext2[*pi5_p++],tmp,3); + tmp=vsetq_lane_s8(ext2[*pi5_p++],tmp,4); + tmp=vsetq_lane_s8(ext2[*pi5_p++],tmp,5); + tmp=vsetq_lane_s8(ext2[*pi5_p++],tmp,6); + tmp=vsetq_lane_s8(ext2[*pi5_p++],tmp,7); + tmp=vsetq_lane_s8(ext2[*pi5_p++],tmp,8); + tmp=vsetq_lane_s8(ext2[*pi5_p++],tmp,9); + tmp=vsetq_lane_s8(ext2[*pi5_p++],tmp,10); + tmp=vsetq_lane_s8(ext2[*pi5_p++],tmp,11); + tmp=vsetq_lane_s8(ext2[*pi5_p++],tmp,12); + tmp=vsetq_lane_s8(ext2[*pi5_p++],tmp,13); + tmp=vsetq_lane_s8(ext2[*pi5_p++],tmp,14); + tmp=vsetq_lane_s8(ext2[*pi5_p++],tmp,15); + tmp128[i] = vqaddq_s8(((int8x16_t *)ext2)[i],((int8x16_t *)systematic2)[i]); + + ((int8x16_t *)systematic1)[i] = vqaddq_s8(vqsubq_s8(tmp,((int8x16_t*)ext)[i]),((int8x16_t *)systematic0)[i]); + +#endif + } } // Check if we decoded the block @@ -1007,6 +1489,7 @@ unsigned char phy_threegpplte_turbo_decoder8(short *y, // re-order the decoded bits in theregular order // as it is presently ordered as 16 sequential columns +#if defined(__x86_64__) || defined(__i386__) __m128i* dbytes=(__m128i*)decoded_bytes_interl; __m128i shuffle=SHUFFLE16(7,6,5,4,3,2,1,0); __m128i mask __attribute__((aligned(16))); @@ -1021,7 +1504,6 @@ unsigned char phy_threegpplte_turbo_decoder8(short *y, tmp2=_mm_and_si128(tmp,mask); tmp2=_mm_cmpeq_epi16(tmp2,mask); decoded_bytes[n_128*0+i]=(uint8_t) _mm_movemask_epi8(_mm_packs_epi16(tmp2,zeros)); - int j; for (j=1; j<16; j++) { @@ -1031,10 +1513,31 @@ unsigned char phy_threegpplte_turbo_decoder8(short *y, decoded_bytes[n_128*j +i]=(uint8_t) _mm_movemask_epi8(_mm_packs_epi16(tmp2,zeros)); } } +#elif defined(__arm__) + uint8x16_t* dbytes=(uint8x16_t*)decoded_bytes_interl; + uint16x8_t mask __attribute__((aligned(16))); + int n_128=n2>>7; + + for (i=0; i>4); i++) { +#if defined(__x86_64__) || defined(__i386__) tmp=_mm_insert_epi8(tmp, ((llr_t *)tmp128)[*pi6_p++],7); tmp=_mm_insert_epi8(tmp, ((llr_t *)tmp128)[*pi6_p++],6); tmp=_mm_insert_epi8(tmp, ((llr_t *)tmp128)[*pi6_p++],5); @@ -1053,6 +1556,27 @@ unsigned char phy_threegpplte_turbo_decoder8(short *y, tmp=_mm_insert_epi8(tmp, ((llr_t *)tmp128)[*pi6_p++],8); tmp=_mm_cmpgt_epi8(tmp,zeros); ((uint16_t *)decoded_bytes)[i]=(uint16_t)_mm_movemask_epi8(tmp); +#elif defined(__arm__) + tmp=vsetq_lane_s8(((llr_t *)tmp128)[*pi6_p++],tmp,7); + tmp=vsetq_lane_s8(((llr_t *)tmp128)[*pi6_p++],tmp,6); + tmp=vsetq_lane_s8(((llr_t *)tmp128)[*pi6_p++],tmp,5); + tmp=vsetq_lane_s8(((llr_t *)tmp128)[*pi6_p++],tmp,4); + tmp=vsetq_lane_s8(((llr_t *)tmp128)[*pi6_p++],tmp,3); + tmp=vsetq_lane_s8(((llr_t *)tmp128)[*pi6_p++],tmp,2); + tmp=vsetq_lane_s8(((llr_t *)tmp128)[*pi6_p++],tmp,1); + tmp=vsetq_lane_s8(((llr_t *)tmp128)[*pi6_p++],tmp,0); + tmp=vsetq_lane_s8(((llr_t *)tmp128)[*pi6_p++],tmp,15); + tmp=vsetq_lane_s8(((llr_t *)tmp128)[*pi6_p++],tmp,14); + tmp=vsetq_lane_s8(((llr_t *)tmp128)[*pi6_p++],tmp,13); + tmp=vsetq_lane_s8(((llr_t *)tmp128)[*pi6_p++],tmp,12); + tmp=vsetq_lane_s8(((llr_t *)tmp128)[*pi6_p++],tmp,11); + tmp=vsetq_lane_s8(((llr_t *)tmp128)[*pi6_p++],tmp,10); + tmp=vsetq_lane_s8(((llr_t *)tmp128)[*pi6_p++],tmp,9); + tmp=vsetq_lane_s8(((llr_t *)tmp128)[*pi6_p++],tmp,8); + uint64x2_t Mask= vpaddlq_u32(vpaddlq_u16(vpaddlq_u8(vandq_u8(vcgtq_s8(tmp,zeros), Powers)))); + vst1q_lane_u8(&((uint8_t*)&decoded_bytes[i])[0], (uint8x16_t)Mask, 0); + vst1q_lane_u8(&((uint8_t*)&decoded_bytes[i])[1], (uint8x16_t)Mask, 8); +#endif } } @@ -1107,17 +1631,28 @@ unsigned char phy_threegpplte_turbo_decoder8(short *y, // do a new iteration if it is not yet decoded if (iteration_cnt < max_iterations) { log_map8(systematic1,yparity1,m11,m10,alpha,beta,ext,n2,0,F,offset8_flag,alpha_stats,beta_stats,gamma_stats,ext_stats); +#if defined(__x86_64__) || defined(__i386__) __m128i* ext_128=(__m128i*) ext; __m128i* s1_128=(__m128i*) systematic1; __m128i* s0_128=(__m128i*) systematic0; +#elif defined(__arm__) + int8x16_t* ext_128=(int8x16_t*) ext; + int8x16_t* s1_128=(int8x16_t*) systematic1; + int8x16_t* s0_128=(int8x16_t*) systematic0; +#endif int myloop=n2>>4; for (i=0; i>24); + c = (uint8_t)(crc>>24); } else if (add_crc == 2) { crc = crc16(inPtr,numbits); #ifdef DEBUG_CCODE printf("ccode_lte : crc %x\n",crc); #endif // scramble with RNTI - crc ^= (((unsigned int)rnti)<<16); + crc ^= (((uint32_t)rnti)<<16); #ifdef DEBUG_CCODE printf("ccode_lte : crc %x (rnti %x)\n",crc,rnti); #endif first_bit = 2; - // c = (unsigned char)(crc>>24); - c = (unsigned char)((crc>>16)&0xff); + c = (uint8_t)((crc>>16)&0xff); } else { next_last_byte = numbits>>3; first_bit = (numbits-6)&7; @@ -182,7 +181,7 @@ ccodelte_encode (unsigned int numbits, // now code 8-bit CRC for UCI if (add_crc == 1) { - c = (unsigned char)(crc>>24); + c = (uint8_t)(crc>>24); // for (shiftbit = 0; (shiftbit<8);shiftbit++) { for (shiftbit = 7; (shiftbit>=0); shiftbit--) { @@ -209,7 +208,7 @@ ccodelte_encode (unsigned int numbits, // now code 16-bit CRC for DCI if (add_crc == 2) { - c16 = (unsigned short)(crc>>16); + c16 = (uint16_t)(crc>>16); // for (shiftbit = 0; (shiftbit<16);shiftbit++) { for (shiftbit = 15; (shiftbit>=0); shiftbit--) { diff --git a/openair1/PHY/CODING/defs.h b/openair1/PHY/CODING/defs.h index dbd2e4790d..21767a1f33 100644 --- a/openair1/PHY/CODING/defs.h +++ b/openair1/PHY/CODING/defs.h @@ -320,7 +320,7 @@ void threegpplte_turbo_encoder(uint8_t *input, uint16_t interleaver_f2); -/** \fn void ccodelte_encode(uint32_t numbits,uint8_t add_crc, uint8_t *inPtr,uint8_t *outPtr,uint16_t rnti) +/** \fn void ccodelte_encode(int32_t numbits,uint8_t add_crc, uint8_t *inPtr,uint8_t *outPtr,uint16_t rnti) \brief This function implements the LTE convolutional code of rate 1/3 with a constraint length of 7 bits. The inputs are bit packed in octets (from MSB to LSB). Trellis tail-biting is included here. @@ -331,7 +331,7 @@ void threegpplte_turbo_encoder(uint8_t *input, @param rnti RNTI for CRC scrambling */ void -ccodelte_encode (uint32_t numbits, +ccodelte_encode (int32_t numbits, uint8_t add_crc, uint8_t *inPtr, uint8_t *outPtr, diff --git a/openair1/PHY/CODING/lte_rate_matching.c b/openair1/PHY/CODING/lte_rate_matching.c index 9aa18db9bd..837665ceda 100644 --- a/openair1/PHY/CODING/lte_rate_matching.c +++ b/openair1/PHY/CODING/lte_rate_matching.c @@ -711,7 +711,7 @@ int lte_rate_matching_turbo_rx(uint32_t RTC, #endif if (Kmimo==0 || Mdlharq==0 || C==0 || Qm==0 || Nl==0) { - msg("lte_rate_matching.c: invalid parameters (Kmimo %d, Mdlharq %d, C %d, Qm %d, Nl %d\n", + printf("lte_rate_matching.c: invalid parameters (Kmimo %d, Mdlharq %d, C %d, Qm %d, Nl %d\n", Kmimo,Mdlharq,C,Qm,Nl); return(-1); } diff --git a/openair1/PHY/CODING/viterbi.c b/openair1/PHY/CODING/viterbi.c index 4b0fb0c70a..118e0ef2d8 100755 --- a/openair1/PHY/CODING/viterbi.c +++ b/openair1/PHY/CODING/viterbi.c @@ -33,9 +33,8 @@ */ -#ifndef EXPRESSMIMO_TARGET + #include "PHY/sse_intrin.h" -#endif //EXPRESSMIMO_TARGET extern unsigned char ccodedot11_table[128],ccodedot11_table_rev[128]; @@ -46,12 +45,6 @@ static unsigned char inputs[64][2048]; static unsigned short survivors[64][2048]; static short partial_metrics[64],partial_metrics_new[64]; -#ifdef __KERNEL__ -#define printf rt_printk -#endif - -#ifndef EXPRESSMIMO_TARGET - void phy_viterbi_dot11(char *y,unsigned char *decoded_bytes,unsigned short n) { @@ -191,22 +184,34 @@ void phy_generate_viterbi_tables(void) #define INIT0 0x00000080 -#define RESCALE 0x00000040 -static __m128i __attribute__((aligned(16))) TB[4*4095*8]; - -static __m128i metrics0_15,metrics16_31,metrics32_47,metrics48_63,even0_30a,even0_30b,even32_62a,even32_62b,odd1_31a,odd1_31b,odd33_63a,odd33_63b,TBeven0_30,TBeven32_62,TBodd1_31, - TBodd33_63 __attribute__((aligned(16))); - -static __m128i rescale,min_state,min_state2 __attribute__((aligned(16))); void phy_viterbi_dot11_sse2(char *y,unsigned char *decoded_bytes,unsigned short n,int offset, int traceback ) { +#if defined(__x86_64__) || defined(__i386__) + __m128i TB[4*4095*8]; // 4 __m128i per input bit (64 states, 8-bits per state = 16-way), 4095 is largest packet size in bytes, 8 bits/byte + + __m128i metrics0_15,metrics16_31,metrics32_47,metrics48_63,even0_30a,even0_30b,even32_62a,even32_62b,odd1_31a,odd1_31b,odd33_63a,odd33_63b,TBeven0_30,TBeven32_62,TBodd1_31,TBodd33_63; + + __m128i min_state,min_state2; + __m128i *m0_ptr,*m1_ptr,*TB_ptr = &TB[offset<<2]; +#elif defined(__arm__) + uint8x16x2_t TB[2*4095*8]; // 2 int8x16_t per input bit, 8 bits / byte, 4095 is largest packet size in bytes + + uint8x16_t even0_30a,even0_30b,even32_62a,even32_62b,odd1_31a,odd1_31b,odd33_63a,odd33_63b,TBeven0_30,TBeven32_62,TBodd1_31,TBodd33_63; + uint8x16x2_t metrics0_31,metrics32_63; + + uint8x16_t min_state; + + uint8x16_t *m0_ptr,*m1_ptr; + uint8x16x2_t *TB_ptr = &TB[offset<<1]; + +#endif char *in = y; unsigned char prev_state0; @@ -216,6 +221,7 @@ void phy_viterbi_dot11_sse2(char *y,unsigned char *decoded_bytes,unsigned short short position; // printf("offset %d, TB_ptr %p\n",offset,TB_ptr); +#if defined(__x86_64__) || defined(__i386__) if (offset == 0) { // set initial metrics @@ -225,129 +231,64 @@ void phy_viterbi_dot11_sse2(char *y,unsigned char *decoded_bytes,unsigned short metrics48_63 = _mm_setzero_si128(); } - rescale = _mm_cvtsi32_si128(RESCALE); +#elif defined(__arm__) + if (offset == 0) { + // set initial metrics - /* - print_bytes(metrics0_15,"metrics0_15"); - print_bytes(metrics16_31,"metrics16_31"); - print_bytes(metrics32_47,"metrics32_47"); - print_bytes(metrics48_63,"metrics48_63"); - */ + metrics0_31.val[0] = vdupq_n_u8(0); metrics0_31.val[0] = vsetq_lane_u8(INIT0,metrics0_31.val[0],0); + metrics0_31.val[1] = vdupq_n_u8(0); + metrics32_63.val[0] = vdupq_n_u8(0); + metrics32_63.val[1] = vdupq_n_u8(0); + } +#endif + for (position=offset; position<(offset+n); position++) { - //printf("%d : (%d,%d)\n",position,in[0],in[1]); // get branch metric offsets for the 64 states table_offset = (in[0]+8 + ((in[1]+8)<<4))<<6; - // printf("Table_offset = %u (in[0]=%d,in[1]=%d)\n",table_offset,in[0],in[1]); - +#if defined(__x86_64__) || defined(__i386__) m0_ptr = (__m128i *)&m0_table[table_offset]; m1_ptr = (__m128i *)&m1_table[table_offset]; - // printf("\n"); // even states even0_30a = _mm_adds_epu8(metrics0_15,m0_ptr[0]); - // print_bytes(even0_30a,"even0_30a"); - even32_62a = _mm_adds_epu8(metrics16_31,m0_ptr[1]); - // print_bytes(even32_62a,"even32_62a"); - even0_30b = _mm_adds_epu8(metrics32_47,m0_ptr[2]); - // print_bytes(even0_30b,"even0_30b"); - even32_62b = _mm_adds_epu8(metrics48_63,m0_ptr[3]); - // print_bytes(even32_62b,"even32_62b"); - - // printf("\n"); // odd states odd1_31a = _mm_adds_epu8(metrics0_15,m1_ptr[0]); - - // print_bytes(odd1_31a,"odd1_31a"); - odd33_63a = _mm_adds_epu8(metrics16_31,m1_ptr[1]); - - // print_bytes(odd33_63a,"odd33_63a"); - odd1_31b = _mm_adds_epu8(metrics32_47,m1_ptr[2]); - - // print_bytes(odd1_31b,"odd1_31b"); - odd33_63b = _mm_adds_epu8(metrics48_63,m1_ptr[3]); - - // print_bytes(odd33_63b,"odd33_63b"); - - - - // select maxima - // printf("\n"); - even0_30a = _mm_max_epu8(even0_30a,even0_30b); - - // print_bytes(even0_30a,"even0_30a"); - even32_62a = _mm_max_epu8(even32_62a,even32_62b); - - // print_bytes(even32_62a,"even32_62a"); - odd1_31a = _mm_max_epu8(odd1_31a,odd1_31b); - - // print_bytes(odd1_31a,"odd1_31a"); - odd33_63a = _mm_max_epu8(odd33_63a,odd33_63b); - // print_bytes(odd33_63a,"odd33_63a"); - - // printf("\n"); // Traceback information - TBeven0_30 = _mm_cmpeq_epi8(even0_30a,even0_30b); - - TBeven32_62 = _mm_cmpeq_epi8(even32_62a,even32_62b); - - TBodd1_31 = _mm_cmpeq_epi8(odd1_31a,odd1_31b); - - TBodd33_63 = _mm_cmpeq_epi8(odd33_63a,odd33_63b); - metrics0_15 = _mm_unpacklo_epi8(even0_30a ,odd1_31a); metrics16_31 = _mm_unpackhi_epi8(even0_30a ,odd1_31a); metrics32_47 = _mm_unpacklo_epi8(even32_62a,odd33_63a); metrics48_63 = _mm_unpackhi_epi8(even32_62a,odd33_63a); - - //print_bytes(metrics0_15,"metrics0_15"); - //print_bytes(metrics16_31,"metrics16_31"); - //print_bytes(metrics32_47,"metrics32_47"); - //print_bytes(metrics48_63,"metrics48_63"); - - - - TB_ptr[0] = _mm_unpacklo_epi8(TBeven0_30,TBodd1_31); - - // print_bytes(TB_ptr[0],"TB0_15"); - + TB_ptr[0] = _mm_unpacklo_epi8(TBeven0_30,TBodd1_31); TB_ptr[1] = _mm_unpackhi_epi8(TBeven0_30,TBodd1_31); - - // print_bytes(TB_ptr[1],"TB16_31"); - TB_ptr[2] = _mm_unpacklo_epi8(TBeven32_62,TBodd33_63); - - // print_bytes(TB_ptr[2],"TB32_47"); - TB_ptr[3] = _mm_unpackhi_epi8(TBeven32_62,TBodd33_63); - // print_bytes(TB_ptr[3],"TB48_63"); - in+=2; TB_ptr += 4; @@ -359,50 +300,92 @@ void phy_viterbi_dot11_sse2(char *y,unsigned char *decoded_bytes,unsigned short min_state =_mm_min_epu8(min_state,metrics32_47); min_state =_mm_min_epu8(min_state,metrics48_63); - // print_bytes(min_state,"min_state"); min_state2 = min_state; min_state = _mm_unpacklo_epi8(min_state,min_state); min_state2 = _mm_unpackhi_epi8(min_state2,min_state2); min_state = _mm_min_epu8(min_state,min_state2); - // print_bytes(min_state,"min_state"); + min_state2 = min_state; + min_state = _mm_unpacklo_epi8(min_state,min_state); + min_state2 = _mm_unpackhi_epi8(min_state2,min_state2); + min_state = _mm_min_epu8(min_state,min_state2); min_state2 = min_state; min_state = _mm_unpacklo_epi8(min_state,min_state); min_state2 = _mm_unpackhi_epi8(min_state2,min_state2); min_state = _mm_min_epu8(min_state,min_state2); - // print_bytes(min_state,"min_state"); - min_state2 = min_state; min_state = _mm_unpacklo_epi8(min_state,min_state); min_state2 = _mm_unpackhi_epi8(min_state2,min_state2); min_state = _mm_min_epu8(min_state,min_state2); - // print_bytes(min_state,"min_state"); - - min_state2 = min_state; - min_state = _mm_unpacklo_epi8(min_state,min_state); - min_state2 = _mm_unpackhi_epi8(min_state2,min_state2); - min_state = _mm_min_epu8(min_state,min_state2); - - // print_bytes(min_state,"min_state"); - metrics0_15 = _mm_subs_epu8(metrics0_15,min_state); metrics16_31 = _mm_subs_epu8(metrics16_31,min_state); metrics32_47 = _mm_subs_epu8(metrics32_47,min_state); metrics48_63 = _mm_subs_epu8(metrics48_63,min_state); - - /* - print_bytes(metrics0_15,"metrics0_15"); - print_bytes(metrics16_31,"metrics16_31"); - print_bytes(metrics32_47,"metrics32_47"); - print_bytes(metrics48_63,"metrics48_63"); - */ +#elif defined(__arm__) + m0_ptr = (uint8x16_t *)&m0_table[table_offset]; + m1_ptr = (uint8x16_t *)&m1_table[table_offset]; + // even states + even0_30a = vqaddq_u8(metrics0_31.val[0],m0_ptr[0]); + even32_62a = vqaddq_u8(metrics0_31.val[1],m0_ptr[1]); + even0_30b = vqaddq_u8(metrics32_63.val[0],m0_ptr[2]); + even32_62b = vqaddq_u8(metrics32_63.val[1],m0_ptr[3]); + // odd states + odd1_31a = vqaddq_u8(metrics0_31.val[0],m1_ptr[0]); + odd33_63a = vqaddq_u8(metrics0_31.val[1],m1_ptr[1]); + odd1_31b = vqaddq_u8(metrics32_63.val[0],m1_ptr[2]); + odd33_63b = vqaddq_u8(metrics32_63.val[1],m1_ptr[3]); + // select maxima + even0_30a = vmaxq_u8(even0_30a,even0_30b); + even32_62a = vmaxq_u8(even32_62a,even32_62b); + odd1_31a = vmaxq_u8(odd1_31a,odd1_31b); + odd33_63a = vmaxq_u8(odd33_63a,odd33_63b); + + // Traceback information + TBeven0_30 = vceqq_u8(even0_30a,even0_30b); + TBeven32_62 = vceqq_u8(even32_62a,even32_62b); + TBodd1_31 = vceqq_u8(odd1_31a,odd1_31b); + TBodd33_63 = vceqq_u8(odd33_63a,odd33_63b); + + metrics0_31 = vzipq_u8(even0_30a,odd1_31a); + metrics32_63 = vzipq_u8(even32_62a,odd33_63a); + + TB_ptr[0] = vzipq_u8(TBeven0_30,TBodd1_31); + TB_ptr[1] = vzipq_u8(TBeven32_62,TBodd33_63); + + in+=2; + TB_ptr += 2; + + // rescale by subtracting minimum + /**************************************************** + USE SSSE instruction phminpos!!!!!!! + ****************************************************/ + min_state =vminq_u8(metrics0_31.val[0],metrics0_31.val[1]); + min_state =vminq_u8(min_state,metrics32_63.val[0]); + min_state =vminq_u8(min_state,metrics32_63.val[1]); + // here we have 16 maximum metrics from the 64 states + uint8x8_t min_state2 = vpmin_u8(((uint8x8_t*)&min_state)[0],((uint8x8_t*)&min_state)[0]); + // now the 8 maximum in min_state2 + min_state2 = vpmin_u8(min_state2,min_state2); + // now the 4 maximum in min_state2, repeated twice + min_state2 = vpmin_u8(min_state2,min_state2); + // now the 2 maximum in min_state2, repeated 4 times + min_state2 = vpmin_u8(min_state2,min_state2); + // now the 1 maximum in min_state2, repeated 8 times + min_state = vcombine_u8(min_state2,min_state2); + // now the 1 maximum in min_state, repeated 16 times + metrics0_31.val[0] = vqsubq_u8(metrics0_31.val[0],min_state); + metrics0_31.val[1] = vqsubq_u8(metrics0_31.val[1],min_state); + metrics32_63.val[0] = vqsubq_u8(metrics32_63.val[0],min_state); + metrics32_63.val[1] = vqsubq_u8(metrics32_63.val[1],min_state); + +#endif } // Traceback @@ -429,30 +412,11 @@ void phy_viterbi_dot11_sse2(char *y,unsigned char *decoded_bytes,unsigned short } } +#if defined(__x86_64) || defined(__i386__) _mm_empty(); - +#endif } -#else //EXPRESSMIMO_TARGET - -void phy_viterbi_dot11(char *y,unsigned char *decoded_bytes,unsigned short n) -{ -} - -#endif //EXPRESSMIMO_TARGET - -/* -void print_bytes(__m128i x,char *s) { - - unsigned char *tempb = (unsigned char *)&x; - - printf("%s : %u,%u,%u,%u,%u,%u,%u,%u,%u,%u,%u,%u,%u,%u,%u,%u\n",s, - tempb[0],tempb[1],tempb[2],tempb[3],tempb[4],tempb[5],tempb[6],tempb[7], - tempb[8],tempb[9],tempb[10],tempb[11],tempb[12],tempb[13],tempb[14],tempb[15]); - -} -*/ - #ifdef TEST_DEBUG #include #include diff --git a/openair1/PHY/CODING/viterbi_lte.c b/openair1/PHY/CODING/viterbi_lte.c index 019cf0fc5c..230b933f79 100644 --- a/openair1/PHY/CODING/viterbi_lte.c +++ b/openair1/PHY/CODING/viterbi_lte.c @@ -49,21 +49,14 @@ #define msg printf #endif -#ifndef EXPRESSMIMO_TARGET + #include "PHY/sse_intrin.h" -#endif //EXPRESSMIMO_TARGET extern uint8_t ccodelte_table[128],ccodelte_table_rev[128]; -#ifdef __KERNEL__ -#define printf rt_printk -#endif - -#ifndef EXPRESSMIMO_TARGET - static int8_t m0_table[64*16*16*16] __attribute__ ((aligned(16))); static int8_t m1_table[64*16*16*16] __attribute__ ((aligned(16))); @@ -143,20 +136,33 @@ void print_shorts(__m128i x,char *s) { #endif // USER_MODE -static __m128i TB[4*8192]; - -static __m128i metrics0_15,metrics16_31,metrics32_47,metrics48_63,even0_30a,even0_30b,even32_62a,even32_62b,odd1_31a,odd1_31b,odd33_63a,odd33_63b,TBeven0_30,TBeven32_62,TBodd1_31, - TBodd33_63;// __attribute__((aligned(16))); - -static __m128i min_state,min_state2;// __attribute__((aligned(16))); void phy_viterbi_lte_sse2(int8_t *y,uint8_t *decoded_bytes,uint16_t n) { - static __m128i *m0_ptr,*m1_ptr,*TB_ptr = &TB[0]; +#if defined(__x86_64__) || defined(__i386__) + __m128i TB[4*8192]; + __m128i *m0_ptr,*m1_ptr,*TB_ptr = &TB[0]; + + __m128i metrics0_15,metrics16_31,metrics32_47,metrics48_63,even0_30a,even0_30b,even32_62a,even32_62b,odd1_31a,odd1_31b,odd33_63a,odd33_63b,TBeven0_30,TBeven32_62,TBodd1_31, + TBodd33_63; + + __m128i min_state,min_state2; + +#elif defined(__arm__) + uint8x16x2_t TB[2*8192]; // 2 int8x16_t per input bit, 8 bits / byte, 8192 is largest packet size in bits + + uint8x16_t even0_30a,even0_30b,even32_62a,even32_62b,odd1_31a,odd1_31b,odd33_63a,odd33_63b,TBeven0_30,TBeven32_62,TBodd1_31,TBodd33_63; + uint8x16x2_t metrics0_31,metrics32_63; + + uint8x16_t min_state; + + uint8x16_t *m0_ptr,*m1_ptr; + uint8x16x2_t *TB_ptr = &TB[0]; +#endif int8_t *in = y; uint8_t prev_state0,maxm,s; static uint8_t *TB_ptr2; @@ -167,140 +173,70 @@ void phy_viterbi_lte_sse2(int8_t *y,uint8_t *decoded_bytes,uint16_t n) // set initial metrics //debug_msg("Doing viterbi\n"); - metrics0_15 = _mm_setzero_si128(); +#if defined(__x86_64__) || defined(__i386__) + + metrics0_15 = _mm_setzero_si128(); metrics16_31 = _mm_setzero_si128(); metrics32_47 = _mm_setzero_si128(); metrics48_63 = _mm_setzero_si128(); -#ifndef USER_MODE - //debug_msg("Doing viterbi 2\n"); +#elif defined(__arm__) + metrics0_31.val[0] = vdupq_n_u8(0); + metrics0_31.val[1] = vdupq_n_u8(0); + metrics32_63.val[0] = vdupq_n_u8(0); + metrics32_63.val[1] = vdupq_n_u8(0); #endif - /* - print_bytes(metrics0_15,"metrics0_15"); - print_bytes(metrics16_31,"metrics16_31"); - print_bytes(metrics32_47,"metrics32_47"); - print_bytes(metrics48_63,"metrics48_63"); - */ for (iter=0; iter<2; iter++) { in = y; TB_ptr=&TB[0]; - // printf("Iteration %d\n",iter); for (position=0; position maxm) { maxm = ((uint8_t *)&metrics0_15)[s]; @@ -389,17 +366,39 @@ void phy_viterbi_lte_sse2(int8_t *y,uint8_t *decoded_bytes,uint16_t n) prev_state0 = s+48; } - // printf("Max state %d\n",prev_state0); + +#elif defined(__arm__) + for (s=0; s<16; s++) + if (((uint8_t *)&metrics0_31.val[0])[s] > maxm) { + maxm = ((uint8_t *)&metrics0_31.val[0])[s]; + prev_state0 = s; + } + + for (s=0; s<16; s++) + if (((uint8_t *)&metrics0_31.val[1])[s] > maxm) { + maxm = ((uint8_t *)&metrics0_31.val[1])[s]; + prev_state0 = s+16; + } + + for (s=0; s<16; s++) + if (((uint8_t *)&metrics32_63.val[0])[s] > maxm) { + maxm = ((uint8_t *)&metrics32_63.val[0])[s]; + prev_state0 = s+32; + } + + for (s=0; s<16; s++) + if (((uint8_t *)&metrics32_63.val[1])[s] > maxm) { + maxm = ((uint8_t *)&metrics32_63.val[1])[s]; + prev_state0 = s+48; + } +#endif + TB_ptr2 = (uint8_t *)&TB[(n-1)*4]; for (position = n-1 ; position>-1; position--) { - // if ((position%8) == 0) - // printf("%d: %x\n",1+(position>>3),decoded_bytes[1+(position>>3)]); - decoded_bytes[(position)>>3] += (prev_state0 & 0x1)<<(7-(position & 0x7)); - // printf("pos %d : ps = %d -> %d\n",position,prev_state0,TB_ptr2[prev_state0]); if (TB_ptr2[prev_state0] == 0) prev_state0 = (prev_state0 >> 1); @@ -409,32 +408,13 @@ void phy_viterbi_lte_sse2(int8_t *y,uint8_t *decoded_bytes,uint16_t n) TB_ptr2-=64; } - // printf("Max state %d\n",prev_state0); + +#if defined(__x86_64__) || defined(__i386__) _mm_empty(); _m_empty(); - +#endif } -#else //EXPRESSMIMO_TARGET - -void phy_viterbi_lte(int8_t *y,uint8_t *decoded_bytes,uint16_t n) -{ -} - -#endif //EXPRESSMIMO_TARGET - -/* -void print_bytes(__m128i x,int8_t *s) { - - uint8_t *tempb = (uint8_t *)&x; - - printf("%s : %u,%u,%u,%u,%u,%u,%u,%u,%u,%u,%u,%u,%u,%u,%u,%u\n",s, - tempb[0],tempb[1],tempb[2],tempb[3],tempb[4],tempb[5],tempb[6],tempb[7], - tempb[8],tempb[9],tempb[10],tempb[11],tempb[12],tempb[13],tempb[14],tempb[15]); - -} -*/ - #ifdef TEST_DEBUG int test_viterbi(uint8_t dabflag) { diff --git a/openair1/PHY/INIT/lte_init.c b/openair1/PHY/INIT/lte_init.c index 512b5192c0..83ed9c632c 100644 --- a/openair1/PHY/INIT/lte_init.c +++ b/openair1/PHY/INIT/lte_init.c @@ -52,6 +52,7 @@ #include "UTIL/LOG/vcd_signal_dumper.h" //#define DEBUG_PHY #include "assertions.h" +#include #ifdef EXMIMO extern openair0_rf_map rf_map[MAX_NUM_CCs]; @@ -127,6 +128,8 @@ void phy_config_sib2_eNB(uint8_t Mod_id, { LTE_DL_FRAME_PARMS *lte_frame_parms = &PHY_vars_eNB_g[Mod_id][CC_id]->lte_frame_parms; + LTE_eNB_UE_stats *eNB_UE_stats = PHY_vars_eNB_g[Mod_id][CC_id]->eNB_UE_stats; + int32_t rx_total_gain_eNB_dB = PHY_vars_eNB_g[Mod_id][CC_id]->rx_total_gain_eNB_dB; int i; LOG_D(PHY,"[eNB%d] CCid %d Frame %d: Applying radioResourceConfigCommon\n",Mod_id,CC_id,PHY_vars_eNB_g[Mod_id][CC_id]->proc[8].frame_tx); @@ -885,10 +888,8 @@ void phy_init_lte_top(LTE_DL_FRAME_PARMS *lte_frame_parms) ccodelte_init(); ccodelte_init_inv(); -#ifndef EXPRESSMIMO_TARGET phy_generate_viterbi_tables(); phy_generate_viterbi_tables_lte(); -#endif //EXPRESSMIMO_TARGET init_td8(); init_td16(); @@ -1234,7 +1235,7 @@ int phy_init_lte_eNB(PHY_VARS_eNB *phy_vars_eNB, LTE_eNB_PUSCH** const eNB_pusch_vars = phy_vars_eNB->lte_eNB_pusch_vars; LTE_eNB_SRS* const eNB_srs_vars = phy_vars_eNB->lte_eNB_srs_vars; LTE_eNB_PRACH* const eNB_prach_vars = &phy_vars_eNB->lte_eNB_prach_vars; - int i, j, eNB_id, UE_id; + int i, j, eNB_id, UE_id; phy_vars_eNB->total_dlsch_bitrate = 0; phy_vars_eNB->total_transmitted_bits = 0; diff --git a/openair1/PHY/INIT/lte_parms.c b/openair1/PHY/INIT/lte_parms.c index 08ece491fc..122ec169a1 100644 --- a/openair1/PHY/INIT/lte_parms.c +++ b/openair1/PHY/INIT/lte_parms.c @@ -33,6 +33,8 @@ int init_frame_parms(LTE_DL_FRAME_PARMS *frame_parms,uint8_t osf) uint8_t log2_osf; + LOG_I(PHY,"Initializing frame parms for N_RB_DL %d, Ncp %d, osf %d\n",frame_parms->N_RB_DL,frame_parms->Ncp,osf); + if (frame_parms->Ncp==1) { frame_parms->nb_prefix_samples0=512; frame_parms->nb_prefix_samples = 512; @@ -115,6 +117,8 @@ int init_frame_parms(LTE_DL_FRAME_PARMS *frame_parms,uint8_t osf) frame_parms->nb_prefix_samples0>>=(2-log2_osf); frame_parms->N_RBGS = 2; frame_parms->N_RBG = 13; + + break; case 15: @@ -145,6 +149,8 @@ int init_frame_parms(LTE_DL_FRAME_PARMS *frame_parms,uint8_t osf) break; } + printf("lte_parms.c: Setting N_RB_DL to %d, ofdm_symbol_size %d\n",frame_parms->N_RB_DL, frame_parms->ofdm_symbol_size); + // frame_parms->tdd_config=3; return(0); } diff --git a/openair1/PHY/LTE_ESTIMATION/defs.h b/openair1/PHY/LTE_ESTIMATION/defs.h index 1a747c1cc8..54ba597699 100644 --- a/openair1/PHY/LTE_ESTIMATION/defs.h +++ b/openair1/PHY/LTE_ESTIMATION/defs.h @@ -162,11 +162,13 @@ We estimate the frequency offset by calculating the phase difference between cha \param frame_parms pointer to LTE frame parameters \param l symbol within slot \param freq_offset pointer to the returned frequency offset +\param reset When non-zer it resets the filter to the initial value (set whenever tuning has been changed or for a one-shot estimate) */ int lte_est_freq_offset(int **dl_ch_estimates, LTE_DL_FRAME_PARMS *frame_parms, int l, - int* freq_offset); + int* freq_offset, + int reset); int lte_mbsfn_est_freq_offset(int **dl_ch_estimates, LTE_DL_FRAME_PARMS *frame_parms, diff --git a/openair1/PHY/LTE_ESTIMATION/filt96_32.h b/openair1/PHY/LTE_ESTIMATION/filt96_32.h index 36eac7ea30..c92be225bd 100644 --- a/openair1/PHY/LTE_ESTIMATION/filt96_32.h +++ b/openair1/PHY/LTE_ESTIMATION/filt96_32.h @@ -26,187 +26,187 @@ Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE *******************************************************************************/ -short filt24_0[24] = { +short filt24_0[24] __attribute__((aligned(16))) ={ 2730,5461,8192,10922,13653,16384,13653,10922,8192,5461,2730,0,0,0,0,0,0,0,0,0,0,0,0,0 }; -short filt24_0_dcl[24] = { +short filt24_0_dcl[24] __attribute__((aligned(16))) ={ 2341,4681,7022,9362,11703,16384,13653,10922,8192,5461,2730,0,0,0,0,0,0,0,0,0,0,0,0,0 }; -short filt24_0_dcr[24] = { +short filt24_0_dcr[24] __attribute__((aligned(16))) ={ 2730,5461,8192,10922,13653,16384,14043,11703,9362,7022,4681,0,0,0,0,0,0,0,0,0,0,0,0 }; -short filt24_1[24] = { +short filt24_1[24] __attribute__((aligned(16))) ={ 0,2730,5461,8192,10922,13653,16384,13653,10922,8192,5461,2730,0,0,0,0,0,0,0,0,0,0,0,0 }; -short filt24_1_dcl[24] = { +short filt24_1_dcl[24] __attribute__((aligned(16))) ={ 0,4681,7022,9362,11703,14043,16384,13653,10922,8192,5461,2730,0,0,0,0,0,0,0,0,0,0,0,0 }; -short filt24_1_dcr[24] = { +short filt24_1_dcr[24] __attribute__((aligned(16))) ={ 0,2730,5461,8192,10922,13653,16384,14043,11703,9362,7022,4681,0,0,0,0,0,0,0,0,0,0,0,0 }; -short filt24_2[24] = { +short filt24_2[24] __attribute__((aligned(16))) ={ 0,0,2730,5461,8192,10922,13653,16384,13653,10922,8192,5461,2730,0,0,0,0,0,0,0,0,0,0,0 }; -short filt24_2_dcl[24] = { +short filt24_2_dcl[24] __attribute__((aligned(16))) ={ 0,0,2341,4681,7022,9362, 11703,16384,13653,10922,8192,5461,2730,0,0,0,0,0,0,0,0,0,0,0 }; -short filt24_2_dcr[24] = { +short filt24_2_dcr[24] __attribute__((aligned(16))) ={ 0,0,2730,5461,8192,10922,13653,16384,14043,11703,9362,4681,2341,0,0,0,0,0,0,0,0,0,0,0 }; // X X X Y | X X X X | X Y X X -short filt24_3[24] = { +short filt24_3[24] __attribute__((aligned(16))) ={ 0,0,0,2730,5461,8192,10922,13653,16384,13653,10922,8192,5461,2730,0,0,0,0,0,0,0,0,0,0 }; -short filt24_3_dcl[24] = { +short filt24_3_dcl[24] __attribute__((aligned(16))) ={ 0,0,0,2341,4681,7022,9362,14043,16384,13653,10922,8192,5461,2730,0,0,0,0,0,0,0,0,0,0 }; // X X X Y | X X DC X X | X Y X X -short filt24_3_dcr[24] = { +short filt24_3_dcr[24] __attribute__((aligned(16))) ={ 0,0,0,2730,5461,8192,10922,13653,16384,14043,11703,7022,4681,2341,0,0,0,0,0,0,0,0,0,0 }; -short filt24_4[24] = { +short filt24_4[24] __attribute__((aligned(16))) ={ 0,0,0,0,2730,5461,8192,10922,13653,16384,13653,10922,8192,5461,2730,0,0,0,0,0,0,0,0,0 }; -short filt24_4_dcl[24] = { +short filt24_4_dcl[24] __attribute__((aligned(16))) ={ 0,0,0,0,2341,7022,9362,11703,14043,16384,13653,10922,8192,5461,2730,0,0,0,0,0,0,0,0,0 }; -short filt24_4_dcr[24] = { +short filt24_4_dcr[24] __attribute__((aligned(16))) ={ 0,0,0,0,2730,5461,8192,10922,13653,16384,14043,11703,7022,4681,2341,0,0,0,0,0,0,0,0,0 }; -short filt24_5[24] = { +short filt24_5[24] __attribute__((aligned(16))) ={ 0,0,0,0,0,2730,5461,8192,10922,13653,16384,13653,10922,8192,5461,2730,0,0,0,0,0,0,0,0 }; // X X X Y | X X DC X X | X Y X X -short filt24_5_dcl[24] = { +short filt24_5_dcl[24] __attribute__((aligned(16))) ={ 0,0,0,0,0,2341,4681,9362,11703,14043,16384,13653,10922,8192,5461,2730,0,0,0,0,0,0,0,0 }; -short filt24_5_dcr[24] = { +short filt24_5_dcr[24] __attribute__((aligned(16))) ={ 0,0,0,0,0,2730,5461,8192,10922,13653,16384,11703,9362,7022,4681,2730,0,0,0,0,0,0,0,0 }; -short filt24_6[24] = { +short filt24_6[24] __attribute__((aligned(16))) ={ 0,0,0,0,0,0,2730,5461,8192,10922,13653,16384,13653,10922,8192,5461,2730,0,0,0,0,0,0,0 }; -short filt24_6_dcl[24] = { +short filt24_6_dcl[24] __attribute__((aligned(16))) ={ 0,0,0,0,0,0,4681,7022,9362,11703,14043,16384,13653,10922,8192,5461,2730,0,0,0,0,0,0,0 }; -short filt24_6_dcr[24] = { +short filt24_6_dcr[24] __attribute__((aligned(16))) ={ 0,0,0,0,0,0,2730,5461,8192,10922,13653,16384,14043,11703,9362,7022,4681,0,0,0,0,0,0,0 }; -short filt24_7[24] = { +short filt24_7[24] __attribute__((aligned(16))) ={ 0,0,0,0,0,0,0,2730,5461,8192,10922,13653,16384,13653,10922,8192,5461,2730,0,0,0,0,0,0 }; -short filt24_7_dcl[24] = { +short filt24_7_dcl[24] __attribute__((aligned(16))) ={ 0,0,0,0,0,0,0,4681,7022,9362,11703,14043,16384,13653,10922,8192,5461,2730,0,0,0,0,0,0 }; -short filt24_7_dcr[24] = { +short filt24_7_dcr[24] __attribute__((aligned(16))) ={ 0,0,0,0,0,0,0,2730,5461,8192,10922,13653,16384,14043,11703,9362,7022,4681,0,0,0,0,0,0 }; -short filt24_0l[24] = { +short filt24_0l[24] __attribute__((aligned(16))) ={ 30037,27306,24576,21845,19114,16384,13653,10922,8192,5461,2730,0,0,0,0,0,0,0,0,0,0,0,0,0 }; -short filt24_1l[24] = { +short filt24_1l[24] __attribute__((aligned(16))) ={ 0,30037,27306,24576,21845,19114,16384,13653,10922,8192,5461,2730,0,0,0,0,0,0,0,0,0,0,0,0 }; -short filt24_2l[24] = { +short filt24_2l[24] __attribute__((aligned(16))) ={ 0,0,30037,27306,24576,21845,19114,16384,13653,10922,8192,5461,2730,0,0,0,0,0,0,0,0,0,0,0 }; -short filt24_3l[24] = { +short filt24_3l[24] __attribute__((aligned(16))) ={ //0,0,0,30037,27306,24576,21845,19114,16384,13653,10922,8192,5461,2730,0,0,0,0,0,0,0,0,0,0}; 0,0,0,0,0,24576,21845,19114,16384,13653,10922,8192,5461,2730,0,0,0,0,0,0,0,0,0,0 }; -short filt24_4l[24] = { +short filt24_4l[24] __attribute__((aligned(16))) ={ 0,0,0,0,30037,27306,24576,21845,19114,16384,13653,10922,8192,5461,2730,0,0,0,0,0,0,0,0,0 }; -short filt24_5l[24] = { +short filt24_5l[24] __attribute__((aligned(16))) ={ 0,0,0,0,0,30037,27306,24576,21845,19114,16384,13653,10922,8192,5461,2730,0,0,0,0,0,0,0,0 }; -short filt24_6l[24] = { +short filt24_6l[24] __attribute__((aligned(16))) ={ 0,0,0,0,0,0,30037,27306,24576,21845,19114,16384,13653,10922,8192,5461,2730,0,0,0,0,0,0,0 }; -short filt24_7l[24] = { +short filt24_7l[24] __attribute__((aligned(16))) ={ 0,0,0,0,0,0,0,30037,27306,24576,21845,19114,16384,13653,10922,8192,5461,2730,0,0,0,0,0,0 }; -short filt24_0l2[24] = { +short filt24_0l2[24] __attribute__((aligned(16))) ={ 2730,5461,8192,10922,13653,16384,13653,10922,8192,5461,2730,0,0,0,0,0,0,0,0,0,0,0,0,0 }; -short filt24_1l2[24] = { +short filt24_1l2[24] __attribute__((aligned(16))) ={ 0,2730,5461,8192,10922,13653,16384,13653,10922,8192,5461,2730,0,0,0,0,0,0,0,0,0,0,0,0 }; -short filt24_2l2[24] = { +short filt24_2l2[24] __attribute__((aligned(16))) ={ -2730,0,2730,5461,8192,10922,13653,16384,13653,10922,8192,5461,2730,0,0,0,0,0,0,0,0,0,0,0 }; -short filt24_3l2[24] = { +short filt24_3l2[24] __attribute__((aligned(16))) ={ -5461,-2730,0,2730,5461,8192,10922,13653,16384,13653,10922,8192,5461,2730,0,0,0,0,0,0,0,0,0,0 }; -short filt24_4l2[24] = { +short filt24_4l2[24] __attribute__((aligned(16))) ={ -8192,-5461,-2730,0,2730,5461,8192,10922,13653,16384,13653,10922,8192,5461,2730,0,0,0,0,0,0,0,0,0 }; -short filt24_5l2[24] = { +short filt24_5l2[24] __attribute__((aligned(16))) ={ 0,-8192,-5461,-2730,0,2730,5461,8192,10922,13653,16384,13653,10922,8192,5461,2730,0,0,0,0,0,0,0,0 }; -short filt24_6l2[24] = { +short filt24_6l2[24] __attribute__((aligned(16))) ={ -13653,-10922,-8192,-5461,-2730,0,2730,5461,8192,10922,13653,16384,13653,10922,8192,5461,2730,0,0,0,0,0,0,0 }; -short filt24_7l2[24] = { +short filt24_7l2[24] __attribute__((aligned(16))) ={ 0,-13653,-10922,-8192,-5461,-2730,0,2730,5461,8192,10922,13653,16384,13653,10922,8192,5461,2730,0,0,0,0,0,0 }; -short filt24_0r[24] = { +short filt24_0r[24] __attribute__((aligned(16))) ={ 2730,5461,8192,10922,13653,16384,19114,21845,24576,27306,30037,0,0,0,0,0,0,0,0,0,0,0,0,0 }; -short filt24_1r[24] = { +short filt24_1r[24] __attribute__((aligned(16))) ={ 0,2730,5461,8192,10922,13653,16384,19114,21845,24576,27306,30037,0,0,0,0,0,0,0,0,0,0,0,0 }; -short filt24_2r[24] = { +short filt24_2r[24] __attribute__((aligned(16))) ={ 0,0,2730,5461,8192,10922,13653,16384,19114,21845,24576,27306,30037,0,0,0,0,0,0,0,0,0,0,0 }; -short filt24_3r[24] = { +short filt24_3r[24] __attribute__((aligned(16))) ={ 0,0,0,2730,5461,8192,10922,13653,16384,19114,21845,24576,27306,30037,0,0,0,0,0,0,0,0,0,0 }; -short filt24_4r[24] = { +short filt24_4r[24] __attribute__((aligned(16))) ={ 0,0,0,0,2730,5461,8192,10922,13653,16384,19114,21845,24576,27306,30037,0,0,0,0,0,0,0,0,0 }; -short filt24_5r[24] = { +short filt24_5r[24] __attribute__((aligned(16))) ={ 0,0,0,0,0,2730,5461,8192,10922,13653,16384,19114,21845,24576,27306,30037,0,0,0,0,0,0,0,0 }; -short filt24_6r[24] = { +short filt24_6r[24] __attribute__((aligned(16))) ={ 0,0,0,0,0,0,2730,5461,8192,10922,13653,16384,19114,21845,24576,27306,30037,0,0,0,0,0,0,0 }; -short filt24_7r[24] = { +short filt24_7r[24] __attribute__((aligned(16))) ={ 0,0,0,0,0,0,0,2730,5461,8192,10922,13653,16384,19114,21845,24576,27306,30037,0,0,0,0,0,0 }; -short filt24_0r2[24] = { /****/ +short filt24_0r2[24] __attribute__((aligned(16))) ={ /****/ 2730,5461,8192,10922,13653,16384,13653,10922,8192,5461,2730,0,-2730,-5461,-8192,-10922,-13653,0,0,0,0,0,0,0 }; -short filt24_1r2[24] = { +short filt24_1r2[24] __attribute__((aligned(16))) ={ 0,2730,5461,8192,10922,13653,16384,13653,10922,8192,5461,2730,0,-2730,-5461,-8192,-10922,-13653,0,0,0,0,0,0 }; -short filt24_2r2[24] = { +short filt24_2r2[24] __attribute__((aligned(16))) ={ 0,0,2730,5461,8192,10922,13653,16384,13653,10922,8192,5461,2730,0,-2730,-5461,-8192,-10922,-13653,0,0,0,0,0 }; -short filt24_3r2[24] = { +short filt24_3r2[24] __attribute__((aligned(16))) ={ 0,0,0,2730,5461,8192,10922,13653,16384,13653,10922,8192,5461,2730,0,-2730,-5461,-8192,-10922,-13653,0,0,0,0 }; -short filt24_4r2[24] = { +short filt24_4r2[24] __attribute__((aligned(16))) ={ 0,0,0,0,2730,5461,8192,10922,13653,16384,13653,10922,8192,5461,2730,0,-2730,-5461,-8192,-10922,-13653,0,0,0 }; -short filt24_5r2[24] = { +short filt24_5r2[24] __attribute__((aligned(16))) ={ 0,0,0,0,0,2730,5461,8192,10922,13653,16384,13653,10922,8192,5461,2730,0,-2730,-5461,-8192,-10922,-13653,0,0 }; -short filt24_6r2[24] = { +short filt24_6r2[24] __attribute__((aligned(16))) ={ 0,0,0,0,0,0,2730,5461,8192,10922,13653,16384,13653,10922,8192,5461,2730,0,-2730,-5461,-8192,-10922,-13653,0 }; -short filt24_7r2[24] = { +short filt24_7r2[24] __attribute__((aligned(16))) ={ 0,0,0,0,0,0,0,2730,5461,8192,10922,13653,16384,13653,10922,8192,5461,2730,0,-2730,-5461,-8192,-10922,-13653 }; diff --git a/openair1/PHY/LTE_ESTIMATION/freq_equalization.c b/openair1/PHY/LTE_ESTIMATION/freq_equalization.c index 6e71e23ec9..595d1e7a48 100755 --- a/openair1/PHY/LTE_ESTIMATION/freq_equalization.c +++ b/openair1/PHY/LTE_ESTIMATION/freq_equalization.c @@ -299,11 +299,17 @@ void freq_equalization(LTE_DL_FRAME_PARMS *frame_parms, { uint16_t re; int16_t amp; +#if defined(__x86_64__) || defined(__i386__) __m128i *ul_ch_mag128,*ul_ch_magb128,*rxdataF_comp128; - rxdataF_comp128 = (__m128i *)&rxdataF_comp[0][symbol*frame_parms->N_RB_DL*12]; ul_ch_mag128 = (__m128i *)&ul_ch_mag[0][symbol*frame_parms->N_RB_DL*12]; ul_ch_magb128 = (__m128i *)&ul_ch_magb[0][symbol*frame_parms->N_RB_DL*12]; +#elif defined(__arm__) + int16x8_t *ul_ch_mag128,*ul_ch_magb128,*rxdataF_comp128; + rxdataF_comp128 = (int16x8_t*)&rxdataF_comp[0][symbol*frame_parms->N_RB_DL*12]; + ul_ch_mag128 = (int16x8_t*)&ul_ch_mag[0][symbol*frame_parms->N_RB_DL*12]; + ul_ch_magb128 = (int16x8_t*)&ul_ch_magb[0][symbol*frame_parms->N_RB_DL*12]; +#endif for (re=0; re<(Msc_RS>>2); re++) { @@ -313,15 +319,25 @@ void freq_equalization(LTE_DL_FRAME_PARMS *frame_parms, amp=255; // printf("freq_eq: symbol %d re %d => %d,%d,%d, (%d) (%d,%d) => ",symbol,re,*((int16_t*)(&ul_ch_mag128[re])),amp,inv_ch[8*amp],*((int16_t*)(&ul_ch_mag128[re]))*inv_ch[8*amp],*(int16_t*)&(rxdataF_comp128[re]),*(1+(int16_t*)&(rxdataF_comp128[re]))); +#if defined(__x86_64__) || defined(__i386__) rxdataF_comp128[re] = _mm_mullo_epi16(rxdataF_comp128[re],*((__m128i *)&inv_ch[8*amp])); if (Qm==4) - ul_ch_mag128[re] = _mm_set1_epi16(324); // this is 512*2/sqrt(10) + ul_ch_mag128[re] = _mm_set1_epi16(324); // this is 512*2/sqrt(10) else { - ul_ch_mag128[re] = _mm_set1_epi16(316); // this is 512*4/sqrt(42) + ul_ch_mag128[re] = _mm_set1_epi16(316); // this is 512*4/sqrt(42) ul_ch_magb128[re] = _mm_set1_epi16(158); // this is 512*2/sqrt(42) } +#elif defined(__arm__) + rxdataF_comp128[re] = vmulq_s16(rxdataF_comp128[re],*((int16x8_t *)&inv_ch[8*amp])); + if (Qm==4) + ul_ch_mag128[re] = vdupq_n_s16(324); // this is 512*2/sqrt(10) + else { + ul_ch_mag128[re] = vdupq_n_s16(316); // this is 512*4/sqrt(42) + ul_ch_magb128[re] = vdupq_n_s16(158); // this is 512*2/sqrt(42) + } +#endif // printf("(%d,%d)\n",*(int16_t*)&(rxdataF_comp128[re]),*(1+(int16_t*)&(rxdataF_comp128[re]))); } diff --git a/openair1/PHY/LTE_ESTIMATION/lte_dl_bf_channel_estimation.c b/openair1/PHY/LTE_ESTIMATION/lte_dl_bf_channel_estimation.c index faf366c520..5fecc9c34f 100644 --- a/openair1/PHY/LTE_ESTIMATION/lte_dl_bf_channel_estimation.c +++ b/openair1/PHY/LTE_ESTIMATION/lte_dl_bf_channel_estimation.c @@ -52,7 +52,7 @@ int lte_dl_bf_channel_estimation(PHY_VARS_UE *phy_vars_ue, short ch[2], *pil, *rxF, *dl_bf_ch, *dl_bf_ch_prev; short *fl, *fm, *fr, *fl_dc, *fm_dc, *fr_dc, *f1, *f2l, *f2r; - unsigned int *rb_alloc; + unsigned int *rballoc; int **rxdataF; int32_t **dl_bf_ch_estimates; int uespec_pilot[300]; @@ -64,7 +64,11 @@ int lte_dl_bf_channel_estimation(PHY_VARS_UE *phy_vars_ue, harq_pid = dlsch_ue[0]->current_harq_pid; dlsch0_harq = dlsch_ue[0]->harq_processes[harq_pid]; - rb_alloc = dlsch0_harq->rb_alloc; + if (((frame_parms->Ncp == NORMAL) && (symbol>=7)) || + ((frame_parms->Ncp == EXTENDED) && (symbol>=6))) + rballoc = dlsch0_harq->rb_alloc_odd; + else + rballoc = dlsch0_harq->rb_alloc_even; rxdataF = phy_vars_ue->lte_ue_common_vars.rxdataF; @@ -205,13 +209,13 @@ int lte_dl_bf_channel_estimation(PHY_VARS_UE *phy_vars_ue, for (rb=0; rbN_RB_DL; rb++) { if (rb < 32) - rb_alloc_ind = (rb_alloc[0]>>rb) & 1; + rb_alloc_ind = (rballoc[0]>>rb) & 1; else if (rb < 64) - rb_alloc_ind = (rb_alloc[1]>>(rb-32)) & 1; + rb_alloc_ind = (rballoc[1]>>(rb-32)) & 1; else if (rb < 96) - rb_alloc_ind = (rb_alloc[2]>>(rb-64)) & 1; + rb_alloc_ind = (rballoc[2]>>(rb-64)) & 1; else if (rb < 100) - rb_alloc_ind = (rb_alloc[3]>>(rb-96)) & 1; + rb_alloc_ind = (rballoc[3]>>(rb-96)) & 1; else rb_alloc_ind = 0; @@ -256,13 +260,13 @@ int lte_dl_bf_channel_estimation(PHY_VARS_UE *phy_vars_ue, skip_half=0; if (rb < 32) - rb_alloc_ind = (rb_alloc[0]>>rb) & 1; + rb_alloc_ind = (rballoc[0]>>rb) & 1; else if (rb < 64) - rb_alloc_ind = (rb_alloc[1]>>(rb-32)) & 1; + rb_alloc_ind = (rballoc[1]>>(rb-32)) & 1; else if (rb < 96) - rb_alloc_ind = (rb_alloc[2]>>(rb-64)) & 1; + rb_alloc_ind = (rballoc[2]>>(rb-64)) & 1; else if (rb < 100) - rb_alloc_ind = (rb_alloc[3]>>(rb-96)) & 1; + rb_alloc_ind = (rballoc[3]>>(rb-96)) & 1; else rb_alloc_ind = 0; @@ -403,13 +407,13 @@ int lte_dl_bf_channel_estimation(PHY_VARS_UE *phy_vars_ue, // Do middle RB (around DC) if (rb < 32) - rb_alloc_ind = (rb_alloc[0]>>rb) & 1; + rb_alloc_ind = (rballoc[0]>>rb) & 1; else if (rb < 64) - rb_alloc_ind = (rb_alloc[1]>>(rb-32)) & 1; + rb_alloc_ind = (rballoc[1]>>(rb-32)) & 1; else if (rb < 96) - rb_alloc_ind = (rb_alloc[2]>>(rb-64)) & 1; + rb_alloc_ind = (rballoc[2]>>(rb-64)) & 1; else if (rb < 100) - rb_alloc_ind = (rb_alloc[3]>>(rb-96)) & 1; + rb_alloc_ind = (rballoc[3]>>(rb-96)) & 1; else rb_alloc_ind = 0; @@ -493,13 +497,13 @@ int lte_dl_bf_channel_estimation(PHY_VARS_UE *phy_vars_ue, skip_half=0; if (rb < 32) - rb_alloc_ind = (rb_alloc[0]>>rb) & 1; + rb_alloc_ind = (rballoc[0]>>rb) & 1; else if (rb < 64) - rb_alloc_ind = (rb_alloc[1]>>(rb-32)) & 1; + rb_alloc_ind = (rballoc[1]>>(rb-32)) & 1; else if (rb < 96) - rb_alloc_ind = (rb_alloc[2]>>(rb-64)) & 1; + rb_alloc_ind = (rballoc[2]>>(rb-64)) & 1; else if (rb < 100) - rb_alloc_ind = (rb_alloc[3]>>(rb-96)) & 1; + rb_alloc_ind = (rballoc[3]>>(rb-96)) & 1; else rb_alloc_ind = 0; diff --git a/openair1/PHY/LTE_ESTIMATION/lte_dl_channel_estimation.c b/openair1/PHY/LTE_ESTIMATION/lte_dl_channel_estimation.c index 318d499ccd..56a097bfda 100644 --- a/openair1/PHY/LTE_ESTIMATION/lte_dl_channel_estimation.c +++ b/openair1/PHY/LTE_ESTIMATION/lte_dl_channel_estimation.c @@ -46,7 +46,7 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue, unsigned char nu,aarx; unsigned short k; unsigned int rb,pilot_cnt; - short ch[2],*pil,*rxF,*dl_ch,*dl_ch_prev,*f,*f2,*fl,*f2l2,*fr,*f2r2,*f2_dc,*f_dc; + int16_t ch[2],*pil,*rxF,*dl_ch,*dl_ch_prev,*f,*f2,*fl,*f2l2,*fr,*f2r2,*f2_dc,*f_dc; int ch_offset,symbol_offset; // unsigned int n; // int i; @@ -189,14 +189,13 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue, for (aarx=0; aarxlte_frame_parms.nb_antennas_rx; aarx++) { - pil = (short *)&pilot[p][0]; - rxF = (short *)&rxdataF[aarx][((symbol_offset+k+phy_vars_ue->lte_frame_parms.first_carrier_offset))]; - dl_ch = (short *)&dl_ch_estimates[(p<<1)+aarx][ch_offset]; + pil = (int16_t *)&pilot[p][0]; + rxF = (int16_t *)&rxdataF[aarx][((symbol_offset+k+phy_vars_ue->lte_frame_parms.first_carrier_offset))]; + dl_ch = (int16_t *)&dl_ch_estimates[(p<<1)+aarx][ch_offset]; // if (eNb_id==0) memset(dl_ch,0,4*(phy_vars_ue->lte_frame_parms.ofdm_symbol_size)); - if (phy_vars_ue->high_speed_flag==0) // multiply previous channel estimate by ch_est_alpha multadd_complex_vector_real_scalar(dl_ch-(phy_vars_ue->lte_frame_parms.ofdm_symbol_size<<1), phy_vars_ue->ch_est_alpha,dl_ch-(phy_vars_ue->lte_frame_parms.ofdm_symbol_size<<1), @@ -209,8 +208,8 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue, //First half of pilots // Treat first 2 pilots specially (left edge) - ch[0] = (short)(((int)pil[0]*rxF[0] - (int)pil[1]*rxF[1])>>15); - ch[1] = (short)(((int)pil[0]*rxF[1] + (int)pil[1]*rxF[0])>>15); + ch[0] = (int16_t)(((int32_t)pil[0]*rxF[0] - (int32_t)pil[1]*rxF[1])>>15); + ch[1] = (int16_t)(((int32_t)pil[0]*rxF[1] + (int32_t)pil[1]*rxF[0])>>15); // printf("pilot 0 : rxF - > (%d,%d) ch -> (%d,%d), pil -> (%d,%d) \n",rxF[0],rxF[1],ch[0],ch[1],pil[0],pil[1]); multadd_real_vector_complex_scalar(fl, ch, @@ -220,8 +219,8 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue, rxF+=12; dl_ch+=8; - ch[0] = (short)(((int)pil[0]*rxF[0] - (int)pil[1]*rxF[1])>>15); - ch[1] = (short)(((int)pil[0]*rxF[1] + (int)pil[1]*rxF[0])>>15); + ch[0] = (int16_t)(((int32_t)pil[0]*rxF[0] - (int32_t)pil[1]*rxF[1])>>15); + ch[1] = (int16_t)(((int32_t)pil[0]*rxF[1] + (int32_t)pil[1]*rxF[0])>>15); // printf("pilot 1 : rxF - > (%d,%d) ch -> (%d,%d), pil -> (%d,%d) \n",rxF[0],rxF[1],ch[0],ch[1],pil[0],pil[1]); multadd_real_vector_complex_scalar(f2l2, ch, @@ -233,15 +232,15 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue, for (pilot_cnt=2; pilot_cnt<((phy_vars_ue->lte_frame_parms.N_RB_DL)-1); pilot_cnt+=2) { - // printf("%d\n",dl_ch-(short *)&dl_ch_estimates[(p<<1)+aarx][ch_offset]); + // printf("%d\n",dl_ch-(int16_t *)&dl_ch_estimates[(p<<1)+aarx][ch_offset]); // printf("pilot[%d][%d] (%d,%d)\n",p,pilot_cnt,pil[0],pil[1]); // printf("rx[%d] -> (%d,%d)\n", k, rxF[0], rxF[1]); - ch[0] = (short)(((int)pil[0]*rxF[0] - (int)pil[1]*rxF[1])>>15); //Re - ch[1] = (short)(((int)pil[0]*rxF[1] + (int)pil[1]*rxF[0])>>15); //Im - // printf("**rb %d %d\n",rb,dl_ch-(short *)&dl_ch_estimates[(p<<1)+aarx][ch_offset]); + ch[0] = (int16_t)(((int32_t)pil[0]*rxF[0] - (int32_t)pil[1]*rxF[1])>>15); //Re + ch[1] = (int16_t)(((int32_t)pil[0]*rxF[1] + (int32_t)pil[1]*rxF[0])>>15); //Im + // printf("**rb %d %d\n",rb,dl_ch-(int16_t *)&dl_ch_estimates[(p<<1)+aarx][ch_offset]); multadd_real_vector_complex_scalar(f, ch, dl_ch, @@ -256,9 +255,9 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue, // printf("rx[%d] -> (%d,%d)\n", k+6, rxF[0], rxF[1]); - ch[0] = (short)(((int)pil[0]*rxF[0] - (int)pil[1]*rxF[1])>>15); - ch[1] = (short)(((int)pil[0]*rxF[1] + (int)pil[1]*rxF[0])>>15); - // printf("**rb %d %d\n",rb,dl_ch-(short *)&dl_ch_estimates[(p<<1)+aarx][ch_offset]); + ch[0] = (int16_t)(((int32_t)pil[0]*rxF[0] - (int32_t)pil[1]*rxF[1])>>15); + ch[1] = (int16_t)(((int32_t)pil[0]*rxF[1] + (int32_t)pil[1]*rxF[0])>>15); + // printf("**rb %d %d\n",rb,dl_ch-(int16_t *)&dl_ch_estimates[(p<<1)+aarx][ch_offset]); multadd_real_vector_complex_scalar(f2, ch, dl_ch, @@ -277,17 +276,17 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue, if (k > 6) k -=6; - rxF = (short *)&rxdataF[aarx][((symbol_offset+1+k))]; + rxF = (int16_t *)&rxdataF[aarx][((symbol_offset+1+k))]; for (pilot_cnt=0; pilot_cnt<((phy_vars_ue->lte_frame_parms.N_RB_DL)-3); pilot_cnt+=2) { // printf("pilot[%d][%d] (%d,%d)\n",p,pilot_cnt,pil[0],pil[1]); // printf("rx[%d] -> (%d,%d)\n", k+6, rxF[0], rxF[1]); - ch[0] = (short)(((int)pil[0]*rxF[0] - (int)pil[1]*rxF[1])>>15); - ch[1] = (short)(((int)pil[0]*rxF[1] + (int)pil[1]*rxF[0])>>15); + ch[0] = (int16_t)(((int32_t)pil[0]*rxF[0] - (int32_t)pil[1]*rxF[1])>>15); + ch[1] = (int16_t)(((int32_t)pil[0]*rxF[1] + (int32_t)pil[1]*rxF[0])>>15); - // printf("**rb %d %d\n",rb,dl_ch-(short *)&dl_ch_estimates[(p<<1)+aarx][ch_offset]); + // printf("**rb %d %d\n",rb,dl_ch-(int16_t *)&dl_ch_estimates[(p<<1)+aarx][ch_offset]); multadd_real_vector_complex_scalar(f, ch, dl_ch, @@ -296,10 +295,10 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue, rxF+=12; dl_ch+=8; - ch[0] = (short)(((int)pil[0]*rxF[0] - (int)pil[1]*rxF[1])>>15); - ch[1] = (short)(((int)pil[0]*rxF[1] + (int)pil[1]*rxF[0])>>15); + ch[0] = (int16_t)(((int32_t)pil[0]*rxF[0] - (int32_t)pil[1]*rxF[1])>>15); + ch[1] = (int16_t)(((int32_t)pil[0]*rxF[1] + (int32_t)pil[1]*rxF[0])>>15); - // printf("**rb %d %d\n",rb,dl_ch-(short *)&dl_ch_estimates[(p<<1)+aarx][ch_offset]); + // printf("**rb %d %d\n",rb,dl_ch-(int16_T *)&dl_ch_estimates[(p<<1)+aarx][ch_offset]); multadd_real_vector_complex_scalar(f2, ch, dl_ch, @@ -310,8 +309,8 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue, } - ch[0] = (short)(((int)pil[0]*rxF[0] - (int)pil[1]*rxF[1])>>15); - ch[1] = (short)(((int)pil[0]*rxF[1] + (int)pil[1]*rxF[0])>>15); + ch[0] = (int16_t)(((int32_t)pil[0]*rxF[0] - (int32_t)pil[1]*rxF[1])>>15); + ch[1] = (int16_t)(((int32_t)pil[0]*rxF[1] + (int32_t)pil[1]*rxF[0])>>15); // printf("pilot 49: rxF -> (%d,%d) ch -> (%d,%d), pil -> (%d,%d) \n",rxF[0],rxF[1],ch[0],ch[1],pil[0],pil[1]); multadd_real_vector_complex_scalar(fr, @@ -322,8 +321,8 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue, rxF+=12; dl_ch+=8; - ch[0] = (short)(((int)pil[0]*rxF[0] - (int)pil[1]*rxF[1])>>15); - ch[1] = (short)(((int)pil[0]*rxF[1] + (int)pil[1]*rxF[0])>>15); + ch[0] = (int16_t)(((int32_t)pil[0]*rxF[0] - (int32_t)pil[1]*rxF[1])>>15); + ch[1] = (int16_t)(((int32_t)pil[0]*rxF[1] + (int32_t)pil[1]*rxF[0])>>15); // printf("pilot 50: rxF - > (%d,%d) ch -> (%d,%d), pil -> (%d,%d) \n",rxF[0],rxF[1],ch[0],ch[1],pil[0],pil[1]); multadd_real_vector_complex_scalar(f2r2, ch, @@ -337,8 +336,8 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue, //printf("Channel estimation\n"); // Treat first 2 pilots specially (left edge) - ch[0] = (short)(((int)pil[0]*rxF[0] - (int)pil[1]*rxF[1])>>15); - ch[1] = (short)(((int)pil[0]*rxF[1] + (int)pil[1]*rxF[0])>>15); + ch[0] = (int16_t)(((int32_t)pil[0]*rxF[0] - (int32_t)pil[1]*rxF[1])>>15); + ch[1] = (int16_t)(((int32_t)pil[0]*rxF[1] + (int32_t)pil[1]*rxF[0])>>15); #ifdef DEBUG_CH printf("pilot 0 : rxF - > (%d,%d) ch -> (%d,%d), pil -> (%d,%d) \n",rxF[0],rxF[1],ch[0],ch[1],pil[0],pil[1]); @@ -355,8 +354,8 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue, rxF+=12; dl_ch+=8; - ch[0] = (short)(((int)pil[0]*rxF[0] - (int)pil[1]*rxF[1])>>15); - ch[1] = (short)(((int)pil[0]*rxF[1] + (int)pil[1]*rxF[0])>>15); + ch[0] = (int16_t)(((int32_t)pil[0]*rxF[0] - (int32_t)pil[1]*rxF[1])>>15); + ch[1] = (int16_t)(((int32_t)pil[0]*rxF[1] + (int32_t)pil[1]*rxF[0])>>15); #ifdef DEBUG_CH printf("pilot 1 : rxF - > (%d,%d) ch -> (%d,%d), pil -> (%d,%d) \n",rxF[0],rxF[1],ch[0],ch[1],pil[0],pil[1]); @@ -378,8 +377,8 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue, // printf("pilot[%d][%d] (%d,%d)\n",p,rb,pil[0],pil[1]); // printf("rx[%d][%d] -> (%d,%d)\n",p,phy_vars_ue->lte_frame_parms.first_carrier_offset + phy_vars_ue->lte_frame_parms.nushift + 6*rb+(3*p),rxF[0],rxF[1]); - ch[0] = (short)(((int)pil[0]*rxF[0] - (int)pil[1]*rxF[1])>>15); - ch[1] = (short)(((int)pil[0]*rxF[1] + (int)pil[1]*rxF[0])>>15); + ch[0] = (int16_t)(((int32_t)pil[0]*rxF[0] - (int32_t)pil[1]*rxF[1])>>15); + ch[1] = (int16_t)(((int32_t)pil[0]*rxF[1] + (int32_t)pil[1]*rxF[0])>>15); #ifdef DEBUG_CH printf("pilot %d : rxF - > (%d,%d) ch -> (%d,%d), pil -> (%d,%d) \n",pilot_cnt,rxF[0],rxF[1],ch[0],ch[1],pil[0],pil[1]); @@ -397,8 +396,8 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue, rxF+=12; dl_ch+=8; - ch[0] = (short)(((int)pil[0]*rxF[0] - (int)pil[1]*rxF[1])>>15); - ch[1] = (short)(((int)pil[0]*rxF[1] + (int)pil[1]*rxF[0])>>15); + ch[0] = (int16_t)(((int32_t)pil[0]*rxF[0] - (int32_t)pil[1]*rxF[1])>>15); + ch[1] = (int16_t)(((int32_t)pil[0]*rxF[1] + (int32_t)pil[1]*rxF[0])>>15); #ifdef DEBUG_CH printf("pilot %d : rxF - > (%d,%d) ch -> (%d,%d), pil -> (%d,%d) \n",pilot_cnt+1,rxF[0],rxF[1],ch[0],ch[1],pil[0],pil[1]); @@ -416,8 +415,8 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue, } - ch[0] = (short)(((int)pil[0]*rxF[0] - (int)pil[1]*rxF[1])>>15); - ch[1] = (short)(((int)pil[0]*rxF[1] + (int)pil[1]*rxF[0])>>15); + ch[0] = (int16_t)(((int32_t)pil[0]*rxF[0] - (int32_t)pil[1]*rxF[1])>>15); + ch[1] = (int16_t)(((int32_t)pil[0]*rxF[1] + (int32_t)pil[1]*rxF[0])>>15); #ifdef DEBUG_CH printf("pilot 24: rxF -> (%d,%d) ch -> (%d,%d), pil -> (%d,%d) \n",rxF[0],rxF[1],ch[0],ch[1],pil[0],pil[1]); @@ -435,10 +434,10 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue, // printf("Second half\n"); // Second half of RBs - rxF = (short *)&rxdataF[aarx][((symbol_offset+1+k))]; + rxF = (int16_t *)&rxdataF[aarx][((symbol_offset+1+k))]; - ch[0] = (short)(((int)pil[0]*rxF[0] - (int)pil[1]*rxF[1])>>15); - ch[1] = (short)(((int)pil[0]*rxF[1] + (int)pil[1]*rxF[0])>>15); + ch[0] = (int16_t)(((int32_t)pil[0]*rxF[0] - (int32_t)pil[1]*rxF[1])>>15); + ch[1] = (int16_t)(((int32_t)pil[0]*rxF[1] + (int32_t)pil[1]*rxF[0])>>15); #ifdef DEBUG_CH printf("pilot 25: rxF -> (%d,%d) ch -> (%d,%d), pil -> (%d,%d) \n",rxF[0],rxF[1],ch[0],ch[1],pil[0],pil[1]); @@ -459,8 +458,8 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue, // printf("* pilot[%d][%d] (%d,%d)\n",p,rb,pil[0],pil[1]); // printf("rx[%d][%d] -> (%d,%d)\n",p,phy_vars_ue->lte_frame_parms.first_carrier_offset + phy_vars_ue->lte_frame_parms.nushift + 6*rb+(3*p),rxF[0],rxF[1]); - ch[0] = (short)(((int)pil[0]*rxF[0] - (int)pil[1]*rxF[1])>>15); - ch[1] = (short)(((int)pil[0]*rxF[1] + (int)pil[1]*rxF[0])>>15); + ch[0] = (int16_t)(((int32_t)pil[0]*rxF[0] - (int32_t)pil[1]*rxF[1])>>15); + ch[1] = (int16_t)(((int32_t)pil[0]*rxF[1] + (int32_t)pil[1]*rxF[0])>>15); #ifdef DEBUG_CH printf("pilot %d rxF -> (%d,%d) ch -> (%d,%d), pil -> (%d,%d) \n",26+pilot_cnt,rxF[0],rxF[1],ch[0],ch[1],pil[0],pil[1]); @@ -476,8 +475,8 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue, rxF+=12; dl_ch+=8; - ch[0] = (short)(((int)pil[0]*rxF[0] - (int)pil[1]*rxF[1])>>15); - ch[1] = (short)(((int)pil[0]*rxF[1] + (int)pil[1]*rxF[0])>>15); + ch[0] = (int16_t)(((int32_t)pil[0]*rxF[0] - (int32_t)pil[1]*rxF[1])>>15); + ch[1] = (int16_t)(((int32_t)pil[0]*rxF[1] + (int32_t)pil[1]*rxF[0])>>15); #ifdef DEBUG_CH printf("pilot %d : rxF -> (%d,%d) ch -> (%d,%d), pil -> (%d,%d) \n",27+pilot_cnt,rxF[0],rxF[1],ch[0],ch[1],pil[0],pil[1]); @@ -495,8 +494,8 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue, } - ch[0] = (short)(((int)pil[0]*rxF[0] - (int)pil[1]*rxF[1])>>15); - ch[1] = (short)(((int)pil[0]*rxF[1] + (int)pil[1]*rxF[0])>>15); + ch[0] = (int16_t)(((int32_t)pil[0]*rxF[0] - (int32_t)pil[1]*rxF[1])>>15); + ch[1] = (int16_t)(((int32_t)pil[0]*rxF[1] + (int32_t)pil[1]*rxF[0])>>15); #ifdef DEBUG_CH printf("pilot 49: rxF -> (%d,%d) ch -> (%d,%d), pil -> (%d,%d) \n",rxF[0],rxF[1],ch[0],ch[1],pil[0],pil[1]); @@ -514,8 +513,8 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue, rxF+=12; dl_ch+=8; - ch[0] = (short)(((int)pil[0]*rxF[0] - (int)pil[1]*rxF[1])>>15); - ch[1] = (short)(((int)pil[0]*rxF[1] + (int)pil[1]*rxF[0])>>15); + ch[0] = (int16_t)(((int32_t)pil[0]*rxF[0] - (int32_t)pil[1]*rxF[1])>>15); + ch[1] = (int16_t)(((int32_t)pil[0]*rxF[1] + (int32_t)pil[1]*rxF[0])>>15); #ifdef DEBUG_CH @@ -541,8 +540,8 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue, // phy_vars_ue->lte_frame_parms.first_carrier_offset + phy_vars_ue->lte_frame_parms.nushift + 6*rb+(3*p), // rxF[0], // rxF[1]); - ch[0] = (short)(((int)pil[0]*rxF[0] - (int)pil[1]*rxF[1])>>15); - ch[1] = (short)(((int)pil[0]*rxF[1] + (int)pil[1]*rxF[0])>>15); + ch[0] = (int16_t)(((int32_t)pil[0]*rxF[0] - (int32_t)pil[1]*rxF[1])>>15); + ch[1] = (int16_t)(((int32_t)pil[0]*rxF[1] + (int32_t)pil[1]*rxF[0])>>15); //printf("ch -> (%d,%d)\n",ch[0],ch[1]); multadd_real_vector_complex_scalar(f, ch, @@ -552,8 +551,8 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue, rxF+=12; dl_ch+=8; - ch[0] = (short)(((int)pil[0]*rxF[0] - (int)pil[1]*rxF[1])>>15); - ch[1] = (short)(((int)pil[0]*rxF[1] + (int)pil[1]*rxF[0])>>15); + ch[0] = (int16_t)(((int32_t)pil[0]*rxF[0] - (int32_t)pil[1]*rxF[1])>>15); + ch[1] = (int16_t)(((int32_t)pil[0]*rxF[1] + (int32_t)pil[1]*rxF[0])>>15); //printf("ch -> (%d,%d)\n",ch[0],ch[1]); multadd_real_vector_complex_scalar(f2, ch, @@ -565,8 +564,8 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue, } - ch[0] = (short)(((int)pil[0]*rxF[0] - (int)pil[1]*rxF[1])>>15); - ch[1] = (short)(((int)pil[0]*rxF[1] + (int)pil[1]*rxF[0])>>15); + ch[0] = (int16_t)(((int32_t)pil[0]*rxF[0] - (int32_t)pil[1]*rxF[1])>>15); + ch[1] = (int16_t)(((int32_t)pil[0]*rxF[1] + (int32_t)pil[1]*rxF[0])>>15); // printf("ch -> (%d,%d)\n",ch[0],ch[1]); multadd_real_vector_complex_scalar(f, ch, @@ -577,9 +576,9 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue, //printf("Second half\n"); //Second half of RBs - rxF = (short *)&rxdataF[aarx][((symbol_offset+1+nushift + (3*p)))]; - ch[0] = (short)(((int)pil[0]*rxF[0] - (int)pil[1]*rxF[1])>>15); - ch[1] = (short)(((int)pil[0]*rxF[1] + (int)pil[1]*rxF[0])>>15); + rxF = (int16_t *)&rxdataF[aarx][((symbol_offset+1+nushift + (3*p)))]; + ch[0] = (int16_t)(((int32_t)pil[0]*rxF[0] - (int32_t)pil[1]*rxF[1])>>15); + ch[1] = (int16_t)(((int32_t)pil[0]*rxF[1] + (int32_t)pil[1]*rxF[0])>>15); multadd_real_vector_complex_scalar(f2, ch, @@ -596,8 +595,8 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue, // phy_vars_ue->lte_frame_parms.first_carrier_offset + phy_vars_ue->lte_frame_parms.nushift + 6*rb+(3*p), // rxF[0], // rxF[1]); - ch[0] = (short)(((int)pil[0]*rxF[0] - (int)pil[1]*rxF[1])>>15); - ch[1] = (short)(((int)pil[0]*rxF[1] + (int)pil[1]*rxF[0])>>15); + ch[0] = (int16_t)(((int32_t)pil[0]*rxF[0] - (int32_t)pil[1]*rxF[1])>>15); + ch[1] = (int16_t)(((int32_t)pil[0]*rxF[1] + (int32_t)pil[1]*rxF[0])>>15); multadd_real_vector_complex_scalar(f, ch, @@ -607,8 +606,8 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue, rxF+=12; dl_ch+=8; - ch[0] = (short)(((int)pil[0]*rxF[0] - (int)pil[1]*rxF[1])>>15); - ch[1] = (short)(((int)pil[0]*rxF[1] + (int)pil[1]*rxF[0])>>15); + ch[0] = (int16_t)(((int32_t)pil[0]*rxF[0] - (int32_t)pil[1]*rxF[1])>>15); + ch[1] = (int16_t)(((int32_t)pil[0]*rxF[1] + (int32_t)pil[1]*rxF[0])>>15); multadd_real_vector_complex_scalar(f2, ch, @@ -628,7 +627,7 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue, // Temporal Interpolation // printf("ch_offset %d\n",ch_offset); - dl_ch = (short *)&dl_ch_estimates[(p<<1)+aarx][ch_offset]; + dl_ch = (int16_t *)&dl_ch_estimates[(p<<1)+aarx][ch_offset]; if (phy_vars_ue->high_speed_flag == 0) { multadd_complex_vector_real_scalar(dl_ch, @@ -637,8 +636,8 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue, } else { // high_speed_flag == 1 if (symbol == 0) { // printf("Interpolating %d->0\n",4-phy_vars_ue->lte_frame_parms.Ncp); - // dl_ch_prev = (short *)&dl_ch_estimates[(p<<1)+aarx][(4-phy_vars_ue->lte_frame_parms.Ncp)*(phy_vars_ue->lte_frame_parms.ofdm_symbol_size)]; - dl_ch_prev = (short *)&dl_ch_estimates[(p<<1)+aarx][pilot3*(phy_vars_ue->lte_frame_parms.ofdm_symbol_size)]; + // dl_ch_prev = (int16_t *)&dl_ch_estimates[(p<<1)+aarx][(4-phy_vars_ue->lte_frame_parms.Ncp)*(phy_vars_ue->lte_frame_parms.ofdm_symbol_size)]; + dl_ch_prev = (int16_t *)&dl_ch_estimates[(p<<1)+aarx][pilot3*(phy_vars_ue->lte_frame_parms.ofdm_symbol_size)]; multadd_complex_vector_real_scalar(dl_ch_prev,21845,dl_ch_prev+(2*(phy_vars_ue->lte_frame_parms.ofdm_symbol_size)),1,phy_vars_ue->lte_frame_parms.ofdm_symbol_size); multadd_complex_vector_real_scalar(dl_ch,10923,dl_ch_prev+(2*(phy_vars_ue->lte_frame_parms.ofdm_symbol_size)),0,phy_vars_ue->lte_frame_parms.ofdm_symbol_size); @@ -647,7 +646,7 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue, multadd_complex_vector_real_scalar(dl_ch,21845,dl_ch_prev+(2*((phy_vars_ue->lte_frame_parms.ofdm_symbol_size)<<1)),0,phy_vars_ue->lte_frame_parms.ofdm_symbol_size); } // this is 1/3,2/3 combination for pilots spaced by 3 symbols else if (symbol == pilot1) { - dl_ch_prev = (short *)&dl_ch_estimates[(p<<1)+aarx][0]; + dl_ch_prev = (int16_t *)&dl_ch_estimates[(p<<1)+aarx][0]; if (phy_vars_ue->lte_frame_parms.Ncp==0) {// pilot spacing 4 symbols (1/4,1/2,3/4 combination) multadd_complex_vector_real_scalar(dl_ch_prev,24576,dl_ch_prev+(2*(phy_vars_ue->lte_frame_parms.ofdm_symbol_size)),1,phy_vars_ue->lte_frame_parms.ofdm_symbol_size); @@ -666,7 +665,7 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue, multadd_complex_vector_real_scalar(dl_ch,10923,dl_ch_prev+(2*((phy_vars_ue->lte_frame_parms.ofdm_symbol_size)<<1)),0,phy_vars_ue->lte_frame_parms.ofdm_symbol_size); } // pilot spacing 3 symbols (1/3,2/3 combination) } else if (symbol == pilot2) { - dl_ch_prev = (short *)&dl_ch_estimates[(p<<1)+aarx][pilot1*(phy_vars_ue->lte_frame_parms.ofdm_symbol_size)]; + dl_ch_prev = (int16_t *)&dl_ch_estimates[(p<<1)+aarx][pilot1*(phy_vars_ue->lte_frame_parms.ofdm_symbol_size)]; multadd_complex_vector_real_scalar(dl_ch_prev,21845,dl_ch_prev+(2*(phy_vars_ue->lte_frame_parms.ofdm_symbol_size)),1,phy_vars_ue->lte_frame_parms.ofdm_symbol_size); multadd_complex_vector_real_scalar(dl_ch,10923,dl_ch_prev+(2*(phy_vars_ue->lte_frame_parms.ofdm_symbol_size)),0,phy_vars_ue->lte_frame_parms.ofdm_symbol_size); @@ -675,7 +674,7 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue, multadd_complex_vector_real_scalar(dl_ch,21845,dl_ch_prev+(2*((phy_vars_ue->lte_frame_parms.ofdm_symbol_size)<<1)),0,phy_vars_ue->lte_frame_parms.ofdm_symbol_size); } else { // symbol == pilot3 // printf("Interpolating 0->%d\n",4-phy_vars_ue->lte_frame_parms.Ncp); - dl_ch_prev = (short *)&dl_ch_estimates[(p<<1)+aarx][pilot2*(phy_vars_ue->lte_frame_parms.ofdm_symbol_size)]; + dl_ch_prev = (int16_t *)&dl_ch_estimates[(p<<1)+aarx][pilot2*(phy_vars_ue->lte_frame_parms.ofdm_symbol_size)]; if (phy_vars_ue->lte_frame_parms.Ncp==0) {// pilot spacing 4 symbols (1/4,1/2,3/4 combination) multadd_complex_vector_real_scalar(dl_ch_prev,24576,dl_ch_prev+(2*(phy_vars_ue->lte_frame_parms.ofdm_symbol_size)),1,phy_vars_ue->lte_frame_parms.ofdm_symbol_size); diff --git a/openair1/PHY/LTE_ESTIMATION/lte_est_freq_offset.c b/openair1/PHY/LTE_ESTIMATION/lte_est_freq_offset.c index 0aab535e1a..b11ba532f5 100644 --- a/openair1/PHY/LTE_ESTIMATION/lte_est_freq_offset.c +++ b/openair1/PHY/LTE_ESTIMATION/lte_est_freq_offset.c @@ -35,7 +35,11 @@ #include "PHY/defs.h" //#define DEBUG_PHY +#if defined(__x86_64__) || defined(__i386__) __m128i avg128F; +#elif defined(__arm__) +int32x4_t avg128F; +#endif //compute average channel_level on each (TX,RX) antenna pair int dl_channel_level(int16_t *dl_ch, @@ -43,10 +47,15 @@ int dl_channel_level(int16_t *dl_ch, { int16_t rb; +#if defined(__x86_64__) || defined(__i386__) __m128i *dl_ch128; +#elif defined(__arm__) + int16x4_t *dl_ch128; +#endif int avg; //clear average level +#if defined(__x86_64__) || defined(__i386__) avg128F = _mm_setzero_si128(); dl_ch128=(__m128i *)dl_ch; @@ -59,24 +68,44 @@ int dl_channel_level(int16_t *dl_ch, dl_ch128+=3; } +#elif defined(__arm__) + avg128F = vdupq_n_s32(0); + dl_ch128=(int16x4_t *)dl_ch; + for (rb=0; rbN_RB_DL; rb++) { + + avg128F = vqaddq_s32(avg128F,vmull_s16(dl_ch128[0],dl_ch128[0])); + avg128F = vqaddq_s32(avg128F,vmull_s16(dl_ch128[1],dl_ch128[1])); + avg128F = vqaddq_s32(avg128F,vmull_s16(dl_ch128[2],dl_ch128[2])); + avg128F = vqaddq_s32(avg128F,vmull_s16(dl_ch128[3],dl_ch128[3])); + avg128F = vqaddq_s32(avg128F,vmull_s16(dl_ch128[4],dl_ch128[4])); + avg128F = vqaddq_s32(avg128F,vmull_s16(dl_ch128[5],dl_ch128[5])); + dl_ch128+=6; + + + } + + +#endif + DevAssert( frame_parms->N_RB_DL ); avg = (((int*)&avg128F)[0] + ((int*)&avg128F)[1] + ((int*)&avg128F)[2] + ((int*)&avg128F)[3])/(frame_parms->N_RB_DL*12); - +#if defined(__x86_64__) || defined(__i386__) _mm_empty(); _m_empty(); - +#endif return(avg); } int lte_est_freq_offset(int **dl_ch_estimates, LTE_DL_FRAME_PARMS *frame_parms, int l, - int* freq_offset) + int* freq_offset, + int reset) { int ch_offset, omega, dl_ch_shift; @@ -89,6 +118,9 @@ int lte_est_freq_offset(int **dl_ch_estimates, int coef = 1<<10; int ncoef = 32767 - coef; + // initialize the averaging filter to initial value + if (reset!=0) + first_run=1; ch_offset = (l*(frame_parms->ofdm_symbol_size)); @@ -134,13 +166,13 @@ int lte_est_freq_offset(int **dl_ch_estimates, omega_cpx->i += ((struct complex16*) &omega)->i; // phase_offset += atan2((double)omega_cpx->i,(double)omega_cpx->r); phase_offset += atan2((double)omega_cpx->i,(double)omega_cpx->r); - // LOG_D(PHY,"omega (%d,%d) -> %f\n",omega_cpx->r,omega_cpx->i,phase_offset); + // LOG_I(PHY,"omega (%d,%d) -> %f\n",omega_cpx->r,omega_cpx->i,phase_offset); } // phase_offset /= (frame_parms->nb_antennas_rx*frame_parms->nb_antennas_tx); freq_offset_est = (int) (phase_offset/(2*M_PI)/(frame_parms->Ncp==NORMAL ? (285.8e-6):(2.5e-4))); //2.5e-4 is the time between pilot symbols - // LOG_D(PHY,"symbol %d : freq_offset_est %d\n",l,freq_offset_est); + // LOG_I(PHY,"symbol %d : freq_offset_est %d\n",l,freq_offset_est); // update freq_offset with phase_offset using a moving average filter if (first_run == 1) { diff --git a/openair1/PHY/LTE_ESTIMATION/lte_sync_time.c b/openair1/PHY/LTE_ESTIMATION/lte_sync_time.c index 39771d6289..7c6254090f 100644 --- a/openair1/PHY/LTE_ESTIMATION/lte_sync_time.c +++ b/openair1/PHY/LTE_ESTIMATION/lte_sync_time.c @@ -39,9 +39,7 @@ #include "SCHED/extern.h" #include "MAC_INTERFACE/defs.h" #include "MAC_INTERFACE/extern.h" -#ifdef USER_MODE #include -#endif #ifdef OPENAIR2 #include "LAYER2/MAC/defs.h" @@ -296,12 +294,10 @@ int lte_sync_time_init(LTE_DL_FRAME_PARMS *frame_parms ) // LTE_UE_COMMON *com -#ifdef USER_MODE #ifdef DEBUG_PHY write_output("primary_sync0.m","psync0",primary_synch0_time,frame_parms->ofdm_symbol_size,1,1); write_output("primary_sync1.m","psync1",primary_synch1_time,frame_parms->ofdm_symbol_size,1,1); write_output("primary_sync2.m","psync2",primary_synch2_time,frame_parms->ofdm_symbol_size,1,1); -#endif #endif return (1); } @@ -310,7 +306,6 @@ int lte_sync_time_init(LTE_DL_FRAME_PARMS *frame_parms ) // LTE_UE_COMMON *com void lte_sync_time_free(void) { -#ifdef USER_MODE if (sync_corr_ue0) { msg("Freeing sync_corr_ue (%p)...\n",sync_corr_ue0); @@ -342,7 +337,6 @@ void lte_sync_time_free(void) free(primary_synch2_time); } -#endif sync_corr_ue0 = NULL; sync_corr_ue1 = NULL; sync_corr_ue2 = NULL; @@ -502,19 +496,19 @@ int lte_sync_time(int **rxdata, ///rx data in time domain sync_source,peak_pos,peak_val); -#ifdef USER_MODE - if (debug_cnt == 5) { + + if (debug_cnt == 0) { write_output("sync_corr0_ue.m","synccorr0",sync_corr_ue0,2*length,1,2); write_output("sync_corr1_ue.m","synccorr1",sync_corr_ue1,2*length,1,2); write_output("sync_corr2_ue.m","synccorr2",sync_corr_ue2,2*length,1,2); write_output("rxdata0.m","rxd0",rxdata[0],length<<1,1,1); - exit(-1); + // exit(-1); } else { debug_cnt++; } -#endif + #endif @@ -574,11 +568,8 @@ int lte_sync_time_eNB(int32_t **rxdata, ///rx data in time domain //calculate dot product of primary_synch0_time and rxdata[ar][n] (ar=0..nb_ant_rx) and store the sum in temp[n]; for (ar=0; arnb_antennas_rx; ar++) { - //#ifndef USER_MODE + result = dot_product((short*)primary_synch_time, (short*) &(rxdata[ar][n]), frame_parms->ofdm_symbol_size, 15); - //#else - // result = dot_product((short*)primary_synch_time, (short*) &(rxdata[ar][n]), frame_parms->ofdm_symbol_size+frame_parms->nb_prefix_samples, 12); - //#endif //((short*)sync_corr)[2*n] += ((short*) &result)[0]; //((short*)sync_corr)[2*n+1] += ((short*) &result)[1]; sync_corr_eNB[n] += abs32(result); diff --git a/openair1/PHY/LTE_ESTIMATION/lte_sync_timefreq.c b/openair1/PHY/LTE_ESTIMATION/lte_sync_timefreq.c index 6a5a6eb3c1..37f5d26315 100644 --- a/openair1/PHY/LTE_ESTIMATION/lte_sync_timefreq.c +++ b/openair1/PHY/LTE_ESTIMATION/lte_sync_timefreq.c @@ -46,14 +46,15 @@ //#include "defs.h" #include "PHY/defs.h" #include "PHY/extern.h" + +#if defined(__x86_64__) || defined(__i386__) #include "pss6144.h" - - extern void print_shorts(char*,__m128i*); +#endif void lte_sync_timefreq(PHY_VARS_UE *ue,int band,unsigned int DL_freq) { - +#if defined(__x86_64__) || defined(__i386__) UE_SCAN_INFO_t *scan_info = &ue->scan_info[band]; int16_t spectrum[12288] __attribute__((aligned(16))); int16_t spectrum_p5ms[12288] __attribute__((aligned(16))); @@ -358,5 +359,6 @@ void lte_sync_timefreq(PHY_VARS_UE *ue,int band,unsigned int DL_freq) for (band_idx=0; band_idx<10; band_idx++) printf("pss 2: level %d dB, freq %u\n", dB_fixed(scan_info->amp[2][band_idx]),scan_info->freq_offset_Hz[2][band_idx]); +#endif } diff --git a/openair1/PHY/LTE_ESTIMATION/lte_ue_measurements.c b/openair1/PHY/LTE_ESTIMATION/lte_ue_measurements.c index 73b524aafe..0fa0fc4ce1 100644 --- a/openair1/PHY/LTE_ESTIMATION/lte_ue_measurements.c +++ b/openair1/PHY/LTE_ESTIMATION/lte_ue_measurements.c @@ -42,39 +42,32 @@ //#define DEBUG_MEAS #ifdef USER_MODE -void print_shorts(char *s,__m128i *x) +void print_shorts(char *s,short *x) { - short *tempb = (short *)x; printf("%s : %d,%d,%d,%d,%d,%d,%d,%d\n",s, - tempb[0],tempb[1],tempb[2],tempb[3],tempb[4],tempb[5],tempb[6],tempb[7] + x[0],x[1],x[2],x[3],x[4],x[5],x[6],x[7] ); } -void print_ints(char *s,__m128i *x) +void print_ints(char *s,int *x) { - int *tempb = (int *)x; printf("%s : %d,%d,%d,%d\n",s, - tempb[0],tempb[1],tempb[2],tempb[3] + x[0],x[1],x[2],x[3] ); } #endif -__m128i pmi128_re __attribute__ ((aligned(16))); -__m128i pmi128_im __attribute__ ((aligned(16))); -__m128i mmtmpPMI0 __attribute__ ((aligned(16))); -__m128i mmtmpPMI1 __attribute__ ((aligned(16))); -__m128i mmtmpPMI2 __attribute__ ((aligned(16))); -__m128i mmtmpPMI3 __attribute__ ((aligned(16))); int16_t get_PL(uint8_t Mod_id,uint8_t CC_id,uint8_t eNB_index) { PHY_VARS_UE *phy_vars_ue = PHY_vars_UE_g[Mod_id][CC_id]; + /* int RSoffset; @@ -82,7 +75,7 @@ int16_t get_PL(uint8_t Mod_id,uint8_t CC_id,uint8_t eNB_index) RSoffset = 6; else RSoffset = 3; - + */ LOG_D(PHY,"get_PL : Frame %d : rsrp %f dBm/RE (%f), eNB power %d dBm/RE\n", phy_vars_ue->frame_rx, (1.0*dB_fixed_times10(phy_vars_ue->PHY_measurements.rsrp[eNB_index])-(10.0*phy_vars_ue->rx_total_gain_dB))/10.0, @@ -204,47 +197,83 @@ void ue_rrc_measurements(PHY_VARS_UE *phy_vars_ue, if (phy_vars_ue->lte_frame_parms.Ncp==NORMAL) { for (aarx=0; aarxlte_frame_parms.nb_antennas_rx; aarx++) { - rxF_sss = (int16_t *)&phy_vars_ue->lte_ue_common_vars.rxdataF[aarx][(5*phy_vars_ue->lte_frame_parms.ofdm_symbol_size)]; - rxF_pss = (int16_t *)&phy_vars_ue->lte_ue_common_vars.rxdataF[aarx][(6*phy_vars_ue->lte_frame_parms.ofdm_symbol_size)]; - + rxF_sss = (int16_t *)&phy_vars_ue->lte_ue_common_vars.rxdataF[aarx][(5*phy_vars_ue->lte_frame_parms.ofdm_symbol_size)]; + rxF_pss = (int16_t *)&phy_vars_ue->lte_ue_common_vars.rxdataF[aarx][(6*phy_vars_ue->lte_frame_parms.ofdm_symbol_size)]; + //-ve spectrum from SSS - phy_vars_ue->PHY_measurements.n0_power[aarx] = (((int32_t)rxF_pss[-72]*rxF_pss[-72])+((int32_t)rxF_pss[-71]*rxF_pss[-71])); - phy_vars_ue->PHY_measurements.n0_power[aarx] += (((int32_t)rxF_pss[-70]*rxF_pss[-70])+((int32_t)rxF_pss[-69]*rxF_pss[-69])); + // printf("slot %d: SSS DTX: %d,%d, non-DTX %d,%d\n",slot,rxF_pss[-72],rxF_pss[-71],rxF_pss[-36],rxF_pss[-35]); + + // phy_vars_ue->PHY_measurements.n0_power[aarx] = (((int32_t)rxF_pss[-72]*rxF_pss[-72])+((int32_t)rxF_pss[-71]*rxF_pss[-71])); + // printf("sssn36 %d\n",phy_vars_ue->PHY_measurements.n0_power[aarx]); + phy_vars_ue->PHY_measurements.n0_power[aarx] = (((int32_t)rxF_pss[-70]*rxF_pss[-70])+((int32_t)rxF_pss[-69]*rxF_pss[-69])); phy_vars_ue->PHY_measurements.n0_power[aarx] += (((int32_t)rxF_pss[-68]*rxF_pss[-68])+((int32_t)rxF_pss[-67]*rxF_pss[-67])); phy_vars_ue->PHY_measurements.n0_power[aarx] += (((int32_t)rxF_pss[-66]*rxF_pss[-66])+((int32_t)rxF_pss[-65]*rxF_pss[-65])); - phy_vars_ue->PHY_measurements.n0_power[aarx] += (((int32_t)rxF_pss[-64]*rxF_pss[-64])+((int32_t)rxF_pss[-63]*rxF_pss[-63])); + // phy_vars_ue->PHY_measurements.n0_power[aarx] += (((int32_t)rxF_pss[-64]*rxF_pss[-64])+((int32_t)rxF_pss[-63]*rxF_pss[-63])); + // printf("sssm32 %d\n",phy_vars_ue->PHY_measurements.n0_power[aarx]); //+ve spectrum from SSS - phy_vars_ue->PHY_measurements.n0_power[aarx] += (((int32_t)rxF_sss[2+72]*rxF_sss[2+72])+((int32_t)rxF_sss[2+71]*rxF_sss[2+71])); - phy_vars_ue->PHY_measurements.n0_power[aarx] += (((int32_t)rxF_sss[2+70]*rxF_sss[2+70])+((int32_t)rxF_sss[2+69]*rxF_sss[2+69])); + phy_vars_ue->PHY_measurements.n0_power[aarx] += (((int32_t)rxF_sss[2+70]*rxF_sss[2+70])+((int32_t)rxF_sss[2+69]*rxF_sss[2+69])); phy_vars_ue->PHY_measurements.n0_power[aarx] += (((int32_t)rxF_sss[2+68]*rxF_sss[2+68])+((int32_t)rxF_sss[2+67]*rxF_sss[2+67])); phy_vars_ue->PHY_measurements.n0_power[aarx] += (((int32_t)rxF_sss[2+66]*rxF_sss[2+66])+((int32_t)rxF_sss[2+65]*rxF_sss[2+65])); - phy_vars_ue->PHY_measurements.n0_power[aarx] += (((int32_t)rxF_sss[2+64]*rxF_sss[2+64])+((int32_t)rxF_sss[2+63]*rxF_sss[2+63])); + // phy_vars_ue->PHY_measurements.n0_power[aarx] += (((int32_t)rxF_sss[2+64]*rxF_sss[2+64])+((int32_t)rxF_sss[2+63]*rxF_sss[2+63])); + // printf("sssp32 %d\n",phy_vars_ue->PHY_measurements.n0_power[aarx]); //+ve spectrum from PSS - phy_vars_ue->PHY_measurements.n0_power[aarx] += (((int32_t)rxF_pss[2+72]*rxF_pss[2+72])+((int32_t)rxF_pss[2+71]*rxF_pss[2+71])); phy_vars_ue->PHY_measurements.n0_power[aarx] += (((int32_t)rxF_pss[2+70]*rxF_pss[2+70])+((int32_t)rxF_pss[2+69]*rxF_pss[2+69])); phy_vars_ue->PHY_measurements.n0_power[aarx] += (((int32_t)rxF_pss[2+68]*rxF_pss[2+68])+((int32_t)rxF_pss[2+67]*rxF_pss[2+67])); phy_vars_ue->PHY_measurements.n0_power[aarx] += (((int32_t)rxF_pss[2+66]*rxF_pss[2+66])+((int32_t)rxF_pss[2+65]*rxF_pss[2+65])); - phy_vars_ue->PHY_measurements.n0_power[aarx] += (((int32_t)rxF_pss[2+64]*rxF_pss[2+64])+((int32_t)rxF_pss[2+63]*rxF_pss[2+63])); - //-ve spectrum from PSS + // phy_vars_ue->PHY_measurements.n0_power[aarx] += (((int32_t)rxF_pss[2+64]*rxF_pss[2+64])+((int32_t)rxF_pss[2+63]*rxF_pss[2+63])); + // printf("pss32 %d\n",phy_vars_ue->PHY_measurements.n0_power[aarx]); //-ve spectrum from PSS rxF_pss = (int16_t *)&phy_vars_ue->lte_ue_common_vars.rxdataF[aarx][(7*phy_vars_ue->lte_frame_parms.ofdm_symbol_size)]; - phy_vars_ue->PHY_measurements.n0_power[aarx] += (((int32_t)rxF_pss[-72]*rxF_pss[-72])+((int32_t)rxF_pss[-71]*rxF_pss[-71])); + // phy_vars_ue->PHY_measurements.n0_power[aarx] += (((int32_t)rxF_pss[-72]*rxF_pss[-72])+((int32_t)rxF_pss[-71]*rxF_pss[-71])); + // printf("pssm36 %d\n",phy_vars_ue->PHY_measurements.n0_power[aarx]); phy_vars_ue->PHY_measurements.n0_power[aarx] += (((int32_t)rxF_pss[-70]*rxF_pss[-70])+((int32_t)rxF_pss[-69]*rxF_pss[-69])); phy_vars_ue->PHY_measurements.n0_power[aarx] += (((int32_t)rxF_pss[-68]*rxF_pss[-68])+((int32_t)rxF_pss[-67]*rxF_pss[-67])); phy_vars_ue->PHY_measurements.n0_power[aarx] += (((int32_t)rxF_pss[-66]*rxF_pss[-66])+((int32_t)rxF_pss[-65]*rxF_pss[-65])); - phy_vars_ue->PHY_measurements.n0_power[aarx] += (((int32_t)rxF_pss[-64]*rxF_pss[-64])+((int32_t)rxF_pss[-63]*rxF_pss[-63])); - phy_vars_ue->PHY_measurements.n0_power_dB[aarx] = (unsigned short) dB_fixed(phy_vars_ue->PHY_measurements.n0_power[aarx]/10); + // phy_vars_ue->PHY_measurements.n0_power[aarx] += (((int32_t)rxF_pss[-64]*rxF_pss[-64])+((int32_t)rxF_pss[-63]*rxF_pss[-63])); + // printf("pssm32 %d\n",phy_vars_ue->PHY_measurements.n0_power[aarx]); + phy_vars_ue->PHY_measurements.n0_power_dB[aarx] = (unsigned short) dB_fixed(phy_vars_ue->PHY_measurements.n0_power[aarx]/12); phy_vars_ue->PHY_measurements.n0_power_tot += phy_vars_ue->PHY_measurements.n0_power[aarx]; } - phy_vars_ue->PHY_measurements.n0_power_tot_dB = (unsigned short) dB_fixed(phy_vars_ue->PHY_measurements.n0_power_tot/20); - phy_vars_ue->PHY_measurements.n0_power_tot_dBm = phy_vars_ue->PHY_measurements.n0_power_tot_dB - phy_vars_ue->rx_total_gain_dB; - - } + phy_vars_ue->PHY_measurements.n0_power_tot_dB = (unsigned short) dB_fixed(phy_vars_ue->PHY_measurements.n0_power_tot/(12*aarx)); + phy_vars_ue->PHY_measurements.n0_power_tot_dBm = phy_vars_ue->PHY_measurements.n0_power_tot_dB - phy_vars_ue->rx_total_gain_dB - dB_fixed(phy_vars_ue->lte_frame_parms.ofdm_symbol_size); + } } + else if ((phy_vars_ue->lte_frame_parms.frame_type == TDD) && + (slot == 1)) { // TDD SSS, compute noise in DTX REs + + if (phy_vars_ue->lte_frame_parms.Ncp==NORMAL) { + for (aarx=0; aarxlte_frame_parms.nb_antennas_rx; aarx++) { + + rxF_sss = (int16_t *)&phy_vars_ue->lte_ue_common_vars.rxdataF[aarx][(6*phy_vars_ue->lte_frame_parms.ofdm_symbol_size)]; + // note this is a dummy pointer, the pss is not really there! + // in FDD the pss is in the symbol after the sss, but not in TDD + rxF_pss = (int16_t *)&phy_vars_ue->lte_ue_common_vars.rxdataF[aarx][(7*phy_vars_ue->lte_frame_parms.ofdm_symbol_size)]; + + //-ve spectrum from SSS + // phy_vars_ue->PHY_measurements.n0_power[aarx] = (((int32_t)rxF_pss[-72]*rxF_pss[-72])+((int32_t)rxF_pss[-71]*rxF_pss[-71])); + phy_vars_ue->PHY_measurements.n0_power[aarx] = (((int32_t)rxF_pss[-70]*rxF_pss[-70])+((int32_t)rxF_pss[-69]*rxF_pss[-69])); + phy_vars_ue->PHY_measurements.n0_power[aarx] += (((int32_t)rxF_pss[-68]*rxF_pss[-68])+((int32_t)rxF_pss[-67]*rxF_pss[-67])); + phy_vars_ue->PHY_measurements.n0_power[aarx] += (((int32_t)rxF_pss[-66]*rxF_pss[-66])+((int32_t)rxF_pss[-65]*rxF_pss[-65])); + // phy_vars_ue->PHY_measurements.n0_power[aarx] += (((int32_t)rxF_pss[-64]*rxF_pss[-64])+((int32_t)rxF_pss[-63]*rxF_pss[-63])); + //+ve spectrum from SSS + // phy_vars_ue->PHY_measurements.n0_power[aarx] += (((int32_t)rxF_sss[2+72]*rxF_sss[2+72])+((int32_t)rxF_sss[2+71]*rxF_sss[2+71])); + phy_vars_ue->PHY_measurements.n0_power[aarx] = (((int32_t)rxF_sss[2+70]*rxF_sss[2+70])+((int32_t)rxF_sss[2+69]*rxF_sss[2+69])); + phy_vars_ue->PHY_measurements.n0_power[aarx] += (((int32_t)rxF_sss[2+68]*rxF_sss[2+68])+((int32_t)rxF_sss[2+67]*rxF_sss[2+67])); + phy_vars_ue->PHY_measurements.n0_power[aarx] += (((int32_t)rxF_sss[2+66]*rxF_sss[2+66])+((int32_t)rxF_sss[2+65]*rxF_sss[2+65])); + // phy_vars_ue->PHY_measurements.n0_power[aarx] += (((int32_t)rxF_sss[2+64]*rxF_sss[2+64])+((int32_t)rxF_sss[2+63]*rxF_sss[2+63])); + + phy_vars_ue->PHY_measurements.n0_power_dB[aarx] = (unsigned short) dB_fixed(phy_vars_ue->PHY_measurements.n0_power[aarx]/(6)); + phy_vars_ue->PHY_measurements.n0_power_tot += phy_vars_ue->PHY_measurements.n0_power[aarx]; + } + phy_vars_ue->PHY_measurements.n0_power_tot_dB = (unsigned short) dB_fixed(phy_vars_ue->PHY_measurements.n0_power_tot/(6*aarx)); + phy_vars_ue->PHY_measurements.n0_power_tot_dBm = phy_vars_ue->PHY_measurements.n0_power_tot_dB - phy_vars_ue->rx_total_gain_dB - dB_fixed(phy_vars_ue->lte_frame_parms.ofdm_symbol_size); + + + } + } } } - // recompute nushift with eNB_offset corresponding to adjacent eNB on which to perform channel estimation // printf("[PHY][UE %d] Frame %d slot %d Doing ue_rrc_measurements rsrp/rssi (Nid_cell %d, Nid2 %d, nushift %d, eNB_offset %d)\n",phy_vars_ue->Mod_id,phy_vars_ue->frame,slot,Nid_cell,Nid2,nushift,eNB_offset); if (eNB_offset > 0) @@ -265,7 +294,7 @@ void ue_rrc_measurements(PHY_VARS_UE *phy_vars_ue, for (l=0,nu=0; l<=(4-phy_vars_ue->lte_frame_parms.Ncp); l+=(4-phy_vars_ue->lte_frame_parms.Ncp),nu=3) { k = (nu + nushift)%6; #ifdef DEBUG_MEAS - LOG_D(PHY,"[UE %d] Frame %d slot %d Doing ue_rrc_measurements rsrp/rssi (Nid_cell %d, nushift %d, eNB_offset %d, k %d, l %d)\n",phy_vars_ue->Mod_id,phy_vars_ue->frame_rx,slot,Nid_cell,nushift, + LOG_I(PHY,"[UE %d] Frame %d slot %d Doing ue_rrc_measurements rsrp/rssi (Nid_cell %d, nushift %d, eNB_offset %d, k %d, l %d)\n",phy_vars_ue->Mod_id,phy_vars_ue->frame_rx,slot,Nid_cell,nushift, eNB_offset,k,l); #endif @@ -280,10 +309,10 @@ void ue_rrc_measurements(PHY_VARS_UE *phy_vars_ue, phy_vars_ue->PHY_measurements.rsrp[eNB_offset] += (((int32_t)(rxF[off])*rxF[off])+((int32_t)(rxF[off+1])*rxF[off+1])); // printf("rb %d, off %d : %d\n",rb,off,((((int32_t)rxF[off])*rxF[off])+((int32_t)(rxF[off+1])*rxF[off+1]))); - /* if ((phy_vars_ue->frame_rx&0x3ff) == 0) - printf("rb %d, off %d : %d\n",rb,off,((rxF[off]*rxF[off])+(rxF[off+1]*rxF[off+1]))); + // if ((phy_vars_ue->frame_rx&0x3ff) == 0) + // printf("rb %d, off %d : %d\n",rb,off,((rxF[off]*rxF[off])+(rxF[off+1]*rxF[off+1]))); - */ + off+=12; if (off>=(phy_vars_ue->lte_frame_parms.ofdm_symbol_size<<1)) @@ -317,13 +346,10 @@ void ue_rrc_measurements(PHY_VARS_UE *phy_vars_ue, } } - // 2 RE per PRB // phy_vars_ue->PHY_measurements.rsrp[eNB_offset]/=(24*phy_vars_ue->lte_frame_parms.N_RB_DL); phy_vars_ue->PHY_measurements.rsrp[eNB_offset]/=(2*phy_vars_ue->lte_frame_parms.N_RB_DL*phy_vars_ue->lte_frame_parms.ofdm_symbol_size); - LOG_D(PHY,"eNB: %d, RSRP: %d \n",eNB_offset,phy_vars_ue->PHY_measurements.rsrp[eNB_offset]); - - + // LOG_I(PHY,"eNB: %d, RSRP: %d \n",eNB_offset,phy_vars_ue->PHY_measurements.rsrp[eNB_offset]); if (eNB_offset == 0) { // phy_vars_ue->PHY_measurements.rssi/=(24*phy_vars_ue->lte_frame_parms.N_RB_DL); // phy_vars_ue->PHY_measurements.rssi*=rx_power_correction; @@ -347,16 +373,16 @@ void ue_rrc_measurements(PHY_VARS_UE *phy_vars_ue, #ifdef DEBUG_MEAS - if (slot == 0) { + // if (slot == 0) { if (eNB_offset == 0) - LOG_D(PHY,"[UE %d] Frame %d, slot %d RRC Measurements => rssi %3.1f dBm (digital: %3.1f dB, gain %d), N0 %d dBm\n",phy_vars_ue->Mod_id, + LOG_I(PHY,"[UE %d] Frame %d, slot %d RRC Measurements => rssi %3.1f dBm (digital: %3.1f dB, gain %d), N0 %d dBm\n",phy_vars_ue->Mod_id, phy_vars_ue->frame_rx,slot,10*log10(phy_vars_ue->PHY_measurements.rssi)-phy_vars_ue->rx_total_gain_dB, 10*log10(phy_vars_ue->PHY_measurements.rssi), phy_vars_ue->rx_total_gain_dB, phy_vars_ue->PHY_measurements.n0_power_tot_dBm); - LOG_D(PHY,"[UE %d] Frame %d, slot %d RRC Measurements (idx %d, Cell id %d) => rsrp: %3.1f dBm/RE (%d), rsrq: %3.1f dB\n", + LOG_I(PHY,"[UE %d] Frame %d, slot %d RRC Measurements (idx %d, Cell id %d) => rsrp: %3.1f dBm/RE (%d), rsrq: %3.1f dB\n", phy_vars_ue->Mod_id, phy_vars_ue->frame_rx,slot,eNB_offset, (eNB_offset>0) ? phy_vars_ue->PHY_measurements.adj_cell_id[eNB_offset-1] : phy_vars_ue->lte_frame_parms.Nid_cell, @@ -369,7 +395,7 @@ void ue_rrc_measurements(PHY_VARS_UE *phy_vars_ue, //LOG_D(PHY,"gain_loss_dB: %d \n",phy_vars_ue->rx_total_gain_dB); //LOG_D(PHY,"gain_fixed_dB: %d \n",dB_fixed(phy_vars_ue->lte_frame_parms.N_RB_DL*12)); - } + // } #endif } @@ -383,11 +409,15 @@ void lte_ue_measurements(PHY_VARS_UE *phy_vars_ue, { - int aarx,aatx,eNB_id=0,gain_offset=0; + int aarx,aatx,eNB_id=0; //,gain_offset=0; //int rx_power[NUMBER_OF_CONNECTED_eNB_MAX]; int i; unsigned int limit,subband; +#if defined(__x86_64__) || defined(__i386__) __m128i *dl_ch0_128,*dl_ch1_128; +#elif defined(__arm__) + int16x8_t *dl_ch0_128, *dl_ch1_128; +#endif int *dl_ch0,*dl_ch1; LTE_DL_FRAME_PARMS *frame_parms = &phy_vars_ue->lte_frame_parms; int nb_subbands,subband_size,last_subband_size; @@ -420,37 +450,6 @@ void lte_ue_measurements(PHY_VARS_UE *phy_vars_ue, break; } - /* // DONE NOW in ue_rrc_measurements - if (abstraction_flag!=0) { - phy_vars_ue->PHY_measurements.n0_power_tot = 0; - for (aarx=0; aarxnb_antennas_rx; aarx++) { - phy_vars_ue->PHY_measurements.n0_power[aarx] = pow(10.0,phy_vars_ue->N0/10.0)*pow(10.0,((double)phy_vars_ue->rx_total_gain_dB)/10.0); - phy_vars_ue->PHY_measurements.n0_power_dB[aarx] = (unsigned short) dB_fixed(phy_vars_ue->PHY_measurements.n0_power[aarx]); - phy_vars_ue->PHY_measurements.n0_power_tot += phy_vars_ue->PHY_measurements.n0_power[aarx]; - } - phy_vars_ue->PHY_measurements.n0_power_tot_dB = (unsigned short) dB_fixed(phy_vars_ue->PHY_measurements.n0_power_tot); - phy_vars_ue->PHY_measurements.n0_power_tot_dBm = phy_vars_ue->PHY_measurements.n0_power_tot_dB - phy_vars_ue->rx_total_gain_dB; - } - else if (N0_symbol != 0) { - phy_vars_ue->PHY_measurements.n0_power_tot = 0; - for (aarx=0; aarxnb_antennas_rx; aarx++) { - #ifndef HW_PREFIX_REMOVAL - phy_vars_ue->PHY_measurements.n0_power[aarx] = signal_energy(&phy_vars_ue->lte_ue_common_vars.rxdata[aarx][subframe_offset+frame_parms->ofdm_symbol_size+frame_parms->nb_prefix_samples0],frame_parms->ofdm_symbol_size+frame_parms->nb_prefix_samples); - #else - phy_vars_ue->PHY_measurements.n0_power[aarx] = signal_energy(&phy_vars_ue->lte_ue_common_vars.rxdata[aarx][subframe_offset+frame_parms->ofdm_symbol_size],frame_parms->ofdm_symbol_size); - #endif - phy_vars_ue->PHY_measurements.n0_power_dB[aarx] = (unsigned short) dB_fixed(phy_vars_ue->PHY_measurements.n0_power[aarx]); - phy_vars_ue->PHY_measurements.n0_power_tot += phy_vars_ue->PHY_measurements.n0_power[aarx]; - } - - phy_vars_ue->PHY_measurements.n0_power_tot_dB = (unsigned short) dB_fixed(phy_vars_ue->PHY_measurements.n0_power_tot); - phy_vars_ue->PHY_measurements.n0_power_tot_dBm = phy_vars_ue->PHY_measurements.n0_power_tot_dB - phy_vars_ue->rx_total_gain_dB + gain_offset; - // printf("PHY measurements UE %d: n0_power %d (%d)\n",phy_vars_ue->Mod_id,phy_vars_ue->PHY_measurements.n0_power_tot_dBm,phy_vars_ue->PHY_measurements.n0_power_tot_dB); - } - else { - phy_vars_ue->PHY_measurements.n0_power_tot_dBm = phy_vars_ue->PHY_measurements.n0_power_tot_dB - phy_vars_ue->rx_total_gain_dB + gain_offset; - } - */ // signal measurements for (eNB_id=0; eNB_idn_connected_eNB; eNB_id++) { for (aarx=0; aarxnb_antennas_rx; aarx++) { @@ -507,7 +506,7 @@ void lte_ue_measurements(PHY_VARS_UE *phy_vars_ue, phy_vars_ue->PHY_measurements.wideband_cqi_avg[eNB_id] = dB_fixed2(phy_vars_ue->PHY_measurements.rx_power_avg[eNB_id],phy_vars_ue->PHY_measurements.n0_power_avg); phy_vars_ue->PHY_measurements.rx_rssi_dBm[eNB_id] = phy_vars_ue->PHY_measurements.rx_power_avg_dB[eNB_id] - phy_vars_ue->rx_total_gain_dB; #ifdef DEBUG_MEAS - LOG_D(PHY,"[eNB %d] lte_ue_measurements: RSSI %d dBm, RSSI (digital) %d dB\n", + LOG_I(PHY,"[eNB %d] lte_ue_measurements: RSSI %d dBm, RSSI (digital) %d dB\n", eNB_id,phy_vars_ue->PHY_measurements.rx_rssi_dBm[eNB_id], phy_vars_ue->PHY_measurements.rx_power_avg_dB[eNB_id]); #endif @@ -571,26 +570,30 @@ void lte_ue_measurements(PHY_VARS_UE *phy_vars_ue, for (aarx=0; aarxnb_antennas_rx; aarx++) { // skip the first 4 RE due to interpolation filter length of 5 (not possible to skip 5 due to 128i alignment, must be multiple of 128bit) + +#if defined(__x86_64__) || defined(__i386__) + __m128i pmi128_re,pmi128_im,mmtmpPMI0,mmtmpPMI1,mmtmpPMI2,mmtmpPMI3; + dl_ch0_128 = (__m128i *)&phy_vars_ue->lte_ue_common_vars.dl_ch_estimates[eNB_id][aarx][4]; dl_ch1_128 = (__m128i *)&phy_vars_ue->lte_ue_common_vars.dl_ch_estimates[eNB_id][2+aarx][4]; +#elif defined(__arm__) + int32x4_t pmi128_re,pmi128_im,mmtmpPMI0,mmtmpPMI1,mmtmpPMI0b,mmtmpPMI1b; - /* - #ifdef DEBUG_PHY - if(eNB_id==0){ - print_shorts("Ch0",dl_ch0_128); - print_shorts("Ch1",dl_ch1_128); - printf("eNB_ID = %d\n",eNB_id); - } - #endif - */ + dl_ch0_128 = (int16x8_t *)&phy_vars_ue->lte_ue_common_vars.dl_ch_estimates[eNB_id][aarx][4]; + dl_ch1_128 = (int16x8_t *)&phy_vars_ue->lte_ue_common_vars.dl_ch_estimates[eNB_id][2+aarx][4]; + +#endif for (subband=0; subbandPHY_measurements.subband_pmi_re[eNB_id][subband][aarx] = (((int *)&pmi128_re)[0] + ((int *)&pmi128_re)[1] + ((int *)&pmi128_re)[2] + ((int *)&pmi128_re)[3])>>2; - // if(eNB_id==0) - // printf("in lte_ue_measurements.c: pmi_re %d\n",phy_vars_ue->PHY_measurements.subband_pmi_re[eNB_id][subband][aarx]); phy_vars_ue->PHY_measurements.subband_pmi_im[eNB_id][subband][aarx] = (((int *)&pmi128_im)[0] + ((int *)&pmi128_im)[1] + ((int *)&pmi128_im)[2] + ((int *)&pmi128_im)[3])>>2; - // if(eNB_id==0) - // printf("in lte_ue_measurements.c: pmi_im %d\n",phy_vars_ue->PHY_measurements.subband_pmi_im[eNB_id][subband][aarx]); phy_vars_ue->PHY_measurements.wideband_pmi_re[eNB_id][aarx] += phy_vars_ue->PHY_measurements.subband_pmi_re[eNB_id][subband][aarx]; phy_vars_ue->PHY_measurements.wideband_pmi_im[eNB_id][aarx] += phy_vars_ue->PHY_measurements.subband_pmi_im[eNB_id][subband][aarx]; - // msg("subband_pmi[%d][%d][%d] => (%d,%d)\n",eNB_id,subband,aarx,phy_vars_ue->PHY_measurements.subband_pmi_re[eNB_id][subband][aarx],phy_vars_ue->PHY_measurements.subband_pmi_im[eNB_id][subband][aarx]); - } // subband loop } // rx antenna loop } // if frame_parms->mode1_flag == 0 @@ -708,9 +692,10 @@ void lte_ue_measurements(PHY_VARS_UE *phy_vars_ue, // printf("in lte_ue_measurements: selected rx_antenna[eNB_id==0]:%u\n", phy_vars_ue->PHY_measurements.selected_rx_antennas[eNB_id][i]); } // eNB_id loop +#if defined(__x86_64__) || defined(__i386__) _mm_empty(); _m_empty(); - +#endif } diff --git a/openair1/PHY/LTE_ESTIMATION/lte_ul_channel_estimation.c b/openair1/PHY/LTE_ESTIMATION/lte_ul_channel_estimation.c index a569ddfc71..9a47a6b355 100644 --- a/openair1/PHY/LTE_ESTIMATION/lte_ul_channel_estimation.c +++ b/openair1/PHY/LTE_ESTIMATION/lte_ul_channel_estimation.c @@ -106,9 +106,13 @@ int32_t lte_ul_channel_estimation(PHY_VARS_eNB *phy_vars_eNB, *temp_out_fft_1_ptr = (int32_t*)0,*out_fft_ptr_1 = (int32_t*)0, *temp_in_ifft_ptr = (int32_t*)0; +#if defined(__x86_64__) || defined(__i386__) __m128i *rxdataF128,*ul_ref128,*ul_ch128; __m128i mmtmpU0,mmtmpU1,mmtmpU2,mmtmpU3; - +#elif defined(__arm__) + int16x8_t *rxdataF128,*ul_ref128,*ul_ch128; + int32x4_t mmtmp0,mmtmp1,mmtmp_re,mmtmp_im; +#endif Msc_RS = N_rb_alloc*12; cyclic_shift = (frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.cyclicShift + @@ -156,11 +160,18 @@ int32_t lte_ul_channel_estimation(PHY_VARS_eNB *phy_vars_eNB, for (aa=0; aaN_RB_UL*12*k], - Msc_RS, - 15); + rotate_cpx_vector((int16_t*) ul_ch1, + &ru1[2*current_phase1], + (int16_t*) &ul_ch_estimates[aa][frame_parms->N_RB_UL*12*k], + Msc_RS, + 15); - rotate_cpx_vector_norep((int16_t*) ul_ch2, - &ru2[2*current_phase2], - (int16_t*) &tmp_estimates[0], - Msc_RS, - 15); + rotate_cpx_vector((int16_t*) ul_ch2, + &ru2[2*current_phase2], + (int16_t*) &tmp_estimates[0], + Msc_RS, + 15); // Combine the two rotated estimates multadd_complex_vector_real_scalar((int16_t*) &ul_ch_estimates[aa][frame_parms->N_RB_UL*12*k],SCALE,(int16_t*) &ul_ch_estimates[aa][frame_parms->N_RB_UL*12*k],1,Msc_RS); @@ -664,11 +718,11 @@ int32_t lte_srs_channel_estimation(LTE_DL_FRAME_PARMS *frame_parms, //write_output("eNb_rxF.m","rxF",&eNb_common_vars->rxdataF[0][aa][2*frame_parms->ofdm_symbol_size*symbol],2*(frame_parms->ofdm_symbol_size),2,1); //write_output("eNb_srs.m","srs_eNb",eNb_common_vars->srs,(frame_parms->ofdm_symbol_size),1,1); - mult_cpx_vector_norep((int16_t*) &eNb_common_vars->rxdataF[eNb_id][aa][2*frame_parms->ofdm_symbol_size*symbol], - (int16_t*) eNb_srs_vars->srs, - (int16_t*) eNb_srs_vars->srs_ch_estimates[eNb_id][aa], - frame_parms->ofdm_symbol_size, - 15); + mult_cpx_conj_vector((int16_t*) &eNb_common_vars->rxdataF[eNb_id][aa][2*frame_parms->ofdm_symbol_size*symbol], + (int16_t*) eNb_srs_vars->srs, + (int16_t*) eNb_srs_vars->srs_ch_estimates[eNb_id][aa], + frame_parms->ofdm_symbol_size, + 15); //msg("SRS channel estimation cmult out\n"); #ifdef USER_MODE @@ -695,6 +749,7 @@ int16_t lte_ul_freq_offset_estimation(LTE_DL_FRAME_PARMS *frame_parms, uint16_t nb_rb) { +#if defined(__x86_64__) || defined(__i386__) int k, rb; int a_idx = 64; uint8_t conj_flag = 0; @@ -830,4 +885,7 @@ int16_t lte_ul_freq_offset_estimation(LTE_DL_FRAME_PARMS *frame_parms, phase_idx = -phase_idx; return(phase_idx); +#elif defined(__arm__) + return(0); +#endif } diff --git a/openair1/PHY/LTE_REFSIG/lte_dl_cell_spec.c b/openair1/PHY/LTE_REFSIG/lte_dl_cell_spec.c index 4704e76b23..1a09c83372 100644 --- a/openair1/PHY/LTE_REFSIG/lte_dl_cell_spec.c +++ b/openair1/PHY/LTE_REFSIG/lte_dl_cell_spec.c @@ -94,9 +94,9 @@ int lte_dl_cell_spec_SS(PHY_VARS_eNB *phy_vars_eNB, output[k] = qpsk[(phy_vars_eNB->lte_gold_table[Ns][l][mprime_dword]>>(2*mprime_qpsk_symb))&3]; //output[k] = (lte_gold_table[eNB_offset][Ns][l][mprime_dword]>>(2*mprime_qpsk_symb))&3; #ifdef DEBUG_DL_CELL_SPEC - debug_msg("Ns %d, l %d, m %d,mprime_dword %d, mprime_qpsk_symbol %d\n", + msg("Ns %d, l %d, m %d,mprime_dword %d, mprime_qpsk_symbol %d\n", Ns,l,m,mprime_dword,mprime_qpsk_symb); - debug_msg("index = %d (k %d)\n",(phy_vars_eNB->lte_gold_table[Ns][l][mprime_dword]>>(2*mprime_qpsk_symb))&3,k); + msg("index = %d (k %d)\n",(phy_vars_eNB->lte_gold_table[Ns][l][mprime_dword]>>(2*mprime_qpsk_symb))&3,k); #endif mprime++; diff --git a/openair1/PHY/LTE_TRANSPORT/dci.c b/openair1/PHY/LTE_TRANSPORT/dci.c index 27207272d5..43d2410cbb 100644 --- a/openair1/PHY/LTE_TRANSPORT/dci.c +++ b/openair1/PHY/LTE_TRANSPORT/dci.c @@ -86,7 +86,7 @@ uint32_t check_phich_reg(LTE_DL_FRAME_PARMS *frame_parms,uint32_t kprime,uint8_t (mprime == pcfich_reg[2]) || (mprime == pcfich_reg[3]))) { #ifdef DEBUG_DCI_ENCODING - msg("[PHY] REG %d allocated to PCFICH\n",mprime); + printf("[PHY] REG %d allocated to PCFICH\n",mprime); #endif return(1); } @@ -109,7 +109,7 @@ uint32_t check_phich_reg(LTE_DL_FRAME_PARMS *frame_parms,uint32_t kprime,uint8_t (mprime == frame_parms->phich_reg[i][1]) || (mprime == frame_parms->phich_reg[i][2])) { #ifdef DEBUG_DCI_ENCODING - msg("[PHY] REG %d (lprime %d) allocated to PHICH\n",mprime,lprime); + printf("[PHY] REG %d (lprime %d) allocated to PHICH\n",mprime,lprime); #endif return(1); } @@ -139,7 +139,7 @@ uint16_t extract_crc(uint8_t *dci,uint8_t dci_len) printf("extract_crc: crc %x\n",crc); */ #ifdef DEBUG_DCI_DECODING - msg("dci_crc (%x,%x,%x), dci_len&0x7=%d\n",dci[dci_len>>3],dci[1+(dci_len>>3)],dci[2+(dci_len>>3)], + LOG_I(PHY,"dci_crc (%x,%x,%x), dci_len&0x7=%d\n",dci[dci_len>>3],dci[1+(dci_len>>3)],dci[2+(dci_len>>3)], dci_len&0x7); #endif @@ -152,7 +152,7 @@ uint16_t extract_crc(uint8_t *dci,uint8_t dci_len) } #ifdef DEBUG_DCI_DECODING - msg("dci_crc =>%x\n",crc16); + LOG_I(PHY,"dci_crc =>%x\n",crc16); #endif // dci[(dci_len>>3)]&=(0xffff<<(dci_len&0xf)); @@ -184,7 +184,7 @@ void dci_encoding(uint8_t *a, // encode dci #ifdef DEBUG_DCI_ENCODING - msg("Doing DCI encoding for %d bits, e %p, rnti %x\n",A,e,rnti); + printf("Doing DCI encoding for %d bits, e %p, rnti %x\n",A,e,rnti); #endif memset((void *)d,LTE_NULL,96); @@ -194,17 +194,17 @@ void dci_encoding(uint8_t *a, #ifdef DEBUG_DCI_ENCODING for (i=0; i<16+A; i++) - msg("%d : (%d,%d,%d)\n",i,*(d+96+(3*i)),*(d+97+(3*i)),*(d+98+(3*i))); + printf("%d : (%d,%d,%d)\n",i,*(d+96+(3*i)),*(d+97+(3*i)),*(d+98+(3*i))); #endif #ifdef DEBUG_DCI_ENCODING - msg("Doing DCI interleaving for %d coded bits, e %p\n",D*3,e); + printf("Doing DCI interleaving for %d coded bits, e %p\n",D*3,e); #endif RCC = sub_block_interleaving_cc(D,d+96,w); #ifdef DEBUG_DCI_ENCODING - msg("Doing DCI rate matching for %d channel bits, RCC %d, e %p\n",E,RCC,e); + printf("Doing DCI rate matching for %d channel bits, RCC %d, e %p\n",E,RCC,e); #endif lte_rate_matching_cc(RCC,E,w,e); @@ -223,7 +223,7 @@ uint8_t *generate_dci0(uint8_t *dci, uint8_t dci_flip[8]; if (aggregation_level>3) { - msg("dci.c: generate_dci FATAL, illegal aggregation_level %d\n",aggregation_level); + printf("dci.c: generate_dci FATAL, illegal aggregation_level %d\n",aggregation_level); return NULL; } @@ -233,7 +233,7 @@ uint8_t *generate_dci0(uint8_t *dci, #ifdef DEBUG_DCI_ENCODING for (i=0;i<1+((DCI_LENGTH+16)/8);i++) - msg("i %d : %x\n",i,dci[i]); + printf("i %d : %x\n",i,dci[i]); #endif */ if (DCI_LENGTH<=32) { @@ -251,7 +251,7 @@ uint8_t *generate_dci0(uint8_t *dci, dci_flip[6] = dci[1]; dci_flip[7] = dci[0]; #ifdef DEBUG_DCI_ENCODING - msg("DCI => %x,%x,%x,%x,%x,%x,%x,%x\n", + printf("DCI => %x,%x,%x,%x,%x,%x,%x,%x\n", dci_flip[0],dci_flip[1],dci_flip[2],dci_flip[3], dci_flip[4],dci_flip[5],dci_flip[6],dci_flip[7]); #endif @@ -286,7 +286,7 @@ void pdcch_interleaving(LTE_DL_FRAME_PARMS *frame_parms,mod_sym_t **z, mod_sym_t int32_t nulled=0; #endif - // msg("[PHY] PDCCH Interleaving Mquad %d (Nsymb %d)\n",Mquad,n_symbols_pdcch); + // printf("[PHY] PDCCH Interleaving Mquad %d (Nsymb %d)\n",Mquad,n_symbols_pdcch); if ((Mquad&0x1f) > 0) RCC++; @@ -299,15 +299,15 @@ void pdcch_interleaving(LTE_DL_FRAME_PARMS *frame_parms,mod_sym_t **z, mod_sym_t index = bitrev_cc_dci[col]; for (row=0; row=ND) { for (a=0; anb_antennas_tx_eNB; a++) { - //msg("a %d k %d\n",a,k); + //printf("a %d k %d\n",a,k); wptr = &wtemp[a][k<<2]; zptr = &z[a][(index-ND)<<2]; - //msg("wptr=%p, zptr=%p\n",wptr,zptr); + //printf("wptr=%p, zptr=%p\n",wptr,zptr); wptr[0] = zptr[0]; wptr[1] = zptr[1]; @@ -396,11 +396,11 @@ void pdcch_demapping(uint16_t *llr,uint16_t *wbar,LTE_DL_FRAME_PARMS *frame_parm // if REG is allocated to PHICH, skip it if (check_phich_reg(frame_parms,kprime,lprime,mi) == 1) { - //msg("dci_demapping : skipping REG %d\n",(lprime==0)?kprime/6 : kprime>>2); - if ((lprime == 0)&&((kprime%6)==0)) - re_offset0+=4; + // printf("dci_demapping : skipping REG %d (RE %d)\n",(lprime==0)?kprime/6 : kprime>>2,kprime); + if ((lprime == 0)&&((kprime%6)==0)) + re_offset0+=4; } else { // not allocated to PHICH/PCFICH - // msg("dci_demapping: REG %d\n",(lprime==0)?kprime/6 : kprime>>2); + // printf("dci_demapping: REG %d\n",(lprime==0)?kprime/6 : kprime>>2); if (lprime == 0) { // first symbol, or second symbol+4 TX antennas skip pilots kprime_mod12 = kprime%12; @@ -411,7 +411,7 @@ void pdcch_demapping(uint16_t *llr,uint16_t *wbar,LTE_DL_FRAME_PARMS *frame_parm for (i=0; i<4; i++) { wbar[mprime] = llr[tti_offset0+i]; #ifdef DEBUG_DCI_DECODING - msg("[PHY] PDCCH demapping mprime %d => %d (symbol %d re %d) -> (%d,%d)\n",mprime,tti_offset0,symbol_offset,re_offset0,*(char*)&wbar[mprime],*(1+(char*)&wbar[mprime])); + LOG_I(PHY,"PDCCH demapping mprime %d.%d <= llr %d (symbol %d re %d) -> (%d,%d)\n",mprime/4,i,tti_offset0+i,symbol_offset,re_offset0,*(char*)&wbar[mprime],*(1+(char*)&wbar[mprime])); #endif mprime++; re_offset0++; @@ -427,7 +427,7 @@ void pdcch_demapping(uint16_t *llr,uint16_t *wbar,LTE_DL_FRAME_PARMS *frame_parm for (i=0; i<4; i++) { wbar[mprime] = llr[tti_offset+i]; #ifdef DEBUG_DCI_DECODING - msg("[PHY] PDCCH demapping mprime %d => %d (symbol %d re %d) -> (%d,%d)\n",mprime,tti_offset,symbol_offset,re_offset+i,*(char*)&wbar[mprime],*(1+(char*)&wbar[mprime])); + LOG_I(PHY,"PDCCH demapping mprime %d.%d <= llr %d (symbol %d re %d) -> (%d,%d)\n",mprime/4,i,tti_offset+i,symbol_offset,re_offset+i,*(char*)&wbar[mprime],*(1+(char*)&wbar[mprime])); #endif mprime++; } @@ -460,14 +460,12 @@ void pdcch_deinterleaving(LTE_DL_FRAME_PARMS *frame_parms,uint16_t *z, uint16_t // printf("Mquad %d, RCC %d\n",Mquad,RCC); if (!z) { - msg("dci.c: pdcch_deinterleaving: FATAL z is Null\n"); + printf("dci.c: pdcch_deinterleaving: FATAL z is Null\n"); return; } // undo permutation for (i=0; iNid_cell)%Mquad)<<2]; wptr = &wtemp_rx[((i+frame_parms->Nid_cell)%Mquad)<<2]; wptr2 = &wbar[i<<2]; @@ -475,16 +473,16 @@ void pdcch_deinterleaving(LTE_DL_FRAME_PARMS *frame_parms,uint16_t *z, uint16_t wptr[1] = wptr2[1]; wptr[2] = wptr2[2]; wptr[3] = wptr2[3]; - /* - msg("pdcch_deinterleaving (%p,%p): quad %d -> (%d,%d %d,%d %d,%d %d,%d)\n",wptr,wptr2,i, - ((char*)wptr2)[0], - ((char*)wptr2)[1], - ((char*)wptr2)[2], - ((char*)wptr2)[3], - ((char*)wptr2)[4], - ((char*)wptr2)[5], - ((char*)wptr2)[6], - ((char*)wptr2)[7]); + /* + printf("pdcch_deinterleaving (%p,%p): quad %d (%d) -> (%d,%d %d,%d %d,%d %d,%d)\n",wptr,wptr2,i,(i+frame_parms->Nid_cell)%Mquad, + ((char*)wptr2)[0], + ((char*)wptr2)[1], + ((char*)wptr2)[2], + ((char*)wptr2)[3], + ((char*)wptr2)[4], + ((char*)wptr2)[5], + ((char*)wptr2)[6], + ((char*)wptr2)[7]); */ } @@ -514,7 +512,7 @@ void pdcch_deinterleaving(LTE_DL_FRAME_PARMS *frame_parms,uint16_t *z, uint16_t zptr[2] = wptr[2]; zptr[3] = wptr[3]; - /* + /* printf("deinterleaving ; k %d, index-Nd %d => (%d,%d,%d,%d,%d,%d,%d,%d)\n",k,(index-ND), ((int8_t *)wptr)[0], ((int8_t *)wptr)[1], @@ -524,7 +522,7 @@ void pdcch_deinterleaving(LTE_DL_FRAME_PARMS *frame_parms,uint16_t *z, uint16_t ((int8_t *)wptr)[5], ((int8_t *)wptr)[6], ((int8_t *)wptr)[7]); - */ + */ k++; } @@ -535,7 +533,7 @@ void pdcch_deinterleaving(LTE_DL_FRAME_PARMS *frame_parms,uint16_t *z, uint16_t for (i=0; i (%d,%d,%d,%d,%d,%d,%d,%d)\n",i, ((int8_t *)zptr)[0], ((int8_t *)zptr)[1], @@ -545,7 +543,7 @@ void pdcch_deinterleaving(LTE_DL_FRAME_PARMS *frame_parms,uint16_t *z, uint16_t ((int8_t *)zptr)[5], ((int8_t *)zptr)[6], ((int8_t *)zptr)[7]); - */ + */ } } @@ -560,10 +558,10 @@ int32_t pdcch_qpsk_qpsk_llr(LTE_DL_FRAME_PARMS *frame_parms, uint8_t symbol) { - __m128i *rxF=(__m128i*)&rxdataF_comp[0][(symbol*frame_parms->N_RB_DL*12)]; - __m128i *rxF_i=(__m128i*)&rxdataF_comp_i[0][(symbol*frame_parms->N_RB_DL*12)]; - __m128i *rho=(__m128i*)&rho_i[0][(symbol*frame_parms->N_RB_DL*12)]; - __m128i *llr128; + int16_t *rxF=(int16_t*)&rxdataF_comp[0][(symbol*frame_parms->N_RB_DL*12)]; + int16_t *rxF_i=(int16_t*)&rxdataF_comp_i[0][(symbol*frame_parms->N_RB_DL*12)]; + int16_t *rho=(int16_t*)&rho_i[0][(symbol*frame_parms->N_RB_DL*12)]; + int16_t *llr128; int32_t i; char *pdcch_llr8; int16_t *pdcch_llr; @@ -572,17 +570,17 @@ int32_t pdcch_qpsk_qpsk_llr(LTE_DL_FRAME_PARMS *frame_parms, // printf("dlsch_qpsk_qpsk: symbol %d\n",symbol); - llr128 = (__m128i*)pdcch_llr; + llr128 = (int16_t*)pdcch_llr; if (!llr128) { - msg("dlsch_qpsk_qpsk_llr: llr is null, symbol %d\n",symbol); + printf("dlsch_qpsk_qpsk_llr: llr is null, symbol %d\n",symbol); return -1; } - qpsk_qpsk((int16_t *)rxF, - (int16_t *)rxF_i, - (int16_t *)llr128, - (int16_t *)rho, + qpsk_qpsk(rxF, + rxF_i, + llr128, + rho, frame_parms->N_RB_DL*12); //prepare for Viterbi which accepts 8 bit, but prefers 4 bit, soft input. @@ -615,11 +613,11 @@ int32_t pdcch_llr(LTE_DL_FRAME_PARMS *frame_parms, pdcch_llr8 = &pdcch_llr[2*symbol*frame_parms->N_RB_DL*12]; if (!pdcch_llr8) { - msg("pdcch_qpsk_llr: llr is null, symbol %d\n",symbol); + printf("pdcch_qpsk_llr: llr is null, symbol %d\n",symbol); return(-1); } - // msg("pdcch qpsk llr for symbol %d (pos %d), llr offset %d\n",symbol,(symbol*frame_parms->N_RB_DL*12),pdcch_llr8-pdcch_llr); + // printf("pdcch qpsk llr for symbol %d (pos %d), llr offset %d\n",symbol,(symbol*frame_parms->N_RB_DL*12),pdcch_llr8-pdcch_llr); for (i=0; i<(frame_parms->N_RB_DL*((symbol==0) ? 16 : 24)); i++) { @@ -639,7 +637,7 @@ int32_t pdcch_llr(LTE_DL_FRAME_PARMS *frame_parms, } -__m128i avg128P; +//__m128i avg128P; //compute average channel_level on each (TX,RX) antenna pair void pdcch_channel_level(int32_t **dl_ch_estimates_ext, @@ -650,21 +648,31 @@ void pdcch_channel_level(int32_t **dl_ch_estimates_ext, int16_t rb; uint8_t aatx,aarx; +#if defined(__x86_64__) || defined(__i386__) __m128i *dl_ch128; - - + __m128i avg128P; +#elif defined(__arm__) + int16x8_t *dl_ch128; + int32x4_t *avg128P; +#endif for (aatx=0; aatxnb_antennas_tx_eNB; aatx++) for (aarx=0; aarxnb_antennas_rx; aarx++) { //clear average level +#if defined(__x86_64__) || defined(__i386__) avg128P = _mm_setzero_si128(); dl_ch128=(__m128i *)&dl_ch_estimates_ext[(aatx<<1)+aarx][frame_parms->N_RB_DL*12]; +#elif defined(__arm__) +#endif for (rb=0; rbnb_antennas_rx; aarx++) { +#if defined(__x86_64__) || defined(__i386__) dl_ch128 = (__m128i *)&dl_ch_estimates_ext[aarx][symbol*frame_parms->N_RB_DL*12]; dl_ch128i = (__m128i *)&dl_ch_estimates_ext_i[aarx][symbol*frame_parms->N_RB_DL*12]; dl_ch_rho128 = (__m128i *)&dl_ch_rho_ext[aarx][symbol*frame_parms->N_RB_DL*12]; +#elif defined(__arm__) + +#endif for (rb=0; rbN_RB_DL; rb++) { // multiply by conjugated channel +#if defined(__x86_64__) || defined(__i386__) mmtmpPD0 = _mm_madd_epi16(dl_ch128[0],dl_ch128i[0]); // print_ints("re",&mmtmpPD0); @@ -778,13 +801,16 @@ void pdcch_dual_stream_correlation(LTE_DL_FRAME_PARMS *frame_parms, dl_ch128i+=3; dl_ch_rho128+=3; - } +#elif defined(__arm__) + +#endif + } } - +#if defined(__x86_64__) || defined(__i386__) _mm_empty(); _m_empty(); - +#endif } @@ -799,44 +825,78 @@ void pdcch_detection_mrc_i(LTE_DL_FRAME_PARMS *frame_parms, uint8_t aatx; +#if defined(__x86_64__) || defined(__i386__) __m128i *rxdataF_comp128_0,*rxdataF_comp128_1,*rxdataF_comp128_i0,*rxdataF_comp128_i1,*rho128_0,*rho128_1,*rho128_i0,*rho128_i1; +#elif defined(__arm__) + int16x8_t *rxdataF_comp128_0,*rxdataF_comp128_1,*rxdataF_comp128_i0,*rxdataF_comp128_i1,*rho128_0,*rho128_1,*rho128_i0,*rho128_i1; +#endif int32_t i; if (frame_parms->nb_antennas_rx>1) { for (aatx=0; aatxnb_antennas_tx_eNB; aatx++) { //if (frame_parms->mode1_flag && (aatx>0)) break; +#if defined(__x86_64__) || defined(__i386__) rxdataF_comp128_0 = (__m128i *)&rxdataF_comp[(aatx<<1)][symbol*frame_parms->N_RB_DL*12]; rxdataF_comp128_1 = (__m128i *)&rxdataF_comp[(aatx<<1)+1][symbol*frame_parms->N_RB_DL*12]; - +#elif defined(__arm__) + rxdataF_comp128_0 = (int16x8_t *)&rxdataF_comp[(aatx<<1)][symbol*frame_parms->N_RB_DL*12]; + rxdataF_comp128_1 = (int16x8_t *)&rxdataF_comp[(aatx<<1)+1][symbol*frame_parms->N_RB_DL*12]; +#endif // MRC on each re of rb on MF output for (i=0; iN_RB_DL*3; i++) { +#if defined(__x86_64__) || defined(__i386__) rxdataF_comp128_0[i] = _mm_adds_epi16(_mm_srai_epi16(rxdataF_comp128_0[i],1),_mm_srai_epi16(rxdataF_comp128_1[i],1)); +#elif defined(__arm__) + rxdataF_comp128_0[i] = vhaddq_s16(rxdataF_comp128_0[i],rxdataF_comp128_1[i]); +#endif } } +#if defined(__x86_64__) || defined(__i386__) rho128_0 = (__m128i *) &rho[0][symbol*frame_parms->N_RB_DL*12]; rho128_1 = (__m128i *) &rho[1][symbol*frame_parms->N_RB_DL*12]; - +#elif defined(__arm__) + rho128_0 = (int16x8_t *) &rho[0][symbol*frame_parms->N_RB_DL*12]; + rho128_1 = (int16x8_t *) &rho[1][symbol*frame_parms->N_RB_DL*12]; +#endif for (i=0; iN_RB_DL*3; i++) { +#if defined(__x86_64__) || defined(__i386__) rho128_0[i] = _mm_adds_epi16(_mm_srai_epi16(rho128_0[i],1),_mm_srai_epi16(rho128_1[i],1)); +#elif defined(__arm__) + rho128_0[i] = vhaddq_s16(rho128_0[i],rho128_1[i]); +#endif } +#if defined(__x86_64__) || defined(__i386__) rho128_i0 = (__m128i *) &rho_i[0][symbol*frame_parms->N_RB_DL*12]; rho128_i1 = (__m128i *) &rho_i[1][symbol*frame_parms->N_RB_DL*12]; rxdataF_comp128_i0 = (__m128i *)&rxdataF_comp_i[0][symbol*frame_parms->N_RB_DL*12]; rxdataF_comp128_i1 = (__m128i *)&rxdataF_comp_i[1][symbol*frame_parms->N_RB_DL*12]; +#elif defined(__arm__) + rho128_i0 = (int16x8_t*) &rho_i[0][symbol*frame_parms->N_RB_DL*12]; + rho128_i1 = (int16x8_t*) &rho_i[1][symbol*frame_parms->N_RB_DL*12]; + rxdataF_comp128_i0 = (int16x8_t *)&rxdataF_comp_i[0][symbol*frame_parms->N_RB_DL*12]; + rxdataF_comp128_i1 = (int16x8_t *)&rxdataF_comp_i[1][symbol*frame_parms->N_RB_DL*12]; +#endif // MRC on each re of rb on MF and rho for (i=0; iN_RB_DL*3; i++) { +#if defined(__x86_64__) || defined(__i386__) rxdataF_comp128_i0[i] = _mm_adds_epi16(_mm_srai_epi16(rxdataF_comp128_i0[i],1),_mm_srai_epi16(rxdataF_comp128_i1[i],1)); rho128_i0[i] = _mm_adds_epi16(_mm_srai_epi16(rho128_i0[i],1),_mm_srai_epi16(rho128_i1[i],1)); +#elif defined(__arm__) + rxdataF_comp128_i0[i] = vhaddq_s16(rxdataF_comp128_i0[i],rxdataF_comp128_i1[i]); + rho128_i0[i] = vhaddq_s16(rho128_i0[i],rho128_i1[i]); + +#endif } } +#if defined(__x86_64__) || defined(__i386__) _mm_empty(); _m_empty(); - +#endif } @@ -860,7 +920,7 @@ void pdcch_extract_rbs_single(int32_t **rxdataF, symbol_mod = (symbol>=(7-frame_parms->Ncp)) ? symbol-(7-frame_parms->Ncp) : symbol; #ifdef DEBUG_DCI_DECODING - msg("[PHY] extract_rbs_single: symbol_mod %d\n",symbol_mod); + LOG_I(PHY, "extract_rbs_single: symbol_mod %d\n",symbol_mod); #endif for (aarx=0; aarxnb_antennas_rx; aarx++) { @@ -964,7 +1024,7 @@ void pdcch_extract_rbs_single(int32_t **rxdataF, } // Do middle RB (around DC) - // msg("dlch_ext %d\n",dl_ch0_ext-&dl_ch_estimates_ext[aarx][0]); + // printf("dlch_ext %d\n",dl_ch0_ext-&dl_ch_estimates_ext[aarx][0]); if (symbol_mod==0) { j=0; @@ -1055,10 +1115,6 @@ void pdcch_extract_rbs_single(int32_t **rxdataF, } } } - - _mm_empty(); - _m_empty(); - } void pdcch_extract_rbs_dual(int32_t **rxdataF, @@ -1092,7 +1148,7 @@ void pdcch_extract_rbs_dual(int32_t **rxdataF, dl_ch0_ext = &dl_ch_estimates_ext[aarx][symbol*(frame_parms->N_RB_DL*12)]; dl_ch1_ext = &dl_ch_estimates_ext[2+aarx][symbol*(frame_parms->N_RB_DL*12)]; - // msg("pdcch extract_rbs: rxF_ext pos %d\n",symbol*(frame_parms->N_RB_DL*12)); + // printf("pdcch extract_rbs: rxF_ext pos %d\n",symbol*(frame_parms->N_RB_DL*12)); rxF_ext = &rxdataF_ext[aarx][symbol*(frame_parms->N_RB_DL*12)]; rxF = &rxdataF[aarx][(frame_parms->first_carrier_offset + (symbol*(frame_parms->ofdm_symbol_size)))]; @@ -1112,14 +1168,14 @@ void pdcch_extract_rbs_dual(int32_t **rxdataF, memcpy(dl_ch1_ext,dl_ch1,12*sizeof(int32_t)); /* - msg("rb %d\n",rb); + printf("rb %d\n",rb); for (i=0;i<12;i++) - msg("(%d %d)",((int16_t *)dl_ch0)[i<<1],((int16_t*)dl_ch0)[1+(i<<1)]); - msg("\n"); + printf("(%d %d)",((int16_t *)dl_ch0)[i<<1],((int16_t*)dl_ch0)[1+(i<<1)]); + printf("\n"); */ for (i=0; i<12; i++) { rxF_ext[i]=rxF[i]; - // msg("%d : (%d,%d)\n",(rxF+(2*i)-&rxdataF[aarx][( (symbol*(frame_parms->ofdm_symbol_size)))*2])/2, + // printf("%d : (%d,%d)\n",(rxF+(2*i)-&rxdataF[aarx][( (symbol*(frame_parms->ofdm_symbol_size)))*2])/2, // ((int16_t*)&rxF[i<<1])[0],((int16_t*)&rxF[i<<1])[0]); } @@ -1156,7 +1212,7 @@ void pdcch_extract_rbs_dual(int32_t **rxdataF, else { // Odd number of RBs for (rb=0; rbN_RB_DL>>1; rb++) { - // msg("rb %d: %d\n",rb,rxF-&rxdataF[aarx][(symbol*(frame_parms->ofdm_symbol_size))*2]); + // printf("rb %d: %d\n",rb,rxF-&rxdataF[aarx][(symbol*(frame_parms->ofdm_symbol_size))*2]); if (symbol_mod>0) { memcpy(dl_ch0_ext,dl_ch0,12*sizeof(int32_t)); @@ -1267,7 +1323,7 @@ void pdcch_extract_rbs_dual(int32_t **rxdataF, for (; rbN_RB_DL; rb++) { if (symbol_mod>0) { - // msg("rb %d: %d\n",rb,rxF-&rxdataF[aarx][(symbol*(frame_parms->ofdm_symbol_size))*2]); + // printf("rb %d: %d\n",rb,rxF-&rxdataF[aarx][(symbol*(frame_parms->ofdm_symbol_size))*2]); memcpy(dl_ch0_ext,dl_ch0,12*sizeof(int32_t)); memcpy(dl_ch1_ext,dl_ch1,12*sizeof(int32_t)); @@ -1309,11 +1365,6 @@ void pdcch_extract_rbs_dual(int32_t **rxdataF, } } } - - _mm_empty(); - _m_empty(); - - } @@ -1327,15 +1378,19 @@ void pdcch_channel_compensation(int32_t **rxdataF_ext, { uint16_t rb; +#if defined(__x86_64__) || defined(__i386__) __m128i *dl_ch128,*rxdataF128,*rxdataF_comp128; __m128i *dl_ch128_2, *rho128; +#elif defined(__arm__) + +#endif uint8_t aatx,aarx,pilots=0; #ifdef DEBUG_DCI_DECODING - msg("[PHY] PDCCH comp: symbol %d\n",symbol); + LOG_I(PHY, "PDCCH comp: symbol %d\n",symbol); #endif if (symbol==0) @@ -1346,13 +1401,18 @@ void pdcch_channel_compensation(int32_t **rxdataF_ext, for (aarx=0; aarxnb_antennas_rx; aarx++) { +#if defined(__x86_64__) || defined(__i386__) dl_ch128 = (__m128i *)&dl_ch_estimates_ext[(aatx<<1)+aarx][symbol*frame_parms->N_RB_DL*12]; rxdataF128 = (__m128i *)&rxdataF_ext[aarx][symbol*frame_parms->N_RB_DL*12]; rxdataF_comp128 = (__m128i *)&rxdataF_comp[(aatx<<1)+aarx][symbol*frame_parms->N_RB_DL*12]; +#elif defined(__arm__) + +#endif for (rb=0; rbN_RB_DL; rb++) { +#if defined(__x86_64__) || defined(__i386__) // multiply by conjugated channel mmtmpPD0 = _mm_madd_epi16(dl_ch128[0],rxdataF128[0]); // print_ints("re",&mmtmpPD0); @@ -1425,6 +1485,9 @@ void pdcch_channel_compensation(int32_t **rxdataF_ext, rxdataF128+=2; rxdataF_comp128+=2; } +#elif defined(__arm__) + +#endif } } } @@ -1433,11 +1496,18 @@ void pdcch_channel_compensation(int32_t **rxdataF_ext, if (rho) { for (aarx=0; aarxnb_antennas_rx; aarx++) { + +#if defined(__x86_64__) || defined(__i386__) rho128 = (__m128i *)&rho[aarx][symbol*frame_parms->N_RB_DL*12]; dl_ch128 = (__m128i *)&dl_ch_estimates_ext[aarx][symbol*frame_parms->N_RB_DL*12]; dl_ch128_2 = (__m128i *)&dl_ch_estimates_ext[2+aarx][symbol*frame_parms->N_RB_DL*12]; +#elif defined(__arm__) + +#endif for (rb=0; rbN_RB_DL; rb++) { +#if defined(__x86_64__) || defined(__i386__) + // multiply by conjugated channel mmtmpPD0 = _mm_madd_epi16(dl_ch128[0],dl_ch128_2[0]); // print_ints("re",&mmtmpD0); @@ -1503,14 +1573,19 @@ void pdcch_channel_compensation(int32_t **rxdataF_ext, dl_ch128_2+=3; rho128+=3; +#elif defined(__arm_) + + +#endif } } } +#if defined(__x86_64__) || defined(__i386__) _mm_empty(); _m_empty(); - +#endif } void pdcch_detection_mrc(LTE_DL_FRAME_PARMS *frame_parms, @@ -1520,23 +1595,37 @@ void pdcch_detection_mrc(LTE_DL_FRAME_PARMS *frame_parms, uint8_t aatx; +#if defined(__x86_64__) || defined(__i386__) __m128i *rxdataF_comp128_0,*rxdataF_comp128_1; +#elif defined(__arm__) + int16x8_t *rxdataF_comp128_0,*rxdataF_comp128_1; +#endif int32_t i; if (frame_parms->nb_antennas_rx>1) { for (aatx=0; aatxnb_antennas_tx_eNB; aatx++) { +#if defined(__x86_64__) || defined(__i386__) rxdataF_comp128_0 = (__m128i *)&rxdataF_comp[(aatx<<1)][symbol*frame_parms->N_RB_DL*12]; rxdataF_comp128_1 = (__m128i *)&rxdataF_comp[(aatx<<1)+1][symbol*frame_parms->N_RB_DL*12]; - +#elif defined(__arm__) + rxdataF_comp128_0 = (int16x8_t *)&rxdataF_comp[(aatx<<1)][symbol*frame_parms->N_RB_DL*12]; + rxdataF_comp128_1 = (int16x8_t *)&rxdataF_comp[(aatx<<1)+1][symbol*frame_parms->N_RB_DL*12]; +#endif // MRC on each re of rb for (i=0; iN_RB_DL*3; i++) { +#if defined(__x86_64__) || defined(__i386__) rxdataF_comp128_0[i] = _mm_adds_epi16(_mm_srai_epi16(rxdataF_comp128_0[i],1),_mm_srai_epi16(rxdataF_comp128_1[i],1)); +#elif defined(__arm__) + rxdataF_comp128_0[i] = vhaddq_s16(rxdataF_comp128_0[i],rxdataF_comp128_1[i]); +#endif } } } +#if defined(__x86_64__) || defined(__i386__) _mm_empty(); _m_empty(); +#endif } @@ -1592,8 +1681,6 @@ void pdcch_alamouti(LTE_DL_FRAME_PARMS *frame_parms, } } - _mm_empty(); - _m_empty(); } @@ -1667,9 +1754,9 @@ int32_t rx_pdcch(LTE_UE_COMMON *lte_ue_common_vars, for (aarx=0; aarxnb_antennas_rx; aarx++) avgs = cmax(avgs,avgP[(aarx<<1)+aatx]); - log2_maxh = (log2_approx(avgs)/2) + 2 + frame_parms->nb_antennas_rx - 1; + log2_maxh = (log2_approx(avgs)/2) + 6 + frame_parms->nb_antennas_rx - 1; #ifdef DEBUG_PHY - msg("[PDCCH] log2_maxh = %d (%d,%d)\n",log2_maxh,avgP[0],avgs); + LOG_I(PHY,"subframe %d: pdcch log2_maxh = %d (%d,%d)\n",subframe,log2_maxh,avgP[0],avgs); #endif @@ -1785,10 +1872,11 @@ int32_t rx_pdcch(LTE_UE_COMMON *lte_ue_common_vars, if (n_pdcch_symbols>3) n_pdcch_symbols=1; -#ifdef DEBUG_DCI_DECODING - msg("[PDCCH] subframe %d n_pdcch_symbols from PCFICH =%d\n",subframe,n_pdcch_symbols); - msg("demapping: subframe %d, mi %d, tdd_config %d\n",subframe,get_mi(frame_parms,subframe),frame_parms->tdd_config); +#ifdef DEBUG_DCI_DECODING + printf("[PDCCH] subframe %d n_pdcch_symbols from PCFICH =%d\n",subframe,n_pdcch_symbols); + + printf("demapping: subframe %d, mi %d, tdd_config %d\n",subframe,get_mi(frame_parms,subframe),frame_parms->tdd_config); #endif pdcch_demapping(lte_ue_pdcch_vars[eNB_id]->llr, @@ -1857,16 +1945,17 @@ void pdcch_unscrambling(LTE_DL_FRAME_PARMS *frame_parms, x2 = (subframe<<9) + frame_parms->Nid_cell; //this is c_init in 36.211 Sec 6.8.2 for (i=0; i>(i&0x1f))&1)); + + // printf("unscrambling %d : e %d, c %d => ",i,llr[i],((s>>(i&0x1f))&1)); if (((s>>(i%32))&1)==0) llr[i] = -llr[i]; + // printf("%d\n",llr[i]); } } @@ -1924,7 +2013,7 @@ uint8_t get_num_pdcch_symbols(uint8_t num_dci, } - msg("[PHY] dci.c: get_num_pdcch_symbols subframe %d FATAL, illegal numCCE %d (num_dci %d)\n",subframe,numCCE,num_dci); + LOG_I(PHY," dci.c: get_num_pdcch_symbols subframe %d FATAL, illegal numCCE %d (num_dci %d)\n",subframe,numCCE,num_dci); //for (i=0;i, here we set elements as 2 - //memset(e, 2, DCI_BITS_MAX); - // here we interpret NIL as a random QPSK sequence. That makes power estimation easier. - for (i=0; i>2),kprime,lprime); + printf("generate_dci: skipping REG %d (kprime %d, lprime %d)\n",(lprime==0)?(kprime/6) : (kprime>>2),kprime,lprime); #endif } else { // Copy REG to TX buffer @@ -2389,15 +2477,15 @@ void dci_decoding(uint8_t DCI_LENGTH, memset(decoded_output,0,2+((16+DCI_LENGTH)>>3)); #ifdef DEBUG_DCI_DECODING - msg("Before Viterbi\n"); + printf("Before Viterbi\n"); for (i=0; i<16+DCI_LENGTH; i++) - msg("%d : (%d,%d,%d)\n",i,*(d_rx+96+(3*i)),*(d_rx+97+(3*i)),*(d_rx+98+(3*i))); + printf("%d : (%d,%d,%d)\n",i,*(d_rx+96+(3*i)),*(d_rx+97+(3*i)),*(d_rx+98+(3*i))); #endif - //debug_msg("Doing DCI Viterbi \n"); + //debug_printf("Doing DCI Viterbi \n"); phy_viterbi_lte_sse2(d_rx+96,decoded_output,16+DCI_LENGTH); - //debug_msg("Done DCI Viterbi \n"); + //debug_printf("Done DCI Viterbi \n"); } @@ -2456,7 +2544,9 @@ uint16_t get_nCCE_max(uint8_t Mod_id,uint8_t CC_id) return(get_nCCE(3,&PHY_vars_eNB_g[Mod_id][CC_id]->lte_frame_parms,1)); // 5, 15,21 } -void dci_decoding_procedure0(LTE_UE_PDCCH **lte_ue_pdcch_vars,int do_common,uint8_t subframe, +void dci_decoding_procedure0(LTE_UE_PDCCH **lte_ue_pdcch_vars, + int do_common, + uint8_t subframe, DCI_ALLOC_t *dci_alloc, int16_t eNB_id, LTE_DL_FRAME_PARMS *frame_parms, @@ -2542,6 +2632,7 @@ void dci_decoding_procedure0(LTE_UE_PDCCH **lte_ue_pdcch_vars,int do_common,uint else { LOG_E(PHY,"Illegal CCEind %d (Yk %d, m %d, nCCE %d, L2 %d\n",CCEind,Yk,m,nCCE,L2); mac_xface->macphy_exit("Illegal CCEind\n"); + return; // not reached } switch (L2) { @@ -2560,6 +2651,11 @@ void dci_decoding_procedure0(LTE_UE_PDCCH **lte_ue_pdcch_vars,int do_common,uint case 8: CCEmap_mask = (0xff<<(CCEind&0x1f)); break; + + default: + LOG_E( PHY, "Illegal L2 value %d\n", L2 ); + mac_xface->macphy_exit( "Illegal L2\n" ); + return; // not reached } CCEmap_cand = (*CCEmap)&CCEmap_mask; @@ -2586,7 +2682,7 @@ void dci_decoding_procedure0(LTE_UE_PDCCH **lte_ue_pdcch_vars,int do_common,uint */ crc = (crc16(dci_decoded_output,sizeof_bits)>>16) ^ extract_crc(dci_decoded_output,sizeof_bits); #ifdef DEBUG_DCI_DECODING - msg("crc =>%x\n",crc); + printf("crc =>%x\n",crc); #endif if (((L>1) && ((crc == si_rnti)|| @@ -2603,7 +2699,7 @@ void dci_decoding_procedure0(LTE_UE_PDCCH **lte_ue_pdcch_vars,int do_common,uint dci_alloc[*dci_cnt].dci_pdu[1] = dci_decoded_output[2]; dci_alloc[*dci_cnt].dci_pdu[0] = dci_decoded_output[3]; #ifdef DEBUG_DCI_DECODING - msg("DCI => %x,%x,%x,%x\n",dci_decoded_output[0],dci_decoded_output[1],dci_decoded_output[2],dci_decoded_output[3]); + printf("DCI => %x,%x,%x,%x\n",dci_decoded_output[0],dci_decoded_output[1],dci_decoded_output[2],dci_decoded_output[3]); #endif } else { dci_alloc[*dci_cnt].dci_pdu[7] = dci_decoded_output[0]; @@ -2615,7 +2711,7 @@ void dci_decoding_procedure0(LTE_UE_PDCCH **lte_ue_pdcch_vars,int do_common,uint dci_alloc[*dci_cnt].dci_pdu[1] = dci_decoded_output[6]; dci_alloc[*dci_cnt].dci_pdu[0] = dci_decoded_output[7]; #ifdef DEBUG_DCI_DECODING - msg("DCI => %x,%x,%x,%x,%x,%x,%x,%x\n", + printf("DCI => %x,%x,%x,%x,%x,%x,%x,%x\n", dci_decoded_output[0],dci_decoded_output[1],dci_decoded_output[2],dci_decoded_output[3], dci_decoded_output[4],dci_decoded_output[5],dci_decoded_output[6],dci_decoded_output[7]); #endif @@ -2706,6 +2802,7 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *phy_vars_ue, uint8_t tmode = phy_vars_ue->transmission_mode[eNB_id]; uint8_t frame_type = frame_parms->frame_type; uint8_t format1A_size_bits=0,format1A_size_bytes=0; + uint8_t format1C_size_bits=0,format1C_size_bytes=0; uint8_t format0_size_bits=0,format0_size_bytes=0; uint8_t format1_size_bits=0,format1_size_bytes=0; uint8_t format2_size_bits=0,format2_size_bytes=0; @@ -2716,6 +2813,8 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *phy_vars_ue, if (frame_type == TDD) { format1A_size_bits = sizeof_DCI1A_1_5MHz_TDD_1_6_t; format1A_size_bytes = sizeof(DCI1A_1_5MHz_TDD_1_6_t); + format1C_size_bits = sizeof_DCI1C_1_5MHz_t; + format1C_size_bytes = sizeof(DCI1C_1_5MHz_t); format0_size_bits = sizeof_DCI0_1_5MHz_TDD_1_6_t; format0_size_bytes = sizeof(DCI0_1_5MHz_TDD_1_6_t); format1_size_bits = sizeof_DCI1_1_5MHz_TDD_t; @@ -2735,6 +2834,8 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *phy_vars_ue, } else { format1A_size_bits = sizeof_DCI1A_1_5MHz_FDD_t; format1A_size_bytes = sizeof(DCI1A_1_5MHz_FDD_t); + format1C_size_bits = sizeof_DCI1C_1_5MHz_t; + format1C_size_bytes = sizeof(DCI1C_1_5MHz_t); format0_size_bits = sizeof_DCI0_1_5MHz_FDD_t; format0_size_bytes = sizeof(DCI0_1_5MHz_FDD_t); format1_size_bits = sizeof_DCI1_1_5MHz_FDD_t; @@ -2760,6 +2861,8 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *phy_vars_ue, if (frame_type == TDD) { format1A_size_bits = sizeof_DCI1A_5MHz_TDD_1_6_t; format1A_size_bytes = sizeof(DCI1A_5MHz_TDD_1_6_t); + format1C_size_bits = sizeof_DCI1C_5MHz_t; + format1C_size_bytes = sizeof(DCI1C_5MHz_t); format0_size_bits = sizeof_DCI0_5MHz_TDD_1_6_t; format0_size_bytes = sizeof(DCI0_5MHz_TDD_1_6_t); format1_size_bits = sizeof_DCI1_5MHz_TDD_t; @@ -2779,6 +2882,8 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *phy_vars_ue, } else { format1A_size_bits = sizeof_DCI1A_5MHz_FDD_t; format1A_size_bytes = sizeof(DCI1A_5MHz_FDD_t); + format1C_size_bits = sizeof_DCI1C_5MHz_t; + format1C_size_bytes = sizeof(DCI1C_5MHz_t); format0_size_bits = sizeof_DCI0_5MHz_FDD_t; format0_size_bytes = sizeof(DCI0_5MHz_FDD_t); format1_size_bits = sizeof_DCI1_5MHz_FDD_t; @@ -2803,6 +2908,8 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *phy_vars_ue, if (frame_type == TDD) { format1A_size_bits = sizeof_DCI1A_10MHz_TDD_1_6_t; format1A_size_bytes = sizeof(DCI1A_10MHz_TDD_1_6_t); + format1C_size_bits = sizeof_DCI1C_10MHz_t; + format1C_size_bytes = sizeof(DCI1C_10MHz_t); format0_size_bits = sizeof_DCI0_10MHz_TDD_1_6_t; format0_size_bytes = sizeof(DCI0_10MHz_TDD_1_6_t); format1_size_bits = sizeof_DCI1_10MHz_TDD_t; @@ -2822,6 +2929,8 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *phy_vars_ue, } else { format1A_size_bits = sizeof_DCI1A_10MHz_FDD_t; format1A_size_bytes = sizeof(DCI1A_10MHz_FDD_t); + format1C_size_bits = sizeof_DCI1C_10MHz_t; + format1C_size_bytes = sizeof(DCI1C_10MHz_t); format0_size_bits = sizeof_DCI0_10MHz_FDD_t; format0_size_bytes = sizeof(DCI0_10MHz_FDD_t); format1_size_bits = sizeof_DCI1_10MHz_FDD_t; @@ -2846,6 +2955,8 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *phy_vars_ue, if (frame_type == TDD) { format1A_size_bits = sizeof_DCI1A_20MHz_TDD_1_6_t; format1A_size_bytes = sizeof(DCI1A_20MHz_TDD_1_6_t); + format1C_size_bits = sizeof_DCI1C_20MHz_t; + format1C_size_bytes = sizeof(DCI1C_20MHz_t); format0_size_bits = sizeof_DCI0_20MHz_TDD_1_6_t; format0_size_bytes = sizeof(DCI0_20MHz_TDD_1_6_t); format1_size_bits = sizeof_DCI1_20MHz_TDD_t; @@ -2865,6 +2976,8 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *phy_vars_ue, } else { format1A_size_bits = sizeof_DCI1A_20MHz_FDD_t; format1A_size_bytes = sizeof(DCI1A_20MHz_FDD_t); + format1C_size_bits = sizeof_DCI1C_20MHz_t; + format1C_size_bytes = sizeof(DCI1C_20MHz_t); format0_size_bits = sizeof_DCI0_20MHz_FDD_t; format0_size_bytes = sizeof(DCI0_20MHz_FDD_t); format1_size_bits = sizeof_DCI1_20MHz_FDD_t; @@ -2894,7 +3007,7 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *phy_vars_ue, if (phy_vars_ue->prach_resources[eNB_id]) ra_rnti = phy_vars_ue->prach_resources[eNB_id]->ra_RNTI; - // First check common search spaces at aggregation 8 (SI_RNTI and RA_RNTI format 0/1A), + // First check common search spaces at aggregation 4 (SI_RNTI and RA_RNTI format 0/1A), // and UE_SPEC format0 (PUSCH) too while we're at it dci_decoding_procedure0(lte_ue_pdcch_vars,1,subframe, dci_alloc, @@ -2920,8 +3033,32 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *phy_vars_ue, ((format0_found==1)&&(format_c_found==1))) return(dci_cnt); - //#ifdef ALL_AGGREGATION - // Disabled for performance + // Now check common search spaces at aggregation 4 (SI_RNTI and RA_RNTI and C-RNTI format 1C), + // and UE_SPEC format0 (PUSCH) too while we're at it + dci_decoding_procedure0(lte_ue_pdcch_vars,1,subframe, + dci_alloc, + eNB_id, + frame_parms, + mi, + SI_RNTI, + ra_rnti, + 2, + format1C, + format1C, + format1C, + format1C_size_bits, + format1C_size_bytes, + &dci_cnt, + &format0_found, + &format_c_found, + &CCEmap0, + &CCEmap1, + &CCEmap2); + + if ((CCEmap0==0xffff) || + ((format0_found==1)&&(format_c_found==1))) + return(dci_cnt); + // Now check common search spaces at aggregation 8 (SI_RNTI and RA_RNTI format 1A), // and UE_SPEC format0 (PUSCH) too while we're at it // printf("[DCI search] doing common search/format0 aggregation 3\n"); @@ -2952,6 +3089,27 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *phy_vars_ue, ((format0_found==1)&&(format_c_found==1))) return(dci_cnt); + // Now check common search spaces at aggregation 8 (SI_RNTI and RA_RNTI and C-RNTI format 1C), + // and UE_SPEC format0 (PUSCH) too while we're at it + dci_decoding_procedure0(lte_ue_pdcch_vars,1,subframe, + dci_alloc, + eNB_id, + frame_parms, + mi, + SI_RNTI, + ra_rnti, + 3, + format1C, + format1C, + format1C, + format1C_size_bits, + format1C_size_bytes, + &dci_cnt, + &format0_found, + &format_c_found, + &CCEmap0, + &CCEmap1, + &CCEmap2); //#endif } diff --git a/openair1/PHY/LTE_TRANSPORT/dci.h b/openair1/PHY/LTE_TRANSPORT/dci.h index c06f9ed241..d98984b2a1 100644 --- a/openair1/PHY/LTE_TRANSPORT/dci.h +++ b/openair1/PHY/LTE_TRANSPORT/dci.h @@ -829,14 +829,73 @@ struct DCI1B_5MHz_4A_TDD { typedef struct DCI1B_5MHz_4A_TDD DCI1B_5MHz_4A_TDD_t; #define sizeof_DCI1B_5MHz_4A_TDD_t 31 -/// DCI Format Type 1C (5 MHz, 12 bits) -typedef struct __attribute__ ((__packed__)) +/// DCI Format Type 1C (1.4 MHz, 8 bits) +struct DCI1C_1_5MHz { - uint32_t rballoc:7; - uint32_t tbs_index:5; -} -DCI1C_5MHz_t; -#define sizeof_DCI1C_5MHz_t 12 + /// padding to 32bits + uint32_t padding32:24; + uint32_t mcs:5; + uint32_t rballoc:3; // N_RB_step = 2, Ngap=Ngap1=3, NDLVRBGap = 6, ceil(log2((3*4)/2)) = 3 +} __attribute__ ((__packed__)); + +typedef struct DCI1C_1_5MHz DCI1C_1_5MHz_t; +#define sizeof_DCI1C_1_5MHz_t 8 + +/********************************************************* +**********************************************************/ +/// DCI Format Type 1C (5 MHz, 12 bits) +struct DCI1C_5MHz +{ + /// padding to 32bits + uint32_t padding32:20; + uint32_t mcs:5; + uint32_t rballoc:7; // N_RB_step = 2, Ngap1=Ngap2=12, NDLVRBGap = 24, ceil(log2((12*13)/2)) = 7 +} __attribute__ ((__packed__)); + +typedef struct DCI1C_5MHz DCI1C_5MHz_t; +#define sizeof_DCI1C_5MHz_t 12 + +/// DCI Format Type 1C (10 MHz, 13 bits) +struct DCI1C_10MHz +{ + /// padding to 32bits + uint32_t padding32:19; + uint32_t mcs:5; + uint32_t rballoc:7; // N_RB_step = 4, Ngap1=27, NDLVRBGap = 46, ceil(log2(((11*12)/2)) = 7 + uint32_t Ngap:1; +} __attribute__ ((__packed__)); + +typedef struct DCI1C_10MHz DCI1C_10MHz_t; +#define sizeof_DCI1C_10MHz_t 13 + +/// DCI Format Type 1C (15 MHz, 14 bits) +struct DCI1C_15MHz +{ + /// padding to 32bits + uint32_t padding32:18; + uint32_t mcs:5; + uint32_t rballoc:8; // N_RB_step = 4, Ngap1=64, ceil(log2((16*17)/2)) = 8 + uint32_t Ngap:1; +} __attribute__ ((__packed__)); + +typedef struct DCI1C_15MHz DCI1C_15MHz_t; +#define sizeof_DCI1C_15MHz_t X + +/// DCI Format Type 1C (20 MHz, 15 bits) +struct DCI1C_20MHz +{ + /// padding to 32bits + uint32_t padding32:17; + uint32_t mcs:5; + uint32_t rballoc:9; // N_RB_step = 4, Ngap1=48, ceil(log2((24*25)/2)) = 9 + uint32_t Ngap:1; +} __attribute__ ((__packed__)); + +typedef struct DCI1C_20MHz DCI1C_20MHz_t; +#define sizeof_DCI1C_20MHz_t 15 + +/********************************************************* +**********************************************************/ /// DCI Format Type 1D (5 MHz, FDD, 2 Antenna Ports, 27 bits) struct DCI1D_5MHz_2A_FDD { diff --git a/openair1/PHY/LTE_TRANSPORT/dci_tools.c b/openair1/PHY/LTE_TRANSPORT/dci_tools.c index 6f0ff9d8eb..a0b4cba24e 100644 --- a/openair1/PHY/LTE_TRANSPORT/dci_tools.c +++ b/openair1/PHY/LTE_TRANSPORT/dci_tools.c @@ -49,35 +49,55 @@ //#define DEBUG_DCI -uint32_t localRIV2alloc_LUT6[32]; -uint32_t distRIV2alloc_LUT6[32]; +uint32_t localRIV2alloc_LUT6[32]; +uint32_t distRIV2alloc_even_LUT6[32]; +uint32_t distRIV2alloc_odd_LUT6[32]; uint16_t RIV2nb_rb_LUT6[32]; uint16_t RIV2first_rb_LUT6[32]; uint16_t RIV_max6=0; -uint32_t localRIV2alloc_LUT25[512]; -uint32_t distRIV2alloc_LUT25[512]; +uint32_t localRIV2alloc_LUT25[512]; +uint32_t distRIV2alloc_even_LUT25[512]; +uint32_t distRIV2alloc_odd_LUT25[512]; uint16_t RIV2nb_rb_LUT25[512]; uint16_t RIV2first_rb_LUT25[512]; uint16_t RIV_max25=0; -uint32_t localRIV2alloc_LUT50_0[1600]; -uint32_t distRIV2alloc_LUT50_0[1600]; -uint32_t localRIV2alloc_LUT50_1[1600]; -uint32_t distRIV2alloc_LUT50_1[1600]; +uint32_t localRIV2alloc_LUT50_0[1600]; +uint32_t localRIV2alloc_LUT50_1[1600]; +uint32_t distRIV2alloc_gap0_even_LUT50_0[1600]; +uint32_t distRIV2alloc_gap0_odd_LUT50_0[1600]; +uint32_t distRIV2alloc_gap0_even_LUT50_1[1600]; +uint32_t distRIV2alloc_gap0_odd_LUT50_1[1600]; +uint32_t distRIV2alloc_gap1_even_LUT50_0[1600]; +uint32_t distRIV2alloc_gap1_odd_LUT50_0[1600]; +uint32_t distRIV2alloc_gap1_even_LUT50_1[1600]; +uint32_t distRIV2alloc_gap1_odd_LUT50_1[1600]; uint16_t RIV2nb_rb_LUT50[1600]; uint16_t RIV2first_rb_LUT50[1600]; uint16_t RIV_max50=0; -uint32_t localRIV2alloc_LUT100_0[6000]; -uint32_t distRIV2alloc_LUT100_0[6000]; -uint32_t localRIV2alloc_LUT100_1[6000]; -uint32_t distRIV2alloc_LUT100_1[6000]; -uint32_t localRIV2alloc_LUT100_2[6000]; -uint32_t distRIV2alloc_LUT100_2[6000]; -uint32_t localRIV2alloc_LUT100_3[6000]; -uint32_t distRIV2alloc_LUT100_3[6000]; +uint32_t localRIV2alloc_LUT100_0[6000]; +uint32_t localRIV2alloc_LUT100_1[6000]; +uint32_t localRIV2alloc_LUT100_2[6000]; +uint32_t localRIV2alloc_LUT100_3[6000]; +uint32_t distRIV2alloc_gap0_even_LUT100_0[6000]; +uint32_t distRIV2alloc_gap0_odd_LUT100_0[6000]; +uint32_t distRIV2alloc_gap0_even_LUT100_1[6000]; +uint32_t distRIV2alloc_gap0_odd_LUT100_1[6000]; +uint32_t distRIV2alloc_gap0_even_LUT100_2[6000]; +uint32_t distRIV2alloc_gap0_odd_LUT100_2[6000]; +uint32_t distRIV2alloc_gap0_even_LUT100_3[6000]; +uint32_t distRIV2alloc_gap0_odd_LUT100_3[6000]; +uint32_t distRIV2alloc_gap1_even_LUT100_0[6000]; +uint32_t distRIV2alloc_gap1_odd_LUT100_0[6000]; +uint32_t distRIV2alloc_gap1_even_LUT100_1[6000]; +uint32_t distRIV2alloc_gap1_odd_LUT100_1[6000]; +uint32_t distRIV2alloc_gap1_even_LUT100_2[6000]; +uint32_t distRIV2alloc_gap1_odd_LUT100_2[6000]; +uint32_t distRIV2alloc_gap1_even_LUT100_3[6000]; +uint32_t distRIV2alloc_gap1_odd_LUT100_3[6000]; uint16_t RIV2nb_rb_LUT100[6000]; uint16_t RIV2first_rb_LUT100[6000]; uint16_t RIV_max100=0; @@ -385,32 +405,192 @@ uint16_t computeRIV(uint16_t N_RB_DL,uint16_t RBstart,uint16_t Lcrbs) return(RIV); } -int dist6[6]= {0,2,3,5,1,4}; -int dist50[50]= {}; -int dist100[100]= {}; +// Convert a DCI Format 1C RIV to a Format 1A RIV +// This extracts the start and length in PRBs from the 1C rballoc and +// recomputes the RIV as if it were the 1A rballoc + +uint32_t conv_1C_RIV(int32_t rballoc,uint32_t N_RB_DL) { + + int NpDLVRB,N_RB_step,LpCRBsm1,RBpstart; + + switch (N_RB_DL) { + + case 6: // N_RB_step = 2, NDLVRB = 6, NpDLVRB = 3 + NpDLVRB = 3; + N_RB_step = 2; + break; + case 25: // N_RB_step = 2, NDLVRB = 24, NpDLVRB = 12 + NpDLVRB = 12; + N_RB_step = 2; + break; + case 50: // N_RB_step = 4, NDLVRB = 46, NpDLVRB = 11 + NpDLVRB = 11; + N_RB_step = 4; + break; + case 100: // N_RB_step = 4, NDLVRB = 96, NpDLVRB = 24 + NpDLVRB = 24; + N_RB_step = 4; + break; + default: + NpDLVRB = 24; + N_RB_step = 4; + break; + } + + // This is the 1C part from 7.1.6.3 in 36.213 + LpCRBsm1 = rballoc/NpDLVRB; + // printf("LpCRBs = %d\n",LpCRBsm1+1); + + if (LpCRBsm1 <= (NpDLVRB/2)) { + RBpstart = rballoc % NpDLVRB; + } + else { + LpCRBsm1 = NpDLVRB-LpCRBsm1; + RBpstart = NpDLVRB-(rballoc%NpDLVRB); + } + // printf("RBpstart %d\n",RBpstart); + return(computeRIV(N_RB_DL,N_RB_step*RBpstart,N_RB_step*(LpCRBsm1+1))); + +} + +int get_prb(int N_RB_DL,int odd_slot,int vrb,int Ngap) { + + int offset; + + switch (N_RB_DL) { + + case 6: + // N_RB_DL = tildeN_RB_DL = 6 + // Ngap = 4 , P=1, Nrow = 2, Nnull = 2 + + switch (vrb) { + case 0: // even: 0->0, 1->2, odd: 0->3, 1->5 + case 1: + return ((3*odd_slot) + 2*(vrb&3))%6; + break; + case 2: // even: 2->3, 3->5, odd: 2->0, 3->2 + case 3: + return ((3*odd_slot) + 2*(vrb&3) + 5)%6; + break; + case 4: // even: 4->1, odd: 4->4 + return ((3*odd_slot) + 1)%6; + case 5: // even: 5->4, odd: 5->1 + return ((3*odd_slot) + 4)%6; + break; + } + break; + + case 15: + if (vrb<12) { + if ((vrb&3) < 2) // even: 0->0, 1->4, 4->1, 5->5, 8->2, 9->6 odd: 0->7, 1->11 + return(((7*odd_slot) + 4*(vrb&3) + (vrb>>2))%14) + 14*(vrb/14); + else if (vrb < 12) // even: 2->7, 3->11, 6->8, 7->12, 10->9, 11->13 + return (((7*odd_slot) + 4*(vrb&3) + (vrb>>2) +13 )%14) + 14*(vrb/14); + } + if (vrb==12) + return (3+(7*odd_slot)) % 14; + if (vrb==13) + return (10+(7*odd_slot)) % 14; + return 14; + break; + + case 25: + return (((12*odd_slot) + 6*(vrb&3) + (vrb>>2))%24) + 24*(vrb/24); + break; + + case 50: // P=3 + if (Ngap==0) { + // Nrow=12,Nnull=2,NVRBDL=46,Ngap1= 27 + if (vrb>=23) + offset=4; + else + offset=0; + if (vrb<44) { + if ((vrb&3)>=2) + return offset+((23*odd_slot) + 12*(vrb&3) + (vrb>>2) + 45)%46; + else + return offset+((23*odd_slot) + 12*(vrb&3) + (vrb>>2))%46; + } + if (vrb==44) // even: 44->11, odd: 45->34 + return offset+((23*odd_slot) + 22-12+1); + if (vrb==45) // even: 45->10, odd: 45->33 + return offset+((23*odd_slot) + 22+12); + if (vrb==46) + return offset+46+((23*odd_slot) + 23-12+1) % 46; + if (vrb==47) + return offset+46+((23*odd_slot) + 23+12) % 46; + if (vrb==48) + return offset+46+((23*odd_slot) + 23-12+1) % 46; + if (vrb==49) + return offset+46+((23*odd_slot) + 23+12) % 46; + } + else { + // Nrow=6,Nnull=6,NVRBDL=18,Ngap1= 27 + if (vrb>=9) + offset=18; + else + offset=0; + + if (vrb<12) { + if ((vrb&3)>=2) + return offset+((9*odd_slot) + 6*(vrb&3) + (vrb>>2) + 17)%18; + else + return offset+((9*odd_slot) + 6*(vrb&3) + (vrb>>2))%18; + } + else { + return offset+((9*odd_slot) + 12*(vrb&1)+(vrb>>1) )%18 + 18*(vrb/18); + } + } + break; + case 75: + // Ngap1 = 32, NVRBRL=64, P=4, Nrow= 16, Nnull=0 + if (Ngap ==0) { + return ((32*odd_slot) + 16*(vrb&3) + (vrb>>2))%64 + (vrb/64); + } else { + // Ngap2 = 16, NVRBDL=32, Nrow=8, Nnull=0 + return ((16*odd_slot) + 8*(vrb&3) + (vrb>>2))%32 + (vrb/32); + } + break; + case 100: + // Ngap1 = 48, NVRBDL=96, Nrow=24, Nnull=0 + if (Ngap ==0) { + return ((48*odd_slot) + 24*(vrb&3) + (vrb>>2))%96 + (vrb/96); + } else { + // Ngap2 = 16, NVRBDL=32, Nrow=8, Nnull=0 + return ((16*odd_slot) + 8*(vrb&3) + (vrb>>2))%32 + (vrb/32); + } + break; + default: + LOG_E(PHY,"Unknown N_RB_DL %d\n",N_RB_DL); + return 0; + } + return 0; + +} + void generate_RIV_tables() { // 6RBs localized RIV uint8_t Lcrbs,RBstart; - uint8_t distpos; uint16_t RIV; - uint32_t alloc0,alloc_dist0; - uint32_t alloc1,alloc_dist1; - uint32_t alloc2,alloc_dist2; - uint32_t alloc3,alloc_dist3; + uint32_t alloc0,allocdist0_0_even,allocdist0_0_odd,allocdist0_1_even,allocdist0_1_odd; + uint32_t alloc1,allocdist1_0_even,allocdist1_0_odd,allocdist1_1_even,allocdist1_1_odd; + uint32_t alloc2,allocdist2_0_even,allocdist2_0_odd,allocdist2_1_even,allocdist2_1_odd; + uint32_t alloc3,allocdist3_0_even,allocdist3_0_odd,allocdist3_1_even,allocdist3_1_odd; + uint32_t nVRB,nVRB_even_dist,nVRB_odd_dist; for (RBstart=0; RBstart<6; RBstart++) { alloc0 = 0; - alloc_dist0 = 0; - + allocdist0_0_even = 0; + allocdist0_0_odd = 0; for (Lcrbs=1; Lcrbs<=(6-RBstart); Lcrbs++) { //printf("RBstart %d, len %d --> ",RBstart,Lcrbs); - alloc0 |= (1<<(RBstart+Lcrbs-1)); - // This is the RB<->VRB relationship for N_RB_DL=25 - alloc_dist0 |= (1<RIV_max6) @@ -418,7 +598,8 @@ void generate_RIV_tables() // printf("RIV %d (%d) : first_rb %d NBRB %d\n",RIV,localRIV2alloc_LUT25[RIV],RBstart,Lcrbs); localRIV2alloc_LUT6[RIV] = alloc0; - distRIV2alloc_LUT6[RIV] = alloc_dist0; + distRIV2alloc_even_LUT6[RIV] = allocdist0_0_even; + distRIV2alloc_odd_LUT6[RIV] = allocdist0_0_odd; RIV2nb_rb_LUT6[RIV] = Lcrbs; RIV2first_rb_LUT6[RIV] = RBstart; } @@ -427,51 +608,80 @@ void generate_RIV_tables() for (RBstart=0; RBstart<25; RBstart++) { alloc0 = 0; - alloc_dist0 = 0; - + allocdist0_0_even = 0; + allocdist0_0_odd = 0; for (Lcrbs=1; Lcrbs<=(25-RBstart); Lcrbs++) { - // printf("RBstart %d, len %d --> ",RBstart,Lcrbs); - alloc0 |= (1<<(RBstart+Lcrbs-1)); - // This is the RB<->VRB relationship for N_RB_DL=25 - distpos = ((RBstart+Lcrbs-1)*6)%23; - - if (distpos == 0) - distpos = 23; - - alloc_dist0 |= (1< ",RBstart,Lcrbs); + alloc0 |= (1<RIV_max25) - RIV_max25 = RIV; + RIV_max25 = RIV;; - // printf("RIV %d (%d) : first_rb %d NBRB %d\n",RIV,localRIV2alloc_LUT25[RIV],RBstart,Lcrbs); - localRIV2alloc_LUT25[RIV] = alloc0; - distRIV2alloc_LUT25[RIV] = alloc_dist0; - RIV2nb_rb_LUT25[RIV] = Lcrbs; - RIV2first_rb_LUT25[RIV] = RBstart; + + localRIV2alloc_LUT25[RIV] = alloc0; + distRIV2alloc_even_LUT25[RIV] = allocdist0_0_even; + distRIV2alloc_odd_LUT25[RIV] = allocdist0_0_odd; + RIV2nb_rb_LUT25[RIV] = Lcrbs; + RIV2first_rb_LUT25[RIV] = RBstart; } } for (RBstart=0; RBstart<50; RBstart++) { alloc0 = 0; - alloc_dist0 = 0; alloc1 = 0; - alloc_dist1 = 0; + allocdist0_0_even=0; + allocdist1_0_even=0; + allocdist0_0_odd=0; + allocdist1_0_odd=0; + allocdist0_1_even=0; + allocdist1_1_even=0; + allocdist0_1_odd=0; + allocdist1_1_odd=0; for (Lcrbs=1; Lcrbs<=(50-RBstart); Lcrbs++) { - // printf("RBstart %d, len %d --> ",RBstart,Lcrbs); - if ((RBstart+Lcrbs-1)<32) - alloc0 |= (1<<(RBstart+Lcrbs-1)); - else - alloc1 |= (1<<(RBstart+Lcrbs-33)); + nVRB = Lcrbs-1+RBstart; - if (dist50[RBstart+Lcrbs-1]<32) - alloc_dist0 |= (1< nVRB_even_dist %d\n",nVRB,nVRB_even_dist); + + + if (nVRB_even_dist<32) + allocdist0_0_even |= (1<(%08x.%08x.%08x.%08x)\n", + allocdist0_0_even, + allocdist1_0_even, + allocdist2_0_even, + allocdist3_0_even + ); +*/ + // Distributed Gap1, odd slot + nVRB_odd_dist = get_prb(100,1,nVRB,0); + if (nVRB_odd_dist<32) + allocdist0_0_odd |= (1<transmission_mode[UE_id]); } -int generate_eNB_dlsch_params_from_dci(uint8_t subframe, +int generate_eNB_dlsch_params_from_dci(int frame, + uint8_t subframe, void *dci_pdu, uint16_t rnti, DCI_format_t dci_format, @@ -596,7 +887,7 @@ int generate_eNB_dlsch_params_from_dci(uint8_t subframe, uint8_t rv=0,rv1=0,rv2=0; uint8_t rah=0; uint8_t TPC=0; - LTE_DL_eNB_HARQ_t *dlsch0_harq,*dlsch1_harq; + LTE_DL_eNB_HARQ_t *dlsch0_harq=NULL,*dlsch1_harq=NULL; // printf("Generate eNB DCI, format %d, rnti %x (pdu %p)\n",dci_format,rnti,dci_pdu); @@ -638,12 +929,9 @@ int generate_eNB_dlsch_params_from_dci(uint8_t subframe, dlsch0_harq = dlsch[0]->harq_processes[harq_pid]; - if (vrb_type == 0) - dlsch0_harq->rb_alloc[0] = localRIV2alloc_LUT6[rballoc]; - else - dlsch0_harq->rb_alloc[0] = distRIV2alloc_LUT6[rballoc]; - - dlsch0_harq->nb_rb = RIV2nb_rb_LUT6[rballoc];//NPRB; + dlsch0_harq->rb_alloc[0] = localRIV2alloc_LUT6[rballoc]; + dlsch0_harq->vrb_type = vrb_type; + dlsch0_harq->nb_rb = RIV2nb_rb_LUT6[rballoc];//NPRB; RIV_max = RIV_max6; @@ -672,13 +960,10 @@ int generate_eNB_dlsch_params_from_dci(uint8_t subframe, dlsch0_harq = dlsch[0]->harq_processes[harq_pid]; - if (vrb_type == 0) - dlsch0_harq->rb_alloc[0] = localRIV2alloc_LUT25[rballoc]; - else - dlsch0_harq->rb_alloc[0] = distRIV2alloc_LUT25[rballoc]; - - dlsch0_harq->nb_rb = RIV2nb_rb_LUT25[rballoc];//NPRB; - RIV_max = RIV_max25; + dlsch0_harq->rb_alloc[0] = localRIV2alloc_LUT25[rballoc]; + dlsch0_harq->vrb_type = vrb_type; + dlsch0_harq->nb_rb = RIV2nb_rb_LUT25[rballoc];//NPRB; + RIV_max = RIV_max25; break; case 50: @@ -703,14 +988,9 @@ int generate_eNB_dlsch_params_from_dci(uint8_t subframe, dlsch0_harq = dlsch[0]->harq_processes[harq_pid]; - if (vrb_type == 0) { - dlsch0_harq->rb_alloc[0] = localRIV2alloc_LUT50_0[rballoc]; - dlsch0_harq->rb_alloc[1] = localRIV2alloc_LUT50_1[rballoc]; - } else { - dlsch0_harq->rb_alloc[0] = distRIV2alloc_LUT50_0[rballoc]; - dlsch0_harq->rb_alloc[1] = distRIV2alloc_LUT50_1[rballoc]; - } - + dlsch0_harq->rb_alloc[0] = localRIV2alloc_LUT50_0[rballoc]; + dlsch0_harq->rb_alloc[1] = localRIV2alloc_LUT50_1[rballoc]; + dlsch0_harq->vrb_type = vrb_type; dlsch0_harq->nb_rb = RIV2nb_rb_LUT50[rballoc];//NPRB; RIV_max = RIV_max50; break; @@ -736,17 +1016,12 @@ int generate_eNB_dlsch_params_from_dci(uint8_t subframe, dlsch0_harq = dlsch[0]->harq_processes[harq_pid]; - if (vrb_type == 0) { - dlsch0_harq->rb_alloc[0] = localRIV2alloc_LUT100_0[rballoc]; - dlsch0_harq->rb_alloc[1] = localRIV2alloc_LUT100_1[rballoc]; - dlsch0_harq->rb_alloc[2] = localRIV2alloc_LUT100_2[rballoc]; - dlsch0_harq->rb_alloc[3] = localRIV2alloc_LUT100_3[rballoc]; - } else { - dlsch0_harq->rb_alloc[0] = distRIV2alloc_LUT100_0[rballoc]; - dlsch0_harq->rb_alloc[1] = distRIV2alloc_LUT100_1[rballoc]; - dlsch0_harq->rb_alloc[2] = distRIV2alloc_LUT100_2[rballoc]; - dlsch0_harq->rb_alloc[3] = distRIV2alloc_LUT100_3[rballoc]; - } + dlsch0_harq->vrb_type = vrb_type; + dlsch0_harq->rb_alloc[0] = localRIV2alloc_LUT100_0[rballoc]; + dlsch0_harq->rb_alloc[1] = localRIV2alloc_LUT100_1[rballoc]; + dlsch0_harq->rb_alloc[2] = localRIV2alloc_LUT100_2[rballoc]; + dlsch0_harq->rb_alloc[3] = localRIV2alloc_LUT100_3[rballoc]; + dlsch0_harq->nb_rb = RIV2nb_rb_LUT100[rballoc];//NPRB; RIV_max = RIV_max100; @@ -2356,6 +2631,16 @@ int generate_eNB_dlsch_params_from_dci(uint8_t subframe, break; } + + if (dlsch0_harq) { + dlsch0_harq->frame = frame; + dlsch0_harq->subframe = subframe; + } + if (dlsch1_harq) { + dlsch1_harq->frame = frame; + dlsch1_harq->subframe = subframe; + } + #ifdef DEBUG_DCI if (dlsch0) { @@ -2655,51 +2940,51 @@ int dump_dci(LTE_DL_FRAME_PARMS *frame_parms, DCI_ALLOC_t *dci) (frame_parms->tdd_config>0)) { switch (frame_parms->N_RB_DL) { case 6: - msg("DCI format1A (TDD1-6, 1_5MHz), rnti %x (%x)\n",dci->rnti,((uint32_t*)&dci->dci_pdu[0])[0]); - msg("VRB_TYPE %d\n",((DCI1A_1_5MHz_TDD_1_6_t *)&dci->dci_pdu[0])->vrb_type); - msg("RB_ALLOC %x (NB_RB %d)\n",((DCI1A_1_5MHz_TDD_1_6_t *)&dci->dci_pdu[0])->rballoc,RIV2nb_rb_LUT25[((DCI1A_1_5MHz_TDD_1_6_t *)&dci->dci_pdu[0])->rballoc]); - msg("MCS %d\n",((DCI1A_1_5MHz_TDD_1_6_t *)&dci->dci_pdu[0])->mcs); - msg("HARQ_PID %d\n",((DCI1A_1_5MHz_TDD_1_6_t *)&dci->dci_pdu[0])->harq_pid); - msg("NDI %d\n",((DCI1A_1_5MHz_TDD_1_6_t *)&dci->dci_pdu[0])->ndi); - msg("RV %d\n",((DCI1A_1_5MHz_TDD_1_6_t *)&dci->dci_pdu[0])->rv); - msg("TPC %d\n",((DCI1A_1_5MHz_TDD_1_6_t *)&dci->dci_pdu[0])->TPC); - msg("DAI %d\n",((DCI1A_1_5MHz_TDD_1_6_t *)&dci->dci_pdu[0])->dai); + LOG_D(PHY,"DCI format1A (TDD1-6, 1_5MHz), rnti %x (%x)\n",dci->rnti,((uint32_t*)&dci->dci_pdu[0])[0]); + LOG_D(PHY,"VRB_TYPE %d\n",((DCI1A_1_5MHz_TDD_1_6_t *)&dci->dci_pdu[0])->vrb_type); + LOG_D(PHY,"RB_ALLOC %x (NB_RB %d)\n",((DCI1A_1_5MHz_TDD_1_6_t *)&dci->dci_pdu[0])->rballoc,RIV2nb_rb_LUT25[((DCI1A_1_5MHz_TDD_1_6_t *)&dci->dci_pdu[0])->rballoc]); + LOG_D(PHY,"MCS %d\n",((DCI1A_1_5MHz_TDD_1_6_t *)&dci->dci_pdu[0])->mcs); + LOG_D(PHY,"HARQ_PID %d\n",((DCI1A_1_5MHz_TDD_1_6_t *)&dci->dci_pdu[0])->harq_pid); + LOG_D(PHY,"NDI %d\n",((DCI1A_1_5MHz_TDD_1_6_t *)&dci->dci_pdu[0])->ndi); + LOG_D(PHY,"RV %d\n",((DCI1A_1_5MHz_TDD_1_6_t *)&dci->dci_pdu[0])->rv); + LOG_D(PHY,"TPC %d\n",((DCI1A_1_5MHz_TDD_1_6_t *)&dci->dci_pdu[0])->TPC); + LOG_D(PHY,"DAI %d\n",((DCI1A_1_5MHz_TDD_1_6_t *)&dci->dci_pdu[0])->dai); break; case 25: - msg("DCI format1A (TDD1-6, 5MHz), rnti %x (%x)\n",dci->rnti,((uint32_t*)&dci->dci_pdu[0])[0]); - msg("VRB_TYPE %d\n",((DCI1A_5MHz_TDD_1_6_t *)&dci->dci_pdu[0])->vrb_type); - msg("RB_ALLOC %d (NB_RB %d)\n",((DCI1A_5MHz_TDD_1_6_t *)&dci->dci_pdu[0])->rballoc,RIV2nb_rb_LUT25[((DCI1A_5MHz_TDD_1_6_t *)&dci->dci_pdu[0])->rballoc]); - msg("MCS %d\n",((DCI1A_5MHz_TDD_1_6_t *)&dci->dci_pdu[0])->mcs); - msg("HARQ_PID %d\n",((DCI1A_5MHz_TDD_1_6_t *)&dci->dci_pdu[0])->harq_pid); - msg("NDI %d\n",((DCI1A_5MHz_TDD_1_6_t *)&dci->dci_pdu[0])->ndi); - msg("RV %d\n",((DCI1A_5MHz_TDD_1_6_t *)&dci->dci_pdu[0])->rv); - msg("TPC %d\n",((DCI1A_5MHz_TDD_1_6_t *)&dci->dci_pdu[0])->TPC); - msg("DAI %d\n",((DCI1A_5MHz_TDD_1_6_t *)&dci->dci_pdu[0])->dai); + LOG_D(PHY,"DCI format1A (TDD1-6, 5MHz), rnti %x (%x)\n",dci->rnti,((uint32_t*)&dci->dci_pdu[0])[0]); + LOG_D(PHY,"VRB_TYPE %d\n",((DCI1A_5MHz_TDD_1_6_t *)&dci->dci_pdu[0])->vrb_type); + LOG_D(PHY,"RB_ALLOC %d (NB_RB %d)\n",((DCI1A_5MHz_TDD_1_6_t *)&dci->dci_pdu[0])->rballoc,RIV2nb_rb_LUT25[((DCI1A_5MHz_TDD_1_6_t *)&dci->dci_pdu[0])->rballoc]); + LOG_D(PHY,"MCS %d\n",((DCI1A_5MHz_TDD_1_6_t *)&dci->dci_pdu[0])->mcs); + LOG_D(PHY,"HARQ_PID %d\n",((DCI1A_5MHz_TDD_1_6_t *)&dci->dci_pdu[0])->harq_pid); + LOG_D(PHY,"NDI %d\n",((DCI1A_5MHz_TDD_1_6_t *)&dci->dci_pdu[0])->ndi); + LOG_D(PHY,"RV %d\n",((DCI1A_5MHz_TDD_1_6_t *)&dci->dci_pdu[0])->rv); + LOG_D(PHY,"TPC %d\n",((DCI1A_5MHz_TDD_1_6_t *)&dci->dci_pdu[0])->TPC); + LOG_D(PHY,"DAI %d\n",((DCI1A_5MHz_TDD_1_6_t *)&dci->dci_pdu[0])->dai); break; case 50: - msg("DCI format1A (TDD1-6, 10MHz), rnti %x (%x)\n",dci->rnti,((uint32_t*)&dci->dci_pdu[0])[0]); - msg("VRB_TYPE %d\n",((DCI1A_10MHz_TDD_1_6_t *)&dci->dci_pdu[0])->vrb_type); - msg("RB_ALLOC %x (NB_RB %d)\n",((DCI1A_10MHz_TDD_1_6_t *)&dci->dci_pdu[0])->rballoc,RIV2nb_rb_LUT50[((DCI1A_10MHz_TDD_1_6_t *)&dci->dci_pdu[0])->rballoc]); - msg("MCS %d\n",((DCI1A_10MHz_TDD_1_6_t *)&dci->dci_pdu[0])->mcs); - msg("HARQ_PID %d\n",((DCI1A_10MHz_TDD_1_6_t *)&dci->dci_pdu[0])->harq_pid); - msg("NDI %d\n",((DCI1A_10MHz_TDD_1_6_t *)&dci->dci_pdu[0])->ndi); - msg("RV %d\n",((DCI1A_10MHz_TDD_1_6_t *)&dci->dci_pdu[0])->rv); - msg("TPC %d\n",((DCI1A_10MHz_TDD_1_6_t *)&dci->dci_pdu[0])->TPC); - msg("DAI %d\n",((DCI1A_10MHz_TDD_1_6_t *)&dci->dci_pdu[0])->dai); + LOG_D(PHY,"DCI format1A (TDD1-6, 10MHz), rnti %x (%x)\n",dci->rnti,((uint32_t*)&dci->dci_pdu[0])[0]); + LOG_D(PHY,"VRB_TYPE %d\n",((DCI1A_10MHz_TDD_1_6_t *)&dci->dci_pdu[0])->vrb_type); + LOG_D(PHY,"RB_ALLOC %x (NB_RB %d)\n",((DCI1A_10MHz_TDD_1_6_t *)&dci->dci_pdu[0])->rballoc,RIV2nb_rb_LUT50[((DCI1A_10MHz_TDD_1_6_t *)&dci->dci_pdu[0])->rballoc]); + LOG_D(PHY,"MCS %d\n",((DCI1A_10MHz_TDD_1_6_t *)&dci->dci_pdu[0])->mcs); + LOG_D(PHY,"HARQ_PID %d\n",((DCI1A_10MHz_TDD_1_6_t *)&dci->dci_pdu[0])->harq_pid); + LOG_D(PHY,"NDI %d\n",((DCI1A_10MHz_TDD_1_6_t *)&dci->dci_pdu[0])->ndi); + LOG_D(PHY,"RV %d\n",((DCI1A_10MHz_TDD_1_6_t *)&dci->dci_pdu[0])->rv); + LOG_D(PHY,"TPC %d\n",((DCI1A_10MHz_TDD_1_6_t *)&dci->dci_pdu[0])->TPC); + LOG_D(PHY,"DAI %d\n",((DCI1A_10MHz_TDD_1_6_t *)&dci->dci_pdu[0])->dai); break; case 100: - msg("DCI format1A (TDD1-6, 20MHz), rnti %x (%x)\n",dci->rnti,((uint32_t*)&dci->dci_pdu[0])[0]); - msg("VRB_TYPE %d\n",((DCI1A_20MHz_TDD_1_6_t *)&dci->dci_pdu[0])->vrb_type); - msg("RB_ALLOC %x (NB_RB %d)\n",((DCI1A_20MHz_TDD_1_6_t *)&dci->dci_pdu[0])->rballoc,RIV2nb_rb_LUT100[((DCI1A_20MHz_TDD_1_6_t *)&dci->dci_pdu[0])->rballoc]); - msg("MCS %d\n",((DCI1A_20MHz_TDD_1_6_t *)&dci->dci_pdu[0])->mcs); - msg("HARQ_PID %d\n",((DCI1A_20MHz_TDD_1_6_t *)&dci->dci_pdu[0])->harq_pid); - msg("NDI %d\n",((DCI1A_20MHz_TDD_1_6_t *)&dci->dci_pdu[0])->ndi); - msg("RV %d\n",((DCI1A_20MHz_TDD_1_6_t *)&dci->dci_pdu[0])->rv); - msg("TPC %d\n",((DCI1A_20MHz_TDD_1_6_t *)&dci->dci_pdu[0])->TPC); - msg("DAI %d\n",((DCI1A_20MHz_TDD_1_6_t *)&dci->dci_pdu[0])->dai); + LOG_D(PHY,"DCI format1A (TDD1-6, 20MHz), rnti %x (%x)\n",dci->rnti,((uint32_t*)&dci->dci_pdu[0])[0]); + LOG_D(PHY,"VRB_TYPE %d\n",((DCI1A_20MHz_TDD_1_6_t *)&dci->dci_pdu[0])->vrb_type); + LOG_D(PHY,"RB_ALLOC %x (NB_RB %d)\n",((DCI1A_20MHz_TDD_1_6_t *)&dci->dci_pdu[0])->rballoc,RIV2nb_rb_LUT100[((DCI1A_20MHz_TDD_1_6_t *)&dci->dci_pdu[0])->rballoc]); + LOG_D(PHY,"MCS %d\n",((DCI1A_20MHz_TDD_1_6_t *)&dci->dci_pdu[0])->mcs); + LOG_D(PHY,"HARQ_PID %d\n",((DCI1A_20MHz_TDD_1_6_t *)&dci->dci_pdu[0])->harq_pid); + LOG_D(PHY,"NDI %d\n",((DCI1A_20MHz_TDD_1_6_t *)&dci->dci_pdu[0])->ndi); + LOG_D(PHY,"RV %d\n",((DCI1A_20MHz_TDD_1_6_t *)&dci->dci_pdu[0])->rv); + LOG_D(PHY,"TPC %d\n",((DCI1A_20MHz_TDD_1_6_t *)&dci->dci_pdu[0])->TPC); + LOG_D(PHY,"DAI %d\n",((DCI1A_20MHz_TDD_1_6_t *)&dci->dci_pdu[0])->dai); break; default: @@ -2711,47 +2996,47 @@ int dump_dci(LTE_DL_FRAME_PARMS *frame_parms, DCI_ALLOC_t *dci) } else if (frame_parms->frame_type == FDD) { switch (frame_parms->N_RB_DL) { case 6: - msg("DCI format1A(FDD, 1.5MHz), rnti %x (%x)\n",dci->rnti,((uint32_t*)&dci->dci_pdu[0])[0]); - msg("VRB_TYPE %d\n",((DCI1A_1_5MHz_FDD_t *)&dci->dci_pdu[0])->vrb_type); - msg("RB_ALLOC %x (NB_RB %d)\n",((DCI1A_1_5MHz_FDD_t *)&dci->dci_pdu[0])->rballoc,RIV2nb_rb_LUT25[((DCI1A_1_5MHz_FDD_t *)&dci->dci_pdu[0])->rballoc]); - msg("MCS %d\n",((DCI1A_1_5MHz_FDD_t *)&dci->dci_pdu[0])->mcs); - msg("HARQ_PID %d\n",((DCI1A_1_5MHz_FDD_t *)&dci->dci_pdu[0])->harq_pid); - msg("NDI %d\n",((DCI1A_1_5MHz_FDD_t *)&dci->dci_pdu[0])->ndi); - msg("RV %d\n",((DCI1A_1_5MHz_FDD_t *)&dci->dci_pdu[0])->rv); - msg("TPC %d\n",((DCI1A_1_5MHz_FDD_t *)&dci->dci_pdu[0])->TPC); + LOG_D(PHY,"DCI format1A(FDD, 1.5MHz), rnti %x (%x)\n",dci->rnti,((uint32_t*)&dci->dci_pdu[0])[0]); + LOG_D(PHY,"VRB_TYPE %d\n",((DCI1A_1_5MHz_FDD_t *)&dci->dci_pdu[0])->vrb_type); + LOG_D(PHY,"RB_ALLOC %x (NB_RB %d)\n",((DCI1A_1_5MHz_FDD_t *)&dci->dci_pdu[0])->rballoc,RIV2nb_rb_LUT25[((DCI1A_1_5MHz_FDD_t *)&dci->dci_pdu[0])->rballoc]); + LOG_D(PHY,"MCS %d\n",((DCI1A_1_5MHz_FDD_t *)&dci->dci_pdu[0])->mcs); + LOG_D(PHY,"HARQ_PID %d\n",((DCI1A_1_5MHz_FDD_t *)&dci->dci_pdu[0])->harq_pid); + LOG_D(PHY,"NDI %d\n",((DCI1A_1_5MHz_FDD_t *)&dci->dci_pdu[0])->ndi); + LOG_D(PHY,"RV %d\n",((DCI1A_1_5MHz_FDD_t *)&dci->dci_pdu[0])->rv); + LOG_D(PHY,"TPC %d\n",((DCI1A_1_5MHz_FDD_t *)&dci->dci_pdu[0])->TPC); break; case 25: - msg("DCI format1A(FDD, 5MHz), rnti %x (%x)\n",dci->rnti,((uint32_t*)&dci->dci_pdu[0])[0]); - msg("VRB_TYPE %d\n",((DCI1A_5MHz_FDD_t *)&dci->dci_pdu[0])->vrb_type); - msg("RB_ALLOC %x (NB_RB %d)\n",((DCI1A_5MHz_FDD_t *)&dci->dci_pdu[0])->rballoc,RIV2nb_rb_LUT25[((DCI1A_5MHz_FDD_t *)&dci->dci_pdu[0])->rballoc]); - msg("MCS %d\n",((DCI1A_5MHz_FDD_t *)&dci->dci_pdu[0])->mcs); - msg("HARQ_PID %d\n",((DCI1A_5MHz_FDD_t *)&dci->dci_pdu[0])->harq_pid); - msg("NDI %d\n",((DCI1A_5MHz_FDD_t *)&dci->dci_pdu[0])->ndi); - msg("RV %d\n",((DCI1A_5MHz_FDD_t *)&dci->dci_pdu[0])->rv); - msg("TPC %d\n",((DCI1A_5MHz_FDD_t *)&dci->dci_pdu[0])->TPC); + LOG_D(PHY,"DCI format1A(FDD, 5MHz), rnti %x (%x)\n",dci->rnti,((uint32_t*)&dci->dci_pdu[0])[0]); + LOG_D(PHY,"VRB_TYPE %d\n",((DCI1A_5MHz_FDD_t *)&dci->dci_pdu[0])->vrb_type); + LOG_D(PHY,"RB_ALLOC %x (NB_RB %d)\n",((DCI1A_5MHz_FDD_t *)&dci->dci_pdu[0])->rballoc,RIV2nb_rb_LUT25[((DCI1A_5MHz_FDD_t *)&dci->dci_pdu[0])->rballoc]); + LOG_D(PHY,"MCS %d\n",((DCI1A_5MHz_FDD_t *)&dci->dci_pdu[0])->mcs); + LOG_D(PHY,"HARQ_PID %d\n",((DCI1A_5MHz_FDD_t *)&dci->dci_pdu[0])->harq_pid); + LOG_D(PHY,"NDI %d\n",((DCI1A_5MHz_FDD_t *)&dci->dci_pdu[0])->ndi); + LOG_D(PHY,"RV %d\n",((DCI1A_5MHz_FDD_t *)&dci->dci_pdu[0])->rv); + LOG_D(PHY,"TPC %d\n",((DCI1A_5MHz_FDD_t *)&dci->dci_pdu[0])->TPC); break; case 50: - msg("DCI format1A(FDD, 10MHz), rnti %x (%x)\n",dci->rnti,((uint32_t*)&dci->dci_pdu[0])[0]); - msg("VRB_TYPE %d\n",((DCI1A_10MHz_FDD_t *)&dci->dci_pdu[0])->vrb_type); - msg("RB_ALLOC %x (NB_RB %d)\n",((DCI1A_10MHz_FDD_t *)&dci->dci_pdu[0])->rballoc,RIV2nb_rb_LUT50[((DCI1A_10MHz_FDD_t *)&dci->dci_pdu[0])->rballoc]); - msg("MCS %d\n",((DCI1A_10MHz_FDD_t *)&dci->dci_pdu[0])->mcs); - msg("HARQ_PID %d\n",((DCI1A_10MHz_FDD_t *)&dci->dci_pdu[0])->harq_pid); - msg("NDI %d\n",((DCI1A_10MHz_FDD_t *)&dci->dci_pdu[0])->ndi); - msg("RV %d\n",((DCI1A_10MHz_FDD_t *)&dci->dci_pdu[0])->rv); - msg("TPC %d\n",((DCI1A_10MHz_FDD_t *)&dci->dci_pdu[0])->TPC); + LOG_D(PHY,"DCI format1A(FDD, 10MHz), rnti %x (%x)\n",dci->rnti,((uint32_t*)&dci->dci_pdu[0])[0]); + LOG_D(PHY,"VRB_TYPE %d\n",((DCI1A_10MHz_FDD_t *)&dci->dci_pdu[0])->vrb_type); + LOG_D(PHY,"RB_ALLOC %x (NB_RB %d)\n",((DCI1A_10MHz_FDD_t *)&dci->dci_pdu[0])->rballoc,RIV2nb_rb_LUT50[((DCI1A_10MHz_FDD_t *)&dci->dci_pdu[0])->rballoc]); + LOG_D(PHY,"MCS %d\n",((DCI1A_10MHz_FDD_t *)&dci->dci_pdu[0])->mcs); + LOG_D(PHY,"HARQ_PID %d\n",((DCI1A_10MHz_FDD_t *)&dci->dci_pdu[0])->harq_pid); + LOG_D(PHY,"NDI %d\n",((DCI1A_10MHz_FDD_t *)&dci->dci_pdu[0])->ndi); + LOG_D(PHY,"RV %d\n",((DCI1A_10MHz_FDD_t *)&dci->dci_pdu[0])->rv); + LOG_D(PHY,"TPC %d\n",((DCI1A_10MHz_FDD_t *)&dci->dci_pdu[0])->TPC); break; case 100: - msg("DCI format1A(FDD, 20MHz), rnti %x (%x)\n",dci->rnti,((uint32_t*)&dci->dci_pdu[0])[0]); - msg("VRB_TYPE %d\n",((DCI1A_20MHz_FDD_t *)&dci->dci_pdu[0])->vrb_type); - msg("RB_ALLOC %x (NB_RB %d)\n",((DCI1A_20MHz_FDD_t *)&dci->dci_pdu[0])->rballoc,RIV2nb_rb_LUT100[((DCI1A_20MHz_FDD_t *)&dci->dci_pdu[0])->rballoc]); - msg("MCS %d\n",((DCI1A_20MHz_FDD_t *)&dci->dci_pdu[0])->mcs); - msg("HARQ_PID %d\n",((DCI1A_20MHz_FDD_t *)&dci->dci_pdu[0])->harq_pid); - msg("NDI %d\n",((DCI1A_20MHz_FDD_t *)&dci->dci_pdu[0])->ndi); - msg("RV %d\n",((DCI1A_20MHz_FDD_t *)&dci->dci_pdu[0])->rv); - msg("TPC %d\n",((DCI1A_20MHz_FDD_t *)&dci->dci_pdu[0])->TPC); + LOG_D(PHY,"DCI format1A(FDD, 20MHz), rnti %x (%x)\n",dci->rnti,((uint32_t*)&dci->dci_pdu[0])[0]); + LOG_D(PHY,"VRB_TYPE %d\n",((DCI1A_20MHz_FDD_t *)&dci->dci_pdu[0])->vrb_type); + LOG_D(PHY,"RB_ALLOC %x (NB_RB %d)\n",((DCI1A_20MHz_FDD_t *)&dci->dci_pdu[0])->rballoc,RIV2nb_rb_LUT100[((DCI1A_20MHz_FDD_t *)&dci->dci_pdu[0])->rballoc]); + LOG_D(PHY,"MCS %d\n",((DCI1A_20MHz_FDD_t *)&dci->dci_pdu[0])->mcs); + LOG_D(PHY,"HARQ_PID %d\n",((DCI1A_20MHz_FDD_t *)&dci->dci_pdu[0])->harq_pid); + LOG_D(PHY,"NDI %d\n",((DCI1A_20MHz_FDD_t *)&dci->dci_pdu[0])->ndi); + LOG_D(PHY,"RV %d\n",((DCI1A_20MHz_FDD_t *)&dci->dci_pdu[0])->rv); + LOG_D(PHY,"TPC %d\n",((DCI1A_20MHz_FDD_t *)&dci->dci_pdu[0])->TPC); break; default: @@ -2763,6 +3048,45 @@ int dump_dci(LTE_DL_FRAME_PARMS *frame_parms, DCI_ALLOC_t *dci) break; + case format1C: // This is DLSCH allocation for control traffic + switch (frame_parms->N_RB_DL) { + case 6: + LOG_D(PHY,"DCI format1C (1.5MHz), rnti %x (%x)\n",dci->rnti,((uint32_t*)&dci->dci_pdu[0])[0]); + LOG_D(PHY,"RB_ALLOC %x (NB_RB %d)\n", + ((DCI1C_1_5MHz_t *)&dci->dci_pdu[0])->rballoc,RIV2nb_rb_LUT6[conv_1C_RIV(((DCI1C_1_5MHz_t *)&dci->dci_pdu[0])->rballoc,6)]); + LOG_D(PHY,"MCS %d\n",((DCI1C_1_5MHz_t *)&dci->dci_pdu[0])->mcs); + break; + + case 25: + LOG_D(PHY,"DCI format1C (5MHz), rnti %x (%x)\n",dci->rnti,((uint32_t*)&dci->dci_pdu[0])[0]); + LOG_D(PHY,"RB_ALLOC %x (NB_RB %d)\n",((DCI1C_5MHz_t *)&dci->dci_pdu[0])->rballoc,RIV2nb_rb_LUT25[conv_1C_RIV(((DCI1C_5MHz_t *)&dci->dci_pdu[0])->rballoc,25)]); + LOG_D(PHY,"MCS %d\n",((DCI1C_5MHz_t *)&dci->dci_pdu[0])->mcs); + break; + + case 50: + LOG_D(PHY,"DCI format1C (10MHz), rnti %x (%x)\n",dci->rnti,((uint32_t*)&dci->dci_pdu[0])[0]); + LOG_D(PHY,"Ngap %d\n",((DCI1C_10MHz_t *)&dci->dci_pdu[0])->Ngap); + LOG_D(PHY,"RB_ALLOC %x (NB_RB %d)\n",((DCI1C_10MHz_t *)&dci->dci_pdu[0])->rballoc,RIV2nb_rb_LUT50[conv_1C_RIV(((DCI1C_10MHz_t *)&dci->dci_pdu[0])->rballoc,50)]); + LOG_D(PHY,"MCS %d\n",((DCI1C_10MHz_t *)&dci->dci_pdu[0])->mcs); + break; + + case 100: + LOG_D(PHY,"DCI format1C (20MHz), rnti %x (%x)\n",dci->rnti,((uint32_t*)&dci->dci_pdu[0])[0]); + LOG_D(PHY,"Ngap %d\n",((DCI1C_20MHz_t *)&dci->dci_pdu[0])->Ngap); + LOG_D(PHY,"RB_ALLOC %x (NB_RB %d)\n",((DCI1C_20MHz_t *)&dci->dci_pdu[0])->rballoc,RIV2nb_rb_LUT50[conv_1C_RIV(((DCI1C_20MHz_t *)&dci->dci_pdu[0])->rballoc,100)]); + LOG_D(PHY,"MCS %d\n",((DCI1C_20MHz_t *)&dci->dci_pdu[0])->mcs); + break; + + + default: + LOG_E(PHY,"Invalid N_RB_DL %d\n", frame_parms->N_RB_DL); + DevParam (frame_parms->N_RB_DL, 0, 0); + break; + } + + + break; + case format2: if ((frame_parms->frame_type == TDD) && @@ -3456,7 +3780,8 @@ int dump_dci(LTE_DL_FRAME_PARMS *frame_parms, DCI_ALLOC_t *dci) } -int generate_ue_dlsch_params_from_dci(uint8_t subframe, +int generate_ue_dlsch_params_from_dci(int frame, + uint8_t subframe, void *dci_pdu, uint16_t rnti, DCI_format_t dci_format, @@ -3478,16 +3803,17 @@ int generate_ue_dlsch_params_from_dci(uint8_t subframe, uint8_t rah=0; uint8_t TPC=0; uint8_t NPRB=0,tbswap=0,tpmi=0; + uint8_t Ngap; LTE_UE_DLSCH_t *dlsch0=NULL,*dlsch1=NULL; LTE_DL_UE_HARQ_t *dlsch0_harq,*dlsch1_harq; #ifdef DEBUG_DCI - msg("dci_tools.c: Filling ue dlsch params -> rnti %x, dci_format %d\n",rnti,dci_format); + LOG_D(PHY,"dci_tools.c: Filling ue dlsch params -> rnti %x, dci_format %d\n",rnti,dci_format); #endif switch (dci_format) { - case format0: // This is an UL SACH allocation so nothing here, inform MAC + case format0: // This is an ULSCH allocation so nothing here, inform MAC LOG_E(PHY,"format0 not possible\n"); return(-1); break; @@ -3531,12 +3857,19 @@ int generate_ue_dlsch_params_from_dci(uint8_t subframe, dlsch0_harq = dlsch[0]->harq_processes[harq_pid]; NPRB = RIV2nb_rb_LUT6[rballoc]; dlsch0_harq->delta_PUCCH = delta_PUCCH_lut[TPC&3]; + dlsch[0]->g_pucch += delta_PUCCH_lut[TPC&3]; } - if (vrb_type == 0) - dlsch0_harq->rb_alloc[0] = localRIV2alloc_LUT6[rballoc]; - else - dlsch0_harq->rb_alloc[0] = distRIV2alloc_LUT6[rballoc]; + if (vrb_type == LOCALIZED) { + dlsch0_harq->rb_alloc_even[0] = localRIV2alloc_LUT6[rballoc]; + dlsch0_harq->rb_alloc_odd[0] = localRIV2alloc_LUT6[rballoc]; + } + else { + dlsch0_harq->rb_alloc_even[0] = distRIV2alloc_even_LUT6[rballoc]; + dlsch0_harq->rb_alloc_odd[0] = distRIV2alloc_odd_LUT6[rballoc]; + } + dlsch0_harq->vrb_type = vrb_type; + dlsch0_harq->nb_rb = RIV2nb_rb_LUT6[rballoc];//NPRB; RIV_max = RIV_max6; @@ -3580,14 +3913,19 @@ int generate_ue_dlsch_params_from_dci(uint8_t subframe, dlsch0_harq = dlsch[0]->harq_processes[harq_pid]; NPRB = RIV2nb_rb_LUT25[rballoc]; dlsch0_harq->delta_PUCCH = delta_PUCCH_lut[TPC&3]; + dlsch[0]->g_pucch += delta_PUCCH_lut[TPC&3]; } - if (vrb_type == 0) - dlsch0_harq->rb_alloc[0] = localRIV2alloc_LUT25[rballoc]; - else - dlsch0_harq->rb_alloc[0] = distRIV2alloc_LUT25[rballoc]; - - dlsch0_harq->nb_rb = RIV2nb_rb_LUT25[rballoc];//NPRB; + if (vrb_type == LOCALIZED) { + dlsch0_harq->rb_alloc_even[0] = localRIV2alloc_LUT25[rballoc]; + dlsch0_harq->rb_alloc_odd[0] = localRIV2alloc_LUT25[rballoc]; + } + else { + dlsch0_harq->rb_alloc_even[0] = distRIV2alloc_even_LUT25[rballoc]; + dlsch0_harq->rb_alloc_odd[0] = distRIV2alloc_odd_LUT25[rballoc]; + } + dlsch0_harq->vrb_type = vrb_type; + dlsch0_harq->nb_rb = RIV2nb_rb_LUT25[rballoc]; RIV_max = RIV_max25; break; @@ -3610,7 +3948,7 @@ int generate_ue_dlsch_params_from_dci(uint8_t subframe, ndi = ((DCI1A_10MHz_FDD_t *)dci_pdu)->ndi; TPC = ((DCI1A_10MHz_FDD_t *)dci_pdu)->TPC; harq_pid = ((DCI1A_10MHz_FDD_t *)dci_pdu)->harq_pid; - //printf("FDD 1A: mcs %d, rballoc %x,ndi %d, rv %d, TPC %d\n",mcs,rballoc,ndi,rv,TPC); + //printf("FDD 1A: mcs %d, vrb_type %d, rballoc %x,ndi %d, rv %d, TPC %d\n",mcs,vrb_type,rballoc,ndi,rv,TPC); } if ((rnti==si_rnti) || (rnti==p_rnti) || (rnti==ra_rnti)) { // @@ -3628,15 +3966,32 @@ int generate_ue_dlsch_params_from_dci(uint8_t subframe, dlsch0_harq = dlsch[0]->harq_processes[harq_pid]; NPRB = RIV2nb_rb_LUT50[rballoc]; dlsch0_harq->delta_PUCCH = delta_PUCCH_lut[TPC&3]; + dlsch[0]->g_pucch += delta_PUCCH_lut[TPC&3]; } - if (vrb_type == 0) { - dlsch0_harq->rb_alloc[0] = localRIV2alloc_LUT50_0[rballoc]; - dlsch0_harq->rb_alloc[1] = localRIV2alloc_LUT50_1[rballoc]; - } else { - dlsch0_harq->rb_alloc[0] = distRIV2alloc_LUT50_0[rballoc]; - dlsch0_harq->rb_alloc[1] = distRIV2alloc_LUT50_1[rballoc]; + if (vrb_type == LOCALIZED) { + dlsch0_harq->rb_alloc_even[0] = localRIV2alloc_LUT50_0[rballoc]; + dlsch0_harq->rb_alloc_even[1] = localRIV2alloc_LUT50_1[rballoc]; + dlsch0_harq->rb_alloc_odd[0] = localRIV2alloc_LUT50_0[rballoc]; + dlsch0_harq->rb_alloc_odd[1] = localRIV2alloc_LUT50_1[rballoc]; + // printf("rballoc: %08x.%08x\n",dlsch0_harq->rb_alloc_even[0],dlsch0_harq->rb_alloc_even[1]); + } else { // DISTRIBUTED + if ((rballoc&(1<<10)) == 0) { + rballoc = rballoc&(~(1<<10)); + dlsch0_harq->rb_alloc_even[0] = distRIV2alloc_gap0_even_LUT50_0[rballoc]; + dlsch0_harq->rb_alloc_even[1] = distRIV2alloc_gap0_even_LUT50_1[rballoc]; + dlsch0_harq->rb_alloc_odd[0] = distRIV2alloc_gap0_odd_LUT50_0[rballoc]; + dlsch0_harq->rb_alloc_odd[1] = distRIV2alloc_gap0_odd_LUT50_1[rballoc]; + } + else { + rballoc = rballoc&(~(1<<10)); + dlsch0_harq->rb_alloc_even[0] = distRIV2alloc_gap0_even_LUT50_0[rballoc]; + dlsch0_harq->rb_alloc_even[1] = distRIV2alloc_gap0_even_LUT50_1[rballoc]; + dlsch0_harq->rb_alloc_odd[0] = distRIV2alloc_gap0_odd_LUT50_0[rballoc]; + dlsch0_harq->rb_alloc_odd[1] = distRIV2alloc_gap0_odd_LUT50_1[rballoc]; + } } + dlsch0_harq->vrb_type = vrb_type; dlsch0_harq->nb_rb = RIV2nb_rb_LUT50[rballoc];//NPRB; RIV_max = RIV_max50; @@ -3678,19 +4033,43 @@ int generate_ue_dlsch_params_from_dci(uint8_t subframe, dlsch0_harq = dlsch[0]->harq_processes[harq_pid]; NPRB = RIV2nb_rb_LUT100[rballoc]; dlsch0_harq->delta_PUCCH = delta_PUCCH_lut[TPC&3]; + dlsch[0]->g_pucch += delta_PUCCH_lut[TPC&3]; } - if (vrb_type == 0) { - dlsch0_harq->rb_alloc[0] = localRIV2alloc_LUT100_0[rballoc]; - dlsch0_harq->rb_alloc[1] = localRIV2alloc_LUT100_1[rballoc]; - dlsch0_harq->rb_alloc[2] = localRIV2alloc_LUT100_2[rballoc]; - dlsch0_harq->rb_alloc[3] = localRIV2alloc_LUT100_3[rballoc]; + if (vrb_type == LOCALIZED) { + dlsch0_harq->rb_alloc_even[0] = localRIV2alloc_LUT50_0[rballoc]; + dlsch0_harq->rb_alloc_even[1] = localRIV2alloc_LUT50_1[rballoc]; + dlsch0_harq->rb_alloc_even[2] = localRIV2alloc_LUT100_2[rballoc]; + dlsch0_harq->rb_alloc_even[3] = localRIV2alloc_LUT100_3[rballoc]; + dlsch0_harq->rb_alloc_odd[0] = localRIV2alloc_LUT50_0[rballoc]; + dlsch0_harq->rb_alloc_odd[1] = localRIV2alloc_LUT50_1[rballoc]; + dlsch0_harq->rb_alloc_odd[2] = localRIV2alloc_LUT100_2[rballoc]; + dlsch0_harq->rb_alloc_odd[3] = localRIV2alloc_LUT100_3[rballoc]; } else { - dlsch0_harq->rb_alloc[0] = distRIV2alloc_LUT100_0[rballoc]; - dlsch0_harq->rb_alloc[1] = distRIV2alloc_LUT100_1[rballoc]; - dlsch0_harq->rb_alloc[2] = distRIV2alloc_LUT100_2[rballoc]; - dlsch0_harq->rb_alloc[3] = distRIV2alloc_LUT100_3[rballoc]; + if ((rballoc&(1<<10)) == 0) { //Gap 1 + rballoc = rballoc&(~(1<<12)); + dlsch0_harq->rb_alloc_even[0] = distRIV2alloc_gap0_even_LUT50_0[rballoc]; + dlsch0_harq->rb_alloc_even[1] = distRIV2alloc_gap0_even_LUT50_1[rballoc]; + dlsch0_harq->rb_alloc_even[2] = distRIV2alloc_gap0_even_LUT100_2[rballoc]; + dlsch0_harq->rb_alloc_even[3] = distRIV2alloc_gap0_even_LUT100_3[rballoc]; + dlsch0_harq->rb_alloc_odd[0] = distRIV2alloc_gap0_odd_LUT50_0[rballoc]; + dlsch0_harq->rb_alloc_odd[1] = distRIV2alloc_gap0_odd_LUT50_1[rballoc]; + dlsch0_harq->rb_alloc_odd[2] = distRIV2alloc_gap0_odd_LUT100_2[rballoc]; + dlsch0_harq->rb_alloc_odd[3] = distRIV2alloc_gap0_odd_LUT100_3[rballoc]; + } + else { //Gap 2 + rballoc = rballoc&(~(1<<12)); + dlsch0_harq->rb_alloc_even[0] = distRIV2alloc_gap1_even_LUT50_0[rballoc]; + dlsch0_harq->rb_alloc_even[1] = distRIV2alloc_gap1_even_LUT50_1[rballoc]; + dlsch0_harq->rb_alloc_even[2] = distRIV2alloc_gap1_even_LUT100_2[rballoc]; + dlsch0_harq->rb_alloc_even[3] = distRIV2alloc_gap1_even_LUT100_3[rballoc]; + dlsch0_harq->rb_alloc_odd[0] = distRIV2alloc_gap1_odd_LUT50_0[rballoc]; + dlsch0_harq->rb_alloc_odd[1] = distRIV2alloc_gap1_odd_LUT50_1[rballoc]; + dlsch0_harq->rb_alloc_odd[2] = distRIV2alloc_gap1_odd_LUT100_2[rballoc]; + dlsch0_harq->rb_alloc_odd[3] = distRIV2alloc_gap1_odd_LUT100_3[rballoc]; + } } + dlsch0_harq->vrb_type = vrb_type; dlsch0_harq->nb_rb = RIV2nb_rb_LUT100[rballoc];//NPRB; RIV_max = RIV_max100; @@ -3708,16 +4087,16 @@ int generate_ue_dlsch_params_from_dci(uint8_t subframe, } // change the mcs limit from 7 to 8, supported by MAC - if (mcs > 10) { + /* if (mcs > 10) { LOG_E(PHY,"Format 1A: subframe %d unlikely mcs for format 1A (%d), TPC %d rv %d\n",subframe,mcs,TPC,rv); return(-1); - } + }*/ if ((rnti==si_rnti) || (rnti==p_rnti) || (rnti==ra_rnti)) { // - if (dlsch0_harq->round == 4) { + // if ((dlsch0_harq->round == 4) || ( { dlsch0_harq->round = 0; dlsch0_harq->first_tx = 1; - } + // } // if (dlsch0_harq->round == 0) // ndi = 1-dlsch0_harq->DCINdi; @@ -3731,8 +4110,15 @@ int generate_ue_dlsch_params_from_dci(uint8_t subframe, dlsch0_harq->mimo_mode = frame_parms->mode1_flag == 1 ?SISO : ALAMOUTI; dlsch0_harq->dl_power_off = 1; //no power offset - //LOG_I(PHY,"UE (%x/%d): Subframe %d Format1A DCI: ndi %d, old_ndi %d (first tx %d) harq_status %d\n",dlsch[0]->rnti,harq_pid,subframe,ndi,dlsch0_harq->DCINdi, - //dlsch0_harq->first_tx,dlsch0_harq->status); + LOG_D(PHY,"UE (%x/%d): Subframe %d Format1A DCI: ndi %d, old_ndi %d (first tx %d) harq_status %d, round %d\n", + dlsch[0]->rnti, + harq_pid, + subframe, + ndi, + dlsch0_harq->DCINdi, + dlsch0_harq->first_tx, + dlsch0_harq->status, + dlsch0_harq->round); if ((ndi!=dlsch0_harq->DCINdi)|| // DCI has been toggled or this is the first transmission (dlsch0_harq->first_tx==1)) { dlsch0_harq->round = 0; @@ -3746,12 +4132,153 @@ int generate_ue_dlsch_params_from_dci(uint8_t subframe, dlsch0_harq->DCINdi = ndi; dlsch0_harq->mcs = mcs; - dlsch0_harq->TBS = TBStable[get_I_TBS(mcs)][NPRB-1]; + if ((rnti==si_rnti) || (rnti==p_rnti) || (rnti==ra_rnti)) { + dlsch0_harq->TBS = TBStable[mcs][NPRB-1]; + dlsch0_harq->Qm = 2; + } + else { + dlsch0_harq->TBS = TBStable[get_I_TBS(mcs)][NPRB-1]; + dlsch0_harq->Qm = get_Qm(mcs); + } dlsch[0]->rnti = rnti; + dlsch[0]->active = 1; dlsch0 = dlsch[0]; //printf("Format 1A: harq_pid %d, nb_rb %d, round %d\n",harq_pid,dlsch0_harq->nb_rb,dlsch0_harq->round); break; + case format1C: + + harq_pid = 0; + dlsch0_harq = dlsch[0]->harq_processes[harq_pid]; + + switch (frame_parms->N_RB_DL) { + case 6: + mcs = ((DCI1C_1_5MHz_t *)dci_pdu)->mcs; + rballoc = conv_1C_RIV(((DCI1C_1_5MHz_t *)dci_pdu)->rballoc,6); + dlsch0_harq->nb_rb = RIV2nb_rb_LUT6[rballoc]; + dlsch0_harq->rb_alloc_even[0] = distRIV2alloc_even_LUT6[rballoc]; + dlsch0_harq->rb_alloc_odd[0] = distRIV2alloc_odd_LUT6[rballoc]; + RIV_max = RIV_max6; + + break; + + case 25: + mcs = ((DCI1C_5MHz_t *)dci_pdu)->mcs; + rballoc = conv_1C_RIV(((DCI1C_5MHz_t *)dci_pdu)->rballoc,25); + dlsch0_harq->nb_rb = RIV2nb_rb_LUT25[rballoc]; + dlsch0_harq->rb_alloc_even[0] = distRIV2alloc_even_LUT25[rballoc]; + dlsch0_harq->rb_alloc_odd[0] = distRIV2alloc_odd_LUT25[rballoc]; + RIV_max = RIV_max25; + + // printf("Format1C : %x : mcs %d, rballoc %d=>%d=>%x\n",((uint32_t*)dci_pdu)[0], + // mcs,((DCI1C_5MHz_t *)dci_pdu)->rballoc,rballoc,dlsch0_harq->rb_alloc_even[0]); + break; + + case 50: + mcs = ((DCI1C_10MHz_t *)dci_pdu)->mcs; + rballoc = conv_1C_RIV(((DCI1C_10MHz_t *)dci_pdu)->rballoc,50); + Ngap = ((DCI1C_10MHz_t *)dci_pdu)->Ngap; + dlsch0_harq->nb_rb = RIV2nb_rb_LUT50[rballoc]; + if (Ngap == 0) { + dlsch0_harq->rb_alloc_even[0] = distRIV2alloc_gap0_even_LUT50_0[rballoc]; + dlsch0_harq->rb_alloc_odd[0] = distRIV2alloc_gap0_odd_LUT50_0[rballoc]; + dlsch0_harq->rb_alloc_even[1] = distRIV2alloc_gap0_even_LUT50_1[rballoc]; + dlsch0_harq->rb_alloc_odd[1] = distRIV2alloc_gap0_odd_LUT50_1[rballoc]; + } + else { + dlsch0_harq->rb_alloc_even[0] = distRIV2alloc_gap1_even_LUT50_0[rballoc]; + dlsch0_harq->rb_alloc_odd[0] = distRIV2alloc_gap1_odd_LUT50_0[rballoc]; + dlsch0_harq->rb_alloc_even[1] = distRIV2alloc_gap1_even_LUT50_1[rballoc]; + dlsch0_harq->rb_alloc_odd[1] = distRIV2alloc_gap1_odd_LUT50_1[rballoc]; + } + RIV_max = RIV_max50; + + break; + + case 100: + mcs = ((DCI1C_20MHz_t *)dci_pdu)->mcs; + rballoc = conv_1C_RIV(((DCI1C_20MHz_t *)dci_pdu)->rballoc,100); + Ngap = ((DCI1C_20MHz_t *)dci_pdu)->Ngap; + dlsch0_harq->nb_rb = RIV2nb_rb_LUT100[rballoc]; + if (Ngap==0) { + dlsch0_harq->rb_alloc_even[0] = distRIV2alloc_gap0_even_LUT100_0[rballoc]; + dlsch0_harq->rb_alloc_odd[0] = distRIV2alloc_gap0_odd_LUT100_0[rballoc]; + dlsch0_harq->rb_alloc_even[1] = distRIV2alloc_gap0_even_LUT100_1[rballoc]; + dlsch0_harq->rb_alloc_odd[1] = distRIV2alloc_gap0_odd_LUT100_1[rballoc]; + dlsch0_harq->rb_alloc_even[2] = distRIV2alloc_gap0_even_LUT100_2[rballoc]; + dlsch0_harq->rb_alloc_odd[2] = distRIV2alloc_gap0_odd_LUT100_2[rballoc]; + dlsch0_harq->rb_alloc_even[3] = distRIV2alloc_gap0_even_LUT100_3[rballoc]; + dlsch0_harq->rb_alloc_odd[3] = distRIV2alloc_gap0_odd_LUT100_3[rballoc]; + } + else { + dlsch0_harq->rb_alloc_even[0] = distRIV2alloc_gap1_even_LUT100_0[rballoc]; + dlsch0_harq->rb_alloc_odd[0] = distRIV2alloc_gap1_odd_LUT100_0[rballoc]; + dlsch0_harq->rb_alloc_even[1] = distRIV2alloc_gap1_even_LUT100_1[rballoc]; + dlsch0_harq->rb_alloc_odd[1] = distRIV2alloc_gap1_odd_LUT100_1[rballoc]; + dlsch0_harq->rb_alloc_even[2] = distRIV2alloc_gap1_even_LUT100_2[rballoc]; + dlsch0_harq->rb_alloc_odd[2] = distRIV2alloc_gap1_odd_LUT100_2[rballoc]; + dlsch0_harq->rb_alloc_even[3] = distRIV2alloc_gap1_even_LUT100_3[rballoc]; + dlsch0_harq->rb_alloc_odd[3] = distRIV2alloc_gap1_odd_LUT100_3[rballoc]; + } + RIV_max = RIV_max100; + /* + printf("Format1C : %x : mcs %d, rballoc %d=>%d=>(%08x.%08x.%08x.%08x), Ngap %d\n",((uint32_t*)dci_pdu)[0], + mcs,((DCI1C_20MHz_t *)dci_pdu)->rballoc,rballoc, + dlsch0_harq->rb_alloc_even[0], + dlsch0_harq->rb_alloc_even[1], + dlsch0_harq->rb_alloc_even[2], + dlsch0_harq->rb_alloc_even[3], + Ngap + ); + */ + break; + + default: + LOG_E(PHY,"Format 1C: Unknown N_RB_DL %d\n",frame_parms->N_RB_DL); + return(-1); + break; + } + if (rballoc>RIV_max) { + LOG_E(PHY,"Format 1C: rb_alloc > RIV_max\n"); + return(-1); + } + + dlsch0_harq->round = 0; + dlsch0_harq->first_tx = 1; + dlsch0_harq->vrb_type = DISTRIBUTED; + dlsch[0]->current_harq_pid = harq_pid; + + if (rnti==si_rnti) { // rule from Section 5.3.1 of 36.321 + if (((frame&1) == 0) && (subframe == 5)) + dlsch0_harq->rvidx = (((3*((frame>>1)&3))+1)>>1)&3; // SIB1 + else + dlsch0_harq->rvidx = (((3*(subframe&3))+1)>>1)&3; // other SIBs + } + else if ((rnti==p_rnti) || (rnti==ra_rnti)) { // Section 7.1.7.3 + dlsch0_harq->rvidx = 0; + } + + + dlsch0_harq->Nl = 1; + dlsch0_harq->mimo_mode = frame_parms->mode1_flag == 1 ?SISO : ALAMOUTI; + dlsch0_harq->dl_power_off = 1; //no power offset + + LOG_D(PHY,"UE (%x/%d): Subframe %d Format1C DCI: harq_status %d, round %d\n", + dlsch[0]->rnti, + harq_pid, + subframe, + dlsch0_harq->status, + dlsch0_harq->round); + + dlsch0_harq->mcs = mcs; + + dlsch0_harq->TBS = TBStable1C[mcs]; + dlsch0_harq->Qm = 2; + dlsch[0]->rnti = rnti; + dlsch[0]->active = 1; + dlsch0 = dlsch[0]; + break; + case format1: switch (frame_parms->N_RB_DL) { @@ -3761,6 +4288,7 @@ int generate_ue_dlsch_params_from_dci(uint8_t subframe, rballoc = ((DCI1_1_5MHz_TDD_t *)dci_pdu)->rballoc; rah = ((DCI1_1_5MHz_TDD_t *)dci_pdu)->rah; rv = ((DCI1_1_5MHz_TDD_t *)dci_pdu)->rv; + TPC = ((DCI1_1_5MHz_TDD_t *)dci_pdu)->TPC; ndi = ((DCI1_1_5MHz_TDD_t *)dci_pdu)->ndi; harq_pid = ((DCI1_1_5MHz_TDD_t *)dci_pdu)->harq_pid; } else { @@ -3768,6 +4296,7 @@ int generate_ue_dlsch_params_from_dci(uint8_t subframe, rah = ((DCI1_1_5MHz_FDD_t *)dci_pdu)->rah; rballoc = ((DCI1_1_5MHz_FDD_t *)dci_pdu)->rballoc; rv = ((DCI1_1_5MHz_FDD_t *)dci_pdu)->rv; + TPC = ((DCI1_1_5MHz_FDD_t *)dci_pdu)->TPC; ndi = ((DCI1_1_5MHz_FDD_t *)dci_pdu)->ndi; harq_pid = ((DCI1_1_5MHz_FDD_t *)dci_pdu)->harq_pid; } @@ -3780,6 +4309,7 @@ int generate_ue_dlsch_params_from_dci(uint8_t subframe, rballoc = ((DCI1_5MHz_TDD_t *)dci_pdu)->rballoc; rah = ((DCI1_5MHz_TDD_t *)dci_pdu)->rah; rv = ((DCI1_5MHz_TDD_t *)dci_pdu)->rv; + TPC = ((DCI1_5MHz_TDD_t *)dci_pdu)->TPC; ndi = ((DCI1_5MHz_TDD_t *)dci_pdu)->ndi; harq_pid = ((DCI1_5MHz_TDD_t *)dci_pdu)->harq_pid; } else { @@ -3787,6 +4317,7 @@ int generate_ue_dlsch_params_from_dci(uint8_t subframe, rah = ((DCI1_5MHz_FDD_t *)dci_pdu)->rah; rballoc = ((DCI1_5MHz_FDD_t *)dci_pdu)->rballoc; rv = ((DCI1_5MHz_FDD_t *)dci_pdu)->rv; + TPC = ((DCI1_5MHz_FDD_t *)dci_pdu)->TPC; ndi = ((DCI1_5MHz_FDD_t *)dci_pdu)->ndi; harq_pid = ((DCI1_5MHz_FDD_t *)dci_pdu)->harq_pid; } @@ -3799,6 +4330,7 @@ int generate_ue_dlsch_params_from_dci(uint8_t subframe, rballoc = ((DCI1_10MHz_TDD_t *)dci_pdu)->rballoc; rah = ((DCI1_10MHz_TDD_t *)dci_pdu)->rah; rv = ((DCI1_10MHz_TDD_t *)dci_pdu)->rv; + TPC = ((DCI1_10MHz_TDD_t *)dci_pdu)->TPC; ndi = ((DCI1_10MHz_TDD_t *)dci_pdu)->ndi; harq_pid = ((DCI1_10MHz_TDD_t *)dci_pdu)->harq_pid; } else { @@ -3806,6 +4338,7 @@ int generate_ue_dlsch_params_from_dci(uint8_t subframe, rah = ((DCI1_10MHz_FDD_t *)dci_pdu)->rah; rballoc = ((DCI1_10MHz_FDD_t *)dci_pdu)->rballoc; rv = ((DCI1_10MHz_FDD_t *)dci_pdu)->rv; + TPC = ((DCI1_10MHz_FDD_t *)dci_pdu)->TPC; ndi = ((DCI1_10MHz_FDD_t *)dci_pdu)->ndi; harq_pid = ((DCI1_10MHz_FDD_t *)dci_pdu)->harq_pid; } @@ -3818,6 +4351,7 @@ int generate_ue_dlsch_params_from_dci(uint8_t subframe, rballoc = ((DCI1_20MHz_TDD_t *)dci_pdu)->rballoc; rah = ((DCI1_20MHz_TDD_t *)dci_pdu)->rah; rv = ((DCI1_20MHz_TDD_t *)dci_pdu)->rv; + TPC = ((DCI1_20MHz_TDD_t *)dci_pdu)->TPC; ndi = ((DCI1_20MHz_TDD_t *)dci_pdu)->ndi; harq_pid = ((DCI1_20MHz_TDD_t *)dci_pdu)->harq_pid; } else { @@ -3825,6 +4359,7 @@ int generate_ue_dlsch_params_from_dci(uint8_t subframe, rah = ((DCI1_20MHz_FDD_t *)dci_pdu)->rah; rballoc = ((DCI1_20MHz_FDD_t *)dci_pdu)->rballoc; rv = ((DCI1_20MHz_FDD_t *)dci_pdu)->rv; + TPC = ((DCI1_20MHz_FDD_t *)dci_pdu)->TPC; ndi = ((DCI1_20MHz_FDD_t *)dci_pdu)->ndi; harq_pid = ((DCI1_20MHz_FDD_t *)dci_pdu)->harq_pid; } @@ -3838,10 +4373,17 @@ int generate_ue_dlsch_params_from_dci(uint8_t subframe, } dlsch0_harq = dlsch[0]->harq_processes[harq_pid]; + dlsch0_harq->delta_PUCCH = delta_PUCCH_lut[TPC&3]; + dlsch[0]->g_pucch += delta_PUCCH_lut[TPC&3]; + dlsch[0]->current_harq_pid = harq_pid; dlsch[0]->harq_ack[subframe].harq_id = harq_pid; - conv_rballoc(rah,rballoc,frame_parms->N_RB_DL,dlsch0_harq->rb_alloc); + conv_rballoc(rah,rballoc,frame_parms->N_RB_DL,dlsch0_harq->rb_alloc_even); + dlsch0_harq->rb_alloc_odd[0]= dlsch0_harq->rb_alloc_even[0]; + dlsch0_harq->rb_alloc_odd[1]= dlsch0_harq->rb_alloc_even[1]; + dlsch0_harq->rb_alloc_odd[2]= dlsch0_harq->rb_alloc_even[2]; + dlsch0_harq->rb_alloc_odd[3]= dlsch0_harq->rb_alloc_even[3]; dlsch0_harq->nb_rb = conv_nprb(rah, rballoc, @@ -3858,6 +4400,10 @@ int generate_ue_dlsch_params_from_dci(uint8_t subframe, // printf("NPRB %d\n",NPRB); dlsch0_harq->delta_PUCCH = delta_PUCCH_lut[TPC&3]; + dlsch[0]->g_pucch += delta_PUCCH_lut[TPC&3]; + + if (TPC!=1) + LOG_I(PHY,"format1 TPC %d, dlsch0_harq->delta_PUCCH %d\n",TPC,dlsch0_harq->delta_PUCCH); dlsch0_harq->rvidx = rv; @@ -3898,6 +4444,12 @@ int generate_ue_dlsch_params_from_dci(uint8_t subframe, dlsch0_harq->mcs = mcs; dlsch0_harq->TBS = TBStable[get_I_TBS(mcs)][NPRB-1]; + if (mcs <= 28) + dlsch0_harq->Qm = get_Qm(mcs); + else if (mcs<=31) + dlsch0_harq->Qm = (mcs-28)<<1; + else + LOG_E(PHY,"invalid mcs %d\n",mcs); // msg("test: MCS %d, NPRB %d, TBS %d\n",mcs,NPRB,dlsch0_harq->TBS); dlsch[0]->current_harq_pid = harq_pid; @@ -4139,17 +4691,31 @@ int generate_ue_dlsch_params_from_dci(uint8_t subframe, conv_rballoc(rah, rballoc, frame_parms->N_RB_DL, - dlsch0_harq->rb_alloc); - dlsch1_harq->rb_alloc[0] = dlsch0_harq->rb_alloc[0]; + dlsch0_harq->rb_alloc_even); + + dlsch0_harq->rb_alloc_odd[0]= dlsch0_harq->rb_alloc_even[0]; + dlsch0_harq->rb_alloc_odd[1]= dlsch0_harq->rb_alloc_even[1]; + dlsch0_harq->rb_alloc_odd[2]= dlsch0_harq->rb_alloc_even[2]; + dlsch0_harq->rb_alloc_odd[3]= dlsch0_harq->rb_alloc_even[3]; + + dlsch1_harq->rb_alloc_even[0] = dlsch0_harq->rb_alloc_even[0]; + dlsch1_harq->rb_alloc_even[1] = dlsch0_harq->rb_alloc_even[1]; + dlsch1_harq->rb_alloc_even[2] = dlsch0_harq->rb_alloc_even[2]; + dlsch1_harq->rb_alloc_even[3] = dlsch0_harq->rb_alloc_even[3]; + dlsch1_harq->rb_alloc_odd[0] = dlsch0_harq->rb_alloc_odd[0]; + dlsch1_harq->rb_alloc_odd[1] = dlsch0_harq->rb_alloc_odd[1]; + dlsch1_harq->rb_alloc_odd[2] = dlsch0_harq->rb_alloc_odd[2]; + dlsch1_harq->rb_alloc_odd[3] = dlsch0_harq->rb_alloc_odd[3]; dlsch0_harq->nb_rb = conv_nprb(rah, - rballoc, - frame_parms->N_RB_DL); + rballoc, + frame_parms->N_RB_DL); dlsch1_harq->nb_rb = dlsch0_harq->nb_rb; dlsch0_harq->mcs = mcs1; dlsch0_harq->delta_PUCCH = delta_PUCCH_lut[TPC&3]; + dlsch[0]->g_pucch += delta_PUCCH_lut[TPC&3]; /* if (dlsch0_harq->mcs>20) { msg("dci_tools.c: mcs > 20 disabled for now (asked %d)\n",dlsch0_harq->mcs); @@ -4238,9 +4804,17 @@ int generate_ue_dlsch_params_from_dci(uint8_t subframe, if (dlsch0_harq->nb_rb>1) { dlsch0_harq->TBS = TBStable[get_I_TBS(dlsch0_harq->mcs)][dlsch0_harq->nb_rb-1]; + if (mcs1 <= 28) + dlsch0_harq->Qm = get_Qm(mcs1); + else if (mcs1<=31) + dlsch0_harq->Qm = (mcs1-28)<<1; + else + LOG_E(PHY,"invalid mcs1 %d\n",mcs1); + } else dlsch0_harq->TBS =0; + /* if (dlsch0_harq->mcs > 18) printf("mcs %d, TBS %d\n",dlsch0_harq->mcs,dlsch0_harq->TBS); @@ -4256,14 +4830,21 @@ int generate_ue_dlsch_params_from_dci(uint8_t subframe, if (dlsch1_harq->nb_rb>1) { dlsch1_harq->TBS = TBStable[dlsch1_harq->mcs][dlsch1_harq->nb_rb-1]; + if (mcs2 <= 28) + dlsch1_harq->Qm = get_Qm(mcs2); + else if (mcs1<=31) + dlsch1_harq->Qm = (mcs2-28)<<1; + else + LOG_E(PHY,"invalid mcs2 %d\n",mcs2); } else dlsch1_harq->TBS = 0; + dlsch0->rnti = rnti; dlsch1->rnti = rnti; - dlsch0_harq->dl_power_off = 1; //no power offset - dlsch1_harq->dl_power_off = 1; //no power offset + dlsch0_harq->dl_power_off = 0; //no power offset + dlsch1_harq->dl_power_off = 0; //no power offset dlsch0->active = 1; dlsch1->active = 1; @@ -4524,7 +5105,19 @@ int generate_ue_dlsch_params_from_dci(uint8_t subframe, dlsch0->harq_ack[subframe].harq_id = harq_pid; dlsch1->harq_ack[subframe].harq_id = harq_pid; - conv_rballoc(rah,rballoc,frame_parms->N_RB_DL,dlsch0_harq->rb_alloc); + conv_rballoc(rah,rballoc,frame_parms->N_RB_DL,dlsch0_harq->rb_alloc_even); + dlsch0_harq->rb_alloc_odd[0] = dlsch0_harq->rb_alloc_even[0]; + dlsch0_harq->rb_alloc_odd[1] = dlsch0_harq->rb_alloc_even[1]; + dlsch0_harq->rb_alloc_odd[2] = dlsch0_harq->rb_alloc_even[2]; + dlsch0_harq->rb_alloc_odd[3] = dlsch0_harq->rb_alloc_even[3]; + dlsch1_harq->rb_alloc_even[0] = dlsch0_harq->rb_alloc_even[0]; + dlsch1_harq->rb_alloc_even[1] = dlsch0_harq->rb_alloc_even[1]; + dlsch1_harq->rb_alloc_even[2] = dlsch0_harq->rb_alloc_even[2]; + dlsch1_harq->rb_alloc_even[3] = dlsch0_harq->rb_alloc_even[3]; + dlsch1_harq->rb_alloc_odd[0] = dlsch0_harq->rb_alloc_odd[0]; + dlsch1_harq->rb_alloc_odd[1] = dlsch0_harq->rb_alloc_odd[1]; + dlsch1_harq->rb_alloc_odd[2] = dlsch0_harq->rb_alloc_odd[2]; + dlsch1_harq->rb_alloc_odd[3] = dlsch0_harq->rb_alloc_odd[3]; dlsch0_harq->nb_rb = conv_nprb(rah, rballoc, @@ -4542,7 +5135,9 @@ int generate_ue_dlsch_params_from_dci(uint8_t subframe, // printf("NPRB %d\n",NPRB); dlsch0_harq->delta_PUCCH = delta_PUCCH_lut[TPC&3]; + dlsch0->g_pucch += delta_PUCCH_lut[TPC&3]; dlsch1_harq->delta_PUCCH = delta_PUCCH_lut[TPC&3]; + dlsch1->g_pucch += delta_PUCCH_lut[TPC&3]; dlsch0_harq->mcs = mcs1; dlsch1_harq->mcs = mcs2; @@ -4626,6 +5221,8 @@ int generate_ue_dlsch_params_from_dci(uint8_t subframe, dlsch0_harq->TBS = TBStable[get_I_TBS(dlsch0_harq->mcs)][dlsch0_harq->nb_rb-1]; dlsch1_harq->TBS = TBStable[get_I_TBS(dlsch1_harq->mcs)][dlsch0_harq->nb_rb-1]; + + if ((dlsch0->active==1) && (dlsch1->active==1)) { dlsch0_harq->mimo_mode = LARGE_CDD; dlsch1_harq->mimo_mode = LARGE_CDD; @@ -4644,7 +5241,8 @@ int generate_ue_dlsch_params_from_dci(uint8_t subframe, dlsch0_harq->dl_power_off = 0; //apply power offset dlsch1_harq->dl_power_off = 0; //apply power offset dlsch0_harq->TBS = TBStable[get_I_TBS(dlsch0_harq->mcs)][dlsch0_harq->nb_rb-1]; - dlsch0_harq->TBS = TBStable[get_I_TBS(dlsch0_harq->mcs)][dlsch0_harq->nb_rb-1]; + dlsch1_harq->TBS = TBStable[get_I_TBS(dlsch1_harq->mcs)][dlsch1_harq->nb_rb-1]; + break; case 1: // one-layers on TB 0, two on TB 1 @@ -4721,6 +5319,20 @@ int generate_ue_dlsch_params_from_dci(uint8_t subframe, LOG_E(PHY,"Illegal number of antennas for eNB %d\n",frame_parms->nb_antennas_tx_eNB); } + if (mcs1 <= 28) + dlsch0_harq->Qm = get_Qm(mcs1); + else if (mcs1<=31) + dlsch0_harq->Qm = (mcs1-28)<<1; + else + LOG_E(PHY,"invalid mcs1 %d\n",mcs1); + + if (mcs2 <= 28) + dlsch1_harq->Qm = get_Qm(mcs2); + else if (mcs2<=31) + dlsch1_harq->Qm = (mcs2-28)<<1; + else + LOG_E(PHY,"invalid mcs2 %d\n",mcs2); + // printf("Format 2A: NPRB=%d (rballoc %x,mcs1 %d, mcs2 %d, frame_type %d N_RB_DL %d,active %d/%d)\n",NPRB,rballoc,mcs1,mcs2,frame_parms->frame_type,frame_parms->N_RB_DL,dlsch0->active,dlsch1->active); //printf("UE (%x/%d): Subframe %d Format2A DCI: ndi1 %d, old_ndi1 %d, ndi2 %d, old_ndi2 %d (first tx1 %d, first tx2 %d) harq_status1 %d, harq_status2 %d\n",dlsch0->rnti,harq_pid,subframe,ndi,dlsch0_harq->DCINdi, // dlsch0_harq->first_tx,dlsch1_harq->first_tx,dlsch0_harq->status,dlsch1_harq->status); @@ -4757,9 +5369,18 @@ int generate_ue_dlsch_params_from_dci(uint8_t subframe, dlsch0_harq = dlsch[0]->harq_processes[harq_pid]; conv_rballoc(((DCI1E_5MHz_2A_M10PRB_TDD_t *)dci_pdu)->rah, ((DCI1E_5MHz_2A_M10PRB_TDD_t *)dci_pdu)->rballoc,frame_parms->N_RB_DL, - dlsch0_harq->rb_alloc); - //dlsch1_harq->rb_alloc[0] = dlsch0_harq->rb_alloc[0]; - + dlsch0_harq->rb_alloc_even); + + dlsch0_harq->rb_alloc_odd[0] = dlsch0_harq->rb_alloc_even[0]; + dlsch0_harq->rb_alloc_odd[1] = dlsch0_harq->rb_alloc_even[1]; + dlsch0_harq->rb_alloc_odd[2] = dlsch0_harq->rb_alloc_even[2]; + dlsch0_harq->rb_alloc_odd[3] = dlsch0_harq->rb_alloc_even[3]; + /* + dlsch1_harq->rb_alloc_even[0] = dlsch0_harq->rb_alloc_even[0]; + dlsch1_harq->rb_alloc_even[1] = dlsch0_harq->rb_alloc_even[1]; + dlsch1_harq->rb_alloc_even[2] = dlsch0_harq->rb_alloc_even[2]; + dlsch1_harq->rb_alloc_even[3] = dlsch0_harq->rb_alloc_even[3]; + */ dlsch0_harq->nb_rb = conv_nprb(((DCI1E_5MHz_2A_M10PRB_TDD_t *)dci_pdu)->rah, ((DCI1E_5MHz_2A_M10PRB_TDD_t *)dci_pdu)->rballoc, frame_parms->N_RB_DL); @@ -4767,6 +5388,7 @@ int generate_ue_dlsch_params_from_dci(uint8_t subframe, dlsch0_harq->mcs = ((DCI1E_5MHz_2A_M10PRB_TDD_t *)dci_pdu)->mcs; dlsch0_harq->delta_PUCCH = delta_PUCCH_lut[((DCI1E_5MHz_2A_M10PRB_TDD_t *)dci_pdu)->TPC&3]; + dlsch[0]->g_pucch += delta_PUCCH_lut[TPC&3]; @@ -7316,15 +7938,6 @@ main() generate_RIV_tables(); - for (i=0; i<512; i++) { - msg("RIV %d: nb_rb %d, alloc %x, alloc_dist %x\n", - i, - RIV2nb_rb_LUT25[i], - localRIV2alloc_LUT25[i], - distRIV2alloc_LUT25[i]); - - } - rah = 0; rballoc = 0x1fff; msg("rballoc 0 %x => %x\n",rballoc,conv_rballoc(rah,rballoc)); diff --git a/openair1/PHY/LTE_TRANSPORT/defs.h b/openair1/PHY/LTE_TRANSPORT/defs.h index 847beb5b09..0d3d028c8a 100644 --- a/openair1/PHY/LTE_TRANSPORT/defs.h +++ b/openair1/PHY/LTE_TRANSPORT/defs.h @@ -114,6 +114,10 @@ typedef struct { uint8_t *c[MAX_NUM_DLSCH_SEGMENTS]; /// RTC values for each segment (for definition see 36-212 V8.6 2009-03, p.15) uint32_t RTC[MAX_NUM_DLSCH_SEGMENTS]; + /// Frame where current HARQ round was sent + uint32_t frame; + /// Subframe where current HARQ round was sent + uint32_t subframe; /// Index of current HARQ round for this DLSCH uint8_t round; /// MCS format for this DLSCH @@ -124,6 +128,8 @@ typedef struct { MIMO_mode_t mimo_mode; /// Current RB allocation uint32_t rb_alloc[4]; + /// distributed/localized flag + vrb_t vrb_type; /// Current subband PMI allocation uint16_t pmi_alloc; /// Current subband RI allocation @@ -139,7 +145,7 @@ typedef struct { /// Concatenated "e"-sequences (for definition see 36-212 V8.6 2009-03, p.17-18) uint8_t e[MAX_NUM_CHANNEL_BITS]; /// Turbo-code outputs (36-212 V8.6 2009-03, p.12 - uint8_t d[MAX_NUM_DLSCH_SEGMENTS][(96+3+(3*6144))]; + uint8_t *d[MAX_NUM_DLSCH_SEGMENTS];//[(96+3+(3*6144))]; /// Sub-block interleaver outputs (36-212 V8.6 2009-03, p.16-17) uint8_t w[MAX_NUM_DLSCH_SEGMENTS][3*6144]; /// Number of code segments (for definition see 36-212 V8.6 2009-03, p.9) @@ -515,6 +521,8 @@ typedef struct { uint8_t round; /// MCS format for this DLSCH uint8_t mcs; + /// Qm (modulation order) for this DLSCH + uint8_t Qm; /// Redundancy-version of the current sub-frame uint8_t rvidx; /// MIMO mode for this DLSCH @@ -547,8 +555,12 @@ typedef struct { uint16_t nb_rb; /// Current subband PMI allocation uint16_t pmi_alloc; - /// Current RB allocation - uint32_t rb_alloc[4]; + /// Current RB allocation (even slots) + uint32_t rb_alloc_even[4]; + /// Current RB allocation (odd slots) + uint32_t rb_alloc_odd[4]; + /// distributed/localized flag + vrb_t vrb_type; /// downlink power offset field uint8_t dl_power_off; } LTE_DL_UE_HARQ_t; @@ -563,6 +575,16 @@ typedef struct { typedef struct { /// UL RSSI per receive antenna int32_t UL_rssi[NB_ANTENNAS_RX]; + /// PUCCH1a/b power (digital linear) + int32_t Po_PUCCH; + /// PUCCH1a/b power (dBm) + int32_t Po_PUCCH_dBm; + /// PUCCH1 power (digital linear), conditioned on below threshold + int32_t Po_PUCCH1_below; + /// PUCCH1 power (digital linear), conditioned on above threshold + int32_t Po_PUCCH1_above; + /// Indicator that Po_PUCCH has been updated by PHY + int32_t Po_PUCCH_update; /// DL Wideband CQI index (2 TBs) uint8_t DL_cqi[2]; /// DL Subband CQI index (from HLC feedback) @@ -673,6 +695,8 @@ typedef struct { uint8_t Kmimo; /// Maximum number of Turbo iterations uint8_t max_turbo_iterations; + /// accumulated tx power adjustment for PUCCH + int8_t g_pucch; } LTE_UE_DLSCH_t; typedef enum {format0, diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_coding.c b/openair1/PHY/LTE_TRANSPORT/dlsch_coding.c index a13f6a100e..f8af3038d3 100644 --- a/openair1/PHY/LTE_TRANSPORT/dlsch_coding.c +++ b/openair1/PHY/LTE_TRANSPORT/dlsch_coding.c @@ -100,6 +100,10 @@ void free_eNB_dlsch(LTE_eNB_DLSCH_t *dlsch) free16(dlsch->harq_processes[i]->c[r],((r==0)?8:0) + 3+768); dlsch->harq_processes[i]->c[r] = NULL; } + if (dlsch->harq_processes[i]->d[r]) { + free16(dlsch->harq_processes[i]->d[r],(96+12+3+(3*6144))); + dlsch->harq_processes[i]->d[r] = NULL; + } } free16(dlsch->harq_processes[i],sizeof(LTE_DL_eNB_HARQ_t)); @@ -168,14 +172,20 @@ LTE_eNB_DLSCH_t *new_eNB_dlsch(unsigned char Kmimo,unsigned char Mdlharq,unsigne if (abstraction_flag==0) { for (r=0; rharq_processes[i]->c[r] = (unsigned char*)malloc16(((r==0)?8:0) + 3+ 768); - + dlsch->harq_processes[i]->c[r] = (uint8_t*)malloc16(((r==0)?8:0) + 3+ 768); + dlsch->harq_processes[i]->d[r] = (uint8_t*)malloc16((96+12+3+(3*6144))); if (dlsch->harq_processes[i]->c[r]) { bzero(dlsch->harq_processes[i]->c[r],((r==0)?8:0) + 3+ 768); } else { msg("Can't get c\n"); exit_flag=2; } + if (dlsch->harq_processes[i]->d[r]) { + bzero(dlsch->harq_processes[i]->d[r],(96+12+3+(3*6144))); + } else { + msg("Can't get d\n"); + exit_flag=2; + } } } } else { @@ -190,8 +200,10 @@ LTE_eNB_DLSCH_t *new_eNB_dlsch(unsigned char Kmimo,unsigned char Mdlharq,unsigne if (abstraction_flag==0) { for (j=0; j<96; j++) - for (r=0; rharq_processes[%d]->d[%d] %p\n",i,r,dlsch->harq_processes[i]->d[r]); dlsch->harq_processes[i]->d[r][j] = LTE_NULL; + } } } @@ -230,7 +242,8 @@ void clean_eNb_dlsch(LTE_eNB_DLSCH_t *dlsch, uint8_t abstraction_flag) if (abstraction_flag==0) { for (j=0; j<96; j++) for (r=0; rharq_processes[i]->d[r][j] = LTE_NULL; + if (dlsch->harq_processes[i]->d[r]) + dlsch->harq_processes[i]->d[r][j] = LTE_NULL; } } } diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_decoding.c b/openair1/PHY/LTE_TRANSPORT/dlsch_decoding.c index 8334266855..532570adf2 100644 --- a/openair1/PHY/LTE_TRANSPORT/dlsch_decoding.c +++ b/openair1/PHY/LTE_TRANSPORT/dlsch_decoding.c @@ -45,7 +45,7 @@ #include "SCHED/extern.h" #include "SIMULATION/TOOLS/defs.h" //#define DEBUG_DLSCH_DECODING - + void free_ue_dlsch(LTE_UE_DLSCH_t *dlsch) { @@ -244,8 +244,6 @@ uint32_t dlsch_decoding(PHY_VARS_UE *phy_vars_ue, */ A = harq_process->TBS; //2072 for QPSK 1/3 - // mod_order = get_Qm(harq_process->mcs); - ret = dlsch->max_turbo_iterations; @@ -278,8 +276,33 @@ uint32_t dlsch_decoding(PHY_VARS_UE *phy_vars_ue, err_flag = 0; r_offset = 0; + unsigned char bw_scaling =1; + + switch (frame_parms->N_RB_DL) { + case 6: + bw_scaling =16; + break; + + case 25: + bw_scaling =4; + break; + + case 50: + bw_scaling =2; + break; + + default: + bw_scaling =1; + break; + } + + if (harq_process->C >= MAX_NUM_DLSCH_SEGMENTS/bw_scaling) { + LOG_E(PHY,"Illegal harq_process->C %d > %d\n",harq_process->C,MAX_NUM_DLSCH_SEGMENTS/bw_scaling); + return((1+dlsch->max_turbo_iterations)); + } for (r=0; rC; r++) { + // Get Turbo interleaver parameters if (rCminus) Kr = harq_process->Kminus; @@ -302,7 +325,7 @@ uint32_t dlsch_decoding(PHY_VARS_UE *phy_vars_ue, } #ifdef DEBUG_DLSCH_DECODING - msg("f1 %d, f2 %d, F %d\n",f1f2mat_old[2*iind],f1f2mat_old[1+(2*iind)],(r==0) ? harq_process->F : 0); + printf("f1 %d, f2 %d, F %d\n",f1f2mat_old[2*iind],f1f2mat_old[1+(2*iind)],(r==0) ? harq_process->F : 0); #endif start_meas(dlsch_rate_unmatching_stats); @@ -316,7 +339,7 @@ uint32_t dlsch_decoding(PHY_VARS_UE *phy_vars_ue, harq_pid,r, G, Kr*3, harq_process->TBS, - get_Qm(harq_process->mcs), + harq_process->Qm, harq_process->nb_rb, harq_process->Nl, harq_process->rvidx, @@ -335,12 +358,12 @@ uint32_t dlsch_decoding(PHY_VARS_UE *phy_vars_ue, dlsch->Kmimo, harq_process->rvidx, (harq_process->round==0)?1:0, - get_Qm(harq_process->mcs), + harq_process->Qm, harq_process->Nl, r, &E)==-1) { stop_meas(dlsch_rate_unmatching_stats); - msg("dlsch_decoding.c: Problem in rate_matching\n"); + LOG_E(PHY,"dlsch_decoding.c: Problem in rate_matching\n"); return(dlsch->max_turbo_iterations); } else stop_meas(dlsch_rate_unmatching_stats); @@ -348,7 +371,7 @@ uint32_t dlsch_decoding(PHY_VARS_UE *phy_vars_ue, r_offset += E; /* - msg("Subblock deinterleaving, d %p w %p\n", + printf("Subblock deinterleaving, d %p w %p\n", harq_process->d[r], harq_process->w); */ @@ -366,29 +389,29 @@ uint32_t dlsch_decoding(PHY_VARS_UE *phy_vars_ue, write_output("decoder_in.m","dec",&harq_process->d[0][96],(3*8*Kr_bytes)+12,1,0); } - msg("decoder input(segment %d) :",r); + printf("decoder input(segment %d) :",r); int i; for (i=0;i<(3*8*Kr_bytes)+12;i++) - msg("%d : %d\n",i,harq_process->d[r][96+i]); - msg("\n");*/ + printf("%d : %d\n",i,harq_process->d[r][96+i]); + printf("\n");*/ #endif - // msg("Clearing c, %p\n",harq_process->c[r]); + // printf("Clearing c, %p\n",harq_process->c[r]); memset(harq_process->c[r],0,Kr_bytes); - // msg("done\n"); + // printf("done\n"); if (harq_process->C == 1) crc_type = CRC24_A; else crc_type = CRC24_B; /* - msg("decoder input(segment %d)\n",r); + printf("decoder input(segment %d)\n",r); for (i=0;i<(3*8*Kr_bytes)+12;i++) if ((harq_process->d[r][96+i]>7) || (harq_process->d[r][96+i] < -8)) - msg("%d : %d\n",i,harq_process->d[r][96+i]); - msg("\n"); + printf("%d : %d\n",i,harq_process->d[r][96+i]); + printf("\n"); */ if (err_flag == 0) { @@ -423,7 +446,7 @@ uint32_t dlsch_decoding(PHY_VARS_UE *phy_vars_ue, if ((err_flag == 0) && (ret>=(1+dlsch->max_turbo_iterations))) {// a Code segment is in error so break; - //msg("CRC failed, segment %d\n",r); + //printf("CRC failed, segment %d\n",r); err_flag = 1; } @@ -456,9 +479,9 @@ uint32_t dlsch_decoding(PHY_VARS_UE *phy_vars_ue, offset = 0; /* - msg("harq_pid %d\n",harq_pid); - msg("F %d, Fbytes %d\n",harq_process->F,harq_process->F>>3); - msg("C %d\n",harq_process->C); + printf("harq_pid %d\n",harq_pid); + printf("F %d, Fbytes %d\n",harq_process->F,harq_process->F>>3); + printf("C %d\n",harq_process->C); */ for (r=0; rC; r++) { if (rCminus) @@ -474,9 +497,9 @@ uint32_t dlsch_decoding(PHY_VARS_UE *phy_vars_ue, &harq_process->c[0][(harq_process->F>>3)], Kr_bytes - (harq_process->F>>3)- ((harq_process->C>1)?3:0)); offset = Kr_bytes - (harq_process->F>>3) - ((harq_process->C>1)?3:0); - // msg("copied %d bytes to b sequence (harq_pid %d)\n", + // printf("copied %d bytes to b sequence (harq_pid %d)\n", // Kr_bytes - (harq_process->F>>3),harq_pid); - // msg("b[0] = %x,c[%d] = %x\n", + // printf("b[0] = %x,c[%d] = %x\n", // harq_process->b[0], // harq_process->F>>3, // harq_process->c[0][(harq_process->F>>3)]); @@ -666,7 +689,7 @@ uint32_t dlsch_decoding_emul(PHY_VARS_UE *phy_vars_ue, case 0: // SI dlsch_ue = phy_vars_ue->dlsch_ue_SI[eNB_id]; dlsch_eNB = PHY_vars_eNB_g[eNB_id2][CC_id]->dlsch_eNB_SI; - // msg("Doing SI: TBS %d\n",dlsch_ue->harq_processes[0]->TBS>>3); + // printf("Doing SI: TBS %d\n",dlsch_ue->harq_processes[0]->TBS>>3); memcpy(dlsch_ue->harq_processes[0]->b,dlsch_eNB->harq_processes[0]->b,dlsch_ue->harq_processes[0]->TBS>>3); #ifdef DEBUG_DLSCH_DECODING LOG_D(PHY,"SI Decoded\n"); @@ -767,9 +790,9 @@ uint32_t dlsch_decoding_emul(PHY_VARS_UE *phy_vars_ue, #ifdef DEBUG_DLSCH_DECODING for (i=0; iharq_processes[0]->TBS>>3; i++) - msg("%x.",dlsch_eNB->harq_processes[0]->b[i]); + printf("%x.",dlsch_eNB->harq_processes[0]->b[i]); - msg("\n"); + printf("\n"); #endif /* diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_demodulation.c b/openair1/PHY/LTE_TRANSPORT/dlsch_demodulation.c index e87519225b..fd93f2baa8 100644 --- a/openair1/PHY/LTE_TRANSPORT/dlsch_demodulation.c +++ b/openair1/PHY/LTE_TRANSPORT/dlsch_demodulation.c @@ -31,7 +31,7 @@ * \brief Top-level routines for demodulating the PDSCH physical channel from 36-211, V8.6 2009-03 * \author R. Knopp, F. Kaltenberger,A. Bhamri, S. Aubert * \date 2011 - DEBUG * \version 0.1 + * \version 0.1 * \company Eurecom * \email: knopp@eurecom.fr,florian.kaltenberger@eurecom.fr,ankit.bhamri@eurecom.fr,sebastien.aubert@eurecom.fr * \note @@ -53,6 +53,7 @@ #endif //#define DEBUG_PHY 1 +//#define DEBUG_DLSCH_MOD 1 int avg[4]; @@ -64,17 +65,18 @@ unsigned char offset_mumimo_llr_drange[29][3]={{8,8,8},{7,7,7},{7,7,7},{7,7,7},{ {5,5,4},{5,5,5},{5,5,5},{3,3,3},{2,2,2},{2,2,2},{2,2,2}, // 16-QAM {2,2,1},{3,3,3},{3,3,3},{3,3,1},{2,2,2},{2,2,2},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}}; //64-QAM */ -/* -//first optimization try -unsigned char offset_mumimo_llr_drange[29][3]={{7, 8, 7},{6, 6, 7},{6, 6, 7},{6, 6, 6},{5, 6, 6},{5, 5, 6},{5, 5, 6},{4, 5, 4},{4, 3, 4},{3, 2, 2},{6, 5, 5},{5, 4, 4},{5, 5, 4},{3, 3, 2},{2, 2, 1},{2, 1, 1},{2, 2, 2},{3, 3, 3},{3, 3, 2},{3, 3, 2},{3, 2, 1},{2, 2, 2},{2, 2, 2},{0, 0, 0},{0, 0, 0},{0, 0, 0},{0, 0, 0},{0, 0, 0}}; -*/ -//second optimization try -/* - unsigned char offset_mumimo_llr_drange[29][3]={{5, 8, 7},{4, 6, 8},{3, 6, 7},{7, 7, 6},{4, 7, 8},{4, 7, 4},{6, 6, 6},{3, 6, 6},{3, 6, 6},{1, 3, 4},{1, 1, 0},{3, 3, 2},{3, 4, 1},{4, 0, 1},{4, 2, 2},{3, 1, 2},{2, 1, 0},{2, 1, 1},{1, 0, 1},{1, 0, 1},{0, 0, 0},{1, 0, 0},{0, 0, 0},{0, 1, 0},{1, 0, 0},{0, 0, 0},{0, 0, 0},{0, 0, 0},{0, 0, 0}}; w -*/ + /* + //first optimization try + unsigned char offset_mumimo_llr_drange[29][3]={{7, 8, 7},{6, 6, 7},{6, 6, 7},{6, 6, 6},{5, 6, 6},{5, 5, 6},{5, 5, 6},{4, 5, 4},{4, 3, 4},{3, 2, 2},{6, 5, 5},{5, 4, 4},{5, 5, 4},{3, 3, 2},{2, 2, 1},{2, 1, 1},{2, 2, 2},{3, 3, 3},{3, 3, 2},{3, 3, 2},{3, 2, 1},{2, 2, 2},{2, 2, 2},{0, 0, 0},{0, 0, 0},{0, 0, 0},{0, 0, 0},{0, 0, 0}}; + */ + //second optimization try + /* + unsigned char offset_mumimo_llr_drange[29][3]={{5, 8, 7},{4, 6, 8},{3, 6, 7},{7, 7, 6},{4, 7, 8},{4, 7, 4},{6, 6, 6},{3, 6, 6},{3, 6, 6},{1, 3, 4},{1, 1, 0},{3, 3, 2},{3, 4, 1},{4, 0, 1},{4, 2, 2},{3, 1, 2},{2, 1, 0},{2, 1, 1},{1, 0, 1},{1, 0, 1},{0, 0, 0},{1, 0, 0},{0, 0, 0},{0, 1, 0},{1, 0, 0},{0, 0, 0},{0, 0, 0},{0, 0, 0},{0, 0, 0}}; w + */ unsigned char offset_mumimo_llr_drange[29][3]= {{0, 6, 5},{0, 4, 5},{0, 4, 5},{0, 5, 4},{0, 5, 6},{0, 5, 3},{0, 4, 4},{0, 4, 4},{0, 3, 3},{0, 1, 2},{1, 1, 0},{1, 3, 2},{3, 4, 1},{2, 0, 0},{2, 2, 2},{1, 1, 1},{2, 1, 0},{2, 1, 1},{1, 0, 1},{1, 0, 1},{0, 0, 0},{1, 0, 0},{0, 0, 0},{0, 1, 0},{1, 0, 0},{0, 0, 0},{0, 0, 0},{0, 0, 0},{0, 0, 0}}; -extern void print_shorts(char *s,__m128i *x); + +extern void print_shorts(char *s,int16_t *x); int rx_pdsch(PHY_VARS_UE *phy_vars_ue, PDSCH_t type, @@ -100,6 +102,7 @@ int rx_pdsch(PHY_VARS_UE *phy_vars_ue, LTE_DL_UE_HARQ_t *dlsch0_harq,*dlsch1_harq = 0; uint8_t beamforming_mode = phy_vars_ue->transmission_mode[eNB_id]<7?0:phy_vars_ue->transmission_mode[eNB_id]; + uint32_t *rballoc; switch (type) { case SI_PDSCH: @@ -153,19 +156,16 @@ int rx_pdsch(PHY_VARS_UE *phy_vars_ue, return(-1); } - // printf("rx_dlsch subframe %d symbol %d: eNB_id %d, eNB_id_i %d, dual_stream_flag %d\n",subframe,symbol,eNB_id,eNB_id_i,dual_stream_flag); - // symbol_mod = (symbol>=(7-frame_parms->Ncp)) ? symbol-(7-frame_parms->Ncp) : symbol; - - /* - if ((symbol_mod == 0) || (symbol_mod == (4-frame_parms->Ncp))) - pilots=1; - else - pilots=0; - */ + + if (((frame_parms->Ncp == NORMAL) && (symbol>=7)) || + ((frame_parms->Ncp == EXTENDED) && (symbol>=6))) + rballoc = dlsch0_harq->rb_alloc_odd; + else + rballoc = dlsch0_harq->rb_alloc_even; if (frame_parms->nb_antennas_tx_eNB>1 && beamforming_mode==0) { #ifdef DEBUG_DLSCH_MOD - LOG_I(PHY,"dlsch: using pmi %x (%p), rb_alloc %x\n",pmi2hex_2Ar1(dlsch0_harq->pmi_alloc),dlsch_ue[0],dlsch0_harq->rb_alloc[0]); + LOG_I(PHY,"dlsch: using pmi %x (%p), rb_alloc %x\n",pmi2hex_2Ar1(dlsch0_harq->pmi_alloc),dlsch_ue[0],dlsch0_harq->rb_alloc_even[0]); #endif nb_rb = dlsch_extract_rbs_dual(lte_ue_common_vars->rxdataF, lte_ue_common_vars->dl_ch_estimates[eNB_id], @@ -173,7 +173,7 @@ int rx_pdsch(PHY_VARS_UE *phy_vars_ue, lte_ue_pdsch_vars[eNB_id]->dl_ch_estimates_ext, dlsch0_harq->pmi_alloc, lte_ue_pdsch_vars[eNB_id]->pmi_ext, - dlsch0_harq->rb_alloc, + rballoc, symbol, subframe, phy_vars_ue->high_speed_flag, @@ -187,7 +187,7 @@ int rx_pdsch(PHY_VARS_UE *phy_vars_ue, lte_ue_pdsch_vars[eNB_id_i]->dl_ch_estimates_ext, dlsch0_harq->pmi_alloc, lte_ue_pdsch_vars[eNB_id_i]->pmi_ext, - dlsch0_harq->rb_alloc, + rballoc, symbol, subframe, phy_vars_ue->high_speed_flag, @@ -199,7 +199,7 @@ int rx_pdsch(PHY_VARS_UE *phy_vars_ue, lte_ue_pdsch_vars[eNB_id_i]->dl_ch_estimates_ext, dlsch0_harq->pmi_alloc, lte_ue_pdsch_vars[eNB_id_i]->pmi_ext, - dlsch0_harq->rb_alloc, + rballoc, symbol, subframe, phy_vars_ue->high_speed_flag, @@ -212,7 +212,7 @@ int rx_pdsch(PHY_VARS_UE *phy_vars_ue, lte_ue_pdsch_vars[eNB_id]->dl_ch_estimates_ext, dlsch0_harq->pmi_alloc, lte_ue_pdsch_vars[eNB_id]->pmi_ext, - dlsch0_harq->rb_alloc, + rballoc, symbol, subframe, phy_vars_ue->high_speed_flag, @@ -226,22 +226,22 @@ int rx_pdsch(PHY_VARS_UE *phy_vars_ue, lte_ue_pdsch_vars[eNB_id_i]->dl_ch_estimates_ext, dlsch0_harq->pmi_alloc, lte_ue_pdsch_vars[eNB_id_i]->pmi_ext, - dlsch0_harq->rb_alloc, + rballoc, symbol, subframe, phy_vars_ue->high_speed_flag, frame_parms); - else + nb_rb = dlsch_extract_rbs_single(lte_ue_common_vars->rxdataF, lte_ue_common_vars->dl_ch_estimates[eNB_id], lte_ue_pdsch_vars[eNB_id_i]->rxdataF_ext, lte_ue_pdsch_vars[eNB_id_i]->dl_ch_estimates_ext, dlsch0_harq->pmi_alloc, lte_ue_pdsch_vars[eNB_id_i]->pmi_ext, - dlsch0_harq->rb_alloc, + rballoc, symbol, subframe, - phy_vars_ue->high_speed_flag, + phy_vars_ue->high_speed_flag, frame_parms); } } else if (beamforming_mode==7) { //else n_tx>1 @@ -249,7 +249,7 @@ int rx_pdsch(PHY_VARS_UE *phy_vars_ue, lte_ue_pdsch_vars[eNB_id]->dl_bf_ch_estimates, lte_ue_pdsch_vars[eNB_id]->rxdataF_ext, lte_ue_pdsch_vars[eNB_id]->dl_bf_ch_estimates_ext, - dlsch0_harq->rb_alloc, + rballoc, symbol, subframe, phy_vars_ue->high_speed_flag, @@ -261,7 +261,7 @@ int rx_pdsch(PHY_VARS_UE *phy_vars_ue, // printf("nb_rb = %d, eNB_id %d\n",nb_rb,eNB_id); if (nb_rb==0) { - LOG_W(PHY,"dlsch_demodulation.c: nb_rb=0\n"); + LOG_D(PHY,"dlsch_demodulation.c: nb_rb=0\n"); return(-1); } @@ -346,7 +346,7 @@ int rx_pdsch(PHY_VARS_UE *phy_vars_ue, frame_parms, symbol, first_symbol_flag, - get_Qm(dlsch0_harq->mcs), + dlsch0_harq->Qm, nb_rb, lte_ue_pdsch_vars[eNB_id]->log2_maxh, phy_measurements); // log2_maxh+I0_shift @@ -401,7 +401,7 @@ int rx_pdsch(PHY_VARS_UE *phy_vars_ue, avg, symbol, nb_rb); // LOG_D(PHY,"llr_offset = %d\n",offset_mumimo_llr_drange[dlsch0_harq->mcs][(dlsch1_harq->mcs>>1)-1]); - avg[0] = log2_approx(avg[0]) - 13 + offset_mumimo_llr_drange[dlsch0_harq->mcs][(get_Qm(dlsch1_harq->mcs)>>1)-1]; + avg[0] = log2_approx(avg[0]) - 13 + offset_mumimo_llr_drange[dlsch0_harq->mcs][(dlsch1_harq->Qm>>1)-1]; lte_ue_pdsch_vars[eNB_id]->log2_maxh = cmax(avg[0],0); // printf("log2_maxh =%d\n",lte_ue_pdsch_vars[eNB_id]->log2_maxh); @@ -412,8 +412,8 @@ int rx_pdsch(PHY_VARS_UE *phy_vars_ue, phy_measurements, eNB_id, symbol, - get_Qm(dlsch0_harq->mcs), - get_Qm(dlsch1_harq->mcs), + dlsch0_harq->Qm, + dlsch1_harq->Qm, dlsch0_harq->round, nb_rb, lte_ue_pdsch_vars[eNB_id]->log2_maxh); @@ -472,7 +472,7 @@ int rx_pdsch(PHY_VARS_UE *phy_vars_ue, phy_measurements, eNB_id, symbol, - get_Qm(dlsch0_harq->mcs), + dlsch0_harq->Qm, nb_rb, lte_ue_pdsch_vars[eNB_id]->log2_maxh, dlsch0_harq->dl_power_off); @@ -547,7 +547,7 @@ int rx_pdsch(PHY_VARS_UE *phy_vars_ue, phy_measurements, eNB_id, symbol, - get_Qm(dlsch0_harq->mcs), + dlsch0_harq->Qm, nb_rb, lte_ue_pdsch_vars[eNB_id]->log2_maxh, 1); @@ -636,7 +636,7 @@ int rx_pdsch(PHY_VARS_UE *phy_vars_ue, // printf("LLR"); - switch (get_Qm(dlsch0_harq->mcs)) { + switch (dlsch0_harq->Qm) { case 2 : if (dlsch0_harq->mimo_mode != LARGE_CDD) { if (dual_stream_flag == 0) @@ -644,7 +644,7 @@ int rx_pdsch(PHY_VARS_UE *phy_vars_ue, lte_ue_pdsch_vars[eNB_id]->rxdataF_comp0, lte_ue_pdsch_vars[eNB_id]->llr[0], symbol,first_symbol_flag,nb_rb, - adjust_G2(frame_parms,dlsch0_harq->rb_alloc,2,subframe,symbol), + adjust_G2(frame_parms,dlsch0_harq->rb_alloc_even,2,subframe,symbol), lte_ue_pdsch_vars[eNB_id]->llr128, beamforming_mode); else if (i_mod == 2) { @@ -654,7 +654,7 @@ int rx_pdsch(PHY_VARS_UE *phy_vars_ue, lte_ue_pdsch_vars[eNB_id]->dl_ch_rho_ext, lte_ue_pdsch_vars[eNB_id]->llr[0], symbol,first_symbol_flag,nb_rb, - adjust_G2(frame_parms,dlsch0_harq->rb_alloc,2,subframe,symbol), + adjust_G2(frame_parms,dlsch0_harq->rb_alloc_even,2,subframe,symbol), lte_ue_pdsch_vars[eNB_id]->llr128); } else if (i_mod == 4) { dlsch_qpsk_16qam_llr(frame_parms, @@ -664,7 +664,7 @@ int rx_pdsch(PHY_VARS_UE *phy_vars_ue, lte_ue_pdsch_vars[eNB_id]->dl_ch_rho_ext, lte_ue_pdsch_vars[eNB_id]->llr[0], symbol,first_symbol_flag,nb_rb, - adjust_G2(frame_parms,dlsch0_harq->rb_alloc,2,subframe,symbol), + adjust_G2(frame_parms,dlsch0_harq->rb_alloc_even,2,subframe,symbol), lte_ue_pdsch_vars[eNB_id]->llr128); } else { dlsch_qpsk_64qam_llr(frame_parms, @@ -674,20 +674,20 @@ int rx_pdsch(PHY_VARS_UE *phy_vars_ue, lte_ue_pdsch_vars[eNB_id]->dl_ch_rho_ext, lte_ue_pdsch_vars[eNB_id]->llr[0], symbol,first_symbol_flag,nb_rb, - adjust_G2(frame_parms,dlsch0_harq->rb_alloc,2,subframe,symbol), + adjust_G2(frame_parms,dlsch0_harq->rb_alloc_even,2,subframe,symbol), lte_ue_pdsch_vars[eNB_id]->llr128); } } else { // TM3 DevAssert(dlsch1_harq); - if (get_Qm(dlsch1_harq->mcs) == 2) { + if (dlsch1_harq->Qm == 2) { /* dlsch_qpsk_llr(frame_parms, - lte_ue_pdsch_vars[eNB_id]->rxdataF_comp0, - lte_ue_pdsch_vars[eNB_id]->llr[0], - symbol,first_symbol_flag,nb_rb, - adjust_G2(frame_parms,dlsch0_harq->rb_alloc,2,subframe,symbol), - lte_ue_pdsch_vars[eNB_id]->llr128); + lte_ue_pdsch_vars[eNB_id]->rxdataF_comp0, + lte_ue_pdsch_vars[eNB_id]->llr[0], + symbol,first_symbol_flag,nb_rb, + adjust_G2(frame_parms,dlsch0_harq->rb_alloc,2,subframe,symbol), + lte_ue_pdsch_vars[eNB_id]->llr128); */ dlsch_qpsk_qpsk_llr(frame_parms, lte_ue_pdsch_vars[eNB_id]->rxdataF_comp0, @@ -695,7 +695,7 @@ int rx_pdsch(PHY_VARS_UE *phy_vars_ue, lte_ue_pdsch_vars[eNB_id]->dl_ch_rho_ext, lte_ue_pdsch_vars[eNB_id]->llr[0], symbol,first_symbol_flag,nb_rb, - adjust_G2(frame_parms,dlsch0_harq->rb_alloc,2,subframe,symbol), + adjust_G2(frame_parms,dlsch0_harq->rb_alloc_even,2,subframe,symbol), lte_ue_pdsch_vars[eNB_id]->llr128); dlsch_qpsk_qpsk_llr(frame_parms, lte_ue_pdsch_vars[eNB_id]->rxdataF_comp1[dlsch0_harq->round], @@ -703,9 +703,9 @@ int rx_pdsch(PHY_VARS_UE *phy_vars_ue, lte_ue_pdsch_vars[eNB_id]->dl_ch_rho2_ext, lte_ue_pdsch_vars[eNB_id]->llr[1], symbol,first_symbol_flag,nb_rb, - adjust_G2(frame_parms,dlsch1_harq->rb_alloc,2,subframe,symbol), + adjust_G2(frame_parms,dlsch1_harq->rb_alloc_even,2,subframe,symbol), lte_ue_pdsch_vars[eNB_id]->llr128_2ndstream); - } else if (get_Qm(dlsch1_harq->mcs) == 4) { + } else if (dlsch1_harq->Qm == 4) { dlsch_qpsk_16qam_llr(frame_parms, lte_ue_pdsch_vars[eNB_id]->rxdataF_comp0, lte_ue_pdsch_vars[eNB_id]->rxdataF_comp1[dlsch0_harq->round], @@ -713,7 +713,7 @@ int rx_pdsch(PHY_VARS_UE *phy_vars_ue, lte_ue_pdsch_vars[eNB_id]->dl_ch_rho_ext, lte_ue_pdsch_vars[eNB_id]->llr[0], symbol,first_symbol_flag,nb_rb, - adjust_G2(frame_parms,dlsch0_harq->rb_alloc,2,subframe,symbol), + adjust_G2(frame_parms,dlsch0_harq->rb_alloc_even,2,subframe,symbol), lte_ue_pdsch_vars[eNB_id]->llr128); } else { dlsch_qpsk_64qam_llr(frame_parms, @@ -723,7 +723,7 @@ int rx_pdsch(PHY_VARS_UE *phy_vars_ue, lte_ue_pdsch_vars[eNB_id]->dl_ch_rho_ext, lte_ue_pdsch_vars[eNB_id]->llr[0], symbol,first_symbol_flag,nb_rb, - adjust_G2(frame_parms,dlsch0_harq->rb_alloc,2,subframe,symbol), + adjust_G2(frame_parms,dlsch0_harq->rb_alloc_even,2,subframe,symbol), lte_ue_pdsch_vars[eNB_id]->llr128); } @@ -738,7 +738,7 @@ int rx_pdsch(PHY_VARS_UE *phy_vars_ue, lte_ue_pdsch_vars[eNB_id]->llr[0], lte_ue_pdsch_vars[eNB_id]->dl_ch_mag0, symbol,first_symbol_flag,nb_rb, - adjust_G2(frame_parms,dlsch0_harq->rb_alloc,4,subframe,symbol), + adjust_G2(frame_parms,dlsch0_harq->rb_alloc_even,4,subframe,symbol), lte_ue_pdsch_vars[eNB_id]->llr128, beamforming_mode); } else if (i_mod == 2) { @@ -749,7 +749,7 @@ int rx_pdsch(PHY_VARS_UE *phy_vars_ue, lte_ue_pdsch_vars[eNB_id]->dl_ch_rho_ext, lte_ue_pdsch_vars[eNB_id]->llr[0], symbol,first_symbol_flag,nb_rb, - adjust_G2(frame_parms,dlsch0_harq->rb_alloc,2,subframe,symbol), + adjust_G2(frame_parms,dlsch0_harq->rb_alloc_even,2,subframe,symbol), lte_ue_pdsch_vars[eNB_id]->llr128); } else if (i_mod == 4) { dlsch_16qam_16qam_llr(frame_parms, @@ -760,7 +760,7 @@ int rx_pdsch(PHY_VARS_UE *phy_vars_ue, lte_ue_pdsch_vars[eNB_id]->dl_ch_rho_ext, lte_ue_pdsch_vars[eNB_id]->llr[0], symbol,first_symbol_flag,nb_rb, - adjust_G2(frame_parms,dlsch0_harq->rb_alloc,2,subframe,symbol), + adjust_G2(frame_parms,dlsch0_harq->rb_alloc_even,2,subframe,symbol), lte_ue_pdsch_vars[eNB_id]->llr128); } else { dlsch_16qam_64qam_llr(frame_parms, @@ -771,7 +771,7 @@ int rx_pdsch(PHY_VARS_UE *phy_vars_ue, lte_ue_pdsch_vars[eNB_id]->dl_ch_rho_ext, lte_ue_pdsch_vars[eNB_id]->llr[0], symbol,first_symbol_flag,nb_rb, - adjust_G2(frame_parms,dlsch0_harq->rb_alloc,2,subframe,symbol), + adjust_G2(frame_parms,dlsch0_harq->rb_alloc_even,2,subframe,symbol), lte_ue_pdsch_vars[eNB_id]->llr128); } @@ -785,7 +785,7 @@ int rx_pdsch(PHY_VARS_UE *phy_vars_ue, lte_ue_pdsch_vars[eNB_id]->dl_ch_mag0, lte_ue_pdsch_vars[eNB_id]->dl_ch_magb0, symbol,first_symbol_flag,nb_rb, - adjust_G2(frame_parms,dlsch0_harq->rb_alloc,6,subframe,symbol), + adjust_G2(frame_parms,dlsch0_harq->rb_alloc_even,6,subframe,symbol), lte_ue_pdsch_vars[eNB_id]->llr128, beamforming_mode); } else if (i_mod == 2) { @@ -796,7 +796,7 @@ int rx_pdsch(PHY_VARS_UE *phy_vars_ue, lte_ue_pdsch_vars[eNB_id]->dl_ch_rho_ext, lte_ue_pdsch_vars[eNB_id]->llr[0], symbol,first_symbol_flag,nb_rb, - adjust_G2(frame_parms,dlsch0_harq->rb_alloc,2,subframe,symbol), + adjust_G2(frame_parms,dlsch0_harq->rb_alloc_even,2,subframe,symbol), lte_ue_pdsch_vars[eNB_id]->llr128); } else if (i_mod == 4) { dlsch_64qam_16qam_llr(frame_parms, @@ -807,7 +807,7 @@ int rx_pdsch(PHY_VARS_UE *phy_vars_ue, lte_ue_pdsch_vars[eNB_id]->dl_ch_rho_ext, lte_ue_pdsch_vars[eNB_id]->llr[0], symbol,first_symbol_flag,nb_rb, - adjust_G2(frame_parms,dlsch0_harq->rb_alloc,2,subframe,symbol), + adjust_G2(frame_parms,dlsch0_harq->rb_alloc_even,2,subframe,symbol), lte_ue_pdsch_vars[eNB_id]->llr128); } else { @@ -819,7 +819,7 @@ int rx_pdsch(PHY_VARS_UE *phy_vars_ue, lte_ue_pdsch_vars[eNB_id]->dl_ch_rho_ext, lte_ue_pdsch_vars[eNB_id]->llr[0], symbol,first_symbol_flag,nb_rb, - adjust_G2(frame_parms,dlsch0_harq->rb_alloc,2,subframe,symbol), + adjust_G2(frame_parms,dlsch0_harq->rb_alloc_even,2,subframe,symbol), lte_ue_pdsch_vars[eNB_id]->llr128); } @@ -908,7 +908,9 @@ void dlsch_channel_compensation(int **rxdataF_ext, dl_ch_mag128b[0] = dl_ch_mag128[0]; dl_ch_mag128[0] = _mm_mulhi_epi16(dl_ch_mag128[0],QAM_amp128); dl_ch_mag128[0] = _mm_slli_epi16(dl_ch_mag128[0],1); - + //print_ints("Re(ch):",(int16_t*)&mmtmpD0); + //print_shorts("QAM_amp:",(int16_t*)&QAM_amp128); + //print_shorts("mag:",(int16_t*)&dl_ch_mag128[0]); dl_ch_mag128[1] = _mm_unpackhi_epi16(mmtmpD0,mmtmpD0); dl_ch_mag128b[1] = dl_ch_mag128[1]; dl_ch_mag128[1] = _mm_mulhi_epi16(dl_ch_mag128[1],QAM_amp128); @@ -1108,12 +1110,14 @@ void dlsch_channel_compensation(int **rxdataF_ext, unsigned short rb; unsigned char aatx,aarx,symbol_mod,pilots=0; - int16x4_t *dl_ch128,*dl_ch128_2,*rxdataF128,*rho128; - int32x4_t mmtmpD0,mmtmpD1; - int16x8_t *dl_ch_mag128,*dl_ch_mag128b,mmtmpD2,mmtmpD3,*rxdataF_comp128; - int16x4_t QAM_amp128,QAM_amp128b; + int16x4_t *dl_ch128,*dl_ch128_2,*rxdataF128; + int32x4_t mmtmpD0,mmtmpD1,mmtmpD0b,mmtmpD1b; + int16x8_t *dl_ch_mag128,*dl_ch_mag128b,mmtmpD2,mmtmpD3,mmtmpD4; + int16x8_t QAM_amp128,QAM_amp128b; + int16x4x2_t *rxdataF_comp128,*rho128; int16_t conj[4]__attribute__((aligned(16))) = {1,-1,1,-1}; + int32x4_t output_shift128 = vmovq_n_s32(-(int32_t)output_shift); symbol_mod = (symbol>=(7-frame_parms->Ncp)) ? symbol-(7-frame_parms->Ncp) : symbol; @@ -1121,7 +1125,6 @@ void dlsch_channel_compensation(int **rxdataF_ext, if (frame_parms->mode1_flag==1) { // 10 out of 12 so don't reduce size nb_rb=1+(5*nb_rb/6); } - else { pilots=1; } @@ -1129,177 +1132,177 @@ void dlsch_channel_compensation(int **rxdataF_ext, for (aatx=0; aatxnb_antennas_tx_eNB; aatx++) { if (mod_order == 4) { - QAM_amp128 = vmov_n_s16(QAM16_n1); // 2/sqrt(10) - QAM_amp128b = vmov_n_s16(0); - + QAM_amp128 = vmovq_n_s16(QAM16_n1); // 2/sqrt(10) + QAM_amp128b = vmovq_n_s16(0); } else if (mod_order == 6) { - QAM_amp128 = vmov_n_s16(QAM64_n1); // - QAM_amp128b = vmov_n_s16(QAM64_n2); + QAM_amp128 = vmovq_n_s16(QAM64_n1); // + QAM_amp128b = vmovq_n_s16(QAM64_n2); } - // printf("comp: rxdataF_comp %p, symbol %d\n",rxdataF_comp[0],symbol); for (aarx=0; aarxnb_antennas_rx; aarx++) { - - - dl_ch128 = (int16x4_t*)&dl_ch_estimates_ext[(aatx<<1)+aarx][symbol*frame_parms->N_RB_DL*12]; dl_ch_mag128 = (int16x8_t*)&dl_ch_mag[(aatx<<1)+aarx][symbol*frame_parms->N_RB_DL*12]; dl_ch_mag128b = (int16x8_t*)&dl_ch_magb[(aatx<<1)+aarx][symbol*frame_parms->N_RB_DL*12]; rxdataF128 = (int16x4_t*)&rxdataF_ext[aarx][symbol*frame_parms->N_RB_DL*12]; - rxdataF_comp128 = (int16x8_t*)&rxdataF_comp[(aatx<<1)+aarx][symbol*frame_parms->N_RB_DL*12]; - + rxdataF_comp128 = (int16x4x2_t*)&rxdataF_comp[(aatx<<1)+aarx][symbol*frame_parms->N_RB_DL*12]; + for (rb=0; rb2) { - // get channel amplitude if not QPSK - mmtmpD0 = vmull_s16(dl_ch128[0], dl_ch128[0]); - // mmtmpD0 = [ch0*ch0,ch1*ch1,ch2*ch2,ch3*ch3]; - mmtmpD0 = vqshlq_s32(vqaddq_s32(mmtmpD0,vrev64q_s32(mmtmpD0)),-output_shift); - // mmtmpD0 = [ch0*ch0 + ch1*ch1,ch0*ch0 + ch1*ch1,ch2*ch2 + ch3*ch3,ch2*ch2 + ch3*ch3]>>output_shift on 32-bits - mmtmpD1 = vmull_s16(dl_ch128[1], dl_ch128[1]); - mmtmpD1 = vqshlq_s32(vqaddq_s32(mmtmpD1,vrev64q_s32(mmtmpD1)),-output_shift); - mmtmpD2 = vcombine_s16(vqmovn_s32(mmtmpD0),vwmovn_s32(mmtmpD1)); - // mmtmpD2 = [ch0*ch0 + ch1*ch1,ch0*ch0 + ch1*ch1,ch2*ch2 + ch3*ch3,ch2*ch2 + ch3*ch3,ch4*ch4 + ch5*ch5,ch4*ch4 + ch5*ch5,ch6*ch6 + ch7*ch7,ch6*ch6 + ch7*ch7]>>output_shift on 16-bits - mmtmpD0 = vmull_s16(dl_ch128[2], dl_ch128[2]); - mmtmpD0 = vqshlq_s32(vqaddq_s32(mmtmpD0,vrev64q_s32(mmtmpD0)),-output_shift); - mmtmpD1 = vmull_s16(dl_ch128[3], dl_ch128[3]); - mmtmpD1 = vqshlq_s32(vqaddq_s32(mmtmpD1,vrev64q_s32(mmtmpD1)),-output_shift); - mmtmpD3 = vcombine_s16(vqmovn_s32(mmtmpD0),vwmovn_s32(mmtmpD1)); + if (mod_order>2) { + // get channel amplitude if not QPSK + mmtmpD0 = vmull_s16(dl_ch128[0], dl_ch128[0]); + // mmtmpD0 = [ch0*ch0,ch1*ch1,ch2*ch2,ch3*ch3]; + mmtmpD0 = vqshlq_s32(vqaddq_s32(mmtmpD0,vrev64q_s32(mmtmpD0)),output_shift128); + // mmtmpD0 = [ch0*ch0 + ch1*ch1,ch0*ch0 + ch1*ch1,ch2*ch2 + ch3*ch3,ch2*ch2 + ch3*ch3]>>output_shift128 on 32-bits + mmtmpD1 = vmull_s16(dl_ch128[1], dl_ch128[1]); + mmtmpD1 = vqshlq_s32(vqaddq_s32(mmtmpD1,vrev64q_s32(mmtmpD1)),output_shift128); + mmtmpD2 = vcombine_s16(vmovn_s32(mmtmpD0),vmovn_s32(mmtmpD1)); + // mmtmpD2 = [ch0*ch0 + ch1*ch1,ch0*ch0 + ch1*ch1,ch2*ch2 + ch3*ch3,ch2*ch2 + ch3*ch3,ch4*ch4 + ch5*ch5,ch4*ch4 + ch5*ch5,ch6*ch6 + ch7*ch7,ch6*ch6 + ch7*ch7]>>output_shift128 on 16-bits + mmtmpD0 = vmull_s16(dl_ch128[2], dl_ch128[2]); + mmtmpD0 = vqshlq_s32(vqaddq_s32(mmtmpD0,vrev64q_s32(mmtmpD0)),output_shift128); + mmtmpD1 = vmull_s16(dl_ch128[3], dl_ch128[3]); + mmtmpD1 = vqshlq_s32(vqaddq_s32(mmtmpD1,vrev64q_s32(mmtmpD1)),output_shift128); + mmtmpD3 = vcombine_s16(vmovn_s32(mmtmpD0),vmovn_s32(mmtmpD1)); + if (pilots==0) { + mmtmpD0 = vmull_s16(dl_ch128[4], dl_ch128[4]); + mmtmpD0 = vqshlq_s32(vqaddq_s32(mmtmpD0,vrev64q_s32(mmtmpD0)),output_shift128); + mmtmpD1 = vmull_s16(dl_ch128[5], dl_ch128[5]); + mmtmpD1 = vqshlq_s32(vqaddq_s32(mmtmpD1,vrev64q_s32(mmtmpD1)),output_shift128); + mmtmpD4 = vcombine_s16(vmovn_s32(mmtmpD0),vmovn_s32(mmtmpD1)); + } - if (pilots==0) { - mmtmpD0 = vmull_s16(dl_ch128[4], dl_ch128[4]); - mmtmpD0 = vqshlq_s32(vqaddq_s32(mmtmpD0,vrev64q_s32(mmtmpD0)),-output_shift); - mmtmpD1 = vmull_s16(dl_ch128[5], dl_ch128[5]); - mmtmpD1 = vqshlq_s32(vqaddq_s32(mmtmpD1,vrev64q_s32(mmtmpD1)),-output_shift); - mmtmpD4 = vcombine_s16(vqmovn_s32(mmtmpD0),vwmovn_s32(mmtmpD1)); + dl_ch_mag128b[0] = vqdmulhq_s16(mmtmpD2,QAM_amp128b); + dl_ch_mag128b[1] = vqdmulhq_s16(mmtmpD3,QAM_amp128b); + dl_ch_mag128[0] = vqdmulhq_s16(mmtmpD2,QAM_amp128); + dl_ch_mag128[1] = vqdmulhq_s16(mmtmpD3,QAM_amp128); + if (pilots==0) { + dl_ch_mag128b[2] = vqdmulhq_s16(mmtmpD4,QAM_amp128b); + dl_ch_mag128[2] = vqdmulhq_s16(mmtmpD4,QAM_amp128); + } + } + + mmtmpD0 = vmull_s16(dl_ch128[0], rxdataF128[0]); + //mmtmpD0 = [Re(ch[0])Re(rx[0]) Im(ch[0])Im(ch[0]) Re(ch[1])Re(rx[1]) Im(ch[1])Im(ch[1])] + mmtmpD1 = vmull_s16(dl_ch128[1], rxdataF128[1]); + //mmtmpD1 = [Re(ch[2])Re(rx[2]) Im(ch[2])Im(ch[2]) Re(ch[3])Re(rx[3]) Im(ch[3])Im(ch[3])] + mmtmpD0 = vcombine_s32(vpadd_s32(vget_low_s32(mmtmpD0),vget_high_s32(mmtmpD0)), + vpadd_s32(vget_low_s32(mmtmpD1),vget_high_s32(mmtmpD1))); + //mmtmpD0 = [Re(ch[0])Re(rx[0])+Im(ch[0])Im(ch[0]) Re(ch[1])Re(rx[1])+Im(ch[1])Im(ch[1]) Re(ch[2])Re(rx[2])+Im(ch[2])Im(ch[2]) Re(ch[3])Re(rx[3])+Im(ch[3])Im(ch[3])] - } + mmtmpD0b = vmull_s16(vrev32_s16(vmul_s16(dl_ch128[0],*(int16x4_t*)conj)), rxdataF128[0]); + //mmtmpD0 = [-Im(ch[0])Re(rx[0]) Re(ch[0])Im(rx[0]) -Im(ch[1])Re(rx[1]) Re(ch[1])Im(rx[1])] + mmtmpD1b = vmull_s16(vrev32_s16(vmul_s16(dl_ch128[1],*(int16x4_t*)conj)), rxdataF128[1]); + //mmtmpD0 = [-Im(ch[2])Re(rx[2]) Re(ch[2])Im(rx[2]) -Im(ch[3])Re(rx[3]) Re(ch[3])Im(rx[3])] + mmtmpD1 = vcombine_s32(vpadd_s32(vget_low_s32(mmtmpD0b),vget_high_s32(mmtmpD0b)), + vpadd_s32(vget_low_s32(mmtmpD1b),vget_high_s32(mmtmpD1b))); + //mmtmpD1 = [-Im(ch[0])Re(rx[0])+Re(ch[0])Im(rx[0]) -Im(ch[1])Re(rx[1])+Re(ch[1])Im(rx[1]) -Im(ch[2])Re(rx[2])+Re(ch[2])Im(rx[2]) -Im(ch[3])Re(rx[3])+Re(ch[3])Im(rx[3])] - dl_ch_mag128b[0] = vqdmulhq_s16(mmtmpD2,QAM_amp128b); - dl_ch_mag128b[1] = vqdmulhq_s16(mmtmpD3,QAM_amp128b); - dl_ch_mag128[0] = vqdmulhq_s16(mmtmpD2,QAM_amp128); - dl_ch_mag128[1] = vqdmulhq_s16(mmtmpD3,QAM_amp128); + mmtmpD0 = vqshlq_s32(mmtmpD0,output_shift128); + mmtmpD1 = vqshlq_s32(mmtmpD1,output_shift128); + rxdataF_comp128[0] = vzip_s16(vmovn_s32(mmtmpD0),vmovn_s32(mmtmpD1)); + mmtmpD0 = vmull_s16(dl_ch128[2], rxdataF128[2]); + mmtmpD1 = vmull_s16(dl_ch128[3], rxdataF128[3]); + mmtmpD0 = vcombine_s32(vpadd_s32(vget_low_s32(mmtmpD0),vget_high_s32(mmtmpD0)), + vpadd_s32(vget_low_s32(mmtmpD1),vget_high_s32(mmtmpD1))); + mmtmpD0b = vmull_s16(vrev32_s16(vmul_s16(dl_ch128[2],*(int16x4_t*)conj)), rxdataF128[2]); + mmtmpD1b = vmull_s16(vrev32_s16(vmul_s16(dl_ch128[3],*(int16x4_t*)conj)), rxdataF128[3]); + mmtmpD1 = vcombine_s32(vpadd_s32(vget_low_s32(mmtmpD0b),vget_high_s32(mmtmpD0b)), + vpadd_s32(vget_low_s32(mmtmpD1b),vget_high_s32(mmtmpD1b))); + mmtmpD0 = vqshlq_s32(mmtmpD0,output_shift128); + mmtmpD1 = vqshlq_s32(mmtmpD1,output_shift128); + rxdataF_comp128[1] = vzip_s16(vmovn_s32(mmtmpD0),vmovn_s32(mmtmpD1)); + if (pilots==0) { + mmtmpD0 = vmull_s16(dl_ch128[4], rxdataF128[4]); + mmtmpD1 = vmull_s16(dl_ch128[5], rxdataF128[5]); + mmtmpD0 = vcombine_s32(vpadd_s32(vget_low_s32(mmtmpD0),vget_high_s32(mmtmpD0)), + vpadd_s32(vget_low_s32(mmtmpD1),vget_high_s32(mmtmpD1))); - if (pilots==0) { - dl_ch_mag128b[2] = vqdmulhq_s16(mmtmpD4,QAM_amp128b); - dl_ch_mag128[2] = vqdmulhq_s16(mmtmpD4,QAM_amp128); - } - } + mmtmpD0b = vmull_s16(vrev32_s16(vmul_s16(dl_ch128[4],*(int16x4_t*)conj)), rxdataF128[4]); + mmtmpD1b = vmull_s16(vrev32_s16(vmul_s16(dl_ch128[5],*(int16x4_t*)conj)), rxdataF128[5]); + mmtmpD1 = vcombine_s32(vpadd_s32(vget_low_s32(mmtmpD0b),vget_high_s32(mmtmpD0b)), + vpadd_s32(vget_low_s32(mmtmpD1b),vget_high_s32(mmtmpD1b))); - mmtmpD0 = vmull_s16(dl_ch128[0], rx_dataF128[0]); - //mmtmpD0 = [Re(ch[0])Re(rx[0]) Im(ch[0])Im(ch[0]) Re(ch[1])Re(rx[1]) Im(ch[1])Im(ch[1])] - mmtmpD1 = vmull_s16(dl_ch128[1], rx_dataF128[1]); - //mmtmpD1 = [Re(ch[2])Re(rx[2]) Im(ch[2])Im(ch[2]) Re(ch[3])Re(rx[3]) Im(ch[3])Im(ch[3])] - mmtmpD0 = vpadd_s32(mmtmpD0,mmtmpD1); - //mmtmpD0 = [Re(ch[0])Re(rx[0])+Im(ch[0])Im(ch[0]) Re(ch[1])Re(rx[1])+Im(ch[1])Im(ch[1]) Re(ch[2])Re(rx[2])+Im(ch[2])Im(ch[2]) Re(ch[3])Re(rx[3])+Im(ch[3])Im(ch[3])] - - mmtmpD0 = vmull_s16(vrev32q_s16(vmulq_s16(dl_ch128[0],*(int16x4_t*)conj)), rx_dataF128[0]); - //mmtmpD0 = [-Im(ch[0])Re(rx[0]) Re(ch[0])Im(rx[0]) -Im(ch[1])Re(rx[1]) Re(ch[1])Im(rx[1])] - mmtmpD1 = vmull_s16(vrev32q_s16(vmulq_s16(dl_ch128[1],*(int16x4_t*)conj)), rx_dataF128[1]); - //mmtmpD0 = [-Im(ch[2])Re(rx[2]) Re(ch[2])Im(rx[2]) -Im(ch[3])Re(rx[3]) Re(ch[3])Im(rx[3])] - mmtmpD1 = vpadd_s32(mmtmpD0,mmtmpD1); - //mmtmpD1 = [-Im(ch[0])Re(rx[0])+Re(ch[0])Im(rx[0]) -Im(ch[1])Re(rx[1])+Re(ch[1])Im(rx[1]) -Im(ch[2])Re(rx[2])+Re(ch[2])Im(rx[2]) -Im(ch[3])Re(rx[3])+Re(ch[3])Im(rx[3])] - - mmtmpD0 = vqshlq_s32(mmtmpD0,-output_shift); - mmtmpD1 = vqshlq_s32(mmtmpD1,-output_shift); - rxdataF_comp128[0] = vcombine_s16(vqmovn_s32(mmtmpD0),vwmovn_s32(mmtmpD1)); - - mmtmpD0 = vmull_s16(dl_ch128[2], rx_dataF128[2]); - mmtmpD1 = vmull_s16(dl_ch128[3], rx_dataF128[3]); - mmtmpD0 = vpadd_s32(mmtmpD0,mmtmpD1); - mmtmpD0 = vmull_s16(vrev32q_s16(vmulq_s16(dl_ch128[2],*(int16x4_t*)conj)), rx_dataF128[2]); - mmtmpD1 = vmull_s16(vrev32q_s16(vmulq_s16(dl_ch128[3],*(int16x4_t*)conj)), rx_dataF128[3]); - mmtmpD1 = vpadd_s32(mmtmpD0,mmtmpD1); - - mmtmpD0 = vqshlq_s32(mmtmpD0,-output_shift); - mmtmpD1 = vqshlq_s32(mmtmpD1,-output_shift); - rxdataF_comp128[1] = vcombine_s16(vqmovn_s32(mmtmpD0),vwmovn_s32(mmtmpD1)); - - if (pilots==0) { - mmtmpD0 = vmull_s16(dl_ch128[4], rx_dataF128[4]); - mmtmpD1 = vmull_s16(dl_ch128[5], rx_dataF128[5]); - mmtmpD0 = vpadd_s32(mmtmpD0,mmtmpD1); - mmtmpD0 = vmull_s16(vrev32q_s16(vmulq_s16(dl_ch128[4],*(int16x4_t*)conj)), rx_dataF128[4]); - mmtmpD1 = vmull_s16(vrev32q_s16(vmulq_s16(dl_ch128[5],*(int16x4_t*)conj)), rx_dataF128[5]); - mmtmpD1 = vpadd_s32(mmtmpD0,mmtmpD1); - - mmtmpD0 = vqshlq_s32(mmtmpD0,-output_shift); - mmtmpD1 = vqshlq_s32(mmtmpD1,-output_shift); - rxdataF_comp128[2] = vcombine_s16(vqmovn_s32(mmtmpD0),vwmovn_s32(mmtmpD1)); - - - dl_ch128+=6; - dl_ch_mag128+=3; - dl_ch_mag128b+=3; - rxdataF128+=6; - rxdataF_comp128+=3; - - } else { // we have a smaller PDSCH in symbols with pilots so skip last group of 4 REs and increment less - dl_ch128+=4; - dl_ch_mag128+=2; - dl_ch_mag128b+=2; - rxdataF128+=4; - rxdataF_comp128+=2; - } + + mmtmpD0 = vqshlq_s32(mmtmpD0,output_shift128); + mmtmpD1 = vqshlq_s32(mmtmpD1,output_shift128); + rxdataF_comp128[2] = vzip_s16(vmovn_s32(mmtmpD0),vmovn_s32(mmtmpD1)); + + + dl_ch128+=6; + dl_ch_mag128+=3; + dl_ch_mag128b+=3; + rxdataF128+=6; + rxdataF_comp128+=3; + + } else { // we have a smaller PDSCH in symbols with pilots so skip last group of 4 REs and increment less + dl_ch128+=4; + dl_ch_mag128+=2; + dl_ch_mag128b+=2; + rxdataF128+=4; + rxdataF_comp128+=2; + } } } } - + if (rho) { for (aarx=0; aarxnb_antennas_rx; aarx++) { - rho128 = (int16x8_t*)&rho[aarx][symbol*frame_parms->N_RB_DL*12]; + rho128 = (int16x4x2_t*)&rho[aarx][symbol*frame_parms->N_RB_DL*12]; dl_ch128 = (int16x4_t*)&dl_ch_estimates_ext[aarx][symbol*frame_parms->N_RB_DL*12]; dl_ch128_2 = (int16x4_t*)&dl_ch_estimates_ext[2+aarx][symbol*frame_parms->N_RB_DL*12]; - for (rb=0; rbrx_correlation[0][aarx] = signal_energy(&rho[aarx][symbol*frame_parms->N_RB_DL*12],rb*12); + phy_measurements->rx_correlation[0][aarx] = signal_energy(&rho[aarx][symbol*frame_parms->N_RB_DL*12],rb*12); } } } - #endif } @@ -1352,37 +1355,39 @@ void prec2A_TM56_128(unsigned char pmi,__m128i *ch0,__m128i *ch1) } #elif defined(__arm__) -void prec2A_TM56_128(unsigned char pmi,int16x8_t* ch0,int16x8_t* ch1) -{ +void prec2A_TM56_128(unsigned char pmi,int16x8_t* ch0,int16x8_t* ch1) { + int16x8_t amp; + int16_t conj[8]__attribute__((aligned(16))) = {1,-1,1,-1,1,-1,1,-1}; + amp = vmovq_n_s16(ONE_OVER_SQRT2_Q15); switch (pmi) { case 0 : // +1 +1 // print_shorts("phase 0 :ch0",ch0); // print_shorts("phase 0 :ch1",ch1); - ch0[0] = vqadd_s16(ch0[0],ch1[0]); + ch0[0] = vqaddq_s16(ch0[0],ch1[0]); break; - + case 1 : // +1 -1 // print_shorts("phase 1 :ch0",ch0); // print_shorts("phase 1 :ch1",ch1); - ch0[0] = vqsub_s16(ch0[0],ch1[0]); + ch0[0] = vqsubq_s16(ch0[0],ch1[0]); // print_shorts("phase 1 :ch0-ch1",ch0); break; - + case 2 : // +1 +j - ch1[0] = vrev32q_s16(vmul_s16(ch1[0],*(int16x4_t*)conj)); - ch0[0] = vqsub_s16(ch0[0],ch1[0]); + ch1[0] = vrev32q_s16(vmulq_s16(ch1[0],*(int16x8_t*)conj)); + ch0[0] = vqsubq_s16(ch0[0],ch1[0]); break; // +1 -j - + case 3 : - ch1[0] = vrev32q_s16(vmul_s16(ch1[0],*(int16x4_t*)conj)); - ch0[0] = vqadd_s16(ch0[0],ch1[0]); + ch1[0] = vrev32q_s16(vmulq_s16(ch1[0],*(int16x8_t*)conj)); + ch0[0] = vqaddq_s16(ch0[0],ch1[0]); break; } - - ch0[0] = vmulhq_s16(ch0[0],amp); + + ch0[0] = vqdmulhq_s16(ch0[0],amp); } #endif @@ -1475,25 +1480,26 @@ void prec2A_TM4_128(int pmi,__m128i *ch0,__m128i *ch1) #elif defined(__arm__) -void prec2A_TM4_128(int pmi,__m128i *ch0,__m128i *ch1) +void prec2A_TM4_128(int pmi,int16x8_t *ch0,int16x8_t *ch1) { - int16x6_t amp; + int16x8_t amp; int16x8_t tmp0,tmp1; + int16_t conj[8]__attribute__((aligned(16))) = {1,-1,1,-1,1,-1,1,-1}; - amp = = vmovq_n_s16(ONE_OVER_SQRT2_Q15); + amp = vmovq_n_s16(ONE_OVER_SQRT2_Q15); if (pmi == 0) { - ch0[0] = vqadd_s16(ch0[0],ch1[0]); - ch1[0] = vqsub_s16(ch0[0],ch1[0]); + ch0[0] = vqaddq_s16(ch0[0],ch1[0]); + ch1[0] = vqsubq_s16(ch0[0],ch1[0]); } else { tmp0 = ch0[0]; - tmp1 = vrev32q_s16(vmul_s16(ch1[0],*(int16x4_t*)conj)); - ch0[0] = vqadd_s16(tmp0,tmp1); - ch1[0] = vqsub_s16(tmp0,tmp1); + tmp1 = vrev32q_s16(vmulq_s16(ch1[0],*(int16x8_t*)conj)); + ch0[0] = vqaddq_s16(tmp0,tmp1); + ch1[0] = vqsubq_s16(tmp0,tmp1); } - ch0[0] = vmulhq_s16(ch0[0],amp); - ch1[0] = vmulhq_s16(ch1[0],amp); + ch0[0] = vqdmulhq_s16(ch0[0],amp); + ch1[0] = vqdmulhq_s16(ch1[0],amp); } #endif @@ -1518,7 +1524,7 @@ void dlsch_channel_compensation_TM56(int **rxdataF_ext, unsigned short rb,Nre; __m128i *dl_ch0_128,*dl_ch1_128,*dl_ch_mag128,*dl_ch_mag128b,*rxdataF128,*rxdataF_comp128; unsigned char aarx=0,symbol_mod,pilots=0; - int precoded_signal_strength=0,rx_power_correction; + int precoded_signal_strength=0; __m128i mmtmpD0,mmtmpD1,mmtmpD2,mmtmpD3,QAM_amp128,QAM_amp128b; symbol_mod = (symbol>=(7-frame_parms->Ncp)) ? symbol-(7-frame_parms->Ncp) : symbol; @@ -1526,7 +1532,6 @@ void dlsch_channel_compensation_TM56(int **rxdataF_ext, if ((symbol_mod == 0) || (symbol_mod == (4-frame_parms->Ncp))) pilots=1; - rx_power_correction = 1; //printf("comp prec: symbol %d, pilots %d\n",symbol, pilots); @@ -1692,7 +1697,7 @@ void dlsch_channel_compensation_TM56(int **rxdataF_ext, Nre = (pilots==0) ? 12 : 8; precoded_signal_strength += ((signal_energy_nodc(&dl_ch_estimates_ext[aarx][symbol*frame_parms->N_RB_DL*Nre], - (nb_rb*Nre))*rx_power_correction) - (phy_measurements->n0_power[aarx])); + (nb_rb*Nre))) - (phy_measurements->n0_power[aarx])); } // rx_antennas phy_measurements->precoded_cqi_dB[eNB_id][0] = dB_fixed2(precoded_signal_strength,phy_measurements->n0_power_tot); @@ -1705,168 +1710,176 @@ void dlsch_channel_compensation_TM56(int **rxdataF_ext, #elif defined(__arm__) - unsigned short rb; - unsigned char aatx,aarx,symbol_mod,pilots=0; - - int16x4_t *dl_ch128,*dl_ch128_2,*rxdataF128,*rho128; - int32x4_t mmtmpD0,mmtmpD1; - int16x8_t *dl_ch_mag128,*dl_ch_mag128b,mmtmpD2,mmtmpD3,*rxdataF_comp128; - int16x4_t QAM_amp128,QAM_amp128b; - + uint32_t rb,Nre; + uint32_t aarx,symbol_mod,pilots=0; + + int16x4_t *dl_ch0_128,*dl_ch1_128,*rxdataF128; + int16x8_t *dl_ch0_128b,*dl_ch1_128b; + int32x4_t mmtmpD0,mmtmpD1,mmtmpD0b,mmtmpD1b; + int16x8_t *dl_ch_mag128,*dl_ch_mag128b,mmtmpD2,mmtmpD3,mmtmpD4,*rxdataF_comp128; + int16x8_t QAM_amp128,QAM_amp128b; + int16_t conj[4]__attribute__((aligned(16))) = {1,-1,1,-1}; - - symbol_mod = (symbol>=(7-frame_parms->Ncp)) ? symbol-(7-frame_parms->Ncp) : symbol; - + int32x4_t output_shift128 = vmovq_n_s32(-(int32_t)output_shift); + int32_t precoded_signal_strength=0; + + symbol_mod = (symbol>=(7-frame_parms->Ncp)) ? symbol-(7-frame_parms->Ncp) : symbol; if ((symbol_mod == 0) || (symbol_mod == (4-frame_parms->Ncp))) { - if (frame_parms->mode1_flag==1) { // 10 out of 12 so don't reduce size - nb_rb=1+(5*nb_rb/6); - } - - else { - pilots=1; - } + if (frame_parms->mode1_flag==1) // 10 out of 12 so don't reduce size + { nb_rb=1+(5*nb_rb/6); } + + else + { pilots=1; } } - - + + if (mod_order == 4) { - QAM_amp128 = vmov_n_s16(QAM16_n1); // 2/sqrt(10) - QAM_amp128b = vmov_n_s16(0); - + QAM_amp128 = vmovq_n_s16(QAM16_n1); // 2/sqrt(10) + QAM_amp128b = vmovq_n_s16(0); + } else if (mod_order == 6) { - QAM_amp128 = vmov_n_s16(QAM64_n1); // - QAM_amp128b = vmov_n_s16(QAM64_n2); + QAM_amp128 = vmovq_n_s16(QAM64_n1); // + QAM_amp128b = vmovq_n_s16(QAM64_n2); } - + // printf("comp: rxdataF_comp %p, symbol %d\n",rxdataF_comp[0],symbol); - + for (aarx=0; aarxnb_antennas_rx; aarx++) { - - - - dl_ch1_128 = (int16x4_t*)&dl_ch_estimates_ext[aarx][symbol*frame_parms->N_RB_DL*12]; - dl_ch2_128 = (int16x4_t*)&dl_ch_estimates_ext[2+aarx][symbol*frame_parms->N_RB_DL*12]; - dl_ch_mag128 = (int16x8_t*)&dl_ch_mag[aarx][symbol*frame_parms->N_RB_DL*12]; - dl_ch_mag128b = (int16x8_t*)&dl_ch_magb[aarx][symbol*frame_parms->N_RB_DL*12]; - rxdataF128 = (int16x4_t*)&rxdataF_ext[aarx][symbol*frame_parms->N_RB_DL*12]; - rxdataF_comp128 = (int16x8_t*)&rxdataF_comp[aarx][symbol*frame_parms->N_RB_DL*12]; - + + + + dl_ch0_128 = (int16x4_t*)&dl_ch_estimates_ext[aarx][symbol*frame_parms->N_RB_DL*12]; + dl_ch1_128 = (int16x4_t*)&dl_ch_estimates_ext[2+aarx][symbol*frame_parms->N_RB_DL*12]; + dl_ch0_128b = (int16x8_t*)&dl_ch_estimates_ext[aarx][symbol*frame_parms->N_RB_DL*12]; + dl_ch1_128b = (int16x8_t*)&dl_ch_estimates_ext[2+aarx][symbol*frame_parms->N_RB_DL*12]; + dl_ch_mag128 = (int16x8_t*)&dl_ch_mag[aarx][symbol*frame_parms->N_RB_DL*12]; + dl_ch_mag128b = (int16x8_t*)&dl_ch_magb[aarx][symbol*frame_parms->N_RB_DL*12]; + rxdataF128 = (int16x4_t*)&rxdataF_ext[aarx][symbol*frame_parms->N_RB_DL*12]; + rxdataF_comp128 = (int16x8_t*)&rxdataF_comp[aarx][symbol*frame_parms->N_RB_DL*12]; + for (rb=0; rb%d\n",rb,pmi_ext[rb]); #endif - prec2A_TM56_128(pmi_ext[rb],&dl_ch0_128[0],&dl_ch1_128[0]); - prec2A_TM56_128(pmi_ext[rb],&dl_ch0_128[1],&dl_ch1_128[1]); - + prec2A_TM56_128(pmi_ext[rb],&dl_ch0_128b[0],&dl_ch1_128b[0]); + prec2A_TM56_128(pmi_ext[rb],&dl_ch0_128b[1],&dl_ch1_128b[1]); + if (pilots==0) { - prec2A_TM56_128(pmi_ext[rb],&dl_ch0_128[2],&dl_ch1_128[2]); + prec2A_TM56_128(pmi_ext[rb],&dl_ch0_128b[2],&dl_ch1_128b[2]); } - + if (mod_order>2) { - // get channel amplitude if not QPSK - mmtmpD0 = vmull_s16(dl_ch128[0], dl_ch128[0]); - // mmtmpD0 = [ch0*ch0,ch1*ch1,ch2*ch2,ch3*ch3]; - mmtmpD0 = vqshlq_s32(vqaddq_s32(mmtmpD0,vrev64q_s32(mmtmpD0)),-output_shift); - // mmtmpD0 = [ch0*ch0 + ch1*ch1,ch0*ch0 + ch1*ch1,ch2*ch2 + ch3*ch3,ch2*ch2 + ch3*ch3]>>output_shift on 32-bits - mmtmpD1 = vmull_s16(dl_ch128[1], dl_ch128[1]); - mmtmpD1 = vqshlq_s32(vqaddq_s32(mmtmpD1,vrev64q_s32(mmtmpD1)),-output_shift); - mmtmpD2 = vcombine_s16(vqmovn_s32(mmtmpD0),vwmovn_s32(mmtmpD1)); - // mmtmpD2 = [ch0*ch0 + ch1*ch1,ch0*ch0 + ch1*ch1,ch2*ch2 + ch3*ch3,ch2*ch2 + ch3*ch3,ch4*ch4 + ch5*ch5,ch4*ch4 + ch5*ch5,ch6*ch6 + ch7*ch7,ch6*ch6 + ch7*ch7]>>output_shift on 16-bits - mmtmpD0 = vmull_s16(dl_ch128[2], dl_ch128[2]); - mmtmpD0 = vqshlq_s32(vqaddq_s32(mmtmpD0,vrev64q_s32(mmtmpD0)),-output_shift); - mmtmpD1 = vmull_s16(dl_ch128[3], dl_ch128[3]); - mmtmpD1 = vqshlq_s32(vqaddq_s32(mmtmpD1,vrev64q_s32(mmtmpD1)),-output_shift); - mmtmpD3 = vcombine_s16(vqmovn_s32(mmtmpD0),vwmovn_s32(mmtmpD1)); - - if (pilots==0) { - mmtmpD0 = vmull_s16(dl_ch128[4], dl_ch128[4]); - mmtmpD0 = vqshlq_s32(vqaddq_s32(mmtmpD0,vrev64q_s32(mmtmpD0)),-output_shift); - mmtmpD1 = vmull_s16(dl_ch128[5], dl_ch128[5]); - mmtmpD1 = vqshlq_s32(vqaddq_s32(mmtmpD1,vrev64q_s32(mmtmpD1)),-output_shift); - mmtmpD4 = vcombine_s16(vqmovn_s32(mmtmpD0),vwmovn_s32(mmtmpD1)); - - - } - - dl_ch_mag128b[0] = vqdmulhq_s16(mmtmpD2,QAM_amp128b); - dl_ch_mag128b[1] = vqdmulhq_s16(mmtmpD3,QAM_amp128b); - dl_ch_mag128[0] = vqdmulhq_s16(mmtmpD2,QAM_amp128); - dl_ch_mag128[1] = vqdmulhq_s16(mmtmpD3,QAM_amp128); - - - if (pilots==0) { - dl_ch_mag128b[2] = vqdmulhq_s16(mmtmpD4,QAM_amp128b); - dl_ch_mag128[2] = vqdmulhq_s16(mmtmpD4,QAM_amp128); - } + // get channel amplitude if not QPSK + mmtmpD0 = vmull_s16(dl_ch0_128[0], dl_ch0_128[0]); + // mmtmpD0 = [ch0*ch0,ch1*ch1,ch2*ch2,ch3*ch3]; + mmtmpD0 = vqshlq_s32(vqaddq_s32(mmtmpD0,vrev64q_s32(mmtmpD0)),output_shift128); + // mmtmpD0 = [ch0*ch0 + ch1*ch1,ch0*ch0 + ch1*ch1,ch2*ch2 + ch3*ch3,ch2*ch2 + ch3*ch3]>>output_shift128 on 32-bits + mmtmpD1 = vmull_s16(dl_ch0_128[1], dl_ch0_128[1]); + mmtmpD1 = vqshlq_s32(vqaddq_s32(mmtmpD1,vrev64q_s32(mmtmpD1)),output_shift128); + mmtmpD2 = vcombine_s16(vmovn_s32(mmtmpD0),vmovn_s32(mmtmpD1)); + // mmtmpD2 = [ch0*ch0 + ch1*ch1,ch0*ch0 + ch1*ch1,ch2*ch2 + ch3*ch3,ch2*ch2 + ch3*ch3,ch4*ch4 + ch5*ch5,ch4*ch4 + ch5*ch5,ch6*ch6 + ch7*ch7,ch6*ch6 + ch7*ch7]>>output_shift128 on 16-bits + mmtmpD0 = vmull_s16(dl_ch0_128[2], dl_ch0_128[2]); + mmtmpD0 = vqshlq_s32(vqaddq_s32(mmtmpD0,vrev64q_s32(mmtmpD0)),output_shift128); + mmtmpD1 = vmull_s16(dl_ch0_128[3], dl_ch0_128[3]); + mmtmpD1 = vqshlq_s32(vqaddq_s32(mmtmpD1,vrev64q_s32(mmtmpD1)),output_shift128); + mmtmpD3 = vcombine_s16(vmovn_s32(mmtmpD0),vmovn_s32(mmtmpD1)); + if (pilots==0) { + mmtmpD0 = vmull_s16(dl_ch0_128[4], dl_ch0_128[4]); + mmtmpD0 = vqshlq_s32(vqaddq_s32(mmtmpD0,vrev64q_s32(mmtmpD0)),output_shift128); + mmtmpD1 = vmull_s16(dl_ch0_128[5], dl_ch0_128[5]); + mmtmpD1 = vqshlq_s32(vqaddq_s32(mmtmpD1,vrev64q_s32(mmtmpD1)),output_shift128); + mmtmpD4 = vcombine_s16(vmovn_s32(mmtmpD0),vmovn_s32(mmtmpD1)); + + + } + + dl_ch_mag128b[0] = vqdmulhq_s16(mmtmpD2,QAM_amp128b); + dl_ch_mag128b[1] = vqdmulhq_s16(mmtmpD3,QAM_amp128b); + dl_ch_mag128[0] = vqdmulhq_s16(mmtmpD2,QAM_amp128); + dl_ch_mag128[1] = vqdmulhq_s16(mmtmpD3,QAM_amp128); + + + if (pilots==0) { + dl_ch_mag128b[2] = vqdmulhq_s16(mmtmpD4,QAM_amp128b); + dl_ch_mag128[2] = vqdmulhq_s16(mmtmpD4,QAM_amp128); + } } - - mmtmpD0 = vmull_s16(dl_ch128[0], rx_dataF128[0]); - //mmtmpD0 = [Re(ch[0])Re(rx[0]) Im(ch[0])Im(ch[0]) Re(ch[1])Re(rx[1]) Im(ch[1])Im(ch[1])] - mmtmpD1 = vmull_s16(dl_ch128[1], rx_dataF128[1]); - //mmtmpD1 = [Re(ch[2])Re(rx[2]) Im(ch[2])Im(ch[2]) Re(ch[3])Re(rx[3]) Im(ch[3])Im(ch[3])] - mmtmpD0 = vpadd_s32(mmtmpD0,mmtmpD1); - //mmtmpD0 = [Re(ch[0])Re(rx[0])+Im(ch[0])Im(ch[0]) Re(ch[1])Re(rx[1])+Im(ch[1])Im(ch[1]) Re(ch[2])Re(rx[2])+Im(ch[2])Im(ch[2]) Re(ch[3])Re(rx[3])+Im(ch[3])Im(ch[3])] - - mmtmpD0 = vmull_s16(vrev32q_s16(vmulq_s16(dl_ch128[0],*(int16x4_t*)conj)), rx_dataF128[0]); + mmtmpD0 = vmull_s16(dl_ch0_128[0], rxdataF128[0]); + //mmtmpD0 = [Re(ch[0])Re(rx[0]) Im(ch[0])Im(ch[0]) Re(ch[1])Re(rx[1]) Im(ch[1])Im(ch[1])] + mmtmpD1 = vmull_s16(dl_ch0_128[1], rxdataF128[1]); + //mmtmpD1 = [Re(ch[2])Re(rx[2]) Im(ch[2])Im(ch[2]) Re(ch[3])Re(rx[3]) Im(ch[3])Im(ch[3])] + mmtmpD0 = vcombine_s32(vpadd_s32(vget_low_s32(mmtmpD0),vget_high_s32(mmtmpD0)), + vpadd_s32(vget_low_s32(mmtmpD1),vget_high_s32(mmtmpD1))); + //mmtmpD0 = [Re(ch[0])Re(rx[0])+Im(ch[0])Im(ch[0]) Re(ch[1])Re(rx[1])+Im(ch[1])Im(ch[1]) Re(ch[2])Re(rx[2])+Im(ch[2])Im(ch[2]) Re(ch[3])Re(rx[3])+Im(ch[3])Im(ch[3])] + + mmtmpD0b = vmull_s16(vrev32_s16(vmul_s16(dl_ch0_128[0],*(int16x4_t*)conj)), rxdataF128[0]); //mmtmpD0 = [-Im(ch[0])Re(rx[0]) Re(ch[0])Im(rx[0]) -Im(ch[1])Re(rx[1]) Re(ch[1])Im(rx[1])] - mmtmpD1 = vmull_s16(vrev32q_s16(vmulq_s16(dl_ch128[1],*(int16x4_t*)conj)), rx_dataF128[1]); + mmtmpD1b = vmull_s16(vrev32_s16(vmul_s16(dl_ch0_128[1],*(int16x4_t*)conj)), rxdataF128[1]); //mmtmpD0 = [-Im(ch[2])Re(rx[2]) Re(ch[2])Im(rx[2]) -Im(ch[3])Re(rx[3]) Re(ch[3])Im(rx[3])] - mmtmpD1 = vpadd_s32(mmtmpD0,mmtmpD1); + mmtmpD1 = vcombine_s32(vpadd_s32(vget_low_s32(mmtmpD0b),vget_high_s32(mmtmpD0b)), + vpadd_s32(vget_low_s32(mmtmpD1b),vget_high_s32(mmtmpD1b))); //mmtmpD1 = [-Im(ch[0])Re(rx[0])+Re(ch[0])Im(rx[0]) -Im(ch[1])Re(rx[1])+Re(ch[1])Im(rx[1]) -Im(ch[2])Re(rx[2])+Re(ch[2])Im(rx[2]) -Im(ch[3])Re(rx[3])+Re(ch[3])Im(rx[3])] - - mmtmpD0 = vqshlq_s32(mmtmpD0,-output_shift); - mmtmpD1 = vqshlq_s32(mmtmpD1,-output_shift); - rxdataF_comp128[0] = vcombine_s16(vqmovn_s32(mmtmpD0),vwmovn_s32(mmtmpD1)); - - mmtmpD0 = vmull_s16(dl_ch128[2], rx_dataF128[2]); - mmtmpD1 = vmull_s16(dl_ch128[3], rx_dataF128[3]); - mmtmpD0 = vpadd_s32(mmtmpD0,mmtmpD1); - mmtmpD0 = vmull_s16(vrev32q_s16(vmulq_s16(dl_ch128[2],*(int16x4_t*)conj)), rx_dataF128[2]); - mmtmpD1 = vmull_s16(vrev32q_s16(vmulq_s16(dl_ch128[3],*(int16x4_t*)conj)), rx_dataF128[3]); - mmtmpD1 = vpadd_s32(mmtmpD0,mmtmpD1); - - mmtmpD0 = vqshlq_s32(mmtmpD0,-output_shift); - mmtmpD1 = vqshlq_s32(mmtmpD1,-output_shift); - rxdataF_comp128[1] = vcombine_s16(vqmovn_s32(mmtmpD0),vwmovn_s32(mmtmpD1)); - + + mmtmpD0 = vqshlq_s32(mmtmpD0,output_shift128); + mmtmpD1 = vqshlq_s32(mmtmpD1,output_shift128); + rxdataF_comp128[0] = vcombine_s16(vmovn_s32(mmtmpD0),vmovn_s32(mmtmpD1)); + + mmtmpD0 = vmull_s16(dl_ch0_128[2], rxdataF128[2]); + mmtmpD1 = vmull_s16(dl_ch0_128[3], rxdataF128[3]); + mmtmpD0 = vcombine_s32(vpadd_s32(vget_low_s32(mmtmpD0),vget_high_s32(mmtmpD0)), + vpadd_s32(vget_low_s32(mmtmpD1),vget_high_s32(mmtmpD1))); + + mmtmpD0b = vmull_s16(vrev32_s16(vmul_s16(dl_ch0_128[2],*(int16x4_t*)conj)), rxdataF128[2]); + mmtmpD1b = vmull_s16(vrev32_s16(vmul_s16(dl_ch0_128[3],*(int16x4_t*)conj)), rxdataF128[3]); + mmtmpD1 = vcombine_s32(vpadd_s32(vget_low_s32(mmtmpD0b),vget_high_s32(mmtmpD0b)), + vpadd_s32(vget_low_s32(mmtmpD1b),vget_high_s32(mmtmpD1b))); + + mmtmpD0 = vqshlq_s32(mmtmpD0,output_shift128); + mmtmpD1 = vqshlq_s32(mmtmpD1,output_shift128); + rxdataF_comp128[1] = vcombine_s16(vmovn_s32(mmtmpD0),vmovn_s32(mmtmpD1)); + if (pilots==0) { - mmtmpD0 = vmull_s16(dl_ch128[4], rx_dataF128[4]); - mmtmpD1 = vmull_s16(dl_ch128[5], rx_dataF128[5]); - mmtmpD0 = vpadd_s32(mmtmpD0,mmtmpD1); - mmtmpD0 = vmull_s16(vrev32q_s16(vmulq_s16(dl_ch128[4],*(int16x4_t*)conj)), rx_dataF128[4]); - mmtmpD1 = vmull_s16(vrev32q_s16(vmulq_s16(dl_ch128[5],*(int16x4_t*)conj)), rx_dataF128[5]); - mmtmpD1 = vpadd_s32(mmtmpD0,mmtmpD1); - - mmtmpD0 = vqshlq_s32(mmtmpD0,-output_shift); - mmtmpD1 = vqshlq_s32(mmtmpD1,-output_shift); - rxdataF_comp128[2] = vcombine_s16(vqmovn_s32(mmtmpD0),vwmovn_s32(mmtmpD1)); - - - dl_ch128+=6; - dl_ch_mag128+=3; - dl_ch_mag128b+=3; - rxdataF128+=6; - rxdataF_comp128+=3; - + mmtmpD0 = vmull_s16(dl_ch0_128[4], rxdataF128[4]); + mmtmpD1 = vmull_s16(dl_ch0_128[5], rxdataF128[5]); + mmtmpD0 = vcombine_s32(vpadd_s32(vget_low_s32(mmtmpD0),vget_high_s32(mmtmpD0)), + vpadd_s32(vget_low_s32(mmtmpD1),vget_high_s32(mmtmpD1))); + + mmtmpD0b = vmull_s16(vrev32_s16(vmul_s16(dl_ch0_128[4],*(int16x4_t*)conj)), rxdataF128[4]); + mmtmpD1b = vmull_s16(vrev32_s16(vmul_s16(dl_ch0_128[5],*(int16x4_t*)conj)), rxdataF128[5]); + mmtmpD1 = vcombine_s32(vpadd_s32(vget_low_s32(mmtmpD0b),vget_high_s32(mmtmpD0b)), + vpadd_s32(vget_low_s32(mmtmpD1b),vget_high_s32(mmtmpD1b))); + + + mmtmpD0 = vqshlq_s32(mmtmpD0,output_shift128); + mmtmpD1 = vqshlq_s32(mmtmpD1,output_shift128); + rxdataF_comp128[2] = vcombine_s16(vmovn_s32(mmtmpD0),vmovn_s32(mmtmpD1)); + + + dl_ch0_128+=6; + dl_ch1_128+=6; + dl_ch_mag128+=3; + dl_ch_mag128b+=3; + rxdataF128+=6; + rxdataF_comp128+=3; + } else { // we have a smaller PDSCH in symbols with pilots so skip last group of 4 REs and increment less - dl_ch128+=4; - dl_ch_mag128+=2; - dl_ch_mag128b+=2; - rxdataF128+=4; - rxdataF_comp128+=2; + dl_ch0_128+=4; + dl_ch1_128+=4; + dl_ch_mag128+=2; + dl_ch_mag128b+=2; + rxdataF128+=4; + rxdataF_comp128+=2; } } - - - + Nre = (pilots==0) ? 12 : 8; - + precoded_signal_strength += ((signal_energy_nodc(&dl_ch_estimates_ext[aarx][symbol*frame_parms->N_RB_DL*Nre], - (nb_rb*Nre))*rx_power_correction) - (phy_measurements->n0_power[aarx])); + (nb_rb*Nre))) - (phy_measurements->n0_power[aarx])); // rx_antennas } - phy_measurements->precoded_cqi_dB[eNB_id][0] = dB_fixed2(precoded_signal_strength,phy_measurements->n0_power_tot); - + #endif } @@ -1887,7 +1900,7 @@ void dlsch_channel_compensation_TM3(LTE_DL_FRAME_PARMS *frame_parms, unsigned short rb,Nre; __m128i *dl_ch0_128,*dl_ch1_128,*dl_ch_mag0_128,*dl_ch_mag1_128,*dl_ch_mag0_128b,*dl_ch_mag1_128b,*rxdataF128,*rxdataF_comp0_128,*rxdataF_comp1_128; unsigned char aarx=0,symbol_mod,pilots=0; - int precoded_signal_strength0=0,precoded_signal_strength1=0,rx_power_correction; + int precoded_signal_strength0=0,precoded_signal_strength1=0; int **rxdataF_ext = lte_ue_pdsch_vars->rxdataF_ext; int **dl_ch_estimates_ext = lte_ue_pdsch_vars->dl_ch_estimates_ext; @@ -1905,7 +1918,6 @@ void dlsch_channel_compensation_TM3(LTE_DL_FRAME_PARMS *frame_parms, if ((symbol_mod == 0) || (symbol_mod == (4-frame_parms->Ncp))) pilots=1; - rx_power_correction = 1; //printf("comp prec: symbol %d, pilots %d\n",symbol, pilots); @@ -2091,7 +2103,7 @@ void dlsch_channel_compensation_TM3(LTE_DL_FRAME_PARMS *frame_parms, rxdataF_comp0_128[1] = _mm_packs_epi32(mmtmpD2,mmtmpD3); // print_shorts("rx:",rxdataF128+1); - // print_shorts("ch:",dl_ch128+1); + // print_shorts("ch:",dl_ch0_128+1); // print_shorts("pack:",rxdataF_comp128+1); if (pilots==0) { @@ -2110,7 +2122,7 @@ void dlsch_channel_compensation_TM3(LTE_DL_FRAME_PARMS *frame_parms, rxdataF_comp0_128[2] = _mm_packs_epi32(mmtmpD2,mmtmpD3); // print_shorts("rx:",rxdataF128+2); - // print_shorts("ch:",dl_ch128+2); + // print_shorts("ch:",dl_ch0_128+2); // print_shorts("pack:",rxdataF_comp128+2); } else { @@ -2202,15 +2214,15 @@ void dlsch_channel_compensation_TM3(LTE_DL_FRAME_PARMS *frame_parms, } } // rb loop + } + + Nre = (pilots==0) ? 12 : 8; - Nre = (pilots==0) ? 12 : 8; + precoded_signal_strength0 += ((signal_energy_nodc(&dl_ch_estimates_ext[aarx][symbol*frame_parms->N_RB_DL*Nre], + (nb_rb*Nre))) - (phy_measurements->n0_power[aarx])); - precoded_signal_strength0 += ((signal_energy_nodc(&dl_ch_estimates_ext[aarx][symbol*frame_parms->N_RB_DL*Nre], - (nb_rb*Nre))*rx_power_correction) - (phy_measurements->n0_power[aarx])); - - precoded_signal_strength1 += ((signal_energy_nodc(&dl_ch_estimates_ext[aarx+2][symbol*frame_parms->N_RB_DL*Nre], - (nb_rb*Nre))*rx_power_correction) - (phy_measurements->n0_power[aarx])); - } // rx_antennas + precoded_signal_strength1 += ((signal_energy_nodc(&dl_ch_estimates_ext[aarx+2][symbol*frame_parms->N_RB_DL*Nre], + (nb_rb*Nre))) - (phy_measurements->n0_power[aarx])); phy_measurements->precoded_cqi_dB[eNB_id][0] = dB_fixed2(precoded_signal_strength0,phy_measurements->n0_power_tot); phy_measurements->precoded_cqi_dB[eNB_id][1] = dB_fixed2(precoded_signal_strength1,phy_measurements->n0_power_tot); @@ -2223,14 +2235,18 @@ void dlsch_channel_compensation_TM3(LTE_DL_FRAME_PARMS *frame_parms, #elif defined(__arm__) - unsigned short rb; - unsigned char aatx,aarx,symbol_mod,pilots=0; - - int16x4_t *dl_ch128,*dl_ch128_2,*rxdataF128; - int32x4_t mmtmpD0,mmtmpD1; - int16x8_t *dl_ch_mag0_128,*dl_ch_mag1_128b,mmtmpD2,mmtmpD3,*rxdataF_comp0_128,*rxdataF_comp1_128; - int16x4_t QAM_amp0_128,QAM_amp1_128b; - + unsigned short rb,Nre; + unsigned char aarx,symbol_mod,pilots=0; + int precoded_signal_strength0=0,precoded_signal_strength1=0; + int16x4_t *dl_ch0_128,*rxdataF128; + int16x4_t *dl_ch1_128; + int16x8_t *dl_ch0_128b,*dl_ch1_128b; + + int32x4_t mmtmpD0,mmtmpD1,mmtmpD0b,mmtmpD1b; + int16x8_t *dl_ch_mag0_128,*dl_ch_mag0_128b,*dl_ch_mag1_128,*dl_ch_mag1_128b,mmtmpD2,mmtmpD3,mmtmpD4,*rxdataF_comp0_128,*rxdataF_comp1_128; + int16x8_t QAM_amp0_128,QAM_amp0_128b,QAM_amp1_128,QAM_amp1_128b; + int32x4_t output_shift128 = vmovq_n_s32(-(int32_t)output_shift); + int **rxdataF_ext = lte_ue_pdsch_vars->rxdataF_ext; int **dl_ch_estimates_ext = lte_ue_pdsch_vars->dl_ch_estimates_ext; int **dl_ch_mag0 = lte_ue_pdsch_vars->dl_ch_mag0; @@ -2239,256 +2255,259 @@ void dlsch_channel_compensation_TM3(LTE_DL_FRAME_PARMS *frame_parms, int **dl_ch_magb1 = lte_ue_pdsch_vars->dl_ch_magb1; int **rxdataF_comp0 = lte_ue_pdsch_vars->rxdataF_comp0; int **rxdataF_comp1 = lte_ue_pdsch_vars->rxdataF_comp1[round]; //? - + int16_t conj[4]__attribute__((aligned(16))) = {1,-1,1,-1}; - + symbol_mod = (symbol>=(7-frame_parms->Ncp)) ? symbol-(7-frame_parms->Ncp) : symbol; - + if ((symbol_mod == 0) || (symbol_mod == (4-frame_parms->Ncp))) { - if (frame_parms->mode1_flag==1) { // 10 out of 12 so don't reduce size - nb_rb=1+(5*nb_rb/6); - } - - else { - pilots=1; - } + if (frame_parms->mode1_flag==1) // 10 out of 12 so don't reduce size + { nb_rb=1+(5*nb_rb/6); } + + else + { pilots=1; } } - - + + if (mod_order0 == 4) { - QAM_amp0_128 = vmov_n_s16(QAM16_n1); // 2/sqrt(10) - QAM_amp0_128b = vmov_n_s16(0); - + QAM_amp0_128 = vmovq_n_s16(QAM16_n1); // 2/sqrt(10) + QAM_amp0_128b = vmovq_n_s16(0); + } else if (mod_order0 == 6) { - QAM_amp0_128 = vmov_n_s16(QAM64_n1); // - QAM_amp0_128b = vmov_n_s16(QAM64_n2); + QAM_amp0_128 = vmovq_n_s16(QAM64_n1); // + QAM_amp0_128b = vmovq_n_s16(QAM64_n2); } - + if (mod_order1 == 4) { - QAM_amp1_128 = vmov_n_s16(QAM16_n1); // 2/sqrt(10) - QAM_amp1_128b = vmov_n_s16(0); - + QAM_amp1_128 = vmovq_n_s16(QAM16_n1); // 2/sqrt(10) + QAM_amp1_128b = vmovq_n_s16(0); + } else if (mod_order1 == 6) { - QAM_amp1_128 = vmov_n_s16(QAM64_n1); // - QAM_amp1_128b = vmov_n_s16(QAM64_n2); + QAM_amp1_128 = vmovq_n_s16(QAM64_n1); // + QAM_amp1_128b = vmovq_n_s16(QAM64_n2); } - + // printf("comp: rxdataF_comp %p, symbol %d\n",rxdataF_comp[0],symbol); - + for (aarx=0; aarxnb_antennas_rx; aarx++) { - - - - dl_ch1_128 = (int16x4_t*)&dl_ch_estimates_ext[aarx][symbol*frame_parms->N_RB_DL*12]; - dl_ch2_128 = (int16x4_t*)&dl_ch_estimates_ext[2+aarx][symbol*frame_parms->N_RB_DL*12]; + + + + dl_ch0_128 = (int16x4_t*)&dl_ch_estimates_ext[aarx][symbol*frame_parms->N_RB_DL*12]; + dl_ch1_128 = (int16x4_t*)&dl_ch_estimates_ext[2+aarx][symbol*frame_parms->N_RB_DL*12]; + dl_ch0_128b = (int16x8_t*)&dl_ch_estimates_ext[aarx][symbol*frame_parms->N_RB_DL*12]; + dl_ch1_128b = (int16x8_t*)&dl_ch_estimates_ext[2+aarx][symbol*frame_parms->N_RB_DL*12]; dl_ch_mag0_128 = (int16x8_t*)&dl_ch_mag0[aarx][symbol*frame_parms->N_RB_DL*12]; - dl_ch_mag0_128b = (int16x8_t*)&dl_ch_mag0b[aarx][symbol*frame_parms->N_RB_DL*12]; + dl_ch_mag0_128b = (int16x8_t*)&dl_ch_magb0[aarx][symbol*frame_parms->N_RB_DL*12]; dl_ch_mag1_128 = (int16x8_t*)&dl_ch_mag1[aarx][symbol*frame_parms->N_RB_DL*12]; - dl_ch_mag1_128b = (int16x8_t*)&dl_ch_mag1b[aarx][symbol*frame_parms->N_RB_DL*12]; + dl_ch_mag1_128b = (int16x8_t*)&dl_ch_magb1[aarx][symbol*frame_parms->N_RB_DL*12]; rxdataF128 = (int16x4_t*)&rxdataF_ext[aarx][symbol*frame_parms->N_RB_DL*12]; rxdataF_comp0_128 = (int16x8_t*)&rxdataF_comp0[aarx][symbol*frame_parms->N_RB_DL*12]; rxdataF_comp1_128 = (int16x8_t*)&rxdataF_comp1[aarx][symbol*frame_parms->N_RB_DL*12]; - + for (rb=0; rb%d\n",rb,pmi_ext[rb]); #endif - prec2A_TM3_128(&dl_ch0_128[0],&dl_ch1_128[0]); - prec2A_TM3_128(&dl_ch0_128[1],&dl_ch1_128[1]); - + prec2A_TM3_128(&dl_ch0_128b[0],&dl_ch1_128b[0]); + prec2A_TM3_128(&dl_ch0_128b[1],&dl_ch1_128b[1]); + if (pilots==0) { - prec2A_TM3_128(&dl_ch0_128[2],&dl_ch1_128[2]); + prec2A_TM3_128(&dl_ch0_128b[2],&dl_ch1_128b[2]); } - + if (mod_order0>2) { - // get channel amplitude if not QPSK - mmtmpD0 = vmull_s16(dl_ch0_128[0], dl_ch0_128[0]); - // mmtmpD0 = [ch0*ch0,ch1*ch1,ch2*ch2,ch3*ch3]; - mmtmpD0 = vqshlq_s32(vqaddq_s32(mmtmpD0,vrev64q_s32(mmtmpD0)),-output_shift); - // mmtmpD0 = [ch0*ch0 + ch1*ch1,ch0*ch0 + ch1*ch1,ch2*ch2 + ch3*ch3,ch2*ch2 + ch3*ch3]>>output_shift on 32-bits - mmtmpD1 = vmull_s16(dl_ch0_128[1], dl_ch0_128[1]); - mmtmpD1 = vqshlq_s32(vqaddq_s32(mmtmpD1,vrev64q_s32(mmtmpD1)),-output_shift); - mmtmpD2 = vcombine_s16(vqmovn_s32(mmtmpD0),vwmovn_s32(mmtmpD1)); - // mmtmpD2 = [ch0*ch0 + ch1*ch1,ch0*ch0 + ch1*ch1,ch2*ch2 + ch3*ch3,ch2*ch2 + ch3*ch3,ch4*ch4 + ch5*ch5,ch4*ch4 + ch5*ch5,ch6*ch6 + ch7*ch7,ch6*ch6 + ch7*ch7]>>output_shift on 16-bits - mmtmpD0 = vmull_s16(dl_ch0_128[2], dl_ch0_128[2]); - mmtmpD0 = vqshlq_s32(vqaddq_s32(mmtmpD0,vrev64q_s32(mmtmpD0)),-output_shift); - mmtmpD1 = vmull_s16(dl_ch0_128[3], dl_ch0_128[3]); - mmtmpD1 = vqshlq_s32(vqaddq_s32(mmtmpD1,vrev64q_s32(mmtmpD1)),-output_shift); - mmtmpD3 = vcombine_s16(vqmovn_s32(mmtmpD0),vwmovn_s32(mmtmpD1)); - - if (pilots==0) { - mmtmpD0 = vmull_s16(dl_ch0_128[4], dl_ch0_128[4]); - mmtmpD0 = vqshlq_s32(vqaddq_s32(mmtmpD0,vrev64q_s32(mmtmpD0)),-output_shift); - mmtmpD1 = vmull_s16(dl_ch0_128[5], dl_ch0_128[5]); - mmtmpD1 = vqshlq_s32(vqaddq_s32(mmtmpD1,vrev64q_s32(mmtmpD1)),-output_shift); - mmtmpD4 = vcombine_s16(vqmovn_s32(mmtmpD0),vwmovn_s32(mmtmpD1)); - - - } - - dl_ch_mag0_128b[0] = vqdmulhq_s16(mmtmpD2,QAM_amp0_128b); - dl_ch_mag0_128b[1] = vqdmulhq_s16(mmtmpD3,QAM_amp0_128b); - dl_ch_mag0_128[0] = vqdmulhq_s16(mmtmpD2,QAM_amp0_128); - dl_ch_mag0_128[1] = vqdmulhq_s16(mmtmpD3,QAM_amp0_128); - - - if (pilots==0) { - dl_ch_mag0_128b[2] = vqdmulhq_s16(mmtmpD4,QAM_amp0_128b); - dl_ch_mag0_128[2] = vqdmulhq_s16(mmtmpD4,QAM_amp0_128); - } + // get channel amplitude if not QPSK + mmtmpD0 = vmull_s16(dl_ch0_128[0], dl_ch0_128[0]); + // mmtmpD0 = [ch0*ch0,ch1*ch1,ch2*ch2,ch3*ch3]; + mmtmpD0 = vqshlq_s32(vqaddq_s32(mmtmpD0,vrev64q_s32(mmtmpD0)),output_shift128); + // mmtmpD0 = [ch0*ch0 + ch1*ch1,ch0*ch0 + ch1*ch1,ch2*ch2 + ch3*ch3,ch2*ch2 + ch3*ch3]>>output_shift128 on 32-bits + mmtmpD1 = vmull_s16(dl_ch0_128[1], dl_ch0_128[1]); + mmtmpD1 = vqshlq_s32(vqaddq_s32(mmtmpD1,vrev64q_s32(mmtmpD1)),output_shift128); + mmtmpD2 = vcombine_s16(vmovn_s32(mmtmpD0),vmovn_s32(mmtmpD1)); + // mmtmpD2 = [ch0*ch0 + ch1*ch1,ch0*ch0 + ch1*ch1,ch2*ch2 + ch3*ch3,ch2*ch2 + ch3*ch3,ch4*ch4 + ch5*ch5,ch4*ch4 + ch5*ch5,ch6*ch6 + ch7*ch7,ch6*ch6 + ch7*ch7]>>output_shift128 on 16-bits + mmtmpD0 = vmull_s16(dl_ch0_128[2], dl_ch0_128[2]); + mmtmpD0 = vqshlq_s32(vqaddq_s32(mmtmpD0,vrev64q_s32(mmtmpD0)),output_shift128); + mmtmpD1 = vmull_s16(dl_ch0_128[3], dl_ch0_128[3]); + mmtmpD1 = vqshlq_s32(vqaddq_s32(mmtmpD1,vrev64q_s32(mmtmpD1)),output_shift128); + mmtmpD3 = vcombine_s16(vmovn_s32(mmtmpD0),vmovn_s32(mmtmpD1)); + + if (pilots==0) { + mmtmpD0 = vmull_s16(dl_ch0_128[4], dl_ch0_128[4]); + mmtmpD0 = vqshlq_s32(vqaddq_s32(mmtmpD0,vrev64q_s32(mmtmpD0)),output_shift128); + mmtmpD1 = vmull_s16(dl_ch0_128[5], dl_ch0_128[5]); + mmtmpD1 = vqshlq_s32(vqaddq_s32(mmtmpD1,vrev64q_s32(mmtmpD1)),output_shift128); + mmtmpD4 = vcombine_s16(vmovn_s32(mmtmpD0),vmovn_s32(mmtmpD1)); + + + } + + dl_ch_mag0_128b[0] = vqdmulhq_s16(mmtmpD2,QAM_amp0_128b); + dl_ch_mag0_128b[1] = vqdmulhq_s16(mmtmpD3,QAM_amp0_128b); + dl_ch_mag0_128[0] = vqdmulhq_s16(mmtmpD2,QAM_amp0_128); + dl_ch_mag0_128[1] = vqdmulhq_s16(mmtmpD3,QAM_amp0_128); + + + if (pilots==0) { + dl_ch_mag0_128b[2] = vqdmulhq_s16(mmtmpD4,QAM_amp0_128b); + dl_ch_mag0_128[2] = vqdmulhq_s16(mmtmpD4,QAM_amp0_128); + } } if (mod_order1>2) { - // get channel amplitude if not QPSK - mmtmpD0 = vmull_s16(dl_ch1_128[0], dl_ch1_128[0]); - // mmtmpD0 = [ch0*ch0,ch1*ch1,ch2*ch2,ch3*ch3]; - mmtmpD0 = vqshlq_s32(vqaddq_s32(mmtmpD0,vrev64q_s32(mmtmpD0)),-output_shift); - // mmtmpD0 = [ch0*ch0 + ch1*ch1,ch0*ch0 + ch1*ch1,ch2*ch2 + ch3*ch3,ch2*ch2 + ch3*ch3]>>output_shift on 32-bits - mmtmpD1 = vmull_s16(dl_ch1_128[1], dl_ch1_128[1]); - mmtmpD1 = vqshlq_s32(vqaddq_s32(mmtmpD1,vrev64q_s32(mmtmpD1)),-output_shift); - mmtmpD2 = vcombine_s16(vqmovn_s32(mmtmpD0),vwmovn_s32(mmtmpD1)); - // mmtmpD2 = [ch0*ch0 + ch1*ch1,ch0*ch0 + ch1*ch1,ch2*ch2 + ch3*ch3,ch2*ch2 + ch3*ch3,ch4*ch4 + ch5*ch5,ch4*ch4 + ch5*ch5,ch6*ch6 + ch7*ch7,ch6*ch6 + ch7*ch7]>>output_shift on 16-bits - mmtmpD0 = vmull_s16(dl_ch1_128[2], dl_ch1_128[2]); - mmtmpD0 = vqshlq_s32(vqaddq_s32(mmtmpD0,vrev64q_s32(mmtmpD0)),-output_shift); - mmtmpD1 = vmull_s16(dl_ch1_128[3], dl_ch1_128[3]); - mmtmpD1 = vqshlq_s32(vqaddq_s32(mmtmpD1,vrev64q_s32(mmtmpD1)),-output_shift); - mmtmpD3 = vcombine_s16(vqmovn_s32(mmtmpD0),vwmovn_s32(mmtmpD1)); - - if (pilots==0) { - mmtmpD0 = vmull_s16(dl_ch1_128[4], dl_ch1_128[4]); - mmtmpD0 = vqshlq_s32(vqaddq_s32(mmtmpD0,vrev64q_s32(mmtmpD0)),-output_shift); - mmtmpD1 = vmull_s16(dl_ch1_128[5], dl_ch1_128[5]); - mmtmpD1 = vqshlq_s32(vqaddq_s32(mmtmpD1,vrev64q_s32(mmtmpD1)),-output_shift); - mmtmpD4 = vcombine_s16(vqmovn_s32(mmtmpD0),vwmovn_s32(mmtmpD1)); - - - } - - dl_ch_mag1_128b[0] = vqdmulhq_s16(mmtmpD2,QAM_amp1_128b); - dl_ch_mag1_128b[1] = vqdmulhq_s16(mmtmpD3,QAM_amp1_128b); - dl_ch_mag1_128[0] = vqdmulhq_s16(mmtmpD2,QAM_amp1_128); - dl_ch_mag1_128[1] = vqdmulhq_s16(mmtmpD3,QAM_amp1_128); - - - if (pilots==0) { - dl_ch_mag1_128b[2] = vqdmulhq_s16(mmtmpD4,QAM_amp1_128b); - dl_ch_mag1_128[2] = vqdmulhq_s16(mmtmpD4,QAM_amp1_128); - } + // get channel amplitude if not QPSK + mmtmpD0 = vmull_s16(dl_ch1_128[0], dl_ch1_128[0]); + // mmtmpD0 = [ch0*ch0,ch1*ch1,ch2*ch2,ch3*ch3]; + mmtmpD0 = vqshlq_s32(vqaddq_s32(mmtmpD0,vrev64q_s32(mmtmpD0)),output_shift128); + // mmtmpD0 = [ch0*ch0 + ch1*ch1,ch0*ch0 + ch1*ch1,ch2*ch2 + ch3*ch3,ch2*ch2 + ch3*ch3]>>output_shift128 on 32-bits + mmtmpD1 = vmull_s16(dl_ch1_128[1], dl_ch1_128[1]); + mmtmpD1 = vqshlq_s32(vqaddq_s32(mmtmpD1,vrev64q_s32(mmtmpD1)),output_shift128); + mmtmpD2 = vcombine_s16(vmovn_s32(mmtmpD0),vmovn_s32(mmtmpD1)); + // mmtmpD2 = [ch0*ch0 + ch1*ch1,ch0*ch0 + ch1*ch1,ch2*ch2 + ch3*ch3,ch2*ch2 + ch3*ch3,ch4*ch4 + ch5*ch5,ch4*ch4 + ch5*ch5,ch6*ch6 + ch7*ch7,ch6*ch6 + ch7*ch7]>>output_shift128 on 16-bits + mmtmpD0 = vmull_s16(dl_ch1_128[2], dl_ch1_128[2]); + mmtmpD0 = vqshlq_s32(vqaddq_s32(mmtmpD0,vrev64q_s32(mmtmpD0)),output_shift128); + mmtmpD1 = vmull_s16(dl_ch1_128[3], dl_ch1_128[3]); + mmtmpD1 = vqshlq_s32(vqaddq_s32(mmtmpD1,vrev64q_s32(mmtmpD1)),output_shift128); + mmtmpD3 = vcombine_s16(vmovn_s32(mmtmpD0),vmovn_s32(mmtmpD1)); + + if (pilots==0) { + mmtmpD0 = vmull_s16(dl_ch1_128[4], dl_ch1_128[4]); + mmtmpD0 = vqshlq_s32(vqaddq_s32(mmtmpD0,vrev64q_s32(mmtmpD0)),output_shift128); + mmtmpD1 = vmull_s16(dl_ch1_128[5], dl_ch1_128[5]); + mmtmpD1 = vqshlq_s32(vqaddq_s32(mmtmpD1,vrev64q_s32(mmtmpD1)),output_shift128); + mmtmpD4 = vcombine_s16(vmovn_s32(mmtmpD0),vmovn_s32(mmtmpD1)); + + + } + + dl_ch_mag1_128b[0] = vqdmulhq_s16(mmtmpD2,QAM_amp1_128b); + dl_ch_mag1_128b[1] = vqdmulhq_s16(mmtmpD3,QAM_amp1_128b); + dl_ch_mag1_128[0] = vqdmulhq_s16(mmtmpD2,QAM_amp1_128); + dl_ch_mag1_128[1] = vqdmulhq_s16(mmtmpD3,QAM_amp1_128); + + + if (pilots==0) { + dl_ch_mag1_128b[2] = vqdmulhq_s16(mmtmpD4,QAM_amp1_128b); + dl_ch_mag1_128[2] = vqdmulhq_s16(mmtmpD4,QAM_amp1_128); + } } - - mmtmpD0 = vmull_s16(dl_ch0_128[0], rx_dataF128[0]); - //mmtmpD0 = [Re(ch[0])Re(rx[0]) Im(ch[0])Im(ch[0]) Re(ch[1])Re(rx[1]) Im(ch[1])Im(ch[1])] - mmtmpD1 = vmull_s16(dl_ch0_128[1], rx_dataF128[1]); - //mmtmpD1 = [Re(ch[2])Re(rx[2]) Im(ch[2])Im(ch[2]) Re(ch[3])Re(rx[3]) Im(ch[3])Im(ch[3])] - mmtmpD0 = vpadd_s32(mmtmpD0,mmtmpD1); - //mmtmpD0 = [Re(ch[0])Re(rx[0])+Im(ch[0])Im(ch[0]) Re(ch[1])Re(rx[1])+Im(ch[1])Im(ch[1]) Re(ch[2])Re(rx[2])+Im(ch[2])Im(ch[2]) Re(ch[3])Re(rx[3])+Im(ch[3])Im(ch[3])] - - mmtmpD0 = vmull_s16(vrev32q_s16(vmulq_s16(dl_ch0_128[0],*(int16x4_t*)conj)), rx_dataF128[0]); + + mmtmpD0 = vmull_s16(dl_ch0_128[0], rxdataF128[0]); + //mmtmpD0 = [Re(ch[0])Re(rx[0]) Im(ch[0])Im(ch[0]) Re(ch[1])Re(rx[1]) Im(ch[1])Im(ch[1])] + mmtmpD1 = vmull_s16(dl_ch0_128[1], rxdataF128[1]); + //mmtmpD1 = [Re(ch[2])Re(rx[2]) Im(ch[2])Im(ch[2]) Re(ch[3])Re(rx[3]) Im(ch[3])Im(ch[3])] + mmtmpD0 = vcombine_s32(vpadd_s32(vget_low_s32(mmtmpD0),vget_high_s32(mmtmpD0)), + vpadd_s32(vget_low_s32(mmtmpD1),vget_high_s32(mmtmpD1))); + //mmtmpD0 = [Re(ch[0])Re(rx[0])+Im(ch[0])Im(ch[0]) Re(ch[1])Re(rx[1])+Im(ch[1])Im(ch[1]) Re(ch[2])Re(rx[2])+Im(ch[2])Im(ch[2]) Re(ch[3])Re(rx[3])+Im(ch[3])Im(ch[3])] + + mmtmpD0b = vmull_s16(vrev32_s16(vmul_s16(dl_ch0_128[0],*(int16x4_t*)conj)), rxdataF128[0]); //mmtmpD0 = [-Im(ch[0])Re(rx[0]) Re(ch[0])Im(rx[0]) -Im(ch[1])Re(rx[1]) Re(ch[1])Im(rx[1])] - mmtmpD1 = vmull_s16(vrev32q_s16(vmulq_s16(dl_ch0_128[1],*(int16x4_t*)conj)), rx_dataF128[1]); + mmtmpD1b = vmull_s16(vrev32_s16(vmul_s16(dl_ch0_128[1],*(int16x4_t*)conj)), rxdataF128[1]); //mmtmpD0 = [-Im(ch[2])Re(rx[2]) Re(ch[2])Im(rx[2]) -Im(ch[3])Re(rx[3]) Re(ch[3])Im(rx[3])] - mmtmpD1 = vpadd_s32(mmtmpD0,mmtmpD1); + mmtmpD1 = vcombine_s32(vpadd_s32(vget_low_s32(mmtmpD0b),vget_high_s32(mmtmpD0b)), + vpadd_s32(vget_low_s32(mmtmpD1b),vget_high_s32(mmtmpD1b))); //mmtmpD1 = [-Im(ch[0])Re(rx[0])+Re(ch[0])Im(rx[0]) -Im(ch[1])Re(rx[1])+Re(ch[1])Im(rx[1]) -Im(ch[2])Re(rx[2])+Re(ch[2])Im(rx[2]) -Im(ch[3])Re(rx[3])+Re(ch[3])Im(rx[3])] - - mmtmpD0 = vqshlq_s32(mmtmpD0,-output_shift); - mmtmpD1 = vqshlq_s32(mmtmpD1,-output_shift); - rxdataF_comp0_128[0] = vcombine_s16(vqmovn_s32(mmtmpD0),vwmovn_s32(mmtmpD1)); - - mmtmpD0 = vmull_s16(dl_ch0_128[2], rx_dataF128[2]); - mmtmpD1 = vmull_s16(dl_ch0_128[3], rx_dataF128[3]); - mmtmpD0 = vpadd_s32(mmtmpD0,mmtmpD1); - mmtmpD0 = vmull_s16(vrev32q_s16(vmulq_s16(dl_ch0_128[2],*(int16x4_t*)conj)), rx_dataF128[2]); - mmtmpD1 = vmull_s16(vrev32q_s16(vmulq_s16(dl_ch0_128[3],*(int16x4_t*)conj)), rx_dataF128[3]); - mmtmpD1 = vpadd_s32(mmtmpD0,mmtmpD1); - - mmtmpD0 = vqshlq_s32(mmtmpD0,-output_shift); - mmtmpD1 = vqshlq_s32(mmtmpD1,-output_shift); - rxdataF_comp0_128[1] = vcombine_s16(vqmovn_s32(mmtmpD0),vwmovn_s32(mmtmpD1)); - - - mmtmpD0 = vmull_s16(dl_ch1_128[0], rx_dataF128[0]); - mmtmpD1 = vmull_s16(dl_ch1_128[1], rx_dataF128[1]); - mmtmpD0 = vpadd_s32(mmtmpD0,mmtmpD1); - mmtmpD0 = vmull_s16(vrev32q_s16(vmulq_s16(dl_ch0_128[0],*(int16x4_t*)conj)), rx_dataF128[0]); - mmtmpD1 = vmull_s16(vrev32q_s16(vmulq_s16(dl_ch0_128[1],*(int16x4_t*)conj)), rx_dataF128[1]); - mmtmpD1 = vpadd_s32(mmtmpD0,mmtmpD1); - mmtmpD0 = vqshlq_s32(mmtmpD0,-output_shift); - mmtmpD1 = vqshlq_s32(mmtmpD1,-output_shift); - rxdataF_comp1_128[0] = vcombine_s16(vqmovn_s32(mmtmpD0),vwmovn_s32(mmtmpD1)); - - mmtmpD0 = vmull_s16(dl_ch1_128[2], rx_dataF128[2]); - mmtmpD1 = vmull_s16(dl_ch1_128[3], rx_dataF128[3]); - mmtmpD0 = vpadd_s32(mmtmpD0,mmtmpD1); - mmtmpD0 = vmull_s16(vrev32q_s16(vmulq_s16(dl_ch0_128[2],*(int16x4_t*)conj)), rx_dataF128[2]); - mmtmpD1 = vmull_s16(vrev32q_s16(vmulq_s16(dl_ch0_128[3],*(int16x4_t*)conj)), rx_dataF128[3]); - mmtmpD1 = vpadd_s32(mmtmpD0,mmtmpD1); - - mmtmpD0 = vqshlq_s32(mmtmpD0,-output_shift); - mmtmpD1 = vqshlq_s32(mmtmpD1,-output_shift); - rxdataF_comp1_128[1] = vcombine_s16(vqmovn_s32(mmtmpD0),vwmovn_s32(mmtmpD1)); - + + mmtmpD0 = vqshlq_s32(mmtmpD0,output_shift128); + mmtmpD1 = vqshlq_s32(mmtmpD1,output_shift128); + rxdataF_comp0_128[0] = vcombine_s16(vmovn_s32(mmtmpD0),vmovn_s32(mmtmpD1)); + + mmtmpD0 = vmull_s16(dl_ch0_128[2], rxdataF128[2]); + mmtmpD1 = vmull_s16(dl_ch0_128[3], rxdataF128[3]); + mmtmpD0 = vcombine_s32(vpadd_s32(vget_low_s32(mmtmpD0),vget_high_s32(mmtmpD0)), + vpadd_s32(vget_low_s32(mmtmpD1),vget_high_s32(mmtmpD1))); + + mmtmpD0b = vmull_s16(vrev32_s16(vmul_s16(dl_ch0_128[2],*(int16x4_t*)conj)), rxdataF128[2]); + mmtmpD1b = vmull_s16(vrev32_s16(vmul_s16(dl_ch0_128[3],*(int16x4_t*)conj)), rxdataF128[3]); + mmtmpD1 = vcombine_s32(vpadd_s32(vget_low_s32(mmtmpD0b),vget_high_s32(mmtmpD0b)), + vpadd_s32(vget_low_s32(mmtmpD1b),vget_high_s32(mmtmpD1b))); + + mmtmpD0 = vqshlq_s32(mmtmpD0,output_shift128); + mmtmpD1 = vqshlq_s32(mmtmpD1,output_shift128); + rxdataF_comp0_128[1] = vcombine_s16(vmovn_s32(mmtmpD0),vmovn_s32(mmtmpD1)); + + // second stream + mmtmpD0 = vmull_s16(dl_ch1_128[0], rxdataF128[0]); + mmtmpD1 = vmull_s16(dl_ch1_128[1], rxdataF128[1]); + mmtmpD0 = vcombine_s32(vpadd_s32(vget_low_s32(mmtmpD0),vget_high_s32(mmtmpD0)), + vpadd_s32(vget_low_s32(mmtmpD1),vget_high_s32(mmtmpD1))); + mmtmpD0b = vmull_s16(vrev32_s16(vmul_s16(dl_ch0_128[0],*(int16x4_t*)conj)), rxdataF128[0]); + + mmtmpD1b = vmull_s16(vrev32_s16(vmul_s16(dl_ch0_128[1],*(int16x4_t*)conj)), rxdataF128[1]); + //mmtmpD0 = [-Im(ch[2])Re(rx[2]) Re(ch[2])Im(rx[2]) -Im(ch[3])Re(rx[3]) Re(ch[3])Im(rx[3])] + mmtmpD1 = vcombine_s32(vpadd_s32(vget_low_s32(mmtmpD0b),vget_high_s32(mmtmpD0b)), + vpadd_s32(vget_low_s32(mmtmpD1b),vget_high_s32(mmtmpD1b))); + //mmtmpD1 = [-Im(ch[0])Re(rx[0])+Re(ch[0])Im(rx[0]) -Im(ch[1])Re(rx[1])+Re(ch[1])Im(rx[1]) -Im(ch[2])Re(rx[2])+Re(ch[2])Im(rx[2]) -Im(ch[3])Re(rx[3])+Re(ch[3])Im(rx[3])] + + mmtmpD0 = vqshlq_s32(mmtmpD0,output_shift128); + mmtmpD1 = vqshlq_s32(mmtmpD1,output_shift128); + rxdataF_comp1_128[0] = vcombine_s16(vmovn_s32(mmtmpD0),vmovn_s32(mmtmpD1)); + + mmtmpD0 = vmull_s16(dl_ch1_128[2], rxdataF128[2]); + mmtmpD1 = vmull_s16(dl_ch1_128[3], rxdataF128[3]); + mmtmpD0 = vcombine_s32(vpadd_s32(vget_low_s32(mmtmpD0),vget_high_s32(mmtmpD0)), + vpadd_s32(vget_low_s32(mmtmpD1),vget_high_s32(mmtmpD1))); + + mmtmpD0b = vmull_s16(vrev32_s16(vmul_s16(dl_ch0_128[2],*(int16x4_t*)conj)), rxdataF128[2]); + mmtmpD1b = vmull_s16(vrev32_s16(vmul_s16(dl_ch0_128[3],*(int16x4_t*)conj)), rxdataF128[3]); + mmtmpD1 = vcombine_s32(vpadd_s32(vget_low_s32(mmtmpD0b),vget_high_s32(mmtmpD0b)), + vpadd_s32(vget_low_s32(mmtmpD1b),vget_high_s32(mmtmpD1b))); + + mmtmpD0 = vqshlq_s32(mmtmpD0,output_shift128); + mmtmpD1 = vqshlq_s32(mmtmpD1,output_shift128); + rxdataF_comp1_128[1] = vcombine_s16(vmovn_s32(mmtmpD0),vmovn_s32(mmtmpD1)); + if (pilots==0) { - mmtmpD0 = vmull_s16(dl_ch0_128[4], rx_dataF128[4]); - mmtmpD1 = vmull_s16(dl_ch0_128[5], rx_dataF128[5]); - mmtmpD0 = vpadd_s32(mmtmpD0,mmtmpD1); - mmtmpD0 = vmull_s16(vrev32q_s16(vmulq_s16(dl_ch0_128[4],*(int16x4_t*)conj)), rx_dataF128[4]); - mmtmpD1 = vmull_s16(vrev32q_s16(vmulq_s16(dl_ch0_128[5],*(int16x4_t*)conj)), rx_dataF128[5]); - mmtmpD1 = vpadd_s32(mmtmpD0,mmtmpD1); - - mmtmpD0 = vqshlq_s32(mmtmpD0,-output_shift); - mmtmpD1 = vqshlq_s32(mmtmpD1,-output_shift); - rxdataF_comp0_128[2] = vcombine_s16(vqmovn_s32(mmtmpD0),vwmovn_s32(mmtmpD1)); - - mmtmpD0 = vmull_s16(dl_ch1_128[4], rx_dataF128[4]); - mmtmpD1 = vmull_s16(dl_ch1_128[5], rx_dataF128[5]); - mmtmpD0 = vpadd_s32(mmtmpD0,mmtmpD1); - mmtmpD0 = vmull_s16(vrev32q_s16(vmulq_s16(dl_ch1_128[4],*(int16x4_t*)conj)), rx_dataF128[4]); - mmtmpD1 = vmull_s16(vrev32q_s16(vmulq_s16(dl_ch1_128[5],*(int16x4_t*)conj)), rx_dataF128[5]); - mmtmpD1 = vpadd_s32(mmtmpD0,mmtmpD1); - - mmtmpD0 = vqshlq_s32(mmtmpD0,-output_shift); - mmtmpD1 = vqshlq_s32(mmtmpD1,-output_shift); - rxdataF_comp1_128[2] = vcombine_s16(vqmovn_s32(mmtmpD0),vwmovn_s32(mmtmpD1)); - - - dl_ch0_128+=6; - dl_ch1_128+=6; - dl_ch_mag0_128+=3; - dl_ch_mag0_128b+=3; - dl_ch_mag1_128+=3; - dl_ch_mag1_128b+=3; - rxdataF128+=6; - rxdataF_comp0_128+=3; - rxdataF_comp1_128+=3; - - } else { // we have a smaller PDSCH in symbols with pilots so skip last group of 4 REs and increment less - dl_ch0_128+=4; - dl_ch1_128+=4; - dl_ch_mag0_128+=2; - dl_ch_mag0_128b+=2; - dl_ch_mag1_128+=2; - dl_ch_mag1_128b+=2; - rxdataF128+=4; - rxdataF_comp0_128+=2; - rxdataF_comp1_128+=2; + mmtmpD0 = vmull_s16(dl_ch0_128[4], rxdataF128[4]); + mmtmpD1 = vmull_s16(dl_ch0_128[5], rxdataF128[5]); + mmtmpD0 = vcombine_s32(vpadd_s32(vget_low_s32(mmtmpD0),vget_high_s32(mmtmpD0)), + vpadd_s32(vget_low_s32(mmtmpD1),vget_high_s32(mmtmpD1))); + + mmtmpD0b = vmull_s16(vrev32_s16(vmul_s16(dl_ch0_128[4],*(int16x4_t*)conj)), rxdataF128[4]); + mmtmpD1b = vmull_s16(vrev32_s16(vmul_s16(dl_ch0_128[5],*(int16x4_t*)conj)), rxdataF128[5]); + mmtmpD1 = vcombine_s32(vpadd_s32(vget_low_s32(mmtmpD0b),vget_high_s32(mmtmpD0b)), + vpadd_s32(vget_low_s32(mmtmpD1b),vget_high_s32(mmtmpD1b))); + + + mmtmpD0 = vqshlq_s32(mmtmpD0,output_shift128); + mmtmpD1 = vqshlq_s32(mmtmpD1,output_shift128); + rxdataF_comp0_128[2] = vcombine_s16(vmovn_s32(mmtmpD0),vmovn_s32(mmtmpD1)); + mmtmpD0 = vmull_s16(dl_ch1_128[4], rxdataF128[4]); + mmtmpD1 = vmull_s16(dl_ch1_128[5], rxdataF128[5]); + mmtmpD0 = vcombine_s32(vpadd_s32(vget_low_s32(mmtmpD0),vget_high_s32(mmtmpD0)), + vpadd_s32(vget_low_s32(mmtmpD1),vget_high_s32(mmtmpD1))); + + mmtmpD0b = vmull_s16(vrev32_s16(vmul_s16(dl_ch1_128[4],*(int16x4_t*)conj)), rxdataF128[4]); + mmtmpD1b = vmull_s16(vrev32_s16(vmul_s16(dl_ch1_128[5],*(int16x4_t*)conj)), rxdataF128[5]); + mmtmpD1 = vcombine_s32(vpadd_s32(vget_low_s32(mmtmpD0b),vget_high_s32(mmtmpD0b)), + vpadd_s32(vget_low_s32(mmtmpD1b),vget_high_s32(mmtmpD1b))); + + + mmtmpD0 = vqshlq_s32(mmtmpD0,output_shift128); + mmtmpD1 = vqshlq_s32(mmtmpD1,output_shift128); + rxdataF_comp1_128[2] = vcombine_s16(vmovn_s32(mmtmpD0),vmovn_s32(mmtmpD1)); } } - - - + + + Nre = (pilots==0) ? 12 : 8; - precoded_signal_strength0 += ((signal_energy_nodc(&dl_ch_estimates_ext[aarx][symbol*frame_parms->N_RB_DL*Nre], - (nb_rb*Nre))*rx_power_correction) - (phy_measurements->n0_power[aarx])); - - precoded_signal_strength1 += ((signal_energy_nodc(&dl_ch_estimates_ext[aarx+2][symbol*frame_parms->N_RB_DL*Nre], - (nb_rb*Nre))*rx_power_correction) - (phy_measurements->n0_power[aarx])); - // rx_antennas } + + Nre = (pilots==0) ? 12 : 8; + + precoded_signal_strength0 += ((signal_energy_nodc(&dl_ch_estimates_ext[aarx][symbol*frame_parms->N_RB_DL*Nre], + (nb_rb*Nre))) - (phy_measurements->n0_power[aarx])); + + precoded_signal_strength1 += ((signal_energy_nodc(&dl_ch_estimates_ext[aarx+2][symbol*frame_parms->N_RB_DL*Nre], + (nb_rb*Nre))) - (phy_measurements->n0_power[aarx])); + + phy_measurements->precoded_cqi_dB[eNB_id][0] = dB_fixed2(precoded_signal_strength0,phy_measurements->n0_power_tot); phy_measurements->precoded_cqi_dB[eNB_id][1] = dB_fixed2(precoded_signal_strength1,phy_measurements->n0_power_tot); @@ -2620,7 +2639,7 @@ void dlsch_detection_mrc(LTE_DL_FRAME_PARMS *frame_parms, unsigned char aatx; int i; __m128i *rxdataF_comp128_0,*rxdataF_comp128_1,*rxdataF_comp128_i0,*rxdataF_comp128_i1,*dl_ch_mag128_0,*dl_ch_mag128_1,*dl_ch_mag128_0b,*dl_ch_mag128_1b,*rho128_0,*rho128_1,*rho128_i0,*rho128_i1, - *dl_ch_mag128_i0,*dl_ch_mag128_i1,*dl_ch_mag128_i0b,*dl_ch_mag128_i1b; + *dl_ch_mag128_i0,*dl_ch_mag128_i1,*dl_ch_mag128_i0b,*dl_ch_mag128_i1b; if (frame_parms->nb_antennas_rx>1) { @@ -2678,6 +2697,62 @@ void dlsch_detection_mrc(LTE_DL_FRAME_PARMS *frame_parms, #elif defined(__arm__) + unsigned char aatx; + int i; + int16x8_t *rxdataF_comp128_0,*rxdataF_comp128_1,*rxdataF_comp128_i0,*rxdataF_comp128_i1,*dl_ch_mag128_0,*dl_ch_mag128_1,*dl_ch_mag128_0b,*dl_ch_mag128_1b,*rho128_0,*rho128_1,*rho128_i0,*rho128_i1,*dl_ch_mag128_i0,*dl_ch_mag128_i1,*dl_ch_mag128_i0b,*dl_ch_mag128_i1b; + + if (frame_parms->nb_antennas_rx>1) { + + for (aatx=0; aatxnb_antennas_tx_eNB; aatx++) { + + rxdataF_comp128_0 = (int16x8_t *)&rxdataF_comp[(aatx<<1)][symbol*frame_parms->N_RB_DL*12]; + rxdataF_comp128_1 = (int16x8_t *)&rxdataF_comp[(aatx<<1)+1][symbol*frame_parms->N_RB_DL*12]; + dl_ch_mag128_0 = (int16x8_t *)&dl_ch_mag[(aatx<<1)][symbol*frame_parms->N_RB_DL*12]; + dl_ch_mag128_1 = (int16x8_t *)&dl_ch_mag[(aatx<<1)+1][symbol*frame_parms->N_RB_DL*12]; + dl_ch_mag128_0b = (int16x8_t *)&dl_ch_magb[(aatx<<1)][symbol*frame_parms->N_RB_DL*12]; + dl_ch_mag128_1b = (int16x8_t *)&dl_ch_magb[(aatx<<1)+1][symbol*frame_parms->N_RB_DL*12]; + + // MRC on each re of rb, both on MF output and magnitude (for 16QAM/64QAM llr computation) + for (i=0; iN_RB_DL*12]; + rho128_1 = (int16x8_t *) &rho[1][symbol*frame_parms->N_RB_DL*12]; + + for (i=0; iN_RB_DL*12]; + rho128_i1 = (int16x8_t *) &rho_i[1][symbol*frame_parms->N_RB_DL*12]; + rxdataF_comp128_i0 = (int16x8_t *)&rxdataF_comp_i[0][symbol*frame_parms->N_RB_DL*12]; + rxdataF_comp128_i1 = (int16x8_t *)&rxdataF_comp_i[1][symbol*frame_parms->N_RB_DL*12]; + + dl_ch_mag128_i0 = (int16x8_t *)&dl_ch_mag_i[0][symbol*frame_parms->N_RB_DL*12]; + dl_ch_mag128_i1 = (int16x8_t *)&dl_ch_mag_i[1][symbol*frame_parms->N_RB_DL*12]; + dl_ch_mag128_i0b = (int16x8_t *)&dl_ch_magb_i[0][symbol*frame_parms->N_RB_DL*12]; + dl_ch_mag128_i1b = (int16x8_t *)&dl_ch_magb_i[1][symbol*frame_parms->N_RB_DL*12]; + + for (i=0; i=(7-frame_parms->Ncp)) ? symbol-(7-frame_parms->Ncp) : symbol; + + for (aatx=0; aatxnb_antennas_tx_eNB; aatx++) + for (aarx=0; aarxnb_antennas_rx; aarx++) { + //clear average level + avg128D = vdupq_n_s32(0); + // 5 is always a symbol with no pilots for both normal and extended prefix + + dl_ch128=(int16x4_t *)&dl_ch_estimates_ext[(aatx<<1)+aarx][symbol*frame_parms->N_RB_DL*12]; + + for (rb=0; rbNcp-1)))&&(frame_parms->mode1_flag==0)) { + dl_ch128+=4; + } else { + avg128D = vqaddq_s32(avg128D,vmull_s16(dl_ch128[4],dl_ch128[4])); + avg128D = vqaddq_s32(avg128D,vmull_s16(dl_ch128[5],dl_ch128[5])); + dl_ch128+=6; + } + + /* + if (rb==0) { + print_shorts("dl_ch128",&dl_ch128[0]); + print_shorts("dl_ch128",&dl_ch128[1]); + print_shorts("dl_ch128",&dl_ch128[2]); + } + */ + } + + if (((symbol_mod == 0) || (symbol_mod == (frame_parms->Ncp-1)))&&(frame_parms->mode1_flag==0)) + nre=8; + else if (((symbol_mod == 0) || (symbol_mod == (frame_parms->Ncp-1)))&&(frame_parms->mode1_flag==1)) + nre=10; + else + nre=12; + + avg[(aatx<<1)+aarx] = (((int32_t*)&avg128D)[0] + + ((int32_t*)&avg128D)[1] + + ((int32_t*)&avg128D)[2] + + ((int32_t*)&avg128D)[3])/(nb_rb*nre); + + // printf("Channel level : %d\n",avg[(aatx<<1)+aarx]); + } + + #endif } @@ -2872,9 +3003,9 @@ void dlsch_channel_level_TM3(int **dl_ch_estimates_ext, } avg[aarx] = (((int*)&avg128D)[0])/(nb_rb*nre) + - (((int*)&avg128D)[1])/(nb_rb*nre) + - (((int*)&avg128D)[2])/(nb_rb*nre) + - (((int*)&avg128D)[3])/(nb_rb*nre); + (((int*)&avg128D)[1])/(nb_rb*nre) + + (((int*)&avg128D)[2])/(nb_rb*nre) + + (((int*)&avg128D)[3])/(nb_rb*nre); } // choose maximum of the 2 effective channels @@ -2955,9 +3086,9 @@ void dlsch_channel_level_TM56(int **dl_ch_estimates_ext, } avg[aarx] = (((int*)&avg128D)[0])/(nb_rb*nre) + - (((int*)&avg128D)[1])/(nb_rb*nre) + - (((int*)&avg128D)[2])/(nb_rb*nre) + - (((int*)&avg128D)[3])/(nb_rb*nre); + (((int*)&avg128D)[1])/(nb_rb*nre) + + (((int*)&avg128D)[2])/(nb_rb*nre) + + (((int*)&avg128D)[3])/(nb_rb*nre); } // choose maximum of the 2 effective channels @@ -3219,17 +3350,17 @@ unsigned short dlsch_extract_rbs_single(int **rxdataF, memcpy(dl_ch0_ext,dl_ch0,12*sizeof(int)); /* - printf("rb %d\n",rb); - for (i=0;i<12;i++) - printf("(%d %d)",((short *)dl_ch0)[i<<1],((short*)dl_ch0)[1+(i<<1)]); - printf("\n"); + printf("rb %d\n",rb); + for (i=0;i<12;i++) + printf("(%d %d)",((short *)dl_ch0)[i<<1],((short*)dl_ch0)[1+(i<<1)]); + printf("\n"); */ if (pilots==0) { for (i=0; i<12; i++) { rxF_ext[i]=rxF[i]; /* - printf("%d : (%d,%d)\n",(rxF+i-&rxdataF[aarx][( (symbol*(frame_parms->ofdm_symbol_size)))]), - ((short*)&rxF[i])[0],((short*)&rxF[i])[1]);*/ + printf("%d : (%d,%d)\n",(rxF+i-&rxdataF[aarx][( (symbol*(frame_parms->ofdm_symbol_size)))]), + ((short*)&rxF[i])[0],((short*)&rxF[i])[1]);*/ } dl_ch0_ext+=12; @@ -3571,7 +3702,7 @@ unsigned short dlsch_extract_rbs_single(int **rxdataF, if (rb_alloc_ind==1) { // printf("rb %d/symbol %d (skip_half %d)\n",rb,l,skip_half); /* - printf("rb %d\n",rb); + printf("rb %d\n",rb); for (i=0;i<12;i++) printf("(%d %d)",((short *)dl_ch0)[i<<1],((short*)dl_ch0)[1+(i<<1)]); printf("\n"); @@ -3654,9 +3785,7 @@ unsigned short dlsch_extract_rbs_single(int **rxdataF, } } } - - _mm_empty(); - _m_empty(); + return(nb_rb/frame_parms->nb_antennas_rx); } @@ -3675,11 +3804,12 @@ unsigned short dlsch_extract_rbs_dual(int **rxdataF, { - unsigned short rb,nb_rb=0; - unsigned char rb_alloc_ind,skip_half=0,sss_symb,pss_symb=0,nsymb,l; - unsigned char i,aarx; - int *dl_ch0,*dl_ch0_ext,*dl_ch1,*dl_ch1_ext,*rxF,*rxF_ext; - unsigned char symbol_mod,pilots=0,j=0; + int prb,nb_rb=0; + int prb_off,prb_off2; + int rb_alloc_ind,skip_half=0,sss_symb,pss_symb=0,nsymb,l; + int i,aarx; + int32_t *dl_ch0,*dl_ch0p,*dl_ch0_ext,*dl_ch1,*dl_ch1p,*dl_ch1_ext,*rxF,*rxF_ext; + int symbol_mod,pilots=0,j=0; unsigned char *pmi_loc; symbol_mod = (symbol>=(7-frame_parms->Ncp)) ? symbol-(7-frame_parms->Ncp) : symbol; @@ -3709,97 +3839,100 @@ unsigned short dlsch_extract_rbs_dual(int **rxdataF, dl_ch1 = &dl_ch_estimates[2+aarx][5]; } + pmi_loc = pmi_ext; + + // pointers to extracted RX signals and channel estimates + rxF_ext = &rxdataF_ext[aarx][symbol*(frame_parms->N_RB_DL*12)]; dl_ch0_ext = &dl_ch_estimates_ext[aarx][symbol*(frame_parms->N_RB_DL*12)]; dl_ch1_ext = &dl_ch_estimates_ext[2+aarx][symbol*(frame_parms->N_RB_DL*12)]; - pmi_loc = pmi_ext; - rxF_ext = &rxdataF_ext[aarx][symbol*(frame_parms->N_RB_DL*12)]; - rxF = &rxdataF[aarx][(frame_parms->first_carrier_offset + (symbol*(frame_parms->ofdm_symbol_size)))]; - - if ((frame_parms->N_RB_DL&1) == 0) // even number of RBs - for (rb=0; rbN_RB_DL; rb++) { - skip_half=0; - - if (rb < 32) - rb_alloc_ind = (rb_alloc[0]>>rb) & 1; - else if (rb < 64) - rb_alloc_ind = (rb_alloc[1]>>(rb-32)) & 1; - else if (rb < 96) - rb_alloc_ind = (rb_alloc[2]>>(rb-64)) & 1; - else if (rb < 100) - rb_alloc_ind = (rb_alloc[3]>>(rb-96)) & 1; - else - rb_alloc_ind = 0; - - // For second half of RBs skip DC carrier - if (rb==(frame_parms->N_RB_DL>>1)) { - rxF = &rxdataF[aarx][(1 + (symbol*(frame_parms->ofdm_symbol_size)))]; - //dl_ch0++; - //dl_ch1++; - } - - // PBCH - if ((subframe==0) && (rb>=((frame_parms->N_RB_DL>>1)-3)) && (rb<((frame_parms->N_RB_DL>>1)+3)) && (l>=(nsymb>>1)) && (l<((nsymb>>1) + 4))) { - rb_alloc_ind = 0; - } - - //SSS - - if (((subframe==0)||(subframe==5)) && - (rb>=((frame_parms->N_RB_DL>>1)-3)) && - (rb<((frame_parms->N_RB_DL>>1)+3)) && - (l==sss_symb) ) { - rb_alloc_ind = 0; - } - - - - //PSS in subframe 0/5 if FDD - if (frame_parms->frame_type == FDD) { //FDD - if (((subframe==0)||(subframe==5)) && (rb>=((frame_parms->N_RB_DL>>1)-3)) && (rb<((frame_parms->N_RB_DL>>1)+3)) && (l==pss_symb) ) { - rb_alloc_ind = 0; - } - } - - if ((frame_parms->frame_type == TDD) && - (subframe==6)) { //TDD Subframe 6 - if ((rb>=((frame_parms->N_RB_DL>>1)-3)) && (rb<((frame_parms->N_RB_DL>>1)+3)) && (l==pss_symb) ) { - rb_alloc_ind = 0; - } - } - - if (rb_alloc_ind==1) { - - //printf("demod: rb %d\n",rb); - - *pmi_loc = (pmi>>((rb>>2)<<1))&3; - // printf("rb %d: sb %d : pmi %d\n",rb,rb>>2,*pmi_loc); + for (prb=0; prbN_RB_DL; prb++) { + skip_half=0; + + if (prb < 32) + rb_alloc_ind = (rb_alloc[0]>>prb) & 1; + else if (prb < 64) + rb_alloc_ind = (rb_alloc[1]>>(prb-32)) & 1; + else if (prb < 96) + rb_alloc_ind = (rb_alloc[2]>>(prb-64)) & 1; + else if (prb < 100) + rb_alloc_ind = (rb_alloc[3]>>(prb-96)) & 1; + else + rb_alloc_ind = 0; + + // PBCH + if ((subframe==0) && + (prb>((frame_parms->N_RB_DL>>1)-3)) && + (prb<((frame_parms->N_RB_DL>>1)+3)) && + (l>=(nsymb>>1)) && + (l<((nsymb>>1) + 4))) { + rb_alloc_ind = 0; + // printf("symbol %d / rb %d: skipping PBCH REs\n",symbol,prb); + } + + //SSS + + if (((subframe==0)||(subframe==5)) && + (prb>((frame_parms->N_RB_DL>>1)-3)) && + (prb<((frame_parms->N_RB_DL>>1)+3)) && + (l==sss_symb) ) { + rb_alloc_ind = 0; + // printf("symbol %d / rb %d: skipping SSS REs\n",symbol,prb); + } + + + + //PSS in subframe 0/5 if FDD + if (frame_parms->frame_type == FDD) { //FDD + if (((subframe==0)||(subframe==5)) && + (prb>((frame_parms->N_RB_DL>>1)-3)) && + (prb<((frame_parms->N_RB_DL>>1)+3)) && + (l==pss_symb) ) { + rb_alloc_ind = 0; + // printf("symbol %d / rb %d: skipping PSS REs\n",symbol,prb); + } + } + + if ((frame_parms->frame_type == TDD) && + (subframe==6)) { //TDD Subframe 6 + if ((prb>=((frame_parms->N_RB_DL>>1)-3)) && + (prb<=((frame_parms->N_RB_DL>>1)+3)) && + (l==pss_symb) ) { + rb_alloc_ind = 0; + } + } + + if (rb_alloc_ind==1) { // PRB is allocated + if ((frame_parms->N_RB_DL&1) == 0) { // even number of RBs + + prb_off = 12*prb; + prb_off2 = 1+(12*(prb-(frame_parms->N_RB_DL>>1))); + dl_ch0p = dl_ch0+(12*prb); + dl_ch1p = dl_ch1+(12*prb); + if (prb<(frame_parms->N_RB_DL>>1)){ + rxF = &rxdataF[aarx][prb_off+ + frame_parms->first_carrier_offset + + (symbol*(frame_parms->ofdm_symbol_size))]; + } + else { + rxF = &rxdataF[aarx][prb_off2+ + (symbol*(frame_parms->ofdm_symbol_size))]; + } + *pmi_loc = (pmi>>((prb>>2)<<1))&3; pmi_loc++; - - + + if (pilots == 0) { - - memcpy(dl_ch0_ext,dl_ch0,12*sizeof(int)); - memcpy(dl_ch1_ext,dl_ch1,12*sizeof(int)); - /* - printf("rb %d\n",rb); - for (i=0;i<12;i++) - printf("(%d %d)",((short *)dl_ch)[i<<1],((short*)dl_ch)[1+(i<<1)]); - printf("\n");*/ - - for (i=0; i<12; i++) { - rxF_ext[i]=rxF[i]; - // printf("%d : (%d,%d)\n",(rxF+(2*i)-&rxdataF[(aatx<<1)+aarx][( (symbol*(frame_parms->ofdm_symbol_size)))*2])/2, - // ((short*)&rxF[i<<1])[0],((short*)&rxF[i<<1])[0]); - } - - dl_ch0_ext+=12; - dl_ch1_ext+=12; - rxF_ext+=12; - } else { + + memcpy(dl_ch0_ext,dl_ch0p,12*sizeof(int)); + memcpy(dl_ch1_ext,dl_ch1p,12*sizeof(int)); + memcpy(rxF_ext,rxF,12*sizeof(int)); + dl_ch0_ext +=12; + dl_ch1_ext +=12; + rxF_ext +=12; + } else { // pilots==1 j=0; - for (i=0; i<12; i++) { if ((i!=frame_parms->nushift) && (i!=frame_parms->nushift+3) && @@ -3807,483 +3940,220 @@ unsigned short dlsch_extract_rbs_dual(int **rxdataF, (i!=((frame_parms->nushift+9)%12))) { rxF_ext[j]=rxF[i]; // printf("extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[j],*(1+(short*)&rxF_ext[j])); - dl_ch0_ext[j]=dl_ch0[i]; - dl_ch1_ext[j++]=dl_ch1[i]; + dl_ch0_ext[j]=dl_ch0p[i]; + dl_ch1_ext[j++]=dl_ch1p[i]; } } - - dl_ch0_ext+=8; - dl_ch1_ext+=8; - rxF_ext+=8; + dl_ch0_ext+=8; + dl_ch1_ext+=8; + rxF_ext+=8; } // pilots==1 nb_rb++; - } + } else { // Odd number of RBs - dl_ch0+=12; - dl_ch1+=12; - rxF+=12; - } - else { // Odd number of RBs - for (rb=0; rbN_RB_DL>>1; rb++) { - skip_half=0; + skip_half=0; - if (rb < 32) - rb_alloc_ind = (rb_alloc[0]>>rb) & 1; - else if (rb < 64) - rb_alloc_ind = (rb_alloc[1]>>(rb-32)) & 1; - else if (rb < 96) - rb_alloc_ind = (rb_alloc[2]>>(rb-64)) & 1; - else if (rb < 100) - rb_alloc_ind = (rb_alloc[3]>>(rb-96)) & 1; - else - rb_alloc_ind = 0; + //Check if we have to drop half a PRB due to PSS/SSS/PBCH + // skip_half == 0 means full PRB + // skip_half == 1 means first half is used (leftmost half-PRB from PSS/SSS/PBCH) + // skip_half == 2 means second half is used (rightmost half-PRB from PSS/SSS/PBCH) + //PBCH subframe 0, symbols nsymb>>1 ... nsymb>>1 + 3 + if ((subframe==0) && + (prb==((frame_parms->N_RB_DL>>1)-3)) && + (l>=(nsymb>>1)) && + (l<((nsymb>>1) + 4))) + skip_half=1; + else if ((subframe==0) && + (prb==((frame_parms->N_RB_DL>>1)+3)) && + (l>=(nsymb>>1)) && + (l<((nsymb>>1) + 4))) + skip_half=2; + + //SSS + if (((subframe==0)||(subframe==5)) && + (prb==((frame_parms->N_RB_DL>>1)-3)) && + (l==sss_symb)) + skip_half=1; + else if (((subframe==0)||(subframe==5)) && + (prb==((frame_parms->N_RB_DL>>1)+3)) && + (l==sss_symb)) + skip_half=2; + + //PSS Subframe 0,5 + if (((frame_parms->frame_type == FDD) && + (((subframe==0)||(subframe==5)))) || //FDD Subframes 0,5 + ((frame_parms->frame_type == TDD) && + (((subframe==2) || (subframe==6))))) { //TDD Subframes 2,6 + + if ((prb==((frame_parms->N_RB_DL>>1)-3)) && + (l==pss_symb)) + skip_half=1; + else if (((subframe==0)||(subframe==5)) && + (prb==((frame_parms->N_RB_DL>>1)+3)) && + (l==pss_symb)) + skip_half=2; + } + + + prb_off = 12*prb; + prb_off2 = 7+(12*(prb-(frame_parms->N_RB_DL>>1)-1)); + dl_ch0p = dl_ch0+(12*prb); + dl_ch1p = dl_ch1+(12*prb); + + if (prb<=(frame_parms->N_RB_DL>>1)){ + rxF = &rxdataF[aarx][prb_off+ + frame_parms->first_carrier_offset + + (symbol*(frame_parms->ofdm_symbol_size))]; + } + else { + rxF = &rxdataF[aarx][prb_off2+ + (symbol*(frame_parms->ofdm_symbol_size))]; + } + // printf("symbol %d / rb %d: alloc %d skip_half %d (rxF %p, rxF_ext %p) prb_off (%d,%d)\n",symbol,prb,rb_alloc_ind,skip_half,rxF,rxF_ext,prb_off,prb_off2); - - // PBCH - if ((subframe==0) && (rb>((frame_parms->N_RB_DL>>1)-3)) && (rb<((frame_parms->N_RB_DL>>1)+3)) && (l>=(nsymb>>1)) && (l<((nsymb>>1) + 4))) { - rb_alloc_ind = 0; - } - - //PBCH subframe 0, symbols nsymb>>1 ... nsymb>>1 + 3 - if ((subframe==0) && (rb==((frame_parms->N_RB_DL>>1)-3)) && (l>=(nsymb>>1)) && (l<((nsymb>>1) + 4))) - skip_half=1; - else if ((subframe==0) && (rb==((frame_parms->N_RB_DL>>1)+3)) && (l>=(nsymb>>1)) && (l<((nsymb>>1) + 4))) - skip_half=2; - - //SSS - - if (((subframe==0)||(subframe==5)) && - (rb>((frame_parms->N_RB_DL>>1)-3)) && - (rb<((frame_parms->N_RB_DL>>1)+3)) && - (l==sss_symb) ) { - rb_alloc_ind = 0; - } - - //SSS - if (((subframe==0)||(subframe==5)) && - (rb==((frame_parms->N_RB_DL>>1)-3)) && - (l==sss_symb)) - skip_half=1; - else if (((subframe==0)||(subframe==5)) && - (rb==((frame_parms->N_RB_DL>>1)+3)) && - (l==sss_symb)) - skip_half=2; - - //PSS in subframe 0/5 if FDD - if (frame_parms->frame_type == FDD) { //FDD - if (((subframe==0)||(subframe==5)) && (rb>((frame_parms->N_RB_DL>>1)-3)) && (rb<((frame_parms->N_RB_DL>>1)+3)) && (l==pss_symb) ) { - rb_alloc_ind = 0; - } - - if (((subframe==0)||(subframe==5)) && (rb==((frame_parms->N_RB_DL>>1)-3)) && (l==pss_symb)) - skip_half=1; - else if (((subframe==0)||(subframe==5)) && (rb==((frame_parms->N_RB_DL>>1)+3)) && (l==pss_symb)) - skip_half=2; - } - - if ((frame_parms->frame_type == TDD) && - (subframe==6)) { //TDD Subframe 6 - if ((rb>((frame_parms->N_RB_DL>>1)-3)) && (rb<((frame_parms->N_RB_DL>>1)+3)) && (l==pss_symb) ) { - rb_alloc_ind = 0; - } - - if ((rb==((frame_parms->N_RB_DL>>1)-3)) && (l==pss_symb)) - skip_half=1; - else if ((rb==((frame_parms->N_RB_DL>>1)+3)) && (l==pss_symb)) - skip_half=2; - } - - // printf("rb %d: alloc %d skip_half %d (rxF %p, rxF_ext %p)\n",rb,rb_alloc_ind,skip_half,rxF,rxF_ext); - - if (rb_alloc_ind==1) { - - *pmi_loc = (pmi>>((rb>>2)<<1))&3; + *pmi_loc = (pmi>>((prb>>2)<<1))&3; // printf("symbol_mod %d (pilots %d) rb %d, sb %d, pmi %d (pmi_loc %p,rxF %p, ch00 %p, ch01 %p, rxF_ext %p dl_ch0_ext %p dl_ch1_ext %p)\n",symbol_mod,pilots,rb,rb>>2,*pmi_loc,pmi_loc,rxF,dl_ch0, dl_ch1, rxF_ext,dl_ch0_ext,dl_ch1_ext); pmi_loc++; - if (pilots==0) { - if (skip_half==1) { - memcpy(dl_ch0_ext,dl_ch0,6*sizeof(int)); - memcpy(dl_ch1_ext,dl_ch1,6*sizeof(int)); - - for (i=0; i<6; i++) - rxF_ext[i]=rxF[i]; - - dl_ch0_ext+=6; - dl_ch1_ext+=6; - rxF_ext+=6; - } else if (skip_half==2) { - memcpy(dl_ch0_ext,dl_ch0+6,6*sizeof(int)); - memcpy(dl_ch1_ext,dl_ch1+6,6*sizeof(int)); - - for (i=0; i<6; i++) - rxF_ext[i]=rxF[(i+6)]; - - dl_ch0_ext+=6; - dl_ch1_ext+=6; - rxF_ext+=6; - } else { - memcpy(dl_ch0_ext,dl_ch0,12*sizeof(int)); - memcpy(dl_ch1_ext,dl_ch1,12*sizeof(int)); - - for (i=0; i<12; i++) - rxF_ext[i]=rxF[i]; - - dl_ch0_ext+=12; - dl_ch1_ext+=12; - rxF_ext+=12; - } - } else { // pilots=1 - j=0; - - if (skip_half==1) { - for (i=0; i<6; i++) { - if ((i!=frame_parms->nushift) && - (i!=((frame_parms->nushift+3)%6))) { - rxF_ext[j]=rxF[i]; - // printf("(pilots,skip1)extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[j],*(1+(short*)&rxF_ext[j])); - dl_ch0_ext[j]=dl_ch0[i]; - dl_ch1_ext[j++]=dl_ch1[i]; - } - } - - dl_ch0_ext+=4; - dl_ch1_ext+=4; - rxF_ext+=4; - } else if (skip_half==2) { - for (i=0; i<6; i++) { - if ((i!=frame_parms->nushift) && - (i!=((frame_parms->nushift+3)%6))) { - rxF_ext[j]=rxF[(i+6)]; - // printf("(pilots,skip2)extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[j],*(1+(short*)&rxF_ext[j])); - dl_ch0_ext[j]=dl_ch0[i+6]; - dl_ch1_ext[j++]=dl_ch1[i+6]; - } - - dl_ch0_ext+=4; - dl_ch1_ext+=4; - rxF_ext+=4; - } - } else { - for (i=0; i<12; i++) { - if ((i!=frame_parms->nushift) && - (i!=frame_parms->nushift+3) && - (i!=frame_parms->nushift+6) && - (i!=((frame_parms->nushift+9)%12))) { - rxF_ext[j]=rxF[i]; - // printf("(pilots)extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[j],*(1+(short*)&rxF_ext[j])); - - dl_ch0_ext[j] =dl_ch0[i]; - dl_ch1_ext[j++]=dl_ch1[i]; - - // printf("extract rb %d, re %d => ch0 (%d,%d) ch1 (%d,%d)\n",rb,i, - // *(short *)&dl_ch0_ext[j-1],*(1+(short*)&dl_ch0_ext[j-1]), - // *(short *)&dl_ch1_ext[j-1],*(1+(short*)&dl_ch1_ext[j-1])); - } - } - - dl_ch0_ext+=8; - dl_ch1_ext+=8; - rxF_ext+=8; - } - } - - nb_rb++; - } - - dl_ch0+=12; - dl_ch1+=12; - rxF+=12; - } - - - // Do middle RB (around DC) - if (rb < 32) - rb_alloc_ind = (rb_alloc[0]>>rb) & 1; - else if (rb < 64) - rb_alloc_ind = (rb_alloc[1]>>(rb-32)) & 1; - else if (rb < 96) - rb_alloc_ind = (rb_alloc[2]>>(rb-64)) & 1; - else if (rb < 100) - rb_alloc_ind = (rb_alloc[0]>>(rb-96)) & 1; - else - rb_alloc_ind = 0; - - - - - - // PBCH - if ((subframe==0) && (rb>((frame_parms->N_RB_DL>>1)-3)) && (rb<((frame_parms->N_RB_DL>>1)+3)) && (l>=(nsymb>>1)) && (l<((nsymb>>1) + 4))) { - rb_alloc_ind = 0; - } - - //SSS - if (((subframe==0)||(subframe==5)) && (rb>((frame_parms->N_RB_DL>>1)-3)) && (rb<((frame_parms->N_RB_DL>>1)+3)) && (l==sss_symb) ) { - rb_alloc_ind = 0; - } - - if (frame_parms->frame_type == FDD) { - //PSS - if (((subframe==0)||(subframe==5)) && (rb>((frame_parms->N_RB_DL>>1)-3)) && (rb<((frame_parms->N_RB_DL>>1)+3)) && (l==pss_symb) ) { - rb_alloc_ind = 0; - } - } - - if ((frame_parms->frame_type == TDD) && - (subframe==6)) { - //PSS - if ((rb>((frame_parms->N_RB_DL>>1)-3)) && (rb<((frame_parms->N_RB_DL>>1)+3)) && (l==pss_symb) ) { - rb_alloc_ind = 0; - } - } - - - if (rb_alloc_ind==1) { - - *pmi_loc = (pmi>>((rb>>2)<<1))&3; - // printf("rb %d, sb %d, pmi %d (pmi_loc %p,rxF %p, ch00 %p, ch01 %p, rxF_ext %p dl_ch0_ext %p dl_ch1_ext %p)\n",rb,rb>>2,*pmi_loc,pmi_loc,rxF,dl_ch0, dl_ch1, rxF_ext,dl_ch0_ext,dl_ch1_ext); - pmi_loc++; - - if (pilots==0) { - for (i=0; i<6; i++) { - dl_ch0_ext[i]=dl_ch0[i]; - dl_ch1_ext[i]=dl_ch1[i]; - rxF_ext[i]=rxF[i]; - } - - rxF = &rxdataF[aarx][((symbol*(frame_parms->ofdm_symbol_size)))]; - - for (; i<12; i++) { - dl_ch0_ext[i]=dl_ch0[i]; - dl_ch1_ext[i]=dl_ch1[i]; - rxF_ext[i]=rxF[(1+i-6)]; - } - - dl_ch0_ext+=12; - dl_ch1_ext+=12; - rxF_ext+=12; - } else { // pilots==1 - j=0; - - for (i=0; i<6; i++) { - if ((i!=frame_parms->nushift) && - (i!=((frame_parms->nushift+3)%6))) { - dl_ch0_ext[j]=dl_ch0[i]; - dl_ch1_ext[j]=dl_ch1[i]; - rxF_ext[j++]=rxF[i]; - // printf("(pilots center)extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[j-1],*(1+(short*)&rxF_ext[j-1])); - // printf("extract rb %d, re %d => ch0 (%d,%d) ch1 (%d,%d)\n",rb,i, - // *(short *)&dl_ch0_ext[j-1],*(1+(short*)&dl_ch0_ext[j-1]), - // *(short *)&dl_ch1_ext[j-1],*(1+(short*)&dl_ch1_ext[j-1])); - } - } - - rxF = &rxdataF[aarx][symbol*(frame_parms->ofdm_symbol_size)]; - - for (; i<12; i++) { - if ((i!=((frame_parms->nushift+6)%12)) && - (i!=((frame_parms->nushift+9)%12))) { - dl_ch0_ext[j]=dl_ch0[i]; - dl_ch1_ext[j]=dl_ch1[i]; - rxF_ext[j++]=rxF[(1+i-6)]; - } - } - - dl_ch0_ext+=8; - dl_ch1_ext+=8; - rxF_ext+=8; - } - - nb_rb++; - } else { - rxF = &rxdataF[aarx][((symbol*(frame_parms->ofdm_symbol_size)))]; - } - - dl_ch0+=12; - dl_ch1+=12; - rxF+=7; - rb++; - - for (; rbN_RB_DL; rb++) { - skip_half=0; - - if (rb < 32) - rb_alloc_ind = (rb_alloc[0]>>rb) & 1; - else if (rb < 64) - rb_alloc_ind = (rb_alloc[1]>>(rb-32)) & 1; - else if (rb < 96) - rb_alloc_ind = (rb_alloc[2]>>(rb-64)) & 1; - else if (rb < 100) - rb_alloc_ind = (rb_alloc[3]>>(rb-96)) & 1; - else - rb_alloc_ind = 0; - - - // PBCH - if ((subframe==0) && (rb>((frame_parms->N_RB_DL>>1)-3)) && (rb<((frame_parms->N_RB_DL>>1)+3)) && (l>=(nsymb>>1)) && (l<((nsymb>>1) + 4))) { - rb_alloc_ind = 0; - } - - //PBCH subframe 0, symbols nsymb>>1 ... nsymb>>1 + 3 - if ((subframe==0) && (rb==((frame_parms->N_RB_DL>>1)-3)) && (l>=(nsymb>>1)) && (l<((nsymb>>1) + 4))) - skip_half=1; - else if ((subframe==0) && (rb==((frame_parms->N_RB_DL>>1)+3)) && (l>=(nsymb>>1)) && (l<((nsymb>>1) + 4))) - skip_half=2; - - //SSS - if (((subframe==0)||(subframe==5)) && (rb>((frame_parms->N_RB_DL>>1)-3)) && (rb<((frame_parms->N_RB_DL>>1)+3)) && (l==sss_symb) ) { - rb_alloc_ind = 0; - } - - //SSS - if (((subframe==0)||(subframe==5)) && - (rb==((frame_parms->N_RB_DL>>1)-3)) && - (l==sss_symb)) - skip_half=1; - else if (((subframe==0)||(subframe==5)) && - (rb==((frame_parms->N_RB_DL>>1)+3)) && - (l==sss_symb)) - skip_half=2; - - if (frame_parms->frame_type == FDD) { - //PSS - if (((subframe==0)||(subframe==5)) && (rb>((frame_parms->N_RB_DL>>1)-3)) && (rb<((frame_parms->N_RB_DL>>1)+3)) && (l==pss_symb) ) { - rb_alloc_ind = 0; - - } - - if (((subframe==0)||(subframe==5)) && (rb==((frame_parms->N_RB_DL>>1)-3)) && (l==pss_symb)) - skip_half=1; - else if (((subframe==0)||(subframe==5)) && (rb==((frame_parms->N_RB_DL>>1)+3)) && (l==pss_symb)) - skip_half=2; - } - - if ((frame_parms->frame_type == TDD) && - (subframe==6)) { - //PSS - if ((rb>((frame_parms->N_RB_DL>>1)-3)) && (rb<((frame_parms->N_RB_DL>>1)+3)) && (l==pss_symb) ) { - rb_alloc_ind = 0; - } - - if ((rb==((frame_parms->N_RB_DL>>1)-3)) && (l==pss_symb)) - skip_half=1; - else if ((rb==((frame_parms->N_RB_DL>>1)+3)) && (l==pss_symb)) - skip_half=2; - } - - if (rb_alloc_ind==1) { - - *pmi_loc = (pmi>>((rb>>2)<<1))&3; - // printf("rb %d, sb %d, pmi %d (pmi_loc %p,rxF %p, ch00 %p, ch01 %p, rxF_ext %p dl_ch0_ext %p dl_ch1_ext %p)\n",rb,rb>>2,*pmi_loc,pmi_loc,rxF,dl_ch0, dl_ch1, rxF_ext,dl_ch0_ext,dl_ch1_ext); - - pmi_loc++; - - if (pilots==0) { - if (skip_half==1) { - memcpy(dl_ch0_ext,dl_ch0,6*sizeof(int)); - memcpy(dl_ch1_ext,dl_ch1,6*sizeof(int)); - - for (i=0; i<6; i++) - rxF_ext[i]=rxF[i]; - - dl_ch0_ext+=6; - dl_ch1_ext+=6; - rxF_ext+=6; - - } else if (skip_half==2) { - memcpy(dl_ch0_ext,dl_ch0+6,6*sizeof(int)); - memcpy(dl_ch1_ext,dl_ch1+6,6*sizeof(int)); - - for (i=0; i<6; i++) - rxF_ext[i]=rxF[(i+6)]; - - dl_ch0_ext+=6; - dl_ch1_ext+=6; - rxF_ext+=6; - - } else { - memcpy(dl_ch0_ext,dl_ch0,12*sizeof(int)); - memcpy(dl_ch1_ext,dl_ch1,12*sizeof(int)); - - for (i=0; i<12; i++) - rxF_ext[i]=rxF[i]; - - dl_ch0_ext+=12; - dl_ch1_ext+=12; - rxF_ext+=12; - } - } else { - j=0; - - if (skip_half==1) { - for (i=0; i<6; i++) { - if ((i!=(frame_parms->nushift)) && - (i!=((frame_parms->nushift+3)%6))) { - rxF_ext[j]=rxF[i]; - // printf("(skip1,pilots)extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[j],*(1+(short*)&rxF_ext[j])); - dl_ch0_ext[j]=dl_ch0[i]; - dl_ch1_ext[j++]=dl_ch1[i]; - } - } - - dl_ch0_ext+=4; - dl_ch1_ext+=4; - rxF_ext+=4; - } else if (skip_half==2) { - for (i=0; i<6; i++) { - if ((i!=(frame_parms->nushift)) && - (i!=((frame_parms->nushift+3)%6))) { - rxF_ext[j]=rxF[(i+6)]; - // printf("(skip2,pilots)extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[j],*(1+(short*)&rxF_ext[j])); - dl_ch0_ext[j]=dl_ch0[i+6]; - dl_ch1_ext[j++]=dl_ch1[i+6]; - } - } - - dl_ch0_ext+=4; - dl_ch1_ext+=4; - rxF_ext+=4; - } else { - for (i=0; i<12; i++) { - if ((i!=frame_parms->nushift) && - (i!=frame_parms->nushift+3) && - (i!=frame_parms->nushift+6) && - (i!=((frame_parms->nushift+9)%12))) { - rxF_ext[j]=rxF[i]; - // printf("(pilots)extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[j],*(1+(short*)&rxF_ext[j])); - dl_ch0_ext[j]=dl_ch0[i]; - dl_ch1_ext[j++]=dl_ch1[i]; - // printf("extract rb %d, re %d => ch0 (%d,%d) ch1 (%d,%d)\n",rb,i, - // *(short *)&dl_ch0_ext[j-1],*(1+(short*)&dl_ch0_ext[j-1]), - // *(short *)&dl_ch1_ext[j-1],*(1+(short*)&dl_ch1_ext[j-1])); - } - } - - dl_ch0_ext+=8; - dl_ch1_ext+=8; - rxF_ext+=8; - - } - } - - nb_rb++; - } - - dl_ch0+=12; - dl_ch1+=12; - rxF+=12; - } - } - } - - - _mm_empty(); - _m_empty(); + if (prb != (frame_parms->N_RB_DL>>1)) { // This PRB is not around DC + if (pilots==0) { + if (skip_half==1) { + memcpy(dl_ch0_ext,dl_ch0p,6*sizeof(int32_t)); + memcpy(dl_ch1_ext,dl_ch1p,6*sizeof(int32_t)); + memcpy(rxF_ext,rxF,6*sizeof(int32_t)); + dl_ch0_ext+=6; + dl_ch1_ext+=6; + rxF_ext+=6; + } else if (skip_half==2) { + memcpy(dl_ch0_ext,dl_ch0p+6,6*sizeof(int32_t)); + memcpy(dl_ch1_ext,dl_ch1p+6,6*sizeof(int32_t)); + memcpy(rxF_ext,rxF+6,6*sizeof(int32_t)); + dl_ch0_ext+=6; + dl_ch1_ext+=6; + rxF_ext+=6; + } else { // skip_half==0 + memcpy(dl_ch0_ext,dl_ch0p,12*sizeof(int32_t)); + memcpy(dl_ch1_ext,dl_ch1p,12*sizeof(int32_t)); + memcpy(rxF_ext,rxF,12*sizeof(int32_t)); + for (i=0;i<12;i++) + // printf("extract rb %d, re %d => (%d,%d)\n",prb,i,*(short *)&rxF_ext[i],*(1+(short*)&rxF_ext[i])); + dl_ch0_ext+=12; + dl_ch1_ext+=12; + rxF_ext+=12; + } + } else { // pilots=1 + j=0; + + if (skip_half==1) { + for (i=0; i<6; i++) { + if ((i!=frame_parms->nushift) && + (i!=((frame_parms->nushift+3)%6))) { + rxF_ext[j]=rxF[i]; + // printf("(pilots,skip1)extract rb %d, re %d => (%d,%d)\n",prb,i,*(short *)&rxF_ext[j],*(1+(short*)&rxF_ext[j])); + dl_ch0_ext[j]=dl_ch0p[i]; + dl_ch1_ext[j++]=dl_ch1p[i]; + } + } + dl_ch0_ext+=4; + dl_ch1_ext+=4; + rxF_ext+=4; + } else if (skip_half==2) { + for (i=0; i<6; i++) { + if ((i!=frame_parms->nushift) && + (i!=((frame_parms->nushift+3)%6))) { + rxF_ext[j]=rxF[(i+6)]; + // printf("(pilots,skip2)extract rb %d, re %d => (%d,%d)\n",prb,i,*(short *)&rxF_ext[j],*(1+(short*)&rxF_ext[j])); + dl_ch0_ext[j]=dl_ch0p[i+6]; + dl_ch1_ext[j++]=dl_ch1p[i+6]; + } + + dl_ch0_ext+=4; + dl_ch1_ext+=4; + rxF_ext+=4; + } + } else { //skip_half==0 + for (i=0; i<12; i++) { + if ((i!=frame_parms->nushift) && + (i!=frame_parms->nushift+3) && + (i!=frame_parms->nushift+6) && + (i!=((frame_parms->nushift+9)%12))) { + rxF_ext[j]=rxF[i]; + // printf("(pilots)extract rb %d, re %d => (%d,%d)\n",prb,i,*(short *)&rxF_ext[j],*(1+(short*)&rxF_ext[j])); + dl_ch0_ext[j] =dl_ch0p[i]; + dl_ch1_ext[j++]=dl_ch1p[i]; + } + } + dl_ch0_ext+=8; + dl_ch1_ext+=8; + rxF_ext+=8; + } //skip_half==0 + } //pilots==1 + nb_rb++; + } else { // Do middle RB (around DC) + + if (pilots==0) { + memcpy(dl_ch0_ext,dl_ch0p,6*sizeof(int32_t)); + memcpy(dl_ch1_ext,dl_ch1p,6*sizeof(int32_t)); + memcpy(rxF_ext,rxF,6*sizeof(int32_t)); + /* + for (i=0; i<6; i++) { + printf("extract rb %d, re %d => (%d,%d)\n",prb,i,*(short *)&rxF_ext[i],*(1+(short*)&rxF_ext[i])); + }*/ + rxF_ext+=6; + dl_ch0_ext+=6; + dl_ch1_ext+=6; + dl_ch0p+=6; + dl_ch1p+=6; + + rxF = &rxdataF[aarx][((symbol*(frame_parms->ofdm_symbol_size)))]; + + memcpy(dl_ch0_ext,dl_ch0p,6*sizeof(int32_t)); + memcpy(dl_ch1_ext,dl_ch1p,6*sizeof(int32_t)); + memcpy(rxF_ext,rxF,6*sizeof(int32_t)); + /*for (i=0; i<6; i++) { + printf("extract rb %d, re %d => (%d,%d)\n",prb,i,*(short *)&rxF_ext[i],*(1+(short*)&rxF_ext[i])); + }*/ + rxF_ext+=6; + dl_ch0_ext+=6; + dl_ch1_ext+=6; + } else { // pilots==1 + j=0; + + for (i=0; i<6; i++) { + if ((i!=frame_parms->nushift) && + (i!=((frame_parms->nushift+3)%6))) { + dl_ch0_ext[j]=dl_ch0p[i]; + dl_ch1_ext[j]=dl_ch1p[i]; + rxF_ext[j++]=rxF[i]; + //printf("(pilots)extract rb %d, re %d => (%d,%d)\n",prb,i,*(short *)&rxF[i],*(1+(short*)&rxF[i])); + } + } + rxF = &rxdataF[aarx][symbol*(frame_parms->ofdm_symbol_size)]; + + for (; i<12; i++) { + if ((i!=((frame_parms->nushift+6)%12)) && + (i!=((frame_parms->nushift+9)%12))) { + dl_ch0_ext[j]=dl_ch0p[i]; + dl_ch1_ext[j]=dl_ch1p[i]; + rxF_ext[j++]=rxF[(1+i-6)]; + //printf("(pilots)extract rb %d, re %d => (%d,%d)\n",prb,i,*(short *)&rxF[1+i-6],*(1+(short*)&rxF[1+i-6])); + } + } + + dl_ch0_ext+=8; + dl_ch1_ext+=8; + rxF_ext+=8; + } //pilots==1 + nb_rb++; + } // if Middle PRB + } // if odd PRB + } // if rballoc==1 + } // for prb + } // for aarx return(nb_rb/frame_parms->nb_antennas_rx); } @@ -5089,7 +4959,6 @@ void dump_dlsch2(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint16_t coded_bits_per sprintf(fname,"dlsch%d_rxF_r%d_comp0.m",eNB_id,round); sprintf(vname,"dl%d_rxF_r%d_comp0",eNB_id,round); write_output(fname,vname,phy_vars_ue->lte_ue_pdsch_vars[eNB_id]->rxdataF_comp0[0],12*N_RB_DL*nsymb,1,1); - if (phy_vars_ue->lte_frame_parms.nb_antennas_tx_eNB == 2) { sprintf(fname,"dlsch%d_rxF_r%d_comp1.m",eNB_id,round); sprintf(vname,"dl%d_rxF_r%d_comp1",eNB_id,round); @@ -5120,7 +4989,7 @@ void print_bytes(char *s,__m128i *x) printf("%s : %d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d\n",s, tempb[0],tempb[1],tempb[2],tempb[3],tempb[4],tempb[5],tempb[6],tempb[7], tempb[8],tempb[9],tempb[10],tempb[11],tempb[12],tempb[13],tempb[14],tempb[15] - ); + ); } diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_llr_computation.c b/openair1/PHY/LTE_TRANSPORT/dlsch_llr_computation.c index 551043ea96..bf81aaafa9 100644 --- a/openair1/PHY/LTE_TRANSPORT/dlsch_llr_computation.c +++ b/openair1/PHY/LTE_TRANSPORT/dlsch_llr_computation.c @@ -26,18 +26,18 @@ Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - *******************************************************************************/ +*******************************************************************************/ /*! \file PHY/LTE_TRANSPORT/dlsch_llr_computation.c -* \brief Top-level routines for LLR computation of the PDSCH physical channel from 36-211, V8.6 2009-03 -* \author R. Knopp, F. Kaltenberger,A. Bhamri, S. Aubert, S. Wagner -* \date 2011 -* \version 0.1 -* \company Eurecom -* \email: knopp@eurecom.fr,florian.kaltenberger@eurecom.fr,ankit.bhamri@eurecom.fr,sebastien.aubert@eurecom.fr, sebastian.wagner@eurecom.fr -* \note -* \warning -*/ + * \brief Top-level routines for LLR computation of the PDSCH physical channel from 36-211, V8.6 2009-03 + * \author R. Knopp, F. Kaltenberger,A. Bhamri, S. Aubert, S. Wagner + * \date 2011 + * \version 0.1 + * \company Eurecom + * \email: knopp@eurecom.fr,florian.kaltenberger@eurecom.fr,ankit.bhamri@eurecom.fr,sebastien.aubert@eurecom.fr, sebastian.wagner@eurecom.fr + * \note + * \warning + */ #include "PHY/defs.h" #include "PHY/extern.h" @@ -45,567 +45,563 @@ #include "extern.h" #include "PHY/sse_intrin.h" -#ifndef USER_MODE -#define NOCYGWIN_STATIC static -#else -#define NOCYGWIN_STATIC -#endif +int16_t zero[8] __attribute__ ((aligned(16))) = {0,0,0,0,0,0,0,0}; +int16_t ones[8] __attribute__ ((aligned(16))) = {0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff}; +#if defined(__x86_64__) || defined(__i386__) +__m128i rho_rpi __attribute__ ((aligned(16))); +__m128i rho_rmi __attribute__ ((aligned(16))); +__m128i rho_rpi_1_1 __attribute__ ((aligned(16))); +__m128i rho_rpi_1_3 __attribute__ ((aligned(16))); +__m128i rho_rpi_1_5 __attribute__ ((aligned(16))); +__m128i rho_rpi_1_7 __attribute__ ((aligned(16))); +__m128i rho_rpi_3_1 __attribute__ ((aligned(16))); +__m128i rho_rpi_3_3 __attribute__ ((aligned(16))); +__m128i rho_rpi_3_5 __attribute__ ((aligned(16))); +__m128i rho_rpi_3_7 __attribute__ ((aligned(16))); +__m128i rho_rpi_5_1 __attribute__ ((aligned(16))); +__m128i rho_rpi_5_3 __attribute__ ((aligned(16))); +__m128i rho_rpi_5_5 __attribute__ ((aligned(16))); +__m128i rho_rpi_5_7 __attribute__ ((aligned(16))); +__m128i rho_rpi_7_1 __attribute__ ((aligned(16))); +__m128i rho_rpi_7_3 __attribute__ ((aligned(16))); +__m128i rho_rpi_7_5 __attribute__ ((aligned(16))); +__m128i rho_rpi_7_7 __attribute__ ((aligned(16))); +__m128i rho_rmi_1_1 __attribute__ ((aligned(16))); +__m128i rho_rmi_1_3 __attribute__ ((aligned(16))); +__m128i rho_rmi_1_5 __attribute__ ((aligned(16))); +__m128i rho_rmi_1_7 __attribute__ ((aligned(16))); +__m128i rho_rmi_3_1 __attribute__ ((aligned(16))); +__m128i rho_rmi_3_3 __attribute__ ((aligned(16))); +__m128i rho_rmi_3_5 __attribute__ ((aligned(16))); +__m128i rho_rmi_3_7 __attribute__ ((aligned(16))); +__m128i rho_rmi_5_1 __attribute__ ((aligned(16))); +__m128i rho_rmi_5_3 __attribute__ ((aligned(16))); +__m128i rho_rmi_5_5 __attribute__ ((aligned(16))); +__m128i rho_rmi_5_7 __attribute__ ((aligned(16))); +__m128i rho_rmi_7_1 __attribute__ ((aligned(16))); +__m128i rho_rmi_7_3 __attribute__ ((aligned(16))); +__m128i rho_rmi_7_5 __attribute__ ((aligned(16))); +__m128i rho_rmi_7_7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC short zero[8] __attribute__ ((aligned(16))) = {0,0,0,0,0,0,0,0}; -NOCYGWIN_STATIC short ones[8] __attribute__ ((aligned(16))) = {0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff}; -NOCYGWIN_STATIC __m128i rho_rpi __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i rho_rmi __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i rho_rpi_1_1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i rho_rpi_1_3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i rho_rpi_1_5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i rho_rpi_1_7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i rho_rpi_3_1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i rho_rpi_3_3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i rho_rpi_3_5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i rho_rpi_3_7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i rho_rpi_5_1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i rho_rpi_5_3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i rho_rpi_5_5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i rho_rpi_5_7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i rho_rpi_7_1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i rho_rpi_7_3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i rho_rpi_7_5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i rho_rpi_7_7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i rho_rmi_1_1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i rho_rmi_1_3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i rho_rmi_1_5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i rho_rmi_1_7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i rho_rmi_3_1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i rho_rmi_3_3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i rho_rmi_3_5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i rho_rmi_3_7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i rho_rmi_5_1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i rho_rmi_5_3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i rho_rmi_5_5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i rho_rmi_5_7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i rho_rmi_7_1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i rho_rmi_7_3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i rho_rmi_7_5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i rho_rmi_7_7 __attribute__ ((aligned(16))); +__m128i psi_r_m7_m7 __attribute__ ((aligned(16))); +__m128i psi_r_m7_m5 __attribute__ ((aligned(16))); +__m128i psi_r_m7_m3 __attribute__ ((aligned(16))); +__m128i psi_r_m7_m1 __attribute__ ((aligned(16))); +__m128i psi_r_m7_p1 __attribute__ ((aligned(16))); +__m128i psi_r_m7_p3 __attribute__ ((aligned(16))); +__m128i psi_r_m7_p5 __attribute__ ((aligned(16))); +__m128i psi_r_m7_p7 __attribute__ ((aligned(16))); +__m128i psi_r_m5_m7 __attribute__ ((aligned(16))); +__m128i psi_r_m5_m5 __attribute__ ((aligned(16))); +__m128i psi_r_m5_m3 __attribute__ ((aligned(16))); +__m128i psi_r_m5_m1 __attribute__ ((aligned(16))); +__m128i psi_r_m5_p1 __attribute__ ((aligned(16))); +__m128i psi_r_m5_p3 __attribute__ ((aligned(16))); +__m128i psi_r_m5_p5 __attribute__ ((aligned(16))); +__m128i psi_r_m5_p7 __attribute__ ((aligned(16))); +__m128i psi_r_m3_m7 __attribute__ ((aligned(16))); +__m128i psi_r_m3_m5 __attribute__ ((aligned(16))); +__m128i psi_r_m3_m3 __attribute__ ((aligned(16))); +__m128i psi_r_m3_m1 __attribute__ ((aligned(16))); +__m128i psi_r_m3_p1 __attribute__ ((aligned(16))); +__m128i psi_r_m3_p3 __attribute__ ((aligned(16))); +__m128i psi_r_m3_p5 __attribute__ ((aligned(16))); +__m128i psi_r_m3_p7 __attribute__ ((aligned(16))); +__m128i psi_r_m1_m7 __attribute__ ((aligned(16))); +__m128i psi_r_m1_m5 __attribute__ ((aligned(16))); +__m128i psi_r_m1_m3 __attribute__ ((aligned(16))); +__m128i psi_r_m1_m1 __attribute__ ((aligned(16))); +__m128i psi_r_m1_p1 __attribute__ ((aligned(16))); +__m128i psi_r_m1_p3 __attribute__ ((aligned(16))); +__m128i psi_r_m1_p5 __attribute__ ((aligned(16))); +__m128i psi_r_m1_p7 __attribute__ ((aligned(16))); +__m128i psi_r_p1_m7 __attribute__ ((aligned(16))); +__m128i psi_r_p1_m5 __attribute__ ((aligned(16))); +__m128i psi_r_p1_m3 __attribute__ ((aligned(16))); +__m128i psi_r_p1_m1 __attribute__ ((aligned(16))); +__m128i psi_r_p1_p1 __attribute__ ((aligned(16))); +__m128i psi_r_p1_p3 __attribute__ ((aligned(16))); +__m128i psi_r_p1_p5 __attribute__ ((aligned(16))); +__m128i psi_r_p1_p7 __attribute__ ((aligned(16))); +__m128i psi_r_p3_m7 __attribute__ ((aligned(16))); +__m128i psi_r_p3_m5 __attribute__ ((aligned(16))); +__m128i psi_r_p3_m3 __attribute__ ((aligned(16))); +__m128i psi_r_p3_m1 __attribute__ ((aligned(16))); +__m128i psi_r_p3_p1 __attribute__ ((aligned(16))); +__m128i psi_r_p3_p3 __attribute__ ((aligned(16))); +__m128i psi_r_p3_p5 __attribute__ ((aligned(16))); +__m128i psi_r_p3_p7 __attribute__ ((aligned(16))); +__m128i psi_r_p5_m7 __attribute__ ((aligned(16))); +__m128i psi_r_p5_m5 __attribute__ ((aligned(16))); +__m128i psi_r_p5_m3 __attribute__ ((aligned(16))); +__m128i psi_r_p5_m1 __attribute__ ((aligned(16))); +__m128i psi_r_p5_p1 __attribute__ ((aligned(16))); +__m128i psi_r_p5_p3 __attribute__ ((aligned(16))); +__m128i psi_r_p5_p5 __attribute__ ((aligned(16))); +__m128i psi_r_p5_p7 __attribute__ ((aligned(16))); +__m128i psi_r_p7_m7 __attribute__ ((aligned(16))); +__m128i psi_r_p7_m5 __attribute__ ((aligned(16))); +__m128i psi_r_p7_m3 __attribute__ ((aligned(16))); +__m128i psi_r_p7_m1 __attribute__ ((aligned(16))); +__m128i psi_r_p7_p1 __attribute__ ((aligned(16))); +__m128i psi_r_p7_p3 __attribute__ ((aligned(16))); +__m128i psi_r_p7_p5 __attribute__ ((aligned(16))); +__m128i psi_r_p7_p7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_r_m7_m7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_r_m7_m5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_r_m7_m3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_r_m7_m1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_r_m7_p1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_r_m7_p3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_r_m7_p5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_r_m7_p7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_r_m5_m7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_r_m5_m5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_r_m5_m3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_r_m5_m1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_r_m5_p1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_r_m5_p3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_r_m5_p5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_r_m5_p7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_r_m3_m7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_r_m3_m5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_r_m3_m3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_r_m3_m1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_r_m3_p1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_r_m3_p3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_r_m3_p5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_r_m3_p7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_r_m1_m7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_r_m1_m5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_r_m1_m3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_r_m1_m1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_r_m1_p1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_r_m1_p3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_r_m1_p5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_r_m1_p7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_r_p1_m7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_r_p1_m5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_r_p1_m3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_r_p1_m1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_r_p1_p1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_r_p1_p3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_r_p1_p5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_r_p1_p7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_r_p3_m7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_r_p3_m5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_r_p3_m3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_r_p3_m1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_r_p3_p1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_r_p3_p3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_r_p3_p5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_r_p3_p7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_r_p5_m7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_r_p5_m5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_r_p5_m3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_r_p5_m1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_r_p5_p1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_r_p5_p3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_r_p5_p5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_r_p5_p7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_r_p7_m7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_r_p7_m5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_r_p7_m3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_r_p7_m1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_r_p7_p1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_r_p7_p3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_r_p7_p5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_r_p7_p7 __attribute__ ((aligned(16))); +__m128i psi_i_m7_m7 __attribute__ ((aligned(16))); +__m128i psi_i_m7_m5 __attribute__ ((aligned(16))); +__m128i psi_i_m7_m3 __attribute__ ((aligned(16))); +__m128i psi_i_m7_m1 __attribute__ ((aligned(16))); +__m128i psi_i_m7_p1 __attribute__ ((aligned(16))); +__m128i psi_i_m7_p3 __attribute__ ((aligned(16))); +__m128i psi_i_m7_p5 __attribute__ ((aligned(16))); +__m128i psi_i_m7_p7 __attribute__ ((aligned(16))); +__m128i psi_i_m5_m7 __attribute__ ((aligned(16))); +__m128i psi_i_m5_m5 __attribute__ ((aligned(16))); +__m128i psi_i_m5_m3 __attribute__ ((aligned(16))); +__m128i psi_i_m5_m1 __attribute__ ((aligned(16))); +__m128i psi_i_m5_p1 __attribute__ ((aligned(16))); +__m128i psi_i_m5_p3 __attribute__ ((aligned(16))); +__m128i psi_i_m5_p5 __attribute__ ((aligned(16))); +__m128i psi_i_m5_p7 __attribute__ ((aligned(16))); +__m128i psi_i_m3_m7 __attribute__ ((aligned(16))); +__m128i psi_i_m3_m5 __attribute__ ((aligned(16))); +__m128i psi_i_m3_m3 __attribute__ ((aligned(16))); +__m128i psi_i_m3_m1 __attribute__ ((aligned(16))); +__m128i psi_i_m3_p1 __attribute__ ((aligned(16))); +__m128i psi_i_m3_p3 __attribute__ ((aligned(16))); +__m128i psi_i_m3_p5 __attribute__ ((aligned(16))); +__m128i psi_i_m3_p7 __attribute__ ((aligned(16))); +__m128i psi_i_m1_m7 __attribute__ ((aligned(16))); +__m128i psi_i_m1_m5 __attribute__ ((aligned(16))); +__m128i psi_i_m1_m3 __attribute__ ((aligned(16))); +__m128i psi_i_m1_m1 __attribute__ ((aligned(16))); +__m128i psi_i_m1_p1 __attribute__ ((aligned(16))); +__m128i psi_i_m1_p3 __attribute__ ((aligned(16))); +__m128i psi_i_m1_p5 __attribute__ ((aligned(16))); +__m128i psi_i_m1_p7 __attribute__ ((aligned(16))); +__m128i psi_i_p1_m7 __attribute__ ((aligned(16))); +__m128i psi_i_p1_m5 __attribute__ ((aligned(16))); +__m128i psi_i_p1_m3 __attribute__ ((aligned(16))); +__m128i psi_i_p1_m1 __attribute__ ((aligned(16))); +__m128i psi_i_p1_p1 __attribute__ ((aligned(16))); +__m128i psi_i_p1_p3 __attribute__ ((aligned(16))); +__m128i psi_i_p1_p5 __attribute__ ((aligned(16))); +__m128i psi_i_p1_p7 __attribute__ ((aligned(16))); +__m128i psi_i_p3_m7 __attribute__ ((aligned(16))); +__m128i psi_i_p3_m5 __attribute__ ((aligned(16))); +__m128i psi_i_p3_m3 __attribute__ ((aligned(16))); +__m128i psi_i_p3_m1 __attribute__ ((aligned(16))); +__m128i psi_i_p3_p1 __attribute__ ((aligned(16))); +__m128i psi_i_p3_p3 __attribute__ ((aligned(16))); +__m128i psi_i_p3_p5 __attribute__ ((aligned(16))); +__m128i psi_i_p3_p7 __attribute__ ((aligned(16))); +__m128i psi_i_p5_m7 __attribute__ ((aligned(16))); +__m128i psi_i_p5_m5 __attribute__ ((aligned(16))); +__m128i psi_i_p5_m3 __attribute__ ((aligned(16))); +__m128i psi_i_p5_m1 __attribute__ ((aligned(16))); +__m128i psi_i_p5_p1 __attribute__ ((aligned(16))); +__m128i psi_i_p5_p3 __attribute__ ((aligned(16))); +__m128i psi_i_p5_p5 __attribute__ ((aligned(16))); +__m128i psi_i_p5_p7 __attribute__ ((aligned(16))); +__m128i psi_i_p7_m7 __attribute__ ((aligned(16))); +__m128i psi_i_p7_m5 __attribute__ ((aligned(16))); +__m128i psi_i_p7_m3 __attribute__ ((aligned(16))); +__m128i psi_i_p7_m1 __attribute__ ((aligned(16))); +__m128i psi_i_p7_p1 __attribute__ ((aligned(16))); +__m128i psi_i_p7_p3 __attribute__ ((aligned(16))); +__m128i psi_i_p7_p5 __attribute__ ((aligned(16))); +__m128i psi_i_p7_p7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_i_m7_m7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_i_m7_m5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_i_m7_m3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_i_m7_m1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_i_m7_p1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_i_m7_p3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_i_m7_p5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_i_m7_p7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_i_m5_m7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_i_m5_m5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_i_m5_m3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_i_m5_m1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_i_m5_p1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_i_m5_p3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_i_m5_p5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_i_m5_p7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_i_m3_m7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_i_m3_m5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_i_m3_m3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_i_m3_m1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_i_m3_p1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_i_m3_p3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_i_m3_p5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_i_m3_p7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_i_m1_m7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_i_m1_m5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_i_m1_m3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_i_m1_m1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_i_m1_p1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_i_m1_p3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_i_m1_p5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_i_m1_p7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_i_p1_m7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_i_p1_m5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_i_p1_m3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_i_p1_m1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_i_p1_p1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_i_p1_p3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_i_p1_p5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_i_p1_p7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_i_p3_m7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_i_p3_m5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_i_p3_m3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_i_p3_m1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_i_p3_p1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_i_p3_p3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_i_p3_p5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_i_p3_p7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_i_p5_m7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_i_p5_m5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_i_p5_m3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_i_p5_m1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_i_p5_p1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_i_p5_p3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_i_p5_p5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_i_p5_p7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_i_p7_m7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_i_p7_m5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_i_p7_m3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_i_p7_m1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_i_p7_p1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_i_p7_p3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_i_p7_p5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_i_p7_p7 __attribute__ ((aligned(16))); +__m128i a_r_m7_m7 __attribute__ ((aligned(16))); +__m128i a_r_m7_m5 __attribute__ ((aligned(16))); +__m128i a_r_m7_m3 __attribute__ ((aligned(16))); +__m128i a_r_m7_m1 __attribute__ ((aligned(16))); +__m128i a_r_m7_p1 __attribute__ ((aligned(16))); +__m128i a_r_m7_p3 __attribute__ ((aligned(16))); +__m128i a_r_m7_p5 __attribute__ ((aligned(16))); +__m128i a_r_m7_p7 __attribute__ ((aligned(16))); +__m128i a_r_m5_m7 __attribute__ ((aligned(16))); +__m128i a_r_m5_m5 __attribute__ ((aligned(16))); +__m128i a_r_m5_m3 __attribute__ ((aligned(16))); +__m128i a_r_m5_m1 __attribute__ ((aligned(16))); +__m128i a_r_m5_p1 __attribute__ ((aligned(16))); +__m128i a_r_m5_p3 __attribute__ ((aligned(16))); +__m128i a_r_m5_p5 __attribute__ ((aligned(16))); +__m128i a_r_m5_p7 __attribute__ ((aligned(16))); +__m128i a_r_m3_m7 __attribute__ ((aligned(16))); +__m128i a_r_m3_m5 __attribute__ ((aligned(16))); +__m128i a_r_m3_m3 __attribute__ ((aligned(16))); +__m128i a_r_m3_m1 __attribute__ ((aligned(16))); +__m128i a_r_m3_p1 __attribute__ ((aligned(16))); +__m128i a_r_m3_p3 __attribute__ ((aligned(16))); +__m128i a_r_m3_p5 __attribute__ ((aligned(16))); +__m128i a_r_m3_p7 __attribute__ ((aligned(16))); +__m128i a_r_m1_m7 __attribute__ ((aligned(16))); +__m128i a_r_m1_m5 __attribute__ ((aligned(16))); +__m128i a_r_m1_m3 __attribute__ ((aligned(16))); +__m128i a_r_m1_m1 __attribute__ ((aligned(16))); +__m128i a_r_m1_p1 __attribute__ ((aligned(16))); +__m128i a_r_m1_p3 __attribute__ ((aligned(16))); +__m128i a_r_m1_p5 __attribute__ ((aligned(16))); +__m128i a_r_m1_p7 __attribute__ ((aligned(16))); +__m128i a_r_p1_m7 __attribute__ ((aligned(16))); +__m128i a_r_p1_m5 __attribute__ ((aligned(16))); +__m128i a_r_p1_m3 __attribute__ ((aligned(16))); +__m128i a_r_p1_m1 __attribute__ ((aligned(16))); +__m128i a_r_p1_p1 __attribute__ ((aligned(16))); +__m128i a_r_p1_p3 __attribute__ ((aligned(16))); +__m128i a_r_p1_p5 __attribute__ ((aligned(16))); +__m128i a_r_p1_p7 __attribute__ ((aligned(16))); +__m128i a_r_p3_m7 __attribute__ ((aligned(16))); +__m128i a_r_p3_m5 __attribute__ ((aligned(16))); +__m128i a_r_p3_m3 __attribute__ ((aligned(16))); +__m128i a_r_p3_m1 __attribute__ ((aligned(16))); +__m128i a_r_p3_p1 __attribute__ ((aligned(16))); +__m128i a_r_p3_p3 __attribute__ ((aligned(16))); +__m128i a_r_p3_p5 __attribute__ ((aligned(16))); +__m128i a_r_p3_p7 __attribute__ ((aligned(16))); +__m128i a_r_p5_m7 __attribute__ ((aligned(16))); +__m128i a_r_p5_m5 __attribute__ ((aligned(16))); +__m128i a_r_p5_m3 __attribute__ ((aligned(16))); +__m128i a_r_p5_m1 __attribute__ ((aligned(16))); +__m128i a_r_p5_p1 __attribute__ ((aligned(16))); +__m128i a_r_p5_p3 __attribute__ ((aligned(16))); +__m128i a_r_p5_p5 __attribute__ ((aligned(16))); +__m128i a_r_p5_p7 __attribute__ ((aligned(16))); +__m128i a_r_p7_m7 __attribute__ ((aligned(16))); +__m128i a_r_p7_m5 __attribute__ ((aligned(16))); +__m128i a_r_p7_m3 __attribute__ ((aligned(16))); +__m128i a_r_p7_m1 __attribute__ ((aligned(16))); +__m128i a_r_p7_p1 __attribute__ ((aligned(16))); +__m128i a_r_p7_p3 __attribute__ ((aligned(16))); +__m128i a_r_p7_p5 __attribute__ ((aligned(16))); +__m128i a_r_p7_p7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_r_m7_m7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_r_m7_m5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_r_m7_m3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_r_m7_m1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_r_m7_p1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_r_m7_p3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_r_m7_p5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_r_m7_p7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_r_m5_m7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_r_m5_m5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_r_m5_m3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_r_m5_m1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_r_m5_p1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_r_m5_p3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_r_m5_p5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_r_m5_p7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_r_m3_m7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_r_m3_m5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_r_m3_m3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_r_m3_m1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_r_m3_p1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_r_m3_p3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_r_m3_p5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_r_m3_p7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_r_m1_m7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_r_m1_m5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_r_m1_m3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_r_m1_m1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_r_m1_p1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_r_m1_p3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_r_m1_p5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_r_m1_p7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_r_p1_m7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_r_p1_m5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_r_p1_m3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_r_p1_m1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_r_p1_p1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_r_p1_p3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_r_p1_p5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_r_p1_p7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_r_p3_m7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_r_p3_m5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_r_p3_m3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_r_p3_m1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_r_p3_p1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_r_p3_p3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_r_p3_p5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_r_p3_p7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_r_p5_m7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_r_p5_m5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_r_p5_m3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_r_p5_m1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_r_p5_p1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_r_p5_p3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_r_p5_p5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_r_p5_p7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_r_p7_m7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_r_p7_m5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_r_p7_m3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_r_p7_m1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_r_p7_p1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_r_p7_p3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_r_p7_p5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_r_p7_p7 __attribute__ ((aligned(16))); +__m128i a_i_m7_m7 __attribute__ ((aligned(16))); +__m128i a_i_m7_m5 __attribute__ ((aligned(16))); +__m128i a_i_m7_m3 __attribute__ ((aligned(16))); +__m128i a_i_m7_m1 __attribute__ ((aligned(16))); +__m128i a_i_m7_p1 __attribute__ ((aligned(16))); +__m128i a_i_m7_p3 __attribute__ ((aligned(16))); +__m128i a_i_m7_p5 __attribute__ ((aligned(16))); +__m128i a_i_m7_p7 __attribute__ ((aligned(16))); +__m128i a_i_m5_m7 __attribute__ ((aligned(16))); +__m128i a_i_m5_m5 __attribute__ ((aligned(16))); +__m128i a_i_m5_m3 __attribute__ ((aligned(16))); +__m128i a_i_m5_m1 __attribute__ ((aligned(16))); +__m128i a_i_m5_p1 __attribute__ ((aligned(16))); +__m128i a_i_m5_p3 __attribute__ ((aligned(16))); +__m128i a_i_m5_p5 __attribute__ ((aligned(16))); +__m128i a_i_m5_p7 __attribute__ ((aligned(16))); +__m128i a_i_m3_m7 __attribute__ ((aligned(16))); +__m128i a_i_m3_m5 __attribute__ ((aligned(16))); +__m128i a_i_m3_m3 __attribute__ ((aligned(16))); +__m128i a_i_m3_m1 __attribute__ ((aligned(16))); +__m128i a_i_m3_p1 __attribute__ ((aligned(16))); +__m128i a_i_m3_p3 __attribute__ ((aligned(16))); +__m128i a_i_m3_p5 __attribute__ ((aligned(16))); +__m128i a_i_m3_p7 __attribute__ ((aligned(16))); +__m128i a_i_m1_m7 __attribute__ ((aligned(16))); +__m128i a_i_m1_m5 __attribute__ ((aligned(16))); +__m128i a_i_m1_m3 __attribute__ ((aligned(16))); +__m128i a_i_m1_m1 __attribute__ ((aligned(16))); +__m128i a_i_m1_p1 __attribute__ ((aligned(16))); +__m128i a_i_m1_p3 __attribute__ ((aligned(16))); +__m128i a_i_m1_p5 __attribute__ ((aligned(16))); +__m128i a_i_m1_p7 __attribute__ ((aligned(16))); +__m128i a_i_p1_m7 __attribute__ ((aligned(16))); +__m128i a_i_p1_m5 __attribute__ ((aligned(16))); +__m128i a_i_p1_m3 __attribute__ ((aligned(16))); +__m128i a_i_p1_m1 __attribute__ ((aligned(16))); +__m128i a_i_p1_p1 __attribute__ ((aligned(16))); +__m128i a_i_p1_p3 __attribute__ ((aligned(16))); +__m128i a_i_p1_p5 __attribute__ ((aligned(16))); +__m128i a_i_p1_p7 __attribute__ ((aligned(16))); +__m128i a_i_p3_m7 __attribute__ ((aligned(16))); +__m128i a_i_p3_m5 __attribute__ ((aligned(16))); +__m128i a_i_p3_m3 __attribute__ ((aligned(16))); +__m128i a_i_p3_m1 __attribute__ ((aligned(16))); +__m128i a_i_p3_p1 __attribute__ ((aligned(16))); +__m128i a_i_p3_p3 __attribute__ ((aligned(16))); +__m128i a_i_p3_p5 __attribute__ ((aligned(16))); +__m128i a_i_p3_p7 __attribute__ ((aligned(16))); +__m128i a_i_p5_m7 __attribute__ ((aligned(16))); +__m128i a_i_p5_m5 __attribute__ ((aligned(16))); +__m128i a_i_p5_m3 __attribute__ ((aligned(16))); +__m128i a_i_p5_m1 __attribute__ ((aligned(16))); +__m128i a_i_p5_p1 __attribute__ ((aligned(16))); +__m128i a_i_p5_p3 __attribute__ ((aligned(16))); +__m128i a_i_p5_p5 __attribute__ ((aligned(16))); +__m128i a_i_p5_p7 __attribute__ ((aligned(16))); +__m128i a_i_p7_m7 __attribute__ ((aligned(16))); +__m128i a_i_p7_m5 __attribute__ ((aligned(16))); +__m128i a_i_p7_m3 __attribute__ ((aligned(16))); +__m128i a_i_p7_m1 __attribute__ ((aligned(16))); +__m128i a_i_p7_p1 __attribute__ ((aligned(16))); +__m128i a_i_p7_p3 __attribute__ ((aligned(16))); +__m128i a_i_p7_p5 __attribute__ ((aligned(16))); +__m128i a_i_p7_p7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_i_m7_m7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_i_m7_m5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_i_m7_m3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_i_m7_m1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_i_m7_p1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_i_m7_p3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_i_m7_p5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_i_m7_p7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_i_m5_m7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_i_m5_m5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_i_m5_m3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_i_m5_m1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_i_m5_p1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_i_m5_p3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_i_m5_p5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_i_m5_p7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_i_m3_m7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_i_m3_m5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_i_m3_m3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_i_m3_m1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_i_m3_p1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_i_m3_p3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_i_m3_p5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_i_m3_p7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_i_m1_m7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_i_m1_m5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_i_m1_m3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_i_m1_m1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_i_m1_p1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_i_m1_p3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_i_m1_p5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_i_m1_p7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_i_p1_m7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_i_p1_m5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_i_p1_m3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_i_p1_m1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_i_p1_p1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_i_p1_p3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_i_p1_p5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_i_p1_p7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_i_p3_m7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_i_p3_m5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_i_p3_m3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_i_p3_m1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_i_p3_p1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_i_p3_p3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_i_p3_p5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_i_p3_p7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_i_p5_m7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_i_p5_m5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_i_p5_m3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_i_p5_m1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_i_p5_p1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_i_p5_p3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_i_p5_p5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_i_p5_p7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_i_p7_m7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_i_p7_m5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_i_p7_m3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_i_p7_m1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_i_p7_p1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_i_p7_p3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_i_p7_p5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_i_p7_p7 __attribute__ ((aligned(16))); +__m128i psi_a_m7_m7 __attribute__ ((aligned(16))); +__m128i psi_a_m7_m5 __attribute__ ((aligned(16))); +__m128i psi_a_m7_m3 __attribute__ ((aligned(16))); +__m128i psi_a_m7_m1 __attribute__ ((aligned(16))); +__m128i psi_a_m7_p1 __attribute__ ((aligned(16))); +__m128i psi_a_m7_p3 __attribute__ ((aligned(16))); +__m128i psi_a_m7_p5 __attribute__ ((aligned(16))); +__m128i psi_a_m7_p7 __attribute__ ((aligned(16))); +__m128i psi_a_m5_m7 __attribute__ ((aligned(16))); +__m128i psi_a_m5_m5 __attribute__ ((aligned(16))); +__m128i psi_a_m5_m3 __attribute__ ((aligned(16))); +__m128i psi_a_m5_m1 __attribute__ ((aligned(16))); +__m128i psi_a_m5_p1 __attribute__ ((aligned(16))); +__m128i psi_a_m5_p3 __attribute__ ((aligned(16))); +__m128i psi_a_m5_p5 __attribute__ ((aligned(16))); +__m128i psi_a_m5_p7 __attribute__ ((aligned(16))); +__m128i psi_a_m3_m7 __attribute__ ((aligned(16))); +__m128i psi_a_m3_m5 __attribute__ ((aligned(16))); +__m128i psi_a_m3_m3 __attribute__ ((aligned(16))); +__m128i psi_a_m3_m1 __attribute__ ((aligned(16))); +__m128i psi_a_m3_p1 __attribute__ ((aligned(16))); +__m128i psi_a_m3_p3 __attribute__ ((aligned(16))); +__m128i psi_a_m3_p5 __attribute__ ((aligned(16))); +__m128i psi_a_m3_p7 __attribute__ ((aligned(16))); +__m128i psi_a_m1_m7 __attribute__ ((aligned(16))); +__m128i psi_a_m1_m5 __attribute__ ((aligned(16))); +__m128i psi_a_m1_m3 __attribute__ ((aligned(16))); +__m128i psi_a_m1_m1 __attribute__ ((aligned(16))); +__m128i psi_a_m1_p1 __attribute__ ((aligned(16))); +__m128i psi_a_m1_p3 __attribute__ ((aligned(16))); +__m128i psi_a_m1_p5 __attribute__ ((aligned(16))); +__m128i psi_a_m1_p7 __attribute__ ((aligned(16))); +__m128i psi_a_p1_m7 __attribute__ ((aligned(16))); +__m128i psi_a_p1_m5 __attribute__ ((aligned(16))); +__m128i psi_a_p1_m3 __attribute__ ((aligned(16))); +__m128i psi_a_p1_m1 __attribute__ ((aligned(16))); +__m128i psi_a_p1_p1 __attribute__ ((aligned(16))); +__m128i psi_a_p1_p3 __attribute__ ((aligned(16))); +__m128i psi_a_p1_p5 __attribute__ ((aligned(16))); +__m128i psi_a_p1_p7 __attribute__ ((aligned(16))); +__m128i psi_a_p3_m7 __attribute__ ((aligned(16))); +__m128i psi_a_p3_m5 __attribute__ ((aligned(16))); +__m128i psi_a_p3_m3 __attribute__ ((aligned(16))); +__m128i psi_a_p3_m1 __attribute__ ((aligned(16))); +__m128i psi_a_p3_p1 __attribute__ ((aligned(16))); +__m128i psi_a_p3_p3 __attribute__ ((aligned(16))); +__m128i psi_a_p3_p5 __attribute__ ((aligned(16))); +__m128i psi_a_p3_p7 __attribute__ ((aligned(16))); +__m128i psi_a_p5_m7 __attribute__ ((aligned(16))); +__m128i psi_a_p5_m5 __attribute__ ((aligned(16))); +__m128i psi_a_p5_m3 __attribute__ ((aligned(16))); +__m128i psi_a_p5_m1 __attribute__ ((aligned(16))); +__m128i psi_a_p5_p1 __attribute__ ((aligned(16))); +__m128i psi_a_p5_p3 __attribute__ ((aligned(16))); +__m128i psi_a_p5_p5 __attribute__ ((aligned(16))); +__m128i psi_a_p5_p7 __attribute__ ((aligned(16))); +__m128i psi_a_p7_m7 __attribute__ ((aligned(16))); +__m128i psi_a_p7_m5 __attribute__ ((aligned(16))); +__m128i psi_a_p7_m3 __attribute__ ((aligned(16))); +__m128i psi_a_p7_m1 __attribute__ ((aligned(16))); +__m128i psi_a_p7_p1 __attribute__ ((aligned(16))); +__m128i psi_a_p7_p3 __attribute__ ((aligned(16))); +__m128i psi_a_p7_p5 __attribute__ ((aligned(16))); +__m128i psi_a_p7_p7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_a_m7_m7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_a_m7_m5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_a_m7_m3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_a_m7_m1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_a_m7_p1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_a_m7_p3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_a_m7_p5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_a_m7_p7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_a_m5_m7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_a_m5_m5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_a_m5_m3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_a_m5_m1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_a_m5_p1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_a_m5_p3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_a_m5_p5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_a_m5_p7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_a_m3_m7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_a_m3_m5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_a_m3_m3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_a_m3_m1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_a_m3_p1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_a_m3_p3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_a_m3_p5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_a_m3_p7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_a_m1_m7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_a_m1_m5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_a_m1_m3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_a_m1_m1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_a_m1_p1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_a_m1_p3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_a_m1_p5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_a_m1_p7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_a_p1_m7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_a_p1_m5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_a_p1_m3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_a_p1_m1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_a_p1_p1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_a_p1_p3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_a_p1_p5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_a_p1_p7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_a_p3_m7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_a_p3_m5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_a_p3_m3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_a_p3_m1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_a_p3_p1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_a_p3_p3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_a_p3_p5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_a_p3_p7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_a_p5_m7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_a_p5_m5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_a_p5_m3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_a_p5_m1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_a_p5_p1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_a_p5_p3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_a_p5_p5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_a_p5_p7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_a_p7_m7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_a_p7_m5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_a_p7_m3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_a_p7_m1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_a_p7_p1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_a_p7_p3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_a_p7_p5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i psi_a_p7_p7 __attribute__ ((aligned(16))); +__m128i a_sq_m7_m7 __attribute__ ((aligned(16))); +__m128i a_sq_m7_m5 __attribute__ ((aligned(16))); +__m128i a_sq_m7_m3 __attribute__ ((aligned(16))); +__m128i a_sq_m7_m1 __attribute__ ((aligned(16))); +__m128i a_sq_m7_p1 __attribute__ ((aligned(16))); +__m128i a_sq_m7_p3 __attribute__ ((aligned(16))); +__m128i a_sq_m7_p5 __attribute__ ((aligned(16))); +__m128i a_sq_m7_p7 __attribute__ ((aligned(16))); +__m128i a_sq_m5_m7 __attribute__ ((aligned(16))); +__m128i a_sq_m5_m5 __attribute__ ((aligned(16))); +__m128i a_sq_m5_m3 __attribute__ ((aligned(16))); +__m128i a_sq_m5_m1 __attribute__ ((aligned(16))); +__m128i a_sq_m5_p1 __attribute__ ((aligned(16))); +__m128i a_sq_m5_p3 __attribute__ ((aligned(16))); +__m128i a_sq_m5_p5 __attribute__ ((aligned(16))); +__m128i a_sq_m5_p7 __attribute__ ((aligned(16))); +__m128i a_sq_m3_m7 __attribute__ ((aligned(16))); +__m128i a_sq_m3_m5 __attribute__ ((aligned(16))); +__m128i a_sq_m3_m3 __attribute__ ((aligned(16))); +__m128i a_sq_m3_m1 __attribute__ ((aligned(16))); +__m128i a_sq_m3_p1 __attribute__ ((aligned(16))); +__m128i a_sq_m3_p3 __attribute__ ((aligned(16))); +__m128i a_sq_m3_p5 __attribute__ ((aligned(16))); +__m128i a_sq_m3_p7 __attribute__ ((aligned(16))); +__m128i a_sq_m1_m7 __attribute__ ((aligned(16))); +__m128i a_sq_m1_m5 __attribute__ ((aligned(16))); +__m128i a_sq_m1_m3 __attribute__ ((aligned(16))); +__m128i a_sq_m1_m1 __attribute__ ((aligned(16))); +__m128i a_sq_m1_p1 __attribute__ ((aligned(16))); +__m128i a_sq_m1_p3 __attribute__ ((aligned(16))); +__m128i a_sq_m1_p5 __attribute__ ((aligned(16))); +__m128i a_sq_m1_p7 __attribute__ ((aligned(16))); +__m128i a_sq_p1_m7 __attribute__ ((aligned(16))); +__m128i a_sq_p1_m5 __attribute__ ((aligned(16))); +__m128i a_sq_p1_m3 __attribute__ ((aligned(16))); +__m128i a_sq_p1_m1 __attribute__ ((aligned(16))); +__m128i a_sq_p1_p1 __attribute__ ((aligned(16))); +__m128i a_sq_p1_p3 __attribute__ ((aligned(16))); +__m128i a_sq_p1_p5 __attribute__ ((aligned(16))); +__m128i a_sq_p1_p7 __attribute__ ((aligned(16))); +__m128i a_sq_p3_m7 __attribute__ ((aligned(16))); +__m128i a_sq_p3_m5 __attribute__ ((aligned(16))); +__m128i a_sq_p3_m3 __attribute__ ((aligned(16))); +__m128i a_sq_p3_m1 __attribute__ ((aligned(16))); +__m128i a_sq_p3_p1 __attribute__ ((aligned(16))); +__m128i a_sq_p3_p3 __attribute__ ((aligned(16))); +__m128i a_sq_p3_p5 __attribute__ ((aligned(16))); +__m128i a_sq_p3_p7 __attribute__ ((aligned(16))); +__m128i a_sq_p5_m7 __attribute__ ((aligned(16))); +__m128i a_sq_p5_m5 __attribute__ ((aligned(16))); +__m128i a_sq_p5_m3 __attribute__ ((aligned(16))); +__m128i a_sq_p5_m1 __attribute__ ((aligned(16))); +__m128i a_sq_p5_p1 __attribute__ ((aligned(16))); +__m128i a_sq_p5_p3 __attribute__ ((aligned(16))); +__m128i a_sq_p5_p5 __attribute__ ((aligned(16))); +__m128i a_sq_p5_p7 __attribute__ ((aligned(16))); +__m128i a_sq_p7_m7 __attribute__ ((aligned(16))); +__m128i a_sq_p7_m5 __attribute__ ((aligned(16))); +__m128i a_sq_p7_m3 __attribute__ ((aligned(16))); +__m128i a_sq_p7_m1 __attribute__ ((aligned(16))); +__m128i a_sq_p7_p1 __attribute__ ((aligned(16))); +__m128i a_sq_p7_p3 __attribute__ ((aligned(16))); +__m128i a_sq_p7_p5 __attribute__ ((aligned(16))); +__m128i a_sq_p7_p7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_sq_m7_m7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_sq_m7_m5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_sq_m7_m3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_sq_m7_m1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_sq_m7_p1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_sq_m7_p3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_sq_m7_p5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_sq_m7_p7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_sq_m5_m7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_sq_m5_m5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_sq_m5_m3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_sq_m5_m1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_sq_m5_p1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_sq_m5_p3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_sq_m5_p5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_sq_m5_p7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_sq_m3_m7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_sq_m3_m5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_sq_m3_m3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_sq_m3_m1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_sq_m3_p1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_sq_m3_p3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_sq_m3_p5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_sq_m3_p7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_sq_m1_m7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_sq_m1_m5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_sq_m1_m3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_sq_m1_m1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_sq_m1_p1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_sq_m1_p3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_sq_m1_p5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_sq_m1_p7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_sq_p1_m7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_sq_p1_m5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_sq_p1_m3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_sq_p1_m1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_sq_p1_p1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_sq_p1_p3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_sq_p1_p5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_sq_p1_p7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_sq_p3_m7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_sq_p3_m5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_sq_p3_m3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_sq_p3_m1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_sq_p3_p1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_sq_p3_p3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_sq_p3_p5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_sq_p3_p7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_sq_p5_m7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_sq_p5_m5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_sq_p5_m3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_sq_p5_m1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_sq_p5_p1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_sq_p5_p3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_sq_p5_p5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_sq_p5_p7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_sq_p7_m7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_sq_p7_m5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_sq_p7_m3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_sq_p7_m1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_sq_p7_p1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_sq_p7_p3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_sq_p7_p5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i a_sq_p7_p7 __attribute__ ((aligned(16))); +__m128i bit_met_m7_m7 __attribute__ ((aligned(16))); +__m128i bit_met_m7_m5 __attribute__ ((aligned(16))); +__m128i bit_met_m7_m3 __attribute__ ((aligned(16))); +__m128i bit_met_m7_m1 __attribute__ ((aligned(16))); +__m128i bit_met_m7_p1 __attribute__ ((aligned(16))); +__m128i bit_met_m7_p3 __attribute__ ((aligned(16))); +__m128i bit_met_m7_p5 __attribute__ ((aligned(16))); +__m128i bit_met_m7_p7 __attribute__ ((aligned(16))); +__m128i bit_met_m5_m7 __attribute__ ((aligned(16))); +__m128i bit_met_m5_m5 __attribute__ ((aligned(16))); +__m128i bit_met_m5_m3 __attribute__ ((aligned(16))); +__m128i bit_met_m5_m1 __attribute__ ((aligned(16))); +__m128i bit_met_m5_p1 __attribute__ ((aligned(16))); +__m128i bit_met_m5_p3 __attribute__ ((aligned(16))); +__m128i bit_met_m5_p5 __attribute__ ((aligned(16))); +__m128i bit_met_m5_p7 __attribute__ ((aligned(16))); +__m128i bit_met_m3_m7 __attribute__ ((aligned(16))); +__m128i bit_met_m3_m5 __attribute__ ((aligned(16))); +__m128i bit_met_m3_m3 __attribute__ ((aligned(16))); +__m128i bit_met_m3_m1 __attribute__ ((aligned(16))); +__m128i bit_met_m3_p1 __attribute__ ((aligned(16))); +__m128i bit_met_m3_p3 __attribute__ ((aligned(16))); +__m128i bit_met_m3_p5 __attribute__ ((aligned(16))); +__m128i bit_met_m3_p7 __attribute__ ((aligned(16))); +__m128i bit_met_m1_m7 __attribute__ ((aligned(16))); +__m128i bit_met_m1_m5 __attribute__ ((aligned(16))); +__m128i bit_met_m1_m3 __attribute__ ((aligned(16))); +__m128i bit_met_m1_m1 __attribute__ ((aligned(16))); +__m128i bit_met_m1_p1 __attribute__ ((aligned(16))); +__m128i bit_met_m1_p3 __attribute__ ((aligned(16))); +__m128i bit_met_m1_p5 __attribute__ ((aligned(16))); +__m128i bit_met_m1_p7 __attribute__ ((aligned(16))); +__m128i bit_met_p1_m7 __attribute__ ((aligned(16))); +__m128i bit_met_p1_m5 __attribute__ ((aligned(16))); +__m128i bit_met_p1_m3 __attribute__ ((aligned(16))); +__m128i bit_met_p1_m1 __attribute__ ((aligned(16))); +__m128i bit_met_p1_p1 __attribute__ ((aligned(16))); +__m128i bit_met_p1_p3 __attribute__ ((aligned(16))); +__m128i bit_met_p1_p5 __attribute__ ((aligned(16))); +__m128i bit_met_p1_p7 __attribute__ ((aligned(16))); +__m128i bit_met_p3_m7 __attribute__ ((aligned(16))); +__m128i bit_met_p3_m5 __attribute__ ((aligned(16))); +__m128i bit_met_p3_m3 __attribute__ ((aligned(16))); +__m128i bit_met_p3_m1 __attribute__ ((aligned(16))); +__m128i bit_met_p3_p1 __attribute__ ((aligned(16))); +__m128i bit_met_p3_p3 __attribute__ ((aligned(16))); +__m128i bit_met_p3_p5 __attribute__ ((aligned(16))); +__m128i bit_met_p3_p7 __attribute__ ((aligned(16))); +__m128i bit_met_p5_m7 __attribute__ ((aligned(16))); +__m128i bit_met_p5_m5 __attribute__ ((aligned(16))); +__m128i bit_met_p5_m3 __attribute__ ((aligned(16))); +__m128i bit_met_p5_m1 __attribute__ ((aligned(16))); +__m128i bit_met_p5_p1 __attribute__ ((aligned(16))); +__m128i bit_met_p5_p3 __attribute__ ((aligned(16))); +__m128i bit_met_p5_p5 __attribute__ ((aligned(16))); +__m128i bit_met_p5_p7 __attribute__ ((aligned(16))); +__m128i bit_met_p7_m7 __attribute__ ((aligned(16))); +__m128i bit_met_p7_m5 __attribute__ ((aligned(16))); +__m128i bit_met_p7_m3 __attribute__ ((aligned(16))); +__m128i bit_met_p7_m1 __attribute__ ((aligned(16))); +__m128i bit_met_p7_p1 __attribute__ ((aligned(16))); +__m128i bit_met_p7_p3 __attribute__ ((aligned(16))); +__m128i bit_met_p7_p5 __attribute__ ((aligned(16))); +__m128i bit_met_p7_p7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i bit_met_m7_m7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i bit_met_m7_m5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i bit_met_m7_m3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i bit_met_m7_m1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i bit_met_m7_p1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i bit_met_m7_p3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i bit_met_m7_p5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i bit_met_m7_p7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i bit_met_m5_m7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i bit_met_m5_m5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i bit_met_m5_m3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i bit_met_m5_m1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i bit_met_m5_p1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i bit_met_m5_p3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i bit_met_m5_p5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i bit_met_m5_p7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i bit_met_m3_m7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i bit_met_m3_m5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i bit_met_m3_m3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i bit_met_m3_m1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i bit_met_m3_p1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i bit_met_m3_p3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i bit_met_m3_p5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i bit_met_m3_p7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i bit_met_m1_m7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i bit_met_m1_m5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i bit_met_m1_m3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i bit_met_m1_m1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i bit_met_m1_p1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i bit_met_m1_p3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i bit_met_m1_p5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i bit_met_m1_p7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i bit_met_p1_m7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i bit_met_p1_m5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i bit_met_p1_m3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i bit_met_p1_m1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i bit_met_p1_p1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i bit_met_p1_p3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i bit_met_p1_p5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i bit_met_p1_p7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i bit_met_p3_m7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i bit_met_p3_m5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i bit_met_p3_m3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i bit_met_p3_m1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i bit_met_p3_p1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i bit_met_p3_p3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i bit_met_p3_p5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i bit_met_p3_p7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i bit_met_p5_m7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i bit_met_p5_m5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i bit_met_p5_m3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i bit_met_p5_m1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i bit_met_p5_p1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i bit_met_p5_p3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i bit_met_p5_p5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i bit_met_p5_p7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i bit_met_p7_m7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i bit_met_p7_m5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i bit_met_p7_m3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i bit_met_p7_m1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i bit_met_p7_p1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i bit_met_p7_p3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i bit_met_p7_p5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i bit_met_p7_p7 __attribute__ ((aligned(16))); +__m128i y0_p_1_1 __attribute__ ((aligned(16))); +__m128i y0_p_1_3 __attribute__ ((aligned(16))); +__m128i y0_p_1_5 __attribute__ ((aligned(16))); +__m128i y0_p_1_7 __attribute__ ((aligned(16))); +__m128i y0_p_3_1 __attribute__ ((aligned(16))); +__m128i y0_p_3_3 __attribute__ ((aligned(16))); +__m128i y0_p_3_5 __attribute__ ((aligned(16))); +__m128i y0_p_3_7 __attribute__ ((aligned(16))); +__m128i y0_p_5_1 __attribute__ ((aligned(16))); +__m128i y0_p_5_3 __attribute__ ((aligned(16))); +__m128i y0_p_5_5 __attribute__ ((aligned(16))); +__m128i y0_p_5_7 __attribute__ ((aligned(16))); +__m128i y0_p_7_1 __attribute__ ((aligned(16))); +__m128i y0_p_7_3 __attribute__ ((aligned(16))); +__m128i y0_p_7_5 __attribute__ ((aligned(16))); +__m128i y0_p_7_7 __attribute__ ((aligned(16))); +__m128i y0_m_1_1 __attribute__ ((aligned(16))); +__m128i y0_m_1_3 __attribute__ ((aligned(16))); +__m128i y0_m_1_5 __attribute__ ((aligned(16))); +__m128i y0_m_1_7 __attribute__ ((aligned(16))); +__m128i y0_m_3_1 __attribute__ ((aligned(16))); +__m128i y0_m_3_3 __attribute__ ((aligned(16))); +__m128i y0_m_3_5 __attribute__ ((aligned(16))); +__m128i y0_m_3_7 __attribute__ ((aligned(16))); +__m128i y0_m_5_1 __attribute__ ((aligned(16))); +__m128i y0_m_5_3 __attribute__ ((aligned(16))); +__m128i y0_m_5_5 __attribute__ ((aligned(16))); +__m128i y0_m_5_7 __attribute__ ((aligned(16))); +__m128i y0_m_7_1 __attribute__ ((aligned(16))); +__m128i y0_m_7_3 __attribute__ ((aligned(16))); +__m128i y0_m_7_5 __attribute__ ((aligned(16))); +__m128i y0_m_7_7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i y0_p_1_1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i y0_p_1_3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i y0_p_1_5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i y0_p_1_7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i y0_p_3_1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i y0_p_3_3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i y0_p_3_5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i y0_p_3_7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i y0_p_5_1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i y0_p_5_3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i y0_p_5_5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i y0_p_5_7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i y0_p_7_1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i y0_p_7_3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i y0_p_7_5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i y0_p_7_7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i y0_m_1_1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i y0_m_1_3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i y0_m_1_5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i y0_m_1_7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i y0_m_3_1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i y0_m_3_3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i y0_m_3_5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i y0_m_3_7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i y0_m_5_1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i y0_m_5_3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i y0_m_5_5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i y0_m_5_7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i y0_m_7_1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i y0_m_7_3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i y0_m_7_5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i y0_m_7_7 __attribute__ ((aligned(16))); +__m128i xmm0 __attribute__ ((aligned(16))); +__m128i xmm1 __attribute__ ((aligned(16))); +__m128i xmm2 __attribute__ ((aligned(16))); +__m128i xmm3 __attribute__ ((aligned(16))); +__m128i xmm4 __attribute__ ((aligned(16))); +__m128i xmm5 __attribute__ ((aligned(16))); +__m128i xmm6 __attribute__ ((aligned(16))); +__m128i xmm7 __attribute__ ((aligned(16))); +__m128i xmm8 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i xmm0 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i xmm1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i xmm2 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i xmm3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i xmm4 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i xmm5 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i xmm6 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i xmm7 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i xmm8 __attribute__ ((aligned(16))); +__m128i y0r __attribute__ ((aligned(16))); +__m128i y0i __attribute__ ((aligned(16))); +__m128i y1r __attribute__ ((aligned(16))); +__m128i y1i __attribute__ ((aligned(16))); +__m128i y2r __attribute__ ((aligned(16))); +__m128i y2i __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i y0r __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i y0i __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i y1r __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i y1i __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i y2r __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i y2i __attribute__ ((aligned(16))); +__m128i logmax_num_re0 __attribute__ ((aligned(16))); +__m128i logmax_num_im0 __attribute__ ((aligned(16))); +__m128i logmax_den_re0 __attribute__ ((aligned(16))); +__m128i logmax_den_im0 __attribute__ ((aligned(16))); +__m128i logmax_num_re1 __attribute__ ((aligned(16))); +__m128i logmax_num_im1 __attribute__ ((aligned(16))); +__m128i logmax_den_re1 __attribute__ ((aligned(16))); +__m128i logmax_den_im1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i logmax_num_re0 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i logmax_num_im0 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i logmax_den_re0 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i logmax_den_im0 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i logmax_num_re1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i logmax_num_im1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i logmax_den_re1 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i logmax_den_im1 __attribute__ ((aligned(16))); +__m128i tmp_result __attribute__ ((aligned(16))); +__m128i tmp_result2 __attribute__ ((aligned(16))); +__m128i tmp_result3 __attribute__ ((aligned(16))); +__m128i tmp_result4 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i tmp_result __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i tmp_result2 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i tmp_result3 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i tmp_result4 __attribute__ ((aligned(16))); //============================================================================================== // Auxiliary Makros @@ -626,6 +622,10 @@ NOCYGWIN_STATIC __m128i tmp_result4 __attribute__ ((aligned(16))); // calculates a_sq = int_ch_mag*(a_r^2 + a_i^2)*scale_factor for 64-QAM #define square_a_64qam_epi16(a_r,a_i,int_ch_mag,scale_factor,a_sq) tmp_result = _mm_mulhi_epi16(a_r,a_r); tmp_result = _mm_slli_epi16(tmp_result,1); tmp_result = _mm_mulhi_epi16(tmp_result,scale_factor); tmp_result = _mm_slli_epi16(tmp_result,3); tmp_result = _mm_mulhi_epi16(tmp_result,int_ch_mag); tmp_result = _mm_slli_epi16(tmp_result,1); tmp_result2 = _mm_mulhi_epi16(a_i,a_i); tmp_result2 = _mm_slli_epi16(tmp_result2,1); tmp_result2 = _mm_mulhi_epi16(tmp_result2,scale_factor); tmp_result2 = _mm_slli_epi16(tmp_result2,3); tmp_result2 = _mm_mulhi_epi16(tmp_result2,int_ch_mag); tmp_result2 = _mm_slli_epi16(tmp_result2,1); a_sq = _mm_adds_epi16(tmp_result,tmp_result2); +#elif defined(__arm__) + +#endif + //============================================================================================== // SINGLE-STREAM //============================================================================================== @@ -635,17 +635,17 @@ NOCYGWIN_STATIC __m128i tmp_result4 __attribute__ ((aligned(16))); //---------------------------------------------------------------------------------------------- int dlsch_qpsk_llr(LTE_DL_FRAME_PARMS *frame_parms, - int **rxdataF_comp, - short *dlsch_llr, - unsigned char symbol, + int32_t **rxdataF_comp, + int16_t *dlsch_llr, + uint8_t symbol, uint8_t first_symbol_flag, uint16_t nb_rb, uint16_t pbch_pss_sss_adjust, - short **llr32p, + int16_t **llr32p, uint8_t beamforming_mode) { - uint32_t *rxF = (uint32_t*)&rxdataF_comp[0][(symbol*frame_parms->N_RB_DL*12)]; + uint32_t *rxF = (uint32_t*)&rxdataF_comp[0][((int32_t)symbol*frame_parms->N_RB_DL*12)]; uint32_t *llr32; int i,len; uint8_t symbol_mod = (symbol >= (7-frame_parms->Ncp))? (symbol-(7-frame_parms->Ncp)) : symbol; @@ -675,17 +675,14 @@ int dlsch_qpsk_llr(LTE_DL_FRAME_PARMS *frame_parms, len = (nb_rb*12) - pbch_pss_sss_adjust; } - // printf("dlsch_qpsk_llr: symbol %d,nb_rb %d, len %d,pbch_pss_sss_adjust %d\n",symbol,nb_rb,len,pbch_pss_sss_adjust); +// printf("dlsch_qpsk_llr: symbol %d,nb_rb %d, len %d,pbch_pss_sss_adjust %d\n",symbol,nb_rb,len,pbch_pss_sss_adjust); for (i=0; iN_RB_DL*12)]; __m128i *ch_mag; __m128i llr128[2]; + uint32_t *llr32; +#elif defined(__arm__) + int16x8_t *rxF = (int16x8_t*)&rxdataF_comp[0][(symbol*frame_parms->N_RB_DL*12)]; + int16x8_t *ch_mag; + int16x8_t xmm0; + int16_t *llr16; +#endif + + int i,len; unsigned char symbol_mod,len_mod4=0; - uint32_t *llr32; +#if defined(__x86_64__) || defined(__i386__) if (first_symbol_flag==1) { llr32 = (uint32_t*)dlsch_llr; } else { llr32 = (uint32_t*)*llr32p; } +#elif defined(__arm__) + if (first_symbol_flag==1) { + llr16 = (int16_t*)dlsch_llr; + } else { + llr16 = (int16_t*)*llr32p; + } +#endif symbol_mod = (symbol>=(7-frame_parms->Ncp)) ? symbol-(7-frame_parms->Ncp) : symbol; +#if defined(__x86_64__) || defined(__i386__) ch_mag = (__m128i*)&dl_ch_mag[0][(symbol*frame_parms->N_RB_DL*12)]; - +#elif defined(__arm__) + ch_mag = (int16x8_t*)&dl_ch_mag[0][(symbol*frame_parms->N_RB_DL*12)]; +#endif if ((symbol_mod==0) || (symbol_mod==(4-frame_parms->Ncp))) { if (frame_parms->mode1_flag==0) len = (nb_rb*8) - (2*pbch_pss_sss_adjust/3); @@ -749,6 +766,7 @@ void dlsch_16qam_llr(LTE_DL_FRAME_PARMS *frame_parms, for (i=0; iN_RB_DL*12)]; __m128i *ch_mag,*ch_magb; +#elif defined(__arm__) + int16x8_t *rxF = (int16x8_t*)&rxdataF_comp[0][(symbol*frame_parms->N_RB_DL*12)]; + int16x8_t *ch_mag,*ch_magb,xmm1,xmm2; +#endif int i,len,len2; unsigned char symbol_mod,len_mod4; short *llr; @@ -801,9 +849,13 @@ void dlsch_64qam_llr(LTE_DL_FRAME_PARMS *frame_parms, symbol_mod = (symbol>=(7-frame_parms->Ncp)) ? symbol-(7-frame_parms->Ncp) : symbol; +#if defined(__x86_64__) || defined(__i386__) ch_mag = (__m128i*)&dl_ch_mag[0][(symbol*frame_parms->N_RB_DL*12)]; ch_magb = (__m128i*)&dl_ch_magb[0][(symbol*frame_parms->N_RB_DL*12)]; - +#elif defined(__arm__) + ch_mag = (int16x8_t*)&dl_ch_mag[0][(symbol*frame_parms->N_RB_DL*12)]; + ch_magb = (int16x8_t*)&dl_ch_magb[0][(symbol*frame_parms->N_RB_DL*12)]; +#endif if ((symbol_mod==0) || (symbol_mod==(4-frame_parms->Ncp))) { if (frame_parms->mode1_flag==0) len = (nb_rb*8) - (2*pbch_pss_sss_adjust/3); @@ -826,62 +878,96 @@ void dlsch_64qam_llr(LTE_DL_FRAME_PARMS *frame_parms, for (i=0; i>2; i+=2) { // in each iteration, we take 8 complex samples - +#if defined(__x86_64__) || defined(__i386__) xmm0 = rho01_128i[i]; // 4 symbols xmm1 = rho01_128i[i+1]; // put (rho_r + rho_i)/2sqrt2 in rho_rpi // put (rho_r - rho_i)/2sqrt2 in rho_rmi + xmm0 = _mm_shufflelo_epi16(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3)); xmm0 = _mm_shufflehi_epi16(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3)); xmm0 = _mm_shuffle_epi32(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3)); @@ -1021,10 +1115,14 @@ void qpsk_qpsk(short *stream0_in, // divide by sqrt(8), no shift needed ONE_OVER_SQRT_8 = Q1.16 rho_rpi = _mm_mulhi_epi16(rho_rpi,ONE_OVER_SQRT_8); rho_rmi = _mm_mulhi_epi16(rho_rmi,ONE_OVER_SQRT_8); +#elif defined(__arm__) + +#endif // Compute LLR for first bit of stream 0 // Compute real and imaginary parts of MF output for stream 0 +#if defined(__x86_64__) || defined(__i386__) xmm0 = stream0_128i_in[i]; xmm1 = stream0_128i_in[i+1]; @@ -1041,8 +1139,12 @@ void qpsk_qpsk(short *stream0_in, y0r_over2 = _mm_srai_epi16(y0r,1); // divide by 2 y0i_over2 = _mm_srai_epi16(y0i,1); // divide by 2 +#elif defined(__arm__) + +#endif // Compute real and imaginary parts of MF output for stream 1 +#if defined(__x86_64__) || defined(__i386__) xmm0 = stream1_128i_in[i]; xmm1 = stream1_128i_in[i+1]; @@ -1132,23 +1234,28 @@ void qpsk_qpsk(short *stream0_in, if (i<((length>>1) - 1)) // false if only 2 REs remain _mm_storeu_si128(&stream0_128i_out[i+1],_mm_unpackhi_epi16(y0r,y0i)); +#elif defined(__x86_64__) + +#endif } +#if defined(__x86_64__) || defined(__i386__) _mm_empty(); _m_empty(); +#endif } int dlsch_qpsk_16qam_llr(LTE_DL_FRAME_PARMS *frame_parms, - int **rxdataF_comp, - int **rxdataF_comp_i, - int **dl_ch_mag_i, //|h_1|^2*(2/sqrt{10}) - int **rho_i, - short *dlsch_llr, - unsigned char symbol, - unsigned char first_symbol_flag, - unsigned short nb_rb, + int32_t **rxdataF_comp, + int32_t **rxdataF_comp_i, + int32_t **dl_ch_mag_i, //|h_1|^2*(2/sqrt{10}) + int32_t **rho_i, + int16_t *dlsch_llr, + uint8_t symbol, + uint8_t first_symbol_flag, + uint16_t nb_rb, uint16_t pbch_pss_sss_adjust, - short **llr16p) + int16_t **llr16p) { int16_t *rxF=(int16_t*)&rxdataF_comp[0][(symbol*frame_parms->N_RB_DL*12)]; @@ -1196,38 +1303,58 @@ int dlsch_qpsk_16qam_llr(LTE_DL_FRAME_PARMS *frame_parms, return(0); } -NOCYGWIN_STATIC __m128i ONE_OVER_SQRT_2 __attribute__((aligned(16))); -NOCYGWIN_STATIC __m128i ONE_OVER_SQRT_10 __attribute__((aligned(16))); -NOCYGWIN_STATIC __m128i THREE_OVER_SQRT_10 __attribute__((aligned(16))); -NOCYGWIN_STATIC __m128i ONE_OVER_SQRT_10_Q15 __attribute__((aligned(16))); -NOCYGWIN_STATIC __m128i SQRT_10_OVER_FOUR __attribute__((aligned(16))); -NOCYGWIN_STATIC __m128i ch_mag_int __attribute__((aligned(16))); - -void qpsk_qam16(short *stream0_in, - short *stream1_in, - short *ch_mag_i, - short *stream0_out, - short *rho01, - int length - ) +/* +#if defined(__x86_64__) || defined(__i386__) +__m128i ONE_OVER_SQRT_2 __attribute__((aligned(16))); +__m128i ONE_OVER_SQRT_10 __attribute__((aligned(16))); +__m128i THREE_OVER_SQRT_10 __attribute__((aligned(16))); +__m128i ONE_OVER_SQRT_10_Q15 __attribute__((aligned(16))); +__m128i SQRT_10_OVER_FOUR __attribute__((aligned(16))); +__m128i ch_mag_int; +#endif +*/ +void qpsk_qam16(int16_t *stream0_in, + int16_t *stream1_in, + int16_t *ch_mag_i, + int16_t *stream0_out, + int16_t *rho01, + int32_t length + ) { - /* - This function computes the LLRs of stream 0 (s_0) in presence of the interfering stream 1 (s_1) assuming that both symbols are QPSK. It can be used for both MU-MIMO interference-aware receiver or for SU-MIMO receivers. + This function computes the LLRs of stream 0 (s_0) in presence of the interfering stream 1 (s_1) assuming that both symbols are QPSK. It can be used for both MU-MIMO interference-aware receiver or for SU-MIMO receivers. - Parameters: - stream0_in = Matched filter output y0' = (h0*g0)*y0 - stream1_in = Matched filter output y1' = (h0*g1)*y0 - stream0_out = LLRs - rho01 = Correlation between the two effective channels \rho_{10} = (h1*g1)*(h0*g0) - length = number of resource elements + Parameters: + stream0_in = Matched filter output y0' = (h0*g0)*y0 + stream1_in = Matched filter output y1' = (h0*g1)*y0 + stream0_out = LLRs + rho01 = Correlation between the two effective channels \rho_{10} = (h1*g1)*(h0*g0) + length = number of resource elements */ +#if defined(__x86_64__) || defined(__i386__) __m128i *rho01_128i = (__m128i *)rho01; __m128i *stream0_128i_in = (__m128i *)stream0_in; __m128i *stream1_128i_in = (__m128i *)stream1_in; __m128i *stream0_128i_out = (__m128i *)stream0_out; __m128i *ch_mag_128i_i = (__m128i *)ch_mag_i; + __m128i ONE_OVER_SQRT_2 = _mm_set1_epi16(23170); // round(1/sqrt(2)*2^15) + __m128i ONE_OVER_SQRT_10_Q15 = _mm_set1_epi16(10362); // round(1/sqrt(10)*2^15) + __m128i THREE_OVER_SQRT_10 = _mm_set1_epi16(31086); // round(3/sqrt(10)*2^15) + __m128i SQRT_10_OVER_FOUR = _mm_set1_epi16(25905); // round(sqrt(10)/4*2^15) + __m128i ch_mag_int __attribute__((aligned(16))); +#elif defined(__arm__) + int16x8_t *rho01_128i = (int16x8_t *)rho01; + int16x8_t *stream0_128i_in = (int16x8_t *)stream0_in; + int16x8_t *stream1_128i_in = (int16x8_t *)stream1_in; + int16x8_t *stream0_128i_out = (int16x8_t *)stream0_out; + int16x8_t *ch_mag_128i_i = (int16x8_t *)ch_mag_i; + int16x8_t ONE_OVER_SQRT_2 = vdupq_n_s16(23170); // round(1/sqrt(2)*2^15) + int16x8_t ONE_OVER_SQRT_10_Q15 = vdupq_n_s16(10362); // round(1/sqrt(10)*2^15) + int16x8_t THREE_OVER_SQRT_10 = vdupq_n_s16(31086); // round(3/sqrt(10)*2^15) + int16x8_t SQRT_10_OVER_FOUR = vdupq_n_s16(25905); // round(sqrt(10)/4*2^15) + int16x8_t ch_mag_int __attribute__((aligned(16))); +#endif #ifdef DEBUG_LLR print_shorts2("rho01_128i:\n",rho01_128i); @@ -1235,14 +1362,12 @@ void qpsk_qam16(short *stream0_in, int i; - ONE_OVER_SQRT_2 = _mm_set1_epi16(23170); // round(1/sqrt(2)*2^15) - ONE_OVER_SQRT_10_Q15 = _mm_set1_epi16(10362); // round(1/sqrt(10)*2^15) - THREE_OVER_SQRT_10 = _mm_set1_epi16(31086); // round(3/sqrt(10)*2^15) - SQRT_10_OVER_FOUR = _mm_set1_epi16(25905); // round(sqrt(10)/4*2^15) for (i=0; i>2; i+=2) { // in each iteration, we take 8 complex samples +#if defined(__x86_64__) || defined(__i386__) + xmm0 = rho01_128i[i]; // 4 symbols xmm1 = rho01_128i[i+1]; @@ -1393,23 +1518,28 @@ void qpsk_qam16(short *stream0_in, if (i<((length>>1) - 1)) // false if only 2 REs remain stream0_128i_out[i+1] = _mm_unpackhi_epi16(y0r,y0i); +#elif defined(__arm__) + +#endif } +#if defined(__x86_64__) || defined(__i386__) _mm_empty(); _m_empty(); +#endif } int dlsch_qpsk_64qam_llr(LTE_DL_FRAME_PARMS *frame_parms, - int **rxdataF_comp, - int **rxdataF_comp_i, - int **dl_ch_mag_i, //|h_1|^2*(2/sqrt{10}) - int **rho_i, - short *dlsch_llr, - unsigned char symbol, - unsigned char first_symbol_flag, - unsigned short nb_rb, + int32_t **rxdataF_comp, + int32_t **rxdataF_comp_i, + int32_t **dl_ch_mag_i, //|h_1|^2*(2/sqrt{10}) + int32_t **rho_i, + int16_t *dlsch_llr, + uint8_t symbol, + uint8_t first_symbol_flag, + uint16_t nb_rb, uint16_t pbch_pss_sss_adjust, - short **llr16p) + int16_t **llr16p) { int16_t *rxF=(int16_t*)&rxdataF_comp[0][(symbol*frame_parms->N_RB_DL*12)]; @@ -1456,42 +1586,56 @@ int dlsch_qpsk_64qam_llr(LTE_DL_FRAME_PARMS *frame_parms, return(0); } +/* +__m128i ONE_OVER_SQRT_2_42 __attribute__((aligned(16))); +__m128i THREE_OVER_SQRT_2_42 __attribute__((aligned(16))); +__m128i FIVE_OVER_SQRT_2_42 __attribute__((aligned(16))); +__m128i SEVEN_OVER_SQRT_2_42 __attribute__((aligned(16))); -NOCYGWIN_STATIC __m128i ONE_OVER_SQRT_2_42 __attribute__((aligned(16))); -NOCYGWIN_STATIC __m128i THREE_OVER_SQRT_2_42 __attribute__((aligned(16))); -NOCYGWIN_STATIC __m128i FIVE_OVER_SQRT_2_42 __attribute__((aligned(16))); -NOCYGWIN_STATIC __m128i SEVEN_OVER_SQRT_2_42 __attribute__((aligned(16))); - -NOCYGWIN_STATIC __m128i ch_mag_int_with_sigma2 __attribute__((aligned(16))); -NOCYGWIN_STATIC __m128i two_ch_mag_int_with_sigma2 __attribute__((aligned(16))); -NOCYGWIN_STATIC __m128i three_ch_mag_int_with_sigma2 __attribute__((aligned(16))); -NOCYGWIN_STATIC __m128i SQRT_42_OVER_FOUR __attribute__((aligned(16))); - +__m128i ch_mag_int_with_sigma2 __attribute__((aligned(16))); +__m128i two_ch_mag_int_with_sigma2 __attribute__((aligned(16))); +__m128i three_ch_mag_int_with_sigma2 __attribute__((aligned(16))); +__m128i SQRT_42_OVER_FOUR __attribute__((aligned(16))); +*/ void qpsk_qam64(short *stream0_in, short *stream1_in, short *ch_mag_i, short *stream0_out, short *rho01, int length - ) + ) { /* - This function computes the LLRs of stream 0 (s_0) in presence of the interfering stream 1 (s_1) assuming that both symbols are QPSK. It can be used for both MU-MIMO interference-aware receiver or for SU-MIMO receivers. + This function computes the LLRs of stream 0 (s_0) in presence of the interfering stream 1 (s_1) assuming that both symbols are QPSK. It can be used for both MU-MIMO interference-aware receiver or for SU-MIMO receivers. - Parameters: - stream0_in = Matched filter output y0' = (h0*g0)*y0 - stream1_in = Matched filter output y1' = (h0*g1)*y0 - stream0_out = LLRs - rho01 = Correlation between the two effective channels \rho_{10} = (h1*g1)*(h0*g0) - length = number of resource elements + Parameters: + stream0_in = Matched filter output y0' = (h0*g0)*y0 + stream1_in = Matched filter output y1' = (h0*g1)*y0 + stream0_out = LLRs + rho01 = Correlation between the two effective channels \rho_{10} = (h1*g1)*(h0*g0) + length = number of resource elements */ +#if defined(__x86_64__) || defined(__i386__) __m128i *rho01_128i = (__m128i *)rho01; __m128i *stream0_128i_in = (__m128i *)stream0_in; __m128i *stream1_128i_in = (__m128i *)stream1_in; __m128i *stream0_128i_out = (__m128i *)stream0_out; __m128i *ch_mag_128i_i = (__m128i *)ch_mag_i; + __m128i ONE_OVER_SQRT_2 = _mm_set1_epi16(23170); // round(1/sqrt(2)*2^15) + __m128i ONE_OVER_SQRT_2_42 = _mm_set1_epi16(3575); // round(1/sqrt(2*42)*2^15) + __m128i THREE_OVER_SQRT_2_42 = _mm_set1_epi16(10726); // round(3/sqrt(2*42)*2^15) + __m128i FIVE_OVER_SQRT_2_42 = _mm_set1_epi16(17876); // round(5/sqrt(2*42)*2^15) + __m128i SEVEN_OVER_SQRT_2_42 = _mm_set1_epi16(25027); // round(7/sqrt(2*42)*2^15) + __m128i SQRT_42_OVER_FOUR = _mm_set1_epi16(13272); // round(sqrt(42)/4*2^13), Q3.1 + __m128i ch_mag_int; + __m128i ch_mag_int_with_sigma2; + __m128i two_ch_mag_int_with_sigma2; + __m128i three_ch_mag_int_with_sigma2; +#elif defined(__arm__) + +#endif #ifdef DEBUG_LLR print_shorts2("rho01_128i:\n",rho01_128i); @@ -1499,16 +1643,12 @@ void qpsk_qam64(short *stream0_in, int i; - ONE_OVER_SQRT_2 = _mm_set1_epi16(23170); // round(1/sqrt(2)*2^15) - ONE_OVER_SQRT_2_42 = _mm_set1_epi16(3575); // round(1/sqrt(2*42)*2^15) - THREE_OVER_SQRT_2_42 = _mm_set1_epi16(10726); // round(3/sqrt(2*42)*2^15) - FIVE_OVER_SQRT_2_42 = _mm_set1_epi16(17876); // round(5/sqrt(2*42)*2^15) - SEVEN_OVER_SQRT_2_42 = _mm_set1_epi16(25027); // round(7/sqrt(2*42)*2^15) - SQRT_42_OVER_FOUR = _mm_set1_epi16(13272); // round(sqrt(42)/4*2^13), Q3.12 for (i=0; i>2; i+=2) { // in each iteration, we take 8 complex samples +#if defined(__x86_64__) || defined(__i386__) + xmm0 = rho01_128i[i]; // 4 symbols xmm1 = rho01_128i[i+1]; @@ -1678,10 +1818,15 @@ void qpsk_qam64(short *stream0_in, if (i<((length>>1) - 1)) // false if only 2 REs remain stream0_128i_out[i+1] = _mm_unpackhi_epi16(y0r,y0i); +#elif defined(__arm__) + +#endif } +#if defined(__x86_64__) || defined(__i386__) _mm_empty(); _m_empty(); +#endif } @@ -1689,18 +1834,20 @@ void qpsk_qam64(short *stream0_in, // 16-QAM //---------------------------------------------------------------------------------------------- -NOCYGWIN_STATIC __m128i ONE_OVER_TWO_SQRT_10 __attribute__((aligned(16))); -NOCYGWIN_STATIC __m128i NINE_OVER_TWO_SQRT_10 __attribute__((aligned(16))); +/* +__m128i ONE_OVER_TWO_SQRT_10 __attribute__((aligned(16))); +__m128i NINE_OVER_TWO_SQRT_10 __attribute__((aligned(16))); -NOCYGWIN_STATIC __m128i y0r_over_sqrt10 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i y0i_over_sqrt10 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i y0r_three_over_sqrt10 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i y0i_three_over_sqrt10 __attribute__ ((aligned(16))); +__m128i y0r_over_sqrt10 __attribute__ ((aligned(16))); +__m128i y0i_over_sqrt10 __attribute__ ((aligned(16))); +__m128i y0r_three_over_sqrt10 __attribute__ ((aligned(16))); +__m128i y0i_three_over_sqrt10 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i ch_mag_des __attribute__((aligned(16))); -NOCYGWIN_STATIC __m128i ch_mag_over_10 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i ch_mag_over_2 __attribute__ ((aligned(16))); -NOCYGWIN_STATIC __m128i ch_mag_9_over_10 __attribute__ ((aligned(16))); +__m128i ch_mag_des __attribute__((aligned(16))); +__m128i ch_mag_over_10 __attribute__ ((aligned(16))); +__m128i ch_mag_over_2 __attribute__ ((aligned(16))); +__m128i ch_mag_9_over_10 __attribute__ ((aligned(16))); +*/ void qam16_qpsk(short *stream0_in, short *stream1_in, @@ -1708,42 +1855,56 @@ void qam16_qpsk(short *stream0_in, short *stream0_out, short *rho01, int length - ) + ) { /* - Author: Sebastian Wagner - Date: 2012-06-04 + Author: Sebastian Wagner + Date: 2012-06-04 - Input: - stream0_in: MF filter for 1st stream, i.e., y0=h0'*y - stream!_in: MF filter for 2nd stream, i.e., y1=h1'*y - ch_mag: 2*h0/sqrt(00), [Re0 Im0 Re1 Im1] s.t. Im0=Re0, Im1=Re1, etc - ch_mag_i: 2*h1/sqrt(00), [Re0 Im0 Re1 Im1] s.t. Im0=Re0, Im1=Re1, etc - rho01: Channel cross correlation, i.e., h1'*h0 + Input: + stream0_in: MF filter for 1st stream, i.e., y0=h0'*y + stream!_in: MF filter for 2nd stream, i.e., y1=h1'*y + ch_mag: 2*h0/sqrt(00), [Re0 Im0 Re1 Im1] s.t. Im0=Re0, Im1=Re1, etc + ch_mag_i: 2*h1/sqrt(00), [Re0 Im0 Re1 Im1] s.t. Im0=Re0, Im1=Re1, etc + rho01: Channel cross correlation, i.e., h1'*h0 - Output: - stream0_out: output LLRs for 1st stream + Output: + stream0_out: output LLRs for 1st stream */ +#if defined(__x86_64__) || defined(__i386__) __m128i *rho01_128i = (__m128i *)rho01; __m128i *stream0_128i_in = (__m128i *)stream0_in; __m128i *stream1_128i_in = (__m128i *)stream1_in; __m128i *stream0_128i_out = (__m128i *)stream0_out; __m128i *ch_mag_128i = (__m128i *)ch_mag; + __m128i ONE_OVER_SQRT_2 = _mm_set1_epi16(23170); // round(1/sqrt(2)*2^15) + __m128i ONE_OVER_SQRT_10 = _mm_set1_epi16(20724); // round(1/sqrt(10)*2^16) + __m128i THREE_OVER_SQRT_10 = _mm_set1_epi16(31086); // round(3/sqrt(10)*2^15) + __m128i SQRT_10_OVER_FOUR = _mm_set1_epi16(25905); // round(sqrt(10)/4*2^15) + __m128i ONE_OVER_TWO_SQRT_10 = _mm_set1_epi16(10362); // round(1/2/sqrt(10)*2^16) + __m128i NINE_OVER_TWO_SQRT_10 = _mm_set1_epi16(23315); // round(9/2/sqrt(10)*2^14) + __m128i y0r_over_sqrt10; + __m128i y0i_over_sqrt10; + __m128i y0r_three_over_sqrt10; + __m128i y0i_three_over_sqrt10; + + __m128i ch_mag_des; + __m128i ch_mag_over_10; + __m128i ch_mag_over_2; + __m128i ch_mag_9_over_10; +#elif defined(__arm__) + +#endif int i; - ONE_OVER_SQRT_2 = _mm_set1_epi16(23170); // round(1/sqrt(2)*2^15) - ONE_OVER_SQRT_10 = _mm_set1_epi16(20724); // round(1/sqrt(10)*2^16) - THREE_OVER_SQRT_10 = _mm_set1_epi16(31086); // round(3/sqrt(10)*2^15) - SQRT_10_OVER_FOUR = _mm_set1_epi16(25905); // round(sqrt(10)/4*2^15) - ONE_OVER_TWO_SQRT_10 = _mm_set1_epi16(10362); // round(1/2/sqrt(10)*2^16) - NINE_OVER_TWO_SQRT_10 = _mm_set1_epi16(23315); // round(9/2/sqrt(10)*2^14) for (i=0; i>2; i+=2) { // In one iteration, we deal with 8 REs +#if defined(__x86_64__) || defined(__i386__) // Get rho xmm0 = rho01_128i[i]; xmm1 = rho01_128i[i+1]; @@ -2123,23 +2284,30 @@ void qam16_qpsk(short *stream0_in, stream0_128i_out[2*i+1] = _mm_unpackhi_epi32(xmm0,xmm2); stream0_128i_out[2*i+2] = _mm_unpacklo_epi32(xmm1,xmm3); stream0_128i_out[2*i+3] = _mm_unpackhi_epi32(xmm1,xmm3); + +#elif defined(__arm__) + +#endif } +#if defined(__x86_64__) || defined(__i386__) _mm_empty(); _m_empty(); +#endif + } int dlsch_16qam_qpsk_llr(LTE_DL_FRAME_PARMS *frame_parms, - int **rxdataF_comp, - int **rxdataF_comp_i, - int **dl_ch_mag, //|h_0|^2*(2/sqrt{10}) - int **rho_i, - short *dlsch_llr, - unsigned char symbol, - unsigned char first_symbol_flag, - unsigned short nb_rb, + int32_t **rxdataF_comp, + int32_t **rxdataF_comp_i, + int32_t **dl_ch_mag, //|h_0|^2*(2/sqrt{10}) + int32_t **rho_i, + int16_t *dlsch_llr, + uint8_t symbol, + uint8_t first_symbol_flag, + uint16_t nb_rb, uint16_t pbch_pss_sss_adjust, - short **llr16p) + int16_t **llr16p) { int16_t *rxF = (int16_t*)&rxdataF_comp[0][(symbol*frame_parms->N_RB_DL*12)]; @@ -2198,23 +2366,24 @@ void qam16_qam16(short *stream0_in, short *stream0_out, short *rho01, int length - ) + ) { /* - Author: Sebastian Wagner - Date: 2012-06-04 + Author: Sebastian Wagner + Date: 2012-06-04 - Input: - stream0_in: MF filter for 1st stream, i.e., y0=h0'*y - stream!_in: MF filter for 2nd stream, i.e., y1=h1'*y - ch_mag: 2*h0/sqrt(00), [Re0 Im0 Re1 Im1] s.t. Im0=Re0, Im1=Re1, etc - ch_mag_i: 2*h1/sqrt(00), [Re0 Im0 Re1 Im1] s.t. Im0=Re0, Im1=Re1, etc - rho01: Channel cross correlation, i.e., h1'*h0 + Input: + stream0_in: MF filter for 1st stream, i.e., y0=h0'*y + stream!_in: MF filter for 2nd stream, i.e., y1=h1'*y + ch_mag: 2*h0/sqrt(00), [Re0 Im0 Re1 Im1] s.t. Im0=Re0, Im1=Re1, etc + ch_mag_i: 2*h1/sqrt(00), [Re0 Im0 Re1 Im1] s.t. Im0=Re0, Im1=Re1, etc + rho01: Channel cross correlation, i.e., h1'*h0 - Output: - stream0_out: output LLRs for 1st stream + Output: + stream0_out: output LLRs for 1st stream */ +#if defined(__x86_64__) || defined(__i386__) __m128i *rho01_128i = (__m128i *)rho01; __m128i *stream0_128i_in = (__m128i *)stream0_in; __m128i *stream1_128i_in = (__m128i *)stream1_in; @@ -2222,18 +2391,32 @@ void qam16_qam16(short *stream0_in, __m128i *ch_mag_128i = (__m128i *)ch_mag; __m128i *ch_mag_128i_i = (__m128i *)ch_mag_i; - int i; - ONE_OVER_SQRT_10 = _mm_set1_epi16(20724); // round(1/sqrt(10)*2^16) - ONE_OVER_SQRT_10_Q15 = _mm_set1_epi16(10362); // round(1/sqrt(10)*2^15) - THREE_OVER_SQRT_10 = _mm_set1_epi16(31086); // round(3/sqrt(10)*2^15) - SQRT_10_OVER_FOUR = _mm_set1_epi16(25905); // round(sqrt(10)/4*2^15) - ONE_OVER_TWO_SQRT_10 = _mm_set1_epi16(10362); // round(1/2/sqrt(10)*2^16) - NINE_OVER_TWO_SQRT_10 = _mm_set1_epi16(23315); // round(9/2/sqrt(10)*2^14) + + __m128i ONE_OVER_SQRT_10 = _mm_set1_epi16(20724); // round(1/sqrt(10)*2^16) + __m128i ONE_OVER_SQRT_10_Q15 = _mm_set1_epi16(10362); // round(1/sqrt(10)*2^15) + __m128i THREE_OVER_SQRT_10 = _mm_set1_epi16(31086); // round(3/sqrt(10)*2^15) + __m128i SQRT_10_OVER_FOUR = _mm_set1_epi16(25905); // round(sqrt(10)/4*2^15) + __m128i ONE_OVER_TWO_SQRT_10 = _mm_set1_epi16(10362); // round(1/2/sqrt(10)*2^16) + __m128i NINE_OVER_TWO_SQRT_10 = _mm_set1_epi16(23315); // round(9/2/sqrt(10)*2^14) + __m128i ch_mag_des,ch_mag_int; + __m128i y0r_over_sqrt10; + __m128i y0i_over_sqrt10; + __m128i y0r_three_over_sqrt10; + __m128i y0i_three_over_sqrt10; + __m128i ch_mag_over_10; + __m128i ch_mag_over_2; + __m128i ch_mag_9_over_10; +#elif defined(__arm__) + +#endif + + int i; for (i=0; i>2; i+=2) { // In one iteration, we deal with 8 REs +#if defined(__x86_64__) || defined(__i386__) // Get rho xmm0 = rho01_128i[i]; xmm1 = rho01_128i[i+1]; @@ -2658,24 +2841,30 @@ void qam16_qam16(short *stream0_in, stream0_128i_out[2*i+1] = _mm_unpackhi_epi32(xmm0,xmm2); stream0_128i_out[2*i+2] = _mm_unpacklo_epi32(xmm1,xmm3); stream0_128i_out[2*i+3] = _mm_unpackhi_epi32(xmm1,xmm3); +#elif defined(__arm__) + +#endif + } +#if defined(__x86_64__) || defined(__i386__) _mm_empty(); _m_empty(); +#endif } int dlsch_16qam_16qam_llr(LTE_DL_FRAME_PARMS *frame_parms, - int **rxdataF_comp, - int **rxdataF_comp_i, - int **dl_ch_mag, //|h_0|^2*(2/sqrt{10}) - int **dl_ch_mag_i, //|h_1|^2*(2/sqrt{10}) - int **rho_i, - short *dlsch_llr, - unsigned char symbol, - unsigned char first_symbol_flag, - unsigned short nb_rb, + int32_t **rxdataF_comp, + int32_t **rxdataF_comp_i, + int32_t **dl_ch_mag, //|h_0|^2*(2/sqrt{10}) + int32_t **dl_ch_mag_i, //|h_1|^2*(2/sqrt{10}) + int32_t **rho_i, + int16_t *dlsch_llr, + uint8_t symbol, + uint8_t first_symbol_flag, + uint16_t nb_rb, uint16_t pbch_pss_sss_adjust, - short **llr16p) + int16_t **llr16p) { int16_t *rxF = (int16_t*)&rxdataF_comp[0][(symbol*frame_parms->N_RB_DL*12)]; @@ -2729,30 +2918,32 @@ int dlsch_16qam_16qam_llr(LTE_DL_FRAME_PARMS *frame_parms, return(0); } -void qam16_qam64(short *stream0_in, - short *stream1_in, - short *ch_mag, - short *ch_mag_i, - short *stream0_out, - short *rho01, - int length - ) +void qam16_qam64(int16_t *stream0_in, + int16_t *stream1_in, + int16_t *ch_mag, + int16_t *ch_mag_i, + int16_t *stream0_out, + int16_t *rho01, + int32_t length + ) { /* - Author: Sebastian Wagner - Date: 2012-06-04 + Author: Sebastian Wagner + Date: 2012-06-04 - Input: - stream0_in: MF filter for 1st stream, i.e., y0=h0'*y - stream!_in: MF filter for 2nd stream, i.e., y1=h1'*y - ch_mag: 2*h0/sqrt(00), [Re0 Im0 Re1 Im1] s.t. Im0=Re0, Im1=Re1, etc - ch_mag_i: 2*h1/sqrt(00), [Re0 Im0 Re1 Im1] s.t. Im0=Re0, Im1=Re1, etc - rho01: Channel cross correlation, i.e., h1'*h0 + Input: + stream0_in: MF filter for 1st stream, i.e., y0=h0'*y + stream!_in: MF filter for 2nd stream, i.e., y1=h1'*y + ch_mag: 2*h0/sqrt(00), [Re0 Im0 Re1 Im1] s.t. Im0=Re0, Im1=Re1, etc + ch_mag_i: 2*h1/sqrt(00), [Re0 Im0 Re1 Im1] s.t. Im0=Re0, Im1=Re1, etc + rho01: Channel cross correlation, i.e., h1'*h0 - Output: - stream0_out: output LLRs for 1st stream + Output: + stream0_out: output LLRs for 1st stream */ + +#if defined(__x86_64__) || defined(__i386__) __m128i *rho01_128i = (__m128i *)rho01; __m128i *stream0_128i_in = (__m128i *)stream0_in; __m128i *stream1_128i_in = (__m128i *)stream1_in; @@ -2760,24 +2951,39 @@ void qam16_qam64(short *stream0_in, __m128i *ch_mag_128i = (__m128i *)ch_mag; __m128i *ch_mag_128i_i = (__m128i *)ch_mag_i; - int i; + + __m128i ONE_OVER_SQRT_2 = _mm_set1_epi16(23170); // round(1/sqrt(2)*2^15) + __m128i ONE_OVER_SQRT_10 = _mm_set1_epi16(20724); // round(1/sqrt(10)*2^16) + __m128i THREE_OVER_SQRT_10 = _mm_set1_epi16(31086); // round(3/sqrt(10)*2^15) + __m128i SQRT_10_OVER_FOUR = _mm_set1_epi16(25905); // round(sqrt(10)/4*2^15) + __m128i ONE_OVER_TWO_SQRT_10 = _mm_set1_epi16(10362); // round(1/2/sqrt(10)*2^16) + __m128i NINE_OVER_TWO_SQRT_10 = _mm_set1_epi16(23315); // round(9/2/sqrt(10)*2^14) + __m128i ONE_OVER_SQRT_2_42 = _mm_set1_epi16(3575); // round(1/sqrt(2*42)*2^15) + __m128i THREE_OVER_SQRT_2_42 = _mm_set1_epi16(10726); // round(3/sqrt(2*42)*2^15) + __m128i FIVE_OVER_SQRT_2_42 = _mm_set1_epi16(17876); // round(5/sqrt(2*42)*2^15) + __m128i SEVEN_OVER_SQRT_2_42 = _mm_set1_epi16(25027); // round(7/sqrt(2*42)*2^15) + __m128i SQRT_42_OVER_FOUR = _mm_set1_epi16(13272); // round(sqrt(42)/4*2^13), Q3. + __m128i ch_mag_des,ch_mag_int; + __m128i y0r_over_sqrt10; + __m128i y0i_over_sqrt10; + __m128i y0r_three_over_sqrt10; + __m128i y0i_three_over_sqrt10; + __m128i ch_mag_over_10; + __m128i ch_mag_over_2; + __m128i ch_mag_9_over_10; + __m128i ch_mag_int_with_sigma2; + __m128i two_ch_mag_int_with_sigma2; + __m128i three_ch_mag_int_with_sigma2; - ONE_OVER_SQRT_2 = _mm_set1_epi16(23170); // round(1/sqrt(2)*2^15) - ONE_OVER_SQRT_10 = _mm_set1_epi16(20724); // round(1/sqrt(10)*2^16) - ONE_OVER_SQRT_10_Q15 = _mm_set1_epi16(10362); // round(1/sqrt(10)*2^15) - THREE_OVER_SQRT_10 = _mm_set1_epi16(31086); // round(3/sqrt(10)*2^15) - SQRT_10_OVER_FOUR = _mm_set1_epi16(25905); // round(sqrt(10)/4*2^15) - ONE_OVER_TWO_SQRT_10 = _mm_set1_epi16(10362); // round(1/2/sqrt(10)*2^16) - NINE_OVER_TWO_SQRT_10 = _mm_set1_epi16(23315); // round(9/2/sqrt(10)*2^14) - ONE_OVER_SQRT_2_42 = _mm_set1_epi16(3575); // round(1/sqrt(2*42)*2^15) - THREE_OVER_SQRT_2_42 = _mm_set1_epi16(10726); // round(3/sqrt(2*42)*2^15) - FIVE_OVER_SQRT_2_42 = _mm_set1_epi16(17876); // round(5/sqrt(2*42)*2^15) - SEVEN_OVER_SQRT_2_42 = _mm_set1_epi16(25027); // round(7/sqrt(2*42)*2^15) - SQRT_42_OVER_FOUR = _mm_set1_epi16(13272); // round(sqrt(42)/4*2^13), Q3.12 +#elif defined(__arm__) + +#endif + int i; for (i=0; i>2; i+=2) { // In one iteration, we deal with 8 REs +#if defined(__x86_64__) || defined(__i386__) // Get rho xmm0 = rho01_128i[i]; xmm1 = rho01_128i[i+1]; @@ -3271,24 +3477,30 @@ void qam16_qam64(short *stream0_in, stream0_128i_out[2*i+1] = _mm_unpackhi_epi32(xmm0,xmm2); stream0_128i_out[2*i+2] = _mm_unpacklo_epi32(xmm1,xmm3); stream0_128i_out[2*i+3] = _mm_unpackhi_epi32(xmm1,xmm3); +#elif defined(__arm__) + +#endif + } +#if defined(__x86_64__) || defined(__i386__) _mm_empty(); _m_empty(); +#endif } int dlsch_16qam_64qam_llr(LTE_DL_FRAME_PARMS *frame_parms, - int **rxdataF_comp, - int **rxdataF_comp_i, - int **dl_ch_mag, //|h_0|^2*(2/sqrt{10}) - int **dl_ch_mag_i, //|h_1|^2*(2/sqrt{10}) - int **rho_i, - short *dlsch_llr, - unsigned char symbol, - unsigned char first_symbol_flag, - unsigned short nb_rb, + int32_t **rxdataF_comp, + int32_t **rxdataF_comp_i, + int32_t **dl_ch_mag, //|h_0|^2*(2/sqrt{10}) + int32_t **dl_ch_mag_i, //|h_1|^2*(2/sqrt{10}) + int32_t **rho_i, + int16_t *dlsch_llr, + uint8_t symbol, + uint8_t first_symbol_flag, + uint16_t nb_rb, uint16_t pbch_pss_sss_adjust, - short **llr16p) + int16_t **llr16p) { int16_t *rxF = (int16_t*)&rxdataF_comp[0][(symbol*frame_parms->N_RB_DL*12)]; @@ -3346,93 +3558,117 @@ int dlsch_16qam_64qam_llr(LTE_DL_FRAME_PARMS *frame_parms, // 64-QAM //---------------------------------------------------------------------------------------------- -NOCYGWIN_STATIC __m128i ONE_OVER_SQRT_42 __attribute__((aligned(16))); -NOCYGWIN_STATIC __m128i THREE_OVER_SQRT_42 __attribute__((aligned(16))); -NOCYGWIN_STATIC __m128i FIVE_OVER_SQRT_42 __attribute__((aligned(16))); -NOCYGWIN_STATIC __m128i SEVEN_OVER_SQRT_42 __attribute__((aligned(16))); +/* +__m128i ONE_OVER_SQRT_42 __attribute__((aligned(16))); +__m128i THREE_OVER_SQRT_42 __attribute__((aligned(16))); +__m128i FIVE_OVER_SQRT_42 __attribute__((aligned(16))); +__m128i SEVEN_OVER_SQRT_42 __attribute__((aligned(16))); -NOCYGWIN_STATIC __m128i FORTYNINE_OVER_FOUR_SQRT_42 __attribute__((aligned(16))); -NOCYGWIN_STATIC __m128i THIRTYSEVEN_OVER_FOUR_SQRT_42 __attribute__((aligned(16))); -NOCYGWIN_STATIC __m128i TWENTYNINE_OVER_FOUR_SQRT_42 __attribute__((aligned(16))); -NOCYGWIN_STATIC __m128i TWENTYFIVE_OVER_FOUR_SQRT_42 __attribute__((aligned(16))); -NOCYGWIN_STATIC __m128i SEVENTEEN_OVER_FOUR_SQRT_42 __attribute__((aligned(16))); -NOCYGWIN_STATIC __m128i NINE_OVER_FOUR_SQRT_42 __attribute__((aligned(16))); -NOCYGWIN_STATIC __m128i THIRTEEN_OVER_FOUR_SQRT_42 __attribute__((aligned(16))); -NOCYGWIN_STATIC __m128i FIVE_OVER_FOUR_SQRT_42 __attribute__((aligned(16))); -NOCYGWIN_STATIC __m128i ONE_OVER_FOUR_SQRT_42 __attribute__((aligned(16))); +__m128i FORTYNINE_OVER_FOUR_SQRT_42 __attribute__((aligned(16))); +__m128i THIRTYSEVEN_OVER_FOUR_SQRT_42 __attribute__((aligned(16))); +__m128i TWENTYNINE_OVER_FOUR_SQRT_42 __attribute__((aligned(16))); +__m128i TWENTYFIVE_OVER_FOUR_SQRT_42 __attribute__((aligned(16))); +__m128i SEVENTEEN_OVER_FOUR_SQRT_42 __attribute__((aligned(16))); +__m128i NINE_OVER_FOUR_SQRT_42 __attribute__((aligned(16))); +__m128i THIRTEEN_OVER_FOUR_SQRT_42 __attribute__((aligned(16))); +__m128i FIVE_OVER_FOUR_SQRT_42 __attribute__((aligned(16))); +__m128i ONE_OVER_FOUR_SQRT_42 __attribute__((aligned(16))); -NOCYGWIN_STATIC __m128i y0r_one_over_sqrt_21 __attribute__((aligned(16))); -NOCYGWIN_STATIC __m128i y0r_three_over_sqrt_21 __attribute__((aligned(16))); -NOCYGWIN_STATIC __m128i y0r_five_over_sqrt_21 __attribute__((aligned(16))); -NOCYGWIN_STATIC __m128i y0r_seven_over_sqrt_21 __attribute__((aligned(16))); -NOCYGWIN_STATIC __m128i y0i_one_over_sqrt_21 __attribute__((aligned(16))); -NOCYGWIN_STATIC __m128i y0i_three_over_sqrt_21 __attribute__((aligned(16))); -NOCYGWIN_STATIC __m128i y0i_five_over_sqrt_21 __attribute__((aligned(16))); -NOCYGWIN_STATIC __m128i y0i_seven_over_sqrt_21 __attribute__((aligned(16))); +__m128i y0r_one_over_sqrt_21 __attribute__((aligned(16))); +__m128i y0r_three_over_sqrt_21 __attribute__((aligned(16))); +__m128i y0r_five_over_sqrt_21 __attribute__((aligned(16))); +__m128i y0r_seven_over_sqrt_21 __attribute__((aligned(16))); +__m128i y0i_one_over_sqrt_21 __attribute__((aligned(16))); +__m128i y0i_three_over_sqrt_21 __attribute__((aligned(16))); +__m128i y0i_five_over_sqrt_21 __attribute__((aligned(16))); +__m128i y0i_seven_over_sqrt_21 __attribute__((aligned(16))); -NOCYGWIN_STATIC __m128i ch_mag_98_over_42_with_sigma2 __attribute__((aligned(16))); -NOCYGWIN_STATIC __m128i ch_mag_74_over_42_with_sigma2 __attribute__((aligned(16))); -NOCYGWIN_STATIC __m128i ch_mag_58_over_42_with_sigma2 __attribute__((aligned(16))); -NOCYGWIN_STATIC __m128i ch_mag_50_over_42_with_sigma2 __attribute__((aligned(16))); -NOCYGWIN_STATIC __m128i ch_mag_34_over_42_with_sigma2 __attribute__((aligned(16))); -NOCYGWIN_STATIC __m128i ch_mag_18_over_42_with_sigma2 __attribute__((aligned(16))); -NOCYGWIN_STATIC __m128i ch_mag_26_over_42_with_sigma2 __attribute__((aligned(16))); -NOCYGWIN_STATIC __m128i ch_mag_10_over_42_with_sigma2 __attribute__((aligned(16))); -NOCYGWIN_STATIC __m128i ch_mag_2_over_42_with_sigma2 __attribute__((aligned(16))); +__m128i ch_mag_98_over_42_with_sigma2 __attribute__((aligned(16))); +__m128i ch_mag_74_over_42_with_sigma2 __attribute__((aligned(16))); +__m128i ch_mag_58_over_42_with_sigma2 __attribute__((aligned(16))); +__m128i ch_mag_50_over_42_with_sigma2 __attribute__((aligned(16))); +__m128i ch_mag_34_over_42_with_sigma2 __attribute__((aligned(16))); +__m128i ch_mag_18_over_42_with_sigma2 __attribute__((aligned(16))); +__m128i ch_mag_26_over_42_with_sigma2 __attribute__((aligned(16))); +__m128i ch_mag_10_over_42_with_sigma2 __attribute__((aligned(16))); +__m128i ch_mag_2_over_42_with_sigma2 __attribute__((aligned(16))); -void qam64_qpsk(short *stream0_in, - short *stream1_in, - short *ch_mag, - short *stream0_out, - short *rho01, - int length - ) +*/ + +void qam64_qpsk(int16_t *stream0_in, + int16_t *stream1_in, + int16_t *ch_mag, + int16_t *stream0_out, + int16_t *rho01, + int32_t length + ) { /* - Author: S. Wagner - Date: 31-07-12 + Author: S. Wagner + Date: 31-07-12 - Input: - stream0_in: MF filter for 1st stream, i.e., y0=h0'*y - stream1_in: MF filter for 2nd stream, i.e., y1=h1'*y - ch_mag: 4*h0/sqrt(42), [Re0 Im0 Re1 Im1] s.t. Im0=Re0, Im1=Re1, etc - ch_mag_i: 4*h1/sqrt(42), [Re0 Im0 Re1 Im1] s.t. Im0=Re0, Im1=Re1, etc - rho01: Channel cross correlation, i.e., h1'*h0 + Input: + stream0_in: MF filter for 1st stream, i.e., y0=h0'*y + stream1_in: MF filter for 2nd stream, i.e., y1=h1'*y + ch_mag: 4*h0/sqrt(42), [Re0 Im0 Re1 Im1] s.t. Im0=Re0, Im1=Re1, etc + ch_mag_i: 4*h1/sqrt(42), [Re0 Im0 Re1 Im1] s.t. Im0=Re0, Im1=Re1, etc + rho01: Channel cross correlation, i.e., h1'*h0 - Output: - stream0_out: output LLRs for 1st stream + Output: + stream0_out: output LLRs for 1st stream */ +#if defined(__x86_64__) || defined(__i386__) __m128i *rho01_128i = (__m128i *)rho01; __m128i *stream0_128i_in = (__m128i *)stream0_in; __m128i *stream1_128i_in = (__m128i *)stream1_in; __m128i *ch_mag_128i = (__m128i *)ch_mag; - int i,j; - ONE_OVER_SQRT_42 = _mm_set1_epi16(10112); // round(1/sqrt(42)*2^16) - THREE_OVER_SQRT_42 = _mm_set1_epi16(30337); // round(3/sqrt(42)*2^16) - FIVE_OVER_SQRT_42 = _mm_set1_epi16(25281); // round(5/sqrt(42)*2^15) - SEVEN_OVER_SQRT_42 = _mm_set1_epi16(17697); // round(5/sqrt(42)*2^15) - ONE_OVER_SQRT_2 = _mm_set1_epi16(23170); // round(1/sqrt(2)*2^15) - ONE_OVER_SQRT_2_42 = _mm_set1_epi16(3575); // round(1/sqrt(2*42)*2^15) - THREE_OVER_SQRT_2_42 = _mm_set1_epi16(10726); // round(3/sqrt(2*42)*2^15) - FIVE_OVER_SQRT_2_42 = _mm_set1_epi16(17876); // round(5/sqrt(2*42)*2^15) - SEVEN_OVER_SQRT_2_42 = _mm_set1_epi16(25027); // round(7/sqrt(2*42)*2^15) - FORTYNINE_OVER_FOUR_SQRT_42 = _mm_set1_epi16(30969); // round(49/(4*sqrt(42))*2^14), Q2.14 - THIRTYSEVEN_OVER_FOUR_SQRT_42 = _mm_set1_epi16(23385); // round(37/(4*sqrt(42))*2^14), Q2.14 - TWENTYFIVE_OVER_FOUR_SQRT_42 = _mm_set1_epi16(31601); // round(25/(4*sqrt(42))*2^15) - TWENTYNINE_OVER_FOUR_SQRT_42 = _mm_set1_epi16(18329); // round(29/(4*sqrt(42))*2^15), Q2.14 - SEVENTEEN_OVER_FOUR_SQRT_42 = _mm_set1_epi16(21489); // round(17/(4*sqrt(42))*2^15) - NINE_OVER_FOUR_SQRT_42 = _mm_set1_epi16(11376); // round(9/(4*sqrt(42))*2^15) - THIRTEEN_OVER_FOUR_SQRT_42 = _mm_set1_epi16(16433); // round(13/(4*sqrt(42))*2^15) - FIVE_OVER_FOUR_SQRT_42 = _mm_set1_epi16(6320); // round(5/(4*sqrt(42))*2^15) - ONE_OVER_FOUR_SQRT_42 = _mm_set1_epi16(1264); // round(1/(4*sqrt(42))*2^15) - SQRT_42_OVER_FOUR = _mm_set1_epi16(13272); // round(sqrt(42)/4*2^13), Q3.12 + __m128i ONE_OVER_SQRT_42 = _mm_set1_epi16(10112); // round(1/sqrt(42)*2^16) + __m128i THREE_OVER_SQRT_42 = _mm_set1_epi16(30337); // round(3/sqrt(42)*2^16) + __m128i FIVE_OVER_SQRT_42 = _mm_set1_epi16(25281); // round(5/sqrt(42)*2^15) + __m128i SEVEN_OVER_SQRT_42 = _mm_set1_epi16(17697); // round(5/sqrt(42)*2^15) + __m128i ONE_OVER_SQRT_2 = _mm_set1_epi16(23170); // round(1/sqrt(2)*2^15) + __m128i FORTYNINE_OVER_FOUR_SQRT_42 = _mm_set1_epi16(30969); // round(49/(4*sqrt(42))*2^14), Q2.14 + __m128i THIRTYSEVEN_OVER_FOUR_SQRT_42 = _mm_set1_epi16(23385); // round(37/(4*sqrt(42))*2^14), Q2.14 + __m128i TWENTYFIVE_OVER_FOUR_SQRT_42 = _mm_set1_epi16(31601); // round(25/(4*sqrt(42))*2^15) + __m128i TWENTYNINE_OVER_FOUR_SQRT_42 = _mm_set1_epi16(18329); // round(29/(4*sqrt(42))*2^15), Q2.14 + __m128i SEVENTEEN_OVER_FOUR_SQRT_42 = _mm_set1_epi16(21489); // round(17/(4*sqrt(42))*2^15) + __m128i NINE_OVER_FOUR_SQRT_42 = _mm_set1_epi16(11376); // round(9/(4*sqrt(42))*2^15) + __m128i THIRTEEN_OVER_FOUR_SQRT_42 = _mm_set1_epi16(16433); // round(13/(4*sqrt(42))*2^15) + __m128i FIVE_OVER_FOUR_SQRT_42 = _mm_set1_epi16(6320); // round(5/(4*sqrt(42))*2^15) + __m128i ONE_OVER_FOUR_SQRT_42 = _mm_set1_epi16(1264); // round(1/(4*sqrt(42))*2^15) + + + __m128i ch_mag_des; + __m128i ch_mag_98_over_42_with_sigma2; + __m128i ch_mag_74_over_42_with_sigma2; + __m128i ch_mag_58_over_42_with_sigma2; + __m128i ch_mag_50_over_42_with_sigma2; + __m128i ch_mag_34_over_42_with_sigma2; + __m128i ch_mag_18_over_42_with_sigma2; + __m128i ch_mag_26_over_42_with_sigma2; + __m128i ch_mag_10_over_42_with_sigma2; + __m128i ch_mag_2_over_42_with_sigma2; + __m128i y0r_one_over_sqrt_21; + __m128i y0r_three_over_sqrt_21; + __m128i y0r_five_over_sqrt_21; + __m128i y0r_seven_over_sqrt_21; + __m128i y0i_one_over_sqrt_21; + __m128i y0i_three_over_sqrt_21; + __m128i y0i_five_over_sqrt_21; + __m128i y0i_seven_over_sqrt_21; +#elif defined(__arm__) + +#endif + + int i,j; for (i=0; i>2; i+=2) { +#if defined(__x86_64) || defined(__i386__) // Get rho xmm0 = rho01_128i[i]; xmm1 = rho01_128i[i+1]; @@ -4750,6 +4986,7 @@ void qam64_qpsk(short *stream0_in, y2i = _mm_subs_epi16(logmax_num_re0, logmax_den_re0); + // map to output stream, difficult to do in SIMD since we have 6 16bit LLRs // RE 1 j = 24*i; @@ -4808,25 +5045,29 @@ void qam64_qpsk(short *stream0_in, stream0_out[j + 45] = ((short *)&y0i)[7]; stream0_out[j + 46] = ((short *)&y1i)[7]; stream0_out[j + 47] = ((short *)&y2i)[7]; +#elif defined(__arm__) + +#endif } +#if defined(__x86_64__) || defined(__i386__) _mm_empty(); _m_empty(); - +#endif } int dlsch_64qam_qpsk_llr(LTE_DL_FRAME_PARMS *frame_parms, - int **rxdataF_comp, - int **rxdataF_comp_i, - int **dl_ch_mag, - int **rho_i, - short *dlsch_llr, - unsigned char symbol, - unsigned char first_symbol_flag, - unsigned short nb_rb, + int32_t **rxdataF_comp, + int32_t **rxdataF_comp_i, + int32_t **dl_ch_mag, + int32_t **rho_i, + int16_t *dlsch_llr, + uint8_t symbol, + uint8_t first_symbol_flag, + uint16_t nb_rb, uint16_t pbch_pss_sss_adjust, - short **llr16p) + int16_t **llr16p) { int16_t *rxF = (int16_t*)&rxdataF_comp[0][(symbol*frame_parms->N_RB_DL*12)]; @@ -4883,61 +5124,80 @@ void qam64_qam16(short *stream0_in, short *stream0_out, short *rho01, int length - ) + ) { /* - Author: S. Wagner - Date: 31-07-12 + Author: S. Wagner + Date: 31-07-12 - Input: - stream0_in: MF filter for 1st stream, i.e., y0=h0'*y - stream1_in: MF filter for 2nd stream, i.e., y1=h1'*y - ch_mag: 4*h0/sqrt(42), [Re0 Im0 Re1 Im1] s.t. Im0=Re0, Im1=Re1, etc - ch_mag_i: 4*h1/sqrt(42), [Re0 Im0 Re1 Im1] s.t. Im0=Re0, Im1=Re1, etc - rho01: Channel cross correlation, i.e., h1'*h0 + Input: + stream0_in: MF filter for 1st stream, i.e., y0=h0'*y + stream1_in: MF filter for 2nd stream, i.e., y1=h1'*y + ch_mag: 4*h0/sqrt(42), [Re0 Im0 Re1 Im1] s.t. Im0=Re0, Im1=Re1, etc + ch_mag_i: 4*h1/sqrt(42), [Re0 Im0 Re1 Im1] s.t. Im0=Re0, Im1=Re1, etc + rho01: Channel cross correlation, i.e., h1'*h0 - Output: - stream0_out: output LLRs for 1st stream + Output: + stream0_out: output LLRs for 1st stream */ +#if defined(__x86_64__) || defined(__i386__) + __m128i *rho01_128i = (__m128i *)rho01; __m128i *stream0_128i_in = (__m128i *)stream0_in; __m128i *stream1_128i_in = (__m128i *)stream1_in; __m128i *ch_mag_128i = (__m128i *)ch_mag; __m128i *ch_mag_128i_i = (__m128i *)ch_mag_i; + __m128i ONE_OVER_SQRT_42 = _mm_set1_epi16(10112); // round(1/sqrt(42)*2^16) + __m128i THREE_OVER_SQRT_42 = _mm_set1_epi16(30337); // round(3/sqrt(42)*2^16) + __m128i FIVE_OVER_SQRT_42 = _mm_set1_epi16(25281); // round(5/sqrt(42)*2^15) + __m128i SEVEN_OVER_SQRT_42 = _mm_set1_epi16(17697); // round(5/sqrt(42)*2^15) + __m128i FORTYNINE_OVER_FOUR_SQRT_42 = _mm_set1_epi16(30969); // round(49/(4*sqrt(42))*2^14), Q2.14 + __m128i THIRTYSEVEN_OVER_FOUR_SQRT_42 = _mm_set1_epi16(23385); // round(37/(4*sqrt(42))*2^14), Q2.14 + __m128i TWENTYFIVE_OVER_FOUR_SQRT_42 = _mm_set1_epi16(31601); // round(25/(4*sqrt(42))*2^15) + __m128i TWENTYNINE_OVER_FOUR_SQRT_42 = _mm_set1_epi16(18329); // round(29/(4*sqrt(42))*2^15), Q2.14 + __m128i SEVENTEEN_OVER_FOUR_SQRT_42 = _mm_set1_epi16(21489); // round(17/(4*sqrt(42))*2^15) + __m128i NINE_OVER_FOUR_SQRT_42 = _mm_set1_epi16(11376); // round(9/(4*sqrt(42))*2^15) + __m128i THIRTEEN_OVER_FOUR_SQRT_42 = _mm_set1_epi16(16433); // round(13/(4*sqrt(42))*2^15) + __m128i FIVE_OVER_FOUR_SQRT_42 = _mm_set1_epi16(6320); // round(5/(4*sqrt(42))*2^15) + __m128i ONE_OVER_FOUR_SQRT_42 = _mm_set1_epi16(1264); // round(1/(4*sqrt(42))*2^15) + __m128i ONE_OVER_SQRT_10_Q15 = _mm_set1_epi16(10362); // round(1/sqrt(10)*2^15) + __m128i THREE_OVER_SQRT_10 = _mm_set1_epi16(31086); // round(3/sqrt(10)*2^15) + __m128i SQRT_10_OVER_FOUR = _mm_set1_epi16(25905); // round(sqrt(10)/4*2^15) + + + __m128i ch_mag_int; + __m128i ch_mag_des; + __m128i ch_mag_98_over_42_with_sigma2; + __m128i ch_mag_74_over_42_with_sigma2; + __m128i ch_mag_58_over_42_with_sigma2; + __m128i ch_mag_50_over_42_with_sigma2; + __m128i ch_mag_34_over_42_with_sigma2; + __m128i ch_mag_18_over_42_with_sigma2; + __m128i ch_mag_26_over_42_with_sigma2; + __m128i ch_mag_10_over_42_with_sigma2; + __m128i ch_mag_2_over_42_with_sigma2; + __m128i y0r_one_over_sqrt_21; + __m128i y0r_three_over_sqrt_21; + __m128i y0r_five_over_sqrt_21; + __m128i y0r_seven_over_sqrt_21; + __m128i y0i_one_over_sqrt_21; + __m128i y0i_three_over_sqrt_21; + __m128i y0i_five_over_sqrt_21; + __m128i y0i_seven_over_sqrt_21; + +#elif defined(__arm__) + +#endif int i,j; - ONE_OVER_SQRT_42 = _mm_set1_epi16(10112); // round(1/sqrt(42)*2^16) - THREE_OVER_SQRT_42 = _mm_set1_epi16(30337); // round(3/sqrt(42)*2^16) - FIVE_OVER_SQRT_42 = _mm_set1_epi16(25281); // round(5/sqrt(42)*2^15) - SEVEN_OVER_SQRT_42 = _mm_set1_epi16(17697); // round(5/sqrt(42)*2^15) - ONE_OVER_SQRT_2 = _mm_set1_epi16(23170); // round(1/sqrt(2)*2^15) - ONE_OVER_SQRT_2_42 = _mm_set1_epi16(3575); // round(1/sqrt(2*42)*2^15) - THREE_OVER_SQRT_2_42 = _mm_set1_epi16(10726); // round(3/sqrt(2*42)*2^15) - FIVE_OVER_SQRT_2_42 = _mm_set1_epi16(17876); // round(5/sqrt(2*42)*2^15) - SEVEN_OVER_SQRT_2_42 = _mm_set1_epi16(25027); // round(7/sqrt(2*42)*2^15) - FORTYNINE_OVER_FOUR_SQRT_42 = _mm_set1_epi16(30969); // round(49/(4*sqrt(42))*2^14), Q2.14 - THIRTYSEVEN_OVER_FOUR_SQRT_42 = _mm_set1_epi16(23385); // round(37/(4*sqrt(42))*2^14), Q2.14 - TWENTYFIVE_OVER_FOUR_SQRT_42 = _mm_set1_epi16(31601); // round(25/(4*sqrt(42))*2^15) - TWENTYNINE_OVER_FOUR_SQRT_42 = _mm_set1_epi16(18329); // round(29/(4*sqrt(42))*2^15), Q2.14 - SEVENTEEN_OVER_FOUR_SQRT_42 = _mm_set1_epi16(21489); // round(17/(4*sqrt(42))*2^15) - NINE_OVER_FOUR_SQRT_42 = _mm_set1_epi16(11376); // round(9/(4*sqrt(42))*2^15) - THIRTEEN_OVER_FOUR_SQRT_42 = _mm_set1_epi16(16433); // round(13/(4*sqrt(42))*2^15) - FIVE_OVER_FOUR_SQRT_42 = _mm_set1_epi16(6320); // round(5/(4*sqrt(42))*2^15) - ONE_OVER_FOUR_SQRT_42 = _mm_set1_epi16(1264); // round(1/(4*sqrt(42))*2^15) - SQRT_42_OVER_FOUR = _mm_set1_epi16(13272); // round(sqrt(42)/4*2^13), Q3.12 - ONE_OVER_SQRT_10_Q15 = _mm_set1_epi16(10362); // round(1/sqrt(10)*2^15) - THREE_OVER_SQRT_10 = _mm_set1_epi16(31086); // round(3/sqrt(10)*2^15) - SQRT_10_OVER_FOUR = _mm_set1_epi16(25905); // round(sqrt(10)/4*2^15) - // ONE_OVER_SQRT_10_Q15 = _mm_set1_epi16(7327); // round(1/sqrt(10)*2^15) - // THREE_OVER_SQRT_10 = _mm_set1_epi16(21981); // round(3/sqrt(10)*2^15) - // SQRT_10_OVER_FOUR = _mm_set1_epi16(25905); // round(sqrt(10)/4*2^15) Q3.13 for (i=0; i>2; i+=2) { +#if defined(__x86_64__) || defined(__i386__) // Get rho xmm0 = rho01_128i[i]; xmm1 = rho01_128i[i+1]; @@ -6268,6 +6528,7 @@ void qam64_qam16(short *stream0_in, y2i = _mm_subs_epi16(logmax_num_re0, logmax_den_re0); + // map to output stream, difficult to do in SIMD since we have 6 16bit LLRs // RE 1 j = 24*i; @@ -6326,26 +6587,32 @@ void qam64_qam16(short *stream0_in, stream0_out[j + 45] = ((short *)&y0i)[7]; stream0_out[j + 46] = ((short *)&y1i)[7]; stream0_out[j + 47] = ((short *)&y2i)[7]; + +#elif defined(__arm__) + +#endif } +#if defined(__x86_64__) || defined(__i386__) _mm_empty(); _m_empty(); +#endif } int dlsch_64qam_16qam_llr(LTE_DL_FRAME_PARMS *frame_parms, - int **rxdataF_comp, - int **rxdataF_comp_i, - int **dl_ch_mag, - int **dl_ch_mag_i, - int **rho_i, - short *dlsch_llr, - unsigned char symbol, - unsigned char first_symbol_flag, - unsigned short nb_rb, + int32_t **rxdataF_comp, + int32_t **rxdataF_comp_i, + int32_t **dl_ch_mag, + int32_t **dl_ch_mag_i, + int32_t **rho_i, + int16_t *dlsch_llr, + uint8_t symbol, + uint8_t first_symbol_flag, + uint16_t nb_rb, uint16_t pbch_pss_sss_adjust, - short **llr16p) + int16_t **llr16p) { int16_t *rxF = (int16_t*)&rxdataF_comp[0][(symbol*frame_parms->N_RB_DL*12)]; @@ -6402,54 +6669,85 @@ void qam64_qam64(short *stream0_in, short *stream0_out, short *rho01, int length - ) + ) { /* - Author: S. Wagner - Date: 31-07-12 + Author: S. Wagner + Date: 31-07-12 - Input: - stream0_in: MF filter for 1st stream, i.e., y0=h0'*y - stream1_in: MF filter for 2nd stream, i.e., y1=h1'*y - ch_mag: 4*h0/sqrt(42), [Re0 Im0 Re1 Im1] s.t. Im0=Re0, Im1=Re1, etc - ch_mag_i: 4*h1/sqrt(42), [Re0 Im0 Re1 Im1] s.t. Im0=Re0, Im1=Re1, etc - rho01: Channel cross correlation, i.e., h1'*h0 + Input: + stream0_in: MF filter for 1st stream, i.e., y0=h0'*y + stream1_in: MF filter for 2nd stream, i.e., y1=h1'*y + ch_mag: 4*h0/sqrt(42), [Re0 Im0 Re1 Im1] s.t. Im0=Re0, Im1=Re1, etc + ch_mag_i: 4*h1/sqrt(42), [Re0 Im0 Re1 Im1] s.t. Im0=Re0, Im1=Re1, etc + rho01: Channel cross correlation, i.e., h1'*h0 - Output: - stream0_out: output LLRs for 1st stream + Output: + stream0_out: output LLRs for 1st stream */ +#if defined(__x86_64__) || defined(__i386__) + __m128i *rho01_128i = (__m128i *)rho01; __m128i *stream0_128i_in = (__m128i *)stream0_in; __m128i *stream1_128i_in = (__m128i *)stream1_in; __m128i *ch_mag_128i = (__m128i *)ch_mag; __m128i *ch_mag_128i_i = (__m128i *)ch_mag_i; + __m128i ONE_OVER_SQRT_42 = _mm_set1_epi16(10112); // round(1/sqrt(42)*2^16) + __m128i THREE_OVER_SQRT_42 = _mm_set1_epi16(30337); // round(3/sqrt(42)*2^16) + __m128i FIVE_OVER_SQRT_42 = _mm_set1_epi16(25281); // round(5/sqrt(42)*2^15) + __m128i SEVEN_OVER_SQRT_42 = _mm_set1_epi16(17697); // round(7/sqrt(42)*2^14) Q2.14 + __m128i ONE_OVER_SQRT_2 = _mm_set1_epi16(23170); // round(1/sqrt(2)*2^15) + __m128i ONE_OVER_SQRT_2_42 = _mm_set1_epi16(3575); // round(1/sqrt(2*42)*2^15) + __m128i THREE_OVER_SQRT_2_42 = _mm_set1_epi16(10726); // round(3/sqrt(2*42)*2^15) + __m128i FIVE_OVER_SQRT_2_42 = _mm_set1_epi16(17876); // round(5/sqrt(2*42)*2^15) + __m128i SEVEN_OVER_SQRT_2_42 = _mm_set1_epi16(25027); // round(7/sqrt(2*42)*2^15) + __m128i FORTYNINE_OVER_FOUR_SQRT_42 = _mm_set1_epi16(30969); // round(49/(4*sqrt(42))*2^14), Q2.14 + __m128i THIRTYSEVEN_OVER_FOUR_SQRT_42 = _mm_set1_epi16(23385); // round(37/(4*sqrt(42))*2^14), Q2.14 + __m128i TWENTYFIVE_OVER_FOUR_SQRT_42 = _mm_set1_epi16(31601); // round(25/(4*sqrt(42))*2^15) + __m128i TWENTYNINE_OVER_FOUR_SQRT_42 = _mm_set1_epi16(18329); // round(29/(4*sqrt(42))*2^15), Q2.14 + __m128i SEVENTEEN_OVER_FOUR_SQRT_42 = _mm_set1_epi16(21489); // round(17/(4*sqrt(42))*2^15) + __m128i NINE_OVER_FOUR_SQRT_42 = _mm_set1_epi16(11376); // round(9/(4*sqrt(42))*2^15) + __m128i THIRTEEN_OVER_FOUR_SQRT_42 = _mm_set1_epi16(16433); // round(13/(4*sqrt(42))*2^15) + __m128i FIVE_OVER_FOUR_SQRT_42 = _mm_set1_epi16(6320); // round(5/(4*sqrt(42))*2^15) + __m128i ONE_OVER_FOUR_SQRT_42 = _mm_set1_epi16(1264); // round(1/(4*sqrt(42))*2^15) + __m128i SQRT_42_OVER_FOUR = _mm_set1_epi16(13272); // round(sqrt(42)/4*2^13), Q3.12 + + __m128i ch_mag_des; + __m128i ch_mag_int; + __m128i ch_mag_98_over_42_with_sigma2; + __m128i ch_mag_74_over_42_with_sigma2; + __m128i ch_mag_58_over_42_with_sigma2; + __m128i ch_mag_50_over_42_with_sigma2; + __m128i ch_mag_34_over_42_with_sigma2; + __m128i ch_mag_18_over_42_with_sigma2; + __m128i ch_mag_26_over_42_with_sigma2; + __m128i ch_mag_10_over_42_with_sigma2; + __m128i ch_mag_2_over_42_with_sigma2; + __m128i y0r_one_over_sqrt_21; + __m128i y0r_three_over_sqrt_21; + __m128i y0r_five_over_sqrt_21; + __m128i y0r_seven_over_sqrt_21; + __m128i y0i_one_over_sqrt_21; + __m128i y0i_three_over_sqrt_21; + __m128i y0i_five_over_sqrt_21; + __m128i y0i_seven_over_sqrt_21; + __m128i ch_mag_int_with_sigma2; + __m128i two_ch_mag_int_with_sigma2; + __m128i three_ch_mag_int_with_sigma2; +#elif defined(__arm__) + +#endif + int i,j; - ONE_OVER_SQRT_42 = _mm_set1_epi16(10112); // round(1/sqrt(42)*2^16) - THREE_OVER_SQRT_42 = _mm_set1_epi16(30337); // round(3/sqrt(42)*2^16) - FIVE_OVER_SQRT_42 = _mm_set1_epi16(25281); // round(5/sqrt(42)*2^15) - SEVEN_OVER_SQRT_42 = _mm_set1_epi16(17697); // round(7/sqrt(42)*2^14) Q2.14 - ONE_OVER_SQRT_2 = _mm_set1_epi16(23170); // round(1/sqrt(2)*2^15) - ONE_OVER_SQRT_2_42 = _mm_set1_epi16(3575); // round(1/sqrt(2*42)*2^15) - THREE_OVER_SQRT_2_42 = _mm_set1_epi16(10726); // round(3/sqrt(2*42)*2^15) - FIVE_OVER_SQRT_2_42 = _mm_set1_epi16(17876); // round(5/sqrt(2*42)*2^15) - SEVEN_OVER_SQRT_2_42 = _mm_set1_epi16(25027); // round(7/sqrt(2*42)*2^15) - FORTYNINE_OVER_FOUR_SQRT_42 = _mm_set1_epi16(30969); // round(49/(4*sqrt(42))*2^14), Q2.14 - THIRTYSEVEN_OVER_FOUR_SQRT_42 = _mm_set1_epi16(23385); // round(37/(4*sqrt(42))*2^14), Q2.14 - TWENTYFIVE_OVER_FOUR_SQRT_42 = _mm_set1_epi16(31601); // round(25/(4*sqrt(42))*2^15) - TWENTYNINE_OVER_FOUR_SQRT_42 = _mm_set1_epi16(18329); // round(29/(4*sqrt(42))*2^15), Q2.14 - SEVENTEEN_OVER_FOUR_SQRT_42 = _mm_set1_epi16(21489); // round(17/(4*sqrt(42))*2^15) - NINE_OVER_FOUR_SQRT_42 = _mm_set1_epi16(11376); // round(9/(4*sqrt(42))*2^15) - THIRTEEN_OVER_FOUR_SQRT_42 = _mm_set1_epi16(16433); // round(13/(4*sqrt(42))*2^15) - FIVE_OVER_FOUR_SQRT_42 = _mm_set1_epi16(6320); // round(5/(4*sqrt(42))*2^15) - ONE_OVER_FOUR_SQRT_42 = _mm_set1_epi16(1264); // round(1/(4*sqrt(42))*2^15) - SQRT_42_OVER_FOUR = _mm_set1_epi16(13272); // round(sqrt(42)/4*2^13), Q3.12 for (i=0; i>2; i+=2) { +#if defined(__x86_64__) || defined(__i386__) + // Get rho xmm0 = rho01_128i[i]; xmm1 = rho01_128i[i+1]; @@ -8043,6 +8341,7 @@ void qam64_qam64(short *stream0_in, y2i = _mm_subs_epi16(logmax_num_re0, logmax_den_re0); + // map to output stream, difficult to do in SIMD since we have 6 16bit LLRs // RE 1 j = 24*i; @@ -8101,26 +8400,32 @@ void qam64_qam64(short *stream0_in, stream0_out[j + 45] = ((short *)&y0i)[7]; stream0_out[j + 46] = ((short *)&y1i)[7]; stream0_out[j + 47] = ((short *)&y2i)[7]; + +#elif defined(__arm__) + +#endif + } +#if defined(__x86_64__) || defined(__i386__) _mm_empty(); _m_empty(); - +#endif } int dlsch_64qam_64qam_llr(LTE_DL_FRAME_PARMS *frame_parms, - int **rxdataF_comp, - int **rxdataF_comp_i, - int **dl_ch_mag, - int **dl_ch_mag_i, - int **rho_i, - short *dlsch_llr, - unsigned char symbol, - unsigned char first_symbol_flag, - unsigned short nb_rb, + int32_t **rxdataF_comp, + int32_t **rxdataF_comp_i, + int32_t **dl_ch_mag, + int32_t **dl_ch_mag_i, + int32_t **rho_i, + int16_t *dlsch_llr, + uint8_t symbol, + uint8_t first_symbol_flag, + uint16_t nb_rb, uint16_t pbch_pss_sss_adjust, - short **llr16p) + int16_t **llr16p) { int16_t *rxF = (int16_t*)&rxdataF_comp[0][(symbol*frame_parms->N_RB_DL*12)]; diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c b/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c index 9176f11fae..313134c28a 100644 --- a/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c +++ b/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c @@ -302,10 +302,10 @@ break; switch (mod_order0) { case 2: //QPSK - //printf("%d(%d) : %d,%d => ",tti_offset,*jj,((int16_t*)&txdataF[0][tti_offset])[0],((int16_t*)&txdataF[0][tti_offset])[1]); - for (aa=0; aanb_antennas_tx; aa++) { - ((int16_t*)&txdataF[aa][tti_offset])[0] += (x0[*jj]==1) ? (-gain_lin_QPSK) : gain_lin_QPSK; //I //b_i - } +// printf("%d(%d) : %d,%d => ",tti_offset,*jj,((int16_t*)&txdataF[0][tti_offset])[0],((int16_t*)&txdataF[0][tti_offset])[1]); + for (aa=0; aanb_antennas_tx; aa++) { + ((int16_t*)&txdataF[aa][tti_offset])[0] += (x0[*jj]==1) ? (-gain_lin_QPSK) : gain_lin_QPSK; //I //b_i + } *jj = *jj + 1; @@ -315,8 +315,8 @@ break; *jj = *jj + 1; - //printf("%d,%d\n",((int16_t*)&txdataF[0][tti_offset])[0],((int16_t*)&txdataF[0][tti_offset])[1]); - break; + // printf("%d,%d\n",((int16_t*)&txdataF[0][tti_offset])[0],((int16_t*)&txdataF[0][tti_offset])[1]); + break; case 4: //16QAM @@ -1089,7 +1089,7 @@ int allocate_REs_in_RB_MCH(mod_sym_t **txdataF, uint8_t first_re,last_re; int inc; #ifdef DEBUG_DLSCH_MODULATION - printf("allocate_re_MCH (mod %d): symbol_offset %d re_offset %d (%d), jj %d -> %d,%d\n",mod_order,symbol_offset,re_offset,skip_dc,*jj, x0[*jj], x0[1+*jj]); + printf("allocate_re_MCH (mod %d): symbol_offset %d re_offset %d (%d), jj %d -> %d,%d, gain_lin_QPSK %d,txdataF %p\n",mod_order,symbol_offset,re_offset,skip_dc,*jj, x0[*jj], x0[1+*jj],gain_lin_QPSK,&txdataF[0][symbol_offset]); #endif last_re=12; @@ -1117,9 +1117,9 @@ int allocate_REs_in_RB_MCH(mod_sym_t **txdataF, switch (mod_order) { case 2: //QPSK - // printf("%d : %d,%d => ",tti_offset,((int16_t*)&txdataF[0][tti_offset])[0],((int16_t*)&txdataF[0][tti_offset])[1]); - for (aa=0; aanb_antennas_tx; aa++) - ((int16_t*)&txdataF[aa][tti_offset])[0] += (x0[*jj]==1) ? (-gain_lin_QPSK) : gain_lin_QPSK; //I //b_i + // printf("%d : %d,%d => ",tti_offset,((int16_t*)&txdataF[0][tti_offset])[0],((int16_t*)&txdataF[0][tti_offset])[1]); + for (aa=0; aanb_antennas_tx; aa++) + ((int16_t*)&txdataF[aa][tti_offset])[0] += (x0[*jj]==1) ? (-gain_lin_QPSK) : gain_lin_QPSK; //I //b_i *jj = *jj + 1; @@ -1128,8 +1128,8 @@ int allocate_REs_in_RB_MCH(mod_sym_t **txdataF, *jj = *jj + 1; - // printf("%d,%d\n",((int16_t*)&txdataF[0][tti_offset])[0],((int16_t*)&txdataF[0][tti_offset])[1]); - break; + // printf("%d,%d\n",((int16_t*)&txdataF[0][tti_offset])[0],((int16_t*)&txdataF[0][tti_offset])[1]); + break; case 4: //16QAM @@ -1623,7 +1623,6 @@ int mch_modulation(mod_sym_t **txdataF, LTE_DL_FRAME_PARMS *frame_parms, LTE_eNB_DLSCH_t *dlsch) { - uint8_t nsymb,nsymb_pmch; uint32_t i,jj,re_allocated,symbol_offset; uint16_t l,rb,re_offset; @@ -1651,7 +1650,7 @@ int mch_modulation(mod_sym_t **txdataF, for (l=2; lfirst_carrier_offset; @@ -1677,7 +1676,7 @@ int mch_modulation(mod_sym_t **txdataF, else qam_table_s = NULL; - // printf("Allocated rb %d, subframe_offset %d\n",rb,subframe_offset); + // printf("Allocated rb %d, subframe_offset %d,amp %d\n",rb,subframe_offset,amp); allocate_REs_in_RB_MCH(txdataF, &jj, re_offset, diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_tbs_full.h b/openair1/PHY/LTE_TRANSPORT/dlsch_tbs_full.h index 5c0487e9ed..e570ae950b 100644 --- a/openair1/PHY/LTE_TRANSPORT/dlsch_tbs_full.h +++ b/openair1/PHY/LTE_TRANSPORT/dlsch_tbs_full.h @@ -59,3 +59,5 @@ unsigned int TBStable[TBStable_rowCnt][110] = {{16,32,56,88,120,152,176,208,224, {616,1256,1864,2536,3112,3752,4392,5160,5736,6200,6968,7480,8248,8760,9528,10296,10680,11448,12216,12576,13536,14112,14688,15264,15840,16416,16992,17568,18336,19080,19848,20616,20616,21384,22152,22920,23688,24496,24496,25456,26416,26416,27376,28336,28336,29296,29296,30576,31704,31704,32856,32856,34008,34008,35160,35160,36696,36696,37888,37888,39232,39232,40576,40576,40576,42368,42368,43816,43816,43816,45352,45352,46888,46888,46888,48936,48936,48936,51024,51024,51024,52752,52752,52752,55056,55056,55056,55056,57336,57336,57336,59256,59256,59256,61664,61664,61664,61664,63776,63776,63776,63776,66592,66592,66592,66592,68808,68808,68808,71112}, {712,1480,2216,2984,3752,4392,5160,5992,6712,7480,8248,8760,9528,10296,11064,11832,12576,13536,14112,14688,15264,16416,16992,17568,18336,19080,19848,20616,21384,22152,22920,23688,24496,25456,25456,26416,27376,28336,29296,29296,30576,30576,31704,32856,32856,34008,35160,35160,36696,36696,37888,37888,39232,40576,40576,40576,42368,42368,43816,43816,45352,45352,46888,46888,48936,48936,48936,51024,51024,52752,52752,52752,55056,55056,55056,55056,57336,57336,57336,59256,59256,59256,61664,61664,61664,63776,63776,63776,66592,66592,66592,68808,68808,68808,71112,71112,71112,73712,73712,75376,75376,75376,75376,75376,75376,75376,75376,75376,75376,75376} }; + +unsigned int TBStable1C[32] = {40, 56, 72, 120, 136, 144, 176, 208, 224, 256, 280, 296, 328, 336, 392, 488, 552, 600, 632, 696, 776, 840, 904, 1000, 1064, 1128, 1224, 1288, 1384, 1480, 1608, 1736}; diff --git a/openair1/PHY/LTE_TRANSPORT/extern.h b/openair1/PHY/LTE_TRANSPORT/extern.h index d3a1f6afa9..b4ca0a8bac 100644 --- a/openair1/PHY/LTE_TRANSPORT/extern.h +++ b/openair1/PHY/LTE_TRANSPORT/extern.h @@ -26,7 +26,7 @@ Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE *******************************************************************************/ -extern unsigned int dlsch_tbs25[27][25],TBStable[27][110]; +extern unsigned int dlsch_tbs25[27][25],TBStable[27][110],TBStable1C[32]; extern unsigned short lte_cqi_eff1024[16]; extern char lte_cqi_snr_dB[15]; extern short conjugate[8],conjugate2[8]; diff --git a/openair1/PHY/LTE_TRANSPORT/initial_sync.c b/openair1/PHY/LTE_TRANSPORT/initial_sync.c index e1b5a20867..69351e297f 100644 --- a/openair1/PHY/LTE_TRANSPORT/initial_sync.c +++ b/openair1/PHY/LTE_TRANSPORT/initial_sync.c @@ -48,14 +48,18 @@ #include "gain_control.h" #endif +#if defined(OAI_USRP) || defined(EXMIMO) +#include "common_lib.h" +extern openair0_config_t openair0_cfg[]; +#endif #define DEBUG_INITIAL_SYNCH -int pbch_detection(PHY_VARS_UE *phy_vars_ue, runmode_t mode) +int pbch_detection(PHY_VARS_UE *phy_vars_ue, runmode_t mode) { - uint8_t l,pbch_decoded,frame_mod4,pbch_tx_ant,dummy; - LTE_DL_FRAME_PARMS *frame_parms=&phy_vars_ue->lte_frame_parms; - char phich_resource[6]; +uint8_t l,pbch_decoded,frame_mod4,pbch_tx_ant,dummy; +LTE_DL_FRAME_PARMS *frame_parms=&phy_vars_ue->lte_frame_parms; +char phich_resource[6]; #ifdef DEBUG_INITIAL_SYNCH LOG_I(PHY,"[UE%d] Initial sync: starting PBCH detection (rx_offset %d)\n",phy_vars_ue->Mod_id, @@ -65,25 +69,46 @@ int pbch_detection(PHY_VARS_UE *phy_vars_ue, runmode_t mode) for (l=0; lsymbols_per_tti/2; l++) { slot_fep(phy_vars_ue, - l, - 1, - phy_vars_ue->rx_offset, - 0); - } + l, + 0, + phy_vars_ue->rx_offset, + 0, + 1); + } + for (l=0; lsymbols_per_tti/2; l++) { + slot_fep(phy_vars_ue, + l, + 1, + phy_vars_ue->rx_offset, + 0, + 1); + } slot_fep(phy_vars_ue, - 0, - 2, - phy_vars_ue->rx_offset, - 0); + 0, + 2, + phy_vars_ue->rx_offset, + 0, + 1); lte_ue_measurements(phy_vars_ue, - phy_vars_ue->rx_offset, - 0, - 0); - + phy_vars_ue->rx_offset, + 0, + 0); + + + if (phy_vars_ue->lte_frame_parms.frame_type == TDD) { + ue_rrc_measurements(phy_vars_ue, + 1, + 0); + } + else { + ue_rrc_measurements(phy_vars_ue, + 0, + 0); + } #ifdef DEBUG_INITIAL_SYNCH - LOG_I(PHY,"[UE %d][initial sync] RX RSSI %d dBm, digital (%d, %d) dB, linear (%d, %d), avg rx power %d dB (%d lin), RX gain %d dB\n", + LOG_I(PHY,"[UE %d] RX RSSI %d dBm, digital (%d, %d) dB, linear (%d, %d), avg rx power %d dB (%d lin), RX gain %d dB\n", phy_vars_ue->Mod_id, phy_vars_ue->PHY_measurements.rx_rssi_dBm[0] - ((phy_vars_ue->lte_frame_parms.nb_antennas_rx==2) ? 3 : 0), phy_vars_ue->PHY_measurements.rx_power_dB[0][0], @@ -94,7 +119,7 @@ int pbch_detection(PHY_VARS_UE *phy_vars_ue, runmode_t mode) phy_vars_ue->PHY_measurements.rx_power_avg[0], phy_vars_ue->rx_total_gain_dB); - LOG_I(PHY,"[UE %d][initial sync] N0 %d dBm digital (%d, %d) dB, linear (%d, %d), avg noise power %d dB (%d lin)\n", + LOG_I(PHY,"[UE %d] N0 %d dBm digital (%d, %d) dB, linear (%d, %d), avg noise power %d dB (%d lin)\n", phy_vars_ue->Mod_id, phy_vars_ue->PHY_measurements.n0_power_tot_dBm, phy_vars_ue->PHY_measurements.n0_power_dB[0], @@ -242,6 +267,10 @@ int pbch_detection(PHY_VARS_UE *phy_vars_ue, runmode_t mode) } +char phich_string[13][4] = {"","1/6","","1/2","","","one","","","","","","two"}; +char duplex_string[2][4] = {"FDD","TDD"}; +char prefix_string[2][9] = {"NORMAL","EXTENDED"}; + int initial_sync(PHY_VARS_UE *phy_vars_ue, runmode_t mode) { @@ -251,20 +280,33 @@ int initial_sync(PHY_VARS_UE *phy_vars_ue, runmode_t mode) uint8_t flip_fdd_ncp,flip_fdd_ecp,flip_tdd_ncp,flip_tdd_ecp; // uint16_t Nid_cell_fdd_ncp=0,Nid_cell_fdd_ecp=0,Nid_cell_tdd_ncp=0,Nid_cell_tdd_ecp=0; LTE_DL_FRAME_PARMS *frame_parms = &phy_vars_ue->lte_frame_parms; - // uint8_t i; + int i; int ret=-1; int aarx,rx_power=0; - + /*#ifdef OAI_USRP + __m128i *rxdata128; + #endif*/ // LOG_I(PHY,"**************************************************************\n"); // First try FDD normal prefix frame_parms->Ncp=NORMAL; frame_parms->frame_type=FDD; init_frame_parms(frame_parms,1); + // write_output("rxdata0.m","rxd0",phy_vars_ue->lte_ue_common_vars.rxdata[0],10*frame_parms->samples_per_tti,1,1); + + /*#ifdef OAI_USRP + for (aarx = 0; aarxnb_antennas_rx;aarx++) { + rxdata128 = (__m128i*)phy_vars_ue->lte_ue_common_vars.rxdata[aarx]; + for (i=0; i<(frame_parms->samples_per_tti*10)>>2; i++) { + rxdata128[i] = _mm_srai_epi16(rxdata128[i],4); + } + } + #endif*/ sync_pos = lte_sync_time(phy_vars_ue->lte_ue_common_vars.rxdata, frame_parms, (int *)&phy_vars_ue->lte_ue_common_vars.eNb_id); + // write_output("rxdata1.m","rxd1",phy_vars_ue->lte_ue_common_vars.rxdata[0],10*frame_parms->samples_per_tti,1,1); if (sync_pos >= frame_parms->nb_prefix_samples) sync_pos2 = sync_pos - frame_parms->nb_prefix_samples; else @@ -322,6 +364,7 @@ int initial_sync(PHY_VARS_UE *phy_vars_ue, runmode_t mode) init_frame_parms(&phy_vars_ue->lte_frame_parms,1); lte_gold(frame_parms,phy_vars_ue->lte_gold_table[0],frame_parms->Nid_cell); ret = pbch_detection(phy_vars_ue,mode); + // write_output("rxdata2.m","rxd2",phy_vars_ue->lte_ue_common_vars.rxdata[0],10*frame_parms->samples_per_tti,1,1); #ifdef DEBUG_INITIAL_SYNCH LOG_I(PHY,"FDD Normal prefix: CellId %d metric %d, phase %d, flip %d, pbch %d\n", @@ -368,7 +411,7 @@ int initial_sync(PHY_VARS_UE *phy_vars_ue, runmode_t mode) init_frame_parms(&phy_vars_ue->lte_frame_parms,1); lte_gold(frame_parms,phy_vars_ue->lte_gold_table[0],frame_parms->Nid_cell); ret = pbch_detection(phy_vars_ue,mode); - + // write_output("rxdata3.m","rxd3",phy_vars_ue->lte_ue_common_vars.rxdata[0],10*frame_parms->samples_per_tti,1,1); #ifdef DEBUG_INITIAL_SYNCH LOG_I(PHY,"FDD Extended prefix: CellId %d metric %d, phase %d, flip %d, pbch %d\n", frame_parms->Nid_cell,metric_fdd_ecp,phase_fdd_ecp,flip_fdd_ecp,ret); @@ -415,7 +458,7 @@ int initial_sync(PHY_VARS_UE *phy_vars_ue, runmode_t mode) lte_gold(frame_parms,phy_vars_ue->lte_gold_table[0],frame_parms->Nid_cell); ret = pbch_detection(phy_vars_ue,mode); - + // write_output("rxdata4.m","rxd4",phy_vars_ue->lte_ue_common_vars.rxdata[0],10*frame_parms->samples_per_tti,1,1); #ifdef DEBUG_INITIAL_SYNCH LOG_I(PHY,"TDD Normal prefix: CellId %d metric %d, phase %d, flip %d, pbch %d\n", @@ -462,6 +505,7 @@ int initial_sync(PHY_VARS_UE *phy_vars_ue, runmode_t mode) lte_gold(frame_parms,phy_vars_ue->lte_gold_table[0],frame_parms->Nid_cell); ret = pbch_detection(phy_vars_ue,mode); + // write_output("rxdata5.m","rxd5",phy_vars_ue->lte_ue_common_vars.rxdata[0],10*frame_parms->samples_per_tti,1,1); #ifdef DEBUG_INITIAL_SYNCH LOG_I(PHY,"TDD Extended prefix: CellId %d metric %d, phase %d, flip %d, pbch %d\n", frame_parms->Nid_cell,metric_tdd_ecp,phase_tdd_ecp,flip_tdd_ecp,ret); @@ -480,26 +524,56 @@ int initial_sync(PHY_VARS_UE *phy_vars_ue, runmode_t mode) if (ret==0) { // PBCH found so indicate sync to higher layers and configure frame parameters #ifdef DEBUG_INITIAL_SYNCH - LOG_I(PHY,"[PHY][UE%d] In synch, rx_offset %d samples\n",phy_vars_ue->Mod_id, phy_vars_ue->rx_offset); + LOG_I(PHY,"[UE%d] In synch, rx_offset %d samples\n",phy_vars_ue->Mod_id, phy_vars_ue->rx_offset); #endif + + if (phy_vars_ue->UE_scan_carrier == 0) { #ifdef OPENAIR2 - LOG_I(PHY,"[PHY][UE%d] Sending synch status to higher layers\n",phy_vars_ue->Mod_id); - //mac_resynch(); - mac_xface->dl_phy_sync_success(phy_vars_ue->Mod_id,phy_vars_ue->frame_rx,0,1);//phy_vars_ue->lte_ue_common_vars.eNb_id); + LOG_I(PHY,"[UE%d] Sending synch status to higher layers\n",phy_vars_ue->Mod_id); + //mac_resynch(); + mac_xface->dl_phy_sync_success(phy_vars_ue->Mod_id,phy_vars_ue->frame_rx,0,1);//phy_vars_ue->lte_ue_common_vars.eNb_id); #endif //OPENAIR2 - - generate_pcfich_reg_mapping(frame_parms); - generate_phich_reg_mapping(frame_parms); - // init_prach625(frame_parms); + + generate_pcfich_reg_mapping(frame_parms); + generate_phich_reg_mapping(frame_parms); + // init_prach625(frame_parms); #ifndef OPENAIR2 - phy_vars_ue->UE_mode[0] = PUSCH; + phy_vars_ue->UE_mode[0] = PUSCH; #else - phy_vars_ue->UE_mode[0] = PRACH; + phy_vars_ue->UE_mode[0] = PRACH; #endif - //phy_vars_ue->lte_ue_pbch_vars[0]->pdu_errors=0; - phy_vars_ue->lte_ue_pbch_vars[0]->pdu_errors_conseq=0; + //phy_vars_ue->lte_ue_pbch_vars[0]->pdu_errors=0; + phy_vars_ue->lte_ue_pbch_vars[0]->pdu_errors_conseq=0; //phy_vars_ue->lte_ue_pbch_vars[0]->pdu_errors_last=0; + } + LOG_I(PHY,"[UE %d] Frame %d RRC Measurements => rssi %3.1f dBm (dig %3.1f dB, gain %d), N0 %d dBm, rsrp %3.1f dBm/RE, rsrq %3.1f dB\n",phy_vars_ue->Mod_id, + phy_vars_ue->frame_rx, + 10*log10(phy_vars_ue->PHY_measurements.rssi)-phy_vars_ue->rx_total_gain_dB, + 10*log10(phy_vars_ue->PHY_measurements.rssi), + phy_vars_ue->rx_total_gain_dB, + phy_vars_ue->PHY_measurements.n0_power_tot_dBm, + 10*log10(phy_vars_ue->PHY_measurements.rsrp[0])-phy_vars_ue->rx_total_gain_dB, + (10*log10(phy_vars_ue->PHY_measurements.rsrq[0]))); + + + LOG_I(PHY,"[UE %d] Frame %d MIB Information => %s, %s, NidCell %d, N_RB_DL %d, PHICH DURATION %d, PHICH RESOURCE %s, TX_ANT %d\n", + phy_vars_ue->Mod_id, + phy_vars_ue->frame_rx, + duplex_string[phy_vars_ue->lte_frame_parms.frame_type], + prefix_string[phy_vars_ue->lte_frame_parms.Ncp], + phy_vars_ue->lte_frame_parms.Nid_cell, + phy_vars_ue->lte_frame_parms.N_RB_DL, + phy_vars_ue->lte_frame_parms.phich_config_common.phich_duration, + phich_string[phy_vars_ue->lte_frame_parms.phich_config_common.phich_resource], + phy_vars_ue->lte_frame_parms.nb_antennas_tx_eNB); +#if defined(OAI_USRP) || defined(EXMIMO) + LOG_I(PHY,"[UE %d] Frame %d Measured Carrier Frequency %.0f Hz (offset %d Hz)\n", + phy_vars_ue->Mod_id, + phy_vars_ue->frame_rx, + openair0_cfg[0].rx_freq[0]-phy_vars_ue->lte_ue_common_vars.freq_offset, + phy_vars_ue->lte_ue_common_vars.freq_offset); +#endif } else { #ifdef DEBUG_INITIAL_SYNC LOG_I(PHY,"[UE%d] Initial sync : PBCH not ok\n",phy_vars_ue->Mod_id); @@ -521,5 +595,7 @@ int initial_sync(PHY_VARS_UE *phy_vars_ue, runmode_t mode) } + // exit_fun("debug exit"); return ret; } + diff --git a/openair1/PHY/LTE_TRANSPORT/pbch.c b/openair1/PHY/LTE_TRANSPORT/pbch.c index c4b18337a5..0582a63956 100755 --- a/openair1/PHY/LTE_TRANSPORT/pbch.c +++ b/openair1/PHY/LTE_TRANSPORT/pbch.c @@ -531,7 +531,7 @@ uint16_t pbch_extract(int **rxdataF, return(0); } -__m128i avg128; +//__m128i avg128; //compute average channel_level on each (TX,RX) antenna pair int pbch_channel_level(int **dl_ch_estimates_ext, @@ -541,7 +541,14 @@ int pbch_channel_level(int **dl_ch_estimates_ext, int16_t rb, nb_rb=6; uint8_t aatx,aarx; + +#if defined(__x86_64__) || defined(__i386__) + __m128i avg128; __m128i *dl_ch128; +#elif defined(__arm__) + int32x4_t avg128; + int16x8_t *dl_ch128; +#endif int avg1=0,avg2=0; uint32_t nsymb = (frame_parms->Ncp==0) ? 7:6; @@ -550,15 +557,23 @@ int pbch_channel_level(int **dl_ch_estimates_ext, for (aatx=0; aatx<4; aatx++) //frame_parms->nb_antennas_tx_eNB;aatx++) for (aarx=0; aarxnb_antennas_rx; aarx++) { //clear average level + +#if defined(__x86_64__) || defined(__i386__) avg128 = _mm_setzero_si128(); dl_ch128=(__m128i *)&dl_ch_estimates_ext[(aatx<<1)+aarx][symbol_mod*6*12]; +#elif defined(__arm__) + avg128 = vdupq_n_s32(0); + dl_ch128=(int16x8_t *)&dl_ch_estimates_ext[(aatx<<1)+aarx][symbol_mod*6*12]; +#endif for (rb=0; rb=(7-frame_parms->Ncp)) ? symbol-(7-frame_parms->Ncp) : symbol; for (aatx=0; aatx<4; aatx++) //frame_parms->nb_antennas_tx_eNB;aatx++) for (aarx=0; aarxnb_antennas_rx; aarx++) { +#if defined(__x86_64__) || defined(__i386__) dl_ch128 = (__m128i *)&dl_ch_estimates_ext[(aatx<<1)+aarx][symbol_mod*6*12]; rxdataF128 = (__m128i *)&rxdataF_ext[aarx][symbol_mod*6*12]; rxdataF_comp128 = (__m128i *)&rxdataF_comp[(aatx<<1)+aarx][symbol_mod*6*12]; +#elif defined(__arm__) +// to be filled in +#endif for (rb=0; rb=(7-frame_parms->Ncp)) ? symbol-(7-frame_parms->Ncp) : symbol; if (frame_parms->nb_antennas_rx>1) { for (aatx=0; aatx<4; aatx++) { //frame_parms->nb_antennas_tx_eNB;aatx++) { +#if defined(__x86_64__) || defined(__i386__) rxdataF_comp128_0 = (__m128i *)&rxdataF_comp[(aatx<<1)][symbol_mod*6*12]; rxdataF_comp128_1 = (__m128i *)&rxdataF_comp[(aatx<<1)+1][symbol_mod*6*12]; +#elif defined(__arm__) + rxdataF_comp128_0 = (int16x8_t *)&rxdataF_comp[(aatx<<1)][symbol_mod*6*12]; + rxdataF_comp128_1 = (int16x8_t *)&rxdataF_comp[(aatx<<1)+1][symbol_mod*6*12]; +#endif // MRC on each re of rb, both on MF output and magnitude (for 16QAM/64QAM llr computation) for (i=0; iphich_config_common.phich_resource*frame_parms->N_RB_DL)/48; + if (((frame_parms->phich_config_common.phich_resource*frame_parms->N_RB_DL)%48) > 0) Ngroup_PHICH++; @@ -299,16 +300,25 @@ void generate_phich_reg_mapping(LTE_DL_FRAME_PARMS *frame_parms) Ngroup_PHICH<<=1; } -#ifdef DEBUG_PHICH - LOG_D(PHY,"Ngroup_PHICH %d (phich_config_common.phich_resource %d,NidCell %d,Ncp %d, frame_type %d)\n",((frame_parms->Ncp == 0)?Ngroup_PHICH:(Ngroup_PHICH>>1)), - frame_parms->phich_config_common.phich_resource, - frame_parms->Nid_cell,frame_parms->Ncp,frame_parms->frame_type); -#endif + //#ifdef DEBUG_PHICH + printf("Ngroup_PHICH %d (phich_config_common.phich_resource %d,phich_config_common.phich_duration %s, NidCell %d,Ncp %d, frame_type %d), smallest pcfich REG %d, n0 %d, n1 %d (first PHICH REG %d)\n", + ((frame_parms->Ncp == NORMAL)?Ngroup_PHICH:(Ngroup_PHICH>>1)), + frame_parms->phich_config_common.phich_resource, + frame_parms->phich_config_common.phich_duration==normal?"normal":"extended", + frame_parms->Nid_cell,frame_parms->Ncp,frame_parms->frame_type, + pcfich_reg[frame_parms->pcfich_first_reg_idx], + n0, + n1, + ((frame_parms->Nid_cell))%n0); + //#endif - // This is the algorithm from Section 6.9.3 in 36-211 - for (mprime=0; mprime<((frame_parms->Ncp == 0)?Ngroup_PHICH:(Ngroup_PHICH>>1)); mprime++) { + // This is the algorithm from Section 6.9.3 in 36-211, it works only for normal PHICH duration for now ... - if (frame_parms->Ncp==0) { // normal prefix + for (mprime=0; + mprime<((frame_parms->Ncp == NORMAL)?Ngroup_PHICH:(Ngroup_PHICH>>1)); + mprime++) { + + if (frame_parms->phich_config_common.phich_duration==normal) { // normal PHICH duration frame_parms->phich_reg[mprime][0] = (frame_parms->Nid_cell + mprime)%n0; @@ -326,9 +336,10 @@ void generate_phich_reg_mapping(LTE_DL_FRAME_PARMS *frame_parms) frame_parms->phich_reg[mprime][1] = (frame_parms->Nid_cell + mprime + (n0/3))%n0; + if (frame_parms->phich_reg[mprime][1]>=pcfich_reg[frame_parms->pcfich_first_reg_idx]) frame_parms->phich_reg[mprime][1]++; - + if (frame_parms->phich_reg[mprime][1]>=pcfich_reg[(frame_parms->pcfich_first_reg_idx+1)&3]) frame_parms->phich_reg[mprime][1]++; @@ -337,9 +348,10 @@ void generate_phich_reg_mapping(LTE_DL_FRAME_PARMS *frame_parms) if (frame_parms->phich_reg[mprime][1]>=pcfich_reg[(frame_parms->pcfich_first_reg_idx+3)&3]) frame_parms->phich_reg[mprime][1]++; + frame_parms->phich_reg[mprime][2] = (frame_parms->Nid_cell + mprime + (2*n0/3))%n0; - + if (frame_parms->phich_reg[mprime][2]>=pcfich_reg[frame_parms->pcfich_first_reg_idx]) frame_parms->phich_reg[mprime][2]++; @@ -351,11 +363,11 @@ void generate_phich_reg_mapping(LTE_DL_FRAME_PARMS *frame_parms) if (frame_parms->phich_reg[mprime][2]>=pcfich_reg[(frame_parms->pcfich_first_reg_idx+3)&3]) frame_parms->phich_reg[mprime][2]++; - -#ifdef DEBUG_PHICH - LOG_D(PHY,"phich_reg :%d => %d,%d,%d\n",mprime,frame_parms->phich_reg[mprime][0],frame_parms->phich_reg[mprime][1],frame_parms->phich_reg[mprime][2]); -#endif - } else { // extended prefix + + //#ifdef DEBUG_PHICH + printf("phich_reg :%d => %d,%d,%d\n",mprime,frame_parms->phich_reg[mprime][0],frame_parms->phich_reg[mprime][1],frame_parms->phich_reg[mprime][2]); + //#endif + } else { // extended PHICH duration frame_parms->phich_reg[mprime<<1][0] = (frame_parms->Nid_cell + mprime)%n0; frame_parms->phich_reg[1+(mprime<<1)][0] = (frame_parms->Nid_cell + mprime)%n0; @@ -364,10 +376,10 @@ void generate_phich_reg_mapping(LTE_DL_FRAME_PARMS *frame_parms) frame_parms->phich_reg[1+(mprime<<1)][1] = ((frame_parms->Nid_cell*n1/n0) + mprime + (n1/3))%n1; frame_parms->phich_reg[1+(mprime<<1)][2] = ((frame_parms->Nid_cell*n2/n0) + mprime + (2*n2/3))%n2; -#ifdef DEBUG_PHICH - LOG_D(PHY,"phich_reg :%d => %d,%d,%d\n",mprime<<1,frame_parms->phich_reg[mprime<<1][0],frame_parms->phich_reg[mprime][1],frame_parms->phich_reg[mprime][2]); - LOG_D(PHY,"phich_reg :%d => %d,%d,%d\n",1+(mprime<<1),frame_parms->phich_reg[1+(mprime<<1)][0],frame_parms->phich_reg[1+(mprime<<1)][1],frame_parms->phich_reg[1+(mprime<<1)][2]); -#endif + //#ifdef DEBUG_PHICH + printf("phich_reg :%d => %d,%d,%d\n",mprime<<1,frame_parms->phich_reg[mprime<<1][0],frame_parms->phich_reg[mprime][1],frame_parms->phich_reg[mprime][2]); + printf("phich_reg :%d => %d,%d,%d\n",1+(mprime<<1),frame_parms->phich_reg[1+(mprime<<1)][0],frame_parms->phich_reg[1+(mprime<<1)][1],frame_parms->phich_reg[1+(mprime<<1)][2]); + //#endif } } // mprime loop } // num_pdcch_symbols loop diff --git a/openair1/PHY/LTE_TRANSPORT/pmch.c b/openair1/PHY/LTE_TRANSPORT/pmch.c index 422f607464..5802233b81 100644 --- a/openair1/PHY/LTE_TRANSPORT/pmch.c +++ b/openair1/PHY/LTE_TRANSPORT/pmch.c @@ -257,23 +257,31 @@ void fill_UE_dlsch_MCH(PHY_VARS_UE *phy_vars_ue,int mcs,int ndi,int rvidx,int eN switch(frame_parms->N_RB_DL) { case 6: - dlsch->harq_processes[0]->rb_alloc[0] = 0x3f; + dlsch->harq_processes[0]->rb_alloc_even[0] = 0x3f; + dlsch->harq_processes[0]->rb_alloc_odd[0] = 0x3f; break; case 25: - dlsch->harq_processes[0]->rb_alloc[0] = 0x1ffffff; + dlsch->harq_processes[0]->rb_alloc_even[0] = 0x1ffffff; + dlsch->harq_processes[0]->rb_alloc_odd[0] = 0x1ffffff; break; case 50: - dlsch->harq_processes[0]->rb_alloc[0] = 0xffffffff; - dlsch->harq_processes[0]->rb_alloc[1] = 0x3ffff; + dlsch->harq_processes[0]->rb_alloc_even[0] = 0xffffffff; + dlsch->harq_processes[0]->rb_alloc_odd[0] = 0xffffffff; + dlsch->harq_processes[0]->rb_alloc_even[1] = 0x3ffff; + dlsch->harq_processes[0]->rb_alloc_odd[1] = 0x3ffff; break; case 100: - dlsch->harq_processes[0]->rb_alloc[0] = 0xffffffff; - dlsch->harq_processes[0]->rb_alloc[1] = 0xffffffff; - dlsch->harq_processes[0]->rb_alloc[2] = 0xffffffff; - dlsch->harq_processes[0]->rb_alloc[3] = 0xf; + dlsch->harq_processes[0]->rb_alloc_even[0] = 0xffffffff; + dlsch->harq_processes[0]->rb_alloc_odd[0] = 0xffffffff; + dlsch->harq_processes[0]->rb_alloc_even[1] = 0xffffffff; + dlsch->harq_processes[0]->rb_alloc_odd[1] = 0xffffffff; + dlsch->harq_processes[0]->rb_alloc_even[2] = 0xffffffff; + dlsch->harq_processes[0]->rb_alloc_odd[2] = 0xffffffff; + dlsch->harq_processes[0]->rb_alloc_even[3] = 0xf; + dlsch->harq_processes[0]->rb_alloc_odd[3] = 0xf; break; } } @@ -395,22 +403,33 @@ void mch_channel_level(int **dl_ch_estimates_ext, { int i,aarx,nre; +#if defined(__x86_64__) || defined(__i386__) __m128i *dl_ch128,avg128; - +#elif defined(__arm__) + int32x4_t avg128; +#endif for (aarx=0; aarxnb_antennas_rx; aarx++) { - //clear average level +#if defined(__x86_64__) || defined(__i386__) + //clear average level avg128 = _mm_setzero_si128(); // 5 is always a symbol with no pilots for both normal and extended prefix dl_ch128=(__m128i *)&dl_ch_estimates_ext[aarx][symbol*frame_parms->N_RB_DL*12]; +#elif defined(__arm__) + +#endif if ((symbol == 2) || (symbol == 6) || (symbol == 10)) nre = (frame_parms->N_RB_DL*6); else nre = (frame_parms->N_RB_DL*12); for (i=0; i<(nre>>2); i++) { +#if defined(__x86_64__) || defined(__i386__) avg128 = _mm_add_epi32(avg128,_mm_madd_epi16(dl_ch128[0],dl_ch128[0])); +#elif defined(__arm__) + +#endif } avg[aarx] = (((int*)&avg128)[0] + @@ -421,9 +440,10 @@ void mch_channel_level(int **dl_ch_estimates_ext, // printf("Channel level : %d\n",avg[(aatx<<1)+aarx]); } +#if defined(__x86_64__) || defined(__i386__) _mm_empty(); _m_empty(); - +#endif } void mch_channel_compensation(int **rxdataF_ext, @@ -438,14 +458,18 @@ void mch_channel_compensation(int **rxdataF_ext, { int aarx,nre,i; +#if defined(__x86_64__) || defined(__i386__) __m128i *dl_ch128,*dl_ch_mag128,*dl_ch_mag128b,*rxdataF128,*rxdataF_comp128; __m128i mmtmpD0,mmtmpD1,mmtmpD2,mmtmpD3,QAM_amp128,QAM_amp128b; +#elif defined(__arm__) +#endif if ((symbol == 2) || (symbol == 6) || (symbol == 10)) nre = frame_parms->N_RB_DL*6; else nre = frame_parms->N_RB_DL*12; +#if defined(__x86_64__) || defined(__i386__) if (mod_order == 4) { QAM_amp128 = _mm_set1_epi16(QAM16_n1); // 2/sqrt(10) QAM_amp128b = _mm_setzero_si128(); @@ -453,21 +477,27 @@ void mch_channel_compensation(int **rxdataF_ext, QAM_amp128 = _mm_set1_epi16(QAM64_n1); // QAM_amp128b = _mm_set1_epi16(QAM64_n2); } +#elif defined(__arm__) - +#endif for (aarx=0; aarxnb_antennas_rx; aarx++) { +#if defined(__x86_64__) || defined(__i386__) + dl_ch128 = (__m128i *)&dl_ch_estimates_ext[aarx][symbol*frame_parms->N_RB_DL*12]; dl_ch_mag128 = (__m128i *)&dl_ch_mag[aarx][symbol*frame_parms->N_RB_DL*12]; dl_ch_mag128b = (__m128i *)&dl_ch_magb[aarx][symbol*frame_parms->N_RB_DL*12]; rxdataF128 = (__m128i *)&rxdataF_ext[aarx][symbol*frame_parms->N_RB_DL*12]; rxdataF_comp128 = (__m128i *)&rxdataF_comp[aarx][symbol*frame_parms->N_RB_DL*12]; +#elif defined(__arm__) +#endif for (i=0; i<(nre>>2); i+=2) { if (mod_order>2) { // get channel amplitude if not QPSK +#if defined(__x86_64__) || defined(__i386__) mmtmpD0 = _mm_madd_epi16(dl_ch128[0],dl_ch128[0]); mmtmpD0 = _mm_srai_epi32(mmtmpD0,output_shift); @@ -497,8 +527,13 @@ void mch_channel_compensation(int **rxdataF_ext, dl_ch_mag128b[1] = _mm_mulhi_epi16(dl_ch_mag128b[1],QAM_amp128b); dl_ch_mag128b[1] = _mm_slli_epi16(dl_ch_mag128b[1],1); +#elif defined(__arm__) + +#endif } +#if defined(__x86_64__) || defined(__i386__) + // multiply by conjugated channel mmtmpD0 = _mm_madd_epi16(dl_ch128[0],rxdataF128[0]); // print_ints("re",&mmtmpD0); @@ -547,12 +582,17 @@ void mch_channel_compensation(int **rxdataF_ext, rxdataF128+=2; rxdataF_comp128+=2; +#elif defined(__arm__) +#endif } } +#if defined(__x86_64__) || defined(__i386__) _mm_empty(); _m_empty(); +#endif + } void mch_detection_mrc(LTE_DL_FRAME_PARMS *frame_parms, @@ -564,10 +604,15 @@ void mch_detection_mrc(LTE_DL_FRAME_PARMS *frame_parms, int i; +#if defined(__x86_64__) || defined(__i386__) __m128i *rxdataF_comp128_0,*rxdataF_comp128_1,*dl_ch_mag128_0,*dl_ch_mag128_1,*dl_ch_mag128_0b,*dl_ch_mag128_1b; - +#elif defined(__arm__) + int16x8_t *rxdataF_comp128_0,*rxdataF_comp128_1,*dl_ch_mag128_0,*dl_ch_mag128_1,*dl_ch_mag128_0b,*dl_ch_mag128_1b; +#endif if (frame_parms->nb_antennas_rx>1) { +#if defined(__x86_64__) || defined(__i386__) + rxdataF_comp128_0 = (__m128i *)&rxdataF_comp[0][symbol*frame_parms->N_RB_DL*12]; rxdataF_comp128_1 = (__m128i *)&rxdataF_comp[1][symbol*frame_parms->N_RB_DL*12]; dl_ch_mag128_0 = (__m128i *)&dl_ch_mag[0][symbol*frame_parms->N_RB_DL*12]; @@ -575,16 +620,32 @@ void mch_detection_mrc(LTE_DL_FRAME_PARMS *frame_parms, dl_ch_mag128_0b = (__m128i *)&dl_ch_magb[0][symbol*frame_parms->N_RB_DL*12]; dl_ch_mag128_1b = (__m128i *)&dl_ch_magb[1][symbol*frame_parms->N_RB_DL*12]; +#elif defined(__arm__) + rxdataF_comp128_0 = (int16x8_t *)&rxdataF_comp[0][symbol*frame_parms->N_RB_DL*12]; + rxdataF_comp128_1 = (int16x8_t *)&rxdataF_comp[1][symbol*frame_parms->N_RB_DL*12]; + dl_ch_mag128_0 = (int16x8_t *)&dl_ch_mag[0][symbol*frame_parms->N_RB_DL*12]; + dl_ch_mag128_1 = (int16x8_t *)&dl_ch_mag[1][symbol*frame_parms->N_RB_DL*12]; + dl_ch_mag128_0b = (int16x8_t *)&dl_ch_magb[0][symbol*frame_parms->N_RB_DL*12]; + dl_ch_mag128_1b = (int16x8_t *)&dl_ch_magb[1][symbol*frame_parms->N_RB_DL*12]; + +#endif // MRC on each re of rb, both on MF output and magnitude (for 16QAM/64QAM llr computation) for (i=0; iN_RB_DL*3; i++) { +#if defined(__x86_64__) || defined(__i386__) rxdataF_comp128_0[i] = _mm_adds_epi16(_mm_srai_epi16(rxdataF_comp128_0[i],1),_mm_srai_epi16(rxdataF_comp128_1[i],1)); dl_ch_mag128_0[i] = _mm_adds_epi16(_mm_srai_epi16(dl_ch_mag128_0[i],1),_mm_srai_epi16(dl_ch_mag128_1[i],1)); dl_ch_mag128_0b[i] = _mm_adds_epi16(_mm_srai_epi16(dl_ch_mag128_0b[i],1),_mm_srai_epi16(dl_ch_mag128_1b[i],1)); +#elif defined(__arm__) + rxdataF_comp128_0[i] = vhaddq_s16(rxdataF_comp128_0[i],rxdataF_comp128_1[i]); + dl_ch_mag128_0[i] = vhaddq_s16(dl_ch_mag128_0[i],dl_ch_mag128_1[i]); + dl_ch_mag128_0b[i] = vhaddq_s16(dl_ch_mag128_0b[i],dl_ch_mag128_1b[i]); +#endif } } - +#if defined(__x86_64__) || defined(__i386__) _mm_empty(); _m_empty(); +#endif } int mch_qpsk_llr(LTE_DL_FRAME_PARMS *frame_parms, @@ -625,8 +686,10 @@ int mch_qpsk_llr(LTE_DL_FRAME_PARMS *frame_parms, *llr32p = (short *)llr32; +#if defined(__x86_64__) || defined(__i386__) _mm_empty(); _m_empty(); +#endif return(0); } @@ -643,22 +706,38 @@ void mch_16qam_llr(LTE_DL_FRAME_PARMS *frame_parms, int16_t **llr32p) { +#if defined(__x86_64__) || defined(__i386__) __m128i *rxF = (__m128i*)&rxdataF_comp[0][(symbol*frame_parms->N_RB_DL*12)]; __m128i *ch_mag; __m128i llr128[2],xmm0; + uint32_t *llr32; +#elif defined(__arm__) + int16x8_t *rxF = (int16x8_t*)&rxdataF_comp[0][(symbol*frame_parms->N_RB_DL*12)]; + int16x8_t *ch_mag; + int16x8_t llr128[2],xmm0; + int16_t *llr16; +#endif int i,len; unsigned char len_mod4=0; - uint32_t *llr32; +#if defined(__x86_64__) || defined(__i386__) if (symbol==2) { llr32 = (uint32_t*)dlsch_llr; } else { llr32 = (uint32_t*)*llr32p; } - - +#elif defined(__arm__) + if (symbol==2) { + llr16 = (int16_t*)dlsch_llr; + } else { + llr16 = (int16_t*)*llr32p; + } +#endif +#if defined(__x86_64__) || defined(__i386__) ch_mag = (__m128i*)&dl_ch_mag[0][(symbol*frame_parms->N_RB_DL*12)]; - +#elif defined(__arm__) + ch_mag = (int16x8_t*)&dl_ch_mag[0][(symbol*frame_parms->N_RB_DL*12)]; +#endif if ((symbol==2) || (symbol==6) || (symbol==10)) { len = frame_parms->N_RB_DL*6; } else { @@ -679,6 +758,7 @@ void mch_16qam_llr(LTE_DL_FRAME_PARMS *frame_parms, for (i=0; iN_RB_DL*12)]; +#elif defined(__arm__) + int16x8_t xmm1,xmm2,*ch_mag,*ch_magb; + int16x8_t *rxF = (int16x8_t*)&rxdataF_comp[0][(symbol*frame_parms->N_RB_DL*12)]; +#endif int i,len,len2; // int j=0; @@ -727,9 +840,13 @@ void mch_64qam_llr(LTE_DL_FRAME_PARMS *frame_parms, else llr = *llr_save; +#if defined(__x86_64__) || defined(__i386__) ch_mag = (__m128i*)&dl_ch_mag[0][(symbol*frame_parms->N_RB_DL*12)]; ch_magb = (__m128i*)&dl_ch_magb[0][(symbol*frame_parms->N_RB_DL*12)]; - +#elif defined(__arm__) + ch_mag = (int16x8_t*)&dl_ch_mag[0][(symbol*frame_parms->N_RB_DL*12)]; + ch_magb = (int16x8_t*)&dl_ch_magb[0][(symbol*frame_parms->N_RB_DL*12)]; +#endif if ((symbol==2) || (symbol==6) || (symbol==10)) { len = frame_parms->N_RB_DL*6; } else { @@ -746,11 +863,18 @@ void mch_64qam_llr(LTE_DL_FRAME_PARMS *frame_parms, for (i=0; i mag (%d,%d) (%d,%d)\n",i,((short *)&ch_mag[i])[0],((short *)&ch_magb[i])[0], ((short *)&rxF[i])[0],((short *)&rxF[i])[1]); @@ -770,41 +894,68 @@ void mch_64qam_llr(LTE_DL_FRAME_PARMS *frame_parms, */ llr2[0] = ((short *)&rxF[i])[0]; llr2[1] = ((short *)&rxF[i])[1]; +#if defined(__x86_64__) || defined(__i386__) llr2[2] = _mm_extract_epi16(xmm1,0); llr2[3] = _mm_extract_epi16(xmm1,1);//((short *)&xmm1)[j+1]; llr2[4] = _mm_extract_epi16(xmm2,0);//((short *)&xmm2)[j]; llr2[5] = _mm_extract_epi16(xmm2,1);//((short *)&xmm2)[j+1]; +#elif defined(__arm__) + llr2[2] = vgetq_lane_s16(xmm1,0); + llr2[3] = vgetq_lane_s16(xmm1,1);//((short *)&xmm1)[j+1]; + llr2[4] = vgetq_lane_s16(xmm2,0);//((short *)&xmm2)[j]; + llr2[5] = vgetq_lane_s16(xmm2,1);//((short *)&xmm2)[j+1]; +#endif llr2+=6; llr2[0] = ((short *)&rxF[i])[2]; llr2[1] = ((short *)&rxF[i])[3]; +#if defined(__x86_64__) || defined(__i386__) llr2[2] = _mm_extract_epi16(xmm1,2); llr2[3] = _mm_extract_epi16(xmm1,3);//((short *)&xmm1)[j+1]; llr2[4] = _mm_extract_epi16(xmm2,2);//((short *)&xmm2)[j]; llr2[5] = _mm_extract_epi16(xmm2,3);//((short *)&xmm2)[j+1]; - +#elif defined(__arm__) + llr2[2] = vgetq_lane_s16(xmm1,2); + llr2[3] = vgetq_lane_s16(xmm1,3);//((short *)&xmm1)[j+1]; + llr2[4] = vgetq_lane_s16(xmm2,2);//((short *)&xmm2)[j]; + llr2[5] = vgetq_lane_s16(xmm2,3);//((short *)&xmm2)[j+1]; +#endif llr2+=6; llr2[0] = ((short *)&rxF[i])[4]; llr2[1] = ((short *)&rxF[i])[5]; +#if defined(__x86_64__) || defined(__i386__) llr2[2] = _mm_extract_epi16(xmm1,4); llr2[3] = _mm_extract_epi16(xmm1,5);//((short *)&xmm1)[j+1]; llr2[4] = _mm_extract_epi16(xmm2,4);//((short *)&xmm2)[j]; llr2[5] = _mm_extract_epi16(xmm2,5);//((short *)&xmm2)[j+1]; - +#elif defined(__arm__) + llr2[2] = vgetq_lane_s16(xmm1,4); + llr2[3] = vgetq_lane_s16(xmm1,5);//((short *)&xmm1)[j+1]; + llr2[4] = vgetq_lane_s16(xmm2,4);//((short *)&xmm2)[j]; + llr2[5] = vgetq_lane_s16(xmm2,5);//((short *)&xmm2)[j+1]; +#endif llr2+=6; llr2[0] = ((short *)&rxF[i])[6]; llr2[1] = ((short *)&rxF[i])[7]; +#if defined(__x86_64__) || defined(__i386__) llr2[2] = _mm_extract_epi16(xmm1,6); llr2[3] = _mm_extract_epi16(xmm1,7);//((short *)&xmm1)[j+1]; llr2[4] = _mm_extract_epi16(xmm2,6);//((short *)&xmm2)[j]; llr2[5] = _mm_extract_epi16(xmm2,7);//((short *)&xmm2)[j+1]; - +#elif defined(__arm__) + llr2[2] = vgetq_lane_s16(xmm1,6); + llr2[3] = vgetq_lane_s16(xmm1,7);//((short *)&xmm1)[j+1]; + llr2[4] = vgetq_lane_s16(xmm2,6);//((short *)&xmm2)[j]; + llr2[5] = vgetq_lane_s16(xmm2,7);//((short *)&xmm2)[j+1]; +#endif llr2+=6; } *llr_save = llr; +#if defined(__x86_64__) || defined(__i386__) _mm_empty(); _m_empty(); +#endif } int avg_pmch[4]; diff --git a/openair1/PHY/LTE_TRANSPORT/prach.c b/openair1/PHY/LTE_TRANSPORT/prach.c index 4749598616..527733cca5 100644 --- a/openair1/PHY/LTE_TRANSPORT/prach.c +++ b/openair1/PHY/LTE_TRANSPORT/prach.c @@ -435,6 +435,51 @@ uint8_t get_prach_fmt(uint8_t prach_ConfigIndex,lte_frame_type_t frame_type) } } +uint8_t get_prach_prb_offset(LTE_DL_FRAME_PARMS *frame_parms, uint8_t tdd_mapindex, uint16_t Nf) +{ + lte_frame_type_t frame_type = frame_parms->frame_type; + uint8_t tdd_config = frame_parms->tdd_config; + uint8_t prach_ConfigIndex = frame_parms->prach_config_common.prach_ConfigInfo.prach_ConfigIndex; + uint8_t n_ra_prboffset = frame_parms->prach_config_common.prach_ConfigInfo.prach_FreqOffset; + uint8_t n_ra_prb; + uint8_t f_ra,t1_ra; + uint8_t prach_fmt = get_prach_fmt(prach_ConfigIndex,frame_type); + uint8_t Nsp=2; + + if (frame_type == TDD) { // TDD + + if (tdd_preamble_map[prach_ConfigIndex][tdd_config].num_prach==0) { + LOG_E(PHY, "Illegal prach_ConfigIndex %"PRIu8"", prach_ConfigIndex); + return(-1); + } + + // adjust n_ra_prboffset for frequency multiplexing (p.36 36.211) + f_ra = tdd_preamble_map[prach_ConfigIndex][tdd_config].map[tdd_mapindex].f_ra; + + if (prach_fmt < 4) { + if ((f_ra&1) == 0) { + n_ra_prb = n_ra_prboffset + 6*(f_ra>>1); + } else { + n_ra_prb = frame_parms->N_RB_UL - 6 - n_ra_prboffset + 6*(f_ra>>1); + } + } else { + if ((tdd_config >2) && (tdd_config<6)) + Nsp = 2; + + t1_ra = tdd_preamble_map[prach_ConfigIndex][tdd_config].map[0].t1_ra; + + if ((((Nf&1)*(2-Nsp)+t1_ra)&1) == 0) { + n_ra_prb = 6*f_ra; + } else { + n_ra_prb = frame_parms->N_RB_UL - 6*(f_ra+1); + } + } + } + else { //FDD + n_ra_prb = n_ra_prboffset; + } + return(n_ra_prb); +} int is_prach_subframe(LTE_DL_FRAME_PARMS *frame_parms,uint32_t frame, uint8_t subframe) { @@ -554,12 +599,12 @@ int32_t generate_prach( PHY_VARS_UE *phy_vars_ue, uint8_t eNB_id, uint8_t subfra { lte_frame_type_t frame_type = phy_vars_ue->lte_frame_parms.frame_type; - uint8_t tdd_config = phy_vars_ue->lte_frame_parms.tdd_config; + //uint8_t tdd_config = phy_vars_ue->lte_frame_parms.tdd_config; uint16_t rootSequenceIndex = phy_vars_ue->lte_frame_parms.prach_config_common.rootSequenceIndex; uint8_t prach_ConfigIndex = phy_vars_ue->lte_frame_parms.prach_config_common.prach_ConfigInfo.prach_ConfigIndex; uint8_t Ncs_config = phy_vars_ue->lte_frame_parms.prach_config_common.prach_ConfigInfo.zeroCorrelationZoneConfig; uint8_t restricted_set = phy_vars_ue->lte_frame_parms.prach_config_common.prach_ConfigInfo.highSpeedFlag; - uint8_t n_ra_prboffset = phy_vars_ue->lte_frame_parms.prach_config_common.prach_ConfigInfo.prach_FreqOffset; + //uint8_t n_ra_prboffset = phy_vars_ue->lte_frame_parms.prach_config_common.prach_ConfigInfo.prach_FreqOffset; uint8_t preamble_index = phy_vars_ue->prach_resources[eNB_id]->ra_PreambleIndex; uint8_t tdd_mapindex = phy_vars_ue->prach_resources[eNB_id]->ra_TDD_map_index; int16_t *prachF = phy_vars_ue->lte_ue_prach_vars[eNB_id]->prachF; @@ -576,8 +621,8 @@ int32_t generate_prach( PHY_VARS_UE *phy_vars_ue, uint8_t eNB_id, uint8_t subfra uint16_t d_start,numshift; uint8_t prach_fmt = get_prach_fmt(prach_ConfigIndex,frame_type); - uint8_t Nsp=2; - uint8_t f_ra,t1_ra; + //uint8_t Nsp=2; + //uint8_t f_ra,t1_ra; uint16_t N_ZC = (prach_fmt<4)?839:139; uint8_t not_found; int k; @@ -592,7 +637,7 @@ int32_t generate_prach( PHY_VARS_UE *phy_vars_ue, uint8_t eNB_id, uint8_t subfra #ifdef BIT8_TX prach_start = ((subframe*phy_vars_ue->lte_frame_parms.samples_per_tti)<<1)-phy_vars_ue->N_TA_offset; #else -#ifdef EXMIMO +#if defined(EXMIMO) || defined(OAI_USRP) prach_start = (phy_vars_ue->rx_offset+subframe*phy_vars_ue->lte_frame_parms.samples_per_tti-openair_daq_vars.timing_advance-phy_vars_ue->N_TA_offset); if (prach_start<0) @@ -625,9 +670,11 @@ int32_t generate_prach( PHY_VARS_UE *phy_vars_ue, uint8_t eNB_id, uint8_t subfra NCS = NCS_restricted[Ncs_config]; } - n_ra_prb = n_ra_prboffset; + n_ra_prb = get_prach_prb_offset(&(phy_vars_ue->lte_frame_parms), tdd_mapindex, Nf); prach_root_sequence_map = (prach_fmt<4) ? prach_root_sequence_map0_3 : prach_root_sequence_map4; + /* + // this code is not part of get_prach_prb_offset if (frame_type == TDD) { // TDD if (tdd_preamble_map[prach_ConfigIndex][tdd_config].num_prach==0) { @@ -656,6 +703,7 @@ int32_t generate_prach( PHY_VARS_UE *phy_vars_ue, uint8_t eNB_id, uint8_t subfra } } } + */ // This is the relative offset (for unrestricted case) in the root sequence table (5.7.2-4 from 36.211) for the given preamble index preamble_offset = ((NCS==0)? preamble_index : (preamble_index/(N_ZC/NCS))); @@ -979,7 +1027,17 @@ int32_t generate_prach( PHY_VARS_UE *phy_vars_ue, uint8_t eNB_id, uint8_t subfra ((int16_t*)phy_vars_ue->lte_ue_common_vars.txdata[0])[2*i] = prach[2*j]<<4; ((int16_t*)phy_vars_ue->lte_ue_common_vars.txdata[0])[2*i+1] = prach[2*j+1]<<4; } - +#if defined(EXMIMO) + // handle switch before 1st TX subframe, guarantee that the slot prior to transmission is switch on + for (k=prach_start - (phy_vars_ue->lte_frame_parms.samples_per_tti>>1) ; klte_ue_common_vars.txdata[0][k+phy_vars_ue->lte_frame_parms.samples_per_tti*LTE_NUMBER_OF_SUBFRAMES_PER_FRAME] &= 0xFFFEFFFE; + else if (k>(phy_vars_ue->lte_frame_parms.samples_per_tti*LTE_NUMBER_OF_SUBFRAMES_PER_FRAME)) + phy_vars_ue->lte_ue_common_vars.txdata[0][k-phy_vars_ue->lte_frame_parms.samples_per_tti*LTE_NUMBER_OF_SUBFRAMES_PER_FRAME] &= 0xFFFEFFFE; + else + phy_vars_ue->lte_ue_common_vars.txdata[0][k] &= 0xFFFEFFFE; + } +#endif #else for (i=0; ilte_frame_parms.frame_type; - uint8_t tdd_config = phy_vars_eNB->lte_frame_parms.tdd_config; + //uint8_t tdd_config = phy_vars_eNB->lte_frame_parms.tdd_config; uint16_t rootSequenceIndex = phy_vars_eNB->lte_frame_parms.prach_config_common.rootSequenceIndex; uint8_t prach_ConfigIndex = phy_vars_eNB->lte_frame_parms.prach_config_common.prach_ConfigInfo.prach_ConfigIndex; uint8_t Ncs_config = phy_vars_eNB->lte_frame_parms.prach_config_common.prach_ConfigInfo.zeroCorrelationZoneConfig; uint8_t restricted_set = phy_vars_eNB->lte_frame_parms.prach_config_common.prach_ConfigInfo.highSpeedFlag; - uint8_t n_ra_prboffset = phy_vars_eNB->lte_frame_parms.prach_config_common.prach_ConfigInfo.prach_FreqOffset; + //uint8_t n_ra_prboffset = phy_vars_eNB->lte_frame_parms.prach_config_common.prach_ConfigInfo.prach_FreqOffset; int16_t *prachF = phy_vars_eNB->lte_eNB_prach_vars.prachF; int16_t **rxsigF = phy_vars_eNB->lte_eNB_prach_vars.rxsigF; int16_t **prach_ifft = phy_vars_eNB->lte_eNB_prach_vars.prach_ifft; @@ -1031,8 +1086,8 @@ void rx_prach(PHY_VARS_eNB *phy_vars_eNB,uint8_t subframe,uint16_t *preamble_ene uint16_t numshift=0; uint16_t *prach_root_sequence_map; uint8_t prach_fmt = get_prach_fmt(prach_ConfigIndex,frame_type); - uint8_t Nsp=2; - uint8_t f_ra,t1_ra; + //uint8_t Nsp=2; + //uint8_t f_ra,t1_ra; uint16_t N_ZC = (prach_fmt <4)?839:139; uint8_t not_found; // LTE_DL_FRAME_PARMS *frame_parms = &phy_vars_eNB->lte_frame_parms; @@ -1076,9 +1131,11 @@ void rx_prach(PHY_VARS_eNB *phy_vars_eNB,uint8_t subframe,uint16_t *preamble_ene start_meas(&phy_vars_eNB->rx_prach); - n_ra_prb = n_ra_prboffset; + n_ra_prb = get_prach_prb_offset(&(phy_vars_eNB->lte_frame_parms),tdd_mapindex,Nf); prach_root_sequence_map = (prach_fmt < 4) ? prach_root_sequence_map0_3 : prach_root_sequence_map4; + /* + // this code is now part of get_prach_prb_offset if (frame_type == TDD) { // TDD // adjust n_ra_prboffset for frequency multiplexing (p.36 36.211) @@ -1105,6 +1162,7 @@ void rx_prach(PHY_VARS_eNB *phy_vars_eNB,uint8_t subframe,uint16_t *preamble_ene } } + */ // printf("NCS %d\n",NCS); // PDP is oversampled, e.g. 1024 sample instead of 839 diff --git a/openair1/PHY/LTE_TRANSPORT/print_stats.c b/openair1/PHY/LTE_TRANSPORT/print_stats.c index 3316b8aaa6..2bc4fca53c 100644 --- a/openair1/PHY/LTE_TRANSPORT/print_stats.c +++ b/openair1/PHY/LTE_TRANSPORT/print_stats.c @@ -67,8 +67,15 @@ int dump_ue_stats(PHY_VARS_UE *phy_vars_ue, char* buffer, int length, runmode_t if ((mode == normal_txrx) || (mode == no_L2_connect)) { len += sprintf(&buffer[len], "[UE_PROC] UE %d, RNTI %x\n",phy_vars_ue->Mod_id, phy_vars_ue->lte_ue_pdcch_vars[0]->crnti); + len += sprintf(&buffer[len],"[UE PROC] RSRP[0] %.2f dBm/RE, RSSI %.2f dBm, RSRQ[0] %.2f dB, N0 %d dBm/RE\n", + 10*log10(phy_vars_ue->PHY_measurements.rsrp[0])-phy_vars_ue->rx_total_gain_dB, + 10*log10(phy_vars_ue->PHY_measurements.rssi)-phy_vars_ue->rx_total_gain_dB, + 10*log10(phy_vars_ue->PHY_measurements.rsrq[0]), + phy_vars_ue->PHY_measurements.n0_power_tot_dBm); + + /* len += sprintf(&buffer[len], - "[UE PROC] Frame count: %d\neNB0 RSSI %d dBm/RE (%d dB, %d dB)\neNB1 RSSI %d dBm/RE (%d dB, %d dB)\neNB2 RSSI %d dBm/RE (%d dB, %d dB)\nN0 %d dBm/RE, %f dBm/%dPRB (%d dB, %d dB)\n", + "[UE PROC] Frame count: %d\neNB0 RSSI %d dBm/RE (%d dB, %d dB)\neNB1 RSSI %d dBm/RE (%d dB, %d dB)neNB2 RSSI %d dBm/RE (%d dB, %d dB)\nN0 %d dBm/RE, %f dBm/%dPRB (%d dB, %d dB)\n", phy_vars_ue->frame_rx, phy_vars_ue->PHY_measurements.rx_rssi_dBm[0], phy_vars_ue->PHY_measurements.rx_power_dB[0][0], @@ -84,18 +91,32 @@ int dump_ue_stats(PHY_VARS_UE *phy_vars_ue, char* buffer, int length, runmode_t phy_vars_ue->lte_frame_parms.N_RB_DL, phy_vars_ue->PHY_measurements.n0_power_dB[0], phy_vars_ue->PHY_measurements.n0_power_dB[1]); + */ + #ifdef EXMIMO len += sprintf(&buffer[len], "[UE PROC] RX Gain %d dB (LNA %d, vga %d dB)\n",phy_vars_ue->rx_total_gain_dB, openair0_cfg[0].rxg_mode[0],(int)openair0_cfg[0].rx_gain[0]); #endif #ifdef OAI_USRP len += sprintf(&buffer[len], "[UE PROC] RX Gain %d dB\n",phy_vars_ue->rx_total_gain_dB); #endif - - len += sprintf(&buffer[len], "[UE_PROC] Frequency offset %d Hz (%d)\n",phy_vars_ue->lte_ue_common_vars.freq_offset,openair_daq_vars.freq_offset); +#if defined(EXMIMO) || defined(OAI_USRP) + len += sprintf(&buffer[len], "[UE_PROC] Frequency offset %d Hz (%d), estimated carrier frequency %f Hz\n",phy_vars_ue->lte_ue_common_vars.freq_offset,openair_daq_vars.freq_offset,openair0_cfg[0].rx_freq[0]-phy_vars_ue->lte_ue_common_vars.freq_offset); +#endif len += sprintf(&buffer[len], "[UE PROC] UE mode = %s (%d)\n",mode_string[phy_vars_ue->UE_mode[0]],phy_vars_ue->UE_mode[0]); len += sprintf(&buffer[len], "[UE PROC] timing_advance = %d\n",phy_vars_ue->timing_advance); - len += sprintf(&buffer[len], "[UE PROC] UE tx power = %d\n", PHY_vars_UE_g[0][0]->tx_power_dBm); - + if (phy_vars_ue->UE_mode[0]==PUSCH) { + len += sprintf(&buffer[len], "[UE PROC] Po_PUSCH = %d dBm (PL %d dB, Po_NOMINAL_PUSCH %d dBm, PHR %d dB)\n", + PHY_vars_UE_g[0][0]->ulsch_ue[0]->Po_PUSCH, + get_PL(phy_vars_ue->Mod_id,phy_vars_ue->CC_id,0), + mac_xface->get_Po_NOMINAL_PUSCH(phy_vars_ue->Mod_id,0), + PHY_vars_UE_g[0][0]->ulsch_ue[0]->PHR); + len += sprintf(&buffer[len], "[UE PROC] Po_PUCCH = %d dBm (Po_NOMINAL_PUCCH %d dBm, g_pucch %d dB)\n", + get_PL(phy_vars_ue->Mod_id,phy_vars_ue->CC_id,0)+ + phy_vars_ue->lte_frame_parms.ul_power_control_config_common.p0_NominalPUCCH+ + phy_vars_ue->dlsch_ue[0][0]->g_pucch, + phy_vars_ue->lte_frame_parms.ul_power_control_config_common.p0_NominalPUCCH, + phy_vars_ue->dlsch_ue[0][0]->g_pucch); + } //for (eNB=0;eNBMod_id, 0); len += sprintf(&buffer[len],"[UE PROC] RRC status = %d\n",RRC_status); #endif - len += sprintf(&buffer[len],"[UE PROC] RSRP[0] %.2f dBm/RE, RSSI %.2f, RSRQ[0] %.2f\n", - 10*log10(phy_vars_ue->PHY_measurements.rsrp[0])-phy_vars_ue->rx_total_gain_dB, - 10*log10(phy_vars_ue->PHY_measurements.rssi)-phy_vars_ue->rx_total_gain_dB, 10*log10(phy_vars_ue->PHY_measurements.rsrq[0])); + len += sprintf(&buffer[len], "[UE PROC] Transmission Mode %d (mode1_flag %d)\n",phy_vars_ue->transmission_mode[eNB],phy_vars_ue->lte_frame_parms.mode1_flag); len += sprintf(&buffer[len], "[UE PROC] PBCH err conseq %d, PBCH error total %d, PBCH FER %d\n", phy_vars_ue->lte_ue_pbch_vars[eNB]->pdu_errors_conseq, @@ -608,13 +627,18 @@ int dump_eNB_stats(PHY_VARS_eNB *phy_vars_eNB, char* buffer, int length) if (phy_vars_eNB->dlsch_eNB[(uint8_t)UE_id][0]->rnti>0) { #endif - len += sprintf(&buffer[len],"[eNB PROC] UE %d (%x) Power: (%d,%d) dB, RSSI: (%d,%d) dBm, Sector %d\n", + len += sprintf(&buffer[len],"[eNB PROC] UE %d (%x) Power: (%d,%d) dB, Po_PUSCH: (%d,%d) dBm, Po_PUCCH (%d/%d) dBm, Po_PUCCH1 (%d,%d) dBm, PUCCH1 Thres %d dBm \n", UE_id, phy_vars_eNB->eNB_UE_stats[UE_id].crnti, dB_fixed(phy_vars_eNB->lte_eNB_pusch_vars[UE_id]->ulsch_power[0]), dB_fixed(phy_vars_eNB->lte_eNB_pusch_vars[UE_id]->ulsch_power[1]), phy_vars_eNB->eNB_UE_stats[UE_id].UL_rssi[0], phy_vars_eNB->eNB_UE_stats[UE_id].UL_rssi[1], + dB_fixed(phy_vars_eNB->eNB_UE_stats[UE_id].Po_PUCCH)-phy_vars_eNB->rx_total_gain_eNB_dB, + phy_vars_eNB->lte_frame_parms.ul_power_control_config_common.p0_NominalPUCCH, + dB_fixed(phy_vars_eNB->eNB_UE_stats[UE_id].Po_PUCCH1_below)-phy_vars_eNB->rx_total_gain_eNB_dB, + dB_fixed(phy_vars_eNB->eNB_UE_stats[UE_id].Po_PUCCH1_above)-phy_vars_eNB->rx_total_gain_eNB_dB, + PUCCH1_THRES+phy_vars_eNB->PHY_measurements_eNB[0].n0_power_tot_dBm, //-dB_fixed(phy_vars_eNB->lte_frame_parms.N_RB_UL), phy_vars_eNB->eNB_UE_stats[UE_id].sector); for(i=0; i<8; i++) diff --git a/openair1/PHY/LTE_TRANSPORT/proto.h b/openair1/PHY/LTE_TRANSPORT/proto.h index 0bb327aa8a..1161950e8f 100644 --- a/openair1/PHY/LTE_TRANSPORT/proto.h +++ b/openair1/PHY/LTE_TRANSPORT/proto.h @@ -48,7 +48,7 @@ * @{ */ -/** \fn free_eNB_dlsch(LTE_eNB_DLSCH_t *dlsch) +/** \fn free_eNB_dlsch(LTE_eNB_DLSCH_t *dlsch,unsigned char N_RB_DL) \brief This function frees memory allocated for a particular DLSCH at eNB @param dlsch Pointer to DLSCH to be removed */ @@ -74,9 +74,7 @@ void free_ue_dlsch(LTE_UE_DLSCH_t *dlsch); LTE_UE_DLSCH_t *new_ue_dlsch(uint8_t Kmimo,uint8_t Mdlharq,uint8_t max_turbo_iterations,uint8_t N_RB_DL, uint8_t abstraction_flag); -void free_eNB_dlsch(LTE_eNB_DLSCH_t *dlsch); -LTE_eNB_ULSCH_t *new_eNB_ulsch(uint8_t Mdlharq,uint8_t max_turbo_iterations,uint8_t N_RB_UL, uint8_t abstraction_flag); void clean_eNb_ulsch(LTE_eNB_ULSCH_t *ulsch, uint8_t abstraction_flag); @@ -754,7 +752,7 @@ void dlsch_64qam_llr(LTE_DL_FRAME_PARMS *frame_parms, uint8_t first_symbol_flag, uint16_t nb_rb, uint16_t pbch_pss_sss_adjust, - short **llr_save, + int16_t **llr_save, uint8_t beamforming_mode); /** \fn dlsch_siso(LTE_DL_FRAME_PARMS *frame_parms, @@ -875,6 +873,7 @@ void dlsch_detection_mrc(LTE_DL_FRAME_PARMS *frame_parms, @param rb_alloc RB allocation vector @param symbol Symbol to extract @param subframe Subframe number + @param vrb_type Flag to indicate distributed VRB type @param high_speed_flag @param frame_parms Pointer to frame descriptor */ @@ -1292,7 +1291,7 @@ uint32_t get_TBS_UL(uint8_t mcs, uint16_t nb_rb); @param vrb_type VRB type (0=localized,1=distributed) @param rb_alloc_dci rballoc field from DCI */ -uint32_t get_rballoc(uint8_t vrb_type,uint16_t rb_alloc_dci); +uint32_t get_rballoc(vrb_t vrb_type,uint16_t rb_alloc_dci); /* \brief Return bit-map of resource allocation for a given DCI rballoc (RIV format) and vrb type @returns Transmission mode (1-7) @@ -1401,7 +1400,8 @@ void ulsch_extract_rbs_single(int32_t **rxdataF, uint8_t subframe2harq_pid(LTE_DL_FRAME_PARMS *frame_parms,frame_t frame,uint8_t subframe); uint8_t subframe2harq_pid_eNBrx(LTE_DL_FRAME_PARMS *frame_parms,uint8_t subframe); -int generate_ue_dlsch_params_from_dci(uint8_t subframe, +int generate_ue_dlsch_params_from_dci(int frame, + uint8_t subframe, void *dci_pdu, rnti_t rnti, DCI_format_t dci_format, @@ -1412,7 +1412,8 @@ int generate_ue_dlsch_params_from_dci(uint8_t subframe, uint16_t ra_rnti, uint16_t p_rnti); -int32_t generate_eNB_dlsch_params_from_dci(uint8_t subframe, +int32_t generate_eNB_dlsch_params_from_dci(int frame, + uint8_t subframe, void *dci_pdu, rnti_t rnti, DCI_format_t dci_format, @@ -1822,5 +1823,8 @@ double computeRhoB_UE(PDSCH_CONFIG_DEDICATED *pdsch_config_dedicated, uint8_t n_antenna_port, LTE_UE_DLSCH_t *dlsch_ue); */ + + uint8_t get_prach_prb_offset(LTE_DL_FRAME_PARMS *frame_parms, uint8_t tdd_mapindex, uint16_t Nf); + /**@}*/ #endif diff --git a/openair1/PHY/LTE_TRANSPORT/pucch.c b/openair1/PHY/LTE_TRANSPORT/pucch.c index 59e4084e8f..4a72538dc0 100644 --- a/openair1/PHY/LTE_TRANSPORT/pucch.c +++ b/openair1/PHY/LTE_TRANSPORT/pucch.c @@ -442,10 +442,16 @@ int32_t rx_pucch(PHY_VARS_eNB *phy_vars_eNB, { + static int first_call=1; LTE_eNB_COMMON *eNB_common_vars = &phy_vars_eNB->lte_eNB_common_vars; - LTE_DL_FRAME_PARMS *frame_parms = &phy_vars_eNB->lte_frame_parms; + LTE_DL_FRAME_PARMS *frame_parms = &phy_vars_eNB->lte_frame_parms; // PUCCH_CONFIG_DEDICATED *pucch_config_dedicated = &phy_vars_eNB->pucch_config_dedicated[UE_id]; - int8_t sigma2_dB = phy_vars_eNB->PHY_measurements_eNB[0].n0_power_tot_dB; + int8_t sigma2_dB = phy_vars_eNB->PHY_measurements_eNB[0].n0_power_dB[0]; + int32_t *Po_PUCCH = &(phy_vars_eNB->eNB_UE_stats[UE_id].Po_PUCCH); + int32_t *Po_PUCCH_dBm = &(phy_vars_eNB->eNB_UE_stats[UE_id].Po_PUCCH_dBm); + int32_t *Po_PUCCH1_below = &(phy_vars_eNB->eNB_UE_stats[UE_id].Po_PUCCH1_below); + int32_t *Po_PUCCH1_above = &(phy_vars_eNB->eNB_UE_stats[UE_id].Po_PUCCH1_above); + int32_t *Po_PUCCH_update = &(phy_vars_eNB->eNB_UE_stats[UE_id].Po_PUCCH_update); uint32_t u,v,n,aa; uint32_t z[12*14]; int16_t *zptr; @@ -473,6 +479,34 @@ int32_t rx_pucch(PHY_VARS_eNB *phy_vars_eNB, uint32_t v0=frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.seqhop[subframe<<1]; uint32_t v1=frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.seqhop[1+(subframe<<1)]; + if (first_call == 1) { + for (i=0;i<10;i++) { + for (j=0;jpucch1_stats_cnt[j][i]=0; + phy_vars_eNB->pucch1ab_stats_cnt[j][i]=0; + } + } + first_call=0; + } + /* + switch (frame_parms->N_RB_UL) { + + case 6: + sigma2_dB -= 8; + break; + case 25: + sigma2_dB -= 14; + break; + case 50: + sigma2_dB -= 17; + break; + case 100: + sigma2_dB -= 20; + break; + default: + sigma2_dB -= 14; + } + */ if ((deltaPUCCH_Shift==0) || (deltaPUCCH_Shift>3)) { LOG_E(PHY,"[eNB] rx_pucch: Illegal deltaPUCCH_shift %d (should be 1,2,3)\n",deltaPUCCH_Shift); @@ -493,7 +527,7 @@ int32_t rx_pucch(PHY_VARS_eNB *phy_vars_eNB, LOG_D(PHY,"[eNB] PUCCH: cNcs1/deltaPUCCH_Shift %d, Nprime %d, n1_pucch %d\n",thres,Nprime,n1_pucch); #endif - N_UL_symb = (frame_parms->Ncp==0) ? 7 : 6; + N_UL_symb = (frame_parms->Ncp==NORMAL) ? 7 : 6; if (n1_pucch < thres) nprime0=n1_pucch; @@ -536,6 +570,12 @@ int32_t rx_pucch(PHY_VARS_eNB *phy_vars_eNB, S=0; // 1 else S=1; // j + /* + if (fmt==pucch_format1) + LOG_I(PHY,"[eNB] subframe %d => PUCCH1: u%d %d, v%d %d : ", subframe,ns&1,u,ns&1,v); + else + LOG_I(PHY,"[eNB] subframe %d => PUCCH1a/b: u%d %d, v%d %d : ", subframe,ns&1,u,ns&1,v); + */ //loop over symbols in slot for (l=0; lNcp==0)) { // reference and normal CP + } else if ((lNcp==NORMAL)) { // reference and normal CP W_re=W3_re[n_oc][l-2]; W_im=W3_im[n_oc][l-2]; refs=1; - } else if ((lNcp==1)) { // reference and extended CP + } else if ((lNcp==EXTENDED)) { // reference and extended CP W_re=W4[n_oc][l-2]; W_im=0; refs=1; @@ -614,6 +655,7 @@ int32_t rx_pucch(PHY_VARS_eNB *phy_vars_eNB, LOG_D(PHY,"[eNB] PUCCH subframe %d z(%d,%d) => %d,%d, alpha(%d) => %d,%d\n",subframe,l,n,zptr[n<<1],zptr[(n<<1)+1], alpha_ind,alpha_re[alpha_ind],alpha_im[alpha_ind]); #endif + alpha_ind = (alpha_ind + n_cs)%12; } // n @@ -656,15 +698,15 @@ int32_t rx_pucch(PHY_VARS_eNB *phy_vars_eNB, rxptr = (int16_t *)&eNB_common_vars->rxdataF[0][aa][symbol_offset]; for (i=0; i<12; i++,j+=2,re_offset++) { - rxcomp[aa][j] = (int16_t)((rxptr[re_offset<<2]*(int32_t)zptr[j])>>15) - ((rxptr[1+(re_offset<<2)]*(int32_t)zptr[1+j])>>15); - rxcomp[aa][1+j] = (int16_t)((rxptr[re_offset<<2]*(int32_t)zptr[1+j])>>15) + ((rxptr[1+(re_offset<<2)]*(int32_t)zptr[j])>>15); + rxcomp[aa][j] = (int16_t)((rxptr[re_offset<<1]*(int32_t)zptr[j])>>15) - ((rxptr[1+(re_offset<<1)]*(int32_t)zptr[1+j])>>15); + rxcomp[aa][1+j] = (int16_t)((rxptr[re_offset<<1]*(int32_t)zptr[1+j])>>15) + ((rxptr[1+(re_offset<<1)]*(int32_t)zptr[j])>>15); if (re_offset==frame_parms->ofdm_symbol_size) re_offset = 0; #ifdef DEBUG_PUCCH_RX LOG_D(PHY,"[eNB] PUCCH subframe %d (%d,%d,%d,%d,%d) => (%d,%d) x (%d,%d) : (%d,%d)\n",subframe,l,i,re_offset,m,j, - rxptr[re_offset<<2],rxptr[1+(re_offset<<2)], + rxptr[re_offset<<1],rxptr[1+(re_offset<<1)], zptr[j],zptr[1+j], rxcomp[aa][j],rxcomp[aa][1+j]); #endif @@ -718,29 +760,52 @@ int32_t rx_pucch(PHY_VARS_eNB *phy_vars_eNB, #endif } - } //re + stat += (stat_re*stat_re) + (stat_im*stat_im); + } //re } // aa - stat = (stat_re*stat_re) + (stat_im*stat_im); - + if (stat>stat_max) { stat_max = stat; phase_max = phase; } -#ifdef DEBUG_PUCCH_RX - LOG_D(PHY,"[eNB] PUCCH: stat %d, stat_max %d, phase_max %d\n", stat,stat_max,phase_max); -#endif } //phase + stat_max /= (nsymb*12); // normalize to energy per symbol and RE #ifdef DEBUG_PUCCH_RX - LOG_D(PHY,"[eNB] PUCCH fmt0: stat_max : %d, sigma2_dB %d, phase_max : %d\n",dB_fixed(stat_max),sigma2_dB,phase_max); + LOG_D(PHY,"[eNB] PUCCH: stat %d, stat_max %d, phase_max %d\n", stat,stat_max,phase_max); #endif - if (sigma2_dB<(dB_fixed(stat_max)-pucch1_thres)) // +#ifdef DEBUG_PUCCH_RX + LOG_D(PHY,"[eNB] PUCCH fmt0: stat_max : %d, sigma2_dB %d (%d, %d), phase_max : %d\n",dB_fixed(stat_max),sigma2_dB,phy_vars_eNB->PHY_measurements_eNB[0].n0_power_tot_dBm,pucch1_thres,phase_max); +#endif + + phy_vars_eNB->pucch1_stats[UE_id][(subframe<<10)+phy_vars_eNB->pucch1_stats_cnt[UE_id][subframe]] = stat_max; + phy_vars_eNB->pucch1_stats_cnt[UE_id][subframe] = (phy_vars_eNB->pucch1_stats_cnt[UE_id][subframe]+1)&1023; + + /* + if (phy_vars_eNB->pucch1_stats_cnt[UE_id][subframe] == 0) { + write_output("pucch_debug.m","pucch_energy", + &phy_vars_eNB->pucch1_stats[UE_id][(subframe<<10)], + 1024,1,2); + AssertFatal(0,"Exiting for PUCCH 1 debug\n"); + + } + */ + + // This is a moving average of the PUCCH1 statistics conditioned on being above or below the threshold + if (sigma2_dB<(dB_fixed(stat_max)-pucch1_thres)) { *payload = 1; - else + *Po_PUCCH1_above = ((*Po_PUCCH1_above<<9) + (stat_max<<9)+1024)>>10; + + } + else { *payload = 0; + *Po_PUCCH1_below = ((*Po_PUCCH1_below<<9) + (stat_max<<9)+1024)>>10; + } + LOG_D(PHY,"[eNB] PUCCH fmt0: stat_max : %d, sigma2_dB %d (I0 %d dBm, thres %d), Po_PUCCH1_below/above : %d / %d\n",dB_fixed(stat_max),sigma2_dB,phy_vars_eNB->PHY_measurements_eNB[0].n0_power_tot_dBm,pucch1_thres,dB_fixed(*Po_PUCCH1_below),dB_fixed(*Po_PUCCH1_above)); + *Po_PUCCH_update = 1; } else if ((fmt == pucch_format1a)||(fmt == pucch_format1b)) { stat_max = 0; @@ -816,17 +881,31 @@ int32_t rx_pucch(PHY_VARS_eNB *phy_vars_eNB, } } //phase + stat_max/=(nsymb*12); //normalize to energy per symbol and RE #ifdef DEBUG_PUCCH_RX LOG_I(PHY,"[eNB] PUCCH fmt1: stat_max : %d, phase_max : %d\n",stat_max,phase_max); #endif - // Do detection now stat_re=0; stat_im=0; + LOG_D(PHY,"PUCCH1A : Po_PUCCH before %d dB (%d)\n",dB_fixed(*Po_PUCCH),*Po_PUCCH); + *Po_PUCCH = ((*Po_PUCCH<<9) + (stat_max<<9)+1024)>>10; + *Po_PUCCH_dBm = dB_fixed(*Po_PUCCH) - phy_vars_eNB->rx_total_gain_eNB_dB; + *Po_PUCCH_update = 1; + + LOG_D(PHY,"PUCCH1A : stat_max %d (%d,%d,%d) => Po_PUCCH %d\n", + dB_fixed(stat_max), + pucch1_thres+sigma2_dB, + pucch1_thres, + sigma2_dB, + dB_fixed(*Po_PUCCH)); + // Do detection now if (sigma2_dB<(dB_fixed(stat_max)-pucch1_thres)) {// + *Po_PUCCH = ((*Po_PUCCH*1023) + stat_max)>>10; + for (aa=0; aanb_antennas_rx; aa++) { for (re=0; re<12; re++) { chest_re=0; @@ -928,8 +1007,14 @@ int32_t rx_pucch(PHY_VARS_eNB *phy_vars_eNB, } // aa #ifdef DEBUG_PUCCH_RX - LOG_I(PHY,"stat %d,%d\n",stat_re,stat_im); + LOG_D(PHY,"PUCCH 1a/b: subframe %d : stat %d,%d (pos %d)\n",subframe,stat_re,stat_im, + (subframe<<10) + (phy_vars_eNB->pucch1ab_stats_cnt[UE_id][subframe])); #endif + + ((int16_t*)&phy_vars_eNB->pucch1ab_stats[UE_id][(subframe<<10) + (phy_vars_eNB->pucch1_stats_cnt[UE_id][subframe])])[0] = stat_re; + ((int16_t*)&phy_vars_eNB->pucch1ab_stats[UE_id][(subframe<<10) + (phy_vars_eNB->pucch1_stats_cnt[UE_id][subframe])])[1] = stat_im; + phy_vars_eNB->pucch1ab_stats_cnt[UE_id][subframe] = (phy_vars_eNB->pucch1ab_stats_cnt[UE_id][subframe]+1)&1023; + *payload = (stat_re<0) ? 1 : 0; if (fmt==pucch_format1b) diff --git a/openair1/PHY/LTE_TRANSPORT/sss.c b/openair1/PHY/LTE_TRANSPORT/sss.c index 9fe06586dd..ecc2661d75 100644 --- a/openair1/PHY/LTE_TRANSPORT/sss.c +++ b/openair1/PHY/LTE_TRANSPORT/sss.c @@ -248,13 +248,15 @@ int rx_sss(PHY_VARS_UE *phy_vars_ue,int32_t *tot_metric,uint8_t *flip_max,uint8_ (frame_parms->symbols_per_tti/2)-2, // second to last symbol of 0, // slot 0 phy_vars_ue->rx_offset, - 0); + 0, + 1); // PSS slot_fep(phy_vars_ue, (frame_parms->symbols_per_tti/2)-1, // last symbol of 0, // slot 0 phy_vars_ue->rx_offset, - 0); + 0, + 1); } else { // TDD #ifdef DEBUG_SSS if (phy_vars_ue->lte_frame_parms.Ncp == NORMAL) @@ -268,13 +270,15 @@ int rx_sss(PHY_VARS_UE *phy_vars_ue,int32_t *tot_metric,uint8_t *flip_max,uint8_ (frame_parms->symbols_per_tti>>1)-1, // last symbol of 1, // slot 1 phy_vars_ue->rx_offset, - 0); + 0, + 1); // PSS slot_fep(phy_vars_ue, 2, // symbol 2 of 2, // slot 2 phy_vars_ue->rx_offset, - 0); + 0, + 1); } pss_sss_extract(phy_vars_ue, @@ -303,26 +307,28 @@ int rx_sss(PHY_VARS_UE *phy_vars_ue,int32_t *tot_metric,uint8_t *flip_max,uint8_ (frame_parms->symbols_per_tti/2)-2, 10, phy_vars_ue->rx_offset, - 0); + 0,1); // PSS slot_fep(phy_vars_ue, (frame_parms->symbols_per_tti/2)-1, 10, phy_vars_ue->rx_offset, - 0); + 0,1); } else { // TDD // SSS slot_fep(phy_vars_ue, (frame_parms->symbols_per_tti>>1)-1, 11, phy_vars_ue->rx_offset, - 0); + 0, + 1); // PSS slot_fep(phy_vars_ue, 2, 12, phy_vars_ue->rx_offset, - 0); + 0, + 1); } pss_sss_extract(phy_vars_ue, diff --git a/openair1/PHY/LTE_TRANSPORT/ulsch_decoding.c b/openair1/PHY/LTE_TRANSPORT/ulsch_decoding.c index bd2ec6e023..5774bc50be 100644 --- a/openair1/PHY/LTE_TRANSPORT/ulsch_decoding.c +++ b/openair1/PHY/LTE_TRANSPORT/ulsch_decoding.c @@ -298,10 +298,14 @@ unsigned int ulsch_decoding(PHY_VARS_eNB *phy_vars_eNB, ulsch_harq = ulsch->harq_processes[harq_pid]; if (harq_pid==255) { - LOG_E(PHY, "ulsch_decoding.c: FATAL ERROR: illegal harq_pid, returning\n"); - return(-1); + LOG_E(PHY, "FATAL ERROR: illegal harq_pid, returning\n"); + return -1; } + if (ulsch_harq->Nsymb_pusch == 0) { + LOG_E(PHY, "FATAL ERROR: harq_pid %d, Nsymb 0!\n",harq_pid); + return 1+ulsch->max_turbo_iterations; + } if (llr8_flag == 0) tc = phy_threegpplte_turbo_decoder16; else diff --git a/openair1/PHY/LTE_TRANSPORT/ulsch_demodulation.c b/openair1/PHY/LTE_TRANSPORT/ulsch_demodulation.c index 3d7380c42c..9c3fcae306 100644 --- a/openair1/PHY/LTE_TRANSPORT/ulsch_demodulation.c +++ b/openair1/PHY/LTE_TRANSPORT/ulsch_demodulation.c @@ -52,15 +52,19 @@ //extern int **ulchmag_eren; //eren - static short jitter[8] __attribute__ ((aligned(16))) = {1,0,0,1,0,1,1,0}; static short jitterc[8] __attribute__ ((aligned(16))) = {0,1,1,0,1,0,0,1}; #ifndef OFDMA_ULSCH void lte_idft(LTE_DL_FRAME_PARMS *frame_parms,uint32_t *z, uint16_t Msc_PUSCH) { - +#if defined(__x86_64__) || defined(__i386__) __m128i idft_in128[3][1200],idft_out128[3][1200]; + __m128i norm128; +#elif defined(__arm__) + int16x8_t idft_in128[3][1200],idft_out128[3][1200]; + int16x8_t norm128; +#endif int16_t *idft_in0=(int16_t*)idft_in128[0],*idft_out0=(int16_t*)idft_out128[0]; int16_t *idft_in1=(int16_t*)idft_in128[1],*idft_out1=(int16_t*)idft_out128[1]; int16_t *idft_in2=(int16_t*)idft_in128[2],*idft_out2=(int16_t*)idft_out128[2]; @@ -68,7 +72,7 @@ void lte_idft(LTE_DL_FRAME_PARMS *frame_parms,uint32_t *z, uint16_t Msc_PUSCH) uint32_t *z0,*z1,*z2,*z3,*z4,*z5,*z6,*z7,*z8,*z9,*z10=NULL,*z11=NULL; int i,ip; - __m128i norm128; + // printf("Doing lte_idft for Msc_PUSCH %d\n",Msc_PUSCH); @@ -108,6 +112,7 @@ void lte_idft(LTE_DL_FRAME_PARMS *frame_parms,uint32_t *z, uint16_t Msc_PUSCH) // conjugate input for (i=0; i<(Msc_PUSCH>>2); i++) { +#if defined(__x86_64__)||defined(__i386__) *&(((__m128i*)z0)[i])=_mm_sign_epi16(*&(((__m128i*)z0)[i]),*(__m128i*)&conjugate2[0]); *&(((__m128i*)z1)[i])=_mm_sign_epi16(*&(((__m128i*)z1)[i]),*(__m128i*)&conjugate2[0]); *&(((__m128i*)z2)[i])=_mm_sign_epi16(*&(((__m128i*)z2)[i]),*(__m128i*)&conjugate2[0]); @@ -119,10 +124,29 @@ void lte_idft(LTE_DL_FRAME_PARMS *frame_parms,uint32_t *z, uint16_t Msc_PUSCH) *&(((__m128i*)z8)[i])=_mm_sign_epi16(*&(((__m128i*)z8)[i]),*(__m128i*)&conjugate2[0]); *&(((__m128i*)z9)[i])=_mm_sign_epi16(*&(((__m128i*)z9)[i]),*(__m128i*)&conjugate2[0]); - if (frame_parms->Ncp==0) { + if (frame_parms->Ncp==NORMAL) { *&(((__m128i*)z10)[i])=_mm_sign_epi16(*&(((__m128i*)z10)[i]),*(__m128i*)&conjugate2[0]); *&(((__m128i*)z11)[i])=_mm_sign_epi16(*&(((__m128i*)z11)[i]),*(__m128i*)&conjugate2[0]); } +#elif defined(__arm__) + *&(((int16x8_t*)z0)[i])=vmulq_s16(*&(((int16x8_t*)z0)[i]),*(int16x8_t*)&conjugate2[0]); + *&(((int16x8_t*)z1)[i])=vmulq_s16(*&(((int16x8_t*)z1)[i]),*(int16x8_t*)&conjugate2[0]); + *&(((int16x8_t*)z2)[i])=vmulq_s16(*&(((int16x8_t*)z2)[i]),*(int16x8_t*)&conjugate2[0]); + *&(((int16x8_t*)z3)[i])=vmulq_s16(*&(((int16x8_t*)z3)[i]),*(int16x8_t*)&conjugate2[0]); + *&(((int16x8_t*)z4)[i])=vmulq_s16(*&(((int16x8_t*)z4)[i]),*(int16x8_t*)&conjugate2[0]); + *&(((int16x8_t*)z5)[i])=vmulq_s16(*&(((int16x8_t*)z5)[i]),*(int16x8_t*)&conjugate2[0]); + *&(((int16x8_t*)z6)[i])=vmulq_s16(*&(((int16x8_t*)z6)[i]),*(int16x8_t*)&conjugate2[0]); + *&(((int16x8_t*)z7)[i])=vmulq_s16(*&(((int16x8_t*)z7)[i]),*(int16x8_t*)&conjugate2[0]); + *&(((int16x8_t*)z8)[i])=vmulq_s16(*&(((int16x8_t*)z8)[i]),*(int16x8_t*)&conjugate2[0]); + *&(((int16x8_t*)z9)[i])=vmulq_s16(*&(((int16x8_t*)z9)[i]),*(int16x8_t*)&conjugate2[0]); + + + if (frame_parms->Ncp==NORMAL) { + *&(((int16x8_t*)z10)[i])=vmulq_s16(*&(((int16x8_t*)z10)[i]),*(int16x8_t*)&conjugate2[0]); + *&(((int16x8_t*)z11)[i])=vmulq_s16(*&(((int16x8_t*)z11)[i]),*(int16x8_t*)&conjugate2[0]); + } + +#endif } for (i=0,ip=0; i>2); i++) { +#if defined(__x86_64__) || defined(__i386__) ((__m128i*)z0)[i]=_mm_sign_epi16(((__m128i*)z0)[i],*(__m128i*)&conjugate2[0]); ((__m128i*)z1)[i]=_mm_sign_epi16(((__m128i*)z1)[i],*(__m128i*)&conjugate2[0]); ((__m128i*)z2)[i]=_mm_sign_epi16(((__m128i*)z2)[i],*(__m128i*)&conjugate2[0]); @@ -405,12 +432,36 @@ void lte_idft(LTE_DL_FRAME_PARMS *frame_parms,uint32_t *z, uint16_t Msc_PUSCH) ((__m128i*)z8)[i]=_mm_sign_epi16(((__m128i*)z8)[i],*(__m128i*)&conjugate2[0]); ((__m128i*)z9)[i]=_mm_sign_epi16(((__m128i*)z9)[i],*(__m128i*)&conjugate2[0]); - if (frame_parms->Ncp==0) { + if (frame_parms->Ncp==NORMAL) { ((__m128i*)z10)[i]=_mm_sign_epi16(((__m128i*)z10)[i],*(__m128i*)&conjugate2[0]); ((__m128i*)z11)[i]=_mm_sign_epi16(((__m128i*)z11)[i],*(__m128i*)&conjugate2[0]); } +#elif defined(__arm__) + *&(((int16x8_t*)z0)[i])=vmulq_s16(*&(((int16x8_t*)z0)[i]),*(int16x8_t*)&conjugate2[0]); + *&(((int16x8_t*)z1)[i])=vmulq_s16(*&(((int16x8_t*)z1)[i]),*(int16x8_t*)&conjugate2[0]); + *&(((int16x8_t*)z2)[i])=vmulq_s16(*&(((int16x8_t*)z2)[i]),*(int16x8_t*)&conjugate2[0]); + *&(((int16x8_t*)z3)[i])=vmulq_s16(*&(((int16x8_t*)z3)[i]),*(int16x8_t*)&conjugate2[0]); + *&(((int16x8_t*)z4)[i])=vmulq_s16(*&(((int16x8_t*)z4)[i]),*(int16x8_t*)&conjugate2[0]); + *&(((int16x8_t*)z5)[i])=vmulq_s16(*&(((int16x8_t*)z5)[i]),*(int16x8_t*)&conjugate2[0]); + *&(((int16x8_t*)z6)[i])=vmulq_s16(*&(((int16x8_t*)z6)[i]),*(int16x8_t*)&conjugate2[0]); + *&(((int16x8_t*)z7)[i])=vmulq_s16(*&(((int16x8_t*)z7)[i]),*(int16x8_t*)&conjugate2[0]); + *&(((int16x8_t*)z8)[i])=vmulq_s16(*&(((int16x8_t*)z8)[i]),*(int16x8_t*)&conjugate2[0]); + *&(((int16x8_t*)z9)[i])=vmulq_s16(*&(((int16x8_t*)z9)[i]),*(int16x8_t*)&conjugate2[0]); + + + if (frame_parms->Ncp==NORMAL) { + *&(((int16x8_t*)z10)[i])=vmulq_s16(*&(((int16x8_t*)z10)[i]),*(int16x8_t*)&conjugate2[0]); + *&(((int16x8_t*)z11)[i])=vmulq_s16(*&(((int16x8_t*)z11)[i]),*(int16x8_t*)&conjugate2[0]); + } + +#endif } +#if defined(__x86_64__) || defined(__i386__) + _mm_empty(); + _m_empty(); +#endif + } #endif @@ -425,10 +476,15 @@ int32_t ulsch_qpsk_llr(LTE_DL_FRAME_PARMS *frame_parms, uint16_t nb_rb, int16_t **llrp) { - +#if defined(__x86_64__) || defined(__i386__) __m128i *rxF=(__m128i*)&rxdataF_comp[0][(symbol*frame_parms->N_RB_DL*12)]; - int32_t i; __m128i **llrp128 = (__m128i **)llrp; +#elif defined(__arm__) + int16x8_t *rxF= (int16x8_t*)&rxdataF_comp[0][(symbol*frame_parms->N_RB_DL*12)]; + int16x8_t **llrp128 = (int16x8_t **)llrp; +#endif + + int i; // printf("qpsk llr for symbol %d (pos %d), llr offset %d\n",symbol,(symbol*frame_parms->N_RB_DL*12),llr128U-(__m128i*)ulsch_llr); @@ -439,8 +495,10 @@ int32_t ulsch_qpsk_llr(LTE_DL_FRAME_PARMS *frame_parms, (*llrp128)++; } +#if defined(__x86_64__) || defined(__i386__) _mm_empty(); _m_empty(); +#endif return(0); @@ -454,41 +512,64 @@ void ulsch_16qam_llr(LTE_DL_FRAME_PARMS *frame_parms, uint16_t nb_rb, int16_t **llrp) { +int i; +#if defined(__x86_64__) || defined(__i386__) __m128i *rxF=(__m128i*)&rxdataF_comp[0][(symbol*frame_parms->N_RB_DL*12)]; __m128i *ch_mag; __m128i mmtmpU0; __m128i **llrp128=(__m128i **)llrp; - - int32_t i; - // uint8_t symbol_mod; - - // printf("ulsch_rx.c: ulsch_16qam_llr: symbol %d\n",symbol); - - // symbol_mod = (symbol>=(7-frame_parms->Ncp)) ? symbol-(7-frame_parms->Ncp) : symbol; - ch_mag =(__m128i*)&ul_ch_mag[0][(symbol*frame_parms->N_RB_DL*12)]; - +#elif defined(__arm__) + int16x8_t *rxF=(int16x8_t*)&rxdataF_comp[0][(symbol*frame_parms->N_RB_DL*12)]; + int16x8_t *ch_mag; + int16x8_t xmm0; + int16_t **llrp16=llrp; + ch_mag =(int16x8_t*)&ul_ch_mag[0][(symbol*frame_parms->N_RB_DL*12)]; +#endif for (i=0; i<(nb_rb*3); i++) { - +#if defined(__x86_64__) || defined(__i386__) mmtmpU0 = _mm_abs_epi16(rxF[i]); // print_shorts("tmp0",&tmp0); mmtmpU0 = _mm_subs_epi16(ch_mag[i],mmtmpU0); - (*llrp128)[0] = _mm_unpacklo_epi32(rxF[i],mmtmpU0); (*llrp128)[1] = _mm_unpackhi_epi32(rxF[i],mmtmpU0); (*llrp128)+=2; +#elif defined(__arm__) + xmm0 = vabsq_s16(rxF[i]); + xmm0 = vqsubq_s16(ch_mag[i],xmm0); + (*llrp16)[0] = vgetq_lane_s16(rxF[i],0); + (*llrp16)[1] = vgetq_lane_s16(xmm0,0); + (*llrp16)[2] = vgetq_lane_s16(rxF[i],1); + (*llrp16)[3] = vgetq_lane_s16(xmm0,1); + (*llrp16)[4] = vgetq_lane_s16(rxF[i],2); + (*llrp16)[5] = vgetq_lane_s16(xmm0,2); + (*llrp16)[6] = vgetq_lane_s16(rxF[i],2); + (*llrp16)[7] = vgetq_lane_s16(xmm0,3); + (*llrp16)[8] = vgetq_lane_s16(rxF[i],4); + (*llrp16)[9] = vgetq_lane_s16(xmm0,4); + (*llrp16)[10] = vgetq_lane_s16(rxF[i],5); + (*llrp16)[11] = vgetq_lane_s16(xmm0,5); + (*llrp16)[12] = vgetq_lane_s16(rxF[i],6); + (*llrp16)[13] = vgetq_lane_s16(xmm0,6); + (*llrp16)[14] = vgetq_lane_s16(rxF[i],7); + (*llrp16)[15] = vgetq_lane_s16(xmm0,7); + (*llrp16)+=16; +#endif + // print_bytes("rxF[i]",&rxF[i]); // print_bytes("rxF[i+1]",&rxF[i+1]); } +#if defined(__x86_64__) || defined(__i386__) _mm_empty(); _m_empty(); +#endif } @@ -501,27 +582,29 @@ void ulsch_64qam_llr(LTE_DL_FRAME_PARMS *frame_parms, uint16_t nb_rb, int16_t **llrp) { - - __m128i *rxF=(__m128i*)&rxdataF_comp[0][(symbol*frame_parms->N_RB_DL*12)]; - __m128i *ch_mag,*ch_magb; - int32_t i; - __m128i mmtmpU1,mmtmpU2; + int i; int32_t **llrp32=(int32_t **)llrp; - // uint8_t symbol_mod; - - - - // symbol_mod = (symbol>=(7-frame_parms->Ncp)) ? symbol-(7-frame_parms->Ncp) : symbol; +#if defined(__x86_64__) || defined(__i386) + __m128i *rxF=(__m128i*)&rxdataF_comp[0][(symbol*frame_parms->N_RB_DL*12)]; + __m128i *ch_mag,*ch_magb; + __m128i mmtmpU1,mmtmpU2; ch_mag =(__m128i*)&ul_ch_mag[0][(symbol*frame_parms->N_RB_DL*12)]; ch_magb =(__m128i*)&ul_ch_magb[0][(symbol*frame_parms->N_RB_DL*12)]; +#elif defined(__arm__) + int16x8_t *rxF=(int16x8_t*)&rxdataF_comp[0][(symbol*frame_parms->N_RB_DL*12)]; + int16x8_t *ch_mag,*ch_magb; + int16x8_t mmtmpU1,mmtmpU2; + ch_mag =(int16x8_t*)&ul_ch_mag[0][(symbol*frame_parms->N_RB_DL*12)]; + ch_magb =(int16x8_t*)&ul_ch_magb[0][(symbol*frame_parms->N_RB_DL*12)]; +#endif // printf("symbol %d: mag %d, magb %d\n",symbol,_mm_extract_epi16(ch_mag[0],0),_mm_extract_epi16(ch_magb[0],0)); for (i=0; i<(nb_rb*3); i++) { - +#if defined(__x86_64__) || defined(__i386__) mmtmpU1 = _mm_abs_epi16(rxF[i]); mmtmpU1 = _mm_subs_epi16(ch_mag[i],mmtmpU1); @@ -541,12 +624,34 @@ void ulsch_64qam_llr(LTE_DL_FRAME_PARMS *frame_parms, (*llrp32)[9] = _mm_extract_epi32(rxF[i],3); (*llrp32)[10] = _mm_extract_epi32(mmtmpU1,3); (*llrp32)[11] = _mm_extract_epi32(mmtmpU2,3); +#elif defined(__arm__) + mmtmpU1 = vabsq_s16(rxF[i]); + + mmtmpU1 = vqsubq_s16(ch_mag[i],mmtmpU1); + + mmtmpU2 = vabsq_s16(mmtmpU1); + mmtmpU2 = vqsubq_s16(ch_magb[i],mmtmpU2); + + (*llrp32)[0] = vgetq_lane_s32((int32x4_t)rxF[i],0); + (*llrp32)[1] = vgetq_lane_s32((int32x4_t)mmtmpU1,0); + (*llrp32)[2] = vgetq_lane_s32((int32x4_t)mmtmpU2,0); + (*llrp32)[3] = vgetq_lane_s32((int32x4_t)rxF[i],1); + (*llrp32)[4] = vgetq_lane_s32((int32x4_t)mmtmpU1,1); + (*llrp32)[5] = vgetq_lane_s32((int32x4_t)mmtmpU2,1); + (*llrp32)[6] = vgetq_lane_s32((int32x4_t)rxF[i],2); + (*llrp32)[7] = vgetq_lane_s32((int32x4_t)mmtmpU1,2); + (*llrp32)[8] = vgetq_lane_s32((int32x4_t)mmtmpU2,2); + (*llrp32)[9] = vgetq_lane_s32((int32x4_t)rxF[i],3); + (*llrp32)[10] = vgetq_lane_s32((int32x4_t)mmtmpU1,3); + (*llrp32)[11] = vgetq_lane_s32((int32x4_t)mmtmpU2,3); + +#endif (*llrp32)+=12; } - +#if defined(__x86_64__) || defined(__i386__) _mm_empty(); _m_empty(); - +#endif } void ulsch_detection_mrc(LTE_DL_FRAME_PARMS *frame_parms, @@ -558,13 +663,20 @@ void ulsch_detection_mrc(LTE_DL_FRAME_PARMS *frame_parms, { +#if defined(__x86_64__) || defined(__i386__) __m128i *rxdataF_comp128_0,*ul_ch_mag128_0,*ul_ch_mag128_0b; __m128i *rxdataF_comp128_1,*ul_ch_mag128_1,*ul_ch_mag128_1b; +#elif defined(__arm__) + int16x8_t *rxdataF_comp128_0,*ul_ch_mag128_0,*ul_ch_mag128_0b; + int16x8_t *rxdataF_comp128_1,*ul_ch_mag128_1,*ul_ch_mag128_1b; + +#endif int32_t i; if (frame_parms->nb_antennas_rx>1) { +#if defined(__x86_64__) || defined(__i386__) rxdataF_comp128_0 = (__m128i *)&rxdataF_comp[0][symbol*frame_parms->N_RB_DL*12]; rxdataF_comp128_1 = (__m128i *)&rxdataF_comp[1][symbol*frame_parms->N_RB_DL*12]; ul_ch_mag128_0 = (__m128i *)&ul_ch_mag[0][symbol*frame_parms->N_RB_DL*12]; @@ -578,15 +690,31 @@ void ulsch_detection_mrc(LTE_DL_FRAME_PARMS *frame_parms, ul_ch_mag128_0[i] = _mm_adds_epi16(_mm_srai_epi16(ul_ch_mag128_0[i],1),_mm_srai_epi16(ul_ch_mag128_1[i],1)); ul_ch_mag128_0b[i] = _mm_adds_epi16(_mm_srai_epi16(ul_ch_mag128_0b[i],1),_mm_srai_epi16(ul_ch_mag128_1b[i],1)); rxdataF_comp128_0[i] = _mm_add_epi16(rxdataF_comp128_0[i],(*(__m128i*)&jitterc[0])); - } - // remove any bias (DC component after IDFT) - // ((uint32_t*)rxdataF_comp128_0)[0]=0; +#elif defined(__arm__) + rxdataF_comp128_0 = (int16x8_t *)&rxdataF_comp[0][symbol*frame_parms->N_RB_DL*12]; + rxdataF_comp128_1 = (int16x8_t *)&rxdataF_comp[1][symbol*frame_parms->N_RB_DL*12]; + ul_ch_mag128_0 = (int16x8_t *)&ul_ch_mag[0][symbol*frame_parms->N_RB_DL*12]; + ul_ch_mag128_1 = (int16x8_t *)&ul_ch_mag[1][symbol*frame_parms->N_RB_DL*12]; + ul_ch_mag128_0b = (int16x8_t *)&ul_ch_magb[0][symbol*frame_parms->N_RB_DL*12]; + ul_ch_mag128_1b = (int16x8_t *)&ul_ch_magb[1][symbol*frame_parms->N_RB_DL*12]; + + // MRC on each re of rb, both on MF output and magnitude (for 16QAM/64QAM llr computation) + for (i=0; i=(7-frame_parms->Ncp)) ? symbol-(7-frame_parms->Ncp) : symbol; - // printf("comp: symbol %d\n",symbol); +#elif defined(__arm__) -#ifdef ULSCH_OFDMA + int16x4_t *ul_ch128,*rxdataF128; + int16x8_t *ul_ch_mag128,*ul_ch_mag128b,*rxdataF_comp128; + uint8_t aarx;//,symbol_mod; + int32x4_t mmtmpU0,mmtmpU1,mmtmpU0b,mmtmpU1b; +#ifdef OFDMA_ULSCH + int16x8_t mmtmpU2,mmtmpU3; + int16x8_t QAM_amp128U,QAM_amp128bU; +#endif + int16_t conj[4]__attribute__((aligned(16))) = {1,-1,1,-1}; + int32x4_t output_shift128 = vmovq_n_s32(-(int32_t)output_shift); + + + +#endif + +#ifdef OFDMA_ULSCH + +#if defined(__x86_64__) || defined(__i386__) if (Qm == 4) QAM_amp128U = _mm_set1_epi16(QAM16_n1); else if (Qm == 6) { QAM_amp128U = _mm_set1_epi16(QAM64_n1); QAM_amp128bU = _mm_set1_epi16(QAM64_n2); } +#elif defined(__arm__) + if (Qm == 4) + QAM_amp128U = vdupq_n_s16(QAM16_n1); + else if (Qm == 6) { + QAM_amp128U = vdupq_n_s16(QAM64_n1); + QAM_amp128bU = vdupq_n_s16(QAM64_n2); + } +#endif #endif for (aarx=0; aarxnb_antennas_rx; aarx++) { +#if defined(__x86_64__) || defined(__i386__) + ul_ch128 = (__m128i *)&ul_ch_estimates_ext[aarx][symbol*frame_parms->N_RB_DL*12]; ul_ch_mag128 = (__m128i *)&ul_ch_mag[aarx][symbol*frame_parms->N_RB_DL*12]; ul_ch_mag128b = (__m128i *)&ul_ch_magb[aarx][symbol*frame_parms->N_RB_DL*12]; rxdataF128 = (__m128i *)&rxdataF_ext[aarx][symbol*frame_parms->N_RB_DL*12]; rxdataF_comp128 = (__m128i *)&rxdataF_comp[aarx][symbol*frame_parms->N_RB_DL*12]; +#elif defined(__arm__) + + ul_ch128 = (int16x4_t *)&ul_ch_estimates_ext[aarx][symbol*frame_parms->N_RB_DL*12]; + ul_ch_mag128 = (int16x8_t *)&ul_ch_mag[aarx][symbol*frame_parms->N_RB_DL*12]; + ul_ch_mag128b = (int16x8_t *)&ul_ch_magb[aarx][symbol*frame_parms->N_RB_DL*12]; + rxdataF128 = (int16x4_t *)&rxdataF_ext[aarx][symbol*frame_parms->N_RB_DL*12]; + rxdataF_comp128 = (int16x8_t *)&rxdataF_comp[aarx][symbol*frame_parms->N_RB_DL*12]; + +#endif for (rb=0; rb2) { // get channel amplitude if not QPSK +#if defined(__x86_64__) || defined(__i386__) mmtmpU0 = _mm_madd_epi16(ul_ch128[0],ul_ch128[0]); mmtmpU0 = _mm_srai_epi32(mmtmpU0,output_shift); @@ -757,10 +921,36 @@ void ulsch_channel_compensation(int32_t **rxdataF_ext, ul_ch_mag128b[2] = _mm_mulhi_epi16(ul_ch_mag128b[2],QAM_amp128bU); ul_ch_mag128b[2] = _mm_slli_epi16(ul_ch_mag128b[2],2);// 2 to compensate the scale channel estimate +#elif defined(__arm__) + mmtmpU0 = vmull_s16(ul_ch128[0], ul_ch128[0]); + mmtmpU0 = vqshlq_s32(vqaddq_s32(mmtmpU0,vrev64q_s32(mmtmpU0)),-output_shift128); + mmtmpU1 = vmull_s16(ul_ch128[1], ul_ch128[1]); + mmtmpU1 = vqshlq_s32(vqaddq_s32(mmtmpU1,vrev64q_s32(mmtmpU1)),-output_shift128); + mmtmpU2 = vcombine_s16(vmovn_s32(mmtmpU0),vmovn_s32(mmtmpU1)); + mmtmpU0 = vmull_s16(ul_ch128[2], ul_ch128[2]); + mmtmpU0 = vqshlq_s32(vqaddq_s32(mmtmpU0,vrev64q_s32(mmtmpU0)),-output_shift128); + mmtmpU1 = vmull_s16(ul_ch128[3], ul_ch128[3]); + mmtmpU1 = vqshlq_s32(vqaddq_s32(mmtmpU1,vrev64q_s32(mmtmpU1)),-output_shift128); + mmtmpU3 = vcombine_s16(vmovn_s32(mmtmpU0),vmovn_s32(mmtmpU1)); + mmtmpU0 = vmull_s16(ul_ch128[4], ul_ch128[4]); + mmtmpU0 = vqshlq_s32(vqaddq_s32(mmtmpU0,vrev64q_s32(mmtmpU0)),-output_shift128); + mmtmpU1 = vmull_s16(ul_ch128[5], ul_ch128[5]); + mmtmpU1 = vqshlq_s32(vqaddq_s32(mmtmpU1,vrev64q_s32(mmtmpU1)),-output_shift128); + mmtmpU4 = vcombine_s16(vmovn_s32(mmtmpU0),vmovn_s32(mmtmpU1)); + + ul_ch_mag128b[0] = vqdmulhq_s16(mmtmpU2,QAM_amp128b); + ul_ch_mag128b[1] = vqdmulhq_s16(mmtmpU3,QAM_amp128b); + ul_ch_mag128[0] = vqdmulhq_s16(mmtmpU2,QAM_amp128); + ul_ch_mag128[1] = vqdmulhq_s16(mmtmpU3,QAM_amp128); + ul_ch_mag128b[2] = vqdmulhq_s16(mmtmpU4,QAM_amp128b); + ul_ch_mag128[2] = vqdmulhq_s16(mmtmpU4,QAM_amp128); +#endif } -#else +#else // SC-FDMA +// just compute channel magnitude without scaling, this is done after equalization for SC-FDMA +#if defined(__x86_64__) || defined(__i386__) mmtmpU0 = _mm_madd_epi16(ul_ch128[0],ul_ch128[0]); mmtmpU0 = _mm_srai_epi32(mmtmpU0,output_shift); @@ -780,8 +970,29 @@ void ulsch_channel_compensation(int32_t **rxdataF_ext, ul_ch_mag128[2] = _mm_unpacklo_epi16(mmtmpU1,mmtmpU1); // printf("comp: symbol %d rb %d => %d,%d,%d (output_shift %d)\n",symbol,rb,*((int16_t*)&ul_ch_mag128[0]),*((int16_t*)&ul_ch_mag128[1]),*((int16_t*)&ul_ch_mag128[2]),output_shift); + + +#elif defined(__arm__) + mmtmpU0 = vmull_s16(ul_ch128[0], ul_ch128[0]); + mmtmpU0 = vqshlq_s32(vqaddq_s32(mmtmpU0,vrev64q_s32(mmtmpU0)),-output_shift128); + mmtmpU1 = vmull_s16(ul_ch128[1], ul_ch128[1]); + mmtmpU1 = vqshlq_s32(vqaddq_s32(mmtmpU1,vrev64q_s32(mmtmpU1)),-output_shift128); + ul_ch_mag128[0] = vcombine_s16(vmovn_s32(mmtmpU0),vmovn_s32(mmtmpU1)); + mmtmpU0 = vmull_s16(ul_ch128[2], ul_ch128[2]); + mmtmpU0 = vqshlq_s32(vqaddq_s32(mmtmpU0,vrev64q_s32(mmtmpU0)),-output_shift128); + mmtmpU1 = vmull_s16(ul_ch128[3], ul_ch128[3]); + mmtmpU1 = vqshlq_s32(vqaddq_s32(mmtmpU1,vrev64q_s32(mmtmpU1)),-output_shift128); + ul_ch_mag128[1] = vcombine_s16(vmovn_s32(mmtmpU0),vmovn_s32(mmtmpU1)); + mmtmpU0 = vmull_s16(ul_ch128[4], ul_ch128[4]); + mmtmpU0 = vqshlq_s32(vqaddq_s32(mmtmpU0,vrev64q_s32(mmtmpU0)),-output_shift128); + mmtmpU1 = vmull_s16(ul_ch128[5], ul_ch128[5]); + mmtmpU1 = vqshlq_s32(vqaddq_s32(mmtmpU1,vrev64q_s32(mmtmpU1)),-output_shift128); + ul_ch_mag128[2] = vcombine_s16(vmovn_s32(mmtmpU0),vmovn_s32(mmtmpU1)); + +#endif #endif +#if defined(__x86_64__) || defined(__i386__) // multiply by conjugated channel mmtmpU0 = _mm_madd_epi16(ul_ch128[0],rxdataF128[0]); // print_ints("re",&mmtmpU0); @@ -853,21 +1064,81 @@ void ulsch_channel_compensation(int32_t **rxdataF_ext, ul_ch_mag128b+=3; rxdataF128+=3; rxdataF_comp128+=3; +#elif defined(__arm__) + mmtmpU0 = vmull_s16(ul_ch128[0], rxdataF128[0]); + //mmtmpU0 = [Re(ch[0])Re(rx[0]) Im(ch[0])Im(ch[0]) Re(ch[1])Re(rx[1]) Im(ch[1])Im(ch[1])] + mmtmpU1 = vmull_s16(ul_ch128[1], rxdataF128[1]); + //mmtmpU1 = [Re(ch[2])Re(rx[2]) Im(ch[2])Im(ch[2]) Re(ch[3])Re(rx[3]) Im(ch[3])Im(ch[3])] + mmtmpU0 = vcombine_s32(vpadd_s32(vget_low_s32(mmtmpU0),vget_high_s32(mmtmpU0)), + vpadd_s32(vget_low_s32(mmtmpU1),vget_high_s32(mmtmpU1))); + //mmtmpU0 = [Re(ch[0])Re(rx[0])+Im(ch[0])Im(ch[0]) Re(ch[1])Re(rx[1])+Im(ch[1])Im(ch[1]) Re(ch[2])Re(rx[2])+Im(ch[2])Im(ch[2]) Re(ch[3])Re(rx[3])+Im(ch[3])Im(ch[3])] + mmtmpU0b = vmull_s16(vrev32_s16(vmul_s16(ul_ch128[0],*(int16x4_t*)conj)), rxdataF128[0]); + //mmtmpU0 = [-Im(ch[0])Re(rx[0]) Re(ch[0])Im(rx[0]) -Im(ch[1])Re(rx[1]) Re(ch[1])Im(rx[1])] + mmtmpU1b = vmull_s16(vrev32_s16(vmul_s16(ul_ch128[1],*(int16x4_t*)conj)), rxdataF128[1]); + //mmtmpU0 = [-Im(ch[2])Re(rx[2]) Re(ch[2])Im(rx[2]) -Im(ch[3])Re(rx[3]) Re(ch[3])Im(rx[3])] + mmtmpU1 = vcombine_s32(vpadd_s32(vget_low_s32(mmtmpU0b),vget_high_s32(mmtmpU0b)), + vpadd_s32(vget_low_s32(mmtmpU1b),vget_high_s32(mmtmpU1b))); + //mmtmpU1 = [-Im(ch[0])Re(rx[0])+Re(ch[0])Im(rx[0]) -Im(ch[1])Re(rx[1])+Re(ch[1])Im(rx[1]) -Im(ch[2])Re(rx[2])+Re(ch[2])Im(rx[2]) -Im(ch[3])Re(rx[3])+Re(ch[3])Im(rx[3])] + + mmtmpU0 = vqshlq_s32(mmtmpU0,-output_shift128); + mmtmpU1 = vqshlq_s32(mmtmpU1,-output_shift128); + rxdataF_comp128[0] = vcombine_s16(vmovn_s32(mmtmpU0),vmovn_s32(mmtmpU1)); + mmtmpU0 = vmull_s16(ul_ch128[2], rxdataF128[2]); + mmtmpU1 = vmull_s16(ul_ch128[3], rxdataF128[3]); + mmtmpU0 = vcombine_s32(vpadd_s32(vget_low_s32(mmtmpU0),vget_high_s32(mmtmpU0)), + vpadd_s32(vget_low_s32(mmtmpU1),vget_high_s32(mmtmpU1))); + mmtmpU0b = vmull_s16(vrev32_s16(vmul_s16(ul_ch128[2],*(int16x4_t*)conj)), rxdataF128[2]); + mmtmpU1b = vmull_s16(vrev32_s16(vmul_s16(ul_ch128[3],*(int16x4_t*)conj)), rxdataF128[3]); + mmtmpU1 = vcombine_s32(vpadd_s32(vget_low_s32(mmtmpU0b),vget_high_s32(mmtmpU0b)), + vpadd_s32(vget_low_s32(mmtmpU1b),vget_high_s32(mmtmpU1b))); + mmtmpU0 = vqshlq_s32(mmtmpU0,-output_shift128); + mmtmpU1 = vqshlq_s32(mmtmpU1,-output_shift128); + rxdataF_comp128[1] = vcombine_s16(vmovn_s32(mmtmpU0),vmovn_s32(mmtmpU1)); + + mmtmpU0 = vmull_s16(ul_ch128[4], rxdataF128[4]); + mmtmpU1 = vmull_s16(ul_ch128[5], rxdataF128[5]); + mmtmpU0 = vcombine_s32(vpadd_s32(vget_low_s32(mmtmpU0),vget_high_s32(mmtmpU0)), + vpadd_s32(vget_low_s32(mmtmpU1),vget_high_s32(mmtmpU1))); + + mmtmpU0b = vmull_s16(vrev32_s16(vmul_s16(ul_ch128[4],*(int16x4_t*)conj)), rxdataF128[4]); + mmtmpU1b = vmull_s16(vrev32_s16(vmul_s16(ul_ch128[5],*(int16x4_t*)conj)), rxdataF128[5]); + mmtmpU1 = vcombine_s32(vpadd_s32(vget_low_s32(mmtmpU0b),vget_high_s32(mmtmpU0b)), + vpadd_s32(vget_low_s32(mmtmpU1b),vget_high_s32(mmtmpU1b))); + + + mmtmpU0 = vqshlq_s32(mmtmpU0,-output_shift128); + mmtmpU1 = vqshlq_s32(mmtmpU1,-output_shift128); + rxdataF_comp128[2] = vcombine_s16(vmovn_s32(mmtmpU0),vmovn_s32(mmtmpU1)); + + // Add a jitter to compensate for the saturation in "packs" resulting in a bias on the DC after IDFT + rxdataF_comp128[0] = vqaddq_s16(rxdataF_comp128[0],(*(int16x8_t*)&jitter[0])); + rxdataF_comp128[1] = vqaddq_s16(rxdataF_comp128[1],(*(int16x8_t*)&jitter[0])); + rxdataF_comp128[2] = vqaddq_s16(rxdataF_comp128[2],(*(int16x8_t*)&jitter[0])); + + + ul_ch128+=6; + ul_ch_mag128+=3; + ul_ch_mag128b+=3; + rxdataF128+=6; + rxdataF_comp128+=3; + +#endif } } - +#if defined(__x86_64__) || defined(__i386__) _mm_empty(); _m_empty(); - +#endif } - +#if defined(__x86_64__) || defined(__i386__) __m128i QAM_amp128U_0,QAM_amp128bU_0,QAM_amp128U_1,QAM_amp128bU_1; +#endif void ulsch_channel_compensation_alamouti(int32_t **rxdataF_ext, // For Distributed Alamouti Combining int32_t **ul_ch_estimates_ext_0, @@ -884,7 +1155,7 @@ void ulsch_channel_compensation_alamouti(int32_t **rxdataF_ext, uint16_t nb_rb, uint8_t output_shift) { - +#if defined(__x86_64__) || defined(__i386__) uint16_t rb; __m128i *ul_ch128_0,*ul_ch128_1,*ul_ch_mag128_0,*ul_ch_mag128_1,*ul_ch_mag128b_0,*ul_ch_mag128b_1,*rxdataF128,*rxdataF_comp128_0,*rxdataF_comp128_1; uint8_t aarx;//,symbol_mod; @@ -1152,7 +1423,7 @@ void ulsch_channel_compensation_alamouti(int32_t **rxdataF_ext, _mm_empty(); _m_empty(); - +#endif } @@ -1172,6 +1443,7 @@ void ulsch_alamouti(LTE_DL_FRAME_PARMS *frame_parms,// For Distributed Alamouti uint16_t nb_rb) { +#if defined(__x86_64__) || defined(__i386__) int16_t *rxF,*rxF0,*rxF1; __m128i *ch_mag,*ch_magb,*ch_mag0,*ch_mag1,*ch_mag0b,*ch_mag1b; uint8_t rb,re,aarx; @@ -1227,13 +1499,18 @@ void ulsch_alamouti(LTE_DL_FRAME_PARMS *frame_parms,// For Distributed Alamouti _mm_empty(); _m_empty(); +#endif } +#if defined(__x86_64__) || defined(__i386__) __m128i avg128U; +#elif defined(__arm__) +int32x4_t avg128U; +#endif void ulsch_channel_level(int32_t **drs_ch_estimates_ext, LTE_DL_FRAME_PARMS *frame_parms, @@ -1243,11 +1520,14 @@ void ulsch_channel_level(int32_t **drs_ch_estimates_ext, int16_t rb; uint8_t aarx; +#if defined(__x86_64__) || defined(__i386__) __m128i *ul_ch128; - - +#elif defined(__arm__) + int16x4_t *ul_ch128; +#endif for (aarx=0; aarxnb_antennas_rx; aarx++) { //clear average level +#if defined(__x86_64__) || defined(__i386__) avg128U = _mm_setzero_si128(); ul_ch128=(__m128i *)drs_ch_estimates_ext[aarx]; @@ -1259,33 +1539,44 @@ void ulsch_channel_level(int32_t **drs_ch_estimates_ext, ul_ch128+=3; - if (rb==0) { - // print_shorts("ul_ch128",&ul_ch128[0]); - // print_shorts("ul_ch128",&ul_ch128[1]); - // print_shorts("ul_ch128",&ul_ch128[2]); - } } +#elif defined(__arm__) + avg128U = vdupq_n_s32(0); + ul_ch128=(int16x4_t *)drs_ch_estimates_ext[aarx]; + + for (rb=0; rb moved to LTE_eNB_PUSCH structure -int32_t ulsch_power[2]; -int32_t ulsch_power_0[2],ulsch_power_1[2];// For the distributed Alamouti Scheme -*/ void rx_ulsch(PHY_VARS_eNB *phy_vars_eNB, uint32_t sched_subframe, @@ -1325,6 +1616,11 @@ void rx_ulsch(PHY_VARS_eNB *phy_vars_eNB, rx_power_correction = 1; + if (ulsch[UE_id]->harq_processes[harq_pid]->nb_rb == 0) { + LOG_E(PHY,"PUSCH (%d/%x) nb_rb=0!\n", harq_pid,ulsch[UE_id]->rnti,harq_pid); + return; + } + for (l=0; l<(frame_parms->symbols_per_tti-ulsch[UE_id]->harq_processes[harq_pid]->srs_active); l++) { #ifdef DEBUG_ULSCH diff --git a/openair1/PHY/LTE_TRANSPORT/ulsch_modulation.c b/openair1/PHY/LTE_TRANSPORT/ulsch_modulation.c index 6ecca59ae4..46a49fb793 100644 --- a/openair1/PHY/LTE_TRANSPORT/ulsch_modulation.c +++ b/openair1/PHY/LTE_TRANSPORT/ulsch_modulation.c @@ -49,12 +49,15 @@ //#define DEBUG_ULSCH_MODULATION -__m128i dft_in128[4][1200],dft_in128[4][1200],dft_out128[4][1200],dft_out128[4][1200]; - #ifndef OFDMA_ULSCH void dft_lte(mod_sym_t *z,mod_sym_t *d, int32_t Msc_PUSCH, uint8_t Nsymb) { +#if defined(__x86_64__) || defined(__i386__) + __m128i dft_in128[4][1200],dft_out128[4][1200]; +#elif defined(__arm__) + int16x8_t dft_in128[4][1200],dft_out128[4][1200]; +#endif uint32_t *dft_in0=(uint32_t*)dft_in128[0],*dft_out0=(uint32_t*)dft_out128[0]; uint32_t *dft_in1=(uint32_t*)dft_in128[1],*dft_out1=(uint32_t*)dft_out128[1]; uint32_t *dft_in2=(uint32_t*)dft_in128[2],*dft_out2=(uint32_t*)dft_out128[2]; @@ -64,8 +67,11 @@ void dft_lte(mod_sym_t *z,mod_sym_t *d, int32_t Msc_PUSCH, uint8_t Nsymb) uint32_t *z0,*z1,*z2,*z3,*z4,*z5,*z6,*z7,*z8,*z9,*z10,*z11; uint32_t i,ip; +#if defined(__x86_64__) || defined(__i386__) __m128i norm128; - +#elif defined(__arm__) + int16x8_t norm128; +#endif // msg("Doing lte_dft for Msc_PUSCH %d\n",Msc_PUSCH); d0 = (uint32_t *)d; @@ -119,12 +125,21 @@ void dft_lte(mod_sym_t *z,mod_sym_t *d, int32_t Msc_PUSCH, uint8_t Nsymb) dft12f(&((__m128i *)dft_in2)[0],&((__m128i *)dft_in2)[1],&((__m128i *)dft_in2)[2],&((__m128i *)dft_in2)[3],&((__m128i *)dft_in2)[4],&((__m128i *)dft_in2)[5],&((__m128i *)dft_in2)[6],&((__m128i *)dft_in2)[7],&((__m128i *)dft_in2)[8],&((__m128i *)dft_in2)[9],&((__m128i *)dft_in2)[10],&((__m128i *)dft_in2)[11], &((__m128i *)dft_out2)[0],&((__m128i *)dft_out2)[1],&((__m128i *)dft_out2)[2],&((__m128i *)dft_out2)[3],&((__m128i *)dft_out2)[4],&((__m128i *)dft_out2)[5],&((__m128i *)dft_out2)[6],&((__m128i *)dft_out2)[7],&((__m128i *)dft_out2)[8],&((__m128i *)dft_out2)[9],&((__m128i *)dft_out2)[10],&((__m128i *)dft_out2)[11]); */ +#if defined(__x86_64__) || defined(__i386__) norm128 = _mm_set1_epi16(9459); - +#elif defined(__arm__) + norm128 = vdupq_n_s16(9459); +#endif for (i=0; i<12; i++) { +#if defined(__x86_64__) || defined(__i386__) ((__m128i*)dft_out0)[i] = _mm_slli_epi16(_mm_mulhi_epi16(((__m128i*)dft_out0)[i],norm128),1); ((__m128i*)dft_out1)[i] = _mm_slli_epi16(_mm_mulhi_epi16(((__m128i*)dft_out1)[i],norm128),1); ((__m128i*)dft_out2)[i] = _mm_slli_epi16(_mm_mulhi_epi16(((__m128i*)dft_out2)[i],norm128),1); +#elif defined(__arm__) + ((int16x8_t*)dft_out0)[i] = vqdmulhq_s16(((int16x8_t*)dft_out0)[i],norm128); + ((int16x8_t*)dft_out1)[i] = vqdmulhq_s16(((int16x8_t*)dft_out1)[i],norm128); + ((int16x8_t*)dft_out2)[i] = vqdmulhq_s16(((int16x8_t*)dft_out2)[i],norm128); +#endif } break; diff --git a/openair1/PHY/MODULATION/defs.h b/openair1/PHY/MODULATION/defs.h index 0e78ee3416..3c2e1cad05 100644 --- a/openair1/PHY/MODULATION/defs.h +++ b/openair1/PHY/MODULATION/defs.h @@ -62,13 +62,15 @@ void PHY_ofdm_mod(int *input, \param Ns Slot number (0..19) \param sample_offset offset within rxdata (points to beginning of subframe) \param no_prefix if 1 prefix is removed by HW +\param reset_freq_est if non-zero it resets the frequency offset estimation loop */ int slot_fep(PHY_VARS_UE *phy_vars_ue, unsigned char l, unsigned char Ns, int sample_offset, - int no_prefix); + int no_prefix, + int reset_freq_est); int slot_fep_mbsfn(PHY_VARS_UE *phy_vars_ue, unsigned char l, diff --git a/openair1/PHY/MODULATION/slot_fep.c b/openair1/PHY/MODULATION/slot_fep.c index 5597f3f7fb..ec1c0045b0 100644 --- a/openair1/PHY/MODULATION/slot_fep.c +++ b/openair1/PHY/MODULATION/slot_fep.c @@ -33,22 +33,13 @@ #define SOFFSET 0 -void rescale(int16_t *input,int length) -{ - - __m128i *input128 = (__m128i *)input; - int i; - - for (i=0; i>2; i++) { - input128[i] = _mm_srai_epi16(input128[i],4); - } -} int slot_fep(PHY_VARS_UE *phy_vars_ue, unsigned char l, unsigned char Ns, int sample_offset, - int no_prefix) + int no_prefix, + int reset_freq_est) { LTE_DL_FRAME_PARMS *frame_parms = &phy_vars_ue->lte_frame_parms; @@ -145,18 +136,11 @@ int slot_fep(PHY_VARS_UE *phy_vars_ue, memcpy((void *)tmp_dft_in, (void *)&ue_common_vars->rxdata[aa][(rx_offset-nb_prefix_samples0) % frame_length_samples], frame_parms->ofdm_symbol_size*sizeof(int)); -#ifdef OAI_USRP - rescale((int16_t *)tmp_dft_in, - frame_parms->ofdm_symbol_size); -#endif dft((int16_t *)tmp_dft_in, (int16_t *)&ue_common_vars->rxdataF[aa][frame_parms->ofdm_symbol_size*symbol],1); } else { // use dft input from RX buffer directly start_meas(&phy_vars_ue->rx_dft_stats); -#ifdef OAI_USRP - rescale((int16_t *)&ue_common_vars->rxdata[aa][(rx_offset-nb_prefix_samples0) % frame_length_samples], - frame_parms->ofdm_symbol_size+nb_prefix_samples0); -#endif + dft((int16_t *)&ue_common_vars->rxdata[aa][(rx_offset) % frame_length_samples], (int16_t *)&ue_common_vars->rxdataF[aa][frame_parms->ofdm_symbol_size*symbol],1); stop_meas(&phy_vars_ue->rx_dft_stats); @@ -183,17 +167,10 @@ int slot_fep(PHY_VARS_UE *phy_vars_ue, memcpy((void *)tmp_dft_in, (void *)&ue_common_vars->rxdata[aa][(rx_offset) % frame_length_samples], frame_parms->ofdm_symbol_size*sizeof(int)); -#ifdef OAI_USRP - rescale((int16_t *)tmp_dft_in, - frame_parms->ofdm_symbol_size); -#endif dft((int16_t *)tmp_dft_in, (int16_t *)&ue_common_vars->rxdataF[aa][frame_parms->ofdm_symbol_size*symbol],1); } else { // use dft input from RX buffer directly -#ifdef OAI_USRP - rescale((int16_t *)&ue_common_vars->rxdata[aa][(rx_offset-nb_prefix_samples) % frame_length_samples], - frame_parms->ofdm_symbol_size+nb_prefix_samples); -#endif + dft((int16_t *)&ue_common_vars->rxdata[aa][(rx_offset) % frame_length_samples], (int16_t *)&ue_common_vars->rxdataF[aa][frame_parms->ofdm_symbol_size*symbol],1); } @@ -241,7 +218,8 @@ int slot_fep(PHY_VARS_UE *phy_vars_ue, lte_est_freq_offset(ue_common_vars->dl_ch_estimates[0], frame_parms, l, - &ue_common_vars->freq_offset); + &ue_common_vars->freq_offset, + reset_freq_est); stop_meas(&phy_vars_ue->dlsch_freq_offset_estimation_stats); } diff --git a/openair1/PHY/MODULATION/ul_7_5_kHz.c b/openair1/PHY/MODULATION/ul_7_5_kHz.c index 34e62e0f98..0e7c1785fa 100755 --- a/openair1/PHY/MODULATION/ul_7_5_kHz.c +++ b/openair1/PHY/MODULATION/ul_7_5_kHz.c @@ -48,7 +48,13 @@ void apply_7_5_kHz(PHY_VARS_UE *phy_vars_ue,int32_t*txdata,uint8_t slot) uint16_t len; uint32_t *kHz7_5ptr; +#if defined(__x86_64__) || defined(__i386__) __m128i *txptr128,*kHz7_5ptr128,mmtmp_re,mmtmp_im,mmtmp_re2,mmtmp_im2; +#elif defined(__arm__) + int16x8_t *txptr128,*kHz7_5ptr128; + int32x4_t mmtmp_re,mmtmp_im; + int32x4_t mmtmp0,mmtmp1; +#endif uint32_t slot_offset; // uint8_t aa; uint32_t i; @@ -90,13 +96,17 @@ void apply_7_5_kHz(PHY_VARS_UE *phy_vars_ue,int32_t*txdata,uint8_t slot) // slot_offset += (len/4); len = phy_vars_ue->lte_frame_parms.samples_per_tti/2; - //for (aa=0;aalte_frame_parms.nb_antennas_tx;aa++) { +#if defined(__x86_64__) || defined(__i386__) txptr128 = (__m128i *)&txdata[slot_offset]; kHz7_5ptr128 = (__m128i *)kHz7_5ptr; +#elif defined(__arm__) + txptr128 = (int16x8_t*)&txdata[slot_offset]; + kHz7_5ptr128 = (int16x8_t*)kHz7_5ptr; +#endif // apply 7.5 kHz - // if (((slot>>1)&1) == 0) { // apply the sinusoid from the table directly for (i=0; i<(len>>2); i++) { +#if defined(__x86_64__) || defined(__i386__) mmtmp_re = _mm_madd_epi16(*txptr128,*kHz7_5ptr128); // Real part of complex multiplication (note: 7_5kHz signal is conjugated for this to work) mmtmp_im = _mm_shufflelo_epi16(*kHz7_5ptr128,_MM_SHUFFLE(2,3,0,1)); @@ -107,39 +117,32 @@ void apply_7_5_kHz(PHY_VARS_UE *phy_vars_ue,int32_t*txdata,uint8_t slot) mmtmp_im = _mm_srai_epi32(mmtmp_im,15); mmtmp_re2 = _mm_unpacklo_epi32(mmtmp_re,mmtmp_im); mmtmp_im2 = _mm_unpackhi_epi32(mmtmp_re,mmtmp_im); - /* - printf("%d: (%d,%d) (%d,%d) (%d,%d) (%d,%d) x (%d,%d) (%d,%d) (%d,%d) (%d,%d) => ", - i, - ((short*)txptr128)[0], - ((short*)txptr128)[1], - ((short*)txptr128)[2], - ((short*)txptr128)[3], - ((short*)txptr128)[4], - ((short*)txptr128)[5], - ((short*)txptr128)[6], - ((short*)txptr128)[7], - ((short*)kHz7_5ptr128)[0], - ((short*)kHz7_5ptr128)[1], - ((short*)kHz7_5ptr128)[2], - ((short*)kHz7_5ptr128)[3], - ((short*)kHz7_5ptr128)[4], - ((short*)kHz7_5ptr128)[5], - ((short*)kHz7_5ptr128)[6], - ((short*)kHz7_5ptr128)[7]);*/ txptr128[0] = _mm_packs_epi32(mmtmp_re2,mmtmp_im2); - /* printf("%(%d,%d) (%d,%d) (%d,%d) (%d,%d)\n", - ((short*)txptr128)[0], - ((short*)txptr128)[1], - ((short*)txptr128)[2], - ((short*)txptr128)[3], - ((short*)txptr128)[4], - ((short*)txptr128)[5], - ((short*)txptr128)[6], - ((short*)txptr128)[7]);*/ + txptr128++; + kHz7_5ptr128++; +#elif defined(__arm__) + mmtmp0 = vmull_s16(((int16x4_t*)txptr128)[0],((int16x4_t*)kHz7_5ptr128)[0]); + //mmtmp0 = [Re(ch[0])Re(rx[0]) Im(ch[0])Im(ch[0]) Re(ch[1])Re(rx[1]) Im(ch[1])Im(ch[1])] + mmtmp1 = vmull_s16(((int16x4_t*)txptr128)[1],((int16x4_t*)kHz7_5ptr128)[1]); + //mmtmp1 = [Re(ch[2])Re(rx[2]) Im(ch[2])Im(ch[2]) Re(ch[3])Re(rx[3]) Im(ch[3])Im(ch[3])] + mmtmp_re = vcombine_s32(vpadd_s32(vget_low_s32(mmtmp0),vget_high_s32(mmtmp0)), + vpadd_s32(vget_low_s32(mmtmp1),vget_high_s32(mmtmp1))); + //mmtmp_re = [Re(ch[0])Re(rx[0])+Im(ch[0])Im(ch[0]) Re(ch[1])Re(rx[1])+Im(ch[1])Im(ch[1]) Re(ch[2])Re(rx[2])+Im(ch[2])Im(ch[2]) Re(ch[3])Re(rx[3])+Im(ch[3])Im(ch[3])] + + mmtmp0 = vmull_s16(vrev32_s16(vmul_s16(((int16x4_t*)txptr128)[0],*(int16x4_t*)conjugate75_2)),((int16x4_t*)kHz7_5ptr128)[0]); + //mmtmp0 = [-Im(ch[0])Re(rx[0]) Re(ch[0])Im(rx[0]) -Im(ch[1])Re(rx[1]) Re(ch[1])Im(rx[1])] + mmtmp1 = vmull_s16(vrev32_s16(vmul_s16(((int16x4_t*)txptr128)[1],*(int16x4_t*)conjugate75_2)), ((int16x4_t*)kHz7_5ptr128)[1]); + //mmtmp0 = [-Im(ch[2])Re(rx[2]) Re(ch[2])Im(rx[2]) -Im(ch[3])Re(rx[3]) Re(ch[3])Im(rx[3])] + mmtmp_im = vcombine_s32(vpadd_s32(vget_low_s32(mmtmp0),vget_high_s32(mmtmp0)), + vpadd_s32(vget_low_s32(mmtmp1),vget_high_s32(mmtmp1))); + //mmtmp_im = [-Im(ch[0])Re(rx[0])+Re(ch[0])Im(rx[0]) -Im(ch[1])Re(rx[1])+Re(ch[1])Im(rx[1]) -Im(ch[2])Re(rx[2])+Re(ch[2])Im(rx[2]) -Im(ch[3])Re(rx[3])+Re(ch[3])Im(rx[3])] + + txptr128[0] = vcombine_s16(vmovn_s32(mmtmp_re),vmovn_s32(mmtmp_im)); txptr128++; kHz7_5ptr128++; +#endif } //} @@ -154,7 +157,14 @@ void remove_7_5_kHz(PHY_VARS_eNB *phy_vars_eNB,uint8_t slot) int32_t **rxdata_7_5kHz=phy_vars_eNB->lte_eNB_common_vars.rxdata_7_5kHz[0]; uint16_t len; uint32_t *kHz7_5ptr; +#if defined(__x86_64__) || defined(__i386__) __m128i *rxptr128,*rxptr128_7_5kHz,*kHz7_5ptr128,kHz7_5_2,mmtmp_re,mmtmp_im,mmtmp_re2,mmtmp_im2; +#elif defined(__arm__) + int16x8_t *rxptr128,*kHz7_5ptr128,*rxptr128_7_5kHz; + int32x4_t mmtmp_re,mmtmp_im; + int32x4_t mmtmp0,mmtmp1; + +#endif uint32_t slot_offset,slot_offset2; uint8_t aa; uint32_t i; @@ -199,14 +209,21 @@ void remove_7_5_kHz(PHY_VARS_eNB *phy_vars_eNB,uint8_t slot) for (aa=0; aalte_frame_parms.nb_antennas_rx; aa++) { +#if defined(__x86_64__) || defined(__i386__) rxptr128 = (__m128i *)&rxdata[aa][slot_offset]; rxptr128_7_5kHz = (__m128i *)&rxdata_7_5kHz[aa][slot_offset2]; kHz7_5ptr128 = (__m128i *)kHz7_5ptr; - +#elif defined(__arm__) + rxptr128 = (int16x8_t *)&rxdata[aa][slot_offset]; + rxptr128_7_5kHz = (int16x8_t *)&rxdata_7_5kHz[aa][slot_offset2]; + kHz7_5ptr128 = (int16x8_t *)kHz7_5ptr; +#endif // apply 7.5 kHz // if (((slot>>1)&1) == 0) { // apply the sinusoid from the table directly for (i=0; i<(len>>2); i++) { + +#if defined(__x86_64__) || defined(__i386__) kHz7_5_2 = _mm_sign_epi16(*kHz7_5ptr128,*(__m128i*)&conjugate75_2[0]); mmtmp_re = _mm_madd_epi16(*rxptr128,kHz7_5_2); // Real part of complex multiplication (note: 7_5kHz signal is conjugated for this to work) @@ -223,350 +240,33 @@ void remove_7_5_kHz(PHY_VARS_eNB *phy_vars_eNB,uint8_t slot) rxptr128++; rxptr128_7_5kHz++; kHz7_5ptr128++; + +#elif defined(__arm__) + + kHz7_5ptr128[0] = vmulq_s16(kHz7_5ptr128[0],((int16x8_t*)conjugate75_2)[0]); + mmtmp0 = vmull_s16(((int16x4_t*)rxptr128)[0],((int16x4_t*)kHz7_5ptr128)[0]); + //mmtmp0 = [Re(ch[0])Re(rx[0]) Im(ch[0])Im(ch[0]) Re(ch[1])Re(rx[1]) Im(ch[1])Im(ch[1])] + mmtmp1 = vmull_s16(((int16x4_t*)rxptr128)[1],((int16x4_t*)kHz7_5ptr128)[1]); + //mmtmp1 = [Re(ch[2])Re(rx[2]) Im(ch[2])Im(ch[2]) Re(ch[3])Re(rx[3]) Im(ch[3])Im(ch[3])] + mmtmp_re = vcombine_s32(vpadd_s32(vget_low_s32(mmtmp0),vget_high_s32(mmtmp0)), + vpadd_s32(vget_low_s32(mmtmp1),vget_high_s32(mmtmp1))); + //mmtmp_re = [Re(ch[0])Re(rx[0])+Im(ch[0])Im(ch[0]) Re(ch[1])Re(rx[1])+Im(ch[1])Im(ch[1]) Re(ch[2])Re(rx[2])+Im(ch[2])Im(ch[2]) Re(ch[3])Re(rx[3])+Im(ch[3])Im(ch[3])] + + mmtmp0 = vmull_s16(vrev32_s16(vmul_s16(((int16x4_t*)rxptr128)[0],*(int16x4_t*)conjugate75_2)), ((int16x4_t*)kHz7_5ptr128)[0]); + //mmtmp0 = [-Im(ch[0])Re(rx[0]) Re(ch[0])Im(rx[0]) -Im(ch[1])Re(rx[1]) Re(ch[1])Im(rx[1])] + mmtmp1 = vmull_s16(vrev32_s16(vmul_s16(((int16x4_t*)rxptr128)[1],*(int16x4_t*)conjugate75_2)), ((int16x4_t*)kHz7_5ptr128)[1]); + //mmtmp1 = [-Im(ch[2])Re(rx[2]) Re(ch[2])Im(rx[2]) -Im(ch[3])Re(rx[3]) Re(ch[3])Im(rx[3])] + mmtmp_im = vcombine_s32(vpadd_s32(vget_low_s32(mmtmp0),vget_high_s32(mmtmp0)), + vpadd_s32(vget_low_s32(mmtmp1),vget_high_s32(mmtmp1))); + //mmtmp_im = [-Im(ch[0])Re(rx[0])+Re(ch[0])Im(rx[0]) -Im(ch[1])Re(rx[1])+Re(ch[1])Im(rx[1]) -Im(ch[2])Re(rx[2])+Re(ch[2])Im(rx[2]) -Im(ch[3])Re(rx[3])+Re(ch[3])Im(rx[3])] + + rxptr128_7_5kHz[0] = vcombine_s16(vmovn_s32(mmtmp_re),vmovn_s32(mmtmp_im)); + rxptr128_7_5kHz++; + rxptr128++; + kHz7_5ptr128++; + + +#endif } } } - - - -void apply_625_Hz(PHY_VARS_UE *phy_vars_ue,int16_t *prach) -{ - - uint32_t *Hz625ptr; - __m128i *txptr128,*Hz625ptr128,mmtmp_re,mmtmp_im,mmtmp_re2,mmtmp_im2; - uint8_t aa; - uint32_t Ncp,len; - uint32_t i; - LTE_DL_FRAME_PARMS *frame_parms=&phy_vars_ue->lte_frame_parms; - uint8_t frame_type = phy_vars_ue->lte_frame_parms.frame_type; - uint8_t prach_ConfigIndex = phy_vars_ue->lte_frame_parms.prach_config_common.prach_ConfigInfo.prach_ConfigIndex; - uint8_t prach_fmt = get_prach_fmt(prach_ConfigIndex,frame_type); - - switch (prach_fmt) { - case 0: - Ncp = 3168; - break; - - case 1: - case 3: - Ncp = 21024; - break; - - case 2: - Ncp = 6240; - break; - - case 4: - Ncp = 448; - break; - - default: - Ncp = 3168; - break; - } - - switch (frame_parms->N_RB_UL) { - - case 6: - Hz625ptr = (uint32_t*)sig625_1_25MHz; - len = 1536 + (Ncp>>4); - break; - - case 15: - Hz625ptr = (uint32_t*)sig625_2_5MHz; - len = 3072 + (Ncp>>3); - break; - - case 25: - Hz625ptr = (uint32_t*)sig625_5MHz; - len = 6144+(Ncp>>2); - break; - - case 50: - Hz625ptr = (uint32_t*)sig625_10MHz; - len = 12288+(Ncp>>1); - break; - - case 75: - Hz625ptr = (uint32_t*)sig625_15MHz; - len = 18432+((2*Ncp)/3); - break; - - case 100: - Hz625ptr = (uint32_t*)sig625_20MHz; - len = 24576+Ncp; - break; - - default: - Hz625ptr = (uint32_t*)sig625_5MHz; - len = 6144+(Ncp>>2); - break; - } - - for (aa=0; aalte_frame_parms.nb_antennas_tx; aa++) { - txptr128 = (__m128i *)prach; - Hz625ptr128 = (__m128i *)Hz625ptr; - // apply 7.5 kHz - - // if (((slot>>1)&1) == 0) { // apply the sinusoid from the table directly - for (i=0; i<(len>>2); i++) { - mmtmp_re = _mm_madd_epi16(*txptr128,*Hz625ptr128); - // Real part of complex multiplication (note: 7_5kHz signal is conjugated for this to work) - mmtmp_im = _mm_shufflelo_epi16(*Hz625ptr128,_MM_SHUFFLE(2,3,0,1)); - mmtmp_im = _mm_shufflehi_epi16(mmtmp_im,_MM_SHUFFLE(2,3,0,1)); - mmtmp_im = _mm_sign_epi16(mmtmp_im,*(__m128i*)&conjugate75[0]); - mmtmp_im = _mm_madd_epi16(mmtmp_im,txptr128[0]); - mmtmp_re = _mm_srai_epi32(mmtmp_re,15); - mmtmp_im = _mm_srai_epi32(mmtmp_im,15); - mmtmp_re2 = _mm_unpacklo_epi32(mmtmp_re,mmtmp_im); - mmtmp_im2 = _mm_unpackhi_epi32(mmtmp_re,mmtmp_im); - /* - printf("%d: (%d,%d) (%d,%d) (%d,%d) (%d,%d) x (%d,%d) (%d,%d) (%d,%d) (%d,%d) => ", - i, - ((short*)txptr128)[0], - ((short*)txptr128)[1], - ((short*)txptr128)[2], - ((short*)txptr128)[3], - ((short*)txptr128)[4], - ((short*)txptr128)[5], - ((short*)txptr128)[6], - ((short*)txptr128)[7], - ((short*)Hz625ptr128)[0], - ((short*)Hz625ptr128)[1], - ((short*)Hz625ptr128)[2], - ((short*)Hz625ptr128)[3], - ((short*)Hz625ptr128)[4], - ((short*)Hz625ptr128)[5], - ((short*)Hz625ptr128)[6], - ((short*)Hz625ptr128)[7]);*/ - - txptr128[0] = _mm_packs_epi32(mmtmp_re2,mmtmp_im2); - /* printf("%(%d,%d) (%d,%d) (%d,%d) (%d,%d)\n", - ((short*)txptr128)[0], - ((short*)txptr128)[1], - ((short*)txptr128)[2], - ((short*)txptr128)[3], - ((short*)txptr128)[4], - ((short*)txptr128)[5], - ((short*)txptr128)[6], - ((short*)txptr128)[7]);*/ - - txptr128++; - Hz625ptr128++; - } - } -} - -void remove_625_Hz(PHY_VARS_eNB *phy_vars_eNB,int16_t *prach) -{ - - uint32_t *Hz625ptr; - __m128i *txptr128,*Hz625ptr128,Hz625_2,mmtmp_re,mmtmp_im,mmtmp_re2,mmtmp_im2; - uint8_t aa; - uint32_t i,Ncp,len; - LTE_DL_FRAME_PARMS *frame_parms=&phy_vars_eNB->lte_frame_parms; - uint8_t frame_type = frame_parms->frame_type; - uint8_t prach_ConfigIndex = frame_parms->prach_config_common.prach_ConfigInfo.prach_ConfigIndex; - uint8_t prach_fmt = get_prach_fmt(prach_ConfigIndex,frame_type); - - switch (prach_fmt) { - case 0: - Ncp = 3168; - break; - - case 1: - case 3: - Ncp = 21024; - break; - - case 2: - Ncp = 6240; - break; - - case 4: - Ncp = 448; - break; - - default: - Ncp = 3168; - break; - } - - switch (frame_parms->N_RB_UL) { - - case 6: - Hz625ptr = (uint32_t*)sig625_1_25MHz; - len = 1536 + (Ncp>>4); - break; - - case 15: - Hz625ptr = (uint32_t*)sig625_2_5MHz; - len = 3072 + (Ncp>>3) ; - break; - - case 25: - Hz625ptr = (uint32_t*)sig625_5MHz; - len = 6144+(Ncp>>2); - break; - - case 50: - Hz625ptr = (uint32_t*)sig625_10MHz; - len = 12288+(Ncp>>1); - break; - - case 75: - Hz625ptr = (uint32_t*)sig625_15MHz; - len = 18432+((2*Ncp)/3); - break; - - case 100: - Hz625ptr = (uint32_t*)sig625_20MHz; - len = 24576+Ncp; - break; - - default: - Hz625ptr = (uint32_t*)sig625_5MHz; - len = 11400; - break; - } - - for (aa=0; aalte_frame_parms.nb_antennas_tx; aa++) { - txptr128 = (__m128i *)prach; - Hz625ptr128 = (__m128i *)Hz625ptr; - // apply 7.5 kHz - - // if (((slot>>1)&1) == 0) { // apply the sinusoid from the table directly - for (i=0; i<(len>>2); i++) { - Hz625_2 = _mm_sign_epi16(*Hz625ptr128,*(__m128i*)&conjugate75_2[0]); - mmtmp_re = _mm_madd_epi16(*txptr128,Hz625_2); - // Real part of complex multiplication (note: 7_5kHz signal is conjugated for this to work) - mmtmp_im = _mm_shufflelo_epi16(Hz625_2,_MM_SHUFFLE(2,3,0,1)); - mmtmp_im = _mm_shufflehi_epi16(mmtmp_im,_MM_SHUFFLE(2,3,0,1)); - mmtmp_im = _mm_sign_epi16(mmtmp_im,*(__m128i*)&conjugate75[0]); - mmtmp_im = _mm_madd_epi16(mmtmp_im,txptr128[0]); - mmtmp_re = _mm_srai_epi32(mmtmp_re,15); - mmtmp_im = _mm_srai_epi32(mmtmp_im,15); - mmtmp_re2 = _mm_unpacklo_epi32(mmtmp_re,mmtmp_im); - mmtmp_im2 = _mm_unpackhi_epi32(mmtmp_re,mmtmp_im); - /* - printf("%d: (%d,%d) (%d,%d) (%d,%d) (%d,%d) x (%d,%d) (%d,%d) (%d,%d) (%d,%d) => ", - i, - ((short*)txptr128)[0], - ((short*)txptr128)[1], - ((short*)txptr128)[2], - ((short*)txptr128)[3], - ((short*)txptr128)[4], - ((short*)txptr128)[5], - ((short*)txptr128)[6], - ((short*)txptr128)[7], - ((short*)Hz625ptr128)[0], - ((short*)Hz625ptr128)[1], - ((short*)Hz625ptr128)[2], - ((short*)Hz625ptr128)[3], - ((short*)Hz625ptr128)[4], - ((short*)Hz625ptr128)[5], - ((short*)Hz625ptr128)[6], - ((short*)Hz625ptr128)[7]);*/ - - txptr128[0] = _mm_packs_epi32(mmtmp_re2,mmtmp_im2); - /* printf("%(%d,%d) (%d,%d) (%d,%d) (%d,%d)\n", - ((short*)txptr128)[0], - ((short*)txptr128)[1], - ((short*)txptr128)[2], - ((short*)txptr128)[3], - ((short*)txptr128)[4], - ((short*)txptr128)[5], - ((short*)txptr128)[6], - ((short*)txptr128)[7]);*/ - - txptr128++; - Hz625ptr128++; - } - } -} - - -void init_prach625(LTE_DL_FRAME_PARMS *frame_parms) -{ - - uint32_t len,i,Ncp; - double fs; - int16_t *Hz625ptr; - uint8_t frame_type = frame_parms->frame_type; - uint8_t prach_ConfigIndex = frame_parms->prach_config_common.prach_ConfigInfo.prach_ConfigIndex; - uint8_t prach_fmt = get_prach_fmt(prach_ConfigIndex,frame_type); - - switch (prach_fmt) { - case 0: - Ncp = 3168; - break; - - case 1: - case 3: - Ncp = 21024; - break; - - case 2: - Ncp = 6240; - break; - - case 4: - Ncp = 448; - break; - - default: - Ncp = 3168; - break; - } - - switch (frame_parms->N_RB_UL) { - case 6: - len = 1536 + (Ncp>>4); - fs = 1920000.0; - Hz625ptr = sig625_1_25MHz; - break; - - case 15: - len = 3072 + (Ncp>>3) ; - fs = 3840000.0; - Hz625ptr = sig625_2_5MHz; - break; - - case 25: - len = 6144+(Ncp>>2); - fs = 7680000.0; - Hz625ptr = sig625_5MHz; - break; - - case 50: - len = 12288+(Ncp>>1); - fs = 15360000.0; - Hz625ptr = sig625_10MHz; - break; - - case 75: - len = 18432+((2*Ncp)/3); - fs = 23040000.0; - Hz625ptr = sig625_15MHz; - break; - - case 100: - len = 24576+Ncp; - fs = 30720000.0; - Hz625ptr = sig625_20MHz; - break; - - default: - len = 6144+(Ncp>>2); - fs = 7680000.0; - Hz625ptr = sig625_5MHz; - break; - } - - for (i=0; i>2); n++) { + + tmp_re = vmull_s16(*x_128++, *y_128++); + //tmp_re = [Re(x[0])Re(y[0]) Im(x[0])Im(y[0]) Re(x[1])Re(y[1]) Im(x[1])Im(y[1])] + tmp_re1 = vmull_s16(*x_128++, *y_128++); + //tmp_re1 = [Re(x1[1])Re(x2[1]) Im(x1[1])Im(x2[1]) Re(x1[1])Re(x2[2]) Im(x1[1])Im(x2[2])] + tmp_re = vcombine_s32(vpadd_s32(vget_low_s32(tmp_re),vget_high_s32(tmp_re)), + vpadd_s32(vget_low_s32(tmp_re1),vget_high_s32(tmp_re1))); + //tmp_re = [Re(ch[0])Re(rx[0])+Im(ch[0])Im(ch[0]) Re(ch[1])Re(rx[1])+Im(ch[1])Im(ch[1]) Re(ch[2])Re(rx[2])+Im(ch[2]) Im(ch[2]) Re(ch[3])Re(rx[3])+Im(ch[3])Im(ch[3])] + + tmp_im = vmull_s16(vrev32_s16(vmul_s16(*x_128++,*(int16x4_t*)conjug)),*y_128++); + //tmp_im = [-Im(ch[0])Re(rx[0]) Re(ch[0])Im(rx[0]) -Im(ch[1])Re(rx[1]) Re(ch[1])Im(rx[1])] + tmp_im1 = vmull_s16(vrev32_s16(vmul_s16(*x_128++,*(int16x4_t*)conjug)),*y_128++); + //tmp_im1 = [-Im(ch[2])Re(rx[2]) Re(ch[2])Im(rx[2]) -Im(ch[3])Re(rx[3]) Re(ch[3])Im(rx[3])] + tmp_im = vcombine_s32(vpadd_s32(vget_low_s32(tmp_im),vget_high_s32(tmp_im)), + vpadd_s32(vget_low_s32(tmp_im1),vget_high_s32(tmp_im1))); + //tmp_im = [-Im(ch[0])Re(rx[0])+Re(ch[0])Im(rx[0]) -Im(ch[1])Re(rx[1])+Re(ch[1])Im(rx[1]) -Im(ch[2])Re(rx[2])+Re(ch[2])Im(rx[2]) -Im(ch[3])Re(rx[3])+Re(ch[3])Im(rx[3])] + + re_cumul = vqaddq_s32(re_cumul,vqshlq_s32(tmp_re,shift)); + im_cumul = vqaddq_s32(im_cumul,vqshlq_s32(tmp_im,shift)); + } + + re_cumul2 = vpadd_s32(vget_low_s32(re_cumul),vget_high_s32(re_cumul)); + im_cumul2 = vpadd_s32(vget_low_s32(im_cumul),vget_high_s32(im_cumul)); + re_cumul2 = vpadd_s32(re_cumul2,re_cumul2); + im_cumul2 = vpadd_s32(im_cumul2,im_cumul2); + result2 = vzip_s32(re_cumul2,im_cumul2); + return(vget_lane_s32(result2.val[0],0)); +#endif } diff --git a/openair1/PHY/TOOLS/cmult_sv.c b/openair1/PHY/TOOLS/cmult_sv.c index 964ae43fa9..c9d3a8a50e 100644 --- a/openair1/PHY/TOOLS/cmult_sv.c +++ b/openair1/PHY/TOOLS/cmult_sv.c @@ -29,9 +29,27 @@ #include "PHY/sse_intrin.h" #include "defs.h" -#ifndef EXPRESSMIMO_TARGET -static __m128i alpha_128 __attribute__ ((aligned(16))); -static __m128i shift __attribute__ ((aligned(16))); +#if defined(__x86_64__) || defined(__i386__) +#define simd_q15_t __m128i +#define simdshort_q15_t __m64 +#define shiftright_int16(a,shift) _mm_srai_epi16(a,shift) +#define set1_int16(a) _mm_set1_epi16(a) +#define mulhi_int16(a,b) _mm_slli_epi16(_mm_mulhi_epi16(a,b),1) +#define mulhi_s1_int16(a,b) _mm_slli_epi16(_mm_mulhi_epi16(a,b),2) +#define adds_int16(a,b) _mm_adds_epi16(a,b) +#define mullo_int16(a,b) _mm_mullo_epi16(a,b) +#elif defined(__arm__) +#define simd_q15_t int16x8_t +#define simdshort_q15_t int16x4_t +#define shiftright_int16(a,shift) vshrq_n_s16(a,shift) +#define set1_int16(a) vdupq_n_s16(a) +#define mulhi_int16(a,b) vqdmulhq_s16(a,b) +#define mulhi_s1_int16(a,b) vshlq_n_s16(vqdmulhq_s16(a,b),1) +#define adds_int16(a,b) vqaddq_s16(a,b) +#define mullo_int16(a,b) vmulq_s16(a,b) +#define _mm_empty() +#define _m_empty() +#endif void multadd_complex_vector_real_scalar(int16_t *x, @@ -41,19 +59,19 @@ void multadd_complex_vector_real_scalar(int16_t *x, uint32_t N) { - __m128i alpha_128,*x_128=(__m128i*)x,*y_128=(__m128i*)y; + simd_q15_t alpha_128,*x_128=(simd_q15_t *)x,*y_128=(simd_q15_t*)y; int n; - alpha_128 = _mm_set1_epi16(alpha); + alpha_128 = set1_int16(alpha); if (zero_flag == 1) for (n=0; n>2; n++) { - y_128[n] = _mm_slli_epi16(_mm_mulhi_epi16(x_128[n],alpha_128),1); + y_128[n] = mulhi_int16(x_128[n],alpha_128); } else for (n=0; n>2; n++) { - y_128[n] = _mm_adds_epi16(y_128[n],_mm_slli_epi16(_mm_mulhi_epi16(x_128[n],alpha_128),1)); + y_128[n] = adds_int16(y_128[n],mulhi_int16(x_128[n],alpha_128)); } _mm_empty(); @@ -69,32 +87,33 @@ void multadd_real_vector_complex_scalar(int16_t *x, uint32_t i; // do 8 multiplications at a time - __m128i alpha_r_128,alpha_i_128,yr,yi,*x_128=(__m128i*)x,*y_128=(__m128i*)y; + simd_q15_t alpha_r_128,alpha_i_128,yr,yi,*x_128=(simd_q15_t*)x,*y_128=(simd_q15_t*)y; int j; - // printf("alpha = %d,%d\n",alpha[0],alpha[1]); - alpha_r_128 = _mm_set_epi16(alpha[0],alpha[0],alpha[0],alpha[0],alpha[0],alpha[0],alpha[0],alpha[0]); - alpha_i_128 = _mm_set_epi16(alpha[1],alpha[1],alpha[1],alpha[1],alpha[1],alpha[1],alpha[1],alpha[1]); - + alpha_r_128 = set1_int16(alpha[0]); + alpha_i_128 = set1_int16(alpha[1]); j=0; for (i=0; i>3; i++) { - yr = _mm_slli_epi16(_mm_mulhi_epi16(alpha_r_128,x_128[i]),2); - yi = _mm_slli_epi16(_mm_mulhi_epi16(alpha_i_128,x_128[i]),2); - - // print_shorts("yr",&yr); - // print_shorts("yi",&yi); - + yr = mulhi_s1_int16(alpha_r_128,x_128[i]); + yi = mulhi_s1_int16(alpha_i_128,x_128[i]); +#if defined(__x86_64__) || defined(__i386__) y_128[j] = _mm_adds_epi16(y_128[j],_mm_unpacklo_epi16(yr,yi)); - // print_shorts("y",&y_128[j]); j++; y_128[j] = _mm_adds_epi16(y_128[j],_mm_unpackhi_epi16(yr,yi)); - // print_shorts("y",&y_128[j]); j++; - +#elif defined(__arm__) + int16x8x2_t yint; + yint = vzipq_s16(yr,yi); + y_128[j] = adds_int16(y_128[j],yint.val[0]); + j++; + y_128[j] = adds_int16(y_128[j],yint.val[1]); + + j++; +#endif } _mm_empty(); @@ -102,6 +121,7 @@ void multadd_real_vector_complex_scalar(int16_t *x, } +/* int rotate_cpx_vector(int16_t *x, int16_t *alpha, int16_t *y, @@ -127,23 +147,10 @@ int rotate_cpx_vector(int16_t *x, register __m128i m0,m1; - // short *temps; - // int *tempd; - __m128i *x_128; __m128i *y_128; - // __m128i temp; - - /* - msg("rotate_cpx_vector: %x,%x,%x,%d,%d\n", - x, - alpha, - y, - N, - output_shift); - */ shift = _mm_cvtsi32_si128(output_shift); @@ -177,111 +184,44 @@ int rotate_cpx_vector(int16_t *x, // we compute 4 cpx multiply for each loop for(i=0; i<(N>>3); i++) { - // printf("i=%d\n",i); - /* - temps = (short *)x_128; - printf("x1 : %d,%d,%d,%d,%d,%d,%d,%d\n",temps[0],temps[1],temps[2],temps[3],temps[4],temps[5],temps[6],temps[7]); - temps = (int16_t *)&alpha_128; - printf("alpha : %d,%d,%d,%d,%d,%d,%d,%d\n",temps[0],temps[1],temps[2],temps[3],temps[4],temps[5],temps[6],temps[7]); - */ - m0 = _mm_madd_epi16(x_128[0],alpha_128); //pmaddwd_r2r(mm1,mm0); // 1- compute x1[0]*x2[0] - - /* - temp = m0; - - tempd = &temp; - printf("m0 : %d,%d,%d,%d\n",tempd[0],tempd[1],tempd[2],tempd[3]); - - */ m0 = _mm_sra_epi32(m0,shift); // 1- shift right by shift in order to compensate for the input amplitude - /* - temp = m0; - - tempd = (int *)&temp; - printf("m0 : %d,%d,%d,%d\n",tempd[0],tempd[1],tempd[2],tempd[3]); - */ - m1=m0; m0 = _mm_packs_epi32(m1,m0); // 1- pack in a 128 bit register [re im re im] y_128[0] = _mm_unpacklo_epi32(m0,m0); // 1- pack in a 128 bit register [re im re im] - - // temps = (int16_t *)&y_128[0]; - // printf("y0 : %d,%d,%d,%d,%d,%d,%d,%d\n",temps[0],temps[1],temps[2],temps[3],temps[4],temps[5],temps[6],temps[7]); - - - m0 = _mm_madd_epi16(x_128[1],alpha_128); //pmaddwd_r2r(mm1,mm0); // 1- compute x1[0]*x2[0] - m0 = _mm_sra_epi32(m0,shift); // 1- shift right by shift in order to compensate for the input amplitude - - - - m1 = m0; m1 = _mm_packs_epi32(m1,m0); // 1- pack in a 128 bit register [re im re im] - y_128[1] = _mm_unpacklo_epi32(m1,m1); // 1- pack in a 128 bit register [re im re im] - - - m0 = _mm_madd_epi16(x_128[2],alpha_128); //pmaddwd_r2r(mm1,mm0); // 1- compute x1[0]*x2[0] - m0 = _mm_sra_epi32(m0,shift); // 1- shift right by shift in order to compensate for the input amplitude - - - - m1 = m0; m1 = _mm_packs_epi32(m1,m0); // 1- pack in a 128 bit register [re im re im] - y_128[2] = _mm_unpacklo_epi32(m1,m1); // 1- pack in a 128 bit register [re im re im] - - - m0 = _mm_madd_epi16(x_128[3],alpha_128); //pmaddwd_r2r(mm1,mm0); // 1- compute x1[0]*x2[0] - m0 = _mm_sra_epi32(m0,shift); // 1- shift right by shift in order to compensate for the input amplitude - - - - m1 = m0; m1 = _mm_packs_epi32(m1,m0); // 1- pack in a 128 bit register [re im re im] - y_128[3] = _mm_unpacklo_epi32(m1,m1); // 1- pack in a 128 bit register [re im re im] - - if (format==1) { // Put output in proper format (Re,-Im,Im,Re), shuffle = (0,1,3,2) = 0x1e - // print_shorts(y_128[0],"y_128[0]="); y_128[0] = _mm_shufflelo_epi16(y_128[0],0x1e); y_128[0] = _mm_shufflehi_epi16(y_128[0],0x1e); ((int16_t*)&y_128[0])[1] = -((int16_t*)&y_128[0])[1]; ((int16_t*)&y_128[0])[5] = -((int16_t*)&y_128[0])[5]; - // print_shorts(y_128[0],"y_128[0]="); - - // print_shorts(y_128[1],"y_128[1]="); y_128[1] = _mm_shufflelo_epi16(y_128[1],0x1e); y_128[1] = _mm_shufflehi_epi16(y_128[1],0x1e); ((int16_t*)&y_128[1])[1] = -((int16_t*)&y_128[1])[1]; ((int16_t*)&y_128[1])[5] = -((int16_t*)&y_128[1])[5]; - // print_shorts(y_128[1],"y_128[1]="); - - // print_shorts(y_128[2],"y_128[2]="); y_128[2] = _mm_shufflelo_epi16(y_128[2],0x1e); y_128[2] = _mm_shufflehi_epi16(y_128[2],0x1e); ((int16_t*)&y_128[2])[1] = -((int16_t*)&y_128[2])[1]; ((int16_t*)&y_128[2])[5] = -((int16_t*)&y_128[2])[5]; - // print_shorts(y_128[2],"y_128[2]="); - - // print_shorts(y_128[3],"y_128[3]="); y_128[3] = _mm_shufflelo_epi16(y_128[3],0x1e); y_128[3] = _mm_shufflehi_epi16(y_128[3],0x1e); ((int16_t*)&y_128[3])[1] = -((int16_t*)&y_128[3])[1]; ((int16_t*)&y_128[3])[5] = -((int16_t*)&y_128[3])[5]; - // print_shorts(y_128[3],"y_128[3]="); - } @@ -326,16 +266,6 @@ int rotate_cpx_vector2(int16_t *x, __m128i *y_128; - /* - printf("rotate_cpx_vector2: %x,%x,%x,%d,%d\n", - x, - alpha, - y, - N, - output_shift); - */ - - shift = _mm_cvtsi32_si128(output_shift); x_128 = (__m128i *)&x[0]; @@ -361,51 +291,22 @@ int rotate_cpx_vector2(int16_t *x, y_128 = (__m128i *)&y[0]; - // _mm_empty(); - // return(0); - // we compute 4 cpx multiply for each loop for(i=0; i<(N>>1); i++) { - // temps = (short *)&x_128[i]; - // printf("x1 : %d,%d,%d,%d,%d,%d,%d,%d\n",temps[0],temps[1],temps[2],temps[3],temps[4],temps[5],temps[6],temps[7]); - // temps = (short *)&alpha_128; - // printf("x2 : %d,%d,%d,%d,%d,%d,%d,%d\n",temps[0],temps[1],temps[2],temps[3],temps[4],temps[5],temps[6],temps[7]); - m0 = _mm_madd_epi16(x_128[i],alpha_128); //pmaddwd_r2r(mm1,mm0); // 1- compute x1[0]*x2[0] - - // temp = m0; - - // tempd = &temp; - // printf("m0 : %d,%d,%d,%d\n",tempd[0],tempd[1],tempd[2],tempd[3]); - m0 = _mm_sra_epi32(m0,shift); // 1- shift right by shift in order to compensate for the input amplitude - - // temp = m0; - - // tempd = (int *)&temp; - // printf("m0 : %d,%d,%d,%d\n",tempd[0],tempd[1],tempd[2],tempd[3]); - m1=m0; m1 = _mm_packs_epi32(m1,m0); // 1- pack in a 128 bit register [re im re im] - - - y_128[i] = _mm_unpacklo_epi32(m1,m1); // 1- pack in a 128 bit register [re im re im] - - if (format==1) { // Put output in proper format (Re,-Im,Im,Re), shuffle = (0,1,3,2) = 0x1e - // print_shorts(y_128[0],"y_128[0]="); y_128[i] = _mm_shufflelo_epi16(y_128[i],0x1e); y_128[i] = _mm_shufflehi_epi16(y_128[i],0x1e); ((int16_t*)&y_128[i])[1] = -((int16_t*)&y_128[i])[1]; ((int16_t*)&y_128[i])[5] = -((int16_t*)&y_128[i])[5]; - // print_shorts(y_128[0],"y_128[0]="); - } - } @@ -415,12 +316,13 @@ int rotate_cpx_vector2(int16_t *x, return(0); } +*/ -int rotate_cpx_vector_norep(int16_t *x, - int16_t *alpha, - int16_t *y, - uint32_t N, - uint16_t output_shift) +int rotate_cpx_vector(int16_t *x, + int16_t *alpha, + int16_t *y, + uint32_t N, + uint16_t output_shift) { // Multiply elementwise two complex vectors of N elements // x - input 1 in the format |Re0 Im0 |,......,|Re(N-1) Im(N-1)| @@ -438,20 +340,13 @@ int rotate_cpx_vector_norep(int16_t *x, uint32_t i; // loop counter - register __m128i m0,m1,m2,m3; - // int16_t *temps; - // int *tempd; + simd_q15_t *y_128,alpha_128; + int32_t *xd=(int32_t *)x; - int *xd; - //__m128i *x_128; - __m128i *y_128; - // __m128i temp; - - - shift = _mm_cvtsi32_si128(output_shift); - xd = (int *) x; - y_128 = (__m128i *) y; +#if defined(__x86_64__) || defined(__i386__) + __m128i shift = _mm_cvtsi32_si128(output_shift); + register simd_q15_t m0,m1,m2,m3; ((int16_t *)&alpha_128)[0] = alpha[0]; ((int16_t *)&alpha_128)[1] = -alpha[1]; @@ -461,43 +356,55 @@ int rotate_cpx_vector_norep(int16_t *x, ((int16_t *)&alpha_128)[5] = -alpha[1]; ((int16_t *)&alpha_128)[6] = alpha[1]; ((int16_t *)&alpha_128)[7] = alpha[0]; +#elif defined(__arm__) + int32x4_t shift; + int32x4_t ab_re0,ab_re1,ab_im0,ab_im1,re32,im32; + int16_t reflip[8] __attribute__((aligned(16))) = {1,-1,1,-1,1,-1,1,-1}; + int32x4x2_t xtmp; + + ((int16_t *)&alpha_128)[0] = alpha[0]; + ((int16_t *)&alpha_128)[1] = alpha[1]; + ((int16_t *)&alpha_128)[2] = alpha[0]; + ((int16_t *)&alpha_128)[3] = alpha[1]; + ((int16_t *)&alpha_128)[4] = alpha[0]; + ((int16_t *)&alpha_128)[5] = alpha[1]; + ((int16_t *)&alpha_128)[6] = alpha[0]; + ((int16_t *)&alpha_128)[7] = alpha[1]; + int16x8_t bflip = vrev32q_s16(alpha_128); + int16x8_t bconj = vmulq_s16(alpha_128,*(int16x8_t *)reflip); + shift = vdupq_n_s32(-output_shift); +#endif + y_128 = (simd_q15_t *) y; - // _mm_empty(); - // return(0); for(i=0; i>2; i++) { - +#if defined(__x86_64__) || defined(__i386__) m0 = _mm_setr_epi32(xd[0],xd[0],xd[1],xd[1]); m1 = _mm_setr_epi32(xd[2],xd[2],xd[3],xd[3]); - - // printf("i=%d\n",i); - // temps = (short *)x1_128; - // printf("x1 : %d,%d,%d,%d,%d,%d,%d,%d\n",temps[0],temps[1],temps[2],temps[3],temps[4],temps[5],temps[6],temps[7]); - // temps = (short *)x2_128; - // printf("x2 : %d,%d,%d,%d,%d,%d,%d,%d\n",temps[0],temps[1],temps[2],temps[3],temps[4],temps[5],temps[6],temps[7]); - m2 = _mm_madd_epi16(m0,alpha_128); //complex multiply. result is 32bit [Re Im Re Im] m3 = _mm_madd_epi16(m1,alpha_128); //complex multiply. result is 32bit [Re Im Re Im] - - // temp = m0; - - // tempd = &temp; - // printf("m0 : %d,%d,%d,%d\n",tempd[0],tempd[1],tempd[2],tempd[3]); - m2 = _mm_sra_epi32(m2,shift); // shift right by shift in order to compensate for the input amplitude m3 = _mm_sra_epi32(m3,shift); // shift right by shift in order to compensate for the input amplitude - // temp = m0; - - // tempd = (int *)&temp; - // printf("m0 : %d,%d,%d,%d\n",tempd[0],tempd[1],tempd[2],tempd[3]); - - y_128[0] = _mm_packs_epi32(m2,m3); // pack in 16bit integers with saturation [re im re im re im re im] +#elif defined(__arm__) - // temps = (short *)&y_128[0]; - // printf("y0 : %d,%d,%d,%d,%d,%d,%d,%d\n",temps[0],temps[1],temps[2],temps[3],temps[4],temps[5],temps[6],temps[7]); + ab_re0 = vmull_s16(((int16x4_t*)xd)[0],((int16x4_t*)&bconj)[0]); + ab_re1 = vmull_s16(((int16x4_t*)xd)[1],((int16x4_t*)&bconj)[1]); + ab_im0 = vmull_s16(((int16x4_t*)xd)[0],((int16x4_t*)&bflip)[0]); + ab_im1 = vmull_s16(((int16x4_t*)xd)[1],((int16x4_t*)&bflip)[1]); + re32 = vshlq_s32(vcombine_s32(vpadd_s32(((int32x2_t*)&ab_re0)[0],((int32x2_t*)&ab_re0)[1]), + vpadd_s32(((int32x2_t*)&ab_re1)[0],((int32x2_t*)&ab_re1)[1])), + shift); + im32 = vshlq_s32(vcombine_s32(vpadd_s32(((int32x2_t*)&ab_im0)[0],((int32x2_t*)&ab_im0)[1]), + vpadd_s32(((int32x2_t*)&ab_im1)[0],((int32x2_t*)&ab_im1)[1])), + shift); + xtmp = vzipq_s32(re32,im32); + + y_128[0] = vcombine_s16(vmovn_s32(xtmp.val[0]),vmovn_s32(xtmp.val[1])); + +#endif xd+=4; y_128+=1; @@ -510,7 +417,7 @@ int rotate_cpx_vector_norep(int16_t *x, return(0); } - +/* int mult_vector32_scalar(int16_t *x1, int x2, int16_t *y, @@ -530,16 +437,6 @@ int mult_vector32_scalar(int16_t *x1, uint32_t i; // loop counter - /* - #ifdef USER_MODE - char *tempc; - short *temps; - int *tempd; - long long *templ; - __m128i temp; - #endif - */ - __m128i *x1_128; __m128i x2_128; __m128i *y_128; @@ -553,20 +450,6 @@ int mult_vector32_scalar(int16_t *x1, // we compute 4 cpx multiply for each loop for(i=0; i<(N>>3); i++) { y_128[0] = _mm_mul_epu32(x1_128[0],x2_128); - - /* - #ifdef USER_MODE - printf("i=%d\n",i); - tempd = (int *)x1_128; - printf("x1 : %d,%d,%d,%d\n",tempd[0],tempd[1],tempd[2],tempd[3]); - tempd = (int *)&x2_128; - printf("x2 : %d,%d,%d,%d\n",tempd[0],tempd[1],tempd[2],tempd[3]); - // tempd = (int *)y_128; - // printf("y : %d,%d,%d,%d\n",tempd[0],tempd[1],tempd[2],tempd[3]); - templ = (long long *)y_128; - printf("y : %lld,%lld\n",templ[0],templ[1]); - #endif - */ y_128[1] = _mm_mul_epu32(x1_128[1],x2_128); y_128[2] = _mm_mul_epu32(x1_128[2],x2_128); y_128[3] = _mm_mul_epu32(x1_128[3],x2_128); @@ -582,7 +465,7 @@ int mult_vector32_scalar(int16_t *x1, return(0); } - +*/ int complex_conjugate(int16_t *x1, int16_t *y, @@ -591,46 +474,20 @@ int complex_conjugate(int16_t *x1, { uint32_t i; // loop counter - /* - #ifdef USER_MODE - char *tempc; - short *temps; - int *tempd; - long long *templ; - __m128i temp; - #endif - */ - - __m128i *x1_128; - __m128i x2_128; - __m128i *y_128; - - - x1_128 = (__m128i *)&x1[0]; - x2_128 = _mm_set_epi16(-1,1,-1,1,-1,1,-1,1); - y_128 = (__m128i *)&y[0]; + simd_q15_t *x1_128; + simd_q15_t *y_128; + int16_t x2[8] __attribute__((aligned(16))) = {1,-1,1,-1,1,-1,1,-1}; + simd_q15_t *x2_128 = (simd_q15_t*)&x2[0]; + x1_128 = (simd_q15_t *)&x1[0]; + y_128 = (simd_q15_t *)&y[0]; // we compute 4 cpx multiply for each loop for(i=0; i<(N>>3); i++) { - y_128[0] = _mm_mullo_epi16(x1_128[0],x2_128); - - /* - #ifdef USER_MODE - printf("i=%d\n",i); - tempd = (int *)x1_128; - printf("x1 : %d,%d,%d,%d\n",tempd[0],tempd[1],tempd[2],tempd[3]); - tempd = (int *)&x2_128; - printf("x2 : %d,%d,%d,%d\n",tempd[0],tempd[1],tempd[2],tempd[3]); - // tempd = (int *)y_128; - // printf("y : %d,%d,%d,%d\n",tempd[0],tempd[1],tempd[2],tempd[3]); - templ = (long long *)y_128; - printf("y : %lld,%lld\n",templ[0],templ[1]); - #endif - */ - y_128[1] = _mm_mullo_epi16(x1_128[1],x2_128); - y_128[2] = _mm_mullo_epi16(x1_128[2],x2_128); - y_128[3] = _mm_mullo_epi16(x1_128[3],x2_128); + y_128[0] = mullo_int16(x1_128[0],*x2_128); + y_128[1] = mullo_int16(x1_128[1],*x2_128); + y_128[2] = mullo_int16(x1_128[2],*x2_128); + y_128[3] = mullo_int16(x1_128[3],*x2_128); x1_128+=4; @@ -706,15 +563,3 @@ main () #endif //MAIN -#else //EXPRESSMIMO_TARGET - -int rotate_cpx_vector(int16_t *x, - int16_t *alpha, - int16_t *y, - uint32_t N, - uint16_t output_shift, - uint8_t format) -{ - -} -#endif //EXPRESSMIMO_TARGET diff --git a/openair1/PHY/TOOLS/cmult_vv.c b/openair1/PHY/TOOLS/cmult_vv.c index aa94458943..900d661341 100755 --- a/openair1/PHY/TOOLS/cmult_vv.c +++ b/openair1/PHY/TOOLS/cmult_vv.c @@ -32,485 +32,96 @@ #include #endif -#ifndef EXPRESSMIMO_TARGET -static __m128i shift __attribute__ ((aligned(16))); -static __m128i m0,m1,m2,m4 __attribute__ ((aligned(16))); +#if defined(__x86_64__) || defined(__i386__) +int16_t conjug[8]__attribute__((aligned(16))) = {-1,1,-1,1,-1,1,-1,1} ; +#define simd_q15_t __m128i +#define simdshort_q15_t __m64 +#elif defined(__arm__) +int16_t conjug[4]__attribute__((aligned(16))) = {-1,1,-1,1} ; +#define simd_q15_t int16x8_t +#define simdshort_q15_t int16x4_t +#define _mm_empty() +#define _m_empty() +#endif -//#define DEBUG_CMULT - -int mult_cpx_vector(int16_t *x1, - int16_t *x2, - int16_t *y, - uint32_t N, - int output_shift) +int mult_cpx_conj_vector(int16_t *x1, + int16_t *x2, + int16_t *y, + uint32_t N, + int output_shift) { // Multiply elementwise two complex vectors of N elements with repeated formatted output - // x1 - input 1 in the format |Re0 Im0 Re0 Im0|,......,|Re(N-1) Im(N-1) Re(N-1) Im(N-1)| + // x1 - input 1 in the format |Re0 Im0 Re1 Im1|,......,|Re(N-2) Im(N-2) Re(N-1) Im(N-1)| // We assume x1 with a dinamic of 15 bit maximum // - // x2 - input 2 in the format |Re0 -Im0 Im0 Re0|,......,|Re(N-1) -Im(N-1) Im(N-1) Re(N-1)| + // x2 - input 2 in the format |Re0 Im0 Re1 Im1|,......,|Re(N-2) Im(N-2) Re(N-1) Im(N-1)| // We assume x2 with a dinamic of 14 bit maximum /// - // y - output in the format |Re0 Im0 Re0 Im0|,......,|Re(N-1) Im(N-1) Re(N-1) Im(N-1)| + // y - output in the format |Re0 Im0 Re1 Im1|,......,|Re(N-2) Im(N-2) Re(N-1) Im(N-1)| // // N - the size f the vectors (this function does N cpx mpy. WARNING: N>=4; // - // log2_amp - increase the output amplitude by a factor 2^log2_amp (default is 0) - // WARNING: log2_amp>0 can cause overflow!! + // output_shift - shift to be applied to generate output uint32_t i; // loop counter - /* - #ifdef USER_MODE - int16_t *temps; - int *tempd; - #endif - */ - __m128i *x1_128; - __m128i *x2_128; - __m128i *y_128; - - // __m128i temp; - - - shift = _mm_cvtsi32_si128(output_shift); - x1_128 = (__m128i *)&x1[0]; - x2_128 = (__m128i *)&x2[0]; - y_128 = (__m128i *)&y[0]; - - - // we compute 4 cpx multiply for each loop - for(i=0; i<(N>>3); i++) { - - //msg("mult_cpx_vector: iteration %d, x1=%p, x2=%p, y=%p\n",i,x1_128,x2_128,y_128); - /* - #ifdef USER_MODE - printf("i=%d\n",i); - temps = (int16_t *)x1_128; - printf("x1 : %d,%d,%d,%d,%d,%d,%d,%d\n",temps[0],temps[1],temps[2],temps[3],temps[4],temps[5],temps[6],temps[7]); - temps = (int16_t *)x2_128; - printf("x2 : %d,%d,%d,%d,%d,%d,%d,%d\n",temps[0],temps[1],temps[2],temps[3],temps[4],temps[5],temps[6],temps[7]); - #endif - */ - - m0 = _mm_madd_epi16(x1_128[0],x2_128[0]); //pmaddwd_r2r(mm1,mm0); // 1- compute x1[0]*x2[0] - - // temp = m0; - - // tempd = &temp; - // printf("m0 : %d,%d,%d,%d\n",tempd[0],tempd[1],tempd[2],tempd[3]); - - m0 = _mm_sra_epi32(m0,shift); // 1- shift right by shift in order to compensate for the input amplitude - - // temp = m0; - - // tempd = (int *)&temp; - // printf("m0 : %d,%d,%d,%d\n",tempd[0],tempd[1],tempd[2],tempd[3]); - - m1 = m0; - m1 = _mm_packs_epi32(m1,m0); // 1- pack in a 128 bit register [re im re im] - y_128[0] = _mm_unpacklo_epi32(m1,m1); // 1- pack in a 128 bit register [re im re im] - - /* - #ifdef USER_MODE - temps = (int16_t *)&y_128[0]; - printf("y0 : %d,%d,%d,%d,%d,%d,%d,%d\n",temps[0],temps[1],temps[2],temps[3],temps[4],temps[5],temps[6],temps[7]); - #endif USER_MODE - */ - - m0 = _mm_madd_epi16(x1_128[1],x2_128[1]); //pmaddwd_r2r(mm1,mm0); // 1- compute x1[0]*x2[0] - - m0 = _mm_sra_epi32(m0,shift); // 1- shift right by shift in order to compensate for the input amplitude - - - - - m1 = m0; - m1 = _mm_packs_epi32(m1,m0); // 1- pack in a 128 bit register [re im re im] - - y_128[1] = _mm_unpacklo_epi32(m1,m1); // 1- pack in a 128 bit register [re im re im] - - - - m0 = _mm_madd_epi16(x1_128[2],x2_128[2]); //pmaddwd_r2r(mm1,mm0); // 1- compute x1[0]*x2[0] - - m0 = _mm_sra_epi32(m0,shift); // 1- shift right by shift in order to compensate for the input amplitude - - - - - m1 = m0; - m1 = _mm_packs_epi32(m1,m0); // 1- pack in a 128 bit register [re im re im] - - y_128[2] = _mm_unpacklo_epi32(m1,m1); // 1- pack in a 128 bit register [re im re im] - - - - m0 = _mm_madd_epi16(x1_128[3],x2_128[3]); //pmaddwd_r2r(mm1,mm0); // 1- compute x1[0]*x2[0] - - m0 = _mm_sra_epi32(m0,shift); // 1- shift right by shift in order to compensate for the input amplitude - - - - - m1 = m0; - m1 = _mm_packs_epi32(m1,m0); // 1- pack in a 128 bit register [re im re im] - - y_128[3] = _mm_unpacklo_epi32(m1,m1); // 1- pack in a 128 bit register [re im re im] - - - - - - x1_128+=4; - x2_128+=4; - y_128 +=4; - } - - - _mm_empty(); - _m_empty(); - - return(0); -} - -int mult_cpx_vector_unprepared(int16_t *x1, - int16_t *x2, - int16_t *y, - uint32_t N, - int output_shift) -{ - // Multiply elementwise two complex vectors of N elements with repeated formatted output - // x1 - input 1 in the format |Re0 Im0 Re0 Im0|,......,|Re(N-1) Im(N-1) Re(N-1) Im(N-1)| - // We assume x1 with a dinamic of 15 bit maximum - // - // x2 - input 2 in the format |Re0 Im0 Re0 Re0|,......,|Re(N-1) -Im(N-1) Im(N-1) Re(N-1)| - // We assume x2 with a dinamic of 14 bit maximum - /// - // y - output in the format |Re0 Im0 Re0 Im0|,......,|Re(N-1) Im(N-1) Re(N-1) Im(N-1)| - // - // N - the size f the vectors (this function does N cpx mpy. WARNING: N>=4; - // - // log2_amp - increase the output amplitude by a factor 2^log2_amp (default is 0) - // WARNING: log2_amp>0 can cause overflow!! - - uint32_t i; // loop counter - -#ifdef DEBUG_CMULT - int16_t *temps; - int *tempd; -#endif - __m128i *x1_128; - __m128i *x2_128; - __m128i *y_128; - - __m128i shuf_x2; - - - shift = _mm_cvtsi32_si128(output_shift); - x1_128 = (__m128i *)&x1[0]; - x2_128 = (__m128i *)&x2[0]; - y_128 = (__m128i *)&y[0]; - - - // we compute 4 cpx multiply for each loop - for(i=0; i<(N>>3); i++) { - - //msg("mult_cpx_vector: iteration %d, x1=%p, x2=%p, y=%p\n",i,x1_128,x2_128,y_128); - /* - #ifdef USER_MODE - printf("i=%d\n",i); - temps = (int16_t *)x1_128; - printf("x1 : %d,%d,%d,%d,%d,%d,%d,%d\n",temps[0],temps[1],temps[2],temps[3],temps[4],temps[5],temps[6],temps[7]); - temps = (int16_t *)x2_128; - printf("x2 : %d,%d,%d,%d,%d,%d,%d,%d\n",temps[0],temps[1],temps[2],temps[3],temps[4],temps[5],temps[6],temps[7]); - #endif - */ - - shuf_x2 = _mm_shufflelo_epi16(x2_128[0],_MM_SHUFFLE(2,3,0,1)); - shuf_x2 = _mm_shufflehi_epi16(shuf_x2,_MM_SHUFFLE(2,3,0,1)); - -#ifdef DEBUG_CMULT - - tempd = &shuf_x2; - printf("shuf_x2 : %d,%d,%d,%d\n",tempd[0],tempd[1],tempd[2],tempd[3]); -#endif //DEBUG_CMULT - - m0 = _mm_madd_epi16(x1_128[0],x2_128[0]); //pmaddwd_r2r(mm1,mm0); // 1- compute x1[0]*x2[0] - - // temp = m0; - - // tempd = &temp; - // printf("m0 : %d,%d,%d,%d\n",tempd[0],tempd[1],tempd[2],tempd[3]); - - m0 = _mm_sra_epi32(m0,shift); // 1- shift right by shift in order to compensate for the input amplitude - - // temp = m0; - - // tempd = (int *)&temp; - // printf("m0 : %d,%d,%d,%d\n",tempd[0],tempd[1],tempd[2],tempd[3]); - - m1 = m0; - m1 = _mm_packs_epi32(m1,m0); // 1- pack in a 128 bit register [re im re im] - y_128[0] = _mm_unpacklo_epi32(m1,m1); // 1- pack in a 128 bit register [re im re im] - - /* - #ifdef USER_MODE - temps = (int16_t *)&y_128[0]; - printf("y0 : %d,%d,%d,%d,%d,%d,%d,%d\n",temps[0],temps[1],temps[2],temps[3],temps[4],temps[5],temps[6],temps[7]); - #endif USER_MODE - */ - - m0 = _mm_madd_epi16(x1_128[1],x2_128[1]); //pmaddwd_r2r(mm1,mm0); // 1- compute x1[0]*x2[0] - - m0 = _mm_sra_epi32(m0,shift); // 1- shift right by shift in order to compensate for the input amplitude - - - - - m1 = m0; - m1 = _mm_packs_epi32(m1,m0); // 1- pack in a 128 bit register [re im re im] - - y_128[1] = _mm_unpacklo_epi32(m1,m1); // 1- pack in a 128 bit register [re im re im] - - - - m0 = _mm_madd_epi16(x1_128[2],x2_128[2]); //pmaddwd_r2r(mm1,mm0); // 1- compute x1[0]*x2[0] - - m0 = _mm_sra_epi32(m0,shift); // 1- shift right by shift in order to compensate for the input amplitude - - - - - m1 = m0; - m1 = _mm_packs_epi32(m1,m0); // 1- pack in a 128 bit register [re im re im] - - y_128[2] = _mm_unpacklo_epi32(m1,m1); // 1- pack in a 128 bit register [re im re im] - - - - m0 = _mm_madd_epi16(x1_128[3],x2_128[3]); //pmaddwd_r2r(mm1,mm0); // 1- compute x1[0]*x2[0] - - m0 = _mm_sra_epi32(m0,shift); // 1- shift right by shift in order to compensate for the input amplitude - - - - - m1 = m0; - m1 = _mm_packs_epi32(m1,m0); // 1- pack in a 128 bit register [re im re im] - - y_128[3] = _mm_unpacklo_epi32(m1,m1); // 1- pack in a 128 bit register [re im re im] - - - - - - x1_128+=4; - x2_128+=4; - y_128 +=4; - } - - - _mm_empty(); - _m_empty(); - - return(0); -} - -//__attribute__ ((force_align_arg_pointer)) -int mult_cpx_vector_norep(int16_t *x1, - int16_t *x2, - int16_t *y, - uint32_t N, - int output_shift) -{ - // Multiply elementwise two complex vectors of N elements with normal formatted output - // x1 - input 1 in the format |Re0 Im0 Re0 Im0|,......,|Re(N-1) Im(N-1) Re(N-1) Im(N-1)| - // We assume x1 with a dinamic of 15 bit maximum - // - // x2 - input 2 in the format |Re0 -Im0 Im0 Re0|,......,|Re(N-1) -Im(N-1) Im(N-1) Re(N-1)| - // We assume x2 with a dinamic of 14 bit maximum - /// - // y - output in the format |Re0 Im0 Re1 Im1|,......,|Re(N-2) Im(N-2) Re(N-1) Im(N-1)| - // - // N - the size f the vectors (this function does N cpx mpy). WARNING: N>=4; - // - // log2_amp - increase the output amplitude by a factor 2^log2_amp (default is 0) - // WARNING: log2_amp>0 can cause overflow!! - - uint32_t i; // loop counter - - //register __m128i m0,m1,m2,m3; - - -#ifdef DEBUG_CMULT - __m128i temp; - int *tempd; - int16_t *temps; -#endif //DEBUG_CMULT - - - __m128i *x1_128; - __m128i *x2_128; - __m128i *y_128; - - //__m128i temp; - - - shift = _mm_cvtsi32_si128(output_shift); - x1_128 = (__m128i *)&x1[0]; - x2_128 = (__m128i *)&x2[0]; - y_128 = (__m128i *)&y[0]; - -#ifndef USER_MODE - //debug_msg("mult_cpx_vector_norep: x1 %p, x2 %p, y %p, shift %d\n",x1,x2,y,output_shift); + simd_q15_t *x1_128; + simd_q15_t *x2_128; + simd_q15_t *y_128; +#if defined(__x86_64__) || defined(__i386__) + simd_q15_t tmp_re,tmp_im; + simd_q15_t tmpy0,tmpy1; +#elif defined(__arm__) + int32x4_t tmp_re,tmp_im; + int32x4_t tmp_re1,tmp_im1; + int16x4x2_t tmpy; + int32x4_t shift = vdupq_n_s32(-output_shift); #endif + x1_128 = (simd_q15_t *)&x1[0]; + x2_128 = (simd_q15_t *)&x2[0]; + y_128 = (simd_q15_t *)&y[0]; + + // we compute 4 cpx multiply for each loop - for(i=0; i<(N>>3); i++) { + for(i=0; i<(N>>2); i++) { + #if defined(__x86_64__) || defined(__i386__) + tmp_re = _mm_madd_epi16(*x1_128,*x2_128); + tmp_im = _mm_shufflelo_epi16(*x1_128,_MM_SHUFFLE(2,3,0,1)); + tmp_im = _mm_shufflehi_epi16(tmp_im,_MM_SHUFFLE(2,3,0,1)); + tmp_im = _mm_sign_epi16(tmp_im,*(__m128i*)&conjug[0]); + tmp_im = _mm_madd_epi16(tmp_im,*x1_128); + tmp_re = _mm_srai_epi32(tmp_re,output_shift); + tmp_im = _mm_srai_epi32(tmp_im,output_shift); + tmpy0 = _mm_unpacklo_epi32(tmp_re,tmp_im); + tmpy1 = _mm_unpackhi_epi32(tmp_re,tmp_im); + *y_128 = _mm_packs_epi32(tmpy0,tmpy1); +#elif defined(__arm__) + tmp_re = vmull_s16(((simdshort_q15_t *)x1_128)[0], ((simdshort_q15_t*)x2_128)[0]); + //tmp_re = [Re(x1[0])Re(x2[0]) Im(x1[0])Im(x2[0]) Re(x1[1])Re(x2[1]) Im(x1[1])Im(x2[1])] + tmp_re1 = vmull_s16(((simdshort_q15_t *)x1_128)[1], ((simdshort_q15_t*)x2_128)[1]); + //tmp_re1 = [Re(x1[1])Re(x2[1]) Im(x1[1])Im(x2[1]) Re(x1[1])Re(x2[2]) Im(x1[1])Im(x2[2])] + tmp_re = vcombine_s32(vpadd_s32(vget_low_s32(tmp_re),vget_high_s32(tmp_re)), + vpadd_s32(vget_low_s32(tmp_re1),vget_high_s32(tmp_re1))); + //tmp_re = [Re(ch[0])Re(rx[0])+Im(ch[0])Im(ch[0]) Re(ch[1])Re(rx[1])+Im(ch[1])Im(ch[1]) Re(ch[2])Re(rx[2])+Im(ch[2]) Im(ch[2]) Re(ch[3])Re(rx[3])+Im(ch[3])Im(ch[3])] -#ifdef DEBUG_CMULT - printf("i=%d\n",i); - temps = (int16_t *)x1_128; - printf("x1 : %d,%d,%d,%d,%d,%d,%d,%d\n",temps[0],temps[1],temps[2],temps[3],temps[4],temps[5],temps[6],temps[7]); - temps = (int16_t *)x2_128; - printf("x2 : %d,%d,%d,%d,%d,%d,%d,%d\n",temps[0],temps[1],temps[2],temps[3],temps[4],temps[5],temps[6],temps[7]); + tmp_im = vmull_s16(vrev32_s16(vmul_s16(((simdshort_q15_t*)x2_128)[0],*(simdshort_q15_t*)conjug)), ((simdshort_q15_t*)x1_128)[0]); + //tmp_im = [-Im(ch[0])Re(rx[0]) Re(ch[0])Im(rx[0]) -Im(ch[1])Re(rx[1]) Re(ch[1])Im(rx[1])] + tmp_im1 = vmull_s16(vrev32_s16(vmul_s16(((simdshort_q15_t*)x2_128)[1],*(simdshort_q15_t*)conjug)), ((simdshort_q15_t*)x1_128)[1]); + //tmp_im1 = [-Im(ch[2])Re(rx[2]) Re(ch[2])Im(rx[2]) -Im(ch[3])Re(rx[3]) Re(ch[3])Im(rx[3])] + tmp_im = vcombine_s32(vpadd_s32(vget_low_s32(tmp_im),vget_high_s32(tmp_im)), + vpadd_s32(vget_low_s32(tmp_im1),vget_high_s32(tmp_im1))); + //tmp_im = [-Im(ch[0])Re(rx[0])+Re(ch[0])Im(rx[0]) -Im(ch[1])Re(rx[1])+Re(ch[1])Im(rx[1]) -Im(ch[2])Re(rx[2])+Re(ch[2])Im(rx[2]) -Im(ch[3])Re(rx[3])+Re(ch[3])Im(rx[3])] + + tmp_re = vqshlq_s32(tmp_re,shift); + tmp_im = vqshlq_s32(tmp_im,shift); + tmpy = vzip_s16(vmovn_s32(tmp_re),vmovn_s32(tmp_im)); + *y_128 = vcombine_s16(tmpy.val[0],tmpy.val[1]); #endif - - - m0 = _mm_madd_epi16(x1_128[0],x2_128[0]); //pmaddwd_r2r(mm1,mm0); // 1- compute x1[0]*x2[0] - - -#ifdef DEBUG_CMULT - temp = m0; - - tempd = &temp; - printf("m0 : %d,%d,%d,%d\n",tempd[0],tempd[1],tempd[2],tempd[3]); -#endif //DEBUG_CMULT - - - m0 = _mm_sra_epi32(m0,shift); // 1- shift right by shift in order to compensate for the input amplitude - - -#ifdef DEBUG_CMULT - temp = m0; - - tempd = (int *)&temp; - printf("m0 : %d,%d,%d,%d\n",tempd[0],tempd[1],tempd[2],tempd[3]); -#endif //DEBUG_CMULT - - - m1 = m0; - - - - m0 = _mm_madd_epi16(x1_128[1],x2_128[1]); //pmaddwd_r2r(mm1,mm0); // 1- compute x1[0]*x2[0] - -#ifdef DEBUG_CMULT - printf("i=%d\n",i); - temps = (int16_t *)&x1_128[1]; - printf("x1 : %d,%d,%d,%d,%d,%d,%d,%d\n",temps[0],temps[1],temps[2],temps[3],temps[4],temps[5],temps[6],temps[7]); - temps = (int16_t *)&x2_128[1]; - printf("x2 : %d,%d,%d,%d,%d,%d,%d,%d\n",temps[0],temps[1],temps[2],temps[3],temps[4],temps[5],temps[6],temps[7]); -#endif - -#ifdef DEBUG_CMULT - temp = m0; - tempd = (int *)&temp; - printf("m0[1] : %d,%d,%d,%d\n",tempd[0],tempd[1],tempd[2],tempd[3]); -#endif //DEBUG_CMULT - - - - - m0 = _mm_sra_epi32(m0,shift); // 1- shift right by shift in order to compensate for the input amplitude - - -#ifdef DEBUG_CMULT - temp = m0; - tempd = (int *)&temp; - printf("m0[1] : %d,%d,%d,%d\n",tempd[0],tempd[1],tempd[2],tempd[3]); -#endif //DEBUG_CMULT - - - - m2 = m0; - // m2 = _mm_packs_epi32(m2,m0); // 1- pack in a 128 bit register [re im re im] - - // print_shorts(m2,"m2"); - - y_128[0] = _mm_packs_epi32(m1,m2); // 1- pack in a 128 bit register [re im re im] - - - - m0 = _mm_madd_epi16(x1_128[2],x2_128[2]); //pmaddwd_r2r(mm1,mm0); // 1- compute x1[0]*x2[0] - -#ifdef DEBUG_CMULT - printf("i=%d\n",i); - temps = (int16_t *)&x1_128[2]; - printf("x1 : %d,%d,%d,%d,%d,%d,%d,%d\n",temps[0],temps[1],temps[2],temps[3],temps[4],temps[5],temps[6],temps[7]); - temps = (int16_t *)&x2_128[2]; - printf("x2 : %d,%d,%d,%d,%d,%d,%d,%d\n",temps[0],temps[1],temps[2],temps[3],temps[4],temps[5],temps[6],temps[7]); -#endif //DEBUG_CMULT - -#ifdef DEBUG_CMULT - temp = m0; - tempd = (int *)&temp; - printf("m0[2] : %d,%d,%d,%d\n",tempd[0],tempd[1],tempd[2],tempd[3]); -#endif //DEBUG_CMULT - - - m0 = _mm_sra_epi32(m0,shift); // 1- shift right by shift in order to compensate for the input amplitude - - -#ifdef DEBUG_CMULT - temp = m0; - tempd = (int *)&temp; - printf("m0[2] : %d,%d,%d,%d\n",tempd[0],tempd[1],tempd[2],tempd[3]); -#endif //DEBUG_CMULT - - - m1 = m0; - // m1 = _mm_packs_epi32(m1,m0); // 1- pack in a 128 bit register [re im re im] - - m0 = _mm_madd_epi16(x1_128[3],x2_128[3]); //pmaddwd_r2r(mm1,mm0); // 1- compute x1[0]*x2[0] - -#ifdef DEBUG_CMULT - printf("i=%d\n",i); - temps = (int16_t *)&x1_128[3]; - printf("x1 : %d,%d,%d,%d,%d,%d,%d,%d\n",temps[0],temps[1],temps[2],temps[3],temps[4],temps[5],temps[6],temps[7]); - temps = (int16_t *)&x2_128[3]; - printf("x2 : %d,%d,%d,%d,%d,%d,%d,%d\n",temps[0],temps[1],temps[2],temps[3],temps[4],temps[5],temps[6],temps[7]); - - temp = m0; - tempd = (int *)&temp; - printf("m0[3] : %d,%d,%d,%d\n",tempd[0],tempd[1],tempd[2],tempd[3]); -#endif //DEBUG_CMULT - - - m0 = _mm_sra_epi32(m0,shift); // 1- shift right by shift in order to compensate for the input amplitude - - -#ifdef DEBUG_CMULT - temp = m0; - tempd = (int *)&temp; - printf("m0[3] : %d,%d,%d,%d\n",tempd[0],tempd[1],tempd[2],tempd[3]); -#endif //DEBUG_CMULT - - - m2 = m0; - // m2 = _mm_packs_epi32(m2,m0); // 1- pack in a 128 bit register [re im re im] - - y_128[1] = _mm_packs_epi32(m1,m2); // 1- pack in a 128 bit register [re im re im] - - - - - - x1_128+=4; - x2_128+=4; - y_128 +=2; + x1_128++; + x2_128++; + y_128++; } @@ -519,1259 +130,3 @@ int mult_cpx_vector_norep(int16_t *x1, return(0); } - - -int mult_cpx_vector_norep_unprepared_conjx2(int16_t *x1, - int16_t *x2, - int16_t *y, - uint32_t N, - int output_shift) -{ - // Multiply elementwise two complex vectors of N elements with normal formatted output, conjugate x1 - // x1 - input 1 in the format |Re0 Im0 Re0 Im0|,......,|Re(N-1) Im(N-1) Re(N-1) Im(N-1)| - // We assume x1 with a dinamic of 15 bit maximum - // - // x2 - input 2 in the format |Re0 Im0 Re0 Im0|,......,|Re(N-1) -Im(N-1) Im(N-1) Re(N-1)| - // We assume x2 with a dinamic of 14 bit maximum - /// - // y - output in the format |Re0 Im0 Re0 Im0|,......,|Re(N-2) Im(N-2) Re(N-1) Im(N-1)| - // - // N - the size f the vectors (this function does N cpx mpy). WARNING: N>=4; - // - // log2_amp - increase the output amplitude by a factor 2^log2_amp (default is 0) - // WARNING: log2_amp>0 can cause overflow!! - - uint32_t i; // loop counter - - //register __m128i m0,m1,m2,m3; - - short conj_x2s[8] __attribute__((aligned(16))) = {1,1,-1,1,1,1,-1,1}; - __m128i *conj_x2 = (__m128i *)&conj_x2s[0]; - -#ifdef DEBUG_CMULT - __m128i temp; - int *tempd; - int16_t *temps; -#endif //DEBUG_CMULT - - - __m128i *x1_128; - __m128i *x2_128; - __m128i *y_128; - - __m128i shuf_x2; - - - shift = _mm_cvtsi32_si128(output_shift); - x1_128 = (__m128i *)&x1[0]; - x2_128 = (__m128i *)&x2[0]; - y_128 = (__m128i *)&y[0]; - - // we compute 4 cpx multiply for each loop - for(i=0; i<(N>>3); i++) { - - -#ifdef DEBUG_CMULT - printf("**i=%d\n",i); - temps = (int16_t *)x1_128; - printf("x1 : %d,%d,%d,%d,%d,%d,%d,%d\n",temps[0],temps[1],temps[2],temps[3],temps[4],temps[5],temps[6],temps[7]); - temps = (int16_t *)x2_128; - printf("x2 : %d,%d,%d,%d,%d,%d,%d,%d\n",temps[0],temps[1],temps[2],temps[3],temps[4],temps[5],temps[6],temps[7]); -#endif - - - shuf_x2 = _mm_shufflelo_epi16(x2_128[0],_MM_SHUFFLE(2,3,1,0)); - shuf_x2 = _mm_shufflehi_epi16(shuf_x2,_MM_SHUFFLE(2,3,1,0)); - shuf_x2 = _mm_sign_epi16(shuf_x2,*conj_x2); -#ifdef DEBUG_CMULT - - temps = &shuf_x2; - printf("shuf_x2 : %d,%d,%d,%d,%d,%d,%d,%d\n",temps[0],temps[1],temps[2],temps[3],temps[4],temps[5],temps[6],temps[7]); -#endif //DEBUG_CMULT - - m0 = _mm_madd_epi16(x1_128[0],shuf_x2); //pmaddwd_r2r(mm1,mm0); // 1- compute x1[0]*x2[0] - - -#ifdef DEBUG_CMULT - temp = m0; - - tempd = &temp; - printf("m0 : %d,%d,%d,%d\n",tempd[0],tempd[1],tempd[2],tempd[3]); -#endif //DEBUG_CMULT - - - m0 = _mm_sra_epi32(m0,shift); // 1- shift right by shift in order to compensate for the input amplitude - - -#ifdef DEBUG_CMULT - temp = m0; - - tempd = (int *)&temp; - printf("m0 : %d,%d,%d,%d\n",tempd[0],tempd[1],tempd[2],tempd[3]); -#endif //DEBUG_CMULT - - - m1 = m0; - - - - shuf_x2 = _mm_shufflelo_epi16(x2_128[1],_MM_SHUFFLE(2,3,1,0)); - shuf_x2 = _mm_shufflehi_epi16(shuf_x2,_MM_SHUFFLE(2,3,1,0)); - shuf_x2 = _mm_sign_epi16(shuf_x2,*conj_x2); - m0 = _mm_madd_epi16(x1_128[1],shuf_x2); //pmaddwd_r2r(mm1,mm0); // 1- compute x1[0]*x2[0] - -#ifdef DEBUG_CMULT - printf("i=%d\n",i); - temps = (int16_t *)&x1_128[1]; - printf("x1 : %d,%d,%d,%d,%d,%d,%d,%d\n",temps[0],temps[1],temps[2],temps[3],temps[4],temps[5],temps[6],temps[7]); - temps = (int16_t *)&x2_128[1]; - printf("x2 : %d,%d,%d,%d,%d,%d,%d,%d\n",temps[0],temps[1],temps[2],temps[3],temps[4],temps[5],temps[6],temps[7]); -#endif - -#ifdef DEBUG_CMULT - temp = m0; - tempd = (int *)&temp; - printf("m0[1] : %d,%d,%d,%d\n",tempd[0],tempd[1],tempd[2],tempd[3]); -#endif //DEBUG_CMULT - - - - - m0 = _mm_sra_epi32(m0,shift); // 1- shift right by shift in order to compensate for the input amplitude - - -#ifdef DEBUG_CMULT - temp = m0; - tempd = (int *)&temp; - printf("m0[1] : %d,%d,%d,%d\n",tempd[0],tempd[1],tempd[2],tempd[3]); -#endif //DEBUG_CMULT - - - - m2 = m0; - // m2 = _mm_packs_epi32(m2,m0); // 1- pack in a 128 bit register [re im re im] - - // print_shorts(m2,"m2"); - - y_128[0] = _mm_packs_epi32(m1,m2); // 1- pack in a 128 bit register [re im re im] - - - shuf_x2 = _mm_shufflelo_epi16(x2_128[2],_MM_SHUFFLE(2,3,1,0)); - shuf_x2 = _mm_shufflehi_epi16(shuf_x2,_MM_SHUFFLE(2,3,1,0)); - shuf_x2 = _mm_sign_epi16(shuf_x2,*conj_x2); - m0 = _mm_madd_epi16(x1_128[2],shuf_x2); //pmaddwd_r2r(mm1,mm0); // 1- compute x1[0]*x2[0] - -#ifdef DEBUG_CMULT - printf("i=%d\n",i); - temps = (int16_t *)&x1_128[2]; - printf("x1 : %d,%d,%d,%d,%d,%d,%d,%d\n",temps[0],temps[1],temps[2],temps[3],temps[4],temps[5],temps[6],temps[7]); - temps = (int16_t *)&x2_128[2]; - printf("x2 : %d,%d,%d,%d,%d,%d,%d,%d\n",temps[0],temps[1],temps[2],temps[3],temps[4],temps[5],temps[6],temps[7]); -#endif //DEBUG_CMULT - -#ifdef DEBUG_CMULT - temp = m0; - tempd = (int *)&temp; - printf("m0[2] : %d,%d,%d,%d\n",tempd[0],tempd[1],tempd[2],tempd[3]); -#endif //DEBUG_CMULT - - - m0 = _mm_sra_epi32(m0,shift); // 1- shift right by shift in order to compensate for the input amplitude - - -#ifdef DEBUG_CMULT - temp = m0; - tempd = (int *)&temp; - printf("m0[2] : %d,%d,%d,%d\n",tempd[0],tempd[1],tempd[2],tempd[3]); -#endif //DEBUG_CMULT - - - m1 = m0; - // m1 = _mm_packs_epi32(m1,m0); // 1- pack in a 128 bit register [re im re im] - shuf_x2 = _mm_shufflelo_epi16(x2_128[3],_MM_SHUFFLE(2,3,1,0)); - shuf_x2 = _mm_shufflehi_epi16(shuf_x2,_MM_SHUFFLE(2,3,1,0)); - shuf_x2 = _mm_sign_epi16(shuf_x2,*conj_x2); - - m0 = _mm_madd_epi16(x1_128[3],shuf_x2); //pmaddwd_r2r(mm1,mm0); // 1- compute x1[0]*x2[0] - -#ifdef DEBUG_CMULT - printf("i=%d\n",i); - temps = (int16_t *)&x1_128[3]; - printf("x1 : %d,%d,%d,%d,%d,%d,%d,%d\n",temps[0],temps[1],temps[2],temps[3],temps[4],temps[5],temps[6],temps[7]); - temps = (int16_t *)&x2_128[3]; - printf("x2 : %d,%d,%d,%d,%d,%d,%d,%d\n",temps[0],temps[1],temps[2],temps[3],temps[4],temps[5],temps[6],temps[7]); - - temp = m0; - tempd = (int *)&temp; - printf("m0[3] : %d,%d,%d,%d\n",tempd[0],tempd[1],tempd[2],tempd[3]); -#endif //DEBUG_CMULT - - - m0 = _mm_sra_epi32(m0,shift); // 1- shift right by shift in order to compensate for the input amplitude - - -#ifdef DEBUG_CMULT - temp = m0; - tempd = (int *)&temp; - printf("m0[3] : %d,%d,%d,%d\n",tempd[0],tempd[1],tempd[2],tempd[3]); -#endif //DEBUG_CMULT - - - m2 = m0; - // m2 = _mm_packs_epi32(m2,m0); // 1- pack in a 128 bit register [re im re im] - - y_128[1] = _mm_packs_epi32(m1,m2); // 1- pack in a 128 bit register [re im re im] - - - - - - x1_128+=4; - x2_128+=4; - y_128 +=2; - } - - - _mm_empty(); - _m_empty(); - - return(0); -} - -static __m128i norep_tmp32 __attribute__ ((aligned(16))); - -//__attribute__ ((force_align_arg_pointer)) -int mult_cpx_vector_norep2(int16_t *x1, - int16_t *x2, - int16_t *y, - uint32_t N, - int output_shift) -{ - // Multiply elementwise two complex vectors of N elements with normal formatted output and no loop unrollin - // x1 - input 1 in the format |Re0 Im0 Re0 Im0 Re1 Im1 Re1 Im1|,......,|Re(N-1) Im(N-1) Re(N-1) Im(N-1)| - // We assume x1 with a dinamic of 15 bit maximum - // - // x2 - input 2 in the format |Re0 -Im0 Im0 Re0|,......,|Re(N-1) -Im(N-1) Im(N-1) Re(N-1)| - // We assume x2 with a dinamic of 14 bit maximum - /// - // y - output in the format |Re0 Im0 Re1 Im1|,......,|Re(N-2) Im(N-2) Re(N-1) Im(N-1)| - // - // N - the size f the vectors (this function does N cpx mpy). WARNING: N>=2; - // - // log2_amp - increase the output amplitude by a factor 2^log2_amp (default is 0) - // WARNING: log2_amp>0 can cause overflow!! - - uint32_t i; // loop counter - - //register __m128i m0,m1,m2,m3; - - /* - #ifdef USER_MODE - __m128i temp; - int *tempd; - int16_t *temps; - #endif - */ - - __m128i *x1_128; - __m128i *x2_128; - int *y_32 = (int*)y; - - // __m128i temp; - - - shift = _mm_cvtsi32_si128(output_shift); - x1_128 = (__m128i *)&x1[0]; - x2_128 = (__m128i *)&x2[0]; - -#ifndef USER_MODE - //debug_msg("mult_cpx_vector_norep2: x1 %p, x2 %p, y %p, shift %d, N %d\n",x1,x2,y,output_shift,N); -#endif - - // we compute 2 cpx multiply for each loop - for(i=0; i<(N>>1); i++) { - /* - #ifdef USER_MODE - printf("i=%d\n",i); - temps = (int16_t *)x1_128; - printf("x1 : %d,%d,%d,%d,%d,%d,%d,%d\n",temps[0],temps[1],temps[2],temps[3],temps[4],temps[5],temps[6],temps[7]); - temps = (int16_t *)x2_128; - printf("x2 : %d,%d,%d,%d,%d,%d,%d,%d\n",temps[0],temps[1],temps[2],temps[3],temps[4],temps[5],temps[6],temps[7]); - #endif - */ - - m0 = _mm_madd_epi16(x1_128[0],x2_128[0]); //pmaddwd_r2r(mm1,mm0); // 1- compute x1[0]*x2[0] - - /* - temp = m0; - - tempd = &temp; - printf("m0 : %d,%d,%d,%d\n",tempd[0],tempd[1],tempd[2],tempd[3]); - */ - - m0 = _mm_sra_epi32(m0,shift); // 1- shift right by shift in order to compensate for the input amplitude - - /* - temp = m0; - - tempd = (int *)&temp; - printf("m0 : %d,%d,%d,%d\n",tempd[0],tempd[1],tempd[2],tempd[3]); - */ - - norep_tmp32 = _mm_packs_epi32(m0,m0); // Re0 Im0 Re1 Im1 Re0 Im0 Re1 Im1 - - /* - #ifdef USER_MODE - printf("tmp : %d,%d,%d,%d\n",((int16_t *)&tmp32)[0],((int16_t *)&tmp32)[1],((int16_t *)&tmp32)[2],((int16_t *)&tmp32)[3]); - #endif - */ - - y_32[0] = ((int *)&norep_tmp32)[0]; // 1- pack in a 128 bit register [re im re im] - y_32[1] = ((int *)&norep_tmp32)[1]; // 1- pack in a 128 bit register [re im re im] - - x1_128+=1; - x2_128+=1; - y_32 +=2; - } - - - _mm_empty(); - _m_empty(); - - return(0); -} - - -int mult_cpx_vector_norep_conj(int16_t *x1, - int16_t *x2, - int16_t *y, - uint32_t N, - int output_shift) -{ - // Multiply elementwise two complex vectors of N elements after conjugating and shuffling x1 - // x1 - input 1 in the format |Re0 -Im0 Im0 Re0|,......,|Re(N-1) -Im(N-1) Im(N-1) Re(N-1)| - // We assume x1 with a dynamic of 15 bit maximum - // - // x2 - input 2 in the format |Re0 -Im0 Im0 Re0|,......,|Re(N-1) -Im(N-1) Im(N-1) Re(N-1)| - // We assume x2 with a dynamic of 14 bit maximum - /// - // y - output in the format |Re0 Im0 Re1 Im1|,......,|Re(N-2) Im(N-2) Re(N-1) Im(N-1)| - // - // N - the size f the vectors (this function does N cpx mpy). WARNING: N>=4; - // - // log2_amp - increase the output amplitude by a factor 2^log2_amp (default is 0) - // WARNING: log2_amp>0 can cause overflow!! - - uint32_t i; // loop counter - - //register __m128i m0,m1,m2,m4; - - /* - #ifdef USER_MODE - int16_t *temps; - int *tempw; - #endif - */ - - __m128i *x1_128; - __m128i *x2_128; - __m128i *y_128; - - // __m128i temp; - - - shift = _mm_cvtsi32_si128(output_shift); - x1_128 = (__m128i *)&x1[0]; - x2_128 = (__m128i *)&x2[0]; - y_128 = (__m128i *)&y[0]; - - // printf("mult_cpx_vector_norep: shift %d\n",output_shift); - - // we compute 4 cpx multiply for each loop - for(i=0; i<(N>>3); i++) { - - /* - #ifdef USER_MODE - printf("i=%d\n",i); - temps = (int16_t *)x1_128; - printf("x1 : %d,%d,%d,%d,%d,%d,%d,%d\n",temps[0],temps[1],temps[2],temps[3],temps[4],temps[5],temps[6],temps[7]); - temps = (int16_t *)x2_128; - printf("x2 : %d,%d,%d,%d,%d,%d,%d,%d\n",temps[0],temps[1],temps[2],temps[3],temps[4],temps[5],temps[6],temps[7]); - #endif - */ - - m4 = _mm_shufflelo_epi16(x1_128[0],_MM_SHUFFLE(1,0,1,0)); - m4 = _mm_shufflehi_epi16(m4,_MM_SHUFFLE(1,0,1,0)); - /* - temps = (int16_t *)&m4; - printf("x2 : %d,%d,%d,%d,%d,%d,%d,%d\n",temps[0],temps[1],temps[2],temps[3],temps[4],temps[5],temps[6],temps[7]); - */ - m0 = _mm_madd_epi16(m4,x2_128[0]); //pmaddwd_r2r(mm1,mm0); // 1- compute x1[0]*x2[0] - - // temp = m0; - - // tempd = &temp; - // printf("m0 : %d,%d,%d,%d\n",tempd[0],tempd[1],tempd[2],tempd[3]); - /* - tempw = (int *)&m0; - printf("m0[0] : %d,%d,%d,%d\n",tempw[0],tempw[1],tempw[2],tempw[3]); - */ - - m0 = _mm_sra_epi32(m0,shift); // 1- shift right by shift in order to compensate for the input amplitude - - /* - tempw = (int *)&m0; - printf("m0[0] : %d,%d,%d,%d\n",tempw[0],tempw[1],tempw[2],tempw[3]); - */ - // temp = m0; - - // tempd = (int *)&temp; - // printf("m0 : %d,%d,%d,%d\n",tempd[0],tempd[1],tempd[2],tempd[3]); - - m1 = m0; - - - - m4 = _mm_shufflelo_epi16(x1_128[1],_MM_SHUFFLE(1,0,1,0)); - m4 = _mm_shufflehi_epi16(m4,_MM_SHUFFLE(1,0,1,0)); - m0 = _mm_madd_epi16(m4,x2_128[1]); //pmaddwd_r2r(mm1,mm0); // 1- compute x1[0]*x2[0] - - /* - tempw = (int *)&m0; - printf("m0[1] : %d,%d,%d,%d\n",tempw[0],tempw[1],tempw[2],tempw[3]); - */ - - - m0 = _mm_sra_epi32(m0,shift); // 1- shift right by shift in order to compensate for the input amplitude - - /* - tempw = (int *)&m0; - printf("m0[1] : %d,%d,%d,%d\n",tempw[0],tempw[1],tempw[2],tempw[3]); - */ - - - m2 = m0; - // m2 = _mm_packs_epi32(m2,m0); // 1- pack in a 128 bit register [re im re im] - - // print_shorts(m2,"m2"); - - y_128[0] = _mm_packs_epi32(m1,m2); // 1- pack in a 128 bit register [re im re im] - - - - m4 = _mm_shufflelo_epi16(x1_128[2],_MM_SHUFFLE(1,0,1,0)); - m4 = _mm_shufflehi_epi16(m4,_MM_SHUFFLE(1,0,1,0)); - m0 = _mm_madd_epi16(m4,x2_128[2]); //pmaddwd_r2r(mm1,mm0); // 1- compute x1[0]*x2[0] - /* - tempw = (int *)&m0; - printf("m0[2] : %d,%d,%d,%d\n",tempw[0],tempw[1],tempw[2],tempw[3]); - */ - - m0 = _mm_sra_epi32(m0,shift); // 1- shift right by shift in order to compensate for the input amplitude - - /* - tempw = (int *)&m0; - printf("m0[2] : %d,%d,%d,%d\n",tempw[0],tempw[1],tempw[2],tempw[3]); - */ - - m1 = m0; - // m1 = _mm_packs_epi32(m1,m0); // 1- pack in a 128 bit register [re im re im] - - - m4 = _mm_shufflelo_epi16(x1_128[3],_MM_SHUFFLE(1,0,1,0)); - m4 = _mm_shufflehi_epi16(m4,_MM_SHUFFLE(1,0,1,0)); - m0 = _mm_madd_epi16(m4,x2_128[3]); //pmaddwd_r2r(mm1,mm0); // 1- compute x1[0]*x2[0] - /* - tempw = (int *)&m0; - printf("m0[3] : %d,%d,%d,%d\n",tempw[0],tempw[1],tempw[2],tempw[3]); - */ - - m0 = _mm_sra_epi32(m0,shift); // 1- shift right by shift in order to compensate for the input amplitude - - /* - tempw = (int *)&m0; - printf("m0[3] : %d,%d,%d,%d\n",tempw[0],tempw[1],tempw[2],tempw[3]); - */ - - m2 = m0; - // m2 = _mm_packs_epi32(m2,m0); // 1- pack in a 128 bit register [re im re im] - - y_128[1] = _mm_packs_epi32(m1,m2); // 1- pack in a 128 bit register [re im re im] - - - - - - x1_128+=4; - x2_128+=4; - y_128 +=2; - } - - - _mm_empty(); - _m_empty(); - - return(0); -} - - -int mult_cpx_vector_norep_conj2(int16_t *x1, - int16_t *x2, - int16_t *y, - uint32_t N, - int output_shift) -{ - // Multiply elementwise two complex vectors of N elements after conjugating and shuffling x1 - // x1 - input 1 in the format |Re0 -Im0 Im0 Re0|,......,|Re(N-1) -Im(N-1) Im(N-1) Re(N-1)| - // We assume x1 with a dynamic of 15 bit maximum - // - // x2 - input 2 in the format |Re0 -Im0 Im0 Re0|,......,|Re(N-1) -Im(N-1) Im(N-1) Re(N-1)| - // We assume x2 with a dynamic of 14 bit maximum - /// - // y - output in the format |Re0 Im0 Re1 Im1|,......,|Re(N-2) Im(N-2) Re(N-1) Im(N-1)| - // - // N - the size f the vectors (this function does N cpx mpy). WARNING: N>=2; - // - // log2_amp - increase the output amplitude by a factor 2^log2_amp (default is 0) - // WARNING: log2_amp>0 can cause overflow!! - - uint32_t i; // loop counter - - //register __m128i m0,m1,m2,m4; - __m128i tmp32; - - - - - - - - __m128i *x1_128; - __m128i *x2_128; - int *y_32 = (int *)&y[0]; - - // __m128i temp,*tempd; - - - shift = _mm_cvtsi32_si128(output_shift); - x1_128 = (__m128i *)&x1[0]; - x2_128 = (__m128i *)&x2[0]; - - - // printf("mult_cpx_vector_norep: shift %d\n",output_shift); - - // we compute 4 cpx multiply for each loop - for(i=0; i<(N>>1); i++) { - - /* - //#ifdef USER_MODE - printf("i=%d\n",i); - temps = (int16_t *)x1_128; - printf("x1 : %d,%d,%d,%d,%d,%d,%d,%d\n",temps[0],temps[1],temps[2],temps[3],temps[4],temps[5],temps[6],temps[7]); - temps = (int16_t *)x2_128; - printf("x2 : %d,%d,%d,%d,%d,%d,%d,%d\n",temps[0],temps[1],temps[2],temps[3],temps[4],temps[5],temps[6],temps[7]); - //#endif - */ - - // conjuaget and shuffle x1 - m4 = _mm_shufflelo_epi16(x1_128[0],_MM_SHUFFLE(1,0,1,0)); - m4 = _mm_shufflehi_epi16(m4,_MM_SHUFFLE(1,0,1,0)); - /* - temps = (int16_t *)&m4; - printf("x2 : %d,%d,%d,%d,%d,%d,%d,%d\n",temps[0],temps[1],temps[2],temps[3],temps[4],temps[5],temps[6],temps[7]); - */ - m0 = _mm_madd_epi16(m4,x2_128[0]); //pmaddwd_r2r(mm1,mm0); // 1- compute x1[0]*x2[0] - m0 = _mm_sra_epi32(m0,shift); // 1- shift right by shift in order to compensate for the input amplitude - - - // tempw = (int *)&m0; - // printf("m0[1] : %d,%d,%d,%d\n",tempw[0],tempw[1],tempw[2],tempw[3]); - - - - - tmp32 = _mm_packs_epi32(m0,m0); // Re0 Im0 Re1 Im1 Re0 Im0 Re1 Im1 - - - - // printf("tmp : %d,%d,%d,%d\n",((int16_t *)&tmp32)[0],((int16_t *)&tmp32)[1],((int16_t *)&tmp32)[2],((int16_t *)&tmp32)[3]); - - y_32[0] = ((int *)&tmp32)[0]; // 1- pack in a 128 bit register [re im re im] - y_32[1] = ((int *)&tmp32)[1]; // 1- pack in a 128 bit register [re im re im] - - - - x1_128+=1; - x2_128+=1; - y_32 +=2; - - - } - - - _mm_empty(); - _m_empty(); - - return(0); -} - - -int mult_cpx_vector2(int16_t *x1, - int16_t *x2, - int16_t *y, - uint32_t N, - int output_shift) -{ - // Multiply elementwise two complex vectors of N elements - // x1 - input 1 in the format |Re0 Im0 Re0 Im0|,......,|Re(N-1) Im(N-1) Re(N-1) Im(N-1)| - // We assume x1 with a dinamic of 15 bit maximum - // - // x2 - input 2 in the format |Re0 -Im0 Im0 Re0|,......,|Re(N-1) -Im(N-1) Im(N-1) Re(N-1)| - // We assume x2 with a dinamic of 14 bit maximum - // - // y - output in the format |Re0 Im0 Re0 Im0|,......,|Re(N-1) Im(N-1) Re(N-1) Im(N-1)| - // - // N - the size f the vectors (this function does N cpx mpy. WARNING: N must be a multiple of 2; - // - // log2_amp - increase the output amplitude by a factor 2^log2_amp (default is 0) - // WARNING: log2_amp>0 can cause overflow!! - - uint32_t i; // loop counter - - //register __m128i m0,m1; - - /* - #ifdef USER_MODE - int16_t *temps; - int *tempd; - #endif - */ - - __m128i *x1_128; - __m128i *x2_128; - __m128i *y_128; - - // __m128i temp; - - - shift = _mm_cvtsi32_si128(output_shift); - x1_128 = (__m128i *)&x1[0]; - x2_128 = (__m128i *)&x2[0]; - y_128 = (__m128i *)&y[0]; - - - - for(i=0; i<(N>>1); i++) { - - /* #ifdef USER_MODE */ - /* printf("i=%d\n",i); */ - /* temps = (int16_t *)x1_128; */ - /* printf("x1 : %d,%d,%d,%d,%d,%d,%d,%d\n",temps[0],temps[1],temps[2],temps[3],temps[4],temps[5],temps[6],temps[7]); */ - /* temps = (int16_t *)x2_128; */ - /* printf("x2 : %d,%d,%d,%d,%d,%d,%d,%d\n",temps[0],temps[1],temps[2],temps[3],temps[4],temps[5],temps[6],temps[7]); */ - /* #endif */ - - m0 = _mm_madd_epi16(x1_128[i],x2_128[i]); //pmaddwd_r2r(mm1,mm0); // 1- compute x1[0]*x2[0] - - // temp = m0; - - // tempd = &temp; - // printf("m0 : %d,%d,%d,%d\n",tempd[0],tempd[1],tempd[2],tempd[3]); - - m0 = _mm_sra_epi32(m0,shift); // 1- shift right by shift in order to compensate for the input amplitude - - // temp = m0; - - // tempd = (int *)&temp; - // printf("m0 : %d,%d,%d,%d\n",tempd[0],tempd[1],tempd[2],tempd[3]); - - m1 = m0; - m1 = _mm_packs_epi32(m1,m0); // 1- pack in a 128 bit register [re im re im] - y_128[i] = _mm_unpacklo_epi32(m1,m1); // 1- pack in a 128 bit register [re im re im] - - } - - - _mm_empty(); - _m_empty(); - - return(0); -} - -int mult_cpx_vector_add(int16_t *x1, - int16_t *x2, - int16_t *y, - uint32_t N, - int output_shift) -{ - // Multiply elementwise two complex vectors of N elements and add it to y - // x1 - input 1 in the format |Re0 Im0 Re0 Im0|,......,|Re(N-1) Im(N-1) Re(N-1) Im(N-1)| - // We assume x1 with a dinamic of 15 bit maximum - // - // x2 - input 2 in the format |Re0 -Im0 Im0 Re0|,......,|Re(N-1) -Im(N-1) Im(N-1) Re(N-1)| - // We assume x2 with a dinamic of 14 bit maximum - // - // y - output in the format |Re0 Im0 Re0 Im0|,......,|Re(N-1) Im(N-1) Re(N-1) Im(N-1)| - // - // N - the size f the vectors (this function does N cpx mpy. WARNING: N>=4; - // - // log2_amp - increase the output amplitude by a factor 2^log2_amp (default is 0) - // WARNING: log2_amp>0 can cause overflow!! - - uint32_t i; // loop counter - - //register __m128i m0,m1; - - /* - #ifdef USER_MODE - int16_t *temps; - int *tempd; - __m128i temp; - #endif - */ - - __m128i *x1_128; - __m128i *x2_128; - __m128i *y_128; - - - shift = _mm_cvtsi32_si128(output_shift); - x1_128 = (__m128i *)&x1[0]; - x2_128 = (__m128i *)&x2[0]; - y_128 = (__m128i *)&y[0]; - - - // we compute 4 cpx multiply for each loop - for(i=0; i<(N>>3); i++) { - //unroll 0 - - /* - #ifdef USER_MODE - printf("i=%d\n",i); - temps = (int16_t *)x1_128; - printf("x1 : %d,%d,%d,%d,%d,%d,%d,%d\n",temps[0],temps[1],temps[2],temps[3],temps[4],temps[5],temps[6],temps[7]); - temps = (int16_t *)x2_128; - printf("x2 : %d,%d,%d,%d,%d,%d,%d,%d\n",temps[0],temps[1],temps[2],temps[3],temps[4],temps[5],temps[6],temps[7]); - #endif - */ - - m0 = _mm_madd_epi16(x1_128[0],x2_128[0]); //pmaddwd_r2r(mm1,mm0); // 1- compute x1[0]*x2[0] - - // temp = m0; - - // tempd = &temp; - // printf("m0 : %d,%d,%d,%d\n",tempd[0],tempd[1],tempd[2],tempd[3]); - - m0 = _mm_sra_epi32(m0,shift); // 1- shift right by shift in order to compensate for the input amplitude - - // temp = m0; - - // tempd = (int *)&temp; - // printf("m0 : %d,%d,%d,%d\n",tempd[0],tempd[1],tempd[2],tempd[3]); - - - m0 = _mm_packs_epi32(m0,m0); // 1- pack in a 128 bit register [re im re im] - m0 = _mm_unpacklo_epi32(m0,m0); // 1- pack in a 128 bit register [re im re im] - - y_128[0] = _mm_add_epi16(m0,y_128[0]); - - - // temps = (int16_t *)&y_128[0]; - // printf("y0 : %d,%d,%d,%d,%d,%d,%d,%d\n",temps[0],temps[1],temps[2],temps[3],temps[4],temps[5],temps[6],temps[7]); - - - //unroll 1 - m0 = _mm_madd_epi16(x1_128[1],x2_128[1]); //pmaddwd_r2r(mm1,mm0); // 1- compute x1[0]*x2[0] - - m0 = _mm_sra_epi32(m0,shift); // 1- shift right by shift in order to compensate for the input amplitude - - - - - m1 = m0; - m1 = _mm_packs_epi32(m1,m0); // 1- pack in a 128 bit register [re im re im] - m1 = _mm_unpacklo_epi32(m1,m1); // 1- pack in a 128 bit register [re im re im] - - y_128[1] = _mm_add_epi16(m1,y_128[1]); - - - //unroll 2 - m0 = _mm_madd_epi16(x1_128[2],x2_128[2]); //pmaddwd_r2r(mm1,mm0); // 1- compute x1[0]*x2[0] - - m0 = _mm_sra_epi32(m0,shift); // 1- shift right by shift in order to compensate for the input amplitude - - - - - m1 = m0; - m1 = _mm_packs_epi32(m1,m0); // 1- pack in a 128 bit register [re im re im] - m1 = _mm_unpacklo_epi32(m1,m1); // 1- pack in a 128 bit register [re im re im] - - y_128[2] = _mm_add_epi16(m1,y_128[2]); - - - - //unroll 3 - m0 = _mm_madd_epi16(x1_128[3],x2_128[3]); //pmaddwd_r2r(mm1,mm0); // 1- compute x1[0]*x2[0] - - m0 = _mm_sra_epi32(m0,shift); // 1- shift right by shift in order to compensate for the input amplitude - - - - - m1 = m0; - m1 = _mm_packs_epi32(m1,m0); // 1- pack in a 128 bit register [re im re im] - m1 = _mm_unpacklo_epi32(m1,m1); // 1- pack in a 128 bit register [re im re im] - - y_128[3] = _mm_add_epi16(m1,y_128[3]); - - - x1_128+=4; - x2_128+=4; - y_128 +=4; - } - - - _mm_empty(); - _m_empty(); - - return(0); -} - -int mult_cpx_vector_add32(int16_t *x1, - int16_t *x2, - int16_t *y, - uint32_t N) - -{ - // Multiply elementwise two complex vectors of N elements and add it to y - // x1 - input 1 in the format |Re0 Im0 Re0 Im0|,......,|Re(N-1) Im(N-1) Re(N-1) Im(N-1)| - // We assume x1 with a dinamic of 15 bit maximum - // - // x2 - input 2 in the format |Re0 -Im0 Im0 Re0|,......,|Re(N-1) -Im(N-1) Im(N-1) Re(N-1)| - // We assume x2 with a dinamic of 14 bit maximum - // - // y - output in the format |Re0 (32bit) Im0 (32bit) |,......,|Re(N-1) (32bit) Im(N-1) (32bit)| - // - // N - the size f the vectors (this function does N cpx mpy. WARNING: N>=4; - // - - uint32_t i; // loop counter - //register __m128i m0; - - /* - #ifdef USER_MODE - int16_t *temps; - int *tempd; - __m128i temp; - #endif - */ - - __m128i *x1_128; - __m128i *x2_128; - __m128i *y_128; - - - x1_128 = (__m128i *)&x1[0]; - x2_128 = (__m128i *)&x2[0]; - y_128 = (__m128i *)&y[0]; - - - // we compute 4 cpx multiply for each loop - for(i=0; i<(N>>3); i++) { - //unroll 0 - - - m0 = _mm_madd_epi16(x1_128[0],x2_128[0]); //pmaddwd_r2r(mm1,mm0); // 1- compute x1[0]*x2[0 - y_128[0] = _mm_add_epi32(y_128[0],m0); - - /* - #ifdef USER_MODE - printf("i=%d\n",i); - temps = (int16_t *)x1_128; - printf("x1 : %d,%d,%d,%d,%d,%d,%d,%d\n",temps[0],temps[1],temps[2],temps[3],temps[4],temps[5],temps[6],temps[7]); - temps = (int16_t *)x2_128; - printf("x2 : %d,%d,%d,%d,%d,%d,%d,%d\n",temps[0],temps[1],temps[2],temps[3],temps[4],temps[5],temps[6],temps[7]); - tempd = (int *)y_128; - printf("y : %d,%d,%d,%d\n",tempd[0],tempd[1],tempd[2],tempd[3]); - #endif - */ - - - m0 = _mm_madd_epi16(x1_128[1],x2_128[1]); //pmaddwd_r2r(mm1,mm0); // 1- compute x1[0]*x2[0] - y_128[1] = _mm_add_epi32(y_128[1],m0); - - m0 = _mm_madd_epi16(x1_128[2],x2_128[2]); //pmaddwd_r2r(mm1,mm0); // 1- compute x1[0]*x2[0] - y_128[2] = _mm_add_epi32(y_128[2],m0); - - m0 = _mm_madd_epi16(x1_128[3],x2_128[3]); //pmaddwd_r2r(mm1,mm0); // 1- compute x1[0]*x2[0] - y_128[3] = _mm_add_epi32(y_128[3],m0); - - - x1_128+=4; - x2_128+=4; - y_128 +=4; - } - - - _mm_empty(); - _m_empty(); - - return(0); -} - -int mult_vector32(int16_t *x1, - int16_t *x2, - int16_t *y, - uint32_t N) - -{ - // Multiply elementwise two real vectors of N elements y = real(x1).*real(x2) - // x1 - input 1 in the format |Re(0) xxx Re(1) xxx|,......,|Re(N-2) xxx Re(N-1) xxx| - // We assume x1 with a dinamic of 31 bit maximum - // - // x1 - input 2 in the format |Re(0) xxx Re(2) xxx|,......,|Re(N-2) xxx Re(N-1) xxx| - // We assume x2 with a dinamic of 31 bit maximum - // - // y - output in the format |Re0 (64bit) |,......,|Re(N-1) (64bit)| - // - // N - the size f the vectors (this function does N cpx mpy. WARNING: N>=4; - // - - uint32_t i; // loop counter - - __m128i *x1_128; - __m128i *x2_128; - __m128i *y_128; - - - x1_128 = (__m128i *)&x1[0]; - x2_128 = (__m128i *)&x2[0]; - y_128 = (__m128i *)&y[0]; - - - // we compute 4 cpx multiply for each loop - for(i=0; i<(N>>3); i++) { - y_128[0] = _mm_mul_epu32(x1_128[0],x2_128[0]); - - /* - #ifdef USER_MODE - printf("i=%d\n",i); - tempd = (int *)x1_128; - printf("x1 : %d,%d,%d,%d\n",tempd[0],tempd[1],tempd[2],tempd[3]); - tempd = (int *)x2_128; - printf("x2 : %d,%d,%d,%d\n",tempd[0],tempd[1],tempd[2],tempd[3]); - // tempd = (int *)y_128; - // printf("y : %d,%d,%d,%d\n",tempd[0],tempd[1],tempd[2],tempd[3]); - templ = (long long *)y_128; - printf("y : %lld,%lld\n",templ[0],templ[1]); - #endif - */ - - y_128[1] = _mm_mul_epu32(x1_128[1],x2_128[1]); - y_128[2] = _mm_mul_epu32(x1_128[2],x2_128[2]); - y_128[3] = _mm_mul_epu32(x1_128[3],x2_128[3]); - - - x1_128+=4; - x2_128+=4; - y_128 +=4; - } - - - _mm_empty(); - _m_empty(); - - return(0); -} - - -/* -The following code does not work, because there is no signed 32bit multiplication intrinsic. It only works for unsigned values - -int mult_cpx_vector32_conj(int16_t *x, - int16_t *y, - uint32_t N) - -{ - // elementwise multiplication of two complex vectors of N elements such that y = x * conj(x) = real(x)*real(x)+imag(x)*imag(x) - // x - input in the format |Re(0) Im(0) Re(1) Im(1) |,......,|Re(N-2) Im(N-2) Re(N-1) Im(N-1)| - // We assume x with a dinamic of 31 bit maximum - // - // y - output in the format |Re0 (64bit) |,......,|Re(N-1) (64bit)| - // - // N - the size f the vectors (this function does N cpx mpy. WARNING: N>=4; - // - - uint32_t i; // loop counter - -#ifdef USER_MODE - char *tempc; - int16_t *temps; - int *tempd; - long long *templ; - __m128i temp; -#endif - - __m128i *x_128; - __m128i *y_128; - - __m128i m0,m1,m2,m3; - - x_128 = (__m128i *)&x[0]; - y_128 = (__m128i *)&y[0]; - - // we compute 4 cpx multiply for each loop - for(i=0;i<(N>>3);i++) - { - // Re(a)*Re(b) - m0 = _mm_mul_epu32(x_128[0],x_128[0]); - // Im(a)*Im(b) - m1 = _mm_shuffle_epi32(x_128[0],_MM_SHUFFLE(2,3,0,1)); - m3 = _mm_mul_epu32(m1,m1); - // Re(a)*Re(b)+Im(a)*Im(b) - y_128[0] = _mm_add_epi64(m0,m3); - -#ifdef USER_MODE - printf("i=%d\n",i); - tempd = (int *)x_128; - printf("x : %d,%d,%d,%d\n",tempd[0],tempd[1],tempd[2],tempd[3]); - templ = (long long *)&m0; - printf("m0 : %lld,%lld\n",templ[0],templ[1]); - tempd = (int *)&m1; - printf("m1 : %d,%d,%d,%d\n",tempd[0],tempd[1],tempd[2],tempd[3]); - templ = (long long *)&m3; - printf("m3 : %lld,%lld\n",templ[0],templ[1]); - // tempd = (int *)y_128; - // printf("y : %d,%d,%d,%d\n",tempd[0],tempd[1],tempd[2],tempd[3]); - templ = (long long *)y_128; - printf("y : %lld,%lld\n",templ[0],templ[1]); -#endif - - // Re(a)*Re(b) - m0 = _mm_mul_epu32(x_128[1],x_128[1]); - // Im(a)*Im(b) - m1 = _mm_shuffle_epi32(x_128[1],_MM_SHUFFLE(1,0,3,2)); - m3 = _mm_mul_epu32(m1,m1); - // Re(a)*Re(b)+Im(a)*Im(b) - y_128[1] = _mm_add_epi64(m0,m3); - - - // Re(a)*Re(b) - m0 = _mm_mul_epu32(x_128[2],x_128[2]); - // Im(a)*Im(b) - m1 = _mm_shuffle_epi32(x_128[2],_MM_SHUFFLE(1,0,3,2)); - m3 = _mm_mul_epu32(m1,m1); - // Re(a)*Re(b)+Im(a)*Im(b) - y_128[2] = _mm_add_epi64(m0,m3); - - - // Re(a)*Re(b) - m0 = _mm_mul_epu32(x_128[3],x_128[3]); - // Im(a)*Im(b) - m1 = _mm_shuffle_epi32(x_128[3],_MM_SHUFFLE(1,0,3,2)); - m3 = _mm_mul_epu32(m1,m1); - // Re(a)*Re(b)+Im(a)*Im(b) - y_128[3] = _mm_add_epi64(m0,m3); - - - x_128+=4; - y_128 +=4; - } - - - _mm_empty(); - _m_empty(); - - return(0); -} -*/ - -int mult_cpx_vector32_conj(int16_t *x, - int16_t *y, - uint32_t N) - -{ - // Elementwise multiplication of two complex vectors of N elements such that y = x * conj(x) = real(x)*real(x)+imag(x)*imag(x) - // x - input in the format |Re(0) Im(0) Re(1) Im(1) |,......,|Re(N-2) Im(N-2) Re(N-1) Im(N-1)| - // We assume x1 with a dinamic of 31 bit maximum - // - // y - output in the format |Re0 (64bit) |,......,|Re(N-1) (64bit)| - // - // N - the size f the vectors (this function does N cpx mpy. WARNING: N>=4; - // - - uint32_t i; // loop counter - - int *xi = (int*) x; - long long int *yl = (long long int*) y; - - long long int temp1,temp2; - - - for(i=0; i>3); i++) { - /* - #ifdef USER_MODE - printf("i=%d\n",i); - temps = (int16_t *)x1_128; - printf("x1 : %d,%d,%d,%d,%d,%d,%d,%d\n",temps[0],temps[1],temps[2],temps[3],temps[4],temps[5],temps[6],temps[7]); - temps = (int16_t *)x2_128; - printf("x2 : %d,%d,%d,%d,%d,%d,%d,%d\n",temps[0],temps[1],temps[2],temps[3],temps[4],temps[5],temps[6],temps[7]); - #endif - */ - - //unroll 0 - m0 = _mm_sra_epi32(y_128[0],shift); // 1- shift right by shift in order to compensate for the input amplitude - m0 = _mm_packs_epi32(m0,m0); // 1- pack in a 128 bit register [re im re im] - y_128[0] = _mm_unpacklo_epi32(m0,m0); // 1- pack in a 128 bit register [re im re im] - - // temps = (int16_t *)&y_128[0]; - // printf("y0 : %d,%d,%d,%d,%d,%d,%d,%d\n",temps[0],temps[1],temps[2],temps[3],temps[4],temps[5],temps[6],temps[7]); - - //unroll 1 - m1 = _mm_sra_epi32(y_128[1],shift); // 1- shift right by shift in order to compensate for the input amplitude - m1 = _mm_packs_epi32(m1,m1); // 1- pack in a 128 bit register [re im re im] - y_128[1] = _mm_unpacklo_epi32(m1,m1); // 1- pack in a 128 bit register [re im re im] - - //unroll 2 - m1 = _mm_sra_epi32(y_128[2],shift); // 1- shift right by shift in order to compensate for the input amplitude - m1 = _mm_packs_epi32(m1,m1); // 1- pack in a 128 bit register [re im re im] - y_128[2] = _mm_unpacklo_epi32(m1,m1); // 1- pack in a 128 bit register [re im re im] - - //unroll 3 - m1 = _mm_sra_epi32(y_128[3],shift); // 1- shift right by shift in order to compensate for the input amplitude - m1 = _mm_packs_epi32(m1,m1); // 1- pack in a 128 bit register [re im re im] - y_128[3] = _mm_unpacklo_epi32(m1,m1); // 1- pack in a 128 bit register [re im re im] - - y_128 +=4; - } - - _mm_empty(); - _m_empty(); - - return(0); -} - - -#ifdef MAIN -#define L 16 - -main () -{ - - int16_t input[256] __attribute__((aligned(16))); - int16_t input2[256] __attribute__((aligned(16))); - int16_t output[256] __attribute__((aligned(16))); - - int i; - - input[0] = 100; - input[1] = 200; - input[2] = -200; - input[3] = 100; - input[4] = 1000; - input[5] = 2000; - input[6] = -2000; - input[7] = 1000; - input[8] = 100; - input[9] = 200; - input[10] = -200; - input[11] = 100; - input[12] = 1000; - input[13] = 2000; - input[14] = -2000; - input[15] = 1000; - - input2[0] = 1; - input2[1] = 2; - input2[2] = 1; - input2[3] = 2; - input2[4] = 10; - input2[5] = 20; - input2[6] = 10; - input2[7] = 20; - input2[8] = 1; - input2[9] = 2; - input2[10] = 1; - input2[11] = 2; - input2[12] = 1000; - input2[13] = 2000; - input2[14] = 1000; - input2[15] = 2000; - - - mult_cpx_vector32_conj(input,output,8); - - -} - -#endif //MAIN - - -#else //EXPRESSMIMO_TARGET - -/* -int mult_cpx_vector(int16_t *x1, - int16_t *x2, - int16_t *y, - uint32_t N, - uint16_t output_shift) -{ - -} -*/ - -#endif //EXPRESSMIMO_TARGET diff --git a/openair1/PHY/TOOLS/cmult_vvh.c b/openair1/PHY/TOOLS/cmult_vvh.c index d5e299b724..7e360d9728 100644 --- a/openair1/PHY/TOOLS/cmult_vvh.c +++ b/openair1/PHY/TOOLS/cmult_vvh.c @@ -28,7 +28,6 @@ *******************************************************************************/ #include "defs.h" -#ifndef EXPRESSMIMO_TARGET static __m128i shift __attribute__ ((aligned(16))); @@ -365,15 +364,3 @@ main () } #endif //MAIN - -#else //EXPRESSMIMO_TARGET -int mult_cpx_vector_h(short *x1, - short *x2, - short *y, - unsigned int N, - unsigned short output_shift, - short sign) -{ - -} -#endif //EXPRESSMIMO_TARGET diff --git a/openair1/PHY/TOOLS/defs.h b/openair1/PHY/TOOLS/defs.h index d9783041e4..0ea1af57e4 100644 --- a/openair1/PHY/TOOLS/defs.h +++ b/openair1/PHY/TOOLS/defs.h @@ -64,7 +64,6 @@ struct complex32 { int32_t i; }; -#ifndef EXPRESSMIMO_TARGET /*!\fn void multadd_real_vector_complex_scalar(int16_t *x,int16_t *alpha,int16_t *y,uint32_t N) This function performs componentwise multiplication and accumulation of a complex scalar and a real vector. @param x Vector input (Q1.15) @@ -339,42 +338,7 @@ void dft3072(int16_t *sigF,int16_t *sig); void dft24576(int16_t *sigF,int16_t *sig); -/*!\fn int rotate_cpx_vector(int16_t *x,int16_t *alpha,int16_t *y,uint32_t N,uint16_t output_shift, uint8_t format) -This function performs componentwise multiplication of a vector with a complex scalar. -@param x Vector input (Q1.15) in the format |Re0 Im0 Re0 Im0|,......,|Re(N-1) Im(N-1) Re(N-1) Im(N-1)| -@param alpha Scalar input (Q1.15) in the format |Re0 Im0| -@param y Output (Q1.15) in the format |Re0 Im0 Re0 Im0|,......,|Re(N-1) Im(N-1) Re(N-1) Im(N-1)| -@param N Length of x WARNING: N>=4 -@param output_shift Number of bits to shift output down to Q1.15 (should be 15 for Q1.15 inputs) WARNING: log2_amp>0 can cause overflow!! -@param format Format 0 indicates that alpha is in shuffled format during multiply (Re -Im Im Re), whereas 1 indicates that input is in this format (i.e. a matched filter) - -The function implemented is : \f$\mathbf{y} = \alpha\mathbf{x}\f$ -*/ -int32_t rotate_cpx_vector(int16_t *x, - int16_t *alpha, - int16_t *y, - uint32_t N, - uint16_t output_shift, - uint8_t format); - -/*!\fn int32_t rotate_cpx_vector2(int16_t *x,int16_t *alpha,int16_t *y,uint32_t N,uint16_t output_shift,uint8_t format) -This function performs componentwise multiplication of a vector with a complex scalar. -@param x Vector input (Q1.15) in the format |Re0 Im0 Re0 Im0|,......,|Re(N-1) Im(N-1) Re(N-1) Im(N-1)| -@param alpha Scalar input (Q1.15) in the format |Re0 Im0| -@param y Output (Q1.15) in the format |Re0 Im0 Re0 Im0|,......,|Re(N-1) Im(N-1) Re(N-1) Im(N-1)| -@param N Length of x WARNING: N must be multiple of 2 (the routine performs two complex multiplies per cycle) -@param output_shift Number of bits to shift output down to Q1.15 (should be 15 for Q1.15 inputs) WARNING: log2_amp>0 can cause overflow!! -@param format Format 0 indicates that alpha is in shuffled format during multiply (Re -Im Im Re), whereas 1 indicates that input is in this format (i.e. a matched filter) -The function implemented is : \f$\mathbf{y} = \alpha\mathbf{x}\f$ -*/ -int32_t rotate_cpx_vector2(int16_t *x, - int16_t *alpha, - int16_t *y, - uint32_t N, - uint16_t output_shift, - uint8_t format); - -/*!\fn int32_t rotate_cpx_vector_norep(int16_t *x,int16_t *alpha,int16_t *y,uint32_t N,uint16_t output_shift) +/*!\fn int32_t rotate_cpx_vector(int16_t *x,int16_t *alpha,int16_t *y,uint32_t N,uint16_t output_shift) This function performs componentwise multiplication of a vector with a complex scalar. @param x Vector input (Q1.15) in the format |Re0 Im0|,......,|Re(N-1) Im(N-1)| @param alpha Scalar input (Q1.15) in the format |Re0 Im0| @@ -384,19 +348,19 @@ This function performs componentwise multiplication of a vector with a complex s The function implemented is : \f$\mathbf{y} = \alpha\mathbf{x}\f$ */ -int32_t rotate_cpx_vector_norep(int16_t *x, - int16_t *alpha, - int16_t *y, - uint32_t N, - uint16_t output_shift); +int32_t rotate_cpx_vector(int16_t *x, + int16_t *alpha, + int16_t *y, + uint32_t N, + uint16_t output_shift); /*!\fn int32_t add_cpx_vector(int16_t *x,int16_t *alpha,int16_t *y,uint32_t N) This function performs componentwise addition of a vector with a complex scalar. -@param x Vector input (Q1.15) in the format |Re0 Im0 Re0 Im0|,......,|Re(N-1) Im(N-1) Re(N-1) Im(N-1)| +@param x Vector input (Q1.15) in the format |Re0 Im0 Re1 Im1|,......,|Re(N-2) Im(N-2) Re(N-1) Im(N-1)| @param alpha Scalar input (Q1.15) in the format |Re0 Im0| -@param y Output (Q1.15) in the format |Re0 Im0 Re0 Im0|,......,|Re(N-1) Im(N-1) Re(N-1) Im(N-1)| +@param y Output (Q1.15) in the format |Re0 Im0 Re1 Im1|,......,|Re(N-2) Im(N-2) Re(N-1) Im(N-1)| @param N Length of x WARNING: N>=4 The function implemented is : \f$\mathbf{y} = \alpha + \mathbf{x}\f$ @@ -515,20 +479,6 @@ Compensate the phase rotation of the RF. WARNING: This function is currently unu */ -#else // EXPRESSMIMO_TARGET - -#define fft(x,y,twiddle,rev,log2size,scale,input_fmt) \ -(((twiddle)==0) ? \ - (fft(1<<(log2size),((unsigned long*)(x)),((unsigned long*)(y)))) : \ - (ifft(1<<(log2size),((unsigned long*)(x)),((unsigned long*)(y))))) - -#define mult_cpx_vector(x1,x2,y,N,os) component_wise_product(N,(unsigned long *)(x1),(unsigned long *)(x2),(unsigned long *)(y)) - -#define mult_cpx_vector2(x1,x2,y,N,os) component_wise_product(N,(unsigned long *)(x1),(unsigned long *)(x2),(unsigned long *)(y)) - -#define add_vector16(x,y,z,N) component_wise_addition(N,(unsigned long*)(x),(unsigned long*)(y),(unsigned long*)(z)) - -#endif // EXPRESSMIMO_TARGET int8_t dB_fixed(uint32_t x); diff --git a/openair1/PHY/TOOLS/lte_dfts.c b/openair1/PHY/TOOLS/lte_dfts.c index 6a79a9bd3a..22649ae7b3 100644 --- a/openair1/PHY/TOOLS/lte_dfts.c +++ b/openair1/PHY/TOOLS/lte_dfts.c @@ -40,6 +40,7 @@ #include "defs.h" #else #include "time_meas.h" +#include #define debug_msg #define ONE_OVER_SQRT2_Q15 23170 @@ -49,12 +50,18 @@ #include "PHY/sse_intrin.h" +#define print_shorts(s,x) printf("%s %d,%d,%d,%d,%d,%d,%d,%d\n",s,(x)[0],(x)[1],(x)[2],(x)[3],(x)[4],(x)[5],(x)[6],(x)[7]) +#define print_ints(s,x) printf("%s %d %d %d %d\n",s,(x)[0],(x)[1],(x)[2],(x)[3]) + +#ifdef AVX2 +static int16_t conjugatedft2[16] __attribute__((aligned(32))) = {1,1,1,1,1,1,1,1,-1,1,-1,1,-1,1,-1,1,-1,1}; +#endif static int16_t conjugatedft[8] __attribute__((aligned(16))) = {-1,1,-1,1,-1,1,-1,1} ; - static short reflip[8] __attribute__((aligned(16))) = {1,-1,1,-1,1,-1,1,-1}; +#if defined(__x86_64__) || defined(__i386__) static inline void cmac(__m128i a,__m128i b, __m128i *re32, __m128i *im32) __attribute__((always_inline)); static inline void cmac(__m128i a,__m128i b, __m128i *re32, __m128i *im32) { @@ -122,8 +129,6 @@ static inline void cmultc(__m128i a,__m128i b, __m128i *re32, __m128i *im32) *re32 = _mm_madd_epi16(a,b); mmtmpb = _mm_sign_epi16(b,*(__m128i*)reflip); - // mmtmpb = _mm_shufflelo_epi16(mmtmpb,_MM_SHUFFLE(2,3,0,1)); - // mmtmpb = _mm_shufflehi_epi16(mmtmpb,_MM_SHUFFLE(2,3,0,1)); mmtmpb = _mm_shuffle_epi8(mmtmpb,_mm_set_epi8(13,12,15,14,9,8,11,10,5,4,7,6,1,0,3,2)); *im32 = _mm_madd_epi16(a,mmtmpb); @@ -178,34 +183,166 @@ static inline __m128i packed_cmult2(__m128i a,__m128i b,__m128i b2) cre = _mm_madd_epi16(a,b); cim = _mm_madd_epi16(a,b2); - /* - mmtmpb = _mm_sign_epi16(b,*(__m128i*)reflip); - cre = _mm_madd_epi16(a,mmtmpb); - mmtmpb = _mm_shufflelo_epi16(b,_MM_SHUFFLE(2,3,0,1)); - mmtmpb = _mm_shufflehi_epi16(mmtmpb,_MM_SHUFFLE(2,3,0,1)); - cim = _mm_madd_epi16(a,mmtmpb); - */ - /* - __m128i cre,cim; - cmult(a,b,&cre,&cim); - */ return(cpack(cre,cim)); } -/* -static inline __m128i packed_cmultc2(__m128i a,__m128i b,__m128i b2) __attribute__((always_inline)); +#elif defined (__arm__) +static inline void cmac(int16x8_t a,int16x8_t b, int32x4_t *re32, int32x4_t *im32) __attribute__((always_inline)); +static inline void cmac(int16x8_t a,int16x8_t b, int32x4_t *re32, int32x4_t *im32) +{ -static inline __m128i packed_cmultc2(__m128i a,__m128i b,__m128i b2) { + + int32x4_t ab_re0,ab_re1,ab_im0,ab_im1; + int16x8_t bflip = vrev32q_s16(b); + int16x8_t bconj = vmulq_s16(b,*(int16x8_t *)reflip); - __m128i cre,cim; + ab_re0 = vmull_s16(((int16x4_t*)&a)[0],((int16x4_t*)&bconj)[0]); + ab_re1 = vmull_s16(((int16x4_t*)&a)[1],((int16x4_t*)&bconj)[1]); + ab_im0 = vmull_s16(((int16x4_t*)&a)[0],((int16x4_t*)&bflip)[0]); + ab_im1 = vmull_s16(((int16x4_t*)&a)[1],((int16x4_t*)&bflip)[1]); + *re32 = vqaddq_s32(*re32,vcombine_s32(vpadd_s32(((int32x2_t*)&ab_re0)[0],((int32x2_t*)&ab_re0)[1]), + vpadd_s32(((int32x2_t*)&ab_re1)[0],((int32x2_t*)&ab_re1)[1]))); + *im32 = vqaddq_s32(*im32,vcombine_s32(vpadd_s32(((int32x2_t*)&ab_im0)[0],((int32x2_t*)&ab_im0)[1]), + vpadd_s32(((int32x2_t*)&ab_im1)[0],((int32x2_t*)&ab_im1)[1]))); +} + +static inline void cmacc(int16x8_t a,int16x8_t b, int32x4_t *re32, int32x4_t *im32) __attribute__((always_inline)); +static inline void cmacc(int16x8_t a,int16x8_t b, int32x4_t *re32, int32x4_t *im32) +{ + int32x4_t ab_re0,ab_re1,ab_im0,ab_im1; + int16x8_t bconj = vmulq_s16(b,*(int16x8_t *)reflip); + int16x8_t bflip = vrev32q_s16(bconj); + + ab_re0 = vmull_s16(((int16x4_t*)&a)[0],((int16x4_t*)&b)[0]); + ab_re1 = vmull_s16(((int16x4_t*)&a)[1],((int16x4_t*)&b)[1]); + ab_im0 = vmull_s16(((int16x4_t*)&a)[0],((int16x4_t*)&bflip)[0]); + ab_im1 = vmull_s16(((int16x4_t*)&a)[1],((int16x4_t*)&bflip)[1]); + *re32 = vqaddq_s32(*re32,vcombine_s32(vpadd_s32(((int32x2_t*)&ab_re0)[0],((int32x2_t*)&ab_re0)[1]), + vpadd_s32(((int32x2_t*)&ab_re1)[0],((int32x2_t*)&ab_re1)[1]))); + *im32 = vqaddq_s32(*im32,vcombine_s32(vpadd_s32(((int32x2_t*)&ab_im0)[0],((int32x2_t*)&ab_im0)[1]), + vpadd_s32(((int32x2_t*)&ab_im1)[0],((int32x2_t*)&ab_im1)[1]))); + +} + +static inline void cmult(int16x8_t a,int16x8_t b, int32x4_t *re32, int32x4_t *im32) __attribute__((always_inline)); +static inline void cmult(int16x8_t a,int16x8_t b, int32x4_t *re32, int32x4_t *im32) +{ + int32x4_t ab_re0,ab_re1,ab_im0,ab_im1; + int16x8_t bflip = vrev32q_s16(b); + int16x8_t bconj = vmulq_s16(b,*(int16x8_t *)reflip); + int16x4_t al,ah,bcl,bch,bfl,bfh; + int32x2_t abr0l,abr0h,abr1l,abr1h,abi0l,abi0h,abi1l,abi1h; + + al = vget_low_s16(a); ah = vget_high_s16(a); + bcl = vget_low_s16(bconj); bch = vget_high_s16(bconj); + bfl = vget_low_s16(bflip); bfh = vget_high_s16(bflip); + + ab_re0 = vmull_s16(al,bcl); + ab_re1 = vmull_s16(ah,bch); + ab_im0 = vmull_s16(al,bfl); + ab_im1 = vmull_s16(ah,bfh); + abr0l = vget_low_s32(ab_re0); abr0h = vget_high_s32(ab_re0); + abr1l = vget_low_s32(ab_re1); abr1h = vget_high_s32(ab_re1); + abi0l = vget_low_s32(ab_im0); abi0h = vget_high_s32(ab_im0); + abi1l = vget_low_s32(ab_im1); abi1h = vget_high_s32(ab_im1); + + *re32 = vcombine_s32(vpadd_s32(abr0l,abr0h), + vpadd_s32(abr1l,abr1h)); + *im32 = vcombine_s32(vpadd_s32(abi0l,abi0h), + vpadd_s32(abi1l,abi1h)); +} + +static inline void cmultc(int16x8_t a,int16x8_t b, int32x4_t *re32, int32x4_t *im32) __attribute__((always_inline)); + +static inline void cmultc(int16x8_t a,int16x8_t b, int32x4_t *re32, int32x4_t *im32) +{ + int32x4_t ab_re0,ab_re1,ab_im0,ab_im1; + int16x8_t bconj = vmulq_s16(b,*(int16x8_t *)reflip); + int16x8_t bflip = vrev32q_s16(bconj); + int16x4_t al,ah,bl,bh,bfl,bfh; + int32x2_t abr0l,abr0h,abr1l,abr1h,abi0l,abi0h,abi1l,abi1h; + al = vget_low_s16(a); ah = vget_high_s16(a); + bl = vget_low_s16(b); bh = vget_high_s16(b); + bfl = vget_low_s16(bflip); bfh = vget_high_s16(bflip); + + ab_re0 = vmull_s16(al,bl); + ab_re1 = vmull_s16(ah,bh); + ab_im0 = vmull_s16(al,bfl); + ab_im1 = vmull_s16(ah,bfh); + + abr0l = vget_low_s32(ab_re0); abr0h = vget_high_s32(ab_re0); + abr1l = vget_low_s32(ab_re1); abr1h = vget_high_s32(ab_re1); + abi0l = vget_low_s32(ab_im0); abi0h = vget_high_s32(ab_im0); + abi1l = vget_low_s32(ab_im1); abi1h = vget_high_s32(ab_im1); + + *re32 = vcombine_s32(vpadd_s32(abr0l,abr0h), + vpadd_s32(abr1l,abr1h)); + *im32 = vcombine_s32(vpadd_s32(abi0l,abi0h), + vpadd_s32(abi1l,abi1h)); + +} + + +static inline int16x8_t cpack(int32x4_t xre,int32x4_t xim) __attribute__((always_inline)); + +static inline int16x8_t cpack(int32x4_t xre,int32x4_t xim) +{ + int32x4x2_t xtmp; + + xtmp = vzipq_s32(xre,xim); + return(vcombine_s16(vqshrn_n_s32(xtmp.val[0],15),vqshrn_n_s32(xtmp.val[1],15))); + +} + + +static inline void packed_cmult(int16x8_t a,int16x8_t b, int16x8_t *c) __attribute__((always_inline)); + +static inline void packed_cmult(int16x8_t a,int16x8_t b, int16x8_t *c) +{ + + int32x4_t cre,cim; + cmult(a,b,&cre,&cim); + *c = cpack(cre,cim); + +} + + +static inline void packed_cmultc(int16x8_t a,int16x8_t b, int16x8_t *c) __attribute__((always_inline)); + +static inline void packed_cmultc(int16x8_t a,int16x8_t b, int16x8_t *c) +{ + + int32x4_t cre,cim; cmultc(a,b,&cre,&cim); + *c = cpack(cre,cim); + +} + +static inline int16x8_t packed_cmult2(int16x8_t a,int16x8_t b, int16x8_t b2) __attribute__((always_inline)); + +static inline int16x8_t packed_cmult2(int16x8_t a,int16x8_t b, int16x8_t b2) +{ + + + + int32x4_t ab_re0,ab_re1,ab_im0,ab_im1,cre,cim; + + ab_re0 = vmull_s16(((int16x4_t*)&a)[0],((int16x4_t*)&b)[0]); + ab_re1 = vmull_s16(((int16x4_t*)&a)[1],((int16x4_t*)&b)[1]); + ab_im0 = vmull_s16(((int16x4_t*)&a)[0],((int16x4_t*)&b2)[0]); + ab_im1 = vmull_s16(((int16x4_t*)&a)[1],((int16x4_t*)&b2)[1]); + cre = vcombine_s32(vpadd_s32(((int32x2_t*)&ab_re0)[0],((int32x2_t*)&ab_re0)[1]), + vpadd_s32(((int32x2_t*)&ab_re1)[0],((int32x2_t*)&ab_re1)[1])); + cim = vcombine_s32(vpadd_s32(((int32x2_t*)&ab_im0)[0],((int32x2_t*)&ab_im0)[1]), + vpadd_s32(((int32x2_t*)&ab_im1)[0],((int32x2_t*)&ab_im1)[1])); return(cpack(cre,cim)); } -*/ + +#endif static int16_t W0s[8]__attribute__((aligned(16))) = {32767,0,32767,0,32767,0,32767,0}; @@ -217,6 +354,7 @@ static int16_t W25s[8]__attribute__((aligned(16))) = {-26509,-19260,-26509,-1926 static int16_t W35s[8]__attribute__((aligned(16))) = {-26510,19260,-26510,19260,-26510,19260,-26510,19260}; static int16_t W45s[8]__attribute__((aligned(16))) = {10126,31163,10126,31163,10126,31163,10126,31163}; +#if defined(__x86_64__) || defined(__i386__) __m128i *W0 = (__m128i *)W0s; __m128i *W13 = (__m128i *)W13s; __m128i *W23 = (__m128i *)W23s; @@ -224,7 +362,15 @@ __m128i *W15 = (__m128i *)W15s; __m128i *W25 = (__m128i *)W25s; __m128i *W35 = (__m128i *)W35s; __m128i *W45 = (__m128i *)W45s; - +#elif defined(__arm__) +int16x8_t *W0 = (int16x8_t *)W0s; +int16x8_t *W13 = (int16x8_t *)W13s; +int16x8_t *W23 = (int16x8_t *)W23s; +int16x8_t *W15 = (int16x8_t *)W15s; +int16x8_t *W25 = (int16x8_t *)W25s; +int16x8_t *W35 = (int16x8_t *)W35s; +int16x8_t *W45 = (int16x8_t *)W45s; +#endif static int16_t dft_norm_table[16] = {9459, //12 6689,//24 5461,//36 @@ -244,6 +390,7 @@ static int16_t dft_norm_table[16] = {9459, //12 }; //sqrt(5) //300 +#if defined(__x86_64__) || defined(__i386__) static inline void bfly2(__m128i *x0, __m128i *x1,__m128i *y0, __m128i *y1,__m128i *tw)__attribute__((always_inline)); static inline void bfly2(__m128i *x0, __m128i *x1,__m128i *y0, __m128i *y1,__m128i *tw) @@ -270,6 +417,31 @@ static inline void bfly2(__m128i *x0, __m128i *x1,__m128i *y0, __m128i *y1,__m12 *y1 = _mm_packs_epi32(bfly2_tmp1,bfly2_tmp2); } +#elif defined(__arm__) + +static inline void bfly2(int16x8_t *x0, int16x8_t *x1,int16x8_t *y0, int16x8_t *y1,int16x8_t *tw)__attribute__((always_inline)); + +static inline void bfly2(int16x8_t *x0, int16x8_t *x1,int16x8_t *y0, int16x8_t *y1,int16x8_t *tw) +{ + + int32x4_t x0r_2,x0i_2,x1r_2,x1i_2,dy0r,dy1r,dy0i,dy1i; + + cmult(*(x0),*(W0),&x0r_2,&x0i_2); + cmult(*(x1),*(tw),&x1r_2,&x1i_2); + + dy0r = vqaddq_s32(x0r_2,x1r_2); + dy1r = vqsubq_s32(x0r_2,x1r_2); + dy0i = vqaddq_s32(x0i_2,x1i_2); + dy1i = vqsubq_s32(x0i_2,x1i_2); + + *y0 = cpack(dy0r,dy0i); + *y1 = cpack(dy1r,dy1i); +} + + +#endif + +#if defined(__x86_64__) || defined(__i386__) static inline void bfly2_tw1(__m128i *x0, __m128i *x1, __m128i *y0, __m128i *y1)__attribute__((always_inline)); static inline void bfly2_tw1(__m128i *x0, __m128i *x1, __m128i *y0, __m128i *y1) @@ -280,6 +452,20 @@ static inline void bfly2_tw1(__m128i *x0, __m128i *x1, __m128i *y0, __m128i *y1) } +#elif defined(__arm__) + +static inline void bfly2_tw1(int16x8_t *x0, int16x8_t *x1, int16x8_t *y0, int16x8_t *y1)__attribute__((always_inline)); + +static inline void bfly2_tw1(int16x8_t *x0, int16x8_t *x1, int16x8_t *y0, int16x8_t *y1) +{ + + *y0 = vqaddq_s16(*x0,*x1); + *y1 = vqsubq_s16(*x0,*x1); + +} +#endif + +#if defined(__x86_64__) || defined(__i386__) static inline void bfly2_16(__m128i *x0, __m128i *x1, __m128i *y0, __m128i *y1, __m128i *tw, __m128i *twb)__attribute__((always_inline)); static inline void bfly2_16(__m128i *x0, __m128i *x1, __m128i *y0, __m128i *y1, __m128i *tw, __m128i *twb) @@ -295,6 +481,25 @@ static inline void bfly2_16(__m128i *x0, __m128i *x1, __m128i *y0, __m128i *y1, } +#elif defined(__arm__) + +static inline void bfly2_16(int16x8_t *x0, int16x8_t *x1, int16x8_t *y0, int16x8_t *y1, int16x8_t *tw, int16x8_t *twb)__attribute__((always_inline)); + +static inline void bfly2_16(int16x8_t *x0, int16x8_t *x1, int16x8_t *y0, int16x8_t *y1, int16x8_t *tw, int16x8_t *twb) +{ + + register int16x8_t x1t; + + x1t = packed_cmult2(*(x1),*(tw),*(twb)); + + *y0 = vqaddq_s16(*x0,x1t); + *y1 = vqsubq_s16(*x0,x1t); + +} + +#endif + +#if defined(__x86_64__) || defined(__i386__) static inline void ibfly2(__m128i *x0, __m128i *x1,__m128i *y0, __m128i *y1,__m128i *tw)__attribute__((always_inline)); static inline void ibfly2(__m128i *x0, __m128i *x1,__m128i *y0, __m128i *y1,__m128i *tw) @@ -320,10 +525,34 @@ static inline void ibfly2(__m128i *x0, __m128i *x1,__m128i *y0, __m128i *y1,__m1 bfly2_tmp2 = _mm_unpackhi_epi32(dy1r,dy1i); *y1 = _mm_packs_epi32(bfly2_tmp1,bfly2_tmp2); } +#elif defined(__arm__) +static inline void ibfly2(int16x8_t *x0, int16x8_t *x1,int16x8_t *y0, int16x8_t *y1,int16x8_t *tw) +{ + + int32x4_t x0r_2,x0i_2,x1r_2,x1i_2,dy0r,dy1r,dy0i,dy1i; + + cmultc(*(x0),*(W0),&x0r_2,&x0i_2); + cmultc(*(x1),*(tw),&x1r_2,&x1i_2); + + dy0r = vqaddq_s32(x0r_2,x1r_2); + dy1r = vqsubq_s32(x0r_2,x1r_2); + dy0i = vqaddq_s32(x0i_2,x1i_2); + dy1i = vqsubq_s32(x0i_2,x1i_2); + + *y0 = cpack(dy0r,dy0i); + *y1 = cpack(dy1r,dy1i); + +} + +#endif + // This is the radix-3 butterfly (fft) + +#if defined(__x86_64__) || defined(__i386__) + static inline void bfly3(__m128i *x0,__m128i *x1,__m128i *x2, __m128i *y0,__m128i *y1,__m128i *y2, __m128i *tw1,__m128i *tw2) __attribute__((always_inline)); @@ -348,6 +577,35 @@ static inline void bfly3(__m128i *x0,__m128i *x1,__m128i *x2, *(y2) = _mm_adds_epi16(*(x0),*(y2)); } +#elif defined(__arm__) +static inline void bfly3(int16x8_t *x0,int16x8_t *x1,int16x8_t *x2, + int16x8_t *y0,int16x8_t *y1,int16x8_t *y2, + int16x8_t *tw1,int16x8_t *tw2) __attribute__((always_inline)); + +static inline void bfly3(int16x8_t *x0,int16x8_t *x1,int16x8_t *x2, + int16x8_t *y0,int16x8_t *y1,int16x8_t *y2, + int16x8_t *tw1,int16x8_t *tw2) +{ + + int32x4_t tmpre,tmpim; + int16x8_t x1_2,x2_2; + + packed_cmult(*(x1),*(tw1),&x1_2); + packed_cmult(*(x2),*(tw2),&x2_2); + *(y0) = vqaddq_s16(*(x0),vqaddq_s16(x1_2,x2_2)); + cmult(x1_2,*(W13),&tmpre,&tmpim); + cmac(x2_2,*(W23),&tmpre,&tmpim); + *(y1) = cpack(tmpre,tmpim); + *(y1) = vqaddq_s16(*(x0),*(y1)); + cmult(x1_2,*(W23),&tmpre,&tmpim); + cmac(x2_2,*(W13),&tmpre,&tmpim); + *(y2) = cpack(tmpre,tmpim); + *(y2) = vqaddq_s16(*(x0),*(y2)); +} + +#endif + +#if defined(__x86_64__) || defined(__i386__) static inline void ibfly3(__m128i *x0,__m128i *x1,__m128i *x2, __m128i *y0,__m128i *y1,__m128i *y2, __m128i *tw1,__m128i *tw2) __attribute__((always_inline)); @@ -372,6 +630,34 @@ static inline void ibfly3(__m128i *x0,__m128i *x1,__m128i *x2, *(y2) = _mm_adds_epi16(*(x0),*(y2)); } +#elif defined(__arm__) +static inline void ibfly3(int16x8_t *x0,int16x8_t *x1,int16x8_t *x2, + int16x8_t *y0,int16x8_t *y1,int16x8_t *y2, + int16x8_t *tw1,int16x8_t *tw2) __attribute__((always_inline)); + +static inline void ibfly3(int16x8_t *x0,int16x8_t *x1,int16x8_t *x2, + int16x8_t *y0,int16x8_t *y1,int16x8_t *y2, + int16x8_t *tw1,int16x8_t *tw2) +{ + + int32x4_t tmpre,tmpim; + int16x8_t x1_2,x2_2; + + packed_cmultc(*(x1),*(tw1),&x1_2); + packed_cmultc(*(x2),*(tw2),&x2_2); + *(y0) = vqaddq_s16(*(x0),vqaddq_s16(x1_2,x2_2)); + cmultc(x1_2,*(W13),&tmpre,&tmpim); + cmacc(x2_2,*(W23),&tmpre,&tmpim); + *(y1) = cpack(tmpre,tmpim); + *(y1) = vqaddq_s16(*(x0),*(y1)); + cmultc(x1_2,*(W23),&tmpre,&tmpim); + cmacc(x2_2,*(W13),&tmpre,&tmpim); + *(y2) = cpack(tmpre,tmpim); + *(y2) = vqaddq_s16(*(x0),*(y2)); +} +#endif + +#if defined(__x86_64__) || defined(__i386__) static inline void bfly3_tw1(__m128i *x0,__m128i *x1,__m128i *x2, __m128i *y0,__m128i *y1,__m128i *y2) __attribute__((always_inline)); @@ -391,8 +677,31 @@ static inline void bfly3_tw1(__m128i *x0,__m128i *x1,__m128i *x2, *(y2) = cpack(tmpre,tmpim); *(y2) = _mm_adds_epi16(*(x0),*(y2)); } +#elif defined(__arm__) +static inline void bfly3_tw1(int16x8_t *x0,int16x8_t *x1,int16x8_t *x2, + int16x8_t *y0,int16x8_t *y1,int16x8_t *y2) __attribute__((always_inline)); +static inline void bfly3_tw1(int16x8_t *x0,int16x8_t *x1,int16x8_t *x2, + int16x8_t *y0,int16x8_t *y1,int16x8_t *y2) +{ + int32x4_t tmpre,tmpim; + + *(y0) = vqaddq_s16(*(x0),vqaddq_s16(*(x1),*(x2))); + cmult(*(x1),*(W13),&tmpre,&tmpim); + cmac(*(x2),*(W23),&tmpre,&tmpim); + *(y1) = cpack(tmpre,tmpim); + *(y1) = vqaddq_s16(*(x0),*(y1)); + cmult(*(x1),*(W23),&tmpre,&tmpim); + cmac(*(x2),*(W13),&tmpre,&tmpim); + *(y2) = cpack(tmpre,tmpim); + *(y2) = vqaddq_s16(*(x0),*(y2)); + +} + +#endif + +#if defined(__x86_64__) || defined(__i386__) static inline void bfly4(__m128i *x0,__m128i *x1,__m128i *x2,__m128i *x3, __m128i *y0,__m128i *y1,__m128i *y2,__m128i *y3, __m128i *tw1,__m128i *tw2,__m128i *tw3)__attribute__((always_inline)); @@ -434,6 +743,51 @@ static inline void bfly4(__m128i *x0,__m128i *x1,__m128i *x2,__m128i *x3, *(y3) = _mm_add_epi16(*(x0),cpack(dy3r,dy3i)); } +#elif defined(__arm__) +static inline void bfly4(int16x8_t *x0,int16x8_t *x1,int16x8_t *x2,int16x8_t *x3, + int16x8_t *y0,int16x8_t *y1,int16x8_t *y2,int16x8_t *y3, + int16x8_t *tw1,int16x8_t *tw2,int16x8_t *tw3)__attribute__((always_inline)); + +static inline void bfly4(int16x8_t *x0,int16x8_t *x1,int16x8_t *x2,int16x8_t *x3, + int16x8_t *y0,int16x8_t *y1,int16x8_t *y2,int16x8_t *y3, + int16x8_t *tw1,int16x8_t *tw2,int16x8_t *tw3) +{ + + int32x4_t x1r_2,x1i_2,x2r_2,x2i_2,x3r_2,x3i_2,dy0r,dy0i,dy1r,dy1i,dy2r,dy2i,dy3r,dy3i; + + // cmult(*(x0),*(W0),&x0r_2,&x0i_2); + cmult(*(x1),*(tw1),&x1r_2,&x1i_2); + cmult(*(x2),*(tw2),&x2r_2,&x2i_2); + cmult(*(x3),*(tw3),&x3r_2,&x3i_2); + // dy0r = _mm_add_epi32(x0r_2,_mm_add_epi32(x1r_2,_mm_add_epi32(x2r_2,x3r_2))); + // dy0i = _mm_add_epi32(x0i_2,_mm_add_epi32(x1i_2,_mm_add_epi32(x2i_2,x3i_2))); + // *(y0) = cpack(dy0r,dy0i); + dy0r = vqaddq_s32(x1r_2,vqaddq_s32(x2r_2,x3r_2)); + dy0i = vqaddq_s32(x1i_2,vqaddq_s32(x2i_2,x3i_2)); + *(y0) = vqaddq_s16(*(x0),cpack(dy0r,dy0i)); + // dy1r = _mm_add_epi32(x0r_2,_mm_sub_epi32(x1i_2,_mm_add_epi32(x2r_2,x3i_2))); + // dy1i = _mm_sub_epi32(x0i_2,_mm_add_epi32(x1r_2,_mm_sub_epi32(x2i_2,x3r_2))); + // *(y1) = cpack(dy1r,dy1i); + dy1r = vqsubq_s32(x1i_2,vqaddq_s32(x2r_2,x3i_2)); + dy1i = vqsubq_s32(vqsubq_s32(x3r_2,x2i_2),x1r_2); + *(y1) = vqaddq_s16(*(x0),cpack(dy1r,dy1i)); + // dy2r = _mm_sub_epi32(x0r_2,_mm_sub_epi32(x1r_2,_mm_sub_epi32(x2r_2,x3r_2))); + // dy2i = _mm_sub_epi32(x0i_2,_mm_sub_epi32(x1i_2,_mm_sub_epi32(x2i_2,x3i_2))); + // *(y2) = cpack(dy2r,dy2i); + dy2r = vqsubq_s32(vqsubq_s32(x2r_2,x3r_2),x1r_2); + dy2i = vqsubq_s32(vqsubq_s32(x2i_2,x3i_2),x1i_2); + *(y2) = vqaddq_s16(*(x0),cpack(dy2r,dy2i)); + // dy3r = _mm_sub_epi32(x0r_2,_mm_add_epi32(x1i_2,_mm_sub_epi32(x2r_2,x3i_2))); + // dy3i = _mm_add_epi32(x0i_2,_mm_sub_epi32(x1r_2,_mm_add_epi32(x2i_2,x3r_2))); + // *(y3) = cpack(dy3r,dy3i); + dy3r = vqsubq_s32(vqsubq_s32(x3i_2,x2r_2),x1i_2); + dy3i = vqsubq_s32(x1r_2,vqaddq_s32(x2i_2,x3r_2)); + *(y3) = vqaddq_s16(*(x0),cpack(dy3r,dy3i)); +} + +#endif + +#if defined(__x86_64__) || defined(__i386__) static inline void ibfly4(__m128i *x0,__m128i *x1,__m128i *x2,__m128i *x3, __m128i *y0,__m128i *y1,__m128i *y2,__m128i *y3, __m128i *tw1,__m128i *tw2,__m128i *tw3)__attribute__((always_inline)); @@ -445,24 +799,11 @@ static inline void ibfly4(__m128i *x0,__m128i *x1,__m128i *x2,__m128i *x3, __m128i x1r_2,x1i_2,x2r_2,x2i_2,x3r_2,x3i_2,dy0r,dy0i,dy1r,dy1i,dy2r,dy2i,dy3r,dy3i; - // cmultc(*(x0),*(W0),&x0r_2,&x0i_2); + cmultc(*(x1),*(tw1),&x1r_2,&x1i_2); cmultc(*(x2),*(tw2),&x2r_2,&x2i_2); cmultc(*(x3),*(tw3),&x3r_2,&x3i_2); - /* - dy0r = _mm_add_epi32(x0r_2,_mm_add_epi32(x1r_2,_mm_add_epi32(x2r_2,x3r_2))); - dy0i = _mm_add_epi32(x0i_2,_mm_add_epi32(x1i_2,_mm_add_epi32(x2i_2,x3i_2))); - *(y0) = cpack(dy0r,dy0i); - dy3r = _mm_add_epi32(x0r_2,_mm_sub_epi32(x1i_2,_mm_add_epi32(x2r_2,x3i_2))); - dy3i = _mm_sub_epi32(x0i_2,_mm_add_epi32(x1r_2,_mm_sub_epi32(x2i_2,x3r_2))); - *(y3) = cpack(dy3r,dy3i); - dy2r = _mm_sub_epi32(x0r_2,_mm_sub_epi32(x1r_2,_mm_sub_epi32(x2r_2,x3r_2))); - dy2i = _mm_sub_epi32(x0i_2,_mm_sub_epi32(x1i_2,_mm_sub_epi32(x2i_2,x3i_2))); - *(y2) = cpack(dy2r,dy2i); - dy1r = _mm_sub_epi32(x0r_2,_mm_add_epi32(x1i_2,_mm_sub_epi32(x2r_2,x3i_2))); - dy1i = _mm_add_epi32(x0i_2,_mm_sub_epi32(x1r_2,_mm_add_epi32(x2i_2,x3r_2))); - *(y1) = cpack(dy1r,dy1i); - */ + dy0r = _mm_add_epi32(x1r_2,_mm_add_epi32(x2r_2,x3r_2)); dy0i = _mm_add_epi32(x1i_2,_mm_add_epi32(x2i_2,x3i_2)); *(y0) = _mm_add_epi16(*(x0),cpack(dy0r,dy0i)); @@ -477,6 +818,41 @@ static inline void ibfly4(__m128i *x0,__m128i *x1,__m128i *x2,__m128i *x3, *(y1) = _mm_add_epi16(*(x0),cpack(dy1r,dy1i)); } +#elif defined(__arm__) + +static inline void ibfly4(int16x8_t *x0,int16x8_t *x1,int16x8_t *x2,int16x8_t *x3, + int16x8_t *y0,int16x8_t *y1,int16x8_t *y2,int16x8_t *y3, + int16x8_t *tw1,int16x8_t *tw2,int16x8_t *tw3)__attribute__((always_inline)); + +static inline void ibfly4(int16x8_t *x0,int16x8_t *x1,int16x8_t *x2,int16x8_t *x3, + int16x8_t *y0,int16x8_t *y1,int16x8_t *y2,int16x8_t *y3, + int16x8_t *tw1,int16x8_t *tw2,int16x8_t *tw3) +{ + + int32x4_t x1r_2,x1i_2,x2r_2,x2i_2,x3r_2,x3i_2,dy0r,dy0i,dy1r,dy1i,dy2r,dy2i,dy3r,dy3i; + + + cmultc(*(x1),*(tw1),&x1r_2,&x1i_2); + cmultc(*(x2),*(tw2),&x2r_2,&x2i_2); + cmultc(*(x3),*(tw3),&x3r_2,&x3i_2); + + dy0r = vqaddq_s32(x1r_2,vqaddq_s32(x2r_2,x3r_2)); + dy0i = vqaddq_s32(x1i_2,vqaddq_s32(x2i_2,x3i_2)); + *(y0) = vqaddq_s16(*(x0),cpack(dy0r,dy0i)); + dy3r = vqsubq_s32(x1i_2,vqaddq_s32(x2r_2,x3i_2)); + dy3i = vqsubq_s32(vqsubq_s32(x3r_2,x2i_2),x1r_2); + *(y3) = vqaddq_s16(*(x0),cpack(dy3r,dy3i)); + dy2r = vqsubq_s32(vqsubq_s32(x2r_2,x3r_2),x1r_2); + dy2i = vqsubq_s32(vqsubq_s32(x2i_2,x3i_2),x1i_2); + *(y2) = vqaddq_s16(*(x0),cpack(dy2r,dy2i)); + dy1r = vqsubq_s32(vqsubq_s32(x3i_2,x2r_2),x1i_2); + dy1i = vqsubq_s32(x1r_2,vqaddq_s32(x2i_2,x3r_2)); + *(y1) = vqaddq_s16(*(x0),cpack(dy1r,dy1i)); +} + +#endif + +#if defined(__x86_64__) || defined(__i386__) static inline void bfly4_tw1(__m128i *x0,__m128i *x1,__m128i *x2,__m128i *x3, __m128i *y0,__m128i *y1,__m128i *y2,__m128i *y3)__attribute__((always_inline)); @@ -484,24 +860,57 @@ static inline void bfly4_tw1(__m128i *x0,__m128i *x1,__m128i *x2,__m128i *x3, static inline void bfly4_tw1(__m128i *x0,__m128i *x1,__m128i *x2,__m128i *x3, __m128i *y0,__m128i *y1,__m128i *y2,__m128i *y3) { + register __m128i x1_flip,x3_flip,x02t,x13t; + register __m128i complex_shuffle = _mm_set_epi8(13,12,15,14,9,8,11,10,5,4,7,6,1,0,3,2); - register __m128i x1_flip,x3_flip; + x02t = _mm_adds_epi16(*(x0),*(x2)); + x13t = _mm_adds_epi16(*(x1),*(x3)); + *(y0) = _mm_adds_epi16(x02t,x13t); + *(y2) = _mm_subs_epi16(x02t,x13t); + x1_flip = _mm_sign_epi16(*(x1),*(__m128i*)conjugatedft); + x1_flip = _mm_shuffle_epi8(x1_flip,complex_shuffle); + x3_flip = _mm_sign_epi16(*(x3),*(__m128i*)conjugatedft); + x3_flip = _mm_shuffle_epi8(x3_flip,complex_shuffle); + x02t = _mm_subs_epi16(*(x0),*(x2)); + x13t = _mm_subs_epi16(x1_flip,x3_flip); + *(y1) = _mm_adds_epi16(x02t,x13t); // x0 + x1f - x2 - x3f + *(y3) = _mm_subs_epi16(x02t,x13t); // x0 - x1f - x2 + x3f + /* *(y0) = _mm_adds_epi16(*(x0),_mm_adds_epi16(*(x1),_mm_adds_epi16(*(x2),*(x3)))); - x1_flip = _mm_sign_epi16(*(x1),*(__m128i*)conjugatedft); - // x1_flip = _mm_shufflelo_epi16(x1_flip,_MM_SHUFFLE(2,3,0,1)); - // x1_flip = _mm_shufflehi_epi16(x1_flip,_MM_SHUFFLE(2,3,0,1)); x1_flip = _mm_shuffle_epi8(x1_flip,_mm_set_epi8(13,12,15,14,9,8,11,10,5,4,7,6,1,0,3,2)); x3_flip = _mm_sign_epi16(*(x3),*(__m128i*)conjugatedft); - // x3_flip = _mm_shufflelo_epi16(x3_flip,_MM_SHUFFLE(2,3,0,1)); - // x3_flip = _mm_shufflehi_epi16(x3_flip,_MM_SHUFFLE(2,3,0,1)); x3_flip = _mm_shuffle_epi8(x3_flip,_mm_set_epi8(13,12,15,14,9,8,11,10,5,4,7,6,1,0,3,2)); *(y1) = _mm_adds_epi16(*(x0),_mm_subs_epi16(x1_flip,_mm_adds_epi16(*(x2),x3_flip))); *(y2) = _mm_subs_epi16(*(x0),_mm_subs_epi16(*(x1),_mm_subs_epi16(*(x2),*(x3)))); *(y3) = _mm_subs_epi16(*(x0),_mm_adds_epi16(x1_flip,_mm_subs_epi16(*(x2),x3_flip))); + */ } +#elif defined(__arm__) + +static inline void bfly4_tw1(int16x8_t *x0,int16x8_t *x1,int16x8_t *x2,int16x8_t *x3, + int16x8_t *y0,int16x8_t *y1,int16x8_t *y2,int16x8_t *y3)__attribute__((always_inline)); + +static inline void bfly4_tw1(int16x8_t *x0,int16x8_t *x1,int16x8_t *x2,int16x8_t *x3, + int16x8_t *y0,int16x8_t *y1,int16x8_t *y2,int16x8_t *y3) +{ + + register int16x8_t x1_flip,x3_flip; + + *(y0) = vqaddq_s16(*(x0),vqaddq_s16(*(x1),vqaddq_s16(*(x2),*(x3)))); + x1_flip = vrev32q_s16(vmulq_s16(*(x1),*(int16x8_t*)conjugatedft)); + x3_flip = vrev32q_s16(vmulq_s16(*(x3),*(int16x8_t*)conjugatedft)); + *(y1) = vqaddq_s16(*(x0),vqsubq_s16(x1_flip,vqaddq_s16(*(x2),x3_flip))); + *(y2) = vqsubq_s16(*(x0),vqsubq_s16(*(x1),vqsubq_s16(*(x2),*(x3)))); + *(y3) = vqsubq_s16(*(x0),vqaddq_s16(x1_flip,vqsubq_s16(*(x2),x3_flip))); +} + +#endif + +#if defined(__x86_64__) || defined(__i386__) + static inline void ibfly4_tw1(__m128i *x0,__m128i *x1,__m128i *x2,__m128i *x3, __m128i *y0,__m128i *y1,__m128i *y2,__m128i *y3)__attribute__((always_inline)); @@ -526,6 +935,28 @@ static inline void ibfly4_tw1(__m128i *x0,__m128i *x1,__m128i *x2,__m128i *x3, *(y3) = _mm_adds_epi16(*(x0),_mm_subs_epi16(x1_flip,_mm_adds_epi16(*(x2),x3_flip))); } + +#elif defined(__arm__) +static inline void ibfly4_tw1(int16x8_t *x0,int16x8_t *x1,int16x8_t *x2,int16x8_t *x3, + int16x8_t *y0,int16x8_t *y1,int16x8_t *y2,int16x8_t *y3)__attribute__((always_inline)); + +static inline void ibfly4_tw1(int16x8_t *x0,int16x8_t *x1,int16x8_t *x2,int16x8_t *x3, + int16x8_t *y0,int16x8_t *y1,int16x8_t *y2,int16x8_t *y3) +{ + + register int16x8_t x1_flip,x3_flip; + + *(y0) = vqaddq_s16(*(x0),vqaddq_s16(*(x1),vqaddq_s16(*(x2),*(x3)))); + x1_flip = vrev32q_s16(vmulq_s16(*(x1),*(int16x8_t*)conjugatedft)); + x3_flip = vrev32q_s16(vmulq_s16(*(x3),*(int16x8_t*)conjugatedft)); + *(y1) = vqsubq_s16(*(x0),vqaddq_s16(x1_flip,vqsubq_s16(*(x2),x3_flip))); + *(y2) = vqsubq_s16(*(x0),vqsubq_s16(*(x1),vqsubq_s16(*(x2),*(x3)))); + *(y3) = vqaddq_s16(*(x0),vqsubq_s16(x1_flip,vqaddq_s16(*(x2),x3_flip))); +} + +#endif + +#if defined(__x86_64__) || defined(__i386__) static inline void bfly4_16(__m128i *x0,__m128i *x1,__m128i *x2,__m128i *x3, __m128i *y0,__m128i *y1,__m128i *y2,__m128i *y3, __m128i *tw1,__m128i *tw2,__m128i *tw3, @@ -574,6 +1005,42 @@ static inline void bfly4_16(__m128i *x0,__m128i *x1,__m128i *x2,__m128i *x3, } +#elif defined(__arm__) + +static inline void bfly4_16(int16x8_t *x0,int16x8_t *x1,int16x8_t *x2,int16x8_t *x3, + int16x8_t *y0,int16x8_t *y1,int16x8_t *y2,int16x8_t *y3, + int16x8_t *tw1,int16x8_t *tw2,int16x8_t *tw3, + int16x8_t *tw1b,int16x8_t *tw2b,int16x8_t *tw3b)__attribute__((always_inline)); + +static inline void bfly4_16(int16x8_t *x0,int16x8_t *x1,int16x8_t *x2,int16x8_t *x3, + int16x8_t *y0,int16x8_t *y1,int16x8_t *y2,int16x8_t *y3, + int16x8_t *tw1,int16x8_t *tw2,int16x8_t *tw3, + int16x8_t *tw1b,int16x8_t *tw2b,int16x8_t *tw3b) +{ + + register int16x8_t x1t,x2t,x3t,x02t,x13t; + register int16x8_t x1_flip,x3_flip; + + x1t = packed_cmult2(*(x1),*(tw1),*(tw1b)); + x2t = packed_cmult2(*(x2),*(tw2),*(tw2b)); + x3t = packed_cmult2(*(x3),*(tw3),*(tw3b)); + + + + x02t = vqaddq_s16(*(x0),x2t); + x13t = vqaddq_s16(x1t,x3t); + *(y0) = vqaddq_s16(x02t,x13t); + *(y2) = vqsubq_s16(x02t,x13t); + x1_flip = vrev32q_s16(vmulq_s16(x1t,*(int16x8_t*)conjugatedft)); + x3_flip = vrev32q_s16(vmulq_s16(x3t,*(int16x8_t*)conjugatedft)); + x02t = vqsubq_s16(*(x0),x2t); + x13t = vqsubq_s16(x1_flip,x3_flip); + *(y1) = vqaddq_s16(x02t,x13t); // x0 + x1f - x2 - x3f + *(y3) = vqsubq_s16(x02t,x13t); // x0 - x1f - x2 + x3f +} +#endif + +#if defined(__x86_64__) || defined(__i386__) static inline void ibfly4_16(__m128i *x0,__m128i *x1,__m128i *x2,__m128i *x3, __m128i *y0,__m128i *y1,__m128i *y2,__m128i *y3, __m128i *tw1,__m128i *tw2,__m128i *tw3, @@ -622,6 +1089,40 @@ static inline void ibfly4_16(__m128i *x0,__m128i *x1,__m128i *x2,__m128i *x3, } +#elif defined(__arm__) +static inline void ibfly4_16(int16x8_t *x0,int16x8_t *x1,int16x8_t *x2,int16x8_t *x3, + int16x8_t *y0,int16x8_t *y1,int16x8_t *y2,int16x8_t *y3, + int16x8_t *tw1,int16x8_t *tw2,int16x8_t *tw3, + int16x8_t *tw1b,int16x8_t *tw2b,int16x8_t *tw3b)__attribute__((always_inline)); + +static inline void ibfly4_16(int16x8_t *x0,int16x8_t *x1,int16x8_t *x2,int16x8_t *x3, + int16x8_t *y0,int16x8_t *y1,int16x8_t *y2,int16x8_t *y3, + int16x8_t *tw1,int16x8_t *tw2,int16x8_t *tw3, + int16x8_t *tw1b,int16x8_t *tw2b,int16x8_t *tw3b) +{ + + register int16x8_t x1t,x2t,x3t,x02t,x13t; + register int16x8_t x1_flip,x3_flip; + + x1t = packed_cmult2(*(x1),*(tw1),*(tw1b)); + x2t = packed_cmult2(*(x2),*(tw2),*(tw2b)); + x3t = packed_cmult2(*(x3),*(tw3),*(tw3b)); + + x02t = vqaddq_s16(*(x0),x2t); + x13t = vqaddq_s16(x1t,x3t); + *(y0) = vqaddq_s16(x02t,x13t); + *(y2) = vqsubq_s16(x02t,x13t); + x1_flip = vrev32q_s16(vmulq_s16(x1t,*(int16x8_t*)conjugatedft)); + x3_flip = vrev32q_s16(vmulq_s16(x3t,*(int16x8_t*)conjugatedft)); + x02t = vqsubq_s16(*(x0),x2t); + x13t = vqsubq_s16(x1_flip,x3_flip); + *(y3) = vqaddq_s16(x02t,x13t); // x0 - x1f - x2 + x3f + *(y1) = vqsubq_s16(x02t,x13t); // x0 + x1f - x2 - x3f +} + +#endif + +#if defined(__x86_64__) || defined(__i386__) static inline void bfly5(__m128i *x0, __m128i *x1, __m128i *x2, __m128i *x3,__m128i *x4, __m128i *y0, __m128i *y1, __m128i *y2, __m128i *y3,__m128i *y4, __m128i *tw1,__m128i *tw2,__m128i *tw3,__m128i *tw4)__attribute__((always_inline)); @@ -672,8 +1173,62 @@ static inline void bfly5(__m128i *x0, __m128i *x1, __m128i *x2, __m128i *x3,__m1 } +#elif defined(__arm__) +static inline void bfly5(int16x8_t *x0, int16x8_t *x1, int16x8_t *x2, int16x8_t *x3,int16x8_t *x4, + int16x8_t *y0, int16x8_t *y1, int16x8_t *y2, int16x8_t *y3,int16x8_t *y4, + int16x8_t *tw1,int16x8_t *tw2,int16x8_t *tw3,int16x8_t *tw4)__attribute__((always_inline)); + +static inline void bfly5(int16x8_t *x0, int16x8_t *x1, int16x8_t *x2, int16x8_t *x3,int16x8_t *x4, + int16x8_t *y0, int16x8_t *y1, int16x8_t *y2, int16x8_t *y3,int16x8_t *y4, + int16x8_t *tw1,int16x8_t *tw2,int16x8_t *tw3,int16x8_t *tw4) +{ + + int16x8_t x1_2,x2_2,x3_2,x4_2; + int32x4_t tmpre,tmpim; + + packed_cmult(*(x1),*(tw1),&x1_2); + packed_cmult(*(x2),*(tw2),&x2_2); + packed_cmult(*(x3),*(tw3),&x3_2); + packed_cmult(*(x4),*(tw4),&x4_2); + + *(y0) = vqaddq_s16(*(x0),vqaddq_s16(x1_2,vqaddq_s16(x2_2,vqaddq_s16(x3_2,x4_2)))); + cmult(x1_2,*(W15),&tmpre,&tmpim); + cmac(x2_2,*(W25),&tmpre,&tmpim); + cmac(x3_2,*(W35),&tmpre,&tmpim); + cmac(x4_2,*(W45),&tmpre,&tmpim); + *(y1) = cpack(tmpre,tmpim); + *(y1) = vqaddq_s16(*(x0),*(y1)); + + cmult(x1_2,*(W25),&tmpre,&tmpim); + cmac(x2_2,*(W45),&tmpre,&tmpim); + cmac(x3_2,*(W15),&tmpre,&tmpim); + cmac(x4_2,*(W35),&tmpre,&tmpim); + *(y2) = cpack(tmpre,tmpim); + *(y2) = vqaddq_s16(*(x0),*(y2)); + + cmult(x1_2,*(W35),&tmpre,&tmpim); + cmac(x2_2,*(W15),&tmpre,&tmpim); + cmac(x3_2,*(W45),&tmpre,&tmpim); + cmac(x4_2,*(W25),&tmpre,&tmpim); + *(y3) = cpack(tmpre,tmpim); + *(y3) = vqaddq_s16(*(x0),*(y3)); + + cmult(x1_2,*(W45),&tmpre,&tmpim); + cmac(x2_2,*(W35),&tmpre,&tmpim); + cmac(x3_2,*(W25),&tmpre,&tmpim); + cmac(x4_2,*(W15),&tmpre,&tmpim); + *(y4) = cpack(tmpre,tmpim); + *(y4) = vqaddq_s16(*(x0),*(y4)); + + +} + + +#endif + +#if defined(__x86_64__) || defined(__i386__) static inline void bfly5_tw1(__m128i *x0, __m128i *x1, __m128i *x2, __m128i *x3,__m128i *x4, __m128i *y0, __m128i *y1, __m128i *y2, __m128i *y3,__m128i *y4) __attribute__((always_inline)); @@ -710,9 +1265,48 @@ static inline void bfly5_tw1(__m128i *x0, __m128i *x1, __m128i *x2, __m128i *x3, *(y4) = _mm_adds_epi16(*(x0),*(y4)); } +#elif defined(__arm__) +static inline void bfly5_tw1(int16x8_t *x0, int16x8_t *x1, int16x8_t *x2, int16x8_t *x3,int16x8_t *x4, + int16x8_t *y0, int16x8_t *y1, int16x8_t *y2, int16x8_t *y3,int16x8_t *y4) __attribute__((always_inline)); + +static inline void bfly5_tw1(int16x8_t *x0, int16x8_t *x1, int16x8_t *x2, int16x8_t *x3,int16x8_t *x4, + int16x8_t *y0, int16x8_t *y1, int16x8_t *y2, int16x8_t *y3,int16x8_t *y4) +{ + + int32x4_t tmpre,tmpim; + + *(y0) = vqaddq_s16(*(x0),vqaddq_s16(*(x1),vqaddq_s16(*(x2),vqaddq_s16(*(x3),*(x4))))); + cmult(*(x1),*(W15),&tmpre,&tmpim); + cmac(*(x2),*(W25),&tmpre,&tmpim); + cmac(*(x3),*(W35),&tmpre,&tmpim); + cmac(*(x4),*(W45),&tmpre,&tmpim); + *(y1) = cpack(tmpre,tmpim); + *(y1) = vqaddq_s16(*(x0),*(y1)); + cmult(*(x1),*(W25),&tmpre,&tmpim); + cmac(*(x2),*(W45),&tmpre,&tmpim); + cmac(*(x3),*(W15),&tmpre,&tmpim); + cmac(*(x4),*(W35),&tmpre,&tmpim); + *(y2) = cpack(tmpre,tmpim); + *(y2) = vqaddq_s16(*(x0),*(y2)); + cmult(*(x1),*(W35),&tmpre,&tmpim); + cmac(*(x2),*(W15),&tmpre,&tmpim); + cmac(*(x3),*(W45),&tmpre,&tmpim); + cmac(*(x4),*(W25),&tmpre,&tmpim); + *(y3) = cpack(tmpre,tmpim); + *(y3) = vqaddq_s16(*(x0),*(y3)); + cmult(*(x1),*(W45),&tmpre,&tmpim); + cmac(*(x2),*(W35),&tmpre,&tmpim); + cmac(*(x3),*(W25),&tmpre,&tmpim); + cmac(*(x4),*(W15),&tmpre,&tmpim); + *(y4) = cpack(tmpre,tmpim); + *(y4) = vqaddq_s16(*(x0),*(y4)); +} + +#endif // performs 4x4 transpose of input x (complex interleaved) using 128bit SIMD intrinsics // i.e. x = [x0r x0i x1r x1i ... x15r x15i], y = [x0r x0i x4r x4i x8r x8i x12r x12i x1r x1i x5r x5i x9r x9i x13r x13i x2r x2i ... x15r x15i] +#if defined(__x86_64__) || defined(__i386__) static inline void transpose16(__m128i *x,__m128i *y) __attribute__((always_inline)); static inline void transpose16(__m128i *x,__m128i *y) { @@ -728,7 +1322,24 @@ static inline void transpose16(__m128i *x,__m128i *y) y[3] = _mm_unpackhi_epi64(ytmp1,ytmp3); } +#elif defined(__arm__) +static inline void transpose16(int16x8_t *x,int16x8_t *y) __attribute__((always_inline)); +static inline void transpose16(int16x8_t *x,int16x8_t *y) +{ + register uint32x4x2_t ytmp0,ytmp1; + + ytmp0 = vtrnq_u32((uint32x4_t)(x[0]),(uint32x4_t)(x[1])); + ytmp1 = vtrnq_u32((uint32x4_t)(x[2]),(uint32x4_t)(x[3])); + + y[0] = vcombine_s16(vget_low_s16((int16x8_t)ytmp0.val[0]),vget_low_s16((int16x8_t)ytmp1.val[0])); + y[1] = vcombine_s16(vget_high_s16((int16x8_t)ytmp0.val[0]),vget_high_s16((int16x8_t)ytmp1.val[0])); + y[2] = vcombine_s16(vget_low_s16((int16x8_t)ytmp0.val[1]),vget_low_s16((int16x8_t)ytmp1.val[1])); + y[3] = vcombine_s16(vget_high_s16((int16x8_t)ytmp0.val[1]),vget_high_s16((int16x8_t)ytmp1.val[1])); +} + +# endif // same as above but output is offset by off +#if defined(__x86_64__) || defined(__i386__) static inline void transpose16_ooff(__m128i *x,__m128i *y,int off) __attribute__((always_inline)); static inline void transpose16_ooff(__m128i *x,__m128i *y,int off) @@ -749,12 +1360,47 @@ static inline void transpose16_ooff(__m128i *x,__m128i *y,int off) *y2 = _mm_unpackhi_epi64(ytmp1,ytmp3); } +#elif defined(__arm__) +static inline void transpose16_ooff(int16x8_t *x,int16x8_t *y,int off) __attribute__((always_inline)); + +static inline void transpose16_ooff(int16x8_t *x,int16x8_t *y,int off) +{ + int16x8_t *y2=y; + register uint32x4x2_t ytmp0,ytmp1; + + ytmp0 = vtrnq_u32((uint32x4_t)(x[0]),(uint32x4_t)(x[1])); + ytmp1 = vtrnq_u32((uint32x4_t)(x[2]),(uint32x4_t)(x[3])); + + *y2 = (int16x8_t)vcombine_s16(vget_low_s16((int16x8_t)ytmp0.val[0]),vget_low_s16((int16x8_t)ytmp1.val[0])); y2+=off; + *y2 = (int16x8_t)vcombine_s16(vget_low_s16((int16x8_t)ytmp0.val[1]),vget_low_s16((int16x8_t)ytmp1.val[1])); y2+=off; + *y2 = (int16x8_t)vcombine_s16(vget_high_s16((int16x8_t)ytmp0.val[0]),vget_high_s16((int16x8_t)ytmp1.val[0])); y2+=off; + *y2 = (int16x8_t)vcombine_s16(vget_high_s16((int16x8_t)ytmp0.val[1]),vget_high_s16((int16x8_t)ytmp1.val[1])); + + +} + +#endif + +#if defined(__x86_64__) || defined(__i386__) + static inline void transpose4_ooff(__m64 *x,__m64 *y,int off)__attribute__((always_inline)); static inline void transpose4_ooff(__m64 *x,__m64 *y,int off) { y[0] = _mm_unpacklo_pi32(x[0],x[1]); y[off] = _mm_unpackhi_pi32(x[0],x[1]); } +#elif (__arm__) + +static inline void transpose4_ooff(int16x4_t *x,int16x4_t *y,int off)__attribute__((always_inline)); +static inline void transpose4_ooff(int16x4_t *x,int16x4_t *y,int off) +{ + uint32x2x2_t ytmp = vtrn_u32((uint32x2_t)x[0],(uint32x2_t)x[1]); + + y[0] = (int16x4_t)ytmp.val[0]; + y[off] = (int16x4_t)ytmp.val[1]; +} + +#endif // 16-point optimized DFT kernel @@ -778,14 +1424,22 @@ int16_t tw16c[24] __attribute__((aligned(16))) = { 0,32767,12540,30272,23170,231 0,32767,30273,12539,23170,-23170,-12539,-30273 }; + + static inline void dft16(int16_t *x,int16_t *y) __attribute__((always_inline)); static inline void dft16(int16_t *x,int16_t *y) { +#if defined(__x86_64__) || defined(__i386__) + __m128i *tw16a_128=(__m128i *)tw16a,*tw16b_128=(__m128i *)tw16b,*x128=(__m128i *)x,*y128=(__m128i *)y; - /* + + +#ifndef AVX2 + /* This is the original version before unrolling + bfly4_tw1(x128,x128+1,x128+2,x128+3, y128,y128+1,y128+2,y128+3); @@ -798,6 +1452,7 @@ static inline void dft16(int16_t *x,int16_t *y) register __m128i x1_flip,x3_flip,x02t,x13t; register __m128i ytmp0,ytmp1,ytmp2,ytmp3,xtmp0,xtmp1,xtmp2,xtmp3; + register __m128i complex_shuffle = _mm_set_epi8(13,12,15,14,9,8,11,10,5,4,7,6,1,0,3,2); // First stage : 4 Radix-4 butterflies without input twiddles @@ -805,27 +1460,14 @@ static inline void dft16(int16_t *x,int16_t *y) x13t = _mm_adds_epi16(x128[1],x128[3]); xtmp0 = _mm_adds_epi16(x02t,x13t); xtmp2 = _mm_subs_epi16(x02t,x13t); - - /* - xtmp0 = _mm_adds_epi16(x128[0],_mm_adds_epi16(x128[1],_mm_adds_epi16(x128[2],x128[3]))); - xtmp2 = _mm_subs_epi16(x128[0],_mm_subs_epi16(x128[1],_mm_subs_epi16(x128[2],x128[3]))); - */ x1_flip = _mm_sign_epi16(x128[1],*(__m128i*)conjugatedft); - // x1_flip = _mm_shufflelo_epi16(x1_flip,_MM_SHUFFLE(2,3,0,1)); - // x1_flip = _mm_shufflehi_epi16(x1_flip,_MM_SHUFFLE(2,3,0,1)); - x1_flip = _mm_shuffle_epi8(x1_flip,_mm_set_epi8(13,12,15,14,9,8,11,10,5,4,7,6,1,0,3,2)); + x1_flip = _mm_shuffle_epi8(x1_flip,complex_shuffle); x3_flip = _mm_sign_epi16(x128[3],*(__m128i*)conjugatedft); - // x3_flip = _mm_shufflelo_epi16(x3_flip,_MM_SHUFFLE(2,3,0,1)); - // x3_flip = _mm_shufflehi_epi16(x3_flip,_MM_SHUFFLE(2,3,0,1)); - x3_flip = _mm_shuffle_epi8(x3_flip,_mm_set_epi8(13,12,15,14,9,8,11,10,5,4,7,6,1,0,3,2)); + x3_flip = _mm_shuffle_epi8(x3_flip,complex_shuffle); x02t = _mm_subs_epi16(x128[0],x128[2]); x13t = _mm_subs_epi16(x1_flip,x3_flip); xtmp1 = _mm_adds_epi16(x02t,x13t); // x0 + x1f - x2 - x3f xtmp3 = _mm_subs_epi16(x02t,x13t); // x0 - x1f - x2 + x3f - /* - xtmp1 = _mm_adds_epi16(x128[0],_mm_subs_epi16(x1_flip,_mm_adds_epi16(x128[2],x3_flip))); - xtmp3 = _mm_subs_epi16(x128[0],_mm_adds_epi16(x1_flip,_mm_subs_epi16(x128[2],x3_flip))); - */ ytmp0 = _mm_unpacklo_epi32(xtmp0,xtmp1); ytmp1 = _mm_unpackhi_epi32(xtmp0,xtmp1); @@ -845,28 +1487,109 @@ static inline void dft16(int16_t *x,int16_t *y) x13t = _mm_adds_epi16(xtmp1,xtmp3); y128[0] = _mm_adds_epi16(x02t,x13t); y128[2] = _mm_subs_epi16(x02t,x13t); - - /* - y128[0] = _mm_adds_epi16(xtmp0,_mm_adds_epi16(xtmp1,_mm_adds_epi16(xtmp2,xtmp3))); - y128[2] = _mm_subs_epi16(xtmp0,_mm_subs_epi16(xtmp1,_mm_subs_epi16(xtmp2,xtmp3))); - */ - x1_flip = _mm_sign_epi16(xtmp1,*(__m128i*)conjugatedft); - // x1_flip = _mm_shufflelo_epi16(x1_flip,_MM_SHUFFLE(2,3,0,1)); - // x1_flip = _mm_shufflehi_epi16(x1_flip,_MM_SHUFFLE(2,3,0,1)); x1_flip = _mm_shuffle_epi8(x1_flip,_mm_set_epi8(13,12,15,14,9,8,11,10,5,4,7,6,1,0,3,2)); x3_flip = _mm_sign_epi16(xtmp3,*(__m128i*)conjugatedft); - // x3_flip = _mm_shufflelo_epi16(x3_flip,_MM_SHUFFLE(2,3,0,1)); - // x3_flip = _mm_shufflehi_epi16(x3_flip,_MM_SHUFFLE(2,3,0,1)); x3_flip = _mm_shuffle_epi8(x3_flip,_mm_set_epi8(13,12,15,14,9,8,11,10,5,4,7,6,1,0,3,2)); x02t = _mm_subs_epi16(xtmp0,xtmp2); x13t = _mm_subs_epi16(x1_flip,x3_flip); y128[1] = _mm_adds_epi16(x02t,x13t); // x0 + x1f - x2 - x3f y128[3] = _mm_subs_epi16(x02t,x13t); // x0 - x1f - x2 + x3f - /* - y128[1] = _mm_adds_epi16(xtmp0,_mm_subs_epi16(x1_flip,_mm_adds_epi16(xtmp2,x3_flip))); - y128[3] = _mm_subs_epi16(xtmp0,_mm_adds_epi16(x1_flip,_mm_subs_epi16(xtmp2,x3_flip))); + +#else + + // x02t = _mm_adds_epi16(x128[0],x128[2]); + // x13t = _mm_adds_epi16(x128[1],x128[3]); + + xt = _mm256_adds_epi16(x256[0],x256[1]); + + xtmp0 = _mm_adds_epi16(x02t,x13t); + xtmp2 = _mm_subs_epi16(x02t,x13t); + + x13_flip + x1_flip = _mm_sign_epi16(x128[1],*(__m128i*)conjugatedft); + x1_flip = _mm_shuffle_epi8(x1_flip,_mm_set_epi8(13,12,15,14,9,8,11,10,5,4,7,6,1,0,3,2)); + x3_flip = _mm_sign_epi16(x128[3],*(__m128i*)conjugatedft); + x3_flip = _mm_shuffle_epi8(x3_flip,_mm_set_epi8(13,12,15,14,9,8,11,10,5,4,7,6,1,0,3,2)); + + // x02t = _mm_subs_epi16(x128[0],x128[2]); + // x13t = _mm_subs_epi16(x1_flip,x3_flip); + xt = _mm256_subs_epi16(x256flip0,x256flip1); + + xtmp1 = _mm_adds_epi16(x02t,x13t); // x0 + x1f - x2 - x3f + xtmp3 = _mm_subs_epi16(x02t,x13t); // x0 - x1f - x2 + x3f + + +#endif + +#elif defined(__arm__) + + int16x8_t *tw16a_128=(int16x8_t *)tw16a,*tw16b_128=(int16x8_t *)tw16b,*x128=(int16x8_t *)x,*y128=(int16x8_t *)y; + + /* This is the original version before unrolling + + bfly4_tw1(x128,x128+1,x128+2,x128+3, + y128,y128+1,y128+2,y128+3); + + transpose16(y128,ytmp); + + bfly4_16(ytmp,ytmp+1,ytmp+2,ytmp+3, + y128,y128+1,y128+2,y128+3, + tw16_128,tw16_128+1,tw16_128+2); */ + + register int16x8_t x1_flip,x3_flip,x02t,x13t; + register int16x8_t xtmp0,xtmp1,xtmp2,xtmp3; + register uint32x4x2_t ytmp0,ytmp1; + register int16x8_t ytmp0b,ytmp1b,ytmp2b,ytmp3b; + + // First stage : 4 Radix-4 butterflies without input twiddles + + x02t = vqaddq_s16(x128[0],x128[2]); + x13t = vqaddq_s16(x128[1],x128[3]); + xtmp0 = vqaddq_s16(x02t,x13t); + xtmp2 = vqsubq_s16(x02t,x13t); + x1_flip = vrev32q_s16(vmulq_s16(x128[1],*(int16x8_t*)conjugatedft)); + x3_flip = vrev32q_s16(vmulq_s16(x128[3],*(int16x8_t*)conjugatedft)); + x02t = vqsubq_s16(x128[0],x128[2]); + x13t = vqsubq_s16(x1_flip,x3_flip); + xtmp1 = vqaddq_s16(x02t,x13t); // x0 + x1f - x2 - x3f + xtmp3 = vqsubq_s16(x02t,x13t); // x0 - x1f - x2 + x3f + + ytmp0 = vtrnq_u32((uint32x4_t)(xtmp0),(uint32x4_t)(xtmp1)); +// y0[0] = [x00 x10 x02 x12], y0[1] = [x01 x11 x03 x13] + ytmp1 = vtrnq_u32((uint32x4_t)(xtmp2),(uint32x4_t)(xtmp3)); +// y1[0] = [x20 x30 x22 x32], y1[1] = [x21 x31 x23 x33] + + + ytmp0b = vcombine_s16(vget_low_s16((int16x8_t)ytmp0.val[0]),vget_low_s16((int16x8_t)ytmp1.val[0])); +// y0 = [x00 x10 x20 x30] + ytmp1b = vcombine_s16(vget_low_s16((int16x8_t)ytmp0.val[1]),vget_low_s16((int16x8_t)ytmp1.val[1])); +// t1 = [x01 x11 x21 x31] + ytmp2b = vcombine_s16(vget_high_s16((int16x8_t)ytmp0.val[0]),vget_high_s16((int16x8_t)ytmp1.val[0])); +// t2 = [x02 x12 x22 x32] + ytmp3b = vcombine_s16(vget_high_s16((int16x8_t)ytmp0.val[1]),vget_high_s16((int16x8_t)ytmp1.val[1])); +// t3 = [x03 x13 x23 x33] + + + // Second stage : 4 Radix-4 butterflies with input twiddles + xtmp1 = packed_cmult2(ytmp1b,tw16a_128[0],tw16b_128[0]); + xtmp2 = packed_cmult2(ytmp2b,tw16a_128[1],tw16b_128[1]); + xtmp3 = packed_cmult2(ytmp3b,tw16a_128[2],tw16b_128[2]); + + x02t = vqaddq_s16(ytmp0b,xtmp2); + x13t = vqaddq_s16(xtmp1,xtmp3); + y128[0] = vqaddq_s16(x02t,x13t); + y128[2] = vqsubq_s16(x02t,x13t); + x1_flip = vrev32q_s16(vmulq_s16(xtmp1,*(int16x8_t*)conjugatedft)); + x3_flip = vrev32q_s16(vmulq_s16(xtmp3,*(int16x8_t*)conjugatedft)); + x02t = vqsubq_s16(ytmp0b,xtmp2); + x13t = vqsubq_s16(x1_flip,x3_flip); + y128[1] = vqaddq_s16(x02t,x13t); // x0 + x1f - x2 - x3f + y128[3] = vqsubq_s16(x02t,x13t); // x0 - x1f - x2 + x3f + + +#endif } static inline void idft16(int16_t *x,int16_t *y) __attribute__((always_inline)); @@ -874,6 +1597,7 @@ static inline void idft16(int16_t *x,int16_t *y) __attribute__((always_inline)); static inline void idft16(int16_t *x,int16_t *y) { +#if defined(__x86_64__) || defined(__i386__) __m128i *tw16a_128=(__m128i *)tw16,*tw16b_128=(__m128i *)tw16c,*x128=(__m128i *)x,*y128=(__m128i *)y; /* @@ -896,27 +1620,14 @@ static inline void idft16(int16_t *x,int16_t *y) x13t = _mm_adds_epi16(x128[1],x128[3]); xtmp0 = _mm_adds_epi16(x02t,x13t); xtmp2 = _mm_subs_epi16(x02t,x13t); - - /* - xtmp0 = _mm_adds_epi16(x128[0],_mm_adds_epi16(x128[1],_mm_adds_epi16(x128[2],x128[3]))); - xtmp2 = _mm_subs_epi16(x128[0],_mm_subs_epi16(x128[1],_mm_subs_epi16(x128[2],x128[3]))); - */ x1_flip = _mm_sign_epi16(x128[1],*(__m128i*)conjugatedft); - // x1_flip = _mm_shufflelo_epi16(x1_flip,_MM_SHUFFLE(2,3,0,1)); - // x1_flip = _mm_shufflehi_epi16(x1_flip,_MM_SHUFFLE(2,3,0,1)); x1_flip = _mm_shuffle_epi8(x1_flip,_mm_set_epi8(13,12,15,14,9,8,11,10,5,4,7,6,1,0,3,2)); x3_flip = _mm_sign_epi16(x128[3],*(__m128i*)conjugatedft); - // x3_flip = _mm_shufflelo_epi16(x3_flip,_MM_SHUFFLE(2,3,0,1)); - // x3_flip = _mm_shufflehi_epi16(x3_flip,_MM_SHUFFLE(2,3,0,1)); x3_flip = _mm_shuffle_epi8(x3_flip,_mm_set_epi8(13,12,15,14,9,8,11,10,5,4,7,6,1,0,3,2)); x02t = _mm_subs_epi16(x128[0],x128[2]); x13t = _mm_subs_epi16(x1_flip,x3_flip); xtmp3 = _mm_adds_epi16(x02t,x13t); // x0 + x1f - x2 - x3f xtmp1 = _mm_subs_epi16(x02t,x13t); // x0 - x1f - x2 + x3f - /* - xtmp1 = _mm_adds_epi16(x128[0],_mm_subs_epi16(x1_flip,_mm_adds_epi16(x128[2],x3_flip))); - xtmp3 = _mm_subs_epi16(x128[0],_mm_adds_epi16(x1_flip,_mm_subs_epi16(x128[2],x3_flip))); - */ ytmp0 = _mm_unpacklo_epi32(xtmp0,xtmp1); ytmp1 = _mm_unpackhi_epi32(xtmp0,xtmp1); @@ -936,53 +1647,84 @@ static inline void idft16(int16_t *x,int16_t *y) x13t = _mm_adds_epi16(xtmp1,xtmp3); y128[0] = _mm_adds_epi16(x02t,x13t); y128[2] = _mm_subs_epi16(x02t,x13t); - - /* - y128[0] = _mm_adds_epi16(xtmp0,_mm_adds_epi16(xtmp1,_mm_adds_epi16(xtmp2,xtmp3))); - y128[2] = _mm_subs_epi16(xtmp0,_mm_subs_epi16(xtmp1,_mm_subs_epi16(xtmp2,xtmp3))); - */ - x1_flip = _mm_sign_epi16(xtmp1,*(__m128i*)conjugatedft); - // x1_flip = _mm_shufflelo_epi16(x1_flip,_MM_SHUFFLE(2,3,0,1)); - // x1_flip = _mm_shufflehi_epi16(x1_flip,_MM_SHUFFLE(2,3,0,1)); x1_flip = _mm_shuffle_epi8(x1_flip,_mm_set_epi8(13,12,15,14,9,8,11,10,5,4,7,6,1,0,3,2)); x3_flip = _mm_sign_epi16(xtmp3,*(__m128i*)conjugatedft); - // x3_flip = _mm_shufflelo_epi16(x3_flip,_MM_SHUFFLE(2,3,0,1)); - // x3_flip = _mm_shufflehi_epi16(x3_flip,_MM_SHUFFLE(2,3,0,1)); x3_flip = _mm_shuffle_epi8(x3_flip,_mm_set_epi8(13,12,15,14,9,8,11,10,5,4,7,6,1,0,3,2)); x02t = _mm_subs_epi16(xtmp0,xtmp2); x13t = _mm_subs_epi16(x1_flip,x3_flip); y128[3] = _mm_adds_epi16(x02t,x13t); // x0 + x1f - x2 - x3f y128[1] = _mm_subs_epi16(x02t,x13t); // x0 - x1f - x2 + x3f - /* - y128[1] = _mm_adds_epi16(xtmp0,_mm_subs_epi16(x1_flip,_mm_adds_epi16(xtmp2,x3_flip))); - y128[3] = _mm_subs_epi16(xtmp0,_mm_adds_epi16(x1_flip,_mm_subs_epi16(xtmp2,x3_flip))); - */ -} -/* -static inline void idft16(int16_t *x,int16_t *y)__attribute__((always_inline)); +#elif defined(__arm__) + int16x8_t *tw16a_128=(int16x8_t *)tw16,*tw16b_128=(int16x8_t *)tw16c,*x128=(int16x8_t *)x,*y128=(int16x8_t *)y; -static inline void idft16(int16_t *x,int16_t *y) { + /* This is the original version before unrolling - __m128i ytmp[4],*tw16_128=(__m128i *)tw16,*x128=(__m128i *)x,*y128=(__m128i *)y; - - - ibfly4_tw1(x128,x128+1,x128+2,x128+3, + bfly4_tw1(x128,x128+1,x128+2,x128+3, y128,y128+1,y128+2,y128+3); transpose16(y128,ytmp); - ibfly4(ytmp,ytmp+1,ytmp+2,ytmp+3, - y128,y128+1,y128+2,y128+3, - tw16_128,tw16_128+1,tw16_128+2); + bfly4_16(ytmp,ytmp+1,ytmp+2,ytmp+3, + y128,y128+1,y128+2,y128+3, + tw16_128,tw16_128+1,tw16_128+2); + */ + register int16x8_t x1_flip,x3_flip,x02t,x13t; + register int16x8_t xtmp0,xtmp1,xtmp2,xtmp3; + register uint32x4x2_t ytmp0,ytmp1; + register int16x8_t ytmp0b,ytmp1b,ytmp2b,ytmp3b; + + // First stage : 4 Radix-4 butterflies without input twiddles + + x02t = vqaddq_s16(x128[0],x128[2]); + x13t = vqaddq_s16(x128[1],x128[3]); + xtmp0 = vqaddq_s16(x02t,x13t); + xtmp2 = vqsubq_s16(x02t,x13t); + x1_flip = vrev32q_s16(vmulq_s16(x128[1],*(int16x8_t*)conjugatedft)); + x3_flip = vrev32q_s16(vmulq_s16(x128[3],*(int16x8_t*)conjugatedft)); + x02t = vqsubq_s16(x128[0],x128[2]); + x13t = vqsubq_s16(x1_flip,x3_flip); + xtmp3 = vqaddq_s16(x02t,x13t); // x0 + x1f - x2 - x3f + xtmp1 = vqsubq_s16(x02t,x13t); // x0 - x1f - x2 + x3f + + ytmp0 = vtrnq_u32((uint32x4_t)(xtmp0),(uint32x4_t)(xtmp1)); +// y0[0] = [x00 x10 x02 x12], y0[1] = [x01 x11 x03 x13] + ytmp1 = vtrnq_u32((uint32x4_t)(xtmp2),(uint32x4_t)(xtmp3)); +// y1[0] = [x20 x30 x22 x32], y1[1] = [x21 x31 x23 x33] + + + ytmp0b = vcombine_s16(vget_low_s16((int16x8_t)ytmp0.val[0]),vget_low_s16((int16x8_t)ytmp1.val[0])); +// y0 = [x00 x10 x20 x30] + ytmp1b = vcombine_s16(vget_low_s16((int16x8_t)ytmp0.val[1]),vget_low_s16((int16x8_t)ytmp1.val[1])); +// t1 = [x01 x11 x21 x31] + ytmp2b = vcombine_s16(vget_high_s16((int16x8_t)ytmp0.val[0]),vget_high_s16((int16x8_t)ytmp1.val[0])); +// t2 = [x02 x12 x22 x32] + ytmp3b = vcombine_s16(vget_high_s16((int16x8_t)ytmp0.val[1]),vget_high_s16((int16x8_t)ytmp1.val[1])); +// t3 = [x03 x13 x23 x33] + + // Second stage : 4 Radix-4 butterflies with input twiddles + xtmp1 = packed_cmult2(ytmp1b,tw16a_128[0],tw16b_128[0]); + xtmp2 = packed_cmult2(ytmp2b,tw16a_128[1],tw16b_128[1]); + xtmp3 = packed_cmult2(ytmp3b,tw16a_128[2],tw16b_128[2]); + + x02t = vqaddq_s16(ytmp0b,xtmp2); + x13t = vqaddq_s16(xtmp1,xtmp3); + y128[0] = vqaddq_s16(x02t,x13t); + y128[2] = vqsubq_s16(x02t,x13t); + x1_flip = vrev32q_s16(vmulq_s16(xtmp1,*(int16x8_t*)conjugatedft)); + x3_flip = vrev32q_s16(vmulq_s16(xtmp3,*(int16x8_t*)conjugatedft)); + x02t = vqsubq_s16(ytmp0b,xtmp2); + x13t = vqsubq_s16(x1_flip,x3_flip); + y128[3] = vqaddq_s16(x02t,x13t); // x0 + x1f - x2 - x3f + y128[1] = vqsubq_s16(x02t,x13t); // x0 - x1f - x2 + x3f + +#endif } -*/ - -// 64-point optimized DFT kernel +// 64-point optimized DFT int16_t tw64[96] __attribute__((aligned(16))) = { 32767,0,32609,-3212,32137,-6393,31356,-9512,30272,-12540,28897,-15447,27244,-18205,25329,-20788,23169,-23170,20787,-25330,18204,-27245,15446,-28898,12539,-30273,9511,-31357,6392,-32138,3211,-32610, 32767,0,32137,-6393,30272,-12540,27244,-18205,23169,-23170,18204,-27245,12539,-30273,6392,-32138,0,-32767,-6393,-32138,-12540,-30273,-18205,-27245,-23170,-23170,-27245,-18205,-30273,-12540,-32138,-6393, @@ -1005,11 +1747,26 @@ int16_t tw64c[96] __attribute__((aligned(16))) = { 0,32767,3212,32609,6393,32137 }; +#if defined(__x86_64__) || defined(__i386__) +#define simd_q15_t __m128i +#define simdshort_q15_t __m64 +#define shiftright_int16(a,shift) _mm_srai_epi16(a,shift) +#define set1_int16(a) _mm_set1_epi16(a); +#define mulhi_int16(a,b) _mm_slli_epi16(_mm_mulhi_epi16(a,b),1); +#elif defined(__arm__) +#define simd_q15_t int16x8_t +#define simdshort_q15_t int16x4_t +#define shiftright_int16(a,shift) vshrq_n_s16(a,shift) +#define set1_int16(a) vdupq_n_s16(a) +#define mulhi_int16(a,b) vqdmulhq_s16(a,b); +#define _mm_empty() +#define _m_empty() +#endif void dft64(int16_t *x,int16_t *y,int scale) { - __m128i xtmp[16],ytmp[16],*tw64a_128=(__m128i *)tw64a,*tw64b_128=(__m128i *)tw64b,*x128=(__m128i *)x,*y128=(__m128i *)y; + simd_q15_t xtmp[16],ytmp[16],*tw64a_128=(simd_q15_t *)tw64a,*tw64b_128=(simd_q15_t *)tw64b,*x128=(simd_q15_t *)x,*y128=(simd_q15_t *)y; #ifdef D64STATS @@ -1073,24 +1830,22 @@ void dft64(int16_t *x,int16_t *y,int scale) if (scale>0) { - - y128[0] = _mm_srai_epi16(y128[0],3); - y128[1] = _mm_srai_epi16(y128[1],3); - y128[2] = _mm_srai_epi16(y128[2],3); - y128[3] = _mm_srai_epi16(y128[3],3); - y128[4] = _mm_srai_epi16(y128[4],3); - y128[5] = _mm_srai_epi16(y128[5],3); - y128[6] = _mm_srai_epi16(y128[6],3); - y128[7] = _mm_srai_epi16(y128[7],3); - y128[8] = _mm_srai_epi16(y128[8],3); - y128[9] = _mm_srai_epi16(y128[9],3); - y128[10] = _mm_srai_epi16(y128[10],3); - y128[11] = _mm_srai_epi16(y128[11],3); - y128[12] = _mm_srai_epi16(y128[12],3); - y128[13] = _mm_srai_epi16(y128[13],3); - y128[14] = _mm_srai_epi16(y128[14],3); - y128[15] = _mm_srai_epi16(y128[15],3); - + y128[0] = shiftright_int16(y128[0],3); + y128[1] = shiftright_int16(y128[1],3); + y128[2] = shiftright_int16(y128[2],3); + y128[3] = shiftright_int16(y128[3],3); + y128[4] = shiftright_int16(y128[4],3); + y128[5] = shiftright_int16(y128[5],3); + y128[6] = shiftright_int16(y128[6],3); + y128[7] = shiftright_int16(y128[7],3); + y128[8] = shiftright_int16(y128[8],3); + y128[9] = shiftright_int16(y128[9],3); + y128[10] = shiftright_int16(y128[10],3); + y128[11] = shiftright_int16(y128[11],3); + y128[12] = shiftright_int16(y128[12],3); + y128[13] = shiftright_int16(y128[13],3); + y128[14] = shiftright_int16(y128[14],3); + y128[15] = shiftright_int16(y128[15],3); } _mm_empty(); @@ -1101,7 +1856,7 @@ void dft64(int16_t *x,int16_t *y,int scale) void idft64(int16_t *x,int16_t *y,int scale) { - __m128i xtmp[16],ytmp[16],*tw64a_128=(__m128i *)tw64,*tw64b_128=(__m128i *)tw64c,*x128=(__m128i *)x,*y128=(__m128i *)y; + simd_q15_t xtmp[16],ytmp[16],*tw64a_128=(simd_q15_t *)tw64,*tw64b_128=(simd_q15_t *)tw64c,*x128=(simd_q15_t *)x,*y128=(simd_q15_t *)y; #ifdef D64STATS @@ -1166,22 +1921,22 @@ void idft64(int16_t *x,int16_t *y,int scale) if (scale>0) { - y128[0] = _mm_srai_epi16(y128[0],3); - y128[1] = _mm_srai_epi16(y128[1],3); - y128[2] = _mm_srai_epi16(y128[2],3); - y128[3] = _mm_srai_epi16(y128[3],3); - y128[4] = _mm_srai_epi16(y128[4],3); - y128[5] = _mm_srai_epi16(y128[5],3); - y128[6] = _mm_srai_epi16(y128[6],3); - y128[7] = _mm_srai_epi16(y128[7],3); - y128[8] = _mm_srai_epi16(y128[8],3); - y128[9] = _mm_srai_epi16(y128[9],3); - y128[10] = _mm_srai_epi16(y128[10],3); - y128[11] = _mm_srai_epi16(y128[11],3); - y128[12] = _mm_srai_epi16(y128[12],3); - y128[13] = _mm_srai_epi16(y128[13],3); - y128[14] = _mm_srai_epi16(y128[14],3); - y128[15] = _mm_srai_epi16(y128[15],3); + y128[0] = shiftright_int16(y128[0],3); + y128[1] = shiftright_int16(y128[1],3); + y128[2] = shiftright_int16(y128[2],3); + y128[3] = shiftright_int16(y128[3],3); + y128[4] = shiftright_int16(y128[4],3); + y128[5] = shiftright_int16(y128[5],3); + y128[6] = shiftright_int16(y128[6],3); + y128[7] = shiftright_int16(y128[7],3); + y128[8] = shiftright_int16(y128[8],3); + y128[9] = shiftright_int16(y128[9],3); + y128[10] = shiftright_int16(y128[10],3); + y128[11] = shiftright_int16(y128[11],3); + y128[12] = shiftright_int16(y128[12],3); + y128[13] = shiftright_int16(y128[13],3); + y128[14] = shiftright_int16(y128[14],3); + y128[15] = shiftright_int16(y128[15],3); } @@ -1191,64 +1946,6 @@ void idft64(int16_t *x,int16_t *y,int scale) } -/* -void idft64(int16_t *x,int16_t *y,int scale) { - - __m128i xtmp[16],ytmp[16],*tw64_128=(__m128i *)tw64,*x128=(__m128i *)x,*y128=(__m128i *)y; - - transpose16_ooff(x128,xtmp,4); - transpose16_ooff(x128+4,xtmp+1,4); - transpose16_ooff(x128+8,xtmp+2,4); - transpose16_ooff(x128+12,xtmp+3,4); - - idft16((int16_t*)(xtmp),(int16_t*)ytmp); - idft16((int16_t*)(xtmp+4),(int16_t*)(ytmp+4)); - idft16((int16_t*)(xtmp+8),(int16_t*)(ytmp+8)); - idft16((int16_t*)(xtmp+12),(int16_t*)(ytmp+12)); - - - ibfly4(ytmp,ytmp+4,ytmp+8,ytmp+12, - y128,y128+4,y128+8,y128+12, - tw64_128,tw64_128+4,tw64_128+8); - - ibfly4(ytmp+1,ytmp+5,ytmp+9,ytmp+13, - y128+1,y128+5,y128+9,y128+13, - tw64_128+1,tw64_128+5,tw64_128+9); - - ibfly4(ytmp+2,ytmp+6,ytmp+10,ytmp+14, - y128+2,y128+6,y128+10,y128+14, - tw64_128+2,tw64_128+6,tw64_128+10); - - ibfly4(ytmp+3,ytmp+7,ytmp+11,ytmp+15, - y128+3,y128+7,y128+11,y128+15, - tw64_128+3,tw64_128+7,tw64_128+11); - - if (scale>0) { - - y128[0] = _mm_srai_epi16(y128[0],3); - y128[1] = _mm_srai_epi16(y128[1],3); - y128[2] = _mm_srai_epi16(y128[2],3); - y128[3] = _mm_srai_epi16(y128[3],3); - y128[4] = _mm_srai_epi16(y128[4],3); - y128[5] = _mm_srai_epi16(y128[5],3); - y128[6] = _mm_srai_epi16(y128[6],3); - y128[7] = _mm_srai_epi16(y128[7],3); - y128[8] = _mm_srai_epi16(y128[8],3); - y128[9] = _mm_srai_epi16(y128[9],3); - y128[10] = _mm_srai_epi16(y128[10],3); - y128[11] = _mm_srai_epi16(y128[11],3); - y128[12] = _mm_srai_epi16(y128[12],3); - y128[13] = _mm_srai_epi16(y128[13],3); - y128[14] = _mm_srai_epi16(y128[14],3); - y128[15] = _mm_srai_epi16(y128[15],3); - - } - _mm_empty(); - _m_empty(); - -} -*/ - int16_t tw128[128] __attribute__((aligned(16))) = { 32767,0,32727,-1608,32609,-3212,32412,-4808,32137,-6393,31785,-7962,31356,-9512,30851,-11039,30272,-12540,29621,-14010,28897,-15447,28105,-16846,27244,-18205,26318,-19520,25329,-20788,24278,-22005,23169,-23170,22004,-24279,20787,-25330,19519,-26319,18204,-27245,16845,-28106,15446,-28898,14009,-29622,12539,-30273,11038,-30852,9511,-31357,7961,-31786,6392,-32138,4807,-32413,3211,-32610,1607,-32728,0,-32767,-1608,-32728,-3212,-32610,-4808,-32413,-6393,-32138,-7962,-31786,-9512,-31357,-11039,-30852,-12540,-30273,-14010,-29622,-15447,-28898,-16846,-28106,-18205,-27245,-19520,-26319,-20788,-25330,-22005,-24279,-23170,-23170,-24279,-22005,-25330,-20788,-26319,-19520,-27245,-18205,-28106,-16846,-28898,-15447,-29622,-14010,-30273,-12540,-30852,-11039,-31357,-9512,-31786,-7962,-32138,-6393,-32413,-4808,-32610,-3212,-32728,-1608}; int16_t tw128a[128] __attribute__((aligned(16))) = { 32767,0,32727,1608,32609,3212,32412,4808,32137,6393,31785,7962,31356,9512,30851,11039,30272,12540,29621,14010,28897,15447,28105,16846,27244,18205,26318,19520,25329,20788,24278,22005,23169,23170,22004,24279,20787,25330,19519,26319,18204,27245,16845,28106,15446,28898,14009,29622,12539,30273,11038,30852,9511,31357,7961,31786,6392,32138,4807,32413,3211,32610,1607,32728,0,32767,-1608,32728,-3212,32610,-4808,32413,-6393,32138,-7962,31786,-9512,31357,-11039,30852,-12540,30273,-14010,29622,-15447,28898,-16846,28106,-18205,27245,-19520,26319,-20788,25330,-22005,24279,-23170,23170,-24279,22005,-25330,20788,-26319,19520,-27245,18205,-28106,16846,-28898,15447,-29622,14010,-30273,12540,-30852,11039,-31357,9512,-31786,7962,-32138,6393,-32413,4808,-32610,3212,-32728,1608}; @@ -1260,18 +1957,12 @@ int16_t tw128c[128] __attribute__((aligned(16))) = {0,32767,1608,32727,3212,3260 void dft128(int16_t *x,int16_t *y,int scale) { - __m64 xtmp[64],*x64 = (__m64 *)x; - __m128i ytmp[32],*tw128a_128p=(__m128i *)tw128a,*tw128b_128p=(__m128i *)tw128b,*y128=(__m128i *)y,*y128p=(__m128i *)y; - __m128i *ytmpp = &ytmp[0]; + simdshort_q15_t xtmp[64],*x64 = (simdshort_q15_t *)x; + simd_q15_t ytmp[32],*tw128a_128p=(simd_q15_t *)tw128a,*tw128b_128p=(simd_q15_t *)tw128b,*y128=(simd_q15_t *)y,*y128p=(simd_q15_t *)y; + simd_q15_t *ytmpp = &ytmp[0]; int i; - __m128i ONE_OVER_SQRT2_Q15_128 = _mm_set_epi16(ONE_OVER_SQRT2_Q15, - ONE_OVER_SQRT2_Q15, - ONE_OVER_SQRT2_Q15, - ONE_OVER_SQRT2_Q15, - ONE_OVER_SQRT2_Q15, - ONE_OVER_SQRT2_Q15, - ONE_OVER_SQRT2_Q15, - ONE_OVER_SQRT2_Q15); + simd_q15_t ONE_OVER_SQRT2_Q15_128 = set1_int16(ONE_OVER_SQRT2_Q15); + transpose4_ooff(x64 ,xtmp,32); transpose4_ooff(x64+2,xtmp+1,32); @@ -1323,71 +2014,39 @@ void dft128(int16_t *x,int16_t *y,int scale) if (scale>0) { - y128[0] = _mm_mulhi_epi16(y128[0],ONE_OVER_SQRT2_Q15_128); - y128[0] = _mm_slli_epi16(y128[0],1); - y128[1] = _mm_mulhi_epi16(y128[1],ONE_OVER_SQRT2_Q15_128); - y128[1] = _mm_slli_epi16(y128[1],1); - y128[2] = _mm_mulhi_epi16(y128[2],ONE_OVER_SQRT2_Q15_128); - y128[2] = _mm_slli_epi16(y128[2],1); - y128[3] = _mm_mulhi_epi16(y128[3],ONE_OVER_SQRT2_Q15_128); - y128[3] = _mm_slli_epi16(y128[3],1); - y128[4] = _mm_mulhi_epi16(y128[4],ONE_OVER_SQRT2_Q15_128); - y128[4] = _mm_slli_epi16(y128[4],1); - y128[5] = _mm_mulhi_epi16(y128[5],ONE_OVER_SQRT2_Q15_128); - y128[5] = _mm_slli_epi16(y128[5],1); - y128[6] = _mm_mulhi_epi16(y128[6],ONE_OVER_SQRT2_Q15_128); - y128[6] = _mm_slli_epi16(y128[6],1); - y128[7] = _mm_mulhi_epi16(y128[7],ONE_OVER_SQRT2_Q15_128); - y128[7] = _mm_slli_epi16(y128[7],1); - y128[8] = _mm_mulhi_epi16(y128[8],ONE_OVER_SQRT2_Q15_128); - y128[8] = _mm_slli_epi16(y128[8],1); - y128[9] = _mm_mulhi_epi16(y128[9],ONE_OVER_SQRT2_Q15_128); - y128[9] = _mm_slli_epi16(y128[9],1); - y128[10] = _mm_mulhi_epi16(y128[10],ONE_OVER_SQRT2_Q15_128); - y128[10] = _mm_slli_epi16(y128[10],1); - y128[11] = _mm_mulhi_epi16(y128[11],ONE_OVER_SQRT2_Q15_128); - y128[11] = _mm_slli_epi16(y128[11],1); - y128[12] = _mm_mulhi_epi16(y128[12],ONE_OVER_SQRT2_Q15_128); - y128[12] = _mm_slli_epi16(y128[12],1); - y128[13] = _mm_mulhi_epi16(y128[13],ONE_OVER_SQRT2_Q15_128); - y128[13] = _mm_slli_epi16(y128[13],1); - y128[14] = _mm_mulhi_epi16(y128[14],ONE_OVER_SQRT2_Q15_128); - y128[14] = _mm_slli_epi16(y128[14],1); - y128[15] = _mm_mulhi_epi16(y128[15],ONE_OVER_SQRT2_Q15_128); - y128[15] = _mm_slli_epi16(y128[15],1); + y128[0] = mulhi_int16(y128[0],ONE_OVER_SQRT2_Q15_128); + y128[1] = mulhi_int16(y128[1],ONE_OVER_SQRT2_Q15_128); + y128[2] = mulhi_int16(y128[2],ONE_OVER_SQRT2_Q15_128); + y128[3] = mulhi_int16(y128[3],ONE_OVER_SQRT2_Q15_128); + y128[4] = mulhi_int16(y128[4],ONE_OVER_SQRT2_Q15_128); + y128[5] = mulhi_int16(y128[5],ONE_OVER_SQRT2_Q15_128); + y128[6] = mulhi_int16(y128[6],ONE_OVER_SQRT2_Q15_128); + y128[7] = mulhi_int16(y128[7],ONE_OVER_SQRT2_Q15_128); + y128[8] = mulhi_int16(y128[8],ONE_OVER_SQRT2_Q15_128); + y128[9] = mulhi_int16(y128[9],ONE_OVER_SQRT2_Q15_128); + y128[10] = mulhi_int16(y128[10],ONE_OVER_SQRT2_Q15_128); + y128[11] = mulhi_int16(y128[11],ONE_OVER_SQRT2_Q15_128); + y128[12] = mulhi_int16(y128[12],ONE_OVER_SQRT2_Q15_128); + y128[13] = mulhi_int16(y128[13],ONE_OVER_SQRT2_Q15_128); + y128[14] = mulhi_int16(y128[14],ONE_OVER_SQRT2_Q15_128); + y128[15] = mulhi_int16(y128[15],ONE_OVER_SQRT2_Q15_128); + y128[16] = mulhi_int16(y128[16],ONE_OVER_SQRT2_Q15_128); + y128[17] = mulhi_int16(y128[17],ONE_OVER_SQRT2_Q15_128); + y128[18] = mulhi_int16(y128[18],ONE_OVER_SQRT2_Q15_128); + y128[19] = mulhi_int16(y128[19],ONE_OVER_SQRT2_Q15_128); + y128[20] = mulhi_int16(y128[20],ONE_OVER_SQRT2_Q15_128); + y128[21] = mulhi_int16(y128[21],ONE_OVER_SQRT2_Q15_128); + y128[22] = mulhi_int16(y128[22],ONE_OVER_SQRT2_Q15_128); + y128[23] = mulhi_int16(y128[23],ONE_OVER_SQRT2_Q15_128); + y128[24] = mulhi_int16(y128[24],ONE_OVER_SQRT2_Q15_128); + y128[25] = mulhi_int16(y128[25],ONE_OVER_SQRT2_Q15_128); + y128[26] = mulhi_int16(y128[26],ONE_OVER_SQRT2_Q15_128); + y128[27] = mulhi_int16(y128[27],ONE_OVER_SQRT2_Q15_128); + y128[28] = mulhi_int16(y128[28],ONE_OVER_SQRT2_Q15_128); + y128[29] = mulhi_int16(y128[29],ONE_OVER_SQRT2_Q15_128); + y128[30] = mulhi_int16(y128[30],ONE_OVER_SQRT2_Q15_128); + y128[31] = mulhi_int16(y128[31],ONE_OVER_SQRT2_Q15_128); - y128[16] = _mm_mulhi_epi16(y128[16],ONE_OVER_SQRT2_Q15_128); - y128[16] = _mm_slli_epi16(y128[16],1); - y128[17] = _mm_mulhi_epi16(y128[17],ONE_OVER_SQRT2_Q15_128); - y128[17] = _mm_slli_epi16(y128[17],1); - y128[18] = _mm_mulhi_epi16(y128[18],ONE_OVER_SQRT2_Q15_128); - y128[18] = _mm_slli_epi16(y128[18],1); - y128[19] = _mm_mulhi_epi16(y128[19],ONE_OVER_SQRT2_Q15_128); - y128[19] = _mm_slli_epi16(y128[19],1); - y128[20] = _mm_mulhi_epi16(y128[20],ONE_OVER_SQRT2_Q15_128); - y128[20] = _mm_slli_epi16(y128[20],1); - y128[21] = _mm_mulhi_epi16(y128[21],ONE_OVER_SQRT2_Q15_128); - y128[21] = _mm_slli_epi16(y128[21],1); - y128[22] = _mm_mulhi_epi16(y128[22],ONE_OVER_SQRT2_Q15_128); - y128[22] = _mm_slli_epi16(y128[22],1); - y128[23] = _mm_mulhi_epi16(y128[23],ONE_OVER_SQRT2_Q15_128); - y128[23] = _mm_slli_epi16(y128[23],1); - y128[24] = _mm_mulhi_epi16(y128[24],ONE_OVER_SQRT2_Q15_128); - y128[24] = _mm_slli_epi16(y128[24],1); - y128[25] = _mm_mulhi_epi16(y128[25],ONE_OVER_SQRT2_Q15_128); - y128[25] = _mm_slli_epi16(y128[25],1); - y128[26] = _mm_mulhi_epi16(y128[26],ONE_OVER_SQRT2_Q15_128); - y128[26] = _mm_slli_epi16(y128[26],1); - y128[27] = _mm_mulhi_epi16(y128[27],ONE_OVER_SQRT2_Q15_128); - y128[27] = _mm_slli_epi16(y128[27],1); - y128[28] = _mm_mulhi_epi16(y128[28],ONE_OVER_SQRT2_Q15_128); - y128[28] = _mm_slli_epi16(y128[28],1); - y128[29] = _mm_mulhi_epi16(y128[29],ONE_OVER_SQRT2_Q15_128); - y128[29] = _mm_slli_epi16(y128[29],1); - y128[30] = _mm_mulhi_epi16(y128[30],ONE_OVER_SQRT2_Q15_128); - y128[30] = _mm_slli_epi16(y128[30],1); - y128[31] = _mm_mulhi_epi16(y128[31],ONE_OVER_SQRT2_Q15_128); - y128[31] = _mm_slli_epi16(y128[31],1); } @@ -1399,18 +2058,12 @@ void dft128(int16_t *x,int16_t *y,int scale) void idft128(int16_t *x,int16_t *y,int scale) { - __m64 xtmp[64],*x64 = (__m64 *)x; - __m128i ytmp[32],*tw128_128p=(__m128i *)tw128,*y128=(__m128i *)y,*y128p=(__m128i *)y; - __m128i *ytmpp = &ytmp[0]; + simdshort_q15_t xtmp[64],*x64 = (simdshort_q15_t *)x; + simd_q15_t ytmp[32],*tw128_128p=(simd_q15_t *)tw128,*y128=(simd_q15_t *)y,*y128p=(simd_q15_t *)y; + simd_q15_t *ytmpp = &ytmp[0]; int i; - __m128i ONE_OVER_SQRT2_Q15_128 = _mm_set_epi16(ONE_OVER_SQRT2_Q15, - ONE_OVER_SQRT2_Q15, - ONE_OVER_SQRT2_Q15, - ONE_OVER_SQRT2_Q15, - ONE_OVER_SQRT2_Q15, - ONE_OVER_SQRT2_Q15, - ONE_OVER_SQRT2_Q15, - ONE_OVER_SQRT2_Q15); + simd_q15_t ONE_OVER_SQRT2_Q15_128 = set1_int16(ONE_OVER_SQRT2_Q15); + transpose4_ooff(x64 ,xtmp,32); transpose4_ooff(x64+2,xtmp+1,32); @@ -1460,71 +2113,38 @@ void idft128(int16_t *x,int16_t *y,int scale) if (scale>0) { - y128[0] = _mm_mulhi_epi16(y128[0],ONE_OVER_SQRT2_Q15_128); - y128[0] = _mm_slli_epi16(y128[0],1); - y128[1] = _mm_mulhi_epi16(y128[1],ONE_OVER_SQRT2_Q15_128); - y128[1] = _mm_slli_epi16(y128[1],1); - y128[2] = _mm_mulhi_epi16(y128[2],ONE_OVER_SQRT2_Q15_128); - y128[2] = _mm_slli_epi16(y128[2],1); - y128[3] = _mm_mulhi_epi16(y128[3],ONE_OVER_SQRT2_Q15_128); - y128[3] = _mm_slli_epi16(y128[3],1); - y128[4] = _mm_mulhi_epi16(y128[4],ONE_OVER_SQRT2_Q15_128); - y128[4] = _mm_slli_epi16(y128[4],1); - y128[5] = _mm_mulhi_epi16(y128[5],ONE_OVER_SQRT2_Q15_128); - y128[5] = _mm_slli_epi16(y128[5],1); - y128[6] = _mm_mulhi_epi16(y128[6],ONE_OVER_SQRT2_Q15_128); - y128[6] = _mm_slli_epi16(y128[6],1); - y128[7] = _mm_mulhi_epi16(y128[7],ONE_OVER_SQRT2_Q15_128); - y128[7] = _mm_slli_epi16(y128[7],1); - y128[8] = _mm_mulhi_epi16(y128[8],ONE_OVER_SQRT2_Q15_128); - y128[8] = _mm_slli_epi16(y128[8],1); - y128[9] = _mm_mulhi_epi16(y128[9],ONE_OVER_SQRT2_Q15_128); - y128[9] = _mm_slli_epi16(y128[9],1); - y128[10] = _mm_mulhi_epi16(y128[10],ONE_OVER_SQRT2_Q15_128); - y128[10] = _mm_slli_epi16(y128[10],1); - y128[11] = _mm_mulhi_epi16(y128[11],ONE_OVER_SQRT2_Q15_128); - y128[11] = _mm_slli_epi16(y128[11],1); - y128[12] = _mm_mulhi_epi16(y128[12],ONE_OVER_SQRT2_Q15_128); - y128[12] = _mm_slli_epi16(y128[12],1); - y128[13] = _mm_mulhi_epi16(y128[13],ONE_OVER_SQRT2_Q15_128); - y128[13] = _mm_slli_epi16(y128[13],1); - y128[14] = _mm_mulhi_epi16(y128[14],ONE_OVER_SQRT2_Q15_128); - y128[14] = _mm_slli_epi16(y128[14],1); - y128[15] = _mm_mulhi_epi16(y128[15],ONE_OVER_SQRT2_Q15_128); - y128[15] = _mm_slli_epi16(y128[15],1); - - y128[16] = _mm_mulhi_epi16(y128[16],ONE_OVER_SQRT2_Q15_128); - y128[16] = _mm_slli_epi16(y128[16],1); - y128[17] = _mm_mulhi_epi16(y128[17],ONE_OVER_SQRT2_Q15_128); - y128[17] = _mm_slli_epi16(y128[17],1); - y128[18] = _mm_mulhi_epi16(y128[18],ONE_OVER_SQRT2_Q15_128); - y128[18] = _mm_slli_epi16(y128[18],1); - y128[19] = _mm_mulhi_epi16(y128[19],ONE_OVER_SQRT2_Q15_128); - y128[19] = _mm_slli_epi16(y128[19],1); - y128[20] = _mm_mulhi_epi16(y128[20],ONE_OVER_SQRT2_Q15_128); - y128[20] = _mm_slli_epi16(y128[20],1); - y128[21] = _mm_mulhi_epi16(y128[21],ONE_OVER_SQRT2_Q15_128); - y128[21] = _mm_slli_epi16(y128[21],1); - y128[22] = _mm_mulhi_epi16(y128[22],ONE_OVER_SQRT2_Q15_128); - y128[22] = _mm_slli_epi16(y128[22],1); - y128[23] = _mm_mulhi_epi16(y128[23],ONE_OVER_SQRT2_Q15_128); - y128[23] = _mm_slli_epi16(y128[23],1); - y128[24] = _mm_mulhi_epi16(y128[24],ONE_OVER_SQRT2_Q15_128); - y128[24] = _mm_slli_epi16(y128[24],1); - y128[25] = _mm_mulhi_epi16(y128[25],ONE_OVER_SQRT2_Q15_128); - y128[25] = _mm_slli_epi16(y128[25],1); - y128[26] = _mm_mulhi_epi16(y128[26],ONE_OVER_SQRT2_Q15_128); - y128[26] = _mm_slli_epi16(y128[26],1); - y128[27] = _mm_mulhi_epi16(y128[27],ONE_OVER_SQRT2_Q15_128); - y128[27] = _mm_slli_epi16(y128[27],1); - y128[28] = _mm_mulhi_epi16(y128[28],ONE_OVER_SQRT2_Q15_128); - y128[28] = _mm_slli_epi16(y128[28],1); - y128[29] = _mm_mulhi_epi16(y128[29],ONE_OVER_SQRT2_Q15_128); - y128[29] = _mm_slli_epi16(y128[29],1); - y128[30] = _mm_mulhi_epi16(y128[30],ONE_OVER_SQRT2_Q15_128); - y128[30] = _mm_slli_epi16(y128[30],1); - y128[31] = _mm_mulhi_epi16(y128[31],ONE_OVER_SQRT2_Q15_128); - y128[31] = _mm_slli_epi16(y128[31],1); + y128[0] = mulhi_int16(y128[0],ONE_OVER_SQRT2_Q15_128); + y128[1] = mulhi_int16(y128[1],ONE_OVER_SQRT2_Q15_128); + y128[2] = mulhi_int16(y128[2],ONE_OVER_SQRT2_Q15_128); + y128[3] = mulhi_int16(y128[3],ONE_OVER_SQRT2_Q15_128); + y128[4] = mulhi_int16(y128[4],ONE_OVER_SQRT2_Q15_128); + y128[5] = mulhi_int16(y128[5],ONE_OVER_SQRT2_Q15_128); + y128[6] = mulhi_int16(y128[6],ONE_OVER_SQRT2_Q15_128); + y128[7] = mulhi_int16(y128[7],ONE_OVER_SQRT2_Q15_128); + y128[8] = mulhi_int16(y128[8],ONE_OVER_SQRT2_Q15_128); + y128[9] = mulhi_int16(y128[9],ONE_OVER_SQRT2_Q15_128); + y128[10] = mulhi_int16(y128[10],ONE_OVER_SQRT2_Q15_128); + y128[11] = mulhi_int16(y128[11],ONE_OVER_SQRT2_Q15_128); + y128[12] = mulhi_int16(y128[12],ONE_OVER_SQRT2_Q15_128); + y128[13] = mulhi_int16(y128[13],ONE_OVER_SQRT2_Q15_128); + y128[14] = mulhi_int16(y128[14],ONE_OVER_SQRT2_Q15_128); + y128[15] = mulhi_int16(y128[15],ONE_OVER_SQRT2_Q15_128); + y128[16] = mulhi_int16(y128[16],ONE_OVER_SQRT2_Q15_128); + y128[17] = mulhi_int16(y128[17],ONE_OVER_SQRT2_Q15_128); + y128[18] = mulhi_int16(y128[18],ONE_OVER_SQRT2_Q15_128); + y128[19] = mulhi_int16(y128[19],ONE_OVER_SQRT2_Q15_128); + y128[20] = mulhi_int16(y128[20],ONE_OVER_SQRT2_Q15_128); + y128[21] = mulhi_int16(y128[21],ONE_OVER_SQRT2_Q15_128); + y128[22] = mulhi_int16(y128[22],ONE_OVER_SQRT2_Q15_128); + y128[23] = mulhi_int16(y128[23],ONE_OVER_SQRT2_Q15_128); + y128[24] = mulhi_int16(y128[24],ONE_OVER_SQRT2_Q15_128); + y128[25] = mulhi_int16(y128[25],ONE_OVER_SQRT2_Q15_128); + y128[26] = mulhi_int16(y128[26],ONE_OVER_SQRT2_Q15_128); + y128[27] = mulhi_int16(y128[27],ONE_OVER_SQRT2_Q15_128); + y128[28] = mulhi_int16(y128[28],ONE_OVER_SQRT2_Q15_128); + y128[29] = mulhi_int16(y128[29],ONE_OVER_SQRT2_Q15_128); + y128[30] = mulhi_int16(y128[30],ONE_OVER_SQRT2_Q15_128); + y128[31] = mulhi_int16(y128[31],ONE_OVER_SQRT2_Q15_128); } @@ -1552,8 +2172,8 @@ int16_t tw256b[384] __attribute__((aligned(16))) = {0,32767,-805,32757,-1608,327 void dft256(int16_t *x,int16_t *y,int scale) { - __m128i xtmp[64],ytmp[64],*tw256a_128p=(__m128i *)tw256a,*tw256b_128p=(__m128i *)tw256b,*x128=(__m128i *)x,*y128=(__m128i *)y,*y128p=(__m128i *)y; - __m128i *ytmpp = &ytmp[0]; + simd_q15_t xtmp[64],ytmp[64],*tw256a_128p=(simd_q15_t *)tw256a,*tw256b_128p=(simd_q15_t *)tw256b,*x128=(simd_q15_t *)x,*y128=(simd_q15_t *)y,*y128p=(simd_q15_t *)y; + simd_q15_t *ytmpp = &ytmp[0]; int i; #ifdef D256STATS @@ -1632,22 +2252,22 @@ void dft256(int16_t *x,int16_t *y,int scale) if (scale>0) { for (i=0; i<4; i++) { - y128[0] = _mm_srai_epi16(y128[0],1); - y128[1] = _mm_srai_epi16(y128[1],1); - y128[2] = _mm_srai_epi16(y128[2],1); - y128[3] = _mm_srai_epi16(y128[3],1); - y128[4] = _mm_srai_epi16(y128[4],1); - y128[5] = _mm_srai_epi16(y128[5],1); - y128[6] = _mm_srai_epi16(y128[6],1); - y128[7] = _mm_srai_epi16(y128[7],1); - y128[8] = _mm_srai_epi16(y128[8],1); - y128[9] = _mm_srai_epi16(y128[9],1); - y128[10] = _mm_srai_epi16(y128[10],1); - y128[11] = _mm_srai_epi16(y128[11],1); - y128[12] = _mm_srai_epi16(y128[12],1); - y128[13] = _mm_srai_epi16(y128[13],1); - y128[14] = _mm_srai_epi16(y128[14],1); - y128[15] = _mm_srai_epi16(y128[15],1); + y128[0] = shiftright_int16(y128[0],1); + y128[1] = shiftright_int16(y128[1],1); + y128[2] = shiftright_int16(y128[2],1); + y128[3] = shiftright_int16(y128[3],1); + y128[4] = shiftright_int16(y128[4],1); + y128[5] = shiftright_int16(y128[5],1); + y128[6] = shiftright_int16(y128[6],1); + y128[7] = shiftright_int16(y128[7],1); + y128[8] = shiftright_int16(y128[8],1); + y128[9] = shiftright_int16(y128[9],1); + y128[10] = shiftright_int16(y128[10],1); + y128[11] = shiftright_int16(y128[11],1); + y128[12] = shiftright_int16(y128[12],1); + y128[13] = shiftright_int16(y128[13],1); + y128[14] = shiftright_int16(y128[14],1); + y128[15] = shiftright_int16(y128[15],1); y128+=16; } @@ -1664,8 +2284,8 @@ void dft256(int16_t *x,int16_t *y,int scale) void idft256(int16_t *x,int16_t *y,int scale) { - __m128i xtmp[64],ytmp[64],*tw256_128p=(__m128i *)tw256,*x128=(__m128i *)x,*y128=(__m128i *)y,*y128p=(__m128i *)y; - __m128i *ytmpp = &ytmp[0]; + simd_q15_t xtmp[64],ytmp[64],*tw256_128p=(simd_q15_t *)tw256,*x128=(simd_q15_t *)x,*y128=(simd_q15_t *)y,*y128p=(simd_q15_t *)y; + simd_q15_t *ytmpp = &ytmp[0]; int i,j; for (i=0,j=0; i<64; i+=4,j++) { @@ -1690,22 +2310,22 @@ void idft256(int16_t *x,int16_t *y,int scale) if (scale>0) { for (i=0; i<4; i++) { - y128[0] = _mm_srai_epi16(y128[0],1); - y128[1] = _mm_srai_epi16(y128[1],1); - y128[2] = _mm_srai_epi16(y128[2],1); - y128[3] = _mm_srai_epi16(y128[3],1); - y128[4] = _mm_srai_epi16(y128[4],1); - y128[5] = _mm_srai_epi16(y128[5],1); - y128[6] = _mm_srai_epi16(y128[6],1); - y128[7] = _mm_srai_epi16(y128[7],1); - y128[8] = _mm_srai_epi16(y128[8],1); - y128[9] = _mm_srai_epi16(y128[9],1); - y128[10] = _mm_srai_epi16(y128[10],1); - y128[11] = _mm_srai_epi16(y128[11],1); - y128[12] = _mm_srai_epi16(y128[12],1); - y128[13] = _mm_srai_epi16(y128[13],1); - y128[14] = _mm_srai_epi16(y128[14],1); - y128[15] = _mm_srai_epi16(y128[15],1); + y128[0] = shiftright_int16(y128[0],1); + y128[1] = shiftright_int16(y128[1],1); + y128[2] = shiftright_int16(y128[2],1); + y128[3] = shiftright_int16(y128[3],1); + y128[4] = shiftright_int16(y128[4],1); + y128[5] = shiftright_int16(y128[5],1); + y128[6] = shiftright_int16(y128[6],1); + y128[7] = shiftright_int16(y128[7],1); + y128[8] = shiftright_int16(y128[8],1); + y128[9] = shiftright_int16(y128[9],1); + y128[10] = shiftright_int16(y128[10],1); + y128[11] = shiftright_int16(y128[11],1); + y128[12] = shiftright_int16(y128[12],1); + y128[13] = shiftright_int16(y128[13],1); + y128[14] = shiftright_int16(y128[14],1); + y128[15] = shiftright_int16(y128[15],1); y128+=16; } @@ -1739,18 +2359,11 @@ int16_t tw512c[512] __attribute__((aligned(16))) = { void dft512(int16_t *x,int16_t *y,int scale) { - __m64 xtmp[256],*xtmpp,*x64 = (__m64 *)x; - __m128i ytmp[128],*tw512a_128p=(__m128i *)tw512a,*tw512b_128p=(__m128i *)tw512b,*y128=(__m128i *)y,*y128p=(__m128i *)y; - __m128i *ytmpp = &ytmp[0]; + simdshort_q15_t xtmp[256],*xtmpp,*x64 = (simdshort_q15_t *)x; + simd_q15_t ytmp[128],*tw512a_128p=(simd_q15_t *)tw512a,*tw512b_128p=(simd_q15_t *)tw512b,*y128=(simd_q15_t *)y,*y128p=(simd_q15_t *)y; + simd_q15_t *ytmpp = &ytmp[0]; int i; - __m128i ONE_OVER_SQRT2_Q15_128 = _mm_set_epi16(ONE_OVER_SQRT2_Q15, - ONE_OVER_SQRT2_Q15, - ONE_OVER_SQRT2_Q15, - ONE_OVER_SQRT2_Q15, - ONE_OVER_SQRT2_Q15, - ONE_OVER_SQRT2_Q15, - ONE_OVER_SQRT2_Q15, - ONE_OVER_SQRT2_Q15); + simd_q15_t ONE_OVER_SQRT2_Q15_128 = set1_int16(ONE_OVER_SQRT2_Q15); xtmpp = xtmp; @@ -1838,38 +2451,22 @@ void dft512(int16_t *x,int16_t *y,int scale) y128p = y128; for (i=0; i<8; i++) { - y128p[0] = _mm_mulhi_epi16(y128p[0],ONE_OVER_SQRT2_Q15_128); - y128p[0] = _mm_slli_epi16(y128p[0],1); - y128p[1] = _mm_mulhi_epi16(y128p[1],ONE_OVER_SQRT2_Q15_128); - y128p[1] = _mm_slli_epi16(y128p[1],1); - y128p[2] = _mm_mulhi_epi16(y128p[2],ONE_OVER_SQRT2_Q15_128); - y128p[2] = _mm_slli_epi16(y128p[2],1); - y128p[3] = _mm_mulhi_epi16(y128p[3],ONE_OVER_SQRT2_Q15_128); - y128p[3] = _mm_slli_epi16(y128p[3],1); - y128p[4] = _mm_mulhi_epi16(y128p[4],ONE_OVER_SQRT2_Q15_128); - y128p[4] = _mm_slli_epi16(y128p[4],1); - y128p[5] = _mm_mulhi_epi16(y128p[5],ONE_OVER_SQRT2_Q15_128); - y128p[5] = _mm_slli_epi16(y128p[5],1); - y128p[6] = _mm_mulhi_epi16(y128p[6],ONE_OVER_SQRT2_Q15_128); - y128p[6] = _mm_slli_epi16(y128p[6],1); - y128p[7] = _mm_mulhi_epi16(y128p[7],ONE_OVER_SQRT2_Q15_128); - y128p[7] = _mm_slli_epi16(y128p[7],1); - y128p[8] = _mm_mulhi_epi16(y128p[8],ONE_OVER_SQRT2_Q15_128); - y128p[8] = _mm_slli_epi16(y128p[8],1); - y128p[9] = _mm_mulhi_epi16(y128p[9],ONE_OVER_SQRT2_Q15_128); - y128p[9] = _mm_slli_epi16(y128p[9],1); - y128p[10] = _mm_mulhi_epi16(y128p[10],ONE_OVER_SQRT2_Q15_128); - y128p[10] = _mm_slli_epi16(y128p[10],1); - y128p[11] = _mm_mulhi_epi16(y128p[11],ONE_OVER_SQRT2_Q15_128); - y128p[11] = _mm_slli_epi16(y128p[11],1); - y128p[12] = _mm_mulhi_epi16(y128p[12],ONE_OVER_SQRT2_Q15_128); - y128p[12] = _mm_slli_epi16(y128p[12],1); - y128p[13] = _mm_mulhi_epi16(y128p[13],ONE_OVER_SQRT2_Q15_128); - y128p[13] = _mm_slli_epi16(y128p[13],1); - y128p[14] = _mm_mulhi_epi16(y128p[14],ONE_OVER_SQRT2_Q15_128); - y128p[14] = _mm_slli_epi16(y128p[14],1); - y128p[15] = _mm_mulhi_epi16(y128p[15],ONE_OVER_SQRT2_Q15_128); - y128p[15] = _mm_slli_epi16(y128p[15],1); + y128p[0] = mulhi_int16(y128p[0],ONE_OVER_SQRT2_Q15_128); + y128p[1] = mulhi_int16(y128p[1],ONE_OVER_SQRT2_Q15_128); + y128p[2] = mulhi_int16(y128p[2],ONE_OVER_SQRT2_Q15_128); + y128p[3] = mulhi_int16(y128p[3],ONE_OVER_SQRT2_Q15_128); + y128p[4] = mulhi_int16(y128p[4],ONE_OVER_SQRT2_Q15_128); + y128p[5] = mulhi_int16(y128p[5],ONE_OVER_SQRT2_Q15_128); + y128p[6] = mulhi_int16(y128p[6],ONE_OVER_SQRT2_Q15_128); + y128p[7] = mulhi_int16(y128p[7],ONE_OVER_SQRT2_Q15_128); + y128p[8] = mulhi_int16(y128p[8],ONE_OVER_SQRT2_Q15_128); + y128p[9] = mulhi_int16(y128p[9],ONE_OVER_SQRT2_Q15_128); + y128p[10] = mulhi_int16(y128p[10],ONE_OVER_SQRT2_Q15_128); + y128p[11] = mulhi_int16(y128p[11],ONE_OVER_SQRT2_Q15_128); + y128p[12] = mulhi_int16(y128p[12],ONE_OVER_SQRT2_Q15_128); + y128p[13] = mulhi_int16(y128p[13],ONE_OVER_SQRT2_Q15_128); + y128p[14] = mulhi_int16(y128p[14],ONE_OVER_SQRT2_Q15_128); + y128p[15] = mulhi_int16(y128p[15],ONE_OVER_SQRT2_Q15_128); y128p+=16; } } @@ -1882,18 +2479,11 @@ void dft512(int16_t *x,int16_t *y,int scale) void idft512(int16_t *x,int16_t *y,int scale) { - __m64 xtmp[256],*xtmpp,*x64 = (__m64 *)x; - __m128i ytmp[128],*tw512_128p=(__m128i *)tw512,*y128=(__m128i *)y,*y128p=(__m128i *)y; - __m128i *ytmpp = &ytmp[0]; + simdshort_q15_t xtmp[256],*xtmpp,*x64 = (simdshort_q15_t *)x; + simd_q15_t ytmp[128],*tw512_128p=(simd_q15_t *)tw512,*y128=(simd_q15_t *)y,*y128p=(simd_q15_t *)y; + simd_q15_t *ytmpp = &ytmp[0]; int i; - __m128i ONE_OVER_SQRT2_Q15_128 = _mm_set_epi16(ONE_OVER_SQRT2_Q15, - ONE_OVER_SQRT2_Q15, - ONE_OVER_SQRT2_Q15, - ONE_OVER_SQRT2_Q15, - ONE_OVER_SQRT2_Q15, - ONE_OVER_SQRT2_Q15, - ONE_OVER_SQRT2_Q15, - ONE_OVER_SQRT2_Q15); + simd_q15_t ONE_OVER_SQRT2_Q15_128 = set1_int16(ONE_OVER_SQRT2_Q15); xtmpp = xtmp; @@ -1951,38 +2541,22 @@ void idft512(int16_t *x,int16_t *y,int scale) y128p = y128; for (i=0; i<8; i++) { - y128p[0] = _mm_mulhi_epi16(y128p[0],ONE_OVER_SQRT2_Q15_128); - y128p[0] = _mm_slli_epi16(y128p[0],1); - y128p[1] = _mm_mulhi_epi16(y128p[1],ONE_OVER_SQRT2_Q15_128); - y128p[1] = _mm_slli_epi16(y128p[1],1); - y128p[2] = _mm_mulhi_epi16(y128p[2],ONE_OVER_SQRT2_Q15_128); - y128p[2] = _mm_slli_epi16(y128p[2],1); - y128p[3] = _mm_mulhi_epi16(y128p[3],ONE_OVER_SQRT2_Q15_128); - y128p[3] = _mm_slli_epi16(y128p[3],1); - y128p[4] = _mm_mulhi_epi16(y128p[4],ONE_OVER_SQRT2_Q15_128); - y128p[4] = _mm_slli_epi16(y128p[4],1); - y128p[5] = _mm_mulhi_epi16(y128p[5],ONE_OVER_SQRT2_Q15_128); - y128p[5] = _mm_slli_epi16(y128p[5],1); - y128p[6] = _mm_mulhi_epi16(y128p[6],ONE_OVER_SQRT2_Q15_128); - y128p[6] = _mm_slli_epi16(y128p[6],1); - y128p[7] = _mm_mulhi_epi16(y128p[7],ONE_OVER_SQRT2_Q15_128); - y128p[7] = _mm_slli_epi16(y128p[7],1); - y128p[8] = _mm_mulhi_epi16(y128p[8],ONE_OVER_SQRT2_Q15_128); - y128p[8] = _mm_slli_epi16(y128p[8],1); - y128p[9] = _mm_mulhi_epi16(y128p[9],ONE_OVER_SQRT2_Q15_128); - y128p[9] = _mm_slli_epi16(y128p[9],1); - y128p[10] = _mm_mulhi_epi16(y128p[10],ONE_OVER_SQRT2_Q15_128); - y128p[10] = _mm_slli_epi16(y128p[10],1); - y128p[11] = _mm_mulhi_epi16(y128p[11],ONE_OVER_SQRT2_Q15_128); - y128p[11] = _mm_slli_epi16(y128p[11],1); - y128p[12] = _mm_mulhi_epi16(y128p[12],ONE_OVER_SQRT2_Q15_128); - y128p[12] = _mm_slli_epi16(y128p[12],1); - y128p[13] = _mm_mulhi_epi16(y128p[13],ONE_OVER_SQRT2_Q15_128); - y128p[13] = _mm_slli_epi16(y128p[13],1); - y128p[14] = _mm_mulhi_epi16(y128p[14],ONE_OVER_SQRT2_Q15_128); - y128p[14] = _mm_slli_epi16(y128p[14],1); - y128p[15] = _mm_mulhi_epi16(y128p[15],ONE_OVER_SQRT2_Q15_128); - y128p[15] = _mm_slli_epi16(y128p[15],1); + y128p[0] = mulhi_int16(y128p[0],ONE_OVER_SQRT2_Q15_128); + y128p[1] = mulhi_int16(y128p[1],ONE_OVER_SQRT2_Q15_128); + y128p[2] = mulhi_int16(y128p[2],ONE_OVER_SQRT2_Q15_128); + y128p[3] = mulhi_int16(y128p[3],ONE_OVER_SQRT2_Q15_128); + y128p[4] = mulhi_int16(y128p[4],ONE_OVER_SQRT2_Q15_128); + y128p[5] = mulhi_int16(y128p[5],ONE_OVER_SQRT2_Q15_128); + y128p[6] = mulhi_int16(y128p[6],ONE_OVER_SQRT2_Q15_128); + y128p[7] = mulhi_int16(y128p[7],ONE_OVER_SQRT2_Q15_128); + y128p[8] = mulhi_int16(y128p[8],ONE_OVER_SQRT2_Q15_128); + y128p[9] = mulhi_int16(y128p[9],ONE_OVER_SQRT2_Q15_128); + y128p[10] = mulhi_int16(y128p[10],ONE_OVER_SQRT2_Q15_128); + y128p[11] = mulhi_int16(y128p[11],ONE_OVER_SQRT2_Q15_128); + y128p[12] = mulhi_int16(y128p[12],ONE_OVER_SQRT2_Q15_128); + y128p[13] = mulhi_int16(y128p[13],ONE_OVER_SQRT2_Q15_128); + y128p[14] = mulhi_int16(y128p[14],ONE_OVER_SQRT2_Q15_128); + y128p[15] = mulhi_int16(y128p[15],ONE_OVER_SQRT2_Q15_128); y128p+=16; } } @@ -2000,8 +2574,8 @@ int16_t tw1024[1536] __attribute__((aligned(16))) = { 32767,0,32766,-202,32764, void dft1024(int16_t *x,int16_t *y,int scale) { - __m128i xtmp[256],ytmp[256],*tw1024_128p=(__m128i *)tw1024,*x128=(__m128i *)x,*y128=(__m128i *)y,*y128p=(__m128i *)y; - __m128i *ytmpp = &ytmp[0]; + simd_q15_t xtmp[256],ytmp[256],*tw1024_128p=(simd_q15_t *)tw1024,*x128=(simd_q15_t *)x,*y128=(simd_q15_t *)y,*y128p=(simd_q15_t *)y; + simd_q15_t *ytmpp = &ytmp[0]; int i,j; for (i=0,j=0; i<256; i+=4,j++) { @@ -2026,22 +2600,22 @@ void dft1024(int16_t *x,int16_t *y,int scale) if (scale>0) { for (i=0; i<16; i++) { - y128[0] = _mm_srai_epi16(y128[0],1); - y128[1] = _mm_srai_epi16(y128[1],1); - y128[2] = _mm_srai_epi16(y128[2],1); - y128[3] = _mm_srai_epi16(y128[3],1); - y128[4] = _mm_srai_epi16(y128[4],1); - y128[5] = _mm_srai_epi16(y128[5],1); - y128[6] = _mm_srai_epi16(y128[6],1); - y128[7] = _mm_srai_epi16(y128[7],1); - y128[8] = _mm_srai_epi16(y128[8],1); - y128[9] = _mm_srai_epi16(y128[9],1); - y128[10] = _mm_srai_epi16(y128[10],1); - y128[11] = _mm_srai_epi16(y128[11],1); - y128[12] = _mm_srai_epi16(y128[12],1); - y128[13] = _mm_srai_epi16(y128[13],1); - y128[14] = _mm_srai_epi16(y128[14],1); - y128[15] = _mm_srai_epi16(y128[15],1); + y128[0] = shiftright_int16(y128[0],1); + y128[1] = shiftright_int16(y128[1],1); + y128[2] = shiftright_int16(y128[2],1); + y128[3] = shiftright_int16(y128[3],1); + y128[4] = shiftright_int16(y128[4],1); + y128[5] = shiftright_int16(y128[5],1); + y128[6] = shiftright_int16(y128[6],1); + y128[7] = shiftright_int16(y128[7],1); + y128[8] = shiftright_int16(y128[8],1); + y128[9] = shiftright_int16(y128[9],1); + y128[10] = shiftright_int16(y128[10],1); + y128[11] = shiftright_int16(y128[11],1); + y128[12] = shiftright_int16(y128[12],1); + y128[13] = shiftright_int16(y128[13],1); + y128[14] = shiftright_int16(y128[14],1); + y128[15] = shiftright_int16(y128[15],1); y128+=16; } @@ -2056,8 +2630,8 @@ void dft1024(int16_t *x,int16_t *y,int scale) void idft1024(int16_t *x,int16_t *y,int scale) { - __m128i xtmp[256],ytmp[256],*tw1024_128p=(__m128i *)tw1024,*x128=(__m128i *)x,*y128=(__m128i *)y,*y128p=(__m128i *)y; - __m128i *ytmpp = &ytmp[0]; + simd_q15_t xtmp[256],ytmp[256],*tw1024_128p=(simd_q15_t *)tw1024,*x128=(simd_q15_t *)x,*y128=(simd_q15_t *)y,*y128p=(simd_q15_t *)y; + simd_q15_t *ytmpp = &ytmp[0]; int i,j; for (i=0,j=0; i<256; i+=4,j++) { @@ -2082,22 +2656,22 @@ void idft1024(int16_t *x,int16_t *y,int scale) if (scale>0) { for (i=0; i<16; i++) { - y128[0] = _mm_srai_epi16(y128[0],1); - y128[1] = _mm_srai_epi16(y128[1],1); - y128[2] = _mm_srai_epi16(y128[2],1); - y128[3] = _mm_srai_epi16(y128[3],1); - y128[4] = _mm_srai_epi16(y128[4],1); - y128[5] = _mm_srai_epi16(y128[5],1); - y128[6] = _mm_srai_epi16(y128[6],1); - y128[7] = _mm_srai_epi16(y128[7],1); - y128[8] = _mm_srai_epi16(y128[8],1); - y128[9] = _mm_srai_epi16(y128[9],1); - y128[10] = _mm_srai_epi16(y128[10],1); - y128[11] = _mm_srai_epi16(y128[11],1); - y128[12] = _mm_srai_epi16(y128[12],1); - y128[13] = _mm_srai_epi16(y128[13],1); - y128[14] = _mm_srai_epi16(y128[14],1); - y128[15] = _mm_srai_epi16(y128[15],1); + y128[0] = shiftright_int16(y128[0],1); + y128[1] = shiftright_int16(y128[1],1); + y128[2] = shiftright_int16(y128[2],1); + y128[3] = shiftright_int16(y128[3],1); + y128[4] = shiftright_int16(y128[4],1); + y128[5] = shiftright_int16(y128[5],1); + y128[6] = shiftright_int16(y128[6],1); + y128[7] = shiftright_int16(y128[7],1); + y128[8] = shiftright_int16(y128[8],1); + y128[9] = shiftright_int16(y128[9],1); + y128[10] = shiftright_int16(y128[10],1); + y128[11] = shiftright_int16(y128[11],1); + y128[12] = shiftright_int16(y128[12],1); + y128[13] = shiftright_int16(y128[13],1); + y128[14] = shiftright_int16(y128[14],1); + y128[15] = shiftright_int16(y128[15],1); y128+=16; } @@ -2115,18 +2689,11 @@ int16_t tw2048[2048] __attribute__((aligned(16))) = {32767,0,32766,-101,32766,-2 void dft2048(int16_t *x,int16_t *y,int scale) { - __m64 xtmp[2048],*xtmpp,*x64 = (__m64 *)x; - __m128i ytmp[512],*tw2048_128p=(__m128i *)tw2048,*y128=(__m128i *)y,*y128p=(__m128i *)y; - __m128i *ytmpp = &ytmp[0]; + simdshort_q15_t xtmp[2048],*xtmpp,*x64 = (simdshort_q15_t *)x; + simd_q15_t ytmp[512],*tw2048_128p=(simd_q15_t *)tw2048,*y128=(simd_q15_t *)y,*y128p=(simd_q15_t *)y; + simd_q15_t *ytmpp = &ytmp[0]; int i; - __m128i ONE_OVER_SQRT2_Q15_128 = _mm_set_epi16(ONE_OVER_SQRT2_Q15, - ONE_OVER_SQRT2_Q15, - ONE_OVER_SQRT2_Q15, - ONE_OVER_SQRT2_Q15, - ONE_OVER_SQRT2_Q15, - ONE_OVER_SQRT2_Q15, - ONE_OVER_SQRT2_Q15, - ONE_OVER_SQRT2_Q15); + simd_q15_t ONE_OVER_SQRT2_Q15_128 = set1_int16(ONE_OVER_SQRT2_Q15); xtmpp = xtmp; @@ -2184,38 +2751,22 @@ void dft2048(int16_t *x,int16_t *y,int scale) y128p = y128; for (i=0; i<32; i++) { - y128p[0] = _mm_mulhi_epi16(y128p[0],ONE_OVER_SQRT2_Q15_128); - y128p[0] = _mm_slli_epi16(y128p[0],1); - y128p[1] = _mm_mulhi_epi16(y128p[1],ONE_OVER_SQRT2_Q15_128); - y128p[1] = _mm_slli_epi16(y128p[1],1); - y128p[2] = _mm_mulhi_epi16(y128p[2],ONE_OVER_SQRT2_Q15_128); - y128p[2] = _mm_slli_epi16(y128p[2],1); - y128p[3] = _mm_mulhi_epi16(y128p[3],ONE_OVER_SQRT2_Q15_128); - y128p[3] = _mm_slli_epi16(y128p[3],1); - y128p[4] = _mm_mulhi_epi16(y128p[4],ONE_OVER_SQRT2_Q15_128); - y128p[4] = _mm_slli_epi16(y128p[4],1); - y128p[5] = _mm_mulhi_epi16(y128p[5],ONE_OVER_SQRT2_Q15_128); - y128p[5] = _mm_slli_epi16(y128p[5],1); - y128p[6] = _mm_mulhi_epi16(y128p[6],ONE_OVER_SQRT2_Q15_128); - y128p[6] = _mm_slli_epi16(y128p[6],1); - y128p[7] = _mm_mulhi_epi16(y128p[7],ONE_OVER_SQRT2_Q15_128); - y128p[7] = _mm_slli_epi16(y128p[7],1); - y128p[8] = _mm_mulhi_epi16(y128p[8],ONE_OVER_SQRT2_Q15_128); - y128p[8] = _mm_slli_epi16(y128p[8],1); - y128p[9] = _mm_mulhi_epi16(y128p[9],ONE_OVER_SQRT2_Q15_128); - y128p[9] = _mm_slli_epi16(y128p[9],1); - y128p[10] = _mm_mulhi_epi16(y128p[10],ONE_OVER_SQRT2_Q15_128); - y128p[10] = _mm_slli_epi16(y128p[10],1); - y128p[11] = _mm_mulhi_epi16(y128p[11],ONE_OVER_SQRT2_Q15_128); - y128p[11] = _mm_slli_epi16(y128p[11],1); - y128p[12] = _mm_mulhi_epi16(y128p[12],ONE_OVER_SQRT2_Q15_128); - y128p[12] = _mm_slli_epi16(y128p[12],1); - y128p[13] = _mm_mulhi_epi16(y128p[13],ONE_OVER_SQRT2_Q15_128); - y128p[13] = _mm_slli_epi16(y128p[13],1); - y128p[14] = _mm_mulhi_epi16(y128p[14],ONE_OVER_SQRT2_Q15_128); - y128p[14] = _mm_slli_epi16(y128p[14],1); - y128p[15] = _mm_mulhi_epi16(y128p[15],ONE_OVER_SQRT2_Q15_128); - y128p[15] = _mm_slli_epi16(y128p[15],1); + y128p[0] = mulhi_int16(y128p[0],ONE_OVER_SQRT2_Q15_128); + y128p[1] = mulhi_int16(y128p[1],ONE_OVER_SQRT2_Q15_128); + y128p[2] = mulhi_int16(y128p[2],ONE_OVER_SQRT2_Q15_128); + y128p[3] = mulhi_int16(y128p[3],ONE_OVER_SQRT2_Q15_128); + y128p[4] = mulhi_int16(y128p[4],ONE_OVER_SQRT2_Q15_128); + y128p[5] = mulhi_int16(y128p[5],ONE_OVER_SQRT2_Q15_128); + y128p[6] = mulhi_int16(y128p[6],ONE_OVER_SQRT2_Q15_128); + y128p[7] = mulhi_int16(y128p[7],ONE_OVER_SQRT2_Q15_128); + y128p[8] = mulhi_int16(y128p[8],ONE_OVER_SQRT2_Q15_128); + y128p[9] = mulhi_int16(y128p[9],ONE_OVER_SQRT2_Q15_128); + y128p[10] = mulhi_int16(y128p[10],ONE_OVER_SQRT2_Q15_128); + y128p[11] = mulhi_int16(y128p[11],ONE_OVER_SQRT2_Q15_128); + y128p[12] = mulhi_int16(y128p[12],ONE_OVER_SQRT2_Q15_128); + y128p[13] = mulhi_int16(y128p[13],ONE_OVER_SQRT2_Q15_128); + y128p[14] = mulhi_int16(y128p[14],ONE_OVER_SQRT2_Q15_128); + y128p[15] = mulhi_int16(y128p[15],ONE_OVER_SQRT2_Q15_128); y128p+=16; } } @@ -2228,18 +2779,11 @@ void dft2048(int16_t *x,int16_t *y,int scale) void idft2048(int16_t *x,int16_t *y,int scale) { - __m64 xtmp[2048],*xtmpp,*x64 = (__m64 *)x; - __m128i ytmp[512],*tw2048_128p=(__m128i *)tw2048,*y128=(__m128i *)y,*y128p=(__m128i *)y; - __m128i *ytmpp = &ytmp[0]; + simdshort_q15_t xtmp[2048],*xtmpp,*x64 = (simdshort_q15_t *)x; + simd_q15_t ytmp[512],*tw2048_128p=(simd_q15_t *)tw2048,*y128=(simd_q15_t *)y,*y128p=(simd_q15_t *)y; + simd_q15_t *ytmpp = &ytmp[0]; int i; - __m128i ONE_OVER_SQRT2_Q15_128 = _mm_set_epi16(ONE_OVER_SQRT2_Q15, - ONE_OVER_SQRT2_Q15, - ONE_OVER_SQRT2_Q15, - ONE_OVER_SQRT2_Q15, - ONE_OVER_SQRT2_Q15, - ONE_OVER_SQRT2_Q15, - ONE_OVER_SQRT2_Q15, - ONE_OVER_SQRT2_Q15); + simd_q15_t ONE_OVER_SQRT2_Q15_128 = set1_int16(ONE_OVER_SQRT2_Q15); xtmpp = xtmp; @@ -2297,38 +2841,22 @@ void idft2048(int16_t *x,int16_t *y,int scale) y128p = y128; for (i=0; i<32; i++) { - y128p[0] = _mm_mulhi_epi16(y128p[0],ONE_OVER_SQRT2_Q15_128); - y128p[0] = _mm_slli_epi16(y128p[0],1); - y128p[1] = _mm_mulhi_epi16(y128p[1],ONE_OVER_SQRT2_Q15_128); - y128p[1] = _mm_slli_epi16(y128p[1],1); - y128p[2] = _mm_mulhi_epi16(y128p[2],ONE_OVER_SQRT2_Q15_128); - y128p[2] = _mm_slli_epi16(y128p[2],1); - y128p[3] = _mm_mulhi_epi16(y128p[3],ONE_OVER_SQRT2_Q15_128); - y128p[3] = _mm_slli_epi16(y128p[3],1); - y128p[4] = _mm_mulhi_epi16(y128p[4],ONE_OVER_SQRT2_Q15_128); - y128p[4] = _mm_slli_epi16(y128p[4],1); - y128p[5] = _mm_mulhi_epi16(y128p[5],ONE_OVER_SQRT2_Q15_128); - y128p[5] = _mm_slli_epi16(y128p[5],1); - y128p[6] = _mm_mulhi_epi16(y128p[6],ONE_OVER_SQRT2_Q15_128); - y128p[6] = _mm_slli_epi16(y128p[6],1); - y128p[7] = _mm_mulhi_epi16(y128p[7],ONE_OVER_SQRT2_Q15_128); - y128p[7] = _mm_slli_epi16(y128p[7],1); - y128p[8] = _mm_mulhi_epi16(y128p[8],ONE_OVER_SQRT2_Q15_128); - y128p[8] = _mm_slli_epi16(y128p[8],1); - y128p[9] = _mm_mulhi_epi16(y128p[9],ONE_OVER_SQRT2_Q15_128); - y128p[9] = _mm_slli_epi16(y128p[9],1); - y128p[10] = _mm_mulhi_epi16(y128p[10],ONE_OVER_SQRT2_Q15_128); - y128p[10] = _mm_slli_epi16(y128p[10],1); - y128p[11] = _mm_mulhi_epi16(y128p[11],ONE_OVER_SQRT2_Q15_128); - y128p[11] = _mm_slli_epi16(y128p[11],1); - y128p[12] = _mm_mulhi_epi16(y128p[12],ONE_OVER_SQRT2_Q15_128); - y128p[12] = _mm_slli_epi16(y128p[12],1); - y128p[13] = _mm_mulhi_epi16(y128p[13],ONE_OVER_SQRT2_Q15_128); - y128p[13] = _mm_slli_epi16(y128p[13],1); - y128p[14] = _mm_mulhi_epi16(y128p[14],ONE_OVER_SQRT2_Q15_128); - y128p[14] = _mm_slli_epi16(y128p[14],1); - y128p[15] = _mm_mulhi_epi16(y128p[15],ONE_OVER_SQRT2_Q15_128); - y128p[15] = _mm_slli_epi16(y128p[15],1); + y128p[0] = mulhi_int16(y128p[0],ONE_OVER_SQRT2_Q15_128); + y128p[1] = mulhi_int16(y128p[1],ONE_OVER_SQRT2_Q15_128); + y128p[2] = mulhi_int16(y128p[2],ONE_OVER_SQRT2_Q15_128); + y128p[3] = mulhi_int16(y128p[3],ONE_OVER_SQRT2_Q15_128); + y128p[4] = mulhi_int16(y128p[4],ONE_OVER_SQRT2_Q15_128); + y128p[5] = mulhi_int16(y128p[5],ONE_OVER_SQRT2_Q15_128); + y128p[6] = mulhi_int16(y128p[6],ONE_OVER_SQRT2_Q15_128); + y128p[7] = mulhi_int16(y128p[7],ONE_OVER_SQRT2_Q15_128); + y128p[8] = mulhi_int16(y128p[8],ONE_OVER_SQRT2_Q15_128); + y128p[9] = mulhi_int16(y128p[9],ONE_OVER_SQRT2_Q15_128); + y128p[10] = mulhi_int16(y128p[10],ONE_OVER_SQRT2_Q15_128); + y128p[11] = mulhi_int16(y128p[11],ONE_OVER_SQRT2_Q15_128); + y128p[12] = mulhi_int16(y128p[12],ONE_OVER_SQRT2_Q15_128); + y128p[13] = mulhi_int16(y128p[13],ONE_OVER_SQRT2_Q15_128); + y128p[14] = mulhi_int16(y128p[14],ONE_OVER_SQRT2_Q15_128); + y128p[15] = mulhi_int16(y128p[15],ONE_OVER_SQRT2_Q15_128); y128p+=16; } } @@ -2343,8 +2871,8 @@ void idft2048(int16_t *x,int16_t *y,int scale) void dft4096(int16_t *x,int16_t *y,int scale) { - __m128i xtmp[4096],ytmp[4096],*tw4096_128p=(__m128i *)tw4096,*x128=(__m128i *)x,*y128=(__m128i *)y,*y128p=(__m128i *)y; - __m128i *ytmpp = &ytmp[0]; + simd_q15_t xtmp[4096],ytmp[4096],*tw4096_128p=(simd_q15_t *)tw4096,*x128=(simd_q15_t *)x,*y128=(simd_q15_t *)y,*y128p=(simd_q15_t *)y; + simd_q15_t *ytmpp = &ytmp[0]; int i,j; for (i=0,j=0; i<1024; i+=4,j++) { @@ -2369,22 +2897,22 @@ void dft4096(int16_t *x,int16_t *y,int scale) if (scale>0) { for (i=0; i<64; i++) { - y128[0] = _mm_srai_epi16(y128[0],1); - y128[1] = _mm_srai_epi16(y128[1],1); - y128[2] = _mm_srai_epi16(y128[2],1); - y128[3] = _mm_srai_epi16(y128[3],1); - y128[4] = _mm_srai_epi16(y128[4],1); - y128[5] = _mm_srai_epi16(y128[5],1); - y128[6] = _mm_srai_epi16(y128[6],1); - y128[7] = _mm_srai_epi16(y128[7],1); - y128[8] = _mm_srai_epi16(y128[8],1); - y128[9] = _mm_srai_epi16(y128[9],1); - y128[10] = _mm_srai_epi16(y128[10],1); - y128[11] = _mm_srai_epi16(y128[11],1); - y128[12] = _mm_srai_epi16(y128[12],1); - y128[13] = _mm_srai_epi16(y128[13],1); - y128[14] = _mm_srai_epi16(y128[14],1); - y128[15] = _mm_srai_epi16(y128[15],1); + y128[0] = shiftright_int16(y128[0],1); + y128[1] = shiftright_int16(y128[1],1); + y128[2] = shiftright_int16(y128[2],1); + y128[3] = shiftright_int16(y128[3],1); + y128[4] = shiftright_int16(y128[4],1); + y128[5] = shiftright_int16(y128[5],1); + y128[6] = shiftright_int16(y128[6],1); + y128[7] = shiftright_int16(y128[7],1); + y128[8] = shiftright_int16(y128[8],1); + y128[9] = shiftright_int16(y128[9],1); + y128[10] = shiftright_int16(y128[10],1); + y128[11] = shiftright_int16(y128[11],1); + y128[12] = shiftright_int16(y128[12],1); + y128[13] = shiftright_int16(y128[13],1); + y128[14] = shiftright_int16(y128[14],1); + y128[15] = shiftright_int16(y128[15],1); y128+=16; } @@ -2399,8 +2927,8 @@ void dft4096(int16_t *x,int16_t *y,int scale) void idft4096(int16_t *x,int16_t *y,int scale) { - __m128i xtmp[4096],ytmp[4096],*tw4096_128p=(__m128i *)tw4096,*x128=(__m128i *)x,*y128=(__m128i *)y,*y128p=(__m128i *)y; - __m128i *ytmpp = &ytmp[0]; + simd_q15_t xtmp[4096],ytmp[4096],*tw4096_128p=(simd_q15_t *)tw4096,*x128=(simd_q15_t *)x,*y128=(simd_q15_t *)y,*y128p=(simd_q15_t *)y; + simd_q15_t *ytmpp = &ytmp[0]; int i,j; for (i=0,j=0; i<1024; i+=4,j++) { @@ -2425,22 +2953,22 @@ void idft4096(int16_t *x,int16_t *y,int scale) if (scale>0) { for (i=0; i<64; i++) { - y128[0] = _mm_srai_epi16(y128[0],1); - y128[1] = _mm_srai_epi16(y128[1],1); - y128[2] = _mm_srai_epi16(y128[2],1); - y128[3] = _mm_srai_epi16(y128[3],1); - y128[4] = _mm_srai_epi16(y128[4],1); - y128[5] = _mm_srai_epi16(y128[5],1); - y128[6] = _mm_srai_epi16(y128[6],1); - y128[7] = _mm_srai_epi16(y128[7],1); - y128[8] = _mm_srai_epi16(y128[8],1); - y128[9] = _mm_srai_epi16(y128[9],1); - y128[10] = _mm_srai_epi16(y128[10],1); - y128[11] = _mm_srai_epi16(y128[11],1); - y128[12] = _mm_srai_epi16(y128[12],1); - y128[13] = _mm_srai_epi16(y128[13],1); - y128[14] = _mm_srai_epi16(y128[14],1); - y128[15] = _mm_srai_epi16(y128[15],1); + y128[0] = shiftright_int16(y128[0],1); + y128[1] = shiftright_int16(y128[1],1); + y128[2] = shiftright_int16(y128[2],1); + y128[3] = shiftright_int16(y128[3],1); + y128[4] = shiftright_int16(y128[4],1); + y128[5] = shiftright_int16(y128[5],1); + y128[6] = shiftright_int16(y128[6],1); + y128[7] = shiftright_int16(y128[7],1); + y128[8] = shiftright_int16(y128[8],1); + y128[9] = shiftright_int16(y128[9],1); + y128[10] = shiftright_int16(y128[10],1); + y128[11] = shiftright_int16(y128[11],1); + y128[12] = shiftright_int16(y128[12],1); + y128[13] = shiftright_int16(y128[13],1); + y128[14] = shiftright_int16(y128[14],1); + y128[15] = shiftright_int16(y128[15],1); y128+=16; } @@ -2468,18 +2996,11 @@ static int16_t tw8192[4096*2] = {32767,0,32766,-26,32766,-51,32766,-76,32766,-10 void dft8192(int16_t *x,int16_t *y,int scale) { - __m64 xtmp[4096],*xtmpp,*x64 = (__m64 *)x; - __m128i ytmp[1024],*tw8192_128p=(__m128i *)tw8192,*y128=(__m128i *)y,*y128p=(__m128i *)y; - __m128i *ytmpp = &ytmp[0]; + simdshort_q15_t xtmp[4096],*xtmpp,*x64 = (simdshort_q15_t *)x; + simd_q15_t ytmp[1024],*tw8192_128p=(simd_q15_t *)tw8192,*y128=(simd_q15_t *)y,*y128p=(simd_q15_t *)y; + simd_q15_t *ytmpp = &ytmp[0]; int i; - __m128i ONE_OVER_SQRT2_Q15_128 = _mm_set_epi16(ONE_OVER_SQRT2_Q15, - ONE_OVER_SQRT2_Q15, - ONE_OVER_SQRT2_Q15, - ONE_OVER_SQRT2_Q15, - ONE_OVER_SQRT2_Q15, - ONE_OVER_SQRT2_Q15, - ONE_OVER_SQRT2_Q15, - ONE_OVER_SQRT2_Q15); + simd_q15_t ONE_OVER_SQRT2_Q15_128 = set1_int16(ONE_OVER_SQRT2_Q15); xtmpp = xtmp; @@ -2537,38 +3058,22 @@ void dft8192(int16_t *x,int16_t *y,int scale) y128p = y128; for (i=0; i<128; i++) { - y128p[0] = _mm_mulhi_epi16(y128p[0],ONE_OVER_SQRT2_Q15_128); - y128p[0] = _mm_slli_epi16(y128p[0],1); - y128p[1] = _mm_mulhi_epi16(y128p[1],ONE_OVER_SQRT2_Q15_128); - y128p[1] = _mm_slli_epi16(y128p[1],1); - y128p[2] = _mm_mulhi_epi16(y128p[2],ONE_OVER_SQRT2_Q15_128); - y128p[2] = _mm_slli_epi16(y128p[2],1); - y128p[3] = _mm_mulhi_epi16(y128p[3],ONE_OVER_SQRT2_Q15_128); - y128p[3] = _mm_slli_epi16(y128p[3],1); - y128p[4] = _mm_mulhi_epi16(y128p[4],ONE_OVER_SQRT2_Q15_128); - y128p[4] = _mm_slli_epi16(y128p[4],1); - y128p[5] = _mm_mulhi_epi16(y128p[5],ONE_OVER_SQRT2_Q15_128); - y128p[5] = _mm_slli_epi16(y128p[5],1); - y128p[6] = _mm_mulhi_epi16(y128p[6],ONE_OVER_SQRT2_Q15_128); - y128p[6] = _mm_slli_epi16(y128p[6],1); - y128p[7] = _mm_mulhi_epi16(y128p[7],ONE_OVER_SQRT2_Q15_128); - y128p[7] = _mm_slli_epi16(y128p[7],1); - y128p[8] = _mm_mulhi_epi16(y128p[8],ONE_OVER_SQRT2_Q15_128); - y128p[8] = _mm_slli_epi16(y128p[8],1); - y128p[9] = _mm_mulhi_epi16(y128p[9],ONE_OVER_SQRT2_Q15_128); - y128p[9] = _mm_slli_epi16(y128p[9],1); - y128p[10] = _mm_mulhi_epi16(y128p[10],ONE_OVER_SQRT2_Q15_128); - y128p[10] = _mm_slli_epi16(y128p[10],1); - y128p[11] = _mm_mulhi_epi16(y128p[11],ONE_OVER_SQRT2_Q15_128); - y128p[11] = _mm_slli_epi16(y128p[11],1); - y128p[12] = _mm_mulhi_epi16(y128p[12],ONE_OVER_SQRT2_Q15_128); - y128p[12] = _mm_slli_epi16(y128p[12],1); - y128p[13] = _mm_mulhi_epi16(y128p[13],ONE_OVER_SQRT2_Q15_128); - y128p[13] = _mm_slli_epi16(y128p[13],1); - y128p[14] = _mm_mulhi_epi16(y128p[14],ONE_OVER_SQRT2_Q15_128); - y128p[14] = _mm_slli_epi16(y128p[14],1); - y128p[15] = _mm_mulhi_epi16(y128p[15],ONE_OVER_SQRT2_Q15_128); - y128p[15] = _mm_slli_epi16(y128p[15],1); + y128p[0] = mulhi_int16(y128p[0],ONE_OVER_SQRT2_Q15_128); + y128p[1] = mulhi_int16(y128p[1],ONE_OVER_SQRT2_Q15_128); + y128p[2] = mulhi_int16(y128p[2],ONE_OVER_SQRT2_Q15_128); + y128p[3] = mulhi_int16(y128p[3],ONE_OVER_SQRT2_Q15_128); + y128p[4] = mulhi_int16(y128p[4],ONE_OVER_SQRT2_Q15_128); + y128p[5] = mulhi_int16(y128p[5],ONE_OVER_SQRT2_Q15_128); + y128p[6] = mulhi_int16(y128p[6],ONE_OVER_SQRT2_Q15_128); + y128p[7] = mulhi_int16(y128p[7],ONE_OVER_SQRT2_Q15_128); + y128p[8] = mulhi_int16(y128p[8],ONE_OVER_SQRT2_Q15_128); + y128p[9] = mulhi_int16(y128p[9],ONE_OVER_SQRT2_Q15_128); + y128p[10] = mulhi_int16(y128p[10],ONE_OVER_SQRT2_Q15_128); + y128p[11] = mulhi_int16(y128p[11],ONE_OVER_SQRT2_Q15_128); + y128p[12] = mulhi_int16(y128p[12],ONE_OVER_SQRT2_Q15_128); + y128p[13] = mulhi_int16(y128p[13],ONE_OVER_SQRT2_Q15_128); + y128p[14] = mulhi_int16(y128p[14],ONE_OVER_SQRT2_Q15_128); + y128p[15] = mulhi_int16(y128p[15],ONE_OVER_SQRT2_Q15_128); y128p+=16; } } @@ -2581,18 +3086,11 @@ void dft8192(int16_t *x,int16_t *y,int scale) void idft8192(int16_t *x,int16_t *y,int scale) { - __m64 xtmp[4096],*xtmpp,*x64 = (__m64 *)x; - __m128i ytmp[2048],*tw8192_128p=(__m128i *)tw8192,*y128=(__m128i *)y,*y128p=(__m128i *)y; - __m128i *ytmpp = &ytmp[0]; + simdshort_q15_t xtmp[4096],*xtmpp,*x64 = (simdshort_q15_t *)x; + simd_q15_t ytmp[2048],*tw8192_128p=(simd_q15_t *)tw8192,*y128=(simd_q15_t *)y,*y128p=(simd_q15_t *)y; + simd_q15_t *ytmpp = &ytmp[0]; int i; - __m128i ONE_OVER_SQRT2_Q15_128 = _mm_set_epi16(ONE_OVER_SQRT2_Q15, - ONE_OVER_SQRT2_Q15, - ONE_OVER_SQRT2_Q15, - ONE_OVER_SQRT2_Q15, - ONE_OVER_SQRT2_Q15, - ONE_OVER_SQRT2_Q15, - ONE_OVER_SQRT2_Q15, - ONE_OVER_SQRT2_Q15); + simd_q15_t ONE_OVER_SQRT2_Q15_128 = set1_int16(ONE_OVER_SQRT2_Q15); xtmpp = xtmp; @@ -2650,38 +3148,22 @@ void idft8192(int16_t *x,int16_t *y,int scale) y128p = y128; for (i=0; i<128; i++) { - y128p[0] = _mm_mulhi_epi16(y128p[0],ONE_OVER_SQRT2_Q15_128); - y128p[0] = _mm_slli_epi16(y128p[0],1); - y128p[1] = _mm_mulhi_epi16(y128p[1],ONE_OVER_SQRT2_Q15_128); - y128p[1] = _mm_slli_epi16(y128p[1],1); - y128p[2] = _mm_mulhi_epi16(y128p[2],ONE_OVER_SQRT2_Q15_128); - y128p[2] = _mm_slli_epi16(y128p[2],1); - y128p[3] = _mm_mulhi_epi16(y128p[3],ONE_OVER_SQRT2_Q15_128); - y128p[3] = _mm_slli_epi16(y128p[3],1); - y128p[4] = _mm_mulhi_epi16(y128p[4],ONE_OVER_SQRT2_Q15_128); - y128p[4] = _mm_slli_epi16(y128p[4],1); - y128p[5] = _mm_mulhi_epi16(y128p[5],ONE_OVER_SQRT2_Q15_128); - y128p[5] = _mm_slli_epi16(y128p[5],1); - y128p[6] = _mm_mulhi_epi16(y128p[6],ONE_OVER_SQRT2_Q15_128); - y128p[6] = _mm_slli_epi16(y128p[6],1); - y128p[7] = _mm_mulhi_epi16(y128p[7],ONE_OVER_SQRT2_Q15_128); - y128p[7] = _mm_slli_epi16(y128p[7],1); - y128p[8] = _mm_mulhi_epi16(y128p[8],ONE_OVER_SQRT2_Q15_128); - y128p[8] = _mm_slli_epi16(y128p[8],1); - y128p[9] = _mm_mulhi_epi16(y128p[9],ONE_OVER_SQRT2_Q15_128); - y128p[9] = _mm_slli_epi16(y128p[9],1); - y128p[10] = _mm_mulhi_epi16(y128p[10],ONE_OVER_SQRT2_Q15_128); - y128p[10] = _mm_slli_epi16(y128p[10],1); - y128p[11] = _mm_mulhi_epi16(y128p[11],ONE_OVER_SQRT2_Q15_128); - y128p[11] = _mm_slli_epi16(y128p[11],1); - y128p[12] = _mm_mulhi_epi16(y128p[12],ONE_OVER_SQRT2_Q15_128); - y128p[12] = _mm_slli_epi16(y128p[12],1); - y128p[13] = _mm_mulhi_epi16(y128p[13],ONE_OVER_SQRT2_Q15_128); - y128p[13] = _mm_slli_epi16(y128p[13],1); - y128p[14] = _mm_mulhi_epi16(y128p[14],ONE_OVER_SQRT2_Q15_128); - y128p[14] = _mm_slli_epi16(y128p[14],1); - y128p[15] = _mm_mulhi_epi16(y128p[15],ONE_OVER_SQRT2_Q15_128); - y128p[15] = _mm_slli_epi16(y128p[15],1); + y128p[0] = mulhi_int16(y128p[0],ONE_OVER_SQRT2_Q15_128); + y128p[1] = mulhi_int16(y128p[1],ONE_OVER_SQRT2_Q15_128); + y128p[2] = mulhi_int16(y128p[2],ONE_OVER_SQRT2_Q15_128); + y128p[3] = mulhi_int16(y128p[3],ONE_OVER_SQRT2_Q15_128); + y128p[4] = mulhi_int16(y128p[4],ONE_OVER_SQRT2_Q15_128); + y128p[5] = mulhi_int16(y128p[5],ONE_OVER_SQRT2_Q15_128); + y128p[6] = mulhi_int16(y128p[6],ONE_OVER_SQRT2_Q15_128); + y128p[7] = mulhi_int16(y128p[7],ONE_OVER_SQRT2_Q15_128); + y128p[8] = mulhi_int16(y128p[8],ONE_OVER_SQRT2_Q15_128); + y128p[9] = mulhi_int16(y128p[9],ONE_OVER_SQRT2_Q15_128); + y128p[10] = mulhi_int16(y128p[10],ONE_OVER_SQRT2_Q15_128); + y128p[11] = mulhi_int16(y128p[11],ONE_OVER_SQRT2_Q15_128); + y128p[12] = mulhi_int16(y128p[12],ONE_OVER_SQRT2_Q15_128); + y128p[13] = mulhi_int16(y128p[13],ONE_OVER_SQRT2_Q15_128); + y128p[14] = mulhi_int16(y128p[14],ONE_OVER_SQRT2_Q15_128); + y128p[15] = mulhi_int16(y128p[15],ONE_OVER_SQRT2_Q15_128); y128p+=16; } } @@ -2721,9 +3203,9 @@ void idft1536(int16_t *input, int16_t *output) // write_output("out2.m","o2",tmpo[2],2048,1,1); for (i=0,i2=0; i<1024; i+=8,i2+=4) { - ibfly3((__m128i*)(&tmpo[0][i2]),(__m128i*)(&tmpo[1][i2]),((__m128i*)&tmpo[2][i2]), - (__m128i*)(output+i),(__m128i*)(output+1024+i),(__m128i*)(output+2048+i), - (__m128i*)(twa1536+i),(__m128i*)(twb1536+i)); + ibfly3((simd_q15_t*)(&tmpo[0][i2]),(simd_q15_t*)(&tmpo[1][i2]),((simd_q15_t*)&tmpo[2][i2]), + (simd_q15_t*)(output+i),(simd_q15_t*)(output+1024+i),(simd_q15_t*)(output+2048+i), + (simd_q15_t*)(twa1536+i),(simd_q15_t*)(twb1536+i)); } @@ -2759,9 +3241,9 @@ void dft1536(int16_t *input, int16_t *output) // write_output("out1.m","o1",tmpo[1],2048,1,1); // write_output("out2.m","o2",tmpo[2],2048,1,1); for (i=0,i2=0; i<1024; i+=8,i2+=4) { - bfly3((__m128i*)(&tmpo[0][i2]),(__m128i*)(&tmpo[1][i2]),(__m128i*)(&tmpo[2][i2]), - (__m128i*)(output+i),(__m128i*)(output+1024+i),(__m128i*)(output+2048+i), - (__m128i*)(twa1536+i),(__m128i*)(twb1536+i)); + bfly3((simd_q15_t*)(&tmpo[0][i2]),(simd_q15_t*)(&tmpo[1][i2]),(simd_q15_t*)(&tmpo[2][i2]), + (simd_q15_t*)(output+i),(simd_q15_t*)(output+1024+i),(simd_q15_t*)(output+2048+i), + (simd_q15_t*)(twa1536+i),(simd_q15_t*)(twb1536+i)); } _mm_empty(); @@ -2811,9 +3293,9 @@ void idft6144(int16_t *input, int16_t *output) // write_output("out2.m","o2",tmpo[2],2048,1,1); for (i=0,i2=0; i<4096; i+=8,i2+=4) { - ibfly3((__m128i*)(&tmpo[0][i2]),(__m128i*)(&tmpo[1][i2]),((__m128i*)&tmpo[2][i2]), - (__m128i*)(output+i),(__m128i*)(output+4096+i),(__m128i*)(output+8192+i), - (__m128i*)(twa6144+i),(__m128i*)(twb6144+i)); + ibfly3((simd_q15_t*)(&tmpo[0][i2]),(simd_q15_t*)(&tmpo[1][i2]),((simd_q15_t*)&tmpo[2][i2]), + (simd_q15_t*)(output+i),(simd_q15_t*)(output+4096+i),(simd_q15_t*)(output+8192+i), + (simd_q15_t*)(twa6144+i),(simd_q15_t*)(twb6144+i)); } // write_output("out.m","out",output,6144,1,1); @@ -2850,9 +3332,9 @@ void dft6144(int16_t *input, int16_t *output) // write_output("out1.m","o1",tmpo[1],2048,1,1); // write_output("out2.m","o2",tmpo[2],2048,1,1); for (i=0,i2=0; i<4096; i+=8,i2+=4) { - bfly3((__m128i*)(&tmpo[0][i2]),(__m128i*)(&tmpo[1][i2]),(__m128i*)(&tmpo[2][i2]), - (__m128i*)(output+i),(__m128i*)(output+4096+i),(__m128i*)(output+8192+i), - (__m128i*)(twa6144+i),(__m128i*)(twb6144+i)); + bfly3((simd_q15_t*)(&tmpo[0][i2]),(simd_q15_t*)(&tmpo[1][i2]),(simd_q15_t*)(&tmpo[2][i2]), + (simd_q15_t*)(output+i),(simd_q15_t*)(output+4096+i),(simd_q15_t*)(output+8192+i), + (simd_q15_t*)(twa6144+i),(simd_q15_t*)(twb6144+i)); } _mm_empty(); @@ -2889,9 +3371,9 @@ void dft12288(int16_t *input, int16_t *output) // write_output("out1.m","o1",tmpo[1],4096,1,1); // write_output("out2.m","o2",tmpo[2],4096,1,1); for (i=0,i2=0; i<8192; i+=8,i2+=4) { - bfly3((__m128i*)(&tmpo[0][i2]),(__m128i*)(&tmpo[1][i2]),(__m128i*)(&tmpo[2][i2]), - (__m128i*)(output+i),(__m128i*)(output+8192+i),(__m128i*)(output+16384+i), - (__m128i*)(twa12288+i),(__m128i*)(twb12288+i)); + bfly3((simd_q15_t*)(&tmpo[0][i2]),(simd_q15_t*)(&tmpo[1][i2]),(simd_q15_t*)(&tmpo[2][i2]), + (simd_q15_t*)(output+i),(simd_q15_t*)(output+8192+i),(simd_q15_t*)(output+16384+i), + (simd_q15_t*)(twa12288+i),(simd_q15_t*)(twb12288+i)); } _mm_empty(); @@ -2922,9 +3404,9 @@ void idft12288(int16_t *input, int16_t *output) write_output("out2.m","o2",tmpo[2],4096,1,1); */ for (i=0,i2=0; i<8192; i+=8,i2+=4) { - ibfly3((__m128i*)(&tmpo[0][i2]),(__m128i*)(&tmpo[1][i2]),((__m128i*)&tmpo[2][i2]), - (__m128i*)(output+i),(__m128i*)(output+8192+i),(__m128i*)(output+16384+i), - (__m128i*)(twa12288+i),(__m128i*)(twb12288+i)); + ibfly3((simd_q15_t*)(&tmpo[0][i2]),(simd_q15_t*)(&tmpo[1][i2]),((simd_q15_t*)&tmpo[2][i2]), + (simd_q15_t*)(output+i),(simd_q15_t*)(output+8192+i),(simd_q15_t*)(output+16384+i), + (simd_q15_t*)(twa12288+i),(simd_q15_t*)(twb12288+i)); } _mm_empty(); @@ -2972,9 +3454,9 @@ void dft24576(int16_t *input, int16_t *output) // write_output("out1.m","o1",tmpo[1],8192,1,1); // write_output("out2.m","o2",tmpo[2],8192,1,1); for (i=0,i2=0; i<16384; i+=8,i2+=4) { - bfly3((__m128i*)(&tmpo[0][i2]),(__m128i*)(&tmpo[1][i2]),(__m128i*)(&tmpo[2][i2]), - (__m128i*)(output+i),(__m128i*)(output+16384+i),(__m128i*)(output+32768+i), - (__m128i*)(twa24576+i),(__m128i*)(twb24576+i)); + bfly3((simd_q15_t*)(&tmpo[0][i2]),(simd_q15_t*)(&tmpo[1][i2]),(simd_q15_t*)(&tmpo[2][i2]), + (simd_q15_t*)(output+i),(simd_q15_t*)(output+16384+i),(simd_q15_t*)(output+32768+i), + (simd_q15_t*)(twa24576+i),(simd_q15_t*)(twb24576+i)); } _mm_empty(); @@ -3014,9 +3496,9 @@ void idft24576(int16_t *input, int16_t *output) */ for (i=0,i2=0; i<16384; i+=8,i2+=4) { - ibfly3((__m128i*)(&tmpo[0][i2]),(__m128i*)(&tmpo[1][i2]),((__m128i*)&tmpo[2][i2]), - (__m128i*)(output+i),(__m128i*)(output+16384+i),(__m128i*)(output+32768+i), - (__m128i*)(twa24576+i),(__m128i*)(twb24576+i)); + ibfly3((simd_q15_t*)(&tmpo[0][i2]),(simd_q15_t*)(&tmpo[1][i2]),((simd_q15_t*)&tmpo[2][i2]), + (simd_q15_t*)(output+i),(simd_q15_t*)(output+16384+i),(simd_q15_t*)(output+32768+i), + (simd_q15_t*)(twa24576+i),(simd_q15_t*)(twb24576+i)); } _mm_empty(); @@ -3034,70 +3516,70 @@ static int16_t W3_12s[8]__attribute__((aligned(16))) = {0,-32767,0,-32767,0,-327 static int16_t W4_12s[8]__attribute__((aligned(16))) = {-16383,-28377,-16383,-28377,-16383,-28377,-16383,-28377}; static int16_t W6_12s[8]__attribute__((aligned(16))) = {-32767,0,-32767,0,-32767,0,-32767,0}; -__m128i *W1_12=(__m128i *)W1_12s; -__m128i *W2_12=(__m128i *)W2_12s; -__m128i *W3_12=(__m128i *)W3_12s; -__m128i *W4_12=(__m128i *)W4_12s; -__m128i *W6_12=(__m128i *)W6_12s; +simd_q15_t *W1_12=(simd_q15_t *)W1_12s; +simd_q15_t *W2_12=(simd_q15_t *)W2_12s; +simd_q15_t *W3_12=(simd_q15_t *)W3_12s; +simd_q15_t *W4_12=(simd_q15_t *)W4_12s; +simd_q15_t *W6_12=(simd_q15_t *)W6_12s; -static __m128i norm128; +static simd_q15_t norm128; -static inline void dft12f(__m128i *x0, - __m128i *x1, - __m128i *x2, - __m128i *x3, - __m128i *x4, - __m128i *x5, - __m128i *x6, - __m128i *x7, - __m128i *x8, - __m128i *x9, - __m128i *x10, - __m128i *x11, - __m128i *y0, - __m128i *y1, - __m128i *y2, - __m128i *y3, - __m128i *y4, - __m128i *y5, - __m128i *y6, - __m128i *y7, - __m128i *y8, - __m128i *y9, - __m128i *y10, - __m128i *y11) __attribute__((always_inline)); +static inline void dft12f(simd_q15_t *x0, + simd_q15_t *x1, + simd_q15_t *x2, + simd_q15_t *x3, + simd_q15_t *x4, + simd_q15_t *x5, + simd_q15_t *x6, + simd_q15_t *x7, + simd_q15_t *x8, + simd_q15_t *x9, + simd_q15_t *x10, + simd_q15_t *x11, + simd_q15_t *y0, + simd_q15_t *y1, + simd_q15_t *y2, + simd_q15_t *y3, + simd_q15_t *y4, + simd_q15_t *y5, + simd_q15_t *y6, + simd_q15_t *y7, + simd_q15_t *y8, + simd_q15_t *y9, + simd_q15_t *y10, + simd_q15_t *y11) __attribute__((always_inline)); -static inline void dft12f(__m128i *x0, - __m128i *x1, - __m128i *x2, - __m128i *x3, - __m128i *x4, - __m128i *x5, - __m128i *x6, - __m128i *x7, - __m128i *x8, - __m128i *x9, - __m128i *x10, - __m128i *x11, - __m128i *y0, - __m128i *y1, - __m128i *y2, - __m128i *y3, - __m128i *y4, - __m128i *y5, - __m128i *y6, - __m128i *y7, - __m128i *y8, - __m128i *y9, - __m128i *y10, - __m128i *y11) +static inline void dft12f(simd_q15_t *x0, + simd_q15_t *x1, + simd_q15_t *x2, + simd_q15_t *x3, + simd_q15_t *x4, + simd_q15_t *x5, + simd_q15_t *x6, + simd_q15_t *x7, + simd_q15_t *x8, + simd_q15_t *x9, + simd_q15_t *x10, + simd_q15_t *x11, + simd_q15_t *y0, + simd_q15_t *y1, + simd_q15_t *y2, + simd_q15_t *y3, + simd_q15_t *y4, + simd_q15_t *y5, + simd_q15_t *y6, + simd_q15_t *y7, + simd_q15_t *y8, + simd_q15_t *y9, + simd_q15_t *y10, + simd_q15_t *y11) { - __m128i tmp_dft12[12]; + simd_q15_t tmp_dft12[12]; - __m128i *tmp_dft12_ptr = &tmp_dft12[0]; + simd_q15_t *tmp_dft12_ptr = &tmp_dft12[0]; // msg("dft12\n"); @@ -3171,22 +3653,6 @@ static inline void dft12f(__m128i *x0, y11, W3_12, W6_12); - /* - norm128 = _mm_set1_epi16(dft_norm_table[0]); - - *y0 = _mm_slli_epi16(_mm_mulhi_epi16(*y0,norm128),1); - *y1 = _mm_slli_epi16(_mm_mulhi_epi16(*y1,norm128),1); - *y2 = _mm_slli_epi16(_mm_mulhi_epi16(*y2,norm128),1); - *y3 = _mm_slli_epi16(_mm_mulhi_epi16(*y3,norm128),1); - *y4 = _mm_slli_epi16(_mm_mulhi_epi16(*y4,norm128),1); - *y5 = _mm_slli_epi16(_mm_mulhi_epi16(*y5,norm128),1); - *y6 = _mm_slli_epi16(_mm_mulhi_epi16(*y6,norm128),1); - *y7 = _mm_slli_epi16(_mm_mulhi_epi16(*y7,norm128),1); - *y8 = _mm_slli_epi16(_mm_mulhi_epi16(*y8,norm128),1); - *y9 = _mm_slli_epi16(_mm_mulhi_epi16(*y9,norm128),1); - *y10 = _mm_slli_epi16(_mm_mulhi_epi16(*y10,norm128),1); - *y11 = _mm_slli_epi16(_mm_mulhi_epi16(*y11,norm128),1); - */ } @@ -3196,7 +3662,7 @@ static inline void dft12f(__m128i *x0, void dft12(int16_t *x,int16_t *y) { - __m128i *x128 = (__m128i *)x,*y128 = (__m128i *)y; + simd_q15_t *x128 = (simd_q15_t *)x,*y128 = (simd_q15_t *)y; dft12f(&x128[0], &x128[1], &x128[2], @@ -3240,18 +3706,18 @@ static int16_t tw24[88]__attribute__((aligned(16))) = {31650,-8480,31650,-8480,3 -31650,-8480,-31650,-8480,-31650,-8480,-31650,-8480 }; -//static __m128i ytmp128array[300]; -//static __m128i ytmp128array2[300]; -//static __m128i ytmp128array3[300]; -//static __m128i x2128array[300]; +//static simd_q15_t ytmp128array[300]; +//static simd_q15_t ytmp128array2[300]; +//static simd_q15_t ytmp128array3[300]; +//static simd_q15_t x2128array[300]; void dft24(int16_t *x,int16_t *y,unsigned char scale_flag) { - __m128i *x128=(__m128i *)x; - __m128i *y128=(__m128i *)y; - __m128i *tw128=(__m128i *)&tw24[0]; - __m128i ytmp128[24];//=&ytmp128array[0]; + simd_q15_t *x128=(simd_q15_t *)x; + simd_q15_t *y128=(simd_q15_t *)y; + simd_q15_t *tw128=(simd_q15_t *)&tw24[0]; + simd_q15_t ytmp128[24];//=&ytmp128array[0]; int i,j,k; // msg("dft24\n"); @@ -3326,10 +3792,10 @@ void dft24(int16_t *x,int16_t *y,unsigned char scale_flag) } if (scale_flag==1) { - norm128 = _mm_set1_epi16(dft_norm_table[1]); + norm128 = set1_int16(dft_norm_table[1]); for (i=0; i<24; i++) { - y128[i] = _mm_slli_epi16(_mm_mulhi_epi16(y128[i],norm128),1); + y128[i] = mulhi_int16(y128[i],norm128); } } @@ -3367,11 +3833,11 @@ static int16_t twb36[88]__attribute__((aligned(16))) = {30790,-11206,30790,-1120 void dft36(int16_t *x,int16_t *y,unsigned char scale_flag) { - __m128i *x128=(__m128i *)x; - __m128i *y128=(__m128i *)y; - __m128i *twa128=(__m128i *)&twa36[0]; - __m128i *twb128=(__m128i *)&twb36[0]; - __m128i ytmp128[36];//&ytmp128array[0]; + simd_q15_t *x128=(simd_q15_t *)x; + simd_q15_t *y128=(simd_q15_t *)y; + simd_q15_t *twa128=(simd_q15_t *)&twa36[0]; + simd_q15_t *twb128=(simd_q15_t *)&twb36[0]; + simd_q15_t ytmp128[36];//&ytmp128array[0]; int i,j,k; @@ -3472,10 +3938,10 @@ void dft36(int16_t *x,int16_t *y,unsigned char scale_flag) } if (scale_flag==1) { - norm128 = _mm_set1_epi16(dft_norm_table[2]); + norm128 = set1_int16(dft_norm_table[2]); for (i=0; i<36; i++) { - y128[i] = _mm_slli_epi16(_mm_mulhi_epi16(y128[i],norm128),1); + y128[i] = mulhi_int16(y128[i],norm128); } } @@ -3526,12 +3992,12 @@ static int16_t twc48[88]__attribute__((aligned(16))) = {30272,-12539,30272,-1253 void dft48(int16_t *x, int16_t *y,unsigned char scale_flag) { - __m128i *x128=(__m128i *)x; - __m128i *y128=(__m128i *)y; - __m128i *twa128=(__m128i *)&twa48[0]; - __m128i *twb128=(__m128i *)&twb48[0]; - __m128i *twc128=(__m128i *)&twc48[0]; - __m128i ytmp128[48];//=&ytmp128array[0]; + simd_q15_t *x128=(simd_q15_t *)x; + simd_q15_t *y128=(simd_q15_t *)y; + simd_q15_t *twa128=(simd_q15_t *)&twa48[0]; + simd_q15_t *twb128=(simd_q15_t *)&twb48[0]; + simd_q15_t *twc128=(simd_q15_t *)&twc48[0]; + simd_q15_t ytmp128[48];//=&ytmp128array[0]; int i,j,k; @@ -3668,10 +4134,10 @@ void dft48(int16_t *x, int16_t *y,unsigned char scale_flag) } if (scale_flag == 1) { - norm128 = _mm_set1_epi16(dft_norm_table[3]); + norm128 = set1_int16(dft_norm_table[3]); for (i=0; i<48; i++) { - y128[i] = _mm_slli_epi16(_mm_mulhi_epi16(y128[i],norm128),1); + y128[i] = mulhi_int16(y128[i],norm128); } } @@ -3732,13 +4198,13 @@ static int16_t twd60[88]__attribute__((aligned(16))) = {29934,-13327,29934,-1332 void dft60(int16_t *x,int16_t *y,unsigned char scale) { - __m128i *x128=(__m128i *)x; - __m128i *y128=(__m128i *)y; - __m128i *twa128=(__m128i *)&twa60[0]; - __m128i *twb128=(__m128i *)&twb60[0]; - __m128i *twc128=(__m128i *)&twc60[0]; - __m128i *twd128=(__m128i *)&twd60[0]; - __m128i ytmp128[60];//=&ytmp128array[0]; + simd_q15_t *x128=(simd_q15_t *)x; + simd_q15_t *y128=(simd_q15_t *)y; + simd_q15_t *twa128=(simd_q15_t *)&twa60[0]; + simd_q15_t *twb128=(simd_q15_t *)&twb60[0]; + simd_q15_t *twc128=(simd_q15_t *)&twc60[0]; + simd_q15_t *twd128=(simd_q15_t *)&twd60[0]; + simd_q15_t ytmp128[60];//=&ytmp128array[0]; int i,j,k; dft12f(x128, @@ -3896,10 +4362,10 @@ void dft60(int16_t *x,int16_t *y,unsigned char scale) } if (scale == 1) { - norm128 = _mm_set1_epi16(dft_norm_table[4]); + norm128 = set1_int16(dft_norm_table[4]); for (i=0; i<60; i++) { - y128[i] = _mm_slli_epi16(_mm_mulhi_epi16(y128[i],norm128),1); + y128[i] = mulhi_int16(y128[i],norm128); } } @@ -3949,12 +4415,12 @@ void dft72(int16_t *x,int16_t *y,unsigned char scale_flag) { int i,j; - __m128i *x128=(__m128i *)x; - __m128i *y128=(__m128i *)y; - __m128i *tw128=(__m128i *)&tw72[0]; - __m128i x2128[72];// = (__m128i *)&x2128array[0]; + simd_q15_t *x128=(simd_q15_t *)x; + simd_q15_t *y128=(simd_q15_t *)y; + simd_q15_t *tw128=(simd_q15_t *)&tw72[0]; + simd_q15_t x2128[72];// = (simd_q15_t *)&x2128array[0]; - __m128i ytmp128[72];//=&ytmp128array2[0]; + simd_q15_t ytmp128[72];//=&ytmp128array2[0]; for (i=0,j=0; i<36; i++,j+=2) { x2128[i] = x128[j]; // even inputs @@ -3975,10 +4441,10 @@ void dft72(int16_t *x,int16_t *y,unsigned char scale_flag) } if (scale_flag==1) { - norm128 = _mm_set1_epi16(dft_norm_table[5]); + norm128 = set1_int16(dft_norm_table[5]); for (i=0; i<72; i++) { - y128[i] = _mm_slli_epi16(_mm_mulhi_epi16(y128[i],norm128),1); + y128[i] = mulhi_int16(y128[i],norm128); } } @@ -4041,11 +4507,11 @@ void dft96(int16_t *x,int16_t *y,unsigned char scale_flag) int i,j; - __m128i *x128=(__m128i *)x; - __m128i *y128=(__m128i *)y; - __m128i *tw128=(__m128i *)&tw96[0]; - __m128i x2128[96];// = (__m128i *)&x2128array[0]; - __m128i ytmp128[96];//=&ytmp128array2[0]; + simd_q15_t *x128=(simd_q15_t *)x; + simd_q15_t *y128=(simd_q15_t *)y; + simd_q15_t *tw128=(simd_q15_t *)&tw96[0]; + simd_q15_t x2128[96];// = (simd_q15_t *)&x2128array[0]; + simd_q15_t ytmp128[96];//=&ytmp128array2[0]; for (i=0,j=0; i<48; i++,j+=2) { @@ -4068,10 +4534,10 @@ void dft96(int16_t *x,int16_t *y,unsigned char scale_flag) } if (scale_flag==1) { - norm128 = _mm_set1_epi16(dft_norm_table[6]); + norm128 = set1_int16(dft_norm_table[6]); for (i=0; i<96; i++) { - y128[i] = _mm_slli_epi16(_mm_mulhi_epi16(y128[i],norm128),1); + y128[i] = mulhi_int16(y128[i],norm128); } } @@ -4159,12 +4625,12 @@ void dft108(int16_t *x,int16_t *y,unsigned char scale_flag) int i,j; - __m128i *x128=(__m128i *)x; - __m128i *y128=(__m128i *)y; - __m128i *twa128=(__m128i *)&twa108[0]; - __m128i *twb128=(__m128i *)&twb108[0]; - __m128i x2128[108];// = (__m128i *)&x2128array[0]; - __m128i ytmp128[108];//=&ytmp128array2[0]; + simd_q15_t *x128=(simd_q15_t *)x; + simd_q15_t *y128=(simd_q15_t *)y; + simd_q15_t *twa128=(simd_q15_t *)&twa108[0]; + simd_q15_t *twb128=(simd_q15_t *)&twb108[0]; + simd_q15_t x2128[108];// = (simd_q15_t *)&x2128array[0]; + simd_q15_t ytmp128[108];//=&ytmp128array2[0]; for (i=0,j=0; i<36; i++,j+=3) { @@ -4192,10 +4658,10 @@ void dft108(int16_t *x,int16_t *y,unsigned char scale_flag) } if (scale_flag==1) { - norm128 = _mm_set1_epi16(dft_norm_table[7]); + norm128 = set1_int16(dft_norm_table[7]); for (i=0; i<108; i++) { - y128[i] = _mm_slli_epi16(_mm_mulhi_epi16(y128[i],norm128),1); + y128[i] = mulhi_int16(y128[i],norm128); } } @@ -4270,11 +4736,11 @@ void dft120(int16_t *x,int16_t *y, unsigned char scale_flag) int i,j; - __m128i *x128=(__m128i *)x; - __m128i *y128=(__m128i *)y; - __m128i *tw128=(__m128i *)&tw120[0]; - __m128i x2128[120];// = (__m128i *)&x2128array[0]; - __m128i ytmp128[120];//=&ytmp128array2[0]; + simd_q15_t *x128=(simd_q15_t *)x; + simd_q15_t *y128=(simd_q15_t *)y; + simd_q15_t *tw128=(simd_q15_t *)&tw120[0]; + simd_q15_t x2128[120];// = (simd_q15_t *)&x2128array[0]; + simd_q15_t ytmp128[120];//=&ytmp128array2[0]; for (i=0,j=0; i<60; i++,j+=2) { @@ -4297,10 +4763,10 @@ void dft120(int16_t *x,int16_t *y, unsigned char scale_flag) } if (scale_flag==1) { - norm128 = _mm_set1_epi16(dft_norm_table[8]); + norm128 = set1_int16(dft_norm_table[8]); for (i=0; i<120; i++) { - y128[i] = _mm_slli_epi16(_mm_mulhi_epi16(y128[i],norm128),1); + y128[i] = mulhi_int16(y128[i],norm128); } } @@ -4411,12 +4877,12 @@ void dft144(int16_t *x,int16_t *y,unsigned char scale_flag) { int i,j; - __m128i *x128=(__m128i *)x; - __m128i *y128=(__m128i *)y; - __m128i *twa128=(__m128i *)&twa144[0]; - __m128i *twb128=(__m128i *)&twb144[0]; - __m128i x2128[144];// = (__m128i *)&x2128array[0]; - __m128i ytmp128[144];//=&ytmp128array2[0]; + simd_q15_t *x128=(simd_q15_t *)x; + simd_q15_t *y128=(simd_q15_t *)y; + simd_q15_t *twa128=(simd_q15_t *)&twa144[0]; + simd_q15_t *twb128=(simd_q15_t *)&twb144[0]; + simd_q15_t x2128[144];// = (simd_q15_t *)&x2128array[0]; + simd_q15_t ytmp128[144];//=&ytmp128array2[0]; @@ -4444,10 +4910,10 @@ void dft144(int16_t *x,int16_t *y,unsigned char scale_flag) } if (scale_flag==1) { - norm128 = _mm_set1_epi16(dft_norm_table[9]); + norm128 = set1_int16(dft_norm_table[9]); for (i=0; i<144; i++) { - y128[i] = _mm_slli_epi16(_mm_mulhi_epi16(y128[i],norm128),1); + y128[i] = mulhi_int16(y128[i],norm128); } } @@ -4582,12 +5048,12 @@ void dft180(int16_t *x,int16_t *y,unsigned char scale_flag) { int i,j; - __m128i *x128=(__m128i *)x; - __m128i *y128=(__m128i *)y; - __m128i *twa128=(__m128i *)&twa180[0]; - __m128i *twb128=(__m128i *)&twb180[0]; - __m128i x2128[180];// = (__m128i *)&x2128array[0]; - __m128i ytmp128[180];//=&ytmp128array2[0]; + simd_q15_t *x128=(simd_q15_t *)x; + simd_q15_t *y128=(simd_q15_t *)y; + simd_q15_t *twa128=(simd_q15_t *)&twa180[0]; + simd_q15_t *twb128=(simd_q15_t *)&twb180[0]; + simd_q15_t x2128[180];// = (simd_q15_t *)&x2128array[0]; + simd_q15_t ytmp128[180];//=&ytmp128array2[0]; @@ -4615,10 +5081,10 @@ void dft180(int16_t *x,int16_t *y,unsigned char scale_flag) } if (scale_flag==1) { - norm128 = _mm_set1_epi16(dft_norm_table[10]); + norm128 = set1_int16(dft_norm_table[10]); for (i=0; i<180; i++) { - y128[i] = _mm_slli_epi16(_mm_mulhi_epi16(y128[i],norm128),1); + y128[i] = mulhi_int16(y128[i],norm128); } } @@ -4778,13 +5244,13 @@ void dft192(int16_t *x,int16_t *y,unsigned char scale_flag) { int i,j; - __m128i *x128=(__m128i *)x; - __m128i *y128=(__m128i *)y; - __m128i *twa128=(__m128i *)&twa192[0]; - __m128i *twb128=(__m128i *)&twb192[0]; - __m128i *twc128=(__m128i *)&twc192[0]; - __m128i x2128[192];// = (__m128i *)&x2128array[0]; - __m128i ytmp128[192];//=&ytmp128array2[0]; + simd_q15_t *x128=(simd_q15_t *)x; + simd_q15_t *y128=(simd_q15_t *)y; + simd_q15_t *twa128=(simd_q15_t *)&twa192[0]; + simd_q15_t *twb128=(simd_q15_t *)&twb192[0]; + simd_q15_t *twc128=(simd_q15_t *)&twc192[0]; + simd_q15_t x2128[192];// = (simd_q15_t *)&x2128array[0]; + simd_q15_t ytmp128[192];//=&ytmp128array2[0]; @@ -4817,10 +5283,10 @@ void dft192(int16_t *x,int16_t *y,unsigned char scale_flag) } if (scale_flag==1) { - norm128 = _mm_set1_epi16(dft_norm_table[11]); + norm128 = set1_int16(dft_norm_table[11]); for (i=0; i<192; i++) { - y128[i] = _mm_slli_epi16(_mm_mulhi_epi16(y128[i],norm128),1); + y128[i] = mulhi_int16(y128[i],norm128); } } @@ -4979,12 +5445,12 @@ void dft216(int16_t *x,int16_t *y,unsigned char scale_flag) { int i,j; - __m128i *x128=(__m128i *)x; - __m128i *y128=(__m128i *)y; - __m128i *twa128=(__m128i *)&twa216[0]; - __m128i *twb128=(__m128i *)&twb216[0]; - __m128i x2128[216];// = (__m128i *)&x2128array[0]; - __m128i ytmp128[216];//=&ytmp128array3[0]; + simd_q15_t *x128=(simd_q15_t *)x; + simd_q15_t *y128=(simd_q15_t *)y; + simd_q15_t *twa128=(simd_q15_t *)&twa216[0]; + simd_q15_t *twb128=(simd_q15_t *)&twb216[0]; + simd_q15_t x2128[216];// = (simd_q15_t *)&x2128array[0]; + simd_q15_t ytmp128[216];//=&ytmp128array3[0]; @@ -5012,10 +5478,10 @@ void dft216(int16_t *x,int16_t *y,unsigned char scale_flag) } if (scale_flag==1) { - norm128 = _mm_set1_epi16(dft_norm_table[12]); + norm128 = set1_int16(dft_norm_table[12]); for (i=0; i<216; i++) { - y128[i] = _mm_slli_epi16(_mm_mulhi_epi16(y128[i],norm128),1); + y128[i] = mulhi_int16(y128[i],norm128); } } @@ -5211,13 +5677,13 @@ void dft240(int16_t *x,int16_t *y,unsigned char scale_flag) { int i,j; - __m128i *x128=(__m128i *)x; - __m128i *y128=(__m128i *)y; - __m128i *twa128=(__m128i *)&twa240[0]; - __m128i *twb128=(__m128i *)&twb240[0]; - __m128i *twc128=(__m128i *)&twc240[0]; - __m128i x2128[240];// = (__m128i *)&x2128array[0]; - __m128i ytmp128[240];//=&ytmp128array2[0]; + simd_q15_t *x128=(simd_q15_t *)x; + simd_q15_t *y128=(simd_q15_t *)y; + simd_q15_t *twa128=(simd_q15_t *)&twa240[0]; + simd_q15_t *twb128=(simd_q15_t *)&twb240[0]; + simd_q15_t *twc128=(simd_q15_t *)&twc240[0]; + simd_q15_t x2128[240];// = (simd_q15_t *)&x2128array[0]; + simd_q15_t ytmp128[240];//=&ytmp128array2[0]; @@ -5250,10 +5716,10 @@ void dft240(int16_t *x,int16_t *y,unsigned char scale_flag) } if (scale_flag==1) { - norm128 = _mm_set1_epi16(dft_norm_table[13]); + norm128 = set1_int16(dft_norm_table[13]); for (i=0; i<240; i++) { - y128[i] = _mm_slli_epi16(_mm_mulhi_epi16(y128[i],norm128),1); + y128[i] = mulhi_int16(y128[i],norm128); } } @@ -5472,12 +5938,12 @@ void dft288(int16_t *x,int16_t *y,unsigned char scale_flag) { int i,j; - __m128i *x128=(__m128i *)x; - __m128i *y128=(__m128i *)y; - __m128i *twa128=(__m128i *)&twa288[0]; - __m128i *twb128=(__m128i *)&twb288[0]; - __m128i x2128[288];// = (__m128i *)&x2128array[0]; - __m128i ytmp128[288];//=&ytmp128array3[0]; + simd_q15_t *x128=(simd_q15_t *)x; + simd_q15_t *y128=(simd_q15_t *)y; + simd_q15_t *twa128=(simd_q15_t *)&twa288[0]; + simd_q15_t *twb128=(simd_q15_t *)&twb288[0]; + simd_q15_t x2128[288];// = (simd_q15_t *)&x2128array[0]; + simd_q15_t ytmp128[288];//=&ytmp128array3[0]; @@ -5505,10 +5971,10 @@ void dft288(int16_t *x,int16_t *y,unsigned char scale_flag) } if (scale_flag==1) { - norm128 = _mm_set1_epi16(dft_norm_table[14]); + norm128 = set1_int16(dft_norm_table[14]); for (i=0; i<288; i++) { - y128[i] = _mm_slli_epi16(_mm_mulhi_epi16(y128[i],norm128),1); + y128[i] = mulhi_int16(y128[i],norm128); } } @@ -5765,14 +6231,14 @@ void dft300(int16_t *x,int16_t *y,unsigned char scale_flag) { int i,j; - __m128i *x128=(__m128i *)x; - __m128i *y128=(__m128i *)y; - __m128i *twa128=(__m128i *)&twa300[0]; - __m128i *twb128=(__m128i *)&twb300[0]; - __m128i *twc128=(__m128i *)&twc300[0]; - __m128i *twd128=(__m128i *)&twd300[0]; - __m128i x2128[300];// = (__m128i *)&x2128array[0]; - __m128i ytmp128[300];//=&ytmp128array2[0]; + simd_q15_t *x128=(simd_q15_t *)x; + simd_q15_t *y128=(simd_q15_t *)y; + simd_q15_t *twa128=(simd_q15_t *)&twa300[0]; + simd_q15_t *twb128=(simd_q15_t *)&twb300[0]; + simd_q15_t *twc128=(simd_q15_t *)&twc300[0]; + simd_q15_t *twd128=(simd_q15_t *)&twd300[0]; + simd_q15_t x2128[300];// = (simd_q15_t *)&x2128array[0]; + simd_q15_t ytmp128[300];//=&ytmp128array2[0]; @@ -5810,10 +6276,10 @@ void dft300(int16_t *x,int16_t *y,unsigned char scale_flag) } if (scale_flag==1) { - norm128 = _mm_set1_epi16(dft_norm_table[15]); + norm128 = set1_int16(dft_norm_table[15]); for (i=0; i<300; i++) { - y128[i] = _mm_slli_epi16(_mm_mulhi_epi16(y128[i],norm128),1); + y128[i] = mulhi_int16(y128[i],norm128); } } @@ -6066,12 +6532,12 @@ static int16_t twb324[107*2*4] = {32742,-1271,32742,-1271,32742,-1271,32742,-127 void dft324(int16_t *x,int16_t *y,unsigned char scale_flag) // 108 x 3 { int i,j; - __m128i *x128=(__m128i *)x; - __m128i *y128=(__m128i *)y; - __m128i *twa128=(__m128i *)&twa324[0]; - __m128i *twb128=(__m128i *)&twb324[0]; - __m128i x2128[324];// = (__m128i *)&x2128array[0]; - __m128i ytmp128[324];//=&ytmp128array3[0]; + simd_q15_t *x128=(simd_q15_t *)x; + simd_q15_t *y128=(simd_q15_t *)y; + simd_q15_t *twa128=(simd_q15_t *)&twa324[0]; + simd_q15_t *twb128=(simd_q15_t *)&twb324[0]; + simd_q15_t x2128[324];// = (simd_q15_t *)&x2128array[0]; + simd_q15_t ytmp128[324];//=&ytmp128array3[0]; @@ -6099,10 +6565,10 @@ void dft324(int16_t *x,int16_t *y,unsigned char scale_flag) // 108 x 3 } if (scale_flag==1) { - norm128 = _mm_set1_epi16(dft_norm_table[14]); + norm128 = set1_int16(dft_norm_table[14]); for (i=0; i<324; i++) { - y128[i] = _mm_slli_epi16(_mm_mulhi_epi16(y128[i],norm128),1); + y128[i] = mulhi_int16(y128[i],norm128); } } @@ -6380,12 +6846,12 @@ static int16_t twb360[119*2*4] = {32747,-1144,32747,-1144,32747,-1144,32747,-114 void dft360(int16_t *x,int16_t *y,unsigned char scale_flag) // 120 x 3 { int i,j; - __m128i *x128=(__m128i *)x; - __m128i *y128=(__m128i *)y; - __m128i *twa128=(__m128i *)&twa360[0]; - __m128i *twb128=(__m128i *)&twb360[0]; - __m128i x2128[360];// = (__m128i *)&x2128array[0]; - __m128i ytmp128[360];//=&ytmp128array3[0]; + simd_q15_t *x128=(simd_q15_t *)x; + simd_q15_t *y128=(simd_q15_t *)y; + simd_q15_t *twa128=(simd_q15_t *)&twa360[0]; + simd_q15_t *twb128=(simd_q15_t *)&twb360[0]; + simd_q15_t x2128[360];// = (simd_q15_t *)&x2128array[0]; + simd_q15_t ytmp128[360];//=&ytmp128array3[0]; @@ -6413,10 +6879,10 @@ void dft360(int16_t *x,int16_t *y,unsigned char scale_flag) // 120 x 3 } if (scale_flag==1) { - norm128 = _mm_set1_epi16(dft_norm_table[14]); + norm128 = set1_int16(dft_norm_table[14]); for (i=0; i<360; i++) { - y128[i] = _mm_slli_epi16(_mm_mulhi_epi16(y128[i],norm128),1); + y128[i] = mulhi_int16(y128[i],norm128); } } @@ -6752,13 +7218,13 @@ static int16_t twc384[95*2*4] = {32727,-1608,32727,-1608,32727,-1608,32727,-1608 void dft384(int16_t *x,int16_t *y,unsigned char scale_flag) // 96 x 4 { int i,j; - __m128i *x128=(__m128i *)x; - __m128i *y128=(__m128i *)y; - __m128i *twa128=(__m128i *)&twa384[0]; - __m128i *twb128=(__m128i *)&twb384[0]; - __m128i *twc128=(__m128i *)&twc384[0]; - __m128i x2128[384];// = (__m128i *)&x2128array[0]; - __m128i ytmp128[384];//=&ytmp128array2[0]; + simd_q15_t *x128=(simd_q15_t *)x; + simd_q15_t *y128=(simd_q15_t *)y; + simd_q15_t *twa128=(simd_q15_t *)&twa384[0]; + simd_q15_t *twb128=(simd_q15_t *)&twb384[0]; + simd_q15_t *twc128=(simd_q15_t *)&twc384[0]; + simd_q15_t x2128[384];// = (simd_q15_t *)&x2128array[0]; + simd_q15_t ytmp128[384];//=&ytmp128array2[0]; @@ -6791,10 +7257,10 @@ void dft384(int16_t *x,int16_t *y,unsigned char scale_flag) // 96 x 4 } if (scale_flag==1) { - norm128 = _mm_set1_epi16(16384);//dft_norm_table[13]); + norm128 = set1_int16(16384);//dft_norm_table[13]); for (i=0; i<384; i++) { - y128[i] = _mm_slli_epi16(_mm_mulhi_epi16(y128[i],norm128),1); + y128[i] = mulhi_int16(y128[i],norm128); } } @@ -7167,13 +7633,13 @@ static int16_t twc432[107*2*4] = {32735,-1430,32735,-1430,32735,-1430,32735,-143 void dft432(int16_t *x,int16_t *y,unsigned char scale_flag) // 108 x 4 { int i,j; - __m128i *x128=(__m128i *)x; - __m128i *y128=(__m128i *)y; - __m128i *twa128=(__m128i *)&twa432[0]; - __m128i *twb128=(__m128i *)&twb432[0]; - __m128i *twc128=(__m128i *)&twc432[0]; - __m128i x2128[432];// = (__m128i *)&x2128array[0]; - __m128i ytmp128[432];//=&ytmp128array2[0]; + simd_q15_t *x128=(simd_q15_t *)x; + simd_q15_t *y128=(simd_q15_t *)y; + simd_q15_t *twa128=(simd_q15_t *)&twa432[0]; + simd_q15_t *twb128=(simd_q15_t *)&twb432[0]; + simd_q15_t *twc128=(simd_q15_t *)&twc432[0]; + simd_q15_t x2128[432];// = (simd_q15_t *)&x2128array[0]; + simd_q15_t ytmp128[432];//=&ytmp128array2[0]; for (i=0,j=0; i<108; i++,j+=4) { @@ -7205,10 +7671,10 @@ void dft432(int16_t *x,int16_t *y,unsigned char scale_flag) // 108 x 4 } if (scale_flag==1) { - norm128 = _mm_set1_epi16(16384);//dft_norm_table[13]); + norm128 = set1_int16(16384);//dft_norm_table[13]); for (i=0; i<432; i++) { - y128[i] = _mm_slli_epi16(_mm_mulhi_epi16(y128[i],norm128),1); + y128[i] = mulhi_int16(y128[i],norm128); } } @@ -7616,13 +8082,13 @@ static int16_t twc480[119*2*4] = {32741,-1287,32741,-1287,32741,-1287,32741,-128 void dft480(int16_t *x,int16_t *y,unsigned char scale_flag) // 120 x 4 { int i,j; - __m128i *x128=(__m128i *)x; - __m128i *y128=(__m128i *)y; - __m128i *twa128=(__m128i *)&twa480[0]; - __m128i *twb128=(__m128i *)&twb480[0]; - __m128i *twc128=(__m128i *)&twc480[0]; - __m128i x2128[480];// = (__m128i *)&x2128array[0]; - __m128i ytmp128[480];//=&ytmp128array2[0]; + simd_q15_t *x128=(simd_q15_t *)x; + simd_q15_t *y128=(simd_q15_t *)y; + simd_q15_t *twa128=(simd_q15_t *)&twa480[0]; + simd_q15_t *twb128=(simd_q15_t *)&twb480[0]; + simd_q15_t *twc128=(simd_q15_t *)&twc480[0]; + simd_q15_t x2128[480];// = (simd_q15_t *)&x2128array[0]; + simd_q15_t ytmp128[480];//=&ytmp128array2[0]; @@ -7655,10 +8121,10 @@ void dft480(int16_t *x,int16_t *y,unsigned char scale_flag) // 120 x 4 } if (scale_flag==1) { - norm128 = _mm_set1_epi16(16384);//dft_norm_table[13]); + norm128 = set1_int16(16384);//dft_norm_table[13]); for (i=0; i<480; i++) { - y128[i] = _mm_slli_epi16(_mm_mulhi_epi16(y128[i],norm128),1); + y128[i] = mulhi_int16(y128[i],norm128); } } @@ -8057,12 +8523,12 @@ static int16_t twb540[179*2*4] = {32758,-763,32758,-763,32758,-763,32758,-763, void dft540(int16_t *x,int16_t *y,unsigned char scale_flag) // 180 x 3 { int i,j; - __m128i *x128=(__m128i *)x; - __m128i *y128=(__m128i *)y; - __m128i *twa128=(__m128i *)&twa540[0]; - __m128i *twb128=(__m128i *)&twb540[0]; - __m128i x2128[540];// = (__m128i *)&x2128array[0]; - __m128i ytmp128[540];//=&ytmp128array3[0]; + simd_q15_t *x128=(simd_q15_t *)x; + simd_q15_t *y128=(simd_q15_t *)y; + simd_q15_t *twa128=(simd_q15_t *)&twa540[0]; + simd_q15_t *twb128=(simd_q15_t *)&twb540[0]; + simd_q15_t x2128[540];// = (simd_q15_t *)&x2128array[0]; + simd_q15_t ytmp128[540];//=&ytmp128array3[0]; @@ -8090,10 +8556,10 @@ void dft540(int16_t *x,int16_t *y,unsigned char scale_flag) // 180 x 3 } if (scale_flag==1) { - norm128 = _mm_set1_epi16(dft_norm_table[14]); + norm128 = set1_int16(dft_norm_table[14]); for (i=0; i<540; i++) { - y128[i] = _mm_slli_epi16(_mm_mulhi_epi16(y128[i],norm128),1); + y128[i] = mulhi_int16(y128[i],norm128); } } @@ -8516,12 +8982,12 @@ static int16_t twb576[191*2*4] = {32759,-715,32759,-715,32759,-715,32759,-715, void dft576(int16_t *x,int16_t *y,unsigned char scale_flag) // 192 x 3 { int i,j; - __m128i *x128=(__m128i *)x; - __m128i *y128=(__m128i *)y; - __m128i *twa128=(__m128i *)&twa576[0]; - __m128i *twb128=(__m128i *)&twb576[0]; - __m128i x2128[576];// = (__m128i *)&x2128array[0]; - __m128i ytmp128[576];//=&ytmp128array3[0]; + simd_q15_t *x128=(simd_q15_t *)x; + simd_q15_t *y128=(simd_q15_t *)y; + simd_q15_t *twa128=(simd_q15_t *)&twa576[0]; + simd_q15_t *twb128=(simd_q15_t *)&twb576[0]; + simd_q15_t x2128[576];// = (simd_q15_t *)&x2128array[0]; + simd_q15_t ytmp128[576];//=&ytmp128array3[0]; @@ -8550,10 +9016,10 @@ void dft576(int16_t *x,int16_t *y,unsigned char scale_flag) // 192 x 3 } if (scale_flag==1) { - norm128 = _mm_set1_epi16(dft_norm_table[14]); + norm128 = set1_int16(dft_norm_table[14]); for (i=0; i<576; i++) { - y128[i] = _mm_slli_epi16(_mm_mulhi_epi16(y128[i],norm128),1); + y128[i] = mulhi_int16(y128[i],norm128); } } @@ -8879,11 +9345,11 @@ static int16_t twa600[299*2*4] = {32765,-344,32765,-344,32765,-344,32765,-344, void dft600(int16_t *x,int16_t *y,unsigned char scale_flag) // 300 x 2 { int i,j; - __m128i *x128=(__m128i *)x; - __m128i *y128=(__m128i *)y; - __m128i *tw128=(__m128i *)&twa600[0]; - __m128i x2128[600];// = (__m128i *)&x2128array[0]; - __m128i ytmp128[600];//=&ytmp128array2[0]; + simd_q15_t *x128=(simd_q15_t *)x; + simd_q15_t *y128=(simd_q15_t *)y; + simd_q15_t *tw128=(simd_q15_t *)&twa600[0]; + simd_q15_t x2128[600];// = (simd_q15_t *)&x2128array[0]; + simd_q15_t ytmp128[600];//=&ytmp128array2[0]; for (i=0,j=0; i<300; i++,j+=2) { @@ -8906,10 +9372,10 @@ void dft600(int16_t *x,int16_t *y,unsigned char scale_flag) // 300 x 2 } if (scale_flag==1) { - norm128 = _mm_set1_epi16(ONE_OVER_SQRT2_Q15); + norm128 = set1_int16(ONE_OVER_SQRT2_Q15); for (i=0; i<600; i++) { - y128[i] = _mm_slli_epi16(_mm_mulhi_epi16(y128[i],norm128),1); + y128[i] = mulhi_int16(y128[i],norm128); } } @@ -9380,12 +9846,12 @@ static int16_t twb648[215*2*4] = {32760,-636,32760,-636,32760,-636,32760,-636, void dft648(int16_t *x,int16_t *y,unsigned char scale_flag) // 216 x 3 { int i,j; - __m128i *x128=(__m128i *)x; - __m128i *y128=(__m128i *)y; - __m128i *twa128=(__m128i *)&twa648[0]; - __m128i *twb128=(__m128i *)&twb648[0]; - __m128i x2128[648];// = (__m128i *)&x2128array[0]; - __m128i ytmp128[648];//=&ytmp128array3[0]; + simd_q15_t *x128=(simd_q15_t *)x; + simd_q15_t *y128=(simd_q15_t *)y; + simd_q15_t *twa128=(simd_q15_t *)&twa648[0]; + simd_q15_t *twb128=(simd_q15_t *)&twb648[0]; + simd_q15_t x2128[648];// = (simd_q15_t *)&x2128array[0]; + simd_q15_t ytmp128[648];//=&ytmp128array3[0]; @@ -9413,10 +9879,10 @@ void dft648(int16_t *x,int16_t *y,unsigned char scale_flag) // 216 x 3 } if (scale_flag==1) { - norm128 = _mm_set1_epi16(dft_norm_table[14]); + norm128 = set1_int16(dft_norm_table[14]); for (i=0; i<648; i++) { - y128[i] = _mm_slli_epi16(_mm_mulhi_epi16(y128[i],norm128),1); + y128[i] = mulhi_int16(y128[i],norm128); } } @@ -10007,13 +10473,13 @@ static int16_t twc720[179*2*4] = {32755,-858,32755,-858,32755,-858,32755,-858, void dft720(int16_t *x,int16_t *y,unsigned char scale_flag) // 180 x 4 { int i,j; - __m128i *x128=(__m128i *)x; - __m128i *y128=(__m128i *)y; - __m128i *twa128=(__m128i *)&twa720[0]; - __m128i *twb128=(__m128i *)&twb720[0]; - __m128i *twc128=(__m128i *)&twc720[0]; - __m128i x2128[720];// = (__m128i *)&x2128array[0]; - __m128i ytmp128[720];//=&ytmp128array2[0]; + simd_q15_t *x128=(simd_q15_t *)x; + simd_q15_t *y128=(simd_q15_t *)y; + simd_q15_t *twa128=(simd_q15_t *)&twa720[0]; + simd_q15_t *twb128=(simd_q15_t *)&twb720[0]; + simd_q15_t *twc128=(simd_q15_t *)&twc720[0]; + simd_q15_t x2128[720];// = (simd_q15_t *)&x2128array[0]; + simd_q15_t ytmp128[720];//=&ytmp128array2[0]; @@ -10046,10 +10512,10 @@ void dft720(int16_t *x,int16_t *y,unsigned char scale_flag) // 180 x 4 } if (scale_flag==1) { - norm128 = _mm_set1_epi16(16384);//dft_norm_table[13]); + norm128 = set1_int16(16384);//dft_norm_table[13]); for (i=0; i<720; i++) { - y128[i] = _mm_slli_epi16(_mm_mulhi_epi16(y128[i],norm128),1); + y128[i] = mulhi_int16(y128[i],norm128); } } @@ -10662,12 +11128,12 @@ static int16_t twb864[287*2*4] = {32763,-477,32763,-477,32763,-477,32763,-477, void dft864(int16_t *x,int16_t *y,unsigned char scale_flag) // 288 x 3 { int i,j; - __m128i *x128=(__m128i *)x; - __m128i *y128=(__m128i *)y; - __m128i *twa128=(__m128i *)&twa864[0]; - __m128i *twb128=(__m128i *)&twb864[0]; - __m128i x2128[864];// = (__m128i *)&x2128array[0]; - __m128i ytmp128[864];//=&ytmp128array3[0]; + simd_q15_t *x128=(simd_q15_t *)x; + simd_q15_t *y128=(simd_q15_t *)y; + simd_q15_t *twa128=(simd_q15_t *)&twa864[0]; + simd_q15_t *twb128=(simd_q15_t *)&twb864[0]; + simd_q15_t x2128[864];// = (simd_q15_t *)&x2128array[0]; + simd_q15_t ytmp128[864];//=&ytmp128array3[0]; @@ -10695,10 +11161,10 @@ void dft864(int16_t *x,int16_t *y,unsigned char scale_flag) // 288 x 3 } if (scale_flag==1) { - norm128 = _mm_set1_epi16(dft_norm_table[14]); + norm128 = set1_int16(dft_norm_table[14]); for (i=0; i<864; i++) { - y128[i] = _mm_slli_epi16(_mm_mulhi_epi16(y128[i],norm128),1); + y128[i] = mulhi_int16(y128[i],norm128); } } @@ -11335,12 +11801,12 @@ static int16_t twb900[299*2*4] = {32763,-458,32763,-458,32763,-458,32763,-458, void dft900(int16_t *x,int16_t *y,unsigned char scale_flag) // 300 x 3 { int i,j; - __m128i *x128=(__m128i *)x; - __m128i *y128=(__m128i *)y; - __m128i *twa128=(__m128i *)&twa900[0]; - __m128i *twb128=(__m128i *)&twb900[0]; - __m128i x2128[900];// = (__m128i *)&x2128array[0]; - __m128i ytmp128[900];//=&ytmp128array3[0]; + simd_q15_t *x128=(simd_q15_t *)x; + simd_q15_t *y128=(simd_q15_t *)y; + simd_q15_t *twa128=(simd_q15_t *)&twa900[0]; + simd_q15_t *twb128=(simd_q15_t *)&twb900[0]; + simd_q15_t x2128[900];// = (simd_q15_t *)&x2128array[0]; + simd_q15_t ytmp128[900];//=&ytmp128array3[0]; @@ -11368,10 +11834,10 @@ void dft900(int16_t *x,int16_t *y,unsigned char scale_flag) // 300 x 3 } if (scale_flag==1) { - norm128 = _mm_set1_epi16(dft_norm_table[14]); + norm128 = set1_int16(dft_norm_table[14]); for (i=0; i<900; i++) { - y128[i] = _mm_slli_epi16(_mm_mulhi_epi16(y128[i],norm128),1); + y128[i] = mulhi_int16(y128[i],norm128); } } @@ -12141,13 +12607,13 @@ static int16_t twc960[239*2*4] = {32760,-644,32760,-644,32760,-644,32760,-644, void dft960(int16_t *x,int16_t *y,unsigned char scale_flag) // 240 x 4 { int i,j; - __m128i *x128=(__m128i *)x; - __m128i *y128=(__m128i *)y; - __m128i *twa128=(__m128i *)&twa960[0]; - __m128i *twb128=(__m128i *)&twb960[0]; - __m128i *twc128=(__m128i *)&twc960[0]; - __m128i x2128[960];// = (__m128i *)&x2128array[0]; - __m128i ytmp128[960];//=&ytmp128array2[0]; + simd_q15_t *x128=(simd_q15_t *)x; + simd_q15_t *y128=(simd_q15_t *)y; + simd_q15_t *twa128=(simd_q15_t *)&twa960[0]; + simd_q15_t *twb128=(simd_q15_t *)&twb960[0]; + simd_q15_t *twc128=(simd_q15_t *)&twc960[0]; + simd_q15_t x2128[960];// = (simd_q15_t *)&x2128array[0]; + simd_q15_t ytmp128[960];//=&ytmp128array2[0]; @@ -12180,10 +12646,10 @@ void dft960(int16_t *x,int16_t *y,unsigned char scale_flag) // 240 x 4 } if (scale_flag==1) { - norm128 = _mm_set1_epi16(16384);//dft_norm_table[13]); + norm128 = set1_int16(16384);//dft_norm_table[13]); for (i=0; i<960; i++) { - y128[i] = _mm_slli_epi16(_mm_mulhi_epi16(y128[i],norm128),1); + y128[i] = mulhi_int16(y128[i],norm128); } } @@ -12868,12 +13334,12 @@ static int16_t twb972[323*2*4] = {32764,-424,32764,-424,32764,-424,32764,-424, void dft972(int16_t *x,int16_t *y,unsigned char scale_flag) // 324 x 3 { int i,j; - __m128i *x128=(__m128i *)x; - __m128i *y128=(__m128i *)y; - __m128i *twa128=(__m128i *)&twa972[0]; - __m128i *twb128=(__m128i *)&twb972[0]; - __m128i x2128[972];// = (__m128i *)&x2128array[0]; - __m128i ytmp128[972];//=&ytmp128array3[0]; + simd_q15_t *x128=(simd_q15_t *)x; + simd_q15_t *y128=(simd_q15_t *)y; + simd_q15_t *twa128=(simd_q15_t *)&twa972[0]; + simd_q15_t *twb128=(simd_q15_t *)&twb972[0]; + simd_q15_t x2128[972];// = (simd_q15_t *)&x2128array[0]; + simd_q15_t ytmp128[972];//=&ytmp128array3[0]; @@ -12901,10 +13367,10 @@ void dft972(int16_t *x,int16_t *y,unsigned char scale_flag) // 324 x 3 } if (scale_flag==1) { - norm128 = _mm_set1_epi16(dft_norm_table[14]); + norm128 = set1_int16(dft_norm_table[14]); for (i=0; i<972; i++) { - y128[i] = _mm_slli_epi16(_mm_mulhi_epi16(y128[i],norm128),1); + y128[i] = mulhi_int16(y128[i],norm128); } } @@ -13661,12 +14127,12 @@ static int16_t twb1080[359*2*4] = {32764,-382,32764,-382,32764,-382,32764,-382, void dft1080(int16_t *x,int16_t *y,unsigned char scale_flag) // 360 x 3 { int i,j; - __m128i *x128=(__m128i *)x; - __m128i *y128=(__m128i *)y; - __m128i *twa128=(__m128i *)&twa1080[0]; - __m128i *twb128=(__m128i *)&twb1080[0]; - __m128i x2128[1080];// = (__m128i *)&x2128array[0]; - __m128i ytmp128[1080];//=&ytmp128array3[0]; + simd_q15_t *x128=(simd_q15_t *)x; + simd_q15_t *y128=(simd_q15_t *)y; + simd_q15_t *twa128=(simd_q15_t *)&twa1080[0]; + simd_q15_t *twb128=(simd_q15_t *)&twb1080[0]; + simd_q15_t x2128[1080];// = (simd_q15_t *)&x2128array[0]; + simd_q15_t ytmp128[1080];//=&ytmp128array3[0]; @@ -13694,10 +14160,10 @@ void dft1080(int16_t *x,int16_t *y,unsigned char scale_flag) // 360 x 3 } if (scale_flag==1) { - norm128 = _mm_set1_epi16(dft_norm_table[14]); + norm128 = set1_int16(dft_norm_table[14]); for (i=0; i<1080; i++) { - y128[i] = _mm_slli_epi16(_mm_mulhi_epi16(y128[i],norm128),1); + y128[i] = mulhi_int16(y128[i],norm128); } } @@ -14611,13 +15077,13 @@ void dft1152(int16_t *x,int16_t *y,unsigned char scale_flag) // 288 x 4 { int i,j; - __m128i *x128=(__m128i *)x; - __m128i *y128=(__m128i *)y; - __m128i *twa128=(__m128i *)&twa1152[0]; - __m128i *twb128=(__m128i *)&twb1152[0]; - __m128i *twc128=(__m128i *)&twc1152[0]; - __m128i x2128[1152];// = (__m128i *)&x2128array[0]; - __m128i ytmp128[1152];//=&ytmp128array2[0]; + simd_q15_t *x128=(simd_q15_t *)x; + simd_q15_t *y128=(simd_q15_t *)y; + simd_q15_t *twa128=(simd_q15_t *)&twa1152[0]; + simd_q15_t *twb128=(simd_q15_t *)&twb1152[0]; + simd_q15_t *twc128=(simd_q15_t *)&twc1152[0]; + simd_q15_t x2128[1152];// = (simd_q15_t *)&x2128array[0]; + simd_q15_t ytmp128[1152];//=&ytmp128array2[0]; @@ -14650,10 +15116,10 @@ void dft1152(int16_t *x,int16_t *y,unsigned char scale_flag) // 288 x 4 } if (scale_flag==1) { - norm128 = _mm_set1_epi16(16384);//dft_norm_table[13]); + norm128 = set1_int16(16384);//dft_norm_table[13]); for (i=0; i<1152; i++) { - y128[i] = _mm_slli_epi16(_mm_mulhi_epi16(y128[i],norm128),1); + y128[i] = mulhi_int16(y128[i],norm128); } } @@ -15569,13 +16035,13 @@ void dft1200(int16_t *x,int16_t *y,unsigned char scale_flag) { int i,j; - __m128i *x128=(__m128i *)x; - __m128i *y128=(__m128i *)y; - __m128i *twa128=(__m128i *)&twa1200[0]; - __m128i *twb128=(__m128i *)&twb1200[0]; - __m128i *twc128=(__m128i *)&twc1200[0]; - __m128i x2128[1200];// = (__m128i *)&x2128array[0]; - __m128i ytmp128[1200];//=&ytmp128array2[0]; + simd_q15_t *x128=(simd_q15_t *)x; + simd_q15_t *y128=(simd_q15_t *)y; + simd_q15_t *twa128=(simd_q15_t *)&twa1200[0]; + simd_q15_t *twb128=(simd_q15_t *)&twb1200[0]; + simd_q15_t *twc128=(simd_q15_t *)&twc1200[0]; + simd_q15_t x2128[1200];// = (simd_q15_t *)&x2128array[0]; + simd_q15_t ytmp128[1200];//=&ytmp128array2[0]; @@ -15608,10 +16074,10 @@ void dft1200(int16_t *x,int16_t *y,unsigned char scale_flag) } if (scale_flag==1) { - norm128 = _mm_set1_epi16(16384);//dft_norm_table[13]); + norm128 = set1_int16(16384);//dft_norm_table[13]); for (i=0; i<1200; i++) { - y128[i] = _mm_slli_epi16(_mm_mulhi_epi16(y128[i],norm128),1); + y128[i] = mulhi_int16(y128[i],norm128); } } @@ -15625,21 +16091,20 @@ void dft1200(int16_t *x,int16_t *y,unsigned char scale_flag) #include #include -int opp_enabled=1; int main(int argc, char**argv) { time_stats_t ts; - __m128i x[2048],y[2048],tw0,tw1,tw2,tw3; + simd_q15_t x[2048],y[2048],tw0,tw1,tw2,tw3; int i; set_taus_seed(0); - - /* + opp_enabled = 1; + /* ((int16_t *)&tw0)[0] = 32767; ((int16_t *)&tw0)[1] = 0; ((int16_t *)&tw0)[2] = 32767; @@ -15677,8 +16142,13 @@ int main(int argc, char**argv) ((int16_t *)&tw3)[7] = 0; for (i=0;i<300;i++) { +#if defined(__x86_64__) || defined(__i386__) x[i] = _mm_set1_epi32(taus()); x[i] = _mm_srai_epi16(x[i],4); +#elif defined(__arm__) + x[i] = (int16x8_t)vdupq_n_s32(taus()); + x[i] = vshrq_n_s16(x[i],4); +#endif } bfly2_tw1(x,x+1,y,y+1); @@ -15693,7 +16163,6 @@ int main(int argc, char**argv) printf("3(%d,%d) (%d,%d) => (%d,%d) (%d,%d)\n",((int16_t*)&x[0])[0],((int16_t*)&x[0])[1],((int16_t*)&x[1])[0],((int16_t*)&x[1])[1],((int16_t*)&y[0])[6],((int16_t*)&y[0])[7],((int16_t*)&y[1])[6],((int16_t*)&y[1])[7]); bfly2(x,x+1,y,y+1, &tw0); - bfly3_tw1(x,x+1,x+2,y, y+1,y+2); printf("0(%d,%d) (%d,%d) (%d %d) => (%d,%d) (%d,%d) (%d %d)\n",((int16_t*)&x[0])[0],((int16_t*)&x[0])[1],((int16_t*)&x[1])[0],((int16_t*)&x[1])[1],((int16_t*)&x[2])[0],((int16_t*)&x[2])[1],((int16_t*)&y[0])[0],((int16_t*)&y[0])[1],((int16_t*)&y[1])[0],((int16_t*)&y[1])[1],((int16_t*)&y[2])[0],((int16_t*)&y[2])[1]); printf("1(%d,%d) (%d,%d) (%d %d) => (%d,%d) (%d,%d) (%d %d)\n",((int16_t*)&x[0])[0],((int16_t*)&x[0])[1],((int16_t*)&x[1])[0],((int16_t*)&x[1])[1],((int16_t*)&x[2])[0],((int16_t*)&x[2])[1],((int16_t*)&y[0])[2],((int16_t*)&y[0])[3],((int16_t*)&y[1])[2],((int16_t*)&y[1])[3],((int16_t*)&y[2])[2],((int16_t*)&y[2])[3]); @@ -15958,11 +16427,36 @@ int main(int argc, char**argv) printf("%d,%d,%d,%d,%d,%d,%d,%d,",((int16_t*)&y[i])[0],((int16_t *)&y[i])[1],((int16_t*)&y[i])[2],((int16_t *)&y[i])[3],((int16_t*)&y[i])[4],((int16_t *)&y[i])[5],((int16_t*)&y[i])[6],((int16_t *)&y[i])[7]); printf("\n"); */ - for (i=0; i<128; i++) { - ((int16_t*)x)[i] = (int16_t)((taus()&0xffff))>>5; + memset((void*)&x[0],0,64*4); +/* + for (i=0; i<64; i+=4) { + ((int16_t*)x)[i<<1] = 1024; + ((int16_t*)x)[1+(i<<1)] = 0; + ((int16_t*)x)[2+(i<<1)] = 0; + ((int16_t*)x)[3+(i<<1)] = 1024; + ((int16_t*)x)[4+(i<<1)] = -1024; + ((int16_t*)x)[5+(i<<1)] = 0; + ((int16_t*)x)[6+(i<<1)] = 0; + ((int16_t*)x)[7+(i<<1)] = -1024; + } +*/ + for (i=0;i<64;i++) { + ((int16_t*)x)[i] = (int16_t)((taus()&0xffff))>>5; } - memset((void*)&y[0],0,64*4); +/* + dft16((int16_t *)x,(int16_t *)y); + printf("16-point\n"); + printf("X: "); + for (i=0;i<4;i++) + printf("%d,%d,%d,%d,%d,%d,%d,%d,",((int16_t*)&x[i])[0],((int16_t *)&x[i])[1],((int16_t*)&x[i])[2],((int16_t *)&x[i])[3],((int16_t*)&x[i])[4],((int16_t*)&x[i])[5],((int16_t*)&x[i])[6],((int16_t*)&x[i])[7]); + printf("\nY:"); + + for (i=0;i<4;i++) + printf("%d,%d,%d,%d,%d,%d,%d,%d,",((int16_t*)&y[i])[0],((int16_t *)&y[i])[1],((int16_t*)&y[i])[2],((int16_t *)&y[i])[3],((int16_t*)&y[i])[4],((int16_t *)&y[i])[5],((int16_t*)&y[i])[6],((int16_t *)&y[i])[7]); + printf("\n"); + exit(-1); +*/ dft64((int16_t *)x,(int16_t *)y,1); dft64((int16_t *)x,(int16_t *)y,1); dft64((int16_t *)x,(int16_t *)y,1); @@ -15975,9 +16469,12 @@ int main(int argc, char**argv) } - printf("\n\n64-point (%f cycles)\n",(double)ts.diff/(double)ts.trials); + printf("\n\n64-point (%f cycles, #trials %d)\n",(double)ts.diff/(double)ts.trials,ts.trials); + write_output("x64.m","x64",x,64,1,1); + write_output("y64.m","y64",y,64,1,1); - /*printf("X: "); +/* + printf("X: "); for (i=0;i<16;i++) printf("%d,%d,%d,%d,%d,%d,%d,%d,",((int16_t*)&x[i])[0],((int16_t *)&x[i])[1],((int16_t*)&x[i])[2],((int16_t *)&x[i])[3],((int16_t*)&x[i])[4],((int16_t*)&x[i])[5],((int16_t*)&x[i])[6],((int16_t*)&x[i])[7]); printf("\nY:"); @@ -15985,11 +16482,17 @@ int main(int argc, char**argv) for (i=0;i<16;i++) printf("%d,%d,%d,%d,%d,%d,%d,%d,",((int16_t*)&y[i])[0],((int16_t *)&y[i])[1],((int16_t*)&y[i])[2],((int16_t *)&y[i])[3],((int16_t*)&y[i])[4],((int16_t *)&y[i])[5],((int16_t*)&y[i])[6],((int16_t *)&y[i])[7]); printf("\n"); - */ + + idft64((int16_t*)y,(int16_t*)x,1); + printf("X: "); + for (i=0;i<16;i++) + printf("%d,%d,%d,%d,%d,%d,%d,%d,",((int16_t*)&x[i])[0],((int16_t *)&x[i])[1],((int16_t*)&x[i])[2],((int16_t *)&x[i])[3],((int16_t*)&x[i])[4],((int16_t*)&x[i])[5],((int16_t*)&x[i])[6],((int16_t*)&x[i])[7]); + for (i=0; i<256; i++) { ((int16_t*)x)[i] = (int16_t)((taus()&0xffff))>>5; } - +*/ + memset((void*)&y[0],0,128*4); reset_meas(&ts); diff --git a/openair1/PHY/TOOLS/lte_phy_scope.c b/openair1/PHY/TOOLS/lte_phy_scope.c index 0b5bc1c0fa..bc3dbcf289 100644 --- a/openair1/PHY/TOOLS/lte_phy_scope.c +++ b/openair1/PHY/TOOLS/lte_phy_scope.c @@ -77,10 +77,10 @@ FD_lte_phy_scope_enb *create_lte_phy_scope_enb( void ) FD_lte_phy_scope_enb *fdui = fl_malloc( sizeof *fdui ); // Define form - fdui->lte_phy_scope_enb = fl_bgn_form( FL_NO_BOX, 800, 600 ); + fdui->lte_phy_scope_enb = fl_bgn_form( FL_NO_BOX, 800, 800 ); // This the whole UI box - obj = fl_add_box( FL_BORDER_BOX, 0, 0, 800, 600, "" ); + obj = fl_add_box( FL_BORDER_BOX, 0, 0, 800, 800, "" ); fl_set_object_color( obj, FL_BLACK, FL_BLACK ); // Received signal @@ -118,6 +118,22 @@ FD_lte_phy_scope_enb *create_lte_phy_scope_enb( void ) fl_set_xyplot_symbolsize( fdui->pusch_comp,2); fl_set_xyplot_xgrid( fdui->pusch_llr,FL_GRID_MAJOR); + // I/Q PUCCH comp (format 1) + fdui->pucch_comp1 = fl_add_xyplot( FL_POINTS_XYPLOT, 540, 480, 240, 100, "PUCCH I/Q of MF Output" ); + fl_set_object_boxtype( fdui->pucch_comp1, FL_EMBOSSED_BOX ); + fl_set_object_color( fdui->pucch_comp1, FL_BLACK, FL_YELLOW ); + fl_set_object_lcolor( fdui->pucch_comp1, FL_WHITE ); // Label color + fl_set_xyplot_symbolsize( fdui->pucch_comp1,2); + // fl_set_xyplot_xgrid( fdui->pusch_llr,FL_GRID_MAJOR); + + // I/Q PUCCH comp (fromat 1a/b) + fdui->pucch_comp = fl_add_xyplot( FL_POINTS_XYPLOT, 540, 600, 240, 100, "PUCCH I/Q of MF Output" ); + fl_set_object_boxtype( fdui->pucch_comp, FL_EMBOSSED_BOX ); + fl_set_object_color( fdui->pucch_comp, FL_BLACK, FL_YELLOW ); + fl_set_object_lcolor( fdui->pucch_comp, FL_WHITE ); // Label color + fl_set_xyplot_symbolsize( fdui->pucch_comp,2); + // fl_set_xyplot_xgrid( fdui->pusch_llr,FL_GRID_MAJOR); + // Throughput on PUSCH fdui->pusch_tput = fl_add_xyplot( FL_NORMAL_XYPLOT, 20, 480, 500, 100, "PUSCH Throughput [frame]/[kbit/s]" ); fl_set_object_boxtype( fdui->pusch_tput, FL_EMBOSSED_BOX ); @@ -125,7 +141,7 @@ FD_lte_phy_scope_enb *create_lte_phy_scope_enb( void ) fl_set_object_lcolor( fdui->pusch_tput, FL_WHITE ); // Label color // Generic eNB Button - fdui->button_0 = fl_add_button( FL_PUSH_BUTTON, 540, 480, 240, 40, "" ); + fdui->button_0 = fl_add_button( FL_PUSH_BUTTON, 20, 600, 240, 40, "" ); fl_set_object_lalign(fdui->button_0, FL_ALIGN_CENTER ); fl_set_button(fdui->button_0,0); otg_enabled = 0; @@ -154,9 +170,12 @@ void phy_scope_eNB(FD_lte_phy_scope_enb *form, int16_t **chest_f; int16_t *pusch_llr; int16_t *pusch_comp; + int32_t *pucch1_comp; + int16_t *pucch1ab_comp; float Re,Im,ymax; float *llr, *bit; float I[nsymb_ce*2], Q[nsymb_ce*2]; + float I_pucch[10240],Q_pucch[10240],A_pucch[10240],B_pucch[10240]; float rxsig_t_dB[nb_antennas_rx][FRAME_LENGTH_COMPLEX_SAMPLES]; float chest_t_abs[nb_antennas_rx][frame_parms->ofdm_symbol_size]; float *chest_f_abs; @@ -186,6 +205,8 @@ void phy_scope_eNB(FD_lte_phy_scope_enb *form, chest_f = (int16_t**) phy_vars_enb->lte_eNB_pusch_vars[UE_id]->drs_ch_estimates[eNB_id]; pusch_llr = (int16_t*) phy_vars_enb->lte_eNB_pusch_vars[UE_id]->llr; pusch_comp = (int16_t*) phy_vars_enb->lte_eNB_pusch_vars[UE_id]->rxdataF_comp[eNB_id][0]; + pucch1_comp = (int32_t*) phy_vars_enb->pucch1_stats[UE_id]; + pucch1ab_comp = (int16_t*) phy_vars_enb->pucch1ab_stats[UE_id]; // Received signal in time domain of receive antenna 0 if (rxsig_t != NULL) { @@ -209,13 +230,13 @@ void phy_scope_eNB(FD_lte_phy_scope_enb *form, } } - // Channel Impulse Response + // Channel Impulse Response if (chest_t != NULL) { ymax = 0; if (chest_t[0] !=NULL) { for (i=0; i<(frame_parms->ofdm_symbol_size); i++) { - chest_t_abs[0][i] = (float) (chest_t[0][2*i]*chest_t[0][2*i]+chest_t[0][2*i+1]*chest_t[0][2*i+1]); + chest_t_abs[0][i] = 10*log10((float) (chest_t[0][2*i]*chest_t[0][2*i]+chest_t[0][2*i+1]*chest_t[0][2*i+1])); if (chest_t_abs[0][i] > ymax) ymax = chest_t_abs[0][i]; @@ -227,8 +248,8 @@ void phy_scope_eNB(FD_lte_phy_scope_enb *form, for (arx=1; arxofdm_symbol_size>>3); i++) { - chest_t_abs[arx][i] = (float) (chest_t[arx][2*i]*chest_t[arx][2*i]+chest_t[arx][2*i+1]*chest_t[arx][2*i+1]); - + chest_t_abs[arx][i] = 10*log10((float) (chest_t[arx][2*i]*chest_t[arx][2*i]+chest_t[arx][2*i+1]*chest_t[arx][2*i+1])); + if (chest_t_abs[arx][i] > ymax) ymax = chest_t_abs[arx][i]; } @@ -313,6 +334,22 @@ void phy_scope_eNB(FD_lte_phy_scope_enb *form, fl_set_xyplot_data(form->pusch_comp,I,Q,ind,"","",""); } + // PUSCH I/Q of MF Output + if (pucch1ab_comp!=NULL) { + for (ind=0; ind<10240; ind++) { + I_pucch[ind] = pucch1ab_comp[2*ind]; + Q_pucch[ind] = pucch1ab_comp[2*ind+1]; + A_pucch[ind] = 10*log10(pucch1_comp[ind]); + B_pucch[ind] = ind; + } + fl_set_xyplot_data(form->pucch_comp,I_pucch,Q_pucch,10240,"","",""); + fl_set_xyplot_data(form->pucch_comp1,B_pucch,A_pucch,1024,"","",""); + fl_set_xyplot_xbounds(form->pucch_comp,-200,200); + fl_set_xyplot_ybounds(form->pucch_comp,-100,100); + fl_set_xyplot_ybounds(form->pucch_comp1,10,40); + } + + // PUSCH Throughput memmove( tput_time_enb[UE_id], &tput_time_enb[UE_id][1], (TPUT_WINDOW_LENGTH-1)*sizeof(float) ); memmove( tput_enb[UE_id], &tput_enb[UE_id][1], (TPUT_WINDOW_LENGTH-1)*sizeof(float) ); @@ -380,8 +417,8 @@ FD_lte_phy_scope_ue *create_lte_phy_scope_ue( void ) fl_set_object_color( fdui->pbch_comp, FL_BLACK, FL_GREEN ); fl_set_object_lcolor( fdui->pbch_comp, FL_WHITE ); // Label color fl_set_xyplot_symbolsize( fdui->pbch_comp,2); - fl_set_xyplot_xbounds( fdui->pbch_comp,-100,100); - fl_set_xyplot_ybounds( fdui->pbch_comp,-100,100); + // fl_set_xyplot_xbounds( fdui->pbch_comp,-100,100); + // fl_set_xyplot_ybounds( fdui->pbch_comp,-100,100); // LLR of PDCCH fdui->pdcch_llr = fl_add_xyplot( FL_POINTS_XYPLOT, 20, 380, 500, 100, "PDCCH Log-Likelihood Ratios (LLR, mag)" ); @@ -443,7 +480,7 @@ void phy_scope_UE(FD_lte_phy_scope_ue *form, { int i,arx,atx,ind,k; LTE_DL_FRAME_PARMS *frame_parms = &phy_vars_ue->lte_frame_parms; - int nsymb_ce = frame_parms->ofdm_symbol_size*frame_parms->symbols_per_tti; + int nsymb_ce = frame_parms->ofdm_symbol_size;//*frame_parms->symbols_per_tti; uint8_t nb_antennas_rx = frame_parms->nb_antennas_rx; uint8_t nb_antennas_tx = frame_parms->nb_antennas_tx_eNB; int16_t **rxsig_t; @@ -470,6 +507,7 @@ void phy_scope_UE(FD_lte_phy_scope_ue *form, unsigned char harq_pid = 0; int beamforming_mode = phy_vars_ue->transmission_mode[eNB_id]>6 ? phy_vars_ue->transmission_mode[eNB_id] : 0; + if (phy_vars_ue->dlsch_ue[eNB_id][0]!=NULL) { harq_pid = phy_vars_ue->dlsch_ue[eNB_id][0]->current_harq_pid; @@ -493,7 +531,7 @@ void phy_scope_UE(FD_lte_phy_scope_ue *form, if (phy_vars_ue->dlsch_ue[eNB_id][0]!=NULL) { coded_bits_per_codeword = get_G(frame_parms, phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->nb_rb, - phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->rb_alloc, + phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->rb_alloc_even, get_Qm(mcs), phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->Nl, num_pdcch_symbols, @@ -504,8 +542,8 @@ void phy_scope_UE(FD_lte_phy_scope_ue *form, coded_bits_per_codeword = 0; //frame_parms->N_RB_DL*12*get_Qm(mcs)*(frame_parms->symbols_per_tti); } - I = (float*) calloc(nsymb_ce*2,sizeof(float)); - Q = (float*) calloc(nsymb_ce*2,sizeof(float)); + I = (float*) calloc(frame_parms->ofdm_symbol_size*frame_parms->symbols_per_tti*2,sizeof(float)); + Q = (float*) calloc(frame_parms->ofdm_symbol_size*frame_parms->symbols_per_tti*2,sizeof(float)); chest_t_abs = (float**) malloc(nb_antennas_rx*sizeof(float*)); for (arx=0; arx0)?temp:1); } @@ -214,6 +180,81 @@ int32_t signal_energy_nodc(int32_t *input,uint32_t length) return((temp>0)?temp:1); } +#elif defined(__arm__) + +int32_t signal_energy(int32_t *input,uint32_t length) +{ + + int32_t i; + int32_t temp,temp2; + register int32x4_t tmpE,tmpDC; + int32x2_t tmpE2,tmpDC2; + int16x4_t *in = (int16x4_t *)input; + + tmpE = vdupq_n_s32(0); + tmpDC = vdupq_n_s32(0); + + for (i=0; i>1; i++) { + + tmpE = vqaddq_s32(tmpE,vshrq_n_s32(vmull_s16(*in,*in),shift)); + tmpDC = vaddw_s16(tmpDC,vshr_n_s16(*in++,shift_DC)); + + } + + tmpE2 = vpadd_s32(vget_low_s32(tmpE),vget_high_s32(tmpE)); + + temp=(vget_lane_s32(tmpE2,0)+vget_lane_s32(tmpE2,1))/length; + temp<<=shift; // this is the average of x^2 + + // now remove the DC component + + + tmpDC2 = vpadd_s32(vget_low_s32(tmpDC),vget_high_s32(tmpDC)); + + temp2=(vget_lane_s32(tmpDC2,0)+vget_lane_s32(tmpDC2,1))/(length*length); + + // temp2<<=(2*shift_DC); +#ifdef MAIN + printf("E x^2 = %d\n",temp); +#endif + temp -= temp2; +#ifdef MAIN + printf("(E x)^2=%d\n",temp2); +#endif + + return((temp>0)?temp:1); +} + +int32_t signal_energy_nodc(int32_t *input,uint32_t length) +{ + + int32_t i; + int32_t temp; + register int32x4_t tmpE; + int32x2_t tmpE2; + int16x4_t *in = (int16x4_t *)input; + + tmpE = vdupq_n_s32(0); + + for (i=0; i>1; i++) { + + tmpE = vqaddq_s32(tmpE,vshrq_n_s32(vmull_s16(*in,*in),shift)); + + } + + tmpE2 = vpadd_s32(vget_low_s32(tmpE),vget_high_s32(tmpE)); + + temp=(vget_lane_s32(tmpE2,0)+vget_lane_s32(tmpE2,1))/length; + temp<<=shift; // this is the average of x^2 + +#ifdef MAIN + printf("E x^2 = %d\n",temp); +#endif + + return((temp>0)?temp:1); +} + +#endif double signal_energy_fp(double **s_re,double **s_im,uint32_t nb_antennas,uint32_t length,uint32_t offset) { @@ -243,13 +284,6 @@ double signal_energy_fp2(struct complex *s,uint32_t length) return(V/length); } -#else - -int32_t signal_energy(int32_t *input,uint32_t length) -{ -} - -#endif #ifdef MAIN #define LENGTH 256 diff --git a/openair1/PHY/TOOLS/time_meas.c b/openair1/PHY/TOOLS/time_meas.c index 615b437deb..675de01d31 100644 --- a/openair1/PHY/TOOLS/time_meas.c +++ b/openair1/PHY/TOOLS/time_meas.c @@ -33,25 +33,18 @@ // global var for openair performance profiler int opp_enabled = 0; -/* - double get_cpu_freq_GHz(void) { - time_stats_t ts; - reset_meas(&ts); - start_meas(&ts); - sleep(1); - stop_meas(&ts); - return (double)ts.diff/1000000000; - }*/ double get_cpu_freq_GHz(void) { time_stats_t ts = {0}; reset_meas(&ts); - start_meas(&ts); + ts.trials++; + ts.in = rdtsc_oai(); sleep(1); - stop_meas(&ts); + ts.diff = (rdtsc_oai()-ts.in); cpu_freq_GHz = (double)ts.diff/1000000000; + printf("CPU Freq is %f \n", cpu_freq_GHz); return cpu_freq_GHz; } diff --git a/openair1/PHY/TOOLS/time_meas.h b/openair1/PHY/TOOLS/time_meas.h index a72754c77c..900c5b3f9a 100644 --- a/openair1/PHY/TOOLS/time_meas.h +++ b/openair1/PHY/TOOLS/time_meas.h @@ -26,27 +26,42 @@ Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE *******************************************************************************/ -#ifdef OMP -#include -#endif #include #include +#include +#include +#include +#include +#include +#include +#include // global var to enable openair performance profiler extern int opp_enabled; - double cpu_freq_GHz; +#if defined(__x86_64__) || defined(__i386__) typedef struct { long long in; - long long diff_now; long long diff; + long long diff_now; long long p_time; /*!< \brief absolute process duration */ long long diff_square; /*!< \brief process duration square */ long long max; int trials; } time_stats_t; +#elif defined(__arm__) +typedef struct { + uint32_t in; + uint32_t diff_now; + uint32_t diff; + uint32_t p_time; /*!< \brief absolute process duration */ + uint32_t diff_square; /*!< \brief process duration square */ + uint32_t max; + int trials; +} time_stats_t; +#endif static inline void start_meas(time_stats_t *ts) __attribute__((always_inline)); static inline void stop_meas(time_stats_t *ts) __attribute__((always_inline)); @@ -74,12 +89,12 @@ static inline unsigned long long rdtsc_oai(void) } #elif defined(__arm__) -static inline unsigned long long rdtsc_oai(void) __attribute__((always_inline)); -static inline unsigned long long rdtsc_oai(void) +static inline uint32_t rdtsc_oai(void) __attribute__((always_inline)); +static inline uint32_t rdtsc_oai(void) { uint32_t r = 0; asm volatile("mrc p15, 0, %0, c9, c13, 0" : "=r"(r) ); - return (unsigned long long)r; + return r; } #endif @@ -88,17 +103,8 @@ static inline void start_meas(time_stats_t *ts) if (opp_enabled) { -#ifdef OMP - int tid; - - tid = omp_get_thread_num(); - - if (tid==0) -#endif - { ts->trials++; ts->in = rdtsc_oai(); - } } } @@ -107,46 +113,29 @@ static inline void stop_meas(time_stats_t *ts) if (opp_enabled) { long long out = rdtsc_oai(); - -#ifdef OMP - int tid; - tid = omp_get_thread_num(); - - if (tid==0) -#endif - { - ts->diff_now = (out-ts->in); - - ts->diff += (out-ts->in); - /// process duration is the difference between two clock points - ts->p_time = (out-ts->in); - ts->diff_square += pow((out-ts->in),2); - - if ((out-ts->in) > ts->max) - ts->max = out-ts->in; - - } + + ts->diff_now = (out-ts->in); + + ts->diff_now = (out-ts->in); + ts->diff += (out-ts->in); + /// process duration is the difference between two clock points + ts->p_time = (out-ts->in); + ts->diff_square += (out-ts->in)*(out-ts->in); + + if ((out-ts->in) > ts->max) + ts->max = out-ts->in; + } } -static inline void reset_meas(time_stats_t *ts) -{ - static int cpu_freq_set=0; - - if (opp_enabled) { - ts->trials=0; - ts->diff_now=0; - ts->diff=0; - ts->p_time=0; - ts->diff_square=0; - ts->max=0; +static inline void reset_meas(time_stats_t *ts) { - if (cpu_freq_set == 0) { - cpu_freq_set = 1; - get_cpu_freq_GHz(); - printf("CPU Freq is %f \n", cpu_freq_GHz); - } - } + ts->trials=0; + ts->diff=0; + ts->diff_now=0; + ts->p_time=0; + ts->diff_square=0; + ts->max=0; } @@ -159,11 +148,3 @@ static inline void copy_meas(time_stats_t *dst_ts,time_stats_t *src_ts) dst_ts->max=src_ts->max; } } - -/*static inline double get_mean_meas_us(time_stats_t *ts, double cpu_freq_GHz) { - - return (double) ts->diff/ts->trials/cpu_freq_GHz/1000.0; - - } -*/ - diff --git a/openair1/PHY/TOOLS/vars.h b/openair1/PHY/TOOLS/vars.h index 7a5b283a8e..f6edc6bb34 100644 --- a/openair1/PHY/TOOLS/vars.h +++ b/openair1/PHY/TOOLS/vars.h @@ -25,4 +25,4 @@ Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - *******************************************************************************/ \ No newline at end of file + *******************************************************************************/ diff --git a/openair1/PHY/defs.h b/openair1/PHY/defs.h index 7cce9d3cd1..ceacd43ee1 100755 --- a/openair1/PHY/defs.h +++ b/openair1/PHY/defs.h @@ -51,7 +51,7 @@ # define msg mexPrintf #else # ifdef OPENAIR2 -# if defined(ENABLE_RAL) +# if ENABLE_RAL # include "collection/hashtable/hashtable.h" # include "COMMON/ral_messages_types.h" # include "UTIL/queue.h" @@ -65,38 +65,31 @@ //use msg in the real-time thread context #define msg_nrt printf //use msg_nrt in the non real-time context (for initialization, ...) -#ifdef EXPRESSMIMO_TARGET -#define malloc16(x) malloc(x) -#else //EXPRESSMIMO_TARGET +#ifdef __AVX2__ +#define malloc16(x) memalign(32,x) +#else #define malloc16(x) memalign(16,x) -#endif //EXPRESSMIMO_TARGET +#endif #define free16(y,x) free(y) #define bigmalloc malloc #define bigmalloc16 malloc16 #define openair_free(y,x) free((y)) #define PAGE_SIZE 4096 -#ifdef EXPRESSMIMO_TARGET -//! \brief Allocate \c size bytes of memory on the heap and zero it afterwards. -//! If no more memory is available, this function will terminate the program with an assertion error. -static inline void* malloc16_clear( size_t size ) -{ - void* ptr = malloc(size); - DevAssert(ptr); - memset( ptr, 0, size ); - return ptr; -} -#else //EXPRESSMIMO_TARGET //! \brief Allocate \c size bytes of memory on the heap with alignment 16 and zero it afterwards. //! If no more memory is available, this function will terminate the program with an assertion error. static inline void* malloc16_clear( size_t size ) { +#ifdef __AVX2__ + void* ptr = memalign(32, size); +#else void* ptr = memalign(16, size); +#endif DevAssert(ptr); memset( ptr, 0, size ); return ptr; } -#endif //EXPRESSMIMO_TARGET + #define PAGE_MASK 0xfffff000 @@ -119,10 +112,6 @@ static inline void* malloc16_clear( size_t size ) /// suppress compiler warning for unused arguments #define UNUSED(x) (void)x; -#ifdef EXPRESSMIMO_TARGET -#define Zero_Buffer(x,y) Zero_Buffer_nommx(x,y) -#endif //EXPRESSMiMO_TARGET - #include "spec_defs_top.h" #include "impl_defs_top.h" @@ -146,7 +135,7 @@ static inline void* malloc16_clear( size_t size ) #define NB_BANDS_MAX 8 -typedef enum {normal_txrx=0,rx_calib_ue=1,rx_calib_ue_med=2,rx_calib_ue_byp=3,debug_prach=4,no_L2_connect=5} runmode_t; +typedef enum {normal_txrx=0,rx_calib_ue=1,rx_calib_ue_med=2,rx_calib_ue_byp=3,debug_prach=4,no_L2_connect=5,calib_prach_tx=6,rx_dump_frame=7,loop_through_memory=8} runmode_t; enum transmission_access_mode { NO_ACCESS=0, @@ -164,7 +153,7 @@ typedef struct UE_SCAN_INFO_s { int32_t freq_offset_Hz[3][10]; } UE_SCAN_INFO_t; -#if defined(ENABLE_RAL) +#if ENABLE_RAL typedef struct ral_threshold_phy_s { SLIST_ENTRY(ral_threshold_phy_s) ral_thresholds; ral_threshold_t threshold; @@ -391,7 +380,12 @@ typedef struct PHY_VARS_eNB_s { time_stats_t localization_stats; #endif -#if defined(ENABLE_RAL) + int32_t pucch1_stats_cnt[NUMBER_OF_UE_MAX][10]; + int32_t pucch1_stats[NUMBER_OF_UE_MAX][10*1024]; + int32_t pucch1ab_stats_cnt[NUMBER_OF_UE_MAX][10]; + int32_t pucch1ab_stats[NUMBER_OF_UE_MAX][10*1024]; + +#if ENABLE_RAL hash_table_t *ral_thresholds_timed; SLIST_HEAD(ral_thresholds_gen_poll_enb_s, ral_threshold_phy_t) ral_thresholds_gen_polled[RAL_LINK_PARAM_GEN_MAX]; SLIST_HEAD(ral_thresholds_lte_poll_enb_s, ral_threshold_phy_t) ral_thresholds_lte_polled[RAL_LINK_PARAM_LTE_MAX]; @@ -419,6 +413,8 @@ typedef struct { runmode_t mode; /// \brief Indicator that UE should perform band scanning int UE_scan; + /// \brief Indicator that UE should perform coarse scanning around carrier + int UE_scan_carrier; /// \brief Indicator that UE is synchronized to an eNB int is_synchronized; /// \brief Instance count of TX processing thread (-1 means ready, 0 means busy) @@ -505,7 +501,6 @@ typedef struct { uint8_t pucch_payload[22]; UE_MODE_t UE_mode[NUMBER_OF_CONNECTED_eNB_MAX]; - int8_t g_pucch[NUMBER_OF_CONNECTED_eNB_MAX]; /// cell-specific reference symbols uint32_t lte_gold_table[7][20][2][14]; @@ -669,7 +664,7 @@ typedef struct { time_stats_t dlsch_tc_intl2_stats; time_stats_t tx_prach; -#if defined(ENABLE_RAL) +#if ENABLE_RAL hash_table_t *ral_thresholds_timed; SLIST_HEAD(ral_thresholds_gen_poll_s, ral_threshold_phy_t) ral_thresholds_gen_polled[RAL_LINK_PARAM_GEN_MAX]; SLIST_HEAD(ral_thresholds_lte_poll_s, ral_threshold_phy_t) ral_thresholds_lte_polled[RAL_LINK_PARAM_LTE_MAX]; diff --git a/openair1/PHY/impl_defs_lte.h b/openair1/PHY/impl_defs_lte.h index a7574575a3..f580340827 100644 --- a/openair1/PHY/impl_defs_lte.h +++ b/openair1/PHY/impl_defs_lte.h @@ -68,6 +68,8 @@ typedef enum {TDD=1,FDD=0} lte_frame_type_t; typedef enum {EXTENDED=1,NORMAL=0} lte_prefix_type_t; +typedef enum {LOCALIZED=0,DISTRIBUTED=1} vrb_t; + /// Enumeration for parameter PHICH-Duration \ref PHICH_CONFIG_COMMON::phich_duration. typedef enum { normal=0, diff --git a/openair1/PHY/impl_defs_top.h b/openair1/PHY/impl_defs_top.h index f9f712b052..a0302fd526 100755 --- a/openair1/PHY/impl_defs_top.h +++ b/openair1/PHY/impl_defs_top.h @@ -43,9 +43,21 @@ /** @defgroup _ref_implementation_ OpenAirInterface LTE Implementation * @{ - * @defgroup _physical_layer_ref_implementation_ Physical Layer Reference Implementation + + * @defgroup _PHY_RF_INTERFACE_ Generic PHY - RF Interface * @ingroup _ref_implementation_ * @{ + * This module is responsible for defining the generic interface between PHY and RF Target + * @} + + * @defgroup _openair1_ openair1 Reference Implementation + * @ingroup _ref_implementation_ + * @{ + + + * @defgroup _physical_layer_ref_implementation_ Physical Layer Reference Implementation + * @ingroup _openair1_ + * @{ * @defgroup _PHY_STRUCTURES_ Basic Structures and Memory Initialization @@ -83,14 +95,16 @@ * @{ * This module is responsible for defining and processing the PHY procedures (TX/RX) related to transport and physical channels. * @} - * @} * @defgroup _PHY_PROCEDURES_ Physical Layer Procedures - * @ingroup _ref_implementation_ + * @ingroup _physical_layer_ref_implementation_ * @{ * This module is responsible for defining and processing the PHY procedures (TX/RX) related to transport and physical channels. * @} + * @} + * @} + * @} */ #include "types.h" @@ -98,7 +112,7 @@ -/**@addtogroup _PHY_STRUCTURES_ +/** @addtogroup _PHY_STRUCTURES_ * @{ */ #define NUMBER_OF_OFDM_CARRIERS (frame_parms->ofdm_symbol_size) @@ -242,6 +256,10 @@ #define AMP_OVER_SQRT2 ((AMP*ONE_OVER_SQRT2_Q15)>>15) #define AMP_OVER_2 (AMP>>1) +/// Threshold for PUCCH Format 1 detection +#define PUCCH1_THRES 10 +/// Threshold for PUCCH Format 1a/1b detection +#define PUCCH1a_THRES 4 #ifndef OPENAIR_LTE /// @@ -322,10 +340,10 @@ typedef struct { #define NUMBER_OF_SUBBANDS_MAX 13 #define NUMBER_OF_HARQ_PID_MAX 8 -#if defined(CBMIMO1) || defined(EXMIMO) +#if defined(CBMIMO1) || defined(EXMIMO) || defined(OAI_USRP) #define MAX_FRAME_NUMBER 0x400 #define NUMBER_OF_eNB_MAX 1 -#define NUMBER_OF_UE_MAX 16 +#define NUMBER_OF_UE_MAX 4 #define NUMBER_OF_CONNECTED_eNB_MAX 3 #else #define MAX_FRAME_NUMBER 0xFFFF @@ -493,6 +511,5 @@ typedef struct { #define MCS_TABLE_LENGTH_MAX 64 #endif //__PHY_IMPLEMENTATION_DEFS_H__ -/**@} - *@} +/**@} */ diff --git a/openair1/PHY/sse_intrin.h b/openair1/PHY/sse_intrin.h index 00e2efdb63..cfd3d0b653 100644 --- a/openair1/PHY/sse_intrin.h +++ b/openair1/PHY/sse_intrin.h @@ -63,6 +63,9 @@ # include #endif +#ifdef __AVX2__ +# include +#endif // ------------------------------------------------ // compatibility functions if SSE3 or SSE4 is not available diff --git a/openair1/SCHED/defs.h b/openair1/SCHED/defs.h index e779dd6564..4855774494 100644 --- a/openair1/SCHED/defs.h +++ b/openair1/SCHED/defs.h @@ -114,7 +114,7 @@ typedef struct { int32_t freq_offset; uint32_t tx_rx_switch_point; uint32_t manual_timing_advance; /// 1 to override automatic timing advance - uint32_t timing_advance; + int32_t timing_advance; uint32_t dual_tx; /// 1 for dual-antenna TX, 0 for single-antenna TX uint32_t tdd; /// 1 for TDD mode, 0 for FDD mode uint32_t rx_rf_mode; @@ -149,8 +149,8 @@ void cleanup_dlsch_threads(void); */ -/*! - \brief Top-level entry routine for eNB procedures. Called every slot by process scheduler. In even slots, it performs RX functions from previous subframe (if required). On odd slots, it generate TX waveform for the following subframe. + +/*! \brief Top-level entry routine for eNB procedures. Called every slot by process scheduler. In even slots, it performs RX functions from previous subframe (if required). On odd slots, it generate TX waveform for the following subframe. @param subframe Index of current subframe (0-9) @param phy_vars_eNB Pointer to eNB variables on which to act @param abstraction_flag Indicator of PHY abstraction @@ -158,8 +158,8 @@ void cleanup_dlsch_threads(void); @param *phy_vars_rn pointer to RN variables */ void phy_procedures_eNB_lte(uint8_t subframe,PHY_VARS_eNB **phy_vars_eNB,uint8_t abstraction_flag, relaying_type_t r_type, PHY_VARS_RN *phy_vars_rn); -/*! - \brief Top-level entry routine for UE procedures. Called every slot by process scheduler. In even slots, it performs RX functions from previous subframe (if required). On odd slots, it generate TX waveform for the following subframe. + +/*! \brief Top-level entry routine for UE procedures. Called every slot by process scheduler. In even slots, it performs RX functions from previous subframe (if required). On odd slots, it generate TX waveform for the following subframe. @param last_slot Index of last slot (0-19) @param next_slot Index of next_slot (0-19) @param phy_vars_ue Pointer to UE variables on which to act @@ -172,15 +172,13 @@ void phy_procedures_eNB_lte(uint8_t subframe,PHY_VARS_eNB **phy_vars_eNB,uint8_t void phy_procedures_UE_lte(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstraction_flag,runmode_t mode,relaying_type_t r_type,PHY_VARS_RN *phy_vars_rn); #ifdef Rel10 -/*! - \brief Top-level entry routine for relay node procedures when acting as eNB. This proc will make us of the existing eNB procs. +/*! \brief Top-level entry routine for relay node procedures when acting as eNB. This proc will make us of the existing eNB procs. @param last_slot Index of last slot (0-19) @param next_slot Index of next_slot (0-19) @param r_type indicates the relaying operation: 0: no_relaying, 1: unicast relaying type 1, 2: unicast relaying type 2, 3: multicast relaying */ int phy_procedures_RN_eNB_TX(unsigned char last_slot, unsigned char next_slot, relaying_type_t r_type); -/*! - \brief Top-level entry routine for relay node procedures actinf as UE. This proc will make us of the existing UE procs. +/*! \brief Top-level entry routine for relay node procedures actinf as UE. This proc will make us of the existing UE procs. @param last_slot Index of last slot (0-19) @param next_slot Index of next_slot (0-19) @param r_type indicates the relaying operation: 0: no_relaying, 1: unicast relaying type 1, 2: unicast relaying type 2, 3: multicast relaying @@ -188,8 +186,7 @@ int phy_procedures_RN_eNB_TX(unsigned char last_slot, unsigned char next_slot, r int phy_procedures_RN_UE_RX(unsigned char last_slot, unsigned char next_slot, relaying_type_t r_type); #endif -/*! - \brief Scheduling for UE TX procedures in normal subframes. +/*! \brief Scheduling for UE TX procedures in normal subframes. @param phy_vars_ue Pointer to UE variables on which to act @param eNB_id Local id of eNB on which to act @param abstraction_flag Indicator of PHY abstraction @@ -197,8 +194,7 @@ int phy_procedures_RN_UE_RX(unsigned char last_slot, unsigned char next_slot, re @param r_type indicates the relaying operation: 0: no_relaying, 1: unicast relaying type 1, 2: unicast relaying type 2, 3: multicast relaying */ void phy_procedures_UE_TX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstraction_flag,runmode_t mode,relaying_type_t r_type); -/*! - \brief Scheduling for UE RX procedures in normal subframes. +/*! \brief Scheduling for UE RX procedures in normal subframes. @param last_slot Index of last slot (0-19) @param phy_vars_ue Pointer to UE variables on which to act @param eNB_id Local id of eNB on which to act @@ -209,8 +205,7 @@ void phy_procedures_UE_TX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstra */ int phy_procedures_UE_RX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstraction_flag,runmode_t mode,relaying_type_t r_type,PHY_VARS_RN *phy_vars_rn); -/*! - \brief Scheduling for UE TX procedures in TDD S-subframes. +/*! \brief Scheduling for UE TX procedures in TDD S-subframes. @param phy_vars_ue Pointer to UE variables on which to act @param eNB_id Local id of eNB on which to act @param abstraction_flag Indicator of PHY abstraction @@ -218,8 +213,7 @@ int phy_procedures_UE_RX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstrac */ void phy_procedures_UE_S_TX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstraction_flag,relaying_type_t r_type); -/*! - \brief Scheduling for UE RX procedures in TDD S-subframes. +/*! \brief Scheduling for UE RX procedures in TDD S-subframes. @param last_slot Index of last slot (0-19) @param phy_vars_ue Pointer to UE variables on which to act @param eNB_id Local id of eNB on which to act @@ -228,8 +222,7 @@ void phy_procedures_UE_S_TX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abst */ void phy_procedures_UE_S_RX(uint8_t last_slot,PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstraction_flag, relaying_type_t r_type); -/*! - \brief Scheduling for eNB TX procedures in normal subframes. +/*! \brief Scheduling for eNB TX procedures in normal subframes. @param next_slot Index of next slot (0-19) @param phy_vars_eNB Pointer to eNB variables on which to act @param abstraction_flag Indicator of PHY abstraction @@ -238,8 +231,7 @@ void phy_procedures_UE_S_RX(uint8_t last_slot,PHY_VARS_UE *phy_vars_ue,uint8_t e */ void phy_procedures_eNB_TX(uint8_t next_slot,PHY_VARS_eNB *phy_vars_eNB,uint8_t abstraction_flag,relaying_type_t r_type,PHY_VARS_RN *phy_vars_rn); -/*! - \brief Scheduling for eNB RX procedures in normal subframes. +/*! \brief Scheduling for eNB RX procedures in normal subframes. @param last_slot Index of last slot (0-19) @param phy_vars_eNB Pointer to eNB variables on which to act @param abstraction_flag Indicator of PHY abstraction @@ -247,8 +239,7 @@ void phy_procedures_eNB_TX(uint8_t next_slot,PHY_VARS_eNB *phy_vars_eNB,uint8_t */ void phy_procedures_eNB_RX(uint8_t last_slot,PHY_VARS_eNB *phy_vars_eNB,uint8_t abstraction_flag,relaying_type_t r_type); -/*! - \brief Scheduling for eNB TX procedures in TDD S-subframes. +/*! \brief Scheduling for eNB TX procedures in TDD S-subframes. @param next_slot Index of next slot (0-19) @param phy_vars_eNB Pointer to eNB variables on which to act @param abstraction_flag Indicator of PHY abstraction @@ -256,8 +247,7 @@ void phy_procedures_eNB_RX(uint8_t last_slot,PHY_VARS_eNB *phy_vars_eNB,uint8_t */ void phy_procedures_eNB_S_TX(uint8_t next_slot,PHY_VARS_eNB *phy_vars_eNB,uint8_t abstraction_flag,relaying_type_t r_type); -/*! - \brief Scheduling for eNB RX procedures in TDD S-subframes. +/*! \brief Scheduling for eNB RX procedures in TDD S-subframes. @param last_slot Index of next slot (0-19) @param phy_vars_eNB Pointer to eNB variables on which to act @param abstraction_flag Indicator of PHY abstraction @@ -265,16 +255,14 @@ void phy_procedures_eNB_S_TX(uint8_t next_slot,PHY_VARS_eNB *phy_vars_eNB,uint8_ */ void phy_procedures_eNB_S_RX(uint8_t last_slot,PHY_VARS_eNB *phy_vars_eNB,uint8_t abstraction_flag,relaying_type_t r_type); -/*! - \brief Function to compute subframe type as a function of Frame type and TDD Configuration (implements Table 4.2.2 from 36.211, p.11 from version 8.6) and subframe index. +/*! \brief Function to compute subframe type as a function of Frame type and TDD Configuration (implements Table 4.2.2 from 36.211, p.11 from version 8.6) and subframe index. @param frame_parms Pointer to DL frame parameter descriptor @param subframe Subframe index @returns Subframe type (DL,UL,S) */ lte_subframe_t subframe_select(LTE_DL_FRAME_PARMS *frame_parms,uint8_t subframe); -/*! - \brief Function to compute subframe type as a function of Frame type and TDD Configuration (implements Table 4.2.2 from 36.211, p.11 from version 8.6) and subframe index. Same as subframe_select, except that it uses the Mod_id and is provided as a service to the MAC scheduler. +/*! \brief Function to compute subframe type as a function of Frame type and TDD Configuration (implements Table 4.2.2 from 36.211, p.11 from version 8.6) and subframe index. Same as subframe_select, except that it uses the Mod_id and is provided as a service to the MAC scheduler. @param Mod_id Index of eNB @param CC_id Component Carrier Index @param subframe Subframe index @@ -282,16 +270,14 @@ lte_subframe_t subframe_select(LTE_DL_FRAME_PARMS *frame_parms,uint8_t subframe) */ lte_subframe_t get_subframe_direction(uint8_t Mod_id, uint8_t CC_id,uint8_t subframe); -/*! - \brief Function to indicate PHICH transmission subframes. Implements Table 9.1.2-1 for TDD. +/*! \brief Function to indicate PHICH transmission subframes. Implements Table 9.1.2-1 for TDD. @param frame_parms Pointer to DL frame parameter descriptor @param subframe Subframe index @returns 1 if PHICH can be transmitted in subframe (always 1 for FDD) */ uint32_t is_phich_subframe(LTE_DL_FRAME_PARMS *frame_parms,uint8_t subframe); -/*! - \brief Function to compute timing of Msg3 transmission on UL-SCH (first UE transmission in RA procedure). This implements the timing in paragraph a) from Section 6.1.1 in 36.213 (p. 17 in version 8.6). Used by eNB upon transmission of random-access response (RA_RNTI) to program corresponding ULSCH reception procedure. Used by UE upon reception of random-access response (RA_RNTI) to program corresponding ULSCH transmission procedure. This does not support the UL_delay field in RAR (always assumed to be 0). +/*! \brief Function to compute timing of Msg3 transmission on UL-SCH (first UE transmission in RA procedure). This implements the timing in paragraph a) from Section 6.1.1 in 36.213 (p. 17 in version 8.6). Used by eNB upon transmission of random-access response (RA_RNTI) to program corresponding ULSCH reception procedure. Used by UE upon reception of random-access response (RA_RNTI) to program corresponding ULSCH transmission procedure. This does not support the UL_delay field in RAR (always assumed to be 0). @param frame_parms Pointer to DL frame parameter descriptor @param current_subframe Index of subframe where RA_RNTI was received @param current_frame Index of frame where RA_RNTI was received @@ -304,8 +290,7 @@ void get_Msg3_alloc(LTE_DL_FRAME_PARMS *frame_parms, uint32_t *frame, uint8_t *subframe); -/*! - \brief Function to compute timing of Msg3 retransmission on UL-SCH (first UE transmission in RA procedure). +/*! \brief Function to compute timing of Msg3 retransmission on UL-SCH (first UE transmission in RA procedure). @param frame_parms Pointer to DL frame parameter descriptor @param current_subframe Index of subframe where RA_RNTI was received @param current_frame Index of frame where RA_RNTI was received @@ -318,7 +303,7 @@ void get_Msg3_alloc_ret(LTE_DL_FRAME_PARMS *frame_parms, uint32_t *frame, uint8_t *subframe); -/* \brief Get ULSCH harq_pid for Msg3 from RAR subframe. This returns n+k mod 10 (k>6) and corresponds to the rule in Section 6.1.1 from 36.213 +/*! \brief Get ULSCH harq_pid for Msg3 from RAR subframe. This returns n+k mod 10 (k>6) and corresponds to the rule in Section 6.1.1 from 36.213 @param frame_parms Pointer to DL Frame Parameters @param frame Frame index @param current_subframe subframe of RAR transmission @@ -326,20 +311,20 @@ void get_Msg3_alloc_ret(LTE_DL_FRAME_PARMS *frame_parms, */ uint8_t get_Msg3_harq_pid(LTE_DL_FRAME_PARMS *frame_parms,uint32_t frame,uint8_t current_subframe); -/* \brief Get ULSCH harq_pid from PHICH subframe +/*! \brief Get ULSCH harq_pid from PHICH subframe @param frame_parms Pointer to DL Frame Parameters @param subframe subframe of PHICH @returns harq_pid (0 ... 7) */ -/** \brief Function to indicate failure of contention resolution or RA procedure. It places the UE back in PRACH mode. +/*! \brief Function to indicate failure of contention resolution or RA procedure. It places the UE back in PRACH mode. @param Mod_id Instance index of UE @param CC_id Component Carrier Index @param eNB_index Index of eNB */ void ra_failed(uint8_t Mod_id,uint8_t CC_id,uint8_t eNB_index); -/** \brief Function to indicate success of contention resolution or RA procedure. +/*! \brief Function to indicate success of contention resolution or RA procedure. @param Mod_id Instance index of UE @param CC_id Component Carrier Index @param eNB_index Index of eNB @@ -348,16 +333,15 @@ void ra_succeeded(uint8_t Mod_id,uint8_t CC_id,uint8_t eNB_index); uint8_t phich_subframe_to_harq_pid(LTE_DL_FRAME_PARMS *frame_parms,uint32_t frame,uint8_t subframe); -/* \brief Get PDSCH subframe (n+k) from PDCCH subframe n using relationship from Table 8-2 from 36.213 +/*! \brief Get PDSCH subframe (n+k) from PDCCH subframe n using relationship from Table 8-2 from 36.213 @param frame_parms Pointer to DL Frame Parameters @param n subframe of PDCCH @returns PDSCH subframe (0 ... 7) (note: this is n+k from Table 8-2) */ uint8_t pdcch_alloc2ul_subframe(LTE_DL_FRAME_PARMS *frame_parms,uint8_t n); -// -/*! - \brief Compute ACK/NACK information for PUSCH/PUCCH for UE transmission in subframe n. This function implements table 10.1-1 of 36.213, p. 69. + +/*! \brief Compute ACK/NACK information for PUSCH/PUCCH for UE transmission in subframe n. This function implements table 10.1-1 of 36.213, p. 69. @param frame_parms Pointer to DL frame parameter descriptor @param harq_ack Pointer to dlsch_ue harq_ack status descriptor @param subframe Subframe for UE transmission (n in 36.213) @@ -366,8 +350,7 @@ uint8_t pdcch_alloc2ul_subframe(LTE_DL_FRAME_PARMS *frame_parms,uint8_t n); */ uint8_t get_ack(LTE_DL_FRAME_PARMS *frame_parms,harq_status_t *harq_ack,uint8_t subframe,uint8_t *o_ACK); -/*! - \brief Compute UL ACK subframe from DL subframe. This is used to retrieve corresponding DLSCH HARQ pid at eNB upon reception of ACK/NAK information on PUCCH/PUSCH. Derived from Table 10.1-1 in 36.213 (p. 69 in version 8.6) +/*! \brief Compute UL ACK subframe from DL subframe. This is used to retrieve corresponding DLSCH HARQ pid at eNB upon reception of ACK/NAK information on PUCCH/PUSCH. Derived from Table 10.1-1 in 36.213 (p. 69 in version 8.6) @param frame_parms Pointer to DL frame parameter descriptor @param subframe Subframe for UE transmission (n in 36.213) @param ACK_index TTI bundling index (0,1) @@ -375,16 +358,14 @@ uint8_t get_ack(LTE_DL_FRAME_PARMS *frame_parms,harq_status_t *harq_ack,uint8_t */ uint8_t ul_ACK_subframe2_dl_subframe(LTE_DL_FRAME_PARMS *frame_parms,uint8_t subframe,uint8_t ACK_index); -/*! - \brief Computes number of DL subframes represented by a particular ACK received on UL (M from Table 10.1-1 in 36.213, p. 69 in version 8.6) +/*! \brief Computes number of DL subframes represented by a particular ACK received on UL (M from Table 10.1-1 in 36.213, p. 69 in version 8.6) @param frame_parms Pointer to DL frame parameter descriptor @param subframe Subframe for UE transmission (n in 36.213) @returns Number of DL subframes (M) */ uint8_t ul_ACK_subframe2_M(LTE_DL_FRAME_PARMS *frame_parms,unsigned char subframe); -/*! - \brief Indicates the SR TXOp in current subframe. Implements Table 10.1-5 from 36.213. +/*! \brief Indicates the SR TXOp in current subframe. Implements Table 10.1-5 from 36.213. @param phy_vars_ue Pointer to UE variables @param eNB_id ID of eNB which is to receive the SR @param subframe index of next subframe @@ -392,8 +373,7 @@ uint8_t ul_ACK_subframe2_M(LTE_DL_FRAME_PARMS *frame_parms,unsigned char subfram */ uint8_t is_SR_TXOp(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t subframe); -/*! - \brief Indicates the SR TXOp in current subframe for eNB and particular UE index. Implements Table 10.1-5 from 36.213. +/*! \brief Indicates the SR TXOp in current subframe for eNB and particular UE index. Implements Table 10.1-5 from 36.213. @param phy_vars_eNB Pointer to eNB variables @param UE_id ID of UE which may be issuing the SR @param subframe index of last subframe @@ -401,16 +381,14 @@ uint8_t is_SR_TXOp(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t subframe); */ uint8_t is_SR_subframe(PHY_VARS_eNB *phy_vars_eNB,uint8_t UE_id,uint8_t subframe); -/*! - \brief Gives the UL subframe corresponding to a PDDCH order in subframe n +/*! \brief Gives the UL subframe corresponding to a PDDCH order in subframe n @param frame_parms Pointer to DL frame parameters @param n subframe of PDCCH @returns UL subframe corresponding to pdcch order */ uint8_t pdcch_alloc2ul_subframe(LTE_DL_FRAME_PARMS *frame_parms,uint8_t n); -/*! - \brief Gives the UL frame corresponding to a PDDCH order in subframe n +/*! \brief Gives the UL frame corresponding to a PDDCH order in subframe n @param frame_parms Pointer to DL frame parameters @param frame Frame of received PDCCH @param n subframe of PDCCH @@ -431,11 +409,11 @@ int32_t remove_ue(uint16_t rnti, PHY_VARS_eNB *phy_vars_eNB,uint8_t abstraction_ void process_timing_advance(module_id_t Mod_id,uint8_t CC_id,int16_t timing_advance); void process_timing_advance_rar(PHY_VARS_UE *phy_vars_ue,uint16_t timing_advance); -unsigned int get_tx_amp(int gain_dBm, int gain_max_dBm); +unsigned int get_tx_amp(int power_dBm, int power_max_dBm, int N_RB_UL, int nb_rb); void phy_reset_ue(module_id_t Mod_id,uint8_t CC_id,uint8_t eNB_index); -/** \brief This function retrives the resource (n1_pucch) corresponding to a PDSCH transmission in +/*! \brief This function retrives the resource (n1_pucch) corresponding to a PDSCH transmission in subframe n-4 which is acknowledged in subframe n (for FDD) according to n1_pucch = Ncce + N1_pucch. For TDD, this routine computes the complex procedure described in Section 10.1 of 36.213 (through tables 10.1-1,10.1-2) @param phy_vars_ue Pointer to UE variables @@ -451,7 +429,7 @@ uint16_t get_n1_pucch(PHY_VARS_UE *phy_vars_ue, uint8_t *b, uint8_t SR); -/** \brief This function retrives the resource (n1_pucch) corresponding to a PDSCH transmission in +/*! \brief This function retrives the resource (n1_pucch) corresponding to a PDSCH transmission in subframe n-4 which is acknowledged in subframe n (for FDD) according to n1_pucch = Ncce + N1_pucch. For TDD, this routine computes the procedure described in Section 10.1 of 36.213 (through tables 10.1-1,10.1-2) @param phy_vars_eNB Pointer to UE variables @@ -472,8 +450,7 @@ void get_n1_pucch_eNB(PHY_VARS_eNB *phy_vars_eNB, int16_t *n1_pucch3); -/*! - \brief This function retrieves the harq_pid of the corresponding DLSCH process and updates the error statistics of the DLSCH based on the received ACK info from UE along with the round index. It also performs the fine-grain rate-adaptation based on the error statistics derived from the ACK/NAK process. +/*! \brief This function retrieves the harq_pid of the corresponding DLSCH process and updates the error statistics of the DLSCH based on the received ACK info from UE along with the round index. It also performs the fine-grain rate-adaptation based on the error statistics derived from the ACK/NAK process. @param UE_id Local UE index on which to act @param subframe Index of subframe @param phy_vars_eNB Pointer to eNB variables on which to act @@ -490,8 +467,7 @@ void process_HARQ_feedback(uint8_t UE_id, uint8_t pucch_sel, uint8_t SR_payload); -/*! - \brief This function retrieves the PHY UE mode. It is used as a helper function for the UE MAC. +/*! \brief This function retrieves the PHY UE mode. It is used as a helper function for the UE MAC. @param Mod_id Local UE index on which to act @param CC_id Component Carrier Index @param eNB_index ID of eNB @@ -499,7 +475,7 @@ void process_HARQ_feedback(uint8_t UE_id, */ UE_MODE_t get_ue_mode(uint8_t Mod_id,uint8_t CC_id,uint8_t eNB_index); -/** \brief This function implements the power control mechanism for PUCCH from 36.213. +/*! \brief This function implements the power control mechanism for PUCCH from 36.213. @param phy_vars_ue PHY variables @param subframe Index of subframe @param eNB_id Index of eNB @@ -508,7 +484,7 @@ UE_MODE_t get_ue_mode(uint8_t Mod_id,uint8_t CC_id,uint8_t eNB_index); */ int8_t pucch_power_cntl(PHY_VARS_UE *phy_vars_ue,uint8_t subframe,uint8_t eNB_id,PUCCH_FMT_t pucch_fmt); -/** \brief This function implements the power control mechanism for PUCCH from 36.213. +/*! \brief This function implements the power control mechanism for PUCCH from 36.213. @param phy_vars_ue PHY variables @param subframe Index of subframe @param eNB_id Index of eNB @@ -520,7 +496,7 @@ void pusch_power_cntl(PHY_VARS_UE *phy_vars_ue,uint8_t subframe,uint8_t eNB_id,u int8_t get_PHR(uint8_t Mod_id, uint8_t CC_id, uint8_t eNB_index); #ifdef LOCALIZATION -/** \brief This function collects eNB_UE stats and aggregate them in lists for localization +/*! \brief This function collects eNB_UE stats and aggregate them in lists for localization @param phy_vars_ue PHY variables @param UE_id Index of UE @param frame Index of frame @@ -542,7 +518,8 @@ int16_t get_hundred_times_delta_IF_eNB(PHY_VARS_eNB *phy_vars_eNB,uint8_t UE_id, int16_t get_hundred_times_delta_IF_mac(module_id_t module_idP, uint8_t CC_id, rnti_t rnti, uint8_t harq_pid); -int16_t get_target_ul_rx_power(module_id_t module_idP, uint8_t CC_id); +int16_t get_target_pusch_rx_power(module_id_t module_idP, uint8_t CC_id); +int16_t get_target_pucch_rx_power(module_id_t module_idP, uint8_t CC_id); int get_ue_active_harq_pid(uint8_t Mod_id,uint8_t CC_id,uint16_t rnti,int frame, uint8_t subframe,uint8_t *harq_pid,uint8_t *round,uint8_t ul_flag); @@ -552,8 +529,8 @@ void dump_dlsch(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t subframe,uint8_t void dump_dlsch_SI(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t subframe); void dump_dlsch_ra(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t subframe); +/*@}*/ -/**@}*/ #endif //OPENAIR_LTE extern int slot_irq_handler(int irq, void *cookie); diff --git a/openair1/SCHED/phy_procedures_lte_common.c b/openair1/SCHED/phy_procedures_lte_common.c index bc2638f2b0..e92396989a 100755 --- a/openair1/SCHED/phy_procedures_lte_common.c +++ b/openair1/SCHED/phy_procedures_lte_common.c @@ -62,7 +62,7 @@ void get_Msg3_alloc(LTE_DL_FRAME_PARMS *frame_parms, if (*subframe>9) { *subframe = *subframe-10; - *frame = current_frame+1; + *frame = (current_frame+1) & 1023; } else { *frame=current_frame; } @@ -77,17 +77,17 @@ void get_Msg3_alloc(LTE_DL_FRAME_PARMS *frame_parms, case 4: *subframe = 2; - *frame = current_frame+1; + *frame = (current_frame+1) & 1023; break; case 5: *subframe = 2; - *frame = current_frame+1; + *frame = (current_frame+1) & 1023; break; case 9: *subframe = 7; - *frame = current_frame+1; + *frame = (current_frame+1) & 1023; break; } } else if (frame_parms->tdd_config == 3) { @@ -97,22 +97,22 @@ void get_Msg3_alloc(LTE_DL_FRAME_PARMS *frame_parms, case 5: case 6: *subframe = 2; - *frame = current_frame+1; + *frame = (current_frame+1) & 1023; break; case 7: *subframe = 3; - *frame = current_frame+1; + *frame = (current_frame+1) & 1023; break; case 8: *subframe = 4; - *frame = current_frame+1; + *frame = (current_frame+1) & 1023; break; case 9: *subframe = 2; - *frame = current_frame+2; + *frame = (current_frame+2) & 1023; break; } } @@ -126,14 +126,14 @@ void get_Msg3_alloc_ret(LTE_DL_FRAME_PARMS *frame_parms, unsigned char *subframe) { if (frame_parms->frame_type == FDD) { - // always retransmit in n+8 - *subframe = current_subframe+8; + /* always retransmit in n+8 */ + *subframe = current_subframe + 8; - if (*subframe>9) { - *subframe = *subframe-10; - *frame = current_frame+1; + if (*subframe > 9) { + *subframe = *subframe - 10; + *frame = (current_frame + 1) & 1023; } else { - *frame=current_frame; + *frame = current_frame; } } else { if (frame_parms->tdd_config == 1) { @@ -141,12 +141,12 @@ void get_Msg3_alloc_ret(LTE_DL_FRAME_PARMS *frame_parms, // original PUSCH in 3, PHICH in 9, ret in 3 // original PUSCH in 7, PHICH in 1 (S), ret in 7 // original PUSCH in 8, PHICH in 4, ret in 8 - *frame = current_frame+1; + *frame = (current_frame+1) & 1023; } else if (frame_parms->tdd_config == 3) { // original PUSCH in 2, PHICH in 8, ret in 2 next frame // original PUSCH in 3, PHICH in 9, ret in 3 next frame // original PUSCH in 4, PHICH in 0, ret in 4 next frame - *frame=current_frame+1; + *frame=(current_frame+1) & 1023; } } } @@ -161,7 +161,7 @@ uint8_t get_Msg3_harq_pid(LTE_DL_FRAME_PARMS *frame_parms, if (frame_parms->frame_type ==FDD) { ul_subframe = (current_subframe>3) ? (current_subframe-4) : (current_subframe+6); - ul_frame = (current_subframe>3) ? (frame+1) : frame; + ul_frame = (current_subframe>3) ? ((frame+1)&1023) : frame; } else { switch (frame_parms->tdd_config) { case 1: diff --git a/openair1/SCHED/phy_procedures_lte_eNb.c b/openair1/SCHED/phy_procedures_lte_eNb.c index 32ff858996..aa4df65eff 100755 --- a/openair1/SCHED/phy_procedures_lte_eNb.c +++ b/openair1/SCHED/phy_procedures_lte_eNb.c @@ -49,7 +49,7 @@ #include "SCHED/phy_procedures_emos.h" #endif -#define DEBUG_PHY_PROC +//#define DEBUG_PHY_PROC (Already defined in cmake) //#define DEBUG_ULSCH //#ifdef OPENAIR2 @@ -64,7 +64,7 @@ #if defined(ENABLE_ITTI) # include "intertask_interface.h" -# if defined(ENABLE_RAL) +# if ENABLE_RAL # include "timer.h" # endif #endif @@ -74,8 +74,6 @@ #define NS_PER_SLOT 500000 #define PUCCH 1 -#define PUCCH1_THRES 15 -#define PUCCH1a_THRES 15 extern int exit_openair; //extern void do_OFDM_mod(mod_sym_t **txdataF, int32_t **txdata, uint32_t frame, uint16_t next_slot, LTE_DL_FRAME_PARMS *frame_parms); @@ -161,6 +159,15 @@ int32_t add_ue(int16_t rnti, PHY_VARS_eNB *phy_vars_eNB) phy_vars_eNB->dlsch_eNB[i][0]->rnti = rnti; phy_vars_eNB->ulsch_eNB[i]->rnti = rnti; phy_vars_eNB->eNB_UE_stats[i].crnti = rnti; + + phy_vars_eNB->eNB_UE_stats[i].Po_PUCCH1_below = 0; + phy_vars_eNB->eNB_UE_stats[i].Po_PUCCH1_above = (int32_t)pow(10.0,.1*(phy_vars_eNB->lte_frame_parms.ul_power_control_config_common.p0_NominalPUCCH+phy_vars_eNB->rx_total_gain_eNB_dB)); + phy_vars_eNB->eNB_UE_stats[i].Po_PUCCH = (int32_t)pow(10.0,.1*(phy_vars_eNB->lte_frame_parms.ul_power_control_config_common.p0_NominalPUCCH+phy_vars_eNB->rx_total_gain_eNB_dB)); + LOG_I(PHY,"Initializing Po_PUCCH: p0_NominalPUCCH %d, gain %d => %d\n", + phy_vars_eNB->lte_frame_parms.ul_power_control_config_common.p0_NominalPUCCH, + phy_vars_eNB->rx_total_gain_eNB_dB, + phy_vars_eNB->eNB_UE_stats[i].Po_PUCCH); + return(i); } } @@ -172,10 +179,6 @@ int32_t remove_ue(uint16_t rnti, PHY_VARS_eNB *phy_vars_eNB, uint8_t abstraction { uint8_t i; -#ifdef DEBUG_PHY_PROC - LOG_I(PHY,"eNB %d removing UE with rnti %x\n",phy_vars_eNB->Mod_id,rnti); -#endif - for (i=0; idlsch_eNB[i]==NULL) || (phy_vars_eNB->ulsch_eNB[i]==NULL)) { MSC_LOG_EVENT(MSC_PHY_ENB, "0 Failed remove ue %"PRIx16" (ENOMEM)", rnti); @@ -184,6 +187,9 @@ int32_t remove_ue(uint16_t rnti, PHY_VARS_eNB *phy_vars_eNB, uint8_t abstraction } else { if (phy_vars_eNB->eNB_UE_stats[i].crnti==rnti) { MSC_LOG_EVENT(MSC_PHY_ENB, "0 Removed ue %"PRIx16" ", rnti); +#ifdef DEBUG_PHY_PROC + LOG_I(PHY,"eNB %d removing UE %d with rnti %x\n",phy_vars_eNB->Mod_id,i,rnti); +#endif //msg("[PHY] UE_id %d\n",i); clean_eNb_dlsch(phy_vars_eNB->dlsch_eNB[i][0], abstraction_flag); clean_eNb_ulsch(phy_vars_eNB->ulsch_eNB[i],abstraction_flag); @@ -221,12 +227,11 @@ int get_ue_active_harq_pid(const uint8_t Mod_id,const uint8_t CC_id,const uint16 LTE_eNB_DLSCH_t *DLSCH_ptr; LTE_eNB_ULSCH_t *ULSCH_ptr; - // uint8_t subframe_m4; uint8_t ulsch_subframe,ulsch_frame; uint8_t i; int8_t UE_id = find_ue(rnti,PHY_vars_eNB_g[Mod_id][CC_id]); - // int frame = PHY_vars_eNB_g[Mod_id][CC_id]->proc[sched_subframe].frame_tx; - // int subframe = PHY_vars_eNB_g[Mod_id][CC_id]->proc[sched_subframe].subframe_tx; + int sf1=(10*frame)+subframe,sf2,sfdiff,sfdiff_max=7; + int first_proc_found=0; if (UE_id==-1) { LOG_D(PHY,"Cannot find UE with rnti %x (Mod_id %d, CC_id %d)\n",rnti, Mod_id, CC_id); @@ -236,42 +241,45 @@ int get_ue_active_harq_pid(const uint8_t Mod_id,const uint8_t CC_id,const uint16 if (ul_flag == 0) {// this is a DL request DLSCH_ptr = PHY_vars_eNB_g[Mod_id][CC_id]->dlsch_eNB[(uint32_t)UE_id][0]; - /* - #ifdef DEBUG_PHY_PROC - LOG_D(PHY,"[eNB %d] get_ue_active_harq_pid: Frame %d subframe %d, current harq_id %d\n", - Mod_id,frame,subframe,DLSCH_ptr->harq_ids[subframe]); - #endif - */ - // switch on TDD or FDD configuration here later - *harq_pid = DLSCH_ptr->harq_ids[subframe]; - if ((*harq_pidMdlharq) && - ((DLSCH_ptr->harq_processes[*harq_pid]->round > 0))) { + // set to no available process first + *harq_pid = -1; - *round = DLSCH_ptr->harq_processes[*harq_pid]->round; - LOG_D(PHY,"round %d\n",*round); + for (i=0; iMdlharq; i++) { + if (DLSCH_ptr->harq_processes[i]!=NULL) { + if (DLSCH_ptr->harq_processes[i]->status != ACTIVE) { + // store first inactive process + if (first_proc_found == 0) { + first_proc_found = 1; + *harq_pid = i; + *round = 0; + LOG_D(PHY,"process %d is first free process\n",i); + } + else { + LOG_D(PHY,"process %d is free\n",i); + } + } else { + sf2 = (DLSCH_ptr->harq_processes[i]->frame*10) + DLSCH_ptr->harq_processes[i]->subframe; + if (sf2<=sf1) + sfdiff = sf1-sf2; + else // this happens when wrapping around 1024 frame barrier + sfdiff = 10240 + sf1-sf2; + LOG_D(PHY,"process %d is active, round %d (waiting %d)\n",i,DLSCH_ptr->harq_processes[i]->round,sfdiff); - // else if ((subframe_m4==5) || (subframe_m4==6)) { - // *harq_pid = 0;//DLSCH_ptr->harq_ids[subframe_m4];//Ankit - // *round = DLSCH_ptr->harq_processes[*harq_pid]->round; - // } - } else { - // get first free harq_pid (i.e. round 0) - for (i=0; iMdlharq; i++) { - if (DLSCH_ptr->harq_processes[i]!=NULL) { - if (DLSCH_ptr->harq_processes[i]->status != ACTIVE) { - *harq_pid = i;//0;//i; //(Ankit) - *round = 0; - return(0); - } else { - LOG_D(PHY,"process %d is active\n",i); - } - } else { - LOG_E(PHY,"[eNB %d] DLSCH process %d for rnti %x (UE_id %d) not allocated\n",Mod_id,i,rnti,UE_id); - return(-1); - } + if (sfdiff>sfdiff_max) { // this is an active process that is waiting longer than the others (and longer than 7 ms) + sfdiff_max = sfdiff; + *harq_pid = i; + *round = DLSCH_ptr->harq_processes[i]->round; + first_proc_found = 1; + } + } + } else { // a process is not defined + LOG_E(PHY,"[eNB %d] DLSCH process %d for rnti %x (UE_id %d) not allocated\n",Mod_id,i,rnti,UE_id); + return(-1); } } + LOG_D(PHY,"get_ue_active_harq_pid DL => Frame %d, Subframe %d : harq_pid %d\n", + frame,subframe,*harq_pid); } else { // This is a UL request ULSCH_ptr = PHY_vars_eNB_g[Mod_id][CC_id]->ulsch_eNB[(uint32_t)UE_id]; @@ -312,10 +320,10 @@ int get_nCCE_offset(const unsigned char L, const int nCCE, const int common_dci, if (common_dci == 1) { // check CCE(0 ... L-1) nb_candidates = (L==4) ? 4 : 2; + nb_candidates = min(nb_candidates,nCCE/L); - for (m = 0 ; m < nb_candidates ; m++) { + for (m = nb_candidates-1 ; m >=0 ; m--) { search_space_free = 1; - for (l=0; lPHY_measurements_eNB[0].n0_power_tot_dBm; return PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.ul_power_control_config_common.p0_NominalPUSCH; } +int16_t get_target_pucch_rx_power(const module_id_t module_idP, const uint8_t CC_id) +{ + //return PHY_vars_eNB_g[module_idP][CC_id]->PHY_measurements_eNB[0].n0_power_tot_dBm; + return PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.ul_power_control_config_common.p0_NominalPUCCH; +} + #ifdef EMOS void phy_procedures_emos_eNB_TX(unsigned char subframe, PHY_VARS_eNB *phy_vars_eNB) { @@ -493,6 +506,9 @@ void phy_procedures_emos_eNB_RX(unsigned char subframe,PHY_VARS_eNB *phy_vars_eN last_subframe_emos=0; + + + #ifdef EMOS_CHANNEL //if (last_slot%2==1) // this is for all UL subframes @@ -571,7 +587,7 @@ void fill_dci(DCI_PDU *DCI_pdu, uint8_t sched_subframe, PHY_VARS_eNB *phy_vars_e switch (phy_vars_eNB->lte_frame_parms.N_RB_DL) { case 6: if (phy_vars_eNB->lte_frame_parms.frame_type == FDD) { - DCI_pdu->dci_alloc[0].dci_length = sizeof_DCI1A_5MHz_FDD_t; + DCI_pdu->dci_alloc[0].dci_length = sizeof_DCI1A_1_5MHz_FDD_t; ((DCI1A_1_5MHz_FDD_t*)&bcch_pdu)->type = 1; ((DCI1A_1_5MHz_FDD_t*)&bcch_pdu)->vrb_type = 0; ((DCI1A_1_5MHz_FDD_t*)&bcch_pdu)->rballoc = computeRIV(25,10,3); @@ -653,7 +669,7 @@ void fill_dci(DCI_PDU *DCI_pdu, uint8_t sched_subframe, PHY_VARS_eNB *phy_vars_e case 100: if (phy_vars_eNB->lte_frame_parms.frame_type == FDD) { - DCI_pdu->dci_alloc[0].dci_length = sizeof_DCI1A_10MHz_FDD_t; + DCI_pdu->dci_alloc[0].dci_length = sizeof_DCI1A_20MHz_FDD_t; ((DCI1A_20MHz_FDD_t*)&bcch_pdu)->type = 1; ((DCI1A_20MHz_FDD_t*)&bcch_pdu)->vrb_type = 0; ((DCI1A_20MHz_FDD_t*)&bcch_pdu)->rballoc = computeRIV(25,10,3); @@ -1225,7 +1241,7 @@ int QPSK2[4]= {AMP_OVER_2|(AMP_OVER_2<<16),AMP_OVER_2|((65536-AMP_OVER_2)<<16),( #if defined(ENABLE_ITTI) -# if defined(ENABLE_RAL) +# if ENABLE_RAL extern PHY_MEASUREMENTS PHY_measurements; void phy_eNB_lte_measurement_thresholds_test_and_report(instance_t instanceP, ral_threshold_phy_t* threshold_phy_pP, uint16_t valP) @@ -1374,7 +1390,7 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e #ifdef Rel10 MCH_PDU *mch_pduP; MCH_PDU mch_pdu; - uint8_t sync_area=255; + // uint8_t sync_area=255; #endif #if defined(SMBV) && !defined(EXMIMO) // counts number of allocations in subframe @@ -1518,10 +1534,12 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e phy_vars_eNB->lte_eNB_common_vars.txdataF[0], AMP, subframe<<1,0); - generate_pilots_slot(phy_vars_eNB, - phy_vars_eNB->lte_eNB_common_vars.txdataF[0], - AMP, - (subframe<<1)+1,0); + if (subframe_select(&phy_vars_eNB->lte_frame_parms,subframe) == SF_DL) + generate_pilots_slot(phy_vars_eNB, + phy_vars_eNB->lte_eNB_common_vars.txdataF[0], + AMP, + (subframe<<1)+1,0); + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_ENB_RS_TX,0); // First half of PSS/SSS (FDD) @@ -1832,7 +1850,8 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e #ifdef DEBUG_PHY_PROC LOG_D(PHY,"[eNB %"PRIu8"] SI generate_eNB_dlsch_params_from_dci\n", phy_vars_eNB->Mod_id); #endif - generate_eNB_dlsch_params_from_dci(subframe, + generate_eNB_dlsch_params_from_dci(frame, + subframe, &DCI_pdu->dci_alloc[i].dci_pdu[0], DCI_pdu->dci_alloc[i].rnti, DCI_pdu->dci_alloc[i].format, @@ -1872,7 +1891,8 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e #ifdef DEBUG_PHY_PROC LOG_D(PHY,"[eNB %"PRIu8"] RA generate_eNB_dlsch_params_from_dci\n", phy_vars_eNB->Mod_id); #endif - generate_eNB_dlsch_params_from_dci(subframe, + generate_eNB_dlsch_params_from_dci(frame, + subframe, &DCI_pdu->dci_alloc[i].dci_pdu[0], DCI_pdu->dci_alloc[i].rnti, DCI_pdu->dci_alloc[i].format, @@ -1933,7 +1953,8 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e } #endif - generate_eNB_dlsch_params_from_dci(subframe, + generate_eNB_dlsch_params_from_dci(frame, + subframe, &DCI_pdu->dci_alloc[i].dci_pdu[0], DCI_pdu->dci_alloc[i].rnti, DCI_pdu->dci_alloc[i].format, @@ -1999,7 +2020,7 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e if (harq_pid==255) { LOG_E(PHY,"[eNB %"PRIu8"] Frame %d: Bad harq_pid for ULSCH allocation\n",phy_vars_eNB->Mod_id,phy_vars_eNB->proc[sched_subframe].frame_tx); - mac_exit_wrapper("Invalid harq_pid (255) detected"); + //mac_exit_wrapper("Invalid harq_pid (255) detected"); return; // not reached } @@ -2171,6 +2192,8 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e #ifdef DEBUG_PHY_PROC #ifdef DEBUG_DLSCH + //FIXME: The code below is commented as next_slot is not defined which results in failed compilation + /* LOG_D(PHY,"[eNB %"PRIu8"][SI] Frame %d, slot %d: Calling generate_dlsch (SI) with input size = %"PRIu16", num_pdcch_symbols %"PRIu8"\n", phy_vars_eNB->Mod_id,phy_vars_eNB->proc[sched_subframe].frame_tx, next_slot, input_buffer_length,num_pdcch_symbols); // FIXME this code is broken (next_slot?) @@ -2178,6 +2201,7 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e LOG_T(PHY,"%x.",i,DLSCH_pdu[i]);// FIXME this code is broken (number of arguments) LOG_T(PHY,"\n"); + */ #endif #endif @@ -2259,7 +2283,10 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e LOG_T(PHY,"%x.",dlsch_input_buffer[i]); LOG_T(PHY,"\n"); */ - UE_id = add_ue(crnti,phy_vars_eNB); + if (crnti!=0) + UE_id = add_ue(crnti,phy_vars_eNB); + else + UE_id = -1; if (UE_id==-1) { LOG_W(PHY,"[eNB] Max user count reached.\n"); @@ -2675,13 +2702,22 @@ void process_HARQ_feedback(uint8_t UE_id, dl_harq_pid[0] = dlsch->harq_ids[subframe_m4]; M=1; - if (pusch_flag == 1) + if (pusch_flag == 1) { dlsch_ACK[0] = phy_vars_eNB->ulsch_eNB[(uint8_t)UE_id]->harq_processes[harq_pid]->o_ACK[0]; - else + if (dlsch->subframe_tx[subframe_m4]==1) + LOG_D(PHY,"[eNB %d] Frame %d: Received ACK/NAK %d on PUSCH for subframe %d\n",phy_vars_eNB->Mod_id, + frame,dlsch_ACK[0],subframe_m4); + } + else { dlsch_ACK[0] = pucch_payload[0]; + LOG_D(PHY,"[eNB %d] Frame %d: Received ACK/NAK %d on PUCCH for subframe %d\n",phy_vars_eNB->Mod_id, + frame,dlsch_ACK[0],subframe_m4); + /* + if (dlsch_ACK[0]==0) + AssertFatal(0,"Exiting on NAK on PUCCH\n"); + */ + } - LOG_D(PHY,"[eNB %d] Frame %d: Received ACK/NAK %d for subframe %d\n",phy_vars_eNB->Mod_id, - frame,dlsch_ACK[0],subframe_m4); #if defined(MESSAGE_CHART_GENERATOR_PHY) MSC_LOG_RX_MESSAGE( @@ -3067,7 +3103,7 @@ void prach_procedures(PHY_VARS_eNB *phy_vars_eNB,uint8_t sched_subframe,uint8_t memset(&preamble_delay_list[0],0,64*sizeof(uint16_t)); if (abstraction_flag == 0) { - LOG_D(PHY,"[eNB %d][RAPROC] Frame %d, Subframe %d : PRACH RX Signal Power : %d dBm\n",phy_vars_eNB->Mod_id, + LOG_D(PHY,"[eNB %d][RAPROC] Frame %d, Subframe %d : PRACH RX Signal Power : %d dBm\n",phy_vars_eNB->Mod_id, frame,subframe,dB_fixed(signal_energy(&phy_vars_eNB->lte_eNB_common_vars.rxdata[0][0][subframe*phy_vars_eNB->lte_frame_parms.samples_per_tti],512)) - phy_vars_eNB->rx_total_gain_eNB_dB); // LOG_I(PHY,"[eNB %d][RAPROC] PRACH: rootSequenceIndex %d, prach_ConfigIndex %d, zeroCorrelationZoneConfig %d, highSpeedFlag %d, prach_FreqOffset %d\n",phy_vars_eNB->Mod_id,phy_vars_eNB->lte_frame_parms.prach_config_common.rootSequenceIndex,phy_vars_eNB->lte_frame_parms.prach_config_common.prach_ConfigInfo.prach_ConfigIndex, phy_vars_eNB->lte_frame_parms.prach_config_common.prach_ConfigInfo.zeroCorrelationZoneConfig,phy_vars_eNB->lte_frame_parms.prach_config_common.prach_ConfigInfo.highSpeedFlag,phy_vars_eNB->lte_frame_parms.prach_config_common.prach_ConfigInfo.prach_FreqOffset); @@ -3129,21 +3165,46 @@ void prach_procedures(PHY_VARS_eNB *phy_vars_eNB,uint8_t sched_subframe,uint8_t phy_vars_eNB->eNB_UE_stats[(uint32_t)UE_id].UE_timing_offset = preamble_delay_list[preamble_max]&0x1FFF; //limit to 13 (=11+2) bits //phy_vars_eNb->eNB_UE_stats[(uint32_t)UE_id].mode = PRACH; phy_vars_eNB->eNB_UE_stats[(uint32_t)UE_id].sector = 0; - LOG_I(PHY,"[eNB %d][RAPROC] Frame %d, subframe %d Initiating RA procedure with preamble %d, energy %d.%d dB, delay %d\n", + LOG_I(PHY,"[eNB %d/%d][RAPROC] Frame %d, subframe %d Initiating RA procedure (UE_id %d) with preamble %d, energy %d.%d dB, delay %d\n", phy_vars_eNB->Mod_id, + phy_vars_eNB->CC_id, frame, subframe, + UE_id, preamble_max, preamble_energy_max/10, preamble_energy_max%10, preamble_delay_list[preamble_max]); #ifdef OPENAIR2 + uint8_t update_TA=4; + + switch (phy_vars_eNB->lte_frame_parms.N_RB_DL) { + case 6: + update_TA = 16; + break; + + case 25: + update_TA = 4; + break; + + case 50: + update_TA = 2; + break; + + case 100: + update_TA = 1; + break; + } + + + mac_xface->initiate_ra_proc(phy_vars_eNB->Mod_id, phy_vars_eNB->CC_id, frame, preamble_max, - preamble_delay_list[preamble_max], - 0,subframe,0); + preamble_delay_list[preamble_max]*update_TA, + 0,subframe,0); + #endif } else { MSC_LOG_EVENT(MSC_PHY_ENB, "0 RA Failed add user, too many"); @@ -3197,6 +3258,13 @@ void phy_procedures_eNB_RX(const unsigned char sched_subframe,PHY_VARS_eNB *phy_ LOG_D(PHY,"[eNB %d] Frame %d: Doing phy_procedures_eNB_RX(%d)\n",phy_vars_eNB->Mod_id,frame, subframe); #endif + /* +#ifdef OAI_USRP + for (aa=0;aalte_frame_parms.nb_antennas_rx;aa++) + rescale(&phy_vars_eNB->lte_eNB_common_vars.rxdata[0][aa][subframe*phy_vars_eNB->lte_frame_parms.samples_per_tti], + phy_vars_eNB->lte_frame_parms.samples_per_tti); +#endif + */ if (abstraction_flag == 0) { remove_7_5_kHz(phy_vars_eNB,subframe<<1); remove_7_5_kHz(phy_vars_eNB,(subframe<<1)+1); @@ -3346,9 +3414,9 @@ void phy_procedures_eNB_RX(const unsigned char sched_subframe,PHY_VARS_eNB *phy_ round = phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->round; #ifdef DEBUG_PHY_PROC - LOG_D(PHY,"[eNB %d][PUSCH %d] frame %d subframe %d Scheduling PUSCH/ULSCH Reception for rnti %x\n", + LOG_D(PHY,"[eNB %d][PUSCH %d] frame %d subframe %d Scheduling PUSCH/ULSCH Reception for rnti %x (UE_id %d)\n", phy_vars_eNB->Mod_id,harq_pid, - frame,subframe,phy_vars_eNB->ulsch_eNB[i]->rnti); + frame,subframe,phy_vars_eNB->ulsch_eNB[i]->rnti,i); #endif #ifdef DEBUG_PHY_PROC @@ -3534,6 +3602,20 @@ void phy_procedures_eNB_RX(const unsigned char sched_subframe,PHY_VARS_eNB *phy_ phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->round-1, phy_vars_eNB->lte_frame_parms.maxHARQ_Msg3Tx-1); + LOG_I(PHY,"[eNB %d][PUSCH %d] frame %d subframe %d RNTI %x RX power (%d,%d) RSSI (%d,%d) N0 (%d,%d) dB ACK (%d,%d), decoding iter %d\n", + phy_vars_eNB->Mod_id,harq_pid, + frame,subframe, + phy_vars_eNB->ulsch_eNB[i]->rnti, + dB_fixed(phy_vars_eNB->lte_eNB_pusch_vars[i]->ulsch_power[0]), + dB_fixed(phy_vars_eNB->lte_eNB_pusch_vars[i]->ulsch_power[1]), + phy_vars_eNB->eNB_UE_stats[i].UL_rssi[0], + phy_vars_eNB->eNB_UE_stats[i].UL_rssi[1], + phy_vars_eNB->PHY_measurements_eNB->n0_power_dB[0], + phy_vars_eNB->PHY_measurements_eNB->n0_power_dB[1], + phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->o_ACK[0], + phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->o_ACK[1], + ret); + if (phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->round == phy_vars_eNB->lte_frame_parms.maxHARQ_Msg3Tx) { LOG_I(PHY,"[eNB %d][RAPROC] maxHARQ_Msg3Tx reached, abandoning RA procedure for UE %d\n", @@ -3621,10 +3703,24 @@ void phy_procedures_eNB_RX(const unsigned char sched_subframe,PHY_VARS_eNB *phy_ } } // ulsch in error else { - LOG_D(PHY,"[eNB %d][PUSCH %d] Frame %d subframe %d ULSCH received, setting round to 0, PHICH ACK\n", - phy_vars_eNB->Mod_id,harq_pid, - frame,subframe); - + if (phy_vars_eNB->ulsch_eNB[i]->Msg3_flag == 1) { + LOG_I(PHY,"[eNB %d][PUSCH %d] Frame %d subframe %d ULSCH received, setting round to 0, PHICH ACK\n", + phy_vars_eNB->Mod_id,harq_pid, + frame,subframe); + LOG_I(PHY,"[eNB %d][PUSCH %d] frame %d subframe %d RNTI %x RX power (%d,%d) RSSI (%d,%d) N0 (%d,%d) dB ACK (%d,%d), decoding iter %d\n", + phy_vars_eNB->Mod_id,harq_pid, + frame,subframe, + phy_vars_eNB->ulsch_eNB[i]->rnti, + dB_fixed(phy_vars_eNB->lte_eNB_pusch_vars[i]->ulsch_power[0]), + dB_fixed(phy_vars_eNB->lte_eNB_pusch_vars[i]->ulsch_power[1]), + phy_vars_eNB->eNB_UE_stats[i].UL_rssi[0], + phy_vars_eNB->eNB_UE_stats[i].UL_rssi[1], + phy_vars_eNB->PHY_measurements_eNB->n0_power_dB[0], + phy_vars_eNB->PHY_measurements_eNB->n0_power_dB[1], + phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->o_ACK[0], + phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->o_ACK[1], + ret); + } #if defined(MESSAGE_CHART_GENERATOR_PHY) MSC_LOG_RX_MESSAGE( MSC_PHY_ENB,MSC_PHY_UE, @@ -3893,6 +3989,8 @@ void phy_procedures_eNB_RX(const unsigned char sched_subframe,PHY_VARS_eNB *phy_ // if SR was detected, use the n1_pucch from SR, else use n1_pucch0 n1_pucch0 = (SR_payload==1) ? phy_vars_eNB->scheduling_request_config[i].sr_PUCCH_ResourceIndex:n1_pucch0; + LOG_D(PHY,"Demodulating PUCCH for ACK/NAK: n1_pucch0 %d (%d), SR_payload %d\n",n1_pucch0,phy_vars_eNB->scheduling_request_config[i].sr_PUCCH_ResourceIndex,SR_payload); + if (abstraction_flag == 0) metric0 = rx_pucch(phy_vars_eNB, pucch_format1a, @@ -4351,7 +4449,7 @@ void phy_procedures_eNB_lte(unsigned char subframe,PHY_VARS_eNB **phy_vars_eNB,u Mod_id = instance; switch (ITTI_MSG_ID(msg_p)) { -# if defined(ENABLE_RAL) +# if ENABLE_RAL case TIMER_HAS_EXPIRED: // check if it is a measurement timer diff --git a/openair1/SCHED/phy_procedures_lte_ue.c b/openair1/SCHED/phy_procedures_lte_ue.c index 7efee84b84..1ff5b37135 100755 --- a/openair1/SCHED/phy_procedures_lte_ue.c +++ b/openair1/SCHED/phy_procedures_lte_ue.c @@ -59,7 +59,7 @@ extern int card; #endif #endif -#define DEBUG_PHY_PROC +//#define DEBUG_PHY_PROC #define UE_TX_POWER (-10) //#ifdef OPENAIR2 @@ -82,7 +82,7 @@ fifo_dump_emos_UE emos_dump_UE; #if defined(ENABLE_ITTI) # include "intertask_interface.h" -# if defined(ENABLE_RAL) +# if ENABLE_RAL # include "timer.h" # endif #endif @@ -134,8 +134,8 @@ void dump_dlsch(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t subframe,uint8_t coded_bits_per_codeword = get_G(&phy_vars_ue->lte_frame_parms, phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->nb_rb, - phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->rb_alloc, - get_Qm(phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->mcs), + phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->rb_alloc_even, + phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->Qm, phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->Nl, phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->num_pdcch_symbols, phy_vars_ue->frame_rx, @@ -165,22 +165,26 @@ void dump_dlsch_SI(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t subframe) coded_bits_per_codeword = get_G(&phy_vars_ue->lte_frame_parms, phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->nb_rb, - phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->rb_alloc, - get_Qm(phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->mcs), + phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->rb_alloc_even, + 2, 1, phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->num_pdcch_symbols, phy_vars_ue->frame_rx, subframe, - phy_vars_ue->transmission_mode[eNB_id]); - LOG_D(PHY,"[UE %d] Dumping dlsch_SI : nb_rb %d, mcs %d, nb_rb %d, num_pdcch_symbols %d,G %d\n", + phy_vars_ue->transmission_mode[eNB_id]<7?0:phy_vars_ue->transmission_mode[eNB_id]); + LOG_I(PHY,"[UE %d] Dumping dlsch_SI : ofdm_symbol_size %d, nsymb %d, nb_rb %d, mcs %d, nb_rb %d, num_pdcch_symbols %d,G %d\n", phy_vars_ue->Mod_id, + phy_vars_ue->lte_frame_parms.ofdm_symbol_size, + nsymb, phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->nb_rb, phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->mcs, phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->nb_rb, phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->num_pdcch_symbols, coded_bits_per_codeword); - write_output("rxsigF0.m","rxsF0", phy_vars_ue->lte_ue_common_vars.rxdataF[0],2*nsymb*phy_vars_ue->lte_frame_parms.ofdm_symbol_size,2,1); + write_output("rxsig0.m","rxs0", &phy_vars_ue->lte_ue_common_vars.rxdata[0][subframe*phy_vars_ue->lte_frame_parms.samples_per_tti],phy_vars_ue->lte_frame_parms.samples_per_tti,1,1); + + write_output("rxsigF0.m","rxsF0", phy_vars_ue->lte_ue_common_vars.rxdataF[0],nsymb*phy_vars_ue->lte_frame_parms.ofdm_symbol_size,1,1); write_output("rxsigF0_ext.m","rxsF0_ext", phy_vars_ue->lte_ue_pdsch_vars_SI[0]->rxdataF_ext[0],2*nsymb*phy_vars_ue->lte_frame_parms.ofdm_symbol_size,1,1); write_output("dlsch00_ch0_ext.m","dl00_ch0_ext", phy_vars_ue->lte_ue_pdsch_vars_SI[0]->dl_ch_estimates_ext[0],phy_vars_ue->lte_frame_parms.N_RB_DL*12*nsymb,1,1); /* @@ -198,20 +202,67 @@ void dump_dlsch_SI(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t subframe) } #if defined(EXMIMO) || defined(OAI_USRP) -unsigned int prach_gain_table[31] = {100,112,126,141,158,178,200,224,251,282,316,359,398,447,501,562,631,708,794,891,1000,1122,1258,1412,1585,1778,1995,2239,2512,2818,3162}; - -unsigned int get_tx_amp(int power_dBm, int power_max_dBm) +//unsigned int gain_table[31] = {100,112,126,141,158,178,200,224,251,282,316,359,398,447,501,562,631,708,794,891,1000,1122,1258,1412,1585,1778,1995,2239,2512,2818,3162}; +/* +unsigned int get_tx_amp_prach(int power_dBm, int power_max_dBm, int N_RB_UL) { int gain_dB = power_dBm - power_max_dBm; + int amp_x_100; + switch (N_RB_UL) { + case 6: + amp_x_100 = AMP; // PRACH is 6 PRBS so no scale + break; + case 15: + amp_x_100 = 158*AMP; // 158 = 100*sqrt(15/6) + break; + case 25: + amp_x_100 = 204*AMP; // 204 = 100*sqrt(25/6) + break; + case 50: + amp_x_100 = 286*AMP; // 286 = 100*sqrt(50/6) + break; + case 75: + amp_x_100 = 354*AMP; // 354 = 100*sqrt(75/6) + break; + case 100: + amp_x_100 = 408*AMP; // 408 = 100*sqrt(100/6) + break; + default: + LOG_E(PHY,"Unknown PRB size %d\n",N_RB_UL); + mac_xface->macphy_exit(""); + break; + } if (gain_dB < -30) { - return(AMP/32); + return(amp_x_100/3162); } else if (gain_dB>0) - return(AMP); + return(amp_x_100); else - return(100*AMP/prach_gain_table[-gain_dB]); + return(amp_x_100/gain_table[-gain_dB]); // 245 corresponds to the factor sqrt(25/6) } +*/ + +unsigned int get_tx_amp(int power_dBm, int power_max_dBm, int N_RB_UL, int nb_rb) +{ + + int gain_dB = power_dBm - power_max_dBm; + double gain_lin; + + if (gain_dB < -20) + return(AMP/10); + + gain_lin = pow(10,.1*gain_dB); + if ((nb_rb >0) && (nb_rb <= N_RB_UL)) { + return((int)(AMP*sqrt(gain_lin*N_RB_UL/(double)nb_rb))); + } + else { + LOG_E(PHY,"Illegal nb_rb/N_RB_UL combination (%d/%d)\n",nb_rb,N_RB_UL); + mac_xface->macphy_exit(""); + } + return(0); +} + #endif void dump_dlsch_ra(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t subframe) @@ -221,8 +272,8 @@ void dump_dlsch_ra(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t subframe) coded_bits_per_codeword = get_G(&phy_vars_ue->lte_frame_parms, phy_vars_ue->dlsch_ue_ra[eNB_id]->harq_processes[0]->nb_rb, - phy_vars_ue->dlsch_ue_ra[eNB_id]->harq_processes[0]->rb_alloc, - get_Qm(phy_vars_ue->dlsch_ue_ra[eNB_id]->harq_processes[0]->mcs), + phy_vars_ue->dlsch_ue_ra[eNB_id]->harq_processes[0]->rb_alloc_even, + 2, 1, phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->num_pdcch_symbols, phy_vars_ue->frame_rx, @@ -349,7 +400,7 @@ void process_timing_advance(uint8_t Mod_id,uint8_t CC_id,int16_t timing_advance) // uint32_t frame = PHY_vars_UE_g[Mod_id]->frame; // timing advance has Q1.5 format - timing_advance = timing_advance - (1<<5); + timing_advance = timing_advance - 31; if (openair_daq_vars.manual_timing_advance == 0) { //if ( (frame % 100) == 0) { @@ -357,7 +408,7 @@ void process_timing_advance(uint8_t Mod_id,uint8_t CC_id,int16_t timing_advance) PHY_vars_UE_g[Mod_id][CC_id]->timing_advance = PHY_vars_UE_g[Mod_id][CC_id]->timing_advance+timing_advance*4; //this is for 25RB only!!! } - LOG_D(PHY,"[UE %d] Got timing advance %d from MAC, new value %d\n",Mod_id, timing_advance, PHY_vars_UE_g[Mod_id][CC_id]->timing_advance); + LOG_I(PHY,"[UE %d] Got timing advance %d from MAC, new value %d\n",Mod_id, timing_advance, PHY_vars_UE_g[Mod_id][CC_id]->timing_advance); } @@ -631,9 +682,8 @@ void phy_procedures_UE_TX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstra int frame_tx = phy_vars_ue->frame_tx; int Mod_id = phy_vars_ue->Mod_id; int CC_id = phy_vars_ue->CC_id; -#ifndef OPENAIR2 + int tx_amp; int i; -#endif VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_TX,VCD_FUNCTION_IN); @@ -717,19 +767,6 @@ void phy_procedures_UE_TX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstra if (phy_vars_ue->ulsch_ue[eNB_id]->harq_processes[harq_pid]->subframe_scheduling_flag == 1) { generate_ul_signal = 1; - // FK 20140908: the power control cannot be done here, since we do not have the spectral efficiency yet. this is only done in ulsch_encoding - /* - #ifdef OPENAIR2 - pusch_power_cntl(phy_vars_ue,subframe_tx,eNB_id,1, abstraction_flag); - phy_vars_ue->tx_power_dBm = phy_vars_ue->ulsch_ue[eNB_id]->Po_PUSCH; - #else - phy_vars_ue->tx_power_dBm = UE_TX_POWER; - #endif - phy_vars_ue->tx_total_RE = phy_vars_ue->ulsch_ue[eNB_id]->harq_processes[harq_pid]->nb_rb*12; - - LOG_D(PHY,"[UE %d][PUSCH %d] Frame %d subframe %d harq pid %d, Po_PUSCH : %d dBm\n", - Mod_id,harq_pid,frame_tx,subframe_tx,harq_pid, phy_vars_ue->tx_power_dBm); - */ // deactivate service request phy_vars_ue->ulsch_ue[eNB_id]->harq_processes[harq_pid]->subframe_scheduling_flag = 0; @@ -765,6 +802,7 @@ void phy_procedures_UE_TX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstra frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.nPRS[slot_tx], phy_vars_ue->ulsch_ue[eNB_id]->o_ACK[0],phy_vars_ue->ulsch_ue[eNB_id]->o_ACK[1], phy_vars_ue->ulsch_ue[eNB_id]->harq_processes[harq_pid]->O_ACK); +#endif if (ack_status > 0) { LOG_D(PHY,"[UE %d][PDSCH %x] Frame %d subframe %d Generating ACK (%d,%d) for %d bits on PUSCH\n", @@ -775,14 +813,15 @@ void phy_procedures_UE_TX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstra phy_vars_ue->ulsch_ue[eNB_id]->harq_processes[harq_pid]->O_ACK); } -#endif + + //#ifdef DEBUG_PHY_PROC // debug_LOG_D(PHY,"[UE %d] Frame %d, Subframe %d ulsch harq_pid %d : O %d, O_ACK %d, O_RI %d, TBS %d\n",Mod_id,phy_vars_ue->frame,subframe_tx,harq_pid,phy_vars_ue->ulsch_ue[eNB_id]->O,phy_vars_ue->ulsch_ue[eNB_id]->O_ACK,phy_vars_ue->ulsch_ue[eNB_id]->O_RI,phy_vars_ue->ulsch_ue[eNB_id]->harq_processes[harq_pid]->TBS); //#endif if (Msg3_flag == 1) { - LOG_D(PHY,"[UE %d][RAPROC] Frame %d, Subframe %d next slot %d Generating (RRCConnectionRequest) Msg3 (nb_rb %d, first_rb %d, round %d, rvidx %d) Msg3: %x.%x.%x|%x.%x.%x.%x.%x.%x\n",Mod_id,frame_tx, + LOG_I(PHY,"[UE %d][RAPROC] Frame %d, Subframe %d next slot %d Generating (RRCConnectionRequest) Msg3 (nb_rb %d, first_rb %d, round %d, rvidx %d) Msg3: %x.%x.%x|%x.%x.%x.%x.%x.%x\n",Mod_id,frame_tx, subframe_tx, slot_tx, phy_vars_ue->ulsch_ue[eNB_id]->harq_processes[harq_pid]->nb_rb, phy_vars_ue->ulsch_ue[eNB_id]->harq_processes[harq_pid]->first_rb, @@ -933,38 +972,33 @@ void phy_procedures_UE_TX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstra #else phy_vars_ue->tx_power_dBm = UE_TX_POWER; #endif - phy_vars_ue->tx_total_RE = phy_vars_ue->ulsch_ue[eNB_id]->harq_processes[harq_pid]->nb_rb*12; - - LOG_D(PHY,"[UE %d][PUSCH %d] Frame %d subframe %d, generating PUSCH, Po_PUSCH: %d dBm, amp %d\n", - Mod_id,harq_pid,frame_tx,subframe_tx,phy_vars_ue->tx_power_dBm, + phy_vars_ue->tx_total_RE = nb_rb*12; + #if defined(EXMIMO) || defined(OAI_USRP) - get_tx_amp(phy_vars_ue->tx_power_dBm,phy_vars_ue->tx_power_max_dBm) + tx_amp = get_tx_amp(phy_vars_ue->tx_power_dBm, + phy_vars_ue->tx_power_max_dBm, + phy_vars_ue->lte_frame_parms.N_RB_UL, + nb_rb); #else - AMP + tx_amp = AMP; #endif - ); + LOG_D(PHY,"[UE %d][PUSCH %d] Frame %d subframe %d, generating PUSCH, Po_PUSCH: %d dBm (max %d dBm), amp %d\n", + Mod_id,harq_pid,frame_tx,subframe_tx,phy_vars_ue->tx_power_dBm,phy_vars_ue->tx_power_max_dBm, tx_amp); start_meas(&phy_vars_ue->ulsch_modulation_stats); ulsch_modulation(phy_vars_ue->lte_ue_common_vars.txdataF, -#if defined(EXMIMO) || defined(OAI_USRP) - get_tx_amp(phy_vars_ue->tx_power_dBm,phy_vars_ue->tx_power_max_dBm), -#else - AMP, -#endif + tx_amp, frame_tx, subframe_tx, &phy_vars_ue->lte_frame_parms, phy_vars_ue->ulsch_ue[eNB_id]); -#if defined(EXMIMO) || defined(OAI_USRP) - for (aa=0; aa<1/*frame_parms->nb_antennas_tx*/; aa++) - generate_drs_pusch(phy_vars_ue,eNB_id,get_tx_amp(phy_vars_ue->tx_power_dBm,phy_vars_ue->tx_power_max_dBm),subframe_tx,first_rb,nb_rb,aa); - -#else - - for (aa=0; aa<1/*frame_parms->nb_antennas_tx*/; aa++) - generate_drs_pusch(phy_vars_ue,eNB_id,AMP,subframe_tx,first_rb,nb_rb,aa); - -#endif + generate_drs_pusch(phy_vars_ue, + eNB_id, + tx_amp, + subframe_tx, + first_rb, + nb_rb, + aa); stop_meas(&phy_vars_ue->ulsch_modulation_stats); } @@ -1036,38 +1070,37 @@ void phy_procedures_UE_TX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstra #endif phy_vars_ue->tx_total_RE = 12; +#if defined(EXMIMO) || defined(OAI_USRP) + tx_amp = get_tx_amp(Po_PUCCH, + phy_vars_ue->tx_power_max_dBm, + phy_vars_ue->lte_frame_parms.N_RB_UL, + 1); +#else + tx_amp = AMP; +#endif + if (SR_payload>0) { - LOG_D(PHY,"[UE %d][SR %x] Frame %d subframe %d Generating PUCCH 1a/1b payload %d,%d (with SR for PUSCH), n1_pucch %d, Po_PUCCH, amp %d\n", + LOG_D(PHY,"[UE %d][SR %x] Frame %d subframe %d Generating PUCCH 1a/1b payload %d,%d (with SR for PUSCH), n1_pucch %d, Po_PUCCH, amp %d\n", Mod_id, phy_vars_ue->dlsch_ue[eNB_id][0]->rnti, frame_tx, subframe_tx, pucch_ack_payload[0],pucch_ack_payload[1], phy_vars_ue->scheduling_request_config[eNB_id].sr_PUCCH_ResourceIndex, - Po_PUCCH, -#if defined(EXMIMO) || defined(OAI_USRP) - get_tx_amp(Po_PUCCH,phy_vars_ue->tx_power_max_dBm) -#else - AMP -#endif - ); + Po_PUCCH, + tx_amp); } else { LOG_D(PHY,"[UE %d][PDSCH %x] Frame %d subframe %d Generating PUCCH 1a/1b, n1_pucch %d, b[0]=%d,b[1]=%d (SR_Payload %d), Po_PUCCH %d, amp %d\n", Mod_id, phy_vars_ue->dlsch_ue[eNB_id][0]->rnti, - frame_tx, subframe_tx, + frame_tx, subframe_tx, n1_pucch,pucch_ack_payload[0],pucch_ack_payload[1],SR_payload, Po_PUCCH, -#if defined(EXMIMO) || defined(OAI_USRP) - get_tx_amp(Po_PUCCH,phy_vars_ue->tx_power_max_dBm) -#else - AMP -#endif - ); - } + tx_amp); + } if (abstraction_flag == 0) { - generate_pucch(phy_vars_ue->lte_ue_common_vars.txdataF, + generate_pucch(phy_vars_ue->lte_ue_common_vars.txdataF, &phy_vars_ue->lte_frame_parms, phy_vars_ue->ncs_cell, format, @@ -1076,12 +1109,8 @@ void phy_procedures_UE_TX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstra 0, // n2_pucch 1, // shortened format pucch_ack_payload, -#if defined(EXMIMO) || defined(OAI_USRP) - get_tx_amp(Po_PUCCH,phy_vars_ue->tx_power_max_dBm), -#else - AMP, -#endif - subframe_tx); + tx_amp, + subframe_tx); } else { #ifdef PHY_ABSTRACTION @@ -1104,6 +1133,14 @@ void phy_procedures_UE_TX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstra #endif phy_vars_ue->tx_total_RE = 12; +#if defined(EXMIMO) || defined(OAI_USRP) + tx_amp = get_tx_amp(Po_PUCCH, + phy_vars_ue->tx_power_max_dBm, + phy_vars_ue->lte_frame_parms.N_RB_UL, + 1); +#else + tx_amp = AMP; +#endif LOG_D(PHY,"[UE %d][SR %x] Frame %d subframe %d Generating PUCCH 1 (SR for PUSCH), n1_pucch %d, Po_PUCCH %d\n", Mod_id, phy_vars_ue->dlsch_ue[eNB_id][0]->rnti, @@ -1122,11 +1159,7 @@ void phy_procedures_UE_TX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstra 0, // n2_pucch 1, // shortened format pucch_ack_payload, // this is ignored anyway, we just need a pointer -#if defined(EXMIMO) || defined(OAI_USRP) - get_tx_amp(Po_PUCCH,phy_vars_ue->tx_power_max_dBm), -#else - AMP, -#endif + tx_amp, subframe_tx); } else { LOG_D(PHY,"Calling generate_pucch_emul ...\n"); @@ -1210,14 +1243,15 @@ void phy_procedures_UE_TX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstra #else //this is the normal case ulsch_start = (frame_parms->samples_per_tti*subframe_tx)-phy_vars_ue->N_TA_offset; //-phy_vars_ue->timing_advance; #endif //else EXMIMO - LOG_D(PHY,"[UE %d] Frame %d, subframe %d: ulsch_start = %d (rxoff %d, HW TA %d, timing advance %d, TA_offset %d\n", - Mod_id,frame_tx,subframe_tx, - ulsch_start, - phy_vars_ue->rx_offset, - openair_daq_vars.timing_advance, - phy_vars_ue->timing_advance, - phy_vars_ue->N_TA_offset); - + if ((frame_tx%100) == 0) + LOG_D(PHY,"[UE %d] Frame %d, subframe %d: ulsch_start = %d (rxoff %d, HW TA %d, timing advance %d, TA_offset %d\n", + Mod_id,frame_tx,subframe_tx, + ulsch_start, + phy_vars_ue->rx_offset, + openair_daq_vars.timing_advance, + phy_vars_ue->timing_advance, + phy_vars_ue->N_TA_offset); + if (generate_ul_signal == 1 ) { @@ -1288,7 +1322,17 @@ void phy_procedures_UE_TX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstra ((short*)phy_vars_ue->lte_ue_common_vars.txdata[aa])[2*k] = ((short*)dummy_tx_buffer)[2*l]<<4; ((short*)phy_vars_ue->lte_ue_common_vars.txdata[aa])[2*k+1] = ((short*)dummy_tx_buffer)[2*l+1]<<4; } - +#if defined(EXMIMO) + // handle switch before 1st TX subframe, guarantee that the slot prior to transmission is switch on + for (k=ulsch_start - (frame_parms->samples_per_tti>>1) ; klte_ue_common_vars.txdata[aa][k+frame_parms->samples_per_tti*LTE_NUMBER_OF_SUBFRAMES_PER_FRAME] &= 0xFFFEFFFE; + else if (k>(frame_parms->samples_per_tti*LTE_NUMBER_OF_SUBFRAMES_PER_FRAME)) + phy_vars_ue->lte_ue_common_vars.txdata[aa][k-frame_parms->samples_per_tti*LTE_NUMBER_OF_SUBFRAMES_PER_FRAME] &= 0xFFFEFFFE; + else + phy_vars_ue->lte_ue_common_vars.txdata[aa][k] &= 0xFFFEFFFE; + } +#endif #endif } //nb_antennas_tx @@ -1329,7 +1373,6 @@ void phy_procedures_UE_TX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstra subframe_tx); // LOG_I(PHY,"Got prach_resources for eNB %d address %d, RRCCommon %d\n",eNB_id,phy_vars_ue->prach_resources[eNB_id],UE_mac_inst[Mod_id].radioResourceConfigCommon); } - #endif if (phy_vars_ue->prach_resources[eNB_id]!=NULL) { @@ -1354,7 +1397,12 @@ void phy_procedures_UE_TX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstra phy_vars_ue->prach_resources[eNB_id]->ra_RNTI); #ifdef OPENAIR2 - phy_vars_ue->tx_power_dBm = phy_vars_ue->prach_resources[eNB_id]->ra_PREAMBLE_RECEIVED_TARGET_POWER+get_PL(Mod_id,CC_id,eNB_id); + if (mode != calib_prach_tx) + phy_vars_ue->tx_power_dBm = phy_vars_ue->prach_resources[eNB_id]->ra_PREAMBLE_RECEIVED_TARGET_POWER+get_PL(Mod_id,CC_id,eNB_id); + else { + phy_vars_ue->tx_power_dBm = phy_vars_ue->tx_power_max_dBm; + phy_vars_ue->prach_resources[eNB_id]->ra_PreambleIndex = 19; + } #else phy_vars_ue->tx_power_dBm = UE_TX_POWER; #endif @@ -1362,12 +1410,17 @@ void phy_procedures_UE_TX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstra phy_vars_ue->tx_total_RE = 96; #if defined(EXMIMO) || defined(OAI_USRP) - phy_vars_ue->lte_ue_prach_vars[eNB_id]->amp = get_tx_amp(phy_vars_ue->tx_power_dBm,phy_vars_ue->tx_power_max_dBm); + phy_vars_ue->lte_ue_prach_vars[eNB_id]->amp = get_tx_amp(phy_vars_ue->tx_power_dBm, + phy_vars_ue->tx_power_max_dBm, + phy_vars_ue->lte_frame_parms.N_RB_UL, + 6); #else phy_vars_ue->lte_ue_prach_vars[eNB_id]->amp = AMP; #endif - LOG_D(PHY,"[UE %d][RAPROC] Frame %d, Subframe %d : PRACH TX power %d dBm, amp %d\n",Mod_id,phy_vars_ue->frame_rx,phy_vars_ue->slot_tx>>1,phy_vars_ue->tx_power_dBm, - phy_vars_ue->lte_ue_prach_vars[eNB_id]->amp); + if ((mode == calib_prach_tx) && (((phy_vars_ue->frame_tx&0xfffe)%100)==0)) + LOG_D(PHY,"[UE %d][RAPROC] Frame %d, Subframe %d : PRACH TX power %d dBm, amp %d\n",Mod_id,phy_vars_ue->frame_rx,phy_vars_ue->slot_tx>>1,phy_vars_ue->tx_power_dBm, + phy_vars_ue->lte_ue_prach_vars[eNB_id]->amp); + // start_meas(&phy_vars_ue->tx_prach); VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_GENERATE_PRACH, VCD_FUNCTION_IN); @@ -1397,8 +1450,12 @@ void phy_procedures_UE_TX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstra phy_vars_ue->prach_resources[eNB_id]->ra_PREAMBLE_RECEIVED_TARGET_POWER+get_PL(Mod_id,CC_id,eNB_id), get_PL(Mod_id,CC_id,eNB_id)); - } + } + } + // if we're calibrating the PRACH kill the pointer to its resources so that the RA protocol doesn't continue + if (mode == calib_prach_tx) + phy_vars_ue->prach_resources[eNB_id]=NULL; LOG_D(PHY,"[UE %d] frame %d subframe %d : generate_prach %d, prach_cnt %d\n", Mod_id,frame_tx,subframe_tx,phy_vars_ue->generate_prach,phy_vars_ue->prach_cnt); @@ -1423,17 +1480,10 @@ void phy_procedures_UE_S_TX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abst LTE_DL_FRAME_PARMS *frame_parms=&phy_vars_ue->lte_frame_parms; if (abstraction_flag==0) { - /* - if (phy_vars_ue->frame%100==1) { - LOG_I(PHY,"frame %d, next_slot %d, setting switch to rx\n",phy_vars_ue->frame, next_slot); - } - */ - for (aa=0; aanb_antennas_tx; aa++) { #if defined(EXMIMO) //this is the EXPRESS MIMO case int i; - // set the whole tx buffer to RX for (i=0; isamples_per_tti; i++) phy_vars_ue->lte_ue_common_vars.txdata[aa][i] = 0x00010001; @@ -1456,34 +1506,14 @@ void lte_ue_measurement_procedures(uint16_t l, PHY_VARS_UE *phy_vars_ue,uint8_t // exmimo_config_t *p_exmimo_config = openair0_exmimo_pci[0].exmimo_config_ptr; // int aa; #endif - int Mod_id=phy_vars_ue->Mod_id; + int slot_rx = phy_vars_ue->slot_rx; int subframe_rx = slot_rx>>1; VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_MEASUREMENT_PROCEDURES, VCD_FUNCTION_IN); -#ifdef EMOS - /* - uint8_t aa; - - // first slot in frame is special - if (((slot_rx==0) || (slot_rx==1) || (slot_rx==12) || (slot_rx==13)) && - ((l==0) || (l==4-frame_parms->Ncp))) { - for (eNB_id=0; eNB_id<3; eNB_id++) - for (aa=0;aanb_antennas_tx_eNB;aa++) - lte_dl_channel_estimation_emos(emos_dump_UE.channel[eNB_id], - phy_vars_ue->lte_ue_common_vars->rxdataF, - &phy_vars_ue->lte_frame_parms, - slot_rx, - aa, - l, - eNB_id); - } - */ -#endif - if (l==0) { - // UE measurements + // UE measurements on symbol 0 if (abstraction_flag==0) { LOG_D(PHY,"Calling measurements subframe %d, rxdata %p\n",subframe_rx,phy_vars_ue->lte_ue_common_vars.rxdata); @@ -1497,47 +1527,11 @@ void lte_ue_measurement_procedures(uint16_t l, PHY_VARS_UE *phy_vars_ue,uint8_t 0, 1); } - -#ifdef DEBUG_PHY_PROC - - if (slot_rx == 2) { // && (phy_vars_ue->frame%100==0)) { - - LOG_D(PHY,"[UE %d] frame %d, slot %d, freq_offset_filt = %d \n",Mod_id,phy_vars_ue->frame_tx, slot_rx, phy_vars_ue->lte_ue_common_vars.freq_offset); - /* - LOG_I(PHY,"[UE %d] frame %d, slot %d, RX RSSI (%d,%d,%d) dBm, digital (%d,%d)(%d,%d)(%d,%d) dB, linear (%d,%d), avg rx power %d dB (%d lin), N0 %d dB (%d lin), RX gain %d dB\n", - Mod_id,phy_vars_ue->frame, slot_rx, - phy_vars_ue->PHY_measurements.rx_rssi_dBm[0], - phy_vars_ue->PHY_measurements.rx_rssi_dBm[1], - phy_vars_ue->PHY_measurements.rx_rssi_dBm[2], - phy_vars_ue->PHY_measurements.rx_power_dB[0][0], - phy_vars_ue->PHY_measurements.rx_power_dB[0][1], - phy_vars_ue->PHY_measurements.rx_power_dB[1][0], - phy_vars_ue->PHY_measurements.rx_power_dB[1][1], - phy_vars_ue->PHY_measurements.rx_power_dB[2][0], - phy_vars_ue->PHY_measurements.rx_power_dB[2][1], - phy_vars_ue->PHY_measurements.rx_power[0][0], - phy_vars_ue->PHY_measurements.rx_power[0][1], - phy_vars_ue->PHY_measurements.rx_power_avg_dB[0], - phy_vars_ue->PHY_measurements.rx_power_avg[0], - phy_vars_ue->PHY_measurements.n0_power_avg_dB, - phy_vars_ue->PHY_measurements.n0_power_avg, - phy_vars_ue->rx_total_gain_dB); - - LOG_I(PHY,"[UE %d] frame %d, slot %d, N0 %d dBm digital (%d, %d) dB, linear (%d, %d), avg noise power %d dB (%d lin)\n", - Mod_id,phy_vars_ue->frame, slot_rx, - phy_vars_ue->PHY_measurements.n0_power_tot_dBm, - phy_vars_ue->PHY_measurements.n0_power_dB[0], - phy_vars_ue->PHY_measurements.n0_power_dB[1], - phy_vars_ue->PHY_measurements.n0_power[0], - phy_vars_ue->PHY_measurements.n0_power[1], - phy_vars_ue->PHY_measurements.n0_power_avg_dB, - phy_vars_ue->PHY_measurements.n0_power_avg); */ - } - -#endif } - if (l==(4-frame_parms->Ncp)) { + if (l==(6-phy_vars_ue->lte_frame_parms.Ncp)) { + + // make sure we have signal from PSS/SSS for N0 measurement VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_RRC_MEASUREMENTS, VCD_FUNCTION_IN); ue_rrc_measurements(phy_vars_ue, @@ -1888,7 +1882,7 @@ void lte_ue_pbch_procedures(uint8_t eNB_id,PHY_VARS_UE *phy_vars_ue,uint8_t abst phy_vars_ue->lte_frame_parms.N_RB_DL, phy_vars_ue->lte_frame_parms.phich_config_common.phich_duration, phy_vars_ue->lte_frame_parms.phich_config_common.phich_resource); - + /* if (frame_rx%100 == 0) { LOG_I(PHY,"[UE %d] frame %d, slot %d, PBCH: mode1_flag %d, tx_ant %d, frame_tx %d, phase %d. N_RB_DL %d, phich_duration %d, phich_resource %d/6,Frequency offset %d Hz (%d)\n", phy_vars_ue->Mod_id, @@ -1903,8 +1897,9 @@ void lte_ue_pbch_procedures(uint8_t eNB_id,PHY_VARS_UE *phy_vars_ue,uint8_t abst phy_vars_ue->lte_frame_parms.phich_config_common.phich_resource, phy_vars_ue->lte_ue_common_vars.freq_offset,openair_daq_vars.freq_offset); //dump_frame_parms(&phy_vars_ue->lte_frame_parms); - } + } + */ #endif } else { @@ -1959,11 +1954,8 @@ int lte_ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *phy_vars_ue,uint8_t abst VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_PDCCH_PROCEDURES, VCD_FUNCTION_IN); - /* - #ifdef DEBUG_PHY_PROC - debug_LOG_D(PHY,"[UE %d] Frame %d, slot %d (%d): DCI decoding crnti %x (mi %d)\n",phy_vars_ue->Mod_id,frame_rx,slot_rx,subframe_rx,phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->crnti,get_mi(&phy_vars_ue->lte_frame_parms,subframe_rx)); - #endif - */ + // if (subframe_rx != 5) + // return 0; if (abstraction_flag == 0) { VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_RX_PDCCH, VCD_FUNCTION_IN); @@ -1975,6 +1967,8 @@ int lte_ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *phy_vars_ue,uint8_t abst (phy_vars_ue->lte_frame_parms.mode1_flag == 1) ? SISO : ALAMOUTI, phy_vars_ue->high_speed_flag, phy_vars_ue->is_secondary_ue); + + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_RX_PDCCH, VCD_FUNCTION_OUT); VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_DCI_DECODING, VCD_FUNCTION_IN); dci_cnt = dci_decoding_procedure(phy_vars_ue, @@ -2121,8 +2115,11 @@ int lte_ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *phy_vars_ue,uint8_t abst //if ((phy_vars_ue->UE_mode[eNB_id] != PRACH) && // (dci_alloc_rx[i].rnti != 0x1234) && - if((dci_alloc_rx[i].rnti == phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->crnti) && - (dci_alloc_rx[i].format != format0)) { + + if ((phy_vars_ue->UE_mode[eNB_id]>PRACH) && + (dci_alloc_rx[i].rnti == phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->crnti) && + (dci_alloc_rx[i].format != format0)) { + #ifdef DEBUG_PHY_PROC LOG_D(PHY,"[UE %d][DCI][PDSCH %x] frame %d, subframe %d: format %d, num_pdcch_symbols %d, nCCE %d, total CCEs %d\n", phy_vars_ue->Mod_id,dci_alloc_rx[i].rnti, @@ -2132,14 +2129,10 @@ int lte_ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *phy_vars_ue,uint8_t abst phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->nCCE[subframe_rx], get_nCCE(3,&phy_vars_ue->lte_frame_parms,get_mi(&phy_vars_ue->lte_frame_parms,0))); - /* - if (((frame_rx%100) == 0) || (frame_rx < 20)) - dump_dci(&phy_vars_ue->lte_frame_parms, &dci_alloc_rx[i]); - */ #endif #ifdef DIAG_PHY - + if (!(((subframe_rx == 7) && (dci_alloc_rx[i].format == format1E_2A_M10PRB)) || ((subframe_rx == 7) && (dci_alloc_rx[i].format == format1)))) { LOG_E(PHY,"[UE %d][DIAG] frame %d, subframe %d: should not have received C_RNTI Format %d!\n",phy_vars_ue->Mod_id,frame_rx,subframe_rx,dci_alloc_rx[i].format); @@ -2148,40 +2141,42 @@ int lte_ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *phy_vars_ue,uint8_t abst VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_PDCCH_PROCEDURES, VCD_FUNCTION_OUT); return(-1); } - + #endif - + // dump_dci(&phy_vars_ue->lte_frame_parms, &dci_alloc_rx[i]); - if (generate_ue_dlsch_params_from_dci(subframe_rx, - (void *)&dci_alloc_rx[i].dci_pdu, - phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->crnti, - dci_alloc_rx[i].format, - phy_vars_ue->dlsch_ue[eNB_id], - &phy_vars_ue->lte_frame_parms, - phy_vars_ue->pdsch_config_dedicated, - SI_RNTI, - 0, - P_RNTI)==0) { + if ((phy_vars_ue->UE_mode[eNB_id] > PRACH) && + (generate_ue_dlsch_params_from_dci(frame_rx, + subframe_rx, + (void *)&dci_alloc_rx[i].dci_pdu, + phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->crnti, + dci_alloc_rx[i].format, + phy_vars_ue->dlsch_ue[eNB_id], + &phy_vars_ue->lte_frame_parms, + phy_vars_ue->pdsch_config_dedicated, + SI_RNTI, + 0, + P_RNTI)==0)) { #ifdef DIAG_PHY - + if (phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[phy_vars_ue->dlsch_ue[eNB_id][0]->current_harq_pid]->mcs != (((frame_rx%1024)%28))) { LOG_E(PHY,"[UE %d][DIAG] frame %d, subframe %d: wrong mcs!\n",phy_vars_ue->Mod_id,frame_rx,subframe_rx, phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[phy_vars_ue->dlsch_ue[eNB_id][0]->current_harq_pid]->mcs); dump_dci(&phy_vars_ue->lte_frame_parms,(void *)&dci_alloc_rx[i]); } - + #endif - - + + phy_vars_ue->dlsch_received[eNB_id]++; - + #ifdef DEBUG_PHY_PROC LOG_D(PHY,"[UE %d] Generated UE DLSCH C_RNTI format %d\n",phy_vars_ue->Mod_id,dci_alloc_rx[i].format); dump_dci(&phy_vars_ue->lte_frame_parms, &dci_alloc_rx[i]); LOG_D(PHY,"[UE %d] *********** dlsch->active in subframe %d (%d)=> %d\n",phy_vars_ue->Mod_id,subframe_rx,slot_rx,phy_vars_ue->dlsch_ue[eNB_id][0]->active); #endif - + // we received a CRNTI, so we're in PUSCH if (phy_vars_ue->UE_mode[eNB_id] != PUSCH) { #ifdef DEBUG_PHY_PROC @@ -2198,10 +2193,10 @@ int lte_ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *phy_vars_ue,uint8_t abst } else if ((dci_alloc_rx[i].rnti == SI_RNTI) && - (dci_alloc_rx[i].format == format1A)) { + ((dci_alloc_rx[i].format == format1A) || (dci_alloc_rx[i].format == format1C))) { #ifdef DEBUG_PHY_PROC - LOG_D(PHY,"[UE %d] subframe %d: Found rnti %x, format 1A, dci_cnt %d\n",phy_vars_ue->Mod_id,subframe_rx,dci_alloc_rx[i].rnti,i); + LOG_D(PHY,"[UE %d] subframe %d: Found rnti %x, format 1%s, dci_cnt %d\n",phy_vars_ue->Mod_id,subframe_rx,dci_alloc_rx[i].rnti,dci_alloc_rx[i].format==format1A?"A":"C",i); /* if (((frame_rx%100) == 0) || (frame_rx < 20)) dump_dci(&phy_vars_ue->lte_frame_parms, &dci_alloc_rx[i]); @@ -2219,10 +2214,11 @@ int lte_ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *phy_vars_ue,uint8_t abst #endif - if (generate_ue_dlsch_params_from_dci(subframe_rx, + if (generate_ue_dlsch_params_from_dci(frame_rx, + subframe_rx, (void *)&dci_alloc_rx[i].dci_pdu, SI_RNTI, - format1A, + dci_alloc_rx[i].format, &phy_vars_ue->dlsch_ue_SI[eNB_id], &phy_vars_ue->lte_frame_parms, phy_vars_ue->pdsch_config_dedicated, @@ -2231,16 +2227,18 @@ int lte_ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *phy_vars_ue,uint8_t abst P_RNTI)==0) { phy_vars_ue->dlsch_SI_received[eNB_id]++; + + + LOG_D(PHY,"[UE %d] Frame %d, subframe %d : Generate UE DLSCH SI_RNTI format 1%s\n",phy_vars_ue->Mod_id,frame_rx,subframe_rx,dci_alloc_rx[i].format==format1A?"A":"C"); + //dump_dci(&phy_vars_ue->lte_frame_parms, &dci_alloc_rx[i]); -#ifdef DEBUG_PHY_PROC - LOG_D(PHY,"[UE %d] Generate UE DLSCH SI_RNTI format 1A\n",phy_vars_ue->Mod_id); -#endif } } else if ((phy_vars_ue->prach_resources[eNB_id]) && (dci_alloc_rx[i].rnti == phy_vars_ue->prach_resources[eNB_id]->ra_RNTI) && (dci_alloc_rx[i].format == format1A)) { + #ifdef DEBUG_PHY_PROC LOG_D(PHY,"[UE %d][RAPROC] subframe %d: Found RA rnti %x, format 1A, dci_cnt %d\n",phy_vars_ue->Mod_id,subframe_rx,dci_alloc_rx[i].rnti,i); @@ -2260,7 +2258,8 @@ int lte_ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *phy_vars_ue,uint8_t abst #endif - if (generate_ue_dlsch_params_from_dci(subframe_rx, + if (generate_ue_dlsch_params_from_dci(frame_rx, + subframe_rx, (DCI1A_5MHz_TDD_1_6_t *)&dci_alloc_rx[i].dci_pdu, phy_vars_ue->prach_resources[eNB_id]->ra_RNTI, format1A, @@ -2275,7 +2274,7 @@ int lte_ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *phy_vars_ue,uint8_t abst #ifdef DEBUG_PHY_PROC LOG_D(PHY,"[UE %d] Generate UE DLSCH RA_RNTI format 1A, rb_alloc %x, dlsch_ue_ra[eNB_id] %p\n", - phy_vars_ue->Mod_id,phy_vars_ue->dlsch_ue_ra[eNB_id]->harq_processes[0]->rb_alloc[0],phy_vars_ue->dlsch_ue_ra[eNB_id]); + phy_vars_ue->Mod_id,phy_vars_ue->dlsch_ue_ra[eNB_id]->harq_processes[0]->rb_alloc_even[0],phy_vars_ue->dlsch_ue_ra[eNB_id]); #endif } } else if( (dci_alloc_rx[i].rnti == phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->crnti) && @@ -2303,17 +2302,18 @@ int lte_ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *phy_vars_ue,uint8_t abst phy_vars_ue->ulsch_no_allocation_counter[eNB_id] = 0; //dump_dci(&phy_vars_ue->lte_frame_parms,&dci_alloc_rx[i]); - if (generate_ue_ulsch_params_from_dci((void *)&dci_alloc_rx[i].dci_pdu, - phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->crnti, - subframe_rx, - format0, - phy_vars_ue, - SI_RNTI, - 0, - P_RNTI, - CBA_RNTI, - eNB_id, - 0)==0) { + if ((phy_vars_ue->UE_mode[eNB_id] > PRACH) && + (generate_ue_ulsch_params_from_dci((void *)&dci_alloc_rx[i].dci_pdu, + phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->crnti, + subframe_rx, + format0, + phy_vars_ue, + SI_RNTI, + 0, + P_RNTI, + CBA_RNTI, + eNB_id, + 0)==0)) { #ifdef DEBUG_PHY_PROC LOG_D(PHY,"[UE %d] Generate UE ULSCH C_RNTI format 0 (subframe %d)\n",phy_vars_ue->Mod_id,subframe_rx); @@ -2348,17 +2348,18 @@ int lte_ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *phy_vars_ue,uint8_t abst phy_vars_ue->ulsch_no_allocation_counter[eNB_id] = 0; //dump_dci(&phy_vars_ue->lte_frame_parms,&dci_alloc_rx[i]); - if (generate_ue_ulsch_params_from_dci((void *)&dci_alloc_rx[i].dci_pdu, - phy_vars_ue->ulsch_ue[eNB_id]->cba_rnti[0], - subframe_rx, - format0, - phy_vars_ue, - SI_RNTI, - 0, - P_RNTI, - CBA_RNTI, - eNB_id, - 0)==0) { + if ((phy_vars_ue->UE_mode[eNB_id] > PRACH) && + (generate_ue_ulsch_params_from_dci((void *)&dci_alloc_rx[i].dci_pdu, + phy_vars_ue->ulsch_ue[eNB_id]->cba_rnti[0], + subframe_rx, + format0, + phy_vars_ue, + SI_RNTI, + 0, + P_RNTI, + CBA_RNTI, + eNB_id, + 0)==0)) { #ifdef DEBUG_PHY_PROC LOG_D(PHY,"[UE %d] Generate UE ULSCH CBA_RNTI format 0 (subframe %d)\n",phy_vars_ue->Mod_id,subframe_rx); @@ -2384,7 +2385,18 @@ int lte_ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *phy_vars_ue,uint8_t abst } } +/* + if ((frame_rx > 1000) && ((frame_rx&1)==0) && (subframe_rx == 5)) { + write_output("rxsig0.m","rxs0", phy_vars_ue->lte_ue_common_vars.rxdata[0],10*phy_vars_ue->lte_frame_parms.samples_per_tti,1,1); + write_output("rxsigF0.m","rxsF0", phy_vars_ue->lte_ue_common_vars.rxdataF[0],phy_vars_ue->lte_frame_parms.ofdm_symbol_size*2*((phy_vars_ue->lte_frame_parms.Ncp==0)?14:12),2,1); + write_output("H00.m","h00",&(phy_vars_ue->lte_ue_common_vars.dl_ch_estimates[0][0][0]),((phy_vars_ue->lte_frame_parms.Ncp==0)?7:6)*(phy_vars_ue->lte_frame_parms.ofdm_symbol_size),1,1); + write_output("pdcch_rxF_ext0.m","pdcch_rxF_ext0",phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->rxdataF_ext[0],3*12*phy_vars_ue->lte_frame_parms.N_RB_DL,1,1); + write_output("pdcch_rxF_comp0.m","pdcch0_rxF_comp0",phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->rxdataF_comp[0],4*12*phy_vars_ue->lte_frame_parms.N_RB_DL,1,1); + write_output("pdcch_rxF_llr.m","pdcch_llr",phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->llr,2400,1,4); + mac_xface->macphy_exit("debug exit"); + } +*/ VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_PDCCH_PROCEDURES, VCD_FUNCTION_OUT); return(0); } @@ -2393,7 +2405,7 @@ int lte_ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *phy_vars_ue,uint8_t abst int phy_procedures_UE_RX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstraction_flag,runmode_t mode, relaying_type_t r_type,PHY_VARS_RN *phy_vars_rn) { - + uint16_t l,m,n_symb; // int eNB_id = 0, int ret=0; @@ -2405,7 +2417,6 @@ int phy_procedures_UE_RX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstrac int eNB_id_i = 1; uint8_t dual_stream_UE = 0; #endif - int i; #ifndef OPENAIR2 uint8_t *rar; #endif @@ -2478,20 +2489,22 @@ int phy_procedures_UE_RX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstrac } //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - - LOG_D(PHY,"[UE %d] *********** dlsch->active in subframe %d (%d)=> %d\n",phy_vars_ue->Mod_id,subframe_rx,slot_rx,phy_vars_ue->dlsch_ue[eNB_id][0]->active); - // This is normal processing (i.e. not MBSFN) // RX processing of symbols in slot_rx + + + for (l=0; lofdm_demod_stats); VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SLOT_FEP, VCD_FUNCTION_IN); + slot_fep(phy_vars_ue, l, slot_rx, phy_vars_ue->rx_offset, - 0); + 0, + 0); VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SLOT_FEP, VCD_FUNCTION_OUT); stop_meas(&phy_vars_ue->ofdm_demod_stats); } @@ -2532,11 +2545,10 @@ int phy_procedures_UE_RX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstrac } #ifdef DLSCH_THREAD - if (phy_vars_ue->dlsch_ue[eNB_id][0]->active == 1) { // activate thread since Chest is now done for slot before slot_rx if (l==0) { - LOG_D(PHY,"frame %d, slot_rx %d: Calling rx_pdsch_thread for harq_pid %d\n",frame_rx,slot_rx, phy_vars_ue->dlsch_ue[eNB_id][0]->current_harq_pid); + LOG_I(PHY,"frame %d, slot_rx %d: Calling rx_pdsch_thread for harq_pid %d\n",frame_rx,slot_rx, phy_vars_ue->dlsch_ue[eNB_id][0]->current_harq_pid); if (pthread_mutex_lock (&rx_pdsch_mutex) != 0) { // Signal MAC_PHY Scheduler LOG_E(PHY,"[UE %d] ERROR pthread_mutex_lock\n",phy_vars_ue->Mod_id); // lock before accessing shared resource @@ -2580,7 +2592,7 @@ int phy_procedures_UE_RX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstrac (openair_daq_vars.use_ia_receiver ==1)) { dual_stream_UE = 1; eNB_id_i = phy_vars_ue->n_connected_eNB; - i_mod = get_Qm(phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->mcs); + i_mod = phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->Qm; if (frame_rx%100==0) { LOG_I(PHY,"using IA receiver\n"); @@ -2627,8 +2639,8 @@ int phy_procedures_UE_RX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstrac if (abstraction_flag == 0) { phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->G = get_G(&phy_vars_ue->lte_frame_parms, phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->nb_rb, - phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->rb_alloc, - get_Qm(phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->mcs), + phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->rb_alloc_even, + phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->Qm, phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->Nl, phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->num_pdcch_symbols, frame_rx, @@ -2787,15 +2799,16 @@ int phy_procedures_UE_RX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstrac phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->G = get_G(&phy_vars_ue->lte_frame_parms, phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->nb_rb, - phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->rb_alloc, - get_Qm(phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->mcs),1, + phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->rb_alloc_even, + 2, + 1, phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->num_pdcch_symbols, frame_rx, subframe_prev, phy_vars_ue->transmission_mode[eNB_id]); #ifdef DEBUG_PHY_PROC - LOG_D(PHY,"Decoding DLSCH_SI : rb_alloc %x : nb_rb %d G %d TBS %d, num_pdcch_sym %d\n",phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->rb_alloc[0], + LOG_I(PHY,"Decoding DLSCH_SI : rb_alloc %x : nb_rb %d G %d TBS %d, num_pdcch_sym %d\n",phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->rb_alloc_even[0], phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->nb_rb, phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->G, phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->TBS, @@ -2822,7 +2835,7 @@ int phy_procedures_UE_RX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstrac #ifdef DEBUG_PHY_PROC - for (i=0; i<11; i++) + for (int i=0; i<11; i++) LOG_D(PHY,"dlsch_output_buffer[%d]=%x\n",i,phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->c[0][i]); #endif @@ -2843,21 +2856,37 @@ int phy_procedures_UE_RX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstrac if (ret == (1+phy_vars_ue->dlsch_ue_SI[eNB_id]->max_turbo_iterations)) { phy_vars_ue->dlsch_SI_errors[eNB_id]++; #ifdef DEBUG_PHY_PROC - LOG_D(PHY,"[UE %d] Frame %d, subframe %d, received SI in error\n",phy_vars_ue->Mod_id,frame_rx,subframe_prev); + LOG_I(PHY,"[UE %d] Frame %d, subframe %d, received SI in error (TBS %d, mcs %d, rvidx %d, rballoc %X.%X.%X.%X\n", + phy_vars_ue->Mod_id, + frame_rx, + subframe_prev, + phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->TBS, + phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->mcs, + phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->rvidx, + phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->rb_alloc_even[0], + phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->rb_alloc_even[1], + phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->rb_alloc_even[2], + phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->rb_alloc_even[3]); #endif - - //dump_dlsch_SI(phy_vars_ue,eNB_id,subframe_prev); + + // dump_dlsch_SI(phy_vars_ue,eNB_id,subframe_prev); VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_RX, VCD_FUNCTION_OUT); stop_meas(&phy_vars_ue->phy_proc_rx); - return(-1); + return(-1); } else { #ifdef DEBUG_PHY_PROC //if ((frame_rx % 100) == 0) - LOG_D(PHY,"[UE %d] Frame %d, subframe %d, received SI for TBS %d, mcs %d\n", - phy_vars_ue->Mod_id,frame_rx,subframe_prev,phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->TBS, - phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->mcs); + LOG_D(PHY,"[UE %d] Frame %d, subframe %d, received SI for TBS %d, mcs %d, rvidx %d, rballoc %X.%X.%X.%X\n", + phy_vars_ue->Mod_id,frame_rx,subframe_prev, + phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->TBS, + phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->mcs, + phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->rvidx, + phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->rb_alloc_even[0], + phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->rb_alloc_even[1], + phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->rb_alloc_even[2], + phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->rb_alloc_even[3]); #endif #ifdef OPENAIR2 @@ -2931,10 +2960,11 @@ int phy_procedures_UE_RX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstrac if (abstraction_flag==0) { phy_vars_ue->dlsch_ue_ra[eNB_id]->harq_processes[0]->G = get_G(&phy_vars_ue->lte_frame_parms, - phy_vars_ue->dlsch_ue_ra[eNB_id]->harq_processes[0]->nb_rb, - phy_vars_ue->dlsch_ue_ra[eNB_id]->harq_processes[0]->rb_alloc, - get_Qm(phy_vars_ue->dlsch_ue_ra[eNB_id]->harq_processes[0]->mcs),1, - phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->num_pdcch_symbols, + phy_vars_ue->dlsch_ue_ra[eNB_id]->harq_processes[0]->nb_rb, + phy_vars_ue->dlsch_ue_ra[eNB_id]->harq_processes[0]->rb_alloc_even, + 2, + 1, + phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->num_pdcch_symbols, frame_rx, subframe_prev, phy_vars_ue->transmission_mode[eNB_id]); @@ -2959,7 +2989,7 @@ int phy_procedures_UE_RX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstrac phy_vars_ue->dlsch_ue_ra[eNB_id], phy_vars_ue->dlsch_ue_ra[eNB_id]->harq_processes[0], subframe_prev, // subframe - harq_pid, + phy_vars_ue->dlsch_ue_ra[eNB_id]->current_harq_pid, 0,0); } @@ -3082,10 +3112,11 @@ int phy_procedures_UE_RX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstrac // rt_printk("[PDCCH] Frame %d, slot %d, start %llu\n",frame_rx,slot_rx,rt_get_time_ns()); if (lte_ue_pdcch_procedures(eNB_id,phy_vars_ue,abstraction_flag) == -1) { #ifdef DEBUG_PHY_PROC - LOG_E(PHY,"[UE %d] Frame %d, slot %d: Error in pdcch procedures\n",phy_vars_ue->Mod_id,frame_rx,slot_rx); + LOG_E(PHY,"[UE %d] Frame %d, slot %d: Error in pdcch procedures\n",phy_vars_ue->Mod_id,frame_rx,slot_rx); #endif - return(-1); + return(-1); } + // rt_printk("[PDCCH] Frame %d, slot %d, stop %llu\n",frame_rx,slot_rx,rt_get_time_ns()); #ifdef DEBUG_PHY_PROC @@ -3113,7 +3144,7 @@ int phy_procedures_UE_RX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstrac (openair_daq_vars.use_ia_receiver ==1)) { dual_stream_UE = 1; eNB_id_i = phy_vars_ue->n_connected_eNB; - i_mod = get_Qm(phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->mcs); + i_mod = phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->Qm; } else { dual_stream_UE = 0; eNB_id_i = eNB_id+1; @@ -3182,7 +3213,7 @@ int phy_procedures_UE_RX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstrac (openair_daq_vars.use_ia_receiver ==1)) { dual_stream_UE = 1; eNB_id_i = phy_vars_ue->n_connected_eNB; - i_mod = get_Qm(phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->mcs); + i_mod = phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->Qm; } else { dual_stream_UE = 0; eNB_id_i = eNB_id+1; @@ -3251,10 +3282,11 @@ int phy_procedures_UE_RX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstrac LOG_D(PHY,"[UE %d] Calculating bitrate Frame %d: total_TBS = %d, total_TBS_last = %d, bitrate %f kbits\n", phy_vars_ue->Mod_id,frame_rx,phy_vars_ue->total_TBS[eNB_id], phy_vars_ue->total_TBS_last[eNB_id],(float) phy_vars_ue->bitrate[eNB_id]/1000.0); - + /* if ((frame_rx % 100 == 0)) { LOG_I(PHY,"Throughput %5.1f kbps\n",(float) phy_vars_ue->bitrate[eNB_id]/1000.0); } + */ } if (is_pmch_subframe((subframe_rx==9?-1:0)+frame_rx,subframe_rx,&phy_vars_ue->lte_frame_parms)) { @@ -3308,8 +3340,8 @@ int phy_procedures_UE_RX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstrac */ phy_vars_ue->dlsch_ue_MCH[0]->harq_processes[0]->G = get_G(&phy_vars_ue->lte_frame_parms, phy_vars_ue->dlsch_ue_MCH[0]->harq_processes[0]->nb_rb, - phy_vars_ue->dlsch_ue_MCH[0]->harq_processes[0]->rb_alloc, - get_Qm(phy_vars_ue->dlsch_ue_MCH[0]->harq_processes[0]->mcs), + phy_vars_ue->dlsch_ue_MCH[0]->harq_processes[0]->rb_alloc_even, + phy_vars_ue->dlsch_ue_MCH[0]->harq_processes[0]->Qm, 1, 2, (subframe_rx==9?-1:0)+frame_rx, @@ -3359,7 +3391,7 @@ int phy_procedures_UE_RX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstrac dump_mch(phy_vars_ue,0,phy_vars_ue->dlsch_ue_MCH[0]->harq_processes[0]->G,subframe_rx); #ifdef DEBUG_DLSCH - for (i=0; idlsch_ue_MCH[0]->harq_processes[0]->TBS>>3; i++) { + for (int i=0; idlsch_ue_MCH[0]->harq_processes[0]->TBS>>3; i++) { LOG_T(PHY,"%02x.",phy_vars_ue->dlsch_ue_MCH[0]->harq_processes[0]->c[0][i]); } @@ -3414,7 +3446,7 @@ int phy_procedures_UE_RX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstrac phy_vars_rn->dlsch_rn_MCH[subframe_rx]->harq_processes[0]->TBS>>3); #ifdef DEBUG_PHY - for (i=0; idlsch_rn_MCH[subframe_rx]->harq_processes[0]->TBS>>3; i++) + for (int i=0; idlsch_rn_MCH[subframe_rx]->harq_processes[0]->TBS>>3; i++) msg("%02x ",phy_vars_rn->dlsch_rn_MCH[subframe_rx]->harq_processes[0]->b[i]); msg("\n"); @@ -3468,7 +3500,7 @@ int phy_procedures_RN_UE_RX(uint8_t slot_rx, uint8_t next_slot, relaying_type_t #if defined(ENABLE_ITTI) -# if defined(ENABLE_RAL) +# if ENABLE_RAL extern PHY_MEASUREMENTS PHY_measurements; void phy_UE_lte_measurement_thresholds_test_and_report(instance_t instanceP, ral_threshold_phy_t* threshold_phy_pP, uint16_t valP) @@ -3606,7 +3638,7 @@ void phy_procedures_UE_lte(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstr unsigned int Mod_id; int result; #endif -# if defined(ENABLE_RAL) +# if ENABLE_RAL int CC_id =0; #endif int frame_rx = phy_vars_ue->frame_rx; @@ -3653,7 +3685,7 @@ void phy_procedures_UE_lte(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstr LOG_I(PHY, "[UE %d] Received %s\n", Mod_id, msg_name); /* TODO process the message */ -# if defined(ENABLE_RAL) +# if ENABLE_RAL { MessageDef *message_p; @@ -3672,7 +3704,7 @@ void phy_procedures_UE_lte(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstr # endif break; -# if defined(ENABLE_RAL) +# if ENABLE_RAL case TIMER_HAS_EXPIRED: // check if it is a measurement timer diff --git a/openair1/SCHED/pucch_pc.c b/openair1/SCHED/pucch_pc.c index 1db276e360..3cfb5f9bce 100644 --- a/openair1/SCHED/pucch_pc.c +++ b/openair1/SCHED/pucch_pc.c @@ -53,14 +53,13 @@ int8_t pucch_power_cntl(PHY_VARS_UE *phy_vars_ue,uint8_t subframe,uint8_t eNB_id if ((pucch_fmt == pucch_format1a) || (pucch_fmt == pucch_format1b)) { // Update g_pucch based on TPC/delta_PUCCH received in PDCCH for this process harq_pid = phy_vars_ue->dlsch_ue[eNB_id][0]->harq_ack[subframe].harq_id; - phy_vars_ue->g_pucch[eNB_id] += phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->delta_PUCCH; + //this is now done in dci_tools + //phy_vars_ue->g_pucch[eNB_id] += phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->delta_PUCCH; } - phy_vars_ue->g_pucch[eNB_id] = 0; - Po_PUCCH = get_PL(phy_vars_ue->Mod_id,phy_vars_ue->CC_id,eNB_id)+ - phy_vars_ue->lte_frame_parms.ul_power_control_config_common.p0_NominalPUCCH+ - phy_vars_ue->g_pucch[eNB_id]; + phy_vars_ue->lte_frame_parms.ul_power_control_config_common.p0_NominalPUCCH+ + phy_vars_ue->dlsch_ue[eNB_id][0]->g_pucch; switch (pucch_fmt) { case pucch_format1: @@ -97,21 +96,21 @@ int8_t pucch_power_cntl(PHY_VARS_UE *phy_vars_ue,uint8_t subframe,uint8_t eNB_id } if (pucch_fmt!=pucch_format1) { - LOG_D(PHY,"[UE %d][PDSCH %x] frame %d, subframe %d: Po_PUCCH %d dBm : Po_NOMINAL_PUCCH %d dBm, PL %d dB, g_pucch %d dB\n", + LOG_I(PHY,"[UE %d][PDSCH %x] frame %d, subframe %d: Po_PUCCH %d dBm : Po_NOMINAL_PUCCH %d dBm, PL %d dB, g_pucch %d dB\n", phy_vars_ue->Mod_id, phy_vars_ue->dlsch_ue[eNB_id][0]->rnti,phy_vars_ue->frame_tx,subframe, Po_PUCCH, phy_vars_ue->lte_frame_parms.ul_power_control_config_common.p0_NominalPUCCH, get_PL(phy_vars_ue->Mod_id,phy_vars_ue->CC_id,eNB_id), - phy_vars_ue->g_pucch[eNB_id]); + phy_vars_ue->dlsch_ue[eNB_id][0]->g_pucch); } else { - LOG_D(PHY,"[UE %d][SR %x] frame %d, subframe %d: Po_PUCCH %d dBm : Po_NOMINAL_PUCCH %d dBm, PL %d dB g_pucch %d dB\n", + LOG_I(PHY,"[UE %d][SR %x] frame %d, subframe %d: Po_PUCCH %d dBm : Po_NOMINAL_PUCCH %d dBm, PL %d dB g_pucch %d dB\n", phy_vars_ue->Mod_id, phy_vars_ue->dlsch_ue[eNB_id][0]->rnti,phy_vars_ue->frame_tx,subframe, Po_PUCCH, phy_vars_ue->lte_frame_parms.ul_power_control_config_common.p0_NominalPUCCH, get_PL(phy_vars_ue->Mod_id,phy_vars_ue->CC_id,eNB_id), - phy_vars_ue->g_pucch[eNB_id]); + phy_vars_ue->dlsch_ue[eNB_id][0]->g_pucch); } return(Po_PUCCH); diff --git a/openair1/SCHED/pusch_pc.c b/openair1/SCHED/pusch_pc.c index 0d7a99b8d2..5a3390d677 100644 --- a/openair1/SCHED/pusch_pc.c +++ b/openair1/SCHED/pusch_pc.c @@ -175,14 +175,14 @@ void pusch_power_cntl(PHY_VARS_UE *phy_vars_ue,uint8_t subframe,uint8_t eNB_id,u phy_vars_ue->ulsch_ue[eNB_id]->Po_PUSCH += ((alpha_lut[phy_vars_ue->lte_frame_parms.ul_power_control_config_common.alpha]*PL)/100); phy_vars_ue->ulsch_ue[eNB_id]->Po_PUSCH += phy_vars_ue->lte_frame_parms.ul_power_control_config_common.p0_NominalPUSCH; - phy_vars_ue->ulsch_ue[eNB_id]->PHR = phy_vars_ue->tx_power_max_dBm-phy_vars_ue->ulsch_ue[eNB_id]->Po_PUSCH; // 15 dBm, FIX ME should be P0_max + phy_vars_ue->ulsch_ue[eNB_id]->PHR = phy_vars_ue->tx_power_max_dBm-phy_vars_ue->ulsch_ue[eNB_id]->Po_PUSCH; if (phy_vars_ue->ulsch_ue[eNB_id]->PHR < -23) phy_vars_ue->ulsch_ue[eNB_id]->PHR = -23; else if (phy_vars_ue->ulsch_ue[eNB_id]->PHR > 40) phy_vars_ue->ulsch_ue[eNB_id]->PHR = 40; - LOG_I(PHY,"[UE %d][PUSCH %d] frame %d, subframe %d: Po_PUSCH %d dBm : tx power %d, Po_NOMINAL_PUSCH %d,log10(NPRB) %f,PHR %d, PL %d, alpha*PL %f,delta_IF %f,f_pusch %d\n", + LOG_D(PHY,"[UE %d][PUSCH %d] frame %d, subframe %d: Po_PUSCH %d dBm : tx power %d, Po_NOMINAL_PUSCH %d,log10(NPRB) %f,PHR %d, PL %d, alpha*PL %f,delta_IF %f,f_pusch %d\n", phy_vars_ue->Mod_id,harq_pid,phy_vars_ue->frame_tx,subframe, phy_vars_ue->ulsch_ue[eNB_id]->Po_PUSCH, phy_vars_ue->tx_power_max_dBm, diff --git a/openair1/SIMULATION/ETH_TRANSPORT/netlink_init.c b/openair1/SIMULATION/ETH_TRANSPORT/netlink_init.c index bb1b9fcb07..aaa8e9c32a 100644 --- a/openair1/SIMULATION/ETH_TRANSPORT/netlink_init.c +++ b/openair1/SIMULATION/ETH_TRANSPORT/netlink_init.c @@ -75,7 +75,7 @@ int netlink_init(void) printf("[NETLINK]Opened socket with fd %d\n",nas_sock_fd); -#if !defined(USE_PDCP_NETLINK_QUEUES) +#if !defined(PDCP_USE_NETLINK_QUEUES) ret = fcntl(nas_sock_fd,F_SETFL,O_NONBLOCK); if (ret == -1) { diff --git a/openair1/SIMULATION/LTE_PHY/dlsim.c b/openair1/SIMULATION/LTE_PHY/dlsim.c index 27ca4b8fbd..139d507e61 100644 --- a/openair1/SIMULATION/LTE_PHY/dlsim.c +++ b/openair1/SIMULATION/LTE_PHY/dlsim.c @@ -135,7 +135,7 @@ void lte_param_init(unsigned char N_tx, unsigned char N_tx_phy, unsigned char N_ lte_frame_parms->nb_antennas_tx = N_tx; lte_frame_parms->nb_antennas_rx = N_rx; lte_frame_parms->nb_antennas_tx_eNB = N_tx; - lte_frame_parms->phich_config_common.phich_resource = oneSixth; + lte_frame_parms->phich_config_common.phich_resource = one; lte_frame_parms->tdd_config = tdd_config; lte_frame_parms->frame_type = (fdd_flag==1)?0 : 1; // lte_frame_parms->Csrs = 2; @@ -240,8 +240,8 @@ void do_OFDM_mod_l(mod_sym_t **txdataF, int32_t **txdata, uint16_t next_slot, LT int main(int argc, char **argv) { - char c; - int k,i,aa,aarx,aatx,re; + int c; + int k,i,aa,aarx,aatx; int s,Kr,Kr_bytes; @@ -356,12 +356,24 @@ int main(int argc, char **argv) LTE_DL_UE_HARQ_t *dlsch0_ue_harq; LTE_DL_eNB_HARQ_t *dlsch0_eNB_harq; uint8_t Kmimo; - + FILE *proc_fd = NULL; + char buf[64]; opp_enabled=1; // to enable the time meas - cpu_freq_GHz = (double)get_cpu_freq_GHz(); - +#if defined(__arm__) + proc_fd = fopen("/sys/devices/system/cpu/cpu4/cpufreq/cpuinfo_cur_freq", "r"); + if(!proc_fd) + printf("cannot open /sys/devices/system/cpu/cpu4/cpufreq/cpuinfo_cur_freq"); + else { + while(fgets(buf, 63, proc_fd)) + printf("%s", buf); + } + fclose(proc_fd); + cpu_freq_GHz = ((double)atof(buf))/1e6; +#else + cpu_freq_GHz = get_cpu_freq_GHz(); +#endif printf("Detected cpu_freq %f GHz\n",cpu_freq_GHz); //signal(SIGSEGV, handler); @@ -533,6 +545,7 @@ int main(int argc, char **argv) if ((transmission_mode!=1) && (transmission_mode!=2) && (transmission_mode!=3) && + (transmission_mode!=4) && (transmission_mode!=5) && (transmission_mode!=6) && (transmission_mode!=7)) { @@ -681,7 +694,7 @@ int main(int argc, char **argv) printf("-z Number of RX antennas used in UE\n"); printf("-t MCS of interfering UE\n"); printf("-R Number of HARQ rounds (fixed)\n"); - printf("-M Turns on calibration mode for abstraction.\n"); + printf("-A Turns on calibration mode for abstraction.\n"); printf("-N Determines the number of Channel Realizations in Abstraction mode. Default value is 1. \n"); printf("-O Set the percenatge of effective rate to testbench the modem performance (typically 30 and 70, range 1-100) \n"); printf("-I Input filename for TrCH data (binary)\n"); @@ -758,18 +771,18 @@ int main(int argc, char **argv) lte_gold_ue_spec_port5(PHY_vars_UE->lte_gold_uespec_port5_table,Nid_cell,n_rnti); beamforming_weights = (int32_t **)malloc(12*N_RB_DL*sizeof(int32_t*)); - for(re=0;re<12*N_RB_DL;re++){ - beamforming_weights[re]=(int32_t *)malloc(n_tx_phy*sizeof(int32_t)); + for(i=0;i<12*N_RB_DL;i++){ + beamforming_weights[i]=(int32_t *)malloc(n_tx_phy*sizeof(int32_t)); for(aa=0;aa>1; + beamforming_weights[i][aa] = 0x00007fff>>1; else if (n_tx_phy==16) - beamforming_weights[re][aa] = 0x00007fff>>2; + beamforming_weights[i][aa] = 0x00007fff>>2; else if (n_tx_phy==64) - beamforming_weights[re][aa] = 0x00007fff>>3; + beamforming_weights[i][aa] = 0x00007fff>>3; } } printf("***n_tx_phy=%d,n_tx_phy>>2=%d,beamforming_weights=%d\n",n_tx_phy,n_tx_phy>>2,beamforming_weights[0][0]); @@ -1203,6 +1216,7 @@ int main(int argc, char **argv) printf("Generating dlsch params for user %d\n",k); generate_eNB_dlsch_params_from_dci(0, + subframe, &DLSCH_alloc_pdu_1[0], n_rnti+k, format1, @@ -1345,6 +1359,7 @@ int main(int argc, char **argv) printf("Generating dlsch params for user %d\n",k); generate_eNB_dlsch_params_from_dci(0, + subframe, &DLSCH_alloc_pdu_1[0], SI_RNTI, format1A, @@ -1511,6 +1526,7 @@ int main(int argc, char **argv) printf("Generating dlsch params for user %d / format 2A (%d)\n",k,format2A); generate_eNB_dlsch_params_from_dci(0, + subframe, &DLSCH_alloc_pdu_1[0], n_rnti+k, format2A, @@ -1650,6 +1666,7 @@ int main(int argc, char **argv) printf("Generating dlsch params for user %d\n",k); generate_eNB_dlsch_params_from_dci(0, + subframe, &DLSCH_alloc_pdu_1[0], SI_RNTI, format1A, @@ -1817,6 +1834,7 @@ int main(int argc, char **argv) printf("Generating dlsch params for user %d\n",k); generate_eNB_dlsch_params_from_dci(0, + subframe, &DLSCH_alloc_pdu_1[0], n_rnti+k, format2, @@ -1956,6 +1974,7 @@ int main(int argc, char **argv) printf("Generating dlsch params for user %d\n",k); generate_eNB_dlsch_params_from_dci(0, + subframe, &DLSCH_alloc_pdu_1[0], SI_RNTI, format1A, @@ -1984,6 +2003,7 @@ int main(int argc, char **argv) dci_alloc[num_dci].nCCE = 4*k; printf("Generating dlsch params for user %d\n",k); generate_eNB_dlsch_params_from_dci(0, + subframe, &DLSCH_alloc_pdu2_1E[k], n_rnti+k, format1E_2A_M10PRB, @@ -2049,7 +2069,8 @@ int main(int argc, char **argv) if (input_trch_file==0) { for (i=0; inb_antennas_tx_phy>1)// to be updated write_output("txsigF1.m","txsF1", &PHY_vars_eNB->lte_eNB_common_vars.txdataF[eNB_id][1][subframe*nsymb*PHY_vars_eNB->lte_frame_parms.ofdm_symbol_size], nsymb*PHY_vars_eNB->lte_frame_parms.ofdm_symbol_size,1,1); - } - + } tx_lev = 0; for (aa=0; aanb_antennas_tx_phy; aa++) { @@ -3109,16 +3129,15 @@ PMI_FEEDBACK: no_prefix if 1 prefix is removed by HW */ - if(Ns==(2*subframe) || Ns==(2*subframe+1)) { - start_meas(&PHY_vars_UE->ofdm_demod_stats); - slot_fep(PHY_vars_UE, - l, - Ns%20, - 0, - 0); - stop_meas(&PHY_vars_UE->ofdm_demod_stats); - } - //write_output("rxsigF0.m","rxsF0", &PHY_vars_UE->lte_ue_common_vars.rxdataF[0][0],PHY_vars_UE->lte_frame_parms.ofdm_symbol_size*nsymb,1,1); + + start_meas(&PHY_vars_UE->ofdm_demod_stats); + slot_fep(PHY_vars_UE, + l, + Ns%20, + 0, + 0, + 0); + stop_meas(&PHY_vars_UE->ofdm_demod_stats); if (PHY_vars_UE->perfect_ce==1) { if (awgn_flag==0) { @@ -3254,6 +3273,7 @@ PMI_FEEDBACK: if ((dci_alloc_rx[i].rnti == n_rnti) && (generate_ue_dlsch_params_from_dci(0, + subframe, dci_alloc_rx[i].dci_pdu, dci_alloc_rx[i].rnti, dci_alloc_rx[i].format, @@ -3266,7 +3286,7 @@ PMI_FEEDBACK: //dump_dci(&PHY_vars_UE->lte_frame_parms,&dci_alloc_rx[i]); coded_bits_per_codeword = get_G(&PHY_vars_eNB->lte_frame_parms, PHY_vars_UE->dlsch_ue[0][0]->harq_processes[PHY_vars_UE->dlsch_ue[0][0]->current_harq_pid]->nb_rb, - PHY_vars_UE->dlsch_ue[0][0]->harq_processes[PHY_vars_UE->dlsch_ue[0][0]->current_harq_pid]->rb_alloc, + PHY_vars_UE->dlsch_ue[0][0]->harq_processes[PHY_vars_UE->dlsch_ue[0][0]->current_harq_pid]->rb_alloc_even, get_Qm(PHY_vars_UE->dlsch_ue[0][0]->harq_processes[PHY_vars_UE->dlsch_ue[0][0]->current_harq_pid]->mcs), PHY_vars_UE->dlsch_ue[0][0]->harq_processes[PHY_vars_UE->dlsch_ue[0][0]->current_harq_pid]->Nl, PHY_vars_UE->lte_ue_pdcch_vars[0]->num_pdcch_symbols, @@ -3316,6 +3336,7 @@ PMI_FEEDBACK: case 2: case 7: generate_ue_dlsch_params_from_dci(0, + subframe, &DLSCH_alloc_pdu_1[0], (common_flag==0)? C_RNTI : SI_RNTI, (common_flag==0)? format1 : format1A, @@ -3332,6 +3353,7 @@ PMI_FEEDBACK: case 3: // printf("Rate: TM3 (before) round %d (%d) first_tx %d\n",round,PHY_vars_UE->dlsch_ue[0][0]->harq_processes[0]->round,PHY_vars_UE->dlsch_ue[0][0]->harq_processes[0]->first_tx); generate_ue_dlsch_params_from_dci(0, + subframe, &DLSCH_alloc_pdu_1[0], (common_flag==0)? C_RNTI : SI_RNTI, (common_flag==0)? format2A : format1A, @@ -3346,6 +3368,7 @@ PMI_FEEDBACK: case 4: generate_ue_dlsch_params_from_dci(0, + subframe, &DLSCH_alloc_pdu_1[0], (common_flag==0)? C_RNTI : SI_RNTI, (common_flag==0)? format2 : format1A, @@ -3360,6 +3383,7 @@ PMI_FEEDBACK: case 5: case 6: generate_ue_dlsch_params_from_dci(0, + subframe, &DLSCH_alloc_pdu2_1E[0], C_RNTI, format1E_2A_M10PRB, @@ -3627,7 +3651,7 @@ PMI_FEEDBACK: dlsch0_ue_harq = PHY_vars_UE->dlsch_ue[eNB_id][0]->harq_processes[PHY_vars_UE->dlsch_ue[eNB_id][0]->current_harq_pid]; dlsch0_eNB_harq = PHY_vars_UE->dlsch_eNB[eNB_id]->harq_processes[PHY_vars_UE->dlsch_ue[eNB_id][0]->current_harq_pid]; dlsch0_eNB_harq->mimo_mode = LARGE_CDD; - dlsch0_eNB_harq->rb_alloc[0] = dlsch0_ue_harq->rb_alloc[0]; + dlsch0_eNB_harq->rb_alloc[0] = dlsch0_ue_harq->rb_alloc_even[0]; dlsch0_eNB_harq->nb_rb = dlsch0_ue_harq->nb_rb; dlsch0_eNB_harq->mcs = dlsch0_ue_harq->mcs; dlsch0_eNB_harq->rvidx = dlsch0_ue_harq->rvidx; diff --git a/openair1/SIMULATION/LTE_PHY/mbmssim.c b/openair1/SIMULATION/LTE_PHY/mbmssim.c index 51df30a4ec..3fe80ba70e 100644 --- a/openair1/SIMULATION/LTE_PHY/mbmssim.c +++ b/openair1/SIMULATION/LTE_PHY/mbmssim.c @@ -140,6 +140,7 @@ int main(int argc, char **argv) double **s_re,**s_im,**r_re,**r_im; double iqim = 0.0; int subframe=1; + int sched_subframe; char fname[40];//, vname[40]; uint8_t transmission_mode = 1,n_tx=1,n_rx=2; uint16_t Nid_cell=0; @@ -316,6 +317,9 @@ int main(int argc, char **argv) } } + + sched_subframe = (subframe+9)%10; + if (awgn_flag == 1) channel_model = AWGN; @@ -444,7 +448,8 @@ int main(int argc, char **argv) for (SNR=snr0; SNRframe_tx=0; - PHY_vars_eNB->proc[subframe].frame_tx=0; + PHY_vars_eNB->proc[sched_subframe].frame_tx=0; + PHY_vars_eNB->proc[sched_subframe].subframe_tx=subframe; errs[0]=0; errs[1]=0; @@ -467,7 +472,8 @@ int main(int argc, char **argv) eNB2UE->first_run = 1; memset(&PHY_vars_eNB->lte_eNB_common_vars.txdataF[0][0][0],0,FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX*sizeof(mod_sym_t)); - generate_mch(PHY_vars_eNB,subframe,input_buffer,0); + generate_mch(PHY_vars_eNB,sched_subframe,input_buffer,0); + PHY_ofdm_mod(PHY_vars_eNB->lte_eNB_common_vars.txdataF[0][0], // input, txdata[0], // output @@ -477,7 +483,7 @@ int main(int argc, char **argv) CYCLIC_PREFIX); if (n_frames==1) { - write_output("txsigF0.m","txsF0", &PHY_vars_eNB->lte_eNB_common_vars.txdataF[eNB_id][0][subframe*nsymb*PHY_vars_eNB->lte_frame_parms.ofdm_symbol_size], + write_output("txsigF0.m","txsF0", &PHY_vars_eNB->lte_eNB_common_vars.txdataF[0][0][subframe*nsymb*PHY_vars_eNB->lte_frame_parms.ofdm_symbol_size], nsymb*PHY_vars_eNB->lte_frame_parms.ofdm_symbol_size,1,1); //if (PHY_vars_eNB->lte_frame_parms.nb_antennas_tx>1) //write_output("txsigF1.m","txsF1", &PHY_vars_eNB->lte_eNB_common_vars.txdataF[eNB_id][1][subframe*nsymb*PHY_vars_eNB->lte_frame_parms.ofdm_symbol_size],nsymb*PHY_vars_eNB->lte_frame_parms.ofdm_symbol_size,1,1); @@ -548,10 +554,12 @@ int main(int argc, char **argv) PHY_vars_UE->dlsch_ue_MCH[0]->harq_processes[0]->G = get_G(&PHY_vars_UE->lte_frame_parms, PHY_vars_UE->dlsch_ue_MCH[0]->harq_processes[0]->nb_rb, - PHY_vars_UE->dlsch_ue_MCH[0]->harq_processes[0]->rb_alloc, + PHY_vars_UE->dlsch_ue_MCH[0]->harq_processes[0]->rb_alloc_even, get_Qm(PHY_vars_UE->dlsch_ue_MCH[0]->harq_processes[0]->mcs), 1,2, PHY_vars_UE->frame_tx,subframe,0); + PHY_vars_UE->dlsch_ue_MCH[0]->harq_processes[0]->Qm = get_Qm(PHY_vars_UE->dlsch_ue_MCH[0]->harq_processes[0]->mcs); + dlsch_unscrambling(&PHY_vars_UE->lte_frame_parms,1,PHY_vars_UE->dlsch_ue_MCH[0], PHY_vars_UE->dlsch_ue_MCH[0]->harq_processes[0]->G, PHY_vars_UE->lte_ue_pdsch_vars_MCH[0]->llr[0],0,subframe<<1); @@ -571,7 +579,7 @@ int main(int argc, char **argv) errs[0]++; PHY_vars_UE->frame_tx++; - PHY_vars_eNB->proc[subframe].frame_tx++; + PHY_vars_eNB->proc[sched_subframe].frame_tx++; } printf("errors %d/%d (Pe %e)\n",errs[round],trials,(double)errs[round]/trials); diff --git a/openair1/SIMULATION/LTE_PHY/pbchsim.c b/openair1/SIMULATION/LTE_PHY/pbchsim.c index 2a5f4d0d8a..67080836b7 100644 --- a/openair1/SIMULATION/LTE_PHY/pbchsim.c +++ b/openair1/SIMULATION/LTE_PHY/pbchsim.c @@ -992,7 +992,8 @@ int main(int argc, char **argv) l%(PHY_vars_eNb->lte_frame_parms.symbols_per_tti/2), l/(PHY_vars_eNb->lte_frame_parms.symbols_per_tti/2), 0, - 0); + 0, + 0); if (l==0) { @@ -1033,7 +1034,8 @@ int main(int argc, char **argv) lte_est_freq_offset(PHY_vars_UE->lte_ue_common_vars.dl_ch_estimates[0], &PHY_vars_UE->lte_frame_parms, l, - &freq_offset); + &freq_offset, + 1); } if (l==((PHY_vars_eNb->lte_frame_parms.Ncp==0)?10:9)) { diff --git a/openair1/SIMULATION/LTE_PHY/pdcchsim.c b/openair1/SIMULATION/LTE_PHY/pdcchsim.c index 6c53a5475f..1852e349ec 100644 --- a/openair1/SIMULATION/LTE_PHY/pdcchsim.c +++ b/openair1/SIMULATION/LTE_PHY/pdcchsim.c @@ -49,7 +49,6 @@ #include "PHY/TOOLS/lte_phy_scope.h" #endif - #define N_TRIALS 100 PHY_VARS_eNB *PHY_vars_eNB,*PHY_vars_eNB1,*PHY_vars_eNB2; @@ -89,7 +88,7 @@ void lte_param_init(unsigned char N_tx, unsigned char N_rx,unsigned char transmi lte_frame_parms->nb_antennas_tx_eNB = N_tx; lte_frame_parms->nb_antennas_tx = N_tx; lte_frame_parms->nb_antennas_rx = N_rx; - lte_frame_parms->phich_config_common.phich_resource = oneSixth; //half + lte_frame_parms->phich_config_common.phich_resource = one; //half lte_frame_parms->tdd_config = tdd_config; lte_frame_parms->frame_type = frame_type; @@ -1189,7 +1188,8 @@ int main(int argc, char **argv) l%(PHY_vars_eNB->lte_frame_parms.symbols_per_tti/2), (2*subframe)+(l/(PHY_vars_eNB->lte_frame_parms.symbols_per_tti/2)), 0, - 0); + 0, + 0); if (PHY_vars_UE->perfect_ce == 1) { if (awgn_flag==0) { diff --git a/openair1/SIMULATION/LTE_PHY/prachsim.c b/openair1/SIMULATION/LTE_PHY/prachsim.c index 1b2fc97b46..77f3b8accf 100644 --- a/openair1/SIMULATION/LTE_PHY/prachsim.c +++ b/openair1/SIMULATION/LTE_PHY/prachsim.c @@ -554,7 +554,7 @@ int main(int argc, char **argv) for (i=1; i<64; i++) { if (preamble_energy_max < preamble_energy_list[i]) { - // printf("preamble %d => %d\n",i,preamble_energy_list[i]); + // printf("preamble %d => %d\n",i,preamble_energy_list[i]); preamble_energy_max = preamble_energy_list[i]; preamble_max = i; } diff --git a/openair1/SIMULATION/LTE_PHY/pucchsim.c b/openair1/SIMULATION/LTE_PHY/pucchsim.c index b447ca248b..1f7dfb3789 100644 --- a/openair1/SIMULATION/LTE_PHY/pucchsim.c +++ b/openair1/SIMULATION/LTE_PHY/pucchsim.c @@ -44,6 +44,7 @@ #include "SCHED/defs.h" #include "SCHED/vars.h" #include "LAYER2/MAC/vars.h" +#include "intertask_interface_init.h" #include "OCG_vars.h" #include "UTIL/LOG/log_extern.h" @@ -157,7 +158,7 @@ int main(int argc, char **argv) int32_t stat; double stat_no_sig,stat_sig; uint8_t N0=40; - uint8_t pucch1_thres=13; + uint8_t pucch1_thres=10; uint16_t n1_pucch = 0; uint16_t n2_pucch = 0; @@ -362,6 +363,7 @@ int main(int argc, char **argv) } logInit(); + itti_init(TASK_MAX, THREAD_MAX, MESSAGES_ID_MAX, tasks_info, messages_info, messages_definition_xml, NULL); g_log->log_component[PHY].level = LOG_DEBUG; g_log->log_component[PHY].flag = LOG_HIGH; @@ -573,11 +575,11 @@ int main(int argc, char **argv) sig=1; } else { if (trial<(n_frames>>1)) { - // printf("no sig =>"); + //printf("no sig =>"); sig= 0; } else { sig=1; - // printf("sig =>"); + //printf("sig =>"); pucch_tx++; } } diff --git a/openair1/SIMULATION/TOOLS/multipath_channel.c b/openair1/SIMULATION/TOOLS/multipath_channel.c index 65c8737c81..7a21db2a57 100644 --- a/openair1/SIMULATION/TOOLS/multipath_channel.c +++ b/openair1/SIMULATION/TOOLS/multipath_channel.c @@ -1,222 +1,222 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ -#include -#include -#include -#include -#include "defs.h" -#include "SIMULATION/RF/defs.h" - -//#define DEBUG_CH -uint8_t multipath_channel_nosigconv(channel_desc_t *desc) -{ - - random_channel(desc,0); - return(1); -} - -#define CHANNEL_SSE -#ifdef CHANNEL_SSE -void multipath_channel(channel_desc_t *desc, - double **tx_sig_re, - double **tx_sig_im, - double **rx_sig_re, - double **rx_sig_im, - uint32_t length, - uint8_t keep_channel) -{ - - int i,ii,j,l; - int length1, length2, tail; - __m128d rx_tmp128_re_f,rx_tmp128_im_f,rx_tmp128_re,rx_tmp128_im, rx_tmp128_1,rx_tmp128_2,rx_tmp128_3,rx_tmp128_4,tx128_re,tx128_im,ch128_x,ch128_y,pathloss128; - - double path_loss = pow(10,desc->path_loss_dB/20); - int dd = abs(desc->channel_offset); - - pathloss128 = _mm_set1_pd(path_loss); - -#ifdef DEBUG_CH - printf("[CHANNEL] keep = %d : path_loss = %g (%f), nb_rx %d, nb_tx %d, dd %d, len %d \n",keep_channel,path_loss,desc->path_loss_dB,desc->nb_rx,desc->nb_tx,dd,desc->channel_length); -#endif - - if (keep_channel) { - // do nothing - keep channel - } else { - random_channel(desc,0); - } - - start_meas(&desc->convolution); - -#ifdef DEBUG_CH - - for (l = 0; l<(int)desc->channel_length; l++) { - printf("%p (%f,%f) ",desc->ch[0],desc->ch[0][l].x,desc->ch[0][l].y); - } - - printf("\n"); -#endif - - tail = ((int)length-dd)%2; - - if(tail) - length1 = ((int)length-dd)-1; - else - length1 = ((int)length-dd); - - length2 = length1/2; - - for (i=0; inb_rx; ii++) { - // rx_tmp.x = 0; - // rx_tmp.y = 0; - rx_tmp128_re_f = _mm_setzero_pd(); - rx_tmp128_im_f = _mm_setzero_pd(); - - for (j=0; jnb_tx; j++) { - for (l = 0; l<(int)desc->channel_length; l++) { - if ((i>=0) && (i-l)>=0) { //SIMD correct only if length1 > 2*channel_length...which is almost always satisfied - // tx.x = tx_sig_re[j][i-l]; - // tx.y = tx_sig_im[j][i-l]; - tx128_re = _mm_loadu_pd(&tx_sig_re[j][2*i-l]); // tx_sig_re[j][i-l+1], tx_sig_re[j][i-l] - tx128_im = _mm_loadu_pd(&tx_sig_im[j][2*i-l]); - } else { - //tx.x =0; - //tx.y =0; - tx128_re = _mm_setzero_pd(); - tx128_im = _mm_setzero_pd(); - } - - ch128_x = _mm_set1_pd(desc->ch[ii+(j*desc->nb_rx)][l].x); - ch128_y = _mm_set1_pd(desc->ch[ii+(j*desc->nb_rx)][l].y); - // rx_tmp.x += (tx.x * desc->ch[ii+(j*desc->nb_rx)][l].x) - (tx.y * desc->ch[ii+(j*desc->nb_rx)][l].y); - // rx_tmp.y += (tx.y * desc->ch[ii+(j*desc->nb_rx)][l].x) + (tx.x * desc->ch[ii+(j*desc->nb_rx)][l].y); - rx_tmp128_1 = _mm_mul_pd(tx128_re,ch128_x); - rx_tmp128_2 = _mm_mul_pd(tx128_re,ch128_y); - rx_tmp128_3 = _mm_mul_pd(tx128_im,ch128_x); - rx_tmp128_4 = _mm_mul_pd(tx128_im,ch128_y); - rx_tmp128_re = _mm_sub_pd(rx_tmp128_1,rx_tmp128_4); - rx_tmp128_im = _mm_add_pd(rx_tmp128_2,rx_tmp128_3); - rx_tmp128_re_f = _mm_add_pd(rx_tmp128_re_f,rx_tmp128_re); - rx_tmp128_im_f = _mm_add_pd(rx_tmp128_im_f,rx_tmp128_im); - } //l - } // j - - //rx_sig_re[ii][i+dd] = rx_tmp.x*path_loss; - //rx_sig_im[ii][i+dd] = rx_tmp.y*path_loss; - rx_tmp128_re_f = _mm_mul_pd(rx_tmp128_re_f,pathloss128); - rx_tmp128_im_f = _mm_mul_pd(rx_tmp128_im_f,pathloss128); - _mm_storeu_pd(&rx_sig_re[ii][2*i+dd],rx_tmp128_re_f); // max index: length-dd -1 + dd = length -1 - _mm_storeu_pd(&rx_sig_im[ii][2*i+dd],rx_tmp128_im_f); - /* - if ((ii==0)&&((i%32)==0)) { - printf("%p %p %f,%f => %e,%e\n",rx_sig_re[ii],rx_sig_im[ii],rx_tmp.x,rx_tmp.y,rx_sig_re[ii][i-dd],rx_sig_im[ii][i-dd]); - } - */ - //rx_sig_re[ii][i] = sqrt(.5)*(tx_sig_re[0][i] + tx_sig_re[1][i]); - //rx_sig_im[ii][i] = sqrt(.5)*(tx_sig_im[0][i] + tx_sig_im[1][i]); - - } // ii - } // i - - stop_meas(&desc->convolution); - -} - -#else -void multipath_channel(channel_desc_t *desc, - double **tx_sig_re, - double **tx_sig_im, - double **rx_sig_re, - double **rx_sig_im, - uint32_t length, - uint8_t keep_channel) -{ - - int i,ii,j,l; - struct complex rx_tmp,tx; - - double path_loss = pow(10,desc->path_loss_dB/20); - int dd; - dd = abs(desc->channel_offset); - -#ifdef DEBUG_CH - printf("[CHANNEL] keep = %d : path_loss = %g (%f), nb_rx %d, nb_tx %d, dd %d, len %d \n",keep_channel,path_loss,desc->path_loss_dB,desc->nb_rx,desc->nb_tx,dd,desc->channel_length); -#endif - - if (keep_channel) { - // do nothing - keep channel - } else { - random_channel(desc,0); - } - -#ifdef DEBUG_CH - - for (l = 0; l<(int)desc->channel_length; l++) { - printf("%p (%f,%f) ",desc->ch[0],desc->ch[0][l].x,desc->ch[0][l].y); - } - - printf("\n"); -#endif - - for (i=0; i<((int)length-dd); i++) { - for (ii=0; iinb_rx; ii++) { - rx_tmp.x = 0; - rx_tmp.y = 0; - - for (j=0; jnb_tx; j++) { - for (l = 0; l<(int)desc->channel_length; l++) { - if ((i>=0) && (i-l)>=0) { - tx.x = tx_sig_re[j][i-l]; - tx.y = tx_sig_im[j][i-l]; - } else { - tx.x =0; - tx.y =0; - } - - rx_tmp.x += (tx.x * desc->ch[ii+(j*desc->nb_rx)][l].x) - (tx.y * desc->ch[ii+(j*desc->nb_rx)][l].y); - rx_tmp.y += (tx.y * desc->ch[ii+(j*desc->nb_rx)][l].x) + (tx.x * desc->ch[ii+(j*desc->nb_rx)][l].y); - } //l - } // j - - rx_sig_re[ii][i+dd] = rx_tmp.x*path_loss; - rx_sig_im[ii][i+dd] = rx_tmp.y*path_loss; - /* - if ((ii==0)&&((i%32)==0)) { - printf("%p %p %f,%f => %e,%e\n",rx_sig_re[ii],rx_sig_im[ii],rx_tmp.x,rx_tmp.y,rx_sig_re[ii][i-dd],rx_sig_im[ii][i-dd]); - } - */ - //rx_sig_re[ii][i] = sqrt(.5)*(tx_sig_re[0][i] + tx_sig_re[1][i]); - //rx_sig_im[ii][i] = sqrt(.5)*(tx_sig_im[0][i] + tx_sig_im[1][i]); - - } // ii - } // i -} -#endif - - +/******************************************************************************* + OpenAirInterface + Copyright(c) 1999 - 2014 Eurecom + + OpenAirInterface is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + + OpenAirInterface is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with OpenAirInterface.The full GNU General Public License is + included in this distribution in the file called "COPYING". If not, + see . + + Contact Information + OpenAirInterface Admin: openair_admin@eurecom.fr + OpenAirInterface Tech : openair_tech@eurecom.fr + OpenAirInterface Dev : openair4g-devel@eurecom.fr + + Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE + + *******************************************************************************/ +#include +#include +#include +#include +#include "defs.h" +#include "SIMULATION/RF/defs.h" + +//#define DEBUG_CH +uint8_t multipath_channel_nosigconv(channel_desc_t *desc) +{ + + random_channel(desc,0); + return(1); +} + +//#define CHANNEL_SSE +#ifdef CHANNEL_SSE +void multipath_channel(channel_desc_t *desc, + double **tx_sig_re, + double **tx_sig_im, + double **rx_sig_re, + double **rx_sig_im, + uint32_t length, + uint8_t keep_channel) +{ + + int i,ii,j,l; + int length1, length2, tail; + __m128d rx_tmp128_re_f,rx_tmp128_im_f,rx_tmp128_re,rx_tmp128_im, rx_tmp128_1,rx_tmp128_2,rx_tmp128_3,rx_tmp128_4,tx128_re,tx128_im,ch128_x,ch128_y,pathloss128; + + double path_loss = pow(10,desc->path_loss_dB/20); + int dd = abs(desc->channel_offset); + + pathloss128 = _mm_set1_pd(path_loss); + +#ifdef DEBUG_CH + printf("[CHANNEL] keep = %d : path_loss = %g (%f), nb_rx %d, nb_tx %d, dd %d, len %d \n",keep_channel,path_loss,desc->path_loss_dB,desc->nb_rx,desc->nb_tx,dd,desc->channel_length); +#endif + + if (keep_channel) { + // do nothing - keep channel + } else { + random_channel(desc,0); + } + + start_meas(&desc->convolution); + +#ifdef DEBUG_CH + + for (l = 0; l<(int)desc->channel_length; l++) { + printf("%p (%f,%f) ",desc->ch[0],desc->ch[0][l].x,desc->ch[0][l].y); + } + + printf("\n"); +#endif + + tail = ((int)length-dd)%2; + + if(tail) + length1 = ((int)length-dd)-1; + else + length1 = ((int)length-dd); + + length2 = length1/2; + + for (i=0; inb_rx; ii++) { + // rx_tmp.x = 0; + // rx_tmp.y = 0; + rx_tmp128_re_f = _mm_setzero_pd(); + rx_tmp128_im_f = _mm_setzero_pd(); + + for (j=0; jnb_tx; j++) { + for (l = 0; l<(int)desc->channel_length; l++) { + if ((i>=0) && (i-l)>=0) { //SIMD correct only if length1 > 2*channel_length...which is almost always satisfied + // tx.x = tx_sig_re[j][i-l]; + // tx.y = tx_sig_im[j][i-l]; + tx128_re = _mm_loadu_pd(&tx_sig_re[j][2*i-l]); // tx_sig_re[j][i-l+1], tx_sig_re[j][i-l] + tx128_im = _mm_loadu_pd(&tx_sig_im[j][2*i-l]); + } else { + //tx.x =0; + //tx.y =0; + tx128_re = _mm_setzero_pd(); + tx128_im = _mm_setzero_pd(); + } + + ch128_x = _mm_set1_pd(desc->ch[ii+(j*desc->nb_rx)][l].x); + ch128_y = _mm_set1_pd(desc->ch[ii+(j*desc->nb_rx)][l].y); + // rx_tmp.x += (tx.x * desc->ch[ii+(j*desc->nb_rx)][l].x) - (tx.y * desc->ch[ii+(j*desc->nb_rx)][l].y); + // rx_tmp.y += (tx.y * desc->ch[ii+(j*desc->nb_rx)][l].x) + (tx.x * desc->ch[ii+(j*desc->nb_rx)][l].y); + rx_tmp128_1 = _mm_mul_pd(tx128_re,ch128_x); + rx_tmp128_2 = _mm_mul_pd(tx128_re,ch128_y); + rx_tmp128_3 = _mm_mul_pd(tx128_im,ch128_x); + rx_tmp128_4 = _mm_mul_pd(tx128_im,ch128_y); + rx_tmp128_re = _mm_sub_pd(rx_tmp128_1,rx_tmp128_4); + rx_tmp128_im = _mm_add_pd(rx_tmp128_2,rx_tmp128_3); + rx_tmp128_re_f = _mm_add_pd(rx_tmp128_re_f,rx_tmp128_re); + rx_tmp128_im_f = _mm_add_pd(rx_tmp128_im_f,rx_tmp128_im); + } //l + } // j + + //rx_sig_re[ii][i+dd] = rx_tmp.x*path_loss; + //rx_sig_im[ii][i+dd] = rx_tmp.y*path_loss; + rx_tmp128_re_f = _mm_mul_pd(rx_tmp128_re_f,pathloss128); + rx_tmp128_im_f = _mm_mul_pd(rx_tmp128_im_f,pathloss128); + _mm_storeu_pd(&rx_sig_re[ii][2*i+dd],rx_tmp128_re_f); // max index: length-dd -1 + dd = length -1 + _mm_storeu_pd(&rx_sig_im[ii][2*i+dd],rx_tmp128_im_f); + /* + if ((ii==0)&&((i%32)==0)) { + printf("%p %p %f,%f => %e,%e\n",rx_sig_re[ii],rx_sig_im[ii],rx_tmp.x,rx_tmp.y,rx_sig_re[ii][i-dd],rx_sig_im[ii][i-dd]); + } + */ + //rx_sig_re[ii][i] = sqrt(.5)*(tx_sig_re[0][i] + tx_sig_re[1][i]); + //rx_sig_im[ii][i] = sqrt(.5)*(tx_sig_im[0][i] + tx_sig_im[1][i]); + + } // ii + } // i + + stop_meas(&desc->convolution); + +} + +#else +void multipath_channel(channel_desc_t *desc, + double **tx_sig_re, + double **tx_sig_im, + double **rx_sig_re, + double **rx_sig_im, + uint32_t length, + uint8_t keep_channel) +{ + + int i,ii,j,l; + struct complex rx_tmp,tx; + + double path_loss = pow(10,desc->path_loss_dB/20); + int dd; + dd = abs(desc->channel_offset); + +#ifdef DEBUG_CH + printf("[CHANNEL] keep = %d : path_loss = %g (%f), nb_rx %d, nb_tx %d, dd %d, len %d \n",keep_channel,path_loss,desc->path_loss_dB,desc->nb_rx,desc->nb_tx,dd,desc->channel_length); +#endif + + if (keep_channel) { + // do nothing - keep channel + } else { + random_channel(desc,0); + } + +#ifdef DEBUG_CH + + for (l = 0; l<(int)desc->channel_length; l++) { + printf("%p (%f,%f) ",desc->ch[0],desc->ch[0][l].x,desc->ch[0][l].y); + } + + printf("\n"); +#endif + + for (i=0; i<((int)length-dd); i++) { + for (ii=0; iinb_rx; ii++) { + rx_tmp.x = 0; + rx_tmp.y = 0; + + for (j=0; jnb_tx; j++) { + for (l = 0; l<(int)desc->channel_length; l++) { + if ((i>=0) && (i-l)>=0) { + tx.x = tx_sig_re[j][i-l]; + tx.y = tx_sig_im[j][i-l]; + } else { + tx.x =0; + tx.y =0; + } + + rx_tmp.x += (tx.x * desc->ch[ii+(j*desc->nb_rx)][l].x) - (tx.y * desc->ch[ii+(j*desc->nb_rx)][l].y); + rx_tmp.y += (tx.y * desc->ch[ii+(j*desc->nb_rx)][l].x) + (tx.x * desc->ch[ii+(j*desc->nb_rx)][l].y); + } //l + } // j + + rx_sig_re[ii][i+dd] = rx_tmp.x*path_loss; + rx_sig_im[ii][i+dd] = rx_tmp.y*path_loss; + /* + if ((ii==0)&&((i%32)==0)) { + printf("%p %p %f,%f => %e,%e\n",rx_sig_re[ii],rx_sig_im[ii],rx_tmp.x,rx_tmp.y,rx_sig_re[ii][i-dd],rx_sig_im[ii][i-dd]); + } + */ + //rx_sig_re[ii][i] = sqrt(.5)*(tx_sig_re[0][i] + tx_sig_re[1][i]); + //rx_sig_im[ii][i] = sqrt(.5)*(tx_sig_im[0][i] + tx_sig_im[1][i]); + + } // ii + } // i +} +#endif + + diff --git a/openair2/COMMON/as_message.h b/openair2/COMMON/as_message.h index d7f35ab568..ae761b206a 100644 --- a/openair2/COMMON/as_message.h +++ b/openair2/COMMON/as_message.h @@ -168,18 +168,18 @@ typedef enum core_network_s { /* SAE Temporary Mobile Subscriber Identity */ typedef struct as_stmsi_s { - UInt8_t MMEcode; /* MME code that allocated the GUTI */ - UInt32_t m_tmsi; /* M-Temporary Mobile Subscriber Identity */ + uint8_t MMEcode; /* MME code that allocated the GUTI */ + uint32_t m_tmsi; /* M-Temporary Mobile Subscriber Identity */ } as_stmsi_t; /* Dedicated NAS information */ typedef struct as_nas_info_s { - UInt32_t length; /* Length of the NAS information data */ + uint32_t length; /* Length of the NAS information data */ Byte_t* data; /* Dedicated NAS information data container */ } as_nas_info_t; /* Radio Access Bearer identity */ -typedef UInt8_t as_rab_id_t; +typedef uint8_t as_rab_id_t; /****************************************************************************/ /************************ G L O B A L T Y P E S ************************/ @@ -235,12 +235,12 @@ typedef struct cell_info_req_s { * is selected to camp on. */ typedef struct cell_info_cnf_s { - UInt8_t errCode; /* Error code */ + uint8_t errCode; /* Error code */ ci_t cellID; /* Identity of the cell serving the selected PLMN */ tac_t tac; /* Code of the tracking area the cell belongs to */ AcT_t rat; /* Radio access technology supported by the cell */ - UInt8_t rsrq; /* Reference signal received quality */ - UInt8_t rsrp; /* Reference signal received power */ + uint8_t rsrq; /* Reference signal received quality */ + uint8_t rsrp; /* Reference signal received power */ } cell_info_cnf_t; /* @@ -273,7 +273,7 @@ typedef enum paging_cause_s { */ typedef struct paging_req_s { as_stmsi_t s_tmsi; /* UE identity */ - UInt8_t CN_domain; /* Core network domain */ + uint8_t CN_domain; /* Core network domain */ } paging_req_t; /* @@ -328,7 +328,7 @@ typedef struct nas_establish_req_s { * AS transfers the initial NAS message to the NAS. */ typedef struct nas_establish_ind_s { - UInt32_t UEid; /* UE lower layer identifier */ + uint32_t UEid; /* UE lower layer identifier */ tac_t tac; /* Code of the tracking area the initiating * UE belongs to */ as_cause_t asCause; /* Establishment cause */ @@ -341,11 +341,11 @@ typedef struct nas_establish_ind_s { * the UE. */ typedef struct nas_establish_rsp_s { - UInt32_t UEid; /* UE lower layer identifier */ + uint32_t UEid; /* UE lower layer identifier */ as_stmsi_t s_tmsi; /* UE identity */ nas_error_code_t errCode; /* Transaction status */ as_nas_info_t nasMsg; /* NAS message to transfer */ - UInt32_t nas_ul_count; /* UL NAS COUNT */ + uint32_t nas_ul_count; /* UL NAS COUNT */ uint16_t selected_encryption_algorithm; uint16_t selected_integrity_algorithm; } nas_establish_rsp_t; @@ -355,10 +355,10 @@ typedef struct nas_establish_rsp_s { * AS transfers the initial answer message to the NAS. */ typedef struct nas_establish_cnf_s { - UInt32_t UEid; /* UE lower layer identifier */ + uint32_t UEid; /* UE lower layer identifier */ nas_error_code_t errCode; /* Transaction status */ as_nas_info_t nasMsg; /* NAS message to transfer */ - UInt32_t ul_nas_count; + uint32_t ul_nas_count; uint16_t selected_encryption_algorithm; uint16_t selected_integrity_algorithm; } nas_establish_cnf_t; @@ -380,7 +380,7 @@ typedef enum release_cause_s { * NAS requests the termination of the connection with the UE. */ typedef struct nas_release_req_s { - UInt32_t UEid; /* UE lower layer identifier */ + uint32_t UEid; /* UE lower layer identifier */ as_stmsi_t s_tmsi; /* UE identity */ release_cause_t cause; /* Release cause */ } nas_release_req_t; @@ -405,7 +405,7 @@ typedef struct nas_release_ind_s { * operates at the network side. */ typedef struct ul_info_transfer_req_s { - UInt32_t UEid; /* UE lower layer identifier */ + uint32_t UEid; /* UE lower layer identifier */ as_stmsi_t s_tmsi; /* UE identity */ as_nas_info_t nasMsg; /* Uplink NAS message */ } ul_info_transfer_req_t; @@ -416,7 +416,7 @@ typedef struct ul_info_transfer_req_s { * successfully sent to the network or not. */ typedef struct ul_info_transfer_cnf_s { - UInt32_t UEid; /* UE lower layer identifier */ + uint32_t UEid; /* UE lower layer identifier */ nas_error_code_t errCode; /* Transaction status */ } ul_info_transfer_cnf_t; @@ -426,7 +426,7 @@ typedef struct ul_info_transfer_cnf_s { * at the network side. */ typedef struct ul_info_transfer_ind_s { - UInt32_t UEid; /* UE lower layer identifier */ + uint32_t UEid; /* UE lower layer identifier */ as_nas_info_t nasMsg; /* Uplink NAS message */ } ul_info_transfer_ind_t; @@ -530,7 +530,7 @@ typedef struct rab_release_ind_s { * -------------------------------------------------------------------------- */ typedef struct as_message_s { - UInt16_t msgID; + uint16_t msgID; union { broadcast_info_ind_t broadcast_info_ind; cell_info_req_t cell_info_req; diff --git a/openair2/COMMON/commonDef.h b/openair2/COMMON/commonDef.h index 8f719e377b..47fef519b5 100644 --- a/openair2/COMMON/commonDef.h +++ b/openair2/COMMON/commonDef.h @@ -49,6 +49,9 @@ Description Contains global common definitions #include #include + +#define NAS_UE_ID_FMT "0x%06x" + /****************************************************************************/ /********************* G L O B A L C O N S T A N T S *******************/ /****************************************************************************/ @@ -80,17 +83,8 @@ Description Contains global common definitions ----------------------------------------------------------------------------- */ typedef int8_t SByte_t; /* 8 bit signed integer */ -typedef int8_t Int8_t; /* 8 bit signed integer */ -typedef int16_t Int16_t; /* 16 bit signed integer */ -typedef int32_t Int32_t; /* 32 bit signed integer */ -typedef int64_t Int64_t; /* 64 bit signed integer */ - - typedef uint8_t Byte_t; /* 8 bit unsigned integer */ -typedef uint8_t UInt8_t; /* 8 bit unsigned integer */ -typedef uint16_t UInt16_t; /* 16 bit unsigned integer */ -typedef uint32_t UInt32_t; /* 32 bit unsigned integer */ -typedef uint64_t UInt64_t; /* 64 bit unsigned integer */ + /* ----------------------------------------------------------------------------- @@ -98,12 +92,12 @@ typedef uint64_t UInt64_t; /* 64 bit unsigned integer */ ----------------------------------------------------------------------------- */ -typedef UInt8_t Stat_t; /* Registration status */ -typedef UInt16_t lac_t; /* Location Area Code */ -typedef UInt8_t rac_t; /* Routing Area Code */ -typedef UInt16_t tac_t; /* Tracking Area Code */ -typedef UInt32_t ci_t; /* Cell Identifier */ -typedef UInt8_t AcT_t; /* Access Technology */ +typedef uint8_t Stat_t; /* Registration status */ +typedef uint16_t lac_t; /* Location Area Code */ +typedef uint8_t rac_t; /* Routing Area Code */ +typedef uint16_t tac_t; /* Tracking Area Code */ +typedef uint32_t ci_t; /* Cell Identifier */ +typedef uint8_t AcT_t; /* Access Technology */ /* * International Mobile Subscriber Identity @@ -244,8 +238,8 @@ typedef struct { */ typedef struct { plmn_t plmn; /* + */ - UInt16_t MMEgid; /* MME group identifier */ - UInt8_t MMEcode; /* MME code */ + uint16_t MMEgid; /* MME group identifier */ + uint8_t MMEcode; /* MME code */ } gummei_t; /* @@ -253,7 +247,7 @@ typedef struct { */ typedef struct { gummei_t gummei; /* Globally Unique MME Identity */ - UInt32_t m_tmsi; /* M-Temporary Mobile Subscriber Identity */ + uint32_t m_tmsi; /* M-Temporary Mobile Subscriber Identity */ } GUTI_t; #define GUTI2STR(GuTi_PtR, GuTi_StR, MaXlEn) \ {\ diff --git a/openair2/COMMON/gtpv1_u_messages_def.h b/openair2/COMMON/gtpv1_u_messages_def.h index afae95313a..3ec9be54e3 100755 --- a/openair2/COMMON/gtpv1_u_messages_def.h +++ b/openair2/COMMON/gtpv1_u_messages_def.h @@ -27,8 +27,6 @@ *******************************************************************************/ -MESSAGE_DEF(GTPV1U_ENB_CREATE_TUNNEL_REQ, MESSAGE_PRIORITY_MAX, gtpv1u_enb_create_tunnel_req_t, Gtpv1uCreateTunnelReq) -MESSAGE_DEF(GTPV1U_ENB_CREATE_TUNNEL_RESP, MESSAGE_PRIORITY_MAX, gtpv1u_enb_create_tunnel_resp_t, Gtpv1uCreateTunnelResp) MESSAGE_DEF(GTPV1U_ENB_UPDATE_TUNNEL_REQ, MESSAGE_PRIORITY_MED, gtpv1u_enb_update_tunnel_req_t, Gtpv1uUpdateTunnelReq) MESSAGE_DEF(GTPV1U_ENB_UPDATE_TUNNEL_RESP, MESSAGE_PRIORITY_MED, gtpv1u_enb_update_tunnel_resp_t, Gtpv1uUpdateTunnelResp) MESSAGE_DEF(GTPV1U_ENB_DELETE_TUNNEL_REQ, MESSAGE_PRIORITY_MED, gtpv1u_enb_delete_tunnel_req_t, Gtpv1uDeleteTunnelReq) diff --git a/openair2/COMMON/gtpv1_u_messages_types.h b/openair2/COMMON/gtpv1_u_messages_types.h index d1c473da14..9c385ae3f6 100755 --- a/openair2/COMMON/gtpv1_u_messages_types.h +++ b/openair2/COMMON/gtpv1_u_messages_types.h @@ -30,10 +30,11 @@ #ifndef GTPV1_U_MESSAGES_TYPES_H_ #define GTPV1_U_MESSAGES_TYPES_H_ +#include "asn1_constants.h" + + #define GTPV1U_MAX_BEARERS_PER_UE max_val_DRB_Identity -#define GTPV1U_ENB_CREATE_TUNNEL_REQ(mSGpTR) (mSGpTR)->ittiMsg.Gtpv1uCreateTunnelReq -#define GTPV1U_ENB_CREATE_TUNNEL_RESP(mSGpTR) (mSGpTR)->ittiMsg.Gtpv1uCreateTunnelResp #define GTPV1U_ENB_UPDATE_TUNNEL_REQ(mSGpTR) (mSGpTR)->ittiMsg.Gtpv1uUpdateTunnelReq #define GTPV1U_ENB_UPDATE_TUNNEL_RESP(mSGpTR) (mSGpTR)->ittiMsg.Gtpv1uUpdateTunnelResp #define GTPV1U_ENB_DELETE_TUNNEL_REQ(mSGpTR) (mSGpTR)->ittiMsg.Gtpv1uDeleteTunnelReq diff --git a/openair2/COMMON/mac_messages_types.h b/openair2/COMMON/mac_messages_types.h index 9b8bac373f..e0eb258104 100644 --- a/openair2/COMMON/mac_messages_types.h +++ b/openair2/COMMON/mac_messages_types.h @@ -53,9 +53,9 @@ #define RRC_MAC_MCCH_DATA_IND(mSGpTR) (mSGpTR)->ittiMsg.rrc_mac_mcch_data_ind // Some constants from "LAYER2/MAC/defs.h" -#define BCCH_SDU_SIZE (128) -#define CCCH_SDU_SIZE (128) -#define MCCH_SDU_SIZE (128) +#define BCCH_SDU_SIZE (512) +#define CCCH_SDU_SIZE (512) +#define MCCH_SDU_SIZE (512) //-------------------------------------------------------------------------------------------// // Messages between RRC and MAC layers diff --git a/openair2/COMMON/messages_def.h b/openair2/COMMON/messages_def.h index 21f1845f1d..86297be314 100644 --- a/openair2/COMMON/messages_def.h +++ b/openair2/COMMON/messages_def.h @@ -38,7 +38,9 @@ #include "pdcp_messages_def.h" #include "rrc_messages_def.h" #include "nas_messages_def.h" +#if ENABLE_RAL #include "ral_messages_def.h" +#endif #include "s1ap_messages_def.h" #include "x2ap_messages_def.h" #include "sctp_messages_def.h" diff --git a/openair2/COMMON/messages_types.h b/openair2/COMMON/messages_types.h index 5a60f86b03..669c2e935a 100644 --- a/openair2/COMMON/messages_types.h +++ b/openair2/COMMON/messages_types.h @@ -46,7 +46,9 @@ #include "pdcp_messages_types.h" #include "rrc_messages_types.h" #include "nas_messages_types.h" +#if ENABLE_RAL #include "ral_messages_types.h" +#endif #include "s1ap_messages_types.h" #include "x2ap_messages_types.h" #include "sctp_messages_types.h" diff --git a/openair2/COMMON/phy_messages_types.h b/openair2/COMMON/phy_messages_types.h index 0a35c7ce91..6dd647a17c 100644 --- a/openair2/COMMON/phy_messages_types.h +++ b/openair2/COMMON/phy_messages_types.h @@ -38,7 +38,9 @@ #define PHY_MESSAGES_TYPES_H_ #include "PHY/impl_defs_lte.h" -#include "ral_messages_types.h" +#if ENABLE_RAL +#include "ral_messages_types.h" //LG: MIH moved from repository/trunk to repository/extras +#endif //-------------------------------------------------------------------------------------------// // Defines to access message fields. #define PHY_CONFIGURATION_REQ(mSGpTR) (mSGpTR)->ittiMsg.phy_configuration_req @@ -93,9 +95,9 @@ typedef struct PhyDeactivateReq_s { } PhyDeactivateReq; typedef struct PhyFindCellReq_s { - //# if defined(ENABLE_RAL) +# if ENABLE_RAL ral_transaction_id_t transaction_id; - //# endif +# endif Earfcn earfcn_start; Earfcn earfcn_end; } PhyFindCellReq; @@ -104,28 +106,34 @@ typedef struct PhyFindNextCellReq_s { } PhyFindNextCellReq; typedef struct PhyMeasThresholdReq_s { +# if ENABLE_RAL ral_transaction_id_t transaction_id; ral_link_cfg_param_t cfg_param; +#endif } PhyMeasThresholdReq; typedef struct PhyMeasReportInd_s { +# if ENABLE_RAL ral_threshold_t threshold; ral_link_param_t link_param; +#endif } PhyMeasReportInd; // UE: PHY -> RRC messages typedef struct PhyFindCellInd_s { - //# if defined(ENABLE_RAL) +# if ENABLE_RAL ral_transaction_id_t transaction_id; - //# endif +# endif uint8_t cell_nb; CellInfo cells[MAX_REPORTED_CELL]; } PhyFindCellInd; typedef struct PhyMeasThresholdConf_s { +# if ENABLE_RAL ral_transaction_id_t transaction_id; ral_status_t status; uint8_t num_link_cfg_params; ral_link_cfg_status_t cfg_status[RAL_MAX_LINK_CFG_PARAMS]; +#endif } PhyMeasThresholdConf; #endif /* PHY_MESSAGES_TYPES_H_ */ diff --git a/openair2/COMMON/s1ap_messages_types.h b/openair2/COMMON/s1ap_messages_types.h index 1d65155baf..7849e418d1 100644 --- a/openair2/COMMON/s1ap_messages_types.h +++ b/openair2/COMMON/s1ap_messages_types.h @@ -317,6 +317,10 @@ typedef struct s1ap_register_enb_req_s { uint8_t nb_mme; /* List of MME to connect to */ net_ip_address_t mme_ip_address[S1AP_MAX_NB_MME_IP_ADDRESS]; + + /* Number of SCTP streams used for a mme association */ + uint16_t sctp_in_streams; + uint16_t sctp_out_streams; } s1ap_register_enb_req_t; //-------------------------------------------------------------------------------------------// diff --git a/openair2/COMMON/sctp_messages_types.h b/openair2/COMMON/sctp_messages_types.h index 5a9279628e..0b365bd38b 100644 --- a/openair2/COMMON/sctp_messages_types.h +++ b/openair2/COMMON/sctp_messages_types.h @@ -54,6 +54,10 @@ typedef struct sctp_new_association_req_s { /* Payload Protocol Identifier to use */ uint32_t ppid; + /* Number of streams used for this association */ + uint16_t in_streams; + uint16_t out_streams; + /* Local address to bind to */ net_ip_address_t local_address; /* Remote address to connect to */ diff --git a/openair2/COMMON/tasks_def.h b/openair2/COMMON/tasks_def.h index e9ba7e10c6..1da78c6131 100644 --- a/openair2/COMMON/tasks_def.h +++ b/openair2/COMMON/tasks_def.h @@ -77,3 +77,6 @@ TASK_DEF(TASK_RRC_UE, TASK_PRIORITY_MED, 200) TASK_DEF(TASK_NAS_UE, TASK_PRIORITY_MED, 200) TASK_DEF(TASK_RAL_UE, TASK_PRIORITY_MED, 200) +//MESSAGE GENERATOR TASK +TASK_DEF(TASK_MSC, TASK_PRIORITY_MED, 200) + diff --git a/openair2/ENB_APP/enb_app.c b/openair2/ENB_APP/enb_app.c index b4eb87e8f3..4c55b05070 100644 --- a/openair2/ENB_APP/enb_app.c +++ b/openair2/ENB_APP/enb_app.c @@ -245,6 +245,10 @@ static uint32_t eNB_app_register(uint32_t enb_id_start, uint32_t enb_id_end, con sizeof(s1ap_register_eNB->mme_ip_address[0].ipv6_address)); } + s1ap_register_eNB->sctp_in_streams = enb_properties->properties[enb_id]->sctp_in_streams; + s1ap_register_eNB->sctp_out_streams = enb_properties->properties[enb_id]->sctp_out_streams; + + s1ap_register_eNB->enb_ip_address.ipv6 = 0; s1ap_register_eNB->enb_ip_address.ipv4 = 1; addr.s_addr = enb_properties->properties[enb_id]->enb_ipv4_address_for_S1_MME; diff --git a/openair2/ENB_APP/enb_config.c b/openair2/ENB_APP/enb_config.c index 531c2d7c80..b5eeb63e09 100755 --- a/openair2/ENB_APP/enb_config.c +++ b/openair2/ENB_APP/enb_config.c @@ -56,6 +56,7 @@ # include "sctp_eNB_task.h" # endif #endif +#include "sctp_default_values.h" #include "SystemInformationBlockType2.h" #include "LAYER2/MAC/extern.h" @@ -158,6 +159,10 @@ #define ENB_CONFIG_STRING_MME_IP_ADDRESS_ACTIVE "active" #define ENB_CONFIG_STRING_MME_IP_ADDRESS_PREFERENCE "preference" +#define ENB_CONFIG_STRING_SCTP_CONFIG "SCTP" +#define ENB_CONFIG_STRING_SCTP_INSTREAMS "SCTP_INSTREAMS" +#define ENB_CONFIG_STRING_SCTP_OUTSTREAMS "SCTP_OUTSTREAMS" + #define ENB_CONFIG_STRING_NETWORK_INTERFACES_CONFIG "NETWORK_INTERFACES" #define ENB_CONFIG_STRING_ENB_INTERFACE_NAME_FOR_S1_MME "ENB_INTERFACE_NAME_FOR_S1_MME" #define ENB_CONFIG_STRING_ENB_IPV4_ADDRESS_FOR_S1_MME "ENB_IPV4_ADDRESS_FOR_S1_MME" @@ -166,16 +171,16 @@ #define ENB_CONFIG_STRING_ENB_PORT_FOR_S1U "ENB_PORT_FOR_S1U" -#define ENB_CONFIG_STRING_ASN1_VERBOSITY "Asn1_verbosity" -#define ENB_CONFIG_STRING_ASN1_VERBOSITY_NONE "none" -#define ENB_CONFIG_STRING_ASN1_VERBOSITY_ANNOYING "annoying" -#define ENB_CONFIG_STRING_ASN1_VERBOSITY_INFO "info" +#define ENB_CONFIG_STRING_ASN1_VERBOSITY "Asn1_verbosity" +#define ENB_CONFIG_STRING_ASN1_VERBOSITY_NONE "none" +#define ENB_CONFIG_STRING_ASN1_VERBOSITY_ANNOYING "annoying" +#define ENB_CONFIG_STRING_ASN1_VERBOSITY_INFO "info" // OTG config per ENB-UE DL -#define ENB_CONF_STRING_OTG_CONFIG "otg_config" -#define ENB_CONF_STRING_OTG_UE_ID "ue_id" -#define ENB_CONF_STRING_OTG_APP_TYPE "app_type" -#define ENB_CONF_STRING_OTG_BG_TRAFFIC "bg_traffic" +#define ENB_CONF_STRING_OTG_CONFIG "otg_config" +#define ENB_CONF_STRING_OTG_UE_ID "ue_id" +#define ENB_CONF_STRING_OTG_APP_TYPE "app_type" +#define ENB_CONF_STRING_OTG_BG_TRAFFIC "bg_traffic" // per eNB configuration #define ENB_CONFIG_STRING_LOG_CONFIG "log_config" @@ -551,6 +556,8 @@ const Enb_properties_array_t *enb_config_init(char* lib_config_file_name_pP) libconfig_int srb1_poll_byte = 0; libconfig_int srb1_max_retx_threshold = 0; + libconfig_int my_int; + char* ipv4 = NULL; char* ipv6 = NULL; char* active = NULL; @@ -593,9 +600,9 @@ const Enb_properties_array_t *enb_config_init(char* lib_config_file_name_pP) config_init(&cfg); - if(lib_config_file_name_pP != NULL) { + if (lib_config_file_name_pP != NULL) { /* Read the file. If there is an error, report it and exit. */ - if(! config_read_file(&cfg, lib_config_file_name_pP)) { + if (! config_read_file(&cfg, lib_config_file_name_pP)) { config_destroy(&cfg); AssertFatal (0, "Failed to parse eNB configuration file %s!\n", lib_config_file_name_pP); } @@ -606,7 +613,7 @@ const Enb_properties_array_t *enb_config_init(char* lib_config_file_name_pP) #if defined(ENABLE_ITTI) && defined(ENABLE_USE_MME) - if( (config_lookup_string( &cfg, ENB_CONFIG_STRING_ASN1_VERBOSITY, (const char **)&astring) )) { + if ( (config_lookup_string( &cfg, ENB_CONFIG_STRING_ASN1_VERBOSITY, (const char **)&astring) )) { if (strcasecmp(astring , ENB_CONFIG_STRING_ASN1_VERBOSITY_NONE) == 0) { asn_debug = 0; asn1_xer_print = 0; @@ -626,7 +633,7 @@ const Enb_properties_array_t *enb_config_init(char* lib_config_file_name_pP) // Get list of active eNBs, (only these will be configured) setting = config_lookup(&cfg, ENB_CONFIG_STRING_ACTIVE_ENBS); - if(setting != NULL) { + if (setting != NULL) { num_enbs = config_setting_length(setting); for (i = 0; i < num_enbs; i++) { @@ -643,7 +650,7 @@ const Enb_properties_array_t *enb_config_init(char* lib_config_file_name_pP) /* Output a list of all eNBs. */ setting = config_lookup(&cfg, ENB_CONFIG_STRING_ENB_LIST); - if(setting != NULL) { + if (setting != NULL) { enb_properties_index = 0; parse_errors = 0; num_enbs = config_setting_length(setting); @@ -651,7 +658,7 @@ const Enb_properties_array_t *enb_config_init(char* lib_config_file_name_pP) for (i = 0; i < num_enbs; i++) { setting_enb = config_setting_get_elem(setting, i); - if(! config_setting_lookup_int(setting_enb, ENB_CONFIG_STRING_ENB_ID, &enb_id)) { + if (! config_setting_lookup_int(setting_enb, ENB_CONFIG_STRING_ENB_ID, &enb_id)) { /* Calculate a default eNB ID */ # if defined(ENABLE_USE_MME) uint32_t hash; @@ -663,7 +670,7 @@ const Enb_properties_array_t *enb_config_init(char* lib_config_file_name_pP) # endif } - if( !( config_setting_lookup_string(setting_enb, ENB_CONFIG_STRING_CELL_TYPE, &cell_type) + if ( !( config_setting_lookup_string(setting_enb, ENB_CONFIG_STRING_CELL_TYPE, &cell_type) && config_setting_lookup_string(setting_enb, ENB_CONFIG_STRING_ENB_NAME, &enb_name) && config_setting_lookup_string(setting_enb, ENB_CONFIG_STRING_TRACKING_AREA_CODE, &tac) && config_setting_lookup_string(setting_enb, ENB_CONFIG_STRING_MOBILE_COUNTRY_CODE, &mcc) @@ -712,7 +719,7 @@ const Enb_properties_array_t *enb_config_init(char* lib_config_file_name_pP) setting_component_carriers = config_setting_get_member (setting_enb, ENB_CONFIG_STRING_COMPONENT_CARRIERS); enb_properties.properties[enb_properties_index]->nb_cc = 0; - if(setting_component_carriers != NULL) { + if (setting_component_carriers != NULL) { num_component_carriers = config_setting_length(setting_component_carriers); printf("num component carrier %d \n", num_component_carriers); @@ -722,7 +729,7 @@ const Enb_properties_array_t *enb_config_init(char* lib_config_file_name_pP) component_carrier = config_setting_get_elem(setting_component_carriers, j); //printf("Component carrier %d\n",component_carrier); - if(!(config_setting_lookup_string(component_carrier, ENB_CONFIG_STRING_FRAME_TYPE, &frame_type) + if (!(config_setting_lookup_string(component_carrier, ENB_CONFIG_STRING_FRAME_TYPE, &frame_type) && config_setting_lookup_int(component_carrier, ENB_CONFIG_STRING_TDD_CONFIG, &tdd_config) && config_setting_lookup_int(component_carrier, ENB_CONFIG_STRING_TDD_CONFIG_S, &tdd_config_s) && config_setting_lookup_string(component_carrier, ENB_CONFIG_STRING_PREFIX_TYPE, &prefix_type) @@ -1030,8 +1037,7 @@ const Enb_properties_array_t *enb_config_init(char* lib_config_file_name_pP) enb_properties.properties[enb_properties_index]->pusch_hoppingMode[j] = PUSCH_ConfigCommon__pusch_ConfigBasic__hoppingMode_interSubFrame; } else if (strcmp(pusch_hoppingMode,"intraAndInterSubFrame")==0) { enb_properties.properties[enb_properties_index]->pusch_hoppingMode[j] = PUSCH_ConfigCommon__pusch_ConfigBasic__hoppingMode_intraAndInterSubFrame; - } - else + } else AssertError (0, parse_errors ++, "Failed to parse eNB configuration file %s, enb %d unknown value \"%s\" for pusch_hoppingMode choice: interSubframe,intraAndInterSubframe!\n", lib_config_file_name_pP, i, pusch_hoppingMode); @@ -1051,8 +1057,7 @@ const Enb_properties_array_t *enb_config_init(char* lib_config_file_name_pP) enb_properties.properties[enb_properties_index]->pusch_enable64QAM[j] = TRUE; } else if (strcmp(pusch_enable64QAM, "DISABLE") == 0) { enb_properties.properties[enb_properties_index]->pusch_enable64QAM[j] = FALSE; - } - else + } else AssertError (0, parse_errors ++, "Failed to parse eNB configuration file %s, enb %d unknown value \"%s\" for pusch_enable64QAM choice: ENABLE,DISABLE!\n", lib_config_file_name_pP, i, pusch_enable64QAM); @@ -1065,8 +1070,7 @@ const Enb_properties_array_t *enb_config_init(char* lib_config_file_name_pP) enb_properties.properties[enb_properties_index]->pusch_groupHoppingEnabled[j] = TRUE; } else if (strcmp(pusch_groupHoppingEnabled, "DISABLE") == 0) { enb_properties.properties[enb_properties_index]->pusch_groupHoppingEnabled[j] = FALSE; - } - else + } else AssertError (0, parse_errors ++, "Failed to parse eNB configuration file %s, enb %d unknown value \"%s\" for pusch_groupHoppingEnabled choice: ENABLE,DISABLE!\n", lib_config_file_name_pP, i, pusch_groupHoppingEnabled); @@ -1110,11 +1114,11 @@ const Enb_properties_array_t *enb_config_init(char* lib_config_file_name_pP) if (strcmp(phich_resource,"ONESIXTH")==0) { enb_properties.properties[enb_properties_index]->phich_resource[j] = oneSixth; - } else if (strcmp(phich_duration,"HALF")==0) { + } else if (strcmp(phich_resource,"HALF")==0) { enb_properties.properties[enb_properties_index]->phich_resource[j] = half; - } else if (strcmp(phich_duration,"ONE")==0) { + } else if (strcmp(phich_resource,"ONE")==0) { enb_properties.properties[enb_properties_index]->phich_resource[j] = one; - } else if (strcmp(phich_duration,"TWO")==0) { + } else if (strcmp(phich_resource,"TWO")==0) { enb_properties.properties[enb_properties_index]->phich_resource[j] = two; } else AssertError (0, parse_errors ++, @@ -1125,8 +1129,7 @@ const Enb_properties_array_t *enb_config_init(char* lib_config_file_name_pP) enb_properties.properties[enb_properties_index]->srs_enable[j] = TRUE; } else if (strcmp(srs_enable, "DISABLE") == 0) { enb_properties.properties[enb_properties_index]->srs_enable[j] = FALSE; - } - else + } else AssertError (0, parse_errors ++, "Failed to parse eNB configuration file %s, enb %d unknown value \"%s\" for srs_BandwidthConfig choice: ENABLE,DISABLE !\n", lib_config_file_name_pP, i, srs_enable); @@ -1270,8 +1273,7 @@ const Enb_properties_array_t *enb_config_init(char* lib_config_file_name_pP) enb_properties.properties[enb_properties_index]->pucch_deltaF_Format2b[j] = DeltaFList_PUCCH__deltaF_PUCCH_Format2b_deltaF0; } else if (strcmp(pucch_deltaF_Format2b,"deltaF2")==0) { enb_properties.properties[enb_properties_index]->pucch_deltaF_Format2b[j] = DeltaFList_PUCCH__deltaF_PUCCH_Format2b_deltaF2; - } - else + } else AssertError (0, parse_errors ++, "Failed to parse eNB configuration file %s, enb %d unknown value \"%s\" for pucch_deltaF_Format2b choice: deltaF_2,dltaF0,deltaF2!\n", lib_config_file_name_pP, i, pucch_deltaF_Format2b); @@ -1358,8 +1360,7 @@ const Enb_properties_array_t *enb_config_init(char* lib_config_file_name_pP) else if (strcmp(rach_messagePowerOffsetGroupB,"dB18")==0) { enb_properties.properties[enb_properties_index]->rach_messagePowerOffsetGroupB[j] = RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__messagePowerOffsetGroupB_dB18; - } - else + } else AssertError (0, parse_errors ++, "Failed to parse eNB configuration file %s, enb %d unknown value \"%s\" for rach_messagePowerOffsetGroupB choice: minusinfinity,dB0,dB5,dB8,dB10,dB12,dB15,dB18!\n", lib_config_file_name_pP, i, rach_messagePowerOffsetGroupB); @@ -1777,131 +1778,313 @@ const Enb_properties_array_t *enb_config_init(char* lib_config_file_name_pP) } setting_srb1 = config_setting_get_member (setting_enb, ENB_CONFIG_STRING_SRB1); + if (setting_srb1 != NULL) { if (!(config_setting_lookup_int(setting_srb1, ENB_CONFIG_STRING_SRB1_TIMER_POLL_RETRANSMIT, &srb1_timer_poll_retransmit) - && config_setting_lookup_int(setting_srb1, ENB_CONFIG_STRING_SRB1_TIMER_REORDERING, &srb1_timer_reordering) - && config_setting_lookup_int(setting_srb1, ENB_CONFIG_STRING_SRB1_TIMER_STATUS_PROHIBIT, &srb1_timer_status_prohibit) - && config_setting_lookup_int(setting_srb1, ENB_CONFIG_STRING_SRB1_MAX_RETX_THRESHOLD, &srb1_max_retx_threshold) - && config_setting_lookup_int(setting_srb1, ENB_CONFIG_STRING_SRB1_POLL_PDU, &srb1_poll_pdu) - && config_setting_lookup_int(setting_srb1, ENB_CONFIG_STRING_SRB1_POLL_BYTE, &srb1_poll_byte))) - AssertError (0, parse_errors ++, - "Failed to parse eNB configuration file %s, enb %d timer_poll_retransmit, timer_reordering, ", - "timer_status_prohibit, poll_pdu, poll_byte, max_retx_threshold !\n", - lib_config_file_name_pP, i); + && config_setting_lookup_int(setting_srb1, ENB_CONFIG_STRING_SRB1_TIMER_REORDERING, &srb1_timer_reordering) + && config_setting_lookup_int(setting_srb1, ENB_CONFIG_STRING_SRB1_TIMER_STATUS_PROHIBIT, &srb1_timer_status_prohibit) + && config_setting_lookup_int(setting_srb1, ENB_CONFIG_STRING_SRB1_MAX_RETX_THRESHOLD, &srb1_max_retx_threshold) + && config_setting_lookup_int(setting_srb1, ENB_CONFIG_STRING_SRB1_POLL_PDU, &srb1_poll_pdu) + && config_setting_lookup_int(setting_srb1, ENB_CONFIG_STRING_SRB1_POLL_BYTE, &srb1_poll_byte))) + AssertError (0, parse_errors ++, + "Failed to parse eNB configuration file %s, enb %d timer_poll_retransmit, timer_reordering, " + "timer_status_prohibit, poll_pdu, poll_byte, max_retx_threshold !\n", + lib_config_file_name_pP, i); switch (srb1_max_retx_threshold) { - case 1: enb_properties.properties[enb_properties_index]->srb1_max_retx_threshold = UL_AM_RLC__maxRetxThreshold_t1;break; - case 2: enb_properties.properties[enb_properties_index]->srb1_max_retx_threshold = UL_AM_RLC__maxRetxThreshold_t2;break; - case 3: enb_properties.properties[enb_properties_index]->srb1_max_retx_threshold = UL_AM_RLC__maxRetxThreshold_t3;break; - case 4: enb_properties.properties[enb_properties_index]->srb1_max_retx_threshold = UL_AM_RLC__maxRetxThreshold_t4;break; - case 6: enb_properties.properties[enb_properties_index]->srb1_max_retx_threshold = UL_AM_RLC__maxRetxThreshold_t6;break; - case 8: enb_properties.properties[enb_properties_index]->srb1_max_retx_threshold = UL_AM_RLC__maxRetxThreshold_t8;break; - case 16: enb_properties.properties[enb_properties_index]->srb1_max_retx_threshold = UL_AM_RLC__maxRetxThreshold_t16;break; - case 32: enb_properties.properties[enb_properties_index]->srb1_max_retx_threshold = UL_AM_RLC__maxRetxThreshold_t32;break; + case 1: + enb_properties.properties[enb_properties_index]->srb1_max_retx_threshold = UL_AM_RLC__maxRetxThreshold_t1; + break; + + case 2: + enb_properties.properties[enb_properties_index]->srb1_max_retx_threshold = UL_AM_RLC__maxRetxThreshold_t2; + break; + + case 3: + enb_properties.properties[enb_properties_index]->srb1_max_retx_threshold = UL_AM_RLC__maxRetxThreshold_t3; + break; + + case 4: + enb_properties.properties[enb_properties_index]->srb1_max_retx_threshold = UL_AM_RLC__maxRetxThreshold_t4; + break; + + case 6: + enb_properties.properties[enb_properties_index]->srb1_max_retx_threshold = UL_AM_RLC__maxRetxThreshold_t6; + break; + + case 8: + enb_properties.properties[enb_properties_index]->srb1_max_retx_threshold = UL_AM_RLC__maxRetxThreshold_t8; + break; + + case 16: + enb_properties.properties[enb_properties_index]->srb1_max_retx_threshold = UL_AM_RLC__maxRetxThreshold_t16; + break; + + case 32: + enb_properties.properties[enb_properties_index]->srb1_max_retx_threshold = UL_AM_RLC__maxRetxThreshold_t32; + break; + default: AssertError (0, parse_errors ++, - "Bad config value when parsing eNB configuration file %s, enb %d srb1_max_retx_threshold %u!\n", - lib_config_file_name_pP, i, srb1_max_retx_threshold); + "Bad config value when parsing eNB configuration file %s, enb %d srb1_max_retx_threshold %u!\n", + lib_config_file_name_pP, i, srb1_max_retx_threshold); } switch (srb1_poll_pdu) { - case 4: enb_properties.properties[enb_properties_index]->srb1_poll_pdu = PollPDU_p4;break; - case 8: enb_properties.properties[enb_properties_index]->srb1_poll_pdu = PollPDU_p8;break; - case 16: enb_properties.properties[enb_properties_index]->srb1_poll_pdu = PollPDU_p16;break; - case 32: enb_properties.properties[enb_properties_index]->srb1_poll_pdu = PollPDU_p32;break; - case 64: enb_properties.properties[enb_properties_index]->srb1_poll_pdu = PollPDU_p64;break; - case 128: enb_properties.properties[enb_properties_index]->srb1_poll_pdu = PollPDU_p128;break; - case 256: enb_properties.properties[enb_properties_index]->srb1_poll_pdu = PollPDU_p256;break; + case 4: + enb_properties.properties[enb_properties_index]->srb1_poll_pdu = PollPDU_p4; + break; + + case 8: + enb_properties.properties[enb_properties_index]->srb1_poll_pdu = PollPDU_p8; + break; + + case 16: + enb_properties.properties[enb_properties_index]->srb1_poll_pdu = PollPDU_p16; + break; + + case 32: + enb_properties.properties[enb_properties_index]->srb1_poll_pdu = PollPDU_p32; + break; + + case 64: + enb_properties.properties[enb_properties_index]->srb1_poll_pdu = PollPDU_p64; + break; + + case 128: + enb_properties.properties[enb_properties_index]->srb1_poll_pdu = PollPDU_p128; + break; + + case 256: + enb_properties.properties[enb_properties_index]->srb1_poll_pdu = PollPDU_p256; + break; + default: if (srb1_poll_pdu >= 10000) - enb_properties.properties[enb_properties_index]->srb1_poll_pdu = PollPDU_pInfinity; + enb_properties.properties[enb_properties_index]->srb1_poll_pdu = PollPDU_pInfinity; else AssertError (0, parse_errors ++, - "Bad config value when parsing eNB configuration file %s, enb %d srb1_poll_pdu %u!\n", - lib_config_file_name_pP, i, srb1_poll_pdu); + "Bad config value when parsing eNB configuration file %s, enb %d srb1_poll_pdu %u!\n", + lib_config_file_name_pP, i, srb1_poll_pdu); } enb_properties.properties[enb_properties_index]->srb1_poll_byte = srb1_poll_byte; + switch (srb1_poll_byte) { - case 25: enb_properties.properties[enb_properties_index]->srb1_poll_byte = PollByte_kB25;break; - case 50: enb_properties.properties[enb_properties_index]->srb1_poll_byte = PollByte_kB50;break; - case 75: enb_properties.properties[enb_properties_index]->srb1_poll_byte = PollByte_kB75;break; - case 100: enb_properties.properties[enb_properties_index]->srb1_poll_byte = PollByte_kB100;break; - case 125: enb_properties.properties[enb_properties_index]->srb1_poll_byte = PollByte_kB125;break; - case 250: enb_properties.properties[enb_properties_index]->srb1_poll_byte = PollByte_kB250;break; - case 375: enb_properties.properties[enb_properties_index]->srb1_poll_byte = PollByte_kB375;break; - case 500: enb_properties.properties[enb_properties_index]->srb1_poll_byte = PollByte_kB500;break; - case 750: enb_properties.properties[enb_properties_index]->srb1_poll_byte = PollByte_kB750;break; - case 1000: enb_properties.properties[enb_properties_index]->srb1_poll_byte = PollByte_kB1000;break; - case 1250: enb_properties.properties[enb_properties_index]->srb1_poll_byte = PollByte_kB1250;break; - case 1500: enb_properties.properties[enb_properties_index]->srb1_poll_byte = PollByte_kB1500;break; - case 2000: enb_properties.properties[enb_properties_index]->srb1_poll_byte = PollByte_kB2000;break; - case 3000: enb_properties.properties[enb_properties_index]->srb1_poll_byte = PollByte_kB3000;break; + case 25: + enb_properties.properties[enb_properties_index]->srb1_poll_byte = PollByte_kB25; + break; + + case 50: + enb_properties.properties[enb_properties_index]->srb1_poll_byte = PollByte_kB50; + break; + + case 75: + enb_properties.properties[enb_properties_index]->srb1_poll_byte = PollByte_kB75; + break; + + case 100: + enb_properties.properties[enb_properties_index]->srb1_poll_byte = PollByte_kB100; + break; + + case 125: + enb_properties.properties[enb_properties_index]->srb1_poll_byte = PollByte_kB125; + break; + + case 250: + enb_properties.properties[enb_properties_index]->srb1_poll_byte = PollByte_kB250; + break; + + case 375: + enb_properties.properties[enb_properties_index]->srb1_poll_byte = PollByte_kB375; + break; + + case 500: + enb_properties.properties[enb_properties_index]->srb1_poll_byte = PollByte_kB500; + break; + + case 750: + enb_properties.properties[enb_properties_index]->srb1_poll_byte = PollByte_kB750; + break; + + case 1000: + enb_properties.properties[enb_properties_index]->srb1_poll_byte = PollByte_kB1000; + break; + + case 1250: + enb_properties.properties[enb_properties_index]->srb1_poll_byte = PollByte_kB1250; + break; + + case 1500: + enb_properties.properties[enb_properties_index]->srb1_poll_byte = PollByte_kB1500; + break; + + case 2000: + enb_properties.properties[enb_properties_index]->srb1_poll_byte = PollByte_kB2000; + break; + + case 3000: + enb_properties.properties[enb_properties_index]->srb1_poll_byte = PollByte_kB3000; + break; + default: if (srb1_poll_byte >= 10000) - enb_properties.properties[enb_properties_index]->srb1_poll_byte = PollByte_kBinfinity; + enb_properties.properties[enb_properties_index]->srb1_poll_byte = PollByte_kBinfinity; else AssertError (0, parse_errors ++, - "Bad config value when parsing eNB configuration file %s, enb %d srb1_poll_byte %u!\n", - lib_config_file_name_pP, i, srb1_poll_byte); + "Bad config value when parsing eNB configuration file %s, enb %d srb1_poll_byte %u!\n", + lib_config_file_name_pP, i, srb1_poll_byte); } - if (srb1_timer_poll_retransmit <= 250) { + if (srb1_timer_poll_retransmit <= 250) { enb_properties.properties[enb_properties_index]->srb1_timer_poll_retransmit = (srb1_timer_poll_retransmit - 5)/5; - } else if (srb1_timer_poll_retransmit <= 500) { - enb_properties.properties[enb_properties_index]->srb1_timer_poll_retransmit = (srb1_timer_poll_retransmit - 300)/50 + 50; + } else if (srb1_timer_poll_retransmit <= 500) { + enb_properties.properties[enb_properties_index]->srb1_timer_poll_retransmit = (srb1_timer_poll_retransmit - 300)/50 + 50; } else { - AssertError (0, parse_errors ++, - "Bad config value when parsing eNB configuration file %s, enb %d srb1_timer_poll_retransmit %u!\n", - lib_config_file_name_pP, i, srb1_timer_poll_retransmit); + AssertError (0, parse_errors ++, + "Bad config value when parsing eNB configuration file %s, enb %d srb1_timer_poll_retransmit %u!\n", + lib_config_file_name_pP, i, srb1_timer_poll_retransmit); } - if (srb1_timer_status_prohibit <= 250) { + if (srb1_timer_status_prohibit <= 250) { enb_properties.properties[enb_properties_index]->srb1_timer_status_prohibit = srb1_timer_status_prohibit/5; - } else if ((srb1_timer_poll_retransmit >= 300) && (srb1_timer_poll_retransmit <= 500)) { - enb_properties.properties[enb_properties_index]->srb1_timer_status_prohibit = (srb1_timer_status_prohibit - 300)/50 + 51; + } else if ((srb1_timer_poll_retransmit >= 300) && (srb1_timer_poll_retransmit <= 500)) { + enb_properties.properties[enb_properties_index]->srb1_timer_status_prohibit = (srb1_timer_status_prohibit - 300)/50 + 51; } else { - AssertError (0, parse_errors ++, - "Bad config value when parsing eNB configuration file %s, enb %d srb1_timer_status_prohibit %u!\n", - lib_config_file_name_pP, i, srb1_timer_status_prohibit); + AssertError (0, parse_errors ++, + "Bad config value when parsing eNB configuration file %s, enb %d srb1_timer_status_prohibit %u!\n", + lib_config_file_name_pP, i, srb1_timer_status_prohibit); } switch (srb1_timer_reordering) { - case 0: enb_properties.properties[enb_properties_index]->srb1_timer_reordering = T_Reordering_ms0; break; - case 5: enb_properties.properties[enb_properties_index]->srb1_timer_reordering = T_Reordering_ms5; break; - case 10: enb_properties.properties[enb_properties_index]->srb1_timer_reordering = T_Reordering_ms10; break; - case 15: enb_properties.properties[enb_properties_index]->srb1_timer_reordering = T_Reordering_ms15; break; - case 20: enb_properties.properties[enb_properties_index]->srb1_timer_reordering = T_Reordering_ms20; break; - case 25: enb_properties.properties[enb_properties_index]->srb1_timer_reordering = T_Reordering_ms25; break; - case 30: enb_properties.properties[enb_properties_index]->srb1_timer_reordering = T_Reordering_ms30; break; - case 35: enb_properties.properties[enb_properties_index]->srb1_timer_reordering = T_Reordering_ms35; break; - case 40: enb_properties.properties[enb_properties_index]->srb1_timer_reordering = T_Reordering_ms40; break; - case 45: enb_properties.properties[enb_properties_index]->srb1_timer_reordering = T_Reordering_ms45; break; - case 50: enb_properties.properties[enb_properties_index]->srb1_timer_reordering = T_Reordering_ms50; break; - case 55: enb_properties.properties[enb_properties_index]->srb1_timer_reordering = T_Reordering_ms55; break; - case 60: enb_properties.properties[enb_properties_index]->srb1_timer_reordering = T_Reordering_ms60; break; - case 65: enb_properties.properties[enb_properties_index]->srb1_timer_reordering = T_Reordering_ms65; break; - case 70: enb_properties.properties[enb_properties_index]->srb1_timer_reordering = T_Reordering_ms70; break; - case 75: enb_properties.properties[enb_properties_index]->srb1_timer_reordering = T_Reordering_ms75; break; - case 80: enb_properties.properties[enb_properties_index]->srb1_timer_reordering = T_Reordering_ms80; break; - case 85: enb_properties.properties[enb_properties_index]->srb1_timer_reordering = T_Reordering_ms85; break; - case 90: enb_properties.properties[enb_properties_index]->srb1_timer_reordering = T_Reordering_ms90; break; - case 95: enb_properties.properties[enb_properties_index]->srb1_timer_reordering = T_Reordering_ms95; break; - case 100: enb_properties.properties[enb_properties_index]->srb1_timer_reordering = T_Reordering_ms100; break; - case 110: enb_properties.properties[enb_properties_index]->srb1_timer_reordering = T_Reordering_ms110; break; - case 120: enb_properties.properties[enb_properties_index]->srb1_timer_reordering = T_Reordering_ms120; break; - case 130: enb_properties.properties[enb_properties_index]->srb1_timer_reordering = T_Reordering_ms130; break; - case 140: enb_properties.properties[enb_properties_index]->srb1_timer_reordering = T_Reordering_ms140; break; - case 150: enb_properties.properties[enb_properties_index]->srb1_timer_reordering = T_Reordering_ms150; break; - case 160: enb_properties.properties[enb_properties_index]->srb1_timer_reordering = T_Reordering_ms160; break; - case 170: enb_properties.properties[enb_properties_index]->srb1_timer_reordering = T_Reordering_ms170; break; - case 180: enb_properties.properties[enb_properties_index]->srb1_timer_reordering = T_Reordering_ms180; break; - case 190: enb_properties.properties[enb_properties_index]->srb1_timer_reordering = T_Reordering_ms190; break; - case 200: enb_properties.properties[enb_properties_index]->srb1_timer_reordering = T_Reordering_ms200; break; + case 0: + enb_properties.properties[enb_properties_index]->srb1_timer_reordering = T_Reordering_ms0; + break; + + case 5: + enb_properties.properties[enb_properties_index]->srb1_timer_reordering = T_Reordering_ms5; + break; + + case 10: + enb_properties.properties[enb_properties_index]->srb1_timer_reordering = T_Reordering_ms10; + break; + + case 15: + enb_properties.properties[enb_properties_index]->srb1_timer_reordering = T_Reordering_ms15; + break; + + case 20: + enb_properties.properties[enb_properties_index]->srb1_timer_reordering = T_Reordering_ms20; + break; + + case 25: + enb_properties.properties[enb_properties_index]->srb1_timer_reordering = T_Reordering_ms25; + break; + + case 30: + enb_properties.properties[enb_properties_index]->srb1_timer_reordering = T_Reordering_ms30; + break; + + case 35: + enb_properties.properties[enb_properties_index]->srb1_timer_reordering = T_Reordering_ms35; + break; + + case 40: + enb_properties.properties[enb_properties_index]->srb1_timer_reordering = T_Reordering_ms40; + break; + + case 45: + enb_properties.properties[enb_properties_index]->srb1_timer_reordering = T_Reordering_ms45; + break; + + case 50: + enb_properties.properties[enb_properties_index]->srb1_timer_reordering = T_Reordering_ms50; + break; + + case 55: + enb_properties.properties[enb_properties_index]->srb1_timer_reordering = T_Reordering_ms55; + break; + + case 60: + enb_properties.properties[enb_properties_index]->srb1_timer_reordering = T_Reordering_ms60; + break; + + case 65: + enb_properties.properties[enb_properties_index]->srb1_timer_reordering = T_Reordering_ms65; + break; + + case 70: + enb_properties.properties[enb_properties_index]->srb1_timer_reordering = T_Reordering_ms70; + break; + + case 75: + enb_properties.properties[enb_properties_index]->srb1_timer_reordering = T_Reordering_ms75; + break; + + case 80: + enb_properties.properties[enb_properties_index]->srb1_timer_reordering = T_Reordering_ms80; + break; + + case 85: + enb_properties.properties[enb_properties_index]->srb1_timer_reordering = T_Reordering_ms85; + break; + + case 90: + enb_properties.properties[enb_properties_index]->srb1_timer_reordering = T_Reordering_ms90; + break; + + case 95: + enb_properties.properties[enb_properties_index]->srb1_timer_reordering = T_Reordering_ms95; + break; + + case 100: + enb_properties.properties[enb_properties_index]->srb1_timer_reordering = T_Reordering_ms100; + break; + + case 110: + enb_properties.properties[enb_properties_index]->srb1_timer_reordering = T_Reordering_ms110; + break; + + case 120: + enb_properties.properties[enb_properties_index]->srb1_timer_reordering = T_Reordering_ms120; + break; + + case 130: + enb_properties.properties[enb_properties_index]->srb1_timer_reordering = T_Reordering_ms130; + break; + + case 140: + enb_properties.properties[enb_properties_index]->srb1_timer_reordering = T_Reordering_ms140; + break; + + case 150: + enb_properties.properties[enb_properties_index]->srb1_timer_reordering = T_Reordering_ms150; + break; + + case 160: + enb_properties.properties[enb_properties_index]->srb1_timer_reordering = T_Reordering_ms160; + break; + + case 170: + enb_properties.properties[enb_properties_index]->srb1_timer_reordering = T_Reordering_ms170; + break; + + case 180: + enb_properties.properties[enb_properties_index]->srb1_timer_reordering = T_Reordering_ms180; + break; + + case 190: + enb_properties.properties[enb_properties_index]->srb1_timer_reordering = T_Reordering_ms190; + break; + + case 200: + enb_properties.properties[enb_properties_index]->srb1_timer_reordering = T_Reordering_ms200; + break; + default: AssertError (0, parse_errors ++, - "Bad config value when parsing eNB configuration file %s, enb %d srb1_timer_reordering %u!\n", - lib_config_file_name_pP, i, srb1_timer_reordering); + "Bad config value when parsing eNB configuration file %s, enb %d srb1_timer_reordering %u!\n", + lib_config_file_name_pP, i, srb1_timer_reordering); } } else { enb_properties.properties[enb_properties_index]->srb1_timer_poll_retransmit = T_PollRetransmit_ms80; @@ -1919,7 +2102,7 @@ const Enb_properties_array_t *enb_config_init(char* lib_config_file_name_pP) for (j = 0; j < num_mme_address; j++) { setting_mme_address = config_setting_get_elem(setting_mme_addresses, j); - if( !( + if ( !( config_setting_lookup_string(setting_mme_address, ENB_CONFIG_STRING_MME_IPV4_ADDRESS, (const char **)&ipv4) && config_setting_lookup_string(setting_mme_address, ENB_CONFIG_STRING_MME_IPV6_ADDRESS, (const char **)&ipv6) && config_setting_lookup_string(setting_mme_address, ENB_CONFIG_STRING_MME_IP_ADDRESS_ACTIVE, (const char **)&active) @@ -1954,11 +2137,28 @@ const Enb_properties_array_t *enb_config_init(char* lib_config_file_name_pP) } } + // SCTP SETTING + enb_properties.properties[enb_properties_index]->sctp_out_streams = SCTP_OUT_STREAMS; + enb_properties.properties[enb_properties_index]->sctp_in_streams = SCTP_IN_STREAMS; +# if defined(ENABLE_USE_MME) + subsetting = config_setting_get_member (setting_enb, ENB_CONFIG_STRING_SCTP_CONFIG); + + if (subsetting != NULL) { + if ( (config_setting_lookup_int( subsetting, ENB_CONFIG_STRING_SCTP_INSTREAMS, &my_int) )) { + enb_properties.properties[enb_properties_index]->sctp_in_streams = (uint16_t)my_int; + } + + if ( (config_setting_lookup_int( subsetting, ENB_CONFIG_STRING_SCTP_OUTSTREAMS, &my_int) )) { + enb_properties.properties[enb_properties_index]->sctp_out_streams = (uint16_t)my_int; + } + } +#endif + // NETWORK_INTERFACES subsetting = config_setting_get_member (setting_enb, ENB_CONFIG_STRING_NETWORK_INTERFACES_CONFIG); - if(subsetting != NULL) { - if( ( + if (subsetting != NULL) { + if ( ( config_setting_lookup_string( subsetting, ENB_CONFIG_STRING_ENB_INTERFACE_NAME_FOR_S1_MME, (const char **)&enb_interface_name_for_S1_MME) && config_setting_lookup_string( subsetting, ENB_CONFIG_STRING_ENB_IPV4_ADDRESS_FOR_S1_MME, @@ -1994,7 +2194,7 @@ const Enb_properties_array_t *enb_config_init(char* lib_config_file_name_pP) // OTG _CONFIG setting_otg = config_setting_get_member (setting_enb, ENB_CONF_STRING_OTG_CONFIG); - if(setting_otg != NULL) { + if (setting_otg != NULL) { num_otg_elements = config_setting_length(setting_otg); printf("num otg elements %d \n", num_otg_elements); enb_properties.properties[enb_properties_index]->num_otg_elements = 0; @@ -2002,13 +2202,13 @@ const Enb_properties_array_t *enb_config_init(char* lib_config_file_name_pP) for (j = 0; j < num_otg_elements; j++) { subsetting_otg=config_setting_get_elem(setting_otg, j); - if(config_setting_lookup_int(subsetting_otg, ENB_CONF_STRING_OTG_UE_ID, &otg_ue_id)) { + if (config_setting_lookup_int(subsetting_otg, ENB_CONF_STRING_OTG_UE_ID, &otg_ue_id)) { enb_properties.properties[enb_properties_index]->otg_ue_id[j] = otg_ue_id; } else { enb_properties.properties[enb_properties_index]->otg_ue_id[j] = 1; } - if(config_setting_lookup_string(subsetting_otg, ENB_CONF_STRING_OTG_APP_TYPE, (const char **)&otg_app_type)) { + if (config_setting_lookup_string(subsetting_otg, ENB_CONF_STRING_OTG_APP_TYPE, (const char **)&otg_app_type)) { if ((enb_properties.properties[enb_properties_index]->otg_app_type[j] = map_str_to_int(otg_app_type_names,otg_app_type))== -1) { enb_properties.properties[enb_properties_index]->otg_app_type[j] = BCBR; } @@ -2016,7 +2216,7 @@ const Enb_properties_array_t *enb_config_init(char* lib_config_file_name_pP) enb_properties.properties[enb_properties_index]->otg_app_type[j] = NO_PREDEFINED_TRAFFIC; // 0 } - if(config_setting_lookup_string(subsetting_otg, ENB_CONF_STRING_OTG_BG_TRAFFIC, (const char **)&otg_bg_traffic)) { + if (config_setting_lookup_string(subsetting_otg, ENB_CONF_STRING_OTG_BG_TRAFFIC, (const char **)&otg_bg_traffic)) { if ((enb_properties.properties[enb_properties_index]->otg_bg_traffic[j] = map_str_to_int(switch_names,otg_bg_traffic)) == -1) { enb_properties.properties[enb_properties_index]->otg_bg_traffic[j]=0; @@ -2034,9 +2234,9 @@ const Enb_properties_array_t *enb_config_init(char* lib_config_file_name_pP) // log_config subsetting = config_setting_get_member (setting_enb, ENB_CONFIG_STRING_LOG_CONFIG); - if(subsetting != NULL) { + if (subsetting != NULL) { // global - if(config_setting_lookup_string(subsetting, ENB_CONFIG_STRING_GLOBAL_LOG_LEVEL, (const char **) &glog_level)) { + if (config_setting_lookup_string(subsetting, ENB_CONFIG_STRING_GLOBAL_LOG_LEVEL, (const char **) &glog_level)) { if ((enb_properties.properties[enb_properties_index]->glog_level = map_str_to_int(log_level_names, glog_level)) == -1) { enb_properties.properties[enb_properties_index]->glog_level = LOG_INFO; } @@ -2046,7 +2246,7 @@ const Enb_properties_array_t *enb_config_init(char* lib_config_file_name_pP) enb_properties.properties[enb_properties_index]->glog_level = LOG_INFO; } - if(config_setting_lookup_string(subsetting, ENB_CONFIG_STRING_GLOBAL_LOG_VERBOSITY,(const char **) &glog_verbosity)) { + if (config_setting_lookup_string(subsetting, ENB_CONFIG_STRING_GLOBAL_LOG_VERBOSITY,(const char **) &glog_verbosity)) { if ((enb_properties.properties[enb_properties_index]->glog_verbosity = map_str_to_int(log_verbosity_names, glog_verbosity)) == -1) { enb_properties.properties[enb_properties_index]->glog_verbosity = LOG_MED; } @@ -2057,7 +2257,7 @@ const Enb_properties_array_t *enb_config_init(char* lib_config_file_name_pP) } // HW - if(config_setting_lookup_string(subsetting, ENB_CONFIG_STRING_HW_LOG_LEVEL, (const char **) &hw_log_level)) { + if (config_setting_lookup_string(subsetting, ENB_CONFIG_STRING_HW_LOG_LEVEL, (const char **) &hw_log_level)) { if ((enb_properties.properties[enb_properties_index]->hw_log_level = map_str_to_int(log_level_names,hw_log_level)) == -1) { enb_properties.properties[enb_properties_index]->hw_log_level = LOG_INFO; } @@ -2067,7 +2267,7 @@ const Enb_properties_array_t *enb_config_init(char* lib_config_file_name_pP) enb_properties.properties[enb_properties_index]->hw_log_level = LOG_INFO; } - if(config_setting_lookup_string(subsetting, ENB_CONFIG_STRING_HW_LOG_VERBOSITY, (const char **) &hw_log_verbosity)) { + if (config_setting_lookup_string(subsetting, ENB_CONFIG_STRING_HW_LOG_VERBOSITY, (const char **) &hw_log_verbosity)) { if ((enb_properties.properties[enb_properties_index]->hw_log_verbosity = map_str_to_int(log_verbosity_names,hw_log_verbosity)) == -1) { enb_properties.properties[enb_properties_index]->hw_log_verbosity = LOG_MED; } @@ -2078,7 +2278,7 @@ const Enb_properties_array_t *enb_config_init(char* lib_config_file_name_pP) } // phy - if(config_setting_lookup_string(subsetting, ENB_CONFIG_STRING_PHY_LOG_LEVEL,(const char **) &phy_log_level)) { + if (config_setting_lookup_string(subsetting, ENB_CONFIG_STRING_PHY_LOG_LEVEL,(const char **) &phy_log_level)) { if ((enb_properties.properties[enb_properties_index]->phy_log_level = map_str_to_int(log_level_names,phy_log_level)) == -1) { enb_properties.properties[enb_properties_index]->phy_log_level = LOG_INFO; } @@ -2088,7 +2288,7 @@ const Enb_properties_array_t *enb_config_init(char* lib_config_file_name_pP) enb_properties.properties[enb_properties_index]->phy_log_level = LOG_INFO; } - if(config_setting_lookup_string(subsetting, ENB_CONFIG_STRING_PHY_LOG_VERBOSITY, (const char **)&phy_log_verbosity)) { + if (config_setting_lookup_string(subsetting, ENB_CONFIG_STRING_PHY_LOG_VERBOSITY, (const char **)&phy_log_verbosity)) { if ((enb_properties.properties[enb_properties_index]->phy_log_verbosity = map_str_to_int(log_verbosity_names,phy_log_verbosity)) == -1) { enb_properties.properties[enb_properties_index]->phy_log_verbosity = LOG_MED; } @@ -2099,7 +2299,7 @@ const Enb_properties_array_t *enb_config_init(char* lib_config_file_name_pP) } //mac - if(config_setting_lookup_string(subsetting, ENB_CONFIG_STRING_MAC_LOG_LEVEL, (const char **)&mac_log_level)) { + if (config_setting_lookup_string(subsetting, ENB_CONFIG_STRING_MAC_LOG_LEVEL, (const char **)&mac_log_level)) { if ((enb_properties.properties[enb_properties_index]->mac_log_level = map_str_to_int(log_level_names,mac_log_level)) == -1 ) { enb_properties.properties[enb_properties_index]->mac_log_level = LOG_INFO; } @@ -2109,7 +2309,7 @@ const Enb_properties_array_t *enb_config_init(char* lib_config_file_name_pP) enb_properties.properties[enb_properties_index]->mac_log_level = LOG_INFO; } - if(config_setting_lookup_string(subsetting, ENB_CONFIG_STRING_MAC_LOG_VERBOSITY, (const char **)&mac_log_verbosity)) { + if (config_setting_lookup_string(subsetting, ENB_CONFIG_STRING_MAC_LOG_VERBOSITY, (const char **)&mac_log_verbosity)) { if ((enb_properties.properties[enb_properties_index]->mac_log_verbosity = map_str_to_int(log_verbosity_names,mac_log_verbosity)) == -1) { enb_properties.properties[enb_properties_index]->mac_log_verbosity = LOG_MED; } @@ -2120,7 +2320,7 @@ const Enb_properties_array_t *enb_config_init(char* lib_config_file_name_pP) } //rlc - if(config_setting_lookup_string(subsetting, ENB_CONFIG_STRING_RLC_LOG_LEVEL, (const char **)&rlc_log_level)) { + if (config_setting_lookup_string(subsetting, ENB_CONFIG_STRING_RLC_LOG_LEVEL, (const char **)&rlc_log_level)) { if ((enb_properties.properties[enb_properties_index]->rlc_log_level = map_str_to_int(log_level_names,rlc_log_level)) == -1) { enb_properties.properties[enb_properties_index]->rlc_log_level = LOG_INFO; } @@ -2130,7 +2330,7 @@ const Enb_properties_array_t *enb_config_init(char* lib_config_file_name_pP) enb_properties.properties[enb_properties_index]->rlc_log_level = LOG_INFO; } - if(config_setting_lookup_string(subsetting, ENB_CONFIG_STRING_RLC_LOG_VERBOSITY, (const char **)&rlc_log_verbosity)) { + if (config_setting_lookup_string(subsetting, ENB_CONFIG_STRING_RLC_LOG_VERBOSITY, (const char **)&rlc_log_verbosity)) { if ((enb_properties.properties[enb_properties_index]->rlc_log_verbosity = map_str_to_int(log_verbosity_names,rlc_log_verbosity)) == -1) { enb_properties.properties[enb_properties_index]->rlc_log_verbosity = LOG_MED; } @@ -2141,7 +2341,7 @@ const Enb_properties_array_t *enb_config_init(char* lib_config_file_name_pP) } //pdcp - if(config_setting_lookup_string(subsetting, ENB_CONFIG_STRING_PDCP_LOG_LEVEL, (const char **)&pdcp_log_level)) { + if (config_setting_lookup_string(subsetting, ENB_CONFIG_STRING_PDCP_LOG_LEVEL, (const char **)&pdcp_log_level)) { if ((enb_properties.properties[enb_properties_index]->pdcp_log_level = map_str_to_int(log_level_names,pdcp_log_level)) == -1) { enb_properties.properties[enb_properties_index]->pdcp_log_level = LOG_INFO; } @@ -2151,7 +2351,7 @@ const Enb_properties_array_t *enb_config_init(char* lib_config_file_name_pP) enb_properties.properties[enb_properties_index]->pdcp_log_level = LOG_INFO; } - if(config_setting_lookup_string(subsetting, ENB_CONFIG_STRING_PDCP_LOG_VERBOSITY, (const char **)&pdcp_log_verbosity)) { + if (config_setting_lookup_string(subsetting, ENB_CONFIG_STRING_PDCP_LOG_VERBOSITY, (const char **)&pdcp_log_verbosity)) { enb_properties.properties[enb_properties_index]->pdcp_log_verbosity = map_str_to_int(log_verbosity_names,pdcp_log_verbosity); //printf( "\tPDCP log verbosity:\t%s->%d\n",pdcp_log_verbosity, enb_properties.properties[enb_properties_index]->pdcp_log_verbosity); } else { @@ -2159,7 +2359,7 @@ const Enb_properties_array_t *enb_config_init(char* lib_config_file_name_pP) } //rrc - if(config_setting_lookup_string(subsetting, ENB_CONFIG_STRING_RRC_LOG_LEVEL, (const char **)&rrc_log_level)) { + if (config_setting_lookup_string(subsetting, ENB_CONFIG_STRING_RRC_LOG_LEVEL, (const char **)&rrc_log_level)) { if ((enb_properties.properties[enb_properties_index]->rrc_log_level = map_str_to_int(log_level_names,rrc_log_level)) == -1 ) { enb_properties.properties[enb_properties_index]->rrc_log_level = LOG_INFO; } @@ -2169,7 +2369,7 @@ const Enb_properties_array_t *enb_config_init(char* lib_config_file_name_pP) enb_properties.properties[enb_properties_index]->rrc_log_level = LOG_INFO; } - if(config_setting_lookup_string(subsetting, ENB_CONFIG_STRING_RRC_LOG_VERBOSITY, (const char **)&rrc_log_verbosity)) { + if (config_setting_lookup_string(subsetting, ENB_CONFIG_STRING_RRC_LOG_VERBOSITY, (const char **)&rrc_log_verbosity)) { if ((enb_properties.properties[enb_properties_index]->rrc_log_verbosity = map_str_to_int(log_verbosity_names,rrc_log_verbosity)) == -1) { enb_properties.properties[enb_properties_index]->rrc_log_verbosity = LOG_MED; } @@ -2179,7 +2379,7 @@ const Enb_properties_array_t *enb_config_init(char* lib_config_file_name_pP) enb_properties.properties[enb_properties_index]->rrc_log_verbosity = LOG_MED; } - if(config_setting_lookup_string(subsetting, ENB_CONFIG_STRING_GTPU_LOG_LEVEL, (const char **)>pu_log_level)) { + if (config_setting_lookup_string(subsetting, ENB_CONFIG_STRING_GTPU_LOG_LEVEL, (const char **)>pu_log_level)) { if ((enb_properties.properties[enb_properties_index]->gtpu_log_level = map_str_to_int(log_level_names,gtpu_log_level)) == -1 ) { enb_properties.properties[enb_properties_index]->gtpu_log_level = LOG_INFO; } @@ -2189,7 +2389,7 @@ const Enb_properties_array_t *enb_config_init(char* lib_config_file_name_pP) enb_properties.properties[enb_properties_index]->gtpu_log_level = LOG_INFO; } - if(config_setting_lookup_string(subsetting, ENB_CONFIG_STRING_GTPU_LOG_VERBOSITY, (const char **)>pu_log_verbosity)) { + if (config_setting_lookup_string(subsetting, ENB_CONFIG_STRING_GTPU_LOG_VERBOSITY, (const char **)>pu_log_verbosity)) { if ((enb_properties.properties[enb_properties_index]->gtpu_log_verbosity = map_str_to_int(log_verbosity_names,gtpu_log_verbosity)) == -1) { enb_properties.properties[enb_properties_index]->gtpu_log_verbosity = LOG_MED; } @@ -2199,7 +2399,7 @@ const Enb_properties_array_t *enb_config_init(char* lib_config_file_name_pP) enb_properties.properties[enb_properties_index]->gtpu_log_verbosity = LOG_MED; } - if(config_setting_lookup_string(subsetting, ENB_CONFIG_STRING_UDP_LOG_LEVEL, (const char **)&udp_log_level)) { + if (config_setting_lookup_string(subsetting, ENB_CONFIG_STRING_UDP_LOG_LEVEL, (const char **)&udp_log_level)) { if ((enb_properties.properties[enb_properties_index]->udp_log_level = map_str_to_int(log_level_names,udp_log_level)) == -1 ) { enb_properties.properties[enb_properties_index]->udp_log_level = LOG_INFO; } @@ -2209,7 +2409,7 @@ const Enb_properties_array_t *enb_config_init(char* lib_config_file_name_pP) enb_properties.properties[enb_properties_index]->udp_log_level = LOG_INFO; } - if(config_setting_lookup_string(subsetting, ENB_CONFIG_STRING_UDP_LOG_VERBOSITY, (const char **)&udp_log_verbosity)) { + if (config_setting_lookup_string(subsetting, ENB_CONFIG_STRING_UDP_LOG_VERBOSITY, (const char **)&udp_log_verbosity)) { if ((enb_properties.properties[enb_properties_index]->udp_log_verbosity = map_str_to_int(log_verbosity_names,udp_log_verbosity)) == -1) { enb_properties.properties[enb_properties_index]->udp_log_verbosity = LOG_MED; } @@ -2219,7 +2419,7 @@ const Enb_properties_array_t *enb_config_init(char* lib_config_file_name_pP) enb_properties.properties[enb_properties_index]->udp_log_verbosity = LOG_MED; } - if(config_setting_lookup_string(subsetting, ENB_CONFIG_STRING_OSA_LOG_LEVEL, (const char **)&osa_log_level)) { + if (config_setting_lookup_string(subsetting, ENB_CONFIG_STRING_OSA_LOG_LEVEL, (const char **)&osa_log_level)) { if ((enb_properties.properties[enb_properties_index]->osa_log_level = map_str_to_int(log_level_names,osa_log_level)) == -1 ) { enb_properties.properties[enb_properties_index]->osa_log_level = LOG_INFO; } @@ -2229,7 +2429,7 @@ const Enb_properties_array_t *enb_config_init(char* lib_config_file_name_pP) enb_properties.properties[enb_properties_index]->osa_log_level = LOG_INFO; } - if(config_setting_lookup_string(subsetting, ENB_CONFIG_STRING_OSA_LOG_VERBOSITY, (const char **)&osa_log_verbosity)) { + if (config_setting_lookup_string(subsetting, ENB_CONFIG_STRING_OSA_LOG_VERBOSITY, (const char **)&osa_log_verbosity)) { if ((enb_properties.properties[enb_properties_index]->osa_log_verbosity = map_str_to_int(log_verbosity_names,osa_log_verbosity)) == -1) { enb_properties.properties[enb_properties_index]->osa_log_verbosity = LOG_MED; } diff --git a/openair2/ENB_APP/enb_config.h b/openair2/ENB_APP/enb_config.h index 924405f9d9..0fb82dcde3 100755 --- a/openair2/ENB_APP/enb_config.h +++ b/openair2/ENB_APP/enb_config.h @@ -52,9 +52,6 @@ #include "RRC/LITE/MESSAGES/SystemInformationBlockType2.h" #endif -// Hard to find a defined value for max enb... -#define MAX_ENB 16 - #define IPV4_STR_ADDR_TO_INT_NWBO(AdDr_StR,NwBo,MeSsAgE ) do {\ struct in_addr inp;\ if ( inet_aton(AdDr_StR, &inp ) < 0 ) {\ @@ -64,6 +61,15 @@ }\ } while (0); +/** @defgroup _enb_app ENB APP + * @ingroup _oai2 + * @{ + */ + +// Hard to find a defined value for max enb... +#define MAX_ENB 16 + + typedef struct mme_ip_address_s { unsigned ipv4:1; unsigned ipv6:1; @@ -187,6 +193,9 @@ typedef struct Enb_properties_s { /* List of MME to connect to */ mme_ip_address_t mme_ip_address[S1AP_MAX_NB_MME_IP_ADDRESS]; + int sctp_in_streams; + int sctp_out_streams; + char *enb_interface_name_for_S1U; in_addr_t enb_ipv4_address_for_S1U; tcp_udp_port_t enb_port_for_S1U; @@ -235,3 +244,4 @@ const Enb_properties_array_t *enb_config_init(char* lib_config_file_name_pP); const Enb_properties_array_t *enb_config_get(void); #endif /* ENB_CONFIG_H_ */ +/** @} */ diff --git a/openair2/LAYER2/MAC/config.c b/openair2/LAYER2/MAC/config.c index 5b3c8bd05e..b19e7f72e8 100644 --- a/openair2/LAYER2/MAC/config.c +++ b/openair2/LAYER2/MAC/config.c @@ -91,6 +91,7 @@ void ue_mac_reset(module_id_t module_idP,uint8_t eNB_index) int rrc_mac_config_req( module_id_t Mod_id, + int CC_id, eNB_flag_t eNB_flagP, rnti_t rntiP, uint8_t eNB_index, @@ -125,7 +126,7 @@ rrc_mac_config_req( ) { - int i,CC_id=0; + int i; int UE_id = -1; VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_RRC_MAC_CONFIG, VCD_FUNCTION_IN); @@ -139,15 +140,15 @@ rrc_mac_config_req( } else { UE_id = find_UE_id(Mod_id, rntiP); if (physicalConfigDedicated == NULL) { - LOG_I(MAC,"[CONFIG][eNB %d] Configuring MAC/PHY\n",Mod_id); + LOG_I(MAC,"[CONFIG][eNB %d/%d] Configuring MAC/PHY\n", Mod_id, CC_id); } else { - LOG_I(MAC,"[CONFIG][eNB %d] Configuring MAC/PHY for UE %d (%x)\n",Mod_id,UE_id,UE_RNTI(Mod_id,UE_id)); + LOG_I(MAC,"[CONFIG][eNB %d/%d] Configuring MAC/PHY for UE %d (%x)\n", Mod_id, CC_id, UE_id, UE_RNTI(Mod_id, UE_id)); } } if (tdd_Config && SIwindowsize && SIperiod) { if (eNB_flagP == ENB_FLAG_YES) { - mac_xface->phy_config_sib1_eNB(Mod_id,0,tdd_Config,*SIwindowsize,*SIperiod); + mac_xface->phy_config_sib1_eNB(Mod_id, CC_id, tdd_Config, *SIwindowsize, *SIperiod); } else { mac_xface->phy_config_sib1_ue(Mod_id,0,eNB_index,tdd_Config,*SIwindowsize,*SIperiod); } @@ -164,7 +165,7 @@ rrc_mac_config_req( LOG_I(MAC,"[CONFIG]pusch_config_common.groupAssignmentPUSCH = %ld\n",radioResourceConfigCommon->pusch_ConfigCommon.ul_ReferenceSignalsPUSCH.groupAssignmentPUSCH); LOG_I(MAC,"[CONFIG]pusch_config_common.sequenceHoppingEnabled = %d\n",radioResourceConfigCommon->pusch_ConfigCommon.ul_ReferenceSignalsPUSCH.sequenceHoppingEnabled); LOG_I(MAC,"[CONFIG]pusch_config_common.cyclicShift = %ld\n",radioResourceConfigCommon->pusch_ConfigCommon.ul_ReferenceSignalsPUSCH.cyclicShift); - mac_xface->phy_config_sib2_eNB(Mod_id,0,radioResourceConfigCommon,ul_CarrierFreq,ul_Bandwidth,additionalSpectrumEmission,mbsfn_SubframeConfigList); + mac_xface->phy_config_sib2_eNB(Mod_id, CC_id, radioResourceConfigCommon, ul_CarrierFreq, ul_Bandwidth, additionalSpectrumEmission, mbsfn_SubframeConfigList); } else { UE_mac_inst[Mod_id].radioResourceConfigCommon = radioResourceConfigCommon; mac_xface->phy_config_sib2_ue(Mod_id,0,eNB_index,radioResourceConfigCommon,ul_CarrierFreq,ul_Bandwidth,additionalSpectrumEmission,mbsfn_SubframeConfigList); @@ -219,8 +220,8 @@ rrc_mac_config_req( #ifdef Rel10 - if (mac_MainConfig->sr_ProhibitTimer_r9) { - UE_mac_inst[Mod_id].scheduling_info.sr_ProhibitTimer = (uint16_t) *mac_MainConfig->sr_ProhibitTimer_r9; + if (mac_MainConfig->ext1 && mac_MainConfig->ext1->sr_ProhibitTimer_r9) { + UE_mac_inst[Mod_id].scheduling_info.sr_ProhibitTimer = (uint16_t) *mac_MainConfig->ext1->sr_ProhibitTimer_r9; } else { UE_mac_inst[Mod_id].scheduling_info.sr_ProhibitTimer = (uint16_t) 0; } @@ -260,7 +261,7 @@ rrc_mac_config_req( if (physicalConfigDedicated != NULL) { if (eNB_flagP==1) { - mac_xface->phy_config_dedicated_eNB(Mod_id,0,UE_RNTI(Mod_id,UE_id),physicalConfigDedicated); + mac_xface->phy_config_dedicated_eNB(Mod_id, CC_id, UE_RNTI(Mod_id, UE_id), physicalConfigDedicated); } else { mac_xface->phy_config_dedicated_ue(Mod_id,0,eNB_index,physicalConfigDedicated); UE_mac_inst[Mod_id].physicalConfigDedicated=physicalConfigDedicated; // for SR proc diff --git a/openair2/LAYER2/MAC/defs.h b/openair2/LAYER2/MAC/defs.h index a8b49b1e0c..c5c4156c00 100644 --- a/openair2/LAYER2/MAC/defs.h +++ b/openair2/LAYER2/MAC/defs.h @@ -26,16 +26,20 @@ Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE *******************************************************************************/ -/*! \file def.h +/*! \file LAYER2/MAC/defs.h * \brief MAC data structures, constant, and function prototype * \author Navid Nikaein and Raymond Knopp * \date 2011 * \version 0.5 * \email navid.nikaein@eurecom.fr -* @ingroup _mac */ +/** @defgroup _oai2 openair2 Reference Implementation + * @ingroup _ref_implementation_ + * @{ + */ +/*@}*/ #ifndef __LAYER2_MAC_DEFS_H__ #define __LAYER2_MAC_DEFS_H__ @@ -71,8 +75,8 @@ //#include "SIMULATION/PHY_EMULATION/impl_defs.h" //#endif -/** @defgroup _mac_impl_ MAC Layer Reference Implementation - * @ingroup _ref_implementation_ +/** @defgroup _mac MAC + * @ingroup _oai2 * @{ */ @@ -81,15 +85,6 @@ #define SCH_PAYLOAD_SIZE_MAX 4096 /// Logical channel ids from 36-311 (Note BCCH is not specified in 36-311, uses the same as first DRB) -#define BCCH 3 // SI -#define CCCH 0 // srb0 -#define DCCH 1 // srb1 -#define DCCH1 2 // srb2 - -#define DTCH 3 // LCID - -#define MCCH 4 // MCCH -#define MTCH 1 // MTCH #ifdef Rel10 @@ -108,7 +103,7 @@ #define MAX_MBSFN_AREA 8 #define MAX_PMCH_perMBSFN 15 - +/*!\brief MAX MCCH payload size */ #define MCCH_PAYLOAD_SIZE_MAX 128 //#define MCH_PAYLOAD_SIZE_MAX 16384// this value is using in case mcs and TBS index are high #endif @@ -117,44 +112,53 @@ #define printk printf #endif //USER_MODE +/*!\brief Maximum number of logical channl group IDs */ #define MAX_NUM_LCGID 4 +/*!\brief logical channl group ID 0 */ +#define LCGID0 0 +/*!\brief logical channl group ID 1 */ +#define LCGID1 1 +/*!\brief logical channl group ID 2 */ +#define LCGID2 2 +/*!\brief logical channl group ID 3 */ +#define LCGID3 3 +/*!\brief Maximum number of logical chanels */ #define MAX_NUM_LCID 11 -//#define MAX_NUM_RB 8 +/*!\brief Maximum number od control elemenets */ #define MAX_NUM_CE 5 - +/*!\brief Maximum number of random access process */ #define NB_RA_PROC_MAX 4 - +/*!\brief size of buffer status report table */ #define BSR_TABLE_SIZE 64 -// The power headroom reporting range is from -23 ...+40 dB and beyond, with step 1 +/*!\brief The power headroom reporting range is from -23 ...+40 dB and beyond, with step 1 */ #define PHR_MAPPING_OFFSET 23 // if ( x>= -23 ) val = floor (x + 23) - +/*!\brief maximum number of resource block groups */ #define N_RBG_MAX 25 // for 20MHz channel BW - +/*!\brief minimum value for channel quality indicator */ #define MIN_CQI_VALUE 0 +/*!\brief maximum value for channel quality indicator */ #define MAX_CQI_VALUE 15 -#define LCGID0 0 -#define LCGID1 1 -#define LCGID2 2 -#define LCGID3 3 - #define LCID_EMPTY 0 #define LCID_NOT_EMPTY 1 -typedef enum { - CONNECTION_OK=0, - CONNECTION_LOST, - PHY_RESYNCH, - PHY_HO_PRACH -} UE_L2_STATE_t; +/* + * eNB part + */ + +/* + * UE/ENB common part + */ +/*!\brief MAC header of Random Access Response for Random access preamble identifier (RAPID) */ typedef struct { uint8_t RAPID:6; uint8_t T:1; uint8_t E:1; } __attribute__((__packed__))RA_HEADER_RAPID; +/*!\brief MAC header of Random Access Response for backoff indicator (BI)*/ typedef struct { uint8_t BI:4; uint8_t R:2; @@ -190,7 +194,7 @@ typedef struct { #define sizeof_RAR_PDU 6 */ - +/*!\brief MAC subheader short with 7bit Length field */ typedef struct { uint8_t LCID:5; // octet 1 LSB uint8_t E:1; @@ -198,7 +202,7 @@ typedef struct { uint8_t L:7; // octet 2 LSB uint8_t F:1; // octet 2 MSB } __attribute__((__packed__))SCH_SUBHEADER_SHORT; - +/*!\brief MAC subheader long with 15bit Length field */ typedef struct { uint8_t LCID:5; // octet 1 LSB uint8_t E:1; @@ -208,20 +212,21 @@ typedef struct { uint8_t L_LSB:8; uint8_t padding; } __attribute__((__packed__))SCH_SUBHEADER_LONG; - +/*!\brief MAC subheader short without length field */ typedef struct { uint8_t LCID:5; uint8_t E:1; uint8_t R:2; } __attribute__((__packed__))SCH_SUBHEADER_FIXED; +/*!\brief mac control element: short buffer status report for a specific logical channel group ID*/ typedef struct { uint8_t Buffer_size:6; // octet 1 LSB uint8_t LCGID:2; // octet 1 MSB } __attribute__((__packed__))BSR_SHORT; typedef BSR_SHORT BSR_TRUNCATED; - +/*!\brief mac control element: long buffer status report for all logical channel group ID*/ typedef struct { uint32_t Buffer_size3:6; uint32_t Buffer_size2:6; @@ -231,75 +236,113 @@ typedef struct { } __attribute__((__packed__))BSR_LONG; #define BSR_LONG_SIZE (sizeof(BSR_LONG)) - +/*!\brief mac control element: timing advance */ typedef struct { uint8_t TA:6; uint8_t R:2; } __attribute__((__packed__))TIMING_ADVANCE_CMD; - +/*!\brief mac control element: power headroom report */ typedef struct { uint8_t PH:6; uint8_t R:2; } __attribute__((__packed__))POWER_HEADROOM_CMD; +/*!\brief DCI PDU filled by MAC for the PHY */ typedef struct { uint8_t Num_ue_spec_dci ; uint8_t Num_common_dci ; unsigned int nCCE; DCI_ALLOC_t dci_alloc[NUM_DCI_MAX] ; } DCI_PDU; - +/*! \brief CCCH payload */ typedef struct { - uint8_t payload[CCCH_PAYLOAD_SIZE_MAX] ;/*!< \brief CCCH payload */ + uint8_t payload[CCCH_PAYLOAD_SIZE_MAX] ; } __attribute__((__packed__))CCCH_PDU; - +/*! \brief BCCH payload */ typedef struct { - uint8_t payload[BCCH_PAYLOAD_SIZE_MAX] ;/*!< \brief CCCH payload */ + uint8_t payload[BCCH_PAYLOAD_SIZE_MAX] ; } __attribute__((__packed__))BCCH_PDU; #ifdef Rel10 +/*! \brief MCCH payload */ typedef struct { - uint8_t payload[MCCH_PAYLOAD_SIZE_MAX] ;/*!< \brief MCCH payload */ + uint8_t payload[MCCH_PAYLOAD_SIZE_MAX] ; } __attribute__((__packed__))MCCH_PDU; -#endif - +/*!< \brief MAC control element for activation and deactivation of component carriers */ +typedef struct { + uint8_t C7:1;/*!< \brief Component carrier 7 */ + uint8_t C6:1;/*!< \brief Component carrier 6 */ + uint8_t C5:1;/*!< \brief Component carrier 5 */ + uint8_t C4:1;/*!< \brief Component carrier 4 */ + uint8_t C3:1;/*!< \brief Component carrier 3 */ + uint8_t C2:1;/*!< \brief Component carrier 2 */ + uint8_t C1:1;/*!< \brief Component carrier 1 */ + uint8_t R:1;/*!< \brief Reserved */ +} __attribute__((__packed__))CC_ELEMENT; +/*! \brief MAC control element: MCH Scheduling Information */ typedef struct { uint8_t stop_sf_MSB:3; // octet 1 LSB uint8_t lcid:5; // octet 2 MSB uint8_t stop_sf_LSB:8; } __attribute__((__packed__))MSI_ELEMENT; - -// DLSCH LCHAN IDs +#endif +/*! \brief Values of CCCH LCID for DLSCH */ #define CCCH_LCHANID 0 +/*!\brief Values of BCCH logical channel */ +#define BCCH 3 // SI +/*!\brief Value of CCCH / SRB0 logical channel */ +#define CCCH 0 // srb0 +/*!\brief DCCH / SRB1 logical channel */ +#define DCCH 1 // srb1 +/*!\brief DCCH1 / SRB2 logical channel */ +#define DCCH1 2 // srb2 +/*!\brief DTCH DRB1 logical channel */ +#define DTCH 3 // LCID +/*!\brief MCCH logical channel */ +#define MCCH 4 +/*!\brief MTCH logical channel */ +#define MTCH 1 +// DLSCH LCHAN ID +/*!\brief LCID of UE contention resolution identity for DLSCH*/ #define UE_CONT_RES 28 +/*!\brief LCID of timing advance for DLSCH */ #define TIMING_ADV_CMD 29 +/*!\brief LCID of discontinous reception mode for DLSCH */ #define DRX_CMD 30 +/*!\brief LCID of padding LCID for DLSCH */ #define SHORT_PADDING 31 #ifdef Rel10 // MCH LCHAN IDs (table6.2.1-4 TS36.321) +/*!\brief LCID of MCCH for DL */ #define MCCH_LCHANID 0 -#define MCH_SCHDL_INFO 30 - +/*!\brief LCID of MCH scheduling info for DL */ +#define MCH_SCHDL_INFO 3 +/*!\brief LCID of Carrier component activation/deactivation */ +#define CC_ACT_DEACT 27 #endif // ULSCH LCHAN IDs +/*!\brief LCID of extended power headroom for ULSCH */ #define EXTENDED_POWER_HEADROOM 25 +/*!\brief LCID of power headroom for ULSCH */ #define POWER_HEADROOM 26 +/*!\brief LCID of CRNTI for ULSCH */ #define CRNTI 27 +/*!\brief LCID of truncated BSR for ULSCH */ #define TRUNCATED_BSR 28 +/*!\brief LCID of short BSR for ULSCH */ #define SHORT_BSR 29 +/*!\brief LCID of long BSR for ULSCH */ #define LONG_BSR 30 -/*! \brief Downlink SCH PDU Structure - */ +/*! \brief Downlink SCH PDU Structure */ typedef struct { int8_t payload[8][SCH_PAYLOAD_SIZE_MAX]; uint16_t Pdu_size[8]; } __attribute__ ((__packed__)) DLSCH_PDU; -/*! \brief MCH PDU Structure - */ +/*! \brief MCH PDU Structure */ typedef struct { int8_t payload[SCH_PAYLOAD_SIZE_MAX]; uint16_t Pdu_size; @@ -310,8 +353,7 @@ typedef struct { uint8_t mtch_active; } __attribute__ ((__packed__)) MCH_PDU; -/*! \brief Uplink SCH PDU Structure - */ +/*! \brief Uplink SCH PDU Structure */ typedef struct { int8_t payload[SCH_PAYLOAD_SIZE_MAX]; /*!< \brief SACH payload */ uint16_t Pdu_size; @@ -319,6 +361,7 @@ typedef struct { #include "PHY/impl_defs_top.h" +/*!\brief UE ULSCH scheduling states*/ typedef enum { S_UL_NONE =0, S_UL_WAITING, @@ -327,6 +370,7 @@ typedef enum { S_UL_NUM_STATUS } UE_ULSCH_STATUS; +/*!\brief UE DLSCH scheduling states*/ typedef enum { S_DL_NONE =0, S_DL_WAITING, @@ -335,34 +379,52 @@ typedef enum { S_DL_NUM_STATUS } UE_DLSCH_STATUS; +/*!\brief scheduling policy for the contention-based access */ typedef enum { - CBA_ES=0, // equal share of RB among groups w - CBA_ES_S, // equal share of RB among groups with small allocation - CBA_PF, // proportional fair (kind of) - CBA_PF_S, // proportional fair (kind of) with small RB allocation - CBA_RS // random allocation + CBA_ES=0, /// equal share of RB among groups w + CBA_ES_S, /// equal share of RB among groups with small allocation + CBA_PF, /// proportional fair (kind of) + CBA_PF_S, /// proportional fair (kind of) with small RB allocation + CBA_RS /// random allocation } CBA_POLICY; -// temp struct for sched +/*! \brief temporary struct for ULSCH sched */ typedef struct { - rnti_t rnti; uint16_t subframe; uint16_t serving_num; UE_ULSCH_STATUS status; } eNB_ULSCH_INFO; -// temp struct for sched +/*! \brief temp struct for DLSCH sched */ typedef struct { - rnti_t rnti; uint16_t weight; uint16_t subframe; uint16_t serving_num; UE_DLSCH_STATUS status; } eNB_DLSCH_INFO; +/*! \brief eNB overall statistics */ typedef struct { - /// BW + /// num BCCH PDU per CC + uint32_t total_num_bcch_pdu; + /// BCCH buffer size + uint32_t bcch_buffer; + /// total BCCH buffer size + uint32_t total_bcch_buffer; + /// BCCH MCS + uint32_t bcch_mcs; + + /// num CCCH PDU per CC + uint32_t total_num_ccch_pdu; + /// BCCH buffer size + uint32_t ccch_buffer; + /// total BCCH buffer size + uint32_t total_ccch_buffer; + /// BCCH MCS + uint32_t ccch_mcs; + +/// num active users uint16_t num_dlactive_UEs; /// available number of PRBs for a give SF uint16_t available_prbs; @@ -384,16 +446,23 @@ typedef struct { uint32_t total_dlsch_bytes_tx; // uint32_t total_dlsch_pdus_tx; - + + // here for RX // uint32_t ulsch_bitrate; // uint32_t ulsch_bytes_rx; // - uint64_t ulsch_pdus_rx; - // here for RX -} eNB_STATS; + uint64_t ulsch_pdus_rx; + uint32_t total_ulsch_bitrate; + // + uint32_t total_ulsch_bytes_rx; + // + uint32_t total_ulsch_pdus_rx; + +} eNB_STATS; +/*! \brief eNB statistics for the connected UEs*/ typedef struct { /// CRNTI of UE @@ -428,13 +497,7 @@ typedef struct { // total rb used for retransmission uint32_t total_rbs_used_retx; - /// preassigned mcs after rate adaptation - uint8_t ulsch_mcs1; - /// adjusted mcs - uint8_t ulsch_mcs2; - - - /// TX + /// TX /// Num pkt uint32_t num_pdu_tx[NB_RB_MAX]; /// num bytes @@ -466,6 +529,12 @@ typedef struct { // uint32_t avg_pdu_size; /// RX + + /// preassigned mcs after rate adaptation + uint8_t ulsch_mcs1; + /// adjusted mcs + uint8_t ulsch_mcs2; + /// estimated average pdu inter-departure time uint32_t avg_pdu_idt; /// estimated average pdu size @@ -474,6 +543,22 @@ typedef struct { uint32_t aggregated_pdu_size; uint32_t aggregated_pdu_arrival; + /// uplink transport block size + uint32_t ulsch_TBS; + + /// total rb used for a new uplink transmission + uint32_t num_retransmission_rx; + /// total rb used for a new uplink transmission + uint32_t rbs_used_rx; + /// total rb used for a new uplink retransmission + uint32_t rbs_used_retx_rx; + /// total rb used for a new uplink transmission + uint32_t total_rbs_used_rx; + /// normalized rx power + int32_t normalized_rx_power; + /// target rx power + int32_t target_rx_power; + /// num rx pdu uint32_t num_pdu_rx[NB_RB_MAX]; /// num bytes rx @@ -482,17 +567,28 @@ typedef struct { // uint32_t tti_goodput[NB_RB_MAX]; /// errors uint32_t num_errors_rx; + + uint64_t overhead_bytes_rx; + /// headers+ CE + padding bytes for a MAC PDU + uint64_t total_overhead_bytes_rx; + /// headers+ CE + padding bytes for a MAC PDU + uint64_t avg_overhead_bytes_rx; + // + uint32_t ulsch_bitrate; + //total + uint32_t total_ulsch_bitrate; /// overall - - // total MAC pdu bytes + /// MAC pdu bytes + uint64_t pdu_bytes_rx; + /// total MAC pdu bytes uint64_t total_pdu_bytes_rx; - // total num pdu + /// total num pdu uint32_t total_num_pdus_rx; - // num of error pdus + /// num of error pdus uint32_t total_num_errors_rx; } eNB_UE_STATS; - +/*! \brief eNB template for UE context information */ typedef struct { /// C-RNTI of UE rnti_t rnti; @@ -513,7 +609,7 @@ typedef struct { /// Current Aggregation Level for DCI uint8_t DCI_aggregation_min; - /// + /// size of DLSCH size in bit uint8_t DLSCH_dci_size_bits; /// DCI buffer for DLSCH @@ -552,7 +648,7 @@ typedef struct { /// UL Scheduling Request Received uint8_t ul_SR; - //Resource Block indication for each sub-band in MU-MIMO + ///Resource Block indication for each sub-band in MU-MIMO uint8_t rballoc_subband[8][50]; // Logical channel info for link with RLC @@ -566,44 +662,51 @@ typedef struct { /// phr information int8_t phr_info_configured; - //dl buffer info + ///dl buffer info uint32_t dl_buffer_info[MAX_NUM_LCID]; - + /// total downlink buffer info uint32_t dl_buffer_total; - + /// total downlink pdus uint32_t dl_pdus_total; - + /// downlink pdus for each LCID uint32_t dl_pdus_in_buffer[MAX_NUM_LCID]; - + /// creation time of the downlink buffer head for each LCID uint32_t dl_buffer_head_sdu_creation_time[MAX_NUM_LCID]; - + /// maximum creation time of the downlink buffer head across all LCID uint32_t dl_buffer_head_sdu_creation_time_max; - + /// a flag indicating that the downlink head SDU is segmented uint8_t dl_buffer_head_sdu_is_segmented[MAX_NUM_LCID]; - + /// size of remaining size to send for the downlink head SDU uint32_t dl_buffer_head_sdu_remaining_size_to_send[MAX_NUM_LCID]; - // uplink info + /// total uplink buffer size uint32_t ul_total_buffer; - + /// uplink buffer creation time for each LCID uint32_t ul_buffer_creation_time[MAX_NUM_LCGID]; - + /// maximum uplink buffer creation time across all the LCIDs uint32_t ul_buffer_creation_time_max; - + /// uplink buffer size per LCID uint32_t ul_buffer_info[MAX_NUM_LCGID]; /// UE tx power int32_t ue_tx_power; + /// stores the frame where the last TPC was transmitted + uint32_t pusch_tpc_tx_frame; + uint32_t pusch_tpc_tx_subframe; + uint32_t pucch_tpc_tx_frame; + uint32_t pucch_tpc_tx_subframe; + #ifdef LOCALIZATION eNB_UE_estimated_distances distance; #endif } UE_TEMPLATE; +/*! \brief scheduling control information set through an API (not used)*/ typedef struct { - //UL transmission bandwidth in RBs + ///UL transmission bandwidth in RBs uint8_t ul_bandwidth[MAX_NUM_LCID]; - //DL transmission bandwidth in RBs + ///DL transmission bandwidth in RBs uint8_t dl_bandwidth[MAX_NUM_LCID]; //To do GBR bearer @@ -611,13 +714,13 @@ typedef struct { uint8_t min_dl_bandwidth[MAX_NUM_LCID]; - //aggregated bit rate of non-gbr bearer per UE + ///aggregated bit rate of non-gbr bearer per UE uint64_t ue_AggregatedMaximumBitrateDL; - //aggregated bit rate of non-gbr bearer per UE + ///aggregated bit rate of non-gbr bearer per UE uint64_t ue_AggregatedMaximumBitrateUL; - //CQI scheduling interval in subframes. + ///CQI scheduling interval in subframes. uint16_t cqiSchedInterval; - //Contention resolution timer used during random access + ///Contention resolution timer used during random access uint8_t mac_ContentionResolutionTimer; uint16_t max_allowed_rbs[MAX_NUM_LCID]; @@ -626,8 +729,15 @@ typedef struct { uint16_t priority[MAX_NUM_LCID]; -} UE_sched_ctrl; + // resource scheduling information + uint8_t harq_pid[MAX_NUM_CCs]; + uint8_t round[MAX_NUM_CCs]; + uint8_t dl_pow_off[MAX_NUM_CCs]; + uint16_t pre_nb_available_rbs[MAX_NUM_CCs]; + unsigned char rballoc_sub_UE[MAX_NUM_CCs][N_RBG_MAX]; +} UE_sched_ctrl; +/*! \brief eNB template for the Random access information */ typedef struct { /// Flag to indicate this process is active boolean_t RA_active; @@ -674,30 +784,35 @@ typedef struct { } RA_TEMPLATE; -///subband bitmap coniguration (for ALU icic algo purpose), in test phase - +/*! \brief subband bitmap confguration (for ALU icic algo purpose), in test phase */ typedef struct { uint8_t sbmap[NUMBER_OF_SUBBANDS_MAX]; //13 = number of SB MAX for 100 PRB uint8_t periodicity; uint8_t first_subframe; uint8_t sb_size; uint8_t nb_active_sb; - } SBMAP_CONF; - -//end ALU's algo +/*! \brief UE list used by eNB to order UEs/CC for scheduling*/ typedef struct { + /// DLSCH pdu DLSCH_PDU DLSCH_pdu[MAX_NUM_CCs][2][NUMBER_OF_UE_MAX]; /// DCI template and MAC connection parameters for UEs UE_TEMPLATE UE_template[MAX_NUM_CCs][NUMBER_OF_UE_MAX]; /// DCI template and MAC connection for RA processes int pCC_id[NUMBER_OF_UE_MAX]; + /// sorted downlink component carrier for the scheduler int ordered_CCids[MAX_NUM_CCs][NUMBER_OF_UE_MAX]; + /// number of downlink active component carrier int numactiveCCs[NUMBER_OF_UE_MAX]; + /// sorted uplink component carrier for the scheduler int ordered_ULCCids[MAX_NUM_CCs][NUMBER_OF_UE_MAX]; + /// number of uplink active component carrier int numactiveULCCs[NUMBER_OF_UE_MAX]; + /// number of downlink active component carrier + uint8_t dl_CC_bitmap[NUMBER_OF_UE_MAX]; /// eNB to UE statistics eNB_UE_STATS eNB_UE_stats[MAX_NUM_CCs][NUMBER_OF_UE_MAX]; + /// scheduling control info UE_sched_ctrl UE_sched_ctrl[NUMBER_OF_UE_MAX]; int next[NUMBER_OF_UE_MAX]; @@ -709,6 +824,7 @@ typedef struct { boolean_t active[NUMBER_OF_UE_MAX]; } UE_list_t; +/*! \brief eNB common channels */ typedef struct { /// Outgoing DCI for PHY generated by eNB scheduler DCI_PDU DCI_pdu; @@ -748,12 +864,15 @@ typedef struct { MCH_PDU MCH_pdu; #endif #ifdef CBA + /// number of CBA groups uint8_t num_active_cba_groups; + /// RNTI for each CBA group uint16_t cba_rnti[NUM_MAX_CBA_GROUP]; + /// MCS for each CBA group uint8_t group_mcs[NUM_MAX_CBA_GROUP]; #endif } COMMON_channels_t; - +/*! \brief top level eNB MAC structure */ typedef struct { /// uint16_t Node_id; @@ -769,21 +888,43 @@ typedef struct { /// active flag for Other lcid // uint8_t lcid_active[NB_RB_MAX]; - // eNB stats + /// eNB stats eNB_STATS eNB_stats[MAX_NUM_CCs]; // MAC function execution peformance profiler + /// processing time of eNB scheduler time_stats_t eNB_scheduler; + /// processing time of eNB scheduler for SI time_stats_t schedule_si; + /// processing time of eNB scheduler for Random access time_stats_t schedule_ra; + /// processing time of eNB ULSCH scheduler time_stats_t schedule_ulsch; + /// processing time of eNB DCI generation time_stats_t fill_DLSCH_dci; + /// processing time of eNB MAC preprocessor time_stats_t schedule_dlsch_preprocessor; + /// processing time of eNB DLSCH scheduler time_stats_t schedule_dlsch; // include rlc_data_req + MAC header + preprocessor + /// processing time of eNB MCH scheduler time_stats_t schedule_mch; + /// processing time of eNB ULSCH reception time_stats_t rx_ulsch_sdu; // include rlc_data_ind } eNB_MAC_INST; +/* + * UE part + */ + +/*!\brief UE layer 2 status */ +typedef enum { + CONNECTION_OK=0, + CONNECTION_LOST, + PHY_RESYNCH, + PHY_HO_PRACH +} UE_L2_STATE_t; + +/*!\brief UE scheduling info */ typedef struct { /// buffer status for each lcgid uint8_t BSR[MAX_NUM_LCGID]; // should be more for mesh topology @@ -834,7 +975,7 @@ typedef struct { // Bucket size per lcid int16_t bucket_size[MAX_NUM_LCID]; } UE_SCHEDULING_INFO; - +/*!\brief Top level UE MAC structure */ typedef struct { uint16_t Node_id; /// frame counter @@ -933,19 +1074,25 @@ typedef struct { uint8_t msi_status;// could be an array if there are >1 MCH in one MBSFN area #endif //#ifdef CBA + /// CBA RNTI for each group uint16_t cba_rnti[NUM_MAX_CBA_GROUP]; + /// last SFN for CBA channel access uint8_t cba_last_access[NUM_MAX_CBA_GROUP]; //#endif - + /// total UE scheduler processing time time_stats_t ue_scheduler; // total - time_stats_t tx_ulsch_sdu; // inlcude rlc_data_req + mac header gen - time_stats_t rx_dlsch_sdu ; // include mac_rrc_data_ind or mac_rlc_status_ind+mac_rlc_data_ind and mac header parser + /// UE ULSCH tx processing time inlcuding RLC interface (rlc_data_req) and mac header generation + time_stats_t tx_ulsch_sdu; + /// UE DLSCH rx processing time inlcuding RLC interface (mac_rrc_data_ind or mac_rlc_status_ind+mac_rlc_data_ind) and mac header parser + time_stats_t rx_dlsch_sdu ; + /// UE query for MCH subframe processing time time_stats_t ue_query_mch; + /// UE MCH rx processing time time_stats_t rx_mch_sdu; - time_stats_t rx_si; // include mac_rrc_data_ind - + /// UE BCCH rx processing time including RLC interface (mac_rrc_data_ind) + time_stats_t rx_si; } UE_MAC_INST; - +/*! \brief ID of the neighboring cells used for HO*/ typedef struct { uint16_t cell_ids[6]; uint8_t n_adj_cells; diff --git a/openair2/LAYER2/MAC/eNB_scheduler.c b/openair2/LAYER2/MAC/eNB_scheduler.c index a1997db99e..041cabb686 100644 --- a/openair2/LAYER2/MAC/eNB_scheduler.c +++ b/openair2/LAYER2/MAC/eNB_scheduler.c @@ -116,13 +116,14 @@ void eNB_dlsch_ulsch_scheduler(module_id_t module_idP,uint8_t cooperation_flag, i = UE_list->head; while (i>=0) { - - rnti = UE_RNTI(module_idP,i); - LOG_D(MAC,"UE %d: rnti %x (%p)\n",i,rnti,mac_xface->get_eNB_UE_stats(module_idP,0,rnti)); + rnti = UE_RNTI(module_idP, i); + CC_id = UE_PCCID(module_idP, i); + LOG_D(MAC,"UE %d: rnti %x (%p)\n", i, rnti, + mac_xface->get_eNB_UE_stats(module_idP, CC_id, rnti)); next_i= UE_list->next[i]; - if (mac_xface->get_eNB_UE_stats(module_idP,0,rnti)==NULL) { - mac_remove_ue(module_idP,i,frameP, subframeP); + if (mac_xface->get_eNB_UE_stats(module_idP, CC_id, rnti)==NULL) { + mac_remove_ue(module_idP, i, frameP, subframeP); } i = next_i; } @@ -313,8 +314,8 @@ void eNB_dlsch_ulsch_scheduler(module_id_t module_idP,uint8_t cooperation_flag, break; } } else { //FDD - //schedule_ue_spec(module_idP,frameP,subframeP,nprb,nCCE,mbsfn_status); - //fill_DLSCH_dci(module_idP,frameP,subframeP,RBalloc,0,mbsfn_status); + schedule_ue_spec(module_idP,frameP,subframeP,nprb,nCCE,mbsfn_status); + fill_DLSCH_dci(module_idP,frameP,subframeP,RBalloc,0,mbsfn_status); schedule_ulsch(module_idP,frameP,cooperation_flag,3,7,nCCE); } @@ -349,9 +350,9 @@ void eNB_dlsch_ulsch_scheduler(module_id_t module_idP,uint8_t cooperation_flag, } } else { if (mac_xface->lte_frame_parms->frame_type == FDD) { //FDD - schedule_RA(module_idP,frameP, subframeP, 0, nprb, nCCE); + // schedule_RA(module_idP,frameP, subframeP, 0, nprb, nCCE); // schedule_ulsch(module_idP, frameP, cooperation_flag, 4, 8, nCCE); - //schedule_ue_spec(module_idP, frameP, subframeP, nprb, nCCE, mbsfn_status); + schedule_ue_spec(module_idP, frameP, subframeP, nprb, nCCE, mbsfn_status); fill_DLSCH_dci(module_idP, frameP, subframeP, RBalloc, 1, mbsfn_status); } @@ -368,9 +369,9 @@ void eNB_dlsch_ulsch_scheduler(module_id_t module_idP,uint8_t cooperation_flag, //schedule_RA(module_idP,frameP,subframeP,5,nprb,nCCE); if (mac_xface->lte_frame_parms->frame_type == FDD) { - // schedule_RA(module_idP,frameP,subframeP,1,nprb,nCCE); + schedule_RA(module_idP,frameP,subframeP,1,nprb,nCCE); // schedule_ulsch(module_idP,frameP,cooperation_flag,5,9,nCCE); - fill_DLSCH_dci(module_idP,frameP,subframeP,RBalloc,0,mbsfn_status); + fill_DLSCH_dci(module_idP,frameP,subframeP,RBalloc,1,mbsfn_status); } else if ((mac_xface->lte_frame_parms->tdd_config == 0) || // TDD Config 0 (mac_xface->lte_frame_parms->tdd_config == 6)) { // TDD Config 6 diff --git a/openair2/LAYER2/MAC/eNB_scheduler_bch.c b/openair2/LAYER2/MAC/eNB_scheduler_bch.c index 4bcd7754bf..963942d7dc 100644 --- a/openair2/LAYER2/MAC/eNB_scheduler_bch.c +++ b/openair2/LAYER2/MAC/eNB_scheduler_bch.c @@ -197,6 +197,10 @@ schedule_SI( eNB->common_channels[CC_id].bcch_active=1; nprbP[CC_id]=3; nCCEP[CC_id]=4; + eNB->eNB_stats[CC_id].total_num_bcch_pdu+=1; + eNB->eNB_stats[CC_id].bcch_buffer=bcch_sdu_length; + eNB->eNB_stats[CC_id].total_bcch_buffer+=bcch_sdu_length; + eNB->eNB_stats[CC_id].bcch_mcs=mcs; } else { eNB->common_channels[CC_id].bcch_active=0; nprbP[CC_id]=0; diff --git a/openair2/LAYER2/MAC/eNB_scheduler_dlsch.c b/openair2/LAYER2/MAC/eNB_scheduler_dlsch.c index 224c826a22..e8738f9be0 100644 --- a/openair2/LAYER2/MAC/eNB_scheduler_dlsch.c +++ b/openair2/LAYER2/MAC/eNB_scheduler_dlsch.c @@ -445,11 +445,9 @@ schedule_ue_spec( void *DLSCH_dci = NULL; LTE_eNB_UE_stats *eNB_UE_stats = NULL; uint16_t sdu_length_total = 0; - unsigned char DAI; - int i = 0; - uint8_t dl_pow_off[MAX_NUM_CCs][NUMBER_OF_UE_MAX]; - unsigned char rballoc_sub_UE[MAX_NUM_CCs][NUMBER_OF_UE_MAX][N_RBG_MAX]; - uint16_t pre_nb_available_rbs[MAX_NUM_CCs][NUMBER_OF_UE_MAX]; + // uint8_t dl_pow_off[MAX_NUM_CCs][NUMBER_OF_UE_MAX]; + // unsigned char rballoc_sub_UE[MAX_NUM_CCs][NUMBER_OF_UE_MAX][N_RBG_MAX]; + // uint16_t pre_nb_available_rbs[MAX_NUM_CCs][NUMBER_OF_UE_MAX]; int mcs; uint16_t min_rb_unit[MAX_NUM_CCs]; short ta_update = 0; @@ -457,6 +455,10 @@ schedule_ue_spec( UE_list_t *UE_list = &eNB->UE_list; LTE_DL_FRAME_PARMS *frame_parms[MAX_NUM_CCs]; int continue_flag=0; + int32_t normalized_rx_power, target_rx_power; + int32_t tpc=1; + static int32_t tpc_accumulated=0; + UE_sched_ctrl *ue_sched_ctl; if (UE_list->head==-1) { return; @@ -491,10 +493,7 @@ schedule_ue_spec( dlsch_scheduler_pre_processor(module_idP, frameP, subframeP, - dl_pow_off, - pre_nb_available_rbs, N_RBG, - rballoc_sub_UE, mbsfn_flag); stop_meas(&eNB->schedule_dlsch_preprocessor); VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_DLSCH_PREPROCESSOR,VCD_FUNCTION_OUT); @@ -510,6 +509,7 @@ schedule_ue_spec( continue_flag=0; // reset the flag to allow allocation for the remaining UEs rnti = UE_RNTI(module_idP,UE_id); eNB_UE_stats = mac_xface->get_eNB_UE_stats(module_idP,CC_id,rnti); + ue_sched_ctl = &UE_list->UE_sched_ctrl[UE_id]; if (rnti==NOT_A_RNTI) { LOG_D(MAC,"Cannot find rnti for UE_id %d (num_UEs %d)\n",UE_id,UE_list->num_UEs); @@ -523,9 +523,9 @@ schedule_ue_spec( continue_flag=1; } - if ((pre_nb_available_rbs[CC_id][UE_id] == 0) || (nCCE[CC_id] < (1<pre_nb_available_rbs[CC_id] == 0) || (nCCE[CC_id] < (1<pre_nb_available_rbs[CC_id], nCCE[CC_id], aggregation); //if(mac_xface->get_transmission_mode(module_idP,rnti)==5) continue_flag=1; //to next user (there might be rbs availiable for other UEs in TM5 // else @@ -552,11 +552,12 @@ schedule_ue_spec( continue; } - nb_available_rb = pre_nb_available_rbs[CC_id][UE_id]; + nb_available_rb = ue_sched_ctl->pre_nb_available_rbs[CC_id]; + harq_pid = ue_sched_ctl->harq_pid[CC_id]; + round = ue_sched_ctl->round[CC_id]; UE_list->eNB_UE_stats[CC_id][UE_id].crnti= rnti; UE_list->eNB_UE_stats[CC_id][UE_id].rrc_status=mac_eNB_get_rrc_status(module_idP,rnti); - mac_xface->get_ue_active_harq_pid(module_idP,CC_id,rnti,frameP,subframeP,&harq_pid,&round,0); - UE_list->eNB_UE_stats[CC_id][UE_id].harq_pid = harq_pid; + UE_list->eNB_UE_stats[CC_id][UE_id].harq_pid = harq_pid; UE_list->eNB_UE_stats[CC_id][UE_id].harq_round = round; sdu_length_total=0; @@ -613,17 +614,17 @@ schedule_ue_spec( if (nb_rb <= nb_available_rb) { - if(nb_rb == pre_nb_available_rbs[CC_id][UE_id]) { + if(nb_rb == ue_sched_ctl->pre_nb_available_rbs[CC_id]) { for(j=0; jN_RBG; j++) { // for indicating the rballoc for each sub-band - UE_list->UE_template[CC_id][UE_id].rballoc_subband[harq_pid][j] = rballoc_sub_UE[CC_id][UE_id][j]; + UE_list->UE_template[CC_id][UE_id].rballoc_subband[harq_pid][j] = ue_sched_ctl->rballoc_sub_UE[CC_id][j]; } } else { nb_rb_temp = nb_rb; j = 0; while((nb_rb_temp > 0) && (jN_RBG)) { - if(rballoc_sub_UE[CC_id][UE_id][j] == 1) { - UE_list->UE_template[CC_id][UE_id].rballoc_subband[harq_pid][j] = rballoc_sub_UE[CC_id][UE_id][j]; + if(ue_sched_ctl->rballoc_sub_UE[CC_id][j] == 1) { + UE_list->UE_template[CC_id][UE_id].rballoc_subband[harq_pid][j] = ue_sched_ctl->rballoc_sub_UE[CC_id][j]; if((j == frame_parms[CC_id]->N_RBG-1) && ((frame_parms[CC_id]->N_RB_DL == 25)|| @@ -645,7 +646,7 @@ schedule_ue_spec( PHY_vars_eNB_g[module_idP][CC_id]->mu_mimo_mode[UE_id].pre_nb_available_rbs = nb_rb; - PHY_vars_eNB_g[module_idP][CC_id]->mu_mimo_mode[UE_id].dl_pow_off = dl_pow_off[CC_id][UE_id]; + PHY_vars_eNB_g[module_idP][CC_id]->mu_mimo_mode[UE_id].dl_pow_off = ue_sched_ctl->dl_pow_off[CC_id]; for(j=0; jN_RBG; j++) { PHY_vars_eNB_g[module_idP][CC_id]->mu_mimo_mode[UE_id].rballoc_sub[j] = UE_list->UE_template[CC_id][UE_id].rballoc_subband[harq_pid][j]; @@ -761,11 +762,11 @@ schedule_ue_spec( ((DCI1E_5MHz_2A_M10PRB_TDD_t*)DLSCH_dci)->rv = round&3; ((DCI1E_5MHz_2A_M10PRB_TDD_t*)DLSCH_dci)->dai = (UE_list->UE_template[CC_id][UE_id].DAI-1)&3; - if(dl_pow_off[CC_id][UE_id] == 2) { - dl_pow_off[CC_id][UE_id] = 1; + if(ue_sched_ctl->dl_pow_off[CC_id] == 2) { + ue_sched_ctl->dl_pow_off[CC_id] = 1; } - ((DCI1E_5MHz_2A_M10PRB_TDD_t*)DLSCH_dci)->dl_power_off = dl_pow_off[CC_id][UE_id]; + ((DCI1E_5MHz_2A_M10PRB_TDD_t*)DLSCH_dci)->dl_power_off = ue_sched_ctl->dl_pow_off[CC_id]; // } break; @@ -828,9 +829,6 @@ schedule_ue_spec( } ta_len = ((eNB_UE_stats->timing_advance_update/update_TA)!=0) ? 2 : 0; - /*#else - ta_len = 0; - #endif*/ header_len_dcch = 2; // 2 bytes DCCH SDU subheader @@ -1007,17 +1005,17 @@ schedule_ue_spec( TBS = mac_xface->get_TBS_DL(eNB_UE_stats->dlsch_mcs1,nb_rb); } - if(nb_rb == pre_nb_available_rbs[CC_id][UE_id]) { + if(nb_rb == ue_sched_ctl->pre_nb_available_rbs[CC_id]) { for(j=0; jN_RBG; j++) { // for indicating the rballoc for each sub-band - UE_list->UE_template[CC_id][UE_id].rballoc_subband[harq_pid][j] = rballoc_sub_UE[CC_id][UE_id][j]; + UE_list->UE_template[CC_id][UE_id].rballoc_subband[harq_pid][j] = ue_sched_ctl->rballoc_sub_UE[CC_id][j]; } } else { nb_rb_temp = nb_rb; j = 0; while((nb_rb_temp > 0) && (jN_RBG)) { - if(rballoc_sub_UE[CC_id][UE_id][j] == 1) { - UE_list->UE_template[CC_id][UE_id].rballoc_subband[harq_pid][j] = rballoc_sub_UE[CC_id][UE_id][j]; + if(ue_sched_ctl->rballoc_sub_UE[CC_id][j] == 1) { + UE_list->UE_template[CC_id][UE_id].rballoc_subband[harq_pid][j] = ue_sched_ctl->rballoc_sub_UE[CC_id][j]; if ((j == frame_parms[CC_id]->N_RBG-1) && ((frame_parms[CC_id]->N_RB_DL == 25)|| @@ -1033,7 +1031,7 @@ schedule_ue_spec( } PHY_vars_eNB_g[module_idP][CC_id]->mu_mimo_mode[UE_id].pre_nb_available_rbs = nb_rb; - PHY_vars_eNB_g[module_idP][CC_id]->mu_mimo_mode[UE_id].dl_pow_off = dl_pow_off[CC_id][UE_id]; + PHY_vars_eNB_g[module_idP][CC_id]->mu_mimo_mode[UE_id].dl_pow_off = ue_sched_ctl->dl_pow_off[CC_id]; for(j=0; jN_RBG; j++) { PHY_vars_eNB_g[module_idP][CC_id]->mu_mimo_mode[UE_id].rballoc_sub[j] = UE_list->UE_template[CC_id][UE_id].rballoc_subband[harq_pid][j]; @@ -1047,8 +1045,8 @@ schedule_ue_spec( } // if we have decreased too much or we don't have enough RBs, increase MCS - while ((TBS < (sdu_length_total + header_len_dcch + header_len_dtch + ta_len)) && ((( dl_pow_off[CC_id][UE_id]>0) && (mcs<28)) - || ( (dl_pow_off[CC_id][UE_id]==0) && (mcs<=15)))) { + while ((TBS < (sdu_length_total + header_len_dcch + header_len_dtch + ta_len)) && ((( ue_sched_ctl->dl_pow_off[CC_id]>0) && (mcs<28)) + || ( (ue_sched_ctl->dl_pow_off[CC_id]==0) && (mcs<=15)))) { mcs++; TBS = mac_xface->get_TBS_DL(mcs,nb_rb); } @@ -1164,6 +1162,42 @@ schedule_ue_spec( update_ul_dci(module_idP,CC_id,rnti,UE_list->UE_template[CC_id][UE_id].DAI); } + // do PUCCH power control + // this is the normalized RX power + eNB_UE_stats = mac_xface->get_eNB_UE_stats(module_idP,CC_id,rnti); + normalized_rx_power = eNB_UE_stats->Po_PUCCH_dBm; + target_rx_power = mac_xface->get_target_pucch_rx_power(module_idP,CC_id) + 10; + + // this assumes accumulated tpc + // make sure that we are only sending a tpc update once a frame, otherwise the control loop will freak out + int32_t framex10psubframe = UE_list->UE_template[CC_id][UE_id].pucch_tpc_tx_frame*10+UE_list->UE_template[CC_id][UE_id].pucch_tpc_tx_subframe; + if (((framex10psubframe+10)<=(frameP*10+subframeP)) || //normal case + ((framex10psubframe>(frameP*10+subframeP)) && (((10240-framex10psubframe+frameP*10+subframeP)>=10)))) //frame wrap-around + if (eNB_UE_stats->Po_PUCCH_update == 1) { + eNB_UE_stats->Po_PUCCH_update = 0; + + UE_list->UE_template[CC_id][UE_id].pucch_tpc_tx_frame=frameP; + UE_list->UE_template[CC_id][UE_id].pucch_tpc_tx_subframe=subframeP; + if (normalized_rx_power>(target_rx_power+1)) { + tpc = 0; //-1 + tpc_accumulated--; + } else if (normalized_rx_power<(target_rx_power-1)) { + tpc = 2; //+1 + tpc_accumulated++; + } else { + tpc = 1; //0 + } + LOG_D(MAC,"[eNB %d] DLSCH scheduler: frame %d, subframe %d, harq_pid %d, tpc %d, accumulated %d, normalized/target rx power %d/%d\n", + module_idP,frameP, subframeP,harq_pid,tpc, + tpc_accumulated,normalized_rx_power,target_rx_power); + } // Po_PUCCH has been updated + else { + tpc = 1; //0 + } // time to do TPC update + else { + tpc = 1; //0 + } + switch (mac_xface->get_transmission_mode(module_idP,CC_id,rnti)) { case 1: case 2: @@ -1175,6 +1209,7 @@ schedule_ue_spec( ((DCI1_1_5MHz_TDD_t*)DLSCH_dci)->harq_pid = harq_pid; ((DCI1_1_5MHz_TDD_t*)DLSCH_dci)->ndi = 1-UE_list->UE_template[CC_id][UE_id].oldNDI[harq_pid]; ((DCI1_1_5MHz_TDD_t*)DLSCH_dci)->rv = 0; + ((DCI1_1_5MHz_TDD_t*)DLSCH_dci)->TPC = tpc; ((DCI1_1_5MHz_TDD_t*)DLSCH_dci)->dai = (UE_list->UE_template[CC_id][UE_id].DAI-1)&3; break; @@ -1183,6 +1218,7 @@ schedule_ue_spec( ((DCI1_5MHz_TDD_t*)DLSCH_dci)->harq_pid = harq_pid; ((DCI1_5MHz_TDD_t*)DLSCH_dci)->ndi = 1-UE_list->UE_template[CC_id][UE_id].oldNDI[harq_pid]; ((DCI1_5MHz_TDD_t*)DLSCH_dci)->rv = 0; + ((DCI1_5MHz_TDD_t*)DLSCH_dci)->TPC = tpc; ((DCI1_5MHz_TDD_t*)DLSCH_dci)->dai = (UE_list->UE_template[CC_id][UE_id].DAI-1)&3; LOG_D(MAC,"Format1 DCI: harq_pid %d, ndi %d\n",harq_pid,((DCI1_5MHz_TDD_t*)DLSCH_dci)->ndi); break; @@ -1192,6 +1228,7 @@ schedule_ue_spec( ((DCI1_10MHz_TDD_t*)DLSCH_dci)->harq_pid = harq_pid; ((DCI1_10MHz_TDD_t*)DLSCH_dci)->ndi = 1-UE_list->UE_template[CC_id][UE_id].oldNDI[harq_pid]; ((DCI1_10MHz_TDD_t*)DLSCH_dci)->rv = 0; + ((DCI1_10MHz_TDD_t*)DLSCH_dci)->TPC = tpc; ((DCI1_10MHz_TDD_t*)DLSCH_dci)->dai = (UE_list->UE_template[CC_id][UE_id].DAI-1)&3; break; @@ -1200,6 +1237,7 @@ schedule_ue_spec( ((DCI1_20MHz_TDD_t*)DLSCH_dci)->harq_pid = harq_pid; ((DCI1_20MHz_TDD_t*)DLSCH_dci)->ndi = 1-UE_list->UE_template[CC_id][UE_id].oldNDI[harq_pid]; ((DCI1_20MHz_TDD_t*)DLSCH_dci)->rv = 0; + ((DCI1_20MHz_TDD_t*)DLSCH_dci)->TPC = tpc; ((DCI1_20MHz_TDD_t*)DLSCH_dci)->dai = (UE_list->UE_template[CC_id][UE_id].DAI-1)&3; break; @@ -1208,6 +1246,7 @@ schedule_ue_spec( ((DCI1_5MHz_TDD_t*)DLSCH_dci)->harq_pid = harq_pid; ((DCI1_5MHz_TDD_t*)DLSCH_dci)->ndi = 1-UE_list->UE_template[CC_id][UE_id].oldNDI[harq_pid]; ((DCI1_5MHz_TDD_t*)DLSCH_dci)->rv = 0; + ((DCI1_5MHz_TDD_t*)DLSCH_dci)->TPC = tpc; ((DCI1_5MHz_TDD_t*)DLSCH_dci)->dai = (UE_list->UE_template[CC_id][UE_id].DAI-1)&3; break; } @@ -1218,6 +1257,7 @@ schedule_ue_spec( ((DCI1_1_5MHz_FDD_t*)DLSCH_dci)->harq_pid = harq_pid; ((DCI1_1_5MHz_FDD_t*)DLSCH_dci)->ndi = 1-UE_list->UE_template[CC_id][UE_id].oldNDI[harq_pid]; ((DCI1_1_5MHz_FDD_t*)DLSCH_dci)->rv = 0; + ((DCI1_1_5MHz_FDD_t*)DLSCH_dci)->TPC = tpc; break; case 25: @@ -1225,6 +1265,7 @@ schedule_ue_spec( ((DCI1_5MHz_FDD_t*)DLSCH_dci)->harq_pid = harq_pid; ((DCI1_5MHz_FDD_t*)DLSCH_dci)->ndi = 1-UE_list->UE_template[CC_id][UE_id].oldNDI[harq_pid]; ((DCI1_5MHz_FDD_t*)DLSCH_dci)->rv = 0; + ((DCI1_5MHz_FDD_t*)DLSCH_dci)->TPC = tpc; break; case 50: @@ -1232,6 +1273,7 @@ schedule_ue_spec( ((DCI1_10MHz_FDD_t*)DLSCH_dci)->harq_pid = harq_pid; ((DCI1_10MHz_FDD_t*)DLSCH_dci)->ndi = 1-UE_list->UE_template[CC_id][UE_id].oldNDI[harq_pid]; ((DCI1_10MHz_FDD_t*)DLSCH_dci)->rv = 0; + ((DCI1_10MHz_FDD_t*)DLSCH_dci)->TPC = tpc; break; case 100: @@ -1239,6 +1281,7 @@ schedule_ue_spec( ((DCI1_20MHz_FDD_t*)DLSCH_dci)->harq_pid = harq_pid; ((DCI1_20MHz_FDD_t*)DLSCH_dci)->ndi = 1-UE_list->UE_template[CC_id][UE_id].oldNDI[harq_pid]; ((DCI1_20MHz_FDD_t*)DLSCH_dci)->rv = 0; + ((DCI1_20MHz_FDD_t*)DLSCH_dci)->TPC = tpc; break; default: @@ -1246,6 +1289,7 @@ schedule_ue_spec( ((DCI1_5MHz_FDD_t*)DLSCH_dci)->harq_pid = harq_pid; ((DCI1_5MHz_FDD_t*)DLSCH_dci)->ndi = 1-UE_list->UE_template[CC_id][UE_id].oldNDI[harq_pid]; ((DCI1_5MHz_FDD_t*)DLSCH_dci)->rv = 0; + ((DCI1_5MHz_FDD_t*)DLSCH_dci)->TPC = tpc; break; } } @@ -1266,6 +1310,7 @@ schedule_ue_spec( ((DCI2A_1_5MHz_2A_TDD_t*)DLSCH_dci)->rv2 = 1; ((DCI2A_1_5MHz_2A_TDD_t*)DLSCH_dci)->dai = (UE_list->UE_template[CC_id][UE_id].DAI-1)&3; + ((DCI2A_1_5MHz_2A_TDD_t*)DLSCH_dci)->TPC = tpc; break; case 25: @@ -1274,6 +1319,7 @@ schedule_ue_spec( ((DCI2A_5MHz_2A_TDD_t*)DLSCH_dci)->ndi1 = 1-UE_list->UE_template[CC_id][UE_id].oldNDI[harq_pid]; ((DCI2A_5MHz_2A_TDD_t*)DLSCH_dci)->rv1 = 0; ((DCI2A_5MHz_2A_TDD_t*)DLSCH_dci)->dai = (UE_list->UE_template[CC_id][UE_id].DAI-1)&3; + ((DCI2A_5MHz_2A_TDD_t*)DLSCH_dci)->TPC = tpc; // deactivate TB2 ((DCI2A_5MHz_2A_TDD_t*)DLSCH_dci)->mcs2 = 0; @@ -1288,6 +1334,7 @@ schedule_ue_spec( ((DCI2A_10MHz_2A_TDD_t*)DLSCH_dci)->ndi1 = 1-UE_list->UE_template[CC_id][UE_id].oldNDI[harq_pid]; ((DCI2A_10MHz_2A_TDD_t*)DLSCH_dci)->rv1 = 0; ((DCI2A_10MHz_2A_TDD_t*)DLSCH_dci)->dai = (UE_list->UE_template[CC_id][UE_id].DAI-1)&3; + ((DCI2A_10MHz_2A_TDD_t*)DLSCH_dci)->TPC = tpc; // deactivate TB2 ((DCI2A_10MHz_2A_TDD_t*)DLSCH_dci)->mcs2 = 0; @@ -1300,6 +1347,7 @@ schedule_ue_spec( ((DCI2A_20MHz_2A_TDD_t*)DLSCH_dci)->ndi1 = 1-UE_list->UE_template[CC_id][UE_id].oldNDI[harq_pid]; ((DCI2A_20MHz_2A_TDD_t*)DLSCH_dci)->rv1 = 0; ((DCI2A_20MHz_2A_TDD_t*)DLSCH_dci)->dai = (UE_list->UE_template[CC_id][UE_id].DAI-1)&3; + ((DCI2A_20MHz_2A_TDD_t*)DLSCH_dci)->TPC = tpc; // deactivate TB2 ((DCI2A_20MHz_2A_TDD_t*)DLSCH_dci)->mcs2 = 0; @@ -1312,6 +1360,7 @@ schedule_ue_spec( ((DCI2A_5MHz_2A_TDD_t*)DLSCH_dci)->ndi1 = 1-UE_list->UE_template[CC_id][UE_id].oldNDI[harq_pid]; ((DCI2A_5MHz_2A_TDD_t*)DLSCH_dci)->rv1 = 0; ((DCI2A_5MHz_2A_TDD_t*)DLSCH_dci)->dai = (UE_list->UE_template[CC_id][UE_id].DAI-1)&3; + ((DCI2A_5MHz_2A_TDD_t*)DLSCH_dci)->TPC = tpc; // deactivate TB2 ((DCI2A_5MHz_2A_TDD_t*)DLSCH_dci)->mcs2 = 0; @@ -1325,6 +1374,7 @@ schedule_ue_spec( ((DCI2A_1_5MHz_2A_FDD_t*)DLSCH_dci)->harq_pid = harq_pid; ((DCI2A_1_5MHz_2A_FDD_t*)DLSCH_dci)->ndi1 = 1-UE_list->UE_template[CC_id][UE_id].oldNDI[harq_pid]; ((DCI2A_1_5MHz_2A_FDD_t*)DLSCH_dci)->rv1 = 0; + ((DCI2A_1_5MHz_2A_FDD_t*)DLSCH_dci)->TPC = tpc; // deactivate TB2 ((DCI2A_1_5MHz_2A_FDD_t*)DLSCH_dci)->mcs2 = 0; @@ -1336,6 +1386,7 @@ schedule_ue_spec( ((DCI2A_5MHz_2A_FDD_t*)DLSCH_dci)->harq_pid = harq_pid; ((DCI2A_5MHz_2A_FDD_t*)DLSCH_dci)->ndi1 = 1-UE_list->UE_template[CC_id][UE_id].oldNDI[harq_pid]; ((DCI2A_5MHz_2A_FDD_t*)DLSCH_dci)->rv1 = 0; + ((DCI2A_5MHz_2A_FDD_t*)DLSCH_dci)->TPC = tpc; // deactivate TB2 ((DCI2A_5MHz_2A_FDD_t*)DLSCH_dci)->mcs2 = 0; @@ -1347,6 +1398,7 @@ schedule_ue_spec( ((DCI2A_10MHz_2A_FDD_t*)DLSCH_dci)->harq_pid = harq_pid; ((DCI2A_10MHz_2A_FDD_t*)DLSCH_dci)->ndi1 = 1-UE_list->UE_template[CC_id][UE_id].oldNDI[harq_pid]; ((DCI2A_10MHz_2A_FDD_t*)DLSCH_dci)->rv1 = 0; + ((DCI2A_10MHz_2A_FDD_t*)DLSCH_dci)->TPC = tpc; // deactivate TB2 ((DCI2A_10MHz_2A_FDD_t*)DLSCH_dci)->mcs2 = 0; ((DCI2A_10MHz_2A_FDD_t*)DLSCH_dci)->rv2 = 1; @@ -1357,6 +1409,8 @@ schedule_ue_spec( ((DCI2A_20MHz_2A_FDD_t*)DLSCH_dci)->harq_pid = harq_pid; ((DCI2A_20MHz_2A_FDD_t*)DLSCH_dci)->ndi1 = 1-UE_list->UE_template[CC_id][UE_id].oldNDI[harq_pid]; ((DCI2A_20MHz_2A_FDD_t*)DLSCH_dci)->rv1 = 0; + ((DCI2A_20MHz_2A_FDD_t*)DLSCH_dci)->TPC = tpc; + // deactivate TB2 ((DCI2A_20MHz_2A_FDD_t*)DLSCH_dci)->mcs2 = 0; ((DCI2A_20MHz_2A_FDD_t*)DLSCH_dci)->rv2 = 1; @@ -1367,6 +1421,7 @@ schedule_ue_spec( ((DCI2A_5MHz_2A_FDD_t*)DLSCH_dci)->harq_pid = harq_pid; ((DCI2A_5MHz_2A_FDD_t*)DLSCH_dci)->ndi1 = 1-UE_list->UE_template[CC_id][UE_id].oldNDI[harq_pid]; ((DCI2A_5MHz_2A_FDD_t*)DLSCH_dci)->rv1 = 0; + ((DCI2A_5MHz_2A_FDD_t*)DLSCH_dci)->TPC = tpc; // deactivate TB2 ((DCI2A_5MHz_2A_FDD_t*)DLSCH_dci)->mcs2 = 0; @@ -1384,6 +1439,7 @@ schedule_ue_spec( ((DCI2_5MHz_2A_TDD_t*)DLSCH_dci)->ndi1 = 1; ((DCI2_5MHz_2A_TDD_t*)DLSCH_dci)->rv1 = round&3; ((DCI2_5MHz_2A_TDD_t*)DLSCH_dci)->dai = (UE_list->UE_template[CC_id][UE_id].DAI-1)&3; + ((DCI2_5MHz_2A_TDD_t*)DLSCH_dci)->TPC = tpc; //} /* else { @@ -1403,12 +1459,13 @@ schedule_ue_spec( ((DCI1E_5MHz_2A_M10PRB_TDD_t*)DLSCH_dci)->ndi = 1; ((DCI1E_5MHz_2A_M10PRB_TDD_t*)DLSCH_dci)->rv = round&3; ((DCI1E_5MHz_2A_M10PRB_TDD_t*)DLSCH_dci)->dai = (UE_list->UE_template[CC_id][UE_id].DAI-1)&3; + ((DCI1E_5MHz_2A_M10PRB_TDD_t*)DLSCH_dci)->TPC = tpc; - if(dl_pow_off[CC_id][UE_id] == 2) { - dl_pow_off[CC_id][UE_id] = 1; + if(ue_sched_ctl->dl_pow_off[CC_id] == 2) { + ue_sched_ctl->dl_pow_off[CC_id] = 1; } - ((DCI1E_5MHz_2A_M10PRB_TDD_t*)DLSCH_dci)->dl_power_off = dl_pow_off[CC_id][UE_id]; + ((DCI1E_5MHz_2A_M10PRB_TDD_t*)DLSCH_dci)->dl_power_off = ue_sched_ctl->dl_pow_off[CC_id]; ((DCI1E_5MHz_2A_M10PRB_TDD_t*)DLSCH_dci)->tpmi = 5; break; @@ -1420,6 +1477,8 @@ schedule_ue_spec( ((DCI1E_5MHz_2A_M10PRB_TDD_t*)DLSCH_dci)->dai = (UE_list->UE_template[CC_id][UE_id].DAI-1)&3; ((DCI1E_5MHz_2A_M10PRB_TDD_t*)DLSCH_dci)->dl_power_off = 1; ((DCI1E_5MHz_2A_M10PRB_TDD_t*)DLSCH_dci)->tpmi = 5; + ((DCI1E_5MHz_2A_M10PRB_TDD_t*)DLSCH_dci)->TPC = tpc; + break; } @@ -1481,7 +1540,6 @@ fill_DLSCH_dci( UE_list_t *UE_list = &eNB->UE_list; RA_TEMPLATE *RA_template; - start_meas(&eNB->fill_DLSCH_dci); VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_FILL_DLSCH_DCI,VCD_FUNCTION_IN); @@ -2093,7 +2151,8 @@ fill_DLSCH_dci( // clear scheduling flag eNB_dlsch_info[module_idP][CC_id][UE_id].status = S_DL_WAITING; rnti = UE_RNTI(module_idP,UE_id); - mac_xface->get_ue_active_harq_pid(module_idP,CC_id,rnti,frameP,subframeP,&harq_pid,&round,0); + // mac_xface->get_ue_active_harq_pid(module_idP,CC_id,rnti,frameP,subframeP,&harq_pid,&round,0); + harq_pid = UE_list->UE_sched_ctrl[UE_id].harq_pid[CC_id]; nb_rb = UE_list->UE_template[CC_id][UE_id].nb_rb[harq_pid]; DLSCH_dci = (void *)UE_list->UE_template[CC_id][UE_id].DLSCH_DCI[harq_pid]; diff --git a/openair2/LAYER2/MAC/eNB_scheduler_ulsch.c b/openair2/LAYER2/MAC/eNB_scheduler_ulsch.c index 03c3bb82e8..8b79090f3d 100644 --- a/openair2/LAYER2/MAC/eNB_scheduler_ulsch.c +++ b/openair2/LAYER2/MAC/eNB_scheduler_ulsch.c @@ -104,9 +104,12 @@ void rx_sdu( } LOG_D(MAC,"[eNB %d] CC_id %d Received ULSCH sdu from PHY (rnti %x, UE_id %d), parsing header\n",enb_mod_idP,CC_idP,rntiP,UE_id); - + payload_ptr = parse_ulsch_header(sduP,&num_ce,&num_sdu,rx_ces,rx_lcids,rx_lengths,sdu_lenP); - + + eNB->eNB_stats[CC_idP].ulsch_bytes_rx=sdu_lenP; + eNB->eNB_stats[CC_idP].total_ulsch_bytes_rx+=sdu_lenP; + eNB->eNB_stats[CC_idP].total_ulsch_pdus_rx+=1; // control element for (i=0; i> 6); + + LOG_D(MAC, "[eNB %d] CC_id %d MAC CE_LCID %d : Received short BSR LCGID = %u bsr = %d\n", + enb_mod_idP, CC_idP, rx_ces[i], lcgid, payload_ptr[0] & 0x3f); + if (UE_id != -1) { - uint8_t lcgid; - lcgid = (payload_ptr[0] >> 6); - LOG_D(MAC, "[eNB %d] CC_id %d MAC CE_LCID %d : Received short BSR LCGID = %u bsr = %d\n", - enb_mod_idP, CC_idP, rx_ces[i], lcgid, payload_ptr[0] & 0x3f); + UE_list->UE_template[CC_idP][UE_id].bsr_info[lcgid] = (payload_ptr[0] & 0x3f); if (UE_list->UE_template[CC_idP][UE_id].ul_buffer_creation_time[lcgid] == 0 ) { UE_list->UE_template[CC_idP][UE_id].ul_buffer_creation_time[lcgid]=frameP; } } + else { + } payload_ptr += 1;//sizeof(SHORT_BSR); // fixme } break; @@ -220,17 +235,19 @@ void rx_sdu( if (UE_id < 0) { memcpy(&eNB->common_channels[CC_idP].RA_template[ii].cont_res_id[0],payload_ptr,6); - LOG_I(MAC,"[eNB %d][RAPROC] CC_id %d Frame %d CCCH: Received RRCConnectionRequest: length %d, offset %d\n", + LOG_I(MAC,"[eNB %d][RAPROC] CC_id %d Frame %d CCCH: Received Msg3: length %d, offset %d\n", enb_mod_idP,CC_idP,frameP,rx_lengths[ii],payload_ptr-sduP); if ((UE_id=add_new_ue(enb_mod_idP,CC_idP,eNB->common_channels[CC_idP].RA_template[ii].rnti,harq_pidP)) == -1 ) { mac_xface->macphy_exit("[MAC][eNB] Max user count reached\n"); + // kill RA procedure } else LOG_I(MAC,"[eNB %d][RAPROC] CC_id %d Frame %d Added user with rnti %x => UE %d\n", enb_mod_idP,CC_idP,frameP,eNB->common_channels[CC_idP].RA_template[ii].rnti,UE_id); } else { - LOG_I(MAC,"[eNB %d][RAPROC] CC_id %d Frame %d CCCH: Received RRCConnectionReestablishment from UE %d: length %d, offset %d\n", + LOG_I(MAC,"[eNB %d][RAPROC] CC_id %d Frame %d CCCH: Received Msg3 from already registered UE %d: length %d, offset %d\n", enb_mod_idP,CC_idP,frameP,UE_id,rx_lengths[ii],payload_ptr-sduP); + // kill RA procedure } if (Is_rrc_registered == 1) @@ -273,26 +290,28 @@ void rx_sdu( LOG_T(MAC,"\n"); #endif - // This check is just to make sure we didn't get a bogus SDU length, to be removed ... - if (rx_lengths[i] UL-DCCH, received %d bytes form UE %d on LCID %d \n", - enb_mod_idP,CC_idP,frameP, rx_lengths[i], UE_id, rx_lcids[i]); + if (UE_id != -1) { + // This check is just to make sure we didn't get a bogus SDU length, to be removed ... + if (rx_lengths[i] UL-DCCH, received %d bytes form UE %d on LCID %d \n", + enb_mod_idP,CC_idP,frameP, rx_lengths[i], UE_id, rx_lcids[i]); - mac_rlc_data_ind( - enb_mod_idP, - rntiP, + mac_rlc_data_ind( + enb_mod_idP, + rntiP, enb_mod_idP, - frameP, - ENB_FLAG_YES, - MBMS_FLAG_NO, - rx_lcids[i], - (char *)payload_ptr, - rx_lengths[i], - 1, - NULL);//(unsigned int*)crc_status); - UE_list->eNB_UE_stats[CC_idP][UE_id].num_pdu_rx[rx_lcids[i]]+=1; - UE_list->eNB_UE_stats[CC_idP][UE_id].num_bytes_rx[rx_lcids[i]]+=rx_lengths[i]; - } + frameP, + ENB_FLAG_YES, + MBMS_FLAG_NO, + rx_lcids[i], + (char *)payload_ptr, + rx_lengths[i], + 1, + NULL);//(unsigned int*)crc_status); + UE_list->eNB_UE_stats[CC_idP][UE_id].num_pdu_rx[rx_lcids[i]]+=1; + UE_list->eNB_UE_stats[CC_idP][UE_id].num_bytes_rx[rx_lcids[i]]+=rx_lengths[i]; + } + } /* UE_id != -1 */ // } break; @@ -313,40 +332,43 @@ void rx_sdu( LOG_D(MAC,"[eNB %d] CC_id %d Frame %d : ULSCH -> UL-DTCH, received %d bytes from UE %d for lcid %d\n", enb_mod_idP,CC_idP,frameP, rx_lengths[i], UE_id,rx_lcids[i]); - if ((rx_lengths[i] 0) ) { // MAX SIZE OF transport block - mac_rlc_data_ind( - enb_mod_idP, - rntiP, - enb_mod_idP, - frameP, - ENB_FLAG_YES, - MBMS_FLAG_NO, - DTCH, - (char *)payload_ptr, - rx_lengths[i], - 1, - NULL);//(unsigned int*)crc_status); - UE_list->eNB_UE_stats[CC_idP][UE_id].num_pdu_rx[rx_lcids[i]]+=1; - UE_list->eNB_UE_stats[CC_idP][UE_id].num_bytes_rx[rx_lcids[i]]+=rx_lengths[i]; - } + if (UE_id != -1) { + if ((rx_lengths[i] 0) ) { // MAX SIZE OF transport block + mac_rlc_data_ind( + enb_mod_idP, + rntiP, + enb_mod_idP, + frameP, + ENB_FLAG_YES, + MBMS_FLAG_NO, + DTCH, + (char *)payload_ptr, + rx_lengths[i], + 1, + NULL);//(unsigned int*)crc_status); + UE_list->eNB_UE_stats[CC_idP][UE_id].num_pdu_rx[rx_lcids[i]]+=1; + UE_list->eNB_UE_stats[CC_idP][UE_id].num_bytes_rx[rx_lcids[i]]+=rx_lengths[i]; + } + } /* UE_id != -1 */ // } break; default : //if (rx_lcids[i] >= DTCH) { - UE_list->eNB_UE_stats[CC_idP][UE_id].num_errors_rx+=1; + if (UE_id != -1) + UE_list->eNB_UE_stats[CC_idP][UE_id].num_errors_rx+=1; LOG_E(MAC,"[eNB %d] CC_id %d Frame %d : received unsupported or unknown LCID %d from UE %d ", enb_mod_idP, CC_idP, frameP, rx_lcids[i], UE_id); break; } payload_ptr+=rx_lengths[i]; - } /* NN--> FK: we could either check the payload, or use a phy helper to detect a false msg3 */ if ((num_sdu == 0) && (num_ce==0)) { - UE_list->eNB_UE_stats[CC_idP][UE_id].total_num_errors_rx+=1; + if (UE_id != -1) + UE_list->eNB_UE_stats[CC_idP][UE_id].total_num_errors_rx+=1; if (msg3_flagP != NULL) { if( *msg3_flagP == 1 ) { @@ -355,8 +377,11 @@ void rx_sdu( } } } else { - UE_list->eNB_UE_stats[CC_idP][UE_id].total_pdu_bytes_rx+=sdu_lenP; - UE_list->eNB_UE_stats[CC_idP][UE_id].total_num_pdus_rx+=1; + if (UE_id != -1) { + UE_list->eNB_UE_stats[CC_idP][UE_id].pdu_bytes_rx=sdu_lenP; + UE_list->eNB_UE_stats[CC_idP][UE_id].total_pdu_bytes_rx+=sdu_lenP; + UE_list->eNB_UE_stats[CC_idP][UE_id].total_num_pdus_rx+=1; + } } VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_RX_SDU,0); @@ -606,10 +631,17 @@ void schedule_ulsch(module_id_t module_idP, frame_t frameP,unsigned char coopera if ((eNB->common_channels[CC_id].RA_template[i].RA_active == TRUE) && (eNB->common_channels[CC_id].RA_template[i].generate_rar == 0) && (eNB->common_channels[CC_id].RA_template[i].Msg3_subframe == sched_subframe)) { + //leave out first RB for PUCCH first_rb[CC_id]++; break; } } + + /* + if (mac_xface->is_prach_subframe(&(mac_xface->lte_frame_parms),frameP,subframeP)) { + first_rb[CC_id] = (mac_xface->get_prach_prb_offset(&(mac_xface->lte_frame_parms), + */ + } schedule_ulsch_rnti(module_idP, cooperation_flag, frameP, subframeP, sched_subframe, nCCE, nCCE_available, first_rb); @@ -645,7 +677,7 @@ void schedule_ulsch_rnti(module_id_t module_idP, DCI_PDU *DCI_pdu; uint8_t status = 0; uint8_t rb_table_index = -1; - uint16_t TBS = 0,i; + uint16_t TBS = 0; int32_t buffer_occupancy=0; uint32_t cqi_req,cshift,ndi,mcs,rballoc,tpc; int32_t normalized_rx_power, target_rx_power=-90; @@ -718,8 +750,6 @@ void schedule_ulsch_rnti(module_id_t module_idP, LOG_T(MAC,"[eNB %d] Frame %d, subframeP %d, UE %d CC %d : got harq pid %d round %d (nCCE %d, rnti %x,mode %s)\n", module_idP,frameP,subframeP,UE_id,CC_id, harq_pid, round,nCCE[CC_id],rnti,mode_string[eNB_UE_stats->mode]); - - #ifndef EXMIMO_IOT if (((UE_is_to_be_scheduled(module_idP,CC_id,UE_id)>0)) || (round>0) || ((frameP%10)==0)) @@ -739,10 +769,16 @@ void schedule_ulsch_rnti(module_id_t module_idP, // this is the normalized RX power and this should be constant (regardless of mcs normalized_rx_power = eNB_UE_stats->UL_rssi[0]; - target_rx_power = mac_xface->get_target_ul_rx_power(module_idP,CC_id); + target_rx_power = mac_xface->get_target_pusch_rx_power(module_idP,CC_id); // this assumes accumulated tpc - if (subframeP==0) { + // make sure that we are only sending a tpc update once a frame, otherwise the control loop will freak out + int32_t framex10psubframe = UE_template->pusch_tpc_tx_frame*10+UE_template->pusch_tpc_tx_subframe; + if (((framex10psubframe+10)<=(frameP*10+subframeP)) || //normal case + ((framex10psubframe>(frameP*10+subframeP)) && (((10240-framex10psubframe+frameP*10+subframeP)>=10)))) //frame wrap-around + { + UE_template->pusch_tpc_tx_frame=frameP; + UE_template->pusch_tpc_tx_subframe=subframeP; if (normalized_rx_power>(target_rx_power+1)) { tpc = 0; //-1 tpc_accumulated--; @@ -752,21 +788,24 @@ void schedule_ulsch_rnti(module_id_t module_idP, } else { tpc = 1; //0 } - } else { tpc = 1; //0 } - LOG_D(MAC,"[eNB %d] ULSCH scheduler: subframe %d, harq_pid %d, tpc %d, accumulated %d, normalized/target rx power %d/%d\n",module_idP,subframeP,harq_pid,tpc, - tpc_accumulated,normalized_rx_power,target_rx_power); - + if (tpc!=1) { + LOG_D(MAC,"[eNB %d] ULSCH scheduler: frame %d, subframe %d, harq_pid %d, tpc %d, accumulated %d, normalized/target rx power %d/%d\n", + module_idP,frameP,subframeP,harq_pid,tpc, + tpc_accumulated,normalized_rx_power,target_rx_power); + } // new transmission if (round==0) { ndi = 1-UE_template->oldNDI_UL[harq_pid]; UE_template->oldNDI_UL[harq_pid]=ndi; - UE_list->eNB_UE_stats[CC_id][UE_id].ulsch_mcs2=UE_template->pre_assigned_mcs_ul; + UE_list->eNB_UE_stats[CC_id][UE_id].normalized_rx_power=normalized_rx_power; + UE_list->eNB_UE_stats[CC_id][UE_id].target_rx_power=target_rx_power; + UE_list->eNB_UE_stats[CC_id][UE_id].ulsch_mcs1=UE_template->pre_assigned_mcs_ul; mcs = cmin (UE_template->pre_assigned_mcs_ul, openair_daq_vars.target_ue_ul_mcs); // adjust, based on user-defined MCS if (UE_template->pre_allocated_rb_table_index_ul >=0) { @@ -785,6 +824,8 @@ void schedule_ulsch_rnti(module_id_t module_idP, } TBS = mac_xface->get_TBS_UL(mcs,rb_table[rb_table_index]); + UE_list->eNB_UE_stats[CC_id][UE_id].total_rbs_used_rx+=rb_table[rb_table_index]; + UE_list->eNB_UE_stats[CC_id][UE_id].ulsch_TBS=TBS; buffer_occupancy -= TBS; rballoc = mac_xface->computeRIV(frame_parms->N_RB_UL, first_rb[CC_id], @@ -814,17 +855,22 @@ void schedule_ulsch_rnti(module_id_t module_idP, } - LOG_D(MAC,"[eNB %d][PUSCH %d/%x] CC_id %d Frame %d subframeP %d Scheduled UE retransmission (mcs %d, first rb %d, nb_rb %d, TBS %d, harq_pid %d, round %d)\n", + LOG_D(MAC,"[eNB %d][PUSCH %d/%x] CC_id %d Frame %d subframeP %d Scheduled UE retransmission (mcs %d, first rb %d, nb_rb %d, harq_pid %d, round %d)\n", module_idP,UE_id,rnti,CC_id,frameP,subframeP,mcs, first_rb[CC_id],UE_template->nb_rb_ul[harq_pid], - TBS,//mac_xface->get_TBS_UL(mcs,UE_template->nb_rb_ul[harq_pid]), - harq_pid, round); + harq_pid, round); rballoc = mac_xface->computeRIV(frame_parms->N_RB_UL, first_rb[CC_id], UE_template->nb_rb_ul[harq_pid]); first_rb[CC_id]+=UE_template->nb_rb_ul[harq_pid]; // increment for next UE allocation - } + + UE_list->eNB_UE_stats[CC_id][UE_id].num_retransmission_rx+=1; + UE_list->eNB_UE_stats[CC_id][UE_id].rbs_used_retx_rx=UE_template->nb_rb_ul[harq_pid]; + UE_list->eNB_UE_stats[CC_id][UE_id].total_rbs_used_rx+=UE_template->nb_rb_ul[harq_pid]; + UE_list->eNB_UE_stats[CC_id][UE_id].ulsch_mcs1=mcs; + UE_list->eNB_UE_stats[CC_id][UE_id].ulsch_mcs2=mcs; + } // Cyclic shift for DM RS if(cooperation_flag == 2) { diff --git a/openair2/LAYER2/MAC/main.c b/openair2/LAYER2/MAC/main.c index 54c8f4ec99..8a73c9298f 100644 --- a/openair2/LAYER2/MAC/main.c +++ b/openair2/LAYER2/MAC/main.c @@ -534,7 +534,11 @@ int l2_init(LTE_DL_FRAME_PARMS *frame_parms,int eMBMS_active, char *uecap_xer,ui mac_xface->get_mu_mimo_mode = get_mu_mimo_mode; mac_xface->get_hundred_times_delta_TF = get_hundred_times_delta_IF_mac; - mac_xface->get_target_ul_rx_power = get_target_ul_rx_power; + mac_xface->get_target_pusch_rx_power = get_target_pusch_rx_power; + mac_xface->get_target_pucch_rx_power = get_target_pucch_rx_power; + + mac_xface->get_prach_prb_offset = get_prach_prb_offset; + mac_xface->is_prach_subframe = is_prach_subframe; #ifdef Rel10 mac_xface->get_mch_sdu = get_mch_sdu; diff --git a/openair2/LAYER2/MAC/pre_processor.c b/openair2/LAYER2/MAC/pre_processor.c index ce09cb42b5..e4f113c77a 100644 --- a/openair2/LAYER2/MAC/pre_processor.c +++ b/openair2/LAYER2/MAC/pre_processor.c @@ -157,7 +157,7 @@ void assign_rbs_required (module_id_t Mod_id, LTE_eNB_UE_stats *eNB_UE_stats[MAX_NUM_CCs]; int UE_id,n,i,j,CC_id,pCCid,tmp; UE_list_t *UE_list = &eNB_mac_inst[Mod_id].UE_list; - UE_TEMPLATE *UE_template; + // UE_TEMPLATE *UE_template; LTE_DL_FRAME_PARMS *frame_parms[MAX_NUM_CCs]; // clear rb allocations across all CC_ids @@ -250,12 +250,14 @@ void assign_rbs_required (module_id_t Mod_id, int maxround(module_id_t Mod_id,uint16_t rnti,int frame,sub_frame_t subframe,uint8_t ul_flag ) { - uint8_t round,round_max=0,harq_pid; + uint8_t round,round_max=0,UE_id; int CC_id; + UE_list_t *UE_list = &eNB_mac_inst[Mod_id].UE_list; for (CC_id=0; CC_idget_ue_active_harq_pid(Mod_id,CC_id,rnti,frame,subframe,&harq_pid,&round,ul_flag); + UE_id = find_UE_id(Mod_id,rnti); + round = UE_list->UE_sched_ctrl[UE_id].round[CC_id]; if (round > round_max) { round_max = round; } @@ -303,7 +305,7 @@ void sort_UEs (module_id_t Mod_idP, int UE_id1,UE_id2; int pCC_id1,pCC_id2; int cqi1,cqi2,round1,round2; - int i=0,ii=0,j=0; + int i=0,ii=0;//,j=0; rnti_t rnti1,rnti2; UE_list_t *UE_list = &eNB_mac_inst[Mod_idP].UE_list; @@ -312,19 +314,18 @@ void sort_UEs (module_id_t Mod_idP, for(ii=UE_list->next[i]; ii>=0; ii=UE_list->next[ii]) { - rnti1 = UE_RNTI(Mod_idP,i); + UE_id1 = i; + rnti1 = UE_RNTI(Mod_idP,UE_id1); if(rnti1 == NOT_A_RNTI) continue; - - UE_id1 = i; pCC_id1 = UE_PCCID(Mod_idP,UE_id1); cqi1 = maxcqi(Mod_idP,UE_id1); // round1 = maxround(Mod_idP,rnti1,frameP,subframeP,0); - if(rnti2 == NOT_A_RNTI) - continue; UE_id2 = ii; rnti2 = UE_RNTI(Mod_idP,UE_id2); + if(rnti2 == NOT_A_RNTI) + continue; cqi2 = maxcqi(Mod_idP,UE_id2); round2 = maxround(Mod_idP,rnti2,frameP,subframeP,0); //mac_xface->get_ue_active_harq_pid(Mod_id,rnti2,subframe,&harq_pid2,&round2,0); pCC_id2 = UE_PCCID(Mod_idP,UE_id2); @@ -363,32 +364,39 @@ void sort_UEs (module_id_t Mod_idP, void dlsch_scheduler_pre_processor (module_id_t Mod_id, frame_t frameP, sub_frame_t subframeP, - uint8_t dl_pow_off[MAX_NUM_CCs][NUMBER_OF_UE_MAX], - uint16_t pre_nb_available_rbs[MAX_NUM_CCs][NUMBER_OF_UE_MAX], int N_RBG[MAX_NUM_CCs], - unsigned char rballoc_sub_UE[MAX_NUM_CCs][NUMBER_OF_UE_MAX][N_RBG_MAX], int *mbsfn_flag) { - unsigned char rballoc_sub[MAX_NUM_CCs][N_RBG_MAX],harq_pid=0,harq_pid1=0,harq_pid2=0,round=0,round1=0,round2=0,total_ue_count; + unsigned char rballoc_sub[MAX_NUM_CCs][N_RBG_MAX],harq_pid=0,round=0,total_ue_count; unsigned char MIMO_mode_indicator[MAX_NUM_CCs][N_RBG_MAX]; - int UE_id, UE_id2, i; + int UE_id, i; uint16_t ii,j; uint16_t nb_rbs_required[MAX_NUM_CCs][NUMBER_OF_UE_MAX]; uint16_t nb_rbs_required_remaining[MAX_NUM_CCs][NUMBER_OF_UE_MAX]; uint16_t nb_rbs_required_remaining_1[MAX_NUM_CCs][NUMBER_OF_UE_MAX]; - uint16_t i1,i2,i3,r1=0; uint16_t average_rbs_per_user[MAX_NUM_CCs] = {0}; - rnti_t rnti,rnti1,rnti2; - LTE_eNB_UE_stats *eNB_UE_stats1 = NULL; - LTE_eNB_UE_stats *eNB_UE_stats2 = NULL; + rnti_t rnti; int min_rb_unit[MAX_NUM_CCs]; - + uint16_t r1=0; uint8_t CC_id; UE_list_t *UE_list = &eNB_mac_inst[Mod_id].UE_list; LTE_DL_FRAME_PARMS *frame_parms[MAX_NUM_CCs] = {0}; - int rrc_status = RRC_IDLE; + int transmission_mode = 0; + UE_sched_ctrl *ue_sched_ctl; + // int rrc_status = RRC_IDLE; + +#ifdef TM5 + int harq_pid1=0,harq_pid2=0; + int round1=0,round2=0; + int UE_id2; + uint16_t i1,i2,i3; + rnti_t rnti1,rnti2; + LTE_eNB_UE_stats *eNB_UE_stats1 = NULL; + LTE_eNB_UE_stats *eNB_UE_stats2 = NULL; + UE_sched_ctrl *ue_sched_ctl1,*ue_sched_ctl2; +#endif for (CC_id=0; CC_idhead; i>=0; i=UE_list->next[i]) { UE_id = i; // Initialize scheduling information for all active UEs + - dlsch_scheduler_pre_processor_reset( + + dlsch_scheduler_pre_processor_reset(Mod_id, UE_id, CC_id, + frameP, + subframeP, N_RBG[CC_id], - dl_pow_off, nb_rbs_required, - pre_nb_available_rbs, nb_rbs_required_remaining, - rballoc_sub_UE, rballoc_sub, MIMO_mode_indicator); @@ -420,7 +429,6 @@ void dlsch_scheduler_pre_processor (module_id_t Mod_id, } - // Store the DLSCH buffer for each logical channel store_dlsch_buffer (Mod_id,frameP,subframeP); @@ -447,14 +455,21 @@ void dlsch_scheduler_pre_processor (module_id_t Mod_id, UE_id = i; + // if there is no available harq_process, skip the UE + if (UE_list->UE_sched_ctrl[UE_id].harq_pid[CC_id]<0) + continue; + for (ii=0; iiordered_CCids[ii][UE_id]; + ue_sched_ctl = &UE_list->UE_sched_ctrl[UE_id]; + harq_pid = ue_sched_ctl->harq_pid[CC_id]; + round = ue_sched_ctl->round[CC_id]; average_rbs_per_user[CC_id]=0; frame_parms[CC_id] = mac_xface->get_lte_frame_parms(Mod_id,CC_id); - mac_xface->get_ue_active_harq_pid(Mod_id,CC_id,rnti,frameP,subframeP,&harq_pid,&round,0); + // mac_xface->get_ue_active_harq_pid(Mod_id,CC_id,rnti,frameP,subframeP,&harq_pid,&round,0); if(round>0) { nb_rbs_required[CC_id][UE_id] = UE_list->UE_template[CC_id][UE_id].nb_rb[harq_pid]; @@ -525,7 +540,7 @@ void dlsch_scheduler_pre_processor (module_id_t Mod_id, nb_rbs_required_remaining[CC_id][i], nb_rbs_required_remaining_1[CC_id][i], nb_rbs_required[CC_id][i], - pre_nb_available_rbs[CC_id][i], + UE_list->UE_sched_ctrl[i].pre_nb_available_rbs[CC_id], N_RBG[CC_id], min_rb_unit[CC_id]); @@ -538,6 +553,9 @@ void dlsch_scheduler_pre_processor (module_id_t Mod_id, for (ii=0; iiordered_CCids[ii][UE_id]; + ue_sched_ctl = &UE_list->UE_sched_ctrl[UE_id]; + harq_pid = ue_sched_ctl->harq_pid[CC_id]; + round = ue_sched_ctl->round[CC_id]; rnti = UE_RNTI(Mod_id,UE_id); @@ -546,8 +564,8 @@ void dlsch_scheduler_pre_processor (module_id_t Mod_id, continue; transmission_mode = mac_xface->get_transmission_mode(Mod_id,CC_id,rnti); - mac_xface->get_ue_active_harq_pid(Mod_id,CC_id,rnti,frameP,subframeP,&harq_pid,&round,0); - rrc_status = mac_eNB_get_rrc_status(Mod_id,rnti); + // mac_xface->get_ue_active_harq_pid(Mod_id,CC_id,rnti,frameP,subframeP,&harq_pid,&round,0); + //rrc_status = mac_eNB_get_rrc_status(Mod_id,rnti); /* 1st allocate for the retx */ // retransmission in data channels @@ -561,11 +579,8 @@ void dlsch_scheduler_pre_processor (module_id_t Mod_id, transmission_mode, min_rb_unit[CC_id], frame_parms[CC_id]->N_RB_DL, - dl_pow_off, nb_rbs_required, - pre_nb_available_rbs, nb_rbs_required_remaining, - rballoc_sub_UE, rballoc_sub, MIMO_mode_indicator); @@ -574,50 +589,52 @@ void dlsch_scheduler_pre_processor (module_id_t Mod_id, // data chanel TM5: to be revisted if ((round == 0 ) && (transmission_mode == 5) && - (dl_pow_off[CC_id][UE_id] != 1)) { + (ue_sched_ctl->dl_pow_off[CC_id] != 1)) { for(j=0; jrballoc_sub_UE[CC_id][j] == 0)) || + ((j < (N_RBG[CC_id]-1)) && (rballoc_sub[CC_id][j+1] == 0) && (ue_sched_ctl->rballoc_sub_UE[CC_id][j+1] == 0)) ) && (nb_rbs_required_remaining[CC_id][UE_id]>0)) { for (ii = UE_list->next[i+1]; ii >=0; ii=UE_list->next[ii]) { UE_id2 = ii; rnti2 = UE_RNTI(Mod_id,UE_id2); - + ue_sched_ctl2 = &UE_list->UE_sched_ctrl[UE_id2]; + harq_pid2 = ue_sched_ctl2->harq_pid[CC_id]; + round2 = ue_sched_ctl2->round[CC_id]; if(rnti2 == NOT_A_RNTI) continue; eNB_UE_stats2 = mac_xface->get_eNB_UE_stats(Mod_id,CC_id,rnti2); - mac_xface->get_ue_active_harq_pid(Mod_id,CC_id,rnti2,frameP,subframeP,&harq_pid2,&round2,0); + //mac_xface->get_ue_active_harq_pid(Mod_id,CC_id,rnti2,frameP,subframeP,&harq_pid2,&round2,0); if ((mac_eNB_get_rrc_status(Mod_id,rnti2) >= RRC_RECONFIGURED) && (round2==0) && (mac_xface->get_transmission_mode(Mod_id,CC_id,rnti2)==5) && - (dl_pow_off[CC_id][UE_id2] != 1)) { + (ue_sched_ctl->dl_pow_off[CC_id] != 1)) { - if( (((j == (N_RBG[CC_id]-1)) && (rballoc_sub_UE[CC_id][UE_id2][j] == 0)) || - ((j < (N_RBG[CC_id]-1)) && (rballoc_sub_UE[CC_id][UE_id2][j+1] == 0)) ) && + if( (((j == (N_RBG[CC_id]-1)) && (ue_sched_ctl->rballoc_sub_UE[CC_id][j] == 0)) || + ((j < (N_RBG[CC_id]-1)) && (ue_sched_ctl->rballoc_sub_UE[CC_id][j+1] == 0)) ) && (nb_rbs_required_remaining[CC_id][UE_id2]>0)) { if((((eNB_UE_stats2->DL_pmi_single^eNB_UE_stats1->DL_pmi_single)<<(14-j))&0xc000)== 0x4000) { //MU-MIMO only for 25 RBs configuration rballoc_sub[CC_id][j] = 1; - rballoc_sub_UE[CC_id][UE_id][j] = 1; - rballoc_sub_UE[CC_id][UE_id2][j] = 1; + ue_sched_ctl->rballoc_sub_UE[CC_id][j] = 1; + ue_sched_ctl2->rballoc_sub_UE[CC_id][j] = 1; MIMO_mode_indicator[CC_id][j] = 0; if (j< N_RBG[CC_id]-1) { rballoc_sub[CC_id][j+1] = 1; - rballoc_sub_UE[CC_id][UE_id][j+1] = 1; - rballoc_sub_UE[CC_id][UE_id2][j+1] = 1; + ue_sched_ctl->rballoc_sub_UE[CC_id][j+1] = 1; + ue_sched_ctl2->rballoc_sub_UE[CC_id][j+1] = 1; MIMO_mode_indicator[CC_id][j+1] = 0; } - dl_pow_off[CC_id][UE_id] = 0; - dl_pow_off[CC_id][UE_id2] = 0; + ue_sched_ctl->dl_pow_off[CC_id] = 0; + ue_sched_ctl2->dl_pow_off[CC_id] = 0; if ((j == N_RBG[CC_id]-1) && @@ -625,15 +642,15 @@ void dlsch_scheduler_pre_processor (module_id_t Mod_id, (PHY_vars_eNB_g[Mod_id][CC_id]->lte_frame_parms.N_RB_DL == 50))) { nb_rbs_required_remaining[CC_id][UE_id] = nb_rbs_required_remaining[CC_id][UE_id] - min_rb_unit[CC_id]+1; - pre_nb_available_rbs[CC_id][UE_id] = pre_nb_available_rbs[CC_id][UE_id] + min_rb_unit[CC_id]-1; + ue_sched_ctl->pre_nb_available_rbs[CC_id] = ue_sched_ctl->pre_nb_available_rbs[CC_id] + min_rb_unit[CC_id]-1; nb_rbs_required_remaining[CC_id][UE_id2] = nb_rbs_required_remaining[CC_id][UE_id2] - min_rb_unit[CC_id]+1; - pre_nb_available_rbs[CC_id][UE_id2] = pre_nb_available_rbs[CC_id][UE_id2] + min_rb_unit[CC_id]-1; + ue_sched_ctl2->pre_nb_available_rbs[CC_id] = ue_sched_ctl2->pre_nb_available_rbs[CC_id] + min_rb_unit[CC_id]-1; } else { nb_rbs_required_remaining[CC_id][UE_id] = nb_rbs_required_remaining[CC_id][UE_id] - 4; - pre_nb_available_rbs[CC_id][UE_id] = pre_nb_available_rbs[CC_id][UE_id] + 4; + ue_sched_ctl->pre_nb_available_rbs[CC_id] = ue_sched_ctl->pre_nb_available_rbs[CC_id] + 4; nb_rbs_required_remaining[CC_id][UE_id2] = nb_rbs_required_remaining[CC_id][UE_id2] - 4; - pre_nb_available_rbs[CC_id][UE_id2] = pre_nb_available_rbs[CC_id][UE_id2] + 4; + ue_sched_ctl2->pre_nb_available_rbs[CC_id] = ue_sched_ctl2->pre_nb_available_rbs[CC_id] + 4; } break; @@ -689,48 +706,60 @@ void dlsch_scheduler_pre_processor (module_id_t Mod_id, for(i=UE_list->head; i>=0; i=UE_list->next[i]) { UE_id = i; + ue_sched_ctl = &UE_list->UE_sched_ctrl[UE_id]; for (ii=0; iiordered_CCids[ii][UE_id]; //PHY_vars_eNB_g[Mod_id]->mu_mimo_mode[UE_id].dl_pow_off = dl_pow_off[UE_id]; - if (pre_nb_available_rbs[CC_id][UE_id] > 0 ) { + if (ue_sched_ctl->pre_nb_available_rbs[CC_id] > 0 ) { LOG_D(MAC,"******************DL Scheduling Information for UE%d ************************\n",UE_id); - LOG_D(MAC,"dl power offset UE%d = %d \n",UE_id,dl_pow_off[CC_id][UE_id]); + LOG_D(MAC,"dl power offset UE%d = %d \n",UE_id,ue_sched_ctl->dl_pow_off[CC_id]); LOG_D(MAC,"***********RB Alloc for every subband for UE%d ***********\n",UE_id); for(j=0; jmu_mimo_mode[UE_id].rballoc_sub[i] = rballoc_sub_UE[CC_id][UE_id][i]; - LOG_D(MAC,"RB Alloc for UE%d and Subband%d = %d\n",UE_id,j,rballoc_sub_UE[CC_id][UE_id][j]); + LOG_D(MAC,"RB Alloc for UE%d and Subband%d = %d\n",UE_id,j,ue_sched_ctl->rballoc_sub_UE[CC_id][j]); } //PHY_vars_eNB_g[Mod_id]->mu_mimo_mode[UE_id].pre_nb_available_rbs = pre_nb_available_rbs[CC_id][UE_id]; - LOG_D(MAC,"Total RBs allocated for UE%d = %d\n",UE_id,pre_nb_available_rbs[CC_id][UE_id]); + LOG_D(MAC,"Total RBs allocated for UE%d = %d\n",UE_id,ue_sched_ctl->pre_nb_available_rbs[CC_id]); } } } } -void dlsch_scheduler_pre_processor_reset (int UE_id, +void dlsch_scheduler_pre_processor_reset (int module_idP, + int UE_id, uint8_t CC_id, + int frameP, + int subframeP, int N_RBG, - uint8_t dl_pow_off[MAX_NUM_CCs][NUMBER_OF_UE_MAX], uint16_t nb_rbs_required[MAX_NUM_CCs][NUMBER_OF_UE_MAX], - uint16_t pre_nb_available_rbs[MAX_NUM_CCs][NUMBER_OF_UE_MAX], uint16_t nb_rbs_required_remaining[MAX_NUM_CCs][NUMBER_OF_UE_MAX], - unsigned char rballoc_sub_UE[MAX_NUM_CCs][NUMBER_OF_UE_MAX][N_RBG_MAX], unsigned char rballoc_sub[MAX_NUM_CCs][N_RBG_MAX], unsigned char MIMO_mode_indicator[MAX_NUM_CCs][N_RBG_MAX]) { int i; + UE_list_t *UE_list=&eNB_mac_inst[module_idP].UE_list; + UE_sched_ctrl *ue_sched_ctl = &UE_list->UE_sched_ctrl[UE_id]; + rnti_t rnti = UE_RNTI(module_idP,UE_id); + + // initialize harq_pid and round + mac_xface->get_ue_active_harq_pid(module_idP,CC_id,rnti, + frameP,subframeP, + &ue_sched_ctl->harq_pid[CC_id], + &ue_sched_ctl->round[CC_id], + 0); + nb_rbs_required[CC_id][UE_id]=0; - pre_nb_available_rbs[CC_id][UE_id] = 0; - dl_pow_off[CC_id][UE_id] = 2; + ue_sched_ctl->pre_nb_available_rbs[CC_id] = 0; + ue_sched_ctl->dl_pow_off[CC_id] = 2; nb_rbs_required_remaining[CC_id][UE_id] = 0; for (i=0; irballoc_sub_UE[CC_id][i] = 0; rballoc_sub[CC_id][i] = 0; MIMO_mode_indicator[CC_id][i] = 2; } @@ -744,46 +773,45 @@ void dlsch_scheduler_pre_processor_allocate (module_id_t Mod_id, int transmission_mode, int min_rb_unit, uint8_t N_RB_DL, - uint8_t dl_pow_off[MAX_NUM_CCs][NUMBER_OF_UE_MAX], uint16_t nb_rbs_required[MAX_NUM_CCs][NUMBER_OF_UE_MAX], - uint16_t pre_nb_available_rbs[MAX_NUM_CCs][NUMBER_OF_UE_MAX], uint16_t nb_rbs_required_remaining[MAX_NUM_CCs][NUMBER_OF_UE_MAX], - unsigned char rballoc_sub_UE[MAX_NUM_CCs][NUMBER_OF_UE_MAX][N_RBG_MAX], unsigned char rballoc_sub[MAX_NUM_CCs][N_RBG_MAX], unsigned char MIMO_mode_indicator[MAX_NUM_CCs][N_RBG_MAX]) { int i; + UE_list_t *UE_list=&eNB_mac_inst[Mod_id].UE_list; + UE_sched_ctrl *ue_sched_ctl = &UE_list->UE_sched_ctrl[UE_id]; for(i=0; irballoc_sub_UE[CC_id][i] == 0) && (nb_rbs_required_remaining[CC_id][UE_id]>0) && - (pre_nb_available_rbs[CC_id][UE_id] < nb_rbs_required[CC_id][UE_id])) { + (ue_sched_ctl->pre_nb_available_rbs[CC_id] < nb_rbs_required[CC_id][UE_id])) { // if this UE is not scheduled for TM5 - if (dl_pow_off[CC_id][UE_id] != 0 ) { + if (ue_sched_ctl->dl_pow_off[CC_id] != 0 ) { if ((i == N_RBG-1) && ((N_RB_DL == 25) || (N_RB_DL == 50))) { rballoc_sub[CC_id][i] = 1; - rballoc_sub_UE[CC_id][UE_id][i] = 1; + ue_sched_ctl->rballoc_sub_UE[CC_id][i] = 1; MIMO_mode_indicator[CC_id][i] = 1; if (transmission_mode == 5 ) { - dl_pow_off[CC_id][UE_id] = 1; + ue_sched_ctl->dl_pow_off[CC_id] = 1; } nb_rbs_required_remaining[CC_id][UE_id] = nb_rbs_required_remaining[CC_id][UE_id] - min_rb_unit+1; - pre_nb_available_rbs[CC_id][UE_id] = pre_nb_available_rbs[CC_id][UE_id] + min_rb_unit - 1; + ue_sched_ctl->pre_nb_available_rbs[CC_id] = ue_sched_ctl->pre_nb_available_rbs[CC_id] + min_rb_unit - 1; } else { if (nb_rbs_required_remaining[CC_id][UE_id] >= min_rb_unit){ rballoc_sub[CC_id][i] = 1; - rballoc_sub_UE[CC_id][UE_id][i] = 1; + ue_sched_ctl->rballoc_sub_UE[CC_id][i] = 1; MIMO_mode_indicator[CC_id][i] = 1; if (transmission_mode == 5 ) { - dl_pow_off[CC_id][UE_id] = 1; + ue_sched_ctl->dl_pow_off[CC_id] = 1; } nb_rbs_required_remaining[CC_id][UE_id] = nb_rbs_required_remaining[CC_id][UE_id] - min_rb_unit; - pre_nb_available_rbs[CC_id][UE_id] = pre_nb_available_rbs[CC_id][UE_id] + min_rb_unit; + ue_sched_ctl->pre_nb_available_rbs[CC_id] = ue_sched_ctl->pre_nb_available_rbs[CC_id] + min_rb_unit; } } } // dl_pow_off[CC_id][UE_id] ! = 0 @@ -888,9 +916,9 @@ void ulsch_scheduler_pre_processor(module_id_t module_idP, } } } - - LOG_D(MAC,"[eNB %d] Frame %d subframe %d: total ue to be scheduled %d/%d\n", - module_idP, frameP, subframeP,total_ue_count, max_num_ue_to_be_scheduled); + if (total_ue_count > 0) + LOG_D(MAC,"[eNB %d] Frame %d subframe %d: total ue to be scheduled %d/%d\n", + module_idP, frameP, subframeP,total_ue_count, max_num_ue_to_be_scheduled); //LOG_D(MAC,"step3\n"); @@ -1126,26 +1154,24 @@ void sort_ue_ul (module_id_t module_idP,int frameP, sub_frame_t subframeP) for (i=UE_list->head_ul; i>=0; i=UE_list->next_ul[i]) { //LOG_I(MAC,"sort ue ul i %d\n",i); - - rnti1 = UE_RNTI(module_idP,i); - - if(rnti1 == NOT_A_RNTI) + for (ii=UE_list->next_ul[i]; ii>=0; ii=UE_list->next_ul[ii]) { + //LOG_I(MAC,"sort ul ue 2 ii %d\n",ii); + + UE_id1 = i; + rnti1 = UE_RNTI(module_idP,UE_id1); + + if(rnti1 == NOT_A_RNTI) continue; - UE_id1 = i; - pCCid1 = UE_PCCID(module_idP,UE_id1); - round1 = maxround(module_idP,rnti1,frameP,subframeP,1); - - for (ii=UE_list->next_ul[i]; ii>=0; ii=UE_list->next_ul[ii]) { - - //LOG_I(MAC,"sort ul ue 2 ii %d\n",ii); - - rnti2 = UE_RNTI(module_idP,ii); - + pCCid1 = UE_PCCID(module_idP,UE_id1); + round1 = maxround(module_idP,rnti1,frameP,subframeP,1); + + UE_id2 = ii; + rnti2 = UE_RNTI(module_idP,UE_id2); + if(rnti2 == NOT_A_RNTI) continue; - UE_id2 = ii; pCCid2 = UE_PCCID(module_idP,UE_id2); round2 = maxround(module_idP,rnti2,frameP,subframeP,1); diff --git a/openair2/LAYER2/MAC/proto.h b/openair2/LAYER2/MAC/proto.h index c9a00e09fe..331d635371 100644 --- a/openair2/LAYER2/MAC/proto.h +++ b/openair2/LAYER2/MAC/proto.h @@ -26,24 +26,29 @@ Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE *******************************************************************************/ -/*! \file proto.h +/*! \file LAYER2/MAC/proto.h * \brief MAC functions prototypes for eNB and UE * \author Navid Nikaein and Raymond Knopp * \date 2010 - 2014 * \email navid.nikaein@eurecom.fr * \version 1.0 - * @ingroup _mac - */ #ifndef __LAYER2_MAC_PROTO_H__ #define __LAYER2_MAC_PROTO_H__ +/** \addtogroup _mac + * @{ + */ +/** \fn void add_ue_spec_dci(DCI_PDU *DCI_pdu,void *pdu,rnti_t rnti,unsigned char dci_size_bytes,unsigned char aggregation,unsigned char dci_size_bits,unsigned char dci_fmt,uint8_t ra_flag); +\brief +*/ void add_ue_spec_dci(DCI_PDU *DCI_pdu,void *pdu,rnti_t rnti,unsigned char dci_size_bytes,unsigned char aggregation,unsigned char dci_size_bits,unsigned char dci_fmt,uint8_t ra_flag); //LG commented cause compilation error for RT eNB extern inline unsigned int taus(void); -/** \brief First stage of Random-Access Scheduling. Loops over the RA_templates and checks if RAR, Msg3 or its retransmission are to be scheduled in the subframe. It returns the total number of PRB used for RA SDUs. For Msg3 it retrieves the L3msg from RRC and fills the appropriate buffers. For the others it just computes the number of PRBs. Each DCI uses 3 PRBs (format 1A) +/** \fn void schedule_RA(module_id_t module_idP,frame_t frameP,sub_frame_t subframe,uint8_t Msg3_subframe,unsigned int *nprb,unsigned int *nCCE); +\brief First stage of Random-Access Scheduling. Loops over the RA_templates and checks if RAR, Msg3 or its retransmission are to be scheduled in the subframe. It returns the total number of PRB used for RA SDUs. For Msg3 it retrieves the L3msg from RRC and fills the appropriate buffers. For the others it just computes the number of PRBs. Each DCI uses 3 PRBs (format 1A) for the message. @param Mod_id Instance ID of eNB @param frame Frame index @@ -148,6 +153,7 @@ int8_t get_DELTA_PREAMBLE(module_id_t module_idP,int CC_id); /** \brief Function for compute deltaP_rampup from 36.321 (for RA power ramping procedure and Msg3 PUSCH power control policy) @param Mod_id Module id of UE + @param CC_id carrier component id of UE @returns deltaP_rampup */ int8_t get_deltaP_rampup(module_id_t module_idP,uint8_t CC_id); @@ -172,14 +178,13 @@ void mac_top_cleanup(void); void mac_UE_out_of_sync_ind(module_id_t module_idP,frame_t frameP, uint16_t eNB_index); -void dlsch_scheduler_pre_processor_reset (int UE_id, +void dlsch_scheduler_pre_processor_reset (int module_idP,int UE_id, uint8_t CC_id, + int frameP, + int subframeP, int N_RBG, - uint8_t dl_pow_off[MAX_NUM_CCs][NUMBER_OF_UE_MAX], uint16_t nb_rbs_required[MAX_NUM_CCs][NUMBER_OF_UE_MAX], - uint16_t pre_nb_available_rbs[MAX_NUM_CCs][NUMBER_OF_UE_MAX], uint16_t nb_rbs_required_remaining[MAX_NUM_CCs][NUMBER_OF_UE_MAX], - unsigned char rballoc_sub_UE[MAX_NUM_CCs][NUMBER_OF_UE_MAX][N_RBG_MAX], unsigned char rballoc_sub[MAX_NUM_CCs][N_RBG_MAX], unsigned char MIMO_mode_indicator[MAX_NUM_CCs][N_RBG_MAX]); @@ -188,20 +193,14 @@ void dlsch_scheduler_pre_processor_reset (int UE_id, @param Mod_id Instance ID of eNB @param frame Index of frame @param subframe Index of current subframe -@param dl_pow_off Pointer to store resulting power offset for DCI -@param pre_nb_available_rbs Pointer to store number of remaining rbs after scheduling @param N_RBS Number of resource block groups -@param rb_alloc_sub Table of resource block groups allocated to each UE */ void dlsch_scheduler_pre_processor (module_id_t module_idP, frame_t frameP, sub_frame_t subframe, - uint8_t dl_pow_off[MAX_NUM_CCs][NUMBER_OF_UE_MAX], - uint16_t pre_nb_available_rbs[MAX_NUM_CCs][NUMBER_OF_UE_MAX], int N_RBG[MAX_NUM_CCs], - unsigned char rballoc_sub_UE[MAX_NUM_CCs][NUMBER_OF_UE_MAX][N_RBG_MAX], int *mbsfn_flag); @@ -212,11 +211,8 @@ void dlsch_scheduler_pre_processor_allocate (module_id_t Mod_id, int transmission_mode, int min_rb_unit, uint8_t N_RB_DL, - uint8_t dl_pow_off[MAX_NUM_CCs][NUMBER_OF_UE_MAX], uint16_t nb_rbs_required[MAX_NUM_CCs][NUMBER_OF_UE_MAX], - uint16_t pre_nb_available_rbs[MAX_NUM_CCs][NUMBER_OF_UE_MAX], uint16_t nb_rbs_required_remaining[MAX_NUM_CCs][NUMBER_OF_UE_MAX], - unsigned char rballoc_sub_UE[MAX_NUM_CCs][NUMBER_OF_UE_MAX][N_RBG_MAX], unsigned char rballoc_sub[MAX_NUM_CCs][N_RBG_MAX], unsigned char MIMO_mode_indicator[MAX_NUM_CCs][N_RBG_MAX]); @@ -700,6 +696,7 @@ unsigned char generate_dlsch_header(unsigned char *mac_header, /** \brief RRC Configuration primitive for PHY/MAC. Allows configuration of PHY/MAC resources based on System Information (SI), RRCConnectionSetup and RRCConnectionReconfiguration messages. @param Mod_id Instance ID of eNB +@param CC_id Component Carrier of the eNB @param eNB_flag Indicates if this is a eNB or UE configuration @param rntiP id of UE if this is an eNB configuration @param eNB_id Index of eNB if this is a UE configuration @@ -720,6 +717,7 @@ unsigned char generate_dlsch_header(unsigned char *mac_header, @param pmch_InfoList pointer to PMCH_InfoList from MBSFNAreaConfiguration Message (MCCH Message) */ int rrc_mac_config_req(module_id_t module_idP, + int CC_id, eNB_flag_t eNB_flag, rnti_t rntiP, uint8_t eNB_index, @@ -771,3 +769,4 @@ rrc_get_estimated_ue_distance( #endif +/** @}*/ diff --git a/openair2/LAYER2/MAC/ra_procedures.c b/openair2/LAYER2/MAC/ra_procedures.c index 9ea210a271..6f61f22848 100644 --- a/openair2/LAYER2/MAC/ra_procedures.c +++ b/openair2/LAYER2/MAC/ra_procedures.c @@ -107,6 +107,7 @@ int8_t get_DELTA_PREAMBLE(module_id_t module_idP,int CC_id) } + /// This routine implements Section 5.1.2 (UE Random Access Resource Selection) from 36.321 void get_prach_resources(module_id_t module_idP, int CC_id, @@ -121,6 +122,11 @@ void get_prach_resources(module_id_t module_idP, RACH_ConfigCommon_t *rach_ConfigCommon = NULL; uint8_t noGroupB = 0; uint8_t f_id = 0,num_prach=0; + int numberOfRA_Preambles; + int messageSizeGroupA; + int sizeOfRA_PreamblesGroupA; + int messagePowerOffsetGroupB; + int PLThreshold; if (CC_id>0) { LOG_E(MAC,"Transmission on secondary CCs is not supported yet\n"); @@ -136,6 +142,8 @@ void get_prach_resources(module_id_t module_idP, return; // not reached } + numberOfRA_Preambles = (1+rach_ConfigCommon->preambleInfo.numberOfRA_Preambles)<<2; + if (rach_ConfigDedicated) { // This is for network controlled Mobility, later if (rach_ConfigDedicated->ra_PRACH_MaskIndex != 0) { prach_resources->ra_PreambleIndex = rach_ConfigDedicated->ra_PreambleIndex; @@ -146,10 +154,54 @@ void get_prach_resources(module_id_t module_idP, if (!rach_ConfigCommon->preambleInfo.preamblesGroupAConfig) { noGroupB = 1; - } else { - if (rach_ConfigCommon->preambleInfo.preamblesGroupAConfig->sizeOfRA_PreamblesGroupA == - rach_ConfigCommon->preambleInfo.numberOfRA_Preambles) { + sizeOfRA_PreamblesGroupA = (rach_ConfigCommon->preambleInfo.preamblesGroupAConfig->sizeOfRA_PreamblesGroupA+1)<<2; + switch (rach_ConfigCommon->preambleInfo.preamblesGroupAConfig->messageSizeGroupA) { + case 0: + messageSizeGroupA = 56; + break; + case 1: + messageSizeGroupA = 144; + break; + case 2: + messageSizeGroupA = 208; + break; + case 3: + messageSizeGroupA = 256; + break; + } + + switch (rach_ConfigCommon->preambleInfo.preamblesGroupAConfig->messagePowerOffsetGroupB) { + case 0: + messagePowerOffsetGroupB = -9999; + break; + case 1: + messagePowerOffsetGroupB = 0; + break; + case 2: + messagePowerOffsetGroupB = 5; + break; + case 3: + messagePowerOffsetGroupB = 8; + break; + case 4: + messagePowerOffsetGroupB = 10; + break; + case 5: + messagePowerOffsetGroupB = 12; + break; + case 6: + messagePowerOffsetGroupB = 15; + break; + case 7: + messagePowerOffsetGroupB = 18; + break; + } + + PLThreshold = 0 - get_DELTA_PREAMBLE(module_idP,CC_id) - get_Po_NOMINAL_PUSCH(module_idP,CC_id) - messagePowerOffsetGroupB; + // Note Pcmax is set to 0 here, we have to fix this + + if (sizeOfRA_PreamblesGroupA == numberOfRA_Preambles) { noGroupB = 1; } } @@ -157,20 +209,18 @@ void get_prach_resources(module_id_t module_idP, if (first_Msg3 == 1) { if (noGroupB == 1) { // use Group A procedure - UE_mac_inst[module_idP].RA_prach_resources.ra_PreambleIndex = (taus())&0x3f; + UE_mac_inst[module_idP].RA_prach_resources.ra_PreambleIndex = (taus())%numberOfRA_Preambles; UE_mac_inst[module_idP].RA_prach_resources.ra_RACH_MaskIndex = 0; UE_mac_inst[module_idP].RA_usedGroupA = 1; - } else if ((Msg3_size < rach_ConfigCommon->preambleInfo.preamblesGroupAConfig->messageSizeGroupA) || - (mac_xface->get_PL(module_idP,0,eNB_index) > UE_mac_inst[module_idP].RA_maxPL)) { + } else if ((Msg3_size get_PL(module_idP,0,eNB_index) > PLThreshold)) { // use Group A procedure - UE_mac_inst[module_idP].RA_prach_resources.ra_PreambleIndex = (taus())%rach_ConfigCommon->preambleInfo.preamblesGroupAConfig->sizeOfRA_PreamblesGroupA; + UE_mac_inst[module_idP].RA_prach_resources.ra_PreambleIndex = (taus())%sizeOfRA_PreamblesGroupA; UE_mac_inst[module_idP].RA_prach_resources.ra_RACH_MaskIndex = 0; UE_mac_inst[module_idP].RA_usedGroupA = 1; } else { // use Group B - UE_mac_inst[module_idP].RA_prach_resources.ra_PreambleIndex = - rach_ConfigCommon->preambleInfo.preamblesGroupAConfig->sizeOfRA_PreamblesGroupA + - (taus())%(rach_ConfigCommon->preambleInfo.numberOfRA_Preambles - - rach_ConfigCommon->preambleInfo.preamblesGroupAConfig->sizeOfRA_PreamblesGroupA); + UE_mac_inst[module_idP].RA_prach_resources.ra_PreambleIndex = sizeOfRA_PreamblesGroupA + + (taus())%(numberOfRA_Preambles - sizeOfRA_PreamblesGroupA); UE_mac_inst[module_idP].RA_prach_resources.ra_RACH_MaskIndex = 0; UE_mac_inst[module_idP].RA_usedGroupA = 0; } @@ -186,6 +236,7 @@ void get_prach_resources(module_id_t module_idP, UE_mac_inst[module_idP].RA_prach_resources.ra_RACH_MaskIndex = 0; } else { + // FIXME rach_ConfigCommon->preambleInfo.preamblesGroupAConfig may be zero UE_mac_inst[module_idP].RA_prach_resources.ra_PreambleIndex = rach_ConfigCommon->preambleInfo.preamblesGroupAConfig->sizeOfRA_PreamblesGroupA + (taus())%(rach_ConfigCommon->preambleInfo.numberOfRA_Preambles - @@ -221,16 +272,14 @@ void Msg1_tx(module_id_t module_idP,uint8_t CC_id,frame_t frameP, uint8_t eNB_id // start contention resolution timer UE_mac_inst[module_idP].RA_attempt_number++; -#if defined(USER_MODE) && defined(OAI_EMU) - if (oai_emulation.info.opt_enabled) { - trace_pdu(0, NULL, 0, module_idP, 3, UE_mac_inst[module_idP].RA_prach_resources.ra_PreambleIndex, + if (opt_enabled) { + trace_pdu(0, NULL, 0, module_idP, 2, UE_mac_inst[module_idP].RA_prach_resources.ra_PreambleIndex, UE_mac_inst[module_idP].subframe, 0, UE_mac_inst[module_idP].RA_attempt_number); LOG_D(OPT,"[UE %d][RAPROC] TX MSG1 Frame %d trace pdu for rnti %x with size %d\n", module_idP, frameP, 1, UE_mac_inst[module_idP].RA_Msg3_size); } -#endif } @@ -244,19 +293,17 @@ void Msg3_tx(module_id_t module_idP,uint8_t CC_id,frame_t frameP, uint8_t eNB_id } // start contention resolution timer - LOG_I(MAC,"[UE %d][RAPROC] Frame %d : Msg3_tx: Setting contention resolution timer\n",module_idP,frameP); + LOG_D(MAC,"[UE %d][RAPROC] Frame %d : Msg3_tx: Setting contention resolution timer\n",module_idP,frameP); UE_mac_inst[module_idP].RA_contention_resolution_cnt = 0; UE_mac_inst[module_idP].RA_contention_resolution_timer_active = 1; -#if defined(USER_MODE) && defined(OAI_EMU) - if (oai_emulation.info.opt_enabled) { // msg3 + if (opt_enabled) { // msg3 trace_pdu(0, &UE_mac_inst[module_idP].CCCH_pdu.payload[0], UE_mac_inst[module_idP].RA_Msg3_size, module_idP, 3, UE_mac_inst[module_idP].crnti, UE_mac_inst[module_idP].subframe, 0, 0); LOG_D(OPT,"[UE %d][RAPROC] MSG3 Frame %d trace pdu Preamble %d with size %d\n", module_idP, frameP, UE_mac_inst[module_idP].crnti /*UE_mac_inst[module_idP].RA_prach_resources.ra_PreambleIndex*/, UE_mac_inst[module_idP].RA_Msg3_size); } -#endif } @@ -291,7 +338,7 @@ PRACH_RESOURCES_t *ue_get_rach(module_id_t module_idP,int CC_id,frame_t frameP, if (Is_rrc_registered == 1) { if (UE_mac_inst[module_idP].RA_active == 0) { - printf("RA not active\n"); + LOG_D(MAC,"RA not active\n"); // check if RRC is ready to initiate the RA procedure Size = mac_rrc_data_req(module_idP, CC_id, @@ -363,7 +410,7 @@ PRACH_RESOURCES_t *ue_get_rach(module_id_t module_idP,int CC_id,frame_t frameP, module_idP,frameP, rlc_status.bytes_in_buffer,dcch_header_len); sdu_lengths[0] = mac_rlc_data_req(module_idP, UE_mac_inst[module_idP].crnti, - eNB_indexP, frameP,ENB_FLAG_NO, MBMS_FLAG_NO, + eNB_indexP, frameP,ENB_FLAG_NO, MBMS_FLAG_NO, DCCH, (char *)&ulsch_buff[0]); @@ -448,9 +495,45 @@ PRACH_RESOURCES_t *ue_get_rach(module_id_t module_idP,int CC_id,frame_t frameP, UE_mac_inst[module_idP].RA_PREAMBLE_TRANSMISSION_COUNTER++; UE_mac_inst[module_idP].RA_prach_resources.ra_PREAMBLE_RECEIVED_TARGET_POWER += (rach_ConfigCommon->powerRampingParameters.powerRampingStep<<1); // 2dB increments in ASN.1 definition + int preambleTransMax; + switch (rach_ConfigCommon->ra_SupervisionInfo.preambleTransMax) { + case RACH_ConfigCommon__ra_SupervisionInfo__preambleTransMax_n3: + preambleTransMax = 3; + break; + case RACH_ConfigCommon__ra_SupervisionInfo__preambleTransMax_n4: + preambleTransMax = 4; + break; + case RACH_ConfigCommon__ra_SupervisionInfo__preambleTransMax_n5: + preambleTransMax = 5; + break; + case RACH_ConfigCommon__ra_SupervisionInfo__preambleTransMax_n6: + preambleTransMax = 6; + break; + case RACH_ConfigCommon__ra_SupervisionInfo__preambleTransMax_n7: + preambleTransMax = 7; + break; + case RACH_ConfigCommon__ra_SupervisionInfo__preambleTransMax_n8: + preambleTransMax = 8; + break; + case RACH_ConfigCommon__ra_SupervisionInfo__preambleTransMax_n10: + preambleTransMax = 10; + break; + case RACH_ConfigCommon__ra_SupervisionInfo__preambleTransMax_n20: + preambleTransMax = 20; + break; + case RACH_ConfigCommon__ra_SupervisionInfo__preambleTransMax_n50: + preambleTransMax = 50; + break; + case RACH_ConfigCommon__ra_SupervisionInfo__preambleTransMax_n100: + preambleTransMax = 100; + break; + case RACH_ConfigCommon__ra_SupervisionInfo__preambleTransMax_n200: + preambleTransMax = 200; + break; + } - if (UE_mac_inst[module_idP].RA_PREAMBLE_TRANSMISSION_COUNTER == rach_ConfigCommon->ra_SupervisionInfo.preambleTransMax) { - LOG_D(MAC,"[UE %d] Frame %d: Maximum number of RACH attempts (%d)\n",module_idP,frameP,rach_ConfigCommon->ra_SupervisionInfo.preambleTransMax); + if (UE_mac_inst[module_idP].RA_PREAMBLE_TRANSMISSION_COUNTER == preambleTransMax) { + LOG_D(MAC,"[UE %d] Frame %d: Maximum number of RACH attempts (%d)\n",module_idP,frameP,preambleTransMax); // send message to RRC UE_mac_inst[module_idP].RA_PREAMBLE_TRANSMISSION_COUNTER=1; UE_mac_inst[module_idP].RA_prach_resources.ra_PREAMBLE_RECEIVED_TARGET_POWER = get_Po_NOMINAL_PUSCH(module_idP,CC_id); diff --git a/openair2/LAYER2/MAC/rar_tools.c b/openair2/LAYER2/MAC/rar_tools.c index fb6dc870e6..acf284bd37 100644 --- a/openair2/LAYER2/MAC/rar_tools.c +++ b/openair2/LAYER2/MAC/rar_tools.c @@ -82,7 +82,9 @@ unsigned short fill_rar( } } - DevAssert( ra_idx != -1 ); + //DevAssert( ra_idx != -1 ); + if (ra_idx==-1) + return(0); // subheader fixed rarh->E = 0; // First and last RAR @@ -101,8 +103,8 @@ unsigned short fill_rar( */ rar[4] = (uint8_t)(eNB_mac_inst[module_idP].common_channels[CC_id].RA_template[ra_idx].rnti>>8); rar[5] = (uint8_t)(eNB_mac_inst[module_idP].common_channels[CC_id].RA_template[ra_idx].rnti&0xff); - eNB_mac_inst[module_idP].common_channels[CC_id].RA_template[ra_idx].timing_offset = 0; - //eNB_mac_inst[module_idP].common_channels[CC_id].RA_template[ra_idx].timing_offset /= 16; + //eNB_mac_inst[module_idP].common_channels[CC_id].RA_template[ra_idx].timing_offset = 0; + eNB_mac_inst[module_idP].common_channels[CC_id].RA_template[ra_idx].timing_offset /= 16; //T_A = N_TA/16, where N_TA should be on a 30.72Msps rar[0] = (uint8_t)(eNB_mac_inst[module_idP].common_channels[CC_id].RA_template[ra_idx].timing_offset>>(2+4)); // 7 MSBs of timing advance + divide by 4 rar[1] = (uint8_t)(eNB_mac_inst[module_idP].common_channels[CC_id].RA_template[ra_idx].timing_offset<<(4-2))&0xf0; // 4 LSBs of timing advance + divide by 4 rballoc = mac_xface->computeRIV(N_RB_UL,1,1); // first PRB only for UL Grant diff --git a/openair2/LAYER2/MAC/ue_procedures.c b/openair2/LAYER2/MAC/ue_procedures.c index ceaa663537..0a474d14b8 100644 --- a/openair2/LAYER2/MAC/ue_procedures.c +++ b/openair2/LAYER2/MAC/ue_procedures.c @@ -325,7 +325,9 @@ ue_send_sdu( if (opt_enabled) { trace_pdu(1, sdu, sdu_len, module_idP, 3, UE_mac_inst[module_idP].crnti, - UE_mac_inst[module_idP].subframe, 0, 0); + UE_mac_inst[module_idP].subframe, 0, 0); + LOG_D(OPT,"[UE %d][DLSCH] Frame %d trace pdu for rnti %x with size %d\n", + module_idP, frameP, UE_mac_inst[module_idP].crnti, sdu_len); } payload_ptr = parse_header(sdu,&num_ce,&num_sdu,rx_ces,rx_lcids,rx_lengths,sdu_len); @@ -508,6 +510,19 @@ void ue_decode_si(module_id_t module_idP,int CC_id,frame_t frameP, uint8_t eNB_i 0); VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_DECODE_SI, VCD_FUNCTION_OUT); stop_meas(&UE_mac_inst[module_idP].rx_si); + if (opt_enabled == 1) { + trace_pdu(0, + (uint8_t *)pdu, + len, + module_idP, + 4, + 0xffff, + UE_mac_inst[module_idP].subframe, + 0, + 0); + LOG_D(OPT,"[UE %d][BCH] Frame %d trace pdu for CC_id %d rnti %x with size %d\n", + module_idP, frameP, CC_id, 0xffff, len); + } } #ifdef Rel10 @@ -1435,7 +1450,7 @@ void ue_get_sdu(module_id_t module_idP,int CC_id,frame_t frameP,sub_frame_t subf bsr_l, post_padding); // long_bsr - LOG_I(MAC, + LOG_D(MAC, "[UE %d] Generate header :bufflen %d sdu_length_total %d, num_sdus %d, sdu_lengths[0] %d, sdu_lcids[0] %d => payload offset %d, dcch_header_len %d, dtch_header_len %d, padding %d,post_padding %d, bsr len %d, phr len %d, reminder %d \n", module_idP,buflen, sdu_length_total,num_sdus,sdu_lengths[0],sdu_lcids[0],payload_offset, dcch_header_len, dtch_header_len, short_padding,post_padding, bsr_len, phr_len,buflen-sdu_length_total-payload_offset); @@ -1446,21 +1461,18 @@ void ue_get_sdu(module_id_t module_idP,int CC_id,frame_t frameP,sub_frame_t subf for (j=0; j<(buflen-sdu_length_total-payload_offset); j++) { ulsch_buffer[payload_offset+sdu_length_total+j] = (char)(taus()&0xff); } - - - if (opt_enabled) { - trace_pdu(0, ulsch_buffer, buflen, module_idP, 3, UE_mac_inst[module_idP].crnti, subframe, 0, 0); - LOG_D(OPT,"[UE %d][ULSCH] Frame %d trace pdu for rnti %x with size %d\n", - module_idP, frameP, UE_mac_inst[module_idP].crnti, buflen); - } - - LOG_D(MAC,"[UE %d][SR] Gave SDU to PHY, clearing any scheduling request\n", module_idP,payload_offset, sdu_length_total); UE_mac_inst[module_idP].scheduling_info.SR_pending=0; UE_mac_inst[module_idP].scheduling_info.SR_COUNTER=0; VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_GET_SDU, VCD_FUNCTION_OUT); stop_meas(&UE_mac_inst[module_idP].tx_ulsch_sdu); + + if (opt_enabled) { + trace_pdu(0, ulsch_buffer, buflen, module_idP, 3, UE_mac_inst[module_idP].crnti, UE_mac_inst[module_idP].subframe, 0, 0); + LOG_D(OPT,"[UE %d][ULSCH] Frame %d trace pdu for rnti %x with size %d\n", + module_idP, UE_mac_inst[module_idP].subframe, UE_mac_inst[module_idP].crnti, buflen); + } } //------------------------------------------------------------------------------ diff --git a/openair2/LAYER2/PDCP_v10.1.0/pdcp.c b/openair2/LAYER2/PDCP_v10.1.0/pdcp.c index 1d0983f288..df27aa2ee0 100755 --- a/openair2/LAYER2/PDCP_v10.1.0/pdcp.c +++ b/openair2/LAYER2/PDCP_v10.1.0/pdcp.c @@ -1394,10 +1394,10 @@ pdcp_config_req_asn1 ( case CONFIG_ACTION_ADD: DevAssert(pdcp_pP != NULL); if (ctxt_pP->enb_flag == ENB_FLAG_YES) { -#warning "TODO pdcp_module_id_to_rnti" pdcp_pP->is_ue = FALSE; - //pdcp_eNB_module_id_to_rnti[ctxt_pP.module_id][] = ctxt_pP->rnti; - + //pdcp_eNB_UE_instance_to_rnti[ctxtP->module_id] = ctxt_pP->rnti; + pdcp_eNB_UE_instance_to_rnti[pdcp_eNB_UE_instance_to_rnti_index] = ctxt_pP->rnti; + //pdcp_eNB_UE_instance_to_rnti_index = (pdcp_eNB_UE_instance_to_rnti_index + 1) % NUMBER_OF_UE_MAX; } else { pdcp_pP->is_ue = TRUE; pdcp_UE_UE_module_id_to_rnti[ctxt_pP->module_id] = ctxt_pP->rnti; @@ -1845,10 +1845,12 @@ void pdcp_layer_init(void) memset(&pdcp_mbms_array_ue[instance][service_id][session_id], 0, sizeof(pdcp_mbms_t)); } } - #endif + pdcp_eNB_UE_instance_to_rnti[instance] = NOT_A_RNTI; } + pdcp_eNB_UE_instance_to_rnti_index = 0; + for (instance = 0; instance < NUMBER_OF_eNB_MAX; instance++) { #if defined(Rel10) diff --git a/openair2/LAYER2/PDCP_v10.1.0/pdcp.h b/openair2/LAYER2/PDCP_v10.1.0/pdcp.h index 33d410c87b..ee1ef82c93 100755 --- a/openair2/LAYER2/PDCP_v10.1.0/pdcp.h +++ b/openair2/LAYER2/PDCP_v10.1.0/pdcp.h @@ -27,13 +27,18 @@ *******************************************************************************/ -/*! \file pdcp.c +/*! \file LAYER2/PDCP_v10.1.0/pdcp.h * \brief pdcp interface with RLC, RRC * \author Lionel GAUTHIER and Navid Nikaein * \date 2009-2012 * \version 1.0 */ +/** @defgroup _pdcp PDCP +* @ingroup _oai2 +* @{ +*/ + #ifndef __PDCP_H__ # define __PDCP_H__ //----------------------------------------------------------------------------- @@ -360,7 +365,7 @@ public_pdcp(int pdcp_module_init (void);) public_pdcp(void pdcp_module_cleanup (void);) public_pdcp(void pdcp_layer_init (void);) public_pdcp(void pdcp_layer_cleanup (void);) -#if defined(USE_PDCP_NETLINK_QUEUES) +#if defined(PDCP_USE_NETLINK_QUEUES) public_pdcp(int pdcp_netlink_init (void);) #endif @@ -447,6 +452,8 @@ public_pdcp(pdcp_stats_t eNB_pdcp_stats[NUMBER_OF_eNB_MAX];) // for UE code conly protected_pdcp(rnti_t pdcp_UE_UE_module_id_to_rnti[NUMBER_OF_UE_MAX];) +protected_pdcp(rnti_t pdcp_eNB_UE_instance_to_rnti[NUMBER_OF_UE_MAX];) // for noS1 mode +protected_pdcp(unsigned int pdcp_eNB_UE_instance_to_rnti_index;) #if defined(Rel10) public_pdcp(pdcp_mbms_t pdcp_mbms_array_ue[NUMBER_OF_UE_MAX][maxServiceCount][maxSessionPerPMCH];) // some constants from openair2/RRC/LITE/MESSAGES/asn1_constants.h public_pdcp(pdcp_mbms_t pdcp_mbms_array_eNB[NUMBER_OF_eNB_MAX][maxServiceCount][maxSessionPerPMCH];) // some constants from openair2/RRC/LITE/MESSAGES/asn1_constants.h @@ -480,3 +487,4 @@ protected_pdcp(sdu_size_t pdcp_input_sdu_remaining_size_to_read;) public_pdcp(hash_table_t *pdcp_coll_p;) #endif +/*@}*/ diff --git a/openair2/LAYER2/PDCP_v10.1.0/pdcp_fifo.c b/openair2/LAYER2/PDCP_v10.1.0/pdcp_fifo.c index 6064abaf79..785a287d58 100755 --- a/openair2/LAYER2/PDCP_v10.1.0/pdcp_fifo.c +++ b/openair2/LAYER2/PDCP_v10.1.0/pdcp_fifo.c @@ -308,23 +308,21 @@ int pdcp_fifo_flush_sdus(const protocol_ctxt_t* const ctxt_pP) int pdcp_fifo_read_input_sdus (const protocol_ctxt_t* const ctxt_pP) { #ifdef PDCP_USE_NETLINK - protocol_ctxt_t ctxt_cpy; + protocol_ctxt_t ctxt_cpy = *ctxt_pP; protocol_ctxt_t ctxt; hash_key_t key = HASHTABLE_NOT_A_KEY_VALUE; hashtable_rc_t h_rc; struct pdcp_netlink_element_s* data_p = NULL; module_id_t ue_id = 0; pdcp_t* pdcp_p = NULL; -# if defined(USE_PDCP_NETLINK_QUEUES) +# if defined(PDCP_USE_NETLINK_QUEUES) rb_id_t rab_id = 0; pdcp_transmission_mode_t pdcp_mode = PDCP_TRANSMISSION_MODE_UNKNOWN; - ctxt_cpy = *ctxt_pP; - while (pdcp_netlink_dequeue_element(ctxt_pP, &data_p) != 0) { - DevAssert(data != NULL); + DevAssert(data_p != NULL); rab_id = data_p->pdcp_read_header.rb_id % maxDRB; // ctxt_pP->rnti is NOT_A_RNTI ctxt_cpy.rnti = pdcp_module_id_to_rnti[ctxt_cpy.module_id][data_p->pdcp_read_header.inst]; @@ -428,7 +426,7 @@ int pdcp_fifo_read_input_sdus (const protocol_ctxt_t* const ctxt_pP) } return 0; -# else /* USE_PDCP_NETLINK_QUEUES*/ +# else /* PDCP_USE_NETLINK_QUEUES*/ int len = 1; rb_id_t rab_id = 0; @@ -501,11 +499,14 @@ int pdcp_fifo_read_input_sdus (const protocol_ctxt_t* const ctxt_pP) if (ctxt_cpy.enb_flag) { ctxt.module_id = 0; rab_id = pdcp_read_header_g.rb_id % maxDRB; + ctxt.rnti = pdcp_eNB_UE_instance_to_rnti[pdcp_eNB_UE_instance_to_rnti_index]; } else { ctxt.module_id = 0; rab_id = pdcp_read_header_g.rb_id % maxDRB; + ctxt.rnti = pdcp_UE_UE_module_id_to_rnti[ctxt.module_id]; } + #endif if (ctxt.enb_flag) { diff --git a/openair2/LAYER2/PDCP_v10.1.0/pdcp_netlink.c b/openair2/LAYER2/PDCP_v10.1.0/pdcp_netlink.c index 2da31bda1f..524dd2022b 100644 --- a/openair2/LAYER2/PDCP_v10.1.0/pdcp_netlink.c +++ b/openair2/LAYER2/PDCP_v10.1.0/pdcp_netlink.c @@ -67,6 +67,8 @@ #include "pdcp.h" #include "pdcp_primitives.h" +#include "msc.h" + #define PDCP_QUEUE_NB_ELEMENTS 200 @@ -76,7 +78,7 @@ extern struct iovec nas_iov_rx; extern int nas_sock_fd; extern struct msghdr nas_msg_rx; -#if defined(USE_PDCP_NETLINK_QUEUES) +#if defined(PDCP_USE_NETLINK_QUEUES) static pthread_t pdcp_netlink_thread; /* We use lock-free queues between the User-plane driver running in kernel-space @@ -219,7 +221,7 @@ void *pdcp_netlink_thread_fct(void *arg) pdcp_thread_read_state = 0; memset(nl_rx_buf, 0, NL_MAX_PAYLOAD); LOG_I(PDCP, "[NETLINK_THREAD] binding to fd %d\n",nas_sock_fd); - + MSC_START_USE(); while (1) { len = recvmsg(nas_sock_fd, &nas_msg_rx, 0); diff --git a/openair2/LAYER2/PDCP_v10.1.0/pdcp_primitives.h b/openair2/LAYER2/PDCP_v10.1.0/pdcp_primitives.h index 5dd8d1b067..185b50f866 100755 --- a/openair2/LAYER2/PDCP_v10.1.0/pdcp_primitives.h +++ b/openair2/LAYER2/PDCP_v10.1.0/pdcp_primitives.h @@ -25,15 +25,18 @@ Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - *******************************************************************************/ -/* - pdcp_primitives.h - ------------------- - AUTHOR : Baris Demiray - COMPANY : EURECOM - EMAIL : Baris.Demiray@eurecom.fr - ***************************************************************************/ + ***************************************************************************/ +/*! \file LAYER2/PDCP_v10.1.0/pdcp_primitives.h +* \brief pdcp primitives +* \author Baris Demiray and Navid Nikaein +* \date 2009-2012 +* \version 1.0 +*/ + +/** \addtogroup _pdcp +* @{ + */ #ifndef PDCP_PRIMITIVES_H #define PDCP_PRIMITIVES_H @@ -41,9 +44,7 @@ * 3GPP TS 36.323 V10.1.0 (2011-03) */ -/* - * Data or control (1-bit, see 6.3.7) - */ +/*! \brief Data or control (1-bit, see 6.3.7) */ #define PDCP_CONTROL_PDU_BIT_SET 0x00 #define PDCP_DATA_PDU_BIT_SET 0x01 @@ -201,3 +202,4 @@ int pdcp_validate_security(const protocol_ctxt_t* const ctxt_pP, #endif /* defined(ENABLE_SECURITY) */ #endif +/** @}*/ diff --git a/openair2/LAYER2/PDCP_v10.1.0/pdcp_thread.c b/openair2/LAYER2/PDCP_v10.1.0/pdcp_thread.c index 936566c8e1..4f0d11e235 100644 --- a/openair2/LAYER2/PDCP_v10.1.0/pdcp_thread.c +++ b/openair2/LAYER2/PDCP_v10.1.0/pdcp_thread.c @@ -44,6 +44,7 @@ #include "PHY/extern.h" //for PHY_vars #include "UTIL/LOG/log.h" #include "UTIL/LOG/vcd_signal_dumper.h" +#include "msc.h" #define OPENAIR_THREAD_STACK_SIZE 8192 #define OPENAIR_THREAD_PRIORITY 255 @@ -64,6 +65,7 @@ static void *pdcp_thread_main(void* param) uint8_t eNB_flag = !UE_flag; LOG_I(PDCP,"This is pdcp_thread eNB_flag = %d\n",eNB_flag); + MSC_START_USE(); while (!oai_exit) { diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am.c b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am.c index 493aa22360..e8dcae6762 100755 --- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am.c +++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am.c @@ -26,13 +26,13 @@ Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE *******************************************************************************/ -#define RLC_AM_MODULE -#define RLC_AM_C +#define RLC_AM_MODULE 1 +#define RLC_AM_C 1 //----------------------------------------------------------------------------- #include "platform_types.h" #include "platform_constants.h" //----------------------------------------------------------------------------- -#if defined(ENABLE_ITTI) +#if ENABLE_ITTI # include "intertask_interface.h" #endif #include "assertions.h" @@ -48,9 +48,7 @@ #include "UTIL/LOG/log.h" #include "UL-AM-RLC.h" #include "DL-AM-RLC.h" -//#define TRACE_RLC_AM_TX_STATUS -//#define TRACE_RLC_AM_TX -//#define TRACE_RLC_AM_BO + //----------------------------------------------------------------------------- uint32_t @@ -58,14 +56,13 @@ rlc_am_get_buffer_occupancy_in_bytes ( const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t * const rlc_pP) { - //----------------------------------------------------------------------------- uint32_t max_li_overhead; uint32_t header_overhead; // priority of control trafic if (rlc_pP->status_requested) { if (rlc_pP->t_status_prohibit.running == 0) { -#ifdef TRACE_RLC_AM_BO +#if TRACE_RLC_AM_BO if (((15 + rlc_pP->num_nack_sn*(10+1) + rlc_pP->num_nack_so*(15+15+1) + 7) >> 3) > 0) { LOG_D(RLC, PROTOCOL_CTXT_FMT RB_AM_FMT" BO : CONTROL PDU %d bytes \n", @@ -92,7 +89,7 @@ rlc_am_get_buffer_occupancy_in_bytes ( } -#ifdef TRACE_RLC_AM_BO +#if TRACE_RLC_AM_BO if ((rlc_pP->status_buffer_occupancy + rlc_pP->retransmission_buffer_occupancy + rlc_pP->sdu_buffer_occupancy + max_li_overhead + header_overhead) > 0) { LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT" BO : STATUS BUFFER %d bytes \n", PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), rlc_pP->status_buffer_occupancy); @@ -114,9 +111,8 @@ rlc_am_release ( const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t * const rlc_pP ) -//----------------------------------------------------------------------------- { - + // empty } //----------------------------------------------------------------------------- void @@ -127,7 +123,6 @@ config_req_rlc_am ( const rb_id_t rb_idP ) { - //----------------------------------------------------------------------------- rlc_union_t *rlc_union_p = NULL; rlc_am_entity_t *l_rlc_p = NULL; hash_key_t key = RLC_COLL_KEY_VALUE(ctxt_pP->module_id, ctxt_pP->rnti, ctxt_pP->enb_flag, rb_idP, srb_flagP); @@ -174,7 +169,6 @@ void config_req_rlc_am_asn1 ( const struct RLC_Config__am * const config_am_pP, const rb_id_t rb_idP) { - //----------------------------------------------------------------------------- rlc_union_t *rlc_union_p = NULL; rlc_am_entity_t *l_rlc_p = NULL; hash_key_t key = RLC_COLL_KEY_VALUE(ctxt_pP->module_id, ctxt_pP->rnti, ctxt_pP->enb_flag, rb_idP, srb_flagP); @@ -279,7 +273,6 @@ void rlc_am_stat_req ( unsigned int* stat_timer_reordering_timed_out, unsigned int* stat_timer_poll_retransmit_timed_out, unsigned int* stat_timer_status_prohibit_timed_out) -//----------------------------------------------------------------------------- { *stat_tx_pdcp_sdu = rlc_pP->stat_tx_pdcp_sdu; *stat_tx_pdcp_bytes = rlc_pP->stat_tx_pdcp_bytes; @@ -317,7 +310,6 @@ rlc_am_get_pdus ( rlc_am_entity_t * const rlc_pP ) { - //----------------------------------------------------------------------------- int display_flag = 0; // 5.1.3.1 Transmit operations // 5.1.3.1.1 @@ -368,7 +360,7 @@ rlc_am_get_pdus ( if (pdu != NULL { if ( ((rlc_am_tx_control_pdu_management_t*)(pdu->data))->size <= rlc_pP->nb_bytes_requested_by_mac) { pdu = list_remove_head(&rlc_pP->control_pdu_list); - #ifdef TRACE_RLC_AM_TX + #if TRACE_RLC_AM_TX msg ("[FRAME %5u][%s][RLC_AM][MOD %u/%u][RB %u] SEND CONTROL PDU\n", ((rlc_am_entity_t *) rlc_pP)->module_id,((rlc_am_entity_t *) rlc_pP)->rb_id, ctxt_pP->frame); #endif list_add_tail_eurecom (pdu, &rlc_pP->pdus_to_mac_layer); @@ -470,7 +462,7 @@ rlc_am_get_pdus ( /* ONLY ONE TB PER TTI if ((tx_data_pdu_management->retx_count >= 0) && (rlc_pP->nb_bytes_requested_by_mac < RLC_AM_MIN_SEGMENT_SIZE_REQUEST)) { - #ifdef TRACE_RLC_AM_TX + #if TRACE_RLC_AM_TX msg ("[FRAME %5u][%s][RLC_AM][MOD %u/%u][RB %u] BREAK LOOP ON RETRANSMISSION BECAUSE ONLY %d BYTES ALLOWED TO TRANSMIT BY MAC\n",ctxt_pP->frame, ((rlc_am_entity_t *) rlc_pP)->module_id,((rlc_am_entity_t *) rlc_pP)->rb_id, rlc_pP->nb_bytes_requested_by_mac); #endif break; @@ -529,8 +521,6 @@ rlc_am_rx ( struct mac_data_ind data_indP ) { - //----------------------------------------------------------------------------- - rlc_am_entity_t *rlc = (rlc_am_entity_t *) arg_pP; switch (rlc->protocol_state) { @@ -557,7 +547,6 @@ rlc_am_mac_status_indication ( const uint16_t tb_sizeP, struct mac_status_ind tx_statusP) { - //----------------------------------------------------------------------------- struct mac_status_resp status_resp; uint16_t sdu_size = 0; uint16_t sdu_remaining_size = 0; @@ -628,7 +617,7 @@ rlc_am_mac_status_indication ( } } } -#if defined(MESSAGE_CHART_GENERATOR_RLC_MAC) +#if MESSAGE_CHART_GENERATOR_RLC_MAC MSC_LOG_RX_MESSAGE( (ctxt_pP->enb_flag == ENB_FLAG_YES) ? MSC_RLC_ENB:MSC_RLC_UE, (ctxt_pP->enb_flag == ENB_FLAG_YES) ? MSC_MAC_ENB:MSC_MAC_UE, @@ -650,7 +639,7 @@ rlc_am_mac_status_indication ( status_resp.head_sdu_remaining_size_to_send); #endif -#ifdef TRACE_RLC_AM_TX_STATUS +#if TRACE_RLC_AM_TX_STATUS if (tb_sizeP > 0) { LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT" MAC_STATUS_INDICATION (DATA) %d bytes -> %d bytes\n", @@ -677,11 +666,10 @@ rlc_am_mac_data_request ( void * const rlc_pP ) { - //----------------------------------------------------------------------------- struct mac_data_req data_req; rlc_am_entity_t *l_rlc_p = (rlc_am_entity_t *) rlc_pP; unsigned int nb_bytes_requested_by_mac = ((rlc_am_entity_t *) rlc_pP)->nb_bytes_requested_by_mac; -#if defined(TRACE_RLC_AM_PDU) || defined(MESSAGE_CHART_GENERATOR) +#if TRACE_RLC_AM_PDU || MESSAGE_CHART_GENERATOR rlc_am_pdu_info_t pdu_info; rlc_am_pdu_sn_10_t *rlc_am_pdu_sn_10_p; mem_block_t *tb_p; @@ -689,7 +677,7 @@ rlc_am_mac_data_request ( int num_nack; char message_string[9000]; size_t message_string_size = 0; -# if defined(ENABLE_ITTI) +# if ENABLE_ITTI MessageDef *msg_p; # endif int octet_index, index; @@ -710,7 +698,7 @@ rlc_am_mac_data_request ( data_req.buffer_occupancy_in_bytes = rlc_am_get_buffer_occupancy_in_bytes(ctxt_pP, l_rlc_p); data_req.rlc_info.rlc_protocol_state = l_rlc_p->protocol_state; -#if defined(TRACE_RLC_AM_PDU) || defined(MESSAGE_CHART_GENERATOR) +#if TRACE_RLC_AM_PDU || MESSAGE_CHART_GENERATOR if (data_req.data.nb_elements > 0) { @@ -723,7 +711,7 @@ rlc_am_mac_data_request ( if ((((struct mac_tb_req *) (tb_p->data))->data_ptr[0] & RLC_DC_MASK) == RLC_DC_DATA_PDU ) { if (rlc_am_get_data_pdu_infos(ctxt_pP,l_rlc_p,rlc_am_pdu_sn_10_p, tb_size_in_bytes, &pdu_info) >= 0) { -#ifdef MESSAGE_CHART_GENERATOR +#if MESSAGE_CHART_GENERATOR message_string_size = 0; message_string_size += sprintf(&message_string[message_string_size], MSC_AS_TIME_FMT" "PROTOCOL_RLC_AM_MSC_FMT" DATA SN %u size %u RF %u P %u FI %u", @@ -756,7 +744,7 @@ rlc_am_mac_data_request ( message_string); #endif -# if defined(ENABLE_ITTI) +# if ENABLE_ITTI message_string_size = 0; message_string_size += sprintf(&message_string[message_string_size], "Bearer : %u\n", l_rlc_p->rb_id); message_string_size += sprintf(&message_string[message_string_size], "PDU size : %u\n", tb_size_in_bytes); @@ -835,7 +823,7 @@ rlc_am_mac_data_request ( } else { if (rlc_am_get_control_pdu_infos(rlc_am_pdu_sn_10_p, &tb_size_in_bytes, &l_rlc_p->control_pdu_info) >= 0) { tb_size_in_bytes = ((struct mac_tb_req *) (tb_p->data))->tb_size; //tb_size_in_bytes modified by rlc_am_get_control_pdu_infos! -#ifdef MESSAGE_CHART_GENERATOR +#if MESSAGE_CHART_GENERATOR message_string_size = 0; message_string_size += sprintf(&message_string[message_string_size], MSC_AS_TIME_FMT" "PROTOCOL_RLC_AM_MSC_FMT" STATUS ACK_SN %u", @@ -864,7 +852,7 @@ rlc_am_mac_data_request ( message_string); #endif -# if defined(ENABLE_ITTI) +# if ENABLE_ITTI message_string_size = 0; message_string_size += sprintf(&message_string[message_string_size], "Bearer : %u\n", l_rlc_p->rb_id); message_string_size += sprintf(&message_string[message_string_size], "PDU size : %u\n", tb_size_in_bytes); @@ -911,12 +899,11 @@ rlc_am_mac_data_indication ( struct mac_data_ind data_indP ) { - //----------------------------------------------------------------------------- rlc_am_entity_t* l_rlc_p = (rlc_am_entity_t*) rlc_pP; /*rlc_am_control_pdu_info_t control_pdu_info; int num_li; int16_t tb_size;*/ -#if defined(TRACE_RLC_AM_PDU) || defined(MESSAGE_CHART_GENERATOR) +#if TRACE_RLC_AM_PDU || MESSAGE_CHART_GENERATOR rlc_am_pdu_info_t pdu_info; rlc_am_pdu_sn_10_t *rlc_am_pdu_sn_10_p; mem_block_t *tb_p; @@ -924,13 +911,13 @@ rlc_am_mac_data_indication ( int num_nack; char message_string[7000]; size_t message_string_size = 0; -# if defined(ENABLE_ITTI) +# if ENABLE_ITTI MessageDef *msg_p; # endif int octet_index, index; #endif -#if defined(TRACE_RLC_AM_PDU) || defined(MESSAGE_CHART_GENERATOR) +#if TRACE_RLC_AM_PDU || MESSAGE_CHART_GENERATOR if (data_indP.data.nb_elements > 0) { @@ -943,7 +930,7 @@ rlc_am_mac_data_indication ( if ((((struct mac_tb_ind *) (tb_p->data))->data_ptr[0] & RLC_DC_MASK) == RLC_DC_DATA_PDU ) { if (rlc_am_get_data_pdu_infos(ctxt_pP,l_rlc_p,rlc_am_pdu_sn_10_p, tb_size_in_bytes, &pdu_info) >= 0) { -#ifdef MESSAGE_CHART_GENERATOR +#if MESSAGE_CHART_GENERATOR message_string_size = 0; message_string_size += sprintf(&message_string[message_string_size], MSC_AS_TIME_FMT" "PROTOCOL_RLC_AM_MSC_FMT" DATA SN %u size %u RF %u P %u FI %u", @@ -977,7 +964,7 @@ rlc_am_mac_data_indication ( #endif -# if defined(ENABLE_ITTI) && defined(TRACE_RLC_AM_PDU) +# if ENABLE_ITTI && TRACE_RLC_AM_PDU message_string_size += sprintf(&message_string[message_string_size], "Bearer : %u\n", l_rlc_p->rb_id); message_string_size += sprintf(&message_string[message_string_size], "PDU size : %u\n", tb_size_in_bytes); message_string_size += sprintf(&message_string[message_string_size], "Header size : %u\n", pdu_info.header_size); @@ -1054,7 +1041,7 @@ rlc_am_mac_data_indication ( } } else { if (rlc_am_get_control_pdu_infos(rlc_am_pdu_sn_10_p, &tb_size_in_bytes, &l_rlc_p->control_pdu_info) >= 0) { -#ifdef MESSAGE_CHART_GENERATOR +#if MESSAGE_CHART_GENERATOR message_string_size = 0; message_string_size += sprintf(&message_string[message_string_size], MSC_AS_TIME_FMT" "PROTOCOL_RLC_AM_MSC_FMT" STATUS size ACK_SN %u", @@ -1084,7 +1071,7 @@ rlc_am_mac_data_indication ( #endif -# if defined(ENABLE_ITTI) && defined(TRACE_RLC_AM_PDU) +# if ENABLE_ITTI && TRACE_RLC_AM_PDU message_string_size = 0; message_string_size += sprintf(&message_string[message_string_size], "Bearer : %u\n", l_rlc_p->rb_id); message_string_size += sprintf(&message_string[message_string_size], "PDU size : %u\n", ((struct mac_tb_ind *) (tb_p->data))->size); @@ -1131,16 +1118,15 @@ rlc_am_data_req ( void * const rlc_pP, mem_block_t * const sdu_pP) { - //----------------------------------------------------------------------------- rlc_am_entity_t *l_rlc_p = (rlc_am_entity_t *) rlc_pP; uint32_t mui; uint16_t data_offset; uint16_t data_size; uint8_t conf; -#if defined(TRACE_RLC_AM_PDU) +#if TRACE_RLC_AM_PDU char message_string[7000]; size_t message_string_size = 0; -#if defined(ENABLE_ITTI) +#if ENABLE_ITTI MessageDef *msg_p; #endif int octet_index, index; @@ -1173,7 +1159,7 @@ rlc_am_data_req ( mui); -#if defined(TRACE_RLC_AM_PDU) +#if TRACE_RLC_AM_PDU message_string_size += sprintf(&message_string[message_string_size], "Bearer : %u\n", l_rlc_p->rb_id); message_string_size += sprintf(&message_string[message_string_size], "SDU size : %u\n", data_size); message_string_size += sprintf(&message_string[message_string_size], "MUI : %u\n", mui); @@ -1211,7 +1197,7 @@ rlc_am_data_req ( message_string_size += sprintf(&message_string[message_string_size], " |\n"); -# if defined(ENABLE_ITTI) +# if ENABLE_ITTI msg_p = itti_alloc_new_message_sized (ctxt_pP->enb_flag > 0 ? TASK_RLC_ENB:TASK_RLC_UE , RLC_AM_SDU_REQ, message_string_size + sizeof (IttiMsgText)); msg_p->ittiMsg.rlc_am_sdu_req.size = message_string_size; memcpy(&msg_p->ittiMsg.rlc_am_sdu_req.text, message_string, message_string_size); @@ -1257,7 +1243,7 @@ rlc_am_data_req ( conf, mui); } else { -#ifdef MESSAGE_CHART_GENERATOR +#if MESSAGE_CHART_GENERATOR mui = ((struct rlc_am_data_req*) (sdu_pP->data))->mui; data_offset = ((struct rlc_am_data_req*) (sdu_pP->data))->data_offset; data_size = ((struct rlc_am_data_req*) (sdu_pP->data))->data_size; @@ -1283,7 +1269,7 @@ rlc_am_data_req ( l_rlc_p->stat_tx_pdcp_sdu_discarded += 1; l_rlc_p->stat_tx_pdcp_bytes_discarded += ((struct rlc_am_data_req *) (sdu_pP->data))->data_size; free_mem_block (sdu_pP); -#if defined(STOP_ON_IP_TRAFFIC_OVERLOAD) +#if STOP_ON_IP_TRAFFIC_OVERLOAD AssertFatal(0, PROTOCOL_RLC_AM_CTXT_FMT" RLC_AM_DATA_REQ size %d Bytes, SDU DROPPED, INPUT BUFFER OVERFLOW NB SDU %d current_sdu_index=%d next_sdu_index=%d \n", PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,l_rlc_p), data_size, diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_in_sdu.c b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_in_sdu.c index d7f34ddc00..5d981b417a 100755 --- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_in_sdu.c +++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_in_sdu.c @@ -33,20 +33,19 @@ COMPANY : EURECOM EMAIL : Lionel.Gauthier@eurecom.fr ***************************************************************************/ -#define RLC_AM_MODULE -#define RLC_AM_IN_SDU_C +#define RLC_AM_MODULE 1 +#define RLC_AM_IN_SDU_C 1 //----------------------------------------------------------------------------- #include "rlc_am.h" #include "LAYER2/MAC/extern.h" #include "UTIL/LOG/log.h" -#define TRACE_RLC_AM_FREE_SDU +#define TRACE_RLC_AM_FREE_SDU 0 //----------------------------------------------------------------------------- void rlc_am_free_in_sdu( const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t *const rlcP, const unsigned int index_in_bufferP) -//----------------------------------------------------------------------------- { if (index_in_bufferP <= RLC_AM_SDU_CONTROL_BUFFER_SIZE) { if (rlcP->input_sdus[index_in_bufferP].mem_block != NULL) { @@ -70,7 +69,7 @@ void rlc_am_free_in_sdu( } } -#ifdef TRACE_RLC_AM_FREE_SDU +#if TRACE_RLC_AM_FREE_SDU LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[FREE SDU] SDU INDEX %03u current_sdu_index=%u next_sdu_index=%u nb_sdu_no_segmented=%u\n", PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlcP), index_in_bufferP, @@ -86,7 +85,6 @@ rlc_am_free_in_sdu_data( const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t* const rlcP, const unsigned int index_in_bufferP) -//----------------------------------------------------------------------------- { if (index_in_bufferP <= RLC_AM_SDU_CONTROL_BUFFER_SIZE) { if (rlcP->input_sdus[index_in_bufferP].mem_block != NULL) { @@ -102,7 +100,6 @@ signed int rlc_am_in_sdu_is_empty( const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t *const rlcP) -//----------------------------------------------------------------------------- { if (rlcP->nb_sdu == 0) { return 1; diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_init.c b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_init.c index 642f4c8d08..ade7becaf1 100755 --- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_init.c +++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_init.c @@ -26,8 +26,8 @@ Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE *******************************************************************************/ -#define RLC_AM_MODULE -#define RLC_AM_INIT_C +#define RLC_AM_MODULE 1 +#define RLC_AM_INIT_C 1 #ifdef USER_MODE #include #endif @@ -40,7 +40,6 @@ void rlc_am_init( const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t *const rlc_pP) -//----------------------------------------------------------------------------- { if (rlc_pP->initialized == TRUE) { LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[AM INIT] INITIALIZATION ALREADY DONE, DOING NOTHING\n", @@ -97,7 +96,6 @@ void rlc_am_reestablish( const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t* const rlc_pP) -//----------------------------------------------------------------------------- { /* * RLC re-establishment is performed upon request by RRC, and the function @@ -153,7 +151,6 @@ void rlc_am_cleanup( rlc_am_entity_t* const rlc_pP ) -//----------------------------------------------------------------------------- { list2_free(&rlc_pP->receiver_buffer); list_free(&rlc_pP->pdus_to_mac_layer); @@ -207,7 +204,6 @@ rlc_am_configure( const uint32_t t_poll_retransmitP, const uint32_t t_reorderingP, const uint32_t t_status_prohibitP) -//----------------------------------------------------------------------------- { if (rlc_pP->configured == TRUE) { LOG_I(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[RECONFIGURE] max_retx_threshold %d poll_pdu %d poll_byte %d t_poll_retransmit %d t_reordering %d t_status_prohibit %d\n", @@ -258,7 +254,6 @@ rlc_am_set_debug_infos( rlc_am_entity_t *const rlc_pP, const srb_flag_t srb_flagP, const rb_id_t rb_idP) -//----------------------------------------------------------------------------- { rlc_pP->rb_id = rb_idP; diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_reassembly.c b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_reassembly.c index 3549f7b5bd..badbd0d71b 100755 --- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_reassembly.c +++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_reassembly.c @@ -26,11 +26,11 @@ Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE *******************************************************************************/ -#define RLC_AM_MODULE -#define RLC_AM_REASSEMBLY_C +#define RLC_AM_MODULE 1 +#define RLC_AM_REASSEMBLY_C 1 #include "platform_types.h" //----------------------------------------------------------------------------- -#if defined(ENABLE_ITTI) +#if ENABLE_ITTI # include "intertask_interface.h" #endif #include "assertions.h" @@ -41,13 +41,11 @@ #include "UTIL/LOG/log.h" #include "msc.h" -//#define TRACE_RLC_AM_RX_DECODE //----------------------------------------------------------------------------- inline void rlc_am_clear_rx_sdu ( const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t * const rlc_pP) -//----------------------------------------------------------------------------- { rlc_pP->output_sdu_size_to_write = 0; } @@ -58,7 +56,6 @@ rlc_am_reassembly ( rlc_am_entity_t * const rlc_pP, uint8_t * src_pP, const int32_t lengthP) -//----------------------------------------------------------------------------- { LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[REASSEMBLY PAYLOAD] reassembly() %d bytes\n", PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), @@ -79,7 +76,7 @@ rlc_am_reassembly ( } else { LOG_E(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[REASSEMBLY PAYLOAD] ERROR SDU SIZE OVERFLOW SDU GARBAGED\n", PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP)); -#if defined(STOP_ON_IP_TRAFFIC_OVERLOAD) +#if STOP_ON_IP_TRAFFIC_OVERLOAD AssertFatal(0, PROTOCOL_RLC_AM_CTXT_FMT" RLC_AM_DATA_IND, SDU SIZE OVERFLOW SDU GARBAGED\n", PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP)); #endif @@ -89,7 +86,7 @@ rlc_am_reassembly ( } else { LOG_E(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[REASSEMBLY PAYLOAD] ERROR OUTPUT SDU IS NULL\n", PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP)); -#if defined(STOP_ON_IP_TRAFFIC_OVERLOAD) +#if STOP_ON_IP_TRAFFIC_OVERLOAD AssertFatal(0, PROTOCOL_RLC_AM_CTXT_FMT" RLC_AM_DATA_IND, SDU DROPPED, OUT OF MEMORY\n", PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP)); #endif @@ -100,12 +97,11 @@ void rlc_am_send_sdu ( const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t * const rlc_pP) -//----------------------------------------------------------------------------- { -# if defined(TRACE_RLC_UM_PDU) +# if TRACE_RLC_UM_PDU char message_string[7000]; size_t message_string_size = 0; -#if defined(ENABLE_ITTI) +#if ENABLE_ITTI MessageDef *msg_p; #endif int octet_index, index; @@ -120,13 +116,13 @@ rlc_am_send_sdu ( if (rlc_pP->output_sdu_size_to_write > 0) { rlc_pP->stat_rx_pdcp_sdu += 1; rlc_pP->stat_rx_pdcp_bytes += rlc_pP->output_sdu_size_to_write; -#ifdef TEST_RLC_AM +#if TEST_RLC_AM rlc_am_v9_3_0_test_data_ind (rlc_pP->module_id, rlc_pP->rb_id, rlc_pP->output_sdu_size_to_write, rlc_pP->output_sdu_in_construction); #else -# if defined(TRACE_RLC_AM_PDU) +# if TRACE_RLC_AM_PDU message_string_size += sprintf(&message_string[message_string_size], "Bearer : %u\n", rlc_pP->rb_id); message_string_size += sprintf(&message_string[message_string_size], "SDU size : %u\n", rlc_pP->output_sdu_size_to_write); @@ -166,7 +162,7 @@ rlc_am_send_sdu ( -# if defined(ENABLE_ITTI) +# if ENABLE_ITTI msg_p = itti_alloc_new_message_sized (ctxt_pP->enb_flag > 0 ? TASK_RLC_ENB:TASK_RLC_UE , RLC_AM_SDU_IND, message_string_size + sizeof (IttiMsgText)); @@ -179,7 +175,7 @@ rlc_am_send_sdu ( LOG_T(RLC, "%s", message_string); # endif # endif -#if !defined(ENABLE_ITTI) +#if !ENABLE_ITTI RLC_AM_MUTEX_UNLOCK(&rlc_pP->lock_input_sdus); #endif MSC_LOG_TX_MESSAGE( @@ -199,7 +195,7 @@ rlc_am_send_sdu ( rlc_pP->rb_id, rlc_pP->output_sdu_size_to_write, rlc_pP->output_sdu_in_construction); -#if !defined(ENABLE_ITTI) +#if !ENABLE_ITTI RLC_AM_MUTEX_LOCK(&rlc_pP->lock_input_sdus, ctxt_pP, rlc_pP); #endif #endif @@ -225,14 +221,13 @@ rlc_am_reassemble_pdu( rlc_am_entity_t * const rlc_pP, mem_block_t * const tb_pP) { - //----------------------------------------------------------------------------- int i,j; rlc_am_pdu_info_t* pdu_info = &((rlc_am_rx_pdu_management_t*)(tb_pP->data))->pdu_info; LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[REASSEMBLY PDU] TRY REASSEMBLY PDU SN=%03d\n", PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), pdu_info->sn); -#ifdef TRACE_RLC_AM_RX_DECODE +#if TRACE_RLC_AM_RX_DECODE rlc_am_display_data_pdu_infos(ctxt_pP, rlc_pP, pdu_info); #endif @@ -279,7 +274,7 @@ rlc_am_reassemble_pdu( //} break; -#ifdef USER_MODE +#if USER_MODE default: assert(0 != 0); @@ -394,14 +389,14 @@ rlc_am_reassemble_pdu( // data is already ok, done by last loop above rlc_am_reassembly (ctxt_pP, rlc_pP, &pdu_info->payload[j], pdu_info->hidden_size); } else { -#ifdef USER_MODE +#if USER_MODE //assert (5!=5); #endif } //rlc_pP->reassembly_missing_sn_detected = 0; break; -#ifdef USER_MODE +#if USER_MODE default: assert(1 != 1); diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_receiver.c b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_receiver.c index ef5cced0b4..e85f627a4b 100755 --- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_receiver.c +++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_receiver.c @@ -26,9 +26,8 @@ Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE *******************************************************************************/ -#define RLC_AM_MODULE -#define RLC_AM_RECEIVER_C -//#include "rtos_header.h" +#define RLC_AM_MODULE 1 +#define RLC_AM_RECEIVER_C 1 #include "platform_types.h" //----------------------------------------------------------------------------- #include "assertions.h" @@ -39,9 +38,6 @@ #include "LAYER2/MAC/extern.h" #include "UTIL/LOG/log.h" -#define TRACE_RLC_AM_RX -//#define DEBUG_RLC_AM_DISPLAY_TB_DATA -//#define RLC_AM_GENERATE_ERRORS //----------------------------------------------------------------------------- signed int rlc_am_get_data_pdu_infos( @@ -50,7 +46,6 @@ rlc_am_get_data_pdu_infos( rlc_am_pdu_sn_10_t* header_pP, int16_t total_sizeP, rlc_am_pdu_info_t* pdu_info_pP) -//----------------------------------------------------------------------------- { memset(pdu_info_pP, 0, sizeof (rlc_am_pdu_info_t)); @@ -142,7 +137,6 @@ rlc_am_display_data_pdu_infos( const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t * const rlc_pP, rlc_am_pdu_info_t* pdu_info_pP) -//----------------------------------------------------------------------------- { int num_li; @@ -183,7 +177,6 @@ rlc_am_rx_update_vr_ms( const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t * const rlc_pP, mem_block_t* tb_pP) -//----------------------------------------------------------------------------- { //rlc_am_pdu_info_t* pdu_info_p = &((rlc_am_rx_pdu_management_t*)(tb_pP->data))->pdu_info; rlc_am_pdu_info_t* pdu_info_cursor_p = NULL; @@ -196,7 +189,7 @@ rlc_am_rx_update_vr_ms( pdu_info_cursor_p = &((rlc_am_rx_pdu_management_t*)(cursor_p->data))->pdu_info; if (((rlc_am_rx_pdu_management_t*)(cursor_p->data))->all_segments_received == 0) { -#ifdef TRACE_RLC_AM_RX +#if TRACE_RLC_AM_RX LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[UPDATE VR(MS)] UPDATED VR(MS) %04d -> %04d\n", PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), rlc_pP->vr_ms, pdu_info_cursor_p->sn); @@ -208,7 +201,7 @@ rlc_am_rx_update_vr_ms( cursor_p = cursor_p->next; } while (cursor_p != NULL); -#ifdef TRACE_RLC_AM_RX +#if TRACE_RLC_AM_RX LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[UPDATE VR(MS)] UPDATED VR(MS) %04d -> %04d\n", PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), rlc_pP->vr_ms, @@ -224,7 +217,6 @@ rlc_am_rx_update_vr_r( const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t * const rlc_pP, mem_block_t* tb_pP) -//----------------------------------------------------------------------------- { rlc_am_pdu_info_t* pdu_info_cursor_p = NULL; mem_block_t* cursor_p; @@ -240,7 +232,7 @@ rlc_am_rx_update_vr_r( return; } -#ifdef TRACE_RLC_AM_RX +#if TRACE_RLC_AM_RX LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[UPDATE VR(R)] UPDATED VR(R) %04d -> %04d\n", PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), rlc_pP->vr_r, @@ -267,7 +259,6 @@ rlc_am_receive_routing ( const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t * const rlc_pP, struct mac_data_ind data_indP) -//----------------------------------------------------------------------------- { mem_block_t *tb_p = NULL; uint8_t *first_byte_p = NULL; @@ -309,7 +300,6 @@ rlc_am_receive_process_data_pdu ( mem_block_t* tb_pP, uint8_t* first_byte_pP, uint16_t tb_size_in_bytesP) -//----------------------------------------------------------------------------- { // 5.1.3.2 Receive operations // 5.1.3.2.1 General @@ -367,7 +357,7 @@ rlc_am_receive_process_data_pdu ( LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[PROCESS RX PDU] PDU DISCARDED, STATUS REQUESTED:\n", PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP)); rlc_pP->status_requested = 1; -#if defined(RLC_STOP_ON_LOST_PDU) +#if RLC_STOP_ON_LOST_PDU AssertFatal( 0 == 1, PROTOCOL_RLC_AM_CTXT_FMT" LOST PDU DETECTED\n", PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP)); @@ -405,7 +395,7 @@ rlc_am_receive_process_data_pdu ( // - set VR(X) to VR(H). -#ifdef TRACE_RLC_AM_RX +#if TRACE_RLC_AM_RX LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[PROCESS RX PDU] RX LIST AFTER INSERTION:\n", PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP)); rlc_am_rx_list_display(rlc_pP, "rlc_am_receive_process_data_pdu AFTER INSERTION "); diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_retransmit.c b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_retransmit.c index 6cc56beaf8..ec0da054c8 100755 --- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_retransmit.c +++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_retransmit.c @@ -26,8 +26,8 @@ Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE *******************************************************************************/ -#define RLC_AM_MODULE -#define RLC_AM_RETRANSMIT_C +#define RLC_AM_MODULE 1 +#define RLC_AM_RETRANSMIT_C 1 //----------------------------------------------------------------------------- //#include "rtos_header.h" //----------------------------------------------------------------------------- @@ -43,7 +43,6 @@ void rlc_am_nack_pdu ( const rlc_sn_t snP, const sdu_size_t so_startP, const sdu_size_t so_endP) -//----------------------------------------------------------------------------- { // 5.2.1 Retransmission // ... @@ -112,7 +111,7 @@ void rlc_am_nack_pdu ( rlc_pP->input_sdus[sdu_index].nb_pdus_ack += 1; if (rlc_pP->input_sdus[sdu_index].nb_pdus_ack == rlc_pP->input_sdus[sdu_index].nb_pdus) { -#ifdef TEST_RLC_AM +#if TEST_RLC_AM rlc_am_v9_3_0_test_data_conf (rlc_pP->module_id, rlc_pP->rb_id, rlc_pP->input_sdus[sdu_index].mui, RLC_SDU_CONFIRM_NO); #else rlc_data_conf(ctxt_pP, rlc_pP->rb_id, rlc_pP->input_sdus[sdu_index].mui, RLC_SDU_CONFIRM_NO, rlc_pP->is_data_plane); @@ -142,7 +141,6 @@ void rlc_am_ack_pdu ( const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t *const rlc_pP, const rlc_sn_t snP) -//----------------------------------------------------------------------------- { mem_block_t* mb_p = rlc_pP->pdu_retrans_buffer[snP].mem_block; int pdu_sdu_index; @@ -173,7 +171,7 @@ void rlc_am_ack_pdu ( if ((rlc_pP->input_sdus[sdu_index].nb_pdus_ack == rlc_pP->input_sdus[sdu_index].nb_pdus) && (rlc_pP->input_sdus[sdu_index].sdu_remaining_size == 0)) { -#ifdef TEST_RLC_AM +#if TEST_RLC_AM rlc_am_v9_3_0_test_data_conf ( rlc_pP->module_id, rlc_pP->rb_id, @@ -276,7 +274,6 @@ mem_block_t* rlc_am_retransmit_get_copy ( const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t *const rlc_pP, const rlc_sn_t snP) -//----------------------------------------------------------------------------- { mem_block_t* mb_original_p = rlc_pP->pdu_retrans_buffer[snP].mem_block; @@ -305,7 +302,6 @@ mem_block_t* rlc_am_retransmit_get_subsegment( rlc_am_entity_t *const rlc_pP, const rlc_sn_t snP, sdu_size_t * const sizeP /* in-out*/) -//----------------------------------------------------------------------------- { // 5.2 ARQ procedures @@ -487,7 +483,7 @@ mem_block_t* rlc_am_retransmit_get_subsegment( test_start_offset, test_li_sum); /*if (test_max_copy_payload_size > (test_li_sum - test_start_offset)) { - #ifdef TRACE_RLC_AM_RESEGMENT + #if TRACE_RLC_AM_RESEGMENT LOG_D(RLC, "[FRAME %5u][%s][RLC_AM][MOD %u/%u][RB %u][RE-SEGMENT] CUT test_max_copy_payload_size with test_li_sum - test_start_offset %d -> %d\n",ctxt_pP->frame, rlc_pP->module_id, rlc_pP->rb_id, test_max_copy_payload_size, test_li_sum - test_start_offset); #endif test_max_copy_payload_size = test_li_sum - test_start_offset; @@ -771,7 +767,6 @@ void rlc_am_tx_buffer_display ( const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t* const rlc_pP, char* const message_pP) -//----------------------------------------------------------------------------- { rlc_sn_t sn = rlc_pP->vt_a; int i, loop = 0; @@ -824,7 +819,6 @@ void rlc_am_tx_buffer_display ( void rlc_am_retransmit_any_pdu( const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t* const rlc_pP) -//----------------------------------------------------------------------------- { rlc_sn_t sn = (rlc_pP->vt_s - 1) & RLC_AM_SN_MASK; rlc_sn_t sn_end = (rlc_pP->vt_a - 1) & RLC_AM_SN_MASK; @@ -847,7 +841,7 @@ void rlc_am_retransmit_any_pdu( LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[FORCE-TRAFFIC] RE-SEND DATA PDU SN %04d\n", PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), sn); -#if defined(MESSAGE_CHART_GENERATOR_RLC_MAC) +#if MESSAGE_CHART_GENERATOR_RLC_MAC MSC_LOG_EVENT((ctxt_pP->enb_flag == ENB_FLAG_YES) ? MSC_RLC_ENB:MSC_RLC_UE,\ "0 "PROTOCOL_RLC_AM_MSC_FMT" RTX any pdu found SN %u",\ PROTOCOL_RLC_AM_MSC_ARGS(ctxt_pP,rlc_pP), sn); @@ -882,7 +876,7 @@ void rlc_am_retransmit_any_pdu( found_pdu_sn); if (rlc_pP->nb_bytes_requested_by_mac > 4) { -#if defined(MESSAGE_CHART_GENERATOR_RLC_MAC) +#if MESSAGE_CHART_GENERATOR_RLC_MAC MSC_LOG_EVENT((ctxt_pP->enb_flag == ENB_FLAG_YES) ? MSC_RLC_ENB:MSC_RLC_UE,\ "0 "PROTOCOL_RLC_AM_MSC_FMT" RTX any pdu found SN %u (subseg)",\ PROTOCOL_RLC_AM_MSC_ARGS(ctxt_pP,rlc_pP), found_pdu_sn); diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_rx_list.c b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_rx_list.c index d57791dcf7..4a96a25306 100755 --- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_rx_list.c +++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_rx_list.c @@ -26,11 +26,9 @@ Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE *******************************************************************************/ -#define RLC_AM_MODULE -#define RLC_AM_RX_LIST_C +#define RLC_AM_MODULE 1 +#define RLC_AM_RX_LIST_C 1 //----------------------------------------------------------------------------- -//----------------------------------------------------------------------------- -//#include "rtos_header.h" #include "platform_types.h" //----------------------------------------------------------------------------- #include "assertions.h" @@ -49,7 +47,6 @@ rlc_am_rx_list_insert_pdu( const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t* const rlc_pP, mem_block_t* const tb_pP) -//----------------------------------------------------------------------------- { rlc_am_pdu_info_t* pdu_info_p = &((rlc_am_rx_pdu_management_t*)(tb_pP->data))->pdu_info; rlc_am_pdu_info_t* pdu_info_cursor_p = NULL; @@ -496,7 +493,6 @@ rlc_am_rx_check_all_byte_segments( const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t* const rlc_pP, mem_block_t* const tb_pP) -//----------------------------------------------------------------------------- { rlc_am_pdu_info_t *pdu_info_p = &((rlc_am_rx_pdu_management_t*)(tb_pP->data))->pdu_info; mem_block_t *cursor_p = NULL; @@ -584,7 +580,6 @@ rlc_am_rx_mark_all_segments_received( const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t* const rlc_pP, mem_block_t* const fisrt_segment_tbP) -//----------------------------------------------------------------------------- { rlc_am_pdu_info_t* pdu_info_p = &((rlc_am_rx_pdu_management_t*)(fisrt_segment_tbP->data))->pdu_info; rlc_am_pdu_info_t* pdu_info_cursor_p = NULL; @@ -616,7 +611,6 @@ void rlc_am_rx_list_reassemble_rlc_sdus( const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t* const rlc_pP) -//----------------------------------------------------------------------------- { mem_block_t* cursor_p = NULL; rlc_am_rx_pdu_management_t* rlc_am_rx_old_pdu_management = NULL; @@ -642,7 +636,7 @@ rlc_am_rx_list_reassemble_rlc_sdus( rlc_am_rx_pdu_management_p = ((rlc_am_rx_pdu_management_t*)(cursor_p->data)); } else { -#if defined(RLC_STOP_ON_LOST_PDU) +#if RLC_STOP_ON_LOST_PDU if (list2_get_head(&rlc_pP->receiver_buffer) != cursor_p) { AssertFatal( 0 == 1, @@ -663,7 +657,6 @@ list2_insert_before_element ( mem_block_t * element_to_insert_pP, mem_block_t * element_pP, list2_t * list_pP) -//----------------------------------------------------------------------------- { if ((element_to_insert_pP != NULL) && (element_pP != NULL)) { list_pP->nb_elements = list_pP->nb_elements + 1; @@ -690,7 +683,6 @@ list2_insert_after_element ( mem_block_t * element_to_insert_pP, mem_block_t * element_pP, list2_t * list_pP) -//----------------------------------------------------------------------------- { if ((element_to_insert_pP != NULL) && (element_pP != NULL)) { @@ -717,7 +709,6 @@ void rlc_am_rx_list_display ( const rlc_am_entity_t* const rlc_pP, char* message_pP) -//----------------------------------------------------------------------------- { mem_block_t *cursor_p = NULL; unsigned int loop = 0; diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_segment.c b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_segment.c index 0b2b847ec7..d5c53c3b6b 100755 --- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_segment.c +++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_segment.c @@ -26,14 +26,13 @@ Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE *******************************************************************************/ -#define RLC_AM_MODULE -#define RLC_AM_SEGMENT_C +#define RLC_AM_MODULE 1 +#define RLC_AM_SEGMENT_C 1 //----------------------------------------------------------------------------- -#ifdef USER_MODE +#if USER_MODE #include #endif //----------------------------------------------------------------------------- -//#include "rtos_header.h" #include "platform_types.h" //----------------------------------------------------------------------------- #include "msc.h" @@ -48,7 +47,6 @@ void rlc_am_pdu_polling ( rlc_am_entity_t *const rlc_pP, rlc_am_pdu_sn_10_t *const pdu_pP, const int16_t payload_sizeP) -//----------------------------------------------------------------------------- { // 5.2.2 Polling // An AM RLC entity can poll its peer AM RLC entity in order to trigger STATUS reporting at the peer AM RLC entity. @@ -127,7 +125,6 @@ void rlc_am_segment_10 ( const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t *const rlc_pP) { - //----------------------------------------------------------------------------- list_t pdus; sdu_size_t pdu_remaining_size = 0; sdu_size_t test_pdu_remaining_size = 0; @@ -465,7 +462,7 @@ void rlc_am_segment_10 ( PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), sdu_mngt_p->sdu_remaining_size, pdu_remaining_size - sdu_mngt_p->sdu_remaining_size); -#ifdef USER_MODE +#if USER_MODE assert(1!=1); #endif memcpy(data, data_sdu_p, sdu_mngt_p->sdu_remaining_size); diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_segments_holes.c b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_segments_holes.c index 94e88ffeb8..cb00704175 100755 --- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_segments_holes.c +++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_segments_holes.c @@ -26,20 +26,18 @@ Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE *******************************************************************************/ -#define RLC_AM_MODULE -#define RLC_AM_SEGMENT_HOLES_C +#define RLC_AM_MODULE 1 +#define RLC_AM_SEGMENT_HOLES_C 1 //----------------------------------------------------------------------------- #include "rlc_am.h" #include "LAYER2/MAC/extern.h" #include "UTIL/LOG/log.h" -#define TRACE_RLC_AM_HOLE //----------------------------------------------------------------------------- void rlc_am_clear_holes ( const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t *const rlc_pP, const rlc_sn_t snP) -//----------------------------------------------------------------------------- { rlc_pP->pdu_retrans_buffer[snP].num_holes = 0; } @@ -49,7 +47,6 @@ void rlc_am_shift_down_holes ( rlc_am_entity_t *const rlc_pP, const rlc_sn_t snP, const int indexP) -//----------------------------------------------------------------------------- { int i; @@ -66,7 +63,6 @@ void rlc_am_shift_up_holes ( rlc_am_entity_t *const rlc_pP, const rlc_sn_t snP, const int indexP) -//----------------------------------------------------------------------------- { // shift include indexP int i; @@ -86,10 +82,9 @@ void rlc_am_remove_hole ( const rlc_sn_t snP, const sdu_size_t so_startP, const sdu_size_t so_stopP) -//----------------------------------------------------------------------------- { int i; -#ifdef TRACE_RLC_AM_HOLE +#if TRACE_RLC_AM_HOLE LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[HOLE] REMOVE HOLE SN %04d so_startP %05d so_stopP %05d rlc_pP->pdu_retrans_buffer[snP].nack_so_start %05d rlc_pP->pdu_retrans_buffer[snP].nack_so_stop %05d\n", PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), @@ -104,7 +99,7 @@ void rlc_am_remove_hole ( if (rlc_pP->pdu_retrans_buffer[snP].num_holes == 0) { assert(so_startP == rlc_pP->pdu_retrans_buffer[snP].nack_so_start); assert(so_stopP <= rlc_pP->pdu_retrans_buffer[snP].nack_so_stop); -#ifdef TRACE_RLC_AM_HOLE +#if TRACE_RLC_AM_HOLE LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[HOLE] REMOVE HOLE SN %04d MODIFIED nack_so_start %05d->%05d\n", PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), snP, @@ -135,7 +130,7 @@ void rlc_am_remove_hole ( rlc_pP->pdu_retrans_buffer[snP].nack_so_stop = rlc_pP->pdu_retrans_buffer[snP].hole_so_stop[rlc_pP->pdu_retrans_buffer[snP].num_holes - 1]; } -#ifdef TRACE_RLC_AM_HOLE +#if TRACE_RLC_AM_HOLE LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[HOLE] REMOVE HOLE SN %04d NOW nack_so_start %05d nack_so_stop %05d num holes %d\n", PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), snP, @@ -169,7 +164,7 @@ void rlc_am_remove_hole ( } } -#ifdef TRACE_RLC_AM_HOLE +#if TRACE_RLC_AM_HOLE LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[HOLE] REMOVE HOLE SN %04d NOW nack_so_start %05d nack_so_stop %05d num holes %d\n", PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), snP, @@ -186,12 +181,11 @@ void rlc_am_get_next_hole ( const rlc_sn_t snP, sdu_size_t* const so_startP, sdu_size_t* const so_stopP) -//----------------------------------------------------------------------------- { if (rlc_pP->pdu_retrans_buffer[snP].num_holes == 0) { *so_startP = rlc_pP->pdu_retrans_buffer[snP].nack_so_start; *so_stopP = rlc_pP->pdu_retrans_buffer[snP].nack_so_stop; -#ifdef TRACE_RLC_AM_HOLE +#if TRACE_RLC_AM_HOLE LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[HOLE] rlc_am_get_next_hole(SN %04d) %05d->%05d (NUM HOLES == 0)\n", PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), snP, @@ -201,7 +195,7 @@ void rlc_am_get_next_hole ( } else { *so_startP = rlc_pP->pdu_retrans_buffer[snP].hole_so_start[0]; *so_stopP = rlc_pP->pdu_retrans_buffer[snP].hole_so_stop[0]; -#ifdef TRACE_RLC_AM_HOLE +#if TRACE_RLC_AM_HOLE LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[HOLE] rlc_am_get_next_hole(SN %04d) %05d->%05d (NUM HOLES == %d)\n", PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), snP, @@ -218,7 +212,6 @@ void rlc_am_add_hole ( const rlc_sn_t snP, const sdu_size_t so_startP, sdu_size_t so_stopP) -//----------------------------------------------------------------------------- { int i, hole_index; @@ -232,7 +225,7 @@ void rlc_am_add_hole ( rlc_pP->pdu_retrans_buffer[snP].num_holes = 0; rlc_pP->pdu_retrans_buffer[snP].nack_so_start = so_startP; rlc_pP->pdu_retrans_buffer[snP].nack_so_stop = so_stopP; -#ifdef TRACE_RLC_AM_HOLE +#if TRACE_RLC_AM_HOLE LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[HOLE] SN %04d GLOBAL NACK 0->%05d\n", PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), snP, @@ -255,7 +248,7 @@ void rlc_am_add_hole ( rlc_pP->pdu_retrans_buffer[snP].nack_so_start = so_startP; rlc_pP->pdu_retrans_buffer[snP].nack_so_stop = so_stopP; -#ifdef TRACE_RLC_AM_HOLE +#if TRACE_RLC_AM_HOLE LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[HOLE] FIRST HOLE SN %04d GLOBAL NACK %05d->%05d\n", PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), snP, @@ -290,7 +283,7 @@ void rlc_am_add_hole ( } rlc_pP->pdu_retrans_buffer[snP].num_holes += 1; -#ifdef TRACE_RLC_AM_HOLE +#if TRACE_RLC_AM_HOLE LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[HOLE] INSERT %d th HOLE SN %04d GLOBAL NACK %05d->%05d\n", PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), rlc_pP->pdu_retrans_buffer[snP].num_holes, @@ -314,7 +307,7 @@ void rlc_am_add_hole ( rlc_pP->pdu_retrans_buffer[snP].num_holes += 1; // update nack "window" vars nack_so_start, nack_so_stop rlc_pP->pdu_retrans_buffer[snP].nack_so_stop = so_stopP; -#ifdef TRACE_RLC_AM_HOLE +#if TRACE_RLC_AM_HOLE LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[HOLE] INSERT THE %d th LAST HOLE SN %04d GLOBAL NACK %05d->%05d\n", PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), rlc_pP->pdu_retrans_buffer[snP].num_holes, diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_status_report.c b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_status_report.c index fc6b4c3655..84d86c1a91 100755 --- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_status_report.c +++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_status_report.c @@ -26,14 +26,14 @@ Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE *******************************************************************************/ -#define RLC_AM_MODULE -#define RLC_AM_STATUS_REPORT_C +#define RLC_AM_MODULE 1 +#define RLC_AM_STATUS_REPORT_C 1 //----------------------------------------------------------------------------- #include //----------------------------------------------------------------------------- #include "platform_types.h" //----------------------------------------------------------------------------- -#if defined(ENABLE_ITTI) +#if ENABLE_ITTI # include "intertask_interface.h" #endif #include "assertions.h" @@ -42,16 +42,13 @@ #include "LAYER2/MAC/extern.h" #include "UTIL/LOG/log.h" -//#define TRACE_RLC_AM_STATUS_CREATION 1 - -# if defined(ENABLE_ITTI) +# if ENABLE_ITTI //----------------------------------------------------------------------------- void rlc_am_itti_display_status_ind_infos( const protocol_ctxt_t* const ctxt_pP, const rlc_am_entity_t *const rlc_pP, const rlc_am_control_pdu_info_t *const pdu_info_pP) -//----------------------------------------------------------------------------- { char message_string[1000]; size_t message_string_size = 0; @@ -91,7 +88,6 @@ uint16_t rlc_am_read_bit_field( unsigned int* bit_pos_pP, const signed int bits_to_readP) { - //----------------------------------------------------------------------------- uint16_t value = 0; unsigned int bits_read = 0; signed int bits_to_read = bits_to_readP; @@ -130,7 +126,6 @@ rlc_am_write8_bit_field( const signed int bits_to_writeP, const uint8_t valueP) { - //----------------------------------------------------------------------------- unsigned int available_bits; signed int bits_to_write= bits_to_writeP; @@ -166,7 +161,6 @@ rlc_am_write16_bit_field( signed int bits_to_writeP, const uint16_t valueP) { - //----------------------------------------------------------------------------- assert(bits_to_writeP <= 16); if (bits_to_writeP > 8) { @@ -182,7 +176,6 @@ rlc_am_get_control_pdu_infos( rlc_am_pdu_sn_10_t* const header_pP, sdu_size_t * const total_size_pP, rlc_am_control_pdu_info_t* const pdu_info_pP) -//----------------------------------------------------------------------------- { memset(pdu_info_pP, 0, sizeof (rlc_am_control_pdu_info_t)); @@ -250,7 +243,6 @@ void rlc_am_display_control_pdu_infos( const rlc_am_control_pdu_info_t* const pdu_info_pP ) -//----------------------------------------------------------------------------- { int num_nack; @@ -280,7 +272,6 @@ rlc_am_receive_process_control_pdu( mem_block_t* const tb_pP, uint8_t** first_byte_ppP, sdu_size_t * const tb_size_in_bytes_pP) -//----------------------------------------------------------------------------- { rlc_am_pdu_sn_10_t *rlc_am_pdu_sn_10_p = (rlc_am_pdu_sn_10_t*)*first_byte_ppP; sdu_size_t initial_pdu_size = *tb_size_in_bytes_pP; @@ -396,7 +387,6 @@ rlc_am_write_status_pdu( rlc_am_entity_t *const rlc_pP, rlc_am_pdu_sn_10_t* const rlc_am_pdu_sn_10_pP, rlc_am_control_pdu_info_t* const pdu_info_pP) -//----------------------------------------------------------------------------- { unsigned int bit_pos = 4; // range from 0 (MSB/left) to 7 (LSB/right) uint8_t* byte_pos_p = &rlc_am_pdu_sn_10_pP->b1; @@ -430,7 +420,7 @@ rlc_am_write_status_pdu( num_bytes += 1; } -#ifdef TRACE_RLC_AM_STATUS_CREATION +#if TRACE_RLC_AM_STATUS_CREATION LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT" WROTE STATUS PDU %d BYTES\n", PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), num_bytes); @@ -443,7 +433,6 @@ rlc_am_send_status_pdu( const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t *const rlc_pP ) -//----------------------------------------------------------------------------- { // When STATUS reporting has been triggered, the receiving side of an AM RLC entity shall: // - if t-StatusProhibit is not running: @@ -481,7 +470,7 @@ rlc_am_send_status_pdu( memset(&control_pdu_info, 0, sizeof(rlc_am_control_pdu_info_t)); // header size nb_bits_to_transmit = nb_bits_to_transmit - 15; -#ifdef TRACE_RLC_AM_STATUS_CREATION +#if TRACE_RLC_AM_STATUS_CREATION LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[SEND-STATUS] nb_bits_to_transmit %d (15 already allocated for header)\n", PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), nb_bits_to_transmit); @@ -498,7 +487,7 @@ rlc_am_send_status_pdu( pdu_info_cursor_p = &((rlc_am_rx_pdu_management_t*)(cursor_p->data))->pdu_info; sn_cursor = pdu_info_cursor_p->sn; -#ifdef TRACE_RLC_AM_STATUS_CREATION +#if TRACE_RLC_AM_STATUS_CREATION LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[SEND-STATUS] LINE %d FIND VR(R) <= SN sn_cursor %04d -> %04d\n", PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), __LINE__, @@ -513,7 +502,7 @@ rlc_am_send_status_pdu( pdu_info_cursor_p = &((rlc_am_rx_pdu_management_t*)(cursor_p->data))->pdu_info; all_segments_received = ((rlc_am_rx_pdu_management_t*)(cursor_p->data))->all_segments_received; sn_cursor = pdu_info_cursor_p->sn; -#ifdef TRACE_RLC_AM_STATUS_CREATION +#if TRACE_RLC_AM_STATUS_CREATION LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[SEND-STATUS] LINE %d LOOPING sn_cursor %04d previous sn_cursor %04d \n", PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), __LINE__, @@ -532,7 +521,7 @@ rlc_am_send_status_pdu( pdu_info_cursor_p = &((rlc_am_rx_pdu_management_t*)(cursor_p->data))->pdu_info; all_segments_received = ((rlc_am_rx_pdu_management_t*)(cursor_p->data))->all_segments_received; sn_cursor = pdu_info_cursor_p->sn; -#ifdef TRACE_RLC_AM_STATUS_CREATION +#if TRACE_RLC_AM_STATUS_CREATION LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[SEND-STATUS] LINE %d NOW sn_cursor %04d \n", PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), __LINE__, @@ -541,7 +530,7 @@ rlc_am_send_status_pdu( } else { if (all_segments_received) { control_pdu_info.ack_sn = (sn_cursor + 1) & RLC_AM_SN_MASK; -#ifdef TRACE_RLC_AM_STATUS_CREATION +#if TRACE_RLC_AM_STATUS_CREATION LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[SEND-STATUS] LINE %d PREPARE SENDING ACK SN %04d \n", PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), __LINE__, @@ -549,7 +538,7 @@ rlc_am_send_status_pdu( #endif } else { control_pdu_info.ack_sn = (previous_sn_cursor + 1) & RLC_AM_SN_MASK; -#ifdef TRACE_RLC_AM_STATUS_CREATION +#if TRACE_RLC_AM_STATUS_CREATION LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[SEND-STATUS] LINE %d PREPARE SENDING ACK SN %04d (CASE PREVIOUS SN)\n", PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), __LINE__, @@ -575,7 +564,7 @@ rlc_am_send_status_pdu( control_pdu_info.nack_list[control_pdu_info.num_nack].e2 = 0; control_pdu_info.num_nack += 1; nb_bits_to_transmit = nb_bits_to_transmit - 12; -#ifdef TRACE_RLC_AM_STATUS_CREATION +#if TRACE_RLC_AM_STATUS_CREATION LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[SEND-STATUS] LINE %d PREPARE SENDING NACK %04d\n", PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), __LINE__, @@ -583,7 +572,7 @@ rlc_am_send_status_pdu( #endif } else { control_pdu_info.ack_sn = (previous_sn_cursor + 1) & RLC_AM_SN_MASK; -#ifdef TRACE_RLC_AM_STATUS_CREATION +#if TRACE_RLC_AM_STATUS_CREATION LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[SEND-STATUS] LINE %d NO MORE BITS FOR SENDING NACK %04d -> ABORT AND SET FINAL ACK %04d\n", PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), __LINE__, @@ -599,7 +588,7 @@ rlc_am_send_status_pdu( // ------------------------------------------------------------------------------- if (all_segments_received == 0) { waited_so = 0; -#ifdef TRACE_RLC_AM_STATUS_CREATION +#if TRACE_RLC_AM_STATUS_CREATION LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[SEND-STATUS] if (all_segments_received == 0) \n", PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP)); #endif @@ -614,7 +603,7 @@ rlc_am_send_status_pdu( control_pdu_info.nack_list[control_pdu_info.num_nack].e2 = 1; control_pdu_info.num_nack += 1; nb_bits_to_transmit = nb_bits_to_transmit - 42; -#ifdef TRACE_RLC_AM_STATUS_CREATION +#if TRACE_RLC_AM_STATUS_CREATION LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[SEND-STATUS] LINE %d PREPARE SENDING NACK %04d SO START %05d SO END %05d (CASE SO %d > WAITED SO %d)\n", PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), __LINE__, @@ -628,7 +617,7 @@ rlc_am_send_status_pdu( if (pdu_info_cursor_p->lsf == 1) { // last segment flag //waited_so = 0x7FF; waited_so = 0x7FFF; -#ifdef TRACE_RLC_AM_STATUS_CREATION +#if TRACE_RLC_AM_STATUS_CREATION LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[SEND-STATUS] LINE %d SN %04d SET WAITED SO 0x7FFF)\n", PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), __LINE__, sn_cursor); @@ -636,7 +625,7 @@ rlc_am_send_status_pdu( //break; } else { waited_so = pdu_info_cursor_p->so + pdu_info_cursor_p->payload_size; -#ifdef TRACE_RLC_AM_STATUS_CREATION +#if TRACE_RLC_AM_STATUS_CREATION LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[SEND-STATUS] LINE %d SN %04d SET WAITED SO %d @1\n", PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), __LINE__, @@ -656,7 +645,7 @@ rlc_am_send_status_pdu( waited_so = 0x7FFF; } -#ifdef TRACE_RLC_AM_STATUS_CREATION +#if TRACE_RLC_AM_STATUS_CREATION LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[SEND-STATUS] LINE %d SN %04d SET WAITED SO %d @2\n", PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), __LINE__, @@ -690,7 +679,7 @@ rlc_am_send_status_pdu( control_pdu_info.nack_list[control_pdu_info.num_nack].e2 = 1; control_pdu_info.num_nack += 1; nb_bits_to_transmit = nb_bits_to_transmit - 42; -#ifdef TRACE_RLC_AM_STATUS_CREATION +#if TRACE_RLC_AM_STATUS_CREATION LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[SEND-STATUS] LINE %d PREPARE SENDING NACK %04d SO START %05d SO END %05d\n", PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), __LINE__, @@ -715,7 +704,7 @@ rlc_am_send_status_pdu( control_pdu_info.ack_sn = (previous_sn_cursor + 1) & RLC_AM_SN_MASK; } else { control_pdu_info.ack_sn = rlc_pP->vr_r; -#ifdef TRACE_RLC_AM_STATUS_CREATION +#if TRACE_RLC_AM_STATUS_CREATION LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[SEND-STATUS] LINE %d PREPARE SENDING ACK %04d = VR(R)\n", PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), __LINE__, @@ -732,7 +721,7 @@ end_push_nack: //msg ("[FRAME %5u][%s][RLC_AM][MOD %u/%u][RB %u] nb_bits_to_transmit %d\n", // rlc_pP->module_id, rlc_pP->rb_id, ctxt_pP->frame,nb_bits_to_transmit); -#ifdef TRACE_RLC_AM_STATUS_CREATION +#if TRACE_RLC_AM_STATUS_CREATION LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[SEND-STATUS] LINE %d PREPARE SENDING ACK %04d NUM NACK %d\n", PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), __LINE__, @@ -742,7 +731,7 @@ end_push_nack: // encode the control pdu pdu_size = rlc_pP->nb_bytes_requested_by_mac - ((nb_bits_to_transmit - 7 )>> 3); -#ifdef TRACE_RLC_AM_STATUS_CREATION +#if TRACE_RLC_AM_STATUS_CREATION LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[SEND-STATUS] LINE %d forecast pdu_size %d\n", PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), __LINE__, @@ -758,7 +747,7 @@ end_push_nack: ((struct mac_tb_req*)(tb_p->data))->tb_size = pdu_size; //assert((((struct mac_tb_req*)(tb_p->data))->tb_size) < 3000); -#ifdef TRACE_RLC_AM_STATUS_CREATION +#if TRACE_RLC_AM_STATUS_CREATION LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[SEND-STATUS] SEND STATUS PDU SIZE %d, rlc_pP->nb_bytes_requested_by_mac %d, nb_bits_to_transmit>>3 %d\n", PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), pdu_size, diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_test.c b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_test.c index 5d7225fced..a174b7fa93 100755 --- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_test.c +++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_test.c @@ -26,9 +26,9 @@ Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE *******************************************************************************/ -#define RLC_AM_MODULE -#define RLC_AM_TEST_C -#define RLC_C +#define RLC_AM_MODULE 1 +#define RLC_AM_TEST_C 1 +#define RLC_C 1 #include #include diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_timer_poll_retransmit.c b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_timer_poll_retransmit.c index 7352bae05f..a30590bb83 100755 --- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_timer_poll_retransmit.c +++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_timer_poll_retransmit.c @@ -26,8 +26,8 @@ Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE *******************************************************************************/ -#define RLC_AM_MODULE -#define RLC_AM_TIMER_POLL_RETRANSMIT_C +#define RLC_AM_MODULE 1 +#define RLC_AM_TIMER_POLL_RETRANSMIT_C 1 //----------------------------------------------------------------------------- //#include "rtos_header.h" #include "platform_types.h" @@ -43,7 +43,6 @@ rlc_am_check_timer_poll_retransmit( const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t * const rlc_pP ) -//----------------------------------------------------------------------------- { // 5.2.2.3 Expiry of t-PollRetransmit // Upon expiry of t-PollRetransmit, the transmitting side of an AM RLC entity shall: @@ -77,7 +76,7 @@ rlc_am_check_timer_poll_retransmit( rlc_pP->t_poll_retransmit.running = 0; rlc_pP->t_poll_retransmit.timed_out = 1; rlc_pP->stat_timer_poll_retransmit_timed_out += 1; -#if defined(MESSAGE_CHART_GENERATOR_RLC_MAC) +#if MESSAGE_CHART_GENERATOR_RLC_MAC MSC_LOG_EVENT((ctxt_pP->enb_flag == ENB_FLAG_YES) ? MSC_RLC_ENB:MSC_RLC_UE,\ "0 "PROTOCOL_RLC_AM_MSC_FMT" t_poll_retransmit timed-out",\ PROTOCOL_RLC_AM_MSC_ARGS(ctxt_pP,rlc_pP)); @@ -98,7 +97,6 @@ rlc_am_is_timer_poll_retransmit_timed_out( const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t * const rlc_pP ) -//----------------------------------------------------------------------------- { return rlc_pP->t_poll_retransmit.timed_out; } @@ -108,7 +106,6 @@ rlc_am_stop_and_reset_timer_poll_retransmit( const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t * const rlc_pP ) -//----------------------------------------------------------------------------- { LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[T_POLL_RETRANSMIT] STOPPED AND RESET\n", PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP)); @@ -116,7 +113,7 @@ rlc_am_stop_and_reset_timer_poll_retransmit( rlc_pP->t_poll_retransmit.ms_time_out = 0; rlc_pP->t_poll_retransmit.ms_start = 0; rlc_pP->t_poll_retransmit.timed_out = 0; -#if defined(MESSAGE_CHART_GENERATOR_RLC_MAC) +#if MESSAGE_CHART_GENERATOR_RLC_MAC MSC_LOG_EVENT((ctxt_pP->enb_flag == ENB_FLAG_YES) ? MSC_RLC_ENB:MSC_RLC_UE,\ "0 "PROTOCOL_RLC_AM_MSC_FMT" t_poll_retransmit stopped & reseted",\ PROTOCOL_RLC_AM_MSC_ARGS(ctxt_pP,rlc_pP)); @@ -128,7 +125,6 @@ rlc_am_start_timer_poll_retransmit( const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t * const rlc_pP ) -//----------------------------------------------------------------------------- { rlc_pP->t_poll_retransmit.timed_out = 0; @@ -140,7 +136,7 @@ rlc_am_start_timer_poll_retransmit( LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[T_POLL_RETRANSMIT] STARTED (TIME-OUT = FRAME %05d)\n", PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), rlc_pP->t_poll_retransmit.ms_time_out); -#if defined(MESSAGE_CHART_GENERATOR_RLC_MAC) +#if MESSAGE_CHART_GENERATOR_RLC_MAC MSC_LOG_EVENT((ctxt_pP->enb_flag == ENB_FLAG_YES) ? MSC_RLC_ENB:MSC_RLC_UE,\ "0 "PROTOCOL_RLC_AM_MSC_FMT" t_poll_retransmit started (TO %u ms)",\ PROTOCOL_RLC_AM_MSC_ARGS(ctxt_pP,rlc_pP), rlc_pP->t_poll_retransmit.ms_time_out); @@ -150,7 +146,7 @@ rlc_am_start_timer_poll_retransmit( PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP)); } } else { -#if defined(MESSAGE_CHART_GENERATOR_RLC_MAC) +#if MESSAGE_CHART_GENERATOR_RLC_MAC MSC_LOG_EVENT((ctxt_pP->enb_flag == ENB_FLAG_YES) ? MSC_RLC_ENB:MSC_RLC_UE,\ "0 "PROTOCOL_RLC_AM_MSC_FMT" t_poll_retransmit not restarted (TO %u ms)",\ PROTOCOL_RLC_AM_MSC_ARGS(ctxt_pP,rlc_pP), rlc_pP->t_poll_retransmit.ms_time_out); @@ -164,7 +160,6 @@ rlc_am_init_timer_poll_retransmit( const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t * const rlc_pP, const uint32_t ms_durationP) -//----------------------------------------------------------------------------- { rlc_pP->t_poll_retransmit.running = 0; rlc_pP->t_poll_retransmit.ms_time_out = 0; diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_timer_reordering.c b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_timer_reordering.c index 31d41ecd88..f15ae8132f 100755 --- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_timer_reordering.c +++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_timer_reordering.c @@ -26,10 +26,9 @@ Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE *******************************************************************************/ -#define RLC_AM_MODULE -#define RLC_AM_TIMER_POLL_REORDERING_C +#define RLC_AM_MODULE 1 +#define RLC_AM_TIMER_POLL_REORDERING_C 1 //----------------------------------------------------------------------------- -//#include "rtos_header.h" #include "platform_types.h" #include "platform_constants.h" //----------------------------------------------------------------------------- @@ -42,7 +41,6 @@ void rlc_am_check_timer_reordering( const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t * const rlc_pP) -//----------------------------------------------------------------------------- { if (rlc_pP->t_reordering.running) { @@ -73,7 +71,7 @@ rlc_am_check_timer_reordering( // - start t-Reordering; // - set VR(X) to VR(H). -#if defined(MESSAGE_CHART_GENERATOR_RLC_MAC) +#if MESSAGE_CHART_GENERATOR_RLC_MAC MSC_LOG_EVENT((ctxt_pP->enb_flag == ENB_FLAG_YES) ? MSC_RLC_ENB:MSC_RLC_UE,\ "0 "PROTOCOL_RLC_AM_MSC_FMT" t_reordering timed out",\ PROTOCOL_RLC_AM_MSC_ARGS(ctxt_pP,rlc_pP)); @@ -126,7 +124,6 @@ void rlc_am_stop_and_reset_timer_reordering( const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t * const rlc_pP) -//----------------------------------------------------------------------------- { LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[T-REORDERING] STOPPED AND RESET\n", PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP)); @@ -134,7 +131,7 @@ rlc_am_stop_and_reset_timer_reordering( rlc_pP->t_reordering.ms_time_out = 0; rlc_pP->t_reordering.ms_start = 0; rlc_pP->t_reordering.timed_out = 0; -#if defined(MESSAGE_CHART_GENERATOR_RLC_MAC) +#if MESSAGE_CHART_GENERATOR_RLC_MAC MSC_LOG_EVENT((ctxt_pP->enb_flag == ENB_FLAG_YES) ? MSC_RLC_ENB:MSC_RLC_UE,\ "0 "PROTOCOL_RLC_AM_MSC_FMT" t_reordering stopped & reseted",\ PROTOCOL_RLC_AM_MSC_ARGS(ctxt_pP,rlc_pP)); @@ -145,7 +142,6 @@ void rlc_am_start_timer_reordering( const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t * const rlc_pP) -//----------------------------------------------------------------------------- { rlc_pP->t_reordering.timed_out = 0; @@ -157,7 +153,7 @@ rlc_am_start_timer_reordering( LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[T-REORDERING] STARTED (TIME-OUT = %5u ms)\n", PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), rlc_pP->t_reordering.ms_time_out); -#if defined(MESSAGE_CHART_GENERATOR_RLC_MAC) +#if MESSAGE_CHART_GENERATOR_RLC_MAC MSC_LOG_EVENT((ctxt_pP->enb_flag == ENB_FLAG_YES) ? MSC_RLC_ENB:MSC_RLC_UE,\ "0 "PROTOCOL_RLC_AM_MSC_FMT" t_reordering started (TO %u ms)",\ PROTOCOL_RLC_AM_MSC_ARGS(ctxt_pP,rlc_pP), rlc_pP->t_reordering.ms_time_out); @@ -174,7 +170,6 @@ rlc_am_init_timer_reordering( const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t * const rlc_pP, const uint32_t ms_durationP) -//----------------------------------------------------------------------------- { rlc_pP->t_reordering.running = 0; rlc_pP->t_reordering.ms_time_out = 0; diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_timer_status_prohibit.c b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_timer_status_prohibit.c index f874f1656b..cd04c185a3 100755 --- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_timer_status_prohibit.c +++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_timer_status_prohibit.c @@ -26,10 +26,9 @@ Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE *******************************************************************************/ -#define RLC_AM_MODULE -#define RLC_AM_TIMER_STATUS_PROHIBIT_C +#define RLC_AM_MODULE 1 +#define RLC_AM_TIMER_STATUS_PROHIBIT_C 1 //----------------------------------------------------------------------------- -//#include "rtos_header.h" #include "platform_types.h" #include "platform_constants.h" //----------------------------------------------------------------------------- @@ -42,7 +41,6 @@ void rlc_am_check_timer_status_prohibit( const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t * const rlc_pP) -//----------------------------------------------------------------------------- { if (rlc_pP->t_status_prohibit.ms_duration > 0) { if (rlc_pP->t_status_prohibit.running) { @@ -70,7 +68,7 @@ rlc_am_check_timer_status_prohibit( rlc_pP->t_status_prohibit.timed_out = 1; rlc_pP->stat_timer_status_prohibit_timed_out += 1; -#if defined(MESSAGE_CHART_GENERATOR_RLC_MAC) +#if MESSAGE_CHART_GENERATOR_RLC_MAC MSC_LOG_EVENT((ctxt_pP->enb_flag == ENB_FLAG_YES) ? MSC_RLC_ENB:MSC_RLC_UE,\ "0 "PROTOCOL_RLC_AM_MSC_FMT" t_status_prohibit timed out",\ PROTOCOL_RLC_AM_MSC_ARGS(ctxt_pP,rlc_pP)); @@ -90,7 +88,6 @@ rlc_am_stop_and_reset_timer_status_prohibit( const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t *const rlc_pP ) -//----------------------------------------------------------------------------- { if (rlc_pP->t_status_prohibit.ms_duration > 0) { LOG_D(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[T-STATUS-PROHIBIT] STOPPED AND RESET\n", @@ -99,7 +96,7 @@ rlc_am_stop_and_reset_timer_status_prohibit( rlc_pP->t_status_prohibit.ms_time_out = 0; rlc_pP->t_status_prohibit.ms_start = 0; rlc_pP->t_status_prohibit.timed_out = 0; -#if defined(MESSAGE_CHART_GENERATOR_RLC_MAC) +#if MESSAGE_CHART_GENERATOR_RLC_MAC MSC_LOG_EVENT((ctxt_pP->enb_flag == ENB_FLAG_YES) ? MSC_RLC_ENB:MSC_RLC_UE,\ "0 "PROTOCOL_RLC_AM_MSC_FMT" t_status_prohibit stopped & reseted",\ PROTOCOL_RLC_AM_MSC_ARGS(ctxt_pP,rlc_pP)); @@ -112,7 +109,6 @@ rlc_am_start_timer_status_prohibit( const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t *const rlc_pP ) -//----------------------------------------------------------------------------- { rlc_pP->t_status_prohibit.timed_out = 0; @@ -125,7 +121,7 @@ rlc_am_start_timer_status_prohibit( PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP), rlc_pP->t_status_prohibit.ms_time_out); LOG_D(RLC, "TIME-OUT = FRAME %u\n", rlc_pP->t_status_prohibit.ms_time_out); -#if defined(MESSAGE_CHART_GENERATOR_RLC_MAC) +#if MESSAGE_CHART_GENERATOR_RLC_MAC MSC_LOG_EVENT((ctxt_pP->enb_flag == ENB_FLAG_YES) ? MSC_RLC_ENB:MSC_RLC_UE,\ "0 "PROTOCOL_RLC_AM_MSC_FMT" t_status_prohibit started (TO %u ms)",\ PROTOCOL_RLC_AM_MSC_ARGS(ctxt_pP,rlc_pP), rlc_pP->t_status_prohibit.ms_time_out); @@ -141,7 +137,6 @@ void rlc_am_init_timer_status_prohibit( const protocol_ctxt_t* const ctxt_pP, rlc_am_entity_t *const rlc_pP, const uint32_t ms_durationP) -//----------------------------------------------------------------------------- { rlc_pP->t_status_prohibit.running = 0; rlc_pP->t_status_prohibit.ms_time_out = 0; diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_windows.c b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_windows.c index cb22222c67..5255ef8b35 100755 --- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_windows.c +++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_windows.c @@ -26,14 +26,13 @@ Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE *******************************************************************************/ -#define RLC_AM_MODULE -#define RLC_AM_WINDOWS_C +#define RLC_AM_MODULE 1 +#define RLC_AM_WINDOWS_C 1 //----------------------------------------------------------------------------- -#ifdef USER_MODE +#if USER_MODE #include #endif //----------------------------------------------------------------------------- -//#include "rtos_header.h" #include "platform_types.h" //----------------------------------------------------------------------------- #include "rlc_am.h" @@ -43,7 +42,6 @@ signed int rlc_am_in_tx_window( const protocol_ctxt_t* const ctxt_pP, const rlc_am_entity_t* const rlc_pP, const rlc_sn_t snP) -//----------------------------------------------------------------------------- { rlc_usn_t shifted_sn; rlc_usn_t upper_bound; @@ -67,7 +65,6 @@ rlc_am_in_rx_window( const protocol_ctxt_t* const ctxt_pP, const rlc_am_entity_t* const rlc_pP, const rlc_sn_t snP) -//----------------------------------------------------------------------------- { rlc_usn_t shifted_sn; rlc_usn_t upper_bound; @@ -91,7 +88,6 @@ rlc_am_sn_gte_vr_h( const protocol_ctxt_t* const ctxt_pP, const rlc_am_entity_t* const rlc_pP, const rlc_sn_t snP) -//----------------------------------------------------------------------------- { rlc_usn_t shifted_sn; rlc_usn_t upper_bound; @@ -114,7 +110,6 @@ signed int rlc_am_sn_gte_vr_x( const protocol_ctxt_t* const ctxt_pP, const rlc_am_entity_t* const rlc_pP, const rlc_sn_t snP) -//----------------------------------------------------------------------------- { rlc_usn_t shifted_sn; rlc_usn_t upper_bound; @@ -138,7 +133,6 @@ rlc_am_sn_gt_vr_ms( const protocol_ctxt_t* const ctxt_pP, const rlc_am_entity_t* const rlc_pP, const rlc_sn_t snP) -//----------------------------------------------------------------------------- { rlc_usn_t shifted_sn; rlc_usn_t upper_bound; @@ -163,7 +157,6 @@ rlc_am_tx_sn1_gt_sn2( const rlc_am_entity_t* const rlc_pP, const rlc_sn_t sn1P, const rlc_sn_t sn2P) -//----------------------------------------------------------------------------- { rlc_usn_t shifted_sn; rlc_usn_t upper_bound; @@ -188,7 +181,6 @@ rlc_am_rx_sn1_gt_sn2( const rlc_am_entity_t* const rlc_pP, const rlc_sn_t sn1P, const rlc_sn_t sn2P) -//----------------------------------------------------------------------------- { rlc_usn_t shifted_sn; rlc_usn_t upper_bound; diff --git a/openair2/LAYER2/RLC/TM_v9.3.0/rlc_tm.c b/openair2/LAYER2/RLC/TM_v9.3.0/rlc_tm.c index 1a81748712..c0bb945d18 100755 --- a/openair2/LAYER2/RLC/TM_v9.3.0/rlc_tm.c +++ b/openair2/LAYER2/RLC/TM_v9.3.0/rlc_tm.c @@ -26,8 +26,8 @@ Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE *******************************************************************************/ -#define RLC_TM_MODULE -#define RLC_TM_C +#define RLC_TM_MODULE 1 +#define RLC_TM_C 1 //----------------------------------------------------------------------------- #include "platform_types.h" #include "platform_constants.h" @@ -46,12 +46,11 @@ rlc_tm_send_sdu ( uint8_t * const srcP, const sdu_size_t length_in_bitsP) { - //----------------------------------------------------------------------------- int length_in_bytes; -#ifdef DEBUG_RLC_TM_DISPLAY_ASCII_DATA +#if DEBUG_RLC_TM_DISPLAY_ASCII_DATA int index; #endif -#ifdef DEBUG_RLC_TM_REASSEMBLY +#if DEBUG_RLC_TM_REASSEMBLY LOG_D(RLC, PROTOCOL_RLC_TM_CTXT_FMT"[SEND_SDU] %d bits\n", PROTOCOL_RLC_TM_CTXT_ARGS(ctxt_pP, rlc_pP), length_in_bitsP); @@ -63,7 +62,7 @@ rlc_tm_send_sdu ( } if ((rlc_pP->output_sdu_in_construction)) { -#ifdef DEBUG_RLC_TM_DISPLAY_ASCII_DATA +#if DEBUG_RLC_TM_DISPLAY_ASCII_DATA LOG_D(RLC, PROTOCOL_RLC_TM_CTXT_FMT"[SEND_SDU] DATA :", PROTOCOL_RLC_TM_CTXT_ARGS(ctxt_pP, rlc_pP)); @@ -95,7 +94,6 @@ rlc_tm_no_segment ( rlc_tm_entity_t *const rlc_pP ) { - //----------------------------------------------------------------------------- mem_block_t *pdu_p = NULL; struct rlc_tm_tx_sdu_management *sdu_mngt_p = NULL; struct rlc_tm_tx_pdu_management *pdu_mngt_p = NULL; @@ -138,7 +136,6 @@ rlc_tm_rx ( void * const argP, struct mac_data_ind data_indP) { - //----------------------------------------------------------------------------- rlc_tm_entity_t * const rlc_p = (rlc_tm_entity_t *) argP; mem_block_t *tb_p; @@ -164,7 +161,6 @@ rlc_tm_mac_status_indication ( const tb_size_t tb_sizeP, struct mac_status_ind tx_statusP) { - //----------------------------------------------------------------------------- struct mac_status_resp status_resp; ((rlc_tm_entity_t *) rlc_pP)->rlc_pdu_size = tb_sizeP; @@ -181,7 +177,6 @@ rlc_tm_mac_data_request ( const protocol_ctxt_t* const ctxt_pP, void * const rlc_pP) { - //----------------------------------------------------------------------------- rlc_tm_entity_t* rlc_p = (rlc_tm_entity_t*) rlc_pP; struct mac_data_req data_req; @@ -208,7 +203,6 @@ rlc_tm_mac_data_indication ( void * const rlc_pP, struct mac_data_ind data_indP) { - //----------------------------------------------------------------------------- rlc_tm_entity_t* rlc_p = (rlc_tm_entity_t*) rlc_pP; if (data_indP.data.nb_elements > 0) { @@ -227,10 +221,9 @@ rlc_tm_data_req ( void *const rlc_pP, mem_block_t *const sdu_pP) { - //----------------------------------------------------------------------------- rlc_tm_entity_t *rlc_p = (rlc_tm_entity_t *) rlc_pP; -#ifdef DEBUG_RLC_TM_DATA_REQUEST +#if DEBUG_RLC_TM_DATA_REQUEST LOG_D (RLC, PROTOCOL_RLC_TM_CTXT_FMT" RLC_TM_DATA_REQ size %d Bytes, BO %ld , NB SDU %d current_sdu_index=%d next_sdu_index=%d\n", PROTOCOL_RLC_TM_CTXT_ARGS(ctxt_pP, rlc_p), ((struct rlc_um_data_req *) (sdu_pP->data))->data_size, diff --git a/openair2/LAYER2/RLC/TM_v9.3.0/rlc_tm_init.c b/openair2/LAYER2/RLC/TM_v9.3.0/rlc_tm_init.c index ddf6bc08ed..4a5a4dd259 100755 --- a/openair2/LAYER2/RLC/TM_v9.3.0/rlc_tm_init.c +++ b/openair2/LAYER2/RLC/TM_v9.3.0/rlc_tm_init.c @@ -26,8 +26,8 @@ Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE *******************************************************************************/ -#define RLC_TM_MODULE -#define RLC_TM_INIT_C +#define RLC_TM_MODULE 1 +#define RLC_TM_INIT_C 1 //----------------------------------------------------------------------------- #include "rlc_tm.h" #include "LAYER2/MAC/extern.h" @@ -39,7 +39,6 @@ void config_req_rlc_tm ( const rb_id_t rb_idP ) { - //----------------------------------------------------------------------------- rlc_union_t *rlc_union_p = NULL; rlc_tm_entity_t *rlc_p = NULL; hash_key_t key = RLC_COLL_KEY_VALUE(ctxt_pP->module_id, ctxt_pP->rnti, ctxt_pP->enb_flag, rb_idP, srb_flagP); @@ -71,7 +70,6 @@ void rlc_tm_init ( rlc_tm_entity_t * const rlcP ) { - //----------------------------------------------------------------------------- int saved_allocation = rlcP->allocation; memset (rlcP, 0, sizeof (struct rlc_tm_entity)); rlcP->allocation = saved_allocation; @@ -103,7 +101,6 @@ rlc_tm_reset_state_variables ( struct rlc_tm_entity * const rlcP ) { - //----------------------------------------------------------------------------- rlcP->output_sdu_size_to_write = 0; rlcP->buffer_occupancy = 0; rlcP->nb_sdu = 0; @@ -116,7 +113,6 @@ rlc_tm_cleanup ( rlc_tm_entity_t * const rlcP ) { - //----------------------------------------------------------------------------- int index; // TX SIDE list_free (&rlcP->pdus_to_mac_layer); @@ -146,7 +142,6 @@ void rlc_tm_configure( rlc_tm_entity_t * const rlcP, const boolean_t is_uplink_downlinkP) { - //----------------------------------------------------------------------------- rlcP->is_uplink_downlink = is_uplink_downlinkP; rlc_tm_reset_state_variables (ctxt_pP, rlcP); } @@ -157,7 +152,6 @@ void rlc_tm_set_debug_infos( rlc_tm_entity_t * const rlcP, const srb_flag_t srb_flagP, const rb_id_t rb_idP) -//----------------------------------------------------------------------------- { rlcP->rb_id = rb_idP; diff --git a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um.c b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um.c index beea383483..834e45e7d7 100755 --- a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um.c +++ b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um.c @@ -26,14 +26,14 @@ Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE *******************************************************************************/ -#define RLC_UM_MODULE -#define RLC_UM_C +#define RLC_UM_MODULE 1 +#define RLC_UM_C 1 //----------------------------------------------------------------------------- //#include "rtos_header.h" #include "platform_types.h" #include "platform_constants.h" //----------------------------------------------------------------------------- -#if defined(ENABLE_ITTI) +#if ENABLE_ITTI # include "intertask_interface.h" #endif #include "assertions.h" @@ -68,7 +68,6 @@ void rlc_um_stat_req (rlc_um_entity_t *rlc_pP, unsigned int* stat_rx_data_bytes_out_of_window, unsigned int* stat_timer_reordering_timed_out) { - //----------------------------------------------------------------------------- *stat_tx_pdcp_sdu = rlc_pP->stat_tx_pdcp_sdu; *stat_tx_pdcp_bytes = rlc_pP->stat_tx_pdcp_bytes; *stat_tx_pdcp_sdu_discarded = rlc_pP->stat_tx_pdcp_sdu_discarded; @@ -91,7 +90,6 @@ void rlc_um_stat_req (rlc_um_entity_t *rlc_pP, uint32_t rlc_um_get_buffer_occupancy (rlc_um_entity_t *rlc_pP) { - //----------------------------------------------------------------------------- if (rlc_pP->buffer_occupancy > 0) { return rlc_pP->buffer_occupancy; } else { @@ -102,7 +100,6 @@ rlc_um_get_buffer_occupancy (rlc_um_entity_t *rlc_pP) void rlc_um_get_pdus (const protocol_ctxt_t* const ctxt_pP, void *argP) { - //----------------------------------------------------------------------------- rlc_um_entity_t *rlc_p = (rlc_um_entity_t *) argP; switch (rlc_p->protocol_state) { @@ -178,9 +175,8 @@ rlc_um_get_pdus (const protocol_ctxt_t* const ctxt_pP, void *argP) void rlc_um_rx (const protocol_ctxt_t* const ctxt_pP, void *argP, struct mac_data_ind data_indP) { - //----------------------------------------------------------------------------- rlc_um_entity_t *l_rlc_p = (rlc_um_entity_t *) argP; -#if defined(TRACE_RLC_UM_PDU) || defined(MESSAGE_CHART_GENERATOR) +#if TRACE_RLC_UM_PDU || MESSAGE_CHART_GENERATOR char message_string[10000]; mem_block_t *tb_p; int16_t tb_size_in_bytes; @@ -188,9 +184,9 @@ rlc_um_rx (const protocol_ctxt_t* const ctxt_pP, void *argP, struct mac_data_ind rlc_um_pdu_info_t pdu_info; int index; #endif -#if defined(TRACE_RLC_UM_PDU) +#if TRACE_RLC_UM_PDU int octet_index; -# if defined(ENABLE_ITTI) +# if ENABLE_ITTI MessageDef *msg_p; # endif #endif @@ -207,7 +203,7 @@ rlc_um_rx (const protocol_ctxt_t* const ctxt_pP, void *argP, struct mac_data_ind // - enters the DATA_TRANSFER_READY state. LOG_N(RLC, PROTOCOL_RLC_UM_CTXT_FMT" ERROR MAC_DATA_IND IN RLC_NULL_STATE\n", PROTOCOL_RLC_UM_CTXT_ARGS(ctxt_pP,l_rlc_p)); -#if defined(MESSAGE_CHART_GENERATOR) +#if MESSAGE_CHART_GENERATOR if (data_indP.data.nb_elements > 0) { tb_p = data_indP.data.head; @@ -265,7 +261,7 @@ rlc_um_rx (const protocol_ctxt_t* const ctxt_pP, void *argP, struct mac_data_ind // - enters the LOCAL_SUSPEND state. data_indP.tb_size = data_indP.tb_size >> 3; -#if defined(TRACE_RLC_UM_PDU) || defined(MESSAGE_CHART_GENERATOR) +#if TRACE_RLC_UM_PDU || MESSAGE_CHART_GENERATOR if (data_indP.data.nb_elements > 0) { LOG_D(RLC, PROTOCOL_RLC_UM_CTXT_FMT" MAC_DATA_IND %d TBs\n", @@ -282,7 +278,7 @@ rlc_um_rx (const protocol_ctxt_t* const ctxt_pP, void *argP, struct mac_data_ind &pdu_info, l_rlc_p->rx_sn_length); -#if defined(MESSAGE_CHART_GENERATOR) +#if MESSAGE_CHART_GENERATOR message_string_size = 0; message_string_size += sprintf(&message_string[message_string_size], MSC_AS_TIME_FMT" "PROTOCOL_RLC_UM_MSC_FMT"DATA SN %u size %u FI %u", @@ -308,7 +304,7 @@ rlc_um_rx (const protocol_ctxt_t* const ctxt_pP, void *argP, struct mac_data_ind message_string); #endif -#if defined(TRACE_RLC_UM_PDU) +#if TRACE_RLC_UM_PDU message_string_size = 0; message_string_size += sprintf(&message_string[message_string_size], "Bearer : %u\n", l_rlc_p->rb_id); message_string_size += sprintf(&message_string[message_string_size], "PDU size : %u\n", tb_size_in_bytes); @@ -361,7 +357,7 @@ rlc_um_rx (const protocol_ctxt_t* const ctxt_pP, void *argP, struct mac_data_ind message_string_size += sprintf(&message_string[message_string_size], " |\n"); -# if defined(ENABLE_ITTI) +# if ENABLE_ITTI msg_p = itti_alloc_new_message_sized (ctxt_pP->enb_flag ? TASK_RLC_ENB:TASK_RLC_UE , RLC_UM_DATA_PDU_IND, message_string_size + sizeof (IttiMsgText)); msg_p->ittiMsg.rlc_um_data_pdu_ind.size = message_string_size; memcpy(&msg_p->ittiMsg.rlc_um_data_pdu_ind.text, message_string, message_string_size); @@ -370,8 +366,8 @@ rlc_um_rx (const protocol_ctxt_t* const ctxt_pP, void *argP, struct mac_data_ind # else LOG_T(RLC, "%s", message_string); -# endif // defined(ENABLE_ITTI) -#endif // defined(TRACE_RLC_UM_PDU) +# endif // ENABLE_ITTI +#endif // TRACE_RLC_UM_PDU tb_p = tb_p->next; } @@ -439,7 +435,6 @@ rlc_um_rx (const protocol_ctxt_t* const ctxt_pP, void *argP, struct mac_data_ind struct mac_status_resp rlc_um_mac_status_indication (const protocol_ctxt_t* const ctxt_pP, void *rlc_pP, uint16_t tbs_sizeP, struct mac_status_ind tx_statusP) { - //----------------------------------------------------------------------------- struct mac_status_resp status_resp; uint16_t sdu_size = 0; uint16_t sdu_remaining_size = 0; @@ -489,7 +484,7 @@ rlc_um_mac_status_indication (const protocol_ctxt_t* const ctxt_pP, void *rlc_pP //msg("[FRAME %05d][%s][RLC_UM][MOD %02u/%02u][RB %02d] MAC_STATUS_INDICATION BO = %d\n", ((rlc_um_entity_t *) rlc_pP)->module_id, ((rlc_um_entity_t *) rlc_pP)->rb_id, status_resp.buffer_occupancy_in_bytes); status_resp.rlc_info.rlc_protocol_state = ((rlc_um_entity_t *) rlc_pP)->protocol_state; -#ifdef TRACE_RLC_UM_TX_STATUS +#if TRACE_RLC_UM_TX_STATUS if ((((rlc_um_entity_t *) rlc_pP)->rb_id > 0) && (status_resp.buffer_occupancy_in_bytes > 0)) { LOG_D(RLC, PROTOCOL_RLC_UM_CTXT_FMT" MAC_STATUS_INDICATION (DATA) %d bytes requested -> %d bytes available\n", @@ -522,14 +517,13 @@ rlc_um_mac_status_indication (const protocol_ctxt_t* const ctxt_pP, void *rlc_pP struct mac_data_req rlc_um_mac_data_request (const protocol_ctxt_t* const ctxt_pP, void *rlc_pP) { - //----------------------------------------------------------------------------- struct mac_data_req data_req; int16_t tb_size_in_bytes; mem_block_t *tb_p; -#if defined(TRACE_RLC_UM_PDU) || defined(MESSAGE_CHART_GENERATOR) +#if TRACE_RLC_UM_PDU || MESSAGE_CHART_GENERATOR char message_string[10000]; size_t message_string_size = 0; -# if defined(ENABLE_ITTI) +# if ENABLE_ITTI MessageDef *msg_p; # endif rlc_um_pdu_info_t pdu_info; @@ -564,10 +558,10 @@ rlc_um_mac_data_request (const protocol_ctxt_t* const ctxt_pP, void *rlc_pP) l_rlc_p->stat_tx_data_bytes += tb_size_in_bytes; AssertFatal( tb_size_in_bytes > 0 , "RLC UM PDU LENGTH %d", tb_size_in_bytes); -#if defined(TRACE_RLC_UM_PDU) || defined(MESSAGE_CHART_GENERATOR) +#if TRACE_RLC_UM_PDU || MESSAGE_CHART_GENERATOR rlc_um_get_pdu_infos(ctxt_pP, l_rlc_p,(rlc_um_pdu_sn_10_t*) ((struct mac_tb_req*) (tb_p->data))->data_ptr, tb_size_in_bytes, &pdu_info, l_rlc_p->rx_sn_length); #endif -#ifdef MESSAGE_CHART_GENERATOR +#if MESSAGE_CHART_GENERATOR message_string_size = 0; message_string_size += sprintf(&message_string[message_string_size], MSC_AS_TIME_FMT" "PROTOCOL_RLC_UM_MSC_FMT" DATA SN %u size %u FI %u", @@ -593,7 +587,7 @@ rlc_um_mac_data_request (const protocol_ctxt_t* const ctxt_pP, void *rlc_pP) message_string); #endif -#ifdef TRACE_RLC_UM_PDU +#if TRACE_RLC_UM_PDU message_string_size = 0; message_string_size += sprintf(&message_string[message_string_size], "Bearer : %u\n", l_rlc_p->rb_id); message_string_size += sprintf(&message_string[message_string_size], "PDU size : %u\n", tb_size_in_bytes); @@ -646,7 +640,7 @@ rlc_um_mac_data_request (const protocol_ctxt_t* const ctxt_pP, void *rlc_pP) message_string_size += sprintf(&message_string[message_string_size], " |\n"); -# if defined(ENABLE_ITTI) +# if ENABLE_ITTI msg_p = itti_alloc_new_message_sized (ctxt_pP->enb_flag > 0 ? TASK_RLC_ENB:TASK_RLC_UE , RLC_UM_DATA_PDU_REQ, message_string_size + sizeof (IttiMsgText)); msg_p->ittiMsg.rlc_um_data_pdu_req.size = message_string_size; memcpy(&msg_p->ittiMsg.rlc_um_data_pdu_req.text, message_string, message_string_size); @@ -668,7 +662,6 @@ rlc_um_mac_data_request (const protocol_ctxt_t* const ctxt_pP, void *rlc_pP) void rlc_um_mac_data_indication (const protocol_ctxt_t* const ctxt_pP, void *rlc_pP, struct mac_data_ind data_indP) { - //----------------------------------------------------------------------------- rlc_um_rx (ctxt_pP, rlc_pP, data_indP); rlc_um_check_timer_dar_time_out(ctxt_pP, rlc_pP); } @@ -677,15 +670,14 @@ rlc_um_mac_data_indication (const protocol_ctxt_t* const ctxt_pP, void *rlc_pP, void rlc_um_data_req (const protocol_ctxt_t* const ctxt_pP, void *rlc_pP, mem_block_t *sdu_pP) { - //----------------------------------------------------------------------------- rlc_um_entity_t *rlc_p = (rlc_um_entity_t *) rlc_pP; -#ifndef USER_MODE +#if ! USER_MODE unsigned long int rlc_um_time_us; int min, sec, usec; #endif -#if defined(TRACE_RLC_UM_PDU) -#if defined(ENABLE_ITTI) +#if TRACE_RLC_UM_PDU +#if ENABLE_ITTI MessageDef *msg_p; # endif uint16_t data_offset; @@ -730,7 +722,7 @@ rlc_um_data_req (const protocol_ctxt_t* const ctxt_pP, void *rlc_pP, mem_block_t ((struct rlc_um_tx_sdu_management*) (sdu_pP->data))->sdu_size); -# if defined(TRACE_RLC_UM_PDU) +# if TRACE_RLC_UM_PDU data_offset = sizeof (struct rlc_um_data_req_alloc); data_size = ((struct rlc_um_tx_sdu_management *)(sdu_pP->data))->sdu_size; message_string_size += sprintf(&message_string[message_string_size], "Bearer : %u\n", rlc_p->rb_id); @@ -768,7 +760,7 @@ rlc_um_data_req (const protocol_ctxt_t* const ctxt_pP, void *rlc_pP, mem_block_t message_string_size += sprintf(&message_string[message_string_size], " |\n"); -# if defined(ENABLE_ITTI) +# if ENABLE_ITTI msg_p = itti_alloc_new_message_sized (ctxt_pP->enb_flag > 0 ? TASK_RLC_ENB:TASK_RLC_UE , RLC_UM_SDU_REQ, message_string_size + sizeof (IttiMsgText)); msg_p->ittiMsg.rlc_um_sdu_req.size = message_string_size; memcpy(&msg_p->ittiMsg.rlc_um_sdu_req.text, message_string, message_string_size); @@ -783,4 +775,18 @@ rlc_um_data_req (const protocol_ctxt_t* const ctxt_pP, void *rlc_pP, mem_block_t rlc_p->buffer_occupancy += ((struct rlc_um_tx_sdu_management *) (sdu_pP->data))->sdu_size; list_add_tail_eurecom(sdu_pP, &rlc_p->input_sdus); RLC_UM_MUTEX_UNLOCK(&rlc_p->lock_input_sdus); +#if DEBUG_RLC_CONGESTION +#if MESSAGE_CHART_GENERATOR + if (rlc_p->buffer_occupancy > 4096) { + MSC_LOG_EVENT((ctxt_pP->enb_flag == ENB_FLAG_YES) ? MSC_RLC_ENB:MSC_RLC_UE,\ + "0 "PROTOCOL_RLC_AM_MSC_FMT" BO %u bytes",\ + PROTOCOL_RLC_AM_MSC_ARGS(ctxt_pP,rlc_pP), rlc_p->buffer_occupancy); + } +#else + LOG_W(RLC, PROTOCOL_RLC_UM_CTXT_FMT" BO %d , NB SDU %d\n", + PROTOCOL_RLC_UM_CTXT_ARGS(ctxt_pP,rlc_p), + rlc_p->buffer_occupancy, + rlc_p->input_sdus.nb_elements); +#endif +#endif } diff --git a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_control_primitives.c b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_control_primitives.c index be27e1b5ca..8e735ca5f3 100755 --- a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_control_primitives.c +++ b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_control_primitives.c @@ -26,8 +26,8 @@ Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE *******************************************************************************/ -#define RLC_UM_MODULE -#define RLC_UM_CONTROL_PRIMITIVES_C +#define RLC_UM_MODULE 1 +#define RLC_UM_CONTROL_PRIMITIVES_C 1 #include "platform_types.h" #include "assertions.h" //----------------------------------------------------------------------------- @@ -49,7 +49,6 @@ void config_req_rlc_um ( const rlc_um_info_t * const config_um_pP, const rb_id_t rb_idP) { - //----------------------------------------------------------------------------- rlc_union_t *rlc_union_p = NULL; rlc_um_entity_t *rlc_p = NULL; hash_key_t key = RLC_COLL_KEY_VALUE(ctxt_pP->module_id, ctxt_pP->rnti, ctxt_pP->enb_flag, rb_idP, srb_flagP); @@ -105,7 +104,7 @@ void config_req_rlc_um_asn1 ( hash_key_t key = RLC_COLL_KEY_VALUE(ctxt_pP->module_id, ctxt_pP->rnti, ctxt_pP->enb_flag, rb_idP, srb_flagP); hashtable_rc_t h_rc; -#if defined(Rel10) +#if Rel10 if (mbms_flagP) { AssertFatal(dl_rlc_pP, "No RLC UM DL config"); @@ -266,7 +265,6 @@ rlc_um_init ( rlc_um_entity_t * const rlc_pP ) { - //----------------------------------------------------------------------------- AssertFatal(rlc_pP, "Bad RLC UM pointer (NULL)"); @@ -316,7 +314,6 @@ rlc_um_reset_state_variables ( rlc_um_entity_t * const rlc_pP ) { - //----------------------------------------------------------------------------- rlc_pP->buffer_occupancy = 0; @@ -332,7 +329,6 @@ void rlc_um_cleanup ( rlc_um_entity_t * const rlc_pP) { - //----------------------------------------------------------------------------- int index; // TX SIDE list_free (&rlc_pP->pdus_to_mac_layer); @@ -369,7 +365,6 @@ void rlc_um_configure( const uint32_t rx_sn_field_lengthP, const uint32_t tx_sn_field_lengthP, const uint32_t is_mXchP) -//----------------------------------------------------------------------------- { if (rx_sn_field_lengthP == 10) { rlc_pP->rx_sn_length = 10; @@ -430,7 +425,6 @@ void rlc_um_set_debug_infos( rlc_um_entity_t * const rlc_pP, const srb_flag_t srb_flagP, const rb_id_t rb_idP) -//----------------------------------------------------------------------------- { LOG_D(RLC, PROTOCOL_RLC_UM_CTXT_FMT" [SET DEBUG INFOS] rb_id %d srb_flag %d\n", PROTOCOL_RLC_UM_CTXT_ARGS(ctxt_pP,rlc_pP), diff --git a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_dar.c b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_dar.c index 56e3130592..b78feb66e0 100644 --- a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_dar.c +++ b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_dar.c @@ -26,8 +26,8 @@ Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE *******************************************************************************/ -#define RLC_UM_MODULE -#define RLC_UM_DAR_C +#define RLC_UM_MODULE 1 +#define RLC_UM_DAR_C 1 #include "platform_types.h" #include "assertions.h" //----------------------------------------------------------------------------- @@ -41,8 +41,6 @@ #include "UTIL/LOG/log.h" #include "UTIL/LOG/vcd_signal_dumper.h" -//#define TRACE_RLC_UM_DAR 1 -//#define TRACE_RLC_UM_RX 1 //----------------------------------------------------------------------------- signed int rlc_um_get_pdu_infos( const protocol_ctxt_t* const ctxt_pP, @@ -51,7 +49,6 @@ signed int rlc_um_get_pdu_infos( const sdu_size_t total_sizeP, rlc_um_pdu_info_t * const pdu_info_pP, const uint8_t sn_lengthP) -//----------------------------------------------------------------------------- { sdu_size_t sum_li = 0; memset(pdu_info_pP, 0, sizeof (rlc_um_pdu_info_t)); @@ -135,7 +132,6 @@ signed int rlc_um_get_pdu_infos( //----------------------------------------------------------------------------- int rlc_um_read_length_indicators(unsigned char**data_ppP, rlc_um_e_li_t* e_liP, unsigned int* li_array_pP, unsigned int *num_li_pP, sdu_size_t *data_size_pP) { - //----------------------------------------------------------------------------- int continue_loop = 1; unsigned int e1 = 0; unsigned int li1 = 0; @@ -184,7 +180,6 @@ rlc_um_try_reassembly( rlc_sn_t start_snP, rlc_sn_t end_snP) { - //----------------------------------------------------------------------------- mem_block_t *pdu_mem_p = NULL; struct mac_tb_ind *tb_ind_p = NULL; rlc_um_e_li_t *e_li_p = NULL; @@ -209,7 +204,7 @@ rlc_um_try_reassembly( start_snP = start_snP + rlc_pP->rx_sn_modulo; } -#if defined (TRACE_RLC_UM_DAR) +#if TRACE_RLC_UM_DAR LOG_D(RLC, PROTOCOL_RLC_UM_CTXT_FMT" TRY REASSEMBLY FROM PDU SN=%03d+1 TO PDU SN=%03d SN Length = %d bits (%s:%u)\n", PROTOCOL_RLC_UM_CTXT_ARGS(ctxt_pP, rlc_pP), rlc_pP->last_reassemblied_sn, @@ -235,7 +230,7 @@ rlc_um_try_reassembly( if ((pdu_mem_p = rlc_pP->dar_buffer[sn])) { if ((rlc_pP->last_reassemblied_sn+1)%rlc_pP->rx_sn_modulo != sn) { -#if defined (TRACE_RLC_UM_DAR) +#if TRACE_RLC_UM_DAR LOG_W(RLC, PROTOCOL_RLC_UM_CTXT_FMT" FINDING a HOLE in RLC UM SN: CLEARING OUTPUT SDU BECAUSE NEW SN (%03d) TO REASSEMBLY NOT CONTIGUOUS WITH LAST REASSEMBLIED SN (%03d) (%s:%u)\n", PROTOCOL_RLC_UM_CTXT_ARGS(ctxt_pP, rlc_pP), @@ -251,7 +246,7 @@ rlc_um_try_reassembly( tb_ind_p = (struct mac_tb_ind *)(pdu_mem_p->data); if (rlc_pP->rx_sn_length == 10) { -#if defined (TRACE_RLC_UM_DAR) +#if TRACE_RLC_UM_DAR LOG_D(RLC, PROTOCOL_RLC_UM_CTXT_FMT" TRY REASSEMBLY 10 PDU SN=%03d\n (%s:%u)", PROTOCOL_RLC_UM_CTXT_ARGS(ctxt_pP, rlc_pP), sn, @@ -264,7 +259,7 @@ rlc_um_try_reassembly( size = tb_ind_p->size - 2; data_p = &tb_ind_p->data_ptr[2]; } else { -#if defined (TRACE_RLC_UM_DAR) +#if TRACE_RLC_UM_DAR LOG_D(RLC, PROTOCOL_RLC_UM_CTXT_FMT" TRY REASSEMBLY 5 PDU SN=%03d Byte 0=%02X (%s:%u)\n", PROTOCOL_RLC_UM_CTXT_ARGS(ctxt_pP, rlc_pP), sn, @@ -277,7 +272,7 @@ rlc_um_try_reassembly( e_li_p = (rlc_um_e_li_t*)((rlc_um_pdu_sn_5_t*)(tb_ind_p->data_ptr))->data; size = tb_ind_p->size - 1; data_p = &tb_ind_p->data_ptr[1]; -#if defined (TRACE_RLC_UM_DAR) +#if TRACE_RLC_UM_DAR LOG_D(RLC, PROTOCOL_RLC_UM_CTXT_FMT" e=%01X fi=%01X\n", PROTOCOL_RLC_UM_CTXT_ARGS(ctxt_pP, rlc_pP), e, @@ -290,7 +285,7 @@ rlc_um_try_reassembly( if (e == RLC_E_FIXED_PART_DATA_FIELD_FOLLOW) { switch (fi) { case RLC_FI_1ST_BYTE_DATA_IS_1ST_BYTE_SDU_LAST_BYTE_DATA_IS_LAST_BYTE_SDU: -#if defined (TRACE_RLC_UM_DAR) +#if TRACE_RLC_UM_DAR LOG_D(RLC, PROTOCOL_RLC_UM_CTXT_FMT" TRY REASSEMBLY PDU NO E_LI FI=11 (00) (%s:%u)\n", PROTOCOL_RLC_UM_CTXT_ARGS(ctxt_pP, rlc_pP), __FILE__, @@ -306,7 +301,7 @@ rlc_um_try_reassembly( break; case RLC_FI_1ST_BYTE_DATA_IS_1ST_BYTE_SDU_LAST_BYTE_DATA_IS_NOT_LAST_BYTE_SDU: -#if defined (TRACE_RLC_UM_DAR) +#if TRACE_RLC_UM_DAR LOG_D(RLC, PROTOCOL_RLC_UM_CTXT_FMT" TRY REASSEMBLY PDU NO E_LI FI=10 (01) (%s:%u)\n", PROTOCOL_RLC_UM_CTXT_ARGS(ctxt_pP, rlc_pP), __FILE__, @@ -320,7 +315,7 @@ rlc_um_try_reassembly( break; case RLC_FI_1ST_BYTE_DATA_IS_NOT_1ST_BYTE_SDU_LAST_BYTE_DATA_IS_LAST_BYTE_SDU: -#if defined (TRACE_RLC_UM_DAR) +#if TRACE_RLC_UM_DAR LOG_D(RLC, PROTOCOL_RLC_UM_CTXT_FMT" TRY REASSEMBLY PDU NO E_LI FI=01 (10) (%s:%u)\n", PROTOCOL_RLC_UM_CTXT_ARGS(ctxt_pP, rlc_pP), __FILE__, @@ -341,7 +336,7 @@ rlc_um_try_reassembly( break; case RLC_FI_1ST_BYTE_DATA_IS_NOT_1ST_BYTE_SDU_LAST_BYTE_DATA_IS_NOT_LAST_BYTE_SDU: -#if defined (TRACE_RLC_UM_DAR) +#if TRACE_RLC_UM_DAR LOG_D(RLC, PROTOCOL_RLC_UM_CTXT_FMT" TRY REASSEMBLY PDU NO E_LI FI=00 (11) (%s:%u)\n", PROTOCOL_RLC_UM_CTXT_ARGS(ctxt_pP, rlc_pP), __FILE__, @@ -352,7 +347,7 @@ rlc_um_try_reassembly( // one whole segment of SDU in PDU rlc_um_reassembly (ctxt_pP, rlc_pP, data_p, size); } else { -#if defined (TRACE_RLC_UM_DAR) +#if TRACE_RLC_UM_DAR LOG_W(RLC, PROTOCOL_RLC_UM_CTXT_FMT" TRY REASSEMBLY PDU NO E_LI FI=00 (11) MISSING SN DETECTED (%s:%u)\n", PROTOCOL_RLC_UM_CTXT_ARGS(ctxt_pP, rlc_pP), __FILE__, @@ -363,7 +358,7 @@ rlc_um_try_reassembly( rlc_pP->reassembly_missing_sn_detected = 1; // not necessary but for readability of the code rlc_pP->stat_rx_data_pdu_dropped += 1; rlc_pP->stat_rx_data_bytes_dropped += tb_ind_p->size; -#if defined(RLC_STOP_ON_LOST_PDU) +#if RLC_STOP_ON_LOST_PDU AssertFatal( rlc_pP->reassembly_missing_sn_detected == 1, PROTOCOL_RLC_UM_CTXT_FMT" MISSING PDU DETECTED (%s:%u)\n", PROTOCOL_RLC_UM_CTXT_ARGS(ctxt_pP, rlc_pP), @@ -384,7 +379,7 @@ rlc_um_try_reassembly( if (rlc_um_read_length_indicators(&data_p, e_li_p, li_array, &num_li, &size ) >= 0) { switch (fi) { case RLC_FI_1ST_BYTE_DATA_IS_1ST_BYTE_SDU_LAST_BYTE_DATA_IS_LAST_BYTE_SDU: -#if defined (TRACE_RLC_UM_DAR) +#if TRACE_RLC_UM_DAR LOG_D(RLC, PROTOCOL_RLC_UM_CTXT_FMT" TRY REASSEMBLY PDU FI=11 (00) Li=", PROTOCOL_RLC_UM_CTXT_ARGS(ctxt_pP, rlc_pP)); @@ -414,7 +409,7 @@ rlc_um_try_reassembly( break; case RLC_FI_1ST_BYTE_DATA_IS_1ST_BYTE_SDU_LAST_BYTE_DATA_IS_NOT_LAST_BYTE_SDU: -#if defined (TRACE_RLC_UM_DAR) +#if TRACE_RLC_UM_DAR LOG_D(RLC, PROTOCOL_RLC_UM_CTXT_FMT" TRY REASSEMBLY PDU FI=10 (01) Li=", PROTOCOL_RLC_UM_CTXT_ARGS(ctxt_pP, rlc_pP)); @@ -443,7 +438,7 @@ rlc_um_try_reassembly( break; case RLC_FI_1ST_BYTE_DATA_IS_NOT_1ST_BYTE_SDU_LAST_BYTE_DATA_IS_LAST_BYTE_SDU: -#if defined (TRACE_RLC_UM_DAR) +#if TRACE_RLC_UM_DAR LOG_D(RLC, PROTOCOL_RLC_UM_CTXT_FMT" TRY REASSEMBLY PDU FI=01 (10) Li=", PROTOCOL_RLC_UM_CTXT_ARGS(ctxt_pP, rlc_pP)); @@ -480,7 +475,7 @@ rlc_um_try_reassembly( break; case RLC_FI_1ST_BYTE_DATA_IS_NOT_1ST_BYTE_SDU_LAST_BYTE_DATA_IS_NOT_LAST_BYTE_SDU: -#if defined (TRACE_RLC_UM_DAR) +#if TRACE_RLC_UM_DAR LOG_D(RLC, PROTOCOL_RLC_UM_CTXT_FMT" TRY REASSEMBLY PDU FI=00 (11) Li=", PROTOCOL_RLC_UM_CTXT_ARGS(ctxt_pP, rlc_pP)); @@ -492,7 +487,7 @@ rlc_um_try_reassembly( #endif if (rlc_pP->reassembly_missing_sn_detected) { -#if defined (TRACE_RLC_UM_DAR) +#if TRACE_RLC_UM_DAR LOG_D(RLC, PROTOCOL_RLC_UM_CTXT_FMT" DISCARD FIRST LI %d (%s:%u)", PROTOCOL_RLC_UM_CTXT_ARGS(ctxt_pP, rlc_pP), li_array[0], @@ -529,7 +524,7 @@ rlc_um_try_reassembly( break; default: -#if defined (TRACE_RLC_UM_DAR) +#if TRACE_RLC_UM_DAR LOG_W(RLC, PROTOCOL_RLC_UM_CTXT_FMT" Missing SN detected (%s:%u)\n", PROTOCOL_RLC_UM_CTXT_ARGS(ctxt_pP, rlc_pP), __FILE__, @@ -539,7 +534,7 @@ rlc_um_try_reassembly( rlc_pP->stat_rx_data_bytes_dropped += tb_ind_p->size; rlc_pP->reassembly_missing_sn_detected = 1; -#if defined(RLC_STOP_ON_LOST_PDU) +#if RLC_STOP_ON_LOST_PDU AssertFatal( rlc_pP->reassembly_missing_sn_detected == 1, PROTOCOL_RLC_UM_CTXT_FMT" MISSING PDU DETECTED (%s:%u)\n", PROTOCOL_RLC_UM_CTXT_ARGS(ctxt_pP, rlc_pP), @@ -550,7 +545,7 @@ rlc_um_try_reassembly( } } -#if defined (TRACE_RLC_UM_DAR) +#if TRACE_RLC_UM_DAR LOG_D(RLC, PROTOCOL_RLC_UM_CTXT_FMT" REMOVE PDU FROM DAR BUFFER SN=%03d (%s:%u)\n", PROTOCOL_RLC_UM_CTXT_ARGS(ctxt_pP, rlc_pP), sn, @@ -561,7 +556,7 @@ rlc_um_try_reassembly( rlc_pP->dar_buffer[sn] = NULL; } else { rlc_pP->last_reassemblied_missing_sn = sn; -#if defined (TRACE_RLC_UM_DAR) +#if TRACE_RLC_UM_DAR LOG_D(RLC, PROTOCOL_RLC_UM_CTXT_FMT" Missing SN %04d detected, clearing RX SDU (%s:%u)\n", PROTOCOL_RLC_UM_CTXT_ARGS(ctxt_pP, rlc_pP), sn, @@ -570,7 +565,7 @@ rlc_um_try_reassembly( #endif rlc_pP->reassembly_missing_sn_detected = 1; rlc_um_clear_rx_sdu(ctxt_pP, rlc_pP); -#if defined(RLC_STOP_ON_LOST_PDU) +#if RLC_STOP_ON_LOST_PDU AssertFatal( rlc_pP->reassembly_missing_sn_detected == 1, PROTOCOL_RLC_UM_CTXT_FMT" MISSING PDU DETECTED (%s:%u)\n", PROTOCOL_RLC_UM_CTXT_ARGS(ctxt_pP, rlc_pP), @@ -586,7 +581,7 @@ rlc_um_try_reassembly( } } -#if defined (TRACE_RLC_UM_DAR) +#if TRACE_RLC_UM_DAR LOG_D(RLC, PROTOCOL_RLC_UM_CTXT_FMT" TRIED REASSEMBLY VR(UR)=%03d VR(UX)=%03d VR(UH)=%03d (%s:%u)\n", PROTOCOL_RLC_UM_CTXT_ARGS(ctxt_pP, rlc_pP), rlc_pP->vr_ur, @@ -603,9 +598,8 @@ void rlc_um_stop_and_reset_timer_reordering( const protocol_ctxt_t* const ctxt_pP, rlc_um_entity_t * rlc_pP) -//----------------------------------------------------------------------------- { -#if defined (TRACE_RLC_UM_DAR) +#if TRACE_RLC_UM_DAR LOG_D(RLC, PROTOCOL_RLC_UM_CTXT_FMT" [T-REORDERING] STOPPED AND RESET\n", PROTOCOL_RLC_UM_CTXT_ARGS(ctxt_pP, rlc_pP)); #endif @@ -619,7 +613,6 @@ void rlc_um_start_timer_reordering( const protocol_ctxt_t* const ctxt_pP, rlc_um_entity_t * rlc_pP) -//----------------------------------------------------------------------------- { rlc_pP->t_reordering.timed_out = 0; @@ -627,7 +620,7 @@ rlc_um_start_timer_reordering( rlc_pP->t_reordering.running = 1; rlc_pP->t_reordering.ms_time_out = PROTOCOL_CTXT_TIME_MILLI_SECONDS(ctxt_pP) + rlc_pP->t_reordering.ms_duration; rlc_pP->t_reordering.ms_start = PROTOCOL_CTXT_TIME_MILLI_SECONDS(ctxt_pP); -#if defined (TRACE_RLC_UM_DAR) +#if TRACE_RLC_UM_DAR LOG_D(RLC, PROTOCOL_RLC_UM_CTXT_FMT" [T-REORDERING] STARTED (TIME-OUT = FRAME %05u)\n", PROTOCOL_RLC_UM_CTXT_ARGS(ctxt_pP, rlc_pP), rlc_pP->t_reordering.ms_time_out); @@ -643,7 +636,6 @@ rlc_um_init_timer_reordering( const protocol_ctxt_t* const ctxt_pP, rlc_um_entity_t * const rlc_pP, const uint32_t ms_durationP) -//----------------------------------------------------------------------------- { rlc_pP->t_reordering.running = 0; rlc_pP->t_reordering.ms_time_out = 0; @@ -656,7 +648,6 @@ void rlc_um_check_timer_dar_time_out( const protocol_ctxt_t* const ctxt_pP, rlc_um_entity_t * const rlc_pP) { - //----------------------------------------------------------------------------- signed int in_window; rlc_usn_t old_vr_ur; @@ -692,7 +683,7 @@ void rlc_um_check_timer_dar_time_out( // -start t-Reordering; // -set VR(UX) to VR(UH). rlc_pP->stat_timer_reordering_timed_out += 1; -#if defined (TRACE_RLC_UM_DAR) +#if TRACE_RLC_UM_DAR LOG_D(RLC, PROTOCOL_RLC_UM_CTXT_FMT"*****************************************************\n", PROTOCOL_RLC_UM_CTXT_ARGS(ctxt_pP, rlc_pP)); LOG_D(RLC, PROTOCOL_RLC_UM_CTXT_FMT"* T I M E - O U T *\n", @@ -720,7 +711,7 @@ void rlc_um_check_timer_dar_time_out( rlc_pP->vr_ur = (rlc_pP->vr_ur+1)%rlc_pP->rx_sn_modulo; } -#if defined (TRACE_RLC_UM_DAR) +#if TRACE_RLC_UM_DAR LOG_D(RLC, " %d", rlc_pP->vr_ur); LOG_D(RLC, "\n"); #endif @@ -731,13 +722,13 @@ void rlc_um_check_timer_dar_time_out( if (in_window == 2) { rlc_um_start_timer_reordering(ctxt_pP, rlc_pP); rlc_pP->vr_ux = rlc_pP->vr_uh; -#if defined (TRACE_RLC_UM_DAR) +#if TRACE_RLC_UM_DAR LOG_D(RLC, PROTOCOL_RLC_UM_CTXT_FMT" restarting t-Reordering set VR(UX) to %d (VR(UH)>VR(UR))\n", PROTOCOL_RLC_UM_CTXT_ARGS(ctxt_pP, rlc_pP), rlc_pP->vr_ux); #endif } else { -#if defined (TRACE_RLC_UM_DAR) +#if TRACE_RLC_UM_DAR LOG_D(RLC, PROTOCOL_RLC_UM_CTXT_FMT" STOP t-Reordering VR(UX) = %03d\n", PROTOCOL_RLC_UM_CTXT_ARGS(ctxt_pP, rlc_pP), rlc_pP->vr_ux); @@ -759,9 +750,8 @@ rlc_um_remove_pdu_from_dar_buffer( rlc_um_entity_t * const rlc_pP, rlc_usn_t snP) { - //----------------------------------------------------------------------------- mem_block_t * pdu_p = rlc_pP->dar_buffer[snP]; -#if defined (TRACE_RLC_UM_DAR) +#if TRACE_RLC_UM_DAR LOG_D(RLC, PROTOCOL_RLC_UM_CTXT_FMT" REMOVE PDU FROM DAR BUFFER SN=%03d\n", PROTOCOL_RLC_UM_CTXT_ARGS(ctxt_pP, rlc_pP), snP); @@ -773,7 +763,6 @@ rlc_um_remove_pdu_from_dar_buffer( mem_block_t* rlc_um_get_pdu_from_dar_buffer(const protocol_ctxt_t* const ctxt_pP, rlc_um_entity_t * const rlc_pP, rlc_usn_t snP) { - //----------------------------------------------------------------------------- return rlc_pP->dar_buffer[snP]; } //----------------------------------------------------------------------------- @@ -784,8 +773,7 @@ rlc_um_store_pdu_in_dar_buffer( mem_block_t *pdu_pP, rlc_usn_t snP) { - //----------------------------------------------------------------------------- -#if defined (TRACE_RLC_UM_DAR) +#if TRACE_RLC_UM_DAR LOG_D(RLC, PROTOCOL_RLC_UM_CTXT_FMT" STORE PDU IN DAR BUFFER SN=%03d VR(UR)=%03d VR(UX)=%03d VR(UH)=%03d\n", PROTOCOL_RLC_UM_CTXT_ARGS(ctxt_pP, rlc_pP), snP, @@ -810,10 +798,8 @@ rlc_um_in_window( rlc_sn_t snP, rlc_sn_t higher_boundP) { - //----------------------------------------------------------------------------- - rlc_sn_t modulus = (rlc_sn_t)rlc_pP->vr_uh - rlc_pP->rx_um_window_size; -#ifdef TRACE_RLC_UM_RX +#if TRACE_RLC_UM_RX rlc_sn_t lower_bound = lower_boundP; rlc_sn_t higher_bound = higher_boundP; rlc_sn_t sn = snP; @@ -823,7 +809,7 @@ rlc_um_in_window( snP = (snP - modulus) % rlc_pP->rx_sn_modulo; if ( lower_boundP > snP) { -#ifdef TRACE_RLC_UM_RX +#if TRACE_RLC_UM_RX LOG_D(RLC, PROTOCOL_RLC_UM_CTXT_FMT" %d not in WINDOW[%03d:%03d] (SNHIGHER BOUND) <=> %d not in WINDOW[%03d:%03d]\n", PROTOCOL_RLC_UM_CTXT_ARGS(ctxt_pP, rlc_pP), sn, @@ -849,7 +835,7 @@ rlc_um_in_window( if ( lower_boundP == snP) { if ( higher_boundP == snP) { -#ifdef TRACE_RLC_UM_RX +#if TRACE_RLC_UM_RX LOG_D(RLC, PROTOCOL_RLC_UM_CTXT_FMT" %d in WINDOW[%03d:%03d] (SN=HIGHER BOUND=LOWER BOUND)\n", PROTOCOL_RLC_UM_CTXT_ARGS(ctxt_pP, rlc_pP), sn, @@ -859,7 +845,7 @@ rlc_um_in_window( return 3; } -#ifdef TRACE_RLC_UM_RX +#if TRACE_RLC_UM_RX LOG_D(RLC, PROTOCOL_RLC_UM_CTXT_FMT" %d in WINDOW[%03d:%03d] (SN=LOWER BOUND)\n", PROTOCOL_RLC_UM_CTXT_ARGS(ctxt_pP, rlc_pP), sn, @@ -870,7 +856,7 @@ rlc_um_in_window( } if ( higher_boundP == snP) { -#ifdef TRACE_RLC_UM_RX +#if TRACE_RLC_UM_RX LOG_D(RLC, PROTOCOL_RLC_UM_CTXT_FMT" %d in WINDOW[%03d:%03d] (SN=HIGHER BOUND)\n", PROTOCOL_RLC_UM_CTXT_ARGS(ctxt_pP, rlc_pP), sn, @@ -890,13 +876,12 @@ rlc_um_in_reordering_window( rlc_um_entity_t * const rlc_pP, const rlc_sn_t snP) { - //----------------------------------------------------------------------------- rlc_sn_t modulus = (signed int)rlc_pP->vr_uh - rlc_pP->rx_um_window_size; rlc_sn_t sn_mod = (snP - modulus) % rlc_pP->rx_sn_modulo; if ( 0 <= sn_mod) { if (sn_mod < rlc_pP->rx_um_window_size) { -#if defined (TRACE_RLC_UM_DAR) +#if TRACE_RLC_UM_DAR LOG_D(RLC, PROTOCOL_RLC_UM_CTXT_FMT" %d IN REORDERING WINDOW[%03d:%03d[ SN %d IN [%03d:%03d[ VR(UR)=%03d VR(UH)=%03d\n", PROTOCOL_RLC_UM_CTXT_ARGS(ctxt_pP, rlc_pP), sn_mod, @@ -912,7 +897,7 @@ rlc_um_in_reordering_window( } } -#if defined (TRACE_RLC_UM_DAR) +#if TRACE_RLC_UM_DAR if (modulus < 0) { LOG_D(RLC, PROTOCOL_RLC_UM_CTXT_FMT" %d NOT IN REORDERING WINDOW[%03d:%03d[ SN %d NOT IN [%03d:%03d[ VR(UR)=%03d VR(UH)=%03d\n", @@ -950,7 +935,6 @@ rlc_um_receive_process_dar ( rlc_um_pdu_sn_10_t * const pdu_pP, const sdu_size_t tb_sizeP) { - //----------------------------------------------------------------------------- // 36.322v9.3.0 section 5.1.2.2.1: // The receiving UM RLC entity shall maintain a reordering window according to state variable VR(UH) as follows: // -a SN falls within the reordering window if (VR(UH) – UM_Window_Size) <= SN < VR(UH); @@ -988,7 +972,7 @@ rlc_um_receive_process_dar ( in_window = rlc_um_in_window(ctxt_pP, rlc_pP, rlc_pP->vr_uh - rlc_pP->rx_um_window_size, sn, rlc_pP->vr_ur); -#if defined(TRACE_RLC_PAYLOAD) +#if TRACE_RLC_PAYLOAD rlc_util_print_hex_octets(RLC, &pdu_pP->b1, tb_sizeP); #endif @@ -999,7 +983,7 @@ rlc_um_receive_process_dar ( // rlc_um_in_window() returns 2 if higher_bound == sn // rlc_um_in_window() returns 3 if higher_bound == sn == lower_bound if ((in_window == 1) || (in_window == 0)) { -#if defined (TRACE_RLC_UM_DAR) +#if TRACE_RLC_UM_DAR LOG_D(RLC, PROTOCOL_RLC_UM_CTXT_FMT" RX PDU VR(UH) – UM_Window_Size) <= SN %d < VR(UR) -> GARBAGE\n", PROTOCOL_RLC_UM_CTXT_ARGS(ctxt_pP, rlc_pP), sn); @@ -1017,7 +1001,7 @@ rlc_um_receive_process_dar ( in_window = rlc_um_in_window(ctxt_pP, rlc_pP, rlc_pP->vr_ur, sn, rlc_pP->vr_uh); if (in_window == 0) { -#if defined (TRACE_RLC_UM_DAR) +#if TRACE_RLC_UM_DAR LOG_D(RLC, PROTOCOL_RLC_UM_CTXT_FMT" RX PDU VR(UR) < SN %d < VR(UH) and RECEIVED BEFORE-> GARBAGE\n", PROTOCOL_RLC_UM_CTXT_ARGS(ctxt_pP, rlc_pP), sn); @@ -1035,7 +1019,7 @@ rlc_um_receive_process_dar ( // 2 lines to avoid memory leaks rlc_pP->stat_rx_data_pdus_duplicate += 1; rlc_pP->stat_rx_data_bytes_duplicate += tb_sizeP; -#if defined (TRACE_RLC_UM_DAR) +#if TRACE_RLC_UM_DAR LOG_D(RLC, PROTOCOL_RLC_UM_CTXT_FMT" RX PDU SN %03d REMOVE OLD PDU BEFORE STORING NEW PDU\n", PROTOCOL_RLC_UM_CTXT_ARGS(ctxt_pP, rlc_pP), sn); @@ -1057,7 +1041,7 @@ rlc_um_receive_process_dar ( // -if VR(UR) falls outside of the reordering window: // -set VR(UR) to (VR(UH) – UM_Window_Size); if (rlc_um_in_reordering_window(ctxt_pP, rlc_pP, sn) < 0) { -#if defined (TRACE_RLC_UM_DAR) +#if TRACE_RLC_UM_DAR LOG_D(RLC, PROTOCOL_RLC_UM_CTXT_FMT" RX PDU SN %d OUTSIDE REORDERING WINDOW VR(UH)=%d UM_Window_Size=%d\n", PROTOCOL_RLC_UM_CTXT_ARGS(ctxt_pP, rlc_pP), sn, @@ -1078,7 +1062,7 @@ rlc_um_receive_process_dar ( if (rlc_um_in_reordering_window(ctxt_pP, rlc_pP, rlc_pP->vr_ur) < 0) { -#if defined (TRACE_RLC_UM_DAR) +#if TRACE_RLC_UM_DAR LOG_D(RLC, PROTOCOL_RLC_UM_CTXT_FMT" VR(UR) %d OUTSIDE REORDERING WINDOW SET TO VR(UH) – UM_Window_Size = %d\n", PROTOCOL_RLC_UM_CTXT_ARGS(ctxt_pP, rlc_pP), rlc_pP->vr_ur, @@ -1114,7 +1098,7 @@ rlc_um_receive_process_dar ( in_window = rlc_um_in_reordering_window(ctxt_pP, rlc_pP, rlc_pP->vr_ux); if (in_window < 0) { -#if defined (TRACE_RLC_UM_DAR) +#if TRACE_RLC_UM_DAR LOG_D(RLC, PROTOCOL_RLC_UM_CTXT_FMT" STOP and RESET t-Reordering because VR(UX) falls outside of the reordering window and VR(UX)=%d is not equal to VR(UH)=%d -or- VR(UX) <= VR(UR)\n", PROTOCOL_RLC_UM_CTXT_ARGS(ctxt_pP, rlc_pP), @@ -1130,7 +1114,7 @@ rlc_um_receive_process_dar ( in_window = rlc_um_in_window(ctxt_pP, rlc_pP, rlc_pP->vr_ur, rlc_pP->vr_ux, rlc_pP->vr_uh); if ((in_window == -2) || (in_window == 1)) { -#if defined (TRACE_RLC_UM_DAR) +#if TRACE_RLC_UM_DAR LOG_D(RLC, PROTOCOL_RLC_UM_CTXT_FMT" STOP and RESET t-Reordering because VR(UX) falls outside of the reordering window and VR(UX)=%d is not equal to VR(UH)=%d\n", PROTOCOL_RLC_UM_CTXT_ARGS(ctxt_pP, rlc_pP), @@ -1152,7 +1136,7 @@ rlc_um_receive_process_dar ( if (in_window == 2) { rlc_um_start_timer_reordering(ctxt_pP, rlc_pP); rlc_pP->vr_ux = rlc_pP->vr_uh; -#if defined (TRACE_RLC_UM_DAR) +#if TRACE_RLC_UM_DAR LOG_D(RLC, PROTOCOL_RLC_UM_CTXT_FMT" RESTART t-Reordering set VR(UX) to VR(UH) =%d\n", PROTOCOL_RLC_UM_CTXT_ARGS(ctxt_pP, rlc_pP), rlc_pP->vr_ux); diff --git a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_fsm.c b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_fsm.c index 5e8dd557d8..ab7b3a8497 100755 --- a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_fsm.c +++ b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_fsm.c @@ -26,14 +26,13 @@ Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE *******************************************************************************/ -#define RLC_UM_MODULE -#define RLC_UM_FSM_C +#define RLC_UM_MODULE 1 +#define RLC_UM_FSM_C 1 #include "platform_types.h" //----------------------------------------------------------------------------- #include "rlc_um.h" #include "LAYER2/MAC/extern.h" #include "UTIL/LOG/log.h" -//----------------------------------------------------------------------------- //----------------------------------------------------------------------------- @@ -42,7 +41,6 @@ rlc_um_fsm_notify_event ( const protocol_ctxt_t* const ctxt_pP, rlc_um_entity_t *rlc_pP, uint8_t eventP) { - //----------------------------------------------------------------------------- switch (rlc_pP->protocol_state) { //------------------------------- diff --git a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_reassembly.c b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_reassembly.c index 935acd79f3..5dfd7c47f3 100755 --- a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_reassembly.c +++ b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_reassembly.c @@ -26,14 +26,15 @@ Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE *******************************************************************************/ -#define RLC_UM_MODULE -#define RLC_UM_REASSEMBLY_C +#define RLC_UM_MODULE 1 +#define RLC_UM_REASSEMBLY_C 1 #include "platform_types.h" //----------------------------------------------------------------------------- -#ifdef USER_MODE +#if USER_MODE #include #endif -#if defined(ENABLE_ITTI) +#if ENABLE_ITTI +# include "platform_types.h" # include "intertask_interface.h" #endif #include "assertions.h" @@ -45,13 +46,10 @@ #include "UTIL/LOG/log.h" #include "msc.h" -//#define TRACE_RLC_UM_DISPLAY_ASCII_DATA 1 - //----------------------------------------------------------------------------- inline void rlc_um_clear_rx_sdu (const protocol_ctxt_t* const ctxt_pP, rlc_um_entity_t* rlc_pP) { - //----------------------------------------------------------------------------- rlc_pP->output_sdu_size_to_write = 0; } @@ -59,7 +57,6 @@ rlc_um_clear_rx_sdu (const protocol_ctxt_t* const ctxt_pP, rlc_um_entity_t* rlc_ void rlc_um_reassembly (const protocol_ctxt_t* const ctxt_pP, rlc_um_entity_t *rlc_pP, uint8_t * src_pP, int32_t lengthP) { - //----------------------------------------------------------------------------- sdu_size_t sdu_max_size; LOG_D(RLC, PROTOCOL_RLC_UM_CTXT_FMT"[REASSEMBLY] reassembly() %d bytes %d bytes already reassemblied\n", @@ -88,14 +85,14 @@ rlc_um_reassembly (const protocol_ctxt_t* const ctxt_pP, rlc_um_entity_t *rlc_pP if ((rlc_pP->output_sdu_size_to_write + lengthP) <= sdu_max_size) { memcpy (&rlc_pP->output_sdu_in_construction->data[rlc_pP->output_sdu_size_to_write], src_pP, lengthP); rlc_pP->output_sdu_size_to_write += lengthP; -#ifdef TRACE_RLC_UM_DISPLAY_ASCII_DATA +#if TRACE_RLC_UM_DISPLAY_ASCII_DATA rlc_pP->output_sdu_in_construction->data[rlc_pP->output_sdu_size_to_write] = 0; LOG_T(RLC, PROTOCOL_RLC_UM_CTXT_FMT"[REASSEMBLY] DATA :", PROTOCOL_RLC_UM_CTXT_ARGS(ctxt_pP,rlc_pP)); rlc_util_print_hex_octets(RLC, (unsigned char*)rlc_pP->output_sdu_in_construction->data, rlc_pP->output_sdu_size_to_write); #endif } else { -#if defined(STOP_ON_IP_TRAFFIC_OVERLOAD) +#if STOP_ON_IP_TRAFFIC_OVERLOAD AssertFatal(0, PROTOCOL_RLC_UM_CTXT_FMT" RLC_UM_DATA_IND, SDU TOO BIG, DROPPED\n", PROTOCOL_RLC_UM_CTXT_ARGS(ctxt_pP,rlc_pP)); #endif @@ -108,7 +105,7 @@ rlc_um_reassembly (const protocol_ctxt_t* const ctxt_pP, rlc_um_entity_t *rlc_pP } else { LOG_E(RLC, PROTOCOL_RLC_UM_CTXT_FMT"[REASSEMBLY]ERROR OUTPUT SDU IS NULL\n", PROTOCOL_RLC_UM_CTXT_ARGS(ctxt_pP,rlc_pP)); -#if defined(STOP_ON_IP_TRAFFIC_OVERLOAD) +#if STOP_ON_IP_TRAFFIC_OVERLOAD AssertFatal(0, PROTOCOL_RLC_UM_CTXT_FMT" RLC_UM_DATA_IND, SDU DROPPED, OUT OF MEMORY\n", PROTOCOL_RLC_UM_CTXT_ARGS(ctxt_pP,rlc_pP)); #endif @@ -119,8 +116,6 @@ rlc_um_reassembly (const protocol_ctxt_t* const ctxt_pP, rlc_um_entity_t *rlc_pP void rlc_um_send_sdu (const protocol_ctxt_t* const ctxt_pP, rlc_um_entity_t *rlc_pP) { - //----------------------------------------------------------------------------- - if ((rlc_pP->output_sdu_in_construction)) { LOG_D(RLC, PROTOCOL_RLC_UM_CTXT_FMT" SEND_SDU to upper layers %d bytes sdu %p\n", PROTOCOL_RLC_UM_CTXT_ARGS(ctxt_pP,rlc_pP), @@ -142,8 +137,8 @@ rlc_um_send_sdu (const protocol_ctxt_t* const ctxt_pP, rlc_um_entity_t *rlc_pP) rlc_pP->output_sdu_size_to_write ); -#ifdef TEST_RLC_UM -#ifdef TRACE_RLC_UM_DISPLAY_ASCII_DATA +#if TEST_RLC_UM +#if TRACE_RLC_UM_DISPLAY_ASCII_DATA rlc_pP->output_sdu_in_construction->data[rlc_pP->output_sdu_size_to_write] = 0; LOG_T(RLC, PROTOCOL_RLC_UM_CTXT_FMT"[SEND_SDU] DATA :", PROTOCOL_RLC_UM_CTXT_ARGS(ctxt_pP,rlc_pP)); diff --git a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_receiver.c b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_receiver.c index fe46acf26f..0cbd74fbf4 100755 --- a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_receiver.c +++ b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_receiver.c @@ -26,8 +26,8 @@ Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE *******************************************************************************/ -#define RLC_UM_MODULE -#define RLC_UM_RECEIVER_C +#define RLC_UM_MODULE 1 +#define RLC_UM_RECEIVER_C 1 #include "platform_types.h" //----------------------------------------------------------------------------- #include "rlc.h" @@ -39,15 +39,12 @@ #include "MAC_INTERFACE/extern.h" #include "UTIL/LOG/log.h" -//#define TRACE_RLC_UM_RX 1 - //----------------------------------------------------------------------------- void rlc_um_display_rx_window( const protocol_ctxt_t* const ctxt_pP, rlc_um_entity_t * const rlc_pP ) -//----------------------------------------------------------------------------- { unsigned long sn = 0; unsigned long end_sn = 0; @@ -139,7 +136,6 @@ rlc_um_receive ( rlc_um_entity_t * const rlc_pP, struct mac_data_ind data_indP) { - //----------------------------------------------------------------------------- mem_block_t *tb_p = NULL; uint8_t *first_byte_p = NULL; diff --git a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_segment.c b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_segment.c index 12400c6e94..e57ae55eec 100755 --- a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_segment.c +++ b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_segment.c @@ -26,13 +26,13 @@ Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE *******************************************************************************/ -#define RLC_UM_MODULE -#define RLC_UM_SEGMENT_C +#define RLC_UM_MODULE 1 +#define RLC_UM_SEGMENT_C 1 //----------------------------------------------------------------------------- #include "platform_types.h" #include "platform_constants.h" //----------------------------------------------------------------------------- -#ifdef USER_MODE +#if USER_MODE #include #endif #include "assertions.h" @@ -43,12 +43,10 @@ #include "MAC_INTERFACE/extern.h" #include "UTIL/LOG/log.h" -//#define TRACE_RLC_UM_SEGMENT 1 //----------------------------------------------------------------------------- void rlc_um_segment_10 (const protocol_ctxt_t* const ctxt_pP, rlc_um_entity_t *rlc_pP) { - //----------------------------------------------------------------------------- list_t pdus; signed int pdu_remaining_size; signed int test_pdu_remaining_size; @@ -78,7 +76,7 @@ rlc_um_segment_10 (const protocol_ctxt_t* const ctxt_pP, rlc_um_entity_t *rlc_pP unsigned int max_li_overhead; if (nb_bytes_to_transmit < 3) { -#if defined(TRACE_RLC_UM_SEGMENT) +#if TRACE_RLC_UM_SEGMENT LOG_D(RLC, PROTOCOL_RLC_UM_CTXT_FMT" NO SEGMENTATION nb_bytes to transmit = %d\n", PROTOCOL_RLC_UM_CTXT_ARGS(ctxt_pP,rlc_pP), nb_bytes_to_transmit); @@ -94,7 +92,7 @@ rlc_um_segment_10 (const protocol_ctxt_t* const ctxt_pP, rlc_um_entity_t *rlc_pP while ((list_get_head(&rlc_pP->input_sdus)) && (nb_bytes_to_transmit > 0)) { -#if defined(TRACE_RLC_UM_SEGMENT) +#if TRACE_RLC_UM_SEGMENT LOG_D(RLC, PROTOCOL_RLC_UM_CTXT_FMT" nb_bytes_to_transmit %d BO %d\n", PROTOCOL_RLC_UM_CTXT_ARGS(ctxt_pP,rlc_pP), nb_bytes_to_transmit, @@ -111,14 +109,14 @@ rlc_um_segment_10 (const protocol_ctxt_t* const ctxt_pP, rlc_um_entity_t *rlc_pP if (nb_bytes_to_transmit >= (rlc_pP->buffer_occupancy + rlc_pP->tx_header_min_length_in_bytes + max_li_overhead)) { data_pdu_size = rlc_pP->buffer_occupancy + rlc_pP->tx_header_min_length_in_bytes + max_li_overhead; -#if defined(TRACE_RLC_UM_SEGMENT) +#if TRACE_RLC_UM_SEGMENT LOG_D(RLC, PROTOCOL_RLC_UM_CTXT_FMT" alloc PDU size %d bytes to contain not all bytes requested by MAC but all BO of RLC@1\n", PROTOCOL_RLC_UM_CTXT_ARGS(ctxt_pP,rlc_pP), data_pdu_size); #endif } else { data_pdu_size = nb_bytes_to_transmit; -#if defined(TRACE_RLC_UM_SEGMENT) +#if TRACE_RLC_UM_SEGMENT LOG_D(RLC, PROTOCOL_RLC_UM_CTXT_FMT" alloc PDU size %d bytes to contain all bytes requested by MAC@1\n", PROTOCOL_RLC_UM_CTXT_ARGS(ctxt_pP,rlc_pP), data_pdu_size); @@ -126,7 +124,7 @@ rlc_um_segment_10 (const protocol_ctxt_t* const ctxt_pP, rlc_um_entity_t *rlc_pP } if (!(pdu_mem_p = get_free_mem_block (data_pdu_size + sizeof(struct mac_tb_req)))) { -#if defined(TRACE_RLC_UM_SEGMENT) +#if TRACE_RLC_UM_SEGMENT LOG_E(RLC, PROTOCOL_RLC_UM_CTXT_FMT" ERROR COULD NOT GET NEW PDU, EXIT\n", PROTOCOL_RLC_UM_CTXT_ARGS(ctxt_pP,rlc_pP)); #endif @@ -134,7 +132,7 @@ rlc_um_segment_10 (const protocol_ctxt_t* const ctxt_pP, rlc_um_entity_t *rlc_pP return; } -#if defined(TRACE_RLC_UM_SEGMENT) +#if TRACE_RLC_UM_SEGMENT LOG_D(RLC, PROTOCOL_RLC_UM_CTXT_FMT" get new PDU %d bytes\n", PROTOCOL_RLC_UM_CTXT_ARGS(ctxt_pP,rlc_pP), data_pdu_size); @@ -193,7 +191,7 @@ rlc_um_segment_10 (const protocol_ctxt_t* const ctxt_pP, rlc_um_entity_t *rlc_pP test_remaining_num_li_to_substract = 1; test_li_length_in_bytes = test_li_length_in_bytes ^ 3; } else { -#if defined(TRACE_RLC_UM_SEGMENT) +#if TRACE_RLC_UM_SEGMENT LOG_D(RLC, PROTOCOL_RLC_UM_CTXT_FMT" sdu_mngt_p->sdu_remaining_size=%d test_pdu_remaining_size=%d test_li_length_in_bytes=%d\n", PROTOCOL_RLC_UM_CTXT_ARGS(ctxt_pP,rlc_pP), sdu_mngt_p->sdu_remaining_size, @@ -221,7 +219,7 @@ rlc_um_segment_10 (const protocol_ctxt_t* const ctxt_pP, rlc_um_entity_t *rlc_pP //---------------------------------------- // Do the real filling of the pdu_p //---------------------------------------- -#if defined(TRACE_RLC_UM_SEGMENT) +#if TRACE_RLC_UM_SEGMENT LOG_D(RLC, PROTOCOL_RLC_UM_CTXT_FMT" data shift %d Bytes num_li %d\n", PROTOCOL_RLC_UM_CTXT_ARGS(ctxt_pP,rlc_pP), ((test_num_li*3) +1) >> 1, @@ -248,14 +246,14 @@ rlc_um_segment_10 (const protocol_ctxt_t* const ctxt_pP, rlc_um_entity_t *rlc_pP sdu_mngt_p = ((struct rlc_um_tx_sdu_management *) (sdu_in_buffer->data)); if (sdu_mngt_p->sdu_segmented_size == 0) { -#if defined(TRACE_RLC_UM_SEGMENT) +#if TRACE_RLC_UM_SEGMENT LOG_D(RLC, PROTOCOL_RLC_UM_CTXT_FMT" GET NEW SDU %p AVAILABLE SIZE %d Bytes\n", PROTOCOL_RLC_UM_CTXT_ARGS(ctxt_pP,rlc_pP), sdu_mngt_p, sdu_mngt_p->sdu_remaining_size); #endif } else { -#if defined(TRACE_RLC_UM_SEGMENT) +#if TRACE_RLC_UM_SEGMENT LOG_D(RLC, PROTOCOL_RLC_UM_CTXT_FMT" GET AGAIN SDU %p REMAINING AVAILABLE SIZE %d Bytes / %d Bytes \n", PROTOCOL_RLC_UM_CTXT_ARGS(ctxt_pP,rlc_pP), sdu_mngt_p, @@ -267,7 +265,7 @@ rlc_um_segment_10 (const protocol_ctxt_t* const ctxt_pP, rlc_um_entity_t *rlc_pP data_sdu_p = (char *) &(sdu_in_buffer->data[sizeof (struct rlc_um_tx_sdu_management) + sdu_mngt_p->sdu_segmented_size]); if (sdu_mngt_p->sdu_remaining_size > pdu_remaining_size) { -#if defined(TRACE_RLC_UM_SEGMENT) +#if TRACE_RLC_UM_SEGMENT LOG_D(RLC, PROTOCOL_RLC_UM_CTXT_FMT" Filling all remaining PDU with %d bytes\n", PROTOCOL_RLC_UM_CTXT_ARGS(ctxt_pP,rlc_pP), pdu_remaining_size); @@ -291,7 +289,7 @@ rlc_um_segment_10 (const protocol_ctxt_t* const ctxt_pP, rlc_um_entity_t *rlc_pP continue_fill_pdu_with_sdu = 0; pdu_remaining_size = 0; } else if (sdu_mngt_p->sdu_remaining_size == pdu_remaining_size) { -#if defined(TRACE_RLC_UM_SEGMENT) +#if TRACE_RLC_UM_SEGMENT LOG_D(RLC, PROTOCOL_RLC_UM_CTXT_FMT" Exactly Filling remaining PDU with %d remaining bytes of SDU\n", PROTOCOL_RLC_UM_CTXT_ARGS(ctxt_pP,rlc_pP), pdu_remaining_size); @@ -311,7 +309,7 @@ rlc_um_segment_10 (const protocol_ctxt_t* const ctxt_pP, rlc_um_entity_t *rlc_pP continue_fill_pdu_with_sdu = 0; pdu_remaining_size = 0; } else if ((sdu_mngt_p->sdu_remaining_size + (li_length_in_bytes ^ 3)) < pdu_remaining_size ) { -#if defined(TRACE_RLC_UM_SEGMENT) +#if TRACE_RLC_UM_SEGMENT LOG_D(RLC, PROTOCOL_RLC_UM_CTXT_FMT" Filling PDU with %d all remaining bytes of SDU\n", PROTOCOL_RLC_UM_CTXT_ARGS(ctxt_pP,rlc_pP), sdu_mngt_p->sdu_remaining_size); @@ -333,7 +331,7 @@ rlc_um_segment_10 (const protocol_ctxt_t* const ctxt_pP, rlc_um_entity_t *rlc_pP //e_li_p->li1 = sdu_mngt_p->sdu_remaining_size; e_li_p->b1 = e_li_p->b1 | (sdu_mngt_p->sdu_remaining_size >> 4); e_li_p->b2 = sdu_mngt_p->sdu_remaining_size << 4; -#if defined(TRACE_RLC_UM_SEGMENT) +#if TRACE_RLC_UM_SEGMENT LOG_D(RLC, PROTOCOL_RLC_UM_CTXT_FMT" set e_li_p->b1=%02X set e_li_p->b2=%02X fill_num_li=%d test_num_li=%d\n", PROTOCOL_RLC_UM_CTXT_ARGS(ctxt_pP,rlc_pP), e_li_p->b1, @@ -350,7 +348,7 @@ rlc_um_segment_10 (const protocol_ctxt_t* const ctxt_pP, rlc_um_entity_t *rlc_pP //e_li_p->li2 = sdu_mngt_p->sdu_remaining_size; e_li_p->b2 = e_li_p->b2 | (sdu_mngt_p->sdu_remaining_size >> 8); e_li_p->b3 = sdu_mngt_p->sdu_remaining_size & 0xFF; -#if defined(TRACE_RLC_UM_SEGMENT) +#if TRACE_RLC_UM_SEGMENT LOG_D(RLC, PROTOCOL_RLC_UM_CTXT_FMT" set e_li_p->b2=%02X set e_li_p->b3=%02X fill_num_li=%d test_num_li=%d\n", PROTOCOL_RLC_UM_CTXT_ARGS(ctxt_pP,rlc_pP), e_li_p->b2, @@ -371,14 +369,14 @@ rlc_um_segment_10 (const protocol_ctxt_t* const ctxt_pP, rlc_um_entity_t *rlc_pP sdu_mngt_p = NULL; } else { -#if defined(TRACE_RLC_UM_SEGMENT) +#if TRACE_RLC_UM_SEGMENT LOG_D(RLC, PROTOCOL_RLC_UM_CTXT_FMT" Filling PDU with %d all remaining bytes of SDU and reduce TB size by %d bytes\n", PROTOCOL_RLC_UM_CTXT_ARGS(ctxt_pP,rlc_pP), sdu_mngt_p->sdu_remaining_size, pdu_remaining_size - sdu_mngt_p->sdu_remaining_size); #endif -#ifdef USER_MODE -#ifndef EXMIMO +#if USER_MODE +#if !EXMIMO assert(1!=1); #endif #endif @@ -422,7 +420,7 @@ rlc_um_segment_10 (const protocol_ctxt_t* const ctxt_pP, rlc_um_entity_t *rlc_pP pdu_tb_req_p->data_ptr = (unsigned char*)pdu_p; pdu_tb_req_p->tb_size = data_pdu_size - pdu_remaining_size; list_add_tail_eurecom (pdu_mem_p, &rlc_pP->pdus_to_mac_layer); -#if defined(TRACE_RLC_PAYLOAD) +#if TRACE_RLC_PAYLOAD rlc_util_print_hex_octets(RLC, pdu_mem_p->data, data_pdu_size); #endif AssertFatal( pdu_tb_req_p->tb_size > 0 , "SEGMENT10: FINAL RLC UM PDU LENGTH %d", pdu_tb_req_p->tb_size); @@ -439,7 +437,6 @@ rlc_um_segment_10 (const protocol_ctxt_t* const ctxt_pP, rlc_um_entity_t *rlc_pP void rlc_um_segment_5 (const protocol_ctxt_t* const ctxt_pP, rlc_um_entity_t *rlc_pP) { - //----------------------------------------------------------------------------- list_t pdus; signed int pdu_remaining_size = 0; signed int test_pdu_remaining_size = 0; @@ -469,7 +466,7 @@ rlc_um_segment_5 (const protocol_ctxt_t* const ctxt_pP, rlc_um_entity_t *rlc_pP) unsigned int max_li_overhead = 0; if (nb_bytes_to_transmit < 2) { -#if defined(TRACE_RLC_UM_SEGMENT) +#if TRACE_RLC_UM_SEGMENT LOG_D(RLC, PROTOCOL_RLC_UM_CTXT_FMT" NO SEGMENTATION5 nb_bytes to transmit = %d\n", PROTOCOL_RLC_UM_CTXT_ARGS(ctxt_pP,rlc_pP), nb_bytes_to_transmit); @@ -483,7 +480,7 @@ rlc_um_segment_5 (const protocol_ctxt_t* const ctxt_pP, rlc_um_entity_t *rlc_pP) RLC_UM_MUTEX_LOCK(&rlc_pP->lock_input_sdus, ctxt_pP, rlc_pP); while ((list_get_head(&rlc_pP->input_sdus)) && (nb_bytes_to_transmit > 0)) { -#if defined(TRACE_RLC_UM_SEGMENT) +#if TRACE_RLC_UM_SEGMENT LOG_D(RLC, PROTOCOL_RLC_UM_CTXT_FMT"nb_bytes_to_transmit %d BO %d\n", PROTOCOL_RLC_UM_CTXT_ARGS(ctxt_pP,rlc_pP), nb_bytes_to_transmit, @@ -500,14 +497,14 @@ rlc_um_segment_5 (const protocol_ctxt_t* const ctxt_pP, rlc_um_entity_t *rlc_pP) if (nb_bytes_to_transmit >= (rlc_pP->buffer_occupancy + rlc_pP->tx_header_min_length_in_bytes + max_li_overhead)) { data_pdu_size = rlc_pP->buffer_occupancy + rlc_pP->tx_header_min_length_in_bytes + max_li_overhead; -#if defined(TRACE_RLC_UM_SEGMENT) +#if TRACE_RLC_UM_SEGMENT LOG_D(RLC, PROTOCOL_RLC_UM_CTXT_FMT" alloc PDU size %d bytes to contain not all bytes requested by MAC but all BO of RLC@1\n", PROTOCOL_RLC_UM_CTXT_ARGS(ctxt_pP,rlc_pP), data_pdu_size); #endif } else { data_pdu_size = nb_bytes_to_transmit; -#if defined(TRACE_RLC_UM_SEGMENT) +#if TRACE_RLC_UM_SEGMENT LOG_D(RLC, PROTOCOL_RLC_UM_CTXT_FMT" alloc PDU size %d bytes to contain all bytes requested by MAC@1\n", PROTOCOL_RLC_UM_CTXT_ARGS(ctxt_pP,rlc_pP), data_pdu_size); @@ -515,7 +512,7 @@ rlc_um_segment_5 (const protocol_ctxt_t* const ctxt_pP, rlc_um_entity_t *rlc_pP) } if (!(pdu_mem_p = get_free_mem_block (data_pdu_size + sizeof(struct mac_tb_req)))) { -#if defined(TRACE_RLC_UM_SEGMENT) +#if TRACE_RLC_UM_SEGMENT LOG_E(RLC, PROTOCOL_RLC_UM_CTXT_FMT" ERROR COULD NOT GET NEW PDU, EXIT\n", PROTOCOL_RLC_UM_CTXT_ARGS(ctxt_pP,rlc_pP)); #endif @@ -523,7 +520,7 @@ rlc_um_segment_5 (const protocol_ctxt_t* const ctxt_pP, rlc_um_entity_t *rlc_pP) return; } -#if defined(TRACE_RLC_UM_SEGMENT) +#if TRACE_RLC_UM_SEGMENT LOG_D(RLC, PROTOCOL_RLC_UM_CTXT_FMT" get new PDU %d bytes\n", PROTOCOL_RLC_UM_CTXT_ARGS(ctxt_pP,rlc_pP), data_pdu_size); @@ -583,7 +580,7 @@ rlc_um_segment_5 (const protocol_ctxt_t* const ctxt_pP, rlc_um_entity_t *rlc_pP) test_remaining_num_li_to_substract = 1; test_li_length_in_bytes = test_li_length_in_bytes ^ 3; } else { -#if defined(TRACE_RLC_UM_SEGMENT) +#if TRACE_RLC_UM_SEGMENT LOG_D(RLC, PROTOCOL_RLC_UM_CTXT_FMT" sdu_mngt_p->sdu_remaining_size=%d test_pdu_remaining_size=%d test_li_length_in_bytes=%d\n", PROTOCOL_RLC_UM_CTXT_ARGS(ctxt_pP,rlc_pP), sdu_mngt_p->sdu_remaining_size, @@ -612,7 +609,7 @@ rlc_um_segment_5 (const protocol_ctxt_t* const ctxt_pP, rlc_um_entity_t *rlc_pP) //---------------------------------------- // Do the real filling of the pdu_p //---------------------------------------- -#if defined(TRACE_RLC_UM_SEGMENT) +#if TRACE_RLC_UM_SEGMENT LOG_D(RLC, PROTOCOL_RLC_UM_CTXT_FMT" data shift %d Bytes num_li %d\n", PROTOCOL_RLC_UM_CTXT_ARGS(ctxt_pP,rlc_pP), ((test_num_li*3) +1) >> 1, @@ -639,14 +636,14 @@ rlc_um_segment_5 (const protocol_ctxt_t* const ctxt_pP, rlc_um_entity_t *rlc_pP) sdu_mngt_p = ((struct rlc_um_tx_sdu_management *) (sdu_in_buffer->data)); if (sdu_mngt_p->sdu_segmented_size == 0) { -#if defined(TRACE_RLC_UM_SEGMENT) +#if TRACE_RLC_UM_SEGMENT LOG_D(RLC, PROTOCOL_RLC_UM_CTXT_FMT" GET NEW SDU %p AVAILABLE SIZE %d Bytes\n", PROTOCOL_RLC_UM_CTXT_ARGS(ctxt_pP,rlc_pP), sdu_mngt_p, sdu_mngt_p->sdu_remaining_size); #endif } else { -#if defined(TRACE_RLC_UM_SEGMENT) +#if TRACE_RLC_UM_SEGMENT LOG_D(RLC, PROTOCOL_RLC_UM_CTXT_FMT" GET AGAIN SDU %p REMAINING AVAILABLE SIZE %d Bytes / %d Bytes \n", PROTOCOL_RLC_UM_CTXT_ARGS(ctxt_pP,rlc_pP), sdu_mngt_p, @@ -658,7 +655,7 @@ rlc_um_segment_5 (const protocol_ctxt_t* const ctxt_pP, rlc_um_entity_t *rlc_pP) data_sdu_p = (char*) &(sdu_in_buffer->data[sizeof (struct rlc_um_tx_sdu_management) + sdu_mngt_p->sdu_segmented_size]); if (sdu_mngt_p->sdu_remaining_size > pdu_remaining_size) { -#if defined(TRACE_RLC_UM_SEGMENT) +#if TRACE_RLC_UM_SEGMENT LOG_D(RLC, PROTOCOL_RLC_UM_CTXT_FMT" Filling all remaining PDU with %d bytes\n", PROTOCOL_RLC_UM_CTXT_ARGS(ctxt_pP,rlc_pP), pdu_remaining_size); @@ -681,7 +678,7 @@ rlc_um_segment_5 (const protocol_ctxt_t* const ctxt_pP, rlc_um_entity_t *rlc_pP) continue_fill_pdu_with_sdu = 0; pdu_remaining_size = 0; } else if (sdu_mngt_p->sdu_remaining_size == pdu_remaining_size) { -#if defined(TRACE_RLC_UM_SEGMENT) +#if TRACE_RLC_UM_SEGMENT LOG_D(RLC, PROTOCOL_RLC_UM_CTXT_FMT" Exactly Filling remaining PDU with %d remaining bytes of SDU\n", PROTOCOL_RLC_UM_CTXT_ARGS(ctxt_pP,rlc_pP), pdu_remaining_size); @@ -699,7 +696,7 @@ rlc_um_segment_5 (const protocol_ctxt_t* const ctxt_pP, rlc_um_entity_t *rlc_pP) continue_fill_pdu_with_sdu = 0; pdu_remaining_size = 0; } else if ((sdu_mngt_p->sdu_remaining_size + (li_length_in_bytes ^ 3)) < pdu_remaining_size ) { -#if defined(TRACE_RLC_UM_SEGMENT) +#if TRACE_RLC_UM_SEGMENT LOG_D(RLC, PROTOCOL_RLC_UM_CTXT_FMT" Filling PDU with %d all remaining bytes of SDU\n", PROTOCOL_RLC_UM_CTXT_ARGS(ctxt_pP,rlc_pP), sdu_mngt_p->sdu_remaining_size); @@ -721,7 +718,7 @@ rlc_um_segment_5 (const protocol_ctxt_t* const ctxt_pP, rlc_um_entity_t *rlc_pP) //e_li_p->li1 = sdu_mngt_p->sdu_remaining_size; e_li_p->b1 = e_li_p->b1 | (sdu_mngt_p->sdu_remaining_size >> 4); e_li_p->b2 = sdu_mngt_p->sdu_remaining_size << 4; -#if defined(TRACE_RLC_UM_SEGMENT) +#if TRACE_RLC_UM_SEGMENT LOG_D(RLC, PROTOCOL_RLC_UM_CTXT_FMT" set e_li_p->b1=%02X set e_li_p->b2=%02X fill_num_li=%d test_num_li=%d\n", PROTOCOL_RLC_UM_CTXT_ARGS(ctxt_pP,rlc_pP), e_li_p->b1, @@ -738,7 +735,7 @@ rlc_um_segment_5 (const protocol_ctxt_t* const ctxt_pP, rlc_um_entity_t *rlc_pP) //e_li_p->li2 = sdu_mngt_p->sdu_remaining_size; e_li_p->b2 = e_li_p->b2 | (sdu_mngt_p->sdu_remaining_size >> 8); e_li_p->b3 = sdu_mngt_p->sdu_remaining_size & 0xFF; -#if defined(TRACE_RLC_UM_SEGMENT) +#if TRACE_RLC_UM_SEGMENT LOG_D(RLC, PROTOCOL_RLC_UM_CTXT_FMT" set e_li_p->b2=%02X set e_li_p->b3=%02X fill_num_li=%d test_num_li=%d\n", PROTOCOL_RLC_UM_CTXT_ARGS(ctxt_pP,rlc_pP), e_li_p->b2, @@ -759,13 +756,13 @@ rlc_um_segment_5 (const protocol_ctxt_t* const ctxt_pP, rlc_um_entity_t *rlc_pP) sdu_mngt_p = NULL; } else { -#if defined(TRACE_RLC_UM_SEGMENT) +#if TRACE_RLC_UM_SEGMENT LOG_D(RLC, PROTOCOL_RLC_UM_CTXT_FMT" Filling PDU with %d all remaining bytes of SDU and reduce TB size by %d bytes\n", PROTOCOL_RLC_UM_CTXT_ARGS(ctxt_pP,rlc_pP), sdu_mngt_p->sdu_remaining_size, pdu_remaining_size - sdu_mngt_p->sdu_remaining_size); #endif -#ifdef USER_MODE +#if USER_MODE assert(1!=1); #endif memcpy(data, data_sdu_p, sdu_mngt_p->sdu_remaining_size); @@ -806,7 +803,7 @@ rlc_um_segment_5 (const protocol_ctxt_t* const ctxt_pP, rlc_um_entity_t *rlc_pP) pdu_tb_req_p->data_ptr = (unsigned char*)pdu_p; pdu_tb_req_p->tb_size = data_pdu_size - pdu_remaining_size; list_add_tail_eurecom (pdu_mem_p, &rlc_pP->pdus_to_mac_layer); -#if defined(TRACE_RLC_PAYLOAD) +#if TRACE_RLC_PAYLOAD rlc_util_print_hex_octets(RLC, (unsigned char*)pdu_mem_p->data, data_pdu_size); #endif AssertFatal( pdu_tb_req_p->tb_size > 0 , "SEGMENT5: FINAL RLC UM PDU LENGTH %d", pdu_tb_req_p->tb_size); diff --git a/openair2/LAYER2/RLC/rlc.c b/openair2/LAYER2/RLC/rlc.c index ad6abbf76b..67c8803c93 100644 --- a/openair2/LAYER2/RLC/rlc.c +++ b/openair2/LAYER2/RLC/rlc.c @@ -55,7 +55,6 @@ extern boolean_t pdcp_data_ind( //#define TRACE_RLC_PAYLOAD 1 #define DEBUG_RLC_DATA_REQ 1 -#if defined(TRACE_RLC_PAYLOAD) //----------------------------------------------------------------------------- void rlc_util_print_hex_octets(comp_name_t componentP, unsigned char* dataP, const signed long sizeP) //----------------------------------------------------------------------------- @@ -102,12 +101,13 @@ void rlc_util_print_hex_octets(comp_name_t componentP, unsigned char* dataP, con LOG_T(componentP, " |\n"); } -#endif + //----------------------------------------------------------------------------- rlc_op_status_t rlc_stat_req ( const protocol_ctxt_t* const ctxt_pP, const srb_flag_t srb_flagP, const rb_id_t rb_idP, + unsigned int* stat_rlc_mode, unsigned int* stat_tx_pdcp_sdu, unsigned int* stat_tx_pdcp_bytes, unsigned int* stat_tx_pdcp_sdu_discarded, @@ -154,7 +154,7 @@ rlc_op_status_t rlc_stat_req ( if (h_rc == HASH_TABLE_OK) { rlc_mode = rlc_union_p->mode; } - + *stat_rlc_mode = rlc_mode; switch (rlc_mode) { case RLC_MODE_NONE: *stat_tx_pdcp_sdu = 0; diff --git a/openair2/LAYER2/RLC/rlc.h b/openair2/LAYER2/RLC/rlc.h index cb5868a600..627d48c311 100755 --- a/openair2/LAYER2/RLC/rlc.h +++ b/openair2/LAYER2/RLC/rlc.h @@ -35,8 +35,8 @@ * \bug * \warning */ -/** @defgroup _rlc_impl_ RLC Layer Reference Implementation -* @ingroup _ref_implementation_ +/** @defgroup _rlc_impl_ RLC +* @ingroup _oai2 * @{ */ #ifndef __RLC_H__ @@ -540,7 +540,8 @@ public_rlc(void rlc_data_conf( const protocol_ctxt_t* const ctxtP, const srb_flag_t srb_flagP, const rb_id_t rb_idP, - unsigned int* stat_tx_pdcp_sdu, + unsigned int* stat_rlc_mode, + unsigned int* stat_tx_pdcp_sdu, unsigned int* stat_tx_pdcp_bytes, unsigned int* stat_tx_pdcp_sdu_discarded, unsigned int* stat_tx_pdcp_bytes_discarded, @@ -572,6 +573,7 @@ public_rlc(void rlc_data_conf( * \param[in] ctxtP Running context. * \param[in] srb_flagP Flag to indicate signalling radio bearer (1) or data radio bearer (0). * \param[in] rb_idP . +* \param[out] stat_rlc_mode RLC mode * \param[out] stat_tx_pdcp_sdu Number of SDUs coming from upper layers. * \param[out] stat_tx_pdcp_bytes Number of bytes coming from upper layers. * \param[out] stat_tx_pdcp_sdu_discarded Number of discarded SDUs coming from upper layers. @@ -605,7 +607,8 @@ public_rlc(rlc_op_status_t rlc_stat_req ( const protocol_ctxt_t* const ctxtP, const srb_flag_t srb_flagP, const rb_id_t rb_idP, - unsigned int* const stat_tx_pdcp_sdu, + unsigned int* const stat_rlc_mode, + unsigned int* const stat_tx_pdcp_sdu, unsigned int* const stat_tx_pdcp_bytes, unsigned int* const stat_tx_pdcp_sdu_discarded, unsigned int* const stat_tx_pdcp_bytes_discarded, diff --git a/openair2/LAYER2/RLC/rlc_mac.c b/openair2/LAYER2/RLC/rlc_mac.c index e18f548e8c..83ef0716ea 100644 --- a/openair2/LAYER2/RLC/rlc_mac.c +++ b/openair2/LAYER2/RLC/rlc_mac.c @@ -44,7 +44,7 @@ #include "assertions.h" #include "UTIL/LOG/vcd_signal_dumper.h" -#define DEBUG_MAC_INTERFACE 1 +//#define DEBUG_MAC_INTERFACE 1 //----------------------------------------------------------------------------- struct mac_data_ind mac_rlc_deserialize_tb ( @@ -80,10 +80,8 @@ struct mac_data_ind mac_rlc_deserialize_tb ( memcpy(((struct mac_tb_ind *) (tb_p->data))->data_ptr, &buffer_pP[tbs_size], tb_sizeP); #ifdef DEBUG_MAC_INTERFACE -#if defined(TRACE_RLC_PAYLOAD) LOG_T(RLC, "[MAC-RLC] DUMP RX PDU(%d bytes):\n", tb_sizeP); rlc_util_print_hex_octets(RLC, ((struct mac_tb_ind *) (tb_p->data))->data_ptr, tb_sizeP); -#endif #endif nb_tb_read = nb_tb_read + 1; tbs_size = tbs_size + tb_sizeP; @@ -114,10 +112,8 @@ tbs_size_t mac_rlc_serialize_tb (char* buffer_pP, list_t transport_blocksP) if (tb_p != NULL) { tb_size = ((struct mac_tb_req *) (tb_p->data))->tb_size; #ifdef DEBUG_MAC_INTERFACE -#if defined(TRACE_RLC_PAYLOAD) LOG_T(RLC, "[MAC-RLC] DUMP TX PDU(%d bytes):\n", tb_size); rlc_util_print_hex_octets(RLC, ((struct mac_tb_req *) (tb_p->data))->data_ptr, tb_size); -#endif #endif memcpy(&buffer_pP[tbs_size], &((struct mac_tb_req *) (tb_p->data))->data_ptr[0], tb_size); tbs_size = tbs_size + tb_size; diff --git a/openair2/LAYER2/openair2_proc.c b/openair2/LAYER2/openair2_proc.c index 309f631301..83441d7cb7 100644 --- a/openair2/LAYER2/openair2_proc.c +++ b/openair2/LAYER2/openair2_proc.c @@ -28,12 +28,12 @@ *******************************************************************************/ /****************************************************************************** \file openair2_proc -# \brief print openair2 statistics +# \brief print openair2 overall statistics # \author Navid Nikaein -# \date 2013 -# \version 0.1 +# \date 2013-2015 +# \version 0.2 # \email navid.nikaein@eurecom.fr -# @ingroup _mac +# @ingroup _openair2 */ #ifdef USER_MODE @@ -59,10 +59,12 @@ #include "UTIL/LOG/log.h" static mapping rrc_status_names[] = { - {"RRC_IDLE", 0}, - {"RRC_SI_RECEIVED",1}, - {"RRC_CONNECTED",2}, - {"RRC_RECONFIGURED",3}, + {"RRC_INACTIVE", 0}, + {"RRC_IDLE", 1}, + {"RRC_SI_RECEIVED",2}, + {"RRC_CONNECTED",3}, + {"RRC_RECONFIGURED",4}, + {"RRC_HO_EXECUTION",5}, {NULL, -1} }; @@ -72,7 +74,37 @@ int dump_eNB_l2_stats(char *buffer, int length) int eNB_id,UE_id,number_of_cards; int len= length; int CC_id=0; - int i; + int i,j; + protocol_ctxt_t ctxt; + rlc_op_status_t rlc_status; + unsigned int stat_rlc_mode; + unsigned int stat_tx_pdcp_sdu; + unsigned int stat_tx_pdcp_bytes; + unsigned int stat_tx_pdcp_sdu_discarded; + unsigned int stat_tx_pdcp_bytes_discarded; + unsigned int stat_tx_data_pdu; + unsigned int stat_tx_data_bytes; + unsigned int stat_tx_retransmit_pdu_by_status; + unsigned int stat_tx_retransmit_bytes_by_status; + unsigned int stat_tx_retransmit_pdu; + unsigned int stat_tx_retransmit_bytes; + unsigned int stat_tx_control_pdu; + unsigned int stat_tx_control_bytes; + unsigned int stat_rx_pdcp_sdu; + unsigned int stat_rx_pdcp_bytes; + unsigned int stat_rx_data_pdus_duplicate; + unsigned int stat_rx_data_bytes_duplicate; + unsigned int stat_rx_data_pdu; + unsigned int stat_rx_data_bytes; + unsigned int stat_rx_data_pdu_dropped; + unsigned int stat_rx_data_bytes_dropped; + unsigned int stat_rx_data_pdu_out_of_window; + unsigned int stat_rx_data_bytes_out_of_window; + unsigned int stat_rx_control_pdu; + unsigned int stat_rx_control_bytes; + unsigned int stat_timer_reordering_timed_out; + unsigned int stat_timer_poll_retransmit_timed_out; + unsigned int stat_timer_status_prohibit_timed_out; #ifdef EXMIMO number_of_cards=1; @@ -95,12 +127,21 @@ int dump_eNB_l2_stats(char *buffer, int length) eNB->eNB_stats[CC_id].num_dlactive_UEs, eNB->eNB_stats[CC_id].available_prbs, eNB->eNB_stats[CC_id].available_ncces); - + + len += sprintf(&buffer[len],"BCCH , NB_TX_MAC = %d, transmitted bytes (TTI %d, total %d) MCS (TTI %d)\n", + eNB->eNB_stats[CC_id].total_num_bcch_pdu, + eNB->eNB_stats[CC_id].bcch_buffer, + eNB->eNB_stats[CC_id].total_bcch_buffer, + eNB->eNB_stats[CC_id].bcch_mcs); + eNB->eNB_stats[CC_id].dlsch_bitrate=((eNB->eNB_stats[CC_id].dlsch_bytes_tx*8)/((eNB->frame + 1)*10)); eNB->eNB_stats[CC_id].total_dlsch_pdus_tx+=eNB->eNB_stats[CC_id].dlsch_pdus_tx; eNB->eNB_stats[CC_id].total_dlsch_bytes_tx+=eNB->eNB_stats[CC_id].dlsch_bytes_tx; eNB->eNB_stats[CC_id].total_dlsch_bitrate=((eNB->eNB_stats[CC_id].total_dlsch_bytes_tx*8)/((eNB->frame + 1)*10)); + eNB->eNB_stats[CC_id].ulsch_bitrate=((eNB->eNB_stats[CC_id].ulsch_bytes_rx*8)/((eNB->frame + 1)*10)); + eNB->eNB_stats[CC_id].total_ulsch_bitrate=((eNB->eNB_stats[CC_id].total_ulsch_bytes_rx*8)/((eNB->frame + 1)*10)); + len += sprintf(&buffer[len],"DLSCH bitrate (TTI %u, avg %u) kbps, Transmitted bytes (TTI %u, total %u), Transmitted PDU (TTI %u, total %u) \n", eNB->eNB_stats[CC_id].dlsch_bitrate, eNB->eNB_stats[CC_id].total_dlsch_bitrate, @@ -108,6 +149,14 @@ int dump_eNB_l2_stats(char *buffer, int length) eNB->eNB_stats[CC_id].total_dlsch_bytes_tx, eNB->eNB_stats[CC_id].dlsch_pdus_tx, eNB->eNB_stats[CC_id].total_dlsch_pdus_tx); + + len += sprintf(&buffer[len],"ULSCH bitrate (TTI %u, avg %u) kbps, Received bytes (TTI %u, total %u), Received PDU (TTI %u, total %lu) \n", + eNB->eNB_stats[CC_id].ulsch_bitrate, + eNB->eNB_stats[CC_id].total_ulsch_bitrate, + eNB->eNB_stats[CC_id].ulsch_bytes_rx, + eNB->eNB_stats[CC_id].total_ulsch_bytes_rx, + eNB->eNB_stats[CC_id].ulsch_pdus_rx, + eNB->eNB_stats[CC_id].total_ulsch_pdus_rx); } len += sprintf(&buffer[len],"\n"); @@ -115,12 +164,16 @@ int dump_eNB_l2_stats(char *buffer, int length) for (UE_id=UE_list->head; UE_id>=0; UE_id=UE_list->next[UE_id]) { for (i=0; inumactiveCCs[UE_id]; i++) { CC_id=UE_list->ordered_CCids[i][UE_id]; - UE_list->eNB_UE_stats[CC_id][UE_id].dlsch_bitrate=((UE_list->eNB_UE_stats[CC_id][UE_id].TBS*8)/((eNB->frame + 1)*10)); + + UE_list->eNB_UE_stats[CC_id][UE_id].dlsch_bitrate=((UE_list->eNB_UE_stats[CC_id][UE_id].TBS*8)/((eNB->frame + 1)*10)); UE_list->eNB_UE_stats[CC_id][UE_id].total_dlsch_bitrate= ((UE_list->eNB_UE_stats[CC_id][UE_id].total_pdu_bytes*8)/((eNB->frame + 1)*10)); UE_list->eNB_UE_stats[CC_id][UE_id].total_overhead_bytes+= UE_list->eNB_UE_stats[CC_id][UE_id].overhead_bytes; UE_list->eNB_UE_stats[CC_id][UE_id].avg_overhead_bytes=((UE_list->eNB_UE_stats[CC_id][UE_id].total_overhead_bytes*8)/((eNB->frame + 1)*10)); - - len += sprintf(&buffer[len],"UE %d %s, RNTI %x : CQI %d, MCS1 %d, MCS2 %d, RB (tx %d, retx %d, total %d), ncce (tx %d, retx %d) \n", + + UE_list->eNB_UE_stats[CC_id][UE_id].ulsch_bitrate=((UE_list->eNB_UE_stats[CC_id][UE_id].ulsch_TBS*8)/((eNB->frame + 1)*10)); + UE_list->eNB_UE_stats[CC_id][UE_id].total_ulsch_bitrate= ((UE_list->eNB_UE_stats[CC_id][UE_id].total_pdu_bytes_rx*8)/((eNB->frame + 1)*10)); + + len += sprintf(&buffer[len],"[MAC] UE %d (DLSCH),status %s, RNTI %x : CQI %d, MCS1 %d, MCS2 %d, RB (tx %d, retx %d, total %d), ncce (tx %d, retx %d) \n", UE_id, map_int_to_str(rrc_status_names, UE_list->eNB_UE_stats[CC_id][UE_id].rrc_status), UE_list->eNB_UE_stats[CC_id][UE_id].crnti, @@ -147,23 +200,206 @@ int dump_eNB_l2_stats(char *buffer, int length) UE_list->eNB_UE_stats[CC_id][UE_id].total_overhead_bytes, UE_list->eNB_UE_stats[CC_id][UE_id].avg_overhead_bytes ); - len += sprintf(&buffer[len], - "[MAC] ULSCH received bytes (total %"PRIu64")," - "Total received PDU %d, Total errors %d\n", + + len += sprintf(&buffer[len],"[MAC] UE %d (ULSCH), Status %d, RNTI %x : rx power (normalized %d, target %d), MCS (pre %d, post %d), RB (rx %d, retx %d, total %d), Current TBS %d \n", + UE_id, + map_int_to_str(rrc_status_names, UE_list->eNB_UE_stats[CC_id][UE_id].rrc_status), + UE_list->eNB_UE_stats[CC_id][UE_id].crnti, + UE_list->eNB_UE_stats[CC_id][UE_id].normalized_rx_power, + UE_list->eNB_UE_stats[CC_id][UE_id].target_rx_power, + UE_list->eNB_UE_stats[CC_id][UE_id].ulsch_mcs1, + UE_list->eNB_UE_stats[CC_id][UE_id].ulsch_mcs2, + UE_list->eNB_UE_stats[CC_id][UE_id].rbs_used_rx, + UE_list->eNB_UE_stats[CC_id][UE_id].rbs_used_retx_rx, + UE_list->eNB_UE_stats[CC_id][UE_id].total_rbs_used_rx, + UE_list->eNB_UE_stats[CC_id][UE_id].ulsch_TBS + ); + + len += sprintf(&buffer[len], + "[MAC] ULSCH bitrate (TTI %d, avg %d), received bytes (total %"PRIu64")," + "Total received PDU %d, Total errors %d\n", + UE_list->eNB_UE_stats[CC_id][UE_id].ulsch_bitrate, + UE_list->eNB_UE_stats[CC_id][UE_id].total_ulsch_bitrate, UE_list->eNB_UE_stats[CC_id][UE_id].total_pdu_bytes_rx, UE_list->eNB_UE_stats[CC_id][UE_id].total_num_pdus_rx, UE_list->eNB_UE_stats[CC_id][UE_id].num_errors_rx); - len+= sprintf(&buffer[len],"Received PHR PH = %d (db)\n", UE_list->UE_template[CC_id][UE_id].phr_info); - len+= sprintf(&buffer[len],"Received BSR [0][1][2][3] = %d %d %d %d\n", + + len+= sprintf(&buffer[len],"[MAC] Received PHR PH = %d (db)\n", UE_list->UE_template[CC_id][UE_id].phr_info); + len+= sprintf(&buffer[len],"[MAC] Received BSR LCGID[0][1][2][3] = %u %u %u %u\n", UE_list->UE_template[CC_id][UE_id].bsr_info[LCGID0], UE_list->UE_template[CC_id][UE_id].bsr_info[LCGID1], UE_list->UE_template[CC_id][UE_id].bsr_info[LCGID2], UE_list->UE_template[CC_id][UE_id].bsr_info[LCGID3] ); } + + PROTOCOL_CTXT_SET_BY_MODULE_ID(&ctxt, + eNB_id, + ENB_FLAG_YES, + UE_list->eNB_UE_stats[UE_PCCID(eNB_id,UE_id)][UE_id].crnti, + eNB->frame, + eNB->subframe, + eNB_id); + + rlc_status = rlc_stat_req(&ctxt, + SRB_FLAG_YES, + DCCH, + &stat_rlc_mode, + &stat_tx_pdcp_sdu, + &stat_tx_pdcp_bytes, + &stat_tx_pdcp_sdu_discarded, + &stat_tx_pdcp_bytes_discarded, + &stat_tx_data_pdu, + &stat_tx_data_bytes, + &stat_tx_retransmit_pdu_by_status, + &stat_tx_retransmit_bytes_by_status, + &stat_tx_retransmit_pdu, + &stat_tx_retransmit_bytes, + &stat_tx_control_pdu, + &stat_tx_control_bytes, + &stat_rx_pdcp_sdu, + &stat_rx_pdcp_bytes, + &stat_rx_data_pdus_duplicate, + &stat_rx_data_bytes_duplicate, + &stat_rx_data_pdu, + &stat_rx_data_bytes, + &stat_rx_data_pdu_dropped, + &stat_rx_data_bytes_dropped, + &stat_rx_data_pdu_out_of_window, + &stat_rx_data_bytes_out_of_window, + &stat_rx_control_pdu, + &stat_rx_control_bytes, + &stat_timer_reordering_timed_out, + &stat_timer_poll_retransmit_timed_out, + &stat_timer_status_prohibit_timed_out); + + if (rlc_status == RLC_OP_STATUS_OK) { + len+=sprintf(&buffer[len],"[RLC] DCCH Mode %s, NB_SDU_TO_TX = %d (bytes %d)\tNB_SDU_TO_TX_DISC %d (bytes %d)\n", + (stat_rlc_mode==RLC_MODE_AM)? "AM": (stat_rlc_mode==RLC_MODE_UM)?"UM":"NONE", + stat_tx_pdcp_sdu, + stat_tx_pdcp_bytes, + stat_tx_pdcp_sdu_discarded, + stat_tx_pdcp_bytes_discarded); + + len+=sprintf(&buffer[len],"[RLC] DCCH Mode %s, NB_TX_DATA = %d (bytes %d)\tNB_TX_CONTROL %d (bytes %d)\tNB_TX_RETX %d (bytes %d)\tNB_TX_RETX_BY_STATUS = %d (bytes %d)\n", + (stat_rlc_mode==RLC_MODE_AM)? "AM": (stat_rlc_mode==RLC_MODE_UM)?"UM":"NONE", + stat_tx_data_pdu, + stat_tx_data_bytes, + stat_tx_control_pdu, + stat_tx_control_bytes, + stat_tx_retransmit_pdu, + stat_tx_retransmit_bytes, + stat_tx_retransmit_pdu_by_status, + stat_tx_retransmit_bytes_by_status); + + + len+=sprintf(&buffer[len],"[RLC] DCCH Mode %s, NB_RX_DATA = %d (bytes %d)\tNB_RX_CONTROL %d (bytes %d)\tNB_RX_DUPL %d (bytes %d)\tNB_RX_DROP = %d (bytes %d)\tNB_RX_OUT_OF_WINDOW = %d (bytes %d)\n", + (stat_rlc_mode==RLC_MODE_AM)? "AM": (stat_rlc_mode==RLC_MODE_UM)?"UM":"NONE", + stat_rx_data_pdu, + stat_rx_data_bytes, + stat_rx_control_pdu, + stat_rx_control_bytes, + stat_rx_data_pdus_duplicate, + stat_rx_data_bytes_duplicate, + stat_rx_data_pdu_dropped, + stat_rx_data_bytes_dropped, + stat_rx_data_pdu_out_of_window, + stat_rx_data_bytes_out_of_window); + + + len+=sprintf(&buffer[len],"[RLC] DCCH Mode %s, RX_REODERING_TIMEOUT = %d\tRX_POLL_RET_TIMEOUT %d\tRX_PROHIBIT_TIME_OUT %d\n", + (stat_rlc_mode==RLC_MODE_AM)? "AM": (stat_rlc_mode==RLC_MODE_UM)?"UM":"NONE", + stat_timer_reordering_timed_out, + stat_timer_poll_retransmit_timed_out, + stat_timer_status_prohibit_timed_out); + + len+=sprintf(&buffer[len],"[RLC] DCCH Mode %s, NB_SDU_TO_RX = %d (bytes %d)\n", + (stat_rlc_mode==RLC_MODE_AM)? "AM": (stat_rlc_mode==RLC_MODE_UM)?"UM":"NONE", + stat_rx_pdcp_sdu, + stat_rx_pdcp_bytes); + } + + rlc_status = rlc_stat_req(&ctxt, + SRB_FLAG_NO, + DTCH-2, // DRB_IDENTITY + &stat_rlc_mode, + &stat_tx_pdcp_sdu, + &stat_tx_pdcp_bytes, + &stat_tx_pdcp_sdu_discarded, + &stat_tx_pdcp_bytes_discarded, + &stat_tx_data_pdu, + &stat_tx_data_bytes, + &stat_tx_retransmit_pdu_by_status, + &stat_tx_retransmit_bytes_by_status, + &stat_tx_retransmit_pdu, + &stat_tx_retransmit_bytes, + &stat_tx_control_pdu, + &stat_tx_control_bytes, + &stat_rx_pdcp_sdu, + &stat_rx_pdcp_bytes, + &stat_rx_data_pdus_duplicate, + &stat_rx_data_bytes_duplicate, + &stat_rx_data_pdu, + &stat_rx_data_bytes, + &stat_rx_data_pdu_dropped, + &stat_rx_data_bytes_dropped, + &stat_rx_data_pdu_out_of_window, + &stat_rx_data_bytes_out_of_window, + &stat_rx_control_pdu, + &stat_rx_control_bytes, + &stat_timer_reordering_timed_out, + &stat_timer_poll_retransmit_timed_out, + &stat_timer_status_prohibit_timed_out); + + if (rlc_status == RLC_OP_STATUS_OK) { + len+=sprintf(&buffer[len],"[RLC] DTCH Mode %s, NB_SDU_TO_TX = %d (bytes %d)\tNB_SDU_TO_TX_DISC %d (bytes %d)\n", + (stat_rlc_mode==RLC_MODE_AM)? "AM": (stat_rlc_mode==RLC_MODE_UM)?"UM":"NONE", + stat_tx_pdcp_sdu, + stat_tx_pdcp_bytes, + stat_tx_pdcp_sdu_discarded, + stat_tx_pdcp_bytes_discarded); + + len+=sprintf(&buffer[len],"[RLC] DTCH Mode %s, NB_TX_DATA = %d (bytes %d)\tNB_TX_CONTROL %d (bytes %d)\tNB_TX_RETX %d (bytes %d)\tNB_TX_RETX_BY_STATUS = %d (bytes %d)\n", + (stat_rlc_mode==RLC_MODE_AM)? "AM": (stat_rlc_mode==RLC_MODE_UM)?"UM":"NONE", + stat_tx_data_pdu, + stat_tx_data_bytes, + stat_tx_control_pdu, + stat_tx_control_bytes, + stat_tx_retransmit_pdu, + stat_tx_retransmit_bytes, + stat_tx_retransmit_pdu_by_status, + stat_tx_retransmit_bytes_by_status); + + + len+=sprintf(&buffer[len],"[RLC] DTCH Mode %s, NB_RX_DATA = %d (bytes %d)\tNB_RX_CONTROL %d (bytes %d)\tNB_RX_DUPL %d (bytes %d)\tNB_RX_DROP = %d (bytes %d)\tNB_RX_OUT_OF_WINDOW = %d (bytes %d)\n", + (stat_rlc_mode==RLC_MODE_AM)? "AM": (stat_rlc_mode==RLC_MODE_UM)?"UM":"NONE", + stat_rx_data_pdu, + stat_rx_data_bytes, + stat_rx_control_pdu, + stat_rx_control_bytes, + stat_rx_data_pdus_duplicate, + stat_rx_data_bytes_duplicate, + stat_rx_data_pdu_dropped, + stat_rx_data_bytes_dropped, + stat_rx_data_pdu_out_of_window, + stat_rx_data_bytes_out_of_window); + + + len+=sprintf(&buffer[len],"[RLC] DTCH Mode %s, RX_REODERING_TIMEOUT = %d\tRX_POLL_RET_TIMEOUT %d\tRX_PROHIBIT_TIME_OUT %d\n", + (stat_rlc_mode==RLC_MODE_AM)? "AM": (stat_rlc_mode==RLC_MODE_UM)?"UM":"NONE", + stat_timer_reordering_timed_out, + stat_timer_poll_retransmit_timed_out, + stat_timer_status_prohibit_timed_out); + + len+=sprintf(&buffer[len],"[RLC] DTCH Mode %s, NB_SDU_TO_RX = %d (bytes %d)\n", + (stat_rlc_mode==RLC_MODE_AM)? "AM": (stat_rlc_mode==RLC_MODE_UM)?"UM":"NONE", + stat_rx_pdcp_sdu, + stat_rx_pdcp_bytes); + + } } } - + return len + 1 /* SR: for trailing \0 */; } diff --git a/openair2/PHY_INTERFACE/defs.h b/openair2/PHY_INTERFACE/defs.h index 4eddea349e..a33e1586f3 100755 --- a/openair2/PHY_INTERFACE/defs.h +++ b/openair2/PHY_INTERFACE/defs.h @@ -27,24 +27,20 @@ *******************************************************************************/ -/*! \file defs.h +/*! \file PHY_INTERFACE/defs.h * \brief mac phy interface primitives * \author Raymond Knopp and Navid Nikaein * \date 2011 * \version 0.5 * \mail navid.nikaein@eurecom.fr or openair_tech@eurecom.fr -* @ingroup _mac - */ #ifndef __MAC_PHY_PRIMITIVES_H__ # define __MAC_PHY_PRIMITIVES_H__ - #include "LAYER2/MAC/defs.h" - #define MAX_NUMBER_OF_MAC_INSTANCES 16 #define NULL_PDU 255 @@ -59,6 +55,10 @@ do { mac_xface->macphy_exit(temp); \ } while(0) +/** @defgroup _phy_if MAC-PHY interface + * @ingroup _oai2 + * @{ + */ /*! \brief MACPHY Interface */ typedef struct { /// Pointer function that initializes L2 @@ -298,17 +298,23 @@ typedef struct { /// Function for UE/PHY to compute PHR int8_t (*get_PHR)(module_id_t Mod_id, uint8_t CC_id,uint8_t eNB_index); + /// Function for UE to process the timing advance command void (*process_timing_advance)(module_id_t Mod_id,uint8_t CC_id, int16_t timing_advance); - + + /// Function for MAC to get the UE stats from the PHY LTE_eNB_UE_stats* (*get_eNB_UE_stats)(module_id_t Mod_id, uint8_t CC_id, rnti_t rnti); + /// get the frame parameters from the PHY LTE_DL_FRAME_PARMS* (*get_lte_frame_parms)(module_id_t Mod_id, uint8_t CC_id); - + + /// get the Multiuser mimo mode MU_MIMO_mode* (*get_mu_mimo_mode) (module_id_t Mod_id, uint8_t CC_id, rnti_t rnti); + /// get the delta TF for Uplink Power Control Calculation int16_t (*get_hundred_times_delta_TF) (module_id_t module_idP, uint8_t CC_id, rnti_t rnti, uint8_t harq_pid); - - int16_t (*get_target_ul_rx_power) (module_id_t module_idP, uint8_t CC_id); + /// get target uplink received power + int16_t (*get_target_pusch_rx_power) (module_id_t module_idP, uint8_t CC_id); + int16_t (*get_target_pucch_rx_power) (module_id_t module_idP, uint8_t CC_id); unsigned char is_cluster_head; unsigned char is_primary_cluster_head; @@ -318,10 +324,13 @@ typedef struct { /// PHY Frame Configuration LTE_DL_FRAME_PARMS *lte_frame_parms; - //ICIC algos - uint8_t (*get_SB_size)(uint8_t n_rb_dl); + uint8_t (*get_prach_prb_offset)(LTE_DL_FRAME_PARMS *frame_parms, uint8_t tdd_mapindex, uint16_t Nf); - //end ALU's algo + int (*is_prach_subframe)(LTE_DL_FRAME_PARMS *frame_parms,frame_t frame, uint8_t subframe); + + /// ICIC algos + uint8_t (*get_SB_size)(uint8_t n_rb_dl); + ///end ALU's algo } MAC_xface; @@ -329,3 +338,4 @@ typedef struct { #endif +/** @} */ diff --git a/openair2/RRC/LITE/L2_interface.c b/openair2/RRC/LITE/L2_interface.c index d9c1062ab7..16811fe70f 100644 --- a/openair2/RRC/LITE/L2_interface.c +++ b/openair2/RRC/LITE/L2_interface.c @@ -362,7 +362,7 @@ mac_rrc_lite_data_ind( if(eNB_flagP == ENB_FLAG_NO) { if(srb_idP == BCCH) { - LOG_T(RRC,"[UE %d] Received SDU for BCCH on SRB %d from eNB %d\n",module_idP,srb_idP,eNB_indexP); + LOG_D(RRC,"[UE %d] Received SDU for BCCH on SRB %d from eNB %d\n",module_idP,srb_idP,eNB_indexP); #if defined(ENABLE_ITTI) { @@ -673,8 +673,9 @@ void rrc_lite_in_sync_ind(module_id_t Mod_idP, frame_t frameP, uint16_t eNB_inde void rrc_lite_out_of_sync_ind(module_id_t Mod_idP, frame_t frameP, uint16_t eNB_index) { //-------------------------------------------------------------------------------------------// - LOG_I(RRC,"[UE %d] Frame %d: OUT OF SYNC FROM eNB %d (T310 %d, N310 %d, N311 %d)\n ", + LOG_I(RRC,"[UE %d] Frame %d: OUT OF SYNC FROM eNB %d (T310 active %d : T310 %d, N310 %d, N311 %d)\n ", Mod_idP,frameP,eNB_index, + UE_rrc_inst[Mod_idP].Info[eNB_index].T300_active, UE_rrc_inst[Mod_idP].Info[eNB_index].T310_cnt, UE_rrc_inst[Mod_idP].Info[eNB_index].N310_cnt, UE_rrc_inst[Mod_idP].Info[eNB_index].N311_cnt); diff --git a/openair2/RRC/LITE/MESSAGES/asn1_msg.c b/openair2/RRC/LITE/MESSAGES/asn1_msg.c index 5ce5203014..8823a87130 100644 --- a/openair2/RRC/LITE/MESSAGES/asn1_msg.c +++ b/openair2/RRC/LITE/MESSAGES/asn1_msg.c @@ -688,10 +688,14 @@ uint8_t do_SIB23(uint8_t Mod_id, (*sib2)->ac_BarringInfo = NULL; #ifdef Rel10 +#if 0 (*sib2)->ssac_BarringForMMTEL_Voice_r9 = NULL; (*sib2)->ssac_BarringForMMTEL_Video_r9 = NULL; (*sib2)->ac_BarringForCSFB_r10 = NULL; #endif + (*sib2)->ext1 = NULL; + (*sib2)->ext2 = NULL; +#endif #if defined(ENABLE_ITTI) @@ -989,10 +993,13 @@ uint8_t do_SIB23(uint8_t Mod_id, /// (*SIB3) #ifdef Rel10 + (*sib3)->ext1 = NULL; +#if 0 (*sib3)->s_IntraSearch_v920=NULL; (*sib3)->s_NonIntraSearch_v920=NULL; (*sib3)->q_QualMin_r9=NULL; (*sib3)->threshServingLowQ_r9=NULL; +#endif #endif (*sib3)->cellReselectionInfoCommon.q_Hyst=SystemInformationBlockType3__cellReselectionInfoCommon__q_Hyst_dB4; @@ -1636,7 +1643,7 @@ do_RRCConnectionSetup( // SchedulingRequestConfig physicalConfigDedicated2->schedulingRequestConfig->present = SchedulingRequestConfig_PR_setup; - physicalConfigDedicated2->schedulingRequestConfig->choice.setup.sr_PUCCH_ResourceIndex = ue_context_pP->local_uid; + physicalConfigDedicated2->schedulingRequestConfig->choice.setup.sr_PUCCH_ResourceIndex = 3;//ue_context_pP->local_uid; if (frame_parms->frame_type == 0) { // FDD physicalConfigDedicated2->schedulingRequestConfig->choice.setup.sr_ConfigIndex = 5+(ue_context_pP->local_uid%10); // Isr = 5 (every 10 subframes, offset=2+UE_id mod3) @@ -2045,6 +2052,64 @@ do_RRCConnectionReconfiguration( return((enc_rval.encoded+7)/8); } +//------------------------------------------------------------------------------ +uint8_t +do_RRCConnectionReestablishmentReject( + uint8_t Mod_id, + uint8_t* const buffer) +//------------------------------------------------------------------------------ +{ + + asn_enc_rval_t enc_rval; + + DL_CCCH_Message_t dl_ccch_msg; + RRCConnectionReestablishmentReject_t *rrcConnectionReestablishmentReject; + + memset((void *)&dl_ccch_msg,0,sizeof(DL_CCCH_Message_t)); + dl_ccch_msg.message.present = DL_CCCH_MessageType_PR_c1; + dl_ccch_msg.message.choice.c1.present = DL_CCCH_MessageType__c1_PR_rrcConnectionReestablishmentReject; + rrcConnectionReestablishmentReject = &dl_ccch_msg.message.choice.c1.choice.rrcConnectionReestablishmentReject; + + // RRCConnectionReestablishmentReject + rrcConnectionReestablishmentReject->criticalExtensions.present = RRCConnectionReestablishmentReject__criticalExtensions_PR_rrcConnectionReestablishmentReject_r8; + +#ifdef XER_PRINT + xer_fprint(stdout, &asn_DEF_DL_CCCH_Message, (void*)&dl_ccch_msg); +#endif + enc_rval = uper_encode_to_buffer(&asn_DEF_DL_CCCH_Message, + (void*)&dl_ccch_msg, + buffer, + 100); + AssertFatal (enc_rval.encoded > 0, "ASN1 message encoding failed (%s, %lu)!\n", + enc_rval.failed_type->name, enc_rval.encoded); + +#if defined(ENABLE_ITTI) +# if !defined(DISABLE_XER_SPRINT) + { + char message_string[20000]; + size_t message_string_size; + + if ((message_string_size = xer_sprint(message_string, sizeof(message_string), &asn_DEF_DL_CCCH_Message, (void *) &dl_ccch_msg)) > 0) { + MessageDef *msg_p; + + msg_p = itti_alloc_new_message_sized (TASK_RRC_ENB, RRC_DL_CCCH, message_string_size + sizeof (IttiMsgText)); + msg_p->ittiMsg.rrc_dl_ccch.size = message_string_size; + memcpy(&msg_p->ittiMsg.rrc_dl_ccch.text, message_string, message_string_size); + + itti_send_msg_to_task(TASK_UNKNOWN, Mod_id, msg_p); + } + } +# endif +#endif + +#ifdef USER_MODE + LOG_D(RRC,"RRCConnectionReestablishmentReject Encoded %d bits (%d bytes)\n", + enc_rval.encoded,(enc_rval.encoded+7)/8); +#endif + + return((enc_rval.encoded+7)/8); +} + uint8_t do_RRCConnectionRelease( uint8_t Mod_id, uint8_t *buffer, @@ -2630,6 +2695,7 @@ EXPORT_SYMBOL(do_RRCConnectionRequest); EXPORT_SYMBOL(do_RRCConnectionSetupComplete); EXPORT_SYMBOL(do_RRCConnectionReconfigurationComplete); EXPORT_SYMBOL(do_RRCConnectionSetup); +EXPORT_SYMBOL(do_RRCConnectionReestablishmentReject); EXPORT_SYMBOL(do_RRCConnectionReconfiguration); EXPORT_SYMBOL(asn_DEF_UL_DCCH_Message); EXPORT_SYMBOL(asn_DEF_UL_CCCH_Message); diff --git a/openair2/RRC/LITE/MESSAGES/asn1_msg.h b/openair2/RRC/LITE/MESSAGES/asn1_msg.h index 250712948a..d1516feccc 100644 --- a/openair2/RRC/LITE/MESSAGES/asn1_msg.h +++ b/openair2/RRC/LITE/MESSAGES/asn1_msg.h @@ -208,6 +208,16 @@ do_RRCConnectionReconfiguration( #endif ); +/** +\brief Generate an RRCConnectionReestablishmentReject DL-CCCH-Message (eNB). +@param Mod_id Module ID of eNB +@param buffer Pointer to PER-encoded ASN.1 description of DL-CCCH-Message PDU +@returns Size of encoded bit stream in bytes*/ +uint8_t +do_RRCConnectionReestablishmentReject( + uint8_t Mod_id, + uint8_t* const buffer); + /** \brief Generate an RRCConnectionRequest UL-CCCH-Message (UE) based on random string or S-TMSI. This routine only generates an mo-data establishment cause. diff --git a/openair2/RRC/LITE/MESSAGES/asn1c/ASN1_files/36331-ah0.txt b/openair2/RRC/LITE/MESSAGES/asn1c/ASN1_files/36331-ah0.txt new file mode 100755 index 0000000000..6ee421d8b6 --- /dev/null +++ b/openair2/RRC/LITE/MESSAGES/asn1c/ASN1_files/36331-ah0.txt @@ -0,0 +1,11053 @@ +3GPP TS 36.331 V10.17.0 (2015-06) +Technical Specification +3rd Generation Partnership Project; +Technical Specification Group Radio Access Network; +Evolved Universal Terrestrial Radio Access (E-UTRA); +Radio Resource Control (RRC); +Protocol specification +(Release 10) + + +The present document has been developed within the 3rd Generation Partnership Project (3GPP TM) and may be further elaborated for the purposes of 3GPP. +The present document has not been subject to any approval process by the 3GPP Organizational Partners and shall not be implemented. +This Specification is provided for future development work within 3GPP only. The Organizational Partners accept no liability for any use of this Specification. +Specifications and reports for implementation of the 3GPP TM system should be obtained via the 3GPP Organizational Partners' Publications Offices. + + + + +Keywords +UMTS, radio + +3GPP +Postal address + +3GPP support office address +650 Route des Lucioles - Sophia Antipolis +Valbonne - FRANCE +Tel.: +33 4 92 94 42 00 Fax: +33 4 93 65 47 16 +Internet +http://www.3gpp.org + +Copyright Notification +No part may be reproduced except as authorized by written permission. +The copyright and the foregoing restriction extend to reproduction in all media. + +© 2015, 3GPP Organizational Partners (ARIB, ATIS, CCSA, ETSI, TSDSI, TTA, TTC). +All rights reserved. + +UMTS™ is a Trade Mark of ETSI registered for the benefit of its members +3GPP™ is a Trade Mark of ETSI registered for the benefit of its Members and of the 3GPP Organizational Partners +LTE™ is a Trade Mark of ETSI currently being registered for the benefit of its Members and of the 3GPP Organizational Partners +GSM® and the GSM logo are registered and owned by the GSM Association + + +Contents +Foreword 13 +1 Scope 14 +2 References 14 +3 Definitions, symbols and abbreviations 17 +3.1 Definitions 17 +3.2 Abbreviations 17 +4 General 19 +4.1 Introduction 19 +4.2 Architecture 19 +4.2.1 UE states and state transitions including inter RAT 19 +4.2.2 Signalling radio bearers 21 +4.3 Services 22 +4.3.1 Services provided to upper layers 22 +4.3.2 Services expected from lower layers 22 +4.4 Functions 22 +5 Procedures 23 +5.1 General 23 +5.1.1 Introduction 23 +5.1.2 General requirements 23 +5.2 System information 24 +5.2.1 Introduction 24 +5.2.1.1 General 24 +5.2.1.2 Scheduling 25 +5.2.1.3 System information validity and notification of changes 25 +5.2.1.4 Indication of ETWS notification 26 +5.2.1.5 Indication of CMAS notification 26 +5.2.2 System information acquisition 27 +5.2.2.1 General 27 +5.2.2.2 Initiation 27 +5.2.2.3 System information required by the UE 27 +5.2.2.4 System information acquisition by the UE 27 +5.2.2.5 Essential system information missing 29 +5.2.2.6 Actions upon reception of the MasterInformationBlock message 29 +5.2.2.7 Actions upon reception of the SystemInformationBlockType1 message 29 +5.2.2.8 Actions upon reception of SystemInformation messages 30 +5.2.2.9 Actions upon reception of SystemInformationBlockType2 30 +5.2.2.10 Actions upon reception of SystemInformationBlockType3 30 +5.2.2.11 Actions upon reception of SystemInformationBlockType4 30 +5.2.2.12 Actions upon reception of SystemInformationBlockType5 31 +5.2.2.13 Actions upon reception of SystemInformationBlockType6 31 +5.2.2.14 Actions upon reception of SystemInformationBlockType7 31 +5.2.2.15 Actions upon reception of SystemInformationBlockType8 31 +5.2.2.16 Actions upon reception of SystemInformationBlockType9 32 +5.2.2.17 Actions upon reception of SystemInformationBlockType10 32 +5.2.2.18 Actions upon reception of SystemInformationBlockType11 32 +5.2.2.19 Actions upon reception of SystemInformationBlockType12 33 +5.2.2.20 Actions upon reception of SystemInformationBlockType13 33 +5.2.3 Acquisition of an SI message 33 +5.3 Connection control 34 +5.3.1 Introduction 34 +5.3.1.1 RRC connection control 34 +5.3.1.2 Security 35 +5.3.1.2a RN security 35 +5.3.1.3 Connected mode mobility 36 +5.3.2 Paging 37 +5.3.2.1 General 37 +5.3.2.2 Initiation 37 +5.3.2.3 Reception of the Paging message by the UE 37 +5.3.3 RRC connection establishment 38 +5.3.3.1 General 38 +5.3.3.2 Initiation 38 +5.3.3.3 Actions related to transmission of RRCConnectionRequest message 40 +5.3.3.4 Reception of the RRCConnectionSetup by the UE 40 +5.3.3.5 Cell re-selection while T300, T302, T303, T305 or T306 is running 41 +5.3.3.6 T300 expiry 42 +5.3.3.7 T302, T303, T305 or T306 expiry or stop 42 +5.3.3.8 Reception of the RRCConnectionReject by the UE 42 +5.3.3.9 Abortion of RRC connection establishment 43 +5.3.3.10 Handling of SSAC related parameters 43 +5.3.3.11 Access barring check 44 +5.3.4 Initial security activation 45 +5.3.4.1 General 45 +5.3.4.2 Initiation 45 +5.3.4.3 Reception of the SecurityModeCommand by the UE 45 +5.3.5 RRC connection reconfiguration 46 +5.3.5.1 General 46 +5.3.5.2 Initiation 47 +5.3.5.3 Reception of an RRCConnectionReconfiguration not including the mobilityControlInfo by the UE 47 +5.3.5.4 Reception of an RRCConnectionReconfiguration including the mobilityControlInfo by the UE (handover) 48 +5.3.5.5 Reconfiguration failure 50 +5.3.5.6 T304 expiry (handover failure) 50 +5.3.5.7 Void 51 +5.3.5.8 Radio Configuration involving full configuration option 51 +5.3.6 Counter check 53 +5.3.6.1 General 53 +5.3.6.2 Initiation 53 +5.3.6.3 Reception of the CounterCheck message by the UE 53 +5.3.7 RRC connection re-establishment 54 +5.3.7.1 General 54 +5.3.7.2 Initiation 54 +5.3.7.3 Actions following cell selection while T311 is running 55 +5.3.7.4 Actions related to transmission of RRCConnectionReestablishmentRequest message 55 +5.3.7.5 Reception of the RRCConnectionReestablishment by the UE 56 +5.3.7.6 T311 expiry 57 +5.3.7.7 T301 expiry or selected cell no longer suitable 57 +5.3.7.8 Reception of RRCConnectionReestablishmentReject by the UE 57 +5.3.8 RRC connection release 58 +5.3.8.1 General 58 +5.3.8.2 Initiation 58 +5.3.8.3 Reception of the RRCConnectionRelease by the UE 58 +5.3.8.4 T320 expiry 58 +5.3.9 RRC connection release requested by upper layers 59 +5.3.9.1 General 59 +5.3.9.2 Initiation 59 +5.3.10 Radio resource configuration 59 +5.3.10.0 General 59 +5.3.10.1 SRB addition/ modification 60 +5.3.10.2 DRB release 60 +5.3.10.3 DRB addition/ modification 60 +5.3.10.3a SCell release 61 +5.3.10.3b SCell addition/ modification 61 +5.3.10.4 MAC main reconfiguration 61 +5.3.10.5 Semi-persistent scheduling reconfiguration 62 +5.3.10.6 Physical channel reconfiguration 62 +5.3.10.7 Radio Link Failure Timers and Constants reconfiguration 62 +5.3.10.8 Time domain measurement resource restriction for serving cell 62 +5.3.11 Radio link failure related actions 63 +5.3.11.1 Detection of physical layer problems in RRC_CONNECTED 63 +5.3.11.2 Recovery of physical layer problems 63 +5.3.11.3 Detection of radio link failure 63 +5.3.12 UE actions upon leaving RRC_CONNECTED 64 +5.3.13 UE actions upon PUCCH/ SRS release request 64 +5.3.14 Proximity indication 65 +5.3.14.1 General 65 +5.3.14.2 Initiation 65 +5.3.14.3 Actions related to transmission of ProximityIndication message 65 +5.4 Inter-RAT mobility 66 +5.4.1 Introduction 66 +5.4.2 Handover to E-UTRA 66 +5.4.2.1 General 66 +5.4.2.2 Initiation 66 +5.4.2.3 Reception of the RRCConnectionReconfiguration by the UE 67 +5.4.2.4 Reconfiguration failure 68 +5.4.2.5 T304 expiry (handover to E-UTRA failure) 68 +5.4.3 Mobility from E-UTRA 69 +5.4.3.1 General 69 +5.4.3.2 Initiation 69 +5.4.3.3 Reception of the MobilityFromEUTRACommand by the UE 69 +5.4.3.4 Successful completion of the mobility from E-UTRA 71 +5.4.3.5 Mobility from E-UTRA failure 71 +5.4.4 Handover from E-UTRA preparation request (CDMA2000) 71 +5.4.4.1 General 71 +5.4.4.2 Initiation 72 +5.4.4.3 Reception of the HandoverFromEUTRAPreparationRequest by the UE 72 +5.4.5 UL handover preparation transfer (CDMA2000) 72 +5.4.5.1 General 72 +5.4.5.2 Initiation 73 +5.4.5.3 Actions related to transmission of the ULHandoverPreparationTransfer message 73 +5.4.5.4 Failure to deliver the ULHandoverPreparationTransfer message 73 +5.4.6 Inter-RAT cell change order to E-UTRAN 73 +5.4.6.1 General 73 +5.4.6.2 Initiation 73 +5.4.6.3 UE fails to complete an inter-RAT cell change order 73 +5.5 Measurements 74 +5.5.1 Introduction 74 +5.5.2 Measurement configuration 75 +5.5.2.1 General 75 +5.5.2.2 Measurement identity removal 76 +5.5.2.2a Measurement identity autonomous removal 76 +5.5.2.3 Measurement identity addition/ modification 77 +5.5.2.4 Measurement object removal 77 +5.5.2.5 Measurement object addition/ modification 78 +5.5.2.6 Reporting configuration removal 79 +5.5.2.7 Reporting configuration addition/ modification 79 +5.5.2.8 Quantity configuration 79 +5.5.2.9 Measurement gap configuration 80 +5.5.3 Performing measurements 80 +5.5.3.1 General 80 +5.5.3.2 Layer 3 filtering 81 +5.5.4 Measurement report triggering 82 +5.5.4.1 General 82 +5.5.4.2 Event A1 (Serving becomes better than threshold) 84 +5.5.4.3 Event A2 (Serving becomes worse than threshold) 85 +5.5.4.4 Event A3 (Neighbour becomes offset better than PCell) 85 +5.5.4.5 Event A4 (Neighbour becomes better than threshold) 86 +5.5.4.6 Event A5 (PCell becomes worse than threshold1 and neighbour becomes better than threshold2) 86 +5.5.4.6a Event A6 (Neighbour becomes offset better than SCell) 87 +5.5.4.7 Event B1 (Inter RAT neighbour becomes better than threshold) 88 +5.5.4.8 Event B2 (PCell becomes worse than threshold1 and inter RAT neighbour becomes better than threshold2) 88 +5.5.5 Measurement reporting 89 +5.5.6 Measurement related actions 91 +5.5.6.1 Actions upon handover and re-establishment 91 +5.5.6.2 Speed dependant scaling of measurement related parameters 92 +5.5.7 Inter-frequency RSTD measurement indication 93 +5.5.7.1 General 93 +5.5.7.2 Initiation 93 +5.5.7.3 Actions related to transmission of InterFreqRSTDMeasurementIndication message 94 +5.6 Other 94 +5.6.1 DL information transfer 94 +5.6.1.1 General 94 +5.6.1.2 Initiation 94 +5.6.1.3 Reception of the DLInformationTransfer by the UE 94 +5.6.2 UL information transfer 95 +5.6.2.1 General 95 +5.6.2.2 Initiation 95 +5.6.2.3 Actions related to transmission of ULInformationTransfer message 95 +5.6.2.4 Failure to deliver ULInformationTransfer message 95 +5.6.3 UE capability transfer 96 +5.6.3.1 General 96 +5.6.3.2 Initiation 96 +5.6.3.3 Reception of the UECapabilityEnquiry by the UE 96 +5.6.4 CSFB to 1x Parameter transfer 97 +5.6.4.1 General 97 +5.6.4.2 Initiation 98 +5.6.4.3 Actions related to transmission of CSFBParametersRequestCDMA2000 message 98 +5.6.4.4 Reception of the CSFBParametersResponseCDMA2000 message 98 +5.6.5 UE Information 98 +5.6.5.1 General 98 +5.6.5.2 Initiation 98 +5.6.5.3 Reception of the UEInformationRequest message 98 +5.6.6 Logged Measurement Configuration 99 +5.6.6.1 General 99 +5.6.6.2 Initiation 100 +5.6.6.3 Reception of the LoggedMeasurementConfiguration by the UE 100 +5.6.6.4 T330 expiry 100 +5.6.7 Release of Logged Measurement Configuration 100 +5.6.7.1 General 100 +5.6.7.2 Initiation 100 +5.6.8 Measurements logging 100 +5.6.8.1 General 100 +5.6.8.2 Initiation 101 +5.7 Generic error handling 101 +5.7.1 General 101 +5.7.2 ASN.1 violation or encoding error 101 +5.7.3 Field set to a not comprehended value 102 +5.7.4 Mandatory field missing 102 +5.7.5 Not comprehended field 103 +5.8 MBMS 103 +5.8.1 Introduction 103 +5.8.1.1 General 103 +5.8.1.2 Scheduling 104 +5.8.1.3 MCCH information validity and notification of changes 104 +5.8.2 MCCH information acquisition 105 +5.8.2.1 General 105 +5.8.2.2 Initiation 105 +5.8.2.3 MCCH information acquisition by the UE 105 +5.8.2.4 Actions upon reception of the MBSFNAreaConfiguration message 106 +5.8.2.5 Actions upon reception of the MBMSCountingRequest message 106 +5.8.3 MBMS PTM radio bearer configuration 106 +5.8.3.1 General 106 +5.8.3.2 Initiation 106 +5.8.3.3 MRB establishment 106 +5.8.3.4 MRB release 107 +5.8.4 MBMS Counting Procedure 107 +5.8.4.1 General 107 +5.8.4.2 Initiation 107 +5.8.4.3 Reception of the MBMSCountingRequest message by the UE 107 +5.9 RN procedures 108 +5.9.1 RN reconfiguration 108 +5.9.1.1 General 108 +5.9.1.2 Initiation 108 +5.9.1.3 Reception of the RNReconfiguration by the RN 108 +6 Protocol data units, formats and parameters (tabular & ASN.1) 109 +6.1 General 109 +6.2 RRC messages 110 +6.2.1 General message structure 110 +– EUTRA-RRC-Definitions 110 +– BCCH-BCH-Message 110 +– BCCH-DL-SCH-Message 110 +– MCCH-Message 111 +– PCCH-Message 111 +– DL-CCCH-Message 111 +– DL-DCCH-Message 112 +– UL-CCCH-Message 112 +– UL-DCCH-Message 112 +6.2.2 Message definitions 113 +– CounterCheck 113 +– CounterCheckResponse 114 +– CSFBParametersRequestCDMA2000 114 +– CSFBParametersResponseCDMA2000 115 +– DLInformationTransfer 116 +– HandoverFromEUTRAPreparationRequest (CDMA2000) 116 +– InterFreqRSTDMeasurementIndication 117 +– LoggedMeasurementConfiguration 119 +– MasterInformationBlock 119 +– MBMSCountingRequest 120 +– MBMSCountingResponse 121 +– MBSFNAreaConfiguration 121 +– MeasurementReport 122 +– MobilityFromEUTRACommand 123 +– Paging 126 +– ProximityIndication 127 +– RNReconfiguration 128 +– RNReconfigurationComplete 128 +– RRCConnectionReconfiguration 129 +– RRCConnectionReconfigurationComplete 131 +– RRCConnectionReestablishment 131 +– RRCConnectionReestablishmentComplete 132 +– RRCConnectionReestablishmentReject 132 +– RRCConnectionReestablishmentRequest 133 +– RRCConnectionReject 134 +– RRCConnectionRelease 134 +– RRCConnectionRequest 138 +– RRCConnectionSetup 138 +– RRCConnectionSetupComplete 139 +– SecurityModeCommand 140 +– SecurityModeComplete 141 +– SecurityModeFailure 141 +– SystemInformation 142 +– SystemInformationBlockType1 142 +– UECapabilityEnquiry 145 +– UECapabilityInformation 145 +– UEInformationRequest 146 +– UEInformationResponse 147 +– ULHandoverPreparationTransfer (CDMA2000) 149 +– ULInformationTransfer 150 +6.3 RRC information elements 151 +6.3.1 System information blocks 151 +– SystemInformationBlockType2 151 +– SystemInformationBlockType3 152 +– SystemInformationBlockType4 154 +– SystemInformationBlockType5 155 +– SystemInformationBlockType6 157 +– SystemInformationBlockType7 159 +– SystemInformationBlockType8 160 +– SystemInformationBlockType9 163 +– SystemInformationBlockType10 164 +– SystemInformationBlockType11 164 +– SystemInformationBlockType12 165 +– SystemInformationBlockType13 166 +6.3.2 Radio resource control information elements 166 +– AntennaInfo 166 +– AntennaInfoUL 167 +– CQI-ReportConfig 168 +– CrossCarrierSchedulingConfig 171 +– CSI-RS-Config 171 +– DRB-Identity 172 +– LogicalChannelConfig 172 +– MAC-MainConfig 173 +– PDCP-Config 176 +– PDSCH-Config 177 +– PHICH-Config 177 +– PhysicalConfigDedicated 178 +– P-Max 179 +– PRACH-Config 180 +– PresenceAntennaPort1 180 +– PUCCH-Config 180 +– PUSCH-Config 182 +– RACH-ConfigCommon 184 +– RACH-ConfigDedicated 185 +– RadioResourceConfigCommon 186 +– RadioResourceConfigDedicated 188 +– RLC-Config 189 +– RLF-TimersAndConstants 191 +– RN-SubframeConfig 191 +– SchedulingRequestConfig 193 +– SoundingRS-UL-Config 194 +– SPS-Config 195 +– TDD-Config 197 +– TimeAlignmentTimer 198 +– TPC-PDCCH-Config 198 +– UplinkPowerControl 199 +6.3.3 Security control information elements 200 +– NextHopChainingCount 200 +– SecurityAlgorithmConfig 201 +– ShortMAC-I 201 +6.3.4 Mobility control information elements 201 +– AdditionalSpectrumEmission 201 +– ARFCN-ValueCDMA2000 201 +– ARFCN-ValueEUTRA 202 +– ARFCN-ValueGERAN 202 +– ARFCN-ValueUTRA 202 +– BandclassCDMA2000 202 +– BandIndicatorGERAN 203 +– CarrierFreqCDMA2000 203 +– CarrierFreqGERAN 203 +– CarrierFreqsGERAN 204 +– CDMA2000-Type 204 +– CellIdentity 204 +– CellIndexList 205 +– CellReselectionPriority 205 +– CSFB-RegistrationParam1XRTT 205 +– CellGlobalIdEUTRA 206 +– CellGlobalIdUTRA 206 +– CellGlobalIdGERAN 207 +– CellGlobalIdCDMA2000 207 +– CSG-Identity 208 +– FreqBandIndicator 208 +– MobilityControlInfo 208 +– MobilityParametersCDMA2000 (1xRTT) 209 +– MobilityStateParameters 210 +– MultiBandInfoList 210 +– PhysCellId 210 +– PhysCellIdRange 211 +– PhysCellIdRangeUTRA-FDDList 211 +– PhysCellIdCDMA2000 211 +– PhysCellIdGERAN 212 +– PhysCellIdUTRA-FDD 212 +– PhysCellIdUTRA-TDD 212 +– PLMN-Identity 212 +– PreRegistrationInfoHRPD 213 +– Q-QualMin 214 +– Q-RxLevMin 214 +– Q-OffsetRange 214 +– Q-OffsetRangeInterRAT 214 +– ReselectionThreshold 214 +– ReselectionThresholdQ 215 +– SCellIndex 215 +– ServCellIndex 215 +– SpeedStateScaleFactors 215 +– SystemInfoListGERAN 216 +– SystemTimeInfoCDMA2000 216 +– TrackingAreaCode 217 +– T-Reselection 217 +6.3.5 Measurement information elements 217 +– AllowedMeasBandwidth 217 +– Hysteresis 218 +– LocationInfo 218 +– MeasConfig 218 +– MeasGapConfig 219 +– MeasId 220 +– MeasIdToAddModList 220 +– MeasObjectCDMA2000 220 +– MeasObjectEUTRA 221 +– MeasObjectGERAN 222 +– MeasObjectId 223 +– MeasObjectToAddModList 223 +– MeasObjectUTRA 223 +– MeasResults 224 +– QuantityConfig 227 +– ReportConfigEUTRA 228 +– ReportConfigId 230 +– ReportConfigInterRAT 230 +– ReportConfigToAddModList 232 +– ReportInterval 232 +– RSRP-Range 233 +– RSRQ-Range 233 +– TimeToTrigger 233 +6.3.6 Other information elements 234 +– AbsoluteTimeInfo 234 +– AreaConfiguration 234 +– C-RNTI 234 +– DedicatedInfoCDMA2000 234 +– DedicatedInfoNAS 235 +– FilterCoefficient 235 +– LoggingDuration 235 +– LoggingInterval 235 +– MeasSubframePattern 235 +– MMEC 236 +– NeighCellConfig 236 +– OtherConfig 236 +– RAND-CDMA2000 (1xRTT) 237 +– RAT-Type 237 +– RRC-TransactionIdentifier 237 +– S-TMSI 238 +– TraceReference 238 +– UE-CapabilityRAT-ContainerList 238 +– UE-EUTRA-Capability 239 +– UE-TimersAndConstants 249 +6.3.7 MBMS information elements 249 +– MBMS-NotificationConfig 249 +– MBSFN-AreaInfoList 250 +– MBSFN-SubframeConfig 251 +– PMCH-InfoList 252 +6.4 RRC multiplicity and type constraint values 253 +– Multiplicity and type constraint definitions 253 +– End of EUTRA-RRC-Definitions 254 +7 Variables and constants 254 +7.1 UE variables 254 +– EUTRA-UE-Variables 254 +– VarLogMeasConfig 255 +– VarLogMeasReport 255 +– VarMeasConfig 256 +– VarMeasReportList 256 +– VarRLF-Report 257 +– VarShortMAC-Input 257 +– Multiplicity and type constraint definitions 257 +– End of EUTRA-UE-Variables 257 +7.2 Counters 257 +7.3 Timers (Informative) 258 +7.4 Constants 259 +8 Protocol data unit abstract syntax 259 +8.1 General 259 +8.2 Structure of encoded RRC messages 259 +8.3 Basic production 260 +8.4 Extension 260 +8.5 Padding 260 +9 Specified and default radio configurations 261 +9.1 Specified configurations 261 +9.1.1 Logical channel configurations 261 +9.1.1.1 BCCH configuration 261 +9.1.1.2 CCCH configuration 261 +9.1.1.3 PCCH configuration 261 +9.1.1.4 MCCH and MTCH configuration 261 +9.1.2 SRB configurations 262 +9.1.2.1 SRB1 262 +9.1.2.2 SRB2 262 +9.2 Default radio configurations 262 +9.2.1 SRB configurations 262 +9.2.1.1 SRB1 262 +9.2.1.2 SRB2 263 +9.2.2 Default MAC main configuration 263 +9.2.3 Default semi-persistent scheduling configuration 263 +9.2.4 Default physical channel configuration 263 +9.2.5 Default values timers and constants 264 +10 Radio information related interactions between network nodes 264 +10.1 General 264 +10.2 Inter-node RRC messages 264 +10.2.1 General 264 +– EUTRA-InterNodeDefinitions 264 +10.2.2 Message definitions 265 +– HandoverCommand 265 +– HandoverPreparationInformation 265 +– UERadioAccessCapabilityInformation 267 +10.3 Inter-node RRC information element definitions 267 +– AS-Config 267 +– AS-Context 268 +– ReestablishmentInfo 269 +– RRM-Config 269 +10.4 Inter-node RRC multiplicity and type constraint values 270 +– Multiplicity and type constraints definitions 270 +– End of EUTRA-InterNodeDefinitions 270 +10.5 Mandatory information in AS-Config 270 +11 UE capability related constraints and performance requirements 271 +11.1 UE capability related constraints 271 +11.2 Processing delay requirements for RRC procedures 272 +11.3 Void 274 +Annex A (informative): Guidelines, mainly on use of ASN.1 274 +A.1 Introduction 274 +A.2 Procedural specification 274 +A.2.1 General principles 274 +A.2.2 More detailed aspects 274 +A.3 PDU specification 274 +A.3.1 General principles 274 +A.3.1.1 ASN.1 sections 274 +A.3.1.2 ASN.1 identifier naming conventions 275 +A.3.1.3 Text references using ASN.1 identifiers 276 +A.3.2 High-level message structure 277 +A.3.3 Message definition 277 +A.3.4 Information elements 279 +A.3.5 Fields with optional presence 280 +A.3.6 Fields with conditional presence 280 +A.3.7 Guidelines on use of lists with elements of SEQUENCE type 281 +A.4 Extension of the PDU specifications 281 +A.4.1 General principles to ensure compatibility 281 +A.4.2 Critical extension of messages 282 +A.4.3 Non-critical extension of messages 283 +A.4.3.1 General principles 283 +A.4.3.2 Further guidelines 283 +A.4.3.3 Typical example of evolution of IE with local extensions 284 +A.4.3.4 Typical examples of non critical extension at the end of a message 285 +A.4.3.5 Examples of non-critical extensions not placed at the default extension location 285 +– ParentIE-WithEM 286 +– ChildIE1-WithoutEM 286 +– ChildIE2-WithoutEM 287 +A.5 Guidelines regarding inclusion of transaction identifiers in RRC messages 287 +A.6 Protection of RRC messages (informative) 288 +A.7 Miscellaneous 290 +Annex B (normative): Release 8 and 9 AS feature handling 290 +B.1 Feature group indicators 290 +B.2 CSG support 298 +Annex C (normative): Release 10 AS feature handling 299 +C.1 Feature group indicators 299 +Annex D (informative): Descriptive background information 302 +D.1 Signalling of Multiple Frequency Band Indicators (Multiple FBI) 302 +D.1.1 Mapping between frequency band indicator and multiple frequency band indicator 302 +D.1.2 Mapping between inter-frequency neighbour list and multiple frequency band indicator 302 +D.1.3 Mapping between UTRA FDD frequency list and multiple frequency band indicator 303 +Annex E (informative): Change history 304 + + +Foreword +This Technical Specification has been produced by the 3rd Generation Partnership Project (3GPP). +The contents of the present document are subject to continuing work within the TSG and may change following formal TSG approval. Should the TSG modify the contents of the present document, it will be re-released by the TSG with an identifying change of release date and an increase in version number as follows: +Version x.y.z +where: +x the first digit: +1 presented to TSG for information; +2 presented to TSG for approval; +3 or greater indicates TSG approved document under change control. +y the second digit is incremented for all changes of substance, i.e. technical enhancements, corrections, updates, etc. +z the third digit is incremented when editorial only changes have been incorporated in the document. + +1 Scope +The present document specifies the Radio Resource Control protocol for the radio interface between UE and E-UTRAN as well as for the radio interface between RN and E-UTRAN. +The scope of the present document also includes: +- the radio related information transported in a transparent container between source eNB and target eNB upon inter eNB handover; +- the radio related information transported in a transparent container between a source or target eNB and another system upon inter RAT handover. +2 References +The following documents contain provisions which, through reference in this text, constitute provisions of the present document. +* References are either specific (identified by date of publication, edition number, version number, etc.) or nonspecific. +* For a specific reference, subsequent revisions do not apply. +* For a non-specific reference, the latest version applies. In the case of a reference to a 3GPP document (including a GSM document), a non-specific reference implicitly refers to the latest version of that document in the same Release as the present document. +[1] 3GPP TR 21.905: "Vocabulary for 3GPP Specifications". +[2] Void. +[3] 3GPP TS 36.302: "Evolved Universal Terrestrial Radio Access (E-UTRA); Services provided by the physical layer ". +[4] 3GPP TS 36.304: "Evolved Universal Terrestrial Radio Access (E-UTRA); UE Procedures in Idle Mode". +[5] 3GPP TS 36.306 "Evolved Universal Terrestrial Radio Access (E-UTRA); UE Radio Access Capabilities". +[6] 3GPP TS 36.321: "Evolved Universal Terrestrial Radio Access (E-UTRA); Medium Access Control (MAC) protocol specification". +[7] 3GPP TS 36.322:"Evolved Universal Terrestrial Radio Access (E-UTRA); Radio Link Control (RLC) protocol specification". +[8] 3GPP TS 36.323: "Evolved Universal Terrestrial Radio Access (E-UTRA); Packet Data Convergence Protocol (PDCP) Specification". +[9] 3GPP TS 36.300: "Evolved Universal Terrestrial Radio Access (E-UTRA) and Evolved Universal Terrestrial Radio Access (E-UTRAN); Overall description; Stage 2". +[10] 3GPP TS 22.011: "Service accessibility". +[11] 3GPP TS 23.122: "Non-Access-Stratum (NAS) functions related to Mobile Station (MS) in idle mode". +[12] 3GPP2 C.S0002-A v6.0: "Physical Layer Standard for cdma2000 Spread Spectrum Systems – Release A". +[13] ITU-T Recommendation X.680 (07/2002) "Information Technology - Abstract Syntax Notation One (ASN.1): Specification of basic notation" (Same as the ISO/IEC International Standard 8824-1). +[14] ITU-T Recommendation X.681 (07/2002) "Information Technology - Abstract Syntax Notation One (ASN.1): Information object specification" (Same as the ISO/IEC International Standard 8824-2). +[15] ITU-T Recommendation X.691 (07/2002) "Information technology - ASN.1 encoding rules: Specification of Packed Encoding Rules (PER)" (Same as the ISO/IEC International Standard 8825-2). +[16] 3GPP TS 36.133: "Evolved Universal Terrestrial Radio Access (E-UTRA); Requirements for support of radio resource management". +[17] 3GPP TS 25.101: "Universal Terrestrial Radio Access (UTRA); User Equipment (UE) radio transmission and reception (FDD)". +[18] 3GPP TS 25.102: "Universal Terrestrial Radio Access (UTRA); User Equipment (UE) radio transmission and reception (TDD)". +[19] 3GPP TS 25.331:"Universal Terrestrial Radio Access (UTRA); Radio Resource Control (RRC); Protocol specification". +[20] 3GPP TS 45.005: "Radio transmission and reception". +[21] 3GPP TS 36.211: "Evolved Universal Terrestrial Radio Access (E-UTRA); Physical Channels and Modulation". +[22] 3GPP TS 36.212: "Evolved Universal Terrestrial Radio Access (E-UTRA); Multiplexing and channel coding". +[23] 3GPP TS 36.213: "Evolved Universal Terrestrial Radio Access (E-UTRA); Physical layer procedures". +[24] 3GPP2 C.S0057-E v1.0: "Band Class Specification for cdma2000 Spread Spectrum Systems". +[25] 3GPP2 C.S0005-A v6.0: "Upper Layer (Layer 3) Signaling Standard for cdma2000 Spread Spectrum Systems – Release A, Addendum 2". +[26] 3GPP2 C.S0024-A v3.0: "cdma2000 High Rate Packet Data Air Interface Specification". +[27] 3GPP TS 23.003: "Numbering, addressing and identification". +[28] 3GPP TS 45.008: "Radio subsystem link control". +[29] 3GPP TS 25.133: "Requirements for Support of Radio Resource Management (FDD)". +[30] 3GPP TS 25.123: "Requirements for Support of Radio Resource Management (TDD)". +[31] 3GPP TS 36.401: "Evolved Universal Terrestrial Radio Access (E-UTRA); Architecture description". +[32] 3GPP TS 33.401: "3GPP System Architecture Evolution (SAE); Security architecture". +[33] 3GPP2 A.S0008-C v4.0: "Interoperability Specification (IOS) for High Rate Packet Data (HRPD) Radio Access Network Interfaces with Session Control in the Access Network" +[34] 3GPP2 C.S0004-A v6.0: "Signaling Link Access Control (LAC) Standard for cdma2000 Spread Spectrum Systems – Addendum 2" +[35] 3GPP TS 24.301: "Non-Access-Stratum (NAS) protocol for Evolved Packet System (EPS); Stage 3". +[36] 3GPP TS 44.060: "General Packet Radio Service (GPRS); Mobile Station (MS) - Base Station System (BSS) interface; Radio Link Control/Medium Access Control (RLC/MAC) protocol". +[37] 3GPP TS 23.041: "Technical realization of Cell Broadcast Service (CBS)". +[38] 3GPP TS 23.038: "Alphabets and Language". +[39] 3GPP TS 36.413: "Evolved Universal Terrestrial Radio Access (E-UTRAN); S1 Application Protocol (S1 AP)". +[40] 3GPP TS 25.304: "Universal Terrestrial Radio Access (UTRAN); User Equipment (UE) procedures in idle mode and procedures for cell reselection in connected mode". +[41] 3GPP TS 23.401: "General Packet Radio Service (GPRS) enhancements for Evolved Universal Terrestrial Radio Access Network (E-UTRAN) access". +[42] 3GPP TS 36.101: "Evolved Universal Terrestrial Radio Access (E-UTRA); User Equipment (UE) radio transmission and reception". +[43] 3GPP TS 44.005: "Data Link (DL) Layer General Aspects". +[44] 3GPP2 C.S0087-A v1.0: "E-UTRAN - cdma2000 HRPD Connectivity and Interworking: Air Interface Specification" +[45] 3GPP TS 44.018: "Mobile radio interface layer 3 specification; Radio Resource Control (RRC) protocol". +[46] 3GPP TS 25.223: "Spreading and modulation (TDD)". +[47] 3GPP TS 36.104: "Evolved Universal Terrestrial Radio Access (E-UTRA); Base Station (BS) radio transmission and reception". +[48] 3GPP TS 36.214: "Evolved Universal Terrestrial Radio Access (E-UTRA); Physical layer - Measurements". +[49] 3GPP TS 24.008: "Mobile radio interface layer 3 specification; Core network protocols; Stage 3". +[50] 3GPP TS 45.010: "Radio subsystem synchronization". +[51] 3GPP TS 23.272: "Circuit Switched Fallback in Evolved Packet System; Stage 2". +[52] 3GPP TS 29.061: "Interworking between the Public Land Mobile Network (PLMN) supporting packet based services and Packet Data Networks (PDN)". +[53] 3GPP2 C.S0097-0 v2.0: "E-UTRAN - cdma2000 1x Connectivity and Interworking Air Interface Specification". +[54] 3GPP TS 36.355: "LTE Positioning Protocol (LPP)". +[55] 3GPP TS 36.216: "Evolved Universal Terrestrial Radio Access (E-UTRA); Physical layer for relaying operation". +[56] 3GPP TS 23.246: "Multimedia Broadcast/Multicast Service (MBMS); Architecture and functional description". +[57] 3GPP TS 26.346: "Multimedia Broadcast/Multicast Service (MBMS); Protocols and codecs". +[58] 3GPP TS 32.422: "Telecommunication management; Subsriber and equipment trace; Trace control and confiuration management". +[59] 3GPP TS 22.368: "Service Requirements for Machine Type Communications; Stage 1". +[60] 3GPP TS 37.320: "Universal Terrestrial Radio Access (UTRA) and Evolved Universal Terrestrial Radio Access (E-UTRA); Radio measurement collection for Minimization of Drive Tests (MDT); Overall description; Stage 2". +[61] 3GPP TS 23.216: "Single Radio Voice Call Continuity (SRVCC); Stage 2". +[62] 3GPP TS 22.146: "Multimedia Broadcast/Multicast Service (MBMS); Stage 1". +[63] 3GPP TS 25.307: "Requirement on User Equipments (UEs) supporting a release-independent frequency band". +3 Definitions, symbols and abbreviations +3.1 Definitions +For the purposes of the present document, the terms and definitions given in TR 21.905 [1] and the following apply. A term defined in the present document takes precedence over the definition of the same term, if any, in TR 21.905 [1]. +Commercial Mobile Alert System: Public Warning System that delivers Warning Notifications provided by Warning Notification Providers to CMAS capable UEs. +CSG member cell: for a UE in RRC_CONNECTED, a cell broadcasting the identity of the Registered PLMN or Equivalent PLMN and for which CSG whitelist of the UE includes an entry comprising of cell’s CSG ID and the respective PLMN identity. +Field: The individual contents of an information element are referred as fields. +Floor: Mathematical function used to 'round down' i.e. to the nearest integer having a lower value. +Information element: A structural element containing a single or multiple fields is referred as information element. +Korean Public Alert System (KPAS): Public Warning System that delivers Warning Notifications provided by Warning Notification Providers using the same AS mechanisms as defined for CMAS. +MBMS service: MBMS bearer service as defined in TS 23.246 [56] (i.e. provided via an MRB). +Primary Cell: the cell, operating on the primary frequency, in which the UE either performs the initial connection establishment procedure or initiates the connection re-establishment procedure, or the cell indicated as the primary cell in the handover procedure. +Secondary Cell: a cell, operating on a secondary frequency, which may be configured once an RRC connection is established and which may be used to provide additional radio resources. +Serving Cell: For a UE in RRC_CONNECTED not configured with CA there is only one serving cell comprising of the primary cell. For a UE in RRC_CONNECTED configured with CA the term 'serving cells' is used to denote the set of one or more cells comprising of the primary cell and all secondary cells. +3.2 Abbreviations +For the purposes of the present document, the abbreviations given in TR 21.905 [1] and the following apply. An abbreviation defined in the present document takes precedence over the definition of the same abbreviation, if any, in TR 21.905 [1]. +1xRTT CDMA2000 1x Radio Transmission Technology +AM Acknowledged Mode +ASN.1 Abstract Syntax Notation One +ARQ Automatic Repeat Request +AS Access Stratum +BCCH Broadcast Control Channel +BCD Binary Coded Decimal +BCH Broadcast Channel +CA Carrier Aggregation +CCCH Common Control Channel +CCO Cell Change Order +CMAS Commercial Mobile Alert Service +CP Control Plane +C-RNTI Cell RNTI +CSFB CS fallback +CSG Closed Subscriber Group +DCCH Dedicated Control Channel +DRB (user) Data Radio Bearer +DRX Discontinuous Reception +DTCH Dedicated Traffic Channel +DL Downlink +DL-SCH Downlink Shared Channel +ETWS Earthquake and Tsunami Warning System +E-UTRA Evolved Universal Terrestrial Radio Access +E-UTRAN Evolved Universal Terrestrial Radio Access Network +ENB Evolved Node B +EPC Enhanced Packet Core +EHPLMN Equivalent Home Public Land Mobile Network +EPS Enhanced Packet System +FDD Frequency Division Duplex +FFS For Further Study +GERAN GSM/EDGE Radio Access Network +GSM Global System for Mobile Communications +HARQ Hybrid Automatic Repeat Request +HPLMN Home Public Land Mobile Network +HRPD CDMA2000 High Rate Packet Data +IE Information element +IMEI International Mobile Equipment Identity +IMSI International Mobile Subscriber Identity +kB Kilobyte (1000 bytes) +L1 Layer 1 +L2 Layer 2 +L3 Layer 3 +MAC Medium Access Control +MBMS Multimedia Broadcast Multicast Service +MBSFN Multimedia Broadcast multicast service Single Frequency Network +MDT Minimization of Drive Tests +MIB Master Information Block +MO Mobile Originating +MT Mobile Terminating +MRB MBMS Point to Multipoint Radio Bearer +MSI MCH Scheduling Information +N/A Not Applicable +NACC Network Assisted Cell Change +NAS Non Access Stratum +PCCH Paging Control Channel +PCell Primary Cell +PDU Protocol Data Unit +PDCP Packet Data Convergence Protocol +PLMN Public Land Mobile Network +QoS Quality of Service +RACH Random Access CHannel +RAT Radio Access Technology +RB Radio Bearer +RLC Radio Link Control +RN Relay Node +RNTI Radio Network Temporary Identifier +RPLMN Registered Public Land Mobile Network +RRC Radio Resource Control +RSCP Received Signal Code Power +RSRP Reference Signal Received Power +RSSI Received Signal Strength Indicator +SAE System Architecture Evolution +SAP Service Access Point +SCell Secondary Cell +SFN System Frame Number +SI System Information +SIB System Information Block +SI-RNTI System Information RNTI +SPS Semi-Persistent Scheduling +SRB Signalling Radio Bearer +SSAC Service Specific Access Control +S-TMSI SAE Temporary Mobile Station Identifier +TA Tracking Area +TDD Time Division Duplex +TM Transparent Mode +TPC-RNTI Transmit Power Control RNTI +UE User Equipment +UICC Universal Integrated Circuit Card +UL Uplink +UM Unacknowledged Mode +UL-SCH Uplink Shared Channel +UP User Plane +UTRAN Universal Terrestrial Radio Access Network +VoLTE Voice over Long Term Evolution +In the ASN.1, lower case may be used for some (parts) of the above abbreviations e.g. c-RNTI +4 General +4.1 Introduction +In this specification, (parts of) procedures and messages specified for the UE equally apply to the RN for functionality necessary for the RN. There are also (parts of) procedures and messages which are only applicable to the RN in its communication with the E-UTRAN, in which case the specification denotes the RN instead of the UE. Such RNspecific aspects are not applicable to the UE. +This specification is organised as follows: +- sub-clause 4.2 describes the RRC protocol model; +- sub-clause 4.3 specifies the services provided to upper layers as well as the services expected from lower layers; +- sub-clause 4.4 lists the RRC functions; +- clause 5 specifies RRC procedures, including UE state transitions; +- clause 6 specifies the RRC message in a mixed format (i.e. tabular & ASN.1 together); +- clause 7 specifies the variables (including protocol timers and constants) and counters to be used by the UE; +- clause 8 specifies the encoding of the RRC messages; +- clause 9 specifies the specified and default radio configurations; +- clause 10 specifies the RRC messages transferred across network nodes; +- clause 11 specifies the UE capability related constraints and performance requirements. +4.2 Architecture +4.2.1 UE states and state transitions including inter RAT +A UE is in RRC_CONNECTED when an RRC connection has been established. If this is not the case, i.e. no RRC connection is established, the UE is in RRC_IDLE state. The RRC states can further be characterised as follows: +- RRC_IDLE: +- A UE specific DRX may be configured by upper layers. +- UE controlled mobility; +- The UE: +- Monitors a Paging channel to detect incoming calls, system information change, for ETWS capable UEs, ETWS notification, and for CMAS capable UEs, CMAS notification; +- Performs neighbouring cell measurements and cell (re-)selection; +- Acquires system information. +- Performs logging of available measurements together with location and time for logged measurement configured UEs. +- RRC_CONNECTED: +- Transfer of unicast data to/from UE. +- At lower layers, the UE may be configured with a UE specific DRX. +- For UEs supporting CA, use of one or more SCells, aggregated with the PCell, for increased bandwidth; +- Network controlled mobility, i.e. handover and cell change order with optional network assistance (NACC) to GERAN; +- The UE: +- Monitors a Paging channel and/ or System Information Block Type 1 contents to detect system information change, for ETWS capable UEs, ETWS notification, and for CMAS capable UEs, CMAS notification; +- Monitors control channels associated with the shared data channel to determine if data is scheduled for it; +- Provides channel quality and feedback information; +- Performs neighbouring cell measurements and measurement reporting; +- Acquires system information. +The following figure not only provides an overview of the RRC states in E-UTRA, but also illustrates the mobility support between E-UTRAN, UTRAN and GERAN. + +Figure 4.2.1-1: E-UTRA states and inter RAT mobility procedures, 3GPP +The following figure illustrates the mobility support between E-UTRAN, CDMA2000 1xRTT and CDMA2000 HRPD. The details of the CDMA2000 state models are out of the scope of this specification. + +Figure 4.2.1-2: Mobility procedures between E-UTRA and CDMA2000 +The inter-RAT handover procedure(s) supports the case of signalling, conversational services, non-conversational services and combinations of these. +In addition to the state transitions shown in Figure 4.2.1-1 and Figure 4.2.1-2, there is support for connection release with redirection information from E-UTRA RRC_CONNECTED to GERAN, UTRAN and CDMA2000 (HRPD Idle/ 1xRTT Dormant mode). +4.2.2 Signalling radio bearers +"Signalling Radio Bearers" (SRBs) are defined as Radio Bearers (RB) that are used only for the transmission of RRC and NAS messages. More specifically, the following three SRBs are defined: +- SRB0 is for RRC messages using the CCCH logical channel; +- SRB1 is for RRC messages (which may include a piggybacked NAS message) as well as for NAS messages prior to the establishment of SRB2, all using DCCH logical channel; +- SRB2 is for RRC messages which include logged measurement information as well as for NAS messages, all using DCCH logical channel. SRB2 has a lower-priority than SRB1 and is always configured by E-UTRAN after security activation. +In downlink piggybacking of NAS messages is used only for one dependant (i.e. with joint success/ failure) procedure: bearer establishment/ modification/ release. In uplink NAS message piggybacking is used only for transferring the initial NAS message during connection setup. +NOTE: The NAS messages transferred via SRB2 are also contained in RRC messages, which however do not include any RRC protocol control information. +Once security is activated, all RRC messages on SRB1 and SRB2, including those containing NAS or non-3GPP messages, are integrity protected and ciphered by PDCP. NAS independently applies integrity protection and ciphering to the NAS messages. +4.3 Services +4.3.1 Services provided to upper layers +The RRC protocol offers the following services to upper layers: +- Broadcast of common control information; +- Notification of UEs in RRC_IDLE, e.g. about a terminating call, for ETWS, for CMAS; +- Transfer of dedicated control information, i.e. information for one specific UE. +4.3.2 Services expected from lower layers +In brief, the following are the main services that RRC expects from lower layers: +- PDCP: integrity protection and ciphering; +- RLC: reliable and in-sequence transfer of information, without introducing duplicates and with support for segmentation and concatenation. +Further details about the services provided by Packet Data Convergence Protocol layer (e.g. integrity and ciphering) are provided in TS 36.323 [8]. The services provided by Radio Link Control layer (e.g. the RLC modes) are specified in TS 36.322 [7]. Further details about the services provided by Medium Access Control layer (e.g. the logical channels) are provided in TS 36.321 [6]. The services provided by physical layer (e.g. the transport channels) are specified in TS 36.302 [3]. +4.4 Functions +The RRC protocol includes the following main functions: +- Broadcast of system information: +- Including NAS common information; +- Information applicable for UEs in RRC_IDLE, e.g. cell (re-)selection parameters, neighbouring cell information and information (also) applicable for UEs in RRC_CONNECTED, e.g. common channel configuration information. +- Including ETWS notification, CMAS notification; +- RRC connection control: +- Paging; +- Establishment/ modification/ release of RRC connection, including e.g. assignment/ modification of UE identity (C-RNTI), establishment/ modification/ release of SRB1 and SRB2, access class barring; +- Initial security activation, i.e. initial configuration of AS integrity protection (SRBs) and AS ciphering (SRBs, DRBs); +- For RNs, configuration of AS integrity protection for DRBs; +- RRC connection mobility including e.g. intra-frequency and inter-frequency handover, associated security handling, i.e. key/ algorithm change, specification of RRC context information transferred between network nodes; +- Establishment/ modification/ release of RBs carrying user data (DRBs); +- Radio configuration control including e.g. assignment/ modification of ARQ configuration, HARQ configuration, DRX configuration; +- For RNs, RN-specific radio configuration control for the radio interface between RN and E-UTRAN; +- In case of CA, cell management including e.g. change of PCell and addition/ modification/ release of SCell(s); +- QoS control including assignment/ modification of semi-persistent scheduling (SPS) configuration information for DL and UL, assignment/ modification of parameters for UL rate control in the UE, i.e. allocation of a priority and a prioritised bit rate (PBR) for each RB; +- Recovery from radio link failure; +- Inter-RAT mobility including e.g. security activation, transfer of RRC context information; +- Measurement configuration and reporting: +- Establishment/ modification/ release of measurements (e.g. intra-frequency, inter-frequency and inter- RAT measurements); +- Setup and release of measurement gaps; +- Measurement reporting; +- Other functions including e.g. transfer of dedicated NAS information and non-3GPP dedicated information, transfer of UE radio access capability information, support for E-UTRAN sharing (multiple PLMN identities); +- Generic protocol error handling; +- Support of self-configuration and self-optimisation; +- Support of measurement logging and reporting for network performance optimisation [60]; +NOTE: Random access is specified entirely in the MAC including initial transmission power estimation. +5 Procedures +5.1 General +5.1.1 Introduction +The procedural requirements are structured according to the main functional areas: system information (5.2), connection control (5.3), inter-RAT mobility (5.4) and measurements (5.5). In addition sub-clause 5.6 covers other aspects e.g. NAS dedicated information transfer, UE capability transfer, sub-clause 5.7 specifies the generic error handling, sub-clause 5.8 covers MBMS and sub-clause 5.9 covers RN-specific procedures. +5.1.2 General requirements +The UE shall: +1> process the received messages in order of reception by RRC, i.e. the processing of a message shall be completed before starting the processing of a subsequent message; +NOTE 1: E-UTRAN may initiate a subsequent procedure prior to receiving the UE's response of a previously initiated procedure. +1> within a sub-clause execute the steps according to the order specified in the procedural description; +1> consider the term 'radio bearer' (RB) to cover SRBs and DRBs but not MRBs unless explicitly stated otherwise; +1> set the rrc-TransactionIdentifier in the response message, if included, to the same value as included in the message received from E-UTRAN that triggered the response message; +1> upon receiving a choice value set to setup: +2> apply the corresponding received configuration and start using the associated resources, unless explicitly specified otherwise; +1> upon receiving a choice value set to release: +2> clear the corresponding configuration and stop using the associated resources; +1> upon handover to E-UTRA; or +1> upon receiving an RRCConnectionReconfiguration message including the fullConfig: +2> apply the Conditions in the ASN.1 for inclusion of the fields for the DRB/PDCP/RLC setup during the reconfiguration of the DRBs included in the drb-ToAddModList; +NOTE 2: At each point in time, the UE keeps a single value for each field except for during handover when the UE temporarily stores the previous configuration so it can revert back upon handover failure. In other words: when the UE reconfigures a field, the existing value is released except for during handover. +NOTE 3: Although not explicitly stated, the UE initially considers all functionality to be deactivated/ released until it is explicitly stated that the functionality is setup/ activated. Correspondingly, the UE initially considers lists to be empty e.g. the list of radio bearers, the list of measurements. +5.2 System information +5.2.1 Introduction +5.2.1.1 General +System information is divided into the MasterInformationBlock (MIB) and a number of SystemInformationBlocks (SIBs). The MIB includes a limited number of most essential and most frequently transmitted parameters that are needed to acquire other information from the cell, and is transmitted on BCH. SIBs other than SystemInformationBlockType1 are carried in SystemInformation (SI) messages and mapping of SIBs to SI messages is flexibly configurable by schedulingInfoList included in SystemInformationBlockType1, with restrictions that: each SIB is contained only in a single SI message, only SIBs having the same scheduling requirement (periodicity) can be mapped to the same SI message, and SystemInformationBlockType2 is always mapped to the SI message that corresponds to the first entry in the list of SI messages in schedulingInfoList. There may be multiple SI messages transmitted with the same periodicity. SystemInformationBlockType1 and all SI messages are transmitted on DL-SCH. +NOTE 1: The physical layer imposes a limit to the maximum size a SIB can take. When DCI format 1C is used the maximum allowed by the physical layer is 1736 bits (217 bytes) while for format 1A the limit is 2216 bits (277 bytes), see TS 36.212 [22] and TS 36.213 [23]. +The UE applies the system information acquisition and change monitoring procedures for the PCell only. For an SCell, E-UTRAN provides, via dedicated signalling, all system information relevant for operation in RRC_CONNECTED when adding the SCell. Upon change of the relevant system information of a configured SCell, E-UTRAN releases and subsequently adds the concerned SCell, which may be done with a single RRCConnectionReconfiguration message. +NOTE 2: E-UTRAN may configure via dedicated signalling different parameter values than the ones broadcast in the concerned SCell. +An RN configured with an RN subframe configuration does not need to apply the system information acquisition and change monitoring procedures. Upon change of any system information relevant to an RN, E-UTRAN provides the system information blocks containing the relevant system information to an RN configured with an RN subframe configuration via dedicated signalling using the RNReconfiguration message. For RNs configured with an RN subframe configuration, the system information contained in this dedicated signalling replaces any corresponding stored system information and takes precedence over any corresponding system information acquired through the system information acquisition procedure. The dedicated system information remains valid until overridden. +NOTE 3: E-UTRAN may configure an RN, via dedicated signalling, with different parameter values than the ones broadcast in the concerned cell. +5.2.1.2 Scheduling +The MIB uses a fixed schedule with a periodicity of 40 ms and repetitions made within 40 ms. The first transmission of the MIB is scheduled in subframe #0 of radio frames for which the SFN mod 4 = 0, and repetitions are scheduled in subframe #0 of all other radio frames. +The SystemInformationBlockType1 uses a fixed schedule with a periodicity of 80 ms and repetitions made within 80 ms. The first transmission of SystemInformationBlockType1 is scheduled in subframe #5 of radio frames for which the SFN mod 8 = 0, and repetitions are scheduled in subframe #5 of all other radio frames for which SFN mod 2 = 0. +The SI messages are transmitted within periodically occurring time domain windows (referred to as SI-windows) using dynamic scheduling. Each SI message is associated with a SI-window and the SI-windows of different SI messages do not overlap. That is, within one SI-window only the corresponding SI is transmitted. The length of the SI-window is common for all SI messages, and is configurable. Within the SI-window, the corresponding SI message can be transmitted a number of times in any subframe other than MBSFN subframes, uplink subframes in TDD, and subframe #5 of radio frames for which SFN mod 2 = 0. The UE acquires the detailed time-domain scheduling (and other information, e.g. frequency-domain scheduling, used transport format) from decoding SI-RNTI on PDCCH (see TS 36.321 [6]). +A single SI-RNTI is used to address SystemInformationBlockType1 as well as all SI messages. +SystemInformationBlockType1 configures the SI-window length and the transmission periodicity for the SI messages. +5.2.1.3 System information validity and notification of changes +Change of system information (other than for ETWS and CMAS) only occurs at specific radio frames, i.e. the concept of a modification period is used. System information may be transmitted a number of times with the same content within a modification period, as defined by its scheduling. The modification period boundaries are defined by SFN values for which SFN mod m= 0, where m is the number of radio frames comprising the modification period. The modification period is configured by system information. +When the network changes (some of the) system information, it first notifies the UEs about this change, i.e. this may be done throughout a modification period. In the next modification period, the network transmits the updated system information. These general principles are illustrated in figure 5.2.1.3-1, in which different colours indicate different system information. Upon receiving a change notification, the UE acquires the new system information immediately from the start of the next modification period. The UE applies the previously acquired system information until the UE acquires the new system information. + +Figure 5.2.1.3-1: Change of system Information +The Paging message is used to inform UEs in RRC_IDLE and UEs in RRC_CONNECTED about a system information change. If the UE receives a Paging message including the systemInfoModification, it knows that the system information will change at the next modification period boundary. Although the UE may be informed about changes in system information, no further details are provided e.g. regarding which system information will change. +SystemInformationBlockType1 includes a value tag, systemInfoValueTag, that indicates if a change has occurred in the SI messages. UEs may use systemInfoValueTag, e.g. upon return from out of coverage, to verify if the previously stored SI messages are still valid. Additionally, the UE considers stored system information to be invalid after 3 hours from the moment it was successfully confirmed as valid, unless specified otherwise. +E-UTRAN may not update systemInfoValueTag upon change of some system information e.g. ETWS information, CMAS information, regularly changing parameters like CDMA2000 system time (see 6.3). Similarly, E-UTRAN may not include the systemInfoModification within the Paging message upon change of some system information. +The UE verifies that stored system information remains valid by either checking systemInfoValueTag in SystemInformationBlockType1 after the modification period boundary, or attempting to find the systemInfoModification indication at least modificationPeriodCoeff times during the modification period in case no paging is received, in every modification period. If no paging message is received by the UE during a modification period, the UE may assume that no change of system information will occur at the next modification period boundary. If UE in RRC_CONNECTED, during a modification period, receives one paging message, it may deduce from the presence/ absence of systemInfoModification whether a change of system information other than ETWS and CMAS information will occur in the next modification period or not. +ETWS and/or CMAS capable UEs in RRC_CONNECTED shall attempt to read paging at least once every defaultPagingCycle to check whether ETWS and/or CMAS notification is present or not. +5.2.1.4 Indication of ETWS notification +ETWS primary notification and/ or ETWS secondary notification can occur at any point in time. The Paging message is used to inform ETWS capable UEs in RRC_IDLE and UEs in RRC_CONNECTED about presence of an ETWS primary notification and/ or ETWS secondary notification. If the UE receives a Paging message including the etws-Indication, it shall start receiving the ETWS primary notification and/ or ETWS secondary notification according to schedulingInfoList contained in SystemInformationBlockType1. If the UE receives Paging message including the etws-Indication while it is acquiring ETWS notification(s), the UE shall continue acquiring ETWS notification(s) based on the previously acquired schedulingInfoList until it re-acquires schedulingInfoList in SystemInformationBlockType1. +NOTE: The UE is not required to periodically check schedulingInfoList contained in SystemInformationBlockType1, but Paging message including the etws-Indication triggers the UE to re-acquire schedulingInfoList contained in SystemInformationBlockType1 for scheduling changes for SystemInformationBlockType10 and SystemInformationBlockType11. The UE may or may not receive a Paging message including the etws-Indication and/or systemInfoModification when ETWS is no longer scheduled. +ETWS primary notification is contained in SystemInformationBlockType10 and ETWS secondary notification is contained in SystemInformationBlockType11. Segmentation can be applied for the delivery of a secondary notification. The segmentation is fixed for transmission of a given secondary notification within a cell (i.e. the same segment size for a given segment with the same messageIdentifier, serialNumber and warningMessageSegmentNumber). An ETWS secondary notification corresponds to a single CB data IE as defined according to TS 23.041 [37]. +5.2.1.5 Indication of CMAS notification +CMAS notification can occur at any point in time. The Paging message is used to inform CMAS capable UEs in RRC_IDLE and UEs in RRC_CONNECTED about presence of one or more CMAS notifications. If the UE receives a Paging message including the cmas-Indication, it shall start receiving the CMAS notifications according to schedulingInfoList contained in SystemInformationBlockType1. If the UE receives Paging message including the cmas-Indication while it is acquiring CMAS notification(s), the UE shall continue acquiring CMAS notification(s) based on the previously acquired schedulingInfoList until it re-acquires schedulingInfoList in SystemInformationBlockType1. +NOTE: The UE is not required to periodically check schedulingInfoList contained in SystemInformationBlockType1, but Paging message including the cmas-Indication triggers the UE to re-acquire schedulingInfoList contained in SystemInformationBlockType1 for scheduling changes for SystemInformationBlockType12. The UE may or may not receive a Paging message including the cmas-Indication and/or systemInfoModification when SystemInformationBlockType12 is no longer scheduled. +CMAS notification is contained in SystemInformationBlockType12. Segmentation can be applied for the delivery of a CMAS notification. The segmentation is fixed for transmission of a given CMAS notification within a cell (i.e. the same segment size for a given segment with the same messageIdentifier, serialNumber and warningMessageSegmentNumber). E-UTRAN does not interleave transmissions of CMAS notifications, i.e. all segments of a given CMAS notification transmission are transmitted prior to those of another CMAS notification. A CMAS notification corresponds to a single CB data IE as defined according to TS 23.041 [37]. + +5.2.2 System information acquisition +5.2.2.1 General + +Figure 5.2.2.1-1: System information acquisition, normal +The UE applies the system information acquisition procedure to acquire the AS- and NAS- system information that is broadcasted by the E-UTRAN. The procedure applies to UEs in RRC_IDLE and UEs in RRC_CONNECTED. +5.2.2.2 Initiation +The UE shall apply the system information acquisition procedure upon selecting (e.g. upon power on) and upon re-selecting a cell, after handover completion, after entering E-UTRA from another RAT, upon return from out of coverage, upon receiving a notification that the system information has changed, upon receiving an indication about the presence of an ETWS notification, upon receiving an indication about the presence of a CMAS notification, upon receiving a request from CDMA2000 upper layers and upon exceeding the maximum validity duration. Unless explicitly stated otherwise in the procedural specification, the system information acquisition procedure overwrites any stored system information, i.e. delta configuration is not applicable for system information and the UE discontinues using a field if it is absent in system information unless explicitly specified otherwise. +5.2.2.3 System information required by the UE +The UE shall: +1> ensure having a valid version, as defined below, of (at least) the following system information, also referred to as the 'required' system information: +2> if in RRC_IDLE: +3> the MasterInformationBlock and SystemInformationBlockType1 as well as SystemInformationBlockType2 through SystemInformationBlockType8, depending on support of the concerned RATs; +2> if in RRC_CONNECTED: +3> the MasterInformationBlock, SystemInformationBlockType1 and SystemInformationBlockType2 as well as SystemInformationBlockType8, depending on support of CDMA2000; +1> delete any stored system information after 3 hours from the moment it was confirmed to be valid as defined in 5.2.1.3, unless specified otherwise; +1> consider any stored system information except SystemInformationBlockType10, SystemInformationBlockType11 and systemInformationBlockType12 to be invalid if systemInfoValueTag included in the SystemInformationBlockType1 is different from the one of the stored system information; +5.2.2.4 System information acquisition by the UE +The UE shall: +1> apply the specified BCCH configuration defined in 9.1.1.1; +1> if the procedure is triggered by a system information change notification: +2> start acquiring the required system information, as defined in 5.2.2.3, from the beginning of the modification period following the one in which the change notification was received; +NOTE 1: The UE continues using the previously received system information until the new system information has been acquired. +1> if the UE is in RRC_IDLE and enters a cell for which the UE does not have stored a valid version of the system information required in RRC_IDLE, as defined in 5.2.2.3: +2> acquire, using the system information acquisition procedure as defined in 5.2.3, the system information required in RRC_IDLE, as defined in 5.2.2.3; +1> following successful handover completion to a PCell for which the UE does not have stored a valid version of the system information required in RRC_CONNECTED, as defined in 5.2.2.3: +2> acquire, using the system information acquisition procedure as defined in 5.2.3, the system information required in RRC_CONNECTED, as defined in 5.2.2.3; +2> upon acquiring the concerned system information: +3> discard the corresponding radio resource configuration information included in the radioResourceConfigCommon previously received in a dedicated message, if any; +1> following a request from CDMA2000 upper layers: +2> acquire SystemInformationBlockType8, as defined in 5.2.3; +1> neither initiate the RRC connection establishment procedure nor initiate transmission of the RRCConnectionReestablishmentRequest message until the UE has a valid version of the MasterInformationBlock and SystemInformationBlockType1 messages as well as SystemInformationBlockType2 ; +1> if the UE is ETWS capable: +2> upon entering a cell during RRC_IDLE, following successful handover or upon connection re-establishment: +3> discard any previously buffered warningMessageSegment; +3> clear, if any, the current values of messageIdentifier and serialNumber for SystemInformationBlockType11; +2> when the UE acquires SystemInformationBlockType1 following ETWS indication, upon entering a cell during RRC_IDLE, following successful handover or upon connection re-establishment: +3> if schedulingInfoList indicates that SystemInformationBlockType10 is present: +4> start acquiring SystemInformationBlockType10 immediately; +3> if schedulingInfoList indicates that SystemInformationBlockType11 is present: +4> start acquiring SystemInformationBlockType11 immediately; +NOTE 2: UEs shall start acquiring SystemInformationBlockType10 and SystemInformationBlockType11 as described above even when systemInfoValueTag in SystemInformationBlockType1 has not changed. +1> if the UE is CMAS capable: +2> upon entering a cell during RRC_IDLE, following successful handover or upon connection re-establishment: +3> discard any previously buffered warningMessageSegment; +3> clear, if any, stored values of messageIdentifier and serialNumber for SystemInformationBlockType12 associated with the discarded warningMessageSegment ; +2> when the UE acquires SystemInformationBlockType1 following CMAS indication, upon entering a cell during RRC_IDLE, following successful handover and upon connection re-establishment: +3> if schedulingInfoList indicates that SystemInformationBlockType12 is present: +4> acquire SystemInformationBlockType12; +NOTE 3: UEs shall start acquiring SystemInformationBlockType12 as described above even when systemInfoValueTag in SystemInformationBlockType1 has not changed. +1> if the UE is interested to receive MBMS services; and +1> if schedulingInfoList indicates that SystemInformationBlockType13 is present and the UE does not have stored a valid version of this system information block: +2> aquire SystemInformationBlockType13; +The UE may apply the received SIBs immediately, i.e. the UE does not need to delay using a SIB until all SI messages have been received. The UE may delay applying the received SIBs until completing lower layer procedures associated with a received or a UE originated RRC message, e.g. an ongoing random access procedure. +NOTE 4: While attempting to acquire a particular SIB, if the UE detects from schedulingInfoList that it is no longer present, the UE should stop trying to acquire the particular SIB. +5.2.2.5 Essential system information missing +The UE shall +1> if in RRC_IDLE or in RRC_CONNECTED while T311 is running: +2> if the UE is unable to acquire the MasterInformationBlock or the SystemInformationBlockType1: +3> consider the cell as barred in accordance with TS 36.304 [4] and; +3> perform barring as if intraFreqReselection is set to allowed, and as if the csg-Indication is set to FALSE; +2> else if the UE is unable to acquire the SystemInformationBlockType2: +3> treat the cell as barred in accordance with TS 36.304 [4]; +5.2.2.6 Actions upon reception of the MasterInformationBlock message +Upon receiving the MasterInformationBlock message the UE shall: +1> apply the radio resource configuration included in the phich-Config; +1> if the UE is in RRC_IDLE or if the UE is in RRC_CONNECTED while T311 is running: +2> if the UE has no valid system information stored according to 5.2.2.3 for the concerned cell: +3> apply the received value of dl-Bandwidth to the ul-Bandwidth until SystemInformationBlockType2 is received; +5.2.2.7 Actions upon reception of the SystemInformationBlockType1 message +Upon receiving the SystemInformationBlockType1 message the UE shall: +1> if in RRC_CONNECTED while T311 is not running, and the UE supports multi-band cells as defined by bit 31 in featureGroupIndicators: +2> disregard the freqBandIndicator and multiBandInfoList, if received, while in RRC_CONNECTED; +2> forward the cellIdentity to upper layers; +2> forward the trackingAreaCode to upper layers; +1> else +2> if the frequency band indicated in the freqBandIndicator is part of the frequency bands supported by the UE; or +2> if the UE supports multiBandInfoList, and if one or more of the frequency bands indicated in the multiBandInfoList are part of the frequency bands supported by the UE: +3> forward the cellIdentity to upper layers; +3> forward the trackingAreaCode to upper layers; +2> else: +3> consider the cell as barred in accordance with TS 36.304 [4] and; +3> perform barring as if intraFreqReselection is set to notAllowed, and as if the csg-Indication is set to FALSE; +5.2.2.8 Actions upon reception of SystemInformation messages +No UE requirements related to the contents of the SystemInformation messages apply other than those specified elsewhere e.g. within procedures using the concerned system information, and/ or within the corresponding field descriptions. +5.2.2.9 Actions upon reception of SystemInformationBlockType2 +Upon receiving SystemInformationBlockType2, the UE shall: +1> apply the configuration included in the radioResourceConfigCommon; +1> if upper layers indicate that a (UE specific) paging cycle is configured: +2> apply the shortest of the (UE specific) paging cycle and the defaultPagingCycle included in the radioResourceConfigCommon; +1> if the mbsfn-SubframeConfigList is included: +2> consider that DL assignments may occur in the MBSFN subframes indicated in the mbsfn-SubframeConfigList under the conditions specified in [23, 7.1]; +1> apply the specified PCCH configuration defined in 9.1.1.3; +1> not apply the timeAlignmentTimerCommon; +1> if in RRC_CONNECTED and UE is configured with RLF timer and constants values received within rlf-TimersAndConstants: +2> not update its values of the timers and constants in ue-TimersAndConstants except for the value of timer T300; +1> if in RRC_CONNECTED while T311 is not running; and the UE supports multi-band cells as defined by bit 31 in featureGroupIndicators: +2> disregard the additionalSpectrumEmission and ul-CarrierFreq, if received, while in RRC_CONNECTED; +5.2.2.10 Actions upon reception of SystemInformationBlockType3 +No UE requirements related to the contents of this SystemInformationBlock apply other than those specified elsewhere e.g. within procedures using the concerned system information, and/ or within the corresponding field descriptions. +5.2.2.11 Actions upon reception of SystemInformationBlockType4 +No UE requirements related to the contents of this SystemInformationBlock apply other than those specified elsewhere e.g. within procedures using the concerned system information, and/ or within the corresponding field descriptions. +5.2.2.12 Actions upon reception of SystemInformationBlockType5 +No UE requirements related to the contents of this SystemInformationBlock apply other than those specified elsewhere e.g. within procedures using the concerned system information, and/ or within the corresponding field descriptions. +5.2.2.13 Actions upon reception of SystemInformationBlockType6 +No UE requirements related to the contents of this SystemInformationBlock apply other than those specified elsewhere e.g. within procedures using the concerned system information, and/ or within the corresponding field descriptions. +5.2.2.14 Actions upon reception of SystemInformationBlockType7 +No UE requirements related to the contents of this SystemInformationBlock apply other than those specified elsewhere e.g. within procedures using the concerned system information, and/ or within the corresponding field descriptions. +5.2.2.15 Actions upon reception of SystemInformationBlockType8 +Upon receiving SystemInformationBlockType8, the UE shall: +1> if the systemTimeInfo is included: +2> forward the systemTimeInfo to CDMA2000 upper layers; +1> if the UE is in RRC_IDLE and if searchWindowSize is included: +2> forward the searchWindowSize to CDMA2000 upper layers; +1> if parametersHRPD is included; +2> forward the preRegistrationInfoHRPD to CDMA2000 upper layers only if the UE has not received the preRegistrationInfoHRPD within an RRCConnectionReconfiguration message after entering this cell; +2> if the cellReselectionParametersHRPD is included: +3> forward the neighCellList to the CDMA2000 upper layers; +1> if the parameters1XRTT is included: +2> if the csfb-RegistrationParam1XRTT is included: +3> forward the csfb-RegistrationParam1XRTT to the CDMA2000 upper layers which will use this information to determine if a CS registration/re-registration towards CDMA2000 1xRTT in the EUTRA cell is required; +2> else: +3> indicate to CDMA2000 upper layers that CSFB Registration to CDMA2000 1xRTT is not allowed; +2> if the longCodeState1XRTT is included: +3> forward the longCodeState1XRTT to CDMA2000 upper layers; +2> if the cellReselectionParameters1XRTT is included: +3> forward the neighCellList to the CDMA2000 upper layers; +2> if the csfb-SupportForDualRxUEs is included: +3> forward csfb-SupportForDualRxUEs to the CDMA2000 upper layers; +2> else +3> forward csfb-SupportForDualRxUEs, with its value set to FALSE, to the CDMA2000 upper layers; +2> forward the ac-BarringConfig1XRTT to CDMA2000 upper layers, if included; +2> if the csfb-DualRxTxSupport is included: +3> forward csfb-DualRxTxSupport to the CDMA2000 upper layers; +2> else +3> forward csfb-DualRxTxSupport, with its value set to FALSE, to the CDMA2000 upper layers; +5.2.2.16 Actions upon reception of SystemInformationBlockType9 +Upon receiving SystemInformationBlockType9, the UE shall: +1> if hnb-Name is included, forward the hnb-Name to upper layers; +5.2.2.17 Actions upon reception of SystemInformationBlockType10 +Upon receiving SystemInformationBlockType10, the UE shall: +1> forward the received warningType, messageIdentifier and serialNumber to upper layers; +5.2.2.18 Actions upon reception of SystemInformationBlockType11 +Upon receiving SystemInformationBlockType11, the UE shall: +1> if there is no current value for messageIdentifier and serialNumber for SystemInformationBlockType11; or +1> if either the received value of messageIdentifier or of serialNumber or of both are different from the current values of messageIdentifier and serialNumber for SystemInformationBlockType11: +2> use the received values of messageIdentifier and serialNumber for SystemInformationBlockType11 as the current values of messageIdentifier and serialNumber for SystemInformationBlockType11; +2> discard any previously buffered warningMessageSegment; +2> if all segments of a warning message have been received: +3> assemble the warning message from the received warningMessageSegment; +3> forward the received warning message, messageIdentifier, serialNumber and dataCodingScheme to upper layers; +3> stop reception of SystemInformationBlockType11; +3> discard the current values of messageIdentifier and serialNumber for SystemInformationBlockType11; +2> else: +3> store the received warningMessageSegment; +3> continue reception of SystemInformationBlockType11; +1> else if all segments of a warning message have been received: +2> assemble the warning message from the received warningMessageSegment; +2> forward the received complete warning message, messageIdentifier, serialNumber and dataCodingScheme to upper layers; +2> stop reception of SystemInformationBlockType11; +2> discard the current values of messageIdentifier and serialNumber for SystemInformationBlockType11; +1> else: +2> store the received warningMessageSegment; +2> continue reception of SystemInformationBlockType11; +The UE should discard any stored warningMessageSegment and the current value of messageIdentifier and serialNumber for SystemInformationBlockType11 if the complete warning message has not been assembled within a period of 3 hours. +5.2.2.19 Actions upon reception of SystemInformationBlockType12 +Upon receiving SystemInformationBlockType12, the UE shall: +1> if the SystemInformationBlockType12 contains a complete warning message: +2> forward the received warning message, messageIdentifier, serialNumber and dataCodingScheme to upper layers; +2> continue reception of SystemInformationBlockType12; +1> else: +2> if the received values of messageIdentifier and serialNumber are the same (each value is the same) as a pair for which a warning message is currently being assembled: +3> store the received warningMessageSegment; +3> if all segments of a warning message have been received: +4> assemble the warning message from the received warningMessageSegment; +4> forward the received warning message, messageIdentifier, serialNumber and dataCodingScheme to upper layers; +4> stop assembling a warning message for this messageIdentifier and serialNumber and delete all stored information held for it; +3> continue reception of SystemInformationBlockType12; +2> else if the received values of messageIdentifier and/or serialNumber are not the same as any of the pairs for which a warning message is currently being assembled: +3> start assembling a warning message for this messageIdentifier and serialNumber pair; +3> store the received warningMessageSegment; +3> continue reception of SystemInformationBlockType12; +The UE should discard warningMessageSegment and the associated values of messageIdentifier and serialNumber for SystemInformationBlockType12 if the complete warning message has not been assembled within a period of 3 hours. +NOTE: The number of warning messages that a UE can re-assemble simultaneously is a function of UE implementation. +5.2.2.20 Actions upon reception of SystemInformationBlockType13 +No UE requirements related to the contents of this SystemInformationBlock apply other than those specified elsewhere e.g. within procedures using the concerned system information, and/ or within the corresponding field descriptions. +5.2.3 Acquisition of an SI message +When acquiring an SI message, the UE shall: +1> determine the start of the SI-window for the concerned SI message as follows: +2> for the concerned SI message, determine the number n which corresponds to the order of entry in the list of SI messages configured by schedulingInfoList in SystemInformationBlockType1; +2> determine the integer value x = (n – 1)*w, where w is the si-WindowLength; +2> the SI-window starts at the subframe #a, where a = x mod 10, in the radio frame for which SFN mod T = FLOOR(x/10), where T is the si-Periodicity of the concerned SI message; +NOTE: E-UTRAN should configure an SI-window of 1 ms only if all SIs are scheduled before subframe #5 in radio frames for which SFN mod 2 = 0. +1> receive DL-SCH using the SI-RNTI from the start of the SI-window and continue until the end of the SI-window whose absolute length in time is given by si-WindowLength, or until the SI message was received, excluding the following subframes: +2> subframe #5 in radio frames for which SFN mod 2 = 0; +2> any MBSFN subframes; +2> any uplink subframes in TDD; +1> if the SI message was not received by the end of the SI-window, repeat reception at the next SI-window occasion for the concerned SI message; +5.3 Connection control +5.3.1 Introduction +5.3.1.1 RRC connection control +RRC connection establishment involves the establishment of SRB1. E-UTRAN completes RRC connection establishment prior to completing the establishment of the S1 connection, i.e. prior to receiving the UE context information from the EPC. Consequently, AS security is not activated during the initial phase of the RRC connection. During this initial phase of the RRC connection, the E-UTRAN may configure the UE to perform measurement reporting. However, the UE only accepts a handover message when security has been activated. +NOTE: In case the serving frequency broadcasts multiple overlapping bands, E-UTRAN can only configure measurements after having obtained the UE capabilities, as the measurement configuration needs to be set according to the band selected by the UE. +Upon receiving the UE context from the EPC, E-UTRAN activates security (both ciphering and integrity protection) using the initial security activation procedure. The RRC messages to activate security (command and successful response) are integrity protected, while ciphering is started only after completion of the procedure. That is, the response to the message used to activate security is not ciphered, while the subsequent messages (e.g. used to establish SRB2 and DRBs) are both integrity protected and ciphered. +After having initiated the initial security activation procedure, E-UTRAN initiates the establishment of SRB2 and DRBs, i.e. E-UTRAN may do this prior to receiving the confirmation of the initial security activation from the UE. In any case, E-UTRAN will apply both ciphering and integrity protection for the RRC connection reconfiguration messages used to establish SRB2 and DRBs. E-UTRAN should release the RRC connection if the initial security activation and/ or the radio bearer establishment fails (i.e. security activation and DRB establishment are triggered by a joint S1-procedure, which does not support partial success). +For SRB2 and DRBs, security is always activated from the start, i.e. the E-UTRAN does not establish these bearers prior to activating security. +After having initiated the initial security activation procedure, E-UTRAN may configure a UE that supports CA, with one or more SCells in addition to the PCell that was initially configured during connection establishment. The PCell is used to provide the security inputs and upper layer system information (i.e. the NAS mobility information e.g. TAI). SCells are used to provide additional downlink and optionally uplink radio resources. +The release of the RRC connection normally is initiated by E-UTRAN. The procedure may be used to re-direct the UE to an E-UTRA frequency or an inter-RAT carrier frequency. Only in exceptional cases, as specified within this specification, TS 36.300 [9], TS 36.304 [4] or TS 24.301 [35], may the UE abort the RRC connection, i.e. move to RRC_IDLE without notifying E-UTRAN. +5.3.1.2 Security +AS security comprises of the integrity protection of RRC signalling (SRBs) as well as the ciphering of RRC signalling (SRBs) and user data (DRBs). +RRC handles the configuration of the security parameters which are part of the AS configuration: the integrity protection algorithm, the ciphering algorithm and two parameters, namely the keyChangeIndicator and the nextHopChainingCount, which are used by the UE to determine the AS security keys upon handover and/ or connection re-establishment. +The integrity protection algorithm is common for signalling radio bearers SRB1 and SRB2. The ciphering algorithm is common for all radio bearers (i.e. SRB1, SRB2 and DRBs). Neither integrity protection nor ciphering applies for SRB0. +RRC integrity and ciphering are always activated together, i.e. in one message/ procedure. RRC integrity and ciphering are never de-activated. However, it is possible to switch to a 'NULL' ciphering algorithm (eea0). +The 'NULL' integrity protection algorithm (eia0) is used only for the UE in limited service mode [32, TS33.401]. In case the 'NULL' integrity protection algorithm is used, 'NULL' ciphering algorithm is also used. +NOTE 1: Lower layers discard RRC messages for which the integrity check has failed and indicate the integrity verification check failure to RRC. +The AS applies three different security keys: one for the integrity protection of RRC signalling (KRRCint), one for the ciphering of RRC signalling (KRRCenc) and one for the ciphering of user data (KUPenc). All three AS keys are derived from the KeNB key. The KeNB is based on the KASME key, which is handled by upper layers. +Upon connection establishment new AS keys are derived. No AS-parameters are exchanged to serve as inputs for the derivation of the new AS keys at connection establishment. +The integrity and ciphering of the RRC message used to perform handover is based on the security configuration used prior to the handover and is performed by the source eNB. +The integrity and ciphering algorithms can only be changed upon handover. The four AS keys (KeNB, KRRCint, KRRCenc and KUPenc) change upon every handover and connection re-establishment. The keyChangeIndicator is used upon handover and indicates whether the UE should use the keys associated with the latest available KASME key. The nextHopChainingCount parameter is used upon handover and connection re-establishment by the UE when deriving the new KeNB that is used to generate KRRCint, KRRCenc and KUPenc (see TS 33.401 [32]). An intra cell handover procedure may be used to change the keys in RRC_CONNECTED. +For each radio bearer an independent counter (COUNT, as specified in TS 36.323 [8]) is maintained for each direction. For each DRB, the COUNT is used as input for ciphering. For each SRB, the COUNT is used as input for both ciphering and integrity protection. It is not allowed to use the same COUNT value more than once for a given security key. In order to limit the signalling overhead, individual messages/ packets include a short sequence number (PDCP SN, as specified in TS 36.323 [8]). In addition, an overflow counter mechanism is used: the hyper frame number (TX_HFN and RX_HFN, as specified in TS 36.323 [8]). The HFN needs to be synchronized between the UE and the eNB. The eNB is responsible for avoiding reuse of the COUNT with the same RB identity and with the same KeNB, e.g. due to the transfer of large volumes of data, release and establishment of new RBs. In order to avoid such re-use, the eNB may e.g. use different RB identities for successive RB establishments, trigger an intra cell handover or an RRC_CONNECTED to RRC_IDLE to RRC_CONNECTED transition. +For each SRB, the value provided by RRC to lower layers to derive the 5-bit BEARER parameter used as input for ciphering and for integrity protection is the value of the corresponding srb-Identity with the MSBs padded with zeroes. +5.3.1.2a RN security +For RNs, AS security follows the procedures in 5.3.1.2. Furthermore, E-UTRAN may configure per DRB whether or not integrity protection is used. The use of integrity protection may be configured only upon DRB establishment and reconfigured only upon handover or upon the first reconfiguration following RRC connection re-establishment. +To provide integrity protection on DRBs between the RN and the E-UTRAN, the KUPint key is derived from the KeNB key as described in TS33.401 [32]. The same integrity protection algorithm used for SRBs also applies to the DRBs. The KUPint changes at every handover and RRC connection re-establishment and is based on an updated KeNB which is derived by taking into account the nextHopChainingCount. The COUNT value maintained for DRB ciphering is also used for integrity protection, if the integrity protection is configured for the DRB. +5.3.1.3 Connected mode mobility +In RRC_CONNECTED, the network controls UE mobility, i.e. the network decides when the UE shall connect to which E-UTRA cell(s), or inter-RAT cell. For network controlled mobility in RRC_CONNECTED, the PCell can be changed using an RRCConnectionReconfiguration message including the mobilityControlInfo (handover), whereas the SCell(s) can be changed using the RRCConnectionReconfiguration message either with or without the mobilityControlInfo. The network triggers the handover procedure e.g. based on radio conditions, load. To facilitate this, the network may configure the UE to perform measurement reporting (possibly including the configuration of measurement gaps). The network may also initiate handover blindly, i.e. without having received measurement reports from the UE. +Before sending the handover message to the UE, the source eNB prepares one or more target cells. The source eNB selects the target PCell. The source eNB may also provide the target eNB with a list of best cells on each frequency for which measurement information is available, in order of decreasing RSRP. The source eNB may also include available measurement information for the cells provided in the list. The target eNB decides which SCells are configured for use after handover, which may include cells other than the ones indicated by the source eNB. +The target eNB generates the message used to perform the handover, i.e. the message including the AS-configuration to be used in the target cell(s). The source eNB transparently (i.e. does not alter values/ content) forwards the handover message/ information received from the target to the UE. When appropriate, the source eNB may initiate data forwarding for (a subset of) the DRBs. +After receiving the handover message, the UE attempts to access the target PCell at the first available RACH occasion according to Random Access resource selection defined in TS 36.321 [6], i.e. the handover is asynchronous. Consequently, when allocating a dedicated preamble for the random access in the target PCell, E-UTRA shall ensure it is available from the first RACH occasion the UE may use. Upon successful completion of the handover, the UE sends a message used to confirm the handover. +If the target eNB does not support the release of RRC protocol which the source eNB used to configure the UE, the target eNB may be unable to comprehend the UE configuration provided by the source eNB. In this case, the target eNB should use the full configuration option to reconfigure the UE for Handover and Re-establishment. Full configuration option includes an initialization of the radio configuration, which makes the procedure independent of the configuration used in the source cell(s) with the exception that the security algorithms are continued for the RRC re-establishment. +After the successful completion of handover, PDCP SDUs may be re-transmitted in the target cell(s). This only applies for DRBs using RLC-AM mode and for handovers not involving full configuration option. The further details are specified in TS 36.323 [8]. After the successful completion of handover not involving full configuration option, the SN and the HFN are reset except for the DRBs using RLC-AM mode (for which both SN and HFN continue). For reconfigurations involving the full configuration option, the PDCP entities are newly established (SN and HFN do not continue) for all DRBs irrespective of the RLC mode. The further details are specified in TS 36.323 [8]. +One UE behaviour to be performed upon handover is specified, i.e. this is regardless of the handover procedures used within the network (e.g. whether the handover includes X2 or S1 signalling procedures). +The source eNB should, for some time, maintain a context to enable the UE to return in case of handover failure. After having detected handover failure, the UE attempts to resume the RRC connection either in the source PCell or in another cell using the RRC re-establishment procedure. This connection resumption succeeds only if the accessed cell is prepared, i.e. concerns a cell of the source eNB or of another eNB towards which handover preparation has been performed. The cell in which the re-establishment procedure succeeds becomes the PCell while SCells, if configured, are released. +Normal measurement and mobility procedures are used to support handover to cells broadcasting a CSG identity. In addition, E-UTRAN may configure the UE to report that it is entering or leaving the proximity of cell(s) included in its CSG whitelist. Furthermore, E-UTRAN may request the UE to provide additional information broadcast by the handover candidate cell e.g. cell global identity, CSG identity, CSG membership status. +NOTE E-UTRAN may use the ‘proximity report’ to configure measurements as well as to decide whether or not to request additional information broadcast by the handover candidate cell. The additional information is used to verify whether or not the UE is authorised to access the target PCell and may also be needed to identify handover candidate cell (PCI confusion i.e. when the physical layer identity that is included in the measurement report does not uniquely identify the cell). + +5.3.2 Paging +5.3.2.1 General + +Figure 5.3.2.1-1: Paging +The purpose of this procedure is: +- to transmit paging information to a UE in RRC_IDLE and/ or; +- to inform UEs in RRC_IDLE and UEs in RRC_CONNECTED about a system information change and/ or; +- to inform about an ETWS primary notification and/ or ETWS secondary notification and/ or; +- to inform about a CMAS notification. +The paging information is provided to upper layers, which in response may initiate RRC connection establishment, e.g. to receive an incoming call. +5.3.2.2 Initiation +E-UTRAN initiates the paging procedure by transmitting the Paging message at the UE's paging occasion as specified in TS 36.304 [4]. E-UTRAN may address multiple UEs within a Paging message by including one PagingRecord for each UE. E-UTRAN may also indicate a change of system information, and/ or provide an ETWS notification or a CMAS notification in the Paging message. +5.3.2.3 Reception of the Paging message by the UE +Upon receiving the Paging message, the UE shall: +1> if in RRC_IDLE, for each of the PagingRecord, if any, included in the Paging message: +2> if the ue-Identity included in the PagingRecord matches one of the UE identities allocated by upper layers: +3> forward the ue-Identity and the cn-Domain to the upper layers; +1> if the systemInfoModification is included: +2> re-acquire the required system information using the system information acquisition procedure as specified in 5.2.2. +1> if the etws-Indication is included and the UE is ETWS capable: +2> re-acquire SystemInformationBlockType1 immediately, i.e., without waiting until the next system information modification period boundary; +2> if the schedulingInfoList indicates that SystemInformationBlockType10 is present: +3> acquire SystemInformationBlockType10; +2> if the schedulingInfoList indicates that SystemInformationBlockType11 is present: +3> acquire SystemInformationBlockType11; +1> if the cmas-Indication is included and the UE is CMAS capable: +2> re-acquire SystemInformationBlockType1 immediately, i.e., without waiting until the next system information modification period boundary as specified in 5.2.1.5; +2> if the schedulingInfoList indicates that SystemInformationBlockType12 is present: +3> acquire SystemInformationBlockType12; +5.3.3 RRC connection establishment +5.3.3.1 General + +Figure 5.3.3.1-1: RRC connection establishment, successful + +Figure 5.3.3.1-2: RRC connection establishment, network reject +The purpose of this procedure is to establish an RRC connection. RRC connection establishment involves SRB1 establishment. The procedure is also used to transfer the initial NAS dedicated information/ message from the UE to E-UTRAN. +E-UTRAN applies the procedure as follows: +- to establish SRB1 only. +5.3.3.2 Initiation +The UE initiates the procedure when upper layers request establishment of an RRC connection while the UE is in RRC_IDLE. +Upon initiation of the procedure, the UE shall: +1> if the UE is establishing the RRC connection for mobile terminating calls: +2> if timer T302 is running: +3> inform upper layers about the failure to establish the RRC connection and that access barring for mobile terminating calls is applicable, upon which the procedure ends; +1> else if the UE is establishing the RRC connection for emergency calls: +2> if SystemInformationBlockType2 includes the ac-BarringInfo: +3> if the ac-BarringForEmergency is set to TRUE: +4> if the UE has one or more Access Classes, as stored on the USIM, with a value in the range 11..15, which is valid for the UE to use according to TS 22.011 [10] and TS 23.122 [11]: +NOTE 1: ACs 12, 13, 14 are only valid for use in the home country and ACs 11, 15 are only valid for use in the HPLMN/ EHPLMN. +5> if the ac-BarringInfo includes ac-BarringForMO-Data, and for all of these valid Access Classes for the UE, the corresponding bit in the ac-BarringForSpecialAC contained in ac-BarringForMO-Data is set to one: +6> consider access to the cell as barred; +4> else: +5> consider access to the cell as barred; +2> if access to the cell is barred: +3> inform upper layers about the failure to establish the RRC connection, upon which the procedure ends; +1> else if the UE is establishing the RRC connection for mobile originating calls: +2> perform access barring check as specified in 5.3.3.11, using T303 as "Tbarring" and ac-BarringForMO-Data as "AC barring parameter"; +2> if access to the cell is barred: +3> if SystemInformationBlockType2 includes ac-BarringForCSFB or the UE does not support CS fallback: +4> inform upper layers about the failure to establish the RRC connection and that access barring for mobile originating calls is applicable, upon which the procedure ends; +3> else (SystemInformationBlockType2 does not include ac-BarringForCSFB and the UE supports CS fallback): +4> if timer T306 is not running, start T306 with the timer value of T303; +4> inform upper layers about the failure to establish the RRC connection and that access barring for mobile originating calls and mobile originating CS fallback is applicable, upon which the procedure ends; +1> else if the UE is establishing the RRC connection for mobile originating signalling: +2> perform access barring check as specified in 5.3.3.11, using T305 as "Tbarring" and ac-BarringForMO-Signalling as "AC barring parameter"; +2> if access to the cell is barred: +3> inform upper layers about the failure to establish the RRC connection and that access barring for mobile originating signalling is applicable, upon which the procedure ends; +1> else (the UE is establishing the RRC connection for mobile originating CS fallback): +2> if SystemInformationBlockType2 includes ac-BarringForCSFB: +3> perform access barring check as specified in 5.3.3.11, using T306 as "Tbarring" and ac-BarringForCSFB as "AC barring parameter"; +3> if access to the cell is barred: +4> inform upper layers about the failure to establish the RRC connection and that access barring for mobile originating CS fallback is applicable, due to ac-BarringForCSFB, upon which the procedure ends; +2> else: +3> perform access barring check as specified in 5.3.3.11, using T306 as "Tbarring" and ac-BarringForMO-Data as "AC barring parameter"; +3> if access to the cell is barred: +4> if timer T303 is not running, start T303 with the timer value of T306; +4> inform upper layers about the failure to establish the RRC connection and that access barring for mobile originating CS fallback and mobile originating calls is applicable, due to ac-BarringForMO-Data, upon which the procedure ends; +1> apply the default physical channel configuration as specified in 9.2.4; +1> apply the default semi-persistent scheduling configuration as specified in 9.2.3; +1> apply the default MAC main configuration as specified in 9.2.2; +1> apply the CCCH configuration as specified in 9.1.1.2; +1> apply the timeAlignmentTimerCommon included in SystemInformationBlockType2; +1> start timer T300; +1> initiate transmission of the RRCConnectionRequest message in accordance with 5.3.3.3; +NOTE 2: Upon initiating the connection establishment procedure, the UE is not required to ensure it maintains up to date system information applicable only for UEs in RRC_IDLE state. However, the UE needs to perform system information acquisition upon cell re-selection. + +5.3.3.3 Actions related to transmission of RRCConnectionRequest message +The UE shall set the contents of RRCConnectionRequest message as follows: +1> set the ue-Identity as follows: +2> if upper layers provide an S-TMSI: +3> set the ue-Identity to the value received from upper layers; +2> else: +3> draw a random value in the range 0 .. 240-1 and set the ue-Identity to this value; +NOTE 1: Upper layers provide the S-TMSI if the UE is registered in the TA of the current cell. +1> set the establishmentCause in accordance with the information received from upper layers; +The UE shall submit the RRCConnectionRequest message to lower layers for transmission. +The UE shall continue cell re-selection related measurements as well as cell re-selection evaluation. If the conditions for cell re-selection are fulfilled, the UE shall perform cell re-selection as specified in 5.3.3.5. +5.3.3.4 Reception of the RRCConnectionSetup by the UE +NOTE: Prior to this, lower layer signalling is used to allocate a C-RNTI. For further details see TS 36.321 [6]; +The UE shall: +1> perform the radio resource configuration procedure in accordance with the received radioResourceConfigDedicated and as specified in 5.3.10; +1> if stored, discard the cell reselection priority information provided by the idleModeMobilityControlInfo or inherited from another RAT; +1> stop timer T300; +1> stop timer T302, if running; +1> stop timer T303, if running; +1> stop timer T305, if running; +1> stop timer T306, if running; +1> perform the actions as specified in 5.3.3.7; +1> stop timer T320, if running; +1> enter RRC_CONNECTED; +1> stop the cell re-selection procedure; +1> consider the current cell to be the PCell; +1> set the content of RRCConnectionSetupComplete message as follows: +2> set the selectedPLMN-Identity to the PLMN selected by upper layers (see TS 23.122 [11], TS 24.301 [35]) from the PLMN(s) included in the plmn-IdentityList in SystemInformationBlockType1; +2> if upper layers provide the 'Registered MME', include and set the registeredMME as follows: +3> if the PLMN identity of the 'Registered MME' is different from the PLMN selected by the upper layers: +4> include the plmnIdentity in the registeredMME and set it to the value of the PLMN identity in the 'Registered MME' received from upper layers; +3> set the mmegi and the mmec to the value received from upper layers; +2> if upper layers provided the 'Registered MME': +3> include and set the gummei-Type to the value provided by the upper layers; +2> if connecting as an RN: +3> include the rn-SubframeConfigReq; +2> set the dedicatedInfoNAS to include the information received from upper layers; +2> if the UE has radio link failure or handover failure information available in VarRLF-Report and plmn-Identity stored in VarRLF-Report is equal to the RPLMN: +3> include rlf-InfoAvailable; +2> if the UE has logged measurements available for E-UTRA and plmn-Identity stored in VarLogMeasReport is equal to the RPLMN: +3> include logMeasAvailable; +2> submit the RRCConnectionSetupComplete message to lower layers for transmission, upon which the procedure ends; +5.3.3.5 Cell re-selection while T300, T302, T303, T305 or T306 is running +The UE shall: +1> if cell reselection occurs while T300, T302, T303, T305 or T306 is running: +2> if timer T302, T303, T305 and/ or T306 is running: +3> stop timer T302, T303, T305 and T306, whichever ones were running; +3> perform the actions as specified in 5.3.3.7; +2> if timer T300 is running: +3> stop timer T300; +3> reset MAC, release the MAC configuration and re-establish RLC for all RBs that are established; +3> inform upper layers about the failure to establish the RRC connection; +5.3.3.6 T300 expiry +The UE shall: +1> if timer T300 expires: +2> reset MAC, release the MAC configuration and re-establish RLC for all RBs that are established; +2> inform upper layers about the failure to establish the RRC connection, upon which the procedure ends; +5.3.3.7 T302, T303, T305 or T306 expiry or stop +The UE shall: +1> if timer T302 expires or is stopped: +2> inform upper layers about barring alleviation for mobile terminating access; +2> if timer T303 is not running: +3> inform upper layers about barring alleviation for mobile originating calls; +2> if timer T305 is not running: +3> inform upper layers about barring alleviation for mobile originating signalling; +2> if timer T306 is not running: +3> inform upper layers about barring alleviation for mobile originating CS fallback; +1> if timer T303 expires or is stopped: +2> if timer T302 is not running: +3> inform upper layers about barring alleviation for mobile originating calls; +1> if timer T305 expires or is stopped: +2> if timer T302 is not running: +3> inform upper layers about barring alleviation for mobile originating signalling; +1> if timer T306 expires or is stopped: +2> if timer T302 is not running: +3> inform upper layers about barring alleviation for mobile originating CS fallback; +5.3.3.8 Reception of the RRCConnectionReject by the UE +The UE shall: +1> stop timer T300; +1> reset MAC and release the MAC configuration; +1> start timer T302, with the timer value set to the waitTime; +1> if the extendedWaitTime is present and the UE supports delay tolerant access: +2> forward the extendedWaitTime to upper layers; +1> inform upper layers about the failure to establish the RRC connection and that access barring for mobile originating calls, mobile originating signalling, mobile terminating access and mobile originating CS fallback is applicable, upon which the procedure ends; +5.3.3.9 Abortion of RRC connection establishment +If upper layers abort the RRC connection establishment procedure while the UE has not yet entered RRC_CONNECTED, the UE shall: +1> stop timer T300, if running; +1> reset MAC, release the MAC configuration and re-establish RLC for all RBs that are established; +5.3.3.10 Handling of SSAC related parameters +Upon request from the upper layers, the UE shall: +1> set the local variables BarringFactorForMMTEL-Voice and BarringTimeForMMTEL-Voice as follows: +2> if the UE is in RRC_IDLE and ssac-BarringForMMTEL-Voice is present: +3> if the UE has one or more Access Classes, as stored on the USIM, with a value in the range 11..15, which is valid for the UE to use according to TS 22.011 [10] and TS 23.122 [11], and +NOTE: ACs 12, 13, 14 are only valid for use in the home country and ACs 11, 15 are only valid for use in the HPLMN/ EHPLMN. +3> if, for at least one of these Access Classes, the corresponding bit in the ac-BarringForSpecialAC contained in ssac-BarringForMMTEL-Voice is set to zero: +4> set BarringFactorForMMTEL-Voice to one and BarringTimeForMMTEL-Voice to zero; +3> else: +4> set BarringFactorForMMTEL-Voice and BarringTimeForMMTEL-Voice to the value of ac-BarringFactor and ac-BarringTime included in ssac-BarringForMMTEL-Voice, respectively; +2> else set BarringFactorForMMTEL-Voice to one and BarringTimeForMMTEL-Voice to zero; +1> set the local variables BarringFactorForMMTEL-Video and BarringTimeForMMTEL-Video as follows: +2> if the UE is in RRC_IDLE and ssac-BarringForMMTEL-Video is present: +3> if the UE has one or more Access Classes, as stored on the USIM, with a value in the range 11..15, which is valid for the UE to use according to TS 22.011 [10] and TS 23.122 [11], and +3> if, for at least one of these Access Classes, the corresponding bit in the ac-BarringForSpecialAC contained in ssac-BarringForMMTEL-Video is set to zero: +4> set BarringFactorForMMTEL-Video to one and BarringTimeForMMTEL-Video to zero; +3> else: +4> set BarringFactorForMMTEL-Video and BarringTimeForMMTEL-Video to the value of ac-BarringFactor and ac-BarringTime included in ssac-BarringForMMTEL-Video, respectively; +2> else set BarringFactorForMMTEL-Video to one and BarringTimeForMMTEL-Video to zero; +1> forward the variables BarringFactorForMMTEL-Voice, BarringTimeForMMTEL-Voice, BarringFactorForMMTEL-Video and BarringTimeForMMTEL-Video to the upper layers; +5.3.3.11 Access barring check +1> if timer T302 or "Tbarring" is running: +2> consider access to the cell as barred; +1> else if SystemInformationBlockType2 includes "AC barring parameter": +2> if the UE has one or more Access Classes, as stored on the USIM, with a value in the range 11..15, which is valid for the UE to use according to TS 22.011 [10] and TS 23.122 [11], and +NOTE: ACs 12, 13, 14 are only valid for use in the home country and ACs 11, 15 are only valid for use in the HPLMN/ EHPLMN. +2> for at least one of these valid Access Classes the corresponding bit in the ac-BarringForSpecialAC contained in "AC barring parameter" is set to zero: +3> consider access to the cell as not barred; +2> else: +3> draw a random number 'rand' uniformly distributed in the range: 0 ? rand < 1; +3> if 'rand' is lower than the value indicated by ac-BarringFactor included in "AC barring parameter": +4> consider access to the cell as not barred; +3> else: +4> consider access to the cell as barred; +1> else: +2> consider access to the cell as not barred; +1> if access to the cell is barred and both timers T302 and "Tbarring" are not running: +2> draw a random number 'rand' that is uniformly distributed in the range 0 ? rand < 1; +2> start timer "Tbarring" with the timer value calculated as follows, using the ac-BarringTime included in "AC barring parameter": + "Tbarring" = (0.7+ 0.6 * rand) * ac-BarringTime. + +5.3.4 Initial security activation +5.3.4.1 General + +Figure 5.3.4.1-1: Security mode command, successful + +Figure 5.3.4.1-2: Security mode command, failure +The purpose of this procedure is to activate AS security upon RRC connection establishment. +5.3.4.2 Initiation +E-UTRAN initiates the security mode command procedure to a UE in RRC_CONNECTED. Moreover, E-UTRAN applies the procedure as follows: +- when only SRB1 is established, i.e. prior to establishment of SRB2 and/ or DRBs. +5.3.4.3 Reception of the SecurityModeCommand by the UE +The UE shall: +1> derive the KeNB key, as specified in TS 33.401 [32]; +1> derive the KRRCint key associated with the integrityProtAlgorithm indicated in the SecurityModeCommand message, as specified in TS 33.401 [32]; +1> request lower layers to verify the integrity protection of the SecurityModeCommand message, using the algorithm indicated by the integrityProtAlgorithm as included in the SecurityModeCommand message and the KRRCint key; +1> if the SecurityModeCommand message passes the integrity protection check: +2> derive the KRRCenc key and the KUPenc key associated with the cipheringAlgorithm indicated in the SecurityModeCommand message, as specified in TS 33.401 [32]; +2> if connected as an RN: +3> derive the KUPint key associated with the integrityProtAlgorithm indicated in the SecurityModeCommand message, as specified in TS 33.401 [32]; +2> configure lower layers to apply integrity protection using the indicated algorithm and the KRRCint key immediately, i.e. integrity protection shall be applied to all subsequent messages received and sent by the UE, including the SecurityModeComplete message; +2> configure lower layers to apply ciphering using the indicated algorithm, the KRRCenc key and the KUPenc key after completing the procedure, i.e. ciphering shall be applied to all subsequent messages received and sent by the UE, except for the SecurityModeComplete message which is sent unciphered; +2> if connected as an RN: +3> configure lower layers to apply integrity protection using the indicated algorithm and the KUPint key, for DRBs that are subsequently configured to apply integrity protection, if any; +2> consider AS security to be activated; +2> submit the SecurityModeComplete message to lower layers for transmission, upon which the procedure ends; +1> else: +2> continue using the configuration used prior to the reception of the SecurityModeCommand message, i.e. neither apply integrity protection nor ciphering. +2> submit the SecurityModeFailure message to lower layers for transmission, upon which the procedure ends; +5.3.5 RRC connection reconfiguration +5.3.5.1 General + +Figure 5.3.5.1-1: RRC connection reconfiguration, successful + +Figure 5.3.5.1-2: RRC connection reconfiguration, failure +The purpose of this procedure is to modify an RRC connection, e.g. to establish/ modify/ release RBs, to perform handover, to setup/ modify/ release measurements, to add/ modify/ release SCells. As part of the procedure, NAS dedicated information may be transferred from E-UTRAN to the UE. +5.3.5.2 Initiation +E-UTRAN may initiate the RRC connection reconfiguration procedure to a UE in RRC_CONNECTED. E-UTRAN applies the procedure as follows: +- the mobilityControlInfo is included only when AS-security has been activated, and SRB2 with at least one DRB are setup and not suspended; +- the establishment of RBs (other than SRB1, that is established during RRC connection establishment) is included only when AS security has been activated; +- the addition of SCells is performed only when AS security has been activated; +5.3.5.3 Reception of an RRCConnectionReconfiguration not including the mobilityControlInfo by the UE +If the RRCConnectionReconfiguration message does not include the mobilityControlInfo and the UE is able to comply with the configuration included in this message, the UE shall: +1> if this is the first RRCConnectionReconfiguration message after successful completion of the RRC Connection Re-establishment procedure: +2> re-establish PDCP for SRB2 and for all DRBs that are established, if any; +2> re-establish RLC for SRB2 and for all DRBs that are established, if any; +2> if the RRCConnectionReconfiguration message includes the fullConfig: +3> perform the radio configuration procedure as specified in section 5.3.5.8; +2> if the RRCConnectionReconfiguration message includes the radioResourceConfigDedicated: +3> perform the radio resource configuration procedure as specified in 5.3.10; +2> resume SRB2 and all DRBs that are suspended, if any; +NOTE 1: The handling of the radio bearers after the successful completion of the PDCP re-establishment, e.g. the re-transmission of unacknowledged PDCP SDUs (as well as the associated status reporting), the handling of the SN and the HFN, is specified in TS 36.323 [8]. +NOTE 2: The UE may discard SRB2 messages and data that it receives prior to completing the reconfiguration used to resume these bearers. +1> else: +2> if the RRCConnectionReconfiguration message includes the radioResourceConfigDedicated: +3> perform the radio resource configuration procedure as specified in 5.3.10; +NOTE 3: If the RRCConnectionReconfiguration message includes the establishment of radio bearers other than SRB1, the UE may start using these radio bearers immediately, i.e. there is no need to wait for an outstanding acknowledgment of the SecurityModeComplete message. +1> if the received RRCConnectionReconfiguration includes the sCellToReleaseList: +2> perform SCell release as specified in 5.3.10.3a; +1> if the received RRCConnectionReconfiguration includes the sCellToAddModList: +2> perform SCell addition or modification as specified in 5.3.10.3b; +1> if the RRCConnectionReconfiguration message includes the dedicatedInfoNASList: +2> forward each element of the dedicatedInfoNASList to upper layers in the same order as listed; +1> if the RRCConnectionReconfiguration message includes the measConfig: +2> perform the measurement configuration procedure as specified in 5.5.2; +1> perform the measurement identity autonomous removal as specified in 5.5.2.2a; +1> if the RRCConnectionReconfiguration message includes the reportProximityConfig: +2> perform the proximity indication in accordance with the received reportProximityConfig; +1> submit the RRCConnectionReconfigurationComplete message to lower layers for transmission using the new configuration, upon which the procedure ends; +5.3.5.4 Reception of an RRCConnectionReconfiguration including the mobilityControlInfo by the UE (handover) +If the RRCConnectionReconfiguration message includes the mobilityControlInfo and the UE is able to comply with the configuration included in this message, the UE shall: +1> stop timer T310, if running; +1> start timer T304 with the timer value set to t304, as included in the mobilityControlInfo; +1> if the carrierFreq is included: +2> consider the target PCell to be one on the frequency indicated by the carrierFreq with a physical cell identity indicated by the targetPhysCellId; +1> else: +2> consider the target PCell to be one on the frequency of the source PCell with a physical cell identity indicated by the targetPhysCellId; +1> start synchronising to the DL of the target PCell; +NOTE 1: The UE should perform the handover as soon as possible following the reception of the RRC message triggering the handover, which could be before confirming successful reception (HARQ and ARQ) of this message. +1> reset MAC; +1> re-establish PDCP for all RBs that are established; +NOTE 2: The handling of the radio bearers after the successful completion of the PDCP re-establishment, e.g. the re-transmission of unacknowledged PDCP SDUs (as well as the associated status reporting), the handling of the SN and the HFN, is specified in TS 36.323 [8]. +1> re-establish RLC for all RBs that are established; +1> configure lower layers to consider the SCell(s), if configured, to be in deactivated state; +1> apply the value of the newUE-Identity as the C-RNTI; +1> if the RRCConnectionReconfiguration message includes the fullConfig: +2> perform the radio configuration procedure as specified in section 5.3.5.8; +1> configure lower layers in accordance with the received radioResourceConfigCommon; +1> configure lower layers in accordance with any additional fields, not covered in the previous, if included in the received mobilityControlInfo; +1> if the RRCConnectionReconfiguration message includes the radioResourceConfigDedicated: +2> perform the radio resource configuration procedure as specified in 5.3.10; +1> if the keyChangeIndicator received in the securityConfigHO is set to TRUE: +2> update the KeNB key based on the fresh KASME key taken into use with the previous successful NAS SMC procedure, as specified in TS 33.401 [32]; +1> else: +2> update the KeNB key based on the current KeNB or the NH, using the nextHopChainingCount value indicated in the securityConfigHO, as specified in TS 33.401 [32]; +1> store the nextHopChainingCount value; +1> if the securityAlgorithmConfig is included in the securityConfigHO: +2> derive the KRRCint key associated with the integrityProtAlgorithm, as specified in TS 33.401 [32]; +2> if connected as an RN: +3> derive the KUPint key associated with the integrityProtAlgorithm, as specified in TS 33.401 [32]; +2> derive the KRRCenc key and the KUPenc key associated with the cipheringAlgorithm, as specified in TS 33.401 [32]; +1> else: +2> derive the KRRCint key associated with the current integrity algorithm, as specified in TS 33.401 [32]; +2> if connected as an RN: +3> derive the KUPint key associated with the current integrity algorithm, as specified in TS 33.401 [32]; +2> derive the KRRCenc key and the KUPenc key associated with the current ciphering algorithm, as specified in TS 33.401 [32]; +1> configure lower layers to apply the integrity protection algorithm and the KRRCint key, i.e. the integrity protection configuration shall be applied to all subsequent messages received and sent by the UE, including the message used to indicate the successful completion of the procedure; +1> configure lower layers to apply the ciphering algorithm, the KRRCenc key and the KUPenc key, i.e. the ciphering configuration shall be applied to all subsequent messages received and sent by the UE, including the message used to indicate the successful completion of the procedure; +1> if connected as an RN: +2> configure lower layers to apply the integrity protection algorithm and the KUPint key, for current or subsequently established DRBs that are configured to apply integrity protection, if any; +1> if the received RRCConnectionReconfiguration includes the sCellToReleaseList: +2> perform SCell release as specified in 5.3.10.3a; +1> if the received RRCConnectionReconfiguration includes the sCellToAddModList: +2> perform SCell addition or modification as specified in 5.3.10.3b; +1> perform the measurement related actions as specified in 5.5.6.1; +1> if the RRCConnectionReconfiguration message includes the measConfig: +2> perform the measurement configuration procedure as specified in 5.5.2; +1> perform the measurement identity autonomous removal as specified in 5.5.2.2a; +1> release reportProximityConfig and clear any associated proximity status reporting timer; +1> if the RRCConnectionReconfiguration message includes the reportProximityConfig: +2> perform the proximity indication in accordance with the received reportProximityConfig; +1> set the content of RRCConnectionReconfigurationComplete message as follows: +2> if the UE has radio link failure or handover failure information available in VarRLF-Report and plmn-Identity stored in VarRLF-Report is equal to the RPLMN: +3> include rlf-InfoAvailable; +2> if the UE has logged measurements available for E-UTRA and plmn-Identity stored in VarLogMeasReport is equal to the RPLMN: +3> include the logMeasAvailable; +1> submit the RRCConnectionReconfigurationComplete message to lower layers for transmission; +1> if MAC successfully completes the random access procedure: +2> stop timer T304; +2> apply the parts of the CQI reporting configuration, the scheduling request configuration and the sounding RS configuration that do not require the UE to know the SFN of the target PCell, if any; +2> apply the parts of the measurement and the radio resource configuration that require the UE to know the SFN of the target PCell (e.g. measurement gaps, periodic CQI reporting, scheduling request configuration, sounding RS configuration), if any, upon acquiring the SFN of the target PCell; +NOTE 3: Whenever the UE shall setup or reconfigure a configuration in accordance with a field that is received it applies the new configuration, except for the cases addressed by the above statements. +2> the procedure ends; +NOTE 4: The UE is not required to determine the SFN of the target PCell by acquiring system information from that cell before performing RACH access in the target PCell. +5.3.5.5 Reconfiguration failure +The UE shall: +1> if the UE is unable to comply with (part of) the configuration included in the RRCConnectionReconfiguration message: +2> continue using the configuration used prior to the reception of RRCConnectionReconfiguration message; +2> if security has not been activated: +3> perform the actions upon leaving RRC_CONNECTED as specified in 5.3.12, with release cause other; +2> else: +3> initiate the connection re-establishment procedure as specified in 5.3.7, upon which the connection reconfiguration procedure ends; +NOTE 1: The UE may apply above failure handling also in case the RRCConnectionReconfiguration message causes a protocol error for which the generic error handling as defined in 5.7 specifies that the UE shall ignore the message. +NOTE 2: If the UE is unable to comply with part of the configuration, it does not apply any part of the configuration, i.e. there is no partial success/ failure. +5.3.5.6 T304 expiry (handover failure) +The UE shall: +1> if T304 expires (handover failure): +NOTE: Following T304 expiry any dedicated preamble, if provided within the rach-ConfigDedicated, is not available for use by the UE anymore. +2> revert back to the configuration used in the source PCell, excluding the configuration configured by the physicalConfigDedicated, the mac-MainConfig and the sps-Config; +2> store the following handover failure information in VarRLF-Report by setting its fields as follows: +3> clear the information included in VarRLF-Report, if any; +3> set the plmn-Identity to the RPLMN; +3> set the measResultLastServCell to include the RSRP and RSRQ, if available, of the source PCell based on measurements collected up to the moment the UE detected handover failure; +3> set the measResultNeighCells to include the best measured cells, other than the source PCell, ordered such that the best cell is listed first, and based on measurements collected up to the moment the UE detected handover failure, and set its fields as follows; +4> if the UE was configured to perform measurements for one or more EUTRA frequencies, include the measResultListEUTRA; +4> if the UE was configured to perform measurement reporting for one or more neighbouring UTRA frequencies, include the measResultListUTRA; +4> if the UE was configured to perform measurement reporting for one or more neighbouring GERAN frequencies, include the measResultListGERAN; +4> if the UE was configured to perform measurement reporting for one or more neighbouring CDMA2000 frequencies, include the measResultsCDMA2000; +NOTE 1: The measured quantities are filtered by the L3 filter as configured in the mobility measurement configuration. The measurements are based on the time domain measurement resource restriction, if configured. Blacklisted cells are not required to be reported. +3> if detailed location information is available, set the content of the locationInfo as follows: +4> include the locationCoordinates; +4> include the horizontalVelocity, if available; +3> set the failedPCellId to the global cell identity, if available, and otherwise to the physical cell identity and carrier frequency of the target PCell of the failed handover; +3> include previousPCellId and set it to the global cell identity of the PCell where the last RRCConnectionReconfiguration message including mobilityControlInfo was received; +3> set the timeConnFailure to the elapsed time since reception of the last RRCConnectionReconfiguration message including the mobilityControlInfo; +3> set the connectionFailureType to 'hof'; +2> initiate the connection re-establishment procedure as specified in 5.3.7, upon which the RRC connection reconfiguration procedure ends; +The UE may discard the handover failure information, i.e. release the UE variable VarRLF-Report, 48 hours after the failure is detected, upon power off or upon detach. +NOTE 2: E-UTRAN may retrieve the handover failure information using the UE information procedure with rlf-ReportReq set to true, as specified in 5.6.5.3. +5.3.5.7 Void +5.3.5.8 Radio Configuration involving full configuration option +The UE shall: +1> release/ clear all current dedicated radio configurations except the C-RNTI, the security configuration and the PDCP, RLC, logical channel configurations for the RBs and the logged measurement configuration; +NOTE 1: Radio configuration is not just the resource configuration but includes other configurations like MeasConfig and OtherConfig. +1> if the RRCConnectionReconfiguration message includes the mobilityControlInfo: +2> release/ clear all current common radio configurations; +2> use the default values specified in 9.2.5 for timer T310, T311 and constant N310, N311; +1> else: +2> use values for timers T301, T310, T311 and constants N310, N311, as included in ue-TimersAndConstants received in SystemInformationBlockType2; +1> apply the default physical channel configuration as specified in 9.2.4; +1> apply the default semi-persistent scheduling configuration as specified in 9.2.3; +1> apply the default MAC main configuration as specified in 9.2.2; +1> for each srb-Identity value included in the srb-ToAddModList (SRB reconfiguration): +2> apply the specified configuration defined in 9.1.2 for the corresponding SRB; +2> apply the corresponding default RLC configuration for the SRB specified in 9.2.1.1 for SRB1 or in 9.2.1.2 for SRB2; +2> apply the corresponding default logical channel configuration for the SRB as specified in 9.2.1.1 for SRB1 or in 9.2.1.2 for SRB2; +NOTE 2: This is to get the SRBs (SRB1 and SRB2 for handover and SRB2 for reconfiguration after reestablishment) to a known state from which the reconfiguration message can do further configuration. +1> for each eps-BearerIdentity value included in the drb-ToAddModList that is part of the current UE configuration: +2> release the PDCP entity; +2> release the RLC entity or entities; +2> release the DTCH logical channel; +2> release the drb-identity; +NOTE 3: This will retain the eps-bearerIdentity but remove the DRBs including drb-identity of these bearers from the current UE configuration and trigger the setup of the DRBs within the AS in Section 5.3.10.3 using the new configuration. The eps-bearerIdentity acts as the anchor for associating the released and re-setup DRB. +1> for each eps-BearerIdentity value that is part of the current UE configuration but not part of the drb-ToAddModList: +2> perform DRB release as specified in 5.3.10.2; +5.3.6 Counter check +5.3.6.1 General + +Figure 5.3.6.1-1: Counter check procedure +The counter check procedure is used by E-UTRAN to request the UE to verify the amount of data sent/ received on each DRB. More specifically, the UE is requested to check if, for each DRB, the most significant bits of the COUNT match with the values indicated by E-UTRAN. +NOTE: The procedure enables E-UTRAN to detect packet insertion by an intruder (a 'man in the middle'). +5.3.6.2 Initiation +E-UTRAN initiates the procedure by sending a CounterCheck message. +NOTE: E-UTRAN may initiate the procedure when any of the COUNT values reaches a specific value. +5.3.6.3 Reception of the CounterCheck message by the UE +Upon receiving the CounterCheck message, the UE shall: +1> for each DRB that is established: +2> if no COUNT exists for a given direction (uplink or downlink) because it is a uni-directional bearer configured only for the other direction: +3> assume the COUNT value to be 0 for the unused direction; +2> if the drb-Identity is not included in the drb-CountMSB-InfoList: +3> include the DRB in the drb-CountInfoList in the CounterCheckResponse message by including the drb-Identity, the count-Uplink and the count-Downlink set to the value of the corresponding COUNT; +2> else if, for at least one direction, the most significant bits of the COUNT are different from the value indicated in the drb-CountMSB-InfoList: +3> include the DRB in the drb-CountInfoList in the CounterCheckResponse message by including the drb-Identity, the count-Uplink and the count-Downlink set to the value of the corresponding COUNT; +1> for each DRB that is included in the drb-CountMSB-InfoList in the CounterCheck message that is not established: +2> include the DRB in the drb-CountInfoList in the CounterCheckResponse message by including the drb-Identity, the count-Uplink and the count-Downlink with the most significant bits set identical to the corresponding values in the drb-CountMSB-InfoList and the least significant bits set to zero; +1> submit the CounterCheckResponse message to lower layers for transmission upon which the procedure ends; +5.3.7 RRC connection re-establishment +5.3.7.1 General + +Figure 5.3.7.1-1: RRC connection re-establishment, successful + +Figure 5.3.7.1-2: RRC connection re-establishment, failure +The purpose of this procedure is to re-establish the RRC connection, which involves the resumption of SRB1 operation, the re-activation of security and the configuration of only the PCell. +A UE in RRC_CONNECTED, for which security has been activated, may initiate the procedure in order to continue the RRC connection. The connection re-establishment succeeds only if the concerned cell is prepared i.e. has a valid UE context. In case E-UTRAN accepts the re-establishment, SRB1 operation resumes while the operation of other radio bearers remains suspended. If AS security has not been activated, the UE does not initiate the procedure but instead moves to RRC_IDLE directly. +E-UTRAN applies the procedure as follows: +- to reconfigure SRB1 and to resume data transfer only for this RB; +- to re-activate AS security without changing algorithms. +5.3.7.2 Initiation +The UE shall only initiate the procedure when AS security has been activated. The UE initiates the procedure when one of the following conditions is met: +1> upon detecting radio link failure, in accordance with 5.3.11; or +1> upon handover failure, in accordance with 5.3.5.6; or +1> upon mobility from E-UTRA failure, in accordance with 5.4.3.5; or +1> upon integrity check failure indication from lower layers; or +1> upon an RRC connection reconfiguration failure, in accordance with 5.3.5.5; +Upon initiation of the procedure, the UE shall: +1> stop timer T310, if running; +1> start timer T311; +1> suspend all RBs except SRB0; +1> reset MAC; +1> release the SCell(s), if configured, in accordance with 5.3.10.3a; +1> apply the default physical channel configuration as specified in 9.2.4; +1> apply the default semi-persistent scheduling configuration as specified in 9.2.3; +1> apply the default MAC main configuration as specified in 9.2.2; +1> release reportProximityConfig and clear any associated proximity status reporting timer; +1> release measSubframePatternPCell, if configured; +1> if connected as an RN and configured with an RN subframe configuration: +2> release the RN subframe configuration; +1> perform cell selection in accordance with the cell selection process as specified in TS 36.304 [4]; +5.3.7.3 Actions following cell selection while T311 is running +Upon selecting a suitable E-UTRA cell, the UE shall: +1> stop timer T311; +1> start timer T301; +1> apply the timeAlignmentTimerCommon included in SystemInformationBlockType2; +1> initiate transmission of the RRCConnectionReestablishmentRequest message in accordance with 5.3.7.4; +NOTE: This procedure applies also if the UE returns to the source PCell. +Upon selecting an inter-RAT cell, the UE shall: +1> perform the actions upon leaving RRC_CONNECTED as specified in 5.3.12, with release cause 'RRC connection failure'; +5.3.7.4 Actions related to transmission of RRCConnectionReestablishmentRequest message +If the procedure was initiated due to radio link failure or handover failure, the UE shall: +1> set the reestablishmentCellId in the VarRLF-Report to the global cell identity of the selected cell; +The UE shall set the contents of RRCConnectionReestablishmentRequest message as follows: +1> set the ue-Identity as follows: +2> set the c-RNTI to the C-RNTI used in the source PCell (handover and mobility from E-UTRA failure) or used in the PCell in which the trigger for the re-establishment occurred (other cases); +2> set the physCellId to the physical cell identity of the source PCell (handover and mobility from E-UTRA failure) or of the PCell in which the trigger for the re-establishment occurred (other cases); +2> set the shortMAC-I to the 16 least significant bits of the MAC-I calculated: +3> over the ASN.1 encoded as per section 8 (i.e., a multiple of 8 bits) VarShortMAC-Input; +3> with the KRRCint key and integrity protection algorithm that was used in the source PCell (handover and mobility from E-UTRA failure) or of the PCell in which the trigger for the re-establishment occurred (other cases); and +3> with all input bits for COUNT, BEARER and DIRECTION set to binary ones; +1> set the reestablishmentCause as follows: +2> if the re-establishment procedure was initiated due to reconfiguration failure as specified in 5.3.5.5 (the UE is unable to comply with the reconfiguration): +3> set the reestablishmentCause to the value reconfigurationFailure; +2> else if the re-establishment procedure was initiated due to handover failure as specified in 5.3.5.6 (intra-LTE handover failure) or 5.4.3.5 (inter-RAT mobility from EUTRA failure): +3> set the reestablishmentCause to the value handoverFailure; +2> else: +3> set the reestablishmentCause to the value otherFailure; +The UE shall submit the RRCConnectionReestablishmentRequest message to lower layers for transmission. +5.3.7.5 Reception of the RRCConnectionReestablishment by the UE +NOTE: Prior to this, lower layer signalling is used to allocate a C-RNTI. For further details see TS 36.321 [6]; +The UE shall: +1> stop timer T301; +1> consider the current cell to be the PCell; +1> re-establish PDCP for SRB1; +1> re-establish RLC for SRB1; +1> perform the radio resource configuration procedure in accordance with the received radioResourceConfigDedicated and as specified in 5.3.10; +1> resume SRB1; +NOTE: E-UTRAN should not transmit any message on SRB1 prior to receiving the RRCConnectionReestablishmentComplete message. +1> update the KeNB key based on the KASME key to which the current KeNB is associated, using the nextHopChainingCount value indicated in the RRCConnectionReestablishment message, as specified in TS 33.401 [32]; +1> store the nextHopChainingCount value; +1> derive the KRRCint key associated with the previously configured integrity algorithm, as specified in TS 33.401 [32]; +1> derive the KRRCenc key and the KUPenc key associated with the previously configured ciphering algorithm, as specified in TS 33.401 [32]; +1> if connected as an RN: +2> derive the KUPint key associated with the previously configured integrity algorithm, as specified in TS 33.401 [32]; +1> configure lower layers to activate integrity protection using the previously configured algorithm and the KRRCint key immediately, i.e., integrity protection shall be applied to all subsequent messages received and sent by the UE, including the message used to indicate the successful completion of the procedure; +1> if connected as an RN: +2> configure lower layers to apply integrity protection using the previously configured algorithm and the KUPint key, for subsequently resumed or subsequently established DRBs that are configured to apply integrity protection, if any; +1> configure lower layers to apply ciphering using the previously configured algorithm, the KRRCenc key and the KUPenc key immediately, i.e., ciphering shall be applied to all subsequent messages received and sent by the UE, including the message used to indicate the successful completion of the procedure; +1> set the content of RRCConnectionReestablishmentComplete message as follows: +2> if the UE has radio link failure or handover failure information available in VarRLF-Report and plmn-Identity stored in VarRLF-Report is equal to the RPLMN: +3> include the rlf-InfoAvailable; +2> if the UE has logged measurements available for E-UTRA and plmn-Identity stored in VarLogMeasReport is equal to the RPLMN: +3> include the logMeasAvailable; +1> perform the measurement related actions as specified in 5.5.6.1; +1> perform the measurement identity autonomous removal as specified in 5.5.2.2a; +1> submit the RRCConnectionReestablishmentComplete message to lower layers for transmission, upon which the procedure ends; +5.3.7.6 T311 expiry +Upon T311 expiry, the UE shall: +1> perform the actions upon leaving RRC_CONNECTED as specified in 5.3.12, with release cause 'RRC connection failure'; +5.3.7.7 T301 expiry or selected cell no longer suitable +The UE shall: +1> if timer T301 expires; or +1> if the selected cell becomes no longer suitable according to the cell selection criteria as specified in TS 36.304 [4]: +2> perform the actions upon leaving RRC_CONNECTED as specified in 5.3.12, with release cause 'RRC connection failure'; +5.3.7.8 Reception of RRCConnectionReestablishmentReject by the UE +Upon receiving the RRCConnectionReestablishmentReject message, the UE shall: +1> perform the actions upon leaving RRC_CONNECTED as specified in 5.3.12, with release cause 'RRC connection failure'; +5.3.8 RRC connection release +5.3.8.1 General + +Figure 5.3.8.1-1: RRC connection release, successful +The purpose of this procedure is to release the RRC connection, which includes the release of the established radio bearers as well as all radio resources. +5.3.8.2 Initiation +E-UTRAN initiates the RRC connection release procedure to a UE in RRC_CONNECTED. +5.3.8.3 Reception of the RRCConnectionRelease by the UE +The UE shall: +1> delay the following actions defined in this sub-clause 60 ms from the moment the RRCConnectionRelease message was received or optionally when lower layers indicate that the receipt of the RRCConnectionRelease message has been successfully acknowledged, whichever is earlier; +1> if the RRCConnectionRelease message includes the idleModeMobilityControlInfo: +2> store the cell reselection priority information provided by the idleModeMobilityControlInfo; +2> if the t320 is included: +3> start timer T320, with the timer value set according to the value of t320; +1> else: +2> apply the cell reselection priority information broadcast in the system information; +1> if the releaseCause received in the RRCConnectionRelease message indicates loadBalancingTAURequired: +2> perform the actions upon leaving RRC_CONNECTED as specified in 5.3.12, with release cause 'load balancing TAU required'; +1> else if the releaseCause received in the RRCConnectionRelease message indicates cs-FallbackHighPriority: +2> perform the actions upon leaving RRC_CONNECTED as specified in 5.3.12, with release cause 'CS Fallback High Priority'; +1> else: +2> if the extendedWaitTime is present and the UE supports delay tolerant access: +3> forward the extendedWaitTime to upper layers; +2> perform the actions upon leaving RRC_CONNECTED as specified in 5.3.12, with release cause other'; +5.3.8.4 T320 expiry +The UE shall: +1> if T320 expires: +2> if stored, discard the cell reselection priority information provided by the idleModeMobilityControlInfo or inherited from another RAT; +2> apply the cell reselection priority information broadcast in the system information; +5.3.9 RRC connection release requested by upper layers +5.3.9.1 General +The purpose of this procedure is to release the RRC connection. Access to the current PCell may be barred as a result of this procedure. +NOTE: Upper layers invoke the procedure, e.g. upon determining that the network has failed an authentication check, see TS 24.301 [35]. +5.3.9.2 Initiation +The UE initiates the procedure when upper layers request the release of the RRC connection. The UE shall not initiate the procedure for power saving purposes. +The UE shall: +1> if the upper layers indicate barring of the PCell: +2> treat the PCell used prior to entering RRC_IDLE as barred according to TS 36.304 [4]; +1> perform the actions upon leaving RRC_CONNECTED as specified in 5.3.12, with release cause 'other'; +5.3.10 Radio resource configuration +5.3.10.0 General +The UE shall: +1> if the received radioResourceConfigDedicated includes the srb-ToAddModList: +2> perform the SRB addition or reconfiguration as specified in 5.3.10.1; +1> if the received radioResourceConfigDedicated includes the drb-ToReleaseList: +2> perform DRB release as specified in 5.3.10.2; +1> if the received radioResourceConfigDedicated includes the drb-ToAddModList: +2> perform DRB addition or reconfiguration as specified in 5.3.10.3; +1> if the received radioResourceConfigDedicated includes the mac-MainConfig: +2> perform MAC main reconfiguration as specified in 5.3.10.4; +1> if the received radioResourceConfigDedicated includes sps-Config: +2> perform SPS reconfiguration according to 5.3.10.5; +1> if the received radioResourceConfigDedicated includes the physicalConfigDedicated: +2> reconfigure the physical channel configuration as specified in 5.3.10.6. +1> if the received radioResourceConfigDedicated includes the rlf-TimersAndConstants: +2> reconfigure the values of timers and constants as specified in 5.3.10.7; +1> if the received radioResourceConfigDedicated includes the measSubframePatternPCell: +2> reconfigure the time domain measurement resource restriction for the serving cell as specified in 5.3.10.8; +5.3.10.1 SRB addition/ modification +The UE shall: +1> for each srb-Identity value included in the srb-ToAddModList that is not part of the current UE configuration (SRB establishment): +2> apply the specified configuration defined in 9.1.2 for the corresponding SRB; +2> establish a PDCP entity and configure it with the current security configuration, if applicable; +2> establish an RLC entity in accordance with the received rlc-Config; +2> establish a DCCH logical channel in accordance with the received logicalChannelConfig and with the logical channel identity set in accordance with 9.1.2; +1> for each srb-Identity value included in the srb-ToAddModList that is part of the current UE configuration (SRB reconfiguration): +2> reconfigure the RLC entity in accordance with the received rlc-Config; +2> reconfigure the DCCH logical channel in accordance with the received logicalChannelConfig; +5.3.10.2 DRB release +The UE shall: +1> for each drb-Identity value included in the drb-ToReleaseList that is part of the current UE configuration (DRB release); or +1> for each drb-identity value that is to be released as the result of full configuration option according to 5.3.5.8: +2> release the PDCP entity; +2> release the RLC entity or entities; +2> release the DTCH logical channel; +1> if the procedure was triggered due to handover: +2> indicate the release of the DRB(s) and the eps-BearerIdentity of the released DRB(s) to upper layers after successful handover; +1> else: +2> indicate the release of the DRB(s) and the eps-BearerIdentity of the released DRB(s) to upper layers immediately. +NOTE: The UE does not consider the message as erroneous if the drb-ToReleaseList includes any drb-Identity value that is not part of the current UE configuration. +5.3.10.3 DRB addition/ modification +The UE shall: +1> for each drb-Identity value included in the drb-ToAddModList that is not part of the current UE configuration (DRB establishment including the case when full configuration option is used): +2> establish a PDCP entity and configure it with the current security configuration and in accordance with the received pdcp-Config; +2> establish an RLC entity or entities in accordance with the received rlc-Config; +2> establish a DTCH logical channel in accordance with the received logicalChannelIdentity and the received logicalChannelConfig; +1> if the RRCConnectionReconfiguration message includes the fullConfig IE: +2> associate the established DRB with corresponding included eps-BearerIdentity; +1> else: +2> indicate the establishment of the DRB(s) and the eps-BearerIdentity of the established DRB(s) to upper layers; +1> for each drb-Identity value included in the drb-ToAddModList that is part of the current UE configuration (DRB reconfiguration): +2> if the pdcp-Config is included: +3> reconfigure the PDCP entity in accordance with the received pdcp-Config; +2> if the rlc-Config is included: +3> reconfigure the RLC entity or entities in accordance with the received rlc-Config; +2> if the logicalChannelConfig is included: +3> reconfigure the DTCH logical channel in accordance with the received logicalChannelConfig; +NOTE: Removal and addition of the same drb-Identity in single radioResourceConfiguration is not supported. +5.3.10.3a SCell release +The UE shall: +1> if the release is triggered by reception of the sCellToReleaseList: +2> for each sCellIndex value included in the sCellToReleaseList: +3> if the current UE configuration includes an SCell with value sCellIndex: +4> release the SCell; +1> if the release is triggered by RRC connection re-establishment: +2> release all SCells that are part of the current UE configuration; +5.3.10.3b SCell addition/ modification +The UE shall: +1> for each sCellIndex value included in the sCellToAddModList that is not part of the current UE configuration (SCell addition): +2> add the SCell, corresponding to the cellIdentification, in accordance with the received radioResourceConfigCommonSCell and radioResourceConfigDedicatedSCell; +2> configure lower layers to consider the SCell to be in deactivated state; +1> for each sCellIndex value included in the sCellToAddModList that is part of the current UE configuration (SCell modification): +2> modify the SCell configuration in accordance with the received radioResourceConfigDedicatedSCell; +5.3.10.4 MAC main reconfiguration +The UE shall: +1> reconfigure the MAC main configuration in accordance with the received mac-MainConfig; +5.3.10.5 Semi-persistent scheduling reconfiguration +The UE shall: +1> reconfigure the semi-persistent scheduling in accordance with the received sps-Config: +5.3.10.6 Physical channel reconfiguration +The UE shall: +1> if the antennaInfo-r10 is included in the received physicalConfigDedicated and the previous version of this field that was received by the UE was antennaInfo (without suffix i.e. the version defined in REL-8): +2> apply the default antenna configuration as specified in section 9.2.4; +1> if the cqi-ReportConfig-r10 is included in the received physicalConfigDedicated and the previous version of this field that was received by the UE was cqi-ReportConfig (without suffix i.e. the version defined in REL-8): +2> apply the default CQI reporting configuration as specified in 9.2.4; +NOTE: Application of the default configuration involves release of all extensions introduced in REL-9 and later. +1> reconfigure the physical channel configuration in accordance with the received physicalConfigDedicated; +1> if the antennaInfo is included and set to explicitValue: +2> if the configured transmissionMode is not tm3 or tm4 or tm8 or tm9; or +2> if the configured transmissionMode is tm8 and pmi-RI-Report is not present; or +2> if the configured transmissionMode is tm9 and pmi-RI-Report is not present; or +2> if the configured transmissionMode is tm9 and pmi-RI-Report is present and antennaPortsCount within csi-RS is set to an1: +3> release ri-ConfigIndex in cqi-ReportPeriodic, if previously configured; +1> else if the antennaInfo is included and set to defaultValue: +2> release ri-ConfigIndex in cqi-ReportPeriodic, if previously configured; +5.3.10.7 Radio Link Failure Timers and Constants reconfiguration +The UE shall: +1> if the received rlf-TimersAndConstants is set to release: +2> use values for timers T301, T310, T311 and constants N310, N311, as included in ue-TimersAndConstants received in SystemInformationBlockType2; +1> else: +2> reconfigure the value of timers and constants in accordance with received rlf-TimersAndConstants; +5.3.10.8 Time domain measurement resource restriction for serving cell +The UE shall: +1> if the received measSubframePatternPCell is set to release: +2> release the time domain measurement resource restriction for the PCell, if previously configured +1> else: +2> apply the time domain measurement resource restriction for the PCell in accordance with the received measSubframePatternPCell; +5.3.11 Radio link failure related actions +5.3.11.1 Detection of physical layer problems in RRC_CONNECTED +The UE shall: +1> upon receiving N310 consecutive "out-of-sync" indications for the PCell from lower layers while neither T300, T301, T304 nor T311 is running: +2> start timer T310; +NOTE: Physical layer monitoring and related autonomous actions do not apply to SCells. + +5.3.11.2 Recovery of physical layer problems +Upon receiving N311 consecutive "in-sync" indications for the PCell from lower layers while T310 is running, the UE shall: +1> stop timer T310; +NOTE 1: In this case, the UE maintains the RRC connection without explicit signalling, i.e. the UE maintains the entire radio resource configuration. +NOTE 2: Periods in time where neither "in-sync" nor "out-of-sync" is reported by layer 1 do not affect the evaluation of the number of consecutive "in-sync" or "out-of-sync" indications. +5.3.11.3 Detection of radio link failure +The UE shall: +1> upon T310 expiry; or +1> upon random access problem indication from MAC while neither T300, T301, T304 nor T311 is running; or +1> upon indication from RLC that the maximum number of retransmissions has been reached: +2> consider radio link failure to be detected; +2> store the following radio link failure information in the VarRLF-Report by setting its fields as follows: +3> clear the information included in VarRLF-Report, if any; +3> set the plmn-Identity to the RPLMN; +3> set the measResultLastServCell to include the RSRP and RSRQ, if available, of the PCell based on measurements collected up to the moment the UE detected radio link failure; +3> set the measResultNeighCells to include the best measured cells, other than the PCell, ordered such that the best cell is listed first, and based on measurements collected up to the moment the UE detected radio link failure, and set its fields as follows; +4> if the UE was configured to perform measurements for one or more EUTRA frequencies, include the measResultListEUTRA; +4> if the UE was configured to perform measurement reporting for one or more neighbouring UTRA frequencies, include the measResultListUTRA; +4> if the UE was configured to perform measurement reporting for one or more neighbouring GERAN frequencies, include the measResultListGERAN; +4> if the UE was configured to perform measurement reporting for one or more neighbouring CDMA2000 frequencies, include the measResultsCDMA2000; +NOTE: The measured quantities are filtered by the L3 filter as configured in the mobility measurement configuration. The measurements are based on the time domain measurement resource restriction, if configured. Blacklisted cells are not required to be reported. +3> if detailed location information is available, set the content of the locationInfo as follows: +4> include the locationCoordinates; +4> include the horizontalVelocity, if available; +3> set the failedPCellId to the global cell identity, if available, and otherwise to the physical cell identity and carrier frequency of the PCell where radio link failure is detected; +3> if an RRCConnectionReconfiguration message including the mobilityControlInfo concerning an intra E-UTRA handover was received before the connection failure: +4> include previousPCellId and set it to the global cell identity of the PCell where the last RRCConnectionReconfiguration including the mobilityControlInfo message was received; +4> set the timeConnFailure to the elapsed time since reception of the last RRCConnectionReconfiguration message including the mobilityControlInfo; +3> set the connectionFailureType to rlf; +2> if AS security has not been activated: +3> perform the actions upon leaving RRC_CONNECTED as specified in 5.3.12, with release cause 'other'; +2> else: +3> initiate the connection re-establishment procedure as specified in 5.3.7; +The UE may discard the radio link failure information, i.e. release the UE variable VarRLF-Report 48, hours after the radio link failure is detected, upon power off or upon detach. +5.3.12 UE actions upon leaving RRC_CONNECTED +Upon leaving RRC_CONNECTED, the UE shall: +1> reset MAC; +1> stop all timers that are running except T320 and T330; +1> release all radio resources, including release of the RLC entity, the MAC configuration and the associated PDCP entity for all established RBs; +1> indicate the release of the RRC connection to upper layers together with the release cause; +1> if leaving RRC_CONNECTED was triggered neither by reception of the MobilityFromEUTRACommand message nor by selecting an inter-RAT cell while T311 was running: +2> enter RRC_IDLE and perform procedures as specified in TS 36.304 [4, 5.2.7]; +5.3.13 UE actions upon PUCCH/ SRS release request +Upon receiving a PUCCH/ SRS release request from lower layers, the UE shall: +1> apply the default physical channel configuration for cqi-ReportConfig as specified in 9.2.4 and release cqi-ReportConfigSCell, for each SCell that is configured, if any; +1> apply the default physical channel configuration for soundingRS-UL-ConfigDedicated as specified in 9.2.4, for all serving cells; +1> apply the default physical channel configuration for schedulingRequestConfig as specified in 9.2.4; +NOTE: Upon PUCCH/ SRS release request, the UE does not modify the soundingRS-UL-ConfigDedicatedAperiodic i.e. it does not apply the default for this field (release). +5.3.14 Proximity indication +5.3.14.1 General + +Figure 5.3.14.1-1: Proximity indication +The purpose of this procedure is to indicate that the UE is entering or leaving the proximity of one or more CSG member cells. The detection of proximity is based on an autonomous search function as defined in TS 36.304 [4]. +5.3.14.2 Initiation +A UE in RRC_CONNECTED shall: +1> if the UE enters the proximity of one or more CSG member cell(s) on an E-UTRA frequency while proximity indication is enabled for such E-UTRA cells; or +1> if the UE enters the proximity of one or more CSG member cell(s) on an UTRA frequency while proximity indication is enabled for such UTRA cells; or +1> if the UE leaves the proximity of all CSG member cell(s) on an E-UTRA frequency while proximity indication is enabled for such E-UTRA cells; or +1> if the UE leaves the proximity of all CSG member cell(s) on an UTRA frequency while proximity indication is enabled for such UTRA cells: +2> if the UE has previously not transmitted a ProximityIndication for the RAT and frequency during the current RRC connection, or if more than 5 s has elapsed since the UE has last transmitted a ProximityIndication (either entering or leaving) for the RAT and frequency: +3> initiate transmission of the ProximityIndication message in accordance with 5.3.14.3; +NOTE: In the conditions above, "if the UE enters the proximity of one or more CSG member cell(s)" includes the case of already being in the proximity of such cell(s) at the time proximity indication for the corresponding RAT is enabled. +5.3.14.3 Actions related to transmission of ProximityIndication message +The UE shall set the contents of ProximityIndication message as follows: +1> if the UE applies the procedure to report entering the proximity of CSG member cell(s): +2> set type to entering; +1> else if the UE applies the procedure to report leaving the proximity of CSG member cell(s): +2> set type to leaving; +1> if the proximity indication was triggered for one or more CSG member cell(s) on an E-UTRA frequency: +2> set the carrierFreq to eutra with the value set to the E-ARFCN value of the E-UTRA cell(s) for which proximity indication was triggered; +1> else if the proximity indication was triggered for one or more CSG member cell(s) on a UTRA frequency: +2> set the carrierFreq to utra with the value set to the ARFCN value of the UTRA cell(s) for which proximity indication was triggered; +The UE shall submit the ProximityIndication message to lower layers for transmission. +5.4 Inter-RAT mobility +5.4.1 Introduction +The general principles of connected mode mobility are described in 5.3.1.3. The general principles of the security handling upon connected mode mobility are described in 5.3.1.2. +For the (network controlled) inter RAT mobility from E-UTRA for a UE in RRC_CONNECTED, a single procedure is defined that supports both handover, cell change order with optional network assistance (NACC) and enhanced CS fallback to CDMA2000 1xRTT. In case of mobility to CDMA2000, the eNB decides when to move to the other RAT while the target RAT determines to which cell the UE shall move. +5.4.2 Handover to E-UTRA +5.4.2.1 General + +Figure 5.4.2.1-1: Handover to E-UTRA, successful +The purpose of this procedure is to, under the control of the network, transfer a connection between the UE and another Radio Access Network (e.g. GERAN or UTRAN) to E-UTRAN. +The handover to E-UTRA procedure applies when SRBs, possibly in combination with DRBs, are established in another RAT. Handover from UTRAN to E-UTRAN applies only after integrity has been activated in UTRAN. +5.4.2.2 Initiation +The RAN using another RAT initiates the Handover to E-UTRA procedure, in accordance with the specifications applicable for the other RAT, by sending the RRCConnectionReconfiguration message via the radio access technology from which the inter-RAT handover is performed. +E-UTRAN applies the procedure as follows: +- to activate ciphering, possibly using NULL algorithm, if not yet activated in the other RAT; +- to establish SRB1, SRB2 and one or more DRBs, i.e. at least the DRB associated with the default EPS bearer is established; +5.4.2.3 Reception of the RRCConnectionReconfiguration by the UE +If the UE is able to comply with the configuration included in the RRCConnectionReconfiguration message, the UE shall: +1> apply the default physical channel configuration as specified in 9.2.4; +1> apply the default semi-persistent scheduling configuration as specified in 9.2.3; +1> apply the default MAC main configuration as specified in 9.2.2; +1> start timer T304 with the timer value set to t304, as included in the mobilityControlInfo; +1> consider the target PCell to be one on the frequency indicated by the carrierFreq with a physical cell identity indicated by the targetPhysCellId; +1> start synchronising to the DL of the target PCell; +1> set the C-RNTI to the value of the newUE-Identity; +1> for the target PCell, apply the downlink bandwidth indicated by the dl-Bandwidth; +1> for the target PCell, apply the uplink bandwidth indicated by (the absence or presence of) the ul-Bandwidth; +1> configure lower layers in accordance with the received radioResourceConfigCommon; +1> configure lower layers in accordance with any additional fields, not covered in the previous, if included in the received mobilityControlInfo; +1> perform the radio resource configuration procedure as specified in 5.3.10; +1> forward the nas-SecurityParamToEUTRA to the upper layers; +1> derive the KeNB key, as specified in TS 33.401 [32]; +1> derive the KRRCint key associated with the integrityProtAlgorithm, as specified in TS 33.401 [32]; +1> derive the KRRCenc key and the KUPenc key associated with the cipheringAlgorithm, as specified in TS 33.401 [32]; +1> configure lower layers to apply the indicated integrity protection algorithm and the KRRCint key immediately, i.e. the indicated integrity protection configuration shall be applied to all subsequent messages received and sent by the UE, including the message used to indicate the successful completion of the procedure; +1> configure lower layers to apply the indicated ciphering algorithm, the KRRCenc key and the KUPenc key immediately, i.e. the indicated ciphering configuration shall be applied to all subsequent messages received and sent by the UE, including the message used to indicate the successful completion of the procedure; +1> if the received RRCConnectionReconfiguration includes the sCellToAddModList: +2> perform SCell addition as specified in 5.3.10.3b; +1> if the RRCConnectionReconfiguration message includes the measConfig: +2> perform the measurement configuration procedure as specified in 5.5.2; +1> perform the measurement identity autonomous removal as specified in 5.5.2.2a; +1> if the RRCConnectionReconfiguration message includes the reportProximityConfig: +2> perform the proximity indication configuration in accordance with the received reportProximityConfig; +1> set the content of RRCConnectionReconfigurationComplete message as follows: +2> if the UE has radio link failure or handover failure information available in VarRLF-Report and plmn-Identity stored in VarRLF-Report is equal to the RPLMN: +3> include rlf-InfoAvailable; +2> if the UE has logged measurements available for E-UTRA and plmn-Identity stored in VarLogMeasReport is equal to the RPLMN: +3> include the logMeasAvailable; +1> submit the RRCConnectionReconfigurationComplete message to lower layers for transmission using the new configuration; +1> if the RRCConnectionReconfiguration message does not include rlf-TimersAndConstants set to setup: +2> use the default values specified in 9.2.5 for timer T310, T311 and constant N310, N311; +1> if MAC successfully completes the random access procedure: +2> stop timer T304; +2> apply the parts of the CQI reporting configuration, the scheduling request configuration and the sounding RS configuration that do not require the UE to know the SFN of the target PCell, if any; +2> apply the parts of the measurement and the radio resource configuration that require the UE to know the SFN of the target PCell (e.g. measurement gaps, periodic CQI reporting, scheduling request configuration, sounding RS configuration), if any, upon acquiring the SFN of the target PCell; +NOTE 1: Whenever the UE shall setup or reconfigure a configuration in accordance with a field that is received it applies the new configuration, except for the cases addressed by the above statements. +2> enter E-UTRA RRC_CONNECTED, upon which the procedure ends; +NOTE 2: The UE is not required to determine the SFN of the target PCell by acquiring system information from that cell before performing RACH access in the target PCell. +5.4.2.4 Reconfiguration failure +The UE shall: +1> if the UE is unable to comply with (part of) the configuration included in the RRCConnectionReconfiguration message: +2> perform the actions defined for this failure case as defined in the specifications applicable for the other RAT; +NOTE 1: The UE may apply above failure handling also in case the RRCConnectionReconfiguration message causes a protocol error for which the generic error handling as defined in 5.7 specifies that the UE shall ignore the message. +NOTE 2: If the UE is unable to comply with part of the configuration, it does not apply any part of the configuration, i.e. there is no partial success/ failure. +5.4.2.5 T304 expiry (handover to E-UTRA failure) +The UE shall: +1> upon T304 expiry (handover to E-UTRA failure): +2> reset MAC; +2> perform the actions defined for this failure case as defined in the specifications applicable for the other RAT; +5.4.3 Mobility from E-UTRA +5.4.3.1 General + +Figure 5.4.3.1-1: Mobility from E-UTRA, successful + +Figure 5.4.3.1-2: Mobility from E-UTRA, failure +The purpose of this procedure is to move a UE in RRC_CONNECTED to a cell using another Radio Access Technology (RAT), e.g. GERAN, UTRA or CDMA2000 systems. The mobility from E-UTRA procedure covers the following type of mobility: +- handover, i.e. the MobilityFromEUTRACommand message includes radio resources that have been allocated for the UE in the target cell; +- cell change order, i.e. the MobilityFromEUTRACommand message may include information facilitating access of and/ or connection establishment in the target cell, e.g. system information. Cell change order is applicable only to GERAN; and +- enhanced CS fallback to CDMA2000 1xRTT, i.e. the MobilityFromEUTRACommand message includes radio resources that have been allocated for the UE in the target cell. The enhanced CS fallback to CDMA2000 1xRTT may be combined with concurrent handover or redirection to CDMA2000 HRPD. +NOTE: For the case of dual receiver/transmitter enhanced CS fallback to CDMA2000 1xRTT, the DLInformationTransfer message is used instead of the MobilityFromEUTRACommand message (see TS 36.300 [9]). +5.4.3.2 Initiation +E-UTRAN initiates the mobility from E-UTRA procedure to a UE in RRC_CONNECTED, possibly in response to a MeasurementReport message or in response to reception of CS fallback indication for the UE from MME, by sending a MobilityFromEUTRACommand message. E-UTRAN applies the procedure as follows: +- the procedure is initiated only when AS-security has been activated, and SRB2 with at least one DRB are setup and not suspended; +5.4.3.3 Reception of the MobilityFromEUTRACommand by the UE +The UE shall be able to receive a MobilityFromEUTRACommand message and perform a cell change order to GERAN, even if no prior UE measurements have been performed on the target cell. +The UE shall: +1> stop timer T310, if running; +1> if the MobilityFromEUTRACommand message includes the purpose set to handover: +2> if the targetRAT-Type is set to utra or geran: +3> consider inter-RAT mobility as initiated towards the RAT indicated by the targetRAT-Type included in the MobilityFromEUTRACommand message; +3> forward the nas-SecurityParamFromEUTRA to the upper layers; +3> access the target cell indicated in the inter-RAT message in accordance with the specifications of the target RAT; +3> if the targetRAT-Type is set to geran: +4> use the contents of systemInformation, if provided for PS Handover, as the system information to begin access on the target GERAN cell; +NOTE 1: If there are DRBs for which no radio bearers are established in the target RAT as indicated in the targetRAT-MessageContainer in the message, the E-UTRA RRC part of the UE does not indicate the release of the concerned DRBs to the upper layers. Upper layers may derive which bearers are not established from information received from the AS of the target RAT. +NOTE 2: In case of SR-VCC, the DRB to be replaced is specified in [61]. +2> else if the targetRAT-Type is set to cdma2000-1XRTT or cdma2000-HRPD: +3> forward the targetRAT-Type and the targetRAT-MessageContainer to the CDMA2000 upper layers for the UE to access the cell(s) indicated in the inter-RAT message in accordance with the specifications of the CDMA2000 target-RAT; +1> else if the MobilityFromEUTRACommand message includes the purpose set to cellChangeOrder: +2> start timer T304 with the timer value set to t304, as included in the MobilityFromEUTRACommand message; +2> if the targetRAT-Type is set to geran: +3> if networkControlOrder is included in the MobilityFromEUTRACommand message: +4> apply the value as specified in TS 44.060 [36]; +3> else: +4> acquire networkControlOrder and apply the value as specified in TS 44.060 [36]; +3> use the contents of systemInformation, if provided, as the system information to begin access on the target GERAN cell; +2> establish the connection to the target cell indicated in the CellChangeOrder; +NOTE 3: The criteria for success or failure of the cell change order to GERAN are specified in TS 44.060[36]. +1> if the MobilityFromEUTRACommand message includes the purpose set to e-CSFB: +2> if messageContCDMA2000-1XRTT is present: +3> forward the messageContCDMA2000-1XRTT to the CDMA2000 upper layers for the UE to access the cell(s) indicated in the inter-RAT message in accordance with the specification of the target RAT; +2> if mobilityCDMA2000-HRPD is present and is set to handover: +3> forward the messageContCDMA2000-HRPD to the CDMA2000 upper layers for the UE to access the cell(s) indicated in the inter-RAT message in accordance with the specification of the target RAT; +2> if mobilityCDMA2000-HRPD is present and is set to redirection: +3> forward the redirectedCarrierInfoCDMA2000-HRPD to the CDMA2000 upper layers; +NOTE 4: When the CDMA2000 upper layers in the UE receive both the messageContCDMA2000-1XRTT and messageContCDMA2000-HRPD the UE performs concurrent access to both CDMA2000 1xRTT and CDMA2000 HRPD RAT. +5.4.3.4 Successful completion of the mobility from E-UTRA +Upon successfully completing the handover, the cell change order or enhanced 1xRTT CS fallback, the UE shall: +1> perform the actions upon leaving RRC_CONNECTED as specified in 5.3.12, with release cause 'other'; +NOTE: If the UE performs enhanced 1xRTT CS fallback along with concurrent mobility to CDMA2000 HRPD and the connection to either CDMA2000 1xRTT or CDMA2000 HRPD succeeds, then the mobility from E-UTRA is considered successful. +5.4.3.5 Mobility from E-UTRA failure +The UE shall: +1> if T304 expires (mobility from E-UTRA failure); or +1> if the UE does not succeed in establishing the connection to the target radio access technology; or +1> if the UE is unable to comply with (part of) the configuration included in the MobilityFromEUTRACommand message; or +1> if there is a protocol error in the inter RAT information included in the MobilityFromEUTRACommand message, causing the UE to fail the procedure according to the specifications applicable for the target RAT: +2> stop T304, if running; +2> if the cs-FallbackIndicator in the MobilityFromEUTRACommand message was set to TRUE: +3> indicate to upper layers that the CS Fallback procedure has failed; +2> revert back to the configuration used in the source PCell, excluding the configuration configured by the physicalConfigDedicated, mac-MainConfig and sps-Config; +2> initiate the connection re-establishment procedure as specified in 5.3.7; +NOTE: For enhanced CS fallback to CDMA2000 1xRTT, the above UE behavior applies only when the UE is attempting the enhanced 1xRTT CS fallback and connection to the target radio access technology fails or if the UE is attempting enhanced 1xRTT CS fallback along with concurrent mobility to CDMA2000 HRPD and connection to both the target radio access technologies fails. +5.4.4 Handover from E-UTRA preparation request (CDMA2000) +5.4.4.1 General + +Figure 5.4.4.1-1: Handover from E-UTRA preparation request +The purpose of this procedure is to trigger the UE to prepare for handover or enhanced 1xRTT CS fallback to CDMA2000 by requesting a connection with this network. The UE may use this procedure to concurrently prepare for handover to CDMA2000 HRPD along with preparation for enhanced CS fallback to CDMA2000 1xRTT. This procedure applies to CDMA2000 capable UEs only. +This procedure is also used to trigger the UE which supports dual Rx/Tx enhanced 1xCSFB to redirect its second radio to CDMA2000 1xRTT. +The handover from E-UTRA preparation request procedure applies when signalling radio bearers are established. +5.4.4.2 Initiation +E-UTRAN initiates the handover from E-UTRA preparation request procedure to a UE in RRC_CONNECTED, possibly in response to a MeasurementReport message or CS fallback indication for the UE, by sending a HandoverFromEUTRAPreparationRequest message. E-UTRA initiates the procedure only when AS security has been activated. +5.4.4.3 Reception of the HandoverFromEUTRAPreparationRequest by the UE +Upon reception of the HandoverFromEUTRAPreparationRequest message, the UE shall: +1> if dualRxTxRedirectIndicator is present in the received message: +2> forward dualRxTxRedirectIndicator to the CDMA2000 upper layers; +2> forward redirectCarrierCDMA2000-1XRTT to the CDMA2000 upper layers, if included; +1> else +2> indicate the request to prepare handover or enhanced 1xRTT CS fallback and forward the cdma2000-Type to the CDMA2000 upper layers; +2> if cdma2000-Type is set to type1XRTT: +3> forward the rand and the mobilityParameters to the CDMA2000 upper layers; +2> if concurrPrepCDMA2000-HRPD is present in the received message: +3> forward concurrPrepCDMA2000-HRPD to the CDMA2000 upper layers; +2> else +3> forward concurrPrepCDMA2000-HRPD, with its value set to FALSE, to the CDMA2000 upper layers; +5.4.5 UL handover preparation transfer (CDMA2000) +5.4.5.1 General + +Figure 5.4.5.1-1: UL handover preparation transfer +The purpose of this procedure is to tunnel the handover related CDMA2000 dedicated information or enhanced 1xRTT CS fallback related CDMA2000 dedicated information from UE to E-UTRAN when requested by the higher layers. The procedure is triggered by the higher layers on receipt of HandoverFromEUTRAPreparationRequest message. If preparing for enhanced CS fallback to CDMA2000 1xRTT and handover to CDMA2000 HRPD, the UE sends two consecutive ULHandoverPreparationTransfer messages to E-UTRAN, one per addressed CDMA2000 RAT Type. This procedure applies to CDMA2000 capable UEs only. +5.4.5.2 Initiation +A UE in RRC_CONNECTED initiates the UL Handover Preparation Transfer procedure whenever there is a need to transfer handover or enhanced 1xRTT CS fallback related non-3GPP dedicated information. The UE initiates the UL handover preparation transfer procedure by sending the ULHandoverPreparationTransfer message. +5.4.5.3 Actions related to transmission of the ULHandoverPreparationTransfer message +The UE shall set the contents of the ULHandoverPreparationTransfer message as follows: +1> include the cdma2000-Type and the dedicatedInfo; +1> if the cdma2000-Type is set to type1XRTT: +2> include the meid and set it to the value received from the CDMA2000 upper layers; +1> submit the ULHandoverPreparationTransfer message to lower layers for transmission, upon which the procedure ends; +5.4.5.4 Failure to deliver the ULHandoverPreparationTransfer message +The UE shall: +1> if the UE is unable to guarantee successful delivery of ULHandoverPreparationTransfer messages: +2> inform upper layers about the possible failure to deliver the information contained in the concerned ULHandoverPreparationTransfer message; +5.4.6 Inter-RAT cell change order to E-UTRAN +5.4.6.1 General +The purpose of the inter-RAT cell change order to E-UTRAN procedure is to transfer, under the control of the source radio access technology, a connection between the UE and another radio access technology (e.g. GSM/ GPRS) to E-UTRAN. +5.4.6.2 Initiation +The procedure is initiated when a radio access technology other than E-UTRAN, e.g. GSM/GPRS, using procedures specific for that RAT, orders the UE to change to an E-UTRAN cell. In response, upper layers request the establishment of an RRC connection as specified in subclause 5.3.3. +NOTE: Within the message used to order the UE to change to an E-UTRAN cell, the source RAT should specify the identity of the target E-UTRAN cell as specified in the specifications for that RAT. +The UE shall: +1> upon receiving an RRCConnectionSetup message: +2> consider the inter-RAT cell change order procedure to have completed successfully; +5.4.6.3 UE fails to complete an inter-RAT cell change order +If the inter-RAT cell change order fails the UE shall return to the other radio access technology and proceed as specified in the appropriate specifications for that RAT. +The UE shall: +1> upon failure to establish the RRC connection as specified in subclause 5.3.3: +2> consider the inter-RAT cell change order procedure to have failed; +NOTE: The cell change was network ordered. Therefore, failure to change to the target PCell should not cause the UE to move to UE-controlled cell selection. +5.5 Measurements +5.5.1 Introduction +The UE reports measurement information in accordance with the measurement configuration as provided by E-UTRAN. E-UTRAN provides the measurement configuration applicable for a UE in RRC_CONNECTED by means of dedicated signalling, i.e. using the RRCConnectionReconfiguration message. +The UE can be requested to perform the following types of measurements: +- Intra-frequency measurements: measurements at the downlink carrier frequency(ies) of the serving cell(s). +- Inter-frequency measurements: measurements at frequencies that differ from any of the downlink carrier frequency(ies) of the serving cell(s). +- Inter-RAT measurements of UTRA frequencies. +- Inter-RAT measurements of GERAN frequencies. +- Inter-RAT measurements of CDMA2000 HRPD or CDMA2000 1xRTT frequencies. +The measurement configuration includes the following parameters: +1. Measurement objects: The objects on which the UE shall perform the measurements. +- For intra-frequency and inter-frequency measurements a measurement object is a single E-UTRA carrier frequency. Associated with this carrier frequency, E-UTRAN can configure a list of cell specific offsets and a list of 'blacklisted' cells. Blacklisted cells are not considered in event evaluation or measurement reporting. +- For inter-RAT UTRA measurements a measurement object is a set of cells on a single UTRA carrier frequency. +- For inter-RAT GERAN measurements a measurement object is a set of GERAN carrier frequencies. +- For inter-RAT CDMA2000 measurements a measurement object is a set of cells on a single (HRPD or 1xRTT) carrier frequency. +NOTE 1: Some measurements using the above mentioned measurement objects, only concern a single cell, e.g. measurements used to report neighbouring cell system information, PCell UE Rx-Tx time difference. +2. Reporting configurations: A list of reporting configurations where each reporting configuration consists of the following: +- Reporting criterion: The criterion that triggers the UE to send a measurement report. This can either be periodical or a single event description. +- Reporting format: The quantities that the UE includes in the measurement report and associated information (e.g. number of cells to report). +3. Measurement identities: A list of measurement identities where each measurement identity links one measurement object with one reporting configuration. By configuring multiple measurement identities it is possible to link more than one measurement object to the same reporting configuration, as well as to link more than one reporting configuration to the same measurement object. The measurement identity is used as a reference number in the measurement report. +4. Quantity configurations: One quantity configuration is configured per RAT type. The quantity configuration defines the measurement quantities and associated filtering used for all event evaluation and related reporting of that measurement type. One filter can be configured per measurement quantity. +5. Measurement gaps: Periods that the UE may use to perform measurements, i.e. no (UL, DL) transmissions are scheduled. +E-UTRAN only configures a single measurement object for a given frequency, i.e. it is not possible to configure two or more measurement objects for the same frequency with different associated parameters, e.g. different offsets and/ or blacklists. E-UTRAN may configure multiple instances of the same event e.g. by configuring two reporting configurations with different thresholds. +The UE maintains a single measurement object list, a single reporting configuration list, and a single measurement identities list. The measurement object list includes measurement objects, that are specified per RAT type, possibly including intra-frequency object(s) (i.e. the object(s) corresponding to the serving frequency(ies)), inter-frequency object(s) and inter-RAT objects. Similarly, the reporting configuration list includes E-UTRA and inter-RAT reporting configurations. Any measurement object can be linked to any reporting configuration of the same RAT type. Some reporting configurations may not be linked to a measurement object. Likewise, some measurement objects may not be linked to a reporting configuration. +The measurement procedures distinguish the following types of cells: +1. The serving cell(s)– these are the PCell and one or more SCells, if configured for a UE supporting CA. +2. Listed cells - these are cells listed within the measurement object(s). +3. Detected cells - these are cells that are not listed within the measurement object(s) but are detected by the UE on the carrier frequency(ies) indicated by the measurement object(s). +For E-UTRA, the UE measures and reports on the serving cell(s), listed cells and detected cells. For inter-RAT UTRA, the UE measures and reports on listed cells and optionally on cells that are within a range for which reporting is allowed by E-UTRAN. For inter-RAT GERAN, the UE measures and reports on detected cells. For inter-RAT CDMA2000, the UE measures and reports on listed cells. +NOTE 2: For inter-RAT UTRA and CDMA2000, the UE measures and reports also on detected cells for the purpose of SON. +NOTE 3: This specification is based on the assumption that typically CSG cells of home deployment type are not indicated within the neighbour list. Furthermore, the assumption is that for non-home deployments, the physical cell identity is unique within the area of a large macro cell (i.e. as for UTRAN). +Whenever the procedural specification, other than contained in sub-clause 5.5.2, refers to a field it concerns a field included in the VarMeasConfig unless explicitly stated otherwise i.e. only the measurement configuration procedure covers the direct UE action related to the received measConfig. +5.5.2 Measurement configuration +5.5.2.1 General +E-UTRAN applies the procedure as follows: +- to ensure that, whenever the UE has a measConfig, it includes a measObject for each serving frequency; +- to configure at most one measurement identity using a reporting configuration with the purpose set to reportCGI; +- for serving frequencies, set the EARFCN within the corresponding measObject according to the band as used for reception/ transmission; +The UE shall: +1> if the received measConfig includes the measObjectToRemoveList: +2> perform the measurement object removal procedure as specified in 5.5.2.4; +1> if the received measConfig includes the measObjectToAddModList: +2> perform the measurement object addition/ modification procedure as specified in 5.5.2.5; +1> if the received measConfig includes the reportConfigToRemoveList: +2> perform the reporting configuration removal procedure as specified in 5.5.2.6; +1> if the received measConfig includes the reportConfigToAddModList: +2> perform the reporting configuration addition/ modification procedure as specified in 5.5.2.7; +1> if the received measConfig includes the quantityConfig: +2> perform the quantity configuration procedure as specified in 5.5.2.8; +1> if the received measConfig includes the measIdToRemoveList: +2> perform the measurement identity removal procedure as specified in 5.5.2.2; +1> if the received measConfig includes the measIdToAddModList: +2> perform the measurement identity addition/ modification procedure as specified in 5.5.2.3; +1> if the received measConfig includes the measGapConfig: +2> perform the measurement gap configuration procedure as specified in 5.5.2.9; +1> if the received measConfig includes the s-Measure: +2> set the parameter s-Measure within VarMeasConfig to the lowest value of the RSRP ranges indicated by the received value of s-Measure; +1> if the received measConfig includes the preRegistrationInfoHRPD: +2> forward the preRegistrationInfoHRPD to CDMA2000 upper layers; +1> if the received measConfig includes the speedStatePars: +2> set the parameter speedStatePars within VarMeasConfig to the received value of speedStatePars; +5.5.2.2 Measurement identity removal +The UE shall: +1> for each measId included in the received measIdToRemoveList that is part of the current UE configuration in VarMeasConfig: +2> remove the entry with the matching measId from the measIdList within the VarMeasConfig; +2> remove the measurement reporting entry for this measId from the VarMeasReportList, if included; +2> stop the periodical reporting timer or timer T321, whichever one is running, and reset the associated information (e.g. timeToTrigger) for this measId; +NOTE: The UE does not consider the message as erroneous if the measIdToRemoveList includes any measId value that is not part of the current UE configuration. +5.5.2.2a Measurement identity autonomous removal +The UE shall: +1> for each measId included in the measIdList within VarMeasConfig: +2> if the associated reportConfig concerns an event involving a serving cell while the concerned serving cell is not configured: +3> remove the measId from the measIdList within the VarMeasConfig; +3> remove the measurement reporting entry for this measId from the VarMeasReportList, if included; +3> stop the periodical reporting timer if running, and reset the associated information (e.g. timeToTrigger) for this measId; +NOTE 1: The above UE autonomous removal of measId's applies only for measurement events A1, A2 and A6. +NOTE 2: When performed during re-establishment, the UE is only configured with a primary frequency (i.e. the SCell(s) are released, if configured). +5.5.2.3 Measurement identity addition/ modification +E-UTRAN applies the procedure as follows: +- configure a measId only if the corresponding measurement object, the corresponding reporting configuration and the corresponding quantity configuration, are configured; +The UE shall: +1> for each measId included in the received measIdToAddModList: +2> if an entry with the matching measId exists in the measIdList within the VarMeasConfig: +3> replace the entry with the value received for this measId; +2> else: +3> add a new entry for this measId within the VarMeasConfig ; +2> remove the measurement reporting entry for this measId from the VarMeasReportList, if included; +2> stop the periodical reporting timer or timer T321, whichever one is running, and reset the associated information (e.g. timeToTrigger) for this measId; +2> if the triggerType is set to periodical and the purpose is set to reportCGI in the reportConfig associated with this measId: +3> if the measObject associated with this measId concerns E-UTRA: +4> if the si-RequestForHO is included in the reportConfig associated with this measId: +5> start timer T321 with the timer value set to 150 ms for this measId; +4> else: +5> start timer T321 with the timer value set to 1 second for this measId; +3> else if the measObject associated with this measId concerns UTRA: +4> if the si-RequestForHO is included in the reportConfig associated with this measId: +5> for UTRA FDD, start timer T321 with the timer value set to 2 seconds for this measId; +5> for UTRA TDD, start timer T321 with the timer value set to [1 second] for this measId; +4> else: +5> start timer T321 with the timer value set to 8 seconds for this measId; +3> else: +4> start timer T321 with the timer value set to 8 seconds for this measId; +5.5.2.4 Measurement object removal +The UE shall: +1> for each measObjectId included in the received measObjectToRemoveList that is part of the current UE configuration in VarMeasConfig: +2> remove the entry with the matching measObjectId from the measObjectList within the VarMeasConfig; +2> remove all measId associated with this measObjectId from the measIdList within the VarMeasConfig, if any; +2> if a measId is removed from the measIdList: +3> remove the measurement reporting entry for this measId from the VarMeasReportList, if included; +3> stop the periodical reporting timer or timer T321, whichever one is running, and reset the associated information (e.g. timeToTrigger) for this measId; +NOTE: The UE does not consider the message as erroneous if the measObjectToRemoveList includes any measObjectId value that is not part of the current UE configuration. +5.5.2.5 Measurement object addition/ modification +The UE shall: +1> for each measObjectId included in the received measObjectToAddModList: +2> if an entry with the matching measObjectId exists in the measObjectList within the VarMeasConfig, for this entry: +3> replace the entry with the value received for this measObject, except for the fields cellsToAddModList, blackCellsToAddModList, cellsToRemoveList, blackCellsToRemoveList and measSubframePatternConfigNeigh; +3> if the received measObject includes the cellsToRemoveList: +4> for each cellIndex included in the cellsToRemoveList: +5> remove the entry with the matching cellIndex from the cellsToAddModList; +3> if the received measObject includes the cellsToAddModList: +4> for each cellIndex value included in the cellsToAddModList: +5> if an entry with the matching cellIndex exists in the cellsToAddModList: +6> replace the entry with the value received for this cellIndex; +5> else: +6> add a new entry for the received cellIndex to the cellsToAddModList; +3> if the received measObject includes the blackCellsToRemoveList: +4> for each cellIndex included in the blackCellsToRemoveList: +5> remove the entry with the matching cellIndex from the blackCellsToAddModList; +3> if the received measObject includes the blackCellsToAddModList: +4> for each cellIndex included in the blackCellsToAddModList: +5> if an entry with the matching cellIndex is included in the blackCellsToAddModList: +6> replace the entry with the value received for this cellIndex; +5> else: +6> add a new entry for the received cellIndex to the blackCellsToAddModList; +3> if the received measObject includes measSubframePatternConfigNeigh: +4> set measSubframePatternConfigNeigh within the VarMeasConfig to the value of the received field +3> for each measId associated with this measObjectId in the measIdList within the VarMeasConfig, if any: +4> remove the measurement reporting entry for this measId from the VarMeasReportList, if included; +4> stop the periodical reporting timer or timer T321, whichever one is running, and reset the associated information (e.g. timeToTrigger) for this measId; +2> else: +3> add a new entry for the received measObject to the measObjectList within VarMeasConfig; +5.5.2.6 Reporting configuration removal +The UE shall: +1> for each reportConfigId included in the received reportConfigToRemoveList that is part of the current UE configuration in VarMeasConfig: +2> remove the entry with the matching reportConfigId from the reportConfigList within the VarMeasConfig; +2> remove all measId associated with the reportConfigId from the measIdList within the VarMeasConfig, if any; +2> if a measId is removed from the measIdList: +3> remove the measurement reporting entry for this measId from the VarMeasReportList, if included; +3> stop the periodical reporting timer or timer T321, whichever one is running, and reset the associated information (e.g. timeToTrigger) for this measId; +NOTE: The UE does not consider the message as erroneous if the reportConfigToRemoveList includes any reportConfigId value that is not part of the current UE configuration. +5.5.2.7 Reporting configuration addition/ modification +The UE shall: +1> for each reportConfigId included in the received reportConfigToAddModList: +2> if an entry with the matching reportConfigId exists in the reportConfigList within the VarMeasConfig, for this entry: +3> replace the entry with the value received for this reportConfig; +3> for each measId associated with this reportConfigId included in the measIdList within the VarMeasConfig, if any: +4> remove the measurement reporting entry for this measId from in VarMeasReportList, if included; +4> stop the periodical reporting timer or timer T321, whichever one is running, and reset the associated information (e.g. timeToTrigger) for this measId; +2> else: +3> add a new entry for the received reportConfig to the reportConfigList within the VarMeasConfig; +5.5.2.8 Quantity configuration +The UE shall: +1> for each RAT for which the received quantityConfig includes parameter(s): +2> set the corresponding parameter(s) in quantityConfig within VarMeasConfig to the value of the received quantityConfig parameter(s); +1> for each measId included in the measIdList within VarMeasConfig: +2> remove the measurement reporting entry for this measId from the VarMeasReportList, if included; +2> stop the periodical reporting timer or timer T321, whichever one is running, and reset the associated information (e.g. timeToTrigger) for this measId; +5.5.2.9 Measurement gap configuration +The UE shall: +1> if measGapConfig is set to setup: +2> if a measurement gap configuration is already setup, release the measurement gap configuration; +2> setup the measurement gap configuration indicated by the measGapConfig in accordance with the received gapOffset, i.e., the first subframe of each gap occurs at an SFN and subframe meeting the following condition: +SFN mod T = FLOOR(gapOffset/10); +subframe = gapOffset mod 10; +with T = MGRP/10 as defined in TS 36.133 [16]; +1> else: +2> release the measurement gap configuration; +5.5.3 Performing measurements +5.5.3.1 General +For all measurements the UE applies the layer 3 filtering as specified in 5.5.3.2, before using the measured results for evaluation of reporting criteria or for measurement reporting. +The UE shall: +1> whenever the UE has a measConfig, perform RSRP and RSRQ measurements for each serving cell, applying for the PCell the time domain measurement resource restriction in accordance with measSubframePatternPCell, if configured; +1> for each measId included in the measIdList within VarMeasConfig: +2> if the purpose for the associated reportConfig is set to reportCGI: +3> if si-RequestForHO is configured for the associated reportConfig: +4> perform the corresponding measurements on the frequency and RAT indicated in the associated measObject using autonomous gaps as necessary; +3> else: +4> perform the corresponding measurements on the frequency and RAT indicated in the associated measObject using available idle periods or using autonomous gaps as necessary; +NOTE 1: If autonomous gaps are used to perform measurements, the UE is allowed to temporarily abort communication with all serving cell(s), i.e. create autonomous gaps to perform the corresponding measurements within the limits specified in TS 36.133 [16]. Otherwise, the UE only supports the measurements with the purpose set to reportCGI only if E-UTRAN has provided sufficient idle periods. +3> try to acquire the global cell identity of the cell indicated by the cellForWhichToReportCGI in the associated measObject by acquiring the relevant system information from the concerned cell; +3> if the cell indicated by the cellForWhichToReportCGI included in the associated measObject is an E-UTRAN cell: +4> try to acquire the CSG identity, if the CSG identity is broadcast in the concerned cell; +4> try to acquire the trackingAreaCode in the concerned cell; +4> try to acquire the list of additional PLMN Identities, as included in the plmn-IdentityList, if multiple PLMN identities are broadcast in the concerned cell; +NOTE 2: The 'primary' PLMN is part of the global cell identity. +3> if the cell indicated by the cellForWhichToReportCGI included in the associated measObject is a UTRAN cell: +4> try to acquire the LAC, the RAC and the list of additional PLMN Identities, if multiple PLMN identities are broadcast in the concerned cell; +4> try to acquire the CSG identity, if the CSG identity is broadcast in the concerned cell; +3> if the cell indicated by the cellForWhichToReportCGI included in the associated measObject is a GERAN cell: +4> try to acquire the RAC in the concerned cell; +3> if the cell indicated by the cellForWhichToReportCGI included in the associated measObject is a CDMA2000 cell and the cdma2000-Type included in the measObject is typeHRPD: +4> try to acquire the Sector ID in the concerned cell; +3> if the cell indicated by the cellForWhichToReportCGI included in the associated measObject is a CDMA2000 cell and the cdma2000-Type included in the measObject is type1XRTT: +4> try to acquire the BASE ID, SID and NID in the concerned cell; +2> else: +3> if a measurement gap configuration is setup; or +3> if the UE does not require measurement gaps to perform the concerned measurements: +4> if s-Measure is not configured; or +4> if s-Measure is configured and the PCell RSRP, after layer 3 filtering, is lower than this value: +5> perform the corresponding measurements of neighbouring cells on the frequencies and RATs indicated in the concerned measObject, applying for neighbouring cells on the primary frequency the time domain measurement resource restriction in accordance with measSubframePatternConfigNeigh, if configured in the concerned measObject; +4> if the ue-RxTxTimeDiffPeriodical is configured in the associated reportConfig: +5> perform the UE Rx–Tx time difference measurements on the PCell; +2> perform the evaluation of reporting criteria as specified in 5.5.4; +NOTE 3: The s-Measure defines when the UE is required to perform measurements. The UE is however allowed to perform measurements also when the PCell RSRP exceeds s-Measure, e.g., to measure cells broadcasting a CSG identity following use of the autonomous search function as defined in TS 36.304 [4]. +5.5.3.2 Layer 3 filtering +The UE shall: +1> for each measurement quantity that the UE performs measurements according to 5.5.3.1: +NOTE 1: This does not include quantities configured solely for UE Rx-Tx time difference measurements i.e. for those type of measurements the UE ignores the triggerQuantity and reportQuantity. +2> filter the measured result, before using for evaluation of reporting criteria or for measurement reporting, by the following formula: + +where +Mn is the latest received measurement result from the physical layer; +Fn is the updated filtered measurement result, that is used for evaluation of reporting criteria or for measurement reporting; +Fn-1 is the old filtered measurement result, where F0 is set to M1 when the first measurement result from the physical layer is received; and +a = 1/2(k/4), where k is the filterCoefficent for the corresponding measurement quantity received by the quantityConfig; +2> adapt the filter such that the time characteristics of the filter are preserved at different input rates, observing that the filterCoefficent k assumes a sample rate equal to 200 ms; +NOTE 2: If k is set to 0, no layer 3 filtering is applicable. +NOTE 3: The filtering is performed in the same domain as used for evaluation of reporting criteria or for measurement reporting, i.e., logarithmic filtering for logarithmic measurements. +NOTE 4: The filter input rate is implementation dependent, to fulfil the performance requirements set in [16]. For further details about the physical layer measurements, see TS 36.133 [16]. +5.5.4 Measurement report triggering +5.5.4.1 General +The UE shall: +1> for each measId included in the measIdList within VarMeasConfig: +2> if the corresponding reportConfig includes a purpose set to reportStrongestCellsForSON: +3> consider any neighbouring cell detected on the associated frequency to be applicable; +2> else if the corresponding reportConfig includes a purpose set to reportCGI: +3> consider any neighbouring cell detected on the associated frequency/ set of frequencies (GERAN) which has a physical cell identity matching the value of the cellForWhichToReportCGI included in the corresponding measObject within the VarMeasConfig to be applicable; +2> else: +3> if the corresponding measObject concerns E-UTRA: +4> if the ue-RxTxTimeDiffPeriodical is configured in the corresponding reportConfig: +5> consider only the PCell to be applicable; +4> else if the eventA1 or eventA2 is configured in the corresponding reportConfig: +5> consider only the serving cell to be applicable; +4> else: +5> consider any neighbouring cell detected on the associated frequency to be applicable when the concerned cell is not included in the blackCellsToAddModList defined within the VarMeasConfig for this measId; +5> for events involving a serving cell on one frequency and neighbours on another frequency, consider the serving cell on the other frequency as a neighbouring cell; +3> else if the corresponding measObject concerns UTRA or CDMA2000: +4> consider a neighbouring cell on the associated frequency to be applicable when the concerned cell is included in the cellsToAddModList defined within the VarMeasConfig for this measId (i.e. the cell is included in the white-list); +NOTE 0: The UE may also consider a neighbouring cell on the associated UTRA frequency to be applicable when the concerned cell is included in the csg-allowedReportingCells within the VarMeasConfig for this measId, if configured in the corresponding measObjectUTRA (i.e. the cell is included in the range of physical cell identities for which reporting is allowed). +3> else if the corresponding measObject concerns GERAN: +4> consider a neighbouring cell on the associated set of frequencies to be applicable when the concerned cell matches the ncc-Permitted defined within the VarMeasConfig for this measId; +2> if the triggerType is set to event and if the entry condition applicable for this event, i.e. the event corresponding with the eventId of the corresponding reportConfig within VarMeasConfig, is fulfilled for one or more applicable cells for all measurements after layer 3 filtering taken during timeToTrigger defined for this event within the VarMeasConfig, while the VarMeasReportList does not include an measurement reporting entry for this measId (a first cell triggers the event): +3> include a measurement reporting entry within the VarMeasReportList for this measId; +3> set the numberOfReportsSent defined within the VarMeasReportList for this measId to 0; +3> include the concerned cell(s) in the cellsTriggeredList defined within the VarMeasReportList for this measId; +3> initiate the measurement reporting procedure, as specified in 5.5.5; +2> if the triggerType is set to event and if the entry condition applicable for this event, i.e. the event corresponding with the eventId of the corresponding reportConfig within VarMeasConfig, is fulfilled for one or more applicable cells not included in the cellsTriggeredList for all measurements after layer 3 filtering taken during timeToTrigger defined for this event within the VarMeasConfig (a subsequent cell triggers the event): +3> set the numberOfReportsSent defined within the VarMeasReportList for this measId to 0; +3> include the concerned cell(s) in the cellsTriggeredList defined within the VarMeasReportList for this measId; +3> initiate the measurement reporting procedure, as specified in 5.5.5; +2> if the triggerType is set to event and if the leaving condition applicable for this event is fulfilled for one or more of the cells included in the cellsTriggeredList defined within the VarMeasReportList for this measId for all measurements after layer 3 filtering taken during timeToTrigger defined within the VarMeasConfig for this event: +3> remove the concerned cell(s) in the cellsTriggeredList defined within the VarMeasReportList for this measId; +3> if reportOnLeave is set to TRUE for the corresponding reporting configuration or if a6-ReportOnLeave is set to TRUE for the corresponding reporting configuration: +4> initiate the measurement reporting procedure, as specified in 5.5.5; +3> if the cellsTriggeredList defined within the VarMeasReportList for this measId is empty: +4> remove the measurement reporting entry within the VarMeasReportList for this measId; +4> stop the periodical reporting timer for this measId, if running; +2> if the purpose is included and set to reportStrongestCells or to reportStrongestCellsForSON and if a (first) measurement result is available: +3> include a measurement reporting entry within the VarMeasReportList for this measId; +3> set the numberOfReportsSent defined within the VarMeasReportList for this measId to 0; +3> initiate the measurement reporting procedure, as specified in 5.5.5; +NOTE 1: If the purpose is set to reportStrongestCells and reportAmount > 1, the UE initiates a first measurement report immediately after the quantity to be reported becomes available for the PCell. If the purpose is set to reportStrongestCells and reportAmount = 1, the UE initiates a first measurement report immediately after the quantity to be reported becomes available for the PCell and for the strongest cell among the applicable cells. If the purpose is set to reportStrongestCellsForSON, the UE initiates a first measurement report when it has determined the strongest cells on the associated frequency. +2> upon expiry of the periodical reporting timer for this measId: +3> initiate the measurement reporting procedure, as specified in 5.5.5; +2> if the purpose is included and set to reportCGI and if the UE acquired the information needed to set all fields of cgi-Info for the requested cell: +3> include a measurement reporting entry within the VarMeasReportList for this measId; +3> set the numberOfReportsSent defined within the VarMeasReportList for this measId to 0; +3> stop timer T321; +3> initiate the measurement reporting procedure, as specified in 5.5.5; +2> upon expiry of the T321 for this measId: +3> include a measurement reporting entry within the VarMeasReportList for this measId; +3> set the numberOfReportsSent defined within the VarMeasReportList for this measId to 0; +3> initiate the measurement reporting procedure, as specified in 5.5.5; +NOTE 2: The UE does not stop the periodical reporting with triggerType set to event or to periodical while the corresponding measurement is not performed due to the PCell RSRP being equal to or better than s-Measure or due to the measurement gap not being setup. +NOTE 3: If the UE is configured with DRX, the UE may delay the measurement reporting for event triggered and periodical triggered measurements until the Active Time, which is defined in TS 36.321 [6]. +5.5.4.2 Event A1 (Serving becomes better than threshold) +The UE shall: +1> consider the entering condition for this event to be satisfied when condition A1-1, as specified below, is fulfilled; +1> consider the leaving condition for this event to be satisfied when condition A1-2, as specified below, is fulfilled; +1> for this measurement, consider the primary or secondary cell that is configured on the frequency indicated in the associated measObjectEUTRA to be the serving cell; +Inequality A1-1 (Entering condition) + +Inequality A1-2 (Leaving condition) + +The variables in the formula are defined as follows: +Ms is the measurement result of the serving cell, not taking into account any offsets. +Hys is the hysteresis parameter for this event (i.e. hysteresis as defined within reportConfigEUTRA for this event). +Thresh is the threshold parameter for this event (i.e. a1-Threshold as defined within reportConfigEUTRA for this event). +Ms is expressed in dBm in case of RSRP, or in dB in case of RSRQ. +Hys is expressed in dB. +Thresh is expressed in the same unit as Ms. +5.5.4.3 Event A2 (Serving becomes worse than threshold) +The UE shall: +1> consider the entering condition for this event to be satisfied when condition A2-1, as specified below, is fulfilled; +1> consider the leaving condition for this event to be satisfied when condition A2-2, as specified below, is fulfilled; +1> for this measurement, consider the primary or secondary cell that is configured on the frequency indicated in the associated measObjectEUTRA to be the serving cell; +Inequality A2-1 (Entering condition) + +Inequality A2-2 (Leaving condition) + +The variables in the formula are defined as follows: +Ms is the measurement result of the serving cell, not taking into account any offsets. +Hys is the hysteresis parameter for this event (i.e. hysteresis as defined within reportConfigEUTRA for this event). +Thresh is the threshold parameter for this event (i.e. a2-Threshold as defined within reportConfigEUTRA for this event). +Ms is expressed in dBm in case of RSRP, or in dB in case of RSRQ. +Hys is expressed in dB. +Thresh is expressed in the same unit as Ms. +5.5.4.4 Event A3 (Neighbour becomes offset better than PCell) +The UE shall: +1> consider the entering condition for this event to be satisfied when condition A3-1, as specified below, is fulfilled; +1> consider the leaving condition for this event to be satisfied when condition A3-2, as specified below, is fulfilled; +NOTE The cell(s) that triggers the event is on the frequency indicated in the associated measObject which may be different from the (primary) frequency used by the PCell. +Inequality A3-1 (Entering condition) + +Inequality A3-2 (Leaving condition) + +The variables in the formula are defined as follows: +Mn is the measurement result of the neighbouring cell, not taking into account any offsets. +Ofn is the frequency specific offset of the frequency of the neighbour cell (i.e. offsetFreq as defined within measObjectEUTRA corresponding to the frequency of the neighbour cell). +Ocn is the cell specific offset of the neighbour cell (i.e. cellIndividualOffset as defined within measObjectEUTRA corresponding to the frequency of the neighbour cell), and set to zero if not configured for the neighbour cell. +Mp is the measurement result of the PCell, not taking into account any offsets. +Ofp is the frequency specific offset of the primary frequency (i.e. offsetFreq as defined within measObjectEUTRA corresponding to the primary frequency). +Ocp is the cell specific offset of the PCell (i.e. cellIndividualOffset as defined within measObjectEUTRA corresponding to the primary frequency), and is set to zero if not configured for the PCell. +Hys is the hysteresis parameter for this event (i.e. hysteresis as defined within reportConfigEUTRA for this event). +Off is the offset parameter for this event (i.e. a3-Offset as defined within reportConfigEUTRA for this event). +Mn, Mp are expressed in dBm in case of RSRP, or in dB in case of RSRQ. +Ofn, Ocn, Ofp, Ocp, Hys, Off are expressed in dB. +5.5.4.5 Event A4 (Neighbour becomes better than threshold) +The UE shall: +1> consider the entering condition for this event to be satisfied when condition A4-1, as specified below, is fulfilled; +1> consider the leaving condition for this event to be satisfied when condition A4-2, as specified below, is fulfilled; +Inequality A4-1 (Entering condition) + +Inequality A4-2 (Leaving condition) + +The variables in the formula are defined as follows: +Mn is the measurement result of the neighbouring cell, not taking into account any offsets. +Ofn is the frequency specific offset of the frequency of the neighbour cell (i.e. offsetFreq as defined within measObjectEUTRA corresponding to the frequency of the neighbour cell). +Ocn is the cell specific offset of the neighbour cell (i.e. cellIndividualOffset as defined within measObjectEUTRA corresponding to the frequency of the neighbour cell), and set to zero if not configured for the neighbour cell. +Hys is the hysteresis parameter for this event (i.e. hysteresis as defined within reportConfigEUTRA for this event). +Thresh is the threshold parameter for this event (i.e. a4-Threshold as defined within reportConfigEUTRA for this event). +Mn is expressed in dBm in case of RSRP, or in dB in case of RSRQ. +Ofn, Ocn, Hys are expressed in dB. +Thresh is expressed in the same unit as Ms. +5.5.4.6 Event A5 (PCell becomes worse than threshold1 and neighbour becomes better than threshold2) +The UE shall: +1> consider the entering condition for this event to be satisfied when both condition A5-1 and condition A5-2, as specified below, are fulfilled; +1> consider the leaving condition for this event to be satisfied when condition A5-3 or condition A5-4, i.e. at least one of the two, as specified below, is fulfilled; +NOTE: The cell(s) that triggers the event is on the frequency indicated in the associated measObject which may be different from the (primary) frequency used by the PCell. +Inequality A5-1 (Entering condition 1) + +Inequality A5-2 (Entering condition 2) + +Inequality A5-3 (Leaving condition 1) + +Inequality A5-4 (Leaving condition 2) + +The variables in the formula are defined as follows: +Mp is the measurement result of the PCell, not taking into account any offsets. +Mn is the measurement result of the neighbouring cell, not taking into account any offsets. +Ofn is the frequency specific offset of the frequency of the neighbour cell (i.e. offsetFreq as defined within measObjectEUTRA corresponding to the frequency of the neighbour cell). +Ocn is the cell specific offset of the neighbour cell (i.e. cellIndividualOffset as defined within measObjectEUTRA corresponding to the frequency of the neighbour cell), and set to zero if not configured for the neighbour cell. +Hys is the hysteresis parameter for this event (i.e. hysteresis as defined within reportConfigEUTRA for this event). +Thresh1 is the threshold parameter for this event (i.e. a5-Threshold1 as defined within reportConfigEUTRA for this event). +Thresh2 is the threshold parameter for this event (i.e. a5-Threshold2 as defined within reportConfigEUTRA for this event). +Mn, Mp are expressed in dBm in case of RSRP, or in dB in case of RSRQ. +Ofn, Ocn, Hys are expressed in dB. +Thresh1 is expressed in the same unit as Mp. +Thresh2 is expressed in the same unit as Mn. +5.5.4.6a Event A6 (Neighbour becomes offset better than SCell) +The UE shall: +1> consider the entering condition for this event to be satisfied when condition A6-1, as specified below, is fulfilled; +1> consider the leaving condition for this event to be satisfied when condition A6-2, as specified below, is fulfilled; +1> for this measurement, consider the (secondary) cell that is configured on the frequency indicated in the associated measObjectEUTRA to be the serving cell; +NOTE: The neighbour(s) is on the same frequency as the SCell i.e. both are on the frequency indicated in the associated measObject. +Inequality A6-1 (Entering condition) + +Inequality A6-2 (Leaving condition) + +The variables in the formula are defined as follows: +Mn is the measurement result of the neighbouring cell, not taking into account any offsets. +Ocn is the cell specific offset of the neighbour cell (i.e. cellIndividualOffset as defined within measObjectEUTRA corresponding to the frequency of the neighbour cell), and set to zero if not configured for the neighbour cell. +Ms is the measurement result of the serving cell, not taking into account any offsets. +Ocs is the cell specific offset of the serving cell (i.e. cellIndividualOffset as defined within measObjectEUTRA corresponding to the serving frequency), and is set to zero if not configured for the serving cell. +Hys is the hysteresis parameter for this event (i.e. hysteresis as defined within reportConfigEUTRA for this event). +Off is the offset parameter for this event (i.e. a6-Offset as defined within reportConfigEUTRA for this event). +Mn, Ms are expressed in dBm in case of RSRP, or in dB in case of RSRQ. +Ocn, Ocs, Hys, Off are expressed in dB. +5.5.4.7 Event B1 (Inter RAT neighbour becomes better than threshold) +The UE shall: +1> for UTRA and CDMA2000, only trigger the event for cells included in the corresponding measurement object; +1> consider the entering condition for this event to be satisfied when condition B1-1, as specified below, is fulfilled; +1> consider the leaving condition for this event to be satisfied when condition B1-2, as specified below, is fulfilled; +Inequality B1-1 (Entering condition) + +Inequality B1-2 (Leaving condition) + +The variables in the formula are defined as follows: +Mn is the measurement result of the inter-RAT neighbour cell, not taking into account any offsets. For CDMA 2000 measurement result, pilotStrength is divided by -2. +Ofn is the frequency specific offset of the frequency of the inter-RAT neighbour cell (i.e. offsetFreq as defined within the measObject corresponding to the frequency of the neighbour inter-RAT cell). +Hys is the hysteresis parameter for this event (i.e. hysteresis as defined within reportConfigInterRAT for this event). +Thresh is the threshold parameter for this event (i.e. b1-Threshold as defined within reportConfigInterRAT for this event). For CDMA2000, b1-Threshold is divided by -2. +Mn is expressed in dBm or in dB, depending on the measurement quantity of the inter-RAT neighbour cell. +Ofn, Hys are expressed in dB. +Thresh is expressed in the same unit as Mn. +5.5.4.8 Event B2 (PCell becomes worse than threshold1 and inter RAT neighbour becomes better than threshold2) +The UE shall: +1> for UTRA and CDMA2000, only trigger the event for cells included in the corresponding measurement object; +1> consider the entering condition for this event to be satisfied when both condition B2-1 and condition B2-2, as specified below, are fulfilled; +1> consider the leaving condition for this event to be satisfied when condition B2-3 or condition B2-4, i.e. at least one of the two, as specified below, is fulfilled; +Inequality B2-1 (Entering condition 1) + +Inequality B2-2 (Entering condition 2) + +Inequality B2-3 (Leaving condition 1) + +Inequality B2-4 (Leaving condition 2) + +The variables in the formula are defined as follows: +Mp is the measurement result of the PCell, not taking into account any offsets. +Mn is the measurement result of the inter-RAT neighbour cell, not taking into account any offsets. For CDMA2000 measurement result, pilotStrength is divided by -2. +Ofn is the frequency specific offset of the frequency of the inter-RAT neighbour cell (i.e. offsetFreq as defined within the measObject corresponding to the frequency of the inter-RAT neighbour cell). +Hys is the hysteresis parameter for this event (i.e. hysteresis as defined within reportConfigInterRAT for this event). +Thresh1 is the threshold parameter for this event (i.e. b2-Threshold1 as defined within reportConfigInterRAT for this event). +Thresh2 is the threshold parameter for this event (i.e. b2-Threshold2 as defined within reportConfigInterRAT for this event). For CDMA2000, b2-Threshold2 is divided by -2. +Mp is expressed in dBm in case of RSRP, or in dB in case of RSRQ. +Mn is expressed in dBm or dB, depending on the measurement quantity of the inter-RAT neighbour cell. +Ofn, Hys are expressed in dB. +Thresh1 is expressed in the same unit as Mp. +Thresh2 is expressed in the same unit as Mn. +5.5.5 Measurement reporting + +Figure 5.5.5-1: Measurement reporting +The purpose of this procedure is to transfer measurement results from the UE to E-UTRAN. +For the measId for which the measurement reporting procedure was triggered, the UE shall set the measResults within the MeasurementReport message as follows: +1> set the measId to the measurement identity that triggered the measurement reporting; +1> set the measResultPCell to include the quantities of the PCell; +1> set the measResultServFreqList to include for each SCell that is configured, if any, within measResultSCell the quantities of the concerned SCell, if available according to performance requirements in [16]; +1> if the reportConfig associated with the measId that triggered the measurement reporting includes reportAddNeighMeas: +2> for each serving frequency for which measObjectId is referenced in the measIdList, other than the frequency corresponding with the measId that triggered the measurement reporting: +3> set the measResultServFreqList to include within measResultBestNeighCell the physCellId and the quantities of the best non-serving cell, based on RSRP, on the concerned serving frequency; +1> if there is at least one applicable neighbouring cell to report: +2> set the measResultNeighCells to include the best neighbouring cells up to maxReportCells in accordance with the following: +3> if the triggerType is set to event: +4> include the cells included in the cellsTriggeredList as defined within the VarMeasReportList for this measId; +3> else: +4> include the applicable cells for which the new measurement results became available since the last periodical reporting or since the measurement was initiated or reset; +NOTE: The reliability of the report (i.e. the certainty it contains the strongest cells on the concerned frequency) depends on the measurement configuration i.e. the reportInterval. The related performance requirements are specified in TS 36.133 [16]. +3> for each cell that is included in the measResultNeighCells, include the physCellId; +3> if the triggerType is set to event; or the purpose is set to reportStrongestCells or to reportStrongestCellsForSON: +4> for each included cell, include the layer 3 filtered measured results in accordance with the reportConfig for this measId, ordered as follows: +5> if the measObject associated with this measId concerns E-UTRA: +6> set the measResult to include the quantity(ies) indicated in the reportQuantity within the concerned reportConfig in order of decreasing triggerQuantity, i.e. the best cell is included first; +5> if the measObject associated with this measId concerns UTRA FDD and if ReportConfigInterRAT includes the reportQuantityUTRA-FDD: +6> set the measResult to include the quantities indicated by the reportQuantityUTRA-FDD in order of decreasing measQuantityUTRA-FDD within the quantityConfig, i.e. the best cell is included first; +5> if the measObject associated with this measId concerns UTRA FDD and if ReportConfigInterRAT does not include the reportQuantityUTRA-FDD; or +5> if the measObject associated with this measId concerns UTRA TDD, GERAN or CDMA2000: +6> set the measResult to the quantity as configured for the concerned RAT within the quantityConfig in order of either decreasing quantity for UTRA and GERAN or increasing quantity for CDMA2000 pilotStrength, i.e. the best cell is included first; +3> else if the purpose is set to reportCGI: +4> if the mandatory present fields of the cgi-Info for the cell indicated by the cellForWhichToReportCGI in the associated measObject have been obtained: +5> if the cell broadcasts a CSG identity: +6> include the csg-Identity; +6> include the csg-MemberStatus and set it to member if the cell is a CSG member cell; +5> if the si-RequestForHO is configured within the reportConfig associated with this measId: +6> include the cgi-Info containing all the fields that have been successfully acquired, except for the plmn-IdentityList; +5> else: +6> include the cgi-Info containing all the fields that have been successfully acquired; +1> if the ue-RxTxTimeDiffPeriodical is configured within the corresponding reportConfig for this measId; +2> set the ue-RxTxTimeDiffResult to the measurement result provided by lower layers; +2> set the currentSFN; +1> if the includeLocationInfo is configured in the corresponding reportConfig for this measId and detailed location information that has not been reported is available, set the content of the locationInfo as follows: +2> include the locationCoordinates; +2> if available, include the gnss-TOD-msec; +1> increment the numberOfReportsSent as defined within the VarMeasReportList for this measId by 1; +1> stop the periodical reporting timer, if running; +1> if the numberOfReportsSent as defined within the VarMeasReportList for this measId is less than the reportAmount as defined within the corresponding reportConfig for this measId: +2> start the periodical reporting timer with the value of reportInterval as defined within the corresponding reportConfig for this measId; +1> else: +2> if the triggerType is set to periodical: +3> remove the entry within the VarMeasReportList for this measId; +3> remove this measId from the measIdList within VarMeasConfig; +1> if the measured results are for CDMA2000 HRPD: +2> set the preRegistrationStatusHRPD to the UE's CDMA2000 upper layer's HRPD preRegistrationStatus; +1> if the measured results are for CDMA2000 1xRTT: +2> set the preRegistrationStatusHRPD to FALSE; +1> submit the MeasurementReport message to lower layers for transmission, upon which the procedure ends; +5.5.6 Measurement related actions +5.5.6.1 Actions upon handover and re-establishment +E-UTRAN applies the handover procedure as follows: +- when performing the handover procedure, as specified in 5.3.5.4, ensure that a measObjectId corresponding to each handover target serving frequency is configured as a result of the procedures described in this sub-clause and in 5.3.5.4; +- when changing the band while the physical frequency remains unchanged, E-UTRAN releases the measObject corresponding to the source frequency and adds a measObject corresponding to the target frequency (i.e. it does not reconfigure the measObject); +E-UTRAN applies the re-establishment procedure as follows: +- when performing the connection re-establishment procedure, as specified in 5.3.7, ensure that a measObjectId corresponding each target serving frequency is configured as a result of the procedure described in this sub-clause and the subsequent connection reconfiguration procedure immediately following the re-establishment procedure; +- in the first reconfiguration following the re-establishment when changing the band while the physical frequency remains unchanged, E-UTRAN releases the measObject corresponding to the source frequency and adds a measObject corresponding to the target frequency (i.e. it does not reconfigure the measObject); +The UE shall: +1> for each measId included in the measIdList within VarMeasConfig: +2> if the triggerType is set to periodical: +3> remove this measId from the measIdList within VarMeasConfig: +1> if the procedure was triggered due to a handover or successful re-establishment and the procedure involves a change of primary frequency, update the measId values in the measIdList within VarMeasConfig as follows: +2> if a measObjectId value corresponding to the target primary frequency exists in the measObjectList within VarMeasConfig: +3> for each measId value in the measIdList: +4> if the measId value is linked to the measObjectId value corresponding to the source primary frequency: +5> link this measId value to the measObjectId value corresponding to the target primary frequency; +4> else if the measId value is linked to the measObjectId value corresponding to the target primary frequency: +5> link this measId value to the measObjectId value corresponding to the source primary frequency; +2> else: +3> remove all measId values that are linked to the measObjectId value corresponding to the source primary frequency; +1> remove all measurement reporting entries within VarMeasReportList; +1> stop the periodical reporting timer or timer T321, whichever one is running, as well as associated information (e.g. timeToTrigger) for all measId; +1> release the measurement gaps, if activated; +NOTE: If the UE requires measurement gaps to perform inter-frequency or inter-RAT measurements, the UE resumes the inter-frequency and inter-RAT measurements after the E-UTRAN has setup the measurement gaps. +5.5.6.2 Speed dependant scaling of measurement related parameters +The UE shall adjust the value of the following parameter configured by the E-UTRAN depending on the UE speed: timeToTrigger. The UE shall apply 3 different levels, which are selected as follows: +The UE shall: +1> perform mobility state detection using the mobility state detection as specified in TS 36.304 [4] with the following modifications: +2> counting handovers instead of cell reselections; +2> applying the parameter applicable for RRC_CONNECTED as included in speedStatePars within VarMeasConfig; +1> if high mobility state is detected: +2> use the timeToTrigger value multiplied by sf-High within VarMeasConfig; +1> else if medium mobility state is detected: +2> use the timeToTrigger value multiplied by sf-Medium within VarMeasConfig; + 1> else +2> no scaling is applied; +5.5.7 Inter-frequency RSTD measurement indication +5.5.7.1 General + + +Figure 5.5.7.1-1: Inter-frequency RSTD measurement indication +The purpose of this procedure is to indicate to the network that the UE is going to start/stop OTDOA inter-frequency RSTD measurements which require measurement gaps as specified in [16, 8.1.2.6]. +NOTE: It is a network decision to configure the measurement gap. +5.5.7.2 Initiation +The UE shall: +1> if and only if upper layers indicate to start performing inter-frequency RSTD measurements; and the UE requires measurement gaps for these measurements while measurement gaps are either not configured or not sufficient: +2> initiate the procedure to indicate start; +NOTE 1: The UE verifies the measurement gap situation only upon receiving the indication from upper layers. If at this point in time sufficient gaps are available, the UE does not initiate the procedure. Unless it receives a new indication from upper layers, the UE is only allowed to further repeat the procedure in the same PCell once per frequency if the provided measurement gaps are insufficient. +1> if and only if upper layers indicate to stop performing inter-frequency RSTD measurements: +2> initiate the procedure to indicate stop; +NOTE 2: The UE may initiate the procedure to indicate stop even if it did not previously initiate the procedure to indicate start. +5.5.7.3 Actions related to transmission of InterFreqRSTDMeasurementIndication message +The UE shall set the contents of InterFreqRSTDMeasurementIndication message as follows: +1> set the rstd-InterFreqIndication as follows: +2> if the procedure is initiated to indicate start of inter-frequency RSTD measurements: +3> set the rstd-InterFreqInfoList according to the information received from upper layers; +2> else if the procedure is initiated to indicate stop of inter-frequency RSTD measurements: +3> set the rstd-InterFreqIndication to the value stop; +1> submit the InterFreqRSTDMeasurementIndication message to lower layers for transmission, upon which the procedure ends; +5.6 Other +5.6.1 DL information transfer +5.6.1.1 General + +Figure 5.6.1.1-1: DL information transfer +The purpose of this procedure is to transfer NAS or (tunnelled) non-3GPP dedicated information from E-UTRAN to a UE in RRC_CONNECTED. +5.6.1.2 Initiation +E-UTRAN initiates the DL information transfer procedure whenever there is a need to transfer NAS or non-3GPP dedicated information. E-UTRAN initiates the DL information transfer procedure by sending the DLInformationTransfer message. +5.6.1.3 Reception of the DLInformationTransfer by the UE +Upon receiving DLInformationTransfer message, the UE shall: +1> if the dedicatedInfoType is set to dedicatedInfoNAS: +2> forward the dedicatedInfoNAS to the NAS upper layers. +1> if the dedicatedInfoType is set to dedicatedInfoCDMA2000-1XRTT or to dedicatedInfoCDMA2000-HRPD: +2> forward the dedicatedInfoCDMA2000 to the CDMA2000 upper layers; +5.6.2 UL information transfer +5.6.2.1 General + +Figure 5.6.2.1-1: UL information transfer +The purpose of this procedure is to transfer NAS or (tunnelled) non-3GPP dedicated information from the UE to E-UTRAN. +5.6.2.2 Initiation +A UE in RRC_CONNECTED initiates the UL information transfer procedure whenever there is a need to transfer NAS or non-3GPP dedicated information, except at RRC connection establishment in which case the NAS information is piggybacked to the RRCConnectionSetupComplete message. The UE initiates the UL information transfer procedure by sending the ULInformationTransfer message. When CDMA2000 information has to be transferred, the UE shall initiate the procedure only if SRB2 is established. +5.6.2.3 Actions related to transmission of ULInformationTransfer message +The UE shall set the contents of the ULInformationTransfer message as follows: +1> if there is a need to transfer NAS information: +2> set the dedicatedInfoType to include the dedicatedInfoNAS; +1> if there is a need to transfer CDMA2000 1XRTT information: +2> set the dedicatedInfoType to include the dedicatedInfoCDMA2000-1XRTT; +1> if there is a need to transfer CDMA2000 HRPD information: +2> set the dedicatedInfoType to include the dedicatedInfoCDMA2000-HRPD; +1> submit the ULInformationTransfer message to lower layers for transmission, upon which the procedure ends; +5.6.2.4 Failure to deliver ULInformationTransfer message +The UE shall: +1> if mobility (i.e. handover, RRC connection re-establishment) occurs before the successful delivery of ULInformationTransfer messages has been confirmed by lower layers: +2> inform upper layers about the possible failure to deliver the information contained in the concerned ULInformationTransfer messages; +5.6.3 UE capability transfer +5.6.3.1 General + +Figure 5.6.3.1-1: UE capability transfer +The purpose of this procedure is to transfer UE radio access capability information from the UE to E-UTRAN. +If the UE has changed its E-UTRAN radio access capabilities, the UE shall request higher layers to initiate the necessary NAS procedures (see TS 23.401 [41]) that would result in the update of UE radio access capabilities using a new RRC connection. +NOTE: Change of the UE's GERAN UE radio capabilities in RRC_IDLE is supported by use of Tracking Area Update. +5.6.3.2 Initiation +E-UTRAN initiates the procedure to a UE in RRC_CONNECTED when it needs (additional) UE radio access capability information. +5.6.3.3 Reception of the UECapabilityEnquiry by the UE +The UE shall: +1> set the contents of UECapabilityInformation message as follows: +2> if the ue-CapabilityRequest includes eutra: +3> include the UE-EUTRA-Capability within a ue-CapabilityRAT-Container and with the rat-Type set to eutra; +3> if the UE supports FDD and TDD: +4> set all fields of UECapabilityInformation, except field fdd-Add-UE-EUTRA-Capabilities and tdd-Add-UE-EUTRA-Capabilities (including their sub-fields), to include the values applicable for both FDD and TDD (i.e. functionality supported by both modes); +4> if (some of) the UE capability fields have a different value for FDD and TDD: +5> if for FDD, the UE supports additional functionality compared to what is indicated by the previous fields of UECapabilityInformation: +6> include field fdd-Add-UE-EUTRA-Capabilities and set it to include fields reflecting the additional functionality applicable for FDD; +5> if for TDD, the UE supports additional functionality compared to what is indicated by the previous fields of UECapabilityInformation: +6> include field tdd-Add-UE-EUTRA-Capabilities and set it to include fields reflecting the additional functionality applicable for TDD; +NOTE: The UE includes fields of XDD-Add-UE-EUTRA-Capabilities in accordance with the following: +- The field is included only if one or more of its sub-fields has a value that is different compared to the value signalled elsewhere within UE-EUTRA-Capability; +(this value signalled elsewhere is also referred to as the Common value, that is supported for both XDD modes) +- For the fields that are included in XDD-Add-UE-EUTRA-Capabilities, the UE sets: +- the sub-fields that are not allowed to be different the same as the Common value; +- the sub-fields that are allowed to be different to a value indicating at least the same functionality as indicated by the Common value; +3> else (UE supports single xDD mode): +4> set all fields of UECapabilityInformation, except field fdd-Add-UE-EUTRA-Capabilities and tdd-Add-UE-EUTRA-Capabilities (including their sub-fields), to include the values applicable for the xDD mode supported by the UE; +2> if the ue-CapabilityRequest includes geran-cs and if the UE supports GERAN CS domain: +3> include the UE radio access capabilities for GERAN CS within a ue-CapabilityRAT-Container and with the rat-Type set to geran-cs; +2> if the ue-CapabilityRequest includes geran-ps and if the UE supports GERAN PS domain: +3> include the UE radio access capabilities for GERAN PS within a ue-CapabilityRAT-Container and with the rat-Type set to geran-ps; +2> if the ue-CapabilityRequest includes utra and if the UE supports UTRA: +3> include the UE radio access capabilities for UTRA within a ue-CapabilityRAT-Container and with the rat-Type set to utra; +2> if the ue-CapabilityRequest includes cdma2000-1XRTT and if the UE supports CDMA2000 1xRTT: +3> include the UE radio access capabilities for CDMA2000 within a ue-CapabilityRAT-Container and with the rat-Type set to cdma2000-1XRTT; +1> submit the UECapabilityInformation message to lower layers for transmission, upon which the procedure ends; +5.6.4 CSFB to 1x Parameter transfer +5.6.4.1 General + +Figure 5.6.4.1-1: CSFB to 1x Parameter transfer +The purpose of this procedure is to transfer the CDMA2000 1xRTT parameters required to register the UE in the CDMA2000 1xRTT network for CSFB support. +5.6.4.2 Initiation +A UE in RRC_CONNECTED initiates the CSFB to 1x Parameter transfer procedure upon request from the CDMA2000 upper layers. The UE initiates the CSFB to 1x Parameter transfer procedure by sending the CSFBParametersRequestCDMA2000 message. +5.6.4.3 Actions related to transmission of CSFBParametersRequestCDMA2000 message +The UE shall: +1> submit the CSFBParametersRequestCDMA2000 message to lower layers for transmission using the current configuration; +5.6.4.4 Reception of the CSFBParametersResponseCDMA2000 message +Upon reception of the CSFBParametersResponseCDMA2000 message, the UE shall: +1> forward the rand and the mobilityParameters to the CDMA2000 1xRTT upper layers; +5.6.5 UE Information +5.6.5.1 General + +Figure 5.6.5.1-1: UE information procedure +The UE information procedure is used by E-UTRAN to request the UE to report information. +5.6.5.2 Initiation +E-UTRAN initiates the procedure by sending the UEInformationRequest message. +5.6.5.3 Reception of the UEInformationRequest message +Upon receiving the UEInformationRequest message, the UE shall: +1> if rach-ReportReq is set to true, set the contents of the rach-Report in the UEInformationResponse message as follows: +2> set the numberOfPreamblesSent to indicate the number of preambles sent by MAC for the last successfully completed random access procedure; +2> if contention resolution was not successful as specified in TS 36.321 [6] for at least one of the transmitted preambles for the last successfully completed random access procedure: +3> set the contentionDetected to true; +2> else: +3> set the contentionDetected to false; +1> if rlf-ReportReq is set to true and the UE has radio link failure information or handover failure information available in VarRLF-Report and plmn-Identity stored in VarRLF-Report is equal to the RPLMN, set the rlf-Report in the UEInformationResponse message to the value of rlf-Report in VarRLF-Report; +1> if the rlf-Report is included in UEInformationResponse: +2> discard the rlf-Report from VarRLF-Report upon successful delivery of the UEInformationResponse message confirmed by lower layers. +1> if the logMeasReportReq is present and the plmn-Identity stored in VarLogMeasReport is equal to the RPLMN: +2> if VarLogMeasReport includes one or more logged measurement entries, set the contents of the logMeasReport in the UEInformationResponse message as follows: +3> include the absoluteTimeStamp and set it to the value of absoluteTimeInfo in the VarLogMeasReport; +3> include the traceReference and set it to the value of traceReference in the VarLogMeasReport; +3> include the traceRecordingSessionRef and set it to the value of traceRecordingSessionRef in the VarLogMeasReport; +3> include the tce-Id and set it to the value of tce-Id in the VarLogMeasReport; +3> include the logMeasInfoList and set it to include one or more entries from VarLogMeasReport starting from the entries logged first; +3> if the VarLogMeasReport includes one or more additional logged measurement entries that are not included in the logMeasInfoList within the UEInformationResponse message: +4> include the logMeasAvailable; +1> if the logMeasReport is included in the UEInformationResponse: +2> submit the UEInformationResponse message to lower layers for transmission via SRB2; +2> discard the logged measurement entries included in the logMeasInfoList from VarLogMeasReport upon successful delivery of the UEInformationResponse message confirmed by lower layers; +1> else: +2> submit the UEInformationResponse message to lower layers for transmission via SRB1; + +5.6.6 Logged Measurement Configuration +5.6.6.1 General + + +Figure 5.6.6.1-1: Logged measurement configuration +The purpose of this procedure is to configure the UE to perform logging of measurement results while in RRC_IDLE. The procedure applies to logged measurements capable UEs that are in RRC_CONNECTED. +NOTE E-UTRAN may retrieve stored logged measurement information by means of the UE Information procedure. +5.6.6.2 Initiation +E-UTRAN initiates the logged measurement configuration procedure to UE in RRC_CONNECTED by sending the LoggedMeasurementConfiguration message. +5.6.6.3 Reception of the LoggedMeasurementConfiguration by the UE +Upon receiving the LoggedMeasurementConfiguration message the UE shall: +1> discard the logged measurement configuration as well as the logged measurement information as specified in 5.6.7; +1> store the received loggingDuration, loggingInterval and areaConfiguration, if included, in VarLogMeasConfig; +1> store the RPLMN as plmn-Identity in VarLogMeasReport; +1> store the received absoluteTimeInfo, traceReference, traceRecordingSessionRef and tce-Id in VarLogMeasReport; +1> start timer T330 with the timer value set to the loggingDuration; +5.6.6.4 T330 expiry +Upon expiry of T330 the UE shall: +1> release VarLogMeasConfig; +The UE is allowed to discard stored logged measurements, i.e. to release VarLogMeasReport 48 hours after T330 expiry. +5.6.7 Release of Logged Measurement Configuration +5.6.7.1 General +The purpose of this procedure is to release the logged measurement configuration as well as the logged measurement information. +5.6.7.2 Initiation +The UE shall initiate the procedure upon receiving a logged measurement configuration in another RAT. The UE shall also initiate the procedure upon power off or detach. +The UE shall: +1> stop timer T330, if running; +1> if stored, discard the logged measurement configuration as well as the logged measurement information, i.e. release the UE variables VarLogMeasConfig and VarLogMeasReport; +5.6.8 Measurements logging +5.6.8.1 General +This procedure specifies the logging of available measurements by a UE in RRC_IDLE that has a logged measurement configuration. +5.6.8.2 Initiation +While T330 is running, the UE shall: +1> perform the logging in accordance with the following: +2> if the UE is camping normally on an E-UTRA cell and the RPLMN of the UE is the same as the plmn-Identity stored in VarLogMeasReport and, if the cell is part of the area indicated by areaConfiguration if configured in VarLogMeasConfig: +3> perform the logging at regular time intervals, as defined by the loggingInterval in VarLogMeasConfig; +2> when adding a logged measurement entry in VarLogMeasReport, include the fields in accordance with the following: +3> set the relativeTimeStamp to indicate the elapsed time since the moment at which the logged measurement configuration was received; +3> if detailed location information became available during the last logging interval, set the content of the locationInfo as follows: +4> include the locationCoordinates; +3> set the servCellIdentity to indicate global cell identity of the cell the UE is camping on; +3> set the measResultServCell to include the quantities of the cell the UE is camping on; +3> if available, set the measResultNeighCells, in order of decreasing ranking-criterion as used for cell re-selection, to include neighbouring cell measurements that became available during the last logging interval for at most the following number of neighbouring cells; 6 intra-frequency and 3 inter-frequency neighbours per frequency as well as 3 inter-RAT neighbours, per frequency/ set of frequencies (GERAN) per RAT; +NOTE: The UE includes the latest results of the available measurements as used for cell reselection evaluation, which are performed in accordance with the performance requirements as specified in TS 36.133 [16]. +2> when the memory reserved for the logged measurement information becomes full, stop timer T330 and perform the same actions as performed upon expiry of T330, as specified in 5.6.6.4; + +5.7 Generic error handling +5.7.1 General +The generic error handling defined in the subsequent sub-clauses applies unless explicitly specified otherwise e.g. within the procedure specific error handling. +The UE shall consider a value as not comprehended when it is set: +- to an extended value that is not defined in the version of the transfer syntax supported by the UE. +- to a spare or reserved value unless the specification defines specific behaviour that the UE shall apply upon receiving the concerned spare/ reserved value. +The UE shall consider a field as not comprehended when it is defined: +- as spare or reserved unless the specification defines specific behaviour that the UE shall apply upon receiving the concerned spare/ reserved field. +5.7.2 ASN.1 violation or encoding error +The UE shall: +1> when receiving an RRC message on the BCCH, PCCH, CCCH, or MCCH for which the abstract syntax is invalid [13]: +2> ignore the message; +NOTE This section applies in case one or more fields is set to a value, other than a spare, reserved or extended value, not defined in this version of the transfer syntax. E.g. in the case the UE receives value 12 for a field defined as INTEGER (1..11). In cases like this, it may not be possible to reliably detect which field is in the error hence the error handling is at the message level. +5.7.3 Field set to a not comprehended value +The UE shall, when receiving an RRC message on any logical channel: +1> if the message includes a field that has a value that the UE does not comprehend: +2> if a default value is defined for this field: +3> treat the message while using the default value defined for this field; +2> else if the concerned field is optional: +3> treat the message as if the field were absent and in accordance with the need code for absence of the concerned field; +2> else: +3> treat the message as if the field were absent and in accordance with sub-clause 5.7.4; +5.7.4 Mandatory field missing +The UE shall: +1> if the message includes a field that is mandatory to include in the message (e.g. because conditions for mandatory presence are fulfilled) and that field is absent or treated as absent: +2> if the RRC message was received on DCCH or CCCH: +3> ignore the message; +2> else: +3> if the field concerns a (sub-field of) an entry of a list (i.e. a SEQUENCE OF): +4> treat the list as if the entry including the missing or not comprehended field was not present; +3> else if the field concerns a sub-field of another field, referred to as the 'parent' field i.e. the field that is one nesting level up compared to the erroneous field: +4> consider the 'parent' field to be set to a not comprehended value; +4> apply the generic error handling to the subsequent 'parent' field(s), until reaching the top nesting level i.e. the message level; +3> else (field at message level): +4> ignore the message; +NOTE 1: The error handling defined in these sub-clauses implies that the UE ignores a message with the message type or version set to a not comprehended value. +NOTE 2: The nested error handling for messages received on logical channels other than DCCH and CCCH applies for errors in extensions also, even for errors that can be regarded as invalid E-UTRAN operation e.g. E-UTRAN not observing conditional presence. +The following ASN.1 further clarifies the levels applicable in case of nested error handling for errors in extension fields. +-- /example/ ASN1START + +-- Example with extension addition group + +ItemInfoList ::= SEQUENCE (SIZE (1..max)) OF ItemInfo + +ItemInfo ::= SEQUENCE { + itemIdentity INTEGER (1..max), + field1 Field1, + field2 Field2 OPTIONAL, -- Need ON + ... + [[ field3-r9 Field3-r9 OPTIONAL, -- Cond Cond1 + field4-r9 Field4-r9 OPTIONAL -- Need ON + ]] +} + +-- Example with traditional non-critical extension (empty sequence) + +BroadcastInfoBlock1 ::= SEQUENCE { + itemIdentity INTEGER (1..max), + field1 Field1, + field2 Field2 OPTIONAL, -- Need ON + nonCriticalExtension BroadcastInfoBlock1-v940-IEs OPTIONAL +} + +BroadcastInfoBlock1-v940-IEs::= SEQUENCE { + field3-r9 Field3-r9 OPTIONAL, -- Cond Cond1 + field4-r9 Field4-r9 OPTIONAL, -- Need ON + nonCriticalExtension SEQUENCE {} OPTIONAL -- Need OP +} + +-- ASN1STOP + +The UE shall, apply the following principles regarding the levels applicable in case of nested error handling: +- an extension additon group is not regarded as a level on its own. E.g. in the ASN.1 extract in the previous, a error regarding the conditionality of field3 would result in the entire itemInfo entry to be ignored (rather than just the extension addition group containing field3 and field4) +- a traditional nonCriticalExtension is not regarded as a level on its own. E.g. in the ASN.1 extract in the previous, a error regarding the conditionality of field3 would result in the entire BroadcastInfoBlock1 to be ignored (rather than just the non critical extension containing field3 and field4). +5.7.5 Not comprehended field +The UE shall, when receiving an RRC message on any logical channel: +1> if the message includes a field that the UE does not comprehend: +2> treat the rest of the message as if the field was absent; +NOTE: This section does not apply to the case of an extension to the value range of a field. Such cases are addressed instead by the requirements in section 5.7.3. +5.8 MBMS +5.8.1 Introduction +5.8.1.1 General +In general the control information relevant only for UEs supporting MBMS is separated as much as possible from unicast control information. Most of the MBMS control information is provided on a logical channel specific for MBMS common control information: the MCCH. E-UTRA employs one MCCH logical channel per MBSFN area. In case the network configures multiple MBSFN areas, the UE acquires the MBMS control information from the MCCHs that are configured to identify if services it is interested to receive are ongoing. The action applicable when the UE is unable to simultaneously receive MBMS and unicast services is up to UE implementation. In this release of the specification, an MBMS capable UE is only required to support reception of a single MBMS service at a time, and reception of more than one MBMS service (also possibly on more than one MBSFN area) in parallel is left for UE implementation. The MCCH carries the MBSFNAreaConfiguration message, which indicates the MBMS sessions that are ongoing as well as the (corresponding) radio resource configuration. The MCCH may also carry the MBMSCountingRequest message, when E-UTRAN wishes to count the number of UEs in RRC_CONNECTED that are receiving or interested to receive one or more specific MBMS services. +A limited amount of MBMS control information is provided on the BCCH. This primarily concerns the information needed to acquire the MCCH(s). This information is carried by means of a single MBMS specific SystemInformationBlock: SystemInformationBlockType13. An MBSFN area is identified solely by the mbsfn-AreaId in SystemInformationBlockType13. At mobility, the UE considers that the MBSFN area is continuous when the source cell and the target cell broadcast the same value in the mbsfn-AreaId. +5.8.1.2 Scheduling +The MCCH information is transmitted periodically, using a configurable repetition period. Scheduling information is not provided for MCCH i.e. both the time domain scheduling as well as the lower layer configuration are semi-statically configured, as defined within SystemInformationBlockType13. +For MBMS user data, which is carried by the MTCH logical channel, E-UTRAN periodically provides MCH scheduling information (MSI) at lower layers (MAC). This MCH information only concerns the time domain scheduling i.e. the frequency domain scheduling and the lower layer configuration are semi-statically configured. The periodicity of the MSI is configurable and defined by the MCH scheduling period. +5.8.1.3 MCCH information validity and notification of changes +Change of MCCH information only occurs at specific radio frames, i.e. the concept of a modification period is used. Within a modification period, the same MCCH information may be transmitted a number of times, as defined by its scheduling (which is based on a repetition period). The modification period boundaries are defined by SFN values for which SFN mod m= 0, where m is the number of radio frames comprising the modification period. The modification period is configured by means of SystemInformationBlockType13. +When the network changes (some of) the MCCH information, it notifies the UEs about the change during a first modification period. In the next modification period, the network transmits the updated MCCH information. These general principles are illustrated in figure 5.8.1.3-1, in which different colours indicate different MCCH information. Upon receiving a change notification, a UE interested to receive MBMS services acquires the new MCCH information immediately from the start of the next modification period. The UE applies the previously acquired MCCH information until the UE acquires the new MCCH information. + +Figure 5.8.1.3-1: Change of MCCH Information +Indication of an MBMS specific RNTI, the M-RNTI (see TS 36.321 [6]), on PDCCH is used to inform UEs in RRC_IDLE and UEs in RRC_CONNECTED about an MCCH information change. When receiving an MCCH information change notification, the UE knows that the MCCH information will change at the next modification period boundary. The notification on PDCCH indicates which of the MCCHs will change, which is done by means of an 8-bit bitmap. Within this bitmap, the bit at the position indicated by the field notificationIndicator is used to indicate changes for that MBSFN area: if the bit is set to "1", the corresponding MCCH will change. No further details are provided e.g. regarding which MCCH information will change. The MCCH information change notification is used to inform the UE about a change of MCCH information upon session start or about the start of MBMS counting. +The MCCH information change notifications on PDCCH are transmitted periodically and are carried on MBSFN subframes only. These MCCH information change notification occasions are common for all MCCHs that are configured, and configurable by parameters included in SystemInformationBlockType13: a repetition coefficient, a radio frame offset and a subframe index. These common notification occasions are based on the MCCH with the shortest modification period. +NOTE 1: E-UTRAN may modify the MBMS configuration information provided on MCCH at the same time as updating the MBMS configuration information carried on BCCH i.e. at a coinciding BCCH and MCCH modification period. Upon detecting that a new MCCH is configured on BCCH, a UE interested to receive one or more MBMS services should acquire the MCCH, unless it knows that the services it is interested in are not provided by the corresponding MBSFN area. +A UE that is receiving an MBMS service shall acquire the MCCH information from the start of each modification period. A UE that is not receiving an MBMS service, as well as UEs that are receiving an MBMS service but potentially interested to receive other services not started yet in another MBSFN area, shall verify that the stored MCCH information remains valid by attempting to find the MCCH information change notification at least notificationRepetitionCoeff times during the modification period of the applicable MCCH(s), if no MCCH information change notification is received. +NOTE 2: In case the UE is aware which MCCH(s) E-UTRAN uses for the service(s) it is interested to receive, the UE may only need to monitor change notifications for a subset of the MCCHs that are configured, referred to as the 'applicable MCCH(s)' in the above. +5.8.2 MCCH information acquisition +5.8.2.1 General + +Figure 5.8.2.1-1: MCCH information acquisition +The UE applies the MCCH information acquisition procedure to acquire the MBMS control information that is broadcasted by the E-UTRAN. The procedure applies to MBMS capable UEs that are in RRC_IDLE or in RRC_CONNECTED. +5.8.2.2 Initiation +A UE interested to receive MBMS services shall apply the MCCH information acquisition procedure upon entering the corresponding MBSFN area (e.g. upon power on, following UE mobility) and upon receiving a notification that the MCCH information has changed. A UE that is receiving an MBMS service shall apply the MCCH information acquisition procedure to acquire the MCCH, that corresponds with the service that is being received, at the start of each modification period. +Unless explicitly stated otherwise in the procedural specification, the MCCH information acquisition procedure overwrites any stored MCCH information, i.e. delta configuration is not applicable for MCCH information and the UE discontinues using a field if it is absent in MCCH information unless explicitly specified otherwise. +5.8.2.3 MCCH information acquisition by the UE +An MBMS capable UE shall: +1> if the procedure is triggered by an MCCH information change notification: +2> start acquiring the MBSFNAreaConfiguration message and the MBMSCountingRequest message if present, from the beginning of the modification period following the one in which the change notification was received; +NOTE 1: The UE continues using the previously received MCCH information until the new MCCH information has been acquired. +1> if the UE enters an MBSFN area: +2> acquire the MBSFNAreaConfiguration message and the MBMSCountingRequest message if present, at the next repetition period; +1> if the UE is receiving an MBMS service: +2> start acquiring the MBSFNAreaConfiguration message and the MBMSCountingRequest message if present, that both concern the MBSFN area of the service that is being received, from the beginning of each modification period; +5.8.2.4 Actions upon reception of the MBSFNAreaConfiguration message +No UE requirements related to the contents of this MBSFNAreaConfiguration apply other than those specified elsewhere e.g. within procedures using the concerned system information, the corresponding field descriptions. +5.8.2.5 Actions upon reception of the MBMSCountingRequest message +Upon receiving MBMSCountingRequest message, the UE shall perform the MBMS Counting procedure as specified in section 5.8.4. +5.8.3 MBMS PTM radio bearer configuration +5.8.3.1 General +The MBMS PTM radio bearer configuration procedure is used by the UE to configure RLC, MAC and the physical layer upon starting and/or stopping to receive an MRB. The procedure applies to UEs interested to receive one or more MBMS services. +NOTE: In case the UE is unable to receive an MBMS service due to capability limitations, upper layers may take appropriate action e.g. terminate a lower priority unicast service. +5.8.3.2 Initiation +The UE applies the MRB establishment procedure to start receiving a session of a service it has an interest in. The procedure may be initiated e.g. upon start of the MBMS session, upon (re-)entry of the corresponding MBSFN service area, upon becoming interested in the MBMS service, upon removal of UE capability limitations inhibiting reception of the concerned service. +The UE applies the MRB release procedure to stop receiving a session. The procedure may be initiated e.g. upon stop of the MBMS session, upon leaving the corresponding MBSFN service area, upon losing interest in the MBMS service, when capability limitations start inhibiting reception of the concerned service. +5.8.3.3 MRB establishment +Upon MRB establishment, the UE shall: +1> establish an RLC entity in accordance with the configuration specified in 9.1.1.4; +1> configure an MTCH logical channel in accordance with the received locgicalChannelIdentity, applicable for the MRB, as included in the MBSFNAreaConfiguration message; +1> configure the physical layer in accordance with the pmch-Config, applicable for the MRB, as included in the MBSFNAreaConfiguration message; +1> inform upper layers about the establishment of the MRB by indicating the corresponding tmgi and sessionId; +5.8.3.4 MRB release +Upon MRB release, the UE shall: +1> release the RLC entity as well as the related MAC and physical layer configuration; +1> inform upper layers about the release of the MRB by indicating the corresponding tmgi and sessionId; +5.8.4 MBMS Counting Procedure +5.8.4.1 General + + +Figure 5.8.4.1-1: MBMS Counting procedure +The MBMS Counting procedure is used by the E-UTRAN to count the number of RRC_CONNECTED mode UEs which are receiving via an MRB or interested to receive via an MRB the specified MBMS services. +The UE determines interest in an MBMS service, that is identified by the TMGI, by interaction with upper layers. +5.8.4.2 Initiation +E-UTRAN initiates the procedure by sending an MBMSCountingRequest message. +5.8.4.3 Reception of the MBMSCountingRequest message by the UE +Upon receiving the MBMSCountingRequest message, the UE in RRC_CONNECTED mode shall: +1> if the SystemInformationBlockType1, that provided the scheduling information for the systemInformationBlockType13 that included the configuration of the MCCH via which the MBMSCountingRequest message was received, contained the identity of the Registered PLMN, and +1> if the UE is receiving via an MRB or interested to receive via an MRB at least one of the services in the received countingRequestList: +2> if more than one entry is included in the mbsfn-AreaInfoList received in the SystemInformationBlockType13 that included the configuration of the MCCH via which the MBMSCountingRequest message was received: +3> include the mbsfn-AreaIndex in the MBMSCountingResponse message and set it to the index of the entry in the mbsfn-AreaInfoList within the received SystemInformationBlockType13 that corresponds with the MBSFN area used to transfer the received MBMSCountingRequest message; +2> for each MBMS service included in the received countingRequestList: +3> if the UE is receiving via an MRB or interested to receive via an MRB this MBMS service: +4> include an entry in the countingResponseList within the MBMSCountingResponse message with countingResponseService set it to the index of the entry in the countingRequestList within the received MBMSCountingRequest that corresponds with the MBMS service the UE is receiving or interested to receive; +2> submit the MBMSCountingResponse message to lower layers for transmission upon which the procedure ends; +NOTE 1: UEs that are receiving an MBMS User Service [56] by means of a Unicast Bearer Service [57] (i.e. via a DRB), but are interested to receive the concerned MBMS User Service [56] via an MBMS Bearer Service (i.e. via an MRB), respond to the counting request. +NOTE 2: If ciphering is used at upper layers, the UE does not respond to the counting request if it can not decipher the MBMS service for which counting is performed (see TS 22.146 [62, 5.3]). +NOTE 3: The UE treats the MBMSCountingRequest messages received in each modification period independently. In the unlikely case E-UTRAN would repeat an MBMSCountingRequest (i.e. including the same services) in a subsequent modification period, the UE responds again. + +5.9 RN procedures +5.9.1 RN reconfiguration +5.9.1.1 General + +Figure 5.9.1.1-1: RN reconfiguration +The purpose of this procedure is to configure/reconfigure the RN subframe configuration and/or to update the system information relevant for the RN in RRC_CONNECTED. +5.9.1.2 Initiation +E-UTRAN may initiate the RN reconfiguration procedure to an RN in RRC_CONNECTED when AS security has been activated. +5.9.1.3 Reception of the RNReconfiguration by the RN +The RN shall: +1> if the rn-SystemInfo is included: +2> if the systemInformationBlockType1 is included: +3> act upon the received SystemInformationBlockType1 as specified in 5.2.2.7; +2> if the SystemInformationBlockType2 is included: +3> act upon the received SystemInformationBlockType2 as specified in 5.2.2.9; +1> if the rn-SubframeConfig is included: +2> reconfigure lower layers in accordance with the received subframeConfigPatternFDD or subframeConfigPatternTDD; +2> if the rpdcch-Config is included: +3> reconfigure lower layers in accordance with the received rpdcch-Config; +1> submit the RNReconfigurationComplete message to lower layers for transmission, upon which the procedure ends; + +6 Protocol data units, formats and parameters (tabular & ASN.1) +6.1 General +The contents of each RRC message is specified in sub-clause 6.2 using ASN.1 to specify the message syntax and using tables when needed to provide further detailed information about the information elements specified in the message syntax. The syntax of the information elements that are defined as stand-alone abstract types is further specified in a similar manner in sub-clause 6.3. +The need for information elements to be present in a message or an abstract type, i.e., the ASN.1 fields that are specified as OPTIONAL in the abstract notation (ASN.1), is specified by means of comment text tags attached to the OPTIONAL statement in the abstract syntax. All comment text tags are available for use in the downlink direction only. The meaning of each tag is specified in table 6.1-1. +Table 6.1-1: Meaning of abbreviations used to specify the need for information elements to be present +Abbreviation Meaning Cond conditionTag +(Used in downlink only) Conditionally present +An information element for which the need is specified by means of conditions. For each conditionTag, the need is specified in a tabular form following the ASN.1 segment. In case, according to the conditions, a field is not present, the UE takes no action and where applicable shall continue to use the existing value (and/ or the associated functionality) unless explicitly stated otherwise in the description of the field itself. Need OP +(Used in downlink only) Optionally present +An information element that is optional to signal. For downlink messages, the UE is not required to take any special action on absence of the IE beyond what is specified in the procedural text or the field description table following the ASN.1 segment. The UE behaviour on absence should be captured either in the procedural text or in the field description. Need ON +(Used in downlink only) Optionally present, No action +An information element that is optional to signal. If the message is received by the UE, and in case the information element is absent, the UE takes no action and where applicable shall continue to use the existing value (and/ or the associated functionality). Need OR +(Used in downlink only) Optionally present, Release +An information element that is optional to signal. If the message is received by the UE, and in case the information element is absent, the UE shall discontinue/ stop using/ delete any existing value (and/ or the associated functionality). +Any IE with Need ON in system information shall be interpreted as Need OR. +Need codes may not be specified for a group, used in downlink, which includes one or more extensions. Upon absence of such a field, the UE shall: +- For each individual extension, including extensions that are mandatory to include in the optional group, act in accordance with the need code that is defined for the extension; +- Apply this behaviour not only for extensions included directly within the optional field, but also for extensions defined at further nesting levels; +NOTE: The above applies for groups of non critical extensions using double brackets, as well as non-critical extensions at the end of a message or at the end of a structure contained in a BIT STRING or OCTET STRING. +6.2 RRC messages +NOTE: The messages included in this section reflect the current status of the discussions. Additional messages may be included at a later stage. +6.2.1 General message structure +– EUTRA-RRC-Definitions +This ASN.1 segment is the start of the EUTRA RRC PDU definitions. +-- ASN1START + +EUTRA-RRC-Definitions DEFINITIONS AUTOMATIC TAGS ::= + +BEGIN + +-- ASN1STOP + +– BCCH-BCH-Message +The BCCH-BCH-Message class is the set of RRC messages that may be sent from the EUTRAN to the UE via BCH on the BCCH logical channel. +-- ASN1START + +BCCH-BCH-Message ::= SEQUENCE { + message BCCH-BCH-MessageType +} + +BCCH-BCH-MessageType ::= MasterInformationBlock + +-- ASN1STOP + +– BCCH-DL-SCH-Message +The BCCH-DL-SCH-Message class is the set of RRC messages that may be sent from the EUTRAN to the UE via DLSCH on the BCCH logical channel. +-- ASN1START + +BCCH-DL-SCH-Message ::= SEQUENCE { + message BCCH-DL-SCH-MessageType +} + +BCCH-DL-SCH-MessageType ::= CHOICE { + c1 CHOICE { + systemInformation SystemInformation, + systemInformationBlockType1 SystemInformationBlockType1 + }, + messageClassExtension SEQUENCE {} +} + +-- ASN1STOP + +– MCCH-Message +The MCCH-Message class is the set of RRC messages that may be sent from the EUTRAN to the UE on the MCCH logical channel. +-- ASN1START + +MCCH-Message ::= SEQUENCE { + message MCCH-MessageType +} + +MCCH-MessageType ::= CHOICE { + c1 CHOICE { + mbsfnAreaConfiguration-r9 MBSFNAreaConfiguration-r9 + }, + later CHOICE { + c2 CHOICE{ + mbmsCountingRequest-r10 MBMSCountingRequest-r10 + }, + messageClassExtension SEQUENCE {} + } +} + +-- ASN1STOP + +– PCCH-Message +The PCCH-Message class is the set of RRC messages that may be sent from the EUTRAN to the UE on the PCCH logical channel. +-- ASN1START + +PCCH-Message ::= SEQUENCE { + message PCCH-MessageType +} + +PCCH-MessageType ::= CHOICE { + c1 CHOICE { + paging Paging + }, + messageClassExtension SEQUENCE {} +} + +-- ASN1STOP + +– DL-CCCH-Message +The DL-CCCH-Message class is the set of RRC messages that may be sent from the EUTRAN to the UE on the downlink CCCH logical channel. +-- ASN1START + +DL-CCCH-Message ::= SEQUENCE { + message DL-CCCH-MessageType +} + +DL-CCCH-MessageType ::= CHOICE { + c1 CHOICE { + rrcConnectionReestablishment RRCConnectionReestablishment, + rrcConnectionReestablishmentReject RRCConnectionReestablishmentReject, + rrcConnectionReject RRCConnectionReject, + rrcConnectionSetup RRCConnectionSetup + }, + messageClassExtension SEQUENCE {} +} + +-- ASN1STOP + +– DL-DCCH-Message +The DL-DCCH-Message class is the set of RRC messages that may be sent from the EUTRAN to the UE or from the E-UTRAN to the RN on the downlink DCCH logical channel. +-- ASN1START + +DL-DCCH-Message ::= SEQUENCE { + message DL-DCCH-MessageType +} + +DL-DCCH-MessageType ::= CHOICE { + c1 CHOICE { + csfbParametersResponseCDMA2000 CSFBParametersResponseCDMA2000, + dlInformationTransfer DLInformationTransfer, + handoverFromEUTRAPreparationRequest HandoverFromEUTRAPreparationRequest, + mobilityFromEUTRACommand MobilityFromEUTRACommand, + rrcConnectionReconfiguration RRCConnectionReconfiguration, + rrcConnectionRelease RRCConnectionRelease, + securityModeCommand SecurityModeCommand, + ueCapabilityEnquiry UECapabilityEnquiry, + counterCheck CounterCheck, + ueInformationRequest-r9 UEInformationRequest-r9, + loggedMeasurementConfiguration-r10 LoggedMeasurementConfiguration-r10, + rnReconfiguration-r10 RNReconfiguration-r10, + spare4 NULL, + spare3 NULL, spare2 NULL, spare1 NULL + }, + messageClassExtension SEQUENCE {} +} + +-- ASN1STOP + +– UL-CCCH-Message +The UL-CCCH-Message class is the set of RRC messages that may be sent from the UE to the EUTRAN on the uplink CCCH logical channel. +-- ASN1START + +UL-CCCH-Message ::= SEQUENCE { + message UL-CCCH-MessageType +} + +UL-CCCH-MessageType ::= CHOICE { + c1 CHOICE { + rrcConnectionReestablishmentRequest RRCConnectionReestablishmentRequest, + rrcConnectionRequest RRCConnectionRequest + }, + messageClassExtension SEQUENCE {} +} + +-- ASN1STOP + +– UL-DCCH-Message +The UL-DCCH-Message class is the set of RRC messages that may be sent from the UE to the EUTRAN or from the RN to the E-UTRAN on the uplink DCCH logical channel. +-- ASN1START + +UL-DCCH-Message ::= SEQUENCE { + message UL-DCCH-MessageType +} + +UL-DCCH-MessageType ::= CHOICE { + c1 CHOICE { + csfbParametersRequestCDMA2000 CSFBParametersRequestCDMA2000, + measurementReport MeasurementReport, + rrcConnectionReconfigurationComplete RRCConnectionReconfigurationComplete, + rrcConnectionReestablishmentComplete RRCConnectionReestablishmentComplete, + rrcConnectionSetupComplete RRCConnectionSetupComplete, + securityModeComplete SecurityModeComplete, + securityModeFailure SecurityModeFailure, + ueCapabilityInformation UECapabilityInformation, + ulHandoverPreparationTransfer ULHandoverPreparationTransfer, + ulInformationTransfer ULInformationTransfer, + counterCheckResponse CounterCheckResponse, + ueInformationResponse-r9 UEInformationResponse-r9, + proximityIndication-r9 ProximityIndication-r9, + rnReconfigurationComplete-r10 RNReconfigurationComplete-r10, + mbmsCountingResponse-r10 MBMSCountingResponse-r10, + interFreqRSTDMeasurementIndication-r10 InterFreqRSTDMeasurementIndication-r10 + }, + messageClassExtension SEQUENCE {} +} + +-- ASN1STOP + +6.2.2 Message definitions +– CounterCheck +The CounterCheck message is used by the E-UTRAN to indicate the current COUNT MSB values associated to each DRB and to request the UE to compare these to its COUNT MSB values and to report the comparison results to E-UTRAN. +Signalling radio bearer: SRB1 +RLC-SAP: AM +Logical channel: DCCH +Direction: EUTRAN to UE +CounterCheck message +-- ASN1START + +CounterCheck ::= SEQUENCE { + rrc-TransactionIdentifier RRC-TransactionIdentifier, + criticalExtensions CHOICE { + c1 CHOICE { + counterCheck-r8 CounterCheck-r8-IEs, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +CounterCheck-r8-IEs ::= SEQUENCE { + drb-CountMSB-InfoList DRB-CountMSB-InfoList, + nonCriticalExtension CounterCheck-v8a0-IEs OPTIONAL +} + +CounterCheck-v8a0-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, -- Need OP + nonCriticalExtension SEQUENCE {} OPTIONAL -- Need OP +} + +DRB-CountMSB-InfoList ::= SEQUENCE (SIZE (1..maxDRB)) OF DRB-CountMSB-Info + +DRB-CountMSB-Info ::= SEQUENCE { + drb-Identity DRB-Identity, + countMSB-Uplink INTEGER(0..33554431), + countMSB-Downlink INTEGER(0..33554431) +} + +-- ASN1STOP + +CounterCheck field descriptions count-MSB-Downlink +Indicates the value of 25 MSBs from downlink COUNT associated to this DRB. count-MSB-Uplink +Indicates the value of 25 MSBs from uplink COUNT associated to this DRB. drb-CountMSB-InfoList +Indicates the MSBs of the COUNT values of the DRBs. +– CounterCheckResponse +The CounterCheckResponse message is used by the UE to respond to a CounterCheck message. +Signalling radio bearer: SRB1 +RLC-SAP: AM +Logical channel: DCCH +Direction: UE to EUTRAN +CounterCheckResponse message +-- ASN1START + +CounterCheckResponse ::= SEQUENCE { + rrc-TransactionIdentifier RRC-TransactionIdentifier, + criticalExtensions CHOICE { + counterCheckResponse-r8 CounterCheckResponse-r8-IEs, + criticalExtensionsFuture SEQUENCE {} + } +} + +CounterCheckResponse-r8-IEs ::= SEQUENCE { + drb-CountInfoList DRB-CountInfoList, + nonCriticalExtension CounterCheckResponse-v8a0-IEs OPTIONAL +} + +CounterCheckResponse-v8a0-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, + nonCriticalExtension SEQUENCE {} OPTIONAL +} + +DRB-CountInfoList ::= SEQUENCE (SIZE (0..maxDRB)) OF DRB-CountInfo + +DRB-CountInfo ::= SEQUENCE { + drb-Identity DRB-Identity, + count-Uplink INTEGER(0..4294967295), + count-Downlink INTEGER(0..4294967295) +} + +-- ASN1STOP + +CounterCheckResponse field descriptions count-Downlink +Indicates the value of downlink COUNT associated to this DRB. count-Uplink +Indicates the value of uplink COUNT associated to this DRB. drb-CountInfoList +Indicates the COUNT values of the DRBs. +– CSFBParametersRequestCDMA2000 +The CSFBParametersRequestCDMA2000 message is used by the UE to obtain the CDMA2000 1xRTT Parameters from the network. The UE needs these parameters to generate the CDMA2000 1xRTT Registration message used to register with the CDMA2000 1xRTT Network which is required to support CSFB to CDMA2000 1xRTT. +Signalling radio bearer: SRB1 +RLC-SAP: AM +Logical channel: DCCH +Direction: UE to EUTRAN +CSFBParametersRequestCDMA2000 message +-- ASN1START + +CSFBParametersRequestCDMA2000 ::= SEQUENCE { + criticalExtensions CHOICE { + csfbParametersRequestCDMA2000-r8 CSFBParametersRequestCDMA2000-r8-IEs, + criticalExtensionsFuture SEQUENCE {} + } +} + +CSFBParametersRequestCDMA2000-r8-IEs ::= SEQUENCE { + nonCriticalExtension CSFBParametersRequestCDMA2000-v8a0-IEs OPTIONAL +} + +CSFBParametersRequestCDMA2000-v8a0-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, + nonCriticalExtension SEQUENCE {} OPTIONAL +} + +-- ASN1STOP + +– CSFBParametersResponseCDMA2000 +The CSFBParametersResponseCDMA2000 message is used to provide the CDMA2000 1xRTT Parameters to the UE so the UE can register with the CDMA2000 1xRTT Network to support CSFB to CDMA2000 1xRTT. +Signalling radio bearer: SRB1 +RLC-SAP: AM +Logical channel: DCCH +Direction: EUTRAN to UE +CSFBParametersResponseCDMA2000 message +-- ASN1START + +CSFBParametersResponseCDMA2000 ::= SEQUENCE { + rrc-TransactionIdentifier RRC-TransactionIdentifier, + criticalExtensions CHOICE { + csfbParametersResponseCDMA2000-r8 CSFBParametersResponseCDMA2000-r8-IEs, + criticalExtensionsFuture SEQUENCE {} + } +} + +CSFBParametersResponseCDMA2000-r8-IEs ::= SEQUENCE { + rand RAND-CDMA2000, + mobilityParameters MobilityParametersCDMA2000, + nonCriticalExtension CSFBParametersResponseCDMA2000-v8a0-IEs OPTIONAL +} + +CSFBParametersResponseCDMA2000-v8a0-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, -- Need OP + nonCriticalExtension SEQUENCE {} OPTIONAL -- Need OP +} + +-- ASN1STOP + +– DLInformationTransfer +The DLInformationTransfer message is used for the downlink transfer of NAS or non-3GPP dedicated information. +Signalling radio bearer: SRB2 or SRB1 (only if SRB2 not established yet. If SRB2 is suspended, E-UTRAN does not send this message until SRB2 is resumed.) +RLC-SAP: AM +Logical channel: DCCH +Direction: EUTRAN to UE +DLInformationTransfer message +-- ASN1START + +DLInformationTransfer ::= SEQUENCE { + rrc-TransactionIdentifier RRC-TransactionIdentifier, + criticalExtensions CHOICE { + c1 CHOICE { + dlInformationTransfer-r8 DLInformationTransfer-r8-IEs, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +DLInformationTransfer-r8-IEs ::= SEQUENCE { + dedicatedInfoType CHOICE { + dedicatedInfoNAS DedicatedInfoNAS, + dedicatedInfoCDMA2000-1XRTT DedicatedInfoCDMA2000, + dedicatedInfoCDMA2000-HRPD DedicatedInfoCDMA2000 + }, + nonCriticalExtension DLInformationTransfer-v8a0-IEs OPTIONAL +} + +DLInformationTransfer-v8a0-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, -- Need OP + nonCriticalExtension SEQUENCE {} OPTIONAL -- Need OP +} + +-- ASN1STOP + +– HandoverFromEUTRAPreparationRequest (CDMA2000) +The HandoverFromEUTRAPreparationRequest message is used to trigger the handover preparation procedure with a CDMA2000 RAT. This message is also used to trigger a tunneled preparation procedure with a CDMA2000 1xRTT RAT to obtain traffic channel resources for the enhanced CS fallback to CDMA2000 1xRTT, which may also involve a concurrent preparation for handover to CDMA2000 HRPD. Also, this message is used to trigger the dual Rx/Tx redirection procedure with a CDMA2000 1xRTT RAT. +Signalling radio bearer: SRB1 +RLC-SAP: AM +Logical channel: DCCH +Direction: EUTRAN to UE +HandoverFromEUTRAPreparationRequest message +-- ASN1START + +HandoverFromEUTRAPreparationRequest ::= SEQUENCE { + rrc-TransactionIdentifier RRC-TransactionIdentifier, + criticalExtensions CHOICE { + c1 CHOICE { + handoverFromEUTRAPreparationRequest-r8 + HandoverFromEUTRAPreparationRequest-r8-IEs, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +HandoverFromEUTRAPreparationRequest-r8-IEs ::= SEQUENCE { + cdma2000-Type CDMA2000-Type, + rand RAND-CDMA2000 OPTIONAL, -- Cond cdma2000-Type + mobilityParameters MobilityParametersCDMA2000 OPTIONAL, -- Cond cdma2000-Type + nonCriticalExtension HandoverFromEUTRAPreparationRequest-v890-IEs OPTIONAL +} + +HandoverFromEUTRAPreparationRequest-v890-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, -- Need OP + nonCriticalExtension HandoverFromEUTRAPreparationRequest-v920-IEs OPTIONAL +} + +HandoverFromEUTRAPreparationRequest-v920-IEs ::= SEQUENCE { + concurrPrepCDMA2000-HRPD-r9 BOOLEAN OPTIONAL, -- Cond cdma2000-Type + nonCriticalExtension HandoverFromEUTRAPreparationRequest-v1020-IEs OPTIONAL +} + +HandoverFromEUTRAPreparationRequest-v1020-IEs ::= SEQUENCE { + dualRxTxRedirectIndicator-r10 ENUMERATED {true} OPTIONAL, -- Cond cdma2000-1XRTT + redirectCarrierCDMA2000-1XRTT-r10 CarrierFreqCDMA2000 OPTIONAL, -- Cond dualRxTxRedirect + nonCriticalExtension SEQUENCE {} OPTIONAL -- Need OP +} + +-- ASN1STOP + +HandoverFromEUTRAPreparationRequest field descriptions concurrPrepCDMA2000-HRPD +Value TRUE indicates that upper layers should initiate concurrent preparation for handover to CDMA2000 HRPD in addition to preparation for enhanced CS fallback to CDMA2000 1xRTT. dualRxTxRedirectIndicator +Value TRUE indicates that the second radio of the dual Rx/Tx UE is being redirected to CDMA2000 1xRTT [51]. redirectCarrierCDMA2000-1XRTT +Used to indicate the CDMA2000 1xRTT carrier frequency where the UE is being redirected to. + +Conditional presence Explanation cdma2000-1XRTT The field is optionally present, need ON, if the cdma2000-Type = type1XRTT; otherwise it is not present. cdma2000-Type The field is mandatory present if the cdma2000-Type = type1XRTT; otherwise it is not present. dualRxTxRedirect The field is optionally present, need ON, if dualRxTxRedirectIndicator is present; otherwise it is not present. +– InterFreqRSTDMeasurementIndication +The InterFreqRSTDMeasurementIndication message is used to indicate that the UE is going to either start or stop OTDOA inter-frequency RSTD measurement which requires measurement gaps as specified in TS 36.133 [16, 8.1.2.6]. +Signalling radio bearer: SRB1 +RLC-SAP: AM +Logical channel: DCCH +Direction: UE to EUTRAN +InterFreqRSTDMeasurementIndication message +-- ASN1START + +InterFreqRSTDMeasurementIndication-r10 ::= SEQUENCE { + criticalExtensions CHOICE { + c1 CHOICE { + interFreqRSTDMeasurementIndication-r10 InterFreqRSTDMeasurementIndication-r10-IEs, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +InterFreqRSTDMeasurementIndication-r10-IEs ::= SEQUENCE { + rstd-InterFreqIndication-r10 CHOICE { + start SEQUENCE { + rstd-InterFreqInfoList-r10 RSTD-InterFreqInfoList-r10 + }, + stop NULL + }, + lateNonCriticalExtension OCTET STRING OPTIONAL, + nonCriticalExtension SEQUENCE {} OPTIONAL +} + +RSTD-InterFreqInfoList-r10 ::= SEQUENCE (SIZE(1..maxRSTD-Freq-r10)) OF RSTD-InterFreqInfo-r10 + +RSTD-InterFreqInfo-r10 ::= SEQUENCE { + carrierFreq-r10 ARFCN-ValueEUTRA, + measPRS-Offset-r10 INTEGER (0..39), + ..., + [[ carrierFreq-v1090 ARFCN-ValueEUTRA-v9e0 OPTIONAL + ]] +} + +-- ASN1STOP + +InterFreqRSTDMeasurementIndication field descriptions carrierFreq +The EARFCN value of the carrier received from upper layers for which the UE needs to perform the inter-frequency RSTD measurements. If the UE includes carrierFreq-v1090, it shall set carrierFreq-r10 to maxEARFCN. measPRS-Offset +Indicates the requested gap offset for performing inter-frequency RSTD measurements. It is the smallest subframeoffset from the beginning of subframe 0 of SFN=0 of the serving cell of the requested gap for measuring PRS positioning occasions in the carrier frequency carrierFreq for which the UE needs to perform the inter-frequency RSTD measurements. The PRS positioning occasion information is received from upper layers. The value of measPRS-Offset is obtained by mapping the starting subframe of the PRS positioning occasion in the measured cell onto the corresponding subframe in the serving cell and is calculated as the serving cell’s number of subframes from SFN=0 mod 40. +The UE shall take into account any additional time required by the UE to start PRS measurements on the other carrier when it does this mapping for determining the measPRS-Offset. +NOTE: Figure 6.2.2-1 illustrates the measPRS-Offset field. rstd-InterFreqIndication +Indicates the inter-frequency RSTD measurement action, i.e. the UE is going to start or stop inter-frequency RSTD measurement. + +Figure 6.2.2-1 (informative): Exemplary calculation of measPRS-Offset field. + +– LoggedMeasurementConfiguration +The LoggedMeasurementConfiguration message is used by E-UTRAN to configure the UE to perform logging of measurement results while in RRC_IDLE. It is used to transfer the logged measurement configuration for network performance optimisation, see TS 37.320 [60]. +Signalling radio bearer: SRB1 +RLC-SAP: AM +Logical channel: DCCH +Direction: E-UTRAN to UE +LoggedMeasurementConfiguration message +-- ASN1START + +LoggedMeasurementConfiguration-r10 ::= SEQUENCE { + criticalExtensions CHOICE { + c1 CHOICE { + loggedMeasurementConfiguration-r10 LoggedMeasurementConfiguration-r10-IEs, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + + +LoggedMeasurementConfiguration-r10-IEs ::= SEQUENCE { + traceReference-r10 TraceReference-r10, + traceRecordingSessionRef-r10 OCTET STRING (SIZE (2)), + tce-Id-r10 OCTET STRING (SIZE (1)), + absoluteTimeInfo-r10 AbsoluteTimeInfo-r10, + areaConfiguration-r10 AreaConfiguration-r10 OPTIONAL, -- Need OR + loggingDuration-r10 LoggingDuration-r10, + loggingInterval-r10 LoggingInterval-r10, + nonCriticalExtension SEQUENCE {} OPTIONAL -- Need OP + +} + +-- ASN1STOP + +LoggedMeasurementConfiguration field descriptions absoluteTimeInfo +Indicates the absolute time in the current cell. tce-Id +Parameter Trace Collection Entity Id: See TS 32.422 [58]. traceRecordingSessionRef +Parameter Trace Recording Session Reference: See TS 32.422 [58] +– MasterInformationBlock +The MasterInformationBlock includes the system information transmitted on BCH. +Signalling radio bearer: N/A +RLC-SAP: TM +Logical channel: BCCH +Direction: EUTRAN to UE +MasterInformationBlock +-- ASN1START + +MasterInformationBlock ::= SEQUENCE { + dl-Bandwidth ENUMERATED { + n6, n15, n25, n50, n75, n100}, + phich-Config PHICH-Config, + systemFrameNumber BIT STRING (SIZE (8)), + spare BIT STRING (SIZE (10)) +} + + +-- ASN1STOP + +MasterInformationBlock field descriptions dl-Bandwidth +Parameter: transmission bandwidth configuration, NRB in downlink, see TS 36.101 [42, table 5.6-1]. n6 corresponds to 6 resource blocks, n15 to 15 resource blocks and so on. systemFrameNumber +Defines the 8 most significant bits of the SFN. As indicated in TS 36.211 [21, 6.6.1], the 2 least significant bits of the SFN are acquired implicitly in the P-BCH decoding, i.e. timing of 40ms P-BCH TTI indicates 2 least significant bits (within 40ms P-BCH TTI, the first radio frame: 00, the second radio frame: 01, the third radio frame: 10, the last radio frame: 11). One value applies for all serving cells (the associated functionality is common i.e. not performed independently for each cell). +– MBMSCountingRequest +The MBMSCountingRequest message is used by E-UTRAN to count the UEs that are receiving or interested to receive specific MBMS services. +Signalling radio bearer: N/A +RLC-SAP: UM +Logical channel: MCCH +Direction: EUTRAN to UE +MBMSCountingRequest message +-- ASN1START + +MBMSCountingRequest-r10 ::= SEQUENCE { + countingRequestList-r10 CountingRequestList-r10, + lateNonCriticalExtension OCTET STRING OPTIONAL, -- Need OP + nonCriticalExtension SEQUENCE {} OPTIONAL -- Need OP +} + +CountingRequestList-r10 ::= SEQUENCE (SIZE (1..maxServiceCount)) OF CountingRequestInfo-r10 + +CountingRequestInfo-r10 ::= SEQUENCE { + tmgi-r10 TMGI-r9, + ... +} + +-- ASN1STOP + +– MBMSCountingResponse +The MBMSCountingResponse message is used by the UE to respond to an MBMSCountingRequest message. +Signalling radio bearer: SRB1 +RLC-SAP: AM +Logical channel: DCCH +Direction: UE to EUTRAN +MBMSCountingResponse message +-- ASN1START + +MBMSCountingResponse-r10 ::= SEQUENCE { + criticalExtensions CHOICE { + c1 CHOICE { + countingResponse-r10 MBMSCountingResponse-r10-IEs, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +MBMSCountingResponse-r10-IEs ::= SEQUENCE { + mbsfn-AreaIndex-r10 INTEGER (0..maxMBSFN-Area-1) OPTIONAL, + countingResponseList-r10 CountingResponseList-r10 OPTIONAL, + lateNonCriticalExtension OCTET STRING OPTIONAL, + nonCriticalExtension SEQUENCE {} OPTIONAL +} + +CountingResponseList-r10 ::= SEQUENCE (SIZE (1..maxServiceCount)) OF CountingResponseInfo-r10 + +CountingResponseInfo-r10 ::= SEQUENCE { + countingResponseService-r10 INTEGER (0..maxServiceCount-1), + ... +} + +-- ASN1STOP + +MBMSCountingResponse field descriptions countingResponseList +List of MBMS services which the UE is receiving or interested to receive. Value 0 for field countingResponseService corresponds to the first entry in countingRequestList within MBMSCountingRequest, value 1 corresponds to the second entry in this list and so on. mbsfn-AreaIndex +Index of the entry in field mbsfn-AreaInfoList within SystemInformationBlockType13. Value 0 corresponds to the first entry in mbsfn-AreaInfoList within SystemInformationBlockType13, value 1 corresponds to the second entry in this list and so on. +– MBSFNAreaConfiguration +The MBSFNAreaConfiguration message contains the MBMS control information applicable for an MBSFN area. E-UTRAN configures an MCCH for each MBSFN area i.e. the MCCH identifies the MBSFN area. +Signalling radio bearer: N/A +RLC-SAP: UM +Logical channel: MCCH +Direction: EUTRAN to UE +MBSFNAreaConfiguration message +-- ASN1START + +MBSFNAreaConfiguration-r9 ::= SEQUENCE { + commonSF-Alloc-r9 CommonSF-AllocPatternList-r9, + commonSF-AllocPeriod-r9 ENUMERATED { + rf4, rf8, rf16, rf32, rf64, rf128, rf256}, + pmch-InfoList-r9 PMCH-InfoList-r9, + nonCriticalExtension MBSFNAreaConfiguration-v930-IEs OPTIONAL +} + +MBSFNAreaConfiguration-v930-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, -- Need OP + nonCriticalExtension SEQUENCE {} OPTIONAL -- Need OP +} + +CommonSF-AllocPatternList-r9 ::= SEQUENCE (SIZE (1..maxMBSFN-Allocations)) OF MBSFN-SubframeConfig + +-- ASN1STOP + +MBSFNAreaConfiguration field descriptions commonSF-Alloc +Indicates the subframes allocated to the MBSFN area commonSF-AllocPeriod +Indicates the period during which resources corresponding with field commonSF-Alloc are divided between the (P)MCH that are configured for this MBSFN area. The subframe allocation patterns, as defined by commonSF-Alloc, repeat continously during this period. Value rf4 corresponds to 4 radio frames, rf8 corresponds to 8 radio frames and so on. The commonSF-AllocPeriod starts in the radio frames for which: SFN mod commonSF-AllocPeriod = 0. +– MeasurementReport +The MeasurementReport message is used for the indication of measurement results. +Signalling radio bearer: SRB1 +RLC-SAP: AM +Logical channel: DCCH +Direction: UE to EUTRAN +MeasurementReport message +-- ASN1START + +MeasurementReport ::= SEQUENCE { + criticalExtensions CHOICE { + c1 CHOICE{ + measurementReport-r8 MeasurementReport-r8-IEs, + spare7 NULL, + spare6 NULL, spare5 NULL, spare4 NULL, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +MeasurementReport-r8-IEs ::= SEQUENCE { + measResults MeasResults, + nonCriticalExtension MeasurementReport-v8a0-IEs OPTIONAL +} + +MeasurementReport-v8a0-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, + nonCriticalExtension SEQUENCE {} OPTIONAL +} + +-- ASN1STOP + +– MobilityFromEUTRACommand +The MobilityFromEUTRACommand message is used to command handover or a cell change from EUTRA to another RAT (3GPP or non-3GPP), or enhanced CS fallback to CDMA2000 1xRTT. +Signalling radio bearer: SRB1 +RLC-SAP: AM +Logical channel: DCCH +Direction: EUTRAN to UE +MobilityFromEUTRACommand message +-- ASN1START + +MobilityFromEUTRACommand ::= SEQUENCE { + rrc-TransactionIdentifier RRC-TransactionIdentifier, + criticalExtensions CHOICE { + c1 CHOICE{ + mobilityFromEUTRACommand-r8 MobilityFromEUTRACommand-r8-IEs, + mobilityFromEUTRACommand-r9 MobilityFromEUTRACommand-r9-IEs, + spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +MobilityFromEUTRACommand-r8-IEs ::= SEQUENCE { + cs-FallbackIndicator BOOLEAN, + purpose CHOICE{ + handover Handover, + cellChangeOrder CellChangeOrder + }, + nonCriticalExtension MobilityFromEUTRACommand-v8a0-IEs OPTIONAL +} + +MobilityFromEUTRACommand-v8a0-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, -- Need OP + nonCriticalExtension MobilityFromEUTRACommand-v8d0-IEs OPTIONAL +} + +MobilityFromEUTRACommand-v8d0-IEs ::= SEQUENCE { + bandIndicator BandIndicatorGERAN OPTIONAL, -- Cond GERAN + nonCriticalExtension SEQUENCE {} OPTIONAL -- Need OP +} + +MobilityFromEUTRACommand-r9-IEs ::= SEQUENCE { + cs-FallbackIndicator BOOLEAN, + purpose CHOICE{ + handover Handover, + cellChangeOrder CellChangeOrder, + e-CSFB-r9 E-CSFB-r9, + ... + }, + nonCriticalExtension MobilityFromEUTRACommand-v930-IEs OPTIONAL +} + +MobilityFromEUTRACommand-v930-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, -- Need OP + nonCriticalExtension MobilityFromEUTRACommand-v960-IEs OPTIONAL +} + +MobilityFromEUTRACommand-v960-IEs ::= SEQUENCE { + bandIndicator BandIndicatorGERAN OPTIONAL, -- Cond GERAN + nonCriticalExtension SEQUENCE {} OPTIONAL -- Need OP +} + +Handover ::= SEQUENCE { + targetRAT-Type ENUMERATED { + utra, geran, cdma2000-1XRTT, cdma2000-HRPD, + spare4, spare3, spare2, spare1, ...}, + targetRAT-MessageContainer OCTET STRING, + nas-SecurityParamFromEUTRA OCTET STRING (SIZE (1)) OPTIONAL, -- Cond UTRAGERAN + systemInformation SI-OrPSI-GERAN OPTIONAL -- Cond PSHO +} + +CellChangeOrder ::= SEQUENCE { + t304 ENUMERATED { + ms100, ms200, ms500, ms1000, + ms2000, ms4000, ms8000, spare1}, + targetRAT-Type CHOICE { + geran SEQUENCE { + physCellId PhysCellIdGERAN, + carrierFreq CarrierFreqGERAN, + networkControlOrder BIT STRING (SIZE (2)) OPTIONAL, -- Need OP + systemInformation SI-OrPSI-GERAN OPTIONAL -- Need OP + }, + ... + } +} + +SI-OrPSI-GERAN ::= CHOICE { + si SystemInfoListGERAN, + psi SystemInfoListGERAN +} + +E-CSFB-r9 ::= SEQUENCE { + messageContCDMA2000-1XRTT-r9 OCTET STRING OPTIONAL, -- Need ON + mobilityCDMA2000-HRPD-r9 ENUMERATED { + handover, redirection + } OPTIONAL, -- Need OP + messageContCDMA2000-HRPD-r9 OCTET STRING OPTIONAL, -- Cond concHO + redirectCarrierCDMA2000-HRPD-r9 CarrierFreqCDMA2000 OPTIONAL -- Cond concRedir +} + +-- ASN1STOP + +MobilityFromEUTRACommand field descriptions bandIndicator +Indicates how to interpret the ARFCN of the BCCH carrier. carrierFreq +contains the carrier frequency of the target GERAN cell. cs-FallbackIndicator +Value true indicates that the CS Fallback procedure to UTRAN or GERAN is triggered. messageContCDMA2000-1XRTT +This field contains a message specified in CDMA2000 1xRTT standard that either tells the UE to move to specific 1xRTT target cell(s) or indicates a failure to allocate resources for the enhanced CS fallback to CDMA2000 1xRTT. messageContCDMA2000-HRPD +This field contains a message specified in CDMA2000 HRPD standard that either tells the UE to move to specific HRPD target cell(s) or indicates a failure to allocate resources for the handover to CDMA2000 HRPD. mobilityCDMA2000-HRPD +This field indicates whether or not mobility to CDMA2000 HRPD is to be performed by the UE and it also indicates the type of mobility to CDMA2000 HRPD that is to be performed; If this field is not present the UE shall perform only the enhanced CS fallback to CDMA2000 1xRTT. nas-SecurityParamFromEUTRA +Used to deliver the key synchronisation and Key freshness for the E-UTRAN to UTRAN handovers as specified in TS 33.401. The content of the parameter is defined in TS24.301. networkControlOrder +Parameter NETWORK_CONTROL_ORDER in TS 44.060 [36]. purpose +Indicates which type of mobility procedure the UE is requested to perform. EUTRAN always applies value e-CSFB in case of enhanced CS fallback to CDMA2000 (e.g. also when that procedure results in handover to CDMA2000 1XRTT only, in handover to CDMA2000 HRPD only or in redirection to CDMA2000 HRPD only), redirectCarrierCDMA2000-HRPD +The redirectCarrierCDMA2000-HRPD indicates a CDMA2000 carrier frequency and is used to redirect the UE to a HRPD carrier frequency. SystemInfoListGERAN +If purpose = CellChangeOrder and if the field is not present, the UE has to acquire SI/PSI from the GERAN cell. t304 +Timer T304 as described in section 7.3. Value ms100 corresponds with 100 ms, ms200 corresponds with 200 ms and so on. targetRAT-Type +Indicates the target RAT type. targetRAT-MessageContainer +The field contains a message specified in another standard, as indicated by the targetRAT-Type, and carries information about the target cell identifier(s) and radio parameters relevant for the target radio access technology. NOTE 1. + +A complete message is included, as specified in the other standard. +Conditional presence Explanation concHO The field is mandatory present if the mobilityCDMA2000-HRPD is set to “handover”; otherwise the field is optional present, need ON. concRedir The field is mandatory present if the mobilityCDMA2000-HRPD is set to “redirection”; otherwise the field is not present. GERAN The field should be present if the purpose is set to “handover” and the targetRAT-Type is set to “geran”; otherwise the field is not present PSHO The field is mandatory present in case of PS handover toward GERAN; otherwise the field is optionally present, but not used by the UE UTRAGERAN The field is mandatory present if the targetRAT-Type is set to “utra” or “geran”; otherwise the field is not present +NOTE 1: The correspondence between the value of the targetRAT-Type, the standard to apply and the message contained within the targetRAT-MessageContainer is shown in the table below: +targetRAT-Type Standard to apply targetRAT-MessageContainer cdma2000-1XRTT C.S0001 or later, C.S0007 or later, C.S0008 or later cdma2000-HRPD C.S0024 or later geran GSM TS 04.18, version 8.5.0 or later, or 3GPP TS 44.018 (clause 9.1.15) + +3GPP TS 44.060, version 6.13.0 or later (clause 11.2.43) + +3GPP TS 44.060, version 7.6.0 or later (clause 11.2.46) HANDOVER COMMAND + + +PS HANDOVER COMMAND + + +DTM HANDOVER COMMAND utra 3GPP TS 25.331 (clause 10.2.16a) HANDOVER TO UTRAN COMMAND +– Paging +The Paging message is used for the notification of one or more UEs. +Signalling radio bearer: N/A +RLC-SAP: TM +Logical channel: PCCH +Direction: EUTRAN to UE +Paging message +-- ASN1START + +Paging ::= SEQUENCE { + pagingRecordList PagingRecordList OPTIONAL, -- Need ON + systemInfoModification ENUMERATED {true} OPTIONAL, -- Need ON + etws-Indication ENUMERATED {true} OPTIONAL, -- Need ON + nonCriticalExtension Paging-v890-IEs OPTIONAL +} + +Paging-v890-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, -- Need OP + nonCriticalExtension Paging-v920-IEs OPTIONAL +} + +Paging-v920-IEs ::= SEQUENCE { + cmas-Indication-r9 ENUMERATED {true} OPTIONAL, -- Need ON + nonCriticalExtension SEQUENCE {} OPTIONAL -- Need OP +} + +PagingRecordList ::= SEQUENCE (SIZE (1..maxPageRec)) OF PagingRecord + +PagingRecord ::= SEQUENCE { + ue-Identity PagingUE-Identity, + cn-Domain ENUMERATED {ps, cs}, + ... +} + +PagingUE-Identity ::= CHOICE { + s-TMSI S-TMSI, + imsi IMSI, + ... +} + +IMSI ::= SEQUENCE (SIZE (6..21)) OF IMSI-Digit + +IMSI-Digit ::= INTEGER (0..9) + +-- ASN1STOP + +Paging field descriptions cmas-Indication +If present: indication of a CMAS notification. cn-Domain +Indicates the origin of paging. etws-Indication +If present: indication of an ETWS primary notification and/ or ETWS secondary notification. imsi +The International Mobile Subscriber Identity, a globally unique permanent subscriber identity, see TS 23.003 [27]. The first element contains the first IMSI digit, the second element contains the second IMSI digit and so on. systemInfoModification +If present: indication of a BCCH modification other than SIB10, SIB11 and SIB12. ue-Identity +Provides the NAS identity of the UE that is being paged. +– ProximityIndication +The ProximityIndication message is used to indicate that the UE is entering or leaving the proximity of one or more CSG member cell(s). +Signalling radio bearer: SRB1 +RLC-SAP: AM +Logical channel: DCCH +Direction: UE to EUTRAN +ProximityIndication message +-- ASN1START + +ProximityIndication-r9 ::= SEQUENCE { + criticalExtensions CHOICE { + c1 CHOICE { + proximityIndication-r9 ProximityIndication-r9-IEs, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +ProximityIndication-r9-IEs ::= SEQUENCE { + type-r9 ENUMERATED {entering, leaving}, + carrierFreq-r9 CHOICE { + eutra-r9 ARFCN-ValueEUTRA, + utra-r9 ARFCN-ValueUTRA, + ..., + eutra2-v9e0 ARFCN-ValueEUTRA-v9e0 + }, + nonCriticalExtension ProximityIndication-v930-IEs OPTIONAL +} + +ProximityIndication-v930-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, + nonCriticalExtension SEQUENCE {} OPTIONAL +} + +-- ASN1STOP + +ProximityIndication field descriptions carrierFreq +Indicates the RAT and frequency of the CSG member cell(s), for which the proximity indication is sent. For E-UTRA and UTRA frequencies, the UE shall set the ARFCN according to a band it previously considered suitable for accessing (one of) the CSG member cell(s), for which the proximity indication is sent. type +Used to indicate whether the UE is entering or leaving the proximity of CSG member cell(s). +– RNReconfiguration +The RNReconfiguration is a command to modify the RN subframe configuration and/or to convey changed system information. +Signalling radio bearer: SRB1 +RLC-SAP: AM +Logical channel: DCCH +Direction: EUTRAN to RN +RNReconfiguration message +-- ASN1START + +RNReconfiguration-r10 ::= SEQUENCE { + rrc-TransactionIdentifier RRC-TransactionIdentifier, + criticalExtensions CHOICE { + c1 CHOICE { + rnReconfiguration-r10 RNReconfiguration-r10-IEs, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +RNReconfiguration-r10-IEs ::= SEQUENCE { + rn-SystemInfo-r10 RN-SystemInfo-r10 OPTIONAL, -- Need ON + rn-SubframeConfig-r10 RN-SubframeConfig-r10 OPTIONAL, -- Need ON + lateNonCriticalExtension OCTET STRING OPTIONAL, -- Need OP + nonCriticalExtension SEQUENCE {} OPTIONAL -- Need OP +} + +RN-SystemInfo-r10 ::= SEQUENCE { + systemInformationBlockType1-r10 OCTET STRING (CONTAINING SystemInformationBlockType1) OPTIONAL, -- Need ON + systemInformationBlockType2-r10 SystemInformationBlockType2 OPTIONAL, -- Need ON + ... +} + +-- ASN1STOP + +– RNReconfigurationComplete +The RNReconfigurationComplete message is used to confirm the successful completion of an RN reconfiguration. +Signalling radio bearer: SRB1 +RLC-SAP: AM +Logical channel: DCCH +Direction: RN to E-UTRAN +RNReconfigurationComplete message +-- ASN1START + +RNReconfigurationComplete-r10 ::= SEQUENCE { + rrc-TransactionIdentifier RRC-TransactionIdentifier, + criticalExtensions CHOICE { + c1 CHOICE{ + rnReconfigurationComplete-r10 RNReconfigurationComplete-r10-IEs, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +RNReconfigurationComplete-r10-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, + nonCriticalExtension SEQUENCE {} OPTIONAL +} + +-- ASN1STOP + +– RRCConnectionReconfiguration +The RRCConnectionReconfiguration message is the command to modify an RRC connection. It may convey information for measurement configuration, mobility control, radio resource configuration (including RBs, MAC main configuration and physical channel configuration) including any associated dedicated NAS information and security configuration. +Signalling radio bearer: SRB1 +RLC-SAP: AM +Logical channel: DCCH +Direction: EUTRAN to UE +RRCConnectionReconfiguration message +-- ASN1START + +RRCConnectionReconfiguration ::= SEQUENCE { + rrc-TransactionIdentifier RRC-TransactionIdentifier, + criticalExtensions CHOICE { + c1 CHOICE{ + rrcConnectionReconfiguration-r8 RRCConnectionReconfiguration-r8-IEs, + spare7 NULL, + spare6 NULL, spare5 NULL, spare4 NULL, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +RRCConnectionReconfiguration-r8-IEs ::= SEQUENCE { + measConfig MeasConfig OPTIONAL, -- Need ON + mobilityControlInfo MobilityControlInfo OPTIONAL, -- Cond HO + dedicatedInfoNASList SEQUENCE (SIZE(1..maxDRB)) OF + DedicatedInfoNAS OPTIONAL, -- Cond nonHO + radioResourceConfigDedicated RadioResourceConfigDedicated OPTIONAL, -- Cond HO-toEUTRA + securityConfigHO SecurityConfigHO OPTIONAL, -- Cond HO + nonCriticalExtension RRCConnectionReconfiguration-v890-IEs OPTIONAL +} + +RRCConnectionReconfiguration-v890-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, -- Need OP + nonCriticalExtension RRCConnectionReconfiguration-v920-IEs OPTIONAL +} + +RRCConnectionReconfiguration-v920-IEs ::= SEQUENCE { + otherConfig-r9 OtherConfig-r9 OPTIONAL, -- Need ON + fullConfig-r9 ENUMERATED {true} OPTIONAL, -- Cond HO-Reestab + nonCriticalExtension RRCConnectionReconfiguration-v1020-IEs OPTIONAL +} + +RRCConnectionReconfiguration-v1020-IEs ::= SEQUENCE { + sCellToReleaseList-r10 SCellToReleaseList-r10 OPTIONAL, -- Need ON + sCellToAddModList-r10 SCellToAddModList-r10 OPTIONAL, -- Need ON + nonCriticalExtension SEQUENCE {} OPTIONAL -- Need OP +} + +SCellToAddModList-r10 ::= SEQUENCE (SIZE (1..maxSCell-r10)) OF SCellToAddMod-r10 + +SCellToAddMod-r10 ::= SEQUENCE { + sCellIndex-r10 SCellIndex-r10, + cellIdentification-r10 SEQUENCE { + physCellId-r10 PhysCellId, + dl-CarrierFreq-r10 ARFCN-ValueEUTRA + } OPTIONAL, -- Cond SCellAdd + radioResourceConfigCommonSCell-r10 RadioResourceConfigCommonSCell-r10 OPTIONAL, -- Cond SCellAdd + radioResourceConfigDedicatedSCell-r10 RadioResourceConfigDedicatedSCell-r10 OPTIONAL, -- Cond SCellAdd2 + ..., + [[ dl-CarrierFreq-v1090 ARFCN-ValueEUTRA-v9e0 OPTIONAL -- Cond EARFCN-max + ]] +} + +SCellToReleaseList-r10 ::= SEQUENCE (SIZE (1..maxSCell-r10)) OF SCellIndex-r10 + +SecurityConfigHO ::= SEQUENCE { + handoverType CHOICE { + intraLTE SEQUENCE { + securityAlgorithmConfig SecurityAlgorithmConfig OPTIONAL, -- Cond fullConfig + keyChangeIndicator BOOLEAN, + nextHopChainingCount NextHopChainingCount + }, + interRAT SEQUENCE { + securityAlgorithmConfig SecurityAlgorithmConfig, + nas-SecurityParamToEUTRA OCTET STRING (SIZE(6)) + } + }, + ... +} + + +-- ASN1STOP + +RRCConnectionReconfiguration field descriptions dedicatedInfoNASList +This field is used to transfer UE specific NAS layer information between the network and the UE. The RRC layer is transparent for each PDU in the list. fullConfig +Indicates the full configuration option is applicable for the RRC Connection Reconfiguration message. keyChangeIndicator +true is used only in an intra-cell handover when a KeNB key is derived from a native KASME key taken into use through the successful NAS SMC, as described in TS 33.401 [32] for KeNB re-keying. false is used in an intra-LTE handover when the new KeNB key is obtained from the current KeNB key or from the NH as described in TS 33.401 [32]. nas-securityParamToEUTRA +This field is used to transfer UE specific NAS layer information between the network and the UE. The RRC layer is transparent for this field, although it affects activation of AS- security after inter-RAT handover to E-UTRA. The content is defined in TS 24.301. nextHopChainingCount +Parameter NCC: See TS 33.401 [32] + +Conditional presence Explanation EARFCN-max The field is mandatory present if dl-CarrierFreq-r10 is included and set to maxEARFCN. Otherwise the field is not present. fullConfig This field is mandatory present for handover within E-UTRA when the fullConfig is included; otherwise it is optionally present, Need OP. HO The field is mandatory present in case of handover within E-UTRA or to E-UTRA; otherwise the field is not present. HO-Reestab This field is optionally present, need ON, in case of handover within E-UTRA or upon the first reconfiguration after RRC connection re-establishment; otherwise the field is not present. HO-toEUTRA The field is mandatory present in case of handover to E-UTRA or for reconfigurations when fullConfig is included; otherwise the field is optionally present, need ON. nonHO The field is not present in case of handover within E-UTRA or to E-UTRA; otherwise it is optional present, need ON. SCellAdd The field is mandatory present upon SCell addition; otherwise it is not present. SCellAdd2 The field is mandatory present upon SCell addition; otherwise it is optionally present, need ON. +– RRCConnectionReconfigurationComplete +The RRCConnectionReconfigurationComplete message is used to confirm the successful completion of an RRC connection reconfiguration. +Signalling radio bearer: SRB1 +RLC-SAP: AM +Logical channel: DCCH +Direction: UE to EUTRAN +RRCConnectionReconfigurationComplete message +-- ASN1START + +RRCConnectionReconfigurationComplete ::= SEQUENCE { + rrc-TransactionIdentifier RRC-TransactionIdentifier, + criticalExtensions CHOICE { + rrcConnectionReconfigurationComplete-r8 + RRCConnectionReconfigurationComplete-r8-IEs, + criticalExtensionsFuture SEQUENCE {} + } +} + +RRCConnectionReconfigurationComplete-r8-IEs ::= SEQUENCE { + nonCriticalExtension RRCConnectionReconfigurationComplete-v8a0-IEs OPTIONAL +} + +RRCConnectionReconfigurationComplete-v8a0-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, + nonCriticalExtension RRCConnectionReconfigurationComplete-v1020-IEs OPTIONAL +} + +RRCConnectionReconfigurationComplete-v1020-IEs ::= SEQUENCE { + rlf-InfoAvailable-r10 ENUMERATED {true} OPTIONAL, + logMeasAvailable-r10 ENUMERATED {true} OPTIONAL, + nonCriticalExtension SEQUENCE {} OPTIONAL +} + +-- ASN1STOP + +– RRCConnectionReestablishment +The RRCConnectionReestablishment message is used to re-establish SRB1. +Signalling radio bearer: SRB0 +RLC-SAP: TM +Logical channel: CCCH +Direction: EUTRAN to UE +RRCConnectionReestablishment message +-- ASN1START + +RRCConnectionReestablishment ::= SEQUENCE { + rrc-TransactionIdentifier RRC-TransactionIdentifier, + criticalExtensions CHOICE { + c1 CHOICE{ + rrcConnectionReestablishment-r8 RRCConnectionReestablishment-r8-IEs, + spare7 NULL, + spare6 NULL, spare5 NULL, spare4 NULL, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +RRCConnectionReestablishment-r8-IEs ::= SEQUENCE { + radioResourceConfigDedicated RadioResourceConfigDedicated, + nextHopChainingCount NextHopChainingCount, + nonCriticalExtension RRCConnectionReestablishment-v8a0-IEs OPTIONAL +} + +RRCConnectionReestablishment-v8a0-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, -- Need OP + nonCriticalExtension SEQUENCE {} OPTIONAL -- Need OP +} + +-- ASN1STOP + +– RRCConnectionReestablishmentComplete +The RRCConnectionReestablishmentComplete message is used to confirm the successful completion of an RRC connection reestablishment. +Signalling radio bearer: SRB1 +RLC-SAP: AM +Logical channel: DCCH +Direction: UE to EUTRAN +RRCConnectionReestablishmentComplete message +-- ASN1START + +RRCConnectionReestablishmentComplete ::= SEQUENCE { + rrc-TransactionIdentifier RRC-TransactionIdentifier, + criticalExtensions CHOICE { + rrcConnectionReestablishmentComplete-r8 + RRCConnectionReestablishmentComplete-r8-IEs, + criticalExtensionsFuture SEQUENCE {} + } +} + +RRCConnectionReestablishmentComplete-r8-IEs ::= SEQUENCE { + nonCriticalExtension RRCConnectionReestablishmentComplete-v920-IEs OPTIONAL +} + +RRCConnectionReestablishmentComplete-v920-IEs ::= SEQUENCE { + rlf-InfoAvailable-r9 ENUMERATED {true} OPTIONAL, + nonCriticalExtension RRCConnectionReestablishmentComplete-v8a0-IEs OPTIONAL +} + +RRCConnectionReestablishmentComplete-v8a0-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, + nonCriticalExtension RRCConnectionReestablishmentComplete-v1020-IEs OPTIONAL +} + +RRCConnectionReestablishmentComplete-v1020-IEs ::= SEQUENCE { + logMeasAvailable-r10 ENUMERATED {true} OPTIONAL, + nonCriticalExtension SEQUENCE {} OPTIONAL +} + +-- ASN1STOP + +RRCConnectionReestablishmentComplete field descriptions rlf-InfoAvailable +This field is used to indicate the availability of radio link failure or handover failure related measurements +– RRCConnectionReestablishmentReject +The RRCConnectionReestablishmentReject message is used to indicate the rejection of an RRC connection reestablishment request. +Signalling radio bearer: SRB0 +RLC-SAP: TM +Logical channel: CCCH +Direction: EUTRAN to UE +RRCConnectionReestablishmentReject message +-- ASN1START + +RRCConnectionReestablishmentReject ::= SEQUENCE { + criticalExtensions CHOICE { + rrcConnectionReestablishmentReject-r8 + RRCConnectionReestablishmentReject-r8-IEs, + criticalExtensionsFuture SEQUENCE {} + } +} + +RRCConnectionReestablishmentReject-r8-IEs ::= SEQUENCE { + nonCriticalExtension RRCConnectionReestablishmentReject-v8a0-IEs OPTIONAL +} + +RRCConnectionReestablishmentReject-v8a0-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, -- Need OP + nonCriticalExtension SEQUENCE {} OPTIONAL -- Need OP +} + +-- ASN1STOP + +– RRCConnectionReestablishmentRequest +The RRCConnectionReestablishmentRequest message is used to request the reestablishment of an RRC connection. +Signalling radio bearer: SRB0 +RLC-SAP: TM +Logical channel: CCCH +Direction: UE to EUTRAN +RRCConnectionReestablishmentRequest message +-- ASN1START + +RRCConnectionReestablishmentRequest ::= SEQUENCE { + criticalExtensions CHOICE { + rrcConnectionReestablishmentRequest-r8 + RRCConnectionReestablishmentRequest-r8-IEs, + criticalExtensionsFuture SEQUENCE {} + } +} + +RRCConnectionReestablishmentRequest-r8-IEs ::= SEQUENCE { + ue-Identity ReestabUE-Identity, + reestablishmentCause ReestablishmentCause, + spare BIT STRING (SIZE (2)) +} + +ReestabUE-Identity ::= SEQUENCE { + c-RNTI C-RNTI, + physCellId PhysCellId, + shortMAC-I ShortMAC-I +} + +ReestablishmentCause ::= ENUMERATED { + reconfigurationFailure, handoverFailure, + otherFailure, spare1} + +-- ASN1STOP + +RRCConnectionReestablishmentRequest field descriptions physCellId +The Physical Cell Identity of the PCell the UE was connected to prior to the failure. reestablishmentCause +Indicates the failure cause that triggered the re-establishment procedure. ue-Identity +UE identity included to retrieve UE context and to facilitate contention resolution by lower layers. +– RRCConnectionReject +The RRCConnectionReject message is used to reject the RRC connection establishment. +Signalling radio bearer: SRB0 +RLC-SAP: TM +Logical channel: CCCH +Direction: EUTRAN to UE +RRCConnectionReject message +-- ASN1START + +RRCConnectionReject ::= SEQUENCE { + criticalExtensions CHOICE { + c1 CHOICE { + rrcConnectionReject-r8 RRCConnectionReject-r8-IEs, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +RRCConnectionReject-r8-IEs ::= SEQUENCE { + waitTime INTEGER (1..16), + nonCriticalExtension RRCConnectionReject-v8a0-IEs OPTIONAL +} + +RRCConnectionReject-v8a0-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, -- Need OP + nonCriticalExtension RRCConnectionReject-v1020-IEs OPTIONAL +} + +RRCConnectionReject-v1020-IEs ::= SEQUENCE { + extendedWaitTime-r10 INTEGER (1..1800) OPTIONAL, -- Need ON + nonCriticalExtension SEQUENCE {} OPTIONAL -- Need OP +} + +-- ASN1STOP + +RRCConnectionReject field descriptions extendedWaitTime +Value in seconds for the wait time for Delay Tolerant access requests. waitTime +Wait time value in seconds. +– RRCConnectionRelease +The RRCConnectionRelease message is used to command the release of an RRC connection. +Signalling radio bearer: SRB1 +RLC-SAP: AM +Logical channel: DCCH +Direction: EUTRAN to UE +RRCConnectionRelease message +-- ASN1START + +RRCConnectionRelease ::= SEQUENCE { + rrc-TransactionIdentifier RRC-TransactionIdentifier, + criticalExtensions CHOICE { + c1 CHOICE { + rrcConnectionRelease-r8 RRCConnectionRelease-r8-IEs, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +RRCConnectionRelease-r8-IEs ::= SEQUENCE { + releaseCause ReleaseCause, + redirectedCarrierInfo RedirectedCarrierInfo OPTIONAL, -- Need ON + idleModeMobilityControlInfo IdleModeMobilityControlInfo OPTIONAL, -- Need OP + nonCriticalExtension RRCConnectionRelease-v890-IEs OPTIONAL +} + +RRCConnectionRelease-v890-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING (CONTAINING RRCConnectionRelease-v9e0-IEs) OPTIONAL, -- Need OP + nonCriticalExtension RRCConnectionRelease-v920-IEs OPTIONAL +} + +RRCConnectionRelease-v9e0-IEs ::= SEQUENCE { + redirectedCarrierInfo-v9e0 RedirectedCarrierInfo-v9e0 OPTIONAL, -- Cond NoRedirect-r8 + idleModeMobilityControlInfo-v9e0 IdleModeMobilityControlInfo-v9e0 OPTIONAL, -- Cond IdleInfoEUTRA + nonCriticalExtension SEQUENCE {} OPTIONAL -- Need OP +} + +RRCConnectionRelease-v920-IEs ::= SEQUENCE { + cellInfoList-r9 CHOICE { + geran-r9 CellInfoListGERAN-r9, + utra-FDD-r9 CellInfoListUTRA-FDD-r9, + utra-TDD-r9 CellInfoListUTRA-TDD-r9, + ..., + utra-TDD-r10 CellInfoListUTRA-TDD-r10 + } OPTIONAL, -- Cond Redirection + nonCriticalExtension RRCConnectionRelease-v1020-IEs OPTIONAL +} + +RRCConnectionRelease-v1020-IEs ::= SEQUENCE { + extendedWaitTime-r10 INTEGER (1..1800) OPTIONAL, -- Need ON + nonCriticalExtension SEQUENCE {} OPTIONAL -- Need OP +} + +ReleaseCause ::= ENUMERATED {loadBalancingTAUrequired, + other, cs-FallbackHighPriority-v1020, spare1} + +RedirectedCarrierInfo ::= CHOICE { + eutra ARFCN-ValueEUTRA, + geran CarrierFreqsGERAN, + utra-FDD ARFCN-ValueUTRA, + utra-TDD ARFCN-ValueUTRA, + cdma2000-HRPD CarrierFreqCDMA2000, + cdma2000-1xRTT CarrierFreqCDMA2000, + ..., + utra-TDD-r10 CarrierFreqListUTRA-TDD-r10 +} + +RedirectedCarrierInfo-v9e0 ::= SEQUENCE { + eutra-v9e0 ARFCN-ValueEUTRA-v9e0 +} + +CarrierFreqListUTRA-TDD-r10 ::= SEQUENCE (SIZE (1..maxFreqUTRA-TDD-r10)) OF ARFCN-ValueUTRA + +IdleModeMobilityControlInfo ::= SEQUENCE { + freqPriorityListEUTRA FreqPriorityListEUTRA OPTIONAL, -- Need ON + freqPriorityListGERAN FreqsPriorityListGERAN OPTIONAL, -- Need ON + freqPriorityListUTRA-FDD FreqPriorityListUTRA-FDD OPTIONAL, -- Need ON + freqPriorityListUTRA-TDD FreqPriorityListUTRA-TDD OPTIONAL, -- Need ON + bandClassPriorityListHRPD BandClassPriorityListHRPD OPTIONAL, -- Need ON + bandClassPriorityList1XRTT BandClassPriorityList1XRTT OPTIONAL, -- Need ON + t320 ENUMERATED { + min5, min10, min20, min30, min60, min120, min180, + spare1} OPTIONAL, -- Need OR + ... +} + +IdleModeMobilityControlInfo-v9e0 ::= SEQUENCE { + freqPriorityListEUTRA-v9e0 SEQUENCE (SIZE (1..maxFreq)) OF FreqPriorityEUTRA-v9e0 +} + +FreqPriorityListEUTRA ::= SEQUENCE (SIZE (1..maxFreq)) OF FreqPriorityEUTRA + +FreqPriorityEUTRA ::= SEQUENCE { + carrierFreq ARFCN-ValueEUTRA, + cellReselectionPriority CellReselectionPriority +} + +FreqPriorityEUTRA-v9e0 ::= SEQUENCE { + carrierFreq-v9e0 ARFCN-ValueEUTRA-v9e0 OPTIONAL -- Cond EARFCN-max +} + +FreqsPriorityListGERAN ::= SEQUENCE (SIZE (1..maxGNFG)) OF FreqsPriorityGERAN + +FreqsPriorityGERAN ::= SEQUENCE { + carrierFreqs CarrierFreqsGERAN, + cellReselectionPriority CellReselectionPriority +} + +FreqPriorityListUTRA-FDD ::= SEQUENCE (SIZE (1..maxUTRA-FDD-Carrier)) OF FreqPriorityUTRA-FDD + +FreqPriorityUTRA-FDD ::= SEQUENCE { + carrierFreq ARFCN-ValueUTRA, + cellReselectionPriority CellReselectionPriority +} + +FreqPriorityListUTRA-TDD ::= SEQUENCE (SIZE (1..maxUTRA-TDD-Carrier)) OF FreqPriorityUTRA-TDD + +FreqPriorityUTRA-TDD ::= SEQUENCE { + carrierFreq ARFCN-ValueUTRA, + cellReselectionPriority CellReselectionPriority +} + +BandClassPriorityListHRPD ::= SEQUENCE (SIZE (1..maxCDMA-BandClass)) OF BandClassPriorityHRPD + +BandClassPriorityHRPD ::= SEQUENCE { + bandClass BandclassCDMA2000, + cellReselectionPriority CellReselectionPriority +} + +BandClassPriorityList1XRTT ::= SEQUENCE (SIZE (1..maxCDMA-BandClass)) OF BandClassPriority1XRTT + +BandClassPriority1XRTT ::= SEQUENCE { + bandClass BandclassCDMA2000, + cellReselectionPriority CellReselectionPriority +} + +CellInfoListGERAN-r9 ::= SEQUENCE (SIZE (1..maxCellInfoGERAN-r9)) OF CellInfoGERAN-r9 + +CellInfoGERAN-r9 ::= SEQUENCE { + physCellId-r9 PhysCellIdGERAN, + carrierFreq-r9 CarrierFreqGERAN, + systemInformation-r9 SystemInfoListGERAN +} + +CellInfoListUTRA-FDD-r9 ::= SEQUENCE (SIZE (1..maxCellInfoUTRA-r9)) OF CellInfoUTRA-FDD-r9 + +CellInfoUTRA-FDD-r9 ::= SEQUENCE { + physCellId-r9 PhysCellIdUTRA-FDD, + utra-BCCH-Container-r9 OCTET STRING +} + +CellInfoListUTRA-TDD-r9 ::= SEQUENCE (SIZE (1..maxCellInfoUTRA-r9)) OF CellInfoUTRA-TDD-r9 + +CellInfoUTRA-TDD-r9 ::= SEQUENCE { + physCellId-r9 PhysCellIdUTRA-TDD, + utra-BCCH-Container-r9 OCTET STRING +} + +CellInfoListUTRA-TDD-r10 ::= SEQUENCE (SIZE (1..maxCellInfoUTRA-r9)) OF CellInfoUTRA-TDD-r10 + +CellInfoUTRA-TDD-r10 ::= SEQUENCE { + physCellId-r10 PhysCellIdUTRA-TDD, + carrierFreq-r10 ARFCN-ValueUTRA, + utra-BCCH-Container-r10 OCTET STRING +} + +-- ASN1STOP + +RRCConnectionRelease field descriptions carrierFreq or bandClass +The carrier frequency (UTRA and E-UTRA) and band class (HRPD and 1xRTT) for which the associated cellReselectionPriority is applied. carrierFreqs +The list of GERAN carrier frequencies organised into one group of GERAN carrier frequencies. cellInfoList +Used to provide system information of one or more cells on the redirected inter-RAT carrier frequency. The system information can be used if, upon redirection, the UE selects an inter-RAT cell indicated by the physCellId and carrierFreq (GERAN and UTRA TDD) or by the physCellId (other RATs). The choice shall match the redirectedCarrierInfo. In particular, E-UTRAN only applies value utra-TDD-r10 in case redirectedCarrierInfo is set to utra-TDD-r10. extendedWaitTime +Value in seconds for the wait time for Delay Tolerant access requests. freqPriorityListX +Provides a cell reselection priority for each frequency, by means of separate lists for each RAT (including E-UTRA). If E-UTRAN includes freqPriorityListEUTRA-v9e0 it includes the same number of entries, and listed in the same order, as in freqPriorityListEUTRA (i.e. without suffix). idleModeMobilityControlInfo +Provides dedicated cell reselection priorities. Used for cell reselection as specified in TS 36.304 [4]. For E-UTRA and UTRA frequencies, a UE that supports multi-band cells for the concerned RAT considers the dedicated priorities to be common for all overlapping bands (i.e. regardless of the ARFCN that is used). redirectedCarrierInfo +The redirectedCarrierInfo indicates a carrier frequency (downlink for FDD) and is used to redirect the UE to an EUTRA or an inter-RAT carrier frequency, by means of the cell selection upon leaving RRC_CONNECTED as specified in TS 36.304 [4]. releaseCause +The releaseCause is used to indicate the reason for releasing the RRC Connection. The cause value cs-FallbackHighPriority is only applicable when redirectedCarrierInfo is present with the value set to utra-FDD, utra-TDD or utra-TDD-r10. +E-UTRAN should not set the releaseCause to loadBalancingTAURequired or to cs-FallbackHighPriority if the extendedWaitTime is present. systemInformation +Container for system information of the GERAN cell i.e. one or more System Information (SI) messages as defined in TS 44.018 [45, table 9.1.1]. t320 +Timer T320 as described in section 7.3. Value minN corresponds to N minutes. utra-BCCH-Container +Contains System Information Container message as defined in TS 25.331 [19]. +Conditional presence Explanation EARFCN-max The field is mandatory present if the corresponding carrierFreq (i.e. without suffix) is set to maxEARFCN. Otherwise the field is not present. IdleInfoEUTRA The field is optionally present, need OP, if the IdleModeMobilityControlInfo (i.e. without suffix) is included and includes freqPriorityListEUTRA; otherwise the field is not present. NoRedirect-r8 The field is optionally present, need OP, if the redirectedCarrierInfo (i.e. without suffix) is not included; otherwise the field is not present. Redirection The field is optionally present, need ON, if the redirectedCarrierInfo is included and set to geran, utra-FDD, utra-TDD or utra-TDD-r10; otherwise the field is not present. +– RRCConnectionRequest +The RRCConnectionRequest message is used to request the establishment of an RRC connection. +Signalling radio bearer: SRB0 +RLC-SAP: TM +Logical channel: CCCH +Direction: UE to EUTRAN +RRCConnectionRequest message +-- ASN1START + +RRCConnectionRequest ::= SEQUENCE { + criticalExtensions CHOICE { + rrcConnectionRequest-r8 RRCConnectionRequest-r8-IEs, + criticalExtensionsFuture SEQUENCE {} + } +} + +RRCConnectionRequest-r8-IEs ::= SEQUENCE { + ue-Identity InitialUE-Identity, + establishmentCause EstablishmentCause, + spare BIT STRING (SIZE (1)) +} + +InitialUE-Identity ::= CHOICE { + s-TMSI S-TMSI, + randomValue BIT STRING (SIZE (40)) +} + +EstablishmentCause ::= ENUMERATED { + emergency, highPriorityAccess, mt-Access, mo-Signalling, + mo-Data, delayTolerantAccess-v1020, spare2, spare1} + +-- ASN1STOP + +RRCConnectionRequest field descriptions establishmentCause +Provides the establishment cause for the RRC connection request as provided by the upper layers. W.r.t. the cause value names: highPriorityAccess concerns AC11..AC15, ‘mt’ stands for ‘Mobile Terminating’ and ‘mo’ for ‘Mobile Originating. randomValue +Integer value in the range 0 to 240 ? 1. ue-Identity +UE identity included to facilitate contention resolution by lower layers. +– RRCConnectionSetup +The RRCConnectionSetup message is used to establish SRB1. +Signalling radio bearer: SRB0 +RLC-SAP: TM +Logical channel: CCCH +Direction: EUTRAN to UE +RRCConnectionSetup message +-- ASN1START + +RRCConnectionSetup ::= SEQUENCE { + rrc-TransactionIdentifier RRC-TransactionIdentifier, + criticalExtensions CHOICE { + c1 CHOICE { + rrcConnectionSetup-r8 RRCConnectionSetup-r8-IEs, + spare7 NULL, + spare6 NULL, spare5 NULL, spare4 NULL, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +RRCConnectionSetup-r8-IEs ::= SEQUENCE { + radioResourceConfigDedicated RadioResourceConfigDedicated, + nonCriticalExtension RRCConnectionSetup-v8a0-IEs OPTIONAL +} + +RRCConnectionSetup-v8a0-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, -- Need OP + nonCriticalExtension SEQUENCE {} OPTIONAL -- Need OP +} + +-- ASN1STOP + +– RRCConnectionSetupComplete +The RRCConnectionSetupComplete message is used to confirm the successful completion of an RRC connection establishment. +Signalling radio bearer: SRB1 +RLC-SAP: AM +Logical channel: DCCH +Direction: UE to EUTRAN +RRCConnectionSetupComplete message +-- ASN1START + +RRCConnectionSetupComplete ::= SEQUENCE { + rrc-TransactionIdentifier RRC-TransactionIdentifier, + criticalExtensions CHOICE { + c1 CHOICE{ + rrcConnectionSetupComplete-r8 RRCConnectionSetupComplete-r8-IEs, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +RRCConnectionSetupComplete-r8-IEs ::= SEQUENCE { + selectedPLMN-Identity INTEGER (1..6), + registeredMME RegisteredMME OPTIONAL, + dedicatedInfoNAS DedicatedInfoNAS, + nonCriticalExtension RRCConnectionSetupComplete-v8a0-IEs OPTIONAL +} + +RRCConnectionSetupComplete-v8a0-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, + nonCriticalExtension RRCConnectionSetupComplete-v1020-IEs OPTIONAL +} + +RRCConnectionSetupComplete-v1020-IEs ::= SEQUENCE { + gummei-Type-r10 ENUMERATED {native, mapped} OPTIONAL, + rlf-InfoAvailable-r10 ENUMERATED {true} OPTIONAL, + logMeasAvailable-r10 ENUMERATED {true} OPTIONAL, + rn-SubframeConfigReq-r10 ENUMERATED {required, notRequired} OPTIONAL, + nonCriticalExtension SEQUENCE {} OPTIONAL +} + +RegisteredMME ::= SEQUENCE { + plmn-Identity PLMN-Identity OPTIONAL, + mmegi BIT STRING (SIZE (16)), + mmec MMEC +} + +-- ASN1STOP + +RRCConnectionSetupComplete field descriptions gummei-Type +This field is used to indicate whether the GUMMEI included is native (assigned by EPC) or mapped (from 2G/3G identifiers). mmegi +Provides the Group Identity of the registered MME within the PLMN, as provided by upper layers, see TS 23.003 [27]. registeredMME +This field is used to transfer the GUMMEI of the MME where the UE is registered, as provided by upper layers. rn-SubframeConfigReq +If present, this field indicates that the connection establishment is for an RN and whether a subframe configuration is requested or not. selectedPLMN-Identity +Index of the PLMN selected by the UE from the plmn-IdentityList included in SIB1. 1 if the 1st PLMN is selected from the plmn-IdentityList included in SIB1, 2 if the 2nd PLMN is selected from the plmn-IdentityList included in SIB1 and so on. +– SecurityModeCommand +The SecurityModeCommand message is used to command the activation of AS security. +Signalling radio bearer: SRB1 +RLC-SAP: AM +Logical channel: DCCH +Direction: EUTRAN to UE +SecurityModeCommand message +-- ASN1START + +SecurityModeCommand ::= SEQUENCE { + rrc-TransactionIdentifier RRC-TransactionIdentifier, + criticalExtensions CHOICE { + c1 CHOICE{ + securityModeCommand-r8 SecurityModeCommand-r8-IEs, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +SecurityModeCommand-r8-IEs ::= SEQUENCE { + securityConfigSMC SecurityConfigSMC, + nonCriticalExtension SecurityModeCommand-v8a0-IEs OPTIONAL +} + +SecurityModeCommand-v8a0-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, -- Need OP + nonCriticalExtension SEQUENCE {} OPTIONAL -- Need OP +} + +SecurityConfigSMC ::= SEQUENCE { + securityAlgorithmConfig SecurityAlgorithmConfig, + ... +} + +-- ASN1STOP + +– SecurityModeComplete +The SecurityModeComplete message is used to confirm the successful completion of a security mode command. +Signalling radio bearer: SRB1 +RLC-SAP: AM +Logical channel: DCCH +Direction: UE to EUTRAN +SecurityModeComplete message +-- ASN1START + +SecurityModeComplete ::= SEQUENCE { + rrc-TransactionIdentifier RRC-TransactionIdentifier, + criticalExtensions CHOICE { + securityModeComplete-r8 SecurityModeComplete-r8-IEs, + criticalExtensionsFuture SEQUENCE {} + } +} + +SecurityModeComplete-r8-IEs ::= SEQUENCE { + nonCriticalExtension SecurityModeComplete-v8a0-IEs OPTIONAL +} + +SecurityModeComplete-v8a0-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, + nonCriticalExtension SEQUENCE {} OPTIONAL +} + +-- ASN1STOP + +– SecurityModeFailure +The SecurityModeFailure message is used to indicate an unsuccessful completion of a security mode command. +Signalling radio bearer: SRB1 +RLC-SAP: AM +Logical channel: DCCH +Direction: UE to EUTRAN +SecurityModeFailure message +-- ASN1START + +SecurityModeFailure ::= SEQUENCE { + rrc-TransactionIdentifier RRC-TransactionIdentifier, + criticalExtensions CHOICE { + securityModeFailure-r8 SecurityModeFailure-r8-IEs, + criticalExtensionsFuture SEQUENCE {} + } +} + +SecurityModeFailure-r8-IEs ::= SEQUENCE { + nonCriticalExtension SecurityModeFailure-v8a0-IEs OPTIONAL +} + +SecurityModeFailure-v8a0-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, + nonCriticalExtension SEQUENCE {} OPTIONAL +} + +-- ASN1STOP + +– SystemInformation +The SystemInformation message is used to convey one or more System Information Blocks. All the SIBs included are transmitted with the same periodicity. +Signalling radio bearer: N/A +RLC-SAP: TM +Logical channel: BCCH +Direction: EUTRAN to UE +SystemInformation message +-- ASN1START + +SystemInformation ::= SEQUENCE { + criticalExtensions CHOICE { + systemInformation-r8 SystemInformation-r8-IEs, + criticalExtensionsFuture SEQUENCE {} + } +} +SystemInformation-r8-IEs ::= SEQUENCE { + sib-TypeAndInfo SEQUENCE (SIZE (1..maxSIB)) OF CHOICE { + sib2 SystemInformationBlockType2, + sib3 SystemInformationBlockType3, + sib4 SystemInformationBlockType4, + sib5 SystemInformationBlockType5, + sib6 SystemInformationBlockType6, + sib7 SystemInformationBlockType7, + sib8 SystemInformationBlockType8, + sib9 SystemInformationBlockType9, + sib10 SystemInformationBlockType10, + sib11 SystemInformationBlockType11, + ..., + sib12-v920 SystemInformationBlockType12-r9, + sib13-v920 SystemInformationBlockType13-r9 + }, + nonCriticalExtension SystemInformation-v8a0-IEs OPTIONAL +} + +SystemInformation-v8a0-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, -- Need OP + nonCriticalExtension SEQUENCE {} OPTIONAL -- Need OP +} + +-- ASN1STOP + +– SystemInformationBlockType1 +SystemInformationBlockType1 contains information relevant when evaluating if a UE is allowed to access a cell and defines the scheduling of other system information. +Signalling radio bearer: N/A +RLC-SAP: TM +Logical channel: BCCH +Direction: EUTRAN to UE +SystemInformationBlockType1 message +-- ASN1START + +SystemInformationBlockType1 ::= SEQUENCE { + cellAccessRelatedInfo SEQUENCE { + plmn-IdentityList PLMN-IdentityList, + trackingAreaCode TrackingAreaCode, + cellIdentity CellIdentity, + cellBarred ENUMERATED {barred, notBarred}, + intraFreqReselection ENUMERATED {allowed, notAllowed}, + csg-Indication BOOLEAN, + csg-Identity CSG-Identity OPTIONAL -- Need OR + }, + cellSelectionInfo SEQUENCE { + q-RxLevMin Q-RxLevMin, + q-RxLevMinOffset INTEGER (1..8) OPTIONAL -- Need OP + }, + p-Max P-Max OPTIONAL, -- Need OP + freqBandIndicator FreqBandIndicator, + schedulingInfoList SchedulingInfoList, + tdd-Config TDD-Config OPTIONAL, -- Cond TDD + si-WindowLength ENUMERATED { + ms1, ms2, ms5, ms10, ms15, ms20, + ms40}, + systemInfoValueTag INTEGER (0..31), + nonCriticalExtension SystemInformationBlockType1-v890-IEs OPTIONAL +} + +SystemInformationBlockType1-v890-IEs::= SEQUENCE { + lateNonCriticalExtension OCTET STRING (CONTAINING SystemInformationBlockType1-v8h0-IEs) OPTIONAL, -- Need OP + nonCriticalExtension SystemInformationBlockType1-v920-IEs OPTIONAL +} + +SystemInformationBlockType1-v8h0-IEs ::= SEQUENCE { + multiBandInfoList MultiBandInfoList OPTIONAL, -- Need OR + nonCriticalExtension SystemInformationBlockType1-v9e0-IEs OPTIONAL -- Need OP +} + +SystemInformationBlockType1-v9e0-IEs ::= SEQUENCE { + freqBandIndicator-v9e0 FreqBandIndicator-v9e0 OPTIONAL, -- Cond FBI-max + multiBandInfoList-v9e0 MultiBandInfoList-v9e0 OPTIONAL, -- Cond mFBI-max + nonCriticalExtension SEQUENCE {} OPTIONAL -- Need OP +} + +SystemInformationBlockType1-v920-IEs ::= SEQUENCE { + ims-EmergencySupport-r9 ENUMERATED {true} OPTIONAL, -- Need OR + cellSelectionInfo-v920 CellSelectionInfo-v920 OPTIONAL, -- Cond RSRQ + nonCriticalExtension SEQUENCE {} OPTIONAL -- Need OP +} + +PLMN-IdentityList ::= SEQUENCE (SIZE (1..6)) OF PLMN-IdentityInfo + +PLMN-IdentityInfo ::= SEQUENCE { + plmn-Identity PLMN-Identity, + cellReservedForOperatorUse ENUMERATED {reserved, notReserved} +} + +SchedulingInfoList ::= SEQUENCE (SIZE (1..maxSI-Message)) OF SchedulingInfo + +SchedulingInfo ::= SEQUENCE { + si-Periodicity ENUMERATED { + rf8, rf16, rf32, rf64, rf128, rf256, rf512}, + sib-MappingInfo SIB-MappingInfo +} + +SIB-MappingInfo ::= SEQUENCE (SIZE (0..maxSIB-1)) OF SIB-Type + +SIB-Type ::= ENUMERATED { + sibType3, sibType4, sibType5, sibType6, + sibType7, sibType8, sibType9, sibType10, + sibType11, sibType12-v920, sibType13-v920, spare5, + spare4, spare3, spare2, spare1, ...} + +CellSelectionInfo-v920 ::= SEQUENCE { + q-QualMin-r9 Q-QualMin-r9, + q-QualMinOffset-r9 INTEGER (1..8) OPTIONAL -- Need OP +} + +-- ASN1STOP + +SystemInformationBlockType1 field descriptions cellBarred +barred means the cell is barred, as defined in TS 36.304 [4]. cellReservedForOperatorUse +As defined in TS 36.304 [4]. csg-Identity +Identity of the Closed Subscriber Group the cell belongs to. csg-Indication +If set to TRUE the UE is only allowed to access the cell if it is a CSG member cell, if selected during manual CSG selection or to obtain limited service, see TS 36.304 [4]. ims-EmergencySupport +Indicates whether the cell supports IMS emergency bearer services for UEs in limited service mode. If absent, IMS emergency call is not supported by the network in the cell for UEs in limited service mode. intraFreqReselection +Used to control cell reselection to intra-frequency cells when the highest ranked cell is barred, or treated as barred by the UE, as specified in TS 36.304 [4]. multiBandInfoList +A list of additional frequency band indicators as defined in TS 36.101 [42, table 5.5-1] that the cell belongs to. If the UE supports the frequency band in the freqBandIndicator IE it shall apply that frequency band. Otherwise, the UE shall apply the first listed band which it supports in the multiBandInfoList IE. If E-UTRAN includes multiBandInfoList-v9e0 it includes the same number of entries, and listed in the same order, as in multiBandInfoList (i.e. without suffix). See Annex D for more descriptions. plmn-IdentityList +List of PLMN identities. The first listed PLMN-Identity is the primary PLMN. p-Max +Value applicable for the cell. If absent the UE applies the maximum power according to the UE capability. q-QualMin +Parameter “Qqualmin” in TS 36.304 [4]. If cellSelectionInfo-v920 is not present, the UE applies the (default) value of negative infinity for Qqualmin. q-QualMinOffset +Parameter “Qqualminoffset” in TS 36.304 [4]. Actual value Qqualminoffset = IE value [dB]. If cellSelectionInfo-v920 is not present or the field is not present, the UE applies the (default) value of 0 dB for Qqualminoffset. Affects the minimum required quality level in the cell. q-RxLevMinOffset +Parameter Qrxlevminoffset in TS 36.304 [4]. Actual value Qrxlevminoffset = IE value * 2 [dB]. If absent, the UE applies the (default) value of 0 dB for Qrxlevminoffset. Affects the minimum required Rx level in the cell. sib-MappingInfo +List of the SIBs mapped to this SystemInformation message.There is no mapping information of SIB2; it is always present in the first SystemInformation message listed in the schedulingInfoList list. si-Periodicity +Periodicity of the SI-message in radio frames, such that rf8 denotes 8 radio frames, rf16 denotes 16 radio frames, and so on. si-WindowLength +Common SI scheduling window for all SIs. Unit in milliseconds, where ms1 denotes 1 millisecond, ms2 denotes 2 milliseconds and so on. systemInfoValueTag +Common for all SIBs other than MIB, SIB1, SIB10, SIB11 and SIB12. Change of MIB and SIB1 is detected by acquisition of the corresponding message. trackingAreaCode +A trackingAreaCode that is common for all the PLMNs listed. +Conditional presence Explanation FBI-max The field is mandatory present if freqBandIndicator (i.e. without suffix) is set to maxFBI. Otherwise the field is not present. mFBI-max The field is mandatory present if one or more entries in multiBandInfoList (i.e. without suffix, introduced in -v8h0) is set to maxFBI. Otherwise the field is not present. RSRQ The field is mandatory present if SIB3 is being broadcast and threshServingLowQ is present in SIB3; otherwise optionally present, Need OP. TDD This field is mandatory present for TDD; it is not present for FDD and the UE shall delete any existing value for this field. +– UECapabilityEnquiry +The UECapabilityEnquiry message is used to request the transfer of UE radio access capabilities for EUTRA as well as for other RATs. +Signalling radio bearer: SRB1 +RLC-SAP: AM +Logical channel: DCCH +Direction: EUTRAN to UE +UECapabilityEnquiry message +-- ASN1START + +UECapabilityEnquiry ::= SEQUENCE { + rrc-TransactionIdentifier RRC-TransactionIdentifier, + criticalExtensions CHOICE { + c1 CHOICE { + ueCapabilityEnquiry-r8 UECapabilityEnquiry-r8-IEs, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +UECapabilityEnquiry-r8-IEs ::= SEQUENCE { + ue-CapabilityRequest UE-CapabilityRequest, + nonCriticalExtension UECapabilityEnquiry-v8a0-IEs OPTIONAL +} + +UECapabilityEnquiry-v8a0-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, -- Need OP + nonCriticalExtension SEQUENCE {} OPTIONAL -- Need OP +} + +UE-CapabilityRequest ::= SEQUENCE (SIZE (1..maxRAT-Capabilities)) OF RAT-Type + +-- ASN1STOP + +UECapabilityEnquiry field descriptions ue-CapabilityRequest +List of the RATs for which the UE is requested to transfer the UE radio access capabilities i.e. E-UTRA, UTRA, GERAN-CS, GERAN-PS, CDMA2000. +– UECapabilityInformation +The UECapabilityInformation message is used to transfer of UE radio access capabilities requested by the EUTRAN. +Signalling radio bearer: SRB1 +RLC-SAP: AM +Logical channel: DCCH +Direction: UE to EUTRAN +UECapabilityInformation message +-- ASN1START + +UECapabilityInformation ::= SEQUENCE { + rrc-TransactionIdentifier RRC-TransactionIdentifier, + criticalExtensions CHOICE { + c1 CHOICE{ + ueCapabilityInformation-r8 UECapabilityInformation-r8-IEs, + spare7 NULL, + spare6 NULL, spare5 NULL, spare4 NULL, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +UECapabilityInformation-r8-IEs ::= SEQUENCE { + ue-CapabilityRAT-ContainerList UE-CapabilityRAT-ContainerList, + nonCriticalExtension UECapabilityInformation-v8a0-IEs OPTIONAL +} + +UECapabilityInformation-v8a0-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, + nonCriticalExtension SEQUENCE {} OPTIONAL +} + +-- ASN1STOP + +– UEInformationRequest +The UEInformationRequest is the command used by E-UTRAN to retrieve information from the UE. +Signalling radio bearer: SRB1 +RLC-SAP: AM +Logical channel: DCCH +Direction: EUTRAN to UE +UEInformationRequest message +-- ASN1START + +UEInformationRequest-r9 ::= SEQUENCE { + rrc-TransactionIdentifier RRC-TransactionIdentifier, + criticalExtensions CHOICE { + c1 CHOICE { + ueInformationRequest-r9 UEInformationRequest-r9-IEs, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +UEInformationRequest-r9-IEs ::= SEQUENCE { + rach-ReportReq-r9 BOOLEAN, + rlf-ReportReq-r9 BOOLEAN, + nonCriticalExtension UEInformationRequest-v930-IEs OPTIONAL +} + +UEInformationRequest-v930-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, -- Need OP + nonCriticalExtension UEInformationRequest-v1020-IEs OPTIONAL +} + +UEInformationRequest-v1020-IEs ::= SEQUENCE { + logMeasReportReq-r10 ENUMERATED {true} OPTIONAL, -- Need ON + nonCriticalExtension SEQUENCE {} OPTIONAL -- Need OP +} + +-- ASN1STOP + +UEInformationRequest field descriptions rach-ReportReq +This field is used to indicate whether the UE shall report information about the random access procedure. +– UEInformationResponse +The UEInformationResponse message is used by the UE to transfer the information requested by the E-UTRAN. +Signalling radio bearer: SRB1 or SRB2 (when logged measurement information is included) +RLC-SAP: AM +Logical channel: DCCH +Direction: UE to E-UTRAN +UEInformationResponse message +-- ASN1START + +UEInformationResponse-r9 ::= SEQUENCE { + rrc-TransactionIdentifier RRC-TransactionIdentifier, + criticalExtensions CHOICE { + c1 CHOICE { + ueInformationResponse-r9 UEInformationResponse-r9-IEs, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +UEInformationResponse-r9-IEs ::= SEQUENCE { + rach-Report-r9 SEQUENCE { + numberOfPreamblesSent-r9 INTEGER (1..200), + contentionDetected-r9 BOOLEAN + } OPTIONAL, + rlf-Report-r9 RLF-Report-r9 OPTIONAL, + nonCriticalExtension UEInformationResponse-v930-IEs OPTIONAL +} + +UEInformationResponse-v930-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING (CONTAINING UEInformationResponse-v9e0-IEs) OPTIONAL, + nonCriticalExtension UEInformationResponse-v1020-IEs OPTIONAL +} + +UEInformationResponse-v9e0-IEs ::= SEQUENCE { + rlf-Report-v9e0 RLF-Report-v9e0 OPTIONAL, + nonCriticalExtension SEQUENCE {} OPTIONAL +} + +UEInformationResponse-v1020-IEs ::= SEQUENCE { + logMeasReport-r10 LogMeasReport-r10 OPTIONAL, + nonCriticalExtension SEQUENCE {} OPTIONAL +} + +RLF-Report-r9 ::= SEQUENCE { + measResultLastServCell-r9 SEQUENCE { + rsrpResult-r9 RSRP-Range, + rsrqResult-r9 RSRQ-Range OPTIONAL + }, + measResultNeighCells-r9 SEQUENCE { + measResultListEUTRA-r9 MeasResultList2EUTRA-r9 OPTIONAL, + measResultListUTRA-r9 MeasResultList2UTRA-r9 OPTIONAL, + measResultListGERAN-r9 MeasResultListGERAN OPTIONAL, + measResultsCDMA2000-r9 MeasResultList2CDMA2000-r9 OPTIONAL + } OPTIONAL, + ..., + [[ locationInfo-r10 LocationInfo-r10 OPTIONAL, + failedPCellId-r10 CHOICE { + cellGlobalId-r10 CellGlobalIdEUTRA, + pci-arfcn-r10 SEQUENCE { + physCellId-r10 PhysCellId, + carrierFreq-r10 ARFCN-ValueEUTRA + } + } OPTIONAL, + reestablishmentCellId-r10 CellGlobalIdEUTRA OPTIONAL, + timeConnFailure-r10 INTEGER (0..1023) OPTIONAL, + connectionFailureType-r10 ENUMERATED {rlf, hof} OPTIONAL, + previousPCellId-r10 CellGlobalIdEUTRA OPTIONAL + ]], + [[ failedPCellId-v1090 SEQUENCE { + carrierFreq-v1090 ARFCN-ValueEUTRA-v9e0 + } OPTIONAL + ]] +} + +RLF-Report-v9e0 ::= SEQUENCE { + measResultListEUTRA-v9e0 MeasResultList2EUTRA-v9e0 +} + +MeasResultList2EUTRA-r9 ::= SEQUENCE (SIZE (1..maxFreq)) OF MeasResult2EUTRA-r9 + +MeasResultList2EUTRA-v9e0 ::= SEQUENCE (SIZE (1..maxFreq)) OF MeasResult2EUTRA-v9e0 + +MeasResult2EUTRA-r9 ::= SEQUENCE { + carrierFreq-r9 ARFCN-ValueEUTRA, + measResultList-r9 MeasResultListEUTRA +} + +MeasResult2EUTRA-v9e0 ::= SEQUENCE { + carrierFreq-v9e0 ARFCN-ValueEUTRA-v9e0 OPTIONAL +} + +MeasResultList2UTRA-r9 ::= SEQUENCE (SIZE (1..maxFreq)) OF MeasResult2UTRA-r9 + +MeasResult2UTRA-r9 ::= SEQUENCE { + carrierFreq-r9 ARFCN-ValueUTRA, + measResultList-r9 MeasResultListUTRA +} + +MeasResultList2CDMA2000-r9 ::= SEQUENCE (SIZE (1..maxFreq)) OF MeasResult2CDMA2000-r9 + +MeasResult2CDMA2000-r9 ::= SEQUENCE { + carrierFreq-r9 CarrierFreqCDMA2000, + measResultList-r9 MeasResultsCDMA2000 +} + +LogMeasReport-r10 ::= SEQUENCE { + absoluteTimeStamp-r10 AbsoluteTimeInfo-r10, + traceReference-r10 TraceReference-r10, + traceRecordingSessionRef-r10 OCTET STRING (SIZE (2)), + tce-Id-r10 OCTET STRING (SIZE (1)), + logMeasInfoList-r10 LogMeasInfoList-r10, + logMeasAvailable-r10 ENUMERATED {true} OPTIONAL, + ... +} + +LogMeasInfoList-r10 ::= SEQUENCE (SIZE (1..maxLogMeasReport-r10)) OF LogMeasInfo-r10 + +LogMeasInfo-r10 ::= SEQUENCE { + locationInfo-r10 LocationInfo-r10 OPTIONAL, + relativeTimeStamp-r10 INTEGER (0..7200), + servCellIdentity-r10 CellGlobalIdEUTRA, + measResultServCell-r10 SEQUENCE { + rsrpResult-r10 RSRP-Range, + rsrqResult-r10 RSRQ-Range + }, + measResultNeighCells-r10 SEQUENCE { + measResultListEUTRA-r10 MeasResultList2EUTRA-r9 OPTIONAL, + measResultListUTRA-r10 MeasResultList2UTRA-r9 OPTIONAL, + measResultListGERAN-r10 MeasResultList2GERAN-r10 OPTIONAL, + measResultListCDMA2000-r10 MeasResultList2CDMA2000-r9 OPTIONAL + } OPTIONAL, + ... +} + +MeasResultList2GERAN-r10 ::= SEQUENCE (SIZE (1..maxCellListGERAN)) OF MeasResultListGERAN + +-- ASN1STOP + +UEInformationResponse field descriptions absoluteTimeStamp +Indicates the absolute time when the logged measurement configuration logging is provided, as indicated by E-UTRAN within absoluteTimeInfo. carrierFreq +In case the UE includes carrierFreq-v9e0 and/ or carrierFreq-v1090, the UE shall set the corresponding entry of carrierFreq-r9 and/ or carrierFreq-r10 respectively to maxEARFCN. For E-UTRA and UTRA frequencies, the UE sets the ARFCN according to the band used when obtaining the concerned measurement results. connectionFailureType +This field is used to indicate whether the connection failure is due to radio link failure or handover failure. contentionDetected +This field is used to indicate that contention was detected for at least one of the transmitted preambles, see TS 36.321 [6]. failedPCellId +This field is used to indicate the PCell in which RLF is detected or the target PCell of the failed handover. The UE sets the EARFCN according to the band used for transmission/ reception when the failure occurred. measResultLastServCell +This field refers to the last measurement results taken in the PCell, where radio link failure or handover failure happened. measResultListEUTRA +If measResultListEUTRA-v9e0, measResultListEUTRA-v1090 or measResultListEUTRA-v11x0 is included, the UE shall include the same number of entries, and listed in the same order, as in measResultListEUTRA-r9, measResultListEUTRA-r10 and/ or measResultListEUTRA-r11 respectively. numberOfPreamblesSent +This field is used to indicate the number of RACH preambles that were transmitted. Corresponds to parameter PREAMBLE_TRANSMISSION_COUNTER in TS 36.321 [6]. previousPCellId +This field is used to indicate the source PCell of the last handover (source PCell when the last RRC-Connection-Reconfiguration message including mobilityControlInfowas received). reestablishmentCellId +This field is used to indicate the cell in which the re-establishment attempt was made after connection failure. relativeTimeStamp +Indicates the time of logging measurement results, measured relative to the absoluteTimeStamp. Value in seconds. tce-Id +Parameter Trace Collection Entity Id: See TS 32.422 [58]. timeConnFailure +This field is used to indicate the time elapsed since the last HO initialization until connection failure. Actual value = IE value * 100ms. The maximum value 1023 means 102.3s or longer. traceRecordingSessionRef +Parameter Trace Recording Session Reference: See TS 32.422 [58]. +– ULHandoverPreparationTransfer (CDMA2000) +The ULHandoverPreparationTransfer message is used for the uplink transfer of handover related CDMA2000 information when requested by the higher layers. +Signalling radio bearer: SRB1 +RLC-SAP: AM +Logical channel: DCCH +Direction: UE to EUTRAN +ULHandoverPreparationTransfer message +-- ASN1START + +ULHandoverPreparationTransfer ::= SEQUENCE { + criticalExtensions CHOICE { + c1 CHOICE { + ulHandoverPreparationTransfer-r8 ULHandoverPreparationTransfer-r8-IEs, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +ULHandoverPreparationTransfer-r8-IEs ::= SEQUENCE { + cdma2000-Type CDMA2000-Type, + meid BIT STRING (SIZE (56)) OPTIONAL, + dedicatedInfo DedicatedInfoCDMA2000, + nonCriticalExtension ULHandoverPreparationTransfer-v8a0-IEs OPTIONAL +} + +ULHandoverPreparationTransfer-v8a0-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, + nonCriticalExtension SEQUENCE {} OPTIONAL +} + +-- ASN1STOP + +ULHandoverPreparationTransfer field descriptions meid +The 56 bit mobile identification number provided by the CDMA2000 Upper layers. +– ULInformationTransfer +The ULInformationTransfer message is used for the uplink transfer of NAS or non-3GPP dedicated information. +Signalling radio bearer: SRB2 or SRB1(only if SRB2 not established yet). If SRB2 is suspended, the UE does not send this message until SRB2 is resumed +RLC-SAP: AM +Logical channel: DCCH +Direction: UE to EUTRAN +ULInformationTransfer message +-- ASN1START + +ULInformationTransfer ::= SEQUENCE { + criticalExtensions CHOICE { + c1 CHOICE { + ulInformationTransfer-r8 ULInformationTransfer-r8-IEs, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +ULInformationTransfer-r8-IEs ::= SEQUENCE { + dedicatedInfoType CHOICE { + dedicatedInfoNAS DedicatedInfoNAS, + dedicatedInfoCDMA2000-1XRTT DedicatedInfoCDMA2000, + dedicatedInfoCDMA2000-HRPD DedicatedInfoCDMA2000 + }, + nonCriticalExtension ULInformationTransfer-v8a0-IEs OPTIONAL +} + +ULInformationTransfer-v8a0-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, + nonCriticalExtension SEQUENCE {} OPTIONAL +} + +-- ASN1STOP + +6.3 RRC information elements +6.3.1 System information blocks +– SystemInformationBlockType2 +The IE SystemInformationBlockType2 contains radio resource configuration information that is common for all UEs. +NOTE: UE timers and constants related to functionality for which parameters are provided in another SIB are included in the corresponding SIB. +SystemInformationBlockType2 information element +-- ASN1START + +SystemInformationBlockType2 ::= SEQUENCE { + ac-BarringInfo SEQUENCE { + ac-BarringForEmergency BOOLEAN, + ac-BarringForMO-Signalling AC-BarringConfig OPTIONAL, -- Need OP + ac-BarringForMO-Data AC-BarringConfig OPTIONAL -- Need OP + } OPTIONAL, -- Need OP + radioResourceConfigCommon RadioResourceConfigCommonSIB, + ue-TimersAndConstants UE-TimersAndConstants, + freqInfo SEQUENCE { + ul-CarrierFreq ARFCN-ValueEUTRA OPTIONAL, -- Need OP + ul-Bandwidth ENUMERATED {n6, n15, n25, n50, n75, n100} + OPTIONAL, -- Need OP + additionalSpectrumEmission AdditionalSpectrumEmission + }, + mbsfn-SubframeConfigList MBSFN-SubframeConfigList OPTIONAL, -- Need OR + timeAlignmentTimerCommon TimeAlignmentTimer, + ..., + lateNonCriticalExtension OCTET STRING (CONTAINING SystemInformationBlockType2-v8h0-IEs) OPTIONAL, -- Need OP + [[ ssac-BarringForMMTEL-Voice-r9 AC-BarringConfig OPTIONAL, -- Need OP + ssac-BarringForMMTEL-Video-r9 AC-BarringConfig OPTIONAL -- Need OP + ]], + [[ ac-BarringForCSFB-r10 AC-BarringConfig OPTIONAL -- Need OP + ]] +} + +SystemInformationBlockType2-v8h0-IEs ::= SEQUENCE { + multiBandInfoList SEQUENCE (SIZE (1..maxMultiBands)) OF AdditionalSpectrumEmission OPTIONAL, -- Need OR + nonCriticalExtension SystemInformationBlockType2-v9e0-IEs OPTIONAL -- Need OP +} + +SystemInformationBlockType2-v9e0-IEs ::= SEQUENCE { + ul-CarrierFreq-v9e0 ARFCN-ValueEUTRA-v9e0 OPTIONAL, -- Cond ul-FreqMax + nonCriticalExtension SEQUENCE {} OPTIONAL -- Need OP +} + +AC-BarringConfig ::= SEQUENCE { + ac-BarringFactor ENUMERATED { + p00, p05, p10, p15, p20, p25, p30, p40, + p50, p60, p70, p75, p80, p85, p90, p95}, + ac-BarringTime ENUMERATED {s4, s8, s16, s32, s64, s128, s256, s512}, + ac-BarringForSpecialAC BIT STRING (SIZE(5)) +} + +MBSFN-SubframeConfigList ::= SEQUENCE (SIZE (1..maxMBSFN-Allocations)) OF MBSFN-SubframeConfig + +-- ASN1STOP + +SystemInformationBlockType2 field descriptions ac-BarringFactor +If the random number drawn by the UE is lower than this value, access is allowed. Otherwise the access is barred. The values are interpreted in the range [0,1]: p00 = 0, p05 = 0.05, p10 = 0.10,…,p95 = 0.95. Values other than p00 can only be set if all bits of the corresponding ac-BarringForSpecialAC are set to 0. ac-BarringForCSFB +Access class barring for mobile originating CS fallback. ac-BarringForEmergency +Access class barring for AC 10. ac-BarringForMO-Data +Access class barring for mobile originating calls. ac-BarringForMO-Signalling +Access class barring for mobile originating signalling. ac-BarringForSpecialAC +Access class barring for AC 11-15. The first/ leftmost bit is for AC 11, the second bit is for AC 12, and so on. ac-BarringTime +Mean access barring time value in seconds. additionalSpectrumEmission +The UE requirements related to IE AdditionalSpectrumEmission are defined in TS 36.101 [42, table 6.2.4.1]. mbsfn-SubframeConfigList +Defines the subframes that are reserved for MBSFN in downlink. multiBandInfoList +A list of additionalSpectrumEmission i.e. one for each additional frequency band included in multiBandInfoList in SystemInformationBlockType1, listed in the same order. ssac-BarringForMMTEL-Video +Service specific access class barring for MMTEL video originating calls. ssac-BarringForMMTEL-Voice +Service specific access class barring for MMTEL voice originating calls. ul-Bandwidth +Parameter: transmission bandwidth configuration, NRB, in uplink, see TS 36.101 [42, table 5.6-1]. Value n6 corresponds to 6 resource blocks, n15 to 15 resource blocks and so on. If for FDD this parameter is absent, the uplink bandwidth is equal to the downlink bandwidth. For TDD this parameter is absent and it is equal to the downlink bandwidth. ul-CarrierFreq +For FDD: If absent, the (default) value determined from the default TX-RX frequency separation defined in TS 36.101 [42, table 5.7.3-1] applies. +For TDD: This parameter is absent and it is equal to the downlink frequency. +Conditional presence Explanation ul-FreqMax The field is mandatory present if ul-CarrierFreq (i.e. without suffix) is present and set to maxEARFCN. Otherwise the field is not present. +– SystemInformationBlockType3 +The IE SystemInformationBlockType3 contains cell re-selection information common for intra-frequency, inter-frequency and/ or inter-RAT cell re-selection (i.e. applicable for more than one type of cell re-selection but not necessarily all) as well as intra-frequency cell re-selection information other than neighbouring cell related. +SystemInformationBlockType3 information element +-- ASN1START + +SystemInformationBlockType3 ::= SEQUENCE { + cellReselectionInfoCommon SEQUENCE { + q-Hyst ENUMERATED { + dB0, dB1, dB2, dB3, dB4, dB5, dB6, dB8, dB10, + dB12, dB14, dB16, dB18, dB20, dB22, dB24}, + speedStateReselectionPars SEQUENCE { + mobilityStateParameters MobilityStateParameters, + q-HystSF SEQUENCE { + sf-Medium ENUMERATED { + dB-6, dB-4, dB-2, dB0}, + sf-High ENUMERATED { + dB-6, dB-4, dB-2, dB0} + } + } OPTIONAL -- Need OP + }, + cellReselectionServingFreqInfo SEQUENCE { + s-NonIntraSearch ReselectionThreshold OPTIONAL, -- Need OP + threshServingLow ReselectionThreshold, + cellReselectionPriority CellReselectionPriority + }, + intraFreqCellReselectionInfo SEQUENCE { + q-RxLevMin Q-RxLevMin, + p-Max P-Max OPTIONAL, -- Need OP + s-IntraSearch ReselectionThreshold OPTIONAL, -- Need OP + allowedMeasBandwidth AllowedMeasBandwidth OPTIONAL, -- Need OP + presenceAntennaPort1 PresenceAntennaPort1, + neighCellConfig NeighCellConfig, + t-ReselectionEUTRA T-Reselection, + t-ReselectionEUTRA-SF SpeedStateScaleFactors OPTIONAL -- Need OP + }, + ..., + lateNonCriticalExtension OCTET STRING OPTIONAL, -- Need OP + [[ s-IntraSearch-v920 SEQUENCE { + s-IntraSearchP-r9 ReselectionThreshold, + s-IntraSearchQ-r9 ReselectionThresholdQ-r9 + } OPTIONAL, -- Need OP + s-NonIntraSearch-v920 SEQUENCE { + s-NonIntraSearchP-r9 ReselectionThreshold, + s-NonIntraSearchQ-r9 ReselectionThresholdQ-r9 + } OPTIONAL, -- Need OP + q-QualMin-r9 Q-QualMin-r9 OPTIONAL, -- Need OP + threshServingLowQ-r9 ReselectionThresholdQ-r9 OPTIONAL -- Need OP + ]] +} + +-- ASN1STOP + +SystemInformationBlockType3 field descriptions allowedMeasBandwidth +If absent, the value corresponding to the downlink bandwidth indicated by the dl-Bandwidth included in MasterInformationBlock applies. cellReselectionInfoCommon +Cell re-selection information common for cells. cellReselectionServingFreqInfo +Information common for Cell re-selection to inter-frequency and inter-RAT cells. intraFreqcellReselectionInfo +Cell re-selection information common for intra-frequency cells. p-Max +Value applicable for the intra-frequency neighbouring E-UTRA cells. If absent the UE applies the maximum power according to the UE capability. q-Hyst +Parameter Qhyst in 36.304 [4], Value in dB. Value dB1 corresponds to 1 dB, dB2 corresponds to 2 dB and so on. q-HystSF +Parameter “Speed dependent ScalingFactor for Qhyst” in TS 36.304 [4]. The sf-Medium and sf-High concern the additional hysteresis to be applied, in Medium and High Mobility state respectively, to Qhyst as defined in TS 36.304 [4]. In dB. Value dB-6 corresponds to -6dB, dB-4 corresponds to -4dB and so on. q-QualMin +Parameter “Qqualmin” in TS 36.304 [4], applicable for intra-frequency neighrbour cells. If the field is not present, the UE applies the (default) value of negative infinity for Qqualmin. q-RxLevMin +Parameter “Qrxlevmin” in TS 36.304 [4], applicable for intra-frequency neighbour cells. s-IntraSearch +Parameter “SIntraSearchP” in TS 36.304 [4]. If the field s-IntraSearchP is present, the UE applies the value of s-IntraSearchP instead. Otherwise if neither s-IntraSearch nor s-IntraSearchP is present, the UE applies the (default) value of infinity for SIntraSearchP. s-IntraSearchP +Parameter “SIntraSearchP” in TS 36.304 [4]. See descriptions under s-IntraSearch. s-IntraSearchQ +Parameter “SIntraSearchQ” in TS 36.304 [4]. If the field is not present, the UE applies the (default) value of 0 dB for SIntraSearchQ. s-NonIntraSearch +Parameter “SnonIntraSearchP” in TS 36.304 [4]. If the field s-NonIntraSearchP is present, the UE applies the value of s-NonIntraSearchP instead. Otherwise if neither s-NonIntraSearch nor s-NonIntraSearchP is present, the UE applies the (default) value of infinity for SnonIntraSearchP. s-NonIntraSearchP +Parameter “SnonIntraSearchP” in TS 36.304 [4]. See descriptions under s-NonIntraSearch. s-NonIntraSearchQ +Parameter “SnonIntraSearchQ” in TS 36.304 [4]. If the field is not present, the UE applies the (default) value of 0 dB for SnonIntraSearchQ. speedStateReselectionPars +Speed dependent reselection parameters, see TS 36.304 [4]. If this field is absent, i.e, mobilityStateParameters is also not present, UE behaviour is specified in TS 36.304 [4]. threshServingLow +Parameter “ThreshServing, LowP” in TS 36.304 [4]. threshServingLowQ +Parameter “ThreshServing, LowQ” in TS 36.304 [4]. t-ReselectionEUTRA +Parameter “TreselectionEUTRA” in TS 36.304 [4]. t-ReselectionEUTRA-SF +Parameter “Speed dependent ScalingFactor for TreselectionEUTRA” in TS 36.304 [4]. If the field is not present, the UE behaviour is specified in TS 36.304 [4]. +– SystemInformationBlockType4 +The IE SystemInformationBlockType4 contains neighbouring cell related information relevant only for intra-frequency cell re-selection. The IE includes cells with specific re-selection parameters as well as blacklisted cells. +SystemInformationBlockType4 information element +-- ASN1START + +SystemInformationBlockType4 ::= SEQUENCE { + intraFreqNeighCellList IntraFreqNeighCellList OPTIONAL, -- Need OR + intraFreqBlackCellList IntraFreqBlackCellList OPTIONAL, -- Need OR + csg-PhysCellIdRange PhysCellIdRange OPTIONAL, -- Cond CSG + ..., + lateNonCriticalExtension OCTET STRING OPTIONAL -- Need OP +} + +IntraFreqNeighCellList ::= SEQUENCE (SIZE (1..maxCellIntra)) OF IntraFreqNeighCellInfo + +IntraFreqNeighCellInfo ::= SEQUENCE { + physCellId PhysCellId, + q-OffsetCell Q-OffsetRange, + ... +} + +IntraFreqBlackCellList ::= SEQUENCE (SIZE (1..maxCellBlack)) OF PhysCellIdRange + +-- ASN1STOP + +SystemInformationBlockType4 field descriptions csg-PhysCellIdRange +Set of physical cell identities reserved for CSG cells on the frequency on which this field was received. The received csg-PhysCellIdRange applies if less than 24 hours has elapsed since it was received and the UE is camped on a cell of the same primary PLMN where this field was received. The 3 hour validity restriction (section 5.2.1.3) does not apply to this field. The UE shall not apply any stored csg-PhysCellIdRange when it is in any cell selection state defined in TS 36.304 [4]. intraFreqBlackCellList +List of blacklisted intra-frequency neighbouring cells. intraFreqNeighbCellList +List of intra-frequency neighbouring cells with specific cell re-selection parameters. q-OffsetCell +Parameter “Qoffsets,n” in TS 36.304 [4]. +Conditional presence Explanation CSG This field is optional, need OP, for non-CSG cells, and mandatory for CSG cells. +– SystemInformationBlockType5 +The IE SystemInformationBlockType5 contains information relevant only for inter-frequency cell re-selection i.e. information about other EUTRA frequencies and inter-frequency neighbouring cells relevant for cell re-selection. The IE includes cell re-selection parameters common for a frequency as well as cell specific re-selection parameters. +SystemInformationBlockType5 information element +-- ASN1START + +SystemInformationBlockType5 ::= SEQUENCE { + interFreqCarrierFreqList InterFreqCarrierFreqList, + ..., + lateNonCriticalExtension OCTET STRING (CONTAINING SystemInformationBlockType5-v8h0-IEs) OPTIONAL -- Need OP +} + +SystemInformationBlockType5-v8h0-IEs ::= SEQUENCE { + interFreqCarrierFreqList-v8h0 SEQUENCE (SIZE (1..maxFreq)) OF InterFreqCarrierFreqInfo-v8h0 OPTIONAL, -- Need OP + nonCriticalExtension SystemInformationBlockType5-v9e0-IEs OPTIONAL -- Need OP +} + +SystemInformationBlockType5-v9e0-IEs ::= SEQUENCE { + interFreqCarrierFreqList-v9e0 SEQUENCE (SIZE (1..maxFreq)) OF InterFreqCarrierFreqInfo-v9e0 OPTIONAL, -- Need OR + nonCriticalExtension SEQUENCE {} OPTIONAL -- Need OP +} + +InterFreqCarrierFreqList ::= SEQUENCE (SIZE (1..maxFreq)) OF InterFreqCarrierFreqInfo + +InterFreqCarrierFreqInfo ::= SEQUENCE { + dl-CarrierFreq ARFCN-ValueEUTRA, + q-RxLevMin Q-RxLevMin, + p-Max P-Max OPTIONAL, -- Need OP + t-ReselectionEUTRA T-Reselection, + t-ReselectionEUTRA-SF SpeedStateScaleFactors OPTIONAL, -- Need OP + threshX-High ReselectionThreshold, + threshX-Low ReselectionThreshold, + allowedMeasBandwidth AllowedMeasBandwidth, + presenceAntennaPort1 PresenceAntennaPort1, + cellReselectionPriority CellReselectionPriority OPTIONAL, -- Need OP + neighCellConfig NeighCellConfig, + q-OffsetFreq Q-OffsetRange DEFAULT dB0, + interFreqNeighCellList InterFreqNeighCellList OPTIONAL, -- Need OR + interFreqBlackCellList InterFreqBlackCellList OPTIONAL, -- Need OR + ..., + [[ q-QualMin-r9 Q-QualMin-r9 OPTIONAL, -- Need OP + threshX-Q-r9 SEQUENCE { + threshX-HighQ-r9 ReselectionThresholdQ-r9, + threshX-LowQ-r9 ReselectionThresholdQ-r9 + } OPTIONAL -- Cond RSRQ + ]] +} + +InterFreqCarrierFreqInfo-v8h0 ::= SEQUENCE { + multiBandInfoList MultiBandInfoList OPTIONAL -- Need OR +} + +InterFreqCarrierFreqInfo-v9e0 ::= SEQUENCE { + dl-CarrierFreq-v9e0 ARFCN-ValueEUTRA-v9e0 OPTIONAL, -- Cond dl-FreqMax + multiBandInfoList-v9e0 MultiBandInfoList-v9e0 OPTIONAL -- Need OR +} + +InterFreqNeighCellList ::= SEQUENCE (SIZE (1..maxCellInter)) OF InterFreqNeighCellInfo + +InterFreqNeighCellInfo ::= SEQUENCE { + physCellId PhysCellId, + q-OffsetCell Q-OffsetRange +} + +InterFreqBlackCellList ::= SEQUENCE (SIZE (1..maxCellBlack)) OF PhysCellIdRange + +-- ASN1STOP + +SystemInformationBlockType5 field descriptions interFreqBlackCellList +List of blacklisted inter-frequency neighbouring cells. interFreqCarrierFreqList +List of neighbouring inter-frequencies. E-UTRAN does not configure more than one entry for the same physical frequency regardless of the E-ARFCN used to indicate this. If E-UTRAN includes interFreqCarrierFreqList-v8h0 and/ or interFreqCarrierFreqList-v9e0 it includes the same number of entries, and listed in the same order, as in interFreqCarrierFreqList (i.e. without suffix). See Annex D for more descriptions. interFreqNeighCellList +List of inter-frequency neighbouring cells with specific cell re-selection parameters. multiBandInfoList +Indicates the list of frequency bands in addition to the band represented by dl-CarrierFreq for which cell reselection parameters are common. E-UTRAN indicates at most maxMultiBands frequency bands (i.e. the total number of entries across both multiBandInfoList and multiBandInfoList-v9e0 is below this limit). p-Max +Value applicable for the neighbouring E-UTRA cells on this carrier frequency. If absent the UE applies the maximum power according to the UE capability. q-OffsetCell +Parameter “Qoffsets,n” in TS 36.304 [4]. q-OffsetFreq +Parameter “Qoffsetfrequency” in TS 36.304 [4]. q-QualMin +Parameter “Qqualmin” in TS 36.304 [4]. If the field is not present, the UE applies the (default) value of negative infinity for Qqualmin. threshX-High +Parameter “ThreshX, HighP” in TS 36.304 [4]. threshX-HighQ +Parameter “ThreshX, HighQ” in TS 36.304 [4]. threshX-Low +Parameter “ThreshX, LowP” in TS 36.304 [4]. threshX-LowQ +Parameter “ThreshX, LowQ” in TS 36.304 [4]. t-ReselectionEUTRA +Parameter “TreselectionEUTRA” in TS 36.304 [4]. t-ReselectionEUTRA-SF +Parameter “Speed dependent ScalingFactor for TreselectionEUTRA” in TS 36.304 [4]. If the field is not present, the UE behaviour is specified in TS 36.304 [4]. +Conditional presence Explanation dl-FreqMax The field is mandatory present if, for the corresponding entry in InterFreqCarrierFreqList (i.e. without suffix), dl-CarrierFreq (i.e. without suffix) is set to maxEARFCN. Otherwise the field is not present. RSRQ The field is mandatory present if threshServingLowQ is present in systemInformationBlockType3; otherwise it is not present. +– SystemInformationBlockType6 +The IE SystemInformationBlockType6 contains information relevant only for inter-RAT cell re-selection i.e. information about UTRA frequencies and UTRA neighbouring cells relevant for cell re-selection. The IE includes cell re-selection parameters common for a frequency. +SystemInformationBlockType6 information element +-- ASN1START + +SystemInformationBlockType6 ::= SEQUENCE { + carrierFreqListUTRA-FDD CarrierFreqListUTRA-FDD OPTIONAL, -- Need OR + carrierFreqListUTRA-TDD CarrierFreqListUTRA-TDD OPTIONAL, -- Need OR + t-ReselectionUTRA T-Reselection, + t-ReselectionUTRA-SF SpeedStateScaleFactors OPTIONAL, -- Need OP + ..., + lateNonCriticalExtension OCTET STRING (CONTAINING SystemInformationBlockType6-v8h0-IEs) OPTIONAL -- Need OP +} + +SystemInformationBlockType6-v8h0-IEs ::= SEQUENCE { + carrierFreqListUTRA-FDD-v8h0 SEQUENCE (SIZE (1..maxUTRA-FDD-Carrier)) OF CarrierFreqInfoUTRA-FDD-v8h0 OPTIONAL, -- Need OR + nonCriticalExtension SEQUENCE {} OPTIONAL -- Need OP +} + +CarrierFreqListUTRA-FDD ::= SEQUENCE (SIZE (1..maxUTRA-FDD-Carrier)) OF CarrierFreqUTRA-FDD + +CarrierFreqUTRA-FDD ::= SEQUENCE { + carrierFreq ARFCN-ValueUTRA, + cellReselectionPriority CellReselectionPriority OPTIONAL, -- Need OP + threshX-High ReselectionThreshold, + threshX-Low ReselectionThreshold, + q-RxLevMin INTEGER (-60..-13), + p-MaxUTRA INTEGER (-50..33), + q-QualMin INTEGER (-24..0), + ..., + [[ threshX-Q-r9 SEQUENCE { + threshX-HighQ-r9 ReselectionThresholdQ-r9, + threshX-LowQ-r9 ReselectionThresholdQ-r9 + } OPTIONAL -- Cond RSRQ + ]] +} + +CarrierFreqInfoUTRA-FDD-v8h0 ::= SEQUENCE { + multiBandInfoList SEQUENCE (SIZE (1..maxMultiBands)) OF FreqBandIndicator-UTRA-FDD OPTIONAL -- Need OR +} + +CarrierFreqListUTRA-TDD ::= SEQUENCE (SIZE (1..maxUTRA-TDD-Carrier)) OF CarrierFreqUTRA-TDD + +CarrierFreqUTRA-TDD ::= SEQUENCE { + carrierFreq ARFCN-ValueUTRA, + cellReselectionPriority CellReselectionPriority OPTIONAL, -- Need OP + threshX-High ReselectionThreshold, + threshX-Low ReselectionThreshold, + q-RxLevMin INTEGER (-60..-13), + p-MaxUTRA INTEGER (-50..33), + ... +} + +FreqBandIndicator-UTRA-FDD ::= INTEGER (1..86) + +-- ASN1STOP + +SystemInformationBlockType6 field descriptions carrierFreqListUTRA-FDD +List of carrier frequencies of UTRA FDD. E-UTRAN does not configure more than one entry for the same physical frequency regardless of the ARFCN used to indicate this. If E-UTRAN includes carrierFreqListUTRA-FDD-v8h0 it includes the same number of entries, and listed in the same order, as in carrierFreqListUTRA-FDD (i.e. without suffix). See Annex D for more descriptions. carrierFreqListUTRA-TDD +List of carrier frequencies of UTRA TDD. E-UTRAN does not configure more than one entry for the same physical frequency regardless of the ARFCN used to indicate this. multiBandInfoList +Indicates the list of frequency bands in addition to the band represented by carrierFreq in the CarrierFreqUTRA-FDD for which UTRA cell reselection parameters are common p-MaxUTRA +The maximum allowed transmission power on the (uplink) carrier frequency, see TS 25.304 [40]. In dBm q-QualMin +Parameter “Qqualmin” in TS 25.304 [40]. Actual value = IE value [dB]. q-RxLevMin +Parameter “Qrxlevmin” in TS 25.304 [40]. Actual value = IE value * 2+1 [dBm]. t-ReselectionUTRA +Parameter “TreselectionUTRAN” in TS 36.304 [4]. t-ReselectionUTRA-SF +Parameter “Speed dependent ScalingFactor for TreselectionUTRA” in TS 36.304 [4]. If the field is not present, the UE behaviour is specified in TS 36.304 [4]. threshX-High +Parameter “ThreshX, HighP” in TS 36.304 [4]. threshX-HighQ +Parameter “ThreshX, HighQ” in TS 36.304 [4]. threshX-Low + Parameter “ThreshX, LowP” in TS 36.304 [4]. threshX-LowQ + Parameter “ThreshX, LowQ” in TS 36.304 [4]. +Conditional presence Explanation RSRQ The field is mandatory present if the threshServingLowQ is present in systemInformationBlockType3; otherwise it is not present. +– SystemInformationBlockType7 +The IE SystemInformationBlockType7 contains information relevant only for inter-RAT cell re-selection i.e. information about GERAN frequencies relevant for cell re-selection. The IE includes cell re-selection parameters for each frequency. +SystemInformationBlockType7 information element +-- ASN1START + +SystemInformationBlockType7 ::= SEQUENCE { + t-ReselectionGERAN T-Reselection, + t-ReselectionGERAN-SF SpeedStateScaleFactors OPTIONAL, -- Need OR + carrierFreqsInfoList CarrierFreqsInfoListGERAN OPTIONAL, -- Need OR + ..., + lateNonCriticalExtension OCTET STRING OPTIONAL -- Need OP +} + +CarrierFreqsInfoListGERAN ::= SEQUENCE (SIZE (1..maxGNFG)) OF CarrierFreqsInfoGERAN + +CarrierFreqsInfoGERAN ::= SEQUENCE { + carrierFreqs CarrierFreqsGERAN, + commonInfo SEQUENCE { + cellReselectionPriority CellReselectionPriority OPTIONAL, -- Need OP + ncc-Permitted BIT STRING (SIZE (8)), + q-RxLevMin INTEGER (0..45), + p-MaxGERAN INTEGER (0..39) OPTIONAL, -- Need OP + threshX-High ReselectionThreshold, + threshX-Low ReselectionThreshold + }, + ... +} + +-- ASN1STOP + +SystemInformationBlockType7 field descriptions carrierFreqs +The list of GERAN carrier frequencies organised into one group of GERAN carrier frequencies. carrierFreqsInfoList +Provides a list of neighbouring GERAN carrier frequencies, which may be monitored for neighbouring GERAN cells. The GERAN carrier frequencies are organised in groups and the cell reselection parameters are provided per group of GERAN carrier frequencies. commonInfo +Defines the set of cell reselection parameters for the group of GERAN carrier frequencies. ncc-Permitted +Field encoded as a bit map, where bit N is set to "0" if a BCCH carrier with NCC = N-1 is not permitted for monitoring and set to "1" if the BCCH carrier with NCC = N-1 is permitted for monitoring; N = 1 to 8; bit 1 of the bitmap is the leading bit of the bit string. p-MaxGERAN +Maximum allowed transmission power for GERAN on an uplink carrier frequency, see TS 45.008 [28]. Value in dBm. Applicable for the neighbouring GERAN cells on this carrier frequency. If pmaxGERAN is absent, the maximum power according to the UE capability is used. q-RxLevMin +Parameter “Qrxlevmin” in TS 36.304 [1], minimum required RX level in the GSM cell. The actual value of Qrxlevmin in dBm = (IE value * 2) ? 115. threshX-High +Parameter “ThreshX, HighP” in TS 36.304 [4]. threshX-Low +Parameter “ThreshX, LowP” in TS 36.304 [4]. t-ReselectionGERAN +Parameter “TreselectionGERAN” in TS 36.304 [4]. t-ReselectionGERAN-SF +Parameter “Speed dependent ScalingFactor for TreselectionGERAN” in TS 36.304 [4]. If the field is not present, the UE behaviour is specified in TS 36.304 [4]. +– SystemInformationBlockType8 +The IE SystemInformationBlockType8 contains information relevant only for inter-RAT cell re-selection i.e. information about CDMA2000 frequencies and CDMA2000 neighbouring cells relevant for cell re-selection. The IE includes cell re-selection parameters common for a frequency as well as cell specific re-selection parameters. +SystemInformationBlockType8 information element +-- ASN1START + +SystemInformationBlockType8 ::= SEQUENCE { + systemTimeInfo SystemTimeInfoCDMA2000 OPTIONAL, -- Need OR + searchWindowSize INTEGER (0..15) OPTIONAL, -- Need OR + parametersHRPD SEQUENCE { + preRegistrationInfoHRPD PreRegistrationInfoHRPD, + cellReselectionParametersHRPD CellReselectionParametersCDMA2000 OPTIONAL -- Need OR + } OPTIONAL, -- Need OR + parameters1XRTT SEQUENCE { + csfb-RegistrationParam1XRTT CSFB-RegistrationParam1XRTT OPTIONAL, -- Need OP + longCodeState1XRTT BIT STRING (SIZE (42)) OPTIONAL, -- Need OR + cellReselectionParameters1XRTT CellReselectionParametersCDMA2000 OPTIONAL -- Need OR + } OPTIONAL, -- Need OR + ..., + lateNonCriticalExtension OCTET STRING OPTIONAL, -- Need OP + [[ csfb-SupportForDualRxUEs-r9 BOOLEAN OPTIONAL, -- Need OR + cellReselectionParametersHRPD-v920 CellReselectionParametersCDMA2000-v920 OPTIONAL, -- Cond NCL-HRPD + cellReselectionParameters1XRTT-v920 CellReselectionParametersCDMA2000-v920 OPTIONAL, -- Cond NCL-1XRTT + csfb-RegistrationParam1XRTT-v920 CSFB-RegistrationParam1XRTT-v920 OPTIONAL, -- Cond REG-1XRTT + ac-BarringConfig1XRTT-r9 AC-BarringConfig1XRTT-r9 OPTIONAL -- Cond REG-1XRTT + ]], + [[ csfb-DualRxTxSupport-r10 ENUMERATED {true} OPTIONAL -- Cond REG-1XRTT + ]] +} + +CellReselectionParametersCDMA2000 ::= SEQUENCE { + bandClassList BandClassListCDMA2000, + neighCellList NeighCellListCDMA2000, + t-ReselectionCDMA2000 T-Reselection, + t-ReselectionCDMA2000-SF SpeedStateScaleFactors OPTIONAL -- Need OP +} + +CellReselectionParametersCDMA2000-v920 ::= SEQUENCE { + neighCellList-v920 NeighCellListCDMA2000-v920 +} + +NeighCellListCDMA2000 ::= SEQUENCE (SIZE (1..16)) OF NeighCellCDMA2000 + +NeighCellCDMA2000 ::= SEQUENCE { + bandClass BandclassCDMA2000, + neighCellsPerFreqList NeighCellsPerBandclassListCDMA2000 +} + +NeighCellsPerBandclassListCDMA2000 ::= SEQUENCE (SIZE (1..16)) OF NeighCellsPerBandclassCDMA2000 + +NeighCellsPerBandclassCDMA2000 ::= SEQUENCE { + arfcn ARFCN-ValueCDMA2000, + physCellIdList PhysCellIdListCDMA2000 +} + +NeighCellListCDMA2000-v920 ::= SEQUENCE (SIZE (1..16)) OF NeighCellCDMA2000-v920 + +NeighCellCDMA2000-v920 ::= SEQUENCE { + neighCellsPerFreqList-v920 NeighCellsPerBandclassListCDMA2000-v920 +} + +NeighCellsPerBandclassListCDMA2000-v920 ::= SEQUENCE (SIZE (1..16)) OF NeighCellsPerBandclassCDMA2000-v920 + +NeighCellsPerBandclassCDMA2000-v920 ::= SEQUENCE { + physCellIdList-v920 PhysCellIdListCDMA2000-v920 +} + +PhysCellIdListCDMA2000 ::= SEQUENCE (SIZE (1..16)) OF PhysCellIdCDMA2000 + +PhysCellIdListCDMA2000-v920 ::= SEQUENCE (SIZE (0..24)) OF PhysCellIdCDMA2000 + +BandClassListCDMA2000 ::= SEQUENCE (SIZE (1..maxCDMA-BandClass)) OF BandClassInfoCDMA2000 + +BandClassInfoCDMA2000 ::= SEQUENCE { + bandClass BandclassCDMA2000, + cellReselectionPriority CellReselectionPriority OPTIONAL, -- Need OP + threshX-High INTEGER (0..63), + threshX-Low INTEGER (0..63), + ... +} + +AC-BarringConfig1XRTT-r9 ::= SEQUENCE { + ac-Barring0to9-r9 INTEGER (0..63), + ac-Barring10-r9 INTEGER (0..7), + ac-Barring11-r9 INTEGER (0..7), + ac-Barring12-r9 INTEGER (0..7), + ac-Barring13-r9 INTEGER (0..7), + ac-Barring14-r9 INTEGER (0..7), + ac-Barring15-r9 INTEGER (0..7), + ac-BarringMsg-r9 INTEGER (0..7), + ac-BarringReg-r9 INTEGER (0..7), + ac-BarringEmg-r9 INTEGER (0..7) +} + +-- ASN1STOP + +SystemInformationBlockType8 field descriptions ac-BarringConfig1XRTT +Contains the access class barring parameters the UE uses to calculate the access class barring factor, see C.S0097 [53]. ac-Barring0to9 +Parameter used for calculating the access class barring factor for access overload classes 0 through 9. It is the parameter “PSIST” in C.S0004-A [34] for access overload classes 0 through 9. ac-BarringEmg +Parameter used for calculating the access class barring factor for emergency calls and emergency message transmissions for access overload classes 0 through 9. It is the parameter “PSIST_EMG” in C.S0004-A [34]. ac-BarringMsg +Parameter used for modifying the access class barring factor for message transmissions. It is the parameter “MSG_PSIST” in C.S0004-A [34]. ac-BarringN +Parameter used for calculating the access class barring factor for access overload class N (N = 10 to 15). It is the parameter “PSIST” in C.S0004-A [34] for access overload class N. ac-BarringReg +Parameter used for modifying the access class barring factor for autonomous registrations. It is the parameter “REG_PSIST” in C.S0004-A [34]. bandClass +Identifies the Frequency Band in which the Carrier can be found. Details can be found in C.S0057-E [24, Table 1.5]. bandClassList +List of CDMA2000 frequency bands. cellReselectionParameters1XRTT +Cell reselection parameters applicable only to CDMA2000 1xRTT system. cellReselectionParameters1XRTT-v920 +Cell reselection parameters applicable for cell reselection to CDMA2000 1XRTT system. The field is not present if cellReselectionParameters1XRTT is not present; otherwise it is optionally present. cellReselectionParametersHRPD +Cell reselection parameters applicable for cell reselection to CDMA2000 HRPD system cellReselectionParametersHRPD-v920 +Cell reselection parameters applicable for cell reselection to CDMA2000 HRPD system. The field is not present if cellReselectionParametersHRPD is not present; otherwise it is optionally present. csfb-DualRxTxSupport +Value TRUE indicates that the network supports dual Rx/Tx enhanced 1xCSFB, which enables UEs capable of dual Rx/Tx enhanced 1xCSFB to switch off their 1xRTT receiver/transmitter while camped in E-UTRAN [51]. csfb-RegistrationParam1XRTT +Contains the parameters the UE will use to determine if it should perform a CDMA2000 1xRTT Registration/Re-Registration. This field is included if either CSFB or enhanced CS fallback to CDMA2000 1xRTT is supported. csfb-SupportForDualRxUEs +Value TRUE indicates that the network supports dual Rx CSFB [51]. longCodeState1XRTT +The state of long code generation registers in CDMA2000 1XRTT system as defined in C.S0002-A [12, Section 1.3] at ms, where t equals to the cdma-SystemTime. This field is required for SRVCC handover and enhanced CS fallback to CDMA2000 1xRTT operation. Otherwise this IE is not needed. This field is excluded when estimating changes in system information, i.e. changes of longCodeState1XRTT should neither result in system information change notifications nor in a modification of systemInfoValueTag in SIB1. neighCellList +List of CDMA2000 neighbouring cells. The total number of neighbouring cells in neighCellList for each RAT (1XRTT or HRPD) is limited to 32. neighCellList-v920 +Extended List of CDMA2000 neighbouring cells. The combined total number of CDMA2000 neighbouring cells in both neighCellList and neighCellList-v920 is limited to 32 for HRPD and 40 for 1xRTT. neighCellsPerFreqList +List of carrier frequencies and neighbour cell ids in each frequency within a CDMA2000 Band, see C.S0002-A [12] or C.S0024-A [26]. neighCellsPerFreqList-v920 +Extended list of neighbour cell ids, in the same CDMA2000 Frequency Band as the corresponding instance in “NeighCellListCDMA2000”. parameters1XRTT +Parameters applicable for interworking with CDMA2000 1XRTT system. parametersHRPD +Parameters applicable only for interworking with CDMA2000 HRPD systems. physCellIdList +Identifies the list of CDMA2000 cell ids, see C.S0002-A [12] or C.S0024-A [26]. physCellIdList-v920 +Extended list of CDMA2000 cell ids, in the same CDMA2000 ARFCN as the corresponding instance in “NeighCellsPerBandclassCDMA2000”. preRegistrationInfoHRPD +The CDMA2000 HRPD Pre-Registration Information tells the UE if it should pre-register with the CDMA2000 HRPD network and identifies the Pre-registration zone to the UE. searchWindowSize +The search window size is a CDMA2000 parameter to be used to assist in searching for the neighbouring pilots. For values see C.S0005-A [25, Table 2.6.6.2.1-1] and C.S0024-A [26, Table 8.7.6.2-4]. This field is required for a UE with rx-ConfigHRPD= single and/ or rx-Config1XRTT= single to perform handover, cell re-selection, UE measurement based redirection and enhanced 1xRTT CS fallback from E-UTRAN to CDMA2000 according to this specification and TS 36.304 [4]. systemTimeInfo +Information on CDMA2000 system time. This field is required for a UE with rx-ConfigHRPD= single and/ or rx-Config1XRTT= single to perform handover, cell re-selection, UE measurement based redirection and enhanced 1xRTT CS fallback from E-UTRAN to CDMA2000 according to this specification and TS 36.304 [4]. This field is excluded when estimating changes in system information, i.e. changes of systemTimeInfo should neither result in system information change notifications nor in a modification of systemInfoValueTag in SIB1. threshX-High +Parameter “ThreshX, HighP” in TS 36.304 [4]. This specifies the high threshold used in reselection towards this CDMA2000 band class expressed as an unsigned binary number equal to FLOOR (-2 x 10 x log10 Ec/Io) in units of 0.5 dB, as defined in C.S0005-A [25]. threshX-Low +Parameter “ThreshX, LowP” in TS 36.304 [4]. This specifies the low threshold used in reselection towards this CDMA2000 band class expressed as an unsigned binary number equal to FLOOR (-2 x 10 x log10 Ec/Io) in units of 0.5 dB, as defined in C.S0005-A [25]. t-ReselectionCDMA2000 +Parameter “TreselectionCDMA_HRPD” or “TreselectionCDMA_1xRTT” in TS 36.304 [4]. t-ReselectionCDMA2000-SF +Parameter “Speed dependent ScalingFactor for TreselectionCDMA-HRPD” or TreselectionCDMA-1xRTT” in TS 36.304 [4]. If the field is not present, the UE behaviour is specified in TS 36.304 [4]. +Conditional presence Explanation NCL-1XRTT The field is optional present, need OR, if cellReselectionParameters1xRTT is present; otherwise it is not present. NCL-HRPD The field is optional present, need OR, if cellReselectionParametersHRPD is present; otherwise it is not present. REG-1XRTT The field is optional present, need OR, if csfb-RegistrationParam1XRTT is present; otherwise it is not present. +– SystemInformationBlockType9 +The IE SystemInformationBlockType9 contains a home eNB name (HNB Name). +SystemInformationBlockType9 information element +-- ASN1START + +SystemInformationBlockType9 ::= SEQUENCE { + hnb-Name OCTET STRING (SIZE(1..48)) OPTIONAL, -- Need OR + ..., + lateNonCriticalExtension OCTET STRING OPTIONAL -- Need OP +} + +-- ASN1STOP + +SystemInformationBlockType9 field descriptions hnb-Name +Carries the name of the home eNB, coded in UTF-8 with variable number of bytes per character, see TS 22.011 [10]. +– SystemInformationBlockType10 +The IE SystemInformationBlockType10 contains an ETWS primary notification. +SystemInformationBlockType10 information element +-- ASN1START + +SystemInformationBlockType10 ::= SEQUENCE { + messageIdentifier BIT STRING (SIZE (16)), + serialNumber BIT STRING (SIZE (16)), + warningType OCTET STRING (SIZE (2)), + dummy OCTET STRING (SIZE (50)) OPTIONAL, -- Need OP + ..., + lateNonCriticalExtension OCTET STRING OPTIONAL -- Need OP +} + +-- ASN1STOP + +SystemInformationBlockType10 field descriptions messageIdentifier +Identifies the source and type of ETWS notification. The leading bit (which is equivalent to the leading bit of the equivalent IE defined in TS 36.413 [39, 9.2.1.44]) contains bit 7 of the first octet of the equivalent IE, defined in and encoded according to TS 23.041 [37, 9.4.1.2.2], while the trailing bit contains bit 0 of the second octet of the same equivalent IE. serialNumber +Identifies variations of an ETWS notification. The leading bit (which is equivalent to the leading bit of the equivalent IE defined in TS 36.413 [39, 9.2.1.45]) contains bit 7 of the first octet of the equivalent IE, defined in and encoded according to TS 23.041 [37, 9.4.1.2.1], while the trailing bit contains bit 0 of the second octet of the same equivalent IE. dummy +This field is not used in the specification. If received it should be ignored by the UE. warningType +Identifies the warning type of the ETWS primary notification and provides information on emergency user alert and UE popup. The first octet (which is equivalent to the first octet of the equivalent IE defined in TS 36.413 [39, 9.2.1.50]) contains the first octet of the equivalent IE defined in and encoded according to TS 23.041 [37, 9.3.24], and so on. + +– SystemInformationBlockType11 +The IE SystemInformationBlockType11 contains an ETWS secondary notification. +SystemInformationBlockType11 information element +-- ASN1START + +SystemInformationBlockType11 ::= SEQUENCE { + messageIdentifier BIT STRING (SIZE (16)), + serialNumber BIT STRING (SIZE (16)), + warningMessageSegmentType ENUMERATED {notLastSegment, lastSegment}, + warningMessageSegmentNumber INTEGER (0..63), + warningMessageSegment OCTET STRING, + dataCodingScheme OCTET STRING (SIZE (1)) OPTIONAL, -- Cond Segment1 + ..., + lateNonCriticalExtension OCTET STRING OPTIONAL -- Need OP +} + +-- ASN1STOP + +SystemInformationBlockType11 field descriptions dataCodingScheme +Identifies the alphabet/coding and the language applied variations of an ETWS notification. The octet (which is equivalent to the octet of the equivalent IE defined in TS 36.413 [39, 9.2.1.52]) contains the octet of the equivalent IE defined in TS 23.041 [37, 9.4.2.2.4] and encoded according to TS 23.038 [38]. messageIdentifier +Identifies the source and type of ETWS notification. The leading bit (which is equivalent to the leading bit of the equivalent IE defined in TS 36.413 [39, 9.2.1.44]) contains bit 7 of the first octet of the equivalent IE, defined in and encoded according to TS 23.041 [37, 9.4.1.2.2], while the trailing bit contains bit 0 of second octet of the same equivalent IE. serialNumber +Identifies variations of an ETWS notification. The leading bit (which is equivalent to the leading bit of the equivalent IE defined in TS 36.413 [39, 9.2.1.45]) contains bit 7 of the first octet of the equivalent IE, defined in and encoded according to TS 23.041 [37, 9.4.1.2.1], while the trailing bit contains bit 0 of second octet of the same equivalent IE. warningMessageSegment +Carries a segment of the Warning Message Contents IE defined in TS 36.413 [39, 9.2.1.53]. The first octet of the Warning Message Contents IE is equivalent to the first octet of the CB data IE defined in and encoded according to TS 23.041 [37, 9.4.2.2.5] and so on. warningMessageSegmentNumber +Segment number of the ETWS warning message segment contained in the SIB. A segment number of zero corresponds to the first segment, one corresponds to the second segment, and so on. warningMessageSegmentType +Indicates whether the included ETWS warning message segment is the last segment or not. +Conditional presence Explanation Segment1 The field is mandatory present in the first segment of SIB11, otherwise it is not present. +– SystemInformationBlockType12 +The IE SystemInformationBlockType12 contains a CMAS notification. +SystemInformationBlockType12 information element +-- ASN1START + +SystemInformationBlockType12-r9 ::= SEQUENCE { + messageIdentifier-r9 BIT STRING (SIZE (16)), + serialNumber-r9 BIT STRING (SIZE (16)), + warningMessageSegmentType-r9 ENUMERATED {notLastSegment, lastSegment}, + warningMessageSegmentNumber-r9 INTEGER (0..63), + warningMessageSegment-r9 OCTET STRING, + dataCodingScheme-r9 OCTET STRING (SIZE (1)) OPTIONAL, -- Cond Segment1 + lateNonCriticalExtension OCTET STRING OPTIONAL, -- Need OP + ... +} + +-- ASN1STOP + +SystemInformationBlockType12 field descriptions dataCodingScheme +Identifies the alphabet/coding and the language applied variations of a CMAS notification. The octet (which is equivalent to the octet of the equivalent IE defined in TS 36.413 [39, 9.2.1.52]) contains the octet of the equivalent IE defined in TS 23.041 [37, 9.4.2.2.4] and encoded according to TS 23.038 [38]. messageIdentifier +Identifies the source and type of CMAS notification. The leading bit (which is equivalent to the leading bit of the equivalent IE defined in TS 36.413 [39, 9.2.1.44]) contains bit 7 of the first octet of the equivalent IE, defined in and encoded according to TS 23.041 [37, 9.4.1.2.2], while the trailing bit contains bit 0 of second octet of the same equivalent IE. serialNumber +Identifies variations of a CMAS notification. The leading bit (which is equivalent to the leading bit of the equivalent IE defined in TS 36.413 [39, 9.2.1.45]) contains bit 7 of the first octet of the equivalent IE, defined in and encoded according to TS 23.041 [37, 9.4.1.2.1], while the trailing bit contains bit 0 of second octet of the same equivalent IE. warningMessageSegment +Carries a segment of the Warning Message Contents IE defined in TS 36.413 [39]. The first octet of the Warning Message Contents IE is equivalent to the first octet of the CB data IE defined in and encoded according to TS 23.041 [37, 9.4.2.2.5] and so on. warningMessageSegmentNumber +Segment number of the CMAS warning message segment contained in the SIB. A segment number of zero corresponds to the first segment, one corresponds to the second segment, and so on. warningMessageSegmentType +Indicates whether the included CMAS warning message segment is the last segment or not. +Conditional presence Explanation Segment1 The field is mandatory present in the first segment of SIB12, otherwise it is not present. +– SystemInformationBlockType13 +The IE SystemInformationBlockType13 contains the information required to acquire the MBMS control information associated with one or more MBSFN areas. +SystemInformationBlockType13 information element +-- ASN1START + +SystemInformationBlockType13-r9 ::= SEQUENCE { + mbsfn-AreaInfoList-r9 MBSFN-AreaInfoList-r9, + notificationConfig-r9 MBMS-NotificationConfig-r9, + lateNonCriticalExtension OCTET STRING OPTIONAL, -- Need OP + ... +} + +-- ASN1STOP + +6.3.2 Radio resource control information elements +– AntennaInfo +The IE AntennaInfoCommon and the AntennaInfoDedicated are used to specify the common and the UE specific antenna configuration respectively. +AntennaInfo information elements +-- ASN1START + +AntennaInfoCommon ::= SEQUENCE { + antennaPortsCount ENUMERATED {an1, an2, an4, spare1} +} + +AntennaInfoDedicated ::= SEQUENCE { + transmissionMode ENUMERATED { + tm1, tm2, tm3, tm4, tm5, tm6, + tm7, tm8-v920}, + codebookSubsetRestriction CHOICE { + n2TxAntenna-tm3 BIT STRING (SIZE (2)), + n4TxAntenna-tm3 BIT STRING (SIZE (4)), + n2TxAntenna-tm4 BIT STRING (SIZE (6)), + n4TxAntenna-tm4 BIT STRING (SIZE (64)), + n2TxAntenna-tm5 BIT STRING (SIZE (4)), + n4TxAntenna-tm5 BIT STRING (SIZE (16)), + n2TxAntenna-tm6 BIT STRING (SIZE (4)), + n4TxAntenna-tm6 BIT STRING (SIZE (16)) + } OPTIONAL, -- Cond TM + ue-TransmitAntennaSelection CHOICE{ + release NULL, + setup ENUMERATED {closedLoop, openLoop} + } +} + +AntennaInfoDedicated-v920 ::= SEQUENCE { + codebookSubsetRestriction-v920 CHOICE { + n2TxAntenna-tm8-r9 BIT STRING (SIZE (6)), + n4TxAntenna-tm8-r9 BIT STRING (SIZE (32)) + } OPTIONAL -- Cond TM8 +} + +AntennaInfoDedicated-r10 ::= SEQUENCE { + transmissionMode-r10 ENUMERATED { + tm1, tm2, tm3, tm4, tm5, tm6, tm7, tm8-v920, + tm9-v1020, spare7, spare6, spare5, spare4, + spare3, spare2, spare1}, + codebookSubsetRestriction-r10 BIT STRING OPTIONAL, -- Cond TMX + ue-TransmitAntennaSelection CHOICE{ + release NULL, + setup ENUMERATED {closedLoop, openLoop} + } +} + +-- ASN1STOP + +AntennaInfo field descriptions antennaPortsCount +Parameter represents the number of cell specific antenna ports where an1 corresponds to 1, an2 to 2 antenna ports etc. see TS 36.211 [21, 6.2.1]. codebookSubsetRestriction +Parameter: codebookSubsetRestriction, see TS 36.213 [23, 7.2] and TS 36.211 [21, 6.3.4.2.3]. The number of bits in the codebookSubsetRestriction for applicable transmission modes is defined in TS 36.213 [23, Table 7.2-1b]. If the UE is configured with transmissionMode tm8, E-UTRAN configures the field codebookSubsetRestriction if PMI/RI reporting is configured. If the UE is configured with transmissionMode tm9, E-UTRAN configures the field codebookSubsetRestriction if PMI/RI reporting is configured and if the number of CSI-RS ports is greater than 1. E-UTRAN does not configure the field codebookSubsetRestriction in other cases where the UE is configured with transmissionMode tm8 or tm9. transmissionMode +Points to one of Transmission modes defined in TS 36.213 [23, 7.1] where tm1 refers to transmission mode 1, tm2 to transmission mode 2 etc. ue-TransmitAntennaSelection +For value setup the field indicates whether UE transmit antenna selection control is closed-loop or open-loop as described in TS 36.213 [23, 8.7]. EUTRAN configures the same value for all serving cells. +Conditional presence Explanation TM The field is mandatory present if the transmissionMode is set to tm3, tm4, tm5 or tm6. Otherwise the field is not present and the UE shall delete any existing value for this field. TM8 The field is optional present, need OR, if AntennaInfoDedicated is included and transmissionMode is set to tm8. If AntennaInfoDedicated is included and transmissionMode is set to a value other than tm8, the field is not present and the UE shall delete any existing value for this field. Otherwise the field is not present and the UE takes no action i.e. continues to use the existing value, if previously configured. TMX The field is mandatory present if the transmissionMode-r10 is set to tm3, tm4, tm5 or tm6. The field is optionally present, need OR, if the transmissionMode-r10 is set to tm8 or tm9. Otherwise the field is not present and the UE shall delete any existing value for this field. +– AntennaInfoUL +The IE AntennaInfoUL is used to specify the UL antenna configuration. +AntennaInfoUL information elements +-- ASN1START + +AntennaInfoUL-r10 ::= SEQUENCE { + transmissionModeUL-r10 ENUMERATED {tm1, tm2, spare6, spare5, + spare4, spare3, spare2, spare1} OPTIONAL, -- Need OR + fourAntennaPortActivated-r10 ENUMERATED {setup} OPTIONAL -- Need OR +} + +-- ASN1STOP + +AntennaInfoUL field descriptions fourAntennaPortActivated +Parameter indicates if four antenna ports are used. See TS 36.213 [23, 8.2]. E-UTRAN optionally configures fourAntennaPortActivated only if transmissionModeUL is set to tm2. transmissionModeUL +Points to one of UL Transmission modes defined in TS 36.213 [23, 8.0] where tm1 refers to transmission mode 1, tm2 to transmission mode 2 etc. +– CQI-ReportConfig +The IE CQI-ReportConfig is used to specify the CQI reporting configuration. +CQI-ReportConfig information elements +-- ASN1START + +CQI-ReportConfig ::= SEQUENCE { + cqi-ReportModeAperiodic CQI-ReportModeAperiodic OPTIONAL, -- Need OR + nomPDSCH-RS-EPRE-Offset INTEGER (-1..6), + cqi-ReportPeriodic CQI-ReportPeriodic OPTIONAL -- Need ON +} + +CQI-ReportConfig-v920 ::= SEQUENCE { + cqi-Mask-r9 ENUMERATED {setup} OPTIONAL, -- Cond cqi-Setup + pmi-RI-Report-r9 ENUMERATED {setup} OPTIONAL -- Cond PMIRI +} + +CQI-ReportConfig-r10 ::= SEQUENCE { + cqi-ReportAperiodic-r10 CQI-ReportAperiodic-r10 OPTIONAL, -- Need ON + nomPDSCH-RS-EPRE-Offset INTEGER (-1..6), + cqi-ReportPeriodic-r10 CQI-ReportPeriodic-r10 OPTIONAL, -- Need ON + pmi-RI-Report-r9 ENUMERATED {setup} OPTIONAL, -- Cond PMIRIPCell + csi-SubframePatternConfig-r10 CHOICE { + release NULL, + setup SEQUENCE { + csi-MeasSubframeSet1-r10 MeasSubframePattern-r10, + csi-MeasSubframeSet2-r10 MeasSubframePattern-r10 + } + } OPTIONAL -- Need ON +} + +CQI-ReportConfigSCell-r10 ::= SEQUENCE { + cqi-ReportModeAperiodic-r10 CQI-ReportModeAperiodic OPTIONAL, -- Need OR + nomPDSCH-RS-EPRE-Offset-r10 INTEGER (-1..6), + + cqi-ReportPeriodicSCell-r10 CQI-ReportPeriodic-r10 OPTIONAL, -- Need ON + pmi-RI-Report-r10 ENUMERATED {setup} OPTIONAL -- Cond PMIRISCell +} + +CQI-ReportPeriodic ::= CHOICE { + release NULL, + setup SEQUENCE { + cqi-PUCCH-ResourceIndex INTEGER (0..1185), + cqi-pmi-ConfigIndex INTEGER (0..1023), + cqi-FormatIndicatorPeriodic CHOICE { + widebandCQI NULL, + subbandCQI SEQUENCE { + k INTEGER (1..4) + } + }, + ri-ConfigIndex INTEGER (0..1023) OPTIONAL, -- Need OR + simultaneousAckNackAndCQI BOOLEAN + } +} + +CQI-ReportPeriodic-r10 ::= CHOICE { + release NULL, + setup SEQUENCE { + cqi-PUCCH-ResourceIndex-r10 INTEGER (0..1184), + cqi-PUCCH-ResourceIndexP1-r10 INTEGER (0..1184) OPTIONAL, -- Need OR + cqi-pmi-ConfigIndex INTEGER (0..1023), + cqi-FormatIndicatorPeriodic-r10 CHOICE { + widebandCQI-r10 SEQUENCE { + csi-ReportMode-r10 ENUMERATED {submode1, submode2} OPTIONAL -- Need OR + }, + subbandCQI-r10 SEQUENCE { + k INTEGER (1..4), + periodicityFactor-r10 ENUMERATED {n2, n4} + } + }, + ri-ConfigIndex INTEGER (0..1023) OPTIONAL, -- Need OR + simultaneousAckNackAndCQI BOOLEAN, + cqi-Mask-r9 ENUMERATED {setup} OPTIONAL, -- Need OR + csi-ConfigIndex-r10 CHOICE { + release NULL, + setup SEQUENCE { + cqi-pmi-ConfigIndex2-r10 INTEGER (0..1023), + ri-ConfigIndex2-r10 INTEGER (0..1023) OPTIONAL -- Need OR + } + } OPTIONAL -- Need ON + } +} + +CQI-ReportAperiodic-r10 ::= CHOICE { + release NULL, + setup SEQUENCE { + cqi-ReportModeAperiodic-r10 CQI-ReportModeAperiodic, + aperiodicCSI-Trigger-r10 SEQUENCE { + trigger1-r10 BIT STRING (SIZE (8)), + trigger2-r10 BIT STRING (SIZE (8)) + } OPTIONAL -- Need OR + } +} + +CQI-ReportModeAperiodic ::= ENUMERATED { + rm12, rm20, rm22, rm30, rm31, + spare3, spare2, spare1 +} + +-- ASN1STOP + +CQI-ReportConfig field descriptions aperiodicCSI-Trigger +indicates for which serving cell(s) the aperiodic CSI report is triggered when one or more SCells are configured. trigger1 corresponds to the CSI request field 10 and trigger2 corresponds to the CSI request field 11, see TS 36.213 [23, table 7.2.1-1A]. The leftmost bit, bit 0 in the bit string corresponds to the cell with ServCellIndex=0 and bit 1 in the bit string corresponds to the cell with ServCellIndex=1 etc. Each bit has either value 0 (means no aperiodic CSI report is triggered) or value 1 (means the aperiodic CSI report is triggered). At most 5 bits can be set to value 1 in the bit string. One value applies for all serving cells (the associated functionality is common i.e. not performed independently for each cell). cqi-Mask +Limits CQI/PMI/PTI/RI reports to the on-duration period of the DRX cycle, see TS 36.321 [6]. One value applies for all serving cells (the associated functionality is common i.e. not performed independently for each cell). cqi-FormatIndicatorPeriodic +Parameter: PUCCH CQI Feedback Type, see TS 36.213 [23, table 7.2.2-1]. Depending on transmissionMode, reporting mode is implicitly given from the table. cqi-pmi-ConfigIndex +Parameter: CQI/PMI Periodicity and Offset Configuration Index ICQI/PMI, see TS 36.213 [23, tables 7.2.2-1A and 7.2.2-1C]. If subframe patterns for CSI (CQI/PMI/PTI/RI) reporting are configured (i.e. csi-SubframePatternConfig is configured), the parameter applies to the subframe pattern corresponding to csi-MeasSubframeSet1. cqi-pmi-ConfigIndex2 +Parameter: CQI/PMI Periodicity and Offset Configuration Index ICQI/PMI, see TS 36.213 [23, tables 7.2.2-1A and 7.2.2-1C]. The parameter applies to the subframe pattern corresponding to csi-MeasSubframeSet2. cqi-PUCCH-ResourceIndex, cqi-PUCCH-ResourceIndexP1 +Parameter for antenna port P0 and for antenna port P1 respectively, see TS 36.213 [23, 7.2]. E-UTRAN does not apply value 1185. cqi-ReportModeAperiodic +Parameter: reporting mode. Value rm12 corresponds to Mode 1-2, rm20 corresponds to Mode 2-0, rm22 corresponds to Mode 2-2 etc. PUSCH reporting modes are described in TS 36.213 [23, 7.2.1]. The UE shall ignore cqi-ReportModeAperiodic-r10 configured for the PCell when the transmission bandwidth of the PCell in downlink is 6 resource blocks. csi-ConfigIndex +E-UTRAN configures csi-ConfigIndex only for PCell and only if csi-SubframePatternConfig is configured. The UE shall release csi-ConfigIndex if csi-SubframePatternConfig is released. csi-MeasSubframeSet1, csi-MeasSubframeSet2 +Indicates the CSI measurement subframe sets. csi-MeasSubframeSet1 refers to CCSI,0 in TS 36.213 [23, 7.2] and csi-MeasSubframeSet2 refers to CCSI,1  in TS 36.213 [23, 7.2]. csi-ReportMode +Parameter: PUCCH_format1-1_CSI_reporting_mode, see TS 36.213 [23, 7.2.2]. K +Parameter: K, see TS 36.213 [23, 7.2.2]. nomPDSCH-RS-EPRE-Offset +Parameter: see TS 36.213 [23, 7.2.3]. Actual value = IE value * 2 [dB]. periodicityFactor +Parameter: , see TS 36.213 [23, 7.2.2]. pmi-RI-Report +See TS 36.213 [23, 7.2]. The presence of this field means PMI/RI reporting is configured; otherwise the PMI/RI reporting is not configured. EUTRAN configures this field only when transmissionMode is set to tm8 or tm9. ri-ConfigIndex +Parameter: RI Config Index IRI, see TS 36.213 [23, 7.2.2-1B]. If subframe patterns for CSI (CQI/PMI/PTI/RI) reporting are configured (i.e. csi-SubframePatternConfig is configured), the parameter applies to the subframe pattern corresponding to csi-MeasSubframeSet1. ri-ConfigIndex2 +Parameter: RI Config Index IRI, see TS 36.213 [23, 7.2.2-1B]. The parameter applies to the subframe pattern corresponding to csi-MeasSubframeSet2. E-UTRAN configures ri-ConfigIndex2 only if ri-ConfigIndex is configured. simultaneousAckNackAndCQI +Parameter: Simultaneous-AN-and-CQI. see TS 36.213 [23, 10.1] TRUE indicates that simultaneous transmission of ACK/NACK and CQI is allowed. For SCells this field is not applicable and the UE shall ignore the value. +Conditional presence Explanation cqi-Setup The field is optional present, need OR, if the cqi-ReportPeriodic in the cqi-ReportConfig is set to setup. If the field cqi-ReportPeriodic is present and set to release, the field is not present and the UE shall delete any existing value for this field. Otherwise the field is not present and the UE takes no action i.e. continues to use the existing value, if previously configured. PMIRI The field is optional present, need OR, if cqi-ReportPeriodic is included and set to setup, or cqi-ReportModeAperiodic is included. If the field cqi-ReportPeriodic is present and set to release and cqi-ReportModeAperiodic is absent, the field is not present and the UE shall delete any existing value for this field. Otherwise the field is not present and the UE takes no action i.e. continues to use the existing value, if previously configured. PMIRIPCell The field is optional present, need OR, if cqi-ReportPeriodic is included in the CQI-ReportConfig-r10 and set to setup, or cqi-ReportAperiodic is included in the CQI-ReportConfig-r10 and set to setup. If the field cqi-ReportPeriodic is present in the CQI-ReportConfig-r10 and set to release and cqi-ReportAperiodic is included in the CQI-ReportConfig-r10 and set to release, the field is not present and the UE shall delete any existing value for this field. Otherwise the field is not present and the UE takes no action i.e. continues to use the existing value, if previously configured. PMIRISCell The field is optional present, need OR, if cqi-ReportPeriodicSCell is included and set to setup, or cqi-ReportModeAperiodic-r10 is included in the CQI-ReportConfigSCell. If the field cqi-ReportPeriodicSCell is present and set to release and cqi-ReportModeAperiodic-r10 is absent in the CQI-ReportConfigSCell, the field is not present and the UE shall delete any existing value for this field. Otherwise the field is not present and the UE takes no action i.e. continues to use the existing value, if previously configured. +– CrossCarrierSchedulingConfig +The IE CrossCarrierSchedulingConfig is used to specify the configuration when the cross carrier scheduling is used in a cell. +CrossCarrierSchedulingConfig information elements +-- ASN1START + +CrossCarrierSchedulingConfig-r10 ::= SEQUENCE { + schedulingCellInfo-r10 CHOICE { + own-r10 SEQUENCE { -- No cross carrier scheduling + cif-Presence-r10 BOOLEAN + }, + other-r10 SEQUENCE { -- Cross carrier scheduling + schedulingCellId-r10 ServCellIndex-r10, + pdsch-Start-r10 INTEGER (1..4) + } + } +} + +-- ASN1STOP + +CrossCarrierSchedulingConfig field descriptions cif-Presence +The field is used to indicate whether carrier indicator field is present (value TRUE) or not (value FALSE) in PDCCH DCI formats, see TS 36.212 [22, 5.3.3.1]. pdsch-Start +The starting OFDM symbol of PDSCH for the concerned SCell, see TS 36.213 [23. 7.1.6.4]. Values 1, 2, 3 are applicable when dl-Bandwidth for the concerned SCell is greater than 10 resource blocks, values 2, 3, 4 are applicable when dl-Bandwidth for the concerned SCell is less than or equal to 10 resource blocks, see TS 36.211 [21, Table 6,7-1]. schedulingCellId +Indicates which cell signals the downlink allocations and uplink grants, if applicable, for the concerned SCell. +– CSI-RS-Config +The IE CSI-RS-Config is used to specify the CSI (Channel-State Information) reference signal configuration. +CSI-RS-Config information elements +-- ASN1START + +CSI-RS-Config-r10 ::= SEQUENCE { + csi-RS-r10 CHOICE { + release NULL, + setup SEQUENCE { + antennaPortsCount-r10 ENUMERATED {an1, an2, an4, an8}, + resourceConfig-r10 INTEGER (0..31), + subframeConfig-r10 INTEGER (0..154), + p-C-r10 INTEGER (-8..15) + } + } OPTIONAL, -- Need ON + zeroTxPowerCSI-RS-r10 CHOICE { + release NULL, + setup SEQUENCE { + zeroTxPowerResourceConfigList-r10 BIT STRING (SIZE (16)), + zeroTxPowerSubframeConfig-r10 INTEGER (0..154) + } + } OPTIONAL -- Need ON +} + +-- ASN1STOP + +CSI-RS-Config field descriptions antennaPortsCount +Parameter represents the number of antenna ports used for transmission of CSI reference signals where an1 corresponds to 1, an2 to 2 antenna ports etc. see TS 36.211 [21, 6.10.5]. p-C +Parameter: , see TS 36.213 [23, 7.2.5]. resourceConfig +Parameter: CSI reference signal configuration, see TS 36.211 [21, table 6.10.5.2-1 and 6.10.5.2-2]. subframeConfig +Parameter: , see TS 36.211 [21, table 6.10.5.3-1]. zeroTxPowerResourceConfigList +Parameter: ZeroPowerCSI-RS, see TS 36.211 [21, 6.10.5.2]. zeroTxPowerSubframeConfig +Parameter: , see TS 36.211 [21, table 6.10.5.3-1]. +– DRB-Identity +The IE DRB-Identity is used to identify a DRB used by a UE. +DRB-Identity information elements +-- ASN1START + +DRB-Identity ::= INTEGER (1..32) + +-- ASN1STOP + +– LogicalChannelConfig +The IE LogicalChannelConfig is used to configure the logical channel parameters. +LogicalChannelConfig information element +-- ASN1START + +LogicalChannelConfig ::= SEQUENCE { + ul-SpecificParameters SEQUENCE { + priority INTEGER (1..16), + prioritisedBitRate ENUMERATED { + kBps0, kBps8, kBps16, kBps32, kBps64, kBps128, + kBps256, infinity, kBps512-v1020, kBps1024-v1020, + kBps2048-v1020, spare5, spare4, spare3, spare2, + spare1}, + bucketSizeDuration ENUMERATED { + ms50, ms100, ms150, ms300, ms500, ms1000, spare2, + spare1}, + logicalChannelGroup INTEGER (0..3) OPTIONAL -- Need OR + } OPTIONAL, -- Cond UL + ..., + [[ logicalChannelSR-Mask-r9 ENUMERATED {setup} OPTIONAL -- Cond SRmask + ]] +} + +-- ASN1STOP + +LogicalChannelConfig field descriptions bucketSizeDuration +Bucket Size Duration for logical channel prioritization in TS 36.321 [6]. Value in milliseconds. Value ms50 corresponds to 50 ms, ms100 corresponds to 100 ms and so on. logicalChannelGroup +Mapping of logical channel to logical channel group for BSR reporting in TS 36.321 [6]. logicalChannelSR-Mask +Controlling SR triggering on a logical channel basis when an uplink grant is configured. See TS 36.321 [6]. prioritisedBitRate +Prioritized Bit Rate for logical channel prioritization in TS 36.321 [6]. Value in kilobytes/second. Value kBps0 corresponds to 0 kB/second, kBps8 corresponds to 8 kB/second, kBps16 corresponds to 16 kB/second and so on. Infinity is the only applicable value for SRB1 and SRB2 priority +Logical channel priority in TS 36.321 [6]. Value is an integer. +Conditional presence Explanation SRmask The field is optionally present if ul-SpecificParameters is present, need OR; otherwise it is not present. UL The field is mandatory present for UL logical channels; otherwise it is not present. +– MAC-MainConfig +The IE MAC-MainConfig is used to specify the MAC main configuration for signalling and data radio bearers. +MAC-MainConfig information element +-- ASN1START + +MAC-MainConfig ::= SEQUENCE { + ul-SCH-Config SEQUENCE { + maxHARQ-Tx ENUMERATED { + n1, n2, n3, n4, n5, n6, n7, n8, + n10, n12, n16, n20, n24, n28, + spare2, spare1} OPTIONAL, -- Need ON + periodicBSR-Timer ENUMERATED { + sf5, sf10, sf16, sf20, sf32, sf40, sf64, sf80, + sf128, sf160, sf320, sf640, sf1280, sf2560, + infinity, spare1} OPTIONAL, -- Need ON + retxBSR-Timer ENUMERATED { + sf320, sf640, sf1280, sf2560, sf5120, + sf10240, spare2, spare1}, + ttiBundling BOOLEAN + } OPTIONAL, -- Need ON + drx-Config DRX-Config OPTIONAL, -- Need ON + timeAlignmentTimerDedicated TimeAlignmentTimer, + phr-Config CHOICE { + release NULL, + setup SEQUENCE { + periodicPHR-Timer ENUMERATED {sf10, sf20, sf50, sf100, sf200, + sf500, sf1000, infinity}, + prohibitPHR-Timer ENUMERATED {sf0, sf10, sf20, sf50, sf100, + sf200, sf500, sf1000}, + dl-PathlossChange ENUMERATED {dB1, dB3, dB6, infinity} + } + } OPTIONAL, -- Need ON + ..., + [[ sr-ProhibitTimer-r9 INTEGER (0..7) OPTIONAL -- Need ON + ]], + [[ mac-MainConfig-v1020 SEQUENCE { + sCellDeactivationTimer-r10 ENUMERATED { + rf2, rf4, rf8, rf16, rf32, rf64, rf128, + spare} OPTIONAL, -- Need OP + extendedBSR-Sizes-r10 ENUMERATED {setup} OPTIONAL, -- Need OR + extendedPHR-r10 ENUMERATED {setup} OPTIONAL -- Need OR + } OPTIONAL -- Need ON + ]] +} + +DRX-Config ::= CHOICE { + release NULL, + setup SEQUENCE { + onDurationTimer ENUMERATED { + psf1, psf2, psf3, psf4, psf5, psf6, + psf8, psf10, psf20, psf30, psf40, + psf50, psf60, psf80, psf100, + psf200}, + drx-InactivityTimer ENUMERATED { + psf1, psf2, psf3, psf4, psf5, psf6, + psf8, psf10, psf20, psf30, psf40, + psf50, psf60, psf80, psf100, + psf200, psf300, psf500, psf750, + psf1280, psf1920, psf2560, psf0-v1020, + spare9, spare8, spare7, spare6, + spare5, spare4, spare3, spare2, + spare1}, + drx-RetransmissionTimer ENUMERATED { + psf1, psf2, psf4, psf6, psf8, psf16, + psf24, psf33}, + longDRX-CycleStartOffset CHOICE { + sf10 INTEGER(0..9), + sf20 INTEGER(0..19), + sf32 INTEGER(0..31), + sf40 INTEGER(0..39), + sf64 INTEGER(0..63), + sf80 INTEGER(0..79), + sf128 INTEGER(0..127), + sf160 INTEGER(0..159), + sf256 INTEGER(0..255), + sf320 INTEGER(0..319), + sf512 INTEGER(0..511), + sf640 INTEGER(0..639), + sf1024 INTEGER(0..1023), + sf1280 INTEGER(0..1279), + sf2048 INTEGER(0..2047), + sf2560 INTEGER(0..2559) + }, + shortDRX SEQUENCE { + shortDRX-Cycle ENUMERATED { + sf2, sf5, sf8, sf10, sf16, sf20, + sf32, sf40, sf64, sf80, sf128, sf160, + sf256, sf320, sf512, sf640}, + drxShortCycleTimer INTEGER (1..16) + } OPTIONAL -- Need OR + } +} + +-- ASN1STOP + +MAC-MainConfig field descriptions dl-PathlossChange +DL Pathloss Change and the change of the required power backoff due to power management (as allowed by P-MPRc [42]) for PHR reporting in TS 36.321 [6]. Value in dB. Value dB1 corresponds to 1 dB, dB3 corresponds to 3 dB and so on. The same value applies for each serving cell (although the associated functionality is performed independently for each cell). drx-InactivityTimer +Timer for DRX in TS 36.321 [6]. Value in number of PDCCH sub-frames. Value psf1 corresponds to 1 PDCCH sub-frame, psf2 corresponds to 2 PDCCH sub-frames and so on. drx-RetransmissionTimer +Timer for DRX in TS 36.321 [6]. Value in number of PDCCH sub-frames. Value psf1 corresponds to 1 PDCCH sub-frame, psf2 corresponds to 2 PDCCH sub-frames and so on. drxShortCycleTimer +Timer for DRX in TS 36.321 [6]. Value in multiples of shortDRX-Cycle. A value of 1 corresponds to shortDRX-Cycle, a value of 2 corresponds to 2 * shortDRX-Cycle and so on. extendedBSR-Sizes +If value setup is configured, the BSR index indicates extended BSR size levels as defined in TS 36.321 [6, Table 6.1.3.1-2]. extendedPHR +Indicates if power headroom shall be reported using the Extended Power Headroom Report MAC control element defined in TS 36.321 [6] (value setup). Otherwise the power headroom shall be reported using the Power Headroom Report MAC control element defined in TS 36.321 [6]. E-UTRAN always configures the value setup if more than one Serving Cell with uplink is configured. E-UTRAN configures extendedPHR only if phr-Config is configured. The UE shall release extendedPHR if phr-Config is released. longDRX-CycleStartOffset +longDRX-Cycle and drxStartOffset in TS 36.321 [6]. The value of longDRX-Cycle is in number of sub-frames. Value sf10 corresponds to 10 sub-frames, sf20 corresponds to 20 sub-frames and so on. If shortDRX-Cycle is configured, the value of longDRX-Cycle shall be a multiple of the shortDRX-Cycle value. The value of drxStartOffset value is in number of sub-frames. maxHARQ-Tx +Maximum number of transmissions for UL HARQ in TS 36.321 [6]. onDurationTimer +Timer for DRX in TS 36.321 [6]. Value in number of PDCCH sub-frames. Value psf1 corresponds to 1 PDCCH sub-frame, psf2 corresponds to 2 PDCCH sub-frames and so on. periodicBSR-Timer +Timer for BSR reporting in TS 36.321 [6]. Value in number of sub-frames. Value sf10 corresponds to 10 sub-frames, sf20 corresponds to 20 sub-frames and so on. periodicPHR-Timer +Timer for PHR reporting in TS 36.321 [6]. Value in number of sub-frames. Value sf10 corresponds to 10 subframes, sf20 corresponds to 20 subframes and so on. prohibitPHR-Timer +Timer for PHR reporting in TS 36.321 [6]. Value in number of sub-frames. Value sf0 corresponds to 0 subframes, sf100 corresponds to 100 subframes and so on. retxBSR-Timer +Timer for BSR reporting in TS 36.321 [6]. Value in number of sub-frames. Value sf640 corresponds to 640 sub-frames, sf1280 corresponds to 1280 sub-frames and so on. sCellDeactivationTimer +SCell deactivation timer in TS 36.321 [6]. Value in number of radio frames. Value rf4 corresponds to 4 radio frames, value rf8 corresponds to 8 radio frames and so on. E-UTRAN only configures the field if the UE is configured with one or more SCells. If the field is absent, the UE shall delete any existing value for this field and assume the value to be set to infinity. The same value applies for each SCell (although the associated functionality is performed independently for each SCell). shortDRX-Cycle +Short DRX cycle in TS 36.321 [6]. Value in number of sub-frames. Value sf2 corresponds to 2 sub-frames, sf5 corresponds to 5 subframes and so on. sr-ProhibitTimer +Timer for SR transmission on PUCCH in TS 36.321 [6]. Value in number of SR period(s). Value 0 means no timer for SR transmission on PUCCH is configured. Value 1 corresponds to one SR period, Value 2 corresponds to 2*SR periods and so on. ttiBundling +TRUE indicates that TTI bundling TS 36.321 [6] is enabled while FALSE indicates that TTI bundling is disabled. TTI bundling can be enabled for FDD and for TDD only for configurations 0, 1 and 6. For TDD, E-UTRAN does not simultaneously enable TTI bundling and semi-persistent scheduling in this release of specification. Furthermore, E-UTRAN does not simultaneously configure TTI bundling and SCells with configured uplink. +– PDCP-Config +The IE PDCP-Config is used to set the configurable PDCP parameters for data radio bearers. +PDCP-Config information element +-- ASN1START + +PDCP-Config ::= SEQUENCE { + discardTimer ENUMERATED { + ms50, ms100, ms150, ms300, ms500, + ms750, ms1500, infinity + } OPTIONAL, -- Cond Setup + rlc-AM SEQUENCE { + statusReportRequired BOOLEAN + } OPTIONAL, -- Cond Rlc-AM + rlc-UM SEQUENCE { + pdcp-SN-Size ENUMERATED {len7bits, len12bits} + } OPTIONAL, -- Cond Rlc-UM + headerCompression CHOICE { + notUsed NULL, + rohc SEQUENCE { + maxCID INTEGER (1..16383) DEFAULT 15, + profiles SEQUENCE { + profile0x0001 BOOLEAN, + profile0x0002 BOOLEAN, + profile0x0003 BOOLEAN, + profile0x0004 BOOLEAN, + profile0x0006 BOOLEAN, + profile0x0101 BOOLEAN, + profile0x0102 BOOLEAN, + profile0x0103 BOOLEAN, + profile0x0104 BOOLEAN + }, + ... + } + }, + ..., + [[ rn-IntegrityProtection-r10 ENUMERATED {enabled} OPTIONAL -- Cond RN + ]] +} + +-- ASN1STOP + +PDCP-Config field descriptions discardTimer +Indicates the discard timer value specified in TS 36.323 [8]. Value in milliseconds. Value ms50 means 50 ms, ms100 means 100 ms and so on. maxCID +Indicates the value of the MAX_CID parameter as specified in TS 36.323 [8]. pdcp-SN-Size +Indicates the PDCP Sequence Number length in bits. Value len7bits means that the 7-bit PDCP SN format is used and len12bits means that the 12-bit PDCP SN format is used, as specified in TS 36.323 [8]. profiles +The profiles used by both compressor and decompressor in both UE and E-UTRAN. The field indicates which of the ROHC profiles specified in TS 36.323 [8] are supported, i.e. value true indicates that the profile is supported. Profile 0x0000 shall always be supported when the use of ROHC is configured. If support of two ROHC profile identifiers with the same 8 LSB’s is signalled, only the profile corresponding to the highest value shall be applied. rn-IntegrityProtection +Indicates that integrity protection or verification shall be applied for all subsequent packets received and sent by the RN on the DRB. statusReportRequired +Indicates whether or not the UE shall send a PDCP Status Report upon re-establishment of the PDCP entity as specified in TS 36.323 [8]. +Conditional presence Explanation Rlc-AM The field is mandatory present upon setup of a PDCP entity for a radio bearer configured with RLC AM. The field is optional, need ON, in case of reconfiguration of a PDCP entity at handover for a radio bearer configured with RLC AM. Otherwise the field is not present. Rlc-UM The field is mandatory present upon setup of a PDCP entity for a radio bearer configured with RLC UM. Otherwise the field is not present. RN The field is optionally present when signalled to the RN, need OR. Otherwise the field is not present. Setup The field is mandatory present in case of radio bearer setup. Otherwise the field is optionally present, need ON. +– PDSCH-Config +The IE PDSCH-ConfigCommon and the IE PDSCH-ConfigDedicated are used to specify the common and the UE specific PDSCH configuration respectively. +PDSCH-Config information element +-- ASN1START + +PDSCH-ConfigCommon ::= SEQUENCE { + referenceSignalPower INTEGER (-60..50), + p-b INTEGER (0..3) +} + +PDSCH-ConfigDedicated::= SEQUENCE { + p-a ENUMERATED { + dB-6, dB-4dot77, dB-3, dB-1dot77, + dB0, dB1, dB2, dB3} +} + +-- ASN1STOP + +PDSCH-Config field descriptions p-a +Parameter: , see TS 36.213 [23, 5.2]. Value dB-6 corresponds to -6 dB, dB-4dot77 corresponds to -4.77 dB etc. p-b +Parameter: , see TS 36.213 [23, Table 5.2-1]. referenceSignalPower +Parameter: Reference-signal power, which provides the downlink reference-signal EPRE, see TS 36.213 [23, 5.2]. The actual value in dBm. +– PHICH-Config +The IE PHICH-Config is used to specify the PHICH configuration. +PHICH-Config information element +-- ASN1START + +PHICH-Config ::= SEQUENCE { + phich-Duration ENUMERATED {normal, extended}, + phich-Resource ENUMERATED {oneSixth, half, one, two} +} + +-- ASN1STOP + +PHICH-Config field descriptions phich-Duration +Parameter: PHICH-Duration, see TS 36.211 [21, Table 6.9.3-1]. phich-Resource +Parameter: Ng, see TS 36.211 [21, 6.9]. Value oneSixth corresponds to 1/6, half corresponds to 1/2 and so on. +– PhysicalConfigDedicated +The IE PhysicalConfigDedicated is used to specify the UE specific physical channel configuration. +PhysicalConfigDedicated information element +-- ASN1START + +PhysicalConfigDedicated ::= SEQUENCE { + pdsch-ConfigDedicated PDSCH-ConfigDedicated OPTIONAL, -- Need ON + pucch-ConfigDedicated PUCCH-ConfigDedicated OPTIONAL, -- Need ON + pusch-ConfigDedicated PUSCH-ConfigDedicated OPTIONAL, -- Need ON + uplinkPowerControlDedicated UplinkPowerControlDedicated OPTIONAL, -- Need ON + tpc-PDCCH-ConfigPUCCH TPC-PDCCH-Config OPTIONAL, -- Need ON + tpc-PDCCH-ConfigPUSCH TPC-PDCCH-Config OPTIONAL, -- Need ON + cqi-ReportConfig CQI-ReportConfig OPTIONAL, -- Cond CQI-r8 + soundingRS-UL-ConfigDedicated SoundingRS-UL-ConfigDedicated OPTIONAL, -- Need ON + antennaInfo CHOICE { + explicitValue AntennaInfoDedicated, + defaultValue NULL + } OPTIONAL, -- Cond AI-r8 + schedulingRequestConfig SchedulingRequestConfig OPTIONAL, -- Need ON + ..., + [[ cqi-ReportConfig-v920 CQI-ReportConfig-v920 OPTIONAL, -- Cond CQI-r8 + antennaInfo-v920 AntennaInfoDedicated-v920 OPTIONAL -- Cond AI-r8 + ]], + [[ antennaInfo-r10 CHOICE { + explicitValue-r10 AntennaInfoDedicated-r10, + defaultValue NULL + } OPTIONAL, -- Cond AI-r10 + antennaInfoUL-r10 AntennaInfoUL-r10 OPTIONAL, -- Need ON + cif-Presence-r10 BOOLEAN OPTIONAL, -- Need ON + cqi-ReportConfig-r10 CQI-ReportConfig-r10 OPTIONAL, -- Cond CQI-r10 + csi-RS-Config-r10 CSI-RS-Config-r10 OPTIONAL, -- Need ON + pucch-ConfigDedicated-v1020 PUCCH-ConfigDedicated-v1020 OPTIONAL, -- Need ON + pusch-ConfigDedicated-v1020 PUSCH-ConfigDedicated-v1020 OPTIONAL, -- Need ON + schedulingRequestConfig-v1020 SchedulingRequestConfig-v1020 OPTIONAL, -- Need ON + soundingRS-UL-ConfigDedicated-v1020 + SoundingRS-UL-ConfigDedicated-v1020 OPTIONAL, -- Need ON + soundingRS-UL-ConfigDedicatedAperiodic-r10 + SoundingRS-UL-ConfigDedicatedAperiodic-r10 OPTIONAL, -- Need ON + uplinkPowerControlDedicated-v1020 UplinkPowerControlDedicated-v1020 OPTIONAL -- Need ON + ]], + [[ additionalSpectrumEmissionCA-r10 CHOICE { + release NULL, + setup SEQUENCE { + additionalSpectrumEmissionPCell-r10 AdditionalSpectrumEmission + } + } OPTIONAL -- Need ON + ]] +} + +PhysicalConfigDedicatedSCell-r10 ::= SEQUENCE { + -- DL configuration as well as configuration applicable for DL and UL + nonUL-Configuration-r10 SEQUENCE { + antennaInfo-r10 AntennaInfoDedicated-r10 OPTIONAL, -- Need ON + crossCarrierSchedulingConfig-r10 CrossCarrierSchedulingConfig-r10 OPTIONAL, -- Need ON + csi-RS-Config-r10 CSI-RS-Config-r10 OPTIONAL, -- Need ON + pdsch-ConfigDedicated-r10 PDSCH-ConfigDedicated OPTIONAL -- Need ON + } OPTIONAL, -- Cond SCellAdd + -- UL configuration + ul-Configuration-r10 SEQUENCE { + antennaInfoUL-r10 AntennaInfoUL-r10 OPTIONAL, -- Need ON + pusch-ConfigDedicatedSCell-r10 PUSCH-ConfigDedicatedSCell-r10 OPTIONAL, -- Need ON + uplinkPowerControlDedicatedSCell-r10 UplinkPowerControlDedicatedSCell-r10 OPTIONAL, -- Need ON + cqi-ReportConfigSCell-r10 CQI-ReportConfigSCell-r10 OPTIONAL, -- Need ON + soundingRS-UL-ConfigDedicated-r10 SoundingRS-UL-ConfigDedicated OPTIONAL, -- Need ON + soundingRS-UL-ConfigDedicated-v1020 + SoundingRS-UL-ConfigDedicated-v1020 OPTIONAL, -- Need ON + soundingRS-UL-ConfigDedicatedAperiodic-r10 + SoundingRS-UL-ConfigDedicatedAperiodic-r10 OPTIONAL -- Need ON + } OPTIONAL, -- Cond CommonUL + ... +} + +-- ASN1STOP + +PhysicalConfigDedicated field descriptions additionalSpectrumEmissionPCell +E-UTRAN does not configure this field in this release of the specification. antennaInfo +A choice is used to indicate whether the antennaInfo is signalled explicitly or set to the default antenna configuration as specified in section 9.2.4. tpc-PDCCH-ConfigPUCCH +PDCCH configuration for power control of PUCCH using format 3/3A, see TS 36.212 [22]. tpc-PDCCH-ConfigPUSCH +PDCCH configuration for power control of PUSCH using format 3/3A, see TS 36.212 [22]. +Conditional presence Explanation AI-r8 The field is optionally present, need ON, if antennaInfoDedicated-r10 is absent. Otherwise the field is not present AI-r10 The field is optionally present, need ON, if antennaInfoDedicated is absent. Otherwise the field is not present CommonUL The field is mandatory present if ul-Configuration of RadioResourceConfigCommonSCell-r10 is present; otherwise it is optional, need ON. CQI-r8 The field is optionally present, need ON, if cqi-ReportConfig-r10 is absent. Otherwise the field is not present CQI-r10 The field is optionally present, need ON, if cqi-ReportConfig is absent. Otherwise the field is not present SCellAdd The field is mandatory present if cellIdentification is present; otherwise it is optional, need ON. +NOTE 1: During handover, the UE performs a MAC reset, which involves reverting to the default CQI/ SRS/ SR configuration in accordance with subclause 5.3.13 and TS 36.321 [6, 5.9 & 5.2]. Hence, for these parts of the dedicated radio resource configuration, the default configuration (rather than the configuration used in the source PCell) is used as the basis for the delta signalling that is included in the message used to perform handover. +NOTE 2: Since delta signalling is not supported for the common SCell configuration, E-UTRAN can only add or release the uplink of an SCell by releasing and adding the concerned SCell. +– P-Max +The IE P-Max is used to limit the UE's uplink transmission power on a carrier frequency and is used to calculate the parameter Pcompensation defined in TS 36.304 [4]. Corresponds to parameter PEMAX or PEMAX,c in TS 36.101 [42]. The UE transmit power on one serving cell shall not exceed the configured maximum UE output power of the serving cell determined by this value as specified in TS 36.101 [42, 6.2.5 or 6.2.5A]. +P-Max information element +-- ASN1START + +P-Max ::= INTEGER (-30..33) + +-- ASN1STOP + +– PRACH-Config +The IE PRACH-ConfigSIB and IE PRACH-Config are used to specify the PRACH configuration in the system information and in the mobility control information, respectively. +PRACH-Config information elements +-- ASN1START + +PRACH-ConfigSIB ::= SEQUENCE { + rootSequenceIndex INTEGER (0..837), + prach-ConfigInfo PRACH-ConfigInfo +} + +PRACH-Config ::= SEQUENCE { + rootSequenceIndex INTEGER (0..837), + prach-ConfigInfo PRACH-ConfigInfo OPTIONAL -- Need ON +} + +PRACH-ConfigSCell-r10 ::= SEQUENCE { + prach-ConfigIndex-r10 INTEGER (0..63) +} + +PRACH-ConfigInfo ::= SEQUENCE { + prach-ConfigIndex INTEGER (0..63), + highSpeedFlag BOOLEAN, + zeroCorrelationZoneConfig INTEGER (0..15), + prach-FreqOffset INTEGER (0..94) +} + +-- ASN1STOP + +PRACH-Config field descriptions highSpeedFlag +Parameter: High-speed-flag, see TS 36.211, [21, 5.7.2].TRUE corresponds to Restricted set and FALSE to Unrestricted set. prach-ConfigIndex +Parameter: prach-ConfigurationIndex, see TS 36.211 [21, 5.7.1]. prach-FreqOffset +Parameter: prach-FrequencyOffset, see TS 36.211, [21, 5.7.1]. For TDD the value range is dependent on the value of prach-ConfigIndex. rootSequenceIndex +Parameter: RACH_ROOT_SEQUENCE, see TS 36.211 [21, 5.7.1]. zeroCorrelationZoneConfig +Parameter: NCS configuration, see TS 36.211, [21, 5.7.2: table 5.7.2-2] for preamble format 0..3 and TS 36.211, [21, 5.7.2: table 5.7.2-3] for preamble format 4. +– PresenceAntennaPort1 +The IE PresenceAntennaPort1 is used to indicate whether all the neighbouring cells use Antenna Port 1. When set to TRUE, the UE may assume that at least two cell-specific antenna ports are used in all neighbouring cells. +PresenceAntennaPort1 information element +-- ASN1START + +PresenceAntennaPort1 ::= BOOLEAN + +-- ASN1STOP + +– PUCCH-Config +The IE PUCCH-ConfigCommon and IE PUCCH-ConfigDedicated are used to specify the common and the UE specific PUCCH configuration respectively. +PUCCH-Config information elements +-- ASN1START + +PUCCH-ConfigCommon ::= SEQUENCE { + deltaPUCCH-Shift ENUMERATED {ds1, ds2, ds3}, + nRB-CQI INTEGER (0..98), + nCS-AN INTEGER (0..7), + n1PUCCH-AN INTEGER (0..2047) +} + +PUCCH-ConfigDedicated ::= SEQUENCE { + ackNackRepetition CHOICE{ + release NULL, + setup SEQUENCE { + repetitionFactor ENUMERATED {n2, n4, n6, spare1}, + n1PUCCH-AN-Rep INTEGER (0..2047) + } + }, + tdd-AckNackFeedbackMode ENUMERATED {bundling, multiplexing} OPTIONAL -- Cond TDD +} + +PUCCH-ConfigDedicated-v1020 ::= SEQUENCE { + pucch-Format-r10 CHOICE { + format3-r10 SEQUENCE { + n3PUCCH-AN-List-r10 SEQUENCE (SIZE (1..4)) OF INTEGER (0..549) OPTIONAL, -- Need ON + twoAntennaPortActivatedPUCCH-Format3-r10 CHOICE { + release NULL, + setup SEQUENCE { + n3PUCCH-AN-ListP1-r10 SEQUENCE (SIZE (1..4)) OF INTEGER (0..549) + } + } OPTIONAL -- Need ON + }, + channelSelection-r10 SEQUENCE { + n1PUCCH-AN-CS-r10 CHOICE { + release NULL, + setup SEQUENCE { + n1PUCCH-AN-CS-List-r10 SEQUENCE (SIZE (1..2)) OF N1PUCCH-AN-CS-r10 + } + } OPTIONAL -- Need ON + } + } OPTIONAL, -- Need OR + twoAntennaPortActivatedPUCCH-Format1a1b-r10 ENUMERATED {true} OPTIONAL, -- Need OR + simultaneousPUCCH-PUSCH-r10 ENUMERATED {true} OPTIONAL, -- Need OR + n1PUCCH-AN-RepP1-r10 INTEGER (0..2047) OPTIONAL -- Need OR +} + +N1PUCCH-AN-CS-r10 ::= SEQUENCE (SIZE (1..4)) OF INTEGER (0..2047) + +-- ASN1STOP + +PUCCH-Config field descriptions ackNackRepetition +Parameter indicates whether ACK/NACK repetition is configured, see TS 36.213 [23, 10.1]. deltaPUCCH-Shift +Parameter: , see 36.211 [21, 5.4.1], where ds1 corresponds to value 1 ds2 to 2 etc. n1PUCCH-AN +Parameter: , see TS 36.213 [23, 10.1]. n1PUCCH-AN-CS-List +Parameter: for PUCCH format 1b with channel selection, see TS 36.213 [23, 10.1.2.2.1, 10.1.3.2.1]. n1PUCCH-AN-Rep, n1PUCCH-AN-RepP1 +Parameter: for antenna port P0 and for antenna port P1 respectively, see TS 36.213 [23, 10.1]. n3PUCCH-AN-List, n3PUCCH-AN-ListP1 +Parameter: for antenna port P0 and for antenna port P1 respectively, see TS 36.213 [23, 10.1]. nCS-An +Parameter: see TS 36.211 [21, 5.4]. nRB-CQI +Parameter: , see TS 36.211 [21, 5.4]. pucch-Format +Parameter indicates one of the PUCCH formats for transmission of HARQ-ACK, see TS 36.213 [23, 10.1]. For TDD, if the UE is configured with PCell only, the channelSelection indicates the transmission of HARQ-ACK multiplexing as defined in Tables 10.1.3-5, 10.1.3-6, and 10.1.3-7 in TS 36.213 [23] for PUCCH, and in 7.3 in TS 36.213 [23] for PUSCH. repetitionFactor +Parameter see TS 36.213 [23, 10.1] where n2 corresponds to repetition factor 2, n4 to 4. simultaneousPUCCH-PUSCH +Parameter indicates whether simultaneous PUCCH and PUSCH transmissions is configured, see TS 36.213 [23, 10.1 and 5.1.1]. E-UTRAN configures this field, only when the nonContiguousUL-RA-WithinCC-Info is set to supported in the band on which PCell is configured. tdd-AckNackFeedbackMode +Parameter indicates one of the TDD ACK/NACK feedback modes used, see TS 36.213 [23, 7.3 and 10.1.3]. The value bundling corresponds to use of ACK/NACK bundling whereas, the value multiplexing corresponds to ACK/NACK multiplexing as defined in Tables 10.1.3-2, 10.1.3-3, and 10.1.3-4 in TS 36.213 [23]. The same value applies to both ACK/NACK feedback modes on PUCCH as well as on PUSCH. twoAntennaPortActivatedPUCCH-Format1a1b +Indicates whether two antenna ports are configured for PUCCH format 1a/1b for HARQ-ACK, see TS 36.213 [23, 10.1]. The field also applies for PUCCH format 1a/1b transmission when format3 is configured, see TS 36.213 [23, 10.1.2.2.2, 10.1.3.2.2]. twoAntennaPortActivatedPUCCH-Format3 +Indicates whether two antenna ports are configured for PUCCH format 3 for HARQ-ACK, see TS 36.213 [23, 10.1]. +Conditional presence Explanation TDD The field is mandatory present for TDD if the pucch-Format is not present. If the pucch-Format is present, the field is not present. It is not present for FDD and the UE shall delete any existing value for this field. +– PUSCH-Config +The IE PUSCH-ConfigCommon is used to specify the common PUSCH configuration and the reference signal configuration for PUSCH and PUCCH. The IE PUSCH-ConfigDedicated is used to specify the UE specific PUSCH configuration. +PUSCH-Config information element +-- ASN1START + +PUSCH-ConfigCommon ::= SEQUENCE { + pusch-ConfigBasic SEQUENCE { + n-SB INTEGER (1..4), + hoppingMode ENUMERATED {interSubFrame, intraAndInterSubFrame}, + pusch-HoppingOffset INTEGER (0..98), + enable64QAM BOOLEAN + }, + ul-ReferenceSignalsPUSCH UL-ReferenceSignalsPUSCH +} + +PUSCH-ConfigDedicated ::= SEQUENCE { + betaOffset-ACK-Index INTEGER (0..15), + betaOffset-RI-Index INTEGER (0..15), + betaOffset-CQI-Index INTEGER (0..15) +} + +PUSCH-ConfigDedicated-v1020 ::= SEQUENCE { + betaOffsetMC-r10 SEQUENCE { + betaOffset-ACK-Index-MC-r10 INTEGER (0..15), + betaOffset-RI-Index-MC-r10 INTEGER (0..15), + betaOffset-CQI-Index-MC-r10 INTEGER (0..15) + } OPTIONAL, -- Need OR + groupHoppingDisabled-r10 ENUMERATED {true} OPTIONAL, -- Need OR + dmrs-WithOCC-Activated-r10 ENUMERATED {true} OPTIONAL -- Need OR +} + +PUSCH-ConfigDedicatedSCell-r10 ::= SEQUENCE { + groupHoppingDisabled-r10 ENUMERATED {true} OPTIONAL, -- Need OR + dmrs-WithOCC-Activated-r10 ENUMERATED {true} OPTIONAL -- Need OR +} + +UL-ReferenceSignalsPUSCH ::= SEQUENCE { + groupHoppingEnabled BOOLEAN, + groupAssignmentPUSCH INTEGER (0..29), + sequenceHoppingEnabled BOOLEAN, + cyclicShift INTEGER (0..7) +} + +-- ASN1STOP + +PUSCH-Config field descriptions betaOffset-ACK-Index, betaOffset-ACK-Index-MC +Parameter: , for single- and multiple-codeword respectively, see TS 36.213 [23, Table 8.6.3-1]. One value applies for all serving cells with an uplink (the associated functionality is common i.e. not performed independently for each cell). betaOffset-CQI-Index, betaOffset-CQI-Index-MC +Parameter: , for single- and multiple-codeword respectively, see TS 36.213 [23, Table 8.6.3-3]. One value applies for all serving cells with an uplink (the associated functionality is common i.e. not performed independently for each cell). betaOffset-RI-Index, betaOffset-RI-Index-MC +Parameter: , for single- and multiple-codeword respectively, see TS 36.213 [23, Table 8.6.3-2]. One value applies for all serving cells with an uplink (the associated functionality is common i.e. not performed independently for each cell). cyclicShift +Parameters: cyclicShift, see TS 36.211 [21, Table 5.5.2.1.1-2]. dmrs-WithOCC-Activated +Parameter: Activate-DMRS-with OCC, see TS 36.211 [21, 5.5.2.1]. enable64QAM +See TS 36.213 [23, 8.6.1]. TRUE indicates that 64QAM is allowed while FALSE indicates that 64QAM is not allowed. groupAssignmentPUSCH +Parameter: ?SS See TS 36.211 [21, 5.5.1.3]. groupHoppingDisabled +Parameter: Disable-sequence-group-hopping, see TS 36.211 [21, 5.5.1.3]. groupHoppingEnabled +Parameter: Group-hopping-enabled, see TS 36.211 [21, 5.5.1.3]. hoppingMode +Parameter: Hopping-mode, see TS 36.211 [21, 5.3.4]. n-SB +Parameter: Nsb see TS 36.211 [21, 5.3.4]. pusch-hoppingOffset +Parameter: , see TS 36.211 [21, 5.3.4]. sequenceHoppingEnabled +Parameter: Sequence-hopping-enabled, see TS 36.211 [21, 5.5.1.4]. ul- ReferenceSignalsPUSCH +Used to specify parameters needed for the transmission on PUSCH (or PUCCH). +– RACH-ConfigCommon +The IE RACH-ConfigCommon is used to specify the generic random access parameters. +RACH-ConfigCommon information element +-- ASN1START + +RACH-ConfigCommon ::= SEQUENCE { + preambleInfo SEQUENCE { + numberOfRA-Preambles ENUMERATED { + n4, n8, n12, n16 ,n20, n24, n28, + n32, n36, n40, n44, n48, n52, n56, + n60, n64}, + preamblesGroupAConfig SEQUENCE { + sizeOfRA-PreamblesGroupA ENUMERATED { + n4, n8, n12, n16 ,n20, n24, n28, + n32, n36, n40, n44, n48, n52, n56, + n60}, + messageSizeGroupA ENUMERATED {b56, b144, b208, b256}, + messagePowerOffsetGroupB ENUMERATED { + minusinfinity, dB0, dB5, dB8, dB10, dB12, + dB15, dB18}, + ... + } OPTIONAL -- Need OP + }, + powerRampingParameters SEQUENCE { + powerRampingStep ENUMERATED {dB0, dB2,dB4, dB6}, + preambleInitialReceivedTargetPower ENUMERATED { + dBm-120, dBm-118, dBm-116, dBm-114, dBm-112, + dBm-110, dBm-108, dBm-106, dBm-104, dBm-102, + dBm-100, dBm-98, dBm-96, dBm-94, + dBm-92, dBm-90} + }, + ra-SupervisionInfo SEQUENCE { + preambleTransMax ENUMERATED { + n3, n4, n5, n6, n7, n8, n10, n20, n50, + n100, n200}, + ra-ResponseWindowSize ENUMERATED { + sf2, sf3, sf4, sf5, sf6, sf7, + sf8, sf10}, + mac-ContentionResolutionTimer ENUMERATED { + sf8, sf16, sf24, sf32, sf40, sf48, + sf56, sf64} + }, + maxHARQ-Msg3Tx INTEGER (1..8), + ... +} + +-- ASN1STOP + +RACH-ConfigCommon field descriptions mac-ContentionResolutionTimer +Timer for contention resolution in TS 36.321 [6]. Value in subframes. Value sf8 corresponds to 8 subframes, sf16 corresponds to 16 subframes and so on. maxHARQ-Msg3Tx +Maximum number of Msg3 HARQ transmissions in TS 36.321 [6], used for contention based random access. Value is an integer. messagePowerOffsetGroupB +Threshold for preamble selection in TS 36.321 [6]. Value in dB. Value minusinfinity corresponds to –infinity. Value dB0 corresponds to 0 dB, dB5 corresponds to 5 dB and so on. messageSizeGroupA +Threshold for preamble selection in TS 36.321 [6]. Value in bits. Value b56 corresponds to 56 bits, b144 corresponds to 144 bits and so on. numberOfRA-Preambles +Number of non-dedicated random access preambles in TS 36.321 [6]. Value is an integer. Value n4 corresponds to 4, n8 corresponds to 8 and so on. powerRampingStep +Power ramping factor in TS 36.321 [6]. Value in dB. Value dB0 corresponds to 0 dB, dB2 corresponds to 2 dB and so on. preambleInitialReceivedTargetPower +Initial preamble power in TS 36.321 [6]. Value in dBm. Value dBm-120 corresponds to -120 dBm, dBm-118 corresponds to -118 dBm and so on. preamblesGroupAConfig +Provides the configuration for preamble grouping in TS 36.321 [6]. If the field is not signalled, the size of the random access preambles group A [6] is equal to numberOfRA-Preambles. preambleTransMax +Maximum number of preamble transmission in TS 36.321 [6]. Value is an integer. Value n3 corresponds to 3, n4 corresponds to 4 and so on. ra-ResponseWindowSize +Duration of the RA response window in TS 36.321 [6]. Value in subframes. Value sf2 corresponds to 2 subframes, sf3 corresponds to 3 subframes and so on. sizeOfRA-PreamblesGroupA +Size of the random access preambles group A in TS 36.321 [6]. Value is an integer. Value n4 corresponds to 4, n8 corresponds to 8 and so on. +– RACH-ConfigDedicated +The IE RACH-ConfigDedicated is used to specify the dedicated random access parameters. +RACH-ConfigDedicated information element +-- ASN1START + +RACH-ConfigDedicated ::= SEQUENCE { + ra-PreambleIndex INTEGER (0..63), + ra-PRACH-MaskIndex INTEGER (0..15) +} + +-- ASN1STOP + +RACH-ConfigDedicated field descriptions ra-PRACH-MaskIndex +Explicitly signalled PRACH Mask Index for RA Resource selection in TS 36.321 [6]. ra-PreambleIndex +Explicitly signalled Random Access Preamble for RA Resource selection in TS 36.321 [6]. +– RadioResourceConfigCommon +The IE RadioResourceConfigCommonSIB and IE RadioResourceConfigCommon are used to specify common radio resource configurations in the system information and in the mobility control information, respectively, e.g., the random access parameters and the static physical layer parameters. +RadioResourceConfigCommon information element +-- ASN1START + +RadioResourceConfigCommonSIB ::= SEQUENCE { + rach-ConfigCommon RACH-ConfigCommon, + bcch-Config BCCH-Config, + pcch-Config PCCH-Config, + prach-Config PRACH-ConfigSIB, + pdsch-ConfigCommon PDSCH-ConfigCommon, + pusch-ConfigCommon PUSCH-ConfigCommon, + pucch-ConfigCommon PUCCH-ConfigCommon, + soundingRS-UL-ConfigCommon SoundingRS-UL-ConfigCommon, + uplinkPowerControlCommon UplinkPowerControlCommon, + ul-CyclicPrefixLength UL-CyclicPrefixLength, + ..., + [[ uplinkPowerControlCommon-v1020 UplinkPowerControlCommon-v1020 OPTIONAL -- Need OR + ]] +} + +RadioResourceConfigCommon ::= SEQUENCE { + rach-ConfigCommon RACH-ConfigCommon OPTIONAL, -- Need ON + prach-Config PRACH-Config, + pdsch-ConfigCommon PDSCH-ConfigCommon OPTIONAL, -- Need ON + pusch-ConfigCommon PUSCH-ConfigCommon, + phich-Config PHICH-Config OPTIONAL, -- Need ON + pucch-ConfigCommon PUCCH-ConfigCommon OPTIONAL, -- Need ON + soundingRS-UL-ConfigCommon SoundingRS-UL-ConfigCommon OPTIONAL, -- Need ON + uplinkPowerControlCommon UplinkPowerControlCommon OPTIONAL, -- Need ON + antennaInfoCommon AntennaInfoCommon OPTIONAL, -- Need ON + p-Max P-Max OPTIONAL, -- Need OP + tdd-Config TDD-Config OPTIONAL, -- Cond TDD + ul-CyclicPrefixLength UL-CyclicPrefixLength, + ..., + [[ uplinkPowerControlCommon-v1020 UplinkPowerControlCommon-v1020 OPTIONAL -- Need ON + ]] +} + +RadioResourceConfigCommonSCell-r10 ::= SEQUENCE { + -- DL configuration as well as configuration applicable for DL and UL + nonUL-Configuration-r10 SEQUENCE { + -- 1: Cell characteristics + dl-Bandwidth-r10 ENUMERATED {n6, n15, n25, n50, n75, n100}, + -- 2: Physical configuration, general + antennaInfoCommon-r10 AntennaInfoCommon, + mbsfn-SubframeConfigList-r10 MBSFN-SubframeConfigList OPTIONAL, -- Need OR + -- 3: Physical configuration, control + phich-Config-r10 PHICH-Config, + -- 4: Physical configuration, physical channels + pdsch-ConfigCommon-r10 PDSCH-ConfigCommon, + tdd-Config-r10 TDD-Config OPTIONAL -- Cond TDDSCell + }, + -- UL configuration + ul-Configuration-r10 SEQUENCE { + ul-FreqInfo-r10 SEQUENCE { + ul-CarrierFreq-r10 ARFCN-ValueEUTRA OPTIONAL, -- Need OP + ul-Bandwidth-r10 ENUMERATED {n6, n15, + n25, n50, n75, n100} OPTIONAL, -- Need OP + additionalSpectrumEmissionSCell-r10 AdditionalSpectrumEmission + }, + p-Max-r10 P-Max OPTIONAL, -- Need OP + uplinkPowerControlCommonSCell-r10 UplinkPowerControlCommonSCell-r10, + -- A special version of IE UplinkPowerControlCommon may be introduced + -- 3: Physical configuration, control + soundingRS-UL-ConfigCommon-r10 SoundingRS-UL-ConfigCommon, + ul-CyclicPrefixLength-r10 UL-CyclicPrefixLength, + -- 4: Physical configuration, physical channels + prach-ConfigSCell-r10 PRACH-ConfigSCell-r10 OPTIONAL, -- Cond TDD-OR + pusch-ConfigCommon-r10 PUSCH-ConfigCommon + } OPTIONAL, -- Need OR + ..., + [[ ul-CarrierFreq-v1090 ARFCN-ValueEUTRA-v9e0 OPTIONAL -- Need OP + ]] +} + +BCCH-Config ::= SEQUENCE { + modificationPeriodCoeff ENUMERATED {n2, n4, n8, n16} +} + +PCCH-Config ::= SEQUENCE { + defaultPagingCycle ENUMERATED { + rf32, rf64, rf128, rf256}, + nB ENUMERATED { + fourT, twoT, oneT, halfT, quarterT, oneEighthT, + oneSixteenthT, oneThirtySecondT} +} + +UL-CyclicPrefixLength ::= ENUMERATED {len1, len2} + +-- ASN1STOP + +RadioResourceConfigCommon field descriptions additionalSpectrumEmissionSCell +The UE requirements related to IE AdditionalSpectrumEmissionSCell are defined in TS 36.101 [42]. E-UTRAN configures the same value in additionalSpectrumEmissionSCell for all SCell(s) of the same band with UL configured. The additionalSpectrumEmissionSCell is applicable for all serving cells (including PCell) of the same band with UL configured. defaultPagingCycle +Default paging cycle, used to derive ‘T’ in TS 36.304 [4]. Value rf32 corresponds to 32 radio frames, rf64 corresponds to 64 radio frames and so on. modificationPeriodCoeff +Actual modification period, expressed in number of radio frames= modificationPeriodCoeff * defaultPagingCycle. n2 corresponds to value 2, n4 corresponds to value 4, n8 corresponds to value 8 and n16 corresponds to value 16. nB +Parameter: nB is used as one of parameters to derive the Paging Frame and Paging Occasion according to TS 36.304 [4]. Value in multiples of 'T' as defined in TS 36.304 [4]. A value of fourT corresponds to 4 * T, a value of twoT corresponds to 2 * T and so on. p-Max +Pmax to be used in the target cell. If absent the UE applies the maximum power according to the UE capability. ul-Bandwidth +Parameter: transmission bandwidth configuration, NRB, in uplink, see TS 36.101 [42, table 5.6-1]. Value n6 corresponds to 6 resource blocks, n15 to 15 resource blocks and so on. If for FDD this parameter is absent, the uplink bandwidth is equal to the downlink bandwidth. For TDD this parameter is absent and it is equal to the downlink bandwidth. ul-CarrierFreq +For FDD: If absent, the (default) value determined from the default TX-RX frequency separation defined in TS 36.101 [42, table 5.7.3-1] applies. +For TDD: This parameter is absent and it is equal to the downlink frequency. UL-CyclicPrefixLength +Parameter: Uplink cyclic prefix length see 36.211 [21, 5.2.1] where len1 corresponds to normal cyclic prefix and len2 corresponds to extended cyclic prefix. +Conditional presence Explanation TDD The field is optional for TDD, Need ON; it is not present for FDD and the UE shall delete any existing value for this field. TDD-OR The field is optional for TDD, Need OR; it is not present for FDD and the UE shall delete any existing value for this field. TDDSCell This field is mandatory present for TDD; it is not present for FDD and the UE shall delete any existing value for this field. +– RadioResourceConfigDedicated +The IE RadioResourceConfigDedicated is used to setup/modify/release RBs, to modify the MAC main configuration, to modify the SPS configuration and to modify dedicated physical configuration. +RadioResourceConfigDedicated information element +-- ASN1START + +RadioResourceConfigDedicated ::= SEQUENCE { + srb-ToAddModList SRB-ToAddModList OPTIONAL, -- Cond HO-Conn + drb-ToAddModList DRB-ToAddModList OPTIONAL, -- Cond HO-toEUTRA + drb-ToReleaseList DRB-ToReleaseList OPTIONAL, -- Need ON + mac-MainConfig CHOICE { + explicitValue MAC-MainConfig, + defaultValue NULL + } OPTIONAL, -- Cond HO-toEUTRA2 + sps-Config SPS-Config OPTIONAL, -- Need ON + physicalConfigDedicated PhysicalConfigDedicated OPTIONAL, -- Need ON + ..., + [[ rlf-TimersAndConstants-r9 RLF-TimersAndConstants-r9 OPTIONAL -- Need ON + ]], + [[ measSubframePatternPCell-r10 MeasSubframePatternPCell-r10 OPTIONAL -- Need ON + ]] +} + +RadioResourceConfigDedicatedSCell-r10 ::= SEQUENCE { + -- UE specific configuration extensions applicable for an SCell + physicalConfigDedicatedSCell-r10 PhysicalConfigDedicatedSCell-r10 OPTIONAL, -- Need ON + ... +} + +SRB-ToAddModList ::= SEQUENCE (SIZE (1..2)) OF SRB-ToAddMod + +SRB-ToAddMod ::= SEQUENCE { + srb-Identity INTEGER (1..2), + rlc-Config CHOICE { + explicitValue RLC-Config, + defaultValue NULL + } OPTIONAL, -- Cond Setup + logicalChannelConfig CHOICE { + explicitValue LogicalChannelConfig, + defaultValue NULL + } OPTIONAL, -- Cond Setup + ... +} + +DRB-ToAddModList ::= SEQUENCE (SIZE (1..maxDRB)) OF DRB-ToAddMod + +DRB-ToAddMod ::= SEQUENCE { + eps-BearerIdentity INTEGER (0..15) OPTIONAL, -- Cond DRB-Setup + drb-Identity DRB-Identity, + pdcp-Config PDCP-Config OPTIONAL, -- Cond PDCP + rlc-Config RLC-Config OPTIONAL, -- Cond Setup + logicalChannelIdentity INTEGER (3..10) OPTIONAL, -- Cond DRB-Setup + logicalChannelConfig LogicalChannelConfig OPTIONAL, -- Cond Setup + ... +} + +DRB-ToReleaseList ::= SEQUENCE (SIZE (1..maxDRB)) OF DRB-Identity + +MeasSubframePatternPCell-r10 ::= CHOICE { + release NULL, + setup MeasSubframePattern-r10 +} + +-- ASN1STOP + +RadioResourceConfigDedicated field descriptions logicalChannelConfig +For SRBs a choice is used to indicate whether the logical channel configuration is signalled explicitly or set to the default logical channel configuration for SRB1 as specified in 9.2.1.1 or for SRB2 as specified in 9.2.1.2. logicalChannelIdentity +The logical channel identity for both UL and DL. mac-MainConfig +Although the ASN.1 includes a choice that is used to indicate whether the mac-MainConfig is signalled explicitly or set to the default MAC main configuration as specified in 9.2.2, EUTRAN does not apply "defaultValue". measSubframePatternPCell +Time domain measurement resource restriction pattern for the PCell measurements (RSRP, RSRQ and the radio link monitoring). physicalConfigDedicated +The default dedicated physical configuration is specified in 9.2.4. rlc-Config +For SRBs a choice is used to indicate whether the RLC configuration is signalled explicitly or set to the values defined in the default RLC configuration for SRB1 in 9.2.1.1 or for SRB2 in 9.2.1.2. RLC AM is the only applicable RLC mode for SRB1 and SRB2. E-UTRAN does not reconfigure the RLC mode of DRBs except when a full configuration option is used, and may reconfigure the UM RLC SN field size only upon handover within E-UTRA or upon the first reconfiguration after RRC connection re-establishment. sps-Config +The default SPS configuration is specified in 9.2.3. Except for handover or releasing SPS, E-UTRAN does not reconfigure sps-Config when there is a configured downlink assignment or a configured uplink grant (see 36.321 [6]). srb-Identity +Value 1 is applicable for SRB1 only. +Value 2 is applicable for SRB2 only. +Conditional presence Explanation DRB-Setup The field is mandatory present if the corresponding DRB is being set up; otherwise it is not present. HO-Conn The field is mandatory present in case of handover to E-UTRA or when the fullConfig is included in the RRCConnectionReconfiguration message or in case of RRC connection establishment; otherwise the field is optionally present, need ON. Upon connection establishment/ re-establishment only SRB1 is applicable. HO-toEUTRA The field is mandatory present in case of handover to E-UTRA or when the fullConfig is included in the RRCConnectionReconfiguration message; In case of RRC connection establishment and RRC connection re-establishment the field is not present; otherwise the field is optionally present, need ON. HO-toEUTRA2 The field is mandatory present in case of handover to E-UTRA or when the fullConfig is included in the RRCConnectionReconfiguration message; otherwise the field is optionally present, need ON. PDCP The field is mandatory present if the corresponding DRB is being setup; the field is optionally present, need ON, upon handover within E-UTRA and upon the first reconfiguration after re-establishment but in both these cases only when fullConfig is not included in the RRCConnectionReconfiguration message; otherwise it is not present. Setup The field is mandatory present if the corresponding SRB/DRB is being setup; otherwise the field is optionally present, need ON. +– RLC-Config +The IE RLC-Config is used to specify the RLC configuration of SRBs and DRBs. +RLC-Config information element +-- ASN1START + +RLC-Config ::= CHOICE { + am SEQUENCE { + ul-AM-RLC UL-AM-RLC, + dl-AM-RLC DL-AM-RLC + }, + um-Bi-Directional SEQUENCE { + ul-UM-RLC UL-UM-RLC, + dl-UM-RLC DL-UM-RLC + }, + um-Uni-Directional-UL SEQUENCE { + ul-UM-RLC UL-UM-RLC + }, + um-Uni-Directional-DL SEQUENCE { + dl-UM-RLC DL-UM-RLC + }, + ... +} + +UL-AM-RLC ::= SEQUENCE { + t-PollRetransmit T-PollRetransmit, + pollPDU PollPDU, + pollByte PollByte, + maxRetxThreshold ENUMERATED { + t1, t2, t3, t4, t6, t8, t16, t32} +} + +DL-AM-RLC ::= SEQUENCE { + t-Reordering T-Reordering, + t-StatusProhibit T-StatusProhibit +} + +UL-UM-RLC ::= SEQUENCE { + sn-FieldLength SN-FieldLength +} + +DL-UM-RLC ::= SEQUENCE { + sn-FieldLength SN-FieldLength, + t-Reordering T-Reordering +} + +SN-FieldLength ::= ENUMERATED {size5, size10} + +T-PollRetransmit ::= ENUMERATED { + ms5, ms10, ms15, ms20, ms25, ms30, ms35, + ms40, ms45, ms50, ms55, ms60, ms65, ms70, + ms75, ms80, ms85, ms90, ms95, ms100, ms105, + ms110, ms115, ms120, ms125, ms130, ms135, + ms140, ms145, ms150, ms155, ms160, ms165, + ms170, ms175, ms180, ms185, ms190, ms195, + ms200, ms205, ms210, ms215, ms220, ms225, + ms230, ms235, ms240, ms245, ms250, ms300, + ms350, ms400, ms450, ms500, spare9, spare8, + spare7, spare6, spare5, spare4, spare3, + spare2, spare1} + +PollPDU ::= ENUMERATED { + p4, p8, p16, p32, p64, p128, p256, pInfinity} + +PollByte ::= ENUMERATED { + kB25, kB50, kB75, kB100, kB125, kB250, kB375, + kB500, kB750, kB1000, kB1250, kB1500, kB2000, + kB3000, kBinfinity, spare1} + +T-Reordering ::= ENUMERATED { + ms0, ms5, ms10, ms15, ms20, ms25, ms30, ms35, + ms40, ms45, ms50, ms55, ms60, ms65, ms70, + ms75, ms80, ms85, ms90, ms95, ms100, ms110, + ms120, ms130, ms140, ms150, ms160, ms170, + ms180, ms190, ms200, spare1} + +T-StatusProhibit ::= ENUMERATED { + ms0, ms5, ms10, ms15, ms20, ms25, ms30, ms35, + ms40, ms45, ms50, ms55, ms60, ms65, ms70, + ms75, ms80, ms85, ms90, ms95, ms100, ms105, + ms110, ms115, ms120, ms125, ms130, ms135, + ms140, ms145, ms150, ms155, ms160, ms165, + ms170, ms175, ms180, ms185, ms190, ms195, + ms200, ms205, ms210, ms215, ms220, ms225, + ms230, ms235, ms240, ms245, ms250, ms300, + ms350, ms400, ms450, ms500, spare8, spare7, + spare6, spare5, spare4, spare3, spare2, + spare1} + +-- ASN1STOP + +RLC-Config field descriptions maxRetxThreshold +Parameter for RLC AM in TS 36.322 [7]. Value t1 corresponds to 1 retransmission, t2 to 2 retransmissions and so on. pollByte +Parameter for RLC AM in TS 36.322 [7]. Value kB25 corresponds to 25 kBytes, kB50 to 50 kBytes and so on. kBInfinity corresponds to an infinite amount of kBytes. pollPDU +Parameter for RLC AM in TS 36.322 [7]. Value p4 corresponds to 4 PDUs, p8 to 8 PDUs and so on. pInfinity corresponds to an infinite number of PDUs. sn-FieldLength +Indicates the UM RLC SN field size, see TS 36.322 [7], in bits. Value size5 means 5 bits, size10 means 10 bits. t-PollRetransmit +Timer for RLC AM in TS 36.322 [7], in milliseconds. Value ms5 means 5ms, ms10 means 10ms and so on. t-Reordering +Timer for reordering in TS 36.322 [7], in milliseconds. Value ms0 means 0ms, ms5 means 5ms and so on. t-StatusProhibit +Timer for status reporting in TS 36.322 [7], in milliseconds. Value ms0 means 0ms, ms5 means 5ms and so on. +– RLF-TimersAndConstants +The IE RLF-TimersAndConstants contains UE specific timers and constants applicable for UEs in RRC_CONNECTED. +RLF-TimersAndConstants information element +-- ASN1START + +RLF-TimersAndConstants-r9 ::= CHOICE { + release NULL, + setup SEQUENCE { + t301-r9 ENUMERATED { + ms100, ms200, ms300, ms400, ms600, ms1000, ms1500, + ms2000}, + t310-r9 ENUMERATED { + ms0, ms50, ms100, ms200, ms500, ms1000, ms2000}, + n310-r9 ENUMERATED { + n1, n2, n3, n4, n6, n8, n10, n20}, + t311-r9 ENUMERATED { + ms1000, ms3000, ms5000, ms10000, ms15000, + ms20000, ms30000}, + n311-r9 ENUMERATED { + n1, n2, n3, n4, n5, n6, n8, n10}, + ... + } +} + +-- ASN1STOP + +RLF-TimersAndConstants field descriptions n3xy +Constants are described in section 7.4. n1 corresponds with 1, n2 corresponds with 2 and so on. t3xy +Timers are described in section 7.3. Value ms0 corresponds with 0 ms, ms50 corresponds with 50 ms and so on. +– RN-SubframeConfig +The IE RN-SubframeConfig is used to specify the subframe configuration for an RN. +RN-SubframeConfig information element +-- ASN1START + +RN-SubframeConfig-r10 ::= SEQUENCE { + subframeConfigPattern-r10 CHOICE { + subframeConfigPatternFDD-r10 BIT STRING (SIZE(8)), + subframeConfigPatternTDD-r10 INTEGER (0..31) + } OPTIONAL, -- Need ON + rpdcch-Config-r10 SEQUENCE { + resourceAllocationType-r10 ENUMERATED {type0, type1, type2Localized, type2Distributed, + spare4, spare3, spare2, spare1}, + resourceBlockAssignment-r10 CHOICE { + type01-r10 CHOICE { + nrb6-r10 BIT STRING (SIZE(6)), + nrb15-r10 BIT STRING (SIZE(8)), + nrb25-r10 BIT STRING (SIZE(13)), + nrb50-r10 BIT STRING (SIZE(17)), + nrb75-r10 BIT STRING (SIZE(19)), + nrb100-r10 BIT STRING (SIZE(25)) + }, + type2-r10 CHOICE { + nrb6-r10 BIT STRING (SIZE(5)), + nrb15-r10 BIT STRING (SIZE(7)), + nrb25-r10 BIT STRING (SIZE(9)), + nrb50-r10 BIT STRING (SIZE(11)), + nrb75-r10 BIT STRING (SIZE(12)), + nrb100-r10 BIT STRING (SIZE(13)) + }, + ... + }, + demodulationRS-r10 CHOICE { + interleaving-r10 ENUMERATED {crs}, + noInterleaving-r10 ENUMERATED {crs, dmrs} + }, + pdsch-Start-r10 INTEGER (1..3), + pucch-Config-r10 CHOICE { + tdd CHOICE { + channelSelectionMultiplexingBundling SEQUENCE { + n1PUCCH-AN-List-r10 SEQUENCE (SIZE (1..4)) OF INTEGER (0..2047) + }, + fallbackForFormat3 SEQUENCE { + n1PUCCH-AN-P0-r10 INTEGER (0..2047), + n1PUCCH-AN-P1-r10 INTEGER (0..2047) OPTIONAL -- Need OR + } + }, + fdd SEQUENCE { + n1PUCCH-AN-P0-r10 INTEGER (0..2047), + n1PUCCH-AN-P1-r10 INTEGER (0..2047) OPTIONAL -- Need OR + } + }, + ... + } OPTIONAL, -- Need ON + ... +} + +-- ASN1STOP + +RN-SubframeConfig field descriptions demodulationRS +Indicates which reference signals are used for R-PDCCH demodulation according to TS 36.216 [55, 7.4.1]. Value interleaving corresponds to cross-interleaving and value noInterleaving corresponds to no cross-interleaving according to TS 36.216 [55, 7.4.2 and 7.4.3]. n1PUCCH-AN-List +Parameter: , see TS 36.216, [55, 7.5.1]. This parameter is only applicable for TDD. Configures PUCCH HARQ-ACK resources if the RN is configured to use HARQ-ACK channel selection, HARQ-ACK multiplexing or HARQ-ACK bundling. n1PUCCH-AN-P0, n1PUCCH-AN-P1 +Parameter: , for antenna port P0 and for antenna port P1 respectively, see TS 36.216, [55, 7.5.1] for FDD and [55, 7.5.2] for TDD. pdsch-Start +Parameter: DL-StartSymbol, see TS 36.216 [55, Table 5.4-1]. resourceAllocationType +Represents the resource allocation used: type 0, type 1 or type 2 according to TS 36.213 [23, 7.1.6]. Value type0 corresponds to type 0, value type1 corresponds to type 1, value type2Localized corresponds to type 2 with localized virtual resource blocks and type2Distributed corresponds to type 2 with distributed virtual resource blocks. resourceBlockAssignment +Indicates the resource block assignment bits according to TS 36.213 [23, 7.1.6]. Value type01 corresponds to type 0 and type 1, and the value type2 corresponds to type 2. Value nrb6 corresponds to a downlink system bandwidth of 6 resource blocks, value nrb15 corresponds to a downlink system bandwidth of 15 resource blocks, and so on. subframeConfigPatternFDD +Parameter: SubframeConfigurationFDD, see TS 36.216 [55, Table 5.2-1]. Defines the DL subframe configuration for eNB-to-RN transmission, i.e. those subframes in which the eNB may indicate downlink assignments for the RN. The radio frame in which the pattern starts (i.e. the radio frame in which the first bit of the subframeConfigPatternFDD corresponds to subframe #0) occurs when SFN mod 4 = 0. subframeConfigPatternTDD +Parameter: SubframeConfigurationTDD, see TS 36.216 [55, Table 5.2-2]. Defines the DL and UL subframe configuration for eNB-RN transmission. +– SchedulingRequestConfig +The IE SchedulingRequestConfig is used to specify the Scheduling Request related parameters +SchedulingRequestConfig information element +-- ASN1START + +SchedulingRequestConfig ::= CHOICE { + release NULL, + setup SEQUENCE { + sr-PUCCH-ResourceIndex INTEGER (0..2047), + sr-ConfigIndex INTEGER (0..157), + dsr-TransMax ENUMERATED { + n4, n8, n16, n32, n64, spare3, spare2, spare1} + } +} + +SchedulingRequestConfig-v1020 ::= SEQUENCE { + sr-PUCCH-ResourceIndexP1-r10 INTEGER (0..2047) OPTIONAL -- Need OR +} + +-- ASN1STOP + +SchedulingRequestConfig field descriptions dsr-TransMax +Parameter for SR transmission in TS 36.321 [6, 5.4.4]. The value n4 corresponds to 4 transmissions, n8 corresponds to 8 transmissions and so on. sr-ConfigIndex +Parameter. See TS 36.213 [23,10.1]. The values 156 and 157 are not applicable for Release 8. sr-PUCCH-ResourceIndex, sr-PUCCH-ResourceIndexP1 +Parameter: for antenna port P0 and for antenna port P1 respectively, see TS 36.213 [23, 10.1]. E-UTRAN configures sr-PUCCH-ResourceIndexP1 only if sr-PUCCHResourceIndex is configured. +– SoundingRS-UL-Config +The IE SoundingRS-UL-Config is used to specify the uplink Sounding RS configuration for periodic and aperiodic sounding. +SoundingRS-UL-Config information element +-- ASN1START + +SoundingRS-UL-ConfigCommon ::= CHOICE { + release NULL, + setup SEQUENCE { + srs-BandwidthConfig ENUMERATED {bw0, bw1, bw2, bw3, bw4, bw5, bw6, bw7}, + srs-SubframeConfig ENUMERATED { + sc0, sc1, sc2, sc3, sc4, sc5, sc6, sc7, + sc8, sc9, sc10, sc11, sc12, sc13, sc14, sc15}, + ackNackSRS-SimultaneousTransmission BOOLEAN, + srs-MaxUpPts ENUMERATED {true} OPTIONAL -- Cond TDD + } +} + +SoundingRS-UL-ConfigDedicated ::= CHOICE{ + release NULL, + setup SEQUENCE { + srs-Bandwidth ENUMERATED {bw0, bw1, bw2, bw3}, + srs-HoppingBandwidth ENUMERATED {hbw0, hbw1, hbw2, hbw3}, + freqDomainPosition INTEGER (0..23), + duration BOOLEAN, + srs-ConfigIndex INTEGER (0..1023), + transmissionComb INTEGER (0..1), + cyclicShift ENUMERATED {cs0, cs1, cs2, cs3, cs4, cs5, cs6, cs7} + } +} + +SoundingRS-UL-ConfigDedicated-v1020 ::= SEQUENCE { + srs-AntennaPort-r10 SRS-AntennaPort +} + +SoundingRS-UL-ConfigDedicatedAperiodic-r10 ::= CHOICE{ + release NULL, + setup SEQUENCE { + srs-ConfigIndexAp-r10 INTEGER (0..31), + srs-ConfigApDCI-Format4-r10 SEQUENCE (SIZE (1..3)) OF SRS-ConfigAp-r10 OPTIONAL,--Need ON + srs-ActivateAp-r10 CHOICE { + release NULL, + setup SEQUENCE { + srs-ConfigApDCI-Format0-r10 SRS-ConfigAp-r10, + srs-ConfigApDCI-Format1a2b2c-r10 SRS-ConfigAp-r10, + ... + } + } OPTIONAL -- Need ON + } +} + +SRS-ConfigAp-r10 ::= SEQUENCE { + srs-AntennaPortAp-r10 SRS-AntennaPort, + srs-BandwidthAp-r10 ENUMERATED {bw0, bw1, bw2, bw3}, + freqDomainPositionAp-r10 INTEGER (0..23), + transmissionCombAp-r10 INTEGER (0..1), + cyclicShiftAp-r10 ENUMERATED {cs0, cs1, cs2, cs3, cs4, cs5, cs6, cs7} +} + +SRS-AntennaPort ::= ENUMERATED {an1, an2, an4, spare1} + +-- ASN1STOP + +SoundingRS-UL-Config field descriptions ackNackSRS-SimultaneousTransmission +Parameter: Simultaneous-AN-and-SRS, see TS 36.213 [23, 8.2]. For SCells this field is not applicable and the UE shall ignore the value. cyclicShift, cyclicShiftAp +Parameter: n_SRS for periodic and aperiodic sounding reference signal transmission respectively. See TS 36.211 [21, 5.5.3.1], where cs0 corresponds to 0 etc. duration +Parameter: Duration for periodic sounding reference signal transmission. See TS 36.213 [21, 8.2]. FALSE corresponds to “single” and value TRUE to “indefinite”. freqDomainPosition, freqDomainPositionAp +Parameter: for periodic and aperiodic sounding reference signal transmission respectively, see TS 36.211 [21, 5.5.3.2]. srs-AntennaPort, srs-AntennaPortAp +Indicates the number of antenna ports used for periodic and aperiodic sounding reference signal transmission respectively, see TS 36.211 [21, 5.5.3]. UE shall release srs-AntennaPort if SoundingRS-UL-ConfigDedicated is released. srs-Bandwidth, srs-BandwidthAp +Parameter: for periodic and aperiodic sounding reference signal transmission respectively, see TS 36.211 [21, tables 5.5.3.2-1, 5.5.3.2-2, 5.5.3.2-3 and 5.5.3.2-4]. srs-BandwidthConfig +Parameter: SRS Bandwidth Configuration. See TS 36.211, [21, table 5.5.3.2-1, 5.5.3.2-2, 5.5.3.2-3 and 5.5.3.2-4]. Actual configuration depends on UL bandwidth. bw0 corresponds to value 0, bw1 to value 1 and so on. srs-ConfigApDCI-Format0 / srs-ConfigApDCI-Format1a2b2c / srs-ConfigApDCI-Format4 +Parameters indicate the resource configurations for aperiodic sounding reference signal transmissions triggered by DCI formats 0, 1A, 2B, 2C, 4. See TS 36.213 [23, 8.2]. srs-ConfigIndex, srs-ConfigIndexAp +Parameter: ISRS for periodic and aperiodic sounding reference signal transmission respectively. See TS 36.213 [23, table 8.2-1 and table 8.2-2] for periodic and TS 36.213 [23, table 8.2-4 and table 8.2-5] for aperiodic SRS transmission. srs-HoppingBandwidth +Parameter: SRS hopping bandwidth for periodic sounding reference signal transmission, see TS 36.211 [21, 5.5.3.2] where hbw0 corresponds to value 0, hbw1 to value 1 and so on. srs-MaxUpPts +Parameter: srsMaxUpPts, see TS 36.211 [21, 5.5.3.2]. If this field is present, reconfiguration of applies for UpPts, otherwise reconfiguration does not apply. srs-SubframeConfig +Parameter: SRS SubframeConfiguration. See TS 36.211, [21, table 5.5.3.3-1] applies for FDD whereas TS 36.211, [21, table 5.5.3.3-2] applies for TDD. sc0 corresponds to value 0, sc1 to value 1 and so on. transmissionComb, transmissionCombAp +Parameter: for periodic and aperiodic sounding reference signal transmission respectively, see TS 36.211 [21, 5.5.3.2]. +Conditional presence Explanation TDD This field is optional present for TDD, need OR; it is not present for FDD and the UE shall delete any existing value for this field. +– SPS-Config +The IE SPS-Config is used to specify the semi-persistent scheduling configuration. +SPS-Config information element +-- ASN1START + +SPS-Config ::= SEQUENCE { + semiPersistSchedC-RNTI C-RNTI OPTIONAL, -- Need OR + sps-ConfigDL SPS-ConfigDL OPTIONAL, -- Need ON + sps-ConfigUL SPS-ConfigUL OPTIONAL -- Need ON +} + +SPS-ConfigDL ::= CHOICE{ + release NULL, + setup SEQUENCE { + semiPersistSchedIntervalDL ENUMERATED { + sf10, sf20, sf32, sf40, sf64, sf80, + sf128, sf160, sf320, sf640, spare6, + spare5, spare4, spare3, spare2, + spare1}, + numberOfConfSPS-Processes INTEGER (1..8), + n1PUCCH-AN-PersistentList N1PUCCH-AN-PersistentList, + ..., + [[ twoAntennaPortActivated-r10 CHOICE { + release NULL, + setup SEQUENCE { + n1PUCCH-AN-PersistentListP1-r10 N1PUCCH-AN-PersistentList + } + } OPTIONAL -- Need ON + ]] + } +} + +SPS-ConfigUL ::= CHOICE { + release NULL, + setup SEQUENCE { + semiPersistSchedIntervalUL ENUMERATED { + sf10, sf20, sf32, sf40, sf64, sf80, + sf128, sf160, sf320, sf640, spare6, + spare5, spare4, spare3, spare2, + spare1}, + implicitReleaseAfter ENUMERATED {e2, e3, e4, e8}, + p0-Persistent SEQUENCE { + p0-NominalPUSCH-Persistent INTEGER (-126..24), + p0-UE-PUSCH-Persistent INTEGER (-8..7) + } OPTIONAL, -- Need OP + twoIntervalsConfig ENUMERATED {true} OPTIONAL, -- Cond TDD + ... + } +} + +N1PUCCH-AN-PersistentList ::= SEQUENCE (SIZE (1..4)) OF INTEGER (0..2047) + +-- ASN1STOP + +SPS-Config field descriptions implicitReleaseAfter +Number of empty transmissions before implicit release, see TS 36.321 [6, 5.10.2]. Value e2 corresponds to 2 transmissions, e3 corresponds to 3 transmissions and so on. n1PUCCH-AN-PersistentList , n1PUCCH-AN-PersistentListP1 +List of parameter: for antenna port P0 and for antenna port P1 respectively, see TS 36.213 [23, 10.1]. Field n1-PUCCH-AN-PersistentListP1 is applicable only if the twoAntennaPortActivatedPUCCH-Format1a1b in PUCCH-ConfigDedicated-v1020 is set to true. Otherwise the field is not configured. numberOfConfSPS-Processes +The number of configured HARQ processes for Semi-Persistent Scheduling, see TS 36.321 [6]. p0-NominalPUSCH-Persistent +Parameter: . See TS 36.213 [23, 5.1.1.1], unit dBm step 1. This field is applicable for persistent scheduling, only. If choice setup is used and p0-Persistent is absent, apply the value of p0-NominalPUSCH for p0-NominalPUSCH-Persistent. p0-UE-PUSCH-Persistent +Parameter: . See TS 36.213 [23, 5.1.1.1], unit dB. This field is applicable for persistent scheduling, only. If choice setup is used and p0-Persistent is absent, apply the value of p0-UE-PUSCH for p0-UE-PUSCH-Persistent. semiPersistSchedC-RNTI +Semi-persistent Scheduling C-RNTI, see TS 36.321 [6]. semiPersistSchedIntervalDL +Semi-persistent scheduling interval in downlink, see TS 36.321 [6]. Value in number of sub-frames. Value sf10 corresponds to 10 sub-frames, sf20 corresponds to 20 sub-frames and so on. For TDD, the UE shall round this parameter down to the nearest integer (of 10 sub-frames), e.g. sf10 corresponds to 10 sub-frames, sf32 corresponds to 30 sub-frames, sf128 corresponds to 120 sub-frames. semiPersistSchedIntervalUL +Semi-persistent scheduling interval in uplink, see TS 36.321 [6]. Value in number of sub-frames. Value sf10 corresponds to 10 sub-frames, sf20 corresponds to 20 sub-frames and so on. For TDD, the UE shall round this parameter down to the nearest integer (of 10 sub-frames), e.g. sf10 corresponds to 10 sub-frames, sf32 corresponds to 30 sub-frames, sf128 corresponds to 120 sub-frames. twoIntervalsConfig +Trigger of two-intervals-Semi-Persistent Scheduling in uplink. See TS 36.321 [6, 5.10]. If this field is present, two-intervals-SPS is enabled for uplink. Otherwise, two-intervals-SPS is disabled. +Conditional presence Explanation TDD This field is optional present for TDD, need OR; it is not present for FDD and the UE shall delete any existing value for this field. +– TDD-Config +The IE TDD-Config is used to specify the TDD specific physical channel configuration. +TDD-Config information element +-- ASN1START + +TDD-Config ::= SEQUENCE { + subframeAssignment ENUMERATED { + sa0, sa1, sa2, sa3, sa4, sa5, sa6}, + specialSubframePatterns ENUMERATED { + ssp0, ssp1, ssp2, ssp3, ssp4,ssp5, ssp6, ssp7, + ssp8} +} + +-- ASN1STOP + +TDD-Config field descriptions specialSubframePatterns +Indicates Configuration as in TS 36.211 [21, table 4.2-1] where ssp0 point to Configuration 0, ssp1 to Configuration 1 etc. subframeAssignment +Indicates DL/UL subframe configuration where sa0 point to Configuration 0, sa1 to Configuration 1 etc. as specified in TS 36.211 [21, table 4.2-2]. One value applies for all serving cells (the associated functionality is common i.e. not performed independently for each cell) +– TimeAlignmentTimer +The IE TimeAlignmentTimer is used to control how long the UE is considered uplink time aligned. Corresponds to the Timer for time alignment in TS 36.321 [6]. Value in number of sub-frames. Value sf500 corresponds to 500 sub-frames, sf750 corresponds to 750 sub-frames and so on. In this release of the specification, uplink time alignment is common for all serving cells. +TimeAlignmentTimer information element +-- ASN1START + +TimeAlignmentTimer ::= ENUMERATED { + sf500, sf750, sf1280, sf1920, sf2560, sf5120, + sf10240, infinity} +-- ASN1STOP + +– TPC-PDCCH-Config +The IE TPC-PDCCH-Config is used to specify the RNTIs and indexes for PUCCH and PUSCH power control according to TS 36.212 [22]. The power control function can either be setup or released with the IE. +TPC-PDCCH-Config information element +-- ASN1START + +TPC-PDCCH-Config ::= CHOICE { + release NULL, + setup SEQUENCE { + tpc-RNTI BIT STRING (SIZE (16)), + tpc-Index TPC-Index + } +} + +TPC-Index ::= CHOICE { + indexOfFormat3 INTEGER (1..15), + indexOfFormat3A INTEGER (1..31) +} + +-- ASN1STOP + +TPC-PDCCH-Config field descriptions indexOfFormat3 +Index of N when DCI format 3 is used. See TS 36.212 [22, 5.3.3.1.6]. IndexOfFormat3A +Index of M when DCI format 3A is used. See TS 36.212 [22, 5.3.3.1.7]. tpc-Index +Index of N or M, see TS 36.212 [22, 5.3.3.1.6 and 5.3.3.1.7], where N or M is dependent on the used DCI format (i.e. format 3 or 3a). tpc-RNTI +RNTI for power control using DCI format 3/3A, see TS 36.212 [22]. +– UplinkPowerControl +The IE UplinkPowerControlCommon and IE UplinkPowerControlDedicated are used to specify parameters for uplink power control in the system information and in the dedicated signalling, respectively. +UplinkPowerControl information elements +-- ASN1START + +UplinkPowerControlCommon ::= SEQUENCE { + p0-NominalPUSCH INTEGER (-126..24), + alpha ENUMERATED {al0, al04, al05, al06, al07, al08, al09, al1}, + p0-NominalPUCCH INTEGER (-127..-96), + deltaFList-PUCCH DeltaFList-PUCCH, + deltaPreambleMsg3 INTEGER (-1..6) +} + +UplinkPowerControlCommon-v1020 ::= SEQUENCE { + deltaF-PUCCH-Format3-r10 ENUMERATED {deltaF-1, deltaF0, deltaF1, deltaF2, + deltaF3, deltaF4, deltaF5, deltaF6}, + deltaF-PUCCH-Format1bCS-r10 ENUMERATED {deltaF1, deltaF2, spare2, spare1} +} + +UplinkPowerControlCommonSCell-r10 ::= SEQUENCE { + p0-NominalPUSCH-r10 INTEGER (-126..24), + alpha-r10 ENUMERATED {al0, al04, al05, al06, al07, al08, al09, al1} +} + +UplinkPowerControlDedicated ::= SEQUENCE { + p0-UE-PUSCH INTEGER (-8..7), + deltaMCS-Enabled ENUMERATED {en0, en1}, + accumulationEnabled BOOLEAN, + p0-UE-PUCCH INTEGER (-8..7), + pSRS-Offset INTEGER (0..15), + filterCoefficient FilterCoefficient DEFAULT fc4 +} + +UplinkPowerControlDedicated-v1020 ::= SEQUENCE { + deltaTxD-OffsetListPUCCH-r10 DeltaTxD-OffsetListPUCCH-r10 OPTIONAL, -- Need OR + pSRS-OffsetAp-r10 INTEGER (0..15) OPTIONAL -- Need OR +} + +UplinkPowerControlDedicatedSCell-r10 ::= SEQUENCE { + p0-UE-PUSCH-r10 INTEGER (-8..7), + deltaMCS-Enabled-r10 ENUMERATED {en0, en1}, + accumulationEnabled-r10 BOOLEAN, + pSRS-Offset-r10 INTEGER (0..15), + pSRS-OffsetAp-r10 INTEGER (0..15) OPTIONAL, -- Need OR + filterCoefficient-r10 FilterCoefficient DEFAULT fc4, + pathlossReferenceLinking-r10 ENUMERATED {pCell, sCell} +} + +DeltaFList-PUCCH ::= SEQUENCE { + deltaF-PUCCH-Format1 ENUMERATED {deltaF-2, deltaF0, deltaF2}, + deltaF-PUCCH-Format1b ENUMERATED {deltaF1, deltaF3, deltaF5}, + deltaF-PUCCH-Format2 ENUMERATED {deltaF-2, deltaF0, deltaF1, deltaF2}, + deltaF-PUCCH-Format2a ENUMERATED {deltaF-2, deltaF0, deltaF2}, + deltaF-PUCCH-Format2b ENUMERATED {deltaF-2, deltaF0, deltaF2} +} + +DeltaTxD-OffsetListPUCCH-r10 ::= SEQUENCE { + deltaTxD-OffsetPUCCH-Format1-r10 ENUMERATED {dB0, dB-2}, + deltaTxD-OffsetPUCCH-Format1a1b-r10 ENUMERATED {dB0, dB-2}, + deltaTxD-OffsetPUCCH-Format22a2b-r10 ENUMERATED {dB0, dB-2}, + deltaTxD-OffsetPUCCH-Format3-r10 ENUMERATED {dB0, dB-2}, + ... +} + +-- ASN1STOP + +UplinkPowerControl field descriptions accumulationEnabled +Parameter: Accumulation-enabled, see TS 36.213 [23, 5.1.1.1]. TRUE corresponds to “enabled” whereas FALSE corresponds to “disabled”. alpha +Parameter: ? See TS 36.213 [23, 5.1.1.1] where al0 corresponds to 0, al04 corresponds to value 0.4, al05 to 0.5, al06 to 0.6, al07 to 0.7, al08 to 0.8, al09 to 0.9 and al1 corresponds to 1. deltaF-PUCCH-FormatX +Parameter: for the PUCCH formats 1, 1b, 2, 2a, 2b, 3 and 1b with channel selection. See TS 36.213 [23, 5.1.2] where deltaF-2 corresponds to -2 dB, deltaF0 corresponds to 0 dB and so on. deltaMCS-Enabled +Parameter: Ks See TS 36.213 [23, 5.1.1.1]. en0 corresponds to value 0 corresponding to state “disabled”. en1 corresponds to value 1.25 corresponding to “enabled”. deltaPreambleMsg3 +Parameter: see TS 36.213 [23, 5.1.1.1]. Actual value = IE value * 2 [dB]. deltaTxD-OffsetPUCCH-FormatX +Parameter: for the PUCCH formats 1, 1a/1b, 2/2a/2b and 3 when two antenna ports are configured for PUCCH transmission. See TS 36.213 [23, 5.1.2.1] where dB0 corresponds to 0 dB, dB-2 corresponds to -2 dB. filterCoefficient +Specifies the filtering coefficient for RSRP measurements used to calculate path loss, as specified in TS 36.213 [23, 5.1.1.1]. The same filtering mechanism applies as for quantityConfig described in 5.5.3.2. p0-NominalPUCCH +Parameter: See TS 36.213, 5.1.2.1, unit dBm. p0-NominalPUSCH +Parameter: See TS 36.213, 5.1.1.1, unit dBm. This field is applicable for non-persistent scheduling, only. p0-UE-PUCCH +Parameter: See TS 36.213 [23, 5.1.2.1]. Unit dB p0-UE-PUSCH +Parameter: See TS 36.213 [23, 5.1.1.1], unit dB. This field is applicable for non-persistent scheduling, only. pathlossReferenceLinking +Indicates whether the UE shall apply as pathloss reference either the downlink of the PCell or of the SCell that corresponds with this uplink (i.e. according to the cellIdentification within the field sCellToAddMod). pSRS-Offset, pSRS-OffsetAp +Parameter: PSRS_OFFSET for periodic and aperiodic sounding reference signal transmission repectively. See TS 36.213 [23, 5.1.3.1]. For Ks=1.25, the actual parameter value is pSRS-Offset value – 3. For Ks=0, the actual parameter value is -10.5 + 1.5*pSRS-Offset value. +6.3.3 Security control information elements +– NextHopChainingCount +The IE NextHopChainingCount is used to update the KeNB key and corresponds to parameter NCC: See TS 33.401 [32, 7.2.8.4]. +NextHopChainingCount information element +-- ASN1START + +NextHopChainingCount ::= INTEGER (0..7) + +-- ASN1STOP + +– SecurityAlgorithmConfig +The IE SecurityAlgorithmConfig is used to configure AS integrity protection algorithm (SRBs) and AS ciphering algorithm (SRBs and DRBs). For RNs, the IE SecurityAlgorithmConfig is also used to configure AS integrity protection algorithm for DRBs between the RN and the E-UTRAN. +SecurityAlgorithmConfig information element +-- ASN1START + +SecurityAlgorithmConfig ::= SEQUENCE { + cipheringAlgorithm ENUMERATED { + eea0, eea1, eea2, spare5, spare4, spare3, + spare2, spare1, ...}, + integrityProtAlgorithm ENUMERATED { + eia0-v920, eia1, eia2, spare5, spare4, spare3, + spare2, spare1, ...} +} + +-- ASN1STOP + +SecurityAlgorithmConfig field descriptions cipheringAlgorithm +Indicates the ciphering algorithm to be used for SRBs and DRBs, as specified in TS 33.401 [32, 5.1.3.2]. integrityProtAlgorithm +Indicates the integrity protection algorithm to be used for SRBs, as specified in TS 33.401 [32, 5.1.4.2]. For RNs, also indicates the integrity protection algorithm to be used for integrity protection-enabled DRB(s). +– ShortMAC-I +The IE ShortMAC-I is used to identify and verify the UE at RRC connection re-establishment. The 16 least significant bits of the MAC-I calculated using the security configuration of the source PCell, as specified in 5.3.7.4. +ShortMAC-I information element +-- ASN1START + +ShortMAC-I ::= BIT STRING (SIZE (16)) + +-- ASN1STOP + +6.3.4 Mobility control information elements +– AdditionalSpectrumEmission +AdditionalSpectrumEmission information element +-- ASN1START + +AdditionalSpectrumEmission ::= INTEGER (1..32) + +-- ASN1STOP + +– ARFCN-ValueCDMA2000 +The IE ARFCN-ValueCDMA2000 used to indicate the CDMA2000 carrier frequency within a CDMA2000 band, see C.S0002-A [12]. +ARFCN-ValueCDMA2000 information element +-- ASN1START + +ARFCN-ValueCDMA2000 ::= INTEGER (0..2047) + +-- ASN1STOP + +– ARFCN-ValueEUTRA +The IE ARFCN-ValueEUTRA is used to indicate the ARFCN applicable for a downlink, uplink or bi-directional (TDD) E-UTRA carrier frequency, as defined in TS 36.101 [42]. If an extension is signalled using the extended value range (as defined by IE ARFCN-ValueEUTRA-v9e0), the UE shall only consider this extension (and hence ignore the corresponding original field, using the value range as defined by IE ARFCN-ValueEUTRA i.e. without suffix, if signalled). In dedicated signalling, E-UTRAN only provides an EARFCN corresponding to an E-UTRA band supported by the UE. +ARFCN-ValueEUTRA information element +-- ASN1START + +ARFCN-ValueEUTRA ::= INTEGER (0..maxEARFCN) + +ARFCN-ValueEUTRA-v9e0 ::= INTEGER (maxEARFCN-Plus1..maxEARFCN2) + +ARFCN-ValueEUTRA-r9 ::= INTEGER (0..maxEARFCN2) + +-- ASN1STOP + +NOTE: For fields using the original value range, as defined by IE ARFCN-ValueEUTRA i.e. without suffix, value maxEARFCN indicates that the E-UTRA carrier frequency is indicated by means of an extension. In such a case, UEs not supporting the extension consider the field to be set to a not supported value. + +– ARFCN-ValueGERAN +The IE ARFCN-ValueGERAN is used to specify the ARFCN value applicable for a GERAN BCCH carrier frequency, see TS 45.005 [20]. +ARFCN-ValueGERAN information element +-- ASN1START + +ARFCN-ValueGERAN ::= INTEGER (0..1023) + +-- ASN1STOP + +– ARFCN-ValueUTRA +The IE ARFCN-ValueUTRA is used to indicate the ARFCN applicable for a downlink (Nd, FDD) or bi-directional (Nt, TDD) UTRA carrier frequency, as defined in TS 25.331 [19]. +ARFCN-ValueUTRA information element +-- ASN1START + +ARFCN-ValueUTRA ::= INTEGER (0..16383) + +-- ASN1STOP + +– BandclassCDMA2000 +The IE BandclassCDMA2000 is used to define the CDMA2000 band in which the CDMA2000 carrier frequency can be found, as defined in C.S0057-E [24, table 1.5-1]. +BandclassCDMA2000 information element +-- ASN1START + +BandclassCDMA2000 ::= ENUMERATED { + bc0, bc1, bc2, bc3, bc4, bc5, bc6, bc7, bc8, + bc9, bc10, bc11, bc12, bc13, bc14, bc15, bc16, + bc17, bc18-v9a0, bc19-v9a0, bc20-v9a0, bc21-v9a0, + spare10, spare9, spare8, spare7, spare6, spare5, spare4, + spare3, spare2, spare1, ...} + +-- ASN1STOP + +– BandIndicatorGERAN +The IE BandIndicatorGERAN indicates how to interpret an associated GERAN carrier ARFCN, see TS 45.005 [20]. More specifically, the IE indicates the GERAN frequency band in case the ARFCN value can concern either a DCS 1800 or a PCS 1900 carrier frequency. For ARFCN values not associated with one of these bands, the indicator has no meaning. +BandIndicatorGERAN information element +-- ASN1START + +BandIndicatorGERAN ::= ENUMERATED {dcs1800, pcs1900} + +-- ASN1STOP + +– CarrierFreqCDMA2000 +The IE CarrierFreqCDMA2000 used to provide the CDMA2000 carrier information. +CarrierFreqCDMA2000 information element +-- ASN1START + +CarrierFreqCDMA2000 ::= SEQUENCE { + bandClass BandclassCDMA2000, + arfcn ARFCN-ValueCDMA2000 +} + +-- ASN1STOP + +– CarrierFreqGERAN +The IE CarrierFreqGERAN is used to provide an unambiguous carrier frequency description of a GERAN cell. +CarrierFreqGERAN information element +-- ASN1START + +CarrierFreqGERAN ::= SEQUENCE { + arfcn ARFCN-ValueGERAN, + bandIndicator BandIndicatorGERAN +} + +-- ASN1STOP + +CarrierFreqGERAN field descriptions arfcn +GERAN ARFCN of BCCH carrier. bandIndicator +Indicates how to interpret the ARFCN of the BCCH carrier. +– CarrierFreqsGERAN +The IE CarrierFreqListGERAN is used to provide one or more GERAN ARFCN values, as defined in TS 44.005 [43], which represents a list of GERAN BCCH carrier frequencies. +CarrierFreqsGERAN information element +-- ASN1START + +CarrierFreqsGERAN ::= SEQUENCE { + startingARFCN ARFCN-ValueGERAN, + bandIndicator BandIndicatorGERAN, + followingARFCNs CHOICE { + explicitListOfARFCNs ExplicitListOfARFCNs, + equallySpacedARFCNs SEQUENCE { + arfcn-Spacing INTEGER (1..8), + numberOfFollowingARFCNs INTEGER (0..31) + }, + variableBitMapOfARFCNs OCTET STRING (SIZE (1..16)) + } +} + +ExplicitListOfARFCNs ::= SEQUENCE (SIZE (0..31)) OF ARFCN-ValueGERAN + +-- ASN1STOP + +CarrierFreqsGERAN field descriptions arfcn-Spacing +Space, d, between a set of equally spaced ARFCN values. bandIndicator +Indicates how to interpret the ARFCN of the BCCH carrier. explicitListOfARFCNs +The remaining ARFCN values in the set are explicitly listed one by one. followingARFCNs +Field containing a representation of the remaining ARFCN values in the set. numberOfFollowingARFCNs +The number, n, of the remaining equally spaced ARFCN values in the set. The complete set of (n+1) ARFCN values is defined as: {s, ((s + d) mod 1024), ((s + 2*d) mod 1024) ... ((s + n*d) mod 1024)}. startingARFCN +The first ARFCN value, s, in the set. variableBitMapOfARFCNs +Bitmap field representing the remaining ARFCN values in the set. The leading bit of the first octet in the bitmap corresponds to the ARFCN = ((s + 1) mod 1024), the next bit to the ARFCN = ((s + 2) mod 1024), and so on. If the bitmap consist of N octets, the trailing bit of octet N corresponds to ARFCN = ((s + 8*N) mod 1024). The complete set of ARFCN values consists of ARFCN = s and the ARFCN values, where the corresponding bit in the bitmap is set to "1". +– CDMA2000-Type +The IE CDMA2000-Type is used to describe the type of CDMA2000 network. +CDMA2000-Type information element +-- ASN1START + +CDMA2000-Type ::= ENUMERATED {type1XRTT, typeHRPD} + +-- ASN1STOP + +– CellIdentity +The IE CellIdentity is used to unambiguously identify a cell within a PLMN. +CellIdentity information element +-- ASN1START + +CellIdentity ::= BIT STRING (SIZE (28)) + +-- ASN1STOP + +– CellIndexList +The IE CellIndexList concerns a list of cell indices, which may be used for different purposes. +CellIndexList information element +-- ASN1START + +CellIndexList ::= SEQUENCE (SIZE (1..maxCellMeas)) OF CellIndex + +CellIndex ::= INTEGER (1..maxCellMeas) + +-- ASN1STOP + +– CellReselectionPriority +The IE CellReselectionPriority concerns the absolute priority of the concerned carrier frequency/ set of frequencies (GERAN)/ bandclass (CDMA2000), as used by the cell reselection procedure. Corresponds with parameter "priority" in TS 36.304 [4]. Value 0 means: lowest priority. The UE behaviour for the case the field is absent, if applicable, is specified in TS 36.304 [4]. +CellReselectionPriority information element +-- ASN1START + +CellReselectionPriority ::= INTEGER (0..7) + +-- ASN1STOP + +– CSFB-RegistrationParam1XRTT +The IE CSFB-RegistrationParam1XRTT is used to indicate whether or not the UE shall perform a CDMA2000 1xRTT pre-registration if the UE does not have a valid / current pre-registration. +-- ASN1START + +CSFB-RegistrationParam1XRTT ::= SEQUENCE { + sid BIT STRING (SIZE (15)), + nid BIT STRING (SIZE (16)), + multipleSID BOOLEAN, + multipleNID BOOLEAN, + homeReg BOOLEAN, + foreignSIDReg BOOLEAN, + foreignNIDReg BOOLEAN, + parameterReg BOOLEAN, + powerUpReg BOOLEAN, + registrationPeriod BIT STRING (SIZE (7)), + registrationZone BIT STRING (SIZE (12)), + totalZone BIT STRING (SIZE (3)), + zoneTimer BIT STRING (SIZE (3)) +} + +CSFB-RegistrationParam1XRTT-v920 ::= SEQUENCE { + powerDownReg-r9 ENUMERATED {true} +} + +-- ASN1STOP + + +CSFB-RegistrationParam1XRTT field descriptions foreignNIDReg +The CDMA2000 1xRTT NID roamer registration indicator. foreignSIDReg +The CDMA2000 1xRTT SID roamer registration indicator. homeReg +The CDMA2000 1xRTT Home registration indicator. multipleNID +The CDMA2000 1xRTT Multiple NID storage indicator. multipleSID +The CDMA2000 1xRTT Multiple SID storage indicator. nid +Used along with the sid as a pair to control when the UE should Register or Re-Register with the CDMA2000 1xRTT network. parameterReg +The CDMA2000 1xRTT Parameter-change registration indicator. powerDownReg +The CDMA2000 1xRTT Power-down registration indicator. If set to TRUE, the UE that has a valid / current CDMA2000 1xRTT pre-registration will perform a CDMA2000 1xRTT power down registration when it is switched off. powerUpReg +The CDMA2000 1xRTT Power-up registration indicator. registrationPeriod +The CDMA2000 1xRTT Registration period. registrationZone +The CDMA2000 1xRTT Registration zone. sid +Used along with the nid as a pair to control when the UE should Register or Re-Register with the CDMA2000 1xRTT network. totalZone +The CDMA2000 1xRTT Number of registration zones to be retained. zoneTimer +The CDMA2000 1xRTT Zone timer length. +– CellGlobalIdEUTRA +The IE CellGlobalIdEUTRA specifies the Evolved Cell Global Identifier (ECGI), the globally unique identity of a cell in E-UTRA. +CellGlobalIdEUTRA information element +-- ASN1START + +CellGlobalIdEUTRA ::= SEQUENCE { + plmn-Identity PLMN-Identity, + cellIdentity CellIdentity +} + +-- ASN1STOP + +CellGlobalIdEUTRA field descriptions cellIdentity +Identity of the cell within the context of the PLMN. plmn-Identity +Identifies the PLMN of the cell as given by the first PLMN entry in the plmn-IdentityList in SystemInformationBlockType1. +– CellGlobalIdUTRA +The IE CellGlobalIdUTRA specifies the global UTRAN Cell Identifier, the globally unique identity of a cell in UTRA. +CellGlobalIdUTRA information element +-- ASN1START + +CellGlobalIdUTRA ::= SEQUENCE { + plmn-Identity PLMN-Identity, + cellIdentity BIT STRING (SIZE (28)) +} + +-- ASN1STOP + +CellGlobalIdUTRA field descriptions cellIdentity +UTRA Cell Identifier which is unique within the context of the identified PLMN as defined in TS 25.331 [19]. plmn-Identity +Identifies the PLMN of the cell as given by the common PLMN broadcast in the MIB, as defined in TS 25.331 [19]. +– CellGlobalIdGERAN +The IE CellGlobalIdGERAN specifies the Cell Global Identification (CGI), the globally unique identity of a cell in GERAN. +CellGlobalIdGERAN information element +-- ASN1START + +CellGlobalIdGERAN ::= SEQUENCE { + plmn-Identity PLMN-Identity, + locationAreaCode BIT STRING (SIZE (16)), + cellIdentity BIT STRING (SIZE (16)) +} + +-- ASN1STOP + +CellGlobalIdGERAN field descriptions cellIdentity +Cell Identifier which is unique within the context of the GERAN location area as defined in TS 23.003 [27]. locationAreaCode +A fixed length code identifying the location area within a PLMN as defined in TS 23.003 [27]. plmn-Identity +Identifies the PLMN of the cell, as defined in TS 23.003 [27].. +– CellGlobalIdCDMA2000 +The IE CellGlobalIdCDMA2000 specifies the Cell Global Identification (CGI), the globally unique identity of a cell in CDMA2000. +CellGlobalIdCDMA2000 information element +-- ASN1START + +CellGlobalIdCDMA2000 ::= CHOICE { + cellGlobalId1XRTT BIT STRING (SIZE (47)), + cellGlobalIdHRPD BIT STRING (SIZE (128)) +} + +-- ASN1STOP + +CellGlobalIdCDMA2000 field descriptions cellGlobalId1XRTT +Unique identifier for a CDMA2000 1xRTT cell, corresponds to BASEID, SID and NID parameters (in that order) defined in C.S0005-A [25]. cellGlobalIdHRPD +Unique identifier for a CDMA2000 HRPD cell, corresponds to SECTOR ID parameter defined in C.S0024-A [26, 14.9]. +– CSG-Identity +The IE CSG-Identity is used to identify a Closed Subscriber Group. +CSG-Identity information element +-- ASN1START + +CSG-Identity ::= BIT STRING (SIZE (27)) + +-- ASN1STOP + +– FreqBandIndicator +The IE FreqBandIndicator indicates the E-UTRA operating band as defined in TS 36.101 [42, table 5.5-1]. If an extension is signalled using the extended value range (as defined by IE FreqBandIndicator-v9e0), the UE shall only consider this extension (and hence ignore the corresponding original field, using the value range as defined by IE FreqBandIndicator i.e. without suffix, if signalled). +FreqBandIndicator information element +-- ASN1START + +FreqBandIndicator ::= INTEGER (1..maxFBI) + +FreqBandIndicator-v9e0 ::= INTEGER (maxFBI-Plus1..maxFBI2) + +-- ASN1STOP + +NOTE: For fields using the original value range, as defined by IE FreqBandIndicator i.e. without suffix, value maxFBI indicates that the frequency band is indicated by means of an extension. In such a case, UEs not supporting the extension consider the field to be set to a not supported value. + +– MobilityControlInfo +The IE MobilityControlInfo includes parameters relevant for network controlled mobility to/within EUTRA. +MobilityControlInfo information element +-- ASN1START + +MobilityControlInfo ::= SEQUENCE { + targetPhysCellId PhysCellId, + carrierFreq CarrierFreqEUTRA OPTIONAL, -- Cond HO-toEUTRA2 + carrierBandwidth CarrierBandwidthEUTRA OPTIONAL, -- Cond HO-toEUTRA + additionalSpectrumEmission AdditionalSpectrumEmission OPTIONAL, -- Cond HO-toEUTRA + t304 ENUMERATED { + ms50, ms100, ms150, ms200, ms500, ms1000, + ms2000, spare1}, + newUE-Identity C-RNTI, + radioResourceConfigCommon RadioResourceConfigCommon, + rach-ConfigDedicated RACH-ConfigDedicated OPTIONAL, -- Need OP + ..., + [[ carrierFreq-v9e0 CarrierFreqEUTRA-v9e0 OPTIONAL -- Need ON + ]] +} + +CarrierBandwidthEUTRA ::= SEQUENCE { + dl-Bandwidth ENUMERATED { + n6, n15, n25, n50, n75, n100, spare10, + spare9, spare8, spare7, spare6, spare5, + spare4, spare3, spare2, spare1}, + ul-Bandwidth ENUMERATED { + n6, n15, n25, n50, n75, n100, spare10, + spare9, spare8, spare7, spare6, spare5, + spare4, spare3, spare2, spare1} OPTIONAL -- Need OP +} + +CarrierFreqEUTRA ::= SEQUENCE { + dl-CarrierFreq ARFCN-ValueEUTRA, + ul-CarrierFreq ARFCN-ValueEUTRA OPTIONAL -- Cond FDD +} + +CarrierFreqEUTRA-v9e0 ::= SEQUENCE { + dl-CarrierFreq-v9e0 ARFCN-ValueEUTRA-r9, + ul-CarrierFreq-v9e0 ARFCN-ValueEUTRA-r9 OPTIONAL -- Cond FDD +} + +-- ASN1STOP + +MobilityControlInfo field descriptions additionalSpectrumEmission +For a UE with no SCells configured for UL in the same band as the PCell, the UE shall apply the value for the PCell until UE has acquired the corresponding value from SystemInformationBlockType2. For a UE with SCell(s) configured for UL in the same band as the PCell, the UE shall, in case all SCells configured for UL in that band are released after handover completion, apply the value for the PCell until UE has acquired the corresponding value from SystemInformationBlockType2. The UE requirements related to IE AdditionalSpectrumEmission are defined in TS 36.101 [42, table 6.2.4.1]. carrierBandwidth +Provides the parameters Downlink bandwidth, and Uplink bandwidth, see TS 36.101 [42]. carrierFreq +Provides the EARFCN to be used by the UE in the target cell. dl-Bandwidth +Parameter: Downlink bandwidth, see TS 36.101 [42]. rach-ConfigDedicated +The dedicated random access parameters. If absent the UE applies contention based random access as specified in TS 36.321 [6]. t304 +Timer T304 as described in section 7.3. ms50 corresponds with 50 ms, ms100 corresponds with 100 ms and so on. ul-Bandwidth +Parameter: Uplink bandwidth, see TS 36.101 [42, table 5.6-1]. For TDD, the parameter is absent and it is equal to downlink bandwidth. If absent for FDD, apply the same value as applies for the downlink bandwidth. +Conditional presence Explanation FDD The field is mandatory with default value (the default duplex distance defined for the concerned band, as specified in TS 36.101 [42]) in case of “FDD”; otherwise the field is not present. HO-toEUTRA The field is mandatory present in case of inter-RAT handover to E-UTRA; otherwise the field is optionally present, need ON. HO-toEUTRA2 The field is absent if carrierFreq-v9e0 is present. Otherwise it is mandatory present in case of inter-RAT handover to E-UTRA and optionally present, need ON, in all other cases. +– MobilityParametersCDMA2000 (1xRTT) +The MobilityParametersCDMA2000 contains the parameters provided to the UE for handover and (enhanced) CSFB to 1xRTT support, as defined in C.S0097 [53]. +MobilityParametersCDMA2000 information element +-- ASN1START + +MobilityParametersCDMA2000 ::= OCTET STRING + +-- ASN1STOP + +– MobilityStateParameters +The IE MobilityStateParameters contains parameters to determine UE mobility state. +MobilityStateParameters information element +-- ASN1START + +MobilityStateParameters ::= SEQUENCE { + t-Evaluation ENUMERATED { + s30, s60, s120, s180, s240, spare3, spare2, spare1}, + t-HystNormal ENUMERATED { + s30, s60, s120, s180, s240, spare3, spare2, spare1}, + n-CellChangeMedium INTEGER (1..16), + n-CellChangeHigh INTEGER (1..16) +} + +-- ASN1STOP + +MobilityStateParameters field descriptions n-CellChangeHigh +The number of cell changes to enter high mobility state. Corresponds to NCR_H in TS 36.304 [4]. n-CellChangeMedium +The number of cell changes to enter medium mobility state. Corresponds to NCR_M in TS 36.304 [4]. t-Evaluation +The duration for evaluating criteria to enter mobility states. Corresponds to TCRmax in TS 36.304 [4]. Value in seconds, s30 corresponds to 30 s and so on. t-HystNormal +The additional duration for evaluating criteria to enter normal mobility state. Corresponds to TCRmaxHyst in TS 36.304 [4]. Value in seconds, s30 corresponds to 30 s and so on. +– MultiBandInfoList +MultiBandInfoList information element +-- ASN1START + +MultiBandInfoList ::= SEQUENCE (SIZE (1..maxMultiBands)) OF FreqBandIndicator + +MultiBandInfoList-v9e0 ::= SEQUENCE (SIZE (1..maxMultiBands)) OF MultiBandInfo-v9e0 + +MultiBandInfo-v9e0 ::= SEQUENCE { + freqBandIndicator-v9e0 FreqBandIndicator-v9e0 OPTIONAL -- Need OP +} + +-- ASN1STOP + +– PhysCellId +The IE PhysCellId is used to indicate the physical layer identity of the cell, as defined in TS 36.211 [21]. +PhysCellId information element +-- ASN1START + +PhysCellId ::= INTEGER (0..503) + +-- ASN1STOP + +– PhysCellIdRange +The IE PhysCellIdRange is used to encode either a single or a range of physical cell identities. The range is encoded by using a start value and by indicating the number of consecutive physical cell identities (including start) in the range. +PhysCellIdRange information element +-- ASN1START + +PhysCellIdRange ::= SEQUENCE { + start PhysCellId, + range ENUMERATED { + n4, n8, n12, n16, n24, n32, n48, n64, n84, + n96, n128, n168, n252, n504, spare2, + spare1} OPTIONAL -- Need OP +} + +-- ASN1STOP + +PhysCellIdRange field descriptions range +Indicates the number of physical cell identities in the range (including start). Value n4 corresponds with 4, n8 corresponds with 8 and so on. The UE shall apply value 1 in case the field is absent, in which case only the physical cell identity value indicated by start applies. start +Indicates the lowest physical cell identity in the range. +– PhysCellIdRangeUTRA-FDDList +The IE PhysCellIdRangeUTRA-FDDList is used to encode one or more of PhysCellIdRangeUTRA-FDD. While the IE PhysCellIdRangeUTRA-FDD is used to encode either a single physical layer identity or a range of physical layer identities, i.e. primary scrambling codes. Each range is encoded by using a start value and by indicating the number of consecutive physical cell identities (including start) in the range. +PhysCellIdRangeUTRA-FDDList information element +-- ASN1START + +PhysCellIdRangeUTRA-FDDList-r9::= SEQUENCE (SIZE (1.. maxPhysCellIdRange-r9)) OF PhysCellIdRangeUTRA-FDD-r9 + +PhysCellIdRangeUTRA-FDD-r9 ::= SEQUENCE { + start-r9 PhysCellIdUTRA-FDD, + range-r9 INTEGER (2..512) OPTIONAL -- Need OP +} + +-- ASN1STOP + +PhysCellIdRangeUTRA-FDDList field descriptions range +Indicates the number of primary scrambling codes in the range (including start). The UE shall apply value 1 in case the field is absent, in which case only the primary scrambling code value indicated by start applies. start +Indicates the lowest primary scrambling code in the range. +– PhysCellIdCDMA2000 +The IE PhysCellIdCDMA2000 identifies the PNOffset that represents the "Physical cell identity" in CDMA2000. +PhysCellIdCDMA2000 information element +-- ASN1START + +PhysCellIdCDMA2000 ::= INTEGER (0..maxPNOffset) + +-- ASN1STOP + +– PhysCellIdGERAN +The IE PhysCellIdGERAN contains the Base Station Identity Code (BSIC). +PhysCellIdGERAN information element +-- ASN1START + +PhysCellIdGERAN ::= SEQUENCE { + networkColourCode BIT STRING (SIZE (3)), + baseStationColourCode BIT STRING (SIZE (3)) +} + +-- ASN1STOP + +PhysCellIdGERAN field descriptions baseStationColourCode +Base station Colour Code as defined in TS 23.003 [27]. networkColourCode +Network Colour Code as defined in TS 23.003 [27]. +– PhysCellIdUTRA-FDD +The IE PhysCellIdUTRA-FDD is used to indicate the physical layer identity of the cell, i.e. the primary scrambling code, as defined in TS 25.331 [19]. +PhysCellIdUTRA-FDD information element +-- ASN1START + +PhysCellIdUTRA-FDD ::= INTEGER (0..511) + +-- ASN1STOP + +– PhysCellIdUTRA-TDD +The IE PhysCellIdUTRA-TDD is used to indicate the physical layer identity of the cell, i.e. the cell parameters ID (TDD), as specified in TS 25.331 [19]. Also corresponds to the Initial Cell Parameter Assignment in TS 25.223 [46]. +PhysCellIdUTRA-TDD information element +-- ASN1START + +PhysCellIdUTRA-TDD ::= INTEGER (0..127) + +-- ASN1STOP + +– PLMN-Identity +The IE PLMN-Identity identifies a Public Land Mobile Network. Further information regarding how to set the IE are specified in TS 23.003 [27]. +PLMN-Identity information element +-- ASN1START + +PLMN-Identity ::= SEQUENCE { + mcc MCC OPTIONAL, -- Cond MCC + mnc MNC +} + +MCC ::= SEQUENCE (SIZE (3)) OF + MCC-MNC-Digit + +MNC ::= SEQUENCE (SIZE (2..3)) OF + MCC-MNC-Digit + +MCC-MNC-Digit ::= INTEGER (0..9) + + +-- ASN1STOP + +PLMN-Identity field descriptions mcc +The first element contains the first MCC digit, the second element the second MCC digit and so on. If the field is absent, it takes the same value as the mcc of the immediately preceding IE PLMN-Identity. See TS 23.003 [27]. mnc +The first element contains the first MNC digit, the second element the second MNC digit and so on. See TS 23.003 [27]. +Conditional presence Explanation MCC This IE is mandatory when PLMN-Identity is included in CellGlobalIdEUTRA, in CellGlobalIdUTRA, in CellGlobalIdGERAN or in RegisteredMME. This IE is also mandatory in the first occurrence of the IE PLMN-Identity within the IE PLMN-IdentityList. Otherwise it is optional, need OP. +– PreRegistrationInfoHRPD +-- ASN1START + +PreRegistrationInfoHRPD ::= SEQUENCE { + preRegistrationAllowed BOOLEAN, + preRegistrationZoneId PreRegistrationZoneIdHRPD OPTIONAL, -- cond PreRegAllowed + secondaryPreRegistrationZoneIdList SecondaryPreRegistrationZoneIdListHRPD OPTIONAL -- Need OR +} + +SecondaryPreRegistrationZoneIdListHRPD ::= SEQUENCE (SIZE (1..2)) OF PreRegistrationZoneIdHRPD + +PreRegistrationZoneIdHRPD ::= INTEGER (0..255) + +-- ASN1STOP + +PreRegistrationInfoHRPD field descriptions preRegistrationAllowed +TRUE indicates that a UE shall perform a CDMA2000 HRPD pre-registration if the UE does not have a valid / current pre-registration. FALSE indicates that the UE is not allowed to perform CDMA2000 HRPD pre-registration in the current cell. preRegistrationZoneID +ColorCode (see C.S0024-A [26], C.S0087-A [44]) of the CDMA2000 Reference Cell corresponding to the HRPD sector under the HRPD AN that is configured for this LTE cell. It is used to control when the UE should register or re-register. secondaryPreRegistrationZoneIdList +List of SecondaryColorCodes (see C.S0024-A [26], C.S0087-A [44]) of the CDMA2000 Reference Cell corresponding to the HRPD sector under the HRPD AN that is configured for this LTE cell. They are used to control when the UE should re-register. +Conditional presence Explanation PreRegAllowed The field is mandatory in case the preRegistrationAllowed is set to true. Otherwise the field is not present and the UE shall delete any existing value for this field. +– Q-QualMin +The IE Q-QualMin is used to indicate for cell selection/ re-selection the required minimum received RSRQ level in the (E-UTRA) cell. Corresponds to parameter Qqualmin in 36.304 [4]. Actual value Qqualmin = IE value [dB]. +Q-QualMin information element +-- ASN1START + +Q-QualMin-r9 ::= INTEGER (-34..-3) + +-- ASN1STOP + +– Q-RxLevMin +The IE Q-RxLevMin is used to indicate for cell selection/ re-selection the required minimum received RSRP level in the (E-UTRA) cell. Corresponds to parameter Qrxlevmin in 36.304 [4]. Actual value Qrxlevmin = IE value * 2 [dBm]. +Q-RxLevMin information element +-- ASN1START + +Q-RxLevMin ::= INTEGER (-70..-22) + +-- ASN1STOP + +– Q-OffsetRange +The IE Q-OffsetRange is used to indicate a cell or frequency specific offset to be applied when evaluating candidates for cell re-selection or when evaluating triggering conditions for measurement reporting. The value in dB. Value dB-24 corresponds to -24 dB, dB-22 corresponds to -22 dB and so on. +Q- OffsetRange information element +-- ASN1START + +Q-OffsetRange ::= ENUMERATED { + dB-24, dB-22, dB-20, dB-18, dB-16, dB-14, + dB-12, dB-10, dB-8, dB-6, dB-5, dB-4, dB-3, + dB-2, dB-1, dB0, dB1, dB2, dB3, dB4, dB5, + dB6, dB8, dB10, dB12, dB14, dB16, dB18, + dB20, dB22, dB24} + +-- ASN1STOP + +– Q-OffsetRangeInterRAT +The IE Q-OffsetRangeInterRAT is used to indicate a frequency specific offset to be applied when evaluating triggering conditions for measurement reporting. The value in dB. +Q-OffsetRangeInterRAT information element +-- ASN1START + +Q-OffsetRangeInterRAT ::= INTEGER (-15..15) + +-- ASN1STOP + +– ReselectionThreshold +The IE ReselectionThreshold is used to indicate an Rx level threshold for cell reselection. Actual value of threshold = IE value * 2 [dB]. +ReselectionThreshold information element +-- ASN1START + +ReselectionThreshold ::= INTEGER (0..31) + +-- ASN1STOP + +– ReselectionThresholdQ +The IE ReselectionThresholdQ is used to indicate a quality level threshold for cell reselection. Actual value of threshold = IE value [dB]. +ReselectionThresholdQ information element +-- ASN1START + +ReselectionThresholdQ-r9 ::= INTEGER (0..31) + +-- ASN1STOP + +– SCellIndex +The IE SCellIndex concerns a short identity, used to identify an SCell. +SCellIndex information element +-- ASN1START + +SCellIndex-r10 ::= INTEGER (1..7) + +-- ASN1STOP + +– ServCellIndex +The IE ServCellIndex concerns a short identity, used to identify a serving cell (i.e. the PCell or an SCell). Value 0 applies for the PCell, while the SCellIndex that has previously been assigned applies for SCells. +ServCellIndex information element +-- ASN1START + +ServCellIndex-r10 ::= INTEGER (0..7) + +-- ASN1STOP + +– SpeedStateScaleFactors +The IE SpeedStateScaleFactors concerns factors, to be applied when the UE is in medium or high speed state, used for scaling a mobility control related parameter. +SpeedStateScaleFactors information element +-- ASN1START + +SpeedStateScaleFactors ::= SEQUENCE { + sf-Medium ENUMERATED {oDot25, oDot5, oDot75, lDot0}, + sf-High ENUMERATED {oDot25, oDot5, oDot75, lDot0} +} +-- ASN1STOP + +SpeedStateScaleFactors field descriptions sf-High +The concerned mobility control related parameter is multiplied with this factor if the UE is in High Mobility state as defined in TS 36.304 [4]. Value oDot25 corresponds to 0.25, oDot5 corresponds to 0.5 , oDot75 corresponds to 0.75 and so on. sf-Medium +The concerned mobility control related parameter is multiplied with this factor if the UE is in Medium Mobility state as defined in TS 36.304 [4]. Value oDot25 corresponds to 0.25, oDot5 corresponds to 0.5 , oDot75 corresponds to 0.75 and so on. +– SystemInfoListGERAN +The IE SystemInfoListGERAN contains system information of a GERAN cell. +SystemInfoListGERAN information element +-- ASN1START + +SystemInfoListGERAN ::= SEQUENCE (SIZE (1..maxGERAN-SI)) OF + OCTET STRING (SIZE (1..23)) + +-- ASN1STOP + +SystemInfoListGERAN field descriptions SystemInfoListGERAN +Each OCTET STRING contains one System Information (SI) message as defined in TS 44.018 [45, table 9.1.1] excluding the L2 Pseudo Length, the RR management Protocol Discriminator and the Skip Indicator or a complete Packet System Information (PSI) message as defined in TS 44.060 [36, table 11.2.1]. +– SystemTimeInfoCDMA2000 +The IE SystemTimeInfoCDMA2000 informs the UE about the absolute time in the current cell. The UE uses this absolute time knowledge to derive the CDMA2000 Physical cell identity, expressed as PNOffset, of neighbour CDMA2000 cells. +NOTE: The UE needs the CDMA2000 system time with a certain level of accuracy for performing measurements as well as for communicating with the CDMA2000 network (HRPD or 1xRTT). +SystemTimeInfoCDMA2000 information element +-- ASN1START + +SystemTimeInfoCDMA2000 ::= SEQUENCE { + cdma-EUTRA-Synchronisation BOOLEAN, + cdma-SystemTime CHOICE { + synchronousSystemTime BIT STRING (SIZE (39)), + asynchronousSystemTime BIT STRING (SIZE (49)) + } +} + +-- ASN1STOP + +SystemTimeInfoCDMA2000 field descriptions asynchronousSystemTime +The CDMA2000 system time corresponding to the SFN boundary at or after the ending boundary of the SI-Window in which SystemInformationBlockType8 is transmitted. E-UTRAN includes this field if the E-UTRA frame boundary is not aligned to the start of CDMA2000 system time. This field size is 49 bits and the unit is 8 CDMA chips based on 1.2288 Mcps. cdma-EUTRA-Synchronisation +TRUE indicates that there is no drift in the timing between EUTRA and CDMA2000. FALSE indicates that the timing between E-UTRA and CDMA2000 can drift. NOTE 1 synchronousSystemTime +CDMA2000 system time corresponding to the SFN boundary at or after the ending boundary of the SI-window in which SystemInformationBlockType8 is transmitted. E-UTRAN includes this field if the E-UTRA frame boundary is aligned to the start of CDMA2000 system time. This field size is 39 bits and the unit is 10 ms based on a 1.2288 Mcps chip rate. +NOTE 1: The following table shows the recommended combinations of the cdma-EUTRA-Synchronisation field and the choice of cdma-SystemTime included by E-UTRAN for FDD and TDD: + +FDD/TDD cdma-EUTRA-Synchronisation synchronousSystemTime asynchronousSystemTime FDD FALSE Not Recommended Recommended FDD TRUE Recommended Not Recommended TDD FALSE Not Recommended Recommended TDD TRUE Recommended Recommended +– TrackingAreaCode +The IE TrackingAreaCode is used to identify a tracking area within the scope of a PLMN, see TS 24.301 [35]. +TrackingAreaCode information element +-- ASN1START + +TrackingAreaCode ::= BIT STRING (SIZE (16)) + +-- ASN1STOP + +– T-Reselection +The IE T-Reselection concerns the cell reselection timer TreselectionRAT for E-UTRA, UTRA, GERAN or CDMA2000. Value in seconds. +T-Reselection information element +-- ASN1START + +T-Reselection ::= INTEGER (0..7) + +-- ASN1STOP + +6.3.5 Measurement information elements +– AllowedMeasBandwidth +The IE AllowedMeasBandwidth is used to indicate the maximum allowed measurement bandwidth on a carrier frequency as defined by the parameter Transmission Bandwidth Configuration "NRB" TS 36.104 [47]. The values mbw6, mbw15, mbw25, mbw50, mbw75, mbw100 indicate 6, 15, 25, 50, 75 and 100 resource blocks respectively. +AllowedMeasBandwidth information element +-- ASN1START + +AllowedMeasBandwidth ::= ENUMERATED {mbw6, mbw15, mbw25, mbw50, mbw75, mbw100} + +-- ASN1STOP + +– Hysteresis +The IE Hysteresis is a parameter used within the entry and leave condition of an event triggered reporting condition. The actual value is IE value * 0.5 dB. +Hysteresis information element +-- ASN1START + +Hysteresis ::= INTEGER (0..30) + +-- ASN1STOP + +– LocationInfo +The IE LocationInfo is used to transfer detailed location information available at the UE to correlate measurements and UE position information. +LocationInfo information element +-- ASN1START + +LocationInfo-r10 ::= SEQUENCE { + locationCoordinates-r10 CHOICE { + ellipsoid-Point-r10 OCTET STRING, + ellipsoidPointWithAltitude-r10 OCTET STRING, + ... + }, + horizontalVelocity-r10 OCTET STRING OPTIONAL, + gnss-TOD-msec-r10 OCTET STRING OPTIONAL, + ... +} + +-- ASN1STOP + +LocationInfo field descriptions ellipsoid-Point +Parameter Ellipsoid-Point defined in TS36.355 [54]. ellipsoidPointWithAltitude +Parameter EllipsoidPointWithAltitude defined in TS36.355 [54]. gnss-TOD-msec +Parameter Gnss-TOD-msec defined in TS36.355 [54] horizontalVelocity +Parameter HorizontalVelocity defined in TS36.355 [54]. +– MeasConfig +The IE MeasConfig specifies measurements to be performed by the UE, and covers intra-frequency, inter-frequency and inter-RAT mobility as well as configuration of measurement gaps. +MeasConfig information element +-- ASN1START + +MeasConfig ::= SEQUENCE { + -- Measurement objects + measObjectToRemoveList MeasObjectToRemoveList OPTIONAL, -- Need ON + measObjectToAddModList MeasObjectToAddModList OPTIONAL, -- Need ON + -- Reporting configurations + reportConfigToRemoveList ReportConfigToRemoveList OPTIONAL, -- Need ON + reportConfigToAddModList ReportConfigToAddModList OPTIONAL, -- Need ON + -- Measurement identities + measIdToRemoveList MeasIdToRemoveList OPTIONAL, -- Need ON + measIdToAddModList MeasIdToAddModList OPTIONAL, -- Need ON + -- Other parameters + quantityConfig QuantityConfig OPTIONAL, -- Need ON + measGapConfig MeasGapConfig OPTIONAL, -- Need ON + s-Measure RSRP-Range OPTIONAL, -- Need ON + preRegistrationInfoHRPD PreRegistrationInfoHRPD OPTIONAL, -- Need OP + speedStatePars CHOICE { + release NULL, + setup SEQUENCE { + mobilityStateParameters MobilityStateParameters, + timeToTrigger-SF SpeedStateScaleFactors + } + } OPTIONAL, -- Need ON + ..., + [[ measObjectToAddModList-v9e0 MeasObjectToAddModList-v9e0 OPTIONAL -- Need ON + ]] +} + +MeasIdToRemoveList ::= SEQUENCE (SIZE (1..maxMeasId)) OF MeasId + +MeasObjectToRemoveList ::= SEQUENCE (SIZE (1..maxObjectId)) OF MeasObjectId + +ReportConfigToRemoveList ::= SEQUENCE (SIZE (1..maxReportConfigId)) OF ReportConfigId + +-- ASN1STOP + +MeasConfig field descriptions measGapConfig +Used to setup and release measurement gaps. measIdToRemoveList +List of measurement identities to remove. measObjectToAddModList +If E-UTRAN includes measObjectToAddModList-v9e0 it includes the same number of entries, and listed in the same order, as in measObjectToAddModList (i.e. without suffix). measObjectToRemoveList +List of measurement objects to remove. PreRegistrationInfoHRPD +The CDMA2000 HRPD Pre-Registration Information tells the UE if it should pre-register with the CDMA2000 HRPD network and identifies the Pre-registration zone to the UE. reportConfigToRemoveList +List of measurement reporting configurations to remove. s-Measure +PCell quality threshold controlling whether or not the UE is required to perform measurements of intra-frequency, inter-frequency and inter-RAT neighbouring cells. Value “0” indicates to disable s-Measure. timeToTrigger-SF +The timeToTrigger in ReportConfigEUTRA and in ReportConfigInterRAT are multiplied with the scaling factor applicable for the UE’s speed state. +– MeasGapConfig +The IE MeasGapConfig specifies the measurement gap configuration and controls setup/ release of measurement gaps. +MeasGapConfig information element +-- ASN1START + +MeasGapConfig ::= CHOICE { + release NULL, + setup SEQUENCE { + gapOffset CHOICE { + gp0 INTEGER (0..39), + gp1 INTEGER (0..79), + ... + } + } +} + +-- ASN1STOP + +MeasGapConfig field descriptions gapOffset +Value gapOffset of gp0 corresponds to gap offset of Gap Pattern Id “0” with MGRP = 40ms, gapOffset of gp1 corresponds to gap offset of Gap Pattern Id “1” with MGRP = 80ms. Also used to specify the measurement gap pattern to be applied, as defined in TS 36.133 [16]. +– MeasId +The IE MeasId is used to identify a measurement configuration, i.e., linking of a measurement object and a reporting configuration. +MeasId information element +-- ASN1START + +MeasId ::= INTEGER (1..maxMeasId) + +-- ASN1STOP + +– MeasIdToAddModList +The IE MeasIdToAddModList concerns a list of measurement identities to add or modify, with for each entry the measId, the associated measObjectId and the associated reportConfigId. +MeasIdToAddModList information element +-- ASN1START + +MeasIdToAddModList ::= SEQUENCE (SIZE (1..maxMeasId)) OF MeasIdToAddMod + +MeasIdToAddMod ::= SEQUENCE { + measId MeasId, + measObjectId MeasObjectId, + reportConfigId ReportConfigId +} + +-- ASN1STOP + +– MeasObjectCDMA2000 +The IE MeasObjectCDMA2000 specifies information applicable for inter-RAT CDMA2000 neighbouring cells. +MeasObjectCDMA2000 information element +-- ASN1START + +MeasObjectCDMA2000 ::= SEQUENCE { + cdma2000-Type CDMA2000-Type, + carrierFreq CarrierFreqCDMA2000, + searchWindowSize INTEGER (0..15) OPTIONAL, -- Need ON + offsetFreq Q-OffsetRangeInterRAT DEFAULT 0, + cellsToRemoveList CellIndexList OPTIONAL, -- Need ON + cellsToAddModList CellsToAddModListCDMA2000 OPTIONAL, -- Need ON + cellForWhichToReportCGI PhysCellIdCDMA2000 OPTIONAL, -- Need ON + ... +} + +CellsToAddModListCDMA2000 ::= SEQUENCE (SIZE (1..maxCellMeas)) OF CellsToAddModCDMA2000 + +CellsToAddModCDMA2000 ::= SEQUENCE { + cellIndex INTEGER (1..maxCellMeas), + physCellId PhysCellIdCDMA2000 +} + +-- ASN1STOP + +MeasObjectCDMA2000 field descriptions carrierInfo +Identifies CDMA2000 carrier frequency for which this configuration is valid. cdma2000-Type +The type of CDMA2000 network: CDMA2000 1xRTT or CDMA2000 HRPD. cellIndex +Entry index in the neighbouring cell list. cellsToAddModList +List of cells to add/ modify in the neighbouring cell list. cellsToRemoveList +List of cells to remove from the neighbouring cell list. physCellId +CDMA2000 Physical cell identity of a cell in neighbouring cell list expressed as PNOffset. searchWindowSize +Provides the search window size to be used by the UE for the neighbouring pilot, see C.S0005-A [25]. +– MeasObjectEUTRA +The IE MeasObjectEUTRA specifies information applicable for intra-frequency or inter-frequency EUTRA cells. +MeasObjectEUTRA information element +-- ASN1START + +MeasObjectEUTRA ::= SEQUENCE { + carrierFreq ARFCN-ValueEUTRA, + allowedMeasBandwidth AllowedMeasBandwidth, + presenceAntennaPort1 PresenceAntennaPort1, + neighCellConfig NeighCellConfig, + offsetFreq Q-OffsetRange DEFAULT dB0, + -- Cell list + cellsToRemoveList CellIndexList OPTIONAL, -- Need ON + cellsToAddModList CellsToAddModList OPTIONAL, -- Need ON + -- Black list + blackCellsToRemoveList CellIndexList OPTIONAL, -- Need ON + blackCellsToAddModList BlackCellsToAddModList OPTIONAL, -- Need ON + cellForWhichToReportCGI PhysCellId OPTIONAL, -- Need ON + ..., + [[measCycleSCell-r10 MeasCycleSCell-r10 OPTIONAL, -- Need ON + measSubframePatternConfigNeigh-r10 MeasSubframePatternConfigNeigh-r10 OPTIONAL -- Need ON + ]] +} + +MeasObjectEUTRA-v9e0 ::= SEQUENCE { + carrierFreq-v9e0 ARFCN-ValueEUTRA-v9e0 +} + +CellsToAddModList ::= SEQUENCE (SIZE (1..maxCellMeas)) OF CellsToAddMod + +CellsToAddMod ::= SEQUENCE { + cellIndex INTEGER (1..maxCellMeas), + physCellId PhysCellId, + cellIndividualOffset Q-OffsetRange +} + +BlackCellsToAddModList ::= SEQUENCE (SIZE (1..maxCellMeas)) OF BlackCellsToAddMod + +BlackCellsToAddMod ::= SEQUENCE { + cellIndex INTEGER (1..maxCellMeas), + physCellIdRange PhysCellIdRange +} + +MeasCycleSCell-r10 ::= ENUMERATED {sf160, sf256, sf320, sf512, + sf640, sf1024, sf1280, spare1} + +MeasSubframePatternConfigNeigh-r10 ::= CHOICE { + release NULL, + setup SEQUENCE { + measSubframePatternNeigh-r10 MeasSubframePattern-r10, + measSubframeCellList-r10 MeasSubframeCellList-r10 OPTIONAL -- Cond measSubframe + } +} + +MeasSubframeCellList-r10 ::= SEQUENCE (SIZE (1..maxCellMeas)) OF PhysCellIdRange + +-- ASN1STOP + +MeasObjectEUTRA field descriptions blackCellsToAddMoList +List of cells to add/ modify in the black list of cells. blackCellsToRemoveList +List of cells to remove from the black list of cells. carrierFreq +Identifies EUTRA carrier frequency for which this configuration is valid. E-UTRAN does not configure more than one measurement object for the same physical frequency regardless of the E-ARFCN used to indicate this. cellIndex +Entry index in the cell list. An entry may concern a range of cells, in which case this value applies to the entire range. cellIndividualOffset +Cell individual offset applicable to a specific cell. Value dB-24 corresponds to -24 dB, dB-22 corresponds to -22 dB and so on. cellsToAddModList +List of cells to add/ modify in the cell list. cellsToRemoveList +List of cells to remove from the cell list. measCycleSCell +The parameter is used only when an SCell is configured on the frequency indicated by the measObject and is in deactivated state, see TS 36.133 [16, 8.3.3]. E-UTRAN configures the parameter whenever an SCell is configured on the frequency indicated by the measObject, but the field may also be signalled when an SCell is not configured. Value sf160 corresponds to 160 sub-frames, sf256 corresponds to 256 sub-frames and so on. measSubframeCellList +List of cells for which measSubframePatternNeigh is applied. measSubframePatternNeigh +Time domain measurement resource restriction pattern applicable to neighbour cell RSRP and RSRQ measurements on the carrier frequency indicated by carrierFreq. For cells in measSubframeCellList the UE shall assume that the subframes indicated by measSubframePatternNeigh are non-MBSFN subframes, and have the same special subframe configuration as PCell. offsetFreq +Offset value applicable to the carrier frequency. Value dB-24 corresponds to -24 dB, dB-22 corresponds to -22 dB and so on. physCellId +Physical cell identity of a cell in the cell list. physCellIdRange +Physical cell identity or a range of physical cell identities of cells in the black list. +Conditional presence Explanation measSubframe The field is mandatory present if measSubframePatternNeigh is configured. +– MeasObjectGERAN +The IE MeasObjectGERAN specifies information applicable for inter-RAT GERAN neighbouring frequencies. +MeasObjectGERAN information element +-- ASN1START + +MeasObjectGERAN ::= SEQUENCE { + carrierFreqs CarrierFreqsGERAN, + offsetFreq Q-OffsetRangeInterRAT DEFAULT 0, + ncc-Permitted BIT STRING(SIZE (8)) DEFAULT '11111111'B, + cellForWhichToReportCGI PhysCellIdGERAN OPTIONAL, -- Need ON + ... +} + +-- ASN1STOP + +MeasObjectGERAN field descriptions ncc-Permitted +Field encoded as a bit map, where bit N is set to "0" if a BCCH carrier with NCC = N-1 is not permitted for monitoring and set to "1" if a BCCH carrier with NCC = N-1 is permitted for monitoring; N = 1 to 8; bit 1 of the bitmap is the leading bit of the bit string. +– MeasObjectId +The IE MeasObjectId used to identify a measurement object configuration. +MeasObjectId information element +-- ASN1START + +MeasObjectId ::= INTEGER (1..maxObjectId) + +-- ASN1STOP + +– MeasObjectToAddModList +The IE MeasObjectToAddModList concerns a list of measurement objects to add or modify +MeasObjectToAddModList information element +-- ASN1START + +MeasObjectToAddModList ::= SEQUENCE (SIZE (1..maxObjectId)) OF MeasObjectToAddMod + +MeasObjectToAddModList-v9e0 ::= SEQUENCE (SIZE (1..maxObjectId)) OF MeasObjectToAddMod-v9e0 + +MeasObjectToAddMod ::= SEQUENCE { + measObjectId MeasObjectId, + measObject CHOICE { + measObjectEUTRA MeasObjectEUTRA, + measObjectUTRA MeasObjectUTRA, + measObjectGERAN MeasObjectGERAN, + measObjectCDMA2000 MeasObjectCDMA2000, + ... + } +} + +MeasObjectToAddMod-v9e0 ::= SEQUENCE { + measObjectEUTRA-v9e0 MeasObjectEUTRA-v9e0 OPTIONAL -- Cond eutra +} + +-- ASN1STOP + +Conditional presence Explanation eutra The field is optional present, need OR, if for the corresponding entry in MeasObjectToAddModList field measObject is set to measObjectEUTRA and its sub-field carrierFreq is set to maxEARFCN. Otherwise the field is not present. +– MeasObjectUTRA +The IE MeasObjectUTRA specifies information applicable for inter-RAT UTRA neighbouring cells. +MeasObjectUTRA information element +-- ASN1START + +MeasObjectUTRA ::= SEQUENCE { + carrierFreq ARFCN-ValueUTRA, + offsetFreq Q-OffsetRangeInterRAT DEFAULT 0, + cellsToRemoveList CellIndexList OPTIONAL, -- Need ON + cellsToAddModList CHOICE { + cellsToAddModListUTRA-FDD CellsToAddModListUTRA-FDD, + cellsToAddModListUTRA-TDD CellsToAddModListUTRA-TDD + } OPTIONAL, -- Need ON + cellForWhichToReportCGI CHOICE { + utra-FDD PhysCellIdUTRA-FDD, + utra-TDD PhysCellIdUTRA-TDD + } OPTIONAL, -- Need ON + ..., + [[ csg-allowedReportingCells-v930 CSG-AllowedReportingCells-r9 OPTIONAL -- Need ON + ]] +} + +CellsToAddModListUTRA-FDD ::= SEQUENCE (SIZE (1..maxCellMeas)) OF CellsToAddModUTRA-FDD + +CellsToAddModUTRA-FDD ::= SEQUENCE { + cellIndex INTEGER (1..maxCellMeas), + physCellId PhysCellIdUTRA-FDD +} + +CellsToAddModListUTRA-TDD ::= SEQUENCE (SIZE (1..maxCellMeas)) OF CellsToAddModUTRA-TDD + +CellsToAddModUTRA-TDD ::= SEQUENCE { + cellIndex INTEGER (1..maxCellMeas), + physCellId PhysCellIdUTRA-TDD +} + +CSG-AllowedReportingCells-r9 ::= SEQUENCE { + physCellIdRangeUTRA-FDDList-r9 PhysCellIdRangeUTRA-FDDList-r9 OPTIONAL -- Need OR +} +-- ASN1STOP + +MeasObjectUTRA field descriptions carrierFreq +Identifies UTRA carrier frequency for which this configuration is valid. E-UTRAN does not configure more than one measurement object for the same physical frequency regardless of the ARFCN used to indicate this. cellIndex +Entry index in the neighbouring cell list. cellsToAddModListUTRA-FDD +List of UTRA FDD cells to add/ modify in the neighbouring cell list. cellsToAddModListUTRA-TDD +List of UTRA TDD cells to add/modify in the neighbouring cell list. cellsToRemoveList +List of cells to remove from the neighbouring cell list. csg-allowedReportingCells +One or more ranges of physical cell identities for which UTRA-FDD reporting is allowed. +– MeasResults +The IE MeasResults covers measured results for intra-frequency, inter-frequency and inter- RAT mobility. +MeasResults information element +-- ASN1START + +MeasResults ::= SEQUENCE { + measId MeasId, + measResultPCell SEQUENCE { + rsrpResult RSRP-Range, + rsrqResult RSRQ-Range + }, + measResultNeighCells CHOICE { + measResultListEUTRA MeasResultListEUTRA, + measResultListUTRA MeasResultListUTRA, + measResultListGERAN MeasResultListGERAN, + measResultsCDMA2000 MeasResultsCDMA2000, + ... + } OPTIONAL, + ..., + [[ measResultForECID-r9 MeasResultForECID-r9 OPTIONAL + ]], + [[ locationInfo-r10 LocationInfo-r10 OPTIONAL, + measResultServFreqList-r10 MeasResultServFreqList-r10 OPTIONAL + ]] +} + +MeasResultListEUTRA ::= SEQUENCE (SIZE (1..maxCellReport)) OF MeasResultEUTRA + +MeasResultEUTRA ::= SEQUENCE { + physCellId PhysCellId, + cgi-Info SEQUENCE { + cellGlobalId CellGlobalIdEUTRA, + trackingAreaCode TrackingAreaCode, + plmn-IdentityList PLMN-IdentityList2 OPTIONAL + } OPTIONAL, + measResult SEQUENCE { + rsrpResult RSRP-Range OPTIONAL, + rsrqResult RSRQ-Range OPTIONAL, + ..., + [[ additionalSI-Info-r9 AdditionalSI-Info-r9 OPTIONAL + ]] + } +} + +MeasResultServFreqList-r10 ::= SEQUENCE (SIZE (1..maxServCell-r10)) OF MeasResultServFreq-r10 + +MeasResultServFreq-r10 ::= SEQUENCE { + servFreqId-r10 ServCellIndex-r10, + measResultSCell-r10 SEQUENCE { + rsrpResultSCell-r10 RSRP-Range, + rsrqResultSCell-r10 RSRQ-Range + } OPTIONAL, + measResultBestNeighCell-r10 SEQUENCE { + physCellId-r10 PhysCellId, + rsrpResultNCell-r10 RSRP-Range, + rsrqResultNCell-r10 RSRQ-Range + } OPTIONAL, + ... +} + +MeasResultListUTRA ::= SEQUENCE (SIZE (1..maxCellReport)) OF MeasResultUTRA + +MeasResultUTRA ::= SEQUENCE { + physCellId CHOICE { + fdd PhysCellIdUTRA-FDD, + tdd PhysCellIdUTRA-TDD + }, + cgi-Info SEQUENCE { + cellGlobalId CellGlobalIdUTRA, + locationAreaCode BIT STRING (SIZE (16)) OPTIONAL, + routingAreaCode BIT STRING (SIZE (8)) OPTIONAL, + plmn-IdentityList PLMN-IdentityList2 OPTIONAL + } OPTIONAL, + measResult SEQUENCE { + utra-RSCP INTEGER (-5..91) OPTIONAL, + utra-EcN0 INTEGER (0..49) OPTIONAL, + ..., + [[ additionalSI-Info-r9 AdditionalSI-Info-r9 OPTIONAL + ]] + } +} + +MeasResultListGERAN ::= SEQUENCE (SIZE (1..maxCellReport)) OF MeasResultGERAN + +MeasResultGERAN ::= SEQUENCE { + carrierFreq CarrierFreqGERAN, + physCellId PhysCellIdGERAN, + cgi-Info SEQUENCE { + cellGlobalId CellGlobalIdGERAN, + routingAreaCode BIT STRING (SIZE (8)) OPTIONAL + } OPTIONAL, + measResult SEQUENCE { + rssi INTEGER (0..63), + ... + } +} + +MeasResultsCDMA2000 ::= SEQUENCE { + preRegistrationStatusHRPD BOOLEAN, + measResultListCDMA2000 MeasResultListCDMA2000 +} + +MeasResultListCDMA2000 ::= SEQUENCE (SIZE (1..maxCellReport)) OF MeasResultCDMA2000 + +MeasResultCDMA2000 ::= SEQUENCE { + physCellId PhysCellIdCDMA2000, + cgi-Info CellGlobalIdCDMA2000 OPTIONAL, + measResult SEQUENCE { + pilotPnPhase INTEGER (0..32767) OPTIONAL, + pilotStrength INTEGER (0..63), + ... + } +} + +MeasResultForECID-r9 ::= SEQUENCE { + ue-RxTxTimeDiffResult-r9 INTEGER (0..4095), + currentSFN-r9 BIT STRING (SIZE (10)) +} + +PLMN-IdentityList2 ::= SEQUENCE (SIZE (1..5)) OF PLMN-Identity + +AdditionalSI-Info-r9 ::= SEQUENCE { + csg-MemberStatus-r9 ENUMERATED {member} OPTIONAL, + csg-Identity-r9 CSG-Identity OPTIONAL +} + +-- ASN1STOP + +MeasResults field descriptions csg-MemberStatus +Indicates whether or not the UE is a member of the CSG of the neighbour cell. currentSFN +Indicates the current system frame number when receiving the UE Rx-Tx time difference measurement results from lower layer. locationAreaCode +A fixed length code identifying the location area within a PLMN, as defined in TS 23.003 [27]. measId +Identifies the measurement identity for which the reporting is being performed. measResult +Measured result of an EUTRA cell; +Measured result of a UTRA cell; +Measured result of a GERAN cell or frequency; or +Measured result of a CDMA2000 cell. +Measured result of UE Rx–Tx time difference. measResultListCDMA2000 +List of measured results for the maximum number of reported best cells for a CDMA2000 measurement identity. measResultListEUTRA +List of measured results for the maximum number of reported best cells for an EUTRA measurement identity. measResultListGERAN +List of measured results for the maximum number of reported best cells or frequencies for a GERAN measurement identity. measResultListUTRA +List of measured results for the maximum number of reported best cells for a UTRA measurement identity. measResultPCell +Measured result of the PCell. measResultsCDMA2000 +Contains the CDMA2000 HRPD pre-registration status and the list of CDMA2000 measurements. MeasResultServFreqList +Measured results of the serving frequencies: the measurement result of each SCell, if any, and of the best neighbouring cell on each serving frequency. pilotPnPhase +Indicates the arrival time of a CDMA2000 pilot, measured relative to the UE’s time reference in units of PN chips, see C.S0005-A [25]. This information is used in either SRVCC handover or enhanced 1xRTT CS fallback procedure to CDMA2000 1xRTT. pilotStrength +CDMA2000 Pilot Strength, the ratio of pilot power to total power in the signal bandwidth of a CDMA2000 Forward Channel. See C.S0005-A [25] for CDMA2000 1xRTT and C.S0024-A [26] for CDMA2000 HRPD. plmn-IdentityList +The list of PLMN Identity read from broadcast information when the multiple PLMN Identities are broadcast. This field contains the list of identities starting from the second entry of PLMN Identities in the broadcast information. preRegistrationStatusHRPD +Set to TRUE if the UE is currently pre-registered with CDMA2000 HRPD. Otherwise set to FALSE. This can be ignored by the eNB for CDMA2000 1xRTT. routingAreaCode +The RAC identity read from broadcast information, as defined in TS 23.003 [27]. rsrpResult +Measured RSRP result of an EUTRA cell. +The rsrpResult is only reported if configured by the eNB. rsrqResult +Measured RSRQ result of an EUTRA cell. +The rsrqResult is only reported if configured by the eNB. rssi +GERAN Carrier RSSI. RXLEV is mapped to a value between 0 and 63, TS 45.008 [28]. When mapping the RXLEV value to the RSSI bit string, the first/leftmost bit of the bit string contains the most significant bit. ue-RxTxTimeDiffResult +UE Rx-Tx time difference measurement result of the PCell, provided by lower layers. According to UE Rx-Tx time difference report mapping in TS 36.133 [16]. + utra-EcN0 +According to CPICH_Ec/No in TS 25.133 [29] for FDD. Fourteen spare values. The field is not present for TDD. utra-RSCP +According to CPICH_RSCP in TS 25.133 [29] for FDD and P-CCPCH_RSCP in TS 25.123 [30] for TDD. Thirty-one spare values. +– QuantityConfig +The IE QuantityConfig specifies the measurement quantities and layer 3 filtering coefficients for E-UTRA and inter-RAT measurements. +QuantityConfig information element +-- ASN1START + +QuantityConfig ::= SEQUENCE { + quantityConfigEUTRA QuantityConfigEUTRA OPTIONAL, -- Need ON + quantityConfigUTRA QuantityConfigUTRA OPTIONAL, -- Need ON + quantityConfigGERAN QuantityConfigGERAN OPTIONAL, -- Need ON + quantityConfigCDMA2000 QuantityConfigCDMA2000 OPTIONAL, -- Need ON + ..., + [[ quantityConfigUTRA-v1020 QuantityConfigUTRA-v1020 OPTIONAL -- Need ON + ]] +} + +QuantityConfigEUTRA ::= SEQUENCE { + filterCoefficientRSRP FilterCoefficient DEFAULT fc4, + filterCoefficientRSRQ FilterCoefficient DEFAULT fc4 +} + +QuantityConfigUTRA ::= SEQUENCE { + measQuantityUTRA-FDD ENUMERATED {cpich-RSCP, cpich-EcN0}, + measQuantityUTRA-TDD ENUMERATED {pccpch-RSCP}, + filterCoefficient FilterCoefficient DEFAULT fc4 +} + +QuantityConfigUTRA-v1020 ::= SEQUENCE { + filterCoefficient2-FDD-r10 FilterCoefficient DEFAULT fc4 +} + +QuantityConfigGERAN ::= SEQUENCE { + measQuantityGERAN ENUMERATED {rssi}, + filterCoefficient FilterCoefficient DEFAULT fc2 +} + +QuantityConfigCDMA2000 ::= SEQUENCE { + measQuantityCDMA2000 ENUMERATED {pilotStrength, pilotPnPhaseAndPilotStrength} +} + +-- ASN1STOP + +QuantityConfig field descriptions filterCoefficient2-FDD +Specifies the filtering coefficient used for the UTRAN FDD measurement quantity, which is not included in measQuantityUTRA-FDD, when reportQuantityUTRA-FDD is present in ReportConfigInterRAT. filterCoefficientRSRP +Specifies the filtering coefficient used for RSRP. filterCoefficientRSRQ +Specifies the filtering coefficient used for RSRQ. measQuantityCDMA2000 +Measurement quantity used for CDMA2000 measurements. pilotPnPhaseAndPilotStrength is only applicable for MeasObjectCDMA2000 of cdma2000-Type = type1XRTT. measQuantityGERAN +Measurement quantity used for GERAN measurements. measQuantityUTRA +Measurement quantity used for UTRA measurements. quantityConfigCDMA2000 +Specifies quantity configurations for CDMA2000 measurements. quantityConfigEUTRA +Specifies filter configurations for EUTRA measurements. quantityConfigGERAN +Specifies quantity and filter configurations for GERAN measurements. quantityConfigUTRA +Specifies quantity and filter configurations for UTRA measurements. Field quantityConfigUTRA-v1020 is applicable only when reportQuantityUTRA-FDD is configured. +– ReportConfigEUTRA +The IE ReportConfigEUTRA specifies criteria for triggering of an EUTRA measurement reporting event. The EUTRA measurement reporting events are labelled AN with N equal to 1, 2 and so on. +Event A1: Serving becomes better than absolute threshold; +Event A2: Serving becomes worse than absolute threshold; +Event A3: Neighbour becomes amount of offset better than PCell; +Event A4: Neighbour becomes better than absolute threshold; +Event A5: PCell becomes worse than absolute threshold1 AND Neighbour becomes better than another absolute threshold2. +Event A6: Neighbour becomes amount of offset better than SCell. +ReportConfigEUTRA information element +-- ASN1START + +ReportConfigEUTRA ::= SEQUENCE { + triggerType CHOICE { + event SEQUENCE { + eventId CHOICE { + eventA1 SEQUENCE { + a1-Threshold ThresholdEUTRA + }, + eventA2 SEQUENCE { + a2-Threshold ThresholdEUTRA + }, + eventA3 SEQUENCE { + a3-Offset INTEGER (-30..30), + reportOnLeave BOOLEAN + }, + eventA4 SEQUENCE { + a4-Threshold ThresholdEUTRA + }, + eventA5 SEQUENCE { + a5-Threshold1 ThresholdEUTRA, + a5-Threshold2 ThresholdEUTRA + }, + ..., + eventA6-r10 SEQUENCE { + a6-Offset-r10 INTEGER (-30..30), + a6-ReportOnLeave-r10 BOOLEAN + } + }, + hysteresis Hysteresis, + timeToTrigger TimeToTrigger + }, + periodical SEQUENCE { + purpose ENUMERATED { + reportStrongestCells, reportCGI} + } + }, + triggerQuantity ENUMERATED {rsrp, rsrq}, + reportQuantity ENUMERATED {sameAsTriggerQuantity, both}, + maxReportCells INTEGER (1..maxCellReport), + reportInterval ReportInterval, + reportAmount ENUMERATED {r1, r2, r4, r8, r16, r32, r64, infinity}, + ..., + [[ si-RequestForHO-r9 ENUMERATED {setup} OPTIONAL, -- Cond reportCGI + ue-RxTxTimeDiffPeriodical-r9 ENUMERATED {setup} OPTIONAL -- Need OR + ]], + [[ includeLocationInfo-r10 ENUMERATED {true} OPTIONAL, -- Cond reportMDT + reportAddNeighMeas-r10 ENUMERATED {setup} OPTIONAL -- Need OR + ]] +} + +ThresholdEUTRA ::= CHOICE{ + threshold-RSRP RSRP-Range, + threshold-RSRQ RSRQ-Range +} + +-- ASN1STOP + +ReportConfigEUTRA field descriptions a3-Offset/ a6-Offset +Offset value to be used in EUTRA measurement report triggering condition for event a3/ a6. The actual value is IE value * 0.5 dB. aN-ThresholdM +Threshold to be used in EUTRA measurement report triggering condition for event number aN. If multiple thresholds are defined for event number aN, the thresholds are differentiated by M. eventId +Choice of EUTRA event triggered reporting criteria. maxReportCells +Max number of cells, excluding the serving cell, to include in the measurement report. reportAmount +Number of measurement reports applicable for triggerType event as well as for triggerType periodical. In case purpose is set to reportCGI only value 1 applies. reportOnLeave/ a6-ReportOnLeave +Indicates whether or not the UE shall initiate the measurement reporting procedure when the leaving condition is met for a cell in cellsTriggeredList, as specified in 5.5.4.1. reportQuantity +The quantities to be included in the measurement report. The value both means that both the rsrp and rsrq quantities are to be included in the measurement report. si-RequestForHO +The field applies to the reportCGI functionality, and when the field is included, the UE is allowed to use autonomous gaps in acquiring system information from the neighbour cell, applies a different value for T321, and includes different fields in the measurement report. ThresholdEUTRA +For RSRP: RSRP based threshold for event evaluation. The actual value is IE value – 140 dBm. +For RSRQ: RSRQ based threshold for event evaluation. The actual value is (IE value – 40)/2 dB. timeToTrigger +Time during which specific criteria for the event needs to be met in order to trigger a measurement report. triggerQuantity +The quantities used to evaluate the triggering condition for the event. The values rsrp and rsrq correspond to Reference Signal Received Power (RSRP) and Reference Signal Received Quality (RSRQ), see TS 36.214 [48]. ue-RxTxTimeDiffPeriodical +If this field is present, the UE shall perform UE Rx-Tx time difference measurement reporting and ignore the fields triggerQuantity, reportQuantity and maxReportCells. If the field is present, the only applicable values for the corresponding triggerType and purpose are periodical and reportStrongestCells respectively. +Conditional presence Explanation reportCGI The field is optional, need OR, in case purpose is included and set to reportCGI; otherwise the field is not present. reportMDT The field is optional, need OR, in case triggerType is set to eventA2 or periodical; otherwise the field is not present. +– ReportConfigId +The IE ReportConfigId is used to identify a measurement reporting configuration. +ReportConfigId information element +-- ASN1START + +ReportConfigId ::= INTEGER (1..maxReportConfigId) + +-- ASN1STOP + +– ReportConfigInterRAT +The IE ReportConfigInterRAT specifies criteria for triggering of an inter-RAT measurement reporting event. The inter-RAT measurement reporting events are labelled BN with N equal to 1, 2 and so on. +Event B1: Neighbour becomes better than absolute threshold; +Event B2: PCell becomes worse than absolute threshold1 AND Neighbour becomes better than another absolute threshold2. +The b1 and b2 event thresholds for CDMA2000 are the CDMA2000 pilot detection thresholds are expressed as an unsigned binary number equal to [-2 x 10 log 10 Ec/Io] in units of 0.5dB, see C.S0005-A [25] for details. +ReportConfigInterRAT information element +-- ASN1START + +ReportConfigInterRAT ::= SEQUENCE { + triggerType CHOICE { + event SEQUENCE { + eventId CHOICE { + eventB1 SEQUENCE { + b1-Threshold CHOICE { + b1-ThresholdUTRA ThresholdUTRA, + b1-ThresholdGERAN ThresholdGERAN, + b1-ThresholdCDMA2000 ThresholdCDMA2000 + } + }, + eventB2 SEQUENCE { + b2-Threshold1 ThresholdEUTRA, + b2-Threshold2 CHOICE { + b2-Threshold2UTRA ThresholdUTRA, + b2-Threshold2GERAN ThresholdGERAN, + b2-Threshold2CDMA2000 ThresholdCDMA2000 + } + }, + ... + }, + hysteresis Hysteresis, + timeToTrigger TimeToTrigger + }, + periodical SEQUENCE { + purpose ENUMERATED { + reportStrongestCells, + reportStrongestCellsForSON, + reportCGI} + } + }, + maxReportCells INTEGER (1..maxCellReport), + reportInterval ReportInterval, + reportAmount ENUMERATED {r1, r2, r4, r8, r16, r32, r64, infinity}, + ..., + [[ si-RequestForHO-r9 ENUMERATED {setup} OPTIONAL -- Cond reportCGI + ]], + [[ reportQuantityUTRA-FDD-r10 ENUMERATED {both} OPTIONAL -- Need OR + ]] +} + +ThresholdUTRA ::= CHOICE{ + utra-RSCP INTEGER (-5..91), + utra-EcN0 INTEGER (0..49) +} + +ThresholdGERAN ::= INTEGER (0..63) + +ThresholdCDMA2000 ::= INTEGER (0..63) + +-- ASN1STOP + +ReportConfigInterRAT field descriptions bN-ThresholdM +Threshold to be used in inter RAT measurement report triggering condition for event number bN. If multiple thresholds are defined for event number bN, the thresholds are differentiated by M. eventId +Choice of inter-RAT event triggered reporting criteria. maxReportCells +Max number of cells, excluding the serving cell, to include in the measurement report. In case purpose is set to reportStrongestCellsForSON only value 1 applies. Purpose +reportStrongestCellsForSON applies only in case reportConfig is linked to a measObject set to measObjectUTRA or measObjectCDMA2000. reportAmount +Number of measurement reports applicable for triggerType event as well as for triggerType periodical. In case purpose is set to reportCGI or reportStrongestCellsForSON only value 1 applies. reportQuantityUTRA-FDD +The quantities to be included in the UTRA measurement report. The value both means that both the cpich RSCP and cpich EcN0 quantities are to be included in the measurement report. si-RequestForHO +The field applies to the reportCGI functionality, and when the field is included, the UE is allowed to use autonomous gaps in acquiring system information from the neighbour cell, applies a different value for T321, and includes different fields in the measurement report. ThresholdGERAN +The actual value is IE value – 110 dBm. ThresholdUTRA +utra-RSCP corresponds to CPICH_RSCP in TS 25.133 [29] for FDD and P-CCPCH_RSCP in TS 25.123 [30] for TDD. utra-EcN0 corresponds to CPICH_Ec/No in TS 25.133 [29] for FDD, and is not applicable for TDD. +For utra-RSCP: The actual value is IE value – 115 dBm. +For utra-EcN0: The actual value is (IE value – 49)/2 dB. timeToTrigger +Time during which specific criteria for the event needs to be met in order to trigger a measurement report. +Conditional presence Explanation reportCGI The field is optional, need OR, in case purpose is included and set to reportCGI; otherwise the field is not present. +– ReportConfigToAddModList +The IE ReportConfigToAddModList concerns a list of reporting configurations to add or modify +ReportConfigToAddModList information element +-- ASN1START + +ReportConfigToAddModList ::= SEQUENCE (SIZE (1..maxReportConfigId)) OF ReportConfigToAddMod + +ReportConfigToAddMod ::= SEQUENCE { + reportConfigId ReportConfigId, + reportConfig CHOICE { + reportConfigEUTRA ReportConfigEUTRA, + reportConfigInterRAT ReportConfigInterRAT + } +} + + +-- ASN1STOP + +– ReportInterval +The ReportInterval indicates the interval between periodical reports. The ReportInterval is applicable if the UE performs periodical reporting (i.e. when reportAmount exceeds 1), for triggerType event as well as for triggerType periodical. Value ms120 corresponds with 120 ms, ms240 corresponds with 240 ms and so on, while value min1 corresponds with 1 min, min6 corresponds with 6 min and so on. +ReportInterval information element +-- ASN1START + +ReportInterval ::= ENUMERATED { + ms120, ms240, ms480, ms640, ms1024, ms2048, ms5120, ms10240, + min1, min6, min12, min30, min60, spare3, spare2, spare1} + +-- ASN1STOP + +– RSRP-Range +The IE RSRP-Range specifies the value range used in RSRP measurements and thresholds. Integer value for RSRP measurements according to mapping table in TS 36.133 [16]. +RSRP-Range information element +-- ASN1START + +RSRP-Range ::= INTEGER(0..97) + +-- ASN1STOP + +– RSRQ-Range +The IE RSRQ-Range specifies the value range used in RSRQ measurements and thresholds. Integer value for RSRQ measurements according to mapping table in TS 36.133 [16]. +RSRQ-Range information element +-- ASN1START + +RSRQ-Range ::= INTEGER(0..34) + +-- ASN1STOP + +– TimeToTrigger +The IE TimeToTrigger specifies the value range used for time to trigger parameter, which concerns the time during which specific criteria for the event needs to be met in order to trigger a measurement report. Value ms0 corresponds to 0 ms, ms40 corresponds to 40 ms, and so on. +TimeToTrigger information element +-- ASN1START + +TimeToTrigger ::= ENUMERATED { + ms0, ms40, ms64, ms80, ms100, ms128, ms160, ms256, + ms320, ms480, ms512, ms640, ms1024, ms1280, ms2560, + ms5120} + +-- ASN1STOP + +6.3.6 Other information elements +– AbsoluteTimeInfo +The IE AbsoluteTimeInfo indicates an absolute time in a format YY-MM-DD HH:MM:SS and using BCD encoding. The first/ leftmost bit of the bit string contains the most significant bit of the most significant digit of the year and so on. +AbsoluteTimeInfo information element +-- ASN1START + +AbsoluteTimeInfo-r10 ::= BIT STRING (SIZE (48)) + +-- ASN1STOP + +– AreaConfiguration +The AreaConfiguration indicates area for which UE is requested to perform measurement logging. If not configured, measurement logging applies in the entire RPLMN of the UE at the point of receiving the configuration +AreaConfiguration information element +-- ASN1START + +AreaConfiguration-r10 ::= CHOICE { + cellGlobalIdList-r10 CellGlobalIdList-r10, + trackingAreaCodeList-r10 TrackingAreaCodeList-r10 +} + +CellGlobalIdList-r10 ::= SEQUENCE (SIZE (1..32)) OF CellGlobalIdEUTRA + +TrackingAreaCodeList-r10 ::= SEQUENCE (SIZE (1..8)) OF TrackingAreaCode + +-- ASN1STOP + +– C-RNTI +The IE C-RNTI identifies a UE having a RRC connection within a cell. +C-RNTI information element +-- ASN1START + +C-RNTI ::= BIT STRING (SIZE (16)) + +-- ASN1STOP + +– DedicatedInfoCDMA2000 +The DedicatedInfoCDMA2000 is used to transfer UE specific CDMA2000 information between the network and the UE. The RRC layer is transparent for this information. +DedicatedInfoCDMA2000 information element +-- ASN1START + +DedicatedInfoCDMA2000 ::= OCTET STRING + +-- ASN1STOP + +– DedicatedInfoNAS +The IE DedicatedInfoNAS is used to transfer UE specific NAS layer information between the network and the UE. The RRC layer is transparent for this information. +DedicatedInfoNAS information element +-- ASN1START + +DedicatedInfoNAS ::= OCTET STRING + +-- ASN1STOP + +– FilterCoefficient +The IE FilterCoefficient specifies the measurement filtering coefficient. Value fc0 corresponds to k = 0, fc1 corresponds to k = 1, and so on. +FilterCoefficient information element +-- ASN1START + +FilterCoefficient ::= ENUMERATED { + fc0, fc1, fc2, fc3, fc4, fc5, + fc6, fc7, fc8, fc9, fc11, fc13, + fc15, fc17, fc19, spare1, ...} + +-- ASN1STOP + +– LoggingDuration +The LoggingDuration indicates the duration for which UE is requested to perform measurement logging. Value min10 corresponds to 10 minutes, value min20 corresponds to 20 minutes and so on. +LoggingDuration information element +-- ASN1START + +LoggingDuration-r10 ::= ENUMERATED { + min10, min20, min40, min60, min90, min120, spare2, spare1} + +-- ASN1STOP + +– LoggingInterval +The LoggingInterval indicates the periodicity for logging measurement results. Value ms1280 corresponds to 1.28s, value ms2560 corresponds to 2.56s and so on. +LoggingInterval information element +-- ASN1START + +LoggingInterval-r10 ::= ENUMERATED { + ms1280, ms2560, ms5120, ms10240, ms20480, + ms30720, ms40960, ms61440} + +-- ASN1STOP + +– MeasSubframePattern +The IE MeasSubframePattern is used to specify time domain measurement resource restriction. The first/leftmost bit corresponds to the subframe #0 of the radio frame satisfying SFN mod x = 0, where SFN is that of PCell and x is the size of the bit string divided by 10. "1" denotes that the corresponding subframe is used for measurement. +MeasSubframePattern information element +-- ASN1START + +MeasSubframePattern-r10 ::= CHOICE { + subframePatternFDD-r10 BIT STRING (SIZE (40)), + subframePatternTDD-r10 CHOICE { + subframeConfig1-5-r10 BIT STRING (SIZE (20)), + subframeConfig0-r10 BIT STRING (SIZE (70)), + subframeConfig6-r10 BIT STRING (SIZE (60)), + ... + }, + ... +} + +-- ASN1STOP + +– MMEC +The IE MMEC identifies an MME within the scope of an MME Group within a PLMN, see TS 23.003 [27]. +MMEC information element +-- ASN1START + +MMEC ::= BIT STRING (SIZE (8)) + +-- ASN1STOP + + +– NeighCellConfig +The IE NeighCellConfig is used to provide the information related to MBSFN and TDD UL/DL configuration of neighbour cells. +NeighCellConfig information element +-- ASN1START + +NeighCellConfig ::= BIT STRING (SIZE (2)) + +-- ASN1STOP + +NeighCellConfig field descriptions neighCellConfig +Provides information related to MBSFN and TDD UL/DL configuration of neighbour cells of this frequency +00: Not all neighbour cells have the same MBSFN subframe allocation as the serving cell on this frequency, if configured, and as the PCell otherwise +10: The MBSFN subframe allocations of all neighbour cells are identical to or subsets of that in the serving cell on this frequency, if configured, and of that in the PCell otherwise +01: No MBSFN subframes are present in all neighbour cells +11: Different UL/DL allocation in neighbouring cells for TDD compared to the serving cell on this frequency, if configured, and compared to the PCell otherwise +For TDD, 00, 10 and 01 are only used for same UL/DL allocation in neighbouring cells compared to the serving cell on this frequency, if configured, and compared to the PCell otherwise. +– OtherConfig +The IE OtherConfig contains configuration related to other configuration +OtherConfig information element +-- ASN1START + +OtherConfig-r9 ::= SEQUENCE { + reportProximityConfig-r9 ReportProximityConfig-r9 OPTIONAL, -- Need ON + ... +} + +ReportProximityConfig-r9 ::= SEQUENCE { + proximityIndicationEUTRA-r9 ENUMERATED {enabled} OPTIONAL, -- Need OR + proximityIndicationUTRA-r9 ENUMERATED {enabled} OPTIONAL -- Need OR +} + +-- ASN1STOP + +OtherConfig field descriptions reportProximityConfig +Indicates, for each of the applicable RATs (EUTRA, UTRA), whether or not proximity indication is enabled for CSG member cell(s) of the concerned RAT. Note. +NOTE: Enabling/ disabling of proximity indication includes enabling/ disabling of the related functionality e.g. autonomous search in connected mode. +– RAND-CDMA2000 (1xRTT) +The RAND-CDMA2000 concerns a random value, generated by the eNB, to be passed to the CDMA2000 upper layers. +RAND-CDMA2000 information element +-- ASN1START + +RAND-CDMA2000 ::= BIT STRING (SIZE (32)) + +-- ASN1STOP + +– RAT-Type +The IE RAT-Type is used to indicate the radio access technology (RAT), including EUTRA, of the requested/ transferred UE capabilities. +RAT-Type information element +-- ASN1START + +RAT-Type ::= ENUMERATED { + eutra, utra, geran-cs, geran-ps, cdma2000-1XRTT, + spare3, spare2, spare1, ...} + +-- ASN1STOP + +– RRC-TransactionIdentifier +The IE RRC-TransactionIdentifier is used, together with the message type, for the identification of an RRC procedure (transaction). +RRC-TransactionIdentifier information element +-- ASN1START + +RRC-TransactionIdentifier ::= INTEGER (0..3) + +-- ASN1STOP + +– S-TMSI +The IE S-TMSI contains an S-Temporary Mobile Subscriber Identity, a temporary UE identity provided by the EPC which uniquely identifies the UE within the tracking area, see TS 23.003 [27]. +S-TMSI information element +-- ASN1START + +S-TMSI ::= SEQUENCE { + mmec MMEC, + m-TMSI BIT STRING (SIZE (32)) +} + +-- ASN1STOP + +S-TMSI field descriptions m-TMSI +The first/leftmost bit of the bit string contains the most significant bit of the M-TMSI. +– TraceReference +The TraceReference contains parameter Trace Reference as defined in TS 32.422 [58]. +TraceReference information element +-- ASN1START + +TraceReference-r10 ::= SEQUENCE { + plmn-Identity-r10 PLMN-Identity, + traceId-r10 OCTET STRING (SIZE (3)) +} + +-- ASN1STOP + +– UE-CapabilityRAT-ContainerList +The IE UE-CapabilityRAT-ContainerList contains list of containers, one for each RAT for which UE capabilities are transferred, if any. +UE-CapabilityRAT-ContainerList information element +-- ASN1START + +UE-CapabilityRAT-ContainerList ::=SEQUENCE (SIZE (0..maxRAT-Capabilities)) OF UE-CapabilityRAT-Container + +UE-CapabilityRAT-Container ::= SEQUENCE { + rat-Type RAT-Type, + ueCapabilityRAT-Container OCTET STRING +} + +-- ASN1STOP + +UECapabilityRAT-ContainerList field descriptions ueCapabilityRAT-Container +Container for the UE capabilities of the indicated RAT. The encoding is defined in the specification of each RAT: +For EUTRA: the encoding of UE capabilities is defined in IE UE-EUTRA-Capability. +For UTRA: the octet string contains the INTER RAT HANDOVER INFO message defined in TS 25.331 [19]. +For GERAN CS: the octet string contains the concatenated string of the Mobile Station Classmark 2 and Mobile Station Classmark 3. The first 5 octets correspond to Mobile Station Classmark 2 and the following octets correspond to Mobile Station Classmark 3. The Mobile Station Classmark 2 is formatted as 'TLV' and is coded in the same way as the Mobile Station Classmark 2 information element in TS 24.008 [49]. The first octet is the Mobile station classmark 2 IEI and its value shall be set to 33H. The second octet is the Length of mobile station classmark 2 and its value shall be set to 3. The octet 3 contains the first octet of the value part of the Mobile Station Classmark 2 information element, the octet 4 contains the second octet of the value part of the Mobile Station Classmark 2 information element and so on. For each of these octets, the first/ leftmost/ most significant bit of the octet contains b8 of the corresponding octet of the Mobile Station Classmark 2. The Mobile Station Classmark 3 is formatted as 'V' and is coded in the same way as the value part in the Mobile station classmark 3 information element in TS 24.008 [49]. The sixth octet of this octet string contains octet 1 of the value part of Mobile station classmark 3, the seventh of octet of this octet string contains octet 2 of the value part of Mobile station classmark 3 and so on. Note. +For GERAN PS: the encoding of UE capabilities is formatted as 'V' and is coded in the same way as the value part in the MS Radio Access Capability information element in TS 24.008 [49]. +For CDMA2000-1XRTT: the octet string contains the A21 Mobile Subscription Information and the encoding of this is defined in A.S0008-C [33]. The A21 Mobile Subscription Information contains the supported CDMA2000 1xRTT band class and band sub-class information. NOTE: The value part is specified by means of CSN.1, which encoding results in a bit string, to which final padding may be appended up to the next octet boundary TS 24.008 [49]. The first/ leftmost bit of the CSN.1 bit string is placed in the first/ leftmost/ most significant bit of the first octet. This continues until the last bit of the CSN.1 bit string, which is placed in the last/ rightmost/ least significant bit of the last octet. +– UE-EUTRA-Capability +The IE UE-EUTRA-Capability is used to convey the E-UTRA UE Radio Access Capability Parameters, see TS 36.306 [5], and the Feature Group Indicators for mandatory features (defined in Annexes B.1 and C.1) to the network. The IE UE-EUTRA-Capability is transferred in E-UTRA or in another RAT. +UE-EUTRA-Capability information element +-- ASN1START + +UE-EUTRA-Capability ::= SEQUENCE { + accessStratumRelease AccessStratumRelease, + ue-Category INTEGER (1..5), + pdcp-Parameters PDCP-Parameters, + phyLayerParameters PhyLayerParameters, + rf-Parameters RF-Parameters, + measParameters MeasParameters, + featureGroupIndicators BIT STRING (SIZE (32)) OPTIONAL, + interRAT-Parameters SEQUENCE { + utraFDD IRAT-ParametersUTRA-FDD OPTIONAL, + utraTDD128 IRAT-ParametersUTRA-TDD128 OPTIONAL, + utraTDD384 IRAT-ParametersUTRA-TDD384 OPTIONAL, + utraTDD768 IRAT-ParametersUTRA-TDD768 OPTIONAL, + geran IRAT-ParametersGERAN OPTIONAL, + cdma2000-HRPD IRAT-ParametersCDMA2000-HRPD OPTIONAL, + cdma2000-1xRTT IRAT-ParametersCDMA2000-1XRTT OPTIONAL + }, + nonCriticalExtension UE-EUTRA-Capability-v920-IEs OPTIONAL +} + +UE-EUTRA-Capability-v920-IEs ::= SEQUENCE { + phyLayerParameters-v920 PhyLayerParameters-v920, + interRAT-ParametersGERAN-v920 IRAT-ParametersGERAN-v920, + interRAT-ParametersUTRA-v920 IRAT-ParametersUTRA-v920 OPTIONAL, + interRAT-ParametersCDMA2000-v920 IRAT-ParametersCDMA2000-1XRTT-v920 OPTIONAL, + deviceType-r9 ENUMERATED {noBenFromBatConsumpOpt} OPTIONAL, + csg-ProximityIndicationParameters-r9 CSG-ProximityIndicationParameters-r9, + neighCellSI-AcquisitionParameters-r9 NeighCellSI-AcquisitionParameters-r9, + son-Parameters-r9 SON-Parameters-r9, + nonCriticalExtension UE-EUTRA-Capability-v940-IEs OPTIONAL +} + +UE-EUTRA-Capability-v940-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING (CONTAINING UE-EUTRA-Capability-v9a0-IEs) + OPTIONAL, + nonCriticalExtension UE-EUTRA-Capability-v1020-IEs OPTIONAL +} + +UE-EUTRA-Capability-v9a0-IEs ::= SEQUENCE { + featureGroupIndRel9Add-r9 BIT STRING (SIZE (32)) OPTIONAL, + fdd-Add-UE-EUTRA-Capabilities-r9 UE-EUTRA-CapabilityAddXDD-Mode-r9 OPTIONAL, + tdd-Add-UE-EUTRA-Capabilities-r9 UE-EUTRA-CapabilityAddXDD-Mode-r9 OPTIONAL, + nonCriticalExtension UE-EUTRA-Capability-v9c0-IEs OPTIONAL +} + +UE-EUTRA-Capability-v9c0-IEs ::= SEQUENCE { + interRAT-ParametersUTRA-v9c0 IRAT-ParametersUTRA-v9c0 OPTIONAL, + nonCriticalExtension UE-EUTRA-Capability-v9d0-IEs OPTIONAL +} + +UE-EUTRA-Capability-v9d0-IEs ::= SEQUENCE { + phyLayerParameters-v9d0 PhyLayerParameters-v9d0 OPTIONAL, + nonCriticalExtension UE-EUTRA-Capability-v9e0-IEs OPTIONAL +} + +UE-EUTRA-Capability-v9e0-IEs ::= SEQUENCE { + rf-Parameters-v9e0 RF-Parameters-v9e0 OPTIONAL, + nonCriticalExtension UE-EUTRA-Capability-v9h0-IEs OPTIONAL +} + +UE-EUTRA-Capability-v9h0-IEs ::= SEQUENCE { + interRAT-ParametersUTRA-v9h0 IRAT-ParametersUTRA-v9h0 OPTIONAL, + -- Following field is only to be used for late REL-9 extensions + lateNonCriticalExtension OCTET STRING OPTIONAL, + nonCriticalExtension UE-EUTRA-Capability-v10c0-IEs OPTIONAL +} + +UE-EUTRA-Capability-v10c0-IEs ::= SEQUENCE { + otdoa-PositioningCapabilities-r10 OTDOA-PositioningCapabilities-r10 OPTIONAL, + nonCriticalExtension UE-EUTRA-Capability-v10f0-IEs OPTIONAL +} + +UE-EUTRA-Capability-v10f0-IEs ::= SEQUENCE { + rf-Parameters-v10f0 RF-Parameters-v10f0 OPTIONAL, + -- Following field is only to be used for late REL-10 extensions + nonCriticalExtension SEQUENCE {} OPTIONAL +} + +UE-EUTRA-Capability-v1020-IEs ::= SEQUENCE { + ue-Category-v1020 INTEGER (6..8) OPTIONAL, + phyLayerParameters-v1020 PhyLayerParameters-v1020 OPTIONAL, + rf-Parameters-v1020 RF-Parameters-v1020 OPTIONAL, + measParameters-v1020 MeasParameters-v1020 OPTIONAL, + featureGroupIndRel10-r10 BIT STRING (SIZE (32)) OPTIONAL, + interRAT-ParametersCDMA2000-v1020 IRAT-ParametersCDMA2000-1XRTT-v1020 OPTIONAL, + ue-BasedNetwPerfMeasParameters-r10 UE-BasedNetwPerfMeasParameters-r10 OPTIONAL, + interRAT-ParametersUTRA-TDD-v1020 IRAT-ParametersUTRA-TDD-v1020 OPTIONAL, + nonCriticalExtension UE-EUTRA-Capability-v1060-IEs OPTIONAL +} + +UE-EUTRA-Capability-v1060-IEs ::= SEQUENCE { + fdd-Add-UE-EUTRA-Capabilities-v1060 UE-EUTRA-CapabilityAddXDD-Mode-v1060 OPTIONAL, + tdd-Add-UE-EUTRA-Capabilities-v1060 UE-EUTRA-CapabilityAddXDD-Mode-v1060 OPTIONAL, + rf-Parameters-v1060 RF-Parameters-v1060 OPTIONAL, + nonCriticalExtension UE-EUTRA-Capability-v1090-IEs OPTIONAL +} + +UE-EUTRA-Capability-v1090-IEs ::= SEQUENCE { + rf-Parameters-v1090 RF-Parameters-v1090 OPTIONAL, + nonCriticalExtension SEQUENCE {} OPTIONAL +} + +UE-EUTRA-CapabilityAddXDD-Mode-r9 ::= SEQUENCE { + phyLayerParameters-r9 PhyLayerParameters OPTIONAL, + featureGroupIndicators-r9 BIT STRING (SIZE (32)) OPTIONAL, + featureGroupIndRel9Add-r9 BIT STRING (SIZE (32)) OPTIONAL, + interRAT-ParametersGERAN-r9 IRAT-ParametersGERAN OPTIONAL, + interRAT-ParametersUTRA-r9 IRAT-ParametersUTRA-v920 OPTIONAL, + interRAT-ParametersCDMA2000-r9 IRAT-ParametersCDMA2000-1XRTT-v920 OPTIONAL, + neighCellSI-AcquisitionParameters-r9 NeighCellSI-AcquisitionParameters-r9 OPTIONAL, + ... +} + +UE-EUTRA-CapabilityAddXDD-Mode-v1060 ::= SEQUENCE { + phyLayerParameters-v1060 PhyLayerParameters-v1020 OPTIONAL, + featureGroupIndRel10-v1060 BIT STRING (SIZE (32)) OPTIONAL, + interRAT-ParametersCDMA2000-v1060 IRAT-ParametersCDMA2000-1XRTT-v1020 OPTIONAL, + interRAT-ParametersUTRA-TDD-v1060 IRAT-ParametersUTRA-TDD-v1020 OPTIONAL, + ..., + [[ otdoa-PositioningCapabilities-r10 OTDOA-PositioningCapabilities-r10 OPTIONAL + ]] +} + +AccessStratumRelease ::= ENUMERATED { + rel8, rel9, rel10, spare5, spare4, spare3, + spare2, spare1, ...} + +PDCP-Parameters ::= SEQUENCE { + supportedROHC-Profiles SEQUENCE { + profile0x0001 BOOLEAN, + profile0x0002 BOOLEAN, + profile0x0003 BOOLEAN, + profile0x0004 BOOLEAN, + profile0x0006 BOOLEAN, + profile0x0101 BOOLEAN, + profile0x0102 BOOLEAN, + profile0x0103 BOOLEAN, + profile0x0104 BOOLEAN + }, + maxNumberROHC-ContextSessions ENUMERATED { + cs2, cs4, cs8, cs12, cs16, cs24, cs32, + cs48, cs64, cs128, cs256, cs512, cs1024, + cs16384, spare2, spare1} DEFAULT cs16, + ... +} + +PhyLayerParameters ::= SEQUENCE { + ue-TxAntennaSelectionSupported BOOLEAN, + ue-SpecificRefSigsSupported BOOLEAN +} + +PhyLayerParameters-v920 ::= SEQUENCE { + enhancedDualLayerFDD-r9 ENUMERATED {supported} OPTIONAL, + enhancedDualLayerTDD-r9 ENUMERATED {supported} OPTIONAL +} + +PhyLayerParameters-v9d0 ::= SEQUENCE { + tm5-FDD-r9 ENUMERATED {supported} OPTIONAL, + tm5-TDD-r9 ENUMERATED {supported} OPTIONAL +} + +PhyLayerParameters-v1020 ::= SEQUENCE { + twoAntennaPortsForPUCCH-r10 ENUMERATED {supported} OPTIONAL, + tm9-With-8Tx-FDD-r10 ENUMERATED {supported} OPTIONAL, + pmi-Disabling-r10 ENUMERATED {supported} OPTIONAL, + crossCarrierScheduling-r10 ENUMERATED {supported} OPTIONAL, + simultaneousPUCCH-PUSCH-r10 ENUMERATED {supported} OPTIONAL, + multiClusterPUSCH-WithinCC-r10 ENUMERATED {supported} OPTIONAL, + nonContiguousUL-RA-WithinCC-List-r10 NonContiguousUL-RA-WithinCC-List-r10 OPTIONAL +} + +NonContiguousUL-RA-WithinCC-List-r10 ::= SEQUENCE (SIZE (1..maxBands)) OF NonContiguousUL-RA-WithinCC-r10 + +NonContiguousUL-RA-WithinCC-r10 ::= SEQUENCE { + nonContiguousUL-RA-WithinCC-Info-r10 ENUMERATED {supported} OPTIONAL +} + +RF-Parameters ::= SEQUENCE { + supportedBandListEUTRA SupportedBandListEUTRA +} + +RF-Parameters-v9e0 ::= SEQUENCE { + supportedBandListEUTRA-v9e0 SupportedBandListEUTRA-v9e0 OPTIONAL +} + +RF-Parameters-v1020 ::= SEQUENCE { + supportedBandCombination-r10 SupportedBandCombination-r10 +} + +RF-Parameters-v1060 ::= SEQUENCE { + supportedBandCombinationExt-r10 SupportedBandCombinationExt-r10 +} + +RF-Parameters-v1090 ::= SEQUENCE { + supportedBandCombination-v1090 SupportedBandCombination-v1090 OPTIONAL +} + +RF-Parameters-v10f0 ::= SEQUENCE { + modifiedMPR-Behavior-r10 BIT STRING (SIZE (32)) OPTIONAL +} + +SupportedBandCombination-r10 ::= SEQUENCE (SIZE (1..maxBandComb-r10)) OF BandCombinationParameters-r10 + +SupportedBandCombinationExt-r10 ::= SEQUENCE (SIZE (1..maxBandComb-r10)) OF BandCombinationParametersExt-r10 + +SupportedBandCombination-v1090 ::= SEQUENCE (SIZE (1..maxBandComb-r10)) OF BandCombinationParameters-v1090 + +BandCombinationParameters-r10 ::= SEQUENCE (SIZE (1..maxSimultaneousBands-r10)) OF BandParameters-r10 + +BandCombinationParametersExt-r10 ::= SEQUENCE { + supportedBandwidthCombinationSet-r10 SupportedBandwidthCombinationSet-r10 OPTIONAL +} + +BandCombinationParameters-v1090 ::= SEQUENCE (SIZE (1..maxSimultaneousBands-r10)) OF BandParameters-v1090 + +SupportedBandwidthCombinationSet-r10 ::= BIT STRING (SIZE (1..maxBandwidthCombSet-r10)) + +BandParameters-r10 ::= SEQUENCE { + bandEUTRA-r10 INTEGER (1..64), + bandParametersUL-r10 BandParametersUL-r10 OPTIONAL, + bandParametersDL-r10 BandParametersDL-r10 OPTIONAL +} + +BandParameters-v1090 ::= SEQUENCE { + bandEUTRA-v1090 FreqBandIndicator-v9e0 OPTIONAL, + ... +} + +BandParametersUL-r10 ::= SEQUENCE (SIZE (1..maxBandwidthClass-r10)) OF CA-MIMO-ParametersUL-r10 + +CA-MIMO-ParametersUL-r10 ::= SEQUENCE { + ca-BandwidthClassUL-r10 CA-BandwidthClass-r10, + supportedMIMO-CapabilityUL-r10 MIMO-CapabilityUL-r10 OPTIONAL +} + +BandParametersDL-r10 ::= SEQUENCE (SIZE (1..maxBandwidthClass-r10)) OF CA-MIMO-ParametersDL-r10 + +CA-MIMO-ParametersDL-r10 ::= SEQUENCE { + ca-BandwidthClassDL-r10 CA-BandwidthClass-r10, + supportedMIMO-CapabilityDL-r10 MIMO-CapabilityDL-r10 OPTIONAL +} + +CA-BandwidthClass-r10 ::= ENUMERATED {a, b, c, d, e, f, ...} + +MIMO-CapabilityUL-r10 ::= ENUMERATED {twoLayers, fourLayers} + +MIMO-CapabilityDL-r10 ::= ENUMERATED {twoLayers, fourLayers, eightLayers} + +SupportedBandListEUTRA ::= SEQUENCE (SIZE (1..maxBands)) OF SupportedBandEUTRA + +SupportedBandListEUTRA-v9e0::= SEQUENCE (SIZE (1..maxBands)) OF SupportedBandEUTRA-v9e0 + +SupportedBandEUTRA ::= SEQUENCE { + bandEUTRA INTEGER (1..64), + halfDuplex BOOLEAN +} + +SupportedBandEUTRA-v9e0 ::= SEQUENCE { + bandEUTRA-v9e0 FreqBandIndicator-v9e0 OPTIONAL +} + +MeasParameters ::= SEQUENCE { + bandListEUTRA BandListEUTRA +} + +MeasParameters-v1020 ::= SEQUENCE { + bandCombinationListEUTRA-r10 BandCombinationListEUTRA-r10 +} + +BandListEUTRA ::= SEQUENCE (SIZE (1..maxBands)) OF BandInfoEUTRA + +BandCombinationListEUTRA-r10 ::= SEQUENCE (SIZE (1..maxBandComb-r10)) OF BandInfoEUTRA + +BandInfoEUTRA ::= SEQUENCE { + interFreqBandList InterFreqBandList, + interRAT-BandList InterRAT-BandList OPTIONAL +} + +InterFreqBandList ::= SEQUENCE (SIZE (1..maxBands)) OF InterFreqBandInfo + +InterFreqBandInfo ::= SEQUENCE { + interFreqNeedForGaps BOOLEAN +} + +InterRAT-BandList ::= SEQUENCE (SIZE (1..maxBands)) OF InterRAT-BandInfo + +InterRAT-BandInfo ::= SEQUENCE { + interRAT-NeedForGaps BOOLEAN +} + +IRAT-ParametersUTRA-FDD ::= SEQUENCE { + supportedBandListUTRA-FDD SupportedBandListUTRA-FDD +} + +IRAT-ParametersUTRA-v920 ::= SEQUENCE { + e-RedirectionUTRA-r9 ENUMERATED {supported} +} + +IRAT-ParametersUTRA-v9c0 ::= SEQUENCE { + voiceOverPS-HS-UTRA-FDD-r9 ENUMERATED {supported} OPTIONAL, + voiceOverPS-HS-UTRA-TDD128-r9 ENUMERATED {supported} OPTIONAL, + srvcc-FromUTRA-FDD-ToUTRA-FDD-r9 ENUMERATED {supported} OPTIONAL, + srvcc-FromUTRA-FDD-ToGERAN-r9 ENUMERATED {supported} OPTIONAL, + srvcc-FromUTRA-TDD128-ToUTRA-TDD128-r9 ENUMERATED {supported} OPTIONAL, + srvcc-FromUTRA-TDD128-ToGERAN-r9 ENUMERATED {supported} OPTIONAL +} + +IRAT-ParametersUTRA-v9h0 ::= SEQUENCE { + mfbi-UTRA-r9 ENUMERATED {supported} +} + +SupportedBandListUTRA-FDD ::= SEQUENCE (SIZE (1..maxBands)) OF SupportedBandUTRA-FDD + +SupportedBandUTRA-FDD ::= ENUMERATED { + bandI, bandII, bandIII, bandIV, bandV, bandVI, + bandVII, bandVIII, bandIX, bandX, bandXI, + bandXII, bandXIII, bandXIV, bandXV, bandXVI, ..., + bandXVII-8a0, bandXVIII-8a0, bandXIX-8a0, bandXX-8a0, + bandXXI-8a0, bandXXII-8a0, bandXXIII-8a0, bandXXIV-8a0, + bandXXV-8a0, bandXXVI-8a0, bandXXVII-8a0, bandXXVIII-8a0, + bandXXIX-8a0, bandXXX-8a0, bandXXXI-8a0, bandXXXII-8a0} + +IRAT-ParametersUTRA-TDD128 ::= SEQUENCE { + supportedBandListUTRA-TDD128 SupportedBandListUTRA-TDD128 +} + +SupportedBandListUTRA-TDD128 ::= SEQUENCE (SIZE (1..maxBands)) OF SupportedBandUTRA-TDD128 + +SupportedBandUTRA-TDD128 ::= ENUMERATED { + a, b, c, d, e, f, g, h, i, j, k, l, m, n, + o, p, ...} + +IRAT-ParametersUTRA-TDD384 ::= SEQUENCE { + supportedBandListUTRA-TDD384 SupportedBandListUTRA-TDD384 +} + +SupportedBandListUTRA-TDD384 ::= SEQUENCE (SIZE (1..maxBands)) OF SupportedBandUTRA-TDD384 + +SupportedBandUTRA-TDD384 ::= ENUMERATED { + a, b, c, d, e, f, g, h, i, j, k, l, m, n, + o, p, ...} + +IRAT-ParametersUTRA-TDD768 ::= SEQUENCE { + supportedBandListUTRA-TDD768 SupportedBandListUTRA-TDD768 +} + +SupportedBandListUTRA-TDD768 ::= SEQUENCE (SIZE (1..maxBands)) OF SupportedBandUTRA-TDD768 + +SupportedBandUTRA-TDD768 ::= ENUMERATED { + a, b, c, d, e, f, g, h, i, j, k, l, m, n, + o, p, ...} + +IRAT-ParametersUTRA-TDD-v1020 ::= SEQUENCE { + e-RedirectionUTRA-TDD-r10 ENUMERATED {supported} +} + +IRAT-ParametersGERAN ::= SEQUENCE { + supportedBandListGERAN SupportedBandListGERAN, + interRAT-PS-HO-ToGERAN BOOLEAN +} + +IRAT-ParametersGERAN-v920 ::= SEQUENCE { + dtm-r9 ENUMERATED {supported} OPTIONAL, + e-RedirectionGERAN-r9 ENUMERATED {supported} OPTIONAL +} + +SupportedBandListGERAN ::= SEQUENCE (SIZE (1..maxBands)) OF SupportedBandGERAN + +SupportedBandGERAN ::= ENUMERATED { + gsm450, gsm480, gsm710, gsm750, gsm810, gsm850, + gsm900P, gsm900E, gsm900R, gsm1800, gsm1900, + spare5, spare4, spare3, spare2, spare1, ...} + +IRAT-ParametersCDMA2000-HRPD ::= SEQUENCE { + supportedBandListHRPD SupportedBandListHRPD, + tx-ConfigHRPD ENUMERATED {single, dual}, + rx-ConfigHRPD ENUMERATED {single, dual} +} + +SupportedBandListHRPD ::= SEQUENCE (SIZE (1..maxCDMA-BandClass)) OF BandclassCDMA2000 + +IRAT-ParametersCDMA2000-1XRTT ::= SEQUENCE { + supportedBandList1XRTT SupportedBandList1XRTT, + tx-Config1XRTT ENUMERATED {single, dual}, + rx-Config1XRTT ENUMERATED {single, dual} +} + +IRAT-ParametersCDMA2000-1XRTT-v920 ::= SEQUENCE { + e-CSFB-1XRTT-r9 ENUMERATED {supported}, + e-CSFB-ConcPS-Mob1XRTT-r9 ENUMERATED {supported} OPTIONAL +} + +IRAT-ParametersCDMA2000-1XRTT-v1020 ::= SEQUENCE { + e-CSFB-dual-1XRTT-r10 ENUMERATED {supported} +} + +SupportedBandList1XRTT ::= SEQUENCE (SIZE (1..maxCDMA-BandClass)) OF BandclassCDMA2000 + +CSG-ProximityIndicationParameters-r9 ::= SEQUENCE { + intraFreqProximityIndication-r9 ENUMERATED {supported} OPTIONAL, + interFreqProximityIndication-r9 ENUMERATED {supported} OPTIONAL, + utran-ProximityIndication-r9 ENUMERATED {supported} OPTIONAL +} + +NeighCellSI-AcquisitionParameters-r9 ::= SEQUENCE { + intraFreqSI-AcquisitionForHO-r9 ENUMERATED {supported} OPTIONAL, + interFreqSI-AcquisitionForHO-r9 ENUMERATED {supported} OPTIONAL, + utran-SI-AcquisitionForHO-r9 ENUMERATED {supported} OPTIONAL +} + +SON-Parameters-r9 ::= SEQUENCE { + rach-Report-r9 ENUMERATED {supported} OPTIONAL +} + +UE-BasedNetwPerfMeasParameters-r10 ::= SEQUENCE { + loggedMeasurementsIdle-r10 ENUMERATED {supported} OPTIONAL, + standaloneGNSS-Location-r10 ENUMERATED {supported} OPTIONAL +} + +OTDOA-PositioningCapabilities-r10 ::= SEQUENCE { + otdoa-UE-Assisted-r10 ENUMERATED {supported}, + interFreqRSTD-Measurement-r10 ENUMERATED {supported} OPTIONAL +} + +-- ASN1STOP + + +UE-EUTRA-Capability field descriptions FDD/ TDD diff accessStratumRelease +Set to rel10 in this version of the specification. - bandCombinationListEUTRA +One entry corresponding to each supported band combination listed in the same order as in supportedBandCombination. - BandCombinationParameters-v1090 +If included, the UE shall include the same number of entries, and listed in the same order, as in BandCombinationParameters-r10. - bandEUTRA +EUTRA band as defined in TS 36.101 [42]. In case the UE includes bandEUTRA-v9e0 or bandEUTRA-v1090, the UE shall set the corresponding entry of bandEUTRA (i.e. without suffix) or bandEUTRA-r10 respectively to maxFBI. - bandListEUTRA +One entry corresponding to each supported EUTRA band listed in the same order as in supportedBandListEUTRA. - bandParametersUL, bandParametersDL +Indicates the supported parameters for the band. UE shall indicate parameters for only one CA uplink or downlink bandwidth class in a single band combination entry. - CA-BandwidthClass +The CA bandwidth class supported by the UE as defined in TS 36.101 [42, Table 5.6A-1]. +The UE explicitly includes all the supported CA bandwidth class combinations in the band combination signalling. Support for one CA bandwidth class does not implicitly indicate support for another CA bandwidth class. - crossCarrierScheduling Yes deviceType +UE may set the value to “noBenFromBatConsumpOpt” when it does not foresee to particularly benefit from NW-based battery consumption optimisation. Absence of this value means that the device does benefit from NW-based battery consumption optimisation. - dtm +Indicates whether the UE supports DTM in GERAN. - e-CSFB-1XRTT +Indicates whether the UE supports enhanced CS fallback to CDMA2000 1xRTT or not. Yes e-CSFB-ConcPS-Mob1XRTT +Indicates whether the UE supports concurrent enhanced CS fallback to CDMA2000 1xRTT and PS handover/ redirection to CDMA2000 HRPD. Yes e-CSFB-dual-1XRTT +Indicates whether the UE supports enhanced CS fallback to CDMA2000 1xRTT for dual Rx/Tx configuration. This bit can only be set to supported if tx-Config1XRTT and rx-Config1XRTT are both set to dual. Yes enhancedDualLayerTDD +Indicates whether the UE supports enhanced dual layer (PDSCH transmission mode 8) for TDD or not. - e-RedirectionUTRA Yes e-RedirectionUTRA-TDD +Indicates whether the UE supports enhanced redirection to UTRA TDD to multiple carrier frequencies both with and without using related SIB provided by RRCConnectionRelease or not. Yes featureGroupIndicators, featureGroupIndRel9Add, featureGroupIndRel10 +The definitions of the bits in the bit string are described in Annex B.1 (for featureGroupIndicators and featureGroupIndRel9Add) and in Annex C.1.(for featureGroupIndRel10) Yes halfDuplex +If halfDuplex is set to true, only half duplex operation is supported for the band, otherwise full duplex operation is supported. - interFreqBandList +One entry corresponding to each supported EUTRA band listed in the same order as in supportedBandListEUTRA. - interFreqNeedForGaps +Indicates need for measurement gaps when operating on the EUTRA band given by the entry in bandListEUTRA or on the E-UTRA band combination given by the entry in bandCombinationListEUTRA and measuring on the EUTRA band given by the entry in interFreqBandList. - interFreqProximityIndication +Indicates whether the UE supports proximity indication for inter-frequency E-UTRAN CSG member cells. - interFreqRSTD-Measurement +Indicates whether the UE supports inter-frequency RSTD measurements for OTDOA positioning [54]. Yes interFreqSI-AcquisitionForHO +Indicates whether the UE supports, upon configuration of si-RequestForHO by the network, acquisition and reporting of relevant information using autonomous gaps by reading the SI from a neighbouring inter-frequency cell. Yes interRAT-BandList +One entry corresponding to each supported band of another RAT listed in the same order as in the interRAT-Parameters. - interRAT-NeedForGaps +Indicates need for DL measurement gaps when operating on the EUTRA band given by the entry in bandListEUTRA or on the E-UTRA band combination given by the entry in bandCombinationListEUTRA and measuring on the inter-RAT band given by the entry in the interRAT-BandList. - interRAT-PS-HO-ToGERAN +Indicates whether the UE supports inter-RAT PS handover to GERAN or not. Yes intraFreqProximityIndication +Indicates whether the UE supports proximity indication for intra-frequency E-UTRAN CSG member cells. - intraFreqSI-AcquisitionForHO +Indicates whether the UE supports, upon configuration of si-RequestForHO by the network, acquisition and reporting of relevant information using autonomous gaps by reading the SI from a neighbouring intra-frequency cell. Yes loggedMeasurementsIdle +Indicates whether the UE supports logged measurements in Idle mode. - maxNumberROHC-ContextSessions +Set to the maximum number of concurrently active ROHC contexts supported by the UE, excluding context sessions that leave all headers uncompressed. cs2 corresponds with 2 (context sessions), cs4 corresponds with 4 and so on. The network ignores this field if the UE supports none of the ROHC profiles in supportedROHC-Profiles. - mfbi-UTRA +It indicates if the UE supports the signalling requirements of multiple radio frequency bands in a UTRA FDD cell, as defined in TS 25.307 [63]. - MIMO-CapabilityDL +The number of supported layers for spatial multiplexing in DL. - MIMO-CapabilityUL +The number of supported layers for spatial multiplexing in UL. Absence of the field means that the number of supported layers is 1. - modifiedMPR-Behavior +Field encoded as a bit map, where at least one bit N is set to "1" if UE supports modified MPR/A-MPR behaviour N, see TS 36.101 [42]. All remaining bits of the field are set to “0”. The leading / leftmost bit (bit 0) corresponds to modified MPR/A-MPR behaviour 0, the next bit corresponds to modified MPR/A-MPR behaviour 1 and so on. Absence of this field means that UE does not support any modified MPR/A-MPR behaviour. - multiClusterPUSCH-WithinCC Yes NonContiguousUL-RA-WithinCC-List +One entry corresponding to each supported E-UTRA band listed in the same order as in supportedBandListEUTRA. No otdoa-UE-Assisted +Indicates whether the UE supports UE-assisted OTDOA positioning [54]. Yes pmi-Disabling Yes rach-Report +Indicates whether the UE supports delivery of rachReport. - simultaneousPUCCH-PUSCH Yes srvcc-FromUTRA-FDD-ToGERAN +Indicates whether UE supports SRVCC handover from UTRA FDD PS HS to GERAN CS. - srvcc-FromUTRA-FDD-ToUTRA-FDD +Indicates whether UE supports SRVCC handover from UTRA FDD PS HS to UTRA FDD CS. - srvcc-FromUTRA-TDD128-ToGERAN +Indicates whether UE supports SRVCC handover from UTRA TDD 1.28Mcps PS HS to GERAN CS. - srvcc-FromUTRA-TDD128-ToUTRA-TDD128 +Indicates whether UE supports SRVCC handover from UTRA TDD 1.28Mcps PS HS to UTRA TDD 1.28Mcps CS. - standaloneGNSS-Location +Indicates whether the UE is equipped with a standalone GNSS receiver that may be used to provide detailed location information in RRC measurement report and logged measurements. - supportedBandCombination +Includes the supported CA band combinations, if any, and may include all the supported non-CA bands. The UE shall include all the supported non-CA bands, regardless of whether it supports carrier aggregation, if: +a) it includes ue-Category-v1020 (i.e. category 6 to 8); or +b) for at least one of the non-CA bands, it supports more MIMO layers with TM9 than implied by the UE category - SupportedBandCombinationExt, SupportedBandCombination-v1090 +If included, the UE shall include the same number of entries, and listed in the same order, as in supportedBandCombination-r10. - SupportedBandGERAN +GERAN band as defined in TS 45.005 [20]. No SupportedBandList1XRTT +One entry corresponding to each supported CDMA2000 1xRTT band class. - SupportedBandListEUTRA +Includes the supported E-UTRA bands. +This field shall include all bands which are indicated in BandCombinationParameters. - SupportedBandListEUTRA-v9e0 +If included, the UE shall include the same number of entries, and listed in the same order, as in supportedListEUTRA (i.e. without suffix). - SupportedBandListGERAN No SupportedBandListHRPD +One entry corresponding to each supported CDMA2000 HRPD band class. - SupportedBandUTRA-FDD +UTRA band as defined in TS 25.101 [17]. - SupportedBandUTRA-TDD128 +UTRA band as defined in TS 25.102 [18]. - SupportedBandUTRA-TDD384 +UTRA band as defined in TS 25.102 [18]. - SupportedBandUTRA-TDD768 +UTRA band as defined in TS 25.102 [18]. - supportedBandwidthCombinationSet +The supportedBandwidthCombinationSet indicated for a band combination is applicable to all bandwidth classes indicated by the UE in this band combination. +Field encoded as a bit map, where bit N is set to "1" if UE support Bandwidth Combination Set N for this band combination, see 36.101 [42]. The leading / leftmost bit (bit 0) corresponds to the Bandwidth Combination Set 0, the next bit corresponds to the Bandwidth Combination Set 1 and so on. The UE shall neither include the field for a non-CA band combination, nor for a CA band combination for which the UE only supports Bandwidth Combination Set 0. - tm9-With-8Tx-FDD No tm5-FDD +Indicates whether the UE supports the PDSCH transmission mode 5 in FDD. - tm5-TDD +Indicates whether the UE supports the PDSCH transmission mode 5 in TDD. - twoAntennaPortsForPUCCH No ue-Category +UE category as defined in TS 36.306 [5]. Set to values 1 to 8 in this version of the specification. - ue-SpecificRefSigsSupported No ue-TxAntennaSelectionSupported +TRUE indicates that the UE is capable of supporting UE transmit antenna selection as described in TS 36.213 [23, 8.7]. Yes utran-ProximityIndication +Indicates whether the UE supports proximity indication for UTRAN CSG member cells. - utran-SI-AcquisitionForHO +Indicates whether the UE supports, upon configuration of si-RequestForHO by the network, acquisition and reporting of relevant information using autonomous gaps by reading the SI from a neighbouring UMTS cell. Yes voiceOverPS-HS-UTRA-FDD +Indicates whether UE supports IMS voice according to GSMA IR.58 profile in UTRA FDD. - voiceOverPS-HS-UTRA-TDD128 +Indicates whether UE supports IMS voice in UTRA TDD 1.28Mcps. - +NOTE 1: The IE UE-EUTRA-Capability does not include AS security capability information, since these are the same as the security capabilities that are signalled by NAS. Consequently AS need not provide "man-in-the-middle" protection for the security capabilities. +NOTE 2: The column FDD/ TDD diff indicates if the UE is allowed to signal, as part of the additional capabilities for an XDD mode i.e. within UE-EUTRA-CapabilityAddXDD-Mode-xNM, a different value compared to the value signalled elsewhere within UE-EUTRA-Capability (i.e. the common value, supported for both XDD modes). A '-' is used to indicate that it is not possible to signal different values (used for fields for which the field description is provided for other reasons). +NOTE 3: All the combinations of CA-MIMO-ParametersUL and CA-MIMO-ParametersDL for one band and across all the bands in each BandCombinationParameters are supported by the UE and have the same measurement gap requirement (i.e. the same BandInfoEUTRA applies). The BandCombinationParameters for the same band combination can be included more than once. +NOTE 4: UE CA and measurement capabilities indicate the combinations of frequencies that can be configured as serving frequencies. +– UE-TimersAndConstants +The IE UE-TimersAndConstants contains timers and constants used by the UE in either RRC_CONNECTED or RRC_IDLE. +UE-TimersAndConstants information element +-- ASN1START + +UE-TimersAndConstants ::= SEQUENCE { + t300 ENUMERATED { + ms100, ms200, ms300, ms400, ms600, ms1000, ms1500, + ms2000}, + t301 ENUMERATED { + ms100, ms200, ms300, ms400, ms600, ms1000, ms1500, + ms2000}, + t310 ENUMERATED { + ms0, ms50, ms100, ms200, ms500, ms1000, ms2000}, + n310 ENUMERATED { + n1, n2, n3, n4, n6, n8, n10, n20}, + t311 ENUMERATED { + ms1000, ms3000, ms5000, ms10000, ms15000, + ms20000, ms30000}, + n311 ENUMERATED { + n1, n2, n3, n4, n5, n6, n8, n10}, + ... +} + +-- ASN1STOP + +UE-TimersAndConstants field descriptions n3xy +Constants are described in section 7.4. n1 corresponds with 1, n2 corresponds with 2 and so on. t3xy +Timers are described in section 7.3. Value ms0 corresponds with 0 ms, ms50 corresponds with 50 ms and so on. +6.3.7 MBMS information elements + +– MBMS-NotificationConfig +The IE MBMS-NotificationConfig specifies the MBMS notification related configuration parameters, that are applicable for all MBSFN areas. +MBMS-NotificationConfig information element +-- ASN1START + +MBMS-NotificationConfig-r9 ::= SEQUENCE { + notificationRepetitionCoeff-r9 ENUMERATED {n2, n4}, + notificationOffset-r9 INTEGER (0..10), + notificationSF-Index-r9 INTEGER (1..6) +} + +-- ASN1STOP + +MBMS-NotificationConfig field descriptions notificationOffset +Indicates, together with the notificationRepetitionCoeff, the radio frames in which the MCCH information change notification is scheduled i.e. the MCCH information change notification is scheduled in radio frames for which: SFN mod notification repetition period = notificationOffset notificationRepetitionCoeff +Actual change notification repetition period common for all MCCHs that are configured= shortest modification period/ notificationRepetitionCoeff. The ‘shortest modificaton period’ corresponds with the lowest value of mcch-ModificationPeriod of all MCCHs that are configured. Value n2 corresponds to coefficient 2, and so on. notificationSF-Index +Indicates the subframe used to transmit MCCH change notifications on PDCCH. +FDD: Value 1, 2, 3, 4, 5 and 6 correspond with subframe #1, #2, #3 #6, #7, and #8 respectively. +TDD: Value 1, 2, 3, 4, and 5 correspond with subframe #3, #4, #7, #8, and #9 respectively. +– MBSFN-AreaInfoList +The IE MBSFN-AreaInfoList contains the information required to acquire the MBMS control information associated with one or more MBSFN areas. +MBSFN-AreaInfoList information element +-- ASN1START + +MBSFN-AreaInfoList-r9 ::= SEQUENCE (SIZE(1..maxMBSFN-Area)) OF MBSFN-AreaInfo-r9 + +MBSFN-AreaInfo-r9 ::= SEQUENCE { + mbsfn-AreaId-r9 INTEGER (0..255), + non-MBSFNregionLength ENUMERATED {s1, s2}, + notificationIndicator-r9 INTEGER (0..7), + mcch-Config-r9 SEQUENCE { + mcch-RepetitionPeriod-r9 ENUMERATED {rf32, rf64, rf128, rf256}, + mcch-Offset-r9 INTEGER (0..10), + mcch-ModificationPeriod-r9 ENUMERATED {rf512, rf1024}, + sf-AllocInfo-r9 BIT STRING (SIZE(6)), + signallingMCS-r9 ENUMERATED {n2, n7, n13, n19} + }, + ... +} + +-- ASN1STOP + +MBSFN-AreaInfoList field descriptions mbsfn-AreaId +Indicates the MBSFN area ID, parameter NIDMBSFN in TS 36.211 [21, 6.10.2.1]. mcch-ModificationPeriod +Defines periodically appearing boundaries, i.e. radio frames for which SFN mod mcch-ModificationPeriod = 0, The contents of different transmissions of MCCH information can only be different if there is at least one such boundary in-between them. mcch-Offset +Indicates, together with the mcch-RepetitionPeriod, the radio frames in which MCCH is scheduled i.e. MCCH is scheduled in radio frames for which: SFN mod mcch-RepetitionPeriod = mcch-Offset mcch-RepetitionPeriod +Defines the interval between transmissions of MCCH information, in radio frames, Value rf32 corresponds to 32 radio frames, rf64 corresponds to 64 radio frames and so on. non-MBSFNregionLength +Indicates how many symbols from the beginning of the subframe constitute the non-MBSFN region. This value applies in all subframes of the MBSFN area used for PMCH transmissions as indicated in the MSI. The values s1 and s2 correspond with 1 and 2 symbols, respectively: see TS 36.211 [21, Table 6.7-1]. notificationIndicator +Indicates which PDCCH bit is used to notify the UE about change of the MCCH applicable for this MBSFN area. Value 0 corresponds with the least significant bit as defined in TS 36.212 [22, Section 5.3.3.1] and so on. sf-AllocInfo +Indicates the subframes of the radio frames indicated by the mcch-RepetitionPeriod and the mcch-Offset, that may carry MCCH. Value “1” indicates that the corresponding subframe is allocated. The following mapping applies: +FDD: The first/ leftmost bit defines the allocation for subframe #1 of the radio frame indicated by mcch-RepetitionPeriod and mcch-Offset, the second bit for #2, the third bit for #3 , the fourth bit for #6, the fifth bit for #7 and the sixth bit for #8. +TDD: The first/leftmost bit defines the allocation for subframe #3 of the radio frame indicated by mcch-RepetitionPeriod and mcch-Offset, the second bit for #4, third bit for #7, fourth bit for #8, fifth bit for #9. Uplink subframes are not allocated. The last bit is not used. signallingMCS +Indicates the Modulation and Coding Scheme (MCS) applicable for the subframes indicated by the field sf-AllocInfo and for each (P)MCH that is configured for this MBSFN area, for the first subframe allocated to the (P)MCH within each MCH scheduling period (which may contain the MCH scheduling information provided by MAC). Value n2 corresponds with the value 2 for parameter in TS 36.213 [23, Table 7.1.7.1-1], and so on. +– MBSFN-SubframeConfig +The IE MBSFN-SubframeConfig defines subframes that are reserved for MBSFN in downlink. +MBSFN-SubframeConfig information element +-- ASN1START + +MBSFN-SubframeConfig ::= SEQUENCE { + radioframeAllocationPeriod ENUMERATED {n1, n2, n4, n8, n16, n32}, + radioframeAllocationOffset INTEGER (0..7), + subframeAllocation CHOICE { + oneFrame BIT STRING (SIZE(6)), + fourFrames BIT STRING (SIZE(24)) + } +} +-- ASN1STOP + +MBSFN-SubframeConfig field descriptions fourFrames +A bit-map indicating MBSFN subframe allocation in four consecutive radio frames, “1” denotes that the corresponding subframe is allocated for MBSFN. The bitmap is interpreted as follows: +FDD: Starting from the first radioframe and from the first/leftmost bit in the bitmap, the allocation applies to subframes #1, #2, #3 , #6, #7, and #8 in the sequence of the four radio-frames. +TDD: Starting from the first radioframe and from the first/leftmost bit in the bitmap, the allocation applies to subframes #3, #4, #7, #8, and #9 in the sequence of the four radio-frames. The last four bits are not used. Uplink subframes are not allocated. oneFrame +“1” denotes that the corresponding subframe is allocated for MBSFN. The following mapping applies: +FDD: The first/leftmost bit defines the MBSFN allocation for subframe #1, the second bit for #2, third bit for #3 , fourth bit for #6, fifth bit for #7, sixth bit for #8. +TDD: The first/leftmost bit defines the allocation for subframe #3, the second bit for #4, third bit for #7, fourth bit for #8, fifth bit for #9. Uplink subframes are not allocated. The last bit is not used. radioFrameAllocationPeriod, radioFrameAllocationOffset +Radio-frames that contain MBSFN subframes occur when equation SFN mod radioFrameAllocationPeriod = radioFrameAllocationOffset is satisfied. Value n1 for radioframeAllocationPeriod denotes value 1, n2 denotes value 2, and so on. When fourFrames is used for subframeAllocation, the equation defines the first radio frame referred to in the description below. Values n1 and n2 are not applicable when fourFrames is used. subframeAllocation +Defines the subframes that are allocated for MBSFN within the radio frame allocation period defined by the radioFrameAllocationPeriod and the radioFrameAllocationOffset. +– PMCH-InfoList +The IE PMCH-InfoList specifies configuration of all PMCHs of an MBSFN area. The information provided for an individual PMCH includes the configuration parameters of the sessions that are carried by the concerned PMCH. +PMCH-InfoList information element +-- ASN1START + +PMCH-InfoList-r9 ::= SEQUENCE (SIZE (0..maxPMCH-PerMBSFN)) OF PMCH-Info-r9 + +PMCH-Info-r9 ::= SEQUENCE { + pmch-Config-r9 PMCH-Config-r9, + mbms-SessionInfoList-r9 MBMS-SessionInfoList-r9, + ... +} + +MBMS-SessionInfoList-r9 ::= SEQUENCE (SIZE (0..maxSessionPerPMCH)) OF MBMS-SessionInfo-r9 + +MBMS-SessionInfo-r9 ::= SEQUENCE { + tmgi-r9 TMGI-r9, + sessionId-r9 OCTET STRING (SIZE (1)) OPTIONAL, -- Need OR + logicalChannelIdentity-r9 INTEGER (0..maxSessionPerPMCH-1), + ... +} + +PMCH-Config-r9 ::= SEQUENCE { + sf-AllocEnd-r9 INTEGER (0..1535), + dataMCS-r9 INTEGER (0..28), + mch-SchedulingPeriod-r9 ENUMERATED { + rf8, rf16, rf32, rf64, rf128, rf256, rf512, rf1024}, + ... +} + +TMGI-r9 ::= SEQUENCE { + plmn-Id-r9 CHOICE { + plmn-Index-r9 INTEGER (1..6), + explicitValue-r9 PLMN-Identity + }, + serviceId-r9 OCTET STRING (SIZE (3)) +} + +-- ASN1STOP + +PMCH-InfoList field descriptions dataMCS +Indicates the value for parameter in TS 36.213 [23, Table 7.1.7.1-1], which defines the Modulation and Coding Scheme (MCS) applicable for the subframes of this (P)MCH as indicated by the field commonSF-Alloc. The MCS does however neither apply to the subframes that may carry MCCH i.e. the subframes indicated by the field sf-AllocInfo within SystemInformationBlockType13 nor for the first subframe allocated to this (P)MCH within each MCH scheduling period (which may contain the MCH scheduling information provided by MAC). mch-SchedulingPeriod +Indicates the MCH scheduling period i.e. the periodicity used for providing MCH scheduling information at lower layers (MAC) applicable for an MCH. Value rf8 corresponds to 8 radio frames, rf16 corresponds to 16 radio frames and so on. The mch-SchedulingPeriod starts in the radio frames for which: SFN mod mch-SchedulingPeriod = 0. E-UTRAN configures mch-SchedulingPeriod of the (P)MCH listed first in PMCH-InfoList to be smaller than or equal to mcch-RepetitionPeriod. plmn-Index +Index of the entry in field plmn-IdentityList within SystemInformationBlockType1. sessionId +Indicates the optional MBMS Session Identity, which together with TMGI identifies a transmission or a possible retransmission of a specific MBMS session: see TS 29.061 [51, Sections 20.5, 17.7.11, 17.7.15]. The field is included whenever upper layers have assigned a session identity i.e. one is available for the MBMS session in E-UTRAN. serviceId +Uniquely identifies the identity of an MBMS service within a PLMN. The field contains octet 3- 5 of the IE Temporary Mobile Group Identity (TMGI) as defined in TS 24.008 [49]. The first octet contains the third octet of the TMGI, the second octet contains the fourth octet of the TMGI and so on. sf-AllocEnd +Indicates the last subframe allocated to this (P)MCH within a period identified by field commonSF-AllocPeriod. The subframes allocated to (P)MCH corresponding with the nth entry in pmch-InfoList are the subsequent subframes starting from either the next subframe after the subframe identified by sf-AllocEnd of the (n-1)th listed (P)MCH or, for n=1, the first subframe defined by field commonSF-Alloc, through the subframe identified by sf-AllocEnd of the nth listed (P)MCH. Value 0 corresponds with the first subframe defined by field commonSF-Alloc. + +6.4 RRC multiplicity and type constraint values +– Multiplicity and type constraint definitions +-- ASN1START + +maxBandComb-r10 INTEGER ::= 128 -- Maximum number of band combinations. +maxBands INTEGER ::= 64 -- Maximum number of bands listed in EUTRA UE caps +maxBandwidthClass-r10 INTEGER ::= 16 -- Maximum number of supported CA BW classes per band +maxBandwidthCombSet-r10 INTEGER ::= 32 -- Maximum number of bandwidth combination sets per + -- supported band combination +maxCDMA-BandClass INTEGER ::= 32 -- Maximum value of the CDMA band classes +maxCellBlack INTEGER ::= 16 -- Maximum number of blacklisted physical cell identity + -- ranges listed in SIB type 4 and 5 +maxCellInfoGERAN-r9 INTEGER ::= 32 -- Maximum number of GERAN cells for which system in- + -- formation can be provided as redirection assistance +maxCellInfoUTRA-r9 INTEGER ::= 16 -- Maximum number of UTRA cells for which system + -- information can be provided as redirection + -- assistance +maxFreqUTRA-TDD-r10 INTEGER ::= 6 -- Maximum number of UTRA TDD carrier frequencies for + -- which system information can be provided as + -- redirection assistance +maxCellInter INTEGER ::= 16 -- Maximum number of neighbouring inter-frequency + -- cells listed in SIB type 5 +maxCellIntra INTEGER ::= 16 -- Maximum number of neighbouring intra-frequency + -- cells listed in SIB type 4 +maxCellListGERAN INTEGER ::= 3 -- Maximum number of lists of GERAN cells +maxCellMeas INTEGER ::= 32 -- Maximum number of entries in each of the + -- cell lists in a measurement object +maxCellReport INTEGER ::= 8 -- Maximum number of reported cells +maxDRB INTEGER ::= 11 -- Maximum number of Data Radio Bearers +maxEARFCN INTEGER ::= 65535 -- Maximum value of EUTRA carrier frequency +maxEARFCN-Plus1 INTEGER ::= 65536 -- Lowest value extended EARFCN range +maxEARFCN2 INTEGER ::= 262143 -- Highest value extended EARFCN range +maxFBI INTEGER ::= 64 -- Maximum value of fequency band indicator +maxFBI-Plus1 INTEGER ::= 65 -- Lowest value extended FBI range +maxFBI2 INTEGER ::= 256 -- Highest value extended FBI range +maxFreq INTEGER ::= 8 -- Maximum number of carrier frequencies +maxGERAN-SI INTEGER ::= 10 -- Maximum number of GERAN SI blocks that can be + -- provided as part of NACC information +maxGNFG INTEGER ::= 16 -- Maximum number of GERAN neighbour freq groups +maxLogMeasReport-r10 INTEGER ::= 520 -- Maximum number of logged measurement entries + -- that can be reported by the UE in one message +maxMBSFN-Allocations INTEGER ::= 8 -- Maximum number of MBSFN frame allocations with + -- different offset +maxMBSFN-Area INTEGER ::= 8 +maxMBSFN-Area-1 INTEGER ::= 7 +maxMeasId INTEGER ::= 32 +maxMultiBands INTEGER ::= 8 -- Maximum number of additional frequency bands + -- that a cell belongs to +maxObjectId INTEGER ::= 32 +maxPageRec INTEGER ::= 16 -- +maxPhysCellIdRange-r9 INTEGER ::= 4 -- Maximum number of physical cell identity ranges +maxPNOffset INTEGER ::= 511 -- Maximum number of CDMA2000 PNOffsets +maxPMCH-PerMBSFN INTEGER ::= 15 +maxRAT-Capabilities INTEGER ::= 8 -- Maximum number of interworking RATs (incl EUTRA) +maxReportConfigId INTEGER ::= 32 +maxRSTD-Freq-r10 INTEGER ::= 3 -- Maximum number of frequency layers for RSTD + -- measurement +maxSCell-r10 INTEGER ::= 4 -- Maximum number of SCells +maxServCell-r10 INTEGER ::= 5 -- Maximum number of Serving cells +maxServiceCount INTEGER ::= 16 -- Maximum number of MBMS services that can be included + -- in an MBMS counting request and response +maxServiceCount-1 INTEGER ::= 15 +maxSessionPerPMCH INTEGER ::= 29 +maxSessionPerPMCH-1 INTEGER ::= 28 +maxSIB INTEGER ::= 32 -- Maximum number of SIBs +maxSIB-1 INTEGER ::= 31 +maxSI-Message INTEGER ::= 32 -- Maximum number of SI messages +maxSimultaneousBands-r10 INTEGER ::= 64 -- Maximum number of simultaneously aggregated bands +maxUTRA-FDD-Carrier INTEGER ::= 16 -- Maximum number of UTRA FDD carrier frequencies +maxUTRA-TDD-Carrier INTEGER ::= 16 -- Maximum number of UTRA TDD carrier frequencies + +-- ASN1STOP +NOTE: The value of maxDRB align with SA2. +– End of EUTRA-RRC-Definitions +-- ASN1START + +END + +-- ASN1STOP + +7 Variables and constants +7.1 UE variables +NOTE: To facilitate the specification of the UE behavioural requirements, UE variables are represented using ASN.1. Unless explicitly specified otherwise, it is however up to UE implementation how to store the variables. The optionality of the IEs in ASN.1 is used only to indicate that the values may not always be available. +– EUTRA-UE-Variables +This ASN.1 segment is the start of the EUTRA UE variable definitions. +-- ASN1START + +EUTRA-UE-Variables DEFINITIONS AUTOMATIC TAGS ::= + +BEGIN + +IMPORTS + AbsoluteTimeInfo-r10, + AreaConfiguration-r10, + CarrierFreqGERAN, + CellIdentity, + SpeedStateScaleFactors, + C-RNTI, + LoggingDuration-r10, + LoggingInterval-r10, + LogMeasInfo-r10, + MeasId, + MeasIdToAddModList, + MeasObjectToAddModList, + MeasObjectToAddModList-v9e0, + MobilityStateParameters, + NeighCellConfig, + PhysCellId, + PhysCellIdCDMA2000, + PhysCellIdGERAN, + PhysCellIdUTRA-FDD, + PhysCellIdUTRA-TDD, + PLMN-Identity, + QuantityConfig, + ReportConfigToAddModList, + RLF-Report-r9, + RSRP-Range, + TraceReference-r10, + maxCellMeas, + maxMeasId +FROM EUTRA-RRC-Definitions; + +-- ASN1STOP + + +– VarLogMeasConfig +The UE variable VarLogMeasConfig includes the configuration of the logging of measurements to be performed by the UE while in RRC_IDLE, covering intra-frequency, inter-frequency and inter-RAT mobility related measurements. +VarLogMeasConfig UE variable +-- ASN1START + +VarLogMeasConfig-r10 ::= SEQUENCE { + areaConfiguration-r10 AreaConfiguration-r10 OPTIONAL, + loggingDuration-r10 LoggingDuration-r10, + loggingInterval-r10 LoggingInterval-r10 +} + +-- ASN1STOP + +– VarLogMeasReport +The UE variable VarLogMeasReport includes the logged measurements information. +VarLogMeasReport UE variable +-- ASN1START + +VarLogMeasReport-r10 ::= SEQUENCE { + traceReference-r10 TraceReference-r10, + traceRecordingSessionRef-r10 OCTET STRING (SIZE (2)), + tce-Id-r10 OCTET STRING (SIZE (1)), + plmn-Identity-r10 PLMN-Identity, + absoluteTimeInfo-r10 AbsoluteTimeInfo-r10, + logMeasInfoList-r10 LogMeasInfoList2-r10 +} + +LogMeasInfoList2-r10 ::= SEQUENCE (SIZE (1..maxLogMeas-r10)) OF LogMeasInfo-r10 + +-- ASN1STOP + +– VarMeasConfig +The UE variable VarMeasConfig includes the accumulated configuration of the measurements to be performed by the UE, covering intra-frequency, inter-frequency and inter-RAT mobility related measurements. +NOTE: The amount of measurement configuration information, which a UE is required to store, is specified in subclause 11.1. If the number of frequencies configured for a particular RAT exceeds the minimum performance requirements specified in [16], it is up to UE implementation which frequencies of that RAT are measured. If the total number of frequencies for all RATs provided to the UE in the measurement configuration exceeds the minimum performance requirements specified in [16], it is up to UE implementation which frequencies/RATs are measured. +VarMeasConfig UE variable +-- ASN1START + +VarMeasConfig ::= SEQUENCE { + -- Measurement identities + measIdList MeasIdToAddModList OPTIONAL, + -- Measurement objects + measObjectList MeasObjectToAddModList OPTIONAL, + measObjectList-v9i0 MeasObjectToAddModList-v9e0 OPTIONAL, + -- Reporting configurations + reportConfigList ReportConfigToAddModList OPTIONAL, + -- Other parameters + quantityConfig QuantityConfig OPTIONAL, + s-Measure INTEGER (-140..-44) OPTIONAL, + speedStatePars CHOICE { + release NULL, + setup SEQUENCE { + mobilityStateParameters MobilityStateParameters, + timeToTrigger-SF SpeedStateScaleFactors + } + } OPTIONAL +} + +-- ASN1STOP + +– VarMeasReportList +The UE variable VarMeasReportList includes information about the measurements for which the triggering conditions have been met. +VarMeasReportList UE variable +-- ASN1START + +VarMeasReportList ::= SEQUENCE (SIZE (1..maxMeasId)) OF VarMeasReport + +VarMeasReport ::= SEQUENCE { + -- List of measurement that have been triggered + measId MeasId, + cellsTriggeredList CellsTriggeredList OPTIONAL, + numberOfReportsSent INTEGER +} + +CellsTriggeredList ::= SEQUENCE (SIZE (1..maxCellMeas)) OF CHOICE { + physCellIdEUTRA PhysCellId, + physCellIdUTRA CHOICE { + fdd PhysCellIdUTRA-FDD, + tdd PhysCellIdUTRA-TDD + }, + physCellIdGERAN SEQUENCE { + carrierFreq CarrierFreqGERAN, + physCellId PhysCellIdGERAN + }, + physCellIdCDMA2000 PhysCellIdCDMA2000 +} +-- ASN1STOP + +– VarRLF-Report +The UE variable VarRLF-Report includes the radio link failure information or handover failure information. +VarRLF-Report UE variable +-- ASN1START + +VarRLF-Report-r10 ::= SEQUENCE { + rlf-Report-r10 RLF-Report-r9, + plmn-Identity-r10 PLMN-Identity +} + +-- ASN1STOP + +– VarShortMAC-Input +The UE variable VarShortMAC-Input specifies the input used to generate the shortMAC-I. +VarShortMAC-Input UE variable +-- ASN1START + +VarShortMAC-Input ::= SEQUENCE { + cellIdentity CellIdentity, + physCellId PhysCellId, + c-RNTI C-RNTI +} +-- ASN1STOP + +VarShortMAC-Input field descriptions cellIdentity +Set to CellIdentity of the current cell. c-RNTI +Set to C-RNTI that the UE had in the PCell it was connected to prior to the failure. physCellId +Set to the physical cell identity of the PCell the UE was connected to prior to the failure. +– Multiplicity and type constraint definitions +This section includes multiplicity and type constraints applicable (only) for UE variables. +-- ASN1START + +maxLogMeas-r10 INTEGER ::= 4060-- Maximum number of logged measurement entries + -- that can be stored by the UE + +-- ASN1STOP + +– End of EUTRA-UE-Variables +-- ASN1START + +END + +-- ASN1STOP + +7.2 Counters +Counter Reset Incremented When reaching max value +7.3 Timers (Informative) +Timer Start Stop At expiry T300 + Transmission of RRCConnectionRequest Reception of RRCConnectionSetup or RRCConnectionReject message, cell re-selection and upon abortion of connection establishment by upper layers Perform the actions as specified in 5.3.3.6 T301 Transmission of RRCConnectionReestabilshmentRequest Reception of RRCConnectionReestablishment or RRCConnectionReestablishmentReject message as well as when the selected cell becomes unsuitable Go to RRC_IDLE T302 Reception of RRCConnectionReject while performing RRC connection establishment Upon entering RRC_CONNECTED and upon cell re-selection Inform upper layers about barring alleviation as specified in 5.3.3.7 T303 Access barred while performing RRC connection establishment for mobile originating calls Upon entering RRC_CONNECTED and upon cell re-selection Inform upper layers about barring alleviation as specified in 5.3.3.7 T304 Reception of RRCConnectionReconfiguration message including the MobilityControl Info or +reception of MobilityFromEUTRACommand message including CellChangeOrder Criterion for successful completion of handover to EUTRA or cell change order is met (the criterion is specified in the target RAT in case of inter-RAT) In case of cell change order from E-UTRA or intra E-UTRA handover, initiate the RRC connection re-establishment procedure; In case of handover to E-UTRA, perform the actions defined in the specifications applicable for the source RAT. T305 Access barred while performing RRC connection establishment for mobile originating signalling Upon entering RRC_CONNECTED and upon cell re-selection Inform upper layers about barring alleviation as specified in 5.3.3.7 T306 Access barred while performing RRC connection establishment for mobile originating CS fallback. Upon entering RRC_CONNECTED and upon cell re-selection Inform upper layers about barring alleviation as specified in 5.3.3.7 T310 Upon detecting physical layer problems i.e. upon receiving N310 consecutive out-of-sync indications from lower layers Upon receiving N311 consecutive in-sync indications from lower layers, upon triggering the handover procedure and upon initiating the connection re-establishment procedure If security is not activated: go to RRC_IDLE else: initiate the connection re-establishment procedure T311 Upon initiating the RRC connection re-establishment procedure Selection of a suitable E-UTRA cell or a cell using another RAT. Enter RRC_IDLE T320 Upon receiving t320 or upon cell (re)selection to E-UTRA from another RAT with validity time configured for dedicated priorities (in which case the remaining validity time is applied). Upon entering RRC_CONNECTED, when PLMN selection is performed on request by NAS, or upon cell (re)selection to another RAT (in which case the timer is carried on to the other RAT). Discard the cell reselection priority information provided by dedicated signalling. T321 Upon receiving measConfig including a reportConfig with the purpose set to reportCGI Upon acquiring the information needed to set all fields of cellGlobalId for the requested cell, upon receiving measConfig that includes removal of the reportConfig with the purpose set to reportCGI Initiate the measurement reporting procedure, stop performing the related measurements and remove the corresponding measId T330 Upon receiving LoggedMeasurementConfiguration message Upon log volume exceeding the suitable UE memory, upon initiating the release of LoggedMeasurementConfiguration procedure Perform the actions specified in 5.6.6.4 +7.4 Constants +Constant Usage N310 Maximum number of consecutive "out-of-sync" indications received from lower layers N311 Maximum number of consecutive "in-sync" indications received from lower layers +8 Protocol data unit abstract syntax +8.1 General +The RRC PDU contents in clause 6 and clause 10 are described using abstract syntax notation one (ASN.1) as specified in ITU-T Rec. X.680 [13] and X.681 [14]. Transfer syntax for RRC PDUs is derived from their ASN.1 definitions by use of Packed Encoding Rules, unaligned as specified in ITU-T Rec. X.691 [15]. +The following encoding rules apply in addition to what has been specified in X.691: +- When a bit string value is placed in a bit-field as specified in 15.6 to 15.11 in X.691, the leading bit of the bit string value shall be placed in the leading bit of the bit-field, and the trailing bit of the bit string value shall be placed in the trailing bit of the bit-field. +NOTE: The terms 'leading bit' and 'trailing bit' are defined in ITU-T Rec. X.680. When using the 'bstring' notation, the leading bit of the bit string value is on the left, and the trailing bit of the bit string value is on the right. +- When decoding types constrained with the ASN.1 Contents Constraint ("CONTAINING"), automatic decoding of the contained type should not be performed because errors in the decoding of the contained type should not cause the decoding of the entire RRC message PDU to fail. It is recommended that the decoder first decodes the outer PDU type that contains the OCTET STRING or BIT STRING with the Contents Constraint, and then decodes the contained type that is nested within the OCTET STRING or BIT STRING as a separate step. +- When decoding a) RRC message PDUs, b) BIT STRING constrained with a Contents Constraint, or c) OCTET STRING constrained with a Contents Constraint, PER decoders are required to never report an error if there are extraneous zero or non-zero bits at the end of the encoded RRC message PDU, BIT STRING or OCTET STRING. +8.2 Structure of encoded RRC messages +An RRC PDU, which is the bit string that is exchanged between peer entities/ across the radio interface contains the basic production as defined in X.691. +RRC PDUs shall be mapped to and from PDCP SDUs (in case of DCCH) or RLC SDUs (in case of PCCH, BCCH, CCCH or MCCH) upon transmission and reception as follows: +- when delivering an RRC PDU as an PDCP SDU to the PDCP layer for transmission, the first bit of the RRC PDU shall be represented as the first bit in the PDCP SDU and onwards; and +- when delivering an RRC PDU as an RLC SDU to the RLC layer for transmission, the first bit of the RRC PDU shall be represented as the first bit in the RLC SDU and onwards; and +- upon reception of an PDCP SDU from the PDCP layer, the first bit of the PDCP SDU shall represent the first bit of the RRC PDU and onwards; and +- upon reception of an RLC SDU from the RLC layer, the first bit of the RLC SDU shall represent the first bit of the RRC PDU and onwards. +8.3 Basic production +The 'basic production' is obtained by applying UNALIGNED PER to the abstract syntax value (the ASN.1 description) as specified in X.691. It always contains a multiple of 8 bits. +8.4 Extension +The following rules apply with respect to the use of protocol extensions: +- A transmitter compliant with this version of the specification shall, unless explicitly indicated otherwise on a PDU type basis, set the extension part empty. Transmitters compliant with a later version may send non-empty extensions; +- A transmitter compliant with this version of the specification shall set spare bits to zero; +8.5 Padding +If the encoded RRC message does not fill a transport block, the RRC layer shall add padding bits. This applies to PCCH and BCCH. +Padding bits shall be set to 0 and the number of padding bits is a multiple of 8. + +Figure 8.5-1: RRC level padding +9 Specified and default radio configurations +Specified and default configurations are configurations of which the details are specified in the standard. Specified configurations are fixed while default configurations can be modified using dedicated signalling. +9.1 Specified configurations +9.1.1 Logical channel configurations +9.1.1.1 BCCH configuration +Parameters +Name Value Semantics description Ver PDCP configuration N/A RLC configuration TM MAC configuration TM +NOTE: RRC will perform padding, if required due to the granularity of the TF signalling, as defined in 8.5. +9.1.1.2 CCCH configuration +Parameters +Name Value Semantics description Ver PDCP configuration N/A RLC configuration TM MAC configuration Normal MAC headers are used Logical channel configuration priority 1 Highest priority prioritisedBitRate infinity bucketSizeDuration N/A logicalChannelGroup 0 logicalChannelSR-Mask-r9 release v920 +9.1.1.3 PCCH configuration +Parameters +Name Value Semantics description Ver PDCP configuration N/A RLC configuration TM MAC configuration TM +NOTE: RRC will perform padding, if required due to the granularity of the TF signalling, as defined in 8.5. +9.1.1.4 MCCH and MTCH configuration +Parameters +Name Value Semantics description Ver PDCP configuration N/A RLC configuration UM Sn-FieldLength size5 t-Reordering 0 +9.1.2 SRB configurations +9.1.2.1 SRB1 +Parameters +Name Value Semantics description Ver RLC configuration logicalChannelIdentity 1 +9.1.2.2 SRB2 +Parameters +Name Value Semantics description Ver RLC configuration logicalChannelIdentity 2 +9.2 Default radio configurations +The following sections only list default values for REL-8 parameters included in protocol version v8.5.0. For all fields introduced in a later protocol version, the default value is "released" unless explicitly specified otherwise. For the following fields, introduced in a protocol version later than v8.5.0, the default corresponds with "value not applicable": +- codeBookSubsetRestriction-v920; +- pmi-RI-Report; +NOTE 1: Value "N/A" indicates that the UE does not apply a specific value (i.e. upon switching to a default configuration, E-UTRAN can not assume the UE keeps the previously configured value). This implies that E-UTRAN needs to configure a value before invoking the related functionality. +NOTE 2: In general, the signalling should preferably support a "release" option for fields introduced after v8.5.0. The "value not applicable" should be used restrictively, mainly limited to for fields which value is relevant only if another field is set to a value other than its default. +9.2.1 SRB configurations +9.2.1.1 SRB1 +Parameters +Name Value Semantics description Ver RLC configuration CHOICE am ul-RLC-Config +>t-PollRetransmit +>pollPDU +>pollByte +>maxRetxThreshold +ms45 +infinity +infinity +t4 dl-RLC-Config +>t-Reordering +>t-StatusProhibit +ms35 +ms0 Logical channel configuration priority 1 Highest priority prioritisedBitRate infinity bucketSizeDuration N/A logicalChannelGroup 0 +9.2.1.2 SRB2 +Parameters +Name Value Semantics description Ver RLC configuration CHOICE am ul-RLC-Config +>t-PollRetransmit +>pollPDU +>pollByte +>maxRetxThreshold +ms45 +infinity +infinity +t4 dl-RLC-Config +>t-Reordering +>t-StatusProhibit +ms35 +ms0 Logical channel configuration priority 3 prioritisedBitRate infinity bucketSizeDuration N/A logicalChannelGroup 0 +9.2.2 Default MAC main configuration +Parameters +Name Value Semantics description Ver MAC main configuration maxHARQ-tx n5 periodicBSR-Timer infinity retxBSR-Timer sf2560 ttiBundling FALSE drx-Config release phr-Config release +9.2.3 Default semi-persistent scheduling configuration +SPS-Config +>sps-ConfigDL +>sps-ConfigUL +release +release +9.2.4 Default physical channel configuration +Parameters +Name Value Semantics description Ver PDSCH-ConfigDedicated +>p-a +dB0 PUCCH-ConfigDedicated +> tdd-AckNackFeedbackMode +>ackNackRepetition +bundling +release +Only valid for TDD mode PUSCH-ConfigDedicated +>betaOffset-ACK-Index +>betaOffset-RI-Index +>betaOffset-CQI-Index +10 +12 +15 UplinkPowerControlDedicated +>p0-UE-PUSCH +>deltaMCS-Enabled +>accumulationEnabled +>p0-UE-PUCCH +>pSRS-Offset +> filterCoefficient +0 +en0 (disabled) +TRUE +0 +7 +fc4 tpc-pdcch-ConfigPUCCH release tpc-pdcch-ConfigPUSCH release CQI-ReportConfig +> CQI-ReportPeriodic +> cqi-ReportModeAperiodic +> nomPDSCH-RS-EPRE-Offset +release +N/A +N/A SoundingRS-UL-ConfigDedicated release AntennaInfoDedicated +>transmissionMode + + + +>codebookSubsetRestriction +>ue-TransmitAntennaSelection +tm1, tm2 + + + +N/A +release +If the number of PBCH antenna ports is one, tm1 is used as default; otherwise tm2 is used as default SchedulingRequestConfig release +9.2.5 Default values timers and constants +Parameters +Name Value Semantics description Ver t310 ms1000 n310 n1 t311 ms1000 n311 n1 +10 Radio information related interactions between network nodes +10.1 General +This section specifies RRC messages that are transferred between network nodes. These RRC messages may be transferred to or from the UE via another Radio Access Technology. Consequently, these messages have similar characteristics as the RRC messages that are transferred across the E-UTRA radio interface, i.e. the same transfer syntax and protocol extension mechanisms apply. +10.2 Inter-node RRC messages +10.2.1 General +This section specifies RRC messages that are sent either across the X2- or the S1-interface, either to or from the eNB, i.e. a single 'logical channel' is used for all RRC messages transferred across network nodes. The information could originate from or be destined for another RAT. +– EUTRA-InterNodeDefinitions +This ASN.1 segment is the start of the EUTRA inter-node PDU definitions. +-- ASN1START + +EUTRA-InterNodeDefinitions DEFINITIONS AUTOMATIC TAGS ::= + +BEGIN + +IMPORTS + AntennaInfoCommon, + CellIdentity, + C-RNTI, + DL-DCCH-Message, + ARFCN-ValueEUTRA, + ARFCN-ValueEUTRA-v9e0, + MasterInformationBlock, + maxFreq, + MeasConfig, + OtherConfig-r9, + PhysCellId, + RadioResourceConfigDedicated, + RSRP-Range, + RSRQ-Range, + SCellToAddModList-r10, + SecurityAlgorithmConfig, + ShortMAC-I, + SystemInformationBlockType1, + SystemInformationBlockType1-v890-IEs, + SystemInformationBlockType2, + UECapabilityInformation, + UE-CapabilityRAT-ContainerList +FROM EUTRA-RRC-Definitions; + +-- ASN1STOP + +10.2.2 Message definitions +– HandoverCommand +This message is used to transfer the handover command generated by the target eNB, which is transparently transferred by the source RAN to the UE. +Direction: target eNB to source eNB/ source RAN +HandoverCommand message +-- ASN1START + +HandoverCommand ::= SEQUENCE { + criticalExtensions CHOICE { + c1 CHOICE{ + handoverCommand-r8 HandoverCommand-r8-IEs, + spare7 NULL, + spare6 NULL, spare5 NULL, spare4 NULL, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +HandoverCommand-r8-IEs ::= SEQUENCE { + handoverCommandMessage OCTET STRING (CONTAINING DL-DCCH-Message), + nonCriticalExtension SEQUENCE {} OPTIONAL +} + +-- ASN1STOP + +HandoverCommand field descriptions handoverCommandMessage +Contains the entire DL-DCCH-Message including the RRCConnectionReconfiguration message used to perform handover to E-UTRAN, generated (entirely) by the target eNB. +– HandoverPreparationInformation +This message is used to transfer the E-UTRA RRC information used by the target eNB during handover preparation, including UE capability information. +Direction: source eNB/ source RAN to target eNB +HandoverPreparationInformation message +-- ASN1START + +HandoverPreparationInformation ::= SEQUENCE { + criticalExtensions CHOICE { + c1 CHOICE{ + handoverPreparationInformation-r8 HandoverPreparationInformation-r8-IEs, + spare7 NULL, + spare6 NULL, spare5 NULL, spare4 NULL, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +HandoverPreparationInformation-r8-IEs ::= SEQUENCE { + ue-RadioAccessCapabilityInfo UE-CapabilityRAT-ContainerList, + as-Config AS-Config OPTIONAL, -- Cond HO + rrm-Config RRM-Config OPTIONAL, + as-Context AS-Context OPTIONAL, -- Cond HO + nonCriticalExtension HandoverPreparationInformation-v920-IEs OPTIONAL +} + +HandoverPreparationInformation-v920-IEs ::= SEQUENCE { + ue-ConfigRelease-r9 ENUMERATED { + rel9, rel10, spare6, spare5, spare4, spare3, + spare2, spare1, ...} OPTIONAL, -- Cond HO2 + nonCriticalExtension HandoverPreparationInformation-v9d0-IEs OPTIONAL +} + +HandoverPreparationInformation-v9d0-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, + nonCriticalExtension HandoverPreparationInformation-v9e0-IEs OPTIONAL +} + +HandoverPreparationInformation-v9e0-IEs ::= SEQUENCE { + as-Config-v9e0 AS-Config-v9e0 OPTIONAL, -- Cond HO2 + nonCriticalExtension SEQUENCE {} OPTIONAL +} + +-- ASN1STOP + +HandoverPreparationInformation field descriptions as-Config +The radio resource configuration. Applicable in case of intra-E-UTRA handover. If the target receives an incomplete MeasConfig and RadioResourceConfigDedicated in the as-Config, the target eNB may decide to apply the full configuration option based on the ue-ConfigRelease. as-Context +Local E-UTRAN context required by the target eNB. rrm-Config +Local E-UTRAN context used depending on the target node’s implementation, which is mainly used for the RRM purpose. ue-ConfigRelease +Indicates the RRC protocol release applicable for the current UE configuration. This could be used by target eNB to decide if the full configuration approach should be used. If this field is not present, the target assumes that the current UE configuration is based on the release 8 version of RRC protocol. NOTE 1. ue-RadioAccessCapabilityInfo +E-UTRA radio access capabilities are always included and in case of inter-RAT handover to E-UTRA, UTRA radio access capabilities may be included. (If UTRA radio access capabilities are received from the source RAN, they are ignored by target eNB.) In case of inter-RAT handover to E-UTRA and the source is GERAN, GERAN capabilities are always included. +NOTE 1: The source typically sets the ue-ConfigRelease to the release corresponding with the current dedicated radio configuration. The source may however also consider the common radio resource configuration e.g. in case interoperability problems would appear if the UE temporary continues extensions of this part of the configuration in a target PCell not supporting them. + +Conditional presence Explanation HO The field is mandatory present in case of handover within E-UTRA; otherwise the field is not present. HO2 The field is optional present in case of handover within E-UTRA; otherwise the field is not present. +– UERadioAccessCapabilityInformation +This message is used to transfer UE radio access capability information, covering both upload to and download from the EPC. +Direction: eNB to/ from EPC +UERadioAccessCapabilityInformation message +-- ASN1START + +UERadioAccessCapabilityInformation ::= SEQUENCE { + criticalExtensions CHOICE { + c1 CHOICE{ + ueRadioAccessCapabilityInformation-r8 + UERadioAccessCapabilityInformation-r8-IEs, + spare7 NULL, + spare6 NULL, spare5 NULL, spare4 NULL, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +UERadioAccessCapabilityInformation-r8-IEs ::= SEQUENCE { + ue-RadioAccessCapabilityInfo OCTET STRING (CONTAINING UECapabilityInformation), + nonCriticalExtension SEQUENCE {} OPTIONAL +} + +-- ASN1STOP + +UERadioAccessCapabilityInformation field descriptions ue-RadioAccessCapabilityInfo +Including E-UTRA, GERAN, and CDMA2000-1xRTT Bandclass radio access capabilities (separated). UTRA radio access capabilities are not included. +10.3 Inter-node RRC information element definitions +– AS-Config +The AS-Config IE contains information about RRC configuration information in the source eNB which can be utilized by target eNB to determine the need to change the RRC configuration during the handover preparation phase. The information can also be used after the handover is successfully performed or during the RRC connection re-establishment. +AS-Config information element +-- ASN1START + +AS-Config ::= SEQUENCE { + sourceMeasConfig MeasConfig, + sourceRadioResourceConfig RadioResourceConfigDedicated, + sourceSecurityAlgorithmConfig SecurityAlgorithmConfig, + sourceUE-Identity C-RNTI, + sourceMasterInformationBlock MasterInformationBlock, + sourceSystemInformationBlockType1 SystemInformationBlockType1(WITH COMPONENTS + {..., nonCriticalExtension ABSENT}), + sourceSystemInformationBlockType2 SystemInformationBlockType2, + antennaInfoCommon AntennaInfoCommon, + sourceDl-CarrierFreq ARFCN-ValueEUTRA, + ..., + [[ sourceSystemInformationBlockType1Ext OCTET STRING (CONTAINING + SystemInformationBlockType1-v890-IEs) OPTIONAL, + sourceOtherConfig-r9 OtherConfig-r9 + ]], + [[ sourceSCellConfigList-r10 SCellToAddModList-r10 OPTIONAL + ]] +} + +AS-Config-v9e0 ::= SEQUENCE { + sourceDl-CarrierFreq-v9e0 ARFCN-ValueEUTRA-v9e0 +} + +-- ASN1STOP +NOTE: The AS-Config re-uses information elements primarily created to cover the radio interface signalling requirements. Consequently, the information elements may include some parameters that are not relevant for the target eNB e.g. the SFN as included in the MasterInformationBlock. + +AS-Config field descriptions antennaInfoCommon +This field provides information about the number of antenna ports in the source PCell. sourceDL-CarrierFreq +Provides the parameter Downlink EARFCN in the source PCell, see TS 36.101 [42]. If the source eNB provides AS-Config-v9e0, it sets sourceDl-CarrierFreq (i.e. without suffix) to maxEARFCN. sourceOtherConfig +Provides other configuration in the source PCell. sourceMasterInformationBlock +MasterInformationBlock transmitted in the source PCell. sourceMeasConfig +Measurement configuration in the source cell. The measurement configuration for all measurements existing in the source eNB when handover is triggered shall be included. See 10.5. sourceRadioResourceConfig +Radio configuration in the source PCell. The radio resource configuration for all radio bearers existing in the source PCell when handover is triggered shall be included. See 10.5. sourceSCellConfigList +Radio resource configuration (common and dedicated) of the SCells configured in the source eNB. sourceSecurityAlgorithmConfig +This field provides the AS integrity protection (SRBs) and AS ciphering (SRBs and DRBs) algorithm configuration used in the source PCell. sourceSystemInformationBlockType1 +SystemInformationBlockType1 transmitted in the source PCell. sourceSystemInformationBlockType2 +SystemInformationBlockType2 transmitted in the source PCell. +– AS-Context +The IE AS-Context is used to transfer local E-UTRAN context required by the target eNB. + +AS-Context information element +-- ASN1START + +AS-Context ::= SEQUENCE { + reestablishmentInfo ReestablishmentInfo OPTIONAL -- Cond HO +} + +-- ASN1STOP + +AS-Context field descriptions reestablishmentInfo +Including information needed for the RRC connection re-establishment. +Conditional presence Explanation HO The field is mandatory present in case of handover within E-UTRA; otherwise the field is not present. +– ReestablishmentInfo +The ReestablishmentInfo IE contains information needed for the RRC connection re-establishment. +ReestablishmentInfo information element +-- ASN1START + +ReestablishmentInfo ::= SEQUENCE { + sourcePhysCellId PhysCellId, + targetCellShortMAC-I ShortMAC-I, + additionalReestabInfoList AdditionalReestabInfoList OPTIONAL, + ... +} + +AdditionalReestabInfoList ::= SEQUENCE ( SIZE (1..maxReestabInfo) ) OF AdditionalReestabInfo + +AdditionalReestabInfo ::= SEQUENCE{ + cellIdentity CellIdentity, + key-eNodeB-Star Key-eNodeB-Star, + shortMAC-I ShortMAC-I +} + +Key-eNodeB-Star ::= BIT STRING (SIZE (256)) + +-- ASN1STOP + +ReestablishmentInfo field descriptions additionalReestabInfoList +Contains a list of shortMAC-I and KeNB* for cells under control of the target eNB, required for potential re-establishment by the UE in these cells to succeed. Key-eNodeB-Star +Parameter KeNB*: See TS 33.401 [32, 7.2.8.4]. If the cell identified by cellIdentity belongs to multiple frequency bands, the source eNB selects the DL-EARFCN for the KeNB* calculation using the same logic as UE uses when selecting the DL-EARFCN in IDLE as defined in section 6.2.2. This parameter is only used for X2 handover, and for S1 handover, it shall be ignored by target eNB. sourcePhyCellId +The physical cell identity of the source PCell, used to determine the UE context in the target eNB at re-establishment. targetCellShortMAC-I +The ShortMAC-I for the handover target PCell, in order for potential re-establishment to succeed. +– RRM-Config +The RRM-Config IE contains information about UE specific RRM information before the handover which can be utilized by target eNB. +RRM-Config information element +-- ASN1START + +RRM-Config ::= SEQUENCE { + ue-InactiveTime ENUMERATED { + s1, s2, s3, s5, s7, s10, s15, s20, + s25, s30, s40, s50, min1, min1s20c, min1s40, + min2, min2s30, min3, min3s30, min4, min5, min6, + min7, min8, min9, min10, min12, min14, min17, min20, + min24, min28, min33, min38, min44, min50, hr1, + hr1min30, hr2, hr2min30, hr3, hr3min30, hr4, hr5, hr6, + hr8, hr10, hr13, hr16, hr20, day1, day1hr12, day2, + day2hr12, day3, day4, day5, day7, day10, day14, day19, + day24, day30, dayMoreThan30} OPTIONAL, + ..., + [[ candidateCellInfoList-r10 CandidateCellInfoList-r10 OPTIONAL + ]] +} + +CandidateCellInfoList-r10 ::= SEQUENCE (SIZE (1..maxFreq)) OF CandidateCellInfo-r10 + +CandidateCellInfo-r10 ::= SEQUENCE { + -- cellIdentification + physCellId-r10 PhysCellId, + dl-CarrierFreq-r10 ARFCN-ValueEUTRA, + -- available measurement results + rsrpResult-r10 RSRP-Range OPTIONAL, + rsrqResult-r10 RSRQ-Range OPTIONAL, + ..., + [[ dl-CarrierFreq-v1090 ARFCN-ValueEUTRA-v9e0 OPTIONAL + ]] +} + +-- ASN1STOP + +RRM-Config field descriptions candidateCellInfoList +A list of the best cells on each frequency for which measurement information was available, in order of decreasing RSRP. dl-CarrierFreq +The source includes dl-CarrierFreq-v1090 if and only if dl-CarrierFreq-r10 is set to maxEARFCN. ue-InactiveTime +Duration while UE has not received or transmitted any user data. Thus the timer is still running in case e.g., UE measures the neighbour cells for the HO purpose. Value s1 corresponds to 1 second, s2 corresponds to 2 seconds and so on. Value min1 corresponds to 1 minute, value min1s20 corresponds to 1 minute and 20 seconds, value min1s40 corresponds to 1 minute and 40 seconds and so on. Value hr1 corresponds to 1 hour, hr1min30 corresponds to 1 hour and 30 minutes and so on. +10.4 Inter-node RRC multiplicity and type constraint values +– Multiplicity and type constraints definitions +-- ASN1START + +maxReestabInfo INTEGER ::= 32 -- Maximum number of KeNB* and shortMAC-I forwarded + -- at handover for re-establishment preparation + +-- ASN1STOP + +– End of EUTRA-InterNodeDefinitions +-- ASN1START + +END + +-- ASN1STOP + +10.5 Mandatory information in AS-Config +The AS-Config transferred between source eNB and target-eNB shall include all IEs necessary to describe the AS context. The conditional presence in section 6 is only applicable for eNB to UE communication. +The "need" or "cond" statements are not applied in case of sending the IEs from source eNB to target eNB. Some information elements shall be included regardless of the "need" or "cond" e.g. discardTimer. The AS-Config re-uses information elements primarily created to cover the radio interface signalling requirements. The information elements may include some parameters that are not relevant for the target eNB e.g. the SFN as included in the MasterInformationBlock. +All the fields in the AS-Config as defined in 10.3 that are introduced after v9.2.0 and that are optional for eNB to UE communication shall be included, if the functionality is configured. The fields in the AS-Config that are defined before and including v9.2.0 shall be included as specified in the following. +Within the sourceRadioResourceConfig, sourceMeasConfig and sourceOtherConfig, the source eNB shall include fields that are optional for eNB to UE communication, if the functionality is configured unless explicitly specified otherwise in the following: +- in accordance with a condition that is explicitly stated to be applicable; or +- a default value is defined for the concerned field; and the configured value is the same as the default value that is defined; or +- the need of the field is OP and the current UE configuration corresponds with the behaviour defined for absence of the field; +The following fields, if the functionality is configured, are not mandatory for the source eNB to include in the AS-Config since delta signalling by the target eNB for these fields is not supported: +* semiPersistSchedC-RNTI +* measGapConfig +For the measurement configuration, a corresponding operation as 5.5.6.1 and 5.5.2.2a is executed by target eNB. + +11 UE capability related constraints and performance requirements +11.1 UE capability related constraints +The following table lists constraints regarding the UE capabilities that E-UTRAN is assumed to take into account. +Parameter Description Value #DRBs The number of DRBs that a UE shall support 8 #RLC-AM The number of RLC AM entities that a UE shall support 10 #minCellperMeasObjectEUTRA The minimum number of neighbour cells (excluding black list cells) that a UE shall be able to store within a MeasObjectEUTRA. NOTE. 32 #minBlackCellRangesperMeasObjectEUTRA The minimum number of blacklist cell PCI ranges that a UE shall be able to store within a MeasObjectEUTRA 32 #minCellperMeasObjectUTRA The minimum number of neighbour cells that a UE shall be able to store within a MeasObjectUTRA. NOTE. 32 #minCellperMeasObjectGERAN The minimum number of neighbour cells that a UE shall be able to store within a measObjectGERAN. NOTE. 32 #minCellperMeasObjectCDMA2000 The minimum number of neighbour cells that a UE shall be able to store within a measObjectCDMA2000. NOTE. 32 #minCellTotal The minimum number of neighbour cells (excluding black list cells) that UE shall be able to store in total in all measurement objects configured 256 NOTE: In case of CGI reporting, the limit regarding the cells E-UTRAN can configure includes the cell for which the UE is requested to report CGI i.e. the amount of neighbour cells that can be included is at most (# minCellperMeasObjectRAT - 1), where RAT represents EUTRA/UTRA/GERAN/CDMA2000 respectively. +11.2 Processing delay requirements for RRC procedures +The UE performance requirements for RRC procedures are specified in the following table, by means of a value N: +N = the number of 1ms subframes from the end of reception of the E-UTRAN -> UE message on the UE physical layer up to when the UE shall be ready for the reception of uplink grant for the UE -> E-UTRAN response message with no access delay other than the TTI-alignment (e.g. excluding delays caused by scheduling, the random access procedure or physical layer synchronisation). +NOTE: No processing delay requirements are specified for RN-specific procedures. + +Figure 11.2-1: Illustration of RRC procedure delay + + +Procedure title: E-UTRAN -> UE UE -> E-UTRAN N Notes RRC Connection Control Procedures RRC connection establishment + RRCConnectionSetup RRCConnectionSetupComplete 15 RRC connection release RRCConnectionRelease NA + RRC connection re-configuration (radio resource configuration) + RRCConnectionReconfiguration RRCConnectionReconfigurationComplete 15 RRC connection re-configuration (measurement configuration) + RRCConnectionReconfiguration RRCConnectionReconfigurationComplete 15 RRC connection re-configuration (intra-LTE mobility) + RRCConnectionReconfiguration RRCConnectionReconfigurationComplete 15 RRC connection reconfiguration (SCell addition/release) RRCConnectionReconfiguration RRCConnectionReconfigurationComplete 20 RRC connection re-establishment + RRCConnectionReestablishment RRCConnectionReestablishmentComplete 15 Initial security activation SecurityModeCommand SecurityModeCommandComplete/SecurityModeCommandFailure 10 Initial security activation + RRC connection re-configuration (RB establishment) SecurityModeCommand, RRCConnectionReconfiguration RRCConnectionReconfigurationComplete 20 The two DL messages are transmitted in the same TTI Paging Paging NA Inter RAT mobility Handover to E-UTRA RRCConnectionReconfiguration (sent by other RAT) RRCConnectionReconfigurationComplete NA The performance of this procedure is specified in [50] in case of handover from GSM and [29], [30] in case of handover from UTRA. Handover from E-UTRA MobilityFromEUTRACommand NA The performance of this procedure is specified in [16] Handover from E-UTRA to CDMA2000 HandoverFromEUTRAPreparationRequest (CDMA2000) NA Used to trigger the handover preparation procedure with a CDMA2000 RAT. +The performance of this procedure is specified in [16] Measurement procedures Measurement Reporting MeasurementReport NA Other procedures UE capability transfer UECapabilityEnquiry UECapabilityInformation 10 Counter check CounterCheck CounterCheckResponse 10 Proximity indication ProximityIndication NA UE information UEInformationRequest UEInformationResponse 15 MBMS counting MBMSCountingRequest MBMSCountingResponse NA +11.3 Void + +Annex A (informative): +Guidelines, mainly on use of ASN.1 +Editor's note No agreements have been reached concerning the extension of RRC PDUs so far. Any statements in this section about the protocol extension mechanism should be considered as FFS. +A.1 Introduction +The following clauses contain guidelines for the specification of RRC protocol data units (PDUs) with ASN.1. +A.2 Procedural specification +A.2.1 General principles +The procedural specification provides an overall high level description regarding the UE behaviour in a particular scenario. +It should be noted that most of the UE behaviour associated with the reception of a particular field is covered by the applicable parts of the PDU specification. The procedural specification may also include specific details of the UE behaviour upon reception of a field, but typically this should be done only for cases that are not easy to capture in the PDU section e.g. general actions, more complicated actions depending on the value of multiple fields. +Likewise, the procedural specification need not specify the UE requirements regarding the setting of fields within the messages that are send to E-UTRAN i.e. this may also be covered by the PDU specification. +A.2.2 More detailed aspects +The following more detailed conventions should be used: +- Bullets: +- Capitals should be used in the same manner as in other parts of the procedural text i.e. in most cases no capital applies since the bullets are part of the sentence starting with 'The UE shall:' +- All bullets, including the last one in a sub-clause, should end with a semi-colon i.e. an ';' +- Conditions +- Whenever multiple conditions apply, a semi-colon should be used at the end of each conditions with the exception of the last one, i.e. as in 'if cond1; or cond2: +A.3 PDU specification +A.3.1 General principles +A.3.1.1 ASN.1 sections +The RRC PDU contents are formally and completely described using abstract syntax notation (ASN.1), see X.680 [13], X.681 (02/2002) [14]. +The complete ASN.1 code is divided into a number of ASN.1 sections in the specifications. In order to facilitate the extraction of the complete ASN.1 code from the specification, each ASN.1 section begins with a text paragraph consisting entirely of an ASN.1 start tag, which consists of a double hyphen followed by a single space and the text string "ASN1START" (in all upper case letters). Each ASN.1 section ends with a text paragraph consisting entirely of an ASN.1 stop tag, which consists of a double hyphen followed by a single space and the text "ASN1STOP" (in all upper case letters): +-- ASN1START + +-- ASN1STOP + +The text paragraphs containing the ASN.1 start and stop tags should not contain any ASN.1 code significant for the complete description of the RRC PDU contents. The complete ASN.1 code may be extracted by copying all the text paragraphs between an ASN.1 start tag and the following ASN.1 stop tag in the order they appear, throughout the specification. +NOTE: A typical procedure for extraction of the complete ASN.1 code consists of a first step where the entire RRC PDU contents description (ultimately the entire specification) is saved into a plain text (ASCII) file format, followed by a second step where the actual extraction takes place, based on the occurrence of the ASN.1 start and stop tags. +A.3.1.2 ASN.1 identifier naming conventions +The naming of identifiers (i.e., the ASN.1 field and type identifiers) should be based on the following guidelines: +- Message (PDU) identifiers should be ordinary mixed case without hyphenation. These identifiers, e.g., the RRCConnectionModificationCommand, should be used for reference in the procedure text. Abbreviated forms of these identifiers should not be used. +- Type identifiers other than PDU identifiers should be ordinary mixed case, with hyphenation used to set off acronyms only where an adjacent letter is a capital, e.g., EstablishmentCause, SelectedPLMN (not Selected-PLMN, since the "d" in "Selected" is lowercase), InitialUE-Identity and MeasSFN-SFN-TimeDifference. +- Field identifiers shall start with a lowercase letter and use mixed case thereafter, e.g., establishmentCause. If a field identifier begins with an acronym (which would normally be in upper case), the entire acronym is lowercase (plmn-Identity, not pLMN-Identity). The acronym is set off with a hyphen (ue-Identity, not ueIdentity), in order to facilitate a consistent search pattern with corresponding type identifiers. +- Identifiers that are likely to be keywords of some language, especially widely used languages, such as C++ or Java, should be avoided to the extent possible. +- Identifiers, other than PDU identifiers, longer than 25 characters should be avoided where possible. It is recommended to use abbreviations, which should be done in a consistent manner i.e. use 'Meas' instead of 'Measurement' for all occurrences. Examples of typical abbreviations are given in table A.3.1.2.1-1 below. +- For future extension: When an extension is introduced a suffix is added to the identifier of the concerned ASN.1 field and/ or type. A suffix of the form "rX" is used, with X indicating the release, for ASN.1 fields or types introduced in a later release (i.e. a release later than the original/ first release of the protocol) as well as for ASN.1 fields or types for which a revision is introduced in a later release replacing a previous version, e.g., Foo-r9 for the Rel-9 version of the ASN.1 type Foo. A suffix of the form "vXYZ" is used for ASN.1 fields or types that only are an extension of a corresponding earlier field or type (see sub-clause A.4), e.g., AnElement-v10b0 for the extension of the ASN.1 type AnElement introduced in version 10.11.0 of the specification. A number 0...9, 10, 11, etc. is used to represent the first part of the version number, indicating the release of the protocol. Lower case letters a, b, c, etc. are used to represent the second (and third) part of the version number if they are greater than 9. In the procedural specification, in field descriptions as well as in headings suffices are not used, unless there is a clear need to distinguish the extension from the original field. +- More generally, in case there is a need to distinguish different variants of an ASN.1 field or IE, a suffix should be added at the end of the identifiers e.g. MeasObjectUTRA, ConfigCommon. When there is no particular need to distinguish the fields (e.g. because the field is included in different IEs), a common field identifier name may be used. This may be attractive e.g. in case the procedural specification is the same for the different variants. +Table A.3.1.2-1: Examples of typical abbreviations used in ASN.1 identifiers +Abbreviation Abbreviated word Conf Confirmation Config Configuration DL Downlink Freq Frequency Id Identity Ind Indication Info Information Meas Measurement Neigh Neighbour(ing) Param(s) Parameter(s) Persist Persistent Phys Physical Reestab Reestablishment Req Request Sched Scheduling Thresh Threshold Transm Transmission UL Uplink +NOTE: The table A.3.1.2.1-1 is not exhaustive. Additional abbreviations may be used in ASN.1 identifiers when needed. +A.3.1.3 Text references using ASN.1 identifiers +A text reference into the RRC PDU contents description from other parts of the specification is made using the ASN.1 field or type identifier of the referenced element. The ASN.1 field and type identifiers used in text references should be in the italic font style. The "do not check spelling and grammar" attribute in Word should be set. Quotation marks (i.e., " ") should not be used around the ASN.1 field or type identifier. +A reference to an RRC PDU type should be made using the corresponding ASN.1 type identifier followed by the word "message", e.g., a reference to the RRCConnectionRelease message. +A reference to a specific part of an RRC PDU, or to a specific part of any other ASN.1 type, should be made using the corresponding ASN.1 field identifier followed by the word "field", e.g., a reference to the prioritisedBitRate field in the example below. +-- /example/ ASN1START + +LogicalChannelConfig ::= SEQUENCE { + ul-SpecificParameters SEQUENCE { + priority Priority, + prioritisedBitRate PrioritisedBitRate, + bucketSizeDuration BucketSizeDuration, + logicalChannelGroup INTEGER (0..3) + } OPTIONAL +} + +-- ASN1STOP + +NOTE: All the ASN.1 start tags in the ASN.1 sections, used as examples in this annex to the specification, are deliberately distorted, in order not to include them when the ASN.1 description of the RRC PDU contents is extracted from the specification. +A reference to a specific type of information element should be made using the corresponding ASN.1 type identifier preceded by the acronym "IE", e.g., a reference to the IE LogicalChannelConfig in the example above. +References to a specific type of information element should only be used when those are generic, i.e., without regard to the particular context wherein the specific type of information element is used. If the reference is related to a particular context, e.g., an RRC PDU type (message) wherein the information element is used, the corresponding field identifier in that context should be used in the text reference. +A reference to a specific value of an ASN.1 field should be made using the corresponding ASN.1 value without using quotation marks around the ASN.1 value, e.g., 'if the status field is set to value true'. +A.3.2 High-level message structure +Within each logical channel type, the associated RRC PDU (message) types are alternatives within a CHOICE, as shown in the example below. +-- /example/ ASN1START + +DL-DCCH-Message ::= SEQUENCE { + message DL-DCCH-MessageType +} + +DL-DCCH-MessageType ::= CHOICE { + c1 CHOICE { + dlInformationTransfer DLInformationTransfer, + handoverFromEUTRAPreparationRequest HandoverFromEUTRAPreparationRequest, + mobilityFromEUTRACommand MobilityFromEUTRACommand, + rrcConnectionReconfiguration RRCConnectionReconfiguration, + rrcConnectionRelease RRCConnectionRelease, + securityModeCommand SecurityModeCommand, + ueCapabilityEnquiry UECapabilityEnquiry, + spare1 NULL + }, + messageClassExtension SEQUENCE {} +} + +-- ASN1STOP + +A nested two-level CHOICE structure is used, where the alternative PDU types are alternatives within the inner level c1 CHOICE. +Spare alternatives (i.e., spare1 in this case) may be included within the c1 CHOICE to facilitate future extension. The number of such spare alternatives should not extend the total number of alternatives beyond an integer-power-of-two number of alternatives (i.e., eight in this case). +Further extension of the number of alternative PDU types is facilitated using the messageClassExtension alternative in the outer level CHOICE. +A.3.3 Message definition +Each PDU (message) type is specified in an ASN.1 section similar to the one shown in the example below. +-- /example/ ASN1START + +RRCConnectionReconfiguration ::= SEQUENCE { + rrc-TransactionIdentifier RRC-TransactionIdentifier, + criticalExtensions CHOICE { + c1 CHOICE{ + rrcConnectionReconfiguration-r8 RRCConnectionReconfiguration-r8-IEs, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +RRCConnectionReconfiguration-r8-IEs ::= SEQUENCE { + -- Enter the IEs here. + ... +} + +-- ASN1STOP +Hooks for critical and non-critical extension should normally be included in the PDU type specification. How these hooks are used is further described in sub-clause A.4. +Critical extensions are characterised by a redefinition of the PDU contents and need to be governed by a mechanism for protocol version agreement between the encoder and the decoder of the PDU, such that the encoder is prevented from sending a critically extended version of the PDU type, which is not comprehended by the decoder. +Critical extension of a PDU type is facilitated by a two-level CHOICE structure, where the alternative PDU contents are alternatives within the inner level c1 CHOICE. Spare alternatives (i.e., spare3 down to spare1 in this case) may be included within the c1 CHOICE. The number of spare alternatives to be included in the original PDU specification should be decided case by case, based on the expected rate of critical extension in the future releases of the protocol. +Further critical extension, when the spare alternatives from the original specifications are used up, is facilitated using the criticalExtensionsFuture in the outer level CHOICE. +In PDU types where critical extension is not expected in the future releases of the protocol, the inner level c1 CHOICE and the spare alternatives may be excluded, as shown in the example below. +-- /example/ ASN1START + +RRCConnectionReconfigurationComplete ::= SEQUENCE { + rrc-TransactionIdentifier RRC-TransactionIdentifier, + criticalExtensions CHOICE { + rrcConnectionReconfigurationComplete-r8 + RRCConnectionReconfigurationComplete-r8-IEs, + criticalExtensionsFuture SEQUENCE {} + } +} + +RRCConnectionReconfigurationComplete-r8-IEs ::= SEQUENCE { + -- Enter the IEs here. -- -- Cond condTag + ... +} + +-- ASN1STOP + +Non-critical extensions are characterised by the addition of new information to the original specification of the PDU type. If not comprehended, a non-critical extension may be skipped by the decoder, whilst the decoder is still able to complete the decoding of the comprehended parts of the PDU contents. +Non-critical extensions at locations other than the end of the message or other than at the end of a field contained in a BIT or OCTET STRING are facilitated by use of the ASN.1 extension marker "...". The original specification of a PDU type should normally include the extension marker at the end of the sequence of information elements contained. +Non-critical extensions at the end of the message or at the end of a field that is contained in a BIT or OCTET STRING are facilitated by use of an empty sequence that is marked OPTIONAL e.g. as shown in the following example: +-- /example/ ASN1START + +RRCMessage-r8-IEs ::= SEQUENCE { + field1 InformationElement1, + field2 InformationElement2, + nonCriticalExtension SEQUENCE {} OPTIONAL -- Need OP +} + +-- ASN1STOP + +The ASN.1 section specifying the contents of a PDU type may be followed by a field description table where a further description of, e.g., the semantic properties of the fields may be included. The general format of this table is shown in the example below. The field description table is absent in case there are no fields for which further description needs to be provided e.g. because the PDU does not include any fields, or because an IE is defined for each field while there is nothing specific regarding the use of this IE that needs to be specified. +%PDU-TypeIdentifier% field descriptions %field identifier% +Field description. %field identifier% +Field description. +The field description table has one column. The header row shall contain the ASN.1 type identifier of the PDU type. +The following rows are used to provide field descriptions. Each row shall include a first paragraph with a field identifier (in bold and italic font style) referring to the part of the PDU to which it applies. The following paragraphs at the same row may include (in regular font style), e.g., semantic description, references to other specifications and/ or specification of value units, which are relevant for the particular part of the PDU. +The parts of the PDU contents that do not require a field description shall be omitted from the field description table. +A.3.4 Information elements +Each IE (information element) type is specified in an ASN.1 section similar to the one shown in the example below. +-- /example/ ASN1START + +PRACH-ConfigSIB ::= SEQUENCE { + rootSequenceIndex INTEGER (0..1023), + prach-ConfigInfo PRACH-ConfigInfo +} + +PRACH-Config ::= SEQUENCE { + rootSequenceIndex INTEGER (0..1023), + prach-ConfigInfo PRACH-ConfigInfo OPTIONAL -- Need ON +} + +PRACH-ConfigInfo ::= SEQUENCE { + prach-ConfigIndex ENUMERATED {ffs}, + highSpeedFlag ENUMERATED {ffs}, + zeroCorrelationZoneConfig ENUMERATED {ffs} +} + +-- ASN1STOP + +IEs should be introduced whenever there are multiple fields for which the same set of values apply. IEs may also be defined for other reasons e.g. to break down a ASN.1 definition in to smaller pieces. +A group of closely related IE type definitions, like the IEs PRACH-ConfigSIB and PRACH-Config in this example, are preferably placed together in a common ASN.1 section. The IE type identifiers should in this case have a common base, defined as the generic type identifier. It may be complemented by a suffix to distinguish the different variants. The "PRACH-Config" is the generic type identifier in this example, and the "SIB" suffix is added to distinguish the variant. The sub-clause heading and generic references to a group of closely related IEs defined in this way should use the generic type identifier. +The same principle should apply if a new version, or an extension version, of an existing IE is created for critical or non-critical extension of the protocol (see sub-clause A.4). The new version, or the extension version, of the IE is included in the same ASN.1 section defining the original. A suffix is added to the type identifier, using the naming conventions defined in sub-clause A.3.1.2, indicating the release or version of the where the new version, or extension version, was introduced. +Local IE type definitions, like the IE PRACH-ConfigInfo in the example above, may be included in the ASN.1 section and be referenced in the other IE types defined in the same ASN.1 section. The use of locally defined IE types should be encouraged, as a tool to break up large and complex IE type definitions. It can improve the readability of the code. There may also be a benefit for the software implementation of the protocol end-points, as these IE types are typically provided by the ASN.1 compiler as independent data elements, to be used in the software implementation. +An IE type defined in a local context, like the IE PRACH-ConfigInfo, should not be referenced directly from other ASN.1 sections in the RRC specification. An IE type which is referenced in more than one ASN.1 section should be defined in a separate sub-clause, with a separate heading and a separate ASN.1 section (possibly as one in a set of closely related IE types, like the IEs PRACH-ConfigSIB and PRACH-Config in the example above). Such IE types are also referred to as 'global IEs'. +NOTE: Referring to an IE type, that is defined as a local IE type in the context of another ASN.1 section, does not generate an ASN.1 compilation error. Nevertheless, using a locally defined IE type in that way makes the IE type definition difficult to find, as it would not be visible at an outline level of the specification. It should be avoided. +The ASN.1 section specifying the contents of one or more IE types, like in the example above, may be followed by a field description table, where a further description of, e.g., the semantic properties of the fields of the information elements may be included. This table may be absent, similar as indicated in sub-clause A.3.3 for the specification of the PDU type. The general format of the field description table is the same as shown in sub-clause A.3.3 for the specification of the PDU type. +A.3.5 Fields with optional presence +A field with optional presence may be declared with the keyword DEFAULT. It identifies a default value to be assumed, if the sender does not include a value for that field in the encoding: +-- /example/ ASN1START + +PreambleInfo ::= SEQUENCE { + numberOfRA-Preambles INTEGER (1..64) DEFAULT 1, + ... +} + +-- ASN1STOP + +Alternatively, a field with optional presence may be declared with the keyword OPTIONAL. It identifies a field for which a value can be omitted. The omission carries semantics, which is different from any normal value of the field: +-- /example/ ASN1START + +PRACH-Config ::= SEQUENCE { + rootSequenceIndex INTEGER (0..1023), + prach-ConfigInfo PRACH-ConfigInfo OPTIONAL -- Need ON +} + +-- ASN1STOP + +The semantics of an optionally present field, in the case it is omitted, should be indicated at the end of the paragraph including the keyword OPTIONAL, using a short comment text with a need statement. The need statement includes the keyword "Need", followed by one of the predefined semantics tags (OP, ON or OR) defined in sub-clause 6.1. If the semantics tag OP is used, the semantics of the absent field are further specified either in the field description table following the ASN.1 section, or in procedure text. +A.3.6 Fields with conditional presence +A field with conditional presence is declared with the keyword OPTIONAL. In addition, a short comment text shall be included at the end of the paragraph including the keyword OPTIONAL. The comment text includes the keyword "Cond", followed by a condition tag associated with the field ("UL" in this example): +-- /example/ ASN1START + +LogicalChannelConfig ::= SEQUENCE { + ul-SpecificParameters SEQUENCE { + priority INTEGER (0), + ... + } OPTIONAL -- Cond UL +} + +-- ASN1STOP + +When conditionally present fields are included in an ASN.1 section, the field description table after the ASN.1 section shall be followed by a conditional presence table. The conditional presence table specifies the conditions for including the fields with conditional presence in the particular ASN.1 section. +Conditional presence Explanation UL Specification of the conditions for including the field associated with the condition tag = "UL". Semantics in case of optional presence under certain conditions may also be specified. +The conditional presence table has two columns. The first column (heading: "Conditional presence") contains the condition tag (in italic font style), which links the fields with a condition tag in the ASN.1 section to an entry in the table. The second column (heading: "Explanation") contains a text specification of the conditions and requirements for the presence of the field. The second column may also include semantics, in case of an optional presence of the field, under certain conditions i.e. using the same predefined tags as defined for optional fields in A.3.5. +Conditional presence should primarily be used when presence of a field despends on the presence and/ or value of other fields within the same message. If the presence of a field depends on whether another feature/ function has been configured, while this function can be configured indepedently e.g. by another message and/ or at another point in time, the relation is best reflected by means of a statement in the field description table. +If the ASN.1 section does not include any fields with conditional presence, the conditional presence table shall not be included. +Whenever a field is only applicable in specific cases e.g. TDD, use of conditional presence should be considered. +A.3.7 Guidelines on use of lists with elements of SEQUENCE type +Where an information element has the form of a list (the SEQUENCE OF construct in ASN.1) with the type of the list elements being a SEQUENCE data type, an information element shall be defined for the list elements even if it would not otherwise be needed. +For example, a list of PLMN identities with reservation flags is defined as in the following example: +-- /example/ ASN1START + +PLMN-IdentityInfoList ::= SEQUENCE (SIZE (1..6)) OF PLMN-IdentityInfo + +PLMN-IdentityInfo ::= SEQUENCE { + plmn-Identity PLMN-Identity, + cellReservedForOperatorUse ENUMERATED {reserved, notReserved} +} + +-- ASN1STOP +rather than as in the following (bad) example, which may cause generated code to contain types with unpredictable names: +-- /bad example/ ASN1START + +PLMN-IdentityList ::= SEQUENCE (SIZE (1..6)) OF SEQUENCE { + plmn-Identity PLMN-Identity, + cellReservedForOperatorUse ENUMERATED {reserved, notReserved} +} + +-- ASN1STOP +A.4 Extension of the PDU specifications +A.4.1 General principles to ensure compatibility +It is essential that extension of the protocol does not affect interoperability i.e. it is essential that implementations based on different versions of the RRC protocol are able to interoperate. In particular, this requirement applies for the following kind of protocol extensions: +- Introduction of new PDU types (i.e. these should not cause unexpected behaviour or damage). +- Introduction of additional fields in an extensible PDUs (i.e. it should be possible to ignore uncomprehended extensions without affecting the handling of the other parts of the message). +- Introduction of additional values of an extensible field of PDUs. If used, the behaviour upon reception of an uncomprehended value should be defined. +It should be noted that the PDU extension mechanism may depend on the logical channel used to transfer the message e.g. for some PDUs an implementation may be aware of the protocol version of the peer in which case selective ignoring of extensions may not be required. +The non-critical extension mechanism is the primary mechanism for introducing protocol extensions i.e. the critical extension mechanism is used merely when there is a need to introduce a 'clean' message version. Such a need appears when the last message version includes a large number of non-critical extensions, which results in issues like readability, overhead associated with the extension markers. The critical extension mechanism may also be considered when it is complicated to accommodate the extensions by means of non-critical extension mechanisms. +A.4.2 Critical extension of messages +The mechanisms to critically extend a message are defined in A.3.3. There are both "outer branch" and "inner branch" mechanisms available. The "outer branch" consists of a CHOICE having the name criticalExtensions, with two values, c1 and criticalExtensionsFuture. The criticalExtensionsFuture branch consists of an empty SEQUENCE, while the c1 branch contains the "inner branch" mechanism. +The "inner branch" structure is a CHOICE with values of the form "MessageName-rX-IEs" (e.g., "RRCConnectionReconfiguration-r8-IEs") or "spareX", with the spare values having type NULL. The "-rX-IEs" structures contain the complete structure of the message IEs for the appropriate release; i.e., the critical extension branch for the Rel-10 version of a message includes all Rel-8 and Rel-9 fields (that are not obviated in the later version), rather than containing only the additional Rel-10 fields. +The following guidelines may be used when deciding which mechanism to introduce for a particular message, i.e. only an 'outer branch', or an 'outer branch' in combination with an 'inner branch' including a certain number of spares: +- For certain messages, e.g. initial uplink messages, messages transmitted on a broadcast channel, critical extension may not be applicable. +- An outer branch may be sufficient for messages not including any fields. +- The number of spares within inner branch should reflect the likelihood that the message will be critically extended in future releases (since each release with a critical extension for the message consumes one of the spare values). The estimation of the critical extension likelyhood may be based on the number, size and changeability of the fields included in the message. +- In messages where an inner branch extension mechanism is available, all spare values of the inner branch should be used before any critical extensions are added using the outer branch. +The following example illustrates the use of the critical extension mechanism by showing the ASN.1 of the original and of a later release +-- /example/ ASN1START -- Original release + +RRCMessage ::= SEQUENCE { + rrc-TransactionIdentifier RRC-TransactionIdentifier, + criticalExtensions CHOICE { + c1 CHOICE{ + rrcMessage-r8 RRCMessage-r8-IEs, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +-- ASN1STOP + +-- /example/ ASN1START -- Later release + +RRCMessage ::= SEQUENCE { + rrc-TransactionIdentifier RRC-TransactionIdentifier, + criticalExtensions CHOICE { + c1 CHOICE{ + rrcMessage-r8 RRCMessage-r8-IEs, + rrcMessage-r10 RRCMessage-r10-IEs, + rrcMessage-r11 RRCMessage-r11-IEs, + rrcMessage-r14 RRCMessage-r14-IEs + }, + later CHOICE { + c2 CHOICE{ + rrcMessage-r16 RRCMessage-r16-IEs, + spare7 NULL, spare6 NULL, spare5 NULL, spare4 NULL, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } + } +} + +-- ASN1STOP + +A.4.3 Non-critical extension of messages +A.4.3.1 General principles +The mechanisms to extend a message in a non-critical manner are defined in A.3.3. W.r.t. the use of extension markers, the following additional guidelines apply: +- When further non-critical extensions are added to a message that has been critically extended, the inclusion of these non-critical extensions in earlier critical branches of the message should be avoided when possible. +- The extension marker ("…") is the primary non-critical extension mechanism that is used unless a length determinant is not required. Examples of cases where a length determinant is not required: +- at the end of a message, +- at the end of a structure contained in a BIT STRING or OCTET STRING +- When an extension marker is available, non-critical extensions are preferably placed at the location (e.g. the IE) where the concerned parameter belongs from a logical/ functional perspective (referred to as the 'default extension location') +- It is desirable to aggregate extensions of the same release or version of the specification into a group, which should be placed at the lowest possible level. +- In specific cases it may be preferrable to place extensions elsewhere (referred to as the 'actual extension location') e.g. when it is possible to aggregate several extensions in a group. In such a case, the group should be placed at the lowest suitable level in the message. +- In case placement at the default extension location affects earlier critical branches of the message, locating the extension at a following higher level in the message should be considered. +- In case an extension is not placed at the default extension location, an IE should be defined. The IE's ASN.1 definition should be placed in the same ASN.1 section as the default extension location. In case there are intermediate levels in-between the actual and the default extension location, an IE may be defined for each level. Intermediate levels are primarily introduced for readability and overview. Hence intermediate levels need not allways be introduced e.g. they may not be needed when the default and the actual extension location are within the same ASN.1 section. +A.4.3.2 Further guidelines +Further to the general principles defined in the previous section, the following additional guidelines apply regarding the use of extension markers: +- Extension markers within SEQUENCE +- Extension markers are primarily, but not exclusively, introduced at the higher nesting levels +- Extension markers are introduced for a SEQUENCE comprising several fields as well as for information elements whose extension would result in complex structures without it (e.g. re-introducing another list) +- Extension markers are introduced to make it possible to maintain important information structures e.g. parameters relevant for one particular RAT +- Extension markers are also used for size critical messages (i.e. messages on BCCH, PCCH and CCCH), although introduced somewhat more carefully +- The extension fields introduced (or frozen) in a specific version of the specification are grouped together using double brackets. +- Extension markers within ENUMERATED +- Spare values are used until the number of values reaches the next power of 2, while the extension marker caters for extension beyond that limit +- A suffix of the form "vXYZ" is used for the identifier of each new value, e.g. "value-vXYZ". +- Extension markers within CHOICE: +- Extension markers are introduced when extension is foreseen and when comprehension is not required by the receiver i.e. behaviour is defined for the case where the receiver cannot comprehend the extended value (e.g. ignoring an optional CHOICE field). It should be noted that defining the behaviour of a receiver upon receiving a not comprehended choice value is not required if the sender is aware whether or not the receiver supports the extended value. +- A suffix of the form "vXYZ" is used for the identifier of each new choice value, e.g. "choice-vXYZ". +Non-critical extensions at the end of a message/ of a field contained in an OCTET or BIT STRING: +- When a nonCriticalExtension is actually used, a "Need" statement is not provided for the field, which always is a group including at least one extension and a field facilitating further possible extensions. +Further, more general, guidelines: +- In case a need statement is not provided for a group, a "Need" statement is provided for all individual extension fields within the group i.e. including for fields that are not marked as OPTIONAL. The latter is to clarify the action upon absence of the whole group. +A.4.3.3 Typical example of evolution of IE with local extensions +The following example illustrates the use of the extension marker for a number of elementary cases (sequence, enumerated, choice). The example also illustrates how the IE may be revised in case the critical extension mechanism is used. +NOTE In case there is a need to support further extensions of release n while the ASN.1 of release (n+1) has been frozen, without requiring the release n receiver to support decoding of release (n+1) extensions, more advanced mechanisms are needed e.g. including multiple extension markers. +-- /example/ ASN1START + +InformationElement1 ::= SEQUENCE { + field1 ENUMERATED { + value1, value2, value3, value4-v880, + ..., value5-v960 }, + field2 CHOICE { + field2a BOOLEAN, + field2b InformationElement2b, + ..., + field2c-v960 InformationElement2c-r9 + }, + ..., + [[ field3-r9 InformationElement3-r9 OPTIONAL -- Need OR + ]], + [[ field3-v9a0 InformationElement3-v9a0 OPTIONAL, -- Need OR + field4-r9 InformationElement4 OPTIONAL -- Need OR + ]] +} + +InformationElement1-r10 ::= SEQUENCE { + field1 ENUMERATED { + value1, value2, value3, value4-v880, + value5-v960, value6-v1170, spare2, spare1, ... }, + field2 CHOICE { + field2a BOOLEAN, + field2b InformationElement2b, + field2c-v960 InformationElement2c-r9, + ..., + field2d-v12b0 INTEGER (0..63) + }, + field3-r9 InformationElement3-r10 OPTIONAL, -- Need OR + field4-r9 InformationElement4 OPTIONAL, -- Need OR + field5-r10 BOOLEAN, + field6-r10 InformationElement6-r10 OPTIONAL, -- Need OR + ..., + [[ field3-v1170 InformationElement3-v1170 OPTIONAL -- Need OR + ]] +} + +-- ASN1STOP + +Some remarks regarding the extensions of InformationElement1 as shown in the above example: +– The InformationElement1 is initially extended with a number of non-critical extensions. In release 10 however, a critical extension is introduced for the message using this IE. Consequently, a new version of the IE InformationElement1 (i.e. InformationElement1-r10) is defined in which the earlier non-critical extensions are incorporated by means of a revision of the original field. +– The value4-v880 is replacing a spare value defined in the original protocol version for field1. Likewise value6-v1170 replaces spare3 that was originally defined in the r10 version of field1 +– Within the critically extended release 10 version of InformationElement1, the names of the original fields/ IEs are not changed, unless there is a real need to distinguish them from other fields/ IEs. E.g. the field1 and InformationElement4 were defined in the original protocol version (release 8) and hence not tagged. Moreover, the field3-r9 is introduced in release 9 and not re-tagged; although, the InformationElement3 is also critically extended and therefore tagged InformationElement3-r10 in the release 10 version of InformationElement1. +A.4.3.4 Typical examples of non critical extension at the end of a message +The following example illustrates the use of non-critical extensions at the end of the message or at the end of a field that is contained in a BIT or OCTET STRING i.e. when an empty sequence is used. +-- /example/ ASN1START + +RRCMessage-r8-IEs ::= SEQUENCE { + field1 InformationElement1, + field2 InformationElement2, + field3 InformationElement3 OPTIONAL, -- Need ON + nonCriticalExtension RRCMessage-v860-IEs OPTIONAL +} + +RRCMessage-v860-IEs ::= SEQUENCE { + field4-v860 InformationElement4 OPTIONAL, -- Need OP + field5-v860 BOOLEAN OPTIONAL, -- Cond C54 + nonCriticalExtension RRCMessage-v940-IEs +} + +RRCMessage-v940-IEs ::= SEQUENCE { + field6-v940 InformationElement6-r9 OPTIONAL, -- Need OR + nonCriticalExtensions SEQUENCE {} OPTIONAL -- Need OP +} + +-- ASN1STOP + +Some remarks regarding the extensions shown in the above example: +– The InformationElement4 is introduced in the original version of the protocol (release 8) and hence no suffix is used. +A.4.3.5 Examples of non-critical extensions not placed at the default extension location +The following example illustrates the use of non-critical extensions in case an extension is not placed at the default extension location. +– ParentIE-WithEM +The IE ParentIE-WithEM is an example of a high level IE including the extension marker (EM). The root encoding of this IE includes two lower level IEs ChildIE1-WithoutEM and ChildIE2-WithoutEM which not include the extension marker. Consequently, non-critical extensions of the Child-IEs have to be included at the level of the Parent-IE. +The example illustrates how the two extension IEs ChildIE1-WithoutEM-vNx0 and ChildIE2-WithoutEM-vNx0 (both in release N) are used to connect non-critical extensions with a default extension location in the lower level IEs to the actual extension location in this IE. +ParentIE-WithEM information element +-- /example/ ASN1START + +ParentIE-WithEM ::= SEQUENCE { + -- Root encoding, including: + childIE1-WithoutEM ChildIE1-WithoutEM OPTIONAL, -- Need ON + childIE2-WithoutEM ChildIE2-WithoutEM OPTIONAL, -- Need ON + ..., + [[ childIE1-WithoutEM-vNx0 ChildIE1-WithoutEM-vNx0 OPTIONAL, -- Need ON + childIE2-WithoutEM-vNx0 ChildIE2-WithoutEM-vNx0 OPTIONAL -- Need ON + ]] +} + +-- ASN1STOP + +Some remarks regarding the extensions shown in the above example: +– The fields childIEx-WithoutEM-vNx0 may not really need to be optional (depends on what is defined at the next lower level). +– In general, especially when there are several nesting levels, fields should be marked as optional only when there is a clear reason. + +– ChildIE1-WithoutEM +The IE ChildIE1-WithoutEM is an example of a lower level IE, used to control certain radio configurations including a configurable feature which can be setup or released using the local IE ChIE1-ConfigurableFeature. The example illustrates how the new field chIE1-NewField is added in release N to the configuration of the configurable feature. The example is based on the following assumptions: +– when initially configuring as well as when modifying the new field, the original fields of the configurable feature have to be provided also i.e. as if the extended ones were present within the setup branch of this feature. +– when the configurable feature is released, the new field should be released also. +– when omitting the original fields of the configurable feature the UE continues using the existing values (which is used to optimise the signalling for features that typically continue unchanged upon handover). +– when omitting the new field of the configurable feature the UE releases the existing values and discontinues the associated functionality (which may be used to support release of unsupported functionality upon handover to an eNB supporting an earlier protocol version). +The above assumptions, which affect the use of conditions and need codes, may not always apply. Hence, the example should not be re-used blindly. +ChildIE1-WithoutEM information elements +-- /example/ ASN1START + +ChildIE1-WithoutEM ::= SEQUENCE { + -- Root encoding, including: + chIE1-ConfigurableFeature ChIE1-ConfigurableFeature OPTIONAL -- Need ON +} + +ChildIE1-WithoutEM-vNx0 ::= SEQUENCE { + chIE1-ConfigurableFeature-vNx0 ChIE1-ConfigurableFeature-vNx0 OPTIONAL -- Cond ConfigF +} + +ChIE1-ConfigurableFeature ::= CHOICE { + release NULL, + setup SEQUENCE { + -- Root encoding + } +} + +ChIE1-ConfigurableFeature-vNx0 ::= SEQUENCE { + chIE1-NewField-rN INTEGER (0..31) +} + +-- ASN1STOP + +Conditional presence Explanation ConfigF The field is optional present, need OR, in case of chIE1-ConfigurableFeature is included and set to "setup"; otherwise the field is not present and the UE shall delete any existing value for this field. +– ChildIE2-WithoutEM +The IE ChildIE2-WithoutEM is an example of a lower level IE, typically used to control certain radio configurations. The example illustrates how the new field chIE1-NewField is added in release N to the configuration of the configurable feature. +ChildIE2-WithoutEM information element +-- /example/ ASN1START + +ChildIE2-WithoutEM ::= CHOICE { + release NULL, + setup SEQUENCE { + -- Root encoding + } +} + +ChildIE2-WithoutEM-vNx0 ::= SEQUENCE { + chIE2-NewField-rN INTEGER (0..31) OPTIONAL -- Cond ConfigF +} + +-- ASN1STOP + +Conditional presence Explanation ConfigF The field is optional present, need OR, in case of chIE2-ConfigurableFeature is included and set to "setup"; otherwise the field is not present and the UE shall delete any existing value for this field. +A.5 Guidelines regarding inclusion of transaction identifiers in RRC messages +The following rules provide guidance on which messages should include a Transaction identifier +1: DL messages on CCCH that move UE to RRC-Idle should not include the RRC transaction identifier. +2: All network initiated DL messages by default should include the RRC transaction identifier. +3: All UL messages that are direct response to a DL message with an RRC Transaction identifier should include the RRC Transaction identifier. +4: All UL messages that require a direct DL response message should include an RRC transaction identifier. +5: All UL messages that are not in response to a DL message nor require a corresponding response from the network should not include the RRC Transaction identifier. +A.6 Protection of RRC messages (informative) +The following list provides information which messages can be sent (unprotected) prior to security activation and which messages can be sent unprotected after security activation. +P…Messages that can be sent (unprotected) prior to security activation +A - I…Messages that can be sent without integrity protection after security activation +A - C…Messages that can be sent unciphered after security activation +NA… Message can never be sent after security activation +Message P A-I A-C Comment CSFBParametersRequestCDMA2000 + - - CSFBParametersResponseCDMA2000 + - - CounterCheck - - - CounterCheckResponse - - - DLInformationTransfer + - - HandoverFromEUTRAPreparationRequest (CDMA2000) - - - InterFreqRSTDMeasurementIndication - - - LoggedMeasurementsConfiguration - - - MasterInformationBlock + + + MBMSCountingRequest + + + MBMSCountingResponse - - - MBSFNAreaConfiguration + + + MeasurementReport + - - Justification for case “P”: RAN2 agreed that measurement configuration may be sent prior to security activation MobilityFromEUTRACommand - - - Paging + + + ProximityIndication - - - RNReconfiguration - - - RNReconfigurationComplete - - - RRCConnectionReconfiguration + - - The message shall not be sent unprotected before security activation if it is used to perform handover or to establish SRB2 and DRBs RRCConnectionReconfigurationComplete + - - Unprotected, if sent as response to RRCConnectionReconfiguration which was sent before security activation RRCConnectionReestablishment - + + This message is not protected by PDCP operation. RRCConnectionReestablishmentComplete - - - RRCConnectionReestablishmentReject - + + One reason to send this may be that the security context has been lost, therefore sent as unprotected. RRCConnectionReestablishmentRequest - - + This message is not protected by PDCP operation. However a short MAC-I is included. RRCConnectionReject + NA NA RRCConnectionRelease + - - Justification for P: If the RRC connection only for signalling not requiring DRBs or ciphered messages, or the signalling connection has to be released prematurely, this message is sent as unprotected. RRCConnectionRequest + NA NA RRCConnectionSetup + NA NA RRCConnectionSetupComplete + NA NA SecurityModeCommand + NA NA Integrity protection applied, but no ciphering (integrity verification done after the message received by RRC) SecurityModeComplete - NA NA Integrity protection applied, but no ciphering. Ciphering is applied after completing the procedure. SecurityModeFailure + NA NA Neither integrity protection nor ciphering applied. SystemInformation + + + SystemInformationBlockType1 + + + UECapabilityEnquiry + - - UECapabilityInformation + - - UEInformationRequest - - - UEInformationResponse - - - ULHandoverPreparationTransfer (CDMA2000) - - - This message should follow HandoverFromEUTRAPreparationRequest ULInformationTransfer + - - +A.7 Miscellaneous +The following miscellaneous conventions should be used: +- References: Whenever another specification is referenced, the specification number and optionally the relevant subclause, table or figure, should be indicated in addition to the pointer to the References section e.g. as follows: 'see TS 36.212 [22, 5.3.3.1.6]'. + +Annex B (normative): Release 8 and 9 AS feature handling +B.1 Feature group indicators +This annex contains the definitions of the bits in fields featureGroupIndicators (in Table B.1-1) and featureGroupIndRel9Add (in Table B.1-1a). +In this release of the protocol, the UE shall include the fields featureGroupIndicators in the IE UE-EUTRA-Capability and featureGroupIndRel9Add in the IE UE-EUTRA-Capability-v9a0. All the functionalities defined within the field featureGroupIndicators defined in Table B.1-1 or Table B.1-1a are mandatory for the UE, if the related capability (frequency band, RAT, SR-VCC or Inter-RAT ANR) is also supported. For a specific indicator, if all functionalities for a feature group listed in Table B.1-1 have been implemented and tested, the UE shall set the indicator as one (1), else (i.e. if any one of the functionalities in a feature group listed in Table B.1-1 or Table B.1-1a, which have not been implemented or tested), the UE shall set the indicator as zero (0). +The UE shall set all indicators that correspond to RATs not supported by the UE as zero (0). +The UE shall set all indicators, which do not have a definition in Table B.1-1 or Table B.1-1a, as zero (0). +If the optional fields featureGroupIndicators or featureGroupIndRel9Add are not included by a UE of a future release, the network may assume that all features pertaining to the RATs supported by the UE, respectively listed in Table B.1-1 or Table B.1-1a and deployed in the network, have been implemented and tested by the UE. +In Table B.1-1, a 'VoLTE capable UE' corresponds to a UE which is IMS voice capable. +The indexing in Table B.1-1a starts from index 33, which is the leftmost bit in the field featureGroupIndRel9Add. + +Table B.1-1: Definitions of feature group indicators +Index of indicator (bit number) Definition +(description of the supported functionality, if indicator set to one) Notes If indicated "Yes" the feature shall be implemented and successfully tested for this version of the specification FDD/ TDD diff 1 (leftmost bit) - Intra-subframe frequency hopping for PUSCH scheduled by UL grant +- DCI format 3a (TPC commands for PUCCH and PUSCH with single bit power adjustments) +- Aperiodic CQI/PMI/RI reporting on PUSCH: Mode 2-0 – UE selected subband CQI without PMI +- Aperiodic CQI/PMI/RI reporting on PUSCH: Mode 2-2 – UE selected subband CQI with multiple PMI Yes 2 - Simultaneous CQI and ACK/NACK on PUCCH, i.e. PUCCH format 2a and 2b +- Absolute TPC command for PUSCH +- Resource allocation type 1 for PDSCH +- Periodic CQI/PMI/RI reporting on PUCCH: Mode 2-0 – UE selected subband CQI without PMI +- Periodic CQI/PMI/RI reporting on PUCCH: Mode 2-1 – UE selected subband CQI with single PMI Yes 3 - 5bit RLC UM SN +- 7bit PDCP SN - can only be set to 1 if the UE has set bit number 7 to 1. Yes, if UE supports VoLTE No 4 - Short DRX cycle - can only be set to 1 if the UE has set bit number 5 to 1. Yes 5 - Long DRX cycle +- DRX command MAC control element Yes No 6 - Prioritised bit rate Yes No 7 - RLC UM - can only be set to 0 if the UE does not support VoLTE Yes, if UE supports VoLTE No 8 - EUTRA RRC_CONNECTED to UTRA FDD or UTRA TDD CELL_DCH PS handover, if the UE supports either only UTRAN FDD or only UTRAN TDD + +- EUTRA RRC_CONNECTED to UTRA FDD CELL_DCH PS handover, if the UE supports both UTRAN FDD and UTRAN TDD - can only be set to 1 if the UE has set bit number 22 to 1 Yes for FDD, if UE supports UTRA FDD Yes 9 - EUTRA RRC_CONNECTED to GERAN GSM_Dedicated handover - related to SR-VCC +- can only be set to 1 if the UE has set bit number 23 to 1 Yes 10 - EUTRA RRC_CONNECTED to GERAN (Packet_) Idle by Cell Change Order +- EUTRA RRC_CONNECTED to GERAN (Packet_) Idle by Cell Change Order with NACC (Network Assisted Cell Change) Yes 11 - EUTRA RRC_CONNECTED to CDMA2000 1xRTT CS Active handover - related to SR-VCC +- can only be set to 1 if the UE has sets bit number 24 to 1 Yes 12 - EUTRA RRC_CONNECTED to CDMA2000 HRPD Active handover - can only be set to 1 if the UE has set bit number 26 to 1 Yes 13 - Inter-frequency handover (within FDD or TDD) - can only be set to 1 if the UE has set bit number 25 to 1 Yes, unless UE only supports band 13 No 14 - Measurement reporting event: Event A4 – Neighbour > threshold +- Measurement reporting event: Event A5 – Serving < threshold1 & Neighbour > threshold2 Yes No 15 - Measurement reporting event: Event B1 – Neighbour > threshold for UTRAN FDD or UTRAN TDD, if the UE supports either only UTRAN FDD or only UTRAN TDD and has set bit number 22 to 1 + +- Measurement reporting event: Event B1 – Neighbour > threshold for UTRAN FDD or UTRAN TDD, if the UE supports both UTRAN FDD and UTRAN TDD and has set bit number 22 or 39 to 1, respectively + +- Measurement reporting event: Event B1 – Neighbour > threshold for GERAN, 1xRTT or HRPD, if the UE has set bit number 23, 24 or 26 to 1, respectively - can only be set to 1 if the UE has set at least one of the bit number 22, 23, 24, 26 or 39 to 1. +- even if the UE sets bits 41, it shall still set bit 15 to 1 if measurement reporting event B1 is tested for all RATs supported by UE Yes for FDD, if UE supports only UTRAN FDD and does not support UTRAN TDD or GERAN or 1xRTT or HRPD Yes 16 - Intra-frequency periodical measurement reporting where triggerType is set to periodical and purpose is set to reportStrongestCells; +- Inter-frequency periodical measurement reporting where triggerType is set to periodical and purpose is set to reportStrongestCells, if the UE has set bit number 25 to 1 +- Inter-RAT periodical measurement reporting where triggerType is set to periodical and purpose is set to reportStrongestCells for UTRAN FDD or UTRAN TDD, if the UE supports either only UTRAN FDD or only UTRAN TDD and has set bit number 22 to 1 +- Inter-RAT periodical measurement reporting where triggerType is set to periodical and purpose is set to reportStrongestCells for UTRAN FDD or UTRAN TDD, if the UE supports both UTRAN FDD and UTRAN TDD and has set bit number 22 or 39 to 1, respectively +- Inter-RAT periodical measurement reporting where triggerType is set to periodical and purpose is set to reportStrongestCells for GERAN, 1xRTT or HRPD, if the UE has set bit number 23, 24 or 26 to 1, respectively + +NOTE: Event triggered periodical reporting (i.e., with triggerType set to event and with reportAmount > 1) is a mandatory functionality of event triggered reporting and therefore not the subject of this bit. Yes No 17 Intra-frequency ANR features including: +- Intra-frequency periodical measurement reporting where triggerType is set to periodical and purpose is set to reportStrongestCells +- Intra-frequency periodical measurement reporting where triggerType is set to periodical and purpose is set to reportCGI - can only be set to 1 if the UE has set bit number 5 to 1. Yes No 18 Inter-frequency ANR features including: +- Inter-frequency periodical measurement reporting where triggerType is set to periodical and purpose is set to reportStrongestCells +- Inter-frequency periodical measurement reporting where triggerType is set to periodical and purpose is set to reportCGI - can only be set to 1 if the UE has set bit number 5 and bit number 25 to 1. Yes, unless UE only supports band 13 No 19 Inter-RAT ANR features including: +- Inter-RAT periodical measurement reporting where triggerType is set to periodical and purpose is set to reportStrongestCells for GERAN, if the UE has set bit number 23 to 1 +- Inter-RAT periodical measurement reporting where triggerType is set to periodical and purpose is set to reportStrongestCellsForSON for UTRAN FDD or UTRAN TDD, if the UE supports either only UTRAN FDD or only UTRAN TDD and has set bit number 22 to 1 +- Inter-RAT periodical measurement reporting where triggerType is set to periodical and purpose is set to reportStrongestCellsForSON for UTRAN FDD or UTRAN TDD, if the UE supports both UTRAN FDD and UTRAN TDD and has set bit number 22 or 39 to 1, respectively +- Inter-RAT periodical measurement reporting where triggerType is set to periodical and purpose is set to reportStrongestCellsForSON for 1xRTT or HRPD, if the UE has set bit number 24 or 26 to 1, respectively +- Inter-RAT periodical measurement reporting where triggerType is set to periodical and purpose is set to reportCGI for UTRAN FDD or UTRAN TDD, if the UE supports either only UTRAN FDD or only UTRANTDD and has set bit number 22 to 1 +- Inter-RAT periodical measurement reporting where triggerType is set to periodical and purpose is set to reportCGI for UTRAN FDD or UTRAN TDD, if the UE supports both UTRAN FDD and UTRAN TDD and has set bit number 22 or 39 to 1, respectively +- Inter-RAT periodical measurement reporting where triggerType is set to periodical and purpose is set to reportCGI for GERAN, 1xRTT or HRPD, if the UE has set bit number 23, 24 or 26 to 1, respectively - can only be set to 1 if the UE has set bit number 5 to 1 and the UE has set at least one of the bit number 22, 39, 23, 24 or 26 to 1. +- even if the UE sets bits 33 to 37, it shall still set bit 19 to 1 if inter-RAT ANR features are tested for all RATs for which inter-RAT measurement reporting is indicated as tested Yes 20 If bit number 7 is set to 0: +- SRB1 and SRB2 for DCCH + 8x AM DRB + +If bit number 7 is set to 1: +- SRB1 and SRB2 for DCCH + 8x AM DRB +- SRB1 and SRB2 for DCCH + 5x AM DRB + 3x UM DRB + +NOTE: UE which indicate support for a DRB combination also support all subsets of the DRB combination. Therefore, release of DRB(s) never results in an unsupported DRB combination. + - Regardless of what bit number 7 and bit number 20 is set to, UE shall support at least SRB1 and SRB2 for DCCH + 4x AM DRB +- Regardless of what bit number 20 is set to, if bit number 7 is set to 1, UE shall support at least SRB1 and SRB2 for DCCH + 4x AM DRB + 1x UM DRB + Yes No 21 - Predefined intra- and inter-subframe frequency hopping for PUSCH with N_sb > 1 +- Predefined inter-subframe frequency hopping for PUSCH with N_sb > 1 No 22 - UTRAN FDD or UTRAN TDD measurements, reporting and measurement reporting event B2 in E-UTRA connected mode, if the UE supports either only UTRAN FDD or only UTRAN TDD + +- UTRAN FDD measurements, reporting and measurement reporting event B2 in E-UTRA connected mode, if the UE supports both UTRAN FDD and UTRAN TDD Yes for FDD, if UE supports UTRA FDD Yes 23 - GERAN measurements, reporting and measurement reporting event B2 in E-UTRA connected mode Yes 24 - 1xRTT measurements, reporting and measurement reporting event B2 in E-UTRA connected mode Yes for FDD, if UE supports enhanced 1xRTT CSFB for FDD +Yes for TDD, if UE supports enhanced 1xRTT CSFB for TDD Yes 25 - Inter-frequency measurements and reporting in E-UTRA connected mode + +NOTE: The UE setting this bit to 1 and indicating support for FDD and TDD frequency bands in the UE capability signalling implements and is tested for FDD measurements while the UE is in TDD, and for TDD measurements while the UE is in FDD. Yes, unless UE only supports band 13 No 26 - HRPD measurements, reporting and measurement reporting event B2 in E-UTRA connected mode Yes for FDD, if UE supports HRPD Yes 27 - EUTRA RRC_CONNECTED to UTRA FDD or UTRA TDD CELL_DCH CS handover, if the UE supports either only UTRAN FDD or only UTRAN TDD + +- EUTRA RRC_CONNECTED to UTRA FDD CELL_DCH CS handover, if the UE supports both UTRAN FDD and UTRAN TDD - related to SR-VCC +- can only be set to 1 if the UE has set bit number 8 to 1 and supports SR-VCC from EUTRA defined in TS 24.008 [49] Yes for FDD, if UE supports VoLTE and UTRA FDD Yes 28 - TTI bundling Yes for FDD Yes 29 - Semi-Persistent Scheduling Yes 30 - Handover between FDD and TDD - can only be set to 1 if the UE has set bit number 13 to 1 No 31 - Indicates whether the UE supports the mechanisms defined for cells broadcasting multi band information i.e. comprehending multiBandInfoList, disregarding in RRC_CONNECTED the related system information fields and understanding the EARFCN signalling for all bands, that overlap with the bands supported by the UE, and that are defined in the earliest version of TS 36.101 [42] that includes all UE supported bands. Yes No 32 Undefined +NOTE: The column FDD/ TDD diff indicates if the UE is allowed to signal different values for FDD and TDD. + + +Table B.1-1a: Definitions of feature group indicators +Index of indicator (bit number) Definition +(description of the supported functionality, if indicator set to one) Notes If indicated "Yes" the feature shall be implemented and successfully tested for this version of the specification FDD/ TDD diff 33 (leftmost bit) Inter-RAT ANR features for UTRAN FDD including: +- Inter-RAT periodical measurement reporting where triggerType is set to periodical and purpose is set to reportStrongestCellsForSON +- Inter-RAT periodical measurement reporting where triggerType is set to periodical and purpose is set to reportCGI - can only be set to 1 if the UE has set bit number 5 and bit number 22 to 1. + Yes 34 Inter-RAT ANR features for GERAN including: +- Inter-RAT periodical measurement reporting where triggerType is set to periodical and purpose is set to reportStrongestCells +- Inter-RAT periodical measurement reporting where triggerType is set to periodical and purpose is set to reportCGI - can only be set to 1 if the UE has set bit number 5 and bit number 23 to 1. + Yes 35 Inter-RAT ANR features for 1xRTT including: +- Inter-RAT periodical measurement reporting where triggerType is set to periodical and purpose is set to reportStrongestCellsForSON +- Inter-RAT periodical measurement reporting where triggerType is set to periodical and purpose is set to reportCGI - can only be set to 1 if the UE has set bit number 5 and bit number 24 to 1. + Yes 36 Inter-RAT ANR features for HRPD including: +- Inter-RAT periodical measurement reporting where triggerType is set to periodical and purpose is set to reportStrongestCellsForSON +- Inter-RAT periodical measurement reporting where triggerType is set to periodical and purpose is set to reportCGI - can only be set to 1 if the UE has set bit number 5 and bit number 26 to 1. + Yes 37 Inter-RAT ANR features for UTRAN TDD including: +- Inter-RAT periodical measurement reporting where triggerType is set to periodical and purpose is set to reportStrongestCellsForSON +- Inter-RAT periodical measurement reporting where triggerType is set to periodical and purpose is set to reportCGI - can only be set to 1 if the UE has set bit number 5 and at least one of the bit number 22 (for UEs supporting only UTRA TDD) or the bit number 39 to 1. Yes 38 - EUTRA RRC_CONNECTED to UTRA TDD CELL_DCH PS handover, if the UE supports both UTRAN FDD and UTRAN TDD - can only be set to 1 if the UE has set bit number 39 to 1 Yes 39 - UTRAN TDD measurements, reporting and measurement reporting event B2 in E-UTRA connected mode, if the UE supports both UTRAN FDD and UTRAN TDD Yes 40 - EUTRA RRC_CONNECTED to UTRA TDD CELL_DCH CS handover, if the UE supports both UTRAN FDD and UTRAN TDD - related to SR-VCC +- can only be set to 1 if the UE has set bit number 38 to 1 Yes 41 Measurement reporting event: Event B1 – Neighbour > threshold for UTRAN FDD, if the UE supports UTRAN FDD and has set bit number 22 to 1 Yes for FDD, unless UE has set bit number 15 to 1 Yes 42 Undefined 43 Undefined 44 Undefined 45 Undefined 46 Undefined 47 Undefined 48 Undefined 49 Undefined 50 Undefined 51 Undefined 52 Undefined 53 Undefined 54 Undefined 55 Undefined 56 Undefined 57 Undefined 58 Undefined 59 Undefined 60 Undefined 61 Undefined 62 Undefined 63 Undefined 64 Undefined +NOTE: The column FDD/ TDD diff indicates if the UE is allowed to signal different values for FDD and TDD. + +Clarification for mobility from EUTRAN and inter-frequency handover within EUTRAN +There are several feature groups related to mobility from E-UTRAN and inter-frequency handover within EUTRAN. The description of these features is based on the assumption that we have 5 main "functions" related to mobility from E-UTRAN: +A. Support of measurements and cell reselection procedure in idle mode +B. Support of RRC release with redirection procedure in connected mode +C. Support of Network Assisted Cell Change in connected mode +D. Support of measurements and reporting in connected mode +E. Support of handover procedure in connected mode +All functions can be applied for mobility to Inter-frequency to EUTRAN, GERAN, UTRAN, CDMA2000 HRPD and CDMA2000 1xRTT except for function C) which is only applicable for mobility to GERAN. Table B.1-2 below summarises the mobility functions that are supported based on the UE capability signaling (band support) and the setting of the feature group support indicators. +Table B.1-2: Mobility from E-UTRAN +Feature GERAN UTRAN HRPD 1xRTT EUTRAN A. Measurements and cell reselection procedure in E-UTRA idle mode Supported if GERAN band support is indicated Supported if UTRAN band support is indicated Supported if CDMA2000 HRPD band support is indicated Supported if CDMA2000 1xRTT band support is indicated Supported for supported bands B. RRC release with blind redirection procedure in E-UTRA connected mode Supported if GERAN band support is indicated Supported if UTRAN band support is indicated Supported if CDMA2000 HRPD band support is indicated Supported if CDMA2000 1xRTT band support is indicated Supported for supported bands C. Cell Change Order (with or without) Network Assisted Cell Change) in E-UTRA connected mode Group 10 N.A. N.A N.A N.A. D. Inter-frequency/RAT measurements, reporting and measurement reporting event B2 (for inter-RAT) in E-UTRA connected mode Group 23 Group 22/39 Group 26 Group 24 Group 25 E. Inter-frequency/RAT handover procedure in E-UTRA connected mode Group 9 (GSM_connected handover) +Separate UE capability bit defined in TS 36.306 for PS handover Group 8/38 (PS handover) or Group 27/40 (SRVCC handover) Group 12 Group 11 Group 13 (within FDD or TDD) +Group 30 (between FDD and TDD) +In case measurements and reporting function is not supported by UE, the network may still issue the mobility procedures redirection (B) and CCO (C) in a blind fashion. +B.2 CSG support +In this release of the protocol, it is mandatory for the UE to support a minimum set of CSG functionality consisting of: +- Identifying whether a cell is CSG or not; +- Ignoring CSG cells in cell selection/reselection. +Additional CSG functionality in AS, i.e. the requirement to detect and camp on CSG cells when the "CSG whitelist" is available or when manual CSG selection is triggered by the user, are related to the corresponding NAS features. This additional AS functionality consists of: +- Manual CSG selection; +- Autonomous CSG search; +- Implicit priority handling for cell reselection with CSG cells. +It is possible that this additional CSG functionality in AS is not supported or tested in early UE implementations. +Note that since the above AS features relate to idle mode operations, the capability support is not signalled to the network. For these reasons, no "feature group indicator" is assigned to this feature to indicate early support in Rel-8. + +Annex C (normative): Release 10 AS feature handling +C.1 Feature group indicators +This annex contains the definitions of the bits in field featureGroupIndRel10. +In this release of the protocol, the UE shall include the field featureGroupIndRel10 in the IE UE-EUTRA-Capability-v1020-IEs. All the functionalities defined within the field featureGroupIndRel10 defined in Table C.1-1 are mandatory for the UE, if the related capability (spatial multiplexing in UL, PDSCH transmission mode 9, carrier aggregation, handover to EUTRA, or RAT) is also supported. For a specific indicator, if all functionalities for a feature group listed in Table C.1-1 have been implemented and tested, the UE shall set the indicator as one (1), else (i.e. if any one of the functionalities in a feature group listed in Table C.1-1 have not been implemented or tested), the UE shall set the indicator as zero (0). +The UE shall set all indicators that correspond to RATs not supported by the UE as zero (0). +The UE shall set all indicators, which do not have a definition in Table C.1-1, as zero (0). +If the optional field featureGroupIndRel10 is not included by a UE of a future release, the network may assume that all features, listed in Table C.1-1 and deployed in the network, have been implemented and tested by the UE. +The indexing in Table C.1-1 starts from index 101, which is the leftmost bit in the field featureGroupIndRel10. +Table C.1-1: Definitions of feature group indicators +Index of indicator Definition +(description of the supported functionality, if indicator set to one) Notes If indicated "Yes" the feature shall be implemented and successfully tested for this version of the specification FDD/ TDD diff 101 (leftmost bit) - DMRS with OCC (orthogonal cover code) and SGH (sequence group hopping) disabling - if the UE supports two or more layers for spatial multiplexing in UL, this bit shall be set to 1. No 102 - Trigger type 1 SRS (aperiodic SRS) transmission (Up to X ports) + +NOTE: X = number of supported layers on given band Yes 103 - PDSCH transmission mode 9 when up to 4 CSI reference signal ports are configured - for Category 8 UEs, this bit shall be set to 1. Yes 104 - PDSCH transmission mode 9 for TDD when 8 CSI reference signal ports are configured - if the UE does not support TDD, this bit is irrelevant (capability signalling exists for FDD for this feature), and this bit shall be set to 0. +- for Category 8 UEs, this bit shall be set to 1. No 105 - Periodic CQI/PMI/RI reporting on PUCCH: Mode 2-0 – UE selected subband CQI without PMI, when PDSCH transmission mode 9 is configured +- Periodic CQI/PMI/RI reporting on PUCCH: Mode 2-1 – UE selected subband CQI with single PMI, when PDSCH transmission mode 9 and up to 4 CSI reference signal ports are configured - this bit can be set to 1 only if indices 2 (Table B.1-1) and 103 are set to 1. Yes 106 - Periodic CQI/PMI/RI/PTI reporting on PUCCH: Mode 2-1 – UE selected subband CQI with single PMI, when PDSCH transmission mode 9 and 8 CSI reference signal ports are configured - this bit can be set to 1 only if the UE supports PDSCH transmission mode 9 with 8 CSI reference signal ports (i.e., for TDD, if index 104 is set to 1, and for FDD, if tm9-With-8Tx-FDD-r10 is set to ‘supported’) and if index 2 (Table B.1-1) is set to 1. Yes 107 - Aperiodic CQI/PMI/RI reporting on PUSCH: Mode 2-0 – UE selected subband CQI without PMI, when PDSCH transmission mode 9 is configured +- Aperiodic CQI/PMI/RI reporting on PUSCH: Mode 2-2 – UE selected subband CQI with multiple PMI, when PDSCH transmission mode 9 and up to 4 CSI reference signal ports are configured - this bit can be set to 1 only if indices 1 (Table B.1-1) and 103 are set to 1. Yes 108 - Aperiodic CQI/PMI/RI reporting on PUSCH: Mode 2-2 – UE selected subband CQI with multiple PMI, when PDSCH transmission mode 9 and 8 CSI reference signal ports are configured - this bit can be set to 1 only if the UE supports PDSCH transmission mode 9 with 8 CSI reference signal ports (i.e., for TDD, if index 104 is set to 1, and for FDD, if tm9-With-8Tx-FDD-r10 is set to ‘supported’) and if index 1 (Table B.1-1) is set to 1. Yes 109 - Periodic CQI/PMI/RI reporting on PUCCH Mode 1-1, submode 1 - this bit can be set to 1 only if the UE supports PDSCH transmission mode 9 with 8 CSI reference signal ports (i.e., for TDD, if index 104 is set to 1, and for FDD, if tm9-With-8Tx-FDD-r10 is set to ‘supported’). Yes 110 - Periodic CQI/PMI/RI reporting on PUCCH Mode 1-1, submode 2 - this bit can be set to 1 only if the UE supports PDSCH transmission mode 9 with 8 CSI reference signal ports (i.e., for TDD, if index 104 is set to 1, and for FDD, if tm9-With-8Tx-FDD-r10 is set to ‘supported’). Yes 111 - Measurement reporting trigger Event A6 - this bit can be set to 1 only if the UE supports carrier aggregation. Yes 112 - SCell addition within the Handover to EUTRA procedure - this bit can be set to 1 only if the UE supports carrier aggregation and the Handover to EUTRA procedure. Yes 113 - Trigger type 0 SRS (periodic SRS) transmission on X Serving Cells + +NOTE: X = number of supported component carriers in a given band combination - this bit can be set to 1 only if the UE supports carrier aggregation in UL. Yes 114 - Reporting of both UTRA CPICH RSCP and Ec/N0 in a Measurement Report - this bit can be set to 1 only if index 22 (Table B.1-1) is set to 1. No 115 - time domain ICIC RLM/RRM measurement subframe restriction for the serving cell +- time domain ICIC RRM measurement subframe restriction for neighbour cells +- time domain ICIC CSI measurement subframe restriction Yes 116 - Relative transmit phase continuity for spatial multiplexing in UL - this bit can be set to 1 only if the UE supports two or more layers for spatial multiplexing in UL. Yes 117 Undefined 118 Undefined 119 Undefined 120 Undefined 121 Undefined 122 Undefined 123 Undefined 124 Undefined 125 Undefined 126 Undefined 127 Undefined 128 Undefined 129 Undefined 130 Undefined 131 Undefined 132 Undefined +NOTE: The column FDD/ TDD diff indicates if the UE is allowed to signal different values for FDD and TDD. + + +Annex D (informative): +Descriptive background information +D.1 Signalling of Multiple Frequency Band Indicators (Multiple FBI) +D.1.1 Mapping between frequency band indicator and multiple frequency band indicator +This subclause describes the use of the Multiple Frequency Band Indicator (MFBI) lists and the E-UTRA frequency bands in SystemInformationBlockType1 by means of an example as shown in Figure D.1.1-1. In this example: +- E-UTRAN cell belongs to band B90 and also bands B6, B7, B91, and B92. +- E-UTRAN uses B64 to indicate the presence of B90 in freqBandIndciator-v9e0. +- For the MFBI list of this cell, E-UTRAN uses B64 in MultiBAndInfoList to indicate the position and priority of the bands in MultiBandInfoList-v9e0. +- The UE, after reading SystemInformationBlockType1, generates an MFBI list with priority of B91, B6, B92, and B7. The UE applies the first listed band which it supports. + +Figure D.1.1-1: Mapping of frequency bands to MultiBandInfoList/MultiBandInfoList-v9e0 +D.1.2 Mapping between inter-frequency neighbour list and multiple frequency band indicator +This subclause describes the use of the Multiple Frequency Band Indicator (MFBI) lists and the E-UTRA frequencies signalled in SystemInformationBlockType5 by means of an example as shown in Figure D.1.2-1. In this example: +- E-UTRAN includes 4 frequencies: the bands associated with f1 and f4 belong to bands lower than 64; the bands associated with f2 and f3 belong to bands larger than 64. The reserved EARFCN value of 65535 is used to indicate the presence of ARFCN-ValueEUTRA-v9e0. +- The band associated with f1 has two overlapping bands, B1 and B2 (lower than 64); the band associated with f2 has one overlapping band, B91; the bands associated with f3 has four overlapping bands B3, B4, B92, and B93; the band associated with f4 does not have overlapping bands. +- E-UTRAN includes 4 lists in both interFreqCarrierFreqList-v8h0 and interFreqCarrierFreqList-v9e0 and ensure the order of the lists is matching. Each list corresponds to one EARFCN and contains up to 8 bands. The first list corresponds to f1, the second list corresponds to f2, and so on. The grey lists mean not including MultiBandInfoList or MultiBandInfoList-v9e0, i.e. the corresponding EARFCN does not have any overlapping frequency bands in MultiBandInfoList or MultiBandInfoList-v9e0. + +Figure D.1.2-1: Mapping of EARFCNs to MultiBandInfoList/MultiBandInfoList-v9e0 +D.1.3 Mapping between UTRA FDD frequency list and multiple frequency band indicator +This subclause describes the use of the Multiple Frequency Band Indicator (MFBI) lists and the UTRA FDD frequencies signalled in SystemInformationBlockType6 by means of an example as shown in Figure D.1.3-1. In this example: +- E-UTRA includes 4 UTRAN FDD frequencies. +- The bands associated with f1 and f4 have no overlapping bands. The band associated f2 has two overlapping bands, B1 and B2. The band associated with f3 has one overlapping band, B3. +- E-UTRA include 4 lists in carrierFreqListUTRA-FDD-v8h0 with the first and fourth entry not including MultiBandInfoList. + + +Figure D.1.3-1: Mapping of UARFCNs to MultiBandInfoList +Annex E (informative): +Change history + +Change history Date TSG # TSG Doc. CR Rev Subject/Comment Old New 12/2007 RP-38 RP-070920 - Approved at TSG-RAN #38 and placed under Change Control 1.0.0 8.0.0 03/2008 RP-39 RP-080163 0001 4 CR to 36.331 with Miscellaneous corrections 8.0.0 8.1.0 03/2008 RP-39 RP-080164 0002 2 CR to 36.331 to convert RRC to agreed ASN.1 format 8.0.0 8.1.0 05/2008 RP-40 RP-080361 0003 1 CR to 36.331 on Miscellaneous clarifications/ corrections 8.1.0 8.2.0 09/2008 RP-41 RP-080693 0005 - CR on Miscellaneous corrections and clarifications 8.2.0 8.3.0 12/2008 RP-42 RP-081021 0006 - Miscellaneous corrections and clarifications 8.3.0 8.4.0 03/2009 RP-43 RP-090131 0007 - Correction to the Counter Check procedure 8.4.0 8.5.0 RP-43 RP-090131 0008 - CR to 36.331-UE Actions on Receiving SIB11 8.4.0 8.5.0 RP-43 RP-090131 0009 1 Spare usage on BCCH 8.4.0 8.5.0 RP-43 RP-090131 0010 - Issues in handling optional IE upon absence in GERAN NCL 8.4.0 8.5.0 RP-43 RP-090131 0011 - CR to 36.331 on Removal of useless RLC re-establishment at RB release 8.4.0 8.5.0 RP-43 RP-090131 0012 1 Clarification to RRC level padding at PCCH and BCCH 8.4.0 8.5.0 RP-43 RP-090131 0013 - Removal of Inter-RAT message 8.4.0 8.5.0 RP-43 RP-090131 0014 - Padding of the SRB-ID for security input 8.4.0 8.5.0 RP-43 RP-090131 0015 - Validity of ETWS SIB 8.4.0 8.5.0 RP-43 RP-090131 0016 1 Configuration of the Two-Intervals-SPS 8.4.0 8.5.0 RP-43 RP-090131 0017 - Corrections on Scaling Factor Values of Qhyst 8.4.0 8.5.0 RP-43 RP-090131 0018 1 Optionality of srsMaxUppts 8.4.0 8.5.0 RP-43 RP-090131 0019 - CR for discussion on field name for common and dedicated IE 8.4.0 8.5.0 RP-43 RP-090131 0020 - Corrections to Connected mode mobility 8.4.0 8.5.0 RP-43 RP-090131 0021 - Clarification regarding the measurement reporting procedure 8.4.0 8.5.0 RP-43 RP-090131 0022 1 Corrections on s-Measure 8.4.0 8.5.0 RP-43 RP-090131 0023 1 R1 of CR0023 (R2-091029) on combination of SPS and TTI bundling for TDD 8.4.0 8.5.0 RP-43 RP-090131 0024 - L3 filtering for path loss measurements 8.4.0 8.5.0 RP-43 RP-090131 0025 1 S-measure handling for reportCGI 8.4.0 8.5.0 RP-43 RP-090131 0026 1 Measurement configuration clean up 8.4.0 8.5.0 RP-43 RP-090131 0027 - Alignment of measurement quantities for UTRA 8.4.0 8.5.0 RP-43 RP-090131 0028 - CR to 36.331 on L1 parameters ranges alignment 8.4.0 8.5.0 RP-43 RP-090131 0029 - Default configuration for transmissionMode 8.4.0 8.5.0 RP-43 RP-090131 0030 - CR to 36.331 on RRC Parameters for MAC, RLC and PDCP 8.4.0 8.5.0 RP-43 RP-090131 0031 1 CR to 36.331 - Clarification on Configured PRACH Freq Offset 8.4.0 8.5.0 RP-43 RP-090131 0032 - Clarification on TTI bundling configuration 8.4.0 8.5.0 RP-43 RP-090131 0033 1 Update of R2-091039 on Inter-RAT UE Capability 8.4.0 8.5.0 RP-43 RP-090133 0034 - Feature Group Support Indicators 8.4.0 8.5.0 RP-43 RP-090131 0036 - Corrections to RLF detection 8.4.0 8.5.0 RP-43 RP-090131 0037 - Indication of Dedicated Priority 8.4.0 8.5.0 RP-43 RP-090131 0038 2 Security Clean up 8.4.0 8.5.0 RP-43 RP-090131 0039 - Correction of TTT value range 8.4.0 8.5.0 RP-43 RP-090131 0040 - Correction on CDMA measurement result IE 8.4.0 8.5.0 RP-43 RP-090131 0041 1 Clarification of Measurement Reporting 8.4.0 8.5.0 RP-43 RP-090131 0042 - Spare values in DL and UL Bandwidth in MIB and SIB2 8.4.0 8.5.0 RP-43 RP-090131 0044 1 Clarifications to System Information Block Type 8 8.4.0 8.5.0 RP-43 RP-090131 0045 - Reception of ETWS secondary notification 8.4.0 8.5.0 RP-43 RP-090131 0046 1 Validity time for ETWS message Id and Sequence No 8.4.0 8.5.0 RP-43 RP-090131 0047 - CR for Timers and constants values used during handover to E-UTRA 8.4.0 8.5.0 RP-43 RP-090131 0048 - Inter-RAT Security Clarification 8.4.0 8.5.0 RP-43 RP-090131 0049 - CR to 36.331 on consistent naming of 1xRTT identifiers 8.4.0 8.5.0 RP-43 RP-090131 0050 - Capturing RRC behavior regarding NAS local release 8.4.0 8.5.0 RP-43 RP-090131 0051 - Report CGI before T321 expiry and UE null reporting 8.4.0 8.5.0 RP-43 RP-090131 0052 - System Information and 3 hour validity 8.4.0 8.5.0 RP-43 RP-090131 0053 1 Inter-Node AS Signalling 8.4.0 8.5.0 RP-43 RP-090131 0054 - Set of values for the parameter "messagePowerOffsetGroupB" 8.4.0 8.5.0 RP-43 RP-090131 0055 - CR to paging reception for ETWS capable UEs in RRC_CONNECTED 8.4.0 8.5.0 RP-43 RP-090131 0056 1 CR for CSG related items in 36.331 8.4.0 8.5.0 RP-43 RP-090131 0057 1 SRS common configuration 8.4.0 8.5.0 RP-43 RP-090131 0058 - RRC processing delay 8.4.0 8.5.0 RP-43 RP-090131 0059 - CR for HNB Name 8.4.0 8.5.0 RP-43 RP-090131 0060 3 Handover to EUTRA delta configuration 8.4.0 8.5.0 RP-43 RP-090131 0063 - Delivery of Message Identifier and Serial Number to upper layers for ETWS 8.4.0 8.5.0 RP-43 RP-090131 0066 - Clarification on the maximum size of cell lists 8.4.0 8.5.0 RP-43 RP-090131 0067 - Missing RRC messages in 'Protection of RRC messages' 8.4.0 8.5.0 RP-43 RP-090131 0069 1 Clarification on NAS Security Container 8.4.0 8.5.0 RP-43 RP-090131 0071 - Extension of range of CQI/PMI configuration index 8.4.0 8.5.0 RP-43 RP-090131 0072 1 Access barring alleviation in RRC connection establishment 8.4.0 8.5.0 RP-43 RP-090367 0077 6 Corrections to feature group support indicators 8.4.0 8.5.0 RP-43 RP-090131 0078 - CR from email discussion to capture DRX and TTT handling 8.4.0 8.5.0 RP-43 RP-090131 0079 1 Need Code handling on BCCH messages 8.4.0 8.5.0 RP-43 RP-090131 0080 - Unification of T300 and T301 and removal of miscallaneous FFSs 8.4.0 8.5.0 RP-43 RP-090131 0084 1 Proposed CR modifying the code-point definitions of neighbourCellConfiguration 8.4.0 8.5.0 RP-43 RP-090131 0087 2 Remove Redundant Optionality in SIB8 8.4.0 8.5.0 RP-43 RP-090131 0089 - Corrections to the generic error handling 8.4.0 8.5.0 RP-43 RP-090131 0090 - Configurability of T301 8.4.0 8.5.0 RP-43 RP-090131 0091 1 Correction related to TTT 8.4.0 8.5.0 RP-43 RP-090131 0095 - CR for 36.331 on SPS-config 8.4.0 8.5.0 RP-43 RP-090131 0096 2 CR for Deactivation of periodical measurement 8.4.0 8.5.0 RP-43 RP-090131 0099 2 SMC and reconfiguration 8.4.0 8.5.0 RP-43 RP-090131 0101 - TDD handover 8.4.0 8.5.0 RP-43 RP-090131 0102 - Corrections to system information acquisition 8.4.0 8.5.0 RP-43 RP-090131 0106 - Some Corrections and Clarifications to 36.331 8.4.0 8.5.0 RP-43 RP-090131 0109 - Clarification on the Maximum number of ROHC context sessions parameter 8.4.0 8.5.0 RP-43 RP-090131 0110 - Transmission of rrm-Config at Inter-RAT Handover 8.4.0 8.5.0 RP-43 RP-090131 0111 1 Use of SameRefSignalsInNeighbor parameter 8.4.0 8.5.0 RP-43 RP-090131 0112 - Default serving cell offset for measurement event A3 8.4.0 8.5.0 RP-43 RP-090131 0114 - dl-EARFCN missing in HandoverPreparationInformation 8.4.0 8.5.0 RP-43 RP-090131 0115 - Cleanup of references to 36.101 8.4.0 8.5.0 RP-43 RP-090131 0117 - Correction to the value range of UE-Categories 8.4.0 8.5.0 RP-43 RP-090131 0122 1 Correction on RRC connection re-establishment 8.4.0 8.5.0 RP-43 RP-090131 0124 - Performing Measurements to report CGI for CDMA2000 8.4.0 8.5.0 RP-43 RP-090131 0125 - CDMA2000-SystemTimeInfo in VarMeasurementConfiguration 8.4.0 8.5.0 RP-43 RP-090131 0126 - UE Capability Information for CDMA2000 1xRTT 8.4.0 8.5.0 RP-43 RP-090131 0127 - CDMA2000 related editorial changes 8.4.0 8.5.0 RP-43 RP-090131 0128 - Draft CR to 36.331 on State mismatch recovery at re-establishment 8.4.0 8.5.0 RP-43 RP-090131 0129 1 Draft CR to 36.331 on Renaming of AC barring related IEs 8.4.0 8.5.0 RP-43 RP-090131 0130 2 Draft CR to 36.331 on Inheriting of dedicated priorities at inter-RAT reselection 8.4.0 8.5.0 RP-43 RP-090131 0135 - Proposed CR to 36.331 Description alignment for paging parameter, nB 8.4.0 8.5.0 RP-43 RP-090131 0139 2 Miscellaneous corrections and clarifications resulting from ASN.1 review 8.4.0 8.5.0 RP-43 RP-090131 0141 1 Correction regarding Redirection Information fo GERAN 8.4.0 8.5.0 RP-43 RP-090131 0142 - Further ASN.1 review related issues 8.4.0 8.5.0 RP-43 RP-090131 0143 - Periodic measurements 8.4.0 8.5.0 RP-43 RP-090131 0144 1 Further analysis on code point "OFF" for ri-ConfigIndex 8.4.0 8.5.0 RP-43 RP-090131 0145 1 Adding and deleting same measurement or configuration in one message 8.4.0 8.5.0 RP-43 RP-090131 0147 - Corrections to IE dataCodingScheme in SIB11 8.4.0 8.5.0 RP-43 RP-090131 0148 - Clarification on Mobility from E-UTRA 8.4.0 8.5.0 RP-43 RP-090131 0149 - 36.331 CR related to “not applicable” 8.4.0 8.5.0 RP-43 RP-090131 0150 1 UE radio capability transfer 8.4.0 8.5.0 RP-43 RP-090131 0151 - CR to 36.331 on value of CDMA band classes 8.4.0 8.5.0 RP-43 RP-090131 0152 - Corrections to DRB modification 8.4.0 8.5.0 RP-43 RP-090131 0153 - Correction to presence condition for pdcp-config 8.4.0 8.5.0 RP-43 RP-090131 0155 - TDD HARQ-ACK feedback mode 8.4.0 8.5.0 RP-43 RP-090275 0157 - Corrections regarding use of carrierFreq for CDMA (SIB8) and GERAN (measObject) 8.4.0 8.5.0 RP-43 RP-090321 0156 1 Sending of GERAN SI/PSI information at Inter-RAT Handover 8.4.0 8.5.0 RP-43 RP-090339 0158 - Clarification of CSG support 8.4.0 8.5.0 06/2009 RP-44 RP-090516 0159 - Octet alignment of VarShortMAC-Input 8.5.0 8.6.0 RP-44 RP-090516 0160 3 Minor corrections to the feature grouping 8.5.0 8.6.0 RP-44 RP-090516 0161 - Security clarification 8.5.0 8.6.0 RP-44 RP-090516 0162 1 Sending of GERAN SI/PSI information at Inter-RAT Handover 8.5.0 8.6.0 RP-44 RP-090516 0163 1 Correction of UE measurement model 8.5.0 8.6.0 RP-44 RP-090516 0164 - Restricting the reconfiguration of UM RLC SN field size 8.5.0 8.6.0 RP-44 RP-090516 0165 1 36.331 CR on Clarification on cell change order from GERAN to E-UTRAN 8.5.0 8.6.0 RP-44 RP-090516 0166 - 36.331 CR - Handling of expired TAT and failed D-SR 8.5.0 8.6.0 RP-44 RP-090516 0167 1 Proposed CR to 36.331 Clarification on mandatory information in AS-Config 8.5.0 8.6.0 RP-44 RP-090516 0168 2 Miscellaneous small corrections 8.5.0 8.6.0 RP-44 RP-090516 0173 - Clarification on the basis of delta signalling 8.5.0 8.6.0 RP-44 RP-090516 0177 - CR on Alignment of CCCH and DCCH handling of missing mandatory field 8.5.0 8.6.0 RP-44 RP-090516 0180 2 Handling of Measurement Context During HO Preparation 8.5.0 8.6.0 RP-44 RP-090516 0181 - Clarification of key-eNodeB-Star in AdditionalReestabInfo 8.5.0 8.6.0 RP-44 RP-090516 0182 1 UE Capability Transfer 8.5.0 8.6.0 RP-44 RP-090516 0186 1 Clarification regarding mobility from E-UTRA in-between SMC and SRB2/DRB setup 8.5.0 8.6.0 RP-44 RP-090516 0188 1 Correction and completion of specification conventions 8.5.0 8.6.0 RP-44 RP-090516 0195 2 RB combination in feature group indicator 8.5.0 8.6.0 RP-44 RP-090516 0196 1 CR for need code for fields in mobilityControlInfo 8.5.0 8.6.0 RP-44 RP-090497 0197 - Alignment of pusch-HoppingOffset with 36.211 8.5.0 8.6.0 RP-44 RP-090570 0198 - Explicit srb-Identity values for SRB1 and SRB2 8.5.0 8.6.0 RP-44 RP-090516 0199 - Removing use of defaultValue for mac-MainConfig 8.5.0 8.6.0 09/2009 RP-45 RP-090906 0200 - Proposed update of the feature grouping 8.6.0 8.7.0 RP-45 RP-090906 0201 - Clarification on measurement object configuration for serving frequency 8.6.0 8.7.0 RP-45 RP-090906 0202 - Correction regarding SRVCC 8.6.0 8.7.0 RP-45 RP-090906 0203 - Indication of DRB Release during HO 8.6.0 8.7.0 RP-45 RP-090906 0204 1 Correction regarding application of dedicated resource configuration upon handover 8.6.0 8.7.0 RP-45 RP-090906 0205 - REL-9 protocol extensions in RRC 8.6.0 8.7.0 RP-45 RP-090906 0206 - In-order delivery of NAS PDUs at RRC connection reconfiguration 8.6.0 8.7.0 RP-45 RP-090906 0207 - Correction on Threshold of Measurement Event 8.6.0 8.7.0 RP-45 RP-090906 0210 - Clarification on dedicated resource of RA procedure 8.6.0 8.7.0 RP-45 RP-090906 0213 1 Cell barring when MasterInformationBlock or SystemInformationBlock1 is missing 8.6.0 8.7.0 RP-45 RP-090915 0218 - Security threat with duplicate detection for ETWS 8.6.0 8.7.0 RP-45 RP-090906 0224 - Clarification on supported handover types in feature grouping 8.6.0 8.7.0 RP-45 RP-090906 0250 1 Handling of unsupported / non-comprehended frequency band and emission requirement 8.6.0 8.7.0 RP-45 RP-090906 0251 - RB combinations in feature group indicator 20 8.6.0 8.7.0 09/2009 RP-45 RP-090934 0220 1 Introduction of Per-QCI radio link failure timers (option 1) 8.7.0 9.0.0 RP-45 RP-090926 0222 - Null integrity protection algorithm 8.7.0 9.0.0 RP-45 RP-090926 0223 - Emergency Support Indicator in BCCH 8.70 9.0.0 RP-45 RP-090934 0230 2 CR to 36.331 for Enhanced CSFB to 1xRTT with concurrent PS handover 8.7.0 9.0.0 RP-45 RP-090934 0243 - REL-9 on Miscellaneous editorial corrections 8.7.0 9.0.0 RP-45 RP-090934 0247 - Periodic CQI/PMI/RI masking 8.7.0 9.0.0 RP-45 RP-090933 0252 - Introduction of CMAS 8.7.0 9.0.0 12/2009 RP-46 RP-091346 0253 1 (Rel-9)-clarification on the description of redirectedCarrierInfo 9.0.0 9.1.0 RP-46 RP-091346 0254 1 Adding references to RRC processing delay for inter-RAT mobiltiy messages 9.0.0 9.1.0 RP-46 RP-091314 0256 - Alignment of srs-Bandwidth with 36.211 9.0.0 9.1.0 RP-46 RP-091341 0257 5 Baseline CR capturing eMBMS agreements 9.0.0 9.1.0 RP-46 RP-091343 0258 3 Capturing agreements on inbound mobility 9.0.0 9.1.0 RP-46 RP-091314 0260 - Clarification of preRegistrationZoneID/secondaryPreRegistrationZoneID 9.0.0 9.1.0 RP-46 RP-091346 0261 - Clarification on NCC for IRAT HO 9.0.0 9.1.0 RP-46 RP-091314 0263 - Clarification on P-max 9.0.0 9.1.0 RP-46 RP-091314 0265 1 Clarification on the definition of maxCellMeas 9.0.0 9.1.0 RP-46 RP-091346 0266 - Correction of q-RxLevMin reference in SIB7 9.0.0 9.1.0 RP-46 RP-091346 0267 - Correction on SPS-Config field descriptions 9.0.0 9.1.0 RP-46 RP-091346 0268 1 correction on the definition of CellsTriggeredList 9.0.0 9.1.0 RP-46 RP-091345 0269 - Correction relating to CMAS UE capability 9.0.0 9.1.0 RP-46 RP-091314 0271 1 Feature grouping bit for SRVCC handover 9.0.0 9.1.0 RP-46 RP-091314 0272 1 Correction and completion of extension guidelines 9.0.0 9.1.0 RP-46 RP-091344 0273 - RACH optimization Stage-3 9.0.0 9.1.0 RP-46 RP-091345 0274 - Stage 3 correction for CMAS 9.0.0 9.1.0 RP-46 RP-091346 0276 1 SR prohibit mechanism for UL SPS 9.0.0 9.1.0 RP-46 RP-091346 0277 - Parameters used for enhanced 1xRTT CS fallback 9.0.0 9.1.0 RP-46 RP-091346 0281 - Correction on UTRAN UE Capability transfer 9.0.0 9.1.0 RP-46 RP-091346 0285 - Maximum number of CDMA2000 neighbors in SIB8 9.0.0 9.1.0 RP-46 RP-091340 0288 1 Introduction of UE Rx-Tx Time Difference measurement 9.0.0 9.1.0 RP-46 RP-091346 0297 - Introduction of SR prohibit timer 9.0.0 9.1.0 RP-46 RP-091346 0298 - Remove FFSs from RAN2 specifications 9.0.0 9.1.0 RP-46 RP-091343 0301 1 Renaming Allowed CSG List (36.331 Rel-9) 9.0.0 9.1.0 RP-46 RP-091346 0305 - Re-introduction of message segment discard time 9.0.0 9.1.0 RP-46 RP-091346 0306 1 Application of ASN.1 extension guidelines 9.0.0 9.1.0 RP-46 RP-091346 0309 1 Support for Dual Radio 1xCSFB 9.0.0 9.1.0 RP-46 RP-091346 0311 - Shorter SR periodicity 9.0.0 9.1.0 RP-46 RP-091342 0316 - CR to 36.331 for Introduction of Dual Layer Transmission 9.0.0 9.1.0 RP-46 RP-091343 0318 1 Draft CR to 36.331 on Network ordered SI reporting 9.0.0 9.1.0 RP-46 RP-091346 0322 - UE e1xcsfb capabilities correction 9.0.0 9.1.0 RP-46 RP-091331 0327 1 Clarification on coding of ETWS related IEs 9.0.0 9.1.0 03/2010 RP-47 RP-100285 0331 - Clarification of CGI reporting 9.1.0 9.2.0 RP-47 RP-100305 0332 - Clarification on MCCH change notification 9.1.0 9.2.0 RP-47 RP-100308 0333 - Clarification on measurement for serving cell only 9.1.0 9.2.0 RP-47 RP-100306 0334 - Clarification on proximity indication configuraiton in handover to E-UTRA 9.1.0 9.2.0 RP-47 RP-100308 0335 - Clarification on radio resource configuration in handover to E-UTRA procedure 9.1.0 9.2.0 RP-47 RP-100308 0336 - Clarification on UE maximum transmission power 9.1.0 9.2.0 RP-47 RP-100308 0337 - Correction to field descriptions of UE-EUTRA-Capability 9.1.0 9.2.0 RP-47 RP-100305 0338 - Correction to MBMS scheduling terminology 9.1.0 9.2.0 RP-47 RP-100308 0339 - Corrections to SIB8 9.1.0 9.2.0 RP-47 RP-100306 0340 - CR 36.331 R9 for Unifying SI reading for ANR and inbound mobility 9.1.0 9.2.0 RP-47 RP-100308 0341 1 CR to 36.331 for 1xRTT pre-registration information in SIB8 9.1.0 9.2.0 RP-47 RP-100305 0342 - CR to 36.331 on corrections for MBMS 9.1.0 9.2.0 RP-47 RP-100306 0343 1 CR to 36.331 on CSG identity reporting 9.1.0 9.2.0 RP-47 RP-100308 0344 2 CR to 36.331 on Optionality of Rel-9 UE features 9.1.0 9.2.0 RP-47 RP-100308 0345 1 CR to 36.331 on Service Specific Acces Control (SSAC) 9.1.0 9.2.0 RP-47 RP-100308 0346 - Introduction of power-limited device indication in UE capability. 9.1.0 9.2.0 RP-47 RP-100305 0347 - Missing agreement in MCCH change notification. 9.1.0 9.2.0 RP-47 RP-100305 0348 1 Corrections related to MCCH change notification and value ranges 9.1.0 9.2.0 RP-47 RP-100306 0349 2 Prohibit timer for proximity indication 9.1.0 9.2.0 RP-47 RP-100306 0350 1 Proximity Indication after handover and re-establishment 9.1.0 9.2.0 RP-47 RP-100305 0351 - Specifying the exact mapping of notificationIndicator in SIB13 to PDCCH bits 9.1.0 9.2.0 RP-47 RP-100308 0352 - Corrections out of ASN.1 review scope 9.1.0 9.2.0 RP-47 RP-100308 0353 - CR on clarification of system information change 9.1.0 9.2.0 RP-47 RP-100285 0358 - Measurement Result CDMA2000 Cell 9.1.0 9.2.0 RP-47 RP-100304 0361 - Correction on the range of UE Rx-Tx time difference measurement result 9.1.0 9.2.0 RP-47 RP-100305 0362 - Small clarifications regarding MBMS 9.1.0 9.2.0 RP-47 RP-100308 0363 - Introduction of REL-9 indication within field accessStratumRelease 9.1.0 9.2.0 RP-47 RP-100306 0364 - Extending mobility description to cover inbound mobility 9.1.0 9.2.0 RP-47 RP-100308 0365 1 Clarification regarding enhanced CSFB to 1XRTT 9.1.0 9.2.0 RP-47 RP-100308 0368 - Handling of dedicated RLF timers 9.1.0 9.2.0 RP-47 RP-100305 0370 1 Clarification on UE's behavior of receiving MBMS service 9.1.0 9.2.0 RP-47 RP-100305 0371 - MBMS Service ID and Session ID 9.1.0 9.2.0 RP-47 RP-100305 0372 1 Inclusion of non-MBSFN region length in SIB13 9.1.0 9.2.0 RP-47 RP-100309 0374 1 CR to 36.331 for e1xCSFB access class barring parameters in SIB8 9.1.0 9.2.0 RP-47 RP-100308 0375 - Multiple 1xRTT/HRPD target cells in MobilityFromEUTRACommand 9.1.0 9.2.0 RP-47 RP-100308 0376 - Independent support indicators for Dual-Rx CSFB and S102 in SIB8 9.1.0 9.2.0 RP-47 RP-100285 0378 - Clarification on DRX StartOffset for TDD 9.1.0 9.2.0 RP-47 RP-100308 0379 1 Miscellaneous corrections from REL-9 ASN.1 review 9.1.0 9.2.0 RP-47 RP-100308 0381 - Need codes and missing conventions 9.1.0 9.2.0 RP-47 RP-100308 0383 1 Introduction of Full Configuration Handover for handling earlier eNB releases 9.1.0 9.2.0 RP-47 RP-100308 0385 - Clarification to SFN reference in RRC 9.1.0 9.2.0 RP-47 RP-100308 0390 - RSRP and RSRQ based Thresholds 9.1.0 9.2.0 RP-47 RP-100189 0392 3 Redirection enhancements to GERAN 9.1.0 9.2.0 RP-47 RP-100308 0398 - Cell reselection enhancements CR for 36.331 9.1.0 9.2.0 RP-47 RP-100307 0401 3 CR on UE-originated RLFreporting for MRO SON use case 9.1.0 9.2.0 RP-47 RP-100309 0402 3 CR to 36.331 on Redirection enhancements to UTRAN 9.1.0 9.2.0 RP-47 RP-100306 0403 2 Proximity status indication handling at mobility 9.1.0 9.2.0 RP-47 RP-100305 0404 - Upper layer aspect of MBSFN area id 9.1.0 9.2.0 RP-47 RP-100308 0405 - Redirection for enhanced 1xRTT CS fallback with concurrent PSHO 9.1.0 9.2.0 RP-47 RP-100301 0406 - Avoiding interleaving transmission of CMAS notifications 9.1.0 9.2.0 RP-47 RP-100308 0407 1 Introduction of UE GERAN DTM capability indicator 9.1.0 9.2.0 RP-47 RP-100381 0408 2 Introducing provisions for late ASN.1 corrections 9.1.0 9.2.0 RP-47 RP-100245 0411 - Correction/ alignment of REL-9 UE capability signalling 9.1.0 9.2.0 06/2010 RP-48 RP-100553 0412 - Clarification for mapping between warning message and CB-data 9.2.0 9.3.0 RP-48 RP-100556 0413 - Clarification of radio link failure related actions 9.2.0 9.3.0 RP-48 RP-100554 0414 - Clarification on UE actions upon leaving RRC_CONNECTED 9.2.0 9.3.0 RP-48 RP-100553 0415 - Correction on CMAS system information 9.2.0 9.3.0 RP-48 RP-100554 0416 1 Corrections to MBMS 9.2.0 9.3.0 RP-48 RP-100536 0418 - Decoding of unknown future extensions 9.2.0 9.3.0 RP-48 RP-100556 0419 1 Miscellaneous small corrections and clarifications 9.2.0 9.3.0 RP-48 RP-100551 0420 - Prohibit timer for proximity indication 9.2.0 9.3.0 RP-48 RP-100556 0421 - RLF report for MRO correction 9.2.0 9.3.0 RP-48 RP-100546 0423 1 Missing UTRA bands in IRAT-ParametersUTRA-FDD 9.2.0 9.3.0 RP-48 RP-100556 0424 - Correction on handling of dedicated RLF timers 9.2.0 9.3.0 RP-48 RP-100556 0431 1 Protection of RRC messages 9.2.0 9.3.0 RP-48 RP-100556 0433 - Handling missing Essential system information 9.2.0 9.3.0 RP-48 RP-100551 0434 1 Clarification on UMTS CSG detected cell reporting in LTE 9.2.0 9.3.0 RP-48 RP-100556 0436 - Introducing provisions for late corrections 9.2.0 9.3.0 RP-48 RP-100556 0437 - Clarification regarding / alignment of REL-9 UE capabilities 9.2.0 9.3.0 09/2010 RP-49 RP-100845 0440 - Correction to 3GPP2 reference for interworking with cdma2000 1x 9.3.0 9.4.0 RP-49 RP-100851 0441 - Clarification on UL handover preparation transfer 9.3.0 9.4.0 RP-49 RP-100851 0442 1 Clarifications regarding fullConfiguration 9.3.0 9.4.0 RP-49 RP-100851 0443 - Clarifications regarding handover to E-UTRAN 9.3.0 9.4.0 RP-49 RP-100854 0444 - Correction on the table of conditionally mandatory Release 9 features 9.3.0 9.4.0 RP-49 RP-100851 0445 - Corrections to TS36.331 on MeasConfig IE 9.3.0 9.4.0 RP-49 RP-100853 0446 2 CR to 36.331 on clarification for MBMS PTM RBs 9.3.0 9.4.0 RP-49 RP-100851 0447 - Introduction of late corrections container for E-UTRA UE capabilities 9.3.0 9.4.0 RP-49 RP-100851 0448 - Renaming of containers for late non-critical extensions 9.3.0 9.4.0 RP-49 RP-100851 0452 - Clarifications Regarding Redirection from LTE 9.3.0 9.4.0 RP-49 RP-100845 0456 - Description of multi-user MIMO functionality in feature group indicator table 9.3.0 9.4.0 RP-49 RP-100845 0458 - Correct the PEMAX_H to PEMAX 9.3.0 9.4.0 RP-49 RP-100851 0460 - Clarification for feature group indicator bit 11 9.3.0 9.4.0 RP-49 RP-100851 0465 1 Clarification of FGI setting for inter-RAT features not supported by the UE 9.3.0 9.4.0 RP-49 RP-101008 0475 1 FGI settings in Rel-9 9.3.0 9.4.0 12/2010 RP-50 RP-101197 0483 - Clarification on Meaning of FGI Bits 9.4.0 9.5.0 RP-50 RP-101197 0485 - Clarification regarding reconfiguration of the quantityConfig 9.4.0 9.5.0 RP-50 RP-101210 0486 1 Corrections to the presence of IE regarding DRX and CQI 9.4.0 9.5.0 RP-50 RP-101210 0493 - The field descriptions of MeasObjectEUTRA 9.4.0 9.5.0 RP-50 RP-101197 0498 1 Clarification of FGI settings non ANR periodical measurement reporting 9.4.0 9.5.0 RP-50 RP-101209 0500 - Corrections to RLF Report 9.4.0 9.5.0 RP-50 RP-101206 0519 1 T321 timer fix 9.4.0 9.5.0 RP-50 RP-101197 0524 - Restriction of AC barring parameter setting 9.4.0 9.5.0 RP-50 RP-101210 0525 - Removal of SEQUENCE OF SEQUENCE in UEInformationResponse 9.4.0 9.5.0 RP-50 RP-101197 0526 1 Clarification regarding default configuration value N/A 9.4.0 9.5.0 RP-50 RP-101431 0532 - Splitting FGI bit 3 9.4.0 9.5.0 RP-50 RP-101183 0476 4 36.331 CR on Introduction of Minimization of Drive Tests 9.4.0 10.0.0 RP-50 RP-101293 0477 4 AC-Barring for Mobile Originating CSFB call 9.4.0 10.0.0 RP-50 RP-101214 0478 - Addition of UE-EUTRA-Capability descriptions 9.4.0 10.0.0 RP-50 RP-101214 0481 - Clarification on Default Configuration for CQI-ReportConfig 9.4.0 10.0.0 RP-50 RP-101215 0487 - CR to 36.331 adding e1xCSFB support for dual Rx/Tx UE 9.4.0 10.0.0 RP-50 RP-101227 0488 1 Introduction of Carrier Aggregation and UL/ DL MIMO 9.4.0 10.0.0 RP-50 RP-101228 0489 1 Introduction of relays in RRC 9.4.0 10.0.0 RP-50 RP-101214 0490 1 Priority indication for CSFB with re-direction 9.4.0 10.0.0 RP-50 RP-101214 0491 - SIB Size Limitations 9.4.0 10.0.0 RP-50 RP-101214 0513 - Combined Quantity Report for IRAT measurement of UTRAN 9.4.0 10.0.0 RP-50 RP-101214 0527 1 UE power saving and Local release 9.4.0 10.0.0 RP-50 RP-101429 0530 1 Inclusion of new UE categories in Rel-10 9.4.0 10.0.0 03/2011 RP-51 RP-110282 0533 - 36331_CRxxx_Protection of Logged Measurements Configuration 10.0.0 10.1.0 RP-51 RP-110294 0534 1 Stage-3 CR for MBMS enhancement 10.0.0 10.1.0 RP-51 RP-110282 0535 - Clean up MDT-related text 10.0.0 10.1.0 RP-51 RP-110282 0536 - Clear MDT configuration and logs when the UE is not registered 10.0.0 10.1.0 RP-51 RP-110280 0537 - Correction to the field description of nB 10.0.0 10.1.0 RP-51 RP-110289 0538 - CR on impact on UP with remove&add approach_2 10.0.0 10.1.0 RP-51 RP-110282 0539 - CR to 36.331 on corrections for MDT 10.0.0 10.1.0 RP-51 RP-110290 0543 - Introduction of CA/MIMO capability signalling and measurement capability signalling in CA 10.0.0 10.1.0 RP-51 RP-110282 0544 - MDT PDU related clarifications 10.0.0 10.1.0 RP-51 RP-110282 0545 - Correction on release of logged measurement configuration while in another RAT 10.0.0 10.1.0 RP-51 RP-110289 0546 - Miscellaneous Corrections for CA Running RRC CR 10.0.0 10.1.0 RP-51 RP-110280 0547 1 Miscellaneous small clarifications and corrections 10.0.0 10.1.0 RP-51 RP-110293 0548 4 Necessary changes for RLF reporting enhancements 10.0.0 10.1.0 RP-51 RP-110282 0549 1 Memory size for logged measurements capable UE 10.0.0 10.1.0 RP-51 RP-110289 0550 - Parameters confusion of non-CA and CA configurations 10.0.0 10.1.0 RP-51 RP-110272 0553 - Presence condition for cellSelectionInfo-v920 in SIB1 10.0.0 10.1.0 RP-51 RP-110282 0554 1 Removal of MDT configuration at T330 expiry 10.0.0 10.1.0 RP-51 RP-110289 0556 1 Signalling aspects of existing LTE-A parameters 10.0.0 10.1.0 RP-51 RP-110280 0557 1 Some Corrections on measurement 10.0.0 10.1.0 RP-51 RP-110291 0558 - Stored system information for RNs 10.0.0 10.1.0 RP-51 RP-110291 0559 - Support of Integrity Protection for Relay 10.0.0 10.1.0 RP-51 RP-110290 0561 2 Updates of L1 parameters for CA and UL/DL MIMO 10.0.0 10.1.0 RP-51 RP-110291 0571 1 Note for Dedicated SIB for RNs 10.0.0 10.1.0 RP-51 RP-110272 0579 - Correction to cs-fallbackIndicator field description 10.0.0 10.1.0 RP-51 RP-110289 0580 - Clarification to the default configuration of sCellDeactivationTimer 10.0.0 10.1.0 RP-51 RP-110289 0581 - Miscellaneous corrections to TS 36.331 on Carrier Aggregation 10.0.0 10.1.0 RP-51 RP-110280 0584 - Correction of configuration description in SIB2 10.0.0 10.1.0 RP-51 RP-110265 0587 - Clarification of band indicator in handover from E-UTRAN to GERAN 10.0.0 10.1.0 RP-51 RP-110285 0588 1 36331_CRxxxx Support of Delay Tolerant access requests 10.0.0 10.1.0 RP-51 RP-110292 0590 - Update of R2-110807 on CSI measurement resource restriction for time domain ICIC 10.0.0 10.1.0 RP-51 RP-110292 0591 - Update of R2-110821 on RRM/RLM resource restriction for time domain ICIC 10.0.0 10.1.0 RP-51 RP-110290 0592 - Corrections on UE capability related parameters 10.0.0 10.1.0 RP-51 RP-110282 0596 - Validity time for location information in Immediate MDT 10.0.0 10.1.0 RP-51 RP-110280 0597 - CR to 36.331 adding UE capability indicator for dual Rx/Tx e1xCSFB 10.0.0 10.1.0 RP-51 RP-110289 0598 - Miscellaneous corrections to CA 10.0.0 10.1.0 RP-51 RP-110280 0599 - Further correction to combined measurement report of UTRAN 10.0.0 10.1.0 RP-51 RP-110280 0600 - Correction to the reference of ETWS 10.0.0 10.1.0 RP-51 RP-110269 0602 1 Introduction of OTDOA inter-freq RSTD measurement indication procedure 10.0.0 10.1.0 RP-51 RP-110280 0603 - Correction of use of RRCConnectionReestablishment message for contention resolution 10.0.0 10.1.0 RP-51 RP-110282 0604 - CR to 36.331 on MDT neighbour cell measurements logging 10.0.0 10.1.0 RP-51 RP-110272 0609 - Minor ASN.1 corrections for the UEInformationResponse message 10.0.0 10.1.0 RP-51 RP-110280 0613 - Clarification regarding dedicated RLF timers and constants 10.0.0 10.1.0 RP-51 RP-110282 0615 - Release of Logged Measurement Configuration 10.0.0 10.1.0 RP-51 RP-110280 0616 - Some corrections on TS 36.331 10.0.0 10.1.0 RP-51 RP-110280 0623 - AC barring procedure clean up 10.0.0 10.1.0 RP-51 RP-110282 0624 - Counter proposal to R2-110826 on UE capabilities for MDT 10.0.0 10.1.0 RP-51 RP-110280 0628 1 UE information report for RACH 10.0.0 10.1.0 RP-51 RP-110289 0629 2 Measurement on the deactivated SCells 10.0.0 10.1.0 RP-51 RP-110282 0632 1 Trace configuration paremeters for Logged MDT 10.0.0 10.1.0 RP-51 RP-110282 0635 - Clarification on stop condition for timer T3330 10.0.0 10.1.0 RP-51 RP-110282 0637 - User consent for MDT 10.0.0 10.1.0 RP-51 RP-110280 0638 - Correction on the range of CQI resource index 10.0.0 10.1.0 RP-51 RP-110272 0640 1 Small corrections to ETWS & CMAS system information 10.0.0 10.1.0 RP-51 RP-110290 0641 1 UE capability signaling structure w.r.t carrier aggregation, MIMO and measurement gap 10.0.0 10.1.0 RP-51 RP-110289 0642 1 Normal PHR and the multiple uplink carriers 10.0.0 10.1.0 RP-51 RP-110280 0643 1 Corrections to TS36.331 on SIB2 handling 10.0.0 10.1.0 RP-51 RP-110280 0644 1 Adding a Power Management indication in PHR 10.0.0 10.1.0 RP-51 RP-110289 0646 1 Clarification for CA and TTI bundling in RRC 10.0.0 10.1.0 RP-51 RP-110443 0648 1 Updates to FGI settings 10.0.0 10.1.0 06/2011 RP-52 RP-110836 0651 - Add MBMS counting procedure to processing delay requirement for RRC procedure Section 11.2 10.1.0 10.2.0 RP-52 RP-110830 0653 - Add pre Rel-10 procedures to processing delay requirement for RRC procedure Section 11.2 10.1.0 10.2.0 RP-52 RP-110847 0654 1 Addition of a specific reference for physical configuration fields 10.1.0 10.2.0 RP-52 RP-110839 0656 - Clarification of inter-frequency RSTD measurement indication procedure 10.1.0 10.2.0 RP-52 RP-110830 0658 - Clarification of optionality of UE features without capability 10.1.0 10.2.0 RP-52 RP-110839 0660 - Clarification on the definition of maxCellBlack 10.1.0 10.2.0 RP-52 RP-110839 0661 - Clarification on upper layer requested connection release 10.1.0 10.2.0 RP-52 RP-110850 0662 3 Clarification regarding eICIC measurements 10.1.0 10.2.0 RP-52 RP-110839 0663 - CR for s-measure handling 10.1.0 10.2.0 RP-52 RP-110851 0664 1 CR on clarification of RLF Report in Carrier Aggregation 10.1.0 10.2.0 RP-52 RP-110830 0669 - FGI bit for handover between LTE FDD/TDD 10.1.0 10.2.0 RP-52 RP-110847 0670 2 Further updates on L1 parameters 10.1.0 10.2.0 RP-52 RP-110839 0671 2 General error handling for extension fields 10.1.0 10.2.0 RP-52 RP-110851 0672 2 Additional information for RLF report 10.1.0 10.2.0 RP-52 RP-110843 0673 - Introduction of TCE ID for logged MDT 10.1.0 10.2.0 RP-52 RP-110670 0674 4 Miscellaneous corrections (related to review in preparation for ASN.1 freeze) 10.1.0 10.2.0 RP-52 RP-110843 0675 - PLMN check for MDT logging 10.1.0 10.2.0 RP-52 RP-110839 0677 - UE actions upon leaving RRC_CONNECTED 10.1.0 10.2.0 RP-52 RP-110847 0678 - Clarification on bandEUTRA-r10 and supportedBandListEUTRA 10.1.0 10.2.0 RP-52 RP-110837 0679 - Updated value range for the Extended Wait Timer 10.1.0 10.2.0 RP-52 RP-110839 0680 1 Value range of DRX-InactivityTimer 10.1.0 10.2.0 RP-52 RP-110828 0693 1 Correction for SR-VCC and QCI usage 10.1.0 10.2.0 RP-52 RP-110847 0694 - Restructuring of CQI-ReportConfig-r10 10.1.0 10.2.0 RP-52 RP-110839 0695 2 Correction on DL allocations in MBSFN subframes 10.1.0 10.2.0 RP-52 RP-110850 0700 - Reference SFN for MeasSubframePattern 10.1.0 10.2.0 RP-52 RP-110846 0701 - Clarifications to CA related field descriptions 10.1.0 10.2.0 RP-52 RP-110847 0702 - Corrections to codebookSubsetRestriction and SRS parameters 10.1.0 10.2.0 RP-52 RP-110834 0704 - Corrections to the handling of ri-ConfigIndex for TM9 10.1.0 10.2.0 RP-52 RP-110715 0710 2 UE capabilities for Rel-10 LTE features with eICIC measurement restrictions as FGI (Alt.1) 10.1.0 10.2.0 RP-52 RP-110839 0713 - CR to 36.331 on redirected utra-TDD carrier frequency 10.1.0 10.2.0 RP-52 RP-110839 0714 - Explicit AS signalling for mapped PTMSI/GUTI 10.1.0 10.2.0 RP-52 RP-110847 0718 - Counter proposal for Updates of mandatory information in AS-Config 10.1.0 10.2.0 RP-52 RP-110839 0719 - CR for Reconfiguration of discardTimer in PDCP-Config 10.1.0 10.2.0 RP-52 RP-110847 0723 - On the missing multiplicity of UE capability parameters 10.1.0 10.2.0 RP-52 RP-110830 0735 - Radio frame alignment of CSA and MSP 10.1.0 10.2.0 RP-52 RP-110847 0740 - Reconfiguration involving critically extended IEs (using fullFieldConfig i.e. option 2) 10.1.0 10.2.0 RP-52 RP-110839 0744 - Counter proposal to R2-112753 on CR to remove CSG Identity validity limited to CSG cell 10.1.0 10.2.0 RP-52 RP-110839 0746 1 Increase of prioritisedBitRate 10.1.0 10.2.0 RP-52 RP-110847 0747 - CA and MIMO Capabilities in LTE Rel-10 10.1.0 10.2.0 09/2011 RP-53 RP-111297 0752 - TS36.331 Correction 10.2.0 10.3.0 RP-53 RP-111297 0754 - maxNumberROHC-ContextSessions when no ROHC profile is supported 10.2.0 10.3.0 RP-53 RP-111280 0757 - Correction to Subframe Allocation End in PMCH-Info 10.2.0 10.3.0 RP-53 RP-111288 0761 - Correction on PUCCH configuration for Un interface 10.2.0 10.3.0 RP-53 RP-111297 0762 - Miscellaneous corrections to 36.331 10.2.0 10.3.0 RP-53 RP-111278 0764 2 36.331 correction on CSG identity validity to allow introduction of CSG RAN sharing 10.2.0 10.3.0 RP-53 RP-111283 0770 2 AdditionalSpectrumEmissions in CA 10.2.0 10.3.0 RP-53 RP-111297 0773 - CR to 36.331 on Small correction of PHR parameter 10.2.0 10.3.0 RP-53 RP-111283 0775 2 Clarifications to P-max on CA 10.2.0 10.3.0 RP-53 RP-111280 0784 - Clarification on for which subframes signalling MCS applies 10.2.0 10.3.0 RP-53 RP-111283 0792 - Corrections in RRC 10.2.0 10.3.0 RP-53 RP-111297 0793 - Replace the tables with exception list in 10.5 AS-Config 10.2.0 10.3.0 RP-53 RP-111297 0796 - Corrections to the field descriptions 10.2.0 10.3.0 RP-53 RP-111283 0798 - Configuration of simultaneous PUCCH&PUSCH 10.2.0 10.3.0 RP-53 RP-111297 0806 - Corrections to release of csi-SubframePatternConfig and cqi-Mask 10.2.0 10.3.0 RP-53 RP-111272 0810 - GERAN SI format for cell change order&PS handover& enhanced redirection to GERAN 10.2.0 10.3.0 RP-53 RP-111283 0811 - Corrections to PUCCH-Config field descriptions 10.2.0 10.3.0 12/2011 RP-54 RP-111711 0812 1 Clarification of PCI range for CSG cells 10.3.0 10.4.0 RP-54 RP-111716 0813 - Clarifications to Default Radio Configurations 10.3.0 10.4.0 RP-54 RP-111716 0814 1 Corrections to enhancedDualLayerTDD 10.3.0 10.4.0 RP-54 RP-111716 0815 - Miscellaneous small corrections 10.3.0 10.4.0 RP-54 RP-111716 0816 1 Correction on notation of SRS transmission comb 10.3.0 10.4.0 RP-54 RP-111706 0823 1 36.331 CR SPS reconfiguration 10.3.0 10.4.0 RP-54 RP-111716 0827 2 Clarification of list sizes in measurement configuration stored by UE 10.3.0 10.4.0 RP-54 RP-111706 0835 - Clarification of the event B1 and ANR related FGI bits 10.3.0 10.4.0 RP-54 RP-111714 0840 1 Clarification on MBSFN and measurement resource restrictions 10.3.0 10.4.0 RP-54 RP-111706 0845 - Clarification on parallel message transmission upon connection re-establishment 10.3.0 10.4.0 03/2012 RP-55 RP-120326 0855 1 Limiting MBMS counting responses to within the PLMN 10.4.0 10.5.0 RP-55 RP-120321 0857 - CR to 36.331 on cdma2000 band classes and references 10.4.0 10.5.0 RP-55 RP-120326 0862 1 Clarification on MBSFN and measurement resource restrictions 10.4.0 10.5.0 RP-55 RP-120325 0871 - On SIB10/11 Reception Timing 10.4.0 10.5.0 RP-55 RP-120326 0875 1 Clarification on MBMS counting for uncipherable services 10.4.0 10.5.0 RP-55 RP-120325 0876 - Minor correction regarding limited service access on non-CSG-member cell 10.4.0 10.5.0 RP-55 RP-120326 0894 - Time to keep RLF Reporting logs 10.4.0 10.5.0 RP-55 RP-120356 0895 1 Introducing means to signal different FDD/TDD Capabilities/FGIs for Dual-xDD UE 10.4.0 10.5.0 RP-55 RP-120321 0899 - Clarification on SRB2 resumption upon connection re-establishment (parallel message transmission) 10.4.0 10.5.0 RP-55 RP-120321 0900 1 Duplicated ASN.1 naming correction 10.4.0 10.5.0 06/2012 RP-56 RP-120805 0909 - SPS Reconfiguration 10.5.0 10.6.0 RP-56 RP-120805 0912 1 Change in Scheduling Information for ETWS 10.5.0 10.6.0 RP-56 RP-120807 0914 - Clarification of mch-SchedulingPeriod configuration 10.5.0 10.6.0 RP-56 RP-120808 0916 1 Change in Scheduling Information for CMAS 10.5.0 10.6.0 RP-56 RP-120814 0919 1 Introducing means to signal different REL-10 FDD/TDD Capabilities/FGIs for Dual-xDD UE 10.5.0 10.6.0 RP-56 RP-120812 0920 1 Clarification on setting of dedicated NS value for CA by E-UTRAN 10.5.0 10.6.0 RP-56 RP-120808 0931 - T321 value for UTRA SI acquisition 10.5.0 10.6.0 RP-56 RP-120813 0957 1 Korean Public Alert System (KPAS) in relation to CMAS 10.5.0 10.6.0 RP-56 RP-120812 0969 1 Introduction of supported bandwidth combinations for CA 10.5.0 10.6.0 RP-56 RP-120734 0970 1 Introduction of multiple frequency band indicator 10.5.0 10.6.0 09/2012 RP-57 RP-121395 1003 - CR on scell measurement cycle 10.6.0 10.7.0 RP-57 RP-121395 1005 1 CR on measurement report 10.6.0 10.7.0 RP-57 RP-121359 1007 - Voice support Capabilities 10.6.0 10.7.0 RP-57 RP-121361 1012 - Differentiating UTRAN modes in FGIs 10.6.0 10.7.0 RP-57 RP-121279 1059 - Correction for PUCCH/SRS Release 10.6.0 10.7.0 12/2012 RP-58 RP-121933 1062 - Correction related to differentiating UTRAN modes in FGIs 10.7.0 10.8.0 RP-58 RP-121936 1064 - Processing delay for RRCConnectionReconfiguration 10.7.0 10.8.0 RP-58 RP-121922 1084 - Clarification for Multiple Frequency Band Indicators feature 10.7.0 10.8.0 RP-58 RP-121924 1088 1 Moving the TM5 capability 10.7.0 10.8.0 RP-58 RP-121936 1126 1 Measurement reporting of Scells 10.7.0 10.8.0 RP-58 RP-121922 1174 1 Introducing further UE aspects regarding multi band cells 10.7.0 10.8.0 03/2013 RP-59 RP-130231 1192 1 Mandatory supporting of B1 measurement to UMTS FDD (FGI bit 15) 10.8.0 10.9.0 RP-59 RP-130233 1214 2 The presence of bandcombination for non-CA capable UEs 10.8.0 10.9.0 RP-59 RP-130228 1219 - Invalidation of ETWS with security feature 10.8.0 10.9.0 RP-59 RP-130225 1223 - Invalid measurement configuration with different (E)ARFCN 10.8.0 10.9.0 RP-59 RP-130227 1234 1 Correcting further UE aspects regarding multi band cells 10.8.0 10.9.0 RP-59 RP-130225 1240 - Clarification on EARFCN signalling in Mobility control info 10.8.0 10.9.0 RP-59 RP-130237 1257 - Extension of FBI and EARFCN 10.8.0 10.9.0 RP-59 RP-130234 1261 1 Inter RAT inconsistency RLF report 10.8.0 10.9.0 RP-59 RP-130414 1264 1 Mandating the settings of FGI bit 14, 27 and 28 to true 10.8.0 10.9.0 06/2013 RP-60 RP-130805 1266 - Clarification on the redirection to UTRA-TDD frequency in case of CSFB High Priority 10.9.0 10.10.0 RP-60 RP-130804 1268 1 Correction of wrong reference 10.9.0 10.10.0 RP-60 RP-130804 1281 - measCycleSCell upon SCell configuration 10.9.0 10.10.0 RP-60 RP-130802 1297 - Security key generation in case of MFBI 10.9.0 10.10.0 RP-60 RP-130804 1314 1 Clarification on UE CA capability 10.9.0 10.10.0 RP-60 RP-130805 1322 - Clarification on the configuration of the extended PHR 10.9.0 10.10.0 RP-60 RP-130805 1326 1 Clarifications on SystemTimeInfoCDMA2000 IE 10.9.0 10.10.0 RP-60 RP-130804 1327 - Clarification on inclusion of non-CA band combinations 10.9.0 10.10.0 RP-60 RP-130818 1328 1 MFBI aspects for dedicated signalling 10.9.0 10.10.0 09/2013 RP-61 RP-131311 1338 - Correction on the first subframe of the measurement gap 10.10.0 10.11.0 12/2013 RP-62 RP-131986 1365 - Introduction of capability bit for UTRA MFBI 10.11.0 10.12.0 RP-62 RP-131984 1367 1 Addition of inter-frequency RSTD measurement capability indicator for OTDOA 10.11.0 10.12.0 RP-62 RP-131989 1369 - Clarification on supportedBand 10.11.0 10.12.0 RP-62 RP-131991 1377 - measResultLastServCell for SON-HOF report 10.11.0 10.12.0 RP-62 RP-131991 1381 1 Correction on presence of codebookSubsetRestriction-r10 10.11.0 10.12.0 RP-62 RP-131991 1388 - Clarification on eRedirection to UMTS TDD with multiple UMTS TDD frequencies 10.11.0 10.12.0 RP-62 RP-131991 1394 1 Clarifications on Measurement 10.11.0 10.12.0 RP-62 RP-131984 1396 - Correction to InterFreqRSTDMeasurementIndication field descriptions 10.11.0 10.12.0 RP-62 RP-131984 1403 - Correction of Inter-frequency RSTD indication for multiple frequencies 10.11.0 10.12.0 06/2014 RP-64 RP-140869 1469 - Removal of comment line from EUTRA-UE-Variables imports 10.12.0 10.13.0 RP-64 RP-140871 1473 - Correction on measObjectList in VarMeasConfig 10.12.0 10.13.0 RP-64 RP-140873 1487 - ACK/NACK feedback mode on PUSCH 10.12.0 10.13.0 RP-64 RP-140871 1543 - Clarification of E-UTRA MFBI signalling 10.12.0 10.13.0 RP-64 RP-140871 1549 1 Inter-RAT ANR capability signalling in FGI33 when UE supports UTRA TDD only 10.12.0 10.13.0 RP-64 RP-140873 1552 1 Allowing TDD/FDD split for FGI111 and FGI112 10.12.0 10.13.0 09/2014 RP-65 RP-141494 1626 - FDD&TDD split for CA 10.13.0 10.14.0 RP-65 RP-141493 1609 1 Clarification for time-domain resource restriction pattern applicable to neighbour cell RSRQ measurements 10.13.0 10.14.0 RP-65 RP-141113 1634 - Mandating the FGI bit 31 to true 10.13.0 10.14.0 12/2014 RP-66 RP-142115 1657 - Correction of remaining TBD for Rel-10 FGIs 10.14.0 10.15.0 RP-66 RP-142113 1684 1 UE capability for modified MPR behavior 10.14.0 10.15.0 03/2015 RP-67 RP-150368 1780 - The absence of supportedMIMO-CapabilityUL-r10 10.15.0 10.16.0 RP-67 RP-150370 1748 - Clarification on CSI measurement subframe set 10.15.0 10.16.0 RP-67 RP-150370 1726 - Presence of codebookSubsetRestriction 10.15.0 10.16.0 06/2015 RP-68 RP-150916 1807 - CR on Aperiodic CSI Reporting for 1.4MHz cell 10.16.0 10.17.0 RP-68 RP-150917 1825 1 Correction to additionalSpectrumEmission 10.16.0 10.17.0 RP-68 RP-150917 1836 - Restriction to CA capability signalling 10.16.0 10.17.0 +Page 1 + + +3GPP TS 36.331 V10.17.0 (2015-06) +2 +Release 10 + + +3GPP + diff --git a/openair2/RRC/LITE/MESSAGES/asn1c/ASN1_files/36331-c60.txt b/openair2/RRC/LITE/MESSAGES/asn1c/ASN1_files/36331-c60.txt new file mode 100755 index 0000000000..172d8ae400 --- /dev/null +++ b/openair2/RRC/LITE/MESSAGES/asn1c/ASN1_files/36331-c60.txt @@ -0,0 +1,15949 @@ +3GPP TS 36.331 V12.6.0 (2015-06) +Technical Specification +3rd Generation Partnership Project; +Technical Specification Group Radio Access Network; +Evolved Universal Terrestrial Radio Access (E-UTRA); +Radio Resource Control (RRC); +Protocol specification +(Release 12) + + +The present document has been developed within the 3rd Generation Partnership Project (3GPP TM) and may be further elaborated for the purposes of 3GPP. +The present document has not been subject to any approval process by the 3GPP Organizational Partners and shall not be implemented. +This Specification is provided for future development work within 3GPP only. The Organizational Partners accept no liability for any use of this Specification. +Specifications and reports for implementation of the 3GPP TM system should be obtained via the 3GPP Organizational Partners' Publications Offices. + + + + + +Keywords +UMTS, radio + +3GPP +Postal address + +3GPP support office address +650 Route des Lucioles - Sophia Antipolis +Valbonne - FRANCE +Tel.: +33 4 92 94 42 00 Fax: +33 4 93 65 47 16 +Internet +http://www.3gpp.org + +Copyright Notification +No part may be reproduced except as authorized by written permission. +The copyright and the foregoing restriction extend to reproduction in all media. + +© 2015, 3GPP Organizational Partners (ARIB, ATIS, CCSA, ETSI, TSDSI, TTA, TTC). +All rights reserved. + +UMTS™ is a Trade Mark of ETSI registered for the benefit of its members +3GPP™ is a Trade Mark of ETSI registered for the benefit of its Members and of the 3GPP Organizational Partners +LTE™ is a Trade Mark of ETSI currently being registered for the benefit of its Members and of the 3GPP Organizational Partners +GSM® and the GSM logo are registered and owned by the GSM Association + + +Contents +Foreword 15 +1 Scope 16 +2 References 16 +3 Definitions, symbols and abbreviations 19 +3.1 Definitions 19 +3.2 Abbreviations 20 +4 General 22 +4.1 Introduction 22 +4.2 Architecture 23 +4.2.1 UE states and state transitions including inter RAT 23 +4.2.2 Signalling radio bearers 24 +4.3 Services 25 +4.3.1 Services provided to upper layers 25 +4.3.2 Services expected from lower layers 25 +4.4 Functions 25 +5 Procedures 27 +5.1 General 27 +5.1.1 Introduction 27 +5.1.2 General requirements 27 +5.2 System information 28 +5.2.1 Introduction 28 +5.2.1.1 General 28 +5.2.1.2 Scheduling 28 +5.2.1.3 System information validity and notification of changes 29 +5.2.1.4 Indication of ETWS notification 30 +5.2.1.5 Indication of CMAS notification 30 +5.2.1.6 Notification of EAB parameters change 30 +5.2.2 System information acquisition 31 +5.2.2.1 General 31 +5.2.2.2 Initiation 31 +5.2.2.3 System information required by the UE 31 +5.2.2.4 System information acquisition by the UE 32 +5.2.2.5 Essential system information missing 34 +5.2.2.6 Actions upon reception of the MasterInformationBlock message 34 +5.2.2.7 Actions upon reception of the SystemInformationBlockType1 message 34 +5.2.2.8 Actions upon reception of SystemInformation messages 35 +5.2.2.9 Actions upon reception of SystemInformationBlockType2 35 +5.2.2.10 Actions upon reception of SystemInformationBlockType3 35 +5.2.2.11 Actions upon reception of SystemInformationBlockType4 36 +5.2.2.12 Actions upon reception of SystemInformationBlockType5 36 +5.2.2.13 Actions upon reception of SystemInformationBlockType6 36 +5.2.2.14 Actions upon reception of SystemInformationBlockType7 36 +5.2.2.15 Actions upon reception of SystemInformationBlockType8 36 +5.2.2.16 Actions upon reception of SystemInformationBlockType9 37 +5.2.2.17 Actions upon reception of SystemInformationBlockType10 37 +5.2.2.18 Actions upon reception of SystemInformationBlockType11 37 +5.2.2.19 Actions upon reception of SystemInformationBlockType12 38 +5.2.2.20 Actions upon reception of SystemInformationBlockType13 38 +5.2.2.21 Actions upon reception of SystemInformationBlockType14 39 +5.2.2.22 Actions upon reception of SystemInformationBlockType15 39 +5.2.2.23 Actions upon reception of SystemInformationBlockType16 39 +5.2.2.24 Actions upon reception of SystemInformationBlockType17 39 +5.2.2.25 Actions upon reception of SystemInformationBlockType18 39 +5.2.2.26 Actions upon reception of SystemInformationBlockType19 39 +5.2.3 Acquisition of an SI message 40 +5.3 Connection control 40 +5.3.1 Introduction 40 +5.3.1.1 RRC connection control 40 +5.3.1.2 Security 41 +5.3.1.2a RN security 42 +5.3.1.3 Connected mode mobility 42 +5.3.2 Paging 44 +5.3.2.1 General 44 +5.3.2.2 Initiation 44 +5.3.2.3 Reception of the Paging message by the UE 44 +5.3.3 RRC connection establishment 45 +5.3.3.1 General 45 +5.3.3.1a Conditions for establishing RRC Connection for sidelink direct communication/ discovery 46 +5.3.3.2 Initiation 46 +5.3.3.3 Actions related to transmission of RRCConnectionRequest message 49 +5.3.3.4 Reception of the RRCConnectionSetup by the UE 49 +5.3.3.5 Cell re-selection while T300, T302, T303, T305 or T306 is running 50 +5.3.3.6 T300 expiry 51 +5.3.3.7 T302, T303, T305 or T306 expiry or stop 52 +5.3.3.8 Reception of the RRCConnectionReject by the UE 52 +5.3.3.9 Abortion of RRC connection establishment 53 +5.3.3.10 Handling of SSAC related parameters 53 +5.3.3.11 Access barring check 54 +5.3.3.12 EAB check 54 +5.3.4 Initial security activation 55 +5.3.4.1 General 55 +5.3.4.2 Initiation 56 +5.3.4.3 Reception of the SecurityModeCommand by the UE 56 +5.3.5 RRC connection reconfiguration 57 +5.3.5.1 General 57 +5.3.5.2 Initiation 57 +5.3.5.3 Reception of an RRCConnectionReconfiguration not including the mobilityControlInfo by the UE 57 +5.3.5.4 Reception of an RRCConnectionReconfiguration including the mobilityControlInfo by the UE (handover) 59 +5.3.5.5 Reconfiguration failure 62 +5.3.5.6 T304 expiry (handover failure) 62 +5.3.5.7 Void 64 +5.3.5.7a T307 expiry (SCG change failure) 64 +5.3.5.8 Radio Configuration involving full configuration option 64 +5.3.6 Counter check 65 +5.3.6.1 General 65 +5.3.6.2 Initiation 65 +5.3.6.3 Reception of the CounterCheck message by the UE 65 +5.3.7 RRC connection re-establishment 66 +5.3.7.1 General 66 +5.3.7.2 Initiation 67 +5.3.7.3 Actions following cell selection while T311 is running 67 +5.3.7.4 Actions related to transmission of RRCConnectionReestablishmentRequest message 68 +5.3.7.5 Reception of the RRCConnectionReestablishment by the UE 68 +5.3.7.6 T311 expiry 70 +5.3.7.7 T301 expiry or selected cell no longer suitable 70 +5.3.7.8 Reception of RRCConnectionReestablishmentReject by the UE 70 +5.3.8 RRC connection release 71 +5.3.8.1 General 71 +5.3.8.2 Initiation 71 +5.3.8.3 Reception of the RRCConnectionRelease by the UE 71 +5.3.8.4 T320 expiry 71 +5.3.9 RRC connection release requested by upper layers 72 +5.3.9.1 General 72 +5.3.9.2 Initiation 72 +5.3.10 Radio resource configuration 72 +5.3.10.0 General 72 +5.3.10.1 SRB addition/ modification 73 +5.3.10.2 DRB release 73 +5.3.10.3 DRB addition/ modification 74 +5.3.10.3a1 DC specific DRB addition or reconfiguration 74 +5.3.10.3a SCell release 76 +5.3.10.3b SCell addition/ modification 76 +5.3.10.3c PSCell addition or modification 76 +5.3.10.4 MAC main reconfiguration 77 +5.3.10.5 Semi-persistent scheduling reconfiguration 77 +5.3.10.6 Physical channel reconfiguration 77 +5.3.10.7 Radio Link Failure Timers and Constants reconfiguration 78 +5.3.10.8 Time domain measurement resource restriction for serving cell 78 +5.3.10.9 Other configuration 78 +5.3.10.10 SCG reconfiguration 79 +5.3.10.11 SCG dedicated resource configuration 81 +5.3.10.12 Reconfiguration SCG or split DRB by drb-ToAddModList 81 +5.3.10.13 Neighbour cell information reconfiguration 81 +5.3.10.14 Void 82 +5.3.10.15 Sidelink dedicated configuration 82 +5.3.11 Radio link failure related actions 82 +5.3.11.1 Detection of physical layer problems in RRC_CONNECTED 82 +5.3.11.2 Recovery of physical layer problems 83 +5.3.11.3 Detection of radio link failure 83 +5.3.12 UE actions upon leaving RRC_CONNECTED 85 +5.3.13 UE actions upon PUCCH/ SRS release request 85 +5.3.14 Proximity indication 86 +5.3.14.1 General 86 +5.3.14.2 Initiation 86 +5.3.14.3 Actions related to transmission of ProximityIndication message 86 +5.3.15 Void 87 +5.4 Inter-RAT mobility 87 +5.4.1 Introduction 87 +5.4.2 Handover to E-UTRA 87 +5.4.2.1 General 87 +5.4.2.2 Initiation 87 +5.4.2.3 Reception of the RRCConnectionReconfiguration by the UE 88 +5.4.2.4 Reconfiguration failure 89 +5.4.2.5 T304 expiry (handover to E-UTRA failure) 89 +5.4.3 Mobility from E-UTRA 90 +5.4.3.1 General 90 +5.4.3.2 Initiation 90 +5.4.3.3 Reception of the MobilityFromEUTRACommand by the UE 91 +5.4.3.4 Successful completion of the mobility from E-UTRA 92 +5.4.3.5 Mobility from E-UTRA failure 92 +5.4.4 Handover from E-UTRA preparation request (CDMA2000) 93 +5.4.4.1 General 93 +5.4.4.2 Initiation 93 +5.4.4.3 Reception of the HandoverFromEUTRAPreparationRequest by the UE 93 +5.4.5 UL handover preparation transfer (CDMA2000) 94 +5.4.5.1 General 94 +5.4.5.2 Initiation 94 +5.4.5.3 Actions related to transmission of the ULHandoverPreparationTransfer message 94 +5.4.5.4 Failure to deliver the ULHandoverPreparationTransfer message 94 +5.4.6 Inter-RAT cell change order to E-UTRAN 94 +5.4.6.1 General 94 +5.4.6.2 Initiation 95 +5.4.6.3 UE fails to complete an inter-RAT cell change order 95 +5.5 Measurements 95 +5.5.1 Introduction 95 +5.5.2 Measurement configuration 97 +5.5.2.1 General 97 +5.5.2.2 Measurement identity removal 98 +5.5.2.2a Measurement identity autonomous removal 98 +5.5.2.3 Measurement identity addition/ modification 98 +5.5.2.4 Measurement object removal 99 +5.5.2.5 Measurement object addition/ modification 99 +5.5.2.6 Reporting configuration removal 101 +5.5.2.7 Reporting configuration addition/ modification 101 +5.5.2.8 Quantity configuration 102 +5.5.2.9 Measurement gap configuration 102 +5.5.2.10 Discovery signals measurement timing configuration 102 +5.5.3 Performing measurements 103 +5.5.3.1 General 103 +5.5.3.2 Layer 3 filtering 105 +5.5.4 Measurement report triggering 105 +5.5.4.1 General 105 +5.5.4.2 Event A1 (Serving becomes better than threshold) 109 +5.5.4.3 Event A2 (Serving becomes worse than threshold) 109 +5.5.4.4 Event A3 (Neighbour becomes offset better than PCell/ PSCell) 110 +5.5.4.5 Event A4 (Neighbour becomes better than threshold) 110 +5.5.4.6 Event A5 (PCell/ PSCell becomes worse than threshold1 and neighbour becomes better than threshold2) 111 +5.5.4.6a Event A6 (Neighbour becomes offset better than SCell) 112 +5.5.4.7 Event B1 (Inter RAT neighbour becomes better than threshold) 113 +5.5.4.8 Event B2 (PCell becomes worse than threshold1 and inter RAT neighbour becomes better than threshold2) 113 +5.5.4.9 Event C1 (CSI-RS resource becomes better than threshold) 114 +5.5.4.10 Event C2 (CSI-RS resource becomes offset better than reference CSI-RS resource) 114 +5.5.5 Measurement reporting 115 +5.5.6 Measurement related actions 118 +5.5.6.1 Actions upon handover and re-establishment 118 +5.5.6.2 Speed dependant scaling of measurement related parameters 119 +5.5.7 Inter-frequency RSTD measurement indication 120 +5.5.7.1 General 120 +5.5.7.2 Initiation 120 +5.5.7.3 Actions related to transmission of InterFreqRSTDMeasurementIndication message 120 +5.6 Other 121 +5.6.1 DL information transfer 121 +5.6.1.1 General 121 +5.6.1.2 Initiation 121 +5.6.1.3 Reception of the DLInformationTransfer by the UE 121 +5.6.2 UL information transfer 121 +5.6.2.1 General 121 +5.6.2.2 Initiation 122 +5.6.2.3 Actions related to transmission of ULInformationTransfer message 122 +5.6.2.4 Failure to deliver ULInformationTransfer message 122 +5.6.3 UE capability transfer 122 +5.6.3.1 General 122 +5.6.3.2 Initiation 123 +5.6.3.3 Reception of the UECapabilityEnquiry by the UE 123 +5.6.4 CSFB to 1x Parameter transfer 125 +5.6.4.1 General 125 +5.6.4.2 Initiation 125 +5.6.4.3 Actions related to transmission of CSFBParametersRequestCDMA2000 message 125 +5.6.4.4 Reception of the CSFBParametersResponseCDMA2000 message 125 +5.6.5 UE Information 126 +5.6.5.1 General 126 +5.6.5.2 Initiation 126 +5.6.5.3 Reception of the UEInformationRequest message 126 +5.6.6 Logged Measurement Configuration 127 +5.6.6.1 General 127 +5.6.6.2 Initiation 128 +5.6.6.3 Reception of the LoggedMeasurementConfiguration by the UE 128 +5.6.6.4 T330 expiry 128 +5.6.7 Release of Logged Measurement Configuration 128 +5.6.7.1 General 128 +5.6.7.2 Initiation 128 +5.6.8 Measurements logging 129 +5.6.8.1 General 129 +5.6.8.2 Initiation 129 +5.6.9 In-device coexistence indication 131 +5.6.9.1 General 131 +5.6.9.2 Initiation 131 +5.6.9.3 Actions related to transmission of InDeviceCoexIndication message 132 +5.6.10 UE Assistance Information 133 +5.6.10.1 General 133 +5.6.10.2 Initiation 133 +5.6.10.3 Actions related to transmission of UEAssistanceInformation message 133 +5.6.11 Mobility history information 133 +5.6.11.1 General 133 +5.6.11.2 Initiation 134 +5.6.12 RAN-assisted WLAN interworking 134 +5.6.12.1 General 134 +5.6.12.2 Dedicated WLAN offload configuration 134 +5.6.12.3 WLAN offload RAN evaluation 134 +5.6.12.4 T350 expiry or stop 135 +5.6.12.5 Cell selection/ re-selection while T350 is running 135 +5.6.13 SCG failure information 135 +5.6.13.1 General 135 +5.6.13.2 Initiation 135 +5.6.13.3 Actions related to transmission of SCGFailureInformation message 136 +5.7 Generic error handling 136 +5.7.1 General 136 +5.7.2 ASN.1 violation or encoding error 137 +5.7.3 Field set to a not comprehended value 137 +5.7.4 Mandatory field missing 137 +5.7.5 Not comprehended field 138 +5.8 MBMS 139 +5.8.1 Introduction 139 +5.8.1.1 General 139 +5.8.1.2 Scheduling 139 +5.8.1.3 MCCH information validity and notification of changes 139 +5.8.2 MCCH information acquisition 140 +5.8.2.1 General 140 +5.8.2.2 Initiation 141 +5.8.2.3 MCCH information acquisition by the UE 141 +5.8.2.4 Actions upon reception of the MBSFNAreaConfiguration message 141 +5.8.2.5 Actions upon reception of the MBMSCountingRequest message 141 +5.8.3 MBMS PTM radio bearer configuration 141 +5.8.3.1 General 141 +5.8.3.2 Initiation 141 +5.8.3.3 MRB establishment 142 +5.8.3.4 MRB release 142 +5.8.4 MBMS Counting Procedure 142 +5.8.4.1 General 142 +5.8.4.2 Initiation 142 +5.8.4.3 Reception of the MBMSCountingRequest message by the UE 142 +5.8.5 MBMS interest indication 143 +5.8.5.1 General 143 +5.8.5.2 Initiation 144 +5.8.5.3 Determine MBMS frequencies of interest 144 +5.8.5.4 Actions related to transmission of MBMSInterestIndication message 145 +5.9 RN procedures 145 +5.9.1 RN reconfiguration 145 +5.9.1.1 General 145 +5.9.1.2 Initiation 146 +5.9.1.3 Reception of the RNReconfiguration by the RN 146 +5.10 Sidelink 146 +5.10.1 Introduction 146 +5.10.1a Conditions for sidelink operation 146 +5.10.2 Sidelink UE information 147 +5.10.2.1 General 147 +5.10.2.2 Initiation 148 +5.10.2.3 Actions related to transmission of SidelinkUEInformation message 149 +5.10.3 Direct communication monitoring 150 +5.10.4 Direct communication transmission 151 +5.10.5 Direct discovery monitoring 152 +5.10.6 Direct discovery announcement 152 +5.10.7 Direct synchronisation information transmission 153 +5.10.7.1 General 153 +5.10.7.2 Initiation 154 +5.10.7.3 Transmission of SLSS 155 +5.10.7.4 Transmission of MasterInformationBlock-SL message 156 +5.10.7.5 Void 157 +5.10.8 Direct synchronisation reference 157 +5.10.8.1 General 157 +5.10.8.2 Selection and reselection of synchronisation reference UE (SyncRef UE) 157 +5.10.9 Sidelink common control information 157 +5.10.9.1 General 157 +5.10.9.2 Actions related to reception of MasterInformationBlock-SL message 158 +6 Protocol data units, formats and parameters (tabular & ASN.1) 158 +6.1 General 158 +6.2 RRC messages 160 +6.2.1 General message structure 160 +– EUTRA-RRC-Definitions 160 +– BCCH-BCH-Message 160 +– BCCH-DL-SCH-Message 160 +– MCCH-Message 160 +– PCCH-Message 161 +– DL-CCCH-Message 161 +– DL-DCCH-Message 161 +– UL-CCCH-Message 162 +– UL-DCCH-Message 162 +6.2.2 Message definitions 163 +– CounterCheck 163 +– CounterCheckResponse 164 +– CSFBParametersRequestCDMA2000 164 +– CSFBParametersResponseCDMA2000 165 +– DLInformationTransfer 166 +– HandoverFromEUTRAPreparationRequest (CDMA2000) 166 +– InDeviceCoexIndication 167 +– InterFreqRSTDMeasurementIndication 169 +– LoggedMeasurementConfiguration 170 +– MasterInformationBlock 172 +– MBMSCountingRequest 172 +– MBMSCountingResponse 173 +– MBMSInterestIndication 174 +– MBSFNAreaConfiguration 174 +– MeasurementReport 175 +– MobilityFromEUTRACommand 176 +– Paging 179 +– ProximityIndication 180 +– RNReconfiguration 181 +– RNReconfigurationComplete 181 +– RRCConnectionReconfiguration 182 +– RRCConnectionReconfigurationComplete 186 +– RRCConnectionReestablishment 186 +– RRCConnectionReestablishmentComplete 187 +– RRCConnectionReestablishmentReject 188 +– RRCConnectionReestablishmentRequest 188 +– RRCConnectionReject 189 +– RRCConnectionRelease 190 +– RRCConnectionRequest 193 +– RRCConnectionSetup 194 +– RRCConnectionSetupComplete 195 +– SCGFailureInformation 196 +– SecurityModeCommand 197 +– SecurityModeComplete 197 +– SecurityModeFailure 198 +– SidelinkUEInformation 198 +– SystemInformation 199 +– SystemInformationBlockType1 200 +– UEAssistanceInformation 203 +– UECapabilityEnquiry 204 +– UECapabilityInformation 204 +– UEInformationRequest 205 +– UEInformationResponse 206 +– ULHandoverPreparationTransfer (CDMA2000) 211 +– ULInformationTransfer 212 +6.3 RRC information elements 212 +6.3.1 System information blocks 212 +– SystemInformationBlockType2 212 +– SystemInformationBlockType3 214 +– SystemInformationBlockType4 217 +– SystemInformationBlockType5 218 +– SystemInformationBlockType6 221 +– SystemInformationBlockType7 223 +– SystemInformationBlockType8 224 +– SystemInformationBlockType9 229 +– SystemInformationBlockType10 229 +– SystemInformationBlockType11 230 +– SystemInformationBlockType12 231 +– SystemInformationBlockType13 231 +– SystemInformationBlockType14 232 +– SystemInformationBlockType15 232 +– SystemInformationBlockType16 233 +– SystemInformationBlockType17 234 +– SystemInformationBlockType18 235 +– SystemInformationBlockType19 235 +6.3.2 Radio resource control information elements 236 +– AntennaInfo 236 +– AntennaInfoUL 237 +– CQI-ReportConfig 238 +– CQI-ReportPeriodicProcExtId 243 +– CrossCarrierSchedulingConfig 243 +– CSI-IM-Config 244 +– CSI-IM-ConfigId 244 +– CSI-Process 244 +– CSI-ProcessId 246 +– CSI-RS-Config 246 +– CSI-RS-ConfigNZP 247 +– CSI-RS-ConfigNZPId 248 +– CSI-RS-ConfigZP 248 +– CSI-RS-ConfigZPId 249 +– DMRS-Config 249 +– DRB-Identity 249 +– EPDCCH-Config 249 +– EIMTA-MainConfig 251 +– LogicalChannelConfig 252 +– MAC-MainConfig 253 +– PDCP-Config 257 +– PDSCH-Config 259 +– PDSCH-RE-MappingQCL-ConfigId 260 +– PHICH-Config 260 +– PhysicalConfigDedicated 261 +– P-Max 264 +– PRACH-Config 264 +– PresenceAntennaPort1 265 +– PUCCH-Config 265 +– PUSCH-Config 268 +– RACH-ConfigCommon 270 +– RACH-ConfigDedicated 271 +– RadioResourceConfigCommon 272 +– RadioResourceConfigDedicated 274 +– RLC-Config 278 +– RLF-TimersAndConstants 280 +– RN-SubframeConfig 281 +– SchedulingRequestConfig 282 +– SoundingRS-UL-Config 283 +– SPS-Config 284 +– TDD-Config 286 +– TimeAlignmentTimer 287 +– TPC-PDCCH-Config 287 +– UplinkPowerControl 288 +6.3.3 Security control information elements 291 +– NextHopChainingCount 291 +– SecurityAlgorithmConfig 291 +– ShortMAC-I 291 +6.3.4 Mobility control information elements 292 +– AdditionalSpectrumEmission 292 +– ARFCN-ValueCDMA2000 292 +– ARFCN-ValueEUTRA 292 +– ARFCN-ValueGERAN 292 +– ARFCN-ValueUTRA 293 +– BandclassCDMA2000 293 +– BandIndicatorGERAN 293 +– CarrierFreqCDMA2000 293 +– CarrierFreqGERAN 294 +– CarrierFreqsGERAN 294 +– CarrierFreqListMBMS 295 +– CDMA2000-Type 295 +– CellIdentity 295 +– CellIndexList 295 +– CellReselectionPriority 296 +– CSFB-RegistrationParam1XRTT 296 +– CellGlobalIdEUTRA 297 +– CellGlobalIdUTRA 297 +– CellGlobalIdGERAN 298 +– CellGlobalIdCDMA2000 298 +– CSG-Identity 299 +– FreqBandIndicator 299 +– MobilityControlInfo 299 +– MobilityParametersCDMA2000 (1xRTT) 301 +– MobilityStateParameters 301 +– MultiBandInfoList 301 +– PhysCellId 302 +– PhysCellIdRange 302 +– PhysCellIdRangeUTRA-FDDList 302 +– PhysCellIdCDMA2000 303 +– PhysCellIdGERAN 303 +– PhysCellIdUTRA-FDD 303 +– PhysCellIdUTRA-TDD 304 +– PLMN-Identity 304 +– PLMN-IdentityList3 304 +– PreRegistrationInfoHRPD 305 +– Q-QualMin 305 +– Q-RxLevMin 305 +– Q-OffsetRange 306 +– Q-OffsetRangeInterRAT 306 +– ReselectionThreshold 306 +– ReselectionThresholdQ 306 +– SCellIndex 306 +– ServCellIndex 307 +– SpeedStateScaleFactors 307 +– SystemInfoListGERAN 307 +– SystemTimeInfoCDMA2000 308 +– TrackingAreaCode 308 +– T-Reselection 309 +6.3.5 Measurement information elements 309 +– AllowedMeasBandwidth 309 +– CSI-RSRP-Range 309 +– Hysteresis 309 +– LocationInfo 310 +– MBSFN-RSRQ-Range 310 +– MeasConfig 311 +– MeasDS-Config 312 +– MeasGapConfig 313 +– MeasId 314 +– MeasIdToAddModList 314 +– MeasObjectCDMA2000 314 +– MeasObjectEUTRA 315 +– MeasObjectGERAN 317 +– MeasObjectId 318 +– MeasObjectToAddModList 318 +– MeasObjectUTRA 319 +– MeasResults 320 +– MeasScaleFactor 323 +– QuantityConfig 323 +– ReportConfigEUTRA 324 +– ReportConfigId 328 +– ReportConfigInterRAT 328 +– ReportConfigToAddModList 329 +– ReportInterval 330 +– RSRP-Range 330 +– RSRQ-Range 331 +– RSRQ-Type 331 +– TimeToTrigger 331 +6.3.6 Other information elements 332 +– AbsoluteTimeInfo 332 +– AreaConfiguration 332 +– C-RNTI 332 +– DedicatedInfoCDMA2000 333 +– DedicatedInfoNAS 333 +– FilterCoefficient 333 +– LoggingDuration 333 +– LoggingInterval 334 +– MeasSubframePattern 334 +– MMEC 334 +– NeighCellConfig 334 +– OtherConfig 335 +– RAND-CDMA2000 (1xRTT) 336 +– RAT-Type 336 +– RRC-TransactionIdentifier 336 +– S-TMSI 337 +– TraceReference 337 +– UE-CapabilityRAT-ContainerList 337 +– UE-EUTRA-Capability 338 +– UE-RadioPagingInfo 356 +– UE-TimersAndConstants 356 +– VisitedCellInfoList 357 +– WLAN-OffloadConfig 357 +6.3.7 MBMS information elements 359 +– MBMS-NotificationConfig 359 +– MBSFN-AreaId 360 +– MBSFN-AreaInfoList 360 +– MBSFN-SubframeConfig 361 +– PMCH-InfoList 362 +6.3.8 Sidelink information elements 363 +– SL-CommConfig 363 +– SL-CommResourcePool 364 +– SL-CP-Len 365 +– SL-DiscConfig 365 +– SL-DiscResourcePool 367 +– SL-DiscTxPowerInfo 368 +– SL-HoppingConfig 368 +– SL-OffsetIndicator 369 +– SL-PeriodComm 369 +– SLSSID 369 +– SL-SyncConfig 369 +– SL-TF-ResourceConfig 371 +– SL-TxParameters 372 +– SL-TxPoolIdentity 372 +– SL-TxPoolToReleaseList 372 +6.4 RRC multiplicity and type constraint values 372 +– Multiplicity and type constraint definitions 372 +– End of EUTRA-RRC-Definitions 374 +6.5 PC5 RRC messages 374 +6.5.1 General message structure 374 +– PC5-RRC-Definitions 374 +– SBCCH-SL-BCH-Message 375 +6.5.2 Message definitions 375 +– MasterInformationBlock-SL 375 +– End of PC5-RRC-Definitions 376 +7 Variables and constants 376 +7.1 UE variables 376 +– EUTRA-UE-Variables 376 +– VarConnEstFailReport 377 +– VarLogMeasConfig 377 +– VarLogMeasReport 377 +– VarMeasConfig 378 +– VarMeasReportList 378 +– VarMobilityHistoryReport 379 +– VarRLF-Report 379 +– VarShortMAC-Input 379 +– Multiplicity and type constraint definitions 380 +– End of EUTRA-UE-Variables 380 +7.2 Counters 380 +7.3 Timers (Informative) 381 +7.4 Constants 382 +8 Protocol data unit abstract syntax 383 +8.1 General 383 +8.2 Structure of encoded RRC messages 383 +8.3 Basic production 383 +8.4 Extension 383 +8.5 Padding 384 +9 Specified and default radio configurations 384 +9.1 Specified configurations 384 +9.1.1 Logical channel configurations 384 +9.1.1.1 BCCH configuration 384 +9.1.1.2 CCCH configuration 385 +9.1.1.3 PCCH configuration 385 +9.1.1.4 MCCH and MTCH configuration 385 +9.1.1.5 SBCCH configuration 385 +9.1.1.6 STCH configuration 385 +9.1.2 SRB configurations 386 +9.1.2.1 SRB1 386 +9.1.2.2 SRB2 386 +9.2 Default radio configurations 386 +9.2.1 SRB configurations 386 +9.2.1.1 SRB1 386 +9.2.1.2 SRB2 387 +9.2.2 Default MAC main configuration 387 +9.2.3 Default semi-persistent scheduling configuration 387 +9.2.4 Default physical channel configuration 387 +9.2.5 Default values timers and constants 388 +9.3 Sidelink pre-configured parameters 388 +9.3.1 Specified parameters 388 +9.3.2 Pre-configurable parameters 389 +– SL-Preconfiguration 389 +10 Radio information related interactions between network nodes 390 +10.1 General 390 +10.2 Inter-node RRC messages 391 +10.2.1 General 391 +– EUTRA-InterNodeDefinitions 391 +10.2.2 Message definitions 392 +– HandoverCommand 392 +– HandoverPreparationInformation 392 +– SCG-Config 394 +– SCG-ConfigInfo 394 +– UERadioAccessCapabilityInformation 396 +– UERadioPagingInformation 397 +10.3 Inter-node RRC information element definitions 397 +– AS-Config 397 +– AS-Context 398 +– ReestablishmentInfo 399 +– RRM-Config 400 +10.4 Inter-node RRC multiplicity and type constraint values 401 +– Multiplicity and type constraints definitions 401 +– End of EUTRA-InterNodeDefinitions 401 +10.5 Mandatory information in AS-Config 401 +11 UE capability related constraints and performance requirements 402 +11.1 UE capability related constraints 402 +11.2 Processing delay requirements for RRC procedures 402 +11.3 Void 406 +Annex A (informative): Guidelines, mainly on use of ASN.1 406 +A.1 Introduction 406 +A.2 Procedural specification 406 +A.2.1 General principles 406 +A.2.2 More detailed aspects 406 +A.3 PDU specification 407 +A.3.1 General principles 407 +A.3.1.1 ASN.1 sections 407 +A.3.1.2 ASN.1 identifier naming conventions 407 +A.3.1.3 Text references using ASN.1 identifiers 408 +A.3.2 High-level message structure 409 +A.3.3 Message definition 409 +A.3.4 Information elements 411 +A.3.5 Fields with optional presence 412 +A.3.6 Fields with conditional presence 412 +A.3.7 Guidelines on use of lists with elements of SEQUENCE type 413 +A.4 Extension of the PDU specifications 414 +A.4.1 General principles to ensure compatibility 414 +A.4.2 Critical extension of messages 414 +A.4.3 Non-critical extension of messages 415 +A.4.3.1 General principles 415 +A.4.3.2 Further guidelines 416 +A.4.3.3 Typical example of evolution of IE with local extensions 416 +A.4.3.4 Typical examples of non critical extension at the end of a message 417 +A.4.3.5 Examples of non-critical extensions not placed at the default extension location 418 +– ParentIE-WithEM 418 +– ChildIE1-WithoutEM 418 +– ChildIE2-WithoutEM 419 +A.5 Guidelines regarding inclusion of transaction identifiers in RRC messages 420 +A.6 Protection of RRC messages (informative) 420 +A.7 Miscellaneous 422 +Annex B (normative): Release 8 and 9 AS feature handling 422 +B.1 Feature group indicators 422 +B.2 CSG support 430 +Annex C (normative): Release 10 AS feature handling 431 +C.1 Feature group indicators 431 +Annex D (informative): Descriptive background information 434 +D.1 Signalling of Multiple Frequency Band Indicators (Multiple FBI) 434 +D.1.1 Mapping between frequency band indicator and multiple frequency band indicator 434 +D.1.2 Mapping between inter-frequency neighbour list and multiple frequency band indicator 434 +D.1.3 Mapping between UTRA FDD frequency list and multiple frequency band indicator 435 +Annex E (normative): TDD/FDD differentiation of FGIs/capabilities in TDD-FDD CA 437 +Annex F (informative): Change history 438 + + +Foreword +This Technical Specification has been produced by the 3rd Generation Partnership Project (3GPP). +The contents of the present document are subject to continuing work within the TSG and may change following formal TSG approval. Should the TSG modify the contents of the present document, it will be re-released by the TSG with an identifying change of release date and an increase in version number as follows: +Version x.y.z +where: +x the first digit: +1 presented to TSG for information; +2 presented to TSG for approval; +3 or greater indicates TSG approved document under change control. +y the second digit is incremented for all changes of substance, i.e. technical enhancements, corrections, updates, etc. +z the third digit is incremented when editorial only changes have been incorporated in the document. + +1 Scope +The present document specifies the Radio Resource Control protocol for the radio interface between UE and E-UTRAN as well as for the radio interface between RN and E-UTRAN. +The scope of the present document also includes: +- the radio related information transported in a transparent container between source eNB and target eNB upon inter eNB handover; +- the radio related information transported in a transparent container between a source or target eNB and another system upon inter RAT handover. +2 References +The following documents contain provisions which, through reference in this text, constitute provisions of the present document. +* References are either specific (identified by date of publication, edition number, version number, etc.) or nonspecific. +* For a specific reference, subsequent revisions do not apply. +* For a non-specific reference, the latest version applies. In the case of a reference to a 3GPP document (including a GSM document), a non-specific reference implicitly refers to the latest version of that document in the same Release as the present document. +[1] 3GPP TR 21.905: "Vocabulary for 3GPP Specifications". +[2] Void. +[3] 3GPP TS 36.302: "Evolved Universal Terrestrial Radio Access (E-UTRA); Services provided by the physical layer ". +[4] 3GPP TS 36.304: "Evolved Universal Terrestrial Radio Access (E-UTRA); UE Procedures in Idle Mode". +[5] 3GPP TS 36.306 "Evolved Universal Terrestrial Radio Access (E-UTRA); UE Radio Access Capabilities". +[6] 3GPP TS 36.321: "Evolved Universal Terrestrial Radio Access (E-UTRA); Medium Access Control (MAC) protocol specification". +[7] 3GPP TS 36.322:"Evolved Universal Terrestrial Radio Access (E-UTRA); Radio Link Control (RLC) protocol specification". +[8] 3GPP TS 36.323: "Evolved Universal Terrestrial Radio Access (E-UTRA); Packet Data Convergence Protocol (PDCP) Specification". +[9] 3GPP TS 36.300: "Evolved Universal Terrestrial Radio Access (E-UTRA) and Evolved Universal Terrestrial Radio Access (E-UTRAN); Overall description; Stage 2". +[10] 3GPP TS 22.011: "Service accessibility". +[11] 3GPP TS 23.122: "Non-Access-Stratum (NAS) functions related to Mobile Station (MS) in idle mode". +[12] 3GPP2 C.S0002-F v1.0: "Physical Layer Standard for cdma2000 Spread Spectrum Systems". +[13] ITU-T Recommendation X.680 (07/2002) "Information Technology - Abstract Syntax Notation One (ASN.1): Specification of basic notation" (Same as the ISO/IEC International Standard 8824-1). +[14] ITU-T Recommendation X.681 (07/2002) "Information Technology - Abstract Syntax Notation One (ASN.1): Information object specification" (Same as the ISO/IEC International Standard 8824-2). +[15] ITU-T Recommendation X.691 (07/2002) "Information technology - ASN.1 encoding rules: Specification of Packed Encoding Rules (PER)" (Same as the ISO/IEC International Standard 8825-2). +[16] 3GPP TS 36.133: "Evolved Universal Terrestrial Radio Access (E-UTRA); Requirements for support of radio resource management". +[17] 3GPP TS 25.101: "Universal Terrestrial Radio Access (UTRA); User Equipment (UE) radio transmission and reception (FDD)". +[18] 3GPP TS 25.102: "Universal Terrestrial Radio Access (UTRA); User Equipment (UE) radio transmission and reception (TDD)". +[19] 3GPP TS 25.331:"Universal Terrestrial Radio Access (UTRA); Radio Resource Control (RRC); Protocol specification". +[20] 3GPP TS 45.005: "Radio transmission and reception". +[21] 3GPP TS 36.211: "Evolved Universal Terrestrial Radio Access (E-UTRA); Physical Channels and Modulation". +[22] 3GPP TS 36.212: "Evolved Universal Terrestrial Radio Access (E-UTRA); Multiplexing and channel coding". +[23] 3GPP TS 36.213: "Evolved Universal Terrestrial Radio Access (E-UTRA); Physical layer procedures". +[24] 3GPP2 C.S0057-E v1.0: "Band Class Specification for cdma2000 Spread Spectrum Systems". +[25] 3GPP2 C.S0005-F v1.0: "Upper Layer (Layer 3) Signaling Standard for cdma2000 Spread Spectrum Systems". +[26] 3GPP2 C.S0024-C v2.0: "cdma2000 High Rate Packet Data Air Interface Specification". +[27] 3GPP TS 23.003: "Numbering, addressing and identification". +[28] 3GPP TS 45.008: "Radio subsystem link control". +[29] 3GPP TS 25.133: "Requirements for Support of Radio Resource Management (FDD)". +[30] 3GPP TS 25.123: "Requirements for Support of Radio Resource Management (TDD)". +[31] 3GPP TS 36.401: "Evolved Universal Terrestrial Radio Access (E-UTRA); Architecture description". +[32] 3GPP TS 33.401: "3GPP System Architecture Evolution (SAE); Security architecture". +[33] 3GPP2 A.S0008-C v4.0: "Interoperability Specification (IOS) for High Rate Packet Data (HRPD) Radio Access Network Interfaces with Session Control in the Access Network" +[34] 3GPP2 C.S0004-F v1.0: "Signaling Link Access Control (LAC) Standard for cdma2000 Spread Spectrum Systems" +[35] 3GPP TS 24.301: "Non-Access-Stratum (NAS) protocol for Evolved Packet System (EPS); Stage 3". +[36] 3GPP TS 44.060: "General Packet Radio Service (GPRS); Mobile Station (MS) - Base Station System (BSS) interface; Radio Link Control/Medium Access Control (RLC/MAC) protocol". +[37] 3GPP TS 23.041: "Technical realization of Cell Broadcast Service (CBS)". +[38] 3GPP TS 23.038: "Alphabets and Language". +[39] 3GPP TS 36.413: "Evolved Universal Terrestrial Radio Access (E-UTRAN); S1 Application Protocol (S1 AP)". +[40] 3GPP TS 25.304: "Universal Terrestrial Radio Access (UTRAN); User Equipment (UE) procedures in idle mode and procedures for cell reselection in connected mode". +[41] 3GPP TS 23.401: "General Packet Radio Service (GPRS) enhancements for Evolved Universal Terrestrial Radio Access Network (E-UTRAN) access". +[42] 3GPP TS 36.101: "Evolved Universal Terrestrial Radio Access (E-UTRA); User Equipment (UE) radio transmission and reception". +[43] 3GPP TS 44.005: "Data Link (DL) Layer General Aspects". +[44] 3GPP2 C.S0087-A v2.0: "E-UTRAN - cdma2000 HRPD Connectivity and Interworking Air Interface Specification" +[45] 3GPP TS 44.018: "Mobile radio interface layer 3 specification; Radio Resource Control (RRC) protocol". +[46] 3GPP TS 25.223: "Spreading and modulation (TDD)". +[47] 3GPP TS 36.104: "Evolved Universal Terrestrial Radio Access (E-UTRA); Base Station (BS) radio transmission and reception". +[48] 3GPP TS 36.214: "Evolved Universal Terrestrial Radio Access (E-UTRA); Physical layer - Measurements". +[49] 3GPP TS 24.008: "Mobile radio interface layer 3 specification; Core network protocols; Stage 3". +[50] 3GPP TS 45.010: "Radio subsystem synchronization". +[51] 3GPP TS 23.272: "Circuit Switched Fallback in Evolved Packet System; Stage 2". +[52] 3GPP TS 29.061: "Interworking between the Public Land Mobile Network (PLMN) supporting packet based services and Packet Data Networks (PDN)". +[53] 3GPP2 C.S0097-0 v3.0: "E-UTRAN - cdma2000 1x Connectivity and Interworking Air Interface Specification". +[54] 3GPP TS 36.355: "LTE Positioning Protocol (LPP)". +[55] 3GPP TS 36.216: "Evolved Universal Terrestrial Radio Access (E-UTRA); Physical layer for relaying operation". +[56] 3GPP TS 23.246: "Multimedia Broadcast/Multicast Service (MBMS); Architecture and functional description". +[57] 3GPP TS 26.346: "Multimedia Broadcast/Multicast Service (MBMS); Protocols and codecs". +[58] 3GPP TS 32.422: "Telecommunication management; Subsriber and equipment trace; Trace control and confiuration management". +[59] 3GPP TS 22.368: "Service Requirements for Machine Type Communications; Stage 1". +[60] 3GPP TS 37.320: "Universal Terrestrial Radio Access (UTRA) and Evolved Universal Terrestrial Radio Access (E-UTRA); Radio measurement collection for Minimization of Drive Tests (MDT); Overall description; Stage 2". +[61] 3GPP TS 23.216: "Single Radio Voice Call Continuity (SRVCC); Stage 2". +[62] 3GPP TS 22.146: "Multimedia Broadcast/Multicast Service (MBMS); Stage 1". +[63] 3GPP TR 36.816: "Evolved Universal Terrestrial Radio Access (E-UTRA); Study on signalling and procedure for interference avoidance for in-device coexistence". +[64] IS-GPS-200F: "Navstar GPS Space Segment/Navigation User Segment Interfaces". +[65] 3GPP TS 25.307: "Requirement on User Equipments (UEs) supporting a release-independent frequency band". +[66] 3GPP TS 24.312: "Access Network Discovery and Selection Function (ANDSF) Management Object (MO)". +[67] IEEE 802.11-2012, Part 11: Wireless LAN Medium Access Control (MAC) and Physical Layer (PHY) specifications, IEEE Std. +[68] 3GPP TS 23.303: "Proximity-based services (ProSe); Stage 2". +[69] 3GPP TS 24.334: "Proximity-services (ProSe) User Equipment (UE) to ProSe function protocol aspects; Stage 3". +[70] 3GPP TS 24.333: "Proximity-services (ProSe) Management Objects (MO)". +3 Definitions, symbols and abbreviations +3.1 Definitions +For the purposes of the present document, the terms and definitions given in TR 21.905 [1] and the following apply. A term defined in the present document takes precedence over the definition of the same term, if any, in TR 21.905 [1]. +Cell Group: A subset of the serving cells of a UE, configured with Dual Connectivity (DC), i.e. the Master Cell Group (MCG) or the Secondary Cell Group (SCG). +Commercial Mobile Alert System: Public Warning System that delivers Warning Notifications provided by Warning Notification Providers to CMAS capable UEs. +Common access barring parameters: The common access barring parameters refer to the access class barring parameters that are broadcast in SystemInformationBlockType2 outside the list of PLMN specific parameters (i.e. in ac-BarringPerPLMN-List). +CSG member cell: A cell broadcasting the identity of the selected PLMN, registered PLMN or equivalent PLMN and for which the CSG whitelist of the UE includes an entry comprising cell's CSG ID and the respective PLMN identity. +Dual Connectivity: A UE in RRC_CONNECTED is configured with Dual Connectivity when configured with a Master and a Secondary Cell Group. +EU-Alert: Public Warning System that delivers Warning Notifications provided by Warning Notification Providers using the same AS mechanisms as defined for CMAS. +Field: The individual contents of an information element are referred as fields. +Floor: Mathematical function used to 'round down' i.e. to the nearest integer having a lower or equal value. +Information element: A structural element containing a single or multiple fields is referred as information element. +Korean Public Alert System (KPAS): Public Warning System that delivers Warning Notifications provided by Warning Notification Providers using the same AS mechanisms as defined for CMAS. +Master Cell Group: A group of serving cells of a UE comprising of the PCell and zero or more secondary cells. +MBMS service: MBMS bearer service as defined in TS 23.246 [56] (i.e. provided via an MRB). +Primary Cell: The cell, operating on the primary frequency, in which the UE either performs the initial connection establishment procedure or initiates the connection re-establishment procedure, or the cell indicated as the primary cell in the handover procedure. +Primary Secondary Cell: The SCG cell in which the UE is instructed to perform random access when performing the SCG change procedure. +Primary Timing Advance Group: Timing Advance Group containing the PCell or the PSCell. +Secondary Cell: A cell, operating on a secondary frequency, which may be configured once an RRC connection is established and which may be used to provide additional radio resources. +Secondary Cell Group: A group of secondary cells of a UE, configured with DC, comprising of the PSCell and zero or more other secondary cells. +Secondary Timing Advance Group: Timing Advance Group neither containing the PCell nor the PSCell. A secondary timing advance group contains at least one cell with configured uplink. +Serving Cell: For a UE in RRC_CONNECTED not configured with CA/ DC there is only one serving cell comprising of the primary cell. For a UE in RRC_CONNECTED configured with CA/ DC the term 'serving cells' is used to denote the set of one or more cells comprising of the primary cell and all secondary cells. +Timing Advance Group: A group of serving cells that is configured by RRC and that, for the cells with an UL configured, use the same timing reference cell and the same Timing Advance value. A Timing Advance Group only includes cells of the same cell group i.e. it either includes MCG cells or SCG cells. +3.2 Abbreviations +For the purposes of the present document, the abbreviations given in TR 21.905 [1] and the following apply. An abbreviation defined in the present document takes precedence over the definition of the same abbreviation, if any, in TR 21.905 [1]. +1xRTT CDMA2000 1x Radio Transmission Technology +ACK Acknowledgement +AM Acknowledged Mode +ANDSF Access Network Discovery and Selection Function +ARQ Automatic Repeat Request +AS Access Stratum +ASN.1 Abstract Syntax Notation One +BCCH Broadcast Control Channel +BCD Binary Coded Decimal +BCH Broadcast Channel +BLER Block Error Rate +CA Carrier Aggregation +CCCH Common Control Channel +CCO Cell Change Order +CG Cell Group +CMAS Commercial Mobile Alert Service +CP Control Plane +C-RNTI Cell RNTI +CRS Cell-specific Reference Signal +CSFB CS fallback +CSG Closed Subscriber Group +CSI Channel State Information +DC Dual Connectivity +DCCH Dedicated Control Channel +DCI Downlink Control Information +DFN Direct Frame Number +DL Downlink +DL-SCH Downlink Shared Channel +DRB (user) Data Radio Bearer +DRX Discontinuous Reception +DTCH Dedicated Traffic Channel +EAB Extended Access Barring +EHPLMN Equivalent Home Public Land Mobile Network +eIMTA Enhanced Interference Management and Traffic Adaptation +ENB Evolved Node B +EPC Evolved Packet Core +EPDCCH Enhanced Physical Downlink Control Channel +EPS Evolved Packet System +ETWS Earthquake and Tsunami Warning System +E-UTRA Evolved Universal Terrestrial Radio Access +E-UTRAN Evolved Universal Terrestrial Radio Access Network +FDD Frequency Division Duplex +FFS For Further Study +GERAN GSM/EDGE Radio Access Network +GNSS Global Navigation Satellite System +GSM Global System for Mobile Communications +HARQ Hybrid Automatic Repeat Request +HFN Hyper Frame Number +HPLMN Home Public Land Mobile Network +HRPD CDMA2000 High Rate Packet Data +IDC In-Device Coexistence +IE Information element +IMEI International Mobile Equipment Identity +IMSI International Mobile Subscriber Identity +ISM Industrial, Scientific and Medical +kB Kilobyte (1000 bytes) +L1 Layer 1 +L2 Layer 2 +L3 Layer 3 +MAC Medium Access Control +MBMS Multimedia Broadcast Multicast Service +MBSFN Multimedia Broadcast multicast service Single Frequency Network +MCG Master Cell Group +MDT Minimization of Drive Tests +MIB Master Information Block +MO Mobile Originating +MRB MBMS Point to Multipoint Radio Bearer +MRO Mobility Robustness Optimisation +MSI MCH Scheduling Information +MT Mobile Terminating +N/A Not Applicable +NACC Network Assisted Cell Change +NAICS Network Assisted Interference Cancellation/Suppression +NAS Non Access Stratum +PCCH Paging Control Channel +PCell Primary Cell +PDCCH Physical Downlink Control Channel +PDCP Packet Data Convergence Protocol +PDU Protocol Data Unit +PLMN Public Land Mobile Network +ProSe Proximity based Services +PSCell Primary Secondary Cell +PTAG Primary Timing Advance Group +PUCCH Physical Uplink Control Channel +QoS Quality of Service +RACH Random Access CHannel +RAT Radio Access Technology +RB Radio Bearer +RLC Radio Link Control +RN Relay Node +RNTI Radio Network Temporary Identifier +ROHC RObust Header Compression +RPLMN Registered Public Land Mobile Network +RRC Radio Resource Control +RSCP Received Signal Code Power +RSRP Reference Signal Received Power +RSRQ Reference Signal Received Quality +RSSI Received Signal Strength Indicator +SAE System Architecture Evolution +SAP Service Access Point +SC Sidelink Control +SCell Secondary Cell +SCG Secondary Cell Group +SFN System Frame Number +SI System Information +SIB System Information Block +SI-RNTI System Information RNTI +SL Sidelink +SLSS Sidelink Synchronisation Signal +SMC Security Mode Control +SPS Semi-Persistent Scheduling +SR Scheduling Request +SRB Signalling Radio Bearer +SSAC Service Specific Access Control +STAG Secondary Timing Advance Group +S-TMSI SAE Temporary Mobile Station Identifier +TA Tracking Area +TAG Timing Advance Group +TDD Time Division Duplex +TDM Time Division Multiplexing +TM Transparent Mode +TPC-RNTI Transmit Power Control RNTI +T-RPT Time Resource Pattern of Transmission +TTT Time To Trigger +UE User Equipment +UICC Universal Integrated Circuit Card +UL Uplink +UL-SCH Uplink Shared Channel +UM Unacknowledged Mode +UP User Plane +UTC Coordinated Universal Time +UTRAN Universal Terrestrial Radio Access Network +VoLTE Voice over Long Term Evolution +WLAN Wireless Local Area Network +In the ASN.1, lower case may be used for some (parts) of the above abbreviations e.g. c-RNTI +4 General +4.1 Introduction +In this specification, (parts of) procedures and messages specified for the UE equally apply to the RN for functionality necessary for the RN. There are also (parts of) procedures and messages which are only applicable to the RN in its communication with the E-UTRAN, in which case the specification denotes the RN instead of the UE. Such RNspecific aspects are not applicable to the UE. +This specification is organised as follows: +- sub-clause 4.2 describes the RRC protocol model; +- sub-clause 4.3 specifies the services provided to upper layers as well as the services expected from lower layers; +- sub-clause 4.4 lists the RRC functions; +- clause 5 specifies RRC procedures, including UE state transitions; +- clause 6 specifies the RRC message in a mixed format (i.e. tabular & ASN.1 together); +- clause 7 specifies the variables (including protocol timers and constants) and counters to be used by the UE; +- clause 8 specifies the encoding of the RRC messages; +- clause 9 specifies the specified and default radio configurations; +- clause 10 specifies the RRC messages transferred across network nodes; +- clause 11 specifies the UE capability related constraints and performance requirements. +4.2 Architecture +4.2.1 UE states and state transitions including inter RAT +A UE is in RRC_CONNECTED when an RRC connection has been established. If this is not the case, i.e. no RRC connection is established, the UE is in RRC_IDLE state. The RRC states can further be characterised as follows: +- RRC_IDLE: +- A UE specific DRX may be configured by upper layers. +- UE controlled mobility; +- The UE: +- Monitors a Paging channel to detect incoming calls, system information change, for ETWS capable UEs, ETWS notification, and for CMAS capable UEs, CMAS notification; +- Performs neighbouring cell measurements and cell (re-)selection; +- Acquires system information. +- Performs logging of available measurements together with location and time for logged measurement configured UEs. +- RRC_CONNECTED: +- Transfer of unicast data to/from UE. +- At lower layers, the UE may be configured with a UE specific DRX. +- For UEs supporting CA, use of one or more SCells, aggregated with the PCell, for increased bandwidth; +- For UEs supporting DC, use of one SCG, aggregated with the MCG, for increased bandwidth; +- Network controlled mobility, i.e. handover and cell change order with optional network assistance (NACC) to GERAN; +- The UE: +- Monitors a Paging channel and/ or System Information Block Type 1 contents to detect system information change, for ETWS capable UEs, ETWS notification, and for CMAS capable UEs, CMAS notification; +- Monitors control channels associated with the shared data channel to determine if data is scheduled for it; +- Provides channel quality and feedback information; +- Performs neighbouring cell measurements and measurement reporting; +- Acquires system information. +The following figure not only provides an overview of the RRC states in E-UTRA, but also illustrates the mobility support between E-UTRAN, UTRAN and GERAN. + +Figure 4.2.1-1: E-UTRA states and inter RAT mobility procedures, 3GPP +The following figure illustrates the mobility support between E-UTRAN, CDMA2000 1xRTT and CDMA2000 HRPD. The details of the CDMA2000 state models are out of the scope of this specification. + +Figure 4.2.1-2: Mobility procedures between E-UTRA and CDMA2000 +The inter-RAT handover procedure(s) supports the case of signalling, conversational services, non-conversational services and combinations of these. +In addition to the state transitions shown in Figure 4.2.1-1 and Figure 4.2.1-2, there is support for connection release with redirection information from E-UTRA RRC_CONNECTED to GERAN, UTRAN and CDMA2000 (HRPD Idle/ 1xRTT Dormant mode). +4.2.2 Signalling radio bearers +"Signalling Radio Bearers" (SRBs) are defined as Radio Bearers (RB) that are used only for the transmission of RRC and NAS messages. More specifically, the following three SRBs are defined: +- SRB0 is for RRC messages using the CCCH logical channel; +- SRB1 is for RRC messages (which may include a piggybacked NAS message) as well as for NAS messages prior to the establishment of SRB2, all using DCCH logical channel; +- SRB2 is for RRC messages which include logged measurement information as well as for NAS messages, all using DCCH logical channel. SRB2 has a lower-priority than SRB1 and is always configured by E-UTRAN after security activation. +In downlink piggybacking of NAS messages is used only for one dependant (i.e. with joint success/ failure) procedure: bearer establishment/ modification/ release. In uplink NAS message piggybacking is used only for transferring the initial NAS message during connection setup. +NOTE: The NAS messages transferred via SRB2 are also contained in RRC messages, which however do not include any RRC protocol control information. +Once security is activated, all RRC messages on SRB1 and SRB2, including those containing NAS or non-3GPP messages, are integrity protected and ciphered by PDCP. NAS independently applies integrity protection and ciphering to the NAS messages. +For a UE configured with DC, all RRC messages, regardless of the SRB used and both in downlink and uplink, are transferred via the MCG. +4.3 Services +4.3.1 Services provided to upper layers +The RRC protocol offers the following services to upper layers: +- Broadcast of common control information; +- Notification of UEs in RRC_IDLE, e.g. about a terminating call, for ETWS, for CMAS; +- Transfer of dedicated control information, i.e. information for one specific UE. +4.3.2 Services expected from lower layers +In brief, the following are the main services that RRC expects from lower layers: +- PDCP: integrity protection and ciphering; +- RLC: reliable and in-sequence transfer of information, without introducing duplicates and with support for segmentation and concatenation. +Further details about the services provided by Packet Data Convergence Protocol layer (e.g. integrity and ciphering) are provided in TS 36.323 [8]. The services provided by Radio Link Control layer (e.g. the RLC modes) are specified in TS 36.322 [7]. Further details about the services provided by Medium Access Control layer (e.g. the logical channels) are provided in TS 36.321 [6]. The services provided by physical layer (e.g. the transport channels) are specified in TS 36.302 [3]. +4.4 Functions +The RRC protocol includes the following main functions: +- Broadcast of system information: +- Including NAS common information; +- Information applicable for UEs in RRC_IDLE, e.g. cell (re-)selection parameters, neighbouring cell information and information (also) applicable for UEs in RRC_CONNECTED, e.g. common channel configuration information. +- Including ETWS notification, CMAS notification; +- RRC connection control: +- Paging; +- Establishment/ modification/ release of RRC connection, including e.g. assignment/ modification of UE identity (C-RNTI), establishment/ modification/ release of SRB1 and SRB2, access class barring; +- Initial security activation, i.e. initial configuration of AS integrity protection (SRBs) and AS ciphering (SRBs, DRBs); +- For RNs, configuration of AS integrity protection for DRBs; +- RRC connection mobility including e.g. intra-frequency and inter-frequency handover, associated security handling, i.e. key/ algorithm change, specification of RRC context information transferred between network nodes; +- Establishment/ modification/ release of RBs carrying user data (DRBs); +- Radio configuration control including e.g. assignment/ modification of ARQ configuration, HARQ configuration, DRX configuration; +- For RNs, RN-specific radio configuration control for the radio interface between RN and E-UTRAN; +- In case of CA, cell management including e.g. change of PCell, addition/ modification/ release of SCell(s) and addition/modification/release of STAG(s); +- In case of DC, cell management including e.g. change of PSCell, addition/ modification/ release of SCG cell(s) and addition/modification/release of SCG TAG(s). +- QoS control including assignment/ modification of semi-persistent scheduling (SPS) configuration information for DL and UL, assignment/ modification of parameters for UL rate control in the UE, i.e. allocation of a priority and a prioritised bit rate (PBR) for each RB; +- Recovery from radio link failure; +- Inter-RAT mobility including e.g. security activation, transfer of RRC context information; +- Measurement configuration and reporting: +- Establishment/ modification/ release of measurements (e.g. intra-frequency, inter-frequency and inter- RAT measurements); +- Setup and release of measurement gaps; +- Measurement reporting; +- Other functions including e.g. transfer of dedicated NAS information and non-3GPP dedicated information, transfer of UE radio access capability information, support for E-UTRAN sharing (multiple PLMN identities); +- Generic protocol error handling; +- Support of self-configuration and self-optimisation; +- Support of measurement logging and reporting for network performance optimisation [60]; +NOTE: Random access is specified entirely in the MAC including initial transmission power estimation. +5 Procedures +5.1 General +5.1.1 Introduction +The procedural requirements are structured according to the main functional areas: system information (5.2), connection control (5.3), inter-RAT mobility (5.4) and measurements (5.5). In addition sub-clause 5.6 covers other aspects e.g. NAS dedicated information transfer, UE capability transfer, sub-clause 5.7 specifies the generic error handling, sub-clause 5.8 covers MBMS, sub-clause 5.9 covers RN-specific procedures and sub-clause 5.10 covers sidelink. +5.1.2 General requirements +The UE shall: +1> process the received messages in order of reception by RRC, i.e. the processing of a message shall be completed before starting the processing of a subsequent message; +NOTE 1: E-UTRAN may initiate a subsequent procedure prior to receiving the UE's response of a previously initiated procedure. +1> within a sub-clause execute the steps according to the order specified in the procedural description; +1> consider the term 'radio bearer' (RB) to cover SRBs and DRBs but not MRBs unless explicitly stated otherwise; +1> set the rrc-TransactionIdentifier in the response message, if included, to the same value as included in the message received from E-UTRAN that triggered the response message; +1> upon receiving a choice value set to setup: +2> apply the corresponding received configuration and start using the associated resources, unless explicitly specified otherwise; +1> upon receiving a choice value set to release: +2> clear the corresponding configuration and stop using the associated resources; +1> upon handover to E-UTRA; or +1> upon receiving an RRCConnectionReconfiguration message including the fullConfig: +2> apply the Conditions in the ASN.1 for inclusion of the fields for the DRB/PDCP/RLC setup during the reconfiguration of the DRBs included in the drb-ToAddModList; +NOTE 2: At each point in time, the UE keeps a single value for each field except for during handover when the UE temporarily stores the previous configuration so it can revert back upon handover failure. In other words: when the UE reconfigures a field, the existing value is released except for during handover. +NOTE 3: Although not explicitly stated, the UE initially considers all functionality to be deactivated/ released until it is explicitly stated that the functionality is setup/ activated. Correspondingly, the UE initially considers lists to be empty e.g. the list of radio bearers, the list of measurements. +1> upon receiving an extension field comprising the entries in addition to the ones carried by the original field (regardless of whether E-UTRAN may signal more entries in total); apply the following generic behaviour if explicitly stated to be applicable: +2> create a combined list by concatenating the additional entries included in the extension field to the original field while maintaining the order among both the original and the additional entries; +2> for the combined list, created according to the previous, apply the same behaviour as defined for the original field; +NOTE 4: A field comprising a list of entries normally includes ‘list’ in the field name. The typical way to extend (the size of) such a list is to introduce a field comprising the additional entries, which should include ‘listExt’ in the name of the field/ IE. E.g. field1List-RAT, field1ListExt-RAT. +5.2 System information +5.2.1 Introduction +5.2.1.1 General +System information is divided into the MasterInformationBlock (MIB) and a number of SystemInformationBlocks (SIBs). The MIB includes a limited number of most essential and most frequently transmitted parameters that are needed to acquire other information from the cell, and is transmitted on BCH. SIBs other than SystemInformationBlockType1 are carried in SystemInformation (SI) messages and mapping of SIBs to SI messages is flexibly configurable by schedulingInfoList included in SystemInformationBlockType1, with restrictions that: each SIB is contained only in a single SI message, and at most once in that message; only SIBs having the same scheduling requirement (periodicity) can be mapped to the same SI message; SystemInformationBlockType2 is always mapped to the SI message that corresponds to the first entry in the list of SI messages in schedulingInfoList. There may be multiple SI messages transmitted with the same periodicity. SystemInformationBlockType1 and all SI messages are transmitted on DL-SCH. +NOTE 1: The physical layer imposes a limit to the maximum size a SIB can take. When DCI format 1C is used the maximum allowed by the physical layer is 1736 bits (217 bytes) while for format 1A the limit is 2216 bits (277 bytes), see TS 36.212 [22] and TS 36.213 [23]. +In addition to broadcasting, E-UTRAN may provide SystemInformationBlockType1, including the same parameter values, via dedicated signalling i.e., within an RRCConnectionReconfiguration message. +The UE applies the system information acquisition and change monitoring procedures for the PCell. For an SCell, E-UTRAN provides, via dedicated signalling, all system information relevant for operation in RRC_CONNECTED when adding the SCell. However, a UE that is configured with DC shall aquire the MasterInformationBlock of the PSCell but use it only to determine the SFN timing of the SCG, which may be different from the MCG. Upon change of the relevant system information of a configured SCell, E-UTRAN releases and subsequently adds the concerned SCell, which may be done with a single RRCConnectionReconfiguration message. If the UE is receiving or interested to receive an MBMS service in a cell, the UE shall apply the system information acquisition and change monitoring procedure to acquire parameters relevant for MBMS operation and apply the parameters acquired from system information only for MBMS operation for this cell. +NOTE 2: E-UTRAN may configure via dedicated signalling different parameter values than the ones broadcast in the concerned SCell. +An RN configured with an RN subframe configuration does not need to apply the system information acquisition and change monitoring procedures. Upon change of any system information relevant to an RN, E-UTRAN provides the system information blocks containing the relevant system information to an RN configured with an RN subframe configuration via dedicated signalling using the RNReconfiguration message. For RNs configured with an RN subframe configuration, the system information contained in this dedicated signalling replaces any corresponding stored system information and takes precedence over any corresponding system information acquired through the system information acquisition procedure. The dedicated system information remains valid until overridden. +NOTE 3: E-UTRAN may configure an RN, via dedicated signalling, with different parameter values than the ones broadcast in the concerned cell. +5.2.1.2 Scheduling +The MIB uses a fixed schedule with a periodicity of 40 ms and repetitions made within 40 ms. The first transmission of the MIB is scheduled in subframe #0 of radio frames for which the SFN mod 4 = 0, and repetitions are scheduled in subframe #0 of all other radio frames. +The SystemInformationBlockType1 uses a fixed schedule with a periodicity of 80 ms and repetitions made within 80 ms. The first transmission of SystemInformationBlockType1 is scheduled in subframe #5 of radio frames for which the SFN mod 8 = 0, and repetitions are scheduled in subframe #5 of all other radio frames for which SFN mod 2 = 0. +The SI messages are transmitted within periodically occurring time domain windows (referred to as SI-windows) using dynamic scheduling. Each SI message is associated with a SI-window and the SI-windows of different SI messages do not overlap. That is, within one SI-window only the corresponding SI is transmitted. The length of the SI-window is common for all SI messages, and is configurable. Within the SI-window, the corresponding SI message can be transmitted a number of times in any subframe other than MBSFN subframes, uplink subframes in TDD, and subframe #5 of radio frames for which SFN mod 2 = 0. The UE acquires the detailed time-domain scheduling (and other information, e.g. frequency-domain scheduling, used transport format) from decoding SI-RNTI on PDCCH (see TS 36.321 [6]). +A single SI-RNTI is used to address SystemInformationBlockType1 as well as all SI messages. +SystemInformationBlockType1 configures the SI-window length and the transmission periodicity for the SI messages. +5.2.1.3 System information validity and notification of changes +Change of system information (other than for ETWS, CMAS and EAB parameters) only occurs at specific radio frames, i.e. the concept of a modification period is used. System information may be transmitted a number of times with the same content within a modification period, as defined by its scheduling. The modification period boundaries are defined by SFN values for which SFN mod m= 0, where m is the number of radio frames comprising the modification period. The modification period is configured by system information. +When the network changes (some of the) system information, it first notifies the UEs about this change, i.e. this may be done throughout a modification period. In the next modification period, the network transmits the updated system information. These general principles are illustrated in figure 5.2.1.3-1, in which different colours indicate different system information. Upon receiving a change notification, the UE acquires the new system information immediately from the start of the next modification period. The UE applies the previously acquired system information until the UE acquires the new system information. + +Figure 5.2.1.3-1: Change of system Information +The Paging message is used to inform UEs in RRC_IDLE and UEs in RRC_CONNECTED about a system information change. If the UE receives a Paging message including the systemInfoModification, it knows that the system information will change at the next modification period boundary. Although the UE may be informed about changes in system information, no further details are provided e.g. regarding which system information will change. +SystemInformationBlockType1 includes a value tag, systemInfoValueTag, that indicates if a change has occurred in the SI messages. UEs may use systemInfoValueTag, e.g. upon return from out of coverage, to verify if the previously stored SI messages are still valid. Additionally, the UE considers stored system information to be invalid after 3 hours from the moment it was successfully confirmed as valid, unless specified otherwise. +E-UTRAN may not update systemInfoValueTag upon change of some system information e.g. ETWS information, CMAS information, regularly changing parameters like time information (SystemInformationBlockType8, SystemInformationBlockType16), EAB parameters. Similarly, E-UTRAN may not include the systemInfoModification within the Paging message upon change of some system information. +The UE verifies that stored system information remains valid by either checking systemInfoValueTag in SystemInformationBlockType1 after the modification period boundary, or attempting to find the systemInfoModification indication at least modificationPeriodCoeff times during the modification period in case no paging is received, in every modification period. If no paging message is received by the UE during a modification period, the UE may assume that no change of system information will occur at the next modification period boundary. If UE in RRC_CONNECTED, during a modification period, receives one paging message, it may deduce from the presence/ absence of systemInfoModification whether a change of system information other than ETWS information, CMAS information and EAB parameters will occur in the next modification period or not. +ETWS and/or CMAS capable UEs in RRC_CONNECTED shall attempt to read paging at least once every defaultPagingCycle to check whether ETWS and/or CMAS notification is present or not. +5.2.1.4 Indication of ETWS notification +ETWS primary notification and/ or ETWS secondary notification can occur at any point in time. The Paging message is used to inform ETWS capable UEs in RRC_IDLE and UEs in RRC_CONNECTED about presence of an ETWS primary notification and/ or ETWS secondary notification. If the UE receives a Paging message including the etws-Indication, it shall start receiving the ETWS primary notification and/ or ETWS secondary notification according to schedulingInfoList contained in SystemInformationBlockType1. If the UE receives Paging message including the etws-Indication while it is acquiring ETWS notification(s), the UE shall continue acquiring ETWS notification(s) based on the previously acquired schedulingInfoList until it re-acquires schedulingInfoList in SystemInformationBlockType1. +NOTE: The UE is not required to periodically check schedulingInfoList contained in SystemInformationBlockType1, but Paging message including the etws-Indication triggers the UE to re-acquire schedulingInfoList contained in SystemInformationBlockType1 for scheduling changes for SystemInformationBlockType10 and SystemInformationBlockType11. The UE may or may not receive a Paging message including the etws-Indication and/or systemInfoModification when ETWS is no longer scheduled. +ETWS primary notification is contained in SystemInformationBlockType10 and ETWS secondary notification is contained in SystemInformationBlockType11. Segmentation can be applied for the delivery of a secondary notification. The segmentation is fixed for transmission of a given secondary notification within a cell (i.e. the same segment size for a given segment with the same messageIdentifier, serialNumber and warningMessageSegmentNumber). An ETWS secondary notification corresponds to a single CB data IE as defined according to TS 23.041 [37]. +5.2.1.5 Indication of CMAS notification +CMAS notification can occur at any point in time. The Paging message is used to inform CMAS capable UEs in RRC_IDLE and UEs in RRC_CONNECTED about presence of one or more CMAS notifications. If the UE receives a Paging message including the cmas-Indication, it shall start receiving the CMAS notifications according to schedulingInfoList contained in SystemInformationBlockType1. If the UE receives Paging message including the cmas-Indication while it is acquiring CMAS notification(s), the UE shall continue acquiring CMAS notification(s) based on the previously acquired schedulingInfoList until it re-acquires schedulingInfoList in SystemInformationBlockType1. +NOTE: The UE is not required to periodically check schedulingInfoList contained in SystemInformationBlockType1, but Paging message including the cmas-Indication triggers the UE to re-acquire schedulingInfoList contained in SystemInformationBlockType1 for scheduling changes for SystemInformationBlockType12. The UE may or may not receive a Paging message including the cmas-Indication and/or systemInfoModification when SystemInformationBlockType12 is no longer scheduled. +CMAS notification is contained in SystemInformationBlockType12. Segmentation can be applied for the delivery of a CMAS notification. The segmentation is fixed for transmission of a given CMAS notification within a cell (i.e. the same segment size for a given segment with the same messageIdentifier, serialNumber and warningMessageSegmentNumber). E-UTRAN does not interleave transmissions of CMAS notifications, i.e. all segments of a given CMAS notification transmission are transmitted prior to those of another CMAS notification. A CMAS notification corresponds to a single CB data IE as defined according to TS 23.041 [37]. +5.2.1.6 Notification of EAB parameters change +Change of EAB parameters can occur at any point in time. The EAB parameters are contained in SystemInformationBlockType14. The Paging message is used to inform EAB capable UEs in RRC_IDLE about a change of EAB parameters or that SystemInformationBlockType14 is no longer scheduled. If the UE receives a Paging message including the eab-ParamModification, it shall acquire SystemInformationBlockType14 according to schedulingInfoList contained in SystemInformationBlockType1. If the UE receives a Paging message including the eab-ParamModification while it is acquiring SystemInformationBlockType14, the UE shall continue acquiring SystemInformationBlockType14 based on the previously acquired schedulingInfoList until it re-acquires schedulingInfoList in SystemInformationBlockType1. +NOTE: The EAB capable UE is not expected to periodically check schedulingInfoList contained in SystemInformationBlockType1. +5.2.2 System information acquisition +5.2.2.1 General + +Figure 5.2.2.1-1: System information acquisition, normal +The UE applies the system information acquisition procedure to acquire the AS- and NAS- system information that is broadcasted by the E-UTRAN. The procedure applies to UEs in RRC_IDLE and UEs in RRC_CONNECTED. +5.2.2.2 Initiation +The UE shall apply the system information acquisition procedure upon selecting (e.g. upon power on) and upon re-selecting a cell, after handover completion, after entering E-UTRA from another RAT, upon return from out of coverage, upon receiving a notification that the system information has changed, upon receiving an indication about the presence of an ETWS notification, upon receiving an indication about the presence of a CMAS notification, upon receiving a notification that the EAB parameters have changed, upon receiving a request from CDMA2000 upper layers and upon exceeding the maximum validity duration. Unless explicitly stated otherwise in the procedural specification, the system information acquisition procedure overwrites any stored system information, i.e. delta configuration is not applicable for system information and the UE discontinues using a field if it is absent in system information unless explicitly specified otherwise. +5.2.2.3 System information required by the UE +The UE shall: +1> ensure having a valid version, as defined below, of (at least) the following system information, also referred to as the 'required' system information: +2> if in RRC_IDLE: +3> the MasterInformationBlock and SystemInformationBlockType1 as well as SystemInformationBlockType2 through SystemInformationBlockType8 (depending on support of the concerned RATs), SystemInformationBlockType17 (depending on support of RAN-assisted WLAN interworking); +2> if in RRC_CONNECTED: +3> the MasterInformationBlock, SystemInformationBlockType1 and SystemInformationBlockType2 as well as SystemInformationBlockType8 (depending on support of CDMA2000), SystemInformationBlockType17 (depending on support of RAN-assisted WLAN interworking); +1> delete any stored system information after 3 hours from the moment it was confirmed to be valid as defined in 5.2.1.3, unless specified otherwise; +1> consider any stored system information except SystemInformationBlockType10, SystemInformationBlockType11, systemInformationBlockType12 and systemInformationBlockType14 to be invalid if systemInfoValueTag included in the SystemInformationBlockType1 is different from the one of the stored system information; +5.2.2.4 System information acquisition by the UE +The UE shall: +1> apply the specified BCCH configuration defined in 9.1.1.1; +1> if the procedure is triggered by a system information change notification: +2> start acquiring the required system information, as defined in 5.2.2.3, from the beginning of the modification period following the one in which the change notification was received; +NOTE 1: The UE continues using the previously received system information until the new system information has been acquired. +1> if the UE is in RRC_IDLE and enters a cell for which the UE does not have stored a valid version of the system information required in RRC_IDLE, as defined in 5.2.2.3: +2> acquire, using the system information acquisition procedure as defined in 5.2.3, the system information required in RRC_IDLE, as defined in 5.2.2.3; +1> following successful handover completion to a PCell for which the UE does not have stored a valid version of the system information required in RRC_CONNECTED, as defined in 5.2.2.3: +2> acquire, using the system information acquisition procedure as defined in 5.2.3, the system information required in RRC_CONNECTED, as defined in 5.2.2.3; +2> upon acquiring the concerned system information: +3> discard the corresponding radio resource configuration information included in the radioResourceConfigCommon previously received in a dedicated message, if any; +1> following a request from CDMA2000 upper layers: +2> acquire SystemInformationBlockType8, as defined in 5.2.3; +1> neither initiate the RRC connection establishment procedure nor initiate transmission of the RRCConnectionReestablishmentRequest message until the UE has a valid version of the MasterInformationBlock and SystemInformationBlockType1 messages as well as SystemInformationBlockType2 ; +1> not initiate the RRC connection establishment subject to EAB until the UE has a valid version of SystemInformationBlockType14, if broadcast; +1> if the UE is ETWS capable: +2> upon entering a cell during RRC_IDLE, following successful handover or upon connection re-establishment: +3> discard any previously buffered warningMessageSegment; +3> clear, if any, the current values of messageIdentifier and serialNumber for SystemInformationBlockType11; +2> when the UE acquires SystemInformationBlockType1 following ETWS indication, upon entering a cell during RRC_IDLE, following successful handover or upon connection re-establishment: +3> if schedulingInfoList indicates that SystemInformationBlockType10 is present: +4> start acquiring SystemInformationBlockType10 immediately; +3> if schedulingInfoList indicates that SystemInformationBlockType11 is present: +4> start acquiring SystemInformationBlockType11 immediately; +NOTE 2: UEs shall start acquiring SystemInformationBlockType10 and SystemInformationBlockType11 as described above even when systemInfoValueTag in SystemInformationBlockType1 has not changed. +1> if the UE is CMAS capable: +2> upon entering a cell during RRC_IDLE, following successful handover or upon connection re-establishment: +3> discard any previously buffered warningMessageSegment; +3> clear, if any, stored values of messageIdentifier and serialNumber for SystemInformationBlockType12 associated with the discarded warningMessageSegment; +2> when the UE acquires SystemInformationBlockType1 following CMAS indication, upon entering a cell during RRC_IDLE, following successful handover and upon connection re-establishment: +3> if schedulingInfoList indicates that SystemInformationBlockType12 is present: +4> acquire SystemInformationBlockType12; +NOTE 3: UEs shall start acquiring SystemInformationBlockType12 as described above even when systemInfoValueTag in SystemInformationBlockType1 has not changed. +1> if the UE is interested to receive MBMS services: +2> if schedulingInfoList indicates that SystemInformationBlockType13 is present and the UE does not have stored a valid version of this system information block: +3> acquire SystemInformationBlockType13; +2> if the UE is capable of MBMS Service Continuity: +3> if schedulingInfoList indicates that SystemInformationBlockType15 is present and the UE does not have stored a valid version of this system information block: +4> acquire SystemInformationBlockType15; +1> if the UE is EAB capable: +2> when the UE does not have stored a valid version of SystemInformationBlockType14 upon entering RRC_IDLE, or when the UE acquires SystemInformationBlockType1 following EAB parameters change notification or upon entering a cell during RRC_IDLE: +3> if schedulingInfoList indicates that SystemInformationBlockType14 is present: +4> start acquiring SystemInformationBlockType14 immediately; +3> else: +4> discard SystemInformationBlockType14, if previously received; +NOTE 4: EAB capable UEs start acquiring SystemInformationBlockType14 as described above even when systemInfoValueTag in SystemInformationBlockType1 has not changed. +NOTE 5: EAB capable UEs maintain an up to date SystemInformationBlockType14 in RRC_IDLE. +1> if the UE is capable of sidelink direct communication and is configured by upper layers to receive or transmit sidelink direct communication: +2> if the cell used for sidelink direct communication meets the S-criteria as defined in TS 36.304 [4]; and +2> if schedulingInfoList indicates that SystemInformationBlockType18 is present and the UE does not have stored a valid version of this system information block: +3> acquire SystemInformationBlockType18; +1> if the UE is capable of sidelink direct discovery and is configured by upper layers to receive or transmit sidelink direct discovery announcements on the primary frequency: +2> if schedulingInfoList indicates that SystemInformationBlockType19 is present and the UE does not have stored a valid version of this system information block: +3> acquire SystemInformationBlockType19; +2> for each of the one or more frequencies included in discInterFreqList, if included in SystemInformationBlockType19 and for which the UE is configured by upper layers to receive sidelink direct discovery announcements on: +3> if schedulingInfoList indicates that SystemInformationBlockType19 is present and the UE does not have stored a valid version of this system information block: +4> acquire SystemInformationBlockType19; +The UE may apply the received SIBs immediately, i.e. the UE does not need to delay using a SIB until all SI messages have been received. The UE may delay applying the received SIBs until completing lower layer procedures associated with a received or a UE originated RRC message, e.g. an ongoing random access procedure. +NOTE 6: While attempting to acquire a particular SIB, if the UE detects from schedulingInfoList that it is no longer present, the UE should stop trying to acquire the particular SIB. +5.2.2.5 Essential system information missing +The UE shall: +1> if in RRC_IDLE or in RRC_CONNECTED while T311 is running: +2> if the UE is unable to acquire the MasterInformationBlock or the SystemInformationBlockType1: +3> consider the cell as barred in accordance with TS 36.304 [4]; and +3> perform barring as if intraFreqReselection is set to allowed, and as if the csg-Indication is set to FALSE; +2> else if the UE is unable to acquire the SystemInformationBlockType2: +3> treat the cell as barred in accordance with TS 36.304 [4]; +5.2.2.6 Actions upon reception of the MasterInformationBlock message +Upon receiving the MasterInformationBlock message the UE shall: +1> apply the radio resource configuration included in the phich-Config; +1> if the UE is in RRC_IDLE or if the UE is in RRC_CONNECTED while T311 is running: +2> if the UE has no valid system information stored according to 5.2.2.3 for the concerned cell: +3> apply the received value of dl-Bandwidth to the ul-Bandwidth until SystemInformationBlockType2 is received; +5.2.2.7 Actions upon reception of the SystemInformationBlockType1 message +Upon receiving the SystemInformationBlockType1 either via broadcast or via dedicated signalling, the UE shall: +1> if in RRC_IDLE or in RRC_CONNECTED while T311 is running; and +1> if the UE is a category 0 UE according to TS 36.306 [5]; and +1> if category0Allowed is not included in SystemInformationBlockType1: +2> consider the cell as barred in accordance with TS 36.304 [4]; +1> if in RRC_CONNECTED while T311 is not running, and the UE supports multi-band cells as defined by bit 31 in featureGroupIndicators: +2> disregard the freqBandIndicator and multiBandInfoList, if received, while in RRC_CONNECTED; +2> forward the cellIdentity to upper layers; +2> forward the trackingAreaCode to upper layers; +1> else: +2> if the frequency band indicated in the freqBandIndicator is part of the frequency bands supported by the UE and it is not a downlink only band; or +2> if the UE supports multiBandInfoList, and if one or more of the frequency bands indicated in the multiBandInfoList are part of the frequency bands supported by the UE and they are not downlink only bands: +3> forward the cellIdentity to upper layers; +3> forward the trackingAreaCode to upper layers; +2> else: +3> consider the cell as barred in accordance with TS 36.304 [4]; and +3> perform barring as if intraFreqReselection is set to notAllowed, and as if the csg-Indication is set to FALSE; +5.2.2.8 Actions upon reception of SystemInformation messages +No UE requirements related to the contents of the SystemInformation messages apply other than those specified elsewhere e.g. within procedures using the concerned system information, and/ or within the corresponding field descriptions. +5.2.2.9 Actions upon reception of SystemInformationBlockType2 +Upon receiving SystemInformationBlockType2, the UE shall: +1> apply the configuration included in the radioResourceConfigCommon; +1> if upper layers indicate that a (UE specific) paging cycle is configured: +2> apply the shortest of the (UE specific) paging cycle and the defaultPagingCycle included in the radioResourceConfigCommon; +1> if the mbsfn-SubframeConfigList is included: +2> consider that DL assignments may occur in the MBSFN subframes indicated in the mbsfn-SubframeConfigList under the conditions specified in [23, 7.1]; +1> apply the specified PCCH configuration defined in 9.1.1.3; +1> not apply the timeAlignmentTimerCommon; +1> if in RRC_CONNECTED and UE is configured with RLF timers and constants values received within rlf-TimersAndConstants: +2> not update its values of the timers and constants in ue-TimersAndConstants except for the value of timer T300; +1> if in RRC_CONNECTED while T311 is not running; and the UE supports multi-band cells as defined by bit 31 in featureGroupIndicators: +2> disregard the additionalSpectrumEmission and ul-CarrierFreq, if received, while in RRC_CONNECTED; +5.2.2.10 Actions upon reception of SystemInformationBlockType3 +No UE requirements related to the contents of this SystemInformationBlock apply other than those specified elsewhere e.g. within procedures using the concerned system information, and/ or within the corresponding field descriptions. +5.2.2.11 Actions upon reception of SystemInformationBlockType4 +No UE requirements related to the contents of this SystemInformationBlock apply other than those specified elsewhere e.g. within procedures using the concerned system information, and/ or within the corresponding field descriptions. +5.2.2.12 Actions upon reception of SystemInformationBlockType5 +No UE requirements related to the contents of this SystemInformationBlock apply other than those specified elsewhere e.g. within procedures using the concerned system information, and/ or within the corresponding field descriptions. +5.2.2.13 Actions upon reception of SystemInformationBlockType6 +No UE requirements related to the contents of this SystemInformationBlock apply other than those specified elsewhere e.g. within procedures using the concerned system information, and/ or within the corresponding field descriptions. +5.2.2.14 Actions upon reception of SystemInformationBlockType7 +No UE requirements related to the contents of this SystemInformationBlock apply other than those specified elsewhere e.g. within procedures using the concerned system information, and/ or within the corresponding field descriptions. +5.2.2.15 Actions upon reception of SystemInformationBlockType8 +Upon receiving SystemInformationBlockType8, the UE shall: +1> if sib8-PerPLMN-List is included and the UE is capable of network sharing for CDMA2000: +2> apply the CDMA2000 parameters below corresponding to the RPLMN; +1> if the systemTimeInfo is included: +2> forward the systemTimeInfo to CDMA2000 upper layers; +1> if the UE is in RRC_IDLE and if searchWindowSize is included: +2> forward the searchWindowSize to CDMA2000 upper layers; +1> if parametersHRPD is included: +2> forward the preRegistrationInfoHRPD to CDMA2000 upper layers only if the UE has not received the preRegistrationInfoHRPD within an RRCConnectionReconfiguration message after entering this cell; +2> if the cellReselectionParametersHRPD is included: +3> forward the neighCellList to the CDMA2000 upper layers; +1> if the parameters1XRTT is included: +2> if the csfb-RegistrationParam1XRTT is included: +3> forward the csfb-RegistrationParam1XRTT to the CDMA2000 upper layers which will use this information to determine if a CS registration/re-registration towards CDMA2000 1xRTT in the EUTRA cell is required; +2> else: +3> indicate to CDMA2000 upper layers that CSFB Registration to CDMA2000 1xRTT is not allowed; +2> if the longCodeState1XRTT is included: +3> forward the longCodeState1XRTT to CDMA2000 upper layers; +2> if the cellReselectionParameters1XRTT is included: +3> forward the neighCellList to the CDMA2000 upper layers; +2> if the csfb-SupportForDualRxUEs is included: +3> forward csfb-SupportForDualRxUEs to the CDMA2000 upper layers; +2> else: +3> forward csfb-SupportForDualRxUEs, with its value set to FALSE, to the CDMA2000 upper layers; +2> if ac-BarringConfig1XRTT is included: +3> forward ac-BarringConfig1XRTT to the CDMA2000 upper layers; +2> if the csfb-DualRxTxSupport is included: +3> forward csfb-DualRxTxSupport to the CDMA2000 upper layers; +2> else: +3> forward csfb-DualRxTxSupport, with its value set to FALSE, to the CDMA2000 upper layers; +5.2.2.16 Actions upon reception of SystemInformationBlockType9 +Upon receiving SystemInformationBlockType9, the UE shall: +1> if hnb-Name is included, forward the hnb-Name to upper layers; +5.2.2.17 Actions upon reception of SystemInformationBlockType10 +Upon receiving SystemInformationBlockType10, the UE shall: +1> forward the received warningType, messageIdentifier and serialNumber to upper layers; +5.2.2.18 Actions upon reception of SystemInformationBlockType11 +Upon receiving SystemInformationBlockType11, the UE shall: +1> if there is no current value for messageIdentifier and serialNumber for SystemInformationBlockType11; or +1> if either the received value of messageIdentifier or of serialNumber or of both are different from the current values of messageIdentifier and serialNumber for SystemInformationBlockType11: +2> use the received values of messageIdentifier and serialNumber for SystemInformationBlockType11 as the current values of messageIdentifier and serialNumber for SystemInformationBlockType11; +2> discard any previously buffered warningMessageSegment; +2> if all segments of a warning message have been received: +3> assemble the warning message from the received warningMessageSegment; +3> forward the received warning message, messageIdentifier, serialNumber and dataCodingScheme to upper layers; +3> stop reception of SystemInformationBlockType11; +3> discard the current values of messageIdentifier and serialNumber for SystemInformationBlockType11; +2> else: +3> store the received warningMessageSegment; +3> continue reception of SystemInformationBlockType11; +1> else if all segments of a warning message have been received: +2> assemble the warning message from the received warningMessageSegment; +2> forward the received complete warning message, messageIdentifier, serialNumber and dataCodingScheme to upper layers; +2> stop reception of SystemInformationBlockType11; +2> discard the current values of messageIdentifier and serialNumber for SystemInformationBlockType11; +1> else: +2> store the received warningMessageSegment; +2> continue reception of SystemInformationBlockType11; +The UE should discard any stored warningMessageSegment and the current value of messageIdentifier and serialNumber for SystemInformationBlockType11 if the complete warning message has not been assembled within a period of 3 hours. +5.2.2.19 Actions upon reception of SystemInformationBlockType12 +Upon receiving SystemInformationBlockType12, the UE shall: +1> if the SystemInformationBlockType12 contains a complete warning message: +2> forward the received warning message, messageIdentifier, serialNumber and dataCodingScheme to upper layers; +2> continue reception of SystemInformationBlockType12; +1> else: +2> if the received values of messageIdentifier and serialNumber are the same (each value is the same) as a pair for which a warning message is currently being assembled: +3> store the received warningMessageSegment; +3> if all segments of a warning message have been received: +4> assemble the warning message from the received warningMessageSegment; +4> forward the received warning message, messageIdentifier, serialNumber and dataCodingScheme to upper layers; +4> stop assembling a warning message for this messageIdentifier and serialNumber and delete all stored information held for it; +3> continue reception of SystemInformationBlockType12; +2> else if the received values of messageIdentifier and/or serialNumber are not the same as any of the pairs for which a warning message is currently being assembled: +3> start assembling a warning message for this messageIdentifier and serialNumber pair; +3> store the received warningMessageSegment; +3> continue reception of SystemInformationBlockType12; +The UE should discard warningMessageSegment and the associated values of messageIdentifier and serialNumber for SystemInformationBlockType12 if the complete warning message has not been assembled within a period of 3 hours. +NOTE: The number of warning messages that a UE can re-assemble simultaneously is a function of UE implementation. +5.2.2.20 Actions upon reception of SystemInformationBlockType13 +No UE requirements related to the contents of this SystemInformationBlock apply other than those specified elsewhere e.g. within procedures using the concerned system information, and/ or within the corresponding field descriptions. +5.2.2.21 Actions upon reception of SystemInformationBlockType14 +No UE requirements related to the contents of this SystemInformationBlock apply other than those specified elsewhere e.g. within procedures using the concerned system information, and/ or within the corresponding field descriptions. +5.2.2.22 Actions upon reception of SystemInformationBlockType15 +No UE requirements related to the contents of this SystemInformationBlock apply other than those specified elsewhere e.g. within procedures using the concerned system information, and/ or within the corresponding field descriptions. +5.2.2.23 Actions upon reception of SystemInformationBlockType16 +No UE requirements related to the contents of this SystemInformationBlock apply other than those specified elsewhere e.g. within procedures using the concerned system information, and/ or within the corresponding field descriptions. +5.2.2.24 Actions upon reception of SystemInformationBlockType17 +Upon receiving SystemInformationBlockType17, the UE shall: +1> if wlan-OffloadConfigCommon corresponding to the RPLMN is included: +2> apply the wlan-Id-List corresponding to the RPLMN; +2> if not configured with the wlan-OffloadConfigDedicated; +3> apply the wlan-OffloadConfigCommon corresponding to the RPLMN; +5.2.2.25 Actions upon reception of SystemInformationBlockType18 +Upon receiving SystemInformationBlockType18, the UE shall: +1> if SystemInformationBlockType18 message includes the commConfig: +2> if configured to receive sidelink direct communication: +3> from the next SC period, as defined by sc-Period, use the resource pool indicated by commRxPool for sidelink direct communication monitoring, as specified in 5.10.3; +2> if configured to transmit sidelink direct communication: +3> from the next SC period, as defined by sc-Period, use the resource pool indicated by commTxPoolNormalCommon or by commTxPoolExceptional for sidelink direct communication transmission, as specified in 5.10.4; +5.2.2.26 Actions upon reception of SystemInformationBlockType19 +Upon receiving SystemInformationBlockType19, the UE shall: +1> if SystemInformationBlockType19 message includes the discConfig: +2> from the next discovery period, as defined by discPeriod, use the resources indicated by discRxPool for sidelink direct discovery monitoring, as specified in 5.10.5; +2> if SystemInformationBlockType19 message includes the discTxPoolCommon; and the UE is in RRC_IDLE: +3> from the next discovery period, as defined by discPeriod, use the resources indicated by discTxPoolCommon for sidelink direct discovery announcement, as specified in 5.10.6; +2> if the SystemInformationBlockType19 message includes the discTxPowerInfo: +3> use the power information included in discTxPowerInfo for sidelink direct discovery transmission, as specified in TS 36.213 [23]; +5.2.3 Acquisition of an SI message +When acquiring an SI message, the UE shall: +1> determine the start of the SI-window for the concerned SI message as follows: +2> for the concerned SI message, determine the number n which corresponds to the order of entry in the list of SI messages configured by schedulingInfoList in SystemInformationBlockType1; +2> determine the integer value x = (n – 1)*w, where w is the si-WindowLength; +2> the SI-window starts at the subframe #a, where a = x mod 10, in the radio frame for which SFN mod T = FLOOR(x/10), where T is the si-Periodicity of the concerned SI message; +NOTE: E-UTRAN should configure an SI-window of 1 ms only if all SIs are scheduled before subframe #5 in radio frames for which SFN mod 2 = 0. +1> receive DL-SCH using the SI-RNTI from the start of the SI-window and continue until the end of the SI-window whose absolute length in time is given by si-WindowLength, or until the SI message was received, excluding the following subframes: +2> subframe #5 in radio frames for which SFN mod 2 = 0; +2> any MBSFN subframes; +2> any uplink subframes in TDD; +1> if the SI message was not received by the end of the SI-window, repeat reception at the next SI-window occasion for the concerned SI message; +5.3 Connection control +5.3.1 Introduction +5.3.1.1 RRC connection control +RRC connection establishment involves the establishment of SRB1. E-UTRAN completes RRC connection establishment prior to completing the establishment of the S1 connection, i.e. prior to receiving the UE context information from the EPC. Consequently, AS security is not activated during the initial phase of the RRC connection. During this initial phase of the RRC connection, the E-UTRAN may configure the UE to perform measurement reporting. However, the UE only accepts a handover message when security has been activated. +NOTE: In case the serving frequency broadcasts multiple overlapping bands, E-UTRAN can only configure measurements after having obtained the UE capabilities, as the measurement configuration needs to be set according to the band selected by the UE. +Upon receiving the UE context from the EPC, E-UTRAN activates security (both ciphering and integrity protection) using the initial security activation procedure. The RRC messages to activate security (command and successful response) are integrity protected, while ciphering is started only after completion of the procedure. That is, the response to the message used to activate security is not ciphered, while the subsequent messages (e.g. used to establish SRB2 and DRBs) are both integrity protected and ciphered. +After having initiated the initial security activation procedure, E-UTRAN initiates the establishment of SRB2 and DRBs, i.e. E-UTRAN may do this prior to receiving the confirmation of the initial security activation from the UE. In any case, E-UTRAN will apply both ciphering and integrity protection for the RRC connection reconfiguration messages used to establish SRB2 and DRBs. E-UTRAN should release the RRC connection if the initial security activation and/ or the radio bearer establishment fails (i.e. security activation and DRB establishment are triggered by a joint S1-procedure, which does not support partial success). +For SRB2 and DRBs, security is always activated from the start, i.e. the E-UTRAN does not establish these bearers prior to activating security. +For some radio configuration fields, a critical extension has been defined. A switch from the original version of the field to the critically extended version is allowed using any connection reconfiguration. The UE reverts to the original version of some critically extended fields upon handover and re-establishment as specified elsewhere in this specification. Otherwise, switching a field from the critically extended version to the original version is only possible using the handover or re-establishment procedure with the full configuration option. +After having initiated the initial security activation procedure, E-UTRAN may configure a UE that supports CA, with one or more SCells in addition to the PCell that was initially configured during connection establishment. The PCell is used to provide the security inputs and upper layer system information (i.e. the NAS mobility information e.g. TAI). SCells are used to provide additional downlink and optionally uplink radio resources. When not configured with DC all SCells the UE is configured with, if any, are part of the MCG. When configured with DC however, some of the SCells are part of a SCG. In this case, user data carried by a DRB may either be transferred via MCG (i.e. MCG-DRB), via SCG (SCG-DRB) or via both MCG and SCG in DL while E-UTRAN configures the CG used in UL (split DRB). An RRC connection reconfiguration message may be used to change the DRB type from MCG-DRB to SCG-DRB or to split DRB, as well as from SCG-DRB or split DRB to MCG-DRB. +SCG change is a synchronous SCG reconfiguration procedure (i.e. involving RA to the PSCell) including reset/ re-establishment of layer 2 and, if SCG DRBs are configured, refresh of security. The procedure is used in a number of different scenarios e.g. SCG establishment, PSCell change, Key refresh, change of DRB type. The UE performs the SCG change related actions upon receiving an RRCConnectionReconfiguration message including mobilityControlInfoSCG, see 5.3.10.10. +The release of the RRC connection normally is initiated by E-UTRAN. The procedure may be used to re-direct the UE to an E-UTRA frequency or an inter-RAT carrier frequency. Only in exceptional cases, as specified within this specification, TS 36.300 [9], TS 36.304 [4] or TS 24.301 [35], may the UE abort the RRC connection, i.e. move to RRC_IDLE without notifying E-UTRAN. +5.3.1.2 Security +AS security comprises of the integrity protection of RRC signalling (SRBs) as well as the ciphering of RRC signalling (SRBs) and user data (DRBs). +RRC handles the configuration of the security parameters which are part of the AS configuration: the integrity protection algorithm, the ciphering algorithm and two parameters, namely the keyChangeIndicator and the nextHopChainingCount, which are used by the UE to determine the AS security keys upon handover and/ or connection re-establishment. +The integrity protection algorithm is common for signalling radio bearers SRB1 and SRB2. The ciphering algorithm is common for all radio bearers (i.e. SRB1, SRB2 and DRBs). Neither integrity protection nor ciphering applies for SRB0. +RRC integrity and ciphering are always activated together, i.e. in one message/ procedure. RRC integrity and ciphering are never de-activated. However, it is possible to switch to a 'NULL' ciphering algorithm (eea0). +The 'NULL' integrity protection algorithm (eia0) is used only for the UE in limited service mode [32, TS33.401]. In case the 'NULL' integrity protection algorithm is used, 'NULL' ciphering algorithm is also used. +NOTE 1: Lower layers discard RRC messages for which the integrity check has failed and indicate the integrity verification check failure to RRC. +The AS applies three different security keys: one for the integrity protection of RRC signalling (KRRCint), one for the ciphering of RRC signalling (KRRCenc) and one for the ciphering of user data (KUPenc). All three AS keys are derived from the KeNB key. The KeNB is based on the KASME key, which is handled by upper layers. +Upon connection establishment new AS keys are derived. No AS-parameters are exchanged to serve as inputs for the derivation of the new AS keys at connection establishment. +The integrity and ciphering of the RRC message used to perform handover is based on the security configuration used prior to the handover and is performed by the source eNB. +The integrity and ciphering algorithms can only be changed upon handover. The four AS keys (KeNB, KRRCint, KRRCenc and KUPenc) change upon every handover and connection re-establishment. The keyChangeIndicator is used upon handover and indicates whether the UE should use the keys associated with the KASME key taken into use with the latest successful NAS SMC procedure. The nextHopChainingCount parameter is used upon handover and connection re-establishment by the UE when deriving the new KeNB that is used to generate KRRCint, KRRCenc and KUPenc (see TS 33.401 [32]). An intra cell handover procedure may be used to change the keys in RRC_CONNECTED. +For each radio bearer an independent counter (COUNT, as specified in TS 36.323 [8]) is maintained for each direction. For each DRB, the COUNT is used as input for ciphering. For each SRB, the COUNT is used as input for both ciphering and integrity protection. It is not allowed to use the same COUNT value more than once for a given security key. In order to limit the signalling overhead, individual messages/ packets include a short sequence number (PDCP SN, as specified in TS 36.323 [8]). In addition, an overflow counter mechanism is used: the hyper frame number (TX_HFN and RX_HFN, as specified in TS 36.323 [8]). The HFN needs to be synchronized between the UE and the eNB. The eNB is responsible for avoiding reuse of the COUNT with the same RB identity and with the same KeNB, e.g. due to the transfer of large volumes of data, release and establishment of new RBs. In order to avoid such re-use, the eNB may e.g. use different RB identities for successive RB establishments, trigger an intra cell handover or an RRC_CONNECTED to RRC_IDLE to RRC_CONNECTED transition. +For each SRB, the value provided by RRC to lower layers to derive the 5-bit BEARER parameter used as input for ciphering and for integrity protection is the value of the corresponding srb-Identity with the MSBs padded with zeroes. +In case of DC, a separate KeNB is used for SCG-DRBs (S-KeNB). This key is derived from the key used for the MCG (KeNB) and an SCG counter that is used to ensure freshness. To refresh the S-KeNB e.g. when the COUNT will wrap around, E-UTRAN employs an SCG change, i.e. an RRCConnectionReconfiguration message including mobilityControlInfoSCG. When performing handover, while at least one SCG-DRB remains configured, both KeNB and S-KeNB are refreshed. In such case E-UTRAN performs handover with SCG change i.e. an RRCConnectionReconfiguration message including both mobilityControlInfo and mobilityControlInfoSCG. The ciphering algorithm is common for all radio bearers within a CG but may be different between MCG and SCG. The ciphering algorithm for SCG DRBs can only be changed upon SCG change. +5.3.1.2a RN security +For RNs, AS security follows the procedures in 5.3.1.2. Furthermore, E-UTRAN may configure per DRB whether or not integrity protection is used. The use of integrity protection may be configured only upon DRB establishment and reconfigured only upon handover or upon the first reconfiguration following RRC connection re-establishment. +To provide integrity protection on DRBs between the RN and the E-UTRAN, the KUPint key is derived from the KeNB key as described in TS33.401 [32]. The same integrity protection algorithm used for SRBs also applies to the DRBs. The KUPint changes at every handover and RRC connection re-establishment and is based on an updated KeNB which is derived by taking into account the nextHopChainingCount. The COUNT value maintained for DRB ciphering is also used for integrity protection, if the integrity protection is configured for the DRB. +5.3.1.3 Connected mode mobility +In RRC_CONNECTED, the network controls UE mobility, i.e. the network decides when the UE shall connect to which E-UTRA cell(s), or inter-RAT cell. For network controlled mobility in RRC_CONNECTED, the PCell can be changed using an RRCConnectionReconfiguration message including the mobilityControlInfo (handover), whereas the SCell(s) can be changed using the RRCConnectionReconfiguration message either with or without the mobilityControlInfo. +An SCG can only be established by using an RRCConnectionReconfiguration message without the mobilityControlInfo, while reconfiguration or release of the SCG can be done using an RRCConnectionReconfiguration message with or without the mobilityControlInfo. In case Random Access to the PSCell is required upon SCG reconfiguration, E-UTRAN employs the SCG change procedure (i.e. an RRCConnectionReconfiguration message including the mobilityControlInfoSCG). The PSCell can only be changed using the SCG change procedure. +The network triggers the handover procedure e.g. based on radio conditions, load. To facilitate this, the network may configure the UE to perform measurement reporting (possibly including the configuration of measurement gaps). The network may also initiate handover blindly, i.e. without having received measurement reports from the UE. +Before sending the handover message to the UE, the source eNB prepares one or more target cells. The source eNB selects the target PCell. The source eNB may also provide the target eNB with a list of best cells on each frequency for which measurement information is available, in order of decreasing RSRP. The source eNB may also include available measurement information for the cells provided in the list. The target eNB decides which SCells are configured for use after handover, which may include cells other than the ones indicated by the source eNB. Handover involves either SCG release or SCG change. The latter option is only supported in case of intra-eNB handover. In case the UE was configured with DC, the target eNB indicates in the handover message that the UE shall release the entire SCG configuration. Upon connection re-establishment, the UE releases the entire SCG configuration except for the DRB configuration, while E-UTRAN in the first reconfiguration message following the re-establishment either releases the DRB(s) or reconfigures the DRB(s) to MCG DRB(s). +The target eNB generates the message used to perform the handover, i.e. the message including the AS-configuration to be used in the target cell(s). The source eNB transparently (i.e. does not alter values/ content) forwards the handover message/ information received from the target to the UE. When appropriate, the source eNB may initiate data forwarding for (a subset of) the DRBs. +After receiving the handover message, the UE attempts to access the target PCell at the first available RACH occasion according to Random Access resource selection defined in TS 36.321 [6], i.e. the handover is asynchronous. Consequently, when allocating a dedicated preamble for the random access in the target PCell, E-UTRA shall ensure it is available from the first RACH occasion the UE may use. Upon successful completion of the handover, the UE sends a message used to confirm the handover. +If the target eNB does not support the release of RRC protocol which the source eNB used to configure the UE, the target eNB may be unable to comprehend the UE configuration provided by the source eNB. In this case, the target eNB should use the full configuration option to reconfigure the UE for Handover and Re-establishment. Full configuration option includes an initialization of the radio configuration, which makes the procedure independent of the configuration used in the source cell(s) with the exception that the security algorithms are continued for the RRC re-establishment. +After the successful completion of handover, PDCP SDUs may be re-transmitted in the target cell(s). This only applies for DRBs using RLC-AM mode and for handovers not involving full configuration option. The further details are specified in TS 36.323 [8]. After the successful completion of handover not involving full configuration option, the SN and the HFN are reset except for the DRBs using RLC-AM mode (for which both SN and HFN continue). For reconfigurations involving the full configuration option, the PDCP entities are newly established (SN and HFN do not continue) for all DRBs irrespective of the RLC mode. The further details are specified in TS 36.323 [8]. +One UE behaviour to be performed upon handover is specified, i.e. this is regardless of the handover procedures used within the network (e.g. whether the handover includes X2 or S1 signalling procedures). +The source eNB should, for some time, maintain a context to enable the UE to return in case of handover failure. After having detected handover failure, the UE attempts to resume the RRC connection either in the source PCell or in another cell using the RRC re-establishment procedure. This connection resumption succeeds only if the accessed cell is prepared, i.e. concerns a cell of the source eNB or of another eNB towards which handover preparation has been performed. The cell in which the re-establishment procedure succeeds becomes the PCell while SCells and STAGs, if configured, are released. +Normal measurement and mobility procedures are used to support handover to cells broadcasting a CSG identity. In addition, E-UTRAN may configure the UE to report that it is entering or leaving the proximity of cell(s) included in its CSG whitelist. Furthermore, E-UTRAN may request the UE to provide additional information broadcast by the handover candidate cell e.g. global cell identity, CSG identity, CSG membership status. +NOTE: E-UTRAN may use the ‘proximity report’ to configure measurements as well as to decide whether or not to request additional information broadcast by the handover candidate cell. The additional information is used to verify whether or not the UE is authorised to access the target PCell and may also be needed to identify handover candidate cell (PCI confusion i.e. when the physical layer identity that is included in the measurement report does not uniquely identify the cell). + +5.3.2 Paging +5.3.2.1 General + +Figure 5.3.2.1-1: Paging +The purpose of this procedure is: +- to transmit paging information to a UE in RRC_IDLE and/ or; +- to inform UEs in RRC_IDLE and UEs in RRC_CONNECTED about a system information change and/ or; +- to inform about an ETWS primary notification and/ or ETWS secondary notification and/ or; +- to inform about a CMAS notification and/ or; +- to inform UEs in RRC_IDLE about an EAB parameters modification. +The paging information is provided to upper layers, which in response may initiate RRC connection establishment, e.g. to receive an incoming call. +5.3.2.2 Initiation +E-UTRAN initiates the paging procedure by transmitting the Paging message at the UE's paging occasion as specified in TS 36.304 [4]. E-UTRAN may address multiple UEs within a Paging message by including one PagingRecord for each UE. E-UTRAN may also indicate a change of system information, and/ or provide an ETWS notification or a CMAS notification in the Paging message. +5.3.2.3 Reception of the Paging message by the UE +Upon receiving the Paging message, the UE shall: +1> if in RRC_IDLE, for each of the PagingRecord, if any, included in the Paging message: +2> if the ue-Identity included in the PagingRecord matches one of the UE identities allocated by upper layers: +3> forward the ue-Identity and the cn-Domain to the upper layers; +1> if the systemInfoModification is included: +2> re-acquire the required system information using the system information acquisition procedure as specified in 5.2.2. +1> if the etws-Indication is included and the UE is ETWS capable: +2> re-acquire SystemInformationBlockType1 immediately, i.e., without waiting until the next system information modification period boundary; +2> if the schedulingInfoList indicates that SystemInformationBlockType10 is present: +3> acquire SystemInformationBlockType10; +2> if the schedulingInfoList indicates that SystemInformationBlockType11 is present: +3> acquire SystemInformationBlockType11; +1> if the cmas-Indication is included and the UE is CMAS capable: +2> re-acquire SystemInformationBlockType1 immediately, i.e., without waiting until the next system information modification period boundary as specified in 5.2.1.5; +2> if the schedulingInfoList indicates that SystemInformationBlockType12 is present: +3> acquire SystemInformationBlockType12; +1> if in RRC_IDLE, the eab-ParamModification is included and the UE is EAB capable: +2> consider previously stored SystemInformationBlockType14 as invalid; +2> re-acquire SystemInformationBlockType1 immediately, i.e., without waiting until the next system information modification period boundary as specified in 5.2.1.6; +2> re-acquire SystemInformationBlockType14 using the system information acquisition procedure as specified in 5.2.2.4; +5.3.3 RRC connection establishment +5.3.3.1 General + +Figure 5.3.3.1-1: RRC connection establishment, successful + +Figure 5.3.3.1-2: RRC connection establishment, network reject +The purpose of this procedure is to establish an RRC connection. RRC connection establishment involves SRB1 establishment. The procedure is also used to transfer the initial NAS dedicated information/ message from the UE to E-UTRAN. +E-UTRAN applies the procedure as follows: +- to establish SRB1 only. +5.3.3.1a Conditions for establishing RRC Connection for sidelink direct communication/ discovery +For sidelink direct communication an RRC connection is initiated only in the following case: +1> if configured by upper layers to transmit sidelink direct communication and related data is available for transmission: +2> if SystemInformationBlockType18 is broadcast by the cell on which the UE camps; and if the valid version of SystemInformationBlockType18 does not include commTxPoolNormalCommon; +For sidelink direct discovery an RRC connection is initiated only in the following case: +1> if configured by upper layers to transmit sidelink direct discovery announcements: +2> if SystemInformationBlockType19 is broadcast by the cell on which the UE camps: and if the valid version of SystemInformationBlockType19 does not include discTxPoolCommon; +NOTE: Upper layers initiate an RRC connection. The interaction with NAS is left to UE implementation. +5.3.3.2 Initiation +The UE initiates the procedure when upper layers request establishment of an RRC connection while the UE is in RRC_IDLE. +Upon initiation of the procedure, the UE shall: +1> if SystemInformationBlockType2 includes ac-BarringPerPLMN-List and the ac-BarringPerPLMN-List contains an AC-BarringPerPLMN entry with the plmn-IdentityIndex corresponding to the PLMN selected by upper layers (see TS 23.122 [11], TS 24.301 [35]): +2> select the AC-BarringPerPLMN entry with the plmn-IdentityIndex corresponding to the PLMN selected by upper layers; +2> in the remainder of this procedure, use the selected AC-BarringPerPLMN entry (i.e. presence or absence of access barring parameters in this entry) irrespective of the common access barring parameters included in SystemInformationBlockType2; +1> else +2> in the remainder of this procedure use the common access barring parameters (i.e. presence or absence of these parameters) included in SystemInformationBlockType2; +1> if upper layers indicate that the RRC connection is subject to EAB (see TS 24.301 [35]): +2> if the result of the EAB check, as specified in 5.3.3.12, is that access to the cell is barred: +3> inform upper layers about the failure to establish the RRC connection and that EAB is applicable, upon which the procedure ends; +1> if the UE is establishing the RRC connection for mobile terminating calls: +2> if timer T302 is running: +3> inform upper layers about the failure to establish the RRC connection and that access barring for mobile terminating calls is applicable, upon which the procedure ends; +1> else if the UE is establishing the RRC connection for emergency calls: +2> if SystemInformationBlockType2 includes the ac-BarringInfo: +3> if the ac-BarringForEmergency is set to TRUE: +4> if the UE has one or more Access Classes, as stored on the USIM, with a value in the range 11..15, which is valid for the UE to use according to TS 22.011 [10] and TS 23.122 [11]: +NOTE 1: ACs 12, 13, 14 are only valid for use in the home country and ACs 11, 15 are only valid for use in the HPLMN/ EHPLMN. +5> if the ac-BarringInfo includes ac-BarringForMO-Data, and for all of these valid Access Classes for the UE, the corresponding bit in the ac-BarringForSpecialAC contained in ac-BarringForMO-Data is set to one: +6> consider access to the cell as barred; +4> else: +5> consider access to the cell as barred; +2> if access to the cell is barred: +3> inform upper layers about the failure to establish the RRC connection, upon which the procedure ends; +1> else if the UE is establishing the RRC connection for mobile originating calls: +2> perform access barring check as specified in 5.3.3.11, using T303 as "Tbarring" and ac-BarringForMO-Data as "AC barring parameter"; +2> if access to the cell is barred: +3> if SystemInformationBlockType2 includes ac-BarringForCSFB or the UE does not support CS fallback: +4> inform upper layers about the failure to establish the RRC connection and that access barring for mobile originating calls is applicable, upon which the procedure ends; +3> else (SystemInformationBlockType2 does not include ac-BarringForCSFB and the UE supports CS fallback): +4> if timer T306 is not running, start T306 with the timer value of T303; +4> inform upper layers about the failure to establish the RRC connection and that access barring for mobile originating calls and mobile originating CS fallback is applicable, upon which the procedure ends; +1> else if the UE is establishing the RRC connection for mobile originating signalling: +2> perform access barring check as specified in 5.3.3.11, using T305 as "Tbarring" and ac-BarringForMO-Signalling as "AC barring parameter"; +2> if access to the cell is barred: +3> inform upper layers about the failure to establish the RRC connection and that access barring for mobile originating signalling is applicable, upon which the procedure ends; +1> else if the UE is establishing the RRC connection for mobile originating CS fallback: +2> if SystemInformationBlockType2 includes ac-BarringForCSFB: +3> perform access barring check as specified in 5.3.3.11, using T306 as "Tbarring" and ac-BarringForCSFB as "AC barring parameter"; +3> if access to the cell is barred: +4> inform upper layers about the failure to establish the RRC connection and that access barring for mobile originating CS fallback is applicable, due to ac-BarringForCSFB, upon which the procedure ends; +2> else: +3> perform access barring check as specified in 5.3.3.11, using T306 as "Tbarring" and ac-BarringForMO-Data as "AC barring parameter"; +3> if access to the cell is barred: +4> if timer T303 is not running, start T303 with the timer value of T306; +4> inform upper layers about the failure to establish the RRC connection and that access barring for mobile originating CS fallback and mobile originating calls is applicable, due to ac-BarringForMO-Data, upon which the procedure ends; +1> else if the UE is establishing the RRC connection for mobile originating MMTEL voice, mobile originating MMTEL video, mobile originating SMSoIP or mobile originating SMS: +2> if the UE is establishing the RRC connection for mobile originating MMTEL voice and SystemInformationBlockType2 includes ac-BarringSkipForMMTELVoice; or +2> if the UE is establishing the RRC connection for mobile originating MMTEL video and SystemInformationBlockType2 includes ac-BarringSkipForMMTELVideo; or +2> if the UE is establishing the RRC connection for mobile originating SMSoIP or SMS and SystemInformationBlockType2 includes ac-BarringSkipForSMS: +3> consider access to the cell as not barred; +2> else: +3> if establishmentCause is set to mo-Signalling: +4> perform access barring check as specified in 5.3.3.11, using T305 as "Tbarring" and ac-BarringForMO-Signalling as "AC barring parameter"; +4> if access to the cell is barred: +5> inform upper layers about the failure to establish the RRC connection and that access barring for mobile originating signalling is applicable, upon which the procedure ends; +3> if establishmentCause is set to mo-Data: +4> perform access barring check as specified in 5.3.3.11, using T303 as "Tbarring" and ac-BarringForMO-Data as "AC barring parameter"; +4> if access to the cell is barred: +5> if SystemInformationBlockType2 includes ac-BarringForCSFB or the UE does not support CS fallback: +6> inform upper layers about the failure to establish the RRC connection and that access barring for mobile originating calls is applicable, upon which the procedure ends; +5> else (SystemInformationBlockType2 does not include ac-BarringForCSFB and the UE supports CS fallback): +6> if timer T306 is not running, start T306 with the timer value of T303; +6> inform upper layers about the failure to establish the RRC connection and that access barring for mobile originating calls and mobile originating CS fallback is applicable, upon which the procedure ends; +1> apply the default physical channel configuration as specified in 9.2.4; +1> apply the default semi-persistent scheduling configuration as specified in 9.2.3; +1> apply the default MAC main configuration as specified in 9.2.2; +1> apply the CCCH configuration as specified in 9.1.1.2; +1> apply the timeAlignmentTimerCommon included in SystemInformationBlockType2; +1> start timer T300; +1> initiate transmission of the RRCConnectionRequest message in accordance with 5.3.3.3; +NOTE 2: Upon initiating the connection establishment procedure, the UE is not required to ensure it maintains up to date system information applicable only for UEs in RRC_IDLE state. However, the UE needs to perform system information acquisition upon cell re-selection. +5.3.3.3 Actions related to transmission of RRCConnectionRequest message +The UE shall set the contents of RRCConnectionRequest message as follows: +1> set the ue-Identity as follows: +2> if upper layers provide an S-TMSI: +3> set the ue-Identity to the value received from upper layers; +2> else: +3> draw a random value in the range 0 .. 240-1 and set the ue-Identity to this value; +NOTE 1: Upper layers provide the S-TMSI if the UE is registered in the TA of the current cell. +1> set the establishmentCause in accordance with the information received from upper layers; +The UE shall submit the RRCConnectionRequest message to lower layers for transmission. +The UE shall continue cell re-selection related measurements as well as cell re-selection evaluation. If the conditions for cell re-selection are fulfilled, the UE shall perform cell re-selection as specified in 5.3.3.5. +5.3.3.4 Reception of the RRCConnectionSetup by the UE +NOTE: Prior to this, lower layer signalling is used to allocate a C-RNTI. For further details see TS 36.321 [6]; +The UE shall: +1> perform the radio resource configuration procedure in accordance with the received radioResourceConfigDedicated and as specified in 5.3.10; +1> if stored, discard the cell reselection priority information provided by the idleModeMobilityControlInfo or inherited from another RAT; +1> stop timer T300; +1> stop timer T302, if running; +1> stop timer T303, if running; +1> stop timer T305, if running; +1> stop timer T306, if running; +1> perform the actions as specified in 5.3.3.7; +1> stop timer T320, if running; +1> stop timer T350, if running; +1> perform the actions as specified in 5.6.12.4; +1> enter RRC_CONNECTED; +1> stop the cell re-selection procedure; +1> consider the current cell to be the PCell; +1> set the content of RRCConnectionSetupComplete message as follows: +2> set the selectedPLMN-Identity to the PLMN selected by upper layers (see TS 23.122 [11], TS 24.301 [35]) from the PLMN(s) included in the plmn-IdentityList in SystemInformationBlockType1; +2> if upper layers provide the 'Registered MME', include and set the registeredMME as follows: +3> if the PLMN identity of the 'Registered MME' is different from the PLMN selected by the upper layers: +4> include the plmnIdentity in the registeredMME and set it to the value of the PLMN identity in the 'Registered MME' received from upper layers; +3> set the mmegi and the mmec to the value received from upper layers; +2> if upper layers provided the 'Registered MME': +3> include and set the gummei-Type to the value provided by the upper layers; +2> if connecting as an RN: +3> include the rn-SubframeConfigReq; +2> set the dedicatedInfoNAS to include the information received from upper layers; +2> if the UE has radio link failure or handover failure information available in VarRLF-Report and if the RPLMN is included in plmn-IdentityList stored in VarRLF-Report: +3> include rlf-InfoAvailable; +2> if the UE has MBSFN logged measurements available for E-UTRA and if the RPLMN is included in plmn-IdentityList stored in VarLogMeasReport: +3> include logMeasAvailableMBSFN; +2> else if the UE has logged measurements available for E-UTRA and if the RPLMN is included in plmn-IdentityList stored in VarLogMeasReport: +3> include logMeasAvailable; +2> if the UE has connection establishment failure information available in VarConnEstFailReport and if the RPLMN is equal to plmn-Identity stored in VarConnEstFailReport: +3> include connEstFailInfoAvailable; +2> if the UE supports mobility state reporting: +3> include the mobilityState and set it to the mobility state (as specified in TS 36.304 [4]) of the UE just prior to entering RRC_CONNECTED state; +2> if the UE supports storage of mobility history information and the UE has mobility history information available in VarMobilityHistoryReport: +3> include the mobilityHistoryAvail; +2> submit the RRCConnectionSetupComplete message to lower layers for transmission, upon which the procedure ends; +5.3.3.5 Cell re-selection while T300, T302, T303, T305 or T306 is running +The UE shall: +1> if cell reselection occurs while T300, T302, T303, T305 or T306 is running: +2> if timer T302, T303, T305 and/ or T306 is running: +3> stop timer T302, T303, T305 and T306, whichever ones were running; +3> perform the actions as specified in 5.3.3.7; +2> if timer T300 is running: +3> stop timer T300; +3> reset MAC, release the MAC configuration and re-establish RLC for all RBs that are established; +3> inform upper layers about the failure to establish the RRC connection; +5.3.3.6 T300 expiry +The UE shall: +1> if timer T300 expires: +2> reset MAC, release the MAC configuration and re-establish RLC for all RBs that are established; +2> if the UE supports RRC Connection Establishment failure temporary Qoffset and T300 has expired a consecutive connEstFailCount times on the same cell for which txFailParams is included in SystemInformationBlockType2: +3> for a period as indicated by connEstFailOffsetValidity: +4> use connEstFailOffset for the parameter Qoffsettemp for the concerned cell when performing cell selection and reselection according to TS 36.304 [4] and TS 25.304 [40]; +NOTE 1: When performing cell selection, if no suitable or acceptable cell can be found, it is up to UE implementation whether to stop using connEstFailOffset for the parameter Qoffsettemp during connEstFailOffsetValidity for the concerned cell. +2> store the following connection establishment failure information in the VarConnEstFailReport by setting its fields as follows: +3> clear the information included in VarConnEstFailReport, if any; +3> set the plmn-Identity to the PLMN selected by upper layers (see TS 23.122 [11], TS 24.301 [35]) from the PLMN(s) included in the plmn-IdentityList in SystemInformationBlockType1; +3> set the failedCellId to the global cell identity of the cell where connection establishment failure is detected; +3> set the measResultFailedCell to include the RSRP and RSRQ, if available, of the cell where connection establishment failure is detected and based on measurements collected up to the moment the UE detected the failure; +3> if available, set the measResultNeighCells, in order of decreasing ranking-criterion as used for cell re-selection, to include neighbouring cell measurements for at most the following number of neighbouring cells: 6 intra-frequency and 3 inter-frequency neighbours per frequency as well as 3 inter-RAT neighbours, per frequency/ set of frequencies (GERAN) per RAT and according to the following: +4> for each neighbour cell included, include the optional fields that are available; +NOTE 2: The UE includes the latest results of the available measurements as used for cell reselection evaluation, which are performed in accordance with the performance requirements as specified in TS 36.133 [16]. +3> if detailed location information is available, set the content of the locationInfo as follows: +4> include the locationCoordinates; +4> include the horizontalVelocity, if available; +3> set the numberOfPreamblesSent to indicate the number of preambles sent by MAC for the failed random access procedure; +3> set contentionDetected to indicate whether contention resolution was not successful as specified in TS 36.321 [6] for at least one of the transmitted preambles for the failed random access procedure; +3> set maxTxPowerReached to indicate whether or not the maximum power level was used for the last transmitted preamble, see TS 36.321 [6]; +2> inform upper layers about the failure to establish the RRC connection, upon which the procedure ends; +The UE may discard the connection establishment failure information, i.e. release the UE variable VarConnEstFailReport, 48 hours after the failure is detected, upon power off or upon detach. +5.3.3.7 T302, T303, T305 or T306 expiry or stop +The UE shall: +1> if timer T302 expires or is stopped: +2> inform upper layers about barring alleviation for mobile terminating access; +2> if timer T303 is not running: +3> inform upper layers about barring alleviation for mobile originating calls; +2> if timer T305 is not running: +3> inform upper layers about barring alleviation for mobile originating signalling; +2> if timer T306 is not running: +3> inform upper layers about barring alleviation for mobile originating CS fallback; +1> if timer T303 expires or is stopped: +2> if timer T302 is not running: +3> inform upper layers about barring alleviation for mobile originating calls; +1> if timer T305 expires or is stopped: +2> if timer T302 is not running: +3> inform upper layers about barring alleviation for mobile originating signalling; +1> if timer T306 expires or is stopped: +2> if timer T302 is not running: +3> inform upper layers about barring alleviation for mobile originating CS fallback; +5.3.3.8 Reception of the RRCConnectionReject by the UE +The UE shall: +1> stop timer T300; +1> reset MAC and release the MAC configuration; +1> start timer T302, with the timer value set to the waitTime; +1> if the extendedWaitTime is present and the UE supports delay tolerant access: +2> forward the extendedWaitTime to upper layers; +1> if deprioritisationReq is included and the UE supports RRC Connection Reject with deprioritisation: +2> start or restart timer T325 with the timer value set to the deprioritisationTimer signalled; +2> store the deprioritisationReq until T325 expiry; +NOTE: The UE stores the deprioritisation request irrespective of any cell reselection absolute priority assignments (by dedicated or common signalling) and regardless of RRC connections in E-UTRAN or other RATs unless specified otherwise. +1> inform upper layers about the failure to establish the RRC connection and that access barring for mobile originating calls, mobile originating signalling, mobile terminating access and mobile originating CS fallback is applicable, upon which the procedure ends; +5.3.3.9 Abortion of RRC connection establishment +If upper layers abort the RRC connection establishment procedure while the UE has not yet entered RRC_CONNECTED, the UE shall: +1> stop timer T300, if running; +1> reset MAC, release the MAC configuration and re-establish RLC for all RBs that are established; +5.3.3.10 Handling of SSAC related parameters +Upon request from the upper layers, the UE shall: +1> if SystemInformationBlockType2 includes ac-BarringPerPLMN-List and the ac-BarringPerPLMN-List contains an AC-BarringPerPLMN entry with the plmn-IdentityIndex corresponding to the PLMN selected by upper layers (see TS 23.122 [11], TS 24.301 [35]): +2> select the AC-BarringPerPLMN entry with the plmn-IdentityIndex corresponding to the PLMN selected by upper layers; +2> in the remainder of this procedure, use the selected AC-BarringPerPLMN entry (i.e. presence or absence of access barring parameters in this entry) irrespective of the common access barring parameters included in SystemInformationBlockType2; +1> else: +2> in the remainder of this procedure use the common access barring parameters (i.e. presence or absence of these parameters) included in SystemInformationBlockType2; +1> set the local variables BarringFactorForMMTEL-Voice and BarringTimeForMMTEL-Voice as follows: +2> if ssac-BarringForMMTEL-Voice is present: +3> if the UE has one or more Access Classes, as stored on the USIM, with a value in the range 11..15, which is valid for the UE to use according to TS 22.011 [10] and TS 23.122 [11], and +NOTE: ACs 12, 13, 14 are only valid for use in the home country and ACs 11, 15 are only valid for use in the HPLMN/ EHPLMN. +3> if, for at least one of these Access Classes, the corresponding bit in the ac-BarringForSpecialAC contained in ssac-BarringForMMTEL-Voice is set to zero: +4> set BarringFactorForMMTEL-Voice to one and BarringTimeForMMTEL-Voice to zero; +3> else: +4> set BarringFactorForMMTEL-Voice and BarringTimeForMMTEL-Voice to the value of ac-BarringFactor and ac-BarringTime included in ssac-BarringForMMTEL-Voice, respectively; +2> else set BarringFactorForMMTEL-Voice to one and BarringTimeForMMTEL-Voice to zero; +1> set the local variables BarringFactorForMMTEL-Video and BarringTimeForMMTEL-Video as follows: +2> if ssac-BarringForMMTEL-Video is present: +3> if the UE has one or more Access Classes, as stored on the USIM, with a value in the range 11..15, which is valid for the UE to use according to TS 22.011 [10] and TS 23.122 [11], and +3> if, for at least one of these Access Classes, the corresponding bit in the ac-BarringForSpecialAC contained in ssac-BarringForMMTEL-Video is set to zero: +4> set BarringFactorForMMTEL-Video to one and BarringTimeForMMTEL-Video to zero; +3> else: +4> set BarringFactorForMMTEL-Video and BarringTimeForMMTEL-Video to the value of ac-BarringFactor and ac-BarringTime included in ssac-BarringForMMTEL-Video, respectively; +2> else set BarringFactorForMMTEL-Video to one and BarringTimeForMMTEL-Video to zero; +1> forward the variables BarringFactorForMMTEL-Voice, BarringTimeForMMTEL-Voice, BarringFactorForMMTEL-Video and BarringTimeForMMTEL-Video to the upper layers; +5.3.3.11 Access barring check +1> if timer T302 or "Tbarring" is running: +2> consider access to the cell as barred; +1> else if SystemInformationBlockType2 includes "AC barring parameter": +2> if the UE has one or more Access Classes, as stored on the USIM, with a value in the range 11..15, which is valid for the UE to use according to TS 22.011 [10] and TS 23.122 [11], and +NOTE: ACs 12, 13, 14 are only valid for use in the home country and ACs 11, 15 are only valid for use in the HPLMN/ EHPLMN. +2> for at least one of these valid Access Classes the corresponding bit in the ac-BarringForSpecialAC contained in "AC barring parameter" is set to zero: +3> consider access to the cell as not barred; +2> else: +3> draw a random number 'rand' uniformly distributed in the range: 0 ? rand < 1; +3> if 'rand' is lower than the value indicated by ac-BarringFactor included in "AC barring parameter": +4> consider access to the cell as not barred; +3> else: +4> consider access to the cell as barred; +1> else: +2> consider access to the cell as not barred; +1> if access to the cell is barred and both timers T302 and "Tbarring" are not running: +2> draw a random number 'rand' that is uniformly distributed in the range 0 ? rand < 1; +2> start timer "Tbarring" with the timer value calculated as follows, using the ac-BarringTime included in "AC barring parameter": + "Tbarring" = (0.7+ 0.6 * rand) * ac-BarringTime. +5.3.3.12 EAB check +The UE shall: +1> if SystemInformationBlockType14 is present and includes the eab-Param: +2> if the eab-Common is included in the eab-Param: +3> if the UE belongs to the category of UEs as indicated in the eab-Category contained in eab-Common; and +3> if for the Access Class of the UE, as stored on the USIM and with a value in the range 0..9, the corresponding bit in the eab-BarringBitmap contained in eab-Common is set to one: +4> consider access to the cell as barred; +3> else: +4> consider access to the cell as not barred due to EAB; +2> else (the eab-PerPLMN-List is included in the eab-Param): +3> select the entry in the eab-PerPLMN-List corresponding to the PLMN selected by upper layers (see TS 23.122 [11], TS 24.301 [35]); +3> if the eab-Config for that PLMN is included: +4> if the UE belongs to the category of UEs as indicated in the eab-Category contained in eab-Config; and +4> if for the Access Class of the UE, as stored on the USIM and with a value in the range 0..9, the corresponding bit in the eab-BarringBitmap contained in eab-Config is set to one: +5> consider access to the cell as barred; +4> else: +5> consider access to the cell as not barred due to EAB; +3> else: +4> consider access to the cell as not barred due to EAB; +1> else: +2> consider access to the cell as not barred due to EAB; +5.3.4 Initial security activation +5.3.4.1 General + +Figure 5.3.4.1-1: Security mode command, successful + +Figure 5.3.4.1-2: Security mode command, failure +The purpose of this procedure is to activate AS security upon RRC connection establishment. +5.3.4.2 Initiation +E-UTRAN initiates the security mode command procedure to a UE in RRC_CONNECTED. Moreover, E-UTRAN applies the procedure as follows: +- when only SRB1 is established, i.e. prior to establishment of SRB2 and/ or DRBs. +5.3.4.3 Reception of the SecurityModeCommand by the UE +The UE shall: +1> derive the KeNB key, as specified in TS 33.401 [32]; +1> derive the KRRCint key associated with the integrityProtAlgorithm indicated in the SecurityModeCommand message, as specified in TS 33.401 [32]; +1> request lower layers to verify the integrity protection of the SecurityModeCommand message, using the algorithm indicated by the integrityProtAlgorithm as included in the SecurityModeCommand message and the KRRCint key; +1> if the SecurityModeCommand message passes the integrity protection check: +2> derive the KRRCenc key and the KUPenc key associated with the cipheringAlgorithm indicated in the SecurityModeCommand message, as specified in TS 33.401 [32]; +2> if connected as an RN: +3> derive the KUPint key associated with the integrityProtAlgorithm indicated in the SecurityModeCommand message, as specified in TS 33.401 [32]; +2> configure lower layers to apply integrity protection using the indicated algorithm and the KRRCint key immediately, i.e. integrity protection shall be applied to all subsequent messages received and sent by the UE, including the SecurityModeComplete message; +2> configure lower layers to apply ciphering using the indicated algorithm, the KRRCenc key and the KUPenc key after completing the procedure, i.e. ciphering shall be applied to all subsequent messages received and sent by the UE, except for the SecurityModeComplete message which is sent unciphered; +2> if connected as an RN: +3> configure lower layers to apply integrity protection using the indicated algorithm and the KUPint key, for DRBs that are subsequently configured to apply integrity protection, if any; +2> consider AS security to be activated; +2> submit the SecurityModeComplete message to lower layers for transmission, upon which the procedure ends; +1> else: +2> continue using the configuration used prior to the reception of the SecurityModeCommand message, i.e. neither apply integrity protection nor ciphering. +2> submit the SecurityModeFailure message to lower layers for transmission, upon which the procedure ends; +5.3.5 RRC connection reconfiguration +5.3.5.1 General + +Figure 5.3.5.1-1: RRC connection reconfiguration, successful + +Figure 5.3.5.1-2: RRC connection reconfiguration, failure +The purpose of this procedure is to modify an RRC connection, e.g. to establish/ modify/ release RBs, to perform handover, to setup/ modify/ release measurements, to add/ modify/ release SCells. As part of the procedure, NAS dedicated information may be transferred from E-UTRAN to the UE. +5.3.5.2 Initiation +E-UTRAN may initiate the RRC connection reconfiguration procedure to a UE in RRC_CONNECTED. E-UTRAN applies the procedure as follows: +- the mobilityControlInfo is included only when AS-security has been activated, and SRB2 with at least one DRB are setup and not suspended; +- the establishment of RBs (other than SRB1, that is established during RRC connection establishment) is included only when AS security has been activated; +- the addition of SCells is performed only when AS security has been activated; +5.3.5.3 Reception of an RRCConnectionReconfiguration not including the mobilityControlInfo by the UE +If the RRCConnectionReconfiguration message does not include the mobilityControlInfo and the UE is able to comply with the configuration included in this message, the UE shall: +1> if this is the first RRCConnectionReconfiguration message after successful completion of the RRC Connection Re-establishment procedure: +2> re-establish PDCP for SRB2 and for all DRBs that are established, if any; +2> re-establish RLC for SRB2 and for all DRBs that are established, if any; +2> if the RRCConnectionReconfiguration message includes the fullConfig: +3> perform the radio configuration procedure as specified in section 5.3.5.8; +2> if the RRCConnectionReconfiguration message includes the radioResourceConfigDedicated: +3> perform the radio resource configuration procedure as specified in 5.3.10; +2> resume SRB2 and all DRBs that are suspended, if any; +NOTE 1: The handling of the radio bearers after the successful completion of the PDCP re-establishment, e.g. the re-transmission of unacknowledged PDCP SDUs (as well as the associated status reporting), the handling of the SN and the HFN, is specified in TS 36.323 [8]. +NOTE 2: The UE may discard SRB2 messages and data that it receives prior to completing the reconfiguration used to resume these bearers. +1> else: +2> if the RRCConnectionReconfiguration message includes the radioResourceConfigDedicated: +3> perform the radio resource configuration procedure as specified in 5.3.10; +NOTE 3: If the RRCConnectionReconfiguration message includes the establishment of radio bearers other than SRB1, the UE may start using these radio bearers immediately, i.e. there is no need to wait for an outstanding acknowledgment of the SecurityModeComplete message. +1> if the received RRCConnectionReconfiguration includes the sCellToReleaseList: +2> perform SCell release as specified in 5.3.10.3a; +1> if the received RRCConnectionReconfiguration includes the sCellToAddModList: +2> perform SCell addition or modification as specified in 5.3.10.3b; +1> if the received RRCConnectionReconfiguration includes the scg-Configuration; or +1> if the current UE configuration includes one or more split DRBs and the received RRCConnectionReconfiguration includes radioResourceConfigDedicated including drb-ToAddModList: +2> perform SCG reconfiguration as specified in 5.3.10.10; +1> if the received RRCConnectionReconfiguration includes the systemInformationBlockType1Dedicated: +2> perfom the actions upon reception of the SystemInformationBlockType1 message as specified in 5.2.2.7; +1> if the RRCConnectionReconfiguration message includes the dedicatedInfoNASList: +2> forward each element of the dedicatedInfoNASList to upper layers in the same order as listed; +1> if the RRCConnectionReconfiguration message includes the measConfig: +2> perform the measurement configuration procedure as specified in 5.5.2; +1> perform the measurement identity autonomous removal as specified in 5.5.2.2a; +1> if the RRCConnectionReconfiguration message includes the otherConfig: +2> perform the other configuration procedure as specified in 5.3.10.9; +1> if the RRCConnectionReconfiguration message includes the sl-DiscConfig or sl-CommConfig: +2> perform the sidelink dedicated configuration procedure as specified in 5.3.10.15; +1> if the RRCConnectionReconfiguration message includes wlan-OffloadInfo: +2> perform the dedicated WLAN offload configuration procedure as specified in 5.6.12.2; +1> submit the RRCConnectionReconfigurationComplete message to lower layers for transmission using the new configuration, upon which the procedure ends; +5.3.5.4 Reception of an RRCConnectionReconfiguration including the mobilityControlInfo by the UE (handover) +If the RRCConnectionReconfiguration message includes the mobilityControlInfo and the UE is able to comply with the configuration included in this message, the UE shall: +1> stop timer T310, if running; +1> stop timer T312, if running; +1> start timer T304 with the timer value set to t304, as included in the mobilityControlInfo; +1> if the carrierFreq is included: +2> consider the target PCell to be one on the frequency indicated by the carrierFreq with a physical cell identity indicated by the targetPhysCellId; +1> else: +2> consider the target PCell to be one on the frequency of the source PCell with a physical cell identity indicated by the targetPhysCellId; +1> start synchronising to the DL of the target PCell; +NOTE 1: The UE should perform the handover as soon as possible following the reception of the RRC message triggering the handover, which could be before confirming successful reception (HARQ and ARQ) of this message. +1> reset MCG MAC and SCG MAC, if configured; +1> re-establish PDCP for all RBs that are established; +NOTE 2: The handling of the radio bearers after the successful completion of the PDCP re-establishment, e.g. the re-transmission of unacknowledged PDCP SDUs (as well as the associated status reporting), the handling of the SN and the HFN, is specified in TS 36.323 [8]. +1> re-establish MCG RLC and SCG RLC, if configured, for all RBs that are established; +1> configure lower layers to consider the SCell(s) other than the PSCell, if configured, to be in deactivated state; +1> apply the value of the newUE-Identity as the C-RNTI; +1> if the RRCConnectionReconfiguration message includes the fullConfig: +2> perform the radio configuration procedure as specified in section 5.3.5.8; +1> configure lower layers in accordance with the received radioResourceConfigCommon; +1> configure lower layers in accordance with any additional fields, not covered in the previous, if included in the received mobilityControlInfo; +1> if the RRCConnectionReconfiguration message includes the radioResourceConfigDedicated: +2> perform the radio resource configuration procedure as specified in 5.3.10; +1> if the keyChangeIndicator received in the securityConfigHO is set to TRUE: +2> update the KeNB key based on the KASME key taken into use with the latest successful NAS SMC procedure, as specified in TS 33.401 [32]; +1> else: +2> update the KeNB key based on the current KeNB or the NH, using the nextHopChainingCount value indicated in the securityConfigHO, as specified in TS 33.401 [32]; +1> store the nextHopChainingCount value; +1> if the securityAlgorithmConfig is included in the securityConfigHO: +2> derive the KRRCint key associated with the integrityProtAlgorithm, as specified in TS 33.401 [32]; +2> if connected as an RN: +3> derive the KUPint key associated with the integrityProtAlgorithm, as specified in TS 33.401 [32]; +2> derive the KRRCenc key and the KUPenc key associated with the cipheringAlgorithm, as specified in TS 33.401 [32]; +1> else: +2> derive the KRRCint key associated with the current integrity algorithm, as specified in TS 33.401 [32]; +2> if connected as an RN: +3> derive the KUPint key associated with the current integrity algorithm, as specified in TS 33.401 [32]; +2> derive the KRRCenc key and the KUPenc key associated with the current ciphering algorithm, as specified in TS 33.401 [32]; +1> configure lower layers to apply the integrity protection algorithm and the KRRCint key, i.e. the integrity protection configuration shall be applied to all subsequent messages received and sent by the UE, including the message used to indicate the successful completion of the procedure; +1> configure lower layers to apply the ciphering algorithm, the KRRCenc key and the KUPenc key, i.e. the ciphering configuration shall be applied to all subsequent messages received and sent by the UE, including the message used to indicate the successful completion of the procedure; +1> if connected as an RN: +2> configure lower layers to apply the integrity protection algorithm and the KUPint key, for current or subsequently established DRBs that are configured to apply integrity protection, if any; +1> if the received RRCConnectionReconfiguration includes the sCellToReleaseList: +2> perform SCell release as specified in 5.3.10.3a; +1> if the received RRCConnectionReconfiguration includes the sCellToAddModList: +2> perform SCell addition or modification as specified in 5.3.10.3b; +1> if the received RRCConnectionReconfiguration includes the scg-Configuration; or +1> if the current UE configuration includes one or more split DRBs and the received RRCConnectionReconfiguration includes radioResourceConfigDedicated including drb-ToAddModList: +2> perform SCG reconfiguration as specified in 5.3.10.10; +1> if the received RRCConnectionReconfiguration includes the systemInformationBlockType1Dedicated: +2> perfom the actions upon reception of the SystemInformationBlockType1 message as specified in 5.2.2.7; +1> perform the measurement related actions as specified in 5.5.6.1; +1> if the RRCConnectionReconfiguration message includes the measConfig: +2> perform the measurement configuration procedure as specified in 5.5.2; +1> perform the measurement identity autonomous removal as specified in 5.5.2.2a; +1> release reportProximityConfig and clear any associated proximity status reporting timer; +1> if the RRCConnectionReconfiguration message includes the otherConfig: +2> perform the other configuration procedure as specified in 5.3.10.9; +1> if the RRCConnectionReconfiguration message includes the sl-DiscConfig or sl-CommConfig: +2> perform the sidelink dedicated configuration procedure as specified in 5.3.10.15; +1> if the RRCConnectionReconfiguration message includes wlan-OffloadInfo: +2> perform the dedicated WLAN offload configuration procedure as specified in 5.6.12.2; +1> set the content of RRCConnectionReconfigurationComplete message as follows: +2> if the UE has radio link failure or handover failure information available in VarRLF-Report and if the RPLMN is included in plmn-IdentityList stored in VarRLF-Report: +3> include rlf-InfoAvailable; +2> if the UE has MBSFN logged measurements available for E-UTRA and if the RPLMN is included in plmn-IdentityList stored in VarLogMeasReport and if T330 is not running: +3> include logMeasAvailableMBSFN; +2> else if the UE has logged measurements available for E-UTRA and if the RPLMN is included in plmn-IdentityList stored in VarLogMeasReport: +3> include the logMeasAvailable; +2> if the UE has connection establishment failure information available in VarConnEstFailReport and if the RPLMN is equal to plmn-Identity stored in VarConnEstFailReport: +3> include connEstFailInfoAvailable; +1> submit the RRCConnectionReconfigurationComplete message to lower layers for transmission; +1> if MAC successfully completes the random access procedure: +2> stop timer T304; +2> apply the parts of the CQI reporting configuration, the scheduling request configuration and the sounding RS configuration that do not require the UE to know the SFN of the target PCell, if any; +2> apply the parts of the measurement and the radio resource configuration that require the UE to know the SFN of the target PCell (e.g. measurement gaps, periodic CQI reporting, scheduling request configuration, sounding RS configuration), if any, upon acquiring the SFN of the target PCell; +NOTE 3: Whenever the UE shall setup or reconfigure a configuration in accordance with a field that is received it applies the new configuration, except for the cases addressed by the above statements. +2> if the UE is configured to provide IDC indications: +3> if the UE has transmitted an InDeviceCoexIndication message during the last 1 second preceding reception of the RRCConnectionReconfiguration message including mobilityControlInfo: +4> initiate transmission of the InDeviceCoexIndication message in accordance with 5.6.9.3; +2> if the UE is configured to provide power preference indications: +3> if the UE has transmitted a UEAssistanceInformation message during the last 1 second preceding reception of the RRCConnectionReconfiguration message including mobilityControlInfo: +4> initiate transmission of the UEAssistanceInformation message in accordance with 5.6.10.3; +2> if SystemInformationBlockType15 is broadcast by the PCell: +3> if the UE has transmitted a MBMSInterestIndication message during the last 1 second preceding reception of the RRCConnectionReconfiguration message including mobilityControlInfo: +4> ensure having a valid version of SystemInformationBlockType15 for the PCell; +4> determine the set of MBMS frequencies of interest in accordance with 5.8.5.3; +4> initiate transmission of the MBMSInterestIndication message in accordance with 5.8.5.4; +2> if SystemInformationBlockType18 is broadcast by the target PCell; and the UE transmitted a SidelinkUEInformation message including commRxInterestedFreq or commTxResourceReq during the last 1 second preceding reception of the RRCConnectionReconfiguration message including mobilityControlInfo; or +2> if SystemInformationBlockType19 is broadcast by the target PCell; and the UE transmitted a SidelinkUEInformation message including discRxInterest or discTxResourceReq during the last 1 second preceding reception of the RRCConnectionReconfiguration message including mobilityControlInfo: +3> initiate transmission of the SidelinkUEInformation message in accordance with 5.10.2.3; +2> the procedure ends; +NOTE 4: The UE is not required to determine the SFN of the target PCell by acquiring system information from that cell before performing RACH access in the target PCell. +5.3.5.5 Reconfiguration failure +The UE shall: +1> if the UE is unable to comply with (part of) the configuration included in the RRCConnectionReconfiguration message: +2> continue using the configuration used prior to the reception of RRCConnectionReconfiguration message; +2> if security has not been activated: +3> perform the actions upon leaving RRC_CONNECTED as specified in 5.3.12, with release cause other; +2> else: +3> initiate the connection re-establishment procedure as specified in 5.3.7, upon which the connection reconfiguration procedure ends; +NOTE 1: The UE may apply above failure handling also in case the RRCConnectionReconfiguration message causes a protocol error for which the generic error handling as defined in 5.7 specifies that the UE shall ignore the message. +NOTE 2: If the UE is unable to comply with part of the configuration, it does not apply any part of the configuration, i.e. there is no partial success/ failure. +5.3.5.6 T304 expiry (handover failure) +The UE shall: +1> if T304 expires (handover failure): +NOTE 1: Following T304 expiry any dedicated preamble, if provided within the rach-ConfigDedicated, is not available for use by the UE anymore. +2> revert back to the configuration used in the source PCell, excluding the configuration configured by the physicalConfigDedicated, the mac-MainConfig and the sps-Config; +2> store the following handover failure information in VarRLF-Report by setting its fields as follows: +3> clear the information included in VarRLF-Report, if any; +3> set the plmn-IdentityList to include the list of EPLMNs stored by the UE (i.e. includes the RPLMN); +3> set the measResultLastServCell to include the RSRP and RSRQ, if available, of the source PCell based on measurements collected up to the moment the UE detected handover failure and in accordance with the following; +4> if the UE includes rsrqResult, include the lastServCellRSRQ-Type; +3> set the measResultNeighCells to include the best measured cells, other than the source PCell, ordered such that the best cell is listed first, and based on measurements collected up to the moment the UE detected handover failure, and set its fields as follows; +4> if the UE was configured to perform measurements for one or more EUTRA frequencies, include the measResultListEUTRA; +4> if the UE includes rsrqResult, include the rsrq-Type; +4> if the UE was configured to perform measurement reporting for one or more neighbouring UTRA frequencies, include the measResultListUTRA; +4> if the UE was configured to perform measurement reporting for one or more neighbouring GERAN frequencies, include the measResultListGERAN; +4> if the UE was configured to perform measurement reporting for one or more neighbouring CDMA2000 frequencies, include the measResultsCDMA2000; +4> for each neighbour cell included, include the optional fields that are available; +NOTE 2: The measured quantities are filtered by the L3 filter as configured in the mobility measurement configuration. The measurements are based on the time domain measurement resource restriction, if configured. Blacklisted cells are not required to be reported. +3> if detailed location information is available, set the content of the locationInfo as follows: +4> include the locationCoordinates; +4> include the horizontalVelocity, if available; +3> set the failedPCellId to the global cell identity, if available, and otherwise to the physical cell identity and carrier frequency of the target PCell of the failed handover; +3> include previousPCellId and set it to the global cell identity of the PCell where the last RRCConnectionReconfiguration message including mobilityControlInfo was received; +3> set the timeConnFailure to the elapsed time since reception of the last RRCConnectionReconfiguration message including the mobilityControlInfo; +3> set the connectionFailureType to 'hof'; +3> set the c-RNTI to the C-RNTI used in the source PCell; +2> initiate the connection re-establishment procedure as specified in 5.3.7, upon which the RRC connection reconfiguration procedure ends; +The UE may discard the handover failure information, i.e. release the UE variable VarRLF-Report, 48 hours after the failure is detected, upon power off or upon detach. +NOTE 3: E-UTRAN may retrieve the handover failure information using the UE information procedure with rlf-ReportReq set to true, as specified in 5.6.5.3. +5.3.5.7 Void +5.3.5.7a T307 expiry (SCG change failure) +The UE shall: +1> if T307 expires: +NOTE 1: Following T307 expiry any dedicated preamble, if provided within the rach-ConfigDedicatedSCG, is not available for use by the UE anymore. +2> initiate the SCG failure information procedure as specified in 5.6.13 to report SCG change failure; +5.3.5.8 Radio Configuration involving full configuration option +The UE shall: +1> release/ clear all current dedicated radio configurations except the MCG C-RNTI, the MCG security configuration and the PDCP, RLC, logical channel configurations for the RBs and the logged measurement configuration; +NOTE 1: Radio configuration is not just the resource configuration but includes other configurations like MeasConfig and OtherConfig. +1> if the RRCConnectionReconfiguration message includes the mobilityControlInfo: +2> release/ clear all current common radio configurations; +2> use the default values specified in 9.2.5 for timer T310, T311 and constant N310, N311; +1> else: +2> use values for timers T301, T310, T311 and constants N310, N311, as included in ue-TimersAndConstants received in SystemInformationBlockType2; +1> apply the default physical channel configuration as specified in 9.2.4; +1> apply the default semi-persistent scheduling configuration as specified in 9.2.3; +1> apply the default MAC main configuration as specified in 9.2.2; +1> for each srb-Identity value included in the srb-ToAddModList (SRB reconfiguration): +2> apply the specified configuration defined in 9.1.2 for the corresponding SRB; +2> apply the corresponding default RLC configuration for the SRB specified in 9.2.1.1 for SRB1 or in 9.2.1.2 for SRB2; +2> apply the corresponding default logical channel configuration for the SRB as specified in 9.2.1.1 for SRB1 or in 9.2.1.2 for SRB2; +NOTE 2: This is to get the SRBs (SRB1 and SRB2 for handover and SRB2 for reconfiguration after reestablishment) to a known state from which the reconfiguration message can do further configuration. +1> for each eps-BearerIdentity value included in the drb-ToAddModList that is part of the current UE configuration: +2> release the PDCP entity; +2> release the RLC entity or entities; +2> release the DTCH logical channel; +2> release the drb-identity; +NOTE 3: This will retain the eps-bearerIdentity but remove the DRBs including drb-identity of these bearers from the current UE configuration and trigger the setup of the DRBs within the AS in Section 5.3.10.3 using the new configuration. The eps-bearerIdentity acts as the anchor for associating the released and re-setup DRB. +1> for each eps-BearerIdentity value that is part of the current UE configuration but not part of the drb-ToAddModList: +2> perform DRB release as specified in 5.3.10.2; +5.3.6 Counter check +5.3.6.1 General + +Figure 5.3.6.1-1: Counter check procedure +The counter check procedure is used by E-UTRAN to request the UE to verify the amount of data sent/ received on each DRB. More specifically, the UE is requested to check if, for each DRB, the most significant bits of the COUNT match with the values indicated by E-UTRAN. +NOTE: The procedure enables E-UTRAN to detect packet insertion by an intruder (a 'man in the middle'). +5.3.6.2 Initiation +E-UTRAN initiates the procedure by sending a CounterCheck message. +NOTE: E-UTRAN may initiate the procedure when any of the COUNT values reaches a specific value. +5.3.6.3 Reception of the CounterCheck message by the UE +Upon receiving the CounterCheck message, the UE shall: +1> for each DRB that is established: +2> if no COUNT exists for a given direction (uplink or downlink) because it is a uni-directional bearer configured only for the other direction: +3> assume the COUNT value to be 0 for the unused direction; +2> if the drb-Identity is not included in the drb-CountMSB-InfoList: +3> include the DRB in the drb-CountInfoList in the CounterCheckResponse message by including the drb-Identity, the count-Uplink and the count-Downlink set to the value of the corresponding COUNT; +2> else if, for at least one direction, the most significant bits of the COUNT are different from the value indicated in the drb-CountMSB-InfoList: +3> include the DRB in the drb-CountInfoList in the CounterCheckResponse message by including the drb-Identity, the count-Uplink and the count-Downlink set to the value of the corresponding COUNT; +1> for each DRB that is included in the drb-CountMSB-InfoList in the CounterCheck message that is not established: +2> include the DRB in the drb-CountInfoList in the CounterCheckResponse message by including the drb-Identity, the count-Uplink and the count-Downlink with the most significant bits set identical to the corresponding values in the drb-CountMSB-InfoList and the least significant bits set to zero; +1> submit the CounterCheckResponse message to lower layers for transmission upon which the procedure ends; +5.3.7 RRC connection re-establishment +5.3.7.1 General + +Figure 5.3.7.1-1: RRC connection re-establishment, successful + +Figure 5.3.7.1-2: RRC connection re-establishment, failure +The purpose of this procedure is to re-establish the RRC connection, which involves the resumption of SRB1 operation, the re-activation of security and the configuration of only the PCell. +A UE in RRC_CONNECTED, for which security has been activated, may initiate the procedure in order to continue the RRC connection. The connection re-establishment succeeds only if the concerned cell is prepared i.e. has a valid UE context. In case E-UTRAN accepts the re-establishment, SRB1 operation resumes while the operation of other radio bearers remains suspended. If AS security has not been activated, the UE does not initiate the procedure but instead moves to RRC_IDLE directly. +E-UTRAN applies the procedure as follows: +- to reconfigure SRB1 and to resume data transfer only for this RB; +- to re-activate AS security without changing algorithms. +5.3.7.2 Initiation +The UE shall only initiate the procedure when AS security has been activated. The UE initiates the procedure when one of the following conditions is met: +1> upon detecting radio link failure, in accordance with 5.3.11; or +1> upon handover failure, in accordance with 5.3.5.6; or +1> upon mobility from E-UTRA failure, in accordance with 5.4.3.5; or +1> upon integrity check failure indication from lower layers; or +1> upon an RRC connection reconfiguration failure, in accordance with 5.3.5.5; +Upon initiation of the procedure, the UE shall: +1> stop timer T310, if running; +1> stop timer T312, if running; +1> stop timer T313, if running; +1> stop timer T307, if running; +1> start timer T311; +1> suspend all RBs except SRB0; +1> reset MAC; +1> release the MCG SCell(s), if configured, in accordance with 5.3.10.3a; +1> apply the default physical channel configuration as specified in 9.2.4; +1> for the MCG, apply the default semi-persistent scheduling configuration as specified in 9.2.3; +1> for the MCG, apply the default MAC main configuration as specified in 9.2.2; +1> release powerPrefIndicationConfig, if configured and stop timer T340, if running; +1> release reportProximityConfig and clear any associated proximity status reporting timer; +1> release obtainLocationConfig, if configured; +1> release idc-Config, if configured; +1> release measSubframePatternPCell, if configured; +1> release the entire SCG configuration, if configured, except for the DRB configuration (as configured by drb-ToAddModListSCG); +1> release naics-Info for the PCell, if configured; +1> if connected as an RN and configured with an RN subframe configuration: +2> release the RN subframe configuration; +1> perform cell selection in accordance with the cell selection process as specified in TS 36.304 [4]; +5.3.7.3 Actions following cell selection while T311 is running +Upon selecting a suitable E-UTRA cell, the UE shall: +1> stop timer T311; +1> start timer T301; +1> apply the timeAlignmentTimerCommon included in SystemInformationBlockType2; +1> initiate transmission of the RRCConnectionReestablishmentRequest message in accordance with 5.3.7.4; +NOTE: This procedure applies also if the UE returns to the source PCell. +Upon selecting an inter-RAT cell, the UE shall: +1> if the selected cell is a UTRA cell, and if the UE supports Radio Link Failure Report for Inter-RAT MRO, include selectedUTRA-CellId in the VarRLF-Report and set it to the physical cell identity and carrier frequency of the selected UTRA cell; +1> perform the actions upon leaving RRC_CONNECTED as specified in 5.3.12, with release cause 'RRC connection failure'; +5.3.7.4 Actions related to transmission of RRCConnectionReestablishmentRequest message +If the procedure was initiated due to radio link failure or handover failure, the UE shall: +1> set the reestablishmentCellId in the VarRLF-Report to the global cell identity of the selected cell; +The UE shall set the contents of RRCConnectionReestablishmentRequest message as follows: +1> set the ue-Identity as follows: +2> set the c-RNTI to the C-RNTI used in the source PCell (handover and mobility from E-UTRA failure) or used in the PCell in which the trigger for the re-establishment occurred (other cases); +2> set the physCellId to the physical cell identity of the source PCell (handover and mobility from E-UTRA failure) or of the PCell in which the trigger for the re-establishment occurred (other cases); +2> set the shortMAC-I to the 16 least significant bits of the MAC-I calculated: +3> over the ASN.1 encoded as per section 8 (i.e., a multiple of 8 bits) VarShortMAC-Input; +3> with the KRRCint key and integrity protection algorithm that was used in the source PCell (handover and mobility from E-UTRA failure) or of the PCell in which the trigger for the re-establishment occurred (other cases); and +3> with all input bits for COUNT, BEARER and DIRECTION set to binary ones; +1> set the reestablishmentCause as follows: +2> if the re-establishment procedure was initiated due to reconfiguration failure as specified in 5.3.5.5 (the UE is unable to comply with the reconfiguration): +3> set the reestablishmentCause to the value reconfigurationFailure; +2> else if the re-establishment procedure was initiated due to handover failure as specified in 5.3.5.6 (intra-LTE handover failure) or 5.4.3.5 (inter-RAT mobility from EUTRA failure): +3> set the reestablishmentCause to the value handoverFailure; +2> else: +3> set the reestablishmentCause to the value otherFailure; +The UE shall submit the RRCConnectionReestablishmentRequest message to lower layers for transmission. +5.3.7.5 Reception of the RRCConnectionReestablishment by the UE +NOTE 1: Prior to this, lower layer signalling is used to allocate a C-RNTI. For further details see TS 36.321 [6]; +The UE shall: +1> stop timer T301; +1> consider the current cell to be the PCell; +1> re-establish PDCP for SRB1; +1> re-establish RLC for SRB1; +1> perform the radio resource configuration procedure in accordance with the received radioResourceConfigDedicated and as specified in 5.3.10; +1> resume SRB1; +NOTE 2: E-UTRAN should not transmit any message on SRB1 prior to receiving the RRCConnectionReestablishmentComplete message. +1> update the KeNB key based on the KASME key to which the current KeNB is associated, using the nextHopChainingCount value indicated in the RRCConnectionReestablishment message, as specified in TS 33.401 [32]; +1> store the nextHopChainingCount value; +1> derive the KRRCint key associated with the previously configured integrity algorithm, as specified in TS 33.401 [32]; +1> derive the KRRCenc key and the KUPenc key associated with the previously configured ciphering algorithm, as specified in TS 33.401 [32]; +1> if connected as an RN: +2> derive the KUPint key associated with the previously configured integrity algorithm, as specified in TS 33.401 [32]; +1> configure lower layers to activate integrity protection using the previously configured algorithm and the KRRCint key immediately, i.e., integrity protection shall be applied to all subsequent messages received and sent by the UE, including the message used to indicate the successful completion of the procedure; +1> if connected as an RN: +2> configure lower layers to apply integrity protection using the previously configured algorithm and the KUPint key, for subsequently resumed or subsequently established DRBs that are configured to apply integrity protection, if any; +1> configure lower layers to apply ciphering using the previously configured algorithm, the KRRCenc key and the KUPenc key immediately, i.e., ciphering shall be applied to all subsequent messages received and sent by the UE, including the message used to indicate the successful completion of the procedure; +1> set the content of RRCConnectionReestablishmentComplete message as follows: +2> if the UE has radio link failure or handover failure information available in VarRLF-Report and if the RPLMN is included in plmn-IdentityList stored in VarRLF-Report: +3> include the rlf-InfoAvailable; +2> if the UE has MBSFN logged measurements available for E-UTRA and if the RPLMN is included in plmn-IdentityList stored in VarLogMeasReport and if T330 is not running: +3> include logMeasAvailableMBSFN; +2> else if the UE has logged measurements available for E-UTRA and if the RPLMN is included in plmn-IdentityList stored in VarLogMeasReport: +3> include the logMeasAvailable; +2> if the UE has connection establishment failure information available in VarConnEstFailReport and if the RPLMN is equal to plmn-Identity stored in VarConnEstFailReport: +3> include the connEstFailInfoAvailable; +1> perform the measurement related actions as specified in 5.5.6.1; +1> perform the measurement identity autonomous removal as specified in 5.5.2.2a; +1> submit the RRCConnectionReestablishmentComplete message to lower layers for transmission; +1> if SystemInformationBlockType15 is broadcast by the PCell: +2> if the UE has transmitted an MBMSInterestIndication message during the last 1 second preceding detection of radio link failure: +3> ensure having a valid version of SystemInformationBlockType15 for the PCell; +3> determine the set of MBMS frequencies of interest in accordance with 5.8.5.3; +3> initiate transmission of the MBMSInterestIndication message in accordance with 5.8.5.4; +1> if SystemInformationBlockType18 is broadcast by the PCell; and the UE transmitted a SidelinkUEInformation message including commRxInterestedFreq or commTxResourceReq during the last 1 second preceding detection of radio link failure; or +1> if SystemInformationBlockType19 is broadcast by the PCell; and the UE transmitted a SidelinkUEInformation message including discRxInterest or discTxResourceReq during the last 1 second preceding detection of radio link failure: +2> initiate transmission of the SidelinkUEInformation message in accordance with 5.10.2.3; +1> the procedure ends; +5.3.7.6 T311 expiry +Upon T311 expiry, the UE shall: +1> perform the actions upon leaving RRC_CONNECTED as specified in 5.3.12, with release cause 'RRC connection failure'; +5.3.7.7 T301 expiry or selected cell no longer suitable +The UE shall: +1> if timer T301 expires; or +1> if the selected cell becomes no longer suitable according to the cell selection criteria as specified in TS 36.304 [4]: +2> perform the actions upon leaving RRC_CONNECTED as specified in 5.3.12, with release cause 'RRC connection failure'; +5.3.7.8 Reception of RRCConnectionReestablishmentReject by the UE +Upon receiving the RRCConnectionReestablishmentReject message, the UE shall: +1> perform the actions upon leaving RRC_CONNECTED as specified in 5.3.12, with release cause 'RRC connection failure'; +5.3.8 RRC connection release +5.3.8.1 General + +Figure 5.3.8.1-1: RRC connection release, successful +The purpose of this procedure is to release the RRC connection, which includes the release of the established radio bearers as well as all radio resources. +5.3.8.2 Initiation +E-UTRAN initiates the RRC connection release procedure to a UE in RRC_CONNECTED. +5.3.8.3 Reception of the RRCConnectionRelease by the UE +The UE shall: +1> delay the following actions defined in this sub-clause 60 ms from the moment the RRCConnectionRelease message was received or optionally when lower layers indicate that the receipt of the RRCConnectionRelease message has been successfully acknowledged, whichever is earlier; +1> if the RRCConnectionRelease message includes the idleModeMobilityControlInfo: +2> store the cell reselection priority information provided by the idleModeMobilityControlInfo; +2> if the t320 is included: +3> start timer T320, with the timer value set according to the value of t320; +1> else: +2> apply the cell reselection priority information broadcast in the system information; +1> if the releaseCause received in the RRCConnectionRelease message indicates loadBalancingTAURequired: +2> perform the actions upon leaving RRC_CONNECTED as specified in 5.3.12, with release cause 'load balancing TAU required'; +1> else if the releaseCause received in the RRCConnectionRelease message indicates cs-FallbackHighPriority: +2> perform the actions upon leaving RRC_CONNECTED as specified in 5.3.12, with release cause 'CS Fallback High Priority'; +1> else: +2> if the extendedWaitTime is present and the UE supports delay tolerant access: +3> forward the extendedWaitTime to upper layers; +2> perform the actions upon leaving RRC_CONNECTED as specified in 5.3.12, with release cause 'other'; +5.3.8.4 T320 expiry +The UE shall: +1> if T320 expires: +2> if stored, discard the cell reselection priority information provided by the idleModeMobilityControlInfo or inherited from another RAT; +2> apply the cell reselection priority information broadcast in the system information; +5.3.9 RRC connection release requested by upper layers +5.3.9.1 General +The purpose of this procedure is to release the RRC connection. Access to the current PCell may be barred as a result of this procedure. +NOTE: Upper layers invoke the procedure, e.g. upon determining that the network has failed an authentication check, see TS 24.301 [35]. +5.3.9.2 Initiation +The UE initiates the procedure when upper layers request the release of the RRC connection. The UE shall not initiate the procedure for power saving purposes. +The UE shall: +1> if the upper layers indicate barring of the PCell: +2> treat the PCell used prior to entering RRC_IDLE as barred according to TS 36.304 [4]; +1> perform the actions upon leaving RRC_CONNECTED as specified in 5.3.12, with release cause 'other'; +5.3.10 Radio resource configuration +5.3.10.0 General +The UE shall: +1> if the received radioResourceConfigDedicated includes the srb-ToAddModList: +2> perform the SRB addition or reconfiguration as specified in 5.3.10.1; +1> if the received radioResourceConfigDedicated includes the drb-ToReleaseList: +2> perform DRB release as specified in 5.3.10.2; +1> if the received radioResourceConfigDedicated includes the drb-ToAddModList: +2> perform DRB addition or reconfiguration as specified in 5.3.10.3; +1> if the received radioResourceConfigDedicated includes the mac-MainConfig: +2> perform MAC main reconfiguration as specified in 5.3.10.4; +1> if the received radioResourceConfigDedicated includes sps-Config: +2> perform SPS reconfiguration according to 5.3.10.5; +1> if the received radioResourceConfigDedicated includes the physicalConfigDedicated: +2> reconfigure the physical channel configuration as specified in 5.3.10.6. +1> if the received radioResourceConfigDedicated includes the rlf-TimersAndConstants: +2> reconfigure the values of timers and constants as specified in 5.3.10.7; +1> if the received radioResourceConfigDedicated includes the measSubframePatternPCell: +2> reconfigure the time domain measurement resource restriction for the serving cell as specified in 5.3.10.8; +1> if the received radioResourceConfigDedicated includes the naics-Info: +2> perform NAICS neighbour cell information reconfiguration for the PCell as specified in 5.3.10.13; +1> if the received RadioResourceConfigDedicatedPSCell includes the naics-Info: +2> perform NAICS neighbour cell information reconfiguration for the PSCell as specified in 5.3.10.13; +1> if the received RadioResourceConfigDedicatedSCell-r10 includes the naics-Info: +2> perform NAICS neighbour cell information reconfiguration for the SCell as specified in 5.3.10.13; +5.3.10.1 SRB addition/ modification +The UE shall: +1> for each srb-Identity value included in the srb-ToAddModList that is not part of the current UE configuration (SRB establishment): +2> apply the specified configuration defined in 9.1.2 for the corresponding SRB; +2> establish a PDCP entity and configure it with the current (MCG) security configuration, if applicable; +2> establish an (MCG) RLC entity in accordance with the received rlc-Config; +2> establish a (MCG) DCCH logical channel in accordance with the received logicalChannelConfig and with the logical channel identity set in accordance with 9.1.2; +1> for each srb-Identity value included in the srb-ToAddModList that is part of the current UE configuration (SRB reconfiguration): +2> reconfigure the RLC entity in accordance with the received rlc-Config; +2> reconfigure the DCCH logical channel in accordance with the received logicalChannelConfig; +5.3.10.2 DRB release +The UE shall: +1> for each drb-Identity value included in the drb-ToReleaseList that is part of the current UE configuration (DRB release); or +1> for each drb-identity value that is to be released as the result of full configuration option according to 5.3.5.8: +2> release the PDCP entity; +2> release the RLC entity or entities; +2> release the DTCH logical channel; +1> if the procedure was triggered due to handover: +2> indicate the release of the DRB(s) and the eps-BearerIdentity of the released DRB(s) to upper layers after successful handover; +1> else: +2> indicate the release of the DRB(s) and the eps-BearerIdentity of the released DRB(s) to upper layers immediately. +NOTE: The UE does not consider the message as erroneous if the drb-ToReleaseList includes any drb-Identity value that is not part of the current UE configuration. +5.3.10.3 DRB addition/ modification +The UE shall: +1> for each drb-Identity value included in the drb-ToAddModList that is not part of the current UE configuration (DRB establishment including the case when full configuration option is used): +2> if drb-ToAddModListSCG is not received or does not include the drb-Identity value (i.e. add MCG DRB): +3> establish a PDCP entity and configure it with the current MCG security configuration and in accordance with the received pdcp-Config; +3> establish an MCG RLC entity or entities in accordance with the received rlc-Config; +3> establish an MCG DTCH logical channel in accordance with the received logicalChannelIdentity and the received logicalChannelConfig; +2> if the RRCConnectionReconfiguration message includes the fullConfig IE: +3> associate the established DRB with corresponding included eps-BearerIdentity; +2> else: +3> indicate the establishment of the DRB(s) and the eps-BearerIdentity of the established DRB(s) to upper layers; +1> for each drb-Identity value included in the drb-ToAddModList that is part of the current UE configuration (DRB reconfiguration): +2> if drb-ToAddModListSCG is not received or does not include the drb-Identity value: +3> if the DRB indicated by drb-Identity is an MCG DRB (reconfigure MCG): +4> if the pdcp-Config is included: +5> reconfigure the PDCP entity in accordance with the received pdcp-Config; +4> if the rlc-Config is included: +5> reconfigure the RLC entity or entities in accordance with the received rlc-Config; +4> if the logicalChannelConfig is included: +5> reconfigure the DTCH logical channel in accordance with the received logicalChannelConfig; +NOTE: Removal and addition of the same drb-Identity in single radioResourceConfiguration is not supported. +5.3.10.3a1 DC specific DRB addition or reconfiguration +For the drb-Identity value for which this procedure is initiated, the UE shall: +1> if drb-ToAddModListSCG is received and includes the drb-Identity value; and drb-Identity value is not part of the current UE configuration (i.e. DC specific DRB establishment): +2> if drb-ToAddModList is received and includes the drb-Identity value (i.e. add split DRB): +3> establish a PDCP entity and configure it with the current MCG security configuration and in accordance with the pdcp-Config included in drb-ToAddModList; +3> establish an MCG RLC entity and an MCG DTCH logical channel in accordance with the rlc-Config, logicalChannelIdentity and logicalChannelConfig included in drb-ToAddModList; +3> establish an SCG RLC entity and an SCG DTCH logical channel in accordance with the rlc-ConfigSCG, logicalChannelIdentitySCG and logicalChannelConfigSCG included in drb-ToAddModListSCG; +2> else (i.e. add SCG DRB): +3> establish a PDCP entity and configure it with the current SCG security configuration and in accordance with the pdcp-Config included in drb-ToAddModListSCG; +3> establish an SCG RLC entity or entities and an SCG DTCH logical channel in accordance with the rlc-ConfigSCG, logicalChannelIdentitySCG and logicalChannelConfigSCG included in drb-ToAddModListSCG; +2> indicate the establishment of the DRB(s) and the eps-BearerIdentity of the established DRB(s) to upper layers; +1> else (i.e. DC specific DRB modification; drb-ToAddModList and/ or drb-ToAddModListSCG received): +2> if the DRB indicated by drb-Identity is a split DRB: +3> if drb-ToAddModList is received and includes the drb-Identity value, while for this entry drb-TypeChange is included and set to toMCG (i.e. split to MCG): +4> release the SCG RLC entity and the SCG DTCH logical channel; +4> reconfigure the PDCP entity in accordance with the pdcp-Config, if included in drb-ToAddModList; +4> reconfigure the MCG RLC entity and/ or the MCG DTCH logical channel in accordance with the rlc-Config and logicalChannelConfig, if included in drb-ToAddModList; +3> else (i.e. reconfigure split): +4> reconfigure the PDCP entity in accordance with the pdcp-Config, if included in drb-ToAddModList; +4> reconfigure the MCG RLC entity and/ or the MCG DTCH logical channel in accordance with the rlc-Config and logicalChannelConfig, if included in drb-ToAddModList; +4> reconfigure the SCG RLC entity and/ or the SCG DTCH logical channel in accordance with the rlc-ConfigSCG and logicalChannelConfigSCG, if included in drb-ToAddModListSCG; +2> if the DRB indicated by drb-Identity is an SCG DRB: +3> if drb-ToAddModList is received and includes the drb-Identity value, while for this entry drb-TypeChange is included and set to toMCG (i.e. SCG to MCG): +4> reconfigure the PDCP entity with the current MCG security configuration and in accordance with the pdcp-Config, if included in drb-ToAddModList; +4> reconfigure the SCG RLC entity or entities and the SCG DTCH logical channel to be an MCG RLC entity or entities and an MCG DTCH logical channel; +4> reconfigure the MCG RLC entity or entities and/ or the MCG DTCH logical channel in accordance with the rlc-Config, logicalChannelIdentity and logicalChannelConfig, if included in drb-ToAddModList; +3> else (i.e. drb-ToAddModListSCG is received and includes the drb-Identity value i.e. reconfigure SCG): +4> reconfigure the PDCP entity in accordance with the pdcp-Config, if included in drb-ToAddModListSCG; +4> reconfigure the SCG RLC entity or entities and/ or the SCG DTCH logical channel in accordance with the rlc-ConfigSCG and logicalChannelConfigSCG, if included in drb-ToAddModListSCG; +2> if the DRB indicated by drb-Identity is an MCG DRB: +3> if drb-ToAddModListSCG is received and includes the drb-Identity value, while for this entry drb-Type is included and set to split (i.e. MCG to split): +4> reconfigure the PDCP entity in accordance with the pdcp-Config, if included in drb-ToAddModList; +4> reconfigure the MCG RLC entity and/ or the MCG DTCH logical channel in accordance with the rlc-Config and logicalChannelConfig, if included in drb-ToAddModList; +4> establish an SCG RLC entity and an SCG DTCH logical channel in accordance with the rlc-ConfigSCG, logicalChannelIdentitySCG and logicalChannelConfigSCG, included in drb-ToAddModListSCG; +3> else (i.e. drb-Type is included and set to scg i.e. MCG to SCG): +4> reconfigure the PDCP entity with the current SCG security configuration and in accordance with the pdcp-Config, if included in drb-ToAddModListSCG; +4> reconfigure the MCG RLC entity or entities and the MCG DTCH logical channel to be an SCG RLC entity or entities and an SCG DTCH logical channel; +4> reconfigure the SCG RLC entity or entities and/ or the SCG DTCH logical channel in accordance with the rlc-ConfigSCG, logicalChannelIdentitySCG and logicalChannelConfigSCG, if included in drb-ToAddModListSCG; +5.3.10.3a SCell release +The UE shall: +1> if the release is triggered by reception of the sCellToReleaseList or the sCellToReleaseListSCG: +2> for each sCellIndex value included either in the sCellToReleaseList or in the sCellToReleaseListSCG: +3> if the current UE configuration includes an SCell with value sCellIndex: +4> release the SCell; +1> if the release is triggered by RRC connection re-establishment: +2> release all SCells that are part of the current UE configuration; +5.3.10.3b SCell addition/ modification +The UE shall: +1> for each sCellIndex value included either in the sCellToAddModList or in the sCellToAddModListSCG that is not part of the current UE configuration (SCell addition): +2> add the SCell, corresponding to the cellIdentification, in accordance with the radioResourceConfigCommonSCell and radioResourceConfigDedicatedSCell, both included either in the sCellToAddModList or in the sCellToAddModListSCG; +2> configure lower layers to consider the SCell to be in deactivated state; +2> for each measId included in the measIdList within VarMeasConfig: +3> if SCells are not applicable for the associated measurement; and +3> if the concerned SCell is included in cellsTriggeredList defined within the VarMeasReportList for this measId: +4> remove the concerned SCell from cellsTriggeredList defined within the VarMeasReportList for this measId; +1> for each sCellIndex value included either in the sCellToAddModList or in the sCellToAddModListSCG that is part of the current UE configuration (SCell modification): +2> modify the SCell configuration in accordance with the radioResourceConfigDedicatedSCell, included either in the sCellToAddModList or in the sCellToAddModListSCG; +5.3.10.3c PSCell addition or modification +The UE shall: +1> if the PSCell is not part of the current UE configuration (i.e. PSCell addition): +2> add the PSCell, corresponding to the cellIdentification, in accordance with the received radioResourceConfigCommonPSCell and radioResourceConfigDedicatedPSCell; +2> configure lower layers to consider the PSCell to be in activated state; +1> if the PSCell is part of the current UE configuration (i.e. PSCell modification): +2> modify the PSCell configuration in accordance with the received radioResourceConfigDedicatedPSCell; +5.3.10.4 MAC main reconfiguration +The UE shall: +1> if the procedure is triggered to perform SCG MAC main reconfiguration: +2> if SCG MAC is not part of the current UE configuration (i.e. SCG establishment): +3> create an SCG MAC entity; +2> reconfigure the SCG MAC main configuration as specified in the following i.e. assuming it concerns the SCG MAC whenever MAC main configuration is referenced and that it is based on the received mac-MainConfigSCG instead of mac-MainConfig: +1> reconfigure the MAC main configuration in accordance with the received mac-MainConfig other than stag-ToReleaseList and stag-ToAddModList; +1> if the received mac-MainConfig includes the stag-ToReleaseList: +2> for each STAG-Id value included in the stag-ToReleaseList that is part of the current UE configuration: +3> release the STAG indicated by STAG-Id; +1> if the received mac-MainConfig includes the stag-ToAddModList: +2> for each stag-Id value included in stag-ToAddModList that is not part of the current UE configuration (STAG addition): +3> add the STAG, corresponding to the stag-Id, in accordance with the received timeAlignmentTimerSTAG; +2> for each stag-Id value included in stag-ToAddModList that is part of the current UE configuration (STAG modification): +3> reconfigure the STAG, corresponding to the stag-Id, in accordance with the received timeAlignmentTimerSTAG; +5.3.10.5 Semi-persistent scheduling reconfiguration +The UE shall: +1> reconfigure the semi-persistent scheduling in accordance with the received sps-Config; +5.3.10.6 Physical channel reconfiguration +The UE shall: +1> if the antennaInfo-r10 is included in the received physicalConfigDedicated and the previous version of this field that was received by the UE was antennaInfo (without suffix i.e. the version defined in REL-8): +2> apply the default antenna configuration as specified in section 9.2.4; +1> if the cqi-ReportConfig-r10 is included in the received physicalConfigDedicated and the previous version of this field that was received by the UE was cqi-ReportConfig (without suffix i.e. the version defined in REL-8): +2> apply the default CQI reporting configuration as specified in 9.2.4; +NOTE: Application of the default configuration involves release of all extensions introduced in REL-9 and later. +1> reconfigure the physical channel configuration in accordance with the received physicalConfigDedicated; +1> if the antennaInfo is included and set to explicitValue: +2> if the configured transmissionMode is tm1, tm2, tm5, tm6 or tm7; or +2> if the configured transmissionMode is tm8 and pmi-RI-Report is not present; or +2> if the configured transmissionMode is tm9 and pmi-RI-Report is not present; or +2> if the configured transmissionMode is tm9 and pmi-RI-Report is present and antennaPortsCount within csi-RS is set to an1: +3> release ri-ConfigIndex in cqi-ReportPeriodic, if previously configured; +1> else if the antennaInfo is included and set to defaultValue: +2> release ri-ConfigIndex in cqi-ReportPeriodic, if previously configured; +5.3.10.7 Radio Link Failure Timers and Constants reconfiguration +The UE shall: +1> if the received rlf-TimersAndConstants is set to release: +2> use values for timers T301, T310, T311 and constants N310, N311, as included in ue-TimersAndConstants received in SystemInformationBlockType2; +1> else: +2> reconfigure the value of timers and constants in accordance with received rlf-TimersAndConstants; +1> if the received rlf-TimersAndConstantsSCG is set to release: +2> stop timer T313, if running, and +2> release the value of timer t313 as well as constants n313 and n314; +1> else: +2> reconfigure the value of timers and constants in accordance with received rlf-TimersAndConstantsSCG; +5.3.10.8 Time domain measurement resource restriction for serving cell +The UE shall: +1> if the received measSubframePatternPCell is set to release: +2> release the time domain measurement resource restriction for the PCell, if previously configured +1> else: +2> apply the time domain measurement resource restriction for the PCell in accordance with the received measSubframePatternPCell; +5.3.10.9 Other configuration +The UE shall: +1> if the received otherConfig includes the reportProximityConfig: +2> if proximityIndicationEUTRA is set to enabled: +3> consider itself to be configured to provide proximity indications for E-UTRA frequencies in accordance with 5.3.14; +2> else: +3> consider itself not to be configured to provide proximity indications for E-UTRA frequencies; +2> if proximityIndicationUTRA is set to enabled: +3> consider itself to be configured to provide proximity indications for UTRA frequencies in accordance with 5.3.14; +2> else: +3> consider itself not to be configured to provide proximity indications for UTRA frequencies; +1> if the received otherConfig includes the obtainLocation: +2> attempt to have detailed location information available for any subsequent measurement report; +NOTE: The UE is requested to attempt to have valid detailed location information available whenever sending a measurement report for which it is configured to include available detailed location information. The UE may not succeed e.g. because the user manually disabled the GPS hardware, due to no/poor satellite coverage. Further details, e.g. regarding when to activate GNSS, are up to UE implementation. +1> if the received otherConfig includes the idc-Config: +2> if idc-Indication is included (i.e. set to setup): +3> consider itself to be configured to provide IDC indications in accordance with 5.6.9; +2> else: +3> consider itself not to be configured to provide IDC indications; +2> if autonomousDenialParameters is included: +3> consider itself to be allowed to deny any transmission in a particular UL subframe if during the number of subframes indicated by autonomousDenialValidity, preceeding and including this particular subframe, it autonomously denied fewer UL subframes than indicated by autonomousDenialSubframes; +2> else: +3> consider itself not to be allowed to deny any UL transmission; +1> if the received otherConfig includes the powerPrefIndicationConfig: +2> if powerPrefIndicationConfig is set to setup: +3> consider itself to be configured to provide power preference indications in accordance with 5.6.10; +2> else: +3> consider itself not to be configured to provide power preference indications; +5.3.10.10 SCG reconfiguration +The UE shall: +1> if the received scg-Configuration is set to release or includes the mobilityControlInfoSCG (i.e. SCG release/ change): +2> if mobilityControlInfo is not received (i.e. SCG release/ change without HO): +3> reset SCG MAC, if configured; +3> for each drb-Identity value that is part of the current UE configuration: +4> if the DRB indicated by drb-Identity is an SCG DRB: +5> re-establish the PDCP entity and the SCG RLC entity or entities; +4> if the DRB indicated by drb-Identity is a split DRB: +5> perform PDCP data recovery and re-establish the SCG RLC entity; +4> if the DRB indicated by drb-Identity is an MCG DRB; and +4> drb-ToAddModListSCG is received and includes the drb-Identity value, while for this entry drb-Type is included and set to scg (i.e. MCG to SCG): +5> re-establish the PDCP entity and the MCG RLC entity or entities; +3> configure lower layers to consider the SCG SCell(s), except for the PSCell, to be in deactivated state; +1> if the received scg-Configuration is set to release: +2> release the entire SCG configuration, except for the DRB configuration (i.e. as configured by drb-ToAddModListSCG); +2> stop timer T313, if running; +2> stop timer T307, if running; +1> else: +2> if the received scg-ConfigPartMCG includes the scg-Counter: +3> update the S-KeNB key based on the KeNB key and using the received scg-Counter value, as specified in TS 33.401 [32]; +3> derive the KUPenc key associated with the cipheringAlgorithmSCG included in mobilityControlInfoSCG within the received scg-ConfigPartSCG, as specified in TS 33.401 [32]; +3> configure lower layers to apply the ciphering algorithm and the KUPenc key; +2> if the received scg-ConfigPartSCG includes the radioResourceConfigDedicatedSCG: +3> reconfigure the dedicated radio resource configuration for the SCG as specified in 5.3.10.11; +2> if the current UE configuration includes one or more split or SCG DRBs and the received RRCConnectionReconfiguration message includes radioResourceConfigDedicated including drb-ToAddModList: +3> reconfigure the SCG or split DRB by drb-ToAddModList as specified in 5.3.10.12; +2> if the received scg-ConfigPartSCG includes the pSCellToAddMod: +3> perform PSCell addition or modification as specified in 5.3.10.3c; +2> if the received scg-ConfigPartSCG includes the sCellToReleaseListSCG: +3> perform SCell release for the SCG as specified in 5.3.10.3a; +2> if the received scg-ConfigPartSCG includes the sCellToAddModListSCG: +3> perform SCell addition or modification as specified in 5.3.10.3b; +2> configure lower layers in accordance with mobilityControlInfoSCG, if received; +2> if the received scg-ConfigPartSCG includes the mobilityControlInfoSCG (i.e. SCG change): +3> resume all SCG DRBs and resume SCG transmission for split DRBs, if suspended; +3> stop timer T313, if running; +3> start timer T307 with the timer value set to t307, as included in the mobilityControlInfoSCG; +3> start synchronising to the DL of the target PSCell; +3> initiate the random access procedure on the PSCell, as specified in TS 36.321 [6]: +NOTE 1: The UE is not required to determine the SFN of the target PSCell by acquiring system information from that cell before performing RACH access in the target PSCell. +3> the procedure ends, except that the following actions are performed when MAC successfully completes the random access procedure on the PSCell: +4> stop timer T307; +4> apply the parts of the CQI reporting configuration, the scheduling request configuration and the sounding RS configuration that do not require the UE to know the SFN of the target PSCell, if any; +4> apply the parts of the measurement and the radio resource configuration that require the UE to know the SFN of the target PSCell (e.g. periodic CQI reporting, scheduling request configuration, sounding RS configuration), if any, upon acquiring the SFN of the target PSCell; +NOTE 2: Whenever the UE shall setup or reconfigure a configuration in accordance with a field that is received it applies the new configuration, except for the cases addressed by the above statements. +5.3.10.11 SCG dedicated resource configuration +The UE shall: +1> if the received radioResourceConfigDedicatedSCG includes the drb-ToAddModListSCG: +2> for each drb-Identity value included in the drb-ToAddModListSCG perform the DC specific DRB addition or reconfiguration as specified in 5.3.10.3a1 +1> if the received radioResourceConfigDedicatedSCG includes the mac-MainConfigSCG: +2> perform the SCG MAC main reconfiguration as specified in 5.3.10.4; +5.3.10.12 Reconfiguration SCG or split DRB by drb-ToAddModList +The UE shall: +1> for each split or SCG DRBs that is part of the current configuration: +2> if the corresponding drb-Identity value is included in the received drb-ToAddModList; and: +2> if the corresponding drb-Identity value is not included in the received drb-ToAddModListSCG (i.e. reconfigure split, split to MCG or SCG to MCG): +3> perform the DC specific DRB addition or reconfiguration as specified in 5.3.10.3a1; +5.3.10.13 Neighbour cell information reconfiguration +The UE shall: +1> if the received naics-Info is set to release: +2> instruct lower layer to release all the NAICS neighbour cell information for the concerned cell, if previously configured; +1> if the received naics-Info includes the neighCellsToReleaseList-r12: +2> for each physCellId-r12 value included in the neighCellsToReleaseList-r12 that is part of the current NAICS neighbour cell information of the concerned cell: +3> instruct lower layer to release the NAICS neighbour cell information for the concerned cell; +1> if the received naics-Info includes the NeighCellsToAddModList-r12: +2> for each physCellId-r12 value included in the neighCellsToAddModList-r12 that is not part of the current NAICS neighbour cell information of the concerned cell: +3> instruct lower layer to add the NAICS neighbour cell information for the concerned cell; +2> for each physCellId-r12 value included in the neighCellsToAddModList-r12 that is part of the current NAICS neighbour cell information of the concerned cell: +3> instruct lower layer to modify the NAICS neighbour cell information in accordance with the received NeighCellsInfo for the concerned cell; +5.3.10.14 Void +5.3.10.15 Sidelink dedicated configuration +The UE shall: +1> if the RRCConnectionReconfiguration message includes the sl-CommConfig: +2> if commTxResources is included and set to setup: +3> from the next SC period use the resources indicated by commTxResources for sidelink direct communication transmission, as specified in 5.10.4; +2> else if commTxResources is included and set to release: +3> from the next SC period, release the resources allocated for sidelink direct communication transmission previously configured by commTxResources; +1> if the RRCConnectionReconfiguration message includes the sl-DiscConfig: +2> if discTxResources is included and set to setup: +3> from the next discovery period, as defined by discPeriod, use the resources indicated by discTxResources for sidelink direct discovery announcement, as specified in 5.10.6; +2> else if discTxResources is included and set to release: +3> from the next discovery period, as defined by discPeriod, release the resources allocated for sidelink direct discovery announcement previously configured by discTxResources; +5.3.11 Radio link failure related actions +5.3.11.1 Detection of physical layer problems in RRC_CONNECTED +The UE shall: +1> upon receiving N310 consecutive "out-of-sync" indications for the PCell from lower layers while neither T300, T301, T304 nor T311 is running: +2> start timer T310; +1> upon receiving N313 consecutive "out-of-sync" indications for the PSCell from lower layers while T307 is not running: +2> start T313; +NOTE: Physical layer monitoring and related autonomous actions do not apply to SCells except for the PSCell. +5.3.11.2 Recovery of physical layer problems +Upon receiving N311 consecutive "in-sync" indications for the PCell from lower layers while T310 is running, the UE shall: +1> stop timer T310; +1> stop timer T312, if running; +NOTE 1: In this case, the UE maintains the RRC connection without explicit signalling, i.e. the UE maintains the entire radio resource configuration. +NOTE 2: Periods in time where neither "in-sync" nor "out-of-sync" is reported by layer 1 do not affect the evaluation of the number of consecutive "in-sync" or "out-of-sync" indications. +Upon receiving N314 consecutive "in-sync" indications for the PSCell from lower layers while T313 is running, the UE shall: +1> stop timer T313; +5.3.11.3 Detection of radio link failure +The UE shall: +1> upon T310 expiry; or +1> upon T312 expiry; or +1> upon random access problem indication from MCG MAC while neither T300, T301, T304 nor T311 is running; or +1> upon indication from MCG RLC that the maximum number of retransmissions has been reached for an SRB or for an MCG or split DRB: +2> consider radio link failure to be detected for the MCG i.e. RLF; +2> store the following radio link failure information in the VarRLF-Report by setting its fields as follows: +3> clear the information included in VarRLF-Report, if any; +3> set the plmn-IdentityList to include the list of EPLMNs stored by the UE (i.e. includes the RPLMN); +3> set the measResultLastServCell to include the RSRP and RSRQ, if available, of the PCell based on measurements collected up to the moment the UE detected radio link failure; +3> set the measResultNeighCells to include the best measured cells, other than the PCell, ordered such that the best cell is listed first, and based on measurements collected up to the moment the UE detected radio link failure, and set its fields as follows; +4> if the UE was configured to perform measurements for one or more EUTRA frequencies, include the measResultListEUTRA; +4> if the UE was configured to perform measurement reporting for one or more neighbouring UTRA frequencies, include the measResultListUTRA; +4> if the UE was configured to perform measurement reporting for one or more neighbouring GERAN frequencies, include the measResultListGERAN; +4> if the UE was configured to perform measurement reporting for one or more neighbouring CDMA2000 frequencies, include the measResultsCDMA2000; +4> for each neighbour cell included, include the optional fields that are available; +NOTE 1: The measured quantities are filtered by the L3 filter as configured in the mobility measurement configuration. The measurements are based on the time domain measurement resource restriction, if configured. Blacklisted cells are not required to be reported. +3> if detailed location information is available, set the content of the locationInfo as follows: +4> include the locationCoordinates; +4> include the horizontalVelocity, if available; +3> set the failedPCellId to the global cell identity, if available, and otherwise to the physical cell identity and carrier frequency of the PCell where radio link failure is detected; +3> set the tac-FailedPCell to the tracking area code, if available, of the PCell where radio link failure is detected; +3> if an RRCConnectionReconfiguration message including the mobilityControlInfo was received before the connection failure: +4> if the last RRCConnectionReconfiguration message including the mobilityControlInfo concerned an intra E-UTRA handover: +5> include the previousPCellId and set it to the global cell identity of the PCell where the last RRCConnectionReconfiguration message including mobilityControlInfo was received; +5> set the timeConnFailure to the elapsed time since reception of the last RRCConnectionReconfiguration message including the mobilityControlInfo; +4> if the last RRCConnectionReconfiguration message including the mobilityControlInfo concerned a handover to E-UTRA from UTRA and if the UE supports Radio Link Failure Report for Inter-RAT MRO: +5> include the previousUTRA-CellId and set it to the physical cell identity, the carrier frequency and the global cell identity, if available, of the UTRA Cell in which the last RRCConnectionReconfiguration message including mobilityControlInfo was received; +5> set the timeConnFailure to the elapsed time since reception of the last RRCConnectionReconfiguration message including the mobilityControlInfo; +3> set the connectionFailureType to rlf; +3> set the c-RNTI to the C-RNTI used in the PCell; +3> set the rlf-Cause to the trigger for detecting radio link failure; +2> if AS security has not been activated: +3> perform the actions upon leaving RRC_CONNECTED as specified in 5.3.12, with release cause 'other'; +2> else: +3> initiate the connection re-establishment procedure as specified in 5.3.7; +The UE shall: +1> upon T313 expiry; or +1> upon random access problem indication from SCG MAC; or +1> upon indication from SCG RLC that the maximum number of retransmissions has been reached for an SCG or split DRB: +2> consider radio link failure to be detected for the SCG i.e. SCG-RLF; +2> initiate the SCG failure information procedure as specified in 5.6.13 to report SCG radio link failure; +The UE may discard the radio link failure information, i.e. release the UE variable VarRLF-Report, 48 hours after the radio link failure is detected, upon power off or upon detach. +5.3.12 UE actions upon leaving RRC_CONNECTED +Upon leaving RRC_CONNECTED, the UE shall: +1> reset MAC; +1> stop all timers that are running except T320, T325 and T330; +1> release all radio resources, including release of the RLC entity, the MAC configuration and the associated PDCP entity for all established RBs; +1> indicate the release of the RRC connection to upper layers together with the release cause; +1> if leaving RRC_CONNECTED was triggered neither by reception of the MobilityFromEUTRACommand message nor by selecting an inter-RAT cell while T311 was running: +2> enter RRC_IDLE and perform procedures as specified in TS 36.304 [4, 5.2.7]; +2> if timer T350 is configured: +3> start timer T350; +2> else: +3> release the wlan-OffloadConfigDedicated, if received; +3> if the wlan-OffloadConfigCommon corresponding to the RPLMN is broadcast by the cell: +4> apply the wlan-OffloadConfigCommon corresponding to the RPLMN included in SystemInformationBlockType17; +1> else: +2> release the wlan-OffloadConfigDedicated, if received; +5.3.13 UE actions upon PUCCH/ SRS release request +Upon receiving a PUCCH/ SRS release request from lower layers, the UE shall: +1> apply the default physical channel configuration for cqi-ReportConfig as specified in 9.2.4 and release cqi-ReportConfigSCell, for each SCell of the concerned CG that is configured, if any; +1> apply the default physical channel configuration for soundingRS-UL-ConfigDedicated as specified in 9.2.4, for all serving cells of the concerned CG; +1> apply the default physical channel configuration for schedulingRequestConfig as specified in 9.2.4, for the concerned CG; +Upon receiving an SRS release request from lower layers, the UE shall: +1> apply the default physical channel configuration for soundingRS-UL-ConfigDedicated, as specified in 9.2.4, for the cells of the concerned TAG; +NOTE: Upon PUCCH/ SRS release request, the UE does not modify the soundingRS-UL-ConfigDedicatedAperiodic i.e. it does not apply the default for this field (release). +5.3.14 Proximity indication +5.3.14.1 General + +Figure 5.3.14.1-1: Proximity indication +The purpose of this procedure is to indicate that the UE is entering or leaving the proximity of one or more CSG member cells. The detection of proximity is based on an autonomous search function as defined in TS 36.304 [4]. +5.3.14.2 Initiation +A UE in RRC_CONNECTED shall: +1> if the UE enters the proximity of one or more CSG member cell(s) on an E-UTRA frequency while proximity indication is enabled for such E-UTRA cells; or +1> if the UE enters the proximity of one or more CSG member cell(s) on an UTRA frequency while proximity indication is enabled for such UTRA cells; or +1> if the UE leaves the proximity of all CSG member cell(s) on an E-UTRA frequency while proximity indication is enabled for such E-UTRA cells; or +1> if the UE leaves the proximity of all CSG member cell(s) on an UTRA frequency while proximity indication is enabled for such UTRA cells: +2> if the UE has previously not transmitted a ProximityIndication for the RAT and frequency during the current RRC connection, or if more than 5 s has elapsed since the UE has last transmitted a ProximityIndication (either entering or leaving) for the RAT and frequency: +3> initiate transmission of the ProximityIndication message in accordance with 5.3.14.3; +NOTE: In the conditions above, "if the UE enters the proximity of one or more CSG member cell(s)" includes the case of already being in the proximity of such cell(s) at the time proximity indication for the corresponding RAT is enabled. +5.3.14.3 Actions related to transmission of ProximityIndication message +The UE shall set the contents of ProximityIndication message as follows: +1> if the UE applies the procedure to report entering the proximity of CSG member cell(s): +2> set type to entering; +1> else if the UE applies the procedure to report leaving the proximity of CSG member cell(s): +2> set type to leaving; +1> if the proximity indication was triggered for one or more CSG member cell(s) on an E-UTRA frequency: +2> set the carrierFreq to eutra with the value set to the E-ARFCN value of the E-UTRA cell(s) for which proximity indication was triggered; +1> else if the proximity indication was triggered for one or more CSG member cell(s) on a UTRA frequency: +2> set the carrierFreq to utra with the value set to the ARFCN value of the UTRA cell(s) for which proximity indication was triggered; +The UE shall submit the ProximityIndication message to lower layers for transmission. +5.3.15 Void +5.4 Inter-RAT mobility +5.4.1 Introduction +The general principles of connected mode mobility are described in 5.3.1.3. The general principles of the security handling upon connected mode mobility are described in 5.3.1.2. +For the (network controlled) inter RAT mobility from E-UTRA for a UE in RRC_CONNECTED, a single procedure is defined that supports both handover, cell change order with optional network assistance (NACC) and enhanced CS fallback to CDMA2000 1xRTT. In case of mobility to CDMA2000, the eNB decides when to move to the other RAT while the target RAT determines to which cell the UE shall move. +5.4.2 Handover to E-UTRA +5.4.2.1 General + +Figure 5.4.2.1-1: Handover to E-UTRA, successful +The purpose of this procedure is to, under the control of the network, transfer a connection between the UE and another Radio Access Network (e.g. GERAN or UTRAN) to E-UTRAN. +The handover to E-UTRA procedure applies when SRBs, possibly in combination with DRBs, are established in another RAT. Handover from UTRAN to E-UTRAN applies only after integrity has been activated in UTRAN. +5.4.2.2 Initiation +The RAN using another RAT initiates the Handover to E-UTRA procedure, in accordance with the specifications applicable for the other RAT, by sending the RRCConnectionReconfiguration message via the radio access technology from which the inter-RAT handover is performed. +E-UTRAN applies the procedure as follows: +- to activate ciphering, possibly using NULL algorithm, if not yet activated in the other RAT; +- to establish SRB1, SRB2 and one or more DRBs, i.e. at least the DRB associated with the default EPS bearer is established; +5.4.2.3 Reception of the RRCConnectionReconfiguration by the UE +If the UE is able to comply with the configuration included in the RRCConnectionReconfiguration message, the UE shall: +1> apply the default physical channel configuration as specified in 9.2.4; +1> apply the default semi-persistent scheduling configuration as specified in 9.2.3; +1> apply the default MAC main configuration as specified in 9.2.2; +1> start timer T304 with the timer value set to t304, as included in the mobilityControlInfo; +1> consider the target PCell to be one on the frequency indicated by the carrierFreq with a physical cell identity indicated by the targetPhysCellId; +1> start synchronising to the DL of the target PCell; +1> set the C-RNTI to the value of the newUE-Identity; +1> for the target PCell, apply the downlink bandwidth indicated by the dl-Bandwidth; +1> for the target PCell, apply the uplink bandwidth indicated by (the absence or presence of) the ul-Bandwidth; +1> configure lower layers in accordance with the received radioResourceConfigCommon; +1> configure lower layers in accordance with any additional fields, not covered in the previous, if included in the received mobilityControlInfo; +1> perform the radio resource configuration procedure as specified in 5.3.10; +1> forward the nas-SecurityParamToEUTRA to the upper layers; +1> derive the KeNB key, as specified in TS 33.401 [32]; +1> derive the KRRCint key associated with the integrityProtAlgorithm, as specified in TS 33.401 [32]; +1> derive the KRRCenc key and the KUPenc key associated with the cipheringAlgorithm, as specified in TS 33.401 [32]; +1> configure lower layers to apply the indicated integrity protection algorithm and the KRRCint key immediately, i.e. the indicated integrity protection configuration shall be applied to all subsequent messages received and sent by the UE, including the message used to indicate the successful completion of the procedure; +1> configure lower layers to apply the indicated ciphering algorithm, the KRRCenc key and the KUPenc key immediately, i.e. the indicated ciphering configuration shall be applied to all subsequent messages received and sent by the UE, including the message used to indicate the successful completion of the procedure; +1> if the received RRCConnectionReconfiguration includes the sCellToAddModList: +2> perform SCell addition as specified in 5.3.10.3b; +1> if the RRCConnectionReconfiguration message includes the measConfig: +2> perform the measurement configuration procedure as specified in 5.5.2; +1> perform the measurement identity autonomous removal as specified in 5.5.2.2a; +1> if the RRCConnectionReconfiguration message includes the otherConfig: +2> perform the other configuration procedure as specified in 5.3.10.9; +1> if the RRCConnectionReconfiguration message includes wlan-OffloadInfo: +2> perform the dedicated WLAN offload configuration procedure as specified in 5.6.12.2; +1> set the content of RRCConnectionReconfigurationComplete message as follows: +2> if the UE has radio link failure or handover failure information available in VarRLF-Report and if the RPLMN is included in plmn-IdentityList stored in VarRLF-Report: +3> include rlf-InfoAvailable; +2> if the UE has MBSFN logged measurements available for E-UTRA and if the RPLMN is included in plmn-IdentityList stored in VarLogMeasReport and if T330 is not running: +3> include logMeasAvailableMBSFN; +2> else if the UE has logged measurements available for E-UTRA and if the RPLMN is included in plmn-IdentityList stored in VarLogMeasReport: +3> include the logMeasAvailable; +2> if the UE has connection establishment failure information available in VarConnEstFailReport and if the RPLMN is equal to plmn-Identity stored in VarConnEstFailReport: +3> include connEstFailInfoAvailable; +1> submit the RRCConnectionReconfigurationComplete message to lower layers for transmission using the new configuration; +1> if the RRCConnectionReconfiguration message does not include rlf-TimersAndConstants set to setup: +2> use the default values specified in 9.2.5 for timer T310, T311 and constant N310, N311; +1> if MAC successfully completes the random access procedure: +2> stop timer T304; +2> apply the parts of the CQI reporting configuration, the scheduling request configuration and the sounding RS configuration that do not require the UE to know the SFN of the target PCell, if any; +2> apply the parts of the measurement and the radio resource configuration that require the UE to know the SFN of the target PCell (e.g. measurement gaps, periodic CQI reporting, scheduling request configuration, sounding RS configuration), if any, upon acquiring the SFN of the target PCell; +NOTE 1: Whenever the UE shall setup or reconfigure a configuration in accordance with a field that is received it applies the new configuration, except for the cases addressed by the above statements. +2> enter E-UTRA RRC_CONNECTED, upon which the procedure ends; +NOTE 2: The UE is not required to determine the SFN of the target PCell by acquiring system information from that cell before performing RACH access in the target PCell. +5.4.2.4 Reconfiguration failure +The UE shall: +1> if the UE is unable to comply with (part of) the configuration included in the RRCConnectionReconfiguration message: +2> perform the actions defined for this failure case as defined in the specifications applicable for the other RAT; +NOTE 1: The UE may apply above failure handling also in case the RRCConnectionReconfiguration message causes a protocol error for which the generic error handling as defined in 5.7 specifies that the UE shall ignore the message. +NOTE 2: If the UE is unable to comply with part of the configuration, it does not apply any part of the configuration, i.e. there is no partial success/ failure. +5.4.2.5 T304 expiry (handover to E-UTRA failure) +The UE shall: +1> upon T304 expiry (handover to E-UTRA failure): +2> reset MAC; +2> perform the actions defined for this failure case as defined in the specifications applicable for the other RAT; +5.4.3 Mobility from E-UTRA +5.4.3.1 General + +Figure 5.4.3.1-1: Mobility from E-UTRA, successful + +Figure 5.4.3.1-2: Mobility from E-UTRA, failure +The purpose of this procedure is to move a UE in RRC_CONNECTED to a cell using another Radio Access Technology (RAT), e.g. GERAN, UTRA or CDMA2000 systems. The mobility from E-UTRA procedure covers the following type of mobility: +- handover, i.e. the MobilityFromEUTRACommand message includes radio resources that have been allocated for the UE in the target cell; +- cell change order, i.e. the MobilityFromEUTRACommand message may include information facilitating access of and/ or connection establishment in the target cell, e.g. system information. Cell change order is applicable only to GERAN; and +- enhanced CS fallback to CDMA2000 1xRTT, i.e. the MobilityFromEUTRACommand message includes radio resources that have been allocated for the UE in the target cell. The enhanced CS fallback to CDMA2000 1xRTT may be combined with concurrent handover or redirection to CDMA2000 HRPD. +NOTE: For the case of dual receiver/transmitter enhanced CS fallback to CDMA2000 1xRTT, the DLInformationTransfer message is used instead of the MobilityFromEUTRACommand message (see TS 36.300 [9]). +5.4.3.2 Initiation +E-UTRAN initiates the mobility from E-UTRA procedure to a UE in RRC_CONNECTED, possibly in response to a MeasurementReport message or in response to reception of CS fallback indication for the UE from MME, by sending a MobilityFromEUTRACommand message. E-UTRAN applies the procedure as follows: +- the procedure is initiated only when AS-security has been activated, and SRB2 with at least one DRB are setup and not suspended; +5.4.3.3 Reception of the MobilityFromEUTRACommand by the UE +The UE shall be able to receive a MobilityFromEUTRACommand message and perform a cell change order to GERAN, even if no prior UE measurements have been performed on the target cell. +The UE shall: +1> stop timer T310, if running; +1> stop timer T312, if running; +1> if the MobilityFromEUTRACommand message includes the purpose set to handover: +2> if the targetRAT-Type is set to utra or geran: +3> consider inter-RAT mobility as initiated towards the RAT indicated by the targetRAT-Type included in the MobilityFromEUTRACommand message; +3> forward the nas-SecurityParamFromEUTRA to the upper layers; +3> access the target cell indicated in the inter-RAT message in accordance with the specifications of the target RAT; +3> if the targetRAT-Type is set to geran: +4> use the contents of systemInformation, if provided for PS Handover, as the system information to begin access on the target GERAN cell; +NOTE 1: If there are DRBs for which no radio bearers are established in the target RAT as indicated in the targetRAT-MessageContainer in the message, the E-UTRA RRC part of the UE does not indicate the release of the concerned DRBs to the upper layers. Upper layers may derive which bearers are not established from information received from the AS of the target RAT. +NOTE 2: In case of SR-VCC, the DRB to be replaced is specified in [61]. +2> else if the targetRAT-Type is set to cdma2000-1XRTT or cdma2000-HRPD: +3> forward the targetRAT-Type and the targetRAT-MessageContainer to the CDMA2000 upper layers for the UE to access the cell(s) indicated in the inter-RAT message in accordance with the specifications of the CDMA2000 target-RAT; +1> else if the MobilityFromEUTRACommand message includes the purpose set to cellChangeOrder: +2> start timer T304 with the timer value set to t304, as included in the MobilityFromEUTRACommand message; +2> if the targetRAT-Type is set to geran: +3> if networkControlOrder is included in the MobilityFromEUTRACommand message: +4> apply the value as specified in TS 44.060 [36]; +3> else: +4> acquire networkControlOrder and apply the value as specified in TS 44.060 [36]; +3> use the contents of systemInformation, if provided, as the system information to begin access on the target GERAN cell; +2> establish the connection to the target cell indicated in the CellChangeOrder; +NOTE 3: The criteria for success or failure of the cell change order to GERAN are specified in TS 44.060[36]. +1> if the MobilityFromEUTRACommand message includes the purpose set to e-CSFB: +2> if messageContCDMA2000-1XRTT is present: +3> forward the messageContCDMA2000-1XRTT to the CDMA2000 upper layers for the UE to access the cell(s) indicated in the inter-RAT message in accordance with the specification of the target RAT; +2> if mobilityCDMA2000-HRPD is present and is set to handover: +3> forward the messageContCDMA2000-HRPD to the CDMA2000 upper layers for the UE to access the cell(s) indicated in the inter-RAT message in accordance with the specification of the target RAT; +2> if mobilityCDMA2000-HRPD is present and is set to redirection: +3> forward the redirectCarrierCDMA2000-HRPD to the CDMA2000 upper layers; +NOTE 4: When the CDMA2000 upper layers in the UE receive both the messageContCDMA2000-1XRTT and messageContCDMA2000-HRPD the UE performs concurrent access to both CDMA2000 1xRTT and CDMA2000 HRPD RAT. +NOTE 5: The UE should perform the handover, the cell change order or enhanced 1xRTT CS fallback as soon as possible following the reception of the RRC message MobilityFromEUTRACommand, which could be before confirming successful reception (HARQ and ARQ) of this message. +5.4.3.4 Successful completion of the mobility from E-UTRA +Upon successfully completing the handover, the cell change order or enhanced 1xRTT CS fallback, the UE shall: +1> perform the actions upon leaving RRC_CONNECTED as specified in 5.3.12, with release cause 'other'; +NOTE: If the UE performs enhanced 1xRTT CS fallback along with concurrent mobility to CDMA2000 HRPD and the connection to either CDMA2000 1xRTT or CDMA2000 HRPD succeeds, then the mobility from E-UTRA is considered successful. +5.4.3.5 Mobility from E-UTRA failure +The UE shall: +1> if T304 expires (mobility from E-UTRA failure); or +1> if the UE does not succeed in establishing the connection to the target radio access technology; or +1> if the UE is unable to comply with (part of) the configuration included in the MobilityFromEUTRACommand message; or +1> if there is a protocol error in the inter RAT information included in the MobilityFromEUTRACommand message, causing the UE to fail the procedure according to the specifications applicable for the target RAT: +2> stop T304, if running; +2> if the cs-FallbackIndicator in the MobilityFromEUTRACommand message was set to TRUE or e-CSFB was present: +3> indicate to upper layers that the CS Fallback procedure has failed; +2> revert back to the configuration used in the source PCell, excluding the configuration configured by the physicalConfigDedicated, mac-MainConfig and sps-Config; +2> initiate the connection re-establishment procedure as specified in 5.3.7; +NOTE: For enhanced CS fallback to CDMA2000 1xRTT, the above UE behavior applies only when the UE is attempting the enhanced 1xRTT CS fallback and connection to the target radio access technology fails or if the UE is attempting enhanced 1xRTT CS fallback along with concurrent mobility to CDMA2000 HRPD and connection to both the target radio access technologies fails. +5.4.4 Handover from E-UTRA preparation request (CDMA2000) +5.4.4.1 General + +Figure 5.4.4.1-1: Handover from E-UTRA preparation request +The purpose of this procedure is to trigger the UE to prepare for handover or enhanced 1xRTT CS fallback to CDMA2000 by requesting a connection with this network. The UE may use this procedure to concurrently prepare for handover to CDMA2000 HRPD along with preparation for enhanced CS fallback to CDMA2000 1xRTT. This procedure applies to CDMA2000 capable UEs only. +This procedure is also used to trigger the UE which supports dual Rx/Tx enhanced 1xCSFB to redirect its second radio to CDMA2000 1xRTT. +The handover from E-UTRA preparation request procedure applies when signalling radio bearers are established. +5.4.4.2 Initiation +E-UTRAN initiates the handover from E-UTRA preparation request procedure to a UE in RRC_CONNECTED, possibly in response to a MeasurementReport message or CS fallback indication for the UE, by sending a HandoverFromEUTRAPreparationRequest message. E-UTRA initiates the procedure only when AS security has been activated. +5.4.4.3 Reception of the HandoverFromEUTRAPreparationRequest by the UE +Upon reception of the HandoverFromEUTRAPreparationRequest message, the UE shall: +1> if dualRxTxRedirectIndicator is present in the received message: +2> forward dualRxTxRedirectIndicator to the CDMA2000 upper layers; +2> forward redirectCarrierCDMA2000-1XRTT to the CDMA2000 upper layers, if included; +1> else: +2> indicate the request to prepare handover or enhanced 1xRTT CS fallback and forward the cdma2000-Type to the CDMA2000 upper layers; +2> if cdma2000-Type is set to type1XRTT: +3> forward the rand and the mobilityParameters to the CDMA2000 upper layers; +2> if concurrPrepCDMA2000-HRPD is present in the received message: +3> forward concurrPrepCDMA2000-HRPD to the CDMA2000 upper layers; +2> else: +3> forward concurrPrepCDMA2000-HRPD, with its value set to FALSE, to the CDMA2000 upper layers; +5.4.5 UL handover preparation transfer (CDMA2000) +5.4.5.1 General + +Figure 5.4.5.1-1: UL handover preparation transfer +The purpose of this procedure is to tunnel the handover related CDMA2000 dedicated information or enhanced 1xRTT CS fallback related CDMA2000 dedicated information from UE to E-UTRAN when requested by the higher layers. The procedure is triggered by the higher layers on receipt of HandoverFromEUTRAPreparationRequest message. If preparing for enhanced CS fallback to CDMA2000 1xRTT and handover to CDMA2000 HRPD, the UE sends two consecutive ULHandoverPreparationTransfer messages to E-UTRAN, one per addressed CDMA2000 RAT Type. This procedure applies to CDMA2000 capable UEs only. +5.4.5.2 Initiation +A UE in RRC_CONNECTED initiates the UL Handover Preparation Transfer procedure whenever there is a need to transfer handover or enhanced 1xRTT CS fallback related non-3GPP dedicated information. The UE initiates the UL handover preparation transfer procedure by sending the ULHandoverPreparationTransfer message. +5.4.5.3 Actions related to transmission of the ULHandoverPreparationTransfer message +The UE shall set the contents of the ULHandoverPreparationTransfer message as follows: +1> include the cdma2000-Type and the dedicatedInfo; +1> if the cdma2000-Type is set to type1XRTT: +2> include the meid and set it to the value received from the CDMA2000 upper layers; +1> submit the ULHandoverPreparationTransfer message to lower layers for transmission, upon which the procedure ends; +5.4.5.4 Failure to deliver the ULHandoverPreparationTransfer message +The UE shall: +1> if the UE is unable to guarantee successful delivery of ULHandoverPreparationTransfer messages: +2> inform upper layers about the possible failure to deliver the information contained in the concerned ULHandoverPreparationTransfer message; +5.4.6 Inter-RAT cell change order to E-UTRAN +5.4.6.1 General +The purpose of the inter-RAT cell change order to E-UTRAN procedure is to transfer, under the control of the source radio access technology, a connection between the UE and another radio access technology (e.g. GSM/ GPRS) to E-UTRAN. +5.4.6.2 Initiation +The procedure is initiated when a radio access technology other than E-UTRAN, e.g. GSM/GPRS, using procedures specific for that RAT, orders the UE to change to an E-UTRAN cell. In response, upper layers request the establishment of an RRC connection as specified in subclause 5.3.3. +NOTE: Within the message used to order the UE to change to an E-UTRAN cell, the source RAT should specify the identity of the target E-UTRAN cell as specified in the specifications for that RAT. +The UE shall: +1> upon receiving an RRCConnectionSetup message: +2> consider the inter-RAT cell change order procedure to have completed successfully; +5.4.6.3 UE fails to complete an inter-RAT cell change order +If the inter-RAT cell change order fails the UE shall return to the other radio access technology and proceed as specified in the appropriate specifications for that RAT. +The UE shall: +1> upon failure to establish the RRC connection as specified in subclause 5.3.3: +2> consider the inter-RAT cell change order procedure to have failed; +NOTE: The cell change was network ordered. Therefore, failure to change to the target PCell should not cause the UE to move to UE-controlled cell selection. +5.5 Measurements +5.5.1 Introduction +The UE reports measurement information in accordance with the measurement configuration as provided by E-UTRAN. E-UTRAN provides the measurement configuration applicable for a UE in RRC_CONNECTED by means of dedicated signalling, i.e. using the RRCConnectionReconfiguration message. +The UE can be requested to perform the following types of measurements: +- Intra-frequency measurements: measurements at the downlink carrier frequency(ies) of the serving cell(s). +- Inter-frequency measurements: measurements at frequencies that differ from any of the downlink carrier frequency(ies) of the serving cell(s). +- Inter-RAT measurements of UTRA frequencies. +- Inter-RAT measurements of GERAN frequencies. +- Inter-RAT measurements of CDMA2000 HRPD or CDMA2000 1xRTT frequencies. +The measurement configuration includes the following parameters: +1. Measurement objects: The objects on which the UE shall perform the measurements. +- For intra-frequency and inter-frequency measurements a measurement object is a single E-UTRA carrier frequency. Associated with this carrier frequency, E-UTRAN can configure a list of cell specific offsets and a list of 'blacklisted' cells. Blacklisted cells are not considered in event evaluation or measurement reporting. +- For inter-RAT UTRA measurements a measurement object is a set of cells on a single UTRA carrier frequency. +- For inter-RAT GERAN measurements a measurement object is a set of GERAN carrier frequencies. +- For inter-RAT CDMA2000 measurements a measurement object is a set of cells on a single (HRPD or 1xRTT) carrier frequency. +NOTE 1: Some measurements using the above mentioned measurement objects, only concern a single cell, e.g. measurements used to report neighbouring cell system information, PCell UE Rx-Tx time difference. +2. Reporting configurations: A list of reporting configurations where each reporting configuration consists of the following: +- Reporting criterion: The criterion that triggers the UE to send a measurement report. This can either be periodical or a single event description. +- Reporting format: The quantities that the UE includes in the measurement report and associated information (e.g. number of cells to report). +3. Measurement identities: A list of measurement identities where each measurement identity links one measurement object with one reporting configuration. By configuring multiple measurement identities it is possible to link more than one measurement object to the same reporting configuration, as well as to link more than one reporting configuration to the same measurement object. The measurement identity is used as a reference number in the measurement report. +4. Quantity configurations: One quantity configuration is configured per RAT type. The quantity configuration defines the measurement quantities and associated filtering used for all event evaluation and related reporting of that measurement type. One filter can be configured per measurement quantity. +5. Measurement gaps: Periods that the UE may use to perform measurements, i.e. no (UL, DL) transmissions are scheduled. +E-UTRAN only configures a single measurement object for a given frequency, i.e. it is not possible to configure two or more measurement objects for the same frequency with different associated parameters, e.g. different offsets and/ or blacklists. E-UTRAN may configure multiple instances of the same event e.g. by configuring two reporting configurations with different thresholds. +The UE maintains a single measurement object list, a single reporting configuration list, and a single measurement identities list. The measurement object list includes measurement objects, that are specified per RAT type, possibly including intra-frequency object(s) (i.e. the object(s) corresponding to the serving frequency(ies)), inter-frequency object(s) and inter-RAT objects. Similarly, the reporting configuration list includes E-UTRA and inter-RAT reporting configurations. Any measurement object can be linked to any reporting configuration of the same RAT type. Some reporting configurations may not be linked to a measurement object. Likewise, some measurement objects may not be linked to a reporting configuration. +The measurement procedures distinguish the following types of cells: +1. The serving cell(s)– these are the PCell and one or more SCells, if configured for a UE supporting CA. +2. Listed cells - these are cells listed within the measurement object(s). +3. Detected cells - these are cells that are not listed within the measurement object(s) but are detected by the UE on the carrier frequency(ies) indicated by the measurement object(s). +For E-UTRA, the UE measures and reports on the serving cell(s), listed cells and detected cells. For inter-RAT UTRA, the UE measures and reports on listed cells and optionally on cells that are within a range for which reporting is allowed by E-UTRAN. For inter-RAT GERAN, the UE measures and reports on detected cells. For inter-RAT CDMA2000, the UE measures and reports on listed cells. +NOTE 2: For inter-RAT UTRA and CDMA2000, the UE measures and reports also on detected cells for the purpose of SON. +NOTE 3: This specification is based on the assumption that typically CSG cells of home deployment type are not indicated within the neighbour list. Furthermore, the assumption is that for non-home deployments, the physical cell identity is unique within the area of a large macro cell (i.e. as for UTRAN). +Whenever the procedural specification, other than contained in sub-clause 5.5.2, refers to a field it concerns a field included in the VarMeasConfig unless explicitly stated otherwise i.e. only the measurement configuration procedure covers the direct UE action related to the received measConfig. +5.5.2 Measurement configuration +5.5.2.1 General +E-UTRAN applies the procedure as follows: +- to ensure that, whenever the UE has a measConfig, it includes a measObject for each serving frequency; +- to configure at most one measurement identity using a reporting configuration with the purpose set to reportCGI; +- for serving frequencies, set the EARFCN within the corresponding measObject according to the band as used for reception/ transmission; +The UE shall: +1> if the received measConfig includes the measObjectToRemoveList: +2> perform the measurement object removal procedure as specified in 5.5.2.4; +1> if the received measConfig includes the measObjectToAddModList: +2> perform the measurement object addition/ modification procedure as specified in 5.5.2.5; +1> if the received measConfig includes the reportConfigToRemoveList: +2> perform the reporting configuration removal procedure as specified in 5.5.2.6; +1> if the received measConfig includes the reportConfigToAddModList: +2> perform the reporting configuration addition/ modification procedure as specified in 5.5.2.7; +1> if the received measConfig includes the quantityConfig: +2> perform the quantity configuration procedure as specified in 5.5.2.8; +1> if the received measConfig includes the measIdToRemoveList: +2> perform the measurement identity removal procedure as specified in 5.5.2.2; +1> if the received measConfig includes the measIdToAddModList: +2> perform the measurement identity addition/ modification procedure as specified in 5.5.2.3; +1> if the received measConfig includes the measGapConfig: +2> perform the measurement gap configuration procedure as specified in 5.5.2.9; +1> if the received measConfig includes the s-Measure: +2> set the parameter s-Measure within VarMeasConfig to the lowest value of the RSRP ranges indicated by the received value of s-Measure; +1> if the received measConfig includes the preRegistrationInfoHRPD: +2> forward the preRegistrationInfoHRPD to CDMA2000 upper layers; +1> if the received measConfig includes the speedStatePars: +2> set the parameter speedStatePars within VarMeasConfig to the received value of speedStatePars; +1> if the received measConfig includes the allowInterruptions: +2> set the parameter allowInterruptions within VarMeasConfig to the received value of allowInterruptions; +5.5.2.2 Measurement identity removal +The UE shall: +1> for each measId included in the received measIdToRemoveList that is part of the current UE configuration in VarMeasConfig: +2> remove the entry with the matching measId from the measIdList within the VarMeasConfig; +2> remove the measurement reporting entry for this measId from the VarMeasReportList, if included; +2> stop the periodical reporting timer or timer T321, whichever one is running, and reset the associated information (e.g. timeToTrigger) for this measId; +NOTE: The UE does not consider the message as erroneous if the measIdToRemoveList includes any measId value that is not part of the current UE configuration. +5.5.2.2a Measurement identity autonomous removal +The UE shall: +1> for each measId included in the measIdList within VarMeasConfig: +2> if the associated reportConfig concerns an event involving a serving cell while the concerned serving cell is not configured: +3> remove the measId from the measIdList within the VarMeasConfig; +3> remove the measurement reporting entry for this measId from the VarMeasReportList, if included; +3> stop the periodical reporting timer if running, and reset the associated information (e.g. timeToTrigger) for this measId; +NOTE 1: The above UE autonomous removal of measId's applies only for measurement events A1, A2 and A6. +NOTE 2: When performed during re-establishment, the UE is only configured with a primary frequency (i.e. the SCell(s) are released, if configured). +5.5.2.3 Measurement identity addition/ modification +E-UTRAN applies the procedure as follows: +- configure a measId only if the corresponding measurement object, the corresponding reporting configuration and the corresponding quantity configuration, are configured; +The UE shall: +1> for each measId included in the received measIdToAddModList: +2> if an entry with the matching measId exists in the measIdList within the VarMeasConfig: +3> replace the entry with the value received for this measId; +2> else: +3> add a new entry for this measId within the VarMeasConfig; +2> remove the measurement reporting entry for this measId from the VarMeasReportList, if included; +2> stop the periodical reporting timer or timer T321, whichever one is running, and reset the associated information (e.g. timeToTrigger) for this measId; +2> if the triggerType is set to periodical and the purpose is set to reportCGI in the reportConfig associated with this measId: +3> if the measObject associated with this measId concerns E-UTRA: +4> if the si-RequestForHO is included in the reportConfig associated with this measId: +5> start timer T321 with the timer value set to 150 ms for this measId; +4> else: +5> start timer T321 with the timer value set to 1 second for this measId; +3> else if the measObject associated with this measId concerns UTRA: +4> if the si-RequestForHO is included in the reportConfig associated with this measId: +5> for UTRA FDD, start timer T321 with the timer value set to 2 seconds for this measId; +5> for UTRA TDD, start timer T321 with the timer value set to [1 second] for this measId; +4> else: +5> start timer T321 with the timer value set to 8 seconds for this measId; +3> else: +4> start timer T321 with the timer value set to 8 seconds for this measId; +5.5.2.4 Measurement object removal +The UE shall: +1> for each measObjectId included in the received measObjectToRemoveList that is part of the current UE configuration in VarMeasConfig: +2> remove the entry with the matching measObjectId from the measObjectList within the VarMeasConfig; +2> remove all measId associated with this measObjectId from the measIdList within the VarMeasConfig, if any; +2> if a measId is removed from the measIdList: +3> remove the measurement reporting entry for this measId from the VarMeasReportList, if included; +3> stop the periodical reporting timer or timer T321, whichever one is running, and reset the associated information (e.g. timeToTrigger) for this measId; +NOTE: The UE does not consider the message as erroneous if the measObjectToRemoveList includes any measObjectId value that is not part of the current UE configuration. +5.5.2.5 Measurement object addition/ modification +The UE shall: +1> for each measObjectId included in the received measObjectToAddModList: +2> if an entry with the matching measObjectId exists in the measObjectList within the VarMeasConfig, for this entry: +3> reconfigure the entry with the value received for this measObject, except for the fields cellsToAddModList, blackCellsToAddModList, altTTT-CellsToAddModList, cellsToRemoveList, blackCellsToRemoveList, altTTT-CellsToRemoveList, measSubframePatternConfigNeigh and measDS-Config; +3> if the received measObject includes the cellsToRemoveList: +4> for each cellIndex included in the cellsToRemoveList: +5> remove the entry with the matching cellIndex from the cellsToAddModList; +3> if the received measObject includes the cellsToAddModList: +4> for each cellIndex value included in the cellsToAddModList: +5> if an entry with the matching cellIndex exists in the cellsToAddModList: +6> replace the entry with the value received for this cellIndex; +5> else: +6> add a new entry for the received cellIndex to the cellsToAddModList; +3> if the received measObject includes the blackCellsToRemoveList: +4> for each cellIndex included in the blackCellsToRemoveList: +5> remove the entry with the matching cellIndex from the blackCellsToAddModList; +NOTE 1: For each cellIndex included in the blackCellsToRemoveList that concerns overlapping ranges of cells, a cell is removed from the black list of cells only if all cell indexes containing it are removed. +3> if the received measObject includes the blackCellsToAddModList: +4> for each cellIndex included in the blackCellsToAddModList: +5> if an entry with the matching cellIndex is included in the blackCellsToAddModList: +6> replace the entry with the value received for this cellIndex; +5> else: +6> add a new entry for the received cellIndex to the blackCellsToAddModList; +3> if the received measObject includes the altTTT-CellsToRemoveList: +4> for each cellIndex included in the altTTT-CellsToRemoveList: +5> remove the entry with the matching cellIndex from the altTTT-CellsToAddModList; +NOTE 2: For each cellIndex included in the altTTT-CellsToRemoveList that concerns overlapping ranges of cells, a cell is removed from the list of cells only if all cell indexes containing it are removed. +3> if the received measObject includes the altTTT-CellsToAddModList: +4> for each cellIndex value included in the altTTT-CellsToAddModList: +5> if an entry with the matching cellIndex exists in the altTTT-CellsToAddModList: +6> replace the entry with the value received for this cellIndex; +5> else: +6> add a new entry for the received cellIndex to the altTTT-CellsToAddModList; +3> if the received measObject includes measSubframePatternConfigNeigh: +4> set measSubframePatternConfigNeigh within the VarMeasConfig to the value of the received field +3> if the received measObject includes measDS-Config: +4> if measDS-Config is set to setup: +5> if the received measDS-Config includes the measCSI-RS-ToRemoveList: +6> for each measCSI-RS-Id included in the measCSI-RS-ToRemoveList: +7> remove the entry with the matching measCSI-RS-Id from the measCSI-RS-ToAddModList; +5> if the received measDS-Config includes the measCSI-RS-ToAddModList, for each measCSI-RS-Id value included in the measCSI-RS-ToAddModList: +6> if an entry with the matching measCSI-RS-Id exists in the measCSI-RS-ToAddModList: +7> replace the entry with the value received for this measCSI-RS-Id; +6> else: +7> add a new entry for the received measCSI-RS-Id to the measCSI-RS-ToAddModList; +5> set other fields of the measDS-Config within the VarMeasConfig to the value of the received fields; +5> perform the discovery signals measurement timing configuration procedure as specified in 5.5.2.10; +4> else: +5> release the discovery signals measurement configuration; +3> for each measId associated with this measObjectId in the measIdList within the VarMeasConfig, if any: +4> remove the measurement reporting entry for this measId from the VarMeasReportList, if included; +4> stop the periodical reporting timer or timer T321, whichever one is running, and reset the associated information (e.g. timeToTrigger) for this measId; +2> else: +3> add a new entry for the received measObject to the measObjectList within VarMeasConfig; +NOTE 3: UE does not need to retain cellForWhichToReportCGI in the measObject after reporting cgi-Info. +5.5.2.6 Reporting configuration removal +The UE shall: +1> for each reportConfigId included in the received reportConfigToRemoveList that is part of the current UE configuration in VarMeasConfig: +2> remove the entry with the matching reportConfigId from the reportConfigList within the VarMeasConfig; +2> remove all measId associated with the reportConfigId from the measIdList within the VarMeasConfig, if any; +2> if a measId is removed from the measIdList: +3> remove the measurement reporting entry for this measId from the VarMeasReportList, if included; +3> stop the periodical reporting timer or timer T321, whichever one is running, and reset the associated information (e.g. timeToTrigger) for this measId; +NOTE: The UE does not consider the message as erroneous if the reportConfigToRemoveList includes any reportConfigId value that is not part of the current UE configuration. +5.5.2.7 Reporting configuration addition/ modification +The UE shall: +1> for each reportConfigId included in the received reportConfigToAddModList: +2> if an entry with the matching reportConfigId exists in the reportConfigList within the VarMeasConfig, for this entry: +3> reconfigure the entry with the value received for this reportConfig; +3> for each measId associated with this reportConfigId included in the measIdList within the VarMeasConfig, if any: +4> remove the measurement reporting entry for this measId from in VarMeasReportList, if included; +4> stop the periodical reporting timer or timer T321, whichever one is running, and reset the associated information (e.g. timeToTrigger) for this measId; +2> else: +3> add a new entry for the received reportConfig to the reportConfigList within the VarMeasConfig; +5.5.2.8 Quantity configuration +The UE shall: +1> for each RAT for which the received quantityConfig includes parameter(s): +2> set the corresponding parameter(s) in quantityConfig within VarMeasConfig to the value of the received quantityConfig parameter(s); +1> for each measId included in the measIdList within VarMeasConfig: +2> remove the measurement reporting entry for this measId from the VarMeasReportList, if included; +2> stop the periodical reporting timer or timer T321, whichever one is running, and reset the associated information (e.g. timeToTrigger) for this measId; +5.5.2.9 Measurement gap configuration +The UE shall: +1> if measGapConfig is set to setup: +2> if a measurement gap configuration is already setup, release the measurement gap configuration; +2> setup the measurement gap configuration indicated by the measGapConfig in accordance with the received gapOffset, i.e., the first subframe of each gap occurs at an SFN and subframe meeting the following condition (SFN and subframe of MCG cells): +SFN mod T = FLOOR(gapOffset/10); +subframe = gapOffset mod 10; +with T = MGRP/10 as defined in TS 36.133 [16]; +NOTE: The UE applies a single gap, which timing is relative to the MCG cells, even when configured with DC. +1> else: +2> release the measurement gap configuration; +5.5.2.10 Discovery signals measurement timing configuration +The UE shall setup the discovery signals measurement timing configuration (DMTC) in accordance with the received dmtc-PeriodOffset, i.e., the first subframe of each DMTC occasion occurs at an SFN and subframe of the PCell meeting the following condition: +SFN mod T = FLOOR(dmtc-Offset/10); +subframe = dmtc-Offset mod 10; +with T = dmtc-Periodicity/10; +On the concerned frequency, the UE shall not consider discovery signals transmission in subframes outside the DMTC occasion. +5.5.3 Performing measurements +5.5.3.1 General +For all measurements the UE applies the layer 3 filtering as specified in 5.5.3.2, before using the measured results for evaluation of reporting criteria or for measurement reporting. +The UE shall: +1> whenever the UE has a measConfig, perform RSRP and RSRQ measurements for each serving cell as follows: +2> for the PCell, apply the time domain measurement resource restriction in accordance with measSubframePatternPCell, if configured; +2> if the UE supports CRS based discovery signals measurement: +3> for each SCell in deactivated state, apply the discovery signals measurement timing configuration in accordance with measDS-Config, if configured within the measObject corresponding to the frequency of the SCell; +1> for each measId included in the measIdList within VarMeasConfig: +2> if the purpose for the associated reportConfig is set to reportCGI: +3> if si-RequestForHO is configured for the associated reportConfig: +4> perform the corresponding measurements on the frequency and RAT indicated in the associated measObject using autonomous gaps as necessary; +3> else: +4> perform the corresponding measurements on the frequency and RAT indicated in the associated measObject using available idle periods or using autonomous gaps as necessary; +NOTE 1: If autonomous gaps are used to perform measurements, the UE is allowed to temporarily abort communication with all serving cell(s), i.e. create autonomous gaps to perform the corresponding measurements within the limits specified in TS 36.133 [16]. Otherwise, the UE only supports the measurements with the purpose set to reportCGI only if E-UTRAN has provided sufficient idle periods. +3> try to acquire the global cell identity of the cell indicated by the cellForWhichToReportCGI in the associated measObject by acquiring the relevant system information from the concerned cell; +3> if the cell indicated by the cellForWhichToReportCGI included in the associated measObject is an E-UTRAN cell: +4> try to acquire the CSG identity, if the CSG identity is broadcast in the concerned cell; +4> try to acquire the trackingAreaCode in the concerned cell; +4> try to acquire the list of additional PLMN Identities, as included in the plmn-IdentityList, if multiple PLMN identities are broadcast in the concerned cell; +NOTE 2: The 'primary' PLMN is part of the global cell identity. +3> if the cell indicated by the cellForWhichToReportCGI included in the associated measObject is a UTRAN cell: +4> try to acquire the LAC, the RAC and the list of additional PLMN Identities, if multiple PLMN identities are broadcast in the concerned cell; +4> try to acquire the CSG identity, if the CSG identity is broadcast in the concerned cell; +3> if the cell indicated by the cellForWhichToReportCGI included in the associated measObject is a GERAN cell: +4> try to acquire the RAC in the concerned cell; +3> if the cell indicated by the cellForWhichToReportCGI included in the associated measObject is a CDMA2000 cell and the cdma2000-Type included in the measObject is typeHRPD: +4> try to acquire the Sector ID in the concerned cell; +3> if the cell indicated by the cellForWhichToReportCGI included in the associated measObject is a CDMA2000 cell and the cdma2000-Type included in the measObject is type1XRTT: +4> try to acquire the BASE ID, SID and NID in the concerned cell; +2> else: +3> if a measurement gap configuration is setup; or +3> if the UE does not require measurement gaps to perform the concerned measurements: +4> if s-Measure is not configured; or +4> if s-Measure is configured and the PCell RSRP, after layer 3 filtering, is lower than this value; or +4> if measDS-Config is configured in the associated measObject: +5> if the UE supports CSI-RS based discovery signals measurement; and +5> if the eventId in the associated reportConfig is set to eventC1 or eventC2, or if reportStrongestCSI-RSs is included in the associated reportConfig: +6> perform the corresponding measurements of CSI-RS resources on the frequency indicated in the concerned measObject, applying the discovery signals measurement timing configuration in accordance with measDS-Config in the concerned measObject; +6> if reportCRS-Meas is included in the associated reportConfig, perform the corresponding measurements of neighbouring cells on the frequencies indicated in the concerned measObject as follows: +7> for neighbouring cells on the primary frequency, apply the time domain measurement resource restriction in accordance with measSubframePatternConfigNeigh, if configured in the concerned measObject; +7> apply the discovery signals measurement timing configuration in accordance with measDS-Config in the concerned measObject; +5> else: +6> perform the corresponding measurements of neighbouring cells on the frequencies and RATs indicated in the concerned measObject as follows: +7> for neighbouring cells on the primary frequency, apply the time domain measurement resource restriction in accordance with measSubframePatternConfigNeigh, if configured in the concerned measObject; +7> if the UE supports CRS based discovery signals measurement, apply the discovery signals measurement timing configuration in accordance with measDS-Config, if configured in the concerned measObject; +4> if the ue-RxTxTimeDiffPeriodical is configured in the associated reportConfig: +5> perform the UE Rx–Tx time difference measurements on the PCell; +2> perform the evaluation of reporting criteria as specified in 5.5.4; +NOTE 3: The s-Measure defines when the UE is required to perform measurements. The UE is however allowed to perform measurements also when the PCell RSRP exceeds s-Measure, e.g., to measure cells broadcasting a CSG identity following use of the autonomous search function as defined in TS 36.304 [4]. +5.5.3.2 Layer 3 filtering +The UE shall: +1> for each measurement quantity that the UE performs measurements according to 5.5.3.1: +NOTE 1: This does not include quantities configured solely for UE Rx-Tx time difference measurements i.e. for those type of measurements the UE ignores the triggerQuantity and reportQuantity. +2> filter the measured result, before using for evaluation of reporting criteria or for measurement reporting, by the following formula: + +where +Mn is the latest received measurement result from the physical layer; +Fn is the updated filtered measurement result, that is used for evaluation of reporting criteria or for measurement reporting; +Fn-1 is the old filtered measurement result, where F0 is set to M1 when the first measurement result from the physical layer is received; and +a = 1/2(k/4), where k is the filterCoefficient for the corresponding measurement quantity received by the quantityConfig; +2> adapt the filter such that the time characteristics of the filter are preserved at different input rates, observing that the filterCoefficient k assumes a sample rate equal to 200 ms; +NOTE 2: If k is set to 0, no layer 3 filtering is applicable. +NOTE 3: The filtering is performed in the same domain as used for evaluation of reporting criteria or for measurement reporting, i.e., logarithmic filtering for logarithmic measurements. +NOTE 4: The filter input rate is implementation dependent, to fulfil the performance requirements set in [16]. For further details about the physical layer measurements, see TS 36.133 [16]. +5.5.4 Measurement report triggering +5.5.4.1 General +The UE shall: +1> for each measId included in the measIdList within VarMeasConfig: +2> if the corresponding reportConfig includes a purpose set to reportStrongestCellsForSON: +3> consider any neighbouring cell detected on the associated frequency to be applicable; +2> else if the corresponding reportConfig includes a purpose set to reportCGI: +3> consider any neighbouring cell detected on the associated frequency/ set of frequencies (GERAN) which has a physical cell identity matching the value of the cellForWhichToReportCGI included in the corresponding measObject within the VarMeasConfig to be applicable; +2> else: +3> if the corresponding measObject concerns E-UTRA: +4> if the ue-RxTxTimeDiffPeriodical is configured in the corresponding reportConfig: +5> consider only the PCell to be applicable; +4> else if the eventA1 or eventA2 is configured in the corresponding reportConfig: +5> consider only the serving cell to be applicable; +4> else if eventC1 or eventC2 is configured in the corresponding reportConfig; or if reportStrongestCSI-RSs is included in the corresponding reportConfig: +5> consider a CSI-RS resource on the associated frequency to be applicable when the concerned CSI-RS resource is included in the measCSI-RS-ToAddModList defined within the VarMeasConfig for this measId; +4> else: +5> consider any neighbouring cell detected on the associated frequency to be applicable when the concerned cell is not included in the blackCellsToAddModList defined within the VarMeasConfig for this measId; +5> for events involving a serving cell on one frequency and neighbours on another frequency, consider the serving cell on the other frequency as a neighbouring cell; +4> if the corresponding reportConfig includes alternativeTimeToTrigger and if the UE supports alternativeTimeToTrigger: +5> use the value of alternativeTimeToTrigger as the time to trigger instead of the value of timeToTrigger in the corresponding reportConfig for cells included in the altTTT-CellsToAddModList of the corresponding measObject; +3> else if the corresponding measObject concerns UTRA or CDMA2000: +4> consider a neighbouring cell on the associated frequency to be applicable when the concerned cell is included in the cellsToAddModList defined within the VarMeasConfig for this measId (i.e. the cell is included in the white-list); +NOTE 0: The UE may also consider a neighbouring cell on the associated UTRA frequency to be applicable when the concerned cell is included in the csg-allowedReportingCells within the VarMeasConfig for this measId, if configured in the corresponding measObjectUTRA (i.e. the cell is included in the range of physical cell identities for which reporting is allowed). +3> else if the corresponding measObject concerns GERAN: +4> consider a neighbouring cell on the associated set of frequencies to be applicable when the concerned cell matches the ncc-Permitted defined within the VarMeasConfig for this measId; +2> if the triggerType is set to event and if the entry condition applicable for this event, i.e. the event corresponding with the eventId of the corresponding reportConfig within VarMeasConfig, is fulfilled for one or more applicable cells for all measurements after layer 3 filtering taken during timeToTrigger defined for this event within the VarMeasConfig, while the VarMeasReportList does not include an measurement reporting entry for this measId (a first cell triggers the event): +3> include a measurement reporting entry within the VarMeasReportList for this measId; +3> set the numberOfReportsSent defined within the VarMeasReportList for this measId to 0; +3> include the concerned cell(s) in the cellsTriggeredList defined within the VarMeasReportList for this measId; + 3> if the UE supports T312 and if useT312 is included for this event and if T310 is running: +4> if T312 is not running: +5> start timer T312 with the value configured in the corresponding measObject; +3> initiate the measurement reporting procedure, as specified in 5.5.5; +2> if the triggerType is set to event and if the entry condition applicable for this event, i.e. the event corresponding with the eventId of the corresponding reportConfig within VarMeasConfig, is fulfilled for one or more applicable cells not included in the cellsTriggeredList for all measurements after layer 3 filtering taken during timeToTrigger defined for this event within the VarMeasConfig (a subsequent cell triggers the event): +3> set the numberOfReportsSent defined within the VarMeasReportList for this measId to 0; +3> include the concerned cell(s) in the cellsTriggeredList defined within the VarMeasReportList for this measId; + 3> if the UE supports T312 and if useT312 is included for this event and if T310 is running: +4> if T312 is not running: +5> start timer T312 with the value configured in the corresponding measObject; +3> initiate the measurement reporting procedure, as specified in 5.5.5; +2> if the triggerType is set to event and if the leaving condition applicable for this event is fulfilled for one or more of the cells included in the cellsTriggeredList defined within the VarMeasReportList for this measId for all measurements after layer 3 filtering taken during timeToTrigger defined within the VarMeasConfig for this event: +3> remove the concerned cell(s) in the cellsTriggeredList defined within the VarMeasReportList for this measId; + 3> if the UE supports T312 and if useT312 is included for this event and if T310 is running: +4> if T312 is not running: +5> start timer T312 with the value configured in the corresponding measObject; +3> if reportOnLeave is set to TRUE for the corresponding reporting configuration or if a6-ReportOnLeave is set to TRUE for the corresponding reporting configuration: +4> initiate the measurement reporting procedure, as specified in 5.5.5; +3> if the cellsTriggeredList defined within the VarMeasReportList for this measId is empty: +4> remove the measurement reporting entry within the VarMeasReportList for this measId; +4> stop the periodical reporting timer for this measId, if running; +2> if the triggerType is set to event and if the entry condition applicable for this event, i.e. the event corresponding with the eventId of the corresponding reportConfig within VarMeasConfig, is fulfilled for one or more applicable CSI-RS resources for all measurements after layer 3 filtering taken during timeToTrigger defined for this event within the VarMeasConfig, while the VarMeasReportList does not include an measurement reporting entry for this measId (i.e. a first CSI-RS resource triggers the event): +3> include a measurement reporting entry within the VarMeasReportList for this measId; +3> set the numberOfReportsSent defined within the VarMeasReportList for this measId to 0; +3> include the concerned CSI-RS resource(s) in the csi-RS-TriggeredList defined within the VarMeasReportList for this measId; +3> initiate the measurement reporting procedure, as specified in 5.5.5; +2> if the triggerType is set to event and if the entry condition applicable for this event, i.e. the event corresponding with the eventId of the corresponding reportConfig within VarMeasConfig, is fulfilled for one or more applicable CSI-RS resources not included in the csi-RS-TriggeredList for all measurements after layer 3 filtering taken during timeToTrigger defined for this event within the VarMeasConfig (i.e. a subsequent CSI-RS resource triggers the event): +3> set the numberOfReportsSent defined within the VarMeasReportList for this measId to 0; +3> include the concerned CSI-RS resource(s) in the csi-RS-TriggeredList defined within the VarMeasReportList for this measId; +3> initiate the measurement reporting procedure, as specified in 5.5.5; +2> if the triggerType is set to event and if the leaving condition applicable for this event is fulfilled for one or more of the CSI-RS resources included in the csi-RS-TriggeredList defined within the VarMeasReportList for this measId for all measurements after layer 3 filtering taken during timeToTrigger defined within the VarMeasConfig for this event: +3> remove the concerned CSI-RS resource(s) in the csi-RS-TriggeredList defined within the VarMeasReportList for this measId; +3> if c1-ReportOnLeave is set to TRUE for the corresponding reporting configuration or if c2-ReportOnLeave is set to TRUE for the corresponding reporting configuration: +4> initiate the measurement reporting procedure, as specified in 5.5.5; +3> if the csi-RS-TriggeredList defined within the VarMeasReportList for this measId is empty: +4> remove the measurement reporting entry within the VarMeasReportList for this measId; +4> stop the periodical reporting timer for this measId, if running; +2> if the purpose is included and set to reportStrongestCells or to reportStrongestCellsForSON and if a (first) measurement result is available: +3> include a measurement reporting entry within the VarMeasReportList for this measId; +3> set the numberOfReportsSent defined within the VarMeasReportList for this measId to 0; +3> initiate the measurement reporting procedure, as specified in 5.5.5; +NOTE 1: If the purpose is set to reportStrongestCells and reportStrongestCSI-RSs is not included and reportAmount > 1, the UE initiates a first measurement report immediately after the quantity to be reported becomes available for the PCell. If the purpose is set to reportStrongestCells and reportStrongestCSI-RSs is not included and reportAmount = 1, the UE initiates a first measurement report immediately after the quantity to be reported becomes available for the PCell and for the strongest cell among the applicable cells. If the purpose is set to reportStrongestCellsForSON, the UE initiates a first measurement report when it has determined the strongest cells on the associated frequency. +2> upon expiry of the periodical reporting timer for this measId: +3> initiate the measurement reporting procedure, as specified in 5.5.5; +2> if the purpose is included and set to reportCGI and if the UE acquired the information needed to set all fields of cgi-Info for the requested cell: +3> include a measurement reporting entry within the VarMeasReportList for this measId; +3> set the numberOfReportsSent defined within the VarMeasReportList for this measId to 0; +3> stop timer T321; +3> initiate the measurement reporting procedure, as specified in 5.5.5; +2> upon expiry of the T321 for this measId: +3> include a measurement reporting entry within the VarMeasReportList for this measId; +3> set the numberOfReportsSent defined within the VarMeasReportList for this measId to 0; +3> initiate the measurement reporting procedure, as specified in 5.5.5; +NOTE 2: The UE does not stop the periodical reporting with triggerType set to event or to periodical while the corresponding measurement is not performed due to the PCell RSRP being equal to or better than s-Measure or due to the measurement gap not being setup. +NOTE 3: If the UE is configured with DRX, the UE may delay the measurement reporting for event triggered and periodical triggered measurements until the Active Time, which is defined in TS 36.321 [6]. +5.5.4.2 Event A1 (Serving becomes better than threshold) +The UE shall: +1> consider the entering condition for this event to be satisfied when condition A1-1, as specified below, is fulfilled; +1> consider the leaving condition for this event to be satisfied when condition A1-2, as specified below, is fulfilled; +1> for this measurement, consider the primary or secondary cell that is configured on the frequency indicated in the associated measObjectEUTRA to be the serving cell; +Inequality A1-1 (Entering condition) + +Inequality A1-2 (Leaving condition) + +The variables in the formula are defined as follows: +Ms is the measurement result of the serving cell, not taking into account any offsets. +Hys is the hysteresis parameter for this event (i.e. hysteresis as defined within reportConfigEUTRA for this event). +Thresh is the threshold parameter for this event (i.e. a1-Threshold as defined within reportConfigEUTRA for this event). +Ms is expressed in dBm in case of RSRP, or in dB in case of RSRQ. +Hys is expressed in dB. +Thresh is expressed in the same unit as Ms. +5.5.4.3 Event A2 (Serving becomes worse than threshold) +The UE shall: +1> consider the entering condition for this event to be satisfied when condition A2-1, as specified below, is fulfilled; +1> consider the leaving condition for this event to be satisfied when condition A2-2, as specified below, is fulfilled; +1> for this measurement, consider the primary or secondary cell that is configured on the frequency indicated in the associated measObjectEUTRA to be the serving cell; +Inequality A2-1 (Entering condition) + +Inequality A2-2 (Leaving condition) + +The variables in the formula are defined as follows: +Ms is the measurement result of the serving cell, not taking into account any offsets. +Hys is the hysteresis parameter for this event (i.e. hysteresis as defined within reportConfigEUTRA for this event). +Thresh is the threshold parameter for this event (i.e. a2-Threshold as defined within reportConfigEUTRA for this event). +Ms is expressed in dBm in case of RSRP, or in dB in case of RSRQ. +Hys is expressed in dB. +Thresh is expressed in the same unit as Ms. +5.5.4.4 Event A3 (Neighbour becomes offset better than PCell/ PSCell) +The UE shall: +1> consider the entering condition for this event to be satisfied when condition A3-1, as specified below, is fulfilled; +1> consider the leaving condition for this event to be satisfied when condition A3-2, as specified below, is fulfilled; +1> if usePSCell of the corresponding reportConfig is set to true: +2> use the PSCell for Mp, Ofp and Ocp; +1> else: +2> use the PCell for Mp, Ofp and Ocp; +NOTE The cell(s) that triggers the event is on the frequency indicated in the associated measObject which may be different from the frequency used by the PCell/ PSCell. +Inequality A3-1 (Entering condition) + +Inequality A3-2 (Leaving condition) + +The variables in the formula are defined as follows: +Mn is the measurement result of the neighbouring cell, not taking into account any offsets. +Ofn is the frequency specific offset of the frequency of the neighbour cell (i.e. offsetFreq as defined within measObjectEUTRA corresponding to the frequency of the neighbour cell). +Ocn is the cell specific offset of the neighbour cell (i.e. cellIndividualOffset as defined within measObjectEUTRA corresponding to the frequency of the neighbour cell), and set to zero if not configured for the neighbour cell. +Mp is the measurement result of the PCell/ PSCell, not taking into account any offsets. +Ofp is the frequency specific offset of the frequency of the PCell/ PSCell (i.e. offsetFreq as defined within measObjectEUTRA corresponding to the frequency of the PCell/ PSCell). +Ocp is the cell specific offset of the PCell/ PSCell (i.e. cellIndividualOffset as defined within measObjectEUTRA corresponding to the frequency of the PCell/ PSCell), and is set to zero if not configured for the PCell/ PSCell. +Hys is the hysteresis parameter for this event (i.e. hysteresis as defined within reportConfigEUTRA for this event). +Off is the offset parameter for this event (i.e. a3-Offset as defined within reportConfigEUTRA for this event). +Mn, Mp are expressed in dBm in case of RSRP, or in dB in case of RSRQ. +Ofn, Ocn, Ofp, Ocp, Hys, Off are expressed in dB. +5.5.4.5 Event A4 (Neighbour becomes better than threshold) +The UE shall: +1> consider the entering condition for this event to be satisfied when condition A4-1, as specified below, is fulfilled; +1> consider the leaving condition for this event to be satisfied when condition A4-2, as specified below, is fulfilled; +Inequality A4-1 (Entering condition) + +Inequality A4-2 (Leaving condition) + +The variables in the formula are defined as follows: +Mn is the measurement result of the neighbouring cell, not taking into account any offsets. +Ofn is the frequency specific offset of the frequency of the neighbour cell (i.e. offsetFreq as defined within measObjectEUTRA corresponding to the frequency of the neighbour cell). +Ocn is the cell specific offset of the neighbour cell (i.e. cellIndividualOffset as defined within measObjectEUTRA corresponding to the frequency of the neighbour cell), and set to zero if not configured for the neighbour cell. +Hys is the hysteresis parameter for this event (i.e. hysteresis as defined within reportConfigEUTRA for this event). +Thresh is the threshold parameter for this event (i.e. a4-Threshold as defined within reportConfigEUTRA for this event). +Mn is expressed in dBm in case of RSRP, or in dB in case of RSRQ. +Ofn, Ocn, Hys are expressed in dB. +Thresh is expressed in the same unit as Mn. +5.5.4.6 Event A5 (PCell/ PSCell becomes worse than threshold1 and neighbour becomes better than threshold2) +The UE shall: +1> consider the entering condition for this event to be satisfied when both condition A5-1 and condition A5-2, as specified below, are fulfilled; +1> consider the leaving condition for this event to be satisfied when condition A5-3 or condition A5-4, i.e. at least one of the two, as specified below, is fulfilled; +1> if usePSCell of the corresponding reportConfig is set to true: +2> use the PSCell for Mp; +1> else: +2> use the PCell for Mp; +NOTE: The cell(s) that triggers the event is on the frequency indicated in the associated measObject which may be different from the frequency used by the PCell/ PSCell. +Inequality A5-1 (Entering condition 1) + +Inequality A5-2 (Entering condition 2) + +Inequality A5-3 (Leaving condition 1) + +Inequality A5-4 (Leaving condition 2) + +The variables in the formula are defined as follows: +Mp is the measurement result of the PCell/ PSCell, not taking into account any offsets. +Mn is the measurement result of the neighbouring cell, not taking into account any offsets. +Ofn is the frequency specific offset of the frequency of the neighbour cell (i.e. offsetFreq as defined within measObjectEUTRA corresponding to the frequency of the neighbour cell). +Ocn is the cell specific offset of the neighbour cell (i.e. cellIndividualOffset as defined within measObjectEUTRA corresponding to the frequency of the neighbour cell), and set to zero if not configured for the neighbour cell. +Hys is the hysteresis parameter for this event (i.e. hysteresis as defined within reportConfigEUTRA for this event). +Thresh1 is the threshold parameter for this event (i.e. a5-Threshold1 as defined within reportConfigEUTRA for this event). +Thresh2 is the threshold parameter for this event (i.e. a5-Threshold2 as defined within reportConfigEUTRA for this event). +Mn, Mp are expressed in dBm in case of RSRP, or in dB in case of RSRQ. +Ofn, Ocn, Hys are expressed in dB. +Thresh1 is expressed in the same unit as Mp. +Thresh2 is expressed in the same unit as Mn. +5.5.4.6a Event A6 (Neighbour becomes offset better than SCell) +The UE shall: +1> consider the entering condition for this event to be satisfied when condition A6-1, as specified below, is fulfilled; +1> consider the leaving condition for this event to be satisfied when condition A6-2, as specified below, is fulfilled; +1> for this measurement, consider the (secondary) cell that is configured on the frequency indicated in the associated measObjectEUTRA to be the serving cell; +NOTE: The neighbour(s) is on the same frequency as the SCell i.e. both are on the frequency indicated in the associated measObject. +Inequality A6-1 (Entering condition) + +Inequality A6-2 (Leaving condition) + +The variables in the formula are defined as follows: +Mn is the measurement result of the neighbouring cell, not taking into account any offsets. +Ocn is the cell specific offset of the neighbour cell (i.e. cellIndividualOffset as defined within measObjectEUTRA corresponding to the frequency of the neighbour cell), and set to zero if not configured for the neighbour cell. +Ms is the measurement result of the serving cell, not taking into account any offsets. +Ocs is the cell specific offset of the serving cell (i.e. cellIndividualOffset as defined within measObjectEUTRA corresponding to the serving frequency), and is set to zero if not configured for the serving cell. +Hys is the hysteresis parameter for this event (i.e. hysteresis as defined within reportConfigEUTRA for this event). +Off is the offset parameter for this event (i.e. a6-Offset as defined within reportConfigEUTRA for this event). +Mn, Ms are expressed in dBm in case of RSRP, or in dB in case of RSRQ. +Ocn, Ocs, Hys, Off are expressed in dB. +5.5.4.7 Event B1 (Inter RAT neighbour becomes better than threshold) +The UE shall: +1> for UTRA and CDMA2000, only trigger the event for cells included in the corresponding measurement object; +1> consider the entering condition for this event to be satisfied when condition B1-1, as specified below, is fulfilled; +1> consider the leaving condition for this event to be satisfied when condition B1-2, as specified below, is fulfilled; +Inequality B1-1 (Entering condition) + +Inequality B1-2 (Leaving condition) + +The variables in the formula are defined as follows: +Mn is the measurement result of the inter-RAT neighbour cell, not taking into account any offsets. For CDMA 2000 measurement result, pilotStrength is divided by -2. +Ofn is the frequency specific offset of the frequency of the inter-RAT neighbour cell (i.e. offsetFreq as defined within the measObject corresponding to the frequency of the neighbour inter-RAT cell). +Hys is the hysteresis parameter for this event (i.e. hysteresis as defined within reportConfigInterRAT for this event). +Thresh is the threshold parameter for this event (i.e. b1-Threshold as defined within reportConfigInterRAT for this event). For CDMA2000, b1-Threshold is divided by -2. +Mn is expressed in dBm or in dB, depending on the measurement quantity of the inter-RAT neighbour cell. +Ofn, Hys are expressed in dB. +Thresh is expressed in the same unit as Mn. +5.5.4.8 Event B2 (PCell becomes worse than threshold1 and inter RAT neighbour becomes better than threshold2) +The UE shall: +1> for UTRA and CDMA2000, only trigger the event for cells included in the corresponding measurement object; +1> consider the entering condition for this event to be satisfied when both condition B2-1 and condition B2-2, as specified below, are fulfilled; +1> consider the leaving condition for this event to be satisfied when condition B2-3 or condition B2-4, i.e. at least one of the two, as specified below, is fulfilled; +Inequality B2-1 (Entering condition 1) + +Inequality B2-2 (Entering condition 2) + +Inequality B2-3 (Leaving condition 1) + +Inequality B2-4 (Leaving condition 2) + +The variables in the formula are defined as follows: +Mp is the measurement result of the PCell, not taking into account any offsets. +Mn is the measurement result of the inter-RAT neighbour cell, not taking into account any offsets. For CDMA2000 measurement result, pilotStrength is divided by -2. +Ofn is the frequency specific offset of the frequency of the inter-RAT neighbour cell (i.e. offsetFreq as defined within the measObject corresponding to the frequency of the inter-RAT neighbour cell). +Hys is the hysteresis parameter for this event (i.e. hysteresis as defined within reportConfigInterRAT for this event). +Thresh1 is the threshold parameter for this event (i.e. b2-Threshold1 as defined within reportConfigInterRAT for this event). +Thresh2 is the threshold parameter for this event (i.e. b2-Threshold2 as defined within reportConfigInterRAT for this event). For CDMA2000, b2-Threshold2 is divided by -2. +Mp is expressed in dBm in case of RSRP, or in dB in case of RSRQ. +Mn is expressed in dBm or dB, depending on the measurement quantity of the inter-RAT neighbour cell. +Ofn, Hys are expressed in dB. +Thresh1 is expressed in the same unit as Mp. +Thresh2 is expressed in the same unit as Mn. +5.5.4.9 Event C1 (CSI-RS resource becomes better than threshold) +The UE shall: +1> consider the entering condition for this event to be satisfied when condition C1-1, as specified below, is fulfilled; +1> consider the leaving condition for this event to be satisfied when condition C1-2, as specified below, is fulfilled; +Inequality C1-1 (Entering condition) + +Inequality C1-2 (Leaving condition) + +The variables in the formula are defined as follows: +Mcr is the measurement result of the CSI-RS resource, not taking into account any offsets. +Ocr is the CSI-RS specific offset (i.e. csi-RS-IndividualOffset as defined within measObjectEUTRA corresponding to the frequency of the CSI-RS resource), and set to zero if not configured for the CSI-RS resource. +Hys is the hysteresis parameter for this event (i.e. hysteresis as defined within reportConfigEUTRA for this event). +Thresh is the threshold parameter for this event (i.e. c1-Threshold as defined within reportConfigEUTRA for this event). +Mcr, Thresh are expressed in dBm. +Ocr, Hys are expressed in dB. +5.5.4.10 Event C2 (CSI-RS resource becomes offset better than reference CSI-RS resource) +The UE shall: +1> consider the entering condition for this event to be satisfied when condition C2-1, as specified below, is fulfilled; +1> consider the leaving condition for this event to be satisfied when condition C2-2, as specified below, is fulfilled; +NOTE: The CSI-RS resource(s) that triggers the event is on the same frequency as the reference CSI-RS resource, i.e. both are on the frequency indicated in the associated measObject. +Inequality C2-1 (Entering condition) + +Inequality C2-2 (Leaving condition) + +The variables in the formula are defined as follows: +Mcr is the measurement result of the CSI-RS resource, not taking into account any offsets. +Ocr is the CSI-RS specific offset of the CSI-RS resource (i.e. csi-RS-IndividualOffset as defined within measObjectEUTRA corresponding to the frequency of the CSI-RS resource), and set to zero if not configured for the CSI-RS resource. +Mref is the measurement result of the reference CSI-RS resource (i.e. c2-RefCSI-RS as defined within reportConfigEUTRA for this event), not taking into account any offsets. +Oref is the CSI-RS specific offset of the reference CSI-RS resource (i.e. csi-RS-IndividualOffset as defined within measObjectEUTRA corresponding to the frequency of the reference CSI-RS resource), and is set to zero if not configured for the reference CSI-RS resource. +Hys is the hysteresis parameter for this event (i.e. hysteresis as defined within reportConfigEUTRA for this event). +Off is the offset parameter for this event (i.e. c2-Offset as defined within reportConfigEUTRA for this event). +Mcr, Mref are expressed in dBm. +Ocr, Oref, Hys, Off are expressed in dB. +5.5.5 Measurement reporting + +Figure 5.5.5-1: Measurement reporting +The purpose of this procedure is to transfer measurement results from the UE to E-UTRAN. +For the measId for which the measurement reporting procedure was triggered, the UE shall set the measResults within the MeasurementReport message as follows: +1> set the measId to the measurement identity that triggered the measurement reporting; +1> set the measResultPCell to include the quantities of the PCell; +1> set the measResultServFreqList to include for each SCell that is configured, if any, within measResultSCell the quantities of the concerned SCell, if available according to performance requirements in [16]; +1> if the reportConfig associated with the measId that triggered the measurement reporting includes reportAddNeighMeas: +2> for each serving frequency for which measObjectId is referenced in the measIdList, other than the frequency corresponding with the measId that triggered the measurement reporting: +3> set the measResultServFreqList to include within measResultBestNeighCell the physCellId and the quantities of the best non-serving cell, based on RSRP, on the concerned serving frequency; +1> if there is at least one applicable neighbouring cell to report: +2> set the measResultNeighCells to include the best neighbouring cells up to maxReportCells in accordance with the following: +3> if the triggerType is set to event: +4> include the cells included in the cellsTriggeredList as defined within the VarMeasReportList for this measId; +3> else: +4> include the applicable cells for which the new measurement results became available since the last periodical reporting or since the measurement was initiated or reset; +NOTE 1: The reliability of the report (i.e. the certainty it contains the strongest cells on the concerned frequency) depends on the measurement configuration i.e. the reportInterval. The related performance requirements are specified in TS 36.133 [16]. +3> for each cell that is included in the measResultNeighCells, include the physCellId; +3> if the triggerType is set to event; or the purpose is set to reportStrongestCells or to reportStrongestCellsForSON: +4> for each included cell, include the layer 3 filtered measured results in accordance with the reportConfig for this measId, ordered as follows: +5> if the measObject associated with this measId concerns E-UTRA: +6> set the measResult to include the quantity(ies) indicated in the reportQuantity within the concerned reportConfig in order of decreasing triggerQuantity, i.e. the best cell is included first; +5> if the measObject associated with this measId concerns UTRA FDD and if ReportConfigInterRAT includes the reportQuantityUTRA-FDD: +6> set the measResult to include the quantities indicated by the reportQuantityUTRA-FDD in order of decreasing measQuantityUTRA-FDD within the quantityConfig, i.e. the best cell is included first; +5> if the measObject associated with this measId concerns UTRA FDD and if ReportConfigInterRAT does not include the reportQuantityUTRA-FDD; or +5> if the measObject associated with this measId concerns UTRA TDD, GERAN or CDMA2000: +6> set the measResult to the quantity as configured for the concerned RAT within the quantityConfig in order of either decreasing quantity for UTRA and GERAN or increasing quantity for CDMA2000 pilotStrength, i.e. the best cell is included first; +3> else if the purpose is set to reportCGI: +4> if the mandatory present fields of the cgi-Info for the cell indicated by the cellForWhichToReportCGI in the associated measObject have been obtained: +5> if the cell broadcasts a CSG identity: +6> include the csg-Identity; +6> include the csg-MemberStatus and set it to member if the cell is a CSG member cell; +5> if the si-RequestForHO is configured within the reportConfig associated with this measId: +6> include the cgi-Info containing all the fields that have been successfully acquired and in accordance with the following: +7> if the cell is a CSG member cell, determine the subset of the PLMN identities, starting from the second entry of PLMN identities in the broadcast information, that meet the following conditions: +a) equal to the RPLMN or an EPLMN; and +b) the CSG whitelist of the UE includes an entry comprising of the concerned PLMN identity and the CSG identity broadcast by the cell; +7> if the subset of PLMN identities determined according to the previous includes at least one PLMN identity, include the plmn-IdentityList and set it to include this subset of the PLMN identities; +7> if the cell is a CSG member cell, include the primaryPLMN-Suitable if the primary PLMN meets conditions a) and b) specified above; +5> else: +6> include the cgi-Info containing all the fields that have been successfully acquired and in accordance with the following: +7> include in the plmn-IdentityList the list of identities starting from the second entry of PLMN Identities in the broadcast information; +1> for the cells included according to the previous (i.e. covering the PCell, the SCells, the best non-serving cells on serving frequencies as well as neighbouring EUTRA cells) include results according to the extended RSRQ if corresponding results are available according to the associated performance requirements defined in 36.133 [16]; +1> if there is at least one applicable CSI-RS resource to report: +2> set the measResultCSI-RS-List to include the best CSI-RS resources up to maxReportCells in accordance with the following: +3> if the triggerType is set to event: +4> include the CSI-RS resources included in the csi-RS-TriggeredList as defined within the VarMeasReportList for this measId; +3> else: +4> include the applicable CSI-RS resources for which the new measurement results became available since the last periodical reporting or since the measurement was initiated or reset; +NOTE 2: The reliability of the report (i.e. the certainty it contains the strongest CSI-RS resources on the concerned frequency) depends on the measurement configuration i.e. the reportInterval. The related performance requirements are specified in TS 36.133 [16]. +3> for each CSI-RS resource that is included in the measResultCSI-RS-List: +4> include the measCSI-RS-Id; +4> include the layer 3 filtered measured results in accordance with the reportConfig for this measId, ordered as follow: +5> set the csi-RSRP-Result to include the quantity indicated in the reportQuantity within the concerned reportConfig in order of decreasing triggerQuantityCSI-RS, i.e. the best CSI-RS resource is included first; +4> if reportCRS-Meas is included within the associated reportConfig, and the cell indicated by physCellId of this CSI-RS resource is not a serving cell: +5> set the measResultNeighCells to include the cell indicated by physCellId of this CSI-RS resource, and include the physCellId; +5> set the rsrpResult to include the RSRP of the concerned cell, if available according to performance requirements in [16]; +5> set the rsrqResult to include the RSRQ of the concerned cell, if available according to performance requirements in [16]; +1> if the ue-RxTxTimeDiffPeriodical is configured within the corresponding reportConfig for this measId; +2> set the ue-RxTxTimeDiffResult to the measurement result provided by lower layers; +2> set the currentSFN; +1> if the includeLocationInfo is configured in the corresponding reportConfig for this measId and detailed location information that has not been reported is available, set the content of the locationInfo as follows: +2> include the locationCoordinates; +2> if available, include the gnss-TOD-msec; +1> increment the numberOfReportsSent as defined within the VarMeasReportList for this measId by 1; +1> stop the periodical reporting timer, if running; +1> if the numberOfReportsSent as defined within the VarMeasReportList for this measId is less than the reportAmount as defined within the corresponding reportConfig for this measId: +2> start the periodical reporting timer with the value of reportInterval as defined within the corresponding reportConfig for this measId; +1> else: +2> if the triggerType is set to periodical: +3> remove the entry within the VarMeasReportList for this measId; +3> remove this measId from the measIdList within VarMeasConfig; +1> if the measured results are for CDMA2000 HRPD: +2> set the preRegistrationStatusHRPD to the UE's CDMA2000 upper layer's HRPD preRegistrationStatus; +1> if the measured results are for CDMA2000 1xRTT: +2> set the preRegistrationStatusHRPD to FALSE; +1> submit the MeasurementReport message to lower layers for transmission, upon which the procedure ends; +5.5.6 Measurement related actions +5.5.6.1 Actions upon handover and re-establishment +E-UTRAN applies the handover procedure as follows: +- when performing the handover procedure, as specified in 5.3.5.4, ensure that a measObjectId corresponding to each handover target serving frequency is configured as a result of the procedures described in this sub-clause and in 5.3.5.4; +- when changing the band while the physical frequency remains unchanged, E-UTRAN releases the measObject corresponding to the source frequency and adds a measObject corresponding to the target frequency (i.e. it does not reconfigure the measObject); +E-UTRAN applies the re-establishment procedure as follows: +- when performing the connection re-establishment procedure, as specified in 5.3.7, ensure that a measObjectId corresponding each target serving frequency is configured as a result of the procedure described in this sub-clause and the subsequent connection reconfiguration procedure immediately following the re-establishment procedure; +- in the first reconfiguration following the re-establishment when changing the band while the physical frequency remains unchanged, E-UTRAN releases the measObject corresponding to the source frequency and adds a measObject corresponding to the target frequency (i.e. it does not reconfigure the measObject); +The UE shall: +1> for each measId included in the measIdList within VarMeasConfig: +2> if the triggerType is set to periodical: +3> remove this measId from the measIdList within VarMeasConfig: +1> if the procedure was triggered due to a handover or successful re-establishment and the procedure involves a change of primary frequency, update the measId values in the measIdList within VarMeasConfig as follows: +2> if a measObjectId value corresponding to the target primary frequency exists in the measObjectList within VarMeasConfig: +3> for each measId value in the measIdList: +4> if the measId value is linked to the measObjectId value corresponding to the source primary frequency: +5> link this measId value to the measObjectId value corresponding to the target primary frequency; +4> else if the measId value is linked to the measObjectId value corresponding to the target primary frequency: +5> link this measId value to the measObjectId value corresponding to the source primary frequency; +2> else: +3> remove all measId values that are linked to the measObjectId value corresponding to the source primary frequency; +1> remove all measurement reporting entries within VarMeasReportList; +1> stop the periodical reporting timer or timer T321, whichever one is running, as well as associated information (e.g. timeToTrigger) for all measId; +1> release the measurement gaps, if activated; +NOTE: If the UE requires measurement gaps to perform inter-frequency or inter-RAT measurements, the UE resumes the inter-frequency and inter-RAT measurements after the E-UTRAN has setup the measurement gaps. +5.5.6.2 Speed dependant scaling of measurement related parameters +The UE shall adjust the value of the following parameter configured by the E-UTRAN depending on the UE speed: timeToTrigger. The UE shall apply 3 different levels, which are selected as follows: +The UE shall: +1> perform mobility state detection using the mobility state detection as specified in TS 36.304 [4] with the following modifications: +2> counting handovers instead of cell reselections; +2> applying the parameter applicable for RRC_CONNECTED as included in speedStatePars within VarMeasConfig; +1> if high mobility state is detected: +2> use the timeToTrigger value multiplied by sf-High within VarMeasConfig; +1> else if medium mobility state is detected: +2> use the timeToTrigger value multiplied by sf-Medium within VarMeasConfig; + 1> else: +2> no scaling is applied; +5.5.7 Inter-frequency RSTD measurement indication +5.5.7.1 General + + +Figure 5.5.7.1-1: Inter-frequency RSTD measurement indication +The purpose of this procedure is to indicate to the network that the UE is going to start/stop OTDOA inter-frequency RSTD measurements which require measurement gaps as specified in [16, 8.1.2.6]. +NOTE: It is a network decision to configure the measurement gap. +5.5.7.2 Initiation +The UE shall: +1> if and only if upper layers indicate to start performing inter-frequency RSTD measurements and the UE requires measurement gaps for these measurements while measurement gaps are either not configured or not sufficient: +2> initiate the procedure to indicate start; +NOTE 1: The UE verifies the measurement gap situation only upon receiving the indication from upper layers. If at this point in time sufficient gaps are available, the UE does not initiate the procedure. Unless it receives a new indication from upper layers, the UE is only allowed to further repeat the procedure in the same PCell once per frequency if the provided measurement gaps are insufficient. +1> if and only if upper layers indicate to stop performing inter-frequency RSTD measurements: +2> initiate the procedure to indicate stop; +NOTE 2: The UE may initiate the procedure to indicate stop even if it did not previously initiate the procedure to indicate start. +5.5.7.3 Actions related to transmission of InterFreqRSTDMeasurementIndication message +The UE shall set the contents of InterFreqRSTDMeasurementIndication message as follows: +1> set the rstd-InterFreqIndication as follows: +2> if the procedure is initiated to indicate start of inter-frequency RSTD measurements: +3> set the rstd-InterFreqInfoList according to the information received from upper layers; +2> else if the procedure is initiated to indicate stop of inter-frequency RSTD measurements: +3> set the rstd-InterFreqIndication to the value stop; +1> submit the InterFreqRSTDMeasurementIndication message to lower layers for transmission, upon which the procedure ends; +5.6 Other +5.6.1 DL information transfer +5.6.1.1 General + +Figure 5.6.1.1-1: DL information transfer +The purpose of this procedure is to transfer NAS or (tunnelled) non-3GPP dedicated information from E-UTRAN to a UE in RRC_CONNECTED. +5.6.1.2 Initiation +E-UTRAN initiates the DL information transfer procedure whenever there is a need to transfer NAS or non-3GPP dedicated information. E-UTRAN initiates the DL information transfer procedure by sending the DLInformationTransfer message. +5.6.1.3 Reception of the DLInformationTransfer by the UE +Upon receiving DLInformationTransfer message, the UE shall: +1> if the dedicatedInfoType is set to dedicatedInfoNAS: +2> forward the dedicatedInfoNAS to the NAS upper layers. +1> if the dedicatedInfoType is set to dedicatedInfoCDMA2000-1XRTT or to dedicatedInfoCDMA2000-HRPD: +2> forward the dedicatedInfoCDMA2000 to the CDMA2000 upper layers; +5.6.2 UL information transfer +5.6.2.1 General + +Figure 5.6.2.1-1: UL information transfer +The purpose of this procedure is to transfer NAS or (tunnelled) non-3GPP dedicated information from the UE to E-UTRAN. +5.6.2.2 Initiation +A UE in RRC_CONNECTED initiates the UL information transfer procedure whenever there is a need to transfer NAS or non-3GPP dedicated information, except at RRC connection establishment in which case the NAS information is piggybacked to the RRCConnectionSetupComplete message. The UE initiates the UL information transfer procedure by sending the ULInformationTransfer message. When CDMA2000 information has to be transferred, the UE shall initiate the procedure only if SRB2 is established. +5.6.2.3 Actions related to transmission of ULInformationTransfer message +The UE shall set the contents of the ULInformationTransfer message as follows: +1> if there is a need to transfer NAS information: +2> set the dedicatedInfoType to include the dedicatedInfoNAS; +1> if there is a need to transfer CDMA2000 1XRTT information: +2> set the dedicatedInfoType to include the dedicatedInfoCDMA2000-1XRTT; +1> if there is a need to transfer CDMA2000 HRPD information: +2> set the dedicatedInfoType to include the dedicatedInfoCDMA2000-HRPD; +1> submit the ULInformationTransfer message to lower layers for transmission, upon which the procedure ends; +5.6.2.4 Failure to deliver ULInformationTransfer message +The UE shall: +1> if mobility (i.e. handover, RRC connection re-establishment) occurs before the successful delivery of ULInformationTransfer messages has been confirmed by lower layers: +2> inform upper layers about the possible failure to deliver the information contained in the concerned ULInformationTransfer messages; +5.6.3 UE capability transfer +5.6.3.1 General + +Figure 5.6.3.1-1: UE capability transfer +The purpose of this procedure is to transfer UE radio access capability information from the UE to E-UTRAN. +If the UE has changed its E-UTRAN radio access capabilities, the UE shall request higher layers to initiate the necessary NAS procedures (see TS 23.401 [41]) that would result in the update of UE radio access capabilities using a new RRC connection. +NOTE: Change of the UE's GERAN UE radio capabilities in RRC_IDLE is supported by use of Tracking Area Update. +5.6.3.2 Initiation +E-UTRAN initiates the procedure to a UE in RRC_CONNECTED when it needs (additional) UE radio access capability information. +5.6.3.3 Reception of the UECapabilityEnquiry by the UE +The UE shall: +1> set the contents of UECapabilityInformation message as follows: +2> if the ue-CapabilityRequest includes eutra: +3> include the UE-EUTRA-Capability within a ue-CapabilityRAT-Container and with the rat-Type set to eutra; +3> if the UE supports FDD and TDD: +4> set all fields of UECapabilityInformation, except field fdd-Add-UE-EUTRA-Capabilities and tdd-Add-UE-EUTRA-Capabilities (including their sub-fields), to include the values applicable for both FDD and TDD (i.e. functionality supported by both modes); +4> if (some of) the UE capability fields have a different value for FDD and TDD: +5> if for FDD, the UE supports additional functionality compared to what is indicated by the previous fields of UECapabilityInformation: +6> include field fdd-Add-UE-EUTRA-Capabilities and set it to include fields reflecting the additional functionality applicable for FDD; +5> if for TDD, the UE supports additional functionality compared to what is indicated by the previous fields of UECapabilityInformation: +6> include field tdd-Add-UE-EUTRA-Capabilities and set it to include fields reflecting the additional functionality applicable for TDD; +NOTE: The UE includes fields of XDD-Add-UE-EUTRA-Capabilities in accordance with the following: +- The field is included only if one or more of its sub-fields has a value that is different compared to the value signalled elsewhere within UE-EUTRA-Capability; +(this value signalled elsewhere is also referred to as the Common value, that is supported for both XDD modes) +- For the fields that are included in XDD-Add-UE-EUTRA-Capabilities, the UE sets: +- the sub-fields that are not allowed to be different the same as the Common value; +- the sub-fields that are allowed to be different to a value indicating at least the same functionality as indicated by the Common value; +3> else (UE supports single xDD mode): +4> set all fields of UECapabilityInformation, except field fdd-Add-UE-EUTRA-Capabilities and tdd-Add-UE-EUTRA-Capabilities (including their sub-fields), to include the values applicable for the xDD mode supported by the UE; +3> if the UECapabilityEnquiry message includes requestedFrequencyBands and UE supports requestedFrequencyBands: +4> create a set of band combinations supported by the UE, including non-CA combinations, target for being included in supportedBandCombination while observing the following order (i.e. listed in order of decreasing priority): +- include all non-CA bands, regardless of whether UE supports carrier aggregation, only: +- if the UE includes ue-Category-v1020 (i.e. indicating category 6 to 8); or +- if for at least one of the non-CA bands, the UE supports more MIMO layers with TM9 and TM10 than implied by the UE category; or +- if the UE supports TM10 with one or more CSI processes; +- include all 2DL+1UL CA band combinations, only consisting of bands included in requestedFrequencyBands; +- include all other 2DL+1UL CA band combinations; +- include all other CA band combinations, only consisting of bands included in requestedFrequencyBands, and prioritized in the order of requestedFrequencyBands, (i.e. first include remaining band combinations containing the first-listed band, then include remaining band combinations containing the second-listed band, and so on); +4> include in supportedBandCombination as many of the target band combinations as possible, determined according to the above, while observing the priority order; +4> include in supportedBandCombinationAdd as many of the remaining target band combinations as possible, i.e. the target band combinations the UE was not able to include in supportedBandCombination, and limited to those consisting of bands included in requestedFrequencyBands, while observing the priority order; +4> indicate in requestedBands the same bands and in the same order as included in the received requestedFrequencyBands; +3> else +4> create a set of band combinations supported by the UE, including non-CA combinations, target for being included in supportedBandCombination: +- include all non-CA bands, regardless of whether UE supports carrier aggregation, only: +- if the UE includes ue-Category-v1020 (i.e. indicating category 6 to 8); or +- if for at least one of the non-CA bands, the UE supports more MIMO layers with TM9 and TM10 than implied by the UE category; or +- if the UE supports TM10 with one or more CSI processes; +- include all 2DL+1UL CA band combinations; +- include all other CA band combinations; +4> include in supportedBandCombination as many of the target band combinations as possible, determined according to the above; +4>  if the number of non-CA and CA band combinations supported by UE exceeds the maximum number of band combinations of supportedBandCombination, the selection of subset of band combinations is up to UE implementation; +NOTE: If the UECapabilityEnquiry message does not include requestedFrequencyBands, UE does not include supportedBandCombinationAdd. +3> if the UE is a category 0 UE according to TS 36.306 [5]: +4> include ue-RadioPagingInfo including ue-Category; +2> if the ue-CapabilityRequest includes geran-cs and if the UE supports GERAN CS domain: +3> include the UE radio access capabilities for GERAN CS within a ue-CapabilityRAT-Container and with the rat-Type set to geran-cs; +2> if the ue-CapabilityRequest includes geran-ps and if the UE supports GERAN PS domain: +3> include the UE radio access capabilities for GERAN PS within a ue-CapabilityRAT-Container and with the rat-Type set to geran-ps; +2> if the ue-CapabilityRequest includes utra and if the UE supports UTRA: +3> include the UE radio access capabilities for UTRA within a ue-CapabilityRAT-Container and with the rat-Type set to utra; +2> if the ue-CapabilityRequest includes cdma2000-1XRTT and if the UE supports CDMA2000 1xRTT: +3> include the UE radio access capabilities for CDMA2000 within a ue-CapabilityRAT-Container and with the rat-Type set to cdma2000-1XRTT; +1> submit the UECapabilityInformation message to lower layers for transmission, upon which the procedure ends; +5.6.4 CSFB to 1x Parameter transfer +5.6.4.1 General + +Figure 5.6.4.1-1: CSFB to 1x Parameter transfer +The purpose of this procedure is to transfer the CDMA2000 1xRTT parameters required to register the UE in the CDMA2000 1xRTT network for CSFB support. +5.6.4.2 Initiation +A UE in RRC_CONNECTED initiates the CSFB to 1x Parameter transfer procedure upon request from the CDMA2000 upper layers. The UE initiates the CSFB to 1x Parameter transfer procedure by sending the CSFBParametersRequestCDMA2000 message. +5.6.4.3 Actions related to transmission of CSFBParametersRequestCDMA2000 message +The UE shall: +1> submit the CSFBParametersRequestCDMA2000 message to lower layers for transmission using the current configuration; +5.6.4.4 Reception of the CSFBParametersResponseCDMA2000 message +Upon reception of the CSFBParametersResponseCDMA2000 message, the UE shall: +1> forward the rand and the mobilityParameters to the CDMA2000 1xRTT upper layers; +5.6.5 UE Information +5.6.5.1 General + +Figure 5.6.5.1-1: UE information procedure +The UE information procedure is used by E-UTRAN to request the UE to report information. +5.6.5.2 Initiation +E-UTRAN initiates the procedure by sending the UEInformationRequest message. +5.6.5.3 Reception of the UEInformationRequest message +Upon receiving the UEInformationRequest message, the UE shall: +1> if rach-ReportReq is set to true, set the contents of the rach-Report in the UEInformationResponse message as follows: +2> set the numberOfPreamblesSent to indicate the number of preambles sent by MAC for the last successfully completed random access procedure; +2> if contention resolution was not successful as specified in TS 36.321 [6] for at least one of the transmitted preambles for the last successfully completed random access procedure: +3> set the contentionDetected to true; +2> else: +3> set the contentionDetected to false; +1> if rlf-ReportReq is set to true and the UE has radio link failure information or handover failure information available in VarRLF-Report and if the RPLMN is included in plmn-IdentityList stored in VarRLF-Report: +2> set timeSinceFailure in VarRLF-Report to the time that elapsed since the last radio link or handover failure in E-UTRA; +2> set the rlf-Report in the UEInformationResponse message to the value of rlf-Report in VarRLF-Report; +2> discard the rlf-Report from VarRLF-Report upon successful delivery of the UEInformationResponse message confirmed by lower layers; +1> if connEstFailReportReq is set to true and the UE has connection establishment failure information in VarConnEstFailReport and if the RPLMN is equal to plmn-Identity stored in VarConnEstFailReport: +2> set timeSinceFailure in VarConnEstFailReport to the time that elapsed since the last connection establishment failure in E-UTRA; +2> set the connEstFailReport in the UEInformationResponse message to the value of connEstFailReport in VarConnEstFailReport; +2> discard the connEstFailReport from VarConnEstFailReport upon successful delivery of the UEInformationResponse message confirmed by lower layers; +1> if the logMeasReportReq is present and if the RPLMN is included in plmn-IdentityList stored in VarLogMeasReport: +2> if VarLogMeasReport includes one or more logged measurement entries, set the contents of the logMeasReport in the UEInformationResponse message as follows: +3> include the absoluteTimeStamp and set it to the value of absoluteTimeInfo in the VarLogMeasReport; +3> include the traceReference and set it to the value of traceReference in the VarLogMeasReport; +3> include the traceRecordingSessionRef and set it to the value of traceRecordingSessionRef in the VarLogMeasReport; +3> include the tce-Id and set it to the value of tce-Id in the VarLogMeasReport; +3> include the logMeasInfoList and set it to include one or more entries from VarLogMeasReport starting from the entries logged first; +3> if the VarLogMeasReport includes one or more additional logged measurement entries that are not included in the logMeasInfoList within the UEInformationResponse message: +4> include the logMeasAvailable; +1> if mobilityHistoryReportReq is set to true: +2> include the mobilityHistoryReport and set it to include entries from VarMobilityHistoryReport; +2> include in the mobilityHistoryReport an entry for the current cell, possibly after removing the oldest entry if required, and set its fields as follows: +3> set visitedCellId to the global cell identity of the current cell: +3> set field timeSpent to the time spent in the current cell; +1> if the logMeasReport is included in the UEInformationResponse: +2> submit the UEInformationResponse message to lower layers for transmission via SRB2; +2> discard the logged measurement entries included in the logMeasInfoList from VarLogMeasReport upon successful delivery of the UEInformationResponse message confirmed by lower layers; +1> else: +2> submit the UEInformationResponse message to lower layers for transmission via SRB1; +5.6.6 Logged Measurement Configuration +5.6.6.1 General + + +Figure 5.6.6.1-1: Logged measurement configuration +The purpose of this procedure is to configure the UE to perform logging of measurement results while in RRC_IDLE and to perform logging of measurement results for MBSFN in both RRC_IDLE and RRC_CONNECTED. The procedure applies to logged measurements capable UEs that are in RRC_CONNECTED. +NOTE E-UTRAN may retrieve stored logged measurement information by means of the UE Information procedure. +5.6.6.2 Initiation +E-UTRAN initiates the logged measurement configuration procedure to UE in RRC_CONNECTED by sending the LoggedMeasurementConfiguration message. +5.6.6.3 Reception of the LoggedMeasurementConfiguration by the UE +Upon receiving the LoggedMeasurementConfiguration message the UE shall: +1> discard the logged measurement configuration as well as the logged measurement information as specified in 5.6.7; +1> store the received loggingDuration, loggingInterval and areaConfiguration, if included, in VarLogMeasConfig; +1> if the LoggedMeasurementConfiguration message includes plmn-IdentityList: +2> set plmn-IdentityList in VarLogMeasReport to include the RPLMN as well as the PLMNs included in plmn-IdentityList; +1> else: +2> set plmn-IdentityList in VarLogMeasReport to include the RPLMN; +1> store the received absoluteTimeInfo, traceReference, traceRecordingSessionRef and tce-Id in VarLogMeasReport; +1> store the received targetMBSFN-AreaList, if included, in VarLogMeasConfig; +1> start timer T330 with the timer value set to the loggingDuration; +5.6.6.4 T330 expiry +Upon expiry of T330 the UE shall: +1> release VarLogMeasConfig; +The UE is allowed to discard stored logged measurements, i.e. to release VarLogMeasReport, 48 hours after T330 expiry. +5.6.7 Release of Logged Measurement Configuration +5.6.7.1 General +The purpose of this procedure is to release the logged measurement configuration as well as the logged measurement information. +5.6.7.2 Initiation +The UE shall initiate the procedure upon receiving a logged measurement configuration in another RAT. The UE shall also initiate the procedure upon power off or detach. +The UE shall: +1> stop timer T330, if running; +1> if stored, discard the logged measurement configuration as well as the logged measurement information, i.e. release the UE variables VarLogMeasConfig and VarLogMeasReport; +5.6.8 Measurements logging +5.6.8.1 General +This procedure specifies the logging of available measurements by a UE in RRC_IDLE that has a logged measurement configuration and the logging of available measurements by a UE in both RRC_IDLE and RRC_CONNECTED if targetMBSFN-AreaList is included in VarLogMeasConfig. +5.6.8.2 Initiation +While T330 is running, the UE shall: +1> perform the logging in accordance with the following: +2> if targetMBSFN-AreaList is included in VarLogMeasConfig: +3> if the UE is camping normally on an E-UTRA cell or is connected to E-UTRA; and +3> if the RPLMN is included in plmn-IdentityList stored in VarLogMeasReport; and +3> if the PCell (in RRC_CONNECTED) or cell where the UE is camping (in RRC_IDLE) is part of the area indicated by areaConfiguration if configured in VarLogMeasConfig: +4> for MBSFN areas, indicated in targetMBSFN-AreaList, from which the UE is receiving MBMS service: +5> perform MBSFN measurements in accordance with the performance requirements as specified in TS 36.133 [16]; +NOTE 1: When configured to perform MBSFN measurement logging by targetMBSFN-AreaList, the UE is not required to receive additional MBSFN subframes, i.e. logging is based on the subframes corresponding to the MBMS services the UE is receiving. +5> perform logging at regular time intervals as defined by the loggingInterval in VarLogMeasConfig, but only for those intervals for which MBSFN measurement results are available as specified in TS 36.133 [16]; +2> else if the UE is camping normally on an E-UTRA cell and if the RPLMN is included in plmn-IdentityList stored in VarLogMeasReport and, if the cell is part of the area indicated by areaConfiguration if configured in VarLogMeasConfig: +3> perform the logging at regular time intervals, as defined by the loggingInterval in VarLogMeasConfig; +2> when adding a logged measurement entry in VarLogMeasReport, include the fields in accordance with the following: +3> set the relativeTimeStamp to indicate the elapsed time since the moment at which the logged measurement configuration was received; +3> if detailed location information became available during the last logging interval, set the content of the locationInfo as follows: +4> include the locationCoordinates; +3> if targetMBSFN-AreaList is included in VarLogMeasConfig: +4> for each MBSFN area, for which the mandatory measurements result fields became available during the last logging interval: +5> set the rsrpResultMBSFN, rsrqResultMBSFN to include measurement results that became available during the last logging interval; +5> include the fields signallingBLER-Result or dataBLER-MCH-ResultList if the concerned BLER results are availble, +5> set the mbsfn-AreaId and carrierFrequency to indicate the MBSFN area in which the UE is receiving MBSFN transmission; +4> if in RRC_CONNECTED: +5> set the servCellIdentity to indicate global cell identity of the PCell; +5> set the measResultServCell to include the layer 3 filtered measured results of the PCell; +5> if available, set the measResultNeighCells to include the layer 3 filtered measured results of SCell(s) and neighbouring cell(s) measurements that became available during the last logging interval, in order of decreasing RSRP, for at most the following number of cells: 6 intra-frequency and 3 inter-frequency cells per frequency and according to the following: +6> for each cell included, include the optional fields that are available; +5> if available, optionally set the measResultNeighCells to include the layer 3 filtered measured results of neighbouring cell(s) measurements that became available during the last logging interval, in order of decreasing RSCP(UTRA)/RSSI(GERAN)/PilotStrength(cdma2000), for at most the following number of cells: 3 inter-RAT cells per frequency (UTRA, cdma2000)/set of frequencies (GERAN), and according to the following: +6> for each cell included, include the optional fields that are available; +4> if in RRC_IDLE: +5> set the servCellIdentity to indicate global cell identity of the serving cell; +5> set the measResultServCell to include the quantities of the serving cell; +5> if available, set the measResultNeighCells, in order of decreasing ranking-criterion as used for cell re-selection, to include neighbouring cell measurements that became available during the last logging interval for at most the following number of neighbouring cells: 6 intra-frequency and 3 inter-frequency neighbours per frequency and according to the following: +6> for each neighbour cell included, include the optional fields that are available; +5> if available, optionally set the measResultNeighCells, in order of decreasing ranking-criterion as used for cell re-selection, to include neighbouring cell measurements that became available during the last logging interval, for at most the following number of cells: 3 inter-RAT cells per frequency (UTRA, cdma2000)/set of frequencies (GERAN), and according to the following: +6> for each cell included, include the optional fields that are available; +4> for the cells included according to the previous (i.e. covering previous and current serving cells as well as neighbouring EUTRA cells) include results according to the extended RSRQ if corresponding results are available according to the associated performance requirements defined in TS 36.133 [16]; +4> for the cells included according to the previous (i.e. covering previous and current serving cells as well as neighbouring EUTRA cells) include RSRQ type if the result was based on measurements using a wider band or using all OFDM symbols; +NOTE 2: The UE includes the latest results in accordance with the performance requirements as specified in TS 36.133 [16]. E.g. RSRP and RSRQ results are available only if the UE has a sufficient number of results/ receives a sufficient number of subframes during the logging interval. +3> else: +4> set the servCellIdentity to indicate global cell identity of the cell the UE is camping on; +4> set the measResultServCell to include the quantities of the cell the UE is camping on; +4> if available, set the measResultNeighCells, in order of decreasing ranking-criterion as used for cell re-selection, to include neighbouring cell measurements that became available during the last logging interval for at most the following number of neighbouring cells: 6 intra-frequency and 3 inter-frequency neighbours per frequency as well as 3 inter-RAT neighbours, per frequency/ set of frequencies (GERAN) per RAT and according to the following: +5> for each neighbour cell included, include the optional fields that are available; +4> for the cells included according to the previous (i.e. covering previous and current serving cells as well as neighbouring EUTRA cells) include results according to the extended RSRQ if corresponding results are available according to the associated performance requirements defined in TS 36.133 [16]; +4> for the cells included according to the previous (i.e. covering previous and current serving cells as well as neighbouring EUTRA cells) include RSRQ type if the result was based on measurements using a wider band or using all OFDM symbols; +NOTE 3: The UE includes the latest results of the available measurements as used for cell reselection evaluation in RRC_IDLE or as used for evaluation of reporting criteria or for measurement reporting according to 5.5.3 in RRC_CONNECTED, which are performed in accordance with the performance requirements as specified in TS 36.133 [16]. +2> when the memory reserved for the logged measurement information becomes full, stop timer T330 and perform the same actions as performed upon expiry of T330, as specified in 5.6.6.4; +5.6.9 In-device coexistence indication +5.6.9.1 General + +Figure 5.6.9.1-1: In-device coexistence indication +The purpose of this procedure is to inform E-UTRAN about (a change of) the In-Device Coexistence (IDC) problems experienced by the UE in RRC_CONNECTED, as described in TS 36.300 [9], and to provide the E-UTRAN with information in order to resolve them. +5.6.9.2 Initiation +A UE capable of providing IDC indications may initiate the procedure when it is configured to provide IDC indications and upon change of IDC problem information. +Upon initiating the procedure, the UE shall: +1> if configured to provide IDC indications: +2> if the UE did not transmit an InDeviceCoexIndication message since it was configured to provide IDC indications: +3> if on one or more frequencies for which a measObjectEUTRA is configured, the UE is experiencing IDC problems that it cannot solve by itself: +4> initiate transmission of the InDeviceCoexIndication message in accordance with 5.6.9.3; +2> else: +3> if the set of frequencies, for which a measObjectEUTRA is configured and on which the UE is experiencing IDC problems that it cannot solve by itself, is different from the set indicated in the last transmitted InDeviceCoexIndication message; or +3> if for one or more of the frequencies in the previously reported set of frequencies, the interferenceDirection is different from the value indicated in the last transmitted InDeviceCoexIndication message; or +3> if the TDM assistance information is different from the assistance information included in the last transmitted InDeviceCoexIndication message: +4> initiate transmission of the InDeviceCoexIndication message in accordance with 5.6.9.3; +NOTE 1: The term “IDC problems” refers to interference issues applicable across several subframes/slots where not necessarily all the subframes/slots are affected. +NOTE 2: For the frequencies on which a serving cell is configured that is activated, IDC problems consist of interference issues that the UE cannot solve by itself, during either active data exchange or upcoming data activity which is expected in up to a few hundred milliseconds. +For frequencies on which a SCell is configured that is deactivated, reporting IDC problems indicates an anticipation that the activation of the SCell would result in interference issues that the UE would not be able to solve by itself. +For a non-serving frequency, reporting IDC problems indicates an anticipation that if the non-serving frequency became a serving frequency then this would result in interference issues that the UE would not be able to solve by itself. +5.6.9.3 Actions related to transmission of InDeviceCoexIndication message +The UE shall set the contents of the InDeviceCoexIndication message as follows: +1> if there is at least one E-UTRA carrier frequency, for which a measurement object is configured, that is affected by IDC problems: +2> include the IE affectedCarrierFreqList with an entry for each affected E-UTRA carrier frequency for which a measurement object is configured; +2> for each E-UTRA carrier frequency included in the IE affectedCarrierFreqList, include interferenceDirection and set it accordingly; +2> include Time Domain Multiplexing (TDM) based assistance information: +3> if the UE has DRX related assistance information that could be used to resolve the IDC problems: +4> include drx-CycleLength, drx-Offset and drx-ActiveTime; +3> else (the UE has desired subframe reservation patterns related assistance information that could be used to resolve the IDC problems): +4> include idc-SubframePatternList; +3> use the MCG as timing reference if TDM based assistance information regarding the SCG is included; +NOTE 1: When sending an InDeviceCoexIndication message to inform E-UTRAN the IDC problems, the UE includes all assistance information (rather than providing e.g. the changed part(s) of the assistance information). +The UE shall submit the InDeviceCoexIndication message to lower layers for transmission. +5.6.10 UE Assistance Information +5.6.10.1 General + +Figure 5.6.10.1-1: UE Assistance Information +The purpose of this procedure is to inform E-UTRAN of the UE’s power saving preference. Upon configuring the UE to provide power preference indications E-UTRAN may consider that the UE does not prefer a configuration primarily optimised for power saving until the UE explictly indicates otherwise. +5.6.10.2 Initiation +A UE capable of providing power preference indications in RRC_CONNECTED may initiate the procedure in several cases including upon being configured to provide power preference indications and upon change of power preference. +Upon initiating the procedure, the UE shall: +1> if configured to provide power preference indications: +2> if the UE did not transmit a UEAssistanceInformation message since it was configured to provide power preference indications; or +2> if the current power preference is different from the one indicated in the last transmission of the UEAssistanceInformation message and timer T340 is not running: +3> initiate transmission of the UEAssistanceInformation message in accordance with 5.6.10.3; +5.6.10.3 Actions related to transmission of UEAssistanceInformation message +The UE shall set the contents of the UEAssistanceInformation message: +1> if the UE prefers a configuration primarily optimised for power saving: +2> set powerPrefIndication to lowPowerConsumption; +1> else: +2> start or restart timer T340 with the timer value set to the powerPrefIndicationTimer; +2> set powerPrefIndication to normal; +The UE shall submit the UEAssistanceInformation message to lower layers for transmission. +5.6.11 Mobility history information +5.6.11.1 General +This procedure specifies how the mobility history information is stored by the UE, covering RRC_CONNECTED and RRC_IDLE. +5.6.11.2 Initiation +If the UE supports storage of mobility history information, the UE shall: +1> Upon change of cell, consisting of PCell in RRC_CONNECTED or serving cell in RRC_IDLE, to another E-UTRA or inter-RAT cell or when entering out of service: +2> include an entry in variable VarMobilityHistoryReport possibly after removing the oldest entry, if necessary, according to following: +3> if the global cell identity of the previous PCell/ serving cell is available: +4> include the global cell identity of that cell in the field visitedCellId of the entry; +3> else: +4> include the physical cell identity and carrier frequency of that cell in the field visitedCellId of the entry; +3> set the field timeSpent of the entry as the time spent in the previous PCell/ serving cell; +1> upon entering E-UTRA (in RRC_CONNECTED or RRC_IDLE) while previously out of service and/ or using another RAT: +2> include an entry in variable VarMobilityHistoryReport possibly after removing the oldest entry, if necessary, according to following: +3> set the field timeSpent of the entry as the time spent outside E-UTRA; +5.6.12 RAN-assisted WLAN interworking +5.6.12.1 General +The purpose of this procedure is to facilitate access network selection and traffic steering between E-UTRAN and WLAN. +If required by upper layers (see TS 24.312 [66], the UE shall provide an up-to-date set of the applicable parameters provided by wlan-OffloadConfigCommon or wlan-OffloadConfigDedicated to upper layers, and inform upper layers when no parameters are configured. The parameter set from either wlan-OffloadConfigCommon or wlan-OffloadConfigDedicated is selected as specified in subclauses 5.2.2.24, 5.3.12, 5.6.12.2 and 5.6.12.4. +5.6.12.2 Dedicated WLAN offload configuration +The UE shall: +1> if the received wlan-OffloadInfo is set to release: +2> release wlan-OffloadConfigDedicated and t350; +2> if the wlan-OffloadConfigCommon corresponding to the RPLMN is broadcast by the cell: +3> apply the wlan-OffloadConfigCommon corresponding to the RPLMN included in SystemInformationBlockType17; +1> else: +2> apply the received wlan-OffloadConfigDedicated: +5.6.12.3 WLAN offload RAN evaluation +The UE shall: +1> if the UE is configured with either wlan-OffloadConfigCommon or wlan-OffloadConfigDedicated: +2> provide measurement results required for the evaluation of the network selection and traffic steering rules as defined in TS 24.312 [66] to upper layers; +2> evaluate the network selection and traffic steering rules as defined in TS 36.304 [4]; +5.6.12.4 T350 expiry or stop +The UE shall: +1> if T350 expires or is stopped: +2> release the wlan-OffloadConfigDedicated and t350; +2> if the wlan-OffloadConfigCommon corresponding to the RPLMN is broadcast by the cell: +3> apply the wlan-OffloadConfigCommon corresponding to the RPLMN included in SystemInformationBlockType17; +5.6.12.5 Cell selection/ re-selection while T350 is running +The UE shall: +1> if, while T350 is running, the UE selects/ reselects a cell which is not the PCell when the wlan-OffloadDedicated was configured: +2> stop timer T350; +2> perform the actions as specified in 5.6.12.4; +5.6.13 SCG failure information +5.6.13.1 General + +Figure 5.6.13.1-1: SCG failure information +The purpose of this procedure is to inform E-UTRAN about an SCG failure the UE has experienced i.e. SCG radio link failure, SCG change failure. +5.6.13.2 Initiation +A UE initiates the procedure to report SCG failures when SCG transmission is not suspended and when one of the following conditions is met: +1> upon detecting radio link failure for the SCG, in accordance with 5.3.11; or +1> upon SCG change failure, in accordance with 5.3.5.7a; +Upon initiating the procedure, the UE shall: +1> suspend all SCG DRBs and suspend SCG transmission for split DRBs; +1> reset SCG-MAC; +1> stop T307; +1> initiate transmission of the SCGFailureInformation message in accordance with 5.6.13.3; +5.6.13.3 Actions related to transmission of SCGFailureInformation message +The UE shall set the contents of the SCGFailureInformation message as follows: +1> if the UE initiates transmission of the SCGFailureInformation message to provide SCG radio link failure information: +2> include failureType and set it to the trigger for detecting SCG radio link failure; +1> else if the UE initiates transmission of the SCGFailureInformation message to provide SCG change failure information: +2> include failureType and set it to scg-ChangeFailure; +1> set the measResultServFreqList to include for each SCG cell that is configured, if any, within measResultSCell the quantities of the concerned SCell, if available according to performance requirements in [16]; +1> for each SCG serving frequency included in measResultServFreqList, include within measResultBestNeighCell the physCellId and the quantities of the best non-serving cell, based on RSRP, on the concerned serving frequency; +1> set the measResultNeighCells to include the best measured cells on non-serving E-UTRA frequencies, ordered such that the best cell is listed first, and based on measurements collected up to the moment the UE detected the failure, and set its fields as follows; +2> if the UE was configured to perform measurements for one or more non-serving EUTRA frequencies and measurement results are available, include the measResultListEUTRA; +2> for each neighbour cell included, include the optional fields that are available; +NOTE 2: The measured quantities are filtered by the L3 filter as configured in the mobility measurement configuration. The measurements are based on the time domain measurement resource restriction, if configured. Blacklisted cells are not required to be reported. +The UE shall submit the SCGFailureInformation message to lower layers for transmission. +5.7 Generic error handling +5.7.1 General +The generic error handling defined in the subsequent sub-clauses applies unless explicitly specified otherwise e.g. within the procedure specific error handling. +The UE shall consider a value as not comprehended when it is set: +- to an extended value that is not defined in the version of the transfer syntax supported by the UE. +- to a spare or reserved value unless the specification defines specific behaviour that the UE shall apply upon receiving the concerned spare/ reserved value. +The UE shall consider a field as not comprehended when it is defined: +- as spare or reserved unless the specification defines specific behaviour that the UE shall apply upon receiving the concerned spare/ reserved field. +5.7.2 ASN.1 violation or encoding error +The UE shall: +1> when receiving an RRC message on the BCCH, PCCH, CCCH, MCCH or SBCCH for which the abstract syntax is invalid [13]: +2> ignore the message; +NOTE This section applies in case one or more fields is set to a value, other than a spare, reserved or extended value, not defined in this version of the transfer syntax. E.g. in the case the UE receives value 12 for a field defined as INTEGER (1..11). In cases like this, it may not be possible to reliably detect which field is in the error hence the error handling is at the message level. +5.7.3 Field set to a not comprehended value +The UE shall, when receiving an RRC message on any logical channel: +1> if the message includes a field that has a value that the UE does not comprehend: +2> if a default value is defined for this field: +3> treat the message while using the default value defined for this field; +2> else if the concerned field is optional: +3> treat the message as if the field were absent and in accordance with the need code for absence of the concerned field; +2> else: +3> treat the message as if the field were absent and in accordance with sub-clause 5.7.4; +5.7.4 Mandatory field missing +The UE shall: +1> if the message includes a field that is mandatory to include in the message (e.g. because conditions for mandatory presence are fulfilled) and that field is absent or treated as absent: +2> if the RRC message was received on DCCH or CCCH: +3> ignore the message; +2> else: +3> if the field concerns a (sub-field of) an entry of a list (i.e. a SEQUENCE OF): +4> treat the list as if the entry including the missing or not comprehended field was not present; +3> else if the field concerns a sub-field of another field, referred to as the 'parent' field i.e. the field that is one nesting level up compared to the erroneous field: +4> consider the 'parent' field to be set to a not comprehended value; +4> apply the generic error handling to the subsequent 'parent' field(s), until reaching the top nesting level i.e. the message level; +3> else (field at message level): +4> ignore the message; +NOTE 1: The error handling defined in these sub-clauses implies that the UE ignores a message with the message type or version set to a not comprehended value. +NOTE 2: The nested error handling for messages received on logical channels other than DCCH and CCCH applies for errors in extensions also, even for errors that can be regarded as invalid E-UTRAN operation e.g. E-UTRAN not observing conditional presence. +The following ASN.1 further clarifies the levels applicable in case of nested error handling for errors in extension fields. +-- /example/ ASN1START + +-- Example with extension addition group + +ItemInfoList ::= SEQUENCE (SIZE (1..max)) OF ItemInfo + +ItemInfo ::= SEQUENCE { + itemIdentity INTEGER (1..max), + field1 Field1, + field2 Field2 OPTIONAL, -- Need ON + ... + [[ field3-r9 Field3-r9 OPTIONAL, -- Cond Cond1 + field4-r9 Field4-r9 OPTIONAL -- Need ON + ]] +} + +-- Example with traditional non-critical extension (empty sequence) + +BroadcastInfoBlock1 ::= SEQUENCE { + itemIdentity INTEGER (1..max), + field1 Field1, + field2 Field2 OPTIONAL, -- Need ON + nonCriticalExtension BroadcastInfoBlock1-v940-IEs OPTIONAL +} + +BroadcastInfoBlock1-v940-IEs::= SEQUENCE { + field3-r9 Field3-r9 OPTIONAL, -- Cond Cond1 + field4-r9 Field4-r9 OPTIONAL, -- Need ON + nonCriticalExtension SEQUENCE {} OPTIONAL -- Need OP +} + +-- ASN1STOP + +The UE shall, apply the following principles regarding the levels applicable in case of nested error handling: +- an extension additon group is not regarded as a level on its own. E.g. in the ASN.1 extract in the previous, a error regarding the conditionality of field3 would result in the entire itemInfo entry to be ignored (rather than just the extension addition group containing field3 and field4) +- a traditional nonCriticalExtension is not regarded as a level on its own. E.g. in the ASN.1 extract in the previous, a error regarding the conditionality of field3 would result in the entire BroadcastInfoBlock1 to be ignored (rather than just the non critical extension containing field3 and field4). +5.7.5 Not comprehended field +The UE shall, when receiving an RRC message on any logical channel: +1> if the message includes a field that the UE does not comprehend: +2> treat the rest of the message as if the field was absent; +NOTE: This section does not apply to the case of an extension to the value range of a field. Such cases are addressed instead by the requirements in section 5.7.3. +5.8 MBMS +5.8.1 Introduction +5.8.1.1 General +In general the control information relevant only for UEs supporting MBMS is separated as much as possible from unicast control information. Most of the MBMS control information is provided on a logical channel specific for MBMS common control information: the MCCH. E-UTRA employs one MCCH logical channel per MBSFN area. In case the network configures multiple MBSFN areas, the UE acquires the MBMS control information from the MCCHs that are configured to identify if services it is interested to receive are ongoing. The action applicable when the UE is unable to simultaneously receive MBMS and unicast services is up to UE implementation. In this release of the specification, an MBMS capable UE is only required to support reception of a single MBMS service at a time, and reception of more than one MBMS service (also possibly on more than one MBSFN area) in parallel is left for UE implementation. The MCCH carries the MBSFNAreaConfiguration message, which indicates the MBMS sessions that are ongoing as well as the (corresponding) radio resource configuration. The MCCH may also carry the MBMSCountingRequest message, when E-UTRAN wishes to count the number of UEs in RRC_CONNECTED that are receiving or interested to receive one or more specific MBMS services. +A limited amount of MBMS control information is provided on the BCCH. This primarily concerns the information needed to acquire the MCCH(s). This information is carried by means of a single MBMS specific SystemInformationBlock: SystemInformationBlockType13. An MBSFN area is identified solely by the mbsfn-AreaId in SystemInformationBlockType13. At mobility, the UE considers that the MBSFN area is continuous when the source cell and the target cell broadcast the same value in the mbsfn-AreaId. +5.8.1.2 Scheduling +The MCCH information is transmitted periodically, using a configurable repetition period. Scheduling information is not provided for MCCH i.e. both the time domain scheduling as well as the lower layer configuration are semi-statically configured, as defined within SystemInformationBlockType13. +For MBMS user data, which is carried by the MTCH logical channel, E-UTRAN periodically provides MCH scheduling information (MSI) at lower layers (MAC). This MCH information only concerns the time domain scheduling i.e. the frequency domain scheduling and the lower layer configuration are semi-statically configured. The periodicity of the MSI is configurable and defined by the MCH scheduling period. +5.8.1.3 MCCH information validity and notification of changes +Change of MCCH information only occurs at specific radio frames, i.e. the concept of a modification period is used. Within a modification period, the same MCCH information may be transmitted a number of times, as defined by its scheduling (which is based on a repetition period). The modification period boundaries are defined by SFN values for which SFN mod m= 0, where m is the number of radio frames comprising the modification period. The modification period is configured by means of SystemInformationBlockType13. +When the network changes (some of) the MCCH information, it notifies the UEs about the change during a first modification period. In the next modification period, the network transmits the updated MCCH information. These general principles are illustrated in figure 5.8.1.3-1, in which different colours indicate different MCCH information. Upon receiving a change notification, a UE interested to receive MBMS services acquires the new MCCH information immediately from the start of the next modification period. The UE applies the previously acquired MCCH information until the UE acquires the new MCCH information. + +Figure 5.8.1.3-1: Change of MCCH Information +Indication of an MBMS specific RNTI, the M-RNTI (see TS 36.321 [6]), on PDCCH is used to inform UEs in RRC_IDLE and UEs in RRC_CONNECTED about an MCCH information change. When receiving an MCCH information change notification, the UE knows that the MCCH information will change at the next modification period boundary. The notification on PDCCH indicates which of the MCCHs will change, which is done by means of an 8-bit bitmap. Within this bitmap, the bit at the position indicated by the field notificationIndicator is used to indicate changes for that MBSFN area: if the bit is set to "1", the corresponding MCCH will change. No further details are provided e.g. regarding which MCCH information will change. The MCCH information change notification is used to inform the UE about a change of MCCH information upon session start or about the start of MBMS counting. +The MCCH information change notifications on PDCCH are transmitted periodically and are carried on MBSFN subframes only. These MCCH information change notification occasions are common for all MCCHs that are configured, and configurable by parameters included in SystemInformationBlockType13: a repetition coefficient, a radio frame offset and a subframe index. These common notification occasions are based on the MCCH with the shortest modification period. +NOTE 1: E-UTRAN may modify the MBMS configuration information provided on MCCH at the same time as updating the MBMS configuration information carried on BCCH i.e. at a coinciding BCCH and MCCH modification period. Upon detecting that a new MCCH is configured on BCCH, a UE interested to receive one or more MBMS services should acquire the MCCH, unless it knows that the services it is interested in are not provided by the corresponding MBSFN area. +A UE that is receiving an MBMS service shall acquire the MCCH information from the start of each modification period. A UE that is not receiving an MBMS service, as well as UEs that are receiving an MBMS service but potentially interested to receive other services not started yet in another MBSFN area, shall verify that the stored MCCH information remains valid by attempting to find the MCCH information change notification at least notificationRepetitionCoeff times during the modification period of the applicable MCCH(s), if no MCCH information change notification is received. +NOTE 2: In case the UE is aware which MCCH(s) E-UTRAN uses for the service(s) it is interested to receive, the UE may only need to monitor change notifications for a subset of the MCCHs that are configured, referred to as the 'applicable MCCH(s)' in the above. +5.8.2 MCCH information acquisition +5.8.2.1 General + +Figure 5.8.2.1-1: MCCH information acquisition +The UE applies the MCCH information acquisition procedure to acquire the MBMS control information that is broadcasted by the E-UTRAN. The procedure applies to MBMS capable UEs that are in RRC_IDLE or in RRC_CONNECTED. +5.8.2.2 Initiation +A UE interested to receive MBMS services shall apply the MCCH information acquisition procedure upon entering the corresponding MBSFN area (e.g. upon power on, following UE mobility) and upon receiving a notification that the MCCH information has changed. A UE that is receiving an MBMS service shall apply the MCCH information acquisition procedure to acquire the MCCH, that corresponds with the service that is being received, at the start of each modification period. +Unless explicitly stated otherwise in the procedural specification, the MCCH information acquisition procedure overwrites any stored MCCH information, i.e. delta configuration is not applicable for MCCH information and the UE discontinues using a field if it is absent in MCCH information unless explicitly specified otherwise. +5.8.2.3 MCCH information acquisition by the UE +An MBMS capable UE shall: +1> if the procedure is triggered by an MCCH information change notification: +2> start acquiring the MBSFNAreaConfiguration message and the MBMSCountingRequest message if present, from the beginning of the modification period following the one in which the change notification was received; +NOTE 1: The UE continues using the previously received MCCH information until the new MCCH information has been acquired. +1> if the UE enters an MBSFN area: +2> acquire the MBSFNAreaConfiguration message and the MBMSCountingRequest message if present, at the next repetition period; +1> if the UE is receiving an MBMS service: +2> start acquiring the MBSFNAreaConfiguration message and the MBMSCountingRequest message if present, that both concern the MBSFN area of the service that is being received, from the beginning of each modification period; +5.8.2.4 Actions upon reception of the MBSFNAreaConfiguration message +No UE requirements related to the contents of this MBSFNAreaConfiguration apply other than those specified elsewhere e.g. within procedures using the concerned system information, the corresponding field descriptions. +5.8.2.5 Actions upon reception of the MBMSCountingRequest message +Upon receiving MBMSCountingRequest message, the UE shall perform the MBMS Counting procedure as specified in section 5.8.4. +5.8.3 MBMS PTM radio bearer configuration +5.8.3.1 General +The MBMS PTM radio bearer configuration procedure is used by the UE to configure RLC, MAC and the physical layer upon starting and/or stopping to receive an MRB. The procedure applies to UEs interested to receive one or more MBMS services. +NOTE: In case the UE is unable to receive an MBMS service due to capability limitations, upper layers may take appropriate action e.g. terminate a lower priority unicast service. +5.8.3.2 Initiation +The UE applies the MRB establishment procedure to start receiving a session of a service it has an interest in. The procedure may be initiated e.g. upon start of the MBMS session, upon (re-)entry of the corresponding MBSFN service area, upon becoming interested in the MBMS service, upon removal of UE capability limitations inhibiting reception of the concerned service. +The UE applies the MRB release procedure to stop receiving a session. The procedure may be initiated e.g. upon stop of the MBMS session, upon leaving the corresponding MBSFN service area, upon losing interest in the MBMS service, when capability limitations start inhibiting reception of the concerned service. +5.8.3.3 MRB establishment +Upon MRB establishment, the UE shall: +1> establish an RLC entity in accordance with the configuration specified in 9.1.1.4; +1> configure an MTCH logical channel in accordance with the received locgicalChannelIdentity, applicable for the MRB, as included in the MBSFNAreaConfiguration message; +1> configure the physical layer in accordance with the pmch-Config, applicable for the MRB, as included in the MBSFNAreaConfiguration message; +1> inform upper layers about the establishment of the MRB by indicating the corresponding tmgi and sessionId; +5.8.3.4 MRB release +Upon MRB release, the UE shall: +1> release the RLC entity as well as the related MAC and physical layer configuration; +1> inform upper layers about the release of the MRB by indicating the corresponding tmgi and sessionId; +5.8.4 MBMS Counting Procedure +5.8.4.1 General + + +Figure 5.8.4.1-1: MBMS Counting procedure +The MBMS Counting procedure is used by the E-UTRAN to count the number of RRC_CONNECTED mode UEs which are receiving via an MRB or interested to receive via an MRB the specified MBMS services. +The UE determines interest in an MBMS service, that is identified by the TMGI, by interaction with upper layers. +5.8.4.2 Initiation +E-UTRAN initiates the procedure by sending an MBMSCountingRequest message. +5.8.4.3 Reception of the MBMSCountingRequest message by the UE +Upon receiving the MBMSCountingRequest message, the UE in RRC_CONNECTED mode shall: +1> if the SystemInformationBlockType1, that provided the scheduling information for the systemInformationBlockType13 that included the configuration of the MCCH via which the MBMSCountingRequest message was received, contained the identity of the Registered PLMN; and +1> if the UE is receiving via an MRB or interested to receive via an MRB at least one of the services in the received countingRequestList: +2> if more than one entry is included in the mbsfn-AreaInfoList received in the SystemInformationBlockType13 that included the configuration of the MCCH via which the MBMSCountingRequest message was received: +3> include the mbsfn-AreaIndex in the MBMSCountingResponse message and set it to the index of the entry in the mbsfn-AreaInfoList within the received SystemInformationBlockType13 that corresponds with the MBSFN area used to transfer the received MBMSCountingRequest message; +2> for each MBMS service included in the received countingRequestList: +3> if the UE is receiving via an MRB or interested to receive via an MRB this MBMS service: +4> include an entry in the countingResponseList within the MBMSCountingResponse message with countingResponseService set it to the index of the entry in the countingRequestList within the received MBMSCountingRequest that corresponds with the MBMS service the UE is receiving or interested to receive; +2> submit the MBMSCountingResponse message to lower layers for transmission upon which the procedure ends; +NOTE 1: UEs that are receiving an MBMS User Service [56] by means of a Unicast Bearer Service [57] (i.e. via a DRB), but are interested to receive the concerned MBMS User Service [56] via an MBMS Bearer Service (i.e. via an MRB), respond to the counting request. +NOTE 2: If ciphering is used at upper layers, the UE does not respond to the counting request if it can not decipher the MBMS service for which counting is performed (see TS 22.146 [62, 5.3]). +NOTE 3: The UE treats the MBMSCountingRequest messages received in each modification period independently. In the unlikely case E-UTRAN would repeat an MBMSCountingRequest (i.e. including the same services) in a subsequent modification period, the UE responds again. The UE provides at most one MBMSCountingResponse message to multiple transmission attempts of an MBMSCountingRequest messages in a given modification period. +5.8.5 MBMS interest indication +5.8.5.1 General + +Figure 5.8.5.1-1: MBMS interest indication +The purpose of this procedure is to inform E-UTRAN that the UE is receiving or is interested to receive MBMS via an MRB, and if so, to inform E-UTRAN about the priority of MBMS versus unicast reception. +5.8.5.2 Initiation +An MBMS capable UE in RRC_CONNECTED may initiate the procedure in several cases including upon successful connection establishment, upon entering or leaving the service area, upon session start or stop, upon change of interest, upon change of priority between MBMS reception and unicast reception or upon change to a PCell broadcasting SystemInformationBlockType15. +Upon initiating the procedure, the UE shall: +1> if SystemInformationBlockType15 is broadcast by the PCell: +2> ensure having a valid version of SystemInformationBlockType15 for the PCell; +2> if the UE did not transmit an MBMSInterestIndication message since last entering RRC_CONNECTED state; or +2> if since the last time the UE transmitted an MBMSInterestIndication message, the UE connected to a PCell not broadcasting SystemInformationBlockType15: +3> if the set of MBMS frequencies of interest, determined in accordance with 5.8.5.3, is not empty: +4> initiate transmission of the MBMSInterestIndication message in accordance with 5.8.5.4; +2> else: +3> if the set of MBMS frequencies of interest, determined in accordance with 5.8.5.3, has changed since the last transmission of the MBMSInterestIndication message; or +3> if the prioritisation of reception of all indicated MBMS frequencies compared to reception of any of the established unicast bearers has changed since the last transmission of the MBMSInterestIndication message: +4> initiate transmission of the MBMSInterestIndication message in accordance with 5.8.5.4; +NOTE: The UE may send an MBMSInterestIndication even when it is able to receive the MBMS services it is interested in i.e. to avoid that the network allocates a configuration inhibiting MBMS reception. +5.8.5.3 Determine MBMS frequencies of interest +The UE shall: +1> consider a frequency to be part of the MBMS frequencies of interest if the following conditions are met: +2> at least one MBMS session the UE is receiving or interested to receive via an MRB is ongoing or about to start; and +NOTE 1: The UE may determine whether the session is ongoing from the start and stop time indicated in the User Service Description (USD), see 3GPP TS 36.300 [9] or 3GPP TS 26.346 [57]. +2> for at least one of these MBMS sessions SystemInformationBlockType15 acquired from the PCell includes for the concerned frequency one or more MBMS SAIs as indicated in the USD for this session; and +NOTE 2: The UE considers a frequency to be part of the MBMS frequencies of interest even though E-UTRAN may (temporarily) not employ an MRB for the concerned session. I.e. the UE does not verify if the session is indicated on MCCH +NOTE 3: The UE considers the frequencies of interest independently of any synchronization state, e.g. [9, Annex J.1] +2> the UE is capable of simultaneously receiving the set of MBMS frequencies of interest, regardless of whether a serving cell is configured on each of these frequencies or not; and +2> the supportedBandCombination the UE included in UE-EUTRA-Capability contains at least one band combination including the set of MBMS frequencies of interest; +NOTE 4: Indicating a frequency implies that the UE supports SystemInformationBlockType13 acquisition for the concerned frequency i.e. the indication should be independent of whether a serving cell is configured on that frequency. +NOTE 5: When evaluating which frequencies it can receive simultaneously, the UE does not take into account the serving frequencies that are currently configured i.e. it only considers MBMS frequencies it is interested to receive. +NOTE 6: The set of MBMS frequencies of interest includes at most one frequency for a given physical frequency. The UE only considers a physical frequency to be part of the MBMS frequencies of interest if it supports at least one of the bands indicated for this physical frequency in SystemInformationBlockType1 (for serving frequency) or SystemInformationBlockType15 (for neighbouring frequencies). In this case, E-UTRAN may assume the UE supports MBMS reception on any of the bands supported by the UE (i.e. according to supportedBandCombination). +5.8.5.4 Actions related to transmission of MBMSInterestIndication message +The UE shall set the contents of the MBMSInterestIndication message as follows: +1> if the set of MBMS frequencies of interest, determined in accordance with 5.8.5.3, is not empty: +2> include mbms-FreqList and set it to include the MBMS frequencies of interest, using the EARFCN corresponding with freqBandIndicator included in SystemInformationBlockType1 (for serving frequency), if applicable, and the EARFCN(s) as included in SystemInformationBlockType15 (for neighbouring frequencies); +NOTE 1: The EARFCN included in mbms-FreqList is merely used to indicate a physical frequency the UE is interested to receive i.e. the UE may not support the band corresponding to the included EARFCN (but it does support at least one of the bands indicated in system information for the concerned physical frequency). +2> include mbms-Priority if the UE prioritises reception of all indicated MBMS frequencies above reception of any of the unicast bearers; +NOTE 2: If the UE prioritises MBMS reception and unicast data cannot be supported because of congestion on the MBMS carrier(s), E-UTRAN may initiate release of unicast bearers. It is up to E-UTRAN implementation whether all bearers or only GBR bearers are released. E-UTRAN does not initiate re-establishment of the released unicast bearers upon alleviation of the congestion. +The UE shall submit the MBMSInterestIndication message to lower layers for transmission. +5.9 RN procedures +5.9.1 RN reconfiguration +5.9.1.1 General + +Figure 5.9.1.1-1: RN reconfiguration +The purpose of this procedure is to configure/reconfigure the RN subframe configuration and/or to update the system information relevant for the RN in RRC_CONNECTED. +5.9.1.2 Initiation +E-UTRAN may initiate the RN reconfiguration procedure to an RN in RRC_CONNECTED when AS security has been activated. +5.9.1.3 Reception of the RNReconfiguration by the RN +The RN shall: +1> if the rn-SystemInfo is included: +2> if the systemInformationBlockType1 is included: +3> act upon the received SystemInformationBlockType1 as specified in 5.2.2.7; +2> if the SystemInformationBlockType2 is included: +3> act upon the received SystemInformationBlockType2 as specified in 5.2.2.9; +1> if the rn-SubframeConfig is included: +2> reconfigure lower layers in accordance with the received subframeConfigPatternFDD or subframeConfigPatternTDD; +2> if the rpdcch-Config is included: +3> reconfigure lower layers in accordance with the received rpdcch-Config; +1> submit the RNReconfigurationComplete message to lower layers for transmission, upon which the procedure ends; +5.10 Sidelink +5.10.1 Introduction +The sidelink direct communication/ discovery/ synchronisation resource configuration applies for the frequency at which it was received/ acquired. Moreover, for a UE configured with one or more SCells, the sidelink direct communication/ discovery/ synchronisation resource configuration provided by dedicated signalling applies for the PCell/ the primary frequency. Furthermore, the UE shall not use the sidelink direct communication/ discovery/ synchronisation transmission resources received in one cell with the timing of another cell. +NOTE 1: Upper layers configure the UE to receive or transmit sidelink direct communication on a specific frequency, to monitor sidelink direct discovery announcements on one or more frequencies or to transmit sidelink direct discovery announcements on a specific frequency, but only if the UE is authorised to perform these particular ProSe related sidelink activities. +NOTE 2: It is up to UE implementation which actions to take (e.g. termination of unicast services, detach) when it is unable to perform the desired sidelink activities, e.g. due to UE capability limitations. +5.10.1a Conditions for sidelink operation +When it is specified that the UE shall perform a particular sidelink operation only if the conditions defined in this section are met, the UE shall perform the concerned sidelink operation only if: +1> if the UE’s serving cell is suitable (RRC_IDLE or RRC_CONNECTED); and if either the selected cell on the frequency used for sidelink operation belongs to the registered or equivalent PLMN as specified in TS 24.334 [69] or the UE is out of coverage on the frequency used for sidelink operation as defined in TS 36.304 [4, 11.4]; or +1> if the UE is camped on a serving cell (RRC_IDLE) on which it fulfils the conditions to support sidelink direct communication in limited service state as specified in TS 23.303 [68, 4.5.6]; and if either the serving cell is on the frequency used for sidelink operation or the UE is out of coverage on the frequency used for sidelink operation as defined in TS 36.304 [4, 11.4]; or +1> if the UE has no serving cell (RRC_IDLE); +5.10.2 Sidelink UE information +5.10.2.1 General + +Figure 5.10.2-1: Sidelink UE information +The purpose of this procedure is to inform E-UTRAN that the UE is interested or no longer interested to receive sidelink direct communication or discovery, as well as to request assignment or release of transmission resources for sidelink direct communication or discovery announcements. + +5.10.2.2 Initiation +A UE capable of sidelink direct communication or discovery that is in RRC_CONNECTED may initiate the procedure to indicate it is (interested in) receiving sidelink direct communication or discovery in several cases including upon successful connection establishment, upon change of interest, upon change to a PCell broadcasting SystemInformationBlockType18 or SystemInformationBlockType19. A UE capable of sidelink direct communication or discovery may initiate the procedure to request assignment of dedicated resources for the concerned sidelink direct communication transmission or discovery announcements. +NOTE 1: A UE in RRC_IDLE that is configured to transmit sidelink direct communication/ discovery announcements, while SystemInformationBlockType18/ SystemInformationBlockType19 does not include the resources for transmission (in normal conditions), initiates connection establishment in accordance with 5.3.3.1a. +Upon initiating the procedure, the UE shall: +1> if SystemInformationBlockType18 is broadcast by the PCell: +2> ensure having a valid version of SystemInformationBlockType18 for the PCell; +2> if configured by upper layers to receive sidelink direct communication: +3> if the UE did not transmit a SidelinkUEInformation message since last entering RRC_CONNECTED state; or +3> if since the last time the UE transmitted a SidelinkUEInformation message the UE connected to a PCell not broadcasting SystemInformationBlockType18; or +NOTE 2: After handover/ re-establishment from a source PCell not broadcasting SystemInformationBlockType18 the UE repeats the same interest information that it provided previously as such a source PCell may not forward the interest information. +3> if the last transmission of the SidelinkUEInformation message did not include commRxInterestedFreq; or if the frequency configured by upper layers to receive sidelink direct communication on has changed since the last transmission of the SidelinkUEInformation message: +4> initiate transmission of the SidelinkUEInformation message to indicate the sidelink direct communication reception frequency of interest in accordance with 5.10.2.3; +2> else: +3> if the last transmission of the SidelinkUEInformation message included commRxInterestedFreq: +4> initiate transmission of the SidelinkUEInformation message to indicate it is no longer interested in sidelink direct communication reception in accordance with 5.10.2.3; +2> if configured by upper layers to transmit sidelink direct communication: +3> if the UE did not transmit a SidelinkUEInformation message since entering RRC_CONNECTED state; or +3> if since the last time the UE transmitted a SidelinkUEInformation message the UE connected to a PCell not broadcasting SystemInformationBlockType18; or +3> if the last transmission of the SidelinkUEInformation message did not include commTxResourceReq; or if the information carried by the commTxResourceReq has changed since the last transmission of the SidelinkUEInformation message: +4> initiate transmission of the SidelinkUEInformation message to indicate the sidelink direct communication transmission resources required by the UE in accordance with 5.10.2.3; +2> else: +3> if the last transmission of the SidelinkUEInformation message included commTxResourceReq: +4> initiate transmission of the SidelinkUEInformation message to indicate it does no longer require sidelink direct communication transmission resources in accordance with 5.10.2.3; +1> if SystemInformationBlockType19 is broadcast by the PCell: +2> ensure having a valid version of SystemInformationBlockType19 for the PCell; +2> if configured by upper layers to receive sidelink direct discovery announcements on a serving frequency or on one or more frequencies included in discInterFreqList, if included in SystemInformationBlockType19: +3> if the UE did not transmit a SidelinkUEInformation message since last entering RRC_CONNECTED state; or +3> if since the last time the UE transmitted a SidelinkUEInformation message the UE connected to a PCell not broadcasting SystemInformationBlockType19; or +3> if the last transmission of the SidelinkUEInformation message did not include discRxInterest: +4> initiate transmission of the SidelinkUEInformation message to indicate it is interested in sidelink direct discovery reception in accordance with 5.10.2.3; +2> else: +3> if the last transmission of the SidelinkUEInformation message included discRxInterest: +4> initiate transmission of the SidelinkUEInformation message to indicate it is no longer interested in sidelink direct discovery reception in accordance with 5.10.2.3; +2> if the UE is configured by upper layers to transmit sidelink direct discovery announcements: +3> if the UE did not transmit a SidelinkUEInformation message since entering RRC_CONNECTED state; or +3> if since the last time the UE transmitted a SidelinkUEInformation message the UE connected to a PCell not broadcasting SystemInformationBlockType19; or +3> if the last transmission of the SidelinkUEInformation message did not include discTxResourceReq; or if the direct discovery announcement resources required by the UE have changed (i.e. resulting in a change of discTxResourceReq) since the last transmission of the SidelinkUEInformation message: +4> initiate transmission of the SidelinkUEInformation message to indicate the sidelink direct discovery announcement resources required by the UE in accordance with 5.10.2.3; +2> else: +3> if the last transmission of the SidelinkUEInformation message included discTxResourceReq: +4> initiate transmission of the SidelinkUEInformation message to indicate it does no longer require sidelink direct discovery announcement resources in accordance with 5.10.2.3; +5.10.2.3 Actions related to transmission of SidelinkUEInformation message +The UE shall set the contents of the SidelinkUEInformation message as follows: +1> if SystemInformationBlockType18 is broadcast by the PCell: +2> if configured by upper layers to receive sidelink direct communication: +3> include commRxInterestedFreq and set it to the sidelink direct communication frequency; +2> if configured by upper layers to transmit sidelink direct communication: +3> include commTxResourceReq and set its fields as follows: +4> set carrierFreq to indicate the sidelink direct communication frequency i.e. the same value as indicated in commRxInterestedFreq if included; +4> set destinationInfoList to include the sidelink direct communication transmission destination(s) for which it requests E-UTRAN to assign dedicated resources; +1> if SystemInformationBlockType19 is broadcast by the PCell: +2> if configured by upper layers to receive sidelink direct discovery announcements on a serving frequency or one or more frequencies included in discInterFreqList, if included in SystemInformationBlockType19: +3> include discRxInterest; +2> if the UE is configured by upper layers to transmit sidelink direct discovery announcements: +3> include discTxResourceReq and set it to indicate the number of resources for sidelink direct discovery announcement for which it requests E-UTRAN to assign dedicated resources; +The UE shall submit the SidelinkUEInformation message to lower layers for transmission. +5.10.3 Direct communication monitoring +A UE capable of sidelink direct communication that is configured by upper layers to receive sidelink direct communication shall: +1> if the conditions for sidelink operation as defined in 5.10.1a are met: +2> if in coverage on the frequency used for sidelink direct communication, as defined in TS 36.304 [4, 11.4]: +3> if the cell chosen for sidelink direct communication reception broadcasts SystemInformationBlockType18 including commRxPool: +4> configure lower layers to monitor sidelink control information and the corresponding data using the pool of resources indicated by commRxPool; +NOTE 1: If commRxPool includes one or more entries including rxParametersNCell, the UE may only monitor such entries if the associated PSS/SSS or SLSSIDs is detected. When monitoring such pool(s), the UE applies the timing of the concerned PSS/SSS or SLSS. +2> else (i.e. out of coverage on the sidelink carrier): +3> configure lower layers to monitor sidelink control information and the corresponding data using the pool of resources that were preconfigured (i.e. preconfigComm in SL-Preconfiguration defined in 9.3); +NOTE 2: The UE may monitor in accordance with the timing of the selected SyncRef UE, or if the UE does not have a selected SyncRef UE, based on the UE’s own timing. + +5.10.4 Direct communication transmission +A UE capable of sidelink direct communication that is configured by upper layers to transmit sidelink direct communication and has related data to be transmitted shall: +1> if the conditions for sidelink operation as defined in 5.10.1a are met: +2> if in coverage on the frequency used for sidelink direct communication, as defined in TS 36.304 [4, 11.4]: +3> if the UE is in RRC_CONNECTED and uses the PCell for sidelink direct communication: +4> if the UE is configured, by the current PCell/ the PCell in which physical layer problems or radio link failure was detected, with commTxResources set to scheduled: +5> if T310 or T311 is running; and if the PCell at which the UE detected physical layer problems or radio link failure broadcasts SystemInformationBlockType18 including commTxPoolExceptional; or +5> if T301 is running and the cell on which the UE initiated connection re-establishment broadcasts SystemInformationBlockType18 including commTxPoolExceptional: +6> configure lower layers to transmit the sidelink control information and the corresponding data using the pool of resources indicated by the first entry in commTxPoolExceptional; +5> else: +6> configure lower layers to request E-UTRAN to assign transmission resources for direct communication; +4> else if the UE is configured with commTxPoolNormalDedicated: +5> configure lower layers to transmit the sidelink control information and the corresponding data using the pool of resources indicated by the first entry in commTxPoolNormalDedicated; +3> else (i.e. sidelink direct communication in RRC_IDLE or on cell other than PCell in RRC_CONNECTED): +4> if the cell chosen for sidelink direct communication transmission broadcasts SystemInformationBlockType18: +5> if SystemInformationBlockType18 includes commTxPoolNormalCommon: +6> configure lower layers to transmit the sidelink control information and the corresponding data using the pool of resources indicated by the first entry in commTxPoolNormalCommon; +5> else: +6> if the last connection establishment was initiated to request sidelink direct communication transmission resources and resulted in T300 expiry; and +6> if the cell on which the UE initiated connection establishment broadcasts SystemInformationBlockType18 including commTxPoolExceptional: +7> from the moment T300 expired, as specified in 5.3.3.6, until receiving an RRCConnectionReconfiguration including sl-CommConfig or until receiving an RRCConnectionRelease or an RRCConnectionReject; +8> configure lower layers to transmit the sidelink control information and the corresponding data using the pool of resources indicated by the first entry in commTxPoolExceptional; +2> else (i.e. out of coverage on sidelink carrier): +3> configure lower layers to transmit the sidelink control information and the corresponding data using the pool of resources that were preconfigured i.e. indicated by the first entry in preconfigComm in SL-Preconfiguration defined in 9.3 and in accordance with the timing of the selected SyncRef UE, or if the UE does not have a selected SyncRef UE, based on the UEs own timing; +5.10.5 Direct discovery monitoring +A UE capable of sidelink direct discovery that is configured by upper layers to monitor sidelink direct discovery announcements shall: +1> for each frequency the UE is configured to monitor sidelink direct discovery announcements on, prioritising the frequencies included in discInterFreqList, if included in SystemInformationBlockType19: +2> configure lower layers to monitor sidelink direct discovery announcements using the pool of resources indicated by discRxPool in SystemInformationBlockType19 without affecting normal operation i.e. receive during idle periods or by using a spare receiver; +NOTE 1: The requirement not to affect normal UE operation also applies for the acquisition of sidelink discovery related system and synchronisation information from inter-frequency cells. +NOTE 2: The UE is not required to monitor all pools simultaneously. +NOTE 3: It is up to UE implementation to decide whether a cell is sufficiently good to be used to monitor sidelink direct discovery announcements. +NOTE 4: If discRxPool includes one or more entries including rxParameters, the UE may only monitor such entries if the associated SLSSIDs are detected. When monitoring such pool(s) the UE applies the timing of the corresponding SLSS. +5.10.6 Direct discovery announcement +A UE capable of sidelink direct discovery that is configured by upper layers to transmit sidelink direct discovery announcements shall: +NOTE 1: In case the configured resources are insufficient it is up to UE implementation to decide which sidelink direct discovery announcements to transmit. +1> if the UE’s serving cell (RRC_IDLE) or PCell (RRC_CONNECTED) is suitable as defined in TS 36.304 [4]: +2> if the UE is in RRC_CONNECTED (i.e. PCell is used for sidelink direct discovery announcement): +3> if the UE is configured with discTxResources set to scheduled: +4> configure lower layers to transmit the sidelink direct discovery announcement using the assigned resources indicated by scheduled in discTxResources; +3> else if the UE is configured with discTxPoolDedicated (i.e. discTxResources set to ue-Selected): +4> if poolSelection within poolToAddModList is set to rsrpBased: +5> select an entry of poolToAddModList for which the RSRP measurement of the PCell, after applying the layer 3 filter defined by quantityConfig as specified in 5.5.3.2 , is in-between threshLow and threshHigh; +4> else: +5> randomly select, using a uniform distribution, an entry of poolToAddModList; +4> configure lower layers to transmit the sidelink direct discovery announcement using the selected pool of resources: +2> else if T300 is not running (i.e. UE in RRC_IDLE, announcing via serving cell): +3> if SystemInformationBlockType19 of the serving cell includes discTxPoolCommon: +4> if poolSelection is set to rsrpBased: +5> select an entry of discTxPoolCommon for which RSRP measurement of the serving cell is in-between threshLow and threshHigh; +4> else: +5> randomly select, using a uniform distribution, an entry of discTxPoolCommon; +4> configure lower layers to transmit the sidelink direct discovery announcement using the selected pool of resources; +NOTE 2: When performing resource pool selection based on RSRP, the UE uses the latest results of the available measurements used for cell reselection evaluation in RRC_IDLE/ for measurement report triggering evaluation in RRC_CONNECTED, which are performed in accordance with the performance requirements specified in TS 36.133 [16]. +5.10.7 Direct synchronisation information transmission +5.10.7.1 General + +Figure 5.10.7.1-1: Synchronisation information transmission for sidelink direct communication, in (partial) coverage + +Figure 5.10.7.1-2: Synchronisation information transmission for sidelink direct communication, out of coverage + +Figure 5.10.7.1-3: Synchronisation information transmission for sidelink direct discovery +The purpose of this procedure is to provide synchronisation information to a UE. The synchronisation information concerns a Sidelink Synchronisation Signal (SLSS) for sidelink direct discovery, while it concerns an SLSS, timing information and some additional configuration parameters (i.e. the MasterInformationBlock-SL message) for sidelink direct communication. A UE transmits synchronisation information either when E-UTRAN configures it to do so by dedicated signalling (i.e. network based), or when not configured by dedicated signalling (i.e. UE based) and E-UTRAN broadcasts (in coverage) or pre-configures a threshold (out of coverage). +The synchronisation information transmitted by the UE may be derived from information/ signals received from E-UTRAN (in coverage) or received from a UE acting as synchronisation reference for the transmitting UE. In the remainder, the UE acting as synchronisation reference is referred to as SyncRef UE. +5.10.7.2 Initiation +A UE capable of SLSS transmission shall, when transmitting sidelink direct discovery announcements in accordance with 5.10.6 and when the following conditions are met: +1> if the UE’s serving cell (RRC_IDLE) or PCell (RRC_CONNECTED) is suitable as defined in TS 36.304 [4]: +2> if in RRC_CONNECTED; and if networkControlledSyncTx is configured and set to on; or +2> if networkControlledSyncTx is not configured; and syncTxThreshIC is included in SystemInformationBlockType19; and the RSRP measurement of the serving cell (RRC_IDLE) or PCell (RRC_CONNECTED) is below the value of syncTxThreshIC: +3> transmit SLSS in accordance with 5.10.7.3 and TS 36.211 [21], unless the UE uses the selected subframe for regular uplink transmission; +A UE capable of sidelink direct communication that is configured by upper layers to transmit sidelink direct communication shall, irrespective of whether or not it has data to transmit: +1> if the conditions for sidelink operation as defined in 5.10.1a are met: +2> if in RRC_CONNECTED; and if networkControlledSyncTx is configured and set to on: +3> transmit SLSS in accordance with 5.10.7.3 and TS 36.211 [21]; +3> transmit the MasterInformationBlock-SL message, in the same subframe as SLSS, and in accordance with 5.10.7.4; +A UE shall, when transmitting sidelink direct communication in accordance with 5.10.4 and when the following conditions are met: +1> if in coverage on the frequency used for sidelink direct communication, as defined in TS 36.304 [4, 11.4]: +2> if the UE is in RRC_CONNECTED; and networkControlledSyncTx is not configured; and syncTxThreshIC is included in SystemInformationBlockType18; and the RSRP measurement of the cell chosen for sidelink transmission direct communication is below the value of syncTxThreshIC; or +2> if the UE is in RRC_IDLE; and syncTxThreshIC is included in SystemInformationBlockType18; and the RSRP measurement of the cell chosen for sidelink direct communication transmission is below the value of syncTxThreshIC: +3> transmit SLSS in accordance with 5.10.7.3 and TS 36.211 [21]; +3> transmit the MasterInformationBlock-SL message, in the same subframe as SLSS, and in accordance with 5.10.7.4; +1> else (i.e. out of coverage): +2> if syncTxThreshOoC is included in the preconfigured sidelink parameters (i.e. SL-Preconfiguration defined in 9.3); and the UE has no selected SyncRef UE or the S-RSRP measurement result of the selected SyncRef UE is below the value of syncTxThreshOoC: +3> transmit SLSS in accordance with 5.10.7.3 and TS 36.211 [21]; +3> transmit the MasterInformationBlock-SL message, in the same subframe as SLSS, and in accordance with 5.10.7.4; +5.10.7.3 Transmission of SLSS +The UE shall select the SLSSID and the subframe in which to transmit SLSS as follows: +1> if triggered by sidelink direct discovery announcement: +2> select the SLSSID included in the entry of discSyncConfig included in the received SystemInformationBlockType19, that includes txParameters; +2> use syncOffsetIndicator corresponding to the selected SLSSID; +2> for each pool used for the transmission of discovery announcements (each corresponding to the selected SLSSID): +3> if a subframe indicated by syncOffsetIndicator corresponds to the first subframe of the discovery transmission pool; +4> select the concerned subframe; +3> else +4> select the subframe indicated by syncOffsetIndicator that precedes and which, in time domain, is nearest to the first subframe of the discovery transmission pool; +1> if triggered by sidelink direct communication: +2> if in coverage on the frequency used for sidelink direct communication, as defined in TS 36.304 [4, 11.4]: +3> select the SLSSID included in the entry of commSyncConfig that is included in the received SystemInformationBlockType18 and includes txParameters; +3> use syncOffsetIndicator corresponding to the selected SLSSID; +3> if in RRC_CONNECTED; and if networkControlledSyncTx is configured and set to on: +4> select the subframe(s) indicated by syncOffsetIndicator; +3> else (when transmitting communication): +4> select the subframe(s) indicated by syncOffsetIndicator within the SC period in which the UE intends to transmit sidelink control information or data; +2> else (i.e. out of coverage on sidelink carrier): +3> select the synchronisation reference UE (i.e. SyncRef UE) as defined in 5.10.8; +3> if the UE has a selected SyncRef UE and inCoverage in the MasterInformationBlock-SL message received from this UE is set to TRUE; or +3> if the UE has a selected SyncRef UE and inCoverage in the MasterInformationBlock-SL message received from this UE is set to FALSE while the SLSS from this UE is part of the set defined for out of coverage, see TS 36.211 [21]: +4> select the same SLSSID as the SLSSID of the selected SyncRef UE; +4> select the subframe in which to transmit the SLSS according to the syncOffsetIndicator1 or syncOffsetIndicator2 included in the preconfigured sidelink parameters (i.e. preconfigSync in SL-Preconfiguration defined in 9.3), such that the subframe timing is different from the SLSS of the selected SyncRef UE; +3> else if the UE has a selected SyncRef UE: +4> select the SLSSID from the set defined for out of coverage having an index that is 168 more than the index of the SLSSID of the selected SyncRef UE, see TS 36.211 [21]; +4> select the subframe in which to transmit the SLSS according to syncOffsetIndicator1 or syncOffsetIndicator2 included in the preconfigured sidelink parameters (i.e. preconfigSync in SL-Preconfiguration defined in 9.3), such that the subframe timing is different from the SLSS of the selected SyncRef UE; +3> else (i.e. no SyncRef UE selected): +4> randomly select, using a uniform distribution, an SLSSID from the set of sequences defined for out of coverage, see TS 36.211 [21]; +4> select the subframe in which to transmit the SLSS according to the syncOffsetIndicator1 or syncOffsetIndicator2 (arbitrary selection between these) included in the preconfigured sidelink parameters (i.e. preconfigSync in SL-Preconfiguration defined in 9.3); +5.10.7.4 Transmission of MasterInformationBlock-SL message +The UE shall set the contents of the MasterInformationBlock-SL message as follows: +1> if in coverage on the frequency used for sidelink direct communication, as defined in TS 36.304 [4, 11.4]: +2> set inCoverage to TRUE; +2> set sl-Bandwidth to the value of ul-Bandwidth as included in the received SystemInformationBlockType2 of the cell chosen for sidelink direct communication; +2> if tdd-Config is included in the received SystemInformationBlockType1: +3> set subframeAssignmentSL to the value representing the same meaning as of subframeAssignment that is included in tdd-Config in the received SystemInformationBlockType1; +2> else: +3> set subframeAssignmentSL to none; +2> if syncInfoReserved is included in an entry of commSyncConfig from the received SystemInformationBlockType18; +3> set reserved to the value of syncInfoReserved in the received SystemInformationBlockType18; +2> else: +3> set all bits in reserved to 0; +1> else if the UE has a selected SyncRef UE (as defined in 5.10.8): +2> set inCoverage to FALSE; +2> set sl-Bandwidth, subframeAssignmentSL and reserved to the value of the corresponding field included in the received MasterInformationBlock-SL; +1> else (i.e. no SyncRef UE selected): +2> set inCoverage to FALSE; +2> set sl-Bandwidth, subframeAssignmentSL and reserved to the value of the corresponding field included in the preconfigured sidelink parameters (i.e. preconfigGeneral in SL-Preconfiguration defined in 9.3); +1> set directFrameNumber and directSubframeNumber according to the subframe used to transmit the SLSS, as specified in 5.10.7.3; +1> submit the MasterInformationBlock-SL message to lower layers for transmission upon which the procedure ends; +5.10.7.5 Void +5.10.8 Direct synchronisation reference +5.10.8.1 General +The purpose of this procedure is to select a synchronisation reference and used a.o. when transmitting sidelink direct communication or synchronisation information. +5.10.8.2 Selection and reselection of synchronisation reference UE (SyncRef UE) +The UE shall: +1> if out of coverage on the frequency used for sidelink direct communication, as defined in TS 36.304 [4, 11.4]: +2> perform a full search (i.e. covering all subframes and all possible SLSSIDs) to detect candidate SLSS, in accordance with TS 36.133 [16] +2> when evaluating the one or more detected SLSSIDs, apply layer 3 filtering as specified in 5.5.3.2 using the preconfigured filterCoefficient as defined in 9.3, before using the S-RSRP measurement results; +2> if the UE has selected a SyncRef UE: +3> if the S-RSRP of the strongest candidate SyncRef UE exceeds the minimum requirement TS 36.133 [16] by syncRefMinHyst and the strongest candidate SyncRef UE belongs to the same priority group as the current SyncRef UE and the S-RSRP of the strongest candidate SyncRef UE exceeds the S-RSRP of the current SyncRef UE by syncRefDiffHyst; or +3> if the S-RSRP of the candidate SyncRef UE exceeds the minimum requirement TS 36.133 [16] by syncRefMinHyst and the candidate SyncRef UE belongs to a higher priority group than the current SyncRef UE; or +3> if the S-RSRP of the current SyncRef UE is less than the minimum requirement TS 36.133 [16]: +4> consider no SyncRef UE to be selected; +2> if the UE has not selected a SyncRef UE, +3> if the UE detects one or more SLSSIDs for which the S-RSRP exceeds the minimum requirement defined in TS 36.133 [16] by syncRefMinHyst and for which the UE received the corresponding MasterInformationBlock-SL message (candidate SyncRef UEs), select a SyncRef UE according to the following priority order: +4> UEs of which inCoverage, included in the MasterInformationBlock-SL message received from this UE, is set to TRUE, starting with the UE with the highest S-RSRP result (priority group 1); +4> UE which SLSSID is part of the set defined for in coverage, starting with the UE with the highest S-RSRP result (priority group 2); +4> Other UEs, starting with the UE with the highest S-RSRP result (priority group 3); +5.10.9 Sidelink common control information +5.10.9.1 General +The sidelink common control information is carried by a single message, the MasterInformationBlock-SL (MIB-SL) message. The MIB-SL includes timing information as well as some configuration parameters and is transmitted via SL-BCH. +The MIB-SL uses a fixed schedule with a periodicity of 40 ms without repetitions. In particular, the MIB-SL is scheduled in subframes indicated by syncOffsetIndicator i.e. for which (10*DFN + subframe number) mod 40 = syncOffsetIndicator. +The sidelink common control information may change at any transmission i.e. neither a modification period nor a change notification mechanism is used. +A UE configured to receive or transmit sidelink direct communication shall: +1> if the UE has a selected SyncRef UE, as specified in 5.10.8.2: +2> ensure having a valid version of the MasterInformationBlock-SL message of that SyncRefUE: +5.10.9.2 Actions related to reception of MasterInformationBlock-SL message +Upon receiving MasterInformationBlock-SL, the UE shall: +1> apply the values of sl-Bandwidth, subframeAssignmentSL, directFrameNumber and directSubframeNumber included in the received MasterInformationBlock-SL message; +6 Protocol data units, formats and parameters (tabular & ASN.1) +6.1 General +The contents of each RRC message is specified in sub-clause 6.2 using ASN.1 to specify the message syntax and using tables when needed to provide further detailed information about the information elements specified in the message syntax. The syntax of the information elements that are defined as stand-alone abstract types is further specified in a similar manner in sub-clause 6.3. +The need for information elements to be present in a message or an abstract type, i.e., the ASN.1 fields that are specified as OPTIONAL in the abstract notation (ASN.1), is specified by means of comment text tags attached to the OPTIONAL statement in the abstract syntax. All comment text tags are available for use in the downlink direction only. The meaning of each tag is specified in table 6.1-1. +Table 6.1-1: Meaning of abbreviations used to specify the need for information elements to be present +Abbreviation Meaning Cond conditionTag +(Used in downlink only) Conditionally present +An information element for which the need is specified by means of conditions. For each conditionTag, the need is specified in a tabular form following the ASN.1 segment. In case, according to the conditions, a field is not present, the UE takes no action and where applicable shall continue to use the existing value (and/ or the associated functionality) unless explicitly stated otherwise (e.g. in the conditional presence table or in the description of the field itself). Need OP +(Used in downlink only) Optionally present +An information element that is optional to signal. For downlink messages, the UE is not required to take any special action on absence of the IE beyond what is specified in the procedural text or the field description table following the ASN.1 segment. The UE behaviour on absence should be captured either in the procedural text or in the field description. Need ON +(Used in downlink only) Optionally present, No action +An information element that is optional to signal. If the message is received by the UE, and in case the information element is absent, the UE takes no action and where applicable shall continue to use the existing value (and/ or the associated functionality). Need OR +(Used in downlink only) Optionally present, Release +An information element that is optional to signal. If the message is received by the UE, and in case the information element is absent, the UE shall discontinue/ stop using/ delete any existing value (and/ or the associated functionality). +Any IE with Need ON in system information shall be interpreted as Need OR. +Need codes may not be specified for a parent extension field/ extension group, used in downlink, which includes one or more child extension fields. Upon absence of such a parent extension field/ extension group, the UE shall: +- For each individual child extension field, including extensions that are mandatory to include in the optional group, act in accordance with the need code that is defined for the extension; +- Apply this behaviour not only for child extension fields included directly within the optional parent extension field/ extension group, but also for extension fields defined at further nesting levels as long as for none of the fields in-between the concerned extension field and the parent extension field a need code is specified; +NOTE 1: The above applies for groups of non critical extensions using double brackets (referred to as extension groups), as well as non-critical extensions at the end of a message or at the end of a structure contained in a BIT STRING or OCTET STRING (referred to as parent extension fields). +Need codes, conditions and ASN.1 defaults specified for a particular (child) field only apply in case the (parent) field including the particular field is present. This rule does not apply for optional parent extension fields/ extension groups without need codes, +NOTE 2: The previous rule implies that E-UTRAN has to include such a parent extension field to release a child field that is either: +- Optional with need OR, or +- Conditional while the UE releases the child field when absent. +The handling of need codes as specified in the previous is illustrated by means of an example, as shown in the following ASN.1. +-- /example/ ASN1START + +RRCMessage-r8-IEs ::= SEQUENCE { + field1 InformationElement1, + field2 InformationElement2 OPTIONAL, -- Need ON + nonCriticalExtension RRCMessage-v8a0-IEs OPTIONAL +} + +RRCMessage-v8a0-IEs ::= SEQUENCE { + field3 InformationElement3 OPTIONAL, -- Need ON + nonCriticalExtension RRCMessage-v940-IEs OPTIONAL +} + +RRCMessage-v940-IEs ::= SEQUENCE { + field4 InformationElement4 OPTIONAL, -- Need OR + nonCriticalExtension SEQUENCE {} OPTIONAL +} + +InformationElement1 ::= SEQUENCE { + field11 InformationElement11 OPTIONAL, -- Need ON + field12 InformationElement12 OPTIONAL, -- Need OR + ..., + [[ field13 InformationElement13 OPTIONAL, -- Need OR + field14 InformationElement14 OPTIONAL -- Need ON + ]] +} + +InformationElement2 ::= SEQUENCE { + field21 InformationElement11 OPTIONAL, -- Need OR + ... +} + +-- ASN1STOP + +The handling of need codes as specified in the previous implies that: +- if field2 in RRCMessage-r8-IEs is absent, the UE does not modify field21; +- if field2 in RRCMessage-r8-IEs is present but does not include field21, the UE releases field21; +- if the extension group containing field13 is absent, the UE releases field13 and does not modify field14; +- if nonCriticalExtension defined by IE RRCMessage-v8a0-IEs is absent, the UE does not modify field3 and releases field4; + +6.2 RRC messages +NOTE: The messages included in this section reflect the current status of the discussions. Additional messages may be included at a later stage. +6.2.1 General message structure +– EUTRA-RRC-Definitions +This ASN.1 segment is the start of the EUTRA RRC PDU definitions. +-- ASN1START + +EUTRA-RRC-Definitions DEFINITIONS AUTOMATIC TAGS ::= + +BEGIN + +-- ASN1STOP + +– BCCH-BCH-Message +The BCCH-BCH-Message class is the set of RRC messages that may be sent from the EUTRAN to the UE via BCH on the BCCH logical channel. +-- ASN1START + +BCCH-BCH-Message ::= SEQUENCE { + message BCCH-BCH-MessageType +} + +BCCH-BCH-MessageType ::= MasterInformationBlock + +-- ASN1STOP + +– BCCH-DL-SCH-Message +The BCCH-DL-SCH-Message class is the set of RRC messages that may be sent from the EUTRAN to the UE via DLSCH on the BCCH logical channel. +-- ASN1START + +BCCH-DL-SCH-Message ::= SEQUENCE { + message BCCH-DL-SCH-MessageType +} + +BCCH-DL-SCH-MessageType ::= CHOICE { + c1 CHOICE { + systemInformation SystemInformation, + systemInformationBlockType1 SystemInformationBlockType1 + }, + messageClassExtension SEQUENCE {} +} + +-- ASN1STOP + +– MCCH-Message +The MCCH-Message class is the set of RRC messages that may be sent from the EUTRAN to the UE on the MCCH logical channel. +-- ASN1START + +MCCH-Message ::= SEQUENCE { + message MCCH-MessageType +} + +MCCH-MessageType ::= CHOICE { + c1 CHOICE { + mbsfnAreaConfiguration-r9 MBSFNAreaConfiguration-r9 + }, + later CHOICE { + c2 CHOICE{ + mbmsCountingRequest-r10 MBMSCountingRequest-r10 + }, + messageClassExtension SEQUENCE {} + } +} + +-- ASN1STOP + +– PCCH-Message +The PCCH-Message class is the set of RRC messages that may be sent from the EUTRAN to the UE on the PCCH logical channel. +-- ASN1START + +PCCH-Message ::= SEQUENCE { + message PCCH-MessageType +} + +PCCH-MessageType ::= CHOICE { + c1 CHOICE { + paging Paging + }, + messageClassExtension SEQUENCE {} +} + +-- ASN1STOP + +– DL-CCCH-Message +The DL-CCCH-Message class is the set of RRC messages that may be sent from the EUTRAN to the UE on the downlink CCCH logical channel. +-- ASN1START + +DL-CCCH-Message ::= SEQUENCE { + message DL-CCCH-MessageType +} + +DL-CCCH-MessageType ::= CHOICE { + c1 CHOICE { + rrcConnectionReestablishment RRCConnectionReestablishment, + rrcConnectionReestablishmentReject RRCConnectionReestablishmentReject, + rrcConnectionReject RRCConnectionReject, + rrcConnectionSetup RRCConnectionSetup + }, + messageClassExtension SEQUENCE {} +} + +-- ASN1STOP + +– DL-DCCH-Message +The DL-DCCH-Message class is the set of RRC messages that may be sent from the EUTRAN to the UE or from the E-UTRAN to the RN on the downlink DCCH logical channel. +-- ASN1START + +DL-DCCH-Message ::= SEQUENCE { + message DL-DCCH-MessageType +} + +DL-DCCH-MessageType ::= CHOICE { + c1 CHOICE { + csfbParametersResponseCDMA2000 CSFBParametersResponseCDMA2000, + dlInformationTransfer DLInformationTransfer, + handoverFromEUTRAPreparationRequest HandoverFromEUTRAPreparationRequest, + mobilityFromEUTRACommand MobilityFromEUTRACommand, + rrcConnectionReconfiguration RRCConnectionReconfiguration, + rrcConnectionRelease RRCConnectionRelease, + securityModeCommand SecurityModeCommand, + ueCapabilityEnquiry UECapabilityEnquiry, + counterCheck CounterCheck, + ueInformationRequest-r9 UEInformationRequest-r9, + loggedMeasurementConfiguration-r10 LoggedMeasurementConfiguration-r10, + rnReconfiguration-r10 RNReconfiguration-r10, + spare4 NULL, + spare3 NULL, spare2 NULL, spare1 NULL + }, + messageClassExtension SEQUENCE {} +} + +-- ASN1STOP + +– UL-CCCH-Message +The UL-CCCH-Message class is the set of RRC messages that may be sent from the UE to the EUTRAN on the uplink CCCH logical channel. +-- ASN1START + +UL-CCCH-Message ::= SEQUENCE { + message UL-CCCH-MessageType +} + +UL-CCCH-MessageType ::= CHOICE { + c1 CHOICE { + rrcConnectionReestablishmentRequest RRCConnectionReestablishmentRequest, + rrcConnectionRequest RRCConnectionRequest + }, + messageClassExtension SEQUENCE {} +} + +-- ASN1STOP + +– UL-DCCH-Message +The UL-DCCH-Message class is the set of RRC messages that may be sent from the UE to the EUTRAN or from the RN to the E-UTRAN on the uplink DCCH logical channel. +-- ASN1START + +UL-DCCH-Message ::= SEQUENCE { + message UL-DCCH-MessageType +} + +UL-DCCH-MessageType ::= CHOICE { + c1 CHOICE { + csfbParametersRequestCDMA2000 CSFBParametersRequestCDMA2000, + measurementReport MeasurementReport, + rrcConnectionReconfigurationComplete RRCConnectionReconfigurationComplete, + rrcConnectionReestablishmentComplete RRCConnectionReestablishmentComplete, + rrcConnectionSetupComplete RRCConnectionSetupComplete, + securityModeComplete SecurityModeComplete, + securityModeFailure SecurityModeFailure, + ueCapabilityInformation UECapabilityInformation, + ulHandoverPreparationTransfer ULHandoverPreparationTransfer, + ulInformationTransfer ULInformationTransfer, + counterCheckResponse CounterCheckResponse, + ueInformationResponse-r9 UEInformationResponse-r9, + proximityIndication-r9 ProximityIndication-r9, + rnReconfigurationComplete-r10 RNReconfigurationComplete-r10, + mbmsCountingResponse-r10 MBMSCountingResponse-r10, + interFreqRSTDMeasurementIndication-r10 InterFreqRSTDMeasurementIndication-r10 + }, + messageClassExtension CHOICE { + c2 CHOICE { + ueAssistanceInformation-r11 UEAssistanceInformation-r11, + inDeviceCoexIndication-r11 InDeviceCoexIndication-r11, + mbmsInterestIndication-r11 MBMSInterestIndication-r11, + scgFailureInformation-r12 SCGFailureInformation-r12, + sidelinkUEInformation-r12 SidelinkUEInformation-r12, + spare11 NULL, spare10 NULL, + spare9 NULL, spare8 NULL, spare7 NULL, + spare6 NULL, spare5 NULL, spare4 NULL, + spare3 NULL, spare2 NULL, spare1 NULL + }, + messageClassExtensionFuture-r11 SEQUENCE {} + } +} + +-- ASN1STOP + +6.2.2 Message definitions +– CounterCheck +The CounterCheck message is used by the E-UTRAN to indicate the current COUNT MSB values associated to each DRB and to request the UE to compare these to its COUNT MSB values and to report the comparison results to E-UTRAN. +Signalling radio bearer: SRB1 +RLC-SAP: AM +Logical channel: DCCH +Direction: EUTRAN to UE +CounterCheck message +-- ASN1START + +CounterCheck ::= SEQUENCE { + rrc-TransactionIdentifier RRC-TransactionIdentifier, + criticalExtensions CHOICE { + c1 CHOICE { + counterCheck-r8 CounterCheck-r8-IEs, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +CounterCheck-r8-IEs ::= SEQUENCE { + drb-CountMSB-InfoList DRB-CountMSB-InfoList, + nonCriticalExtension CounterCheck-v8a0-IEs OPTIONAL +} + +CounterCheck-v8a0-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, + nonCriticalExtension SEQUENCE {} OPTIONAL +} + +DRB-CountMSB-InfoList ::= SEQUENCE (SIZE (1..maxDRB)) OF DRB-CountMSB-Info + +DRB-CountMSB-Info ::= SEQUENCE { + drb-Identity DRB-Identity, + countMSB-Uplink INTEGER(0..33554431), + countMSB-Downlink INTEGER(0..33554431) +} + +-- ASN1STOP + +CounterCheck field descriptions count-MSB-Downlink +Indicates the value of 25 MSBs from downlink COUNT associated to this DRB. count-MSB-Uplink +Indicates the value of 25 MSBs from uplink COUNT associated to this DRB. drb-CountMSB-InfoList +Indicates the MSBs of the COUNT values of the DRBs. +– CounterCheckResponse +The CounterCheckResponse message is used by the UE to respond to a CounterCheck message. +Signalling radio bearer: SRB1 +RLC-SAP: AM +Logical channel: DCCH +Direction: UE to EUTRAN +CounterCheckResponse message +-- ASN1START + +CounterCheckResponse ::= SEQUENCE { + rrc-TransactionIdentifier RRC-TransactionIdentifier, + criticalExtensions CHOICE { + counterCheckResponse-r8 CounterCheckResponse-r8-IEs, + criticalExtensionsFuture SEQUENCE {} + } +} + +CounterCheckResponse-r8-IEs ::= SEQUENCE { + drb-CountInfoList DRB-CountInfoList, + nonCriticalExtension CounterCheckResponse-v8a0-IEs OPTIONAL +} + +CounterCheckResponse-v8a0-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, + nonCriticalExtension SEQUENCE {} OPTIONAL +} + +DRB-CountInfoList ::= SEQUENCE (SIZE (0..maxDRB)) OF DRB-CountInfo + +DRB-CountInfo ::= SEQUENCE { + drb-Identity DRB-Identity, + count-Uplink INTEGER(0..4294967295), + count-Downlink INTEGER(0..4294967295) +} + +-- ASN1STOP + +CounterCheckResponse field descriptions count-Downlink +Indicates the value of downlink COUNT associated to this DRB. count-Uplink +Indicates the value of uplink COUNT associated to this DRB. drb-CountInfoList +Indicates the COUNT values of the DRBs. +– CSFBParametersRequestCDMA2000 +The CSFBParametersRequestCDMA2000 message is used by the UE to obtain the CDMA2000 1xRTT Parameters from the network. The UE needs these parameters to generate the CDMA2000 1xRTT Registration message used to register with the CDMA2000 1xRTT Network which is required to support CSFB to CDMA2000 1xRTT. +Signalling radio bearer: SRB1 +RLC-SAP: AM +Logical channel: DCCH +Direction: UE to EUTRAN +CSFBParametersRequestCDMA2000 message +-- ASN1START + +CSFBParametersRequestCDMA2000 ::= SEQUENCE { + criticalExtensions CHOICE { + csfbParametersRequestCDMA2000-r8 CSFBParametersRequestCDMA2000-r8-IEs, + criticalExtensionsFuture SEQUENCE {} + } +} + +CSFBParametersRequestCDMA2000-r8-IEs ::= SEQUENCE { + nonCriticalExtension CSFBParametersRequestCDMA2000-v8a0-IEs OPTIONAL +} + +CSFBParametersRequestCDMA2000-v8a0-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, + nonCriticalExtension SEQUENCE {} OPTIONAL +} + +-- ASN1STOP + +– CSFBParametersResponseCDMA2000 +The CSFBParametersResponseCDMA2000 message is used to provide the CDMA2000 1xRTT Parameters to the UE so the UE can register with the CDMA2000 1xRTT Network to support CSFB to CDMA2000 1xRTT. +Signalling radio bearer: SRB1 +RLC-SAP: AM +Logical channel: DCCH +Direction: EUTRAN to UE +CSFBParametersResponseCDMA2000 message +-- ASN1START + +CSFBParametersResponseCDMA2000 ::= SEQUENCE { + rrc-TransactionIdentifier RRC-TransactionIdentifier, + criticalExtensions CHOICE { + csfbParametersResponseCDMA2000-r8 CSFBParametersResponseCDMA2000-r8-IEs, + criticalExtensionsFuture SEQUENCE {} + } +} + +CSFBParametersResponseCDMA2000-r8-IEs ::= SEQUENCE { + rand RAND-CDMA2000, + mobilityParameters MobilityParametersCDMA2000, + nonCriticalExtension CSFBParametersResponseCDMA2000-v8a0-IEs OPTIONAL +} + +CSFBParametersResponseCDMA2000-v8a0-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, + nonCriticalExtension SEQUENCE {} OPTIONAL +} + +-- ASN1STOP + +– DLInformationTransfer +The DLInformationTransfer message is used for the downlink transfer of NAS or non-3GPP dedicated information. +Signalling radio bearer: SRB2 or SRB1 (only if SRB2 not established yet. If SRB2 is suspended, E-UTRAN does not send this message until SRB2 is resumed.) +RLC-SAP: AM +Logical channel: DCCH +Direction: EUTRAN to UE +DLInformationTransfer message +-- ASN1START + +DLInformationTransfer ::= SEQUENCE { + rrc-TransactionIdentifier RRC-TransactionIdentifier, + criticalExtensions CHOICE { + c1 CHOICE { + dlInformationTransfer-r8 DLInformationTransfer-r8-IEs, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +DLInformationTransfer-r8-IEs ::= SEQUENCE { + dedicatedInfoType CHOICE { + dedicatedInfoNAS DedicatedInfoNAS, + dedicatedInfoCDMA2000-1XRTT DedicatedInfoCDMA2000, + dedicatedInfoCDMA2000-HRPD DedicatedInfoCDMA2000 + }, + nonCriticalExtension DLInformationTransfer-v8a0-IEs OPTIONAL +} + +DLInformationTransfer-v8a0-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, + nonCriticalExtension SEQUENCE {} OPTIONAL +} + +-- ASN1STOP + +– HandoverFromEUTRAPreparationRequest (CDMA2000) +The HandoverFromEUTRAPreparationRequest message is used to trigger the handover preparation procedure with a CDMA2000 RAT. This message is also used to trigger a tunneled preparation procedure with a CDMA2000 1xRTT RAT to obtain traffic channel resources for the enhanced CS fallback to CDMA2000 1xRTT, which may also involve a concurrent preparation for handover to CDMA2000 HRPD. Also, this message is used to trigger the dual Rx/Tx redirection procedure with a CDMA2000 1xRTT RAT. +Signalling radio bearer: SRB1 +RLC-SAP: AM +Logical channel: DCCH +Direction: EUTRAN to UE +HandoverFromEUTRAPreparationRequest message +-- ASN1START + +HandoverFromEUTRAPreparationRequest ::= SEQUENCE { + rrc-TransactionIdentifier RRC-TransactionIdentifier, + criticalExtensions CHOICE { + c1 CHOICE { + handoverFromEUTRAPreparationRequest-r8 + HandoverFromEUTRAPreparationRequest-r8-IEs, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +HandoverFromEUTRAPreparationRequest-r8-IEs ::= SEQUENCE { + cdma2000-Type CDMA2000-Type, + rand RAND-CDMA2000 OPTIONAL, -- Cond cdma2000-Type + mobilityParameters MobilityParametersCDMA2000 OPTIONAL, -- Cond cdma2000-Type + nonCriticalExtension HandoverFromEUTRAPreparationRequest-v890-IEs OPTIONAL +} + +HandoverFromEUTRAPreparationRequest-v890-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, + nonCriticalExtension HandoverFromEUTRAPreparationRequest-v920-IEs OPTIONAL +} + +HandoverFromEUTRAPreparationRequest-v920-IEs ::= SEQUENCE { + concurrPrepCDMA2000-HRPD-r9 BOOLEAN OPTIONAL, -- Cond cdma2000-Type + nonCriticalExtension HandoverFromEUTRAPreparationRequest-v1020-IEs OPTIONAL +} + +HandoverFromEUTRAPreparationRequest-v1020-IEs ::= SEQUENCE { + dualRxTxRedirectIndicator-r10 ENUMERATED {true} OPTIONAL, -- Cond cdma2000-1XRTT + redirectCarrierCDMA2000-1XRTT-r10 CarrierFreqCDMA2000 OPTIONAL, -- Cond dualRxTxRedirect + nonCriticalExtension SEQUENCE {} OPTIONAL +} + +-- ASN1STOP + +HandoverFromEUTRAPreparationRequest field descriptions concurrPrepCDMA2000-HRPD +Value TRUE indicates that upper layers should initiate concurrent preparation for handover to CDMA2000 HRPD in addition to preparation for enhanced CS fallback to CDMA2000 1xRTT. dualRxTxRedirectIndicator +Value TRUE indicates that the second radio of the dual Rx/Tx UE is being redirected to CDMA2000 1xRTT [51]. redirectCarrierCDMA2000-1XRTT +Used to indicate the CDMA2000 1xRTT carrier frequency where the UE is being redirected to. +Conditional presence Explanation cdma2000-1XRTT The field is optionally present, need ON, if the cdma2000-Type = type1XRTT; otherwise it is not present. cdma2000-Type The field is mandatory present if the cdma2000-Type = type1XRTT; otherwise it is not present. dualRxTxRedirect The field is optionally present, need ON, if dualRxTxRedirectIndicator is present; otherwise it is not present. +– InDeviceCoexIndication +The InDeviceCoexIndication message is used to inform E-UTRAN about IDC problems which can not be solved by the UE itself, as well as to provide information that may assist E-UTRAN when resolving these problems. +Signalling radio bearer: SRB1 +RLC-SAP: AM +Logical channel: DCCH +Direction: UE to EUTRAN +InDeviceCoexIndication message +-- ASN1START + +InDeviceCoexIndication-r11 ::= SEQUENCE { + criticalExtensions CHOICE { + c1 CHOICE { + inDeviceCoexIndication-r11 InDeviceCoexIndication-r11-IEs, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +InDeviceCoexIndication-r11-IEs ::= SEQUENCE { + affectedCarrierFreqList-r11 AffectedCarrierFreqList-r11 OPTIONAL, + tdm-AssistanceInfo-r11 TDM-AssistanceInfo-r11 OPTIONAL, + lateNonCriticalExtension OCTET STRING OPTIONAL, + nonCriticalExtension SEQUENCE {} OPTIONAL +} + +AffectedCarrierFreqList-r11 ::= SEQUENCE (SIZE (1..maxFreqIDC-r11)) OF AffectedCarrierFreq-r11 + +AffectedCarrierFreq-r11 ::= SEQUENCE { + carrierFreq-r11 MeasObjectId, + interferenceDirection-r11 ENUMERATED {eutra, other, both, spare} +} + +TDM-AssistanceInfo-r11 ::= CHOICE { + drx-AssistanceInfo-r11 SEQUENCE { + drx-CycleLength-r11 ENUMERATED {sf40, sf64, sf80, sf128, sf160, + sf256, spare2, spare1}, + drx-Offset-r11 INTEGER (0..255) OPTIONAL, + drx-ActiveTime-r11 ENUMERATED {sf20, sf30, sf40, sf60, sf80, + sf100, spare2, spare1} + }, + idc-SubframePatternList-r11 IDC-SubframePatternList-r11, + ... +} + +IDC-SubframePatternList-r11 ::= SEQUENCE (SIZE (1..maxSubframePatternIDC-r11)) OF IDC-SubframePattern-r11 + +IDC-SubframePattern-r11 ::= CHOICE { + subframePatternFDD-r11 BIT STRING (SIZE (4)), + subframePatternTDD-r11 CHOICE { + subframeConfig0-r11 BIT STRING (SIZE (70)), + subframeConfig1-5-r11 BIT STRING (SIZE (10)), + subframeConfig6-r11 BIT STRING (SIZE (60)) + }, + ... +} + +-- ASN1STOP + +InDeviceCoexIndication field descriptions affectedCarrierFreqList +List of E-UTRA carrier frequencies affected by IDC problems. drx-ActiveTime +Indicates the desired active time that the E-UTRAN is recommended to configure. Value in number of subframes. Value sf20 corresponds to 20 subframes, sf30 corresponds to 30 subframes and so on. drx-CycleLength +Indicates the desired DRX cycle length that the E-UTRAN is recommended to configure. Value in number of subframes. Value sf40 corresponds to 40 subframes, sf64 corresponds to 64 subframes and so on. drx-Offset +Indicates the desired DRX starting offset that the E-UTRAN is recommended to configure. The UE shall set the value of drx-Offset smaller than the value of drx-CycleLength. The starting frame and subframe satisfy the relation: [(SFN * 10) + subframe number] modulo (drx-CycleLength) = drx-Offset. idc-SubframePatternList +A list of one or more subframe patterns indicating which HARQ process E-UTRAN is requested to abstain from using. Value 0 indicates that E-UTRAN is requested to abstain from using the subframe. For FDD, the radio frame in which the pattern starts (i.e. the radio frame in which the first/leftmost bit of the subframePatternFDD corresponds to subframe #0) occurs when SFN mod 2 = 0. For TDD, the first/leftmost bit corresponds to the subframe #0 of the radio frame satisfying SFN mod x = 0, where x is the size of the bit string divided by 10. The UE shall indicate a subframe pattern that follows HARQ time line, as specified in TS 36.213 [23], i.e, if a subframe is set to 1 in the subframe pattern, also the corresponding subframes carrying the potential UL grant [23, 8.0], the UL HARQ retransmission [23, 8.0] and the DL/UL HARQ feedback [23, 7.3, 8.3 and 9.1.2] shall be set to 1. interferenceDirection +Indicates the direction of IDC interference. Value eutra indicates that only E-UTRA is victim of IDC interference, value other indicates that only another radio is victim of IDC interference and value both indicates that both E-UTRA and another radio are victims of IDC interference. The other radio refers to either the ISM radio or GNSS (see 3GPP TR 36.816 [63]). +– InterFreqRSTDMeasurementIndication +The InterFreqRSTDMeasurementIndication message is used to indicate that the UE is going to either start or stop OTDOA inter-frequency RSTD measurement which requires measurement gaps as specified in TS 36.133 [16, 8.1.2.6]. +Signalling radio bearer: SRB1 +RLC-SAP: AM +Logical channel: DCCH +Direction: UE to EUTRAN +InterFreqRSTDMeasurementIndication message +-- ASN1START + +InterFreqRSTDMeasurementIndication-r10 ::= SEQUENCE { + criticalExtensions CHOICE { + c1 CHOICE { + interFreqRSTDMeasurementIndication-r10 InterFreqRSTDMeasurementIndication-r10-IEs, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +InterFreqRSTDMeasurementIndication-r10-IEs ::= SEQUENCE { + rstd-InterFreqIndication-r10 CHOICE { + start SEQUENCE { + rstd-InterFreqInfoList-r10 RSTD-InterFreqInfoList-r10 + }, + stop NULL + }, + lateNonCriticalExtension OCTET STRING OPTIONAL, + nonCriticalExtension SEQUENCE {} OPTIONAL +} + +RSTD-InterFreqInfoList-r10 ::= SEQUENCE (SIZE(1..maxRSTD-Freq-r10)) OF RSTD-InterFreqInfo-r10 + +RSTD-InterFreqInfo-r10 ::= SEQUENCE { + carrierFreq-r10 ARFCN-ValueEUTRA, + measPRS-Offset-r10 INTEGER (0..39), + ..., + [[ carrierFreq-v1090 ARFCN-ValueEUTRA-v9e0 OPTIONAL + ]] +} + +-- ASN1STOP + +InterFreqRSTDMeasurementIndication field descriptions carrierFreq +The EARFCN value of the carrier received from upper layers for which the UE needs to perform the inter-frequency RSTD measurements. If the UE includes carrierFreq-v1090, it shall set carrierFreq-r10 to maxEARFCN. measPRS-Offset +Indicates the requested gap offset for performing inter-frequency RSTD measurements. It is the smallest subframe offset from the beginning of subframe 0 of SFN=0 of the serving cell of the requested gap for measuring PRS positioning occasions in the carrier frequency carrierFreq for which the UE needs to perform the inter-frequency RSTD measurements. The PRS positioning occasion information is received from upper layers. The value of measPRS-Offset is obtained by mapping the starting subframe of the PRS positioning occasion in the measured cell onto the corresponding subframe in the serving cell and is calculated as the serving cell’s number of subframes from SFN=0 mod 40. +The UE shall take into account any additional time required by the UE to start PRS measurements on the other carrier when it does this mapping for determining the measPRS-Offset. +NOTE: Figure 6.2.2-1 illustrates the measPRS-Offset field. rstd-InterFreqIndication +Indicates the inter-frequency RSTD measurement action, i.e. the UE is going to start or stop inter-frequency RSTD measurement. + +Figure 6.2.2-1 (informative): Exemplary calculation of measPRS-Offset field. + +– LoggedMeasurementConfiguration +The LoggedMeasurementConfiguration message is used by E-UTRAN to configure the UE to perform logging of measurement results while in RRC_IDLE or to perform logging of measurement results for MBSFN while in both RRC_IDLE and RRC_CONNECTED. It is used to transfer the logged measurement configuration for network performance optimisation, see TS 37.320 [60]. +Signalling radio bearer: SRB1 +RLC-SAP: AM +Logical channel: DCCH +Direction: E-UTRAN to UE +LoggedMeasurementConfiguration message +-- ASN1START + +LoggedMeasurementConfiguration-r10 ::= SEQUENCE { + criticalExtensions CHOICE { + c1 CHOICE { + loggedMeasurementConfiguration-r10 LoggedMeasurementConfiguration-r10-IEs, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + + +LoggedMeasurementConfiguration-r10-IEs ::= SEQUENCE { + traceReference-r10 TraceReference-r10, + traceRecordingSessionRef-r10 OCTET STRING (SIZE (2)), + tce-Id-r10 OCTET STRING (SIZE (1)), + absoluteTimeInfo-r10 AbsoluteTimeInfo-r10, + areaConfiguration-r10 AreaConfiguration-r10 OPTIONAL, -- Need OR + loggingDuration-r10 LoggingDuration-r10, + loggingInterval-r10 LoggingInterval-r10, + nonCriticalExtension LoggedMeasurementConfiguration-v1080-IEs OPTIONAL +} + +LoggedMeasurementConfiguration-v1080-IEs ::= SEQUENCE { + lateNonCriticalExtension-r10 OCTET STRING OPTIONAL, + nonCriticalExtension LoggedMeasurementConfiguration-v1130-IEs OPTIONAL +} + +LoggedMeasurementConfiguration-v1130-IEs ::= SEQUENCE { + plmn-IdentityList-r11 PLMN-IdentityList3-r11 OPTIONAL, -- Need OR + areaConfiguration-v1130 AreaConfiguration-v1130 OPTIONAL, -- Need OR + nonCriticalExtension LoggedMeasurementConfiguration-v1250-IEs OPTIONAL +} + +LoggedMeasurementConfiguration-v1250-IEs ::= SEQUENCE { + targetMBSFN-AreaList-r12 TargetMBSFN-AreaList-r12 OPTIONAL, -- Need OP + nonCriticalExtension SEQUENCE {} OPTIONAL +} + +TargetMBSFN-AreaList-r12 ::= SEQUENCE (SIZE (0..maxMBSFN-Area)) OF TargetMBSFN-Area-r12 + +TargetMBSFN-Area-r12 ::= SEQUENCE { + mbsfn-AreaId-r12 MBSFN-AreaId-r12 OPTIONAL, -- Need OR + carrierFreq-r12 ARFCN-ValueEUTRA-r9, + ... +} + +-- ASN1STOP + +LoggedMeasurementConfiguration field descriptions absoluteTimeInfo +Indicates the absolute time in the current cell. areaConfiguration +Used to restrict the area in which the UE performs measurement logging to cells broadcasting either one of the included cell identities or one of the included tracking area codes/ identities. plmn-IdentityList +Indicates a set of PLMNs defining when the UE performs measurement logging as well as the associated status indication and information retrieval i.e. the UE performs these actions when the RPLMN is part of this set of PLMNs. targetMBSFN-AreaList +Used to indicate logging of MBSFN measurements and further restrict the area and frequencies for which the UE performs measurement logging for MBSFN. If both MBSFN area id and carrier frequency are present, a specific MBSFN area is indicated. If only carrier frequency is present, all MBSFN areas on that carrier frequency are indicated. If there is no entry in the list, any MBSFN area is indicated. tce-Id +Parameter Trace Collection Entity Id: See TS 32.422 [58]. traceRecordingSessionRef +Parameter Trace Recording Session Reference: See TS 32.422 [58] +– MasterInformationBlock +The MasterInformationBlock includes the system information transmitted on BCH. +Signalling radio bearer: N/A +RLC-SAP: TM +Logical channel: BCCH +Direction: EUTRAN to UE +MasterInformationBlock +-- ASN1START + +MasterInformationBlock ::= SEQUENCE { + dl-Bandwidth ENUMERATED { + n6, n15, n25, n50, n75, n100}, + phich-Config PHICH-Config, + systemFrameNumber BIT STRING (SIZE (8)), + spare BIT STRING (SIZE (10)) +} + + +-- ASN1STOP + +MasterInformationBlock field descriptions dl-Bandwidth +Parameter: transmission bandwidth configuration, NRB in downlink, see TS 36.101 [42, table 5.6-1]. n6 corresponds to 6 resource blocks, n15 to 15 resource blocks and so on. systemFrameNumber +Defines the 8 most significant bits of the SFN. As indicated in TS 36.211 [21, 6.6.1], the 2 least significant bits of the SFN are acquired implicitly in the P-BCH decoding, i.e. timing of 40ms P-BCH TTI indicates 2 least significant bits (within 40ms P-BCH TTI, the first radio frame: 00, the second radio frame: 01, the third radio frame: 10, the last radio frame: 11). One value applies for all serving cells of a Cell Group (i.e. MCG or SCG). The associated functionality is common (i.e. not performed independently for each cell). +– MBMSCountingRequest +The MBMSCountingRequest message is used by E-UTRAN to count the UEs that are receiving or interested to receive specific MBMS services. +Signalling radio bearer: N/A +RLC-SAP: UM +Logical channel: MCCH +Direction: EUTRAN to UE +MBMSCountingRequest message +-- ASN1START + +MBMSCountingRequest-r10 ::= SEQUENCE { + countingRequestList-r10 CountingRequestList-r10, + lateNonCriticalExtension OCTET STRING OPTIONAL, + nonCriticalExtension SEQUENCE {} OPTIONAL +} + +CountingRequestList-r10 ::= SEQUENCE (SIZE (1..maxServiceCount)) OF CountingRequestInfo-r10 + +CountingRequestInfo-r10 ::= SEQUENCE { + tmgi-r10 TMGI-r9, + ... +} + +-- ASN1STOP + +– MBMSCountingResponse +The MBMSCountingResponse message is used by the UE to respond to an MBMSCountingRequest message. +Signalling radio bearer: SRB1 +RLC-SAP: AM +Logical channel: DCCH +Direction: UE to EUTRAN +MBMSCountingResponse message +-- ASN1START + +MBMSCountingResponse-r10 ::= SEQUENCE { + criticalExtensions CHOICE { + c1 CHOICE { + countingResponse-r10 MBMSCountingResponse-r10-IEs, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +MBMSCountingResponse-r10-IEs ::= SEQUENCE { + mbsfn-AreaIndex-r10 INTEGER (0..maxMBSFN-Area-1) OPTIONAL, + countingResponseList-r10 CountingResponseList-r10 OPTIONAL, + lateNonCriticalExtension OCTET STRING OPTIONAL, + nonCriticalExtension SEQUENCE {} OPTIONAL +} + +CountingResponseList-r10 ::= SEQUENCE (SIZE (1..maxServiceCount)) OF CountingResponseInfo-r10 + +CountingResponseInfo-r10 ::= SEQUENCE { + countingResponseService-r10 INTEGER (0..maxServiceCount-1), + ... +} + +-- ASN1STOP + +MBMSCountingResponse field descriptions countingResponseList +List of MBMS services which the UE is receiving or interested to receive. Value 0 for field countingResponseService corresponds to the first entry in countingRequestList within MBMSCountingRequest, value 1 corresponds to the second entry in this list and so on. mbsfn-AreaIndex +Index of the entry in field mbsfn-AreaInfoList within SystemInformationBlockType13. Value 0 corresponds to the first entry in mbsfn-AreaInfoList within SystemInformationBlockType13, value 1 corresponds to the second entry in this list and so on. +– MBMSInterestIndication +The MBMSInterestIndication message is used to inform E-UTRAN that the UE is receiving/ interested to receive or no longer receiving/ interested to receive MBMS via an MRB. +Signalling radio bearer: SRB1 +RLC-SAP: AM +Logical channel: DCCH +Direction: UE to EUTRAN +MBMSInterestIndication message +-- ASN1START + +MBMSInterestIndication-r11 ::= SEQUENCE { + criticalExtensions CHOICE { + c1 CHOICE { + interestIndication-r11 MBMSInterestIndication-r11-IEs, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +MBMSInterestIndication-r11-IEs ::= SEQUENCE { + mbms-FreqList-r11 CarrierFreqListMBMS-r11 OPTIONAL, + mbms-Priority-r11 ENUMERATED {true} OPTIONAL, + lateNonCriticalExtension OCTET STRING OPTIONAL, + nonCriticalExtension SEQUENCE {} OPTIONAL +} + +-- ASN1STOP + +MBMSInterestIndication field descriptions mbms-FreqList +List of MBMS frequencies on which the UE is receiving or interested to receive MBMS via an MRB. mbms-Priority +Indicates whether the UE prioritises MBMS reception above unicast reception. The field is present (i.e. value true), if the UE prioritises reception of all listed MBMS frequencies above reception of any of the unicast bearers. Otherwise the field is absent. +– MBSFNAreaConfiguration +The MBSFNAreaConfiguration message contains the MBMS control information applicable for an MBSFN area. For each MBSFN area included in SystemInformationBlockType13 E-UTRAN configures an MCCH (i.e. the MCCH identifies the MBSFN area) and signals the MBSFNAreaConfiguration message. +Signalling radio bearer: N/A +RLC-SAP: UM +Logical channel: MCCH +Direction: EUTRAN to UE +MBSFNAreaConfiguration message +-- ASN1START + +MBSFNAreaConfiguration-r9 ::= SEQUENCE { + commonSF-Alloc-r9 CommonSF-AllocPatternList-r9, + commonSF-AllocPeriod-r9 ENUMERATED { + rf4, rf8, rf16, rf32, rf64, rf128, rf256}, + pmch-InfoList-r9 PMCH-InfoList-r9, + nonCriticalExtension MBSFNAreaConfiguration-v930-IEs OPTIONAL +} + +MBSFNAreaConfiguration-v930-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, + nonCriticalExtension MBSFNAreaConfiguration-v1250-IEs OPTIONAL +} + +MBSFNAreaConfiguration-v1250-IEs ::= SEQUENCE { + pmch-InfoListExt-r12 PMCH-InfoListExt-r12 OPTIONAL, -- Need OR + nonCriticalExtension SEQUENCE {} OPTIONAL +} + +CommonSF-AllocPatternList-r9 ::= SEQUENCE (SIZE (1..maxMBSFN-Allocations)) OF MBSFN-SubframeConfig + +-- ASN1STOP + +MBSFNAreaConfiguration field descriptions commonSF-Alloc +Indicates the subframes allocated to the MBSFN area. E-UTRAN always sets this field to cover at least the subframes configured by SystemInformationBlockType13 for this MCCH, regardless of whether any MBMS sessions are ongoing. commonSF-AllocPeriod +Indicates the period during which resources corresponding with field commonSF-Alloc are divided between the (P)MCH that are configured for this MBSFN area. The subframe allocation patterns, as defined by commonSF-Alloc, repeat continously during this period. Value rf4 corresponds to 4 radio frames, rf8 corresponds to 8 radio frames and so on. The commonSF-AllocPeriod starts in the radio frames for which: SFN mod commonSF-AllocPeriod = 0. pmch-InfoList +EUTRAN may include pmch-InfoListExt even if pmch-InfoList does not include maxPMCH-PerMBSFN entries. EUTRAN configures at most maxPMCH-PerMBSFN entries i.e. across pmch-InfoList and pmch-InfoListExt. +– MeasurementReport +The MeasurementReport message is used for the indication of measurement results. +Signalling radio bearer: SRB1 +RLC-SAP: AM +Logical channel: DCCH +Direction: UE to EUTRAN +MeasurementReport message +-- ASN1START + +MeasurementReport ::= SEQUENCE { + criticalExtensions CHOICE { + c1 CHOICE{ + measurementReport-r8 MeasurementReport-r8-IEs, + spare7 NULL, + spare6 NULL, spare5 NULL, spare4 NULL, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +MeasurementReport-r8-IEs ::= SEQUENCE { + measResults MeasResults, + nonCriticalExtension MeasurementReport-v8a0-IEs OPTIONAL +} + +MeasurementReport-v8a0-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, + nonCriticalExtension SEQUENCE {} OPTIONAL +} + +-- ASN1STOP + +– MobilityFromEUTRACommand +The MobilityFromEUTRACommand message is used to command handover or a cell change from EUTRA to another RAT (3GPP or non-3GPP), or enhanced CS fallback to CDMA2000 1xRTT. +Signalling radio bearer: SRB1 +RLC-SAP: AM +Logical channel: DCCH +Direction: EUTRAN to UE +MobilityFromEUTRACommand message +-- ASN1START + +MobilityFromEUTRACommand ::= SEQUENCE { + rrc-TransactionIdentifier RRC-TransactionIdentifier, + criticalExtensions CHOICE { + c1 CHOICE{ + mobilityFromEUTRACommand-r8 MobilityFromEUTRACommand-r8-IEs, + mobilityFromEUTRACommand-r9 MobilityFromEUTRACommand-r9-IEs, + spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +MobilityFromEUTRACommand-r8-IEs ::= SEQUENCE { + cs-FallbackIndicator BOOLEAN, + purpose CHOICE{ + handover Handover, + cellChangeOrder CellChangeOrder + }, + nonCriticalExtension MobilityFromEUTRACommand-v8a0-IEs OPTIONAL +} + +MobilityFromEUTRACommand-v8a0-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, + nonCriticalExtension MobilityFromEUTRACommand-v8d0-IEs OPTIONAL +} + +MobilityFromEUTRACommand-v8d0-IEs ::= SEQUENCE { + bandIndicator BandIndicatorGERAN OPTIONAL, -- Cond GERAN + nonCriticalExtension SEQUENCE {} OPTIONAL +} + +MobilityFromEUTRACommand-r9-IEs ::= SEQUENCE { + cs-FallbackIndicator BOOLEAN, + purpose CHOICE{ + handover Handover, + cellChangeOrder CellChangeOrder, + e-CSFB-r9 E-CSFB-r9, + ... + }, + nonCriticalExtension MobilityFromEUTRACommand-v930-IEs OPTIONAL +} + +MobilityFromEUTRACommand-v930-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, + nonCriticalExtension MobilityFromEUTRACommand-v960-IEs OPTIONAL +} + +MobilityFromEUTRACommand-v960-IEs ::= SEQUENCE { + bandIndicator BandIndicatorGERAN OPTIONAL, -- Cond GERAN + nonCriticalExtension SEQUENCE {} OPTIONAL +} + +Handover ::= SEQUENCE { + targetRAT-Type ENUMERATED { + utra, geran, cdma2000-1XRTT, cdma2000-HRPD, + spare4, spare3, spare2, spare1, ...}, + targetRAT-MessageContainer OCTET STRING, + nas-SecurityParamFromEUTRA OCTET STRING (SIZE (1)) OPTIONAL, -- Cond UTRAGERAN + systemInformation SI-OrPSI-GERAN OPTIONAL -- Cond PSHO +} + +CellChangeOrder ::= SEQUENCE { + t304 ENUMERATED { + ms100, ms200, ms500, ms1000, + ms2000, ms4000, ms8000, spare1}, + targetRAT-Type CHOICE { + geran SEQUENCE { + physCellId PhysCellIdGERAN, + carrierFreq CarrierFreqGERAN, + networkControlOrder BIT STRING (SIZE (2)) OPTIONAL, -- Need OP + systemInformation SI-OrPSI-GERAN OPTIONAL -- Need OP + }, + ... + } +} + +SI-OrPSI-GERAN ::= CHOICE { + si SystemInfoListGERAN, + psi SystemInfoListGERAN +} + +E-CSFB-r9 ::= SEQUENCE { + messageContCDMA2000-1XRTT-r9 OCTET STRING OPTIONAL, -- Need ON + mobilityCDMA2000-HRPD-r9 ENUMERATED { + handover, redirection + } OPTIONAL, -- Need OP + messageContCDMA2000-HRPD-r9 OCTET STRING OPTIONAL, -- Cond concHO + redirectCarrierCDMA2000-HRPD-r9 CarrierFreqCDMA2000 OPTIONAL -- Cond concRedir +} + +-- ASN1STOP + +MobilityFromEUTRACommand field descriptions bandIndicator +Indicates how to interpret the ARFCN of the BCCH carrier. carrierFreq +contains the carrier frequency of the target GERAN cell. cs-FallbackIndicator +Value true indicates that the CS Fallback procedure to UTRAN or GERAN is triggered. messageContCDMA2000-1XRTT +This field contains a message specified in CDMA2000 1xRTT standard that either tells the UE to move to specific 1xRTT target cell(s) or indicates a failure to allocate resources for the enhanced CS fallback to CDMA2000 1xRTT. messageContCDMA2000-HRPD +This field contains a message specified in CDMA2000 HRPD standard that either tells the UE to move to specific HRPD target cell(s) or indicates a failure to allocate resources for the handover to CDMA2000 HRPD. mobilityCDMA2000-HRPD +This field indicates whether or not mobility to CDMA2000 HRPD is to be performed by the UE and it also indicates the type of mobility to CDMA2000 HRPD that is to be performed; If this field is not present the UE shall perform only the enhanced CS fallback to CDMA2000 1xRTT. nas-SecurityParamFromEUTRA +Used to deliver the key synchronisation and Key freshness for the E-UTRAN to UTRAN handovers as specified in TS 33.401. The content of the parameter is defined in TS24.301. networkControlOrder +Parameter NETWORK_CONTROL_ORDER in TS 44.060 [36]. purpose +Indicates which type of mobility procedure the UE is requested to perform. EUTRAN always applies value e-CSFB in case of enhanced CS fallback to CDMA2000 (e.g. also when that procedure results in handover to CDMA2000 1XRTT only, in handover to CDMA2000 HRPD only or in redirection to CDMA2000 HRPD only), redirectCarrierCDMA2000-HRPD +The redirectCarrierCDMA2000-HRPD indicates a CDMA2000 carrier frequency and is used to redirect the UE to a HRPD carrier frequency. SystemInfoListGERAN +If purpose = CellChangeOrder and if the field is not present, the UE has to acquire SI/PSI from the GERAN cell. t304 +Timer T304 as described in section 7.3. Value ms100 corresponds with 100 ms, ms200 corresponds with 200 ms and so on. targetRAT-Type +Indicates the target RAT type. targetRAT-MessageContainer +The field contains a message specified in another standard, as indicated by the targetRAT-Type, and carries information about the target cell identifier(s) and radio parameters relevant for the target radio access technology. NOTE 1. + +A complete message is included, as specified in the other standard. +Conditional presence Explanation concHO The field is mandatory present if the mobilityCDMA2000-HRPD is set to “handover”; otherwise the field is optional present, need ON. concRedir The field is mandatory present if the mobilityCDMA2000-HRPD is set to “redirection”; otherwise the field is not present. GERAN The field should be present if the purpose is set to “handover” and the targetRAT-Type is set to “geran”; otherwise the field is not present PSHO The field is mandatory present in case of PS handover toward GERAN; otherwise the field is optionally present, but not used by the UE UTRAGERAN The field is mandatory present if the targetRAT-Type is set to “utra” or “geran”; otherwise the field is not present +NOTE 1: The correspondence between the value of the targetRAT-Type, the standard to apply and the message contained within the targetRAT-MessageContainer is shown in the table below: +targetRAT-Type Standard to apply targetRAT-MessageContainer cdma2000-1XRTT C.S0001 or later, C.S0007 or later, C.S0008 or later cdma2000-HRPD C.S0024 or later geran GSM TS 04.18, version 8.5.0 or later, or 3GPP TS 44.018 (clause 9.1.15) + +3GPP TS 44.060, version 6.13.0 or later (clause 11.2.43) + +3GPP TS 44.060, version 7.6.0 or later (clause 11.2.46) HANDOVER COMMAND + + +PS HANDOVER COMMAND + + +DTM HANDOVER COMMAND utra 3GPP TS 25.331 (clause 10.2.16a) HANDOVER TO UTRAN COMMAND +– Paging +The Paging message is used for the notification of one or more UEs. +Signalling radio bearer: N/A +RLC-SAP: TM +Logical channel: PCCH +Direction: EUTRAN to UE +Paging message +-- ASN1START + +Paging ::= SEQUENCE { + pagingRecordList PagingRecordList OPTIONAL, -- Need ON + systemInfoModification ENUMERATED {true} OPTIONAL, -- Need ON + etws-Indication ENUMERATED {true} OPTIONAL, -- Need ON + nonCriticalExtension Paging-v890-IEs OPTIONAL +} + +Paging-v890-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, + nonCriticalExtension Paging-v920-IEs OPTIONAL +} + +Paging-v920-IEs ::= SEQUENCE { + cmas-Indication-r9 ENUMERATED {true} OPTIONAL, -- Need ON + nonCriticalExtension Paging-v1130-IEs OPTIONAL +} + +Paging-v1130-IEs ::= SEQUENCE { + eab-ParamModification-r11 ENUMERATED {true} OPTIONAL, -- Need ON + nonCriticalExtension SEQUENCE {} OPTIONAL +} + +PagingRecordList ::= SEQUENCE (SIZE (1..maxPageRec)) OF PagingRecord + +PagingRecord ::= SEQUENCE { + ue-Identity PagingUE-Identity, + cn-Domain ENUMERATED {ps, cs}, + ... +} + +PagingUE-Identity ::= CHOICE { + s-TMSI S-TMSI, + imsi IMSI, + ... +} + +IMSI ::= SEQUENCE (SIZE (6..21)) OF IMSI-Digit + +IMSI-Digit ::= INTEGER (0..9) + +-- ASN1STOP + +Paging field descriptions cmas-Indication +If present: indication of a CMAS notification. cn-Domain +Indicates the origin of paging. eab-ParamModification +If present: indication of an EAB parameters (SIB14) modification. etws-Indication +If present: indication of an ETWS primary notification and/ or ETWS secondary notification. imsi +The International Mobile Subscriber Identity, a globally unique permanent subscriber identity, see TS 23.003 [27]. The first element contains the first IMSI digit, the second element contains the second IMSI digit and so on. systemInfoModification +If present: indication of a BCCH modification other than SIB10, SIB11, SIB12 and SIB14. ue-Identity +Provides the NAS identity of the UE that is being paged. +– ProximityIndication +The ProximityIndication message is used to indicate that the UE is entering or leaving the proximity of one or more CSG member cell(s). +Signalling radio bearer: SRB1 +RLC-SAP: AM +Logical channel: DCCH +Direction: UE to EUTRAN +ProximityIndication message +-- ASN1START + +ProximityIndication-r9 ::= SEQUENCE { + criticalExtensions CHOICE { + c1 CHOICE { + proximityIndication-r9 ProximityIndication-r9-IEs, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +ProximityIndication-r9-IEs ::= SEQUENCE { + type-r9 ENUMERATED {entering, leaving}, + carrierFreq-r9 CHOICE { + eutra-r9 ARFCN-ValueEUTRA, + utra-r9 ARFCN-ValueUTRA, + ..., + eutra2-v9e0 ARFCN-ValueEUTRA-v9e0 + }, + nonCriticalExtension ProximityIndication-v930-IEs OPTIONAL +} + +ProximityIndication-v930-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, + nonCriticalExtension SEQUENCE {} OPTIONAL +} + +-- ASN1STOP + +ProximityIndication field descriptions carrierFreq +Indicates the RAT and frequency of the CSG member cell(s), for which the proximity indication is sent. For E-UTRA and UTRA frequencies, the UE shall set the ARFCN according to a band it previously considered suitable for accessing (one of) the CSG member cell(s), for which the proximity indication is sent. type +Used to indicate whether the UE is entering or leaving the proximity of CSG member cell(s). +– RNReconfiguration +The RNReconfiguration is a command to modify the RN subframe configuration and/or to convey changed system information. +Signalling radio bearer: SRB1 +RLC-SAP: AM +Logical channel: DCCH +Direction: EUTRAN to RN +RNReconfiguration message +-- ASN1START + +RNReconfiguration-r10 ::= SEQUENCE { + rrc-TransactionIdentifier RRC-TransactionIdentifier, + criticalExtensions CHOICE { + c1 CHOICE { + rnReconfiguration-r10 RNReconfiguration-r10-IEs, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +RNReconfiguration-r10-IEs ::= SEQUENCE { + rn-SystemInfo-r10 RN-SystemInfo-r10 OPTIONAL, -- Need ON + rn-SubframeConfig-r10 RN-SubframeConfig-r10 OPTIONAL, -- Need ON + lateNonCriticalExtension OCTET STRING OPTIONAL, + nonCriticalExtension SEQUENCE {} OPTIONAL +} + +RN-SystemInfo-r10 ::= SEQUENCE { + systemInformationBlockType1-r10 OCTET STRING (CONTAINING SystemInformationBlockType1) OPTIONAL, -- Need ON + systemInformationBlockType2-r10 SystemInformationBlockType2 OPTIONAL, -- Need ON + ... +} + +-- ASN1STOP + +– RNReconfigurationComplete +The RNReconfigurationComplete message is used to confirm the successful completion of an RN reconfiguration. +Signalling radio bearer: SRB1 +RLC-SAP: AM +Logical channel: DCCH +Direction: RN to E-UTRAN +RNReconfigurationComplete message +-- ASN1START + +RNReconfigurationComplete-r10 ::= SEQUENCE { + rrc-TransactionIdentifier RRC-TransactionIdentifier, + criticalExtensions CHOICE { + c1 CHOICE{ + rnReconfigurationComplete-r10 RNReconfigurationComplete-r10-IEs, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +RNReconfigurationComplete-r10-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, + nonCriticalExtension SEQUENCE {} OPTIONAL +} + +-- ASN1STOP + +– RRCConnectionReconfiguration +The RRCConnectionReconfiguration message is the command to modify an RRC connection. It may convey information for measurement configuration, mobility control, radio resource configuration (including RBs, MAC main configuration and physical channel configuration) including any associated dedicated NAS information and security configuration. +Signalling radio bearer: SRB1 +RLC-SAP: AM +Logical channel: DCCH +Direction: EUTRAN to UE +RRCConnectionReconfiguration message +-- ASN1START + +RRCConnectionReconfiguration ::= SEQUENCE { + rrc-TransactionIdentifier RRC-TransactionIdentifier, + criticalExtensions CHOICE { + c1 CHOICE{ + rrcConnectionReconfiguration-r8 RRCConnectionReconfiguration-r8-IEs, + spare7 NULL, + spare6 NULL, spare5 NULL, spare4 NULL, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +RRCConnectionReconfiguration-r8-IEs ::= SEQUENCE { + measConfig MeasConfig OPTIONAL, -- Need ON + mobilityControlInfo MobilityControlInfo OPTIONAL, -- Cond HO + dedicatedInfoNASList SEQUENCE (SIZE(1..maxDRB)) OF + DedicatedInfoNAS OPTIONAL, -- Cond nonHO + radioResourceConfigDedicated RadioResourceConfigDedicated OPTIONAL, -- Cond HO-toEUTRA + securityConfigHO SecurityConfigHO OPTIONAL, -- Cond HO + nonCriticalExtension RRCConnectionReconfiguration-v890-IEs OPTIONAL +} + +RRCConnectionReconfiguration-v890-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, + nonCriticalExtension RRCConnectionReconfiguration-v920-IEs OPTIONAL +} + +RRCConnectionReconfiguration-v920-IEs ::= SEQUENCE { + otherConfig-r9 OtherConfig-r9 OPTIONAL, -- Need ON + fullConfig-r9 ENUMERATED {true} OPTIONAL, -- Cond HO-Reestab + nonCriticalExtension RRCConnectionReconfiguration-v1020-IEs OPTIONAL +} + +RRCConnectionReconfiguration-v1020-IEs ::= SEQUENCE { + sCellToReleaseList-r10 SCellToReleaseList-r10 OPTIONAL, -- Need ON + sCellToAddModList-r10 SCellToAddModList-r10 OPTIONAL, -- Need ON + nonCriticalExtension RRCConnectionReconfiguration-v1130-IEs OPTIONAL +} + +RRCConnectionReconfiguration-v1130-IEs ::= SEQUENCE { + systemInfomationBlockType1Dedicated-r11 OCTET STRING (CONTAINING SystemInformationBlockType1) OPTIONAL, -- Need ON + nonCriticalExtension RRCConnectionReconfiguration-v1250-IEs OPTIONAL +} + +RRCConnectionReconfiguration-v1250-IEs ::= SEQUENCE { + wlan-OffloadInfo-r12 CHOICE { + release NULL, + setup SEQUENCE { + wlan-OffloadConfigDedicated-r12 WLAN-OffloadConfig-r12, + t350-r12 ENUMERATED {min5, min10, min20, min30, min60, + min120, min180, spare1} OPTIONAL -- Need OR + } + } OPTIONAL, -- Need ON + scg-Configuration-r12 SCG-Configuration-r12 OPTIONAL, -- Cond nonFullConfig + sl-SyncTxControl-r12 SL-SyncTxControl-r12 OPTIONAL, -- Need ON + sl-DiscConfig-r12 SL-DiscConfig-r12 OPTIONAL, -- Need ON + sl-CommConfig-r12 SL-CommConfig-r12 OPTIONAL, -- Need ON + nonCriticalExtension SEQUENCE {} OPTIONAL +} + +SL-SyncTxControl-r12 ::= SEQUENCE { + networkControlledSyncTx-r12 ENUMERATED {on, off} OPTIONAL -- Need OP +} + +PSCellToAddMod-r12 ::= SEQUENCE { + sCellIndex-r12 SCellIndex-r10, + cellIdentification-r12 SEQUENCE { + physCellId-r12 PhysCellId, + dl-CarrierFreq-r12 ARFCN-ValueEUTRA-r9 + } OPTIONAL, -- Cond SCellAdd + radioResourceConfigCommonPSCell-r12 RadioResourceConfigCommonPSCell-r12 OPTIONAL, -- Cond SCellAdd + radioResourceConfigDedicatedPSCell-r12 RadioResourceConfigDedicatedPSCell-r12 OPTIONAL, -- Cond SCellAdd2 + ... +} + +PowerCoordinationInfo-r12 ::= SEQUENCE { + p-MeNB-r12 INTEGER (1..16), + p-SeNB-r12 INTEGER (1..16), + powerControlMode-r12 INTEGER (1..2) +} + +SCellToAddModList-r10 ::= SEQUENCE (SIZE (1..maxSCell-r10)) OF SCellToAddMod-r10 + +SCellToAddMod-r10 ::= SEQUENCE { + sCellIndex-r10 SCellIndex-r10, + cellIdentification-r10 SEQUENCE { + physCellId-r10 PhysCellId, + dl-CarrierFreq-r10 ARFCN-ValueEUTRA + } OPTIONAL, -- Cond SCellAdd + radioResourceConfigCommonSCell-r10 RadioResourceConfigCommonSCell-r10 OPTIONAL, -- Cond SCellAdd + radioResourceConfigDedicatedSCell-r10 RadioResourceConfigDedicatedSCell-r10 OPTIONAL, -- Cond SCellAdd2 + ..., + [[ dl-CarrierFreq-v1090 ARFCN-ValueEUTRA-v9e0 OPTIONAL -- Cond EARFCN-max + ]] +} + +SCellToReleaseList-r10 ::= SEQUENCE (SIZE (1..maxSCell-r10)) OF SCellIndex-r10 + +SCG-Configuration-r12 ::= CHOICE { + release NULL, + setup SEQUENCE { + scg-ConfigPartMCG-r12 SEQUENCE { + scg-Counter-r12 INTEGER (0.. 65535) OPTIONAL, -- Need ON + powerCoordinationInfo-r12 PowerCoordinationInfo-r12 OPTIONAL, -- Need ON + ... + } OPTIONAL, -- Need ON + scg-ConfigPartSCG-r12 SCG-ConfigPartSCG-r12 OPTIONAL -- Need ON + } +} + +SCG-ConfigPartSCG-r12 ::= SEQUENCE { + radioResourceConfigDedicatedSCG-r12 RadioResourceConfigDedicatedSCG-r12 OPTIONAL, -- Need ON + sCellToReleaseListSCG-r12 SCellToReleaseList-r10 OPTIONAL, -- Need ON + pSCellToAddMod-r12 PSCellToAddMod-r12 OPTIONAL, -- Need ON + sCellToAddModListSCG-r12 SCellToAddModList-r10 OPTIONAL, -- Need ON + mobilityControlInfoSCG-r12 MobilityControlInfoSCG-r12 OPTIONAL, -- Need ON + ... +} + +SecurityConfigHO ::= SEQUENCE { + handoverType CHOICE { + intraLTE SEQUENCE { + securityAlgorithmConfig SecurityAlgorithmConfig OPTIONAL, -- Cond fullConfig + keyChangeIndicator BOOLEAN, + nextHopChainingCount NextHopChainingCount + }, + interRAT SEQUENCE { + securityAlgorithmConfig SecurityAlgorithmConfig, + nas-SecurityParamToEUTRA OCTET STRING (SIZE(6)) + } + }, + ... +} + + +-- ASN1STOP + +RRCConnectionReconfiguration field descriptions dedicatedInfoNASList +This field is used to transfer UE specific NAS layer information between the network and the UE. The RRC layer is transparent for each PDU in the list. fullConfig +Indicates the full configuration option is applicable for the RRC Connection Reconfiguration message. keyChangeIndicator +true is used only in an intra-cell handover when a KeNB key is derived from a KASME key taken into use through the latest successful NAS SMC procedure, as described in TS 33.401 [32] for KeNB re-keying. false is used in an intra-LTE handover when the new KeNB key is obtained from the current KeNB key or from the NH as described in TS 33.401 [32]. nas-securityParamToEUTRA +This field is used to transfer UE specific NAS layer information between the network and the UE. The RRC layer is transparent for this field, although it affects activation of AS- security after inter-RAT handover to E-UTRA. The content is defined in TS 24.301. networkControlledSyncTx +This field indicates whether the UE shall transmit synchronisation information (i.e. become synchronisation source). Value On indicates the UE to transmit synchronisation information while value Off indicates the UE to not transmit such information. nextHopChainingCount +Parameter NCC: See TS 33.401 [32] p-MeNB +Indicates the guaranteed power for the MeNB, as specified in 36.213 [23]. powerControlMode +Indicates the power control mode used in DC. Value 1 corresponds to DC power control mode 1 and value 2 indicates DC power control mode 2, as specified in 36.213 [23]. p-SeNB +Indicates the guaranteed power for the SeNB as specified in 36.213 [23, Table 5.1.4.2-1]. sCellIndex +In case of DC, the SCellIndex is unique within the scope of the UE i.e. an SCG cell can not use the same value as used for an MCG cell. sCellToAddModListSCG +Indicates the SCG cell to be added or modified. The field is used for SCG cells other than the PSCell (which is added/ modified by field pSCellToAddMod). sCellToReleaseListSCG +Indicates the SCG cell to be released. The field is also used to release the PSCell e.g. upon change of PSCell, upon system information change for the PSCell. scg-Counter +A counter used upon initial configuration of SCG security as well as upon refresh of S-KeNB. E-UTRAN includes the field upon SCG change when one or more SCG DRBs are configured. Otherwise E-UTRAN does not include the field. t350 +Timer T350 as described in section 7.3. Value minN corresponds to N minutes. +Conditional presence Explanation EARFCN-max The field is mandatory present if dl-CarrierFreq-r10 is included and set to maxEARFCN. Otherwise the field is not present. fullConfig This field is mandatory present for handover within E-UTRA when the fullConfig is included; otherwise it is optionally present, Need OP. HO The field is mandatory present in case of handover within E-UTRA or to E-UTRA; otherwise the field is not present. HO-Reestab This field is optionally present, need ON, in case of handover within E-UTRA or upon the first reconfiguration after RRC connection re-establishment; otherwise the field is not present. HO-toEUTRA The field is mandatory present in case of handover to E-UTRA or for reconfigurations when fullConfig is included; otherwise the field is optionally present, need ON. nonFullConfig The field is not present in case of handover within E-UTRA when the fullConfig is included or in case of handover to E-UTRA; otherwise it is optional present, need ON. nonHO The field is not present in case of handover within E-UTRA or to E-UTRA; otherwise it is optional present, need ON. SCellAdd The field is mandatory present upon SCell addition; otherwise it is not present. SCellAdd2 The field is mandatory present upon SCell addition; otherwise it is optionally present, need ON. +– RRCConnectionReconfigurationComplete +The RRCConnectionReconfigurationComplete message is used to confirm the successful completion of an RRC connection reconfiguration. +Signalling radio bearer: SRB1 +RLC-SAP: AM +Logical channel: DCCH +Direction: UE to EUTRAN +RRCConnectionReconfigurationComplete message +-- ASN1START + +RRCConnectionReconfigurationComplete ::= SEQUENCE { + rrc-TransactionIdentifier RRC-TransactionIdentifier, + criticalExtensions CHOICE { + rrcConnectionReconfigurationComplete-r8 + RRCConnectionReconfigurationComplete-r8-IEs, + criticalExtensionsFuture SEQUENCE {} + } +} + +RRCConnectionReconfigurationComplete-r8-IEs ::= SEQUENCE { + nonCriticalExtension RRCConnectionReconfigurationComplete-v8a0-IEs OPTIONAL +} + +RRCConnectionReconfigurationComplete-v8a0-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, + nonCriticalExtension RRCConnectionReconfigurationComplete-v1020-IEs OPTIONAL +} + +RRCConnectionReconfigurationComplete-v1020-IEs ::= SEQUENCE { + rlf-InfoAvailable-r10 ENUMERATED {true} OPTIONAL, + logMeasAvailable-r10 ENUMERATED {true} OPTIONAL, + nonCriticalExtension RRCConnectionReconfigurationComplete-v1130-IEs OPTIONAL +} + +RRCConnectionReconfigurationComplete-v1130-IEs ::= SEQUENCE { + connEstFailInfoAvailable-r11 ENUMERATED {true} OPTIONAL, + nonCriticalExtension RRCConnectionReconfigurationComplete-v1250-IEs OPTIONAL +} + +RRCConnectionReconfigurationComplete-v1250-IEs ::= SEQUENCE { + logMeasAvailableMBSFN-r12 ENUMERATED {true} OPTIONAL, + nonCriticalExtension SEQUENCE {} OPTIONAL +} + +-- ASN1STOP + +– RRCConnectionReestablishment +The RRCConnectionReestablishment message is used to re-establish SRB1. +Signalling radio bearer: SRB0 +RLC-SAP: TM +Logical channel: CCCH +Direction: EUTRAN to UE +RRCConnectionReestablishment message +-- ASN1START + +RRCConnectionReestablishment ::= SEQUENCE { + rrc-TransactionIdentifier RRC-TransactionIdentifier, + criticalExtensions CHOICE { + c1 CHOICE{ + rrcConnectionReestablishment-r8 RRCConnectionReestablishment-r8-IEs, + spare7 NULL, + spare6 NULL, spare5 NULL, spare4 NULL, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +RRCConnectionReestablishment-r8-IEs ::= SEQUENCE { + radioResourceConfigDedicated RadioResourceConfigDedicated, + nextHopChainingCount NextHopChainingCount, + nonCriticalExtension RRCConnectionReestablishment-v8a0-IEs OPTIONAL +} + +RRCConnectionReestablishment-v8a0-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, + nonCriticalExtension SEQUENCE {} OPTIONAL +} + +-- ASN1STOP + +– RRCConnectionReestablishmentComplete +The RRCConnectionReestablishmentComplete message is used to confirm the successful completion of an RRC connection reestablishment. +Signalling radio bearer: SRB1 +RLC-SAP: AM +Logical channel: DCCH +Direction: UE to EUTRAN +RRCConnectionReestablishmentComplete message +-- ASN1START + +RRCConnectionReestablishmentComplete ::= SEQUENCE { + rrc-TransactionIdentifier RRC-TransactionIdentifier, + criticalExtensions CHOICE { + rrcConnectionReestablishmentComplete-r8 + RRCConnectionReestablishmentComplete-r8-IEs, + criticalExtensionsFuture SEQUENCE {} + } +} + +RRCConnectionReestablishmentComplete-r8-IEs ::= SEQUENCE { + nonCriticalExtension RRCConnectionReestablishmentComplete-v920-IEs OPTIONAL +} + +RRCConnectionReestablishmentComplete-v920-IEs ::= SEQUENCE { + rlf-InfoAvailable-r9 ENUMERATED {true} OPTIONAL, + nonCriticalExtension RRCConnectionReestablishmentComplete-v8a0-IEs OPTIONAL +} + +RRCConnectionReestablishmentComplete-v8a0-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, + nonCriticalExtension RRCConnectionReestablishmentComplete-v1020-IEs OPTIONAL +} + +RRCConnectionReestablishmentComplete-v1020-IEs ::= SEQUENCE { + logMeasAvailable-r10 ENUMERATED {true} OPTIONAL, + nonCriticalExtension RRCConnectionReestablishmentComplete-v1130-IEs OPTIONAL +} + +RRCConnectionReestablishmentComplete-v1130-IEs ::= SEQUENCE { + connEstFailInfoAvailable-r11 ENUMERATED {true} OPTIONAL, + nonCriticalExtension RRCConnectionReestablishmentComplete-v1250-IEs OPTIONAL +} + +RRCConnectionReestablishmentComplete-v1250-IEs ::= SEQUENCE { + logMeasAvailableMBSFN-r12 ENUMERATED {true} OPTIONAL, + nonCriticalExtension SEQUENCE {} OPTIONAL +} + +-- ASN1STOP + +RRCConnectionReestablishmentComplete field descriptions rlf-InfoAvailable +This field is used to indicate the availability of radio link failure or handover failure related measurements +– RRCConnectionReestablishmentReject +The RRCConnectionReestablishmentReject message is used to indicate the rejection of an RRC connection reestablishment request. +Signalling radio bearer: SRB0 +RLC-SAP: TM +Logical channel: CCCH +Direction: EUTRAN to UE +RRCConnectionReestablishmentReject message +-- ASN1START + +RRCConnectionReestablishmentReject ::= SEQUENCE { + criticalExtensions CHOICE { + rrcConnectionReestablishmentReject-r8 + RRCConnectionReestablishmentReject-r8-IEs, + criticalExtensionsFuture SEQUENCE {} + } +} + +RRCConnectionReestablishmentReject-r8-IEs ::= SEQUENCE { + nonCriticalExtension RRCConnectionReestablishmentReject-v8a0-IEs OPTIONAL +} + +RRCConnectionReestablishmentReject-v8a0-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, + nonCriticalExtension SEQUENCE {} OPTIONAL +} + +-- ASN1STOP + +– RRCConnectionReestablishmentRequest +The RRCConnectionReestablishmentRequest message is used to request the reestablishment of an RRC connection. +Signalling radio bearer: SRB0 +RLC-SAP: TM +Logical channel: CCCH +Direction: UE to EUTRAN +RRCConnectionReestablishmentRequest message +-- ASN1START + +RRCConnectionReestablishmentRequest ::= SEQUENCE { + criticalExtensions CHOICE { + rrcConnectionReestablishmentRequest-r8 + RRCConnectionReestablishmentRequest-r8-IEs, + criticalExtensionsFuture SEQUENCE {} + } +} + +RRCConnectionReestablishmentRequest-r8-IEs ::= SEQUENCE { + ue-Identity ReestabUE-Identity, + reestablishmentCause ReestablishmentCause, + spare BIT STRING (SIZE (2)) +} + +ReestabUE-Identity ::= SEQUENCE { + c-RNTI C-RNTI, + physCellId PhysCellId, + shortMAC-I ShortMAC-I +} + +ReestablishmentCause ::= ENUMERATED { + reconfigurationFailure, handoverFailure, + otherFailure, spare1} + +-- ASN1STOP + +RRCConnectionReestablishmentRequest field descriptions physCellId +The Physical Cell Identity of the PCell the UE was connected to prior to the failure. reestablishmentCause +Indicates the failure cause that triggered the re-establishment procedure. ue-Identity +UE identity included to retrieve UE context and to facilitate contention resolution by lower layers. +– RRCConnectionReject +The RRCConnectionReject message is used to reject the RRC connection establishment. +Signalling radio bearer: SRB0 +RLC-SAP: TM +Logical channel: CCCH +Direction: EUTRAN to UE +RRCConnectionReject message +-- ASN1START + +RRCConnectionReject ::= SEQUENCE { + criticalExtensions CHOICE { + c1 CHOICE { + rrcConnectionReject-r8 RRCConnectionReject-r8-IEs, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +RRCConnectionReject-r8-IEs ::= SEQUENCE { + waitTime INTEGER (1..16), + nonCriticalExtension RRCConnectionReject-v8a0-IEs OPTIONAL +} + +RRCConnectionReject-v8a0-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, + nonCriticalExtension RRCConnectionReject-v1020-IEs OPTIONAL +} + +RRCConnectionReject-v1020-IEs ::= SEQUENCE { + extendedWaitTime-r10 INTEGER (1..1800) OPTIONAL, -- Need ON + nonCriticalExtension RRCConnectionReject-v1130-IEs OPTIONAL +} + +RRCConnectionReject-v1130-IEs ::= SEQUENCE { + deprioritisationReq-r11 SEQUENCE { + deprioritisationType-r11 ENUMERATED {frequency, e-utra}, + deprioritisationTimer-r11 ENUMERATED {min5, min10, min15, min30} + } OPTIONAL, -- Need ON + nonCriticalExtension SEQUENCE {} OPTIONAL +} + +-- ASN1STOP + +RRCConnectionReject field descriptions deprioritisationReq +Indicates whether the current frequency or RAT is to be de-prioritised. The UE shall be able to store a depriotisation request for up to 8 frequencies (applicable when receiving another frequency specific deprioritisation request before T325 expiry). deprioritisationTimer +Indicates the period for which either the current carrier frequency or E-UTRA is deprioritised. Value minN corresponds to N minutes. extendedWaitTime +Value in seconds for the wait time for Delay Tolerant access requests. waitTime +Wait time value in seconds. +– RRCConnectionRelease +The RRCConnectionRelease message is used to command the release of an RRC connection. +Signalling radio bearer: SRB1 +RLC-SAP: AM +Logical channel: DCCH +Direction: EUTRAN to UE +RRCConnectionRelease message +-- ASN1START + +RRCConnectionRelease ::= SEQUENCE { + rrc-TransactionIdentifier RRC-TransactionIdentifier, + criticalExtensions CHOICE { + c1 CHOICE { + rrcConnectionRelease-r8 RRCConnectionRelease-r8-IEs, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +RRCConnectionRelease-r8-IEs ::= SEQUENCE { + releaseCause ReleaseCause, + redirectedCarrierInfo RedirectedCarrierInfo OPTIONAL, -- Need ON + idleModeMobilityControlInfo IdleModeMobilityControlInfo OPTIONAL, -- Need OP + nonCriticalExtension RRCConnectionRelease-v890-IEs OPTIONAL +} + +RRCConnectionRelease-v890-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING (CONTAINING RRCConnectionRelease-v9e0-IEs) OPTIONAL, + nonCriticalExtension RRCConnectionRelease-v920-IEs OPTIONAL +} + +-- Late non critical extensions +RRCConnectionRelease-v9e0-IEs ::= SEQUENCE { + redirectedCarrierInfo-v9e0 RedirectedCarrierInfo-v9e0 OPTIONAL, -- Cond NoRedirect-r8 + idleModeMobilityControlInfo-v9e0 IdleModeMobilityControlInfo-v9e0 OPTIONAL, -- Cond IdleInfoEUTRA + nonCriticalExtension SEQUENCE {} OPTIONAL +} + +-- Regular non critical extensions +RRCConnectionRelease-v920-IEs ::= SEQUENCE { + cellInfoList-r9 CHOICE { + geran-r9 CellInfoListGERAN-r9, + utra-FDD-r9 CellInfoListUTRA-FDD-r9, + utra-TDD-r9 CellInfoListUTRA-TDD-r9, + ..., + utra-TDD-r10 CellInfoListUTRA-TDD-r10 + } OPTIONAL, -- Cond Redirection + nonCriticalExtension RRCConnectionRelease-v1020-IEs OPTIONAL +} + +RRCConnectionRelease-v1020-IEs ::= SEQUENCE { + extendedWaitTime-r10 INTEGER (1..1800) OPTIONAL, -- Need ON + nonCriticalExtension SEQUENCE {} OPTIONAL +} + +ReleaseCause ::= ENUMERATED {loadBalancingTAUrequired, + other, cs-FallbackHighPriority-v1020, spare1} + +RedirectedCarrierInfo ::= CHOICE { + eutra ARFCN-ValueEUTRA, + geran CarrierFreqsGERAN, + utra-FDD ARFCN-ValueUTRA, + utra-TDD ARFCN-ValueUTRA, + cdma2000-HRPD CarrierFreqCDMA2000, + cdma2000-1xRTT CarrierFreqCDMA2000, + ..., + utra-TDD-r10 CarrierFreqListUTRA-TDD-r10 +} + +RedirectedCarrierInfo-v9e0 ::= SEQUENCE { + eutra-v9e0 ARFCN-ValueEUTRA-v9e0 +} + +CarrierFreqListUTRA-TDD-r10 ::= SEQUENCE (SIZE (1..maxFreqUTRA-TDD-r10)) OF ARFCN-ValueUTRA + +IdleModeMobilityControlInfo ::= SEQUENCE { + freqPriorityListEUTRA FreqPriorityListEUTRA OPTIONAL, -- Need ON + freqPriorityListGERAN FreqsPriorityListGERAN OPTIONAL, -- Need ON + freqPriorityListUTRA-FDD FreqPriorityListUTRA-FDD OPTIONAL, -- Need ON + freqPriorityListUTRA-TDD FreqPriorityListUTRA-TDD OPTIONAL, -- Need ON + bandClassPriorityListHRPD BandClassPriorityListHRPD OPTIONAL, -- Need ON + bandClassPriorityList1XRTT BandClassPriorityList1XRTT OPTIONAL, -- Need ON + t320 ENUMERATED { + min5, min10, min20, min30, min60, min120, min180, + spare1} OPTIONAL, -- Need OR + ..., + [[ freqPriorityListExtEUTRA-r12 FreqPriorityListExtEUTRA-r12 OPTIONAL -- Need ON + ]] +} + +IdleModeMobilityControlInfo-v9e0 ::= SEQUENCE { + freqPriorityListEUTRA-v9e0 SEQUENCE (SIZE (1..maxFreq)) OF FreqPriorityEUTRA-v9e0 +} + +FreqPriorityListEUTRA ::= SEQUENCE (SIZE (1..maxFreq)) OF FreqPriorityEUTRA + +FreqPriorityListExtEUTRA-r12 ::= SEQUENCE (SIZE (1..maxFreq)) OF FreqPriorityEUTRA-r12 + +FreqPriorityEUTRA ::= SEQUENCE { + carrierFreq ARFCN-ValueEUTRA, + cellReselectionPriority CellReselectionPriority +} + +FreqPriorityEUTRA-v9e0 ::= SEQUENCE { + carrierFreq-v9e0 ARFCN-ValueEUTRA-v9e0 OPTIONAL -- Cond EARFCN-max +} + +FreqPriorityEUTRA-r12 ::= SEQUENCE { + carrierFreq-r12 ARFCN-ValueEUTRA-r9, + cellReselectionPriority-r12 CellReselectionPriority +} + +FreqsPriorityListGERAN ::= SEQUENCE (SIZE (1..maxGNFG)) OF FreqsPriorityGERAN + +FreqsPriorityGERAN ::= SEQUENCE { + carrierFreqs CarrierFreqsGERAN, + cellReselectionPriority CellReselectionPriority +} + +FreqPriorityListUTRA-FDD ::= SEQUENCE (SIZE (1..maxUTRA-FDD-Carrier)) OF FreqPriorityUTRA-FDD + +FreqPriorityUTRA-FDD ::= SEQUENCE { + carrierFreq ARFCN-ValueUTRA, + cellReselectionPriority CellReselectionPriority +} + +FreqPriorityListUTRA-TDD ::= SEQUENCE (SIZE (1..maxUTRA-TDD-Carrier)) OF FreqPriorityUTRA-TDD + +FreqPriorityUTRA-TDD ::= SEQUENCE { + carrierFreq ARFCN-ValueUTRA, + cellReselectionPriority CellReselectionPriority +} + +BandClassPriorityListHRPD ::= SEQUENCE (SIZE (1..maxCDMA-BandClass)) OF BandClassPriorityHRPD + +BandClassPriorityHRPD ::= SEQUENCE { + bandClass BandclassCDMA2000, + cellReselectionPriority CellReselectionPriority +} + +BandClassPriorityList1XRTT ::= SEQUENCE (SIZE (1..maxCDMA-BandClass)) OF BandClassPriority1XRTT + +BandClassPriority1XRTT ::= SEQUENCE { + bandClass BandclassCDMA2000, + cellReselectionPriority CellReselectionPriority +} + +CellInfoListGERAN-r9 ::= SEQUENCE (SIZE (1..maxCellInfoGERAN-r9)) OF CellInfoGERAN-r9 + +CellInfoGERAN-r9 ::= SEQUENCE { + physCellId-r9 PhysCellIdGERAN, + carrierFreq-r9 CarrierFreqGERAN, + systemInformation-r9 SystemInfoListGERAN +} + +CellInfoListUTRA-FDD-r9 ::= SEQUENCE (SIZE (1..maxCellInfoUTRA-r9)) OF CellInfoUTRA-FDD-r9 + +CellInfoUTRA-FDD-r9 ::= SEQUENCE { + physCellId-r9 PhysCellIdUTRA-FDD, + utra-BCCH-Container-r9 OCTET STRING +} + +CellInfoListUTRA-TDD-r9 ::= SEQUENCE (SIZE (1..maxCellInfoUTRA-r9)) OF CellInfoUTRA-TDD-r9 + +CellInfoUTRA-TDD-r9 ::= SEQUENCE { + physCellId-r9 PhysCellIdUTRA-TDD, + utra-BCCH-Container-r9 OCTET STRING +} + +CellInfoListUTRA-TDD-r10 ::= SEQUENCE (SIZE (1..maxCellInfoUTRA-r9)) OF CellInfoUTRA-TDD-r10 + +CellInfoUTRA-TDD-r10 ::= SEQUENCE { + physCellId-r10 PhysCellIdUTRA-TDD, + carrierFreq-r10 ARFCN-ValueUTRA, + utra-BCCH-Container-r10 OCTET STRING +} + +-- ASN1STOP + +RRCConnectionRelease field descriptions carrierFreq or bandClass +The carrier frequency (UTRA and E-UTRA) and band class (HRPD and 1xRTT) for which the associated cellReselectionPriority is applied. carrierFreqs +The list of GERAN carrier frequencies organised into one group of GERAN carrier frequencies. cellInfoList +Used to provide system information of one or more cells on the redirected inter-RAT carrier frequency. The system information can be used if, upon redirection, the UE selects an inter-RAT cell indicated by the physCellId and carrierFreq (GERAN and UTRA TDD) or by the physCellId (other RATs). The choice shall match the redirectedCarrierInfo. In particular, E-UTRAN only applies value utra-TDD-r10 in case redirectedCarrierInfo is set to utra-TDD-r10. extendedWaitTime +Value in seconds for the wait time for Delay Tolerant access requests. freqPriorityListX +Provides a cell reselection priority for each frequency, by means of separate lists for each RAT (including E-UTRA). The UE shall be able to store at least 3 occurrences of FreqsPriorityGERAN. If E-UTRAN includes freqPriorityListEUTRA-v9e0 it includes the same number of entries, and listed in the same order, as in freqPriorityListEUTRA (i.e. without suffix). Field freqPriorityListExt includes additional neighbouring inter-frequencies, i.e. extending the size of the inter-frequency carrier list using the general principles specified in 5.1.2. EUTRAN only includes freqPriorityListExtEUTRA if freqPriorityListEUTRA (i.e without suffix) includes maxFreq entries. idleModeMobilityControlInfo +Provides dedicated cell reselection priorities. Used for cell reselection as specified in TS 36.304 [4]. For E-UTRA and UTRA frequencies, a UE that supports multi-band cells for the concerned RAT considers the dedicated priorities to be common for all overlapping bands (i.e. regardless of the ARFCN that is used). redirectedCarrierInfo +The redirectedCarrierInfo indicates a carrier frequency (downlink for FDD) and is used to redirect the UE to an EUTRA or an inter-RAT carrier frequency, by means of the cell selection upon leaving RRC_CONNECTED as specified in TS 36.304 [4]. releaseCause +The releaseCause is used to indicate the reason for releasing the RRC Connection. The cause value cs-FallbackHighPriority is only applicable when redirectedCarrierInfo is present with the value set to utra-FDD, utra-TDD or utra-TDD-r10. +E-UTRAN should not set the releaseCause to loadBalancingTAURequired or to cs-FallbackHighPriority if the extendedWaitTime is present. systemInformation +Container for system information of the GERAN cell i.e. one or more System Information (SI) messages as defined in TS 44.018 [45, table 9.1.1]. t320 +Timer T320 as described in section 7.3. Value minN corresponds to N minutes. utra-BCCH-Container +Contains System Information Container message as defined in TS 25.331 [19]. +Conditional presence Explanation EARFCN-max The field is mandatory present if the corresponding carrierFreq (i.e. without suffix) is set to maxEARFCN. Otherwise the field is not present. IdleInfoEUTRA The field is optionally present, need OP, if the IdleModeMobilityControlInfo (i.e. without suffix) is included and includes freqPriorityListEUTRA; otherwise the field is not present. NoRedirect-r8 The field is optionally present, need OP, if the redirectedCarrierInfo (i.e. without suffix) is not included; otherwise the field is not present. Redirection The field is optionally present, need ON, if the redirectedCarrierInfo is included and set to geran, utra-FDD, utra-TDD or utra-TDD-r10; otherwise the field is not present. +– RRCConnectionRequest +The RRCConnectionRequest message is used to request the establishment of an RRC connection. +Signalling radio bearer: SRB0 +RLC-SAP: TM +Logical channel: CCCH +Direction: UE to EUTRAN +RRCConnectionRequest message +-- ASN1START + +RRCConnectionRequest ::= SEQUENCE { + criticalExtensions CHOICE { + rrcConnectionRequest-r8 RRCConnectionRequest-r8-IEs, + criticalExtensionsFuture SEQUENCE {} + } +} + +RRCConnectionRequest-r8-IEs ::= SEQUENCE { + ue-Identity InitialUE-Identity, + establishmentCause EstablishmentCause, + spare BIT STRING (SIZE (1)) +} + +InitialUE-Identity ::= CHOICE { + s-TMSI S-TMSI, + randomValue BIT STRING (SIZE (40)) +} + +EstablishmentCause ::= ENUMERATED { + emergency, highPriorityAccess, mt-Access, mo-Signalling, + mo-Data, delayTolerantAccess-v1020, spare2, spare1} + +-- ASN1STOP + +RRCConnectionRequest field descriptions establishmentCause +Provides the establishment cause for the RRC connection request as provided by the upper layers. W.r.t. the cause value names: highPriorityAccess concerns AC11..AC15, ‘mt’ stands for ‘Mobile Terminating’ and ‘mo’ for ‘Mobile Originating. randomValue +Integer value in the range 0 to 240 ? 1. ue-Identity +UE identity included to facilitate contention resolution by lower layers. +– RRCConnectionSetup +The RRCConnectionSetup message is used to establish SRB1. +Signalling radio bearer: SRB0 +RLC-SAP: TM +Logical channel: CCCH +Direction: EUTRAN to UE +RRCConnectionSetup message +-- ASN1START + +RRCConnectionSetup ::= SEQUENCE { + rrc-TransactionIdentifier RRC-TransactionIdentifier, + criticalExtensions CHOICE { + c1 CHOICE { + rrcConnectionSetup-r8 RRCConnectionSetup-r8-IEs, + spare7 NULL, + spare6 NULL, spare5 NULL, spare4 NULL, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +RRCConnectionSetup-r8-IEs ::= SEQUENCE { + radioResourceConfigDedicated RadioResourceConfigDedicated, + nonCriticalExtension RRCConnectionSetup-v8a0-IEs OPTIONAL +} + +RRCConnectionSetup-v8a0-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, + nonCriticalExtension SEQUENCE {} OPTIONAL +} + +-- ASN1STOP + +– RRCConnectionSetupComplete +The RRCConnectionSetupComplete message is used to confirm the successful completion of an RRC connection establishment. +Signalling radio bearer: SRB1 +RLC-SAP: AM +Logical channel: DCCH +Direction: UE to EUTRAN +RRCConnectionSetupComplete message +-- ASN1START + +RRCConnectionSetupComplete ::= SEQUENCE { + rrc-TransactionIdentifier RRC-TransactionIdentifier, + criticalExtensions CHOICE { + c1 CHOICE{ + rrcConnectionSetupComplete-r8 RRCConnectionSetupComplete-r8-IEs, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +RRCConnectionSetupComplete-r8-IEs ::= SEQUENCE { + selectedPLMN-Identity INTEGER (1..maxPLMN-r11), + registeredMME RegisteredMME OPTIONAL, + dedicatedInfoNAS DedicatedInfoNAS, + nonCriticalExtension RRCConnectionSetupComplete-v8a0-IEs OPTIONAL +} + +RRCConnectionSetupComplete-v8a0-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, + nonCriticalExtension RRCConnectionSetupComplete-v1020-IEs OPTIONAL +} + +RRCConnectionSetupComplete-v1020-IEs ::= SEQUENCE { + gummei-Type-r10 ENUMERATED {native, mapped} OPTIONAL, + rlf-InfoAvailable-r10 ENUMERATED {true} OPTIONAL, + logMeasAvailable-r10 ENUMERATED {true} OPTIONAL, + rn-SubframeConfigReq-r10 ENUMERATED {required, notRequired} OPTIONAL, + nonCriticalExtension RRCConnectionSetupComplete-v1130-IEs OPTIONAL +} + +RRCConnectionSetupComplete-v1130-IEs ::= SEQUENCE { + connEstFailInfoAvailable-r11 ENUMERATED {true} OPTIONAL, + nonCriticalExtension RRCConnectionSetupComplete-v1250-IEs OPTIONAL +} + +RRCConnectionSetupComplete-v1250-IEs ::= SEQUENCE { + mobilityState-r12 ENUMERATED {normal, medium, high, spare} OPTIONAL, + mobilityHistoryAvail-r12 ENUMERATED {true} OPTIONAL, + logMeasAvailableMBSFN-r12 ENUMERATED {true} OPTIONAL, + nonCriticalExtension SEQUENCE {} OPTIONAL +} + +RegisteredMME ::= SEQUENCE { + plmn-Identity PLMN-Identity OPTIONAL, + mmegi BIT STRING (SIZE (16)), + mmec MMEC +} + +-- ASN1STOP + +RRCConnectionSetupComplete field descriptions gummei-Type +This field is used to indicate whether the GUMMEI included is native (assigned by EPC) or mapped (from 2G/3G identifiers). mmegi +Provides the Group Identity of the registered MME within the PLMN, as provided by upper layers, see TS 23.003 [27]. mobilityState +This field indicates the UE mobility state (as defined in TS 36.304 5.2.4.3 [4]) just prior to UE going into RRC_CONNECTED state. The values of medium and high respectively correspond to the UE being in Medium-mobility and High-mobility states. Otherwise the UE is in normal state. registeredMME +This field is used to transfer the GUMMEI of the MME where the UE is registered, as provided by upper layers. rn-SubframeConfigReq +If present, this field indicates that the connection establishment is for an RN and whether a subframe configuration is requested or not. selectedPLMN-Identity +Index of the PLMN selected by the UE from the plmn-IdentityList included in SIB1. 1 if the 1st PLMN is selected from the plmn-IdentityList included in SIB1, 2 if the 2nd PLMN is selected from the plmn-IdentityList included in SIB1 and so on. +– SCGFailureInformation +The SCGFailureInformation message is used to provide information regarding failures detected by the UE. +Signalling radio bearer: SRB1 +RLC-SAP: AM +Logical channel: DCCH +Direction: UE to EUTRAN +SCGFailureInformation message +-- ASN1START + +SCGFailureInformation-r12 ::= SEQUENCE { + criticalExtensions CHOICE { + c1 CHOICE { + scgFailureInformation-r12 SCGFailureInformation-r12-IEs, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +SCGFailureInformation-r12-IEs ::= SEQUENCE { + failureReportSCG-r12 FailureReportSCG-r12 OPTIONAL, + nonCriticalExtension SEQUENCE {} OPTIONAL +} + +FailureReportSCG-r12 ::= SEQUENCE { + failureType-r12 ENUMERATED {t313-Expiry, randomAccessProblem, + rlc-MaxNumRetx, scg-ChangeFailure }, + measResultServFreqList-r12 MeasResultServFreqList-r10 OPTIONAL, + measResultNeighCells-r12 MeasResultList2EUTRA-r9 OPTIONAL, + ... +} + +-- ASN1STOP + +– SecurityModeCommand +The SecurityModeCommand message is used to command the activation of AS security. +Signalling radio bearer: SRB1 +RLC-SAP: AM +Logical channel: DCCH +Direction: EUTRAN to UE +SecurityModeCommand message +-- ASN1START + +SecurityModeCommand ::= SEQUENCE { + rrc-TransactionIdentifier RRC-TransactionIdentifier, + criticalExtensions CHOICE { + c1 CHOICE{ + securityModeCommand-r8 SecurityModeCommand-r8-IEs, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +SecurityModeCommand-r8-IEs ::= SEQUENCE { + securityConfigSMC SecurityConfigSMC, + nonCriticalExtension SecurityModeCommand-v8a0-IEs OPTIONAL +} + +SecurityModeCommand-v8a0-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, + nonCriticalExtension SEQUENCE {} OPTIONAL +} + +SecurityConfigSMC ::= SEQUENCE { + securityAlgorithmConfig SecurityAlgorithmConfig, + ... +} + +-- ASN1STOP + +– SecurityModeComplete +The SecurityModeComplete message is used to confirm the successful completion of a security mode command. +Signalling radio bearer: SRB1 +RLC-SAP: AM +Logical channel: DCCH +Direction: UE to EUTRAN +SecurityModeComplete message +-- ASN1START + +SecurityModeComplete ::= SEQUENCE { + rrc-TransactionIdentifier RRC-TransactionIdentifier, + criticalExtensions CHOICE { + securityModeComplete-r8 SecurityModeComplete-r8-IEs, + criticalExtensionsFuture SEQUENCE {} + } +} + +SecurityModeComplete-r8-IEs ::= SEQUENCE { + nonCriticalExtension SecurityModeComplete-v8a0-IEs OPTIONAL +} + +SecurityModeComplete-v8a0-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, + nonCriticalExtension SEQUENCE {} OPTIONAL +} + +-- ASN1STOP + +– SecurityModeFailure +The SecurityModeFailure message is used to indicate an unsuccessful completion of a security mode command. +Signalling radio bearer: SRB1 +RLC-SAP: AM +Logical channel: DCCH +Direction: UE to EUTRAN +SecurityModeFailure message +-- ASN1START + +SecurityModeFailure ::= SEQUENCE { + rrc-TransactionIdentifier RRC-TransactionIdentifier, + criticalExtensions CHOICE { + securityModeFailure-r8 SecurityModeFailure-r8-IEs, + criticalExtensionsFuture SEQUENCE {} + } +} + +SecurityModeFailure-r8-IEs ::= SEQUENCE { + nonCriticalExtension SecurityModeFailure-v8a0-IEs OPTIONAL +} + +SecurityModeFailure-v8a0-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, + nonCriticalExtension SEQUENCE {} OPTIONAL +} + +-- ASN1STOP + +– SidelinkUEInformation +The SidelinkUEInformation message is used for the indication of sidelink information to the eNB. +Signalling radio bearer: SRB1 +RLC-SAP: AM +Logical channel: DCCH +Direction: UE to EUTRAN +SidelinkUEInformation message +-- ASN1START + +SidelinkUEInformation-r12 ::= SEQUENCE { + criticalExtensions CHOICE { + c1 CHOICE { + sidelinkUEInformation-r12 SidelinkUEInformation-r12-IEs, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +SidelinkUEInformation-r12-IEs ::= SEQUENCE { + commRxInterestedFreq-r12 ARFCN-ValueEUTRA-r9 OPTIONAL, + commTxResourceReq-r12 SL-CommTxResourceReq-r12 OPTIONAL, + discRxInterest-r12 ENUMERATED {true} OPTIONAL, + discTxResourceReq-r12 INTEGER (1..63) OPTIONAL, + lateNonCriticalExtension OCTET STRING OPTIONAL, + nonCriticalExtension SEQUENCE {} OPTIONAL +} + +SL-CommTxResourceReq-r12 ::= SEQUENCE { + carrierFreq-r12 ARFCN-ValueEUTRA-r9 OPTIONAL, + destinationInfoList-r12 SL-DestinationInfoList-r12 +} + +SL-DestinationInfoList-r12 ::= SEQUENCE (SIZE (1..maxSL-Dest-r12)) OF SL-DestinationIdentity-r12 + +SL-DestinationIdentity-r12 ::= BIT STRING (SIZE (24)) + +-- ASN1STOP + +SidelinkUEInformation field descriptions commRxInterestedFreq +Indicates the frequency on which the UE is interested to receive sidelink direct communication. commTxResourceReq +Indicates the frequency on which the UE is interested to transmit sidelink direct communication as well as the sidelink direct communication transmission destination(s) for which the UE requests E-UTRAN to assign dedicated resources. destinationInfoList +Indicates the destination which is identified by the ProSe Layer-2 Group ID as specified in TS 23.303 [68]. discRxInterest +Indicates that the UE is interested to monitor sidelink direct discovery announcements. discTxResourceReq +Indicates the number of resources the UE requires every discovery period for transmitting sidelink direct discovery announcement. It concerns the number of separate discovery message(s) the UE wants to transmit every discovery period. +– SystemInformation +The SystemInformation message is used to convey one or more System Information Blocks. All the SIBs included are transmitted with the same periodicity. +Signalling radio bearer: N/A +RLC-SAP: TM +Logical channel: BCCH +Direction: EUTRAN to UE +SystemInformation message +-- ASN1START + +SystemInformation ::= SEQUENCE { + criticalExtensions CHOICE { + systemInformation-r8 SystemInformation-r8-IEs, + criticalExtensionsFuture SEQUENCE {} + } +} +SystemInformation-r8-IEs ::= SEQUENCE { + sib-TypeAndInfo SEQUENCE (SIZE (1..maxSIB)) OF CHOICE { + sib2 SystemInformationBlockType2, + sib3 SystemInformationBlockType3, + sib4 SystemInformationBlockType4, + sib5 SystemInformationBlockType5, + sib6 SystemInformationBlockType6, + sib7 SystemInformationBlockType7, + sib8 SystemInformationBlockType8, + sib9 SystemInformationBlockType9, + sib10 SystemInformationBlockType10, + sib11 SystemInformationBlockType11, + ..., + sib12-v920 SystemInformationBlockType12-r9, + sib13-v920 SystemInformationBlockType13-r9, + sib14-v1130 SystemInformationBlockType14-r11, + sib15-v1130 SystemInformationBlockType15-r11, + sib16-v1130 SystemInformationBlockType16-r11, + sib17-v1250 SystemInformationBlockType17-r12, + sib18-v1250 SystemInformationBlockType18-r12, + sib19-v1250 SystemInformationBlockType19-r12 + }, + nonCriticalExtension SystemInformation-v8a0-IEs OPTIONAL +} + +SystemInformation-v8a0-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, + nonCriticalExtension SEQUENCE {} OPTIONAL +} + +-- ASN1STOP + +– SystemInformationBlockType1 +SystemInformationBlockType1 contains information relevant when evaluating if a UE is allowed to access a cell and defines the scheduling of other system information. +Signalling radio bearer: N/A +RLC-SAP: TM +Logical channel: BCCH +Direction: EUTRAN to UE +SystemInformationBlockType1 message +-- ASN1START + +SystemInformationBlockType1 ::= SEQUENCE { + cellAccessRelatedInfo SEQUENCE { + plmn-IdentityList PLMN-IdentityList, + trackingAreaCode TrackingAreaCode, + cellIdentity CellIdentity, + cellBarred ENUMERATED {barred, notBarred}, + intraFreqReselection ENUMERATED {allowed, notAllowed}, + csg-Indication BOOLEAN, + csg-Identity CSG-Identity OPTIONAL -- Need OR + }, + cellSelectionInfo SEQUENCE { + q-RxLevMin Q-RxLevMin, + q-RxLevMinOffset INTEGER (1..8) OPTIONAL -- Need OP + }, + p-Max P-Max OPTIONAL, -- Need OP + freqBandIndicator FreqBandIndicator, + schedulingInfoList SchedulingInfoList, + tdd-Config TDD-Config OPTIONAL, -- Cond TDD + si-WindowLength ENUMERATED { + ms1, ms2, ms5, ms10, ms15, ms20, + ms40}, + systemInfoValueTag INTEGER (0..31), + nonCriticalExtension SystemInformationBlockType1-v890-IEs OPTIONAL +} + +SystemInformationBlockType1-v890-IEs::= SEQUENCE { + lateNonCriticalExtension OCTET STRING (CONTAINING SystemInformationBlockType1-v8h0-IEs) OPTIONAL, + nonCriticalExtension SystemInformationBlockType1-v920-IEs OPTIONAL +} + +-- Late non critical extensions +SystemInformationBlockType1-v8h0-IEs ::= SEQUENCE { + multiBandInfoList MultiBandInfoList OPTIONAL, -- Need OR + nonCriticalExtension SystemInformationBlockType1-v9e0-IEs OPTIONAL +} + +SystemInformationBlockType1-v9e0-IEs ::= SEQUENCE { + freqBandIndicator-v9e0 FreqBandIndicator-v9e0 OPTIONAL, -- Cond FBI-max + multiBandInfoList-v9e0 MultiBandInfoList-v9e0 OPTIONAL, -- Cond mFBI-max + nonCriticalExtension SEQUENCE {} OPTIONAL +} + +-- Regular non critical extensions +SystemInformationBlockType1-v920-IEs ::= SEQUENCE { + ims-EmergencySupport-r9 ENUMERATED {true} OPTIONAL, -- Need OR + cellSelectionInfo-v920 CellSelectionInfo-v920 OPTIONAL, -- Cond RSRQ + nonCriticalExtension SystemInformationBlockType1-v1130-IEs OPTIONAL +} + +SystemInformationBlockType1-v1130-IEs ::= SEQUENCE { + tdd-Config-v1130 TDD-Config-v1130 OPTIONAL, -- Cond TDD-OR + cellSelectionInfo-v1130 CellSelectionInfo-v1130 OPTIONAL, -- Cond WB-RSRQ + nonCriticalExtension SystemInformationBlockType1-v1250-IEs OPTIONAL +} + +SystemInformationBlockType1-v1250-IEs ::= SEQUENCE { + cellAccessRelatedInfo-v1250 SEQUENCE { + category0Allowed-r12 ENUMERATED {true} OPTIONAL -- Need OP + }, + cellSelectionInfo-v1250 CellSelectionInfo-v1250 OPTIONAL, -- Cond RSRQ2 + freqBandIndicatorPriority-r12 ENUMERATED {true} OPTIONAL, -- Cond mFBI + nonCriticalExtension SEQUENCE {} OPTIONAL +} + +PLMN-IdentityList ::= SEQUENCE (SIZE (1..maxPLMN-r11)) OF PLMN-IdentityInfo + +PLMN-IdentityInfo ::= SEQUENCE { + plmn-Identity PLMN-Identity, + cellReservedForOperatorUse ENUMERATED {reserved, notReserved} +} + +SchedulingInfoList ::= SEQUENCE (SIZE (1..maxSI-Message)) OF SchedulingInfo + +SchedulingInfo ::= SEQUENCE { + si-Periodicity ENUMERATED { + rf8, rf16, rf32, rf64, rf128, rf256, rf512}, + sib-MappingInfo SIB-MappingInfo +} + +SIB-MappingInfo ::= SEQUENCE (SIZE (0..maxSIB-1)) OF SIB-Type + +SIB-Type ::= ENUMERATED { + sibType3, sibType4, sibType5, sibType6, + sibType7, sibType8, sibType9, sibType10, + sibType11, sibType12-v920, sibType13-v920, + sibType14-v1130, sibType15-v1130, + sibType16-v1130, sibType17-v1250, sibType18-v1250, + ..., sibType19-v1250} + +CellSelectionInfo-v920 ::= SEQUENCE { + q-QualMin-r9 Q-QualMin-r9, + q-QualMinOffset-r9 INTEGER (1..8) OPTIONAL -- Need OP +} + +CellSelectionInfo-v1130 ::= SEQUENCE { + q-QualMinWB-r11 Q-QualMin-r9 +} + +CellSelectionInfo-v1250 ::= SEQUENCE { + q-QualMinRSRQ-OnAllSymbols-r12 Q-QualMin-r9 +} + +-- ASN1STOP + +SystemInformationBlockType1 field descriptions category0Allowed +The presence of this field indicates category 0 UEs are allowed to access the cell. cellBarred +barred means the cell is barred, as defined in TS 36.304 [4]. cellReservedForOperatorUse +As defined in TS 36.304 [4]. csg-Identity +Identity of the Closed Subscriber Group the cell belongs to. csg-Indication +If set to TRUE the UE is only allowed to access the cell if it is a CSG member cell, if selected during manual CSG selection or to obtain limited service, see TS 36.304 [4]. freqBandIndicatorPriority +If the field is present and supported by the UE, the UE shall prioritize the frequency bands in the multiBandInfoList IE in decreasing priority order. Only if the UE does not support any of the frequency band in multiBandInfoList, the UE shall use the value in freqBandIndicator IE. Otherwise, the UE applies frequency band according to the rules defined in multiBandInfoList. ims-EmergencySupport +Indicates whether the cell supports IMS emergency bearer services for UEs in limited service mode. If absent, IMS emergency call is not supported by the network in the cell for UEs in limited service mode. intraFreqReselection +Used to control cell reselection to intra-frequency cells when the highest ranked cell is barred, or treated as barred by the UE, as specified in TS 36.304 [4]. multiBandInfoList +A list of additional frequency band indicators, as defined in TS 36.101 [42, table 5.5-1] that the cell belongs to. If the UE supports the frequency band in the freqBandIndicator IE it shall apply that frequency band. Otherwise, the UE shall apply the first listed band which it supports in the multiBandInfoList IE. If E-UTRAN includes multiBandInfoList-v9e0 it includes the same number of entries, and listed in the same order, as in multiBandInfoList (i.e. without suffix). See Annex D for more descriptions. The UE shall ignore the rule defined in this field description if freqBandIndicatorPriority is present and supported by the UE. plmn-IdentityList +List of PLMN identities. The first listed PLMN-Identity is the primary PLMN. p-Max +Value applicable for the cell. If absent the UE applies the maximum power according to the UE capability. q-QualMin +Parameter “Qqualmin” in TS 36.304 [4]. If cellSelectionInfo-v920 is not present, the UE applies the (default) value of negative infinity for Qqualmin. NOTE 1. q-QualMinRSRQ-OnAllSymbols +If this field is present and supported by the UE, the UE shall, when performing RSRQ measurements, perform RSRQ measurement on all OFDM symbols in accordance with TS 36.214 [48]. NOTE 1. q-QualMinOffset +Parameter “Qqualminoffset” in TS 36.304 [4]. Actual value Qqualminoffset = IE value [dB]. If cellSelectionInfo-v920 is not present or the field is not present, the UE applies the (default) value of 0 dB for Qqualminoffset. Affects the minimum required quality level in the cell. q-QualMinWB +If this field is present and supported by the UE, the UE shall, when performing RSRQ measurements, use a wider bandwidth in accordance with TS 36.133 [16]. NOTE 1. q-RxLevMinOffset +Parameter Qrxlevminoffset in TS 36.304 [4]. Actual value Qrxlevminoffset = IE value * 2 [dB]. If absent, the UE applies the (default) value of 0 dB for Qrxlevminoffset. Affects the minimum required Rx level in the cell. sib-MappingInfo +List of the SIBs mapped to this SystemInformation message.There is no mapping information of SIB2; it is always present in the first SystemInformation message listed in the schedulingInfoList list. si-Periodicity +Periodicity of the SI-message in radio frames, such that rf8 denotes 8 radio frames, rf16 denotes 16 radio frames, and so on. si-WindowLength +Common SI scheduling window for all SIs. Unit in milliseconds, where ms1 denotes 1 millisecond, ms2 denotes 2 milliseconds and so on. systemInfoValueTag +Common for all SIBs other than MIB, SIB1, SIB10, SIB11, SIB12 and SIB14. Change of MIB and SIB1 is detected by acquisition of the corresponding message. trackingAreaCode +A trackingAreaCode that is common for all the PLMNs listed. +NOTE 1: The value the UE applies for parameter “Qqualmin” in TS 36.304 [4] depends on the q-QualMin fields signalled by E-UTRAN and supported by the UE. In case multiple candidate options are available, the UE shall select the highest priority candidate option according to the priority order indicated by the following table (top row is highest priority). +q-QualMinRSRQ-OnAllSymbols q-QualMinWB Value of parameter “Qqualmin” in TS 36.304 [4] Included Included q-QualMinRSRQ-OnAllSymbols – (q-QualMin – q-QualMinWB) Included Not included q-QualMinRSRQ-OnAllSymbols Not included Included q-QualMinWB Not included Not included q-QualMin +Conditional presence Explanation FBI-max The field is mandatory present if freqBandIndicator (i.e. without suffix) is set to maxFBI. Otherwise the field is not present. mFBI The field is optional present, Need OR, if multiBandInfoList is present. Otherwise the field is not present. mFBI-max The field is mandatory present if one or more entries in multiBandInfoList (i.e. without suffix, introduced in -v8h0) is set to maxFBI. Otherwise the field is not present. RSRQ The field is mandatory present if SIB3 is being broadcast and threshServingLowQ is present in SIB3; otherwise optionally present, Need OP. RSRQ2 The field is mandatory present if q-QualMinRSRQ-OnAllSymbols is present in SIB3; otherwise it is not present and the UE shall delete any existing value for this field. TDD This field is mandatory present for TDD; it is not present for FDD and the UE shall delete any existing value for this field. TDD-OR The field is optional present for TDD, need OR; it is not present for FDD. WB-RSRQ The field is optionally present, need OP if the measurement bandwidth indicated by allowedMeasBandwidth in systemInformationBlockType3 is 50 resource blocks or larger; otherwise it is not present. +– UEAssistanceInformation +The UEAssistanceInformation message is used for the indication of UE assistance information to the eNB. +Signalling radio bearer: SRB1 +RLC-SAP: AM +Logical channel: DCCH +Direction: UE to EUTRAN +UEAssistanceInformation message +-- ASN1START + +UEAssistanceInformation-r11 ::= SEQUENCE { + criticalExtensions CHOICE { + c1 CHOICE { + ueAssistanceInformation-r11 UEAssistanceInformation-r11-IEs, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +UEAssistanceInformation-r11-IEs ::= SEQUENCE { + powerPrefIndication-r11 ENUMERATED {normal, lowPowerConsumption} OPTIONAL, + lateNonCriticalExtension OCTET STRING OPTIONAL, + nonCriticalExtension SEQUENCE {} OPTIONAL +} + +-- ASN1STOP + +UEAssistanceInformation field descriptions powerPrefIndication +Value lowPowerConsumption indicates the UE prefers a configuration that is primarily optimised for power saving. Otherwise the value is set to normal. +– UECapabilityEnquiry +The UECapabilityEnquiry message is used to request the transfer of UE radio access capabilities for EUTRA as well as for other RATs. +Signalling radio bearer: SRB1 +RLC-SAP: AM +Logical channel: DCCH +Direction: EUTRAN to UE +UECapabilityEnquiry message +-- ASN1START + +UECapabilityEnquiry ::= SEQUENCE { + rrc-TransactionIdentifier RRC-TransactionIdentifier, + criticalExtensions CHOICE { + c1 CHOICE { + ueCapabilityEnquiry-r8 UECapabilityEnquiry-r8-IEs, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +UECapabilityEnquiry-r8-IEs ::= SEQUENCE { + ue-CapabilityRequest UE-CapabilityRequest, + nonCriticalExtension UECapabilityEnquiry-v8a0-IEs OPTIONAL +} + +UECapabilityEnquiry-v8a0-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, + nonCriticalExtension UECapabilityEnquiry-v1180-IEs OPTIONAL +} + +UECapabilityEnquiry-v1180-IEs ::= SEQUENCE { + requestedFrequencyBands-r11 SEQUENCE (SIZE (1..16)) OF FreqBandIndicator-r11 OPTIONAL, + nonCriticalExtension SEQUENCE {} OPTIONAL +} + +UE-CapabilityRequest ::= SEQUENCE (SIZE (1..maxRAT-Capabilities)) OF RAT-Type + +-- ASN1STOP + +UECapabilityEnquiry field descriptions ue-CapabilityRequest +List of the RATs for which the UE is requested to transfer the UE radio access capabilities i.e. E-UTRA, UTRA, GERAN-CS, GERAN-PS, CDMA2000. requestedFrequencyBands +List of frequency bands for which the UE is requested to provide supported CA band combinations and non CA bands. +– UECapabilityInformation +The UECapabilityInformation message is used to transfer of UE radio access capabilities requested by the EUTRAN. +Signalling radio bearer: SRB1 +RLC-SAP: AM +Logical channel: DCCH +Direction: UE to EUTRAN +UECapabilityInformation message +-- ASN1START + +UECapabilityInformation ::= SEQUENCE { + rrc-TransactionIdentifier RRC-TransactionIdentifier, + criticalExtensions CHOICE { + c1 CHOICE{ + ueCapabilityInformation-r8 UECapabilityInformation-r8-IEs, + spare7 NULL, + spare6 NULL, spare5 NULL, spare4 NULL, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +UECapabilityInformation-r8-IEs ::= SEQUENCE { + ue-CapabilityRAT-ContainerList UE-CapabilityRAT-ContainerList, + nonCriticalExtension UECapabilityInformation-v8a0-IEs OPTIONAL +} + +UECapabilityInformation-v8a0-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, + nonCriticalExtension UECapabilityInformation-v1250-IEs OPTIONAL +} + +UECapabilityInformation-v1250-IEs ::= SEQUENCE { + ue-RadioPagingInfo-r12 UE-RadioPagingInfo-r12 OPTIONAL, + nonCriticalExtension SEQUENCE {} OPTIONAL +} + +-- ASN1STOP + +UECapabilityInformation field descriptions ue-RadioPagingInfo +This field contains information used for paging of category 0 UEs. +– UEInformationRequest +The UEInformationRequest is the command used by E-UTRAN to retrieve information from the UE. +Signalling radio bearer: SRB1 +RLC-SAP: AM +Logical channel: DCCH +Direction: EUTRAN to UE +UEInformationRequest message +-- ASN1START + +UEInformationRequest-r9 ::= SEQUENCE { + rrc-TransactionIdentifier RRC-TransactionIdentifier, + criticalExtensions CHOICE { + c1 CHOICE { + ueInformationRequest-r9 UEInformationRequest-r9-IEs, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +UEInformationRequest-r9-IEs ::= SEQUENCE { + rach-ReportReq-r9 BOOLEAN, + rlf-ReportReq-r9 BOOLEAN, + nonCriticalExtension UEInformationRequest-v930-IEs OPTIONAL +} + +UEInformationRequest-v930-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, + nonCriticalExtension UEInformationRequest-v1020-IEs OPTIONAL +} + +UEInformationRequest-v1020-IEs ::= SEQUENCE { + logMeasReportReq-r10 ENUMERATED {true} OPTIONAL, -- Need ON + nonCriticalExtension UEInformationRequest-v1130-IEs OPTIONAL +} + +UEInformationRequest-v1130-IEs ::= SEQUENCE { + connEstFailReportReq-r11 ENUMERATED {true} OPTIONAL, -- Need ON + nonCriticalExtension UEInformationRequest-v1250-IEs OPTIONAL +} + +UEInformationRequest-v1250-IEs ::= SEQUENCE { + mobilityHistoryReportReq-r12 ENUMERATED {true} OPTIONAL, -- Need ON + nonCriticalExtension SEQUENCE {} OPTIONAL +} + +-- ASN1STOP + +UEInformationRequest field descriptions rach-ReportReq +This field is used to indicate whether the UE shall report information about the random access procedure. +– UEInformationResponse +The UEInformationResponse message is used by the UE to transfer the information requested by the E-UTRAN. +Signalling radio bearer: SRB1 or SRB2 (when logged measurement information is included) +RLC-SAP: AM +Logical channel: DCCH +Direction: UE to E-UTRAN +UEInformationResponse message +-- ASN1START + +UEInformationResponse-r9 ::= SEQUENCE { + rrc-TransactionIdentifier RRC-TransactionIdentifier, + criticalExtensions CHOICE { + c1 CHOICE { + ueInformationResponse-r9 UEInformationResponse-r9-IEs, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +UEInformationResponse-r9-IEs ::= SEQUENCE { + rach-Report-r9 SEQUENCE { + numberOfPreamblesSent-r9 NumberOfPreamblesSent-r11, + contentionDetected-r9 BOOLEAN + } OPTIONAL, + rlf-Report-r9 RLF-Report-r9 OPTIONAL, + nonCriticalExtension UEInformationResponse-v930-IEs OPTIONAL +} + +-- Late non critical extensions +UEInformationResponse-v9e0-IEs ::= SEQUENCE { + rlf-Report-v9e0 RLF-Report-v9e0 OPTIONAL, + nonCriticalExtension SEQUENCE {} OPTIONAL +} + +-- Regular non critical extensions +UEInformationResponse-v930-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING (CONTAINING UEInformationResponse-v9e0-IEs) OPTIONAL, + nonCriticalExtension UEInformationResponse-v1020-IEs OPTIONAL +} + +UEInformationResponse-v1020-IEs ::= SEQUENCE { + logMeasReport-r10 LogMeasReport-r10 OPTIONAL, + nonCriticalExtension UEInformationResponse-v1130-IEs OPTIONAL +} + +UEInformationResponse-v1130-IEs ::= SEQUENCE { + connEstFailReport-r11 ConnEstFailReport-r11 OPTIONAL, + nonCriticalExtension UEInformationResponse-v1250-IEs OPTIONAL +} + +UEInformationResponse-v1250-IEs ::= SEQUENCE { + mobilityHistoryReport-r12 MobilityHistoryReport-r12 OPTIONAL, + nonCriticalExtension SEQUENCE {} OPTIONAL +} + +RLF-Report-r9 ::= SEQUENCE { + measResultLastServCell-r9 SEQUENCE { + rsrpResult-r9 RSRP-Range, + rsrqResult-r9 RSRQ-Range OPTIONAL + }, + measResultNeighCells-r9 SEQUENCE { + measResultListEUTRA-r9 MeasResultList2EUTRA-r9 OPTIONAL, + measResultListUTRA-r9 MeasResultList2UTRA-r9 OPTIONAL, + measResultListGERAN-r9 MeasResultListGERAN OPTIONAL, + measResultsCDMA2000-r9 MeasResultList2CDMA2000-r9 OPTIONAL + } OPTIONAL, + ..., + [[ locationInfo-r10 LocationInfo-r10 OPTIONAL, + failedPCellId-r10 CHOICE { + cellGlobalId-r10 CellGlobalIdEUTRA, + pci-arfcn-r10 SEQUENCE { + physCellId-r10 PhysCellId, + carrierFreq-r10 ARFCN-ValueEUTRA + } + } OPTIONAL, + reestablishmentCellId-r10 CellGlobalIdEUTRA OPTIONAL, + timeConnFailure-r10 INTEGER (0..1023) OPTIONAL, + connectionFailureType-r10 ENUMERATED {rlf, hof} OPTIONAL, + previousPCellId-r10 CellGlobalIdEUTRA OPTIONAL + ]], + [[ failedPCellId-v1090 SEQUENCE { + carrierFreq-v1090 ARFCN-ValueEUTRA-v9e0 + } OPTIONAL + ]], + [[ basicFields-r11 SEQUENCE { + c-RNTI-r11 C-RNTI, + rlf-Cause-r11 ENUMERATED { + t310-Expiry, randomAccessProblem, + rlc-MaxNumRetx, t312-Expiry-r12}, + timeSinceFailure-r11 TimeSinceFailure-r11 + } OPTIONAL, + previousUTRA-CellId-r11 SEQUENCE { + carrierFreq-r11 ARFCN-ValueUTRA, + physCellId-r11 CHOICE { + fdd-r11 PhysCellIdUTRA-FDD, + tdd-r11 PhysCellIdUTRA-TDD + }, + cellGlobalId-r11 CellGlobalIdUTRA OPTIONAL + } OPTIONAL, + selectedUTRA-CellId-r11 SEQUENCE { + carrierFreq-r11 ARFCN-ValueUTRA, + physCellId-r11 CHOICE { + fdd-r11 PhysCellIdUTRA-FDD, + tdd-r11 PhysCellIdUTRA-TDD + } + } OPTIONAL + ]], + [[ failedPCellId-v1250 SEQUENCE { + tac-FailedPCell-r12 TrackingAreaCode + } OPTIONAL, + measResultLastServCell-v1250 RSRQ-Range-v1250 OPTIONAL, + lastServCellRSRQ-Type-r12 RSRQ-Type-r12 OPTIONAL, + measResultListEUTRA-v1250 MeasResultList2EUTRA-v1250 OPTIONAL + ]] + +} + +RLF-Report-v9e0 ::= SEQUENCE { + measResultListEUTRA-v9e0 MeasResultList2EUTRA-v9e0 +} + +MeasResultList2EUTRA-r9 ::= SEQUENCE (SIZE (1..maxFreq)) OF MeasResult2EUTRA-r9 + +MeasResultList2EUTRA-v9e0 ::= SEQUENCE (SIZE (1..maxFreq)) OF MeasResult2EUTRA-v9e0 + +MeasResultList2EUTRA-v1250 ::= SEQUENCE (SIZE (1..maxFreq)) OF MeasResult2EUTRA-v1250 + +MeasResult2EUTRA-r9 ::= SEQUENCE { + carrierFreq-r9 ARFCN-ValueEUTRA, + measResultList-r9 MeasResultListEUTRA +} + +MeasResult2EUTRA-v9e0 ::= SEQUENCE { + carrierFreq-v9e0 ARFCN-ValueEUTRA-v9e0 OPTIONAL +} + +MeasResult2EUTRA-v1250 ::= SEQUENCE { + rsrq-Type-r12 RSRQ-Type-r12 OPTIONAL +} + +MeasResultList2UTRA-r9 ::= SEQUENCE (SIZE (1..maxFreq)) OF MeasResult2UTRA-r9 + +MeasResult2UTRA-r9 ::= SEQUENCE { + carrierFreq-r9 ARFCN-ValueUTRA, + measResultList-r9 MeasResultListUTRA +} + +MeasResultList2CDMA2000-r9 ::= SEQUENCE (SIZE (1..maxFreq)) OF MeasResult2CDMA2000-r9 + +MeasResult2CDMA2000-r9 ::= SEQUENCE { + carrierFreq-r9 CarrierFreqCDMA2000, + measResultList-r9 MeasResultsCDMA2000 +} + +LogMeasReport-r10 ::= SEQUENCE { + absoluteTimeStamp-r10 AbsoluteTimeInfo-r10, + traceReference-r10 TraceReference-r10, + traceRecordingSessionRef-r10 OCTET STRING (SIZE (2)), + tce-Id-r10 OCTET STRING (SIZE (1)), + logMeasInfoList-r10 LogMeasInfoList-r10, + logMeasAvailable-r10 ENUMERATED {true} OPTIONAL, + ... +} + +LogMeasInfoList-r10 ::= SEQUENCE (SIZE (1..maxLogMeasReport-r10)) OF LogMeasInfo-r10 + +LogMeasInfo-r10 ::= SEQUENCE { + locationInfo-r10 LocationInfo-r10 OPTIONAL, + relativeTimeStamp-r10 INTEGER (0..7200), + servCellIdentity-r10 CellGlobalIdEUTRA, + measResultServCell-r10 SEQUENCE { + rsrpResult-r10 RSRP-Range, + rsrqResult-r10 RSRQ-Range + }, + measResultNeighCells-r10 SEQUENCE { + measResultListEUTRA-r10 MeasResultList2EUTRA-r9 OPTIONAL, + measResultListUTRA-r10 MeasResultList2UTRA-r9 OPTIONAL, + measResultListGERAN-r10 MeasResultList2GERAN-r10 OPTIONAL, + measResultListCDMA2000-r10 MeasResultList2CDMA2000-r9 OPTIONAL + } OPTIONAL, + ..., + [[ measResultListEUTRA-v1090 MeasResultList2EUTRA-v9e0 OPTIONAL + ]], + [[ measResultListMBSFN-r12 MeasResultListMBSFN-r12 OPTIONAL, + measResultServCell-v1250 RSRQ-Range-v1250 OPTIONAL, + servCellRSRQ-Type-r12 RSRQ-Type-r12 OPTIONAL, + measResultListEUTRA-v1250 MeasResultList2EUTRA-v1250 OPTIONAL + ]] + +} + +MeasResultListMBSFN-r12 ::= SEQUENCE (SIZE (1..maxMBSFN-Area)) OF MeasResultMBSFN-r12 + +MeasResultMBSFN-r12 ::= SEQUENCE { + mbsfn-Area-r12 SEQUENCE { + mbsfn-AreaId-r12 MBSFN-AreaId-r12, + carrierFreq-r12 ARFCN-ValueEUTRA-r9 + }, + rsrpResultMBSFN-r12 RSRP-Range, + rsrqResultMBSFN-r12 MBSFN-RSRQ-Range-r12, + signallingBLER-Result-r12 BLER-Result-r12 OPTIONAL, + dataBLER-MCH-ResultList-r12 DataBLER-MCH-ResultList-r12 OPTIONAL, + ... +} + +DataBLER-MCH-ResultList-r12 ::= SEQUENCE (SIZE (1.. maxPMCH-PerMBSFN)) OF DataBLER-MCH-Result-r12 + +DataBLER-MCH-Result-r12 ::= SEQUENCE { + mch-Index-r12 INTEGER (1..maxPMCH-PerMBSFN), + dataBLER-Result-r12 BLER-Result-r12 +} + +BLER-Result-r12 ::= SEQUENCE { + bler-r12 BLER-Range-r12, + blocksReceived-r12 SEQUENCE { + n-r12 BIT STRING (SIZE (3)), + m-r12 BIT STRING (SIZE (8)) + } +} + +BLER-Range-r12 ::= INTEGER(0..31) + +MeasResultList2GERAN-r10 ::= SEQUENCE (SIZE (1..maxCellListGERAN)) OF MeasResultListGERAN + +ConnEstFailReport-r11 ::= SEQUENCE { + failedCellId-r11 CellGlobalIdEUTRA, + locationInfo-r11 LocationInfo-r10 OPTIONAL, + measResultFailedCell-r11 SEQUENCE { + rsrpResult-r11 RSRP-Range, + rsrqResult-r11 RSRQ-Range OPTIONAL + }, + measResultNeighCells-r11 SEQUENCE { + measResultListEUTRA-r11 MeasResultList2EUTRA-r9 OPTIONAL, + measResultListUTRA-r11 MeasResultList2UTRA-r9 OPTIONAL, + measResultListGERAN-r11 MeasResultListGERAN OPTIONAL, + measResultsCDMA2000-r11 MeasResultList2CDMA2000-r9 OPTIONAL + } OPTIONAL, + numberOfPreamblesSent-r11 NumberOfPreamblesSent-r11, + contentionDetected-r11 BOOLEAN, + maxTxPowerReached-r11 BOOLEAN, + timeSinceFailure-r11 TimeSinceFailure-r11, + measResultListEUTRA-v1130 MeasResultList2EUTRA-v9e0 OPTIONAL, + ..., + [[ measResultFailedCell-v1250 RSRQ-Range-v1250 OPTIONAL, + failedCellRSRQ-Type-r12 RSRQ-Type-r12 OPTIONAL, + measResultListEUTRA-v1250 MeasResultList2EUTRA-v1250 OPTIONAL + ]] +} + +NumberOfPreamblesSent-r11::= INTEGER (1..200) + +TimeSinceFailure-r11 ::= INTEGER (0..172800) + +MobilityHistoryReport-r12 ::= VisitedCellInfoList-r12 + +-- ASN1STOP + +UEInformationResponse field descriptions absoluteTimeStamp +Indicates the absolute time when the logged measurement configuration logging is provided, as indicated by E-UTRAN within absoluteTimeInfo. bler +Indicates the measured BLER value. +The coding of BLER value is defined in TS 36.133 [16]. blocksReceived +Indicates total number of MCH blocks, which were received by the UE and used for the corresponding BLER calculation, within the measurement period as defined in TS 36.133 [16]. carrierFreq +In case the UE includes carrierFreq-v9e0 and/ or carrierFreq-v1090, the UE shall set the corresponding entry of carrierFreq-r9 and/ or carrierFreq-r10 respectively to maxEARFCN. For E-UTRA and UTRA frequencies, the UE sets the ARFCN according to the band used when obtaining the concerned measurement results. connectionFailureType +This field is used to indicate whether the connection failure is due to radio link failure or handover failure. contentionDetected +This field is used to indicate that contention was detected for at least one of the transmitted preambles, see TS 36.321 [6]. c-RNTI +This field indicates the C-RNTI used in the PCell upon detecting radio link failure or the C-RNTI used in the source PCell upon handover failure. dataBLER-MCH-ResultList +Includes a BLER result per MCH on subframes using dataMCS, with the applicable MCH(s) listed in the same order as in pmch-InfoList within MBSFNAreaConfiguration. failedCellId +This field is used to indicate the cell in which connection establishment failed. failedPCellId +This field is used to indicate the PCell in which RLF is detected or the target PCell of the failed handover. The UE sets the EARFCN according to the band used for transmission/ reception when the failure occurred. maxTxPowerReached +This field is used to indicate whether or not the maximum power level was used for the last transmitted preamble, see TS 36.321 [6]. mch-Index +Indicates the MCH by referring to the entry as listed in pmch-InfoList within MBSFNAreaConfiguration. measResultFailedCell +This field refers to the last measurement results taken in the cell, where connection establishment failure happened. measResultLastServCell +This field refers to the last measurement results taken in the PCell, where radio link failure or handover failure happened. measResultListEUTRA +If measResultListEUTRA-v9e0, measResultListEUTRA-v1090 or measResultListEUTRA-v1130 is included, the UE shall include the same number of entries, and listed in the same order, as in measResultListEUTRA-r9, measResultListEUTRA-r10 and/ or measResultListEUTRA-r11 respectively. measResultListEUTRA-v1250 +If included in RLF-Report-r9 the UE shall include the same number of entries, and listed in the same order, as in measResultListEUTRA-r9; +If included in LogMeasInfo-r10 the UE shall include the same number of entries, and listed in the same order, as in measResultListEUTRA-r10; +If included in ConnEstFailReport-r11 the UE shall include the same number of entries, and listed in the same order, as in measResultListEUTRA-r11; mobilityHistoryReport +This field is used to indicate the time of stay in 16 most recently visited E-UTRA cells or of stay out of E-UTRA. numberOfPreamblesSent +This field is used to indicate the number of RACH preambles that were transmitted. Corresponds to parameter PREAMBLE_TRANSMISSION_COUNTER in TS 36.321 [6]. previousPCellId +This field is used to indicate the source PCell of the last handover (source PCell when the last RRC-Connection-Reconfiguration message including mobilityControlInfowas received). previousUTRA-CellId +This field is used to indicate the source UTRA cell of the last successful handover to E-UTRAN, when RLF occurred at the target PCell. The UE sets the ARFCN according to the band used for transmission/ reception on the concerned cell. reestablishmentCellId +This field is used to indicate the cell in which the re-establishment attempt was made after connection failure. relativeTimeStamp +Indicates the time of logging measurement results, measured relative to the absoluteTimeStamp. Value in seconds. rlf-Cause +This field is used to indicate the cause of the last radio link failure that was detected. In case of handover failure information reporting (i.e., the connectionFailureType is set to 'hof'), the UE is allowed to set this field to any value. selectedUTRA-CellId +This field is used to indicate the UTRA cell that the UE selects after RLF is detected, while T311 is running. The UE sets the ARFCN according to the band selected for transmission/ reception on the concerned cell. signallingBLER-Result +Includes a BLER result of MBSFN subframes using signallingMCS. tac-FailedPCell +This field is used to indicate the Tracking Area Code of the PCell in which RLF is detected. tce-Id +Parameter Trace Collection Entity Id: See TS 32.422 [58]. timeConnFailure +This field is used to indicate the time elapsed since the last HO initialization until connection failure. Actual value = IE value * 100ms. The maximum value 1023 means 102.3s or longer. timeSinceFailure +This field is used to indicate the time that elapsed since the connection (establishment) failure. Value in seconds. The maximum value 172800 means 172800s or longer. traceRecordingSessionRef +Parameter Trace Recording Session Reference: See TS 32.422 [58]. +– ULHandoverPreparationTransfer (CDMA2000) +The ULHandoverPreparationTransfer message is used for the uplink transfer of handover related CDMA2000 information when requested by the higher layers. +Signalling radio bearer: SRB1 +RLC-SAP: AM +Logical channel: DCCH +Direction: UE to EUTRAN +ULHandoverPreparationTransfer message +-- ASN1START + +ULHandoverPreparationTransfer ::= SEQUENCE { + criticalExtensions CHOICE { + c1 CHOICE { + ulHandoverPreparationTransfer-r8 ULHandoverPreparationTransfer-r8-IEs, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +ULHandoverPreparationTransfer-r8-IEs ::= SEQUENCE { + cdma2000-Type CDMA2000-Type, + meid BIT STRING (SIZE (56)) OPTIONAL, + dedicatedInfo DedicatedInfoCDMA2000, + nonCriticalExtension ULHandoverPreparationTransfer-v8a0-IEs OPTIONAL +} + +ULHandoverPreparationTransfer-v8a0-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, + nonCriticalExtension SEQUENCE {} OPTIONAL +} + +-- ASN1STOP + +ULHandoverPreparationTransfer field descriptions meid +The 56 bit mobile identification number provided by the CDMA2000 Upper layers. +– ULInformationTransfer +The ULInformationTransfer message is used for the uplink transfer of NAS or non-3GPP dedicated information. +Signalling radio bearer: SRB2 or SRB1(only if SRB2 not established yet). If SRB2 is suspended, the UE does not send this message until SRB2 is resumed +RLC-SAP: AM +Logical channel: DCCH +Direction: UE to EUTRAN +ULInformationTransfer message +-- ASN1START + +ULInformationTransfer ::= SEQUENCE { + criticalExtensions CHOICE { + c1 CHOICE { + ulInformationTransfer-r8 ULInformationTransfer-r8-IEs, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +ULInformationTransfer-r8-IEs ::= SEQUENCE { + dedicatedInfoType CHOICE { + dedicatedInfoNAS DedicatedInfoNAS, + dedicatedInfoCDMA2000-1XRTT DedicatedInfoCDMA2000, + dedicatedInfoCDMA2000-HRPD DedicatedInfoCDMA2000 + }, + nonCriticalExtension ULInformationTransfer-v8a0-IEs OPTIONAL +} + +ULInformationTransfer-v8a0-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, + nonCriticalExtension SEQUENCE {} OPTIONAL +} + +-- ASN1STOP + +6.3 RRC information elements +6.3.1 System information blocks +– SystemInformationBlockType2 +The IE SystemInformationBlockType2 contains radio resource configuration information that is common for all UEs. +NOTE: UE timers and constants related to functionality for which parameters are provided in another SIB are included in the corresponding SIB. +SystemInformationBlockType2 information element +-- ASN1START + +SystemInformationBlockType2 ::= SEQUENCE { + ac-BarringInfo SEQUENCE { + ac-BarringForEmergency BOOLEAN, + ac-BarringForMO-Signalling AC-BarringConfig OPTIONAL, -- Need OP + ac-BarringForMO-Data AC-BarringConfig OPTIONAL -- Need OP + } OPTIONAL, -- Need OP + radioResourceConfigCommon RadioResourceConfigCommonSIB, + ue-TimersAndConstants UE-TimersAndConstants, + freqInfo SEQUENCE { + ul-CarrierFreq ARFCN-ValueEUTRA OPTIONAL, -- Need OP + ul-Bandwidth ENUMERATED {n6, n15, n25, n50, n75, n100} + OPTIONAL, -- Need OP + additionalSpectrumEmission AdditionalSpectrumEmission + }, + mbsfn-SubframeConfigList MBSFN-SubframeConfigList OPTIONAL, -- Need OR + timeAlignmentTimerCommon TimeAlignmentTimer, + ..., + lateNonCriticalExtension OCTET STRING (CONTAINING SystemInformationBlockType2-v8h0-IEs) OPTIONAL, + [[ ssac-BarringForMMTEL-Voice-r9 AC-BarringConfig OPTIONAL, -- Need OP + ssac-BarringForMMTEL-Video-r9 AC-BarringConfig OPTIONAL -- Need OP + ]], + [[ ac-BarringForCSFB-r10 AC-BarringConfig OPTIONAL -- Need OP + ]], + [[ + ac-BarringSkipForMMTELVoice-r12 ENUMERATED {true} OPTIONAL, -- Need OP + ac-BarringSkipForMMTELVideo-r12 ENUMERATED {true} OPTIONAL, -- Need OP + ac-BarringSkipForSMS-r12 ENUMERATED {true} OPTIONAL, -- Need OP + ac-BarringPerPLMN-List-r12 AC-BarringPerPLMN-List-r12 OPTIONAL -- Need OP + ]] +} + +SystemInformationBlockType2-v8h0-IEs ::= SEQUENCE { + multiBandInfoList SEQUENCE (SIZE (1..maxMultiBands)) OF AdditionalSpectrumEmission OPTIONAL, -- Need OR + nonCriticalExtension SystemInformationBlockType2-v9e0-IEs OPTIONAL +} + +SystemInformationBlockType2-v9e0-IEs ::= SEQUENCE { + ul-CarrierFreq-v9e0 ARFCN-ValueEUTRA-v9e0 OPTIONAL, -- Cond ul-FreqMax + nonCriticalExtension SEQUENCE {} OPTIONAL +} + +AC-BarringConfig ::= SEQUENCE { + ac-BarringFactor ENUMERATED { + p00, p05, p10, p15, p20, p25, p30, p40, + p50, p60, p70, p75, p80, p85, p90, p95}, + ac-BarringTime ENUMERATED {s4, s8, s16, s32, s64, s128, s256, s512}, + ac-BarringForSpecialAC BIT STRING (SIZE(5)) +} + +MBSFN-SubframeConfigList ::= SEQUENCE (SIZE (1..maxMBSFN-Allocations)) OF MBSFN-SubframeConfig + +AC-BarringPerPLMN-List-r12 ::= SEQUENCE (SIZE (1.. maxPLMN-r11)) OF AC-BarringPerPLMN-r12 + +AC-BarringPerPLMN-r12 ::= SEQUENCE { + plmn-IdentityIndex-r12 INTEGER (1..maxPLMN-r11), + ac-BarringInfo-r12 SEQUENCE { + ac-BarringForEmergency-r12 BOOLEAN, + ac-BarringForMO-Signalling-r12 AC-BarringConfig OPTIONAL, -- Need OP + ac-BarringForMO-Data-r12 AC-BarringConfig OPTIONAL -- Need OP + } OPTIONAL, -- Need OP + ac-BarringSkipForMMTELVoice-r12 ENUMERATED {true} OPTIONAL, -- Need OP + ac-BarringSkipForMMTELVideo-r12 ENUMERATED {true} OPTIONAL, -- Need OP + ac-BarringSkipForSMS-r12 ENUMERATED {true} OPTIONAL, -- Need OP + ac-BarringForCSFB-r12 AC-BarringConfig OPTIONAL, -- Need OP + ssac-BarringForMMTEL-Voice-r12 AC-BarringConfig OPTIONAL, -- Need OP + ssac-BarringForMMTEL-Video-r12 AC-BarringConfig OPTIONAL -- Need OP +} + +-- ASN1STOP + +SystemInformationBlockType2 field descriptions ac-BarringFactor +If the random number drawn by the UE is lower than this value, access is allowed. Otherwise the access is barred. The values are interpreted in the range [0,1): p00 = 0, p05 = 0.05, p10 = 0.10,…, p95 = 0.95. Values other than p00 can only be set if all bits of the corresponding ac-BarringForSpecialAC are set to 0. ac-BarringForCSFB +Access class barring for mobile originating CS fallback. ac-BarringForEmergency +Access class barring for AC 10. ac-BarringForMO-Data +Access class barring for mobile originating calls. ac-BarringForMO-Signalling +Access class barring for mobile originating signalling. ac-BarringForSpecialAC +Access class barring for AC 11-15. The first/ leftmost bit is for AC 11, the second bit is for AC 12, and so on. ac-BarringTime +Mean access barring time value in seconds. additionalSpectrumEmission +The UE requirements related to IE AdditionalSpectrumEmission are defined in TS 36.101 [42, table 6.2.4.1]. mbsfn-SubframeConfigList +Defines the subframes that are reserved for MBSFN in downlink. multiBandInfoList +A list of additionalSpectrumEmission i.e. one for each additional frequency band included in multiBandInfoList in SystemInformationBlockType1, listed in the same order. plmn-IdentityIndex +Index of the PLMN in plmn-IdentityList included in SIB1. Value 1 indicates the PLMN listed 1st in plmn-IdentityList included in SIB1. Value 2 indicates the PLMN listed 2nd in plmn-IdentityList included in SIB1 and so on. ssac-BarringForMMTEL-Video +Service specific access class barring for MMTEL video originating calls. ssac-BarringForMMTEL-Voice +Service specific access class barring for MMTEL voice originating calls. ul-Bandwidth +Parameter: transmission bandwidth configuration, NRB, in uplink, see TS 36.101 [42, table 5.6-1]. Value n6 corresponds to 6 resource blocks, n15 to 15 resource blocks and so on. If for FDD this parameter is absent, the uplink bandwidth is equal to the downlink bandwidth. For TDD this parameter is absent and it is equal to the downlink bandwidth. ul-CarrierFreq +For FDD: If absent, the (default) value determined from the default TX-RX frequency separation defined in TS 36.101 [42, table 5.7.3-1] applies. +For TDD: This parameter is absent and it is equal to the downlink frequency. +Conditional presence Explanation ul-FreqMax The field is mandatory present if ul-CarrierFreq (i.e. without suffix) is present and set to maxEARFCN. Otherwise the field is not present. +– SystemInformationBlockType3 +The IE SystemInformationBlockType3 contains cell re-selection information common for intra-frequency, inter-frequency and/ or inter-RAT cell re-selection (i.e. applicable for more than one type of cell re-selection but not necessarily all) as well as intra-frequency cell re-selection information other than neighbouring cell related. +SystemInformationBlockType3 information element +-- ASN1START + +SystemInformationBlockType3 ::= SEQUENCE { + cellReselectionInfoCommon SEQUENCE { + q-Hyst ENUMERATED { + dB0, dB1, dB2, dB3, dB4, dB5, dB6, dB8, dB10, + dB12, dB14, dB16, dB18, dB20, dB22, dB24}, + speedStateReselectionPars SEQUENCE { + mobilityStateParameters MobilityStateParameters, + q-HystSF SEQUENCE { + sf-Medium ENUMERATED { + dB-6, dB-4, dB-2, dB0}, + sf-High ENUMERATED { + dB-6, dB-4, dB-2, dB0} + } + } OPTIONAL -- Need OP + }, + cellReselectionServingFreqInfo SEQUENCE { + s-NonIntraSearch ReselectionThreshold OPTIONAL, -- Need OP + threshServingLow ReselectionThreshold, + cellReselectionPriority CellReselectionPriority + }, + intraFreqCellReselectionInfo SEQUENCE { + q-RxLevMin Q-RxLevMin, + p-Max P-Max OPTIONAL, -- Need OP + s-IntraSearch ReselectionThreshold OPTIONAL, -- Need OP + allowedMeasBandwidth AllowedMeasBandwidth OPTIONAL, -- Need OP + presenceAntennaPort1 PresenceAntennaPort1, + neighCellConfig NeighCellConfig, + t-ReselectionEUTRA T-Reselection, + t-ReselectionEUTRA-SF SpeedStateScaleFactors OPTIONAL -- Need OP + }, + ..., + lateNonCriticalExtension OCTET STRING OPTIONAL, + [[ s-IntraSearch-v920 SEQUENCE { + s-IntraSearchP-r9 ReselectionThreshold, + s-IntraSearchQ-r9 ReselectionThresholdQ-r9 + } OPTIONAL, -- Need OP + s-NonIntraSearch-v920 SEQUENCE { + s-NonIntraSearchP-r9 ReselectionThreshold, + s-NonIntraSearchQ-r9 ReselectionThresholdQ-r9 + } OPTIONAL, -- Need OP + q-QualMin-r9 Q-QualMin-r9 OPTIONAL, -- Need OP + threshServingLowQ-r9 ReselectionThresholdQ-r9 OPTIONAL -- Need OP + ]], + [[ q-QualMinWB-r11 Q-QualMin-r9 OPTIONAL -- Cond WB-RSRQ + ]], + [[ q-QualMinRSRQ-OnAllSymbols-r12 Q-QualMin-r9 OPTIONAL -- Cond RSRQ + ]] +} + +-- ASN1STOP + +SystemInformationBlockType3 field descriptions allowedMeasBandwidth +If absent, the value corresponding to the downlink bandwidth indicated by the dl-Bandwidth included in MasterInformationBlock applies. cellReselectionInfoCommon +Cell re-selection information common for cells. cellReselectionServingFreqInfo +Information common for Cell re-selection to inter-frequency and inter-RAT cells. intraFreqcellReselectionInfo +Cell re-selection information common for intra-frequency cells. p-Max +Value applicable for the intra-frequency neighbouring E-UTRA cells. If absent the UE applies the maximum power according to the UE capability. q-Hyst +Parameter Qhyst in 36.304 [4], Value in dB. Value dB1 corresponds to 1 dB, dB2 corresponds to 2 dB and so on. q-HystSF +Parameter “Speed dependent ScalingFactor for Qhyst” in TS 36.304 [4]. The sf-Medium and sf-High concern the additional hysteresis to be applied, in Medium and High Mobility state respectively, to Qhyst as defined in TS 36.304 [4]. In dB. Value dB-6 corresponds to -6dB, dB-4 corresponds to -4dB and so on. q-QualMin +Parameter “Qqualmin” in TS 36.304 [4], applicable for intra-frequency neighrbour cells. If the field is not present, the UE applies the (default) value of negative infinity for Qqualmin. NOTE 1. q-QualMinRSRQ-OnAllSymbols +If this field is present and supported by the UE, the UE shall, when performing RSRQ measurements, perform RSRQ measurement on all OFDM symbols in accordance with TS 36.214 [48]. NOTE 1. q-QualMinWB +If this field is present and supported by the UE, the UE shall, when performing RSRQ measurements, use a wider bandwidth in accordance with TS 36.133 [16]. NOTE 1. q-RxLevMin +Parameter “Qrxlevmin” in TS 36.304 [4], applicable for intra-frequency neighbour cells. s-IntraSearch +Parameter “SIntraSearchP” in TS 36.304 [4]. If the field s-IntraSearchP is present, the UE applies the value of s-IntraSearchP instead. Otherwise if neither s-IntraSearch nor s-IntraSearchP is present, the UE applies the (default) value of infinity for SIntraSearchP. s-IntraSearchP +Parameter “SIntraSearchP” in TS 36.304 [4]. See descriptions under s-IntraSearch. s-IntraSearchQ +Parameter “SIntraSearchQ” in TS 36.304 [4]. If the field is not present, the UE applies the (default) value of 0 dB for SIntraSearchQ. s-NonIntraSearch +Parameter “SnonIntraSearchP” in TS 36.304 [4]. If the field s-NonIntraSearchP is present, the UE applies the value of s-NonIntraSearchP instead. Otherwise if neither s-NonIntraSearch nor s-NonIntraSearchP is present, the UE applies the (default) value of infinity for SnonIntraSearchP. s-NonIntraSearchP +Parameter “SnonIntraSearchP” in TS 36.304 [4]. See descriptions under s-NonIntraSearch. s-NonIntraSearchQ +Parameter “SnonIntraSearchQ” in TS 36.304 [4]. If the field is not present, the UE applies the (default) value of 0 dB for SnonIntraSearchQ. speedStateReselectionPars +Speed dependent reselection parameters, see TS 36.304 [4]. If this field is absent, i.e, mobilityStateParameters is also not present, UE behaviour is specified in TS 36.304 [4]. threshServingLow +Parameter “ThreshServing, LowP” in TS 36.304 [4]. threshServingLowQ +Parameter “ThreshServing, LowQ” in TS 36.304 [4]. t-ReselectionEUTRA +Parameter “TreselectionEUTRA” in TS 36.304 [4]. t-ReselectionEUTRA-SF +Parameter “Speed dependent ScalingFactor for TreselectionEUTRA” in TS 36.304 [4]. If the field is not present, the UE behaviour is specified in TS 36.304 [4]. +NOTE 1: The value the UE applies for parameter “Qqualmin” in TS 36.304 [4] depends on the q-QualMin fields signalled by E-UTRAN and supported by the UE. In case multiple candidate options are available, the UE shall select the highest priority candidate option according to the priority order indicated by the following table (top row is highest priority). +q-QualMinRSRQ-OnAllSymbols q-QualMinWB Value of parameter “Qqualmin” in TS 36.304 [4] Included Included q-QualMinRSRQ-OnAllSymbols – (q-QualMin – q-QualMinWB) Included Not included q-QualMinRSRQ-OnAllSymbols Not included Included q-QualMinWB Not included Not included q-QualMin +Conditional presence Explanation RSRQ The field is optionally present, Need OR, if threshServingLowQ is present in SIB3; otherwise it is not present. WB-RSRQ The field is optionally present, need OP if the measurement bandwidth indicated by allowedMeasBandwidth is 50 resource blocks or larger; otherwise it is not present. +– SystemInformationBlockType4 +The IE SystemInformationBlockType4 contains neighbouring cell related information relevant only for intra-frequency cell re-selection. The IE includes cells with specific re-selection parameters as well as blacklisted cells. +SystemInformationBlockType4 information element +-- ASN1START + +SystemInformationBlockType4 ::= SEQUENCE { + intraFreqNeighCellList IntraFreqNeighCellList OPTIONAL, -- Need OR + intraFreqBlackCellList IntraFreqBlackCellList OPTIONAL, -- Need OR + csg-PhysCellIdRange PhysCellIdRange OPTIONAL, -- Cond CSG + ..., + lateNonCriticalExtension OCTET STRING OPTIONAL +} + +IntraFreqNeighCellList ::= SEQUENCE (SIZE (1..maxCellIntra)) OF IntraFreqNeighCellInfo + +IntraFreqNeighCellInfo ::= SEQUENCE { + physCellId PhysCellId, + q-OffsetCell Q-OffsetRange, + ... +} + +IntraFreqBlackCellList ::= SEQUENCE (SIZE (1..maxCellBlack)) OF PhysCellIdRange + +-- ASN1STOP + +SystemInformationBlockType4 field descriptions csg-PhysCellIdRange +Set of physical cell identities reserved for CSG cells on the frequency on which this field was received. The received csg-PhysCellIdRange applies if less than 24 hours has elapsed since it was received and the UE is camped on a cell of the same primary PLMN where this field was received. The 3 hour validity restriction (section 5.2.1.3) does not apply to this field. The UE shall not apply any stored csg-PhysCellIdRange when it is in any cell selection state defined in TS 36.304 [4]. intraFreqBlackCellList +List of blacklisted intra-frequency neighbouring cells. intraFreqNeighbCellList +List of intra-frequency neighbouring cells with specific cell re-selection parameters. q-OffsetCell +Parameter “Qoffsets,n” in TS 36.304 [4]. +Conditional presence Explanation CSG This field is optional, need OP, for non-CSG cells, and mandatory for CSG cells. +– SystemInformationBlockType5 +The IE SystemInformationBlockType5 contains information relevant only for inter-frequency cell re-selection i.e. information about other EUTRA frequencies and inter-frequency neighbouring cells relevant for cell re-selection. The IE includes cell re-selection parameters common for a frequency as well as cell specific re-selection parameters. +SystemInformationBlockType5 information element +-- ASN1START + +SystemInformationBlockType5 ::= SEQUENCE { + interFreqCarrierFreqList InterFreqCarrierFreqList, + ..., + lateNonCriticalExtension OCTET STRING (CONTAINING SystemInformationBlockType5-v8h0-IEs) OPTIONAL, + [[ interFreqCarrierFreqList-v1250 InterFreqCarrierFreqList-v1250 OPTIONAL, -- Need OR + interFreqCarrierFreqListExt-r12 InterFreqCarrierFreqListExt-r12 OPTIONAL -- Need OR + ]] +} + +SystemInformationBlockType5-v8h0-IEs ::= SEQUENCE { + interFreqCarrierFreqList-v8h0 SEQUENCE (SIZE (1..maxFreq)) OF InterFreqCarrierFreqInfo-v8h0 OPTIONAL, -- Need OP + nonCriticalExtension SystemInformationBlockType5-v9e0-IEs OPTIONAL +} + +SystemInformationBlockType5-v9e0-IEs ::= SEQUENCE { + interFreqCarrierFreqList-v9e0 SEQUENCE (SIZE (1..maxFreq)) OF InterFreqCarrierFreqInfo-v9e0 OPTIONAL, -- Need OR + nonCriticalExtension +SEQUENCE {} OPTIONAL +} + +InterFreqCarrierFreqList ::= SEQUENCE (SIZE (1..maxFreq)) OF InterFreqCarrierFreqInfo + +InterFreqCarrierFreqList-v1250 ::= SEQUENCE (SIZE (1.. maxFreq)) OF InterFreqCarrierFreqInfo-v1250 + +InterFreqCarrierFreqListExt-r12 ::= SEQUENCE (SIZE (1.. maxFreq)) OF InterFreqCarrierFreqInfo-r12 + +InterFreqCarrierFreqInfo ::= SEQUENCE { + dl-CarrierFreq ARFCN-ValueEUTRA, + q-RxLevMin Q-RxLevMin, + p-Max P-Max OPTIONAL, -- Need OP + t-ReselectionEUTRA T-Reselection, + t-ReselectionEUTRA-SF SpeedStateScaleFactors OPTIONAL, -- Need OP + threshX-High ReselectionThreshold, + threshX-Low ReselectionThreshold, + allowedMeasBandwidth AllowedMeasBandwidth, + presenceAntennaPort1 PresenceAntennaPort1, + cellReselectionPriority CellReselectionPriority OPTIONAL, -- Need OP + neighCellConfig NeighCellConfig, + q-OffsetFreq Q-OffsetRange DEFAULT dB0, + interFreqNeighCellList InterFreqNeighCellList OPTIONAL, -- Need OR + interFreqBlackCellList InterFreqBlackCellList OPTIONAL, -- Need OR + ..., + [[ q-QualMin-r9 Q-QualMin-r9 OPTIONAL, -- Need OP + threshX-Q-r9 SEQUENCE { + threshX-HighQ-r9 ReselectionThresholdQ-r9, + threshX-LowQ-r9 ReselectionThresholdQ-r9 + } OPTIONAL -- Cond RSRQ + ]], + [[ q-QualMinWB-r11 Q-QualMin-r9 OPTIONAL -- Cond WB-RSRQ + ]] +} + +InterFreqCarrierFreqInfo-v8h0 ::= SEQUENCE { + multiBandInfoList MultiBandInfoList OPTIONAL -- Need OR +} + +InterFreqCarrierFreqInfo-v9e0 ::= SEQUENCE { + dl-CarrierFreq-v9e0 ARFCN-ValueEUTRA-v9e0 OPTIONAL, -- Cond dl-FreqMax + multiBandInfoList-v9e0 MultiBandInfoList-v9e0 OPTIONAL -- Need OR +} + +InterFreqCarrierFreqInfo-v1250 ::= SEQUENCE { + reducedMeasPerformance-r12 ENUMERATED {true} OPTIONAL, -- Need OP + q-QualMinRSRQ-OnAllSymbols-r12 Q-QualMin-r9 OPTIONAL -- Cond RSRQ2 +} + +InterFreqCarrierFreqInfo-r12 ::= SEQUENCE { + dl-CarrierFreq-r12 ARFCN-ValueEUTRA-r9, + q-RxLevMin-r12 Q-RxLevMin, + p-Max-r12 P-Max OPTIONAL, -- Need OP + t-ReselectionEUTRA-r12 T-Reselection, + t-ReselectionEUTRA-SF-r12 SpeedStateScaleFactors OPTIONAL, -- Need OP + threshX-High-r12 ReselectionThreshold, + threshX-Low-r12 ReselectionThreshold, + allowedMeasBandwidth-r12 AllowedMeasBandwidth, + presenceAntennaPort1-r12 PresenceAntennaPort1, + cellReselectionPriority-r12 CellReselectionPriority OPTIONAL, -- Need OP + neighCellConfig-r12 NeighCellConfig, + q-OffsetFreq-r12 Q-OffsetRange DEFAULT dB0, + interFreqNeighCellList-r12 InterFreqNeighCellList OPTIONAL, -- Need OR + interFreqBlackCellList-r12 InterFreqBlackCellList OPTIONAL, -- Need OR + q-QualMin-r12 Q-QualMin-r9 OPTIONAL, -- Need OP + threshX-Q-r12 SEQUENCE { + threshX-HighQ-r12 ReselectionThresholdQ-r9, + threshX-LowQ-r12 ReselectionThresholdQ-r9 + } OPTIONAL, -- Cond RSRQ + q-QualMinWB-r12 Q-QualMin-r9 OPTIONAL, -- Cond WB-RSRQ + multiBandInfoList-r12 MultiBandInfoList-r11 OPTIONAL, -- Need OR + reducedMeasPerformance-r12 ENUMERATED {true} OPTIONAL, -- Need OP + q-QualMinRSRQ-OnAllSymbols-r12 Q-QualMin-r9 OPTIONAL, -- Cond RSRQ2 +... +} + +InterFreqNeighCellList ::= SEQUENCE (SIZE (1..maxCellInter)) OF InterFreqNeighCellInfo + +InterFreqNeighCellInfo ::= SEQUENCE { + physCellId PhysCellId, + q-OffsetCell Q-OffsetRange +} + +InterFreqBlackCellList ::= SEQUENCE (SIZE (1..maxCellBlack)) OF PhysCellIdRange + +-- ASN1STOP + +SystemInformationBlockType5 field descriptions interFreqBlackCellList +List of blacklisted inter-frequency neighbouring cells. interFreqCarrierFreqList +List of neighbouring inter-frequencies. E-UTRAN does not configure more than one entry for the same physical frequency regardless of the E-ARFCN used to indicate this. If E-UTRAN includes interFreqCarrierFreqList-v8h0, interFreqCarrierFreqList-v9e0 and/or InterFreqCarrierFreqList-v1250, it includes the same number of entries, and listed in the same order, as in interFreqCarrierFreqList (i.e. without suffix). See Annex D for more descriptions. interFreqCarrierFreqListExt +List of additional neighbouring inter-frequencies, i.e. extending the size of the inter-frequency carrier list using the general principles specified in 5.1.2. E-UTRAN does not configure more than one entry for the same physical frequency regardless of the E-ARFCN used to indicate this. EUTRAN may include interFreqCarrierFreqListExt even if interFreqCarrierFreqList (i.e without suffix) does not include maxFreq entries. interFreqNeighCellList +List of inter-frequency neighbouring cells with specific cell re-selection parameters. multiBandInfoList +Indicates the list of frequency bands in addition to the band represented by dl-CarrierFreq for which cell reselection parameters are common. E-UTRAN indicates at most maxMultiBands frequency bands (i.e. the total number of entries across both multiBandInfoList and multiBandInfoList-v9e0 is below this limit). p-Max +Value applicable for the neighbouring E-UTRA cells on this carrier frequency. If absent the UE applies the maximum power according to the UE capability. q-OffsetCell +Parameter “Qoffsets,n” in TS 36.304 [4]. q-OffsetFreq +Parameter “Qoffsetfrequency” in TS 36.304 [4]. q-QualMin +Parameter “Qqualmin” in TS 36.304 [4]. If the field is not present, the UE applies the (default) value of negative infinity for Qqualmin. NOTE 1. q-QualMinRSRQ-OnAllSymbols +If this field is present and supported by the UE, the UE shall, when performing RSRQ measurements, perform RSRQ measurement on all OFDM symbols in accordance with TS 36.214 [48]. NOTE 1. q-QualMinWB +If this field is present and supported by the UE, the UE shall, when performing RSRQ measurements, use a wider bandwidth in accordance with TS 36.133 [16]. NOTE 1. reducedMeasPerformance +Value TRUE indicates that the neighbouring inter-frequency is configured for reduced measurement performance, see TS 36.133 [16]. If the field is not included, the neighbouring inter-frequency is configured for normal measurement performance, see TS 36.133 [16]. threshX-High +Parameter “ThreshX, HighP” in TS 36.304 [4]. threshX-HighQ +Parameter “ThreshX, HighQ” in TS 36.304 [4]. threshX-Low +Parameter “ThreshX, LowP” in TS 36.304 [4]. threshX-LowQ +Parameter “ThreshX, LowQ” in TS 36.304 [4]. t-ReselectionEUTRA +Parameter “TreselectionEUTRA” in TS 36.304 [4]. t-ReselectionEUTRA-SF +Parameter “Speed dependent ScalingFactor for TreselectionEUTRA” in TS 36.304 [4]. If the field is not present, the UE behaviour is specified in TS 36.304 [4]. +NOTE 1: The value the UE applies for parameter “Qqualmin” in TS 36.304 [4] depends on the q-QualMin fields signalled by E-UTRAN and supported by the UE. In case multiple candidate options are available, the UE shall select the highest priority candidate option according to the priority order indicated by the following table (top row is highest priority). +q-QualMinRSRQ-OnAllSymbols q-QualMinWB Value of parameter “Qqualmin” in TS 36.304 [4] Included Included q-QualMinRSRQ-OnAllSymbols – (q-QualMin – q-QualMinWB) Included Not included q-QualMinRSRQ-OnAllSymbols Not included Included q-QualMinWB Not included Not included q-QualMin +Conditional presence Explanation dl-FreqMax The field is mandatory present if, for the corresponding entry in InterFreqCarrierFreqList (i.e. without suffix), dl-CarrierFreq (i.e. without suffix) is set to maxEARFCN. Otherwise the field is not present. RSRQ The field is mandatory present if threshServingLowQ is present in systemInformationBlockType3; otherwise it is not present. RSRQ2 The field is mandatory present for all EUTRA carriers listed in SIB5 if q-QualMinRSRQ-OnAllSymbols is present in SIB3; otherwise it is not present and the UE shall delete any existing value for this field. WB-RSRQ The field is optionally present, need OP if the measurement bandwidth indicated by allowedMeasBandwidth is 50 resource blocks or larger; otherwise it is not present. +– SystemInformationBlockType6 +The IE SystemInformationBlockType6 contains information relevant only for inter-RAT cell re-selection i.e. information about UTRA frequencies and UTRA neighbouring cells relevant for cell re-selection. The IE includes cell re-selection parameters common for a frequency. +SystemInformationBlockType6 information element +-- ASN1START + +SystemInformationBlockType6 ::= SEQUENCE { + carrierFreqListUTRA-FDD CarrierFreqListUTRA-FDD OPTIONAL, -- Need OR + carrierFreqListUTRA-TDD CarrierFreqListUTRA-TDD OPTIONAL, -- Need OR + t-ReselectionUTRA T-Reselection, + t-ReselectionUTRA-SF SpeedStateScaleFactors OPTIONAL, -- Need OP + ..., + lateNonCriticalExtension OCTET STRING (CONTAINING SystemInformationBlockType6-v8h0-IEs) OPTIONAL, + [[ carrierFreqListUTRA-FDD-v1250 SEQUENCE (SIZE (1..maxUTRA-FDD-Carrier)) OF + CarrierFreqInfoUTRA-v1250 OPTIONAL, -- Cond UTRA-FDD + carrierFreqListUTRA-TDD-v1250 SEQUENCE (SIZE (1..maxUTRA-TDD-Carrier)) OF + CarrierFreqInfoUTRA-v1250 OPTIONAL, -- Cond UTRA-TDD + carrierFreqListUTRA-FDD-Ext-r12 CarrierFreqListUTRA-FDD-Ext-r12 OPTIONAL, -- Cond UTRA-FDD + carrierFreqListUTRA-TDD-Ext-r12 CarrierFreqListUTRA-TDD-Ext-r12 OPTIONAL -- Cond UTRA-TDD + ]] +} + +SystemInformationBlockType6-v8h0-IEs ::= SEQUENCE { + carrierFreqListUTRA-FDD-v8h0 SEQUENCE (SIZE (1..maxUTRA-FDD-Carrier)) OF CarrierFreqInfoUTRA-FDD-v8h0 OPTIONAL, -- Cond UTRA-FDD + nonCriticalExtension +SEQUENCE {} OPTIONAL +} + +CarrierFreqInfoUTRA-v1250 ::= SEQUENCE { + reducedMeasPerformance-r12 ENUMERATED {true} OPTIONAL -- Need OP +} + +CarrierFreqListUTRA-FDD ::= SEQUENCE (SIZE (1..maxUTRA-FDD-Carrier)) OF CarrierFreqUTRA-FDD + +CarrierFreqUTRA-FDD ::= SEQUENCE { + carrierFreq ARFCN-ValueUTRA, + cellReselectionPriority CellReselectionPriority OPTIONAL, -- Need OP + threshX-High ReselectionThreshold, + threshX-Low ReselectionThreshold, + q-RxLevMin INTEGER (-60..-13), + p-MaxUTRA INTEGER (-50..33), + q-QualMin INTEGER (-24..0), + ..., + [[ threshX-Q-r9 SEQUENCE { + threshX-HighQ-r9 ReselectionThresholdQ-r9, + threshX-LowQ-r9 ReselectionThresholdQ-r9 + } OPTIONAL -- Cond RSRQ + ]] +} + +CarrierFreqInfoUTRA-FDD-v8h0 ::= SEQUENCE { + multiBandInfoList SEQUENCE (SIZE (1..maxMultiBands)) OF FreqBandIndicator-UTRA-FDD OPTIONAL -- Need OR +} + +CarrierFreqListUTRA-FDD-Ext-r12 ::= SEQUENCE (SIZE (1..maxUTRA-FDD-Carrier)) OF + CarrierFreqUTRA-FDD-Ext-r12 + +CarrierFreqUTRA-FDD-Ext-r12 ::= SEQUENCE { + carrierFreq-r12 ARFCN-ValueUTRA, + cellReselectionPriority-r12 CellReselectionPriority OPTIONAL, -- Need OP + threshX-High-r12 ReselectionThreshold, + threshX-Low-r12 ReselectionThreshold, + q-RxLevMin-r12 INTEGER (-60..-13), + p-MaxUTRA-r12 INTEGER (-50..33), + q-QualMin-r12 INTEGER (-24..0), + threshX-Q-r12 SEQUENCE { + threshX-HighQ-r12 ReselectionThresholdQ-r9, + threshX-LowQ-r12 ReselectionThresholdQ-r9 + } OPTIONAL, -- Cond RSRQ + multiBandInfoList-r12 SEQUENCE (SIZE (1..maxMultiBands)) OF FreqBandIndicator-UTRA-FDD OPTIONAL, -- Need OR + reducedMeasPerformance-r12 ENUMERATED {true} OPTIONAL, -- Need OP + ... +} + +CarrierFreqListUTRA-TDD ::= SEQUENCE (SIZE (1..maxUTRA-TDD-Carrier)) OF CarrierFreqUTRA-TDD + +CarrierFreqUTRA-TDD ::= SEQUENCE { + carrierFreq ARFCN-ValueUTRA, + cellReselectionPriority CellReselectionPriority OPTIONAL, -- Need OP + threshX-High ReselectionThreshold, + threshX-Low ReselectionThreshold, + q-RxLevMin INTEGER (-60..-13), + p-MaxUTRA INTEGER (-50..33), + ... +} + +CarrierFreqListUTRA-TDD-Ext-r12 ::= SEQUENCE (SIZE (1..maxUTRA-TDD-Carrier)) OF + CarrierFreqUTRA-TDD-r12 + +CarrierFreqUTRA-TDD-r12 ::= SEQUENCE { + carrierFreq-r12 ARFCN-ValueUTRA, + cellReselectionPriority-r12 CellReselectionPriority OPTIONAL, -- Need OP + threshX-High-r12 ReselectionThreshold, + threshX-Low-r12 ReselectionThreshold, + q-RxLevMin-r12 INTEGER (-60..-13), + p-MaxUTRA-r12 INTEGER (-50..33), + reducedMeasPerformance-r12 ENUMERATED {true} OPTIONAL, -- Need OP + ... +} + +FreqBandIndicator-UTRA-FDD ::= INTEGER (1..86) + +-- ASN1STOP + +SystemInformationBlockType6 field descriptions carrierFreqListUTRA-FDD +List of carrier frequencies of UTRA FDD. E-UTRAN does not configure more than one entry for the same physical frequency regardless of the ARFCN used to indicate this. If E-UTRAN includes carrierFreqListUTRA-FDD-v8h0 and/or carrierFreqListUTRA-FDD-v1250, it includes the same number of entries, and listed in the same order, as in carrierFreqListUTRA-FDD (i.e. without suffix). See Annex D for more descriptions. carrierFreqListUTRA-FDD-Ext +List of additional carrier frequencies of UTRA FDD. E-UTRAN does not configure more than one entry for the same physical frequency regardless of the ARFCN used to indicate this. EUTRAN may include carrierFreqListUTRA-FDD-Ext even if carrierFreqListUTRA-FDD (i.e without suffix) does not include maxUTRA-FDD-Carrier entries. carrierFreqListUTRA-TDD +List of carrier frequencies of UTRA TDD. E-UTRAN does not configure more than one entry for the same physical frequency regardless of the ARFCN used to indicate this If E-UTRAN includes carrierFreqListUTRA-TDD-v1250, it includes the same number of entries, and listed in the same order, as in carrierFreqListUTRA-TDD (i.e. without suffix). carrierFreqListUTRA-TDD-Ext +List of additional carrier frequencies of UTRA TDD. E-UTRAN does not configure more than one entry for the same physical frequency regardless of the ARFCN used to indicate this. EUTRAN may include carrierFreqListUTRA-TDD-Ext even if carrierFreqListUTRA-TDD (i.e without suffix) does not include maxUTRA-TDD-Carrier entries. multiBandInfoList +Indicates the list of frequency bands in addition to the band represented by carrierFreq in the CarrierFreqUTRA-FDD for which UTRA cell reselection parameters are common. p-MaxUTRA +The maximum allowed transmission power on the (uplink) carrier frequency, see TS 25.304 [40]. In dBm q-QualMin +Parameter “Qqualmin” in TS 25.304 [40]. Actual value = IE value [dB]. q-RxLevMin +Parameter “Qrxlevmin” in TS 25.304 [40]. Actual value = IE value * 2+1 [dBm]. reducedMeasPerformance +Value TRUE indicates that the UTRA carrier frequency is configured for reduced measurement performance, see TS 36.133 [16]. If the field is not included, the UTRA carrier frequency is configured for normal measurement performance, see TS 36.133 [16]. t-ReselectionUTRA +Parameter “TreselectionUTRAN” in TS 36.304 [4]. t-ReselectionUTRA-SF +Parameter “Speed dependent ScalingFactor for TreselectionUTRA” in TS 36.304 [4]. If the field is not present, the UE behaviour is specified in TS 36.304 [4]. threshX-High +Parameter “ThreshX, HighP” in TS 36.304 [4]. threshX-HighQ +Parameter “ThreshX, HighQ” in TS 36.304 [4]. threshX-Low + Parameter “ThreshX, LowP” in TS 36.304 [4]. threshX-LowQ + Parameter “ThreshX, LowQ” in TS 36.304 [4]. +Conditional presence Explanation RSRQ The field is mandatory present if the threshServingLowQ is present in systemInformationBlockType3; otherwise it is not present. UTRA-FDD The field is optionally present, need OR, if the carrierFreqListUTRA-FDD is present. Otherwise it is not present. UTRA-TDD The field is optionally present, need OR, if the carrierFreqListUTRA-TDD is present. Otherwise it is not present. +– SystemInformationBlockType7 +The IE SystemInformationBlockType7 contains information relevant only for inter-RAT cell re-selection i.e. information about GERAN frequencies relevant for cell re-selection. The IE includes cell re-selection parameters for each frequency. +SystemInformationBlockType7 information element +-- ASN1START + +SystemInformationBlockType7 ::= SEQUENCE { + t-ReselectionGERAN T-Reselection, + t-ReselectionGERAN-SF SpeedStateScaleFactors OPTIONAL, -- Need OR + carrierFreqsInfoList CarrierFreqsInfoListGERAN OPTIONAL, -- Need OR + ..., + lateNonCriticalExtension OCTET STRING OPTIONAL +} + +CarrierFreqsInfoListGERAN ::= SEQUENCE (SIZE (1..maxGNFG)) OF CarrierFreqsInfoGERAN + +CarrierFreqsInfoGERAN ::= SEQUENCE { + carrierFreqs CarrierFreqsGERAN, + commonInfo SEQUENCE { + cellReselectionPriority CellReselectionPriority OPTIONAL, -- Need OP + ncc-Permitted BIT STRING (SIZE (8)), + q-RxLevMin INTEGER (0..45), + p-MaxGERAN INTEGER (0..39) OPTIONAL, -- Need OP + threshX-High ReselectionThreshold, + threshX-Low ReselectionThreshold + }, + ... +} + +-- ASN1STOP + +SystemInformationBlockType7 field descriptions carrierFreqs +The list of GERAN carrier frequencies organised into one group of GERAN carrier frequencies. carrierFreqsInfoList +Provides a list of neighbouring GERAN carrier frequencies, which may be monitored for neighbouring GERAN cells. The GERAN carrier frequencies are organised in groups and the cell reselection parameters are provided per group of GERAN carrier frequencies. commonInfo +Defines the set of cell reselection parameters for the group of GERAN carrier frequencies. ncc-Permitted +Field encoded as a bit map, where bit N is set to "0" if a BCCH carrier with NCC = N-1 is not permitted for monitoring and set to "1" if the BCCH carrier with NCC = N-1 is permitted for monitoring; N = 1 to 8; bit 1 of the bitmap is the leading bit of the bit string. p-MaxGERAN +Maximum allowed transmission power for GERAN on an uplink carrier frequency, see TS 45.008 [28]. Value in dBm. Applicable for the neighbouring GERAN cells on this carrier frequency. If pmaxGERAN is absent, the maximum power according to the UE capability is used. q-RxLevMin +Parameter “Qrxlevmin” in TS 36.304 [1], minimum required RX level in the GSM cell. The actual value of Qrxlevmin in dBm = (IE value * 2) ? 115. threshX-High +Parameter “ThreshX, HighP” in TS 36.304 [4]. threshX-Low +Parameter “ThreshX, LowP” in TS 36.304 [4]. t-ReselectionGERAN +Parameter “TreselectionGERAN” in TS 36.304 [4]. t-ReselectionGERAN-SF +Parameter “Speed dependent ScalingFactor for TreselectionGERAN” in TS 36.304 [4]. If the field is not present, the UE behaviour is specified in TS 36.304 [4]. +– SystemInformationBlockType8 +The IE SystemInformationBlockType8 contains information relevant only for inter-RAT cell re-selection i.e. information about CDMA2000 frequencies and CDMA2000 neighbouring cells relevant for cell re-selection. The IE includes cell re-selection parameters common for a frequency as well as cell specific re-selection parameters. +SystemInformationBlockType8 information element +-- ASN1START + +SystemInformationBlockType8 ::= SEQUENCE { + systemTimeInfo SystemTimeInfoCDMA2000 OPTIONAL, -- Need OR + searchWindowSize INTEGER (0..15) OPTIONAL, -- Need OR + parametersHRPD SEQUENCE { + preRegistrationInfoHRPD PreRegistrationInfoHRPD, + cellReselectionParametersHRPD CellReselectionParametersCDMA2000 OPTIONAL -- Need OR + } OPTIONAL, -- Need OR + parameters1XRTT SEQUENCE { + csfb-RegistrationParam1XRTT CSFB-RegistrationParam1XRTT OPTIONAL, -- Need OP + longCodeState1XRTT BIT STRING (SIZE (42)) OPTIONAL, -- Need OR + cellReselectionParameters1XRTT CellReselectionParametersCDMA2000 OPTIONAL -- Need OR + } OPTIONAL, -- Need OR + ..., + lateNonCriticalExtension OCTET STRING OPTIONAL, + [[ csfb-SupportForDualRxUEs-r9 BOOLEAN OPTIONAL, -- Need OR + cellReselectionParametersHRPD-v920 CellReselectionParametersCDMA2000-v920 OPTIONAL, -- Cond NCL-HRPD + cellReselectionParameters1XRTT-v920 CellReselectionParametersCDMA2000-v920 OPTIONAL, -- Cond NCL-1XRTT + csfb-RegistrationParam1XRTT-v920 CSFB-RegistrationParam1XRTT-v920 OPTIONAL, -- Cond REG-1XRTT + ac-BarringConfig1XRTT-r9 AC-BarringConfig1XRTT-r9 OPTIONAL -- Cond REG-1XRTT + ]], + [[ csfb-DualRxTxSupport-r10 ENUMERATED {true} OPTIONAL -- Cond REG-1XRTT + ]], + [[ sib8-PerPLMN-List-r11 SIB8-PerPLMN-List-r11 OPTIONAL -- Need OR + ]] +} + +CellReselectionParametersCDMA2000 ::= SEQUENCE { + bandClassList BandClassListCDMA2000, + neighCellList NeighCellListCDMA2000, + t-ReselectionCDMA2000 T-Reselection, + t-ReselectionCDMA2000-SF SpeedStateScaleFactors OPTIONAL -- Need OP +} + +CellReselectionParametersCDMA2000-r11 ::= SEQUENCE { + bandClassList BandClassListCDMA2000, + neighCellList-r11 SEQUENCE (SIZE (1..16)) OF NeighCellCDMA2000-r11, + t-ReselectionCDMA2000 T-Reselection, + t-ReselectionCDMA2000-SF SpeedStateScaleFactors OPTIONAL -- Need OP +} + +CellReselectionParametersCDMA2000-v920 ::= SEQUENCE { + neighCellList-v920 NeighCellListCDMA2000-v920 +} + +NeighCellListCDMA2000 ::= SEQUENCE (SIZE (1..16)) OF NeighCellCDMA2000 + +NeighCellCDMA2000 ::= SEQUENCE { + bandClass BandclassCDMA2000, + neighCellsPerFreqList NeighCellsPerBandclassListCDMA2000 +} + +NeighCellCDMA2000-r11 ::= SEQUENCE { + bandClass BandclassCDMA2000, + neighFreqInfoList-r11 SEQUENCE (SIZE (1..16)) OF NeighCellsPerBandclassCDMA2000-r11 +} + +NeighCellsPerBandclassListCDMA2000 ::= SEQUENCE (SIZE (1..16)) OF NeighCellsPerBandclassCDMA2000 + +NeighCellsPerBandclassCDMA2000 ::= SEQUENCE { + arfcn ARFCN-ValueCDMA2000, + physCellIdList PhysCellIdListCDMA2000 +} + +NeighCellsPerBandclassCDMA2000-r11 ::= SEQUENCE { + arfcn ARFCN-ValueCDMA2000, + physCellIdList-r11 SEQUENCE (SIZE (1..40)) OF PhysCellIdCDMA2000 +} + +NeighCellListCDMA2000-v920 ::= SEQUENCE (SIZE (1..16)) OF NeighCellCDMA2000-v920 + +NeighCellCDMA2000-v920 ::= SEQUENCE { + neighCellsPerFreqList-v920 NeighCellsPerBandclassListCDMA2000-v920 +} + +NeighCellsPerBandclassListCDMA2000-v920 ::= SEQUENCE (SIZE (1..16)) OF NeighCellsPerBandclassCDMA2000-v920 + +NeighCellsPerBandclassCDMA2000-v920 ::= SEQUENCE { + physCellIdList-v920 PhysCellIdListCDMA2000-v920 +} + +PhysCellIdListCDMA2000 ::= SEQUENCE (SIZE (1..16)) OF PhysCellIdCDMA2000 + +PhysCellIdListCDMA2000-v920 ::= SEQUENCE (SIZE (0..24)) OF PhysCellIdCDMA2000 + +BandClassListCDMA2000 ::= SEQUENCE (SIZE (1..maxCDMA-BandClass)) OF BandClassInfoCDMA2000 + +BandClassInfoCDMA2000 ::= SEQUENCE { + bandClass BandclassCDMA2000, + cellReselectionPriority CellReselectionPriority OPTIONAL, -- Need OP + threshX-High INTEGER (0..63), + threshX-Low INTEGER (0..63), + ... +} + +AC-BarringConfig1XRTT-r9 ::= SEQUENCE { + ac-Barring0to9-r9 INTEGER (0..63), + ac-Barring10-r9 INTEGER (0..7), + ac-Barring11-r9 INTEGER (0..7), + ac-Barring12-r9 INTEGER (0..7), + ac-Barring13-r9 INTEGER (0..7), + ac-Barring14-r9 INTEGER (0..7), + ac-Barring15-r9 INTEGER (0..7), + ac-BarringMsg-r9 INTEGER (0..7), + ac-BarringReg-r9 INTEGER (0..7), + ac-BarringEmg-r9 INTEGER (0..7) +} + +SIB8-PerPLMN-List-r11 ::= SEQUENCE (SIZE (1..maxPLMN-r11)) OF SIB8-PerPLMN-r11 + +SIB8-PerPLMN-r11 ::= SEQUENCE { + plmn-Identity-r11 INTEGER (1..maxPLMN-r11), + parametersCDMA2000-r11 CHOICE { + explicitValue ParametersCDMA2000-r11, + defaultValue NULL + } +} + +ParametersCDMA2000-r11 ::= SEQUENCE { + systemTimeInfo-r11 CHOICE { + explicitValue SystemTimeInfoCDMA2000, + defaultValue NULL + } OPTIONAL, -- Need OR + searchWindowSize-r11 INTEGER (0..15), + parametersHRPD-r11 SEQUENCE { + preRegistrationInfoHRPD-r11 PreRegistrationInfoHRPD, + cellReselectionParametersHRPD-r11 CellReselectionParametersCDMA2000-r11 OPTIONAL -- Need OR + } OPTIONAL, -- Need OR + parameters1XRTT-r11 SEQUENCE { + csfb-RegistrationParam1XRTT-r11 CSFB-RegistrationParam1XRTT OPTIONAL, -- Need OP + csfb-RegistrationParam1XRTT-Ext-r11 CSFB-RegistrationParam1XRTT-v920 OPTIONAL, -- Cond REG-1XRTT-PerPLMN + longCodeState1XRTT-r11 BIT STRING (SIZE (42)) OPTIONAL, -- Cond PerPLMN-LC + cellReselectionParameters1XRTT-r11 CellReselectionParametersCDMA2000-r11 OPTIONAL, -- Need OR + ac-BarringConfig1XRTT-r11 AC-BarringConfig1XRTT-r9 OPTIONAL, -- Cond REG-1XRTT-PerPLMN + csfb-SupportForDualRxUEs-r11 BOOLEAN OPTIONAL, -- Need OR + csfb-DualRxTxSupport-r11 ENUMERATED {true} OPTIONAL -- Cond REG-1XRTT-PerPLMN + } OPTIONAL, -- Need OR + ... +} + +-- ASN1STOP + +SystemInformationBlockType8 field descriptions ac-BarringConfig1XRTT +Contains the access class barring parameters the UE uses to calculate the access class barring factor, see C.S0097 [53]. ac-Barring0to9 +Parameter used for calculating the access class barring factor for access overload classes 0 through 9. It is the parameter “PSIST” in C.S0004 [34] for access overload classes 0 through 9. ac-BarringEmg +Parameter used for calculating the access class barring factor for emergency calls and emergency message transmissions for access overload classes 0 through 9. It is the parameter “PSIST_EMG” in C.S0004 [34]. ac-BarringMsg +Parameter used for modifying the access class barring factor for message transmissions. It is the parameter “MSG_PSIST” in C.S0004 [34]. ac-BarringN +Parameter used for calculating the access class barring factor for access overload class N (N = 10 to 15). It is the parameter “PSIST” in C.S0004 [34] for access overload class N. ac-BarringReg +Parameter used for modifying the access class barring factor for autonomous registrations. It is the parameter “REG_PSIST” in C.S0004 [34]. bandClass +Identifies the Frequency Band in which the Carrier can be found. Details can be found in C.S0057 [24, Table 1.5]. bandClassList +List of CDMA2000 frequency bands. cellReselectionParameters1XRTT +Cell reselection parameters applicable only to CDMA2000 1xRTT system. cellReselectionParameters1XRTT-Ext +Cell reselection parameters applicable for cell reselection to CDMA2000 1XRTT system. cellReselectionParameters1XRTT-v920 +Cell reselection parameters applicable for cell reselection to CDMA2000 1XRTT system. The field is not present if cellReselectionParameters1XRTT is not present; otherwise it is optionally present. cellReselectionParametersHRPD +Cell reselection parameters applicable for cell reselection to CDMA2000 HRPD system cellReselectionParametersHRPD-Ext +Cell reselection parameters applicable for cell reselection to CDMA2000 HRPD system. cellReselectionParametersHRPD-v920 +Cell reselection parameters applicable for cell reselection to CDMA2000 HRPD system. The field is not present if cellReselectionParametersHRPD is not present; otherwise it is optionally present. csfb-DualRxTxSupport +Value TRUE indicates that the network supports dual Rx/Tx enhanced 1xCSFB, which enables UEs capable of dual Rx/Tx enhanced 1xCSFB to switch off their 1xRTT receiver/transmitter while camped in E-UTRAN [51]. csfb-RegistrationParam1XRTT +Contains the parameters the UE will use to determine if it should perform a CDMA2000 1xRTT Registration/Re-Registration. This field is included if either CSFB or enhanced CS fallback to CDMA2000 1xRTT is supported. csfb-SupportForDualRxUEs +Value TRUE indicates that the network supports dual Rx CSFB [51]. longCodeState1XRTT +The state of long code generation registers in CDMA2000 1XRTT system as defined in C.S0002 [12, Section 1.3] at ms, where t equals to the cdma-SystemTime. This field is required for SRVCC handover and enhanced CS fallback to CDMA2000 1xRTT operation. Otherwise this IE is not needed. This field is excluded when estimating changes in system information, i.e. changes of longCodeState1XRTT should neither result in system information change notifications nor in a modification of systemInfoValueTag in SIB1. neighCellList +List of CDMA2000 neighbouring cells. The total number of neighbouring cells in neighCellList for each RAT (1XRTT or HRPD) is limited to 32. neighCellList-v920 +Extended List of CDMA2000 neighbouring cells. The combined total number of CDMA2000 neighbouring cells in both neighCellList and neighCellList-v920 is limited to 32 for HRPD and 40 for 1xRTT. neighCellsPerFreqList +List of carrier frequencies and neighbour cell ids in each frequency within a CDMA2000 Band, see C.S0002 [12] or C.S0024 [26]. neighCellsPerFreqList-v920 +Extended list of neighbour cell ids, in the same CDMA2000 Frequency Band as the corresponding instance in “NeighCellListCDMA2000”. parameters1XRTT +Parameters applicable for interworking with CDMA2000 1XRTT system. parametersCDMA2000 +Provides the corresponding SIB8 parameters for the CDMA2000 network associated with the PLMN indicated in plmn-Identity. A choice is used to indicate whether for this PLMN the parameters are signalled explicitly or set to the (default) values common for all PLMNs i.e. the values not included in sib8-PerPLMN-List. parametersHRPD +Parameters applicable only for interworking with CDMA2000 HRPD systems. physCellIdList +Identifies the list of CDMA2000 cell ids, see C.S0002 [12] or C.S0024 [26]. physCellIdList-v920 +Extended list of CDMA2000 cell ids, in the same CDMA2000 ARFCN as the corresponding instance in “NeighCellsPerBandclassCDMA2000”. plmn-Identity +Indicates the PLMN associated with this CDMA2000 network. Value 1 indicates the PLMN listed 1st in plmn-IdentityList included in SIB1, value 2 indicates the PLMN listed 2nd in plmn-IdentityList included in SIB1 and so on. A PLMN which identity is not indicated in the sib8-PerPLMN-List, does not support inter-working with CDMA2000. preRegistrationInfoHRPD +The CDMA2000 HRPD Pre-Registration Information tells the UE if it should pre-register with the CDMA2000 HRPD network and identifies the Pre-registration zone to the UE. searchWindowSize +The search window size is a CDMA2000 parameter to be used to assist in searching for the neighbouring pilots. For values see C.S0005 [25, Table 2.6.6.2.1-1] and C.S0024 [26, Table 8.7.6.2-4]. This field is required for a UE with rx-ConfigHRPD= single and/ or rx-Config1XRTT= single to perform handover, cell re-selection, UE measurement based redirection and enhanced 1xRTT CS fallback from E-UTRAN to CDMA2000 according to this specification and TS 36.304 [4]. sib8-PerPLMN-List +This field provides the values for the interworking CDMA2000 networks corresponding, if any, to the UE’s RPLMN. systemTimeInfo +Information on CDMA2000 system time. This field is required for a UE with rx-ConfigHRPD= single and/ or rx-Config1XRTT= single to perform handover, cell re-selection, UE measurement based redirection and enhanced 1xRTT CS fallback from E-UTRAN to CDMA2000 according to this specification and TS 36.304 [4]. This field is excluded when estimating changes in system information, i.e. changes of systemTimeInfo should neither result in system information change notifications nor in a modification of systemInfoValueTag in SIB1. +For the field included in ParametersCDMA2000, a choice is used to indicate whether for this PLMN the parameters are signalled explicitly or set to the (default) value common for all PLMNs i.e. the value not included in sib8-PerPLMN-List. threshX-High +Parameter “ThreshX, HighP” in TS 36.304 [4]. This specifies the high threshold used in reselection towards this CDMA2000 band class expressed as an unsigned binary number equal to FLOOR (-2 x 10 x log10 Ec/Io) in units of 0.5 dB, as defined in C.S0005 [25]. threshX-Low +Parameter “ThreshX, LowP” in TS 36.304 [4]. This specifies the low threshold used in reselection towards this CDMA2000 band class expressed as an unsigned binary number equal to FLOOR (-2 x 10 x log10 Ec/Io) in units of 0.5 dB, as defined in C.S0005 [25]. t-ReselectionCDMA2000 +Parameter “TreselectionCDMA_HRPD” or “TreselectionCDMA_1xRTT” in TS 36.304 [4]. t-ReselectionCDMA2000-SF +Parameter “Speed dependent ScalingFactor for TreselectionCDMA-HRPD” or TreselectionCDMA-1xRTT” in TS 36.304 [4]. If the field is not present, the UE behaviour is specified in TS 36.304 [4]. +Conditional presence Explanation NCL-1XRTT The field is optional present, need OR, if cellReselectionParameters1xRTT is present; otherwise it is not present. NCL-HRPD The field is optional present, need OR, if cellReselectionParametersHRPD is present; otherwise it is not present. PerPLMN-LC The field is optional present, need OR, when systemTimeInfo is included in SIB8PerPLMN for this CDMA2000 network; otherwise it is not present. REG-1XRTT The field is optional present, need OR, if csfb-RegistrationParam1XRTT is present; otherwise it is not present. REG-1XRTT-PerPLMN The field is optional present, need OR, if csfb-RegistrationParam1XRTT is included in SIB8PerPLMN for this CDMA2000 network; otherwise it is not present. +– SystemInformationBlockType9 +The IE SystemInformationBlockType9 contains a home eNB name (HNB Name). +SystemInformationBlockType9 information element +-- ASN1START + +SystemInformationBlockType9 ::= SEQUENCE { + hnb-Name OCTET STRING (SIZE(1..48)) OPTIONAL, -- Need OR + ..., + lateNonCriticalExtension OCTET STRING OPTIONAL +} + +-- ASN1STOP + +SystemInformationBlockType9 field descriptions hnb-Name +Carries the name of the home eNB, coded in UTF-8 with variable number of bytes per character, see TS 22.011 [10]. +– SystemInformationBlockType10 +The IE SystemInformationBlockType10 contains an ETWS primary notification. +SystemInformationBlockType10 information element +-- ASN1START + +SystemInformationBlockType10 ::= SEQUENCE { + messageIdentifier BIT STRING (SIZE (16)), + serialNumber BIT STRING (SIZE (16)), + warningType OCTET STRING (SIZE (2)), + dummy OCTET STRING (SIZE (50)) OPTIONAL, -- Need OP + ..., + lateNonCriticalExtension OCTET STRING OPTIONAL +} + +-- ASN1STOP + +SystemInformationBlockType10 field descriptions messageIdentifier +Identifies the source and type of ETWS notification. The leading bit (which is equivalent to the leading bit of the equivalent IE defined in TS 36.413 [39, 9.2.1.44]) contains bit 7 of the first octet of the equivalent IE, defined in and encoded according to TS 23.041 [37, 9.4.3.2.1], while the trailing bit contains bit 0 of the second octet of the same equivalent IE. serialNumber +Identifies variations of an ETWS notification. The leading bit (which is equivalent to the leading bit of the equivalent IE defined in TS 36.413 [39, 9.2.1.45]) contains bit 7 of the first octet of the equivalent IE, defined in and encoded according to TS 23.041 [37, 9.4.3.2.2], while the trailing bit contains bit 0 of the second octet of the same equivalent IE. dummy +This field is not used in the specification. If received it shall be ignored by the UE. warningType +Identifies the warning type of the ETWS primary notification and provides information on emergency user alert and UE popup. The first octet (which is equivalent to the first octet of the equivalent IE defined in TS 36.413 [39, 9.2.1.50]) contains the first octet of the equivalent IE defined in and encoded according to TS 23.041 [37, 9.3.24], and so on. +– SystemInformationBlockType11 +The IE SystemInformationBlockType11 contains an ETWS secondary notification. +SystemInformationBlockType11 information element +-- ASN1START + +SystemInformationBlockType11 ::= SEQUENCE { + messageIdentifier BIT STRING (SIZE (16)), + serialNumber BIT STRING (SIZE (16)), + warningMessageSegmentType ENUMERATED {notLastSegment, lastSegment}, + warningMessageSegmentNumber INTEGER (0..63), + warningMessageSegment OCTET STRING, + dataCodingScheme OCTET STRING (SIZE (1)) OPTIONAL, -- Cond Segment1 + ..., + lateNonCriticalExtension OCTET STRING OPTIONAL +} + +-- ASN1STOP + +SystemInformationBlockType11 field descriptions dataCodingScheme +Identifies the alphabet/coding and the language applied variations of an ETWS notification. The octet (which is equivalent to the octet of the equivalent IE defined in TS 36.413 [39, 9.2.1.52]) contains the octet of the equivalent IE defined in TS 23.041 [37, 9.4.3.2.3] and encoded according to TS 23.038 [38]. messageIdentifier +Identifies the source and type of ETWS notification. The leading bit (which is equivalent to the leading bit of the equivalent IE defined in TS 36.413 [39, 9.2.1.44]) contains bit 7 of the first octet of the equivalent IE, defined in and encoded according to TS 23.041 [37, 9.4.3.2.1], while the trailing bit contains bit 0 of second octet of the same equivalent IE. serialNumber +Identifies variations of an ETWS notification. The leading bit (which is equivalent to the leading bit of the equivalent IE defined in TS 36.413 [39, 9.2.1.45]) contains bit 7 of the first octet of the equivalent IE, defined in and encoded according to TS 23.041 [37, 9.4.3.2.2], while the trailing bit contains bit 0 of second octet of the same equivalent IE. warningMessageSegment +Carries a segment of the Warning Message Contents IE defined in TS 36.413 [39, 9.2.1.53]. The first octet of the Warning Message Contents IE is equivalent to the first octet of the CB data IE defined in and encoded according to TS 23.041 [37, 9.4.2.2.5] and so on. warningMessageSegmentNumber +Segment number of the ETWS warning message segment contained in the SIB. A segment number of zero corresponds to the first segment, one corresponds to the second segment, and so on. warningMessageSegmentType +Indicates whether the included ETWS warning message segment is the last segment or not. +Conditional presence Explanation Segment1 The field is mandatory present in the first segment of SIB11, otherwise it is not present. +– SystemInformationBlockType12 +The IE SystemInformationBlockType12 contains a CMAS notification. +SystemInformationBlockType12 information element +-- ASN1START + +SystemInformationBlockType12-r9 ::= SEQUENCE { + messageIdentifier-r9 BIT STRING (SIZE (16)), + serialNumber-r9 BIT STRING (SIZE (16)), + warningMessageSegmentType-r9 ENUMERATED {notLastSegment, lastSegment}, + warningMessageSegmentNumber-r9 INTEGER (0..63), + warningMessageSegment-r9 OCTET STRING, + dataCodingScheme-r9 OCTET STRING (SIZE (1)) OPTIONAL, -- Cond Segment1 + lateNonCriticalExtension OCTET STRING OPTIONAL, + ... +} + +-- ASN1STOP + +SystemInformationBlockType12 field descriptions dataCodingScheme +Identifies the alphabet/coding and the language applied variations of a CMAS notification. The octet (which is equivalent to the octet of the equivalent IE defined in TS 36.413 [39, 9.2.1.52]) contains the octet of the equivalent IE defined in TS 23.041 [37, 9.4.3.2.3] and encoded according to TS 23.038 [38]. messageIdentifier +Identifies the source and type of CMAS notification. The leading bit (which is equivalent to the leading bit of the equivalent IE defined in TS 36.413 [39, 9.2.1.44]) contains bit 7 of the first octet of the equivalent IE, defined in and encoded according to TS 23.041 [37, 9.4.3.2.1], while the trailing bit contains bit 0 of second octet of the same equivalent IE. serialNumber +Identifies variations of a CMAS notification. The leading bit (which is equivalent to the leading bit of the equivalent IE defined in TS 36.413 [39, 9.2.1.45]) contains bit 7 of the first octet of the equivalent IE, defined in and encoded according to TS 23.041 [37, 9.4.3.2.2], while the trailing bit contains bit 0 of second octet of the same equivalent IE. warningMessageSegment +Carries a segment of the Warning Message Contents IE defined in TS 36.413 [39]. The first octet of the Warning Message Contents IE is equivalent to the first octet of the CB data IE defined in and encoded according to TS 23.041 [37, 9.4.2.2.5] and so on. warningMessageSegmentNumber +Segment number of the CMAS warning message segment contained in the SIB. A segment number of zero corresponds to the first segment, one corresponds to the second segment, and so on. warningMessageSegmentType +Indicates whether the included CMAS warning message segment is the last segment or not. +Conditional presence Explanation Segment1 The field is mandatory present in the first segment of SIB12, otherwise it is not present. +– SystemInformationBlockType13 +The IE SystemInformationBlockType13 contains the information required to acquire the MBMS control information associated with one or more MBSFN areas. +SystemInformationBlockType13 information element +-- ASN1START + +SystemInformationBlockType13-r9 ::= SEQUENCE { + mbsfn-AreaInfoList-r9 MBSFN-AreaInfoList-r9, + notificationConfig-r9 MBMS-NotificationConfig-r9, + lateNonCriticalExtension OCTET STRING OPTIONAL, + ... +} + +-- ASN1STOP + +– SystemInformationBlockType14 +The IE SystemInformationBlockType14 contains the EAB parameters. +SystemInformationBlockType14 information element +-- ASN1START + +SystemInformationBlockType14-r11 ::= SEQUENCE { + eab-Param-r11 CHOICE { + eab-Common-r11 EAB-Config-r11, + eab-PerPLMN-List-r11 SEQUENCE (SIZE (1..maxPLMN-r11)) OF EAB-ConfigPLMN-r11 + } OPTIONAL, -- Need OR + lateNonCriticalExtension OCTET STRING OPTIONAL, + ... +} + +EAB-ConfigPLMN-r11 ::= SEQUENCE { + eab-Config-r11 EAB-Config-r11 OPTIONAL -- Need OR +} + +EAB-Config-r11 ::= SEQUENCE { + eab-Category-r11 ENUMERATED {a, b, c}, + eab-BarringBitmap-r11 BIT STRING (SIZE (10)) +} + +-- ASN1STOP + +SystemInformationBlockType14 field descriptions eab-BarringBitmap +Extended access class barring for AC 0-9. The first/ leftmost bit is for AC 0, the second bit is for AC 1, and so on. eab-Category +Indicates the category of UEs for which EAB applies. Value a corresponds to all UEs, value b corresponds to the UEs that are neither in their HPLMN nor in a PLMN that is equivalent to it, and value c corresponds to the UEs that are neither in the PLMN listed as most preferred PLMN of the country where the UEs are roaming in the operator-defined PLMN selector list on the USIM, nor in their HPLMN nor in a PLMN that is equivalent to their HPLMN, see TS 22.011 [10]. eab-Common +The EAB parameters applicable for all PLMN(s). eab-PerPLMN-List +The EAB parameters per PLMN, listed in the same order as the PLMN(s) occur in plmn-IdentityList in SystemInformationBlockType1. +– SystemInformationBlockType15 +The IE SystemInformationBlockType15 contains the MBMS Service Area Identities (SAI) of the current and/ or neighbouring carrier frequencies. +SystemInformationBlockType15 information element +-- ASN1START + +SystemInformationBlockType15-r11 ::= SEQUENCE { + mbms-SAI-IntraFreq-r11 MBMS-SAI-List-r11 OPTIONAL, -- Need OR + mbms-SAI-InterFreqList-r11 MBMS-SAI-InterFreqList-r11 OPTIONAL, -- Need OR + lateNonCriticalExtension OCTET STRING OPTIONAL, + ..., + [[ mbms-SAI-InterFreqList-v1140 MBMS-SAI-InterFreqList-v1140 OPTIONAL -- Cond InterFreq + ]] +} + +MBMS-SAI-List-r11 ::= SEQUENCE (SIZE (1..maxSAI-MBMS-r11)) OF MBMS-SAI-r11 + +MBMS-SAI-r11 ::= INTEGER (0..65535) + +MBMS-SAI-InterFreqList-r11 ::= SEQUENCE (SIZE (1..maxFreq)) OF MBMS-SAI-InterFreq-r11 + +MBMS-SAI-InterFreqList-v1140 ::= SEQUENCE (SIZE (1..maxFreq)) OF MBMS-SAI-InterFreq-v1140 + +MBMS-SAI-InterFreq-r11 ::= SEQUENCE { + dl-CarrierFreq-r11 ARFCN-ValueEUTRA-r9, + mbms-SAI-List-r11 MBMS-SAI-List-r11 +} + +MBMS-SAI-InterFreq-v1140 ::= SEQUENCE { + multiBandInfoList-r11 MultiBandInfoList-r11 OPTIONAL -- Need OR +} + + +-- ASN1STOP + +SystemInformationBlockType15 field descriptions mbms-SAI-InterFreqList +Contains a list of neighboring frequencies including additional bands, if any, that provide MBMS services and the corresponding MBMS SAIs. mbms-SAI-IntraFreq +Contains the list of MBMS SAIs for the current frequency. A duplicate MBMS SAI indicates that this and all following SAIs are not offered by this cell but only by neighbour cells on the current frequency. For MBMS service continuity, the UE shall use all MBMS SAIs listed in mbms-SAI-IntraFreq to derive the MBMS frequencies of interest. mbms-SAI-List +Contains a list of MBMS SAIs for a specific frequency. multiBandInfoList +A list of additional frequency bands applicable for the cells participating in the MBSFN transmission. +Conditional presence Explanation InterFreq The field is optionally present, need OR, if the mbms-SAI-InterFreqList-r11 is present. Otherwise it is not present. +– SystemInformationBlockType16 +The IE SystemInformationBlockType16 contains information related to GPS time and Coordinated Universal Time (UTC). The UE may use the parameters provided in this system information block to obtain the UTC, the GPS and the local time. +NOTE: The UE may use the time information for numerous purposes, possibly involving upper layers e.g. to assist GPS initialisation, to synchronise the UE clock (a.o. to determine MBMS session start/ stop). +SystemInformationBlockType16 information element +-- ASN1START + +SystemInformationBlockType16-r11 ::= SEQUENCE { + timeInfo-r11 SEQUENCE { + timeInfoUTC-r11 INTEGER (0..549755813887), + dayLightSavingTime-r11 BIT STRING (SIZE (2)) OPTIONAL, -- Need OR + leapSeconds-r11 INTEGER (-127..128) OPTIONAL, -- Need OR + localTimeOffset-r11 INTEGER (-63..64) OPTIONAL -- Need OR + } OPTIONAL, -- Need OR + lateNonCriticalExtension OCTET STRING OPTIONAL, + ... +} + +-- ASN1STOP + +SystemInformationBlockType16 field descriptions dayLightSavingTime +It indicates if and how daylight saving time (DST) is applied to obtain the local time. The semantics is the same as the semantics of the Daylight Saving Time IE in TS 24.301 [35] and TS 24.008 [49]. The first/leftmost bit of the bit string contains the b2 of octet 3, i.e. the value part of the Daylight Saving Time IE, and the second bit of the bit string contains b1 of octet 3. leapSeconds +Number of leap seconds offset between GPS Time and UTC. UTC and GPS time are related i.e. GPS time -leapSeconds = UTC time. localTimeOffset +Offset between UTC and local time in units of 15 minutes. Actual value = IE value * 15 minutes. Local time of the day is calculated as UTC time + localTimeOffset. timeInfoUTC +Coordinated Universal Time corresponding to the SFN boundary at or immediately after the ending boundary of the SI-window in which SystemInformationBlockType16 is transmitted. The field counts the number of UTC seconds in 10 ms units since 00:00:00 on Gregorian calendar date 1 January, 1900 (midnight between Sunday, December 31, 1899 and Monday, January 1, 1900), including leap seconds and other additions prior to 1972. NOTE 1. +This field is excluded when estimating changes in system information, i.e. changes of timeInfoUTC should neither result in system information change notifications nor in a modification of systemInfoValueTag in SIB1. +NOTE 1: For the sake of the field definition, it is assumed UTC existed prior to 1 January 1972. As this field counts total elapsed time, conversion to calendar UTC time needs to allow for leap second and other calendar adjustments since 1 January 1900. For example, time 00:00 on 1 January 1972 UTC corresponds to a timeInfoUTC of 2,272,060,800 seconds. +– SystemInformationBlockType17 +The IE SystemInformationBlockType17 contains information relevant for traffic steering between E-UTRAN and WLAN. +SystemInformationBlockType17 information element +-- ASN1START + +SystemInformationBlockType17-r12 ::= SEQUENCE { + wlan-OffloadInfoPerPLMN-List-r12 SEQUENCE (SIZE (1..maxPLMN-r11)) OF + WLAN-OffloadInfoPerPLMN-r12 OPTIONAL, -- Need OR + lateNonCriticalExtension OCTET STRING OPTIONAL, + ... +} + +WLAN-OffloadInfoPerPLMN-r12 ::= SEQUENCE { + wlan-OffloadConfigCommon-r12 WLAN-OffloadConfig-r12 OPTIONAL, -- Need OR + wlan-Id-List-r12 WLAN-Id-List-r12 OPTIONAL, -- Need OR + ... +} + +WLAN-Id-List-r12 ::= SEQUENCE (SIZE (1..maxWLAN-Id-r12)) OF WLAN-Identifiers-r12 + +WLAN-Identifiers-r12 ::= SEQUENCE { + ssid-r12 OCTET STRING (SIZE (1..32)) OPTIONAL, -- Need OR + bssid-r12 OCTET STRING (SIZE (6)) OPTIONAL, -- Need OR + hessid-r12 OCTET STRING (SIZE (6)) OPTIONAL, -- Need OR + ... +} + +-- ASN1STOP + +SystemInformationBlockType17 field descriptions bssid +Basic Service Set Identifier (BSSID) defined in IEEE 802.11-2012 [67]. hessid +Homogenous Extended Service Set Identifier (HESSID) defined in IEEE 802.11-2012 [67]. ssid +Service Set Identifier (SSID) defined in IEEE 802.11-2012 [67]. wlan-OffloadInfoPerPLMN-List +The WLAN offload configuration per PLMN includes the same number of entries, listed in the same order as the PLMN(s) in plmn-IdentityList in SystemInformationBlockType1. +– SystemInformationBlockType18 +The IE SystemInformationBlockType18 indicates E-UTRAN supports the Sidelink UE information procedure and may contain sidelink direct communication related resource configuration information. +SystemInformationBlockType18 information element +-- ASN1START + +SystemInformationBlockType18-r12 ::= SEQUENCE { + commConfig-r12 SEQUENCE { + commRxPool-r12 SL-CommRxPoolList-r12, + commTxPoolNormalCommon-r12 SL-CommTxPoolList-r12 OPTIONAL, -- Need OR + commTxPoolExceptional-r12 SL-CommTxPoolList-r12 OPTIONAL, -- Need OR + commSyncConfig-r12 SL-SyncConfigList-r12 OPTIONAL -- Need OR + } OPTIONAL, -- Need OR + lateNonCriticalExtension OCTET STRING OPTIONAL, + ... +} + +-- ASN1STOP + +SystemInformationBlockType18 field descriptions commRxPool +Indicates the resources by which the UE is allowed to receive sidelink direct communication while in RRC_IDLE and while in RRC_CONNECTED. commSyncConfig +Indicates the configuration by which the UE is allowed to receive and transmit synchronisation information. E-UTRAN configures commSyncConfig including txParameters when configuring UEs by dedicated signalling to transmit synchronisation information. commTxPoolExceptional +Indicates the resources by which the UE is allowed to transmit sidelink direct communication in exceptional conditions, as specified in 5.10.4. commTxPoolNormalCommon +Indicates the resources by which the UE is allowed to transmit sidelink direct communication while in RRC_IDLE or when in RRC_CONNECTED while transmitting sidelink via a frequency other than the primary. +– SystemInformationBlockType19 +The IE SystemInformationBlockType19 indicates E-UTRAN supports the sidelink UE information procedure and may contain sidelink direct discovery related resource configuration information. +SystemInformationBlockType19 information element +-- ASN1START + +SystemInformationBlockType19-r12 ::= SEQUENCE { + discConfig-r12 SEQUENCE { + discRxPool-r12 SL-DiscRxPoolList-r12, + discTxPoolCommon-r12 SL-DiscTxPoolList-r12 OPTIONAL, -- Need OR + discTxPowerInfo-r12 SL-DiscTxPowerInfoList-r12 OPTIONAL, -- Cond Tx + discSyncConfig-r12 SL-SyncConfigList-r12 OPTIONAL -- Need OR + } OPTIONAL, -- Need OR + discInterFreqList-r12 SL-CarrierFreqInfoList-r12 OPTIONAL, -- Need OR + lateNonCriticalExtension OCTET STRING OPTIONAL, + ... +} + +SL-CarrierFreqInfoList-r12 ::= SEQUENCE (SIZE (1..maxFreq)) OF SL-CarrierFreqInfo-r12 + +SL-CarrierFreqInfo-r12::= SEQUENCE { + carrierFreq-r12 ARFCN-ValueEUTRA-r9, + plmn-IdentityList-r12 PLMN-IdentityList4-r12 OPTIONAL -- Need OP +} + +PLMN-IdentityList4-r12 ::= SEQUENCE (SIZE (1..maxPLMN-r11)) OF PLMN-IdentityInfo2-r12 + +PLMN-IdentityInfo2-r12 ::= CHOICE { + plmn-Index-r12 INTEGER (1..maxPLMN-r11), + plmnIdentity-r12 PLMN-Identity +} + +-- ASN1STOP + +SystemInformationBlockType19 field descriptions discInterFreqList +Indicates the neighbouring frequencies on which sidelink direct discovery announcement is supported. discRxPool +Indicates the resources by which the UE is allowed to receive sidelink direct discovery announcements while in RRC_IDLE and while in RRC_CONNECTED. discSyncConfig +Indicates the configuration by which the UE is allowed to receive and transmit synchronisation information. E-UTRAN configures discSyncConfig including txParameters when configuring UEs by dedicated signalling to transmit synchronisation information. discTxPoolCommon +Indicates the resources by which the UE is allowed to transmit sidelink direct discovery announcements while in RRC_IDLE. plmn-IdentityList +List of PLMN identities for the neighbouring frequency indicated by carrierFreq. Absence of the field indicates the same PLMN identities as listed in plmn-IdentityList (without suffix) in SystemInformationBlockType1. plmn-Index +Index of the corresponding entry in field plmn-IdentityList (without suffix) within SystemInformationBlockType1. +Conditional presence Explanation Tx The field is mandatory present if discTxPoolCommon is included. Otherwise the field is optional present, need OR. +6.3.2 Radio resource control information elements +– AntennaInfo +The IE AntennaInfoCommon and the AntennaInfoDedicated are used to specify the common and the UE specific antenna configuration respectively. +AntennaInfo information elements +-- ASN1START + +AntennaInfoCommon ::= SEQUENCE { + antennaPortsCount ENUMERATED {an1, an2, an4, spare1} +} + +AntennaInfoDedicated ::= SEQUENCE { + transmissionMode ENUMERATED { + tm1, tm2, tm3, tm4, tm5, tm6, + tm7, tm8-v920}, + codebookSubsetRestriction CHOICE { + n2TxAntenna-tm3 BIT STRING (SIZE (2)), + n4TxAntenna-tm3 BIT STRING (SIZE (4)), + n2TxAntenna-tm4 BIT STRING (SIZE (6)), + n4TxAntenna-tm4 BIT STRING (SIZE (64)), + n2TxAntenna-tm5 BIT STRING (SIZE (4)), + n4TxAntenna-tm5 BIT STRING (SIZE (16)), + n2TxAntenna-tm6 BIT STRING (SIZE (4)), + n4TxAntenna-tm6 BIT STRING (SIZE (16)) + } OPTIONAL, -- Cond TM + ue-TransmitAntennaSelection CHOICE{ + release NULL, + setup ENUMERATED {closedLoop, openLoop} + } +} + +AntennaInfoDedicated-v920 ::= SEQUENCE { + codebookSubsetRestriction-v920 CHOICE { + n2TxAntenna-tm8-r9 BIT STRING (SIZE (6)), + n4TxAntenna-tm8-r9 BIT STRING (SIZE (32)) + } OPTIONAL -- Cond TM8 +} + +AntennaInfoDedicated-r10 ::= SEQUENCE { + transmissionMode-r10 ENUMERATED { + tm1, tm2, tm3, tm4, tm5, tm6, tm7, tm8-v920, + tm9-v1020, tm10-v1130, spare6, spare5, spare4, + spare3, spare2, spare1}, + codebookSubsetRestriction-r10 BIT STRING OPTIONAL, -- Cond TMX + ue-TransmitAntennaSelection CHOICE{ + release NULL, + setup ENUMERATED {closedLoop, openLoop} + } +} + +AntennaInfoDedicated-v1250 ::= SEQUENCE { + alternativeCodebookEnabledFor4TX-r12 BOOLEAN +} + +-- ASN1STOP + +AntennaInfo field descriptions alternativeCodebookEnabledFor4TX +Indicates whether code book in TS 36.213 [23] Table 7.2.4-0A to Table 7.2.4-0D is being used for deriving CSI feedback and reporting. E-UTRAN only configures the field if the UE is configured with a) tm8 or tm9, b) PMI/RI reporting and c) 4 CRS ports. antennaPortsCount +Parameter represents the number of cell specific antenna ports where an1 corresponds to 1, an2 to 2 antenna ports etc. see TS 36.211 [21, 6.2.1]. codebookSubsetRestriction +Parameter: codebookSubsetRestriction, see TS 36.213 [23, 7.2] and TS 36.211 [21, 6.3.4.2.3]. The number of bits in the codebookSubsetRestriction for applicable transmission modes is defined in TS 36.213 [23, Table 7.2-1b]. If the UE is configured with transmissionMode tm8, E-UTRAN configures the field codebookSubsetRestriction if PMI/RI reporting is configured. If the UE is configured with transmissionMode tm9, E-UTRAN configures the field codebookSubsetRestriction if PMI/RI reporting is configured and if the number of CSI-RS ports is greater than 1. E-UTRAN does not configure the field codebookSubsetRestriction in other cases where the UE is configured with transmissionMode tm8 or tm9. transmissionMode +Points to one of Transmission modes defined in TS 36.213 [23, 7.1] where tm1 refers to transmission mode 1, tm2 to transmission mode 2 etc. ue-TransmitAntennaSelection +For value setup the field indicates whether UE transmit antenna selection control is closed-loop or open-loop as described in TS 36.213 [23, 8.7]. EUTRAN configures the same value for all serving cells. +Conditional presence Explanation TM The field is mandatory present if the transmissionMode is set to tm3, tm4, tm5 or tm6. Otherwise the field is not present and the UE shall delete any existing value for this field. TM8 The field is optional present, need OR, if AntennaInfoDedicated is included and transmissionMode is set to tm8. If AntennaInfoDedicated is included and transmissionMode is set to a value other than tm8, the field is not present and the UE shall delete any existing value for this field. Otherwise the field is not present. TMX The field is mandatory present if the transmissionMode-r10 is set to tm3, tm4, tm5 or tm6. The field is optionally present, need OR, if the transmissionMode-r10 is set to tm8 or tm9. Otherwise the field is not present and the UE shall delete any existing value for this field. +– AntennaInfoUL +The IE AntennaInfoUL is used to specify the UL antenna configuration. +AntennaInfoUL information elements +-- ASN1START + +AntennaInfoUL-r10 ::= SEQUENCE { + transmissionModeUL-r10 ENUMERATED {tm1, tm2, spare6, spare5, + spare4, spare3, spare2, spare1} OPTIONAL, -- Need OR + fourAntennaPortActivated-r10 ENUMERATED {setup} OPTIONAL -- Need OR +} + +-- ASN1STOP + +AntennaInfoUL field descriptions fourAntennaPortActivated +Parameter indicates if four antenna ports are used. See TS 36.213 [23, 8.2]. E-UTRAN optionally configures fourAntennaPortActivated only if transmissionModeUL is set to tm2. transmissionModeUL +Points to one of UL Transmission modes defined in TS 36.213 [23, 8.0] where tm1 refers to transmission mode 1, tm2 to transmission mode 2 etc. +– CQI-ReportConfig +The IE CQI-ReportConfig is used to specify the CQI reporting configuration. +CQI-ReportConfig information elements +-- ASN1START + +CQI-ReportConfig ::= SEQUENCE { + cqi-ReportModeAperiodic CQI-ReportModeAperiodic OPTIONAL, -- Need OR + nomPDSCH-RS-EPRE-Offset INTEGER (-1..6), + cqi-ReportPeriodic CQI-ReportPeriodic OPTIONAL -- Need ON +} + +CQI-ReportConfig-v920 ::= SEQUENCE { + cqi-Mask-r9 ENUMERATED {setup} OPTIONAL, -- Cond cqi-Setup + pmi-RI-Report-r9 ENUMERATED {setup} OPTIONAL -- Cond PMIRI +} + +CQI-ReportConfig-r10 ::= SEQUENCE { + cqi-ReportAperiodic-r10 CQI-ReportAperiodic-r10 OPTIONAL, -- Need ON + nomPDSCH-RS-EPRE-Offset INTEGER (-1..6), + cqi-ReportPeriodic-r10 CQI-ReportPeriodic-r10 OPTIONAL, -- Need ON + pmi-RI-Report-r9 ENUMERATED {setup} OPTIONAL, -- Cond PMIRIPCell + csi-SubframePatternConfig-r10 CHOICE { + release NULL, + setup SEQUENCE { + csi-MeasSubframeSet1-r10 MeasSubframePattern-r10, + csi-MeasSubframeSet2-r10 MeasSubframePattern-r10 + } + } OPTIONAL -- Need ON +} + +CQI-ReportConfig-v1130 ::= SEQUENCE { + cqi-ReportPeriodic-v1130 CQI-ReportPeriodic-v1130, + cqi-ReportBoth-r11 CQI-ReportBoth-r11 +} + +CQI-ReportConfig-v1250 ::= SEQUENCE { + csi-SubframePatternConfig-r12 CHOICE { + release NULL, + setup SEQUENCE { + csi-MeasSubframeSets-r12 BIT STRING (SIZE (10)) + } + } OPTIONAL, -- Need ON + cqi-ReportBoth-v1250 CQI-ReportBoth-v1250 OPTIONAL, -- Need ON + cqi-ReportAperiodic-v1250 CQI-ReportAperiodic-v1250 OPTIONAL, -- Need ON + altCQI-Table-r12 ENUMERATED { + allSubframes, csi-SubframeSet1, + csi-SubframeSet2, spare1} OPTIONAL -- Need OP +} + +CQI-ReportConfigSCell-r10 ::= SEQUENCE { + cqi-ReportModeAperiodic-r10 CQI-ReportModeAperiodic OPTIONAL, -- Need OR + nomPDSCH-RS-EPRE-Offset-r10 INTEGER (-1..6), + cqi-ReportPeriodicSCell-r10 CQI-ReportPeriodic-r10 OPTIONAL, -- Need ON + pmi-RI-Report-r10 ENUMERATED {setup} OPTIONAL -- Cond PMIRISCell +} + +CQI-ReportPeriodic ::= CHOICE { + release NULL, + setup SEQUENCE { + cqi-PUCCH-ResourceIndex INTEGER (0..1185), + cqi-pmi-ConfigIndex INTEGER (0..1023), + cqi-FormatIndicatorPeriodic CHOICE { + widebandCQI NULL, + subbandCQI SEQUENCE { + k INTEGER (1..4) + } + }, + ri-ConfigIndex INTEGER (0..1023) OPTIONAL, -- Need OR + simultaneousAckNackAndCQI BOOLEAN + } +} + +CQI-ReportPeriodic-r10 ::= CHOICE { + release NULL, + setup SEQUENCE { + cqi-PUCCH-ResourceIndex-r10 INTEGER (0..1184), + cqi-PUCCH-ResourceIndexP1-r10 INTEGER (0..1184) OPTIONAL, -- Need OR + cqi-pmi-ConfigIndex INTEGER (0..1023), + cqi-FormatIndicatorPeriodic-r10 CHOICE { + widebandCQI-r10 SEQUENCE { + csi-ReportMode-r10 ENUMERATED {submode1, submode2} OPTIONAL -- Need OR + }, + subbandCQI-r10 SEQUENCE { + k INTEGER (1..4), + periodicityFactor-r10 ENUMERATED {n2, n4} + } + }, + ri-ConfigIndex INTEGER (0..1023) OPTIONAL, -- Need OR + simultaneousAckNackAndCQI BOOLEAN, + cqi-Mask-r9 ENUMERATED {setup} OPTIONAL, -- Need OR + csi-ConfigIndex-r10 CHOICE { + release NULL, + setup SEQUENCE { + cqi-pmi-ConfigIndex2-r10 INTEGER (0..1023), + ri-ConfigIndex2-r10 INTEGER (0..1023) OPTIONAL -- Need OR + } + } OPTIONAL -- Need ON + } +} + +CQI-ReportPeriodic-v1130 ::= SEQUENCE { + simultaneousAckNackAndCQI-Format3-r11 ENUMERATED {setup} OPTIONAL, -- Need OR + cqi-ReportPeriodicProcExtToReleaseList-r11 CQI-ReportPeriodicProcExtToReleaseList-r11 OPTIONAL, -- Need ON + cqi-ReportPeriodicProcExtToAddModList-r11 CQI-ReportPeriodicProcExtToAddModList-r11 OPTIONAL -- Need ON +} + +CQI-ReportPeriodicProcExtToAddModList-r11 ::= SEQUENCE (SIZE (1..maxCQI-ProcExt-r11)) OF CQI-ReportPeriodicProcExt-r11 + +CQI-ReportPeriodicProcExtToReleaseList-r11 ::= SEQUENCE (SIZE (1..maxCQI-ProcExt-r11)) OF CQI-ReportPeriodicProcExtId-r11 + +CQI-ReportPeriodicProcExt-r11 ::= SEQUENCE { + cqi-ReportPeriodicProcExtId-r11 CQI-ReportPeriodicProcExtId-r11, + cqi-pmi-ConfigIndex-r11 INTEGER (0..1023), + cqi-FormatIndicatorPeriodic-r11 CHOICE { + widebandCQI-r11 SEQUENCE { + csi-ReportMode-r11 ENUMERATED {submode1, submode2} OPTIONAL -- Need OR + }, + subbandCQI-r11 SEQUENCE { + k INTEGER (1..4), + periodicityFactor-r11 ENUMERATED {n2, n4} + } + }, + ri-ConfigIndex-r11 INTEGER (0..1023) OPTIONAL, -- Need OR + csi-ConfigIndex-r11 CHOICE { + release NULL, + setup SEQUENCE { + cqi-pmi-ConfigIndex2-r11 INTEGER (0..1023), + ri-ConfigIndex2-r11 INTEGER (0..1023) OPTIONAL -- Need OR + } + } OPTIONAL, -- Need ON + ... +} + +CQI-ReportAperiodic-r10 ::= CHOICE { + release NULL, + setup SEQUENCE { + cqi-ReportModeAperiodic-r10 CQI-ReportModeAperiodic, + aperiodicCSI-Trigger-r10 SEQUENCE { + trigger1-r10 BIT STRING (SIZE (8)), + trigger2-r10 BIT STRING (SIZE (8)) + } OPTIONAL -- Need OR + } +} + +CQI-ReportAperiodic-v1250 ::= CHOICE { + release NULL, + setup SEQUENCE { + aperiodicCSI-Trigger-v1250 SEQUENCE { + trigger-SubframeSetIndicator-r12 ENUMERATED {s1, s2}, + trigger1-SubframeSetIndicator-r12 BIT STRING (SIZE (8)), + trigger2-SubframeSetIndicator-r12 BIT STRING (SIZE (8)) + } + } +} + +CQI-ReportAperiodicProc-r11 ::= SEQUENCE { + cqi-ReportModeAperiodic-r11 CQI-ReportModeAperiodic, + trigger01-r11 BOOLEAN, + trigger10-r11 BOOLEAN, + trigger11-r11 BOOLEAN +} + +CQI-ReportModeAperiodic ::= ENUMERATED { + rm12, rm20, rm22, rm30, rm31, + rm32-v1250, spare2, spare1 +} + +CQI-ReportBoth-r11 ::= SEQUENCE { + csi-IM-ConfigToReleaseList-r11 CSI-IM-ConfigToReleaseList-r11 OPTIONAL, -- Need ON + csi-IM-ConfigToAddModList-r11 CSI-IM-ConfigToAddModList-r11 OPTIONAL, -- Need ON + csi-ProcessToReleaseList-r11 CSI-ProcessToReleaseList-r11 OPTIONAL, -- Need ON + csi-ProcessToAddModList-r11 CSI-ProcessToAddModList-r11 OPTIONAL -- Need ON +} + +CQI-ReportBoth-v1250 ::= SEQUENCE { + csi-IM-ConfigToReleaseListExt-r12 CSI-IM-ConfigId-v1250 OPTIONAL, -- Need ON + csi-IM-ConfigToAddModListExt-r12 CSI-IM-ConfigExt-r12 OPTIONAL -- Need ON +} + +CSI-IM-ConfigToAddModList-r11 ::= SEQUENCE (SIZE (1..maxCSI-IM-r11)) OF CSI-IM-Config-r11 + +CSI-IM-ConfigToReleaseList-r11 ::= SEQUENCE (SIZE (1..maxCSI-IM-r11)) OF CSI-IM-ConfigId-r11 + +CSI-ProcessToAddModList-r11 ::= SEQUENCE (SIZE (1..maxCSI-Proc-r11)) OF CSI-Process-r11 + +CSI-ProcessToReleaseList-r11 ::= SEQUENCE (SIZE (1..maxCSI-Proc-r11)) OF CSI-ProcessId-r11 + +CQI-ReportBothProc-r11 ::= SEQUENCE { + ri-Ref-CSI-ProcessId-r11 CSI-ProcessId-r11 OPTIONAL, -- Need OR + pmi-RI-Report-r11 ENUMERATED {setup} OPTIONAL -- Need OR +} + + +-- ASN1STOP + +CQI-ReportConfig field descriptions altCQI-Table +Indicates the applicability of the alternative CQI table (i.e. Table 7.2.3-2 in TS 36.213 [23]) for both aperiodic and periodic CSI reporting for the concerned serving cell. Value allSubframes means the alternative CQI table applies to all the subframes and CSI processes, if configured, and value csi-SubframeSet1 means the alternative CQI table applies to CSI subframe set1, and value csi-SubframeSet2 means the alternative CQI table applies to CSI subframe set2. EUTRAN sets the value to csi-SubframeSet1 or csi-SubframeSet2 only if transmissionMode is set in range tm1 to tm9 and csi-SubframePatternConfig-r10 is configured for the concerned serving cell and different CQI tables apply to the two CSI subframe sets; otherwise EUTRAN sets the value to allSubframes. If this field is not present, the UE shall use Table 7.2.3-1 in TS 36.213 [23] for all subframes and CSI processes, if configured. aperiodicCSI-Trigger +Indicates for which serving cell(s) the aperiodic CSI report is triggered when one or more SCells are configured. trigger1 corresponds to the CSI request field 10 and trigger2 corresponds to the CSI request field 11, see TS 36.213 [23, table 7.2.1-1A]. The leftmost bit, bit 0 in the bit string corresponds to the cell with ServCellIndex=0 and bit 1 in the bit string corresponds to the cell with ServCellIndex=1 etc. Each bit has either value 0 (means no aperiodic CSI report is triggered) or value 1 (means the aperiodic CSI report is triggered). At most 5 bits can be set to value 1 in the bit string. E-UTRAN configures value 1 only for cells configured with transmissionMode set in range tm1 to tm9. One value applies for all serving cells configured with transmissionMode set in range tm1 to tm9 (the associated functionality is common i.e. not performed independently for each cell). cqi-Mask +Limits CQI/PMI/PTI/RI reports to the on-duration period of the DRX cycle, see TS 36.321 [6]. One value applies for all CSI processes and all serving cells (the associated functionality is common i.e. not performed independently for each cell). cqi-FormatIndicatorPeriodic +Parameter: PUCCH CQI Feedback Type, see TS 36.213 [23, table 7.2.2-1]. Depending on transmissionMode, reporting mode is implicitly given from the table. cqi-pmi-ConfigIndex +Parameter: CQI/PMI Periodicity and Offset Configuration Index ICQI/PMI, see TS 36.213 [23, tables 7.2.2-1A and 7.2.2-1C]. If subframe patterns for CSI (CQI/PMI/PTI/RI) reporting are configured (i.e. csi-SubframePatternConfig is configured), the parameter applies to the subframe pattern corresponding to csi-MeasSubframeSet1 or corresponding to the CSI subframe set 1 indicated by csi-MeasSubframeSets-r12. cqi-pmi-ConfigIndex2 +Parameter: CQI/PMI Periodicity and Offset Configuration Index ICQI/PMI, see TS 36.213 [23, tables 7.2.2-1A and 7.2.2-1C]. The parameter applies to the subframe pattern corresponding to csi-MeasSubframeSet2 or corresponding to the CSI subframe set 2 indicated by csi-MeasSubframeSets-r12. cqi-PUCCH-ResourceIndex, cqi-PUCCH-ResourceIndexP1 +Parameter for antenna port P0 and for antenna port P1 respectively, see TS 36.213 [23, 7.2]. E-UTRAN does not apply value 1185. One value applies for all CSI processes. cqi-ReportAperiodic +E-UTRAN does not configure CQI-ReportAperiodic when transmission mode 10 is configured for all serving cells. E-UTRAN configures cqi-ReportAperiodic-v1250 only if cqi-ReportAperiodic-r10 and csi-MeasSubframeSets-r12 are configured. cqi-ReportModeAperiodic +Parameter: reporting mode. Value rm12 corresponds to Mode 1-2, rm20 corresponds to Mode 2-0, rm22 corresponds to Mode 2-2 etc. PUSCH reporting modes are described in TS 36.213 [23, 7.2.1]. The UE shall ignore cqi-ReportModeAperiodic-r10 when transmission mode 10 is configured for the serving cell on this carrier frequency. The UE shall ignore cqi-ReportModeAperiodic-r10 configured for the PCell/ PSCell when the transmission bandwidth of the PCell/PSCell in downlink is 6 resource blocks. CQI-ReportPeriodicProcExt +A set of periodic CQI related parameters for which E-UTRAN may configure different values for each CSI process. For a serving frequency E-UTRAN configures one or more CQI-ReportPeriodicProcExt only when transmission mode 10 is configured for the serving cell on this carrier frequency. csi-ConfigIndex +E-UTRAN configures csi-ConfigIndex only for PCell and only if csi-SubframePatternConfig is configured. The UE shall release csi-ConfigIndex if csi-SubframePatternConfig is released. csi-IM-ConfigToAddModList +For a serving frequency E-UTRAN configures one or more CSI-IM-Config only when transmission mode 10 is configured for the serving cell on this carrier frequency. csi-MeasSubframeSets +Indicates the two CSI subframe sets. Value 0 means the subframe belongs to CSI subframe set 1 and value 1 means the subframe belongs to CSI subframe set 2. CSI subframe set 1 refers to CCSI,0 in TS 36.213 [23, 7.2] and CSI subframe set 2 refers to CCSI,1 in TS 36.213 [23, 7.2]. EUTRAN does not configure csi-MeasSubframeSet1-r10 and csi-MeasSubframeSet2-r10 if either csi-MeasSubframeSets-r12 for PCell or eimta-MainConfigPCell-r12 is configured. csi-MeasSubframeSet1, csi-MeasSubframeSet2 +Indicates the CSI measurement subframe sets. csi-MeasSubframeSet1 refers to CCSI,0 in TS 36.213 [23, 7.2] and csi-MeasSubframeSet2 refers to CCSI,1 in TS 36.213 [23, 7.2]. E-UTRAN only configures the two CSI measurement subframe sets for the PCell. csi-ProcessToAddModList +For a serving frequency E-UTRAN configures one or more CSI-Process only when transmission mode 10 is configured for the serving cell on this carrier frequency. csi-ReportMode +Parameter: PUCCH_format1-1_CSI_reporting_mode, see TS 36.213 [23, 7.2.2]. K +Parameter: K, see TS 36.213 [23, 7.2.2]. nomPDSCH-RS-EPRE-Offset +Parameter: see TS 36.213 [23, 7.2.3]. Actual value = IE value * 2 [dB]. periodicityFactor +Parameter: , see TS 36.213 [23, 7.2.2]. pmi-RI-Report +See TS 36.213 [23, 7.2]. The presence of this field means PMI/RI reporting is configured; otherwise the PMI/RI reporting is not configured. EUTRAN configures this field only when transmissionMode is set to tm8, tm9 or tm10. The UE shall ignore pmi-RI-Report-r9/ pmi-RI-Report-r10 when transmission mode 10 is configured for the serving cell on this carrier frequency. ri-ConfigIndex +Parameter: RI Config Index IRI, see TS 36.213 [23, 7.2.2-1B]. If subframe patterns for CSI (CQI/PMI/PTI/RI) reporting are configured (i.e. csi-SubframePatternConfig is configured), the parameter applies to the subframe pattern corresponding to csi-MeasSubframeSet1. ri-ConfigIndex2 +Parameter: RI Config Index IRI, see TS 36.213 [23, 7.2.2-1B]. The parameter applies to the subframe pattern corresponding to csi-MeasSubframeSet2 or corresponding to the CSI subframe set 2 indicated by csi-MeasSubframeSets-r12. E-UTRAN configures ri-ConfigIndex2 only if ri-ConfigIndex is configured. ri-Ref-CSI-ProcessId +CSI process whose RI value the UE inherits when reporting RI, in the same subframe, for CSI reporting. E-UTRAN ensures that the CSI process that inherits the RI value is configured in accordance with the conditions specified in 36.213 [23, 7.2.1, 7.2.2]. simultaneousAckNackAndCQI +Parameter: Simultaneous-AN-and-CQI, see TS 36.213 [23, 10.1]. TRUE indicates that simultaneous transmission of ACK/NACK and CQI is allowed. One value applies for all CSI processes. For SCells except for the PSCell this field is not applicable and the UE shall ignore the value. simultaneousAckNackAndCQI-Format3 +Indicates that the UE shall perform simultaneous transmission of HARQ A/N and periodic CQI report multiplexing on PUCCH format 3, see TS 36.213 [23, 7.2, 10.1.1]. E-UTRAN configures this information only when pucch-Format is set to format3. One value applies for all CSI processes. For SCells except for the PSCell this field is not applicable and the UE shall ignore the value. trigger01 +Indicates whether or not reporting for this CSI-process or reporting for this CSI-process corresponding to a CSI subframe set is triggered by CSI request field set to 01, for a CSI request applicable for the serving cell on the same frequency as the CSI process, see TS 36.213 [23, table 7.2.1-1B]. trigger10, trigger11 +Indicates whether or not reporting for this CSI-process or reporting for this CSI-process corresponding to a CSI subframe set is triggered by CSI request field set to 10 or 11, see TS 36.213 [23, table 7.2.1-1B]. EUTRAN configures at most 5 CSI processes, across all serving frequencies within each CG, to be triggered by a CSI request field set to value 10. The same restriction applies for value 11. In case E-UTRAN simultaneously triggers CSI requests for more than 5 CSI processes some limitations apply, see TS 36.213 [23]. trigger-SubframeSetIndicator +For a serving cell configured with csi-MeasSubframeSets-r12, indicates for which CSI subframe set the aperiodic CSI report is triggered for the serving cell if the aperiodic CSI is triggered by the CSI request field 01, see TS 36.213 [23, table 7.2.1-1C]. Value s1 corresponds to CSI subframe set 1 and value s2 corresponds to CSI subframe set 2. trigger1-SubframeSetIndicator +Indicates for which CSI subframe set the aperiodic CSI report is triggered when aperiodic CSI is triggered by the CSI request field 10, see TS 36.213 [23, table 7.2.1-1C].The leftmost bit, bit 0 in the bit string corresponds to the cell with ServCellIndex=0 and bit 1 in the bit string corresponds to the cell with ServCellIndex=1 etc. Each bit has either value 0 (means that aperiodic CSI report is triggered for CSI subframe set 1) or value 1 (means that aperiodic CSI report is triggered for CSI subframe set 2). trigger2-SubframeSetIndicator +Indicates for which CSI subframe set the aperiodic CSI report is triggered when aperiodic CSI is triggered by the CSI request field 11, see TS 36.213 [23, table 7.2.1-1C].The leftmost bit, bit 0 in the bit string corresponds to the cell with ServCellIndex=0 and bit 1 in the bit string corresponds to the cell with ServCellIndex=1 etc. Each bit has either value 0 (means that aperiodic CSI report is triggered for CSI subframe set 1) or value 1 (means that aperiodic CSI report is triggered for CSI subframe set 2). +Conditional presence Explanation cqi-Setup This field is not present for an Scell except for the PSCell, while it is conditionally present for the PCell and the PSCell according to the following. The field is optional present, need OR, if the cqi-ReportPeriodic in the cqi-ReportConfig is set to setup. If the field cqi-ReportPeriodic is present and set to release, the field is not present and the UE shall delete any existing value for this field. Otherwise the field is not present. PMIRI The field is optional present, need OR, if cqi-ReportPeriodic is included and set to setup, or cqi-ReportModeAperiodic is included. If the field cqi-ReportPeriodic is present and set to release and cqi-ReportModeAperiodic is absent, the field is not present and the UE shall delete any existing value for this field. Otherwise the field is not present. PMIRIPCell The field is optional present, need OR, if cqi-ReportPeriodic is included in the CQI-ReportConfig-r10 and set to setup, or cqi-ReportAperiodic is included in the CQI-ReportConfig-r10 and set to setup. If the field cqi-ReportPeriodic is present in the CQI-ReportConfig-r10 and set to release and cqi-ReportAperiodic is included in the CQI-ReportConfig-r10 and set to release, the field is not present and the UE shall delete any existing value for this field. Otherwise the field is not present. PMIRISCell The field is optional present, need OR, if cqi-ReportPeriodicSCell is included and set to setup, or cqi-ReportModeAperiodic-r10 is included in the CQI-ReportConfigSCell. If the field cqi-ReportPeriodicSCell is present and set to release and cqi-ReportModeAperiodic-r10 is absent in the CQI-ReportConfigSCell, the field is not present and the UE shall delete any existing value for this field. Otherwise the field is not present. +– CQI-ReportPeriodicProcExtId +The IE CQI-ReportPeriodicProcExtId is used to identify a periodic CQI reporting configuration that E-UTRAN may configure in addition to the configuration specified by the IE CQI-ReportPeriodic-r10. These additional configurations are specified by the IE CQI-ReportPeriodicProcExt-r11. The identity is unique within the scope of a carrier frequency. +CQI-ReportPeriodicProcExtId information elements +-- ASN1START + +CQI-ReportPeriodicProcExtId-r11 ::= INTEGER (1..maxCQI-ProcExt-r11) + +-- ASN1STOP + +– CrossCarrierSchedulingConfig +The IE CrossCarrierSchedulingConfig is used to specify the configuration when the cross carrier scheduling is used in a cell. +CrossCarrierSchedulingConfig information elements +-- ASN1START + +CrossCarrierSchedulingConfig-r10 ::= SEQUENCE { + schedulingCellInfo-r10 CHOICE { + own-r10 SEQUENCE { -- No cross carrier scheduling + cif-Presence-r10 BOOLEAN + }, + other-r10 SEQUENCE { -- Cross carrier scheduling + schedulingCellId-r10 ServCellIndex-r10, + pdsch-Start-r10 INTEGER (1..4) + } + } +} + +-- ASN1STOP + +CrossCarrierSchedulingConfig field descriptions cif-Presence +The field is used to indicate whether carrier indicator field is present (value TRUE) or not (value FALSE) in PDCCH/ EPDCCH DCI formats, see TS 36.212 [22, 5.3.3.1]. pdsch-Start +The starting OFDM symbol of PDSCH for the concerned SCell, see TS 36.213 [23. 7.1.6.4]. Values 1, 2, 3 are applicable when dl-Bandwidth for the concerned SCell is greater than 10 resource blocks, values 2, 3, 4 are applicable when dl-Bandwidth for the concerned SCell is less than or equal to 10 resource blocks, see TS 36.211 [21, Table 6,7-1]. schedulingCellId +Indicates which cell signals the downlink allocations and uplink grants, if applicable, for the concerned SCell. In case the UE is configured with DC, the scheduling cell is part of the same cell group (i.e. MCG or SCG) as the scheduled cell. +– CSI-IM-Config +The IE CSI-IM-Config is the CSI Interference Measurement (IM) configuration that E-UTRAN may configure on a serving frequency, see TS 36.213 [23, 7.2.6]. +CSI-IM-Config information elements +-- ASN1START + +CSI-IM-Config-r11 ::= SEQUENCE { + csi-IM-ConfigId-r11 CSI-IM-ConfigId-r11, + resourceConfig-r11 INTEGER (0..31), + subframeConfig-r11 INTEGER (0..154), + ... +} + +CSI-IM-ConfigExt-r12 ::= SEQUENCE { + csi-IM-ConfigId-v1250 CSI-IM-ConfigId-v1250, + resourceConfig-r12 INTEGER (0..31), + subframeConfig-r12 INTEGER (0..154), + ... +} + +-- ASN1STOP + +CSI-IM-Config field descriptions resourceConfig +Parameter: CSI reference signal configuration, see TS 36.213 [23, 7.2.6] and TS 36.211 [21, table 6.10.5.2-1 and 6.10.5.2-2] for 4 REs. subframeConfig +Parameter: , see TS 36.213 [23, 7.2.6] and TS 36.211 [21, table 6.10.5.3-1]. +– CSI-IM-ConfigId +The IE CSI-IM-ConfigId is used to identify a CSI-IM configuration that is configured by the IE CSI-IM-Config. The identity is unique within the scope of a carrier frequency. +CSI-IM-ConfigId information elements +-- ASN1START + +CSI-IM-ConfigId-r11 ::= INTEGER (1..maxCSI-IM-r11) +CSI-IM-ConfigId-r12 ::= INTEGER (1..maxCSI-IM-r12) +CSI-IM-ConfigId-v1250 ::= INTEGER (maxCSI-IM-r12) + +-- ASN1STOP + +– CSI-Process +The IE CSI-Process is the CSI process configuration that E-UTRAN may configure on a serving frequency. +CSI-Process information elements +-- ASN1START + +CSI-Process-r11 ::= SEQUENCE { + csi-ProcessId-r11 CSI-ProcessId-r11, + csi-RS-ConfigNZPId-r11 CSI-RS-ConfigNZPId-r11, + csi-IM-ConfigId-r11 CSI-IM-ConfigId-r11, + p-C-AndCBSRList-r11 SEQUENCE (SIZE (1..2)) OF P-C-AndCBSR-r11, + cqi-ReportBothProc-r11 CQI-ReportBothProc-r11 OPTIONAL, -- Need OR + cqi-ReportPeriodicProcId-r11 INTEGER (0..maxCQI-ProcExt-r11) OPTIONAL, -- Need OR + cqi-ReportAperiodicProc-r11 CQI-ReportAperiodicProc-r11 OPTIONAL, -- Need OR + ..., + [[ alternativeCodebookEnabledFor4TXProc-r12 ENUMERATED {true} OPTIONAL, -- Need ON + csi-IM-ConfigIdList-r12 CHOICE { + release NULL, + setup SEQUENCE (SIZE (1..2)) OF CSI-IM-ConfigId-r12 + } OPTIONAL, -- Need ON + cqi-ReportAperiodicProc2-r12 CHOICE { + release NULL, + setup CQI-ReportAperiodicProc-r11 + } OPTIONAL -- Need ON + ]] +} + +P-C-AndCBSR-r11 ::= SEQUENCE { + p-C-r11 INTEGER (-8..15), + codebookSubsetRestriction-r11 BIT STRING +} + +-- ASN1STOP + +CSI-Process field descriptions alternativeCodebookEnabledFor4TXProc +Indicates whether code book in TS 36.213 [23] Table 7.2.4-0A to Table 7.2.4-0D is being used for deriving CSI feedback and reporting for a CSI process. EUTRAN may configure the field only if the number of CSI-RS ports for non-zero power transmission CSI-RS configuration is 4. cqi-ReportAperiodicProc +If csi-MeasSubframeSets-r12 is configured for the same frequency as the CSI process, cqi-ReportAperiodicProc +applies for CSI subframe set 1. If csi-MeasSubframeSet1-r10 or csi-MeasSubframeSet2-r10 are configured for the same frequency as the CSI process, cqi-ReportAperiodicProc applies for CSI subframe set 1 or CSI subframe set 2. Otherwise, cqi-ReportAperiodicProc applies for all subframes cqi-ReportAperiodicProc2 +cqi-ReportAperiodicProc2 is configured only if csi-MeasSubframeSets-r12 is configured for the same frequency as the CSI process. cqi-ReportAperiodicProc2 is for CSI subframe set 2. E-UTRAN shall set cqi-ReportModeAperiodic-r11 in cqi-ReportAperiodicProc2 the same as in cqi-ReportAperiodicProc. cqi-ReportBothProc +Includes CQI configuration parameters applicable for both aperiodic and periodic CSI reporting, for which CSI process specific values may be configured. E-UTRAN configures the field if and only if cqi-ReportPeriodicProcId is included and/ or if cqi-ReportAperiodicProc is included. cqi-ReportPeriodicProcId +Refers to a periodic CQI reporting configuration that is configured for the same frequency as the CSI process. Value 0 refers to the set of parameters defined by the REL-10 CQI reporting configuration fields, while the other values refer to the additional configurations E-UTRAN assigns by CQI-ReportPeriodicProcExt-r11 (and as covered by CQI-ReportPeriodicProcExtId). csi-IM-ConfigId +Refers to a CSI-IM configuration that is configured for the same frequency as the CSI process. csi-IM-ConfigIdList + Refers to one or two CSI-IM configurations that are configured for the same frequency as the CSI process. csi-IM-ConfigIdList can include 2 entries only if csi-MeasSubframeSets-r12 is configured for the same frequency as the CSI process. UE shall ignore csi-IM-ConfigId-r11 if csi-IM-ConfigIdList-r12 is configured. csi-RS-ConfigNZPId +Refers to a CSI RS configuration using non-zero power transmission that is configured for the same frequency as the CSI process. p-C +Parameter: , see TS 36.213 [23, 7.2.5]. p-C-AndCBSRList +A p-C-AndCBSRList including 2 entries indicates that the subframe patterns configured for CSI (CQI/PMI/PTI/RI) reporting (i.e. as defined by field csi-MeasSubframeSet1 and csi-MeasSubframeSet2, or as defined by csi-MeasSubframeSets-r12) are to be used for this CSI process, while a single entry indicates that the subframe patterns are not to be used for this CSI process. E-UTRAN does not include 2 entries in p-C-AndCBSRList with csi-MeasSubframeSet1 and csi-MeasSubframeSet2 for CSI processes concerning a secondary frequency. E-UTRAN includes 2 entries in p-C-AndCBSRList when configuring both cqi-pmi-ConfigIndex and cqi-pmi-ConfigIndex2. +– CSI-ProcessId +The IE CSI-ProcessId is used to identify a CSI process that is configured by the IE CSI-Process. The identity is unique within the scope of a carrier frequency. +CSI-ProcessId information elements +-- ASN1START + +CSI-ProcessId-r11 ::= INTEGER (1..maxCSI-Proc-r11) + +-- ASN1STOP + +– CSI-RS-Config +The IE CSI-RS-Config is used to specify the CSI (Channel-State Information) reference signal configuration. +CSI-RS-Config information elements +-- ASN1START + +CSI-RS-Config-r10 ::= SEQUENCE { + csi-RS-r10 CHOICE { + release NULL, + setup SEQUENCE { + antennaPortsCount-r10 ENUMERATED {an1, an2, an4, an8}, + resourceConfig-r10 INTEGER (0..31), + subframeConfig-r10 INTEGER (0..154), + p-C-r10 INTEGER (-8..15) + } + } OPTIONAL, -- Need ON + zeroTxPowerCSI-RS-r10 ZeroTxPowerCSI-RS-Conf-r12 OPTIONAL -- Need ON +} + +CSI-RS-Config-v1250 ::= SEQUENCE { + zeroTxPowerCSI-RS2-r12 ZeroTxPowerCSI-RS-Conf-r12 OPTIONAL, -- Need ON + ds-ZeroTxPowerCSI-RS-r12 CHOICE { + release NULL, + setup SEQUENCE { + zeroTxPowerCSI-RS-List-r12 SEQUENCE (SIZE (1..maxDS-ZTP-CSI-RS-r12)) OF ZeroTxPowerCSI-RS-r12 + } + } OPTIONAL -- Need ON +} + +ZeroTxPowerCSI-RS-Conf-r12 ::= CHOICE { + release NULL, + setup ZeroTxPowerCSI-RS-r12 +} + +ZeroTxPowerCSI-RS-r12 ::= SEQUENCE { + zeroTxPowerResourceConfigList-r12 BIT STRING (SIZE (16)), + zeroTxPowerSubframeConfig-r12 INTEGER (0..154) +} + +-- ASN1STOP + +CSI-RS-Config field descriptions antennaPortsCount +Parameter represents the number of antenna ports used for transmission of CSI reference signals where value an1 corresponds to 1 antenna port, an2 to 2 antenna ports and so on, see TS 36.211 [21, 6.10.5]. ds-ZeroTxPowerCSI-RS +Parameter for additional zeroTxPowerCSI-RS for a serving cell, concerning the CSI-RS included in discovery signals. zeroTxPowerCSI-RS2 +Parameter for additional zeroTxPowerCSI-RS for a serving cell. E-UTRAN configures the field only if csi-MeasSubframeSets-r12 and TM 1 – 9 are configured for the serving cell. p-C +Parameter: , see TS 36.213 [23, 7.2.5]. resourceConfig +Parameter: CSI reference signal configuration, see TS 36.211 [21, table 6.10.5.2-1 and 6.10.5.2-2]. subframeConfig +Parameter: , see TS 36.211 [21, table 6.10.5.3-1]. zeroTxPowerResourceConfigList +Parameter: ZeroPowerCSI-RS, see TS 36.213 [23, 7.2.7]. zeroTxPowerSubframeConfig +Parameter: , see TS 36.211 [21, table 6.10.5.3-1]. +– CSI-RS-ConfigNZP +The IE CSI-RS-ConfigNZP is the CSI-RS resource configuration using non-zero power transmission that E-UTRAN may configure on a serving frequency. +CSI-RS-ConfigNZP information elements +-- ASN1START + +CSI-RS-ConfigNZP-r11 ::= SEQUENCE { + csi-RS-ConfigNZPId-r11 CSI-RS-ConfigNZPId-r11, + antennaPortsCount-r11 ENUMERATED {an1, an2, an4, an8}, + resourceConfig-r11 INTEGER (0..31), + subframeConfig-r11 INTEGER (0..154), + scramblingIdentity-r11 INTEGER (0..503), + qcl-CRS-Info-r11 SEQUENCE { + qcl-ScramblingIdentity-r11 INTEGER (0..503), + crs-PortsCount-r11 ENUMERATED {n1, n2, n4, spare1}, + mbsfn-SubframeConfigList-r11 CHOICE { + release NULL, + setup SEQUENCE { + subframeConfigList MBSFN-SubframeConfigList + } + } OPTIONAL -- Need ON + } OPTIONAL, -- Need OR + ... +} + +-- ASN1STOP + +CSI-RS-ConfigNZP field descriptions antennaPortsCount +Parameter represents the number of antenna ports used for transmission of CSI reference signals where an1 corresponds to 1, an2 to 2 antenna ports etc. see TS 36.211 [21, 6.10.5]. qcl-CRS-Info +Indicates CRS antenna ports that is quasi co-located with the CSI-RS antenna ports, see TS 36.213 [23, 7.2.5]. EUTRAN configures this field if and only if the UE is configured with qcl-Operation set to typeB. resourceConfig +Parameter: CSI reference signal configuration, see TS 36.211 [21, table 6.10.5.2-1 and 6.10.5.2-2]. subframeConfig +Parameter: , see TS 36.211 [21, table 6.10.5.3-1]. scramblingIdentity +Parameter: Pseudo-random sequence generator parameter, , see TS 36.213 [23, 7.2.5]. +– CSI-RS-ConfigNZPId +The IE CSI-RS-ConfigNZPId is used to identify a CSI-RS resource configuration using non-zero transmission power, as configured by the IE CSI-RS-ConfigNZP. The identity is unique within the scope of a carrier frequency. +CSI-RS-ConfigNZPId information elements +-- ASN1START + +CSI-RS-ConfigNZPId-r11 ::= INTEGER (1..maxCSI-RS-NZP-r11) + +-- ASN1STOP + +– CSI-RS-ConfigZP +The IE CSI-RS-ConfigZP is the CSI-RS resource configuration, for which UE assumes zero transmission power, that E-UTRAN may configure on a serving frequency. +CSI-RS-ConfigZP information elements +-- ASN1START + +CSI-RS-ConfigZP-r11 ::= SEQUENCE { + csi-RS-ConfigZPId-r11 CSI-RS-ConfigZPId-r11, + resourceConfigList-r11 BIT STRING (SIZE (16)), + subframeConfig-r11 INTEGER (0..154), + ... +} + +-- ASN1STOP + +CSI-RS-ConfigZP field descriptions resourceConfigList +Parameter: ZeroPowerCSI-RS, see TS 36.213 [23, 7.2.7]. subframeConfig +Parameter: , see TS 36.211 [21, table 6.10.5.3-1]. +– CSI-RS-ConfigZPId +The IE CSI-RS-ConfigZPId is used to identify a CSI-RS resource configuration for which UE assumes zero transmission power, as configured by the IE CSI-RS-ConfigZP. The identity is unique within the scope of a carrier frequency. +CSI-RS-ConfigZPId information elements +-- ASN1START + +CSI-RS-ConfigZPId-r11 ::= INTEGER (1..maxCSI-RS-ZP-r11) + +-- ASN1STOP + +– DMRS-Config +The IE DMRS-Config is the DMRS configuration that E-UTRAN may configure on a serving frequency. +DMRS-Config information elements +-- ASN1START + +DMRS-Config-r11 ::= CHOICE { + release NULL, + setup SEQUENCE { + scramblingIdentity-r11 INTEGER (0..503), + scramblingIdentity2-r11 INTEGER (0..503) + } +} + +-- ASN1STOP + +DMRS-Config field descriptions scramblingIdentity, scramblingIdentity2 +Parameter: , see TS 36.211 [21, 6.10.3.1]. +– DRB-Identity +The IE DRB-Identity is used to identify a DRB used by a UE. +DRB-Identity information elements +-- ASN1START + +DRB-Identity ::= INTEGER (1..32) + +-- ASN1STOP + +– EPDCCH-Config +The IE EPDCCH-Config specifies the subframes and resource blocks for EPDCCH monitoring that E-UTRAN may configure for a serving cell. +EPDCCH-Config information element +-- ASN1START + +EPDCCH-Config-r11 ::= SEQUENCE{ + config-r11 CHOICE { + release NULL, + setup SEQUENCE { + subframePatternConfig-r11 CHOICE { + release NULL, + setup SEQUENCE { + subframePattern-r11 MeasSubframePattern-r10 + } + } OPTIONAL, -- Need ON + startSymbol-r11 INTEGER (1..4) OPTIONAL, -- Need OP + setConfigToReleaseList-r11 EPDCCH-SetConfigToReleaseList-r11 OPTIONAL, -- Need ON + setConfigToAddModList-r11 EPDCCH-SetConfigToAddModList-r11 OPTIONAL -- Need ON + } + } +} + +EPDCCH-SetConfigToAddModList-r11 ::= SEQUENCE (SIZE(1..maxEPDCCH-Set-r11)) OF EPDCCH-SetConfig-r11 + +EPDCCH-SetConfigToReleaseList-r11 ::= SEQUENCE (SIZE(1..maxEPDCCH-Set-r11)) OF EPDCCH-SetConfigId-r11 + +EPDCCH-SetConfig-r11 ::= SEQUENCE { + setConfigId-r11 EPDCCH-SetConfigId-r11, + transmissionType-r11 ENUMERATED {localised, distributed}, + resourceBlockAssignment-r11 SEQUENCE{ + numberPRB-Pairs-r11 ENUMERATED {n2, n4, n8}, + resourceBlockAssignment-r11 BIT STRING (SIZE(4..38)) + }, + dmrs-ScramblingSequenceInt-r11 INTEGER (0..503), + pucch-ResourceStartOffset-r11 INTEGER (0..2047), + re-MappingQCL-ConfigId-r11 PDSCH-RE-MappingQCL-ConfigId-r11 OPTIONAL, -- Need OR + ..., + [[ csi-RS-ConfigZPId2-r12 CHOICE { + release NULL, + setup CSI-RS-ConfigZPId-r11 + } OPTIONAL -- Need ON + ]] +} + +EPDCCH-SetConfigId-r11 ::= INTEGER (0..1) + +-- ASN1STOP + +EPDCCH-Config field descriptions csi-RS-ConfigZPId2 +Indicates the rate matching parameters in addition to those indicated by re-MappingQCL-ConfigId. E-UTRAN configures this field only when tm10 is configured. dmrs-ScramblingSequenceInt +The DMRS scrambling sequence initialization parameter defined in TS 36.211[21, 6.10.3A.1]. EPDCCH-SetConfig +Provides EPDCCH configuration set. See TS 36.213 [23, 9.1.4]. E-UTRAN configures at least one EPDCCH-SetConfig when EPDCCH-Config is configured. numberPRB-Pairs +Indicates the number of physical resource-block pairs used for the EPDCCH set. Value n2 corresponds to 2 physical resource-block pairs; n4 corresponds to 4 physical resource-block pairs and so on. Value n8 is not supported if dl-Bandwidth is set to 6 resource blocks. pucch-ResourceStartOffset +PUCCH format 1a and 1b resource starting offset for the EPDCCH set. See TS 36.213 [23, 10.1.1.2]. re-MappingQCL-ConfigId +Indicates the starting OFDM symbol, the related rate matching parameters and quasi co-location assumption for EPDCCH when the UE is configured with tm10. This field provides the identity of a configured PDSCH-RE-MappingQCL-Config. E-UTRAN configures this field only when tm10 is configured. resourceBlockAssignment +Indicates the index to a specific combination of physical resource-block pair for EPDCCH set. See TS 36.213 [23, 9.1.4.4]. The size of resourceBlockAssignment is specified in TS 36.213 [23, 9.1.4.4] and based on numberPRB-Pairs and the signalled value of dl-Bandwidth. setConfigId +Indicates the identity of the EPDCCH configuration set. startSymbol +Indicates the OFDM starting symbol for any EPDCCH and PDSCH scheduled by EPDCCH on the same cell, see TS 36.213 [23, 9.1.4.1]. If not present, the UE shall release the configuration and shall derive the starting OFDM symbol of EPDCCH and PDSCH scheduled by EPDCCH from PCFICH. Values 1, 2, and 3 are applicable for dl-Bandwidth greater than 10 resource blocks. Values 2, 3, and 4 are applicable otherwise. E-UTRAN does not configure the field for UEs configured with tm10. subframePatternConfig +Configures the subframes which the UE shall monitor the UE-specific search space on EPDCCH, except for pre-defined rules in TS 36.213 [23, 9.1.4]. If the field is not configured when EPDCCH is configured, the UE shall monitor the UE-specific search space on EPDCCH in all subframes except for pre-defined rules in TS 36.213 [23, 9.1.4]. transmissionType +Indicates whether distributed or localized EPDCCH transmission mode is used as defined in TS 36.211 [21, 6.8A.1]. +– EIMTA-MainConfig +The IE EIMTA-MainConfig is used to specify the eIMTA-RNTI used for eIMTA and the subframes used for monitoring PDCCH with eIMTA-RNTI. The IE EIMTA-MainConfigServCell is used to specify the eIMTA related parameters applicable for the concerned serving cell. +EIMTA-MainConfig information element +-- ASN1START +EIMTA-MainConfig-r12 ::= CHOICE { + release NULL, + setup SEQUENCE { + eimta-RNTI-r12 C-RNTI, + eimta-CommandPeriodicity-r12 ENUMERATED {sf10, sf20, sf40, sf80}, + eimta-CommandSubframeSet-r12 BIT STRING (SIZE(10)) + } +} + +EIMTA-MainConfigServCell-r12 ::= CHOICE { + release NULL, + setup SEQUENCE { + eimta-UL-DL-ConfigIndex-r12 INTEGER (1..5), + eimta-HARQ-ReferenceConfig-r12 ENUMERATED {sa2,sa4,sa5}, + mbsfn-SubframeConfigList-v1250 CHOICE { + release NULL, + setup SEQUENCE { + subframeConfigList-r12 MBSFN-SubframeConfigList + } + } + } +} + +-- ASN1STOP + +EIMTA-MainConfig field descriptions eimta-CommandPeriodicity +Configures the periodicity to monitor PDCCH with eIMTA-RNTI, see TS 36.213 [23, 13.1]. Value sf10 corresponds to 10 subframes, sf20 corresponds to 20 subframes and so on. eimta-CommandSubframeSet +Configures the subframe(s) to monitor PDCCH with eIMTA-RNTI within the periodicity configured by eimta-CommandPeriodicity. The 10 bits correspond to all subframes in the last radio frame within each periodicity. The left most bit is for subframe 0 and so on. Each bit can be of value 0 or 1. The value of 1 means that the corresponding subframe is configured for monitoring PDCCH with eIMTA-RNTI, and the value of 0 means otherwise. In case of TDD as PCell, only the downlink subframes indicated by the UL/ DL configuration in SIB1 can be configured for monitoring PDCCH with eIMTA-RNTI. In case of FDD as PCell, any of the ten subframes can be configured for monitoring PDCCH with eIMTA-RNTI. eimta-HARQ-ReferenceConfig +Indicates UL/ DL configuration used as the DL HARQ reference configuration for this serving cell. Value sa2 corresponds to Configuration2, sa4 to Configuration4 etc, as specified in TS 36.211 [21, table 4.2-2]. E-UTRAN configures the same value for all serving cells residing on same frequency band. eimta-UL-DL-ConfigIndex +Index of I, see TS 36.212 [22, 5.3.3.1.4]. E-UTRAN configures the same value for all serving cells residing on same frequency band. mbsfn-SubframeConfigList +Configure the MBSFN subframes for the UE on this serving cell. An uplink subframe indicated by the DL/UL subframe configuration in SIB1 can be configured as MBSFN subframe. +– LogicalChannelConfig +The IE LogicalChannelConfig is used to configure the logical channel parameters. +LogicalChannelConfig information element +-- ASN1START + +LogicalChannelConfig ::= SEQUENCE { + ul-SpecificParameters SEQUENCE { + priority INTEGER (1..16), + prioritisedBitRate ENUMERATED { + kBps0, kBps8, kBps16, kBps32, kBps64, kBps128, + kBps256, infinity, kBps512-v1020, kBps1024-v1020, + kBps2048-v1020, spare5, spare4, spare3, spare2, + spare1}, + bucketSizeDuration ENUMERATED { + ms50, ms100, ms150, ms300, ms500, ms1000, spare2, + spare1}, + logicalChannelGroup INTEGER (0..3) OPTIONAL -- Need OR + } OPTIONAL, -- Cond UL + ..., + [[ logicalChannelSR-Mask-r9 ENUMERATED {setup} OPTIONAL -- Cond SRmask + ]], + [[ logicalChannelSR-Prohibit-r12 BOOLEAN OPTIONAL -- Need ON + ]] +} + +-- ASN1STOP + +LogicalChannelConfig field descriptions bucketSizeDuration +Bucket Size Duration for logical channel prioritization in TS 36.321 [6]. Value in milliseconds. Value ms50 corresponds to 50 ms, ms100 corresponds to 100 ms and so on. logicalChannelGroup +Mapping of logical channel to logical channel group for BSR reporting in TS 36.321 [6]. logicalChannelSR-Mask +Controlling SR triggering on a logical channel basis when an uplink grant is configured. See TS 36.321 [6]. logicalChannelSR-Prohibit +Value TRUE indicates that the logicalChannelSR-ProhibitTimer is enabled for the logical channel. E-UTRAN only (optionally) configures the field (i.e. indicates value TRUE) if logicalChannelSR-ProhibitTimer is configured. See TS 36.321 [6]. prioritisedBitRate +Prioritized Bit Rate for logical channel prioritization in TS 36.321 [6]. Value in kilobytes/second. Value kBps0 corresponds to 0 kB/second, kBps8 corresponds to 8 kB/second, kBps16 corresponds to 16 kB/second and so on. Infinity is the only applicable value for SRB1 and SRB2 priority +Logical channel priority in TS 36.321 [6]. Value is an integer. +Conditional presence Explanation SRmask The field is optionally present if ul-SpecificParameters is present, need OR; otherwise it is not present. UL The field is mandatory present for UL logical channels; otherwise it is not present. +– MAC-MainConfig +The IE MAC-MainConfig is used to specify the MAC main configuration for signalling and data radio bearers. All MAC main configuration parameters can be configured independently per Cell Group (i.e. MCG or SCG), unless explicitly specified otherwise. +MAC-MainConfig information element +-- ASN1START + +MAC-MainConfig ::= SEQUENCE { + ul-SCH-Config SEQUENCE { + maxHARQ-Tx ENUMERATED { + n1, n2, n3, n4, n5, n6, n7, n8, + n10, n12, n16, n20, n24, n28, + spare2, spare1} OPTIONAL, -- Need ON + periodicBSR-Timer PeriodicBSR-Timer-r12 OPTIONAL, -- Need ON + retxBSR-Timer RetxBSR-Timer-r12, + ttiBundling BOOLEAN + } OPTIONAL, -- Need ON + drx-Config DRX-Config OPTIONAL, -- Need ON + timeAlignmentTimerDedicated TimeAlignmentTimer, + phr-Config CHOICE { + release NULL, + setup SEQUENCE { + periodicPHR-Timer ENUMERATED {sf10, sf20, sf50, sf100, sf200, + sf500, sf1000, infinity}, + prohibitPHR-Timer ENUMERATED {sf0, sf10, sf20, sf50, sf100, + sf200, sf500, sf1000}, + dl-PathlossChange ENUMERATED {dB1, dB3, dB6, infinity} + } + } OPTIONAL, -- Need ON + ..., + [[ sr-ProhibitTimer-r9 INTEGER (0..7) OPTIONAL -- Need ON + ]], + [[ mac-MainConfig-v1020 SEQUENCE { + sCellDeactivationTimer-r10 ENUMERATED { + rf2, rf4, rf8, rf16, rf32, rf64, rf128, + spare} OPTIONAL, -- Need OP + extendedBSR-Sizes-r10 ENUMERATED {setup} OPTIONAL, -- Need OR + extendedPHR-r10 ENUMERATED {setup} OPTIONAL -- Need OR + } OPTIONAL -- Need ON + ]], + [[ stag-ToReleaseList-r11 STAG-ToReleaseList-r11 OPTIONAL, -- Need ON + stag-ToAddModList-r11 STAG-ToAddModList-r11 OPTIONAL, -- Need ON + drx-Config-v1130 DRX-Config-v1130 OPTIONAL -- Need ON + ]], + [[ e-HARQ-Pattern-r12 BOOLEAN OPTIONAL, -- Need ON + dualConnectivityPHR CHOICE { + release NULL, + setup SEQUENCE { + phr-ModeOtherCG-r12 ENUMERATED {real, virtual} + } + } OPTIONAL, -- Need ON + logicalChannelSR-Config-r12 CHOICE { + release NULL, + setup SEQUENCE { + logicalChannelSR-ProhibitTimer-r12 ENUMERATED {sf20, sf40, sf64, sf128, sf512, sf1024, sf2560, spare1} + } + } OPTIONAL -- Need ON + ]] +} + +MAC-MainConfigSCell-r11 ::= SEQUENCE { + stag-Id-r11 STAG-Id-r11 OPTIONAL, -- Need OP + ... +} + +DRX-Config ::= CHOICE { + release NULL, + setup SEQUENCE { + onDurationTimer ENUMERATED { + psf1, psf2, psf3, psf4, psf5, psf6, + psf8, psf10, psf20, psf30, psf40, + psf50, psf60, psf80, psf100, + psf200}, + drx-InactivityTimer ENUMERATED { + psf1, psf2, psf3, psf4, psf5, psf6, + psf8, psf10, psf20, psf30, psf40, + psf50, psf60, psf80, psf100, + psf200, psf300, psf500, psf750, + psf1280, psf1920, psf2560, psf0-v1020, + spare9, spare8, spare7, spare6, + spare5, spare4, spare3, spare2, + spare1}, + drx-RetransmissionTimer ENUMERATED { + psf1, psf2, psf4, psf6, psf8, psf16, + psf24, psf33}, + longDRX-CycleStartOffset CHOICE { + sf10 INTEGER(0..9), + sf20 INTEGER(0..19), + sf32 INTEGER(0..31), + sf40 INTEGER(0..39), + sf64 INTEGER(0..63), + sf80 INTEGER(0..79), + sf128 INTEGER(0..127), + sf160 INTEGER(0..159), + sf256 INTEGER(0..255), + sf320 INTEGER(0..319), + sf512 INTEGER(0..511), + sf640 INTEGER(0..639), + sf1024 INTEGER(0..1023), + sf1280 INTEGER(0..1279), + sf2048 INTEGER(0..2047), + sf2560 INTEGER(0..2559) + }, + shortDRX SEQUENCE { + shortDRX-Cycle ENUMERATED { + sf2, sf5, sf8, sf10, sf16, sf20, + sf32, sf40, sf64, sf80, sf128, sf160, + sf256, sf320, sf512, sf640}, + drxShortCycleTimer INTEGER (1..16) + } OPTIONAL -- Need OR + } +} + +DRX-Config-v1130 ::= SEQUENCE { + drx-RetransmissionTimer-v1130 ENUMERATED {psf0-v1130} OPTIONAL, --Need OR + longDRX-CycleStartOffset-v1130 CHOICE { + sf60-v1130 INTEGER(0..59), + sf70-v1130 INTEGER(0..69) + } OPTIONAL, --Need OR + shortDRX-Cycle-v1130 ENUMERATED {sf4-v1130} OPTIONAL --Need OR +} + +PeriodicBSR-Timer-r12 ::= ENUMERATED { + sf5, sf10, sf16, sf20, sf32, sf40, sf64, sf80, + sf128, sf160, sf320, sf640, sf1280, sf2560, + infinity, spare1} + +RetxBSR-Timer-r12 ::= ENUMERATED { + sf320, sf640, sf1280, sf2560, sf5120, + sf10240, spare2, spare1} + +STAG-ToReleaseList-r11 ::= SEQUENCE (SIZE (1..maxSTAG-r11)) OF STAG-Id-r11 + +STAG-ToAddModList-r11 ::= SEQUENCE (SIZE (1..maxSTAG-r11)) OF STAG-ToAddMod-r11 + +STAG-ToAddMod-r11 ::= SEQUENCE { + stag-Id-r11 STAG-Id-r11, + timeAlignmentTimerSTAG-r11 TimeAlignmentTimer, + ... +} + +STAG-Id-r11::= INTEGER (1..maxSTAG-r11) + +-- ASN1STOP + +MAC-MainConfig field descriptions dl-PathlossChange +DL Pathloss Change and the change of the required power backoff due to power management (as allowed by P-MPRc [42]) for PHR reporting in TS 36.321 [6]. Value in dB. Value dB1 corresponds to 1 dB, dB3 corresponds to 3 dB and so on. The same value applies for each serving cell (although the associated functionality is performed independently for each cell). drx-Config +Used to configure DRX as specified in TS 36.321 [6]. E-UTRAN configures the values in DRX-Config-v1130 only if the UE indicates support for IDC indication. E-UTRAN configures drx-Config-v1130 only if drx-Config (without suffix) is configured. drx-InactivityTimer +Timer for DRX in TS 36.321 [6]. Value in number of PDCCH sub-frames. Value psf1 corresponds to 1 PDCCH sub-frame, psf2 corresponds to 2 PDCCH sub-frames and so on. drx-RetransmissionTimer +Timer for DRX in TS 36.321 [6]. Value in number of PDCCH sub-frames. Value psf1 corresponds to 1 PDCCH sub-frame, psf2 corresponds to 2 PDCCH sub-frames and so on. In case drx-RetransmissionTimer-v1130 is signalled, the UE shall ignore drx-RetransmissionTimer (i.e. without suffix). drxShortCycleTimer +Timer for DRX in TS 36.321 [6]. Value in multiples of shortDRX-Cycle. A value of 1 corresponds to shortDRX-Cycle, a value of 2 corresponds to 2 * shortDRX-Cycle and so on. dualConnectivityPHR +Indicates if power headroom shall be reported using Dual Connectivity Power Headroom Report MAC Control Element defined in TS 36.321 [6] (value setup). If PHR functionality and dual connectivity are configured, E-UTRAN always configures the value setup for this field and configures phr-Config and dualConnectivityPHR for both CGs. e-HARQ-Pattern +TRUE indicates that enhanced HARQ pattern for TTI bundling is enabled for FDD. E-UTRAN enables this field only when ttiBundling is set to TRUE. extendedBSR-Sizes +If value setup is configured, the BSR index indicates extended BSR size levels as defined in TS 36.321 [6, Table 6.1.3.1-2]. extendedPHR +Indicates if power headroom shall be reported using the Extended Power Headroom Report MAC control element defined in TS 36.321 [6] (value setup). E-UTRAN always configures the value setup if more than one Serving Cell with uplink is configured and if dual connectivity is not configured. E-UTRAN configures extendedPHR only if phr-Config is configured. The UE shall release extendedPHR if phr-Config is released. logicalChannelSR-ProhibitTimer +Timer used to delay the transmission of an SR for logical channels enabled by logicalChannelSR-Prohibit. Value sf20 corresponds to 20 subframes, sf40 corresponds to 40 subframes, and so on. See TS 36.321 [6]. longDRX-CycleStartOffset +longDRX-Cycle and drxStartOffset in TS 36.321 [6]. The value of longDRX-Cycle is in number of sub-frames. Value sf10 corresponds to 10 sub-frames, sf20 corresponds to 20 sub-frames and so on. If shortDRX-Cycle is configured, the value of longDRX-Cycle shall be a multiple of the shortDRX-Cycle value. The value of drxStartOffset value is in number of sub-frames. In case longDRX-CycleStartOffset-v1130 is signalled, the UE shall ignore longDRX-CycleStartOffset (i.e. without suffix). maxHARQ-Tx +Maximum number of transmissions for UL HARQ in TS 36.321 [6]. onDurationTimer +Timer for DRX in TS 36.321 [6]. Value in number of PDCCH sub-frames. Value psf1 corresponds to 1 PDCCH sub-frame, psf2 corresponds to 2 PDCCH sub-frames and so on. periodicBSR-Timer +Timer for BSR reporting in TS 36.321 [6]. Value in number of sub-frames. Value sf10 corresponds to 10 sub-frames, sf20 corresponds to 20 sub-frames and so on. periodicPHR-Timer +Timer for PHR reporting in TS 36.321 [6]. Value in number of sub-frames. Value sf10 corresponds to 10 subframes, sf20 corresponds to 20 subframes and so on. phr-ModeOtherCG +Indicates the mode (i.e. real or virtual) used for the PHR of the activated cells that are part of the other Cell Group (i.e. MCG or SCG), when DC is configured. prohibitPHR-Timer +Timer for PHR reporting in TS 36.321 [6]. Value in number of sub-frames. Value sf0 corresponds to 0 subframes, sf100 corresponds to 100 subframes and so on. retxBSR-Timer +Timer for BSR reporting in TS 36.321 [6]. Value in number of sub-frames. Value sf640 corresponds to 640 sub-frames, sf1280 corresponds to 1280 sub-frames and so on. sCellDeactivationTimer +SCell deactivation timer in TS 36.321 [6]. Value in number of radio frames. Value rf4 corresponds to 4 radio frames, value rf8 corresponds to 8 radio frames and so on. E-UTRAN only configures the field if the UE is configured with one or more SCells other than the PSCell. If the field is absent, the UE shall delete any existing value for this field and assume the value to be set to infinity. The same value applies for each SCell of a Cell Group (i.e. MCG or SCG) (although the associated functionality is performed independently for each SCell). shortDRX-Cycle +Short DRX cycle in TS 36.321 [6]. Value in number of sub-frames. Value sf2 corresponds to 2 sub-frames, sf5 corresponds to 5 subframes and so on. In case shortDRX-Cycle-v1130 is signalled, the UE shall ignore shortDRX-Cycle (i.e. without suffix). sr-ProhibitTimer +Timer for SR transmission on PUCCH in TS 36.321 [6]. Value in number of SR period(s). Value 0 means no timer for SR transmission on PUCCH is configured. Value 1 corresponds to one SR period, Value 2 corresponds to 2*SR periods and so on. SR period is defined in TS 36.213 [23, table 10.1.5-1]. stag-Id +Indicates the TAG of an SCell, see TS 36.321 [6]. Uniquely identifies the TAG within the scope of a Cell Group (i.e. MCG or SCG). If the field is not configured for an SCell (e.g. absent in MAC-MainConfigSCell), the SCell is part of the PTAG. stag-ToAddModList, stag-ToReleaseList +Used to configure one or more STAGs. E-UTRAN ensures that a STAG contains at least one SCell with configured uplink. If, due to SCell release a reconfiguration would result in an ‘empty’ TAG, E-UTRAN includes release of the concerned TAG. timeAlignmentTimerSTAG +Indicates the value of the time alignment timer for an STAG, see TS 36.321 [6]. ttiBundling +TRUE indicates that TTI bundling TS 36.321 [6] is enabled while FALSE indicates that TTI bundling is disabled. TTI bundling can be enabled for FDD and for TDD only for configurations 0, 1 and 6. The functionality is performed independently per Cell Group (i.e. MCG or SCG), but E-UTRAN does not configure TTI bundling for the SCG. For a TDD PCell, E-UTRAN does not simultaneously enable TTI bundling and semi-persistent scheduling in this release of specification. Furthermore, for a Cell Group, E-UTRAN does not simultaneously configure TTI bundling and SCells with configured uplink, and E-UTRAN does not simultaneously configure TTI bundling and eIMTA. +– PDCP-Config +The IE PDCP-Config is used to set the configurable PDCP parameters for data radio bearers. +PDCP-Config information element +-- ASN1START + +PDCP-Config ::= SEQUENCE { + discardTimer ENUMERATED { + ms50, ms100, ms150, ms300, ms500, + ms750, ms1500, infinity + } OPTIONAL, -- Cond Setup + rlc-AM SEQUENCE { + statusReportRequired BOOLEAN + } OPTIONAL, -- Cond Rlc-AM + rlc-UM SEQUENCE { + pdcp-SN-Size ENUMERATED {len7bits, len12bits} + } OPTIONAL, -- Cond Rlc-UM + headerCompression CHOICE { + notUsed NULL, + rohc SEQUENCE { + maxCID INTEGER (1..16383) DEFAULT 15, + profiles SEQUENCE { + profile0x0001 BOOLEAN, + profile0x0002 BOOLEAN, + profile0x0003 BOOLEAN, + profile0x0004 BOOLEAN, + profile0x0006 BOOLEAN, + profile0x0101 BOOLEAN, + profile0x0102 BOOLEAN, + profile0x0103 BOOLEAN, + profile0x0104 BOOLEAN + }, + ... + } + }, + ..., + [[ rn-IntegrityProtection-r10 ENUMERATED {enabled} OPTIONAL -- Cond RN + ]], + [[ pdcp-SN-Size-v1130 ENUMERATED {len15bits} OPTIONAL -- Cond Rlc-AM2 + ]], + [[ ul-DataSplitDRB-ViaSCG-r12 BOOLEAN OPTIONAL, -- Need ON + t-Reordering-r12 ENUMERATED { + ms0, ms20, ms40, ms60, ms80, ms100, ms120, ms140, + ms160, ms180, ms200, ms220, ms240, ms260, ms280, ms300, + ms500, ms750, spare14, spare13, spare12, spare11, spare10, + spare9, spare8, spare7, spare6, spare5, spare4, spare3, + spare2, spare1} OPTIONAL -- Cond SetupS + ]] +} + +-- ASN1STOP + +PDCP-Config field descriptions discardTimer +Indicates the discard timer value specified in TS 36.323 [8]. Value in milliseconds. Value ms50 means 50 ms, ms100 means 100 ms and so on. headerCompression +E-UTRAN does not reconfigure header compression for an MCG DRB except for upon handover and upon the first reconfiguration after RRC connection re-establishment. E-UTRAN does not reconfigure header compression for a SCG DRB except for upon SCG change involving PDCP re-establishment. For split DRBs E-UTRAN configures only notUsed. maxCID +Indicates the value of the MAX_CID parameter as specified in TS 36.323 [8]. The total value of MAX_CIDs across all bearers for the UE should be less than or equal to the value of maxNumberROHC-ContextSessions parameter as indicated by the UE. pdcp-SN-Size +Indicates the PDCP Sequence Number length in bits. For RLC UM: value len7bits means that the 7-bit PDCP SN format is used and len12bits means that the 12-bit PDCP SN format is used. For RLC AM: value len15bits means that the 15-bit PDCP SN format is used, otherwise if the field is not included upon setup of the PCDP entity 12-bit PDCP SN format is used, as specified in TS 36.323 [8]. profiles +The profiles used by both compressor and decompressor in both UE and E-UTRAN. The field indicates which of the ROHC profiles specified in TS 36.323 [8] are supported, i.e. value true indicates that the profile is supported. Profile 0x0000 shall always be supported when the use of ROHC is configured. If support of two ROHC profile identifiers with the same 8 LSB’s is signalled, only the profile corresponding to the highest value shall be applied. E-UTRAN does not configure ROHC while t-Reordering is configured (i.e. for split DRBs or upon reconfiguration from split to MCG DRB). t-Reordering +Indicates the value of the reordering timer, as specified in TS 36.323 [8]. Value in milliseconds. Value ms0 means 0 ms, ms20 means 20 ms and so on. rn-IntegrityProtection +Indicates that integrity protection or verification shall be applied for all subsequent packets received and sent by the RN on the DRB. statusReportRequired +Indicates whether or not the UE shall send a PDCP Status Report upon re-establishment of the PDCP entity and upon PDCP data recovery as specified in TS 36.323 [8]. ul-DataSplitDRB-ViaSCG +Indicates whether the UE shall send PDCP PDUs via SCG. E-UTRAN only configures the field (i.e. indicates value TRUE) for split DRBs. +Conditional presence Explanation Rlc-AM The field is mandatory present upon setup of a PDCP entity for a radio bearer configured with RLC AM. The field is optional, need ON, in case of reconfiguration of a PDCP entity at handover, at the first reconfiguration after RRC re-establishment or at SCG change involving PDCP re-establishment or PDCP data recovery for a radio bearer configured with RLC AM. Otherwise the field is not present. Rlc-AM2 The field is optionally present, need OP, upon setup of a PDCP entity for a radio bearer configured with RLC AM. Otherwise the field is not present. Rlc-UM The field is mandatory present upon setup of a PDCP entity for a radio bearer configured with RLC UM. It is optionally present, Need ON, upon handover within E-UTRA, upon the first reconfiguration after re-establishment and upon SCG change involving PDCP re-establishment. Otherwise the field is not present. RN The field is optionally present when signalled to the RN, need OR. Otherwise the field is not present. Setup The field is mandatory present in case of radio bearer setup. Otherwise the field is optionally present, need ON. SetupS The field is mandatory present in case of setup of or reconfiguration to a split DRB. The field is optionally present upon reconfiguration of a split DRB or upon DRB type change from split to MCG DRB, need ON. Otherwise the field is not present. +– PDSCH-Config +The IE PDSCH-ConfigCommon and the IE PDSCH-ConfigDedicated are used to specify the common and the UE specific PDSCH configuration respectively. +PDSCH-Config information element +-- ASN1START + +PDSCH-ConfigCommon ::= SEQUENCE { + referenceSignalPower INTEGER (-60..50), + p-b INTEGER (0..3) +} + +PDSCH-ConfigDedicated::= SEQUENCE { + p-a ENUMERATED { + dB-6, dB-4dot77, dB-3, dB-1dot77, + dB0, dB1, dB2, dB3} +} + +PDSCH-ConfigDedicated-v1130 ::= SEQUENCE { + dmrs-ConfigPDSCH-r11 DMRS-Config-r11 OPTIONAL, -- Need ON + qcl-Operation ENUMERATED {typeA, typeB} OPTIONAL, -- Need OR + re-MappingQCLConfigToReleaseList-r11 RE-MappingQCLConfigToReleaseList-r11 OPTIONAL, -- Need ON + re-MappingQCLConfigToAddModList-r11 RE-MappingQCLConfigToAddModList-r11 OPTIONAL -- Need ON +} + +RE-MappingQCLConfigToAddModList-r11 ::= SEQUENCE (SIZE (1..maxRE-MapQCL-r11)) OF PDSCH-RE-MappingQCL-Config-r11 + +RE-MappingQCLConfigToReleaseList-r11 ::= SEQUENCE (SIZE (1..maxRE-MapQCL-r11)) OF PDSCH-RE-MappingQCL-ConfigId-r11 + +PDSCH-RE-MappingQCL-Config-r11 ::= SEQUENCE { + pdsch-RE-MappingQCL-ConfigId-r11 PDSCH-RE-MappingQCL-ConfigId-r11, + optionalSetOfFields-r11 SEQUENCE { + crs-PortsCount-r11 ENUMERATED {n1, n2, n4, spare1}, + crs-FreqShift-r11 INTEGER (0..5), + mbsfn-SubframeConfigList-r11 CHOICE { + release NULL, + setup SEQUENCE { + subframeConfigList MBSFN-SubframeConfigList + } + } OPTIONAL, -- Need ON + pdsch-Start-r11 ENUMERATED {reserved, n1, n2, n3, n4, assigned} + } OPTIONAL, -- Need OP + csi-RS-ConfigZPId-r11 CSI-RS-ConfigZPId-r11, + qcl-CSI-RS-ConfigNZPId-r11 CSI-RS-ConfigNZPId-r11 OPTIONAL, -- Need OR + ... +} + +-- ASN1STOP + +PDSCH-Config field descriptions optionalSetOfFields +If absent, the UE releases the configuration provided previously, if any, and applies the values from the serving cell configured on the same frequency. p-a +Parameter: , see TS 36.213 [23, 5.2]. Value dB-6 corresponds to -6 dB, dB-4dot77 corresponds to -4.77 dB etc. p-b +Parameter: , see TS 36.213 [23, Table 5.2-1]. pdsch-Start +The starting OFDM symbol of PDSCH for the concerned serving cell, see TS 36.213 [23. 7.1.6.4]. Values 1, 2, 3 are applicable when dl-Bandwidth for the concerned serving cell is greater than 10 resource blocks, values 2, 3, 4 are applicable when dl-Bandwidth for the concerned serving cell is less than or equal to 10 resource blocks, see TS 36.211 [21, Table 6.7-1]. Value n1 corresponds to 1, value n2 corresponds to 2 and so on. qcl-CSI-RS-ConfigNZPId +Indicates the CSI-RS resource that is quasi co-located with the PDSCH antenna ports, see TS 36.213 [23, 7.1.9]. E-UTRAN configures this field if and only if the UE is configured with qcl-Operation set to typeB. qcl-Operation +Indicates the quasi co-location behaviour to be used by the UE, type A and type B, as described in TS 36.213 [23, 7.1.10]. referenceSignalPower +Parameter: Reference-signal power, which provides the downlink reference-signal EPRE, see TS 36.213 [23, 5.2]. The actual value in dBm. re-MappingQCLConfigToAddModList, re-MappingQCLConfigToReleaseList +For a serving frequency E-UTRAN configures at least one PDSCH-RE-MappingQCL-Config when transmission mode 10 is configured for the serving cell on this carrier frequency. Otherwise it does not configure this IE. +– PDSCH-RE-MappingQCL-ConfigId +The IE PDSCH-RE-MappingQCL-ConfigId is used to identify a set of PDSCH parameters related to resource element mapping and quasi co-location, as configured by the IE PDSCH-RE-MappingQCL-Config. The identity is unique within the scope of a carrier frequency. +PDSCH-RE-MappingQCL-ConfigId information elements +-- ASN1START + +PDSCH-RE-MappingQCL-ConfigId-r11 ::= INTEGER (1..maxRE-MapQCL-r11) + +-- ASN1STOP + +– PHICH-Config +The IE PHICH-Config is used to specify the PHICH configuration. +PHICH-Config information element +-- ASN1START + +PHICH-Config ::= SEQUENCE { + phich-Duration ENUMERATED {normal, extended}, + phich-Resource ENUMERATED {oneSixth, half, one, two} +} + +-- ASN1STOP + +PHICH-Config field descriptions phich-Duration +Parameter: PHICH-Duration, see TS 36.211 [21, Table 6.9.3-1]. phich-Resource +Parameter: Ng, see TS 36.211 [21, 6.9]. Value oneSixth corresponds to 1/6, half corresponds to 1/2 and so on. +– PhysicalConfigDedicated +The IE PhysicalConfigDedicated is used to specify the UE specific physical channel configuration. +PhysicalConfigDedicated information element +-- ASN1START + +PhysicalConfigDedicated ::= SEQUENCE { + pdsch-ConfigDedicated PDSCH-ConfigDedicated OPTIONAL, -- Need ON + pucch-ConfigDedicated PUCCH-ConfigDedicated OPTIONAL, -- Need ON + pusch-ConfigDedicated PUSCH-ConfigDedicated OPTIONAL, -- Need ON + uplinkPowerControlDedicated UplinkPowerControlDedicated OPTIONAL, -- Need ON + tpc-PDCCH-ConfigPUCCH TPC-PDCCH-Config OPTIONAL, -- Need ON + tpc-PDCCH-ConfigPUSCH TPC-PDCCH-Config OPTIONAL, -- Need ON + cqi-ReportConfig CQI-ReportConfig OPTIONAL, -- Cond CQI-r8 + soundingRS-UL-ConfigDedicated SoundingRS-UL-ConfigDedicated OPTIONAL, -- Need ON + antennaInfo CHOICE { + explicitValue AntennaInfoDedicated, + defaultValue NULL + } OPTIONAL, -- Cond AI-r8 + schedulingRequestConfig SchedulingRequestConfig OPTIONAL, -- Need ON + ..., + [[ cqi-ReportConfig-v920 CQI-ReportConfig-v920 OPTIONAL, -- Cond CQI-r8 + antennaInfo-v920 AntennaInfoDedicated-v920 OPTIONAL -- Cond AI-r8 + ]], + [[ antennaInfo-r10 CHOICE { + explicitValue-r10 AntennaInfoDedicated-r10, + defaultValue NULL + } OPTIONAL, -- Cond AI-r10 + antennaInfoUL-r10 AntennaInfoUL-r10 OPTIONAL, -- Need ON + cif-Presence-r10 BOOLEAN OPTIONAL, -- Need ON + cqi-ReportConfig-r10 CQI-ReportConfig-r10 OPTIONAL, -- Cond CQI-r10 + csi-RS-Config-r10 CSI-RS-Config-r10 OPTIONAL, -- Need ON + pucch-ConfigDedicated-v1020 PUCCH-ConfigDedicated-v1020 OPTIONAL, -- Need ON + pusch-ConfigDedicated-v1020 PUSCH-ConfigDedicated-v1020 OPTIONAL, -- Need ON + schedulingRequestConfig-v1020 SchedulingRequestConfig-v1020 OPTIONAL, -- Need ON + soundingRS-UL-ConfigDedicated-v1020 + SoundingRS-UL-ConfigDedicated-v1020 OPTIONAL, -- Need ON + soundingRS-UL-ConfigDedicatedAperiodic-r10 + SoundingRS-UL-ConfigDedicatedAperiodic-r10 OPTIONAL, -- Need ON + uplinkPowerControlDedicated-v1020 UplinkPowerControlDedicated-v1020 OPTIONAL -- Need ON + ]], + [[ additionalSpectrumEmissionCA-r10 CHOICE { + release NULL, + setup SEQUENCE { + additionalSpectrumEmissionPCell-r10 AdditionalSpectrumEmission + } + } OPTIONAL -- Need ON + ]], + [[ -- DL configuration as well as configuration applicable for DL and UL + csi-RS-ConfigNZPToReleaseList-r11 CSI-RS-ConfigNZPToReleaseList-r11 OPTIONAL, -- Need ON + csi-RS-ConfigNZPToAddModList-r11 CSI-RS-ConfigNZPToAddModList-r11 OPTIONAL, -- Need ON + csi-RS-ConfigZPToReleaseList-r11 CSI-RS-ConfigZPToReleaseList-r11 OPTIONAL, -- Need ON + csi-RS-ConfigZPToAddModList-r11 CSI-RS-ConfigZPToAddModList-r11 OPTIONAL, -- Need ON + epdcch-Config-r11 EPDCCH-Config-r11 OPTIONAL, -- Need ON + pdsch-ConfigDedicated-v1130 PDSCH-ConfigDedicated-v1130 OPTIONAL, -- Need ON + -- UL configuration + cqi-ReportConfig-v1130 CQI-ReportConfig-v1130 OPTIONAL, -- Need ON + pucch-ConfigDedicated-v1130 PUCCH-ConfigDedicated-v1130 OPTIONAL, -- Need ON + pusch-ConfigDedicated-v1130 PUSCH-ConfigDedicated-v1130 OPTIONAL, -- Need ON + uplinkPowerControlDedicated-v1130 UplinkPowerControlDedicated-v1130 OPTIONAL -- Need ON + ]], + [[ antennaInfo-v1250 AntennaInfoDedicated-v1250 OPTIONAL, -- Cond AI-r10 + eimta-MainConfig-r12 EIMTA-MainConfig-r12 OPTIONAL, -- Need ON + eimta-MainConfigPCell-r12 EIMTA-MainConfigServCell-r12 OPTIONAL, -- Need ON + pucch-ConfigDedicated-v1250 PUCCH-ConfigDedicated-v1250 OPTIONAL, -- Need ON + cqi-ReportConfigPCell-v1250 CQI-ReportConfig-v1250 OPTIONAL, -- Need ON + uplinkPowerControlDedicated-v1250 UplinkPowerControlDedicated-v1250 OPTIONAL, -- Need ON + pusch-ConfigDedicated-v1250 PUSCH-ConfigDedicated-v1250 OPTIONAL, -- Need ON + csi-RS-Config-v1250 CSI-RS-Config-v1250 OPTIONAL -- Need ON + ]] +} +PhysicalConfigDedicatedSCell-r10 ::= SEQUENCE { + -- DL configuration as well as configuration applicable for DL and UL + nonUL-Configuration-r10 SEQUENCE { + antennaInfo-r10 AntennaInfoDedicated-r10 OPTIONAL, -- Need ON + crossCarrierSchedulingConfig-r10 CrossCarrierSchedulingConfig-r10 OPTIONAL, -- Need ON + csi-RS-Config-r10 CSI-RS-Config-r10 OPTIONAL, -- Need ON + pdsch-ConfigDedicated-r10 PDSCH-ConfigDedicated OPTIONAL -- Need ON + } OPTIONAL, -- Cond SCellAdd + -- UL configuration + ul-Configuration-r10 SEQUENCE { + antennaInfoUL-r10 AntennaInfoUL-r10 OPTIONAL, -- Need ON + pusch-ConfigDedicatedSCell-r10 PUSCH-ConfigDedicatedSCell-r10 OPTIONAL, -- Need ON + uplinkPowerControlDedicatedSCell-r10 UplinkPowerControlDedicatedSCell-r10 OPTIONAL, -- Need ON + cqi-ReportConfigSCell-r10 CQI-ReportConfigSCell-r10 OPTIONAL, -- Need ON + soundingRS-UL-ConfigDedicated-r10 SoundingRS-UL-ConfigDedicated OPTIONAL, -- Need ON + soundingRS-UL-ConfigDedicated-v1020 + SoundingRS-UL-ConfigDedicated-v1020 OPTIONAL, -- Need ON + soundingRS-UL-ConfigDedicatedAperiodic-r10 + SoundingRS-UL-ConfigDedicatedAperiodic-r10 OPTIONAL -- Need ON + } OPTIONAL, -- Cond CommonUL + ..., + [[ -- DL configuration as well as configuration applicable for DL and UL + csi-RS-ConfigNZPToReleaseList-r11 CSI-RS-ConfigNZPToReleaseList-r11 OPTIONAL, -- Need ON + csi-RS-ConfigNZPToAddModList-r11 CSI-RS-ConfigNZPToAddModList-r11 OPTIONAL, -- Need ON + csi-RS-ConfigZPToReleaseList-r11 CSI-RS-ConfigZPToReleaseList-r11 OPTIONAL, -- Need ON + csi-RS-ConfigZPToAddModList-r11 CSI-RS-ConfigZPToAddModList-r11 OPTIONAL, -- Need ON + epdcch-Config-r11 EPDCCH-Config-r11 OPTIONAL, -- Need ON + pdsch-ConfigDedicated-v1130 PDSCH-ConfigDedicated-v1130 OPTIONAL, -- Need ON + -- UL configuration + cqi-ReportConfig-v1130 CQI-ReportConfig-v1130 OPTIONAL, -- Need ON + pusch-ConfigDedicated-v1130 PUSCH-ConfigDedicated-v1130 OPTIONAL, -- Need ON + uplinkPowerControlDedicatedSCell-v1130 UplinkPowerControlDedicated-v1130 OPTIONAL -- Need ON + ]], + [[ antennaInfo-v1250 AntennaInfoDedicated-v1250 OPTIONAL, -- Need ON + eimta-MainConfigSCell-r12 EIMTA-MainConfigServCell-r12 OPTIONAL, -- Need ON + cqi-ReportConfigSCell-v1250 CQI-ReportConfig-v1250 OPTIONAL, -- Need ON + uplinkPowerControlDedicatedSCell-v1250 UplinkPowerControlDedicated-v1250 OPTIONAL, -- Need ON + csi-RS-Config-v1250 CSI-RS-Config-v1250 OPTIONAL -- Need ON + ]] +} + +CSI-RS-ConfigNZPToAddModList-r11 ::= SEQUENCE (SIZE (1..maxCSI-RS-NZP-r11)) OF CSI-RS-ConfigNZP-r11 + +CSI-RS-ConfigNZPToReleaseList-r11 ::= SEQUENCE (SIZE (1..maxCSI-RS-NZP-r11)) OF CSI-RS-ConfigNZPId-r11 + +CSI-RS-ConfigZPToAddModList-r11 ::= SEQUENCE (SIZE (1..maxCSI-RS-ZP-r11)) OF CSI-RS-ConfigZP-r11 + +CSI-RS-ConfigZPToReleaseList-r11 ::= SEQUENCE (SIZE (1..maxCSI-RS-ZP-r11)) OF CSI-RS-ConfigZPId-r11 + +-- ASN1STOP + +PhysicalConfigDedicated field descriptions additionalSpectrumEmissionPCell +E-UTRAN does not configure this field in this release of the specification. antennaInfo +A choice is used to indicate whether the antennaInfo is signalled explicitly or set to the default antenna configuration as specified in section 9.2.4. csi-RS-Config +For a serving frequency E-UTRAN does not configure csi-RS-Config (includes zeroTxPowerCSI-RS) when transmission mode 10 is configured for the serving cell on this carrier frequency. csi-RS-ConfigNZPToAddModList +For a serving frequency E-UTRAN configures one or more CSI-RS-ConfigNZP only when transmission mode 10 is configured for the serving cell on this carrier frequency. EUTRAN configures a maximum of one CSI-RS-ConfigNZP for a serving frequency on which the UE supports only one CSI process (i.e. supportedCSI-Proc is indicated as n1). csi-RS-ConfigZPToAddModList +For a serving frequency E-UTRAN configures one or more CSI-RS-ConfigZP only when transmission mode 10 is configured for the serving cell on this carrier frequency. eimta-MainConfigPCell, eimta-MainConfigSCell +If E-UTRAN configures eimta-MainConfigPCell or eimta-MainConfigSCell for one serving cell in a frequency band, E-UTRAN configures eimta-MainConfigPCell or eimta-MainConfigSCell for all serving cells residing on the frequency band. E-UTRAN configures eimta-MainConfigPCell or eimta-MainConfigSCell only if eimta-MainConfig is configured. epdcch-Config +indicates the EPDCCH-Config for the cell. E-UTRAN does not configure EPDCCH-Config for an SCell that is configured with value other for schedulingCellInfo in CrossCarrierSchedulingConfig. pdsch-ConfigDedicated-v1130 +For a serving frequency E-UTRAN configures pdsch-ConfigDedicated-v1130 only when transmission mode 10 is configured for the serving cell on this carrier frequency. pusch-ConfigDedicated-v1250 +E-UTRAN configures pusch-ConfigDedicated-v1250 only if tpc-SubframeSet is configured. tpc-PDCCH-ConfigPUCCH +PDCCH configuration for power control of PUCCH using format 3/3A, see TS 36.212 [22]. tpc-PDCCH-ConfigPUSCH +PDCCH configuration for power control of PUSCH using format 3/3A, see TS 36.212 [22]. uplinkPowerControlDedicated +E-UTRAN configures uplinkPowerControlDedicated-v1130 only if uplinkPowerControlDedicated (without suffix) is configured. uplinkPowerControlDedicatedSCell +E-UTRAN configures uplinkPowerControlDedicatedSCell-v1130 only if uplinkPowerControlDedicatedSCell-r10 is configured for this serving cell. +Conditional presence Explanation AI-r8 The field is optionally present, need ON, if antennaInfoDedicated-r10 is absent. Otherwise the field is not present AI-r10 The field is optionally present, need ON, if antennaInfoDedicated is absent. Otherwise the field is not present CommonUL The field is mandatory present if ul-Configuration of RadioResourceConfigCommonSCell-r10 is present; otherwise it is optional, need ON. CQI-r8 The field is optionally present, need ON, if cqi-ReportConfig-r10 is absent. Otherwise the field is not present CQI-r10 The field is optionally present, need ON, if cqi-ReportConfig is absent. Otherwise the field is not present SCellAdd The field is mandatory present if cellIdentification is present; otherwise it is optional, need ON. +NOTE 1: During handover, the UE performs a MAC reset, which involves reverting to the default CQI/ SRS/ SR configuration in accordance with subclause 5.3.13 and TS 36.321 [6, 5.9 & 5.2]. Hence, for these parts of the dedicated radio resource configuration, the default configuration (rather than the configuration used in the source PCell) is used as the basis for the delta signalling that is included in the message used to perform handover. +NOTE 2: Since delta signalling is not supported for the common SCell configuration, E-UTRAN can only add or release the uplink of an SCell by releasing and adding the concerned SCell. +– P-Max +The IE P-Max is used to limit the UE's uplink transmission power on a carrier frequency and is used to calculate the parameter Pcompensation defined in TS 36.304 [4]. Corresponds to parameter PEMAX or PEMAX,c in TS 36.101 [42]. The UE transmit power on one serving cell shall not exceed the configured maximum UE output power of the serving cell determined by this value as specified in TS 36.101 [42, 6.2.5 or 6.2.5A] or, when transmitting sidelink direct discovery announcements within the coverage of the concerned cell, as specified in TS 36.101 [42, 6.2.5D]. +P-Max information element +-- ASN1START + +P-Max ::= INTEGER (-30..33) + +-- ASN1STOP + +– PRACH-Config +The IE PRACH-ConfigSIB and IE PRACH-Config are used to specify the PRACH configuration in the system information and in the mobility control information, respectively. +PRACH-Config information elements +-- ASN1START + +PRACH-ConfigSIB ::= SEQUENCE { + rootSequenceIndex INTEGER (0..837), + prach-ConfigInfo PRACH-ConfigInfo +} + +PRACH-Config ::= SEQUENCE { + rootSequenceIndex INTEGER (0..837), + prach-ConfigInfo PRACH-ConfigInfo OPTIONAL -- Need ON +} + +PRACH-ConfigSCell-r10 ::= SEQUENCE { + prach-ConfigIndex-r10 INTEGER (0..63) +} + +PRACH-ConfigInfo ::= SEQUENCE { + prach-ConfigIndex INTEGER (0..63), + highSpeedFlag BOOLEAN, + zeroCorrelationZoneConfig INTEGER (0..15), + prach-FreqOffset INTEGER (0..94) +} + +-- ASN1STOP + +PRACH-Config field descriptions highSpeedFlag +Parameter: High-speed-flag, see TS 36.211, [21, 5.7.2].TRUE corresponds to Restricted set and FALSE to Unrestricted set. prach-ConfigIndex +Parameter: prach-ConfigurationIndex, see TS 36.211 [21, 5.7.1]. prach-FreqOffset +Parameter: prach-FrequencyOffset, see TS 36.211, [21, 5.7.1]. For TDD the value range is dependent on the value of prach-ConfigIndex. rootSequenceIndex +Parameter: RACH_ROOT_SEQUENCE, see TS 36.211 [21, 5.7.1]. zeroCorrelationZoneConfig +Parameter: NCS configuration, see TS 36.211, [21, 5.7.2: table 5.7.2-2] for preamble format 0..3 and TS 36.211, [21, 5.7.2: table 5.7.2-3] for preamble format 4. +– PresenceAntennaPort1 +The IE PresenceAntennaPort1 is used to indicate whether all the neighbouring cells use Antenna Port 1. When set to TRUE, the UE may assume that at least two cell-specific antenna ports are used in all neighbouring cells. +PresenceAntennaPort1 information element +-- ASN1START + +PresenceAntennaPort1 ::= BOOLEAN + +-- ASN1STOP + +– PUCCH-Config +The IE PUCCH-ConfigCommon and IE PUCCH-ConfigDedicated are used to specify the common and the UE specific PUCCH configuration respectively. +PUCCH-Config information elements +-- ASN1START + +PUCCH-ConfigCommon ::= SEQUENCE { + deltaPUCCH-Shift ENUMERATED {ds1, ds2, ds3}, + nRB-CQI INTEGER (0..98), + nCS-AN INTEGER (0..7), + n1PUCCH-AN INTEGER (0..2047) +} + +PUCCH-ConfigDedicated ::= SEQUENCE { + ackNackRepetition CHOICE{ + release NULL, + setup SEQUENCE { + repetitionFactor ENUMERATED {n2, n4, n6, spare1}, + n1PUCCH-AN-Rep INTEGER (0..2047) + } + }, + tdd-AckNackFeedbackMode ENUMERATED {bundling, multiplexing} OPTIONAL -- Cond TDD +} + +PUCCH-ConfigDedicated-v1020 ::= SEQUENCE { + pucch-Format-r10 CHOICE { + format3-r10 SEQUENCE { + n3PUCCH-AN-List-r10 SEQUENCE (SIZE (1..4)) OF INTEGER (0..549) OPTIONAL, -- Need ON + twoAntennaPortActivatedPUCCH-Format3-r10 CHOICE { + release NULL, + setup SEQUENCE { + n3PUCCH-AN-ListP1-r10 SEQUENCE (SIZE (1..4)) OF INTEGER (0..549) + } + } OPTIONAL -- Need ON + }, + channelSelection-r10 SEQUENCE { + n1PUCCH-AN-CS-r10 CHOICE { + release NULL, + setup SEQUENCE { + n1PUCCH-AN-CS-List-r10 SEQUENCE (SIZE (1..2)) OF N1PUCCH-AN-CS-r10 + } + } OPTIONAL -- Need ON + } + } OPTIONAL, -- Need OR + twoAntennaPortActivatedPUCCH-Format1a1b-r10 ENUMERATED {true} OPTIONAL, -- Need OR + simultaneousPUCCH-PUSCH-r10 ENUMERATED {true} OPTIONAL, -- Need OR + n1PUCCH-AN-RepP1-r10 INTEGER (0..2047) OPTIONAL -- Need OR +} + +PUCCH-ConfigDedicated-v1130 ::= SEQUENCE { + n1PUCCH-AN-CS-v1130 CHOICE { + release NULL, + setup SEQUENCE { + n1PUCCH-AN-CS-ListP1-r11 SEQUENCE (SIZE (2..4)) OF INTEGER (0..2047) + } + } OPTIONAL, -- Need ON + nPUCCH-Param-r11 CHOICE { + release NULL, + setup SEQUENCE { + nPUCCH-Identity-r11 INTEGER (0..503), + n1PUCCH-AN-r11 INTEGER (0..2047) + } + } OPTIONAL -- Need ON +} + +PUCCH-ConfigDedicated-v1250 ::= SEQUENCE { + nkaPUCCH-Param-r12 CHOICE { + release NULL, + setup SEQUENCE { + nkaPUCCH-AN-r12 INTEGER (0..2047) + } + } +} + +N1PUCCH-AN-CS-r10 ::= SEQUENCE (SIZE (1..4)) OF INTEGER (0..2047) + +-- ASN1STOP + +PUCCH-Config field descriptions ackNackRepetition +Parameter indicates whether ACK/NACK repetition is configured, see TS 36.213 [23, 10.1]. deltaPUCCH-Shift +Parameter: , see 36.211 [21, 5.4.1], where ds1 corresponds to value 1 ds2 to 2 etc. n1PUCCH-AN +Parameter: , see TS 36.213 [23, 10.1]. +n1PUCCH-AN-r11 indicates UE-specific PUCCH AN resource offset, see TS 36.213 [23, 10.1]. n1PUCCH-AN-CS-List +Parameter: for antenna port for PUCCH format 1b with channel selection, see TS 36.213 [23, 10.1.2.2.1, 10.1.3.2.1]. n1PUCCH-AN-CS-ListP1 +Parameter: for antenna port for PUCCH format 1b with channel selection, see TS 36.213 [23, 10.1]. E-UTRAN configures this field only when pucch-Format is set to channelSelection. n1PUCCH-AN-Rep, n1PUCCH-AN-RepP1 +Parameter: for antenna port P0 and for antenna port P1 respectively, see TS 36.213 [23, 10.1]. n3PUCCH-AN-List, n3PUCCH-AN-ListP1 +Parameter: for antenna port P0 and for antenna port P1 respectively, see TS 36.213 [23, 10.1]. nCS-An +Parameter: see TS 36.211 [21, 5.4]. nkaPUCCH-AN +Parameter: , see TS 36.213 [23, 10.1.3]. +nkaPUCCH-AN-r12 indicates PUCCH format 1a/1b starting offset for the subframe set , see TS 36.213 [23, 10.1.3]. E-UTRAN configures nkaPUCCH-AN only if eimta-MainConfig is configured. nPUCCH-Identity +Parameter: , see TS 36.211 [21, 5.5.1.5]. nRB-CQI +Parameter: , see TS 36.211 [21, 5.4]. pucch-Format +Parameter indicates one of the PUCCH formats for transmission of HARQ-ACK, see TS 36.213 [23, 10.1]. For TDD, if the UE is configured with PCell only, the channelSelection indicates the transmission of HARQ-ACK multiplexing as defined in Tables 10.1.3-5, 10.1.3-6, and 10.1.3-7 in TS 36.213 [23] for PUCCH, and in 7.3 in TS 36.213 [23] for PUSCH. repetitionFactor +Parameter see TS 36.213 [23, 10.1] where n2 corresponds to repetition factor 2, n4 to 4. simultaneousPUCCH-PUSCH +Parameter indicates whether simultaneous PUCCH and PUSCH transmissions is configured, see TS 36.213 [23, 10.1 and 5.1.1]. E-UTRAN configures this field for the PCell, only when the nonContiguousUL-RA-WithinCC-Info is set to supported in the band on which PCell is configured. Likewise, E-UTRAN configures this field for the PSCell, only when the nonContiguousUL-RA-WithinCC-Info is set to supported in the band on which PSCell is configured. tdd-AckNackFeedbackMode +Parameter indicates one of the TDD ACK/NACK feedback modes used, see TS 36.213 [23, 7.3 and 10.1.3]. The value bundling corresponds to use of ACK/NACK bundling whereas, the value multiplexing corresponds to ACK/NACK multiplexing as defined in Tables 10.1.3-2, 10.1.3-3, and 10.1.3-4 in TS 36.213 [23]. The same value applies to both ACK/NACK feedback modes on PUCCH as well as on PUSCH. twoAntennaPortActivatedPUCCH-Format1a1b +Indicates whether two antenna ports are configured for PUCCH format 1a/1b for HARQ-ACK, see TS 36.213 [23, 10.1]. The field also applies for PUCCH format 1a/1b transmission when format3 is configured, see TS 36.213 [23, 10.1.2.2.2, 10.1.3.2.2]. twoAntennaPortActivatedPUCCH-Format3 +Indicates whether two antenna ports are configured for PUCCH format 3 for HARQ-ACK, see TS 36.213 [23, 10.1]. +Conditional presence Explanation TDD The field is mandatory present for TDD if the pucch-Format is not present. If the pucch-Format is present, the field is not present and the UE shall delete any existing value for this field. It is not present for FDD and the UE shall delete any existing value for this field. +– PUSCH-Config +The IE PUSCH-ConfigCommon is used to specify the common PUSCH configuration and the reference signal configuration for PUSCH and PUCCH. The IE PUSCH-ConfigDedicated is used to specify the UE specific PUSCH configuration. +PUSCH-Config information element +-- ASN1START + +PUSCH-ConfigCommon ::= SEQUENCE { + pusch-ConfigBasic SEQUENCE { + n-SB INTEGER (1..4), + hoppingMode ENUMERATED {interSubFrame, intraAndInterSubFrame}, + pusch-HoppingOffset INTEGER (0..98), + enable64QAM BOOLEAN + }, + ul-ReferenceSignalsPUSCH UL-ReferenceSignalsPUSCH +} + +PUSCH-ConfigDedicated ::= SEQUENCE { + betaOffset-ACK-Index INTEGER (0..15), + betaOffset-RI-Index INTEGER (0..15), + betaOffset-CQI-Index INTEGER (0..15) +} + +PUSCH-ConfigDedicated-v1020 ::= SEQUENCE { + betaOffsetMC-r10 SEQUENCE { + betaOffset-ACK-Index-MC-r10 INTEGER (0..15), + betaOffset-RI-Index-MC-r10 INTEGER (0..15), + betaOffset-CQI-Index-MC-r10 INTEGER (0..15) + } OPTIONAL, -- Need OR + groupHoppingDisabled-r10 ENUMERATED {true} OPTIONAL, -- Need OR + dmrs-WithOCC-Activated-r10 ENUMERATED {true} OPTIONAL -- Need OR +} + +PUSCH-ConfigDedicated-v1130 ::= SEQUENCE { + pusch-DMRS-r11 CHOICE { + release NULL, + setup SEQUENCE { + nPUSCH-Identity-r11 INTEGER (0..509), + nDMRS-CSH-Identity-r11 INTEGER (0..509) + } + } +} + +PUSCH-ConfigDedicated-v1250::= SEQUENCE { + uciOnPUSCH CHOICE { + release NULL, + setup SEQUENCE { + betaOffset-ACK-Index-SubframeSet2-r12 INTEGER (0..15), + betaOffset-RI-Index-SubframeSet2-r12 INTEGER (0..15), + betaOffset-CQI-Index-SubframeSet2-r12 INTEGER (0..15), + betaOffsetMC-r12 SEQUENCE { + betaOffset-ACK-Index-MC-SubframeSet2-r12 INTEGER (0..15), + betaOffset-RI-Index-MC-SubframeSet2-r12 INTEGER (0..15), + betaOffset-CQI-Index-MC-SubframeSet2-r12 INTEGER (0..15) + } OPTIONAL -- Need OR + } + } +} + +PUSCH-ConfigDedicatedSCell-r10 ::= SEQUENCE { + groupHoppingDisabled-r10 ENUMERATED {true} OPTIONAL, -- Need OR + dmrs-WithOCC-Activated-r10 ENUMERATED {true} OPTIONAL -- Need OR +} + +UL-ReferenceSignalsPUSCH ::= SEQUENCE { + groupHoppingEnabled BOOLEAN, + groupAssignmentPUSCH INTEGER (0..29), + sequenceHoppingEnabled BOOLEAN, + cyclicShift INTEGER (0..7) +} + +-- ASN1STOP + +PUSCH-Config field descriptions betaOffset-ACK-Index, betaOffset-ACK-Index-MC +Parameter: , for single- and multiple-codeword respectively, see TS 36.213 [23, Table 8.6.3-1]. One value applies for all serving cells with an uplink and not configured with uplink power control subframe sets. The same value also applies for subframe set 1 of all serving cells with an uplink and configured with uplink power control subframe sets (the associated functionality is common i.e. not performed independently for each cell). betaOffset-ACK-Index-SubframeSet2, betaOffset-ACK-Index-MC-SubframeSet2 +Parameter: , for single- and multiple-codeword respectively, see TS 36.213 [23, Table 8.6.3-1]. One value applies for subframe set 2 of all serving cells with an uplink and configured with uplink power control subframe sets (the associated functionality is common i.e. not performed independently for each cell configured with uplink power control subframe sets). betaOffset-CQI-Index, betaOffset-CQI-Index-MC +Parameter: , for single- and multiple-codeword respectively, see TS 36.213 [23, Table 8.6.3-3]. One value applies for all serving cells with an uplink and not configured with uplink power control subframe sets. The same value also applies for subframe set 1 of all serving cells with an uplink and configured with uplink power control subframe sets (the associated functionality is common i.e. not performed independently for each cell). betaOffset-CQI-Index-SubframeSet2, betaOffset-CQI-Index-MC-SubframeSet2 +Parameter: , for single- and multiple-codeword respectively, see TS 36.213 [23, Table 8.6.3-3]. One value applies for subframe set 2 of all serving cells with an uplink and configured with uplink power control subframe sets (the associated functionality is common i.e. not performed independently for each cell configured with uplink power control subframe sets). betaOffset-RI-Index, betaOffset-RI-Index-MC +Parameter: , for single- and multiple-codeword respectively, see TS 36.213 [23, Table 8.6.3-2]. One value applies for all serving cells with an uplink and not configured with uplink power control subframe sets. The same value also applies for subframe set 1 of all serving cells with an uplink and configured with uplink power control subframe sets (the associated functionality is common i.e. not performed independently for each cell). betaOffset-RI-Index-SubframeSet2, betaOffset-RI-Index-MC-SubframeSet2 +Parameter: , for single- and multiple-codeword respectively, see TS 36.213 [23, Table 8.6.3-2]. One value applies for subframe set 2 of all serving cells with an uplink and configured with uplink power control subframe sets (the associated functionality is common i.e. not performed independently for each cell configured with uplink power control subframe sets). cyclicShift +Parameters: cyclicShift, see TS 36.211 [21, Table 5.5.2.1.1-2]. dmrs-WithOCC-Activated +Parameter: Activate-DMRS-with OCC, see TS 36.211 [21, 5.5.2.1]. enable64QAM +See TS 36.213 [23, 8.6.1]. TRUE indicates that 64QAM is allowed while FALSE indicates that 64QAM is not allowed. groupAssignmentPUSCH +Parameter: ?SS See TS 36.211 [21, 5.5.1.3]. groupHoppingDisabled +Parameter: Disable-sequence-group-hopping, see TS 36.211 [21, 5.5.1.3]. groupHoppingEnabled +Parameter: Group-hopping-enabled, see TS 36.211 [21, 5.5.1.3]. hoppingMode +Parameter: Hopping-mode, see TS 36.211 [21, 5.3.4]. nDMRS-CSH-Identity +Parameter: , see TS 36.211 [21, 5.5.2.1.1]. nPUSCH-Identity +Parameter: , see TS 36.211 [21, 5.5.1.5]. n-SB +Parameter: Nsb see TS 36.211 [21, 5.3.4]. pusch-hoppingOffset +Parameter: , see TS 36.211 [21, 5.3.4]. sequenceHoppingEnabled +Parameter: Sequence-hopping-enabled, see TS 36.211 [21, 5.5.1.4]. ul- ReferenceSignalsPUSCH +Used to specify parameters needed for the transmission on PUSCH (or PUCCH). +– RACH-ConfigCommon +The IE RACH-ConfigCommon is used to specify the generic random access parameters. +RACH-ConfigCommon information element +-- ASN1START + +RACH-ConfigCommon ::= SEQUENCE { + preambleInfo SEQUENCE { + numberOfRA-Preambles ENUMERATED { + n4, n8, n12, n16 ,n20, n24, n28, + n32, n36, n40, n44, n48, n52, n56, + n60, n64}, + preamblesGroupAConfig SEQUENCE { + sizeOfRA-PreamblesGroupA ENUMERATED { + n4, n8, n12, n16 ,n20, n24, n28, + n32, n36, n40, n44, n48, n52, n56, + n60}, + messageSizeGroupA ENUMERATED {b56, b144, b208, b256}, + messagePowerOffsetGroupB ENUMERATED { + minusinfinity, dB0, dB5, dB8, dB10, dB12, + dB15, dB18}, + ... + } OPTIONAL -- Need OP + }, + powerRampingParameters PowerRampingParameters, + ra-SupervisionInfo SEQUENCE { + preambleTransMax PreambleTransMax, + ra-ResponseWindowSize ENUMERATED { + sf2, sf3, sf4, sf5, sf6, sf7, + sf8, sf10}, + mac-ContentionResolutionTimer ENUMERATED { + sf8, sf16, sf24, sf32, sf40, sf48, + sf56, sf64} + }, + maxHARQ-Msg3Tx INTEGER (1..8), + ... +} + +RACH-ConfigCommon-v1250 ::= SEQUENCE { + txFailParams-r12 SEQUENCE { + connEstFailCount-r12 ENUMERATED {n1, n2, n3, n4}, + connEstFailOffsetValidity-r12 ENUMERATED {s30, s60, s120, s240, + s300, s420, s600, s900}, + connEstFailOffset-r12 INTEGER (0..15) OPTIONAL -- Need OP + } +} + +RACH-ConfigCommonSCell-r11 ::= SEQUENCE { + powerRampingParameters-r11 PowerRampingParameters, + ra-SupervisionInfo-r11 SEQUENCE { + preambleTransMax-r11 PreambleTransMax + }, + ... +} + +PowerRampingParameters ::= SEQUENCE { + powerRampingStep ENUMERATED {dB0, dB2,dB4, dB6}, + preambleInitialReceivedTargetPower ENUMERATED { + dBm-120, dBm-118, dBm-116, dBm-114, dBm-112, + dBm-110, dBm-108, dBm-106, dBm-104, dBm-102, + dBm-100, dBm-98, dBm-96, dBm-94, + dBm-92, dBm-90} +} + +PreambleTransMax ::= ENUMERATED { + n3, n4, n5, n6, n7, n8, n10, n20, n50, + n100, n200} + +-- ASN1STOP + +RACH-ConfigCommon field descriptions connEstFailCount +Number of times that the UE detects T300 expiry on the same cell before applying connEstFailOffset. connEstFailOffset +Parameter “Qoffsettemp” in TS 36.304 [4]. If the field is not present the value of infinity shall be used for “Qoffsettemp”. connEstFailOffsetValidity +Amount of time that the UE applies connEstFailOffset before removing the offset from evaluation of the cell. Value s30 corresponds to 30 seconds, s60 corresponds to 60 seconds, and so on. mac-ContentionResolutionTimer +Timer for contention resolution in TS 36.321 [6]. Value in subframes. Value sf8 corresponds to 8 subframes, sf16 corresponds to 16 subframes and so on. maxHARQ-Msg3Tx +Maximum number of Msg3 HARQ transmissions in TS 36.321 [6], used for contention based random access. Value is an integer. messagePowerOffsetGroupB +Threshold for preamble selection in TS 36.321 [6]. Value in dB. Value minusinfinity corresponds to –infinity. Value dB0 corresponds to 0 dB, dB5 corresponds to 5 dB and so on. messageSizeGroupA +Threshold for preamble selection in TS 36.321 [6]. Value in bits. Value b56 corresponds to 56 bits, b144 corresponds to 144 bits and so on. numberOfRA-Preambles +Number of non-dedicated random access preambles in TS 36.321 [6]. Value is an integer. Value n4 corresponds to 4, n8 corresponds to 8 and so on. powerRampingStep +Power ramping factor in TS 36.321 [6]. Value in dB. Value dB0 corresponds to 0 dB, dB2 corresponds to 2 dB and so on. preambleInitialReceivedTargetPower +Initial preamble power in TS 36.321 [6]. Value in dBm. Value dBm-120 corresponds to -120 dBm, dBm-118 corresponds to -118 dBm and so on. preamblesGroupAConfig +Provides the configuration for preamble grouping in TS 36.321 [6]. If the field is not signalled, the size of the random access preambles group A [6] is equal to numberOfRA-Preambles. preambleTransMax +Maximum number of preamble transmission in TS 36.321 [6]. Value is an integer. Value n3 corresponds to 3, n4 corresponds to 4 and so on. ra-ResponseWindowSize +Duration of the RA response window in TS 36.321 [6]. Value in subframes. Value sf2 corresponds to 2 subframes, sf3 corresponds to 3 subframes and so on. The same value applies for each serving cell (although the associated functionality is performed independently for each cell). sizeOfRA-PreamblesGroupA +Size of the random access preambles group A in TS 36.321 [6]. Value is an integer. Value n4 corresponds to 4, n8 corresponds to 8 and so on. +– RACH-ConfigDedicated +The IE RACH-ConfigDedicated is used to specify the dedicated random access parameters. +RACH-ConfigDedicated information element +-- ASN1START + +RACH-ConfigDedicated ::= SEQUENCE { + ra-PreambleIndex INTEGER (0..63), + ra-PRACH-MaskIndex INTEGER (0..15) +} + +-- ASN1STOP + +RACH-ConfigDedicated field descriptions ra-PRACH-MaskIndex +Explicitly signalled PRACH Mask Index for RA Resource selection in TS 36.321 [6]. ra-PreambleIndex +Explicitly signalled Random Access Preamble for RA Resource selection in TS 36.321 [6]. +– RadioResourceConfigCommon +The IE RadioResourceConfigCommonSIB and IE RadioResourceConfigCommon are used to specify common radio resource configurations in the system information and in the mobility control information, respectively, e.g., the random access parameters and the static physical layer parameters. +RadioResourceConfigCommon information element +-- ASN1START + +RadioResourceConfigCommonSIB ::= SEQUENCE { + rach-ConfigCommon RACH-ConfigCommon, + bcch-Config BCCH-Config, + pcch-Config PCCH-Config, + prach-Config PRACH-ConfigSIB, + pdsch-ConfigCommon PDSCH-ConfigCommon, + pusch-ConfigCommon PUSCH-ConfigCommon, + pucch-ConfigCommon PUCCH-ConfigCommon, + soundingRS-UL-ConfigCommon SoundingRS-UL-ConfigCommon, + uplinkPowerControlCommon UplinkPowerControlCommon, + ul-CyclicPrefixLength UL-CyclicPrefixLength, + ..., + [[ uplinkPowerControlCommon-v1020 UplinkPowerControlCommon-v1020 OPTIONAL -- Need OR + ]], + [[ rach-ConfigCommon-v1250 RACH-ConfigCommon-v1250 OPTIONAL -- Need OR + ]] +} + +RadioResourceConfigCommon ::= SEQUENCE { + rach-ConfigCommon RACH-ConfigCommon OPTIONAL, -- Need ON + prach-Config PRACH-Config, + pdsch-ConfigCommon PDSCH-ConfigCommon OPTIONAL, -- Need ON + pusch-ConfigCommon PUSCH-ConfigCommon, + phich-Config PHICH-Config OPTIONAL, -- Need ON + pucch-ConfigCommon PUCCH-ConfigCommon OPTIONAL, -- Need ON + soundingRS-UL-ConfigCommon SoundingRS-UL-ConfigCommon OPTIONAL, -- Need ON + uplinkPowerControlCommon UplinkPowerControlCommon OPTIONAL, -- Need ON + antennaInfoCommon AntennaInfoCommon OPTIONAL, -- Need ON + p-Max P-Max OPTIONAL, -- Need OP + tdd-Config TDD-Config OPTIONAL, -- Cond TDD + ul-CyclicPrefixLength UL-CyclicPrefixLength, + ..., + [[ uplinkPowerControlCommon-v1020 UplinkPowerControlCommon-v1020 OPTIONAL -- Need ON + ]], + [[ tdd-Config-v1130 TDD-Config-v1130 OPTIONAL -- Cond TDD3 + ]] +} + +RadioResourceConfigCommonPSCell-r12 ::= SEQUENCE { + basicFields-r12 RadioResourceConfigCommonSCell-r10, + pucch-ConfigCommon-r12 PUCCH-ConfigCommon, + rach-ConfigCommon-r12 RACH-ConfigCommon, + uplinkPowerControlCommonPSCell-r12 UplinkPowerControlCommonPSCell-r12, + ... +} + +RadioResourceConfigCommonSCell-r10 ::= SEQUENCE { + -- DL configuration as well as configuration applicable for DL and UL + nonUL-Configuration-r10 SEQUENCE { + -- 1: Cell characteristics + dl-Bandwidth-r10 ENUMERATED {n6, n15, n25, n50, n75, n100}, + -- 2: Physical configuration, general + antennaInfoCommon-r10 AntennaInfoCommon, + mbsfn-SubframeConfigList-r10 MBSFN-SubframeConfigList OPTIONAL, -- Need OR + -- 3: Physical configuration, control + phich-Config-r10 PHICH-Config, + -- 4: Physical configuration, physical channels + pdsch-ConfigCommon-r10 PDSCH-ConfigCommon, + tdd-Config-r10 TDD-Config OPTIONAL -- Cond TDDSCell + }, + -- UL configuration + ul-Configuration-r10 SEQUENCE { + ul-FreqInfo-r10 SEQUENCE { + ul-CarrierFreq-r10 ARFCN-ValueEUTRA OPTIONAL, -- Need OP + ul-Bandwidth-r10 ENUMERATED {n6, n15, + n25, n50, n75, n100} OPTIONAL, -- Need OP + additionalSpectrumEmissionSCell-r10 AdditionalSpectrumEmission + }, + p-Max-r10 P-Max OPTIONAL, -- Need OP + uplinkPowerControlCommonSCell-r10 UplinkPowerControlCommonSCell-r10, + -- A special version of IE UplinkPowerControlCommon may be introduced + -- 3: Physical configuration, control + soundingRS-UL-ConfigCommon-r10 SoundingRS-UL-ConfigCommon, + ul-CyclicPrefixLength-r10 UL-CyclicPrefixLength, + -- 4: Physical configuration, physical channels + prach-ConfigSCell-r10 PRACH-ConfigSCell-r10 OPTIONAL, -- Cond TDD-OR-NoR11 + pusch-ConfigCommon-r10 PUSCH-ConfigCommon + } OPTIONAL, -- Need OR + ..., + [[ ul-CarrierFreq-v1090 ARFCN-ValueEUTRA-v9e0 OPTIONAL -- Need OP + ]], + [[ rach-ConfigCommonSCell-r11 RACH-ConfigCommonSCell-r11 OPTIONAL, -- Cond ULSCell + prach-ConfigSCell-r11 PRACH-Config OPTIONAL, -- Cond UL + tdd-Config-v1130 TDD-Config-v1130 OPTIONAL, -- Cond TDD2 + uplinkPowerControlCommonSCell-v1130 + UplinkPowerControlCommonSCell-v1130 OPTIONAL -- Cond UL + ]] +} + +BCCH-Config ::= SEQUENCE { + modificationPeriodCoeff ENUMERATED {n2, n4, n8, n16} +} + +PCCH-Config ::= SEQUENCE { + defaultPagingCycle ENUMERATED { + rf32, rf64, rf128, rf256}, + nB ENUMERATED { + fourT, twoT, oneT, halfT, quarterT, oneEighthT, + oneSixteenthT, oneThirtySecondT} +} + +UL-CyclicPrefixLength ::= ENUMERATED {len1, len2} + +-- ASN1STOP + +RadioResourceConfigCommon field descriptions additionalSpectrumEmissionSCell +The UE requirements related to IE AdditionalSpectrumEmissionSCell are defined in TS 36.101 [42]. E-UTRAN configures the same value in additionalSpectrumEmissionScell for all SCell(s) of the same band with UL configured. The additionalSpectrumEmissionScell is applicable for all serving cells (including PCell) of the same band with UL configured. defaultPagingCycle +Default paging cycle, used to derive ‘T’ in TS 36.304 [4]. Value rf32 corresponds to 32 radio frames, rf64 corresponds to 64 radio frames and so on. modificationPeriodCoeff +Actual modification period, expressed in number of radio frames= modificationPeriodCoeff * defaultPagingCycle. n2 corresponds to value 2, n4 corresponds to value 4, n8 corresponds to value 8 and n16 corresponds to value 16. nB +Parameter: nB is used as one of parameters to derive the Paging Frame and Paging Occasion according to TS 36.304 [4]. Value in multiples of 'T' as defined in TS 36.304 [4]. A value of fourT corresponds to 4 * T, a value of twoT corresponds to 2 * T and so on. p-Max +Pmax to be used in the target cell. If absent the UE applies the maximum power according to the UE capability. ul-Bandwidth +Parameter: transmission bandwidth configuration, NRB, in uplink, see TS 36.101 [42, table 5.6-1]. Value n6 corresponds to 6 resource blocks, n15 to 15 resource blocks and so on. If for FDD this parameter is absent, the uplink bandwidth is equal to the downlink bandwidth. For TDD this parameter is absent and it is equal to the downlink bandwidth. ul-CarrierFreq +For FDD: If absent, the (default) value determined from the default TX-RX frequency separation defined in TS 36.101 [42, table 5.7.3-1] applies. +For TDD: This parameter is absent and it is equal to the downlink frequency. UL-CyclicPrefixLength +Parameter: Uplink cyclic prefix length see 36.211 [21, 5.2.1] where len1 corresponds to normal cyclic prefix and len2 corresponds to extended cyclic prefix. +Conditional presence Explanation TDD The field is optional for TDD, Need ON; it is not present for FDD and the UE shall delete any existing value for this field. TDD2 If tdd-Config-r10 is present, the field is optional, Need OR. Otherwise the field is not present and the UE shall delete any existing value for this field. TDD3 If tdd-Config is present, the field is optional, Need OR. Otherwise the field is not present and the UE shall delete any existing value for this field. TDD-OR-NoR11 If prach-ConfigSCell-r11 is absent, the field is optional for TDD, Need OR. Otherwise the field is not present and the UE shall delete any existing value for this field. TDDSCell This field is mandatory present for TDD; it is not present for FDD and the UE shall delete any existing value for this field. UL If the SCell is part of the STAG and if ul-Configuration is included, the field is optional, Need OR. Otherwise the field is not present and the UE shall delete any existing value for this field. ULSCell For the PSCell (IE is included in RadioResourceConfigCommonPSCell) the field is absent. Otherwise, if the SCell is part of the STAG and if ul-Configuration is included, the field is optional, Need OR. Otherwise the field is not present and the UE shall delete any existing value for this field. +– RadioResourceConfigDedicated +The IE RadioResourceConfigDedicated is used to setup/modify/release RBs, to modify the MAC main configuration, to modify the SPS configuration and to modify dedicated physical configuration. +RadioResourceConfigDedicated information element +-- ASN1START + +RadioResourceConfigDedicated ::= SEQUENCE { + srb-ToAddModList SRB-ToAddModList OPTIONAL, -- Cond HO-Conn + drb-ToAddModList DRB-ToAddModList OPTIONAL, -- Cond HO-toEUTRA + drb-ToReleaseList DRB-ToReleaseList OPTIONAL, -- Need ON + mac-MainConfig CHOICE { + explicitValue MAC-MainConfig, + defaultValue NULL + } OPTIONAL, -- Cond HO-toEUTRA2 + sps-Config SPS-Config OPTIONAL, -- Need ON + physicalConfigDedicated PhysicalConfigDedicated OPTIONAL, -- Need ON + ..., + [[ rlf-TimersAndConstants-r9 RLF-TimersAndConstants-r9 OPTIONAL -- Need ON + ]], + [[ measSubframePatternPCell-r10 MeasSubframePatternPCell-r10 OPTIONAL -- Need ON + ]], + [[ neighCellsCRS-Info-r11 NeighCellsCRS-Info-r11 OPTIONAL -- Need ON + ]], + [[ naics-Info-r12 NAICS-AssistanceInfo-r12 OPTIONAL -- Need ON + ]]} + +RadioResourceConfigDedicatedPSCell-r12 ::= SEQUENCE { + -- UE specific configuration extensions applicable for an PSCell + physicalConfigDedicatedPSCell-r12 PhysicalConfigDedicated OPTIONAL, -- Need ON + sps-Config-r12 SPS-Config OPTIONAL, -- Need ON + naics-Info-r12 NAICS-AssistanceInfo-r12 OPTIONAL, -- Need ON + ... +} + +RadioResourceConfigDedicatedSCG-r12 ::= SEQUENCE { + drb-ToAddModListSCG-r12 DRB-ToAddModListSCG-r12 OPTIONAL, -- Need ON + mac-MainConfigSCG-r12 MAC-MainConfig OPTIONAL, -- Need ON + rlf-TimersAndConstantsSCG-r12 RLF-TimersAndConstantsSCG-r12 OPTIONAL, -- Need ON + ... +} + +RadioResourceConfigDedicatedSCell-r10 ::= SEQUENCE { + -- UE specific configuration extensions applicable for an SCell + physicalConfigDedicatedSCell-r10 PhysicalConfigDedicatedSCell-r10 OPTIONAL, -- Need ON + ..., + [[ mac-MainConfigSCell-r11 MAC-MainConfigSCell-r11 OPTIONAL -- Cond SCellAdd + ]], + [[ naics-Info-r12 NAICS-AssistanceInfo-r12 OPTIONAL -- Need ON + ]] +} + +SRB-ToAddModList ::= SEQUENCE (SIZE (1..2)) OF SRB-ToAddMod + +SRB-ToAddMod ::= SEQUENCE { + srb-Identity INTEGER (1..2), + rlc-Config CHOICE { + explicitValue RLC-Config, + defaultValue NULL + } OPTIONAL, -- Cond Setup + logicalChannelConfig CHOICE { + explicitValue LogicalChannelConfig, + defaultValue NULL + } OPTIONAL, -- Cond Setup + ... +} + +DRB-ToAddModList ::= SEQUENCE (SIZE (1..maxDRB)) OF DRB-ToAddMod + +DRB-ToAddModListSCG-r12 ::= SEQUENCE (SIZE (1..maxDRB)) OF DRB-ToAddModSCG-r12 + +DRB-ToAddMod ::= SEQUENCE { + eps-BearerIdentity INTEGER (0..15) OPTIONAL, -- Cond DRB-Setup + drb-Identity DRB-Identity, + pdcp-Config PDCP-Config OPTIONAL, -- Cond PDCP + rlc-Config RLC-Config OPTIONAL, -- Cond SetupM + logicalChannelIdentity INTEGER (3..10) OPTIONAL, -- Cond DRB-SetupM + logicalChannelConfig LogicalChannelConfig OPTIONAL, -- Cond SetupM + ..., + [[ drb-TypeChange-r12 ENUMERATED {toMCG} OPTIONAL, -- Need OP + rlc-Config-v1250 RLC-Config-v1250 OPTIONAL -- Need ON + ]] +} + +DRB-ToAddModSCG-r12 ::= SEQUENCE { + drb-Identity-r12 DRB-Identity, + drb-Type-r12 CHOICE { + split-r12 NULL, + scg-r12 SEQUENCE { + eps-BearerIdentity-r12 INTEGER (0..15) OPTIONAL, -- Cond DRB-Setup + pdcp-Config-r12 PDCP-Config OPTIONAL -- Cond PDCP-S + } + } OPTIONAL, -- Cond SetupS2 + rlc-ConfigSCG-r12 RLC-Config OPTIONAL, -- Cond SetupS + rlc-Config-v1250 RLC-Config-v1250 OPTIONAL, -- Need ON + logicalChannelIdentitySCG-r12 INTEGER (3..10) OPTIONAL, -- Cond DRB-SetupS + logicalChannelConfigSCG-r12 LogicalChannelConfig OPTIONAL, -- Cond SetupS + ... +} + +DRB-ToReleaseList ::= SEQUENCE (SIZE (1..maxDRB)) OF DRB-Identity + +MeasSubframePatternPCell-r10 ::= CHOICE { + release NULL, + setup MeasSubframePattern-r10 +} + +NeighCellsCRS-Info-r11 ::= CHOICE { + release NULL, + setup CRS-AssistanceInfoList-r11 +} + +CRS-AssistanceInfoList-r11 ::= SEQUENCE (SIZE (1..maxCellReport)) OF CRS-AssistanceInfo-r11 + +CRS-AssistanceInfo-r11 ::= SEQUENCE { + physCellId-r11 PhysCellId, + antennaPortsCount-r11 ENUMERATED {an1, an2, an4, spare1}, + mbsfn-SubframeConfigList-r11 MBSFN-SubframeConfigList, + ... +} + +NAICS-AssistanceInfo-r12 ::= CHOICE { + release NULL, + setup SEQUENCE { + neighCellsToReleaseList-r12 NeighCellsToReleaseList-r12 OPTIONAL , -- Need ON + neighCellsToAddModList-r12 NeighCellsToAddModList-r12 OPTIONAL, -- Need ON + servCellp-a-r12 P-a OPTIONAL -- Need ON + } +} + +NeighCellsToReleaseList-r12 ::= SEQUENCE (SIZE (1..maxNeighCell-r12)) OF PhysCellId + +NeighCellsToAddModList-r12 ::= SEQUENCE (SIZE (1..maxNeighCell-r12)) OF NeighCellsInfo-r12 + +NeighCellsInfo-r12 ::= SEQUENCE { + physCellId-r12 PhysCellId, + p-b-r12 INTEGER (0..3), + crs-PortsCount-r12 ENUMERATED {n1, n2, n4, spare}, + mbsfn-SubframeConfig-r12 MBSFN-SubframeConfigList OPTIONAL, -- Need ON + p-aList-r12 SEQUENCE (SIZE (1..maxP-a-PerNeighCell-r12)) OF P-a, + transmissionModeList-r12 BIT STRING (SIZE(8)), + resAllocGranularity-r12 INTEGER (1..4), + ... +} +P-a ::= ENUMERATED { dB-6, dB-4dot77, dB-3, dB-1dot77, + dB0, dB1, dB2, dB3} + +-- ASN1STOP + +RadioResourceConfigDedicated field descriptions crs-PortsCount +Parameter represents the number of antenna ports for cell-specific reference signal used by the signaled neighboring cell where n1 corresponds to 1 antenna port, n2 to 2 antenna ports etc. see TS 36.211 [21, 6.10.1]. drb-Identity +In case of DC, the DRB identity is unique within the scope of the UE i.e. an SCG DRB can not use the same value as used for an MCG or split DRB. For a split DRB the same identity is used for the MCG- and SCG parts of the configuration. drb-ToAddModListSCG +When an SCG is configured, E-UTRAN configures at least one SCG or split DRB. drb-Type +This field indicates whether the DRB is split or SCG DRB. E-UTRAN does not configure split and SCG DRBs simultaneously for the UE. drb-TypeChange +Indicates that a split/SCG DRB is reconfigured to an MCG DRB (i.e. E-UTRAN only signals the field in case the DRB type changes). logicalChannelConfig +For SRBs a choice is used to indicate whether the logical channel configuration is signalled explicitly or set to the default logical channel configuration for SRB1 as specified in 9.2.1.1 or for SRB2 as specified in 9.2.1.2. logicalChannelIdentity +The logical channel identity for both UL and DL. mac-MainConfig +Although the ASN.1 includes a choice that is used to indicate whether the mac-MainConfig is signalled explicitly or set to the default MAC main configuration as specified in 9.2.2, EUTRAN does not apply "defaultValue". mbsfn-SubframeConfig +Defines the MBSFN subframe configuration used by the signaled neighboring cell. If absent, UE assumes no MBSFN configuration for the neighboring cell. measSubframePatternPCell +Time domain measurement resource restriction pattern for the PCell measurements (RSRP, RSRQ and the radio link monitoring). neighCellsCRS-Info +This field contains assistance information, concerning the primary frequency, used by the UE to mitigate interference from CRS while performing RRM/RLM/CSI measurement or data demodulation. When the received CRS assistance information is for a cell with CRS colliding with that of the CRS of the cell to measure, the UE may use the CRS assistance information to mitigate CRS interference (as specified in TS 36.101 [42]) on the subframes indicated by measSubframePatternPCell, measSubframePatternConfigNeigh, csi-MeasSubframeSet1 if configured, and the CSI subframe set 1 if csi-MeasSubframeSets-r12 is configured. Furthermore, the UE may use CRS assistance information to mitigate CRS interference from the cells in the IE for the demodulation purpose as specified in TS 36.101 [42]. EUTRAN does not configure neighCellsCRS-Info-r11 if eimta-MainConfigPCell-r12 is configured. NeighCellsInfo +This field contains assistance information used by the UE to cancel and suppress interference of a neighbouring cell. If this field is present for a neighbouring cell, the UE assumes that the transmission parameters listed in the sub-fields are used by the neighbouring cell. If this field is present for a neighbouring cell, the UE assumes the neighbour cell is subframe and SFN synchronized to the serving cell, has the same system bandwidth, UL/DL and special subframe configuration, and cyclic prefix length as the serving cell. P-a +Parameter: , see TS 36.213 [23, 5.2]. Value dB-6 corresponds to -6 dB, dB-4dot77 corresponds to -4.77 dB etc. P-aList +Indicates the restricted subset of power offset for QPSK, 16QAM, and 64QAM PDSCH transmissions for the neighbouring cell. p-b +Parameter: , indicates the cell-specific ratio used by the signaled neighboring cell, see TS 36.213 [23, Table 5.2-1]. physicalConfigDedicated +The default dedicated physical configuration is specified in 9.2.4. resAllocGranularity +Indicates the resource allocation and precoding granularity in PRB pair level of the signaled neighboring cell, see TS 36.213 [23, 7.1.6]. rlc-Config +For SRBs a choice is used to indicate whether the RLC configuration is signalled explicitly or set to the values defined in the default RLC configuration for SRB1 in 9.2.1.1 or for SRB2 in 9.2.1.2. RLC AM is the only applicable RLC mode for SRB1 and SRB2. E-UTRAN does not reconfigure the RLC mode of DRBs except when a full configuration option is used, and may reconfigure the UM RLC SN field size and the AM RLC LI field size only upon handover within E-UTRA or upon the first reconfiguration after RRC connection re-establishment or upon SCG Change for SCG and split DRBs. servCellp-a +Indicates the power offset for QPSK C-RNTI based PDSCH transmissions used by the serving cell, see 36.213 [23, 5.2]. Value dB-6 corresponds to -6 dB, dB-4dot77 corresponds to -4.77 dB etc. sps-Config +The default SPS configuration is specified in 9.2.3. Except for handover or releasing SPS for MCG, E-UTRAN does not reconfigure sps-Config for MCG when there is a configured downlink assignment or a configured uplink grant for MCG (see TS 36.321 [6]). Except for SCG change or releasing SPS for SCG, E-UTRAN does not reconfigure sps-Config for SCG when there is a configured downlink assignment or a configured uplink grant for SCG (see TS 36.321 [6]). srb-Identity +Value 1 is applicable for SRB1 only. +Value 2 is applicable for SRB2 only. transmissionModeList +Indicates a subset of transmission mode 1, 2, 3, 4, 6, 8, 9, 10, for the signaled neighboring cell for which NeighCellsInfo applies. When TM10 is signaled, other signaled transmission parameters in NeighCellsInfo are not applicable to up to 8 layer transmission scheme of TM10. The first/ leftmost bit is for transmission mode 1, the second bit is for transmission mode 2, and so on. +Conditional presence Explanation DRB-Setup The field is mandatory present if the corresponding DRB is being set up; otherwise it is not present. DRB-SetupM The field is mandatory present upon setup of MCG or split DRB; The field is optionally present, Need ON, upon change from SCG to MCG DRB; otherwise it is not present. DRB-SetupS The field is mandatory present upon setup of SCG or split DRB, or upon change from MCG to split DRB; The field is optionally present, Need ON, upon change from MCG to SCG DRB; otherwise it is not present. HO-Conn The field is mandatory present in case of handover to E-UTRA or when the fullConfig is included in the RRCConnectionReconfiguration message or in case of RRC connection establishment; otherwise the field is optionally present, need ON. Upon connection establishment/ re-establishment only SRB1 is applicable. HO-toEUTRA The field is mandatory present in case of handover to E-UTRA or when the fullConfig is included in the RRCConnectionReconfiguration message; In case of RRC connection establishment and RRC connection re-establishment the field is not present; otherwise the field is optionally present, need ON. HO-toEUTRA2 The field is mandatory present in case of handover to E-UTRA or when the fullConfig is included in the RRCConnectionReconfiguration message; otherwise the field is optionally present, need ON. PDCP The field is mandatory present if the corresponding DRB is being setup; the field is optionally present, need ON, upon reconfiguration of the corresponding split DRB, upon the corresponding DRB type change from split to MCG bearer, upon the corresponding DRB type change from MCG to split bearer, upon handover within E-UTRA and upon the first reconfiguration after re-establishment but in all these cases only when fullConfig is not included in the RRCConnectionReconfiguration message; otherwise it is not present. PDCP-S The field is mandatory present if the corresponding DRB is being setup; the field is optionally present, need ON, upon SCG change; otherwise it is not present. RLC-Setup This field is optionally present if the corresponding DRB is being setup, need ON; otherwise it is not present. SCellAdd The field is optionally present, need ON, upon SCell addition; otherwise it is not present. Setup The field is mandatory present if the corresponding SRB/DRB is being setup; otherwise the field is optionally present, need ON. SetupM The field is mandatory present upon setup of an MCG or split DRB; otherwise the field is optionally present, need ON. SetupS The field is mandatory present upon setup of an SCG or split DRB, as well as upon change from MCG to split DRB; otherwise the field is optionally present, need ON. SetupS2 The field is mandatory present upon setup of an SCG or split DRB, as well as upon change from MCG to split or SCG DRB. For an SCG DRB the field is optionally present, need ON. Otherwise the field is not present. +– RLC-Config +The IE RLC-Config is used to specify the RLC configuration of SRBs and DRBs. +RLC-Config information element +-- ASN1START + +RLC-Config ::= CHOICE { + am SEQUENCE { + ul-AM-RLC UL-AM-RLC, + dl-AM-RLC DL-AM-RLC + }, + um-Bi-Directional SEQUENCE { + ul-UM-RLC UL-UM-RLC, + dl-UM-RLC DL-UM-RLC + }, + um-Uni-Directional-UL SEQUENCE { + ul-UM-RLC UL-UM-RLC + }, + um-Uni-Directional-DL SEQUENCE { + dl-UM-RLC DL-UM-RLC + }, + ... +} + +RLC-Config-v1250 ::= SEQUENCE { + ul-extended-RLC-LI-Field-r12 BOOLEAN, + dl-extended-RLC-LI-Field-r12 BOOLEAN +} + +UL-AM-RLC ::= SEQUENCE { + t-PollRetransmit T-PollRetransmit, + pollPDU PollPDU, + pollByte PollByte, + maxRetxThreshold ENUMERATED { + t1, t2, t3, t4, t6, t8, t16, t32} +} + +DL-AM-RLC ::= SEQUENCE { + t-Reordering T-Reordering, + t-StatusProhibit T-StatusProhibit +} + +UL-UM-RLC ::= SEQUENCE { + sn-FieldLength SN-FieldLength +} + +DL-UM-RLC ::= SEQUENCE { + sn-FieldLength SN-FieldLength, + t-Reordering T-Reordering +} + +SN-FieldLength ::= ENUMERATED {size5, size10} + +T-PollRetransmit ::= ENUMERATED { + ms5, ms10, ms15, ms20, ms25, ms30, ms35, + ms40, ms45, ms50, ms55, ms60, ms65, ms70, + ms75, ms80, ms85, ms90, ms95, ms100, ms105, + ms110, ms115, ms120, ms125, ms130, ms135, + ms140, ms145, ms150, ms155, ms160, ms165, + ms170, ms175, ms180, ms185, ms190, ms195, + ms200, ms205, ms210, ms215, ms220, ms225, + ms230, ms235, ms240, ms245, ms250, ms300, + ms350, ms400, ms450, ms500, spare9, spare8, + spare7, spare6, spare5, spare4, spare3, + spare2, spare1} + +PollPDU ::= ENUMERATED { + p4, p8, p16, p32, p64, p128, p256, pInfinity} + +PollByte ::= ENUMERATED { + kB25, kB50, kB75, kB100, kB125, kB250, kB375, + kB500, kB750, kB1000, kB1250, kB1500, kB2000, + kB3000, kBinfinity, spare1} + +T-Reordering ::= ENUMERATED { + ms0, ms5, ms10, ms15, ms20, ms25, ms30, ms35, + ms40, ms45, ms50, ms55, ms60, ms65, ms70, + ms75, ms80, ms85, ms90, ms95, ms100, ms110, + ms120, ms130, ms140, ms150, ms160, ms170, + ms180, ms190, ms200, spare1} + +T-StatusProhibit ::= ENUMERATED { + ms0, ms5, ms10, ms15, ms20, ms25, ms30, ms35, + ms40, ms45, ms50, ms55, ms60, ms65, ms70, + ms75, ms80, ms85, ms90, ms95, ms100, ms105, + ms110, ms115, ms120, ms125, ms130, ms135, + ms140, ms145, ms150, ms155, ms160, ms165, + ms170, ms175, ms180, ms185, ms190, ms195, + ms200, ms205, ms210, ms215, ms220, ms225, + ms230, ms235, ms240, ms245, ms250, ms300, + ms350, ms400, ms450, ms500, spare8, spare7, + spare6, spare5, spare4, spare3, spare2, + spare1} + +-- ASN1STOP + +RLC-Config field descriptions dl-extended-RLC-LI-Field, ul-extended-RLC-LI-Field +Indicates the RLC LI field size. Value TRUE means that 15 bit LI length shall be used, otherwise 11 bit LI length shall be used; see TS 36.322 [7]. E-UTRAN enables this field only when RLC-Config (without suffix) is set to am. maxRetxThreshold +Parameter for RLC AM in TS 36.322 [7]. Value t1 corresponds to 1 retransmission, t2 to 2 retransmissions and so on. pollByte +Parameter for RLC AM in TS 36.322 [7]. Value kB25 corresponds to 25 kBytes, kB50 to 50 kBytes and so on. kBInfinity corresponds to an infinite amount of kBytes. pollPDU +Parameter for RLC AM in TS 36.322 [7]. Value p4 corresponds to 4 PDUs, p8 to 8 PDUs and so on. pInfinity corresponds to an infinite number of PDUs. sn-FieldLength +Indicates the UM RLC SN field size, see TS 36.322 [7], in bits. Value size5 means 5 bits, size10 means 10 bits. t-PollRetransmit +Timer for RLC AM in TS 36.322 [7], in milliseconds. Value ms5 means 5ms, ms10 means 10ms and so on. t-Reordering +Timer for reordering in TS 36.322 [7], in milliseconds. Value ms0 means 0ms, ms5 means 5ms and so on. t-StatusProhibit +Timer for status reporting in TS 36.322 [7], in milliseconds. Value ms0 means 0ms, ms5 means 5ms and so on. +– RLF-TimersAndConstants +The IE RLF-TimersAndConstants contains UE specific timers and constants applicable for UEs in RRC_CONNECTED. +RLF-TimersAndConstants information element +-- ASN1START + +RLF-TimersAndConstants-r9 ::= CHOICE { + release NULL, + setup SEQUENCE { + t301-r9 ENUMERATED { + ms100, ms200, ms300, ms400, ms600, ms1000, ms1500, + ms2000}, + t310-r9 ENUMERATED { + ms0, ms50, ms100, ms200, ms500, ms1000, ms2000}, + n310-r9 ENUMERATED { + n1, n2, n3, n4, n6, n8, n10, n20}, + t311-r9 ENUMERATED { + ms1000, ms3000, ms5000, ms10000, ms15000, + ms20000, ms30000}, + n311-r9 ENUMERATED { + n1, n2, n3, n4, n5, n6, n8, n10}, + ... + } +} + +RLF-TimersAndConstantsSCG-r12 ::= CHOICE { + release NULL, + setup SEQUENCE { + t313-r12 ENUMERATED { + ms0, ms50, ms100, ms200, ms500, ms1000, ms2000}, + n313-r12 ENUMERATED { + n1, n2, n3, n4, n6, n8, n10, n20}, + n314-r12 ENUMERATED { + n1, n2, n3, n4, n5, n6, n8, n10}, + ... + } +} + +-- ASN1STOP + +RLF-TimersAndConstants field descriptions n3xy +Constants are described in section 7.4. n1 corresponds with 1, n2 corresponds with 2 and so on. t3xy +Timers are described in section 7.3. Value ms0 corresponds with 0 ms, ms50 corresponds with 50 ms and so on. +– RN-SubframeConfig +The IE RN-SubframeConfig is used to specify the subframe configuration for an RN. +RN-SubframeConfig information element +-- ASN1START + +RN-SubframeConfig-r10 ::= SEQUENCE { + subframeConfigPattern-r10 CHOICE { + subframeConfigPatternFDD-r10 BIT STRING (SIZE(8)), + subframeConfigPatternTDD-r10 INTEGER (0..31) + } OPTIONAL, -- Need ON + rpdcch-Config-r10 SEQUENCE { + resourceAllocationType-r10 ENUMERATED {type0, type1, type2Localized, type2Distributed, + spare4, spare3, spare2, spare1}, + resourceBlockAssignment-r10 CHOICE { + type01-r10 CHOICE { + nrb6-r10 BIT STRING (SIZE(6)), + nrb15-r10 BIT STRING (SIZE(8)), + nrb25-r10 BIT STRING (SIZE(13)), + nrb50-r10 BIT STRING (SIZE(17)), + nrb75-r10 BIT STRING (SIZE(19)), + nrb100-r10 BIT STRING (SIZE(25)) + }, + type2-r10 CHOICE { + nrb6-r10 BIT STRING (SIZE(5)), + nrb15-r10 BIT STRING (SIZE(7)), + nrb25-r10 BIT STRING (SIZE(9)), + nrb50-r10 BIT STRING (SIZE(11)), + nrb75-r10 BIT STRING (SIZE(12)), + nrb100-r10 BIT STRING (SIZE(13)) + }, + ... + }, + demodulationRS-r10 CHOICE { + interleaving-r10 ENUMERATED {crs}, + noInterleaving-r10 ENUMERATED {crs, dmrs} + }, + pdsch-Start-r10 INTEGER (1..3), + pucch-Config-r10 CHOICE { + tdd CHOICE { + channelSelectionMultiplexingBundling SEQUENCE { + n1PUCCH-AN-List-r10 SEQUENCE (SIZE (1..4)) OF INTEGER (0..2047) + }, + fallbackForFormat3 SEQUENCE { + n1PUCCH-AN-P0-r10 INTEGER (0..2047), + n1PUCCH-AN-P1-r10 INTEGER (0..2047) OPTIONAL -- Need OR + } + }, + fdd SEQUENCE { + n1PUCCH-AN-P0-r10 INTEGER (0..2047), + n1PUCCH-AN-P1-r10 INTEGER (0..2047) OPTIONAL -- Need OR + } + }, + ... + } OPTIONAL, -- Need ON + ... +} + +-- ASN1STOP + +RN-SubframeConfig field descriptions demodulationRS +Indicates which reference signals are used for R-PDCCH demodulation according to TS 36.216 [55, 7.4.1]. Value interleaving corresponds to cross-interleaving and value noInterleaving corresponds to no cross-interleaving according to TS 36.216 [55, 7.4.2 and 7.4.3]. n1PUCCH-AN-List +Parameter: , see TS 36.216, [55, 7.5.1]. This parameter is only applicable for TDD. Configures PUCCH HARQ-ACK resources if the RN is configured to use HARQ-ACK channel selection, HARQ-ACK multiplexing or HARQ-ACK bundling. n1PUCCH-AN-P0, n1PUCCH-AN-P1 +Parameter: , for antenna port P0 and for antenna port P1 respectively, see TS 36.216, [55, 7.5.1] for FDD and [55, 7.5.2] for TDD. pdsch-Start +Parameter: DL-StartSymbol, see TS 36.216 [55, Table 5.4-1]. resourceAllocationType +Represents the resource allocation used: type 0, type 1 or type 2 according to TS 36.213 [23, 7.1.6]. Value type0 corresponds to type 0, value type1 corresponds to type 1, value type2Localized corresponds to type 2 with localized virtual resource blocks and type2Distributed corresponds to type 2 with distributed virtual resource blocks. resourceBlockAssignment +Indicates the resource block assignment bits according to TS 36.213 [23, 7.1.6]. Value type01 corresponds to type 0 and type 1, and the value type2 corresponds to type 2. Value nrb6 corresponds to a downlink system bandwidth of 6 resource blocks, value nrb15 corresponds to a downlink system bandwidth of 15 resource blocks, and so on. subframeConfigPatternFDD +Parameter: SubframeConfigurationFDD, see TS 36.216 [55, Table 5.2-1]. Defines the DL subframe configuration for eNB-to-RN transmission, i.e. those subframes in which the eNB may indicate downlink assignments for the RN. The radio frame in which the pattern starts (i.e. the radio frame in which the first bit of the subframeConfigPatternFDD corresponds to subframe #0) occurs when SFN mod 4 = 0. subframeConfigPatternTDD +Parameter: SubframeConfigurationTDD, see TS 36.216 [55, Table 5.2-2]. Defines the DL and UL subframe configuration for eNB-RN transmission. +– SchedulingRequestConfig +The IE SchedulingRequestConfig is used to specify the Scheduling Request related parameters +SchedulingRequestConfig information element +-- ASN1START + +SchedulingRequestConfig ::= CHOICE { + release NULL, + setup SEQUENCE { + sr-PUCCH-ResourceIndex INTEGER (0..2047), + sr-ConfigIndex INTEGER (0..157), + dsr-TransMax ENUMERATED { + n4, n8, n16, n32, n64, spare3, spare2, spare1} + } +} + +SchedulingRequestConfig-v1020 ::= SEQUENCE { + sr-PUCCH-ResourceIndexP1-r10 INTEGER (0..2047) OPTIONAL -- Need OR +} + +-- ASN1STOP + +SchedulingRequestConfig field descriptions dsr-TransMax +Parameter for SR transmission in TS 36.321 [6, 5.4.4]. The value n4 corresponds to 4 transmissions, n8 corresponds to 8 transmissions and so on. sr-ConfigIndex +Parameter. See TS 36.213 [23,10.1]. The values 156 and 157 are not applicable for Release 8. sr-PUCCH-ResourceIndex, sr-PUCCH-ResourceIndexP1 +Parameter: for antenna port P0 and for antenna port P1 respectively, see TS 36.213 [23, 10.1]. E-UTRAN configures sr-PUCCH-ResourceIndexP1 only if sr-PUCCHResourceIndex is configured. +– SoundingRS-UL-Config +The IE SoundingRS-UL-Config is used to specify the uplink Sounding RS configuration for periodic and aperiodic sounding. +SoundingRS-UL-Config information element +-- ASN1START + +SoundingRS-UL-ConfigCommon ::= CHOICE { + release NULL, + setup SEQUENCE { + srs-BandwidthConfig ENUMERATED {bw0, bw1, bw2, bw3, bw4, bw5, bw6, bw7}, + srs-SubframeConfig ENUMERATED { + sc0, sc1, sc2, sc3, sc4, sc5, sc6, sc7, + sc8, sc9, sc10, sc11, sc12, sc13, sc14, sc15}, + ackNackSRS-SimultaneousTransmission BOOLEAN, + srs-MaxUpPts ENUMERATED {true} OPTIONAL -- Cond TDD + } +} + +SoundingRS-UL-ConfigDedicated ::= CHOICE{ + release NULL, + setup SEQUENCE { + srs-Bandwidth ENUMERATED {bw0, bw1, bw2, bw3}, + srs-HoppingBandwidth ENUMERATED {hbw0, hbw1, hbw2, hbw3}, + freqDomainPosition INTEGER (0..23), + duration BOOLEAN, + srs-ConfigIndex INTEGER (0..1023), + transmissionComb INTEGER (0..1), + cyclicShift ENUMERATED {cs0, cs1, cs2, cs3, cs4, cs5, cs6, cs7} + } +} + +SoundingRS-UL-ConfigDedicated-v1020 ::= SEQUENCE { + srs-AntennaPort-r10 SRS-AntennaPort +} + +SoundingRS-UL-ConfigDedicatedAperiodic-r10 ::= CHOICE{ + release NULL, + setup SEQUENCE { + srs-ConfigIndexAp-r10 INTEGER (0..31), + srs-ConfigApDCI-Format4-r10 SEQUENCE (SIZE (1..3)) OF SRS-ConfigAp-r10 OPTIONAL,--Need ON + srs-ActivateAp-r10 CHOICE { + release NULL, + setup SEQUENCE { + srs-ConfigApDCI-Format0-r10 SRS-ConfigAp-r10, + srs-ConfigApDCI-Format1a2b2c-r10 SRS-ConfigAp-r10, + ... + } + } OPTIONAL -- Need ON + } +} + +SRS-ConfigAp-r10 ::= SEQUENCE { + srs-AntennaPortAp-r10 SRS-AntennaPort, + srs-BandwidthAp-r10 ENUMERATED {bw0, bw1, bw2, bw3}, + freqDomainPositionAp-r10 INTEGER (0..23), + transmissionCombAp-r10 INTEGER (0..1), + cyclicShiftAp-r10 ENUMERATED {cs0, cs1, cs2, cs3, cs4, cs5, cs6, cs7} +} + +SRS-AntennaPort ::= ENUMERATED {an1, an2, an4, spare1} + +-- ASN1STOP + +SoundingRS-UL-Config field descriptions ackNackSRS-SimultaneousTransmission +Parameter: Simultaneous-AN-and-SRS, see TS 36.213 [23, 8.2]. For SCells this field is not applicable and the UE shall ignore the value. cyclicShift, cyclicShiftAp +Parameter: n_SRS for periodic and aperiodic sounding reference signal transmission respectively. See TS 36.211 [21, 5.5.3.1], where cs0 corresponds to 0 etc. duration +Parameter: Duration for periodic sounding reference signal transmission. See TS 36.213 [21, 8.2]. FALSE corresponds to “single” and value TRUE to “indefinite”. freqDomainPosition, freqDomainPositionAp +Parameter: for periodic and aperiodic sounding reference signal transmission respectively, see TS 36.211 [21, 5.5.3.2]. srs-AntennaPort, srs-AntennaPortAp +Indicates the number of antenna ports used for periodic and aperiodic sounding reference signal transmission respectively, see TS 36.211 [21, 5.5.3]. UE shall release srs-AntennaPort if SoundingRS-UL-ConfigDedicated is released. srs-Bandwidth, srs-BandwidthAp +Parameter: for periodic and aperiodic sounding reference signal transmission respectively, see TS 36.211 [21, tables 5.5.3.2-1, 5.5.3.2-2, 5.5.3.2-3 and 5.5.3.2-4]. srs-BandwidthConfig +Parameter: SRS Bandwidth Configuration. See TS 36.211, [21, table 5.5.3.2-1, 5.5.3.2-2, 5.5.3.2-3 and 5.5.3.2-4]. Actual configuration depends on UL bandwidth. bw0 corresponds to value 0, bw1 to value 1 and so on. srs-ConfigApDCI-Format0 / srs-ConfigApDCI-Format1a2b2c / srs-ConfigApDCI-Format4 +Parameters indicate the resource configurations for aperiodic sounding reference signal transmissions triggered by DCI formats 0, 1A, 2B, 2C, 4. See TS 36.213 [23, 8.2]. srs-ConfigIndex, srs-ConfigIndexAp +Parameter: ISRS for periodic and aperiodic sounding reference signal transmission respectively. See TS 36.213 [23, table 8.2-1 and table 8.2-2] for periodic and TS 36.213 [23, table 8.2-4 and table 8.2-5] for aperiodic SRS transmission. srs-HoppingBandwidth +Parameter: SRS hopping bandwidth for periodic sounding reference signal transmission, see TS 36.211 [21, 5.5.3.2] where hbw0 corresponds to value 0, hbw1 to value 1 and so on. srs-MaxUpPts +Parameter: srsMaxUpPts, see TS 36.211 [21, 5.5.3.2]. If this field is present, reconfiguration of applies for UpPts, otherwise reconfiguration does not apply. srs-SubframeConfig +Parameter: SRS SubframeConfiguration. See TS 36.211, [21, table 5.5.3.3-1] applies for FDD whereas TS 36.211, [21, table 5.5.3.3-2] applies for TDD. sc0 corresponds to value 0, sc1 to value 1 and so on. transmissionComb, transmissionCombAp +Parameter: for periodic and aperiodic sounding reference signal transmission respectively, see TS 36.211 [21, 5.5.3.2]. +Conditional presence Explanation TDD This field is optional present for TDD, need OR; it is not present for FDD and the UE shall delete any existing value for this field. +– SPS-Config +The IE SPS-Config is used to specify the semi-persistent scheduling configuration. +SPS-Config information element +-- ASN1START + +SPS-Config ::= SEQUENCE { + semiPersistSchedC-RNTI C-RNTI OPTIONAL, -- Need OR + sps-ConfigDL SPS-ConfigDL OPTIONAL, -- Need ON + sps-ConfigUL SPS-ConfigUL OPTIONAL -- Need ON +} + +SPS-ConfigDL ::= CHOICE{ + release NULL, + setup SEQUENCE { + semiPersistSchedIntervalDL ENUMERATED { + sf10, sf20, sf32, sf40, sf64, sf80, + sf128, sf160, sf320, sf640, spare6, + spare5, spare4, spare3, spare2, + spare1}, + numberOfConfSPS-Processes INTEGER (1..8), + n1PUCCH-AN-PersistentList N1PUCCH-AN-PersistentList, + ..., + [[ twoAntennaPortActivated-r10 CHOICE { + release NULL, + setup SEQUENCE { + n1PUCCH-AN-PersistentListP1-r10 N1PUCCH-AN-PersistentList + } + } OPTIONAL -- Need ON + ]] + } +} + +SPS-ConfigUL ::= CHOICE { + release NULL, + setup SEQUENCE { + semiPersistSchedIntervalUL ENUMERATED { + sf10, sf20, sf32, sf40, sf64, sf80, + sf128, sf160, sf320, sf640, spare6, + spare5, spare4, spare3, spare2, + spare1}, + implicitReleaseAfter ENUMERATED {e2, e3, e4, e8}, + p0-Persistent SEQUENCE { + p0-NominalPUSCH-Persistent INTEGER (-126..24), + p0-UE-PUSCH-Persistent INTEGER (-8..7) + } OPTIONAL, -- Need OP + twoIntervalsConfig ENUMERATED {true} OPTIONAL, -- Cond TDD + ..., + [[ p0-PersistentSubframeSet2-r12 CHOICE { + release NULL, + setup SEQUENCE { + p0-NominalPUSCH-PersistentSubframeSet2-r12 INTEGER (-126..24), + p0-UE-PUSCH-PersistentSubframeSet2-r12 INTEGER (-8..7) + } + } OPTIONAL -- Need ON + ]] + } +} + +N1PUCCH-AN-PersistentList ::= SEQUENCE (SIZE (1..4)) OF INTEGER (0..2047) + +-- ASN1STOP + +SPS-Config field descriptions implicitReleaseAfter +Number of empty transmissions before implicit release, see TS 36.321 [6, 5.10.2]. Value e2 corresponds to 2 transmissions, e3 corresponds to 3 transmissions and so on. n1PUCCH-AN-PersistentList , n1PUCCH-AN-PersistentListP1 +List of parameter: for antenna port P0 and for antenna port P1 respectively, see TS 36.213 [23, 10.1]. Field n1-PUCCH-AN-PersistentListP1 is applicable only if the twoAntennaPortActivatedPUCCH-Format1a1b in PUCCH-ConfigDedicated-v1020 is set to true. Otherwise the field is not configured. numberOfConfSPS-Processes +The number of configured HARQ processes for Semi-Persistent Scheduling, see TS 36.321 [6]. p0-NominalPUSCH-Persistent +Parameter: . See TS 36.213 [23, 5.1.1.1], unit dBm step 1. This field is applicable for persistent scheduling, only. If choice setup is used and p0-Persistent is absent, apply the value of p0-NominalPUSCH for p0-NominalPUSCH-Persistent. If uplink power control subframe sets are configured by tpc-SubframeSet, this field applies for uplink power control subframe set 1. p0-NominalPUSCH-PersistentSubframeSet2 +Parameter: . See TS 36.213 [23, 5.1.1.1], unit dBm step 1. This field is applicable for persistent scheduling, only. If p0-PersistentSubframeSet2-r12 is not configured, apply the value of p0-NominalPUSCH-SubframeSet2-r12 for p0-NominalPUSCH-PersistentSubframeSet2. E-UTRAN configures this field only if uplink power control subframe sets are configured by tpc-SubframeSet, in which case this field applies for uplink power control subframe set 2. p0-UE-PUSCH-Persistent +Parameter: . See TS 36.213 [23, 5.1.1.1], unit dB. This field is applicable for persistent scheduling, only. If choice setup is used and p0-Persistent is absent, apply the value of p0-UE-PUSCH for p0-UE-PUSCH-Persistent. If uplink power control subframe sets are configured by tpc-SubframeSet, this field applies for uplink power control subframe set 1. p0-UE-PUSCH-PersistentSubframeSet2 +Parameter: . See TS 36.213 [23, 5.1.1.1], unit dB. This field is applicable for persistent scheduling, only. If p0-PersistentSubframeSet2-r12 is not configured, apply the value of p0-UE-PUSCH-SubframeSet2 for p0-UE-PUSCH-PersistentSubframeSet2. E-UTRAN configures this field only if uplink power control subframe sets are configured by tpc-SubframeSet, in which case this field applies for uplink power control subframe set 2. semiPersistSchedC-RNTI +Semi-persistent Scheduling C-RNTI, see TS 36.321 [6]. semiPersistSchedIntervalDL +Semi-persistent scheduling interval in downlink, see TS 36.321 [6]. Value in number of sub-frames. Value sf10 corresponds to 10 sub-frames, sf20 corresponds to 20 sub-frames and so on. For TDD, the UE shall round this parameter down to the nearest integer (of 10 sub-frames), e.g. sf10 corresponds to 10 sub-frames, sf32 corresponds to 30 sub-frames, sf128 corresponds to 120 sub-frames. semiPersistSchedIntervalUL +Semi-persistent scheduling interval in uplink, see TS 36.321 [6]. Value in number of sub-frames. Value sf10 corresponds to 10 sub-frames, sf20 corresponds to 20 sub-frames and so on. For TDD, the UE shall round this parameter down to the nearest integer (of 10 sub-frames), e.g. sf10 corresponds to 10 sub-frames, sf32 corresponds to 30 sub-frames, sf128 corresponds to 120 sub-frames. twoIntervalsConfig +Trigger of two-intervals-Semi-Persistent Scheduling in uplink. See TS 36.321 [6, 5.10]. If this field is present, two-intervals-SPS is enabled for uplink. Otherwise, two-intervals-SPS is disabled. +Conditional presence Explanation TDD This field is optional present for TDD, need OR; it is not present for FDD and the UE shall delete any existing value for this field. +– TDD-Config +The IE TDD-Config is used to specify the TDD specific physical channel configuration. +TDD-Config information element +-- ASN1START + +TDD-Config ::= SEQUENCE { + subframeAssignment ENUMERATED { + sa0, sa1, sa2, sa3, sa4, sa5, sa6}, + specialSubframePatterns ENUMERATED { + ssp0, ssp1, ssp2, ssp3, ssp4,ssp5, ssp6, ssp7, + ssp8} +} + +TDD-Config-v1130 ::= SEQUENCE { + specialSubframePatterns-v1130 ENUMERATED {ssp7,ssp9} +} + +TDD-ConfigSL-r12 ::= SEQUENCE { + subframeAssignmentSL-r12 ENUMERATED { + none, sa0, sa1, sa2, sa3, sa4, sa5, sa6} +} + +-- ASN1STOP + +TDD-Config field descriptions specialSubframePatterns +Indicates Configuration as in TS 36.211 [21, table 4.2-1] where ssp0 points to Configuration 0, ssp1 to Configuration 1 etc. Value ssp7 points to Configuration 7 for extended cyclic prefix and value ssp9 points to Configuration 9 for normal cyclic prefix. E-UTRAN signals ssp7 only when setting specialSubframePatterns (without suffix i.e. the version defined in REL-8) to ssp4. E-UTRAN signals value ssp9 only when setting specialSubframePatterns (without suffix) to ssp5. If specialSubframePatterns-v1130 is present, the UE shall ignore specialSubframePatterns (without suffix). subframeAssignment +Indicates DL/UL subframe configuration where sa0 points to Configuration 0, sa1 to Configuration 1 etc. as specified in TS 36.211 [21, table 4.2-2]. E-UTRAN configures the same value for serving cells residing on same frequency band. subframeAssignmentSL +Indicates UL/ DL subframe configuration where sa0 points to Configuration 0, sa1 to Configuration 1 etc. as specified in TS 36.211 [21, table 4.2-2]. The value none means that no TDD specific physical channel configuration is applicable (i.e. the carrier on which MasterInformationBlock-SL is transmitted is an FDD UL carrier). +– TimeAlignmentTimer +The IE TimeAlignmentTimer is used to control how long the UE considers the serving cells belonging to the associated TAG to be uplink time aligned. Corresponds to the Timer for time alignment in TS 36.321 [6]. Value in number of sub-frames. Value sf500 corresponds to 500 sub-frames, sf750 corresponds to 750 sub-frames and so on. +TimeAlignmentTimer information element +-- ASN1START + +TimeAlignmentTimer ::= ENUMERATED { + sf500, sf750, sf1280, sf1920, sf2560, sf5120, + sf10240, infinity} +-- ASN1STOP + +– TPC-PDCCH-Config +The IE TPC-PDCCH-Config is used to specify the RNTIs and indexes for PUCCH and PUSCH power control according to TS 36.212 [22]. The power control function can either be setup or released with the IE. +TPC-PDCCH-Config information element +-- ASN1START + +TPC-PDCCH-Config ::= CHOICE { + release NULL, + setup SEQUENCE { + tpc-RNTI BIT STRING (SIZE (16)), + tpc-Index TPC-Index + } +} + +TPC-Index ::= CHOICE { + indexOfFormat3 INTEGER (1..15), + indexOfFormat3A INTEGER (1..31) +} + +-- ASN1STOP + +TPC-PDCCH-Config field descriptions indexOfFormat3 +Index of N when DCI format 3 is used. See TS 36.212 [22, 5.3.3.1.6]. IndexOfFormat3A +Index of M when DCI format 3A is used. See TS 36.212 [22, 5.3.3.1.7]. tpc-Index +Index of N or M, see TS 36.212 [22, 5.3.3.1.6 and 5.3.3.1.7], where N or M is dependent on the used DCI format (i.e. format 3 or 3a). tpc-RNTI +RNTI for power control using DCI format 3/3A, see TS 36.212 [22]. +– UplinkPowerControl +The IE UplinkPowerControlCommon and IE UplinkPowerControlDedicated are used to specify parameters for uplink power control in the system information and in the dedicated signalling, respectively. +UplinkPowerControl information elements +-- ASN1START + +UplinkPowerControlCommon ::= SEQUENCE { + p0-NominalPUSCH INTEGER (-126..24), + alpha Alpha-r12, + p0-NominalPUCCH INTEGER (-127..-96), + deltaFList-PUCCH DeltaFList-PUCCH, + deltaPreambleMsg3 INTEGER (-1..6) +} + +UplinkPowerControlCommon-v1020 ::= SEQUENCE { + deltaF-PUCCH-Format3-r10 ENUMERATED {deltaF-1, deltaF0, deltaF1, deltaF2, + deltaF3, deltaF4, deltaF5, deltaF6}, + deltaF-PUCCH-Format1bCS-r10 ENUMERATED {deltaF1, deltaF2, spare2, spare1} +} + +UplinkPowerControlCommonPSCell-r12 ::= SEQUENCE { +-- For uplink power control the additional/ missing fields are signalled (compared to SCell) + deltaF-PUCCH-Format3-r12 ENUMERATED {deltaF-1, deltaF0, deltaF1, deltaF2, + deltaF3, deltaF4, deltaF5, deltaF6}, + deltaF-PUCCH-Format1bCS-r12 ENUMERATED {deltaF1, deltaF2, spare2, spare1}, + p0-NominalPUCCH-r12 INTEGER (-127..-96), + deltaFList-PUCCH-r12 DeltaFList-PUCCH +} + +UplinkPowerControlCommonSCell-r10 ::= SEQUENCE { + p0-NominalPUSCH-r10 INTEGER (-126..24), + alpha-r10 Alpha-r12 +} + +UplinkPowerControlCommonSCell-v1130 ::= SEQUENCE { + deltaPreambleMsg3-r11 INTEGER (-1..6) +} + +UplinkPowerControlDedicated ::= SEQUENCE { + p0-UE-PUSCH INTEGER (-8..7), + deltaMCS-Enabled ENUMERATED {en0, en1}, + accumulationEnabled BOOLEAN, + p0-UE-PUCCH INTEGER (-8..7), + pSRS-Offset INTEGER (0..15), + filterCoefficient FilterCoefficient DEFAULT fc4 +} + +UplinkPowerControlDedicated-v1020 ::= SEQUENCE { + deltaTxD-OffsetListPUCCH-r10 DeltaTxD-OffsetListPUCCH-r10 OPTIONAL, -- Need OR + pSRS-OffsetAp-r10 INTEGER (0..15) OPTIONAL -- Need OR +} + +UplinkPowerControlDedicated-v1130 ::= SEQUENCE { + pSRS-Offset-v1130 INTEGER (16..31) OPTIONAL, -- Need OR + pSRS-OffsetAp-v1130 INTEGER (16..31) OPTIONAL, -- Need OR + deltaTxD-OffsetListPUCCH-v1130 DeltaTxD-OffsetListPUCCH-v1130 OPTIONAL -- Need OR +} + +UplinkPowerControlDedicated-v1250 ::= SEQUENCE { + set2PowerControlParameter CHOICE { + release NULL, + setup SEQUENCE { + tpc-SubframeSet-r12 BIT STRING (SIZE(10)), + p0-NominalPUSCH-SubframeSet2-r12 INTEGER (-126..24), + alpha-SubframeSet2-r12 Alpha-r12, + p0-UE-PUSCH-SubframeSet2-r12 INTEGER (-8..7) + } + } +} + +UplinkPowerControlDedicatedSCell-r10 ::= SEQUENCE { + p0-UE-PUSCH-r10 INTEGER (-8..7), + deltaMCS-Enabled-r10 ENUMERATED {en0, en1}, + accumulationEnabled-r10 BOOLEAN, + pSRS-Offset-r10 INTEGER (0..15), + pSRS-OffsetAp-r10 INTEGER (0..15) OPTIONAL, -- Need OR + filterCoefficient-r10 FilterCoefficient DEFAULT fc4, + pathlossReferenceLinking-r10 ENUMERATED {pCell, sCell} +} + +Alpha-r12 ::= ENUMERATED {al0, al04, al05, al06, al07, al08, al09, al1} + +DeltaFList-PUCCH ::= SEQUENCE { + deltaF-PUCCH-Format1 ENUMERATED {deltaF-2, deltaF0, deltaF2}, + deltaF-PUCCH-Format1b ENUMERATED {deltaF1, deltaF3, deltaF5}, + deltaF-PUCCH-Format2 ENUMERATED {deltaF-2, deltaF0, deltaF1, deltaF2}, + deltaF-PUCCH-Format2a ENUMERATED {deltaF-2, deltaF0, deltaF2}, + deltaF-PUCCH-Format2b ENUMERATED {deltaF-2, deltaF0, deltaF2} +} + +DeltaTxD-OffsetListPUCCH-r10 ::= SEQUENCE { + deltaTxD-OffsetPUCCH-Format1-r10 ENUMERATED {dB0, dB-2}, + deltaTxD-OffsetPUCCH-Format1a1b-r10 ENUMERATED {dB0, dB-2}, + deltaTxD-OffsetPUCCH-Format22a2b-r10 ENUMERATED {dB0, dB-2}, + deltaTxD-OffsetPUCCH-Format3-r10 ENUMERATED {dB0, dB-2}, + ... + +} + +DeltaTxD-OffsetListPUCCH-v1130 ::= SEQUENCE { + deltaTxD-OffsetPUCCH-Format1bCS-r11 ENUMERATED {dB0, dB-1} +} +-- ASN1STOP + +UplinkPowerControl field descriptions accumulationEnabled +Parameter: Accumulation-enabled, see TS 36.213 [23, 5.1.1.1]. TRUE corresponds to “enabled” whereas FALSE corresponds to “disabled”. alpha +Parameter: ? See TS 36.213 [23, 5.1.1.1] where al0 corresponds to 0, al04 corresponds to value 0.4, al05 to 0.5, al06 to 0.6, al07 to 0.7, al08 to 0.8, al09 to 0.9 and al1 corresponds to 1. This field applies for uplink power control subframe set 1 if uplink power control subframe sets are configured by tpc-SubframeSet. alpha-SubframeSet2 +Parameter: ?. See TS 36.213 [23, 5.1.1.1] where al0 corresponds to 0, al04 corresponds to value 0.4, al05 to 0.5, al06 to 0.6, al07 to 0.7, al08 to 0.8, al09 to 0.9 and al1 corresponds to 1. This field applies for uplink power control subframe set 2 if uplink power control subframe sets are configured by tpc-SubframeSet. deltaF-PUCCH-FormatX +Parameter: for the PUCCH formats 1, 1b, 2, 2a, 2b, 3 and 1b with channel selection. See TS 36.213 [23, 5.1.2] where deltaF-2 corresponds to -2 dB, deltaF0 corresponds to 0 dB and so on. deltaMCS-Enabled +Parameter: Ks See TS 36.213 [23, 5.1.1.1]. en0 corresponds to value 0 corresponding to state “disabled”. en1 corresponds to value 1.25 corresponding to “enabled”. deltaPreambleMsg3 +Parameter: see TS 36.213 [23, 5.1.1.1]. Actual value = IE value * 2 [dB]. deltaTxD-OffsetPUCCH-FormatX +Parameter: for the PUCCH formats 1, 1a/1b, 1b with channel selection, 2/2a/2b and 3 when two antenna ports are configured for PUCCH transmission. See TS 36.213 [23, 5.1.2.1] where dB0 corresponds to 0 dB, dB-1 corresponds to -1 dB, dB-2 corresponds to -2 dB. EUTRAN configures the field deltaTxD-OffsetPUCCH-Format1bCS-r11 for the PCell and/or the PSCell only. filterCoefficient +Specifies the filtering coefficient for RSRP measurements used to calculate path loss, as specified in TS 36.213 [23, 5.1.1.1]. The same filtering mechanism applies as for quantityConfig described in 5.5.3.2. p0-NominalPUCCH +Parameter: See TS 36.213 [23, 5.1.2.1], unit dBm. p0-NominalPUSCH +Parameter: See TS 36.213 [23, 5.1.1.1], unit dBm. This field is applicable for non-persistent scheduling only. This field applies for uplink power control subframe set 1 if uplink power control subframe sets are configured by tpc-SubframeSet. p0-NominalPUSCH-SubframeSet2 +Parameter: . See TS 36.213 [23, 5.1.1.1], unit dBm. This field is applicable for non-persistent scheduling only. This field applies for uplink power control subframe set 2 if uplink power control subframe sets are configured by tpc-SubframeSet. p0-UE-PUCCH +Parameter: See TS 36.213 [23, 5.1.2.1]. Unit dB p0-UE-PUSCH +Parameter: See TS 36.213 [23, 5.1.1.1], unit dB. This field is applicable for non-persistent scheduling, only. This field applies for uplink power control subframe set 1 if uplink power control subframe sets are configured by tpc-SubframeSet. p0-UE-PUSCH-SubframeSet2 +Parameter: See TS 36.213 [23, 5.1.1.1], unit dB. This field is applicable for non-persistent scheduling, only. This field applies for uplink power control subframe set 2 if uplink power control subframe sets are configured by tpc-SubframeSet. pathlossReferenceLinking +Indicates whether the UE shall apply as pathloss reference either the downlink of the PCell or of the SCell that corresponds with this uplink (i.e. according to the cellIdentification within the field sCellToAddMod). For SCells part of an STAG E-UTRAN sets the value to sCell. pSRS-Offset, pSRS-OffsetAp +Parameter: PSRS_OFFSET for periodic and aperiodic sounding reference signal transmission repectively. See TS 36.213 [23, 5.1.3.1]. For Ks=1.25, the actual parameter value is pSRS-Offset value – 3. For Ks=0, the actual parameter value is -10.5 + 1.5*pSRS-Offset value. +If pSRS-Offset-v1130 is included, the UE ignores pSRS-Offset (i.e., without suffix). Likewise, if pSRS-OffsetAp-v1130 is included, the UE ignores pSRS-OffsetAp-r10. For Ks=0, E-UTRAN does not set values larger than 26. tpc-SubframeSet +Indicates the uplink subframes (including UpPTS in special subframes) of the uplink power control subframe sets. Value 0 means the subframe belongs to uplink power control subframe set 1, and value 1 means the subframe belongs to uplink power control subframe set 2. +6.3.3 Security control information elements +– NextHopChainingCount +The IE NextHopChainingCount is used to update the KeNB key and corresponds to parameter NCC: See TS 33.401 [32, 7.2.8.4]. +NextHopChainingCount information element +-- ASN1START + +NextHopChainingCount ::= INTEGER (0..7) + +-- ASN1STOP + +– SecurityAlgorithmConfig +The IE SecurityAlgorithmConfig is used to configure AS integrity protection algorithm (SRBs) and AS ciphering algorithm (SRBs and DRBs). For RNs, the IE SecurityAlgorithmConfig is also used to configure AS integrity protection algorithm for DRBs between the RN and the E-UTRAN. +SecurityAlgorithmConfig information element +-- ASN1START + +SecurityAlgorithmConfig ::= SEQUENCE { + cipheringAlgorithm CipheringAlgorithm-r12, + integrityProtAlgorithm ENUMERATED { + eia0-v920, eia1, eia2, eia3-v1130, spare4, spare3, + spare2, spare1, ...} +} + +CipheringAlgorithm-r12 ::= ENUMERATED { + eea0, eea1, eea2, eea3-v1130, spare4, spare3, + spare2, spare1, ...} + +-- ASN1STOP + +SecurityAlgorithmConfig field descriptions cipheringAlgorithm +Indicates the ciphering algorithm to be used for SRBs and DRBs, as specified in TS 33.401 [32, 5.1.3.2]. integrityProtAlgorithm +Indicates the integrity protection algorithm to be used for SRBs, as specified in TS 33.401 [32, 5.1.4.2]. For RNs, also indicates the integrity protection algorithm to be used for integrity protection-enabled DRB(s). +– ShortMAC-I +The IE ShortMAC-I is used to identify and verify the UE at RRC connection re-establishment. The 16 least significant bits of the MAC-I calculated using the security configuration of the source PCell, as specified in 5.3.7.4. +ShortMAC-I information element +-- ASN1START + +ShortMAC-I ::= BIT STRING (SIZE (16)) + +-- ASN1STOP + +6.3.4 Mobility control information elements +– AdditionalSpectrumEmission +AdditionalSpectrumEmission information element +-- ASN1START + +AdditionalSpectrumEmission ::= INTEGER (1..32) + +-- ASN1STOP + +– ARFCN-ValueCDMA2000 +The IE ARFCN-ValueCDMA2000 used to indicate the CDMA2000 carrier frequency within a CDMA2000 band, see C.S0002 [12]. +ARFCN-ValueCDMA2000 information element +-- ASN1START + +ARFCN-ValueCDMA2000 ::= INTEGER (0..2047) + +-- ASN1STOP + +– ARFCN-ValueEUTRA +The IE ARFCN-ValueEUTRA is used to indicate the ARFCN applicable for a downlink, uplink or bi-directional (TDD) E-UTRA carrier frequency, as defined in TS 36.101 [42]. If an extension is signalled using the extended value range (as defined by IE ARFCN-ValueEUTRA-v9e0), the UE shall only consider this extension (and hence ignore the corresponding original field, using the value range as defined by IE ARFCN-ValueEUTRA i.e. without suffix, if signalled). In dedicated signalling, E-UTRAN only provides an EARFCN corresponding to an E-UTRA band supported by the UE. +ARFCN-ValueEUTRA information element +-- ASN1START + +ARFCN-ValueEUTRA ::= INTEGER (0..maxEARFCN) + +ARFCN-ValueEUTRA-v9e0 ::= INTEGER (maxEARFCN-Plus1..maxEARFCN2) + +ARFCN-ValueEUTRA-r9 ::= INTEGER (0..maxEARFCN2) + +-- ASN1STOP + +NOTE: For fields using the original value range, as defined by IE ARFCN-ValueEUTRA i.e. without suffix, value maxEARFCN indicates that the E-UTRA carrier frequency is indicated by means of an extension. In such a case, UEs not supporting the extension consider the field to be set to a not supported value. + +– ARFCN-ValueGERAN +The IE ARFCN-ValueGERAN is used to specify the ARFCN value applicable for a GERAN BCCH carrier frequency, see TS 45.005 [20]. +ARFCN-ValueGERAN information element +-- ASN1START + +ARFCN-ValueGERAN ::= INTEGER (0..1023) + +-- ASN1STOP + +– ARFCN-ValueUTRA +The IE ARFCN-ValueUTRA is used to indicate the ARFCN applicable for a downlink (Nd, FDD) or bi-directional (Nt, TDD) UTRA carrier frequency, as defined in TS 25.331 [19]. +ARFCN-ValueUTRA information element +-- ASN1START + +ARFCN-ValueUTRA ::= INTEGER (0..16383) + +-- ASN1STOP + +– BandclassCDMA2000 +The IE BandclassCDMA2000 is used to define the CDMA2000 band in which the CDMA2000 carrier frequency can be found, as defined in C.S0057 [24, table 1.5-1]. +BandclassCDMA2000 information element +-- ASN1START + +BandclassCDMA2000 ::= ENUMERATED { + bc0, bc1, bc2, bc3, bc4, bc5, bc6, bc7, bc8, + bc9, bc10, bc11, bc12, bc13, bc14, bc15, bc16, + bc17, bc18-v9a0, bc19-v9a0, bc20-v9a0, bc21-v9a0, + spare10, spare9, spare8, spare7, spare6, spare5, spare4, + spare3, spare2, spare1, ...} + +-- ASN1STOP + +– BandIndicatorGERAN +The IE BandIndicatorGERAN indicates how to interpret an associated GERAN carrier ARFCN, see TS 45.005 [20]. More specifically, the IE indicates the GERAN frequency band in case the ARFCN value can concern either a DCS 1800 or a PCS 1900 carrier frequency. For ARFCN values not associated with one of these bands, the indicator has no meaning. +BandIndicatorGERAN information element +-- ASN1START + +BandIndicatorGERAN ::= ENUMERATED {dcs1800, pcs1900} + +-- ASN1STOP + +– CarrierFreqCDMA2000 +The IE CarrierFreqCDMA2000 used to provide the CDMA2000 carrier information. +CarrierFreqCDMA2000 information element +-- ASN1START + +CarrierFreqCDMA2000 ::= SEQUENCE { + bandClass BandclassCDMA2000, + arfcn ARFCN-ValueCDMA2000 +} + +-- ASN1STOP + +– CarrierFreqGERAN +The IE CarrierFreqGERAN is used to provide an unambiguous carrier frequency description of a GERAN cell. +CarrierFreqGERAN information element +-- ASN1START + +CarrierFreqGERAN ::= SEQUENCE { + arfcn ARFCN-ValueGERAN, + bandIndicator BandIndicatorGERAN +} + +-- ASN1STOP + +CarrierFreqGERAN field descriptions arfcn +GERAN ARFCN of BCCH carrier. bandIndicator +Indicates how to interpret the ARFCN of the BCCH carrier. +– CarrierFreqsGERAN +The IE CarrierFreqListGERAN is used to provide one or more GERAN ARFCN values, as defined in TS 44.005 [43], which represents a list of GERAN BCCH carrier frequencies. +CarrierFreqsGERAN information element +-- ASN1START + +CarrierFreqsGERAN ::= SEQUENCE { + startingARFCN ARFCN-ValueGERAN, + bandIndicator BandIndicatorGERAN, + followingARFCNs CHOICE { + explicitListOfARFCNs ExplicitListOfARFCNs, + equallySpacedARFCNs SEQUENCE { + arfcn-Spacing INTEGER (1..8), + numberOfFollowingARFCNs INTEGER (0..31) + }, + variableBitMapOfARFCNs OCTET STRING (SIZE (1..16)) + } +} + +ExplicitListOfARFCNs ::= SEQUENCE (SIZE (0..31)) OF ARFCN-ValueGERAN + +-- ASN1STOP + +CarrierFreqsGERAN field descriptions arfcn-Spacing +Space, d, between a set of equally spaced ARFCN values. bandIndicator +Indicates how to interpret the ARFCN of the BCCH carrier. explicitListOfARFCNs +The remaining ARFCN values in the set are explicitly listed one by one. followingARFCNs +Field containing a representation of the remaining ARFCN values in the set. numberOfFollowingARFCNs +The number, n, of the remaining equally spaced ARFCN values in the set. The complete set of (n+1) ARFCN values is defined as: {s, ((s + d) mod 1024), ((s + 2*d) mod 1024) ... ((s + n*d) mod 1024)}. startingARFCN +The first ARFCN value, s, in the set. variableBitMapOfARFCNs +Bitmap field representing the remaining ARFCN values in the set. The leading bit of the first octet in the bitmap corresponds to the ARFCN = ((s + 1) mod 1024), the next bit to the ARFCN = ((s + 2) mod 1024), and so on. If the bitmap consist of N octets, the trailing bit of octet N corresponds to ARFCN = ((s + 8*N) mod 1024). The complete set of ARFCN values consists of ARFCN = s and the ARFCN values, where the corresponding bit in the bitmap is set to "1". +– CarrierFreqListMBMS +The IE CarrierFreqListMBMS is used to indicate the E-UTRA ARFCN values of the one or more MBMS frequencies the UE is interested to receive. +CarrierFreqListMBMS information element +-- ASN1START + +CarrierFreqListMBMS-r11 ::= SEQUENCE (SIZE (1..maxFreqMBMS-r11)) OF ARFCN-ValueEUTRA-r9 + +-- ASN1STOP + +– CDMA2000-Type +The IE CDMA2000-Type is used to describe the type of CDMA2000 network. +CDMA2000-Type information element +-- ASN1START + +CDMA2000-Type ::= ENUMERATED {type1XRTT, typeHRPD} + +-- ASN1STOP + +– CellIdentity +The IE CellIdentity is used to unambiguously identify a cell within a PLMN. +CellIdentity information element +-- ASN1START + +CellIdentity ::= BIT STRING (SIZE (28)) + +-- ASN1STOP + +– CellIndexList +The IE CellIndexList concerns a list of cell indices, which may be used for different purposes. +CellIndexList information element +-- ASN1START + +CellIndexList ::= SEQUENCE (SIZE (1..maxCellMeas)) OF CellIndex + +CellIndex ::= INTEGER (1..maxCellMeas) + +-- ASN1STOP + +– CellReselectionPriority +The IE CellReselectionPriority concerns the absolute priority of the concerned carrier frequency/ set of frequencies (GERAN)/ bandclass (CDMA2000), as used by the cell reselection procedure. Corresponds with parameter "priority" in TS 36.304 [4]. Value 0 means: lowest priority. The UE behaviour for the case the field is absent, if applicable, is specified in TS 36.304 [4]. +CellReselectionPriority information element +-- ASN1START + +CellReselectionPriority ::= INTEGER (0..7) + +-- ASN1STOP + +– CSFB-RegistrationParam1XRTT +The IE CSFB-RegistrationParam1XRTT is used to indicate whether or not the UE shall perform a CDMA2000 1xRTT pre-registration if the UE does not have a valid / current pre-registration. +-- ASN1START + +CSFB-RegistrationParam1XRTT ::= SEQUENCE { + sid BIT STRING (SIZE (15)), + nid BIT STRING (SIZE (16)), + multipleSID BOOLEAN, + multipleNID BOOLEAN, + homeReg BOOLEAN, + foreignSIDReg BOOLEAN, + foreignNIDReg BOOLEAN, + parameterReg BOOLEAN, + powerUpReg BOOLEAN, + registrationPeriod BIT STRING (SIZE (7)), + registrationZone BIT STRING (SIZE (12)), + totalZone BIT STRING (SIZE (3)), + zoneTimer BIT STRING (SIZE (3)) +} + +CSFB-RegistrationParam1XRTT-v920 ::= SEQUENCE { + powerDownReg-r9 ENUMERATED {true} +} + +-- ASN1STOP + + +CSFB-RegistrationParam1XRTT field descriptions foreignNIDReg +The CDMA2000 1xRTT NID roamer registration indicator. foreignSIDReg +The CDMA2000 1xRTT SID roamer registration indicator. homeReg +The CDMA2000 1xRTT Home registration indicator. multipleNID +The CDMA2000 1xRTT Multiple NID storage indicator. multipleSID +The CDMA2000 1xRTT Multiple SID storage indicator. nid +Used along with the sid as a pair to control when the UE should Register or Re-Register with the CDMA2000 1xRTT network. parameterReg +The CDMA2000 1xRTT Parameter-change registration indicator. powerDownReg +The CDMA2000 1xRTT Power-down registration indicator. If set to TRUE, the UE that has a valid / current CDMA2000 1xRTT pre-registration will perform a CDMA2000 1xRTT power down registration when it is switched off. powerUpReg +The CDMA2000 1xRTT Power-up registration indicator. registrationPeriod +The CDMA2000 1xRTT Registration period. registrationZone +The CDMA2000 1xRTT Registration zone. sid +Used along with the nid as a pair to control when the UE should Register or Re-Register with the CDMA2000 1xRTT network. totalZone +The CDMA2000 1xRTT Number of registration zones to be retained. zoneTimer +The CDMA2000 1xRTT Zone timer length. +– CellGlobalIdEUTRA +The IE CellGlobalIdEUTRA specifies the Evolved Cell Global Identifier (ECGI), the globally unique identity of a cell in E-UTRA. +CellGlobalIdEUTRA information element +-- ASN1START + +CellGlobalIdEUTRA ::= SEQUENCE { + plmn-Identity PLMN-Identity, + cellIdentity CellIdentity +} + +-- ASN1STOP + +CellGlobalIdEUTRA field descriptions cellIdentity +Identity of the cell within the context of the PLMN. plmn-Identity +Identifies the PLMN of the cell as given by the first PLMN entry in the plmn-IdentityList in SystemInformationBlockType1. +– CellGlobalIdUTRA +The IE CellGlobalIdUTRA specifies the global UTRAN Cell Identifier, the globally unique identity of a cell in UTRA. +CellGlobalIdUTRA information element +-- ASN1START + +CellGlobalIdUTRA ::= SEQUENCE { + plmn-Identity PLMN-Identity, + cellIdentity BIT STRING (SIZE (28)) +} + +-- ASN1STOP + +CellGlobalIdUTRA field descriptions cellIdentity +UTRA Cell Identifier which is unique within the context of the identified PLMN as defined in TS 25.331 [19]. plmn-Identity +Identifies the PLMN of the cell as given by the common PLMN broadcast in the MIB, as defined in TS 25.331 [19]. +– CellGlobalIdGERAN +The IE CellGlobalIdGERAN specifies the Cell Global Identification (CGI), the globally unique identity of a cell in GERAN. +CellGlobalIdGERAN information element +-- ASN1START + +CellGlobalIdGERAN ::= SEQUENCE { + plmn-Identity PLMN-Identity, + locationAreaCode BIT STRING (SIZE (16)), + cellIdentity BIT STRING (SIZE (16)) +} + +-- ASN1STOP + +CellGlobalIdGERAN field descriptions cellIdentity +Cell Identifier which is unique within the context of the GERAN location area as defined in TS 23.003 [27]. locationAreaCode +A fixed length code identifying the location area within a PLMN as defined in TS 23.003 [27]. plmn-Identity +Identifies the PLMN of the cell, as defined in TS 23.003 [27].. +– CellGlobalIdCDMA2000 +The IE CellGlobalIdCDMA2000 specifies the Cell Global Identification (CGI), the globally unique identity of a cell in CDMA2000. +CellGlobalIdCDMA2000 information element +-- ASN1START + +CellGlobalIdCDMA2000 ::= CHOICE { + cellGlobalId1XRTT BIT STRING (SIZE (47)), + cellGlobalIdHRPD BIT STRING (SIZE (128)) +} + +-- ASN1STOP + +CellGlobalIdCDMA2000 field descriptions cellGlobalId1XRTT +Unique identifier for a CDMA2000 1xRTT cell, corresponds to BASEID, SID and NID parameters (in that order) defined in C.S0005 [25]. cellGlobalIdHRPD +Unique identifier for a CDMA2000 HRPD cell, corresponds to SECTOR ID parameter defined in C.S0024 [26, 14.9]. +– CSG-Identity +The IE CSG-Identity is used to identify a Closed Subscriber Group. +CSG-Identity information element +-- ASN1START + +CSG-Identity ::= BIT STRING (SIZE (27)) + +-- ASN1STOP + +– FreqBandIndicator +The IE FreqBandIndicator indicates the E-UTRA operating band as defined in TS 36.101 [42, table 5.5-1]. If an extension is signalled using the extended value range (as defined by IE FreqBandIndicator-v9e0), the UE shall only consider this extension (and hence ignore the corresponding original field, using the value range as defined by IE FreqBandIndicator i.e. without suffix, if signalled). +FreqBandIndicator information element +-- ASN1START + +FreqBandIndicator ::= INTEGER (1..maxFBI) + +FreqBandIndicator-v9e0 ::= INTEGER (maxFBI-Plus1..maxFBI2) + +FreqBandIndicator-r11 ::= INTEGER (1..maxFBI2) + +-- ASN1STOP + +NOTE: For fields using the original value range, as defined by IE FreqBandIndicator i.e. without suffix, value maxFBI indicates that the frequency band is indicated by means of an extension. In such a case, UEs not supporting the extension consider the field to be set to a not supported value. + +– MobilityControlInfo +The IE MobilityControlInfo includes parameters relevant for network controlled mobility to/within EUTRA. +MobilityControlInfo information element +-- ASN1START + +MobilityControlInfo ::= SEQUENCE { + targetPhysCellId PhysCellId, + carrierFreq CarrierFreqEUTRA OPTIONAL, -- Cond HO-toEUTRA2 + carrierBandwidth CarrierBandwidthEUTRA OPTIONAL, -- Cond HO-toEUTRA + additionalSpectrumEmission AdditionalSpectrumEmission OPTIONAL, -- Cond HO-toEUTRA + t304 ENUMERATED { + ms50, ms100, ms150, ms200, ms500, ms1000, + ms2000, spare1}, + newUE-Identity C-RNTI, + radioResourceConfigCommon RadioResourceConfigCommon, + rach-ConfigDedicated RACH-ConfigDedicated OPTIONAL, -- Need OP + ..., + [[ carrierFreq-v9e0 CarrierFreqEUTRA-v9e0 OPTIONAL -- Need ON + ]], + [[ drb-ContinueROHC-r11 ENUMERATED {true} OPTIONAL -- Cond HO + ]] +} + +MobilityControlInfoSCG-r12 ::= SEQUENCE { + t307-r12 ENUMERATED { + ms50, ms100, ms150, ms200, ms500, ms1000, + ms2000, spare1}, + ue-IdentitySCG-r12 C-RNTI OPTIONAL, -- Cond SCGEst, + rach-ConfigDedicated-r12 RACH-ConfigDedicated OPTIONAL, -- Need OP + cipheringAlgorithmSCG-r12 CipheringAlgorithm-r12 OPTIONAL, -- Need ON + ... +} + +CarrierBandwidthEUTRA ::= SEQUENCE { + dl-Bandwidth ENUMERATED { + n6, n15, n25, n50, n75, n100, spare10, + spare9, spare8, spare7, spare6, spare5, + spare4, spare3, spare2, spare1}, + ul-Bandwidth ENUMERATED { + n6, n15, n25, n50, n75, n100, spare10, + spare9, spare8, spare7, spare6, spare5, + spare4, spare3, spare2, spare1} OPTIONAL -- Need OP +} + +CarrierFreqEUTRA ::= SEQUENCE { + dl-CarrierFreq ARFCN-ValueEUTRA, + ul-CarrierFreq ARFCN-ValueEUTRA OPTIONAL -- Cond FDD +} + +CarrierFreqEUTRA-v9e0 ::= SEQUENCE { + dl-CarrierFreq-v9e0 ARFCN-ValueEUTRA-r9, + ul-CarrierFreq-v9e0 ARFCN-ValueEUTRA-r9 OPTIONAL -- Cond FDD +} + +-- ASN1STOP + +MobilityControlInfo field descriptions additionalSpectrumEmission +For a UE with no SCells configured for UL in the same band as the PCell, the UE shall apply the value for the PCell until UE has acquired the corresponding value from SystemInformationBlockType2. For a UE with SCell(s) configured for UL in the same band as the PCell, the UE shall, in case all SCells configured for UL in that band are released after handover completion, apply the value for the PCell until UE has acquired the corresponding value from SystemInformationBlockType2. The UE requirements related to IE AdditionalSpectrumEmission are defined in TS 36.101 [42, table 6.2.4.1]. carrierBandwidth +Provides the parameters Downlink bandwidth, and Uplink bandwidth, see TS 36.101 [42]. carrierFreq +Provides the EARFCN to be used by the UE in the target cell. cipheringAlgorithmSCG +Indicates the ciphering algorithm to be used for SCG DRBs. E-UTRAN includes the field upon SCG change when one or more SCG DRBs are configured. Otherwise E-UTRAN does not include the field. dl-Bandwidth +Parameter: Downlink bandwidth, see TS 36.101 [42]. drb-ContinueROHC +This field indicates whether to continue or reset, for this handover, the header compression protocol context for the RLC UM bearers configured with the header compression protocol. Presence of the field indicates that the header compression protocol context continues while absence indicates that the header compression protocol context is reset. E-UTRAN includes the field only in case of a handover within the same eNB. rach-ConfigDedicated +The dedicated random access parameters. If absent the UE applies contention based random access as specified in TS 36.321 [6]. t304 +Timer T304 as described in section 7.3. ms50 corresponds with 50 ms, ms100 corresponds with 100 ms and so on. t307 +Timer T307 as described in section 7.3. ms50 corresponds with 50 ms, ms100 corresponds with 100 ms and so on. ul-Bandwidth +Parameter: Uplink bandwidth, see TS 36.101 [42, table 5.6-1]. For TDD, the parameter is absent and it is equal to downlink bandwidth. If absent for FDD, apply the same value as applies for the downlink bandwidth. +Conditional presence Explanation FDD The field is mandatory with default value (the default duplex distance defined for the concerned band, as specified in TS 36.101 [42]) in case of “FDD”; otherwise the field is not present. HO This field is optionally present, need OP, in case of handover within E-UTRA when the fullConfig is not included; otherwise the field is not present. HO-toEUTRA The field is mandatory present in case of inter-RAT handover to E-UTRA; otherwise the field is optionally present, need ON. HO-toEUTRA2 The field is absent if carrierFreq-v9e0 is present. Otherwise it is mandatory present in case of inter-RAT handover to E-UTRA and optionally present, need ON, in all other cases. SCGEst This field is mandatory present in case of SCG establishment; otherwise the field is optionally present, need ON. +– MobilityParametersCDMA2000 (1xRTT) +The MobilityParametersCDMA2000 contains the parameters provided to the UE for handover and (enhanced) CSFB to 1xRTT support, as defined in C.S0097 [53]. +MobilityParametersCDMA2000 information element +-- ASN1START + +MobilityParametersCDMA2000 ::= OCTET STRING + +-- ASN1STOP + +– MobilityStateParameters +The IE MobilityStateParameters contains parameters to determine UE mobility state. +MobilityStateParameters information element +-- ASN1START + +MobilityStateParameters ::= SEQUENCE { + t-Evaluation ENUMERATED { + s30, s60, s120, s180, s240, spare3, spare2, spare1}, + t-HystNormal ENUMERATED { + s30, s60, s120, s180, s240, spare3, spare2, spare1}, + n-CellChangeMedium INTEGER (1..16), + n-CellChangeHigh INTEGER (1..16) +} + +-- ASN1STOP + +MobilityStateParameters field descriptions n-CellChangeHigh +The number of cell changes to enter high mobility state. Corresponds to NCR_H in TS 36.304 [4]. n-CellChangeMedium +The number of cell changes to enter medium mobility state. Corresponds to NCR_M in TS 36.304 [4]. t-Evaluation +The duration for evaluating criteria to enter mobility states. Corresponds to TCRmax in TS 36.304 [4]. Value in seconds, s30 corresponds to 30 s and so on. t-HystNormal +The additional duration for evaluating criteria to enter normal mobility state. Corresponds to TCRmaxHyst in TS 36.304 [4]. Value in seconds, s30 corresponds to 30 s and so on. +– MultiBandInfoList +MultiBandInfoList information element +-- ASN1START + +MultiBandInfoList ::= SEQUENCE (SIZE (1..maxMultiBands)) OF FreqBandIndicator + +MultiBandInfoList-v9e0 ::= SEQUENCE (SIZE (1..maxMultiBands)) OF MultiBandInfo-v9e0 + +MultiBandInfoList-r11 ::= SEQUENCE (SIZE (1..maxMultiBands)) OF FreqBandIndicator-r11 + +MultiBandInfo-v9e0 ::= SEQUENCE { + freqBandIndicator-v9e0 FreqBandIndicator-v9e0 OPTIONAL -- Need OP +} + +-- ASN1STOP + +– PhysCellId +The IE PhysCellId is used to indicate the physical layer identity of the cell, as defined in TS 36.211 [21]. +PhysCellId information element +-- ASN1START + +PhysCellId ::= INTEGER (0..503) + +-- ASN1STOP + +– PhysCellIdRange +The IE PhysCellIdRange is used to encode either a single or a range of physical cell identities. The range is encoded by using a start value and by indicating the number of consecutive physical cell identities (including start) in the range. For fields comprising multiple occurrences of PhysCellIdRange, E-UTRAN may configure overlapping ranges of physical cell identities. +PhysCellIdRange information element +-- ASN1START + +PhysCellIdRange ::= SEQUENCE { + start PhysCellId, + range ENUMERATED { + n4, n8, n12, n16, n24, n32, n48, n64, n84, + n96, n128, n168, n252, n504, spare2, + spare1} OPTIONAL -- Need OP +} + +-- ASN1STOP + +PhysCellIdRange field descriptions range +Indicates the number of physical cell identities in the range (including start). Value n4 corresponds with 4, n8 corresponds with 8 and so on. The UE shall apply value 1 in case the field is absent, in which case only the physical cell identity value indicated by start applies. start +Indicates the lowest physical cell identity in the range. +– PhysCellIdRangeUTRA-FDDList +The IE PhysCellIdRangeUTRA-FDDList is used to encode one or more of PhysCellIdRangeUTRA-FDD. While the IE PhysCellIdRangeUTRA-FDD is used to encode either a single physical layer identity or a range of physical layer identities, i.e. primary scrambling codes. Each range is encoded by using a start value and by indicating the number of consecutive physical cell identities (including start) in the range. +PhysCellIdRangeUTRA-FDDList information element +-- ASN1START + +PhysCellIdRangeUTRA-FDDList-r9::= SEQUENCE (SIZE (1..maxPhysCellIdRange-r9)) OF PhysCellIdRangeUTRA-FDD-r9 + +PhysCellIdRangeUTRA-FDD-r9 ::= SEQUENCE { + start-r9 PhysCellIdUTRA-FDD, + range-r9 INTEGER (2..512) OPTIONAL -- Need OP +} + +-- ASN1STOP + +PhysCellIdRangeUTRA-FDDList field descriptions range +Indicates the number of primary scrambling codes in the range (including start). The UE shall apply value 1 in case the field is absent, in which case only the primary scrambling code value indicated by start applies. start +Indicates the lowest primary scrambling code in the range. +– PhysCellIdCDMA2000 +The IE PhysCellIdCDMA2000 identifies the PNOffset that represents the "Physical cell identity" in CDMA2000. +PhysCellIdCDMA2000 information element +-- ASN1START + +PhysCellIdCDMA2000 ::= INTEGER (0..maxPNOffset) + +-- ASN1STOP + +– PhysCellIdGERAN +The IE PhysCellIdGERAN contains the Base Station Identity Code (BSIC). +PhysCellIdGERAN information element +-- ASN1START + +PhysCellIdGERAN ::= SEQUENCE { + networkColourCode BIT STRING (SIZE (3)), + baseStationColourCode BIT STRING (SIZE (3)) +} + +-- ASN1STOP + +PhysCellIdGERAN field descriptions baseStationColourCode +Base station Colour Code as defined in TS 23.003 [27]. networkColourCode +Network Colour Code as defined in TS 23.003 [27]. +– PhysCellIdUTRA-FDD +The IE PhysCellIdUTRA-FDD is used to indicate the physical layer identity of the cell, i.e. the primary scrambling code, as defined in TS 25.331 [19]. +PhysCellIdUTRA-FDD information element +-- ASN1START + +PhysCellIdUTRA-FDD ::= INTEGER (0..511) + +-- ASN1STOP + +– PhysCellIdUTRA-TDD +The IE PhysCellIdUTRA-TDD is used to indicate the physical layer identity of the cell, i.e. the cell parameters ID (TDD), as specified in TS 25.331 [19]. Also corresponds to the Initial Cell Parameter Assignment in TS 25.223 [46]. +PhysCellIdUTRA-TDD information element +-- ASN1START + +PhysCellIdUTRA-TDD ::= INTEGER (0..127) + +-- ASN1STOP + +– PLMN-Identity +The IE PLMN-Identity identifies a Public Land Mobile Network. Further information regarding how to set the IE are specified in TS 23.003 [27]. +PLMN-Identity information element +-- ASN1START + +PLMN-Identity ::= SEQUENCE { + mcc MCC OPTIONAL, -- Cond MCC + mnc MNC +} + +MCC ::= SEQUENCE (SIZE (3)) OF + MCC-MNC-Digit + +MNC ::= SEQUENCE (SIZE (2..3)) OF + MCC-MNC-Digit + +MCC-MNC-Digit ::= INTEGER (0..9) + + +-- ASN1STOP + +PLMN-Identity field descriptions mcc +The first element contains the first MCC digit, the second element the second MCC digit and so on. If the field is absent, it takes the same value as the mcc of the immediately preceding IE PLMN-Identity. See TS 23.003 [27]. mnc +The first element contains the first MNC digit, the second element the second MNC digit and so on. See TS 23.003 [27]. +Conditional presence Explanation MCC This IE is mandatory when PLMN-Identity is included in CellGlobalIdEUTRA, in CellGlobalIdUTRA, in CellGlobalIdGERAN or in RegisteredMME. This IE is also mandatory in the first occurrence of the IE PLMN-Identity within the IE PLMN-IdentityList. Otherwise it is optional, need OP. +– PLMN-IdentityList3 +Includes a list of PLMN identities. +PLMN-IdentityList3 information element +-- ASN1START + +PLMN-IdentityList3-r11 ::= SEQUENCE (SIZE (1..16)) OF PLMN-Identity + +-- ASN1STOP + +– PreRegistrationInfoHRPD +-- ASN1START + +PreRegistrationInfoHRPD ::= SEQUENCE { + preRegistrationAllowed BOOLEAN, + preRegistrationZoneId PreRegistrationZoneIdHRPD OPTIONAL, -- cond PreRegAllowed + secondaryPreRegistrationZoneIdList SecondaryPreRegistrationZoneIdListHRPD OPTIONAL -- Need OR +} + +SecondaryPreRegistrationZoneIdListHRPD ::= SEQUENCE (SIZE (1..2)) OF PreRegistrationZoneIdHRPD + +PreRegistrationZoneIdHRPD ::= INTEGER (0..255) + +-- ASN1STOP + +PreRegistrationInfoHRPD field descriptions preRegistrationAllowed +TRUE indicates that a UE shall perform a CDMA2000 HRPD pre-registration if the UE does not have a valid / current pre-registration. FALSE indicates that the UE is not allowed to perform CDMA2000 HRPD pre-registration in the current cell. preRegistrationZoneID +ColorCode (see C.S0024 [26], C.S0087 [44]) of the CDMA2000 Reference Cell corresponding to the HRPD sector under the HRPD AN that is configured for this LTE cell. It is used to control when the UE should register or re-register. secondaryPreRegistrationZoneIdList +List of SecondaryColorCodes (see C.S0024 [26], C.S0087 [44]) of the CDMA2000 Reference Cell corresponding to the HRPD sector under the HRPD AN that is configured for this LTE cell. They are used to control when the UE should re-register. +Conditional presence Explanation PreRegAllowed The field is mandatory in case the preRegistrationAllowed is set to true. Otherwise the field is not present and the UE shall delete any existing value for this field. +– Q-QualMin +The IE Q-QualMin is used to indicate for cell selection/ re-selection the required minimum received RSRQ level in the (E-UTRA) cell. Corresponds to parameter Qqualmin in 36.304 [4]. Actual value Qqualmin = IE value [dB]. +Q-QualMin information element +-- ASN1START + +Q-QualMin-r9 ::= INTEGER (-34..-3) + +-- ASN1STOP + +– Q-RxLevMin +The IE Q-RxLevMin is used to indicate for cell selection/ re-selection the required minimum received RSRP level in the (E-UTRA) cell. Corresponds to parameter Qrxlevmin in 36.304 [4]. Actual value Qrxlevmin = IE value * 2 [dBm]. +Q-RxLevMin information element +-- ASN1START + +Q-RxLevMin ::= INTEGER (-70..-22) + +-- ASN1STOP + +– Q-OffsetRange +The IE Q-OffsetRange is used to indicate a cell, CSI-RS resource or frequency specific offset to be applied when evaluating candidates for cell re-selection or when evaluating triggering conditions for measurement reporting. The value in dB. Value dB-24 corresponds to -24 dB, dB-22 corresponds to -22 dB and so on. +Q- OffsetRange information element +-- ASN1START + +Q-OffsetRange ::= ENUMERATED { + dB-24, dB-22, dB-20, dB-18, dB-16, dB-14, + dB-12, dB-10, dB-8, dB-6, dB-5, dB-4, dB-3, + dB-2, dB-1, dB0, dB1, dB2, dB3, dB4, dB5, + dB6, dB8, dB10, dB12, dB14, dB16, dB18, + dB20, dB22, dB24} + +-- ASN1STOP + +– Q-OffsetRangeInterRAT +The IE Q-OffsetRangeInterRAT is used to indicate a frequency specific offset to be applied when evaluating triggering conditions for measurement reporting. The value in dB. +Q-OffsetRangeInterRAT information element +-- ASN1START + +Q-OffsetRangeInterRAT ::= INTEGER (-15..15) + +-- ASN1STOP + +– ReselectionThreshold +The IE ReselectionThreshold is used to indicate an Rx level threshold for cell reselection. Actual value of threshold = IE value * 2 [dB]. +ReselectionThreshold information element +-- ASN1START + +ReselectionThreshold ::= INTEGER (0..31) + +-- ASN1STOP + +– ReselectionThresholdQ +The IE ReselectionThresholdQ is used to indicate a quality level threshold for cell reselection. Actual value of threshold = IE value [dB]. +ReselectionThresholdQ information element +-- ASN1START + +ReselectionThresholdQ-r9 ::= INTEGER (0..31) + +-- ASN1STOP + +– SCellIndex +The IE SCellIndex concerns a short identity, used to identify an SCell. +SCellIndex information element +-- ASN1START + +SCellIndex-r10 ::= INTEGER (1..7) + +-- ASN1STOP + +– ServCellIndex +The IE ServCellIndex concerns a short identity, used to identify a serving cell (i.e. the PCell or an SCell). Value 0 applies for the PCell, while the SCellIndex that has previously been assigned applies for SCells. +ServCellIndex information element +-- ASN1START + +ServCellIndex-r10 ::= INTEGER (0..7) + +-- ASN1STOP + +– SpeedStateScaleFactors +The IE SpeedStateScaleFactors concerns factors, to be applied when the UE is in medium or high speed state, used for scaling a mobility control related parameter. +SpeedStateScaleFactors information element +-- ASN1START + +SpeedStateScaleFactors ::= SEQUENCE { + sf-Medium ENUMERATED {oDot25, oDot5, oDot75, lDot0}, + sf-High ENUMERATED {oDot25, oDot5, oDot75, lDot0} +} +-- ASN1STOP + +SpeedStateScaleFactors field descriptions sf-High +The concerned mobility control related parameter is multiplied with this factor if the UE is in High Mobility state as defined in TS 36.304 [4]. Value oDot25 corresponds to 0.25, oDot5 corresponds to 0.5 , oDot75 corresponds to 0.75 and so on. sf-Medium +The concerned mobility control related parameter is multiplied with this factor if the UE is in Medium Mobility state as defined in TS 36.304 [4]. Value oDot25 corresponds to 0.25, oDot5 corresponds to 0.5 , oDot75 corresponds to 0.75 and so on. +– SystemInfoListGERAN +The IE SystemInfoListGERAN contains system information of a GERAN cell. +SystemInfoListGERAN information element +-- ASN1START + +SystemInfoListGERAN ::= SEQUENCE (SIZE (1..maxGERAN-SI)) OF + OCTET STRING (SIZE (1..23)) + +-- ASN1STOP + +SystemInfoListGERAN field descriptions SystemInfoListGERAN +Each OCTET STRING contains one System Information (SI) message as defined in TS 44.018 [45, table 9.1.1] excluding the L2 Pseudo Length, the RR management Protocol Discriminator and the Skip Indicator or a complete Packet System Information (PSI) message as defined in TS 44.060 [36, table 11.2.1]. +– SystemTimeInfoCDMA2000 +The IE SystemTimeInfoCDMA2000 informs the UE about the absolute time in the current cell. The UE uses this absolute time knowledge to derive the CDMA2000 Physical cell identity, expressed as PNOffset, of neighbour CDMA2000 cells. +NOTE: The UE needs the CDMA2000 system time with a certain level of accuracy for performing measurements as well as for communicating with the CDMA2000 network (HRPD or 1xRTT). +SystemTimeInfoCDMA2000 information element +-- ASN1START + +SystemTimeInfoCDMA2000 ::= SEQUENCE { + cdma-EUTRA-Synchronisation BOOLEAN, + cdma-SystemTime CHOICE { + synchronousSystemTime BIT STRING (SIZE (39)), + asynchronousSystemTime BIT STRING (SIZE (49)) + } +} + +-- ASN1STOP + +SystemTimeInfoCDMA2000 field descriptions asynchronousSystemTime +The CDMA2000 system time corresponding to the SFN boundary at or after the ending boundary of the SI-Window in which SystemInformationBlockType8 is transmitted. E-UTRAN includes this field if the E-UTRA frame boundary is not aligned to the start of CDMA2000 system time. This field size is 49 bits and the unit is 8 CDMA chips based on 1.2288 Mcps. cdma-EUTRA-Synchronisation +TRUE indicates that there is no drift in the timing between EUTRA and CDMA2000. FALSE indicates that the timing between E-UTRA and CDMA2000 can drift. NOTE 1 synchronousSystemTime +CDMA2000 system time corresponding to the SFN boundary at or after the ending boundary of the SI-window in which SystemInformationBlockType8 is transmitted. E-UTRAN includes this field if the E-UTRA frame boundary is aligned to the start of CDMA2000 system time. This field size is 39 bits and the unit is 10 ms based on a 1.2288 Mcps chip rate. +NOTE 1: The following table shows the recommended combinations of the cdma-EUTRA-Synchronisation field and the choice of cdma-SystemTime included by E-UTRAN for FDD and TDD: + +FDD/TDD cdma-EUTRA-Synchronisation synchronousSystemTime asynchronousSystemTime FDD FALSE Not Recommended Recommended FDD TRUE Recommended Not Recommended TDD FALSE Not Recommended Recommended TDD TRUE Recommended Recommended +– TrackingAreaCode +The IE TrackingAreaCode is used to identify a tracking area within the scope of a PLMN, see TS 24.301 [35]. +TrackingAreaCode information element +-- ASN1START + +TrackingAreaCode ::= BIT STRING (SIZE (16)) + +-- ASN1STOP + +– T-Reselection +The IE T-Reselection concerns the cell reselection timer TreselectionRAT for E-UTRA, UTRA, GERAN or CDMA2000. Value in seconds. +T-Reselection information element +-- ASN1START + +T-Reselection ::= INTEGER (0..7) + +-- ASN1STOP + +6.3.5 Measurement information elements +– AllowedMeasBandwidth +The IE AllowedMeasBandwidth is used to indicate the maximum allowed measurement bandwidth on a carrier frequency as defined by the parameter Transmission Bandwidth Configuration "NRB" TS 36.104 [47]. The values mbw6, mbw15, mbw25, mbw50, mbw75, mbw100 indicate 6, 15, 25, 50, 75 and 100 resource blocks respectively. +AllowedMeasBandwidth information element +-- ASN1START + +AllowedMeasBandwidth ::= ENUMERATED {mbw6, mbw15, mbw25, mbw50, mbw75, mbw100} + +-- ASN1STOP + +– CSI-RSRP-Range +The IE CSI-RSRP-Range specifies the value range used in CSI-RSRP measurements and thresholds. Integer value for CSI-RSRP measurements according to mapping table in TS 36.133 [16]. +CSI-RSRP-Range information element +-- ASN1START + +CSI-RSRP-Range-r12 ::= INTEGER(0..97) + +-- ASN1STOP + +– Hysteresis +The IE Hysteresis is a parameter used within the entry and leave condition of an event triggered reporting condition. The actual value is IE value * 0.5 dB. +Hysteresis information element +-- ASN1START + +Hysteresis ::= INTEGER (0..30) + +-- ASN1STOP + +– LocationInfo +The IE LocationInfo is used to transfer detailed location information available at the UE to correlate measurements and UE position information. +LocationInfo information element +-- ASN1START + +LocationInfo-r10 ::= SEQUENCE { + locationCoordinates-r10 CHOICE { + ellipsoid-Point-r10 OCTET STRING, + ellipsoidPointWithAltitude-r10 OCTET STRING, + ..., + ellipsoidPointWithUncertaintyCircle-r11 OCTET STRING, + ellipsoidPointWithUncertaintyEllipse-r11 OCTET STRING, + ellipsoidPointWithAltitudeAndUncertaintyEllipsoid-r11 OCTET STRING, + ellipsoidArc-r11 OCTET STRING, + polygon-r11 OCTET STRING + }, + horizontalVelocity-r10 OCTET STRING OPTIONAL, + gnss-TOD-msec-r10 OCTET STRING OPTIONAL, + ... +} + +-- ASN1STOP + +LocationInfo field descriptions ellipsoidArc +Parameter EllipsoidArc defined in TS36.355 [54]. The first/leftmost bit of the first octet contains the most significant bit. ellipsoid-Point +Parameter Ellipsoid-Point defined in TS36.355 [54]. The first/leftmost bit of the first octet contains the most significant bit. ellipsoidPointWithAltitude +Parameter EllipsoidPointWithAltitude defined in TS36.355 [54]. The first/leftmost bit of the first octet contains the most significant bit. ellipsoidPointWithAltitudeAndUncertaintyEllipsoid +Parameter EllipsoidPointWithAltitudeAndUncertaintyEllipsoid defined in TS36.355 [54]. The first/leftmost bit of the first octet contains the most significant bit. ellipsoidPointWithUncertaintyCircle +Parameter Ellipsoid-PointWithUncertaintyCircle defined in TS36.355 [54]. The first/leftmost bit of the first octet contains the most significant bit. ellipsoidPointWithUncertaintyEllipse +Parameter EllipsoidPointWithUncertaintyEllipse defined in TS36.355 [54]. The first/leftmost bit of the first octet contains the most significant bit. gnss-TOD-msec +Parameter Gnss-TOD-msec defined in TS36.355 [54]. The first/leftmost bit of the first octet contains the most significant bit. horizontalVelocity +Parameter HorizontalVelocity defined in TS36.355 [54]. The first/leftmost bit of the first octet contains the most significant bit. polygon +Parameter Polygon defined in TS36.355 [54]. The first/leftmost bit of the first octet contains the most significant bit. +– MBSFN-RSRQ-Range +The IE MBSFN-RSRQ-Range specifies the value range used in MBSFN RSRQ measurements. Integer value for MBSFN RSRQ measurements according to mapping table in TS 36.133 [16]. +MBSFN-RSRQ-Range information element +-- ASN1START + +MBSFN-RSRQ-Range-r12 ::= INTEGER(0..31) +-- ASN1STOP + +– MeasConfig +The IE MeasConfig specifies measurements to be performed by the UE, and covers intra-frequency, inter-frequency and inter-RAT mobility as well as configuration of measurement gaps. +MeasConfig information element +-- ASN1START + +MeasConfig ::= SEQUENCE { + -- Measurement objects + measObjectToRemoveList MeasObjectToRemoveList OPTIONAL, -- Need ON + measObjectToAddModList MeasObjectToAddModList OPTIONAL, -- Need ON + -- Reporting configurations + reportConfigToRemoveList ReportConfigToRemoveList OPTIONAL, -- Need ON + reportConfigToAddModList ReportConfigToAddModList OPTIONAL, -- Need ON + -- Measurement identities + measIdToRemoveList MeasIdToRemoveList OPTIONAL, -- Need ON + measIdToAddModList MeasIdToAddModList OPTIONAL, -- Need ON + -- Other parameters + quantityConfig QuantityConfig OPTIONAL, -- Need ON + measGapConfig MeasGapConfig OPTIONAL, -- Need ON + s-Measure RSRP-Range OPTIONAL, -- Need ON + preRegistrationInfoHRPD PreRegistrationInfoHRPD OPTIONAL, -- Need OP + speedStatePars CHOICE { + release NULL, + setup SEQUENCE { + mobilityStateParameters MobilityStateParameters, + timeToTrigger-SF SpeedStateScaleFactors + } + } OPTIONAL, -- Need ON + ..., + [[ measObjectToAddModList-v9e0 MeasObjectToAddModList-v9e0 OPTIONAL -- Need ON + ]], + [[ allowInterruptions-r11 BOOLEAN OPTIONAL -- Need ON + ]], + [[ measScaleFactor-r12 CHOICE { + release NULL, + setup MeasScaleFactor-r12 + } OPTIONAL, -- Need ON + measIdToRemoveListExt-r12 MeasIdToRemoveListExt-r12 OPTIONAL, -- Need ON + measIdToAddModListExt-r12 MeasIdToAddModListExt-r12 OPTIONAL, -- Need ON + measRSRQ-OnAllSymbols-r12 BOOLEAN OPTIONAL -- Need ON + ]] +} + +MeasIdToRemoveList ::= SEQUENCE (SIZE (1..maxMeasId)) OF MeasId + +MeasIdToRemoveListExt-r12 ::= SEQUENCE (SIZE (1..maxMeasId)) OF MeasId-v1250 + +MeasObjectToRemoveList ::= SEQUENCE (SIZE (1..maxObjectId)) OF MeasObjectId + +ReportConfigToRemoveList ::= SEQUENCE (SIZE (1..maxReportConfigId)) OF ReportConfigId + +-- ASN1STOP + +MeasConfig field descriptions allowInterruptions +Value TRUE indicates that the UE is allowed to cause interruptions to serving cells when performing measurements of deactivated SCell carriers for measCycleSCell of less than 640ms, as specified in TS 36.133 [16]. E-UTRAN enables this field only when an SCell is configured. measGapConfig +Used to setup and release measurement gaps. measIdToRemoveList +List of measurement identities to remove. Field measIdToRemoveListExt includes additional measurement identities i.e. extends the size of the measurement identity list using the general principles specified in 5.1.2. measObjectToAddModList +If E-UTRAN includes measObjectToAddModList-v9e0 it includes the same number of entries, and listed in the same order, as in measObjectToAddModList (i.e. without suffix). measObjectToRemoveList +List of measurement objects to remove. measRSRQ-OnAllSymbols +Value TRUE indicates that the UE shall, when performing RSRQ measurements, perform RSRQ measurement on all OFDM symbols in accordance with TS 36.214 [48]. If widebandRSRQ-Meas is enabled for the frequency in MeasObjectEUTRA, the UE shall, when performing RSRQ measurements, perform RSRQ measurement on all OFDM symbols with wider bandwidth for concerned frequency in accordance with TS 36.214 [48]. measScaleFactor +Even if reducedMeasPerformance is not included in any measObjectEUTRA or measObjectUTRA, E-UTRAN may configure this field. The UE behavior is specified in TS 36.133 [16]. PreRegistrationInfoHRPD +The CDMA2000 HRPD Pre-Registration Information tells the UE if it should pre-register with the CDMA2000 HRPD network and identifies the Pre-registration zone to the UE. reportConfigToRemoveList +List of measurement reporting configurations to remove. s-Measure +PCell quality threshold controlling whether or not the UE is required to perform measurements of intra-frequency, inter-frequency and inter-RAT neighbouring cells. Value “0” indicates to disable s-Measure. timeToTrigger-SF +The timeToTrigger in ReportConfigEUTRA and in ReportConfigInterRAT are multiplied with the scaling factor applicable for the UE’s speed state. +– MeasDS-Config +The IE MeasDS-Config specifies information applicable for discovery signals measurement. +MeasDS-Config information elements +-- ASN1START + +MeasDS-Config-r12 ::= CHOICE { + release NULL, + setup SEQUENCE { + dmtc-PeriodOffset-r12 CHOICE { + ms40-r12 INTEGER(0..39), + ms80-r12 INTEGER(0..79), + ms160-r12 INTEGER(0..159), + ... + }, + ds-OccasionDuration-r12 CHOICE { + durationFDD-r12 INTEGER(1..maxDS-Duration-r12), + durationTDD-r12 INTEGER(2..maxDS-Duration-r12) + }, + measCSI-RS-ToRemoveList-r12 MeasCSI-RS-ToRemoveList-r12 OPTIONAL, -- Need ON + measCSI-RS-ToAddModList-r12 MeasCSI-RS-ToAddModList-r12 OPTIONAL, -- Need ON + ... + } +} + +MeasCSI-RS-ToRemoveList-r12 ::= SEQUENCE (SIZE (1..maxCSI-RS-Meas-r12)) OF MeasCSI-RS-Id-r12 + +MeasCSI-RS-ToAddModList-r12 ::= SEQUENCE (SIZE (1..maxCSI-RS-Meas-r12)) OF MeasCSI-RS-Config-r12 + +MeasCSI-RS-Id-r12 ::= INTEGER (1..maxCSI-RS-Meas-r12) + +MeasCSI-RS-Config-r12 ::= SEQUENCE { + measCSI-RS-Id-r12 MeasCSI-RS-Id-r12, + physCellId-r12 INTEGER (0..503), + scramblingIdentity-r12 INTEGER (0..503), + resourceConfig-r12 INTEGER (0..31), + subframeOffset-r12 INTEGER (0..4), + csi-RS-IndividualOffset-r12 Q-OffsetRange, + ... +} + +-- ASN1STOP + +MeasDS-Config field descriptions csi-RS-IndividualOffset +CSI-RS individual offset applicable to a specific CSI-RS resource. Value dB-24 corresponds to -24 dB, dB-22 corresponds to -22 dB and so on. dmtc-PeriodOffset +Indicates the discovery signals measurement timing configuration (DMTC) periodicity (dmtc-Periodicity) and offset (dmtc-Offset) for this frequency. For DMTC periodicity, value ms40 corresponds to 40ms, ms80 corresponds to 80ms and so on. The value of DMTC offset is in number of subframe(s). The duration of a DMTC occasion is 6ms. ds-OccasionDuration +Indicates the duration of discovery signal occasion for this frequency. Discovery signal occasion duration is common for all cells transmitting discovery signals on one frequency. measCSI-RS-ToAddModList +List of CSI-RS resources to add/ modify in the CSI-RS resource list for discovery signals measurement. measCSI-RS-ToRemoveList +List of CSI-RS resources to remove from the CSI-RS resource list for discovery signals measurement. physCellId +Indicates the physical cell identity where UE may assume that the CSI-RS and the PSS/SSS/CRS corresponding to the indicated physical cell identity are quasi co-located with respect to average delay and doppler shift. resourceConfig +Parameter: CSI reference signal configuration, see TS 36.211 [21, table 6.10.5.2-1 and 6.10.5.2-2]. scramblingIdentity +Parameter: Pseudo-random sequence generator parameter, , see TS 36.213 [23, 7.2.5]. subframeOffset +Indicates the subframe offset between SSS of the cell indicated by physCellId and the CSI-RS resource in a discovery signal occasion. + +– MeasGapConfig +The IE MeasGapConfig specifies the measurement gap configuration and controls setup/ release of measurement gaps. +MeasGapConfig information element +-- ASN1START + +MeasGapConfig ::= CHOICE { + release NULL, + setup SEQUENCE { + gapOffset CHOICE { + gp0 INTEGER (0..39), + gp1 INTEGER (0..79), + ... + } + } +} + +-- ASN1STOP + +MeasGapConfig field descriptions gapOffset +Value gapOffset of gp0 corresponds to gap offset of Gap Pattern Id “0” with MGRP = 40ms, gapOffset of gp1 corresponds to gap offset of Gap Pattern Id “1” with MGRP = 80ms. Also used to specify the measurement gap pattern to be applied, as defined in TS 36.133 [16]. +– MeasId +The IE MeasId is used to identify a measurement configuration, i.e., linking of a measurement object and a reporting configuration. +MeasId information element +-- ASN1START + +MeasId ::= INTEGER (1..maxMeasId) + +MeasId-v1250 ::= INTEGER (maxMeasId-Plus1..maxMeasId-r12) + +-- ASN1STOP + +– MeasIdToAddModList +The IE MeasIdToAddModList concerns a list of measurement identities to add or modify, with for each entry the measId, the associated measObjectId and the associated reportConfigId. Field measIdToAddModListExt includes additional measurement identities i.e. extends the size of the measurement identity list using the general principles specified in 5.1.2. +MeasIdToAddModList information element +-- ASN1START + +MeasIdToAddModList ::= SEQUENCE (SIZE (1..maxMeasId)) OF MeasIdToAddMod + +MeasIdToAddModListExt-r12 ::= SEQUENCE (SIZE (1..maxMeasId)) OF MeasIdToAddModExt-r12 + +MeasIdToAddMod ::= SEQUENCE { + measId MeasId, + measObjectId MeasObjectId, + reportConfigId ReportConfigId +} + +MeasIdToAddModExt-r12 ::= SEQUENCE { + measId-v1250 MeasId-v1250, + measObjectId-r12 MeasObjectId, + reportConfigId-r12 ReportConfigId +} + +-- ASN1STOP + +– MeasObjectCDMA2000 +The IE MeasObjectCDMA2000 specifies information applicable for inter-RAT CDMA2000 neighbouring cells. +MeasObjectCDMA2000 information element +-- ASN1START + +MeasObjectCDMA2000 ::= SEQUENCE { + cdma2000-Type CDMA2000-Type, + carrierFreq CarrierFreqCDMA2000, + searchWindowSize INTEGER (0..15) OPTIONAL, -- Need ON + offsetFreq Q-OffsetRangeInterRAT DEFAULT 0, + cellsToRemoveList CellIndexList OPTIONAL, -- Need ON + cellsToAddModList CellsToAddModListCDMA2000 OPTIONAL, -- Need ON + cellForWhichToReportCGI PhysCellIdCDMA2000 OPTIONAL, -- Need ON + ... +} + +CellsToAddModListCDMA2000 ::= SEQUENCE (SIZE (1..maxCellMeas)) OF CellsToAddModCDMA2000 + +CellsToAddModCDMA2000 ::= SEQUENCE { + cellIndex INTEGER (1..maxCellMeas), + physCellId PhysCellIdCDMA2000 +} + +-- ASN1STOP + +MeasObjectCDMA2000 field descriptions carrierInfo +Identifies CDMA2000 carrier frequency for which this configuration is valid. cdma2000-Type +The type of CDMA2000 network: CDMA2000 1xRTT or CDMA2000 HRPD. cellIndex +Entry index in the neighbouring cell list. cellsToAddModList +List of cells to add/ modify in the neighbouring cell list. cellsToRemoveList +List of cells to remove from the neighbouring cell list. physCellId +CDMA2000 Physical cell identity of a cell in neighbouring cell list expressed as PNOffset. searchWindowSize +Provides the search window size to be used by the UE for the neighbouring pilot, see C.S0005 [25]. +– MeasObjectEUTRA +The IE MeasObjectEUTRA specifies information applicable for intra-frequency or inter-frequency EUTRA cells. +MeasObjectEUTRA information element +-- ASN1START + +MeasObjectEUTRA ::= SEQUENCE { + carrierFreq ARFCN-ValueEUTRA, + allowedMeasBandwidth AllowedMeasBandwidth, + presenceAntennaPort1 PresenceAntennaPort1, + neighCellConfig NeighCellConfig, + offsetFreq Q-OffsetRange DEFAULT dB0, + -- Cell list + cellsToRemoveList CellIndexList OPTIONAL, -- Need ON + cellsToAddModList CellsToAddModList OPTIONAL, -- Need ON + -- Black list + blackCellsToRemoveList CellIndexList OPTIONAL, -- Need ON + blackCellsToAddModList BlackCellsToAddModList OPTIONAL, -- Need ON + cellForWhichToReportCGI PhysCellId OPTIONAL, -- Need ON + ..., + [[measCycleSCell-r10 MeasCycleSCell-r10 OPTIONAL, -- Need ON + measSubframePatternConfigNeigh-r10 MeasSubframePatternConfigNeigh-r10 OPTIONAL -- Need ON + ]], + [[widebandRSRQ-Meas-r11 BOOLEAN OPTIONAL -- Cond WB-RSRQ + ]], + [[ altTTT-CellsToRemoveList-r12 CellIndexList OPTIONAL, -- Need ON + altTTT-CellsToAddModList-r12 AltTTT-CellsToAddModList-r12 OPTIONAL, -- Need ON + t312-r12 CHOICE { + release NULL, + setup ENUMERATED {ms0, ms50, ms100, ms200, + ms300, ms400, ms500, ms1000} + } OPTIONAL, -- Need ON + reducedMeasPerformance-r12 BOOLEAN OPTIONAL, -- Need ON + measDS-Config-r12 MeasDS-Config-r12 OPTIONAL -- Need ON + ]] +} + +MeasObjectEUTRA-v9e0 ::= SEQUENCE { + carrierFreq-v9e0 ARFCN-ValueEUTRA-v9e0 +} + +CellsToAddModList ::= SEQUENCE (SIZE (1..maxCellMeas)) OF CellsToAddMod + +CellsToAddMod ::= SEQUENCE { + cellIndex INTEGER (1..maxCellMeas), + physCellId PhysCellId, + cellIndividualOffset Q-OffsetRange +} + +BlackCellsToAddModList ::= SEQUENCE (SIZE (1..maxCellMeas)) OF BlackCellsToAddMod + +BlackCellsToAddMod ::= SEQUENCE { + cellIndex INTEGER (1..maxCellMeas), + physCellIdRange PhysCellIdRange +} + +MeasCycleSCell-r10 ::= ENUMERATED {sf160, sf256, sf320, sf512, + sf640, sf1024, sf1280, spare1} + +MeasSubframePatternConfigNeigh-r10 ::= CHOICE { + release NULL, + setup SEQUENCE { + measSubframePatternNeigh-r10 MeasSubframePattern-r10, + measSubframeCellList-r10 MeasSubframeCellList-r10 OPTIONAL -- Cond always + } +} + +MeasSubframeCellList-r10 ::= SEQUENCE (SIZE (1..maxCellMeas)) OF PhysCellIdRange + +AltTTT-CellsToAddModList-r12 ::= SEQUENCE (SIZE (1..maxCellMeas)) OF AltTTT-CellsToAddMod-r12 + +AltTTT-CellsToAddMod-r12 ::= SEQUENCE { + cellIndex-r12 INTEGER (1..maxCellMeas), + physCellIdRange-r12 PhysCellIdRange +} + +-- ASN1STOP + +MeasObjectEUTRA field descriptions altTTT-CellsToAddModList +List of cells to add/ modify in the cell list for which the alternative time to trigger specified by alternativeTimeToTrigger in reportConfigEUTRA, if configured, applies. altTTT-CellsToRemoveList +List of cells to remove from the list of cells for alternative time to trigger. blackCellsToAddModList +List of cells to add/ modify in the black list of cells. blackCellsToRemoveList +List of cells to remove from the black list of cells. carrierFreq +Identifies EUTRA carrier frequency for which this configuration is valid. E-UTRAN does not configure more than one measurement object for the same physical frequency regardless of the E-ARFCN used to indicate this. cellIndex +Entry index in the cell list. An entry may concern a range of cells, in which case this value applies to the entire range. cellIndividualOffset +Cell individual offset applicable to a specific cell. Value dB-24 corresponds to -24 dB, dB-22 corresponds to -22 dB and so on. cellsToAddModList +List of cells to add/ modify in the cell list. cellsToRemoveList +List of cells to remove from the cell list. measCycleSCell +The parameter is used only when an SCell is configured on the frequency indicated by the measObject and is in deactivated state, see TS 36.133 [16, 8.3.3]. E-UTRAN configures the parameter whenever an SCell is configured on the frequency indicated by the measObject, but the field may also be signalled when an SCell is not configured. Value sf160 corresponds to 160 sub-frames, sf256 corresponds to 256 sub-frames and so on. measDS-Config +Parameters applicable to discovery signals measurement on the carrier frequency indicated by carrierFreq. measSubframeCellList +List of cells for which measSubframePatternNeigh is applied. measSubframePatternNeigh +Time domain measurement resource restriction pattern applicable to neighbour cell RSRP and RSRQ measurements on the carrier frequency indicated by carrierFreq. For cells in measSubframeCellList the UE shall assume that the subframes indicated by measSubframePatternNeigh are non-MBSFN subframes, and have the same special subframe configuration as PCell. offsetFreq +Offset value applicable to the carrier frequency. Value dB-24 corresponds to -24 dB, dB-22 corresponds to -22 dB and so on. physCellId +Physical cell identity of a cell in the cell list. physCellIdRange +Physical cell identity or a range of physical cell identities. reducedMeasPerformance +If set to TRUE, the EUTRA carrier frequency is configured for reduced measurement performance, otherwise it is configured for normal measurement performance, see TS 36.133 [16]. t312 +The value of timer T312. Value ms0 represents 0 ms, ms50 represents 50 ms and so on. widebandRSRQ-Meas +If this field is set to TRUE, the UE shall, when performing RSRQ measurements, use a wider bandwidth in accordance with TS 36.133 [16]. +Conditional presence Explanation always The field is mandatory present. WB-RSRQ The field is optionally present, need ON, if the measurement bandwidth indicated by allowedMeasBandwidth is 50 resource blocks or larger; otherwise it is not present and the UE shall delete any existing value for this field, if configured. +– MeasObjectGERAN +The IE MeasObjectGERAN specifies information applicable for inter-RAT GERAN neighbouring frequencies. +MeasObjectGERAN information element +-- ASN1START + +MeasObjectGERAN ::= SEQUENCE { + carrierFreqs CarrierFreqsGERAN, + offsetFreq Q-OffsetRangeInterRAT DEFAULT 0, + ncc-Permitted BIT STRING(SIZE (8)) DEFAULT '11111111'B, + cellForWhichToReportCGI PhysCellIdGERAN OPTIONAL, -- Need ON + ... +} + +-- ASN1STOP + +MeasObjectGERAN field descriptions ncc-Permitted +Field encoded as a bit map, where bit N is set to "0" if a BCCH carrier with NCC = N-1 is not permitted for monitoring and set to "1" if a BCCH carrier with NCC = N-1 is permitted for monitoring; N = 1 to 8; bit 1 of the bitmap is the leading bit of the bit string. carrierFreqs +If E-UTRAN includes cellForWhichToReportCGI, it includes only one GERAN ARFCN value in carrierFreqs. +– MeasObjectId +The IE MeasObjectId used to identify a measurement object configuration. +MeasObjectId information element +-- ASN1START + +MeasObjectId ::= INTEGER (1..maxObjectId) + +-- ASN1STOP + +– MeasObjectToAddModList +The IE MeasObjectToAddModList concerns a list of measurement objects to add or modify +MeasObjectToAddModList information element +-- ASN1START + +MeasObjectToAddModList ::= SEQUENCE (SIZE (1..maxObjectId)) OF MeasObjectToAddMod + +MeasObjectToAddModList-v9e0 ::= SEQUENCE (SIZE (1..maxObjectId)) OF MeasObjectToAddMod-v9e0 + +MeasObjectToAddMod ::= SEQUENCE { + measObjectId MeasObjectId, + measObject CHOICE { + measObjectEUTRA MeasObjectEUTRA, + measObjectUTRA MeasObjectUTRA, + measObjectGERAN MeasObjectGERAN, + measObjectCDMA2000 MeasObjectCDMA2000, + ... + } +} + +MeasObjectToAddMod-v9e0 ::= SEQUENCE { + measObjectEUTRA-v9e0 MeasObjectEUTRA-v9e0 OPTIONAL -- Cond eutra +} + +-- ASN1STOP + +Conditional presence Explanation eutra The field is optional present, need OR, if for the corresponding entry in MeasObjectToAddModList field measObject is set to measObjectEUTRA and its sub-field carrierFreq is set to maxEARFCN. Otherwise the field is not present and the UE shall delete any existing value for this field. +– MeasObjectUTRA +The IE MeasObjectUTRA specifies information applicable for inter-RAT UTRA neighbouring cells. +MeasObjectUTRA information element +-- ASN1START + +MeasObjectUTRA ::= SEQUENCE { + carrierFreq ARFCN-ValueUTRA, + offsetFreq Q-OffsetRangeInterRAT DEFAULT 0, + cellsToRemoveList CellIndexList OPTIONAL, -- Need ON + cellsToAddModList CHOICE { + cellsToAddModListUTRA-FDD CellsToAddModListUTRA-FDD, + cellsToAddModListUTRA-TDD CellsToAddModListUTRA-TDD + } OPTIONAL, -- Need ON + cellForWhichToReportCGI CHOICE { + utra-FDD PhysCellIdUTRA-FDD, + utra-TDD PhysCellIdUTRA-TDD + } OPTIONAL, -- Need ON + ..., + [[ csg-allowedReportingCells-v930 CSG-AllowedReportingCells-r9 OPTIONAL -- Need ON + ]], + [[ reducedMeasPerformance-r12 BOOLEAN OPTIONAL -- Need ON + ]] +} + +CellsToAddModListUTRA-FDD ::= SEQUENCE (SIZE (1..maxCellMeas)) OF CellsToAddModUTRA-FDD + +CellsToAddModUTRA-FDD ::= SEQUENCE { + cellIndex INTEGER (1..maxCellMeas), + physCellId PhysCellIdUTRA-FDD +} + +CellsToAddModListUTRA-TDD ::= SEQUENCE (SIZE (1..maxCellMeas)) OF CellsToAddModUTRA-TDD + +CellsToAddModUTRA-TDD ::= SEQUENCE { + cellIndex INTEGER (1..maxCellMeas), + physCellId PhysCellIdUTRA-TDD +} + +CSG-AllowedReportingCells-r9 ::= SEQUENCE { + physCellIdRangeUTRA-FDDList-r9 PhysCellIdRangeUTRA-FDDList-r9 OPTIONAL -- Need OR +} +-- ASN1STOP + +MeasObjectUTRA field descriptions carrierFreq +Identifies UTRA carrier frequency for which this configuration is valid. E-UTRAN does not configure more than one measurement object for the same physical frequency regardless of the ARFCN used to indicate this. cellIndex +Entry index in the neighbouring cell list. cellsToAddModListUTRA-FDD +List of UTRA FDD cells to add/ modify in the neighbouring cell list. cellsToAddModListUTRA-TDD +List of UTRA TDD cells to add/modify in the neighbouring cell list. cellsToRemoveList +List of cells to remove from the neighbouring cell list. csg-allowedReportingCells +One or more ranges of physical cell identities for which UTRA-FDD reporting is allowed. reducedMeasPerformance +If set to TRUE the UTRA carrier frequency is configured for reduced measurement performance, otherwise it is configured for normal measurement performance, see TS 36.133 [16]. +– MeasResults +The IE MeasResults covers measured results for intra-frequency, inter-frequency and inter- RAT mobility. +MeasResults information element +-- ASN1START + +MeasResults ::= SEQUENCE { + measId MeasId, + measResultPCell SEQUENCE { + rsrpResult RSRP-Range, + rsrqResult RSRQ-Range + }, + measResultNeighCells CHOICE { + measResultListEUTRA MeasResultListEUTRA, + measResultListUTRA MeasResultListUTRA, + measResultListGERAN MeasResultListGERAN, + measResultsCDMA2000 MeasResultsCDMA2000, + ... + } OPTIONAL, + ..., + [[ measResultForECID-r9 MeasResultForECID-r9 OPTIONAL + ]], + [[ locationInfo-r10 LocationInfo-r10 OPTIONAL, + measResultServFreqList-r10 MeasResultServFreqList-r10 OPTIONAL + ]], + [[ measId-v1250 MeasId-v1250 OPTIONAL, + measResultPCell-v1250 RSRQ-Range-v1250 OPTIONAL, + measResultCSI-RS-List-r12 MeasResultCSI-RS-List-r12 OPTIONAL + ]] +} + +MeasResultListEUTRA ::= SEQUENCE (SIZE (1..maxCellReport)) OF MeasResultEUTRA + +MeasResultEUTRA ::= SEQUENCE { + physCellId PhysCellId, + cgi-Info SEQUENCE { + cellGlobalId CellGlobalIdEUTRA, + trackingAreaCode TrackingAreaCode, + plmn-IdentityList PLMN-IdentityList2 OPTIONAL + } OPTIONAL, + measResult SEQUENCE { + rsrpResult RSRP-Range OPTIONAL, + rsrqResult RSRQ-Range OPTIONAL, + ..., + [[ additionalSI-Info-r9 AdditionalSI-Info-r9 OPTIONAL + ]], + [[ primaryPLMN-Suitable-r12 ENUMERATED {true} OPTIONAL, + measResult-v1250 RSRQ-Range-v1250 OPTIONAL + ]] + } +} + +MeasResultServFreqList-r10 ::= SEQUENCE (SIZE (1..maxServCell-r10)) OF MeasResultServFreq-r10 + +MeasResultServFreq-r10 ::= SEQUENCE { + servFreqId-r10 ServCellIndex-r10, + measResultSCell-r10 SEQUENCE { + rsrpResultSCell-r10 RSRP-Range, + rsrqResultSCell-r10 RSRQ-Range + } OPTIONAL, + measResultBestNeighCell-r10 SEQUENCE { + physCellId-r10 PhysCellId, + rsrpResultNCell-r10 RSRP-Range, + rsrqResultNCell-r10 RSRQ-Range + } OPTIONAL, + ..., + [[ measResultSCell-v1250 RSRQ-Range-v1250 OPTIONAL, + measResultBestNeighCell-v1250 RSRQ-Range-v1250 OPTIONAL + ]] +} + +MeasResultCSI-RS-List-r12 ::= SEQUENCE (SIZE (1..maxCellReport)) OF MeasResultCSI-RS-r12 + +MeasResultCSI-RS-r12 ::= SEQUENCE { + measCSI-RS-Id-r12 MeasCSI-RS-Id-r12, + csi-RSRP-Result-r12 CSI-RSRP-Range-r12, + ... +} + +MeasResultListUTRA ::= SEQUENCE (SIZE (1..maxCellReport)) OF MeasResultUTRA + +MeasResultUTRA ::= SEQUENCE { + physCellId CHOICE { + fdd PhysCellIdUTRA-FDD, + tdd PhysCellIdUTRA-TDD + }, + cgi-Info SEQUENCE { + cellGlobalId CellGlobalIdUTRA, + locationAreaCode BIT STRING (SIZE (16)) OPTIONAL, + routingAreaCode BIT STRING (SIZE (8)) OPTIONAL, + plmn-IdentityList PLMN-IdentityList2 OPTIONAL + } OPTIONAL, + measResult SEQUENCE { + utra-RSCP INTEGER (-5..91) OPTIONAL, + utra-EcN0 INTEGER (0..49) OPTIONAL, + ..., + [[ additionalSI-Info-r9 AdditionalSI-Info-r9 OPTIONAL + ]], + [[ primaryPLMN-Suitable-r12 ENUMERATED {true} OPTIONAL + ]] + } +} + +MeasResultListGERAN ::= SEQUENCE (SIZE (1..maxCellReport)) OF MeasResultGERAN + +MeasResultGERAN ::= SEQUENCE { + carrierFreq CarrierFreqGERAN, + physCellId PhysCellIdGERAN, + cgi-Info SEQUENCE { + cellGlobalId CellGlobalIdGERAN, + routingAreaCode BIT STRING (SIZE (8)) OPTIONAL + } OPTIONAL, + measResult SEQUENCE { + rssi INTEGER (0..63), + ... + } +} + +MeasResultsCDMA2000 ::= SEQUENCE { + preRegistrationStatusHRPD BOOLEAN, + measResultListCDMA2000 MeasResultListCDMA2000 +} + +MeasResultListCDMA2000 ::= SEQUENCE (SIZE (1..maxCellReport)) OF MeasResultCDMA2000 + +MeasResultCDMA2000 ::= SEQUENCE { + physCellId PhysCellIdCDMA2000, + cgi-Info CellGlobalIdCDMA2000 OPTIONAL, + measResult SEQUENCE { + pilotPnPhase INTEGER (0..32767) OPTIONAL, + pilotStrength INTEGER (0..63), + ... + } +} + +MeasResultForECID-r9 ::= SEQUENCE { + ue-RxTxTimeDiffResult-r9 INTEGER (0..4095), + currentSFN-r9 BIT STRING (SIZE (10)) +} + +PLMN-IdentityList2 ::= SEQUENCE (SIZE (1..5)) OF PLMN-Identity + +AdditionalSI-Info-r9 ::= SEQUENCE { + csg-MemberStatus-r9 ENUMERATED {member} OPTIONAL, + csg-Identity-r9 CSG-Identity OPTIONAL +} + +-- ASN1STOP + +MeasResults field descriptions csg-MemberStatus +Indicates whether or not the UE is a member of the CSG of the neighbour cell. currentSFN +Indicates the current system frame number when receiving the UE Rx-Tx time difference measurement results from lower layer. locationAreaCode +A fixed length code identifying the location area within a PLMN, as defined in TS 23.003 [27]. measId +Identifies the measurement identity for which the reporting is being performed. If the measId-v1250 is included, the measId (i.e. without a suffix) is ignored by eNB. measResult +Measured result of an EUTRA cell; +Measured result of a UTRA cell; +Measured result of a GERAN cell or frequency; or +Measured result of a CDMA2000 cell. +Measured result of UE Rx–Tx time difference. measResultCSI-RS-List +Measured results of the CSI-RS resources in discovery signals measurement. measResultListCDMA2000 +List of measured results for the maximum number of reported best cells for a CDMA2000 measurement identity. measResultListEUTRA +List of measured results for the maximum number of reported best cells for an EUTRA measurement identity. measResultListGERAN +List of measured results for the maximum number of reported best cells or frequencies for a GERAN measurement identity. measResultListUTRA +List of measured results for the maximum number of reported best cells for a UTRA measurement identity. measResultPCell +Measured result of the PCell. measResultsCDMA2000 +Contains the CDMA2000 HRPD pre-registration status and the list of CDMA2000 measurements. MeasResultServFreqList +Measured results of the serving frequencies: the measurement result of each SCell, if any, and of the best neighbouring cell on each serving frequency. pilotPnPhase +Indicates the arrival time of a CDMA2000 pilot, measured relative to the UE’s time reference in units of PN chips, see C.S0005 [25]. This information is used in either SRVCC handover or enhanced 1xRTT CS fallback procedure to CDMA2000 1xRTT. pilotStrength +CDMA2000 Pilot Strength, the ratio of pilot power to total power in the signal bandwidth of a CDMA2000 Forward Channel. See C.S0005 [25] for CDMA2000 1xRTT and C.S0024 [26] for CDMA2000 HRPD. plmn-IdentityList +The list of PLMN Identity read from broadcast information when the multiple PLMN Identities are broadcast. preRegistrationStatusHRPD +Set to TRUE if the UE is currently pre-registered with CDMA2000 HRPD. Otherwise set to FALSE. This can be ignored by the eNB for CDMA2000 1xRTT. routingAreaCode +The RAC identity read from broadcast information, as defined in TS 23.003 [27]. rsrpResult +Measured RSRP result of an EUTRA cell. +The rsrpResult is only reported if configured by the eNB. rsrqResult +Measured RSRQ result of an EUTRA cell. +The rsrqResult is only reported if configured by the eNB. rssi +GERAN Carrier RSSI. RXLEV is mapped to a value between 0 and 63, TS 45.008 [28]. When mapping the RXLEV value to the RSSI bit string, the first/leftmost bit of the bit string contains the most significant bit. ue-RxTxTimeDiffResult +UE Rx-Tx time difference measurement result of the PCell, provided by lower layers. According to UE Rx-Tx time difference report mapping in TS 36.133 [16]. + utra-EcN0 +According to CPICH_Ec/No in TS 25.133 [29] for FDD. Fourteen spare values. The field is not present for TDD. utra-RSCP +According to CPICH_RSCP in TS 25.133 [29] for FDD and P-CCPCH_RSCP in TS 25.123 [30] for TDD. Thirty-one spare values. +– MeasScaleFactor + +The IE MeasScaleFactor specifies the factor for scaling the measurement performance requirements in TS 36.133 [16]. +MeasScaleFactor information element +-- ASN1START + +MeasScaleFactor-r12 ::= ENUMERATED {sf-EUTRA-cf1, sf-EUTRA-cf2} + +-- ASN1STOP + +NOTE: If the reducedMeasPerformance is not included in any measObjectEUTRA or measObjectUTRA and the measScaleFactor is included in the measConfig, E-UTRAN can configure any of the values for the measScaleFactor as specified in TS 36.133 [16]. +– QuantityConfig +The IE QuantityConfig specifies the measurement quantities and layer 3 filtering coefficients for E-UTRA and inter-RAT measurements. +QuantityConfig information element +-- ASN1START + +QuantityConfig ::= SEQUENCE { + quantityConfigEUTRA QuantityConfigEUTRA OPTIONAL, -- Need ON + quantityConfigUTRA QuantityConfigUTRA OPTIONAL, -- Need ON + quantityConfigGERAN QuantityConfigGERAN OPTIONAL, -- Need ON + quantityConfigCDMA2000 QuantityConfigCDMA2000 OPTIONAL, -- Need ON + ..., + [[ quantityConfigUTRA-v1020 QuantityConfigUTRA-v1020 OPTIONAL -- Need ON + ]], + [[ quantityConfigEUTRA-v1250 QuantityConfigEUTRA-v1250 OPTIONAL -- Need ON + ]] +} + +QuantityConfigEUTRA ::= SEQUENCE { + filterCoefficientRSRP FilterCoefficient DEFAULT fc4, + filterCoefficientRSRQ FilterCoefficient DEFAULT fc4 +} + +QuantityConfigEUTRA-v1250 ::= SEQUENCE { + filterCoefficientCSI-RSRP-r12 FilterCoefficient OPTIONAL -- Need OR +} + +QuantityConfigUTRA ::= SEQUENCE { + measQuantityUTRA-FDD ENUMERATED {cpich-RSCP, cpich-EcN0}, + measQuantityUTRA-TDD ENUMERATED {pccpch-RSCP}, + filterCoefficient FilterCoefficient DEFAULT fc4 +} + +QuantityConfigUTRA-v1020 ::= SEQUENCE { + filterCoefficient2-FDD-r10 FilterCoefficient DEFAULT fc4 +} + +QuantityConfigGERAN ::= SEQUENCE { + measQuantityGERAN ENUMERATED {rssi}, + filterCoefficient FilterCoefficient DEFAULT fc2 +} + +QuantityConfigCDMA2000 ::= SEQUENCE { + measQuantityCDMA2000 ENUMERATED {pilotStrength, pilotPnPhaseAndPilotStrength} +} + +-- ASN1STOP + +QuantityConfig field descriptions filterCoefficient2-FDD +Specifies the filtering coefficient used for the UTRAN FDD measurement quantity, which is not included in measQuantityUTRA-FDD, when reportQuantityUTRA-FDD is present in ReportConfigInterRAT. filterCoefficientCSI-RSRP +Specifies the filtering coefficient used for CSI-RSRP. filterCoefficientRSRP +Specifies the filtering coefficient used for RSRP. filterCoefficientRSRQ +Specifies the filtering coefficient used for RSRQ. measQuantityCDMA2000 +Measurement quantity used for CDMA2000 measurements. pilotPnPhaseAndPilotStrength is only applicable for MeasObjectCDMA2000 of cdma2000-Type = type1XRTT. measQuantityGERAN +Measurement quantity used for GERAN measurements. measQuantityUTRA +Measurement quantity used for UTRA measurements. quantityConfigCDMA2000 +Specifies quantity configurations for CDMA2000 measurements. quantityConfigEUTRA +Specifies filter configurations for EUTRA measurements. quantityConfigGERAN +Specifies quantity and filter configurations for GERAN measurements. quantityConfigUTRA +Specifies quantity and filter configurations for UTRA measurements. Field quantityConfigUTRA-v1020 is applicable only when reportQuantityUTRA-FDD is configured. +– ReportConfigEUTRA +The IE ReportConfigEUTRA specifies criteria for triggering of an EUTRA measurement reporting event. The EUTRA measurement reporting events concerning CRS are labelled AN with N equal to 1, 2 and so on. +Event A1: Serving becomes better than absolute threshold; +Event A2: Serving becomes worse than absolute threshold; +Event A3: Neighbour becomes amount of offset better than PCell/ PSCell; +Event A4: Neighbour becomes better than absolute threshold; +Event A5: PCell/ PSCell becomes worse than absolute threshold1 AND Neighbour becomes better than another absolute threshold2. +Event A6: Neighbour becomes amount of offset better than SCell. +The EUTRA measurement reporting events concerning CSI-RS are labelled CN with N equal to 1 and 2. +Event C1: CSI-RS resource becomes better than absolute threshold; +Event C2: CSI-RS resource becomes amount of offset better than reference CSI-RS resource. +ReportConfigEUTRA information element +-- ASN1START + +ReportConfigEUTRA ::= SEQUENCE { + triggerType CHOICE { + event SEQUENCE { + eventId CHOICE { + eventA1 SEQUENCE { + a1-Threshold ThresholdEUTRA + }, + eventA2 SEQUENCE { + a2-Threshold ThresholdEUTRA + }, + eventA3 SEQUENCE { + a3-Offset INTEGER (-30..30), + reportOnLeave BOOLEAN + }, + eventA4 SEQUENCE { + a4-Threshold ThresholdEUTRA + }, + eventA5 SEQUENCE { + a5-Threshold1 ThresholdEUTRA, + a5-Threshold2 ThresholdEUTRA + }, + ..., + eventA6-r10 SEQUENCE { + a6-Offset-r10 INTEGER (-30..30), + a6-ReportOnLeave-r10 BOOLEAN + }, + eventC1-r12 SEQUENCE { + c1-Threshold-r12 ThresholdEUTRA-v1250, + c1-ReportOnLeave-r12 BOOLEAN + }, + eventC2-r12 SEQUENCE { + c2-RefCSI-RS-r12 MeasCSI-RS-Id-r12, + c2-Offset-r12 INTEGER (-30..30), + c2-ReportOnLeave-r12 BOOLEAN + } + }, + hysteresis Hysteresis, + timeToTrigger TimeToTrigger + }, + periodical SEQUENCE { + purpose ENUMERATED { + reportStrongestCells, reportCGI} + } + }, + triggerQuantity ENUMERATED {rsrp, rsrq}, + reportQuantity ENUMERATED {sameAsTriggerQuantity, both}, + maxReportCells INTEGER (1..maxCellReport), + reportInterval ReportInterval, + reportAmount ENUMERATED {r1, r2, r4, r8, r16, r32, r64, infinity}, + ..., + [[ si-RequestForHO-r9 ENUMERATED {setup} OPTIONAL, -- Cond reportCGI + ue-RxTxTimeDiffPeriodical-r9 ENUMERATED {setup} OPTIONAL -- Need OR + ]], + [[ includeLocationInfo-r10 ENUMERATED {true} OPTIONAL, -- Need OR + reportAddNeighMeas-r10 ENUMERATED {setup} OPTIONAL -- Need OR + ]], + [[ alternativeTimeToTrigger-r12 CHOICE { + release NULL, + setup TimeToTrigger + } OPTIONAL, -- Need ON + useT312-r12 BOOLEAN OPTIONAL, -- Need ON + usePSCell-r12 BOOLEAN OPTIONAL, -- Need ON + aN-Threshold1-v1250 RSRQ-RangeConfig-r12 OPTIONAL, -- Need ON + a5-Threshold2-v1250 RSRQ-RangeConfig-r12 OPTIONAL, -- Need ON + reportStrongestCSI-RSs-r12 BOOLEAN OPTIONAL, -- Need ON + reportCRS-Meas-r12 BOOLEAN OPTIONAL, -- Need ON + triggerQuantityCSI-RS-r12 BOOLEAN OPTIONAL -- Need ON + ]] +} + +RSRQ-RangeConfig-r12 ::= CHOICE { + release NULL, + setup RSRQ-Range-v1250 +} + +ThresholdEUTRA ::= CHOICE{ + threshold-RSRP RSRP-Range, + threshold-RSRQ RSRQ-Range +} + +ThresholdEUTRA-v1250 ::= CSI-RSRP-Range-r12 + +-- ASN1STOP + +ReportConfigEUTRA field descriptions a3-Offset/ a6-Offset/ c2-Offset +Offset value to be used in EUTRA measurement report triggering condition for event a3/ a6/ c2. The actual value is IE value * 0.5 dB. alternativeTimeToTrigger +Indicates the time to trigger applicable for cells specified in altTTT-CellsToAddModList of the associated measurement object, if configured aN-ThresholdM/ cN-ThresholdM +Threshold to be used in EUTRA measurement report triggering condition for event number aN/ cN. If multiple thresholds are defined for event number aN/ cN, the thresholds are differentiated by M. c1-ReportOnLeave/ c2-ReportOnLeave +Indicates whether or not the UE shall initiate the measurement reporting procedure when the leaving condition is met for a CSI-RS resource in csi-RS-TriggeredList, as specified in 5.5.4.1. c2-RefCSI-RS +Identity of the CSI-RS resource from the measCSI-RS-ToAddModList of the associated measObject, to be used as the reference CSI-RS resource in EUTRA measurement report triggering condition for event c2. eventId +Choice of EUTRA event triggered reporting criteria. EUTRAN may set this field to eventC1 or eventC2 only if measDS-Config is configured in the associated measObject with one or more CSI-RS resources. maxReportCells +Max number of cells, excluding the serving cell, to include in the measurement report concerning CRS, and max number of CSI-RS resources to include in the measurement report concerning CSI-RS. reportAmount +Number of measurement reports applicable for triggerType event as well as for triggerType periodical. In case purpose is set to reportCGI only value 1 applies. reportCRS-Meas +Inidicates that UE shall include rsrp, rsrq together with csi-rsrp in the measurement report, if possible. reportOnLeave/ a6-ReportOnLeave +Indicates whether or not the UE shall initiate the measurement reporting procedure when the leaving condition is met for a cell in cellsTriggeredList, as specified in 5.5.4.1. reportQuantity +The quantities to be included in the measurement report. The value both means that both the rsrp and rsrq quantities are to be included in the measurement report. In case triggerQuantityCSI-RS is included, only value sameAsTriggerQuantity applies. reportStrongestCSI-RSs +Indicates that periodical CSI-RS measurement report is performed. EUTRAN configures value TRUE only if measDS-Config is configured in the associated measObject with one or more CSI-RS resources. si-RequestForHO +The field applies to the reportCGI functionality, and when the field is included, the UE is allowed to use autonomous gaps in acquiring system information from the neighbour cell, applies a different value for T321, and includes different fields in the measurement report. ThresholdEUTRA +For RSRP: RSRP based threshold for event evaluation. The actual value is IE value – 140 dBm. +For RSRQ: RSRQ based threshold for event evaluation. The actual value is (IE value – 40)/2 dB. +For CSI-RSRP: CSI-RSRP based threshold for event evaluation. The actual value is IE value – 140 dBm. +EUTRAN configures the same threshold quantity for all the thresholds of an event. timeToTrigger +Time during which specific criteria for the event needs to be met in order to trigger a measurement report. triggerQuantity +The quantity used to evaluate the triggering condition for the event concerning CRS. EUTRAN sets the value according to the quantity of the ThresholdEUTRA for this event. The values rsrp and rsrq correspond to Reference Signal Received Power (RSRP) and Reference Signal Received Quality (RSRQ), see TS 36.214 [48]. triggerQuantityCSI-RS +The quantity used to evaluate the triggering condition for the event concerning CSI-RS. The value csi-RSRP corresponds to CSI Reference Signal Received Power (CSI-RSRP), see TS 36.214 [48]. E-UTRAN configures value TRUE if and only if the measurement reporting event concerns CSI-RS. ue-RxTxTimeDiffPeriodical +If this field is present, the UE shall perform UE Rx-Tx time difference measurement reporting and ignore the fields triggerQuantity, reportQuantity and maxReportCells. If the field is present, the only applicable values for the corresponding triggerType and purpose are periodical and reportStrongestCells respectively. usePSCell +If this field is set to TRUE the UE shall use the PSCell instead of the PCell. E-UTRAN configures value TRUE only TRUE only for events A3 and A5, see 5.5.4.4 and 5.5.4.6. useT312 +If value TRUE is configured, the UE shall use the timer T312 with the value t312 as specified in the corresponding measObject. If the corresponding measObject does not include the timer T312 then the timer T312 is considered as not configured. E-UTRAN configures value TRUE only if triggerType is set to event. +Conditional presence Explanation reportCGI The field is optional, need OR, in case purpose is included and set to reportCGI; otherwise the field is not present and the UE shall delete any existing value for this field. +– ReportConfigId +The IE ReportConfigId is used to identify a measurement reporting configuration. +ReportConfigId information element +-- ASN1START + +ReportConfigId ::= INTEGER (1..maxReportConfigId) + +-- ASN1STOP + +– ReportConfigInterRAT +The IE ReportConfigInterRAT specifies criteria for triggering of an inter-RAT measurement reporting event. The inter-RAT measurement reporting events are labelled BN with N equal to 1, 2 and so on. +Event B1: Neighbour becomes better than absolute threshold; +Event B2: PCell becomes worse than absolute threshold1 AND Neighbour becomes better than another absolute threshold2. +The b1 and b2 event thresholds for CDMA2000 are the CDMA2000 pilot detection thresholds are expressed as an unsigned binary number equal to [-2 x 10 log 10 Ec/Io] in units of 0.5dB, see C.S0005 [25] for details. +ReportConfigInterRAT information element +-- ASN1START + +ReportConfigInterRAT ::= SEQUENCE { + triggerType CHOICE { + event SEQUENCE { + eventId CHOICE { + eventB1 SEQUENCE { + b1-Threshold CHOICE { + b1-ThresholdUTRA ThresholdUTRA, + b1-ThresholdGERAN ThresholdGERAN, + b1-ThresholdCDMA2000 ThresholdCDMA2000 + } + }, + eventB2 SEQUENCE { + b2-Threshold1 ThresholdEUTRA, + b2-Threshold2 CHOICE { + b2-Threshold2UTRA ThresholdUTRA, + b2-Threshold2GERAN ThresholdGERAN, + b2-Threshold2CDMA2000 ThresholdCDMA2000 + } + }, + ... + }, + hysteresis Hysteresis, + timeToTrigger TimeToTrigger + }, + periodical SEQUENCE { + purpose ENUMERATED { + reportStrongestCells, + reportStrongestCellsForSON, + reportCGI} + } + }, + maxReportCells INTEGER (1..maxCellReport), + reportInterval ReportInterval, + reportAmount ENUMERATED {r1, r2, r4, r8, r16, r32, r64, infinity}, + ..., + [[ si-RequestForHO-r9 ENUMERATED {setup} OPTIONAL -- Cond reportCGI + ]], + [[ reportQuantityUTRA-FDD-r10 ENUMERATED {both} OPTIONAL -- Need OR + ]], + [[ includeLocationInfo-r11 BOOLEAN OPTIONAL -- Need ON + ]], + [[ b2-Threshold1-v1250 CHOICE { + release NULL, + setup RSRQ-Range-v1250 + } OPTIONAL -- Need ON + ]] +} + +ThresholdUTRA ::= CHOICE{ + utra-RSCP INTEGER (-5..91), + utra-EcN0 INTEGER (0..49) +} + +ThresholdGERAN ::= INTEGER (0..63) + +ThresholdCDMA2000 ::= INTEGER (0..63) + +-- ASN1STOP + +ReportConfigInterRAT field descriptions bN-ThresholdM +Threshold to be used in inter RAT measurement report triggering condition for event number bN. If multiple thresholds are defined for event number bN, the thresholds are differentiated by M. eventId +Choice of inter-RAT event triggered reporting criteria. maxReportCells +Max number of cells, excluding the serving cell, to include in the measurement report. In case purpose is set to reportStrongestCellsForSON only value 1 applies. Purpose +reportStrongestCellsForSON applies only in case reportConfig is linked to a measObject set to measObjectUTRA or measObjectCDMA2000. reportAmount +Number of measurement reports applicable for triggerType event as well as for triggerType periodical. In case purpose is set to reportCGI or reportStrongestCellsForSON only value 1 applies. reportQuantityUTRA-FDD +The quantities to be included in the UTRA measurement report. The value both means that both the cpich RSCP and cpich EcN0 quantities are to be included in the measurement report. si-RequestForHO +The field applies to the reportCGI functionality, and when the field is included, the UE is allowed to use autonomous gaps in acquiring system information from the neighbour cell, applies a different value for T321, and includes different fields in the measurement report. ThresholdGERAN +The actual value is IE value – 110 dBm. ThresholdUTRA +utra-RSCP corresponds to CPICH_RSCP in TS 25.133 [29] for FDD and P-CCPCH_RSCP in TS 25.123 [30] for TDD. utra-EcN0 corresponds to CPICH_Ec/No in TS 25.133 [29] for FDD, and is not applicable for TDD. +For utra-RSCP: The actual value is IE value – 115 dBm. +For utra-EcN0: The actual value is (IE value – 49)/2 dB. timeToTrigger +Time during which specific criteria for the event needs to be met in order to trigger a measurement report. +Conditional presence Explanation reportCGI The field is optional, need OR, in case purpose is included and set to reportCGI; otherwise the field is not present and the UE shall delete any existing value for this field. +– ReportConfigToAddModList +The IE ReportConfigToAddModList concerns a list of reporting configurations to add or modify +ReportConfigToAddModList information element +-- ASN1START + +ReportConfigToAddModList ::= SEQUENCE (SIZE (1..maxReportConfigId)) OF ReportConfigToAddMod + +ReportConfigToAddMod ::= SEQUENCE { + reportConfigId ReportConfigId, + reportConfig CHOICE { + reportConfigEUTRA ReportConfigEUTRA, + reportConfigInterRAT ReportConfigInterRAT + } +} + + +-- ASN1STOP + +– ReportInterval +The ReportInterval indicates the interval between periodical reports. The ReportInterval is applicable if the UE performs periodical reporting (i.e. when reportAmount exceeds 1), for triggerType event as well as for triggerType periodical. Value ms120 corresponds with 120 ms, ms240 corresponds with 240 ms and so on, while value min1 corresponds with 1 min, min6 corresponds with 6 min and so on. +ReportInterval information element +-- ASN1START + +ReportInterval ::= ENUMERATED { + ms120, ms240, ms480, ms640, ms1024, ms2048, ms5120, ms10240, + min1, min6, min12, min30, min60, spare3, spare2, spare1} + +-- ASN1STOP + +– RSRP-Range +The IE RSRP-Range specifies the value range used in RSRP measurements and thresholds. Integer value for RSRP measurements according to mapping table in TS 36.133 [16]. +RSRP-Range information element +-- ASN1START + +RSRP-Range ::= INTEGER(0..97) + +RSRP-RangeSL-r12 ::= INTEGER(0..13) + +RSRP-RangeSL2-r12 ::= INTEGER(0..7) + +RSRP-RangeSL3-r12 ::= INTEGER(0..11) + +-- ASN1STOP + +RSRP-Range field descriptions RSRP-RangeSL +Value 0 corresponds to -infinity, value 1 to -115dBm, value 2 to -110dBm, and so on (i.e. in steps of 5dBm) until value 12, which corresponds to -60dBm, while value 13 corresponds to +infinity. RSRP-RangeSL2 +Value 0 corresponds to -infinity, value 1 to -110dBm, value 2 to -100dBm, and so on (i.e. in steps of 10dBm) until value 6, which corresponds to -60dBm, while value 7 corresponds to +infinity. RSRP-RangeSL3 +Value 0 corresponds to -110dBm, value 1 to -105dBm, value 2 to -100dBm, and so on (i.e. in steps of 5dBm) until value 10, which corresponds to -60dBm, while value 11 corresponds to +infinity. +– RSRQ-Range +The IE RSRQ-Range specifies the value range used in RSRQ measurements and thresholds. Integer value for RSRQ measurements is according to mapping table in TS 36.133 [16]. A given field using RSRQ-Range-v1250 shall only be signalled if the corresponding original field (using RSRQ-Range i.e. without suffix) is set to value 0 or 34. Only a UE indicating support of extendedRSRQ-LowerRange-r12 or rsrqOnAllSymbols-r12 may report RSRQ-Range-v1250, and this may be done without explicit configuration from the E-UTRAN. If received, the UE shall use the value indicated by the RSRQ-Range-v1250 and ignore the value signalled by RSRQ-Range (without the suffix). + +RSRQ-Range information element +-- ASN1START + +RSRQ-Range ::= INTEGER(0..34) + +RSRQ-Range-v1250 ::= INTEGER(-30..46) + + +-- ASN1STOP + +– RSRQ-Type +The IE RSRQ-Type specifies the RSRQ value type used in RSRQ measurements, see TS 36.214 [48]. +RSRQ-Type information element +-- ASN1START + +RSRQ-Type-r12 ::= SEQUENCE { + allSymbols-r12 BOOLEAN, + wideBand-r12 BOOLEAN +} + +-- ASN1STOP + +RSRQ-Type field descriptions allSymbols +Value TRUE indicates use of all OFDM symbols when performing RSRQ measurements. wideBand +Value TRUE indicates use of a wider bandwidth when performing RSRQ measurements. +– TimeToTrigger +The IE TimeToTrigger specifies the value range used for time to trigger parameter, which concerns the time during which specific criteria for the event needs to be met in order to trigger a measurement report. Value ms0 corresponds to 0 ms, ms40 corresponds to 40 ms, and so on. +TimeToTrigger information element +-- ASN1START + +TimeToTrigger ::= ENUMERATED { + ms0, ms40, ms64, ms80, ms100, ms128, ms160, ms256, + ms320, ms480, ms512, ms640, ms1024, ms1280, ms2560, + ms5120} + +-- ASN1STOP + +6.3.6 Other information elements +– AbsoluteTimeInfo +The IE AbsoluteTimeInfo indicates an absolute time in a format YY-MM-DD HH:MM:SS and using BCD encoding. The first/ leftmost bit of the bit string contains the most significant bit of the most significant digit of the year and so on. +AbsoluteTimeInfo information element +-- ASN1START + +AbsoluteTimeInfo-r10 ::= BIT STRING (SIZE (48)) + +-- ASN1STOP + +– AreaConfiguration +The AreaConfiguration indicates area for which UE is requested to perform measurement logging. If not configured, measurement logging is not restricted to specific cells or tracking areas but applies as long as the RPLMN is contained in plmn-IdentityList stored in VarLogMeasReport. +AreaConfiguration information element +-- ASN1START + +AreaConfiguration-r10 ::= CHOICE { + cellGlobalIdList-r10 CellGlobalIdList-r10, + trackingAreaCodeList-r10 TrackingAreaCodeList-r10 +} + +AreaConfiguration-v1130 ::= SEQUENCE { + trackingAreaCodeList-v1130 TrackingAreaCodeList-v1130 +} + +CellGlobalIdList-r10 ::= SEQUENCE (SIZE (1..32)) OF CellGlobalIdEUTRA + +TrackingAreaCodeList-r10 ::= SEQUENCE (SIZE (1..8)) OF TrackingAreaCode + +TrackingAreaCodeList-v1130 ::= SEQUENCE { + plmn-Identity-perTAC-List-r11 SEQUENCE (SIZE (1..8)) OF PLMN-Identity +} + +-- ASN1STOP + +AreaConfiguration field descriptions plmn-Identity-perTAC-List +Includes the PLMN identity for each of the TA codes included in trackingAreaCodeList. The PLMN identity listed first in plmn-Identity-perTAC-List corresponds with the TA code listed first in trackingAreaCodeList and so on. +– C-RNTI +The IE C-RNTI identifies a UE having a RRC connection within a cell. +C-RNTI information element +-- ASN1START + +C-RNTI ::= BIT STRING (SIZE (16)) + +-- ASN1STOP + +– DedicatedInfoCDMA2000 +The DedicatedInfoCDMA2000 is used to transfer UE specific CDMA2000 information between the network and the UE. The RRC layer is transparent for this information. +DedicatedInfoCDMA2000 information element +-- ASN1START + +DedicatedInfoCDMA2000 ::= OCTET STRING + +-- ASN1STOP + +– DedicatedInfoNAS +The IE DedicatedInfoNAS is used to transfer UE specific NAS layer information between the network and the UE. The RRC layer is transparent for this information. +DedicatedInfoNAS information element +-- ASN1START + +DedicatedInfoNAS ::= OCTET STRING + +-- ASN1STOP + +– FilterCoefficient +The IE FilterCoefficient specifies the measurement filtering coefficient. Value fc0 corresponds to k = 0, fc1 corresponds to k = 1, and so on. +FilterCoefficient information element +-- ASN1START + +FilterCoefficient ::= ENUMERATED { + fc0, fc1, fc2, fc3, fc4, fc5, + fc6, fc7, fc8, fc9, fc11, fc13, + fc15, fc17, fc19, spare1, ...} + +-- ASN1STOP + +– LoggingDuration +The LoggingDuration indicates the duration for which UE is requested to perform measurement logging. Value min10 corresponds to 10 minutes, value min20 corresponds to 20 minutes and so on. +LoggingDuration information element +-- ASN1START + +LoggingDuration-r10 ::= ENUMERATED { + min10, min20, min40, min60, min90, min120, spare2, spare1} + +-- ASN1STOP + +– LoggingInterval +The LoggingInterval indicates the periodicity for logging measurement results. Value ms1280 corresponds to 1.28s, value ms2560 corresponds to 2.56s and so on. +LoggingInterval information element +-- ASN1START + +LoggingInterval-r10 ::= ENUMERATED { + ms1280, ms2560, ms5120, ms10240, ms20480, + ms30720, ms40960, ms61440} + +-- ASN1STOP + +– MeasSubframePattern +The IE MeasSubframePattern is used to specify a subframe pattern. The first/leftmost bit corresponds to the subframe #0 of the radio frame satisfying SFN mod x = 0, where SFN is that of PCell and x is the size of the bit string divided by 10. "1" denotes that the corresponding subframe is used. +MeasSubframePattern information element +-- ASN1START + +MeasSubframePattern-r10 ::= CHOICE { + subframePatternFDD-r10 BIT STRING (SIZE (40)), + subframePatternTDD-r10 CHOICE { + subframeConfig1-5-r10 BIT STRING (SIZE (20)), + subframeConfig0-r10 BIT STRING (SIZE (70)), + subframeConfig6-r10 BIT STRING (SIZE (60)), + ... + }, + ... +} + +-- ASN1STOP + +– MMEC +The IE MMEC identifies an MME within the scope of an MME Group within a PLMN, see TS 23.003 [27]. +MMEC information element +-- ASN1START + +MMEC ::= BIT STRING (SIZE (8)) + +-- ASN1STOP + + +– NeighCellConfig +The IE NeighCellConfig is used to provide the information related to MBSFN and TDD UL/DL configuration of neighbour cells. +NeighCellConfig information element +-- ASN1START + +NeighCellConfig ::= BIT STRING (SIZE (2)) + +-- ASN1STOP + +NeighCellConfig field descriptions neighCellConfig +Provides information related to MBSFN and TDD UL/DL configuration of neighbour cells of this frequency +00: Not all neighbour cells have the same MBSFN subframe allocation as the serving cell on this frequency, if configured, and as the PCell otherwise +10: The MBSFN subframe allocations of all neighbour cells are identical to or subsets of that in the serving cell on this frequency, if configured, and of that in the PCell otherwise +01: No MBSFN subframes are present in all neighbour cells +11: Different UL/DL allocation in neighbouring cells for TDD compared to the serving cell on this frequency, if configured, and compared to the PCell otherwise +For TDD, 00, 10 and 01 are only used for same UL/DL allocation in neighbouring cells compared to the serving cell on this frequency, if configured, and compared to the PCell otherwise. +– OtherConfig +The IE OtherConfig contains configuration related to other configuration +OtherConfig information element +-- ASN1START + +OtherConfig-r9 ::= SEQUENCE { + reportProximityConfig-r9 ReportProximityConfig-r9 OPTIONAL, -- Need ON + ..., + [[ idc-Config-r11 IDC-Config-r11 OPTIONAL, -- Need ON + powerPrefIndicationConfig-r11 PowerPrefIndicationConfig-r11 OPTIONAL, -- Need ON + obtainLocationConfig-r11 ObtainLocationConfig-r11 OPTIONAL -- Need ON + ]] +} + +IDC-Config-r11 ::= SEQUENCE { + idc-Indication-r11 ENUMERATED {setup} OPTIONAL, -- Need OR + autonomousDenialParameters-r11 SEQUENCE { + autonomousDenialSubframes-r11 ENUMERATED {n2, n5, n10, n15, + n20, n30, spare2, spare1}, + autonomousDenialValidity-r11 ENUMERATED { + sf200, sf500, sf1000, sf2000, + spare4, spare3, spare2, spare1} + } OPTIONAL, -- Need OR + ... +} + +ObtainLocationConfig-r11 ::= SEQUENCE { + obtainLocation-r11 ENUMERATED {setup} OPTIONAL -- Need OR +} + +PowerPrefIndicationConfig-r11 ::= CHOICE{ + release NULL, + setup SEQUENCE{ + powerPrefIndicationTimer-r11 ENUMERATED {s0, s0dot5, s1, s2, s5, s10, s20, + s30, s60, s90, s120, s300, s600, spare3, + spare2, spare1} + } +} + +ReportProximityConfig-r9 ::= SEQUENCE { + proximityIndicationEUTRA-r9 ENUMERATED {enabled} OPTIONAL, -- Need OR + proximityIndicationUTRA-r9 ENUMERATED {enabled} OPTIONAL -- Need OR +} + +-- ASN1STOP + +OtherConfig field descriptions autonomousDenialSubframes +Indicates the maximum number of the UL subframes for which the UE is allowed to deny any UL transmission. Value n2 corresponds to 2 subframes, n5 to 5 subframes and so on. E-UTRAN does not configure autonomous denial for frequencies on which SCG cells are configured. autonomousDenialValidity +Indicates the validity period over which the UL autonomous denial subframes shall be counted. Value sf200 corresponds to 200 subframes, sf500 corresponds to 500 subframes and so on. idc-Indication +The field is used to indicate whether the UE is configured to initiate transmission of the InDeviceCoexIndication message to the network. obtainLocation +Requests the UE to attempt to have detailed location information available using GNSS. E-UTRAN configures the field only if includeLocationInfo is configured for one or more measurements. powerPrefIndicationTimer +Prohibit timer for Power Preference Indication reporting. Value in seconds. Value s0 means prohibit timer is set to 0 second or not set, value s0dot5 means prohibit timer is set to 0.5 second, value s1 means prohibit timer is set to 1 second and so on. reportProximityConfig +Indicates, for each of the applicable RATs (EUTRA, UTRA), whether or not proximity indication is enabled for CSG member cell(s) of the concerned RAT. Note. +NOTE: Enabling/ disabling of proximity indication includes enabling/ disabling of the related functionality e.g. autonomous search in connected mode. + +– RAND-CDMA2000 (1xRTT) +The RAND-CDMA2000 concerns a random value, generated by the eNB, to be passed to the CDMA2000 upper layers. +RAND-CDMA2000 information element +-- ASN1START + +RAND-CDMA2000 ::= BIT STRING (SIZE (32)) + +-- ASN1STOP + +– RAT-Type +The IE RAT-Type is used to indicate the radio access technology (RAT), including EUTRA, of the requested/ transferred UE capabilities. +RAT-Type information element +-- ASN1START + +RAT-Type ::= ENUMERATED { + eutra, utra, geran-cs, geran-ps, cdma2000-1XRTT, + spare3, spare2, spare1, ...} + +-- ASN1STOP + +– RRC-TransactionIdentifier +The IE RRC-TransactionIdentifier is used, together with the message type, for the identification of an RRC procedure (transaction). +RRC-TransactionIdentifier information element +-- ASN1START + +RRC-TransactionIdentifier ::= INTEGER (0..3) + +-- ASN1STOP + +– S-TMSI +The IE S-TMSI contains an S-Temporary Mobile Subscriber Identity, a temporary UE identity provided by the EPC which uniquely identifies the UE within the tracking area, see TS 23.003 [27]. +S-TMSI information element +-- ASN1START + +S-TMSI ::= SEQUENCE { + mmec MMEC, + m-TMSI BIT STRING (SIZE (32)) +} + +-- ASN1STOP + +S-TMSI field descriptions m-TMSI +The first/leftmost bit of the bit string contains the most significant bit of the M-TMSI. +– TraceReference +The TraceReference contains parameter Trace Reference as defined in TS 32.422 [58]. +TraceReference information element +-- ASN1START + +TraceReference-r10 ::= SEQUENCE { + plmn-Identity-r10 PLMN-Identity, + traceId-r10 OCTET STRING (SIZE (3)) +} + +-- ASN1STOP + +– UE-CapabilityRAT-ContainerList +The IE UE-CapabilityRAT-ContainerList contains list of containers, one for each RAT for which UE capabilities are transferred, if any. +UE-CapabilityRAT-ContainerList information element +-- ASN1START + +UE-CapabilityRAT-ContainerList ::=SEQUENCE (SIZE (0..maxRAT-Capabilities)) OF UE-CapabilityRAT-Container + +UE-CapabilityRAT-Container ::= SEQUENCE { + rat-Type RAT-Type, + ueCapabilityRAT-Container OCTET STRING +} + +-- ASN1STOP + +UECapabilityRAT-ContainerList field descriptions ueCapabilityRAT-Container +Container for the UE capabilities of the indicated RAT. The encoding is defined in the specification of each RAT: +For EUTRA: the encoding of UE capabilities is defined in IE UE-EUTRA-Capability. +For UTRA: the octet string contains the INTER RAT HANDOVER INFO message defined in TS 25.331 [19]. +For GERAN CS: the octet string contains the concatenated string of the Mobile Station Classmark 2 and Mobile Station Classmark 3. The first 5 octets correspond to Mobile Station Classmark 2 and the following octets correspond to Mobile Station Classmark 3. The Mobile Station Classmark 2 is formatted as 'TLV' and is coded in the same way as the Mobile Station Classmark 2 information element in TS 24.008 [49]. The first octet is the Mobile station classmark 2 IEI and its value shall be set to 33H. The second octet is the Length of mobile station classmark 2 and its value shall be set to 3. The octet 3 contains the first octet of the value part of the Mobile Station Classmark 2 information element, the octet 4 contains the second octet of the value part of the Mobile Station Classmark 2 information element and so on. For each of these octets, the first/ leftmost/ most significant bit of the octet contains b8 of the corresponding octet of the Mobile Station Classmark 2. The Mobile Station Classmark 3 is formatted as 'V' and is coded in the same way as the value part in the Mobile station classmark 3 information element in TS 24.008 [49]. The sixth octet of this octet string contains octet 1 of the value part of Mobile station classmark 3, the seventh of octet of this octet string contains octet 2 of the value part of Mobile station classmark 3 and so on. Note. +For GERAN PS: the encoding of UE capabilities is formatted as 'V' and is coded in the same way as the value part in the MS Radio Access Capability information element in TS 24.008 [49]. +For CDMA2000-1XRTT: the octet string contains the A21 Mobile Subscription Information and the encoding of this is defined in A.S0008 [33]. The A21 Mobile Subscription Information contains the supported CDMA2000 1xRTT band class and band sub-class information. NOTE: The value part is specified by means of CSN.1, which encoding results in a bit string, to which final padding may be appended up to the next octet boundary TS 24.008 [49]. The first/ leftmost bit of the CSN.1 bit string is placed in the first/ leftmost/ most significant bit of the first octet. This continues until the last bit of the CSN.1 bit string, which is placed in the last/ rightmost/ least significant bit of the last octet. +– UE-EUTRA-Capability +The IE UE-EUTRA-Capability is used to convey the E-UTRA UE Radio Access Capability Parameters, see TS 36.306 [5], and the Feature Group Indicators for mandatory features (defined in Annexes B.1 and C.1) to the network. The IE UE-EUTRA-Capability is transferred in E-UTRA or in another RAT. +UE-EUTRA-Capability information element +-- ASN1START + +UE-EUTRA-Capability ::= SEQUENCE { + accessStratumRelease AccessStratumRelease, + ue-Category INTEGER (1..5), + pdcp-Parameters PDCP-Parameters, + phyLayerParameters PhyLayerParameters, + rf-Parameters RF-Parameters, + measParameters MeasParameters, + featureGroupIndicators BIT STRING (SIZE (32)) OPTIONAL, + interRAT-Parameters SEQUENCE { + utraFDD IRAT-ParametersUTRA-FDD OPTIONAL, + utraTDD128 IRAT-ParametersUTRA-TDD128 OPTIONAL, + utraTDD384 IRAT-ParametersUTRA-TDD384 OPTIONAL, + utraTDD768 IRAT-ParametersUTRA-TDD768 OPTIONAL, + geran IRAT-ParametersGERAN OPTIONAL, + cdma2000-HRPD IRAT-ParametersCDMA2000-HRPD OPTIONAL, + cdma2000-1xRTT IRAT-ParametersCDMA2000-1XRTT OPTIONAL + }, + nonCriticalExtension UE-EUTRA-Capability-v920-IEs OPTIONAL +} + +-- Late non critical extensions +UE-EUTRA-Capability-v9a0-IEs ::= SEQUENCE { + featureGroupIndRel9Add-r9 BIT STRING (SIZE (32)) OPTIONAL, + fdd-Add-UE-EUTRA-Capabilities-r9 UE-EUTRA-CapabilityAddXDD-Mode-r9 OPTIONAL, + tdd-Add-UE-EUTRA-Capabilities-r9 UE-EUTRA-CapabilityAddXDD-Mode-r9 OPTIONAL, + nonCriticalExtension UE-EUTRA-Capability-v9c0-IEs OPTIONAL +} + +UE-EUTRA-Capability-v9c0-IEs ::= SEQUENCE { + interRAT-ParametersUTRA-v9c0 IRAT-ParametersUTRA-v9c0 OPTIONAL, + nonCriticalExtension UE-EUTRA-Capability-v9d0-IEs OPTIONAL +} + +UE-EUTRA-Capability-v9d0-IEs ::= SEQUENCE { + phyLayerParameters-v9d0 PhyLayerParameters-v9d0 OPTIONAL, + nonCriticalExtension UE-EUTRA-Capability-v9e0-IEs OPTIONAL +} + +UE-EUTRA-Capability-v9e0-IEs ::= SEQUENCE { + rf-Parameters-v9e0 RF-Parameters-v9e0 OPTIONAL, + nonCriticalExtension UE-EUTRA-Capability-v9h0-IEs OPTIONAL +} + +UE-EUTRA-Capability-v9h0-IEs ::= SEQUENCE { + interRAT-ParametersUTRA-v9h0 IRAT-ParametersUTRA-v9h0 OPTIONAL, + -- Following field is only to be used for late REL-9 extensions + lateNonCriticalExtension OCTET STRING OPTIONAL, + nonCriticalExtension UE-EUTRA-Capability-v10c0-IEs OPTIONAL +} + +UE-EUTRA-Capability-v10c0-IEs ::= SEQUENCE { + otdoa-PositioningCapabilities-r10 OTDOA-PositioningCapabilities-r10 OPTIONAL, + nonCriticalExtension UE-EUTRA-Capability-v10f0-IEs OPTIONAL +} + +UE-EUTRA-Capability-v10f0-IEs ::= SEQUENCE { + rf-Parameters-v10f0 RF-Parameters-v10f0 OPTIONAL, + -- Following field is only to be used for late REL-10 extensions + nonCriticalExtension SEQUENCE {} OPTIONAL +} + +-- Regular non critical extensions +UE-EUTRA-Capability-v920-IEs ::= SEQUENCE { + phyLayerParameters-v920 PhyLayerParameters-v920, + interRAT-ParametersGERAN-v920 IRAT-ParametersGERAN-v920, + interRAT-ParametersUTRA-v920 IRAT-ParametersUTRA-v920 OPTIONAL, + interRAT-ParametersCDMA2000-v920 IRAT-ParametersCDMA2000-1XRTT-v920 OPTIONAL, + deviceType-r9 ENUMERATED {noBenFromBatConsumpOpt} OPTIONAL, + csg-ProximityIndicationParameters-r9 CSG-ProximityIndicationParameters-r9, + neighCellSI-AcquisitionParameters-r9 NeighCellSI-AcquisitionParameters-r9, + son-Parameters-r9 SON-Parameters-r9, + nonCriticalExtension UE-EUTRA-Capability-v940-IEs OPTIONAL +} + +UE-EUTRA-Capability-v940-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING (CONTAINING UE-EUTRA-Capability-v9a0-IEs) + OPTIONAL, + nonCriticalExtension UE-EUTRA-Capability-v1020-IEs OPTIONAL +} + +UE-EUTRA-Capability-v1020-IEs ::= SEQUENCE { + ue-Category-v1020 INTEGER (6..8) OPTIONAL, + phyLayerParameters-v1020 PhyLayerParameters-v1020 OPTIONAL, + rf-Parameters-v1020 RF-Parameters-v1020 OPTIONAL, + measParameters-v1020 MeasParameters-v1020 OPTIONAL, + featureGroupIndRel10-r10 BIT STRING (SIZE (32)) OPTIONAL, + interRAT-ParametersCDMA2000-v1020 IRAT-ParametersCDMA2000-1XRTT-v1020 OPTIONAL, + ue-BasedNetwPerfMeasParameters-r10 UE-BasedNetwPerfMeasParameters-r10 OPTIONAL, + interRAT-ParametersUTRA-TDD-v1020 IRAT-ParametersUTRA-TDD-v1020 OPTIONAL, + nonCriticalExtension UE-EUTRA-Capability-v1060-IEs OPTIONAL +} + +UE-EUTRA-Capability-v1060-IEs ::= SEQUENCE { + fdd-Add-UE-EUTRA-Capabilities-v1060 UE-EUTRA-CapabilityAddXDD-Mode-v1060 OPTIONAL, + tdd-Add-UE-EUTRA-Capabilities-v1060 UE-EUTRA-CapabilityAddXDD-Mode-v1060 OPTIONAL, + rf-Parameters-v1060 RF-Parameters-v1060 OPTIONAL, + nonCriticalExtension UE-EUTRA-Capability-v1090-IEs OPTIONAL +} + +UE-EUTRA-Capability-v1090-IEs ::= SEQUENCE { + rf-Parameters-v1090 RF-Parameters-v1090 OPTIONAL, + nonCriticalExtension UE-EUTRA-Capability-v1130-IEs OPTIONAL +} + +UE-EUTRA-Capability-v1130-IEs ::= SEQUENCE { + pdcp-Parameters-v1130 PDCP-Parameters-v1130, + phyLayerParameters-v1130 PhyLayerParameters-v1130 OPTIONAL, + rf-Parameters-v1130 RF-Parameters-v1130, + measParameters-v1130 MeasParameters-v1130, + interRAT-ParametersCDMA2000-v1130 IRAT-ParametersCDMA2000-v1130, + otherParameters-r11 Other-Parameters-r11, + fdd-Add-UE-EUTRA-Capabilities-v1130 UE-EUTRA-CapabilityAddXDD-Mode-v1130 OPTIONAL, + tdd-Add-UE-EUTRA-Capabilities-v1130 UE-EUTRA-CapabilityAddXDD-Mode-v1130 OPTIONAL, + nonCriticalExtension UE-EUTRA-Capability-v1170-IEs OPTIONAL +} + +UE-EUTRA-Capability-v1170-IEs ::= SEQUENCE { + phyLayerParameters-v1170 PhyLayerParameters-v1170 OPTIONAL, + ue-Category-v1170 INTEGER (9..10) OPTIONAL, + nonCriticalExtension UE-EUTRA-Capability-v1180-IEs OPTIONAL +} + +UE-EUTRA-Capability-v1180-IEs ::= SEQUENCE { + rf-Parameters-v1180 RF-Parameters-v1180 OPTIONAL, + mbms-Parameters-r11 MBMS-Parameters-r11 OPTIONAL, + fdd-Add-UE-EUTRA-Capabilities-v1180 UE-EUTRA-CapabilityAddXDD-Mode-v1180 OPTIONAL, + tdd-Add-UE-EUTRA-Capabilities-v1180 UE-EUTRA-CapabilityAddXDD-Mode-v1180 OPTIONAL, + nonCriticalExtension UE-EUTRA-Capability-v11a0-IEs OPTIONAL +} + +UE-EUTRA-Capability-v11a0-IEs ::= SEQUENCE { + ue-Category-v11a0 INTEGER (11..12) OPTIONAL, + measParameters-v11a0 MeasParameters-v11a0 OPTIONAL, + nonCriticalExtension UE-EUTRA-Capability-v1250-IEs OPTIONAL +} + +UE-EUTRA-Capability-v1250-IEs ::= SEQUENCE { + phyLayerParameters-v1250 PhyLayerParameters-v1250 OPTIONAL, + rf-Parameters-v1250 RF-Parameters-v1250 OPTIONAL, + rlc-Parameters-r12 RLC-Parameters-r12 OPTIONAL, + ue-BasedNetwPerfMeasParameters-v1250 UE-BasedNetwPerfMeasParameters-v1250 OPTIONAL, + ue-CategoryDL-r12 INTEGER (0..14) OPTIONAL, + ue-CategoryUL-r12 INTEGER (0..13) OPTIONAL, + wlan-IW-Parameters-r12 WLAN-IW-Parameters-r12 OPTIONAL, + measParameters-v1250 MeasParameters-v1250 OPTIONAL, + dc-Parameters-r12 DC-Parameters-r12 OPTIONAL, + mbms-Parameters-v1250 MBMS-Parameters-v1250 OPTIONAL, + mac-Parameters-r12 MAC-Parameters-r12 OPTIONAL, + fdd-Add-UE-EUTRA-Capabilities-v1250 UE-EUTRA-CapabilityAddXDD-Mode-v1250 OPTIONAL, + tdd-Add-UE-EUTRA-Capabilities-v1250 UE-EUTRA-CapabilityAddXDD-Mode-v1250 OPTIONAL, + sl-Parameters-r12 SL-Parameters-r12 OPTIONAL, + nonCriticalExtension UE-EUTRA-Capability-v1260-IEs OPTIONAL +} + +UE-EUTRA-Capability-v1260-IEs ::= SEQUENCE { + ue-CategoryDL-v1260 INTEGER (15..16) OPTIONAL, + nonCriticalExtension SEQUENCE {} OPTIONAL +} + +UE-EUTRA-CapabilityAddXDD-Mode-r9 ::= SEQUENCE { + phyLayerParameters-r9 PhyLayerParameters OPTIONAL, + featureGroupIndicators-r9 BIT STRING (SIZE (32)) OPTIONAL, + featureGroupIndRel9Add-r9 BIT STRING (SIZE (32)) OPTIONAL, + interRAT-ParametersGERAN-r9 IRAT-ParametersGERAN OPTIONAL, + interRAT-ParametersUTRA-r9 IRAT-ParametersUTRA-v920 OPTIONAL, + interRAT-ParametersCDMA2000-r9 IRAT-ParametersCDMA2000-1XRTT-v920 OPTIONAL, + neighCellSI-AcquisitionParameters-r9 NeighCellSI-AcquisitionParameters-r9 OPTIONAL, + ... +} + +UE-EUTRA-CapabilityAddXDD-Mode-v1060 ::= SEQUENCE { + phyLayerParameters-v1060 PhyLayerParameters-v1020 OPTIONAL, + featureGroupIndRel10-v1060 BIT STRING (SIZE (32)) OPTIONAL, + interRAT-ParametersCDMA2000-v1060 IRAT-ParametersCDMA2000-1XRTT-v1020 OPTIONAL, + interRAT-ParametersUTRA-TDD-v1060 IRAT-ParametersUTRA-TDD-v1020 OPTIONAL, + ..., + [[ otdoa-PositioningCapabilities-r10 OTDOA-PositioningCapabilities-r10 OPTIONAL + ]] +} + +UE-EUTRA-CapabilityAddXDD-Mode-v1130 ::= SEQUENCE { + phyLayerParameters-v1130 PhyLayerParameters-v1130 OPTIONAL, + measParameters-v1130 MeasParameters-v1130 OPTIONAL, + otherParameters-r11 Other-Parameters-r11 OPTIONAL, + ... +} + +UE-EUTRA-CapabilityAddXDD-Mode-v1180 ::= SEQUENCE { + mbms-Parameters-r11 MBMS-Parameters-r11 +} + +UE-EUTRA-CapabilityAddXDD-Mode-v1250 ::= SEQUENCE { + phyLayerParameters-v1250 PhyLayerParameters-v1250 OPTIONAL, + measParameters-v1250 MeasParameters-v1250 OPTIONAL +} + +AccessStratumRelease ::= ENUMERATED { + rel8, rel9, rel10, rel11, rel12, spare3, + spare2, spare1, ...} + +DC-Parameters-r12 ::= SEQUENCE { + drb-TypeSplit-r12 ENUMERATED {supported} OPTIONAL, + drb-TypeSCG-r12 ENUMERATED {supported} OPTIONAL +} + +MAC-Parameters-r12 ::= SEQUENCE { + logicalChannelSR-ProhibitTimer-r12 ENUMERATED {supported} OPTIONAL, + longDRX-Command-r12 ENUMERATED {supported} OPTIONAL +} + +RLC-Parameters-r12 ::= SEQUENCE { + extended-RLC-LI-Field-r12 ENUMERATED {supported} +} + +PDCP-Parameters ::= SEQUENCE { + supportedROHC-Profiles SEQUENCE { + profile0x0001 BOOLEAN, + profile0x0002 BOOLEAN, + profile0x0003 BOOLEAN, + profile0x0004 BOOLEAN, + profile0x0006 BOOLEAN, + profile0x0101 BOOLEAN, + profile0x0102 BOOLEAN, + profile0x0103 BOOLEAN, + profile0x0104 BOOLEAN + }, + maxNumberROHC-ContextSessions ENUMERATED { + cs2, cs4, cs8, cs12, cs16, cs24, cs32, + cs48, cs64, cs128, cs256, cs512, cs1024, + cs16384, spare2, spare1} DEFAULT cs16, + ... +} + +PDCP-Parameters-v1130 ::= SEQUENCE { + pdcp-SN-Extension-r11 ENUMERATED {supported} OPTIONAL, + supportRohcContextContinue-r11 ENUMERATED {supported} OPTIONAL +} + +PhyLayerParameters ::= SEQUENCE { + ue-TxAntennaSelectionSupported BOOLEAN, + ue-SpecificRefSigsSupported BOOLEAN +} + +PhyLayerParameters-v920 ::= SEQUENCE { + enhancedDualLayerFDD-r9 ENUMERATED {supported} OPTIONAL, + enhancedDualLayerTDD-r9 ENUMERATED {supported} OPTIONAL +} + +PhyLayerParameters-v9d0 ::= SEQUENCE { + tm5-FDD-r9 ENUMERATED {supported} OPTIONAL, + tm5-TDD-r9 ENUMERATED {supported} OPTIONAL +} + +PhyLayerParameters-v1020 ::= SEQUENCE { + twoAntennaPortsForPUCCH-r10 ENUMERATED {supported} OPTIONAL, + tm9-With-8Tx-FDD-r10 ENUMERATED {supported} OPTIONAL, + pmi-Disabling-r10 ENUMERATED {supported} OPTIONAL, + crossCarrierScheduling-r10 ENUMERATED {supported} OPTIONAL, + simultaneousPUCCH-PUSCH-r10 ENUMERATED {supported} OPTIONAL, + multiClusterPUSCH-WithinCC-r10 ENUMERATED {supported} OPTIONAL, + nonContiguousUL-RA-WithinCC-List-r10 NonContiguousUL-RA-WithinCC-List-r10 OPTIONAL +} + +PhyLayerParameters-v1130 ::= SEQUENCE { + crs-InterfHandl-r11 ENUMERATED {supported} OPTIONAL, + ePDCCH-r11 ENUMERATED {supported} OPTIONAL, + multiACK-CSI-Reporting-r11 ENUMERATED {supported} OPTIONAL, + ss-CCH-InterfHandl-r11 ENUMERATED {supported} OPTIONAL, + tdd-SpecialSubframe-r11 ENUMERATED {supported} OPTIONAL, + txDiv-PUCCH1b-ChSelect-r11 ENUMERATED {supported} OPTIONAL, + ul-CoMP-r11 ENUMERATED {supported} OPTIONAL +} + +PhyLayerParameters-v1170 ::= SEQUENCE { + interBandTDD-CA-WithDifferentConfig-r11 BIT STRING (SIZE (2)) OPTIONAL +} + +PhyLayerParameters-v1250 ::= SEQUENCE { + e-HARQ-Pattern-FDD-r12 ENUMERATED {supported} OPTIONAL, + enhanced-4TxCodebook-r12 ENUMERATED {supported} OPTIONAL, + tdd-FDD-CA-PCellDuplex-r12 BIT STRING (SIZE (2)) OPTIONAL, + phy-TDD-ReConfig-TDD-PCell-r12 ENUMERATED {supported} OPTIONAL, + phy-TDD-ReConfig-FDD-PCell-r12 ENUMERATED {supported} OPTIONAL, + pusch-FeedbackMode-r12 ENUMERATED {supported} OPTIONAL, + pusch-SRS-PowerControl-SubframeSet-r12 ENUMERATED {supported} OPTIONAL, + csi-SubframeSet-r12 ENUMERATED {supported} OPTIONAL, + noResourceRestrictionForTTIBundling-r12 ENUMERATED {supported} OPTIONAL, + discoverySignalsInDeactSCell-r12 ENUMERATED {supported} OPTIONAL, + naics-Capability-List-r12 NAICS-Capability-List-r12 OPTIONAL +} + + +NonContiguousUL-RA-WithinCC-List-r10 ::= SEQUENCE (SIZE (1..maxBands)) OF NonContiguousUL-RA-WithinCC-r10 + +NonContiguousUL-RA-WithinCC-r10 ::= SEQUENCE { + nonContiguousUL-RA-WithinCC-Info-r10 ENUMERATED {supported} OPTIONAL +} + +RF-Parameters ::= SEQUENCE { + supportedBandListEUTRA SupportedBandListEUTRA +} + +RF-Parameters-v9e0 ::= SEQUENCE { + supportedBandListEUTRA-v9e0 SupportedBandListEUTRA-v9e0 OPTIONAL +} + +RF-Parameters-v1020 ::= SEQUENCE { + supportedBandCombination-r10 SupportedBandCombination-r10 +} + +RF-Parameters-v1060 ::= SEQUENCE { + supportedBandCombinationExt-r10 SupportedBandCombinationExt-r10 +} + +RF-Parameters-v1090 ::= SEQUENCE { + supportedBandCombination-v1090 SupportedBandCombination-v1090 OPTIONAL +} + +RF-Parameters-v10f0 ::= SEQUENCE { + modifiedMPR-Behavior-r10 BIT STRING (SIZE (32)) OPTIONAL +} + +RF-Parameters-v1130 ::= SEQUENCE { + supportedBandCombination-v1130 SupportedBandCombination-v1130 OPTIONAL +} + +RF-Parameters-v1180 ::= SEQUENCE { + freqBandRetrieval-r11 ENUMERATED {supported} OPTIONAL, + requestedBands-r11 SEQUENCE (SIZE (1.. maxBands)) OF FreqBandIndicator-r11 OPTIONAL, + supportedBandCombinationAdd-r11 SupportedBandCombinationAdd-r11 OPTIONAL +} + +RF-Parameters-v1250 ::= SEQUENCE { + supportedBandListEUTRA-v1250 SupportedBandListEUTRA-v1250 OPTIONAL, + supportedBandCombination-v1250 SupportedBandCombination-v1250 OPTIONAL, + supportedBandCombinationAdd-v1250 SupportedBandCombinationAdd-v1250 OPTIONAL, + freqBandPriorityAdjustment-r12 ENUMERATED {supported} OPTIONAL +} + +SupportedBandCombination-r10 ::= SEQUENCE (SIZE (1..maxBandComb-r10)) OF BandCombinationParameters-r10 + +SupportedBandCombinationExt-r10 ::= SEQUENCE (SIZE (1..maxBandComb-r10)) OF BandCombinationParametersExt-r10 + +SupportedBandCombination-v1090 ::= SEQUENCE (SIZE (1..maxBandComb-r10)) OF BandCombinationParameters-v1090 + +SupportedBandCombination-v1130 ::= SEQUENCE (SIZE (1..maxBandComb-r10)) OF BandCombinationParameters-v1130 + +SupportedBandCombination-v1250 ::= SEQUENCE (SIZE (1..maxBandComb-r10)) OF BandCombinationParameters-v1250 + +SupportedBandCombinationAdd-r11 ::= SEQUENCE (SIZE (1..maxBandComb-r11)) OF BandCombinationParameters-r11 + +SupportedBandCombinationAdd-v1250 ::= SEQUENCE (SIZE (1..maxBandComb-r11)) OF BandCombinationParameters-v1250 + +BandCombinationParameters-r10 ::= SEQUENCE (SIZE (1..maxSimultaneousBands-r10)) OF BandParameters-r10 + +BandCombinationParametersExt-r10 ::= SEQUENCE { + supportedBandwidthCombinationSet-r10 SupportedBandwidthCombinationSet-r10 OPTIONAL +} + +BandCombinationParameters-v1090 ::= SEQUENCE (SIZE (1..maxSimultaneousBands-r10)) OF BandParameters-v1090 + +BandCombinationParameters-v1130 ::= SEQUENCE { + multipleTimingAdvance-r11 ENUMERATED {supported} OPTIONAL, + simultaneousRx-Tx-r11 ENUMERATED {supported} OPTIONAL, + bandParameterList-r11 SEQUENCE (SIZE (1..maxSimultaneousBands-r10)) OF BandParameters-v1130 OPTIONAL, + ... +} + +BandCombinationParameters-r11 ::= SEQUENCE { + bandParameterList-r11 SEQUENCE (SIZE (1..maxSimultaneousBands-r10)) OF + BandParameters-r11, + supportedBandwidthCombinationSet-r11 SupportedBandwidthCombinationSet-r10 OPTIONAL, + multipleTimingAdvance-r11 ENUMERATED {supported} OPTIONAL, + simultaneousRx-Tx-r11 ENUMERATED {supported} OPTIONAL, + bandInfoEUTRA-r11 BandInfoEUTRA, + ... +} + +BandCombinationParameters-v1250::= SEQUENCE { + dc-Support-r12 SEQUENCE { + asynchronous-r12 ENUMERATED {supported} OPTIONAL, + supportedCellGrouping-r12 CHOICE { + threeEntries-r12 BIT STRING (SIZE(3)), + fourEntries-r12 BIT STRING (SIZE(7)), + fiveEntries-r12 BIT STRING (SIZE(15)) + } OPTIONAL + } OPTIONAL, + supportedNAICS-2CRS-AP-r12 BIT STRING (SIZE (1..maxNAICS-Entries-r12)) OPTIONAL, + commSupportedBandsPerBC-r12 BIT STRING (SIZE (1.. maxBands)) OPTIONAL, + ... +} + + +SupportedBandwidthCombinationSet-r10 ::= BIT STRING (SIZE (1..maxBandwidthCombSet-r10)) + +BandParameters-r10 ::= SEQUENCE { + bandEUTRA-r10 FreqBandIndicator, + bandParametersUL-r10 BandParametersUL-r10 OPTIONAL, + bandParametersDL-r10 BandParametersDL-r10 OPTIONAL +} + +BandParameters-v1090 ::= SEQUENCE { + bandEUTRA-v1090 FreqBandIndicator-v9e0 OPTIONAL, + ... +} + +BandParameters-v1130 ::= SEQUENCE { + supportedCSI-Proc-r11 ENUMERATED {n1, n3, n4} +} + +BandParameters-r11 ::= SEQUENCE { + bandEUTRA-r11 FreqBandIndicator-r11, + bandParametersUL-r11 BandParametersUL-r10 OPTIONAL, + bandParametersDL-r11 BandParametersDL-r10 OPTIONAL, + supportedCSI-Proc-r11 ENUMERATED {n1, n3, n4} OPTIONAL +} + +BandParametersUL-r10 ::= SEQUENCE (SIZE (1..maxBandwidthClass-r10)) OF CA-MIMO-ParametersUL-r10 + +CA-MIMO-ParametersUL-r10 ::= SEQUENCE { + ca-BandwidthClassUL-r10 CA-BandwidthClass-r10, + supportedMIMO-CapabilityUL-r10 MIMO-CapabilityUL-r10 OPTIONAL +} + +BandParametersDL-r10 ::= SEQUENCE (SIZE (1..maxBandwidthClass-r10)) OF CA-MIMO-ParametersDL-r10 + +CA-MIMO-ParametersDL-r10 ::= SEQUENCE { + ca-BandwidthClassDL-r10 CA-BandwidthClass-r10, + supportedMIMO-CapabilityDL-r10 MIMO-CapabilityDL-r10 OPTIONAL +} + +CA-BandwidthClass-r10 ::= ENUMERATED {a, b, c, d, e, f, ...} + +MIMO-CapabilityUL-r10 ::= ENUMERATED {twoLayers, fourLayers} + +MIMO-CapabilityDL-r10 ::= ENUMERATED {twoLayers, fourLayers, eightLayers} + +SupportedBandListEUTRA ::= SEQUENCE (SIZE (1..maxBands)) OF SupportedBandEUTRA + +SupportedBandListEUTRA-v9e0::= SEQUENCE (SIZE (1..maxBands)) OF SupportedBandEUTRA-v9e0 + +SupportedBandListEUTRA-v1250 ::= SEQUENCE (SIZE (1..maxBands)) OF SupportedBandEUTRA-v1250 + +SupportedBandEUTRA ::= SEQUENCE { + bandEUTRA FreqBandIndicator, + halfDuplex BOOLEAN +} + +SupportedBandEUTRA-v9e0 ::= SEQUENCE { + bandEUTRA-v9e0 FreqBandIndicator-v9e0 OPTIONAL +} + +SupportedBandEUTRA-v1250 ::= SEQUENCE { + dl-256QAM-r12 ENUMERATED {supported} OPTIONAL, + ul-64QAM-r12 ENUMERATED {supported} OPTIONAL +} + +MeasParameters ::= SEQUENCE { + bandListEUTRA BandListEUTRA +} + +MeasParameters-v1020 ::= SEQUENCE { + bandCombinationListEUTRA-r10 BandCombinationListEUTRA-r10 +} + +MeasParameters-v1130 ::= SEQUENCE { + rsrqMeasWideband-r11 ENUMERATED {supported} OPTIONAL +} + +MeasParameters-v11a0 ::= SEQUENCE { + benefitsFromInterruption-r11 ENUMERATED {true} OPTIONAL +} + +MeasParameters-v1250 ::= SEQUENCE { + timerT312-r12 ENUMERATED {supported} OPTIONAL, + alternativeTimeToTrigger-r12 ENUMERATED {supported} OPTIONAL, + incMonEUTRA-r12 ENUMERATED {supported} OPTIONAL, + incMonUTRA-r12 ENUMERATED {supported} OPTIONAL, + extendedMaxMeasId-r12 ENUMERATED {supported} OPTIONAL, + extendedRSRQ-LowerRange-r12 ENUMERATED {supported} OPTIONAL, + rsrq-OnAllSymbols-r12 ENUMERATED {supported} OPTIONAL, + crs-DiscoverySignalsMeas-r12 ENUMERATED {supported} OPTIONAL, + csi-RS-DiscoverySignalsMeas-r12 ENUMERATED {supported} OPTIONAL +} + +BandListEUTRA ::= SEQUENCE (SIZE (1..maxBands)) OF BandInfoEUTRA + +BandCombinationListEUTRA-r10 ::= SEQUENCE (SIZE (1..maxBandComb-r10)) OF BandInfoEUTRA + +BandInfoEUTRA ::= SEQUENCE { + interFreqBandList InterFreqBandList, + interRAT-BandList InterRAT-BandList OPTIONAL +} + +InterFreqBandList ::= SEQUENCE (SIZE (1..maxBands)) OF InterFreqBandInfo + +InterFreqBandInfo ::= SEQUENCE { + interFreqNeedForGaps BOOLEAN +} + +InterRAT-BandList ::= SEQUENCE (SIZE (1..maxBands)) OF InterRAT-BandInfo + +InterRAT-BandInfo ::= SEQUENCE { + interRAT-NeedForGaps BOOLEAN +} + +IRAT-ParametersUTRA-FDD ::= SEQUENCE { + supportedBandListUTRA-FDD SupportedBandListUTRA-FDD +} + +IRAT-ParametersUTRA-v920 ::= SEQUENCE { + e-RedirectionUTRA-r9 ENUMERATED {supported} +} + +IRAT-ParametersUTRA-v9c0 ::= SEQUENCE { + voiceOverPS-HS-UTRA-FDD-r9 ENUMERATED {supported} OPTIONAL, + voiceOverPS-HS-UTRA-TDD128-r9 ENUMERATED {supported} OPTIONAL, + srvcc-FromUTRA-FDD-ToUTRA-FDD-r9 ENUMERATED {supported} OPTIONAL, + srvcc-FromUTRA-FDD-ToGERAN-r9 ENUMERATED {supported} OPTIONAL, + srvcc-FromUTRA-TDD128-ToUTRA-TDD128-r9 ENUMERATED {supported} OPTIONAL, + srvcc-FromUTRA-TDD128-ToGERAN-r9 ENUMERATED {supported} OPTIONAL +} + +IRAT-ParametersUTRA-v9h0 ::= SEQUENCE { + mfbi-UTRA-r9 ENUMERATED {supported} +} + +SupportedBandListUTRA-FDD ::= SEQUENCE (SIZE (1..maxBands)) OF SupportedBandUTRA-FDD + +SupportedBandUTRA-FDD ::= ENUMERATED { + bandI, bandII, bandIII, bandIV, bandV, bandVI, + bandVII, bandVIII, bandIX, bandX, bandXI, + bandXII, bandXIII, bandXIV, bandXV, bandXVI, ..., + bandXVII-8a0, bandXVIII-8a0, bandXIX-8a0, bandXX-8a0, + bandXXI-8a0, bandXXII-8a0, bandXXIII-8a0, bandXXIV-8a0, + bandXXV-8a0, bandXXVI-8a0, bandXXVII-8a0, bandXXVIII-8a0, + bandXXIX-8a0, bandXXX-8a0, bandXXXI-8a0, bandXXXII-8a0} + +IRAT-ParametersUTRA-TDD128 ::= SEQUENCE { + supportedBandListUTRA-TDD128 SupportedBandListUTRA-TDD128 +} + +SupportedBandListUTRA-TDD128 ::= SEQUENCE (SIZE (1..maxBands)) OF SupportedBandUTRA-TDD128 + +SupportedBandUTRA-TDD128 ::= ENUMERATED { + a, b, c, d, e, f, g, h, i, j, k, l, m, n, + o, p, ...} + +IRAT-ParametersUTRA-TDD384 ::= SEQUENCE { + supportedBandListUTRA-TDD384 SupportedBandListUTRA-TDD384 +} + +SupportedBandListUTRA-TDD384 ::= SEQUENCE (SIZE (1..maxBands)) OF SupportedBandUTRA-TDD384 + +SupportedBandUTRA-TDD384 ::= ENUMERATED { + a, b, c, d, e, f, g, h, i, j, k, l, m, n, + o, p, ...} + +IRAT-ParametersUTRA-TDD768 ::= SEQUENCE { + supportedBandListUTRA-TDD768 SupportedBandListUTRA-TDD768 +} + +SupportedBandListUTRA-TDD768 ::= SEQUENCE (SIZE (1..maxBands)) OF SupportedBandUTRA-TDD768 + +SupportedBandUTRA-TDD768 ::= ENUMERATED { + a, b, c, d, e, f, g, h, i, j, k, l, m, n, + o, p, ...} + +IRAT-ParametersUTRA-TDD-v1020 ::= SEQUENCE { + e-RedirectionUTRA-TDD-r10 ENUMERATED {supported} +} + +IRAT-ParametersGERAN ::= SEQUENCE { + supportedBandListGERAN SupportedBandListGERAN, + interRAT-PS-HO-ToGERAN BOOLEAN +} + +IRAT-ParametersGERAN-v920 ::= SEQUENCE { + dtm-r9 ENUMERATED {supported} OPTIONAL, + e-RedirectionGERAN-r9 ENUMERATED {supported} OPTIONAL +} + +SupportedBandListGERAN ::= SEQUENCE (SIZE (1..maxBands)) OF SupportedBandGERAN + +SupportedBandGERAN ::= ENUMERATED { + gsm450, gsm480, gsm710, gsm750, gsm810, gsm850, + gsm900P, gsm900E, gsm900R, gsm1800, gsm1900, + spare5, spare4, spare3, spare2, spare1, ...} + +IRAT-ParametersCDMA2000-HRPD ::= SEQUENCE { + supportedBandListHRPD SupportedBandListHRPD, + tx-ConfigHRPD ENUMERATED {single, dual}, + rx-ConfigHRPD ENUMERATED {single, dual} +} + +SupportedBandListHRPD ::= SEQUENCE (SIZE (1..maxCDMA-BandClass)) OF BandclassCDMA2000 + +IRAT-ParametersCDMA2000-1XRTT ::= SEQUENCE { + supportedBandList1XRTT SupportedBandList1XRTT, + tx-Config1XRTT ENUMERATED {single, dual}, + rx-Config1XRTT ENUMERATED {single, dual} +} + +IRAT-ParametersCDMA2000-1XRTT-v920 ::= SEQUENCE { + e-CSFB-1XRTT-r9 ENUMERATED {supported}, + e-CSFB-ConcPS-Mob1XRTT-r9 ENUMERATED {supported} OPTIONAL +} + +IRAT-ParametersCDMA2000-1XRTT-v1020 ::= SEQUENCE { + e-CSFB-dual-1XRTT-r10 ENUMERATED {supported} +} + +IRAT-ParametersCDMA2000-v1130 ::= SEQUENCE { + cdma2000-NW-Sharing-r11 ENUMERATED {supported} OPTIONAL +} + +SupportedBandList1XRTT ::= SEQUENCE (SIZE (1..maxCDMA-BandClass)) OF BandclassCDMA2000 + +CSG-ProximityIndicationParameters-r9 ::= SEQUENCE { + intraFreqProximityIndication-r9 ENUMERATED {supported} OPTIONAL, + interFreqProximityIndication-r9 ENUMERATED {supported} OPTIONAL, + utran-ProximityIndication-r9 ENUMERATED {supported} OPTIONAL +} + +NeighCellSI-AcquisitionParameters-r9 ::= SEQUENCE { + intraFreqSI-AcquisitionForHO-r9 ENUMERATED {supported} OPTIONAL, + interFreqSI-AcquisitionForHO-r9 ENUMERATED {supported} OPTIONAL, + utran-SI-AcquisitionForHO-r9 ENUMERATED {supported} OPTIONAL +} + +SON-Parameters-r9 ::= SEQUENCE { + rach-Report-r9 ENUMERATED {supported} OPTIONAL +} + +UE-BasedNetwPerfMeasParameters-r10 ::= SEQUENCE { + loggedMeasurementsIdle-r10 ENUMERATED {supported} OPTIONAL, + standaloneGNSS-Location-r10 ENUMERATED {supported} OPTIONAL +} + +UE-BasedNetwPerfMeasParameters-v1250 ::= SEQUENCE { + loggedMBSFNMeasurements-r12 ENUMERATED {supported} +} + +OTDOA-PositioningCapabilities-r10 ::= SEQUENCE { + otdoa-UE-Assisted-r10 ENUMERATED {supported}, + interFreqRSTD-Measurement-r10 ENUMERATED {supported} OPTIONAL +} + +Other-Parameters-r11 ::= SEQUENCE { + inDeviceCoexInd-r11 ENUMERATED {supported} OPTIONAL, + powerPrefInd-r11 ENUMERATED {supported} OPTIONAL, + ue-Rx-TxTimeDiffMeasurements-r11 ENUMERATED {supported} OPTIONAL +} + +MBMS-Parameters-r11 ::= SEQUENCE { + mbms-SCell-r11 ENUMERATED {supported} OPTIONAL, + mbms-NonServingCell-r11 ENUMERATED {supported} OPTIONAL +} + +MBMS-Parameters-v1250 ::= SEQUENCE { + mbms-AsyncDC-r12 ENUMERATED {supported} OPTIONAL +} + +WLAN-IW-Parameters-r12 ::= SEQUENCE { + wlan-IW-RAN-Rules-r12 ENUMERATED {supported} OPTIONAL, + wlan-IW-ANDSF-Policies-r12 ENUMERATED {supported} OPTIONAL +} + +NAICS-Capability-List-r12 ::= SEQUENCE (SIZE (1..maxNAICS-Entries-r12)) OF NAICS-Capability-Entry-r12 + + +NAICS-Capability-Entry-r12 ::= SEQUENCE { + numberOfNAICS-CapableCC-r12 INTEGER(1..5), + numberOfAggregatedPRB-r12 ENUMERATED { + n50, n75, n100, n125, n150, n175, + n200, n225, n250, n275, n300, n350, + n400, n450, n500, spare}, + ... +} + +SL-Parameters-r12 ::= SEQUENCE { + commSimultaneousTx-r12 ENUMERATED {supported} OPTIONAL, + commSupportedBands-r12 FreqBandIndicatorListEUTRA-r12 OPTIONAL, + discSupportedBands-r12 SupportedBandInfoList-r12 OPTIONAL, + discScheduledResourceAlloc-r12 ENUMERATED {supported} OPTIONAL, + disc-UE-SelectedResourceAlloc-r12 ENUMERATED {supported} OPTIONAL, + disc-SLSS-r12 ENUMERATED {supported} OPTIONAL, + discSupportedProc-r12 ENUMERATED {n50, n400} OPTIONAL +} + +SupportedBandInfoList-r12 ::= SEQUENCE (SIZE (1..maxBands)) OF SupportedBandInfo-r12 + +SupportedBandInfo-r12 ::= SEQUENCE { + support-r12 ENUMERATED {supported} OPTIONAL +} + +FreqBandIndicatorListEUTRA-r12 ::= SEQUENCE (SIZE (1..maxBands)) OF FreqBandIndicator-r11 + +-- ASN1STOP + + +UE-EUTRA-Capability field descriptions FDD/ TDD diff accessStratumRelease +Set to rel12 in this version of the specification. - alternativeTimeToTrigger +Indicates whether the UE supports alternativeTimeToTrigger. No bandCombinationListEUTRA +One entry corresponding to each supported band combination listed in the same order as in supportedBandCombination. - BandCombinationParameters-v1090 +If included, the UE shall include the same number of entries, and listed in the same order, as in BandCombinationParameters-r10. - BandCombinationParameters-v1130 +The field is applicable to each supported CA bandwidth class combination (i.e. CA configuration in TS 36.101 [42, Section 5.6A.1]) indicated in the corresponding band combination. If included, the UE shall include the same number of entries, and listed in the same order, as in BandCombinationParameters-r10. - bandEUTRA +EUTRA band as defined in TS 36.101 [42]. In case the UE includes bandEUTRA-v9e0 or bandEUTRA-v1090, the UE shall set the corresponding entry of bandEUTRA (i.e. without suffix) or bandEUTRA-r10 respectively to maxFBI. - bandListEUTRA +One entry corresponding to each supported EUTRA band listed in the same order as in supportedBandListEUTRA. - bandParametersUL, bandParametersDL +Indicates the supported parameters for the band. UE shall indicate parameters for only one CA uplink or downlink bandwidth class in a single band combination entry. - benefitsFromInterruption +Indicates whether the UE power consumption would benefit from being allowed to cause interruptions to serving cells when performing measurements of deactivated SCell carriers for measCycleSCell of less than 640ms, as specified in TS 36.133 [16]. No CA-BandwidthClass +The CA bandwidth class supported by the UE as defined in TS 36.101 [42, Table 5.6A-1]. +The UE explicitly includes all the supported CA bandwidth class combinations in the band combination signalling. Support for one CA bandwidth class does not implicitly indicate support for another CA bandwidth class. - cdma2000-NW-Sharing +Indicates whether the UE supports network sharing for CDMA2000. - commSimultaneousTx +Indicates whether the UE supports simultaneous transmission of EUTRA and sidelink direct communication (on different carriers) in all bands for which the UE indicated sidelink support in a band combination (using commSupportedBandsPerBC). - commSupportedBands +Indicates the bands on which the UE supports sidelink direct communication, by an independent list of bands i.e. separate from the list of supported E UTRA band, as indicated in supportedBandListEUTRA. - commSupportedBandsPerBC +Indicates, for a particular band combination, the bands on which the UE supports simultaneous reception of EUTRA and sidelink direct communication. If the UE indicates support simultaneous transmission (using commSimultaneousTx), it also indicates, for a particular band combination, the bands on which the UE supports simultaneous transmission of EUTRA and sidelink direct communication. The first bit refers to the first band included in commSupportedBands, with value 1 indicating sidelink is supported. - crossCarrierScheduling Yes crs-DiscoverySignalsMeas +Indicates whether the UE supports CRS based discovery signals measurement, and PDSCH/EPDCCH RE mapping with zero power CSI-RS configured for discovery signals. FFS crs-InterfHandl +Indicates whether the UE supports CRS interference handling. No csi-RS-DiscoverySignalsMeas +Indicates whether the UE supports CSI-RS based discovery signals measurement. If this field is included, the UE shall also include crs-DiscoverySignalsMeas. FFS csi-SubframeSet +Indicates whether the UE supports REL-12 DL CSI subframe set configuration, REL-12 DL CSI subframe set dependent CSI measurement/feedback, configuration of up to 2 CSI-IM resources for a CSI process with no more than 4 CSI-IM resources for all CSI processes of one frequency if the UE supports tm10, configuration of two ZP-CSI-RS for tm1 to tm9, PDSCH RE mapping with two ZP-CSI-RS configurations, and EPDCCH RE mapping with two ZP-CSI-RS configurations if the UE supports EPDCCH. This field is only applicable for UEs supporting TDD. - dc-Support +Including this field indicates that the UE supports synchronous DC and power control mode 1. Including this field for a band combination entry comprising of single band entry indicates that the UE supports intra-band contiguous DC. Including this field for a band combination entry comprising of two or more band entries, indicates that the UE supports DC for these bands and that the serving cells corresponding to a band entry shall belong to one cell group (i.e. MCG or SCG). Including field asynchronous indicates that the UE supports asynchronous DC and power control mode 2. Including this field for a TDD/FDD band combination indicates that the UE supports TDD/FDD DC for this band combination. - deviceType +UE may set the value to “noBenFromBatConsumpOpt” when it does not foresee to particularly benefit from NW-based battery consumption optimisation. Absence of this value means that the device does benefit from NW-based battery consumption optimisation. - discoverySignalsInDeactSCell +Indicates whether the UE supports the behaviour on DL signals and physical channels when SCell is deactivated and discovery signals measurement is configured as specified in TS 36.211 [17, 6.11A]. This field is included only if UE supports carrier aggregation and includes crs-DiscoverySignalsMeas. FFS discScheduledResourceAlloc +Indicates whether the UE supports transmission of discovery announcements based on network scheduled resource allocation. - disc-UE-SelectedResourceAlloc +Indicates whether the UE supports transmission of discovery announcements based on UE autonomous resource selection. - disc-SLSS +Indicates whether the UE supports Sidelink Synchronization Signal (SLSS) transmission and reception for sidelink direct discovery. - discSupportedBands +Indicates the bands on which the UE supports sidelink direct discovery. One entry corresponding to each supported E UTRA band, listed in the same order as in supportedBandListEUTRA. - discSupportedProc +Indicates the number of processes supported by the UE for sidelink direct discovery. - dl-256QAM +Indicates whether the UE supports 256QAM in DL on the band. - dtm +Indicates whether the UE supports DTM in GERAN. - e-CSFB-1XRTT +Indicates whether the UE supports enhanced CS fallback to CDMA2000 1xRTT or not. Yes e-CSFB-ConcPS-Mob1XRTT +Indicates whether the UE supports concurrent enhanced CS fallback to CDMA2000 1xRTT and PS handover/ redirection to CDMA2000 HRPD. Yes e-CSFB-dual-1XRTT +Indicates whether the UE supports enhanced CS fallback to CDMA2000 1xRTT for dual Rx/Tx configuration. This bit can only be set to supported if tx-Config1XRTT and rx-Config1XRTT are both set to dual. Yes e-HARQ-Pattern-FDD +Indicates whether the UE supports enhanced HARQ pattern for TTI bundling operation for FDD. - Enhanced-4TxCodebook +Indicates whether the UE supports enhanced 4Tx codebook. No enhancedDualLayerTDD +Indicates whether the UE supports enhanced dual layer (PDSCH transmission mode 8) for TDD or not. - ePDCCH +Indicates whether the UE can receive DCI on UE specific search space on Enhanced PDCCH. Yes e-RedirectionUTRA Yes e-RedirectionUTRA-TDD +Indicates whether the UE supports enhanced redirection to UTRA TDD to multiple carrier frequencies both with and without using related SIB provided by RRCConnectionRelease or not. Yes extendedMaxMeasId +Indicates whether the UE supports extended number of measurement identies as defined by maxMeasId-r12. No extended-RLC-LI-Field +Indicates whether the UE supports 15 bit RLC length indicator. - extendedRSRQ-LowerRange +Indicates whether the UE supports the extended RSRQ lower value range from -34dB to -19.5dB in measurement configuration and reporting as specified in TS 36.133 [16]. No featureGroupIndicators, featureGroupIndRel9Add, featureGroupIndRel10 +The definitions of the bits in the bit string are described in Annex B.1 (for featureGroupIndicators and featureGroupIndRel9Add) and in Annex C.1.(for featureGroupIndRel10) Yes freqBandPriorityAdjustment +Indicates whether the UE supports the prioritization of frequency bands in multiBandInfoList over the band in freqBandIndicator as defined by freqBandIndicatorPriority-r12. - freqBandRetrieval +Indicates whether the UE supports reception of requestedFrequencyBands. - halfDuplex +If halfDuplex is set to true, only half duplex operation is supported for the band, otherwise full duplex operation is supported. - incMonEUTRA +Indicates whether the UE supports increased number of E-UTRA carrier monitoring in RRC_IDLE and RRC_CONNECTED, as specified in TS 36.133 [16]. No incMonUTRA +Indicates whether the UE supports increased number of UTRA carrier monitoring in RRC_IDLE and RRC_CONNECTED, as specified in TS 36.133 [16]. No inDeviceCoexInd +Indicates whether the UE supports in-device coexistence indication as well as autonomous denial functionality. Yes interBandTDD-CA-WithDifferentConfig +Indicates whether the UE supports inter-band TDD carrier aggregation with different UL/DL configuration combinations. The first bit indicates UE supports the configuration combination of SCell DL subframes are a subset of PCell and PSCell by SIB1 configuration and the configuration combination of SCell DL subframes are a superset of PCell and PSCell by SIB1 configuration; the second bit indicates UE supports the configuration combination of SCell DL subframes are neither superset nor subset of PCell and PSCell by SIB1 configuration. This field is included only if UE supports inter-band TDD carrier aggregation. - interFreqBandList +One entry corresponding to each supported EUTRA band listed in the same order as in supportedBandListEUTRA. - interFreqNeedForGaps +Indicates need for measurement gaps when operating on the EUTRA band given by the entry in bandListEUTRA or on the E-UTRA band combination given by the entry in bandCombinationListEUTRA and measuring on the EUTRA band given by the entry in interFreqBandList. - interFreqProximityIndication +Indicates whether the UE supports proximity indication for inter-frequency E-UTRAN CSG member cells. - interFreqRSTD-Measurement +Indicates whether the UE supports inter-frequency RSTD measurements for OTDOA positioning [54]. Yes interFreqSI-AcquisitionForHO +Indicates whether the UE supports, upon configuration of si-RequestForHO by the network, acquisition and reporting of relevant information using autonomous gaps by reading the SI from a neighbouring inter-frequency cell. Yes interRAT-BandList +One entry corresponding to each supported band of another RAT listed in the same order as in the interRAT-Parameters. - interRAT-NeedForGaps +Indicates need for DL measurement gaps when operating on the EUTRA band given by the entry in bandListEUTRA or on the E-UTRA band combination given by the entry in bandCombinationListEUTRA and measuring on the inter-RAT band given by the entry in the interRAT-BandList. - interRAT-PS-HO-ToGERAN +Indicates whether the UE supports inter-RAT PS handover to GERAN or not. Yes intraFreqProximityIndication +Indicates whether the UE supports proximity indication for intra-frequency E-UTRAN CSG member cells. - intraFreqSI-AcquisitionForHO +Indicates whether the UE supports, upon configuration of si-RequestForHO by the network, acquisition and reporting of relevant information using autonomous gaps by reading the SI from a neighbouring intra-frequency cell. Yes loggedMBSFNMeasurements +Indicates whether the UE supports logged measurements for MBSFN. A UE indicating support for logged measurements for MBSFN shall also indicate support for logged measurements in Idle mode. - loggedMeasurementsIdle +Indicates whether the UE supports logged measurements in Idle mode. - logicalChannelSR-ProhibitTimer +Indicates whether the UE supports the logicalChannelSR-ProhibitTimer as defined in TS 36.321 [6]. - longDRX-Command +Indicates whether the UE supports Long DRX Command MAC Control Element. - maxNumberROHC-ContextSessions +Set to the maximum number of concurrently active ROHC contexts supported by the UE, excluding context sessions that leave all headers uncompressed. cs2 corresponds with 2 (context sessions), cs4 corresponds with 4 and so on. The network ignores this field if the UE supports none of the ROHC profiles in supportedROHC-Profiles. - mbms-AsyncDC +Indicates whether the UE in RRC_CONNECTED supports MBMS reception on a frequency indicated in an MBMSInterestIndication message, where (according to supportedBandCombination) the carriers that are or can be configured as serving cells in the MCG and the SCG are not synchronized. If this field is included, the UE shall also include mbms-SCell and mbms-NonServingCell. TBD mbms-SCell +Indicates whether the UE in RRC_CONNECTED supports MBMS reception on a frequency indicated in an MBMSInterestIndication message, when an SCell is configured on that frequency (regardless of whether the SCell is activated or deactivated). Yes mbms-NonServingCell +Indicates whether the UE in RRC_CONNECTED supports MBMS reception on a frequency indicated in an MBMSInterestIndication message, where (according to supportedBandCombination and to network synchronization properties) a serving cell may be additionally configured. If this field is included, the UE shall also include the mbms-SCell field. Yes mfbi-UTRA +It indicates if the UE supports the signalling requirements of multiple radio frequency bands in a UTRA FDD cell, as defined in TS 25.307 [65]. - MIMO-CapabilityDL +The number of supported layers for spatial multiplexing in DL. The field may be absent for category 0 and category 1 UE in which case the number of supported layers is 1. - MIMO-CapabilityUL +The number of supported layers for spatial multiplexing in UL. Absence of the field means that the number of supported layers is 1. - modifiedMPR-Behavior +Field encoded as a bit map, where at least one bit N is set to "1" if UE supports modified MPR/A-MPR behaviour N, see TS 36.101 [42]. All remaining bits of the field are set to “0”. The leading / leftmost bit (bit 0) corresponds to modified MPR/A-MPR behaviour 0, the next bit corresponds to modified MPR/A-MPR behaviour 1 and so on. +Absence of this field means that UE does not support any modified MPR/A-MPR behaviour. - multiACK-CSIreporting +Indicates whether the UE supports multi-cell HARQ ACK and periodic CSI reporting and SR on PUCCH format 3. Yes multiClusterPUSCH-WithinCC Yes multipleTimingAdvance +Indicates whether the UE supports multiple timing advances for each band combination listed in supportedBandCombination. If the band combination comprised of more than one band entry (i.e., inter-band or intra-band non-contiguous band combination), the field indicates that the same or different timing advances on different band entries are supported. If the band combination comprised of one band entry (i.e., intra-band contiguous band combination), the field indicates that the same or different timing advances across component carriers of the band entry are supported. - naics-Capability-List +Indicates that UE supports NAICS, i.e. receiving assistance information from serving cell and using it to cancel or suppress interference of neighbouring cell(s) for at least one band combination. If not present, UE does not support NAICS for any band combination. The field numberOfNAICS-CapableCC indicates the maximum number of component carriers where the NAICS processing is supported and the field numberOfAggregatedPRB indicates the maximum aggregated bandwidth across these of component carriers (expressed as a number of PRBs). +- For numberOfNAICS-CapableCC = 1, UE signals one value for numberOfAggregatedPRB from the range {50, 75, 100}; +- For numberOfNAICS-CapableCC = 2, UE signals one value for numberOfAggregatedPRB from the range {50, 75, 100, 125, 150, 175, 200}; +- For numberOfNAICS-CapableCC = 3, UE signals one value for numberOfAggregatedPRB from the range {50, 75, 100, 125, 150, 175, 200, 225, 250, 275, 300}; +- For numberOfNAICS-CapableCC = 4, UE signals one value for numberOfAggregatedPRB from the range {50, 100, 150, 200, 250, 300, 350, 400}; +For numberOfNAICS-CapableCC = 5, UE signals one value for numberOfAggregatedPRB from the range {50, 100, 150, 200, 250, 300, 350, 400, 450, 500}. - NonContiguousUL-RA-WithinCC-List +One entry corresponding to each supported E-UTRA band listed in the same order as in supportedBandListEUTRA. No noResourceRestrictionForTTIBundling +Indicate wheter the UE supports TTI bundling operation without resource allocation restriction. - otdoa-UE-Assisted +Indicates whether the UE supports UE-assisted OTDOA positioning [54]. Yes pdcp-SN-Extension +Indicates whether the UE supports 15 bit length of PDCP sequence number. - phy-TDD-ReConfig-FDD-PCell +Indicates whether the UE supports TDD UL/DL reconfiguration for TDD serving cell(s) via monitoring PDCCH with eIMTA-RNTI on a FDD PCell, and HARQ feedback according to UL and DL HARQ reference configurations. This bit can only be set to supported only if the second bit of tdd-FDD-CA-PCellDuplex is set to 1 and phy-TDD-ReConfig-TDD-PCell is set to supported. - phy-TDD-ReConfig-TDD-PCell +Indicates whether the UE supports TDD UL/DL reconfiguration for TDD serving cell(s) via monitoring PDCCH with eIMTA-RNTI on a TDD PCell, and HARQ feedback according to UL and DL HARQ reference configurations, and PUCCH format 3. - pmi-Disabling Yes powerPrefInd +Indicates whether the UE supports power preference indication. No pusch-FeedbackMode +Indicates whether the UE supports PUSCH feedback mode 3-2. No pusch-SRS-PowerControl-SubframeSet +Indicates whether the UE supports subframe set dependent UL power control for PUSCH and SRS. This field is only applicable for UEs supporting TDD. - rach-Report +Indicates whether the UE supports delivery of rachReport. - requestedBands +Indicates the frequency bands requested by E-UTRAN. - rsrqMeasWideband +Indicates whether the UE can perform RSRQ measurements with wider bandwidth. Yes rsrq-OnAllSymbols +Indicates whether the UE can perform RSRQ measurement on all OFDM symbols and also support the extended RSRQ upper value range from -3dB to 2.5dB in measurement configuration and reporting as specified in TS 36.133 [16]. No simultaneousPUCCH-PUSCH Yes simultaneousRx-Tx +Indicates whether the UE supports simultaneous reception and transmission on different bands for each band combination listed in supportedBandCombination. This field is only applicable for inter-band TDD band combinations. A UE indicating support of simultaneousRx-Tx and dc-Support-r12 shall support different UL/DL configurations between PCell and PSCell. - srvcc-FromUTRA-FDD-ToGERAN +Indicates whether UE supports SRVCC handover from UTRA FDD PS HS to GERAN CS. - srvcc-FromUTRA-FDD-ToUTRA-FDD +Indicates whether UE supports SRVCC handover from UTRA FDD PS HS to UTRA FDD CS. - srvcc-FromUTRA-TDD128-ToGERAN +Indicates whether UE supports SRVCC handover from UTRA TDD 1.28Mcps PS HS to GERAN CS. - srvcc-FromUTRA-TDD128-ToUTRA-TDD128 +Indicates whether UE supports SRVCC handover from UTRA TDD 1.28Mcps PS HS to UTRA TDD 1.28Mcps CS. - ss-CCH-InterfHandl +Indicates whether the UE supports synchronisation signal and common channel interference handling. Yes standaloneGNSS-Location +Indicates whether the UE is equipped with a standalone GNSS receiver that may be used to provide detailed location information in RRC measurement report and logged measurements. - supportedBandCombination +Includes the supported CA band combinations, if any, and may include all the supported non-CA bands. - supportedBandCombinationAdd +Includes additional supported CA band combinations in case maximum number of CA band combinations of supportedBandCombination is exceeded. - SupportedBandCombinationExt, SupportedBandCombination-v1090, SupportedBandCombination-v1130 +If included, the UE shall include the same number of entries, and listed in the same order, as in supportedBandCombination-r10. - SupportedBandGERAN +GERAN band as defined in TS 45.005 [20]. No SupportedBandList1XRTT +One entry corresponding to each supported CDMA2000 1xRTT band class. - SupportedBandListEUTRA +Includes the supported E-UTRA bands. This field shall include all bands which are indicated in BandCombinationParameters. - SupportedBandListEUTRA-v9e0, SupportedBandListEUTRA-v1250 +If included, the UE shall include the same number of entries, and listed in the same order, as in supportedListEUTRA (i.e. without suffix). - SupportedBandListGERAN No SupportedBandListHRPD +One entry corresponding to each supported CDMA2000 HRPD band class. - SupportedBandUTRA-FDD +UTRA band as defined in TS 25.101 [17]. - SupportedBandUTRA-TDD128 +UTRA band as defined in TS 25.102 [18]. - SupportedBandUTRA-TDD384 +UTRA band as defined in TS 25.102 [18]. - SupportedBandUTRA-TDD768 +UTRA band as defined in TS 25.102 [18]. - supportedBandwidthCombinationSet +The supportedBandwidthCombinationSet indicated for a band combination is applicable to all bandwidth classes indicated by the UE in this band combination. +Field encoded as a bit map, where bit N is set to "1" if UE support Bandwidth Combination Set N for this band combination, see 36.101 [42]. The leading / leftmost bit (bit 0) corresponds to the Bandwidth Combination Set 0, the next bit corresponds to the Bandwidth Combination Set 1 and so on. The UE shall neither include the field for a non-CA band combination, nor for a CA band combination for which the UE only supports Bandwidth Combination Set 0. - supportedCellGrouping +This field indicates for which mapping of serving cells to cell groups (i.e. MCG or SCG) the UE supports asynchronous DC. This field is only present for a band combination with more than two band entries where the UE supports asynchronous DC. If this field is not present but asynchronous operation is supported, the UE supports all possible mappings of serving cells to cell groups for the band combination. The bitmap size is selected based on the number of entries in the combinations, i.e., in case of three entries, the bitmap corresponding to threeEntries is selected and so on. +A bit in the bit string set to 1 indicates that the UE supports asynchronous DC for the cell grouping option represented by the concerned bit position. Each bit position represents a different cell grouping option, as illustrated by a table, see NOTE 5. A cell grouping option is represented by a number of bits, each representing a particular band entry in the band combination with the left-most bit referring to the band listed first in the band combination, etc. Value 0 indicates that the carriers of the corresponding band entry are mapped to a first cell group, while value 1 indicates that the carriers of the corresponding band entry are mapped to a second cell group. + It is noted that the mapping table does not include entries with all bits set to the same value (0 or 1) as this does not represent a DC scenario (i.e. indicating that the UE supports that all carriers of the corresponding band entry are in one cell group). - supportedCSI-Proc +Indicates the maximum number of CSI processes supported on a component carrier within a band. Value n1 corresponds to 1 CSI process, value n3 corresponds to 3 CSI processes, and value n4 corresponds to 4 CSI processes. If this field is included, the UE shall include the same number of entries listed in the same order as in BandParameters. If the UE supports at least 1 CSI process on any component carrier, then the UE shall include this field in all bands in all band combinations. - supportedNAICS-2CRS-AP +If included, the UE supports NAICS for the band combination. The UE shall include a bitmap of the same length, and in the same order, as in naics-Capability-List, to indicate 2 CRS AP NAICS capability of the band combination. The first/ leftmost bit points to the first entry of naics-Capability-List, the second bit points to the second entry of naics-Capability-List, and so on. +For band combinations with a single component carrier, UE is only allowed to indicate {numberOfNAICS-CapableCC, numberOfAggregatedPRB} = {1, 100} if NAICS is supported. - supportRohcContextContinue +Indicates whether the UE supports ROHC context continuation operation where the UE does not reset the current ROHC context upon handover. - tdd-SpecialSubframe +Indicates whether the UE supports TDD special subframe defined in TS 36.211 [21]. No tdd-FDD-CA-PCellDuplex +Indicates whether the UE supports TDD PCell and/or FDD PCell in any supported band combination including at least one FDD band and at least one TDD band. The first bit is set to "1" if UE supports the TDD PCell. The second bit is set to “1” if UE supports FDD PCell. This field is included only if the UE supports band combination including at least one FDD band and at least one TDD band. If this field is included, the UE shall set at least one of the bits as “1”. - timerT312 +Indicates whether the UE supports T312. No tm5-FDD +Indicates whether the UE supports the PDSCH transmission mode 5 in FDD. - tm5-TDD +Indicates whether the UE supports the PDSCH transmission mode 5 in TDD. - tm9-With-8Tx-FDD No twoAntennaPortsForPUCCH No txDiv-PUCCH1b-ChSelect +Indicates whether the UE supports transmit diversity for PUCCH format 1b with channel selection. Yes ue-Category +UE category as defined in TS 36.306 [5]. Set to values 1 to 12 in this version of the specification. - ue-CategoryDL +UE DL category as defined in TS 36.306 [5]. For ASN.1 compatibility, a UE indicating DL category 0 shall also indicate any of the categories (1..5) in ue-Category (without suffix), which is ignored by the eNB. The field ue-CategoryDL is set to values 0, 6, 7, 9 to 16 in this version of the specification. - ue-CategoryUL +UE UL category as defined in TS 36.306 [5]. The field ue-CategoryUL-r12 is set to values 0, 3, 5, 7, 8 and 13 in this version of the specification. - ue-Rx-TxTimeDiffMeasurements +Indicates whether the UE supports Rx - Tx time difference measurements. No ue-SpecificRefSigsSupported No ue-TxAntennaSelectionSupported +TRUE indicates that the UE is capable of supporting UE transmit antenna selection as described in TS 36.213 [23, 8.7]. Yes ul-CoMP +Indicates whether the UE supports UL Coordinated Multi-Point operation. No utran-ProximityIndication +Indicates whether the UE supports proximity indication for UTRAN CSG member cells. - ul-64QAM +Indicates whether the UE supports 64QAM in UL on the band. This field is only present when the field ue-CategoryUL is set to 5, 8 or 13. - utran-SI-AcquisitionForHO +Indicates whether the UE supports, upon configuration of si-RequestForHO by the network, acquisition and reporting of relevant information using autonomous gaps by reading the SI from a neighbouring UMTS cell. Yes voiceOverPS-HS-UTRA-FDD +Indicates whether UE supports IMS voice according to GSMA IR.58 profile in UTRA FDD. - voiceOverPS-HS-UTRA-TDD128 +Indicates whether UE supports IMS voice in UTRA TDD 1.28Mcps. - wlan-IW-RAN-Rules +Indicates whether the UE supports RAN-assisted WLAN interworking based on access network selection and traffic steering rules. - wlan-IW-ANDSF-Policies +Indicates whether the UE supports RAN-assisted WLAN interworking based on ANDSF policies. - +NOTE 1: The IE UE-EUTRA-Capability does not include AS security capability information, since these are the same as the security capabilities that are signalled by NAS. Consequently AS need not provide "man-in-the-middle" protection for the security capabilities. +NOTE 2: The column FDD/ TDD diff indicates if the UE is allowed to signal, as part of the additional capabilities for an XDD mode i.e. within UE-EUTRA-CapabilityAddXDD-Mode-xNM, a different value compared to the value signalled elsewhere within UE-EUTRA-Capability (i.e. the common value, supported for both XDD modes). A '-' is used to indicate that it is not possible to signal different values (used for fields for which the field description is provided for other reasons). Annex E specifies for which TDD and FDD serving cells a UE supporting TDD/FDD CA shall support a capability for which it indicates support within the capability signalling. +NOTE 3: All the combinations of CA-MIMO-ParametersUL and CA-MIMO-ParametersDL for one band and across all the bands in each BandCombinationParameters are supported by the UE and have the same measurement gap requirement (i.e. the same BandInfoEUTRA applies). The BandCombinationParameters for the same band combination can be included more than once. +NOTE 4: UE CA and measurement capabilities indicate the combinations of frequencies that can be configured as serving frequencies. +NOTE 5: The grouping of the cells to the first and second cell group, as indicated by supportedCellGrouping, is shown in the table below. +Nr of Band Entries: 5 4 3 Length of Bit-String: 15 7 3 Bit String Position Cell grouping option (0= first cell group, 1= second cell group) 1 00001 0001 001 2 00010 0010 010 3 00011 0011 011 4 00100 0100 5 00101 0101 6 00110 0110 7 00111 0111 8 01000 9 01001 10 01010 11 01011 12 01100 13 01101 14 01110 15 01111 + +– UE-RadioPagingInfo +The UE-RadioPagingInfo IE contains information needed for paging of category 0 UE. +UE-RadioPagingInfo information element +-- ASN1START + +UE-RadioPagingInfo-r12 ::= SEQUENCE { + ue-Category-v1250 INTEGER (0) OPTIONAL, + ... +} + +-- ASN1STOP + +– UE-TimersAndConstants +The IE UE-TimersAndConstants contains timers and constants used by the UE in either RRC_CONNECTED or RRC_IDLE. +UE-TimersAndConstants information element +-- ASN1START + +UE-TimersAndConstants ::= SEQUENCE { + t300 ENUMERATED { + ms100, ms200, ms300, ms400, ms600, ms1000, ms1500, + ms2000}, + t301 ENUMERATED { + ms100, ms200, ms300, ms400, ms600, ms1000, ms1500, + ms2000}, + t310 ENUMERATED { + ms0, ms50, ms100, ms200, ms500, ms1000, ms2000}, + n310 ENUMERATED { + n1, n2, n3, n4, n6, n8, n10, n20}, + t311 ENUMERATED { + ms1000, ms3000, ms5000, ms10000, ms15000, + ms20000, ms30000}, + n311 ENUMERATED { + n1, n2, n3, n4, n5, n6, n8, n10}, + ... +} + +-- ASN1STOP + +UE-TimersAndConstants field descriptions n3xy +Constants are described in section 7.4. n1 corresponds with 1, n2 corresponds with 2 and so on. t3xy +Timers are described in section 7.3. Value ms0 corresponds with 0 ms, ms50 corresponds with 50 ms and so on. +– VisitedCellInfoList +The IE VisitedCellInfoList includes the mobility history information of maximum of 16 most recently visited cells or time spent outside E-UTRA. The most recently visited cell is stored first in the list. The list includes cells visited in RRC_IDLE and RRC_CONNECTED states. +VisitedCellInfoList information element +-- ASN1START + +VisitedCellInfoList-r12 ::= SEQUENCE (SIZE (1..maxCellHistory-r12)) OF VisitedCellInfo-r12 + +VisitedCellInfo-r12 ::= SEQUENCE { + visitedCellId-r12 CHOICE { + cellGlobalId-r12 CellGlobalIdEUTRA, + pci-arfcn-r12 SEQUENCE { + physCellId-r12 PhysCellId, + carrierFreq-r12 ARFCN-ValueEUTRA-r9 + } + } OPTIONAL, + timeSpent-r12 INTEGER (0..4095), + ... +} + +-- ASN1STOP + +VisitedCellInfoList field descriptions timeSpent +This field indicates the duration of stay in the cell or outside E-UTRA approximated to the closest second. If the duration of stay exceeds 4095s, the UE shall set it to 4095s. +– WLAN-OffloadConfig +The IE WLAN-OffloadConfig includes information for traffic steering between E-UTRAN and WLAN. The fields are applicable to both RAN-assisted WLAN interworking based on access network selection and traffic steering rules and RAN-assisted WLAN interworking based on ANDSF policies unless stated otherwise in the field description. +WLAN-OffloadConfig information element +-- ASN1START + +WLAN-OffloadConfig-r12 ::= SEQUENCE { + thresholdRSRP-r12 SEQUENCE { + thresholdRSRP-Low-r12 RSRP-Range, + thresholdRSRP-High-r12 RSRP-Range + } OPTIONAL, -- Need OR + thresholdRSRQ-r12 SEQUENCE { + thresholdRSRQ-Low-r12 RSRQ-Range, + thresholdRSRQ-High-r12 RSRQ-Range + } OPTIONAL, -- Need OR + thresholdRSRQ-OnAllSymbolsWithWB-r12 SEQUENCE { + thresholdRSRQ-OnAllSymbolsWithWB-Low-r12 RSRQ-Range, + thresholdRSRQ-OnAllSymbolsWithWB-High-r12 RSRQ-Range + } OPTIONAL, -- Need OP + thresholdRSRQ-OnAllSymbols-r12 SEQUENCE { + thresholdRSRQ-OnAllSymbolsLow-r12 RSRQ-Range, + thresholdRSRQ-OnAllSymbolsHigh-r12 RSRQ-Range + } OPTIONAL, -- Need OP + thresholdRSRQ-WB-r12 SEQUENCE { + thresholdRSRQ-WB-Low-r12 RSRQ-Range, + thresholdRSRQ-WB-High-r12 RSRQ-Range + } OPTIONAL, -- Need OP + + thresholdChannelUtilization-r12 SEQUENCE { + thresholdChannelUtilizationLow-r12 INTEGER (0..255), + thresholdChannelUtilizationHigh-r12 INTEGER (0..255) + } OPTIONAL, -- Need OR + thresholdBackhaul-Bandwidth-r12 SEQUENCE { + thresholdBackhaulDL-BandwidthLow-r12 WLAN-backhaulRate-r12, + thresholdBackhaulDL-BandwidthHigh-r12 WLAN-backhaulRate-r12, + thresholdBackhaulUL-BandwidthLow-r12 WLAN-backhaulRate-r12, + thresholdBackhaulUL-BandwidthHigh-r12 WLAN-backhaulRate-r12 + } OPTIONAL, -- Need OR + thresholdBeaconRSSI-r12 SEQUENCE { + thresholdBeaconRSSI-Low-r12 INTEGER (0..255), + thresholdBeaconRSSI-High-r12 INTEGER (0..255) + } OPTIONAL, -- Need OR + offloadPreferenceIndicator-r12 BIT STRING (SIZE (16)) OPTIONAL, -- Need OR + t-SteeringWLAN-r12 T-Reselection OPTIONAL, -- Need OR + ... +} + +WLAN-backhaulRate-r12 ::= ENUMERATED + {r0, r4, r8, r16, r32, r64, r128, r256, r512, + r1024, r2048, r4096, r8192, r16384, r32768, r65536, r131072, + r262144, r524288, r1048576, r2097152, r4194304, r8388608, + r16777216, r33554432, r67108864, r134217728, r268435456, + r536870912, r1073741824, r2147483648, r4294967296} + +-- ASN1STOP + +WLAN-OffloadConfig field descriptions offloadPreferenceIndicator +Indicates the offload preference indicator. Parameter: OPI in TS 24.312 [66]. Only applicable to RAN-assisted WLAN interworking based on ANDSF policies. thresholdBackhaulDLBandwidth-High +Indicates the backhaul available downlink bandwidth threshold used by the UE for traffic steering to WLAN. Parameter: ThreshBackhRateDLWLAN, High in TS 36.304 [4]. Value in kilobits/second. Value rN corresponds to N kbps. thresholdBackhaulDLBandwidth-Low +Indicates the backhaul available downlink bandwidth threshold used by the UE for traffic steering to E-UTRAN. Parameter: ThreshBackhRateDLWLAN, Low in TS 36.304 [4]. Value in kilobits/second. Value rN corresponds to N kbps. thresholdBackhaulULBandwidth-High +Indicates the backhaul available uplink bandwidth threshold used by the UE for traffic steering to WLAN. Parameter: ThreshBackhRateULWLAN, High in TS 36.304 [4]. Value in kilobits/second. Value rN corresponds to N kbps. thresholdBackhaulULBandwidth-Low +Indicates the backhaul available uplink bandwidth threshold used by the UE for traffic steering to E-UTRAN. Parameter: ThreshBackhRateULWLAN, Low in TS 36.304 [4]. Value in kilobits/second. Value rN corresponds to N kbps. thresholdBeaconRSSI-High +Indicates the Beacon RSSI threshold used by the UE for traffic steering to WLAN. Parameter: ThreshBeaconRSSIWLAN, High in TS 36.304 [4]. thresholdBeaconRSSI-Low +Indicates the Beacon RSSI threshold used by the UE for traffic steering to E-UTRAN. Parameter: ThreshBeaconRSSIWLAN, Low in TS 36.304 [4]. thresholdChannelUtilization-High +Indicates the WLAN channel utilization (BSS load) threshold used by the UE for traffic steering to E-UTRAN. Parameter: ThreshChUtilWLAN, High in TS 36.304 [4]. thresholdChannelUtilization-Low +Indicates the WLAN channel utilization (BSS load) threshold used by the UE for traffic steering to WLAN. Parameter: ThreshChUtilWLAN, Low in TS 36.304 [4]. thresholdRSRP-High +Indicates the RSRP threshold (in dBm) used by the UE for traffic steering to E-UTRAN. Parameter: ThreshServingOffloadWLAN, HighP in TS 36.304 [4]. thresholdRSRP-Low +Indicates the RSRP threshold (in dBm) used by the UE for traffic steering to WLAN. Parameter: ThreshServingOffloadWLAN, LowP in TS 36.304 [4]. thresholdRSRQ-High,thresholdRSRQ-OnAllSymbolsHigh, thresholdRSRQ-WB-High, thresholdRSRQ-OnAllSymbolsWithWB-High +Indicates the RSRQ threshold (in dB) used by the UE for traffic steering to E-UTRAN. Parameter: ThreshServingOffloadWLAN, HighQ in TS 36.304 [4]. The UE shall only apply one of threshold values of thresholdRSRQ-OnAllSymbolsWithWB-High, thresholdRSRQ-OnAllSymbolsHigh, thresholdRSRQ-WB-High and thresholdRSRQ-High as present in wlan-OffloadConfigCommon and forward this to upper layer. NOTE 1. thresholdRSRQ-Low,thresholdRSRQ-OnAllSymbolsLow, thresholdRSRQ-WB-Low, thresholdRSRQ-OnAllSymbolsWithWB-Low +Indicates the RSRQ threshold (in dB) used by the UE for traffic steering to WLAN. Parameter: ThreshServingOffloadWLAN, LowQ in TS 36.304 [4]. +The UE shall only apply one of threshold values of thresholdRSRQ-OnAllSymbolsWithWB-Low, thresholdRSRQ-OnAllSymbolsLow, thresholdRSRQ-WB-Low and thresholdRSRQ-Low as present in wlan-OffloadConfigCommon and forward this to upper layer. NOTE 1. t-SteeringWLAN +Indicates the timer value during which the rules should be fulfilled before starting traffic steering between E-UTRAN and WLAN. Parameter: TsteeringWLAN in TS 36.304 [4]. Only applicable to RAN-assisted WLAN interworking based on access network selection and traffic steering rules. +NOTE 1: Within SIB17, E-UTRAN includes the fields corresponding to same RSRQ types as included in SIB1. E.g. if E-UTRAN includes q-QualMinRSRQ-OnAllSymbols in SIB1 it also includes thresholdRSRQ-OnAllSymbols in SIB17. Within the RRCConnectionReconfiguration message E-UTRAN only includes thresholdRSRQ, setting the value according to the RSRQ type used for E-UTRAN. The UE shall apply the RSRQ fields (RSRQ threshold, high and low) corresponding to one RSRQ type i.e. the same as it applies for E-UTRAN. + + +6.3.7 MBMS information elements + +– MBMS-NotificationConfig +The IE MBMS-NotificationConfig specifies the MBMS notification related configuration parameters, that are applicable for all MBSFN areas. +MBMS-NotificationConfig information element +-- ASN1START + +MBMS-NotificationConfig-r9 ::= SEQUENCE { + notificationRepetitionCoeff-r9 ENUMERATED {n2, n4}, + notificationOffset-r9 INTEGER (0..10), + notificationSF-Index-r9 INTEGER (1..6) +} + +-- ASN1STOP + +MBMS-NotificationConfig field descriptions notificationOffset +Indicates, together with the notificationRepetitionCoeff, the radio frames in which the MCCH information change notification is scheduled i.e. the MCCH information change notification is scheduled in radio frames for which: SFN mod notification repetition period = notificationOffset. notificationRepetitionCoeff +Actual change notification repetition period common for all MCCHs that are configured= shortest modification period/ notificationRepetitionCoeff. The ‘shortest modificaton period’ corresponds with the lowest value of mcch-ModificationPeriod of all MCCHs that are configured. Value n2 corresponds to coefficient 2, and so on. notificationSF-Index +Indicates the subframe used to transmit MCCH change notifications on PDCCH. +FDD: Value 1, 2, 3, 4, 5 and 6 correspond with subframe #1, #2, #3 #6, #7, and #8 respectively. +TDD: Value 1, 2, 3, 4, and 5 correspond with subframe #3, #4, #7, #8, and #9 respectively. +– MBSFN-AreaId +The IE MBSFN-AreaId identifies an MBSFN area by means of a locally unique value at lower layers i.e. it concerns parameter NIDMBSFN in TS 36.211 [21, 6.10.2.1]. +MBSFN-AreaId information element +-- ASN1START + +MBSFN-AreaId-r12 ::= INTEGER (0..255) + +-- ASN1STOP + +– MBSFN-AreaInfoList +The IE MBSFN-AreaInfoList contains the information required to acquire the MBMS control information associated with one or more MBSFN areas. +MBSFN-AreaInfoList information element +-- ASN1START + +MBSFN-AreaInfoList-r9 ::= SEQUENCE (SIZE(1..maxMBSFN-Area)) OF MBSFN-AreaInfo-r9 + +MBSFN-AreaInfo-r9 ::= SEQUENCE { + mbsfn-AreaId-r9 MBSFN-AreaId-r12, + non-MBSFNregionLength ENUMERATED {s1, s2}, + notificationIndicator-r9 INTEGER (0..7), + mcch-Config-r9 SEQUENCE { + mcch-RepetitionPeriod-r9 ENUMERATED {rf32, rf64, rf128, rf256}, + mcch-Offset-r9 INTEGER (0..10), + mcch-ModificationPeriod-r9 ENUMERATED {rf512, rf1024}, + sf-AllocInfo-r9 BIT STRING (SIZE(6)), + signallingMCS-r9 ENUMERATED {n2, n7, n13, n19} + }, + ... +} + +-- ASN1STOP + +MBSFN-AreaInfoList field descriptions mcch-ModificationPeriod +Defines periodically appearing boundaries, i.e. radio frames for which SFN mod mcch-ModificationPeriod = 0. The contents of different transmissions of MCCH information can only be different if there is at least one such boundary in-between them. mcch-Offset +Indicates, together with the mcch-RepetitionPeriod, the radio frames in which MCCH is scheduled i.e. MCCH is scheduled in radio frames for which: SFN mod mcch-RepetitionPeriod = mcch-Offset. mcch-RepetitionPeriod +Defines the interval between transmissions of MCCH information, in radio frames, Value rf32 corresponds to 32 radio frames, rf64 corresponds to 64 radio frames and so on. non-MBSFNregionLength +Indicates how many symbols from the beginning of the subframe constitute the non-MBSFN region. This value applies in all subframes of the MBSFN area used for PMCH transmissions as indicated in the MSI. The values s1 and s2 correspond with 1 and 2 symbols, respectively: see TS 36.211 [21, Table 6.7-1]. notificationIndicator +Indicates which PDCCH bit is used to notify the UE about change of the MCCH applicable for this MBSFN area. Value 0 corresponds with the least significant bit as defined in TS 36.212 [22, Section 5.3.3.1] and so on. sf-AllocInfo +Indicates the subframes of the radio frames indicated by the mcch-RepetitionPeriod and the mcch-Offset, that may carry MCCH. Value “1” indicates that the corresponding subframe is allocated. The following mapping applies: +FDD: The first/ leftmost bit defines the allocation for subframe #1 of the radio frame indicated by mcch-RepetitionPeriod and mcch-Offset, the second bit for #2, the third bit for #3 , the fourth bit for #6, the fifth bit for #7 and the sixth bit for #8. +TDD: The first/leftmost bit defines the allocation for subframe #3 of the radio frame indicated by mcch-RepetitionPeriod and mcch-Offset, the second bit for #4, third bit for #7, fourth bit for #8, fifth bit for #9. Uplink subframes are not allocated. The last bit is not used. signallingMCS +Indicates the Modulation and Coding Scheme (MCS) applicable for the subframes indicated by the field sf-AllocInfo and for each (P)MCH that is configured for this MBSFN area, for the first subframe allocated to the (P)MCH within each MCH scheduling period (which may contain the MCH scheduling information provided by MAC). Value n2 corresponds with the value 2 for parameter in TS 36.213 [23, Table 7.1.7.1-1], and so on. +– MBSFN-SubframeConfig +The IE MBSFN-SubframeConfig defines subframes that are reserved for MBSFN in downlink. +MBSFN-SubframeConfig information element +-- ASN1START + +MBSFN-SubframeConfig ::= SEQUENCE { + radioframeAllocationPeriod ENUMERATED {n1, n2, n4, n8, n16, n32}, + radioframeAllocationOffset INTEGER (0..7), + subframeAllocation CHOICE { + oneFrame BIT STRING (SIZE(6)), + fourFrames BIT STRING (SIZE(24)) + } +} +-- ASN1STOP + +MBSFN-SubframeConfig field descriptions fourFrames +A bit-map indicating MBSFN subframe allocation in four consecutive radio frames, “1” denotes that the corresponding subframe is allocated for MBSFN. The bitmap is interpreted as follows: +FDD: Starting from the first radioframe and from the first/leftmost bit in the bitmap, the allocation applies to subframes #1, #2, #3 , #6, #7, and #8 in the sequence of the four radio-frames. +TDD: Starting from the first radioframe and from the first/leftmost bit in the bitmap, the allocation applies to subframes #3, #4, #7, #8, and #9 in the sequence of the four radio-frames. The last four bits are not used. E-UTRAN allocates uplink subframes only if eimta-MainConfig is configured. oneFrame +“1” denotes that the corresponding subframe is allocated for MBSFN. The following mapping applies: +FDD: The first/leftmost bit defines the MBSFN allocation for subframe #1, the second bit for #2, third bit for #3 , fourth bit for #6, fifth bit for #7, sixth bit for #8. +TDD: The first/leftmost bit defines the allocation for subframe #3, the second bit for #4, third bit for #7, fourth bit for #8, fifth bit for #9. E-UTRAN allocates uplink subframes only if eimta-MainConfig is configured. The last bit is not used. radioFrameAllocationPeriod, radioFrameAllocationOffset +Radio-frames that contain MBSFN subframes occur when equation SFN mod radioFrameAllocationPeriod = radioFrameAllocationOffset is satisfied. Value n1 for radioframeAllocationPeriod denotes value 1, n2 denotes value 2, and so on. When fourFrames is used for subframeAllocation, the equation defines the first radio frame referred to in the description below. Values n1 and n2 are not applicable when fourFrames is used. subframeAllocation +Defines the subframes that are allocated for MBSFN within the radio frame allocation period defined by the radioFrameAllocationPeriod and the radioFrameAllocationOffset. +– PMCH-InfoList +The IE PMCH-InfoList specifies configuration of all PMCHs of an MBSFN area, while IE PMCH-InfoListExt includes additional PMCHs, i.e. extends the PMCH list using the general principles specified in 5.1.2. The information provided for an individual PMCH includes the configuration parameters of the sessions that are carried by the concerned PMCH. For all PMCH that E-UTRAN includes in PMCH-InfoList, the list of ongoing sessions has at least one entry. +PMCH-InfoList information element +-- ASN1START + +PMCH-InfoList-r9 ::= SEQUENCE (SIZE (0..maxPMCH-PerMBSFN)) OF PMCH-Info-r9 + +PMCH-InfoListExt-r12 ::= SEQUENCE (SIZE (0..maxPMCH-PerMBSFN)) OF PMCH-InfoExt-r12 + +PMCH-Info-r9 ::= SEQUENCE { + pmch-Config-r9 PMCH-Config-r9, + mbms-SessionInfoList-r9 MBMS-SessionInfoList-r9, + ... +} + +PMCH-InfoExt-r12 ::= SEQUENCE { + pmch-Config-r12 PMCH-Config-r12, + mbms-SessionInfoList-r12 MBMS-SessionInfoList-r9, + ... +} + +MBMS-SessionInfoList-r9 ::= SEQUENCE (SIZE (0..maxSessionPerPMCH)) OF MBMS-SessionInfo-r9 + +MBMS-SessionInfo-r9 ::= SEQUENCE { + tmgi-r9 TMGI-r9, + sessionId-r9 OCTET STRING (SIZE (1)) OPTIONAL, -- Need OR + logicalChannelIdentity-r9 INTEGER (0..maxSessionPerPMCH-1), + ... +} + +PMCH-Config-r9 ::= SEQUENCE { + sf-AllocEnd-r9 INTEGER (0..1535), + dataMCS-r9 INTEGER (0..28), + mch-SchedulingPeriod-r9 ENUMERATED { + rf8, rf16, rf32, rf64, rf128, rf256, rf512, rf1024}, + ... +} + +PMCH-Config-r12 ::= SEQUENCE { + sf-AllocEnd-r12 INTEGER (0..1535), + dataMCS-r12 CHOICE { + normal-r12 INTEGER (0..28), + higerOrder-r12 INTEGER (0..27) + }, + mch-SchedulingPeriod-r12 ENUMERATED { + rf4, rf8, rf16, rf32, rf64, rf128, rf256, rf512, rf1024}, + ... +} + +TMGI-r9 ::= SEQUENCE { + plmn-Id-r9 CHOICE { + plmn-Index-r9 INTEGER (1..maxPLMN-r11), + explicitValue-r9 PLMN-Identity + }, + serviceId-r9 OCTET STRING (SIZE (3)) +} + + +-- ASN1STOP + +PMCH-InfoList field descriptions dataMCS +Indicates the value for parameter in TS 36.213 [23], which defines the Modulation and Coding Scheme (MCS) applicable for the subframes of this (P)MCH as indicated by the field commonSF-Alloc. Value normal corresponds to Table 7.1.7.1-1 and value higherOrder corresponds to Table 7.1.7.1-1A. The MCS does however neither apply to the subframes that may carry MCCH i.e. the subframes indicated by the field sf-AllocInfo within SystemInformationBlockType13 nor for the first subframe allocated to this (P)MCH within each MCH scheduling period (which may contain the MCH scheduling information provided by MAC). mch-SchedulingPeriod +Indicates the MCH scheduling period i.e. the periodicity used for providing MCH scheduling information at lower layers (MAC) applicable for an MCH. Value rf8 corresponds to 8 radio frames, rf16 corresponds to 16 radio frames and so on. The mch-SchedulingPeriod starts in the radio frames for which: SFN mod mch-SchedulingPeriod = 0. E-UTRAN configures mch-SchedulingPeriod of the (P)MCH listed first in PMCH-InfoList to be smaller than or equal to mcch-RepetitionPeriod. plmn-Index +Index of the entry in field plmn-IdentityList within SystemInformationBlockType1. sessionId +Indicates the optional MBMS Session Identity, which together with TMGI identifies a transmission or a possible retransmission of a specific MBMS session: see TS 29.061 [51, Sections 20.5, 17.7.11, 17.7.15]. The field is included whenever upper layers have assigned a session identity i.e. one is available for the MBMS session in E-UTRAN. serviceId +Uniquely identifies the identity of an MBMS service within a PLMN. The field contains octet 3- 5 of the IE Temporary Mobile Group Identity (TMGI) as defined in TS 24.008 [49]. The first octet contains the third octet of the TMGI, the second octet contains the fourth octet of the TMGI and so on. sf-AllocEnd +Indicates the last subframe allocated to this (P)MCH within a period identified by field commonSF-AllocPeriod. The subframes allocated to (P)MCH corresponding with the nth entry in pmch-InfoList are the subsequent subframes starting from either the next subframe after the subframe identified by sf-AllocEnd of the (n-1)th listed (P)MCH or, for n=1, the first subframe defined by field commonSF-Alloc, through the subframe identified by sf-AllocEnd of the nth listed (P)MCH. Value 0 corresponds with the first subframe defined by field commonSF-Alloc. +6.3.8 Sidelink information elements +– SL-CommConfig +The IE SL-CommConfig specifies the dedicated configuration information for sidelink direct communication. In particular it concerns the transmission resource configuration for direct communication on the primary frequency. +SL-CommConfig information element +-- ASN1START + +SL-CommConfig-r12 ::= SEQUENCE { + commTxResources-r12 CHOICE { + release NULL, + setup CHOICE { + scheduled-r12 SEQUENCE { + sl-RNTI-r12 C-RNTI, + mac-MainConfig-r12 MAC-MainConfigSL-r12, + sc-CommTxConfig-r12 SL-CommResourcePool-r12, + mcs-r12 INTEGER (0..28) OPTIONAL -- Need OP + }, + ue-Selected-r12 SEQUENCE { + -- Pool for normal usage + commTxPoolNormalDedicated-r12 SEQUENCE { + poolToReleaseList-r12 SL-TxPoolToReleaseList-r12 OPTIONAL, -- Need ON + poolToAddModList-r12 SL-CommTxPoolToAddModList-r12 OPTIONAL -- Need ON + } + } + } + } OPTIONAL, -- Need ON + ... +} + +SL-CommTxPoolToAddModList-r12 ::= SEQUENCE (SIZE (1..maxSL-TxPool-r12)) OF SL-CommTxPoolToAddMod-r12 + +SL-CommTxPoolToAddMod-r12 ::= SEQUENCE { + poolIdentity-r12 SL-TxPoolIdentity-r12, + pool-r12 SL-CommResourcePool-r12 +} + +MAC-MainConfigSL-r12 ::= SEQUENCE { + periodic-BSR-TimerSL PeriodicBSR-Timer-r12 OPTIONAL, -- Need ON + retx-BSR-TimerSL RetxBSR-Timer-r12 +} + +-- ASN1STOP + +SL-CommConfig field descriptions commTxPoolNormalDedicated +Indicates a pool of transmission resources the UE is allowed to use while in RRC_CONNECTED. mcs +Indicates the Modulation and Coding Scheme as defined in TS 36.212 [23, 14.2.1]. If not configured, the selection of Modulation and Coding Scheme is up to UE implementation. sc-CommTxConfig +Indicates a pool of resources for SC when E-UTRAN schedules Tx resources (i.e. when indices included in DCI format 5 indicate the actual data resources to be used as specified in TS 36.212 [22, 5.3.3.1.9]). scheduled +Indicates the configuration for the case E-UTRAN schedules the transmission resources based on sidelink specific BSR from the UE. ue-Selected +Indicates the configuration for the case the UE selects the transmission resources from a pool of resources configured by E-UTRAN. +– SL-CommResourcePool +The IE SL-CommResourcePool specifies the configuration information for an individual pool of resources for sidelink direct communication. The IE covers the configuration of both the sidelink control information and the data. +SL-CommResourcePool information element +-- ASN1START + +SL-CommTxPoolList-r12 ::= SEQUENCE (SIZE (1..maxSL-TxPool-r12)) OF SL-CommResourcePool-r12 + +SL-CommRxPoolList-r12 ::= SEQUENCE (SIZE (1..maxSL-RxPool-r12)) OF SL-CommResourcePool-r12 + +SL-CommResourcePool-r12 ::= SEQUENCE { + sc-CP-Len-r12 SL-CP-Len-r12, + sc-Period-r12 SL-PeriodComm-r12, + sc-TF-ResourceConfig-r12 SL-TF-ResourceConfig-r12, + data-CP-Len-r12 SL-CP-Len-r12, + dataHoppingConfig-r12 SL-HoppingConfigComm-r12, + ue-SelectedResourceConfig-r12 SEQUENCE { + data-TF-ResourceConfig-r12 SL-TF-ResourceConfig-r12, + trpt-Subset-r12 SL-TRPT-Subset-r12 OPTIONAL -- Need OP + } OPTIONAL, -- Need OR + rxParametersNCell-r12 SEQUENCE { + tdd-Config-r12 TDD-Config OPTIONAL, -- Need OP + syncConfigIndex-r12 INTEGER (0..15) + } OPTIONAL, -- Need OR + txParameters-r12 SEQUENCE { + sc-TxParameters-r12 SL-TxParameters-r12, + dataTxParameters-r12 SL-TxParameters-r12 + } OPTIONAL, -- Cond Tx + ... +} + +SL-TRPT-Subset-r12 ::= BIT STRING (SIZE (3..5)) + +-- ASN1STOP + +SL-CommResourcePool field descriptions sc-Period +Indicates the period over which resources allocated in a cell for SC, scheduled and UE selected data transmissions occur, see TS 36.213 [23]. Value in number of subframes. Value sf40 corresponds to 40 subframes, sf80 corresponds to 80 subframes and so on. E-UTRAN configures values sf40, sf80, sf160 and sf320 for FDD and for TDD config 1 to 5, values sf70, sf140 and sf280 for TDD config 0, and finally values sf60, sf120 and sf240 for TDD config 6. syncConfigIndex +Indicates the synchronisation configuration that is associated with a reception pool, by means of an index to the corresponding entry of commSyncConfig in SystemInformationBlockType18. tdd-Config +TDD configuration associated with the reception pool of the cell indicated by syncConfigIndex. Absence of the field indicates the same duplex mode as the cell providing this field and the same UL/DL configuration as indicated by subframeAssignment in SystemInformationBlockType1 in case of TDD. trpt-Subset +Indicates the subset of T-RPT available (see TS 36.213 [23, 14.1.1.1.1]). Consists of a bitmap which is used to indicate the set of available ‘k’ values to be used for sidelink direct communication (see TS 36.213 [23, 14.1.1.3]). If T-RPT subset configuration is not signaled/ preconfigured then UE assumes the whole T-RPT set is available. +Conditional presence Explanation Tx The field is mandatory present when included in commTxPoolNormalDedicated, commTxPoolNormalCommon or commTxPoolExceptional. Otherwise the field is not present. +– SL-CP-Len +The IE SL-CP-Len indicates the cyclic prefix length, see TS 36.211 [21]. +SL-CP-Len information element +-- ASN1START + +SL-CP-Len-r12 ::= ENUMERATED {normal, extended} + +-- ASN1STOP + +– SL-DiscConfig +The IE SL-DiscConfig specifies the dedicated configuration information for sidelink direct discovery. +SL-DiscConfig information element +-- ASN1START + +SL-DiscConfig-r12 ::= SEQUENCE { + discTxResources-r12 CHOICE { + release NULL, + setup CHOICE { + scheduled-r12 SEQUENCE { + discTxConfig-r12 SL-DiscResourcePool-r12 OPTIONAL, -- Need ON + discTF-IndexList-r12 SL-TF-IndexPairList-r12 OPTIONAL, -- Need ON + discHoppingConfig-r12 SL-HoppingConfigDisc-r12 + OPTIONAL -- Need ON + }, + ue-Selected-r12 SEQUENCE { + discTxPoolDedicated-r12 SEQUENCE { + poolToReleaseList-r12 SL-TxPoolToReleaseList-r12 OPTIONAL, -- Need ON + poolToAddModList-r12 SL-DiscTxPoolToAddModList-r12 OPTIONAL -- Need ON + } OPTIONAL -- Need ON + } + } + } OPTIONAL, -- Need ON + ..., + [[ discTF-IndexList-v1260 CHOICE { + release NULL, + setup SEQUENCE { + discTF-IndexList-r12b SL-TF-IndexPairList-r12b + } + } OPTIONAL -- Need ON + ]] +} + +SL-DiscTxPoolToAddModList-r12 ::= SEQUENCE (SIZE (1..maxSL-TxPool-r12)) OF SL-DiscTxPoolToAddMod-r12 + +SL-DiscTxPoolToAddMod-r12 ::= SEQUENCE { + poolIdentity-r12 SL-TxPoolIdentity-r12, + pool-r12 SL-DiscResourcePool-r12 +} + +SL-TF-IndexPairList-r12 ::= SEQUENCE (SIZE (1..maxSL-TF-IndexPair-r12)) OF SL-TF-IndexPair-r12 + +SL-TF-IndexPair-r12 ::= SEQUENCE { + discSF-Index-r12 INTEGER (1.. 200) OPTIONAL, -- Need ON + discPRB-Index-r12 INTEGER (1.. 50) OPTIONAL -- Need ON +} + +SL-TF-IndexPairList-r12b ::= SEQUENCE (SIZE (1..maxSL-TF-IndexPair-r12)) OF SL-TF-IndexPair-r12b + +SL-TF-IndexPair-r12b ::= SEQUENCE { + discSF-Index-r12b INTEGER (0..209) OPTIONAL, -- Need ON + discPRB-Index-r12b INTEGER (0..49) OPTIONAL -- Need ON +} + +-- ASN1STOP + +SL-DiscConfig field descriptions discTF-IndexList +E-UTRAN only configures discTF-IndexList-r12b when configuring the UE with scheduled SL discovery Tx resources. When receiving discTF-IndexList-r12b, the UE shall only consider this field (and hence ignore discTF-IndexList-r12, if included or previously configured). discTxResources +Indicates the resources assigned to the UE for discovery announcements, which can either be a pool from which the UE may select or a set of resources specifically assigned for use by the UE. discTxConfig +Indicates the resources configuration used when E-UTRAN schedules Tx resources (i.e. the fields discSF-Index and discPRB-Index indicate the actual resources to be used). SL-TF-IndexPair +A pair of indices, one for the time domain and one for the frequency domain, indicating resources within the pool covered by discTxConfig, see TS 36.211 [21, 9.5.6]. The upper limits of discSF-Index and discPRB-Index are defined in TS 36.213 [23, 14.3.1]. +– SL-DiscResourcePool +The IE SL-DiscResourcePool specifies the configuration information for an individual pool of resources for sidelink direct discovery. +SL-DiscResourcePool information element +-- ASN1START + +SL-DiscTxPoolList-r12 ::= SEQUENCE (SIZE (1..maxSL-TxPool-r12)) OF SL-DiscResourcePool-r12 + +SL-DiscRxPoolList-r12 ::= SEQUENCE (SIZE (1..maxSL-RxPool-r12)) OF SL-DiscResourcePool-r12 + +SL-DiscResourcePool-r12 ::= SEQUENCE { + cp-Len-r12 SL-CP-Len-r12, + discPeriod-r12 ENUMERATED {rf32, rf64, rf128, + rf256, rf512, rf1024, spare2, spare}, + numRetx-r12 INTEGER (0..3), + numRepetition-r12 INTEGER (1..50), + tf-ResourceConfig-r12 SL-TF-ResourceConfig-r12, + txParameters-r12 SEQUENCE { + txParametersGeneral-r12 SL-TxParameters-r12, + ue-SelectedResourceConfig-r12 SEQUENCE { + poolSelection-r12 CHOICE { + rsrpBased-r12 SL-PoolSelectionConfig-r12, + random-r12 NULL + }, + txProbability-r12 ENUMERATED {p25, p50, p75, p100} + } OPTIONAL -- Need OR + } OPTIONAL, -- Cond Tx + rxParameters-r12 SEQUENCE { + tdd-Config-r12 TDD-Config OPTIONAL, -- Need OR + syncConfigIndex-r12 INTEGER (0..15) + } OPTIONAL, -- Need OR + ... +} + +SL-PoolSelectionConfig-r12 ::= SEQUENCE { + threshLow-r12 RSRP-RangeSL2-r12, + threshHigh-r12 RSRP-RangeSL2-r12 +} + +-- ASN1STOP + +SL-DiscResourcePool field descriptions numRepetition +Indicates the number of times subframeBitmap occurs within a discPeriod. The highest value E-UTRAN may use depends on the configuration i.e. value 5 for FDD and TDD configuration 0, value 13 for TDD configuration 1, value 25 for TDD configuration 2, value 17 for TDD configuration 3, value 25 for TDD configuration 4, value 50 for TDD configuration 5 and value 7 for TDD configuration 6. E-UTRAN configures numRepetition and subframeBitmap such that the length of subframeBitmap times the numRepetition is less than or equal to discPeriod. poolSelection +Indicates the mechanism for selecting a (transmission) pool when multiple candidates are provided. E-UTRAN configures the same value for all candidate pools i.e. all pools included in discTxPoolCommon or all pools configured by discTxPoolDedicated. syncConfigIndex +Indicates the synchronisation configuration that is associated with a reception pool, by means of an index to the corresponding entry of discSyncConfig in SystemInformationBlockType19. threshLow, threshHigh +Specifies the thresholds used to select a resource pool in RSRP based pool selection. The E-UTRAN should configure threshLow and threshHigh such that the UE selects only one resource pool upon RSRP based pool selection. txProbability +Indicates the probability of transmitting announcement in a discovery period when configured with a pool of resources, see TS 36.321 [6]. +Conditional presence Explanation Tx The field is mandatory present when included in discTxPoolDedicated or discTxPoolCommon. Otherwise the field is not present. +– SL-DiscTxPowerInfo +The IE SL-DiscTxPowerInfo specifies power control parameters for one or more power classes. +SL-DiscTxPowerInfo information element +-- ASN1START + +SL-DiscTxPowerInfoList-r12 ::= SEQUENCE (SIZE (maxSL-DiscPowerClass-r12)) OF SL-DiscTxPowerInfo-r12 + +SL-DiscTxPowerInfo-r12 ::= SEQUENCE { + discMaxTxPower-r12 P-Max, + ... +} + +-- ASN1STOP + +SL-DiscTxPowerInfo field descriptions discMaxTxPower +Indicates the P-Max parameter used to calculate the maximum transmit power a UE configured with the concerned range class, see TS 24.333 [70, 4.2.11]. The first entry in SL-DiscTxPowerInfoList corresponds to UE range class ‘short’, the second entry corresponds to ‘medium’ and the third entry corresponds to ‘long’. +– SL-HoppingConfig +The IE SL-HoppingConfig indicates the hopping configuration used for sidelink. +SL-HoppingConfig information element +-- ASN1START + +SL-HoppingConfigComm-r12 ::= SEQUENCE { + hoppingParameter-r12 INTEGER (0..504), + numSubbands-r12 ENUMERATED {ns1, ns2, ns4}, + rb-Offset-r12 INTEGER (0..110) +} + +SL-HoppingConfigDisc-r12 ::= SEQUENCE { + a-r12 INTEGER (1..200), + b-r12 INTEGER (1..10), + c-r12 ENUMERATED {n1, n5} +} + +-- ASN1STOP + +SL-HoppingConfig field descriptions a +Parameter: see TS 36.213 [23, 14.3.1]. b +Parameter: see TS 36.213 [23, 14.3.1]. c +Parameter: see TS36.213 [23, 14.3.1] hoppingParameter +Affects the hopping performed as specificed in TS 36.213 [23, 14.1.1.2 and 14.1.1.4]. In case value 504 is received, the value used by the UE is 510. numSubbands +Parameter: Nsb see TS 36.211 [21, 9.3.6]. rb-Offset +Parameter: , see TS 36.211 [21, 9.3.6]. +– SL-OffsetIndicator +The IE SL-OffsetIndicator indicates the offset of the pool of resources relative to SFN 0 of the cell from which it was obtained or, when out of coverage, relative to DFN 0. +SL-OffsetIndicator information element +-- ASN1START + +SL-OffsetIndicator-r12 ::= CHOICE { + small-r12 INTEGER (0..319), + large-r12 INTEGER (0..10239) +} + +SL-OffsetIndicatorSync-r12 ::= INTEGER (0..39) + +-- ASN1STOP + +SL-OffsetIndicator field descriptions SL-OffsetIndicator +In sc-TF-ResourceConfig, it indicates the offset of the first period of pool of resources within a SFN cycle. For data-TF-ResourceConfig, it corresponds to the offsetIndicator as defined in TS 36.213 [23, 14.1.3]. SL-OffsetIndicatorSync +Synchronisation resources are present in those SFN and subframes which satisfy the relation: (SFN*10+ Subframe Number) mod 40 = SL-OffsetIndicatorSync. +– SL-PeriodComm +The IE SL-PeriodComm indicates the period over which resources allocated in a cell for sidelink direct communication. +SL-PeriodComm information element +-- ASN1START + +SL-PeriodComm-r12 ::= ENUMERATED {sf40, sf60, sf70, sf80, sf120, sf140, + sf160, sf240, sf280, sf320, spare6, spare5, + spare4, spare3, spare2, spare} + +-- ASN1STOP + +– SLSSID +The IE SLSSID identifies a cell and is used by the receiving UE to detect asynchronous neighbouring cells, and by transmitting UEs to extend the synchronisation signals beyond the cell’s coverage area. +SLSSID information element +-- ASN1START + +SLSSID-r12 ::= INTEGER (0..167) + +-- ASN1STOP + +– SL-SyncConfig +The IE SL-SyncConfig specifies the configuration information concerning reception of synchronisation signals from neighbouring cells as well as concerning the transmission of synchronisation signals for sidelink direct communication and sidelink direct discovery. +SL-SyncConfig information element +-- ASN1START + +SL-SyncConfigList-r12 ::= SEQUENCE (SIZE (1..maxSL-SyncConfig-r12)) OF SL-SyncConfig-r12 + +SL-SyncConfig-r12 ::= SEQUENCE { + syncCP-Len-r12 SL-CP-Len-r12, + syncOffsetIndicator-r12 SL-OffsetIndicatorSync-r12, + slssid-r12 SLSSID-r12, + txParameters-r12 SEQUENCE { + syncTxParameters-r12 SL-TxParameters-r12, + syncTxThreshIC-r12 RSRP-RangeSL-r12, + syncInfoReserved-r12 BIT STRING (SIZE (19)) OPTIONAL -- Need OR + } OPTIONAL, -- Need OR + rxParamsNCell-r12 SEQUENCE { + physCellId-r12 PhysCellId, + discSyncWindow-r12 ENUMERATED {w1, w2} + } OPTIONAL, -- Need OR + ... +} + +-- ASN1STOP + + +SL-SyncConfig field descriptions discSyncWindow +Indicates the synchronization window over which the UE expects that SLSS or discovery resources indicated by the pool configuration (see TS 36.213 [23, 14.4]). The value w1 denotes 5 milliseconds. The value w2 denotes the length corresponding to normal cyclic prefix divided by 2. syncInfoReserved +Reserved for future use. syncOffsetIndicator +E-UTRAN should ensure syncOffsetIndicator is set to the same value as syncOffsetIndicator1 or syncOffsetIndicator2 in preconfigSync within SL-Preconfiguration, if configured. syncTxThreshIC +Indicates the threshold used while in coverage. In case the RSRP measurement of the cell chosen for transmission of sidelink direct communication/ discovery announcements, is below the level indicated by this field, the UE may transmit SLSS (i.e. become synchronisation reference) when performing the corresponding sidelink direct transmission.. txParameters +Includes parameters relevant only for transmission. E-UTRAN includes the field in one entry per list, as included in commSyncConfig or discSyncConfig. +– SL-TF-ResourceConfig +The IE SL-TF-ResourceConfig specifies a set of time/ frequency resources used for sidelink. +SL-TF-ResourceConfig information element +-- ASN1START + +SL-TF-ResourceConfig-r12 ::= SEQUENCE { + prb-Num-r12 INTEGER (1..100), + prb-Start-r12 INTEGER (0..99), + prb-End-r12 INTEGER (0..99), + offsetIndicator-r12 SL-OffsetIndicator-r12, + subframeBitmap-r12 SubframeBitmapSL-r12 +} + +SubframeBitmapSL-r12 ::= CHOICE { + bs4-r12 BIT STRING (SIZE (4)), + bs8-r12 BIT STRING (SIZE (8)), + bs12-r12 BIT STRING (SIZE (12)), + bs16-r12 BIT STRING (SIZE (16)), + bs30-r12 BIT STRING (SIZE (30)), + bs40-r12 BIT STRING (SIZE (40)), + bs42-r12 BIT STRING (SIZE (42)) +} + +-- ASN1STOP + +SL-TF-ResourceConfig field descriptions prb-Start, prb-End, prb-Num +Sidelink transmissions on a sub-frame can occur on PRB with index greater than or equal to prb-Start and less than prb-Start + prb-Num, and on PRB with index greater than prb-End - prb-Num and less than or equal to prb-End. Even for neighbouring cells, prb-Start and prb-End , are relative to PRB #0 of the cell from which it was obtained. See TS36.213 [23, 14.1.3, 14.2.3, 14.3.3]. subframeBitmap +Indicates the subframe bitmap indicating resources used for sidelink. E-UTRAN configures value bs40 for FDD and the following values for TDD: value bs42 for configuration0, value bs16 for configuration1, value bs8 for configuration2, value bs12 for configuration3, value bs8 for configuration4, value bs4 for configuration5 and value bs30 for configuration6. +– SL-TxParameters +The IE SL-TxParameters identifies a set of parameters configured for sidelink transmission, used for communication, discovery and synchronisation. +SL-TxParameters information element +-- ASN1START + +SL-TxParameters-r12 ::= SEQUENCE { + alpha-r12 Alpha-r12, + p0-r12 P0-SL-r12 +} + +P0-SL-r12 ::= INTEGER (-126..31) + +-- ASN1STOP + +SL-TxParameters field descriptions alpha +Parameter(s): ,,,,, See TS 36.213 [23, 14.1.1.5, 14.2.1.2, 14.3.1, 14.4] where al0 corresponds to 0, al04 corresponds to value 0.4, al05 to 0.5, al06 to 0.6, al07 to 0.7, al08 to 0.8, al09 to 0.9 and al1 corresponds to 1. This field applies for sidelink power control. p0 +Parameter: ,,,,, see TS 36.213 [23, 14.1.1.5, 14.2.1.2, 14.3.1, 14.4], unit dBm. +– SL-TxPoolIdentity +The IE SL-TxPoolIdentity identifies an individual pool entry configured for sidelink transmission, used for communication and discovery. +SL-TxPoolIdentity information element +-- ASN1START + +SL-TxPoolIdentity-r12 ::= INTEGER (1.. maxSL-TxPool-r12) + +-- ASN1STOP + +– SL-TxPoolToReleaseList +The IE SL-TxPoolToReleaseList is used to release one or more individual pool entries used for sidelink transmission, for communication and discovery. +SL-TxPoolToReleaseList information element +-- ASN1START + +SL-TxPoolToReleaseList-r12 ::= SEQUENCE (SIZE (1..maxSL-TxPool-r12)) OF SL-TxPoolIdentity-r12 + +-- ASN1STOP + +6.4 RRC multiplicity and type constraint values +– Multiplicity and type constraint definitions +-- ASN1START + +maxBandComb-r10 INTEGER ::= 128 -- Maximum number of band combinations. +maxBandComb-r11 INTEGER ::= 256 -- Maximum number of additional band combinations. +maxBands INTEGER ::= 64 -- Maximum number of bands listed in EUTRA UE caps +maxBandwidthClass-r10 INTEGER ::= 16 -- Maximum number of supported CA BW classes per band +maxBandwidthCombSet-r10 INTEGER ::= 32 -- Maximum number of bandwidth combination sets per + -- supported band combination +maxCDMA-BandClass INTEGER ::= 32 -- Maximum value of the CDMA band classes +maxCellBlack INTEGER ::= 16 -- Maximum number of blacklisted physical cell identity + -- ranges listed in SIB type 4 and 5 +maxCellHistory-r12 INTEGER ::= 16 -- Maximum number of visited EUTRA cells reported +maxCellInfoGERAN-r9 INTEGER ::= 32 -- Maximum number of GERAN cells for which system in- + -- formation can be provided as redirection assistance +maxCellInfoUTRA-r9 INTEGER ::= 16 -- Maximum number of UTRA cells for which system + -- information can be provided as redirection + -- assistance +maxCSI-IM-r11 INTEGER ::= 3 -- Maximum number of CSI-IM configurations + -- (per carrier frequency) +maxCSI-IM-r12 INTEGER ::= 4 -- Maximum number of CSI-IM configurations + -- (per carrier frequency) +maxCSI-Proc-r11 INTEGER ::= 4 -- Maximum number of CSI processes (per carrier + -- frequency) +maxCSI-RS-NZP-r11 INTEGER ::= 3 -- Maximum number of CSI RS resource + -- configurations using non-zero Tx power + -- (per carrier frequency) +maxCSI-RS-ZP-r11 INTEGER ::= 4 -- Maximum number of CSI RS resource + -- configurations using zero Tx power(per carrier + -- frequency) +maxCQI-ProcExt-r11 INTEGER ::= 3 -- Maximum number of additional periodic CQI + -- configurations (per carrier frequency) +maxFreqUTRA-TDD-r10 INTEGER ::= 6 -- Maximum number of UTRA TDD carrier frequencies for + -- which system information can be provided as + -- redirection assistance +maxCellInter INTEGER ::= 16 -- Maximum number of neighbouring inter-frequency + -- cells listed in SIB type 5 +maxCellIntra INTEGER ::= 16 -- Maximum number of neighbouring intra-frequency + -- cells listed in SIB type 4 +maxCellListGERAN INTEGER ::= 3 -- Maximum number of lists of GERAN cells +maxCellMeas INTEGER ::= 32 -- Maximum number of entries in each of the + -- cell lists in a measurement object +maxCellReport INTEGER ::= 8 -- Maximum number of reported cells/CSI-RS resources +maxCSI-RS-Meas-r12 INTEGER ::= 96 -- Maximum number of entries in the CSI-RS list + -- in a measurement object +maxDRB INTEGER ::= 11 -- Maximum number of Data Radio Bearers +maxDS-Duration-r12 INTEGER ::= 5 -- Maximum number of subframes in a discovery signals + -- occasion +maxDS-ZTP-CSI-RS-r12 INTEGER ::= 5 -- Maximum number of zero transmission power CSI-RS for + -- a serving cell concerning discovery signals +maxEARFCN INTEGER ::= 65535 -- Maximum value of EUTRA carrier frequency +maxEARFCN-Plus1 INTEGER ::= 65536 -- Lowest value extended EARFCN range +maxEARFCN2 INTEGER ::= 262143 -- Highest value extended EARFCN range +maxEPDCCH-Set-r11 INTEGER ::= 2 -- Maximum number of EPDCCH sets +maxFBI INTEGER ::= 64 -- Maximum value of fequency band indicator +maxFBI-Plus1 INTEGER ::= 65 -- Lowest value extended FBI range +maxFBI2 INTEGER ::= 256 -- Highest value extended FBI range +maxFreq INTEGER ::= 8 -- Maximum number of carrier frequencies +maxFreqIDC-r11 INTEGER ::= 32 -- Maximum number of carrier frequencies that are + -- affected by the IDC problems +maxFreqMBMS-r11 INTEGER ::= 5 -- Maximum number of carrier frequencies for which an + -- MBMS capable UE may indicate an interest +maxGERAN-SI INTEGER ::= 10 -- Maximum number of GERAN SI blocks that can be + -- provided as part of NACC information +maxGNFG INTEGER ::= 16 -- Maximum number of GERAN neighbour freq groups +maxLogMeasReport-r10 INTEGER ::= 520 -- Maximum number of logged measurement entries + -- that can be reported by the UE in one message +maxMBSFN-Allocations INTEGER ::= 8 -- Maximum number of MBSFN frame allocations with + -- different offset +maxMBSFN-Area INTEGER ::= 8 +maxMBSFN-Area-1 INTEGER ::= 7 +maxMeasId INTEGER ::= 32 +maxMeasId-Plus1 INTEGER ::= 33 +maxMeasId-r12 INTEGER ::= 64 +maxMultiBands INTEGER ::= 8 -- Maximum number of additional frequency bands + -- that a cell belongs to +maxNAICS-Entries-r12 INTEGER ::= 8 -- Maximum number of supported NAICS combination(s) +maxNeighCell-r12 INTEGER ::= 8 -- Maximum number of neighbouring cells in NAICS + -- configuration (per carrier frequency) +maxObjectId INTEGER ::= 32 +maxP-a-PerNeighCell-r12 INTEGER ::= 3 -- Maximum number of power offsets for a neighbour cell + -- in NAICS configuration +maxPageRec INTEGER ::= 16 -- +maxPhysCellIdRange-r9 INTEGER ::= 4 -- Maximum number of physical cell identity ranges +maxPLMN-r11 INTEGER ::= 6 -- Maximum number of PLMNs +maxPNOffset INTEGER ::= 511 -- Maximum number of CDMA2000 PNOffsets +maxPMCH-PerMBSFN INTEGER ::= 15 +maxRAT-Capabilities INTEGER ::= 8 -- Maximum number of interworking RATs (incl EUTRA) +maxRE-MapQCL-r11 INTEGER ::= 4 -- Maximum number of PDSCH RE Mapping configurations + -- (per carrier frequency) +maxReportConfigId INTEGER ::= 32 +maxRSTD-Freq-r10 INTEGER ::= 3 -- Maximum number of frequency layers for RSTD + -- measurement +maxSAI-MBMS-r11 INTEGER ::= 64 -- Maximum number of MBMS service area identities + -- broadcast per carrier frequency +maxSCell-r10 INTEGER ::= 4 -- Maximum number of SCells +maxSL-Dest-r12 INTEGER ::= 16 -- Maximum number of sidelink destinations +maxSL-DiscPowerClass-r12 INTEGER ::= 3 -- Maximum number of sidelink power classes +maxSL-RxPool-r12 INTEGER ::= 16 -- Maximum number of individual sidelink Rx resource pools +maxSL-SyncConfig-r12 INTEGER ::= 16 -- Maximum number of sidelink Sync configurations +maxSL-TF-IndexPair-r12 INTEGER ::= 64 -- Maximum number of sidelink Time Freq resource index + -- pairs +maxSL-TxPool-r12 INTEGER ::= 4 -- Maximum number of individual sidelink Tx resource pools +maxSTAG-r11 INTEGER ::= 3 -- Maximum number of STAGs +maxServCell-r10 INTEGER ::= 5 -- Maximum number of Serving cells +maxServiceCount INTEGER ::= 16 -- Maximum number of MBMS services that can be included + -- in an MBMS counting request and response +maxServiceCount-1 INTEGER ::= 15 +maxSessionPerPMCH INTEGER ::= 29 +maxSessionPerPMCH-1 INTEGER ::= 28 +maxSIB INTEGER ::= 32 -- Maximum number of SIBs +maxSIB-1 INTEGER ::= 31 +maxSI-Message INTEGER ::= 32 -- Maximum number of SI messages +maxSimultaneousBands-r10 INTEGER ::= 64 -- Maximum number of simultaneously aggregated bands +maxSubframePatternIDC-r11 INTEGER ::= 8 -- Maximum number of subframe reservation patterns + -- that the UE can simultaneously recommend to the + -- E-UTRAN for use. +maxUTRA-FDD-Carrier INTEGER ::= 16 -- Maximum number of UTRA FDD carrier frequencies +maxUTRA-TDD-Carrier INTEGER ::= 16 -- Maximum number of UTRA TDD carrier frequencies +maxWLAN-Id-r12 INTEGER ::= 16 -- Maximum number of WLAN identifiers + +-- ASN1STOP +NOTE: The value of maxDRB aligns with SA2. +– End of EUTRA-RRC-Definitions +-- ASN1START + +END + +-- ASN1STOP + +6.5 PC5 RRC messages +NOTE: The messages included in this section reflect the current status of the discussions. Additional messages may be included at a later stage. +6.5.1 General message structure +– PC5-RRC-Definitions +This ASN.1 segment is the start of the PC5 RRC PDU definitions. +-- ASN1START + +PC5-RRC-Definitions DEFINITIONS AUTOMATIC TAGS ::= + +BEGIN + +IMPORTS + TDD-ConfigSL-r12 +FROM EUTRA-RRC-Definitions; + +-- ASN1STOP + +– SBCCH-SL-BCH-Message +The SBCCH-SL-BCH-Message class is the set of RRC messages that may be sent from the UE to the UE via SL-BCH on the SBCCH logical channel. +-- ASN1START + +SBCCH-SL-BCH-Message ::= SEQUENCE { + message SBCCH-SL-BCH-MessageType +} + +SBCCH-SL-BCH-MessageType ::= MasterInformationBlock-SL + +-- ASN1STOP + +6.5.2 Message definitions +– MasterInformationBlock-SL +The MasterInformationBlock-SL includes the information transmitted by a UE transmitting SLSS, i.e. acting as synchronisation reference, via SL-BCH. +Signalling radio bearer: N/A +RLC-SAP: TM +Logical channel: SBCCH +Direction: UE to UE +MasterInformationBlock-SL +-- ASN1START + +MasterInformationBlock-SL ::= SEQUENCE { + sl-Bandwidth-r12 ENUMERATED { + n6, n15, n25, n50, n75, n100}, + tdd-ConfigSL-r12 TDD-ConfigSL-r12, + directFrameNumber-r12 BIT STRING (SIZE (10)), + directSubframeNumber-r12 INTEGER (0..9), + inCoverage-r12 BOOLEAN, + reserved-r12 BIT STRING (SIZE (19)) +} + + +-- ASN1STOP + +MasterInformationBlock-SL field descriptions directFrameNumber +Indicates the frame number in which SLSS and SL-BCH are transmitted. The subframe in the frame corresponding to directFrameNumber is indicated by directSubframeNumber. inCoverage +Value TRUE indicates that the UE transmitting the MasterInformationBlock-SL is in E-UTRAN coverage. sl-Bandwidth +Parameter: transmission bandwidth configuration. n6 corresponds to 6 resource blocks, n15 to 15 resource blocks and so on. +– End of PC5-RRC-Definitions +-- ASN1START + +END + +-- ASN1STOP +7 Variables and constants +7.1 UE variables +NOTE: To facilitate the specification of the UE behavioural requirements, UE variables are represented using ASN.1. Unless explicitly specified otherwise, it is however up to UE implementation how to store the variables. The optionality of the IEs in ASN.1 is used only to indicate that the values may not always be available. +– EUTRA-UE-Variables +This ASN.1 segment is the start of the EUTRA UE variable definitions. +-- ASN1START + +EUTRA-UE-Variables DEFINITIONS AUTOMATIC TAGS ::= + +BEGIN + +IMPORTS + AbsoluteTimeInfo-r10, + AreaConfiguration-r10, + AreaConfiguration-v1130, + CarrierFreqGERAN, + CellIdentity, + ConnEstFailReport-r11, + SpeedStateScaleFactors, + C-RNTI, + LoggingDuration-r10, + LoggingInterval-r10, + LogMeasInfo-r10, + MeasCSI-RS-Id-r12, + MeasId, + MeasId-v1250, + MeasIdToAddModList, + MeasIdToAddModListExt-r12, + MeasObjectToAddModList, + MeasObjectToAddModList-v9e0, + MeasScaleFactor-r12, + MobilityStateParameters, + NeighCellConfig, + PhysCellId, + PhysCellIdCDMA2000, + PhysCellIdGERAN, + PhysCellIdUTRA-FDD, + PhysCellIdUTRA-TDD, + PLMN-Identity, + PLMN-IdentityList3-r11, + QuantityConfig, + ReportConfigToAddModList, + RLF-Report-r9, + TargetMBSFN-AreaList-r12, + TraceReference-r10, + VisitedCellInfoList-r12, + maxCellMeas, + maxCSI-RS-Meas-r12, + maxMeasId, + maxMeasId-r12 +FROM EUTRA-RRC-Definitions; + +-- ASN1STOP + + +– VarConnEstFailReport +The UE variable VarConnEstFailReport includes the connection establishment failure information. +VarConnEstFailReport UE variable +-- ASN1START + +VarConnEstFailReport-r11 ::= SEQUENCE { + connEstFailReport-r11 ConnEstFailReport-r11, + plmn-Identity-r11 PLMN-Identity +} + +-- ASN1STOP + +– VarLogMeasConfig +The UE variable VarLogMeasConfig includes the configuration of the logging of measurements to be performed by the UE while in RRC_IDLE, covering intra-frequency, inter-frequency, inter-RAT mobility and MBSFN related measurements. If MBSFN logging is configured, the UE performs logging of measurements while in both RRC_IDLE and RRC_CONNECTED. Otherwise, the UE performs logging of measurements only while in RRC_IDLE. +VarLogMeasConfig UE variable +-- ASN1START + +VarLogMeasConfig-r10 ::= SEQUENCE { + areaConfiguration-r10 AreaConfiguration-r10 OPTIONAL, + loggingDuration-r10 LoggingDuration-r10, + loggingInterval-r10 LoggingInterval-r10 +} + +VarLogMeasConfig-r11 ::= SEQUENCE { + areaConfiguration-r10 AreaConfiguration-r10 OPTIONAL, + areaConfiguration-v1130 AreaConfiguration-v1130 OPTIONAL, + loggingDuration-r10 LoggingDuration-r10, + loggingInterval-r10 LoggingInterval-r10 +} + +VarLogMeasConfig-r12 ::= SEQUENCE { + areaConfiguration-r10 AreaConfiguration-r10 OPTIONAL, + areaConfiguration-v1130 AreaConfiguration-v1130 OPTIONAL, + loggingDuration-r10 LoggingDuration-r10, + loggingInterval-r10 LoggingInterval-r10, + targetMBSFN-AreaList-r12 TargetMBSFN-AreaList-r12 OPTIONAL +} + +-- ASN1STOP + +– VarLogMeasReport +The UE variable VarLogMeasReport includes the logged measurements information. +VarLogMeasReport UE variable +-- ASN1START + +VarLogMeasReport-r10 ::= SEQUENCE { + traceReference-r10 TraceReference-r10, + traceRecordingSessionRef-r10 OCTET STRING (SIZE (2)), + tce-Id-r10 OCTET STRING (SIZE (1)), + plmn-Identity-r10 PLMN-Identity, + absoluteTimeInfo-r10 AbsoluteTimeInfo-r10, + logMeasInfoList-r10 LogMeasInfoList2-r10 +} + +VarLogMeasReport-r11 ::= SEQUENCE { + traceReference-r10 TraceReference-r10, + traceRecordingSessionRef-r10 OCTET STRING (SIZE (2)), + tce-Id-r10 OCTET STRING (SIZE (1)), + plmn-IdentityList-r11 PLMN-IdentityList3-r11, + absoluteTimeInfo-r10 AbsoluteTimeInfo-r10, + logMeasInfoList-r10 LogMeasInfoList2-r10 +} + +LogMeasInfoList2-r10 ::= SEQUENCE (SIZE (1..maxLogMeas-r10)) OF LogMeasInfo-r10 + +-- ASN1STOP + +– VarMeasConfig +The UE variable VarMeasConfig includes the accumulated configuration of the measurements to be performed by the UE, covering intra-frequency, inter-frequency and inter-RAT mobility related measurements. +NOTE: The amount of measurement configuration information, which a UE is required to store, is specified in subclause 11.1. If the number of frequencies configured for a particular RAT exceeds the minimum performance requirements specified in [16], it is up to UE implementation which frequencies of that RAT are measured. If the total number of frequencies for all RATs provided to the UE in the measurement configuration exceeds the minimum performance requirements specified in [16], it is up to UE implementation which frequencies/RATs are measured. +VarMeasConfig UE variable +-- ASN1START + +VarMeasConfig ::= SEQUENCE { + -- Measurement identities + measIdList MeasIdToAddModList OPTIONAL, + measIdListExt-r12 MeasIdToAddModListExt-r12 OPTIONAL, + -- Measurement objects + measObjectList MeasObjectToAddModList OPTIONAL, + measObjectList-v9i0 MeasObjectToAddModList-v9e0 OPTIONAL, + -- Reporting configurations + reportConfigList ReportConfigToAddModList OPTIONAL, + -- Other parameters + quantityConfig QuantityConfig OPTIONAL, + measScaleFactor-r12 MeasScaleFactor-r12 OPTIONAL, + s-Measure INTEGER (-140..-44) OPTIONAL, + speedStatePars CHOICE { + release NULL, + setup SEQUENCE { + mobilityStateParameters MobilityStateParameters, + timeToTrigger-SF SpeedStateScaleFactors + } + } OPTIONAL, + allowInterruptions-r11 BOOLEAN OPTIONAL +} + +-- ASN1STOP + +– VarMeasReportList +The UE variable VarMeasReportList includes information about the measurements for which the triggering conditions have been met. +VarMeasReportList UE variable +-- ASN1START + +VarMeasReportList ::= SEQUENCE (SIZE (1..maxMeasId)) OF VarMeasReport +VarMeasReportList-r12 ::= SEQUENCE (SIZE (1..maxMeasId-r12)) OF VarMeasReport + +VarMeasReport ::= SEQUENCE { + -- List of measurement that have been triggered + measId MeasId, + measId-v1250 MeasId-v1250 OPTIONAL, + cellsTriggeredList CellsTriggeredList OPTIONAL, + csi-RS-TriggeredList-r12 CSI-RS-TriggeredList-r12 OPTIONAL, + numberOfReportsSent INTEGER +} + +CellsTriggeredList ::= SEQUENCE (SIZE (1..maxCellMeas)) OF CHOICE { + physCellIdEUTRA PhysCellId, + physCellIdUTRA CHOICE { + fdd PhysCellIdUTRA-FDD, + tdd PhysCellIdUTRA-TDD + }, + physCellIdGERAN SEQUENCE { + carrierFreq CarrierFreqGERAN, + physCellId PhysCellIdGERAN + }, + physCellIdCDMA2000 PhysCellIdCDMA2000 +} + +CSI-RS-TriggeredList-r12 ::= SEQUENCE (SIZE (1..maxCSI-RS-Meas-r12)) OF MeasCSI-RS-Id-r12 + +-- ASN1STOP + +– VarMobilityHistoryReport +The UE variable VarMobilityHistoryReport includes the mobility history information. +-- ASN1START +VarMobilityHistoryReport-r12 ::= VisitedCellInfoList-r12 + +-- ASN1STOP + +– VarRLF-Report +The UE variable VarRLF-Report includes the radio link failure information or handover failure information. +VarRLF-Report UE variable +-- ASN1START + +VarRLF-Report-r10 ::= SEQUENCE { + rlf-Report-r10 RLF-Report-r9, + plmn-Identity-r10 PLMN-Identity +} + +VarRLF-Report-r11 ::= SEQUENCE { + rlf-Report-r10 RLF-Report-r9, + plmn-IdentityList-r11 PLMN-IdentityList3-r11 +} + +-- ASN1STOP + +– VarShortMAC-Input +The UE variable VarShortMAC-Input specifies the input used to generate the shortMAC-I. +VarShortMAC-Input UE variable +-- ASN1START + +VarShortMAC-Input ::= SEQUENCE { + cellIdentity CellIdentity, + physCellId PhysCellId, + c-RNTI C-RNTI +} +-- ASN1STOP + +VarShortMAC-Input field descriptions cellIdentity +Set to CellIdentity of the current cell. c-RNTI +Set to C-RNTI that the UE had in the PCell it was connected to prior to the failure. physCellId +Set to the physical cell identity of the PCell the UE was connected to prior to the failure. +– Multiplicity and type constraint definitions +This section includes multiplicity and type constraints applicable (only) for UE variables. +-- ASN1START + +maxLogMeas-r10 INTEGER ::= 4060-- Maximum number of logged measurement entries + -- that can be stored by the UE + +-- ASN1STOP + +– End of EUTRA-UE-Variables +-- ASN1START + +END + +-- ASN1STOP + +7.2 Counters +Counter Reset Incremented When reaching max value +7.3 Timers (Informative) +Timer Start Stop At expiry T300 + Transmission of RRCConnectionRequest Reception of RRCConnectionSetup or RRCConnectionReject message, cell re-selection and upon abortion of connection establishment by upper layers Perform the actions as specified in 5.3.3.6 T301 Transmission of RRCConnectionReestabilshmentRequest Reception of RRCConnectionReestablishment or RRCConnectionReestablishmentReject message as well as when the selected cell becomes unsuitable Go to RRC_IDLE T302 Reception of RRCConnectionReject while performing RRC connection establishment Upon entering RRC_CONNECTED and upon cell re-selection Inform upper layers about barring alleviation as specified in 5.3.3.7 T303 Access barred while performing RRC connection establishment for mobile originating calls Upon entering RRC_CONNECTED and upon cell re-selection Inform upper layers about barring alleviation as specified in 5.3.3.7 T304 Reception of RRCConnectionReconfiguration message including the MobilityControl Info or +reception of MobilityFromEUTRACommand message including CellChangeOrder Criterion for successful completion of handover within E-UTRA, handover to E-UTRA or cell change order is met (the criterion is specified in the target RAT in case of inter-RAT) In case of cell change order from E-UTRA or intra E-UTRA handover, initiate the RRC connection re-establishment procedure; In case of handover to E-UTRA, perform the actions defined in the specifications applicable for the source RAT. T305 Access barred while performing RRC connection establishment for mobile originating signalling Upon entering RRC_CONNECTED and upon cell re-selection Inform upper layers about barring alleviation as specified in 5.3.3.7 T306 Access barred while performing RRC connection establishment for mobile originating CS fallback. Upon entering RRC_CONNECTED and upon cell re-selection Inform upper layers about barring alleviation as specified in 5.3.3.7 T307 Reception of RRCConnectionReconfiguration message including MobilityControlInfoSCG Successful completion of random access on the PSCell, upon initiating re-establishment and upon SCG release Inform E-UTRAN about the SCG change failure by initiating the SCG failure information procedure as specified in 5.6.13. T310 Upon detecting physical layer problems for the PCell i.e. upon receiving N310 consecutive out-of-sync indications from lower layers Upon receiving N311 consecutive in-sync indications from lower layers for the PCell, upon triggering the handover procedure and upon initiating the connection re-establishment procedure If security is not activated: go to RRC_IDLE else: initiate the connection re-establishment procedure T311 Upon initiating the RRC connection re-establishment procedure Selection of a suitable E-UTRA cell or a cell using another RAT. Enter RRC_IDLE T312 Upon triggering a measurement report for a measurement identity for which T312 has been configured, while T310 is running Upon receiving N311 consecutive in-sync indications from lower layers, upon triggering the handover procedure, upon initiating the connection re-establishment procedure, and upon the expiry of T310 If security is not activated: go to RRC_IDLE else: initiate the connection re-establishment procedure T313 Upon detecting physical layer problems for the PSCell i.e. upon receiving N313 consecutive out-of-sync indications from lower layers Upon receiving N314 consecutive in-sync indications from lower layers for the PSCell, upon initiating the connection re-establishment procedure, upon SCG release and upon receiving RRCConnectionReconfiguration including MobilityControlInfoSCG Inform E-UTRAN about the SCG radio link failure by initiating the SCG failure information procedure as specified in 5.6.13. T320 Upon receiving t320 or upon cell (re)selection to E-UTRA from another RAT with validity time configured for dedicated priorities (in which case the remaining validity time is applied). Upon entering RRC_CONNECTED, when PLMN selection is performed on request by NAS, or upon cell (re)selection to another RAT (in which case the timer is carried on to the other RAT). Discard the cell reselection priority information provided by dedicated signalling. T321 Upon receiving measConfig including a reportConfig with the purpose set to reportCGI Upon acquiring the information needed to set all fields of cellGlobalId for the requested cell, upon receiving measConfig that includes removal of the reportConfig with the purpose set to reportCGI Initiate the measurement reporting procedure, stop performing the related measurements and remove the corresponding measId T325 Timer (re)started upon receiving RRCConnectionReject message with deprioritisationTimer. Stop deprioritisation of all frequencies or E-UTRA signalled by RRCConnectionReject. T330 Upon receiving LoggedMeasurementConfiguration message Upon log volume exceeding the suitable UE memory, upon initiating the release of LoggedMeasurementConfiguration procedure Perform the actions specified in 5.6.6.4 T340 Upon transmitting UEAssistanceInformation message with powerPrefIndication set to normal Upon initiating the connection re-establishment procedure No action. T350 Upon entering RRC_IDLE if t350 has been received in wlan-OffloadInfo. Upon entering RRC_CONNECTED, or upon cell reselection. Perform the actions specified in 5.6.12.4. +7.4 Constants +Constant Usage N310 Maximum number of consecutive "out-of-sync" indications for the PCell received from lower layers N311 Maximum number of consecutive "in-sync" indications for the PCell received from lower layers N313 Maximum number of consecutive "out-of-sync" indications for the PSCell received from lower layers N314 Maximum number of consecutive "in-sync" indications for the PSCell received from lower layers +8 Protocol data unit abstract syntax +8.1 General +The RRC PDU contents in clause 6 and clause 10 are described using abstract syntax notation one (ASN.1) as specified in ITU-T Rec. X.680 [13] and X.681 [14]. Transfer syntax for RRC PDUs is derived from their ASN.1 definitions by use of Packed Encoding Rules, unaligned as specified in ITU-T Rec. X.691 [15]. +The following encoding rules apply in addition to what has been specified in X.691: +- When a bit string value is placed in a bit-field as specified in 15.6 to 15.11 in X.691, the leading bit of the bit string value shall be placed in the leading bit of the bit-field, and the trailing bit of the bit string value shall be placed in the trailing bit of the bit-field. +NOTE: The terms 'leading bit' and 'trailing bit' are defined in ITU-T Rec. X.680. When using the 'bstring' notation, the leading bit of the bit string value is on the left, and the trailing bit of the bit string value is on the right. +- When decoding types constrained with the ASN.1 Contents Constraint ("CONTAINING"), automatic decoding of the contained type should not be performed because errors in the decoding of the contained type should not cause the decoding of the entire RRC message PDU to fail. It is recommended that the decoder first decodes the outer PDU type that contains the OCTET STRING or BIT STRING with the Contents Constraint, and then decodes the contained type that is nested within the OCTET STRING or BIT STRING as a separate step. +- When decoding a) RRC message PDUs, b) BIT STRING constrained with a Contents Constraint, or c) OCTET STRING constrained with a Contents Constraint, PER decoders are required to never report an error if there are extraneous zero or non-zero bits at the end of the encoded RRC message PDU, BIT STRING or OCTET STRING. +8.2 Structure of encoded RRC messages +An RRC PDU, which is the bit string that is exchanged between peer entities/ across the radio interface contains the basic production as defined in X.691. +RRC PDUs shall be mapped to and from PDCP SDUs (in case of DCCH) or RLC SDUs (in case of PCCH, BCCH, CCCH or MCCH) upon transmission and reception as follows: +- when delivering an RRC PDU as an PDCP SDU to the PDCP layer for transmission, the first bit of the RRC PDU shall be represented as the first bit in the PDCP SDU and onwards; and +- when delivering an RRC PDU as an RLC SDU to the RLC layer for transmission, the first bit of the RRC PDU shall be represented as the first bit in the RLC SDU and onwards; and +- upon reception of an PDCP SDU from the PDCP layer, the first bit of the PDCP SDU shall represent the first bit of the RRC PDU and onwards; and +- upon reception of an RLC SDU from the RLC layer, the first bit of the RLC SDU shall represent the first bit of the RRC PDU and onwards. +8.3 Basic production +The 'basic production' is obtained by applying UNALIGNED PER to the abstract syntax value (the ASN.1 description) as specified in X.691. It always contains a multiple of 8 bits. +8.4 Extension +The following rules apply with respect to the use of protocol extensions: +- A transmitter compliant with this version of the specification shall, unless explicitly indicated otherwise on a PDU type basis, set the extension part empty. Transmitters compliant with a later version may send non-empty extensions; +- A transmitter compliant with this version of the specification shall set spare bits to zero; +8.5 Padding +If the encoded RRC message does not fill a transport block, the RRC layer shall add padding bits. This applies to PCCH and BCCH. +Padding bits shall be set to 0 and the number of padding bits is a multiple of 8. + +Figure 8.5-1: RRC level padding +9 Specified and default radio configurations +Specified and default configurations are configurations of which the details are specified in the standard. Specified configurations are fixed while default configurations can be modified using dedicated signalling. +9.1 Specified configurations +9.1.1 Logical channel configurations +9.1.1.1 BCCH configuration +Parameters +Name Value Semantics description Ver PDCP configuration N/A RLC configuration TM MAC configuration TM +NOTE: RRC will perform padding, if required due to the granularity of the TF signalling, as defined in 8.5. +9.1.1.2 CCCH configuration +Parameters +Name Value Semantics description Ver PDCP configuration N/A RLC configuration TM MAC configuration Normal MAC headers are used Logical channel configuration priority 1 Highest priority prioritisedBitRate infinity bucketSizeDuration N/A logicalChannelGroup 0 logicalChannelSR-Mask-r9 release v920 +9.1.1.3 PCCH configuration +Parameters +Name Value Semantics description Ver PDCP configuration N/A RLC configuration TM MAC configuration TM +NOTE: RRC will perform padding, if required due to the granularity of the TF signalling, as defined in 8.5. +9.1.1.4 MCCH and MTCH configuration +Parameters +Name Value Semantics description Ver PDCP configuration N/A RLC configuration UM Sn-FieldLength size5 t-Reordering 0 +9.1.1.5 SBCCH configuration +Parameters +Name Value Semantics description Ver PDCP configuration N/A RLC configuration TM MAC configuration TM +NOTE: RRC will perform padding, if required due to the granularity of the TF signalling, as defined in 8.5. +9.1.1.6 STCH configuration +Parameters +Name Value Semantics description Ver PDCP configuration discardTimer Undefined Up to UE implementation pdcp-SN-Size 16 maxCID 15 profiles RLC configuration Uni-directional UM RLC +UM window size is set to 0 sn-FieldLength 5 logicalChannelIdentity Undefined Selected by the transmitting UE, up to UE implementation Logical channel configuration priority Undefined Selected by the transmitting UE, up to UE implementation prioritisedBitRate Undefined Selected by the transmitting UE, up to UE implementation bucketSizeDuration Undefined Selected by the transmitting UE, up to UE implementation logicalChannelGroup 3 MAC configuration maxHARQ-Tx 4 +9.1.2 SRB configurations +9.1.2.1 SRB1 +Parameters +Name Value Semantics description Ver RLC configuration logicalChannelIdentity 1 +9.1.2.2 SRB2 +Parameters +Name Value Semantics description Ver RLC configuration logicalChannelIdentity 2 +9.2 Default radio configurations +The following sections only list default values for REL-8 parameters included in protocol version v8.5.0. For all fields introduced in a later protocol version, the default value is "released" unless explicitly specified otherwise. If UE is to apply default configuration while it is configured with some critically extended fields, the UE shall apply the original version with only default values. For the following fields, introduced in a protocol version later than v8.5.0, the default corresponds with "value not applicable": +- codeBookSubsetRestriction-v920; +- pmi-RI-Report; +NOTE 1: Value "N/A" indicates that the UE does not apply a specific value (i.e. upon switching to a default configuration, E-UTRAN can not assume the UE keeps the previously configured value). This implies that E-UTRAN needs to configure a value before invoking the related functionality. +NOTE 2: In general, the signalling should preferably support a "release" option for fields introduced after v8.5.0. The "value not applicable" should be used restrictively, mainly limited to for fields which value is relevant only if another field is set to a value other than its default. +9.2.1 SRB configurations +9.2.1.1 SRB1 +Parameters +Name Value Semantics description Ver RLC configuration CHOICE am ul-RLC-Config +>t-PollRetransmit +>pollPDU +>pollByte +>maxRetxThreshold +ms45 +infinity +infinity +t4 dl-RLC-Config +>t-Reordering +>t-StatusProhibit +ms35 +ms0 Logical channel configuration priority 1 Highest priority prioritisedBitRate infinity bucketSizeDuration N/A logicalChannelGroup 0 +9.2.1.2 SRB2 +Parameters +Name Value Semantics description Ver RLC configuration CHOICE am ul-RLC-Config +>t-PollRetransmit +>pollPDU +>pollByte +>maxRetxThreshold +ms45 +infinity +infinity +t4 dl-RLC-Config +>t-Reordering +>t-StatusProhibit +ms35 +ms0 Logical channel configuration priority 3 prioritisedBitRate infinity bucketSizeDuration N/A logicalChannelGroup 0 +9.2.2 Default MAC main configuration +Parameters +Name Value Semantics description Ver MAC main configuration maxHARQ-tx n5 periodicBSR-Timer infinity retxBSR-Timer sf2560 ttiBundling FALSE drx-Config release phr-Config release +9.2.3 Default semi-persistent scheduling configuration +SPS-Config +>sps-ConfigDL +>sps-ConfigUL +release +release +9.2.4 Default physical channel configuration +Parameters +Name Value Semantics description Ver PDSCH-ConfigDedicated +>p-a +dB0 PUCCH-ConfigDedicated +> tdd-AckNackFeedbackMode +>ackNackRepetition +bundling +release +Only valid for TDD mode PUSCH-ConfigDedicated +>betaOffset-ACK-Index +>betaOffset-RI-Index +>betaOffset-CQI-Index +10 +12 +15 UplinkPowerControlDedicated +>p0-UE-PUSCH +>deltaMCS-Enabled +>accumulationEnabled +>p0-UE-PUCCH +>pSRS-Offset +> filterCoefficient +0 +en0 (disabled) +TRUE +0 +7 +fc4 tpc-pdcch-ConfigPUCCH release tpc-pdcch-ConfigPUSCH release CQI-ReportConfig +> CQI-ReportPeriodic +> cqi-ReportModeAperiodic +> nomPDSCH-RS-EPRE-Offset +release +N/A +N/A SoundingRS-UL-ConfigDedicated release AntennaInfoDedicated +>transmissionMode + + + +>codebookSubsetRestriction +>ue-TransmitAntennaSelection +tm1, tm2 + + + +N/A +release +If the number of PBCH antenna ports is one, tm1 is used as default; otherwise tm2 is used as default SchedulingRequestConfig release +9.2.5 Default values timers and constants +Parameters +Name Value Semantics description Ver t310 ms1000 n310 n1 t311 ms1000 n311 n1 +9.3 Sidelink pre-configured parameters +9.3.1 Specified parameters +This section only list parameters which value is specified in the standard. +Parameters +Name Value Semantics description Ver preconfigSync +>syncTxParameters +>>alpha + +0 preconfigComm +>sc-TxParameters +>>alpha +>dataTxParameters +>>alpha + +0 + +0 +9.3.2 Pre-configurable parameters +This ASN.1 segment is the start of the EUTRA definitions of pre-configured sidelink parameters. +NOTE 1: Upper layers are assumed to provide a set of pre-configured parameters that are valid at the current UE location if any, see TS 24.334 [69, 10.2]. +-- ASN1START + +EUTRA-Sidelink-Preconf DEFINITIONS AUTOMATIC TAGS ::= + +BEGIN + +IMPORTS + AdditionalSpectrumEmission, + ARFCN-ValueEUTRA-r9, + FilterCoefficient, + maxSL-TxPool-r12, + P-Max, + SL-CP-Len-r12, + SL-HoppingConfigComm-r12, + SL-OffsetIndicatorSync-r12, + SL-PeriodComm-r12, + RSRP-RangeSL3-r12, + SL-TF-ResourceConfig-r12, + SL-TRPT-Subset-r12, + P0-SL-r12, + TDD-ConfigSL-r12 +FROM EUTRA-RRC-Definitions; + +-- ASN1STOP + + +– SL-Preconfiguration +The IE SL-Preconfiguration includes the sidelink pre-configured parameters. +SL-Preconfiguration information elements +-- ASN1START + +SL-Preconfiguration-r12 ::= SEQUENCE { + preconfigGeneral-r12 SL-PreconfigGeneral-r12, + preconfigSync-r12 SL-PreconfigSync-r12, + preconfigComm-r12 SL-PreconfigCommPoolList4-r12, + ... +} + +SL-PreconfigGeneral-r12 ::= SEQUENCE { + -- PDCP configuration + rohc-Profiles-r12 SEQUENCE { + profile0x0001-r12 BOOLEAN, + profile0x0002-r12 BOOLEAN, + profile0x0004-r12 BOOLEAN, + profile0x0006-r12 BOOLEAN, + profile0x0101-r12 BOOLEAN, + profile0x0102-r12 BOOLEAN, + profile0x0104-r12 BOOLEAN + }, + -- Physical configuration + carrierFreq-r12 ARFCN-ValueEUTRA-r9, + maxTxPower-r12 P-Max, + additionalSpectrumEmission-r12 AdditionalSpectrumEmission, + sl-bandwidth-r12 ENUMERATED {n6, n15, n25, n50, n75, n100}, + tdd-ConfigSL-r12 TDD-ConfigSL-r12, + reserved-r12 BIT STRING (SIZE (19)), + ... +} + +SL-PreconfigSync-r12 ::= SEQUENCE { + syncCP-Len-r12 SL-CP-Len-r12, + syncOffsetIndicator1-r12 SL-OffsetIndicatorSync-r12, + syncOffsetIndicator2-r12 SL-OffsetIndicatorSync-r12, + syncTxParameters-r12 P0-SL-r12, + syncTxThreshOoC-r12 RSRP-RangeSL3-r12, + filterCoefficient-r12 FilterCoefficient, + syncRefMinHyst-r12 ENUMERATED {dB0, dB3, dB6, dB9, dB12}, + syncRefDiffHyst-r12 ENUMERATED {dB0, dB3, dB6, dB9, dB12, dBinf}, + ... +} + +SL-PreconfigCommPoolList4-r12 ::= SEQUENCE (SIZE (1..maxSL-TxPool-r12)) OF SL-PreconfigCommPool-r12 + +SL-PreconfigCommPool-r12 ::= SEQUENCE { +-- This IE is same as SL-CommResourcePool with rxParametersNCell absent + sc-CP-Len-r12 SL-CP-Len-r12, + sc-Period-r12 SL-PeriodComm-r12, + sc-TF-ResourceConfig-r12 SL-TF-ResourceConfig-r12, + sc-TxParameters-r12 P0-SL-r12, + data-CP-Len-r12 SL-CP-Len-r12, + data-TF-ResourceConfig-r12 SL-TF-ResourceConfig-r12, + dataHoppingConfig-r12 SL-HoppingConfigComm-r12, + dataTxParameters-r12 P0-SL-r12, + trpt-Subset-r12 SL-TRPT-Subset-r12, + ... +} + +END + +-- ASN1STOP + +SL-Preconfiguration field descriptions carrierFreq +Indicates the carrier frequency for sidelink operation. In case of FDD it is uplink carrier frequency and the corresponding downlink frequency can be determined from the default TX-RX frequency separation defined in TS 36.101 [42, table 5.7.3-1]. preconfigComm +Indicates a list of resource pools. The first resource pool in the list is used for both reception and transmission of sidelink direct communication. The other resource pools, if present, are only used for reception of sidelink direct communication. syncRefDiffHyst +Hysteresis when evaluating a SyncRef UE using relative comparison. Value dB0 corresponds to 0 dB, dB3 to 3 dB and so on, value dBinf corresponds to infinite dB. syncRefMinHyst +Hysteresis when evaluating a SyncRef UE using absolute comparison. Value dB0 corresponds to 0 dB, dB3 to 3 dB and so on. +NOTE 1: The network may configure one or more of the reception only resource pools in preconfigComm to cover reception from in coverage UEs using scheduled resource allocation. For such a resource pool the network should set all bits of subframeBitmap to 1 and offsetIndicator to indicate the subframe immediately following the sidelink control information. +NOTE 2: The network should ensure that the resources defined by the first entry in preconfigComm (used for transmission by an out of coverage UE) do not overlap with those of the pool(s) covering scheduled transmissions by in coverage UEs. Furthermore, the network should ensure that for none of the entries in preconfigComm the resources defined by sc-TF-ResourceConfig overlap. +10 Radio information related interactions between network nodes +10.1 General +This section specifies RRC messages that are transferred between network nodes. These RRC messages may be transferred to or from the UE via another Radio Access Technology. Consequently, these messages have similar characteristics as the RRC messages that are transferred across the E-UTRA radio interface, i.e. the same transfer syntax and protocol extension mechanisms apply. +10.2 Inter-node RRC messages +10.2.1 General +This section specifies RRC messages that are sent either across the X2- or the S1-interface, either to or from the eNB, i.e. a single 'logical channel' is used for all RRC messages transferred across network nodes. The information could originate from or be destined for another RAT. +– EUTRA-InterNodeDefinitions +This ASN.1 segment is the start of the EUTRA inter-node PDU definitions. +-- ASN1START + +EUTRA-InterNodeDefinitions DEFINITIONS AUTOMATIC TAGS ::= + +BEGIN + +IMPORTS + AntennaInfoCommon, + ARFCN-ValueEUTRA, + ARFCN-ValueEUTRA-v9e0, + ARFCN-ValueEUTRA-r9, + CellIdentity, + C-RNTI, + DL-DCCH-Message, + DRB-Identity, + DRB-ToReleaseList, + InDeviceCoexIndication-r11, + MasterInformationBlock, + maxFreq, + maxDRB, + maxSCell-r10, + maxServCell-r10, + MBMSInterestIndication-r11, + MeasConfig, + MeasGapConfig, + OtherConfig-r9, + PhysCellId, + P-Max, + PowerCoordinationInfo-r12, + SidelinkUEInformation-r12, + SL-CommConfig-r12, + SL-DiscConfig-r12, + RadioResourceConfigDedicated, + RSRP-Range, + RSRQ-Range, + RSRQ-Range-v1250, + SCellToAddModList-r10, + SCG-ConfigPartSCG-r12, + SecurityAlgorithmConfig, + SCellIndex-r10, + SCellToReleaseList-r10, + ServCellIndex-r10, + ShortMAC-I, + SystemInformationBlockType1, + SystemInformationBlockType1-v890-IEs, + SystemInformationBlockType2, + UEAssistanceInformation-r11, + UECapabilityInformation, + UE-CapabilityRAT-ContainerList, + UE-RadioPagingInfo-r12, + WLAN-OffloadConfig-r12 +FROM EUTRA-RRC-Definitions; + +-- ASN1STOP + +10.2.2 Message definitions +– HandoverCommand +This message is used to transfer the handover command generated by the target eNB. +Direction: target eNB to source eNB/ source RAN +HandoverCommand message +-- ASN1START + +HandoverCommand ::= SEQUENCE { + criticalExtensions CHOICE { + c1 CHOICE{ + handoverCommand-r8 HandoverCommand-r8-IEs, + spare7 NULL, + spare6 NULL, spare5 NULL, spare4 NULL, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +HandoverCommand-r8-IEs ::= SEQUENCE { + handoverCommandMessage OCTET STRING (CONTAINING DL-DCCH-Message), + nonCriticalExtension SEQUENCE {} OPTIONAL +} + +-- ASN1STOP + +HandoverCommand field descriptions handoverCommandMessage +Contains the entire DL-DCCH-Message including the RRCConnectionReconfiguration message used to perform handover within E-UTRAN or handover to E-UTRAN, generated (entirely) by the target eNB. +NOTE: The source BSC, in case of inter-RAT handover from GERAN to E-UTRAN, expects that the HandoverCommand message includes DL-DCCH-Message only. Thus, criticalExtensionsFuture, spare1-spare7 and nonCriticalExtension should not be used regardless whether the source RAT is E-UTRAN, UTRAN or GERAN. +– HandoverPreparationInformation +This message is used to transfer the E-UTRA RRC information used by the target eNB during handover preparation, including UE capability information. +Direction: source eNB/ source RAN to target eNB +HandoverPreparationInformation message +-- ASN1START + +HandoverPreparationInformation ::= SEQUENCE { + criticalExtensions CHOICE { + c1 CHOICE{ + handoverPreparationInformation-r8 HandoverPreparationInformation-r8-IEs, + spare7 NULL, + spare6 NULL, spare5 NULL, spare4 NULL, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +HandoverPreparationInformation-r8-IEs ::= SEQUENCE { + ue-RadioAccessCapabilityInfo UE-CapabilityRAT-ContainerList, + as-Config AS-Config OPTIONAL, -- Cond HO + rrm-Config RRM-Config OPTIONAL, + as-Context AS-Context OPTIONAL, -- Cond HO + nonCriticalExtension HandoverPreparationInformation-v920-IEs OPTIONAL +} + +HandoverPreparationInformation-v920-IEs ::= SEQUENCE { + ue-ConfigRelease-r9 ENUMERATED { + rel9, rel10, rel11, rel12, spare4, spare3, + spare2, spare1, ...} OPTIONAL, -- Cond HO2 + nonCriticalExtension HandoverPreparationInformation-v9d0-IEs OPTIONAL +} + +HandoverPreparationInformation-v9d0-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, + nonCriticalExtension HandoverPreparationInformation-v9e0-IEs OPTIONAL +} + +HandoverPreparationInformation-v9e0-IEs ::= SEQUENCE { + as-Config-v9e0 AS-Config-v9e0 OPTIONAL, -- Cond HO2 + nonCriticalExtension HandoverPreparationInformation-v1130-IEs OPTIONAL +} + +HandoverPreparationInformation-v1130-IEs ::= SEQUENCE { + as-Context-v1130 AS-Context-v1130 OPTIONAL, -- Cond HO2 + nonCriticalExtension HandoverPreparationInformation-v1250-IEs OPTIONAL +} + +HandoverPreparationInformation-v1250-IEs ::= SEQUENCE { + ue-SupportedEARFCN-r12 ARFCN-ValueEUTRA-r9 OPTIONAL, -- Cond HO3 + as-Config-v1250 AS-Config-v1250 OPTIONAL, -- Cond HO2 + nonCriticalExtension SEQUENCE {} OPTIONAL +} + +-- ASN1STOP + +HandoverPreparationInformation field descriptions as-Config +The radio resource configuration. Applicable in case of intra-E-UTRA handover. If the target receives an incomplete MeasConfig and RadioResourceConfigDedicated in the as-Config, the target eNB may decide to apply the full configuration option based on the ue-ConfigRelease. as-Context +Local E-UTRAN context required by the target eNB. rrm-Config +Local E-UTRAN context used depending on the target node’s implementation, which is mainly used for the RRM purpose. ue-ConfigRelease +Indicates the RRC protocol release applicable for the current UE configuration. This could be used by target eNB to decide if the full configuration approach should be used. If this field is not present, the target assumes that the current UE configuration is based on the release 8 version of RRC protocol. NOTE 1. ue-RadioAccessCapabilityInfo +NOTE 2 ue-SupportedEARFCN +Includes UE supported EARFCN of the handover target E-UTRA cell if the target E-UTRA cell belongs to multiple frequency bands. +NOTE 1: The source typically sets the ue-ConfigRelease to the release corresponding with the current dedicated radio configuration. The source may however also consider the common radio resource configuration e.g. in case interoperability problems would appear if the UE temporary continues extensions of this part of the configuration in a target PCell not supporting them. +NOTE 2: The following table indicates per source RAT whether RAT capabilities are included or not. +Source RAT E-UTRA capabilites UTRA capabilities GERAN capabilities UTRAN Included May be included, ignored by eNB if received May be included GERAN CS Excluded May be included, ignored by eNB if received Included GERAN PS Excluded May be included, ignored by eNB if received Included E-UTRAN Included May be included May be included +Conditional presence Explanation HO The field is mandatory present in case of handover within E-UTRA; otherwise the field is not present. HO2 The field is optional present in case of handover within E-UTRA; otherwise the field is not present. HO3 The field is optional present in case of handover from GERAN to E-UTRA, otherwise the field is not present. +– SCG-Config +This message is used to transfer the SCG radio configuration generated by the SeNB. +Direction: Secondary eNB to master eNB +SCG-Config message +-- ASN1START + +SCG-Config-r12 ::= SEQUENCE { + criticalExtensions CHOICE { + c1 CHOICE{ + scg-Config-r12 SCG-Config-r12-IEs, + spare7 NULL, + spare6 NULL, spare5 NULL, spare4 NULL, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +SCG-Config-r12-IEs ::= SEQUENCE { + scg-RadioConfig-r12 SCG-ConfigPartSCG-r12 OPTIONAL, + nonCriticalExtension SEQUENCE {} OPTIONAL +} + +-- ASN1STOP + +SCG-Config field descriptions scg-RadioConfig-r12 +Includes the change of the dedicated SCG configuration and, upon addition of an SCG cell, the common SCG configuration. +The SeNB only includes a new SCG cell in response to a request from MeNB, but may include release of an SCG cell release or release of the SCG part of an SCG/Split DRB without prior request from MeNB. The SeNB does not use this field to initiate release of the SCG. +– SCG-ConfigInfo +This message is used by MeNB to request the SeNB to perform certain actions e.g. to establish, modify or release an SCG, and it may include additional information e.g. to assist the SeNB with assigning the SCG configuration. +Direction: Master eNB to secondary eNB +SCG-ConfigInfo message +-- ASN1START + +SCG-ConfigInfo-r12 ::= SEQUENCE { + criticalExtensions CHOICE { + c1 CHOICE{ + scg-ConfigInfo-r12 SCG-ConfigInfo-r12-IEs, + spare7 NULL, + spare6 NULL, spare5 NULL, spare4 NULL, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +SCG-ConfigInfo-r12-IEs ::= SEQUENCE { + radioResourceConfigDedMCG-r12 RadioResourceConfigDedicated OPTIONAL, + sCellToAddModListMCG-r12 SCellToAddModList-r10 OPTIONAL, + measGapConfig-r12 MeasGapConfig OPTIONAL, + powerCoordinationInfo-r12 PowerCoordinationInfo-r12 OPTIONAL, + scg-RadioConfig-r12 SCG-ConfigPartSCG-r12 OPTIONAL, + eutra-CapabilityInfo-r12 OCTET STRING (CONTAINING UECapabilityInformation) OPTIONAL, + scg-ConfigRestrictInfo-r12 SCG-ConfigRestrictInfo-r12 OPTIONAL, + mbmsInterestIndication-r12 OCTET STRING (CONTAINING + MBMSInterestIndication-r11) OPTIONAL, + measResultServCellListSCG-r12 MeasResultServCellListSCG-r12 OPTIONAL, + drb-ToAddModListSCG-r12 DRB-InfoListSCG-r12 OPTIONAL, + drb-ToReleaseListSCG-r12 DRB-ToReleaseList OPTIONAL, + sCellToAddModListSCG-r12 SCellToAddModListSCG-r12 OPTIONAL, + sCellToReleaseListSCG-r12 SCellToReleaseList-r10 OPTIONAL, + p-Max-r12 P-Max OPTIONAL, + nonCriticalExtension SEQUENCE {} OPTIONAL +} + +DRB-InfoListSCG-r12 ::= SEQUENCE (SIZE (1..maxDRB)) OF DRB-InfoSCG-r12 + +DRB-InfoSCG-r12 ::= SEQUENCE { + eps-BearerIdentity-r12 INTEGER (0..15) OPTIONAL, -- Cond DRB-Setup + drb-Identity-r12 DRB-Identity, + drb-Type-r12 ENUMERATED {split, scg} OPTIONAL, -- Cond DRB-Setup + ... +} + +SCellToAddModListSCG-r12 ::= SEQUENCE (SIZE (1..maxSCell-r10)) OF Cell-ToAddMod-r12 + +Cell-ToAddMod-r12 ::= SEQUENCE { + sCellIndex-r12 SCellIndex-r10, + cellIdentification-r12 SEQUENCE { + physCellId-r12 PhysCellId, + dl-CarrierFreq-r12 ARFCN-ValueEUTRA-r9 + } OPTIONAL, -- Cond SCellAdd + measResultCellToAdd-r12 SEQUENCE { + rsrpResult-r12 RSRP-Range, + rsrqResult-r12 RSRQ-Range + } OPTIONAL, -- Cond SCellAdd2 + ... +} + +MeasResultServCellListSCG-r12 ::= SEQUENCE (SIZE (1..maxServCell-r10)) OF MeasResultServCellSCG-r12 + +MeasResultServCellSCG-r12 ::= SEQUENCE { + servCellId-r12 ServCellIndex-r10, + measResultSCell-r12 SEQUENCE { + rsrpResultSCell-r12 RSRP-Range, + rsrqResultSCell-r12 RSRQ-Range + }, + ... +} + +SCG-ConfigRestrictInfo-r12 ::= SEQUENCE { + maxSCH-TB-BitsDL-r12 INTEGER (1..100), + maxSCH-TB-BitsUL-r12 INTEGER (1..100) +} + +-- ASN1STOP + +SCG-ConfigInfo field descriptions drb-ToAddModListSCG +Includes DRBs the SeNB is requested to establish or modify (DRB type change). drb-ToReleaseListSCG +Includes DRBs the SeNB is requested to release. maxSCH-TB-BitsXL +Indicates the maximum DL-SCH/UL-SCH TB bits that may be scheduled in a TTI. Specified as a percentage of the value defined for the applicable UE category. measGapConfig +Includes the current measurement gap configuration. measResultServCellListSCG +Includes measurement results of SCG (serving) cells. radioResourceConfigDedMCG +Includes the current dedicated MCG radio resource configuration. sCellToAddModListMCG +Includes the current MCG SCell configuration. sCellToAddModListSCG +Includes SCG cells the SeNB is requested to establish. Measurement results may be provided for these cells. sCellToReleaseListSCG +Includes SCG cells the SeNB is requested to release. scg-RadioConfig +Includes the current dedicated SCG configuration. scg-ConfigRestrictInfo +Includes fields for which MeNB explictly indicates the restriction to be observed by SeNB. p-Max +Cell specific value i.e. as broadcast by PCell. +Conditional presence Explanation DRB-Setup The field is mandatory present in case DRB establishment is requested; otherwise the field is not present. SCellAdd The field is mandatory present in case SCG cell establishment is requested; otherwise the field is not present. SCellAdd2 The field is optional present in case SCG cell establishment is requested; otherwise the field is not present. +– UERadioAccessCapabilityInformation +This message is used to transfer UE radio access capability information, covering both upload to and download from the EPC. +Direction: eNB to/ from EPC +UERadioAccessCapabilityInformation message +-- ASN1START + +UERadioAccessCapabilityInformation ::= SEQUENCE { + criticalExtensions CHOICE { + c1 CHOICE{ + ueRadioAccessCapabilityInformation-r8 + UERadioAccessCapabilityInformation-r8-IEs, + spare7 NULL, + spare6 NULL, spare5 NULL, spare4 NULL, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +UERadioAccessCapabilityInformation-r8-IEs ::= SEQUENCE { + ue-RadioAccessCapabilityInfo OCTET STRING (CONTAINING UECapabilityInformation), + nonCriticalExtension SEQUENCE {} OPTIONAL +} + +-- ASN1STOP + +UERadioAccessCapabilityInformation field descriptions ue-RadioAccessCapabilityInfo +Including E-UTRA, GERAN, and CDMA2000-1xRTT Bandclass radio access capabilities (separated). UTRA radio access capabilities are not included. +– UERadioPagingInformation +This message is used to transfer radio paging information required for a category 0 UE, covering both upload to and download from the EPC. +Direction: eNB to/ from EPC +UERadioPagingInformation message +-- ASN1START + +UERadioPagingInformation ::= SEQUENCE { + criticalExtensions CHOICE { + c1 CHOICE{ + ueRadioPagingInformation-r12 UERadioPagingInformation-r12-IEs, + spare7 NULL, + spare6 NULL, spare5 NULL, spare4 NULL, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +UERadioPagingInformation-r12-IEs ::= SEQUENCE { + ue-RadioPagingInfo-r12 OCTET STRING (CONTAINING UE-RadioPagingInfo-r12), + nonCriticalExtension SEQUENCE {} OPTIONAL +} + +-- ASN1STOP + +10.3 Inter-node RRC information element definitions +– AS-Config +The AS-Config IE contains information about RRC configuration information in the source eNB which can be utilized by target eNB to determine the need to change the RRC configuration during the handover preparation phase. The information can also be used after the handover is successfully performed or during the RRC connection re-establishment. +AS-Config information element +-- ASN1START + +AS-Config ::= SEQUENCE { + sourceMeasConfig MeasConfig, + sourceRadioResourceConfig RadioResourceConfigDedicated, + sourceSecurityAlgorithmConfig SecurityAlgorithmConfig, + sourceUE-Identity C-RNTI, + sourceMasterInformationBlock MasterInformationBlock, + sourceSystemInformationBlockType1 SystemInformationBlockType1(WITH COMPONENTS + {..., nonCriticalExtension ABSENT}), + sourceSystemInformationBlockType2 SystemInformationBlockType2, + antennaInfoCommon AntennaInfoCommon, + sourceDl-CarrierFreq ARFCN-ValueEUTRA, + ..., + [[ sourceSystemInformationBlockType1Ext OCTET STRING (CONTAINING + SystemInformationBlockType1-v890-IEs) OPTIONAL, + sourceOtherConfig-r9 OtherConfig-r9 + -- sourceOtherConfig-r9 should have been optional. A target eNB compliant with this transfer + -- syntax should support receiving an AS-Config not including this extension addition group + -- e.g. from a legacy source eNB + ]], + [[ sourceSCellConfigList-r10 SCellToAddModList-r10 OPTIONAL + ]], + [[ sourceConfigSCG-r12 SCG-Config-r12 OPTIONAL + ]] +} + +AS-Config-v9e0 ::= SEQUENCE { + sourceDl-CarrierFreq-v9e0 ARFCN-ValueEUTRA-v9e0 +} + +AS-Config-v1250 ::= SEQUENCE { + sourceWlan-OffloadConfig-r12 WLAN-OffloadConfig-r12 OPTIONAL, + sourceSL-CommConfig-r12 SL-CommConfig-r12 OPTIONAL, + sourceSL-DiscConfig-r12 SL-DiscConfig-r12 OPTIONAL +} + +-- ASN1STOP +NOTE: The AS-Config re-uses information elements primarily created to cover the radio interface signalling requirements. Consequently, the information elements may include some parameters that are not relevant for the target eNB e.g. the SFN as included in the MasterInformationBlock. + +AS-Config field descriptions antennaInfoCommon +This field provides information about the number of antenna ports in the source PCell. sourceDL-CarrierFreq +Provides the parameter Downlink EARFCN in the source PCell, see TS 36.101 [42]. If the source eNB provides AS-Config-v9e0, it sets sourceDl-CarrierFreq (i.e. without suffix) to maxEARFCN. sourceOtherConfig +Provides other configuration in the source PCell. sourceMasterInformationBlock +MasterInformationBlock transmitted in the source PCell. sourceMeasConfig +Measurement configuration in the source cell. The measurement configuration for all measurements existing in the source eNB when handover is triggered shall be included. See 10.5. sourceSL-CommConfig +This field covers the sidelink direct communication configuration. sourceSL-DiscConfig +This field covers the sidelink direct discovery configuration. sourceRadioResourceConfig +Radio configuration in the source PCell. The radio resource configuration for all radio bearers existing in the source PCell when handover is triggered shall be included. See 10.5. sourceSCellConfigList +Radio resource configuration (common and dedicated) of the SCells configured in the source eNB. sourceSecurityAlgorithmConfig +This field provides the AS integrity protection (SRBs) and AS ciphering (SRBs and DRBs) algorithm configuration used in the source PCell. sourceSystemInformationBlockType1 +SystemInformationBlockType1 transmitted in the source PCell. sourceSystemInformationBlockType2 +SystemInformationBlockType2 transmitted in the source PCell. +– AS-Context +The IE AS-Context is used to transfer local E-UTRAN context required by the target eNB. + +AS-Context information element +-- ASN1START + +AS-Context ::= SEQUENCE { + reestablishmentInfo ReestablishmentInfo OPTIONAL -- Cond HO +} + +AS-Context-v1130 ::= SEQUENCE { + idc-Indication-r11 OCTET STRING (CONTAINING + InDeviceCoexIndication-r11) OPTIONAL, -- Cond HO2 + mbmsInterestIndication-r11 OCTET STRING (CONTAINING + MBMSInterestIndication-r11) OPTIONAL, -- Cond HO2 + powerPrefIndication-r11 OCTET STRING (CONTAINING + UEAssistanceInformation-r11) OPTIONAL, -- Cond HO2 + ..., + [[ sidelinkUEInformation-r12 OCTET STRING (CONTAINING + SidelinkUEInformation-r12) OPTIONAL -- Cond HO2 + ]] +} + +-- ASN1STOP + +AS-Context field descriptions idc-Indication +Including information used for handling the IDC problems. reestablishmentInfo +Including information needed for the RRC connection re-establishment. +Conditional presence Explanation HO The field is mandatory present in case of handover within E-UTRA; otherwise the field is not present. HO2 The field is optional present in case of handover within E-UTRA; otherwise the field is not present. +– ReestablishmentInfo +The ReestablishmentInfo IE contains information needed for the RRC connection re-establishment. +ReestablishmentInfo information element +-- ASN1START + +ReestablishmentInfo ::= SEQUENCE { + sourcePhysCellId PhysCellId, + targetCellShortMAC-I ShortMAC-I, + additionalReestabInfoList AdditionalReestabInfoList OPTIONAL, + ... +} + +AdditionalReestabInfoList ::= SEQUENCE ( SIZE (1..maxReestabInfo) ) OF AdditionalReestabInfo + +AdditionalReestabInfo ::= SEQUENCE{ + cellIdentity CellIdentity, + key-eNodeB-Star Key-eNodeB-Star, + shortMAC-I ShortMAC-I +} + +Key-eNodeB-Star ::= BIT STRING (SIZE (256)) + +-- ASN1STOP + +ReestablishmentInfo field descriptions additionalReestabInfoList +Contains a list of shortMAC-I and KeNB* for cells under control of the target eNB, required for potential re-establishment by the UE in these cells to succeed. Key-eNodeB-Star +Parameter KeNB*: See TS 33.401 [32, 7.2.8.4]. If the cell identified by cellIdentity belongs to multiple frequency bands, the source eNB selects the DL-EARFCN for the KeNB* calculation using the same logic as UE uses when selecting the DL-EARFCN in IDLE as defined in section 6.2.2. This parameter is only used for X2 handover, and for S1 handover, it shall be ignored by target eNB. sourcePhyCellId +The physical cell identity of the source PCell, used to determine the UE context in the target eNB at re-establishment. targetCellShortMAC-I +The ShortMAC-I for the handover target PCell, in order for potential re-establishment to succeed. +– RRM-Config +The RRM-Config IE contains information about UE specific RRM information before the handover which can be utilized by target eNB. +RRM-Config information element +-- ASN1START + +RRM-Config ::= SEQUENCE { + ue-InactiveTime ENUMERATED { + s1, s2, s3, s5, s7, s10, s15, s20, + s25, s30, s40, s50, min1, min1s20c, min1s40, + min2, min2s30, min3, min3s30, min4, min5, min6, + min7, min8, min9, min10, min12, min14, min17, min20, + min24, min28, min33, min38, min44, min50, hr1, + hr1min30, hr2, hr2min30, hr3, hr3min30, hr4, hr5, hr6, + hr8, hr10, hr13, hr16, hr20, day1, day1hr12, day2, + day2hr12, day3, day4, day5, day7, day10, day14, day19, + day24, day30, dayMoreThan30} OPTIONAL, + ..., + [[ candidateCellInfoList-r10 CandidateCellInfoList-r10 OPTIONAL + ]] +} + +CandidateCellInfoList-r10 ::= SEQUENCE (SIZE (1..maxFreq)) OF CandidateCellInfo-r10 + +CandidateCellInfo-r10 ::= SEQUENCE { + -- cellIdentification + physCellId-r10 PhysCellId, + dl-CarrierFreq-r10 ARFCN-ValueEUTRA, + -- available measurement results + rsrpResult-r10 RSRP-Range OPTIONAL, + rsrqResult-r10 RSRQ-Range OPTIONAL, + ..., + [[ dl-CarrierFreq-v1090 ARFCN-ValueEUTRA-v9e0 OPTIONAL + ]], + [[ rsrqResult-v1250 RSRQ-Range-v1250 OPTIONAL + ]] +} + +-- ASN1STOP + +RRM-Config field descriptions candidateCellInfoList +A list of the best cells on each frequency for which measurement information was available, in order of decreasing RSRP. dl-CarrierFreq +The source includes dl-CarrierFreq-v1090 if and only if dl-CarrierFreq-r10 is set to maxEARFCN. ue-InactiveTime +Duration while UE has not received or transmitted any user data. Thus the timer is still running in case e.g., UE measures the neighbour cells for the HO purpose. Value s1 corresponds to 1 second, s2 corresponds to 2 seconds and so on. Value min1 corresponds to 1 minute, value min1s20 corresponds to 1 minute and 20 seconds, value min1s40 corresponds to 1 minute and 40 seconds and so on. Value hr1 corresponds to 1 hour, hr1min30 corresponds to 1 hour and 30 minutes and so on. +10.4 Inter-node RRC multiplicity and type constraint values +– Multiplicity and type constraints definitions +-- ASN1START + +maxReestabInfo INTEGER ::= 32 -- Maximum number of KeNB* and shortMAC-I forwarded + -- at handover for re-establishment preparation + +-- ASN1STOP + +– End of EUTRA-InterNodeDefinitions +-- ASN1START + +END + +-- ASN1STOP + +10.5 Mandatory information in AS-Config +The AS-Config transferred between source eNB and target-eNB shall include all IEs necessary to describe the AS context. The conditional presence in section 6 is only applicable for eNB to UE communication. +The "need" or "cond" statements are not applied in case of sending the IEs from source eNB to target eNB. Some information elements shall be included regardless of the "need" or "cond" e.g. discardTimer. The AS-Config re-uses information elements primarily created to cover the radio interface signalling requirements. The information elements may include some parameters that are not relevant for the target eNB e.g. the SFN as included in the MasterInformationBlock. +All the fields in the AS-Config as defined in 10.3 that are introduced after v9.2.0 and that are optional for eNB to UE communication shall be included, if the functionality is configured. The fields in the AS-Config that are defined before and including v9.2.0 shall be included as specified in the following. +Within the sourceRadioResourceConfig, sourceMeasConfig and sourceOtherConfig, the source eNB shall include fields that are optional for eNB to UE communication, if the functionality is configured unless explicitly specified otherwise in the following: +- in accordance with a condition that is explicitly stated to be applicable; or +- a default value is defined for the concerned field; and the configured value is the same as the default value that is defined; or +- the need of the field is OP and the current UE configuration corresponds with the behaviour defined for absence of the field; +The following fields, if the functionality is configured, are not mandatory for the source eNB to include in the AS-Config since delta signalling by the target eNB for these fields is not supported: +* semiPersistSchedC-RNTI +* measGapConfig +For the measurement configuration, a corresponding operation as 5.5.6.1 and 5.5.2.2a is executed by target eNB. + +11 UE capability related constraints and performance requirements +11.1 UE capability related constraints +The following table lists constraints regarding the UE capabilities that E-UTRAN is assumed to take into account. +Parameter Description Value #DRBs The number of DRBs that a UE shall support 8 #RLC-AM The number of RLC AM entities that a UE shall support 10 #minCellperMeasObjectEUTRA The minimum number of neighbour cells (excluding black list cells) that a UE shall be able to store within a MeasObjectEUTRA. NOTE. 32 #minBlackCellRangesperMeasObjectEUTRA The minimum number of blacklist cell PCI ranges that a UE shall be able to store within a MeasObjectEUTRA 32 #minCellperMeasObjectUTRA The minimum number of neighbour cells that a UE shall be able to store within a MeasObjectUTRA. NOTE. 32 #minCellperMeasObjectGERAN The minimum number of neighbour cells that a UE shall be able to store within a measObjectGERAN. NOTE. 32 #minCellperMeasObjectCDMA2000 The minimum number of neighbour cells that a UE shall be able to store within a measObjectCDMA2000. NOTE. 32 #minCellTotal The minimum number of neighbour cells (excluding black list cells) that UE shall be able to store in total in all measurement objects configured 256 NOTE: In case of CGI reporting, the limit regarding the cells E-UTRAN can configure includes the cell for which the UE is requested to report CGI i.e. the amount of neighbour cells that can be included is at most (# minCellperMeasObjectRAT - 1), where RAT represents EUTRA/UTRA/GERAN/CDMA2000 respectively. +11.2 Processing delay requirements for RRC procedures +The UE performance requirements for RRC procedures are specified in the following table, by means of a value N: +N = the number of 1ms subframes from the end of reception of the E-UTRAN -> UE message on the UE physical layer up to when the UE shall be ready for the reception of uplink grant for the UE -> E-UTRAN response message with no access delay other than the TTI-alignment (e.g. excluding delays caused by scheduling, the random access procedure or physical layer synchronisation). +NOTE: No processing delay requirements are specified for RN-specific procedures. + +Figure 11.2-1: Illustration of RRC procedure delay + + + +Procedure title: E-UTRAN -> UE UE -> E-UTRAN N Notes RRC Connection Control Procedures RRC connection establishment + RRCConnectionSetup RRCConnectionSetupComplete 15 RRC connection release RRCConnectionRelease NA + RRC connection re-configuration (radio resource configuration) + RRCConnectionReconfiguration RRCConnectionReconfigurationComplete 15 RRC connection re-configuration (measurement configuration) + RRCConnectionReconfiguration RRCConnectionReconfigurationComplete 15 RRC connection re-configuration (intra-LTE mobility) + RRCConnectionReconfiguration RRCConnectionReconfigurationComplete 15 RRC connection reconfiguration (SCell addition/release) RRCConnectionReconfiguration RRCConnectionReconfigurationComplete 20 RRC connection reconfiguration (SCG establishment/ release, SCG cell addition/ release) RRCConnectionReconfiguration RRCConnectionReconfigurationComplete 20 RRC connection re-establishment + RRCConnectionReestablishment RRCConnectionReestablishmentComplete 15 Initial security activation SecurityModeCommand SecurityModeCommandComplete/SecurityModeCommandFailure 10 Initial security activation + RRC connection re-configuration (RB establishment) SecurityModeCommand, RRCConnectionReconfiguration RRCConnectionReconfigurationComplete 20 The two DL messages are transmitted in the same TTI Paging Paging NA Inter RAT mobility Handover to E-UTRA RRCConnectionReconfiguration (sent by other RAT) RRCConnectionReconfigurationComplete NA The performance of this procedure is specified in [50] in case of handover from GSM and [29], [30] in case of handover from UTRA. Handover from E-UTRA MobilityFromEUTRACommand NA The performance of this procedure is specified in [16] Handover from E-UTRA to CDMA2000 HandoverFromEUTRAPreparationRequest (CDMA2000) NA Used to trigger the handover preparation procedure with a CDMA2000 RAT. +The performance of this procedure is specified in [16] Measurement procedures Measurement Reporting MeasurementReport NA Other procedures UE capability transfer UECapabilityEnquiry UECapabilityInformation 10 Counter check CounterCheck CounterCheckResponse 10 Proximity indication ProximityIndication NA UE information UEInformationRequest UEInformationResponse 15 MBMS counting MBMSCountingRequest MBMSCountingResponse NA MBMS interest indication MBMSInterestIndication NA In-device coexistence indication InDeviceCoexIndication NA UE assistance information UEAssistanceInformation NA SCG failure information SCGFailureInformation NA Sidelink UE information SidelinkUEInformation NA +11.3 Void + +Annex A (informative): +Guidelines, mainly on use of ASN.1 +Editor's note No agreements have been reached concerning the extension of RRC PDUs so far. Any statements in this section about the protocol extension mechanism should be considered as FFS. +A.1 Introduction +The following clauses contain guidelines for the specification of RRC protocol data units (PDUs) with ASN.1. +A.2 Procedural specification +A.2.1 General principles +The procedural specification provides an overall high level description regarding the UE behaviour in a particular scenario. +It should be noted that most of the UE behaviour associated with the reception of a particular field is covered by the applicable parts of the PDU specification. The procedural specification may also include specific details of the UE behaviour upon reception of a field, but typically this should be done only for cases that are not easy to capture in the PDU section e.g. general actions, more complicated actions depending on the value of multiple fields. +Likewise, the procedural specification need not specify the UE requirements regarding the setting of fields within the messages that are send to E-UTRAN i.e. this may also be covered by the PDU specification. +A.2.2 More detailed aspects +The following more detailed conventions should be used: +- Bullets: +- Capitals should be used in the same manner as in other parts of the procedural text i.e. in most cases no capital applies since the bullets are part of the sentence starting with 'The UE shall:' +- All bullets, including the last one in a sub-clause, should end with a semi-colon i.e. an ';' +- Conditions +- Whenever multiple conditions apply, a semi-colon should be used at the end of each conditions with the exception of the last one, i.e. as in 'if cond1; or cond2: +A.3 PDU specification +A.3.1 General principles +A.3.1.1 ASN.1 sections +The RRC PDU contents are formally and completely described using abstract syntax notation (ASN.1), see X.680 [13], X.681 (02/2002) [14]. +The complete ASN.1 code is divided into a number of ASN.1 sections in the specifications. In order to facilitate the extraction of the complete ASN.1 code from the specification, each ASN.1 section begins with a text paragraph consisting entirely of an ASN.1 start tag, which consists of a double hyphen followed by a single space and the text string "ASN1START" (in all upper case letters). Each ASN.1 section ends with a text paragraph consisting entirely of an ASN.1 stop tag, which consists of a double hyphen followed by a single space and the text "ASN1STOP" (in all upper case letters): +-- ASN1START + +-- ASN1STOP + +The text paragraphs containing the ASN.1 start and stop tags should not contain any ASN.1 code significant for the complete description of the RRC PDU contents. The complete ASN.1 code may be extracted by copying all the text paragraphs between an ASN.1 start tag and the following ASN.1 stop tag in the order they appear, throughout the specification. +NOTE: A typical procedure for extraction of the complete ASN.1 code consists of a first step where the entire RRC PDU contents description (ultimately the entire specification) is saved into a plain text (ASCII) file format, followed by a second step where the actual extraction takes place, based on the occurrence of the ASN.1 start and stop tags. +A.3.1.2 ASN.1 identifier naming conventions +The naming of identifiers (i.e., the ASN.1 field and type identifiers) should be based on the following guidelines: +- Message (PDU) identifiers should be ordinary mixed case without hyphenation. These identifiers, e.g., the RRCConnectionModificationCommand, should be used for reference in the procedure text. Abbreviated forms of these identifiers should not be used. +- Type identifiers other than PDU identifiers should be ordinary mixed case, with hyphenation used to set off acronyms only where an adjacent letter is a capital, e.g., EstablishmentCause, SelectedPLMN (not Selected-PLMN, since the "d" in "Selected" is lowercase), InitialUE-Identity and MeasSFN-SFN-TimeDifference. +- Field identifiers shall start with a lowercase letter and use mixed case thereafter, e.g., establishmentCause. If a field identifier begins with an acronym (which would normally be in upper case), the entire acronym is lowercase (plmn-Identity, not pLMN-Identity). The acronym is set off with a hyphen (ue-Identity, not ueIdentity), in order to facilitate a consistent search pattern with corresponding type identifiers. +- Identifiers that are likely to be keywords of some language, especially widely used languages, such as C++ or Java, should be avoided to the extent possible. +- Identifiers, other than PDU identifiers, longer than 25 characters should be avoided where possible. It is recommended to use abbreviations, which should be done in a consistent manner i.e. use 'Meas' instead of 'Measurement' for all occurrences. Examples of typical abbreviations are given in table A.3.1.2.1-1 below. +- For future extension: When an extension is introduced a suffix is added to the identifier of the concerned ASN.1 field and/ or type. A suffix of the form "rX" is used, with X indicating the release, for ASN.1 fields or types introduced in a later release (i.e. a release later than the original/ first release of the protocol) as well as for ASN.1 fields or types for which a revision is introduced in a later release replacing a previous version, e.g., Foo-r9 for the Rel-9 version of the ASN.1 type Foo. A suffix of the form "vXYZ" is used for ASN.1 fields or types that only are an extension of a corresponding earlier field or type (see sub-clause A.4), e.g., AnElement-v10b0 for the extension of the ASN.1 type AnElement introduced in version 10.11.0 of the specification. A number 0...9, 10, 11, etc. is used to represent the first part of the version number, indicating the release of the protocol. Lower case letters a, b, c, etc. are used to represent the second (and third) part of the version number if they are greater than 9. In the procedural specification, in field descriptions as well as in headings suffices are not used, unless there is a clear need to distinguish the extension from the original field. +- More generally, in case there is a need to distinguish different variants of an ASN.1 field or IE, a suffix should be added at the end of the identifiers e.g. MeasObjectUTRA, ConfigCommon. When there is no particular need to distinguish the fields (e.g. because the field is included in different IEs), a common field identifier name may be used. This may be attractive e.g. in case the procedural specification is the same for the different variants. +Table A.3.1.2-1: Examples of typical abbreviations used in ASN.1 identifiers +Abbreviation Abbreviated word Comm Communication Conf Confirmation Config Configuration Disc Discovery DL Downlink Ext Extension Freq Frequency Id Identity Ind Indication Info Information Meas Measurement Neigh Neighbour(ing) Param(s) Parameter(s) Persist Persistent Phys Physical Proc Process Reestab Reestablishment Req Request Rx Reception Sched Scheduling Sync Synchronisation Thresh Threshold Tx/ Transm Transmission UL Uplink +NOTE: The table A.3.1.2.1-1 is not exhaustive. Additional abbreviations may be used in ASN.1 identifiers when needed. +A.3.1.3 Text references using ASN.1 identifiers +A text reference into the RRC PDU contents description from other parts of the specification is made using the ASN.1 field or type identifier of the referenced element. The ASN.1 field and type identifiers used in text references should be in the italic font style. The "do not check spelling and grammar" attribute in Word should be set. Quotation marks (i.e., " ") should not be used around the ASN.1 field or type identifier. +A reference to an RRC PDU type should be made using the corresponding ASN.1 type identifier followed by the word "message", e.g., a reference to the RRCConnectionRelease message. +A reference to a specific part of an RRC PDU, or to a specific part of any other ASN.1 type, should be made using the corresponding ASN.1 field identifier followed by the word "field", e.g., a reference to the prioritisedBitRate field in the example below. +-- /example/ ASN1START + +LogicalChannelConfig ::= SEQUENCE { + ul-SpecificParameters SEQUENCE { + priority Priority, + prioritisedBitRate PrioritisedBitRate, + bucketSizeDuration BucketSizeDuration, + logicalChannelGroup INTEGER (0..3) + } OPTIONAL +} + +-- ASN1STOP + +NOTE: All the ASN.1 start tags in the ASN.1 sections, used as examples in this annex to the specification, are deliberately distorted, in order not to include them when the ASN.1 description of the RRC PDU contents is extracted from the specification. +A reference to a specific type of information element should be made using the corresponding ASN.1 type identifier preceded by the acronym "IE", e.g., a reference to the IE LogicalChannelConfig in the example above. +References to a specific type of information element should only be used when those are generic, i.e., without regard to the particular context wherein the specific type of information element is used. If the reference is related to a particular context, e.g., an RRC PDU type (message) wherein the information element is used, the corresponding field identifier in that context should be used in the text reference. +A reference to a specific value of an ASN.1 field should be made using the corresponding ASN.1 value without using quotation marks around the ASN.1 value, e.g., 'if the status field is set to value true'. +A.3.2 High-level message structure +Within each logical channel type, the associated RRC PDU (message) types are alternatives within a CHOICE, as shown in the example below. +-- /example/ ASN1START + +DL-DCCH-Message ::= SEQUENCE { + message DL-DCCH-MessageType +} + +DL-DCCH-MessageType ::= CHOICE { + c1 CHOICE { + dlInformationTransfer DLInformationTransfer, + handoverFromEUTRAPreparationRequest HandoverFromEUTRAPreparationRequest, + mobilityFromEUTRACommand MobilityFromEUTRACommand, + rrcConnectionReconfiguration RRCConnectionReconfiguration, + rrcConnectionRelease RRCConnectionRelease, + securityModeCommand SecurityModeCommand, + ueCapabilityEnquiry UECapabilityEnquiry, + spare1 NULL + }, + messageClassExtension SEQUENCE {} +} + +-- ASN1STOP + +A nested two-level CHOICE structure is used, where the alternative PDU types are alternatives within the inner level c1 CHOICE. +Spare alternatives (i.e., spare1 in this case) may be included within the c1 CHOICE to facilitate future extension. The number of such spare alternatives should not extend the total number of alternatives beyond an integer-power-of-two number of alternatives (i.e., eight in this case). +Further extension of the number of alternative PDU types is facilitated using the messageClassExtension alternative in the outer level CHOICE. +A.3.3 Message definition +Each PDU (message) type is specified in an ASN.1 section similar to the one shown in the example below. +-- /example/ ASN1START + +RRCConnectionReconfiguration ::= SEQUENCE { + rrc-TransactionIdentifier RRC-TransactionIdentifier, + criticalExtensions CHOICE { + c1 CHOICE{ + rrcConnectionReconfiguration-r8 RRCConnectionReconfiguration-r8-IEs, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +RRCConnectionReconfiguration-r8-IEs ::= SEQUENCE { + -- Enter the IEs here. + ... +} + +-- ASN1STOP +Hooks for critical and non-critical extension should normally be included in the PDU type specification. How these hooks are used is further described in sub-clause A.4. +Critical extensions are characterised by a redefinition of the PDU contents and need to be governed by a mechanism for protocol version agreement between the encoder and the decoder of the PDU, such that the encoder is prevented from sending a critically extended version of the PDU type, which is not comprehended by the decoder. +Critical extension of a PDU type is facilitated by a two-level CHOICE structure, where the alternative PDU contents are alternatives within the inner level c1 CHOICE. Spare alternatives (i.e., spare3 down to spare1 in this case) may be included within the c1 CHOICE. The number of spare alternatives to be included in the original PDU specification should be decided case by case, based on the expected rate of critical extension in the future releases of the protocol. +Further critical extension, when the spare alternatives from the original specifications are used up, is facilitated using the criticalExtensionsFuture in the outer level CHOICE. +In PDU types where critical extension is not expected in the future releases of the protocol, the inner level c1 CHOICE and the spare alternatives may be excluded, as shown in the example below. +-- /example/ ASN1START + +RRCConnectionReconfigurationComplete ::= SEQUENCE { + rrc-TransactionIdentifier RRC-TransactionIdentifier, + criticalExtensions CHOICE { + rrcConnectionReconfigurationComplete-r8 + RRCConnectionReconfigurationComplete-r8-IEs, + criticalExtensionsFuture SEQUENCE {} + } +} + +RRCConnectionReconfigurationComplete-r8-IEs ::= SEQUENCE { + -- Enter the IEs here. -- -- Cond condTag + ... +} + +-- ASN1STOP + +Non-critical extensions are characterised by the addition of new information to the original specification of the PDU type. If not comprehended, a non-critical extension may be skipped by the decoder, whilst the decoder is still able to complete the decoding of the comprehended parts of the PDU contents. +Non-critical extensions at locations other than the end of the message or other than at the end of a field contained in a BIT or OCTET STRING are facilitated by use of the ASN.1 extension marker "...". The original specification of a PDU type should normally include the extension marker at the end of the sequence of information elements contained. +Non-critical extensions at the end of the message or at the end of a field that is contained in a BIT or OCTET STRING are facilitated by use of an empty sequence that is marked OPTIONAL e.g. as shown in the following example: +-- /example/ ASN1START + +RRCMessage-r8-IEs ::= SEQUENCE { + field1 InformationElement1, + field2 InformationElement2, + nonCriticalExtension SEQUENCE {} OPTIONAL +} + +-- ASN1STOP + +The ASN.1 section specifying the contents of a PDU type may be followed by a field description table where a further description of, e.g., the semantic properties of the fields may be included. The general format of this table is shown in the example below. The field description table is absent in case there are no fields for which further description needs to be provided e.g. because the PDU does not include any fields, or because an IE is defined for each field while there is nothing specific regarding the use of this IE that needs to be specified. +%PDU-TypeIdentifier% field descriptions %field identifier% +Field description. %field identifier% +Field description. +The field description table has one column. The header row shall contain the ASN.1 type identifier of the PDU type. +The following rows are used to provide field descriptions. Each row shall include a first paragraph with a field identifier (in bold and italic font style) referring to the part of the PDU to which it applies. The following paragraphs at the same row may include (in regular font style), e.g., semantic description, references to other specifications and/ or specification of value units, which are relevant for the particular part of the PDU. +The parts of the PDU contents that do not require a field description shall be omitted from the field description table. +A.3.4 Information elements +Each IE (information element) type is specified in an ASN.1 section similar to the one shown in the example below. +-- /example/ ASN1START + +PRACH-ConfigSIB ::= SEQUENCE { + rootSequenceIndex INTEGER (0..1023), + prach-ConfigInfo PRACH-ConfigInfo +} + +PRACH-Config ::= SEQUENCE { + rootSequenceIndex INTEGER (0..1023), + prach-ConfigInfo PRACH-ConfigInfo OPTIONAL -- Need ON +} + +PRACH-ConfigInfo ::= SEQUENCE { + prach-ConfigIndex ENUMERATED {ffs}, + highSpeedFlag ENUMERATED {ffs}, + zeroCorrelationZoneConfig ENUMERATED {ffs} +} + +-- ASN1STOP + +IEs should be introduced whenever there are multiple fields for which the same set of values apply. IEs may also be defined for other reasons e.g. to break down a ASN.1 definition in to smaller pieces. +A group of closely related IE type definitions, like the IEs PRACH-ConfigSIB and PRACH-Config in this example, are preferably placed together in a common ASN.1 section. The IE type identifiers should in this case have a common base, defined as the generic type identifier. It may be complemented by a suffix to distinguish the different variants. The "PRACH-Config" is the generic type identifier in this example, and the "SIB" suffix is added to distinguish the variant. The sub-clause heading and generic references to a group of closely related IEs defined in this way should use the generic type identifier. +The same principle should apply if a new version, or an extension version, of an existing IE is created for critical or non-critical extension of the protocol (see sub-clause A.4). The new version, or the extension version, of the IE is included in the same ASN.1 section defining the original. A suffix is added to the type identifier, using the naming conventions defined in sub-clause A.3.1.2, indicating the release or version of the where the new version, or extension version, was introduced. +Local IE type definitions, like the IE PRACH-ConfigInfo in the example above, may be included in the ASN.1 section and be referenced in the other IE types defined in the same ASN.1 section. The use of locally defined IE types should be encouraged, as a tool to break up large and complex IE type definitions. It can improve the readability of the code. There may also be a benefit for the software implementation of the protocol end-points, as these IE types are typically provided by the ASN.1 compiler as independent data elements, to be used in the software implementation. +An IE type defined in a local context, like the IE PRACH-ConfigInfo, should not be referenced directly from other ASN.1 sections in the RRC specification. An IE type which is referenced in more than one ASN.1 section should be defined in a separate sub-clause, with a separate heading and a separate ASN.1 section (possibly as one in a set of closely related IE types, like the IEs PRACH-ConfigSIB and PRACH-Config in the example above). Such IE types are also referred to as 'global IEs'. +NOTE: Referring to an IE type, that is defined as a local IE type in the context of another ASN.1 section, does not generate an ASN.1 compilation error. Nevertheless, using a locally defined IE type in that way makes the IE type definition difficult to find, as it would not be visible at an outline level of the specification. It should be avoided. +The ASN.1 section specifying the contents of one or more IE types, like in the example above, may be followed by a field description table, where a further description of, e.g., the semantic properties of the fields of the information elements may be included. This table may be absent, similar as indicated in sub-clause A.3.3 for the specification of the PDU type. The general format of the field description table is the same as shown in sub-clause A.3.3 for the specification of the PDU type. +A.3.5 Fields with optional presence +A field with optional presence may be declared with the keyword DEFAULT. It identifies a default value to be assumed, if the sender does not include a value for that field in the encoding: +-- /example/ ASN1START + +PreambleInfo ::= SEQUENCE { + numberOfRA-Preambles INTEGER (1..64) DEFAULT 1, + ... +} + +-- ASN1STOP + +Alternatively, a field with optional presence may be declared with the keyword OPTIONAL. It identifies a field for which a value can be omitted. The omission carries semantics, which is different from any normal value of the field: +-- /example/ ASN1START + +PRACH-Config ::= SEQUENCE { + rootSequenceIndex INTEGER (0..1023), + prach-ConfigInfo PRACH-ConfigInfo OPTIONAL -- Need ON +} + +-- ASN1STOP + +The semantics of an optionally present field, in the case it is omitted, should be indicated at the end of the paragraph including the keyword OPTIONAL, using a short comment text with a need statement. The need statement includes the keyword "Need", followed by one of the predefined semantics tags (OP, ON or OR) defined in sub-clause 6.1. If the semantics tag OP is used, the semantics of the absent field are further specified either in the field description table following the ASN.1 section, or in procedure text. +A.3.6 Fields with conditional presence +A field with conditional presence is declared with the keyword OPTIONAL. In addition, a short comment text shall be included at the end of the paragraph including the keyword OPTIONAL. The comment text includes the keyword "Cond", followed by a condition tag associated with the field ("UL" in this example): +-- /example/ ASN1START + +LogicalChannelConfig ::= SEQUENCE { + ul-SpecificParameters SEQUENCE { + priority INTEGER (0), + ... + } OPTIONAL -- Cond UL +} + +-- ASN1STOP + +When conditionally present fields are included in an ASN.1 section, the field description table after the ASN.1 section shall be followed by a conditional presence table. The conditional presence table specifies the conditions for including the fields with conditional presence in the particular ASN.1 section. +Conditional presence Explanation UL Specification of the conditions for including the field associated with the condition tag = "UL". Semantics in case of optional presence under certain conditions may also be specified. +The conditional presence table has two columns. The first column (heading: "Conditional presence") contains the condition tag (in italic font style), which links the fields with a condition tag in the ASN.1 section to an entry in the table. The second column (heading: "Explanation") contains a text specification of the conditions and requirements for the presence of the field. The second column may also include semantics, in case of an optional presence of the field, under certain conditions i.e. using the same predefined tags as defined for optional fields in A.3.5. +Conditional presence should primarily be used when presence of a field despends on the presence and/ or value of other fields within the same message. If the presence of a field depends on whether another feature/ function has been configured, while this function can be configured indepedently e.g. by another message and/ or at another point in time, the relation is best reflected by means of a statement in the field description table. +If the ASN.1 section does not include any fields with conditional presence, the conditional presence table shall not be included. +Whenever a field is only applicable in specific cases e.g. TDD, use of conditional presence should be considered. +A.3.7 Guidelines on use of lists with elements of SEQUENCE type +Where an information element has the form of a list (the SEQUENCE OF construct in ASN.1) with the type of the list elements being a SEQUENCE data type, an information element shall be defined for the list elements even if it would not otherwise be needed. +For example, a list of PLMN identities with reservation flags is defined as in the following example: +-- /example/ ASN1START + +PLMN-IdentityInfoList ::= SEQUENCE (SIZE (1..6)) OF PLMN-IdentityInfo + +PLMN-IdentityInfo ::= SEQUENCE { + plmn-Identity PLMN-Identity, + cellReservedForOperatorUse ENUMERATED {reserved, notReserved} +} + +-- ASN1STOP +rather than as in the following (bad) example, which may cause generated code to contain types with unpredictable names: +-- /bad example/ ASN1START + +PLMN-IdentityList ::= SEQUENCE (SIZE (1..6)) OF SEQUENCE { + plmn-Identity PLMN-Identity, + cellReservedForOperatorUse ENUMERATED {reserved, notReserved} +} + +-- ASN1STOP +A.4 Extension of the PDU specifications +A.4.1 General principles to ensure compatibility +It is essential that extension of the protocol does not affect interoperability i.e. it is essential that implementations based on different versions of the RRC protocol are able to interoperate. In particular, this requirement applies for the following kind of protocol extensions: +- Introduction of new PDU types (i.e. these should not cause unexpected behaviour or damage). +- Introduction of additional fields in an extensible PDUs (i.e. it should be possible to ignore uncomprehended extensions without affecting the handling of the other parts of the message). +- Introduction of additional values of an extensible field of PDUs. If used, the behaviour upon reception of an uncomprehended value should be defined. +It should be noted that the PDU extension mechanism may depend on the logical channel used to transfer the message e.g. for some PDUs an implementation may be aware of the protocol version of the peer in which case selective ignoring of extensions may not be required. +The non-critical extension mechanism is the primary mechanism for introducing protocol extensions i.e. the critical extension mechanism is used merely when there is a need to introduce a 'clean' message version. Such a need appears when the last message version includes a large number of non-critical extensions, which results in issues like readability, overhead associated with the extension markers. The critical extension mechanism may also be considered when it is complicated to accommodate the extensions by means of non-critical extension mechanisms. +A.4.2 Critical extension of messages +The mechanisms to critically extend a message are defined in A.3.3. There are both "outer branch" and "inner branch" mechanisms available. The "outer branch" consists of a CHOICE having the name criticalExtensions, with two values, c1 and criticalExtensionsFuture. The criticalExtensionsFuture branch consists of an empty SEQUENCE, while the c1 branch contains the "inner branch" mechanism. +The "inner branch" structure is a CHOICE with values of the form "MessageName-rX-IEs" (e.g., "RRCConnectionReconfiguration-r8-IEs") or "spareX", with the spare values having type NULL. The "-rX-IEs" structures contain the complete structure of the message IEs for the appropriate release; i.e., the critical extension branch for the Rel-10 version of a message includes all Rel-8 and Rel-9 fields (that are not obviated in the later version), rather than containing only the additional Rel-10 fields. +The following guidelines may be used when deciding which mechanism to introduce for a particular message, i.e. only an 'outer branch', or an 'outer branch' in combination with an 'inner branch' including a certain number of spares: +- For certain messages, e.g. initial uplink messages, messages transmitted on a broadcast channel, critical extension may not be applicable. +- An outer branch may be sufficient for messages not including any fields. +- The number of spares within inner branch should reflect the likelihood that the message will be critically extended in future releases (since each release with a critical extension for the message consumes one of the spare values). The estimation of the critical extension likelyhood may be based on the number, size and changeability of the fields included in the message. +- In messages where an inner branch extension mechanism is available, all spare values of the inner branch should be used before any critical extensions are added using the outer branch. +The following example illustrates the use of the critical extension mechanism by showing the ASN.1 of the original and of a later release +-- /example/ ASN1START -- Original release + +RRCMessage ::= SEQUENCE { + rrc-TransactionIdentifier RRC-TransactionIdentifier, + criticalExtensions CHOICE { + c1 CHOICE{ + rrcMessage-r8 RRCMessage-r8-IEs, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +-- ASN1STOP + +-- /example/ ASN1START -- Later release + +RRCMessage ::= SEQUENCE { + rrc-TransactionIdentifier RRC-TransactionIdentifier, + criticalExtensions CHOICE { + c1 CHOICE{ + rrcMessage-r8 RRCMessage-r8-IEs, + rrcMessage-r10 RRCMessage-r10-IEs, + rrcMessage-r11 RRCMessage-r11-IEs, + rrcMessage-r14 RRCMessage-r14-IEs + }, + later CHOICE { + c2 CHOICE{ + rrcMessage-r16 RRCMessage-r16-IEs, + spare7 NULL, spare6 NULL, spare5 NULL, spare4 NULL, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } + } +} + +-- ASN1STOP + +A.4.3 Non-critical extension of messages +A.4.3.1 General principles +The mechanisms to extend a message in a non-critical manner are defined in A.3.3. W.r.t. the use of extension markers, the following additional guidelines apply: +- When further non-critical extensions are added to a message that has been critically extended, the inclusion of these non-critical extensions in earlier critical branches of the message should be avoided when possible. +- The extension marker ("…") is the primary non-critical extension mechanism that is used unless a length determinant is not required. Examples of cases where a length determinant is not required: +- at the end of a message, +- at the end of a structure contained in a BIT STRING or OCTET STRING +- When an extension marker is available, non-critical extensions are preferably placed at the location (e.g. the IE) where the concerned parameter belongs from a logical/ functional perspective (referred to as the 'default extension location') +- It is desirable to aggregate extensions of the same release or version of the specification into a group, which should be placed at the lowest possible level. +- In specific cases it may be preferrable to place extensions elsewhere (referred to as the 'actual extension location') e.g. when it is possible to aggregate several extensions in a group. In such a case, the group should be placed at the lowest suitable level in the message. +- In case placement at the default extension location affects earlier critical branches of the message, locating the extension at a following higher level in the message should be considered. +- In case an extension is not placed at the default extension location, an IE should be defined. The IE's ASN.1 definition should be placed in the same ASN.1 section as the default extension location. In case there are intermediate levels in-between the actual and the default extension location, an IE may be defined for each level. Intermediate levels are primarily introduced for readability and overview. Hence intermediate levels need not allways be introduced e.g. they may not be needed when the default and the actual extension location are within the same ASN.1 section. +A.4.3.2 Further guidelines +Further to the general principles defined in the previous section, the following additional guidelines apply regarding the use of extension markers: +- Extension markers within SEQUENCE +- Extension markers are primarily, but not exclusively, introduced at the higher nesting levels +- Extension markers are introduced for a SEQUENCE comprising several fields as well as for information elements whose extension would result in complex structures without it (e.g. re-introducing another list) +- Extension markers are introduced to make it possible to maintain important information structures e.g. parameters relevant for one particular RAT +- Extension markers are also used for size critical messages (i.e. messages on BCCH, PCCH and CCCH), although introduced somewhat more carefully +- The extension fields introduced (or frozen) in a specific version of the specification are grouped together using double brackets. +- Extension markers within ENUMERATED +- Spare values are used until the number of values reaches the next power of 2, while the extension marker caters for extension beyond that limit +- A suffix of the form "vXYZ" is used for the identifier of each new value, e.g. "value-vXYZ". +- Extension markers within CHOICE: +- Extension markers are introduced when extension is foreseen and when comprehension is not required by the receiver i.e. behaviour is defined for the case where the receiver cannot comprehend the extended value (e.g. ignoring an optional CHOICE field). It should be noted that defining the behaviour of a receiver upon receiving a not comprehended choice value is not required if the sender is aware whether or not the receiver supports the extended value. +- A suffix of the form "vXYZ" is used for the identifier of each new choice value, e.g. "choice-vXYZ". +Non-critical extensions at the end of a message/ of a field contained in an OCTET or BIT STRING: +- When a nonCriticalExtension is actually used, a "Need" statement should not be provided for the field, which always is a group including at least one extension and a field facilitating further possible extensions. For simplicity, it is recommended not to provide a "Need" statement when the field is not actually used either. +Further, more general, guidelines: +- In case a need statement is not provided for a group, a "Need" statement is provided for all individual extension fields within the group i.e. including for fields that are not marked as OPTIONAL. The latter is to clarify the action upon absence of the whole group. +A.4.3.3 Typical example of evolution of IE with local extensions +The following example illustrates the use of the extension marker for a number of elementary cases (sequence, enumerated, choice). The example also illustrates how the IE may be revised in case the critical extension mechanism is used. +NOTE In case there is a need to support further extensions of release n while the ASN.1 of release (n+1) has been frozen, without requiring the release n receiver to support decoding of release (n+1) extensions, more advanced mechanisms are needed e.g. including multiple extension markers. +-- /example/ ASN1START + +InformationElement1 ::= SEQUENCE { + field1 ENUMERATED { + value1, value2, value3, value4-v880, + ..., value5-v960 }, + field2 CHOICE { + field2a BOOLEAN, + field2b InformationElement2b, + ..., + field2c-v960 InformationElement2c-r9 + }, + ..., + [[ field3-r9 InformationElement3-r9 OPTIONAL -- Need OR + ]], + [[ field3-v9a0 InformationElement3-v9a0 OPTIONAL, -- Need OR + field4-r9 InformationElement4 OPTIONAL -- Need OR + ]] +} + +InformationElement1-r10 ::= SEQUENCE { + field1 ENUMERATED { + value1, value2, value3, value4-v880, + value5-v960, value6-v1170, spare2, spare1, ... }, + field2 CHOICE { + field2a BOOLEAN, + field2b InformationElement2b, + field2c-v960 InformationElement2c-r9, + ..., + field2d-v12b0 INTEGER (0..63) + }, + field3-r9 InformationElement3-r10 OPTIONAL, -- Need OR + field4-r9 InformationElement4 OPTIONAL, -- Need OR + field5-r10 BOOLEAN, + field6-r10 InformationElement6-r10 OPTIONAL, -- Need OR + ..., + [[ field3-v1170 InformationElement3-v1170 OPTIONAL -- Need OR + ]] +} + +-- ASN1STOP + +Some remarks regarding the extensions of InformationElement1 as shown in the above example: +– The InformationElement1 is initially extended with a number of non-critical extensions. In release 10 however, a critical extension is introduced for the message using this IE. Consequently, a new version of the IE InformationElement1 (i.e. InformationElement1-r10) is defined in which the earlier non-critical extensions are incorporated by means of a revision of the original field. +– The value4-v880 is replacing a spare value defined in the original protocol version for field1. Likewise value6-v1170 replaces spare3 that was originally defined in the r10 version of field1 +– Within the critically extended release 10 version of InformationElement1, the names of the original fields/ IEs are not changed, unless there is a real need to distinguish them from other fields/ IEs. E.g. the field1 and InformationElement4 were defined in the original protocol version (release 8) and hence not tagged. Moreover, the field3-r9 is introduced in release 9 and not re-tagged; although, the InformationElement3 is also critically extended and therefore tagged InformationElement3-r10 in the release 10 version of InformationElement1. +A.4.3.4 Typical examples of non critical extension at the end of a message +The following example illustrates the use of non-critical extensions at the end of the message or at the end of a field that is contained in a BIT or OCTET STRING i.e. when an empty sequence is used. +-- /example/ ASN1START + +RRCMessage-r8-IEs ::= SEQUENCE { + field1 InformationElement1, + field2 InformationElement2, + field3 InformationElement3 OPTIONAL, -- Need ON + nonCriticalExtension RRCMessage-v860-IEs OPTIONAL +} + +RRCMessage-v860-IEs ::= SEQUENCE { + field4-v860 InformationElement4 OPTIONAL, -- Need OP + field5-v860 BOOLEAN OPTIONAL, -- Cond C54 + nonCriticalExtension RRCMessage-v940-IEs OPTIONAL +} + +RRCMessage-v940-IEs ::= SEQUENCE { + field6-v940 InformationElement6-r9 OPTIONAL, -- Need OR + nonCriticalExtensions SEQUENCE {} OPTIONAL +} + +-- ASN1STOP + +Some remarks regarding the extensions shown in the above example: +– The InformationElement4 is introduced in the original version of the protocol (release 8) and hence no suffix is used. +A.4.3.5 Examples of non-critical extensions not placed at the default extension location +The following example illustrates the use of non-critical extensions in case an extension is not placed at the default extension location. +– ParentIE-WithEM +The IE ParentIE-WithEM is an example of a high level IE including the extension marker (EM). The root encoding of this IE includes two lower level IEs ChildIE1-WithoutEM and ChildIE2-WithoutEM which not include the extension marker. Consequently, non-critical extensions of the Child-IEs have to be included at the level of the Parent-IE. +The example illustrates how the two extension IEs ChildIE1-WithoutEM-vNx0 and ChildIE2-WithoutEM-vNx0 (both in release N) are used to connect non-critical extensions with a default extension location in the lower level IEs to the actual extension location in this IE. +ParentIE-WithEM information element +-- /example/ ASN1START + +ParentIE-WithEM ::= SEQUENCE { + -- Root encoding, including: + childIE1-WithoutEM ChildIE1-WithoutEM OPTIONAL, -- Need ON + childIE2-WithoutEM ChildIE2-WithoutEM OPTIONAL, -- Need ON + ..., + [[ childIE1-WithoutEM-vNx0 ChildIE1-WithoutEM-vNx0 OPTIONAL, -- Need ON + childIE2-WithoutEM-vNx0 ChildIE2-WithoutEM-vNx0 OPTIONAL -- Need ON + ]] +} + +-- ASN1STOP + +Some remarks regarding the extensions shown in the above example: +– The fields childIEx-WithoutEM-vNx0 may not really need to be optional (depends on what is defined at the next lower level). +– In general, especially when there are several nesting levels, fields should be marked as optional only when there is a clear reason. + +– ChildIE1-WithoutEM +The IE ChildIE1-WithoutEM is an example of a lower level IE, used to control certain radio configurations including a configurable feature which can be setup or released using the local IE ChIE1-ConfigurableFeature. The example illustrates how the new field chIE1-NewField is added in release N to the configuration of the configurable feature. The example is based on the following assumptions: +– when initially configuring as well as when modifying the new field, the original fields of the configurable feature have to be provided also i.e. as if the extended ones were present within the setup branch of this feature. +– when the configurable feature is released, the new field should be released also. +– when omitting the original fields of the configurable feature the UE continues using the existing values (which is used to optimise the signalling for features that typically continue unchanged upon handover). +– when omitting the new field of the configurable feature the UE releases the existing values and discontinues the associated functionality (which may be used to support release of unsupported functionality upon handover to an eNB supporting an earlier protocol version). +The above assumptions, which affect the use of conditions and need codes, may not always apply. Hence, the example should not be re-used blindly. +ChildIE1-WithoutEM information elements +-- /example/ ASN1START + +ChildIE1-WithoutEM ::= SEQUENCE { + -- Root encoding, including: + chIE1-ConfigurableFeature ChIE1-ConfigurableFeature OPTIONAL -- Need ON +} + +ChildIE1-WithoutEM-vNx0 ::= SEQUENCE { + chIE1-ConfigurableFeature-vNx0 ChIE1-ConfigurableFeature-vNx0 OPTIONAL -- Cond ConfigF +} + +ChIE1-ConfigurableFeature ::= CHOICE { + release NULL, + setup SEQUENCE { + -- Root encoding + } +} + +ChIE1-ConfigurableFeature-vNx0 ::= SEQUENCE { + chIE1-NewField-rN INTEGER (0..31) +} + +-- ASN1STOP + +Conditional presence Explanation ConfigF The field is optional present, need OR, in case of chIE1-ConfigurableFeature is included and set to "setup"; otherwise the field is not present and the UE shall delete any existing value for this field. +– ChildIE2-WithoutEM +The IE ChildIE2-WithoutEM is an example of a lower level IE, typically used to control certain radio configurations. The example illustrates how the new field chIE1-NewField is added in release N to the configuration of the configurable feature. +ChildIE2-WithoutEM information element +-- /example/ ASN1START + +ChildIE2-WithoutEM ::= CHOICE { + release NULL, + setup SEQUENCE { + -- Root encoding + } +} + +ChildIE2-WithoutEM-vNx0 ::= SEQUENCE { + chIE2-NewField-rN INTEGER (0..31) OPTIONAL -- Cond ConfigF +} + +-- ASN1STOP + +Conditional presence Explanation ConfigF The field is optional present, need OR, in case of chIE2-ConfigurableFeature is included and set to "setup"; otherwise the field is not present and the UE shall delete any existing value for this field. +A.5 Guidelines regarding inclusion of transaction identifiers in RRC messages +The following rules provide guidance on which messages should include a Transaction identifier +1: DL messages on CCCH that move UE to RRC-Idle should not include the RRC transaction identifier. +2: All network initiated DL messages by default should include the RRC transaction identifier. +3: All UL messages that are direct response to a DL message with an RRC Transaction identifier should include the RRC Transaction identifier. +4: All UL messages that require a direct DL response message should include an RRC transaction identifier. +5: All UL messages that are not in response to a DL message nor require a corresponding response from the network should not include the RRC Transaction identifier. +A.6 Protection of RRC messages (informative) +The following list provides information which messages can be sent (unprotected) prior to security activation and which messages can be sent unprotected after security activation. +P…Messages that can be sent (unprotected) prior to security activation +A - I…Messages that can be sent without integrity protection after security activation +A - C…Messages that can be sent unciphered after security activation +NA… Message can never be sent after security activation +Message P A-I A-C Comment CSFBParametersRequestCDMA2000 + - - CSFBParametersResponseCDMA2000 + - - CounterCheck - - - CounterCheckResponse - - - DLInformationTransfer + - - HandoverFromEUTRAPreparationRequest (CDMA2000) - - - InDeviceCoexIndication - - - InterFreqRSTDMeasurementIndication - - - LoggedMeasurementsConfiguration - - - MasterInformationBlock + + + MBMSCountingRequest + + + MBMSCountingResponse - - - MBMSInterestIndication + - - MBSFNAreaConfiguration + + + MeasurementReport + - - Justification for case “P”: RAN2 agreed that measurement configuration may be sent prior to security activation MobilityFromEUTRACommand - - - Paging + + + SidelinkUEInformation + - - ProximityIndication - - - RNReconfiguration - - - RNReconfigurationComplete - - - RRCConnectionReconfiguration + - - The message shall not be sent unprotected before security activation if it is used to perform handover or to establish SRB2 and DRBs RRCConnectionReconfigurationComplete + - - Unprotected, if sent as response to RRCConnectionReconfiguration which was sent before security activation RRCConnectionReestablishment - + + This message is not protected by PDCP operation. RRCConnectionReestablishmentComplete - - - RRCConnectionReestablishmentReject - + + One reason to send this may be that the security context has been lost, therefore sent as unprotected. RRCConnectionReestablishmentRequest - - + This message is not protected by PDCP operation. However a short MAC-I is included. RRCConnectionReject + NA NA RRCConnectionRelease + - - Justification for P: If the RRC connection only for signalling not requiring DRBs or ciphered messages, or the signalling connection has to be released prematurely, this message is sent as unprotected. RRCConnectionRequest + NA NA RRCConnectionSetup + NA NA RRCConnectionSetupComplete + NA NA SecurityModeCommand + NA NA Integrity protection applied, but no ciphering (integrity verification done after the message received by RRC) SecurityModeComplete - NA NA Integrity protection applied, but no ciphering. Ciphering is applied after completing the procedure. SecurityModeFailure + NA NA Neither integrity protection nor ciphering applied. SystemInformation + + + SystemInformationBlockType1 + + + UEAssistanceInformation - - - UECapabilityEnquiry + - - UECapabilityInformation + - - SCGFailureInformation - - - UEInformationRequest - - - UEInformationResponse - - - ULHandoverPreparationTransfer (CDMA2000) - - - This message should follow HandoverFromEUTRAPreparationRequest ULInformationTransfer + - - +A.7 Miscellaneous +The following miscellaneous conventions should be used: +- References: Whenever another specification is referenced, the specification number and optionally the relevant subclause, table or figure, should be indicated in addition to the pointer to the References section e.g. as follows: 'see TS 36.212 [22, 5.3.3.1.6]'. + +Annex B (normative): Release 8 and 9 AS feature handling +B.1 Feature group indicators +This annex contains the definitions of the bits in fields featureGroupIndicators (in Table B.1-1) and featureGroupIndRel9Add (in Table B.1-1a). +In this release of the protocol, the UE shall include the fields featureGroupIndicators in the IE UE-EUTRA-Capability and featureGroupIndRel9Add in the IE UE-EUTRA-Capability-v9a0. All the functionalities defined within the field featureGroupIndicators defined in Table B.1-1 or Table B.1-1a are mandatory for the UE, if the related capability (frequency band, RAT, SR-VCC or Inter-RAT ANR) is also supported. For a specific indicator, if all functionalities for a feature group listed in Table B.1-1 have been implemented and tested, the UE shall set the indicator as one (1), else (i.e. if any one of the functionalities in a feature group listed in Table B.1-1 or Table B.1-1a, which have not been implemented or tested), the UE shall set the indicator as zero (0). +The UE shall set all indicators that correspond to RATs not supported by the UE as zero (0). +The UE shall set all indicators, which do not have a definition in Table B.1-1 or Table B.1-1a, as zero (0). +If the optional fields featureGroupIndicators or featureGroupIndRel9Add are not included by a UE of a future release, the network may assume that all features pertaining to the RATs supported by the UE, respectively listed in Table B.1-1 or Table B.1-1a and deployed in the network, have been implemented and tested by the UE. +In Table B.1-1, a 'VoLTE capable UE' corresponds to a UE which is IMS voice capable. +The indexing in Table B.1-1a starts from index 33, which is the leftmost bit in the field featureGroupIndRel9Add. + +Table B.1-1: Definitions of feature group indicators +Index of indicator (bit number) Definition +(description of the supported functionality, if indicator set to one) Notes If indicated "Yes" the feature shall be implemented and successfully tested for this version of the specification FDD/ TDD diff 1 (leftmost bit) - Intra-subframe frequency hopping for PUSCH scheduled by UL grant +- DCI format 3a (TPC commands for PUCCH and PUSCH with single bit power adjustments) +- Aperiodic CQI/PMI/RI reporting on PUSCH: Mode 2-0 – UE selected subband CQI without PMI +- Aperiodic CQI/PMI/RI reporting on PUSCH: Mode 2-2 – UE selected subband CQI with multiple PMI Yes 2 - Simultaneous CQI and ACK/NACK on PUCCH, i.e. PUCCH format 2a and 2b +- Absolute TPC command for PUSCH +- Resource allocation type 1 for PDSCH +- Periodic CQI/PMI/RI reporting on PUCCH: Mode 2-0 – UE selected subband CQI without PMI +- Periodic CQI/PMI/RI reporting on PUCCH: Mode 2-1 – UE selected subband CQI with single PMI Yes 3 - 5bit RLC UM SN +- 7bit PDCP SN - can only be set to 1 if the UE has set bit number 7 to 1. Yes, if UE supports VoLTE. +Yes, if UE supports SRVCC to EUTRAN from GERAN. No 4 - Short DRX cycle - can only be set to 1 if the UE has set bit number 5 to 1. Yes 5 - Long DRX cycle +- DRX command MAC control element Yes No 6 - Prioritised bit rate Yes No 7 - RLC UM - can only be set to 0 if the UE does not support VoLTE Yes, if UE supports VoLTE. +Yes, if UE supports SRVCC to EUTRAN from GERAN. No 8 - EUTRA RRC_CONNECTED to UTRA FDD or UTRA TDD CELL_DCH PS handover, if the UE supports either only UTRAN FDD or only UTRAN TDD + +- EUTRA RRC_CONNECTED to UTRA FDD CELL_DCH PS handover, if the UE supports both UTRAN FDD and UTRAN TDD - can only be set to 1 if the UE has set bit number 22 to 1 Yes for FDD, if UE supports UTRA FDD Yes 9 - EUTRA RRC_CONNECTED to GERAN GSM_Dedicated handover - related to SR-VCC +- can only be set to 1 if the UE has set bit number 23 to 1 Yes, if UE supports SRVCC to EUTRAN from GERAN. Yes 10 - EUTRA RRC_CONNECTED to GERAN (Packet_) Idle by Cell Change Order +- EUTRA RRC_CONNECTED to GERAN (Packet_) Idle by Cell Change Order with NACC (Network Assisted Cell Change) Yes 11 - EUTRA RRC_CONNECTED to CDMA2000 1xRTT CS Active handover - related to SR-VCC +- can only be set to 1 if the UE has sets bit number 24 to 1 Yes 12 - EUTRA RRC_CONNECTED to CDMA2000 HRPD Active handover - can only be set to 1 if the UE has set bit number 26 to 1 Yes 13 - Inter-frequency handover (within FDD or TDD) - can only be set to 1 if the UE has set bit number 25 to 1 Yes, unless UE only supports band 13 No 14 - Measurement reporting event: Event A4 – Neighbour > threshold +- Measurement reporting event: Event A5 – Serving < threshold1 & Neighbour > threshold2 Yes No 15 - Measurement reporting event: Event B1 – Neighbour > threshold for UTRAN FDD or UTRAN TDD, if the UE supports either only UTRAN FDD or only UTRAN TDD and has set bit number 22 to 1 + +- Measurement reporting event: Event B1 – Neighbour > threshold for UTRAN FDD or UTRAN TDD, if the UE supports both UTRAN FDD and UTRAN TDD and has set bit number 22 or 39 to 1, respectively + +- Measurement reporting event: Event B1 – Neighbour > threshold for GERAN, 1xRTT or HRPD, if the UE has set bit number 23, 24 or 26 to 1, respectively - can only be set to 1 if the UE has set at least one of the bit number 22, 23, 24, 26 or 39 to 1. +- even if the UE sets bits 41, it shall still set bit 15 to 1 if measurement reporting event B1 is tested for all RATs supported by UE Yes for FDD, if UE supports only UTRAN FDD and does not support UTRAN TDD or GERAN or 1xRTT or HRPD Yes 16 - Intra-frequency periodical measurement reporting where triggerType is set to periodical and purpose is set to reportStrongestCells + +- Inter-frequency periodical measurement reporting where triggerType is set to periodical and purpose is set to reportStrongestCells, if the UE has set bit number 25 to 1 + +- Inter-RAT periodical measurement reporting where triggerType is set to periodical and purpose is set to reportStrongestCells for UTRAN FDD or UTRAN TDD, if the UE supports either only UTRAN FDD or only UTRAN TDD and has set bit number 22 to 1 + +- Inter-RAT periodical measurement reporting where triggerType is set to periodical and purpose is set to reportStrongestCells for UTRAN FDD or UTRAN TDD, if the UE supports both UTRAN FDD and UTRAN TDD and has set bit number 22 or 39 to 1, respectively + +- Inter-RAT periodical measurement reporting where triggerType is set to periodical and purpose is set to reportStrongestCells for GERAN, 1xRTT or HRPD, if the UE has set bit number 23, 24 or 26 to 1, respectively. + +NOTE: Event triggered periodical reporting (i.e., with triggerType set to event and with reportAmount > 1) is a mandatory functionality of event triggered reporting and therefore not the subject of this bit. Yes No 17 Intra-frequency ANR features including: +- Intra-frequency periodical measurement reporting where triggerType is set to periodical and purpose is set to reportStrongestCells +- Intra-frequency periodical measurement reporting where triggerType is set to periodical and purpose is set to reportCGI - can only be set to 1 if the UE has set bit number 5 to 1. Yes No 18 Inter-frequency ANR features including: +- Inter-frequency periodical measurement reporting where triggerType is set to periodical and purpose is set to reportStrongestCells +- Inter-frequency periodical measurement reporting where triggerType is set to periodical and purpose is set to reportCGI - can only be set to 1 if the UE has set bit number 5 and bit number 25 to 1. Yes, unless UE only supports band 13 No 19 Inter-RAT ANR features including: +- Inter-RAT periodical measurement reporting where triggerType is set to periodical and purpose is set to reportStrongestCells for GERAN, if the UE has set bit number 23 to 1 +- Inter-RAT periodical measurement reporting where triggerType is set to periodical and purpose is set to reportStrongestCellsForSON for UTRAN FDD or UTRAN TDD, if the UE supports either only UTRAN FDD or only UTRAN TDD and has set bit number 22 to 1 +- Inter-RAT periodical measurement reporting where triggerType is set to periodical and purpose is set to reportStrongestCellsForSON for UTRAN FDD or UTRAN TDD, if the UE supports both UTRAN FDD and UTRAN TDD and has set bit number 22 or 39 to 1, respectively +- Inter-RAT periodical measurement reporting where triggerType is set to periodical and purpose is set to reportStrongestCellsForSON for 1xRTT or HRPD, if the UE has set bit number 24 or 26 to 1, respectively +- Inter-RAT periodical measurement reporting where triggerType is set to periodical and purpose is set to reportCGI for UTRAN FDD or UTRAN TDD, if the UE supports either only UTRAN FDD or only UTRANTDD and has set bit number 22 to 1 +- Inter-RAT periodical measurement reporting where triggerType is set to periodical and purpose is set to reportCGI for UTRAN FDD or UTRAN TDD, if the UE supports both UTRAN FDD and UTRAN TDD and has set bit number 22 or 39 to 1, respectively +- Inter-RAT periodical measurement reporting where triggerType is set to periodical and purpose is set to reportCGI for GERAN, 1xRTT or HRPD, if the UE has set bit number 23, 24 or 26 to 1, respectively - can only be set to 1 if the UE has set bit number 5 to 1 and the UE has set at least one of the bit number 22, 23, 24 or 26 to 1. +- even if the UE sets bits 33 to 37, it shall still set bit 19 to 1 if inter-RAT ANR features are tested for all RATs for which inter-RAT measurement reporting is indicated as tested Yes 20 If bit number 7 is set to 0: +- SRB1 and SRB2 for DCCH + 8x AM DRB + +If bit number 7 is set to 1: +- SRB1 and SRB2 for DCCH + 8x AM DRB +- SRB1 and SRB2 for DCCH + 5x AM DRB + 3x UM DRB + +NOTE: UE which indicate support for a DRB combination also support all subsets of the DRB combination. Therefore, release of DRB(s) never results in an unsupported DRB combination. + - Regardless of what bit number 7 and bit number 20 is set to, UE shall support at least SRB1 and SRB2 for DCCH + 4x AM DRB +- Regardless of what bit number 20 is set to, if bit number 7 is set to 1, UE shall support at least SRB1 and SRB2 for DCCH + 4x AM DRB + 1x UM DRB + Yes No 21 - Predefined intra- and inter-subframe frequency hopping for PUSCH with N_sb > 1 +- Predefined inter-subframe frequency hopping for PUSCH with N_sb > 1 No 22 - UTRAN FDD or UTRAN TDD measurements, reporting and measurement reporting event B2 in E-UTRA connected mode, if the UE supports either only UTRAN FDD or only UTRAN TDD + +- UTRAN FDD measurements, reporting and measurement reporting event B2 in E-UTRA connected mode, if the UE supports both UTRAN FDD and UTRAN TDD Yes for FDD, if UE supports UTRA FDD Yes 23 - GERAN measurements, reporting and measurement reporting event B2 in E-UTRA connected mode Yes 24 - 1xRTT measurements, reporting and measurement reporting event B2 in E-UTRA connected mode Yes for FDD, if UE supports enhanced 1xRTT CSFB for FDD +Yes for TDD, if UE supports enhanced 1xRTT CSFB for TDD Yes 25 - Inter-frequency measurements and reporting in E-UTRA connected mode + +NOTE: The UE setting this bit to 1 and indicating support for FDD and TDD frequency bands in the UE capability signalling implements and is tested for FDD measurements while the UE is in TDD, and for TDD measurements while the UE is in FDD. Yes, unless UE only supports band 13 No 26 - HRPD measurements, reporting and measurement reporting event B2 in E-UTRA connected mode Yes for FDD, if UE supports HRPD Yes 27 - EUTRA RRC_CONNECTED to UTRA FDD or UTRA TDD CELL_DCH CS handover, if the UE supports either only UTRAN FDD or only UTRAN TDD + +- EUTRA RRC_CONNECTED to UTRA FDD CELL_DCH CS handover, if the UE supports both UTRAN FDD and UTRAN TDD - related to SR-VCC +- can only be set to 1 if the UE has set bit number 8 to 1 and supports SR-VCC from EUTRA defined in TS 24.008 [49] Yes for FDD, if UE supports VoLTE and UTRA FDD Yes 28 - TTI bundling Yes for FDD Yes 29 - Semi-Persistent Scheduling Yes 30 - Handover between FDD and TDD - can only be set to 1 if the UE has set bit number 13 to 1 No 31 - Indicates whether the UE supports the mechanisms defined for cells broadcasting multi band information i.e. comprehending multiBandInfoList, disregarding in RRC_CONNECTED the related system information fields and understanding the EARFCN signalling for all bands, that overlap with the bands supported by the UE, and that are defined in the earliest version of TS 36.101 [42] that includes all UE supported bands. Yes No 32 Undefined +NOTE: The column FDD/ TDD diff indicates if the UE is allowed to signal different values for FDD and TDD. + + +Table B.1-1a: Definitions of feature group indicators +Index of indicator (bit number) Definition +(description of the supported functionality, if indicator set to one) Notes If indicated "Yes" the feature shall be implemented and successfully tested for this version of the specification FDD/ TDD diff 33 (leftmost bit) Inter-RAT ANR features for UTRAN FDD including: +- Inter-RAT periodical measurement reporting where triggerType is set to periodical and purpose is set to reportStrongestCellsForSON +- Inter-RAT periodical measurement reporting where triggerType is set to periodical and purpose is set to reportCGI - can only be set to 1 if the UE has set bit number 5 and bit number 22 to 1. + Yes 34 Inter-RAT ANR features for GERAN including: +- Inter-RAT periodical measurement reporting where triggerType is set to periodical and purpose is set to reportStrongestCells +- Inter-RAT periodical measurement reporting where triggerType is set to periodical and purpose is set to reportCGI - can only be set to 1 if the UE has set bit number 5 and bit number 23 to 1. + Yes 35 Inter-RAT ANR features for 1xRTT including: +- Inter-RAT periodical measurement reporting where triggerType is set to periodical and purpose is set to reportStrongestCellsForSON +- Inter-RAT periodical measurement reporting where triggerType is set to periodical and purpose is set to reportCGI - can only be set to 1 if the UE has set bit number 5 and bit number 24 to 1. + Yes 36 Inter-RAT ANR features for HRPD including: +- Inter-RAT periodical measurement reporting where triggerType is set to periodical and purpose is set to reportStrongestCellsForSON +- Inter-RAT periodical measurement reporting where triggerType is set to periodical and purpose is set to reportCGI - can only be set to 1 if the UE has set bit number 5 and bit number 26 to 1. + Yes 37 Inter-RAT ANR features for UTRAN TDD including: +- Inter-RAT periodical measurement reporting where triggerType is set to periodical and purpose is set to reportStrongestCellsForSON +- Inter-RAT periodical measurement reporting where triggerType is set to periodical and purpose is set to reportCGI - can only be set to 1 if the UE has set bit number 5 and at least one of the bit number 22 (for UEs supporting only UTRA TDD) or the bit number 39 to 1. Yes 38 - EUTRA RRC_CONNECTED to UTRA TDD CELL_DCH PS handover, if the UE supports both UTRAN FDD and UTRAN TDD - can only be set to 1 if the UE has set bit number 39 to 1 Yes 39 - UTRAN TDD measurements, reporting and measurement reporting event B2 in E-UTRA connected mode, if the UE supports both UTRAN FDD and UTRAN TDD Yes 40 - EUTRA RRC_CONNECTED to UTRA TDD CELL_DCH CS handover, if the UE supports both UTRAN FDD and UTRAN TDD - related to SR-VCC +- can only be set to 1 if the UE has set bit number 38 to 1 Yes 41 Measurement reporting event: Event B1 – Neighbour > threshold for UTRAN FDD, if the UE supports UTRAN FDD and has set bit number 22 to 1 Yes for FDD, unless UE has set bit number 15 to 1 Yes 42 Undefined 43 Undefined 44 Undefined 45 Undefined 46 Undefined 47 Undefined 48 Undefined 49 Undefined 50 Undefined 51 Undefined 52 Undefined 53 Undefined 54 Undefined 55 Undefined 56 Undefined 57 Undefined 58 Undefined 59 Undefined 60 Undefined 61 Undefined 62 Undefined 63 Undefined 64 Undefined +NOTE: The column FDD/ TDD diff indicates if the UE is allowed to signal different values for FDD and TDD. Annex E specifies for which TDD and FDD serving cells a UE supporting TDD/FDD CA shall support a feature for which it indicates support within the FGI signalling. + +Clarification for mobility from EUTRAN and inter-frequency handover within EUTRAN +There are several feature groups related to mobility from E-UTRAN and inter-frequency handover within EUTRAN. The description of these features is based on the assumption that we have 5 main "functions" related to mobility from E-UTRAN: +A. Support of measurements and cell reselection procedure in idle mode +B. Support of RRC release with redirection procedure in connected mode +C. Support of Network Assisted Cell Change in connected mode +D. Support of measurements and reporting in connected mode +E. Support of handover procedure in connected mode +All functions can be applied for mobility to Inter-frequency to EUTRAN, GERAN, UTRAN, CDMA2000 HRPD and CDMA2000 1xRTT except for function C) which is only applicable for mobility to GERAN. Table B.1-2 below summarises the mobility functions that are supported based on the UE capability signaling (band support) and the setting of the feature group support indicators. +Table B.1-2: Mobility from E-UTRAN +Feature GERAN UTRAN HRPD 1xRTT EUTRAN A. Measurements and cell reselection procedure in E-UTRA idle mode Supported if GERAN band support is indicated Supported if UTRAN band support is indicated Supported if CDMA2000 HRPD band support is indicated Supported if CDMA2000 1xRTT band support is indicated Supported for supported bands B. RRC release with blind redirection procedure in E-UTRA connected mode Supported if GERAN band support is indicated Supported if UTRAN band support is indicated Supported if CDMA2000 HRPD band support is indicated Supported if CDMA2000 1xRTT band support is indicated Supported for supported bands C. Cell Change Order (with or without) Network Assisted Cell Change) in E-UTRA connected mode Group 10 N.A. N.A N.A N.A. D. Inter-frequency/RAT measurements, reporting and measurement reporting event B2 (for inter-RAT) in E-UTRA connected mode Group 23 Group 22/39 Group 26 Group 24 Group 25 E. Inter-frequency/RAT handover procedure in E-UTRA connected mode Group 9 (GSM_connected handover) +Separate UE capability bit defined in TS 36.306 for PS handover Group 8/38 (PS handover) or Group 27/40 (SRVCC handover) Group 12 Group 11 Group 13 (within FDD or TDD) +Group 30 (between FDD and TDD) +In case measurements and reporting function is not supported by UE, the network may still issue the mobility procedures redirection (B) and CCO (C) in a blind fashion. +B.2 CSG support +In this release of the protocol, it is mandatory for the UE to support a minimum set of CSG functionality consisting of: +- Identifying whether a cell is CSG or not; +- Ignoring CSG cells in cell selection/reselection. +Additional CSG functionality in AS, i.e. the requirement to detect and camp on CSG cells when the "CSG whitelist" is available or when manual CSG selection is triggered by the user, are related to the corresponding NAS features. This additional AS functionality consists of: +- Manual CSG selection; +- Autonomous CSG search; +- Implicit priority handling for cell reselection with CSG cells. +It is possible that this additional CSG functionality in AS is not supported or tested in early UE implementations. +Note that since the above AS features relate to idle mode operations, the capability support is not signalled to the network. For these reasons, no "feature group indicator" is assigned to this feature to indicate early support in Rel-8. + +Annex C (normative): Release 10 AS feature handling +C.1 Feature group indicators +This annex contains the definitions of the bits in field featureGroupIndRel10. +In this release of the protocol, the UE shall include the field featureGroupIndRel10 in the IE UE-EUTRA-Capability-v1020-IEs. All the functionalities defined within the field featureGroupIndRel10 defined in Table C.1-1 are mandatory for the UE, if the related capability (spatial multiplexing in UL, PDSCH transmission mode 9, carrier aggregation, handover to EUTRA, or RAT) is also supported. For a specific indicator, if all functionalities for a feature group listed in Table C.1-1 have been implemented and tested, the UE shall set the indicator as one (1), else (i.e. if any one of the functionalities in a feature group listed in Table C.1-1 have not been implemented or tested), the UE shall set the indicator as zero (0). +The UE shall set all indicators that correspond to RATs not supported by the UE as zero (0). +The UE shall set all indicators, which do not have a definition in Table C.1-1, as zero (0). +If the optional field featureGroupIndRel10 is not included by a UE of a future release, the network may assume that all features, listed in Table C.1-1 and deployed in the network, have been implemented and tested by the UE. +The indexing in Table C.1-1 starts from index 101, which is the leftmost bit in the field featureGroupIndRel10. +Table C.1-1: Definitions of feature group indicators +Index of indicator Definition +(description of the supported functionality, if indicator set to one) Notes If indicated "Yes" the feature shall be implemented and successfully tested for this version of the specification FDD/ TDD diff 101 (leftmost bit) - DMRS with OCC (orthogonal cover code) and SGH (sequence group hopping) disabling - if the UE supports two or more layers for spatial multiplexing in UL, this bit shall be set to 1. +- If a category 0 UE does not support this feature, this bit shall be set to 0. No 102 - Trigger type 1 SRS (aperiodic SRS) transmission (Up to X ports) + +NOTE: X = number of supported layers on given band Yes 103 - PDSCH transmission mode 9 when up to 4 CSI reference signal ports are configured - for Category 8 UEs, this bit shall be set to 1. Yes 104 - PDSCH transmission mode 9 for TDD when 8 CSI reference signal ports are configured - if the UE does not support TDD, this bit is irrelevant (capability signalling exists for FDD for this feature), and this bit shall be set to 0. +- for Category 8 UEs, this bit shall be set to 1. No 105 - Periodic CQI/PMI/RI reporting on PUCCH: Mode 2-0 – UE selected subband CQI without PMI, when PDSCH transmission mode 9 is configured +- Periodic CQI/PMI/RI reporting on PUCCH: Mode 2-1 – UE selected subband CQI with single PMI, when PDSCH transmission mode 9 and up to 4 CSI reference signal ports are configured - this bit can be set to 1 only if indices 2 (Table B.1-1) and 103 are set to 1. +- For UEs capable of TDD-FDD CA, this bit can be set to 1 for both FDD and TDD if index 2 is set to 1 for both FDD and TDD, and index 103 is set to 1 either for FDD and TDD. Yes 106 - Periodic CQI/PMI/RI/PTI reporting on PUCCH: Mode 2-1 – UE selected subband CQI with single PMI, when PDSCH transmission mode 9 and 8 CSI reference signal ports are configured - this bit can be set to 1 only if the UE supports PDSCH transmission mode 9 with 8 CSI reference signal ports (i.e., for TDD, if index 104 is set to 1, and for FDD, if tm9-With-8Tx-FDD-r10 is set to ‘supported’) and if index 2 (Table B.1-1) is set to 1. +- For UEs capable of TDD-FDD CA, this bit can be set to 1 for both FDD and TDD if either index 104 is set to 1 or tm9-With-8Tx-FDD-r10 is set to ‘supported’, and if index 2 is set to 1 for both FDD and TDD. Yes 107 - Aperiodic CQI/PMI/RI reporting on PUSCH: Mode 2-0 – UE selected subband CQI without PMI, when PDSCH transmission mode 9 is configured +- Aperiodic CQI/PMI/RI reporting on PUSCH: Mode 2-2 – UE selected subband CQI with multiple PMI, when PDSCH transmission mode 9 and up to 4 CSI reference signal ports are configured - this bit can be set to 1 only if indices 1 (Table B.1-1) and 103 are set to 1. Yes 108 - Aperiodic CQI/PMI/RI reporting on PUSCH: Mode 2-2 – UE selected subband CQI with multiple PMI, when PDSCH transmission mode 9 and 8 CSI reference signal ports are configured - this bit can be set to 1 only if the UE supports PDSCH transmission mode 9 with 8 CSI reference signal ports (i.e., for TDD, if index 104 is set to 1, and for FDD, if tm9-With-8Tx-FDD-r10 is set to ‘supported’) and if index 1 (Table B.1-1) is set to 1. Yes 109 - Periodic CQI/PMI/RI reporting on PUCCH Mode 1-1, submode 1 - this bit can be set to 1 only if the UE supports PDSCH transmission mode 9 with 8 CSI reference signal ports (i.e., for TDD, if index 104 is set to 1, and for FDD, if tm9-With-8Tx-FDD-r10 is set to ‘supported’). +- For UEs capable of TDD-FDD CA, this bit can be set to 1 for both FDD and TDD if either index 104 is set to 1 or tm9-With-8Tx-FDD-r10 is set to ‘supported’. Yes 110 - Periodic CQI/PMI/RI reporting on PUCCH Mode 1-1, submode 2 - this bit can be set to 1 only if the UE supports PDSCH transmission mode 9 with 8 CSI reference signal ports (i.e., for TDD, if index 104 is set to 1, and for FDD, if tm9-With-8Tx-FDD-r10 is set to ‘supported’). +- For UEs capable of TDD-FDD CA, this bit can be set to 1 for both FDD and TDD if either index 104 is set to 1 or tm9-With-8Tx-FDD-r10 is set to ‘supported’. Yes 111 - Measurement reporting trigger Event A6 - this bit can be set to 1 only if the UE supports carrier aggregation. Yes 112 - SCell addition within the Handover to EUTRA procedure - this bit can be set to 1 only if the UE supports carrier aggregation and the Handover to EUTRA procedure. Yes 113 - Trigger type 0 SRS (periodic SRS) transmission on X Serving Cells + +NOTE: X = number of supported component carriers in a given band combination - this bit can be set to 1 only if the UE supports carrier aggregation in UL. Yes 114 - Reporting of both UTRA CPICH RSCP and Ec/N0 in a Measurement Report - this bit can be set to 1 only if index 22 (Table B.1-1) is set to 1. No 115 - time domain ICIC RLM/RRM measurement subframe restriction for the serving cell +- time domain ICIC RRM measurement subframe restriction for neighbour cells +- time domain ICIC CSI measurement subframe restriction Yes 116 - Relative transmit phase continuity for spatial multiplexing in UL - this bit can be set to 1 only if the UE supports two or more layers for spatial multiplexing in UL. Yes 117 Undefined 118 Undefined 119 Undefined 120 Undefined 121 Undefined 122 Undefined 123 Undefined 124 Undefined 125 Undefined 126 Undefined 127 Undefined 128 Undefined 129 Undefined 130 Undefined 131 Undefined 132 Undefined +NOTE: The column FDD/ TDD diff indicates if the UE is allowed to signal different values for FDD and TDD. Annex E specifies for which TDD and FDD serving cells a UE supporting TDD/FDD CA shall support a feature for which it indicates support within the FGI signalling. + + +Annex D (informative): +Descriptive background information +D.1 Signalling of Multiple Frequency Band Indicators (Multiple FBI) +D.1.1 Mapping between frequency band indicator and multiple frequency band indicator +This subclause describes the use of the Multiple Frequency Band Indicator (MFBI) lists and the E-UTRA frequency bands in SystemInformationBlockType1 by means of an example as shown in Figure D.1.1-1. In this example: +- E-UTRAN cell belongs to band B90 and also bands B6, B7, B91, and B92. +- The freqBandIndicatorPriority field is not present in SystemInformationBlockType1. +- E-UTRAN uses B64 to indicate the presence of B90 in freqBandIndicator-v9e0. +- For the MFBI list of this cell, E-UTRAN uses B64 in MultiBandInfoList to indicate the position and priority of the bands in MultiBandInfoList-v9e0. +- The UE, after reading SystemInformationBlockType1, generates an MFBI list with priority of B91, B6, B92, and B7. If the UE supports the frequency band in the freqBandIndicator-v9e0 IE it applies that frequency band. Otherwise, the UE applies the first listed band in the MFBI list which it supports. + +Figure D.1.1-1: Mapping of frequency bands to MultiBandInfoList/MultiBandInfoList-v9e0 +D.1.2 Mapping between inter-frequency neighbour list and multiple frequency band indicator +This subclause describes the use of the Multiple Frequency Band Indicator (MFBI) lists and the E-UTRA frequencies signalled in SystemInformationBlockType5 by means of an example as shown in Figure D.1.2-1. In this example: +- E-UTRAN includes 4 frequencies (EARFCNs): the bands associated with f1 and f4 belong to bands lower than 64; the bands associated with f2 and f3 belong to bands larger than 64. The reserved EARFCN value of 65535 is used to indicate the presence of ARFCN-ValueEUTRA-v9e0. +- The band associated with f1 has two overlapping bands, B1 and B2 (lower than 64); the band associated with f2 has one overlapping band, B91; the band associated with f3 has four overlapping bands B3, B4, B92, and B93; the band associated with f4 does not have overlapping bands. +- E-UTRAN includes 4 lists in both interFreqCarrierFreqList-v8h0 and interFreqCarrierFreqList-v9e0 and ensure the order of the lists is matching. Each list corresponds to one EARFCN and contains up to 8 bands. The first list corresponds to f1, the second list corresponds to f2, and so on. The grey lists mean not including MultiBandInfoList or MultiBandInfoList-v9e0, i.e. the corresponding EARFCN does not have any overlapping frequency bands in MultiBandInfoList or MultiBandInfoList-v9e0. + +Figure D.1.2-1: Mapping of EARFCNs to MultiBandInfoList/MultiBandInfoList-v9e0 +D.1.3 Mapping between UTRA FDD frequency list and multiple frequency band indicator +This subclause describes the use of the Multiple Frequency Band Indicator (MFBI) lists and the UTRA FDD frequencies signalled in SystemInformationBlockType6 by means of an example as shown in Figure D.1.3-1. In this example: +- E-UTRAN includes 4 UTRA FDD frequencies (UARFCNs). +- The bands associated with f1 and f4 have no overlapping bands. The band associated with f2 has two overlapping bands, B1 and B2. The band associated with f3 has one overlapping band, B3. +- E-UTRAN includes 4 lists in carrierFreqListUTRA-FDD-v8h0 with the first and fourth entry not including MultiBandInfoList. + + +Figure D.1.3-1: Mapping of UARFCNs to MultiBandInfoList + +Annex E (normative): +TDD/FDD differentiation of FGIs/capabilities in TDD-FDD CA +Annex E specifies for which TDD and FDD serving cells a UE supporting TDD/FDD CA shall support a feature/capability for which it indicates support within the FGI/capability signalling. +A UE that indicates support for TDD/ FDD CA: +- For the fields for which the UE is allowed to indicate different support for FDD and TDD, the UE shall support the feature on the PCell and/or SCell(s), as specified in tables E-1, E-2 and E-3 in accordance to the following rules: +- PCell: the UE shall support the feature for the PCell, if the UE indicates support of the feature for the PCell duplex mode; +- SCell: the UE shall support the feature for SCell(s), if the UE indicates support of the feature for the SCell duplex mode; +- Per serving cell: the UE shall support the feature for a serving cell if the UE indicates support of the feature for the serving cell’s duplex mode; +- All serving cells: UE shall support the feature if the UE indicates support of the feature for both TDD and FDD duplex modes; +- For the fields where the UE is not allowed to indicate different support for FDD and TDD, the UE shall support the feature for PCell and SCell(s) if the UE indicates support of the feature via the common FGI/capability bit. +Table E-1: Rel-8/9 FGIs for which FDD/TDD differentiation is allowed (from Annex B) +Index of indicator Classification 1 Per serving cell 2 All serving cells 4 All serving cells 8 PCell 9 PCell 10 PCell 11 PCell 12 PCell 15 PCell 19 PCell 22 PCell 23 PCell 24 PCell 26 PCell 27 PCell 28 PCell 29 PCell 33 PCell 34 PCell 35 PCell 36 PCell 37 PCell 38 PCell 39 PCell 40 PCell 41 PCell +Table E-2: Rel-10 FGIs for which FDD/TDD differentiation is allowed (from Annex C) +Index of indicator Classification 102 Per serving cell 103 Per serving cell 105 All serving cells 106 All serving cells 107 All serving cells 108 All serving cells 109 All serving cells 110 All serving cells 111 SCell 112 PCell 113 Per serving cell 115 PCell 116 Per serving cell +Table E-3: Rel-12 UE-EUTRA capabilities for which FDD/TDD differentiation is allowed +UE-EUTRA-Capability Classification crossCarrierScheduling All serving cells e-CSFB-1XRTT PCell e-CSFB-ConcPS-Mob1XRTT PCell e-CSFB-dual-1XRTT PCell ePDCCH Per serving cell e-RedirectionUTRA PCell e-RedirectionUTRA-TDD PCell inDeviceCoexInd All serving cells interFreqRSTD-Measurement PCell interFreqSI-AcquisitionForHO PCell interRAT-PS-HO-ToGERAN PCell intraFreqSI-AcquisitionForHO PCell mbms-Scell SCell mbms-NonServingCell SCell multiACK-CSIreporting PCell multiClusterPUSCH-WithinCC Per serving cell otdoa-UE-Assisted PCell pmi-Disabling Per serving cell rsrqMeasWideband Per serving cell simultaneousPUCCH-PUSCH All serving cells ss-CCH-InterfHandl PCell txDiv-PUCCH1b-ChSelect PCell ue-TxAntennaSelectionSupported Per serving cell utran-SI-AcquisitionForHO PCell +Annex F (informative): +Change history + +Change history Date TSG # TSG Doc. CR Rev Subject/Comment Old New 12/2007 RP-38 RP-070920 - Approved at TSG-RAN #38 and placed under Change Control 1.0.0 8.0.0 03/2008 RP-39 RP-080163 0001 4 CR to 36.331 with Miscellaneous corrections 8.0.0 8.1.0 03/2008 RP-39 RP-080164 0002 2 CR to 36.331 to convert RRC to agreed ASN.1 format 8.0.0 8.1.0 05/2008 RP-40 RP-080361 0003 1 CR to 36.331 on Miscellaneous clarifications/ corrections 8.1.0 8.2.0 09/2008 RP-41 RP-080693 0005 - CR on Miscellaneous corrections and clarifications 8.2.0 8.3.0 12/2008 RP-42 RP-081021 0006 - Miscellaneous corrections and clarifications 8.3.0 8.4.0 03/2009 RP-43 RP-090131 0007 - Correction to the Counter Check procedure 8.4.0 8.5.0 RP-43 RP-090131 0008 - CR to 36.331-UE Actions on Receiving SIB11 8.4.0 8.5.0 RP-43 RP-090131 0009 1 Spare usage on BCCH 8.4.0 8.5.0 RP-43 RP-090131 0010 - Issues in handling optional IE upon absence in GERAN NCL 8.4.0 8.5.0 RP-43 RP-090131 0011 - CR to 36.331 on Removal of useless RLC re-establishment at RB release 8.4.0 8.5.0 RP-43 RP-090131 0012 1 Clarification to RRC level padding at PCCH and BCCH 8.4.0 8.5.0 RP-43 RP-090131 0013 - Removal of Inter-RAT message 8.4.0 8.5.0 RP-43 RP-090131 0014 - Padding of the SRB-ID for security input 8.4.0 8.5.0 RP-43 RP-090131 0015 - Validity of ETWS SIB 8.4.0 8.5.0 RP-43 RP-090131 0016 1 Configuration of the Two-Intervals-SPS 8.4.0 8.5.0 RP-43 RP-090131 0017 - Corrections on Scaling Factor Values of Qhyst 8.4.0 8.5.0 RP-43 RP-090131 0018 1 Optionality of srsMaxUppts 8.4.0 8.5.0 RP-43 RP-090131 0019 - CR for discussion on field name for common and dedicated IE 8.4.0 8.5.0 RP-43 RP-090131 0020 - Corrections to Connected mode mobility 8.4.0 8.5.0 RP-43 RP-090131 0021 - Clarification regarding the measurement reporting procedure 8.4.0 8.5.0 RP-43 RP-090131 0022 1 Corrections on s-Measure 8.4.0 8.5.0 RP-43 RP-090131 0023 1 R1 of CR0023 (R2-091029) on combination of SPS and TTI bundling for TDD 8.4.0 8.5.0 RP-43 RP-090131 0024 - L3 filtering for path loss measurements 8.4.0 8.5.0 RP-43 RP-090131 0025 1 S-measure handling for reportCGI 8.4.0 8.5.0 RP-43 RP-090131 0026 1 Measurement configuration clean up 8.4.0 8.5.0 RP-43 RP-090131 0027 - Alignment of measurement quantities for UTRA 8.4.0 8.5.0 RP-43 RP-090131 0028 - CR to 36.331 on L1 parameters ranges alignment 8.4.0 8.5.0 RP-43 RP-090131 0029 - Default configuration for transmissionMode 8.4.0 8.5.0 RP-43 RP-090131 0030 - CR to 36.331 on RRC Parameters for MAC, RLC and PDCP 8.4.0 8.5.0 RP-43 RP-090131 0031 1 CR to 36.331 - Clarification on Configured PRACH Freq Offset 8.4.0 8.5.0 RP-43 RP-090131 0032 - Clarification on TTI bundling configuration 8.4.0 8.5.0 RP-43 RP-090131 0033 1 Update of R2-091039 on Inter-RAT UE Capability 8.4.0 8.5.0 RP-43 RP-090133 0034 - Feature Group Support Indicators 8.4.0 8.5.0 RP-43 RP-090131 0036 - Corrections to RLF detection 8.4.0 8.5.0 RP-43 RP-090131 0037 - Indication of Dedicated Priority 8.4.0 8.5.0 RP-43 RP-090131 0038 2 Security Clean up 8.4.0 8.5.0 RP-43 RP-090131 0039 - Correction of TTT value range 8.4.0 8.5.0 RP-43 RP-090131 0040 - Correction on CDMA measurement result IE 8.4.0 8.5.0 RP-43 RP-090131 0041 1 Clarification of Measurement Reporting 8.4.0 8.5.0 RP-43 RP-090131 0042 - Spare values in DL and UL Bandwidth in MIB and SIB2 8.4.0 8.5.0 RP-43 RP-090131 0044 1 Clarifications to System Information Block Type 8 8.4.0 8.5.0 RP-43 RP-090131 0045 - Reception of ETWS secondary notification 8.4.0 8.5.0 RP-43 RP-090131 0046 1 Validity time for ETWS message Id and Sequence No 8.4.0 8.5.0 RP-43 RP-090131 0047 - CR for Timers and constants values used during handover to E-UTRA 8.4.0 8.5.0 RP-43 RP-090131 0048 - Inter-RAT Security Clarification 8.4.0 8.5.0 RP-43 RP-090131 0049 - CR to 36.331 on consistent naming of 1xRTT identifiers 8.4.0 8.5.0 RP-43 RP-090131 0050 - Capturing RRC behavior regarding NAS local release 8.4.0 8.5.0 RP-43 RP-090131 0051 - Report CGI before T321 expiry and UE null reporting 8.4.0 8.5.0 RP-43 RP-090131 0052 - System Information and 3 hour validity 8.4.0 8.5.0 RP-43 RP-090131 0053 1 Inter-Node AS Signalling 8.4.0 8.5.0 RP-43 RP-090131 0054 - Set of values for the parameter "messagePowerOffsetGroupB" 8.4.0 8.5.0 RP-43 RP-090131 0055 - CR to paging reception for ETWS capable UEs in RRC_CONNECTED 8.4.0 8.5.0 RP-43 RP-090131 0056 1 CR for CSG related items in 36.331 8.4.0 8.5.0 RP-43 RP-090131 0057 1 SRS common configuration 8.4.0 8.5.0 RP-43 RP-090131 0058 - RRC processing delay 8.4.0 8.5.0 RP-43 RP-090131 0059 - CR for HNB Name 8.4.0 8.5.0 RP-43 RP-090131 0060 3 Handover to EUTRA delta configuration 8.4.0 8.5.0 RP-43 RP-090131 0063 - Delivery of Message Identifier and Serial Number to upper layers for ETWS 8.4.0 8.5.0 RP-43 RP-090131 0066 - Clarification on the maximum size of cell lists 8.4.0 8.5.0 RP-43 RP-090131 0067 - Missing RRC messages in 'Protection of RRC messages' 8.4.0 8.5.0 RP-43 RP-090131 0069 1 Clarification on NAS Security Container 8.4.0 8.5.0 RP-43 RP-090131 0071 - Extension of range of CQI/PMI configuration index 8.4.0 8.5.0 RP-43 RP-090131 0072 1 Access barring alleviation in RRC connection establishment 8.4.0 8.5.0 RP-43 RP-090367 0077 6 Corrections to feature group support indicators 8.4.0 8.5.0 RP-43 RP-090131 0078 - CR from email discussion to capture DRX and TTT handling 8.4.0 8.5.0 RP-43 RP-090131 0079 1 Need Code handling on BCCH messages 8.4.0 8.5.0 RP-43 RP-090131 0080 - Unification of T300 and T301 and removal of miscallaneous FFSs 8.4.0 8.5.0 RP-43 RP-090131 0084 1 Proposed CR modifying the code-point definitions of neighbourCellConfiguration 8.4.0 8.5.0 RP-43 RP-090131 0087 2 Remove Redundant Optionality in SIB8 8.4.0 8.5.0 RP-43 RP-090131 0089 - Corrections to the generic error handling 8.4.0 8.5.0 RP-43 RP-090131 0090 - Configurability of T301 8.4.0 8.5.0 RP-43 RP-090131 0091 1 Correction related to TTT 8.4.0 8.5.0 RP-43 RP-090131 0095 - CR for 36.331 on SPS-config 8.4.0 8.5.0 RP-43 RP-090131 0096 2 CR for Deactivation of periodical measurement 8.4.0 8.5.0 RP-43 RP-090131 0099 2 SMC and reconfiguration 8.4.0 8.5.0 RP-43 RP-090131 0101 - TDD handover 8.4.0 8.5.0 RP-43 RP-090131 0102 - Corrections to system information acquisition 8.4.0 8.5.0 RP-43 RP-090131 0106 - Some Corrections and Clarifications to 36.331 8.4.0 8.5.0 RP-43 RP-090131 0109 - Clarification on the Maximum number of ROHC context sessions parameter 8.4.0 8.5.0 RP-43 RP-090131 0110 - Transmission of rrm-Config at Inter-RAT Handover 8.4.0 8.5.0 RP-43 RP-090131 0111 1 Use of SameRefSignalsInNeighbor parameter 8.4.0 8.5.0 RP-43 RP-090131 0112 - Default serving cell offset for measurement event A3 8.4.0 8.5.0 RP-43 RP-090131 0114 - dl-EARFCN missing in HandoverPreparationInformation 8.4.0 8.5.0 RP-43 RP-090131 0115 - Cleanup of references to 36.101 8.4.0 8.5.0 RP-43 RP-090131 0117 - Correction to the value range of UE-Categories 8.4.0 8.5.0 RP-43 RP-090131 0122 1 Correction on RRC connection re-establishment 8.4.0 8.5.0 RP-43 RP-090131 0124 - Performing Measurements to report CGI for CDMA2000 8.4.0 8.5.0 RP-43 RP-090131 0125 - CDMA2000-SystemTimeInfo in VarMeasurementConfiguration 8.4.0 8.5.0 RP-43 RP-090131 0126 - UE Capability Information for CDMA2000 1xRTT 8.4.0 8.5.0 RP-43 RP-090131 0127 - CDMA2000 related editorial changes 8.4.0 8.5.0 RP-43 RP-090131 0128 - Draft CR to 36.331 on State mismatch recovery at re-establishment 8.4.0 8.5.0 RP-43 RP-090131 0129 1 Draft CR to 36.331 on Renaming of AC barring related IEs 8.4.0 8.5.0 RP-43 RP-090131 0130 2 Draft CR to 36.331 on Inheriting of dedicated priorities at inter-RAT reselection 8.4.0 8.5.0 RP-43 RP-090131 0135 - Proposed CR to 36.331 Description alignment for paging parameter, nB 8.4.0 8.5.0 RP-43 RP-090131 0139 2 Miscellaneous corrections and clarifications resulting from ASN.1 review 8.4.0 8.5.0 RP-43 RP-090131 0141 1 Correction regarding Redirection Information fo GERAN 8.4.0 8.5.0 RP-43 RP-090131 0142 - Further ASN.1 review related issues 8.4.0 8.5.0 RP-43 RP-090131 0143 - Periodic measurements 8.4.0 8.5.0 RP-43 RP-090131 0144 1 Further analysis on code point "OFF" for ri-ConfigIndex 8.4.0 8.5.0 RP-43 RP-090131 0145 1 Adding and deleting same measurement or configuration in one message 8.4.0 8.5.0 RP-43 RP-090131 0147 - Corrections to IE dataCodingScheme in SIB11 8.4.0 8.5.0 RP-43 RP-090131 0148 - Clarification on Mobility from E-UTRA 8.4.0 8.5.0 RP-43 RP-090131 0149 - 36.331 CR related to “not applicable” 8.4.0 8.5.0 RP-43 RP-090131 0150 1 UE radio capability transfer 8.4.0 8.5.0 RP-43 RP-090131 0151 - CR to 36.331 on value of CDMA band classes 8.4.0 8.5.0 RP-43 RP-090131 0152 - Corrections to DRB modification 8.4.0 8.5.0 RP-43 RP-090131 0153 - Correction to presence condition for pdcp-config 8.4.0 8.5.0 RP-43 RP-090131 0155 - TDD HARQ-ACK feedback mode 8.4.0 8.5.0 RP-43 RP-090275 0157 - Corrections regarding use of carrierFreq for CDMA (SIB8) and GERAN (measObject) 8.4.0 8.5.0 RP-43 RP-090321 0156 1 Sending of GERAN SI/PSI information at Inter-RAT Handover 8.4.0 8.5.0 RP-43 RP-090339 0158 - Clarification of CSG support 8.4.0 8.5.0 06/2009 RP-44 RP-090516 0159 - Octet alignment of VarShortMAC-Input 8.5.0 8.6.0 RP-44 RP-090516 0160 3 Minor corrections to the feature grouping 8.5.0 8.6.0 RP-44 RP-090516 0161 - Security clarification 8.5.0 8.6.0 RP-44 RP-090516 0162 1 Sending of GERAN SI/PSI information at Inter-RAT Handover 8.5.0 8.6.0 RP-44 RP-090516 0163 1 Correction of UE measurement model 8.5.0 8.6.0 RP-44 RP-090516 0164 - Restricting the reconfiguration of UM RLC SN field size 8.5.0 8.6.0 RP-44 RP-090516 0165 1 36.331 CR on Clarification on cell change order from GERAN to E-UTRAN 8.5.0 8.6.0 RP-44 RP-090516 0166 - 36.331 CR - Handling of expired TAT and failed D-SR 8.5.0 8.6.0 RP-44 RP-090516 0167 1 Proposed CR to 36.331 Clarification on mandatory information in AS-Config 8.5.0 8.6.0 RP-44 RP-090516 0168 2 Miscellaneous small corrections 8.5.0 8.6.0 RP-44 RP-090516 0173 - Clarification on the basis of delta signalling 8.5.0 8.6.0 RP-44 RP-090516 0177 - CR on Alignment of CCCH and DCCH handling of missing mandatory field 8.5.0 8.6.0 RP-44 RP-090516 0180 2 Handling of Measurement Context During HO Preparation 8.5.0 8.6.0 RP-44 RP-090516 0181 - Clarification of key-eNodeB-Star in AdditionalReestabInfo 8.5.0 8.6.0 RP-44 RP-090516 0182 1 UE Capability Transfer 8.5.0 8.6.0 RP-44 RP-090516 0186 1 Clarification regarding mobility from E-UTRA in-between SMC and SRB2/DRB setup 8.5.0 8.6.0 RP-44 RP-090516 0188 1 Correction and completion of specification conventions 8.5.0 8.6.0 RP-44 RP-090516 0195 2 RB combination in feature group indicator 8.5.0 8.6.0 RP-44 RP-090516 0196 1 CR for need code for fields in mobilityControlInfo 8.5.0 8.6.0 RP-44 RP-090497 0197 - Alignment of pusch-HoppingOffset with 36.211 8.5.0 8.6.0 RP-44 RP-090570 0198 - Explicit srb-Identity values for SRB1 and SRB2 8.5.0 8.6.0 RP-44 RP-090516 0199 - Removing use of defaultValue for mac-MainConfig 8.5.0 8.6.0 09/2009 RP-45 RP-090906 0200 - Proposed update of the feature grouping 8.6.0 8.7.0 RP-45 RP-090906 0201 - Clarification on measurement object configuration for serving frequency 8.6.0 8.7.0 RP-45 RP-090906 0202 - Correction regarding SRVCC 8.6.0 8.7.0 RP-45 RP-090906 0203 - Indication of DRB Release during HO 8.6.0 8.7.0 RP-45 RP-090906 0204 1 Correction regarding application of dedicated resource configuration upon handover 8.6.0 8.7.0 RP-45 RP-090906 0205 - REL-9 protocol extensions in RRC 8.6.0 8.7.0 RP-45 RP-090906 0206 - In-order delivery of NAS PDUs at RRC connection reconfiguration 8.6.0 8.7.0 RP-45 RP-090906 0207 - Correction on Threshold of Measurement Event 8.6.0 8.7.0 RP-45 RP-090906 0210 - Clarification on dedicated resource of RA procedure 8.6.0 8.7.0 RP-45 RP-090906 0213 1 Cell barring when MasterInformationBlock or SystemInformationBlock1 is missing 8.6.0 8.7.0 RP-45 RP-090915 0218 - Security threat with duplicate detection for ETWS 8.6.0 8.7.0 RP-45 RP-090906 0224 - Clarification on supported handover types in feature grouping 8.6.0 8.7.0 RP-45 RP-090906 0250 1 Handling of unsupported / non-comprehended frequency band and emission requirement 8.6.0 8.7.0 RP-45 RP-090906 0251 - RB combinations in feature group indicator 20 8.6.0 8.7.0 09/2009 RP-45 RP-090934 0220 1 Introduction of Per-QCI radio link failure timers (option 1) 8.7.0 9.0.0 RP-45 RP-090926 0222 - Null integrity protection algorithm 8.7.0 9.0.0 RP-45 RP-090926 0223 - Emergency Support Indicator in BCCH 8.70 9.0.0 RP-45 RP-090934 0230 2 CR to 36.331 for Enhanced CSFB to 1xRTT with concurrent PS handover 8.7.0 9.0.0 RP-45 RP-090934 0243 - REL-9 on Miscellaneous editorial corrections 8.7.0 9.0.0 RP-45 RP-090934 0247 - Periodic CQI/PMI/RI masking 8.7.0 9.0.0 RP-45 RP-090933 0252 - Introduction of CMAS 8.7.0 9.0.0 12/2009 RP-46 RP-091346 0253 1 (Rel-9)-clarification on the description of redirectedCarrierInfo 9.0.0 9.1.0 RP-46 RP-091346 0254 1 Adding references to RRC processing delay for inter-RAT mobiltiy messages 9.0.0 9.1.0 RP-46 RP-091314 0256 - Alignment of srs-Bandwidth with 36.211 9.0.0 9.1.0 RP-46 RP-091341 0257 5 Baseline CR capturing eMBMS agreements 9.0.0 9.1.0 RP-46 RP-091343 0258 3 Capturing agreements on inbound mobility 9.0.0 9.1.0 RP-46 RP-091314 0260 - Clarification of preRegistrationZoneID/secondaryPreRegistrationZoneID 9.0.0 9.1.0 RP-46 RP-091346 0261 - Clarification on NCC for IRAT HO 9.0.0 9.1.0 RP-46 RP-091314 0263 - Clarification on P-max 9.0.0 9.1.0 RP-46 RP-091314 0265 1 Clarification on the definition of maxCellMeas 9.0.0 9.1.0 RP-46 RP-091346 0266 - Correction of q-RxLevMin reference in SIB7 9.0.0 9.1.0 RP-46 RP-091346 0267 - Correction on SPS-Config field descriptions 9.0.0 9.1.0 RP-46 RP-091346 0268 1 correction on the definition of CellsTriggeredList 9.0.0 9.1.0 RP-46 RP-091345 0269 - Correction relating to CMAS UE capability 9.0.0 9.1.0 RP-46 RP-091314 0271 1 Feature grouping bit for SRVCC handover 9.0.0 9.1.0 RP-46 RP-091314 0272 1 Correction and completion of extension guidelines 9.0.0 9.1.0 RP-46 RP-091344 0273 - RACH optimization Stage-3 9.0.0 9.1.0 RP-46 RP-091345 0274 - Stage 3 correction for CMAS 9.0.0 9.1.0 RP-46 RP-091346 0276 1 SR prohibit mechanism for UL SPS 9.0.0 9.1.0 RP-46 RP-091346 0277 - Parameters used for enhanced 1xRTT CS fallback 9.0.0 9.1.0 RP-46 RP-091346 0281 - Correction on UTRAN UE Capability transfer 9.0.0 9.1.0 RP-46 RP-091346 0285 - Maximum number of CDMA2000 neighbors in SIB8 9.0.0 9.1.0 RP-46 RP-091340 0288 1 Introduction of UE Rx-Tx Time Difference measurement 9.0.0 9.1.0 RP-46 RP-091346 0297 - Introduction of SR prohibit timer 9.0.0 9.1.0 RP-46 RP-091346 0298 - Remove FFSs from RAN2 specifications 9.0.0 9.1.0 RP-46 RP-091343 0301 1 Renaming Allowed CSG List (36.331 Rel-9) 9.0.0 9.1.0 RP-46 RP-091346 0305 - Re-introduction of message segment discard time 9.0.0 9.1.0 RP-46 RP-091346 0306 1 Application of ASN.1 extension guidelines 9.0.0 9.1.0 RP-46 RP-091346 0309 1 Support for Dual Radio 1xCSFB 9.0.0 9.1.0 RP-46 RP-091346 0311 - Shorter SR periodicity 9.0.0 9.1.0 RP-46 RP-091342 0316 - CR to 36.331 for Introduction of Dual Layer Transmission 9.0.0 9.1.0 RP-46 RP-091343 0318 1 Draft CR to 36.331 on Network ordered SI reporting 9.0.0 9.1.0 RP-46 RP-091346 0322 - UE e1xcsfb capabilities correction 9.0.0 9.1.0 RP-46 RP-091331 0327 1 Clarification on coding of ETWS related IEs 9.0.0 9.1.0 03/2010 RP-47 RP-100285 0331 - Clarification of CGI reporting 9.1.0 9.2.0 RP-47 RP-100305 0332 - Clarification on MCCH change notification 9.1.0 9.2.0 RP-47 RP-100308 0333 - Clarification on measurement for serving cell only 9.1.0 9.2.0 RP-47 RP-100306 0334 - Clarification on proximity indication configuraiton in handover to E-UTRA 9.1.0 9.2.0 RP-47 RP-100308 0335 - Clarification on radio resource configuration in handover to E-UTRA procedure 9.1.0 9.2.0 RP-47 RP-100308 0336 - Clarification on UE maximum transmission power 9.1.0 9.2.0 RP-47 RP-100308 0337 - Correction to field descriptions of UE-EUTRA-Capability 9.1.0 9.2.0 RP-47 RP-100305 0338 - Correction to MBMS scheduling terminology 9.1.0 9.2.0 RP-47 RP-100308 0339 - Corrections to SIB8 9.1.0 9.2.0 RP-47 RP-100306 0340 - CR 36.331 R9 for Unifying SI reading for ANR and inbound mobility 9.1.0 9.2.0 RP-47 RP-100308 0341 1 CR to 36.331 for 1xRTT pre-registration information in SIB8 9.1.0 9.2.0 RP-47 RP-100305 0342 - CR to 36.331 on corrections for MBMS 9.1.0 9.2.0 RP-47 RP-100306 0343 1 CR to 36.331 on CSG identity reporting 9.1.0 9.2.0 RP-47 RP-100308 0344 2 CR to 36.331 on Optionality of Rel-9 UE features 9.1.0 9.2.0 RP-47 RP-100308 0345 1 CR to 36.331 on Service Specific Acces Control (SSAC) 9.1.0 9.2.0 RP-47 RP-100308 0346 - Introduction of power-limited device indication in UE capability. 9.1.0 9.2.0 RP-47 RP-100305 0347 - Missing agreement in MCCH change notification. 9.1.0 9.2.0 RP-47 RP-100305 0348 1 Corrections related to MCCH change notification and value ranges 9.1.0 9.2.0 RP-47 RP-100306 0349 2 Prohibit timer for proximity indication 9.1.0 9.2.0 RP-47 RP-100306 0350 1 Proximity Indication after handover and re-establishment 9.1.0 9.2.0 RP-47 RP-100305 0351 - Specifying the exact mapping of notificationIndicator in SIB13 to PDCCH bits 9.1.0 9.2.0 RP-47 RP-100308 0352 - Corrections out of ASN.1 review scope 9.1.0 9.2.0 RP-47 RP-100308 0353 - CR on clarification of system information change 9.1.0 9.2.0 RP-47 RP-100285 0358 - Measurement Result CDMA2000 Cell 9.1.0 9.2.0 RP-47 RP-100304 0361 - Correction on the range of UE Rx-Tx time difference measurement result 9.1.0 9.2.0 RP-47 RP-100305 0362 - Small clarifications regarding MBMS 9.1.0 9.2.0 RP-47 RP-100308 0363 - Introduction of REL-9 indication within field accessStratumRelease 9.1.0 9.2.0 RP-47 RP-100306 0364 - Extending mobility description to cover inbound mobility 9.1.0 9.2.0 RP-47 RP-100308 0365 1 Clarification regarding enhanced CSFB to 1XRTT 9.1.0 9.2.0 RP-47 RP-100308 0368 - Handling of dedicated RLF timers 9.1.0 9.2.0 RP-47 RP-100305 0370 1 Clarification on UE's behavior of receiving MBMS service 9.1.0 9.2.0 RP-47 RP-100305 0371 - MBMS Service ID and Session ID 9.1.0 9.2.0 RP-47 RP-100305 0372 1 Inclusion of non-MBSFN region length in SIB13 9.1.0 9.2.0 RP-47 RP-100309 0374 1 CR to 36.331 for e1xCSFB access class barring parameters in SIB8 9.1.0 9.2.0 RP-47 RP-100308 0375 - Multiple 1xRTT/HRPD target cells in MobilityFromEUTRACommand 9.1.0 9.2.0 RP-47 RP-100308 0376 - Independent support indicators for Dual-Rx CSFB and S102 in SIB8 9.1.0 9.2.0 RP-47 RP-100285 0378 - Clarification on DRX StartOffset for TDD 9.1.0 9.2.0 RP-47 RP-100308 0379 1 Miscellaneous corrections from REL-9 ASN.1 review 9.1.0 9.2.0 RP-47 RP-100308 0381 - Need codes and missing conventions 9.1.0 9.2.0 RP-47 RP-100308 0383 1 Introduction of Full Configuration Handover for handling earlier eNB releases 9.1.0 9.2.0 RP-47 RP-100308 0385 - Clarification to SFN reference in RRC 9.1.0 9.2.0 RP-47 RP-100308 0390 - RSRP and RSRQ based Thresholds 9.1.0 9.2.0 RP-47 RP-100189 0392 3 Redirection enhancements to GERAN 9.1.0 9.2.0 RP-47 RP-100308 0398 - Cell reselection enhancements CR for 36.331 9.1.0 9.2.0 RP-47 RP-100307 0401 3 CR on UE-originated RLFreporting for MRO SON use case 9.1.0 9.2.0 RP-47 RP-100309 0402 3 CR to 36.331 on Redirection enhancements to UTRAN 9.1.0 9.2.0 RP-47 RP-100306 0403 2 Proximity status indication handling at mobility 9.1.0 9.2.0 RP-47 RP-100305 0404 - Upper layer aspect of MBSFN area id 9.1.0 9.2.0 RP-47 RP-100308 0405 - Redirection for enhanced 1xRTT CS fallback with concurrent PSHO 9.1.0 9.2.0 RP-47 RP-100301 0406 - Avoiding interleaving transmission of CMAS notifications 9.1.0 9.2.0 RP-47 RP-100308 0407 1 Introduction of UE GERAN DTM capability indicator 9.1.0 9.2.0 RP-47 RP-100381 0408 2 Introducing provisions for late ASN.1 corrections 9.1.0 9.2.0 RP-47 RP-100245 0411 - Correction/ alignment of REL-9 UE capability signalling 9.1.0 9.2.0 06/2010 RP-48 RP-100553 0412 - Clarification for mapping between warning message and CB-data 9.2.0 9.3.0 RP-48 RP-100556 0413 - Clarification of radio link failure related actions 9.2.0 9.3.0 RP-48 RP-100554 0414 - Clarification on UE actions upon leaving RRC_CONNECTED 9.2.0 9.3.0 RP-48 RP-100553 0415 - Correction on CMAS system information 9.2.0 9.3.0 RP-48 RP-100554 0416 1 Corrections to MBMS 9.2.0 9.3.0 RP-48 RP-100536 0418 - Decoding of unknown future extensions 9.2.0 9.3.0 RP-48 RP-100556 0419 1 Miscellaneous small corrections and clarifications 9.2.0 9.3.0 RP-48 RP-100551 0420 - Prohibit timer for proximity indication 9.2.0 9.3.0 RP-48 RP-100556 0421 - RLF report for MRO correction 9.2.0 9.3.0 RP-48 RP-100546 0423 1 Missing UTRA bands in IRAT-ParametersUTRA-FDD 9.2.0 9.3.0 RP-48 RP-100556 0424 - Correction on handling of dedicated RLF timers 9.2.0 9.3.0 RP-48 RP-100556 0431 1 Protection of RRC messages 9.2.0 9.3.0 RP-48 RP-100556 0433 - Handling missing Essential system information 9.2.0 9.3.0 RP-48 RP-100551 0434 1 Clarification on UMTS CSG detected cell reporting in LTE 9.2.0 9.3.0 RP-48 RP-100556 0436 - Introducing provisions for late corrections 9.2.0 9.3.0 RP-48 RP-100556 0437 - Clarification regarding / alignment of REL-9 UE capabilities 9.2.0 9.3.0 09/2010 RP-49 RP-100845 0440 - Correction to 3GPP2 reference for interworking with cdma2000 1x 9.3.0 9.4.0 RP-49 RP-100851 0441 - Clarification on UL handover preparation transfer 9.3.0 9.4.0 RP-49 RP-100851 0442 1 Clarifications regarding fullConfiguration 9.3.0 9.4.0 RP-49 RP-100851 0443 - Clarifications regarding handover to E-UTRAN 9.3.0 9.4.0 RP-49 RP-100854 0444 - Correction on the table of conditionally mandatory Release 9 features 9.3.0 9.4.0 RP-49 RP-100851 0445 - Corrections to TS36.331 on MeasConfig IE 9.3.0 9.4.0 RP-49 RP-100853 0446 2 CR to 36.331 on clarification for MBMS PTM RBs 9.3.0 9.4.0 RP-49 RP-100851 0447 - Introduction of late corrections container for E-UTRA UE capabilities 9.3.0 9.4.0 RP-49 RP-100851 0448 - Renaming of containers for late non-critical extensions 9.3.0 9.4.0 RP-49 RP-100851 0452 - Clarifications Regarding Redirection from LTE 9.3.0 9.4.0 RP-49 RP-100845 0456 - Description of multi-user MIMO functionality in feature group indicator table 9.3.0 9.4.0 RP-49 RP-100845 0458 - Correct the PEMAX_H to PEMAX 9.3.0 9.4.0 RP-49 RP-100851 0460 - Clarification for feature group indicator bit 11 9.3.0 9.4.0 RP-49 RP-100851 0465 1 Clarification of FGI setting for inter-RAT features not supported by the UE 9.3.0 9.4.0 RP-49 RP-101008 0475 1 FGI settings in Rel-9 9.3.0 9.4.0 12/2010 RP-50 RP-101197 0483 - Clarification on Meaning of FGI Bits 9.4.0 9.5.0 RP-50 RP-101197 0485 - Clarification regarding reconfiguration of the quantityConfig 9.4.0 9.5.0 RP-50 RP-101210 0486 1 Corrections to the presence of IE regarding DRX and CQI 9.4.0 9.5.0 RP-50 RP-101210 0493 - The field descriptions of MeasObjectEUTRA 9.4.0 9.5.0 RP-50 RP-101197 0498 1 Clarification of FGI settings non ANR periodical measurement reporting 9.4.0 9.5.0 RP-50 RP-101209 0500 - Corrections to RLF Report 9.4.0 9.5.0 RP-50 RP-101206 0519 1 T321 timer fix 9.4.0 9.5.0 RP-50 RP-101197 0524 - Restriction of AC barring parameter setting 9.4.0 9.5.0 RP-50 RP-101210 0525 - Removal of SEQUENCE OF SEQUENCE in UEInformationResponse 9.4.0 9.5.0 RP-50 RP-101197 0526 1 Clarification regarding default configuration value N/A 9.4.0 9.5.0 RP-50 RP-101431 0532 - Splitting FGI bit 3 9.4.0 9.5.0 RP-50 RP-101183 0476 4 36.331 CR on Introduction of Minimization of Drive Tests 9.4.0 10.0.0 RP-50 RP-101293 0477 4 AC-Barring for Mobile Originating CSFB call 9.4.0 10.0.0 RP-50 RP-101214 0478 - Addition of UE-EUTRA-Capability descriptions 9.4.0 10.0.0 RP-50 RP-101214 0481 - Clarification on Default Configuration for CQI-ReportConfig 9.4.0 10.0.0 RP-50 RP-101215 0487 - CR to 36.331 adding e1xCSFB support for dual Rx/Tx UE 9.4.0 10.0.0 RP-50 RP-101227 0488 1 Introduction of Carrier Aggregation and UL/ DL MIMO 9.4.0 10.0.0 RP-50 RP-101228 0489 1 Introduction of relays in RRC 9.4.0 10.0.0 RP-50 RP-101214 0490 1 Priority indication for CSFB with re-direction 9.4.0 10.0.0 RP-50 RP-101214 0491 - SIB Size Limitations 9.4.0 10.0.0 RP-50 RP-101214 0513 - Combined Quantity Report for IRAT measurement of UTRAN 9.4.0 10.0.0 RP-50 RP-101214 0527 1 UE power saving and Local release 9.4.0 10.0.0 RP-50 RP-101429 0530 1 Inclusion of new UE categories in Rel-10 9.4.0 10.0.0 03/2011 RP-51 RP-110282 0533 - 36331_CRxxx_Protection of Logged Measurements Configuration 10.0.0 10.1.0 RP-51 RP-110294 0534 1 Stage-3 CR for MBMS enhancement 10.0.0 10.1.0 RP-51 RP-110282 0535 - Clean up MDT-related text 10.0.0 10.1.0 RP-51 RP-110282 0536 - Clear MDT configuration and logs when the UE is not registered 10.0.0 10.1.0 RP-51 RP-110280 0537 - Correction to the field description of nB 10.0.0 10.1.0 RP-51 RP-110289 0538 - CR on impact on UP with remove&add approach_2 10.0.0 10.1.0 RP-51 RP-110282 0539 - CR to 36.331 on corrections for MDT 10.0.0 10.1.0 RP-51 RP-110290 0543 - Introduction of CA/MIMO capability signalling and measurement capability signalling in CA 10.0.0 10.1.0 RP-51 RP-110282 0544 - MDT PDU related clarifications 10.0.0 10.1.0 RP-51 RP-110282 0545 - Correction on release of logged measurement configuration while in another RAT 10.0.0 10.1.0 RP-51 RP-110289 0546 - Miscellaneous Corrections for CA Running RRC CR 10.0.0 10.1.0 RP-51 RP-110280 0547 1 Miscellaneous small clarifications and corrections 10.0.0 10.1.0 RP-51 RP-110293 0548 4 Necessary changes for RLF reporting enhancements 10.0.0 10.1.0 RP-51 RP-110282 0549 1 Memory size for logged measurements capable UE 10.0.0 10.1.0 RP-51 RP-110289 0550 - Parameters confusion of non-CA and CA configurations 10.0.0 10.1.0 RP-51 RP-110272 0553 - Presence condition for cellSelectionInfo-v920 in SIB1 10.0.0 10.1.0 RP-51 RP-110282 0554 1 Removal of MDT configuration at T330 expiry 10.0.0 10.1.0 RP-51 RP-110289 0556 1 Signalling aspects of existing LTE-A parameters 10.0.0 10.1.0 RP-51 RP-110280 0557 1 Some Corrections on measurement 10.0.0 10.1.0 RP-51 RP-110291 0558 - Stored system information for RNs 10.0.0 10.1.0 RP-51 RP-110291 0559 - Support of Integrity Protection for Relay 10.0.0 10.1.0 RP-51 RP-110290 0561 2 Updates of L1 parameters for CA and UL/DL MIMO 10.0.0 10.1.0 RP-51 RP-110291 0571 1 Note for Dedicated SIB for RNs 10.0.0 10.1.0 RP-51 RP-110272 0579 - Correction to cs-fallbackIndicator field description 10.0.0 10.1.0 RP-51 RP-110289 0580 - Clarification to the default configuration of sCellDeactivationTimer 10.0.0 10.1.0 RP-51 RP-110289 0581 - Miscellaneous corrections to TS 36.331 on Carrier Aggregation 10.0.0 10.1.0 RP-51 RP-110280 0584 - Correction of configuration description in SIB2 10.0.0 10.1.0 RP-51 RP-110265 0587 - Clarification of band indicator in handover from E-UTRAN to GERAN 10.0.0 10.1.0 RP-51 RP-110285 0588 1 36331_CRxxxx Support of Delay Tolerant access requests 10.0.0 10.1.0 RP-51 RP-110292 0590 - Update of R2-110807 on CSI measurement resource restriction for time domain ICIC 10.0.0 10.1.0 RP-51 RP-110292 0591 - Update of R2-110821 on RRM/RLM resource restriction for time domain ICIC 10.0.0 10.1.0 RP-51 RP-110290 0592 - Corrections on UE capability related parameters 10.0.0 10.1.0 RP-51 RP-110282 0596 - Validity time for location information in Immediate MDT 10.0.0 10.1.0 RP-51 RP-110280 0597 - CR to 36.331 adding UE capability indicator for dual Rx/Tx e1xCSFB 10.0.0 10.1.0 RP-51 RP-110289 0598 - Miscellaneous corrections to CA 10.0.0 10.1.0 RP-51 RP-110280 0599 - Further correction to combined measurement report of UTRAN 10.0.0 10.1.0 RP-51 RP-110280 0600 - Correction to the reference of ETWS 10.0.0 10.1.0 RP-51 RP-110269 0602 1 Introduction of OTDOA inter-freq RSTD measurement indication procedure 10.0.0 10.1.0 RP-51 RP-110280 0603 - Correction of use of RRCConnectionReestablishment message for contention resolution 10.0.0 10.1.0 RP-51 RP-110282 0604 - CR to 36.331 on MDT neighbour cell measurements logging 10.0.0 10.1.0 RP-51 RP-110272 0609 - Minor ASN.1 corrections for the UEInformationResponse message 10.0.0 10.1.0 RP-51 RP-110280 0613 - Clarification regarding dedicated RLF timers and constants 10.0.0 10.1.0 RP-51 RP-110282 0615 - Release of Logged Measurement Configuration 10.0.0 10.1.0 RP-51 RP-110280 0616 - Some corrections on TS 36.331 10.0.0 10.1.0 RP-51 RP-110280 0623 - AC barring procedure clean up 10.0.0 10.1.0 RP-51 RP-110282 0624 - Counter proposal to R2-110826 on UE capabilities for MDT 10.0.0 10.1.0 RP-51 RP-110280 0628 1 UE information report for RACH 10.0.0 10.1.0 RP-51 RP-110289 0629 2 Measurement on the deactivated SCells 10.0.0 10.1.0 RP-51 RP-110282 0632 1 Trace configuration paremeters for Logged MDT 10.0.0 10.1.0 RP-51 RP-110282 0635 - Clarification on stop condition for timer T3330 10.0.0 10.1.0 RP-51 RP-110282 0637 - User consent for MDT 10.0.0 10.1.0 RP-51 RP-110280 0638 - Correction on the range of CQI resource index 10.0.0 10.1.0 RP-51 RP-110272 0640 1 Small corrections to ETWS & CMAS system information 10.0.0 10.1.0 RP-51 RP-110290 0641 1 UE capability signaling structure w.r.t carrier aggregation, MIMO and measurement gap 10.0.0 10.1.0 RP-51 RP-110289 0642 1 Normal PHR and the multiple uplink carriers 10.0.0 10.1.0 RP-51 RP-110280 0643 1 Corrections to TS36.331 on SIB2 handling 10.0.0 10.1.0 RP-51 RP-110280 0644 1 Adding a Power Management indication in PHR 10.0.0 10.1.0 RP-51 RP-110289 0646 1 Clarification for CA and TTI bundling in RRC 10.0.0 10.1.0 RP-51 RP-110443 0648 1 Updates to FGI settings 10.0.0 10.1.0 06/2011 RP-52 RP-110836 0651 - Add MBMS counting procedure to processing delay requirement for RRC procedure Section 11.2 10.1.0 10.2.0 RP-52 RP-110830 0653 - Add pre Rel-10 procedures to processing delay requirement for RRC procedure Section 11.2 10.1.0 10.2.0 RP-52 RP-110847 0654 1 Addition of a specific reference for physical configuration fields 10.1.0 10.2.0 RP-52 RP-110839 0656 - Clarification of inter-frequency RSTD measurement indication procedure 10.1.0 10.2.0 RP-52 RP-110830 0658 - Clarification of optionality of UE features without capability 10.1.0 10.2.0 RP-52 RP-110839 0660 - Clarification on the definition of maxCellBlack 10.1.0 10.2.0 RP-52 RP-110839 0661 - Clarification on upper layer requested connection release 10.1.0 10.2.0 RP-52 RP-110850 0662 3 Clarification regarding eICIC measurements 10.1.0 10.2.0 RP-52 RP-110839 0663 - CR for s-measure handling 10.1.0 10.2.0 RP-52 RP-110851 0664 1 CR on clarification of RLF Report in Carrier Aggregation 10.1.0 10.2.0 RP-52 RP-110830 0669 - FGI bit for handover between LTE FDD/TDD 10.1.0 10.2.0 RP-52 RP-110847 0670 2 Further updates on L1 parameters 10.1.0 10.2.0 RP-52 RP-110839 0671 2 General error handling for extension fields 10.1.0 10.2.0 RP-52 RP-110851 0672 2 Additional information for RLF report 10.1.0 10.2.0 RP-52 RP-110843 0673 - Introduction of TCE ID for logged MDT 10.1.0 10.2.0 RP-52 RP-110670 0674 4 Miscellaneous corrections (related to review in preparation for ASN.1 freeze) 10.1.0 10.2.0 RP-52 RP-110843 0675 - PLMN check for MDT logging 10.1.0 10.2.0 RP-52 RP-110839 0677 - UE actions upon leaving RRC_CONNECTED 10.1.0 10.2.0 RP-52 RP-110847 0678 - Clarification on bandEUTRA-r10 and supportedBandListEUTRA 10.1.0 10.2.0 RP-52 RP-110837 0679 - Updated value range for the Extended Wait Timer 10.1.0 10.2.0 RP-52 RP-110839 0680 1 Value range of DRX-InactivityTimer 10.1.0 10.2.0 RP-52 RP-110828 0693 1 Correction for SR-VCC and QCI usage 10.1.0 10.2.0 RP-52 RP-110847 0694 - Restructuring of CQI-ReportConfig-r10 10.1.0 10.2.0 RP-52 RP-110839 0695 2 Correction on DL allocations in MBSFN subframes 10.1.0 10.2.0 RP-52 RP-110850 0700 - Reference SFN for MeasSubframePattern 10.1.0 10.2.0 RP-52 RP-110846 0701 - Clarifications to CA related field descriptions 10.1.0 10.2.0 RP-52 RP-110847 0702 - Corrections to codebookSubsetRestriction and SRS parameters 10.1.0 10.2.0 RP-52 RP-110834 0704 - Corrections to the handling of ri-ConfigIndex for TM9 10.1.0 10.2.0 RP-52 RP-110715 0710 2 UE capabilities for Rel-10 LTE features with eICIC measurement restrictions as FGI (Alt.1) 10.1.0 10.2.0 RP-52 RP-110839 0713 - CR to 36.331 on redirected utra-TDD carrier frequency 10.1.0 10.2.0 RP-52 RP-110839 0714 - Explicit AS signalling for mapped PTMSI/GUTI 10.1.0 10.2.0 RP-52 RP-110847 0718 - Counter proposal for Updates of mandatory information in AS-Config 10.1.0 10.2.0 RP-52 RP-110839 0719 - CR for Reconfiguration of discardTimer in PDCP-Config 10.1.0 10.2.0 RP-52 RP-110847 0723 - On the missing multiplicity of UE capability parameters 10.1.0 10.2.0 RP-52 RP-110830 0735 - Radio frame alignment of CSA and MSP 10.1.0 10.2.0 RP-52 RP-110847 0740 - Reconfiguration involving critically extended IEs (using fullFieldConfig i.e. option 2) 10.1.0 10.2.0 RP-52 RP-110839 0744 - Counter proposal to R2-112753 on CR to remove CSG Identity validity limited to CSG cell 10.1.0 10.2.0 RP-52 RP-110839 0746 1 Increase of prioritisedBitRate 10.1.0 10.2.0 RP-52 RP-110847 0747 - CA and MIMO Capabilities in LTE Rel-10 10.1.0 10.2.0 09/2011 RP-53 RP-111297 0752 - TS36.331 Correction 10.2.0 10.3.0 RP-53 RP-111297 0754 - maxNumberROHC-ContextSessions when no ROHC profile is supported 10.2.0 10.3.0 RP-53 RP-111280 0757 - Correction to Subframe Allocation End in PMCH-Info 10.2.0 10.3.0 RP-53 RP-111288 0761 - Correction on PUCCH configuration for Un interface 10.2.0 10.3.0 RP-53 RP-111297 0762 - Miscellaneous corrections to 36.331 10.2.0 10.3.0 RP-53 RP-111278 0764 2 36.331 correction on CSG identity validity to allow introduction of CSG RAN sharing 10.2.0 10.3.0 RP-53 RP-111283 0770 2 AdditionalSpectrumEmissions in CA 10.2.0 10.3.0 RP-53 RP-111297 0773 - CR to 36.331 on Small correction of PHR parameter 10.2.0 10.3.0 RP-53 RP-111283 0775 2 Clarifications to P-max on CA 10.2.0 10.3.0 RP-53 RP-111280 0784 - Clarification on for which subframes signalling MCS applies 10.2.0 10.3.0 RP-53 RP-111283 0792 - Corrections in RRC 10.2.0 10.3.0 RP-53 RP-111297 0793 - Replace the tables with exception list in 10.5 AS-Config 10.2.0 10.3.0 RP-53 RP-111297 0796 - Corrections to the field descriptions 10.2.0 10.3.0 RP-53 RP-111283 0798 - Configuration of simultaneous PUCCH&PUSCH 10.2.0 10.3.0 RP-53 RP-111297 0806 - Corrections to release of csi-SubframePatternConfig and cqi-Mask 10.2.0 10.3.0 RP-53 RP-111272 0810 - GERAN SI format for cell change order&PS handover& enhanced redirection to GERAN 10.2.0 10.3.0 RP-53 RP-111283 0811 - Corrections to PUCCH-Config field descriptions 10.2.0 10.3.0 12/2011 RP-54 RP-111711 0812 1 Clarification of PCI range for CSG cells 10.3.0 10.4.0 RP-54 RP-111716 0813 - Clarifications to Default Radio Configurations 10.3.0 10.4.0 RP-54 RP-111716 0814 1 Corrections to enhancedDualLayerTDD 10.3.0 10.4.0 RP-54 RP-111716 0815 - Miscellaneous small corrections 10.3.0 10.4.0 RP-54 RP-111716 0816 1 Correction on notation of SRS transmission comb 10.3.0 10.4.0 RP-54 RP-111706 0823 1 36.331 CR SPS reconfiguration 10.3.0 10.4.0 RP-54 RP-111716 0827 2 Clarification of list sizes in measurement configuration stored by UE 10.3.0 10.4.0 RP-54 RP-111706 0835 - Clarification of the event B1 and ANR related FGI bits 10.3.0 10.4.0 RP-54 RP-111714 0840 1 Clarification on MBSFN and measurement resource restrictions 10.3.0 10.4.0 RP-54 RP-111706 0845 - Clarification on parallel message transmission upon connection re-establishment 10.3.0 10.4.0 03/2012 RP-55 RP-120326 0855 1 Limiting MBMS counting responses to within the PLMN 10.4.0 10.5.0 RP-55 RP-120321 0857 - CR to 36.331 on cdma2000 band classes and references 10.4.0 10.5.0 RP-55 RP-120326 0862 1 Clarification on MBSFN and measurement resource restrictions 10.4.0 10.5.0 RP-55 RP-120325 0871 - On SIB10/11 Reception Timing 10.4.0 10.5.0 RP-55 RP-120326 0875 1 Clarification on MBMS counting for uncipherable services 10.4.0 10.5.0 RP-55 RP-120325 0876 - Minor correction regarding limited service access on non-CSG-member cell 10.4.0 10.5.0 RP-55 RP-120326 0894 - Time to keep RLF Reporting logs 10.4.0 10.5.0 RP-55 RP-120356 0895 1 Introducing means to signal different FDD/TDD Capabilities/FGIs for Dual-xDD UE 10.4.0 10.5.0 RP-55 RP-120321 0899 - Clarification on SRB2 resumption upon connection re-establishment (parallel message transmission) 10.4.0 10.5.0 RP-55 RP-120321 0900 1 Duplicated ASN.1 naming correction 10.4.0 10.5.0 06/2012 RP-56 RP-120805 0909 - SPS Reconfiguration 10.5.0 10.6.0 RP-56 RP-120805 0912 1 Change in Scheduling Information for ETWS 10.5.0 10.6.0 RP-56 RP-120807 0914 - Clarification of mch-SchedulingPeriod configuration 10.5.0 10.6.0 RP-56 RP-120808 0916 1 Change in Scheduling Information for CMAS 10.5.0 10.6.0 RP-56 RP-120814 0919 1 Introducing means to signal different REL-10 FDD/TDD Capabilities/FGIs for Dual-xDD UE 10.5.0 10.6.0 RP-56 RP-120812 0920 1 Clarification on setting of dedicated NS value for CA by E-UTRAN 10.5.0 10.6.0 RP-56 RP-120808 0931 - T321 value for UTRA SI acquisition 10.5.0 10.6.0 RP-56 RP-120813 0957 1 Korean Public Alert System (KPAS) in relation to CMAS 10.5.0 10.6.0 RP-56 RP-120812 0969 1 Introduction of supported bandwidth combinations for CA 10.5.0 10.6.0 RP-56 RP-120734 0970 1 Introduction of multiple frequency band indicator 10.5.0 10.6.0 RP-56 RP-120825 0934 - Introduction of a new security algorithm ZUC 10.5.0 11.0.0 RP-56 RP-120813 0973 1 EU-Alert in relation to CMAS 10.5.0 11.0.0 09/2012 RP-57 RP-121371 0982 1 Introduction of EAB 11.0.0 11.1.0 RP-57 RP-121381 0990 - Additional special subframe configuration related correction 11.0.0 11.1.0 RP-57 RP-121423 1000 4 36.331 CR introducing In-Device Coexistence (IDC) 11.0.0 11.1.0 RP-57 RP-121359 1008 - Voice support Capabilities 11.0.0 11.1.0 RP-57 RP-121361 1013 - Differentiating UTRAN modes in FGIs 11.0.0 11.1.0 RP-57 RP-121368 1022 1 Introduction of absolute priority based measurements and reselection in CELL_FACH State in 36.331 11.0.0 11.1.0 RP-57 RP-121370 1024 - Introducing MDT enhancements for REL-11 11.0.0 11.1.0 RP-57 RP-121349 1025 2 Introducing Carrier aggregation enhancements for REL-11 11.0.0 11.1.0 RP-57 RP-121375 1026 - Introducing MBMS enhancements for REL-11 11.0.0 11.1.0 RP-57 RP-121376 1052 2 Signaling support for CRS interference management in eICIC 11.0.0 11.1.0 RP-57 RP-121395 1055 - CR on scell measurement cycle 11.0.0 11.1.0 RP-57 RP-121395 1056 - CR on measurement report 11.0.0 11.1.0 RP-57 RP-121378 1057 3 Introduction of 'Power preference indication' 11.0.0 11.1.0 RP-57 RP-121280 1060 - Correction for PUCCH/SRS Release 11.0.0 11.1.0 12/2012 RP-58 RP-121933 1063 - Correction related to differentiating UTRAN modes in FGIs 11.1.0 11.2.0 RP-58 RP-121936 1065 - Processing delay for RRCConnectionReconfiguration 11.1.0 11.2.0 RP-58 RP-121953 1066 2 Addition of the stage-3 agreements on IDC 11.1.0 11.2.0 RP-58 RP-121951 1067 3 Carrier Aggregation Enhancement RAN1 parameters 11.1.0 11.2.0 RP-58 RP-121957 1068 1 Clarification of SR period 11.1.0 11.2.0 RP-58 RP-121957 1069 1 Clarification on HandoverCommand message 11.1.0 11.2.0 RP-58 RP-121957 1070 - Clarification on mobility related issues 11.1.0 11.2.0 RP-58 RP-121946 1071 1 Correction of the signaling for Uncertainty and Confidence 11.1.0 11.2.0 RP-58 RP-121940 1072 2 Corrections to MBMS Service Continuity 11.1.0 11.2.0 RP-58 RP-121940 1073 - CR to 36.331 on SIB15 acquisition 11.1.0 11.2.0 RP-58 RP-121957 1074 1 Handling of 1xCSFB failure 11.1.0 11.2.0 RP-58 RP-121957 1075 - Miscellaneous corrections 11.1.0 11.2.0 RP-58 RP-121958 1076 1 RAN overload control using RRC connection Rejection 11.1.0 11.2.0 RP-58 RP-121954 1077 - RRC support for CoMP in UL 11.1.0 11.2.0 RP-58 RP-121951 1078 - Some clarification to Carrier aggregation enhancements 11.1.0 11.2.0 RP-58 RP-121939 1079 1 Validity of EAB SIB and acquisition of SIB1 11.1.0 11.2.0 RP-58 RP-121922 1085 - Clarification for Multiple Frequency Band Indicators feature 11.1.0 11.2.0 RP-58 RP-121924 1089 1 Moving the TM5 capability 11.1.0 11.2.0 RP-58 RP-121959 1093 1 CR to 36.331 on introducing ROHC context continue for intra-ENB handover 11.1.0 11.2.0 RP-58 RP-121946 1100 - Correction on MDT multi-PLMN support 11.1.0 11.2.0 RP-58 RP-121953 1102 - Clarification and alignment of handling of other configuration 11.1.0 11.2.0 RP-58 RP-121970 1103 6 Introducing support for Coordinated Multi-Point (CoMP) operation 11.1.0 11.2.0 RP-58 RP-121922 1105 2 Introducing further UE aspects regarding multi band cells 11.1.0 11.2.0 RP-58 RP-121947 1120 - CR to 36.331 on additional information in RLF report for inter-RAT MRO 11.1.0 11.2.0 RP-58 RP-121952 1125 1 Correction on Power preference indication 11.1.0 11.2.0 RP-58 RP-121950 1127 1 SIB1 provisioning via dedicated signalling 11.1.0 11.2.0 RP-58 RP-121936 1128 2 Measurement reporting of Scells 11.1.0 11.2.0 RP-58 RP-121956 1129 1 Introduction of EPDCCH parameters in TS 36.331 11.1.0 11.2.0 RP-58 RP-121961 1130 2 Introduction of Rel-11 UE capabilities 11.1.0 11.2.0 RP-58 RP-121958 1131 - Introducion of wideband RSRQ measurements 11.1.0 11.2.0 RP-58 RP-121958 1146 - Introduction of network sharing for CDMA2000 inter-working 11.1.0 11.2.0 RP-58 RP-121960 1157 - Broadcast of Time Info by Using a New SIB 11.1.0 11.2.0 RP-58 RP-121957 1175 - GERAN measurement object at ANR 11.1.0 11.2.0 03/2013 RP-59 RP-130246 1182 2 Miscellaneous corrections from review preceeding ASN.1 freeze 11.2.0 11.3.0 RP-59 RP-130243 1186 2 DL COMP capability related correction 11.2.0 11.3.0 RP-59 RP-130231 1193 1 Mandatory supporting of B1 measurement to UMTS FDD (FGI bit 15) 11.2.0 11.3.0 RP-59 RP-130241 1197 - Clarification on MBMS Service Continuity 11.2.0 11.3.0 RP-59 RP-130241 1198 - IDC Problem Reporting 11.2.0 11.3.0 RP-59 RP-130247 1210 - Corrections on definition of CSG member cell 11.2.0 11.3.0 RP-59 RP-130237 1211 - Extension of FBI and EARFCN 11.2.0 11.3.0 RP-59 RP-130228 1220 - Invalidation of ETWS with security feature 11.2.0 11.3.0 RP-59 RP-130225 1224 - Invalid measurement configuration with different (E)ARFCN 11.2.0 11.3.0 RP-59 RP-130241 1231 2 PPI and IDC indication upon handover 11.2.0 11.3.0 RP-59 RP-130227 1235 1 Correcting further UE aspects regarding multi band cells 11.2.0 11.3.0 RP-59 RP-130248 1236 1 Behaviour in case of excessive dedicated priority information 11.2.0 11.3.0 RP-59 RP-130225 1241 - Clarification on EARFCN signalling in Mobility control info 11.2.0 11.3.0 RP-59 RP-130241 1244 - IDC-SubframePattern length for FDD 11.2.0 11.3.0 RP-59 RP-130249 1252 - Introduction of wideband RSRQ measurements in RRC_IDLE 11.2.0 11.3.0 RP-59 RP-130240 1255 - Optional support of RLF report for inter-RAT MRO 11.2.0 11.3.0 RP-59 RP-130233 1258 2 The presence of bandcombination for non-CA capable UEs 11.2.0 11.3.0 RP-59 RP-130248 1259 - Correction for event A5 11.2.0 11.3.0 RP-59 RP-130332 1265 - Mandating the settings of FGI bit 14, 27 and 28 to true 11.2.0 11.3.0 06/2013 RP-60 RP-130805 1267 - Clarification on the redirection to UTRA-TDD frequency in case of CSFB High Priority 11.3.0 11.4.0 RP-60 RP-130804 1269 1 Correction of wrong reference 11.3.0 11.4.0 RP-60 RP-130809 1270 - Clarification to support of deprioritisation feature 11.3.0 11.4.0 RP-60 RP-130809 1271 - Clarification on KASME key usage 11.3.0 11.4.0 RP-60 RP-130808 1272 - Correction on multi-TA capability 11.3.0 11.4.0 RP-60 RP-130808 1273 - MBMS interest indication upon handover/ re-establishment 11.3.0 11.4.0 RP-60 RP-130808 1274 - Conditions RI reference inheriting CSI process (DL CoMP) 11.3.0 11.4.0 RP-60 RP-130808 1275 - Clarification on NZP CSI-RS resource configuration for UE supporting 1 CSI process 11.3.0 11.4.0 RP-60 RP-130808 1276 - Corrections to field description of pdsch-Start-r11 11.3.0 11.4.0 RP-60 RP-130809 1277 - Need code corrections in Rel-11 RRC 11.3.0 11.4.0 RP-60 RP-130808 1278 - Miscellanous small corrections 11.3.0 11.4.0 RP-60 RP-130809 1279 1 FDD/TDD diff column correction for FGI31 11.3.0 11.4.0 RP-60 RP-130804 1282 - measCycleSCell upon SCell configuration 11.3.0 11.4.0 RP-60 RP-130809 1294 - Clarification on RRC Connection Reconfiguration with Critical Extension 11.3.0 11.4.0 RP-60 RP-130802 1298 - Security key generation in case of MFBI 11.3.0 11.4.0 RP-60 RP-130804 1303 1 Clarification on inclusion of non-CA band combinations 11.3.0 11.4.0 RP-60 RP-130809 1308 - CR on ROHC parameter configuration in Rel-11 RRC 11.3.0 11.4.0 RP-60 RP-130804 1315 2 Clarification on UE CA capability 11.3.0 11.4.0 RP-60 RP-130809 1321 - Updating 3GPP2 specification references 11.3.0 11.4.0 RP-60 RP-130805 1323 - Clarification on the configuration of the extended PHR 11.3.0 11.4.0 RP-60 RP-130805 1324 - Clarifications on SystemTimeInfoCDMA2000 IE 11.3.0 11.4.0 RP-60 RP-130808 1325 - MFBI impact on MBMS service continuity 11.3.0 11.4.0 RP-60 RP-130819 1329 1 MFBI aspects for dedicated signalling 11.3.0 11.4.0 09/2013 RP-61 RP-131311 1335 - Clarification on PhysCellIdRange 11.4.0 11.5.0 RP-61 RP-131311 1339 1 Correction on the first subframe of the measurement gap 11.4.0 11.5.0 RP-61 RP-131319 1340 1 Correction for MFBI in SIB15 and SIB6 11.4.0 11.5.0 RP-61 RP-131319 1343 - Clarification of MFBI impact on MBMS service continuity 11.4.0 11.5.0 RP-61 RP-131238 1344 2 Clarification of UE action for otherwise in conditions 11.4.0 11.5.0 RP-61 RP-131311 1348 - Corrections to the 3GPP2 specification references in 36.331 11.4.0 11.5.0 RP-61 RP-131318 1353 - Clarifications regarding the usage of "rlf-Cause" in case of handover failure 11.4.0 11.5.0 12/2013 RP-62 RP-131986 1366 - Introduction of capability bit for UTRA MFBI 11.5.0 11.6.0 RP-62 RP-131984 1368 1 Addition of inter-frequency RSTD measurement capability indicator for OTDOA 11.5.0 11.6.0 RP-62 RP-131989 1370 - Clarification on supportedBand 11.5.0 11.6.0 RP-62 RP-132003 1371 - Capturing mandatory/optional agreements on Rel-11 UE features 11.5.0 11.6.0 RP-62 RP-131995 1372 - Clarification on otherwise behaviour 11.5.0 11.6.0 RP-62 RP-131995 1373 - Corrections of the 3GPP2 references in TS 36.331 11.5.0 11.6.0 RP-62 RP-131991 1374 - measResultLastServCell for SON-HOF report 11.5.0 11.6.0 RP-62 RP-131729 1375 1 Clarification to timeInfoUTC field in SIB16 11.5.0 11.6.0 RP-62 RP-131991 1389 - Clarification on eRedirection to UMTS TDD with multiple UMTS TDD frequencies 11.5.0 11.6.0 RP-62 RP-131995 1390 - Delta signalling for critical extension 11.5.0 11.6.0 RP-62 RP-132005 1391 - Capability signalling for CSI processes 11.5.0 11.6.0 RP-62 RP-131991 1395 1 Clarifications on Measurement 11.5.0 11.6.0 RP-62 RP-131984 1397 - Correction to InterFreqRSTDMeasurementIndication field descriptions 11.5.0 11.6.0 RP-62 RP-131984 1404 - Correction of Inter-frequency RSTD indication for multiple frequencies 11.5.0 11.6.0 RP-62 RP-131993 1405 1 Enabling SRVCC from GERAN without forwarding UE-EUTRA-Capability 11.5.0 11.6.0 RP-62 RP-131995 1409 1 System information and change monitoring procedure 11.5.0 11.6.0 RP-62 RP-131991 1410 1 Correction on presence of codebookSubsetRestriction-r10 11.5.0 11.6.0 RP-62 RP-131998 1376 - Introducing UE support for inbound mobility to a shared CSG cell 11.5.0 12.0.0 RP-62 RP-132002 1378 2 Introduction of support of further DL MIMO enhancement 11.5.0 12.0.0 RP-62 RP-131988 1379 - CR for SSAC in CONNECTED 11.5.0 12.0.0 RP-62 RP-132002 1406 - Update of CMAS reference to E-UTRAN specific sections in TS23.041 11.5.0 12.0.0 03/2014 RP-63 RP-140359 1424 1 CR on introduction of Cell-specific time-to-trigger 12.0.0 12.1.0 RP-63 RP-140346 1435 - UE autonomous modification of cellsTriggered upon serving cell addition/ release 12.0.0 12.1.0 RP-63 RP-140359 1436 1 Introduction of T312 12.0.0 12.1.0 RP-63 RP-140362 1439 1 Introduction of UE-supported EARFCN list in handover preparation information for MFBI 12.0.0 12.1.0 RP-63 RP-140352 1442 - Correction of Connection Establishement Failure Report 12.0.0 12.1.0 RP-63 RP-140356 1450 1 Clarification on the presence of TDD special subframe 12.0.0 12.1.0 RP-63 RP-140359 1453 - Introduction of UE mobility history reporting (option 2) 12.0.0 12.1.0 RP-63 RP-140340 1455 1 Clarification regarding need codes, conditions and ASN.1 defaults for extension fields 12.0.0 12.1.0 RP-63 RP-140340 1456 - ASN.1 issue with inter-node signalling (AS-Config) 12.0.0 12.1.0 RP-63 RP-140357 1457 1 Clarification for the SIB occurrence in a single SI message 12.0.0 12.1.0 RP-63 RP-140364 1462 - New UE categories for DL 450Mbps class 12.0.0 12.1.0 RP-63 RP-140354 1463 - IoT indication for inter-band TDD CA with different UL/DL configuration 12.0.0 12.1.0 06/2014 RP-64 RP-140869 1471 - Removal of comment line from EUTRA-UE-Variables imports 12.1.0 12.2.0 RP-64 RP-140871 1475 - Correction on measObjectList in VarMeasConfig 12.1.0 12.2.0 RP-64 RP-140879 1477 - Minor correction inbound mobility to shared CSG cell 12.1.0 12.2.0 RP-64 RP-140873 1478 - Clarificaton on precedence of SCell SI provided dedicately 12.1.0 12.2.0 RP-64 RP-140887 1479 - Support of the enhancement for TTI bundling for FDD 12.1.0 12.2.0 RP-64 RP-140885 1490 - Corrections on timer T312 12.1.0 12.2.0 RP-64 RP-140885 1486 - Correction to the description of physCellIdRange in MeasObjectEUTRA 12.1.0 12.2.0 RP-64 RP-140885 1506 - Corrections to UE mobility history information 12.1.0 12.2.0 RP-64 RP-140873 1489 - ACK/NACK feedback mode on PUSCH 12.1.0 12.2.0 RP-64 RP-140878 1556 - SIB15 enhancement for service availability information 12.1.0 12.2.0 RP-64 RP-140888 1557 - Introduction of FDD/TDD CA UE capability 12.1.0 12.2.0 RP-64 RP-140871 1545 - Clarification of E-UTRA MFBI signalling 12.1.0 12.2.0 RP-64 RP-140892 1520 1 Extended RLC LI field 12.1.0 12.2.0 RP-64 RP-140873 1517 1 Network-requested CA Band Combination Capability Signalling 12.1.0 12.2.0 RP-64 RP-140873 1554 1 Allowing TDD/FDD split for FGI111 and FGI112 12.1.0 12.2.0 RP-64 RP-140871 1551 1 Inter-RAT ANR capability signalling in FGI33 when UE supports UTRA TDD only 12.1.0 12.2.0 RP-64 RP-140884 1495 1 Introduction of TDD eIMTA 12.1.0 12.2.0 RP-64 RP-140885 1499 1 Minor Corrections to T312 12.1.0 12.2.0 RP-64 RP-140892 1510 1 Introduction of RRC Connection Establishment failure temporary Qoffset handling 12.1.0 12.2.0 RP-64 RP-140849 1555 2 Introduction of UE capability for eMBMS reception on SCell and Non-Serving Cell 12.1.0 12.2.0 09/2014 RP-65 RP-141494 1632 - FDD&TDD split for CA 12.2.0 12.3.0 RP-65 RP-141505 1599 - UE capabilities for Hetnet mobility in TS 36.331 12.2.0 12.3.0 RP-65 RP-141499 1584 - Introduction of UE eIMTA capabilities 12.2.0 12.3.0 RP-65 RP-141511 1567 - Corrections to extended RLC LI field 12.2.0 12.3.0 RP-65 RP-141511 1603 - TAI reporting of last serving cell 12.2.0 12.3.0 RP-65 RP-141498 1630 1 Correction to Network-requested CA Band Combination Capability Signalling 12.2.0 12.3.0 RP-65 RP-141496 1577 1 Clarification on double indication of SAI in SIB15 12.2.0 12.3.0 RP-65 RP-141496 1597 - Clarification on MBMSCountingResponse 12.2.0 12.3.0 RP-65 RP-141496 1623 - Clarification on the setting of SupportedBandCombination-v1130 12.2.0 12.3.0 RP-65 RP-141489 1574 1 Correction of E-UTRAN UE capabilities description in HandoverPreparationInformation message field descriptions 12.2.0 12.3.0 RP-65 RP-141507 1570 - Introducing MBSFN measurement by extension of logged measurements 12.2.0 12.3.0 RP-65 RP-141510 1572 1 Introduction of ACB skip for MMTEL voice/video and SMS 12.2.0 12.3.0 RP-65 RP-141496 1615 1 Clarification on determining MBMS frequencies of interest in MBMSInterestIndication 12.2.0 12.3.0 RP-65 RP-141506 1579 1 Introduction of signaling support for low complexity UEs 12.2.0 12.3.0 RP-65 RP-141499 1601 1 Rel-12 ASN.1 correction 12.2.0 12.3.0 RP-65 RP-141511 1560 1 Introduction of shorter MCH scheduling period 12.2.0 12.3.0 RP-65 RP-141493 1611 - Clarification for time-domain resource restriction pattern applicable to neighbour cell RSRQ measurements 12.2.0 12.3.0 RP-65 RP-141511 1559 2 Correction to stop condition for "Chiba offset" 12.2.0 12.3.0 RP-65 RP-141115 1636 - Mandating the FGI bit 31 to true 12.2.0 12.3.0 RP-65 RP-141618 1566 2 Connected mode procedures and RRC signaling of WLAN/3GPP Radio Interworking for LTE 12.2.0 12.3.0 12/2014 RP-66 RP-142122 1643 - Clarification on WLAN interworking 12.3.0 12.4.0 RP-66 RP-142122 1644 - Correction on handling of dedicated parameters during re-establishment 12.3.0 12.4.0 RP-66 RP-142122 1645 - Corrections to WLAN/3GPP Radio Interworking for LTE 12.3.0 12.4.0 RP-66 RP-142122 1646 - Reduction of possible values for WLAN backhaul rate thresholds in LTE 12.3.0 12.4.0 RP-66 RP-142140 1648 - PDCP SN size change during HO for RLC-UM mode bearers 12.3.0 12.4.0 RP-66 RP-142124 1651 - Support of TTI bundling without resource allocation restriction for LTE coverage enhancements for Rel-12 12.3.0 12.4.0 RP-66 RP-142123 1652 - Corrections to eIMTA capabilities 12.3.0 12.4.0 RP-66 RP-142140 1653 - ACB, ACB-skip, CSFB and SSAC signalling per PLMN 12.3.0 12.4.0 RP-66 RP-142122 1642 1 Minor corrections regarding WLAN interworking 12.3.0 12.4.0 RP-66 RP-142115 1659 - Correction of remaining TBD for Rel-10 FGIs 12.3.0 12.4.0 RP-66 RP-142117 1663 - New UE categories for DL 600Mbps 12.3.0 12.4.0 RP-66 RP-142135 1687 - Introduction of Dual Connectivity 12.3.0 12.4.0 RP-66 RP-142140 1697 1 Prohibit timer for SR 12.3.0 12.4.0 RP-66 RP-142133 1666 - Support of 256QAM in TS 36.331 (per band 256QAM capability report) 12.3.0 12.4.0 RP-66 RP-142128 1690 1 Introduction of increased number of frequencies to monitor 12.3.0 12.4.0 RP-66 RP-142140 1696 2 Introduction of extended RSRQ value range and new RSRQ definition 12.3.0 12.4.0 RP-66 RP-142115 1650 1 Introduction of signalling for serving cell interruptions 12.3.0 12.4.0 RP-66 RP-142123 1655 - Correction for p0-Persistent-SubframeSet2 Handling 12.3.0 12.4.0 RP-66 RP-142134 1681 - Introduction of missing Rel-12 UE capabilities 12.3.0 12.4.0 RP-66 RP-142140 1647 1 Extended RLC LI field correction 12.3.0 12.4.0 RP-66 RP-142140 1656 - Outstanding Need OP for non-critical extension removal 12.3.0 12.4.0 RP-66 RP-142140 1669 2 Clarification on statusReportRequired handling 12.3.0 12.4.0 RP-66 RP-142131 1698 2 MCH BLER and RSRQ update for MBSFN MDT 12.3.0 12.4.0 RP-66 RP-142130 1699 1 Optionality support of UE mandatory features for Category 0 UEs 12.3.0 12.4.0 RP-66 RP-142123 1661 - Further Clarifications on eIMTA and eICIC 12.3.0 12.4.0 RP-66 RP-142113 1686 1 UE capability for modified MPR behavior 12.3.0 12.4.0 RP-66 RP-142132 1664 1 Support of Discovery Signals measurement in TS 36.331 12.3.0 12.4.0 RP-66 RP-142139 1670 2 RRC Parameters for NAICS 12.3.0 12.4.0 RP-66 RP-141979 1700 - UE capability signaling for WLAN/3GPP radio interworking 12.3.0 12.4.0 RP-66 - - - MCC editorial update 12.4.0 12.4.1 03/2015 RP-67 RP-150373 1737 - Clarification on the setting of measScaleFactor without reducedMeasPerformance 12.4.1 12.5.0 RP-67 RP-150371 1747 - Clarification on Measurement Configuration handling 12.4.1 12.5.0 RP-67 RP-150371 1765 - Clarification to usage of field deltaTxD-OffsetPUCCH-Format1bCS-r11 in dedicated uplink power control parameter signalling 12.4.1 12.5.0 RP-67 RP-150370 1751 - Clarification on CSI measurement subframe set 12.4.1 12.5.0 RP-67 RP-150368 1795 - The absence of supportedMIMO-CapabilityUL-r10 12.4.1 12.5.0 RP-67 RP-150370 1798 - Presence of codebookSubsetRestriction 12.4.1 12.5.0 RP-67 RP-150377 1768 2 Miscellaneous changes resulting from review for REL-12 ASN.1 freeze 12.4.1 12.5.0 RP-67 RP-150374 1770 2 Introduction of ProSe 12.4.1 12.5.0 06/2015 RP-68 RP-150921 1800 - Correction field description of networkControlledSyncTx 12.5.0 12.6.0 RP-68 RP-150921 1801 - Clarification on SCG reconfiguration 12.5.0 12.6.0 RP-68 RP-150921 1802 - Correction for aperiodic CSI trigger 12.5.0 12.6.0 RP-68 RP-150920 1804 - Correction on handling of wlan-OffloadConfigDedicated upon leaving RRC_CONNECTED 12.5.0 12.6.0 RP-68 RP-150921 1805 - Reconfiguration of SPS 12.5.0 12.6.0 RP-68 RP-150916 1809 - CR on Aperiodic CSI Reporting for 1.4MHz cell 12.5.0 12.6.0 RP-68 RP-150921 1815 - Clarification on PDCP reconfiguration 12.5.0 12.6.0 RP-68 RP-150921 1816 - Correction to SCG change 12.5.0 12.6.0 RP-68 RP-150921 1817 - Minor corrections for PSCell configuration in DC 12.5.0 12.6.0 RP-68 RP-150921 1818 - CR on ROHC for split bearer 12.5.0 12.6.0 RP-68 RP-150921 1819 - Clarification on FDD/TDD differentiation of FGIs/capabilities in TDD-FDD CA 12.5.0 12.6.0 RP-68 RP-150921 1803 1 Correction to SCG and split bearer configuration 12.5.0 12.6.0 RP-68 RP-150921 1810 1 Clarifications on use of preconfigComm for direct communication 12.5.0 12.6.0 RP-68 RP-150921 1811 1 Miscellaneous corrections (a.o. Sidelink) 12.5.0 12.6.0 RP-68 RP-150921 1813 1 Conditions for establishing RRC Connection for sidelink transmission 12.5.0 12.6.0 RP-68 RP-150921 1814 1 Correction on field description on SL-TF-ResourceConfig 12.5.0 12.6.0 RP-68 RP-150917 1806 1 Mandatory present of supportedMIMO-CapabilityDL-r10 12.5.0 12.6.0 RP-68 RP-150923 1853 - Clarification on Cell barring for downlink only bands 12.5.0 12.6.0 RP-68 RP-150917 1852 - Clarification regarding no MBMS sessions ongoing 12.5.0 12.6.0 RP-68 RP-150917 1827 1 Correction to additionalSpectrumEmission 12.5.0 12.6.0 RP-68 RP-150923 1820 4 Clarification on extended RSRQ range support 12.5.0 12.6.0 RP-68 RP-150917 1838 - Restriction to CA capability signalling 12.5.0 12.6.0 RP-68 RP-150921 1823 - Clarification on PUCCH and SRS 12.5.0 12.6.0 RP-68 RP-150926 1849 - Introduction of new DL UE categories 15&16 12.5.0 12.6.0 RP-68 RP-150923 1824 - Clean-up corrections to TS 36.331 12.5.0 12.6.0 RP-68 RP-150918 1846 1 Correction to IDC signalling 12.5.0 12.6.0 RP-68 RP-150921 1822 1 Change of LCID upon DC-specific DRB reconfiguration 12.5.0 12.6.0 RP-68 RP-150921 1832 1 Correction to PHR format 12.5.0 12.6.0 RP-68 RP-150921 1842 1 Correction on conditions for sidelink operation 12.5.0 12.6.0 RP-68 RP-150811 1834 2 Correction on the SL-TF-IndexPair values for ProSe Direct Discovery 12.5.0 12.6.0 +Page 1 + + +3GPP TS 36.331 V12.6.0 (2015-06) +2 +Release 12 + + +3GPP + +3GPP TS 36.331 V12.6.0 (2015-06) +438 +Release 12 + + +3GPP + diff --git a/openair2/RRC/LITE/MESSAGES/asn1c/ASN1_files/EUTRA-InterNodeDefinitions-ah0.asn b/openair2/RRC/LITE/MESSAGES/asn1c/ASN1_files/EUTRA-InterNodeDefinitions-ah0.asn new file mode 100644 index 0000000000..51a794863d --- /dev/null +++ b/openair2/RRC/LITE/MESSAGES/asn1c/ASN1_files/EUTRA-InterNodeDefinitions-ah0.asn @@ -0,0 +1,165 @@ +EUTRA-InterNodeDefinitions DEFINITIONS AUTOMATIC TAGS ::= + +BEGIN + + +HandoverCommand ::= SEQUENCE { + criticalExtensions CHOICE { + c1 CHOICE{ + handoverCommand-r8 HandoverCommand-r8-IEs, + spare7 NULL, + spare6 NULL, spare5 NULL, spare4 NULL, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +HandoverCommand-r8-IEs ::= SEQUENCE { + handoverCommandMessage OCTET STRING (CONTAINING DL-DCCH-Message), + nonCriticalExtension SEQUENCE {} OPTIONAL +} + + +HandoverPreparationInformation ::= SEQUENCE { + criticalExtensions CHOICE { + c1 CHOICE{ + handoverPreparationInformation-r8 HandoverPreparationInformation-r8-IEs, + spare7 NULL, + spare6 NULL, spare5 NULL, spare4 NULL, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +HandoverPreparationInformation-r8-IEs ::= SEQUENCE { + ue-RadioAccessCapabilityInfo UE-CapabilityRAT-ContainerList, + as-Config AS-Config OPTIONAL, -- Cond HO + rrm-Config RRM-Config OPTIONAL, + as-Context AS-Context OPTIONAL, -- Cond HO + nonCriticalExtension HandoverPreparationInformation-v920-IEs OPTIONAL +} + +HandoverPreparationInformation-v920-IEs ::= SEQUENCE { + ue-ConfigRelease-r9 ENUMERATED { + rel9, rel10, spare6, spare5, spare4, spare3, + spare2, spare1, ...} OPTIONAL, -- Cond HO2 + nonCriticalExtension HandoverPreparationInformation-v9d0-IEs OPTIONAL +} + +HandoverPreparationInformation-v9d0-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, + nonCriticalExtension HandoverPreparationInformation-v9e0-IEs OPTIONAL +} + +HandoverPreparationInformation-v9e0-IEs ::= SEQUENCE { + as-Config-v9e0 AS-Config-v9e0 OPTIONAL, -- Cond HO2 + nonCriticalExtension SEQUENCE {} OPTIONAL +} + + +UERadioAccessCapabilityInformation ::= SEQUENCE { + criticalExtensions CHOICE { + c1 CHOICE{ + ueRadioAccessCapabilityInformation-r8 + UERadioAccessCapabilityInformation-r8-IEs, + spare7 NULL, + spare6 NULL, spare5 NULL, spare4 NULL, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +UERadioAccessCapabilityInformation-r8-IEs ::= SEQUENCE { + ue-RadioAccessCapabilityInfo OCTET STRING (CONTAINING UECapabilityInformation), + nonCriticalExtension SEQUENCE {} OPTIONAL +} + + +AS-Config ::= SEQUENCE { + sourceMeasConfig MeasConfig, + sourceRadioResourceConfig RadioResourceConfigDedicated, + sourceSecurityAlgorithmConfig SecurityAlgorithmConfig, + sourceUE-Identity C-RNTI, + sourceMasterInformationBlock MasterInformationBlock, + sourceSystemInformationBlockType1 SystemInformationBlockType1(WITH COMPONENTS + {..., nonCriticalExtension ABSENT}), + sourceSystemInformationBlockType2 SystemInformationBlockType2, + antennaInfoCommon AntennaInfoCommon, + sourceDl-CarrierFreq ARFCN-ValueEUTRA, + ..., + [[ sourceSystemInformationBlockType1Ext OCTET STRING (CONTAINING + SystemInformationBlockType1-v890-IEs) OPTIONAL, + sourceOtherConfig-r9 OtherConfig-r9 + ]], + [[ sourceSCellConfigList-r10 SCellToAddModList-r10 OPTIONAL + ]] +} + +AS-Config-v9e0 ::= SEQUENCE { + sourceDl-CarrierFreq-v9e0 ARFCN-ValueEUTRA-v9e0 +} + + +AS-Context ::= SEQUENCE { + reestablishmentInfo ReestablishmentInfo OPTIONAL -- Cond HO +} + + +ReestablishmentInfo ::= SEQUENCE { + sourcePhysCellId PhysCellId, + targetCellShortMAC-I ShortMAC-I, + additionalReestabInfoList AdditionalReestabInfoList OPTIONAL, + ... +} + +AdditionalReestabInfoList ::= SEQUENCE ( SIZE (1..maxReestabInfo) ) OF AdditionalReestabInfo + +AdditionalReestabInfo ::= SEQUENCE{ + cellIdentity CellIdentity, + key-eNodeB-Star Key-eNodeB-Star, + shortMAC-I ShortMAC-I +} + +Key-eNodeB-Star ::= BIT STRING (SIZE (256)) + + +RRM-Config ::= SEQUENCE { + ue-InactiveTime ENUMERATED { + s1, s2, s3, s5, s7, s10, s15, s20, + s25, s30, s40, s50, min1, min1s20c, min1s40, + min2, min2s30, min3, min3s30, min4, min5, min6, + min7, min8, min9, min10, min12, min14, min17, min20, + min24, min28, min33, min38, min44, min50, hr1, + hr1min30, hr2, hr2min30, hr3, hr3min30, hr4, hr5, hr6, + hr8, hr10, hr13, hr16, hr20, day1, day1hr12, day2, + day2hr12, day3, day4, day5, day7, day10, day14, day19, + day24, day30, dayMoreThan30} OPTIONAL, + ..., + [[ candidateCellInfoList-r10 CandidateCellInfoList-r10 OPTIONAL + ]] +} + +CandidateCellInfoList-r10 ::= SEQUENCE (SIZE (1..maxFreq)) OF CandidateCellInfo-r10 + +CandidateCellInfo-r10 ::= SEQUENCE { + -- cellIdentification + physCellId-r10 PhysCellId, + dl-CarrierFreq-r10 ARFCN-ValueEUTRA, + -- available measurement results + rsrpResult-r10 RSRP-Range OPTIONAL, + rsrqResult-r10 RSRQ-Range OPTIONAL, + ..., + [[ dl-CarrierFreq-v1090 ARFCN-ValueEUTRA-v9e0 OPTIONAL + ]] +} + + +maxReestabInfo INTEGER ::= 32 -- Maximum number of KeNB* and shortMAC-I forwarded + -- at handover for re-establishment preparation + + +END + diff --git a/openair2/RRC/LITE/MESSAGES/asn1c/ASN1_files/EUTRA-InterNodeDefinitions-c60.asn b/openair2/RRC/LITE/MESSAGES/asn1c/ASN1_files/EUTRA-InterNodeDefinitions-c60.asn new file mode 100644 index 0000000000..d14a64b01d --- /dev/null +++ b/openair2/RRC/LITE/MESSAGES/asn1c/ASN1_files/EUTRA-InterNodeDefinitions-c60.asn @@ -0,0 +1,310 @@ +EUTRA-InterNodeDefinitions DEFINITIONS AUTOMATIC TAGS ::= + +BEGIN + + +HandoverCommand ::= SEQUENCE { + criticalExtensions CHOICE { + c1 CHOICE{ + handoverCommand-r8 HandoverCommand-r8-IEs, + spare7 NULL, + spare6 NULL, spare5 NULL, spare4 NULL, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +HandoverCommand-r8-IEs ::= SEQUENCE { + handoverCommandMessage OCTET STRING (CONTAINING DL-DCCH-Message), + nonCriticalExtension SEQUENCE {} OPTIONAL +} + + +HandoverPreparationInformation ::= SEQUENCE { + criticalExtensions CHOICE { + c1 CHOICE{ + handoverPreparationInformation-r8 HandoverPreparationInformation-r8-IEs, + spare7 NULL, + spare6 NULL, spare5 NULL, spare4 NULL, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +HandoverPreparationInformation-r8-IEs ::= SEQUENCE { + ue-RadioAccessCapabilityInfo UE-CapabilityRAT-ContainerList, + as-Config AS-Config OPTIONAL, -- Cond HO + rrm-Config RRM-Config OPTIONAL, + as-Context AS-Context OPTIONAL, -- Cond HO + nonCriticalExtension HandoverPreparationInformation-v920-IEs OPTIONAL +} + +HandoverPreparationInformation-v920-IEs ::= SEQUENCE { + ue-ConfigRelease-r9 ENUMERATED { + rel9, rel10, rel11, rel12, spare4, spare3, + spare2, spare1, ...} OPTIONAL, -- Cond HO2 + nonCriticalExtension HandoverPreparationInformation-v9d0-IEs OPTIONAL +} + +HandoverPreparationInformation-v9d0-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, + nonCriticalExtension HandoverPreparationInformation-v9e0-IEs OPTIONAL +} + +HandoverPreparationInformation-v9e0-IEs ::= SEQUENCE { + as-Config-v9e0 AS-Config-v9e0 OPTIONAL, -- Cond HO2 + nonCriticalExtension HandoverPreparationInformation-v1130-IEs OPTIONAL +} + +HandoverPreparationInformation-v1130-IEs ::= SEQUENCE { + as-Context-v1130 AS-Context-v1130 OPTIONAL, -- Cond HO2 + nonCriticalExtension HandoverPreparationInformation-v1250-IEs OPTIONAL +} + +HandoverPreparationInformation-v1250-IEs ::= SEQUENCE { + ue-SupportedEARFCN-r12 ARFCN-ValueEUTRA-r9 OPTIONAL, -- Cond HO3 + as-Config-v1250 AS-Config-v1250 OPTIONAL, -- Cond HO2 + nonCriticalExtension SEQUENCE {} OPTIONAL +} + + +SCG-Config-r12 ::= SEQUENCE { + criticalExtensions CHOICE { + c1 CHOICE{ + scg-Config-r12 SCG-Config-r12-IEs, + spare7 NULL, + spare6 NULL, spare5 NULL, spare4 NULL, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +SCG-Config-r12-IEs ::= SEQUENCE { + scg-RadioConfig-r12 SCG-ConfigPartSCG-r12 OPTIONAL, + nonCriticalExtension SEQUENCE {} OPTIONAL +} + + +SCG-ConfigInfo-r12 ::= SEQUENCE { + criticalExtensions CHOICE { + c1 CHOICE{ + scg-ConfigInfo-r12 SCG-ConfigInfo-r12-IEs, + spare7 NULL, + spare6 NULL, spare5 NULL, spare4 NULL, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +SCG-ConfigInfo-r12-IEs ::= SEQUENCE { + radioResourceConfigDedMCG-r12 RadioResourceConfigDedicated OPTIONAL, + sCellToAddModListMCG-r12 SCellToAddModList-r10 OPTIONAL, + measGapConfig-r12 MeasGapConfig OPTIONAL, + powerCoordinationInfo-r12 PowerCoordinationInfo-r12 OPTIONAL, + scg-RadioConfig-r12 SCG-ConfigPartSCG-r12 OPTIONAL, + eutra-CapabilityInfo-r12 OCTET STRING (CONTAINING UECapabilityInformation) OPTIONAL, + scg-ConfigRestrictInfo-r12 SCG-ConfigRestrictInfo-r12 OPTIONAL, + mbmsInterestIndication-r12 OCTET STRING (CONTAINING + MBMSInterestIndication-r11) OPTIONAL, + measResultServCellListSCG-r12 MeasResultServCellListSCG-r12 OPTIONAL, + drb-ToAddModListSCG-r12 DRB-InfoListSCG-r12 OPTIONAL, + drb-ToReleaseListSCG-r12 DRB-ToReleaseList OPTIONAL, + sCellToAddModListSCG-r12 SCellToAddModListSCG-r12 OPTIONAL, + sCellToReleaseListSCG-r12 SCellToReleaseList-r10 OPTIONAL, + p-Max-r12 P-Max OPTIONAL, + nonCriticalExtension SEQUENCE {} OPTIONAL +} + +DRB-InfoListSCG-r12 ::= SEQUENCE (SIZE (1..maxDRB)) OF DRB-InfoSCG-r12 + +DRB-InfoSCG-r12 ::= SEQUENCE { + eps-BearerIdentity-r12 INTEGER (0..15) OPTIONAL, -- Cond DRB-Setup + drb-Identity-r12 DRB-Identity, + drb-Type-r12 ENUMERATED {split, scg} OPTIONAL, -- Cond DRB-Setup + ... +} + +SCellToAddModListSCG-r12 ::= SEQUENCE (SIZE (1..maxSCell-r10)) OF Cell-ToAddMod-r12 + +Cell-ToAddMod-r12 ::= SEQUENCE { + sCellIndex-r12 SCellIndex-r10, + cellIdentification-r12 SEQUENCE { + physCellId-r12 PhysCellId, + dl-CarrierFreq-r12 ARFCN-ValueEUTRA-r9 + } OPTIONAL, -- Cond SCellAdd + measResultCellToAdd-r12 SEQUENCE { + rsrpResult-r12 RSRP-Range, + rsrqResult-r12 RSRQ-Range + } OPTIONAL, -- Cond SCellAdd2 + ... +} + +MeasResultServCellListSCG-r12 ::= SEQUENCE (SIZE (1..maxServCell-r10)) OF MeasResultServCellSCG-r12 + +MeasResultServCellSCG-r12 ::= SEQUENCE { + servCellId-r12 ServCellIndex-r10, + measResultSCell-r12 SEQUENCE { + rsrpResultSCell-r12 RSRP-Range, + rsrqResultSCell-r12 RSRQ-Range + }, + ... +} + +SCG-ConfigRestrictInfo-r12 ::= SEQUENCE { + maxSCH-TB-BitsDL-r12 INTEGER (1..100), + maxSCH-TB-BitsUL-r12 INTEGER (1..100) +} + + +UERadioAccessCapabilityInformation ::= SEQUENCE { + criticalExtensions CHOICE { + c1 CHOICE{ + ueRadioAccessCapabilityInformation-r8 + UERadioAccessCapabilityInformation-r8-IEs, + spare7 NULL, + spare6 NULL, spare5 NULL, spare4 NULL, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +UERadioAccessCapabilityInformation-r8-IEs ::= SEQUENCE { + ue-RadioAccessCapabilityInfo OCTET STRING (CONTAINING UECapabilityInformation), + nonCriticalExtension SEQUENCE {} OPTIONAL +} + + +UERadioPagingInformation ::= SEQUENCE { + criticalExtensions CHOICE { + c1 CHOICE{ + ueRadioPagingInformation-r12 UERadioPagingInformation-r12-IEs, + spare7 NULL, + spare6 NULL, spare5 NULL, spare4 NULL, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +UERadioPagingInformation-r12-IEs ::= SEQUENCE { + ue-RadioPagingInfo-r12 OCTET STRING (CONTAINING UE-RadioPagingInfo-r12), + nonCriticalExtension SEQUENCE {} OPTIONAL +} + + +AS-Config ::= SEQUENCE { + sourceMeasConfig MeasConfig, + sourceRadioResourceConfig RadioResourceConfigDedicated, + sourceSecurityAlgorithmConfig SecurityAlgorithmConfig, + sourceUE-Identity C-RNTI, + sourceMasterInformationBlock MasterInformationBlock, + sourceSystemInformationBlockType1 SystemInformationBlockType1(WITH COMPONENTS + {..., nonCriticalExtension ABSENT}), + sourceSystemInformationBlockType2 SystemInformationBlockType2, + antennaInfoCommon AntennaInfoCommon, + sourceDl-CarrierFreq ARFCN-ValueEUTRA, + ..., + [[ sourceSystemInformationBlockType1Ext OCTET STRING (CONTAINING + SystemInformationBlockType1-v890-IEs) OPTIONAL, + sourceOtherConfig-r9 OtherConfig-r9 + -- sourceOtherConfig-r9 should have been optional. A target eNB compliant with this transfer + -- syntax should support receiving an AS-Config not including this extension addition group + -- e.g. from a legacy source eNB + ]], + [[ sourceSCellConfigList-r10 SCellToAddModList-r10 OPTIONAL + ]], + [[ sourceConfigSCG-r12 SCG-Config-r12 OPTIONAL + ]] +} + +AS-Config-v9e0 ::= SEQUENCE { + sourceDl-CarrierFreq-v9e0 ARFCN-ValueEUTRA-v9e0 +} + +AS-Config-v1250 ::= SEQUENCE { + sourceWlan-OffloadConfig-r12 WLAN-OffloadConfig-r12 OPTIONAL, + sourceSL-CommConfig-r12 SL-CommConfig-r12 OPTIONAL, + sourceSL-DiscConfig-r12 SL-DiscConfig-r12 OPTIONAL +} + + +AS-Context ::= SEQUENCE { + reestablishmentInfo ReestablishmentInfo OPTIONAL -- Cond HO +} + +AS-Context-v1130 ::= SEQUENCE { + idc-Indication-r11 OCTET STRING (CONTAINING + InDeviceCoexIndication-r11) OPTIONAL, -- Cond HO2 + mbmsInterestIndication-r11 OCTET STRING (CONTAINING + MBMSInterestIndication-r11) OPTIONAL, -- Cond HO2 + powerPrefIndication-r11 OCTET STRING (CONTAINING + UEAssistanceInformation-r11) OPTIONAL, -- Cond HO2 + ..., + [[ sidelinkUEInformation-r12 OCTET STRING (CONTAINING + SidelinkUEInformation-r12) OPTIONAL -- Cond HO2 + ]] +} + + +ReestablishmentInfo ::= SEQUENCE { + sourcePhysCellId PhysCellId, + targetCellShortMAC-I ShortMAC-I, + additionalReestabInfoList AdditionalReestabInfoList OPTIONAL, + ... +} + +AdditionalReestabInfoList ::= SEQUENCE ( SIZE (1..maxReestabInfo) ) OF AdditionalReestabInfo + +AdditionalReestabInfo ::= SEQUENCE{ + cellIdentity CellIdentity, + key-eNodeB-Star Key-eNodeB-Star, + shortMAC-I ShortMAC-I +} + +Key-eNodeB-Star ::= BIT STRING (SIZE (256)) + + +RRM-Config ::= SEQUENCE { + ue-InactiveTime ENUMERATED { + s1, s2, s3, s5, s7, s10, s15, s20, + s25, s30, s40, s50, min1, min1s20c, min1s40, + min2, min2s30, min3, min3s30, min4, min5, min6, + min7, min8, min9, min10, min12, min14, min17, min20, + min24, min28, min33, min38, min44, min50, hr1, + hr1min30, hr2, hr2min30, hr3, hr3min30, hr4, hr5, hr6, + hr8, hr10, hr13, hr16, hr20, day1, day1hr12, day2, + day2hr12, day3, day4, day5, day7, day10, day14, day19, + day24, day30, dayMoreThan30} OPTIONAL, + ..., + [[ candidateCellInfoList-r10 CandidateCellInfoList-r10 OPTIONAL + ]] +} + +CandidateCellInfoList-r10 ::= SEQUENCE (SIZE (1..maxFreq)) OF CandidateCellInfo-r10 + +CandidateCellInfo-r10 ::= SEQUENCE { + -- cellIdentification + physCellId-r10 PhysCellId, + dl-CarrierFreq-r10 ARFCN-ValueEUTRA, + -- available measurement results + rsrpResult-r10 RSRP-Range OPTIONAL, + rsrqResult-r10 RSRQ-Range OPTIONAL, + ..., + [[ dl-CarrierFreq-v1090 ARFCN-ValueEUTRA-v9e0 OPTIONAL + ]], + [[ rsrqResult-v1250 RSRQ-Range-v1250 OPTIONAL + ]] +} + + +maxReestabInfo INTEGER ::= 32 -- Maximum number of KeNB* and shortMAC-I forwarded + -- at handover for re-establishment preparation + + +END + diff --git a/openair2/RRC/LITE/MESSAGES/asn1c/ASN1_files/EUTRA-RRC-Definitions-ah0.asn b/openair2/RRC/LITE/MESSAGES/asn1c/ASN1_files/EUTRA-RRC-Definitions-ah0.asn new file mode 100644 index 0000000000..f725f01c41 --- /dev/null +++ b/openair2/RRC/LITE/MESSAGES/asn1c/ASN1_files/EUTRA-RRC-Definitions-ah0.asn @@ -0,0 +1,4486 @@ +EUTRA-RRC-Definitions DEFINITIONS AUTOMATIC TAGS ::= + +BEGIN + + +BCCH-BCH-Message ::= SEQUENCE { + message BCCH-BCH-MessageType +} + +BCCH-BCH-MessageType ::= MasterInformationBlock + + +BCCH-DL-SCH-Message ::= SEQUENCE { + message BCCH-DL-SCH-MessageType +} + +BCCH-DL-SCH-MessageType ::= CHOICE { + c1 CHOICE { + systemInformation SystemInformation, + systemInformationBlockType1 SystemInformationBlockType1 + }, + messageClassExtension SEQUENCE {} +} + + +MCCH-Message ::= SEQUENCE { + message MCCH-MessageType +} + +MCCH-MessageType ::= CHOICE { + c1 CHOICE { + mbsfnAreaConfiguration-r9 MBSFNAreaConfiguration-r9 + }, + later CHOICE { + c2 CHOICE{ + mbmsCountingRequest-r10 MBMSCountingRequest-r10 + }, + messageClassExtension SEQUENCE {} + } +} + + +PCCH-Message ::= SEQUENCE { + message PCCH-MessageType +} + +PCCH-MessageType ::= CHOICE { + c1 CHOICE { + paging Paging + }, + messageClassExtension SEQUENCE {} +} + + +DL-CCCH-Message ::= SEQUENCE { + message DL-CCCH-MessageType +} + +DL-CCCH-MessageType ::= CHOICE { + c1 CHOICE { + rrcConnectionReestablishment RRCConnectionReestablishment, + rrcConnectionReestablishmentReject RRCConnectionReestablishmentReject, + rrcConnectionReject RRCConnectionReject, + rrcConnectionSetup RRCConnectionSetup + }, + messageClassExtension SEQUENCE {} +} + + +DL-DCCH-Message ::= SEQUENCE { + message DL-DCCH-MessageType +} + +DL-DCCH-MessageType ::= CHOICE { + c1 CHOICE { + csfbParametersResponseCDMA2000 CSFBParametersResponseCDMA2000, + dlInformationTransfer DLInformationTransfer, + handoverFromEUTRAPreparationRequest HandoverFromEUTRAPreparationRequest, + mobilityFromEUTRACommand MobilityFromEUTRACommand, + rrcConnectionReconfiguration RRCConnectionReconfiguration, + rrcConnectionRelease RRCConnectionRelease, + securityModeCommand SecurityModeCommand, + ueCapabilityEnquiry UECapabilityEnquiry, + counterCheck CounterCheck, + ueInformationRequest-r9 UEInformationRequest-r9, + loggedMeasurementConfiguration-r10 LoggedMeasurementConfiguration-r10, + rnReconfiguration-r10 RNReconfiguration-r10, + spare4 NULL, + spare3 NULL, spare2 NULL, spare1 NULL + }, + messageClassExtension SEQUENCE {} +} + + +UL-CCCH-Message ::= SEQUENCE { + message UL-CCCH-MessageType +} + +UL-CCCH-MessageType ::= CHOICE { + c1 CHOICE { + rrcConnectionReestablishmentRequest RRCConnectionReestablishmentRequest, + rrcConnectionRequest RRCConnectionRequest + }, + messageClassExtension SEQUENCE {} +} + + +UL-DCCH-Message ::= SEQUENCE { + message UL-DCCH-MessageType +} + +UL-DCCH-MessageType ::= CHOICE { + c1 CHOICE { + csfbParametersRequestCDMA2000 CSFBParametersRequestCDMA2000, + measurementReport MeasurementReport, + rrcConnectionReconfigurationComplete RRCConnectionReconfigurationComplete, + rrcConnectionReestablishmentComplete RRCConnectionReestablishmentComplete, + rrcConnectionSetupComplete RRCConnectionSetupComplete, + securityModeComplete SecurityModeComplete, + securityModeFailure SecurityModeFailure, + ueCapabilityInformation UECapabilityInformation, + ulHandoverPreparationTransfer ULHandoverPreparationTransfer, + ulInformationTransfer ULInformationTransfer, + counterCheckResponse CounterCheckResponse, + ueInformationResponse-r9 UEInformationResponse-r9, + proximityIndication-r9 ProximityIndication-r9, + rnReconfigurationComplete-r10 RNReconfigurationComplete-r10, + mbmsCountingResponse-r10 MBMSCountingResponse-r10, + interFreqRSTDMeasurementIndication-r10 InterFreqRSTDMeasurementIndication-r10 + }, + messageClassExtension SEQUENCE {} +} + + +CounterCheck ::= SEQUENCE { + rrc-TransactionIdentifier RRC-TransactionIdentifier, + criticalExtensions CHOICE { + c1 CHOICE { + counterCheck-r8 CounterCheck-r8-IEs, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +CounterCheck-r8-IEs ::= SEQUENCE { + drb-CountMSB-InfoList DRB-CountMSB-InfoList, + nonCriticalExtension CounterCheck-v8a0-IEs OPTIONAL +} + +CounterCheck-v8a0-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, -- Need OP + nonCriticalExtension SEQUENCE {} OPTIONAL -- Need OP +} + +DRB-CountMSB-InfoList ::= SEQUENCE (SIZE (1..maxDRB)) OF DRB-CountMSB-Info + +DRB-CountMSB-Info ::= SEQUENCE { + drb-Identity DRB-Identity, + countMSB-Uplink INTEGER(0..33554431), + countMSB-Downlink INTEGER(0..33554431) +} + + +CounterCheckResponse ::= SEQUENCE { + rrc-TransactionIdentifier RRC-TransactionIdentifier, + criticalExtensions CHOICE { + counterCheckResponse-r8 CounterCheckResponse-r8-IEs, + criticalExtensionsFuture SEQUENCE {} + } +} + +CounterCheckResponse-r8-IEs ::= SEQUENCE { + drb-CountInfoList DRB-CountInfoList, + nonCriticalExtension CounterCheckResponse-v8a0-IEs OPTIONAL +} + +CounterCheckResponse-v8a0-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, + nonCriticalExtension SEQUENCE {} OPTIONAL +} + +DRB-CountInfoList ::= SEQUENCE (SIZE (0..maxDRB)) OF DRB-CountInfo + +DRB-CountInfo ::= SEQUENCE { + drb-Identity DRB-Identity, + count-Uplink INTEGER(0..4294967295), + count-Downlink INTEGER(0..4294967295) +} + + +CSFBParametersRequestCDMA2000 ::= SEQUENCE { + criticalExtensions CHOICE { + csfbParametersRequestCDMA2000-r8 CSFBParametersRequestCDMA2000-r8-IEs, + criticalExtensionsFuture SEQUENCE {} + } +} + +CSFBParametersRequestCDMA2000-r8-IEs ::= SEQUENCE { + nonCriticalExtension CSFBParametersRequestCDMA2000-v8a0-IEs OPTIONAL +} + +CSFBParametersRequestCDMA2000-v8a0-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, + nonCriticalExtension SEQUENCE {} OPTIONAL +} + + +CSFBParametersResponseCDMA2000 ::= SEQUENCE { + rrc-TransactionIdentifier RRC-TransactionIdentifier, + criticalExtensions CHOICE { + csfbParametersResponseCDMA2000-r8 CSFBParametersResponseCDMA2000-r8-IEs, + criticalExtensionsFuture SEQUENCE {} + } +} + +CSFBParametersResponseCDMA2000-r8-IEs ::= SEQUENCE { + rand RAND-CDMA2000, + mobilityParameters MobilityParametersCDMA2000, + nonCriticalExtension CSFBParametersResponseCDMA2000-v8a0-IEs OPTIONAL +} + +CSFBParametersResponseCDMA2000-v8a0-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, -- Need OP + nonCriticalExtension SEQUENCE {} OPTIONAL -- Need OP +} + + +DLInformationTransfer ::= SEQUENCE { + rrc-TransactionIdentifier RRC-TransactionIdentifier, + criticalExtensions CHOICE { + c1 CHOICE { + dlInformationTransfer-r8 DLInformationTransfer-r8-IEs, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +DLInformationTransfer-r8-IEs ::= SEQUENCE { + dedicatedInfoType CHOICE { + dedicatedInfoNAS DedicatedInfoNAS, + dedicatedInfoCDMA2000-1XRTT DedicatedInfoCDMA2000, + dedicatedInfoCDMA2000-HRPD DedicatedInfoCDMA2000 + }, + nonCriticalExtension DLInformationTransfer-v8a0-IEs OPTIONAL +} + +DLInformationTransfer-v8a0-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, -- Need OP + nonCriticalExtension SEQUENCE {} OPTIONAL -- Need OP +} + + +HandoverFromEUTRAPreparationRequest ::= SEQUENCE { + rrc-TransactionIdentifier RRC-TransactionIdentifier, + criticalExtensions CHOICE { + c1 CHOICE { + handoverFromEUTRAPreparationRequest-r8 + HandoverFromEUTRAPreparationRequest-r8-IEs, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +HandoverFromEUTRAPreparationRequest-r8-IEs ::= SEQUENCE { + cdma2000-Type CDMA2000-Type, + rand RAND-CDMA2000 OPTIONAL, -- Cond cdma2000-Type + mobilityParameters MobilityParametersCDMA2000 OPTIONAL, -- Cond cdma2000-Type + nonCriticalExtension HandoverFromEUTRAPreparationRequest-v890-IEs OPTIONAL +} + +HandoverFromEUTRAPreparationRequest-v890-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, -- Need OP + nonCriticalExtension HandoverFromEUTRAPreparationRequest-v920-IEs OPTIONAL +} + +HandoverFromEUTRAPreparationRequest-v920-IEs ::= SEQUENCE { + concurrPrepCDMA2000-HRPD-r9 BOOLEAN OPTIONAL, -- Cond cdma2000-Type + nonCriticalExtension HandoverFromEUTRAPreparationRequest-v1020-IEs OPTIONAL +} + +HandoverFromEUTRAPreparationRequest-v1020-IEs ::= SEQUENCE { + dualRxTxRedirectIndicator-r10 ENUMERATED {true} OPTIONAL, -- Cond cdma2000-1XRTT + redirectCarrierCDMA2000-1XRTT-r10 CarrierFreqCDMA2000 OPTIONAL, -- Cond dualRxTxRedirect + nonCriticalExtension SEQUENCE {} OPTIONAL -- Need OP +} + + +InterFreqRSTDMeasurementIndication-r10 ::= SEQUENCE { + criticalExtensions CHOICE { + c1 CHOICE { + interFreqRSTDMeasurementIndication-r10 InterFreqRSTDMeasurementIndication-r10-IEs, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +InterFreqRSTDMeasurementIndication-r10-IEs ::= SEQUENCE { + rstd-InterFreqIndication-r10 CHOICE { + start SEQUENCE { + rstd-InterFreqInfoList-r10 RSTD-InterFreqInfoList-r10 + }, + stop NULL + }, + lateNonCriticalExtension OCTET STRING OPTIONAL, + nonCriticalExtension SEQUENCE {} OPTIONAL +} + +RSTD-InterFreqInfoList-r10 ::= SEQUENCE (SIZE(1..maxRSTD-Freq-r10)) OF RSTD-InterFreqInfo-r10 + +RSTD-InterFreqInfo-r10 ::= SEQUENCE { + carrierFreq-r10 ARFCN-ValueEUTRA, + measPRS-Offset-r10 INTEGER (0..39), + ..., + [[ carrierFreq-v1090 ARFCN-ValueEUTRA-v9e0 OPTIONAL + ]] +} + + +LoggedMeasurementConfiguration-r10 ::= SEQUENCE { + criticalExtensions CHOICE { + c1 CHOICE { + loggedMeasurementConfiguration-r10 LoggedMeasurementConfiguration-r10-IEs, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + + +LoggedMeasurementConfiguration-r10-IEs ::= SEQUENCE { + traceReference-r10 TraceReference-r10, + traceRecordingSessionRef-r10 OCTET STRING (SIZE (2)), + tce-Id-r10 OCTET STRING (SIZE (1)), + absoluteTimeInfo-r10 AbsoluteTimeInfo-r10, + areaConfiguration-r10 AreaConfiguration-r10 OPTIONAL, -- Need OR + loggingDuration-r10 LoggingDuration-r10, + loggingInterval-r10 LoggingInterval-r10, + nonCriticalExtension SEQUENCE {} OPTIONAL -- Need OP + +} + + +MasterInformationBlock ::= SEQUENCE { + dl-Bandwidth ENUMERATED { + n6, n15, n25, n50, n75, n100}, + phich-Config PHICH-Config, + systemFrameNumber BIT STRING (SIZE (8)), + spare BIT STRING (SIZE (10)) +} + + + +MBMSCountingRequest-r10 ::= SEQUENCE { + countingRequestList-r10 CountingRequestList-r10, + lateNonCriticalExtension OCTET STRING OPTIONAL, -- Need OP + nonCriticalExtension SEQUENCE {} OPTIONAL -- Need OP +} + +CountingRequestList-r10 ::= SEQUENCE (SIZE (1..maxServiceCount)) OF CountingRequestInfo-r10 + +CountingRequestInfo-r10 ::= SEQUENCE { + tmgi-r10 TMGI-r9, + ... +} + + +MBMSCountingResponse-r10 ::= SEQUENCE { + criticalExtensions CHOICE { + c1 CHOICE { + countingResponse-r10 MBMSCountingResponse-r10-IEs, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +MBMSCountingResponse-r10-IEs ::= SEQUENCE { + mbsfn-AreaIndex-r10 INTEGER (0..maxMBSFN-Area-1) OPTIONAL, + countingResponseList-r10 CountingResponseList-r10 OPTIONAL, + lateNonCriticalExtension OCTET STRING OPTIONAL, + nonCriticalExtension SEQUENCE {} OPTIONAL +} + +CountingResponseList-r10 ::= SEQUENCE (SIZE (1..maxServiceCount)) OF CountingResponseInfo-r10 + +CountingResponseInfo-r10 ::= SEQUENCE { + countingResponseService-r10 INTEGER (0..maxServiceCount-1), + ... +} + + +MBSFNAreaConfiguration-r9 ::= SEQUENCE { + commonSF-Alloc-r9 CommonSF-AllocPatternList-r9, + commonSF-AllocPeriod-r9 ENUMERATED { + rf4, rf8, rf16, rf32, rf64, rf128, rf256}, + pmch-InfoList-r9 PMCH-InfoList-r9, + nonCriticalExtension MBSFNAreaConfiguration-v930-IEs OPTIONAL +} + +MBSFNAreaConfiguration-v930-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, -- Need OP + nonCriticalExtension SEQUENCE {} OPTIONAL -- Need OP +} + +CommonSF-AllocPatternList-r9 ::= SEQUENCE (SIZE (1..maxMBSFN-Allocations)) OF MBSFN-SubframeConfig + + +MeasurementReport ::= SEQUENCE { + criticalExtensions CHOICE { + c1 CHOICE{ + measurementReport-r8 MeasurementReport-r8-IEs, + spare7 NULL, + spare6 NULL, spare5 NULL, spare4 NULL, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +MeasurementReport-r8-IEs ::= SEQUENCE { + measResults MeasResults, + nonCriticalExtension MeasurementReport-v8a0-IEs OPTIONAL +} + +MeasurementReport-v8a0-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, + nonCriticalExtension SEQUENCE {} OPTIONAL +} + + +MobilityFromEUTRACommand ::= SEQUENCE { + rrc-TransactionIdentifier RRC-TransactionIdentifier, + criticalExtensions CHOICE { + c1 CHOICE{ + mobilityFromEUTRACommand-r8 MobilityFromEUTRACommand-r8-IEs, + mobilityFromEUTRACommand-r9 MobilityFromEUTRACommand-r9-IEs, + spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +MobilityFromEUTRACommand-r8-IEs ::= SEQUENCE { + cs-FallbackIndicator BOOLEAN, + purpose CHOICE{ + handover Handover, + cellChangeOrder CellChangeOrder + }, + nonCriticalExtension MobilityFromEUTRACommand-v8a0-IEs OPTIONAL +} + +MobilityFromEUTRACommand-v8a0-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, -- Need OP + nonCriticalExtension MobilityFromEUTRACommand-v8d0-IEs OPTIONAL +} + +MobilityFromEUTRACommand-v8d0-IEs ::= SEQUENCE { + bandIndicator BandIndicatorGERAN OPTIONAL, -- Cond GERAN + nonCriticalExtension SEQUENCE {} OPTIONAL -- Need OP +} + +MobilityFromEUTRACommand-r9-IEs ::= SEQUENCE { + cs-FallbackIndicator BOOLEAN, + purpose CHOICE{ + handover Handover, + cellChangeOrder CellChangeOrder, + e-CSFB-r9 E-CSFB-r9, + ... + }, + nonCriticalExtension MobilityFromEUTRACommand-v930-IEs OPTIONAL +} + +MobilityFromEUTRACommand-v930-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, -- Need OP + nonCriticalExtension MobilityFromEUTRACommand-v960-IEs OPTIONAL +} + +MobilityFromEUTRACommand-v960-IEs ::= SEQUENCE { + bandIndicator BandIndicatorGERAN OPTIONAL, -- Cond GERAN + nonCriticalExtension SEQUENCE {} OPTIONAL -- Need OP +} + +Handover ::= SEQUENCE { + targetRAT-Type ENUMERATED { + utra, geran, cdma2000-1XRTT, cdma2000-HRPD, + spare4, spare3, spare2, spare1, ...}, + targetRAT-MessageContainer OCTET STRING, + nas-SecurityParamFromEUTRA OCTET STRING (SIZE (1)) OPTIONAL, -- Cond UTRAGERAN + systemInformation SI-OrPSI-GERAN OPTIONAL -- Cond PSHO +} + +CellChangeOrder ::= SEQUENCE { + t304 ENUMERATED { + ms100, ms200, ms500, ms1000, + ms2000, ms4000, ms8000, spare1}, + targetRAT-Type CHOICE { + geran SEQUENCE { + physCellId PhysCellIdGERAN, + carrierFreq CarrierFreqGERAN, + networkControlOrder BIT STRING (SIZE (2)) OPTIONAL, -- Need OP + systemInformation SI-OrPSI-GERAN OPTIONAL -- Need OP + }, + ... + } +} + +SI-OrPSI-GERAN ::= CHOICE { + si SystemInfoListGERAN, + psi SystemInfoListGERAN +} + +E-CSFB-r9 ::= SEQUENCE { + messageContCDMA2000-1XRTT-r9 OCTET STRING OPTIONAL, -- Need ON + mobilityCDMA2000-HRPD-r9 ENUMERATED { + handover, redirection + } OPTIONAL, -- Need OP + messageContCDMA2000-HRPD-r9 OCTET STRING OPTIONAL, -- Cond concHO + redirectCarrierCDMA2000-HRPD-r9 CarrierFreqCDMA2000 OPTIONAL -- Cond concRedir +} + + +Paging ::= SEQUENCE { + pagingRecordList PagingRecordList OPTIONAL, -- Need ON + systemInfoModification ENUMERATED {true} OPTIONAL, -- Need ON + etws-Indication ENUMERATED {true} OPTIONAL, -- Need ON + nonCriticalExtension Paging-v890-IEs OPTIONAL +} + +Paging-v890-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, -- Need OP + nonCriticalExtension Paging-v920-IEs OPTIONAL +} + +Paging-v920-IEs ::= SEQUENCE { + cmas-Indication-r9 ENUMERATED {true} OPTIONAL, -- Need ON + nonCriticalExtension SEQUENCE {} OPTIONAL -- Need OP +} + +PagingRecordList ::= SEQUENCE (SIZE (1..maxPageRec)) OF PagingRecord + +PagingRecord ::= SEQUENCE { + ue-Identity PagingUE-Identity, + cn-Domain ENUMERATED {ps, cs}, + ... +} + +PagingUE-Identity ::= CHOICE { + s-TMSI S-TMSI, + imsi IMSI, + ... +} + +IMSI ::= SEQUENCE (SIZE (6..21)) OF IMSI-Digit + +IMSI-Digit ::= INTEGER (0..9) + + +ProximityIndication-r9 ::= SEQUENCE { + criticalExtensions CHOICE { + c1 CHOICE { + proximityIndication-r9 ProximityIndication-r9-IEs, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +ProximityIndication-r9-IEs ::= SEQUENCE { + type-r9 ENUMERATED {entering, leaving}, + carrierFreq-r9 CHOICE { + eutra-r9 ARFCN-ValueEUTRA, + utra-r9 ARFCN-ValueUTRA, + ..., + eutra2-v9e0 ARFCN-ValueEUTRA-v9e0 + }, + nonCriticalExtension ProximityIndication-v930-IEs OPTIONAL +} + +ProximityIndication-v930-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, + nonCriticalExtension SEQUENCE {} OPTIONAL +} + + +RNReconfiguration-r10 ::= SEQUENCE { + rrc-TransactionIdentifier RRC-TransactionIdentifier, + criticalExtensions CHOICE { + c1 CHOICE { + rnReconfiguration-r10 RNReconfiguration-r10-IEs, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +RNReconfiguration-r10-IEs ::= SEQUENCE { + rn-SystemInfo-r10 RN-SystemInfo-r10 OPTIONAL, -- Need ON + rn-SubframeConfig-r10 RN-SubframeConfig-r10 OPTIONAL, -- Need ON + lateNonCriticalExtension OCTET STRING OPTIONAL, -- Need OP + nonCriticalExtension SEQUENCE {} OPTIONAL -- Need OP +} + +RN-SystemInfo-r10 ::= SEQUENCE { + systemInformationBlockType1-r10 OCTET STRING (CONTAINING SystemInformationBlockType1) OPTIONAL, -- Need ON + systemInformationBlockType2-r10 SystemInformationBlockType2 OPTIONAL, -- Need ON + ... +} + + +RNReconfigurationComplete-r10 ::= SEQUENCE { + rrc-TransactionIdentifier RRC-TransactionIdentifier, + criticalExtensions CHOICE { + c1 CHOICE{ + rnReconfigurationComplete-r10 RNReconfigurationComplete-r10-IEs, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +RNReconfigurationComplete-r10-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, + nonCriticalExtension SEQUENCE {} OPTIONAL +} + + +RRCConnectionReconfiguration ::= SEQUENCE { + rrc-TransactionIdentifier RRC-TransactionIdentifier, + criticalExtensions CHOICE { + c1 CHOICE{ + rrcConnectionReconfiguration-r8 RRCConnectionReconfiguration-r8-IEs, + spare7 NULL, + spare6 NULL, spare5 NULL, spare4 NULL, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +RRCConnectionReconfiguration-r8-IEs ::= SEQUENCE { + measConfig MeasConfig OPTIONAL, -- Need ON + mobilityControlInfo MobilityControlInfo OPTIONAL, -- Cond HO + dedicatedInfoNASList SEQUENCE (SIZE(1..maxDRB)) OF + DedicatedInfoNAS OPTIONAL, -- Cond nonHO + radioResourceConfigDedicated RadioResourceConfigDedicated OPTIONAL, -- Cond HO-toEUTRA + securityConfigHO SecurityConfigHO OPTIONAL, -- Cond HO + nonCriticalExtension RRCConnectionReconfiguration-v890-IEs OPTIONAL +} + +RRCConnectionReconfiguration-v890-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, -- Need OP + nonCriticalExtension RRCConnectionReconfiguration-v920-IEs OPTIONAL +} + +RRCConnectionReconfiguration-v920-IEs ::= SEQUENCE { + otherConfig-r9 OtherConfig-r9 OPTIONAL, -- Need ON + fullConfig-r9 ENUMERATED {true} OPTIONAL, -- Cond HO-Reestab + nonCriticalExtension RRCConnectionReconfiguration-v1020-IEs OPTIONAL +} + +RRCConnectionReconfiguration-v1020-IEs ::= SEQUENCE { + sCellToReleaseList-r10 SCellToReleaseList-r10 OPTIONAL, -- Need ON + sCellToAddModList-r10 SCellToAddModList-r10 OPTIONAL, -- Need ON + nonCriticalExtension SEQUENCE {} OPTIONAL -- Need OP +} + +SCellToAddModList-r10 ::= SEQUENCE (SIZE (1..maxSCell-r10)) OF SCellToAddMod-r10 + +SCellToAddMod-r10 ::= SEQUENCE { + sCellIndex-r10 SCellIndex-r10, + cellIdentification-r10 SEQUENCE { + physCellId-r10 PhysCellId, + dl-CarrierFreq-r10 ARFCN-ValueEUTRA + } OPTIONAL, -- Cond SCellAdd + radioResourceConfigCommonSCell-r10 RadioResourceConfigCommonSCell-r10 OPTIONAL, -- Cond SCellAdd + radioResourceConfigDedicatedSCell-r10 RadioResourceConfigDedicatedSCell-r10 OPTIONAL, -- Cond SCellAdd2 + ..., + [[ dl-CarrierFreq-v1090 ARFCN-ValueEUTRA-v9e0 OPTIONAL -- Cond EARFCN-max + ]] +} + +SCellToReleaseList-r10 ::= SEQUENCE (SIZE (1..maxSCell-r10)) OF SCellIndex-r10 + +SecurityConfigHO ::= SEQUENCE { + handoverType CHOICE { + intraLTE SEQUENCE { + securityAlgorithmConfig SecurityAlgorithmConfig OPTIONAL, -- Cond fullConfig + keyChangeIndicator BOOLEAN, + nextHopChainingCount NextHopChainingCount + }, + interRAT SEQUENCE { + securityAlgorithmConfig SecurityAlgorithmConfig, + nas-SecurityParamToEUTRA OCTET STRING (SIZE(6)) + } + }, + ... +} + + + +RRCConnectionReconfigurationComplete ::= SEQUENCE { + rrc-TransactionIdentifier RRC-TransactionIdentifier, + criticalExtensions CHOICE { + rrcConnectionReconfigurationComplete-r8 + RRCConnectionReconfigurationComplete-r8-IEs, + criticalExtensionsFuture SEQUENCE {} + } +} + +RRCConnectionReconfigurationComplete-r8-IEs ::= SEQUENCE { + nonCriticalExtension RRCConnectionReconfigurationComplete-v8a0-IEs OPTIONAL +} + +RRCConnectionReconfigurationComplete-v8a0-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, + nonCriticalExtension RRCConnectionReconfigurationComplete-v1020-IEs OPTIONAL +} + +RRCConnectionReconfigurationComplete-v1020-IEs ::= SEQUENCE { + rlf-InfoAvailable-r10 ENUMERATED {true} OPTIONAL, + logMeasAvailable-r10 ENUMERATED {true} OPTIONAL, + nonCriticalExtension SEQUENCE {} OPTIONAL +} + + +RRCConnectionReestablishment ::= SEQUENCE { + rrc-TransactionIdentifier RRC-TransactionIdentifier, + criticalExtensions CHOICE { + c1 CHOICE{ + rrcConnectionReestablishment-r8 RRCConnectionReestablishment-r8-IEs, + spare7 NULL, + spare6 NULL, spare5 NULL, spare4 NULL, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +RRCConnectionReestablishment-r8-IEs ::= SEQUENCE { + radioResourceConfigDedicated RadioResourceConfigDedicated, + nextHopChainingCount NextHopChainingCount, + nonCriticalExtension RRCConnectionReestablishment-v8a0-IEs OPTIONAL +} + +RRCConnectionReestablishment-v8a0-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, -- Need OP + nonCriticalExtension SEQUENCE {} OPTIONAL -- Need OP +} + + +RRCConnectionReestablishmentComplete ::= SEQUENCE { + rrc-TransactionIdentifier RRC-TransactionIdentifier, + criticalExtensions CHOICE { + rrcConnectionReestablishmentComplete-r8 + RRCConnectionReestablishmentComplete-r8-IEs, + criticalExtensionsFuture SEQUENCE {} + } +} + +RRCConnectionReestablishmentComplete-r8-IEs ::= SEQUENCE { + nonCriticalExtension RRCConnectionReestablishmentComplete-v920-IEs OPTIONAL +} + +RRCConnectionReestablishmentComplete-v920-IEs ::= SEQUENCE { + rlf-InfoAvailable-r9 ENUMERATED {true} OPTIONAL, + nonCriticalExtension RRCConnectionReestablishmentComplete-v8a0-IEs OPTIONAL +} + +RRCConnectionReestablishmentComplete-v8a0-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, + nonCriticalExtension RRCConnectionReestablishmentComplete-v1020-IEs OPTIONAL +} + +RRCConnectionReestablishmentComplete-v1020-IEs ::= SEQUENCE { + logMeasAvailable-r10 ENUMERATED {true} OPTIONAL, + nonCriticalExtension SEQUENCE {} OPTIONAL +} + + +RRCConnectionReestablishmentReject ::= SEQUENCE { + criticalExtensions CHOICE { + rrcConnectionReestablishmentReject-r8 + RRCConnectionReestablishmentReject-r8-IEs, + criticalExtensionsFuture SEQUENCE {} + } +} + +RRCConnectionReestablishmentReject-r8-IEs ::= SEQUENCE { + nonCriticalExtension RRCConnectionReestablishmentReject-v8a0-IEs OPTIONAL +} + +RRCConnectionReestablishmentReject-v8a0-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, -- Need OP + nonCriticalExtension SEQUENCE {} OPTIONAL -- Need OP +} + + +RRCConnectionReestablishmentRequest ::= SEQUENCE { + criticalExtensions CHOICE { + rrcConnectionReestablishmentRequest-r8 + RRCConnectionReestablishmentRequest-r8-IEs, + criticalExtensionsFuture SEQUENCE {} + } +} + +RRCConnectionReestablishmentRequest-r8-IEs ::= SEQUENCE { + ue-Identity ReestabUE-Identity, + reestablishmentCause ReestablishmentCause, + spare BIT STRING (SIZE (2)) +} + +ReestabUE-Identity ::= SEQUENCE { + c-RNTI C-RNTI, + physCellId PhysCellId, + shortMAC-I ShortMAC-I +} + +ReestablishmentCause ::= ENUMERATED { + reconfigurationFailure, handoverFailure, + otherFailure, spare1} + + +RRCConnectionReject ::= SEQUENCE { + criticalExtensions CHOICE { + c1 CHOICE { + rrcConnectionReject-r8 RRCConnectionReject-r8-IEs, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +RRCConnectionReject-r8-IEs ::= SEQUENCE { + waitTime INTEGER (1..16), + nonCriticalExtension RRCConnectionReject-v8a0-IEs OPTIONAL +} + +RRCConnectionReject-v8a0-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, -- Need OP + nonCriticalExtension RRCConnectionReject-v1020-IEs OPTIONAL +} + +RRCConnectionReject-v1020-IEs ::= SEQUENCE { + extendedWaitTime-r10 INTEGER (1..1800) OPTIONAL, -- Need ON + nonCriticalExtension SEQUENCE {} OPTIONAL -- Need OP +} + + +RRCConnectionRelease ::= SEQUENCE { + rrc-TransactionIdentifier RRC-TransactionIdentifier, + criticalExtensions CHOICE { + c1 CHOICE { + rrcConnectionRelease-r8 RRCConnectionRelease-r8-IEs, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +RRCConnectionRelease-r8-IEs ::= SEQUENCE { + releaseCause ReleaseCause, + redirectedCarrierInfo RedirectedCarrierInfo OPTIONAL, -- Need ON + idleModeMobilityControlInfo IdleModeMobilityControlInfo OPTIONAL, -- Need OP + nonCriticalExtension RRCConnectionRelease-v890-IEs OPTIONAL +} + +RRCConnectionRelease-v890-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING (CONTAINING RRCConnectionRelease-v9e0-IEs) OPTIONAL, -- Need OP + nonCriticalExtension RRCConnectionRelease-v920-IEs OPTIONAL +} + +RRCConnectionRelease-v9e0-IEs ::= SEQUENCE { + redirectedCarrierInfo-v9e0 RedirectedCarrierInfo-v9e0 OPTIONAL, -- Cond NoRedirect-r8 + idleModeMobilityControlInfo-v9e0 IdleModeMobilityControlInfo-v9e0 OPTIONAL, -- Cond IdleInfoEUTRA + nonCriticalExtension SEQUENCE {} OPTIONAL -- Need OP +} + +RRCConnectionRelease-v920-IEs ::= SEQUENCE { + cellInfoList-r9 CHOICE { + geran-r9 CellInfoListGERAN-r9, + utra-FDD-r9 CellInfoListUTRA-FDD-r9, + utra-TDD-r9 CellInfoListUTRA-TDD-r9, + ..., + utra-TDD-r10 CellInfoListUTRA-TDD-r10 + } OPTIONAL, -- Cond Redirection + nonCriticalExtension RRCConnectionRelease-v1020-IEs OPTIONAL +} + +RRCConnectionRelease-v1020-IEs ::= SEQUENCE { + extendedWaitTime-r10 INTEGER (1..1800) OPTIONAL, -- Need ON + nonCriticalExtension SEQUENCE {} OPTIONAL -- Need OP +} + +ReleaseCause ::= ENUMERATED {loadBalancingTAUrequired, + other, cs-FallbackHighPriority-v1020, spare1} + +RedirectedCarrierInfo ::= CHOICE { + eutra ARFCN-ValueEUTRA, + geran CarrierFreqsGERAN, + utra-FDD ARFCN-ValueUTRA, + utra-TDD ARFCN-ValueUTRA, + cdma2000-HRPD CarrierFreqCDMA2000, + cdma2000-1xRTT CarrierFreqCDMA2000, + ..., + utra-TDD-r10 CarrierFreqListUTRA-TDD-r10 +} + +RedirectedCarrierInfo-v9e0 ::= SEQUENCE { + eutra-v9e0 ARFCN-ValueEUTRA-v9e0 +} + +CarrierFreqListUTRA-TDD-r10 ::= SEQUENCE (SIZE (1..maxFreqUTRA-TDD-r10)) OF ARFCN-ValueUTRA + +IdleModeMobilityControlInfo ::= SEQUENCE { + freqPriorityListEUTRA FreqPriorityListEUTRA OPTIONAL, -- Need ON + freqPriorityListGERAN FreqsPriorityListGERAN OPTIONAL, -- Need ON + freqPriorityListUTRA-FDD FreqPriorityListUTRA-FDD OPTIONAL, -- Need ON + freqPriorityListUTRA-TDD FreqPriorityListUTRA-TDD OPTIONAL, -- Need ON + bandClassPriorityListHRPD BandClassPriorityListHRPD OPTIONAL, -- Need ON + bandClassPriorityList1XRTT BandClassPriorityList1XRTT OPTIONAL, -- Need ON + t320 ENUMERATED { + min5, min10, min20, min30, min60, min120, min180, + spare1} OPTIONAL, -- Need OR + ... +} + +IdleModeMobilityControlInfo-v9e0 ::= SEQUENCE { + freqPriorityListEUTRA-v9e0 SEQUENCE (SIZE (1..maxFreq)) OF FreqPriorityEUTRA-v9e0 +} + +FreqPriorityListEUTRA ::= SEQUENCE (SIZE (1..maxFreq)) OF FreqPriorityEUTRA + +FreqPriorityEUTRA ::= SEQUENCE { + carrierFreq ARFCN-ValueEUTRA, + cellReselectionPriority CellReselectionPriority +} + +FreqPriorityEUTRA-v9e0 ::= SEQUENCE { + carrierFreq-v9e0 ARFCN-ValueEUTRA-v9e0 OPTIONAL -- Cond EARFCN-max +} + +FreqsPriorityListGERAN ::= SEQUENCE (SIZE (1..maxGNFG)) OF FreqsPriorityGERAN + +FreqsPriorityGERAN ::= SEQUENCE { + carrierFreqs CarrierFreqsGERAN, + cellReselectionPriority CellReselectionPriority +} + +FreqPriorityListUTRA-FDD ::= SEQUENCE (SIZE (1..maxUTRA-FDD-Carrier)) OF FreqPriorityUTRA-FDD + +FreqPriorityUTRA-FDD ::= SEQUENCE { + carrierFreq ARFCN-ValueUTRA, + cellReselectionPriority CellReselectionPriority +} + +FreqPriorityListUTRA-TDD ::= SEQUENCE (SIZE (1..maxUTRA-TDD-Carrier)) OF FreqPriorityUTRA-TDD + +FreqPriorityUTRA-TDD ::= SEQUENCE { + carrierFreq ARFCN-ValueUTRA, + cellReselectionPriority CellReselectionPriority +} + +BandClassPriorityListHRPD ::= SEQUENCE (SIZE (1..maxCDMA-BandClass)) OF BandClassPriorityHRPD + +BandClassPriorityHRPD ::= SEQUENCE { + bandClass BandclassCDMA2000, + cellReselectionPriority CellReselectionPriority +} + +BandClassPriorityList1XRTT ::= SEQUENCE (SIZE (1..maxCDMA-BandClass)) OF BandClassPriority1XRTT + +BandClassPriority1XRTT ::= SEQUENCE { + bandClass BandclassCDMA2000, + cellReselectionPriority CellReselectionPriority +} + +CellInfoListGERAN-r9 ::= SEQUENCE (SIZE (1..maxCellInfoGERAN-r9)) OF CellInfoGERAN-r9 + +CellInfoGERAN-r9 ::= SEQUENCE { + physCellId-r9 PhysCellIdGERAN, + carrierFreq-r9 CarrierFreqGERAN, + systemInformation-r9 SystemInfoListGERAN +} + +CellInfoListUTRA-FDD-r9 ::= SEQUENCE (SIZE (1..maxCellInfoUTRA-r9)) OF CellInfoUTRA-FDD-r9 + +CellInfoUTRA-FDD-r9 ::= SEQUENCE { + physCellId-r9 PhysCellIdUTRA-FDD, + utra-BCCH-Container-r9 OCTET STRING +} + +CellInfoListUTRA-TDD-r9 ::= SEQUENCE (SIZE (1..maxCellInfoUTRA-r9)) OF CellInfoUTRA-TDD-r9 + +CellInfoUTRA-TDD-r9 ::= SEQUENCE { + physCellId-r9 PhysCellIdUTRA-TDD, + utra-BCCH-Container-r9 OCTET STRING +} + +CellInfoListUTRA-TDD-r10 ::= SEQUENCE (SIZE (1..maxCellInfoUTRA-r9)) OF CellInfoUTRA-TDD-r10 + +CellInfoUTRA-TDD-r10 ::= SEQUENCE { + physCellId-r10 PhysCellIdUTRA-TDD, + carrierFreq-r10 ARFCN-ValueUTRA, + utra-BCCH-Container-r10 OCTET STRING +} + + +RRCConnectionRequest ::= SEQUENCE { + criticalExtensions CHOICE { + rrcConnectionRequest-r8 RRCConnectionRequest-r8-IEs, + criticalExtensionsFuture SEQUENCE {} + } +} + +RRCConnectionRequest-r8-IEs ::= SEQUENCE { + ue-Identity InitialUE-Identity, + establishmentCause EstablishmentCause, + spare BIT STRING (SIZE (1)) +} + +InitialUE-Identity ::= CHOICE { + s-TMSI S-TMSI, + randomValue BIT STRING (SIZE (40)) +} + +EstablishmentCause ::= ENUMERATED { + emergency, highPriorityAccess, mt-Access, mo-Signalling, + mo-Data, delayTolerantAccess-v1020, spare2, spare1} + + +RRCConnectionSetup ::= SEQUENCE { + rrc-TransactionIdentifier RRC-TransactionIdentifier, + criticalExtensions CHOICE { + c1 CHOICE { + rrcConnectionSetup-r8 RRCConnectionSetup-r8-IEs, + spare7 NULL, + spare6 NULL, spare5 NULL, spare4 NULL, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +RRCConnectionSetup-r8-IEs ::= SEQUENCE { + radioResourceConfigDedicated RadioResourceConfigDedicated, + nonCriticalExtension RRCConnectionSetup-v8a0-IEs OPTIONAL +} + +RRCConnectionSetup-v8a0-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, -- Need OP + nonCriticalExtension SEQUENCE {} OPTIONAL -- Need OP +} + + +RRCConnectionSetupComplete ::= SEQUENCE { + rrc-TransactionIdentifier RRC-TransactionIdentifier, + criticalExtensions CHOICE { + c1 CHOICE{ + rrcConnectionSetupComplete-r8 RRCConnectionSetupComplete-r8-IEs, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +RRCConnectionSetupComplete-r8-IEs ::= SEQUENCE { + selectedPLMN-Identity INTEGER (1..6), + registeredMME RegisteredMME OPTIONAL, + dedicatedInfoNAS DedicatedInfoNAS, + nonCriticalExtension RRCConnectionSetupComplete-v8a0-IEs OPTIONAL +} + +RRCConnectionSetupComplete-v8a0-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, + nonCriticalExtension RRCConnectionSetupComplete-v1020-IEs OPTIONAL +} + +RRCConnectionSetupComplete-v1020-IEs ::= SEQUENCE { + gummei-Type-r10 ENUMERATED {native, mapped} OPTIONAL, + rlf-InfoAvailable-r10 ENUMERATED {true} OPTIONAL, + logMeasAvailable-r10 ENUMERATED {true} OPTIONAL, + rn-SubframeConfigReq-r10 ENUMERATED {required, notRequired} OPTIONAL, + nonCriticalExtension SEQUENCE {} OPTIONAL +} + +RegisteredMME ::= SEQUENCE { + plmn-Identity PLMN-Identity OPTIONAL, + mmegi BIT STRING (SIZE (16)), + mmec MMEC +} + + +SecurityModeCommand ::= SEQUENCE { + rrc-TransactionIdentifier RRC-TransactionIdentifier, + criticalExtensions CHOICE { + c1 CHOICE{ + securityModeCommand-r8 SecurityModeCommand-r8-IEs, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +SecurityModeCommand-r8-IEs ::= SEQUENCE { + securityConfigSMC SecurityConfigSMC, + nonCriticalExtension SecurityModeCommand-v8a0-IEs OPTIONAL +} + +SecurityModeCommand-v8a0-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, -- Need OP + nonCriticalExtension SEQUENCE {} OPTIONAL -- Need OP +} + +SecurityConfigSMC ::= SEQUENCE { + securityAlgorithmConfig SecurityAlgorithmConfig, + ... +} + + +SecurityModeComplete ::= SEQUENCE { + rrc-TransactionIdentifier RRC-TransactionIdentifier, + criticalExtensions CHOICE { + securityModeComplete-r8 SecurityModeComplete-r8-IEs, + criticalExtensionsFuture SEQUENCE {} + } +} + +SecurityModeComplete-r8-IEs ::= SEQUENCE { + nonCriticalExtension SecurityModeComplete-v8a0-IEs OPTIONAL +} + +SecurityModeComplete-v8a0-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, + nonCriticalExtension SEQUENCE {} OPTIONAL +} + + +SecurityModeFailure ::= SEQUENCE { + rrc-TransactionIdentifier RRC-TransactionIdentifier, + criticalExtensions CHOICE { + securityModeFailure-r8 SecurityModeFailure-r8-IEs, + criticalExtensionsFuture SEQUENCE {} + } +} + +SecurityModeFailure-r8-IEs ::= SEQUENCE { + nonCriticalExtension SecurityModeFailure-v8a0-IEs OPTIONAL +} + +SecurityModeFailure-v8a0-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, + nonCriticalExtension SEQUENCE {} OPTIONAL +} + + +SystemInformation ::= SEQUENCE { + criticalExtensions CHOICE { + systemInformation-r8 SystemInformation-r8-IEs, + criticalExtensionsFuture SEQUENCE {} + } +} +SystemInformation-r8-IEs ::= SEQUENCE { + sib-TypeAndInfo SEQUENCE (SIZE (1..maxSIB)) OF CHOICE { + sib2 SystemInformationBlockType2, + sib3 SystemInformationBlockType3, + sib4 SystemInformationBlockType4, + sib5 SystemInformationBlockType5, + sib6 SystemInformationBlockType6, + sib7 SystemInformationBlockType7, + sib8 SystemInformationBlockType8, + sib9 SystemInformationBlockType9, + sib10 SystemInformationBlockType10, + sib11 SystemInformationBlockType11, + ..., + sib12-v920 SystemInformationBlockType12-r9, + sib13-v920 SystemInformationBlockType13-r9 + }, + nonCriticalExtension SystemInformation-v8a0-IEs OPTIONAL +} + +SystemInformation-v8a0-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, -- Need OP + nonCriticalExtension SEQUENCE {} OPTIONAL -- Need OP +} + + +SystemInformationBlockType1 ::= SEQUENCE { + cellAccessRelatedInfo SEQUENCE { + plmn-IdentityList PLMN-IdentityList, + trackingAreaCode TrackingAreaCode, + cellIdentity CellIdentity, + cellBarred ENUMERATED {barred, notBarred}, + intraFreqReselection ENUMERATED {allowed, notAllowed}, + csg-Indication BOOLEAN, + csg-Identity CSG-Identity OPTIONAL -- Need OR + }, + cellSelectionInfo SEQUENCE { + q-RxLevMin Q-RxLevMin, + q-RxLevMinOffset INTEGER (1..8) OPTIONAL -- Need OP + }, + p-Max P-Max OPTIONAL, -- Need OP + freqBandIndicator FreqBandIndicator, + schedulingInfoList SchedulingInfoList, + tdd-Config TDD-Config OPTIONAL, -- Cond TDD + si-WindowLength ENUMERATED { + ms1, ms2, ms5, ms10, ms15, ms20, + ms40}, + systemInfoValueTag INTEGER (0..31), + nonCriticalExtension SystemInformationBlockType1-v890-IEs OPTIONAL +} + +SystemInformationBlockType1-v890-IEs::= SEQUENCE { + lateNonCriticalExtension OCTET STRING (CONTAINING SystemInformationBlockType1-v8h0-IEs) OPTIONAL, -- Need OP + nonCriticalExtension SystemInformationBlockType1-v920-IEs OPTIONAL +} + +SystemInformationBlockType1-v8h0-IEs ::= SEQUENCE { + multiBandInfoList MultiBandInfoList OPTIONAL, -- Need OR + nonCriticalExtension SystemInformationBlockType1-v9e0-IEs OPTIONAL -- Need OP +} + +SystemInformationBlockType1-v9e0-IEs ::= SEQUENCE { + freqBandIndicator-v9e0 FreqBandIndicator-v9e0 OPTIONAL, -- Cond FBI-max + multiBandInfoList-v9e0 MultiBandInfoList-v9e0 OPTIONAL, -- Cond mFBI-max + nonCriticalExtension SEQUENCE {} OPTIONAL -- Need OP +} + +SystemInformationBlockType1-v920-IEs ::= SEQUENCE { + ims-EmergencySupport-r9 ENUMERATED {true} OPTIONAL, -- Need OR + cellSelectionInfo-v920 CellSelectionInfo-v920 OPTIONAL, -- Cond RSRQ + nonCriticalExtension SEQUENCE {} OPTIONAL -- Need OP +} + +PLMN-IdentityList ::= SEQUENCE (SIZE (1..6)) OF PLMN-IdentityInfo + +PLMN-IdentityInfo ::= SEQUENCE { + plmn-Identity PLMN-Identity, + cellReservedForOperatorUse ENUMERATED {reserved, notReserved} +} + +SchedulingInfoList ::= SEQUENCE (SIZE (1..maxSI-Message)) OF SchedulingInfo + +SchedulingInfo ::= SEQUENCE { + si-Periodicity ENUMERATED { + rf8, rf16, rf32, rf64, rf128, rf256, rf512}, + sib-MappingInfo SIB-MappingInfo +} + +SIB-MappingInfo ::= SEQUENCE (SIZE (0..maxSIB-1)) OF SIB-Type + +SIB-Type ::= ENUMERATED { + sibType3, sibType4, sibType5, sibType6, + sibType7, sibType8, sibType9, sibType10, + sibType11, sibType12-v920, sibType13-v920, spare5, + spare4, spare3, spare2, spare1, ...} + +CellSelectionInfo-v920 ::= SEQUENCE { + q-QualMin-r9 Q-QualMin-r9, + q-QualMinOffset-r9 INTEGER (1..8) OPTIONAL -- Need OP +} + + +UECapabilityEnquiry ::= SEQUENCE { + rrc-TransactionIdentifier RRC-TransactionIdentifier, + criticalExtensions CHOICE { + c1 CHOICE { + ueCapabilityEnquiry-r8 UECapabilityEnquiry-r8-IEs, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +UECapabilityEnquiry-r8-IEs ::= SEQUENCE { + ue-CapabilityRequest UE-CapabilityRequest, + nonCriticalExtension UECapabilityEnquiry-v8a0-IEs OPTIONAL +} + +UECapabilityEnquiry-v8a0-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, -- Need OP + nonCriticalExtension SEQUENCE {} OPTIONAL -- Need OP +} + +UE-CapabilityRequest ::= SEQUENCE (SIZE (1..maxRAT-Capabilities)) OF RAT-Type + + +UECapabilityInformation ::= SEQUENCE { + rrc-TransactionIdentifier RRC-TransactionIdentifier, + criticalExtensions CHOICE { + c1 CHOICE{ + ueCapabilityInformation-r8 UECapabilityInformation-r8-IEs, + spare7 NULL, + spare6 NULL, spare5 NULL, spare4 NULL, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +UECapabilityInformation-r8-IEs ::= SEQUENCE { + ue-CapabilityRAT-ContainerList UE-CapabilityRAT-ContainerList, + nonCriticalExtension UECapabilityInformation-v8a0-IEs OPTIONAL +} + +UECapabilityInformation-v8a0-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, + nonCriticalExtension SEQUENCE {} OPTIONAL +} + + +UEInformationRequest-r9 ::= SEQUENCE { + rrc-TransactionIdentifier RRC-TransactionIdentifier, + criticalExtensions CHOICE { + c1 CHOICE { + ueInformationRequest-r9 UEInformationRequest-r9-IEs, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +UEInformationRequest-r9-IEs ::= SEQUENCE { + rach-ReportReq-r9 BOOLEAN, + rlf-ReportReq-r9 BOOLEAN, + nonCriticalExtension UEInformationRequest-v930-IEs OPTIONAL +} + +UEInformationRequest-v930-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, -- Need OP + nonCriticalExtension UEInformationRequest-v1020-IEs OPTIONAL +} + +UEInformationRequest-v1020-IEs ::= SEQUENCE { + logMeasReportReq-r10 ENUMERATED {true} OPTIONAL, -- Need ON + nonCriticalExtension SEQUENCE {} OPTIONAL -- Need OP +} + + +UEInformationResponse-r9 ::= SEQUENCE { + rrc-TransactionIdentifier RRC-TransactionIdentifier, + criticalExtensions CHOICE { + c1 CHOICE { + ueInformationResponse-r9 UEInformationResponse-r9-IEs, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +UEInformationResponse-r9-IEs ::= SEQUENCE { + rach-Report-r9 SEQUENCE { + numberOfPreamblesSent-r9 INTEGER (1..200), + contentionDetected-r9 BOOLEAN + } OPTIONAL, + rlf-Report-r9 RLF-Report-r9 OPTIONAL, + nonCriticalExtension UEInformationResponse-v930-IEs OPTIONAL +} + +UEInformationResponse-v930-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING (CONTAINING UEInformationResponse-v9e0-IEs) OPTIONAL, + nonCriticalExtension UEInformationResponse-v1020-IEs OPTIONAL +} + +UEInformationResponse-v9e0-IEs ::= SEQUENCE { + rlf-Report-v9e0 RLF-Report-v9e0 OPTIONAL, + nonCriticalExtension SEQUENCE {} OPTIONAL +} + +UEInformationResponse-v1020-IEs ::= SEQUENCE { + logMeasReport-r10 LogMeasReport-r10 OPTIONAL, + nonCriticalExtension SEQUENCE {} OPTIONAL +} + +RLF-Report-r9 ::= SEQUENCE { + measResultLastServCell-r9 SEQUENCE { + rsrpResult-r9 RSRP-Range, + rsrqResult-r9 RSRQ-Range OPTIONAL + }, + measResultNeighCells-r9 SEQUENCE { + measResultListEUTRA-r9 MeasResultList2EUTRA-r9 OPTIONAL, + measResultListUTRA-r9 MeasResultList2UTRA-r9 OPTIONAL, + measResultListGERAN-r9 MeasResultListGERAN OPTIONAL, + measResultsCDMA2000-r9 MeasResultList2CDMA2000-r9 OPTIONAL + } OPTIONAL, + ..., + [[ locationInfo-r10 LocationInfo-r10 OPTIONAL, + failedPCellId-r10 CHOICE { + cellGlobalId-r10 CellGlobalIdEUTRA, + pci-arfcn-r10 SEQUENCE { + physCellId-r10 PhysCellId, + carrierFreq-r10 ARFCN-ValueEUTRA + } + } OPTIONAL, + reestablishmentCellId-r10 CellGlobalIdEUTRA OPTIONAL, + timeConnFailure-r10 INTEGER (0..1023) OPTIONAL, + connectionFailureType-r10 ENUMERATED {rlf, hof} OPTIONAL, + previousPCellId-r10 CellGlobalIdEUTRA OPTIONAL + ]], + [[ failedPCellId-v1090 SEQUENCE { + carrierFreq-v1090 ARFCN-ValueEUTRA-v9e0 + } OPTIONAL + ]] +} + +RLF-Report-v9e0 ::= SEQUENCE { + measResultListEUTRA-v9e0 MeasResultList2EUTRA-v9e0 +} + +MeasResultList2EUTRA-r9 ::= SEQUENCE (SIZE (1..maxFreq)) OF MeasResult2EUTRA-r9 + +MeasResultList2EUTRA-v9e0 ::= SEQUENCE (SIZE (1..maxFreq)) OF MeasResult2EUTRA-v9e0 + +MeasResult2EUTRA-r9 ::= SEQUENCE { + carrierFreq-r9 ARFCN-ValueEUTRA, + measResultList-r9 MeasResultListEUTRA +} + +MeasResult2EUTRA-v9e0 ::= SEQUENCE { + carrierFreq-v9e0 ARFCN-ValueEUTRA-v9e0 OPTIONAL +} + +MeasResultList2UTRA-r9 ::= SEQUENCE (SIZE (1..maxFreq)) OF MeasResult2UTRA-r9 + +MeasResult2UTRA-r9 ::= SEQUENCE { + carrierFreq-r9 ARFCN-ValueUTRA, + measResultList-r9 MeasResultListUTRA +} + +MeasResultList2CDMA2000-r9 ::= SEQUENCE (SIZE (1..maxFreq)) OF MeasResult2CDMA2000-r9 + +MeasResult2CDMA2000-r9 ::= SEQUENCE { + carrierFreq-r9 CarrierFreqCDMA2000, + measResultList-r9 MeasResultsCDMA2000 +} + +LogMeasReport-r10 ::= SEQUENCE { + absoluteTimeStamp-r10 AbsoluteTimeInfo-r10, + traceReference-r10 TraceReference-r10, + traceRecordingSessionRef-r10 OCTET STRING (SIZE (2)), + tce-Id-r10 OCTET STRING (SIZE (1)), + logMeasInfoList-r10 LogMeasInfoList-r10, + logMeasAvailable-r10 ENUMERATED {true} OPTIONAL, + ... +} + +LogMeasInfoList-r10 ::= SEQUENCE (SIZE (1..maxLogMeasReport-r10)) OF LogMeasInfo-r10 + +LogMeasInfo-r10 ::= SEQUENCE { + locationInfo-r10 LocationInfo-r10 OPTIONAL, + relativeTimeStamp-r10 INTEGER (0..7200), + servCellIdentity-r10 CellGlobalIdEUTRA, + measResultServCell-r10 SEQUENCE { + rsrpResult-r10 RSRP-Range, + rsrqResult-r10 RSRQ-Range + }, + measResultNeighCells-r10 SEQUENCE { + measResultListEUTRA-r10 MeasResultList2EUTRA-r9 OPTIONAL, + measResultListUTRA-r10 MeasResultList2UTRA-r9 OPTIONAL, + measResultListGERAN-r10 MeasResultList2GERAN-r10 OPTIONAL, + measResultListCDMA2000-r10 MeasResultList2CDMA2000-r9 OPTIONAL + } OPTIONAL, + ... +} + +MeasResultList2GERAN-r10 ::= SEQUENCE (SIZE (1..maxCellListGERAN)) OF MeasResultListGERAN + + +ULHandoverPreparationTransfer ::= SEQUENCE { + criticalExtensions CHOICE { + c1 CHOICE { + ulHandoverPreparationTransfer-r8 ULHandoverPreparationTransfer-r8-IEs, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +ULHandoverPreparationTransfer-r8-IEs ::= SEQUENCE { + cdma2000-Type CDMA2000-Type, + meid BIT STRING (SIZE (56)) OPTIONAL, + dedicatedInfo DedicatedInfoCDMA2000, + nonCriticalExtension ULHandoverPreparationTransfer-v8a0-IEs OPTIONAL +} + +ULHandoverPreparationTransfer-v8a0-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, + nonCriticalExtension SEQUENCE {} OPTIONAL +} + + +ULInformationTransfer ::= SEQUENCE { + criticalExtensions CHOICE { + c1 CHOICE { + ulInformationTransfer-r8 ULInformationTransfer-r8-IEs, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +ULInformationTransfer-r8-IEs ::= SEQUENCE { + dedicatedInfoType CHOICE { + dedicatedInfoNAS DedicatedInfoNAS, + dedicatedInfoCDMA2000-1XRTT DedicatedInfoCDMA2000, + dedicatedInfoCDMA2000-HRPD DedicatedInfoCDMA2000 + }, + nonCriticalExtension ULInformationTransfer-v8a0-IEs OPTIONAL +} + +ULInformationTransfer-v8a0-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, + nonCriticalExtension SEQUENCE {} OPTIONAL +} + + +SystemInformationBlockType2 ::= SEQUENCE { + ac-BarringInfo SEQUENCE { + ac-BarringForEmergency BOOLEAN, + ac-BarringForMO-Signalling AC-BarringConfig OPTIONAL, -- Need OP + ac-BarringForMO-Data AC-BarringConfig OPTIONAL -- Need OP + } OPTIONAL, -- Need OP + radioResourceConfigCommon RadioResourceConfigCommonSIB, + ue-TimersAndConstants UE-TimersAndConstants, + freqInfo SEQUENCE { + ul-CarrierFreq ARFCN-ValueEUTRA OPTIONAL, -- Need OP + ul-Bandwidth ENUMERATED {n6, n15, n25, n50, n75, n100} + OPTIONAL, -- Need OP + additionalSpectrumEmission AdditionalSpectrumEmission + }, + mbsfn-SubframeConfigList MBSFN-SubframeConfigList OPTIONAL, -- Need OR + timeAlignmentTimerCommon TimeAlignmentTimer, + ..., + lateNonCriticalExtension OCTET STRING (CONTAINING SystemInformationBlockType2-v8h0-IEs) OPTIONAL, -- Need OP + [[ ssac-BarringForMMTEL-Voice-r9 AC-BarringConfig OPTIONAL, -- Need OP + ssac-BarringForMMTEL-Video-r9 AC-BarringConfig OPTIONAL -- Need OP + ]], + [[ ac-BarringForCSFB-r10 AC-BarringConfig OPTIONAL -- Need OP + ]] +} + +SystemInformationBlockType2-v8h0-IEs ::= SEQUENCE { + multiBandInfoList SEQUENCE (SIZE (1..maxMultiBands)) OF AdditionalSpectrumEmission OPTIONAL, -- Need OR + nonCriticalExtension SystemInformationBlockType2-v9e0-IEs OPTIONAL -- Need OP +} + +SystemInformationBlockType2-v9e0-IEs ::= SEQUENCE { + ul-CarrierFreq-v9e0 ARFCN-ValueEUTRA-v9e0 OPTIONAL, -- Cond ul-FreqMax + nonCriticalExtension SEQUENCE {} OPTIONAL -- Need OP +} + +AC-BarringConfig ::= SEQUENCE { + ac-BarringFactor ENUMERATED { + p00, p05, p10, p15, p20, p25, p30, p40, + p50, p60, p70, p75, p80, p85, p90, p95}, + ac-BarringTime ENUMERATED {s4, s8, s16, s32, s64, s128, s256, s512}, + ac-BarringForSpecialAC BIT STRING (SIZE(5)) +} + +MBSFN-SubframeConfigList ::= SEQUENCE (SIZE (1..maxMBSFN-Allocations)) OF MBSFN-SubframeConfig + + +SystemInformationBlockType3 ::= SEQUENCE { + cellReselectionInfoCommon SEQUENCE { + q-Hyst ENUMERATED { + dB0, dB1, dB2, dB3, dB4, dB5, dB6, dB8, dB10, + dB12, dB14, dB16, dB18, dB20, dB22, dB24}, + speedStateReselectionPars SEQUENCE { + mobilityStateParameters MobilityStateParameters, + q-HystSF SEQUENCE { + sf-Medium ENUMERATED { + dB-6, dB-4, dB-2, dB0}, + sf-High ENUMERATED { + dB-6, dB-4, dB-2, dB0} + } + } OPTIONAL -- Need OP + }, + cellReselectionServingFreqInfo SEQUENCE { + s-NonIntraSearch ReselectionThreshold OPTIONAL, -- Need OP + threshServingLow ReselectionThreshold, + cellReselectionPriority CellReselectionPriority + }, + intraFreqCellReselectionInfo SEQUENCE { + q-RxLevMin Q-RxLevMin, + p-Max P-Max OPTIONAL, -- Need OP + s-IntraSearch ReselectionThreshold OPTIONAL, -- Need OP + allowedMeasBandwidth AllowedMeasBandwidth OPTIONAL, -- Need OP + presenceAntennaPort1 PresenceAntennaPort1, + neighCellConfig NeighCellConfig, + t-ReselectionEUTRA T-Reselection, + t-ReselectionEUTRA-SF SpeedStateScaleFactors OPTIONAL -- Need OP + }, + ..., + lateNonCriticalExtension OCTET STRING OPTIONAL, -- Need OP + [[ s-IntraSearch-v920 SEQUENCE { + s-IntraSearchP-r9 ReselectionThreshold, + s-IntraSearchQ-r9 ReselectionThresholdQ-r9 + } OPTIONAL, -- Need OP + s-NonIntraSearch-v920 SEQUENCE { + s-NonIntraSearchP-r9 ReselectionThreshold, + s-NonIntraSearchQ-r9 ReselectionThresholdQ-r9 + } OPTIONAL, -- Need OP + q-QualMin-r9 Q-QualMin-r9 OPTIONAL, -- Need OP + threshServingLowQ-r9 ReselectionThresholdQ-r9 OPTIONAL -- Need OP + ]] +} + + +SystemInformationBlockType4 ::= SEQUENCE { + intraFreqNeighCellList IntraFreqNeighCellList OPTIONAL, -- Need OR + intraFreqBlackCellList IntraFreqBlackCellList OPTIONAL, -- Need OR + csg-PhysCellIdRange PhysCellIdRange OPTIONAL, -- Cond CSG + ..., + lateNonCriticalExtension OCTET STRING OPTIONAL -- Need OP +} + +IntraFreqNeighCellList ::= SEQUENCE (SIZE (1..maxCellIntra)) OF IntraFreqNeighCellInfo + +IntraFreqNeighCellInfo ::= SEQUENCE { + physCellId PhysCellId, + q-OffsetCell Q-OffsetRange, + ... +} + +IntraFreqBlackCellList ::= SEQUENCE (SIZE (1..maxCellBlack)) OF PhysCellIdRange + + +SystemInformationBlockType5 ::= SEQUENCE { + interFreqCarrierFreqList InterFreqCarrierFreqList, + ..., + lateNonCriticalExtension OCTET STRING (CONTAINING SystemInformationBlockType5-v8h0-IEs) OPTIONAL -- Need OP +} + +SystemInformationBlockType5-v8h0-IEs ::= SEQUENCE { + interFreqCarrierFreqList-v8h0 SEQUENCE (SIZE (1..maxFreq)) OF InterFreqCarrierFreqInfo-v8h0 OPTIONAL, -- Need OP + nonCriticalExtension SystemInformationBlockType5-v9e0-IEs OPTIONAL -- Need OP +} + +SystemInformationBlockType5-v9e0-IEs ::= SEQUENCE { + interFreqCarrierFreqList-v9e0 SEQUENCE (SIZE (1..maxFreq)) OF InterFreqCarrierFreqInfo-v9e0 OPTIONAL, -- Need OR + nonCriticalExtension SEQUENCE {} OPTIONAL -- Need OP +} + +InterFreqCarrierFreqList ::= SEQUENCE (SIZE (1..maxFreq)) OF InterFreqCarrierFreqInfo + +InterFreqCarrierFreqInfo ::= SEQUENCE { + dl-CarrierFreq ARFCN-ValueEUTRA, + q-RxLevMin Q-RxLevMin, + p-Max P-Max OPTIONAL, -- Need OP + t-ReselectionEUTRA T-Reselection, + t-ReselectionEUTRA-SF SpeedStateScaleFactors OPTIONAL, -- Need OP + threshX-High ReselectionThreshold, + threshX-Low ReselectionThreshold, + allowedMeasBandwidth AllowedMeasBandwidth, + presenceAntennaPort1 PresenceAntennaPort1, + cellReselectionPriority CellReselectionPriority OPTIONAL, -- Need OP + neighCellConfig NeighCellConfig, + q-OffsetFreq Q-OffsetRange DEFAULT dB0, + interFreqNeighCellList InterFreqNeighCellList OPTIONAL, -- Need OR + interFreqBlackCellList InterFreqBlackCellList OPTIONAL, -- Need OR + ..., + [[ q-QualMin-r9 Q-QualMin-r9 OPTIONAL, -- Need OP + threshX-Q-r9 SEQUENCE { + threshX-HighQ-r9 ReselectionThresholdQ-r9, + threshX-LowQ-r9 ReselectionThresholdQ-r9 + } OPTIONAL -- Cond RSRQ + ]] +} + +InterFreqCarrierFreqInfo-v8h0 ::= SEQUENCE { + multiBandInfoList MultiBandInfoList OPTIONAL -- Need OR +} + +InterFreqCarrierFreqInfo-v9e0 ::= SEQUENCE { + dl-CarrierFreq-v9e0 ARFCN-ValueEUTRA-v9e0 OPTIONAL, -- Cond dl-FreqMax + multiBandInfoList-v9e0 MultiBandInfoList-v9e0 OPTIONAL -- Need OR +} + +InterFreqNeighCellList ::= SEQUENCE (SIZE (1..maxCellInter)) OF InterFreqNeighCellInfo + +InterFreqNeighCellInfo ::= SEQUENCE { + physCellId PhysCellId, + q-OffsetCell Q-OffsetRange +} + +InterFreqBlackCellList ::= SEQUENCE (SIZE (1..maxCellBlack)) OF PhysCellIdRange + + +SystemInformationBlockType6 ::= SEQUENCE { + carrierFreqListUTRA-FDD CarrierFreqListUTRA-FDD OPTIONAL, -- Need OR + carrierFreqListUTRA-TDD CarrierFreqListUTRA-TDD OPTIONAL, -- Need OR + t-ReselectionUTRA T-Reselection, + t-ReselectionUTRA-SF SpeedStateScaleFactors OPTIONAL, -- Need OP + ..., + lateNonCriticalExtension OCTET STRING (CONTAINING SystemInformationBlockType6-v8h0-IEs) OPTIONAL -- Need OP +} + +SystemInformationBlockType6-v8h0-IEs ::= SEQUENCE { + carrierFreqListUTRA-FDD-v8h0 SEQUENCE (SIZE (1..maxUTRA-FDD-Carrier)) OF CarrierFreqInfoUTRA-FDD-v8h0 OPTIONAL, -- Need OR + nonCriticalExtension SEQUENCE {} OPTIONAL -- Need OP +} + +CarrierFreqListUTRA-FDD ::= SEQUENCE (SIZE (1..maxUTRA-FDD-Carrier)) OF CarrierFreqUTRA-FDD + +CarrierFreqUTRA-FDD ::= SEQUENCE { + carrierFreq ARFCN-ValueUTRA, + cellReselectionPriority CellReselectionPriority OPTIONAL, -- Need OP + threshX-High ReselectionThreshold, + threshX-Low ReselectionThreshold, + q-RxLevMin INTEGER (-60..-13), + p-MaxUTRA INTEGER (-50..33), + q-QualMin INTEGER (-24..0), + ..., + [[ threshX-Q-r9 SEQUENCE { + threshX-HighQ-r9 ReselectionThresholdQ-r9, + threshX-LowQ-r9 ReselectionThresholdQ-r9 + } OPTIONAL -- Cond RSRQ + ]] +} + +CarrierFreqInfoUTRA-FDD-v8h0 ::= SEQUENCE { + multiBandInfoList SEQUENCE (SIZE (1..maxMultiBands)) OF FreqBandIndicator-UTRA-FDD OPTIONAL -- Need OR +} + +CarrierFreqListUTRA-TDD ::= SEQUENCE (SIZE (1..maxUTRA-TDD-Carrier)) OF CarrierFreqUTRA-TDD + +CarrierFreqUTRA-TDD ::= SEQUENCE { + carrierFreq ARFCN-ValueUTRA, + cellReselectionPriority CellReselectionPriority OPTIONAL, -- Need OP + threshX-High ReselectionThreshold, + threshX-Low ReselectionThreshold, + q-RxLevMin INTEGER (-60..-13), + p-MaxUTRA INTEGER (-50..33), + ... +} + +FreqBandIndicator-UTRA-FDD ::= INTEGER (1..86) + + +SystemInformationBlockType7 ::= SEQUENCE { + t-ReselectionGERAN T-Reselection, + t-ReselectionGERAN-SF SpeedStateScaleFactors OPTIONAL, -- Need OR + carrierFreqsInfoList CarrierFreqsInfoListGERAN OPTIONAL, -- Need OR + ..., + lateNonCriticalExtension OCTET STRING OPTIONAL -- Need OP +} + +CarrierFreqsInfoListGERAN ::= SEQUENCE (SIZE (1..maxGNFG)) OF CarrierFreqsInfoGERAN + +CarrierFreqsInfoGERAN ::= SEQUENCE { + carrierFreqs CarrierFreqsGERAN, + commonInfo SEQUENCE { + cellReselectionPriority CellReselectionPriority OPTIONAL, -- Need OP + ncc-Permitted BIT STRING (SIZE (8)), + q-RxLevMin INTEGER (0..45), + p-MaxGERAN INTEGER (0..39) OPTIONAL, -- Need OP + threshX-High ReselectionThreshold, + threshX-Low ReselectionThreshold + }, + ... +} + + +SystemInformationBlockType8 ::= SEQUENCE { + systemTimeInfo SystemTimeInfoCDMA2000 OPTIONAL, -- Need OR + searchWindowSize INTEGER (0..15) OPTIONAL, -- Need OR + parametersHRPD SEQUENCE { + preRegistrationInfoHRPD PreRegistrationInfoHRPD, + cellReselectionParametersHRPD CellReselectionParametersCDMA2000 OPTIONAL -- Need OR + } OPTIONAL, -- Need OR + parameters1XRTT SEQUENCE { + csfb-RegistrationParam1XRTT CSFB-RegistrationParam1XRTT OPTIONAL, -- Need OP + longCodeState1XRTT BIT STRING (SIZE (42)) OPTIONAL, -- Need OR + cellReselectionParameters1XRTT CellReselectionParametersCDMA2000 OPTIONAL -- Need OR + } OPTIONAL, -- Need OR + ..., + lateNonCriticalExtension OCTET STRING OPTIONAL, -- Need OP + [[ csfb-SupportForDualRxUEs-r9 BOOLEAN OPTIONAL, -- Need OR + cellReselectionParametersHRPD-v920 CellReselectionParametersCDMA2000-v920 OPTIONAL, -- Cond NCL-HRPD + cellReselectionParameters1XRTT-v920 CellReselectionParametersCDMA2000-v920 OPTIONAL, -- Cond NCL-1XRTT + csfb-RegistrationParam1XRTT-v920 CSFB-RegistrationParam1XRTT-v920 OPTIONAL, -- Cond REG-1XRTT + ac-BarringConfig1XRTT-r9 AC-BarringConfig1XRTT-r9 OPTIONAL -- Cond REG-1XRTT + ]], + [[ csfb-DualRxTxSupport-r10 ENUMERATED {true} OPTIONAL -- Cond REG-1XRTT + ]] +} + +CellReselectionParametersCDMA2000 ::= SEQUENCE { + bandClassList BandClassListCDMA2000, + neighCellList NeighCellListCDMA2000, + t-ReselectionCDMA2000 T-Reselection, + t-ReselectionCDMA2000-SF SpeedStateScaleFactors OPTIONAL -- Need OP +} + +CellReselectionParametersCDMA2000-v920 ::= SEQUENCE { + neighCellList-v920 NeighCellListCDMA2000-v920 +} + +NeighCellListCDMA2000 ::= SEQUENCE (SIZE (1..16)) OF NeighCellCDMA2000 + +NeighCellCDMA2000 ::= SEQUENCE { + bandClass BandclassCDMA2000, + neighCellsPerFreqList NeighCellsPerBandclassListCDMA2000 +} + +NeighCellsPerBandclassListCDMA2000 ::= SEQUENCE (SIZE (1..16)) OF NeighCellsPerBandclassCDMA2000 + +NeighCellsPerBandclassCDMA2000 ::= SEQUENCE { + arfcn ARFCN-ValueCDMA2000, + physCellIdList PhysCellIdListCDMA2000 +} + +NeighCellListCDMA2000-v920 ::= SEQUENCE (SIZE (1..16)) OF NeighCellCDMA2000-v920 + +NeighCellCDMA2000-v920 ::= SEQUENCE { + neighCellsPerFreqList-v920 NeighCellsPerBandclassListCDMA2000-v920 +} + +NeighCellsPerBandclassListCDMA2000-v920 ::= SEQUENCE (SIZE (1..16)) OF NeighCellsPerBandclassCDMA2000-v920 + +NeighCellsPerBandclassCDMA2000-v920 ::= SEQUENCE { + physCellIdList-v920 PhysCellIdListCDMA2000-v920 +} + +PhysCellIdListCDMA2000 ::= SEQUENCE (SIZE (1..16)) OF PhysCellIdCDMA2000 + +PhysCellIdListCDMA2000-v920 ::= SEQUENCE (SIZE (0..24)) OF PhysCellIdCDMA2000 + +BandClassListCDMA2000 ::= SEQUENCE (SIZE (1..maxCDMA-BandClass)) OF BandClassInfoCDMA2000 + +BandClassInfoCDMA2000 ::= SEQUENCE { + bandClass BandclassCDMA2000, + cellReselectionPriority CellReselectionPriority OPTIONAL, -- Need OP + threshX-High INTEGER (0..63), + threshX-Low INTEGER (0..63), + ... +} + +AC-BarringConfig1XRTT-r9 ::= SEQUENCE { + ac-Barring0to9-r9 INTEGER (0..63), + ac-Barring10-r9 INTEGER (0..7), + ac-Barring11-r9 INTEGER (0..7), + ac-Barring12-r9 INTEGER (0..7), + ac-Barring13-r9 INTEGER (0..7), + ac-Barring14-r9 INTEGER (0..7), + ac-Barring15-r9 INTEGER (0..7), + ac-BarringMsg-r9 INTEGER (0..7), + ac-BarringReg-r9 INTEGER (0..7), + ac-BarringEmg-r9 INTEGER (0..7) +} + + +SystemInformationBlockType9 ::= SEQUENCE { + hnb-Name OCTET STRING (SIZE(1..48)) OPTIONAL, -- Need OR + ..., + lateNonCriticalExtension OCTET STRING OPTIONAL -- Need OP +} + + +SystemInformationBlockType10 ::= SEQUENCE { + messageIdentifier BIT STRING (SIZE (16)), + serialNumber BIT STRING (SIZE (16)), + warningType OCTET STRING (SIZE (2)), + dummy OCTET STRING (SIZE (50)) OPTIONAL, -- Need OP + ..., + lateNonCriticalExtension OCTET STRING OPTIONAL -- Need OP +} + + +SystemInformationBlockType11 ::= SEQUENCE { + messageIdentifier BIT STRING (SIZE (16)), + serialNumber BIT STRING (SIZE (16)), + warningMessageSegmentType ENUMERATED {notLastSegment, lastSegment}, + warningMessageSegmentNumber INTEGER (0..63), + warningMessageSegment OCTET STRING, + dataCodingScheme OCTET STRING (SIZE (1)) OPTIONAL, -- Cond Segment1 + ..., + lateNonCriticalExtension OCTET STRING OPTIONAL -- Need OP +} + + +SystemInformationBlockType12-r9 ::= SEQUENCE { + messageIdentifier-r9 BIT STRING (SIZE (16)), + serialNumber-r9 BIT STRING (SIZE (16)), + warningMessageSegmentType-r9 ENUMERATED {notLastSegment, lastSegment}, + warningMessageSegmentNumber-r9 INTEGER (0..63), + warningMessageSegment-r9 OCTET STRING, + dataCodingScheme-r9 OCTET STRING (SIZE (1)) OPTIONAL, -- Cond Segment1 + lateNonCriticalExtension OCTET STRING OPTIONAL, -- Need OP + ... +} + + +SystemInformationBlockType13-r9 ::= SEQUENCE { + mbsfn-AreaInfoList-r9 MBSFN-AreaInfoList-r9, + notificationConfig-r9 MBMS-NotificationConfig-r9, + lateNonCriticalExtension OCTET STRING OPTIONAL, -- Need OP + ... +} + + +AntennaInfoCommon ::= SEQUENCE { + antennaPortsCount ENUMERATED {an1, an2, an4, spare1} +} + +AntennaInfoDedicated ::= SEQUENCE { + transmissionMode ENUMERATED { + tm1, tm2, tm3, tm4, tm5, tm6, + tm7, tm8-v920}, + codebookSubsetRestriction CHOICE { + n2TxAntenna-tm3 BIT STRING (SIZE (2)), + n4TxAntenna-tm3 BIT STRING (SIZE (4)), + n2TxAntenna-tm4 BIT STRING (SIZE (6)), + n4TxAntenna-tm4 BIT STRING (SIZE (64)), + n2TxAntenna-tm5 BIT STRING (SIZE (4)), + n4TxAntenna-tm5 BIT STRING (SIZE (16)), + n2TxAntenna-tm6 BIT STRING (SIZE (4)), + n4TxAntenna-tm6 BIT STRING (SIZE (16)) + } OPTIONAL, -- Cond TM + ue-TransmitAntennaSelection CHOICE{ + release NULL, + setup ENUMERATED {closedLoop, openLoop} + } +} + +AntennaInfoDedicated-v920 ::= SEQUENCE { + codebookSubsetRestriction-v920 CHOICE { + n2TxAntenna-tm8-r9 BIT STRING (SIZE (6)), + n4TxAntenna-tm8-r9 BIT STRING (SIZE (32)) + } OPTIONAL -- Cond TM8 +} + +AntennaInfoDedicated-r10 ::= SEQUENCE { + transmissionMode-r10 ENUMERATED { + tm1, tm2, tm3, tm4, tm5, tm6, tm7, tm8-v920, + tm9-v1020, spare7, spare6, spare5, spare4, + spare3, spare2, spare1}, + codebookSubsetRestriction-r10 BIT STRING OPTIONAL, -- Cond TMX + ue-TransmitAntennaSelection CHOICE{ + release NULL, + setup ENUMERATED {closedLoop, openLoop} + } +} + + +AntennaInfoUL-r10 ::= SEQUENCE { + transmissionModeUL-r10 ENUMERATED {tm1, tm2, spare6, spare5, + spare4, spare3, spare2, spare1} OPTIONAL, -- Need OR + fourAntennaPortActivated-r10 ENUMERATED {setup} OPTIONAL -- Need OR +} + + +CQI-ReportConfig ::= SEQUENCE { + cqi-ReportModeAperiodic CQI-ReportModeAperiodic OPTIONAL, -- Need OR + nomPDSCH-RS-EPRE-Offset INTEGER (-1..6), + cqi-ReportPeriodic CQI-ReportPeriodic OPTIONAL -- Need ON +} + +CQI-ReportConfig-v920 ::= SEQUENCE { + cqi-Mask-r9 ENUMERATED {setup} OPTIONAL, -- Cond cqi-Setup + pmi-RI-Report-r9 ENUMERATED {setup} OPTIONAL -- Cond PMIRI +} + +CQI-ReportConfig-r10 ::= SEQUENCE { + cqi-ReportAperiodic-r10 CQI-ReportAperiodic-r10 OPTIONAL, -- Need ON + nomPDSCH-RS-EPRE-Offset INTEGER (-1..6), + cqi-ReportPeriodic-r10 CQI-ReportPeriodic-r10 OPTIONAL, -- Need ON + pmi-RI-Report-r9 ENUMERATED {setup} OPTIONAL, -- Cond PMIRIPCell + csi-SubframePatternConfig-r10 CHOICE { + release NULL, + setup SEQUENCE { + csi-MeasSubframeSet1-r10 MeasSubframePattern-r10, + csi-MeasSubframeSet2-r10 MeasSubframePattern-r10 + } + } OPTIONAL -- Need ON +} + +CQI-ReportConfigSCell-r10 ::= SEQUENCE { + cqi-ReportModeAperiodic-r10 CQI-ReportModeAperiodic OPTIONAL, -- Need OR + nomPDSCH-RS-EPRE-Offset-r10 INTEGER (-1..6), + + cqi-ReportPeriodicSCell-r10 CQI-ReportPeriodic-r10 OPTIONAL, -- Need ON + pmi-RI-Report-r10 ENUMERATED {setup} OPTIONAL -- Cond PMIRISCell +} + +CQI-ReportPeriodic ::= CHOICE { + release NULL, + setup SEQUENCE { + cqi-PUCCH-ResourceIndex INTEGER (0..1185), + cqi-pmi-ConfigIndex INTEGER (0..1023), + cqi-FormatIndicatorPeriodic CHOICE { + widebandCQI NULL, + subbandCQI SEQUENCE { + k INTEGER (1..4) + } + }, + ri-ConfigIndex INTEGER (0..1023) OPTIONAL, -- Need OR + simultaneousAckNackAndCQI BOOLEAN + } +} + +CQI-ReportPeriodic-r10 ::= CHOICE { + release NULL, + setup SEQUENCE { + cqi-PUCCH-ResourceIndex-r10 INTEGER (0..1184), + cqi-PUCCH-ResourceIndexP1-r10 INTEGER (0..1184) OPTIONAL, -- Need OR + cqi-pmi-ConfigIndex INTEGER (0..1023), + cqi-FormatIndicatorPeriodic-r10 CHOICE { + widebandCQI-r10 SEQUENCE { + csi-ReportMode-r10 ENUMERATED {submode1, submode2} OPTIONAL -- Need OR + }, + subbandCQI-r10 SEQUENCE { + k INTEGER (1..4), + periodicityFactor-r10 ENUMERATED {n2, n4} + } + }, + ri-ConfigIndex INTEGER (0..1023) OPTIONAL, -- Need OR + simultaneousAckNackAndCQI BOOLEAN, + cqi-Mask-r9 ENUMERATED {setup} OPTIONAL, -- Need OR + csi-ConfigIndex-r10 CHOICE { + release NULL, + setup SEQUENCE { + cqi-pmi-ConfigIndex2-r10 INTEGER (0..1023), + ri-ConfigIndex2-r10 INTEGER (0..1023) OPTIONAL -- Need OR + } + } OPTIONAL -- Need ON + } +} + +CQI-ReportAperiodic-r10 ::= CHOICE { + release NULL, + setup SEQUENCE { + cqi-ReportModeAperiodic-r10 CQI-ReportModeAperiodic, + aperiodicCSI-Trigger-r10 SEQUENCE { + trigger1-r10 BIT STRING (SIZE (8)), + trigger2-r10 BIT STRING (SIZE (8)) + } OPTIONAL -- Need OR + } +} + +CQI-ReportModeAperiodic ::= ENUMERATED { + rm12, rm20, rm22, rm30, rm31, + spare3, spare2, spare1 +} + + +CrossCarrierSchedulingConfig-r10 ::= SEQUENCE { + schedulingCellInfo-r10 CHOICE { + own-r10 SEQUENCE { -- No cross carrier scheduling + cif-Presence-r10 BOOLEAN + }, + other-r10 SEQUENCE { -- Cross carrier scheduling + schedulingCellId-r10 ServCellIndex-r10, + pdsch-Start-r10 INTEGER (1..4) + } + } +} + + +CSI-RS-Config-r10 ::= SEQUENCE { + csi-RS-r10 CHOICE { + release NULL, + setup SEQUENCE { + antennaPortsCount-r10 ENUMERATED {an1, an2, an4, an8}, + resourceConfig-r10 INTEGER (0..31), + subframeConfig-r10 INTEGER (0..154), + p-C-r10 INTEGER (-8..15) + } + } OPTIONAL, -- Need ON + zeroTxPowerCSI-RS-r10 CHOICE { + release NULL, + setup SEQUENCE { + zeroTxPowerResourceConfigList-r10 BIT STRING (SIZE (16)), + zeroTxPowerSubframeConfig-r10 INTEGER (0..154) + } + } OPTIONAL -- Need ON +} + + +DRB-Identity ::= INTEGER (1..32) + + +LogicalChannelConfig ::= SEQUENCE { + ul-SpecificParameters SEQUENCE { + priority INTEGER (1..16), + prioritisedBitRate ENUMERATED { + kBps0, kBps8, kBps16, kBps32, kBps64, kBps128, + kBps256, infinity, kBps512-v1020, kBps1024-v1020, + kBps2048-v1020, spare5, spare4, spare3, spare2, + spare1}, + bucketSizeDuration ENUMERATED { + ms50, ms100, ms150, ms300, ms500, ms1000, spare2, + spare1}, + logicalChannelGroup INTEGER (0..3) OPTIONAL -- Need OR + } OPTIONAL, -- Cond UL + ..., + [[ logicalChannelSR-Mask-r9 ENUMERATED {setup} OPTIONAL -- Cond SRmask + ]] +} + + +MAC-MainConfig ::= SEQUENCE { + ul-SCH-Config SEQUENCE { + maxHARQ-Tx ENUMERATED { + n1, n2, n3, n4, n5, n6, n7, n8, + n10, n12, n16, n20, n24, n28, + spare2, spare1} OPTIONAL, -- Need ON + periodicBSR-Timer ENUMERATED { + sf5, sf10, sf16, sf20, sf32, sf40, sf64, sf80, + sf128, sf160, sf320, sf640, sf1280, sf2560, + infinity, spare1} OPTIONAL, -- Need ON + retxBSR-Timer ENUMERATED { + sf320, sf640, sf1280, sf2560, sf5120, + sf10240, spare2, spare1}, + ttiBundling BOOLEAN + } OPTIONAL, -- Need ON + drx-Config DRX-Config OPTIONAL, -- Need ON + timeAlignmentTimerDedicated TimeAlignmentTimer, + phr-Config CHOICE { + release NULL, + setup SEQUENCE { + periodicPHR-Timer ENUMERATED {sf10, sf20, sf50, sf100, sf200, + sf500, sf1000, infinity}, + prohibitPHR-Timer ENUMERATED {sf0, sf10, sf20, sf50, sf100, + sf200, sf500, sf1000}, + dl-PathlossChange ENUMERATED {dB1, dB3, dB6, infinity} + } + } OPTIONAL, -- Need ON + ..., + [[ sr-ProhibitTimer-r9 INTEGER (0..7) OPTIONAL -- Need ON + ]], + [[ mac-MainConfig-v1020 SEQUENCE { + sCellDeactivationTimer-r10 ENUMERATED { + rf2, rf4, rf8, rf16, rf32, rf64, rf128, + spare} OPTIONAL, -- Need OP + extendedBSR-Sizes-r10 ENUMERATED {setup} OPTIONAL, -- Need OR + extendedPHR-r10 ENUMERATED {setup} OPTIONAL -- Need OR + } OPTIONAL -- Need ON + ]] +} + +DRX-Config ::= CHOICE { + release NULL, + setup SEQUENCE { + onDurationTimer ENUMERATED { + psf1, psf2, psf3, psf4, psf5, psf6, + psf8, psf10, psf20, psf30, psf40, + psf50, psf60, psf80, psf100, + psf200}, + drx-InactivityTimer ENUMERATED { + psf1, psf2, psf3, psf4, psf5, psf6, + psf8, psf10, psf20, psf30, psf40, + psf50, psf60, psf80, psf100, + psf200, psf300, psf500, psf750, + psf1280, psf1920, psf2560, psf0-v1020, + spare9, spare8, spare7, spare6, + spare5, spare4, spare3, spare2, + spare1}, + drx-RetransmissionTimer ENUMERATED { + psf1, psf2, psf4, psf6, psf8, psf16, + psf24, psf33}, + longDRX-CycleStartOffset CHOICE { + sf10 INTEGER(0..9), + sf20 INTEGER(0..19), + sf32 INTEGER(0..31), + sf40 INTEGER(0..39), + sf64 INTEGER(0..63), + sf80 INTEGER(0..79), + sf128 INTEGER(0..127), + sf160 INTEGER(0..159), + sf256 INTEGER(0..255), + sf320 INTEGER(0..319), + sf512 INTEGER(0..511), + sf640 INTEGER(0..639), + sf1024 INTEGER(0..1023), + sf1280 INTEGER(0..1279), + sf2048 INTEGER(0..2047), + sf2560 INTEGER(0..2559) + }, + shortDRX SEQUENCE { + shortDRX-Cycle ENUMERATED { + sf2, sf5, sf8, sf10, sf16, sf20, + sf32, sf40, sf64, sf80, sf128, sf160, + sf256, sf320, sf512, sf640}, + drxShortCycleTimer INTEGER (1..16) + } OPTIONAL -- Need OR + } +} + + +PDCP-Config ::= SEQUENCE { + discardTimer ENUMERATED { + ms50, ms100, ms150, ms300, ms500, + ms750, ms1500, infinity + } OPTIONAL, -- Cond Setup + rlc-AM SEQUENCE { + statusReportRequired BOOLEAN + } OPTIONAL, -- Cond Rlc-AM + rlc-UM SEQUENCE { + pdcp-SN-Size ENUMERATED {len7bits, len12bits} + } OPTIONAL, -- Cond Rlc-UM + headerCompression CHOICE { + notUsed NULL, + rohc SEQUENCE { + maxCID INTEGER (1..16383) DEFAULT 15, + profiles SEQUENCE { + profile0x0001 BOOLEAN, + profile0x0002 BOOLEAN, + profile0x0003 BOOLEAN, + profile0x0004 BOOLEAN, + profile0x0006 BOOLEAN, + profile0x0101 BOOLEAN, + profile0x0102 BOOLEAN, + profile0x0103 BOOLEAN, + profile0x0104 BOOLEAN + }, + ... + } + }, + ..., + [[ rn-IntegrityProtection-r10 ENUMERATED {enabled} OPTIONAL -- Cond RN + ]] +} + + +PDSCH-ConfigCommon ::= SEQUENCE { + referenceSignalPower INTEGER (-60..50), + p-b INTEGER (0..3) +} + +PDSCH-ConfigDedicated::= SEQUENCE { + p-a ENUMERATED { + dB-6, dB-4dot77, dB-3, dB-1dot77, + dB0, dB1, dB2, dB3} +} + + +PHICH-Config ::= SEQUENCE { + phich-Duration ENUMERATED {normal, extended}, + phich-Resource ENUMERATED {oneSixth, half, one, two} +} + + +PhysicalConfigDedicated ::= SEQUENCE { + pdsch-ConfigDedicated PDSCH-ConfigDedicated OPTIONAL, -- Need ON + pucch-ConfigDedicated PUCCH-ConfigDedicated OPTIONAL, -- Need ON + pusch-ConfigDedicated PUSCH-ConfigDedicated OPTIONAL, -- Need ON + uplinkPowerControlDedicated UplinkPowerControlDedicated OPTIONAL, -- Need ON + tpc-PDCCH-ConfigPUCCH TPC-PDCCH-Config OPTIONAL, -- Need ON + tpc-PDCCH-ConfigPUSCH TPC-PDCCH-Config OPTIONAL, -- Need ON + cqi-ReportConfig CQI-ReportConfig OPTIONAL, -- Cond CQI-r8 + soundingRS-UL-ConfigDedicated SoundingRS-UL-ConfigDedicated OPTIONAL, -- Need ON + antennaInfo CHOICE { + explicitValue AntennaInfoDedicated, + defaultValue NULL + } OPTIONAL, -- Cond AI-r8 + schedulingRequestConfig SchedulingRequestConfig OPTIONAL, -- Need ON + ..., + [[ cqi-ReportConfig-v920 CQI-ReportConfig-v920 OPTIONAL, -- Cond CQI-r8 + antennaInfo-v920 AntennaInfoDedicated-v920 OPTIONAL -- Cond AI-r8 + ]], + [[ antennaInfo-r10 CHOICE { + explicitValue-r10 AntennaInfoDedicated-r10, + defaultValue NULL + } OPTIONAL, -- Cond AI-r10 + antennaInfoUL-r10 AntennaInfoUL-r10 OPTIONAL, -- Need ON + cif-Presence-r10 BOOLEAN OPTIONAL, -- Need ON + cqi-ReportConfig-r10 CQI-ReportConfig-r10 OPTIONAL, -- Cond CQI-r10 + csi-RS-Config-r10 CSI-RS-Config-r10 OPTIONAL, -- Need ON + pucch-ConfigDedicated-v1020 PUCCH-ConfigDedicated-v1020 OPTIONAL, -- Need ON + pusch-ConfigDedicated-v1020 PUSCH-ConfigDedicated-v1020 OPTIONAL, -- Need ON + schedulingRequestConfig-v1020 SchedulingRequestConfig-v1020 OPTIONAL, -- Need ON + soundingRS-UL-ConfigDedicated-v1020 + SoundingRS-UL-ConfigDedicated-v1020 OPTIONAL, -- Need ON + soundingRS-UL-ConfigDedicatedAperiodic-r10 + SoundingRS-UL-ConfigDedicatedAperiodic-r10 OPTIONAL, -- Need ON + uplinkPowerControlDedicated-v1020 UplinkPowerControlDedicated-v1020 OPTIONAL -- Need ON + ]], + [[ additionalSpectrumEmissionCA-r10 CHOICE { + release NULL, + setup SEQUENCE { + additionalSpectrumEmissionPCell-r10 AdditionalSpectrumEmission + } + } OPTIONAL -- Need ON + ]] +} + +PhysicalConfigDedicatedSCell-r10 ::= SEQUENCE { + -- DL configuration as well as configuration applicable for DL and UL + nonUL-Configuration-r10 SEQUENCE { + antennaInfo-r10 AntennaInfoDedicated-r10 OPTIONAL, -- Need ON + crossCarrierSchedulingConfig-r10 CrossCarrierSchedulingConfig-r10 OPTIONAL, -- Need ON + csi-RS-Config-r10 CSI-RS-Config-r10 OPTIONAL, -- Need ON + pdsch-ConfigDedicated-r10 PDSCH-ConfigDedicated OPTIONAL -- Need ON + } OPTIONAL, -- Cond SCellAdd + -- UL configuration + ul-Configuration-r10 SEQUENCE { + antennaInfoUL-r10 AntennaInfoUL-r10 OPTIONAL, -- Need ON + pusch-ConfigDedicatedSCell-r10 PUSCH-ConfigDedicatedSCell-r10 OPTIONAL, -- Need ON + uplinkPowerControlDedicatedSCell-r10 UplinkPowerControlDedicatedSCell-r10 OPTIONAL, -- Need ON + cqi-ReportConfigSCell-r10 CQI-ReportConfigSCell-r10 OPTIONAL, -- Need ON + soundingRS-UL-ConfigDedicated-r10 SoundingRS-UL-ConfigDedicated OPTIONAL, -- Need ON + soundingRS-UL-ConfigDedicated-v1020 + SoundingRS-UL-ConfigDedicated-v1020 OPTIONAL, -- Need ON + soundingRS-UL-ConfigDedicatedAperiodic-r10 + SoundingRS-UL-ConfigDedicatedAperiodic-r10 OPTIONAL -- Need ON + } OPTIONAL, -- Cond CommonUL + ... +} + + +P-Max ::= INTEGER (-30..33) + + +PRACH-ConfigSIB ::= SEQUENCE { + rootSequenceIndex INTEGER (0..837), + prach-ConfigInfo PRACH-ConfigInfo +} + +PRACH-Config ::= SEQUENCE { + rootSequenceIndex INTEGER (0..837), + prach-ConfigInfo PRACH-ConfigInfo OPTIONAL -- Need ON +} + +PRACH-ConfigSCell-r10 ::= SEQUENCE { + prach-ConfigIndex-r10 INTEGER (0..63) +} + +PRACH-ConfigInfo ::= SEQUENCE { + prach-ConfigIndex INTEGER (0..63), + highSpeedFlag BOOLEAN, + zeroCorrelationZoneConfig INTEGER (0..15), + prach-FreqOffset INTEGER (0..94) +} + + +PresenceAntennaPort1 ::= BOOLEAN + + +PUCCH-ConfigCommon ::= SEQUENCE { + deltaPUCCH-Shift ENUMERATED {ds1, ds2, ds3}, + nRB-CQI INTEGER (0..98), + nCS-AN INTEGER (0..7), + n1PUCCH-AN INTEGER (0..2047) +} + +PUCCH-ConfigDedicated ::= SEQUENCE { + ackNackRepetition CHOICE{ + release NULL, + setup SEQUENCE { + repetitionFactor ENUMERATED {n2, n4, n6, spare1}, + n1PUCCH-AN-Rep INTEGER (0..2047) + } + }, + tdd-AckNackFeedbackMode ENUMERATED {bundling, multiplexing} OPTIONAL -- Cond TDD +} + +PUCCH-ConfigDedicated-v1020 ::= SEQUENCE { + pucch-Format-r10 CHOICE { + format3-r10 SEQUENCE { + n3PUCCH-AN-List-r10 SEQUENCE (SIZE (1..4)) OF INTEGER (0..549) OPTIONAL, -- Need ON + twoAntennaPortActivatedPUCCH-Format3-r10 CHOICE { + release NULL, + setup SEQUENCE { + n3PUCCH-AN-ListP1-r10 SEQUENCE (SIZE (1..4)) OF INTEGER (0..549) + } + } OPTIONAL -- Need ON + }, + channelSelection-r10 SEQUENCE { + n1PUCCH-AN-CS-r10 CHOICE { + release NULL, + setup SEQUENCE { + n1PUCCH-AN-CS-List-r10 SEQUENCE (SIZE (1..2)) OF N1PUCCH-AN-CS-r10 + } + } OPTIONAL -- Need ON + } + } OPTIONAL, -- Need OR + twoAntennaPortActivatedPUCCH-Format1a1b-r10 ENUMERATED {true} OPTIONAL, -- Need OR + simultaneousPUCCH-PUSCH-r10 ENUMERATED {true} OPTIONAL, -- Need OR + n1PUCCH-AN-RepP1-r10 INTEGER (0..2047) OPTIONAL -- Need OR +} + +N1PUCCH-AN-CS-r10 ::= SEQUENCE (SIZE (1..4)) OF INTEGER (0..2047) + + +PUSCH-ConfigCommon ::= SEQUENCE { + pusch-ConfigBasic SEQUENCE { + n-SB INTEGER (1..4), + hoppingMode ENUMERATED {interSubFrame, intraAndInterSubFrame}, + pusch-HoppingOffset INTEGER (0..98), + enable64QAM BOOLEAN + }, + ul-ReferenceSignalsPUSCH UL-ReferenceSignalsPUSCH +} + +PUSCH-ConfigDedicated ::= SEQUENCE { + betaOffset-ACK-Index INTEGER (0..15), + betaOffset-RI-Index INTEGER (0..15), + betaOffset-CQI-Index INTEGER (0..15) +} + +PUSCH-ConfigDedicated-v1020 ::= SEQUENCE { + betaOffsetMC-r10 SEQUENCE { + betaOffset-ACK-Index-MC-r10 INTEGER (0..15), + betaOffset-RI-Index-MC-r10 INTEGER (0..15), + betaOffset-CQI-Index-MC-r10 INTEGER (0..15) + } OPTIONAL, -- Need OR + groupHoppingDisabled-r10 ENUMERATED {true} OPTIONAL, -- Need OR + dmrs-WithOCC-Activated-r10 ENUMERATED {true} OPTIONAL -- Need OR +} + +PUSCH-ConfigDedicatedSCell-r10 ::= SEQUENCE { + groupHoppingDisabled-r10 ENUMERATED {true} OPTIONAL, -- Need OR + dmrs-WithOCC-Activated-r10 ENUMERATED {true} OPTIONAL -- Need OR +} + +UL-ReferenceSignalsPUSCH ::= SEQUENCE { + groupHoppingEnabled BOOLEAN, + groupAssignmentPUSCH INTEGER (0..29), + sequenceHoppingEnabled BOOLEAN, + cyclicShift INTEGER (0..7) +} + + +RACH-ConfigCommon ::= SEQUENCE { + preambleInfo SEQUENCE { + numberOfRA-Preambles ENUMERATED { + n4, n8, n12, n16 ,n20, n24, n28, + n32, n36, n40, n44, n48, n52, n56, + n60, n64}, + preamblesGroupAConfig SEQUENCE { + sizeOfRA-PreamblesGroupA ENUMERATED { + n4, n8, n12, n16 ,n20, n24, n28, + n32, n36, n40, n44, n48, n52, n56, + n60}, + messageSizeGroupA ENUMERATED {b56, b144, b208, b256}, + messagePowerOffsetGroupB ENUMERATED { + minusinfinity, dB0, dB5, dB8, dB10, dB12, + dB15, dB18}, + ... + } OPTIONAL -- Need OP + }, + powerRampingParameters SEQUENCE { + powerRampingStep ENUMERATED {dB0, dB2,dB4, dB6}, + preambleInitialReceivedTargetPower ENUMERATED { + dBm-120, dBm-118, dBm-116, dBm-114, dBm-112, + dBm-110, dBm-108, dBm-106, dBm-104, dBm-102, + dBm-100, dBm-98, dBm-96, dBm-94, + dBm-92, dBm-90} + }, + ra-SupervisionInfo SEQUENCE { + preambleTransMax ENUMERATED { + n3, n4, n5, n6, n7, n8, n10, n20, n50, + n100, n200}, + ra-ResponseWindowSize ENUMERATED { + sf2, sf3, sf4, sf5, sf6, sf7, + sf8, sf10}, + mac-ContentionResolutionTimer ENUMERATED { + sf8, sf16, sf24, sf32, sf40, sf48, + sf56, sf64} + }, + maxHARQ-Msg3Tx INTEGER (1..8), + ... +} + + +RACH-ConfigDedicated ::= SEQUENCE { + ra-PreambleIndex INTEGER (0..63), + ra-PRACH-MaskIndex INTEGER (0..15) +} + + +RadioResourceConfigCommonSIB ::= SEQUENCE { + rach-ConfigCommon RACH-ConfigCommon, + bcch-Config BCCH-Config, + pcch-Config PCCH-Config, + prach-Config PRACH-ConfigSIB, + pdsch-ConfigCommon PDSCH-ConfigCommon, + pusch-ConfigCommon PUSCH-ConfigCommon, + pucch-ConfigCommon PUCCH-ConfigCommon, + soundingRS-UL-ConfigCommon SoundingRS-UL-ConfigCommon, + uplinkPowerControlCommon UplinkPowerControlCommon, + ul-CyclicPrefixLength UL-CyclicPrefixLength, + ..., + [[ uplinkPowerControlCommon-v1020 UplinkPowerControlCommon-v1020 OPTIONAL -- Need OR + ]] +} + +RadioResourceConfigCommon ::= SEQUENCE { + rach-ConfigCommon RACH-ConfigCommon OPTIONAL, -- Need ON + prach-Config PRACH-Config, + pdsch-ConfigCommon PDSCH-ConfigCommon OPTIONAL, -- Need ON + pusch-ConfigCommon PUSCH-ConfigCommon, + phich-Config PHICH-Config OPTIONAL, -- Need ON + pucch-ConfigCommon PUCCH-ConfigCommon OPTIONAL, -- Need ON + soundingRS-UL-ConfigCommon SoundingRS-UL-ConfigCommon OPTIONAL, -- Need ON + uplinkPowerControlCommon UplinkPowerControlCommon OPTIONAL, -- Need ON + antennaInfoCommon AntennaInfoCommon OPTIONAL, -- Need ON + p-Max P-Max OPTIONAL, -- Need OP + tdd-Config TDD-Config OPTIONAL, -- Cond TDD + ul-CyclicPrefixLength UL-CyclicPrefixLength, + ..., + [[ uplinkPowerControlCommon-v1020 UplinkPowerControlCommon-v1020 OPTIONAL -- Need ON + ]] +} + +RadioResourceConfigCommonSCell-r10 ::= SEQUENCE { + -- DL configuration as well as configuration applicable for DL and UL + nonUL-Configuration-r10 SEQUENCE { + -- 1: Cell characteristics + dl-Bandwidth-r10 ENUMERATED {n6, n15, n25, n50, n75, n100}, + -- 2: Physical configuration, general + antennaInfoCommon-r10 AntennaInfoCommon, + mbsfn-SubframeConfigList-r10 MBSFN-SubframeConfigList OPTIONAL, -- Need OR + -- 3: Physical configuration, control + phich-Config-r10 PHICH-Config, + -- 4: Physical configuration, physical channels + pdsch-ConfigCommon-r10 PDSCH-ConfigCommon, + tdd-Config-r10 TDD-Config OPTIONAL -- Cond TDDSCell + }, + -- UL configuration + ul-Configuration-r10 SEQUENCE { + ul-FreqInfo-r10 SEQUENCE { + ul-CarrierFreq-r10 ARFCN-ValueEUTRA OPTIONAL, -- Need OP + ul-Bandwidth-r10 ENUMERATED {n6, n15, + n25, n50, n75, n100} OPTIONAL, -- Need OP + additionalSpectrumEmissionSCell-r10 AdditionalSpectrumEmission + }, + p-Max-r10 P-Max OPTIONAL, -- Need OP + uplinkPowerControlCommonSCell-r10 UplinkPowerControlCommonSCell-r10, + -- A special version of IE UplinkPowerControlCommon may be introduced + -- 3: Physical configuration, control + soundingRS-UL-ConfigCommon-r10 SoundingRS-UL-ConfigCommon, + ul-CyclicPrefixLength-r10 UL-CyclicPrefixLength, + -- 4: Physical configuration, physical channels + prach-ConfigSCell-r10 PRACH-ConfigSCell-r10 OPTIONAL, -- Cond TDD-OR + pusch-ConfigCommon-r10 PUSCH-ConfigCommon + } OPTIONAL, -- Need OR + ..., + [[ ul-CarrierFreq-v1090 ARFCN-ValueEUTRA-v9e0 OPTIONAL -- Need OP + ]] +} + +BCCH-Config ::= SEQUENCE { + modificationPeriodCoeff ENUMERATED {n2, n4, n8, n16} +} + +PCCH-Config ::= SEQUENCE { + defaultPagingCycle ENUMERATED { + rf32, rf64, rf128, rf256}, + nB ENUMERATED { + fourT, twoT, oneT, halfT, quarterT, oneEighthT, + oneSixteenthT, oneThirtySecondT} +} + +UL-CyclicPrefixLength ::= ENUMERATED {len1, len2} + + +RadioResourceConfigDedicated ::= SEQUENCE { + srb-ToAddModList SRB-ToAddModList OPTIONAL, -- Cond HO-Conn + drb-ToAddModList DRB-ToAddModList OPTIONAL, -- Cond HO-toEUTRA + drb-ToReleaseList DRB-ToReleaseList OPTIONAL, -- Need ON + mac-MainConfig CHOICE { + explicitValue MAC-MainConfig, + defaultValue NULL + } OPTIONAL, -- Cond HO-toEUTRA2 + sps-Config SPS-Config OPTIONAL, -- Need ON + physicalConfigDedicated PhysicalConfigDedicated OPTIONAL, -- Need ON + ..., + [[ rlf-TimersAndConstants-r9 RLF-TimersAndConstants-r9 OPTIONAL -- Need ON + ]], + [[ measSubframePatternPCell-r10 MeasSubframePatternPCell-r10 OPTIONAL -- Need ON + ]] +} + +RadioResourceConfigDedicatedSCell-r10 ::= SEQUENCE { + -- UE specific configuration extensions applicable for an SCell + physicalConfigDedicatedSCell-r10 PhysicalConfigDedicatedSCell-r10 OPTIONAL, -- Need ON + ... +} + +SRB-ToAddModList ::= SEQUENCE (SIZE (1..2)) OF SRB-ToAddMod + +SRB-ToAddMod ::= SEQUENCE { + srb-Identity INTEGER (1..2), + rlc-Config CHOICE { + explicitValue RLC-Config, + defaultValue NULL + } OPTIONAL, -- Cond Setup + logicalChannelConfig CHOICE { + explicitValue LogicalChannelConfig, + defaultValue NULL + } OPTIONAL, -- Cond Setup + ... +} + +DRB-ToAddModList ::= SEQUENCE (SIZE (1..maxDRB)) OF DRB-ToAddMod + +DRB-ToAddMod ::= SEQUENCE { + eps-BearerIdentity INTEGER (0..15) OPTIONAL, -- Cond DRB-Setup + drb-Identity DRB-Identity, + pdcp-Config PDCP-Config OPTIONAL, -- Cond PDCP + rlc-Config RLC-Config OPTIONAL, -- Cond Setup + logicalChannelIdentity INTEGER (3..10) OPTIONAL, -- Cond DRB-Setup + logicalChannelConfig LogicalChannelConfig OPTIONAL, -- Cond Setup + ... +} + +DRB-ToReleaseList ::= SEQUENCE (SIZE (1..maxDRB)) OF DRB-Identity + +MeasSubframePatternPCell-r10 ::= CHOICE { + release NULL, + setup MeasSubframePattern-r10 +} + + +RLC-Config ::= CHOICE { + am SEQUENCE { + ul-AM-RLC UL-AM-RLC, + dl-AM-RLC DL-AM-RLC + }, + um-Bi-Directional SEQUENCE { + ul-UM-RLC UL-UM-RLC, + dl-UM-RLC DL-UM-RLC + }, + um-Uni-Directional-UL SEQUENCE { + ul-UM-RLC UL-UM-RLC + }, + um-Uni-Directional-DL SEQUENCE { + dl-UM-RLC DL-UM-RLC + }, + ... +} + +UL-AM-RLC ::= SEQUENCE { + t-PollRetransmit T-PollRetransmit, + pollPDU PollPDU, + pollByte PollByte, + maxRetxThreshold ENUMERATED { + t1, t2, t3, t4, t6, t8, t16, t32} +} + +DL-AM-RLC ::= SEQUENCE { + t-Reordering T-Reordering, + t-StatusProhibit T-StatusProhibit +} + +UL-UM-RLC ::= SEQUENCE { + sn-FieldLength SN-FieldLength +} + +DL-UM-RLC ::= SEQUENCE { + sn-FieldLength SN-FieldLength, + t-Reordering T-Reordering +} + +SN-FieldLength ::= ENUMERATED {size5, size10} + +T-PollRetransmit ::= ENUMERATED { + ms5, ms10, ms15, ms20, ms25, ms30, ms35, + ms40, ms45, ms50, ms55, ms60, ms65, ms70, + ms75, ms80, ms85, ms90, ms95, ms100, ms105, + ms110, ms115, ms120, ms125, ms130, ms135, + ms140, ms145, ms150, ms155, ms160, ms165, + ms170, ms175, ms180, ms185, ms190, ms195, + ms200, ms205, ms210, ms215, ms220, ms225, + ms230, ms235, ms240, ms245, ms250, ms300, + ms350, ms400, ms450, ms500, spare9, spare8, + spare7, spare6, spare5, spare4, spare3, + spare2, spare1} + +PollPDU ::= ENUMERATED { + p4, p8, p16, p32, p64, p128, p256, pInfinity} + +PollByte ::= ENUMERATED { + kB25, kB50, kB75, kB100, kB125, kB250, kB375, + kB500, kB750, kB1000, kB1250, kB1500, kB2000, + kB3000, kBinfinity, spare1} + +T-Reordering ::= ENUMERATED { + ms0, ms5, ms10, ms15, ms20, ms25, ms30, ms35, + ms40, ms45, ms50, ms55, ms60, ms65, ms70, + ms75, ms80, ms85, ms90, ms95, ms100, ms110, + ms120, ms130, ms140, ms150, ms160, ms170, + ms180, ms190, ms200, spare1} + +T-StatusProhibit ::= ENUMERATED { + ms0, ms5, ms10, ms15, ms20, ms25, ms30, ms35, + ms40, ms45, ms50, ms55, ms60, ms65, ms70, + ms75, ms80, ms85, ms90, ms95, ms100, ms105, + ms110, ms115, ms120, ms125, ms130, ms135, + ms140, ms145, ms150, ms155, ms160, ms165, + ms170, ms175, ms180, ms185, ms190, ms195, + ms200, ms205, ms210, ms215, ms220, ms225, + ms230, ms235, ms240, ms245, ms250, ms300, + ms350, ms400, ms450, ms500, spare8, spare7, + spare6, spare5, spare4, spare3, spare2, + spare1} + + +RLF-TimersAndConstants-r9 ::= CHOICE { + release NULL, + setup SEQUENCE { + t301-r9 ENUMERATED { + ms100, ms200, ms300, ms400, ms600, ms1000, ms1500, + ms2000}, + t310-r9 ENUMERATED { + ms0, ms50, ms100, ms200, ms500, ms1000, ms2000}, + n310-r9 ENUMERATED { + n1, n2, n3, n4, n6, n8, n10, n20}, + t311-r9 ENUMERATED { + ms1000, ms3000, ms5000, ms10000, ms15000, + ms20000, ms30000}, + n311-r9 ENUMERATED { + n1, n2, n3, n4, n5, n6, n8, n10}, + ... + } +} + + +RN-SubframeConfig-r10 ::= SEQUENCE { + subframeConfigPattern-r10 CHOICE { + subframeConfigPatternFDD-r10 BIT STRING (SIZE(8)), + subframeConfigPatternTDD-r10 INTEGER (0..31) + } OPTIONAL, -- Need ON + rpdcch-Config-r10 SEQUENCE { + resourceAllocationType-r10 ENUMERATED {type0, type1, type2Localized, type2Distributed, + spare4, spare3, spare2, spare1}, + resourceBlockAssignment-r10 CHOICE { + type01-r10 CHOICE { + nrb6-r10 BIT STRING (SIZE(6)), + nrb15-r10 BIT STRING (SIZE(8)), + nrb25-r10 BIT STRING (SIZE(13)), + nrb50-r10 BIT STRING (SIZE(17)), + nrb75-r10 BIT STRING (SIZE(19)), + nrb100-r10 BIT STRING (SIZE(25)) + }, + type2-r10 CHOICE { + nrb6-r10 BIT STRING (SIZE(5)), + nrb15-r10 BIT STRING (SIZE(7)), + nrb25-r10 BIT STRING (SIZE(9)), + nrb50-r10 BIT STRING (SIZE(11)), + nrb75-r10 BIT STRING (SIZE(12)), + nrb100-r10 BIT STRING (SIZE(13)) + }, + ... + }, + demodulationRS-r10 CHOICE { + interleaving-r10 ENUMERATED {crs}, + noInterleaving-r10 ENUMERATED {crs, dmrs} + }, + pdsch-Start-r10 INTEGER (1..3), + pucch-Config-r10 CHOICE { + tdd CHOICE { + channelSelectionMultiplexingBundling SEQUENCE { + n1PUCCH-AN-List-r10 SEQUENCE (SIZE (1..4)) OF INTEGER (0..2047) + }, + fallbackForFormat3 SEQUENCE { + n1PUCCH-AN-P0-r10 INTEGER (0..2047), + n1PUCCH-AN-P1-r10 INTEGER (0..2047) OPTIONAL -- Need OR + } + }, + fdd SEQUENCE { + n1PUCCH-AN-P0-r10 INTEGER (0..2047), + n1PUCCH-AN-P1-r10 INTEGER (0..2047) OPTIONAL -- Need OR + } + }, + ... + } OPTIONAL, -- Need ON + ... +} + + +SchedulingRequestConfig ::= CHOICE { + release NULL, + setup SEQUENCE { + sr-PUCCH-ResourceIndex INTEGER (0..2047), + sr-ConfigIndex INTEGER (0..157), + dsr-TransMax ENUMERATED { + n4, n8, n16, n32, n64, spare3, spare2, spare1} + } +} + +SchedulingRequestConfig-v1020 ::= SEQUENCE { + sr-PUCCH-ResourceIndexP1-r10 INTEGER (0..2047) OPTIONAL -- Need OR +} + + +SoundingRS-UL-ConfigCommon ::= CHOICE { + release NULL, + setup SEQUENCE { + srs-BandwidthConfig ENUMERATED {bw0, bw1, bw2, bw3, bw4, bw5, bw6, bw7}, + srs-SubframeConfig ENUMERATED { + sc0, sc1, sc2, sc3, sc4, sc5, sc6, sc7, + sc8, sc9, sc10, sc11, sc12, sc13, sc14, sc15}, + ackNackSRS-SimultaneousTransmission BOOLEAN, + srs-MaxUpPts ENUMERATED {true} OPTIONAL -- Cond TDD + } +} + +SoundingRS-UL-ConfigDedicated ::= CHOICE{ + release NULL, + setup SEQUENCE { + srs-Bandwidth ENUMERATED {bw0, bw1, bw2, bw3}, + srs-HoppingBandwidth ENUMERATED {hbw0, hbw1, hbw2, hbw3}, + freqDomainPosition INTEGER (0..23), + duration BOOLEAN, + srs-ConfigIndex INTEGER (0..1023), + transmissionComb INTEGER (0..1), + cyclicShift ENUMERATED {cs0, cs1, cs2, cs3, cs4, cs5, cs6, cs7} + } +} + +SoundingRS-UL-ConfigDedicated-v1020 ::= SEQUENCE { + srs-AntennaPort-r10 SRS-AntennaPort +} + +SoundingRS-UL-ConfigDedicatedAperiodic-r10 ::= CHOICE{ + release NULL, + setup SEQUENCE { + srs-ConfigIndexAp-r10 INTEGER (0..31), + srs-ConfigApDCI-Format4-r10 SEQUENCE (SIZE (1..3)) OF SRS-ConfigAp-r10 OPTIONAL,--Need ON + srs-ActivateAp-r10 CHOICE { + release NULL, + setup SEQUENCE { + srs-ConfigApDCI-Format0-r10 SRS-ConfigAp-r10, + srs-ConfigApDCI-Format1a2b2c-r10 SRS-ConfigAp-r10, + ... + } + } OPTIONAL -- Need ON + } +} + +SRS-ConfigAp-r10 ::= SEQUENCE { + srs-AntennaPortAp-r10 SRS-AntennaPort, + srs-BandwidthAp-r10 ENUMERATED {bw0, bw1, bw2, bw3}, + freqDomainPositionAp-r10 INTEGER (0..23), + transmissionCombAp-r10 INTEGER (0..1), + cyclicShiftAp-r10 ENUMERATED {cs0, cs1, cs2, cs3, cs4, cs5, cs6, cs7} +} + +SRS-AntennaPort ::= ENUMERATED {an1, an2, an4, spare1} + + +SPS-Config ::= SEQUENCE { + semiPersistSchedC-RNTI C-RNTI OPTIONAL, -- Need OR + sps-ConfigDL SPS-ConfigDL OPTIONAL, -- Need ON + sps-ConfigUL SPS-ConfigUL OPTIONAL -- Need ON +} + +SPS-ConfigDL ::= CHOICE{ + release NULL, + setup SEQUENCE { + semiPersistSchedIntervalDL ENUMERATED { + sf10, sf20, sf32, sf40, sf64, sf80, + sf128, sf160, sf320, sf640, spare6, + spare5, spare4, spare3, spare2, + spare1}, + numberOfConfSPS-Processes INTEGER (1..8), + n1PUCCH-AN-PersistentList N1PUCCH-AN-PersistentList, + ..., + [[ twoAntennaPortActivated-r10 CHOICE { + release NULL, + setup SEQUENCE { + n1PUCCH-AN-PersistentListP1-r10 N1PUCCH-AN-PersistentList + } + } OPTIONAL -- Need ON + ]] + } +} + +SPS-ConfigUL ::= CHOICE { + release NULL, + setup SEQUENCE { + semiPersistSchedIntervalUL ENUMERATED { + sf10, sf20, sf32, sf40, sf64, sf80, + sf128, sf160, sf320, sf640, spare6, + spare5, spare4, spare3, spare2, + spare1}, + implicitReleaseAfter ENUMERATED {e2, e3, e4, e8}, + p0-Persistent SEQUENCE { + p0-NominalPUSCH-Persistent INTEGER (-126..24), + p0-UE-PUSCH-Persistent INTEGER (-8..7) + } OPTIONAL, -- Need OP + twoIntervalsConfig ENUMERATED {true} OPTIONAL, -- Cond TDD + ... + } +} + +N1PUCCH-AN-PersistentList ::= SEQUENCE (SIZE (1..4)) OF INTEGER (0..2047) + + +TDD-Config ::= SEQUENCE { + subframeAssignment ENUMERATED { + sa0, sa1, sa2, sa3, sa4, sa5, sa6}, + specialSubframePatterns ENUMERATED { + ssp0, ssp1, ssp2, ssp3, ssp4,ssp5, ssp6, ssp7, + ssp8} +} + + +TimeAlignmentTimer ::= ENUMERATED { + sf500, sf750, sf1280, sf1920, sf2560, sf5120, + sf10240, infinity} + +TPC-PDCCH-Config ::= CHOICE { + release NULL, + setup SEQUENCE { + tpc-RNTI BIT STRING (SIZE (16)), + tpc-Index TPC-Index + } +} + +TPC-Index ::= CHOICE { + indexOfFormat3 INTEGER (1..15), + indexOfFormat3A INTEGER (1..31) +} + + +UplinkPowerControlCommon ::= SEQUENCE { + p0-NominalPUSCH INTEGER (-126..24), + alpha ENUMERATED {al0, al04, al05, al06, al07, al08, al09, al1}, + p0-NominalPUCCH INTEGER (-127..-96), + deltaFList-PUCCH DeltaFList-PUCCH, + deltaPreambleMsg3 INTEGER (-1..6) +} + +UplinkPowerControlCommon-v1020 ::= SEQUENCE { + deltaF-PUCCH-Format3-r10 ENUMERATED {deltaF-1, deltaF0, deltaF1, deltaF2, + deltaF3, deltaF4, deltaF5, deltaF6}, + deltaF-PUCCH-Format1bCS-r10 ENUMERATED {deltaF1, deltaF2, spare2, spare1} +} + +UplinkPowerControlCommonSCell-r10 ::= SEQUENCE { + p0-NominalPUSCH-r10 INTEGER (-126..24), + alpha-r10 ENUMERATED {al0, al04, al05, al06, al07, al08, al09, al1} +} + +UplinkPowerControlDedicated ::= SEQUENCE { + p0-UE-PUSCH INTEGER (-8..7), + deltaMCS-Enabled ENUMERATED {en0, en1}, + accumulationEnabled BOOLEAN, + p0-UE-PUCCH INTEGER (-8..7), + pSRS-Offset INTEGER (0..15), + filterCoefficient FilterCoefficient DEFAULT fc4 +} + +UplinkPowerControlDedicated-v1020 ::= SEQUENCE { + deltaTxD-OffsetListPUCCH-r10 DeltaTxD-OffsetListPUCCH-r10 OPTIONAL, -- Need OR + pSRS-OffsetAp-r10 INTEGER (0..15) OPTIONAL -- Need OR +} + +UplinkPowerControlDedicatedSCell-r10 ::= SEQUENCE { + p0-UE-PUSCH-r10 INTEGER (-8..7), + deltaMCS-Enabled-r10 ENUMERATED {en0, en1}, + accumulationEnabled-r10 BOOLEAN, + pSRS-Offset-r10 INTEGER (0..15), + pSRS-OffsetAp-r10 INTEGER (0..15) OPTIONAL, -- Need OR + filterCoefficient-r10 FilterCoefficient DEFAULT fc4, + pathlossReferenceLinking-r10 ENUMERATED {pCell, sCell} +} + +DeltaFList-PUCCH ::= SEQUENCE { + deltaF-PUCCH-Format1 ENUMERATED {deltaF-2, deltaF0, deltaF2}, + deltaF-PUCCH-Format1b ENUMERATED {deltaF1, deltaF3, deltaF5}, + deltaF-PUCCH-Format2 ENUMERATED {deltaF-2, deltaF0, deltaF1, deltaF2}, + deltaF-PUCCH-Format2a ENUMERATED {deltaF-2, deltaF0, deltaF2}, + deltaF-PUCCH-Format2b ENUMERATED {deltaF-2, deltaF0, deltaF2} +} + +DeltaTxD-OffsetListPUCCH-r10 ::= SEQUENCE { + deltaTxD-OffsetPUCCH-Format1-r10 ENUMERATED {dB0, dB-2}, + deltaTxD-OffsetPUCCH-Format1a1b-r10 ENUMERATED {dB0, dB-2}, + deltaTxD-OffsetPUCCH-Format22a2b-r10 ENUMERATED {dB0, dB-2}, + deltaTxD-OffsetPUCCH-Format3-r10 ENUMERATED {dB0, dB-2}, + ... +} + + +NextHopChainingCount ::= INTEGER (0..7) + + +SecurityAlgorithmConfig ::= SEQUENCE { + cipheringAlgorithm ENUMERATED { + eea0, eea1, eea2, spare5, spare4, spare3, + spare2, spare1, ...}, + integrityProtAlgorithm ENUMERATED { + eia0-v920, eia1, eia2, spare5, spare4, spare3, + spare2, spare1, ...} +} + + +ShortMAC-I ::= BIT STRING (SIZE (16)) + + +AdditionalSpectrumEmission ::= INTEGER (1..32) + + +ARFCN-ValueCDMA2000 ::= INTEGER (0..2047) + + +ARFCN-ValueEUTRA ::= INTEGER (0..maxEARFCN) + +ARFCN-ValueEUTRA-v9e0 ::= INTEGER (maxEARFCN-Plus1..maxEARFCN2) + +ARFCN-ValueEUTRA-r9 ::= INTEGER (0..maxEARFCN2) + + +ARFCN-ValueGERAN ::= INTEGER (0..1023) + + +ARFCN-ValueUTRA ::= INTEGER (0..16383) + + +BandclassCDMA2000 ::= ENUMERATED { + bc0, bc1, bc2, bc3, bc4, bc5, bc6, bc7, bc8, + bc9, bc10, bc11, bc12, bc13, bc14, bc15, bc16, + bc17, bc18-v9a0, bc19-v9a0, bc20-v9a0, bc21-v9a0, + spare10, spare9, spare8, spare7, spare6, spare5, spare4, + spare3, spare2, spare1, ...} + + +BandIndicatorGERAN ::= ENUMERATED {dcs1800, pcs1900} + + +CarrierFreqCDMA2000 ::= SEQUENCE { + bandClass BandclassCDMA2000, + arfcn ARFCN-ValueCDMA2000 +} + + +CarrierFreqGERAN ::= SEQUENCE { + arfcn ARFCN-ValueGERAN, + bandIndicator BandIndicatorGERAN +} + + +CarrierFreqsGERAN ::= SEQUENCE { + startingARFCN ARFCN-ValueGERAN, + bandIndicator BandIndicatorGERAN, + followingARFCNs CHOICE { + explicitListOfARFCNs ExplicitListOfARFCNs, + equallySpacedARFCNs SEQUENCE { + arfcn-Spacing INTEGER (1..8), + numberOfFollowingARFCNs INTEGER (0..31) + }, + variableBitMapOfARFCNs OCTET STRING (SIZE (1..16)) + } +} + +ExplicitListOfARFCNs ::= SEQUENCE (SIZE (0..31)) OF ARFCN-ValueGERAN + + +CDMA2000-Type ::= ENUMERATED {type1XRTT, typeHRPD} + + +CellIdentity ::= BIT STRING (SIZE (28)) + + +CellIndexList ::= SEQUENCE (SIZE (1..maxCellMeas)) OF CellIndex + +CellIndex ::= INTEGER (1..maxCellMeas) + + +CellReselectionPriority ::= INTEGER (0..7) + + +CSFB-RegistrationParam1XRTT ::= SEQUENCE { + sid BIT STRING (SIZE (15)), + nid BIT STRING (SIZE (16)), + multipleSID BOOLEAN, + multipleNID BOOLEAN, + homeReg BOOLEAN, + foreignSIDReg BOOLEAN, + foreignNIDReg BOOLEAN, + parameterReg BOOLEAN, + powerUpReg BOOLEAN, + registrationPeriod BIT STRING (SIZE (7)), + registrationZone BIT STRING (SIZE (12)), + totalZone BIT STRING (SIZE (3)), + zoneTimer BIT STRING (SIZE (3)) +} + +CSFB-RegistrationParam1XRTT-v920 ::= SEQUENCE { + powerDownReg-r9 ENUMERATED {true} +} + + +CellGlobalIdEUTRA ::= SEQUENCE { + plmn-Identity PLMN-Identity, + cellIdentity CellIdentity +} + + +CellGlobalIdUTRA ::= SEQUENCE { + plmn-Identity PLMN-Identity, + cellIdentity BIT STRING (SIZE (28)) +} + + +CellGlobalIdGERAN ::= SEQUENCE { + plmn-Identity PLMN-Identity, + locationAreaCode BIT STRING (SIZE (16)), + cellIdentity BIT STRING (SIZE (16)) +} + + +CellGlobalIdCDMA2000 ::= CHOICE { + cellGlobalId1XRTT BIT STRING (SIZE (47)), + cellGlobalIdHRPD BIT STRING (SIZE (128)) +} + + +CSG-Identity ::= BIT STRING (SIZE (27)) + + +FreqBandIndicator ::= INTEGER (1..maxFBI) + +FreqBandIndicator-v9e0 ::= INTEGER (maxFBI-Plus1..maxFBI2) + + +MobilityControlInfo ::= SEQUENCE { + targetPhysCellId PhysCellId, + carrierFreq CarrierFreqEUTRA OPTIONAL, -- Cond HO-toEUTRA2 + carrierBandwidth CarrierBandwidthEUTRA OPTIONAL, -- Cond HO-toEUTRA + additionalSpectrumEmission AdditionalSpectrumEmission OPTIONAL, -- Cond HO-toEUTRA + t304 ENUMERATED { + ms50, ms100, ms150, ms200, ms500, ms1000, + ms2000, spare1}, + newUE-Identity C-RNTI, + radioResourceConfigCommon RadioResourceConfigCommon, + rach-ConfigDedicated RACH-ConfigDedicated OPTIONAL, -- Need OP + ..., + [[ carrierFreq-v9e0 CarrierFreqEUTRA-v9e0 OPTIONAL -- Need ON + ]] +} + +CarrierBandwidthEUTRA ::= SEQUENCE { + dl-Bandwidth ENUMERATED { + n6, n15, n25, n50, n75, n100, spare10, + spare9, spare8, spare7, spare6, spare5, + spare4, spare3, spare2, spare1}, + ul-Bandwidth ENUMERATED { + n6, n15, n25, n50, n75, n100, spare10, + spare9, spare8, spare7, spare6, spare5, + spare4, spare3, spare2, spare1} OPTIONAL -- Need OP +} + +CarrierFreqEUTRA ::= SEQUENCE { + dl-CarrierFreq ARFCN-ValueEUTRA, + ul-CarrierFreq ARFCN-ValueEUTRA OPTIONAL -- Cond FDD +} + +CarrierFreqEUTRA-v9e0 ::= SEQUENCE { + dl-CarrierFreq-v9e0 ARFCN-ValueEUTRA-r9, + ul-CarrierFreq-v9e0 ARFCN-ValueEUTRA-r9 OPTIONAL -- Cond FDD +} + + +MobilityParametersCDMA2000 ::= OCTET STRING + + +MobilityStateParameters ::= SEQUENCE { + t-Evaluation ENUMERATED { + s30, s60, s120, s180, s240, spare3, spare2, spare1}, + t-HystNormal ENUMERATED { + s30, s60, s120, s180, s240, spare3, spare2, spare1}, + n-CellChangeMedium INTEGER (1..16), + n-CellChangeHigh INTEGER (1..16) +} + + +MultiBandInfoList ::= SEQUENCE (SIZE (1..maxMultiBands)) OF FreqBandIndicator + +MultiBandInfoList-v9e0 ::= SEQUENCE (SIZE (1..maxMultiBands)) OF MultiBandInfo-v9e0 + +MultiBandInfo-v9e0 ::= SEQUENCE { + freqBandIndicator-v9e0 FreqBandIndicator-v9e0 OPTIONAL -- Need OP +} + + +PhysCellId ::= INTEGER (0..503) + + +PhysCellIdRange ::= SEQUENCE { + start PhysCellId, + range ENUMERATED { + n4, n8, n12, n16, n24, n32, n48, n64, n84, + n96, n128, n168, n252, n504, spare2, + spare1} OPTIONAL -- Need OP +} + + +PhysCellIdRangeUTRA-FDDList-r9::= SEQUENCE (SIZE (1.. maxPhysCellIdRange-r9)) OF PhysCellIdRangeUTRA-FDD-r9 + +PhysCellIdRangeUTRA-FDD-r9 ::= SEQUENCE { + start-r9 PhysCellIdUTRA-FDD, + range-r9 INTEGER (2..512) OPTIONAL -- Need OP +} + + +PhysCellIdCDMA2000 ::= INTEGER (0..maxPNOffset) + + +PhysCellIdGERAN ::= SEQUENCE { + networkColourCode BIT STRING (SIZE (3)), + baseStationColourCode BIT STRING (SIZE (3)) +} + + +PhysCellIdUTRA-FDD ::= INTEGER (0..511) + + +PhysCellIdUTRA-TDD ::= INTEGER (0..127) + + +PLMN-Identity ::= SEQUENCE { + mcc MCC OPTIONAL, -- Cond MCC + mnc MNC +} + +MCC ::= SEQUENCE (SIZE (3)) OF + MCC-MNC-Digit + +MNC ::= SEQUENCE (SIZE (2..3)) OF + MCC-MNC-Digit + +MCC-MNC-Digit ::= INTEGER (0..9) + + + +PreRegistrationInfoHRPD ::= SEQUENCE { + preRegistrationAllowed BOOLEAN, + preRegistrationZoneId PreRegistrationZoneIdHRPD OPTIONAL, -- cond PreRegAllowed + secondaryPreRegistrationZoneIdList SecondaryPreRegistrationZoneIdListHRPD OPTIONAL -- Need OR +} + +SecondaryPreRegistrationZoneIdListHRPD ::= SEQUENCE (SIZE (1..2)) OF PreRegistrationZoneIdHRPD + +PreRegistrationZoneIdHRPD ::= INTEGER (0..255) + + +Q-QualMin-r9 ::= INTEGER (-34..-3) + + +Q-RxLevMin ::= INTEGER (-70..-22) + + +Q-OffsetRange ::= ENUMERATED { + dB-24, dB-22, dB-20, dB-18, dB-16, dB-14, + dB-12, dB-10, dB-8, dB-6, dB-5, dB-4, dB-3, + dB-2, dB-1, dB0, dB1, dB2, dB3, dB4, dB5, + dB6, dB8, dB10, dB12, dB14, dB16, dB18, + dB20, dB22, dB24} + + +Q-OffsetRangeInterRAT ::= INTEGER (-15..15) + + +ReselectionThreshold ::= INTEGER (0..31) + + +ReselectionThresholdQ-r9 ::= INTEGER (0..31) + + +SCellIndex-r10 ::= INTEGER (1..7) + + +ServCellIndex-r10 ::= INTEGER (0..7) + + +SpeedStateScaleFactors ::= SEQUENCE { + sf-Medium ENUMERATED {oDot25, oDot5, oDot75, lDot0}, + sf-High ENUMERATED {oDot25, oDot5, oDot75, lDot0} +} + +SystemInfoListGERAN ::= SEQUENCE (SIZE (1..maxGERAN-SI)) OF + OCTET STRING (SIZE (1..23)) + + +SystemTimeInfoCDMA2000 ::= SEQUENCE { + cdma-EUTRA-Synchronisation BOOLEAN, + cdma-SystemTime CHOICE { + synchronousSystemTime BIT STRING (SIZE (39)), + asynchronousSystemTime BIT STRING (SIZE (49)) + } +} + + +TrackingAreaCode ::= BIT STRING (SIZE (16)) + + +T-Reselection ::= INTEGER (0..7) + + +AllowedMeasBandwidth ::= ENUMERATED {mbw6, mbw15, mbw25, mbw50, mbw75, mbw100} + + +Hysteresis ::= INTEGER (0..30) + + +LocationInfo-r10 ::= SEQUENCE { + locationCoordinates-r10 CHOICE { + ellipsoid-Point-r10 OCTET STRING, + ellipsoidPointWithAltitude-r10 OCTET STRING, + ... + }, + horizontalVelocity-r10 OCTET STRING OPTIONAL, + gnss-TOD-msec-r10 OCTET STRING OPTIONAL, + ... +} + + +MeasConfig ::= SEQUENCE { + -- Measurement objects + measObjectToRemoveList MeasObjectToRemoveList OPTIONAL, -- Need ON + measObjectToAddModList MeasObjectToAddModList OPTIONAL, -- Need ON + -- Reporting configurations + reportConfigToRemoveList ReportConfigToRemoveList OPTIONAL, -- Need ON + reportConfigToAddModList ReportConfigToAddModList OPTIONAL, -- Need ON + -- Measurement identities + measIdToRemoveList MeasIdToRemoveList OPTIONAL, -- Need ON + measIdToAddModList MeasIdToAddModList OPTIONAL, -- Need ON + -- Other parameters + quantityConfig QuantityConfig OPTIONAL, -- Need ON + measGapConfig MeasGapConfig OPTIONAL, -- Need ON + s-Measure RSRP-Range OPTIONAL, -- Need ON + preRegistrationInfoHRPD PreRegistrationInfoHRPD OPTIONAL, -- Need OP + speedStatePars CHOICE { + release NULL, + setup SEQUENCE { + mobilityStateParameters MobilityStateParameters, + timeToTrigger-SF SpeedStateScaleFactors + } + } OPTIONAL, -- Need ON + ..., + [[ measObjectToAddModList-v9e0 MeasObjectToAddModList-v9e0 OPTIONAL -- Need ON + ]] +} + +MeasIdToRemoveList ::= SEQUENCE (SIZE (1..maxMeasId)) OF MeasId + +MeasObjectToRemoveList ::= SEQUENCE (SIZE (1..maxObjectId)) OF MeasObjectId + +ReportConfigToRemoveList ::= SEQUENCE (SIZE (1..maxReportConfigId)) OF ReportConfigId + + +MeasGapConfig ::= CHOICE { + release NULL, + setup SEQUENCE { + gapOffset CHOICE { + gp0 INTEGER (0..39), + gp1 INTEGER (0..79), + ... + } + } +} + + +MeasId ::= INTEGER (1..maxMeasId) + + +MeasIdToAddModList ::= SEQUENCE (SIZE (1..maxMeasId)) OF MeasIdToAddMod + +MeasIdToAddMod ::= SEQUENCE { + measId MeasId, + measObjectId MeasObjectId, + reportConfigId ReportConfigId +} + + +MeasObjectCDMA2000 ::= SEQUENCE { + cdma2000-Type CDMA2000-Type, + carrierFreq CarrierFreqCDMA2000, + searchWindowSize INTEGER (0..15) OPTIONAL, -- Need ON + offsetFreq Q-OffsetRangeInterRAT DEFAULT 0, + cellsToRemoveList CellIndexList OPTIONAL, -- Need ON + cellsToAddModList CellsToAddModListCDMA2000 OPTIONAL, -- Need ON + cellForWhichToReportCGI PhysCellIdCDMA2000 OPTIONAL, -- Need ON + ... +} + +CellsToAddModListCDMA2000 ::= SEQUENCE (SIZE (1..maxCellMeas)) OF CellsToAddModCDMA2000 + +CellsToAddModCDMA2000 ::= SEQUENCE { + cellIndex INTEGER (1..maxCellMeas), + physCellId PhysCellIdCDMA2000 +} + + +MeasObjectEUTRA ::= SEQUENCE { + carrierFreq ARFCN-ValueEUTRA, + allowedMeasBandwidth AllowedMeasBandwidth, + presenceAntennaPort1 PresenceAntennaPort1, + neighCellConfig NeighCellConfig, + offsetFreq Q-OffsetRange DEFAULT dB0, + -- Cell list + cellsToRemoveList CellIndexList OPTIONAL, -- Need ON + cellsToAddModList CellsToAddModList OPTIONAL, -- Need ON + -- Black list + blackCellsToRemoveList CellIndexList OPTIONAL, -- Need ON + blackCellsToAddModList BlackCellsToAddModList OPTIONAL, -- Need ON + cellForWhichToReportCGI PhysCellId OPTIONAL, -- Need ON + ..., + [[measCycleSCell-r10 MeasCycleSCell-r10 OPTIONAL, -- Need ON + measSubframePatternConfigNeigh-r10 MeasSubframePatternConfigNeigh-r10 OPTIONAL -- Need ON + ]] +} + +MeasObjectEUTRA-v9e0 ::= SEQUENCE { + carrierFreq-v9e0 ARFCN-ValueEUTRA-v9e0 +} + +CellsToAddModList ::= SEQUENCE (SIZE (1..maxCellMeas)) OF CellsToAddMod + +CellsToAddMod ::= SEQUENCE { + cellIndex INTEGER (1..maxCellMeas), + physCellId PhysCellId, + cellIndividualOffset Q-OffsetRange +} + +BlackCellsToAddModList ::= SEQUENCE (SIZE (1..maxCellMeas)) OF BlackCellsToAddMod + +BlackCellsToAddMod ::= SEQUENCE { + cellIndex INTEGER (1..maxCellMeas), + physCellIdRange PhysCellIdRange +} + +MeasCycleSCell-r10 ::= ENUMERATED {sf160, sf256, sf320, sf512, + sf640, sf1024, sf1280, spare1} + +MeasSubframePatternConfigNeigh-r10 ::= CHOICE { + release NULL, + setup SEQUENCE { + measSubframePatternNeigh-r10 MeasSubframePattern-r10, + measSubframeCellList-r10 MeasSubframeCellList-r10 OPTIONAL -- Cond measSubframe + } +} + +MeasSubframeCellList-r10 ::= SEQUENCE (SIZE (1..maxCellMeas)) OF PhysCellIdRange + + +MeasObjectGERAN ::= SEQUENCE { + carrierFreqs CarrierFreqsGERAN, + offsetFreq Q-OffsetRangeInterRAT DEFAULT 0, + ncc-Permitted BIT STRING(SIZE (8)) DEFAULT '11111111'B, + cellForWhichToReportCGI PhysCellIdGERAN OPTIONAL, -- Need ON + ... +} + + +MeasObjectId ::= INTEGER (1..maxObjectId) + + +MeasObjectToAddModList ::= SEQUENCE (SIZE (1..maxObjectId)) OF MeasObjectToAddMod + +MeasObjectToAddModList-v9e0 ::= SEQUENCE (SIZE (1..maxObjectId)) OF MeasObjectToAddMod-v9e0 + +MeasObjectToAddMod ::= SEQUENCE { + measObjectId MeasObjectId, + measObject CHOICE { + measObjectEUTRA MeasObjectEUTRA, + measObjectUTRA MeasObjectUTRA, + measObjectGERAN MeasObjectGERAN, + measObjectCDMA2000 MeasObjectCDMA2000, + ... + } +} + +MeasObjectToAddMod-v9e0 ::= SEQUENCE { + measObjectEUTRA-v9e0 MeasObjectEUTRA-v9e0 OPTIONAL -- Cond eutra +} + + +MeasObjectUTRA ::= SEQUENCE { + carrierFreq ARFCN-ValueUTRA, + offsetFreq Q-OffsetRangeInterRAT DEFAULT 0, + cellsToRemoveList CellIndexList OPTIONAL, -- Need ON + cellsToAddModList CHOICE { + cellsToAddModListUTRA-FDD CellsToAddModListUTRA-FDD, + cellsToAddModListUTRA-TDD CellsToAddModListUTRA-TDD + } OPTIONAL, -- Need ON + cellForWhichToReportCGI CHOICE { + utra-FDD PhysCellIdUTRA-FDD, + utra-TDD PhysCellIdUTRA-TDD + } OPTIONAL, -- Need ON + ..., + [[ csg-allowedReportingCells-v930 CSG-AllowedReportingCells-r9 OPTIONAL -- Need ON + ]] +} + +CellsToAddModListUTRA-FDD ::= SEQUENCE (SIZE (1..maxCellMeas)) OF CellsToAddModUTRA-FDD + +CellsToAddModUTRA-FDD ::= SEQUENCE { + cellIndex INTEGER (1..maxCellMeas), + physCellId PhysCellIdUTRA-FDD +} + +CellsToAddModListUTRA-TDD ::= SEQUENCE (SIZE (1..maxCellMeas)) OF CellsToAddModUTRA-TDD + +CellsToAddModUTRA-TDD ::= SEQUENCE { + cellIndex INTEGER (1..maxCellMeas), + physCellId PhysCellIdUTRA-TDD +} + +CSG-AllowedReportingCells-r9 ::= SEQUENCE { + physCellIdRangeUTRA-FDDList-r9 PhysCellIdRangeUTRA-FDDList-r9 OPTIONAL -- Need OR +} + +MeasResults ::= SEQUENCE { + measId MeasId, + measResultPCell SEQUENCE { + rsrpResult RSRP-Range, + rsrqResult RSRQ-Range + }, + measResultNeighCells CHOICE { + measResultListEUTRA MeasResultListEUTRA, + measResultListUTRA MeasResultListUTRA, + measResultListGERAN MeasResultListGERAN, + measResultsCDMA2000 MeasResultsCDMA2000, + ... + } OPTIONAL, + ..., + [[ measResultForECID-r9 MeasResultForECID-r9 OPTIONAL + ]], + [[ locationInfo-r10 LocationInfo-r10 OPTIONAL, + measResultServFreqList-r10 MeasResultServFreqList-r10 OPTIONAL + ]] +} + +MeasResultListEUTRA ::= SEQUENCE (SIZE (1..maxCellReport)) OF MeasResultEUTRA + +MeasResultEUTRA ::= SEQUENCE { + physCellId PhysCellId, + cgi-Info SEQUENCE { + cellGlobalId CellGlobalIdEUTRA, + trackingAreaCode TrackingAreaCode, + plmn-IdentityList PLMN-IdentityList2 OPTIONAL + } OPTIONAL, + measResult SEQUENCE { + rsrpResult RSRP-Range OPTIONAL, + rsrqResult RSRQ-Range OPTIONAL, + ..., + [[ additionalSI-Info-r9 AdditionalSI-Info-r9 OPTIONAL + ]] + } +} + +MeasResultServFreqList-r10 ::= SEQUENCE (SIZE (1..maxServCell-r10)) OF MeasResultServFreq-r10 + +MeasResultServFreq-r10 ::= SEQUENCE { + servFreqId-r10 ServCellIndex-r10, + measResultSCell-r10 SEQUENCE { + rsrpResultSCell-r10 RSRP-Range, + rsrqResultSCell-r10 RSRQ-Range + } OPTIONAL, + measResultBestNeighCell-r10 SEQUENCE { + physCellId-r10 PhysCellId, + rsrpResultNCell-r10 RSRP-Range, + rsrqResultNCell-r10 RSRQ-Range + } OPTIONAL, + ... +} + +MeasResultListUTRA ::= SEQUENCE (SIZE (1..maxCellReport)) OF MeasResultUTRA + +MeasResultUTRA ::= SEQUENCE { + physCellId CHOICE { + fdd PhysCellIdUTRA-FDD, + tdd PhysCellIdUTRA-TDD + }, + cgi-Info SEQUENCE { + cellGlobalId CellGlobalIdUTRA, + locationAreaCode BIT STRING (SIZE (16)) OPTIONAL, + routingAreaCode BIT STRING (SIZE (8)) OPTIONAL, + plmn-IdentityList PLMN-IdentityList2 OPTIONAL + } OPTIONAL, + measResult SEQUENCE { + utra-RSCP INTEGER (-5..91) OPTIONAL, + utra-EcN0 INTEGER (0..49) OPTIONAL, + ..., + [[ additionalSI-Info-r9 AdditionalSI-Info-r9 OPTIONAL + ]] + } +} + +MeasResultListGERAN ::= SEQUENCE (SIZE (1..maxCellReport)) OF MeasResultGERAN + +MeasResultGERAN ::= SEQUENCE { + carrierFreq CarrierFreqGERAN, + physCellId PhysCellIdGERAN, + cgi-Info SEQUENCE { + cellGlobalId CellGlobalIdGERAN, + routingAreaCode BIT STRING (SIZE (8)) OPTIONAL + } OPTIONAL, + measResult SEQUENCE { + rssi INTEGER (0..63), + ... + } +} + +MeasResultsCDMA2000 ::= SEQUENCE { + preRegistrationStatusHRPD BOOLEAN, + measResultListCDMA2000 MeasResultListCDMA2000 +} + +MeasResultListCDMA2000 ::= SEQUENCE (SIZE (1..maxCellReport)) OF MeasResultCDMA2000 + +MeasResultCDMA2000 ::= SEQUENCE { + physCellId PhysCellIdCDMA2000, + cgi-Info CellGlobalIdCDMA2000 OPTIONAL, + measResult SEQUENCE { + pilotPnPhase INTEGER (0..32767) OPTIONAL, + pilotStrength INTEGER (0..63), + ... + } +} + +MeasResultForECID-r9 ::= SEQUENCE { + ue-RxTxTimeDiffResult-r9 INTEGER (0..4095), + currentSFN-r9 BIT STRING (SIZE (10)) +} + +PLMN-IdentityList2 ::= SEQUENCE (SIZE (1..5)) OF PLMN-Identity + +AdditionalSI-Info-r9 ::= SEQUENCE { + csg-MemberStatus-r9 ENUMERATED {member} OPTIONAL, + csg-Identity-r9 CSG-Identity OPTIONAL +} + + +QuantityConfig ::= SEQUENCE { + quantityConfigEUTRA QuantityConfigEUTRA OPTIONAL, -- Need ON + quantityConfigUTRA QuantityConfigUTRA OPTIONAL, -- Need ON + quantityConfigGERAN QuantityConfigGERAN OPTIONAL, -- Need ON + quantityConfigCDMA2000 QuantityConfigCDMA2000 OPTIONAL, -- Need ON + ..., + [[ quantityConfigUTRA-v1020 QuantityConfigUTRA-v1020 OPTIONAL -- Need ON + ]] +} + +QuantityConfigEUTRA ::= SEQUENCE { + filterCoefficientRSRP FilterCoefficient DEFAULT fc4, + filterCoefficientRSRQ FilterCoefficient DEFAULT fc4 +} + +QuantityConfigUTRA ::= SEQUENCE { + measQuantityUTRA-FDD ENUMERATED {cpich-RSCP, cpich-EcN0}, + measQuantityUTRA-TDD ENUMERATED {pccpch-RSCP}, + filterCoefficient FilterCoefficient DEFAULT fc4 +} + +QuantityConfigUTRA-v1020 ::= SEQUENCE { + filterCoefficient2-FDD-r10 FilterCoefficient DEFAULT fc4 +} + +QuantityConfigGERAN ::= SEQUENCE { + measQuantityGERAN ENUMERATED {rssi}, + filterCoefficient FilterCoefficient DEFAULT fc2 +} + +QuantityConfigCDMA2000 ::= SEQUENCE { + measQuantityCDMA2000 ENUMERATED {pilotStrength, pilotPnPhaseAndPilotStrength} +} + + +ReportConfigEUTRA ::= SEQUENCE { + triggerType CHOICE { + event SEQUENCE { + eventId CHOICE { + eventA1 SEQUENCE { + a1-Threshold ThresholdEUTRA + }, + eventA2 SEQUENCE { + a2-Threshold ThresholdEUTRA + }, + eventA3 SEQUENCE { + a3-Offset INTEGER (-30..30), + reportOnLeave BOOLEAN + }, + eventA4 SEQUENCE { + a4-Threshold ThresholdEUTRA + }, + eventA5 SEQUENCE { + a5-Threshold1 ThresholdEUTRA, + a5-Threshold2 ThresholdEUTRA + }, + ..., + eventA6-r10 SEQUENCE { + a6-Offset-r10 INTEGER (-30..30), + a6-ReportOnLeave-r10 BOOLEAN + } + }, + hysteresis Hysteresis, + timeToTrigger TimeToTrigger + }, + periodical SEQUENCE { + purpose ENUMERATED { + reportStrongestCells, reportCGI} + } + }, + triggerQuantity ENUMERATED {rsrp, rsrq}, + reportQuantity ENUMERATED {sameAsTriggerQuantity, both}, + maxReportCells INTEGER (1..maxCellReport), + reportInterval ReportInterval, + reportAmount ENUMERATED {r1, r2, r4, r8, r16, r32, r64, infinity}, + ..., + [[ si-RequestForHO-r9 ENUMERATED {setup} OPTIONAL, -- Cond reportCGI + ue-RxTxTimeDiffPeriodical-r9 ENUMERATED {setup} OPTIONAL -- Need OR + ]], + [[ includeLocationInfo-r10 ENUMERATED {true} OPTIONAL, -- Cond reportMDT + reportAddNeighMeas-r10 ENUMERATED {setup} OPTIONAL -- Need OR + ]] +} + +ThresholdEUTRA ::= CHOICE{ + threshold-RSRP RSRP-Range, + threshold-RSRQ RSRQ-Range +} + + +ReportConfigId ::= INTEGER (1..maxReportConfigId) + + +ReportConfigInterRAT ::= SEQUENCE { + triggerType CHOICE { + event SEQUENCE { + eventId CHOICE { + eventB1 SEQUENCE { + b1-Threshold CHOICE { + b1-ThresholdUTRA ThresholdUTRA, + b1-ThresholdGERAN ThresholdGERAN, + b1-ThresholdCDMA2000 ThresholdCDMA2000 + } + }, + eventB2 SEQUENCE { + b2-Threshold1 ThresholdEUTRA, + b2-Threshold2 CHOICE { + b2-Threshold2UTRA ThresholdUTRA, + b2-Threshold2GERAN ThresholdGERAN, + b2-Threshold2CDMA2000 ThresholdCDMA2000 + } + }, + ... + }, + hysteresis Hysteresis, + timeToTrigger TimeToTrigger + }, + periodical SEQUENCE { + purpose ENUMERATED { + reportStrongestCells, + reportStrongestCellsForSON, + reportCGI} + } + }, + maxReportCells INTEGER (1..maxCellReport), + reportInterval ReportInterval, + reportAmount ENUMERATED {r1, r2, r4, r8, r16, r32, r64, infinity}, + ..., + [[ si-RequestForHO-r9 ENUMERATED {setup} OPTIONAL -- Cond reportCGI + ]], + [[ reportQuantityUTRA-FDD-r10 ENUMERATED {both} OPTIONAL -- Need OR + ]] +} + +ThresholdUTRA ::= CHOICE{ + utra-RSCP INTEGER (-5..91), + utra-EcN0 INTEGER (0..49) +} + +ThresholdGERAN ::= INTEGER (0..63) + +ThresholdCDMA2000 ::= INTEGER (0..63) + + +ReportConfigToAddModList ::= SEQUENCE (SIZE (1..maxReportConfigId)) OF ReportConfigToAddMod + +ReportConfigToAddMod ::= SEQUENCE { + reportConfigId ReportConfigId, + reportConfig CHOICE { + reportConfigEUTRA ReportConfigEUTRA, + reportConfigInterRAT ReportConfigInterRAT + } +} + + + +ReportInterval ::= ENUMERATED { + ms120, ms240, ms480, ms640, ms1024, ms2048, ms5120, ms10240, + min1, min6, min12, min30, min60, spare3, spare2, spare1} + + +RSRP-Range ::= INTEGER(0..97) + + +RSRQ-Range ::= INTEGER(0..34) + + +TimeToTrigger ::= ENUMERATED { + ms0, ms40, ms64, ms80, ms100, ms128, ms160, ms256, + ms320, ms480, ms512, ms640, ms1024, ms1280, ms2560, + ms5120} + + +AbsoluteTimeInfo-r10 ::= BIT STRING (SIZE (48)) + + +AreaConfiguration-r10 ::= CHOICE { + cellGlobalIdList-r10 CellGlobalIdList-r10, + trackingAreaCodeList-r10 TrackingAreaCodeList-r10 +} + +CellGlobalIdList-r10 ::= SEQUENCE (SIZE (1..32)) OF CellGlobalIdEUTRA + +TrackingAreaCodeList-r10 ::= SEQUENCE (SIZE (1..8)) OF TrackingAreaCode + + +C-RNTI ::= BIT STRING (SIZE (16)) + + +DedicatedInfoCDMA2000 ::= OCTET STRING + + +DedicatedInfoNAS ::= OCTET STRING + + +FilterCoefficient ::= ENUMERATED { + fc0, fc1, fc2, fc3, fc4, fc5, + fc6, fc7, fc8, fc9, fc11, fc13, + fc15, fc17, fc19, spare1, ...} + + +LoggingDuration-r10 ::= ENUMERATED { + min10, min20, min40, min60, min90, min120, spare2, spare1} + + +LoggingInterval-r10 ::= ENUMERATED { + ms1280, ms2560, ms5120, ms10240, ms20480, + ms30720, ms40960, ms61440} + + +MeasSubframePattern-r10 ::= CHOICE { + subframePatternFDD-r10 BIT STRING (SIZE (40)), + subframePatternTDD-r10 CHOICE { + subframeConfig1-5-r10 BIT STRING (SIZE (20)), + subframeConfig0-r10 BIT STRING (SIZE (70)), + subframeConfig6-r10 BIT STRING (SIZE (60)), + ... + }, + ... +} + + +MMEC ::= BIT STRING (SIZE (8)) + + +NeighCellConfig ::= BIT STRING (SIZE (2)) + + +OtherConfig-r9 ::= SEQUENCE { + reportProximityConfig-r9 ReportProximityConfig-r9 OPTIONAL, -- Need ON + ... +} + +ReportProximityConfig-r9 ::= SEQUENCE { + proximityIndicationEUTRA-r9 ENUMERATED {enabled} OPTIONAL, -- Need OR + proximityIndicationUTRA-r9 ENUMERATED {enabled} OPTIONAL -- Need OR +} + + +RAND-CDMA2000 ::= BIT STRING (SIZE (32)) + + +RAT-Type ::= ENUMERATED { + eutra, utra, geran-cs, geran-ps, cdma2000-1XRTT, + spare3, spare2, spare1, ...} + + +RRC-TransactionIdentifier ::= INTEGER (0..3) + + +S-TMSI ::= SEQUENCE { + mmec MMEC, + m-TMSI BIT STRING (SIZE (32)) +} + + +TraceReference-r10 ::= SEQUENCE { + plmn-Identity-r10 PLMN-Identity, + traceId-r10 OCTET STRING (SIZE (3)) +} + + +UE-CapabilityRAT-ContainerList ::=SEQUENCE (SIZE (0..maxRAT-Capabilities)) OF UE-CapabilityRAT-Container + +UE-CapabilityRAT-Container ::= SEQUENCE { + rat-Type RAT-Type, + ueCapabilityRAT-Container OCTET STRING +} + + +UE-EUTRA-Capability ::= SEQUENCE { + accessStratumRelease AccessStratumRelease, + ue-Category INTEGER (1..5), + pdcp-Parameters PDCP-Parameters, + phyLayerParameters PhyLayerParameters, + rf-Parameters RF-Parameters, + measParameters MeasParameters, + featureGroupIndicators BIT STRING (SIZE (32)) OPTIONAL, + interRAT-Parameters SEQUENCE { + utraFDD IRAT-ParametersUTRA-FDD OPTIONAL, + utraTDD128 IRAT-ParametersUTRA-TDD128 OPTIONAL, + utraTDD384 IRAT-ParametersUTRA-TDD384 OPTIONAL, + utraTDD768 IRAT-ParametersUTRA-TDD768 OPTIONAL, + geran IRAT-ParametersGERAN OPTIONAL, + cdma2000-HRPD IRAT-ParametersCDMA2000-HRPD OPTIONAL, + cdma2000-1xRTT IRAT-ParametersCDMA2000-1XRTT OPTIONAL + }, + nonCriticalExtension UE-EUTRA-Capability-v920-IEs OPTIONAL +} + +UE-EUTRA-Capability-v920-IEs ::= SEQUENCE { + phyLayerParameters-v920 PhyLayerParameters-v920, + interRAT-ParametersGERAN-v920 IRAT-ParametersGERAN-v920, + interRAT-ParametersUTRA-v920 IRAT-ParametersUTRA-v920 OPTIONAL, + interRAT-ParametersCDMA2000-v920 IRAT-ParametersCDMA2000-1XRTT-v920 OPTIONAL, + deviceType-r9 ENUMERATED {noBenFromBatConsumpOpt} OPTIONAL, + csg-ProximityIndicationParameters-r9 CSG-ProximityIndicationParameters-r9, + neighCellSI-AcquisitionParameters-r9 NeighCellSI-AcquisitionParameters-r9, + son-Parameters-r9 SON-Parameters-r9, + nonCriticalExtension UE-EUTRA-Capability-v940-IEs OPTIONAL +} + +UE-EUTRA-Capability-v940-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING (CONTAINING UE-EUTRA-Capability-v9a0-IEs) + OPTIONAL, + nonCriticalExtension UE-EUTRA-Capability-v1020-IEs OPTIONAL +} + +UE-EUTRA-Capability-v9a0-IEs ::= SEQUENCE { + featureGroupIndRel9Add-r9 BIT STRING (SIZE (32)) OPTIONAL, + fdd-Add-UE-EUTRA-Capabilities-r9 UE-EUTRA-CapabilityAddXDD-Mode-r9 OPTIONAL, + tdd-Add-UE-EUTRA-Capabilities-r9 UE-EUTRA-CapabilityAddXDD-Mode-r9 OPTIONAL, + nonCriticalExtension UE-EUTRA-Capability-v9c0-IEs OPTIONAL +} + +UE-EUTRA-Capability-v9c0-IEs ::= SEQUENCE { + interRAT-ParametersUTRA-v9c0 IRAT-ParametersUTRA-v9c0 OPTIONAL, + nonCriticalExtension UE-EUTRA-Capability-v9d0-IEs OPTIONAL +} + +UE-EUTRA-Capability-v9d0-IEs ::= SEQUENCE { + phyLayerParameters-v9d0 PhyLayerParameters-v9d0 OPTIONAL, + nonCriticalExtension UE-EUTRA-Capability-v9e0-IEs OPTIONAL +} + +UE-EUTRA-Capability-v9e0-IEs ::= SEQUENCE { + rf-Parameters-v9e0 RF-Parameters-v9e0 OPTIONAL, + nonCriticalExtension UE-EUTRA-Capability-v9h0-IEs OPTIONAL +} + +UE-EUTRA-Capability-v9h0-IEs ::= SEQUENCE { + interRAT-ParametersUTRA-v9h0 IRAT-ParametersUTRA-v9h0 OPTIONAL, + -- Following field is only to be used for late REL-9 extensions + lateNonCriticalExtension OCTET STRING OPTIONAL, + nonCriticalExtension UE-EUTRA-Capability-v10c0-IEs OPTIONAL +} + +UE-EUTRA-Capability-v10c0-IEs ::= SEQUENCE { + otdoa-PositioningCapabilities-r10 OTDOA-PositioningCapabilities-r10 OPTIONAL, + nonCriticalExtension UE-EUTRA-Capability-v10f0-IEs OPTIONAL +} + +UE-EUTRA-Capability-v10f0-IEs ::= SEQUENCE { + rf-Parameters-v10f0 RF-Parameters-v10f0 OPTIONAL, + -- Following field is only to be used for late REL-10 extensions + nonCriticalExtension SEQUENCE {} OPTIONAL +} + +UE-EUTRA-Capability-v1020-IEs ::= SEQUENCE { + ue-Category-v1020 INTEGER (6..8) OPTIONAL, + phyLayerParameters-v1020 PhyLayerParameters-v1020 OPTIONAL, + rf-Parameters-v1020 RF-Parameters-v1020 OPTIONAL, + measParameters-v1020 MeasParameters-v1020 OPTIONAL, + featureGroupIndRel10-r10 BIT STRING (SIZE (32)) OPTIONAL, + interRAT-ParametersCDMA2000-v1020 IRAT-ParametersCDMA2000-1XRTT-v1020 OPTIONAL, + ue-BasedNetwPerfMeasParameters-r10 UE-BasedNetwPerfMeasParameters-r10 OPTIONAL, + interRAT-ParametersUTRA-TDD-v1020 IRAT-ParametersUTRA-TDD-v1020 OPTIONAL, + nonCriticalExtension UE-EUTRA-Capability-v1060-IEs OPTIONAL +} + +UE-EUTRA-Capability-v1060-IEs ::= SEQUENCE { + fdd-Add-UE-EUTRA-Capabilities-v1060 UE-EUTRA-CapabilityAddXDD-Mode-v1060 OPTIONAL, + tdd-Add-UE-EUTRA-Capabilities-v1060 UE-EUTRA-CapabilityAddXDD-Mode-v1060 OPTIONAL, + rf-Parameters-v1060 RF-Parameters-v1060 OPTIONAL, + nonCriticalExtension UE-EUTRA-Capability-v1090-IEs OPTIONAL +} + +UE-EUTRA-Capability-v1090-IEs ::= SEQUENCE { + rf-Parameters-v1090 RF-Parameters-v1090 OPTIONAL, + nonCriticalExtension SEQUENCE {} OPTIONAL +} + +UE-EUTRA-CapabilityAddXDD-Mode-r9 ::= SEQUENCE { + phyLayerParameters-r9 PhyLayerParameters OPTIONAL, + featureGroupIndicators-r9 BIT STRING (SIZE (32)) OPTIONAL, + featureGroupIndRel9Add-r9 BIT STRING (SIZE (32)) OPTIONAL, + interRAT-ParametersGERAN-r9 IRAT-ParametersGERAN OPTIONAL, + interRAT-ParametersUTRA-r9 IRAT-ParametersUTRA-v920 OPTIONAL, + interRAT-ParametersCDMA2000-r9 IRAT-ParametersCDMA2000-1XRTT-v920 OPTIONAL, + neighCellSI-AcquisitionParameters-r9 NeighCellSI-AcquisitionParameters-r9 OPTIONAL, + ... +} + +UE-EUTRA-CapabilityAddXDD-Mode-v1060 ::= SEQUENCE { + phyLayerParameters-v1060 PhyLayerParameters-v1020 OPTIONAL, + featureGroupIndRel10-v1060 BIT STRING (SIZE (32)) OPTIONAL, + interRAT-ParametersCDMA2000-v1060 IRAT-ParametersCDMA2000-1XRTT-v1020 OPTIONAL, + interRAT-ParametersUTRA-TDD-v1060 IRAT-ParametersUTRA-TDD-v1020 OPTIONAL, + ..., + [[ otdoa-PositioningCapabilities-r10 OTDOA-PositioningCapabilities-r10 OPTIONAL + ]] +} + +AccessStratumRelease ::= ENUMERATED { + rel8, rel9, rel10, spare5, spare4, spare3, + spare2, spare1, ...} + +PDCP-Parameters ::= SEQUENCE { + supportedROHC-Profiles SEQUENCE { + profile0x0001 BOOLEAN, + profile0x0002 BOOLEAN, + profile0x0003 BOOLEAN, + profile0x0004 BOOLEAN, + profile0x0006 BOOLEAN, + profile0x0101 BOOLEAN, + profile0x0102 BOOLEAN, + profile0x0103 BOOLEAN, + profile0x0104 BOOLEAN + }, + maxNumberROHC-ContextSessions ENUMERATED { + cs2, cs4, cs8, cs12, cs16, cs24, cs32, + cs48, cs64, cs128, cs256, cs512, cs1024, + cs16384, spare2, spare1} DEFAULT cs16, + ... +} + +PhyLayerParameters ::= SEQUENCE { + ue-TxAntennaSelectionSupported BOOLEAN, + ue-SpecificRefSigsSupported BOOLEAN +} + +PhyLayerParameters-v920 ::= SEQUENCE { + enhancedDualLayerFDD-r9 ENUMERATED {supported} OPTIONAL, + enhancedDualLayerTDD-r9 ENUMERATED {supported} OPTIONAL +} + +PhyLayerParameters-v9d0 ::= SEQUENCE { + tm5-FDD-r9 ENUMERATED {supported} OPTIONAL, + tm5-TDD-r9 ENUMERATED {supported} OPTIONAL +} + +PhyLayerParameters-v1020 ::= SEQUENCE { + twoAntennaPortsForPUCCH-r10 ENUMERATED {supported} OPTIONAL, + tm9-With-8Tx-FDD-r10 ENUMERATED {supported} OPTIONAL, + pmi-Disabling-r10 ENUMERATED {supported} OPTIONAL, + crossCarrierScheduling-r10 ENUMERATED {supported} OPTIONAL, + simultaneousPUCCH-PUSCH-r10 ENUMERATED {supported} OPTIONAL, + multiClusterPUSCH-WithinCC-r10 ENUMERATED {supported} OPTIONAL, + nonContiguousUL-RA-WithinCC-List-r10 NonContiguousUL-RA-WithinCC-List-r10 OPTIONAL +} + +NonContiguousUL-RA-WithinCC-List-r10 ::= SEQUENCE (SIZE (1..maxBands)) OF NonContiguousUL-RA-WithinCC-r10 + +NonContiguousUL-RA-WithinCC-r10 ::= SEQUENCE { + nonContiguousUL-RA-WithinCC-Info-r10 ENUMERATED {supported} OPTIONAL +} + +RF-Parameters ::= SEQUENCE { + supportedBandListEUTRA SupportedBandListEUTRA +} + +RF-Parameters-v9e0 ::= SEQUENCE { + supportedBandListEUTRA-v9e0 SupportedBandListEUTRA-v9e0 OPTIONAL +} + +RF-Parameters-v1020 ::= SEQUENCE { + supportedBandCombination-r10 SupportedBandCombination-r10 +} + +RF-Parameters-v1060 ::= SEQUENCE { + supportedBandCombinationExt-r10 SupportedBandCombinationExt-r10 +} + +RF-Parameters-v1090 ::= SEQUENCE { + supportedBandCombination-v1090 SupportedBandCombination-v1090 OPTIONAL +} + +RF-Parameters-v10f0 ::= SEQUENCE { + modifiedMPR-Behavior-r10 BIT STRING (SIZE (32)) OPTIONAL +} + +SupportedBandCombination-r10 ::= SEQUENCE (SIZE (1..maxBandComb-r10)) OF BandCombinationParameters-r10 + +SupportedBandCombinationExt-r10 ::= SEQUENCE (SIZE (1..maxBandComb-r10)) OF BandCombinationParametersExt-r10 + +SupportedBandCombination-v1090 ::= SEQUENCE (SIZE (1..maxBandComb-r10)) OF BandCombinationParameters-v1090 + +BandCombinationParameters-r10 ::= SEQUENCE (SIZE (1..maxSimultaneousBands-r10)) OF BandParameters-r10 + +BandCombinationParametersExt-r10 ::= SEQUENCE { + supportedBandwidthCombinationSet-r10 SupportedBandwidthCombinationSet-r10 OPTIONAL +} + +BandCombinationParameters-v1090 ::= SEQUENCE (SIZE (1..maxSimultaneousBands-r10)) OF BandParameters-v1090 + +SupportedBandwidthCombinationSet-r10 ::= BIT STRING (SIZE (1..maxBandwidthCombSet-r10)) + +BandParameters-r10 ::= SEQUENCE { + bandEUTRA-r10 INTEGER (1..64), + bandParametersUL-r10 BandParametersUL-r10 OPTIONAL, + bandParametersDL-r10 BandParametersDL-r10 OPTIONAL +} + +BandParameters-v1090 ::= SEQUENCE { + bandEUTRA-v1090 FreqBandIndicator-v9e0 OPTIONAL, + ... +} + +BandParametersUL-r10 ::= SEQUENCE (SIZE (1..maxBandwidthClass-r10)) OF CA-MIMO-ParametersUL-r10 + +CA-MIMO-ParametersUL-r10 ::= SEQUENCE { + ca-BandwidthClassUL-r10 CA-BandwidthClass-r10, + supportedMIMO-CapabilityUL-r10 MIMO-CapabilityUL-r10 OPTIONAL +} + +BandParametersDL-r10 ::= SEQUENCE (SIZE (1..maxBandwidthClass-r10)) OF CA-MIMO-ParametersDL-r10 + +CA-MIMO-ParametersDL-r10 ::= SEQUENCE { + ca-BandwidthClassDL-r10 CA-BandwidthClass-r10, + supportedMIMO-CapabilityDL-r10 MIMO-CapabilityDL-r10 OPTIONAL +} + +CA-BandwidthClass-r10 ::= ENUMERATED {a, b, c, d, e, f, ...} + +MIMO-CapabilityUL-r10 ::= ENUMERATED {twoLayers, fourLayers} + +MIMO-CapabilityDL-r10 ::= ENUMERATED {twoLayers, fourLayers, eightLayers} + +SupportedBandListEUTRA ::= SEQUENCE (SIZE (1..maxBands)) OF SupportedBandEUTRA + +SupportedBandListEUTRA-v9e0::= SEQUENCE (SIZE (1..maxBands)) OF SupportedBandEUTRA-v9e0 + +SupportedBandEUTRA ::= SEQUENCE { + bandEUTRA INTEGER (1..64), + halfDuplex BOOLEAN +} + +SupportedBandEUTRA-v9e0 ::= SEQUENCE { + bandEUTRA-v9e0 FreqBandIndicator-v9e0 OPTIONAL +} + +MeasParameters ::= SEQUENCE { + bandListEUTRA BandListEUTRA +} + +MeasParameters-v1020 ::= SEQUENCE { + bandCombinationListEUTRA-r10 BandCombinationListEUTRA-r10 +} + +BandListEUTRA ::= SEQUENCE (SIZE (1..maxBands)) OF BandInfoEUTRA + +BandCombinationListEUTRA-r10 ::= SEQUENCE (SIZE (1..maxBandComb-r10)) OF BandInfoEUTRA + +BandInfoEUTRA ::= SEQUENCE { + interFreqBandList InterFreqBandList, + interRAT-BandList InterRAT-BandList OPTIONAL +} + +InterFreqBandList ::= SEQUENCE (SIZE (1..maxBands)) OF InterFreqBandInfo + +InterFreqBandInfo ::= SEQUENCE { + interFreqNeedForGaps BOOLEAN +} + +InterRAT-BandList ::= SEQUENCE (SIZE (1..maxBands)) OF InterRAT-BandInfo + +InterRAT-BandInfo ::= SEQUENCE { + interRAT-NeedForGaps BOOLEAN +} + +IRAT-ParametersUTRA-FDD ::= SEQUENCE { + supportedBandListUTRA-FDD SupportedBandListUTRA-FDD +} + +IRAT-ParametersUTRA-v920 ::= SEQUENCE { + e-RedirectionUTRA-r9 ENUMERATED {supported} +} + +IRAT-ParametersUTRA-v9c0 ::= SEQUENCE { + voiceOverPS-HS-UTRA-FDD-r9 ENUMERATED {supported} OPTIONAL, + voiceOverPS-HS-UTRA-TDD128-r9 ENUMERATED {supported} OPTIONAL, + srvcc-FromUTRA-FDD-ToUTRA-FDD-r9 ENUMERATED {supported} OPTIONAL, + srvcc-FromUTRA-FDD-ToGERAN-r9 ENUMERATED {supported} OPTIONAL, + srvcc-FromUTRA-TDD128-ToUTRA-TDD128-r9 ENUMERATED {supported} OPTIONAL, + srvcc-FromUTRA-TDD128-ToGERAN-r9 ENUMERATED {supported} OPTIONAL +} + +IRAT-ParametersUTRA-v9h0 ::= SEQUENCE { + mfbi-UTRA-r9 ENUMERATED {supported} +} + +SupportedBandListUTRA-FDD ::= SEQUENCE (SIZE (1..maxBands)) OF SupportedBandUTRA-FDD + +SupportedBandUTRA-FDD ::= ENUMERATED { + bandI, bandII, bandIII, bandIV, bandV, bandVI, + bandVII, bandVIII, bandIX, bandX, bandXI, + bandXII, bandXIII, bandXIV, bandXV, bandXVI, ..., + bandXVII-8a0, bandXVIII-8a0, bandXIX-8a0, bandXX-8a0, + bandXXI-8a0, bandXXII-8a0, bandXXIII-8a0, bandXXIV-8a0, + bandXXV-8a0, bandXXVI-8a0, bandXXVII-8a0, bandXXVIII-8a0, + bandXXIX-8a0, bandXXX-8a0, bandXXXI-8a0, bandXXXII-8a0} + +IRAT-ParametersUTRA-TDD128 ::= SEQUENCE { + supportedBandListUTRA-TDD128 SupportedBandListUTRA-TDD128 +} + +SupportedBandListUTRA-TDD128 ::= SEQUENCE (SIZE (1..maxBands)) OF SupportedBandUTRA-TDD128 + +SupportedBandUTRA-TDD128 ::= ENUMERATED { + a, b, c, d, e, f, g, h, i, j, k, l, m, n, + o, p, ...} + +IRAT-ParametersUTRA-TDD384 ::= SEQUENCE { + supportedBandListUTRA-TDD384 SupportedBandListUTRA-TDD384 +} + +SupportedBandListUTRA-TDD384 ::= SEQUENCE (SIZE (1..maxBands)) OF SupportedBandUTRA-TDD384 + +SupportedBandUTRA-TDD384 ::= ENUMERATED { + a, b, c, d, e, f, g, h, i, j, k, l, m, n, + o, p, ...} + +IRAT-ParametersUTRA-TDD768 ::= SEQUENCE { + supportedBandListUTRA-TDD768 SupportedBandListUTRA-TDD768 +} + +SupportedBandListUTRA-TDD768 ::= SEQUENCE (SIZE (1..maxBands)) OF SupportedBandUTRA-TDD768 + +SupportedBandUTRA-TDD768 ::= ENUMERATED { + a, b, c, d, e, f, g, h, i, j, k, l, m, n, + o, p, ...} + +IRAT-ParametersUTRA-TDD-v1020 ::= SEQUENCE { + e-RedirectionUTRA-TDD-r10 ENUMERATED {supported} +} + +IRAT-ParametersGERAN ::= SEQUENCE { + supportedBandListGERAN SupportedBandListGERAN, + interRAT-PS-HO-ToGERAN BOOLEAN +} + +IRAT-ParametersGERAN-v920 ::= SEQUENCE { + dtm-r9 ENUMERATED {supported} OPTIONAL, + e-RedirectionGERAN-r9 ENUMERATED {supported} OPTIONAL +} + +SupportedBandListGERAN ::= SEQUENCE (SIZE (1..maxBands)) OF SupportedBandGERAN + +SupportedBandGERAN ::= ENUMERATED { + gsm450, gsm480, gsm710, gsm750, gsm810, gsm850, + gsm900P, gsm900E, gsm900R, gsm1800, gsm1900, + spare5, spare4, spare3, spare2, spare1, ...} + +IRAT-ParametersCDMA2000-HRPD ::= SEQUENCE { + supportedBandListHRPD SupportedBandListHRPD, + tx-ConfigHRPD ENUMERATED {single, dual}, + rx-ConfigHRPD ENUMERATED {single, dual} +} + +SupportedBandListHRPD ::= SEQUENCE (SIZE (1..maxCDMA-BandClass)) OF BandclassCDMA2000 + +IRAT-ParametersCDMA2000-1XRTT ::= SEQUENCE { + supportedBandList1XRTT SupportedBandList1XRTT, + tx-Config1XRTT ENUMERATED {single, dual}, + rx-Config1XRTT ENUMERATED {single, dual} +} + +IRAT-ParametersCDMA2000-1XRTT-v920 ::= SEQUENCE { + e-CSFB-1XRTT-r9 ENUMERATED {supported}, + e-CSFB-ConcPS-Mob1XRTT-r9 ENUMERATED {supported} OPTIONAL +} + +IRAT-ParametersCDMA2000-1XRTT-v1020 ::= SEQUENCE { + e-CSFB-dual-1XRTT-r10 ENUMERATED {supported} +} + +SupportedBandList1XRTT ::= SEQUENCE (SIZE (1..maxCDMA-BandClass)) OF BandclassCDMA2000 + +CSG-ProximityIndicationParameters-r9 ::= SEQUENCE { + intraFreqProximityIndication-r9 ENUMERATED {supported} OPTIONAL, + interFreqProximityIndication-r9 ENUMERATED {supported} OPTIONAL, + utran-ProximityIndication-r9 ENUMERATED {supported} OPTIONAL +} + +NeighCellSI-AcquisitionParameters-r9 ::= SEQUENCE { + intraFreqSI-AcquisitionForHO-r9 ENUMERATED {supported} OPTIONAL, + interFreqSI-AcquisitionForHO-r9 ENUMERATED {supported} OPTIONAL, + utran-SI-AcquisitionForHO-r9 ENUMERATED {supported} OPTIONAL +} + +SON-Parameters-r9 ::= SEQUENCE { + rach-Report-r9 ENUMERATED {supported} OPTIONAL +} + +UE-BasedNetwPerfMeasParameters-r10 ::= SEQUENCE { + loggedMeasurementsIdle-r10 ENUMERATED {supported} OPTIONAL, + standaloneGNSS-Location-r10 ENUMERATED {supported} OPTIONAL +} + +OTDOA-PositioningCapabilities-r10 ::= SEQUENCE { + otdoa-UE-Assisted-r10 ENUMERATED {supported}, + interFreqRSTD-Measurement-r10 ENUMERATED {supported} OPTIONAL +} + + +UE-TimersAndConstants ::= SEQUENCE { + t300 ENUMERATED { + ms100, ms200, ms300, ms400, ms600, ms1000, ms1500, + ms2000}, + t301 ENUMERATED { + ms100, ms200, ms300, ms400, ms600, ms1000, ms1500, + ms2000}, + t310 ENUMERATED { + ms0, ms50, ms100, ms200, ms500, ms1000, ms2000}, + n310 ENUMERATED { + n1, n2, n3, n4, n6, n8, n10, n20}, + t311 ENUMERATED { + ms1000, ms3000, ms5000, ms10000, ms15000, + ms20000, ms30000}, + n311 ENUMERATED { + n1, n2, n3, n4, n5, n6, n8, n10}, + ... +} + + +MBMS-NotificationConfig-r9 ::= SEQUENCE { + notificationRepetitionCoeff-r9 ENUMERATED {n2, n4}, + notificationOffset-r9 INTEGER (0..10), + notificationSF-Index-r9 INTEGER (1..6) +} + + +MBSFN-AreaInfoList-r9 ::= SEQUENCE (SIZE(1..maxMBSFN-Area)) OF MBSFN-AreaInfo-r9 + +MBSFN-AreaInfo-r9 ::= SEQUENCE { + mbsfn-AreaId-r9 INTEGER (0..255), + non-MBSFNregionLength ENUMERATED {s1, s2}, + notificationIndicator-r9 INTEGER (0..7), + mcch-Config-r9 SEQUENCE { + mcch-RepetitionPeriod-r9 ENUMERATED {rf32, rf64, rf128, rf256}, + mcch-Offset-r9 INTEGER (0..10), + mcch-ModificationPeriod-r9 ENUMERATED {rf512, rf1024}, + sf-AllocInfo-r9 BIT STRING (SIZE(6)), + signallingMCS-r9 ENUMERATED {n2, n7, n13, n19} + }, + ... +} + + +MBSFN-SubframeConfig ::= SEQUENCE { + radioframeAllocationPeriod ENUMERATED {n1, n2, n4, n8, n16, n32}, + radioframeAllocationOffset INTEGER (0..7), + subframeAllocation CHOICE { + oneFrame BIT STRING (SIZE(6)), + fourFrames BIT STRING (SIZE(24)) + } +} + +PMCH-InfoList-r9 ::= SEQUENCE (SIZE (0..maxPMCH-PerMBSFN)) OF PMCH-Info-r9 + +PMCH-Info-r9 ::= SEQUENCE { + pmch-Config-r9 PMCH-Config-r9, + mbms-SessionInfoList-r9 MBMS-SessionInfoList-r9, + ... +} + +MBMS-SessionInfoList-r9 ::= SEQUENCE (SIZE (0..maxSessionPerPMCH)) OF MBMS-SessionInfo-r9 + +MBMS-SessionInfo-r9 ::= SEQUENCE { + tmgi-r9 TMGI-r9, + sessionId-r9 OCTET STRING (SIZE (1)) OPTIONAL, -- Need OR + logicalChannelIdentity-r9 INTEGER (0..maxSessionPerPMCH-1), + ... +} + +PMCH-Config-r9 ::= SEQUENCE { + sf-AllocEnd-r9 INTEGER (0..1535), + dataMCS-r9 INTEGER (0..28), + mch-SchedulingPeriod-r9 ENUMERATED { + rf8, rf16, rf32, rf64, rf128, rf256, rf512, rf1024}, + ... +} + +TMGI-r9 ::= SEQUENCE { + plmn-Id-r9 CHOICE { + plmn-Index-r9 INTEGER (1..6), + explicitValue-r9 PLMN-Identity + }, + serviceId-r9 OCTET STRING (SIZE (3)) +} + + +maxBandComb-r10 INTEGER ::= 128 -- Maximum number of band combinations. +maxBands INTEGER ::= 64 -- Maximum number of bands listed in EUTRA UE caps +maxBandwidthClass-r10 INTEGER ::= 16 -- Maximum number of supported CA BW classes per band +maxBandwidthCombSet-r10 INTEGER ::= 32 -- Maximum number of bandwidth combination sets per + -- supported band combination +maxCDMA-BandClass INTEGER ::= 32 -- Maximum value of the CDMA band classes +maxCellBlack INTEGER ::= 16 -- Maximum number of blacklisted physical cell identity + -- ranges listed in SIB type 4 and 5 +maxCellInfoGERAN-r9 INTEGER ::= 32 -- Maximum number of GERAN cells for which system in- + -- formation can be provided as redirection assistance +maxCellInfoUTRA-r9 INTEGER ::= 16 -- Maximum number of UTRA cells for which system + -- information can be provided as redirection + -- assistance +maxFreqUTRA-TDD-r10 INTEGER ::= 6 -- Maximum number of UTRA TDD carrier frequencies for + -- which system information can be provided as + -- redirection assistance +maxCellInter INTEGER ::= 16 -- Maximum number of neighbouring inter-frequency + -- cells listed in SIB type 5 +maxCellIntra INTEGER ::= 16 -- Maximum number of neighbouring intra-frequency + -- cells listed in SIB type 4 +maxCellListGERAN INTEGER ::= 3 -- Maximum number of lists of GERAN cells +maxCellMeas INTEGER ::= 32 -- Maximum number of entries in each of the + -- cell lists in a measurement object +maxCellReport INTEGER ::= 8 -- Maximum number of reported cells +maxDRB INTEGER ::= 11 -- Maximum number of Data Radio Bearers +maxEARFCN INTEGER ::= 65535 -- Maximum value of EUTRA carrier frequency +maxEARFCN-Plus1 INTEGER ::= 65536 -- Lowest value extended EARFCN range +maxEARFCN2 INTEGER ::= 262143 -- Highest value extended EARFCN range +maxFBI INTEGER ::= 64 -- Maximum value of fequency band indicator +maxFBI-Plus1 INTEGER ::= 65 -- Lowest value extended FBI range +maxFBI2 INTEGER ::= 256 -- Highest value extended FBI range +maxFreq INTEGER ::= 8 -- Maximum number of carrier frequencies +maxGERAN-SI INTEGER ::= 10 -- Maximum number of GERAN SI blocks that can be + -- provided as part of NACC information +maxGNFG INTEGER ::= 16 -- Maximum number of GERAN neighbour freq groups +maxLogMeasReport-r10 INTEGER ::= 520 -- Maximum number of logged measurement entries + -- that can be reported by the UE in one message +maxMBSFN-Allocations INTEGER ::= 8 -- Maximum number of MBSFN frame allocations with + -- different offset +maxMBSFN-Area INTEGER ::= 8 +maxMBSFN-Area-1 INTEGER ::= 7 +maxMeasId INTEGER ::= 32 +maxMultiBands INTEGER ::= 8 -- Maximum number of additional frequency bands + -- that a cell belongs to +maxObjectId INTEGER ::= 32 +maxPageRec INTEGER ::= 16 -- +maxPhysCellIdRange-r9 INTEGER ::= 4 -- Maximum number of physical cell identity ranges +maxPNOffset INTEGER ::= 511 -- Maximum number of CDMA2000 PNOffsets +maxPMCH-PerMBSFN INTEGER ::= 15 +maxRAT-Capabilities INTEGER ::= 8 -- Maximum number of interworking RATs (incl EUTRA) +maxReportConfigId INTEGER ::= 32 +maxRSTD-Freq-r10 INTEGER ::= 3 -- Maximum number of frequency layers for RSTD + -- measurement +maxSCell-r10 INTEGER ::= 4 -- Maximum number of SCells +maxServCell-r10 INTEGER ::= 5 -- Maximum number of Serving cells +maxServiceCount INTEGER ::= 16 -- Maximum number of MBMS services that can be included + -- in an MBMS counting request and response +maxServiceCount-1 INTEGER ::= 15 +maxSessionPerPMCH INTEGER ::= 29 +maxSessionPerPMCH-1 INTEGER ::= 28 +maxSIB INTEGER ::= 32 -- Maximum number of SIBs +maxSIB-1 INTEGER ::= 31 +maxSI-Message INTEGER ::= 32 -- Maximum number of SI messages +maxSimultaneousBands-r10 INTEGER ::= 64 -- Maximum number of simultaneously aggregated bands +maxUTRA-FDD-Carrier INTEGER ::= 16 -- Maximum number of UTRA FDD carrier frequencies +maxUTRA-TDD-Carrier INTEGER ::= 16 -- Maximum number of UTRA TDD carrier frequencies + + +END + diff --git a/openair2/RRC/LITE/MESSAGES/asn1c/ASN1_files/EUTRA-RRC-Definitions-c60.asn b/openair2/RRC/LITE/MESSAGES/asn1c/ASN1_files/EUTRA-RRC-Definitions-c60.asn new file mode 100644 index 0000000000..ba1b72237d --- /dev/null +++ b/openair2/RRC/LITE/MESSAGES/asn1c/ASN1_files/EUTRA-RRC-Definitions-c60.asn @@ -0,0 +1,6786 @@ +EUTRA-RRC-Definitions DEFINITIONS AUTOMATIC TAGS ::= + +BEGIN + + +BCCH-BCH-Message ::= SEQUENCE { + message BCCH-BCH-MessageType +} + +BCCH-BCH-MessageType ::= MasterInformationBlock + + +BCCH-DL-SCH-Message ::= SEQUENCE { + message BCCH-DL-SCH-MessageType +} + +BCCH-DL-SCH-MessageType ::= CHOICE { + c1 CHOICE { + systemInformation SystemInformation, + systemInformationBlockType1 SystemInformationBlockType1 + }, + messageClassExtension SEQUENCE {} +} + + +MCCH-Message ::= SEQUENCE { + message MCCH-MessageType +} + +MCCH-MessageType ::= CHOICE { + c1 CHOICE { + mbsfnAreaConfiguration-r9 MBSFNAreaConfiguration-r9 + }, + later CHOICE { + c2 CHOICE{ + mbmsCountingRequest-r10 MBMSCountingRequest-r10 + }, + messageClassExtension SEQUENCE {} + } +} + + +PCCH-Message ::= SEQUENCE { + message PCCH-MessageType +} + +PCCH-MessageType ::= CHOICE { + c1 CHOICE { + paging Paging + }, + messageClassExtension SEQUENCE {} +} + + +DL-CCCH-Message ::= SEQUENCE { + message DL-CCCH-MessageType +} + +DL-CCCH-MessageType ::= CHOICE { + c1 CHOICE { + rrcConnectionReestablishment RRCConnectionReestablishment, + rrcConnectionReestablishmentReject RRCConnectionReestablishmentReject, + rrcConnectionReject RRCConnectionReject, + rrcConnectionSetup RRCConnectionSetup + }, + messageClassExtension SEQUENCE {} +} + + +DL-DCCH-Message ::= SEQUENCE { + message DL-DCCH-MessageType +} + +DL-DCCH-MessageType ::= CHOICE { + c1 CHOICE { + csfbParametersResponseCDMA2000 CSFBParametersResponseCDMA2000, + dlInformationTransfer DLInformationTransfer, + handoverFromEUTRAPreparationRequest HandoverFromEUTRAPreparationRequest, + mobilityFromEUTRACommand MobilityFromEUTRACommand, + rrcConnectionReconfiguration RRCConnectionReconfiguration, + rrcConnectionRelease RRCConnectionRelease, + securityModeCommand SecurityModeCommand, + ueCapabilityEnquiry UECapabilityEnquiry, + counterCheck CounterCheck, + ueInformationRequest-r9 UEInformationRequest-r9, + loggedMeasurementConfiguration-r10 LoggedMeasurementConfiguration-r10, + rnReconfiguration-r10 RNReconfiguration-r10, + spare4 NULL, + spare3 NULL, spare2 NULL, spare1 NULL + }, + messageClassExtension SEQUENCE {} +} + + +UL-CCCH-Message ::= SEQUENCE { + message UL-CCCH-MessageType +} + +UL-CCCH-MessageType ::= CHOICE { + c1 CHOICE { + rrcConnectionReestablishmentRequest RRCConnectionReestablishmentRequest, + rrcConnectionRequest RRCConnectionRequest + }, + messageClassExtension SEQUENCE {} +} + + +UL-DCCH-Message ::= SEQUENCE { + message UL-DCCH-MessageType +} + +UL-DCCH-MessageType ::= CHOICE { + c1 CHOICE { + csfbParametersRequestCDMA2000 CSFBParametersRequestCDMA2000, + measurementReport MeasurementReport, + rrcConnectionReconfigurationComplete RRCConnectionReconfigurationComplete, + rrcConnectionReestablishmentComplete RRCConnectionReestablishmentComplete, + rrcConnectionSetupComplete RRCConnectionSetupComplete, + securityModeComplete SecurityModeComplete, + securityModeFailure SecurityModeFailure, + ueCapabilityInformation UECapabilityInformation, + ulHandoverPreparationTransfer ULHandoverPreparationTransfer, + ulInformationTransfer ULInformationTransfer, + counterCheckResponse CounterCheckResponse, + ueInformationResponse-r9 UEInformationResponse-r9, + proximityIndication-r9 ProximityIndication-r9, + rnReconfigurationComplete-r10 RNReconfigurationComplete-r10, + mbmsCountingResponse-r10 MBMSCountingResponse-r10, + interFreqRSTDMeasurementIndication-r10 InterFreqRSTDMeasurementIndication-r10 + }, + messageClassExtension CHOICE { + c2 CHOICE { + ueAssistanceInformation-r11 UEAssistanceInformation-r11, + inDeviceCoexIndication-r11 InDeviceCoexIndication-r11, + mbmsInterestIndication-r11 MBMSInterestIndication-r11, + scgFailureInformation-r12 SCGFailureInformation-r12, + sidelinkUEInformation-r12 SidelinkUEInformation-r12, + spare11 NULL, spare10 NULL, + spare9 NULL, spare8 NULL, spare7 NULL, + spare6 NULL, spare5 NULL, spare4 NULL, + spare3 NULL, spare2 NULL, spare1 NULL + }, + messageClassExtensionFuture-r11 SEQUENCE {} + } +} + + +CounterCheck ::= SEQUENCE { + rrc-TransactionIdentifier RRC-TransactionIdentifier, + criticalExtensions CHOICE { + c1 CHOICE { + counterCheck-r8 CounterCheck-r8-IEs, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +CounterCheck-r8-IEs ::= SEQUENCE { + drb-CountMSB-InfoList DRB-CountMSB-InfoList, + nonCriticalExtension CounterCheck-v8a0-IEs OPTIONAL +} + +CounterCheck-v8a0-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, + nonCriticalExtension SEQUENCE {} OPTIONAL +} + +DRB-CountMSB-InfoList ::= SEQUENCE (SIZE (1..maxDRB)) OF DRB-CountMSB-Info + +DRB-CountMSB-Info ::= SEQUENCE { + drb-Identity DRB-Identity, + countMSB-Uplink INTEGER(0..33554431), + countMSB-Downlink INTEGER(0..33554431) +} + + +CounterCheckResponse ::= SEQUENCE { + rrc-TransactionIdentifier RRC-TransactionIdentifier, + criticalExtensions CHOICE { + counterCheckResponse-r8 CounterCheckResponse-r8-IEs, + criticalExtensionsFuture SEQUENCE {} + } +} + +CounterCheckResponse-r8-IEs ::= SEQUENCE { + drb-CountInfoList DRB-CountInfoList, + nonCriticalExtension CounterCheckResponse-v8a0-IEs OPTIONAL +} + +CounterCheckResponse-v8a0-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, + nonCriticalExtension SEQUENCE {} OPTIONAL +} + +DRB-CountInfoList ::= SEQUENCE (SIZE (0..maxDRB)) OF DRB-CountInfo + +DRB-CountInfo ::= SEQUENCE { + drb-Identity DRB-Identity, + count-Uplink INTEGER(0..4294967295), + count-Downlink INTEGER(0..4294967295) +} + + +CSFBParametersRequestCDMA2000 ::= SEQUENCE { + criticalExtensions CHOICE { + csfbParametersRequestCDMA2000-r8 CSFBParametersRequestCDMA2000-r8-IEs, + criticalExtensionsFuture SEQUENCE {} + } +} + +CSFBParametersRequestCDMA2000-r8-IEs ::= SEQUENCE { + nonCriticalExtension CSFBParametersRequestCDMA2000-v8a0-IEs OPTIONAL +} + +CSFBParametersRequestCDMA2000-v8a0-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, + nonCriticalExtension SEQUENCE {} OPTIONAL +} + + +CSFBParametersResponseCDMA2000 ::= SEQUENCE { + rrc-TransactionIdentifier RRC-TransactionIdentifier, + criticalExtensions CHOICE { + csfbParametersResponseCDMA2000-r8 CSFBParametersResponseCDMA2000-r8-IEs, + criticalExtensionsFuture SEQUENCE {} + } +} + +CSFBParametersResponseCDMA2000-r8-IEs ::= SEQUENCE { + rand RAND-CDMA2000, + mobilityParameters MobilityParametersCDMA2000, + nonCriticalExtension CSFBParametersResponseCDMA2000-v8a0-IEs OPTIONAL +} + +CSFBParametersResponseCDMA2000-v8a0-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, + nonCriticalExtension SEQUENCE {} OPTIONAL +} + + +DLInformationTransfer ::= SEQUENCE { + rrc-TransactionIdentifier RRC-TransactionIdentifier, + criticalExtensions CHOICE { + c1 CHOICE { + dlInformationTransfer-r8 DLInformationTransfer-r8-IEs, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +DLInformationTransfer-r8-IEs ::= SEQUENCE { + dedicatedInfoType CHOICE { + dedicatedInfoNAS DedicatedInfoNAS, + dedicatedInfoCDMA2000-1XRTT DedicatedInfoCDMA2000, + dedicatedInfoCDMA2000-HRPD DedicatedInfoCDMA2000 + }, + nonCriticalExtension DLInformationTransfer-v8a0-IEs OPTIONAL +} + +DLInformationTransfer-v8a0-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, + nonCriticalExtension SEQUENCE {} OPTIONAL +} + + +HandoverFromEUTRAPreparationRequest ::= SEQUENCE { + rrc-TransactionIdentifier RRC-TransactionIdentifier, + criticalExtensions CHOICE { + c1 CHOICE { + handoverFromEUTRAPreparationRequest-r8 + HandoverFromEUTRAPreparationRequest-r8-IEs, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +HandoverFromEUTRAPreparationRequest-r8-IEs ::= SEQUENCE { + cdma2000-Type CDMA2000-Type, + rand RAND-CDMA2000 OPTIONAL, -- Cond cdma2000-Type + mobilityParameters MobilityParametersCDMA2000 OPTIONAL, -- Cond cdma2000-Type + nonCriticalExtension HandoverFromEUTRAPreparationRequest-v890-IEs OPTIONAL +} + +HandoverFromEUTRAPreparationRequest-v890-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, + nonCriticalExtension HandoverFromEUTRAPreparationRequest-v920-IEs OPTIONAL +} + +HandoverFromEUTRAPreparationRequest-v920-IEs ::= SEQUENCE { + concurrPrepCDMA2000-HRPD-r9 BOOLEAN OPTIONAL, -- Cond cdma2000-Type + nonCriticalExtension HandoverFromEUTRAPreparationRequest-v1020-IEs OPTIONAL +} + +HandoverFromEUTRAPreparationRequest-v1020-IEs ::= SEQUENCE { + dualRxTxRedirectIndicator-r10 ENUMERATED {true} OPTIONAL, -- Cond cdma2000-1XRTT + redirectCarrierCDMA2000-1XRTT-r10 CarrierFreqCDMA2000 OPTIONAL, -- Cond dualRxTxRedirect + nonCriticalExtension SEQUENCE {} OPTIONAL +} + + +InDeviceCoexIndication-r11 ::= SEQUENCE { + criticalExtensions CHOICE { + c1 CHOICE { + inDeviceCoexIndication-r11 InDeviceCoexIndication-r11-IEs, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +InDeviceCoexIndication-r11-IEs ::= SEQUENCE { + affectedCarrierFreqList-r11 AffectedCarrierFreqList-r11 OPTIONAL, + tdm-AssistanceInfo-r11 TDM-AssistanceInfo-r11 OPTIONAL, + lateNonCriticalExtension OCTET STRING OPTIONAL, + nonCriticalExtension SEQUENCE {} OPTIONAL +} + +AffectedCarrierFreqList-r11 ::= SEQUENCE (SIZE (1..maxFreqIDC-r11)) OF AffectedCarrierFreq-r11 + +AffectedCarrierFreq-r11 ::= SEQUENCE { + carrierFreq-r11 MeasObjectId, + interferenceDirection-r11 ENUMERATED {eutra, other, both, spare} +} + +TDM-AssistanceInfo-r11 ::= CHOICE { + drx-AssistanceInfo-r11 SEQUENCE { + drx-CycleLength-r11 ENUMERATED {sf40, sf64, sf80, sf128, sf160, + sf256, spare2, spare1}, + drx-Offset-r11 INTEGER (0..255) OPTIONAL, + drx-ActiveTime-r11 ENUMERATED {sf20, sf30, sf40, sf60, sf80, + sf100, spare2, spare1} + }, + idc-SubframePatternList-r11 IDC-SubframePatternList-r11, + ... +} + +IDC-SubframePatternList-r11 ::= SEQUENCE (SIZE (1..maxSubframePatternIDC-r11)) OF IDC-SubframePattern-r11 + +IDC-SubframePattern-r11 ::= CHOICE { + subframePatternFDD-r11 BIT STRING (SIZE (4)), + subframePatternTDD-r11 CHOICE { + subframeConfig0-r11 BIT STRING (SIZE (70)), + subframeConfig1-5-r11 BIT STRING (SIZE (10)), + subframeConfig6-r11 BIT STRING (SIZE (60)) + }, + ... +} + + +InterFreqRSTDMeasurementIndication-r10 ::= SEQUENCE { + criticalExtensions CHOICE { + c1 CHOICE { + interFreqRSTDMeasurementIndication-r10 InterFreqRSTDMeasurementIndication-r10-IEs, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +InterFreqRSTDMeasurementIndication-r10-IEs ::= SEQUENCE { + rstd-InterFreqIndication-r10 CHOICE { + start SEQUENCE { + rstd-InterFreqInfoList-r10 RSTD-InterFreqInfoList-r10 + }, + stop NULL + }, + lateNonCriticalExtension OCTET STRING OPTIONAL, + nonCriticalExtension SEQUENCE {} OPTIONAL +} + +RSTD-InterFreqInfoList-r10 ::= SEQUENCE (SIZE(1..maxRSTD-Freq-r10)) OF RSTD-InterFreqInfo-r10 + +RSTD-InterFreqInfo-r10 ::= SEQUENCE { + carrierFreq-r10 ARFCN-ValueEUTRA, + measPRS-Offset-r10 INTEGER (0..39), + ..., + [[ carrierFreq-v1090 ARFCN-ValueEUTRA-v9e0 OPTIONAL + ]] +} + + +LoggedMeasurementConfiguration-r10 ::= SEQUENCE { + criticalExtensions CHOICE { + c1 CHOICE { + loggedMeasurementConfiguration-r10 LoggedMeasurementConfiguration-r10-IEs, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + + +LoggedMeasurementConfiguration-r10-IEs ::= SEQUENCE { + traceReference-r10 TraceReference-r10, + traceRecordingSessionRef-r10 OCTET STRING (SIZE (2)), + tce-Id-r10 OCTET STRING (SIZE (1)), + absoluteTimeInfo-r10 AbsoluteTimeInfo-r10, + areaConfiguration-r10 AreaConfiguration-r10 OPTIONAL, -- Need OR + loggingDuration-r10 LoggingDuration-r10, + loggingInterval-r10 LoggingInterval-r10, + nonCriticalExtension LoggedMeasurementConfiguration-v1080-IEs OPTIONAL +} + +LoggedMeasurementConfiguration-v1080-IEs ::= SEQUENCE { + lateNonCriticalExtension-r10 OCTET STRING OPTIONAL, + nonCriticalExtension LoggedMeasurementConfiguration-v1130-IEs OPTIONAL +} + +LoggedMeasurementConfiguration-v1130-IEs ::= SEQUENCE { + plmn-IdentityList-r11 PLMN-IdentityList3-r11 OPTIONAL, -- Need OR + areaConfiguration-v1130 AreaConfiguration-v1130 OPTIONAL, -- Need OR + nonCriticalExtension LoggedMeasurementConfiguration-v1250-IEs OPTIONAL +} + +LoggedMeasurementConfiguration-v1250-IEs ::= SEQUENCE { + targetMBSFN-AreaList-r12 TargetMBSFN-AreaList-r12 OPTIONAL, -- Need OP + nonCriticalExtension SEQUENCE {} OPTIONAL +} + +TargetMBSFN-AreaList-r12 ::= SEQUENCE (SIZE (0..maxMBSFN-Area)) OF TargetMBSFN-Area-r12 + +TargetMBSFN-Area-r12 ::= SEQUENCE { + mbsfn-AreaId-r12 MBSFN-AreaId-r12 OPTIONAL, -- Need OR + carrierFreq-r12 ARFCN-ValueEUTRA-r9, + ... +} + + +MasterInformationBlock ::= SEQUENCE { + dl-Bandwidth ENUMERATED { + n6, n15, n25, n50, n75, n100}, + phich-Config PHICH-Config, + systemFrameNumber BIT STRING (SIZE (8)), + spare BIT STRING (SIZE (10)) +} + + + +MBMSCountingRequest-r10 ::= SEQUENCE { + countingRequestList-r10 CountingRequestList-r10, + lateNonCriticalExtension OCTET STRING OPTIONAL, + nonCriticalExtension SEQUENCE {} OPTIONAL +} + +CountingRequestList-r10 ::= SEQUENCE (SIZE (1..maxServiceCount)) OF CountingRequestInfo-r10 + +CountingRequestInfo-r10 ::= SEQUENCE { + tmgi-r10 TMGI-r9, + ... +} + + +MBMSCountingResponse-r10 ::= SEQUENCE { + criticalExtensions CHOICE { + c1 CHOICE { + countingResponse-r10 MBMSCountingResponse-r10-IEs, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +MBMSCountingResponse-r10-IEs ::= SEQUENCE { + mbsfn-AreaIndex-r10 INTEGER (0..maxMBSFN-Area-1) OPTIONAL, + countingResponseList-r10 CountingResponseList-r10 OPTIONAL, + lateNonCriticalExtension OCTET STRING OPTIONAL, + nonCriticalExtension SEQUENCE {} OPTIONAL +} + +CountingResponseList-r10 ::= SEQUENCE (SIZE (1..maxServiceCount)) OF CountingResponseInfo-r10 + +CountingResponseInfo-r10 ::= SEQUENCE { + countingResponseService-r10 INTEGER (0..maxServiceCount-1), + ... +} + + +MBMSInterestIndication-r11 ::= SEQUENCE { + criticalExtensions CHOICE { + c1 CHOICE { + interestIndication-r11 MBMSInterestIndication-r11-IEs, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +MBMSInterestIndication-r11-IEs ::= SEQUENCE { + mbms-FreqList-r11 CarrierFreqListMBMS-r11 OPTIONAL, + mbms-Priority-r11 ENUMERATED {true} OPTIONAL, + lateNonCriticalExtension OCTET STRING OPTIONAL, + nonCriticalExtension SEQUENCE {} OPTIONAL +} + + +MBSFNAreaConfiguration-r9 ::= SEQUENCE { + commonSF-Alloc-r9 CommonSF-AllocPatternList-r9, + commonSF-AllocPeriod-r9 ENUMERATED { + rf4, rf8, rf16, rf32, rf64, rf128, rf256}, + pmch-InfoList-r9 PMCH-InfoList-r9, + nonCriticalExtension MBSFNAreaConfiguration-v930-IEs OPTIONAL +} + +MBSFNAreaConfiguration-v930-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, + nonCriticalExtension MBSFNAreaConfiguration-v1250-IEs OPTIONAL +} + +MBSFNAreaConfiguration-v1250-IEs ::= SEQUENCE { + pmch-InfoListExt-r12 PMCH-InfoListExt-r12 OPTIONAL, -- Need OR + nonCriticalExtension SEQUENCE {} OPTIONAL +} + +CommonSF-AllocPatternList-r9 ::= SEQUENCE (SIZE (1..maxMBSFN-Allocations)) OF MBSFN-SubframeConfig + + +MeasurementReport ::= SEQUENCE { + criticalExtensions CHOICE { + c1 CHOICE{ + measurementReport-r8 MeasurementReport-r8-IEs, + spare7 NULL, + spare6 NULL, spare5 NULL, spare4 NULL, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +MeasurementReport-r8-IEs ::= SEQUENCE { + measResults MeasResults, + nonCriticalExtension MeasurementReport-v8a0-IEs OPTIONAL +} + +MeasurementReport-v8a0-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, + nonCriticalExtension SEQUENCE {} OPTIONAL +} + + +MobilityFromEUTRACommand ::= SEQUENCE { + rrc-TransactionIdentifier RRC-TransactionIdentifier, + criticalExtensions CHOICE { + c1 CHOICE{ + mobilityFromEUTRACommand-r8 MobilityFromEUTRACommand-r8-IEs, + mobilityFromEUTRACommand-r9 MobilityFromEUTRACommand-r9-IEs, + spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +MobilityFromEUTRACommand-r8-IEs ::= SEQUENCE { + cs-FallbackIndicator BOOLEAN, + purpose CHOICE{ + handover Handover, + cellChangeOrder CellChangeOrder + }, + nonCriticalExtension MobilityFromEUTRACommand-v8a0-IEs OPTIONAL +} + +MobilityFromEUTRACommand-v8a0-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, + nonCriticalExtension MobilityFromEUTRACommand-v8d0-IEs OPTIONAL +} + +MobilityFromEUTRACommand-v8d0-IEs ::= SEQUENCE { + bandIndicator BandIndicatorGERAN OPTIONAL, -- Cond GERAN + nonCriticalExtension SEQUENCE {} OPTIONAL +} + +MobilityFromEUTRACommand-r9-IEs ::= SEQUENCE { + cs-FallbackIndicator BOOLEAN, + purpose CHOICE{ + handover Handover, + cellChangeOrder CellChangeOrder, + e-CSFB-r9 E-CSFB-r9, + ... + }, + nonCriticalExtension MobilityFromEUTRACommand-v930-IEs OPTIONAL +} + +MobilityFromEUTRACommand-v930-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, + nonCriticalExtension MobilityFromEUTRACommand-v960-IEs OPTIONAL +} + +MobilityFromEUTRACommand-v960-IEs ::= SEQUENCE { + bandIndicator BandIndicatorGERAN OPTIONAL, -- Cond GERAN + nonCriticalExtension SEQUENCE {} OPTIONAL +} + +Handover ::= SEQUENCE { + targetRAT-Type ENUMERATED { + utra, geran, cdma2000-1XRTT, cdma2000-HRPD, + spare4, spare3, spare2, spare1, ...}, + targetRAT-MessageContainer OCTET STRING, + nas-SecurityParamFromEUTRA OCTET STRING (SIZE (1)) OPTIONAL, -- Cond UTRAGERAN + systemInformation SI-OrPSI-GERAN OPTIONAL -- Cond PSHO +} + +CellChangeOrder ::= SEQUENCE { + t304 ENUMERATED { + ms100, ms200, ms500, ms1000, + ms2000, ms4000, ms8000, spare1}, + targetRAT-Type CHOICE { + geran SEQUENCE { + physCellId PhysCellIdGERAN, + carrierFreq CarrierFreqGERAN, + networkControlOrder BIT STRING (SIZE (2)) OPTIONAL, -- Need OP + systemInformation SI-OrPSI-GERAN OPTIONAL -- Need OP + }, + ... + } +} + +SI-OrPSI-GERAN ::= CHOICE { + si SystemInfoListGERAN, + psi SystemInfoListGERAN +} + +E-CSFB-r9 ::= SEQUENCE { + messageContCDMA2000-1XRTT-r9 OCTET STRING OPTIONAL, -- Need ON + mobilityCDMA2000-HRPD-r9 ENUMERATED { + handover, redirection + } OPTIONAL, -- Need OP + messageContCDMA2000-HRPD-r9 OCTET STRING OPTIONAL, -- Cond concHO + redirectCarrierCDMA2000-HRPD-r9 CarrierFreqCDMA2000 OPTIONAL -- Cond concRedir +} + + +Paging ::= SEQUENCE { + pagingRecordList PagingRecordList OPTIONAL, -- Need ON + systemInfoModification ENUMERATED {true} OPTIONAL, -- Need ON + etws-Indication ENUMERATED {true} OPTIONAL, -- Need ON + nonCriticalExtension Paging-v890-IEs OPTIONAL +} + +Paging-v890-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, + nonCriticalExtension Paging-v920-IEs OPTIONAL +} + +Paging-v920-IEs ::= SEQUENCE { + cmas-Indication-r9 ENUMERATED {true} OPTIONAL, -- Need ON + nonCriticalExtension Paging-v1130-IEs OPTIONAL +} + +Paging-v1130-IEs ::= SEQUENCE { + eab-ParamModification-r11 ENUMERATED {true} OPTIONAL, -- Need ON + nonCriticalExtension SEQUENCE {} OPTIONAL +} + +PagingRecordList ::= SEQUENCE (SIZE (1..maxPageRec)) OF PagingRecord + +PagingRecord ::= SEQUENCE { + ue-Identity PagingUE-Identity, + cn-Domain ENUMERATED {ps, cs}, + ... +} + +PagingUE-Identity ::= CHOICE { + s-TMSI S-TMSI, + imsi IMSI, + ... +} + +IMSI ::= SEQUENCE (SIZE (6..21)) OF IMSI-Digit + +IMSI-Digit ::= INTEGER (0..9) + + +ProximityIndication-r9 ::= SEQUENCE { + criticalExtensions CHOICE { + c1 CHOICE { + proximityIndication-r9 ProximityIndication-r9-IEs, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +ProximityIndication-r9-IEs ::= SEQUENCE { + type-r9 ENUMERATED {entering, leaving}, + carrierFreq-r9 CHOICE { + eutra-r9 ARFCN-ValueEUTRA, + utra-r9 ARFCN-ValueUTRA, + ..., + eutra2-v9e0 ARFCN-ValueEUTRA-v9e0 + }, + nonCriticalExtension ProximityIndication-v930-IEs OPTIONAL +} + +ProximityIndication-v930-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, + nonCriticalExtension SEQUENCE {} OPTIONAL +} + + +RNReconfiguration-r10 ::= SEQUENCE { + rrc-TransactionIdentifier RRC-TransactionIdentifier, + criticalExtensions CHOICE { + c1 CHOICE { + rnReconfiguration-r10 RNReconfiguration-r10-IEs, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +RNReconfiguration-r10-IEs ::= SEQUENCE { + rn-SystemInfo-r10 RN-SystemInfo-r10 OPTIONAL, -- Need ON + rn-SubframeConfig-r10 RN-SubframeConfig-r10 OPTIONAL, -- Need ON + lateNonCriticalExtension OCTET STRING OPTIONAL, + nonCriticalExtension SEQUENCE {} OPTIONAL +} + +RN-SystemInfo-r10 ::= SEQUENCE { + systemInformationBlockType1-r10 OCTET STRING (CONTAINING SystemInformationBlockType1) OPTIONAL, -- Need ON + systemInformationBlockType2-r10 SystemInformationBlockType2 OPTIONAL, -- Need ON + ... +} + + +RNReconfigurationComplete-r10 ::= SEQUENCE { + rrc-TransactionIdentifier RRC-TransactionIdentifier, + criticalExtensions CHOICE { + c1 CHOICE{ + rnReconfigurationComplete-r10 RNReconfigurationComplete-r10-IEs, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +RNReconfigurationComplete-r10-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, + nonCriticalExtension SEQUENCE {} OPTIONAL +} + + +RRCConnectionReconfiguration ::= SEQUENCE { + rrc-TransactionIdentifier RRC-TransactionIdentifier, + criticalExtensions CHOICE { + c1 CHOICE{ + rrcConnectionReconfiguration-r8 RRCConnectionReconfiguration-r8-IEs, + spare7 NULL, + spare6 NULL, spare5 NULL, spare4 NULL, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +RRCConnectionReconfiguration-r8-IEs ::= SEQUENCE { + measConfig MeasConfig OPTIONAL, -- Need ON + mobilityControlInfo MobilityControlInfo OPTIONAL, -- Cond HO + dedicatedInfoNASList SEQUENCE (SIZE(1..maxDRB)) OF + DedicatedInfoNAS OPTIONAL, -- Cond nonHO + radioResourceConfigDedicated RadioResourceConfigDedicated OPTIONAL, -- Cond HO-toEUTRA + securityConfigHO SecurityConfigHO OPTIONAL, -- Cond HO + nonCriticalExtension RRCConnectionReconfiguration-v890-IEs OPTIONAL +} + +RRCConnectionReconfiguration-v890-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, + nonCriticalExtension RRCConnectionReconfiguration-v920-IEs OPTIONAL +} + +RRCConnectionReconfiguration-v920-IEs ::= SEQUENCE { + otherConfig-r9 OtherConfig-r9 OPTIONAL, -- Need ON + fullConfig-r9 ENUMERATED {true} OPTIONAL, -- Cond HO-Reestab + nonCriticalExtension RRCConnectionReconfiguration-v1020-IEs OPTIONAL +} + +RRCConnectionReconfiguration-v1020-IEs ::= SEQUENCE { + sCellToReleaseList-r10 SCellToReleaseList-r10 OPTIONAL, -- Need ON + sCellToAddModList-r10 SCellToAddModList-r10 OPTIONAL, -- Need ON + nonCriticalExtension RRCConnectionReconfiguration-v1130-IEs OPTIONAL +} + +RRCConnectionReconfiguration-v1130-IEs ::= SEQUENCE { + systemInfomationBlockType1Dedicated-r11 OCTET STRING (CONTAINING SystemInformationBlockType1) OPTIONAL, -- Need ON + nonCriticalExtension RRCConnectionReconfiguration-v1250-IEs OPTIONAL +} + +RRCConnectionReconfiguration-v1250-IEs ::= SEQUENCE { + wlan-OffloadInfo-r12 CHOICE { + release NULL, + setup SEQUENCE { + wlan-OffloadConfigDedicated-r12 WLAN-OffloadConfig-r12, + t350-r12 ENUMERATED {min5, min10, min20, min30, min60, + min120, min180, spare1} OPTIONAL -- Need OR + } + } OPTIONAL, -- Need ON + scg-Configuration-r12 SCG-Configuration-r12 OPTIONAL, -- Cond nonFullConfig + sl-SyncTxControl-r12 SL-SyncTxControl-r12 OPTIONAL, -- Need ON + sl-DiscConfig-r12 SL-DiscConfig-r12 OPTIONAL, -- Need ON + sl-CommConfig-r12 SL-CommConfig-r12 OPTIONAL, -- Need ON + nonCriticalExtension SEQUENCE {} OPTIONAL +} + +SL-SyncTxControl-r12 ::= SEQUENCE { + networkControlledSyncTx-r12 ENUMERATED {on, off} OPTIONAL -- Need OP +} + +PSCellToAddMod-r12 ::= SEQUENCE { + sCellIndex-r12 SCellIndex-r10, + cellIdentification-r12 SEQUENCE { + physCellId-r12 PhysCellId, + dl-CarrierFreq-r12 ARFCN-ValueEUTRA-r9 + } OPTIONAL, -- Cond SCellAdd + radioResourceConfigCommonPSCell-r12 RadioResourceConfigCommonPSCell-r12 OPTIONAL, -- Cond SCellAdd + radioResourceConfigDedicatedPSCell-r12 RadioResourceConfigDedicatedPSCell-r12 OPTIONAL, -- Cond SCellAdd2 + ... +} + +PowerCoordinationInfo-r12 ::= SEQUENCE { + p-MeNB-r12 INTEGER (1..16), + p-SeNB-r12 INTEGER (1..16), + powerControlMode-r12 INTEGER (1..2) +} + +SCellToAddModList-r10 ::= SEQUENCE (SIZE (1..maxSCell-r10)) OF SCellToAddMod-r10 + +SCellToAddMod-r10 ::= SEQUENCE { + sCellIndex-r10 SCellIndex-r10, + cellIdentification-r10 SEQUENCE { + physCellId-r10 PhysCellId, + dl-CarrierFreq-r10 ARFCN-ValueEUTRA + } OPTIONAL, -- Cond SCellAdd + radioResourceConfigCommonSCell-r10 RadioResourceConfigCommonSCell-r10 OPTIONAL, -- Cond SCellAdd + radioResourceConfigDedicatedSCell-r10 RadioResourceConfigDedicatedSCell-r10 OPTIONAL, -- Cond SCellAdd2 + ..., + [[ dl-CarrierFreq-v1090 ARFCN-ValueEUTRA-v9e0 OPTIONAL -- Cond EARFCN-max + ]] +} + +SCellToReleaseList-r10 ::= SEQUENCE (SIZE (1..maxSCell-r10)) OF SCellIndex-r10 + +SCG-Configuration-r12 ::= CHOICE { + release NULL, + setup SEQUENCE { + scg-ConfigPartMCG-r12 SEQUENCE { + scg-Counter-r12 INTEGER (0.. 65535) OPTIONAL, -- Need ON + powerCoordinationInfo-r12 PowerCoordinationInfo-r12 OPTIONAL, -- Need ON + ... + } OPTIONAL, -- Need ON + scg-ConfigPartSCG-r12 SCG-ConfigPartSCG-r12 OPTIONAL -- Need ON + } +} + +SCG-ConfigPartSCG-r12 ::= SEQUENCE { + radioResourceConfigDedicatedSCG-r12 RadioResourceConfigDedicatedSCG-r12 OPTIONAL, -- Need ON + sCellToReleaseListSCG-r12 SCellToReleaseList-r10 OPTIONAL, -- Need ON + pSCellToAddMod-r12 PSCellToAddMod-r12 OPTIONAL, -- Need ON + sCellToAddModListSCG-r12 SCellToAddModList-r10 OPTIONAL, -- Need ON + mobilityControlInfoSCG-r12 MobilityControlInfoSCG-r12 OPTIONAL, -- Need ON + ... +} + +SecurityConfigHO ::= SEQUENCE { + handoverType CHOICE { + intraLTE SEQUENCE { + securityAlgorithmConfig SecurityAlgorithmConfig OPTIONAL, -- Cond fullConfig + keyChangeIndicator BOOLEAN, + nextHopChainingCount NextHopChainingCount + }, + interRAT SEQUENCE { + securityAlgorithmConfig SecurityAlgorithmConfig, + nas-SecurityParamToEUTRA OCTET STRING (SIZE(6)) + } + }, + ... +} + + + +RRCConnectionReconfigurationComplete ::= SEQUENCE { + rrc-TransactionIdentifier RRC-TransactionIdentifier, + criticalExtensions CHOICE { + rrcConnectionReconfigurationComplete-r8 + RRCConnectionReconfigurationComplete-r8-IEs, + criticalExtensionsFuture SEQUENCE {} + } +} + +RRCConnectionReconfigurationComplete-r8-IEs ::= SEQUENCE { + nonCriticalExtension RRCConnectionReconfigurationComplete-v8a0-IEs OPTIONAL +} + +RRCConnectionReconfigurationComplete-v8a0-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, + nonCriticalExtension RRCConnectionReconfigurationComplete-v1020-IEs OPTIONAL +} + +RRCConnectionReconfigurationComplete-v1020-IEs ::= SEQUENCE { + rlf-InfoAvailable-r10 ENUMERATED {true} OPTIONAL, + logMeasAvailable-r10 ENUMERATED {true} OPTIONAL, + nonCriticalExtension RRCConnectionReconfigurationComplete-v1130-IEs OPTIONAL +} + +RRCConnectionReconfigurationComplete-v1130-IEs ::= SEQUENCE { + connEstFailInfoAvailable-r11 ENUMERATED {true} OPTIONAL, + nonCriticalExtension RRCConnectionReconfigurationComplete-v1250-IEs OPTIONAL +} + +RRCConnectionReconfigurationComplete-v1250-IEs ::= SEQUENCE { + logMeasAvailableMBSFN-r12 ENUMERATED {true} OPTIONAL, + nonCriticalExtension SEQUENCE {} OPTIONAL +} + + +RRCConnectionReestablishment ::= SEQUENCE { + rrc-TransactionIdentifier RRC-TransactionIdentifier, + criticalExtensions CHOICE { + c1 CHOICE{ + rrcConnectionReestablishment-r8 RRCConnectionReestablishment-r8-IEs, + spare7 NULL, + spare6 NULL, spare5 NULL, spare4 NULL, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +RRCConnectionReestablishment-r8-IEs ::= SEQUENCE { + radioResourceConfigDedicated RadioResourceConfigDedicated, + nextHopChainingCount NextHopChainingCount, + nonCriticalExtension RRCConnectionReestablishment-v8a0-IEs OPTIONAL +} + +RRCConnectionReestablishment-v8a0-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, + nonCriticalExtension SEQUENCE {} OPTIONAL +} + + +RRCConnectionReestablishmentComplete ::= SEQUENCE { + rrc-TransactionIdentifier RRC-TransactionIdentifier, + criticalExtensions CHOICE { + rrcConnectionReestablishmentComplete-r8 + RRCConnectionReestablishmentComplete-r8-IEs, + criticalExtensionsFuture SEQUENCE {} + } +} + +RRCConnectionReestablishmentComplete-r8-IEs ::= SEQUENCE { + nonCriticalExtension RRCConnectionReestablishmentComplete-v920-IEs OPTIONAL +} + +RRCConnectionReestablishmentComplete-v920-IEs ::= SEQUENCE { + rlf-InfoAvailable-r9 ENUMERATED {true} OPTIONAL, + nonCriticalExtension RRCConnectionReestablishmentComplete-v8a0-IEs OPTIONAL +} + +RRCConnectionReestablishmentComplete-v8a0-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, + nonCriticalExtension RRCConnectionReestablishmentComplete-v1020-IEs OPTIONAL +} + +RRCConnectionReestablishmentComplete-v1020-IEs ::= SEQUENCE { + logMeasAvailable-r10 ENUMERATED {true} OPTIONAL, + nonCriticalExtension RRCConnectionReestablishmentComplete-v1130-IEs OPTIONAL +} + +RRCConnectionReestablishmentComplete-v1130-IEs ::= SEQUENCE { + connEstFailInfoAvailable-r11 ENUMERATED {true} OPTIONAL, + nonCriticalExtension RRCConnectionReestablishmentComplete-v1250-IEs OPTIONAL +} + +RRCConnectionReestablishmentComplete-v1250-IEs ::= SEQUENCE { + logMeasAvailableMBSFN-r12 ENUMERATED {true} OPTIONAL, + nonCriticalExtension SEQUENCE {} OPTIONAL +} + + +RRCConnectionReestablishmentReject ::= SEQUENCE { + criticalExtensions CHOICE { + rrcConnectionReestablishmentReject-r8 + RRCConnectionReestablishmentReject-r8-IEs, + criticalExtensionsFuture SEQUENCE {} + } +} + +RRCConnectionReestablishmentReject-r8-IEs ::= SEQUENCE { + nonCriticalExtension RRCConnectionReestablishmentReject-v8a0-IEs OPTIONAL +} + +RRCConnectionReestablishmentReject-v8a0-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, + nonCriticalExtension SEQUENCE {} OPTIONAL +} + + +RRCConnectionReestablishmentRequest ::= SEQUENCE { + criticalExtensions CHOICE { + rrcConnectionReestablishmentRequest-r8 + RRCConnectionReestablishmentRequest-r8-IEs, + criticalExtensionsFuture SEQUENCE {} + } +} + +RRCConnectionReestablishmentRequest-r8-IEs ::= SEQUENCE { + ue-Identity ReestabUE-Identity, + reestablishmentCause ReestablishmentCause, + spare BIT STRING (SIZE (2)) +} + +ReestabUE-Identity ::= SEQUENCE { + c-RNTI C-RNTI, + physCellId PhysCellId, + shortMAC-I ShortMAC-I +} + +ReestablishmentCause ::= ENUMERATED { + reconfigurationFailure, handoverFailure, + otherFailure, spare1} + + +RRCConnectionReject ::= SEQUENCE { + criticalExtensions CHOICE { + c1 CHOICE { + rrcConnectionReject-r8 RRCConnectionReject-r8-IEs, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +RRCConnectionReject-r8-IEs ::= SEQUENCE { + waitTime INTEGER (1..16), + nonCriticalExtension RRCConnectionReject-v8a0-IEs OPTIONAL +} + +RRCConnectionReject-v8a0-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, + nonCriticalExtension RRCConnectionReject-v1020-IEs OPTIONAL +} + +RRCConnectionReject-v1020-IEs ::= SEQUENCE { + extendedWaitTime-r10 INTEGER (1..1800) OPTIONAL, -- Need ON + nonCriticalExtension RRCConnectionReject-v1130-IEs OPTIONAL +} + +RRCConnectionReject-v1130-IEs ::= SEQUENCE { + deprioritisationReq-r11 SEQUENCE { + deprioritisationType-r11 ENUMERATED {frequency, e-utra}, + deprioritisationTimer-r11 ENUMERATED {min5, min10, min15, min30} + } OPTIONAL, -- Need ON + nonCriticalExtension SEQUENCE {} OPTIONAL +} + + +RRCConnectionRelease ::= SEQUENCE { + rrc-TransactionIdentifier RRC-TransactionIdentifier, + criticalExtensions CHOICE { + c1 CHOICE { + rrcConnectionRelease-r8 RRCConnectionRelease-r8-IEs, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +RRCConnectionRelease-r8-IEs ::= SEQUENCE { + releaseCause ReleaseCause, + redirectedCarrierInfo RedirectedCarrierInfo OPTIONAL, -- Need ON + idleModeMobilityControlInfo IdleModeMobilityControlInfo OPTIONAL, -- Need OP + nonCriticalExtension RRCConnectionRelease-v890-IEs OPTIONAL +} + +RRCConnectionRelease-v890-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING (CONTAINING RRCConnectionRelease-v9e0-IEs) OPTIONAL, + nonCriticalExtension RRCConnectionRelease-v920-IEs OPTIONAL +} + +-- Late non critical extensions +RRCConnectionRelease-v9e0-IEs ::= SEQUENCE { + redirectedCarrierInfo-v9e0 RedirectedCarrierInfo-v9e0 OPTIONAL, -- Cond NoRedirect-r8 + idleModeMobilityControlInfo-v9e0 IdleModeMobilityControlInfo-v9e0 OPTIONAL, -- Cond IdleInfoEUTRA + nonCriticalExtension SEQUENCE {} OPTIONAL +} + +-- Regular non critical extensions +RRCConnectionRelease-v920-IEs ::= SEQUENCE { + cellInfoList-r9 CHOICE { + geran-r9 CellInfoListGERAN-r9, + utra-FDD-r9 CellInfoListUTRA-FDD-r9, + utra-TDD-r9 CellInfoListUTRA-TDD-r9, + ..., + utra-TDD-r10 CellInfoListUTRA-TDD-r10 + } OPTIONAL, -- Cond Redirection + nonCriticalExtension RRCConnectionRelease-v1020-IEs OPTIONAL +} + +RRCConnectionRelease-v1020-IEs ::= SEQUENCE { + extendedWaitTime-r10 INTEGER (1..1800) OPTIONAL, -- Need ON + nonCriticalExtension SEQUENCE {} OPTIONAL +} + +ReleaseCause ::= ENUMERATED {loadBalancingTAUrequired, + other, cs-FallbackHighPriority-v1020, spare1} + +RedirectedCarrierInfo ::= CHOICE { + eutra ARFCN-ValueEUTRA, + geran CarrierFreqsGERAN, + utra-FDD ARFCN-ValueUTRA, + utra-TDD ARFCN-ValueUTRA, + cdma2000-HRPD CarrierFreqCDMA2000, + cdma2000-1xRTT CarrierFreqCDMA2000, + ..., + utra-TDD-r10 CarrierFreqListUTRA-TDD-r10 +} + +RedirectedCarrierInfo-v9e0 ::= SEQUENCE { + eutra-v9e0 ARFCN-ValueEUTRA-v9e0 +} + +CarrierFreqListUTRA-TDD-r10 ::= SEQUENCE (SIZE (1..maxFreqUTRA-TDD-r10)) OF ARFCN-ValueUTRA + +IdleModeMobilityControlInfo ::= SEQUENCE { + freqPriorityListEUTRA FreqPriorityListEUTRA OPTIONAL, -- Need ON + freqPriorityListGERAN FreqsPriorityListGERAN OPTIONAL, -- Need ON + freqPriorityListUTRA-FDD FreqPriorityListUTRA-FDD OPTIONAL, -- Need ON + freqPriorityListUTRA-TDD FreqPriorityListUTRA-TDD OPTIONAL, -- Need ON + bandClassPriorityListHRPD BandClassPriorityListHRPD OPTIONAL, -- Need ON + bandClassPriorityList1XRTT BandClassPriorityList1XRTT OPTIONAL, -- Need ON + t320 ENUMERATED { + min5, min10, min20, min30, min60, min120, min180, + spare1} OPTIONAL, -- Need OR + ..., + [[ freqPriorityListExtEUTRA-r12 FreqPriorityListExtEUTRA-r12 OPTIONAL -- Need ON + ]] +} + +IdleModeMobilityControlInfo-v9e0 ::= SEQUENCE { + freqPriorityListEUTRA-v9e0 SEQUENCE (SIZE (1..maxFreq)) OF FreqPriorityEUTRA-v9e0 +} + +FreqPriorityListEUTRA ::= SEQUENCE (SIZE (1..maxFreq)) OF FreqPriorityEUTRA + +FreqPriorityListExtEUTRA-r12 ::= SEQUENCE (SIZE (1..maxFreq)) OF FreqPriorityEUTRA-r12 + +FreqPriorityEUTRA ::= SEQUENCE { + carrierFreq ARFCN-ValueEUTRA, + cellReselectionPriority CellReselectionPriority +} + +FreqPriorityEUTRA-v9e0 ::= SEQUENCE { + carrierFreq-v9e0 ARFCN-ValueEUTRA-v9e0 OPTIONAL -- Cond EARFCN-max +} + +FreqPriorityEUTRA-r12 ::= SEQUENCE { + carrierFreq-r12 ARFCN-ValueEUTRA-r9, + cellReselectionPriority-r12 CellReselectionPriority +} + +FreqsPriorityListGERAN ::= SEQUENCE (SIZE (1..maxGNFG)) OF FreqsPriorityGERAN + +FreqsPriorityGERAN ::= SEQUENCE { + carrierFreqs CarrierFreqsGERAN, + cellReselectionPriority CellReselectionPriority +} + +FreqPriorityListUTRA-FDD ::= SEQUENCE (SIZE (1..maxUTRA-FDD-Carrier)) OF FreqPriorityUTRA-FDD + +FreqPriorityUTRA-FDD ::= SEQUENCE { + carrierFreq ARFCN-ValueUTRA, + cellReselectionPriority CellReselectionPriority +} + +FreqPriorityListUTRA-TDD ::= SEQUENCE (SIZE (1..maxUTRA-TDD-Carrier)) OF FreqPriorityUTRA-TDD + +FreqPriorityUTRA-TDD ::= SEQUENCE { + carrierFreq ARFCN-ValueUTRA, + cellReselectionPriority CellReselectionPriority +} + +BandClassPriorityListHRPD ::= SEQUENCE (SIZE (1..maxCDMA-BandClass)) OF BandClassPriorityHRPD + +BandClassPriorityHRPD ::= SEQUENCE { + bandClass BandclassCDMA2000, + cellReselectionPriority CellReselectionPriority +} + +BandClassPriorityList1XRTT ::= SEQUENCE (SIZE (1..maxCDMA-BandClass)) OF BandClassPriority1XRTT + +BandClassPriority1XRTT ::= SEQUENCE { + bandClass BandclassCDMA2000, + cellReselectionPriority CellReselectionPriority +} + +CellInfoListGERAN-r9 ::= SEQUENCE (SIZE (1..maxCellInfoGERAN-r9)) OF CellInfoGERAN-r9 + +CellInfoGERAN-r9 ::= SEQUENCE { + physCellId-r9 PhysCellIdGERAN, + carrierFreq-r9 CarrierFreqGERAN, + systemInformation-r9 SystemInfoListGERAN +} + +CellInfoListUTRA-FDD-r9 ::= SEQUENCE (SIZE (1..maxCellInfoUTRA-r9)) OF CellInfoUTRA-FDD-r9 + +CellInfoUTRA-FDD-r9 ::= SEQUENCE { + physCellId-r9 PhysCellIdUTRA-FDD, + utra-BCCH-Container-r9 OCTET STRING +} + +CellInfoListUTRA-TDD-r9 ::= SEQUENCE (SIZE (1..maxCellInfoUTRA-r9)) OF CellInfoUTRA-TDD-r9 + +CellInfoUTRA-TDD-r9 ::= SEQUENCE { + physCellId-r9 PhysCellIdUTRA-TDD, + utra-BCCH-Container-r9 OCTET STRING +} + +CellInfoListUTRA-TDD-r10 ::= SEQUENCE (SIZE (1..maxCellInfoUTRA-r9)) OF CellInfoUTRA-TDD-r10 + +CellInfoUTRA-TDD-r10 ::= SEQUENCE { + physCellId-r10 PhysCellIdUTRA-TDD, + carrierFreq-r10 ARFCN-ValueUTRA, + utra-BCCH-Container-r10 OCTET STRING +} + + +RRCConnectionRequest ::= SEQUENCE { + criticalExtensions CHOICE { + rrcConnectionRequest-r8 RRCConnectionRequest-r8-IEs, + criticalExtensionsFuture SEQUENCE {} + } +} + +RRCConnectionRequest-r8-IEs ::= SEQUENCE { + ue-Identity InitialUE-Identity, + establishmentCause EstablishmentCause, + spare BIT STRING (SIZE (1)) +} + +InitialUE-Identity ::= CHOICE { + s-TMSI S-TMSI, + randomValue BIT STRING (SIZE (40)) +} + +EstablishmentCause ::= ENUMERATED { + emergency, highPriorityAccess, mt-Access, mo-Signalling, + mo-Data, delayTolerantAccess-v1020, spare2, spare1} + + +RRCConnectionSetup ::= SEQUENCE { + rrc-TransactionIdentifier RRC-TransactionIdentifier, + criticalExtensions CHOICE { + c1 CHOICE { + rrcConnectionSetup-r8 RRCConnectionSetup-r8-IEs, + spare7 NULL, + spare6 NULL, spare5 NULL, spare4 NULL, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +RRCConnectionSetup-r8-IEs ::= SEQUENCE { + radioResourceConfigDedicated RadioResourceConfigDedicated, + nonCriticalExtension RRCConnectionSetup-v8a0-IEs OPTIONAL +} + +RRCConnectionSetup-v8a0-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, + nonCriticalExtension SEQUENCE {} OPTIONAL +} + + +RRCConnectionSetupComplete ::= SEQUENCE { + rrc-TransactionIdentifier RRC-TransactionIdentifier, + criticalExtensions CHOICE { + c1 CHOICE{ + rrcConnectionSetupComplete-r8 RRCConnectionSetupComplete-r8-IEs, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +RRCConnectionSetupComplete-r8-IEs ::= SEQUENCE { + selectedPLMN-Identity INTEGER (1..maxPLMN-r11), + registeredMME RegisteredMME OPTIONAL, + dedicatedInfoNAS DedicatedInfoNAS, + nonCriticalExtension RRCConnectionSetupComplete-v8a0-IEs OPTIONAL +} + +RRCConnectionSetupComplete-v8a0-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, + nonCriticalExtension RRCConnectionSetupComplete-v1020-IEs OPTIONAL +} + +RRCConnectionSetupComplete-v1020-IEs ::= SEQUENCE { + gummei-Type-r10 ENUMERATED {native, mapped} OPTIONAL, + rlf-InfoAvailable-r10 ENUMERATED {true} OPTIONAL, + logMeasAvailable-r10 ENUMERATED {true} OPTIONAL, + rn-SubframeConfigReq-r10 ENUMERATED {required, notRequired} OPTIONAL, + nonCriticalExtension RRCConnectionSetupComplete-v1130-IEs OPTIONAL +} + +RRCConnectionSetupComplete-v1130-IEs ::= SEQUENCE { + connEstFailInfoAvailable-r11 ENUMERATED {true} OPTIONAL, + nonCriticalExtension RRCConnectionSetupComplete-v1250-IEs OPTIONAL +} + +RRCConnectionSetupComplete-v1250-IEs ::= SEQUENCE { + mobilityState-r12 ENUMERATED {normal, medium, high, spare} OPTIONAL, + mobilityHistoryAvail-r12 ENUMERATED {true} OPTIONAL, + logMeasAvailableMBSFN-r12 ENUMERATED {true} OPTIONAL, + nonCriticalExtension SEQUENCE {} OPTIONAL +} + +RegisteredMME ::= SEQUENCE { + plmn-Identity PLMN-Identity OPTIONAL, + mmegi BIT STRING (SIZE (16)), + mmec MMEC +} + + +SCGFailureInformation-r12 ::= SEQUENCE { + criticalExtensions CHOICE { + c1 CHOICE { + scgFailureInformation-r12 SCGFailureInformation-r12-IEs, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +SCGFailureInformation-r12-IEs ::= SEQUENCE { + failureReportSCG-r12 FailureReportSCG-r12 OPTIONAL, + nonCriticalExtension SEQUENCE {} OPTIONAL +} + +FailureReportSCG-r12 ::= SEQUENCE { + failureType-r12 ENUMERATED {t313-Expiry, randomAccessProblem, + rlc-MaxNumRetx, scg-ChangeFailure }, + measResultServFreqList-r12 MeasResultServFreqList-r10 OPTIONAL, + measResultNeighCells-r12 MeasResultList2EUTRA-r9 OPTIONAL, + ... +} + + +SecurityModeCommand ::= SEQUENCE { + rrc-TransactionIdentifier RRC-TransactionIdentifier, + criticalExtensions CHOICE { + c1 CHOICE{ + securityModeCommand-r8 SecurityModeCommand-r8-IEs, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +SecurityModeCommand-r8-IEs ::= SEQUENCE { + securityConfigSMC SecurityConfigSMC, + nonCriticalExtension SecurityModeCommand-v8a0-IEs OPTIONAL +} + +SecurityModeCommand-v8a0-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, + nonCriticalExtension SEQUENCE {} OPTIONAL +} + +SecurityConfigSMC ::= SEQUENCE { + securityAlgorithmConfig SecurityAlgorithmConfig, + ... +} + + +SecurityModeComplete ::= SEQUENCE { + rrc-TransactionIdentifier RRC-TransactionIdentifier, + criticalExtensions CHOICE { + securityModeComplete-r8 SecurityModeComplete-r8-IEs, + criticalExtensionsFuture SEQUENCE {} + } +} + +SecurityModeComplete-r8-IEs ::= SEQUENCE { + nonCriticalExtension SecurityModeComplete-v8a0-IEs OPTIONAL +} + +SecurityModeComplete-v8a0-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, + nonCriticalExtension SEQUENCE {} OPTIONAL +} + + +SecurityModeFailure ::= SEQUENCE { + rrc-TransactionIdentifier RRC-TransactionIdentifier, + criticalExtensions CHOICE { + securityModeFailure-r8 SecurityModeFailure-r8-IEs, + criticalExtensionsFuture SEQUENCE {} + } +} + +SecurityModeFailure-r8-IEs ::= SEQUENCE { + nonCriticalExtension SecurityModeFailure-v8a0-IEs OPTIONAL +} + +SecurityModeFailure-v8a0-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, + nonCriticalExtension SEQUENCE {} OPTIONAL +} + + +SidelinkUEInformation-r12 ::= SEQUENCE { + criticalExtensions CHOICE { + c1 CHOICE { + sidelinkUEInformation-r12 SidelinkUEInformation-r12-IEs, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +SidelinkUEInformation-r12-IEs ::= SEQUENCE { + commRxInterestedFreq-r12 ARFCN-ValueEUTRA-r9 OPTIONAL, + commTxResourceReq-r12 SL-CommTxResourceReq-r12 OPTIONAL, + discRxInterest-r12 ENUMERATED {true} OPTIONAL, + discTxResourceReq-r12 INTEGER (1..63) OPTIONAL, + lateNonCriticalExtension OCTET STRING OPTIONAL, + nonCriticalExtension SEQUENCE {} OPTIONAL +} + +SL-CommTxResourceReq-r12 ::= SEQUENCE { + carrierFreq-r12 ARFCN-ValueEUTRA-r9 OPTIONAL, + destinationInfoList-r12 SL-DestinationInfoList-r12 +} + +SL-DestinationInfoList-r12 ::= SEQUENCE (SIZE (1..maxSL-Dest-r12)) OF SL-DestinationIdentity-r12 + +SL-DestinationIdentity-r12 ::= BIT STRING (SIZE (24)) + + +SystemInformation ::= SEQUENCE { + criticalExtensions CHOICE { + systemInformation-r8 SystemInformation-r8-IEs, + criticalExtensionsFuture SEQUENCE {} + } +} +SystemInformation-r8-IEs ::= SEQUENCE { + sib-TypeAndInfo SEQUENCE (SIZE (1..maxSIB)) OF CHOICE { + sib2 SystemInformationBlockType2, + sib3 SystemInformationBlockType3, + sib4 SystemInformationBlockType4, + sib5 SystemInformationBlockType5, + sib6 SystemInformationBlockType6, + sib7 SystemInformationBlockType7, + sib8 SystemInformationBlockType8, + sib9 SystemInformationBlockType9, + sib10 SystemInformationBlockType10, + sib11 SystemInformationBlockType11, + ..., + sib12-v920 SystemInformationBlockType12-r9, + sib13-v920 SystemInformationBlockType13-r9, + sib14-v1130 SystemInformationBlockType14-r11, + sib15-v1130 SystemInformationBlockType15-r11, + sib16-v1130 SystemInformationBlockType16-r11, + sib17-v1250 SystemInformationBlockType17-r12, + sib18-v1250 SystemInformationBlockType18-r12, + sib19-v1250 SystemInformationBlockType19-r12 + }, + nonCriticalExtension SystemInformation-v8a0-IEs OPTIONAL +} + +SystemInformation-v8a0-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, + nonCriticalExtension SEQUENCE {} OPTIONAL +} + + +SystemInformationBlockType1 ::= SEQUENCE { + cellAccessRelatedInfo SEQUENCE { + plmn-IdentityList PLMN-IdentityList, + trackingAreaCode TrackingAreaCode, + cellIdentity CellIdentity, + cellBarred ENUMERATED {barred, notBarred}, + intraFreqReselection ENUMERATED {allowed, notAllowed}, + csg-Indication BOOLEAN, + csg-Identity CSG-Identity OPTIONAL -- Need OR + }, + cellSelectionInfo SEQUENCE { + q-RxLevMin Q-RxLevMin, + q-RxLevMinOffset INTEGER (1..8) OPTIONAL -- Need OP + }, + p-Max P-Max OPTIONAL, -- Need OP + freqBandIndicator FreqBandIndicator, + schedulingInfoList SchedulingInfoList, + tdd-Config TDD-Config OPTIONAL, -- Cond TDD + si-WindowLength ENUMERATED { + ms1, ms2, ms5, ms10, ms15, ms20, + ms40}, + systemInfoValueTag INTEGER (0..31), + nonCriticalExtension SystemInformationBlockType1-v890-IEs OPTIONAL +} + +SystemInformationBlockType1-v890-IEs::= SEQUENCE { + lateNonCriticalExtension OCTET STRING (CONTAINING SystemInformationBlockType1-v8h0-IEs) OPTIONAL, + nonCriticalExtension SystemInformationBlockType1-v920-IEs OPTIONAL +} + +-- Late non critical extensions +SystemInformationBlockType1-v8h0-IEs ::= SEQUENCE { + multiBandInfoList MultiBandInfoList OPTIONAL, -- Need OR + nonCriticalExtension SystemInformationBlockType1-v9e0-IEs OPTIONAL +} + +SystemInformationBlockType1-v9e0-IEs ::= SEQUENCE { + freqBandIndicator-v9e0 FreqBandIndicator-v9e0 OPTIONAL, -- Cond FBI-max + multiBandInfoList-v9e0 MultiBandInfoList-v9e0 OPTIONAL, -- Cond mFBI-max + nonCriticalExtension SEQUENCE {} OPTIONAL +} + +-- Regular non critical extensions +SystemInformationBlockType1-v920-IEs ::= SEQUENCE { + ims-EmergencySupport-r9 ENUMERATED {true} OPTIONAL, -- Need OR + cellSelectionInfo-v920 CellSelectionInfo-v920 OPTIONAL, -- Cond RSRQ + nonCriticalExtension SystemInformationBlockType1-v1130-IEs OPTIONAL +} + +SystemInformationBlockType1-v1130-IEs ::= SEQUENCE { + tdd-Config-v1130 TDD-Config-v1130 OPTIONAL, -- Cond TDD-OR + cellSelectionInfo-v1130 CellSelectionInfo-v1130 OPTIONAL, -- Cond WB-RSRQ + nonCriticalExtension SystemInformationBlockType1-v1250-IEs OPTIONAL +} + +SystemInformationBlockType1-v1250-IEs ::= SEQUENCE { + cellAccessRelatedInfo-v1250 SEQUENCE { + category0Allowed-r12 ENUMERATED {true} OPTIONAL -- Need OP + }, + cellSelectionInfo-v1250 CellSelectionInfo-v1250 OPTIONAL, -- Cond RSRQ2 + freqBandIndicatorPriority-r12 ENUMERATED {true} OPTIONAL, -- Cond mFBI + nonCriticalExtension SEQUENCE {} OPTIONAL +} + +PLMN-IdentityList ::= SEQUENCE (SIZE (1..maxPLMN-r11)) OF PLMN-IdentityInfo + +PLMN-IdentityInfo ::= SEQUENCE { + plmn-Identity PLMN-Identity, + cellReservedForOperatorUse ENUMERATED {reserved, notReserved} +} + +SchedulingInfoList ::= SEQUENCE (SIZE (1..maxSI-Message)) OF SchedulingInfo + +SchedulingInfo ::= SEQUENCE { + si-Periodicity ENUMERATED { + rf8, rf16, rf32, rf64, rf128, rf256, rf512}, + sib-MappingInfo SIB-MappingInfo +} + +SIB-MappingInfo ::= SEQUENCE (SIZE (0..maxSIB-1)) OF SIB-Type + +SIB-Type ::= ENUMERATED { + sibType3, sibType4, sibType5, sibType6, + sibType7, sibType8, sibType9, sibType10, + sibType11, sibType12-v920, sibType13-v920, + sibType14-v1130, sibType15-v1130, + sibType16-v1130, sibType17-v1250, sibType18-v1250, + ..., sibType19-v1250} + +CellSelectionInfo-v920 ::= SEQUENCE { + q-QualMin-r9 Q-QualMin-r9, + q-QualMinOffset-r9 INTEGER (1..8) OPTIONAL -- Need OP +} + +CellSelectionInfo-v1130 ::= SEQUENCE { + q-QualMinWB-r11 Q-QualMin-r9 +} + +CellSelectionInfo-v1250 ::= SEQUENCE { + q-QualMinRSRQ-OnAllSymbols-r12 Q-QualMin-r9 +} + + +UEAssistanceInformation-r11 ::= SEQUENCE { + criticalExtensions CHOICE { + c1 CHOICE { + ueAssistanceInformation-r11 UEAssistanceInformation-r11-IEs, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +UEAssistanceInformation-r11-IEs ::= SEQUENCE { + powerPrefIndication-r11 ENUMERATED {normal, lowPowerConsumption} OPTIONAL, + lateNonCriticalExtension OCTET STRING OPTIONAL, + nonCriticalExtension SEQUENCE {} OPTIONAL +} + + +UECapabilityEnquiry ::= SEQUENCE { + rrc-TransactionIdentifier RRC-TransactionIdentifier, + criticalExtensions CHOICE { + c1 CHOICE { + ueCapabilityEnquiry-r8 UECapabilityEnquiry-r8-IEs, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +UECapabilityEnquiry-r8-IEs ::= SEQUENCE { + ue-CapabilityRequest UE-CapabilityRequest, + nonCriticalExtension UECapabilityEnquiry-v8a0-IEs OPTIONAL +} + +UECapabilityEnquiry-v8a0-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, + nonCriticalExtension UECapabilityEnquiry-v1180-IEs OPTIONAL +} + +UECapabilityEnquiry-v1180-IEs ::= SEQUENCE { + requestedFrequencyBands-r11 SEQUENCE (SIZE (1..16)) OF FreqBandIndicator-r11 OPTIONAL, + nonCriticalExtension SEQUENCE {} OPTIONAL +} + +UE-CapabilityRequest ::= SEQUENCE (SIZE (1..maxRAT-Capabilities)) OF RAT-Type + + +UECapabilityInformation ::= SEQUENCE { + rrc-TransactionIdentifier RRC-TransactionIdentifier, + criticalExtensions CHOICE { + c1 CHOICE{ + ueCapabilityInformation-r8 UECapabilityInformation-r8-IEs, + spare7 NULL, + spare6 NULL, spare5 NULL, spare4 NULL, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +UECapabilityInformation-r8-IEs ::= SEQUENCE { + ue-CapabilityRAT-ContainerList UE-CapabilityRAT-ContainerList, + nonCriticalExtension UECapabilityInformation-v8a0-IEs OPTIONAL +} + +UECapabilityInformation-v8a0-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, + nonCriticalExtension UECapabilityInformation-v1250-IEs OPTIONAL +} + +UECapabilityInformation-v1250-IEs ::= SEQUENCE { + ue-RadioPagingInfo-r12 UE-RadioPagingInfo-r12 OPTIONAL, + nonCriticalExtension SEQUENCE {} OPTIONAL +} + + +UEInformationRequest-r9 ::= SEQUENCE { + rrc-TransactionIdentifier RRC-TransactionIdentifier, + criticalExtensions CHOICE { + c1 CHOICE { + ueInformationRequest-r9 UEInformationRequest-r9-IEs, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +UEInformationRequest-r9-IEs ::= SEQUENCE { + rach-ReportReq-r9 BOOLEAN, + rlf-ReportReq-r9 BOOLEAN, + nonCriticalExtension UEInformationRequest-v930-IEs OPTIONAL +} + +UEInformationRequest-v930-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, + nonCriticalExtension UEInformationRequest-v1020-IEs OPTIONAL +} + +UEInformationRequest-v1020-IEs ::= SEQUENCE { + logMeasReportReq-r10 ENUMERATED {true} OPTIONAL, -- Need ON + nonCriticalExtension UEInformationRequest-v1130-IEs OPTIONAL +} + +UEInformationRequest-v1130-IEs ::= SEQUENCE { + connEstFailReportReq-r11 ENUMERATED {true} OPTIONAL, -- Need ON + nonCriticalExtension UEInformationRequest-v1250-IEs OPTIONAL +} + +UEInformationRequest-v1250-IEs ::= SEQUENCE { + mobilityHistoryReportReq-r12 ENUMERATED {true} OPTIONAL, -- Need ON + nonCriticalExtension SEQUENCE {} OPTIONAL +} + + +UEInformationResponse-r9 ::= SEQUENCE { + rrc-TransactionIdentifier RRC-TransactionIdentifier, + criticalExtensions CHOICE { + c1 CHOICE { + ueInformationResponse-r9 UEInformationResponse-r9-IEs, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +UEInformationResponse-r9-IEs ::= SEQUENCE { + rach-Report-r9 SEQUENCE { + numberOfPreamblesSent-r9 NumberOfPreamblesSent-r11, + contentionDetected-r9 BOOLEAN + } OPTIONAL, + rlf-Report-r9 RLF-Report-r9 OPTIONAL, + nonCriticalExtension UEInformationResponse-v930-IEs OPTIONAL +} + +-- Late non critical extensions +UEInformationResponse-v9e0-IEs ::= SEQUENCE { + rlf-Report-v9e0 RLF-Report-v9e0 OPTIONAL, + nonCriticalExtension SEQUENCE {} OPTIONAL +} + +-- Regular non critical extensions +UEInformationResponse-v930-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING (CONTAINING UEInformationResponse-v9e0-IEs) OPTIONAL, + nonCriticalExtension UEInformationResponse-v1020-IEs OPTIONAL +} + +UEInformationResponse-v1020-IEs ::= SEQUENCE { + logMeasReport-r10 LogMeasReport-r10 OPTIONAL, + nonCriticalExtension UEInformationResponse-v1130-IEs OPTIONAL +} + +UEInformationResponse-v1130-IEs ::= SEQUENCE { + connEstFailReport-r11 ConnEstFailReport-r11 OPTIONAL, + nonCriticalExtension UEInformationResponse-v1250-IEs OPTIONAL +} + +UEInformationResponse-v1250-IEs ::= SEQUENCE { + mobilityHistoryReport-r12 MobilityHistoryReport-r12 OPTIONAL, + nonCriticalExtension SEQUENCE {} OPTIONAL +} + +RLF-Report-r9 ::= SEQUENCE { + measResultLastServCell-r9 SEQUENCE { + rsrpResult-r9 RSRP-Range, + rsrqResult-r9 RSRQ-Range OPTIONAL + }, + measResultNeighCells-r9 SEQUENCE { + measResultListEUTRA-r9 MeasResultList2EUTRA-r9 OPTIONAL, + measResultListUTRA-r9 MeasResultList2UTRA-r9 OPTIONAL, + measResultListGERAN-r9 MeasResultListGERAN OPTIONAL, + measResultsCDMA2000-r9 MeasResultList2CDMA2000-r9 OPTIONAL + } OPTIONAL, + ..., + [[ locationInfo-r10 LocationInfo-r10 OPTIONAL, + failedPCellId-r10 CHOICE { + cellGlobalId-r10 CellGlobalIdEUTRA, + pci-arfcn-r10 SEQUENCE { + physCellId-r10 PhysCellId, + carrierFreq-r10 ARFCN-ValueEUTRA + } + } OPTIONAL, + reestablishmentCellId-r10 CellGlobalIdEUTRA OPTIONAL, + timeConnFailure-r10 INTEGER (0..1023) OPTIONAL, + connectionFailureType-r10 ENUMERATED {rlf, hof} OPTIONAL, + previousPCellId-r10 CellGlobalIdEUTRA OPTIONAL + ]], + [[ failedPCellId-v1090 SEQUENCE { + carrierFreq-v1090 ARFCN-ValueEUTRA-v9e0 + } OPTIONAL + ]], + [[ basicFields-r11 SEQUENCE { + c-RNTI-r11 C-RNTI, + rlf-Cause-r11 ENUMERATED { + t310-Expiry, randomAccessProblem, + rlc-MaxNumRetx, t312-Expiry-r12}, + timeSinceFailure-r11 TimeSinceFailure-r11 + } OPTIONAL, + previousUTRA-CellId-r11 SEQUENCE { + carrierFreq-r11 ARFCN-ValueUTRA, + physCellId-r11 CHOICE { + fdd-r11 PhysCellIdUTRA-FDD, + tdd-r11 PhysCellIdUTRA-TDD + }, + cellGlobalId-r11 CellGlobalIdUTRA OPTIONAL + } OPTIONAL, + selectedUTRA-CellId-r11 SEQUENCE { + carrierFreq-r11 ARFCN-ValueUTRA, + physCellId-r11 CHOICE { + fdd-r11 PhysCellIdUTRA-FDD, + tdd-r11 PhysCellIdUTRA-TDD + } + } OPTIONAL + ]], + [[ failedPCellId-v1250 SEQUENCE { + tac-FailedPCell-r12 TrackingAreaCode + } OPTIONAL, + measResultLastServCell-v1250 RSRQ-Range-v1250 OPTIONAL, + lastServCellRSRQ-Type-r12 RSRQ-Type-r12 OPTIONAL, + measResultListEUTRA-v1250 MeasResultList2EUTRA-v1250 OPTIONAL + ]] + +} + +RLF-Report-v9e0 ::= SEQUENCE { + measResultListEUTRA-v9e0 MeasResultList2EUTRA-v9e0 +} + +MeasResultList2EUTRA-r9 ::= SEQUENCE (SIZE (1..maxFreq)) OF MeasResult2EUTRA-r9 + +MeasResultList2EUTRA-v9e0 ::= SEQUENCE (SIZE (1..maxFreq)) OF MeasResult2EUTRA-v9e0 + +MeasResultList2EUTRA-v1250 ::= SEQUENCE (SIZE (1..maxFreq)) OF MeasResult2EUTRA-v1250 + +MeasResult2EUTRA-r9 ::= SEQUENCE { + carrierFreq-r9 ARFCN-ValueEUTRA, + measResultList-r9 MeasResultListEUTRA +} + +MeasResult2EUTRA-v9e0 ::= SEQUENCE { + carrierFreq-v9e0 ARFCN-ValueEUTRA-v9e0 OPTIONAL +} + +MeasResult2EUTRA-v1250 ::= SEQUENCE { + rsrq-Type-r12 RSRQ-Type-r12 OPTIONAL +} + +MeasResultList2UTRA-r9 ::= SEQUENCE (SIZE (1..maxFreq)) OF MeasResult2UTRA-r9 + +MeasResult2UTRA-r9 ::= SEQUENCE { + carrierFreq-r9 ARFCN-ValueUTRA, + measResultList-r9 MeasResultListUTRA +} + +MeasResultList2CDMA2000-r9 ::= SEQUENCE (SIZE (1..maxFreq)) OF MeasResult2CDMA2000-r9 + +MeasResult2CDMA2000-r9 ::= SEQUENCE { + carrierFreq-r9 CarrierFreqCDMA2000, + measResultList-r9 MeasResultsCDMA2000 +} + +LogMeasReport-r10 ::= SEQUENCE { + absoluteTimeStamp-r10 AbsoluteTimeInfo-r10, + traceReference-r10 TraceReference-r10, + traceRecordingSessionRef-r10 OCTET STRING (SIZE (2)), + tce-Id-r10 OCTET STRING (SIZE (1)), + logMeasInfoList-r10 LogMeasInfoList-r10, + logMeasAvailable-r10 ENUMERATED {true} OPTIONAL, + ... +} + +LogMeasInfoList-r10 ::= SEQUENCE (SIZE (1..maxLogMeasReport-r10)) OF LogMeasInfo-r10 + +LogMeasInfo-r10 ::= SEQUENCE { + locationInfo-r10 LocationInfo-r10 OPTIONAL, + relativeTimeStamp-r10 INTEGER (0..7200), + servCellIdentity-r10 CellGlobalIdEUTRA, + measResultServCell-r10 SEQUENCE { + rsrpResult-r10 RSRP-Range, + rsrqResult-r10 RSRQ-Range + }, + measResultNeighCells-r10 SEQUENCE { + measResultListEUTRA-r10 MeasResultList2EUTRA-r9 OPTIONAL, + measResultListUTRA-r10 MeasResultList2UTRA-r9 OPTIONAL, + measResultListGERAN-r10 MeasResultList2GERAN-r10 OPTIONAL, + measResultListCDMA2000-r10 MeasResultList2CDMA2000-r9 OPTIONAL + } OPTIONAL, + ..., + [[ measResultListEUTRA-v1090 MeasResultList2EUTRA-v9e0 OPTIONAL + ]], + [[ measResultListMBSFN-r12 MeasResultListMBSFN-r12 OPTIONAL, + measResultServCell-v1250 RSRQ-Range-v1250 OPTIONAL, + servCellRSRQ-Type-r12 RSRQ-Type-r12 OPTIONAL, + measResultListEUTRA-v1250 MeasResultList2EUTRA-v1250 OPTIONAL + ]] + +} + +MeasResultListMBSFN-r12 ::= SEQUENCE (SIZE (1..maxMBSFN-Area)) OF MeasResultMBSFN-r12 + +MeasResultMBSFN-r12 ::= SEQUENCE { + mbsfn-Area-r12 SEQUENCE { + mbsfn-AreaId-r12 MBSFN-AreaId-r12, + carrierFreq-r12 ARFCN-ValueEUTRA-r9 + }, + rsrpResultMBSFN-r12 RSRP-Range, + rsrqResultMBSFN-r12 MBSFN-RSRQ-Range-r12, + signallingBLER-Result-r12 BLER-Result-r12 OPTIONAL, + dataBLER-MCH-ResultList-r12 DataBLER-MCH-ResultList-r12 OPTIONAL, + ... +} + +DataBLER-MCH-ResultList-r12 ::= SEQUENCE (SIZE (1.. maxPMCH-PerMBSFN)) OF DataBLER-MCH-Result-r12 + +DataBLER-MCH-Result-r12 ::= SEQUENCE { + mch-Index-r12 INTEGER (1..maxPMCH-PerMBSFN), + dataBLER-Result-r12 BLER-Result-r12 +} + +BLER-Result-r12 ::= SEQUENCE { + bler-r12 BLER-Range-r12, + blocksReceived-r12 SEQUENCE { + n-r12 BIT STRING (SIZE (3)), + m-r12 BIT STRING (SIZE (8)) + } +} + +BLER-Range-r12 ::= INTEGER(0..31) + +MeasResultList2GERAN-r10 ::= SEQUENCE (SIZE (1..maxCellListGERAN)) OF MeasResultListGERAN + +ConnEstFailReport-r11 ::= SEQUENCE { + failedCellId-r11 CellGlobalIdEUTRA, + locationInfo-r11 LocationInfo-r10 OPTIONAL, + measResultFailedCell-r11 SEQUENCE { + rsrpResult-r11 RSRP-Range, + rsrqResult-r11 RSRQ-Range OPTIONAL + }, + measResultNeighCells-r11 SEQUENCE { + measResultListEUTRA-r11 MeasResultList2EUTRA-r9 OPTIONAL, + measResultListUTRA-r11 MeasResultList2UTRA-r9 OPTIONAL, + measResultListGERAN-r11 MeasResultListGERAN OPTIONAL, + measResultsCDMA2000-r11 MeasResultList2CDMA2000-r9 OPTIONAL + } OPTIONAL, + numberOfPreamblesSent-r11 NumberOfPreamblesSent-r11, + contentionDetected-r11 BOOLEAN, + maxTxPowerReached-r11 BOOLEAN, + timeSinceFailure-r11 TimeSinceFailure-r11, + measResultListEUTRA-v1130 MeasResultList2EUTRA-v9e0 OPTIONAL, + ..., + [[ measResultFailedCell-v1250 RSRQ-Range-v1250 OPTIONAL, + failedCellRSRQ-Type-r12 RSRQ-Type-r12 OPTIONAL, + measResultListEUTRA-v1250 MeasResultList2EUTRA-v1250 OPTIONAL + ]] +} + +NumberOfPreamblesSent-r11::= INTEGER (1..200) + +TimeSinceFailure-r11 ::= INTEGER (0..172800) + +MobilityHistoryReport-r12 ::= VisitedCellInfoList-r12 + + +ULHandoverPreparationTransfer ::= SEQUENCE { + criticalExtensions CHOICE { + c1 CHOICE { + ulHandoverPreparationTransfer-r8 ULHandoverPreparationTransfer-r8-IEs, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +ULHandoverPreparationTransfer-r8-IEs ::= SEQUENCE { + cdma2000-Type CDMA2000-Type, + meid BIT STRING (SIZE (56)) OPTIONAL, + dedicatedInfo DedicatedInfoCDMA2000, + nonCriticalExtension ULHandoverPreparationTransfer-v8a0-IEs OPTIONAL +} + +ULHandoverPreparationTransfer-v8a0-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, + nonCriticalExtension SEQUENCE {} OPTIONAL +} + + +ULInformationTransfer ::= SEQUENCE { + criticalExtensions CHOICE { + c1 CHOICE { + ulInformationTransfer-r8 ULInformationTransfer-r8-IEs, + spare3 NULL, spare2 NULL, spare1 NULL + }, + criticalExtensionsFuture SEQUENCE {} + } +} + +ULInformationTransfer-r8-IEs ::= SEQUENCE { + dedicatedInfoType CHOICE { + dedicatedInfoNAS DedicatedInfoNAS, + dedicatedInfoCDMA2000-1XRTT DedicatedInfoCDMA2000, + dedicatedInfoCDMA2000-HRPD DedicatedInfoCDMA2000 + }, + nonCriticalExtension ULInformationTransfer-v8a0-IEs OPTIONAL +} + +ULInformationTransfer-v8a0-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING OPTIONAL, + nonCriticalExtension SEQUENCE {} OPTIONAL +} + + +SystemInformationBlockType2 ::= SEQUENCE { + ac-BarringInfo SEQUENCE { + ac-BarringForEmergency BOOLEAN, + ac-BarringForMO-Signalling AC-BarringConfig OPTIONAL, -- Need OP + ac-BarringForMO-Data AC-BarringConfig OPTIONAL -- Need OP + } OPTIONAL, -- Need OP + radioResourceConfigCommon RadioResourceConfigCommonSIB, + ue-TimersAndConstants UE-TimersAndConstants, + freqInfo SEQUENCE { + ul-CarrierFreq ARFCN-ValueEUTRA OPTIONAL, -- Need OP + ul-Bandwidth ENUMERATED {n6, n15, n25, n50, n75, n100} + OPTIONAL, -- Need OP + additionalSpectrumEmission AdditionalSpectrumEmission + }, + mbsfn-SubframeConfigList MBSFN-SubframeConfigList OPTIONAL, -- Need OR + timeAlignmentTimerCommon TimeAlignmentTimer, + ..., + lateNonCriticalExtension OCTET STRING (CONTAINING SystemInformationBlockType2-v8h0-IEs) OPTIONAL, + [[ ssac-BarringForMMTEL-Voice-r9 AC-BarringConfig OPTIONAL, -- Need OP + ssac-BarringForMMTEL-Video-r9 AC-BarringConfig OPTIONAL -- Need OP + ]], + [[ ac-BarringForCSFB-r10 AC-BarringConfig OPTIONAL -- Need OP + ]], + [[ + ac-BarringSkipForMMTELVoice-r12 ENUMERATED {true} OPTIONAL, -- Need OP + ac-BarringSkipForMMTELVideo-r12 ENUMERATED {true} OPTIONAL, -- Need OP + ac-BarringSkipForSMS-r12 ENUMERATED {true} OPTIONAL, -- Need OP + ac-BarringPerPLMN-List-r12 AC-BarringPerPLMN-List-r12 OPTIONAL -- Need OP + ]] +} + +SystemInformationBlockType2-v8h0-IEs ::= SEQUENCE { + multiBandInfoList SEQUENCE (SIZE (1..maxMultiBands)) OF AdditionalSpectrumEmission OPTIONAL, -- Need OR + nonCriticalExtension SystemInformationBlockType2-v9e0-IEs OPTIONAL +} + +SystemInformationBlockType2-v9e0-IEs ::= SEQUENCE { + ul-CarrierFreq-v9e0 ARFCN-ValueEUTRA-v9e0 OPTIONAL, -- Cond ul-FreqMax + nonCriticalExtension SEQUENCE {} OPTIONAL +} + +AC-BarringConfig ::= SEQUENCE { + ac-BarringFactor ENUMERATED { + p00, p05, p10, p15, p20, p25, p30, p40, + p50, p60, p70, p75, p80, p85, p90, p95}, + ac-BarringTime ENUMERATED {s4, s8, s16, s32, s64, s128, s256, s512}, + ac-BarringForSpecialAC BIT STRING (SIZE(5)) +} + +MBSFN-SubframeConfigList ::= SEQUENCE (SIZE (1..maxMBSFN-Allocations)) OF MBSFN-SubframeConfig + +AC-BarringPerPLMN-List-r12 ::= SEQUENCE (SIZE (1.. maxPLMN-r11)) OF AC-BarringPerPLMN-r12 + +AC-BarringPerPLMN-r12 ::= SEQUENCE { + plmn-IdentityIndex-r12 INTEGER (1..maxPLMN-r11), + ac-BarringInfo-r12 SEQUENCE { + ac-BarringForEmergency-r12 BOOLEAN, + ac-BarringForMO-Signalling-r12 AC-BarringConfig OPTIONAL, -- Need OP + ac-BarringForMO-Data-r12 AC-BarringConfig OPTIONAL -- Need OP + } OPTIONAL, -- Need OP + ac-BarringSkipForMMTELVoice-r12 ENUMERATED {true} OPTIONAL, -- Need OP + ac-BarringSkipForMMTELVideo-r12 ENUMERATED {true} OPTIONAL, -- Need OP + ac-BarringSkipForSMS-r12 ENUMERATED {true} OPTIONAL, -- Need OP + ac-BarringForCSFB-r12 AC-BarringConfig OPTIONAL, -- Need OP + ssac-BarringForMMTEL-Voice-r12 AC-BarringConfig OPTIONAL, -- Need OP + ssac-BarringForMMTEL-Video-r12 AC-BarringConfig OPTIONAL -- Need OP +} + + +SystemInformationBlockType3 ::= SEQUENCE { + cellReselectionInfoCommon SEQUENCE { + q-Hyst ENUMERATED { + dB0, dB1, dB2, dB3, dB4, dB5, dB6, dB8, dB10, + dB12, dB14, dB16, dB18, dB20, dB22, dB24}, + speedStateReselectionPars SEQUENCE { + mobilityStateParameters MobilityStateParameters, + q-HystSF SEQUENCE { + sf-Medium ENUMERATED { + dB-6, dB-4, dB-2, dB0}, + sf-High ENUMERATED { + dB-6, dB-4, dB-2, dB0} + } + } OPTIONAL -- Need OP + }, + cellReselectionServingFreqInfo SEQUENCE { + s-NonIntraSearch ReselectionThreshold OPTIONAL, -- Need OP + threshServingLow ReselectionThreshold, + cellReselectionPriority CellReselectionPriority + }, + intraFreqCellReselectionInfo SEQUENCE { + q-RxLevMin Q-RxLevMin, + p-Max P-Max OPTIONAL, -- Need OP + s-IntraSearch ReselectionThreshold OPTIONAL, -- Need OP + allowedMeasBandwidth AllowedMeasBandwidth OPTIONAL, -- Need OP + presenceAntennaPort1 PresenceAntennaPort1, + neighCellConfig NeighCellConfig, + t-ReselectionEUTRA T-Reselection, + t-ReselectionEUTRA-SF SpeedStateScaleFactors OPTIONAL -- Need OP + }, + ..., + lateNonCriticalExtension OCTET STRING OPTIONAL, + [[ s-IntraSearch-v920 SEQUENCE { + s-IntraSearchP-r9 ReselectionThreshold, + s-IntraSearchQ-r9 ReselectionThresholdQ-r9 + } OPTIONAL, -- Need OP + s-NonIntraSearch-v920 SEQUENCE { + s-NonIntraSearchP-r9 ReselectionThreshold, + s-NonIntraSearchQ-r9 ReselectionThresholdQ-r9 + } OPTIONAL, -- Need OP + q-QualMin-r9 Q-QualMin-r9 OPTIONAL, -- Need OP + threshServingLowQ-r9 ReselectionThresholdQ-r9 OPTIONAL -- Need OP + ]], + [[ q-QualMinWB-r11 Q-QualMin-r9 OPTIONAL -- Cond WB-RSRQ + ]], + [[ q-QualMinRSRQ-OnAllSymbols-r12 Q-QualMin-r9 OPTIONAL -- Cond RSRQ + ]] +} + + +SystemInformationBlockType4 ::= SEQUENCE { + intraFreqNeighCellList IntraFreqNeighCellList OPTIONAL, -- Need OR + intraFreqBlackCellList IntraFreqBlackCellList OPTIONAL, -- Need OR + csg-PhysCellIdRange PhysCellIdRange OPTIONAL, -- Cond CSG + ..., + lateNonCriticalExtension OCTET STRING OPTIONAL +} + +IntraFreqNeighCellList ::= SEQUENCE (SIZE (1..maxCellIntra)) OF IntraFreqNeighCellInfo + +IntraFreqNeighCellInfo ::= SEQUENCE { + physCellId PhysCellId, + q-OffsetCell Q-OffsetRange, + ... +} + +IntraFreqBlackCellList ::= SEQUENCE (SIZE (1..maxCellBlack)) OF PhysCellIdRange + + +SystemInformationBlockType5 ::= SEQUENCE { + interFreqCarrierFreqList InterFreqCarrierFreqList, + ..., + lateNonCriticalExtension OCTET STRING (CONTAINING SystemInformationBlockType5-v8h0-IEs) OPTIONAL, + [[ interFreqCarrierFreqList-v1250 InterFreqCarrierFreqList-v1250 OPTIONAL, -- Need OR + interFreqCarrierFreqListExt-r12 InterFreqCarrierFreqListExt-r12 OPTIONAL -- Need OR + ]] +} + +SystemInformationBlockType5-v8h0-IEs ::= SEQUENCE { + interFreqCarrierFreqList-v8h0 SEQUENCE (SIZE (1..maxFreq)) OF InterFreqCarrierFreqInfo-v8h0 OPTIONAL, -- Need OP + nonCriticalExtension SystemInformationBlockType5-v9e0-IEs OPTIONAL +} + +SystemInformationBlockType5-v9e0-IEs ::= SEQUENCE { + interFreqCarrierFreqList-v9e0 SEQUENCE (SIZE (1..maxFreq)) OF InterFreqCarrierFreqInfo-v9e0 OPTIONAL, -- Need OR + nonCriticalExtension +SEQUENCE {} OPTIONAL +} + +InterFreqCarrierFreqList ::= SEQUENCE (SIZE (1..maxFreq)) OF InterFreqCarrierFreqInfo + +InterFreqCarrierFreqList-v1250 ::= SEQUENCE (SIZE (1.. maxFreq)) OF InterFreqCarrierFreqInfo-v1250 + +InterFreqCarrierFreqListExt-r12 ::= SEQUENCE (SIZE (1.. maxFreq)) OF InterFreqCarrierFreqInfo-r12 + +InterFreqCarrierFreqInfo ::= SEQUENCE { + dl-CarrierFreq ARFCN-ValueEUTRA, + q-RxLevMin Q-RxLevMin, + p-Max P-Max OPTIONAL, -- Need OP + t-ReselectionEUTRA T-Reselection, + t-ReselectionEUTRA-SF SpeedStateScaleFactors OPTIONAL, -- Need OP + threshX-High ReselectionThreshold, + threshX-Low ReselectionThreshold, + allowedMeasBandwidth AllowedMeasBandwidth, + presenceAntennaPort1 PresenceAntennaPort1, + cellReselectionPriority CellReselectionPriority OPTIONAL, -- Need OP + neighCellConfig NeighCellConfig, + q-OffsetFreq Q-OffsetRange DEFAULT dB0, + interFreqNeighCellList InterFreqNeighCellList OPTIONAL, -- Need OR + interFreqBlackCellList InterFreqBlackCellList OPTIONAL, -- Need OR + ..., + [[ q-QualMin-r9 Q-QualMin-r9 OPTIONAL, -- Need OP + threshX-Q-r9 SEQUENCE { + threshX-HighQ-r9 ReselectionThresholdQ-r9, + threshX-LowQ-r9 ReselectionThresholdQ-r9 + } OPTIONAL -- Cond RSRQ + ]], + [[ q-QualMinWB-r11 Q-QualMin-r9 OPTIONAL -- Cond WB-RSRQ + ]] +} + +InterFreqCarrierFreqInfo-v8h0 ::= SEQUENCE { + multiBandInfoList MultiBandInfoList OPTIONAL -- Need OR +} + +InterFreqCarrierFreqInfo-v9e0 ::= SEQUENCE { + dl-CarrierFreq-v9e0 ARFCN-ValueEUTRA-v9e0 OPTIONAL, -- Cond dl-FreqMax + multiBandInfoList-v9e0 MultiBandInfoList-v9e0 OPTIONAL -- Need OR +} + +InterFreqCarrierFreqInfo-v1250 ::= SEQUENCE { + reducedMeasPerformance-r12 ENUMERATED {true} OPTIONAL, -- Need OP + q-QualMinRSRQ-OnAllSymbols-r12 Q-QualMin-r9 OPTIONAL -- Cond RSRQ2 +} + +InterFreqCarrierFreqInfo-r12 ::= SEQUENCE { + dl-CarrierFreq-r12 ARFCN-ValueEUTRA-r9, + q-RxLevMin-r12 Q-RxLevMin, + p-Max-r12 P-Max OPTIONAL, -- Need OP + t-ReselectionEUTRA-r12 T-Reselection, + t-ReselectionEUTRA-SF-r12 SpeedStateScaleFactors OPTIONAL, -- Need OP + threshX-High-r12 ReselectionThreshold, + threshX-Low-r12 ReselectionThreshold, + allowedMeasBandwidth-r12 AllowedMeasBandwidth, + presenceAntennaPort1-r12 PresenceAntennaPort1, + cellReselectionPriority-r12 CellReselectionPriority OPTIONAL, -- Need OP + neighCellConfig-r12 NeighCellConfig, + q-OffsetFreq-r12 Q-OffsetRange DEFAULT dB0, + interFreqNeighCellList-r12 InterFreqNeighCellList OPTIONAL, -- Need OR + interFreqBlackCellList-r12 InterFreqBlackCellList OPTIONAL, -- Need OR + q-QualMin-r12 Q-QualMin-r9 OPTIONAL, -- Need OP + threshX-Q-r12 SEQUENCE { + threshX-HighQ-r12 ReselectionThresholdQ-r9, + threshX-LowQ-r12 ReselectionThresholdQ-r9 + } OPTIONAL, -- Cond RSRQ + q-QualMinWB-r12 Q-QualMin-r9 OPTIONAL, -- Cond WB-RSRQ + multiBandInfoList-r12 MultiBandInfoList-r11 OPTIONAL, -- Need OR + reducedMeasPerformance-r12 ENUMERATED {true} OPTIONAL, -- Need OP + q-QualMinRSRQ-OnAllSymbols-r12 Q-QualMin-r9 OPTIONAL, -- Cond RSRQ2 +... +} + +InterFreqNeighCellList ::= SEQUENCE (SIZE (1..maxCellInter)) OF InterFreqNeighCellInfo + +InterFreqNeighCellInfo ::= SEQUENCE { + physCellId PhysCellId, + q-OffsetCell Q-OffsetRange +} + +InterFreqBlackCellList ::= SEQUENCE (SIZE (1..maxCellBlack)) OF PhysCellIdRange + + +SystemInformationBlockType6 ::= SEQUENCE { + carrierFreqListUTRA-FDD CarrierFreqListUTRA-FDD OPTIONAL, -- Need OR + carrierFreqListUTRA-TDD CarrierFreqListUTRA-TDD OPTIONAL, -- Need OR + t-ReselectionUTRA T-Reselection, + t-ReselectionUTRA-SF SpeedStateScaleFactors OPTIONAL, -- Need OP + ..., + lateNonCriticalExtension OCTET STRING (CONTAINING SystemInformationBlockType6-v8h0-IEs) OPTIONAL, + [[ carrierFreqListUTRA-FDD-v1250 SEQUENCE (SIZE (1..maxUTRA-FDD-Carrier)) OF + CarrierFreqInfoUTRA-v1250 OPTIONAL, -- Cond UTRA-FDD + carrierFreqListUTRA-TDD-v1250 SEQUENCE (SIZE (1..maxUTRA-TDD-Carrier)) OF + CarrierFreqInfoUTRA-v1250 OPTIONAL, -- Cond UTRA-TDD + carrierFreqListUTRA-FDD-Ext-r12 CarrierFreqListUTRA-FDD-Ext-r12 OPTIONAL, -- Cond UTRA-FDD + carrierFreqListUTRA-TDD-Ext-r12 CarrierFreqListUTRA-TDD-Ext-r12 OPTIONAL -- Cond UTRA-TDD + ]] +} + +SystemInformationBlockType6-v8h0-IEs ::= SEQUENCE { + carrierFreqListUTRA-FDD-v8h0 SEQUENCE (SIZE (1..maxUTRA-FDD-Carrier)) OF CarrierFreqInfoUTRA-FDD-v8h0 OPTIONAL, -- Cond UTRA-FDD + nonCriticalExtension +SEQUENCE {} OPTIONAL +} + +CarrierFreqInfoUTRA-v1250 ::= SEQUENCE { + reducedMeasPerformance-r12 ENUMERATED {true} OPTIONAL -- Need OP +} + +CarrierFreqListUTRA-FDD ::= SEQUENCE (SIZE (1..maxUTRA-FDD-Carrier)) OF CarrierFreqUTRA-FDD + +CarrierFreqUTRA-FDD ::= SEQUENCE { + carrierFreq ARFCN-ValueUTRA, + cellReselectionPriority CellReselectionPriority OPTIONAL, -- Need OP + threshX-High ReselectionThreshold, + threshX-Low ReselectionThreshold, + q-RxLevMin INTEGER (-60..-13), + p-MaxUTRA INTEGER (-50..33), + q-QualMin INTEGER (-24..0), + ..., + [[ threshX-Q-r9 SEQUENCE { + threshX-HighQ-r9 ReselectionThresholdQ-r9, + threshX-LowQ-r9 ReselectionThresholdQ-r9 + } OPTIONAL -- Cond RSRQ + ]] +} + +CarrierFreqInfoUTRA-FDD-v8h0 ::= SEQUENCE { + multiBandInfoList SEQUENCE (SIZE (1..maxMultiBands)) OF FreqBandIndicator-UTRA-FDD OPTIONAL -- Need OR +} + +CarrierFreqListUTRA-FDD-Ext-r12 ::= SEQUENCE (SIZE (1..maxUTRA-FDD-Carrier)) OF + CarrierFreqUTRA-FDD-Ext-r12 + +CarrierFreqUTRA-FDD-Ext-r12 ::= SEQUENCE { + carrierFreq-r12 ARFCN-ValueUTRA, + cellReselectionPriority-r12 CellReselectionPriority OPTIONAL, -- Need OP + threshX-High-r12 ReselectionThreshold, + threshX-Low-r12 ReselectionThreshold, + q-RxLevMin-r12 INTEGER (-60..-13), + p-MaxUTRA-r12 INTEGER (-50..33), + q-QualMin-r12 INTEGER (-24..0), + threshX-Q-r12 SEQUENCE { + threshX-HighQ-r12 ReselectionThresholdQ-r9, + threshX-LowQ-r12 ReselectionThresholdQ-r9 + } OPTIONAL, -- Cond RSRQ + multiBandInfoList-r12 SEQUENCE (SIZE (1..maxMultiBands)) OF FreqBandIndicator-UTRA-FDD OPTIONAL, -- Need OR + reducedMeasPerformance-r12 ENUMERATED {true} OPTIONAL, -- Need OP + ... +} + +CarrierFreqListUTRA-TDD ::= SEQUENCE (SIZE (1..maxUTRA-TDD-Carrier)) OF CarrierFreqUTRA-TDD + +CarrierFreqUTRA-TDD ::= SEQUENCE { + carrierFreq ARFCN-ValueUTRA, + cellReselectionPriority CellReselectionPriority OPTIONAL, -- Need OP + threshX-High ReselectionThreshold, + threshX-Low ReselectionThreshold, + q-RxLevMin INTEGER (-60..-13), + p-MaxUTRA INTEGER (-50..33), + ... +} + +CarrierFreqListUTRA-TDD-Ext-r12 ::= SEQUENCE (SIZE (1..maxUTRA-TDD-Carrier)) OF + CarrierFreqUTRA-TDD-r12 + +CarrierFreqUTRA-TDD-r12 ::= SEQUENCE { + carrierFreq-r12 ARFCN-ValueUTRA, + cellReselectionPriority-r12 CellReselectionPriority OPTIONAL, -- Need OP + threshX-High-r12 ReselectionThreshold, + threshX-Low-r12 ReselectionThreshold, + q-RxLevMin-r12 INTEGER (-60..-13), + p-MaxUTRA-r12 INTEGER (-50..33), + reducedMeasPerformance-r12 ENUMERATED {true} OPTIONAL, -- Need OP + ... +} + +FreqBandIndicator-UTRA-FDD ::= INTEGER (1..86) + + +SystemInformationBlockType7 ::= SEQUENCE { + t-ReselectionGERAN T-Reselection, + t-ReselectionGERAN-SF SpeedStateScaleFactors OPTIONAL, -- Need OR + carrierFreqsInfoList CarrierFreqsInfoListGERAN OPTIONAL, -- Need OR + ..., + lateNonCriticalExtension OCTET STRING OPTIONAL +} + +CarrierFreqsInfoListGERAN ::= SEQUENCE (SIZE (1..maxGNFG)) OF CarrierFreqsInfoGERAN + +CarrierFreqsInfoGERAN ::= SEQUENCE { + carrierFreqs CarrierFreqsGERAN, + commonInfo SEQUENCE { + cellReselectionPriority CellReselectionPriority OPTIONAL, -- Need OP + ncc-Permitted BIT STRING (SIZE (8)), + q-RxLevMin INTEGER (0..45), + p-MaxGERAN INTEGER (0..39) OPTIONAL, -- Need OP + threshX-High ReselectionThreshold, + threshX-Low ReselectionThreshold + }, + ... +} + + +SystemInformationBlockType8 ::= SEQUENCE { + systemTimeInfo SystemTimeInfoCDMA2000 OPTIONAL, -- Need OR + searchWindowSize INTEGER (0..15) OPTIONAL, -- Need OR + parametersHRPD SEQUENCE { + preRegistrationInfoHRPD PreRegistrationInfoHRPD, + cellReselectionParametersHRPD CellReselectionParametersCDMA2000 OPTIONAL -- Need OR + } OPTIONAL, -- Need OR + parameters1XRTT SEQUENCE { + csfb-RegistrationParam1XRTT CSFB-RegistrationParam1XRTT OPTIONAL, -- Need OP + longCodeState1XRTT BIT STRING (SIZE (42)) OPTIONAL, -- Need OR + cellReselectionParameters1XRTT CellReselectionParametersCDMA2000 OPTIONAL -- Need OR + } OPTIONAL, -- Need OR + ..., + lateNonCriticalExtension OCTET STRING OPTIONAL, + [[ csfb-SupportForDualRxUEs-r9 BOOLEAN OPTIONAL, -- Need OR + cellReselectionParametersHRPD-v920 CellReselectionParametersCDMA2000-v920 OPTIONAL, -- Cond NCL-HRPD + cellReselectionParameters1XRTT-v920 CellReselectionParametersCDMA2000-v920 OPTIONAL, -- Cond NCL-1XRTT + csfb-RegistrationParam1XRTT-v920 CSFB-RegistrationParam1XRTT-v920 OPTIONAL, -- Cond REG-1XRTT + ac-BarringConfig1XRTT-r9 AC-BarringConfig1XRTT-r9 OPTIONAL -- Cond REG-1XRTT + ]], + [[ csfb-DualRxTxSupport-r10 ENUMERATED {true} OPTIONAL -- Cond REG-1XRTT + ]], + [[ sib8-PerPLMN-List-r11 SIB8-PerPLMN-List-r11 OPTIONAL -- Need OR + ]] +} + +CellReselectionParametersCDMA2000 ::= SEQUENCE { + bandClassList BandClassListCDMA2000, + neighCellList NeighCellListCDMA2000, + t-ReselectionCDMA2000 T-Reselection, + t-ReselectionCDMA2000-SF SpeedStateScaleFactors OPTIONAL -- Need OP +} + +CellReselectionParametersCDMA2000-r11 ::= SEQUENCE { + bandClassList BandClassListCDMA2000, + neighCellList-r11 SEQUENCE (SIZE (1..16)) OF NeighCellCDMA2000-r11, + t-ReselectionCDMA2000 T-Reselection, + t-ReselectionCDMA2000-SF SpeedStateScaleFactors OPTIONAL -- Need OP +} + +CellReselectionParametersCDMA2000-v920 ::= SEQUENCE { + neighCellList-v920 NeighCellListCDMA2000-v920 +} + +NeighCellListCDMA2000 ::= SEQUENCE (SIZE (1..16)) OF NeighCellCDMA2000 + +NeighCellCDMA2000 ::= SEQUENCE { + bandClass BandclassCDMA2000, + neighCellsPerFreqList NeighCellsPerBandclassListCDMA2000 +} + +NeighCellCDMA2000-r11 ::= SEQUENCE { + bandClass BandclassCDMA2000, + neighFreqInfoList-r11 SEQUENCE (SIZE (1..16)) OF NeighCellsPerBandclassCDMA2000-r11 +} + +NeighCellsPerBandclassListCDMA2000 ::= SEQUENCE (SIZE (1..16)) OF NeighCellsPerBandclassCDMA2000 + +NeighCellsPerBandclassCDMA2000 ::= SEQUENCE { + arfcn ARFCN-ValueCDMA2000, + physCellIdList PhysCellIdListCDMA2000 +} + +NeighCellsPerBandclassCDMA2000-r11 ::= SEQUENCE { + arfcn ARFCN-ValueCDMA2000, + physCellIdList-r11 SEQUENCE (SIZE (1..40)) OF PhysCellIdCDMA2000 +} + +NeighCellListCDMA2000-v920 ::= SEQUENCE (SIZE (1..16)) OF NeighCellCDMA2000-v920 + +NeighCellCDMA2000-v920 ::= SEQUENCE { + neighCellsPerFreqList-v920 NeighCellsPerBandclassListCDMA2000-v920 +} + +NeighCellsPerBandclassListCDMA2000-v920 ::= SEQUENCE (SIZE (1..16)) OF NeighCellsPerBandclassCDMA2000-v920 + +NeighCellsPerBandclassCDMA2000-v920 ::= SEQUENCE { + physCellIdList-v920 PhysCellIdListCDMA2000-v920 +} + +PhysCellIdListCDMA2000 ::= SEQUENCE (SIZE (1..16)) OF PhysCellIdCDMA2000 + +PhysCellIdListCDMA2000-v920 ::= SEQUENCE (SIZE (0..24)) OF PhysCellIdCDMA2000 + +BandClassListCDMA2000 ::= SEQUENCE (SIZE (1..maxCDMA-BandClass)) OF BandClassInfoCDMA2000 + +BandClassInfoCDMA2000 ::= SEQUENCE { + bandClass BandclassCDMA2000, + cellReselectionPriority CellReselectionPriority OPTIONAL, -- Need OP + threshX-High INTEGER (0..63), + threshX-Low INTEGER (0..63), + ... +} + +AC-BarringConfig1XRTT-r9 ::= SEQUENCE { + ac-Barring0to9-r9 INTEGER (0..63), + ac-Barring10-r9 INTEGER (0..7), + ac-Barring11-r9 INTEGER (0..7), + ac-Barring12-r9 INTEGER (0..7), + ac-Barring13-r9 INTEGER (0..7), + ac-Barring14-r9 INTEGER (0..7), + ac-Barring15-r9 INTEGER (0..7), + ac-BarringMsg-r9 INTEGER (0..7), + ac-BarringReg-r9 INTEGER (0..7), + ac-BarringEmg-r9 INTEGER (0..7) +} + +SIB8-PerPLMN-List-r11 ::= SEQUENCE (SIZE (1..maxPLMN-r11)) OF SIB8-PerPLMN-r11 + +SIB8-PerPLMN-r11 ::= SEQUENCE { + plmn-Identity-r11 INTEGER (1..maxPLMN-r11), + parametersCDMA2000-r11 CHOICE { + explicitValue ParametersCDMA2000-r11, + defaultValue NULL + } +} + +ParametersCDMA2000-r11 ::= SEQUENCE { + systemTimeInfo-r11 CHOICE { + explicitValue SystemTimeInfoCDMA2000, + defaultValue NULL + } OPTIONAL, -- Need OR + searchWindowSize-r11 INTEGER (0..15), + parametersHRPD-r11 SEQUENCE { + preRegistrationInfoHRPD-r11 PreRegistrationInfoHRPD, + cellReselectionParametersHRPD-r11 CellReselectionParametersCDMA2000-r11 OPTIONAL -- Need OR + } OPTIONAL, -- Need OR + parameters1XRTT-r11 SEQUENCE { + csfb-RegistrationParam1XRTT-r11 CSFB-RegistrationParam1XRTT OPTIONAL, -- Need OP + csfb-RegistrationParam1XRTT-Ext-r11 CSFB-RegistrationParam1XRTT-v920 OPTIONAL, -- Cond REG-1XRTT-PerPLMN + longCodeState1XRTT-r11 BIT STRING (SIZE (42)) OPTIONAL, -- Cond PerPLMN-LC + cellReselectionParameters1XRTT-r11 CellReselectionParametersCDMA2000-r11 OPTIONAL, -- Need OR + ac-BarringConfig1XRTT-r11 AC-BarringConfig1XRTT-r9 OPTIONAL, -- Cond REG-1XRTT-PerPLMN + csfb-SupportForDualRxUEs-r11 BOOLEAN OPTIONAL, -- Need OR + csfb-DualRxTxSupport-r11 ENUMERATED {true} OPTIONAL -- Cond REG-1XRTT-PerPLMN + } OPTIONAL, -- Need OR + ... +} + + +SystemInformationBlockType9 ::= SEQUENCE { + hnb-Name OCTET STRING (SIZE(1..48)) OPTIONAL, -- Need OR + ..., + lateNonCriticalExtension OCTET STRING OPTIONAL +} + + +SystemInformationBlockType10 ::= SEQUENCE { + messageIdentifier BIT STRING (SIZE (16)), + serialNumber BIT STRING (SIZE (16)), + warningType OCTET STRING (SIZE (2)), + dummy OCTET STRING (SIZE (50)) OPTIONAL, -- Need OP + ..., + lateNonCriticalExtension OCTET STRING OPTIONAL +} + + +SystemInformationBlockType11 ::= SEQUENCE { + messageIdentifier BIT STRING (SIZE (16)), + serialNumber BIT STRING (SIZE (16)), + warningMessageSegmentType ENUMERATED {notLastSegment, lastSegment}, + warningMessageSegmentNumber INTEGER (0..63), + warningMessageSegment OCTET STRING, + dataCodingScheme OCTET STRING (SIZE (1)) OPTIONAL, -- Cond Segment1 + ..., + lateNonCriticalExtension OCTET STRING OPTIONAL +} + + +SystemInformationBlockType12-r9 ::= SEQUENCE { + messageIdentifier-r9 BIT STRING (SIZE (16)), + serialNumber-r9 BIT STRING (SIZE (16)), + warningMessageSegmentType-r9 ENUMERATED {notLastSegment, lastSegment}, + warningMessageSegmentNumber-r9 INTEGER (0..63), + warningMessageSegment-r9 OCTET STRING, + dataCodingScheme-r9 OCTET STRING (SIZE (1)) OPTIONAL, -- Cond Segment1 + lateNonCriticalExtension OCTET STRING OPTIONAL, + ... +} + + +SystemInformationBlockType13-r9 ::= SEQUENCE { + mbsfn-AreaInfoList-r9 MBSFN-AreaInfoList-r9, + notificationConfig-r9 MBMS-NotificationConfig-r9, + lateNonCriticalExtension OCTET STRING OPTIONAL, + ... +} + + +SystemInformationBlockType14-r11 ::= SEQUENCE { + eab-Param-r11 CHOICE { + eab-Common-r11 EAB-Config-r11, + eab-PerPLMN-List-r11 SEQUENCE (SIZE (1..maxPLMN-r11)) OF EAB-ConfigPLMN-r11 + } OPTIONAL, -- Need OR + lateNonCriticalExtension OCTET STRING OPTIONAL, + ... +} + +EAB-ConfigPLMN-r11 ::= SEQUENCE { + eab-Config-r11 EAB-Config-r11 OPTIONAL -- Need OR +} + +EAB-Config-r11 ::= SEQUENCE { + eab-Category-r11 ENUMERATED {a, b, c}, + eab-BarringBitmap-r11 BIT STRING (SIZE (10)) +} + + +SystemInformationBlockType15-r11 ::= SEQUENCE { + mbms-SAI-IntraFreq-r11 MBMS-SAI-List-r11 OPTIONAL, -- Need OR + mbms-SAI-InterFreqList-r11 MBMS-SAI-InterFreqList-r11 OPTIONAL, -- Need OR + lateNonCriticalExtension OCTET STRING OPTIONAL, + ..., + [[ mbms-SAI-InterFreqList-v1140 MBMS-SAI-InterFreqList-v1140 OPTIONAL -- Cond InterFreq + ]] +} + +MBMS-SAI-List-r11 ::= SEQUENCE (SIZE (1..maxSAI-MBMS-r11)) OF MBMS-SAI-r11 + +MBMS-SAI-r11 ::= INTEGER (0..65535) + +MBMS-SAI-InterFreqList-r11 ::= SEQUENCE (SIZE (1..maxFreq)) OF MBMS-SAI-InterFreq-r11 + +MBMS-SAI-InterFreqList-v1140 ::= SEQUENCE (SIZE (1..maxFreq)) OF MBMS-SAI-InterFreq-v1140 + +MBMS-SAI-InterFreq-r11 ::= SEQUENCE { + dl-CarrierFreq-r11 ARFCN-ValueEUTRA-r9, + mbms-SAI-List-r11 MBMS-SAI-List-r11 +} + +MBMS-SAI-InterFreq-v1140 ::= SEQUENCE { + multiBandInfoList-r11 MultiBandInfoList-r11 OPTIONAL -- Need OR +} + + + +SystemInformationBlockType16-r11 ::= SEQUENCE { + timeInfo-r11 SEQUENCE { + timeInfoUTC-r11 INTEGER (0..549755813887), + dayLightSavingTime-r11 BIT STRING (SIZE (2)) OPTIONAL, -- Need OR + leapSeconds-r11 INTEGER (-127..128) OPTIONAL, -- Need OR + localTimeOffset-r11 INTEGER (-63..64) OPTIONAL -- Need OR + } OPTIONAL, -- Need OR + lateNonCriticalExtension OCTET STRING OPTIONAL, + ... +} + + +SystemInformationBlockType17-r12 ::= SEQUENCE { + wlan-OffloadInfoPerPLMN-List-r12 SEQUENCE (SIZE (1..maxPLMN-r11)) OF + WLAN-OffloadInfoPerPLMN-r12 OPTIONAL, -- Need OR + lateNonCriticalExtension OCTET STRING OPTIONAL, + ... +} + +WLAN-OffloadInfoPerPLMN-r12 ::= SEQUENCE { + wlan-OffloadConfigCommon-r12 WLAN-OffloadConfig-r12 OPTIONAL, -- Need OR + wlan-Id-List-r12 WLAN-Id-List-r12 OPTIONAL, -- Need OR + ... +} + +WLAN-Id-List-r12 ::= SEQUENCE (SIZE (1..maxWLAN-Id-r12)) OF WLAN-Identifiers-r12 + +WLAN-Identifiers-r12 ::= SEQUENCE { + ssid-r12 OCTET STRING (SIZE (1..32)) OPTIONAL, -- Need OR + bssid-r12 OCTET STRING (SIZE (6)) OPTIONAL, -- Need OR + hessid-r12 OCTET STRING (SIZE (6)) OPTIONAL, -- Need OR + ... +} + + +SystemInformationBlockType18-r12 ::= SEQUENCE { + commConfig-r12 SEQUENCE { + commRxPool-r12 SL-CommRxPoolList-r12, + commTxPoolNormalCommon-r12 SL-CommTxPoolList-r12 OPTIONAL, -- Need OR + commTxPoolExceptional-r12 SL-CommTxPoolList-r12 OPTIONAL, -- Need OR + commSyncConfig-r12 SL-SyncConfigList-r12 OPTIONAL -- Need OR + } OPTIONAL, -- Need OR + lateNonCriticalExtension OCTET STRING OPTIONAL, + ... +} + + +SystemInformationBlockType19-r12 ::= SEQUENCE { + discConfig-r12 SEQUENCE { + discRxPool-r12 SL-DiscRxPoolList-r12, + discTxPoolCommon-r12 SL-DiscTxPoolList-r12 OPTIONAL, -- Need OR + discTxPowerInfo-r12 SL-DiscTxPowerInfoList-r12 OPTIONAL, -- Cond Tx + discSyncConfig-r12 SL-SyncConfigList-r12 OPTIONAL -- Need OR + } OPTIONAL, -- Need OR + discInterFreqList-r12 SL-CarrierFreqInfoList-r12 OPTIONAL, -- Need OR + lateNonCriticalExtension OCTET STRING OPTIONAL, + ... +} + +SL-CarrierFreqInfoList-r12 ::= SEQUENCE (SIZE (1..maxFreq)) OF SL-CarrierFreqInfo-r12 + +SL-CarrierFreqInfo-r12::= SEQUENCE { + carrierFreq-r12 ARFCN-ValueEUTRA-r9, + plmn-IdentityList-r12 PLMN-IdentityList4-r12 OPTIONAL -- Need OP +} + +PLMN-IdentityList4-r12 ::= SEQUENCE (SIZE (1..maxPLMN-r11)) OF PLMN-IdentityInfo2-r12 + +PLMN-IdentityInfo2-r12 ::= CHOICE { + plmn-Index-r12 INTEGER (1..maxPLMN-r11), + plmnIdentity-r12 PLMN-Identity +} + + +AntennaInfoCommon ::= SEQUENCE { + antennaPortsCount ENUMERATED {an1, an2, an4, spare1} +} + +AntennaInfoDedicated ::= SEQUENCE { + transmissionMode ENUMERATED { + tm1, tm2, tm3, tm4, tm5, tm6, + tm7, tm8-v920}, + codebookSubsetRestriction CHOICE { + n2TxAntenna-tm3 BIT STRING (SIZE (2)), + n4TxAntenna-tm3 BIT STRING (SIZE (4)), + n2TxAntenna-tm4 BIT STRING (SIZE (6)), + n4TxAntenna-tm4 BIT STRING (SIZE (64)), + n2TxAntenna-tm5 BIT STRING (SIZE (4)), + n4TxAntenna-tm5 BIT STRING (SIZE (16)), + n2TxAntenna-tm6 BIT STRING (SIZE (4)), + n4TxAntenna-tm6 BIT STRING (SIZE (16)) + } OPTIONAL, -- Cond TM + ue-TransmitAntennaSelection CHOICE{ + release NULL, + setup ENUMERATED {closedLoop, openLoop} + } +} + +AntennaInfoDedicated-v920 ::= SEQUENCE { + codebookSubsetRestriction-v920 CHOICE { + n2TxAntenna-tm8-r9 BIT STRING (SIZE (6)), + n4TxAntenna-tm8-r9 BIT STRING (SIZE (32)) + } OPTIONAL -- Cond TM8 +} + +AntennaInfoDedicated-r10 ::= SEQUENCE { + transmissionMode-r10 ENUMERATED { + tm1, tm2, tm3, tm4, tm5, tm6, tm7, tm8-v920, + tm9-v1020, tm10-v1130, spare6, spare5, spare4, + spare3, spare2, spare1}, + codebookSubsetRestriction-r10 BIT STRING OPTIONAL, -- Cond TMX + ue-TransmitAntennaSelection CHOICE{ + release NULL, + setup ENUMERATED {closedLoop, openLoop} + } +} + +AntennaInfoDedicated-v1250 ::= SEQUENCE { + alternativeCodebookEnabledFor4TX-r12 BOOLEAN +} + + +AntennaInfoUL-r10 ::= SEQUENCE { + transmissionModeUL-r10 ENUMERATED {tm1, tm2, spare6, spare5, + spare4, spare3, spare2, spare1} OPTIONAL, -- Need OR + fourAntennaPortActivated-r10 ENUMERATED {setup} OPTIONAL -- Need OR +} + + +CQI-ReportConfig ::= SEQUENCE { + cqi-ReportModeAperiodic CQI-ReportModeAperiodic OPTIONAL, -- Need OR + nomPDSCH-RS-EPRE-Offset INTEGER (-1..6), + cqi-ReportPeriodic CQI-ReportPeriodic OPTIONAL -- Need ON +} + +CQI-ReportConfig-v920 ::= SEQUENCE { + cqi-Mask-r9 ENUMERATED {setup} OPTIONAL, -- Cond cqi-Setup + pmi-RI-Report-r9 ENUMERATED {setup} OPTIONAL -- Cond PMIRI +} + +CQI-ReportConfig-r10 ::= SEQUENCE { + cqi-ReportAperiodic-r10 CQI-ReportAperiodic-r10 OPTIONAL, -- Need ON + nomPDSCH-RS-EPRE-Offset INTEGER (-1..6), + cqi-ReportPeriodic-r10 CQI-ReportPeriodic-r10 OPTIONAL, -- Need ON + pmi-RI-Report-r9 ENUMERATED {setup} OPTIONAL, -- Cond PMIRIPCell + csi-SubframePatternConfig-r10 CHOICE { + release NULL, + setup SEQUENCE { + csi-MeasSubframeSet1-r10 MeasSubframePattern-r10, + csi-MeasSubframeSet2-r10 MeasSubframePattern-r10 + } + } OPTIONAL -- Need ON +} + +CQI-ReportConfig-v1130 ::= SEQUENCE { + cqi-ReportPeriodic-v1130 CQI-ReportPeriodic-v1130, + cqi-ReportBoth-r11 CQI-ReportBoth-r11 +} + +CQI-ReportConfig-v1250 ::= SEQUENCE { + csi-SubframePatternConfig-r12 CHOICE { + release NULL, + setup SEQUENCE { + csi-MeasSubframeSets-r12 BIT STRING (SIZE (10)) + } + } OPTIONAL, -- Need ON + cqi-ReportBoth-v1250 CQI-ReportBoth-v1250 OPTIONAL, -- Need ON + cqi-ReportAperiodic-v1250 CQI-ReportAperiodic-v1250 OPTIONAL, -- Need ON + altCQI-Table-r12 ENUMERATED { + allSubframes, csi-SubframeSet1, + csi-SubframeSet2, spare1} OPTIONAL -- Need OP +} + +CQI-ReportConfigSCell-r10 ::= SEQUENCE { + cqi-ReportModeAperiodic-r10 CQI-ReportModeAperiodic OPTIONAL, -- Need OR + nomPDSCH-RS-EPRE-Offset-r10 INTEGER (-1..6), + cqi-ReportPeriodicSCell-r10 CQI-ReportPeriodic-r10 OPTIONAL, -- Need ON + pmi-RI-Report-r10 ENUMERATED {setup} OPTIONAL -- Cond PMIRISCell +} + +CQI-ReportPeriodic ::= CHOICE { + release NULL, + setup SEQUENCE { + cqi-PUCCH-ResourceIndex INTEGER (0..1185), + cqi-pmi-ConfigIndex INTEGER (0..1023), + cqi-FormatIndicatorPeriodic CHOICE { + widebandCQI NULL, + subbandCQI SEQUENCE { + k INTEGER (1..4) + } + }, + ri-ConfigIndex INTEGER (0..1023) OPTIONAL, -- Need OR + simultaneousAckNackAndCQI BOOLEAN + } +} + +CQI-ReportPeriodic-r10 ::= CHOICE { + release NULL, + setup SEQUENCE { + cqi-PUCCH-ResourceIndex-r10 INTEGER (0..1184), + cqi-PUCCH-ResourceIndexP1-r10 INTEGER (0..1184) OPTIONAL, -- Need OR + cqi-pmi-ConfigIndex INTEGER (0..1023), + cqi-FormatIndicatorPeriodic-r10 CHOICE { + widebandCQI-r10 SEQUENCE { + csi-ReportMode-r10 ENUMERATED {submode1, submode2} OPTIONAL -- Need OR + }, + subbandCQI-r10 SEQUENCE { + k INTEGER (1..4), + periodicityFactor-r10 ENUMERATED {n2, n4} + } + }, + ri-ConfigIndex INTEGER (0..1023) OPTIONAL, -- Need OR + simultaneousAckNackAndCQI BOOLEAN, + cqi-Mask-r9 ENUMERATED {setup} OPTIONAL, -- Need OR + csi-ConfigIndex-r10 CHOICE { + release NULL, + setup SEQUENCE { + cqi-pmi-ConfigIndex2-r10 INTEGER (0..1023), + ri-ConfigIndex2-r10 INTEGER (0..1023) OPTIONAL -- Need OR + } + } OPTIONAL -- Need ON + } +} + +CQI-ReportPeriodic-v1130 ::= SEQUENCE { + simultaneousAckNackAndCQI-Format3-r11 ENUMERATED {setup} OPTIONAL, -- Need OR + cqi-ReportPeriodicProcExtToReleaseList-r11 CQI-ReportPeriodicProcExtToReleaseList-r11 OPTIONAL, -- Need ON + cqi-ReportPeriodicProcExtToAddModList-r11 CQI-ReportPeriodicProcExtToAddModList-r11 OPTIONAL -- Need ON +} + +CQI-ReportPeriodicProcExtToAddModList-r11 ::= SEQUENCE (SIZE (1..maxCQI-ProcExt-r11)) OF CQI-ReportPeriodicProcExt-r11 + +CQI-ReportPeriodicProcExtToReleaseList-r11 ::= SEQUENCE (SIZE (1..maxCQI-ProcExt-r11)) OF CQI-ReportPeriodicProcExtId-r11 + +CQI-ReportPeriodicProcExt-r11 ::= SEQUENCE { + cqi-ReportPeriodicProcExtId-r11 CQI-ReportPeriodicProcExtId-r11, + cqi-pmi-ConfigIndex-r11 INTEGER (0..1023), + cqi-FormatIndicatorPeriodic-r11 CHOICE { + widebandCQI-r11 SEQUENCE { + csi-ReportMode-r11 ENUMERATED {submode1, submode2} OPTIONAL -- Need OR + }, + subbandCQI-r11 SEQUENCE { + k INTEGER (1..4), + periodicityFactor-r11 ENUMERATED {n2, n4} + } + }, + ri-ConfigIndex-r11 INTEGER (0..1023) OPTIONAL, -- Need OR + csi-ConfigIndex-r11 CHOICE { + release NULL, + setup SEQUENCE { + cqi-pmi-ConfigIndex2-r11 INTEGER (0..1023), + ri-ConfigIndex2-r11 INTEGER (0..1023) OPTIONAL -- Need OR + } + } OPTIONAL, -- Need ON + ... +} + +CQI-ReportAperiodic-r10 ::= CHOICE { + release NULL, + setup SEQUENCE { + cqi-ReportModeAperiodic-r10 CQI-ReportModeAperiodic, + aperiodicCSI-Trigger-r10 SEQUENCE { + trigger1-r10 BIT STRING (SIZE (8)), + trigger2-r10 BIT STRING (SIZE (8)) + } OPTIONAL -- Need OR + } +} + +CQI-ReportAperiodic-v1250 ::= CHOICE { + release NULL, + setup SEQUENCE { + aperiodicCSI-Trigger-v1250 SEQUENCE { + trigger-SubframeSetIndicator-r12 ENUMERATED {s1, s2}, + trigger1-SubframeSetIndicator-r12 BIT STRING (SIZE (8)), + trigger2-SubframeSetIndicator-r12 BIT STRING (SIZE (8)) + } + } +} + +CQI-ReportAperiodicProc-r11 ::= SEQUENCE { + cqi-ReportModeAperiodic-r11 CQI-ReportModeAperiodic, + trigger01-r11 BOOLEAN, + trigger10-r11 BOOLEAN, + trigger11-r11 BOOLEAN +} + +CQI-ReportModeAperiodic ::= ENUMERATED { + rm12, rm20, rm22, rm30, rm31, + rm32-v1250, spare2, spare1 +} + +CQI-ReportBoth-r11 ::= SEQUENCE { + csi-IM-ConfigToReleaseList-r11 CSI-IM-ConfigToReleaseList-r11 OPTIONAL, -- Need ON + csi-IM-ConfigToAddModList-r11 CSI-IM-ConfigToAddModList-r11 OPTIONAL, -- Need ON + csi-ProcessToReleaseList-r11 CSI-ProcessToReleaseList-r11 OPTIONAL, -- Need ON + csi-ProcessToAddModList-r11 CSI-ProcessToAddModList-r11 OPTIONAL -- Need ON +} + +CQI-ReportBoth-v1250 ::= SEQUENCE { + csi-IM-ConfigToReleaseListExt-r12 CSI-IM-ConfigId-v1250 OPTIONAL, -- Need ON + csi-IM-ConfigToAddModListExt-r12 CSI-IM-ConfigExt-r12 OPTIONAL -- Need ON +} + +CSI-IM-ConfigToAddModList-r11 ::= SEQUENCE (SIZE (1..maxCSI-IM-r11)) OF CSI-IM-Config-r11 + +CSI-IM-ConfigToReleaseList-r11 ::= SEQUENCE (SIZE (1..maxCSI-IM-r11)) OF CSI-IM-ConfigId-r11 + +CSI-ProcessToAddModList-r11 ::= SEQUENCE (SIZE (1..maxCSI-Proc-r11)) OF CSI-Process-r11 + +CSI-ProcessToReleaseList-r11 ::= SEQUENCE (SIZE (1..maxCSI-Proc-r11)) OF CSI-ProcessId-r11 + +CQI-ReportBothProc-r11 ::= SEQUENCE { + ri-Ref-CSI-ProcessId-r11 CSI-ProcessId-r11 OPTIONAL, -- Need OR + pmi-RI-Report-r11 ENUMERATED {setup} OPTIONAL -- Need OR +} + + + +CQI-ReportPeriodicProcExtId-r11 ::= INTEGER (1..maxCQI-ProcExt-r11) + + +CrossCarrierSchedulingConfig-r10 ::= SEQUENCE { + schedulingCellInfo-r10 CHOICE { + own-r10 SEQUENCE { -- No cross carrier scheduling + cif-Presence-r10 BOOLEAN + }, + other-r10 SEQUENCE { -- Cross carrier scheduling + schedulingCellId-r10 ServCellIndex-r10, + pdsch-Start-r10 INTEGER (1..4) + } + } +} + + +CSI-IM-Config-r11 ::= SEQUENCE { + csi-IM-ConfigId-r11 CSI-IM-ConfigId-r11, + resourceConfig-r11 INTEGER (0..31), + subframeConfig-r11 INTEGER (0..154), + ... +} + +CSI-IM-ConfigExt-r12 ::= SEQUENCE { + csi-IM-ConfigId-v1250 CSI-IM-ConfigId-v1250, + resourceConfig-r12 INTEGER (0..31), + subframeConfig-r12 INTEGER (0..154), + ... +} + + +CSI-IM-ConfigId-r11 ::= INTEGER (1..maxCSI-IM-r11) +CSI-IM-ConfigId-r12 ::= INTEGER (1..maxCSI-IM-r12) +CSI-IM-ConfigId-v1250 ::= INTEGER (maxCSI-IM-r12) + + +CSI-Process-r11 ::= SEQUENCE { + csi-ProcessId-r11 CSI-ProcessId-r11, + csi-RS-ConfigNZPId-r11 CSI-RS-ConfigNZPId-r11, + csi-IM-ConfigId-r11 CSI-IM-ConfigId-r11, + p-C-AndCBSRList-r11 SEQUENCE (SIZE (1..2)) OF P-C-AndCBSR-r11, + cqi-ReportBothProc-r11 CQI-ReportBothProc-r11 OPTIONAL, -- Need OR + cqi-ReportPeriodicProcId-r11 INTEGER (0..maxCQI-ProcExt-r11) OPTIONAL, -- Need OR + cqi-ReportAperiodicProc-r11 CQI-ReportAperiodicProc-r11 OPTIONAL, -- Need OR + ..., + [[ alternativeCodebookEnabledFor4TXProc-r12 ENUMERATED {true} OPTIONAL, -- Need ON + csi-IM-ConfigIdList-r12 CHOICE { + release NULL, + setup SEQUENCE (SIZE (1..2)) OF CSI-IM-ConfigId-r12 + } OPTIONAL, -- Need ON + cqi-ReportAperiodicProc2-r12 CHOICE { + release NULL, + setup CQI-ReportAperiodicProc-r11 + } OPTIONAL -- Need ON + ]] +} + +P-C-AndCBSR-r11 ::= SEQUENCE { + p-C-r11 INTEGER (-8..15), + codebookSubsetRestriction-r11 BIT STRING +} + + +CSI-ProcessId-r11 ::= INTEGER (1..maxCSI-Proc-r11) + + +CSI-RS-Config-r10 ::= SEQUENCE { + csi-RS-r10 CHOICE { + release NULL, + setup SEQUENCE { + antennaPortsCount-r10 ENUMERATED {an1, an2, an4, an8}, + resourceConfig-r10 INTEGER (0..31), + subframeConfig-r10 INTEGER (0..154), + p-C-r10 INTEGER (-8..15) + } + } OPTIONAL, -- Need ON + zeroTxPowerCSI-RS-r10 ZeroTxPowerCSI-RS-Conf-r12 OPTIONAL -- Need ON +} + +CSI-RS-Config-v1250 ::= SEQUENCE { + zeroTxPowerCSI-RS2-r12 ZeroTxPowerCSI-RS-Conf-r12 OPTIONAL, -- Need ON + ds-ZeroTxPowerCSI-RS-r12 CHOICE { + release NULL, + setup SEQUENCE { + zeroTxPowerCSI-RS-List-r12 SEQUENCE (SIZE (1..maxDS-ZTP-CSI-RS-r12)) OF ZeroTxPowerCSI-RS-r12 + } + } OPTIONAL -- Need ON +} + +ZeroTxPowerCSI-RS-Conf-r12 ::= CHOICE { + release NULL, + setup ZeroTxPowerCSI-RS-r12 +} + +ZeroTxPowerCSI-RS-r12 ::= SEQUENCE { + zeroTxPowerResourceConfigList-r12 BIT STRING (SIZE (16)), + zeroTxPowerSubframeConfig-r12 INTEGER (0..154) +} + + +CSI-RS-ConfigNZP-r11 ::= SEQUENCE { + csi-RS-ConfigNZPId-r11 CSI-RS-ConfigNZPId-r11, + antennaPortsCount-r11 ENUMERATED {an1, an2, an4, an8}, + resourceConfig-r11 INTEGER (0..31), + subframeConfig-r11 INTEGER (0..154), + scramblingIdentity-r11 INTEGER (0..503), + qcl-CRS-Info-r11 SEQUENCE { + qcl-ScramblingIdentity-r11 INTEGER (0..503), + crs-PortsCount-r11 ENUMERATED {n1, n2, n4, spare1}, + mbsfn-SubframeConfigList-r11 CHOICE { + release NULL, + setup SEQUENCE { + subframeConfigList MBSFN-SubframeConfigList + } + } OPTIONAL -- Need ON + } OPTIONAL, -- Need OR + ... +} + + +CSI-RS-ConfigNZPId-r11 ::= INTEGER (1..maxCSI-RS-NZP-r11) + + +CSI-RS-ConfigZP-r11 ::= SEQUENCE { + csi-RS-ConfigZPId-r11 CSI-RS-ConfigZPId-r11, + resourceConfigList-r11 BIT STRING (SIZE (16)), + subframeConfig-r11 INTEGER (0..154), + ... +} + + +CSI-RS-ConfigZPId-r11 ::= INTEGER (1..maxCSI-RS-ZP-r11) + + +DMRS-Config-r11 ::= CHOICE { + release NULL, + setup SEQUENCE { + scramblingIdentity-r11 INTEGER (0..503), + scramblingIdentity2-r11 INTEGER (0..503) + } +} + + +DRB-Identity ::= INTEGER (1..32) + + +EPDCCH-Config-r11 ::= SEQUENCE{ + config-r11 CHOICE { + release NULL, + setup SEQUENCE { + subframePatternConfig-r11 CHOICE { + release NULL, + setup SEQUENCE { + subframePattern-r11 MeasSubframePattern-r10 + } + } OPTIONAL, -- Need ON + startSymbol-r11 INTEGER (1..4) OPTIONAL, -- Need OP + setConfigToReleaseList-r11 EPDCCH-SetConfigToReleaseList-r11 OPTIONAL, -- Need ON + setConfigToAddModList-r11 EPDCCH-SetConfigToAddModList-r11 OPTIONAL -- Need ON + } + } +} + +EPDCCH-SetConfigToAddModList-r11 ::= SEQUENCE (SIZE(1..maxEPDCCH-Set-r11)) OF EPDCCH-SetConfig-r11 + +EPDCCH-SetConfigToReleaseList-r11 ::= SEQUENCE (SIZE(1..maxEPDCCH-Set-r11)) OF EPDCCH-SetConfigId-r11 + +EPDCCH-SetConfig-r11 ::= SEQUENCE { + setConfigId-r11 EPDCCH-SetConfigId-r11, + transmissionType-r11 ENUMERATED {localised, distributed}, + resourceBlockAssignment-r11 SEQUENCE{ + numberPRB-Pairs-r11 ENUMERATED {n2, n4, n8}, + resourceBlockAssignment-r11 BIT STRING (SIZE(4..38)) + }, + dmrs-ScramblingSequenceInt-r11 INTEGER (0..503), + pucch-ResourceStartOffset-r11 INTEGER (0..2047), + re-MappingQCL-ConfigId-r11 PDSCH-RE-MappingQCL-ConfigId-r11 OPTIONAL, -- Need OR + ..., + [[ csi-RS-ConfigZPId2-r12 CHOICE { + release NULL, + setup CSI-RS-ConfigZPId-r11 + } OPTIONAL -- Need ON + ]] +} + +EPDCCH-SetConfigId-r11 ::= INTEGER (0..1) + +EIMTA-MainConfig-r12 ::= CHOICE { + release NULL, + setup SEQUENCE { + eimta-RNTI-r12 C-RNTI, + eimta-CommandPeriodicity-r12 ENUMERATED {sf10, sf20, sf40, sf80}, + eimta-CommandSubframeSet-r12 BIT STRING (SIZE(10)) + } +} + +EIMTA-MainConfigServCell-r12 ::= CHOICE { + release NULL, + setup SEQUENCE { + eimta-UL-DL-ConfigIndex-r12 INTEGER (1..5), + eimta-HARQ-ReferenceConfig-r12 ENUMERATED {sa2,sa4,sa5}, + mbsfn-SubframeConfigList-v1250 CHOICE { + release NULL, + setup SEQUENCE { + subframeConfigList-r12 MBSFN-SubframeConfigList + } + } + } +} + + +LogicalChannelConfig ::= SEQUENCE { + ul-SpecificParameters SEQUENCE { + priority INTEGER (1..16), + prioritisedBitRate ENUMERATED { + kBps0, kBps8, kBps16, kBps32, kBps64, kBps128, + kBps256, infinity, kBps512-v1020, kBps1024-v1020, + kBps2048-v1020, spare5, spare4, spare3, spare2, + spare1}, + bucketSizeDuration ENUMERATED { + ms50, ms100, ms150, ms300, ms500, ms1000, spare2, + spare1}, + logicalChannelGroup INTEGER (0..3) OPTIONAL -- Need OR + } OPTIONAL, -- Cond UL + ..., + [[ logicalChannelSR-Mask-r9 ENUMERATED {setup} OPTIONAL -- Cond SRmask + ]], + [[ logicalChannelSR-Prohibit-r12 BOOLEAN OPTIONAL -- Need ON + ]] +} + + +MAC-MainConfig ::= SEQUENCE { + ul-SCH-Config SEQUENCE { + maxHARQ-Tx ENUMERATED { + n1, n2, n3, n4, n5, n6, n7, n8, + n10, n12, n16, n20, n24, n28, + spare2, spare1} OPTIONAL, -- Need ON + periodicBSR-Timer PeriodicBSR-Timer-r12 OPTIONAL, -- Need ON + retxBSR-Timer RetxBSR-Timer-r12, + ttiBundling BOOLEAN + } OPTIONAL, -- Need ON + drx-Config DRX-Config OPTIONAL, -- Need ON + timeAlignmentTimerDedicated TimeAlignmentTimer, + phr-Config CHOICE { + release NULL, + setup SEQUENCE { + periodicPHR-Timer ENUMERATED {sf10, sf20, sf50, sf100, sf200, + sf500, sf1000, infinity}, + prohibitPHR-Timer ENUMERATED {sf0, sf10, sf20, sf50, sf100, + sf200, sf500, sf1000}, + dl-PathlossChange ENUMERATED {dB1, dB3, dB6, infinity} + } + } OPTIONAL, -- Need ON + ..., + [[ sr-ProhibitTimer-r9 INTEGER (0..7) OPTIONAL -- Need ON + ]], + [[ mac-MainConfig-v1020 SEQUENCE { + sCellDeactivationTimer-r10 ENUMERATED { + rf2, rf4, rf8, rf16, rf32, rf64, rf128, + spare} OPTIONAL, -- Need OP + extendedBSR-Sizes-r10 ENUMERATED {setup} OPTIONAL, -- Need OR + extendedPHR-r10 ENUMERATED {setup} OPTIONAL -- Need OR + } OPTIONAL -- Need ON + ]], + [[ stag-ToReleaseList-r11 STAG-ToReleaseList-r11 OPTIONAL, -- Need ON + stag-ToAddModList-r11 STAG-ToAddModList-r11 OPTIONAL, -- Need ON + drx-Config-v1130 DRX-Config-v1130 OPTIONAL -- Need ON + ]], + [[ e-HARQ-Pattern-r12 BOOLEAN OPTIONAL, -- Need ON + dualConnectivityPHR CHOICE { + release NULL, + setup SEQUENCE { + phr-ModeOtherCG-r12 ENUMERATED {real, virtual} + } + } OPTIONAL, -- Need ON + logicalChannelSR-Config-r12 CHOICE { + release NULL, + setup SEQUENCE { + logicalChannelSR-ProhibitTimer-r12 ENUMERATED {sf20, sf40, sf64, sf128, sf512, sf1024, sf2560, spare1} + } + } OPTIONAL -- Need ON + ]] +} + +MAC-MainConfigSCell-r11 ::= SEQUENCE { + stag-Id-r11 STAG-Id-r11 OPTIONAL, -- Need OP + ... +} + +DRX-Config ::= CHOICE { + release NULL, + setup SEQUENCE { + onDurationTimer ENUMERATED { + psf1, psf2, psf3, psf4, psf5, psf6, + psf8, psf10, psf20, psf30, psf40, + psf50, psf60, psf80, psf100, + psf200}, + drx-InactivityTimer ENUMERATED { + psf1, psf2, psf3, psf4, psf5, psf6, + psf8, psf10, psf20, psf30, psf40, + psf50, psf60, psf80, psf100, + psf200, psf300, psf500, psf750, + psf1280, psf1920, psf2560, psf0-v1020, + spare9, spare8, spare7, spare6, + spare5, spare4, spare3, spare2, + spare1}, + drx-RetransmissionTimer ENUMERATED { + psf1, psf2, psf4, psf6, psf8, psf16, + psf24, psf33}, + longDRX-CycleStartOffset CHOICE { + sf10 INTEGER(0..9), + sf20 INTEGER(0..19), + sf32 INTEGER(0..31), + sf40 INTEGER(0..39), + sf64 INTEGER(0..63), + sf80 INTEGER(0..79), + sf128 INTEGER(0..127), + sf160 INTEGER(0..159), + sf256 INTEGER(0..255), + sf320 INTEGER(0..319), + sf512 INTEGER(0..511), + sf640 INTEGER(0..639), + sf1024 INTEGER(0..1023), + sf1280 INTEGER(0..1279), + sf2048 INTEGER(0..2047), + sf2560 INTEGER(0..2559) + }, + shortDRX SEQUENCE { + shortDRX-Cycle ENUMERATED { + sf2, sf5, sf8, sf10, sf16, sf20, + sf32, sf40, sf64, sf80, sf128, sf160, + sf256, sf320, sf512, sf640}, + drxShortCycleTimer INTEGER (1..16) + } OPTIONAL -- Need OR + } +} + +DRX-Config-v1130 ::= SEQUENCE { + drx-RetransmissionTimer-v1130 ENUMERATED {psf0-v1130} OPTIONAL, --Need OR + longDRX-CycleStartOffset-v1130 CHOICE { + sf60-v1130 INTEGER(0..59), + sf70-v1130 INTEGER(0..69) + } OPTIONAL, --Need OR + shortDRX-Cycle-v1130 ENUMERATED {sf4-v1130} OPTIONAL --Need OR +} + +PeriodicBSR-Timer-r12 ::= ENUMERATED { + sf5, sf10, sf16, sf20, sf32, sf40, sf64, sf80, + sf128, sf160, sf320, sf640, sf1280, sf2560, + infinity, spare1} + +RetxBSR-Timer-r12 ::= ENUMERATED { + sf320, sf640, sf1280, sf2560, sf5120, + sf10240, spare2, spare1} + +STAG-ToReleaseList-r11 ::= SEQUENCE (SIZE (1..maxSTAG-r11)) OF STAG-Id-r11 + +STAG-ToAddModList-r11 ::= SEQUENCE (SIZE (1..maxSTAG-r11)) OF STAG-ToAddMod-r11 + +STAG-ToAddMod-r11 ::= SEQUENCE { + stag-Id-r11 STAG-Id-r11, + timeAlignmentTimerSTAG-r11 TimeAlignmentTimer, + ... +} + +STAG-Id-r11::= INTEGER (1..maxSTAG-r11) + + +PDCP-Config ::= SEQUENCE { + discardTimer ENUMERATED { + ms50, ms100, ms150, ms300, ms500, + ms750, ms1500, infinity + } OPTIONAL, -- Cond Setup + rlc-AM SEQUENCE { + statusReportRequired BOOLEAN + } OPTIONAL, -- Cond Rlc-AM + rlc-UM SEQUENCE { + pdcp-SN-Size ENUMERATED {len7bits, len12bits} + } OPTIONAL, -- Cond Rlc-UM + headerCompression CHOICE { + notUsed NULL, + rohc SEQUENCE { + maxCID INTEGER (1..16383) DEFAULT 15, + profiles SEQUENCE { + profile0x0001 BOOLEAN, + profile0x0002 BOOLEAN, + profile0x0003 BOOLEAN, + profile0x0004 BOOLEAN, + profile0x0006 BOOLEAN, + profile0x0101 BOOLEAN, + profile0x0102 BOOLEAN, + profile0x0103 BOOLEAN, + profile0x0104 BOOLEAN + }, + ... + } + }, + ..., + [[ rn-IntegrityProtection-r10 ENUMERATED {enabled} OPTIONAL -- Cond RN + ]], + [[ pdcp-SN-Size-v1130 ENUMERATED {len15bits} OPTIONAL -- Cond Rlc-AM2 + ]], + [[ ul-DataSplitDRB-ViaSCG-r12 BOOLEAN OPTIONAL, -- Need ON + t-Reordering-r12 ENUMERATED { + ms0, ms20, ms40, ms60, ms80, ms100, ms120, ms140, + ms160, ms180, ms200, ms220, ms240, ms260, ms280, ms300, + ms500, ms750, spare14, spare13, spare12, spare11, spare10, + spare9, spare8, spare7, spare6, spare5, spare4, spare3, + spare2, spare1} OPTIONAL -- Cond SetupS + ]] +} + + +PDSCH-ConfigCommon ::= SEQUENCE { + referenceSignalPower INTEGER (-60..50), + p-b INTEGER (0..3) +} + +PDSCH-ConfigDedicated::= SEQUENCE { + p-a ENUMERATED { + dB-6, dB-4dot77, dB-3, dB-1dot77, + dB0, dB1, dB2, dB3} +} + +PDSCH-ConfigDedicated-v1130 ::= SEQUENCE { + dmrs-ConfigPDSCH-r11 DMRS-Config-r11 OPTIONAL, -- Need ON + qcl-Operation ENUMERATED {typeA, typeB} OPTIONAL, -- Need OR + re-MappingQCLConfigToReleaseList-r11 RE-MappingQCLConfigToReleaseList-r11 OPTIONAL, -- Need ON + re-MappingQCLConfigToAddModList-r11 RE-MappingQCLConfigToAddModList-r11 OPTIONAL -- Need ON +} + +RE-MappingQCLConfigToAddModList-r11 ::= SEQUENCE (SIZE (1..maxRE-MapQCL-r11)) OF PDSCH-RE-MappingQCL-Config-r11 + +RE-MappingQCLConfigToReleaseList-r11 ::= SEQUENCE (SIZE (1..maxRE-MapQCL-r11)) OF PDSCH-RE-MappingQCL-ConfigId-r11 + +PDSCH-RE-MappingQCL-Config-r11 ::= SEQUENCE { + pdsch-RE-MappingQCL-ConfigId-r11 PDSCH-RE-MappingQCL-ConfigId-r11, + optionalSetOfFields-r11 SEQUENCE { + crs-PortsCount-r11 ENUMERATED {n1, n2, n4, spare1}, + crs-FreqShift-r11 INTEGER (0..5), + mbsfn-SubframeConfigList-r11 CHOICE { + release NULL, + setup SEQUENCE { + subframeConfigList MBSFN-SubframeConfigList + } + } OPTIONAL, -- Need ON + pdsch-Start-r11 ENUMERATED {reserved, n1, n2, n3, n4, assigned} + } OPTIONAL, -- Need OP + csi-RS-ConfigZPId-r11 CSI-RS-ConfigZPId-r11, + qcl-CSI-RS-ConfigNZPId-r11 CSI-RS-ConfigNZPId-r11 OPTIONAL, -- Need OR + ... +} + + +PDSCH-RE-MappingQCL-ConfigId-r11 ::= INTEGER (1..maxRE-MapQCL-r11) + + +PHICH-Config ::= SEQUENCE { + phich-Duration ENUMERATED {normal, extended}, + phich-Resource ENUMERATED {oneSixth, half, one, two} +} + + +PhysicalConfigDedicated ::= SEQUENCE { + pdsch-ConfigDedicated PDSCH-ConfigDedicated OPTIONAL, -- Need ON + pucch-ConfigDedicated PUCCH-ConfigDedicated OPTIONAL, -- Need ON + pusch-ConfigDedicated PUSCH-ConfigDedicated OPTIONAL, -- Need ON + uplinkPowerControlDedicated UplinkPowerControlDedicated OPTIONAL, -- Need ON + tpc-PDCCH-ConfigPUCCH TPC-PDCCH-Config OPTIONAL, -- Need ON + tpc-PDCCH-ConfigPUSCH TPC-PDCCH-Config OPTIONAL, -- Need ON + cqi-ReportConfig CQI-ReportConfig OPTIONAL, -- Cond CQI-r8 + soundingRS-UL-ConfigDedicated SoundingRS-UL-ConfigDedicated OPTIONAL, -- Need ON + antennaInfo CHOICE { + explicitValue AntennaInfoDedicated, + defaultValue NULL + } OPTIONAL, -- Cond AI-r8 + schedulingRequestConfig SchedulingRequestConfig OPTIONAL, -- Need ON + ..., + [[ cqi-ReportConfig-v920 CQI-ReportConfig-v920 OPTIONAL, -- Cond CQI-r8 + antennaInfo-v920 AntennaInfoDedicated-v920 OPTIONAL -- Cond AI-r8 + ]], + [[ antennaInfo-r10 CHOICE { + explicitValue-r10 AntennaInfoDedicated-r10, + defaultValue NULL + } OPTIONAL, -- Cond AI-r10 + antennaInfoUL-r10 AntennaInfoUL-r10 OPTIONAL, -- Need ON + cif-Presence-r10 BOOLEAN OPTIONAL, -- Need ON + cqi-ReportConfig-r10 CQI-ReportConfig-r10 OPTIONAL, -- Cond CQI-r10 + csi-RS-Config-r10 CSI-RS-Config-r10 OPTIONAL, -- Need ON + pucch-ConfigDedicated-v1020 PUCCH-ConfigDedicated-v1020 OPTIONAL, -- Need ON + pusch-ConfigDedicated-v1020 PUSCH-ConfigDedicated-v1020 OPTIONAL, -- Need ON + schedulingRequestConfig-v1020 SchedulingRequestConfig-v1020 OPTIONAL, -- Need ON + soundingRS-UL-ConfigDedicated-v1020 + SoundingRS-UL-ConfigDedicated-v1020 OPTIONAL, -- Need ON + soundingRS-UL-ConfigDedicatedAperiodic-r10 + SoundingRS-UL-ConfigDedicatedAperiodic-r10 OPTIONAL, -- Need ON + uplinkPowerControlDedicated-v1020 UplinkPowerControlDedicated-v1020 OPTIONAL -- Need ON + ]], + [[ additionalSpectrumEmissionCA-r10 CHOICE { + release NULL, + setup SEQUENCE { + additionalSpectrumEmissionPCell-r10 AdditionalSpectrumEmission + } + } OPTIONAL -- Need ON + ]], + [[ -- DL configuration as well as configuration applicable for DL and UL + csi-RS-ConfigNZPToReleaseList-r11 CSI-RS-ConfigNZPToReleaseList-r11 OPTIONAL, -- Need ON + csi-RS-ConfigNZPToAddModList-r11 CSI-RS-ConfigNZPToAddModList-r11 OPTIONAL, -- Need ON + csi-RS-ConfigZPToReleaseList-r11 CSI-RS-ConfigZPToReleaseList-r11 OPTIONAL, -- Need ON + csi-RS-ConfigZPToAddModList-r11 CSI-RS-ConfigZPToAddModList-r11 OPTIONAL, -- Need ON + epdcch-Config-r11 EPDCCH-Config-r11 OPTIONAL, -- Need ON + pdsch-ConfigDedicated-v1130 PDSCH-ConfigDedicated-v1130 OPTIONAL, -- Need ON + -- UL configuration + cqi-ReportConfig-v1130 CQI-ReportConfig-v1130 OPTIONAL, -- Need ON + pucch-ConfigDedicated-v1130 PUCCH-ConfigDedicated-v1130 OPTIONAL, -- Need ON + pusch-ConfigDedicated-v1130 PUSCH-ConfigDedicated-v1130 OPTIONAL, -- Need ON + uplinkPowerControlDedicated-v1130 UplinkPowerControlDedicated-v1130 OPTIONAL -- Need ON + ]], + [[ antennaInfo-v1250 AntennaInfoDedicated-v1250 OPTIONAL, -- Cond AI-r10 + eimta-MainConfig-r12 EIMTA-MainConfig-r12 OPTIONAL, -- Need ON + eimta-MainConfigPCell-r12 EIMTA-MainConfigServCell-r12 OPTIONAL, -- Need ON + pucch-ConfigDedicated-v1250 PUCCH-ConfigDedicated-v1250 OPTIONAL, -- Need ON + cqi-ReportConfigPCell-v1250 CQI-ReportConfig-v1250 OPTIONAL, -- Need ON + uplinkPowerControlDedicated-v1250 UplinkPowerControlDedicated-v1250 OPTIONAL, -- Need ON + pusch-ConfigDedicated-v1250 PUSCH-ConfigDedicated-v1250 OPTIONAL, -- Need ON + csi-RS-Config-v1250 CSI-RS-Config-v1250 OPTIONAL -- Need ON + ]] +} +PhysicalConfigDedicatedSCell-r10 ::= SEQUENCE { + -- DL configuration as well as configuration applicable for DL and UL + nonUL-Configuration-r10 SEQUENCE { + antennaInfo-r10 AntennaInfoDedicated-r10 OPTIONAL, -- Need ON + crossCarrierSchedulingConfig-r10 CrossCarrierSchedulingConfig-r10 OPTIONAL, -- Need ON + csi-RS-Config-r10 CSI-RS-Config-r10 OPTIONAL, -- Need ON + pdsch-ConfigDedicated-r10 PDSCH-ConfigDedicated OPTIONAL -- Need ON + } OPTIONAL, -- Cond SCellAdd + -- UL configuration + ul-Configuration-r10 SEQUENCE { + antennaInfoUL-r10 AntennaInfoUL-r10 OPTIONAL, -- Need ON + pusch-ConfigDedicatedSCell-r10 PUSCH-ConfigDedicatedSCell-r10 OPTIONAL, -- Need ON + uplinkPowerControlDedicatedSCell-r10 UplinkPowerControlDedicatedSCell-r10 OPTIONAL, -- Need ON + cqi-ReportConfigSCell-r10 CQI-ReportConfigSCell-r10 OPTIONAL, -- Need ON + soundingRS-UL-ConfigDedicated-r10 SoundingRS-UL-ConfigDedicated OPTIONAL, -- Need ON + soundingRS-UL-ConfigDedicated-v1020 + SoundingRS-UL-ConfigDedicated-v1020 OPTIONAL, -- Need ON + soundingRS-UL-ConfigDedicatedAperiodic-r10 + SoundingRS-UL-ConfigDedicatedAperiodic-r10 OPTIONAL -- Need ON + } OPTIONAL, -- Cond CommonUL + ..., + [[ -- DL configuration as well as configuration applicable for DL and UL + csi-RS-ConfigNZPToReleaseList-r11 CSI-RS-ConfigNZPToReleaseList-r11 OPTIONAL, -- Need ON + csi-RS-ConfigNZPToAddModList-r11 CSI-RS-ConfigNZPToAddModList-r11 OPTIONAL, -- Need ON + csi-RS-ConfigZPToReleaseList-r11 CSI-RS-ConfigZPToReleaseList-r11 OPTIONAL, -- Need ON + csi-RS-ConfigZPToAddModList-r11 CSI-RS-ConfigZPToAddModList-r11 OPTIONAL, -- Need ON + epdcch-Config-r11 EPDCCH-Config-r11 OPTIONAL, -- Need ON + pdsch-ConfigDedicated-v1130 PDSCH-ConfigDedicated-v1130 OPTIONAL, -- Need ON + -- UL configuration + cqi-ReportConfig-v1130 CQI-ReportConfig-v1130 OPTIONAL, -- Need ON + pusch-ConfigDedicated-v1130 PUSCH-ConfigDedicated-v1130 OPTIONAL, -- Need ON + uplinkPowerControlDedicatedSCell-v1130 UplinkPowerControlDedicated-v1130 OPTIONAL -- Need ON + ]], + [[ antennaInfo-v1250 AntennaInfoDedicated-v1250 OPTIONAL, -- Need ON + eimta-MainConfigSCell-r12 EIMTA-MainConfigServCell-r12 OPTIONAL, -- Need ON + cqi-ReportConfigSCell-v1250 CQI-ReportConfig-v1250 OPTIONAL, -- Need ON + uplinkPowerControlDedicatedSCell-v1250 UplinkPowerControlDedicated-v1250 OPTIONAL, -- Need ON + csi-RS-Config-v1250 CSI-RS-Config-v1250 OPTIONAL -- Need ON + ]] +} + +CSI-RS-ConfigNZPToAddModList-r11 ::= SEQUENCE (SIZE (1..maxCSI-RS-NZP-r11)) OF CSI-RS-ConfigNZP-r11 + +CSI-RS-ConfigNZPToReleaseList-r11 ::= SEQUENCE (SIZE (1..maxCSI-RS-NZP-r11)) OF CSI-RS-ConfigNZPId-r11 + +CSI-RS-ConfigZPToAddModList-r11 ::= SEQUENCE (SIZE (1..maxCSI-RS-ZP-r11)) OF CSI-RS-ConfigZP-r11 + +CSI-RS-ConfigZPToReleaseList-r11 ::= SEQUENCE (SIZE (1..maxCSI-RS-ZP-r11)) OF CSI-RS-ConfigZPId-r11 + + +P-Max ::= INTEGER (-30..33) + + +PRACH-ConfigSIB ::= SEQUENCE { + rootSequenceIndex INTEGER (0..837), + prach-ConfigInfo PRACH-ConfigInfo +} + +PRACH-Config ::= SEQUENCE { + rootSequenceIndex INTEGER (0..837), + prach-ConfigInfo PRACH-ConfigInfo OPTIONAL -- Need ON +} + +PRACH-ConfigSCell-r10 ::= SEQUENCE { + prach-ConfigIndex-r10 INTEGER (0..63) +} + +PRACH-ConfigInfo ::= SEQUENCE { + prach-ConfigIndex INTEGER (0..63), + highSpeedFlag BOOLEAN, + zeroCorrelationZoneConfig INTEGER (0..15), + prach-FreqOffset INTEGER (0..94) +} + + +PresenceAntennaPort1 ::= BOOLEAN + + +PUCCH-ConfigCommon ::= SEQUENCE { + deltaPUCCH-Shift ENUMERATED {ds1, ds2, ds3}, + nRB-CQI INTEGER (0..98), + nCS-AN INTEGER (0..7), + n1PUCCH-AN INTEGER (0..2047) +} + +PUCCH-ConfigDedicated ::= SEQUENCE { + ackNackRepetition CHOICE{ + release NULL, + setup SEQUENCE { + repetitionFactor ENUMERATED {n2, n4, n6, spare1}, + n1PUCCH-AN-Rep INTEGER (0..2047) + } + }, + tdd-AckNackFeedbackMode ENUMERATED {bundling, multiplexing} OPTIONAL -- Cond TDD +} + +PUCCH-ConfigDedicated-v1020 ::= SEQUENCE { + pucch-Format-r10 CHOICE { + format3-r10 SEQUENCE { + n3PUCCH-AN-List-r10 SEQUENCE (SIZE (1..4)) OF INTEGER (0..549) OPTIONAL, -- Need ON + twoAntennaPortActivatedPUCCH-Format3-r10 CHOICE { + release NULL, + setup SEQUENCE { + n3PUCCH-AN-ListP1-r10 SEQUENCE (SIZE (1..4)) OF INTEGER (0..549) + } + } OPTIONAL -- Need ON + }, + channelSelection-r10 SEQUENCE { + n1PUCCH-AN-CS-r10 CHOICE { + release NULL, + setup SEQUENCE { + n1PUCCH-AN-CS-List-r10 SEQUENCE (SIZE (1..2)) OF N1PUCCH-AN-CS-r10 + } + } OPTIONAL -- Need ON + } + } OPTIONAL, -- Need OR + twoAntennaPortActivatedPUCCH-Format1a1b-r10 ENUMERATED {true} OPTIONAL, -- Need OR + simultaneousPUCCH-PUSCH-r10 ENUMERATED {true} OPTIONAL, -- Need OR + n1PUCCH-AN-RepP1-r10 INTEGER (0..2047) OPTIONAL -- Need OR +} + +PUCCH-ConfigDedicated-v1130 ::= SEQUENCE { + n1PUCCH-AN-CS-v1130 CHOICE { + release NULL, + setup SEQUENCE { + n1PUCCH-AN-CS-ListP1-r11 SEQUENCE (SIZE (2..4)) OF INTEGER (0..2047) + } + } OPTIONAL, -- Need ON + nPUCCH-Param-r11 CHOICE { + release NULL, + setup SEQUENCE { + nPUCCH-Identity-r11 INTEGER (0..503), + n1PUCCH-AN-r11 INTEGER (0..2047) + } + } OPTIONAL -- Need ON +} + +PUCCH-ConfigDedicated-v1250 ::= SEQUENCE { + nkaPUCCH-Param-r12 CHOICE { + release NULL, + setup SEQUENCE { + nkaPUCCH-AN-r12 INTEGER (0..2047) + } + } +} + +N1PUCCH-AN-CS-r10 ::= SEQUENCE (SIZE (1..4)) OF INTEGER (0..2047) + + +PUSCH-ConfigCommon ::= SEQUENCE { + pusch-ConfigBasic SEQUENCE { + n-SB INTEGER (1..4), + hoppingMode ENUMERATED {interSubFrame, intraAndInterSubFrame}, + pusch-HoppingOffset INTEGER (0..98), + enable64QAM BOOLEAN + }, + ul-ReferenceSignalsPUSCH UL-ReferenceSignalsPUSCH +} + +PUSCH-ConfigDedicated ::= SEQUENCE { + betaOffset-ACK-Index INTEGER (0..15), + betaOffset-RI-Index INTEGER (0..15), + betaOffset-CQI-Index INTEGER (0..15) +} + +PUSCH-ConfigDedicated-v1020 ::= SEQUENCE { + betaOffsetMC-r10 SEQUENCE { + betaOffset-ACK-Index-MC-r10 INTEGER (0..15), + betaOffset-RI-Index-MC-r10 INTEGER (0..15), + betaOffset-CQI-Index-MC-r10 INTEGER (0..15) + } OPTIONAL, -- Need OR + groupHoppingDisabled-r10 ENUMERATED {true} OPTIONAL, -- Need OR + dmrs-WithOCC-Activated-r10 ENUMERATED {true} OPTIONAL -- Need OR +} + +PUSCH-ConfigDedicated-v1130 ::= SEQUENCE { + pusch-DMRS-r11 CHOICE { + release NULL, + setup SEQUENCE { + nPUSCH-Identity-r11 INTEGER (0..509), + nDMRS-CSH-Identity-r11 INTEGER (0..509) + } + } +} + +PUSCH-ConfigDedicated-v1250::= SEQUENCE { + uciOnPUSCH CHOICE { + release NULL, + setup SEQUENCE { + betaOffset-ACK-Index-SubframeSet2-r12 INTEGER (0..15), + betaOffset-RI-Index-SubframeSet2-r12 INTEGER (0..15), + betaOffset-CQI-Index-SubframeSet2-r12 INTEGER (0..15), + betaOffsetMC-r12 SEQUENCE { + betaOffset-ACK-Index-MC-SubframeSet2-r12 INTEGER (0..15), + betaOffset-RI-Index-MC-SubframeSet2-r12 INTEGER (0..15), + betaOffset-CQI-Index-MC-SubframeSet2-r12 INTEGER (0..15) + } OPTIONAL -- Need OR + } + } +} + +PUSCH-ConfigDedicatedSCell-r10 ::= SEQUENCE { + groupHoppingDisabled-r10 ENUMERATED {true} OPTIONAL, -- Need OR + dmrs-WithOCC-Activated-r10 ENUMERATED {true} OPTIONAL -- Need OR +} + +UL-ReferenceSignalsPUSCH ::= SEQUENCE { + groupHoppingEnabled BOOLEAN, + groupAssignmentPUSCH INTEGER (0..29), + sequenceHoppingEnabled BOOLEAN, + cyclicShift INTEGER (0..7) +} + + +RACH-ConfigCommon ::= SEQUENCE { + preambleInfo SEQUENCE { + numberOfRA-Preambles ENUMERATED { + n4, n8, n12, n16 ,n20, n24, n28, + n32, n36, n40, n44, n48, n52, n56, + n60, n64}, + preamblesGroupAConfig SEQUENCE { + sizeOfRA-PreamblesGroupA ENUMERATED { + n4, n8, n12, n16 ,n20, n24, n28, + n32, n36, n40, n44, n48, n52, n56, + n60}, + messageSizeGroupA ENUMERATED {b56, b144, b208, b256}, + messagePowerOffsetGroupB ENUMERATED { + minusinfinity, dB0, dB5, dB8, dB10, dB12, + dB15, dB18}, + ... + } OPTIONAL -- Need OP + }, + powerRampingParameters PowerRampingParameters, + ra-SupervisionInfo SEQUENCE { + preambleTransMax PreambleTransMax, + ra-ResponseWindowSize ENUMERATED { + sf2, sf3, sf4, sf5, sf6, sf7, + sf8, sf10}, + mac-ContentionResolutionTimer ENUMERATED { + sf8, sf16, sf24, sf32, sf40, sf48, + sf56, sf64} + }, + maxHARQ-Msg3Tx INTEGER (1..8), + ... +} + +RACH-ConfigCommon-v1250 ::= SEQUENCE { + txFailParams-r12 SEQUENCE { + connEstFailCount-r12 ENUMERATED {n1, n2, n3, n4}, + connEstFailOffsetValidity-r12 ENUMERATED {s30, s60, s120, s240, + s300, s420, s600, s900}, + connEstFailOffset-r12 INTEGER (0..15) OPTIONAL -- Need OP + } +} + +RACH-ConfigCommonSCell-r11 ::= SEQUENCE { + powerRampingParameters-r11 PowerRampingParameters, + ra-SupervisionInfo-r11 SEQUENCE { + preambleTransMax-r11 PreambleTransMax + }, + ... +} + +PowerRampingParameters ::= SEQUENCE { + powerRampingStep ENUMERATED {dB0, dB2,dB4, dB6}, + preambleInitialReceivedTargetPower ENUMERATED { + dBm-120, dBm-118, dBm-116, dBm-114, dBm-112, + dBm-110, dBm-108, dBm-106, dBm-104, dBm-102, + dBm-100, dBm-98, dBm-96, dBm-94, + dBm-92, dBm-90} +} + +PreambleTransMax ::= ENUMERATED { + n3, n4, n5, n6, n7, n8, n10, n20, n50, + n100, n200} + + +RACH-ConfigDedicated ::= SEQUENCE { + ra-PreambleIndex INTEGER (0..63), + ra-PRACH-MaskIndex INTEGER (0..15) +} + + +RadioResourceConfigCommonSIB ::= SEQUENCE { + rach-ConfigCommon RACH-ConfigCommon, + bcch-Config BCCH-Config, + pcch-Config PCCH-Config, + prach-Config PRACH-ConfigSIB, + pdsch-ConfigCommon PDSCH-ConfigCommon, + pusch-ConfigCommon PUSCH-ConfigCommon, + pucch-ConfigCommon PUCCH-ConfigCommon, + soundingRS-UL-ConfigCommon SoundingRS-UL-ConfigCommon, + uplinkPowerControlCommon UplinkPowerControlCommon, + ul-CyclicPrefixLength UL-CyclicPrefixLength, + ..., + [[ uplinkPowerControlCommon-v1020 UplinkPowerControlCommon-v1020 OPTIONAL -- Need OR + ]], + [[ rach-ConfigCommon-v1250 RACH-ConfigCommon-v1250 OPTIONAL -- Need OR + ]] +} + +RadioResourceConfigCommon ::= SEQUENCE { + rach-ConfigCommon RACH-ConfigCommon OPTIONAL, -- Need ON + prach-Config PRACH-Config, + pdsch-ConfigCommon PDSCH-ConfigCommon OPTIONAL, -- Need ON + pusch-ConfigCommon PUSCH-ConfigCommon, + phich-Config PHICH-Config OPTIONAL, -- Need ON + pucch-ConfigCommon PUCCH-ConfigCommon OPTIONAL, -- Need ON + soundingRS-UL-ConfigCommon SoundingRS-UL-ConfigCommon OPTIONAL, -- Need ON + uplinkPowerControlCommon UplinkPowerControlCommon OPTIONAL, -- Need ON + antennaInfoCommon AntennaInfoCommon OPTIONAL, -- Need ON + p-Max P-Max OPTIONAL, -- Need OP + tdd-Config TDD-Config OPTIONAL, -- Cond TDD + ul-CyclicPrefixLength UL-CyclicPrefixLength, + ..., + [[ uplinkPowerControlCommon-v1020 UplinkPowerControlCommon-v1020 OPTIONAL -- Need ON + ]], + [[ tdd-Config-v1130 TDD-Config-v1130 OPTIONAL -- Cond TDD3 + ]] +} + +RadioResourceConfigCommonPSCell-r12 ::= SEQUENCE { + basicFields-r12 RadioResourceConfigCommonSCell-r10, + pucch-ConfigCommon-r12 PUCCH-ConfigCommon, + rach-ConfigCommon-r12 RACH-ConfigCommon, + uplinkPowerControlCommonPSCell-r12 UplinkPowerControlCommonPSCell-r12, + ... +} + +RadioResourceConfigCommonSCell-r10 ::= SEQUENCE { + -- DL configuration as well as configuration applicable for DL and UL + nonUL-Configuration-r10 SEQUENCE { + -- 1: Cell characteristics + dl-Bandwidth-r10 ENUMERATED {n6, n15, n25, n50, n75, n100}, + -- 2: Physical configuration, general + antennaInfoCommon-r10 AntennaInfoCommon, + mbsfn-SubframeConfigList-r10 MBSFN-SubframeConfigList OPTIONAL, -- Need OR + -- 3: Physical configuration, control + phich-Config-r10 PHICH-Config, + -- 4: Physical configuration, physical channels + pdsch-ConfigCommon-r10 PDSCH-ConfigCommon, + tdd-Config-r10 TDD-Config OPTIONAL -- Cond TDDSCell + }, + -- UL configuration + ul-Configuration-r10 SEQUENCE { + ul-FreqInfo-r10 SEQUENCE { + ul-CarrierFreq-r10 ARFCN-ValueEUTRA OPTIONAL, -- Need OP + ul-Bandwidth-r10 ENUMERATED {n6, n15, + n25, n50, n75, n100} OPTIONAL, -- Need OP + additionalSpectrumEmissionSCell-r10 AdditionalSpectrumEmission + }, + p-Max-r10 P-Max OPTIONAL, -- Need OP + uplinkPowerControlCommonSCell-r10 UplinkPowerControlCommonSCell-r10, + -- A special version of IE UplinkPowerControlCommon may be introduced + -- 3: Physical configuration, control + soundingRS-UL-ConfigCommon-r10 SoundingRS-UL-ConfigCommon, + ul-CyclicPrefixLength-r10 UL-CyclicPrefixLength, + -- 4: Physical configuration, physical channels + prach-ConfigSCell-r10 PRACH-ConfigSCell-r10 OPTIONAL, -- Cond TDD-OR-NoR11 + pusch-ConfigCommon-r10 PUSCH-ConfigCommon + } OPTIONAL, -- Need OR + ..., + [[ ul-CarrierFreq-v1090 ARFCN-ValueEUTRA-v9e0 OPTIONAL -- Need OP + ]], + [[ rach-ConfigCommonSCell-r11 RACH-ConfigCommonSCell-r11 OPTIONAL, -- Cond ULSCell + prach-ConfigSCell-r11 PRACH-Config OPTIONAL, -- Cond UL + tdd-Config-v1130 TDD-Config-v1130 OPTIONAL, -- Cond TDD2 + uplinkPowerControlCommonSCell-v1130 + UplinkPowerControlCommonSCell-v1130 OPTIONAL -- Cond UL + ]] +} + +BCCH-Config ::= SEQUENCE { + modificationPeriodCoeff ENUMERATED {n2, n4, n8, n16} +} + +PCCH-Config ::= SEQUENCE { + defaultPagingCycle ENUMERATED { + rf32, rf64, rf128, rf256}, + nB ENUMERATED { + fourT, twoT, oneT, halfT, quarterT, oneEighthT, + oneSixteenthT, oneThirtySecondT} +} + +UL-CyclicPrefixLength ::= ENUMERATED {len1, len2} + + +RadioResourceConfigDedicated ::= SEQUENCE { + srb-ToAddModList SRB-ToAddModList OPTIONAL, -- Cond HO-Conn + drb-ToAddModList DRB-ToAddModList OPTIONAL, -- Cond HO-toEUTRA + drb-ToReleaseList DRB-ToReleaseList OPTIONAL, -- Need ON + mac-MainConfig CHOICE { + explicitValue MAC-MainConfig, + defaultValue NULL + } OPTIONAL, -- Cond HO-toEUTRA2 + sps-Config SPS-Config OPTIONAL, -- Need ON + physicalConfigDedicated PhysicalConfigDedicated OPTIONAL, -- Need ON + ..., + [[ rlf-TimersAndConstants-r9 RLF-TimersAndConstants-r9 OPTIONAL -- Need ON + ]], + [[ measSubframePatternPCell-r10 MeasSubframePatternPCell-r10 OPTIONAL -- Need ON + ]], + [[ neighCellsCRS-Info-r11 NeighCellsCRS-Info-r11 OPTIONAL -- Need ON + ]], + [[ naics-Info-r12 NAICS-AssistanceInfo-r12 OPTIONAL -- Need ON + ]]} + +RadioResourceConfigDedicatedPSCell-r12 ::= SEQUENCE { + -- UE specific configuration extensions applicable for an PSCell + physicalConfigDedicatedPSCell-r12 PhysicalConfigDedicated OPTIONAL, -- Need ON + sps-Config-r12 SPS-Config OPTIONAL, -- Need ON + naics-Info-r12 NAICS-AssistanceInfo-r12 OPTIONAL, -- Need ON + ... +} + +RadioResourceConfigDedicatedSCG-r12 ::= SEQUENCE { + drb-ToAddModListSCG-r12 DRB-ToAddModListSCG-r12 OPTIONAL, -- Need ON + mac-MainConfigSCG-r12 MAC-MainConfig OPTIONAL, -- Need ON + rlf-TimersAndConstantsSCG-r12 RLF-TimersAndConstantsSCG-r12 OPTIONAL, -- Need ON + ... +} + +RadioResourceConfigDedicatedSCell-r10 ::= SEQUENCE { + -- UE specific configuration extensions applicable for an SCell + physicalConfigDedicatedSCell-r10 PhysicalConfigDedicatedSCell-r10 OPTIONAL, -- Need ON + ..., + [[ mac-MainConfigSCell-r11 MAC-MainConfigSCell-r11 OPTIONAL -- Cond SCellAdd + ]], + [[ naics-Info-r12 NAICS-AssistanceInfo-r12 OPTIONAL -- Need ON + ]] +} + +SRB-ToAddModList ::= SEQUENCE (SIZE (1..2)) OF SRB-ToAddMod + +SRB-ToAddMod ::= SEQUENCE { + srb-Identity INTEGER (1..2), + rlc-Config CHOICE { + explicitValue RLC-Config, + defaultValue NULL + } OPTIONAL, -- Cond Setup + logicalChannelConfig CHOICE { + explicitValue LogicalChannelConfig, + defaultValue NULL + } OPTIONAL, -- Cond Setup + ... +} + +DRB-ToAddModList ::= SEQUENCE (SIZE (1..maxDRB)) OF DRB-ToAddMod + +DRB-ToAddModListSCG-r12 ::= SEQUENCE (SIZE (1..maxDRB)) OF DRB-ToAddModSCG-r12 + +DRB-ToAddMod ::= SEQUENCE { + eps-BearerIdentity INTEGER (0..15) OPTIONAL, -- Cond DRB-Setup + drb-Identity DRB-Identity, + pdcp-Config PDCP-Config OPTIONAL, -- Cond PDCP + rlc-Config RLC-Config OPTIONAL, -- Cond SetupM + logicalChannelIdentity INTEGER (3..10) OPTIONAL, -- Cond DRB-SetupM + logicalChannelConfig LogicalChannelConfig OPTIONAL, -- Cond SetupM + ..., + [[ drb-TypeChange-r12 ENUMERATED {toMCG} OPTIONAL, -- Need OP + rlc-Config-v1250 RLC-Config-v1250 OPTIONAL -- Need ON + ]] +} + +DRB-ToAddModSCG-r12 ::= SEQUENCE { + drb-Identity-r12 DRB-Identity, + drb-Type-r12 CHOICE { + split-r12 NULL, + scg-r12 SEQUENCE { + eps-BearerIdentity-r12 INTEGER (0..15) OPTIONAL, -- Cond DRB-Setup + pdcp-Config-r12 PDCP-Config OPTIONAL -- Cond PDCP-S + } + } OPTIONAL, -- Cond SetupS2 + rlc-ConfigSCG-r12 RLC-Config OPTIONAL, -- Cond SetupS + rlc-Config-v1250 RLC-Config-v1250 OPTIONAL, -- Need ON + logicalChannelIdentitySCG-r12 INTEGER (3..10) OPTIONAL, -- Cond DRB-SetupS + logicalChannelConfigSCG-r12 LogicalChannelConfig OPTIONAL, -- Cond SetupS + ... +} + +DRB-ToReleaseList ::= SEQUENCE (SIZE (1..maxDRB)) OF DRB-Identity + +MeasSubframePatternPCell-r10 ::= CHOICE { + release NULL, + setup MeasSubframePattern-r10 +} + +NeighCellsCRS-Info-r11 ::= CHOICE { + release NULL, + setup CRS-AssistanceInfoList-r11 +} + +CRS-AssistanceInfoList-r11 ::= SEQUENCE (SIZE (1..maxCellReport)) OF CRS-AssistanceInfo-r11 + +CRS-AssistanceInfo-r11 ::= SEQUENCE { + physCellId-r11 PhysCellId, + antennaPortsCount-r11 ENUMERATED {an1, an2, an4, spare1}, + mbsfn-SubframeConfigList-r11 MBSFN-SubframeConfigList, + ... +} + +NAICS-AssistanceInfo-r12 ::= CHOICE { + release NULL, + setup SEQUENCE { + neighCellsToReleaseList-r12 NeighCellsToReleaseList-r12 OPTIONAL , -- Need ON + neighCellsToAddModList-r12 NeighCellsToAddModList-r12 OPTIONAL, -- Need ON + servCellp-a-r12 P-a OPTIONAL -- Need ON + } +} + +NeighCellsToReleaseList-r12 ::= SEQUENCE (SIZE (1..maxNeighCell-r12)) OF PhysCellId + +NeighCellsToAddModList-r12 ::= SEQUENCE (SIZE (1..maxNeighCell-r12)) OF NeighCellsInfo-r12 + +NeighCellsInfo-r12 ::= SEQUENCE { + physCellId-r12 PhysCellId, + p-b-r12 INTEGER (0..3), + crs-PortsCount-r12 ENUMERATED {n1, n2, n4, spare}, + mbsfn-SubframeConfig-r12 MBSFN-SubframeConfigList OPTIONAL, -- Need ON + p-aList-r12 SEQUENCE (SIZE (1..maxP-a-PerNeighCell-r12)) OF P-a, + transmissionModeList-r12 BIT STRING (SIZE(8)), + resAllocGranularity-r12 INTEGER (1..4), + ... +} +P-a ::= ENUMERATED { dB-6, dB-4dot77, dB-3, dB-1dot77, + dB0, dB1, dB2, dB3} + + +RLC-Config ::= CHOICE { + am SEQUENCE { + ul-AM-RLC UL-AM-RLC, + dl-AM-RLC DL-AM-RLC + }, + um-Bi-Directional SEQUENCE { + ul-UM-RLC UL-UM-RLC, + dl-UM-RLC DL-UM-RLC + }, + um-Uni-Directional-UL SEQUENCE { + ul-UM-RLC UL-UM-RLC + }, + um-Uni-Directional-DL SEQUENCE { + dl-UM-RLC DL-UM-RLC + }, + ... +} + +RLC-Config-v1250 ::= SEQUENCE { + ul-extended-RLC-LI-Field-r12 BOOLEAN, + dl-extended-RLC-LI-Field-r12 BOOLEAN +} + +UL-AM-RLC ::= SEQUENCE { + t-PollRetransmit T-PollRetransmit, + pollPDU PollPDU, + pollByte PollByte, + maxRetxThreshold ENUMERATED { + t1, t2, t3, t4, t6, t8, t16, t32} +} + +DL-AM-RLC ::= SEQUENCE { + t-Reordering T-Reordering, + t-StatusProhibit T-StatusProhibit +} + +UL-UM-RLC ::= SEQUENCE { + sn-FieldLength SN-FieldLength +} + +DL-UM-RLC ::= SEQUENCE { + sn-FieldLength SN-FieldLength, + t-Reordering T-Reordering +} + +SN-FieldLength ::= ENUMERATED {size5, size10} + +T-PollRetransmit ::= ENUMERATED { + ms5, ms10, ms15, ms20, ms25, ms30, ms35, + ms40, ms45, ms50, ms55, ms60, ms65, ms70, + ms75, ms80, ms85, ms90, ms95, ms100, ms105, + ms110, ms115, ms120, ms125, ms130, ms135, + ms140, ms145, ms150, ms155, ms160, ms165, + ms170, ms175, ms180, ms185, ms190, ms195, + ms200, ms205, ms210, ms215, ms220, ms225, + ms230, ms235, ms240, ms245, ms250, ms300, + ms350, ms400, ms450, ms500, spare9, spare8, + spare7, spare6, spare5, spare4, spare3, + spare2, spare1} + +PollPDU ::= ENUMERATED { + p4, p8, p16, p32, p64, p128, p256, pInfinity} + +PollByte ::= ENUMERATED { + kB25, kB50, kB75, kB100, kB125, kB250, kB375, + kB500, kB750, kB1000, kB1250, kB1500, kB2000, + kB3000, kBinfinity, spare1} + +T-Reordering ::= ENUMERATED { + ms0, ms5, ms10, ms15, ms20, ms25, ms30, ms35, + ms40, ms45, ms50, ms55, ms60, ms65, ms70, + ms75, ms80, ms85, ms90, ms95, ms100, ms110, + ms120, ms130, ms140, ms150, ms160, ms170, + ms180, ms190, ms200, spare1} + +T-StatusProhibit ::= ENUMERATED { + ms0, ms5, ms10, ms15, ms20, ms25, ms30, ms35, + ms40, ms45, ms50, ms55, ms60, ms65, ms70, + ms75, ms80, ms85, ms90, ms95, ms100, ms105, + ms110, ms115, ms120, ms125, ms130, ms135, + ms140, ms145, ms150, ms155, ms160, ms165, + ms170, ms175, ms180, ms185, ms190, ms195, + ms200, ms205, ms210, ms215, ms220, ms225, + ms230, ms235, ms240, ms245, ms250, ms300, + ms350, ms400, ms450, ms500, spare8, spare7, + spare6, spare5, spare4, spare3, spare2, + spare1} + + +RLF-TimersAndConstants-r9 ::= CHOICE { + release NULL, + setup SEQUENCE { + t301-r9 ENUMERATED { + ms100, ms200, ms300, ms400, ms600, ms1000, ms1500, + ms2000}, + t310-r9 ENUMERATED { + ms0, ms50, ms100, ms200, ms500, ms1000, ms2000}, + n310-r9 ENUMERATED { + n1, n2, n3, n4, n6, n8, n10, n20}, + t311-r9 ENUMERATED { + ms1000, ms3000, ms5000, ms10000, ms15000, + ms20000, ms30000}, + n311-r9 ENUMERATED { + n1, n2, n3, n4, n5, n6, n8, n10}, + ... + } +} + +RLF-TimersAndConstantsSCG-r12 ::= CHOICE { + release NULL, + setup SEQUENCE { + t313-r12 ENUMERATED { + ms0, ms50, ms100, ms200, ms500, ms1000, ms2000}, + n313-r12 ENUMERATED { + n1, n2, n3, n4, n6, n8, n10, n20}, + n314-r12 ENUMERATED { + n1, n2, n3, n4, n5, n6, n8, n10}, + ... + } +} + + +RN-SubframeConfig-r10 ::= SEQUENCE { + subframeConfigPattern-r10 CHOICE { + subframeConfigPatternFDD-r10 BIT STRING (SIZE(8)), + subframeConfigPatternTDD-r10 INTEGER (0..31) + } OPTIONAL, -- Need ON + rpdcch-Config-r10 SEQUENCE { + resourceAllocationType-r10 ENUMERATED {type0, type1, type2Localized, type2Distributed, + spare4, spare3, spare2, spare1}, + resourceBlockAssignment-r10 CHOICE { + type01-r10 CHOICE { + nrb6-r10 BIT STRING (SIZE(6)), + nrb15-r10 BIT STRING (SIZE(8)), + nrb25-r10 BIT STRING (SIZE(13)), + nrb50-r10 BIT STRING (SIZE(17)), + nrb75-r10 BIT STRING (SIZE(19)), + nrb100-r10 BIT STRING (SIZE(25)) + }, + type2-r10 CHOICE { + nrb6-r10 BIT STRING (SIZE(5)), + nrb15-r10 BIT STRING (SIZE(7)), + nrb25-r10 BIT STRING (SIZE(9)), + nrb50-r10 BIT STRING (SIZE(11)), + nrb75-r10 BIT STRING (SIZE(12)), + nrb100-r10 BIT STRING (SIZE(13)) + }, + ... + }, + demodulationRS-r10 CHOICE { + interleaving-r10 ENUMERATED {crs}, + noInterleaving-r10 ENUMERATED {crs, dmrs} + }, + pdsch-Start-r10 INTEGER (1..3), + pucch-Config-r10 CHOICE { + tdd CHOICE { + channelSelectionMultiplexingBundling SEQUENCE { + n1PUCCH-AN-List-r10 SEQUENCE (SIZE (1..4)) OF INTEGER (0..2047) + }, + fallbackForFormat3 SEQUENCE { + n1PUCCH-AN-P0-r10 INTEGER (0..2047), + n1PUCCH-AN-P1-r10 INTEGER (0..2047) OPTIONAL -- Need OR + } + }, + fdd SEQUENCE { + n1PUCCH-AN-P0-r10 INTEGER (0..2047), + n1PUCCH-AN-P1-r10 INTEGER (0..2047) OPTIONAL -- Need OR + } + }, + ... + } OPTIONAL, -- Need ON + ... +} + + +SchedulingRequestConfig ::= CHOICE { + release NULL, + setup SEQUENCE { + sr-PUCCH-ResourceIndex INTEGER (0..2047), + sr-ConfigIndex INTEGER (0..157), + dsr-TransMax ENUMERATED { + n4, n8, n16, n32, n64, spare3, spare2, spare1} + } +} + +SchedulingRequestConfig-v1020 ::= SEQUENCE { + sr-PUCCH-ResourceIndexP1-r10 INTEGER (0..2047) OPTIONAL -- Need OR +} + + +SoundingRS-UL-ConfigCommon ::= CHOICE { + release NULL, + setup SEQUENCE { + srs-BandwidthConfig ENUMERATED {bw0, bw1, bw2, bw3, bw4, bw5, bw6, bw7}, + srs-SubframeConfig ENUMERATED { + sc0, sc1, sc2, sc3, sc4, sc5, sc6, sc7, + sc8, sc9, sc10, sc11, sc12, sc13, sc14, sc15}, + ackNackSRS-SimultaneousTransmission BOOLEAN, + srs-MaxUpPts ENUMERATED {true} OPTIONAL -- Cond TDD + } +} + +SoundingRS-UL-ConfigDedicated ::= CHOICE{ + release NULL, + setup SEQUENCE { + srs-Bandwidth ENUMERATED {bw0, bw1, bw2, bw3}, + srs-HoppingBandwidth ENUMERATED {hbw0, hbw1, hbw2, hbw3}, + freqDomainPosition INTEGER (0..23), + duration BOOLEAN, + srs-ConfigIndex INTEGER (0..1023), + transmissionComb INTEGER (0..1), + cyclicShift ENUMERATED {cs0, cs1, cs2, cs3, cs4, cs5, cs6, cs7} + } +} + +SoundingRS-UL-ConfigDedicated-v1020 ::= SEQUENCE { + srs-AntennaPort-r10 SRS-AntennaPort +} + +SoundingRS-UL-ConfigDedicatedAperiodic-r10 ::= CHOICE{ + release NULL, + setup SEQUENCE { + srs-ConfigIndexAp-r10 INTEGER (0..31), + srs-ConfigApDCI-Format4-r10 SEQUENCE (SIZE (1..3)) OF SRS-ConfigAp-r10 OPTIONAL,--Need ON + srs-ActivateAp-r10 CHOICE { + release NULL, + setup SEQUENCE { + srs-ConfigApDCI-Format0-r10 SRS-ConfigAp-r10, + srs-ConfigApDCI-Format1a2b2c-r10 SRS-ConfigAp-r10, + ... + } + } OPTIONAL -- Need ON + } +} + +SRS-ConfigAp-r10 ::= SEQUENCE { + srs-AntennaPortAp-r10 SRS-AntennaPort, + srs-BandwidthAp-r10 ENUMERATED {bw0, bw1, bw2, bw3}, + freqDomainPositionAp-r10 INTEGER (0..23), + transmissionCombAp-r10 INTEGER (0..1), + cyclicShiftAp-r10 ENUMERATED {cs0, cs1, cs2, cs3, cs4, cs5, cs6, cs7} +} + +SRS-AntennaPort ::= ENUMERATED {an1, an2, an4, spare1} + + +SPS-Config ::= SEQUENCE { + semiPersistSchedC-RNTI C-RNTI OPTIONAL, -- Need OR + sps-ConfigDL SPS-ConfigDL OPTIONAL, -- Need ON + sps-ConfigUL SPS-ConfigUL OPTIONAL -- Need ON +} + +SPS-ConfigDL ::= CHOICE{ + release NULL, + setup SEQUENCE { + semiPersistSchedIntervalDL ENUMERATED { + sf10, sf20, sf32, sf40, sf64, sf80, + sf128, sf160, sf320, sf640, spare6, + spare5, spare4, spare3, spare2, + spare1}, + numberOfConfSPS-Processes INTEGER (1..8), + n1PUCCH-AN-PersistentList N1PUCCH-AN-PersistentList, + ..., + [[ twoAntennaPortActivated-r10 CHOICE { + release NULL, + setup SEQUENCE { + n1PUCCH-AN-PersistentListP1-r10 N1PUCCH-AN-PersistentList + } + } OPTIONAL -- Need ON + ]] + } +} + +SPS-ConfigUL ::= CHOICE { + release NULL, + setup SEQUENCE { + semiPersistSchedIntervalUL ENUMERATED { + sf10, sf20, sf32, sf40, sf64, sf80, + sf128, sf160, sf320, sf640, spare6, + spare5, spare4, spare3, spare2, + spare1}, + implicitReleaseAfter ENUMERATED {e2, e3, e4, e8}, + p0-Persistent SEQUENCE { + p0-NominalPUSCH-Persistent INTEGER (-126..24), + p0-UE-PUSCH-Persistent INTEGER (-8..7) + } OPTIONAL, -- Need OP + twoIntervalsConfig ENUMERATED {true} OPTIONAL, -- Cond TDD + ..., + [[ p0-PersistentSubframeSet2-r12 CHOICE { + release NULL, + setup SEQUENCE { + p0-NominalPUSCH-PersistentSubframeSet2-r12 INTEGER (-126..24), + p0-UE-PUSCH-PersistentSubframeSet2-r12 INTEGER (-8..7) + } + } OPTIONAL -- Need ON + ]] + } +} + +N1PUCCH-AN-PersistentList ::= SEQUENCE (SIZE (1..4)) OF INTEGER (0..2047) + + +TDD-Config ::= SEQUENCE { + subframeAssignment ENUMERATED { + sa0, sa1, sa2, sa3, sa4, sa5, sa6}, + specialSubframePatterns ENUMERATED { + ssp0, ssp1, ssp2, ssp3, ssp4,ssp5, ssp6, ssp7, + ssp8} +} + +TDD-Config-v1130 ::= SEQUENCE { + specialSubframePatterns-v1130 ENUMERATED {ssp7,ssp9} +} + +TDD-ConfigSL-r12 ::= SEQUENCE { + subframeAssignmentSL-r12 ENUMERATED { + none, sa0, sa1, sa2, sa3, sa4, sa5, sa6} +} + + +TimeAlignmentTimer ::= ENUMERATED { + sf500, sf750, sf1280, sf1920, sf2560, sf5120, + sf10240, infinity} + +TPC-PDCCH-Config ::= CHOICE { + release NULL, + setup SEQUENCE { + tpc-RNTI BIT STRING (SIZE (16)), + tpc-Index TPC-Index + } +} + +TPC-Index ::= CHOICE { + indexOfFormat3 INTEGER (1..15), + indexOfFormat3A INTEGER (1..31) +} + + +UplinkPowerControlCommon ::= SEQUENCE { + p0-NominalPUSCH INTEGER (-126..24), + alpha Alpha-r12, + p0-NominalPUCCH INTEGER (-127..-96), + deltaFList-PUCCH DeltaFList-PUCCH, + deltaPreambleMsg3 INTEGER (-1..6) +} + +UplinkPowerControlCommon-v1020 ::= SEQUENCE { + deltaF-PUCCH-Format3-r10 ENUMERATED {deltaF-1, deltaF0, deltaF1, deltaF2, + deltaF3, deltaF4, deltaF5, deltaF6}, + deltaF-PUCCH-Format1bCS-r10 ENUMERATED {deltaF1, deltaF2, spare2, spare1} +} + +UplinkPowerControlCommonPSCell-r12 ::= SEQUENCE { +-- For uplink power control the additional/ missing fields are signalled (compared to SCell) + deltaF-PUCCH-Format3-r12 ENUMERATED {deltaF-1, deltaF0, deltaF1, deltaF2, + deltaF3, deltaF4, deltaF5, deltaF6}, + deltaF-PUCCH-Format1bCS-r12 ENUMERATED {deltaF1, deltaF2, spare2, spare1}, + p0-NominalPUCCH-r12 INTEGER (-127..-96), + deltaFList-PUCCH-r12 DeltaFList-PUCCH +} + +UplinkPowerControlCommonSCell-r10 ::= SEQUENCE { + p0-NominalPUSCH-r10 INTEGER (-126..24), + alpha-r10 Alpha-r12 +} + +UplinkPowerControlCommonSCell-v1130 ::= SEQUENCE { + deltaPreambleMsg3-r11 INTEGER (-1..6) +} + +UplinkPowerControlDedicated ::= SEQUENCE { + p0-UE-PUSCH INTEGER (-8..7), + deltaMCS-Enabled ENUMERATED {en0, en1}, + accumulationEnabled BOOLEAN, + p0-UE-PUCCH INTEGER (-8..7), + pSRS-Offset INTEGER (0..15), + filterCoefficient FilterCoefficient DEFAULT fc4 +} + +UplinkPowerControlDedicated-v1020 ::= SEQUENCE { + deltaTxD-OffsetListPUCCH-r10 DeltaTxD-OffsetListPUCCH-r10 OPTIONAL, -- Need OR + pSRS-OffsetAp-r10 INTEGER (0..15) OPTIONAL -- Need OR +} + +UplinkPowerControlDedicated-v1130 ::= SEQUENCE { + pSRS-Offset-v1130 INTEGER (16..31) OPTIONAL, -- Need OR + pSRS-OffsetAp-v1130 INTEGER (16..31) OPTIONAL, -- Need OR + deltaTxD-OffsetListPUCCH-v1130 DeltaTxD-OffsetListPUCCH-v1130 OPTIONAL -- Need OR +} + +UplinkPowerControlDedicated-v1250 ::= SEQUENCE { + set2PowerControlParameter CHOICE { + release NULL, + setup SEQUENCE { + tpc-SubframeSet-r12 BIT STRING (SIZE(10)), + p0-NominalPUSCH-SubframeSet2-r12 INTEGER (-126..24), + alpha-SubframeSet2-r12 Alpha-r12, + p0-UE-PUSCH-SubframeSet2-r12 INTEGER (-8..7) + } + } +} + +UplinkPowerControlDedicatedSCell-r10 ::= SEQUENCE { + p0-UE-PUSCH-r10 INTEGER (-8..7), + deltaMCS-Enabled-r10 ENUMERATED {en0, en1}, + accumulationEnabled-r10 BOOLEAN, + pSRS-Offset-r10 INTEGER (0..15), + pSRS-OffsetAp-r10 INTEGER (0..15) OPTIONAL, -- Need OR + filterCoefficient-r10 FilterCoefficient DEFAULT fc4, + pathlossReferenceLinking-r10 ENUMERATED {pCell, sCell} +} + +Alpha-r12 ::= ENUMERATED {al0, al04, al05, al06, al07, al08, al09, al1} + +DeltaFList-PUCCH ::= SEQUENCE { + deltaF-PUCCH-Format1 ENUMERATED {deltaF-2, deltaF0, deltaF2}, + deltaF-PUCCH-Format1b ENUMERATED {deltaF1, deltaF3, deltaF5}, + deltaF-PUCCH-Format2 ENUMERATED {deltaF-2, deltaF0, deltaF1, deltaF2}, + deltaF-PUCCH-Format2a ENUMERATED {deltaF-2, deltaF0, deltaF2}, + deltaF-PUCCH-Format2b ENUMERATED {deltaF-2, deltaF0, deltaF2} +} + +DeltaTxD-OffsetListPUCCH-r10 ::= SEQUENCE { + deltaTxD-OffsetPUCCH-Format1-r10 ENUMERATED {dB0, dB-2}, + deltaTxD-OffsetPUCCH-Format1a1b-r10 ENUMERATED {dB0, dB-2}, + deltaTxD-OffsetPUCCH-Format22a2b-r10 ENUMERATED {dB0, dB-2}, + deltaTxD-OffsetPUCCH-Format3-r10 ENUMERATED {dB0, dB-2}, + ... + +} + +DeltaTxD-OffsetListPUCCH-v1130 ::= SEQUENCE { + deltaTxD-OffsetPUCCH-Format1bCS-r11 ENUMERATED {dB0, dB-1} +} + +NextHopChainingCount ::= INTEGER (0..7) + + +SecurityAlgorithmConfig ::= SEQUENCE { + cipheringAlgorithm CipheringAlgorithm-r12, + integrityProtAlgorithm ENUMERATED { + eia0-v920, eia1, eia2, eia3-v1130, spare4, spare3, + spare2, spare1, ...} +} + +CipheringAlgorithm-r12 ::= ENUMERATED { + eea0, eea1, eea2, eea3-v1130, spare4, spare3, + spare2, spare1, ...} + + +ShortMAC-I ::= BIT STRING (SIZE (16)) + + +AdditionalSpectrumEmission ::= INTEGER (1..32) + + +ARFCN-ValueCDMA2000 ::= INTEGER (0..2047) + + +ARFCN-ValueEUTRA ::= INTEGER (0..maxEARFCN) + +ARFCN-ValueEUTRA-v9e0 ::= INTEGER (maxEARFCN-Plus1..maxEARFCN2) + +ARFCN-ValueEUTRA-r9 ::= INTEGER (0..maxEARFCN2) + + +ARFCN-ValueGERAN ::= INTEGER (0..1023) + + +ARFCN-ValueUTRA ::= INTEGER (0..16383) + + +BandclassCDMA2000 ::= ENUMERATED { + bc0, bc1, bc2, bc3, bc4, bc5, bc6, bc7, bc8, + bc9, bc10, bc11, bc12, bc13, bc14, bc15, bc16, + bc17, bc18-v9a0, bc19-v9a0, bc20-v9a0, bc21-v9a0, + spare10, spare9, spare8, spare7, spare6, spare5, spare4, + spare3, spare2, spare1, ...} + + +BandIndicatorGERAN ::= ENUMERATED {dcs1800, pcs1900} + + +CarrierFreqCDMA2000 ::= SEQUENCE { + bandClass BandclassCDMA2000, + arfcn ARFCN-ValueCDMA2000 +} + + +CarrierFreqGERAN ::= SEQUENCE { + arfcn ARFCN-ValueGERAN, + bandIndicator BandIndicatorGERAN +} + + +CarrierFreqsGERAN ::= SEQUENCE { + startingARFCN ARFCN-ValueGERAN, + bandIndicator BandIndicatorGERAN, + followingARFCNs CHOICE { + explicitListOfARFCNs ExplicitListOfARFCNs, + equallySpacedARFCNs SEQUENCE { + arfcn-Spacing INTEGER (1..8), + numberOfFollowingARFCNs INTEGER (0..31) + }, + variableBitMapOfARFCNs OCTET STRING (SIZE (1..16)) + } +} + +ExplicitListOfARFCNs ::= SEQUENCE (SIZE (0..31)) OF ARFCN-ValueGERAN + + +CarrierFreqListMBMS-r11 ::= SEQUENCE (SIZE (1..maxFreqMBMS-r11)) OF ARFCN-ValueEUTRA-r9 + + +CDMA2000-Type ::= ENUMERATED {type1XRTT, typeHRPD} + + +CellIdentity ::= BIT STRING (SIZE (28)) + + +CellIndexList ::= SEQUENCE (SIZE (1..maxCellMeas)) OF CellIndex + +CellIndex ::= INTEGER (1..maxCellMeas) + + +CellReselectionPriority ::= INTEGER (0..7) + + +CSFB-RegistrationParam1XRTT ::= SEQUENCE { + sid BIT STRING (SIZE (15)), + nid BIT STRING (SIZE (16)), + multipleSID BOOLEAN, + multipleNID BOOLEAN, + homeReg BOOLEAN, + foreignSIDReg BOOLEAN, + foreignNIDReg BOOLEAN, + parameterReg BOOLEAN, + powerUpReg BOOLEAN, + registrationPeriod BIT STRING (SIZE (7)), + registrationZone BIT STRING (SIZE (12)), + totalZone BIT STRING (SIZE (3)), + zoneTimer BIT STRING (SIZE (3)) +} + +CSFB-RegistrationParam1XRTT-v920 ::= SEQUENCE { + powerDownReg-r9 ENUMERATED {true} +} + + +CellGlobalIdEUTRA ::= SEQUENCE { + plmn-Identity PLMN-Identity, + cellIdentity CellIdentity +} + + +CellGlobalIdUTRA ::= SEQUENCE { + plmn-Identity PLMN-Identity, + cellIdentity BIT STRING (SIZE (28)) +} + + +CellGlobalIdGERAN ::= SEQUENCE { + plmn-Identity PLMN-Identity, + locationAreaCode BIT STRING (SIZE (16)), + cellIdentity BIT STRING (SIZE (16)) +} + + +CellGlobalIdCDMA2000 ::= CHOICE { + cellGlobalId1XRTT BIT STRING (SIZE (47)), + cellGlobalIdHRPD BIT STRING (SIZE (128)) +} + + +CSG-Identity ::= BIT STRING (SIZE (27)) + + +FreqBandIndicator ::= INTEGER (1..maxFBI) + +FreqBandIndicator-v9e0 ::= INTEGER (maxFBI-Plus1..maxFBI2) + +FreqBandIndicator-r11 ::= INTEGER (1..maxFBI2) + + +MobilityControlInfo ::= SEQUENCE { + targetPhysCellId PhysCellId, + carrierFreq CarrierFreqEUTRA OPTIONAL, -- Cond HO-toEUTRA2 + carrierBandwidth CarrierBandwidthEUTRA OPTIONAL, -- Cond HO-toEUTRA + additionalSpectrumEmission AdditionalSpectrumEmission OPTIONAL, -- Cond HO-toEUTRA + t304 ENUMERATED { + ms50, ms100, ms150, ms200, ms500, ms1000, + ms2000, spare1}, + newUE-Identity C-RNTI, + radioResourceConfigCommon RadioResourceConfigCommon, + rach-ConfigDedicated RACH-ConfigDedicated OPTIONAL, -- Need OP + ..., + [[ carrierFreq-v9e0 CarrierFreqEUTRA-v9e0 OPTIONAL -- Need ON + ]], + [[ drb-ContinueROHC-r11 ENUMERATED {true} OPTIONAL -- Cond HO + ]] +} + +MobilityControlInfoSCG-r12 ::= SEQUENCE { + t307-r12 ENUMERATED { + ms50, ms100, ms150, ms200, ms500, ms1000, + ms2000, spare1}, + ue-IdentitySCG-r12 C-RNTI OPTIONAL, -- Cond SCGEst, + rach-ConfigDedicated-r12 RACH-ConfigDedicated OPTIONAL, -- Need OP + cipheringAlgorithmSCG-r12 CipheringAlgorithm-r12 OPTIONAL, -- Need ON + ... +} + +CarrierBandwidthEUTRA ::= SEQUENCE { + dl-Bandwidth ENUMERATED { + n6, n15, n25, n50, n75, n100, spare10, + spare9, spare8, spare7, spare6, spare5, + spare4, spare3, spare2, spare1}, + ul-Bandwidth ENUMERATED { + n6, n15, n25, n50, n75, n100, spare10, + spare9, spare8, spare7, spare6, spare5, + spare4, spare3, spare2, spare1} OPTIONAL -- Need OP +} + +CarrierFreqEUTRA ::= SEQUENCE { + dl-CarrierFreq ARFCN-ValueEUTRA, + ul-CarrierFreq ARFCN-ValueEUTRA OPTIONAL -- Cond FDD +} + +CarrierFreqEUTRA-v9e0 ::= SEQUENCE { + dl-CarrierFreq-v9e0 ARFCN-ValueEUTRA-r9, + ul-CarrierFreq-v9e0 ARFCN-ValueEUTRA-r9 OPTIONAL -- Cond FDD +} + + +MobilityParametersCDMA2000 ::= OCTET STRING + + +MobilityStateParameters ::= SEQUENCE { + t-Evaluation ENUMERATED { + s30, s60, s120, s180, s240, spare3, spare2, spare1}, + t-HystNormal ENUMERATED { + s30, s60, s120, s180, s240, spare3, spare2, spare1}, + n-CellChangeMedium INTEGER (1..16), + n-CellChangeHigh INTEGER (1..16) +} + + +MultiBandInfoList ::= SEQUENCE (SIZE (1..maxMultiBands)) OF FreqBandIndicator + +MultiBandInfoList-v9e0 ::= SEQUENCE (SIZE (1..maxMultiBands)) OF MultiBandInfo-v9e0 + +MultiBandInfoList-r11 ::= SEQUENCE (SIZE (1..maxMultiBands)) OF FreqBandIndicator-r11 + +MultiBandInfo-v9e0 ::= SEQUENCE { + freqBandIndicator-v9e0 FreqBandIndicator-v9e0 OPTIONAL -- Need OP +} + + +PhysCellId ::= INTEGER (0..503) + + +PhysCellIdRange ::= SEQUENCE { + start PhysCellId, + range ENUMERATED { + n4, n8, n12, n16, n24, n32, n48, n64, n84, + n96, n128, n168, n252, n504, spare2, + spare1} OPTIONAL -- Need OP +} + + +PhysCellIdRangeUTRA-FDDList-r9::= SEQUENCE (SIZE (1..maxPhysCellIdRange-r9)) OF PhysCellIdRangeUTRA-FDD-r9 + +PhysCellIdRangeUTRA-FDD-r9 ::= SEQUENCE { + start-r9 PhysCellIdUTRA-FDD, + range-r9 INTEGER (2..512) OPTIONAL -- Need OP +} + + +PhysCellIdCDMA2000 ::= INTEGER (0..maxPNOffset) + + +PhysCellIdGERAN ::= SEQUENCE { + networkColourCode BIT STRING (SIZE (3)), + baseStationColourCode BIT STRING (SIZE (3)) +} + + +PhysCellIdUTRA-FDD ::= INTEGER (0..511) + + +PhysCellIdUTRA-TDD ::= INTEGER (0..127) + + +PLMN-Identity ::= SEQUENCE { + mcc MCC OPTIONAL, -- Cond MCC + mnc MNC +} + +MCC ::= SEQUENCE (SIZE (3)) OF + MCC-MNC-Digit + +MNC ::= SEQUENCE (SIZE (2..3)) OF + MCC-MNC-Digit + +MCC-MNC-Digit ::= INTEGER (0..9) + + + +PLMN-IdentityList3-r11 ::= SEQUENCE (SIZE (1..16)) OF PLMN-Identity + + +PreRegistrationInfoHRPD ::= SEQUENCE { + preRegistrationAllowed BOOLEAN, + preRegistrationZoneId PreRegistrationZoneIdHRPD OPTIONAL, -- cond PreRegAllowed + secondaryPreRegistrationZoneIdList SecondaryPreRegistrationZoneIdListHRPD OPTIONAL -- Need OR +} + +SecondaryPreRegistrationZoneIdListHRPD ::= SEQUENCE (SIZE (1..2)) OF PreRegistrationZoneIdHRPD + +PreRegistrationZoneIdHRPD ::= INTEGER (0..255) + + +Q-QualMin-r9 ::= INTEGER (-34..-3) + + +Q-RxLevMin ::= INTEGER (-70..-22) + + +Q-OffsetRange ::= ENUMERATED { + dB-24, dB-22, dB-20, dB-18, dB-16, dB-14, + dB-12, dB-10, dB-8, dB-6, dB-5, dB-4, dB-3, + dB-2, dB-1, dB0, dB1, dB2, dB3, dB4, dB5, + dB6, dB8, dB10, dB12, dB14, dB16, dB18, + dB20, dB22, dB24} + + +Q-OffsetRangeInterRAT ::= INTEGER (-15..15) + + +ReselectionThreshold ::= INTEGER (0..31) + + +ReselectionThresholdQ-r9 ::= INTEGER (0..31) + + +SCellIndex-r10 ::= INTEGER (1..7) + + +ServCellIndex-r10 ::= INTEGER (0..7) + + +SpeedStateScaleFactors ::= SEQUENCE { + sf-Medium ENUMERATED {oDot25, oDot5, oDot75, lDot0}, + sf-High ENUMERATED {oDot25, oDot5, oDot75, lDot0} +} + +SystemInfoListGERAN ::= SEQUENCE (SIZE (1..maxGERAN-SI)) OF + OCTET STRING (SIZE (1..23)) + + +SystemTimeInfoCDMA2000 ::= SEQUENCE { + cdma-EUTRA-Synchronisation BOOLEAN, + cdma-SystemTime CHOICE { + synchronousSystemTime BIT STRING (SIZE (39)), + asynchronousSystemTime BIT STRING (SIZE (49)) + } +} + + +TrackingAreaCode ::= BIT STRING (SIZE (16)) + + +T-Reselection ::= INTEGER (0..7) + + +AllowedMeasBandwidth ::= ENUMERATED {mbw6, mbw15, mbw25, mbw50, mbw75, mbw100} + + +CSI-RSRP-Range-r12 ::= INTEGER(0..97) + + +Hysteresis ::= INTEGER (0..30) + + +LocationInfo-r10 ::= SEQUENCE { + locationCoordinates-r10 CHOICE { + ellipsoid-Point-r10 OCTET STRING, + ellipsoidPointWithAltitude-r10 OCTET STRING, + ..., + ellipsoidPointWithUncertaintyCircle-r11 OCTET STRING, + ellipsoidPointWithUncertaintyEllipse-r11 OCTET STRING, + ellipsoidPointWithAltitudeAndUncertaintyEllipsoid-r11 OCTET STRING, + ellipsoidArc-r11 OCTET STRING, + polygon-r11 OCTET STRING + }, + horizontalVelocity-r10 OCTET STRING OPTIONAL, + gnss-TOD-msec-r10 OCTET STRING OPTIONAL, + ... +} + + +MBSFN-RSRQ-Range-r12 ::= INTEGER(0..31) + +MeasConfig ::= SEQUENCE { + -- Measurement objects + measObjectToRemoveList MeasObjectToRemoveList OPTIONAL, -- Need ON + measObjectToAddModList MeasObjectToAddModList OPTIONAL, -- Need ON + -- Reporting configurations + reportConfigToRemoveList ReportConfigToRemoveList OPTIONAL, -- Need ON + reportConfigToAddModList ReportConfigToAddModList OPTIONAL, -- Need ON + -- Measurement identities + measIdToRemoveList MeasIdToRemoveList OPTIONAL, -- Need ON + measIdToAddModList MeasIdToAddModList OPTIONAL, -- Need ON + -- Other parameters + quantityConfig QuantityConfig OPTIONAL, -- Need ON + measGapConfig MeasGapConfig OPTIONAL, -- Need ON + s-Measure RSRP-Range OPTIONAL, -- Need ON + preRegistrationInfoHRPD PreRegistrationInfoHRPD OPTIONAL, -- Need OP + speedStatePars CHOICE { + release NULL, + setup SEQUENCE { + mobilityStateParameters MobilityStateParameters, + timeToTrigger-SF SpeedStateScaleFactors + } + } OPTIONAL, -- Need ON + ..., + [[ measObjectToAddModList-v9e0 MeasObjectToAddModList-v9e0 OPTIONAL -- Need ON + ]], + [[ allowInterruptions-r11 BOOLEAN OPTIONAL -- Need ON + ]], + [[ measScaleFactor-r12 CHOICE { + release NULL, + setup MeasScaleFactor-r12 + } OPTIONAL, -- Need ON + measIdToRemoveListExt-r12 MeasIdToRemoveListExt-r12 OPTIONAL, -- Need ON + measIdToAddModListExt-r12 MeasIdToAddModListExt-r12 OPTIONAL, -- Need ON + measRSRQ-OnAllSymbols-r12 BOOLEAN OPTIONAL -- Need ON + ]] +} + +MeasIdToRemoveList ::= SEQUENCE (SIZE (1..maxMeasId)) OF MeasId + +MeasIdToRemoveListExt-r12 ::= SEQUENCE (SIZE (1..maxMeasId)) OF MeasId-v1250 + +MeasObjectToRemoveList ::= SEQUENCE (SIZE (1..maxObjectId)) OF MeasObjectId + +ReportConfigToRemoveList ::= SEQUENCE (SIZE (1..maxReportConfigId)) OF ReportConfigId + + +MeasDS-Config-r12 ::= CHOICE { + release NULL, + setup SEQUENCE { + dmtc-PeriodOffset-r12 CHOICE { + ms40-r12 INTEGER(0..39), + ms80-r12 INTEGER(0..79), + ms160-r12 INTEGER(0..159), + ... + }, + ds-OccasionDuration-r12 CHOICE { + durationFDD-r12 INTEGER(1..maxDS-Duration-r12), + durationTDD-r12 INTEGER(2..maxDS-Duration-r12) + }, + measCSI-RS-ToRemoveList-r12 MeasCSI-RS-ToRemoveList-r12 OPTIONAL, -- Need ON + measCSI-RS-ToAddModList-r12 MeasCSI-RS-ToAddModList-r12 OPTIONAL, -- Need ON + ... + } +} + +MeasCSI-RS-ToRemoveList-r12 ::= SEQUENCE (SIZE (1..maxCSI-RS-Meas-r12)) OF MeasCSI-RS-Id-r12 + +MeasCSI-RS-ToAddModList-r12 ::= SEQUENCE (SIZE (1..maxCSI-RS-Meas-r12)) OF MeasCSI-RS-Config-r12 + +MeasCSI-RS-Id-r12 ::= INTEGER (1..maxCSI-RS-Meas-r12) + +MeasCSI-RS-Config-r12 ::= SEQUENCE { + measCSI-RS-Id-r12 MeasCSI-RS-Id-r12, + physCellId-r12 INTEGER (0..503), + scramblingIdentity-r12 INTEGER (0..503), + resourceConfig-r12 INTEGER (0..31), + subframeOffset-r12 INTEGER (0..4), + csi-RS-IndividualOffset-r12 Q-OffsetRange, + ... +} + + +MeasGapConfig ::= CHOICE { + release NULL, + setup SEQUENCE { + gapOffset CHOICE { + gp0 INTEGER (0..39), + gp1 INTEGER (0..79), + ... + } + } +} + + +MeasId ::= INTEGER (1..maxMeasId) + +MeasId-v1250 ::= INTEGER (maxMeasId-Plus1..maxMeasId-r12) + + +MeasIdToAddModList ::= SEQUENCE (SIZE (1..maxMeasId)) OF MeasIdToAddMod + +MeasIdToAddModListExt-r12 ::= SEQUENCE (SIZE (1..maxMeasId)) OF MeasIdToAddModExt-r12 + +MeasIdToAddMod ::= SEQUENCE { + measId MeasId, + measObjectId MeasObjectId, + reportConfigId ReportConfigId +} + +MeasIdToAddModExt-r12 ::= SEQUENCE { + measId-v1250 MeasId-v1250, + measObjectId-r12 MeasObjectId, + reportConfigId-r12 ReportConfigId +} + + +MeasObjectCDMA2000 ::= SEQUENCE { + cdma2000-Type CDMA2000-Type, + carrierFreq CarrierFreqCDMA2000, + searchWindowSize INTEGER (0..15) OPTIONAL, -- Need ON + offsetFreq Q-OffsetRangeInterRAT DEFAULT 0, + cellsToRemoveList CellIndexList OPTIONAL, -- Need ON + cellsToAddModList CellsToAddModListCDMA2000 OPTIONAL, -- Need ON + cellForWhichToReportCGI PhysCellIdCDMA2000 OPTIONAL, -- Need ON + ... +} + +CellsToAddModListCDMA2000 ::= SEQUENCE (SIZE (1..maxCellMeas)) OF CellsToAddModCDMA2000 + +CellsToAddModCDMA2000 ::= SEQUENCE { + cellIndex INTEGER (1..maxCellMeas), + physCellId PhysCellIdCDMA2000 +} + + +MeasObjectEUTRA ::= SEQUENCE { + carrierFreq ARFCN-ValueEUTRA, + allowedMeasBandwidth AllowedMeasBandwidth, + presenceAntennaPort1 PresenceAntennaPort1, + neighCellConfig NeighCellConfig, + offsetFreq Q-OffsetRange DEFAULT dB0, + -- Cell list + cellsToRemoveList CellIndexList OPTIONAL, -- Need ON + cellsToAddModList CellsToAddModList OPTIONAL, -- Need ON + -- Black list + blackCellsToRemoveList CellIndexList OPTIONAL, -- Need ON + blackCellsToAddModList BlackCellsToAddModList OPTIONAL, -- Need ON + cellForWhichToReportCGI PhysCellId OPTIONAL, -- Need ON + ..., + [[measCycleSCell-r10 MeasCycleSCell-r10 OPTIONAL, -- Need ON + measSubframePatternConfigNeigh-r10 MeasSubframePatternConfigNeigh-r10 OPTIONAL -- Need ON + ]], + [[widebandRSRQ-Meas-r11 BOOLEAN OPTIONAL -- Cond WB-RSRQ + ]], + [[ altTTT-CellsToRemoveList-r12 CellIndexList OPTIONAL, -- Need ON + altTTT-CellsToAddModList-r12 AltTTT-CellsToAddModList-r12 OPTIONAL, -- Need ON + t312-r12 CHOICE { + release NULL, + setup ENUMERATED {ms0, ms50, ms100, ms200, + ms300, ms400, ms500, ms1000} + } OPTIONAL, -- Need ON + reducedMeasPerformance-r12 BOOLEAN OPTIONAL, -- Need ON + measDS-Config-r12 MeasDS-Config-r12 OPTIONAL -- Need ON + ]] +} + +MeasObjectEUTRA-v9e0 ::= SEQUENCE { + carrierFreq-v9e0 ARFCN-ValueEUTRA-v9e0 +} + +CellsToAddModList ::= SEQUENCE (SIZE (1..maxCellMeas)) OF CellsToAddMod + +CellsToAddMod ::= SEQUENCE { + cellIndex INTEGER (1..maxCellMeas), + physCellId PhysCellId, + cellIndividualOffset Q-OffsetRange +} + +BlackCellsToAddModList ::= SEQUENCE (SIZE (1..maxCellMeas)) OF BlackCellsToAddMod + +BlackCellsToAddMod ::= SEQUENCE { + cellIndex INTEGER (1..maxCellMeas), + physCellIdRange PhysCellIdRange +} + +MeasCycleSCell-r10 ::= ENUMERATED {sf160, sf256, sf320, sf512, + sf640, sf1024, sf1280, spare1} + +MeasSubframePatternConfigNeigh-r10 ::= CHOICE { + release NULL, + setup SEQUENCE { + measSubframePatternNeigh-r10 MeasSubframePattern-r10, + measSubframeCellList-r10 MeasSubframeCellList-r10 OPTIONAL -- Cond always + } +} + +MeasSubframeCellList-r10 ::= SEQUENCE (SIZE (1..maxCellMeas)) OF PhysCellIdRange + +AltTTT-CellsToAddModList-r12 ::= SEQUENCE (SIZE (1..maxCellMeas)) OF AltTTT-CellsToAddMod-r12 + +AltTTT-CellsToAddMod-r12 ::= SEQUENCE { + cellIndex-r12 INTEGER (1..maxCellMeas), + physCellIdRange-r12 PhysCellIdRange +} + + +MeasObjectGERAN ::= SEQUENCE { + carrierFreqs CarrierFreqsGERAN, + offsetFreq Q-OffsetRangeInterRAT DEFAULT 0, + ncc-Permitted BIT STRING(SIZE (8)) DEFAULT '11111111'B, + cellForWhichToReportCGI PhysCellIdGERAN OPTIONAL, -- Need ON + ... +} + + +MeasObjectId ::= INTEGER (1..maxObjectId) + + +MeasObjectToAddModList ::= SEQUENCE (SIZE (1..maxObjectId)) OF MeasObjectToAddMod + +MeasObjectToAddModList-v9e0 ::= SEQUENCE (SIZE (1..maxObjectId)) OF MeasObjectToAddMod-v9e0 + +MeasObjectToAddMod ::= SEQUENCE { + measObjectId MeasObjectId, + measObject CHOICE { + measObjectEUTRA MeasObjectEUTRA, + measObjectUTRA MeasObjectUTRA, + measObjectGERAN MeasObjectGERAN, + measObjectCDMA2000 MeasObjectCDMA2000, + ... + } +} + +MeasObjectToAddMod-v9e0 ::= SEQUENCE { + measObjectEUTRA-v9e0 MeasObjectEUTRA-v9e0 OPTIONAL -- Cond eutra +} + + +MeasObjectUTRA ::= SEQUENCE { + carrierFreq ARFCN-ValueUTRA, + offsetFreq Q-OffsetRangeInterRAT DEFAULT 0, + cellsToRemoveList CellIndexList OPTIONAL, -- Need ON + cellsToAddModList CHOICE { + cellsToAddModListUTRA-FDD CellsToAddModListUTRA-FDD, + cellsToAddModListUTRA-TDD CellsToAddModListUTRA-TDD + } OPTIONAL, -- Need ON + cellForWhichToReportCGI CHOICE { + utra-FDD PhysCellIdUTRA-FDD, + utra-TDD PhysCellIdUTRA-TDD + } OPTIONAL, -- Need ON + ..., + [[ csg-allowedReportingCells-v930 CSG-AllowedReportingCells-r9 OPTIONAL -- Need ON + ]], + [[ reducedMeasPerformance-r12 BOOLEAN OPTIONAL -- Need ON + ]] +} + +CellsToAddModListUTRA-FDD ::= SEQUENCE (SIZE (1..maxCellMeas)) OF CellsToAddModUTRA-FDD + +CellsToAddModUTRA-FDD ::= SEQUENCE { + cellIndex INTEGER (1..maxCellMeas), + physCellId PhysCellIdUTRA-FDD +} + +CellsToAddModListUTRA-TDD ::= SEQUENCE (SIZE (1..maxCellMeas)) OF CellsToAddModUTRA-TDD + +CellsToAddModUTRA-TDD ::= SEQUENCE { + cellIndex INTEGER (1..maxCellMeas), + physCellId PhysCellIdUTRA-TDD +} + +CSG-AllowedReportingCells-r9 ::= SEQUENCE { + physCellIdRangeUTRA-FDDList-r9 PhysCellIdRangeUTRA-FDDList-r9 OPTIONAL -- Need OR +} + +MeasResults ::= SEQUENCE { + measId MeasId, + measResultPCell SEQUENCE { + rsrpResult RSRP-Range, + rsrqResult RSRQ-Range + }, + measResultNeighCells CHOICE { + measResultListEUTRA MeasResultListEUTRA, + measResultListUTRA MeasResultListUTRA, + measResultListGERAN MeasResultListGERAN, + measResultsCDMA2000 MeasResultsCDMA2000, + ... + } OPTIONAL, + ..., + [[ measResultForECID-r9 MeasResultForECID-r9 OPTIONAL + ]], + [[ locationInfo-r10 LocationInfo-r10 OPTIONAL, + measResultServFreqList-r10 MeasResultServFreqList-r10 OPTIONAL + ]], + [[ measId-v1250 MeasId-v1250 OPTIONAL, + measResultPCell-v1250 RSRQ-Range-v1250 OPTIONAL, + measResultCSI-RS-List-r12 MeasResultCSI-RS-List-r12 OPTIONAL + ]] +} + +MeasResultListEUTRA ::= SEQUENCE (SIZE (1..maxCellReport)) OF MeasResultEUTRA + +MeasResultEUTRA ::= SEQUENCE { + physCellId PhysCellId, + cgi-Info SEQUENCE { + cellGlobalId CellGlobalIdEUTRA, + trackingAreaCode TrackingAreaCode, + plmn-IdentityList PLMN-IdentityList2 OPTIONAL + } OPTIONAL, + measResult SEQUENCE { + rsrpResult RSRP-Range OPTIONAL, + rsrqResult RSRQ-Range OPTIONAL, + ..., + [[ additionalSI-Info-r9 AdditionalSI-Info-r9 OPTIONAL + ]], + [[ primaryPLMN-Suitable-r12 ENUMERATED {true} OPTIONAL, + measResult-v1250 RSRQ-Range-v1250 OPTIONAL + ]] + } +} + +MeasResultServFreqList-r10 ::= SEQUENCE (SIZE (1..maxServCell-r10)) OF MeasResultServFreq-r10 + +MeasResultServFreq-r10 ::= SEQUENCE { + servFreqId-r10 ServCellIndex-r10, + measResultSCell-r10 SEQUENCE { + rsrpResultSCell-r10 RSRP-Range, + rsrqResultSCell-r10 RSRQ-Range + } OPTIONAL, + measResultBestNeighCell-r10 SEQUENCE { + physCellId-r10 PhysCellId, + rsrpResultNCell-r10 RSRP-Range, + rsrqResultNCell-r10 RSRQ-Range + } OPTIONAL, + ..., + [[ measResultSCell-v1250 RSRQ-Range-v1250 OPTIONAL, + measResultBestNeighCell-v1250 RSRQ-Range-v1250 OPTIONAL + ]] +} + +MeasResultCSI-RS-List-r12 ::= SEQUENCE (SIZE (1..maxCellReport)) OF MeasResultCSI-RS-r12 + +MeasResultCSI-RS-r12 ::= SEQUENCE { + measCSI-RS-Id-r12 MeasCSI-RS-Id-r12, + csi-RSRP-Result-r12 CSI-RSRP-Range-r12, + ... +} + +MeasResultListUTRA ::= SEQUENCE (SIZE (1..maxCellReport)) OF MeasResultUTRA + +MeasResultUTRA ::= SEQUENCE { + physCellId CHOICE { + fdd PhysCellIdUTRA-FDD, + tdd PhysCellIdUTRA-TDD + }, + cgi-Info SEQUENCE { + cellGlobalId CellGlobalIdUTRA, + locationAreaCode BIT STRING (SIZE (16)) OPTIONAL, + routingAreaCode BIT STRING (SIZE (8)) OPTIONAL, + plmn-IdentityList PLMN-IdentityList2 OPTIONAL + } OPTIONAL, + measResult SEQUENCE { + utra-RSCP INTEGER (-5..91) OPTIONAL, + utra-EcN0 INTEGER (0..49) OPTIONAL, + ..., + [[ additionalSI-Info-r9 AdditionalSI-Info-r9 OPTIONAL + ]], + [[ primaryPLMN-Suitable-r12 ENUMERATED {true} OPTIONAL + ]] + } +} + +MeasResultListGERAN ::= SEQUENCE (SIZE (1..maxCellReport)) OF MeasResultGERAN + +MeasResultGERAN ::= SEQUENCE { + carrierFreq CarrierFreqGERAN, + physCellId PhysCellIdGERAN, + cgi-Info SEQUENCE { + cellGlobalId CellGlobalIdGERAN, + routingAreaCode BIT STRING (SIZE (8)) OPTIONAL + } OPTIONAL, + measResult SEQUENCE { + rssi INTEGER (0..63), + ... + } +} + +MeasResultsCDMA2000 ::= SEQUENCE { + preRegistrationStatusHRPD BOOLEAN, + measResultListCDMA2000 MeasResultListCDMA2000 +} + +MeasResultListCDMA2000 ::= SEQUENCE (SIZE (1..maxCellReport)) OF MeasResultCDMA2000 + +MeasResultCDMA2000 ::= SEQUENCE { + physCellId PhysCellIdCDMA2000, + cgi-Info CellGlobalIdCDMA2000 OPTIONAL, + measResult SEQUENCE { + pilotPnPhase INTEGER (0..32767) OPTIONAL, + pilotStrength INTEGER (0..63), + ... + } +} + +MeasResultForECID-r9 ::= SEQUENCE { + ue-RxTxTimeDiffResult-r9 INTEGER (0..4095), + currentSFN-r9 BIT STRING (SIZE (10)) +} + +PLMN-IdentityList2 ::= SEQUENCE (SIZE (1..5)) OF PLMN-Identity + +AdditionalSI-Info-r9 ::= SEQUENCE { + csg-MemberStatus-r9 ENUMERATED {member} OPTIONAL, + csg-Identity-r9 CSG-Identity OPTIONAL +} + + +MeasScaleFactor-r12 ::= ENUMERATED {sf-EUTRA-cf1, sf-EUTRA-cf2} + + +QuantityConfig ::= SEQUENCE { + quantityConfigEUTRA QuantityConfigEUTRA OPTIONAL, -- Need ON + quantityConfigUTRA QuantityConfigUTRA OPTIONAL, -- Need ON + quantityConfigGERAN QuantityConfigGERAN OPTIONAL, -- Need ON + quantityConfigCDMA2000 QuantityConfigCDMA2000 OPTIONAL, -- Need ON + ..., + [[ quantityConfigUTRA-v1020 QuantityConfigUTRA-v1020 OPTIONAL -- Need ON + ]], + [[ quantityConfigEUTRA-v1250 QuantityConfigEUTRA-v1250 OPTIONAL -- Need ON + ]] +} + +QuantityConfigEUTRA ::= SEQUENCE { + filterCoefficientRSRP FilterCoefficient DEFAULT fc4, + filterCoefficientRSRQ FilterCoefficient DEFAULT fc4 +} + +QuantityConfigEUTRA-v1250 ::= SEQUENCE { + filterCoefficientCSI-RSRP-r12 FilterCoefficient OPTIONAL -- Need OR +} + +QuantityConfigUTRA ::= SEQUENCE { + measQuantityUTRA-FDD ENUMERATED {cpich-RSCP, cpich-EcN0}, + measQuantityUTRA-TDD ENUMERATED {pccpch-RSCP}, + filterCoefficient FilterCoefficient DEFAULT fc4 +} + +QuantityConfigUTRA-v1020 ::= SEQUENCE { + filterCoefficient2-FDD-r10 FilterCoefficient DEFAULT fc4 +} + +QuantityConfigGERAN ::= SEQUENCE { + measQuantityGERAN ENUMERATED {rssi}, + filterCoefficient FilterCoefficient DEFAULT fc2 +} + +QuantityConfigCDMA2000 ::= SEQUENCE { + measQuantityCDMA2000 ENUMERATED {pilotStrength, pilotPnPhaseAndPilotStrength} +} + + +ReportConfigEUTRA ::= SEQUENCE { + triggerType CHOICE { + event SEQUENCE { + eventId CHOICE { + eventA1 SEQUENCE { + a1-Threshold ThresholdEUTRA + }, + eventA2 SEQUENCE { + a2-Threshold ThresholdEUTRA + }, + eventA3 SEQUENCE { + a3-Offset INTEGER (-30..30), + reportOnLeave BOOLEAN + }, + eventA4 SEQUENCE { + a4-Threshold ThresholdEUTRA + }, + eventA5 SEQUENCE { + a5-Threshold1 ThresholdEUTRA, + a5-Threshold2 ThresholdEUTRA + }, + ..., + eventA6-r10 SEQUENCE { + a6-Offset-r10 INTEGER (-30..30), + a6-ReportOnLeave-r10 BOOLEAN + }, + eventC1-r12 SEQUENCE { + c1-Threshold-r12 ThresholdEUTRA-v1250, + c1-ReportOnLeave-r12 BOOLEAN + }, + eventC2-r12 SEQUENCE { + c2-RefCSI-RS-r12 MeasCSI-RS-Id-r12, + c2-Offset-r12 INTEGER (-30..30), + c2-ReportOnLeave-r12 BOOLEAN + } + }, + hysteresis Hysteresis, + timeToTrigger TimeToTrigger + }, + periodical SEQUENCE { + purpose ENUMERATED { + reportStrongestCells, reportCGI} + } + }, + triggerQuantity ENUMERATED {rsrp, rsrq}, + reportQuantity ENUMERATED {sameAsTriggerQuantity, both}, + maxReportCells INTEGER (1..maxCellReport), + reportInterval ReportInterval, + reportAmount ENUMERATED {r1, r2, r4, r8, r16, r32, r64, infinity}, + ..., + [[ si-RequestForHO-r9 ENUMERATED {setup} OPTIONAL, -- Cond reportCGI + ue-RxTxTimeDiffPeriodical-r9 ENUMERATED {setup} OPTIONAL -- Need OR + ]], + [[ includeLocationInfo-r10 ENUMERATED {true} OPTIONAL, -- Need OR + reportAddNeighMeas-r10 ENUMERATED {setup} OPTIONAL -- Need OR + ]], + [[ alternativeTimeToTrigger-r12 CHOICE { + release NULL, + setup TimeToTrigger + } OPTIONAL, -- Need ON + useT312-r12 BOOLEAN OPTIONAL, -- Need ON + usePSCell-r12 BOOLEAN OPTIONAL, -- Need ON + aN-Threshold1-v1250 RSRQ-RangeConfig-r12 OPTIONAL, -- Need ON + a5-Threshold2-v1250 RSRQ-RangeConfig-r12 OPTIONAL, -- Need ON + reportStrongestCSI-RSs-r12 BOOLEAN OPTIONAL, -- Need ON + reportCRS-Meas-r12 BOOLEAN OPTIONAL, -- Need ON + triggerQuantityCSI-RS-r12 BOOLEAN OPTIONAL -- Need ON + ]] +} + +RSRQ-RangeConfig-r12 ::= CHOICE { + release NULL, + setup RSRQ-Range-v1250 +} + +ThresholdEUTRA ::= CHOICE{ + threshold-RSRP RSRP-Range, + threshold-RSRQ RSRQ-Range +} + +ThresholdEUTRA-v1250 ::= CSI-RSRP-Range-r12 + + +ReportConfigId ::= INTEGER (1..maxReportConfigId) + + +ReportConfigInterRAT ::= SEQUENCE { + triggerType CHOICE { + event SEQUENCE { + eventId CHOICE { + eventB1 SEQUENCE { + b1-Threshold CHOICE { + b1-ThresholdUTRA ThresholdUTRA, + b1-ThresholdGERAN ThresholdGERAN, + b1-ThresholdCDMA2000 ThresholdCDMA2000 + } + }, + eventB2 SEQUENCE { + b2-Threshold1 ThresholdEUTRA, + b2-Threshold2 CHOICE { + b2-Threshold2UTRA ThresholdUTRA, + b2-Threshold2GERAN ThresholdGERAN, + b2-Threshold2CDMA2000 ThresholdCDMA2000 + } + }, + ... + }, + hysteresis Hysteresis, + timeToTrigger TimeToTrigger + }, + periodical SEQUENCE { + purpose ENUMERATED { + reportStrongestCells, + reportStrongestCellsForSON, + reportCGI} + } + }, + maxReportCells INTEGER (1..maxCellReport), + reportInterval ReportInterval, + reportAmount ENUMERATED {r1, r2, r4, r8, r16, r32, r64, infinity}, + ..., + [[ si-RequestForHO-r9 ENUMERATED {setup} OPTIONAL -- Cond reportCGI + ]], + [[ reportQuantityUTRA-FDD-r10 ENUMERATED {both} OPTIONAL -- Need OR + ]], + [[ includeLocationInfo-r11 BOOLEAN OPTIONAL -- Need ON + ]], + [[ b2-Threshold1-v1250 CHOICE { + release NULL, + setup RSRQ-Range-v1250 + } OPTIONAL -- Need ON + ]] +} + +ThresholdUTRA ::= CHOICE{ + utra-RSCP INTEGER (-5..91), + utra-EcN0 INTEGER (0..49) +} + +ThresholdGERAN ::= INTEGER (0..63) + +ThresholdCDMA2000 ::= INTEGER (0..63) + + +ReportConfigToAddModList ::= SEQUENCE (SIZE (1..maxReportConfigId)) OF ReportConfigToAddMod + +ReportConfigToAddMod ::= SEQUENCE { + reportConfigId ReportConfigId, + reportConfig CHOICE { + reportConfigEUTRA ReportConfigEUTRA, + reportConfigInterRAT ReportConfigInterRAT + } +} + + + +ReportInterval ::= ENUMERATED { + ms120, ms240, ms480, ms640, ms1024, ms2048, ms5120, ms10240, + min1, min6, min12, min30, min60, spare3, spare2, spare1} + + +RSRP-Range ::= INTEGER(0..97) + +RSRP-RangeSL-r12 ::= INTEGER(0..13) + +RSRP-RangeSL2-r12 ::= INTEGER(0..7) + +RSRP-RangeSL3-r12 ::= INTEGER(0..11) + + +RSRQ-Range ::= INTEGER(0..34) + +RSRQ-Range-v1250 ::= INTEGER(-30..46) + + + +RSRQ-Type-r12 ::= SEQUENCE { + allSymbols-r12 BOOLEAN, + wideBand-r12 BOOLEAN +} + + +TimeToTrigger ::= ENUMERATED { + ms0, ms40, ms64, ms80, ms100, ms128, ms160, ms256, + ms320, ms480, ms512, ms640, ms1024, ms1280, ms2560, + ms5120} + + +AbsoluteTimeInfo-r10 ::= BIT STRING (SIZE (48)) + + +AreaConfiguration-r10 ::= CHOICE { + cellGlobalIdList-r10 CellGlobalIdList-r10, + trackingAreaCodeList-r10 TrackingAreaCodeList-r10 +} + +AreaConfiguration-v1130 ::= SEQUENCE { + trackingAreaCodeList-v1130 TrackingAreaCodeList-v1130 +} + +CellGlobalIdList-r10 ::= SEQUENCE (SIZE (1..32)) OF CellGlobalIdEUTRA + +TrackingAreaCodeList-r10 ::= SEQUENCE (SIZE (1..8)) OF TrackingAreaCode + +TrackingAreaCodeList-v1130 ::= SEQUENCE { + plmn-Identity-perTAC-List-r11 SEQUENCE (SIZE (1..8)) OF PLMN-Identity +} + + +C-RNTI ::= BIT STRING (SIZE (16)) + + +DedicatedInfoCDMA2000 ::= OCTET STRING + + +DedicatedInfoNAS ::= OCTET STRING + + +FilterCoefficient ::= ENUMERATED { + fc0, fc1, fc2, fc3, fc4, fc5, + fc6, fc7, fc8, fc9, fc11, fc13, + fc15, fc17, fc19, spare1, ...} + + +LoggingDuration-r10 ::= ENUMERATED { + min10, min20, min40, min60, min90, min120, spare2, spare1} + + +LoggingInterval-r10 ::= ENUMERATED { + ms1280, ms2560, ms5120, ms10240, ms20480, + ms30720, ms40960, ms61440} + + +MeasSubframePattern-r10 ::= CHOICE { + subframePatternFDD-r10 BIT STRING (SIZE (40)), + subframePatternTDD-r10 CHOICE { + subframeConfig1-5-r10 BIT STRING (SIZE (20)), + subframeConfig0-r10 BIT STRING (SIZE (70)), + subframeConfig6-r10 BIT STRING (SIZE (60)), + ... + }, + ... +} + + +MMEC ::= BIT STRING (SIZE (8)) + + +NeighCellConfig ::= BIT STRING (SIZE (2)) + + +OtherConfig-r9 ::= SEQUENCE { + reportProximityConfig-r9 ReportProximityConfig-r9 OPTIONAL, -- Need ON + ..., + [[ idc-Config-r11 IDC-Config-r11 OPTIONAL, -- Need ON + powerPrefIndicationConfig-r11 PowerPrefIndicationConfig-r11 OPTIONAL, -- Need ON + obtainLocationConfig-r11 ObtainLocationConfig-r11 OPTIONAL -- Need ON + ]] +} + +IDC-Config-r11 ::= SEQUENCE { + idc-Indication-r11 ENUMERATED {setup} OPTIONAL, -- Need OR + autonomousDenialParameters-r11 SEQUENCE { + autonomousDenialSubframes-r11 ENUMERATED {n2, n5, n10, n15, + n20, n30, spare2, spare1}, + autonomousDenialValidity-r11 ENUMERATED { + sf200, sf500, sf1000, sf2000, + spare4, spare3, spare2, spare1} + } OPTIONAL, -- Need OR + ... +} + +ObtainLocationConfig-r11 ::= SEQUENCE { + obtainLocation-r11 ENUMERATED {setup} OPTIONAL -- Need OR +} + +PowerPrefIndicationConfig-r11 ::= CHOICE{ + release NULL, + setup SEQUENCE{ + powerPrefIndicationTimer-r11 ENUMERATED {s0, s0dot5, s1, s2, s5, s10, s20, + s30, s60, s90, s120, s300, s600, spare3, + spare2, spare1} + } +} + +ReportProximityConfig-r9 ::= SEQUENCE { + proximityIndicationEUTRA-r9 ENUMERATED {enabled} OPTIONAL, -- Need OR + proximityIndicationUTRA-r9 ENUMERATED {enabled} OPTIONAL -- Need OR +} + + +RAND-CDMA2000 ::= BIT STRING (SIZE (32)) + + +RAT-Type ::= ENUMERATED { + eutra, utra, geran-cs, geran-ps, cdma2000-1XRTT, + spare3, spare2, spare1, ...} + + +RRC-TransactionIdentifier ::= INTEGER (0..3) + + +S-TMSI ::= SEQUENCE { + mmec MMEC, + m-TMSI BIT STRING (SIZE (32)) +} + + +TraceReference-r10 ::= SEQUENCE { + plmn-Identity-r10 PLMN-Identity, + traceId-r10 OCTET STRING (SIZE (3)) +} + + +UE-CapabilityRAT-ContainerList ::=SEQUENCE (SIZE (0..maxRAT-Capabilities)) OF UE-CapabilityRAT-Container + +UE-CapabilityRAT-Container ::= SEQUENCE { + rat-Type RAT-Type, + ueCapabilityRAT-Container OCTET STRING +} + + +UE-EUTRA-Capability ::= SEQUENCE { + accessStratumRelease AccessStratumRelease, + ue-Category INTEGER (1..5), + pdcp-Parameters PDCP-Parameters, + phyLayerParameters PhyLayerParameters, + rf-Parameters RF-Parameters, + measParameters MeasParameters, + featureGroupIndicators BIT STRING (SIZE (32)) OPTIONAL, + interRAT-Parameters SEQUENCE { + utraFDD IRAT-ParametersUTRA-FDD OPTIONAL, + utraTDD128 IRAT-ParametersUTRA-TDD128 OPTIONAL, + utraTDD384 IRAT-ParametersUTRA-TDD384 OPTIONAL, + utraTDD768 IRAT-ParametersUTRA-TDD768 OPTIONAL, + geran IRAT-ParametersGERAN OPTIONAL, + cdma2000-HRPD IRAT-ParametersCDMA2000-HRPD OPTIONAL, + cdma2000-1xRTT IRAT-ParametersCDMA2000-1XRTT OPTIONAL + }, + nonCriticalExtension UE-EUTRA-Capability-v920-IEs OPTIONAL +} + +-- Late non critical extensions +UE-EUTRA-Capability-v9a0-IEs ::= SEQUENCE { + featureGroupIndRel9Add-r9 BIT STRING (SIZE (32)) OPTIONAL, + fdd-Add-UE-EUTRA-Capabilities-r9 UE-EUTRA-CapabilityAddXDD-Mode-r9 OPTIONAL, + tdd-Add-UE-EUTRA-Capabilities-r9 UE-EUTRA-CapabilityAddXDD-Mode-r9 OPTIONAL, + nonCriticalExtension UE-EUTRA-Capability-v9c0-IEs OPTIONAL +} + +UE-EUTRA-Capability-v9c0-IEs ::= SEQUENCE { + interRAT-ParametersUTRA-v9c0 IRAT-ParametersUTRA-v9c0 OPTIONAL, + nonCriticalExtension UE-EUTRA-Capability-v9d0-IEs OPTIONAL +} + +UE-EUTRA-Capability-v9d0-IEs ::= SEQUENCE { + phyLayerParameters-v9d0 PhyLayerParameters-v9d0 OPTIONAL, + nonCriticalExtension UE-EUTRA-Capability-v9e0-IEs OPTIONAL +} + +UE-EUTRA-Capability-v9e0-IEs ::= SEQUENCE { + rf-Parameters-v9e0 RF-Parameters-v9e0 OPTIONAL, + nonCriticalExtension UE-EUTRA-Capability-v9h0-IEs OPTIONAL +} + +UE-EUTRA-Capability-v9h0-IEs ::= SEQUENCE { + interRAT-ParametersUTRA-v9h0 IRAT-ParametersUTRA-v9h0 OPTIONAL, + -- Following field is only to be used for late REL-9 extensions + lateNonCriticalExtension OCTET STRING OPTIONAL, + nonCriticalExtension UE-EUTRA-Capability-v10c0-IEs OPTIONAL +} + +UE-EUTRA-Capability-v10c0-IEs ::= SEQUENCE { + otdoa-PositioningCapabilities-r10 OTDOA-PositioningCapabilities-r10 OPTIONAL, + nonCriticalExtension UE-EUTRA-Capability-v10f0-IEs OPTIONAL +} + +UE-EUTRA-Capability-v10f0-IEs ::= SEQUENCE { + rf-Parameters-v10f0 RF-Parameters-v10f0 OPTIONAL, + -- Following field is only to be used for late REL-10 extensions + nonCriticalExtension SEQUENCE {} OPTIONAL +} + +-- Regular non critical extensions +UE-EUTRA-Capability-v920-IEs ::= SEQUENCE { + phyLayerParameters-v920 PhyLayerParameters-v920, + interRAT-ParametersGERAN-v920 IRAT-ParametersGERAN-v920, + interRAT-ParametersUTRA-v920 IRAT-ParametersUTRA-v920 OPTIONAL, + interRAT-ParametersCDMA2000-v920 IRAT-ParametersCDMA2000-1XRTT-v920 OPTIONAL, + deviceType-r9 ENUMERATED {noBenFromBatConsumpOpt} OPTIONAL, + csg-ProximityIndicationParameters-r9 CSG-ProximityIndicationParameters-r9, + neighCellSI-AcquisitionParameters-r9 NeighCellSI-AcquisitionParameters-r9, + son-Parameters-r9 SON-Parameters-r9, + nonCriticalExtension UE-EUTRA-Capability-v940-IEs OPTIONAL +} + +UE-EUTRA-Capability-v940-IEs ::= SEQUENCE { + lateNonCriticalExtension OCTET STRING (CONTAINING UE-EUTRA-Capability-v9a0-IEs) + OPTIONAL, + nonCriticalExtension UE-EUTRA-Capability-v1020-IEs OPTIONAL +} + +UE-EUTRA-Capability-v1020-IEs ::= SEQUENCE { + ue-Category-v1020 INTEGER (6..8) OPTIONAL, + phyLayerParameters-v1020 PhyLayerParameters-v1020 OPTIONAL, + rf-Parameters-v1020 RF-Parameters-v1020 OPTIONAL, + measParameters-v1020 MeasParameters-v1020 OPTIONAL, + featureGroupIndRel10-r10 BIT STRING (SIZE (32)) OPTIONAL, + interRAT-ParametersCDMA2000-v1020 IRAT-ParametersCDMA2000-1XRTT-v1020 OPTIONAL, + ue-BasedNetwPerfMeasParameters-r10 UE-BasedNetwPerfMeasParameters-r10 OPTIONAL, + interRAT-ParametersUTRA-TDD-v1020 IRAT-ParametersUTRA-TDD-v1020 OPTIONAL, + nonCriticalExtension UE-EUTRA-Capability-v1060-IEs OPTIONAL +} + +UE-EUTRA-Capability-v1060-IEs ::= SEQUENCE { + fdd-Add-UE-EUTRA-Capabilities-v1060 UE-EUTRA-CapabilityAddXDD-Mode-v1060 OPTIONAL, + tdd-Add-UE-EUTRA-Capabilities-v1060 UE-EUTRA-CapabilityAddXDD-Mode-v1060 OPTIONAL, + rf-Parameters-v1060 RF-Parameters-v1060 OPTIONAL, + nonCriticalExtension UE-EUTRA-Capability-v1090-IEs OPTIONAL +} + +UE-EUTRA-Capability-v1090-IEs ::= SEQUENCE { + rf-Parameters-v1090 RF-Parameters-v1090 OPTIONAL, + nonCriticalExtension UE-EUTRA-Capability-v1130-IEs OPTIONAL +} + +UE-EUTRA-Capability-v1130-IEs ::= SEQUENCE { + pdcp-Parameters-v1130 PDCP-Parameters-v1130, + phyLayerParameters-v1130 PhyLayerParameters-v1130 OPTIONAL, + rf-Parameters-v1130 RF-Parameters-v1130, + measParameters-v1130 MeasParameters-v1130, + interRAT-ParametersCDMA2000-v1130 IRAT-ParametersCDMA2000-v1130, + otherParameters-r11 Other-Parameters-r11, + fdd-Add-UE-EUTRA-Capabilities-v1130 UE-EUTRA-CapabilityAddXDD-Mode-v1130 OPTIONAL, + tdd-Add-UE-EUTRA-Capabilities-v1130 UE-EUTRA-CapabilityAddXDD-Mode-v1130 OPTIONAL, + nonCriticalExtension UE-EUTRA-Capability-v1170-IEs OPTIONAL +} + +UE-EUTRA-Capability-v1170-IEs ::= SEQUENCE { + phyLayerParameters-v1170 PhyLayerParameters-v1170 OPTIONAL, + ue-Category-v1170 INTEGER (9..10) OPTIONAL, + nonCriticalExtension UE-EUTRA-Capability-v1180-IEs OPTIONAL +} + +UE-EUTRA-Capability-v1180-IEs ::= SEQUENCE { + rf-Parameters-v1180 RF-Parameters-v1180 OPTIONAL, + mbms-Parameters-r11 MBMS-Parameters-r11 OPTIONAL, + fdd-Add-UE-EUTRA-Capabilities-v1180 UE-EUTRA-CapabilityAddXDD-Mode-v1180 OPTIONAL, + tdd-Add-UE-EUTRA-Capabilities-v1180 UE-EUTRA-CapabilityAddXDD-Mode-v1180 OPTIONAL, + nonCriticalExtension UE-EUTRA-Capability-v11a0-IEs OPTIONAL +} + +UE-EUTRA-Capability-v11a0-IEs ::= SEQUENCE { + ue-Category-v11a0 INTEGER (11..12) OPTIONAL, + measParameters-v11a0 MeasParameters-v11a0 OPTIONAL, + nonCriticalExtension UE-EUTRA-Capability-v1250-IEs OPTIONAL +} + +UE-EUTRA-Capability-v1250-IEs ::= SEQUENCE { + phyLayerParameters-v1250 PhyLayerParameters-v1250 OPTIONAL, + rf-Parameters-v1250 RF-Parameters-v1250 OPTIONAL, + rlc-Parameters-r12 RLC-Parameters-r12 OPTIONAL, + ue-BasedNetwPerfMeasParameters-v1250 UE-BasedNetwPerfMeasParameters-v1250 OPTIONAL, + ue-CategoryDL-r12 INTEGER (0..14) OPTIONAL, + ue-CategoryUL-r12 INTEGER (0..13) OPTIONAL, + wlan-IW-Parameters-r12 WLAN-IW-Parameters-r12 OPTIONAL, + measParameters-v1250 MeasParameters-v1250 OPTIONAL, + dc-Parameters-r12 DC-Parameters-r12 OPTIONAL, + mbms-Parameters-v1250 MBMS-Parameters-v1250 OPTIONAL, + mac-Parameters-r12 MAC-Parameters-r12 OPTIONAL, + fdd-Add-UE-EUTRA-Capabilities-v1250 UE-EUTRA-CapabilityAddXDD-Mode-v1250 OPTIONAL, + tdd-Add-UE-EUTRA-Capabilities-v1250 UE-EUTRA-CapabilityAddXDD-Mode-v1250 OPTIONAL, + sl-Parameters-r12 SL-Parameters-r12 OPTIONAL, + nonCriticalExtension UE-EUTRA-Capability-v1260-IEs OPTIONAL +} + +UE-EUTRA-Capability-v1260-IEs ::= SEQUENCE { + ue-CategoryDL-v1260 INTEGER (15..16) OPTIONAL, + nonCriticalExtension SEQUENCE {} OPTIONAL +} + +UE-EUTRA-CapabilityAddXDD-Mode-r9 ::= SEQUENCE { + phyLayerParameters-r9 PhyLayerParameters OPTIONAL, + featureGroupIndicators-r9 BIT STRING (SIZE (32)) OPTIONAL, + featureGroupIndRel9Add-r9 BIT STRING (SIZE (32)) OPTIONAL, + interRAT-ParametersGERAN-r9 IRAT-ParametersGERAN OPTIONAL, + interRAT-ParametersUTRA-r9 IRAT-ParametersUTRA-v920 OPTIONAL, + interRAT-ParametersCDMA2000-r9 IRAT-ParametersCDMA2000-1XRTT-v920 OPTIONAL, + neighCellSI-AcquisitionParameters-r9 NeighCellSI-AcquisitionParameters-r9 OPTIONAL, + ... +} + +UE-EUTRA-CapabilityAddXDD-Mode-v1060 ::= SEQUENCE { + phyLayerParameters-v1060 PhyLayerParameters-v1020 OPTIONAL, + featureGroupIndRel10-v1060 BIT STRING (SIZE (32)) OPTIONAL, + interRAT-ParametersCDMA2000-v1060 IRAT-ParametersCDMA2000-1XRTT-v1020 OPTIONAL, + interRAT-ParametersUTRA-TDD-v1060 IRAT-ParametersUTRA-TDD-v1020 OPTIONAL, + ..., + [[ otdoa-PositioningCapabilities-r10 OTDOA-PositioningCapabilities-r10 OPTIONAL + ]] +} + +UE-EUTRA-CapabilityAddXDD-Mode-v1130 ::= SEQUENCE { + phyLayerParameters-v1130 PhyLayerParameters-v1130 OPTIONAL, + measParameters-v1130 MeasParameters-v1130 OPTIONAL, + otherParameters-r11 Other-Parameters-r11 OPTIONAL, + ... +} + +UE-EUTRA-CapabilityAddXDD-Mode-v1180 ::= SEQUENCE { + mbms-Parameters-r11 MBMS-Parameters-r11 +} + +UE-EUTRA-CapabilityAddXDD-Mode-v1250 ::= SEQUENCE { + phyLayerParameters-v1250 PhyLayerParameters-v1250 OPTIONAL, + measParameters-v1250 MeasParameters-v1250 OPTIONAL +} + +AccessStratumRelease ::= ENUMERATED { + rel8, rel9, rel10, rel11, rel12, spare3, + spare2, spare1, ...} + +DC-Parameters-r12 ::= SEQUENCE { + drb-TypeSplit-r12 ENUMERATED {supported} OPTIONAL, + drb-TypeSCG-r12 ENUMERATED {supported} OPTIONAL +} + +MAC-Parameters-r12 ::= SEQUENCE { + logicalChannelSR-ProhibitTimer-r12 ENUMERATED {supported} OPTIONAL, + longDRX-Command-r12 ENUMERATED {supported} OPTIONAL +} + +RLC-Parameters-r12 ::= SEQUENCE { + extended-RLC-LI-Field-r12 ENUMERATED {supported} +} + +PDCP-Parameters ::= SEQUENCE { + supportedROHC-Profiles SEQUENCE { + profile0x0001 BOOLEAN, + profile0x0002 BOOLEAN, + profile0x0003 BOOLEAN, + profile0x0004 BOOLEAN, + profile0x0006 BOOLEAN, + profile0x0101 BOOLEAN, + profile0x0102 BOOLEAN, + profile0x0103 BOOLEAN, + profile0x0104 BOOLEAN + }, + maxNumberROHC-ContextSessions ENUMERATED { + cs2, cs4, cs8, cs12, cs16, cs24, cs32, + cs48, cs64, cs128, cs256, cs512, cs1024, + cs16384, spare2, spare1} DEFAULT cs16, + ... +} + +PDCP-Parameters-v1130 ::= SEQUENCE { + pdcp-SN-Extension-r11 ENUMERATED {supported} OPTIONAL, + supportRohcContextContinue-r11 ENUMERATED {supported} OPTIONAL +} + +PhyLayerParameters ::= SEQUENCE { + ue-TxAntennaSelectionSupported BOOLEAN, + ue-SpecificRefSigsSupported BOOLEAN +} + +PhyLayerParameters-v920 ::= SEQUENCE { + enhancedDualLayerFDD-r9 ENUMERATED {supported} OPTIONAL, + enhancedDualLayerTDD-r9 ENUMERATED {supported} OPTIONAL +} + +PhyLayerParameters-v9d0 ::= SEQUENCE { + tm5-FDD-r9 ENUMERATED {supported} OPTIONAL, + tm5-TDD-r9 ENUMERATED {supported} OPTIONAL +} + +PhyLayerParameters-v1020 ::= SEQUENCE { + twoAntennaPortsForPUCCH-r10 ENUMERATED {supported} OPTIONAL, + tm9-With-8Tx-FDD-r10 ENUMERATED {supported} OPTIONAL, + pmi-Disabling-r10 ENUMERATED {supported} OPTIONAL, + crossCarrierScheduling-r10 ENUMERATED {supported} OPTIONAL, + simultaneousPUCCH-PUSCH-r10 ENUMERATED {supported} OPTIONAL, + multiClusterPUSCH-WithinCC-r10 ENUMERATED {supported} OPTIONAL, + nonContiguousUL-RA-WithinCC-List-r10 NonContiguousUL-RA-WithinCC-List-r10 OPTIONAL +} + +PhyLayerParameters-v1130 ::= SEQUENCE { + crs-InterfHandl-r11 ENUMERATED {supported} OPTIONAL, + ePDCCH-r11 ENUMERATED {supported} OPTIONAL, + multiACK-CSI-Reporting-r11 ENUMERATED {supported} OPTIONAL, + ss-CCH-InterfHandl-r11 ENUMERATED {supported} OPTIONAL, + tdd-SpecialSubframe-r11 ENUMERATED {supported} OPTIONAL, + txDiv-PUCCH1b-ChSelect-r11 ENUMERATED {supported} OPTIONAL, + ul-CoMP-r11 ENUMERATED {supported} OPTIONAL +} + +PhyLayerParameters-v1170 ::= SEQUENCE { + interBandTDD-CA-WithDifferentConfig-r11 BIT STRING (SIZE (2)) OPTIONAL +} + +PhyLayerParameters-v1250 ::= SEQUENCE { + e-HARQ-Pattern-FDD-r12 ENUMERATED {supported} OPTIONAL, + enhanced-4TxCodebook-r12 ENUMERATED {supported} OPTIONAL, + tdd-FDD-CA-PCellDuplex-r12 BIT STRING (SIZE (2)) OPTIONAL, + phy-TDD-ReConfig-TDD-PCell-r12 ENUMERATED {supported} OPTIONAL, + phy-TDD-ReConfig-FDD-PCell-r12 ENUMERATED {supported} OPTIONAL, + pusch-FeedbackMode-r12 ENUMERATED {supported} OPTIONAL, + pusch-SRS-PowerControl-SubframeSet-r12 ENUMERATED {supported} OPTIONAL, + csi-SubframeSet-r12 ENUMERATED {supported} OPTIONAL, + noResourceRestrictionForTTIBundling-r12 ENUMERATED {supported} OPTIONAL, + discoverySignalsInDeactSCell-r12 ENUMERATED {supported} OPTIONAL, + naics-Capability-List-r12 NAICS-Capability-List-r12 OPTIONAL +} + + +NonContiguousUL-RA-WithinCC-List-r10 ::= SEQUENCE (SIZE (1..maxBands)) OF NonContiguousUL-RA-WithinCC-r10 + +NonContiguousUL-RA-WithinCC-r10 ::= SEQUENCE { + nonContiguousUL-RA-WithinCC-Info-r10 ENUMERATED {supported} OPTIONAL +} + +RF-Parameters ::= SEQUENCE { + supportedBandListEUTRA SupportedBandListEUTRA +} + +RF-Parameters-v9e0 ::= SEQUENCE { + supportedBandListEUTRA-v9e0 SupportedBandListEUTRA-v9e0 OPTIONAL +} + +RF-Parameters-v1020 ::= SEQUENCE { + supportedBandCombination-r10 SupportedBandCombination-r10 +} + +RF-Parameters-v1060 ::= SEQUENCE { + supportedBandCombinationExt-r10 SupportedBandCombinationExt-r10 +} + +RF-Parameters-v1090 ::= SEQUENCE { + supportedBandCombination-v1090 SupportedBandCombination-v1090 OPTIONAL +} + +RF-Parameters-v10f0 ::= SEQUENCE { + modifiedMPR-Behavior-r10 BIT STRING (SIZE (32)) OPTIONAL +} + +RF-Parameters-v1130 ::= SEQUENCE { + supportedBandCombination-v1130 SupportedBandCombination-v1130 OPTIONAL +} + +RF-Parameters-v1180 ::= SEQUENCE { + freqBandRetrieval-r11 ENUMERATED {supported} OPTIONAL, + requestedBands-r11 SEQUENCE (SIZE (1.. maxBands)) OF FreqBandIndicator-r11 OPTIONAL, + supportedBandCombinationAdd-r11 SupportedBandCombinationAdd-r11 OPTIONAL +} + +RF-Parameters-v1250 ::= SEQUENCE { + supportedBandListEUTRA-v1250 SupportedBandListEUTRA-v1250 OPTIONAL, + supportedBandCombination-v1250 SupportedBandCombination-v1250 OPTIONAL, + supportedBandCombinationAdd-v1250 SupportedBandCombinationAdd-v1250 OPTIONAL, + freqBandPriorityAdjustment-r12 ENUMERATED {supported} OPTIONAL +} + +SupportedBandCombination-r10 ::= SEQUENCE (SIZE (1..maxBandComb-r10)) OF BandCombinationParameters-r10 + +SupportedBandCombinationExt-r10 ::= SEQUENCE (SIZE (1..maxBandComb-r10)) OF BandCombinationParametersExt-r10 + +SupportedBandCombination-v1090 ::= SEQUENCE (SIZE (1..maxBandComb-r10)) OF BandCombinationParameters-v1090 + +SupportedBandCombination-v1130 ::= SEQUENCE (SIZE (1..maxBandComb-r10)) OF BandCombinationParameters-v1130 + +SupportedBandCombination-v1250 ::= SEQUENCE (SIZE (1..maxBandComb-r10)) OF BandCombinationParameters-v1250 + +SupportedBandCombinationAdd-r11 ::= SEQUENCE (SIZE (1..maxBandComb-r11)) OF BandCombinationParameters-r11 + +SupportedBandCombinationAdd-v1250 ::= SEQUENCE (SIZE (1..maxBandComb-r11)) OF BandCombinationParameters-v1250 + +BandCombinationParameters-r10 ::= SEQUENCE (SIZE (1..maxSimultaneousBands-r10)) OF BandParameters-r10 + +BandCombinationParametersExt-r10 ::= SEQUENCE { + supportedBandwidthCombinationSet-r10 SupportedBandwidthCombinationSet-r10 OPTIONAL +} + +BandCombinationParameters-v1090 ::= SEQUENCE (SIZE (1..maxSimultaneousBands-r10)) OF BandParameters-v1090 + +BandCombinationParameters-v1130 ::= SEQUENCE { + multipleTimingAdvance-r11 ENUMERATED {supported} OPTIONAL, + simultaneousRx-Tx-r11 ENUMERATED {supported} OPTIONAL, + bandParameterList-r11 SEQUENCE (SIZE (1..maxSimultaneousBands-r10)) OF BandParameters-v1130 OPTIONAL, + ... +} + +BandCombinationParameters-r11 ::= SEQUENCE { + bandParameterList-r11 SEQUENCE (SIZE (1..maxSimultaneousBands-r10)) OF + BandParameters-r11, + supportedBandwidthCombinationSet-r11 SupportedBandwidthCombinationSet-r10 OPTIONAL, + multipleTimingAdvance-r11 ENUMERATED {supported} OPTIONAL, + simultaneousRx-Tx-r11 ENUMERATED {supported} OPTIONAL, + bandInfoEUTRA-r11 BandInfoEUTRA, + ... +} + +BandCombinationParameters-v1250::= SEQUENCE { + dc-Support-r12 SEQUENCE { + asynchronous-r12 ENUMERATED {supported} OPTIONAL, + supportedCellGrouping-r12 CHOICE { + threeEntries-r12 BIT STRING (SIZE(3)), + fourEntries-r12 BIT STRING (SIZE(7)), + fiveEntries-r12 BIT STRING (SIZE(15)) + } OPTIONAL + } OPTIONAL, + supportedNAICS-2CRS-AP-r12 BIT STRING (SIZE (1..maxNAICS-Entries-r12)) OPTIONAL, + commSupportedBandsPerBC-r12 BIT STRING (SIZE (1.. maxBands)) OPTIONAL, + ... +} + + +SupportedBandwidthCombinationSet-r10 ::= BIT STRING (SIZE (1..maxBandwidthCombSet-r10)) + +BandParameters-r10 ::= SEQUENCE { + bandEUTRA-r10 FreqBandIndicator, + bandParametersUL-r10 BandParametersUL-r10 OPTIONAL, + bandParametersDL-r10 BandParametersDL-r10 OPTIONAL +} + +BandParameters-v1090 ::= SEQUENCE { + bandEUTRA-v1090 FreqBandIndicator-v9e0 OPTIONAL, + ... +} + +BandParameters-v1130 ::= SEQUENCE { + supportedCSI-Proc-r11 ENUMERATED {n1, n3, n4} +} + +BandParameters-r11 ::= SEQUENCE { + bandEUTRA-r11 FreqBandIndicator-r11, + bandParametersUL-r11 BandParametersUL-r10 OPTIONAL, + bandParametersDL-r11 BandParametersDL-r10 OPTIONAL, + supportedCSI-Proc-r11 ENUMERATED {n1, n3, n4} OPTIONAL +} + +BandParametersUL-r10 ::= SEQUENCE (SIZE (1..maxBandwidthClass-r10)) OF CA-MIMO-ParametersUL-r10 + +CA-MIMO-ParametersUL-r10 ::= SEQUENCE { + ca-BandwidthClassUL-r10 CA-BandwidthClass-r10, + supportedMIMO-CapabilityUL-r10 MIMO-CapabilityUL-r10 OPTIONAL +} + +BandParametersDL-r10 ::= SEQUENCE (SIZE (1..maxBandwidthClass-r10)) OF CA-MIMO-ParametersDL-r10 + +CA-MIMO-ParametersDL-r10 ::= SEQUENCE { + ca-BandwidthClassDL-r10 CA-BandwidthClass-r10, + supportedMIMO-CapabilityDL-r10 MIMO-CapabilityDL-r10 OPTIONAL +} + +CA-BandwidthClass-r10 ::= ENUMERATED {a, b, c, d, e, f, ...} + +MIMO-CapabilityUL-r10 ::= ENUMERATED {twoLayers, fourLayers} + +MIMO-CapabilityDL-r10 ::= ENUMERATED {twoLayers, fourLayers, eightLayers} + +SupportedBandListEUTRA ::= SEQUENCE (SIZE (1..maxBands)) OF SupportedBandEUTRA + +SupportedBandListEUTRA-v9e0::= SEQUENCE (SIZE (1..maxBands)) OF SupportedBandEUTRA-v9e0 + +SupportedBandListEUTRA-v1250 ::= SEQUENCE (SIZE (1..maxBands)) OF SupportedBandEUTRA-v1250 + +SupportedBandEUTRA ::= SEQUENCE { + bandEUTRA FreqBandIndicator, + halfDuplex BOOLEAN +} + +SupportedBandEUTRA-v9e0 ::= SEQUENCE { + bandEUTRA-v9e0 FreqBandIndicator-v9e0 OPTIONAL +} + +SupportedBandEUTRA-v1250 ::= SEQUENCE { + dl-256QAM-r12 ENUMERATED {supported} OPTIONAL, + ul-64QAM-r12 ENUMERATED {supported} OPTIONAL +} + +MeasParameters ::= SEQUENCE { + bandListEUTRA BandListEUTRA +} + +MeasParameters-v1020 ::= SEQUENCE { + bandCombinationListEUTRA-r10 BandCombinationListEUTRA-r10 +} + +MeasParameters-v1130 ::= SEQUENCE { + rsrqMeasWideband-r11 ENUMERATED {supported} OPTIONAL +} + +MeasParameters-v11a0 ::= SEQUENCE { + benefitsFromInterruption-r11 ENUMERATED {true} OPTIONAL +} + +MeasParameters-v1250 ::= SEQUENCE { + timerT312-r12 ENUMERATED {supported} OPTIONAL, + alternativeTimeToTrigger-r12 ENUMERATED {supported} OPTIONAL, + incMonEUTRA-r12 ENUMERATED {supported} OPTIONAL, + incMonUTRA-r12 ENUMERATED {supported} OPTIONAL, + extendedMaxMeasId-r12 ENUMERATED {supported} OPTIONAL, + extendedRSRQ-LowerRange-r12 ENUMERATED {supported} OPTIONAL, + rsrq-OnAllSymbols-r12 ENUMERATED {supported} OPTIONAL, + crs-DiscoverySignalsMeas-r12 ENUMERATED {supported} OPTIONAL, + csi-RS-DiscoverySignalsMeas-r12 ENUMERATED {supported} OPTIONAL +} + +BandListEUTRA ::= SEQUENCE (SIZE (1..maxBands)) OF BandInfoEUTRA + +BandCombinationListEUTRA-r10 ::= SEQUENCE (SIZE (1..maxBandComb-r10)) OF BandInfoEUTRA + +BandInfoEUTRA ::= SEQUENCE { + interFreqBandList InterFreqBandList, + interRAT-BandList InterRAT-BandList OPTIONAL +} + +InterFreqBandList ::= SEQUENCE (SIZE (1..maxBands)) OF InterFreqBandInfo + +InterFreqBandInfo ::= SEQUENCE { + interFreqNeedForGaps BOOLEAN +} + +InterRAT-BandList ::= SEQUENCE (SIZE (1..maxBands)) OF InterRAT-BandInfo + +InterRAT-BandInfo ::= SEQUENCE { + interRAT-NeedForGaps BOOLEAN +} + +IRAT-ParametersUTRA-FDD ::= SEQUENCE { + supportedBandListUTRA-FDD SupportedBandListUTRA-FDD +} + +IRAT-ParametersUTRA-v920 ::= SEQUENCE { + e-RedirectionUTRA-r9 ENUMERATED {supported} +} + +IRAT-ParametersUTRA-v9c0 ::= SEQUENCE { + voiceOverPS-HS-UTRA-FDD-r9 ENUMERATED {supported} OPTIONAL, + voiceOverPS-HS-UTRA-TDD128-r9 ENUMERATED {supported} OPTIONAL, + srvcc-FromUTRA-FDD-ToUTRA-FDD-r9 ENUMERATED {supported} OPTIONAL, + srvcc-FromUTRA-FDD-ToGERAN-r9 ENUMERATED {supported} OPTIONAL, + srvcc-FromUTRA-TDD128-ToUTRA-TDD128-r9 ENUMERATED {supported} OPTIONAL, + srvcc-FromUTRA-TDD128-ToGERAN-r9 ENUMERATED {supported} OPTIONAL +} + +IRAT-ParametersUTRA-v9h0 ::= SEQUENCE { + mfbi-UTRA-r9 ENUMERATED {supported} +} + +SupportedBandListUTRA-FDD ::= SEQUENCE (SIZE (1..maxBands)) OF SupportedBandUTRA-FDD + +SupportedBandUTRA-FDD ::= ENUMERATED { + bandI, bandII, bandIII, bandIV, bandV, bandVI, + bandVII, bandVIII, bandIX, bandX, bandXI, + bandXII, bandXIII, bandXIV, bandXV, bandXVI, ..., + bandXVII-8a0, bandXVIII-8a0, bandXIX-8a0, bandXX-8a0, + bandXXI-8a0, bandXXII-8a0, bandXXIII-8a0, bandXXIV-8a0, + bandXXV-8a0, bandXXVI-8a0, bandXXVII-8a0, bandXXVIII-8a0, + bandXXIX-8a0, bandXXX-8a0, bandXXXI-8a0, bandXXXII-8a0} + +IRAT-ParametersUTRA-TDD128 ::= SEQUENCE { + supportedBandListUTRA-TDD128 SupportedBandListUTRA-TDD128 +} + +SupportedBandListUTRA-TDD128 ::= SEQUENCE (SIZE (1..maxBands)) OF SupportedBandUTRA-TDD128 + +SupportedBandUTRA-TDD128 ::= ENUMERATED { + a, b, c, d, e, f, g, h, i, j, k, l, m, n, + o, p, ...} + +IRAT-ParametersUTRA-TDD384 ::= SEQUENCE { + supportedBandListUTRA-TDD384 SupportedBandListUTRA-TDD384 +} + +SupportedBandListUTRA-TDD384 ::= SEQUENCE (SIZE (1..maxBands)) OF SupportedBandUTRA-TDD384 + +SupportedBandUTRA-TDD384 ::= ENUMERATED { + a, b, c, d, e, f, g, h, i, j, k, l, m, n, + o, p, ...} + +IRAT-ParametersUTRA-TDD768 ::= SEQUENCE { + supportedBandListUTRA-TDD768 SupportedBandListUTRA-TDD768 +} + +SupportedBandListUTRA-TDD768 ::= SEQUENCE (SIZE (1..maxBands)) OF SupportedBandUTRA-TDD768 + +SupportedBandUTRA-TDD768 ::= ENUMERATED { + a, b, c, d, e, f, g, h, i, j, k, l, m, n, + o, p, ...} + +IRAT-ParametersUTRA-TDD-v1020 ::= SEQUENCE { + e-RedirectionUTRA-TDD-r10 ENUMERATED {supported} +} + +IRAT-ParametersGERAN ::= SEQUENCE { + supportedBandListGERAN SupportedBandListGERAN, + interRAT-PS-HO-ToGERAN BOOLEAN +} + +IRAT-ParametersGERAN-v920 ::= SEQUENCE { + dtm-r9 ENUMERATED {supported} OPTIONAL, + e-RedirectionGERAN-r9 ENUMERATED {supported} OPTIONAL +} + +SupportedBandListGERAN ::= SEQUENCE (SIZE (1..maxBands)) OF SupportedBandGERAN + +SupportedBandGERAN ::= ENUMERATED { + gsm450, gsm480, gsm710, gsm750, gsm810, gsm850, + gsm900P, gsm900E, gsm900R, gsm1800, gsm1900, + spare5, spare4, spare3, spare2, spare1, ...} + +IRAT-ParametersCDMA2000-HRPD ::= SEQUENCE { + supportedBandListHRPD SupportedBandListHRPD, + tx-ConfigHRPD ENUMERATED {single, dual}, + rx-ConfigHRPD ENUMERATED {single, dual} +} + +SupportedBandListHRPD ::= SEQUENCE (SIZE (1..maxCDMA-BandClass)) OF BandclassCDMA2000 + +IRAT-ParametersCDMA2000-1XRTT ::= SEQUENCE { + supportedBandList1XRTT SupportedBandList1XRTT, + tx-Config1XRTT ENUMERATED {single, dual}, + rx-Config1XRTT ENUMERATED {single, dual} +} + +IRAT-ParametersCDMA2000-1XRTT-v920 ::= SEQUENCE { + e-CSFB-1XRTT-r9 ENUMERATED {supported}, + e-CSFB-ConcPS-Mob1XRTT-r9 ENUMERATED {supported} OPTIONAL +} + +IRAT-ParametersCDMA2000-1XRTT-v1020 ::= SEQUENCE { + e-CSFB-dual-1XRTT-r10 ENUMERATED {supported} +} + +IRAT-ParametersCDMA2000-v1130 ::= SEQUENCE { + cdma2000-NW-Sharing-r11 ENUMERATED {supported} OPTIONAL +} + +SupportedBandList1XRTT ::= SEQUENCE (SIZE (1..maxCDMA-BandClass)) OF BandclassCDMA2000 + +CSG-ProximityIndicationParameters-r9 ::= SEQUENCE { + intraFreqProximityIndication-r9 ENUMERATED {supported} OPTIONAL, + interFreqProximityIndication-r9 ENUMERATED {supported} OPTIONAL, + utran-ProximityIndication-r9 ENUMERATED {supported} OPTIONAL +} + +NeighCellSI-AcquisitionParameters-r9 ::= SEQUENCE { + intraFreqSI-AcquisitionForHO-r9 ENUMERATED {supported} OPTIONAL, + interFreqSI-AcquisitionForHO-r9 ENUMERATED {supported} OPTIONAL, + utran-SI-AcquisitionForHO-r9 ENUMERATED {supported} OPTIONAL +} + +SON-Parameters-r9 ::= SEQUENCE { + rach-Report-r9 ENUMERATED {supported} OPTIONAL +} + +UE-BasedNetwPerfMeasParameters-r10 ::= SEQUENCE { + loggedMeasurementsIdle-r10 ENUMERATED {supported} OPTIONAL, + standaloneGNSS-Location-r10 ENUMERATED {supported} OPTIONAL +} + +UE-BasedNetwPerfMeasParameters-v1250 ::= SEQUENCE { + loggedMBSFNMeasurements-r12 ENUMERATED {supported} +} + +OTDOA-PositioningCapabilities-r10 ::= SEQUENCE { + otdoa-UE-Assisted-r10 ENUMERATED {supported}, + interFreqRSTD-Measurement-r10 ENUMERATED {supported} OPTIONAL +} + +Other-Parameters-r11 ::= SEQUENCE { + inDeviceCoexInd-r11 ENUMERATED {supported} OPTIONAL, + powerPrefInd-r11 ENUMERATED {supported} OPTIONAL, + ue-Rx-TxTimeDiffMeasurements-r11 ENUMERATED {supported} OPTIONAL +} + +MBMS-Parameters-r11 ::= SEQUENCE { + mbms-SCell-r11 ENUMERATED {supported} OPTIONAL, + mbms-NonServingCell-r11 ENUMERATED {supported} OPTIONAL +} + +MBMS-Parameters-v1250 ::= SEQUENCE { + mbms-AsyncDC-r12 ENUMERATED {supported} OPTIONAL +} + +WLAN-IW-Parameters-r12 ::= SEQUENCE { + wlan-IW-RAN-Rules-r12 ENUMERATED {supported} OPTIONAL, + wlan-IW-ANDSF-Policies-r12 ENUMERATED {supported} OPTIONAL +} + +NAICS-Capability-List-r12 ::= SEQUENCE (SIZE (1..maxNAICS-Entries-r12)) OF NAICS-Capability-Entry-r12 + + +NAICS-Capability-Entry-r12 ::= SEQUENCE { + numberOfNAICS-CapableCC-r12 INTEGER(1..5), + numberOfAggregatedPRB-r12 ENUMERATED { + n50, n75, n100, n125, n150, n175, + n200, n225, n250, n275, n300, n350, + n400, n450, n500, spare}, + ... +} + +SL-Parameters-r12 ::= SEQUENCE { + commSimultaneousTx-r12 ENUMERATED {supported} OPTIONAL, + commSupportedBands-r12 FreqBandIndicatorListEUTRA-r12 OPTIONAL, + discSupportedBands-r12 SupportedBandInfoList-r12 OPTIONAL, + discScheduledResourceAlloc-r12 ENUMERATED {supported} OPTIONAL, + disc-UE-SelectedResourceAlloc-r12 ENUMERATED {supported} OPTIONAL, + disc-SLSS-r12 ENUMERATED {supported} OPTIONAL, + discSupportedProc-r12 ENUMERATED {n50, n400} OPTIONAL +} + +SupportedBandInfoList-r12 ::= SEQUENCE (SIZE (1..maxBands)) OF SupportedBandInfo-r12 + +SupportedBandInfo-r12 ::= SEQUENCE { + support-r12 ENUMERATED {supported} OPTIONAL +} + +FreqBandIndicatorListEUTRA-r12 ::= SEQUENCE (SIZE (1..maxBands)) OF FreqBandIndicator-r11 + + +UE-RadioPagingInfo-r12 ::= SEQUENCE { + ue-Category-v1250 INTEGER (0) OPTIONAL, + ... +} + + +UE-TimersAndConstants ::= SEQUENCE { + t300 ENUMERATED { + ms100, ms200, ms300, ms400, ms600, ms1000, ms1500, + ms2000}, + t301 ENUMERATED { + ms100, ms200, ms300, ms400, ms600, ms1000, ms1500, + ms2000}, + t310 ENUMERATED { + ms0, ms50, ms100, ms200, ms500, ms1000, ms2000}, + n310 ENUMERATED { + n1, n2, n3, n4, n6, n8, n10, n20}, + t311 ENUMERATED { + ms1000, ms3000, ms5000, ms10000, ms15000, + ms20000, ms30000}, + n311 ENUMERATED { + n1, n2, n3, n4, n5, n6, n8, n10}, + ... +} + + +VisitedCellInfoList-r12 ::= SEQUENCE (SIZE (1..maxCellHistory-r12)) OF VisitedCellInfo-r12 + +VisitedCellInfo-r12 ::= SEQUENCE { + visitedCellId-r12 CHOICE { + cellGlobalId-r12 CellGlobalIdEUTRA, + pci-arfcn-r12 SEQUENCE { + physCellId-r12 PhysCellId, + carrierFreq-r12 ARFCN-ValueEUTRA-r9 + } + } OPTIONAL, + timeSpent-r12 INTEGER (0..4095), + ... +} + + +WLAN-OffloadConfig-r12 ::= SEQUENCE { + thresholdRSRP-r12 SEQUENCE { + thresholdRSRP-Low-r12 RSRP-Range, + thresholdRSRP-High-r12 RSRP-Range + } OPTIONAL, -- Need OR + thresholdRSRQ-r12 SEQUENCE { + thresholdRSRQ-Low-r12 RSRQ-Range, + thresholdRSRQ-High-r12 RSRQ-Range + } OPTIONAL, -- Need OR + thresholdRSRQ-OnAllSymbolsWithWB-r12 SEQUENCE { + thresholdRSRQ-OnAllSymbolsWithWB-Low-r12 RSRQ-Range, + thresholdRSRQ-OnAllSymbolsWithWB-High-r12 RSRQ-Range + } OPTIONAL, -- Need OP + thresholdRSRQ-OnAllSymbols-r12 SEQUENCE { + thresholdRSRQ-OnAllSymbolsLow-r12 RSRQ-Range, + thresholdRSRQ-OnAllSymbolsHigh-r12 RSRQ-Range + } OPTIONAL, -- Need OP + thresholdRSRQ-WB-r12 SEQUENCE { + thresholdRSRQ-WB-Low-r12 RSRQ-Range, + thresholdRSRQ-WB-High-r12 RSRQ-Range + } OPTIONAL, -- Need OP + + thresholdChannelUtilization-r12 SEQUENCE { + thresholdChannelUtilizationLow-r12 INTEGER (0..255), + thresholdChannelUtilizationHigh-r12 INTEGER (0..255) + } OPTIONAL, -- Need OR + thresholdBackhaul-Bandwidth-r12 SEQUENCE { + thresholdBackhaulDL-BandwidthLow-r12 WLAN-backhaulRate-r12, + thresholdBackhaulDL-BandwidthHigh-r12 WLAN-backhaulRate-r12, + thresholdBackhaulUL-BandwidthLow-r12 WLAN-backhaulRate-r12, + thresholdBackhaulUL-BandwidthHigh-r12 WLAN-backhaulRate-r12 + } OPTIONAL, -- Need OR + thresholdBeaconRSSI-r12 SEQUENCE { + thresholdBeaconRSSI-Low-r12 INTEGER (0..255), + thresholdBeaconRSSI-High-r12 INTEGER (0..255) + } OPTIONAL, -- Need OR + offloadPreferenceIndicator-r12 BIT STRING (SIZE (16)) OPTIONAL, -- Need OR + t-SteeringWLAN-r12 T-Reselection OPTIONAL, -- Need OR + ... +} + +WLAN-backhaulRate-r12 ::= ENUMERATED + {r0, r4, r8, r16, r32, r64, r128, r256, r512, + r1024, r2048, r4096, r8192, r16384, r32768, r65536, r131072, + r262144, r524288, r1048576, r2097152, r4194304, r8388608, + r16777216, r33554432, r67108864, r134217728, r268435456, + r536870912, r1073741824, r2147483648, r4294967296} + + +MBMS-NotificationConfig-r9 ::= SEQUENCE { + notificationRepetitionCoeff-r9 ENUMERATED {n2, n4}, + notificationOffset-r9 INTEGER (0..10), + notificationSF-Index-r9 INTEGER (1..6) +} + + +MBSFN-AreaId-r12 ::= INTEGER (0..255) + + +MBSFN-AreaInfoList-r9 ::= SEQUENCE (SIZE(1..maxMBSFN-Area)) OF MBSFN-AreaInfo-r9 + +MBSFN-AreaInfo-r9 ::= SEQUENCE { + mbsfn-AreaId-r9 MBSFN-AreaId-r12, + non-MBSFNregionLength ENUMERATED {s1, s2}, + notificationIndicator-r9 INTEGER (0..7), + mcch-Config-r9 SEQUENCE { + mcch-RepetitionPeriod-r9 ENUMERATED {rf32, rf64, rf128, rf256}, + mcch-Offset-r9 INTEGER (0..10), + mcch-ModificationPeriod-r9 ENUMERATED {rf512, rf1024}, + sf-AllocInfo-r9 BIT STRING (SIZE(6)), + signallingMCS-r9 ENUMERATED {n2, n7, n13, n19} + }, + ... +} + + +MBSFN-SubframeConfig ::= SEQUENCE { + radioframeAllocationPeriod ENUMERATED {n1, n2, n4, n8, n16, n32}, + radioframeAllocationOffset INTEGER (0..7), + subframeAllocation CHOICE { + oneFrame BIT STRING (SIZE(6)), + fourFrames BIT STRING (SIZE(24)) + } +} + +PMCH-InfoList-r9 ::= SEQUENCE (SIZE (0..maxPMCH-PerMBSFN)) OF PMCH-Info-r9 + +PMCH-InfoListExt-r12 ::= SEQUENCE (SIZE (0..maxPMCH-PerMBSFN)) OF PMCH-InfoExt-r12 + +PMCH-Info-r9 ::= SEQUENCE { + pmch-Config-r9 PMCH-Config-r9, + mbms-SessionInfoList-r9 MBMS-SessionInfoList-r9, + ... +} + +PMCH-InfoExt-r12 ::= SEQUENCE { + pmch-Config-r12 PMCH-Config-r12, + mbms-SessionInfoList-r12 MBMS-SessionInfoList-r9, + ... +} + +MBMS-SessionInfoList-r9 ::= SEQUENCE (SIZE (0..maxSessionPerPMCH)) OF MBMS-SessionInfo-r9 + +MBMS-SessionInfo-r9 ::= SEQUENCE { + tmgi-r9 TMGI-r9, + sessionId-r9 OCTET STRING (SIZE (1)) OPTIONAL, -- Need OR + logicalChannelIdentity-r9 INTEGER (0..maxSessionPerPMCH-1), + ... +} + +PMCH-Config-r9 ::= SEQUENCE { + sf-AllocEnd-r9 INTEGER (0..1535), + dataMCS-r9 INTEGER (0..28), + mch-SchedulingPeriod-r9 ENUMERATED { + rf8, rf16, rf32, rf64, rf128, rf256, rf512, rf1024}, + ... +} + +PMCH-Config-r12 ::= SEQUENCE { + sf-AllocEnd-r12 INTEGER (0..1535), + dataMCS-r12 CHOICE { + normal-r12 INTEGER (0..28), + higerOrder-r12 INTEGER (0..27) + }, + mch-SchedulingPeriod-r12 ENUMERATED { + rf4, rf8, rf16, rf32, rf64, rf128, rf256, rf512, rf1024}, + ... +} + +TMGI-r9 ::= SEQUENCE { + plmn-Id-r9 CHOICE { + plmn-Index-r9 INTEGER (1..maxPLMN-r11), + explicitValue-r9 PLMN-Identity + }, + serviceId-r9 OCTET STRING (SIZE (3)) +} + + + +SL-CommConfig-r12 ::= SEQUENCE { + commTxResources-r12 CHOICE { + release NULL, + setup CHOICE { + scheduled-r12 SEQUENCE { + sl-RNTI-r12 C-RNTI, + mac-MainConfig-r12 MAC-MainConfigSL-r12, + sc-CommTxConfig-r12 SL-CommResourcePool-r12, + mcs-r12 INTEGER (0..28) OPTIONAL -- Need OP + }, + ue-Selected-r12 SEQUENCE { + -- Pool for normal usage + commTxPoolNormalDedicated-r12 SEQUENCE { + poolToReleaseList-r12 SL-TxPoolToReleaseList-r12 OPTIONAL, -- Need ON + poolToAddModList-r12 SL-CommTxPoolToAddModList-r12 OPTIONAL -- Need ON + } + } + } + } OPTIONAL, -- Need ON + ... +} + +SL-CommTxPoolToAddModList-r12 ::= SEQUENCE (SIZE (1..maxSL-TxPool-r12)) OF SL-CommTxPoolToAddMod-r12 + +SL-CommTxPoolToAddMod-r12 ::= SEQUENCE { + poolIdentity-r12 SL-TxPoolIdentity-r12, + pool-r12 SL-CommResourcePool-r12 +} + +MAC-MainConfigSL-r12 ::= SEQUENCE { + periodic-BSR-TimerSL PeriodicBSR-Timer-r12 OPTIONAL, -- Need ON + retx-BSR-TimerSL RetxBSR-Timer-r12 +} + + +SL-CommTxPoolList-r12 ::= SEQUENCE (SIZE (1..maxSL-TxPool-r12)) OF SL-CommResourcePool-r12 + +SL-CommRxPoolList-r12 ::= SEQUENCE (SIZE (1..maxSL-RxPool-r12)) OF SL-CommResourcePool-r12 + +SL-CommResourcePool-r12 ::= SEQUENCE { + sc-CP-Len-r12 SL-CP-Len-r12, + sc-Period-r12 SL-PeriodComm-r12, + sc-TF-ResourceConfig-r12 SL-TF-ResourceConfig-r12, + data-CP-Len-r12 SL-CP-Len-r12, + dataHoppingConfig-r12 SL-HoppingConfigComm-r12, + ue-SelectedResourceConfig-r12 SEQUENCE { + data-TF-ResourceConfig-r12 SL-TF-ResourceConfig-r12, + trpt-Subset-r12 SL-TRPT-Subset-r12 OPTIONAL -- Need OP + } OPTIONAL, -- Need OR + rxParametersNCell-r12 SEQUENCE { + tdd-Config-r12 TDD-Config OPTIONAL, -- Need OP + syncConfigIndex-r12 INTEGER (0..15) + } OPTIONAL, -- Need OR + txParameters-r12 SEQUENCE { + sc-TxParameters-r12 SL-TxParameters-r12, + dataTxParameters-r12 SL-TxParameters-r12 + } OPTIONAL, -- Cond Tx + ... +} + +SL-TRPT-Subset-r12 ::= BIT STRING (SIZE (3..5)) + + +SL-CP-Len-r12 ::= ENUMERATED {normal, extended} + + +SL-DiscConfig-r12 ::= SEQUENCE { + discTxResources-r12 CHOICE { + release NULL, + setup CHOICE { + scheduled-r12 SEQUENCE { + discTxConfig-r12 SL-DiscResourcePool-r12 OPTIONAL, -- Need ON + discTF-IndexList-r12 SL-TF-IndexPairList-r12 OPTIONAL, -- Need ON + discHoppingConfig-r12 SL-HoppingConfigDisc-r12 + OPTIONAL -- Need ON + }, + ue-Selected-r12 SEQUENCE { + discTxPoolDedicated-r12 SEQUENCE { + poolToReleaseList-r12 SL-TxPoolToReleaseList-r12 OPTIONAL, -- Need ON + poolToAddModList-r12 SL-DiscTxPoolToAddModList-r12 OPTIONAL -- Need ON + } OPTIONAL -- Need ON + } + } + } OPTIONAL, -- Need ON + ..., + [[ discTF-IndexList-v1260 CHOICE { + release NULL, + setup SEQUENCE { + discTF-IndexList-r12b SL-TF-IndexPairList-r12b + } + } OPTIONAL -- Need ON + ]] +} + +SL-DiscTxPoolToAddModList-r12 ::= SEQUENCE (SIZE (1..maxSL-TxPool-r12)) OF SL-DiscTxPoolToAddMod-r12 + +SL-DiscTxPoolToAddMod-r12 ::= SEQUENCE { + poolIdentity-r12 SL-TxPoolIdentity-r12, + pool-r12 SL-DiscResourcePool-r12 +} + +SL-TF-IndexPairList-r12 ::= SEQUENCE (SIZE (1..maxSL-TF-IndexPair-r12)) OF SL-TF-IndexPair-r12 + +SL-TF-IndexPair-r12 ::= SEQUENCE { + discSF-Index-r12 INTEGER (1.. 200) OPTIONAL, -- Need ON + discPRB-Index-r12 INTEGER (1.. 50) OPTIONAL -- Need ON +} + +SL-TF-IndexPairList-r12b ::= SEQUENCE (SIZE (1..maxSL-TF-IndexPair-r12)) OF SL-TF-IndexPair-r12b + +SL-TF-IndexPair-r12b ::= SEQUENCE { + discSF-Index-r12b INTEGER (0..209) OPTIONAL, -- Need ON + discPRB-Index-r12b INTEGER (0..49) OPTIONAL -- Need ON +} + + +SL-DiscTxPoolList-r12 ::= SEQUENCE (SIZE (1..maxSL-TxPool-r12)) OF SL-DiscResourcePool-r12 + +SL-DiscRxPoolList-r12 ::= SEQUENCE (SIZE (1..maxSL-RxPool-r12)) OF SL-DiscResourcePool-r12 + +SL-DiscResourcePool-r12 ::= SEQUENCE { + cp-Len-r12 SL-CP-Len-r12, + discPeriod-r12 ENUMERATED {rf32, rf64, rf128, + rf256, rf512, rf1024, spare2, spare}, + numRetx-r12 INTEGER (0..3), + numRepetition-r12 INTEGER (1..50), + tf-ResourceConfig-r12 SL-TF-ResourceConfig-r12, + txParameters-r12 SEQUENCE { + txParametersGeneral-r12 SL-TxParameters-r12, + ue-SelectedResourceConfig-r12 SEQUENCE { + poolSelection-r12 CHOICE { + rsrpBased-r12 SL-PoolSelectionConfig-r12, + random-r12 NULL + }, + txProbability-r12 ENUMERATED {p25, p50, p75, p100} + } OPTIONAL -- Need OR + } OPTIONAL, -- Cond Tx + rxParameters-r12 SEQUENCE { + tdd-Config-r12 TDD-Config OPTIONAL, -- Need OR + syncConfigIndex-r12 INTEGER (0..15) + } OPTIONAL, -- Need OR + ... +} + +SL-PoolSelectionConfig-r12 ::= SEQUENCE { + threshLow-r12 RSRP-RangeSL2-r12, + threshHigh-r12 RSRP-RangeSL2-r12 +} + + +SL-DiscTxPowerInfoList-r12 ::= SEQUENCE (SIZE (maxSL-DiscPowerClass-r12)) OF SL-DiscTxPowerInfo-r12 + +SL-DiscTxPowerInfo-r12 ::= SEQUENCE { + discMaxTxPower-r12 P-Max, + ... +} + + +SL-HoppingConfigComm-r12 ::= SEQUENCE { + hoppingParameter-r12 INTEGER (0..504), + numSubbands-r12 ENUMERATED {ns1, ns2, ns4}, + rb-Offset-r12 INTEGER (0..110) +} + +SL-HoppingConfigDisc-r12 ::= SEQUENCE { + a-r12 INTEGER (1..200), + b-r12 INTEGER (1..10), + c-r12 ENUMERATED {n1, n5} +} + + +SL-OffsetIndicator-r12 ::= CHOICE { + small-r12 INTEGER (0..319), + large-r12 INTEGER (0..10239) +} + +SL-OffsetIndicatorSync-r12 ::= INTEGER (0..39) + + +SL-PeriodComm-r12 ::= ENUMERATED {sf40, sf60, sf70, sf80, sf120, sf140, + sf160, sf240, sf280, sf320, spare6, spare5, + spare4, spare3, spare2, spare} + + +SLSSID-r12 ::= INTEGER (0..167) + + +SL-SyncConfigList-r12 ::= SEQUENCE (SIZE (1..maxSL-SyncConfig-r12)) OF SL-SyncConfig-r12 + +SL-SyncConfig-r12 ::= SEQUENCE { + syncCP-Len-r12 SL-CP-Len-r12, + syncOffsetIndicator-r12 SL-OffsetIndicatorSync-r12, + slssid-r12 SLSSID-r12, + txParameters-r12 SEQUENCE { + syncTxParameters-r12 SL-TxParameters-r12, + syncTxThreshIC-r12 RSRP-RangeSL-r12, + syncInfoReserved-r12 BIT STRING (SIZE (19)) OPTIONAL -- Need OR + } OPTIONAL, -- Need OR + rxParamsNCell-r12 SEQUENCE { + physCellId-r12 PhysCellId, + discSyncWindow-r12 ENUMERATED {w1, w2} + } OPTIONAL, -- Need OR + ... +} + + +SL-TF-ResourceConfig-r12 ::= SEQUENCE { + prb-Num-r12 INTEGER (1..100), + prb-Start-r12 INTEGER (0..99), + prb-End-r12 INTEGER (0..99), + offsetIndicator-r12 SL-OffsetIndicator-r12, + subframeBitmap-r12 SubframeBitmapSL-r12 +} + +SubframeBitmapSL-r12 ::= CHOICE { + bs4-r12 BIT STRING (SIZE (4)), + bs8-r12 BIT STRING (SIZE (8)), + bs12-r12 BIT STRING (SIZE (12)), + bs16-r12 BIT STRING (SIZE (16)), + bs30-r12 BIT STRING (SIZE (30)), + bs40-r12 BIT STRING (SIZE (40)), + bs42-r12 BIT STRING (SIZE (42)) +} + + +SL-TxParameters-r12 ::= SEQUENCE { + alpha-r12 Alpha-r12, + p0-r12 P0-SL-r12 +} + +P0-SL-r12 ::= INTEGER (-126..31) + + +SL-TxPoolIdentity-r12 ::= INTEGER (1.. maxSL-TxPool-r12) + + +SL-TxPoolToReleaseList-r12 ::= SEQUENCE (SIZE (1..maxSL-TxPool-r12)) OF SL-TxPoolIdentity-r12 + + +maxBandComb-r10 INTEGER ::= 128 -- Maximum number of band combinations. +maxBandComb-r11 INTEGER ::= 256 -- Maximum number of additional band combinations. +maxBands INTEGER ::= 64 -- Maximum number of bands listed in EUTRA UE caps +maxBandwidthClass-r10 INTEGER ::= 16 -- Maximum number of supported CA BW classes per band +maxBandwidthCombSet-r10 INTEGER ::= 32 -- Maximum number of bandwidth combination sets per + -- supported band combination +maxCDMA-BandClass INTEGER ::= 32 -- Maximum value of the CDMA band classes +maxCellBlack INTEGER ::= 16 -- Maximum number of blacklisted physical cell identity + -- ranges listed in SIB type 4 and 5 +maxCellHistory-r12 INTEGER ::= 16 -- Maximum number of visited EUTRA cells reported +maxCellInfoGERAN-r9 INTEGER ::= 32 -- Maximum number of GERAN cells for which system in- + -- formation can be provided as redirection assistance +maxCellInfoUTRA-r9 INTEGER ::= 16 -- Maximum number of UTRA cells for which system + -- information can be provided as redirection + -- assistance +maxCSI-IM-r11 INTEGER ::= 3 -- Maximum number of CSI-IM configurations + -- (per carrier frequency) +maxCSI-IM-r12 INTEGER ::= 4 -- Maximum number of CSI-IM configurations + -- (per carrier frequency) +maxCSI-Proc-r11 INTEGER ::= 4 -- Maximum number of CSI processes (per carrier + -- frequency) +maxCSI-RS-NZP-r11 INTEGER ::= 3 -- Maximum number of CSI RS resource + -- configurations using non-zero Tx power + -- (per carrier frequency) +maxCSI-RS-ZP-r11 INTEGER ::= 4 -- Maximum number of CSI RS resource + -- configurations using zero Tx power(per carrier + -- frequency) +maxCQI-ProcExt-r11 INTEGER ::= 3 -- Maximum number of additional periodic CQI + -- configurations (per carrier frequency) +maxFreqUTRA-TDD-r10 INTEGER ::= 6 -- Maximum number of UTRA TDD carrier frequencies for + -- which system information can be provided as + -- redirection assistance +maxCellInter INTEGER ::= 16 -- Maximum number of neighbouring inter-frequency + -- cells listed in SIB type 5 +maxCellIntra INTEGER ::= 16 -- Maximum number of neighbouring intra-frequency + -- cells listed in SIB type 4 +maxCellListGERAN INTEGER ::= 3 -- Maximum number of lists of GERAN cells +maxCellMeas INTEGER ::= 32 -- Maximum number of entries in each of the + -- cell lists in a measurement object +maxCellReport INTEGER ::= 8 -- Maximum number of reported cells/CSI-RS resources +maxCSI-RS-Meas-r12 INTEGER ::= 96 -- Maximum number of entries in the CSI-RS list + -- in a measurement object +maxDRB INTEGER ::= 11 -- Maximum number of Data Radio Bearers +maxDS-Duration-r12 INTEGER ::= 5 -- Maximum number of subframes in a discovery signals + -- occasion +maxDS-ZTP-CSI-RS-r12 INTEGER ::= 5 -- Maximum number of zero transmission power CSI-RS for + -- a serving cell concerning discovery signals +maxEARFCN INTEGER ::= 65535 -- Maximum value of EUTRA carrier frequency +maxEARFCN-Plus1 INTEGER ::= 65536 -- Lowest value extended EARFCN range +maxEARFCN2 INTEGER ::= 262143 -- Highest value extended EARFCN range +maxEPDCCH-Set-r11 INTEGER ::= 2 -- Maximum number of EPDCCH sets +maxFBI INTEGER ::= 64 -- Maximum value of fequency band indicator +maxFBI-Plus1 INTEGER ::= 65 -- Lowest value extended FBI range +maxFBI2 INTEGER ::= 256 -- Highest value extended FBI range +maxFreq INTEGER ::= 8 -- Maximum number of carrier frequencies +maxFreqIDC-r11 INTEGER ::= 32 -- Maximum number of carrier frequencies that are + -- affected by the IDC problems +maxFreqMBMS-r11 INTEGER ::= 5 -- Maximum number of carrier frequencies for which an + -- MBMS capable UE may indicate an interest +maxGERAN-SI INTEGER ::= 10 -- Maximum number of GERAN SI blocks that can be + -- provided as part of NACC information +maxGNFG INTEGER ::= 16 -- Maximum number of GERAN neighbour freq groups +maxLogMeasReport-r10 INTEGER ::= 520 -- Maximum number of logged measurement entries + -- that can be reported by the UE in one message +maxMBSFN-Allocations INTEGER ::= 8 -- Maximum number of MBSFN frame allocations with + -- different offset +maxMBSFN-Area INTEGER ::= 8 +maxMBSFN-Area-1 INTEGER ::= 7 +maxMeasId INTEGER ::= 32 +maxMeasId-Plus1 INTEGER ::= 33 +maxMeasId-r12 INTEGER ::= 64 +maxMultiBands INTEGER ::= 8 -- Maximum number of additional frequency bands + -- that a cell belongs to +maxNAICS-Entries-r12 INTEGER ::= 8 -- Maximum number of supported NAICS combination(s) +maxNeighCell-r12 INTEGER ::= 8 -- Maximum number of neighbouring cells in NAICS + -- configuration (per carrier frequency) +maxObjectId INTEGER ::= 32 +maxP-a-PerNeighCell-r12 INTEGER ::= 3 -- Maximum number of power offsets for a neighbour cell + -- in NAICS configuration +maxPageRec INTEGER ::= 16 -- +maxPhysCellIdRange-r9 INTEGER ::= 4 -- Maximum number of physical cell identity ranges +maxPLMN-r11 INTEGER ::= 6 -- Maximum number of PLMNs +maxPNOffset INTEGER ::= 511 -- Maximum number of CDMA2000 PNOffsets +maxPMCH-PerMBSFN INTEGER ::= 15 +maxRAT-Capabilities INTEGER ::= 8 -- Maximum number of interworking RATs (incl EUTRA) +maxRE-MapQCL-r11 INTEGER ::= 4 -- Maximum number of PDSCH RE Mapping configurations + -- (per carrier frequency) +maxReportConfigId INTEGER ::= 32 +maxRSTD-Freq-r10 INTEGER ::= 3 -- Maximum number of frequency layers for RSTD + -- measurement +maxSAI-MBMS-r11 INTEGER ::= 64 -- Maximum number of MBMS service area identities + -- broadcast per carrier frequency +maxSCell-r10 INTEGER ::= 4 -- Maximum number of SCells +maxSL-Dest-r12 INTEGER ::= 16 -- Maximum number of sidelink destinations +maxSL-DiscPowerClass-r12 INTEGER ::= 3 -- Maximum number of sidelink power classes +maxSL-RxPool-r12 INTEGER ::= 16 -- Maximum number of individual sidelink Rx resource pools +maxSL-SyncConfig-r12 INTEGER ::= 16 -- Maximum number of sidelink Sync configurations +maxSL-TF-IndexPair-r12 INTEGER ::= 64 -- Maximum number of sidelink Time Freq resource index + -- pairs +maxSL-TxPool-r12 INTEGER ::= 4 -- Maximum number of individual sidelink Tx resource pools +maxSTAG-r11 INTEGER ::= 3 -- Maximum number of STAGs +maxServCell-r10 INTEGER ::= 5 -- Maximum number of Serving cells +maxServiceCount INTEGER ::= 16 -- Maximum number of MBMS services that can be included + -- in an MBMS counting request and response +maxServiceCount-1 INTEGER ::= 15 +maxSessionPerPMCH INTEGER ::= 29 +maxSessionPerPMCH-1 INTEGER ::= 28 +maxSIB INTEGER ::= 32 -- Maximum number of SIBs +maxSIB-1 INTEGER ::= 31 +maxSI-Message INTEGER ::= 32 -- Maximum number of SI messages +maxSimultaneousBands-r10 INTEGER ::= 64 -- Maximum number of simultaneously aggregated bands +maxSubframePatternIDC-r11 INTEGER ::= 8 -- Maximum number of subframe reservation patterns + -- that the UE can simultaneously recommend to the + -- E-UTRAN for use. +maxUTRA-FDD-Carrier INTEGER ::= 16 -- Maximum number of UTRA FDD carrier frequencies +maxUTRA-TDD-Carrier INTEGER ::= 16 -- Maximum number of UTRA TDD carrier frequencies +maxWLAN-Id-r12 INTEGER ::= 16 -- Maximum number of WLAN identifiers + + +END + diff --git a/openair2/RRC/LITE/MESSAGES/asn1c/ASN1_files/EUTRA-UE-Variables-ah0.asn b/openair2/RRC/LITE/MESSAGES/asn1c/ASN1_files/EUTRA-UE-Variables-ah0.asn new file mode 100644 index 0000000000..9c5de5c273 --- /dev/null +++ b/openair2/RRC/LITE/MESSAGES/asn1c/ASN1_files/EUTRA-UE-Variables-ah0.asn @@ -0,0 +1,85 @@ +EUTRA-UE-Variables DEFINITIONS AUTOMATIC TAGS ::= + +BEGIN + + +VarLogMeasConfig-r10 ::= SEQUENCE { + areaConfiguration-r10 AreaConfiguration-r10 OPTIONAL, + loggingDuration-r10 LoggingDuration-r10, + loggingInterval-r10 LoggingInterval-r10 +} + + +VarLogMeasReport-r10 ::= SEQUENCE { + traceReference-r10 TraceReference-r10, + traceRecordingSessionRef-r10 OCTET STRING (SIZE (2)), + tce-Id-r10 OCTET STRING (SIZE (1)), + plmn-Identity-r10 PLMN-Identity, + absoluteTimeInfo-r10 AbsoluteTimeInfo-r10, + logMeasInfoList-r10 LogMeasInfoList2-r10 +} + +LogMeasInfoList2-r10 ::= SEQUENCE (SIZE (1..maxLogMeas-r10)) OF LogMeasInfo-r10 + + +VarMeasConfig ::= SEQUENCE { + -- Measurement identities + measIdList MeasIdToAddModList OPTIONAL, + -- Measurement objects + measObjectList MeasObjectToAddModList OPTIONAL, + measObjectList-v9i0 MeasObjectToAddModList-v9e0 OPTIONAL, + -- Reporting configurations + reportConfigList ReportConfigToAddModList OPTIONAL, + -- Other parameters + quantityConfig QuantityConfig OPTIONAL, + s-Measure INTEGER (-140..-44) OPTIONAL, + speedStatePars CHOICE { + release NULL, + setup SEQUENCE { + mobilityStateParameters MobilityStateParameters, + timeToTrigger-SF SpeedStateScaleFactors + } + } OPTIONAL +} + + +VarMeasReportList ::= SEQUENCE (SIZE (1..maxMeasId)) OF VarMeasReport + +VarMeasReport ::= SEQUENCE { + -- List of measurement that have been triggered + measId MeasId, + cellsTriggeredList CellsTriggeredList OPTIONAL, + numberOfReportsSent INTEGER +} + +CellsTriggeredList ::= SEQUENCE (SIZE (1..maxCellMeas)) OF CHOICE { + physCellIdEUTRA PhysCellId, + physCellIdUTRA CHOICE { + fdd PhysCellIdUTRA-FDD, + tdd PhysCellIdUTRA-TDD + }, + physCellIdGERAN SEQUENCE { + carrierFreq CarrierFreqGERAN, + physCellId PhysCellIdGERAN + }, + physCellIdCDMA2000 PhysCellIdCDMA2000 +} + +VarRLF-Report-r10 ::= SEQUENCE { + rlf-Report-r10 RLF-Report-r9, + plmn-Identity-r10 PLMN-Identity +} + + +VarShortMAC-Input ::= SEQUENCE { + cellIdentity CellIdentity, + physCellId PhysCellId, + c-RNTI C-RNTI +} + +maxLogMeas-r10 INTEGER ::= 4060-- Maximum number of logged measurement entries + -- that can be stored by the UE + + +END + diff --git a/openair2/RRC/LITE/MESSAGES/asn1c/ASN1_files/EUTRA-UE-Variables-c60.asn b/openair2/RRC/LITE/MESSAGES/asn1c/ASN1_files/EUTRA-UE-Variables-c60.asn new file mode 100644 index 0000000000..ea3825ab64 --- /dev/null +++ b/openair2/RRC/LITE/MESSAGES/asn1c/ASN1_files/EUTRA-UE-Variables-c60.asn @@ -0,0 +1,131 @@ +EUTRA-UE-Variables DEFINITIONS AUTOMATIC TAGS ::= + +BEGIN + + +VarConnEstFailReport-r11 ::= SEQUENCE { + connEstFailReport-r11 ConnEstFailReport-r11, + plmn-Identity-r11 PLMN-Identity +} + + +VarLogMeasConfig-r10 ::= SEQUENCE { + areaConfiguration-r10 AreaConfiguration-r10 OPTIONAL, + loggingDuration-r10 LoggingDuration-r10, + loggingInterval-r10 LoggingInterval-r10 +} + +VarLogMeasConfig-r11 ::= SEQUENCE { + areaConfiguration-r10 AreaConfiguration-r10 OPTIONAL, + areaConfiguration-v1130 AreaConfiguration-v1130 OPTIONAL, + loggingDuration-r10 LoggingDuration-r10, + loggingInterval-r10 LoggingInterval-r10 +} + +VarLogMeasConfig-r12 ::= SEQUENCE { + areaConfiguration-r10 AreaConfiguration-r10 OPTIONAL, + areaConfiguration-v1130 AreaConfiguration-v1130 OPTIONAL, + loggingDuration-r10 LoggingDuration-r10, + loggingInterval-r10 LoggingInterval-r10, + targetMBSFN-AreaList-r12 TargetMBSFN-AreaList-r12 OPTIONAL +} + + +VarLogMeasReport-r10 ::= SEQUENCE { + traceReference-r10 TraceReference-r10, + traceRecordingSessionRef-r10 OCTET STRING (SIZE (2)), + tce-Id-r10 OCTET STRING (SIZE (1)), + plmn-Identity-r10 PLMN-Identity, + absoluteTimeInfo-r10 AbsoluteTimeInfo-r10, + logMeasInfoList-r10 LogMeasInfoList2-r10 +} + +VarLogMeasReport-r11 ::= SEQUENCE { + traceReference-r10 TraceReference-r10, + traceRecordingSessionRef-r10 OCTET STRING (SIZE (2)), + tce-Id-r10 OCTET STRING (SIZE (1)), + plmn-IdentityList-r11 PLMN-IdentityList3-r11, + absoluteTimeInfo-r10 AbsoluteTimeInfo-r10, + logMeasInfoList-r10 LogMeasInfoList2-r10 +} + +LogMeasInfoList2-r10 ::= SEQUENCE (SIZE (1..maxLogMeas-r10)) OF LogMeasInfo-r10 + + +VarMeasConfig ::= SEQUENCE { + -- Measurement identities + measIdList MeasIdToAddModList OPTIONAL, + measIdListExt-r12 MeasIdToAddModListExt-r12 OPTIONAL, + -- Measurement objects + measObjectList MeasObjectToAddModList OPTIONAL, + measObjectList-v9i0 MeasObjectToAddModList-v9e0 OPTIONAL, + -- Reporting configurations + reportConfigList ReportConfigToAddModList OPTIONAL, + -- Other parameters + quantityConfig QuantityConfig OPTIONAL, + measScaleFactor-r12 MeasScaleFactor-r12 OPTIONAL, + s-Measure INTEGER (-140..-44) OPTIONAL, + speedStatePars CHOICE { + release NULL, + setup SEQUENCE { + mobilityStateParameters MobilityStateParameters, + timeToTrigger-SF SpeedStateScaleFactors + } + } OPTIONAL, + allowInterruptions-r11 BOOLEAN OPTIONAL +} + + +VarMeasReportList ::= SEQUENCE (SIZE (1..maxMeasId)) OF VarMeasReport +VarMeasReportList-r12 ::= SEQUENCE (SIZE (1..maxMeasId-r12)) OF VarMeasReport + +VarMeasReport ::= SEQUENCE { + -- List of measurement that have been triggered + measId MeasId, + measId-v1250 MeasId-v1250 OPTIONAL, + cellsTriggeredList CellsTriggeredList OPTIONAL, + csi-RS-TriggeredList-r12 CSI-RS-TriggeredList-r12 OPTIONAL, + numberOfReportsSent INTEGER +} + +CellsTriggeredList ::= SEQUENCE (SIZE (1..maxCellMeas)) OF CHOICE { + physCellIdEUTRA PhysCellId, + physCellIdUTRA CHOICE { + fdd PhysCellIdUTRA-FDD, + tdd PhysCellIdUTRA-TDD + }, + physCellIdGERAN SEQUENCE { + carrierFreq CarrierFreqGERAN, + physCellId PhysCellIdGERAN + }, + physCellIdCDMA2000 PhysCellIdCDMA2000 +} + +CSI-RS-TriggeredList-r12 ::= SEQUENCE (SIZE (1..maxCSI-RS-Meas-r12)) OF MeasCSI-RS-Id-r12 + +VarMobilityHistoryReport-r12 ::= VisitedCellInfoList-r12 + + +VarRLF-Report-r10 ::= SEQUENCE { + rlf-Report-r10 RLF-Report-r9, + plmn-Identity-r10 PLMN-Identity +} + +VarRLF-Report-r11 ::= SEQUENCE { + rlf-Report-r10 RLF-Report-r9, + plmn-IdentityList-r11 PLMN-IdentityList3-r11 +} + + +VarShortMAC-Input ::= SEQUENCE { + cellIdentity CellIdentity, + physCellId PhysCellId, + c-RNTI C-RNTI +} + +maxLogMeas-r10 INTEGER ::= 4060-- Maximum number of logged measurement entries + -- that can be stored by the UE + + +END + diff --git a/openair2/RRC/LITE/MESSAGES/asn1c/asn1cpatch.p0 b/openair2/RRC/LITE/MESSAGES/asn1c/asn1cpatch.p0 new file mode 100644 index 0000000000..18dc516285 --- /dev/null +++ b/openair2/RRC/LITE/MESSAGES/asn1c/asn1cpatch.p0 @@ -0,0 +1,13 @@ +Index: skeletons/per_opentype.c +=================================================================== +--- skeletons/per_opentype.c (revision 1516) ++++ skeletons/per_opentype.c (working copy) +@@ -277,7 +306,7 @@ + (void)constraints; + (void)sptr; + +- while(per_get_few_bits(pd, 24) >= 0); ++ while(per_get_few_bits(pd, 1 /*24*/) >= 0); + + rv.code = RC_OK; + rv.consumed = pd->moved; diff --git a/openair2/RRC/LITE/defs.h b/openair2/RRC/LITE/defs.h index 850f18115f..75db59add6 100644 --- a/openair2/RRC/LITE/defs.h +++ b/openair2/RRC/LITE/defs.h @@ -28,7 +28,7 @@ *******************************************************************************/ -/*! \file defs.h +/*! \file RRC/LITE/defs.h * \brief RRC struct definitions and function prototypes * \author Navid Nikaein and Raymond Knopp * \date 2010 - 2014 @@ -115,7 +115,7 @@ # include "commonDef.h" #endif -#if defined(ENABLE_RAL) +#if ENABLE_RAL # include "collection/hashtable/obj_hashtable.h" #endif @@ -135,12 +135,12 @@ typedef struct uid_linear_allocator_s { #define PROTOCOL_RRC_CTXT_FMT PROTOCOL_CTXT_FMT #define PROTOCOL_RRC_CTXT_ARGS(CTXT_Pp) PROTOCOL_CTXT_ARGS(CTXT_Pp) -/** @defgroup _rrc_impl_ RRC Layer Reference Implementation - * @ingroup _ref_implementation_ +/** @defgroup _rrc RRC + * @ingroup _oai2 * @{ */ -#if defined(ENABLE_RAL) +#if ENABLE_RAL typedef struct rrc_ral_threshold_key_s { ral_link_param_type_t link_param_type; ral_threshold_t threshold; @@ -189,16 +189,16 @@ typedef enum HO_STATE_e { typedef struct UE_RRC_INFO_s { UE_STATE_t State; - uint8_t SIB1Status; uint8_t SIB1systemInfoValueTag; - uint8_t SIStatus; + uint32_t SIStatus; + uint32_t SIcnt; #ifdef Rel10 uint8_t MCCHStatus[8]; // MAX_MBSFN_AREA #endif - uint8_t SIwindowsize; + uint8_t SIwindowsize; //!< Corresponds to the SIB1 si-WindowLength parameter. The unit is ms. Possible values are (final): 1,2,5,10,15,20,40 uint8_t handoverTarget; HO_STATE_t ho_state; - uint16_t SIperiod; + uint16_t SIperiod; //!< Corresponds to the SIB1 si-Periodicity parameter (multiplied by 10). Possible values are (final): 80,160,320,640,1280,2560,5120 unsigned short UE_index; uint32_t T300_active; uint32_t T300_cnt; @@ -295,7 +295,9 @@ typedef struct HANDOVER_INFO_UE_s { PhysCellId_t targetCellId; uint8_t measFlag; } HANDOVER_INFO_UE; + typedef struct eNB_RRC_UE_s { + uint8_t primaryCC_id; #ifdef Rel10 SCellToAddMod_r10_t sCell_config[2]; #endif @@ -317,7 +319,6 @@ typedef struct eNB_RRC_UE_s { MeasConfig_t* measConfig; HANDOVER_INFO* handover_info; - #if defined(ENABLE_SECURITY) /* KeNB as derived from KASME received from EPC */ uint8_t kenb[32]; @@ -326,8 +327,6 @@ typedef struct eNB_RRC_UE_s { e_SecurityAlgorithmConfig__cipheringAlgorithm ciphering_algorithm; e_SecurityAlgorithmConfig__integrityProtAlgorithm integrity_algorithm; - - uint8_t Status; rnti_t rnti; uint64_t random_ue_identity; @@ -361,6 +360,7 @@ typedef struct eNB_RRC_UE_s { } eNB_RRC_UE_t; typedef uid_t ue_uid_t; + typedef struct rrc_eNB_ue_context_s { /* Tree related data */ RB_ENTRY(rrc_eNB_ue_context_s) entries; @@ -370,7 +370,7 @@ typedef struct rrc_eNB_ue_context_s { */ rnti_t ue_id_rnti; - // an other key for protocol layers but should not be used as a key for RB tree + // another key for protocol layers but should not be used as a key for RB tree ue_uid_t local_uid; /* UE id for initial connection to S1AP */ @@ -412,12 +412,14 @@ typedef struct eNB_RRC_INST_s { rcc_eNB_carrier_data_t carrier[MAX_NUM_CCs]; uid_allocator_t uid_allocator; // for rrc_ue_head RB_HEAD(rrc_ue_tree_s, rrc_eNB_ue_context_s) rrc_ue_head; // ue_context tree key search by rnti - RB_HEAD(rrc_rnti_tree_s, rrc_ue_s1ap_ids_s) rrc_rnti_head; // ue-rnti tree key search by S1AP ids uint8_t HO_flag; uint8_t Nb_ue; -#if defined(ENABLE_RAL) +#if ENABLE_RAL obj_hash_table_t *ral_meas_thresholds; #endif + hash_table_t *initial_id2_s1ap_ids; // key is content is rrc_ue_s1ap_ids_t + hash_table_t *s1ap_id2_s1ap_ids ; // key is content is rrc_ue_s1ap_ids_t + #ifdef LOCALIZATION /// localization type, 0: power based, 1: time based uint8_t loc_type; @@ -460,7 +462,7 @@ typedef struct UE_RRC_INST_s { uint8_t SIB1Status[NB_CNX_UE]; uint8_t SIStatus[NB_CNX_UE]; SystemInformationBlockType1_t *sib1[NB_CNX_UE]; - SystemInformation_t *si[NB_CNX_UE][8]; + SystemInformation_t *si[NB_CNX_UE]; //!< Temporary storage for an SI message. Decoding happens in decode_SI(). SystemInformationBlockType2_t *sib2[NB_CNX_UE]; SystemInformationBlockType3_t *sib3[NB_CNX_UE]; SystemInformationBlockType4_t *sib4[NB_CNX_UE]; @@ -507,7 +509,7 @@ typedef struct UE_RRC_INST_s { float rsrq_db[7]; float rsrp_db_filtered[7]; float rsrq_db_filtered[7]; -#if defined(ENABLE_RAL) +#if ENABLE_RAL obj_hash_table_t *ral_meas_thresholds; ral_transaction_id_t scan_transaction_id; #endif @@ -524,4 +526,4 @@ typedef struct UE_RRC_INST_s { #include "proto.h" #endif -/** @ */ +/** @} */ diff --git a/openair2/RRC/LITE/proto.h b/openair2/RRC/LITE/proto.h index 398c126653..9fbfadbd85 100644 --- a/openair2/RRC/LITE/proto.h +++ b/openair2/RRC/LITE/proto.h @@ -32,8 +32,10 @@ * \date 2010 - 2014 * \email navid.nikaein@eurecom.fr * \version 1.0 - * @ingroup _rrc - + + */ +/** \addtogroup _rrc + * @{ */ //main.c @@ -77,12 +79,7 @@ rrc_rx_tx( \param ctxt_pP Running context \param Srb_info Pointer to SRB_INFO structure (SRB0) \param eNB_index Index of corresponding eNB/CH*/ -int -rrc_ue_decode_ccch( - const protocol_ctxt_t* const ctxt_pP, - const SRB_INFO* const Srb_info, - const uint8_t eNB_index -); +int rrc_ue_decode_ccch( const protocol_ctxt_t* const ctxt_pP, const SRB_INFO* const Srb_info, const uint8_t eNB_index ); /** \brief Decodes a DL-DCCH message and invokes appropriate routine to handle the message \param ctxt_pP Running context @@ -106,17 +103,6 @@ rrc_ue_generate_RRCConnectionRequest( const uint8_t eNB_index ); -/** \brief Generates/Encodes RRCConnnectionSetupComplete message at UE - \param ctxt_pP Running context - \param eNB_index Index of corresponding eNB/CH - \param Transaction_id Transaction identifier*/ -void -rrc_ue_generate_RRCConnectionSetupComplete( - const protocol_ctxt_t* const ctxt_pP, - const uint8_t eNB_index, - const uint8_t Transaction_id -); - /** \brief process the received rrcConnectionReconfiguration message at UE \param ctxt_pP Running context \param *rrcConnectionReconfiguration pointer to the sturcture @@ -128,17 +114,6 @@ rrc_ue_process_rrcConnectionReconfiguration( uint8_t eNB_index ); -/** \brief Generates/Encodes RRCConnectionReconfigurationComplete message at UE - \param ctxt_pP Running context - \param eNB_index Index of corresponding eNB/CH - \param Transaction_id RRC transaction identifier */ -void -rrc_ue_generate_RRCConnectionReconfigurationComplete( - const protocol_ctxt_t* const ctxt_pP, - const uint8_t eNB_index, - const uint8_t Transaction_id -); - /** \brief Establish SRB1 based on configuration in SRB_ToAddMod structure. Configures RLC/PDCP accordingly \param module_idP Instance ID of UE \param frame Frame index @@ -233,6 +208,17 @@ rrc_eNB_generate_RRCConnectionSetup( const int CC_id ); +/**\brief Generate RRCConnectionReestablishmentReject + \param ctxt_pP Running context + \param ue_context_pP UE context + \param CC_id Component Carrier ID*/ +void +rrc_eNB_generate_RRCConnectionReestablishmentReject( + const protocol_ctxt_t* const ctxt_pP, + rrc_eNB_ue_context_t* const ue_context_pP, + const int CC_id +); + /**\brief Process the RRCConnectionSetupComplete based on information coming from UE \param ctxt_pP Running context \param ue_context_pP RRC UE context @@ -347,41 +333,15 @@ void rrc_lite_in_sync_ind(module_id_t module_idP, frame_t frameP, uint16_t eNB_i void rrc_lite_out_of_sync_ind(module_id_t module_idP, frame_t frameP, unsigned short eNB_index); -int -decode_MCCH_Message( - const protocol_ctxt_t* const ctxt_pP, - const uint8_t eNB_index, - const uint8_t* const Sdu, - const uint8_t Sdu_len, - const uint8_t mbsfn_sync_area -); +int decode_MCCH_Message( const protocol_ctxt_t* const ctxt_pP, const uint8_t eNB_index, const uint8_t* const Sdu, const uint8_t Sdu_len, const uint8_t mbsfn_sync_area ); -void decode_MBSFNAreaConfiguration(module_id_t module_idP, uint8_t eNB_index, frame_t frameP,uint8_t mbsfn_sync_area); - -int -decode_BCCH_DLSCH_Message( +int decode_BCCH_DLSCH_Message( const protocol_ctxt_t* const ctxt_pP, const uint8_t eNB_index, uint8_t* const Sdu, const uint8_t Sdu_len, const uint8_t rsrq, - const uint8_t rsrp -); - -int -decode_SIB1( - const protocol_ctxt_t* const ctxt_pP, - const uint8_t eNB_index, - const uint8_t rsrq, - const uint8_t rsrp -); - -int -decode_SI( - const protocol_ctxt_t* const ctxt_pP, - const uint8_t eNB_index, - const uint8_t si_window -); + const uint8_t rsrp ); void ue_meas_filtering( @@ -426,12 +386,6 @@ rrc_eNB_process_MeasurementReport( const MeasResults_t* const measResults2 ); -void -rrc_ue_generate_MeasurementReport( - const protocol_ctxt_t* const ctxt_pP, - uint8_t eNB_index -); - void rrc_eNB_generate_HandoverPreparationInformation( const protocol_ctxt_t* const ctxt_pP, @@ -444,15 +398,6 @@ check_handovers( protocol_ctxt_t* const ctxt_pP ); -uint8_t check_trigger_meas_event( - uint8_t module_idP, - frame_t frameP, - uint8_t eNB_index, - uint8_t ue_cnx_index, - uint8_t meas_index, - Q_OffsetRange_t ofn, Q_OffsetRange_t ocn, Hysteresis_t hys, - Q_OffsetRange_t ofs, Q_OffsetRange_t ocs, long a3_offset, TimeToTrigger_t ttt); - //void rrc_ue_process_ueCapabilityEnquiry(uint8_t module_idP,uint32_t frame,UECapabilityEnquiry_t *UECapabilityEnquiry,uint8_t eNB_index); /*void rrc_ue_process_securityModeCommand( @@ -492,3 +437,4 @@ long binary_search_int(int elements[], long numElem, int value); long binary_search_float(float elements[], long numElem, float value); +/** @}*/ diff --git a/openair2/RRC/LITE/rrc_UE.c b/openair2/RRC/LITE/rrc_UE.c index a2c6d0cdc0..9682f2f587 100644 --- a/openair2/RRC/LITE/rrc_UE.c +++ b/openair2/RRC/LITE/rrc_UE.c @@ -75,7 +75,7 @@ #include "RRC/NAS/nas_config.h" #include "RRC/NAS/rb_config.h" #endif -#ifdef ENABLE_RAL +#if ENABLE_RAL #include "rrc_UE_ral.h" #endif @@ -107,12 +107,49 @@ extern void *bigphys_malloc(int); extern int8_t dB_fixed2(uint32_t x,uint32_t y); -void -rrc_ue_process_securityModeCommand( - const protocol_ctxt_t* const ctxt_pP, - SecurityModeCommand_t* const securityModeCommand, - const uint8_t eNB_index -); + +// internal prototypes + +void rrc_ue_process_securityModeCommand( const protocol_ctxt_t* const ctxt_pP, SecurityModeCommand_t* const securityModeCommand, const uint8_t eNB_index ); + +static int decode_SI( const protocol_ctxt_t* const ctxt_pP, const uint8_t eNB_index ); + +static int decode_SIB1( const protocol_ctxt_t* const ctxt_pP, const uint8_t eNB_index, const uint8_t rsrq, const uint8_t rsrp ); + +/** \brief Generates/Encodes RRCConnnectionSetupComplete message at UE + * \param ctxt_pP Running context + * \param eNB_index Index of corresponding eNB/CH + * \param Transaction_id Transaction identifier + */ +static void rrc_ue_generate_RRCConnectionSetupComplete( const protocol_ctxt_t* const ctxt_pP, const uint8_t eNB_index, const uint8_t Transaction_id ); + +/** \brief Generates/Encodes RRCConnectionReconfigurationComplete message at UE + * \param ctxt_pP Running context + * \param eNB_index Index of corresponding eNB/CH + * \param Transaction_id RRC transaction identifier + */ +static void rrc_ue_generate_RRCConnectionReconfigurationComplete( const protocol_ctxt_t* const ctxt_pP, const uint8_t eNB_index, const uint8_t Transaction_id ); + +static void rrc_ue_generate_MeasurementReport( const protocol_ctxt_t* const ctxt_pP, uint8_t eNB_index ); + +static uint8_t check_trigger_meas_event( + uint8_t module_idP, + frame_t frameP, + uint8_t eNB_index, + uint8_t ue_cnx_index, + uint8_t meas_index, + Q_OffsetRange_t ofn, Q_OffsetRange_t ocn, Hysteresis_t hys, + Q_OffsetRange_t ofs, Q_OffsetRange_t ocs, long a3_offset, TimeToTrigger_t ttt); + +static void decode_MBSFNAreaConfiguration(module_id_t module_idP, uint8_t eNB_index, frame_t frameP,uint8_t mbsfn_sync_area); + + + + + + + + /*------------------------------------------------------------------------------*/ static Rrc_State_t rrc_get_state (module_id_t ue_mod_idP) { @@ -150,14 +187,9 @@ static int rrc_set_state (module_id_t ue_mod_idP, Rrc_State_t state) } //----------------------------------------------------------------------------- -static int -rrc_set_sub_state ( - module_id_t ue_mod_idP, - Rrc_Sub_State_t subState -) -//----------------------------------------------------------------------------- +static int rrc_set_sub_state( module_id_t ue_mod_idP, Rrc_Sub_State_t subState ) { -#if (defined(ENABLE_ITTI) && (defined(ENABLE_USE_MME) || defined(ENABLE_RAL))) +#if (defined(ENABLE_ITTI) && (defined(ENABLE_USE_MME) || ENABLE_RAL)) switch (UE_rrc_inst[ue_mod_idP].RrcState) { case RRC_STATE_INACTIVE: @@ -199,33 +231,37 @@ rrc_set_sub_state ( } //----------------------------------------------------------------------------- -void -init_SI_UE( - const protocol_ctxt_t* const ctxt_pP, - const uint8_t eNB_index -) -//----------------------------------------------------------------------------- +static void init_SI_UE( const protocol_ctxt_t* const ctxt_pP, const uint8_t eNB_index ) { - - int i; - - UE_rrc_inst[ctxt_pP->module_id].sizeof_SIB1[eNB_index] = 0; UE_rrc_inst[ctxt_pP->module_id].sizeof_SI[eNB_index] = 0; - UE_rrc_inst[ctxt_pP->module_id].SIB1[eNB_index] = (uint8_t*)malloc16(32); - UE_rrc_inst[ctxt_pP->module_id].sib1[eNB_index] = (SystemInformationBlockType1_t*)malloc16(sizeof(SystemInformationBlockType1_t)); - UE_rrc_inst[ctxt_pP->module_id].SI[eNB_index] = (uint8_t*)malloc16(64); + UE_rrc_inst[ctxt_pP->module_id].SIB1[eNB_index] = (uint8_t*)malloc16_clear( 32 ); + UE_rrc_inst[ctxt_pP->module_id].sib1[eNB_index] = malloc16_clear( sizeof(SystemInformationBlockType1_t) ); + UE_rrc_inst[ctxt_pP->module_id].sib2[eNB_index] = malloc16_clear( sizeof(SystemInformationBlockType2_t) ); + UE_rrc_inst[ctxt_pP->module_id].sib3[eNB_index] = malloc16_clear( sizeof(SystemInformationBlockType3_t) ); + UE_rrc_inst[ctxt_pP->module_id].sib4[eNB_index] = malloc16_clear( sizeof(SystemInformationBlockType4_t) ); + UE_rrc_inst[ctxt_pP->module_id].sib5[eNB_index] = malloc16_clear( sizeof(SystemInformationBlockType5_t) ); + UE_rrc_inst[ctxt_pP->module_id].sib6[eNB_index] = malloc16_clear( sizeof(SystemInformationBlockType6_t) ); + UE_rrc_inst[ctxt_pP->module_id].sib7[eNB_index] = malloc16_clear( sizeof(SystemInformationBlockType7_t) ); + UE_rrc_inst[ctxt_pP->module_id].sib8[eNB_index] = malloc16_clear( sizeof(SystemInformationBlockType8_t) ); + UE_rrc_inst[ctxt_pP->module_id].sib9[eNB_index] = malloc16_clear( sizeof(SystemInformationBlockType9_t) ); + UE_rrc_inst[ctxt_pP->module_id].sib10[eNB_index] = malloc16_clear( sizeof(SystemInformationBlockType10_t) ); + UE_rrc_inst[ctxt_pP->module_id].sib11[eNB_index] = malloc16_clear( sizeof(SystemInformationBlockType11_t) ); +#ifdef Rel10 + UE_rrc_inst[ctxt_pP->module_id].sib12[eNB_index] = malloc16_clear( sizeof(SystemInformationBlockType12_r9_t) ); + UE_rrc_inst[ctxt_pP->module_id].sib13[eNB_index] = malloc16_clear( sizeof(SystemInformationBlockType13_r9_t) ); +#endif + UE_rrc_inst[ctxt_pP->module_id].SI[eNB_index] = (uint8_t*)malloc16_clear( 64 ); - for (i=0; i<8; i++) { - UE_rrc_inst[ctxt_pP->module_id].si[eNB_index][i] = (SystemInformation_t*)malloc16(sizeof(SystemInformation_t)); - } + UE_rrc_inst[ctxt_pP->module_id].si[eNB_index] = (SystemInformation_t*)malloc16_clear( sizeof(SystemInformation_t) ); - UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIB1Status = 0; UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIStatus = 0; + UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIcnt = 0; } #ifdef Rel10 -void init_MCCH_UE(module_id_t ue_mod_idP, uint8_t eNB_index) +//----------------------------------------------------------------------------- +static void init_MCCH_UE(module_id_t ue_mod_idP, uint8_t eNB_index) { int i; UE_rrc_inst[ue_mod_idP].sizeof_MCCH_MESSAGE[eNB_index] = 0; @@ -239,10 +275,8 @@ void init_MCCH_UE(module_id_t ue_mod_idP, uint8_t eNB_index) } #endif -static -void openair_rrc_lite_ue_init_security( - const protocol_ctxt_t* const ctxt_pP -) +//----------------------------------------------------------------------------- +static void openair_rrc_lite_ue_init_security( const protocol_ctxt_t* const ctxt_pP ) { #if defined(ENABLE_SECURITY) // uint8_t *kRRCenc; @@ -263,12 +297,7 @@ void openair_rrc_lite_ue_init_security( } //----------------------------------------------------------------------------- -char -openair_rrc_lite_ue_init( - const module_id_t ue_mod_idP, - const unsigned char eNB_index -) -//----------------------------------------------------------------------------- +char openair_rrc_lite_ue_init( const module_id_t ue_mod_idP, const unsigned char eNB_index ) { protocol_ctxt_t ctxt; PROTOCOL_CTXT_SET_BY_MODULE_ID(&ctxt, ue_mod_idP, ENB_FLAG_NO, NOT_A_RNTI, 0, 0,eNB_index); @@ -321,12 +350,7 @@ openair_rrc_lite_ue_init( } //----------------------------------------------------------------------------- -void -rrc_ue_generate_RRCConnectionRequest( - const protocol_ctxt_t* const ctxt_pP, - const uint8_t eNB_index -) -//----------------------------------------------------------------------------- +void rrc_ue_generate_RRCConnectionRequest( const protocol_ctxt_t* const ctxt_pP, const uint8_t eNB_index ) { uint8_t i=0,rv[6]; @@ -398,13 +422,7 @@ static const char const nas_attach_req_guti[] = { }; //----------------------------------------------------------------------------- -void -rrc_ue_generate_RRCConnectionSetupComplete( - const protocol_ctxt_t* const ctxt_pP, - const uint8_t eNB_index, - const uint8_t Transaction_id -) -//----------------------------------------------------------------------------- +static void rrc_ue_generate_RRCConnectionSetupComplete( const protocol_ctxt_t* const ctxt_pP, const uint8_t eNB_index, const uint8_t Transaction_id ) { uint8_t buffer[100]; @@ -438,13 +456,7 @@ rrc_ue_generate_RRCConnectionSetupComplete( } //----------------------------------------------------------------------------- -void -rrc_ue_generate_RRCConnectionReconfigurationComplete( - const protocol_ctxt_t* const ctxt_pP, - const uint8_t eNB_index, - const uint8_t Transaction_id -) -//----------------------------------------------------------------------------- +static void rrc_ue_generate_RRCConnectionReconfigurationComplete( const protocol_ctxt_t* const ctxt_pP, const uint8_t eNB_index, const uint8_t Transaction_id ) { uint8_t buffer[32], size; @@ -473,13 +485,7 @@ rrc_ue_generate_RRCConnectionReconfigurationComplete( //----------------------------------------------------------------------------- // Called by L2 interface (MAC) -int -rrc_ue_decode_ccch( - const protocol_ctxt_t* const ctxt_pP, - const SRB_INFO* const Srb_info, - const uint8_t eNB_index -) -//----------------------------------------------------------------------------- +int rrc_ue_decode_ccch( const protocol_ctxt_t* const ctxt_pP, const SRB_INFO* const Srb_info, const uint8_t eNB_index ) { DL_CCCH_Message_t* dl_ccch_msg=NULL; asn_dec_rval_t dec_rval; @@ -704,7 +710,7 @@ rrc_ue_establish_drb( RADIO_ACCESS_BEARER,Rlc_info_um); */ #ifdef PDCP_USE_NETLINK -# if !defined(OAI_NW_DRIVER_TYPE_ETHERNET) && !defined(EXMIMO) && !defined(LINK_ENB_PDCP_TO_GTPV1U) +# if !defined(OAI_NW_DRIVER_TYPE_ETHERNET) && !defined(EXMIMO) && !defined(OAI_USRP) && !defined(OAI_BLADERF) && !defined(ETHERNET) && !defined(LINK_ENB_PDCP_TO_GTPV1U) # ifdef OAI_EMU ip_addr_offset3 = oai_emulation.info.nb_enb_local; ip_addr_offset4 = NB_eNB_INST; @@ -796,7 +802,7 @@ rrc_ue_process_measConfig( } } - rrc_mac_config_req(ctxt_pP->module_id,ENB_FLAG_NO,0,eNB_index, + rrc_mac_config_req(ctxt_pP->module_id,0,ENB_FLAG_NO,0,eNB_index, (RadioResourceConfigCommonSIB_t *)NULL, (struct PhysicalConfigDedicated *)NULL, #ifdef Rel10 @@ -1055,7 +1061,7 @@ rrc_ue_process_radioResourceConfigDedicated( #endif ); -#ifdef ENABLE_RAL +#if ENABLE_RAL // first msg that includes srb config UE_rrc_inst[ctxt_pP->module_id].num_srb=radioResourceConfigDedicated->srb_ToAddModList->list.count; #endif @@ -1086,7 +1092,7 @@ rrc_ue_process_radioResourceConfigDedicated( LOG_D(RRC, "[FRAME %05d][RRC_UE][MOD %02d][][--- MAC_CONFIG_REQ (SRB1 eNB %d) --->][MAC_UE][MOD %02d][]\n", ctxt_pP->frame, ctxt_pP->module_id, eNB_index, ctxt_pP->module_id); - rrc_mac_config_req(ctxt_pP->module_id,ENB_FLAG_NO,0,eNB_index, + rrc_mac_config_req(ctxt_pP->module_id,0,ENB_FLAG_NO,0,eNB_index, (RadioResourceConfigCommonSIB_t *)NULL, UE_rrc_inst[ctxt_pP->module_id].physicalConfigDedicated[eNB_index], #ifdef Rel10 @@ -1144,7 +1150,7 @@ rrc_ue_process_radioResourceConfigDedicated( ctxt_pP->module_id, eNB_index, ctxt_pP->module_id); - rrc_mac_config_req(ctxt_pP->module_id,ENB_FLAG_NO,0,eNB_index, + rrc_mac_config_req(ctxt_pP->module_id,0,ENB_FLAG_NO,0,eNB_index, (RadioResourceConfigCommonSIB_t *)NULL, UE_rrc_inst[ctxt_pP->module_id].physicalConfigDedicated[eNB_index], #ifdef Rel10 @@ -1242,7 +1248,7 @@ rrc_ue_process_radioResourceConfigDedicated( radioResourceConfigDedicated->drb_ToAddModList->list.array[i]->drb_Identity, eNB_index, ctxt_pP->module_id); - rrc_mac_config_req(ctxt_pP->module_id,ENB_FLAG_NO,0,eNB_index, + rrc_mac_config_req(ctxt_pP->module_id,0,ENB_FLAG_NO,0,eNB_index, (RadioResourceConfigCommonSIB_t *)NULL, UE_rrc_inst[ctxt_pP->module_id].physicalConfigDedicated[eNB_index], #ifdef Rel10 @@ -1281,7 +1287,8 @@ rrc_ue_process_radioResourceConfigDedicated( UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].State = RRC_CONNECTED; LOG_I(RRC,"[UE %d] State = RRC_CONNECTED (eNB %d)\n",ctxt_pP->module_id,eNB_index); -#if !defined(ENABLE_USE_MME) +#if !defined(ENABLE_USE_MME) && defined(OAI_EMU) +# ifdef OAI_EMU rrc_eNB_emulation_notify_ue_module_id( ctxt_pP->module_id, ctxt_pP->rnti, @@ -1289,6 +1296,7 @@ rrc_ue_process_radioResourceConfigDedicated( UE_rrc_inst[ctxt_pP->module_id].sib1[eNB_index]->cellAccessRelatedInfo.cellIdentity.buf[1], UE_rrc_inst[ctxt_pP->module_id].sib1[eNB_index]->cellAccessRelatedInfo.cellIdentity.buf[2], UE_rrc_inst[ctxt_pP->module_id].sib1[eNB_index]->cellAccessRelatedInfo.cellIdentity.buf[3]); +# endif OAI_EMU #endif } @@ -1605,7 +1613,7 @@ rrc_ue_process_rrcConnectionReconfiguration( free (rrcConnectionReconfiguration_r8->dedicatedInfoNASList); } -#ifdef ENABLE_RAL +#if ENABLE_RAL { MessageDef *message_ral_p = NULL; rrc_ral_connection_reestablishment_ind_t connection_reestablishment_ind; @@ -1743,6 +1751,7 @@ rrc_ue_process_mobilityControlInfo( // Reset MAC and configure PHY rrc_mac_config_req(ctxt_pP->module_id, + 0, ENB_FLAG_NO, 0, eNB_index, @@ -1966,7 +1975,7 @@ rrc_ue_decode_dcch( LOG_I(RRC, "[UE %d] State = RRC_RECONFIGURED during HO (eNB %d)\n", ctxt_pP->module_id, target_eNB_index); #if defined(ENABLE_ITTI) -#ifdef ENABLE_RAL +#if ENABLE_RAL { MessageDef *message_ral_p = NULL; rrc_ral_connection_reconfiguration_ho_ind_t connection_reconfiguration_ho_ind; @@ -2023,7 +2032,7 @@ rrc_ue_decode_dcch( ctxt_pP->module_id, eNB_indexP); #if defined(ENABLE_ITTI) -#ifdef ENABLE_RAL +#if ENABLE_RAL { MessageDef *message_ral_p = NULL; rrc_ral_connection_reconfiguration_ind_t connection_reconfiguration_ind; @@ -2088,7 +2097,7 @@ rrc_ue_decode_dcch( } itti_send_msg_to_task(TASK_NAS_UE, ctxt_pP->instance, msg_p); -#if defined(ENABLE_RAL) +#if ENABLE_RAL msg_p = itti_alloc_new_message(TASK_RRC_UE, RRC_RAL_CONNECTION_RELEASE_IND); RRC_RAL_CONNECTION_RELEASE_IND(msg_p).ue_id = ctxt_pP->module_id; itti_send_msg_to_task(TASK_RAL_UE, ctxt_pP->instance, msg_p); @@ -2147,184 +2156,315 @@ rrc_ue_decode_dcch( #endif } -const char siWindowLength[7][5] = {"1ms\0","2ms\0","5ms\0","10ms\0","15ms\0","20ms\0","40ms\0"}; +const char siWindowLength[8][5] = {"1ms","2ms","5ms","10ms","15ms","20ms","40ms","ERR"}; const char siWindowLength_int[7] = {1,2,5,10,15,20,40}; -const char SIBType[16][6] = {"SIB3\0","SIB4\0","SIB5\0","SIB6\0","SIB7\0","SIB8\0","SIB9\0","SIB10\0","SIB11\0","SIB12\0","SIB13\0","Sp2\0","Sp3\0","Sp4\0"}; -const char SIBPeriod[7][7]= {"80ms\0","160ms\0","320ms\0","640ms\0","1280ms\0","2560ms\0","5120ms\0"}; +const char SIBType[12][6] = {"SIB3","SIB4","SIB5","SIB6","SIB7","SIB8","SIB9","SIB10","SIB11","SIB12","SIB13","Spare"}; +const char SIBPeriod[8][6]= {"rf8","rf16","rf32","rf64","rf128","rf256","rf512","ERR"}; int siPeriod_int[7] = {80,160,320,640,1280,2560,5120}; +static const char* SIBreserved( long value ) +{ + if (value < 0 || value > 1) + return "ERR"; + + if (value) + return "notReserved"; + + return "reserved"; +} +static const char* SIBbarred( long value ) +{ + if (value < 0 || value > 1) + return "ERR"; + + if (value) + return "notBarred"; + + return "barred"; +} +static const char* SIBallowed( long value ) +{ + if (value < 0 || value > 1) + return "ERR"; + + if (value) + return "notAllowed"; + + return "allowed"; +} +static const char* SIB2SoundingPresent( int value ) +{ + switch (value) { + case SoundingRS_UL_ConfigCommon_PR_NOTHING: + return "NOTHING"; + + case SoundingRS_UL_ConfigCommon_PR_release: + return "release"; + + case SoundingRS_UL_ConfigCommon_PR_setup: + return "setup"; + } + + return "ERR"; +} +static const char* SIB2numberOfRA_Preambles( long value ) +{ + static char temp[4] = {0}; + + if (value < 0 || value > 15) + return "ERR"; + + snprintf( temp, sizeof(temp), "n%ld", value*4 + 4 ); + temp[3] = 0; // terminate string + return temp; +} +static const char* SIB2powerRampingStep( long value ) +{ + if (value < 0 || value > 3) + return "ERR"; + + static const char str[4][4] = {"dB0","dB2","dB4","dB6"}; + return str[value]; +} +static const char* SIB2preambleInitialReceivedTargetPower( long value ) +{ + static char temp[8] = {0}; + + if (value < 0 || value > 15) + return "ERR"; + + snprintf( temp, sizeof(temp), "dBm-%ld", 120 - value*2 ); + temp[7] = 0; // terminate string + return temp; +} +static const char* SIB2preambleTransMax( long value ) +{ + static char temp[5] = {0}; + + if (value < 0 || value > 10) + return "ERR"; + + if (value <= 5) { + snprintf( temp, sizeof(temp), "n%ld", value+3 ); + return temp; + } + + switch (value) { + case 6: + return "n10"; + + case 7: + return "n20"; + + case 8: + return "n50"; + + case 9: + return "n100"; + + case 10: + return "n200"; + } +} +static const char* SIB2ra_ResponseWindowSize( long value ) +{ + static char temp[4] = {0}; + + if (value < 0 || value > 7) + return "ERR"; + + if (value == 7) + return "sf10"; + + snprintf( temp, sizeof(temp), "sf%ld", value+2 ); + return temp; +} +static const char* SIB2mac_ContentionResolutionTimer( long value ) +{ + static char temp[5] = {0}; + + if (value < 0 || value > 7) + return "ERR"; + + snprintf( temp, sizeof(temp), "sf%ld", 8 + value*8 ); + return temp; +} +static const char* SIB2modificationPeriodCoeff( long value ) +{ + static char temp[4] = {0}; + + if (value < 0 || value > 3) + return "ERR"; + + snprintf( temp, sizeof(temp), "n%d", (int)pow(2,value+1) ); + return temp; +} +static const char* SIB2defaultPagingCycle( long value ) +{ + static char temp[6] = {0}; + + if (value < 0 || value > 3) + return "ERR"; + + snprintf( temp, sizeof(temp), "rf%d", (int)pow(2,value+4) ); + return temp; +} +static const char* SIB2nB( long value ) +{ + if (value < 0 || value > 7) + return "ERR"; + + static const char str[8][17] = {"fourT","twoT","oneT","halfT","quarterT","oneEigthT","oneSixteenthT","oneThirtySecondT"}; + return str[value]; +} + + + + //----------------------------------------------------------------------------- -int -decode_BCCH_DLSCH_Message( +int decode_BCCH_DLSCH_Message( const protocol_ctxt_t* const ctxt_pP, const uint8_t eNB_index, uint8_t* const Sdu, const uint8_t Sdu_len, const uint8_t rsrq, - const uint8_t rsrp -) -//----------------------------------------------------------------------------- + const uint8_t rsrp ) { + BCCH_DL_SCH_Message_t *bcch_message = NULL; + SystemInformationBlockType1_t* sib1 = UE_rrc_inst[ctxt_pP->module_id].sib1[eNB_index]; + int i; - //BCCH_DL_SCH_Message_t bcch_message; - BCCH_DL_SCH_Message_t *bcch_message=NULL;//_ptr=&bcch_message; - SystemInformationBlockType1_t** sib1=&UE_rrc_inst[ctxt_pP->module_id].sib1[eNB_index]; - SystemInformation_t** si=UE_rrc_inst[ctxt_pP->module_id].si[eNB_index]; - asn_dec_rval_t dec_rval; - uint32_t si_window;//, sib1_decoded=0, si_decoded=0; - // int i; + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_UE_DECODE_BCCH, VCD_FUNCTION_IN ); - VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_DECODE_BCCH, VCD_FUNCTION_IN); - - - if ((UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIB1Status == 1) && - (UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIStatus == 1)) { - // Avoid decoding to prevent memory bloating - VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_DECODE_BCCH, VCD_FUNCTION_OUT); + if (((UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIStatus&1) == 1) && // SIB1 received + (UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIcnt == sib1->schedulingInfoList.list.count)) { + // Avoid decoding SystemInformationBlockType1_t* sib1 = UE_rrc_inst[ctxt_pP->module_id].sib1[eNB_index]; + // to prevent memory bloating + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_UE_DECODE_BCCH, VCD_FUNCTION_OUT ); return 0; - } else { + } - rrc_set_sub_state (ctxt_pP->module_id, RRC_SUB_STATE_IDLE_RECEIVING_SIB); + rrc_set_sub_state( ctxt_pP->module_id, RRC_SUB_STATE_IDLE_RECEIVING_SIB ); - //memset(&bcch_message,0,sizeof(BCCH_DL_SCH_Message_t)); + asn_dec_rval_t dec_rval = uper_decode_complete( NULL, + &asn_DEF_BCCH_DL_SCH_Message, + (void **)&bcch_message, + (const void *)Sdu, + Sdu_len ); - /*LOG_D(RRC,"[UE %d] Decoding DL_BCCH_DLSCH_Message\n",ue_mod_idP);*/ - - dec_rval = uper_decode_complete(NULL, - &asn_DEF_BCCH_DL_SCH_Message, - (void **)&bcch_message, - (const void *)Sdu, - Sdu_len);//,0,0); - - if ((dec_rval.code != RC_OK) && (dec_rval.consumed==0)) { - LOG_E(RRC,"[UE %d] Failed to decode BCCH_DLSCH_MESSAGE (%d bits)\n", - ctxt_pP->module_id, - dec_rval.consumed); - //free the memory - SEQUENCE_free(&asn_DEF_BCCH_DL_SCH_Message, (void*)bcch_message, 1); - VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_DECODE_BCCH, VCD_FUNCTION_OUT); - return -1; - } - - // xer_fprint(stdout, &asn_DEF_BCCH_DL_SCH_Message, (void*)&bcch_message); + if ((dec_rval.code != RC_OK) && (dec_rval.consumed == 0)) { + LOG_E( RRC, "[UE %"PRIu8"] Failed to decode BCCH_DLSCH_MESSAGE (%zu bits)\n", + ctxt_pP->module_id, + dec_rval.consumed ); + for (i=0;iittiMsg, (void *) bcch_message, sizeof(RrcDlBcchMessage)); + + itti_send_msg_to_task (TASK_UNKNOWN, ctxt_pP->instance, msg_p); + } +# else + { + char message_string[15000]; + size_t message_string_size; + + if ((message_string_size = xer_sprint(message_string, sizeof(message_string), &asn_DEF_BCCH_DL_SCH_Message, (void *)bcch_message)) > 0) { MessageDef *msg_p; - msg_p = itti_alloc_new_message (TASK_RRC_UE, RRC_DL_BCCH_MESSAGE); - memcpy (&msg_p->ittiMsg, (void *) bcch_message, sizeof(RrcDlBcchMessage)); + msg_p = itti_alloc_new_message_sized (TASK_RRC_UE, RRC_DL_BCCH, message_string_size + sizeof (IttiMsgText)); + msg_p->ittiMsg.rrc_dl_bcch.size = message_string_size; + memcpy(&msg_p->ittiMsg.rrc_dl_bcch.text, message_string, message_string_size); - itti_send_msg_to_task (TASK_UNKNOWN, ctxt_pP->instance, msg_p); - } -# else - { - char message_string[15000]; - size_t message_string_size; - - if ((message_string_size = xer_sprint(message_string, sizeof(message_string), &asn_DEF_BCCH_DL_SCH_Message, (void *)bcch_message)) > 0) { - MessageDef *msg_p; - - msg_p = itti_alloc_new_message_sized (TASK_RRC_UE, RRC_DL_BCCH, message_string_size + sizeof (IttiMsgText)); - msg_p->ittiMsg.rrc_dl_bcch.size = message_string_size; - memcpy(&msg_p->ittiMsg.rrc_dl_bcch.text, message_string, message_string_size); - - itti_send_msg_to_task(TASK_UNKNOWN, ctxt_pP->instance, msg_p); - } + itti_send_msg_to_task(TASK_UNKNOWN, ctxt_pP->instance, msg_p); } + } # endif #endif - if (bcch_message->message.present == BCCH_DL_SCH_MessageType_PR_c1) { - switch (bcch_message->message.choice.c1.present) { - case BCCH_DL_SCH_MessageType__c1_PR_systemInformationBlockType1: - if ((ctxt_pP->frame %2) == 0) { - if (UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIB1Status == 0) { - memcpy((void*)*sib1, - (void*)&bcch_message->message.choice.c1.choice.systemInformationBlockType1, - sizeof(SystemInformationBlockType1_t)); - LOG_D(RRC,"[UE %d] Decoding First SIB1\n",ctxt_pP->module_id); - decode_SIB1(ctxt_pP, eNB_index, rsrq, rsrp); - //mac_xface->macphy_exit("after decode_SIB1"); - } + if (bcch_message->message.present == BCCH_DL_SCH_MessageType_PR_c1) { + switch (bcch_message->message.choice.c1.present) { + case BCCH_DL_SCH_MessageType__c1_PR_systemInformationBlockType1: + if ((ctxt_pP->frame % 2) == 0) { + // even frame + if ((UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIStatus&1) == 0) { + SystemInformationBlockType1_t* sib1 = UE_rrc_inst[ctxt_pP->module_id].sib1[eNB_index]; + memcpy( (void*)sib1, + (void*)&bcch_message->message.choice.c1.choice.systemInformationBlockType1, + sizeof(SystemInformationBlockType1_t) ); + LOG_D( RRC, "[UE %"PRIu8"] Decoding First SIB1\n", ctxt_pP->module_id ); + decode_SIB1( ctxt_pP, eNB_index, rsrq, rsrp ); } - - break; - - case BCCH_DL_SCH_MessageType__c1_PR_systemInformation: - if ((UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIB1Status == 1) && - (UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIStatus == 0)) { - // if ((frameP %8) == 1) { // check only in odd frames for SI - si_window = (ctxt_pP->frame%(UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIperiod/10))/ - (UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIwindowsize/10); - memcpy((void*)si[si_window], // FIXME check indexing (see line 219) - (void*)&bcch_message->message.choice.c1.choice.systemInformation, - sizeof(SystemInformation_t)); - LOG_D(RRC,"[UE %d] Decoding SI for frameP %d, si_window %d\n", - ctxt_pP->module_id, - ctxt_pP->frame, - si_window); - decode_SI(ctxt_pP,eNB_index,si_window); - //mac_xface->macphy_exit("after decode_SI"); - - // } - } - - break; - - case BCCH_DL_SCH_MessageType__c1_PR_NOTHING: - default: - break; } + + break; + + case BCCH_DL_SCH_MessageType__c1_PR_systemInformation: + if ((UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIStatus&1) == 1) { + // SIB1 with schedulingInfoList is available + + SystemInformation_t* si = UE_rrc_inst[ctxt_pP->module_id].si[eNB_index]; + memcpy( si, + &bcch_message->message.choice.c1.choice.systemInformation, + sizeof(SystemInformation_t) ); + + LOG_D( RRC, "[UE %"PRIu8"] Decoding SI for frameP %"PRIu32"\n", + ctxt_pP->module_id, + ctxt_pP->frame ); + + decode_SI( ctxt_pP, eNB_index ); + } + + break; + + case BCCH_DL_SCH_MessageType__c1_PR_NOTHING: + default: + break; } } if ((rrc_get_sub_state(ctxt_pP->module_id) == RRC_SUB_STATE_IDLE_SIB_COMPLETE) -# if defined(ENABLE_USE_MME) +#if defined(ENABLE_USE_MME) && (UE_rrc_inst[ctxt_pP->module_id].initialNasMsg.data != NULL) #endif ) { rrc_ue_generate_RRCConnectionRequest(ctxt_pP, 0); - LOG_I(RRC, "not sending connection request\n"); - rrc_set_sub_state (ctxt_pP->module_id, RRC_SUB_STATE_IDLE_CONNECTING); + rrc_set_sub_state( ctxt_pP->module_id, RRC_SUB_STATE_IDLE_CONNECTING ); } - /* if ((UE_rrc_inst[ue_mod_idP].Info[eNB_index].SIB1Status == 1) && - (UE_rrc_inst[ue_mod_idP].Info[eNB_index].SIStatus == 1) && (frameP >= ue_mod_idP * 20 + 10)) - SEQUENCE_free(&asn_DEF_BCCH_DL_SCH_Message, (void*)bcch_message, 0);*/ - VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_DECODE_BCCH, VCD_FUNCTION_OUT); + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_UE_DECODE_BCCH, VCD_FUNCTION_OUT ); return 0; } //----------------------------------------------------------------------------- -int -decode_SIB1( - const protocol_ctxt_t* const ctxt_pP, - const uint8_t eNB_index, - const uint8_t rsrq, - const uint8_t rsrp -) -//----------------------------------------------------------------------------- +static int decode_SIB1( const protocol_ctxt_t* const ctxt_pP, const uint8_t eNB_index, const uint8_t rsrq, const uint8_t rsrp ) { - SystemInformationBlockType1_t** sib1=&UE_rrc_inst[ctxt_pP->module_id].sib1[eNB_index]; - int i; - int mcc,mnc,mccdigits,mncdigits,tac=0; - PLMN_Identity_t *PLMN_identity; - int plmn_ind=0; + SystemInformationBlockType1_t* sib1 = UE_rrc_inst[ctxt_pP->module_id].sib1[eNB_index]; - VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_RRC_UE_DECODE_SIB1, VCD_FUNCTION_IN); + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_RRC_UE_DECODE_SIB1, VCD_FUNCTION_IN ); - LOG_I(RRC,"[UE %d] : Dumping SIB 1\n",ctxt_pP->module_id); + LOG_I( RRC, "[UE %d] : Dumping SIB 1\n", ctxt_pP->module_id ); - // xer_fprint(stdout,&asn_DEF_SystemInformationBlockType1, (void*)*sib1); - PLMN_identity = &(*sib1)->cellAccessRelatedInfo.plmn_IdentityList.list.array[0]->plmn_Identity; + PLMN_Identity_t *PLMN_identity = &sib1->cellAccessRelatedInfo.plmn_IdentityList.list.array[0]->plmn_Identity; - mccdigits = PLMN_identity->mcc->list.count; - mncdigits = PLMN_identity->mnc.list.count; + int mccdigits = PLMN_identity->mcc->list.count; + int mncdigits = PLMN_identity->mnc.list.count; + + int mcc; if (mccdigits == 2) { mcc = *PLMN_identity->mcc->list.array[0]*10 + *PLMN_identity->mcc->list.array[1]; @@ -2332,117 +2472,157 @@ decode_SIB1( mcc = *PLMN_identity->mcc->list.array[0]*100 + *PLMN_identity->mcc->list.array[1]*10 + *PLMN_identity->mcc->list.array[2]; } + int mnc; + if (mncdigits == 2) { mnc = *PLMN_identity->mnc.list.array[0]*10 + *PLMN_identity->mnc.list.array[1]; } else { mnc = *PLMN_identity->mnc.list.array[0]*100 + *PLMN_identity->mnc.list.array[1]*10 + *PLMN_identity->mnc.list.array[2]; } - if ((*sib1)->cellAccessRelatedInfo.trackingAreaCode.size == 2) { - tac = ((*sib1)->cellAccessRelatedInfo.trackingAreaCode.buf[0]<<8)+(*sib1)->cellAccessRelatedInfo.trackingAreaCode.buf[1]; + int tac = 0; + + if (sib1->cellAccessRelatedInfo.trackingAreaCode.size == 2) { + tac = (sib1->cellAccessRelatedInfo.trackingAreaCode.buf[0]<<8) + sib1->cellAccessRelatedInfo.trackingAreaCode.buf[1]; } - LOG_I(RRC,"PLMN MCC %d, MNC %d, TAC %x\n",mcc,mnc,tac); - plmn_ind = 0; + LOG_I( RRC, "PLMN MCC %0*d, MNC %0*d, TAC 0x%04x\n", mccdigits, mcc, mncdigits, mnc, tac ); + long cellReservedForOperatorUse = sib1->cellAccessRelatedInfo.plmn_IdentityList.list.array[0]->cellReservedForOperatorUse; + LOG_I( RRC, "cellReservedForOperatorUse : raw:%ld decoded:%s\n", cellReservedForOperatorUse, SIBreserved(cellReservedForOperatorUse) ); - while (plmn_data[plmn_ind].mcc>0) { - if ((plmn_data[plmn_ind].mcc == mcc) && (plmn_data[plmn_ind].mnc==mnc)) { - LOG_I(RRC,"Found %s\n", plmn_data[plmn_ind].oper_short); + // search internal table for provider name + int plmn_ind = 0; + + while (plmn_data[plmn_ind].mcc > 0) { + if ((plmn_data[plmn_ind].mcc == mcc) && (plmn_data[plmn_ind].mnc == mnc)) { + LOG_I( RRC, "Found %s (name from internal table)\n", plmn_data[plmn_ind].oper_short ); break; } plmn_ind++; } - if (plmn_data[plmn_ind].mcc<0) { - LOG_I(RRC,"Found Unknown operator\n"); + if (plmn_data[plmn_ind].mcc < 0) { + LOG_I( RRC, "Found Unknown operator (no entry in internal table)\n" ); } - LOG_I(RRC,"cellAccessRelatedInfo.cellIdentity : %x.%x.%x.%x\n", - (*sib1)->cellAccessRelatedInfo.cellIdentity.buf[0], - (*sib1)->cellAccessRelatedInfo.cellIdentity.buf[1], - (*sib1)->cellAccessRelatedInfo.cellIdentity.buf[2], - (*sib1)->cellAccessRelatedInfo.cellIdentity.buf[3]); + LOG_I( RRC, "cellAccessRelatedInfo.cellIdentity : raw:%"PRIu32" decoded:%02x.%02x.%02x.%02x\n", + BIT_STRING_to_uint32( &sib1->cellAccessRelatedInfo.cellIdentity ), + sib1->cellAccessRelatedInfo.cellIdentity.buf[0], + sib1->cellAccessRelatedInfo.cellIdentity.buf[1], + sib1->cellAccessRelatedInfo.cellIdentity.buf[2], + sib1->cellAccessRelatedInfo.cellIdentity.buf[3] >> sib1->cellAccessRelatedInfo.cellIdentity.bits_unused); - LOG_I(RRC,"cellSelectionInfo.q_RxLevMin : %d\n",(int)(*sib1)->cellSelectionInfo.q_RxLevMin); - LOG_I(RRC,"freqBandIndicator : %d\n",(int)(*sib1)->freqBandIndicator); - LOG_I(RRC,"siWindowLength : %s\n",siWindowLength[(*sib1)->si_WindowLength]); + long cellBarred = sib1->cellAccessRelatedInfo.cellBarred; + LOG_I( RRC, "cellAccessRelatedInfo.cellBarred : raw:%ld decoded:%s\n", cellBarred, SIBbarred(cellBarred) ); + long intraFreqReselection = sib1->cellAccessRelatedInfo.intraFreqReselection; + LOG_I( RRC, "cellAccessRelatedInfo.intraFreqReselection : raw:%ld decoded:%s\n", intraFreqReselection, SIBallowed(intraFreqReselection) ); + LOG_I( RRC, "cellAccessRelatedInfo.csg_Indication : %d\n", sib1->cellAccessRelatedInfo.csg_Indication ); - if ((*sib1)->schedulingInfoList.list.count>0) { - for (i=0; i<(*sib1)->schedulingInfoList.list.count; i++) { - LOG_I(RRC,"siSchedulingInfoPeriod[%d] : %s\n",i,SIBPeriod[(int)(*sib1)->schedulingInfoList.list.array[i]->si_Periodicity]); + if (sib1->cellAccessRelatedInfo.csg_Identity) + LOG_I( RRC, "cellAccessRelatedInfo.csg_Identity : %"PRIu32"\n", BIT_STRING_to_uint32(sib1->cellAccessRelatedInfo.csg_Identity) ); + else + LOG_I( RRC, "cellAccessRelatedInfo.csg_Identity : not defined\n" ); - if ((*sib1)->schedulingInfoList.list.array[i]->sib_MappingInfo.list.count>0) { - LOG_I(RRC,"siSchedulingInfoSIBType[%d] : %s\n",i,SIBType[(int)(*(*sib1)->schedulingInfoList.list.array[i]->sib_MappingInfo.list.array[0])]); + LOG_I( RRC, "cellSelectionInfo.q_RxLevMin : %ld\n", sib1->cellSelectionInfo.q_RxLevMin ); + + if (sib1->cellSelectionInfo.q_RxLevMinOffset) + LOG_I( RRC, "cellSelectionInfo.q_RxLevMinOffset : %ld\n", *sib1->cellSelectionInfo.q_RxLevMinOffset ); + else + LOG_I( RRC, "cellSelectionInfo.q_RxLevMinOffset : not defined\n" ); + + if (sib1->p_Max) + LOG_I( RRC, "p_Max : %ld\n", *sib1->p_Max ); + else + LOG_I( RRC, "p_Max : not defined\n" ); + + LOG_I( RRC, "freqBandIndicator : %ld\n", sib1->freqBandIndicator ); + + if (sib1->schedulingInfoList.list.count > 0) { + for (int i=0; ischedulingInfoList.list.count; i++) { + LOG_I( RRC, "si_Periodicity[%d] : %s\n", i, SIBPeriod[min(sib1->schedulingInfoList.list.array[i]->si_Periodicity,7)]); + + if (sib1->schedulingInfoList.list.array[i]->sib_MappingInfo.list.count > 0) { + char temp[32 * sizeof(SIBType[0])] = {0}; // maxSIB==32 + + for (int j=0; jschedulingInfoList.list.array[i]->sib_MappingInfo.list.count; j++) { + sprintf( temp + j*sizeof(SIBType[0]), "%*s ", (int)sizeof(SIBType[0])-1, SIBType[min(*sib1->schedulingInfoList.list.array[i]->sib_MappingInfo.list.array[0],11)] ); + } + + LOG_I( RRC, "siSchedulingInfoSIBType[%d] : %s\n", i, temp ); } else { - LOG_W(RRC,"mapping list %d is null\n",i); + LOG_I( RRC, "mapping list %d is null\n", i ); } } } else { - LOG_E(RRC,"siSchedulingInfoPeriod[0] : PROBLEM!!!\n"); + LOG_E( RRC, "siSchedulingInfoPeriod[0] : PROBLEM!!!\n" ); return -1; } - if ((*sib1)->tdd_Config) { - LOG_I(RRC,"TDD subframe assignment : %d\n",(int)(*sib1)->tdd_Config->subframeAssignment); - LOG_I(RRC,"S-Subframe Config : %d\n",(int)(*sib1)->tdd_Config->specialSubframePatterns); + if (sib1->tdd_Config) { + LOG_I( RRC, "TDD subframeAssignment : %ld\n", sib1->tdd_Config->subframeAssignment ); + LOG_I( RRC, "TDD specialSubframePatterns : %ld\n", sib1->tdd_Config->specialSubframePatterns ); } - UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIperiod = siPeriod_int[(*sib1)->schedulingInfoList.list.array[0]->si_Periodicity]; - UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIwindowsize = siWindowLength_int[(*sib1)->si_WindowLength]; - LOG_D(RRC, "[FRAME unknown][RRC_UE][MOD %02d][][--- MAC_CONFIG_REQ (SIB1 params eNB %d) --->][MAC_UE][MOD %02d][]\n", - ctxt_pP->module_id, eNB_index, ctxt_pP->module_id); - rrc_mac_config_req(ctxt_pP->module_id,ENB_FLAG_NO,0,eNB_index, - (RadioResourceConfigCommonSIB_t *)NULL, - (struct PhysicalConfigDedicated *)NULL, + LOG_I( RRC, "siWindowLength : %s\n", siWindowLength[min(sib1->si_WindowLength,7)] ); + LOG_I( RRC, "systemInfoValueTag : %ld\n", sib1->systemInfoValueTag ); + + UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIperiod = siPeriod_int[sib1->schedulingInfoList.list.array[0]->si_Periodicity]; + UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIwindowsize = siWindowLength_int[sib1->si_WindowLength]; + LOG_D( RRC, "[FRAME unknown][RRC_UE][MOD %02"PRIu8"][][--- MAC_CONFIG_REQ (SIB1 params eNB %"PRIu8") --->][MAC_UE][MOD %02"PRIu8"][]\n", + ctxt_pP->module_id, eNB_index, ctxt_pP->module_id ); + + rrc_mac_config_req(ctxt_pP->module_id, 0, ENB_FLAG_NO, 0, eNB_index, + (RadioResourceConfigCommonSIB_t *)NULL, + (struct PhysicalConfigDedicated *)NULL, #ifdef Rel10 - (SCellToAddMod_r10_t *)NULL, - //(struct PhysicalConfigDedicatedSCell_r10 *)NULL, + (SCellToAddMod_r10_t *)NULL, + //(struct PhysicalConfigDedicatedSCell_r10 *)NULL, #endif - (MeasObjectToAddMod_t **)NULL, - (MAC_MainConfig_t *)NULL, - 0, - (struct LogicalChannelConfig *)NULL, - (MeasGapConfig_t *)NULL, - UE_rrc_inst[ctxt_pP->module_id].sib1[eNB_index]->tdd_Config, - (MobilityControlInfo_t *) NULL, - &UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIwindowsize, - &UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIperiod, - NULL, - NULL, - NULL, - (MBSFN_SubframeConfigList_t *)NULL + (MeasObjectToAddMod_t **)NULL, + (MAC_MainConfig_t *)NULL, + 0, + (struct LogicalChannelConfig *)NULL, + (MeasGapConfig_t *)NULL, + UE_rrc_inst[ctxt_pP->module_id].sib1[eNB_index]->tdd_Config, + (MobilityControlInfo_t *) NULL, + &UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIwindowsize, + &UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIperiod, + NULL, + NULL, + NULL, + (MBSFN_SubframeConfigList_t *)NULL #ifdef Rel10 - ,0, - (MBSFN_AreaInfoList_r9_t *)NULL, - (PMCH_InfoList_r9_t *)NULL + ,0, + (MBSFN_AreaInfoList_r9_t *)NULL, + (PMCH_InfoList_r9_t *)NULL #endif #ifdef CBA - , - 0, - 0 + , + 0, + 0 #endif ); - UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIB1Status = 1; - UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIB1systemInfoValueTag = (*sib1)->systemInfoValueTag; + UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIStatus = 1; + UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIB1systemInfoValueTag = sib1->systemInfoValueTag; #if defined(ENABLE_ITTI) && defined(ENABLE_USE_MME) { int cell_valid = 0; - if ((*sib1)->cellAccessRelatedInfo.cellBarred == SystemInformationBlockType1__cellAccessRelatedInfo__cellBarred_notBarred) { + if (sib1->cellAccessRelatedInfo.cellBarred == SystemInformationBlockType1__cellAccessRelatedInfo__cellBarred_notBarred) { /* Cell is not barred */ int plmn; int plmn_number; - plmn_number = (*sib1)->cellAccessRelatedInfo.plmn_IdentityList.list.count; + plmn_number = sib1->cellAccessRelatedInfo.plmn_IdentityList.list.count; /* Compare requested PLMN and PLMNs from SIB1*/ for (plmn = 0; plmn < plmn_number; plmn++) { PLMN_Identity_t *plmn_Identity; - plmn_Identity = &(*sib1)->cellAccessRelatedInfo.plmn_IdentityList.list.array[plmn]->plmn_Identity; + plmn_Identity = &sib1->cellAccessRelatedInfo.plmn_IdentityList.list.array[plmn]->plmn_Identity; if ( ( @@ -2470,8 +2650,8 @@ decode_SIB1( msg_p = itti_alloc_new_message(TASK_RRC_UE, NAS_CELL_SELECTION_CNF); NAS_CELL_SELECTION_CNF (msg_p).errCode = AS_SUCCESS; - NAS_CELL_SELECTION_CNF (msg_p).cellID = BIT_STRING_to_uint32(&(*sib1)->cellAccessRelatedInfo.cellIdentity); - NAS_CELL_SELECTION_CNF (msg_p).tac = BIT_STRING_to_uint16(&(*sib1)->cellAccessRelatedInfo.trackingAreaCode); + NAS_CELL_SELECTION_CNF (msg_p).cellID = BIT_STRING_to_uint32(&sib1->cellAccessRelatedInfo.cellIdentity); + NAS_CELL_SELECTION_CNF (msg_p).tac = BIT_STRING_to_uint16(&sib1->cellAccessRelatedInfo.trackingAreaCode); NAS_CELL_SELECTION_CNF (msg_p).rat = 0xFF; NAS_CELL_SELECTION_CNF (msg_p).rsrq = rsrq; NAS_CELL_SELECTION_CNF (msg_p).rsrp = rsrp; @@ -2494,362 +2674,760 @@ decode_SIB1( } #endif - VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_RRC_UE_DECODE_SIB1, VCD_FUNCTION_OUT); - return 0; + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_RRC_UE_DECODE_SIB1, VCD_FUNCTION_OUT ); + return 0; } //----------------------------------------------------------------------------- -void -dump_sib2( - SystemInformationBlockType2_t *sib2 -) -//----------------------------------------------------------------------------- +static void dump_sib2( SystemInformationBlockType2_t *sib2 ) { + // ac_BarringInfo + if (sib2->ac_BarringInfo) { + LOG_I( RRC, "ac_BarringInfo->ac_BarringForEmergency : %d\n", + sib2->ac_BarringInfo->ac_BarringForEmergency ); - LOG_I(RRC,"radioResourceConfigCommon.rach_ConfigCommon.preambleInfo.numberOfRA_Preambles : %ld\n", - sib2->radioResourceConfigCommon.rach_ConfigCommon.preambleInfo.numberOfRA_Preambles); + if (sib2->ac_BarringInfo->ac_BarringForMO_Signalling) { + LOG_I( RRC, "ac_BarringInfo->ac_BarringForMO_Signalling->ac_BarringFactor : %ld\n", + sib2->ac_BarringInfo->ac_BarringForMO_Signalling->ac_BarringFactor ); + LOG_I( RRC, "ac_BarringInfo->ac_BarringForMO_Signalling->ac_BarringTime : %ld\n", + sib2->ac_BarringInfo->ac_BarringForMO_Signalling->ac_BarringTime ); + LOG_I( RRC, "ac_BarringInfo->ac_BarringForMO_Signalling->ac_BarringForSpecialAC : %"PRIu32"\n", + BIT_STRING_to_uint32(&sib2->ac_BarringInfo->ac_BarringForMO_Signalling->ac_BarringForSpecialAC) ); + } else + LOG_I( RRC, "ac_BarringInfo->ac_BarringForMO_Signalling : not defined\n" ); - // if (radioResourceConfigCommon.rach_ConfigCommon.preambleInfo.preamblesGroupAConfig) - //msg("radioResourceConfigCommon.rach_ConfigCommon.preambleInfo.preamblesGroupAConfig ",sib2->radioResourceConfigCommon.rach_ConfigCommon.preambleInfo.preamblesGroupAConfig = NULL; + if (sib2->ac_BarringInfo->ac_BarringForMO_Data) { + LOG_I( RRC, "ac_BarringInfo->ac_BarringForMO_Data->ac_BarringFactor : %ld\n", + sib2->ac_BarringInfo->ac_BarringForMO_Data->ac_BarringFactor ); + LOG_I( RRC, "ac_BarringInfo->ac_BarringForMO_Data->ac_BarringTime : %ld\n", + sib2->ac_BarringInfo->ac_BarringForMO_Data->ac_BarringTime ); + LOG_I( RRC, "ac_BarringInfo->ac_BarringForMO_Data->ac_BarringForSpecialAC : %"PRIu32"\n", + BIT_STRING_to_uint32(&sib2->ac_BarringInfo->ac_BarringForMO_Data->ac_BarringForSpecialAC) ); + } else + LOG_I( RRC, "ac_BarringInfo->ac_BarringForMO_Data : not defined\n" ); + } else + LOG_I( RRC, "ac_BarringInfo : not defined\n" ); - LOG_I(RRC,"[UE]radioResourceConfigCommon.rach_ConfigCommon.powerRampingParameters.powerRampingStep : %ld\n", - sib2->radioResourceConfigCommon.rach_ConfigCommon.powerRampingParameters.powerRampingStep); + // RACH + LOG_I( RRC, "radioResourceConfigCommon.rach_ConfigCommon.preambleInfo.numberOfRA_Preambles : raw:%ld decoded:%s\n", + sib2->radioResourceConfigCommon.rach_ConfigCommon.preambleInfo.numberOfRA_Preambles, + SIB2numberOfRA_Preambles(sib2->radioResourceConfigCommon.rach_ConfigCommon.preambleInfo.numberOfRA_Preambles) ); - LOG_I(RRC,"[UE]radioResourceConfigCommon.rach_ConfigCommon.powerRampingParameters.preambleInitialReceivedTargetPower : %ld\n", - sib2->radioResourceConfigCommon.rach_ConfigCommon.powerRampingParameters.preambleInitialReceivedTargetPower); + if (sib2->radioResourceConfigCommon.rach_ConfigCommon.preambleInfo.preamblesGroupAConfig) { + LOG_I( RRC, "radioResourceConfigCommon.rach_ConfigCommon.preambleInfo.preamblesGroupAConfig->sizeOfRA_PreamblesGroupA : %ld\n", + sib2->radioResourceConfigCommon.rach_ConfigCommon.preambleInfo.preamblesGroupAConfig->sizeOfRA_PreamblesGroupA ); + LOG_I( RRC, "radioResourceConfigCommon.rach_ConfigCommon.preambleInfo.preamblesGroupAConfig->messageSizeGroupA : %ld\n", + sib2->radioResourceConfigCommon.rach_ConfigCommon.preambleInfo.preamblesGroupAConfig->messageSizeGroupA ); + LOG_I( RRC, "radioResourceConfigCommon.rach_ConfigCommon.preambleInfo.preamblesGroupAConfig->messagePowerOffsetGroupB : %ld\n", + sib2->radioResourceConfigCommon.rach_ConfigCommon.preambleInfo.preamblesGroupAConfig->messagePowerOffsetGroupB ); + } else { + LOG_I( RRC, "radioResourceConfigCommon.rach_ConfigCommon.preambleInfo.preamblesGroupAConfig : not defined\n" ); + } - LOG_I(RRC,"radioResourceConfigCommon.rach_ConfigCommon.ra_SupervisionInfo.preambleTransMax : %ld\n", - sib2->radioResourceConfigCommon.rach_ConfigCommon.ra_SupervisionInfo.preambleTransMax); - LOG_I(RRC,"radioResourceConfigCommon.rach_ConfigCommon.ra_SupervisionInfo.ra_ResponseWindowSize : %ld\n", - sib2->radioResourceConfigCommon.rach_ConfigCommon.ra_SupervisionInfo.ra_ResponseWindowSize); + LOG_I( RRC, "radioResourceConfigCommon.rach_ConfigCommon.powerRampingParameters.powerRampingStep : raw:%ld decoded:%s\n", + sib2->radioResourceConfigCommon.rach_ConfigCommon.powerRampingParameters.powerRampingStep, + SIB2powerRampingStep(sib2->radioResourceConfigCommon.rach_ConfigCommon.powerRampingParameters.powerRampingStep) ); + LOG_I( RRC, "radioResourceConfigCommon.rach_ConfigCommon.powerRampingParameters.preambleInitialReceivedTargetPower : raw:%ld decoded:%s\n", + sib2->radioResourceConfigCommon.rach_ConfigCommon.powerRampingParameters.preambleInitialReceivedTargetPower, + SIB2preambleInitialReceivedTargetPower(sib2->radioResourceConfigCommon.rach_ConfigCommon.powerRampingParameters.preambleInitialReceivedTargetPower) ); - LOG_I(RRC,"radioResourceConfigCommon.rach_ConfigCommon.ra_SupervisionInfo.mac_ContentionResolutionTimer : %ld\n", - sib2->radioResourceConfigCommon.rach_ConfigCommon.ra_SupervisionInfo.mac_ContentionResolutionTimer); + LOG_I( RRC, "radioResourceConfigCommon.rach_ConfigCommon.ra_SupervisionInfo.preambleTransMax : raw:%ld decoded:%s\n", + sib2->radioResourceConfigCommon.rach_ConfigCommon.ra_SupervisionInfo.preambleTransMax, + SIB2preambleTransMax(sib2->radioResourceConfigCommon.rach_ConfigCommon.ra_SupervisionInfo.preambleTransMax) ); + LOG_I( RRC, "radioResourceConfigCommon.rach_ConfigCommon.ra_SupervisionInfo.ra_ResponseWindowSize : raw:%ld decoded:%s\n", + sib2->radioResourceConfigCommon.rach_ConfigCommon.ra_SupervisionInfo.ra_ResponseWindowSize, + SIB2ra_ResponseWindowSize(sib2->radioResourceConfigCommon.rach_ConfigCommon.ra_SupervisionInfo.ra_ResponseWindowSize) ); + LOG_I( RRC, "radioResourceConfigCommon.rach_ConfigCommon.ra_SupervisionInfo.mac_ContentionResolutionTimer : raw:%ld decoded:%s\n", + sib2->radioResourceConfigCommon.rach_ConfigCommon.ra_SupervisionInfo.mac_ContentionResolutionTimer, + SIB2mac_ContentionResolutionTimer(sib2->radioResourceConfigCommon.rach_ConfigCommon.ra_SupervisionInfo.mac_ContentionResolutionTimer) ); - LOG_I(RRC,"radioResourceConfigCommon.rach_ConfigCommon.maxHARQ_Msg3Tx : %ld\n", - sib2->radioResourceConfigCommon.rach_ConfigCommon.maxHARQ_Msg3Tx); + LOG_I( RRC, "radioResourceConfigCommon.rach_ConfigCommon.maxHARQ_Msg3Tx : %ld\n", + sib2->radioResourceConfigCommon.rach_ConfigCommon.maxHARQ_Msg3Tx ); - LOG_I(RRC,"radioResourceConfigCommon.prach_Config.rootSequenceIndex : %ld\n",sib2->radioResourceConfigCommon.prach_Config.rootSequenceIndex); - LOG_I(RRC,"radioResourceConfigCommon.prach_Config.prach_ConfigInfo.prach_ConfigIndex : %ld\n", - sib2->radioResourceConfigCommon.prach_Config.prach_ConfigInfo.prach_ConfigIndex); - LOG_I(RRC,"radioResourceConfigCommon.prach_Config.prach_ConfigInfo.highSpeedFlag : %d\n", - (int)sib2->radioResourceConfigCommon.prach_Config.prach_ConfigInfo.highSpeedFlag); - LOG_I(RRC,"radioResourceConfigCommon.prach_Config.prach_ConfigInfo.zeroCorrelationZoneConfig : %ld\n", - sib2->radioResourceConfigCommon.prach_Config.prach_ConfigInfo.zeroCorrelationZoneConfig); - LOG_I(RRC,"radioResourceConfigCommon.prach_Config.prach_ConfigInfo.prach_FreqOffset %ld\n", - sib2->radioResourceConfigCommon.prach_Config.prach_ConfigInfo.prach_FreqOffset); + // BCCH + LOG_I( RRC, "radioResourceConfigCommon.bcch_Config.modificationPeriodCoeff : raw:%ld decoded:%s\n", + sib2->radioResourceConfigCommon.bcch_Config.modificationPeriodCoeff, + SIB2modificationPeriodCoeff(sib2->radioResourceConfigCommon.bcch_Config.modificationPeriodCoeff) ); + + // PCCH + LOG_I( RRC, "radioResourceConfigCommon.pcch_Config.defaultPagingCycle : raw:%ld decoded:%s\n", + sib2->radioResourceConfigCommon.pcch_Config.defaultPagingCycle, + SIB2defaultPagingCycle(sib2->radioResourceConfigCommon.pcch_Config.defaultPagingCycle) ); + LOG_I( RRC, "radioResourceConfigCommon.pcch_Config.nB : raw:%ld decoded:%s\n", + sib2->radioResourceConfigCommon.pcch_Config.nB, + SIB2nB(sib2->radioResourceConfigCommon.pcch_Config.nB) ); + + // PRACH + LOG_I( RRC, "radioResourceConfigCommon.prach_Config.rootSequenceIndex : %ld\n", + sib2->radioResourceConfigCommon.prach_Config.rootSequenceIndex ); + LOG_I( RRC, "radioResourceConfigCommon.prach_Config.prach_ConfigInfo.prach_ConfigIndex : %ld\n", + sib2->radioResourceConfigCommon.prach_Config.prach_ConfigInfo.prach_ConfigIndex ); + LOG_I( RRC, "radioResourceConfigCommon.prach_Config.prach_ConfigInfo.highSpeedFlag : %d\n", + sib2->radioResourceConfigCommon.prach_Config.prach_ConfigInfo.highSpeedFlag ); + LOG_I( RRC, "radioResourceConfigCommon.prach_Config.prach_ConfigInfo.zeroCorrelationZoneConfig : %ld\n", + sib2->radioResourceConfigCommon.prach_Config.prach_ConfigInfo.zeroCorrelationZoneConfig ); + LOG_I( RRC, "radioResourceConfigCommon.prach_Config.prach_ConfigInfo.prach_FreqOffset : %ld\n", + sib2->radioResourceConfigCommon.prach_Config.prach_ConfigInfo.prach_FreqOffset ); // PDSCH-Config - LOG_I(RRC,"radioResourceConfigCommon.pdsch_ConfigCommon.referenceSignalPower : %ld\n",sib2->radioResourceConfigCommon.pdsch_ConfigCommon.referenceSignalPower); - LOG_I(RRC,"radioResourceConfigCommon.pdsch_ConfigCommon.p_b : %ld\n",sib2->radioResourceConfigCommon.pdsch_ConfigCommon.p_b); + LOG_I( RRC, "radioResourceConfigCommon.pdsch_ConfigCommon.referenceSignalPower : %ld\n", + sib2->radioResourceConfigCommon.pdsch_ConfigCommon.referenceSignalPower ); + LOG_I( RRC, "radioResourceConfigCommon.pdsch_ConfigCommon.p_b : %ld\n", + sib2->radioResourceConfigCommon.pdsch_ConfigCommon.p_b ); // PUSCH-Config - LOG_I(RRC,"radioResourceConfigCommon.pusch_ConfigCommon.pusch_ConfigBasic.n_SB : %ld\n", - sib2->radioResourceConfigCommon.pusch_ConfigCommon.pusch_ConfigBasic.n_SB); - LOG_I(RRC,"radioResourceConfigCommon.pusch_ConfigCommon.pusch_ConfigBasic.hoppingMode : %ld\n", - sib2->radioResourceConfigCommon.pusch_ConfigCommon.pusch_ConfigBasic.hoppingMode); - LOG_I(RRC,"radioResourceConfigCommon.pusch_ConfigCommon.pusch_ConfigBasic.pusch_HoppingOffset : %ld\n", - sib2->radioResourceConfigCommon.pusch_ConfigCommon.pusch_ConfigBasic.pusch_HoppingOffset); - LOG_I(RRC,"radioResourceConfigCommon.pusch_ConfigCommon.pusch_ConfigBasic.enable64QAM : %d\n", - (int)sib2->radioResourceConfigCommon.pusch_ConfigCommon.pusch_ConfigBasic.enable64QAM); - LOG_I(RRC,"radioResourceConfigCommon.pusch_ConfigCommon.ul_ReferenceSignalsPUSCH.groupHoppingEnabled : %d\n", - (int)sib2->radioResourceConfigCommon.pusch_ConfigCommon.ul_ReferenceSignalsPUSCH.groupHoppingEnabled); - LOG_I(RRC,"radioResourceConfigCommon.pusch_ConfigCommon.ul_ReferenceSignalsPUSCH.groupAssignmentPUSCH : %ld\n", - sib2->radioResourceConfigCommon.pusch_ConfigCommon.ul_ReferenceSignalsPUSCH.groupAssignmentPUSCH); - LOG_I(RRC,"radioResourceConfigCommon.pusch_ConfigCommon.ul_ReferenceSignalsPUSCH.sequenceHoppingEnabled : %d\n", - (int)sib2->radioResourceConfigCommon.pusch_ConfigCommon.ul_ReferenceSignalsPUSCH.sequenceHoppingEnabled); - LOG_I(RRC,"radioResourceConfigCommon.pusch_ConfigCommon.ul_ReferenceSignalsPUSCH.cyclicShift : %ld\n", - sib2->radioResourceConfigCommon.pusch_ConfigCommon.ul_ReferenceSignalsPUSCH.cyclicShift); + LOG_I( RRC, "radioResourceConfigCommon.pusch_ConfigCommon.pusch_ConfigBasic.n_SB : %ld\n", + sib2->radioResourceConfigCommon.pusch_ConfigCommon.pusch_ConfigBasic.n_SB ); + LOG_I( RRC, "radioResourceConfigCommon.pusch_ConfigCommon.pusch_ConfigBasic.hoppingMode : %ld\n", + sib2->radioResourceConfigCommon.pusch_ConfigCommon.pusch_ConfigBasic.hoppingMode ); + LOG_I( RRC, "radioResourceConfigCommon.pusch_ConfigCommon.pusch_ConfigBasic.pusch_HoppingOffset : %ld\n", + sib2->radioResourceConfigCommon.pusch_ConfigCommon.pusch_ConfigBasic.pusch_HoppingOffset ); + LOG_I( RRC, "radioResourceConfigCommon.pusch_ConfigCommon.pusch_ConfigBasic.enable64QAM : %d\n", + sib2->radioResourceConfigCommon.pusch_ConfigCommon.pusch_ConfigBasic.enable64QAM ); + LOG_I( RRC, "radioResourceConfigCommon.pusch_ConfigCommon.ul_ReferenceSignalsPUSCH.groupHoppingEnabled : %d\n", + sib2->radioResourceConfigCommon.pusch_ConfigCommon.ul_ReferenceSignalsPUSCH.groupHoppingEnabled ); + LOG_I( RRC, "radioResourceConfigCommon.pusch_ConfigCommon.ul_ReferenceSignalsPUSCH.groupAssignmentPUSCH : %ld\n", + sib2->radioResourceConfigCommon.pusch_ConfigCommon.ul_ReferenceSignalsPUSCH.groupAssignmentPUSCH ); + LOG_I( RRC, "radioResourceConfigCommon.pusch_ConfigCommon.ul_ReferenceSignalsPUSCH.sequenceHoppingEnabled : %d\n", + sib2->radioResourceConfigCommon.pusch_ConfigCommon.ul_ReferenceSignalsPUSCH.sequenceHoppingEnabled ); + LOG_I( RRC, "radioResourceConfigCommon.pusch_ConfigCommon.ul_ReferenceSignalsPUSCH.cyclicShift : %ld\n", + sib2->radioResourceConfigCommon.pusch_ConfigCommon.ul_ReferenceSignalsPUSCH.cyclicShift ); // PUCCH-Config + LOG_I( RRC, "radioResourceConfigCommon.pucch_ConfigCommon.deltaPUCCH_Shift : %ld\n", + sib2->radioResourceConfigCommon.pucch_ConfigCommon.deltaPUCCH_Shift ); + LOG_I( RRC, "radioResourceConfigCommon.pucch_ConfigCommon.nRB_CQI : %ld\n", + sib2->radioResourceConfigCommon.pucch_ConfigCommon.nRB_CQI ); + LOG_I( RRC, "radioResourceConfigCommon.pucch_ConfigCommon.nCS_AN : %ld\n", + sib2->radioResourceConfigCommon.pucch_ConfigCommon.nCS_AN ); + LOG_I( RRC, "radioResourceConfigCommon.pucch_ConfigCommon.n1PUCCH_AN : %ld\n", + sib2->radioResourceConfigCommon.pucch_ConfigCommon.n1PUCCH_AN ); - LOG_I(RRC,"radioResourceConfigCommon.pucch_ConfigCommon.deltaPUCCH_Shift : %ld\n",sib2->radioResourceConfigCommon.pucch_ConfigCommon.deltaPUCCH_Shift); - LOG_I(RRC,"radioResourceConfigCommon.pucch_ConfigCommon.nRB_CQI : %ld\n",sib2->radioResourceConfigCommon.pucch_ConfigCommon.nRB_CQI); - LOG_I(RRC,"radioResourceConfigCommon.pucch_ConfigCommon.nCS_AN : %ld\n",sib2->radioResourceConfigCommon.pucch_ConfigCommon.nCS_AN); - LOG_I(RRC,"radioResourceConfigCommon.pucch_ConfigCommon.n1PUCCH_AN : %ld\n",sib2->radioResourceConfigCommon.pucch_ConfigCommon.n1PUCCH_AN); - - LOG_I(RRC,"radioResourceConfigCommon.soundingRS_UL_ConfigCommon.present : %d\n",sib2-> radioResourceConfigCommon.soundingRS_UL_ConfigCommon.present); + // SoundingRS_UL_Config + LOG_I( RRC, "radioResourceConfigCommon.soundingRS_UL_ConfigCommon.present : raw:%d decoded:%s\n", + sib2->radioResourceConfigCommon.soundingRS_UL_ConfigCommon.present, + SIB2SoundingPresent(sib2->radioResourceConfigCommon.soundingRS_UL_ConfigCommon.present) ); + if (sib2->radioResourceConfigCommon.soundingRS_UL_ConfigCommon.present == SoundingRS_UL_ConfigCommon_PR_setup) { + LOG_I( RRC, "radioResourceConfigCommon.soundingRS_UL_ConfigCommon.choice.setup.srs_BandwidthConfig : %ld\n", + sib2->radioResourceConfigCommon.soundingRS_UL_ConfigCommon.choice.setup.srs_BandwidthConfig ); + LOG_I( RRC, "radioResourceConfigCommon.soundingRS_UL_ConfigCommon.choice.setup.srs_SubframeConfig : %ld\n", + sib2->radioResourceConfigCommon.soundingRS_UL_ConfigCommon.choice.setup.srs_SubframeConfig ); + LOG_I( RRC, "radioResourceConfigCommon.soundingRS_UL_ConfigCommon.choice.setup.ackNackSRS_SimultaneousTransmission : %d\n", + sib2->radioResourceConfigCommon.soundingRS_UL_ConfigCommon.choice.setup.ackNackSRS_SimultaneousTransmission ); + LOG_I( RRC, "radioResourceConfigCommon.soundingRS_UL_ConfigCommon.choice.setup.srs_MaxUpPts : %ld\n", + sib2->radioResourceConfigCommon.soundingRS_UL_ConfigCommon.choice.setup.srs_MaxUpPts ); + } // uplinkPowerControlCommon + LOG_I( RRC, "radioResourceConfigCommon.uplinkPowerControlCommon.p0_NominalPUSCH : %ld\n", + sib2->radioResourceConfigCommon.uplinkPowerControlCommon.p0_NominalPUSCH ); + LOG_I( RRC, "radioResourceConfigCommon.uplinkPowerControlCommon.alpha : %ld\n", + sib2->radioResourceConfigCommon.uplinkPowerControlCommon.alpha ); + LOG_I( RRC, "radioResourceConfigCommon.uplinkPowerControlCommon.p0_NominalPUCCH : %ld\n", + sib2->radioResourceConfigCommon.uplinkPowerControlCommon.p0_NominalPUCCH ); + LOG_I( RRC, "radioResourceConfigCommon.uplinkPowerControlCommon.deltaFList_PUCCH.deltaF_PUCCH_Format1 : %ld\n", + sib2->radioResourceConfigCommon.uplinkPowerControlCommon.deltaFList_PUCCH.deltaF_PUCCH_Format1 ); + LOG_I( RRC, "radioResourceConfigCommon.uplinkPowerControlCommon.deltaFList_PUCCH.deltaF_PUCCH_Format1b : %ld\n", + sib2->radioResourceConfigCommon.uplinkPowerControlCommon.deltaFList_PUCCH.deltaF_PUCCH_Format1b ); + LOG_I( RRC, "radioResourceConfigCommon.uplinkPowerControlCommon.deltaFList_PUCCH.deltaF_PUCCH_Format2 : %ld\n", + sib2->radioResourceConfigCommon.uplinkPowerControlCommon.deltaFList_PUCCH.deltaF_PUCCH_Format2 ); + LOG_I( RRC, "radioResourceConfigCommon.uplinkPowerControlCommon.deltaFList_PUCCH.deltaF_PUCCH_Format2a : %ld\n", + sib2->radioResourceConfigCommon.uplinkPowerControlCommon.deltaFList_PUCCH.deltaF_PUCCH_Format2a ); + LOG_I( RRC, "radioResourceConfigCommon.uplinkPowerControlCommon.deltaFList_PUCCH.deltaF_PUCCH_Format2b : %ld\n", + sib2->radioResourceConfigCommon.uplinkPowerControlCommon.deltaFList_PUCCH.deltaF_PUCCH_Format2b ); + LOG_I( RRC, "radioResourceConfigCommon.uplinkPowerControlCommon.deltaPreambleMsg3 : %ld\n", + sib2->radioResourceConfigCommon.uplinkPowerControlCommon.deltaPreambleMsg3 ); - LOG_I(RRC,"radioResourceConfigCommon.uplinkPowerControlCommon.p0_NominalPUSCH : %ld\n", - sib2->radioResourceConfigCommon.uplinkPowerControlCommon.p0_NominalPUSCH); - LOG_I(RRC,"radioResourceConfigCommon.uplinkPowerControlCommon.alpha : %ld\n",sib2->radioResourceConfigCommon.uplinkPowerControlCommon.alpha); - - LOG_I(RRC,"radioResourceConfigCommon.uplinkPowerControlCommon.p0_NominalPUCCH : %ld\n", - sib2->radioResourceConfigCommon.uplinkPowerControlCommon.p0_NominalPUCCH); - LOG_I(RRC,"radioResourceConfigCommon.uplinkPowerControlCommon.deltaFList_PUCCH.deltaF_PUCCH_Format1 : %ld\n", - sib2->radioResourceConfigCommon.uplinkPowerControlCommon.deltaFList_PUCCH.deltaF_PUCCH_Format1); - LOG_I(RRC,"radioResourceConfigCommon.uplinkPowerControlCommon.deltaFList_PUCCH.deltaF_PUCCH_Format1b :%ld\n", - sib2->radioResourceConfigCommon.uplinkPowerControlCommon.deltaFList_PUCCH.deltaF_PUCCH_Format1b); - LOG_I(RRC,"radioResourceConfigCommon.uplinkPowerControlCommon.deltaFList_PUCCH.deltaF_PUCCH_Format2 :%ld\n", - sib2->radioResourceConfigCommon.uplinkPowerControlCommon.deltaFList_PUCCH.deltaF_PUCCH_Format2); - LOG_I(RRC,"radioResourceConfigCommon.uplinkPowerControlCommon.deltaFList_PUCCH.deltaF_PUCCH_Format2a :%ld\n", - sib2->radioResourceConfigCommon.uplinkPowerControlCommon.deltaFList_PUCCH.deltaF_PUCCH_Format2a); - LOG_I(RRC,"radioResourceConfigCommon.uplinkPowerControlCommon.deltaFList_PUCCH.deltaF_PUCCH_Format2b :%ld\n", - sib2->radioResourceConfigCommon.uplinkPowerControlCommon.deltaFList_PUCCH.deltaF_PUCCH_Format2b); - - LOG_I(RRC,"radioResourceConfigCommon.uplinkPowerControlCommon.deltaPreambleMsg3 : %ld\n", - sib2->radioResourceConfigCommon.uplinkPowerControlCommon.deltaPreambleMsg3); - - LOG_I(RRC,"radioResourceConfigCommon.ul_CyclicPrefixLength : %ld\n", sib2->radioResourceConfigCommon.ul_CyclicPrefixLength); - - LOG_I(RRC,"ue_TimersAndConstants.t300 : %ld\n", sib2->ue_TimersAndConstants.t300); - LOG_I(RRC,"ue_TimersAndConstants.t301 : %ld\n", sib2->ue_TimersAndConstants.t301); - LOG_I(RRC,"ue_TimersAndConstants.t310 : %ld\n", sib2->ue_TimersAndConstants.t310); - LOG_I(RRC,"ue_TimersAndConstants.n310 : %ld\n", sib2->ue_TimersAndConstants.n310); - LOG_I(RRC,"ue_TimersAndConstants.t311 : %ld\n", sib2->ue_TimersAndConstants.t311); - LOG_I(RRC,"ue_TimersAndConstants.n311 : %ld\n", sib2->ue_TimersAndConstants.n311); - - LOG_I(RRC,"freqInfo.additionalSpectrumEmission : %ld\n",sib2->freqInfo.additionalSpectrumEmission); - LOG_I(RRC,"freqInfo.ul_CarrierFreq : %p\n", sib2->freqInfo.ul_CarrierFreq); - LOG_I(RRC,"freqInfo.ul_Bandwidth : %p\n", sib2->freqInfo.ul_Bandwidth); - LOG_I(RRC,"mbsfn_SubframeConfigList : %p\n", sib2->mbsfn_SubframeConfigList); - LOG_I(RRC,"timeAlignmentTimerCommon : %ld\n", sib2->timeAlignmentTimerCommon); -} - -//----------------------------------------------------------------------------- -void -dump_sib3( - SystemInformationBlockType3_t *sib3 -) -//----------------------------------------------------------------------------- -{ - -} + LOG_I( RRC, "radioResourceConfigCommon.ul_CyclicPrefixLength : %ld\n", + sib2->radioResourceConfigCommon.ul_CyclicPrefixLength ); #ifdef Rel10 + // UplinkPowerControlCommon_v1020 + // ... +#endif + + LOG_I( RRC, "ue_TimersAndConstants.t300 : %ld\n", sib2->ue_TimersAndConstants.t300 ); + LOG_I( RRC, "ue_TimersAndConstants.t301 : %ld\n", sib2->ue_TimersAndConstants.t301 ); + LOG_I( RRC, "ue_TimersAndConstants.t310 : %ld\n", sib2->ue_TimersAndConstants.t310 ); + LOG_I( RRC, "ue_TimersAndConstants.n310 : %ld\n", sib2->ue_TimersAndConstants.n310 ); + LOG_I( RRC, "ue_TimersAndConstants.t311 : %ld\n", sib2->ue_TimersAndConstants.t311 ); + LOG_I( RRC, "ue_TimersAndConstants.n311 : %ld\n", sib2->ue_TimersAndConstants.n311 ); + + if (sib2->freqInfo.ul_CarrierFreq) + LOG_I( RRC, "freqInfo.ul_CarrierFreq : %ld\n", *sib2->freqInfo.ul_CarrierFreq ); + else + LOG_I( RRC, "freqInfo.ul_CarrierFreq : not defined\n" ); + + if (sib2->freqInfo.ul_Bandwidth) + LOG_I( RRC, "freqInfo.ul_Bandwidth : %ld\n", *sib2->freqInfo.ul_Bandwidth ); + else + LOG_I( RRC, "freqInfo.ul_Bandwidth : not defined\n" ); + + LOG_I( RRC, "freqInfo.additionalSpectrumEmission : %ld\n", sib2->freqInfo.additionalSpectrumEmission ); + + if (sib2->mbsfn_SubframeConfigList) { + LOG_I( RRC, "mbsfn_SubframeConfigList : %p\n", sib2->mbsfn_SubframeConfigList ); + // FIXME + } else + LOG_I( RRC, "mbsfn_SubframeConfigList : not defined\n" ); + + LOG_I( RRC, "timeAlignmentTimerCommon : %ld\n", sib2->timeAlignmentTimerCommon ); + +#ifdef Rel10 + + if (sib2->lateNonCriticalExtension) { + LOG_I( RRC, "lateNonCriticalExtension : %p\n", sib2->lateNonCriticalExtension ); + } else + LOG_I( RRC, "lateNonCriticalExtension : not defined\n" ); + + if (sib2->ext1 && sib2->ext1->ssac_BarringForMMTEL_Voice_r9) { + LOG_I( RRC, "ssac_BarringForMMTEL_Voice_r9->ac_BarringFactor : %ld\n", + sib2->ext1->ssac_BarringForMMTEL_Voice_r9->ac_BarringFactor ); + LOG_I( RRC, "ssac_BarringForMMTEL_Voice_r9->ac_BarringTime : %ld\n", + sib2->ext1->ssac_BarringForMMTEL_Voice_r9->ac_BarringTime ); + LOG_I( RRC, "ssac_BarringForMMTEL_Voice_r9->ac_BarringForSpecialAC : %"PRIu32"\n", + BIT_STRING_to_uint32(&sib2->ext1->ssac_BarringForMMTEL_Voice_r9->ac_BarringForSpecialAC) ); + } else + LOG_I( RRC, "ssac_BarringForMMTEL_Voice_r9 : not defined\n" ); + + if (sib2->ext1 && sib2->ext1->ssac_BarringForMMTEL_Video_r9) { + LOG_I( RRC, "ssac_BarringForMMTEL_Video_r9->ac_BarringFactor : %ld\n", + sib2->ext1->ssac_BarringForMMTEL_Video_r9->ac_BarringFactor ); + LOG_I( RRC, "ssac_BarringForMMTEL_Video_r9->ac_BarringTime : %ld\n", + sib2->ext1->ssac_BarringForMMTEL_Video_r9->ac_BarringTime ); + LOG_I( RRC, "ssac_BarringForMMTEL_Video_r9->ac_BarringForSpecialAC : %"PRIu32"\n", + BIT_STRING_to_uint32(&sib2->ext1->ssac_BarringForMMTEL_Video_r9->ac_BarringForSpecialAC) ); + } else + LOG_I( RRC, "ssac_BarringForMMTEL_Video_r9 : not defined\n" ); + + if (sib2->ext2 && sib2->ext2->ac_BarringForCSFB_r10) { + LOG_I( RRC, "ac_BarringForCSFB_r10->ac_BarringFactor : %ld\n", + sib2->ext2->ac_BarringForCSFB_r10->ac_BarringFactor ); + LOG_I( RRC, "ac_BarringForCSFB_r10->ac_BarringTime : %ld\n", + sib2->ext2->ac_BarringForCSFB_r10->ac_BarringTime ); + LOG_I( RRC, "ac_BarringForCSFB_r10->ac_BarringForSpecialAC : %"PRIu32"\n", + BIT_STRING_to_uint32(&sib2->ext2->ac_BarringForCSFB_r10->ac_BarringForSpecialAC) ); + } else + LOG_I( RRC, "ac_BarringForCSFB_r10 : not defined\n" ); + +#endif +} + //----------------------------------------------------------------------------- -void -dump_sib13( - SystemInformationBlockType13_r9_t *sib13 -) -//----------------------------------------------------------------------------- +static void dump_sib3( SystemInformationBlockType3_t *sib3 ) { + LOG_I( RRC, "Dumping SIB3 (see TS36.331 V8.21.0)\n" ); - LOG_D(RRC,"[RRC][UE] Dumping SIB13\n"); - LOG_D(RRC,"[RRC][UE] dumping sib13 second time\n"); - LOG_D(RRC,"[RRC][UE] NotificationRepetitionCoeff-r9 : %ld\n", sib13->notificationConfig_r9.notificationRepetitionCoeff_r9); - LOG_D(RRC,"[RRC][UE] NotificationOffset-r9 : %d\n", (int)sib13->notificationConfig_r9.notificationOffset_r9); - LOG_D(RRC,"[RRC][UE] NotificationSF-Index-r9 : %d\n", (int)sib13->notificationConfig_r9.notificationSF_Index_r9); + int q_Hyst_dB = sib3->cellReselectionInfoCommon.q_Hyst; // sib3->cellReselectionInfoCommon.q_Hyst is a enumerated value + if (q_Hyst_dB > 6) + q_Hyst_dB = (q_Hyst_dB-6) * 2 + 6; + + LOG_I( RRC, "cellReselectionInfoCommon.q_Hyst : raw:%ld decoded:%d dB\n", sib3->cellReselectionInfoCommon.q_Hyst, q_Hyst_dB ); + + if (sib3->cellReselectionInfoCommon.speedStateReselectionPars) { + LOG_I( RRC, "cellReselectionInfoCommon.speedStateReselectionPars->mobilityStateParameters.t_Evaluation : %ld\n", + sib3->cellReselectionInfoCommon.speedStateReselectionPars->mobilityStateParameters.t_Evaluation ); + LOG_I( RRC, "cellReselectionInfoCommon.speedStateReselectionPars->mobilityStateParameters.t_HystNormal : %ld\n", + sib3->cellReselectionInfoCommon.speedStateReselectionPars->mobilityStateParameters.t_HystNormal ); + LOG_I( RRC, "cellReselectionInfoCommon.speedStateReselectionPars->mobilityStateParameters.n_CellChangeMedium : %ld\n", + sib3->cellReselectionInfoCommon.speedStateReselectionPars->mobilityStateParameters.n_CellChangeMedium ); + LOG_I( RRC, "cellReselectionInfoCommon.speedStateReselectionPars->mobilityStateParameters.n_CellChangeHigh : %ld\n", + sib3->cellReselectionInfoCommon.speedStateReselectionPars->mobilityStateParameters.n_CellChangeHigh ); + int q_HystSF_Medium = 6 - 2 * sib3->cellReselectionInfoCommon.speedStateReselectionPars->q_HystSF.sf_Medium; + int q_HystSF_High = 6 - 2 * sib3->cellReselectionInfoCommon.speedStateReselectionPars->q_HystSF.sf_High; + LOG_I( RRC, "cellReselectionInfoCommon.speedStateReselectionPars->q_HystSF.sf_Medium : raw:%ld decoded:%d dB\n", sib3->cellReselectionInfoCommon.speedStateReselectionPars->q_HystSF.sf_Medium, + q_HystSF_Medium ); + LOG_I( RRC, "cellReselectionInfoCommon.speedStateReselectionPars->q_HystSF.sf_High : raw:%ld decoded:%d dB\n", sib3->cellReselectionInfoCommon.speedStateReselectionPars->q_HystSF.sf_High, + q_HystSF_High ); + } else { + LOG_I( RRC, "cellReselectionInfoCommon.speedStateReselectionPars : not defined\n" ); + } + + if (sib3->cellReselectionServingFreqInfo.s_NonIntraSearch) { + LOG_I( RRC, "cellReselectionServingFreqInfo.s_NonIntraSearch : %ld\n", *(sib3->cellReselectionServingFreqInfo.s_NonIntraSearch) ); + } else { + LOG_I( RRC, "cellReselectionServingFreqInfo.s_NonIntraSearch : not defined\n" ); + } + + LOG_I( RRC, "cellReselectionServingFreqInfo.threshServingLow : %ld\n", sib3->cellReselectionServingFreqInfo.threshServingLow ); + LOG_I( RRC, "cellReselectionServingFreqInfo.cellReselectionPriority : %ld\n", sib3->cellReselectionServingFreqInfo.cellReselectionPriority ); + + LOG_I( RRC, "intraFreqCellReselectionInfo.q_RxLevMin : %ld\n", sib3->intraFreqCellReselectionInfo.q_RxLevMin ); + + if (sib3->intraFreqCellReselectionInfo.p_Max) { + LOG_I( RRC, "intraFreqCellReselectionInfo.p_Max : %ld\n", *(sib3->intraFreqCellReselectionInfo.p_Max) ); + } else { + LOG_I( RRC, "intraFreqCellReselectionInfo.p_Max : not defined\n" ); + } + + if (sib3->intraFreqCellReselectionInfo.s_IntraSearch) { + LOG_I( RRC, "intraFreqCellReselectionInfo.s_IntraSearch : %ld\n", *(sib3->intraFreqCellReselectionInfo.s_IntraSearch) ); + } else { + LOG_I( RRC, "intraFreqCellReselectionInfo.s_IntraSearch : not defined\n" ); + } + + if (sib3->intraFreqCellReselectionInfo.allowedMeasBandwidth) { + LOG_I( RRC, "intraFreqCellReselectionInfo.allowedMeasBandwidth : %ld\n", *(sib3->intraFreqCellReselectionInfo.allowedMeasBandwidth) ); + } else { + LOG_I( RRC, "intraFreqCellReselectionInfo.allowedMeasBandwidth : not defined\n" ); + } + + LOG_I( RRC, "intraFreqCellReselectionInfo.presenceAntennaPort1 : %d\n", sib3->intraFreqCellReselectionInfo.presenceAntennaPort1 ); + LOG_I( RRC, "intraFreqCellReselectionInfo.neighCellConfig : %"PRIu8"\n", BIT_STRING_to_uint8( &(sib3->intraFreqCellReselectionInfo.neighCellConfig) ) ); + LOG_I( RRC, "intraFreqCellReselectionInfo.t_ReselectionEUTRA : %ld\n", sib3->intraFreqCellReselectionInfo.t_ReselectionEUTRA ); + + if (sib3->intraFreqCellReselectionInfo.t_ReselectionEUTRA_SF) { + LOG_I( RRC, "intraFreqCellReselectionInfo.t_ReselectionEUTRA_SF->sf_Medium : %ld\n", sib3->intraFreqCellReselectionInfo.t_ReselectionEUTRA_SF->sf_Medium ); + LOG_I( RRC, "intraFreqCellReselectionInfo.t_ReselectionEUTRA_SF->sf_High : %ld\n", sib3->intraFreqCellReselectionInfo.t_ReselectionEUTRA_SF->sf_High ); + } else { + LOG_I( RRC, "intraFreqCellReselectionInfo.t_ReselectionEUTRA_SF : not defined\n" ); + } +} + +int Qoffsettab[31] = {-24,-22,-20,-18,-16,-14,-12,-10,-8,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,8,10,12,14,16,18,20,22,24}; +int PhysCellIdRange[16] = {4,8,12,16,24,32,48,64,84,96,128,168,252,504,0,0}; + +uint64_t arfcn_to_freq(long arfcn) { + + if (arfcn < 600) // Band 1 + return((uint64_t)2110000000 + (arfcn*100000)); + else if (arfcn <1200) // Band 2 + return((uint64_t)1930000000 + ((arfcn-600)*100000)); + else if (arfcn <1950) // Band 3 + return((uint64_t)1805000000 + ((arfcn-1200)*100000)); + else if (arfcn <2400) // Band 4 + return((uint64_t)2110000000 + ((arfcn-1950)*100000)); + else if (arfcn <2650) // Band 5 + return((uint64_t)869000000 + ((arfcn-2400)*100000)); + else if (arfcn <2750) // Band 6 + return((uint64_t)875000000 + ((arfcn-2650)*100000)); + else if (arfcn <3450) // Band 7 + return((uint64_t)2620000000 + ((arfcn-2750)*100000)); + else if (arfcn <3800) // Band 8 + return((uint64_t)925000000 + ((arfcn-3450)*100000)); + else if (arfcn <4150) // Band 9 + return((uint64_t)1844900000 + ((arfcn-3800)*100000)); + else if (arfcn <4650) // Band 10 + return((uint64_t)2110000000 + ((arfcn-4150)*100000)); + else if (arfcn <5010) // Band 11 + return((uint64_t)1475900000 + ((arfcn-4750)*100000)); + else if (arfcn <5180) // Band 12 + return((uint64_t)729000000 + ((arfcn-5010)*100000)); + else if (arfcn <5280) // Band 13 + return((uint64_t)746000000 + ((arfcn-5180)*100000)); + else if (arfcn <5730) // Band 14 + return((uint64_t)758000000 + ((arfcn-5280)*100000)); + else if (arfcn <5850) // Band 17 + return((uint64_t)734000000 + ((arfcn-5730)*100000)); + else if (arfcn <6000) // Band 18 + return((uint64_t)860000000 + ((arfcn-5850)*100000)); + else if (arfcn <6150) // Band 19 + return((uint64_t)875000000 + ((arfcn-6000)*100000)); + else if (arfcn <6450) // Band 20 + return((uint64_t)791000000 + ((arfcn-6150)*100000)); + else if (arfcn <6600) // Band 21 + return((uint64_t)1495900000 + ((arfcn-6450)*100000)); + else if (arfcn <7500) // Band 22 + return((uint64_t)351000000 + ((arfcn-6600)*100000)); + else if (arfcn <7700) // Band 23 + return((uint64_t)2180000000 + ((arfcn-7500)*100000)); + else if (arfcn <8040) // Band 24 + return((uint64_t)1525000000 + ((arfcn-7700)*100000)); + else if (arfcn <8690) // Band 25 + return((uint64_t)1930000000 + ((arfcn-8040)*100000)); + else if (arfcn <36200) // Band 33 + return((uint64_t)1900000000 + ((arfcn-36000)*100000)); + else if (arfcn <36350) // Band 34 + return((uint64_t)2010000000 + ((arfcn-36200)*100000)); + else if (arfcn <36950) // Band 35 + return((uint64_t)1850000000 + ((arfcn-36350)*100000)); + else if (arfcn <37550) // Band 36 + return((uint64_t)1930000000 + ((arfcn-36950)*100000)); + else if (arfcn <37750) // Band 37 + return((uint64_t)1910000000 + ((arfcn-37550)*100000)); + else if (arfcn <38250) // Band 38 + return((uint64_t)2570000000 + ((arfcn-37750)*100000)); + else if (arfcn <38650) // Band 39 + return((uint64_t)1880000000 + ((arfcn-38250)*100000)); + else if (arfcn <39650) // Band 40 + return((uint64_t)2300000000 + ((arfcn-38650)*100000)); + else if (arfcn <41590) // Band 41 + return((uint64_t)2496000000 + ((arfcn-39650)*100000)); + else if (arfcn <43590) // Band 42 + return((uint64_t)3400000000 + ((arfcn-41590)*100000)); + else if (arfcn <45590) // Band 43 + return((uint64_t)3600000000 + ((arfcn-43950)*100000)); + else + LOG_E(RRC,"Unknown EARFCN %d\n",arfcn); + +} +static void dump_sib5( SystemInformationBlockType5_t *sib5 ) +{ + InterFreqCarrierFreqList_t interFreqCarrierFreqList = sib5->interFreqCarrierFreqList; + int i,j; + InterFreqCarrierFreqInfo_t *ifcfInfo; + + LOG_I( RRC, "Dumping SIB5 (see TS36.331 V8.21.0)\n" ); + + for (i=0;idl_CarrierFreq), + ifcfInfo->dl_CarrierFreq); + LOG_I(RRC," Q_RXLevMin : %d\n", ifcfInfo->q_RxLevMin); + LOG_I(RRC," P_max : %d\n",ifcfInfo->p_Max); + LOG_I(RRC," T_ReselectionEUTRA : %d\n",ifcfInfo->t_ReselectionEUTRA); + if (ifcfInfo->t_ReselectionEUTRA_SF) { + LOG_I(RRC," t_ReselectionEUTRA_SF.sf_Medium %d, t_ReselectionEUTRA_SF.sf_High %d", + ifcfInfo->t_ReselectionEUTRA_SF->sf_Medium, + ifcfInfo->t_ReselectionEUTRA_SF->sf_High); + } + LOG_I(RRC," threshX_High : %d\n",ifcfInfo->threshX_High); + LOG_I(RRC," threshX_Low : %d\n",ifcfInfo->threshX_Low); + switch(ifcfInfo->allowedMeasBandwidth) { + case AllowedMeasBandwidth_mbw6: + LOG_I(RRC," AllowedMeasBandwidth : 6\n"); + break; + case AllowedMeasBandwidth_mbw15: + LOG_I(RRC," AllowedMeasBandwidth : 15\n"); + break; + case AllowedMeasBandwidth_mbw25: + LOG_I(RRC," AllowedMeasBandwidth : 25\n"); + break; + case AllowedMeasBandwidth_mbw50: + LOG_I(RRC," AllowedMeasBandwidth : 50\n"); + break; + case AllowedMeasBandwidth_mbw75: + LOG_I(RRC," AllowedMeasBandwidth : 75\n"); + break; + case AllowedMeasBandwidth_mbw100: + LOG_I(RRC," AllowedMeasBandwidth : 100\n"); + break; + } + if (ifcfInfo->presenceAntennaPort1) + LOG_I(RRC," PresenceAntennaPort1 : True\n"); + else + LOG_I(RRC," PresenceAntennaPort1 : False\n"); + if (ifcfInfo->cellReselectionPriority) { + LOG_I(RRC," CellReselectionPriority : %d\n", + *ifcfInfo->cellReselectionPriority); + } + LOG_I(RRC," NeighCellConfig : "); + for (j=0;jneighCellConfig.size;j++) { + printf("%2x ",ifcfInfo->neighCellConfig.buf[j]); + } + printf("\n"); + if (ifcfInfo->q_OffsetFreq) + LOG_I(RRC," Q_OffsetFreq : %d\n",Qoffsettab[*ifcfInfo->q_OffsetFreq]); + if (ifcfInfo->interFreqNeighCellList) { + + for (j=0;jinterFreqNeighCellList->list.count;j++) { + LOG_I(RRC," Cell %d\n"); + LOG_I(RRC," PhysCellId : %d\n",ifcfInfo->interFreqNeighCellList->list.array[j]->physCellId); + LOG_I(RRC," Q_OffsetRange : %d\n",ifcfInfo->interFreqNeighCellList->list.array[j]->q_OffsetCell); + + } + } + if (ifcfInfo->interFreqBlackCellList) { + + for (j=0;jinterFreqBlackCellList->list.count;j++) { + LOG_I(RRC," Cell %d\n"); + LOG_I(RRC," PhysCellId start: %d\n",ifcfInfo->interFreqBlackCellList->list.array[j]->start); + if (ifcfInfo->interFreqBlackCellList->list.array[i]->range) { + LOG_I(RRC," PhysCellId Range : %d\n",ifcfInfo->interFreqBlackCellList->list.array[j]->range); + } + } + } +#ifdef Rel10 + if (ifcfInfo->ext1 && ifcfInfo->ext1->q_QualMin_r9) + LOG_I(RRC," Q_QualMin_r9 : %d\n",*ifcfInfo->ext1->q_QualMin_r9); + + if (ifcfInfo->ext1 && ifcfInfo->ext1->threshX_Q_r9) { + LOG_I(RRC," threshX_HighQ_r9 : %d\n",ifcfInfo->ext1->threshX_Q_r9->threshX_HighQ_r9); + LOG_I(RRC," threshX_LowQ_r9: %d\n",ifcfInfo->ext1->threshX_Q_r9->threshX_LowQ_r9); + } +#endif + } + +} + +#ifdef Rel10 +static void dump_sib13( SystemInformationBlockType13_r9_t *sib13 ) +{ + LOG_I( RRC, "[UE] Dumping SIB13\n" ); + LOG_I( RRC, "[UE] dumping sib13 second time\n" ); + LOG_I( RRC, "[UE] NotificationRepetitionCoeff-r9 : %ld\n", sib13->notificationConfig_r9.notificationRepetitionCoeff_r9 ); + LOG_I( RRC, "[UE] NotificationOffset-r9 : %d\n", (int)sib13->notificationConfig_r9.notificationOffset_r9 ); + LOG_I( RRC, "[UE] NotificationSF-Index-r9 : %d\n", (int)sib13->notificationConfig_r9.notificationSF_Index_r9 ); } #endif -//const char SIBPeriod[7][7]= {"80ms\0","160ms\0","320ms\0","640ms\0","1280ms\0","2560ms\0","5120ms\0"}; - -//----------------------------------------------------------------------------- -int -decode_SI( - const protocol_ctxt_t* const ctxt_pP, - const uint8_t eNB_index, - const uint8_t si_window -) //----------------------------------------------------------------------------- +static int decode_SI( const protocol_ctxt_t* const ctxt_pP, const uint8_t eNB_index ) { - SystemInformation_t** si=&UE_rrc_inst[ctxt_pP->module_id].si[eNB_index][si_window]; - int i; - struct SystemInformation_r8_IEs__sib_TypeAndInfo__Member *typeandinfo; + SystemInformation_t** si = &UE_rrc_inst[ctxt_pP->module_id].si[eNB_index]; + int new_sib = 0; + SystemInformationBlockType1_t* sib1 = UE_rrc_inst[ctxt_pP->module_id].sib1[eNB_index]; - VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_RRC_UE_DECODE_SI , VCD_FUNCTION_IN); + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_RRC_UE_DECODE_SI, VCD_FUNCTION_IN ); // Dump contents - if ((*si)->criticalExtensions.present==SystemInformation__criticalExtensions_PR_systemInformation_r8) { - LOG_D(RRC,"(*si)->criticalExtensions.choice.systemInformation_r8.sib_TypeAndInfo.list.count %d\n", - (*si)->criticalExtensions.choice.systemInformation_r8.sib_TypeAndInfo.list.count); + if ((*si)->criticalExtensions.present == SystemInformation__criticalExtensions_PR_systemInformation_r8) { + LOG_D( RRC, "[UE] (*si)->criticalExtensions.choice.systemInformation_r8.sib_TypeAndInfo.list.count %d\n", + (*si)->criticalExtensions.choice.systemInformation_r8.sib_TypeAndInfo.list.count ); } else { - LOG_D(RRC,"[UE] Unknown criticalExtension version (not Rel8)\n"); + LOG_D( RRC, "[UE] Unknown criticalExtension version (not Rel8)\n" ); return -1; } - for (i=0; i<(*si)->criticalExtensions.choice.systemInformation_r8.sib_TypeAndInfo.list.count; i++) { - LOG_D(RRC,"SI count %d\n",i); - typeandinfo=(*si)->criticalExtensions.choice.systemInformation_r8.sib_TypeAndInfo.list.array[i]; + for (int i=0; i<(*si)->criticalExtensions.choice.systemInformation_r8.sib_TypeAndInfo.list.count; i++) { + LOG_D( RRC, "SI count %d\n", i ); + struct SystemInformation_r8_IEs__sib_TypeAndInfo__Member *typeandinfo; + typeandinfo = (*si)->criticalExtensions.choice.systemInformation_r8.sib_TypeAndInfo.list.array[i]; switch(typeandinfo->present) { case SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib2: - UE_rrc_inst[ctxt_pP->module_id].sib2[eNB_index] = &typeandinfo->choice.sib2; - LOG_D(RRC,"[UE %d] Frame %d Found SIB2 from eNB %d\n",ctxt_pP->module_id,ctxt_pP->frame,eNB_index); - dump_sib2(UE_rrc_inst[ctxt_pP->module_id].sib2[eNB_index]); - LOG_D(RRC, "[FRAME %05d][RRC_UE][MOD %02d][][--- MAC_CONFIG_REQ (SIB2 params eNB %d) --->][MAC_UE][MOD %02d][]\n", - ctxt_pP->frame, ctxt_pP->module_id, eNB_index, ctxt_pP->module_id); - rrc_mac_config_req(ctxt_pP->module_id,ENB_FLAG_NO,0,eNB_index, - &UE_rrc_inst[ctxt_pP->module_id].sib2[eNB_index]->radioResourceConfigCommon, - (struct PhysicalConfigDedicated *)NULL, + if ((UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIStatus&2) == 0) { + UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIStatus|=2; + new_sib=1; + memcpy( UE_rrc_inst[ctxt_pP->module_id].sib2[eNB_index], &typeandinfo->choice.sib2, sizeof(SystemInformationBlockType2_t) ); + LOG_I( RRC, "[UE %"PRIu8"] Frame %"PRIu32" Found SIB2 from eNB %"PRIu8"\n", ctxt_pP->module_id, ctxt_pP->frame, eNB_index ); + dump_sib2( UE_rrc_inst[ctxt_pP->module_id].sib2[eNB_index] ); + LOG_I( RRC, "[FRAME %05"PRIu32"][RRC_UE][MOD %02"PRIu8"][][--- MAC_CONFIG_REQ (SIB2 params eNB %"PRIu8") --->][MAC_UE][MOD %02"PRIu8"][]\n", + ctxt_pP->frame, ctxt_pP->module_id, eNB_index, ctxt_pP->module_id ); + rrc_mac_config_req(ctxt_pP->module_id, 0, ENB_FLAG_NO, 0, eNB_index, + &UE_rrc_inst[ctxt_pP->module_id].sib2[eNB_index]->radioResourceConfigCommon, + (struct PhysicalConfigDedicated *)NULL, #ifdef Rel10 - (SCellToAddMod_r10_t *)NULL, - //(struct PhysicalConfigDedicatedSCell_r10 *)NULL, + (SCellToAddMod_r10_t *)NULL, #endif - (MeasObjectToAddMod_t **)NULL, - (MAC_MainConfig_t *)NULL, - 0, - (struct LogicalChannelConfig *)NULL, - (MeasGapConfig_t *)NULL, - (TDD_Config_t *)NULL, - (MobilityControlInfo_t *)NULL, - NULL, - NULL, - UE_rrc_inst[ctxt_pP->module_id].sib2[eNB_index]->freqInfo.ul_CarrierFreq, - UE_rrc_inst[ctxt_pP->module_id].sib2[eNB_index]->freqInfo.ul_Bandwidth, - &UE_rrc_inst[ctxt_pP->module_id].sib2[eNB_index]->freqInfo.additionalSpectrumEmission, - UE_rrc_inst[ctxt_pP->module_id].sib2[eNB_index]->mbsfn_SubframeConfigList + (MeasObjectToAddMod_t **)NULL, + (MAC_MainConfig_t *)NULL, + 0, + (struct LogicalChannelConfig *)NULL, + (MeasGapConfig_t *)NULL, + (TDD_Config_t *)NULL, + (MobilityControlInfo_t *)NULL, + NULL, + NULL, + UE_rrc_inst[ctxt_pP->module_id].sib2[eNB_index]->freqInfo.ul_CarrierFreq, + UE_rrc_inst[ctxt_pP->module_id].sib2[eNB_index]->freqInfo.ul_Bandwidth, + &UE_rrc_inst[ctxt_pP->module_id].sib2[eNB_index]->freqInfo.additionalSpectrumEmission, + UE_rrc_inst[ctxt_pP->module_id].sib2[eNB_index]->mbsfn_SubframeConfigList #ifdef Rel10 - ,0, - (MBSFN_AreaInfoList_r9_t *)NULL, - (PMCH_InfoList_r9_t *)NULL + ,0, + (MBSFN_AreaInfoList_r9_t *)NULL, + (PMCH_InfoList_r9_t *)NULL #endif #ifdef CBA - ,0, - 0 + ,0, + 0 #endif - ); - UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIStatus = 1; - // After SI is received, prepare RRCConnectionRequest + ); + // After SI is received, prepare RRCConnectionRequest #ifdef Rel10 - if (UE_rrc_inst[ctxt_pP->module_id].MBMS_flag < 3) // see -Q option + if (UE_rrc_inst[ctxt_pP->module_id].MBMS_flag < 3) // see -Q option #endif #if !(defined(ENABLE_ITTI) && defined(ENABLE_USE_MME)) - rrc_ue_generate_RRCConnectionRequest(ctxt_pP,eNB_index); - - LOG_I(RRC, "not sending connection request\n"); + rrc_ue_generate_RRCConnectionRequest( ctxt_pP, eNB_index ); + #endif - - if (UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].State == RRC_IDLE) { - LOG_I(RRC,"[UE %d] Received SIB1/SIB2/SIB3 Switching to RRC_SI_RECEIVED\n",ctxt_pP->module_id); - UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].State = RRC_SI_RECEIVED; -#ifdef ENABLE_RAL - { - MessageDef *message_ral_p = NULL; - rrc_ral_system_information_ind_t ral_si_ind; - - message_ral_p = itti_alloc_new_message (TASK_RRC_UE, RRC_RAL_SYSTEM_INFORMATION_IND); - memset(&ral_si_ind, 0, sizeof(rrc_ral_system_information_ind_t)); - ral_si_ind.plmn_id.MCCdigit2 = '0'; - ral_si_ind.plmn_id.MCCdigit1 = '2'; - ral_si_ind.plmn_id.MNCdigit3 = '0'; - ral_si_ind.plmn_id.MCCdigit3 = '8'; - ral_si_ind.plmn_id.MNCdigit2 = '9'; - ral_si_ind.plmn_id.MNCdigit1 = '9'; - ral_si_ind.cell_id = 1; - ral_si_ind.dbm = 0; - //ral_si_ind.dbm = fifo_dump_emos_UE.PHY_measurements->rx_rssi_dBm[eNB_index]; - // TO DO - ral_si_ind.sinr = 0; - //ral_si_ind.sinr = fifo_dump_emos_UE.PHY_measurements->subband_cqi_dB[eNB_index][phy_vars_ue->lte_frame_parms.nb_antennas_rx][0]; - // TO DO - ral_si_ind.link_data_rate = 0; - memcpy (&message_ral_p->ittiMsg, (void *) &ral_si_ind, sizeof(rrc_ral_system_information_ind_t)); + + if (UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].State == RRC_IDLE) { + LOG_I( RRC, "[UE %d] Received SIB1/SIB2/SIB3 Switching to RRC_SI_RECEIVED\n", ctxt_pP->module_id ); + UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].State = RRC_SI_RECEIVED; +#if ENABLE_RAL + { + MessageDef *message_ral_p = NULL; + rrc_ral_system_information_ind_t ral_si_ind; + + message_ral_p = itti_alloc_new_message (TASK_RRC_UE, RRC_RAL_SYSTEM_INFORMATION_IND); + memset(&ral_si_ind, 0, sizeof(rrc_ral_system_information_ind_t)); + ral_si_ind.plmn_id.MCCdigit2 = '0'; + ral_si_ind.plmn_id.MCCdigit1 = '2'; + ral_si_ind.plmn_id.MNCdigit3 = '0'; + ral_si_ind.plmn_id.MCCdigit3 = '8'; + ral_si_ind.plmn_id.MNCdigit2 = '9'; + ral_si_ind.plmn_id.MNCdigit1 = '9'; + ral_si_ind.cell_id = 1; + ral_si_ind.dbm = 0; + //ral_si_ind.dbm = fifo_dump_emos_UE.PHY_measurements->rx_rssi_dBm[eNB_index]; + // TO DO + ral_si_ind.sinr = 0; + //ral_si_ind.sinr = fifo_dump_emos_UE.PHY_measurements->subband_cqi_dB[eNB_index][phy_vars_ue->lte_frame_parms.nb_antennas_rx][0]; + // TO DO + ral_si_ind.link_data_rate = 0; + memcpy (&message_ral_p->ittiMsg, (void *) &ral_si_ind, sizeof(rrc_ral_system_information_ind_t)); #warning "ue_mod_idP ? for instance ?" - itti_send_msg_to_task (TASK_RAL_UE, UE_MODULE_ID_TO_INSTANCE(ctxt_pP->module_id), message_ral_p); - } + itti_send_msg_to_task (TASK_RAL_UE, UE_MODULE_ID_TO_INSTANCE(ctxt_pP->module_id), message_ral_p); + } #endif + } + } + break; // case SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib2 + + case SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib3: + if ((UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIStatus&4) == 0) { + UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIStatus|=4; + new_sib=1; + memcpy( UE_rrc_inst[ctxt_pP->module_id].sib3[eNB_index], &typeandinfo->choice.sib3, sizeof(SystemInformationBlockType3_t) ); + LOG_I( RRC, "[UE %"PRIu8"] Frame %"PRIu32" Found SIB3 from eNB %"PRIu8"\n", ctxt_pP->module_id, ctxt_pP->frame, eNB_index ); + dump_sib3( UE_rrc_inst[ctxt_pP->module_id].sib3[eNB_index] ); + + } + break; + + case SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib4: + if ((UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIStatus&8) == 0) { + UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIStatus|=8; + new_sib=1; + memcpy( UE_rrc_inst[ctxt_pP->module_id].sib4[eNB_index], &typeandinfo->choice.sib4, sizeof(SystemInformationBlockType4_t) ); + LOG_I( RRC, "[UE %"PRIu8"] Frame %"PRIu32" Found SIB4 from eNB %"PRIu8"\n", ctxt_pP->module_id, ctxt_pP->frame, eNB_index ); } break; - case SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib3: - UE_rrc_inst[ctxt_pP->module_id].sib3[eNB_index] = &typeandinfo->choice.sib3; - LOG_I(RRC,"[UE %d] Frame %d Found SIB3 from eNB %d\n",ctxt_pP->module_id,ctxt_pP->frame,eNB_index); - dump_sib3(UE_rrc_inst[ctxt_pP->module_id].sib3[eNB_index]); - UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIStatus = 1; - rrc_set_sub_state (ctxt_pP->module_id, RRC_SUB_STATE_IDLE_SIB_COMPLETE); - break; - - case SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib4: - UE_rrc_inst[ctxt_pP->module_id].sib4[eNB_index] = &typeandinfo->choice.sib4; - LOG_I(RRC,"[UE %d] Frame %d Found SIB4 from eNB %d\n",ctxt_pP->module_id,ctxt_pP->frame,eNB_index); - break; - case SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib5: - UE_rrc_inst[ctxt_pP->module_id].sib5[eNB_index] = &typeandinfo->choice.sib5; - LOG_I(RRC,"[UE %d] Found SIB5 from eNB %d\n",ctxt_pP->module_id,eNB_index); + if ((UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIStatus&16) == 0) { + UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIStatus|=16; + new_sib=1; + + memcpy( UE_rrc_inst[ctxt_pP->module_id].sib5[eNB_index], &typeandinfo->choice.sib5, sizeof(SystemInformationBlockType5_t) ); + LOG_I( RRC, "[UE %"PRIu8"] Frame %"PRIu32" Found SIB5 from eNB %"PRIu8"\n", ctxt_pP->module_id, ctxt_pP->frame, eNB_index ); + dump_sib5(UE_rrc_inst[ctxt_pP->module_id].sib5[eNB_index]); + } break; case SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib6: - UE_rrc_inst[ctxt_pP->module_id].sib6[eNB_index] = &typeandinfo->choice.sib6; - LOG_I(RRC,"[UE %d] Found SIB6 from eNB %d\n",ctxt_pP->module_id,eNB_index); + if ((UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIStatus&32) == 0) { + UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIStatus|=32; + new_sib=1; + + memcpy( UE_rrc_inst[ctxt_pP->module_id].sib6[eNB_index], &typeandinfo->choice.sib6, sizeof(SystemInformationBlockType6_t) ); + LOG_I( RRC, "[UE %"PRIu8"] Frame %"PRIu32" Found SIB6 from eNB %"PRIu8"\n", ctxt_pP->module_id, ctxt_pP->frame, eNB_index ); + } break; case SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib7: - UE_rrc_inst[ctxt_pP->module_id].sib7[eNB_index] = &typeandinfo->choice.sib7; - LOG_I(RRC,"[UE %d] Found SIB7 from eNB %d\n",ctxt_pP->module_id,eNB_index); + if ((UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIStatus&64) == 0) { + UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIStatus|=64; + new_sib=1; + memcpy( UE_rrc_inst[ctxt_pP->module_id].sib7[eNB_index], &typeandinfo->choice.sib7, sizeof(SystemInformationBlockType7_t) ); + LOG_I( RRC, "[UE %"PRIu8"] Frame %"PRIu32" Found SIB7 from eNB %"PRIu8"\n", ctxt_pP->module_id, ctxt_pP->frame, eNB_index ); + } break; case SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib8: - UE_rrc_inst[ctxt_pP->module_id].sib8[eNB_index] = &typeandinfo->choice.sib8; - LOG_I(RRC,"[UE %d] Found SIB8 from eNB %d\n",ctxt_pP->module_id,eNB_index); + if ((UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIStatus&128) == 0) { + UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIStatus|=128; + new_sib=1; + memcpy( UE_rrc_inst[ctxt_pP->module_id].sib8[eNB_index], &typeandinfo->choice.sib8, sizeof(SystemInformationBlockType8_t) ); + LOG_I( RRC, "[UE %"PRIu8"] Frame %"PRIu32" Found SIB8 from eNB %"PRIu8"\n", ctxt_pP->module_id, ctxt_pP->frame, eNB_index ); + } break; case SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib9: - UE_rrc_inst[ctxt_pP->module_id].sib9[eNB_index] = &typeandinfo->choice.sib9; - LOG_I(RRC,"[UE %d] Found SIB9 from eNB %d\n",ctxt_pP->module_id,eNB_index); + if ((UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIStatus&256) == 0) { + UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIStatus|=256; + new_sib=1; + + memcpy( UE_rrc_inst[ctxt_pP->module_id].sib9[eNB_index], &typeandinfo->choice.sib9, sizeof(SystemInformationBlockType9_t) ); + LOG_I( RRC, "[UE %"PRIu8"] Frame %"PRIu32" Found SIB9 from eNB %"PRIu8"\n", ctxt_pP->module_id, ctxt_pP->frame, eNB_index ); + } break; case SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib10: - UE_rrc_inst[ctxt_pP->module_id].sib10[eNB_index] = &typeandinfo->choice.sib10; - LOG_I(RRC,"[UE %d] Found SIB10 from eNB %d\n",ctxt_pP->module_id,eNB_index); + if ((UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIStatus&512) == 0) { + UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIStatus|=512; + new_sib=1; + memcpy( UE_rrc_inst[ctxt_pP->module_id].sib10[eNB_index], &typeandinfo->choice.sib10, sizeof(SystemInformationBlockType10_t) ); + LOG_I( RRC, "[UE %"PRIu8"] Frame %"PRIu32" Found SIB10 from eNB %"PRIu8"\n", ctxt_pP->module_id, ctxt_pP->frame, eNB_index ); + } break; case SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib11: - UE_rrc_inst[ctxt_pP->module_id].sib11[eNB_index] = &typeandinfo->choice.sib11; - LOG_I(RRC,"[UE %d] Found SIB11 from eNB %d\n",ctxt_pP->module_id,eNB_index); + if ((UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIStatus&1024) == 0) { + UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIStatus|=1024; + new_sib=1; + + memcpy( UE_rrc_inst[ctxt_pP->module_id].sib11[eNB_index], &typeandinfo->choice.sib11, sizeof(SystemInformationBlockType11_t) ); + LOG_I( RRC, "[UE %"PRIu8"] Frame %"PRIu32" Found SIB11 from eNB %"PRIu8"\n", ctxt_pP->module_id, ctxt_pP->frame, eNB_index ); + } break; + #ifdef Rel10 case SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib12_v920: - UE_rrc_inst[ctxt_pP->module_id].sib12[eNB_index] = &typeandinfo->choice.sib12_v920; - LOG_I(RRC,"[RRC][UE %d] Found SIB12 from eNB %d\n",ctxt_pP->module_id,eNB_index); + if ((UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIStatus&2048) == 0) { + UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIStatus|=2048; + new_sib=1; + memcpy( UE_rrc_inst[ctxt_pP->module_id].sib12[eNB_index], &typeandinfo->choice.sib12_v920, sizeof(SystemInformationBlockType12_r9_t) ); + LOG_I( RRC, "[UE %"PRIu8"] Frame %"PRIu32" Found SIB12 from eNB %"PRIu8"\n", ctxt_pP->module_id, ctxt_pP->frame, eNB_index ); + } break; - + case SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib13_v920: - UE_rrc_inst[ctxt_pP->module_id].sib13[eNB_index] = &typeandinfo->choice.sib13_v920; - LOG_I(RRC,"[RRC][UE %d] Found SIB13 from eNB %d\n",ctxt_pP->module_id,eNB_index); - dump_sib13(UE_rrc_inst[ctxt_pP->module_id].sib13[eNB_index]); - // adding here function to store necessary parameters for using in decode_MCCH_Message + maybe transfer to PHY layer - LOG_D(RRC, "[FRAME %05d][RRC_UE][MOD %02d][][--- MAC_CONFIG_REQ (SIB13 params eNB %d) --->][MAC_UE][MOD %02d][]\n", - ctxt_pP->frame, ctxt_pP->module_id, eNB_index, ctxt_pP->module_id); - rrc_mac_config_req(ctxt_pP->module_id,ENB_FLAG_NO,0,eNB_index, - (RadioResourceConfigCommonSIB_t *)NULL, - (struct PhysicalConfigDedicated *)NULL, -#ifdef Rel10 - (SCellToAddMod_r10_t *)NULL, - //(struct PhysicalConfigDedicatedSCell_r10 *)NULL, -#endif - (MeasObjectToAddMod_t **)NULL, - (MAC_MainConfig_t *)NULL, - 0, - (struct LogicalChannelConfig *)NULL, - (MeasGapConfig_t *)NULL, - (TDD_Config_t *)NULL, - (MobilityControlInfo_t *)NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - (MBSFN_SubframeConfigList_t *)NULL - ,0, - &UE_rrc_inst[ctxt_pP->module_id].sib13[eNB_index]->mbsfn_AreaInfoList_r9, - (PMCH_InfoList_r9_t *)NULL + if ((UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIStatus&4096) == 0) { + UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIStatus|=4096; + new_sib=1; + + memcpy( UE_rrc_inst[ctxt_pP->module_id].sib13[eNB_index], &typeandinfo->choice.sib13_v920, sizeof(SystemInformationBlockType13_r9_t) ); + LOG_I( RRC, "[UE %"PRIu8"] Frame %"PRIu32" Found SIB13 from eNB %"PRIu8"\n", ctxt_pP->module_id, ctxt_pP->frame, eNB_index ); + dump_sib13( UE_rrc_inst[ctxt_pP->module_id].sib13[eNB_index] ); + // adding here function to store necessary parameters for using in decode_MCCH_Message + maybe transfer to PHY layer + LOG_D( RRC, "[FRAME %05"PRIu32"][RRC_UE][MOD %02"PRIu8"][][--- MAC_CONFIG_REQ (SIB13 params eNB %"PRIu8") --->][MAC_UE][MOD %02"PRIu8"][]\n", + ctxt_pP->frame, ctxt_pP->module_id, eNB_index, ctxt_pP->module_id); + rrc_mac_config_req(ctxt_pP->module_id,0,ENB_FLAG_NO,0,eNB_index, + (RadioResourceConfigCommonSIB_t *)NULL, + (struct PhysicalConfigDedicated *)NULL, + (SCellToAddMod_r10_t *)NULL, + (MeasObjectToAddMod_t **)NULL, + (MAC_MainConfig_t *)NULL, + 0, + (struct LogicalChannelConfig *)NULL, + (MeasGapConfig_t *)NULL, + (TDD_Config_t *)NULL, + (MobilityControlInfo_t *)NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + (MBSFN_SubframeConfigList_t *)NULL, + 0, + &UE_rrc_inst[ctxt_pP->module_id].sib13[eNB_index]->mbsfn_AreaInfoList_r9, + (PMCH_InfoList_r9_t *)NULL #ifdef CBA - ,0, - 0 + ,0, + 0 #endif - ); - UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIStatus = 1; - break; + ); + break; + } #endif - default: break; } } + if (new_sib == 1) { + UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIcnt++; + + if (UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIcnt == sib1->schedulingInfoList.list.count) + rrc_set_sub_state( ctxt_pP->module_id, RRC_SUB_STATE_IDLE_SIB_COMPLETE ); + + LOG_I(RRC,"SIStatus %x, SIcnt %d/%d\n", + UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIStatus, + UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIcnt, + sib1->schedulingInfoList.list.count); + } VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_RRC_UE_DECODE_SI , VCD_FUNCTION_OUT); return 0; @@ -2857,12 +3435,7 @@ decode_SI( // layer 3 filtering of RSRP (EUTRA) measurements: 36.331, Sec. 5.5.3.2 //----------------------------------------------------------------------------- -void -ue_meas_filtering( - const protocol_ctxt_t* const ctxt_pP, - const uint8_t eNB_index -) -//----------------------------------------------------------------------------- +void ue_meas_filtering( const protocol_ctxt_t* const ctxt_pP, const uint8_t eNB_index ) { float a = UE_rrc_inst[ctxt_pP->module_id].filter_coeff_rsrp; // 'a' in 36.331 Sec. 5.5.3.2 float a1 = UE_rrc_inst[ctxt_pP->module_id].filter_coeff_rsrq; @@ -2940,12 +3513,7 @@ ue_meas_filtering( //Below routine implements Measurement Reporting procedure from 36.331 Section 5.5.5 //----------------------------------------------------------------------------- -void -rrc_ue_generate_MeasurementReport( - const protocol_ctxt_t* const ctxt_pP, - uint8_t eNB_index -) -//----------------------------------------------------------------------------- +static void rrc_ue_generate_MeasurementReport( const protocol_ctxt_t* const ctxt_pP, uint8_t eNB_index ) { uint8_t buffer[32], size; @@ -3026,12 +3594,7 @@ rrc_ue_generate_MeasurementReport( // Measurement report triggering, described in 36.331 Section 5.5.4.1: called periodically //----------------------------------------------------------------------------- -void -ue_measurement_report_triggering( - const protocol_ctxt_t* const ctxt_pP, - const uint8_t eNB_index -) -//----------------------------------------------------------------------------- +void ue_measurement_report_triggering( const protocol_ctxt_t* const ctxt_pP, const uint8_t eNB_index ) { uint8_t i,j; Hysteresis_t hys; @@ -3143,8 +3706,7 @@ ue_measurement_report_triggering( //check_trigger_meas_event(ue_mod_idP, frameP, eNB_index, i,j,ofn,ocn,hys,ofs,ocs,a3_offset,ttt_ms) //----------------------------------------------------------------------------- -uint8_t -check_trigger_meas_event( +static uint8_t check_trigger_meas_event( module_id_t ue_mod_idP, frame_t frameP, uint8_t eNB_index, @@ -3156,9 +3718,7 @@ check_trigger_meas_event( Q_OffsetRange_t ofs, Q_OffsetRange_t ocs, long a3_offset, - TimeToTrigger_t ttt -) -//----------------------------------------------------------------------------- + TimeToTrigger_t ttt ) { uint8_t eNB_offset; uint8_t currentCellIndex = mac_xface->lte_frame_parms->Nid_cell; @@ -3213,15 +3773,7 @@ check_trigger_meas_event( #ifdef Rel10 //----------------------------------------------------------------------------- -int -decode_MCCH_Message( - const protocol_ctxt_t* const ctxt_pP, - const uint8_t eNB_index, - const uint8_t* const Sdu, - const uint8_t Sdu_len, - const uint8_t mbsfn_sync_area -) -//----------------------------------------------------------------------------- +int decode_MCCH_Message( const protocol_ctxt_t* const ctxt_pP, const uint8_t eNB_index, const uint8_t* const Sdu, const uint8_t Sdu_len, const uint8_t mbsfn_sync_area ) { MCCH_Message_t *mcch=NULL; @@ -3283,21 +3835,14 @@ decode_MCCH_Message( } //----------------------------------------------------------------------------- -void -decode_MBSFNAreaConfiguration( - module_id_t ue_mod_idP, - uint8_t eNB_index, - frame_t frameP, - uint8_t mbsfn_sync_area -) -//----------------------------------------------------------------------------- +static void decode_MBSFNAreaConfiguration( module_id_t ue_mod_idP, uint8_t eNB_index, frame_t frameP, uint8_t mbsfn_sync_area ) { protocol_ctxt_t ctxt; LOG_D(RRC,"[UE %d] Frame %d : Number of MCH(s) in the MBSFN Sync Area %d is %d\n", ue_mod_idP, frameP, mbsfn_sync_area, UE_rrc_inst[ue_mod_idP].mcch_message[eNB_index]->pmch_InfoList_r9.list.count); // store to MAC/PHY necessary parameters for receiving MTCHs - rrc_mac_config_req(ue_mod_idP,ENB_FLAG_NO,0,eNB_index, + rrc_mac_config_req(ue_mod_idP,0,ENB_FLAG_NO,0,eNB_index, (RadioResourceConfigCommonSIB_t *)NULL, (struct PhysicalConfigDedicated *)NULL, #ifdef Rel10 @@ -3368,11 +3913,7 @@ EXPORT_SYMBOL(Rlc_info_am_config); #if defined(ENABLE_ITTI) //----------------------------------------------------------------------------- -void -*rrc_ue_task( - void *args_p -) -//----------------------------------------------------------------------------- +void *rrc_ue_task( void *args_p ) { MessageDef *msg_p; const char *msg_name; @@ -3398,7 +3939,7 @@ void break; case MESSAGE_TEST: - LOG_I(RRC, "[UE %d] Received %s\n", ue_mod_id, msg_name); + LOG_D(RRC, "[UE %d] Received %s\n", ue_mod_id, msg_name); break; /* MAC messages */ @@ -3415,7 +3956,7 @@ void break; case RRC_MAC_OUT_OF_SYNC_IND: - LOG_I(RRC, "[UE %d] Received %s: frameP %d, eNB %d\n", ue_mod_id, msg_name, + LOG_D(RRC, "[UE %d] Received %s: frameP %d, eNB %d\n", ue_mod_id, msg_name, RRC_MAC_OUT_OF_SYNC_IND (msg_p).frame, RRC_MAC_OUT_OF_SYNC_IND (msg_p).enb_index); UE_rrc_inst[ue_mod_id].Info[RRC_MAC_OUT_OF_SYNC_IND (msg_p).enb_index].N310_cnt ++; @@ -3436,7 +3977,7 @@ void break; case RRC_MAC_CCCH_DATA_CNF: - LOG_I(RRC, "[UE %d] Received %s: eNB %d\n", ue_mod_id, msg_name, + LOG_D(RRC, "[UE %d] Received %s: eNB %d\n", ue_mod_id, msg_name, RRC_MAC_CCCH_DATA_CNF (msg_p).enb_index); // reset the tx buffer to indicate RRC that ccch was successfully transmitted (for example if contention resolution succeeds) @@ -3444,7 +3985,7 @@ void break; case RRC_MAC_CCCH_DATA_IND: - LOG_I(RRC, "[UE %d] RNTI %x Received %s: frameP %d, eNB %d\n", + LOG_D(RRC, "[UE %d] RNTI %x Received %s: frameP %d, eNB %d\n", ue_mod_id, RRC_MAC_CCCH_DATA_IND (msg_p).rnti, msg_name, @@ -3466,7 +4007,7 @@ void # ifdef Rel10 case RRC_MAC_MCCH_DATA_IND: - LOG_I(RRC, "[UE %d] Received %s: frameP %d, eNB %d, mbsfn SA %d\n", ue_mod_id, msg_name, + LOG_D(RRC, "[UE %d] Received %s: frameP %d, eNB %d, mbsfn SA %d\n", ue_mod_id, msg_name, RRC_MAC_MCCH_DATA_IND (msg_p).frame, RRC_MAC_MCCH_DATA_IND (msg_p).enb_index, RRC_MAC_MCCH_DATA_IND (msg_p).mbsfn_sync_area); //PROTOCOL_CTXT_SET_BY_INSTANCE(&ctxt, instance, ENB_FLAG_NO, M_RNTI, RRC_MAC_MCCH_DATA_IND (msg_p).frame, 0); @@ -3483,14 +4024,14 @@ void /* PDCP messages */ case RRC_DCCH_DATA_IND: PROTOCOL_CTXT_SET_BY_MODULE_ID(&ctxt, RRC_DCCH_DATA_IND (msg_p).module_id, ENB_FLAG_NO, RRC_DCCH_DATA_IND (msg_p).rnti, RRC_DCCH_DATA_IND (msg_p).frame, 0,RRC_DCCH_DATA_IND (msg_p).eNB_index); - LOG_I(RRC, "[UE %d] Received %s: frameP %d, DCCH %d, eNB %d\n", + LOG_D(RRC, "[UE %d] Received %s: frameP %d, DCCH %d, eNB %d\n", RRC_DCCH_DATA_IND (msg_p).module_id, msg_name, RRC_DCCH_DATA_IND (msg_p).frame, RRC_DCCH_DATA_IND (msg_p).dcch_index, RRC_DCCH_DATA_IND (msg_p).eNB_index); - LOG_I(RRC, PROTOCOL_RRC_CTXT_UE_FMT"Received %s DCCH %d, eNB %d\n", + LOG_D(RRC, PROTOCOL_RRC_CTXT_UE_FMT"Received %s DCCH %d, eNB %d\n", PROTOCOL_RRC_CTXT_UE_ARGS(&ctxt), msg_name, RRC_DCCH_DATA_IND (msg_p).dcch_index, @@ -3511,7 +4052,7 @@ void case NAS_CELL_SELECTION_REQ: ue_mod_id = 0; /* TODO force ue_mod_id to first UE, NAS UE not virtualized yet */ - LOG_I(RRC, "[UE %d] Received %s: state %d, plmnID %d, rat %x\n", ue_mod_id, msg_name, rrc_get_state(ue_mod_id), + LOG_D(RRC, "[UE %d] Received %s: state %d, plmnID %d, rat %x\n", ue_mod_id, msg_name, rrc_get_state(ue_mod_id), NAS_CELL_SELECTION_REQ (msg_p).plmnID, NAS_CELL_SELECTION_REQ (msg_p).rat); if (rrc_get_state(ue_mod_id) == RRC_STATE_INACTIVE) { @@ -3523,7 +4064,7 @@ void { UE_rrc_inst[ue_mod_id].plmnID = NAS_CELL_SELECTION_REQ (msg_p).plmnID; UE_rrc_inst[ue_mod_id].rat = NAS_CELL_SELECTION_REQ (msg_p).rat; - LOG_I(RRC, "[UE %d] Save cell selection criterion MCC %X%X%X MNC %X%X%X\n", + LOG_D(RRC, "[UE %d] Save cell selection criterion MCC %X%X%X MNC %X%X%X\n", ue_mod_id, UE_rrc_inst[ue_mod_id].plmnID.MCCdigit1, UE_rrc_inst[ue_mod_id].plmnID.MCCdigit2, @@ -3575,7 +4116,7 @@ void break; case NAS_CONN_ESTABLI_REQ: - LOG_I(RRC, "[UE %d] Received %s: cause %d, type %d, s_tmsi %d, plmnID %d\n", ue_mod_id, msg_name, NAS_CONN_ESTABLI_REQ (msg_p).cause, + LOG_D(RRC, "[UE %d] Received %s: cause %d, type %d, s_tmsi %d, plmnID %d\n", ue_mod_id, msg_name, NAS_CONN_ESTABLI_REQ (msg_p).cause, NAS_CONN_ESTABLI_REQ (msg_p).type, NAS_CONN_ESTABLI_REQ (msg_p).s_tmsi, NAS_CONN_ESTABLI_REQ (msg_p).plmnID); //PROTOCOL_CTXT_SET_BY_INSTANCE(&ctxt, instance, ENB_FLAG_NO, NOT_A_RNTI, 0, 0); @@ -3587,7 +4128,7 @@ void case RRC_STATE_IDLE: { if (rrc_get_sub_state(ue_mod_id) == RRC_SUB_STATE_IDLE_SIB_COMPLETE) { rrc_ue_generate_RRCConnectionRequest(&ctxt, 0); - LOG_I(RRC, "not sending connection request\n"); + LOG_D(RRC, "not sending connection request\n"); rrc_set_sub_state (ue_mod_id, RRC_SUB_STATE_IDLE_CONNECTING); } @@ -3612,7 +4153,7 @@ void uint32_t length; uint8_t *buffer; - LOG_I(RRC, "[UE %d] Received %s: UEid %d\n", ue_mod_id, msg_name, NAS_UPLINK_DATA_REQ (msg_p).UEid); + LOG_D(RRC, "[UE %d] Received %s: UEid %d\n", ue_mod_id, msg_name, NAS_UPLINK_DATA_REQ (msg_p).UEid); /* Create message for PDCP (ULInformationTransfer_t) */ length = do_ULInformationTransfer(&buffer, NAS_UPLINK_DATA_REQ (msg_p).nasMsg.length, NAS_UPLINK_DATA_REQ (msg_p).nasMsg.data); @@ -3630,10 +4171,10 @@ void # endif -# if defined(ENABLE_RAL) +# if ENABLE_RAL case RRC_RAL_SCAN_REQ: - LOG_I(RRC, "[UE %d] Received %s: state %d\n", ue_mod_id, msg_name); + LOG_D(RRC, "[UE %d] Received %s: state %d\n", ue_mod_id, msg_name); switch (rrc_get_state(ue_mod_id)) { case RRC_STATE_INACTIVE: { @@ -3680,7 +4221,7 @@ void break; case PHY_FIND_CELL_IND: - LOG_I(RRC, "[UE %d] Received %s: state %d\n", ue_mod_id, msg_name, rrc_get_state(ue_mod_id)); + LOG_D(RRC, "[UE %d] Received %s: state %d\n", ue_mod_id, msg_name, rrc_get_state(ue_mod_id)); switch (rrc_get_state(ue_mod_id)) { case RRC_STATE_IDLE: @@ -3744,7 +4285,7 @@ void &PHY_MEAS_REPORT_IND(msg_p).link_param, sizeof(RRC_RAL_MEASUREMENT_REPORT_IND (message_p).link_param)); - LOG_I(RRC, "[UE %d] PHY_MEAS_REPORT_IN: sending msg %s to %s \n", ue_mod_id, "RRC_RAL_MEASUREMENT_REPORT_IND", "TASK_RAL_UE"); + LOG_D(RRC, "[UE %d] PHY_MEAS_REPORT_IN: sending msg %s to %s \n", ue_mod_id, "RRC_RAL_MEASUREMENT_REPORT_IND", "TASK_RAL_UE"); itti_send_msg_to_task(TASK_RAL_UE, instance, message_p); break; } @@ -3754,14 +4295,14 @@ void break; case RRC_RAL_CONNECTION_ESTABLISHMENT_REQ: - LOG_I(RRC, "[UE %d] Received %s\n", ue_mod_id, msg_name); + LOG_D(RRC, "[UE %d] Received %s\n", ue_mod_id, msg_name); switch (rrc_get_state(ue_mod_id)) { case RRC_STATE_IDLE: { if (rrc_get_sub_state(ue_mod_id) == RRC_SUB_STATE_IDLE_SIB_COMPLETE) { PROTOCOL_CTXT_SET_BY_MODULE_ID(&ctxt, ue_mod_id, ENB_FLAG_NO, UE_rrc_inst[ue_mod_id].Info[0].rnti, 0, 0, 0); rrc_ue_generate_RRCConnectionRequest(&ctxt, 0); - LOG_I(RRC, "not sending connection request\n"); + LOG_D(RRC, "not sending connection request\n"); rrc_set_sub_state (ue_mod_id, RRC_SUB_STATE_IDLE_CONNECTING); } @@ -3783,7 +4324,7 @@ void case RRC_RAL_CONNECTION_RELEASE_REQ: ue_mod_id = 0; /* TODO force ue_mod_id to first UE, NAS UE not virtualized yet */ - LOG_I(RRC, "[UE %d] Received %s\n", ue_mod_id, msg_name); + LOG_D(RRC, "[UE %d] Received %s\n", ue_mod_id, msg_name); break; #endif diff --git a/openair2/RRC/LITE/rrc_common.c b/openair2/RRC/LITE/rrc_common.c index bf86d9024e..1d0e855a82 100644 --- a/openair2/RRC/LITE/rrc_common.c +++ b/openair2/RRC/LITE/rrc_common.c @@ -442,17 +442,19 @@ rrc_rx_tx( UE_rrc_inst[ctxt_pP->module_id].Info[enb_indexP].T300_cnt++; } - if (UE_rrc_inst[ctxt_pP->module_id].sib2[enb_indexP]) { + if ((UE_rrc_inst[ctxt_pP->module_id].Info[enb_indexP].SIStatus&2)>0) { if (UE_rrc_inst[ctxt_pP->module_id].Info[enb_indexP].N310_cnt == N310[UE_rrc_inst[ctxt_pP->module_id].sib2[enb_indexP]->ue_TimersAndConstants.n310]) { + LOG_I(RRC,"Activating T310\n"); UE_rrc_inst[ctxt_pP->module_id].Info[enb_indexP].T310_active = 1; } } else { // in case we have not received SIB2 yet - if (UE_rrc_inst[ctxt_pP->module_id].Info[enb_indexP].N310_cnt == 100) { + /* if (UE_rrc_inst[ctxt_pP->module_id].Info[enb_indexP].N310_cnt == 100) { UE_rrc_inst[ctxt_pP->module_id].Info[enb_indexP].N310_cnt = 0; - VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_RRC_RX_TX,VCD_FUNCTION_OUT); - return RRC_PHY_RESYNCH; - } + + }*/ + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_RRC_RX_TX,VCD_FUNCTION_OUT); + return RRC_OK; } if (UE_rrc_inst[ctxt_pP->module_id].Info[enb_indexP].T310_active == 1) { @@ -470,7 +472,8 @@ rrc_rx_tx( UE_rrc_inst[ctxt_pP->module_id].Info[enb_indexP].T310_active = 0; rrc_t310_expiration (ctxt_pP, enb_indexP); VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_RRC_RX_TX,VCD_FUNCTION_OUT); - return (RRC_PHY_RESYNCH); + LOG_I(RRC,"Returning RRC_PHY_RESYNCH: T310 expired\n"); + return RRC_PHY_RESYNCH; } UE_rrc_inst[ctxt_pP->module_id].Info[enb_indexP].T310_cnt++; diff --git a/openair2/RRC/LITE/rrc_eNB.c b/openair2/RRC/LITE/rrc_eNB.c index cd0661dcdd..47c6055c62 100644 --- a/openair2/RRC/LITE/rrc_eNB.c +++ b/openair2/RRC/LITE/rrc_eNB.c @@ -93,7 +93,7 @@ # include "intertask_interface.h" #endif -#ifdef ENABLE_RAL +#if ENABLE_RAL # include "rrc_eNB_ral.h" #endif @@ -328,7 +328,7 @@ init_SI( LOG_D(RRC, PROTOCOL_RRC_CTXT_FMT" RRC_UE --- MAC_CONFIG_REQ (SIB1.tdd & SIB2 params) ---> MAC_UE\n", PROTOCOL_RRC_CTXT_ARGS(ctxt_pP)); - rrc_mac_config_req(ctxt_pP->module_id, ENB_FLAG_YES, 0, 0, + rrc_mac_config_req(ctxt_pP->module_id, CC_id, ENB_FLAG_YES, 0, 0, (RadioResourceConfigCommonSIB_t *) & eNB_rrc_inst[ctxt_pP->module_id].carrier[CC_id].sib2->radioResourceConfigCommon, (struct PhysicalConfigDedicated *)NULL, @@ -378,7 +378,7 @@ init_MCCH( int sync_area = 0; // initialize RRC_eNB_INST MCCH entry eNB_rrc_inst[enb_mod_idP].carrier[CC_id].MCCH_MESSAGE = - malloc(eNB_rrc_inst[enb_mod_idP].carrier[CC_id].num_mbsfn_sync_area * sizeof(uint32_t *)); + malloc(eNB_rrc_inst[enb_mod_idP].carrier[CC_id].num_mbsfn_sync_area * sizeof(uint8_t*)); for (sync_area = 0; sync_area < eNB_rrc_inst[enb_mod_idP].carrier[CC_id].num_mbsfn_sync_area; sync_area++) { @@ -425,7 +425,7 @@ init_MCCH( // LOG_I(RRC, "DUY: serviceID is %d\n",eNB_rrc_inst[enb_mod_idP].mcch_message->pmch_InfoList_r9.list.array[0]->mbms_SessionInfoList_r9.list.array[0]->tmgi_r9.serviceId_r9.buf[2]); // LOG_I(RRC, "DUY: session ID is %d\n",eNB_rrc_inst[enb_mod_idP].mcch_message->pmch_InfoList_r9.list.array[0]->mbms_SessionInfoList_r9.list.array[0]->sessionId_r9->buf[0]); - rrc_mac_config_req(enb_mod_idP, ENB_FLAG_YES, 0, 0, + rrc_mac_config_req(enb_mod_idP, CC_id, ENB_FLAG_YES, 0, 0, (RadioResourceConfigCommonSIB_t *) NULL, (struct PhysicalConfigDedicated *)NULL, #ifdef Rel10 @@ -539,6 +539,23 @@ rrc_eNB_get_next_transaction_identifier( //} +//----------------------------------------------------------------------------- +// return 1 if there is already an UE with ue_identityP, 0 otherwise +static int +rrc_eNB_ue_context_random_exist( + const protocol_ctxt_t* const ctxt_pP, + const uint64_t ue_identityP +) +//----------------------------------------------------------------------------- +{ + struct rrc_eNB_ue_context_s* ue_context_p = NULL; + RB_FOREACH(ue_context_p, rrc_ue_tree_s, &(eNB_rrc_inst[ctxt_pP->module_id].rrc_ue_head)) { + if (ue_context_p->ue_context.random_ue_identity == ue_identityP) + return 1; + } + return 0; +} + //----------------------------------------------------------------------------- // return a new ue context structure if ue_identityP, ctxt_pP->rnti not found in collection static struct rrc_eNB_ue_context_s* @@ -745,6 +762,7 @@ rrc_eNB_free_mem_UE_context( //----------------------------------------------------------------------------- // called by MAC layer only +// should be called when UE is lost by eNB void rrc_eNB_free_UE( const module_id_t enb_mod_idP, @@ -779,11 +797,13 @@ rrc_eNB_free_UE( * procedure, see TS 23.401 [17]. */ #else +#if defined(OAI_EMU) AssertFatal(ue_context_p->local_uid < NUMBER_OF_UE_MAX, "local_uid invalid (%d<%d) for UE %x!", ue_context_p->local_uid, NUMBER_OF_UE_MAX, rntiP); ue_module_id = oai_emulation.info.eNB_ue_local_uid_to_ue_module_id[enb_mod_idP][ue_context_p->local_uid]; AssertFatal(ue_module_id < NUMBER_OF_UE_MAX, "ue_module_id invalid (%d<%d) for UE %x!", ue_module_id, NUMBER_OF_UE_MAX, rntiP); oai_emulation.info.eNB_ue_local_uid_to_ue_module_id[enb_mod_idP][ue_context_p->local_uid] = -1; oai_emulation.info.eNB_ue_module_id_to_rnti[enb_mod_idP][ue_module_id] = NOT_A_RNTI; +#endif #endif ue_context_p->ue_context.Status = RRC_IDLE; @@ -943,6 +963,49 @@ rrc_eNB_generate_UECapabilityEnquiry( } +//----------------------------------------------------------------------------- +void +rrc_eNB_generate_RRCConnectionReestablishmentReject( + const protocol_ctxt_t* const ctxt_pP, + rrc_eNB_ue_context_t* const ue_context_pP, + const int CC_id +) +//----------------------------------------------------------------------------- +{ +#ifdef RRC_MSG_PRINT + int cnt; +#endif + + eNB_rrc_inst[ctxt_pP->module_id].carrier[CC_id].Srb0.Tx_buffer.payload_size = + do_RRCConnectionReestablishmentReject(ctxt_pP->module_id, + (uint8_t*) eNB_rrc_inst[ctxt_pP->module_id].carrier[CC_id].Srb0.Tx_buffer.Payload); + +#ifdef RRC_MSG_PRINT + LOG_F(RRC,"[MSG] RRCConnectionReestablishmentReject\n"); + + for (cnt = 0; cnt < eNB_rrc_inst[ctxt_pP->module_id].carrier[CC_id].Srb0.Tx_buffer.payload_size; cnt++) { + LOG_F(RRC,"%02x ", ((uint8_t*)eNB_rrc_inst[ctxt_pP->module_id].Srb0.Tx_buffer.Payload)[cnt]); + } + + LOG_F(RRC,"\n"); +#endif + + MSC_LOG_TX_MESSAGE( + MSC_RRC_ENB, + MSC_RRC_UE, + eNB_rrc_inst[ctxt_pP->module_id].carrier[CC_id].Srb0.Tx_buffer.Header, + eNB_rrc_inst[ctxt_pP->module_id].carrier[CC_id].Srb0.Tx_buffer.payload_size, + MSC_AS_TIME_FMT" RRCConnectionReestablishmentReject UE %x size %u", + MSC_AS_TIME_ARGS(ctxt_pP), + ue_context_pP == NULL ? -1 : ue_context_pP->ue_context.rnti, + eNB_rrc_inst[ctxt_pP->module_id].carrier[CC_id].Srb0.Tx_buffer.payload_size); + + LOG_I(RRC, + PROTOCOL_RRC_CTXT_UE_FMT" [RAPROC] Logical Channel DL-CCCH, Generating RRCConnectionReestablishmentReject (bytes %d)\n", + PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP), + eNB_rrc_inst[ctxt_pP->module_id].carrier[CC_id].Srb0.Tx_buffer.payload_size); +} + //----------------------------------------------------------------------------- void rrc_eNB_generate_RRCConnectionRelease( @@ -1222,7 +1285,8 @@ rrc_eNB_generate_defaultRRCConnectionReconfiguration( #ifdef Rel10 sr_ProhibitTimer_r9 = CALLOC(1, sizeof(long)); *sr_ProhibitTimer_r9 = 0; // SR tx on PUCCH, Value in number of SR period(s). Value 0 = no timer for SR, Value 2= 2*SR - mac_MainConfig->sr_ProhibitTimer_r9 = sr_ProhibitTimer_r9; + mac_MainConfig->ext1 = CALLOC(1, sizeof(struct MAC_MainConfig__ext1)); + mac_MainConfig->ext1->sr_ProhibitTimer_r9 = sr_ProhibitTimer_r9; //sps_RA_ConfigList_rlola = NULL; #endif @@ -2215,6 +2279,7 @@ rrc_eNB_generate_RRCConnectionReconfiguration_handover( ctxt_pP->frame, ctxt_pP->module_id, ue_context_pP->ue_context.rnti, ctxt_pP->module_id); rrc_mac_config_req( ctxt_pP->module_id, + ue_context_pP->ue_context.primaryCC_id, ENB_FLAG_YES, ue_context_pP->ue_context.rnti, 0, @@ -2361,7 +2426,8 @@ rrc_eNB_generate_RRCConnectionReconfiguration_handover( #ifdef Rel10 sr_ProhibitTimer_r9 = CALLOC(1, sizeof(long)); *sr_ProhibitTimer_r9 = 0; // SR tx on PUCCH, Value in number of SR period(s). Value 0 = no timer for SR, Value 2= 2*SR - mac_MainConfig->sr_ProhibitTimer_r9 = sr_ProhibitTimer_r9; + mac_MainConfig->ext1 = CALLOC(1, sizeof(struct MAC_MainConfig__ext1)); + mac_MainConfig->ext1->sr_ProhibitTimer_r9 = sr_ProhibitTimer_r9; //sps_RA_ConfigList_rlola = NULL; #endif // Measurement ID list @@ -2785,6 +2851,7 @@ rrc_eNB_generate_RRCConnectionReconfiguration_handover( //pdcp_data_req (ctxt_pP->module_id, frameP, 1, (ue_mod_idP * NB_RB_MAX) + DCCH,rrc_eNB_mui++, 0, size, (char *) buffer, 1); rrc_mac_config_req( ctxt_pP->module_id, + ue_context_pP->ue_context.primaryCC_id, ENB_FLAG_YES, ue_context_pP->ue_context.rnti, 0, @@ -2897,7 +2964,7 @@ rrc_eNB_process_RRCConnectionReconfigurationComplete( ue_context_pP->ue_context.kenb, &kRRCint); #endif -#ifdef ENABLE_RAL +#if ENABLE_RAL { MessageDef *message_ral_p = NULL; rrc_ral_connection_reconfiguration_ind_t connection_reconfiguration_ind; @@ -3001,7 +3068,7 @@ rrc_eNB_process_RRCConnectionReconfigurationComplete( ctxt_pP->module_id, ctxt_pP->frame, (int)DRB_configList->list.array[i]->drb_Identity); #if defined(PDCP_USE_NETLINK) && !defined(LINK_ENB_PDCP_TO_GTPV1U) // can mean also IPV6 since ether -> ipv6 autoconf -# if !defined(OAI_NW_DRIVER_TYPE_ETHERNET) && !defined(EXMIMO) +# if !defined(OAI_NW_DRIVER_TYPE_ETHERNET) && !defined(EXMIMO) && !defined(OAI_USRP) && !defined(OAI_BLADERF) && !defined(ETHERNET) LOG_I(OIP, "[eNB %d] trying to bring up the OAI interface oai%d\n", ctxt_pP->module_id, ctxt_pP->module_id); @@ -3050,6 +3117,7 @@ rrc_eNB_process_RRCConnectionReconfigurationComplete( rrc_mac_config_req( ctxt_pP->module_id, + ue_context_pP->ue_context.primaryCC_id, ENB_FLAG_YES, ue_context_pP->ue_context.rnti, 0, @@ -3097,6 +3165,7 @@ rrc_eNB_process_RRCConnectionReconfigurationComplete( PROTOCOL_RRC_CTXT_UE_FMT" RRC_eNB --- MAC_CONFIG_REQ (DRB) ---> MAC_eNB\n", PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP)); rrc_mac_config_req(ctxt_pP->module_id, + ue_context_pP->ue_context.primaryCC_id, ENB_FLAG_YES, ue_context_pP->ue_context.rnti, 0, @@ -3186,6 +3255,7 @@ rrc_eNB_generate_RRCConnectionSetup( PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP)); rrc_mac_config_req( ctxt_pP->module_id, + ue_context_pP->ue_context.primaryCC_id, ENB_FLAG_YES, ue_context_pP->ue_context.rnti, 0, @@ -3289,16 +3359,22 @@ openair_rrc_lite_eNB_init( // } // } eNB_rrc_inst[ctxt.module_id].Nb_ue = 0; + for (CC_id = 0; CC_id < MAX_NUM_CCs; CC_id++) { eNB_rrc_inst[ctxt.module_id].carrier[CC_id].Srb0.Active = 0; } + uid_linear_allocator_init(&eNB_rrc_inst[ctxt.module_id].uid_allocator); RB_INIT(&eNB_rrc_inst[ctxt.module_id].rrc_ue_head); - RB_INIT(&eNB_rrc_inst[ctxt.module_id].rrc_rnti_head); // for (j = 0; j < (NUMBER_OF_UE_MAX + 1); j++) { // eNB_rrc_inst[enb_mod_idP].Srb2[j].Active = 0; // } + + eNB_rrc_inst[ctxt.module_id].initial_id2_s1ap_ids = hashtable_create (NUMBER_OF_UE_MAX * 2, NULL, NULL); + eNB_rrc_inst[ctxt.module_id].s1ap_id2_s1ap_ids = hashtable_create (NUMBER_OF_UE_MAX * 2, NULL, NULL); + + /// System Information INIT LOG_I(RRC, PROTOCOL_RRC_CTXT_FMT" Checking release \n", @@ -3334,6 +3410,7 @@ openair_rrc_lite_eNB_init( eNB_rrc_inst[ctxt.module_id].carrier[CC_id].cba_rnti[3], eNB_rrc_inst[ctxt.module_id].carrier[CC_id].num_active_cba_groups); } + #endif for (CC_id = 0; CC_id < MAX_NUM_CCs; CC_id++) { @@ -3506,11 +3583,15 @@ rrc_eNB_decode_ccch( if ((eNB_rrc_inst[enb_mod_idP].phyCellId == rrcConnectionReestablishmentRequest.UE_identity.physCellId) && (ue_mod_id != UE_INDEX_INVALID)){ - rrc_eNB_generate_RRCConnectionReestablishement(enb_mod_idP, frameP, ue_mod_id); + rrc_eNB_generate_RRCConnectionReestablishment(enb_mod_idP, frameP, ue_mod_id); }else { - rrc_eNB_generate_RRCConnectionReestablishementReject(enb_mod_idP, frameP, ue_mod_id); + rrc_eNB_generate_RRCConnectionReestablishmentReject(enb_mod_idP, frameP, ue_mod_id); } */ + /* reject all reestablishment attempts for the moment */ + rrc_eNB_generate_RRCConnectionReestablishmentReject(ctxt_pP, + rrc_eNB_get_ue_context(&eNB_rrc_inst[ctxt_pP->module_id], ctxt_pP->rnti), + CC_id); break; case UL_CCCH_MessageType__c1_PR_rrcConnectionRequest: @@ -3546,10 +3627,23 @@ rrc_eNB_decode_ccch( } else { rrcConnectionRequest = &ul_ccch_msg->message.choice.c1.choice.rrcConnectionRequest.criticalExtensions.choice.rrcConnectionRequest_r8; { + AssertFatal(rrcConnectionRequest->ue_Identity.present == InitialUE_Identity_PR_randomValue, + "unsupported InitialUE-Identity in RRCConnectionRequest"); + AssertFatal(rrcConnectionRequest->ue_Identity.choice.randomValue.size == 5, + "wrong InitialUE-Identity randomValue size, expected 5, provided %d", + rrcConnectionRequest->ue_Identity.choice.randomValue.size); memcpy(((uint8_t*) & random_value) + 3, rrcConnectionRequest->ue_Identity.choice.randomValue.buf, rrcConnectionRequest->ue_Identity.choice.randomValue.size); - ue_context_p = rrc_eNB_get_next_free_ue_context(ctxt_pP, random_value); + /* if there is already a registered UE (with another RNTI) with this random_value, + * the current one must be removed from MAC/PHY (zombie UE) + */ + if (rrc_eNB_ue_context_random_exist(ctxt_pP, random_value)) { + AssertFatal(0 == 1, "TODO: remove UE fro MAC/PHY (how?)"); + ue_context_p = NULL; + } else { + ue_context_p = rrc_eNB_get_next_free_ue_context(ctxt_pP, random_value); + } } LOG_D(RRC, PROTOCOL_RRC_CTXT_UE_FMT" UE context: %X\n", @@ -3627,6 +3721,8 @@ rrc_eNB_decode_ccch( send_msg(&S_rrc, msg_rrc_MR_attach_ind(ctxt_pP->module_id, Mac_id)); #else + ue_context_p->ue_context.primaryCC_id = CC_id; + //LG COMMENT Idx = (ue_mod_idP * NB_RB_MAX) + DCCH; Idx = DCCH; // SRB1 @@ -4263,16 +4359,6 @@ rrc_enb_task( rrc_eNB_process_S1AP_UE_CONTEXT_RELEASE_COMMAND(msg_p, msg_name_p, instance); break; - case GTPV1U_ENB_CREATE_TUNNEL_RESP: - PROTOCOL_CTXT_SET_BY_INSTANCE(&ctxt, - instance, - ENB_FLAG_YES, - GTPV1U_ENB_CREATE_TUNNEL_RESP(msg_p).rnti, - msg_p->ittiMsgHeader.lte_time.frame, - msg_p->ittiMsgHeader.lte_time.slot); - rrc_eNB_process_GTPV1U_CREATE_TUNNEL_RESP(&ctxt, msg_p, msg_name_p); - break; - case GTPV1U_ENB_DELETE_TUNNEL_RESP: /* Nothing to do. Apparently everything is done in S1AP processing */ //LOG_I(RRC, "[eNB %d] Received message %s, not processed because procedure not synched\n", @@ -4287,12 +4373,11 @@ rrc_enb_task( openair_rrc_lite_eNB_configuration(ENB_INSTANCE_TO_MODULE_ID(instance), &RRC_CONFIGURATION_REQ(msg_p)); break; -# ifdef ENABLE_RAL +# if ENABLE_RAL case RRC_RAL_CONFIGURE_THRESHOLD_REQ: rrc_enb_ral_handle_configure_threshold_request(instance, msg_p); break; -# endif //SPECTRA: Add the RRC connection reconfiguration with Second cell configuration case RRC_RAL_CONNECTION_RECONFIGURATION_REQ: @@ -4306,13 +4391,11 @@ rrc_enb_task( msg_p->ittiMsgHeader.lte_time.slot); LOG_I(RRC, "[eNB %d] Send RRC_RAL_CONNECTION_RECONFIGURATION_REQ to UE %s\n", instance, msg_name_p); //Method RRC connection reconfiguration command with Second cell configuration -# ifdef ENABLE_RAL //rrc_eNB_generate_RRCConnectionReconfiguration_SCell(instance, 0/* TODO put frameP number ! */, /*ue_mod_id force ue_mod_id to first UE*/0, 36126); -# else //rrc_eNB_generate_defaultRRCConnectionReconfiguration(instance, 0/* TODO put frameP number ! */, /*ue_mod_id force ue_mod_id to first UE*/0, // eNB_rrc_inst[instance].HO_flag); -# endif break; +# endif default: LOG_E(RRC, "[eNB %d] Received unexpected message %s\n", instance, msg_name_p); diff --git a/openair2/RRC/LITE/rrc_eNB_GTPV1U.c b/openair2/RRC/LITE/rrc_eNB_GTPV1U.c index c2bedd100d..ef70760235 100755 --- a/openair2/RRC/LITE/rrc_eNB_GTPV1U.c +++ b/openair2/RRC/LITE/rrc_eNB_GTPV1U.c @@ -50,34 +50,32 @@ int rrc_eNB_process_GTPV1U_CREATE_TUNNEL_RESP( const protocol_ctxt_t* const ctxt_pP, - MessageDef* msg_pP, - const char* msg_name_pP + const gtpv1u_enb_create_tunnel_resp_t * const create_tunnel_resp_pP ) { rnti_t rnti; - int i; + int i; struct rrc_eNB_ue_context_s* ue_context_p = NULL; - if (msg_pP) { - LOG_D(RRC, PROTOCOL_RRC_CTXT_UE_FMT" RX %s num tunnels %u \n", + if (create_tunnel_resp_pP) { + LOG_D(RRC, PROTOCOL_RRC_CTXT_UE_FMT" RX CREATE_TUNNEL_RESP num tunnels %u \n", PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP), - msg_name_pP, - GTPV1U_ENB_CREATE_TUNNEL_RESP(msg_pP).num_tunnels); + create_tunnel_resp_pP->num_tunnels); - rnti = GTPV1U_ENB_CREATE_TUNNEL_RESP(msg_pP).rnti; + rnti = create_tunnel_resp_pP->rnti; ue_context_p = rrc_eNB_get_ue_context( &eNB_rrc_inst[ctxt_pP->module_id], ctxt_pP->rnti); - for (i = 0; i < GTPV1U_ENB_CREATE_TUNNEL_RESP(msg_pP).num_tunnels; i++) { + for (i = 0; i < create_tunnel_resp_pP->num_tunnels; i++) { LOG_D(RRC, PROTOCOL_RRC_CTXT_UE_FMT" rrc_eNB_process_GTPV1U_CREATE_TUNNEL_RESP tunnel %u bearer index %u id %u\n", PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP), - GTPV1U_ENB_CREATE_TUNNEL_RESP(msg_pP).enb_S1u_teid[i], + create_tunnel_resp_pP->enb_S1u_teid[i], i, - GTPV1U_ENB_CREATE_TUNNEL_RESP(msg_pP).eps_bearer_id[i]); - ue_context_p->ue_context.enb_gtp_teid[i] = GTPV1U_ENB_CREATE_TUNNEL_RESP(msg_pP).enb_S1u_teid[i]; - ue_context_p->ue_context.enb_gtp_addrs[i] = GTPV1U_ENB_CREATE_TUNNEL_RESP(msg_pP).enb_addr; - ue_context_p->ue_context.enb_gtp_ebi[i] = GTPV1U_ENB_CREATE_TUNNEL_RESP(msg_pP).eps_bearer_id[i]; + create_tunnel_resp_pP->eps_bearer_id[i]); + ue_context_p->ue_context.enb_gtp_teid[i] = create_tunnel_resp_pP->enb_S1u_teid[i]; + ue_context_p->ue_context.enb_gtp_addrs[i] = create_tunnel_resp_pP->enb_addr; + ue_context_p->ue_context.enb_gtp_ebi[i] = create_tunnel_resp_pP->eps_bearer_id[i]; } MSC_LOG_RX_MESSAGE( MSC_RRC_ENB, @@ -85,7 +83,7 @@ rrc_eNB_process_GTPV1U_CREATE_TUNNEL_RESP( NULL,0, MSC_AS_TIME_FMT" CREATE_TUNNEL_RESP RNTI %"PRIx16" ntuns %u ebid %u enb-s1u teid %u", 0,0,rnti, - GTPV1U_ENB_CREATE_TUNNEL_RESP(msg_pP).num_tunnels, + create_tunnel_resp_pP->num_tunnels, ue_context_p->ue_context.enb_gtp_ebi[0], ue_context_p->ue_context.enb_gtp_teid[0]); return 0; diff --git a/openair2/RRC/LITE/rrc_eNB_GTPV1U.h b/openair2/RRC/LITE/rrc_eNB_GTPV1U.h index 99afe8c291..70f9876164 100755 --- a/openair2/RRC/LITE/rrc_eNB_GTPV1U.h +++ b/openair2/RRC/LITE/rrc_eNB_GTPV1U.h @@ -42,17 +42,15 @@ # if defined(ENABLE_ITTI) -/*! \fn rrc_eNB_process_GTPV1U_CREATE_TUNNEL_RESP(const protocol_ctxt_t* const ctxt_pP, MessageDef *msg_pP, const char *msg_name_pP) +/*! \fn rrc_eNB_process_GTPV1U_CREATE_TUNNEL_RESP(const protocol_ctxt_t* const ctxt_pP, const gtpv1u_enb_create_tunnel_resp_t * const create_tunnel_resp_pP) *\brief Process GTPV1U_ENB_CREATE_TUNNEL_RESP message received from GTPV1U, retrieve the enb teid created. *\param ctxt_pP Running context - *\param msg_pP Message received by RRC. - *\param msg_name_pP Message name. + *\param create_tunnel_resp_pP Message received by RRC. *\return 0 when successful, -1 if the UE index can not be retrieved. */ int rrc_eNB_process_GTPV1U_CREATE_TUNNEL_RESP( const protocol_ctxt_t* const ctxt_pP, - MessageDef* msg_pP, - const char* msg_name_pP + const gtpv1u_enb_create_tunnel_resp_t * const create_tunnel_resp_pP ); # endif diff --git a/openair2/RRC/LITE/rrc_eNB_S1AP.c b/openair2/RRC/LITE/rrc_eNB_S1AP.c index 5566dc1f15..60b514ba2c 100644 --- a/openair2/RRC/LITE/rrc_eNB_S1AP.c +++ b/openair2/RRC/LITE/rrc_eNB_S1AP.c @@ -80,49 +80,10 @@ static const uint16_t S1AP_INTEGRITY_EIA2_MASK = 0x4000; #endif #endif + + + # if defined(ENABLE_ITTI) -//------------------------------------------------------------------------------ -int -rrc_eNB_S1AP_compare_ue_ids( - struct rrc_ue_s1ap_ids_s* c1_pP, - struct rrc_ue_s1ap_ids_s* c2_pP -) -//------------------------------------------------------------------------------ -{ - LOG_T(RRC, "rrc_eNB_S1AP_compare_ue_ids() c1.ue_initial_id %x c2.ue_initial_id %x c1.eNB_ue_s1ap_id %x c2.eNB_ue_s1ap_id %x\n", - c1_pP->ue_initial_id, - c2_pP->ue_initial_id, - c1_pP->eNB_ue_s1ap_id, - c2_pP->eNB_ue_s1ap_id); - - if ((c1_pP->eNB_ue_s1ap_id == 0) || (c2_pP->eNB_ue_s1ap_id == 0)) { - if (c1_pP->ue_initial_id > c2_pP->ue_initial_id) { - return 1; - } - - if (c1_pP->ue_initial_id < c2_pP->ue_initial_id) { - return -1; - } - - return 0; - } - - if (c1_pP->eNB_ue_s1ap_id > c2_pP->eNB_ue_s1ap_id) { - return 1; - } - - if (c1_pP->eNB_ue_s1ap_id < c2_pP->eNB_ue_s1ap_id) { - return -1; - } - - return 0; -} - -//------------------------------------------------------------------------------ -/* Generate the tree management functions */ -RB_GENERATE(rrc_rnti_tree_s, rrc_ue_s1ap_ids_s, entries, rrc_eNB_S1AP_compare_ue_ids); -//------------------------------------------------------------------------------ - //------------------------------------------------------------------------------ struct rrc_ue_s1ap_ids_s* rrc_eNB_S1AP_get_ue_ids( @@ -132,12 +93,38 @@ rrc_eNB_S1AP_get_ue_ids( ) //------------------------------------------------------------------------------ { - rrc_ue_s1ap_ids_t temp; - memset(&temp, 0, sizeof(struct rrc_ue_s1ap_ids_s)); - /* eNB ue rrc id = 24 bits wide */ - temp.ue_initial_id = ue_initial_id; - temp.eNB_ue_s1ap_id = eNB_ue_s1ap_id; - return RB_FIND(rrc_rnti_tree_s, &rrc_instance_pP->rrc_rnti_head, &temp); + rrc_ue_s1ap_ids_t *result = NULL; + rrc_ue_s1ap_ids_t *result2 = NULL; + hashtable_rc_t h_rc; + + // we assume that a rrc_ue_s1ap_ids_s is initially inserted in initial_id2_s1ap_ids + if (eNB_ue_s1ap_id > 0) { + h_rc = hashtable_get(rrc_instance_pP->s1ap_id2_s1ap_ids, (hash_key_t)eNB_ue_s1ap_id, (void**)&result); + } + if (ue_initial_id != UE_INITIAL_ID_INVALID) { + h_rc = hashtable_get(rrc_instance_pP->initial_id2_s1ap_ids, (hash_key_t)ue_initial_id, (void**)&result); + if (h_rc == HASH_TABLE_OK) { + if (eNB_ue_s1ap_id > 0) { + h_rc = hashtable_get(rrc_instance_pP->s1ap_id2_s1ap_ids, (hash_key_t)eNB_ue_s1ap_id, (void**)&result2); + if (h_rc != HASH_TABLE_OK) { + result2 = malloc(sizeof(*result2)); + if (NULL != result2) { + *result2 = *result; + result2->eNB_ue_s1ap_id = eNB_ue_s1ap_id; + result->eNB_ue_s1ap_id = eNB_ue_s1ap_id; + h_rc = hashtable_insert(rrc_instance_pP->s1ap_id2_s1ap_ids, + (hash_key_t)eNB_ue_s1ap_id, + result2); + if (h_rc != HASH_TABLE_OK) { + LOG_E(S1AP, "[eNB %u] Error while hashtable_insert in s1ap_id2_s1ap_ids eNB_ue_s1ap_id %u\n", + rrc_instance_pP - eNB_rrc_inst, eNB_ue_s1ap_id); + } + } + } + } + } + } + return result; } //------------------------------------------------------------------------------ void @@ -147,6 +134,9 @@ rrc_eNB_S1AP_remove_ue_ids( ) //------------------------------------------------------------------------------ { + const uint16_t ue_initial_id = ue_ids_pP->ue_initial_id; + const uint32_t eNB_ue_s1ap_id = ue_ids_pP->eNB_ue_s1ap_id; + hashtable_rc_t h_rc; if (rrc_instance_pP == NULL) { LOG_E(RRC, "Bad RRC instance\n"); return; @@ -157,8 +147,23 @@ rrc_eNB_S1AP_remove_ue_ids( return; } - RB_REMOVE(rrc_rnti_tree_s, &rrc_instance_pP->rrc_rnti_head, ue_ids_pP); - free(ue_ids_pP); + if (eNB_ue_s1ap_id > 0) { + h_rc = hashtable_remove(rrc_instance_pP->s1ap_id2_s1ap_ids, (hash_key_t)eNB_ue_s1ap_id); + if (h_rc != HASH_TABLE_OK) { + LOG_W(RRC, "S1AP Did not find entry in hashtable s1ap_id2_s1ap_ids for eNB_ue_s1ap_id %u\n", eNB_ue_s1ap_id); + } else { + LOG_W(RRC, "S1AP removed entry in hashtable s1ap_id2_s1ap_ids for eNB_ue_s1ap_id %u\n", eNB_ue_s1ap_id); + } + } + + if (ue_initial_id != UE_INITIAL_ID_INVALID) { + h_rc = hashtable_remove(rrc_instance_pP->initial_id2_s1ap_ids, (hash_key_t)ue_initial_id); + if (h_rc != HASH_TABLE_OK) { + LOG_W(RRC, "S1AP Did not find entry in hashtable initial_id2_s1ap_ids for ue_initial_id %u\n", ue_initial_id); + } else { + LOG_W(RRC, "S1AP removed entry in hashtable initial_id2_s1ap_ids for ue_initial_id %u\n", ue_initial_id); + } + } } /*! \fn uint16_t get_next_ue_initial_id(uint8_t mod_id) @@ -210,10 +215,6 @@ rrc_eNB_get_ue_context_from_s1ap_ids( eNB_ue_s1ap_idP); if (temp) { - // found by ue_initial_id, fill now eNB_ue_s1ap_idP - if (temp->eNB_ue_s1ap_id != eNB_ue_s1ap_idP) { - temp->eNB_ue_s1ap_id = eNB_ue_s1ap_idP; - } return rrc_eNB_get_ue_context( &eNB_rrc_inst[ENB_INSTANCE_TO_MODULE_ID(instanceP)], @@ -616,6 +617,7 @@ rrc_eNB_send_S1AP_NAS_FIRST_REQ( { MessageDef* message_p = NULL; rrc_ue_s1ap_ids_t* rrc_ue_s1ap_ids_p = NULL; + hashtable_rc_t h_rc; message_p = itti_alloc_new_message (TASK_RRC_ENB, S1AP_NAS_FIRST_REQ); memset(&message_p->ittiMsg.s1ap_nas_first_req, 0, sizeof(s1ap_nas_first_req_t)); @@ -628,7 +630,13 @@ rrc_eNB_send_S1AP_NAS_FIRST_REQ( rrc_ue_s1ap_ids_p->eNB_ue_s1ap_id = UE_INITIAL_ID_INVALID; rrc_ue_s1ap_ids_p->ue_rnti = ctxt_pP->rnti; - RB_INSERT(rrc_rnti_tree_s, &eNB_rrc_inst[ctxt_pP->module_id].rrc_rnti_head, rrc_ue_s1ap_ids_p); + h_rc = hashtable_insert(eNB_rrc_inst[ctxt_pP->module_id].initial_id2_s1ap_ids, + (hash_key_t)ue_context_pP->ue_context.ue_initial_id, + rrc_ue_s1ap_ids_p); + if (h_rc != HASH_TABLE_OK) { + LOG_E(S1AP, "[eNB %d] Error while hashtable_insert in initial_id2_s1ap_ids ue_initial_id %u\n", + ctxt_pP->module_id, ue_context_pP->ue_context.ue_initial_id); + } /* Assume that cause is coded in the same way in RRC and S1ap, just check that the value is in S1ap range */ AssertFatal(ue_context_pP->ue_context.establishment_cause < RRC_CAUSE_LAST, @@ -838,9 +846,11 @@ rrc_eNB_process_S1AP_DOWNLINK_NAS( /*------------------------------------------------------------------------------*/ int rrc_eNB_process_S1AP_INITIAL_CONTEXT_SETUP_REQ(MessageDef *msg_p, const char *msg_name, instance_t instance) { - uint16_t ue_initial_id; - uint32_t eNB_ue_s1ap_id; - MessageDef *message_gtpv1u_p = NULL; + uint16_t ue_initial_id; + uint32_t eNB_ue_s1ap_id; + MessageDef *message_gtpv1u_p = NULL; + gtpv1u_enb_create_tunnel_req_t create_tunnel_req; + gtpv1u_enb_create_tunnel_resp_t create_tunnel_resp; struct rrc_eNB_ue_context_s* ue_context_p = NULL; protocol_ctxt_t ctxt; @@ -872,8 +882,7 @@ int rrc_eNB_process_S1AP_INITIAL_CONTEXT_SETUP_REQ(MessageDef *msg_p, const char { int i; - message_gtpv1u_p = itti_alloc_new_message(TASK_S1AP, GTPV1U_ENB_CREATE_TUNNEL_REQ); - memset(&message_gtpv1u_p->ittiMsg.Gtpv1uCreateTunnelReq, 0 , sizeof(gtpv1u_enb_create_tunnel_req_t)); + memset(&create_tunnel_req, 0 , sizeof(create_tunnel_req)); ue_context_p->ue_context.nb_of_e_rabs = S1AP_INITIAL_CONTEXT_SETUP_REQ (msg_p).nb_of_e_rabs; for (i = 0; i < ue_context_p->ue_context.nb_of_e_rabs; i++) { @@ -881,18 +890,25 @@ int rrc_eNB_process_S1AP_INITIAL_CONTEXT_SETUP_REQ(MessageDef *msg_p, const char ue_context_p->ue_context.e_rab[i].param = S1AP_INITIAL_CONTEXT_SETUP_REQ (msg_p).e_rab_param[i]; - GTPV1U_ENB_CREATE_TUNNEL_REQ(message_gtpv1u_p).eps_bearer_id[i] = S1AP_INITIAL_CONTEXT_SETUP_REQ (msg_p).e_rab_param[i].e_rab_id; - GTPV1U_ENB_CREATE_TUNNEL_REQ(message_gtpv1u_p).sgw_S1u_teid[i] = S1AP_INITIAL_CONTEXT_SETUP_REQ (msg_p).e_rab_param[i].gtp_teid; + create_tunnel_req.eps_bearer_id[i] = S1AP_INITIAL_CONTEXT_SETUP_REQ (msg_p).e_rab_param[i].e_rab_id; + create_tunnel_req.sgw_S1u_teid[i] = S1AP_INITIAL_CONTEXT_SETUP_REQ (msg_p).e_rab_param[i].gtp_teid; - memcpy(>PV1U_ENB_CREATE_TUNNEL_REQ(message_gtpv1u_p).sgw_addr[i], + memcpy(&create_tunnel_req.sgw_addr[i], &S1AP_INITIAL_CONTEXT_SETUP_REQ (msg_p).e_rab_param[i].sgw_addr, sizeof(transport_layer_addr_t)); } - GTPV1U_ENB_CREATE_TUNNEL_REQ(message_gtpv1u_p).rnti = ue_context_p->ue_context.rnti; // warning put zero above - GTPV1U_ENB_CREATE_TUNNEL_REQ(message_gtpv1u_p).num_tunnels = i; + create_tunnel_req.rnti = ue_context_p->ue_context.rnti; // warning put zero above + create_tunnel_req.num_tunnels = i; - itti_send_msg_to_task(TASK_GTPV1_U, instance, message_gtpv1u_p); + gtpv1u_create_s1u_tunnel( + instance, + &create_tunnel_req, + &create_tunnel_resp); + + rrc_eNB_process_GTPV1U_CREATE_TUNNEL_RESP( + &ctxt, + &create_tunnel_resp); } /* TODO parameters yet to process ... */ @@ -1088,9 +1104,12 @@ int rrc_eNB_process_S1AP_UE_CONTEXT_RELEASE_COMMAND (MessageDef *msg_p, const ch { uint32_t eNB_ue_s1ap_id; protocol_ctxt_t ctxt; - struct rrc_eNB_ue_context_s* ue_context_p = NULL; + struct rrc_eNB_ue_context_s *ue_context_p = NULL; + struct rrc_ue_s1ap_ids_s *rrc_ue_s1ap_ids = NULL; eNB_ue_s1ap_id = S1AP_UE_CONTEXT_RELEASE_COMMAND(msg_p).eNB_ue_s1ap_id; + + ue_context_p = rrc_eNB_get_ue_context_from_s1ap_ids(instance, UE_INITIAL_ID_INVALID, eNB_ue_s1ap_id); if (ue_context_p == NULL) { @@ -1117,6 +1136,17 @@ int rrc_eNB_process_S1AP_UE_CONTEXT_RELEASE_COMMAND (MessageDef *msg_p, const ch msg_complete_p = itti_alloc_new_message(TASK_RRC_ENB, S1AP_UE_CONTEXT_RELEASE_COMPLETE); S1AP_UE_CONTEXT_RELEASE_COMPLETE(msg_complete_p).eNB_ue_s1ap_id = eNB_ue_s1ap_id; itti_send_msg_to_task(TASK_S1AP, instance, msg_complete_p); + + rrc_ue_s1ap_ids = rrc_eNB_S1AP_get_ue_ids( + &eNB_rrc_inst[instance], + UE_INITIAL_ID_INVALID, + eNB_ue_s1ap_id); + + if (NULL != rrc_ue_s1ap_ids) { + rrc_eNB_S1AP_remove_ue_ids( + &eNB_rrc_inst[instance], + rrc_ue_s1ap_ids); + } return (-1); } else { PROTOCOL_CTXT_SET_BY_INSTANCE(&ctxt, instance, ENB_FLAG_YES, ue_context_p->ue_context.rnti, 0, 0); @@ -1170,6 +1200,17 @@ int rrc_eNB_process_S1AP_UE_CONTEXT_RELEASE_COMMAND (MessageDef *msg_p, const ch msg_complete_p = itti_alloc_new_message(TASK_RRC_ENB, S1AP_UE_CONTEXT_RELEASE_COMPLETE); S1AP_UE_CONTEXT_RELEASE_COMPLETE(msg_complete_p).eNB_ue_s1ap_id = eNB_ue_s1ap_id; itti_send_msg_to_task(TASK_S1AP, instance, msg_complete_p); + + rrc_ue_s1ap_ids = rrc_eNB_S1AP_get_ue_ids( + &eNB_rrc_inst[instance], + UE_INITIAL_ID_INVALID, + eNB_ue_s1ap_id); + + if (NULL != rrc_ue_s1ap_ids) { + rrc_eNB_S1AP_remove_ue_ids( + &eNB_rrc_inst[instance], + rrc_ue_s1ap_ids); + } } return (0); diff --git a/openair2/UTIL/LOG/log.c b/openair2/UTIL/LOG/log.c index 1ae3b720f2..283a906b58 100755 --- a/openair2/UTIL/LOG/log.c +++ b/openair2/UTIL/LOG/log.c @@ -398,7 +398,15 @@ int logInit (void) g_log->log_component[SCTP].fd = 0; g_log->log_component[SCTP].filelog = 0; g_log->log_component[SCTP].filelog_name = ""; - + + g_log->log_component[RRH].name = "RRH"; + g_log->log_component[RRH].level = LOG_EMERG; + g_log->log_component[RRH].flag = LOG_MED; + g_log->log_component[RRH].interval = 1; + g_log->log_component[RRH].fd = 0; + g_log->log_component[RRH].filelog = 0; + g_log->log_component[RRH].filelog_name = ""; + g_log->level2string[LOG_EMERG] = "G"; //EMERG g_log->level2string[LOG_ALERT] = "A"; // ALERT g_log->level2string[LOG_CRIT] = "C"; // CRITIC diff --git a/openair2/UTIL/LOG/log.h b/openair2/UTIL/LOG/log.h index 9de693fa92..c5d84689bf 100755 --- a/openair2/UTIL/LOG/log.h +++ b/openair2/UTIL/LOG/log.h @@ -267,6 +267,8 @@ typedef enum { TMR, USIM, LOCALIZE, + RRH, + X2AP, MAX_LOG_COMPONENTS, } comp_name_t; diff --git a/openair2/UTIL/LOG/vcd_signal_dumper.c b/openair2/UTIL/LOG/vcd_signal_dumper.c index 328548da47..a1223e6ca5 100644 --- a/openair2/UTIL/LOG/vcd_signal_dumper.c +++ b/openair2/UTIL/LOG/vcd_signal_dumper.c @@ -77,6 +77,8 @@ struct vcd_module_s { const char* eurecomVariablesNames[] = { "frame_number_TX_eNB", "frame_number_RX_eNB", + "runtime_TX_eNB", + "runtime_RX_eNB", "frame_number_TX_UE", "frame_number_RX_UE", "slot_number_TX_UE", @@ -90,16 +92,30 @@ const char* eurecomVariablesNames[] = { "diff2", "hw_subframe", "hw_frame", + "hw_subframe_rx", + "hw_frame_rx", "txcnt", "rxcnt", "trx_ts", "trx_tst", + "tx_ts", + "rx_ts", + "hw_cnt_rx", + "lhw_cnt_rx", + "hw_cnt_tx", + "lhw_cnt_tx", + "pck_rx", + "pck_tx", + "cnt", + "dummy_dump", "itti_send_msg", "itti_poll_msg", "itti_recv_msg", "itti_alloc_msg", "mp_alloc", "mp_free", + "ue_inst_cnt_rx", + "ue_inst_cnt_tx" }; const char* eurecomFunctionsNames[] = { @@ -127,6 +143,19 @@ const char* eurecomFunctionsNames[] = { "eNB_thread_rx8", "eNB_thread_tx9", "eNB_thread_rx9", + "ue_thread_tx", + "ue_thread_rx", + + /* RRH signals */ + "eNB_tx", + "eNB_rx", + "eNB_trx", + "eNB_tm", + "eNB_rx_sleep", + "eNB_tx_sleep", + "eNB_proc_sleep", + "trx_read_rf", + "trx_write_rf", /* PHY signals */ "ue_synch", @@ -197,6 +226,7 @@ const char* eurecomFunctionsNames[] = { "mac_dlsch_preprocessor", "mac_schedule_dlsch", "mac_fill_dlsch_dci", + "macxface_out_of_sync_ind", "macxface_ue_decode_si", "macxface_ue_decode_ccch", @@ -209,7 +239,6 @@ const char* eurecomFunctionsNames[] = { "macxface_ue_get_sr", "ue_send_mch_sdu", - "ue_synch", /*RLC signals */ "rlc_data_req", diff --git a/openair2/UTIL/LOG/vcd_signal_dumper.h b/openair2/UTIL/LOG/vcd_signal_dumper.h index 13e9250d68..7ec2e2445e 100644 --- a/openair2/UTIL/LOG/vcd_signal_dumper.h +++ b/openair2/UTIL/LOG/vcd_signal_dumper.h @@ -49,6 +49,8 @@ typedef enum { VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_TX_ENB = 0, VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_RX_ENB, + VCD_SIGNAL_DUMPER_VARIABLES_RUNTIME_TX_ENB, + VCD_SIGNAL_DUMPER_VARIABLES_RUNTIME_RX_ENB, VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_TX_UE, VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_RX_UE, VCD_SIGNAL_DUMPER_VARIABLES_SLOT_NUMBER_TX_UE, @@ -62,16 +64,30 @@ typedef enum { VCD_SIGNAL_DUMPER_VARIABLES_DIFF, VCD_SIGNAL_DUMPER_VARIABLES_HW_SUBFRAME, VCD_SIGNAL_DUMPER_VARIABLES_HW_FRAME, + VCD_SIGNAL_DUMPER_VARIABLES_HW_SUBFRAME_RX, + VCD_SIGNAL_DUMPER_VARIABLES_HW_FRAME_RX, VCD_SIGNAL_DUMPER_VARIABLES_TXCNT, VCD_SIGNAL_DUMPER_VARIABLES_RXCNT, VCD_SIGNAL_DUMPER_VARIABLES_TRX_TS, VCD_SIGNAL_DUMPER_VARIABLES_TRX_TST, + VCD_SIGNAL_DUMPER_VARIABLES_TX_TS, + VCD_SIGNAL_DUMPER_VARIABLES_RX_TS, + VCD_SIGNAL_DUMPER_VARIABLES_RX_HWCNT, + VCD_SIGNAL_DUMPER_VARIABLES_RX_LHWCNT, + VCD_SIGNAL_DUMPER_VARIABLES_TX_HWCNT, + VCD_SIGNAL_DUMPER_VARIABLES_TX_LHWCNT, + VCD_SIGNAL_DUMPER_VARIABLES_RX_PCK, + VCD_SIGNAL_DUMPER_VARIABLES_TX_PCK, + VCD_SIGNAL_DUMPER_VARIABLES_CNT, + VCD_SIGNAL_DUMPER_VARIABLES_DUMMY_DUMP, VCD_SIGNAL_DUMPER_VARIABLE_ITTI_SEND_MSG, VCD_SIGNAL_DUMPER_VARIABLE_ITTI_POLL_MSG, VCD_SIGNAL_DUMPER_VARIABLE_ITTI_RECV_MSG, VCD_SIGNAL_DUMPER_VARIABLE_ITTI_ALLOC_MSG, VCD_SIGNAL_DUMPER_VARIABLE_MP_ALLOC, VCD_SIGNAL_DUMPER_VARIABLE_MP_FREE, + VCD_SIGNAL_DUMPER_VARIABLES_UE_INST_CNT_RX, + VCD_SIGNAL_DUMPER_VARIABLES_UE_INST_CNT_TX, VCD_SIGNAL_DUMPER_VARIABLES_LAST, VCD_SIGNAL_DUMPER_VARIABLES_END = VCD_SIGNAL_DUMPER_VARIABLES_LAST, } vcd_signal_dump_variables; @@ -101,6 +117,19 @@ typedef enum { VCD_SIGNAL_DUMPER_FUNCTIONS_eNB_PROC_RX8, VCD_SIGNAL_DUMPER_FUNCTIONS_eNB_PROC_TX9, VCD_SIGNAL_DUMPER_FUNCTIONS_eNB_PROC_RX9, + VCD_SIGNAL_DUMPER_FUNCTIONS_UE_THREAD_TX, + VCD_SIGNAL_DUMPER_FUNCTIONS_UE_THREAD_RX, + + /* RRH signals */ + VCD_SIGNAL_DUMPER_FUNCTIONS_eNB_TX, + VCD_SIGNAL_DUMPER_FUNCTIONS_eNB_RX, + VCD_SIGNAL_DUMPER_FUNCTIONS_eNB_TRX, + VCD_SIGNAL_DUMPER_FUNCTIONS_eNB_TM, + VCD_SIGNAL_DUMPER_FUNCTIONS_eNB_RX_SLEEP, + VCD_SIGNAL_DUMPER_FUNCTIONS_eNB_TX_SLEEP, + VCD_SIGNAL_DUMPER_FUNCTIONS_eNB_PROC_SLEEP, + VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_READ_RF, + VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_WRITE_RF, /* PHY signals */ VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SYNCH, diff --git a/openair2/UTIL/MEM/mem_block.c b/openair2/UTIL/MEM/mem_block.c index 2c0d558421..6b4b3dab18 100644 --- a/openair2/UTIL/MEM/mem_block.c +++ b/openair2/UTIL/MEM/mem_block.c @@ -44,6 +44,20 @@ #include "list.h" #include "LAYER2/MAC/extern.h" +/* all function calls are protected by a mutex + * to ensure that many threads calling them at + * the same time don't mess up. + * We might be more clever in the future, it's a + * bit overkill. + * Commenting this define removes the protection, + * so be careful with it. + */ +#define MEMBLOCK_BIG_LOCK + +#ifdef MEMBLOCK_BIG_LOCK +static pthread_mutex_t mtex = PTHREAD_MUTEX_INITIALIZER; +#endif + //----------------------------------------------------------------------------- //#define DEBUG_MEM_MNGT_FREE //#define DEBUG_MEM_MNGT_ALLOC_SIZE @@ -72,6 +86,10 @@ pool_buffer_init (void) MEM_MNGT_MB12_NB_BLOCKS, MEM_MNGT_MBCOPY_NB_BLOCKS }; +#ifdef MEMBLOCK_BIG_LOCK + if (pthread_mutex_lock(&mtex)) abort(); +#endif + memset (memory, 0, sizeof (mem_pool)); mb_index = 0; @@ -148,6 +166,10 @@ pool_buffer_init (void) mb_index += pool_sizes[pool_index]; } +#ifdef MEMBLOCK_BIG_LOCK + if (pthread_mutex_unlock(&mtex)) abort(); +#endif + return 0; } @@ -169,6 +191,10 @@ free_mem_block (mem_block_t * leP) return; } +#ifdef MEMBLOCK_BIG_LOCK + if (pthread_mutex_lock(&mtex)) abort(); +#endif + #ifdef DEBUG_MEM_MNGT_FREE msg ("[MEM_MNGT][FREE] free_mem_block() %p pool: %d\n", leP, leP->pool_id); #endif @@ -185,6 +211,10 @@ free_mem_block (mem_block_t * leP) } else { msg ("[MEM_MNGT][FREE] ERROR free_mem_block() unknown pool_id : %d\n", leP->pool_id); } + +#ifdef MEMBLOCK_BIG_LOCK + if (pthread_mutex_unlock(&mtex)) abort(); +#endif } //----------------------------------------------------------------------------- @@ -202,6 +232,11 @@ get_free_mem_block (uint32_t sizeP) mac_xface->macphy_exit("[MEM_MNGT][ERROR][FATAL] get_free_mem_block size requested out of bounds"); return NULL; } + +#ifdef MEMBLOCK_BIG_LOCK + if (pthread_mutex_lock(&mtex)) abort(); +#endif + size = sizeP >> 6; pool_selected = 0; @@ -220,6 +255,11 @@ get_free_mem_block (uint32_t sizeP) #ifdef DEBUG_MEM_MNGT_ALLOC_SIZE msg ("[MEM_MNGT][INFO] ALLOC MEM_BLOCK SIZE %d bytes pool %d (%p)\n", sizeP, pool_selected,le); #endif + +#ifdef MEMBLOCK_BIG_LOCK + if (pthread_mutex_unlock(&mtex)) abort(); +#endif + return le; } @@ -234,6 +274,11 @@ get_free_mem_block (uint32_t sizeP) display_mem_load(); mac_xface->macphy_exit("[MEM_MNGT][ERROR][FATAL] get_free_mem_block failed"); + +#ifdef MEMBLOCK_BIG_LOCK + if (pthread_mutex_unlock(&mtex)) abort(); +#endif + return NULL; }; @@ -244,6 +289,10 @@ get_free_copy_mem_block (void) //----------------------------------------------------------------------------- mem_block_t *le; +#ifdef MEMBLOCK_BIG_LOCK + AssertFatal(0, "This function is not handled properly but not used anywhere. FIXME?\n"); +#endif + if ((le = list_remove_head (&mem_block_var.mem_lists[MEM_MNGT_POOL_ID_COPY]))) { #ifdef DEBUG_MEM_MNGT_ALLOC_SIZE msg ("[MEM_MNGT][INFO] ALLOC COPY MEM BLOCK (%p)\n",le); @@ -267,6 +316,10 @@ copy_mem_block (mem_block_t * leP, mem_block_t * destP) { //----------------------------------------------------------------------------- +#ifdef MEMBLOCK_BIG_LOCK + AssertFatal(0, "This function is not handled properly but not used anywhere. FIXME?\n"); +#endif + if ((destP != NULL) && (leP != NULL) && (destP->pool_id == MEM_MNGT_POOL_ID_COPY)) { destP->data = leP->data; } else { @@ -281,6 +334,9 @@ void display_mem_load (void) { //----------------------------------------------------------------------------- +#ifdef MEMBLOCK_BIG_LOCK + /* this function does not need to be protected, do nothing */ +#endif mem_pool *memory = (mem_pool *) &mem_block_var; @@ -322,6 +378,10 @@ check_mem_area (void) int index, mb_index; mem_pool *memory = (mem_pool *) &mem_block_var; +#ifdef MEMBLOCK_BIG_LOCK + AssertFatal(0, "This function is not handled properly but not used anywhere. FIXME?\n"); +#endif + for (index = 0; index < MEM_MNGT_MB0_NB_BLOCKS; index++) { if ((memory->mem_blocks[index].data != (unsigned char*)&(memory->mem_pool0[index][0])) && (memory->mem_blocks[index].pool_id != MEM_MNGT_POOL_ID0)) { msg ("[MEM] ERROR POOL0 block index %d\n", index); @@ -452,6 +512,10 @@ check_free_mem_block (mem_block_t * leP) //----------------------------------------------------------------------------- ptrdiff_t block_index; +#ifdef MEMBLOCK_BIG_LOCK + /* this function does not SEEM TO need to be protected, do nothing (for the moment) */ +#endif + if ((leP >= mem_block_var.mem_blocks) && (leP <= &mem_block_var.mem_blocks[MEM_MNGT_NB_ELEMENTS-1])) { // the pointer is inside the memory region block_index = leP - mem_block_var.mem_blocks; diff --git a/openair2/UTIL/OMG/static.c b/openair2/UTIL/OMG/static.c index 16ec05b751..f882ae7fe6 100644 --- a/openair2/UTIL/OMG/static.c +++ b/openair2/UTIL/OMG/static.c @@ -134,6 +134,7 @@ place_static_node (node_struct * node) LOG_I (OMG, "[STATIC] Initial position of node ID: %d type(%d: %s): (X = %.2f, Y = %.2f) speed = 0.0\n", node->id, node->type, (node->type==eNB)?"eNB":(node->type==UE)?"UE":"Relay", node->x_pos, node->y_pos); + node_vector_end[node->type] = (node_list *) add_entry (node, node_vector_end[node->type]); diff --git a/openair2/UTIL/OPT/probe.c b/openair2/UTIL/OPT/probe.c index 2524d3bd94..5fd34bbcf4 100644 --- a/openair2/UTIL/OPT/probe.c +++ b/openair2/UTIL/OPT/probe.c @@ -137,7 +137,11 @@ typedef guint8 gboolean; //static unsigned char g_PDUBuffer[1600]; //static unsigned int g_PDUOffset; +#ifdef JUMBO_FRAME +static unsigned char g_frameBuffer[9000]; +#else static unsigned char g_frameBuffer[1600]; +#endif //static unsigned char g_fileBuffer[1600]; static unsigned int g_frameOffset; diff --git a/openair2/UTIL/OTG/otg_rx.c b/openair2/UTIL/OTG/otg_rx.c index a97ecf80f9..b5f0fd416b 100644 --- a/openair2/UTIL/OTG/otg_rx.c +++ b/openair2/UTIL/OTG/otg_rx.c @@ -460,7 +460,7 @@ int otg_rx_pkt(const int dst_instanceP, const int ctime, const char * const buff } else { LOG_W(OTG,"RX: Not an OTG pkt, forward to upper layer (flag %x, size %d, pdcp_size %d) FIX ME \n", otg_hdr_info_rx->flag, otg_hdr_info_rx->size, size); - return(0); //to be fixed on the real case to one + return(1); //to be fixed on the real case to one } } diff --git a/openair2/UTIL/OTG/otg_tx.c b/openair2/UTIL/OTG/otg_tx.c index 52b30ea44b..d6f6507644 100644 --- a/openair2/UTIL/OTG/otg_tx.c +++ b/openair2/UTIL/OTG/otg_tx.c @@ -1827,12 +1827,14 @@ void init_predef_traffic( #endif break; - - default: + + case FULL_BUFFER: + LOG_E(OTG, "Full buffer is not yet supported\n"); + default: LOG_D(OTG, "[SRC %d][DST %d] Unknown traffic type\n", i, j); /* TO ADD: 3GPP TSG-RAN WG1 Meeting #71: Low-cost MTC Traffic Models and Characteristics */ - + } } } diff --git a/openair2/X2AP/MESSAGES/ASN1/R11.2/X2AP-CommonDataTypes.asn b/openair2/X2AP/MESSAGES/ASN1/R11.2/X2AP-CommonDataTypes.asn index ba88cef358..410a7d19dd 100755 --- a/openair2/X2AP/MESSAGES/ASN1/R11.2/X2AP-CommonDataTypes.asn +++ b/openair2/X2AP/MESSAGES/ASN1/R11.2/X2AP-CommonDataTypes.asn @@ -31,12 +31,112 @@ X2ap-PrivateIE-ID ::= CHOICE { global OBJECT IDENTIFIER } -X2ap-ProcedureCode ::= INTEGER (0..255) +--X2ap-ProcedureCode ::= INTEGER (0..255) +X2ap-ProcedureCode ::= INTEGER { + id-handoverPreparation (0), + id-handoverCancel (1), + id-loadIndication (2), + id-errorIndication (3), + id-snStatusTransfer (4), + id-uEContextRelease (5), + id-x2Setup (6), + id-reset (7), + id-eNBConfigurationUpdate (8), + id-resourceStatusReportingInitiation (9), + id-resourceStatusReporting (10), + id-privateMessage (11), + id-mobilitySettingsChange (12), + id-rLFIndication (13), + id-handoverReport (14), + id-cellActivation (15) +} (0..255) - -X2ap-ProtocolIE-ID ::= INTEGER (0..x2ap-maxProtocolIEs) +--X2ap-ProtocolIE-ID ::= INTEGER (0..x2ap-maxProtocolIEs) +X2ap-ProtocolIE-ID ::= INTEGER { + id-E-RABs-Admitted-Item (0), + id-E-RABs-Admitted-List (1), + id-E-RAB-Item (2), + id-E-RABs-NotAdmitted-List (3), + id-E-RABs-ToBeSetup-Item (4), + id-Cause (5), + id-CellInformation (6), + id-CellInformation-Item (7), + id-New-eNB-UE-X2AP-ID (9), + id-Old-eNB-UE-X2AP-ID (10), + id-TargetCell-ID (11), + id-TargeteNBtoSource-eNBTransparentContainer (12), + id-TraceActivation (13), + id-UE-ContextInformation (14), + id-UE-HistoryInformation (15), + id-UE-X2AP-ID (16), + id-CriticalityDiagnostics (17), + id-E-RABs-SubjectToStatusTransfer-List (18), + id-E-RABs-SubjectToStatusTransfer-Item (19), + id-ServedCells (20), + id-GlobalENB-ID (21), + id-TimeToWait (22), + id-GUMMEI-ID (23), + id-GUGroupIDList (24), + id-ServedCellsToAdd (25), + id-ServedCellsToModify (26), + id-ServedCellsToDelete (27), + id-Registration-Request (28), + id-CellToReport (29), + id-ReportingPeriodicity (30), + id-CellToReport-Item (31), + id-CellMeasurementResult (32), + id-CellMeasurementResult-Item (33), + id-GUGroupIDToAddList (34), + id-GUGroupIDToDeleteList (35), + id-SRVCCOperationPossible (36), + id-Measurement-ID (37), + id-ReportCharacteristics (38), + id-ENB1-Measurement-ID (39), + id-ENB2-Measurement-ID (40), + id-Number-of-Antennaports (41), + id-CompositeAvailableCapacityGroup (42), + id-ENB1-Cell-ID (43), + id-ENB2-Cell-ID (44), + id-ENB2-Proposed-Mobility-Parameters (45), + id-ENB1-Mobility-Parameters (46), + id-ENB2-Mobility-Parameters-Modification-Range (47), + id-FailureCellPCI (48), + id-Re-establishmentCellECGI (49), + id-FailureCellCRNTI (50), + id-ShortMAC-I (51), + id-SourceCellECGI (52), + id-FailureCellECGI (53), + id-HandoverReportType (54), + id-PRACH-Configuration (55), + id-MBSFN-Subframe-Info (56), + id-ServedCellsToActivate (57), + id-ActivatedCellList (58), + id-DeactivationIndication (59), + id-UE-RLF-Report-Container (60), + id-ABSInformation (61), + id-InvokeIndication (62), + id-ABS-Status (63), + id-PartialSuccessIndicator (64), + id-MeasurementInitiationResult-List (65), + id-MeasurementInitiationResult-Item (66), + id-MeasurementFailureCause-Item (67), + id-CompleteFailureCauseInformation-List (68), + id-CompleteFailureCauseInformation-Item (69), + id-CSG-Id (70), + id-CSGMembershipStatus (71), + id-MDTConfiguration (72), + id-ManagementBasedMDTallowed (74), + id-RRCConnSetupIndicator (75), + id-NeighbourTAC (76), + id-Time-UE-StayedInCell-EnhancedGranularity (77), + id-RRCConnReestabIndicator (78), + id-MBMS-Service-Area-List (79), + id-HO-cause (80), + id-TargetCellInUTRAN (81), + id-MultibandInfoList (84) +} (0..x2ap-maxProtocolIEs) X2ap-TriggeringMessage ::= ENUMERATED { initiating-message, successful-outcome, unsuccessful-outcome} -END \ No newline at end of file +END diff --git a/openair2/X2AP/MESSAGES/ASN1/R11.2/X2AP-IEs.asn b/openair2/X2AP/MESSAGES/ASN1/R11.2/X2AP-IEs.asn index f410853d33..c76319bb71 100755 --- a/openair2/X2AP/MESSAGES/ASN1/R11.2/X2AP-IEs.asn +++ b/openair2/X2AP/MESSAGES/ASN1/R11.2/X2AP-IEs.asn @@ -24,11 +24,12 @@ IMPORTS id-Time-UE-StayedInCell-EnhancedGranularity, id-MBMS-Service-Area-List, id-HO-cause, - x2ap-maxnoofBearers, x2ap-maxCellineNB, x2ap-maxEARFCN, x2ap-maxInterfaces, + x2ap-maxFailedMeasObjects, x2ap-maxnoofBands, + x2ap-maxnoofBearers, x2ap-maxnoofBPLMNs, x2ap-maxnoofCells, x2ap-maxnoofEPLMNs, @@ -54,9 +55,9 @@ FROM X2AP-CommonDataTypes -- ProtocolExtensionContainer{}, -- ProtocolIE-Single-Container{}, --- X2AP-PROTOCOL-EXTENSION, + X2AP-PROTOCOL-EXTENSION -- X2AP-PROTOCOL-IES ---FROM X2AP-Containers +FROM X2AP-Containers X2ap-IE FROM X2AP-PDU; @@ -65,6 +66,13 @@ FROM X2AP-PDU; X2ap-IE-Extensions ::= SEQUENCE (SIZE (1..x2ap-maxProtocolExtensions)) OF X2ap-IE -- A +X2ap-ActivatedCellList ::= SEQUENCE (SIZE (1..x2ap-maxCellineNB)) OF X2ap-ActivatedCellList-Item +X2ap-ActivatedCellList-Item ::= SEQUENCE { + ecgi X2ap-ECGI, +--EURECOM COMMENT, ADDED NEXT LINE iE-Extensions ProtocolExtensionContainer { { X2ap-ActivatedCellList-Item-ExtIEs} } OPTIONAL, + iE-Extensions X2ap-IE-Extensions OPTIONAL, + ... +} X2ap-ABSInformation ::= CHOICE { fdd X2ap-ABSInformationFDD, @@ -254,6 +262,38 @@ X2ap-CellType ::= SEQUENCE { X2ap-CellType-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { ... } +X2ap-CellToReport-List ::= SEQUENCE (SIZE (1..x2ap-maxCellineNB)) OF X2ap-IE +--ProtocolIE-Single-Container { {X2ap-CellToReport-ItemIEs} } + +X2ap-CellToReport-Item ::= SEQUENCE { + cell-ID X2ap-ECGI, +--EURECOM COMMENT, ADDED NEXT LINE iE-Extensions X2ap-ProtocolExtensionContainer { {CellToReport-Item-ExtIEs} } OPTIONAL, + iE-Extensions X2ap-IE-Extensions OPTIONAL, + ... +} + +X2ap-MeasurementFailureCause-List ::= SEQUENCE (SIZE (1..x2ap-maxFailedMeasObjects)) OF X2ap-IE + +X2ap-MeasurementFailureCause-Item ::= SEQUENCE { + measurementFailedReportCharacteristics X2ap-ReportCharacteristics, + cause X2ap-Cause, +--EURECOM COMMENT, ADDED NEXT LINE iE-Extensions ProtocolExtensionContainer { { X2ap-MeasurementFailureCause-Item-ExtIEs} } OPTIONAL, + iE-Extensions X2ap-IE-Extensions OPTIONAL, + ... +} + +X2ap-CellInformation-List ::= SEQUENCE (SIZE (1..x2ap-maxCellineNB)) OF X2ap-IE +--ProtocolIE-Single-Container { {X2ap-CellInformation-ItemIEs} } + +X2ap-CellInformation-Item ::= SEQUENCE { + cell-ID X2ap-ECGI, + ul-InterferenceOverloadIndication X2ap-UL-InterferenceOverloadIndication OPTIONAL, + ul-HighInterferenceIndicationInfo X2ap-UL-HighInterferenceIndicationInfo OPTIONAL, + relativeNarrowbandTxPower X2ap-RelativeNarrowbandTxPower OPTIONAL, +--EURECOM COMMENT, ADDED NEXT LINE iE-Extensions ProtocolExtensionContainer { {X2ap-CellInformation-Item-ExtIEs} } OPTIONAL, + iE-Extensions X2ap-IE-Extensions OPTIONAL, + ... +} X2ap-CompositeAvailableCapacityGroup ::= SEQUENCE { dL-CompositeAvailableCapacity X2ap-CompositeAvailableCapacity, @@ -291,6 +331,29 @@ X2ap-COUNTvalue-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { ... } +X2ap-CompleteFailureCauseInformation-List ::= SEQUENCE (SIZE (1..x2ap-maxCellineNB)) OF X2ap-IE +--ProtocolIE-Single-Container { {X2ap-CompleteFailureCauseInformation-ItemIEs} } + +X2ap-CompleteFailureCauseInformation-Item ::= SEQUENCE { + cell-ID X2ap-ECGI, + measurementFailureCause-List X2ap-MeasurementFailureCause-List, +--EURECOM COMMENT, ADDED NEXT LINE iE-Extensions ProtocolExtensionContainer { { X2ap-CompleteFailureCauseInformation-Item-ExtIEs} } OPTIONAL, + iE-Extensions X2ap-IE-Extensions OPTIONAL, + ... +} + +X2ap-CellMeasurementResult-List ::= SEQUENCE (SIZE (1..x2ap-maxCellineNB)) OF X2ap-IE +--ProtocolIE-Single-Container { {X2ap-CellMeasurementResult-ItemIEs} } + +X2ap-CellMeasurementResult-Item ::= SEQUENCE { + cell-ID X2ap-ECGI, + hWLoadIndicator X2ap-HWLoadIndicator OPTIONAL, + s1TNLLoadIndicator X2ap-S1TNLLoadIndicator OPTIONAL, + radioResourceStatus X2ap-RadioResourceStatus OPTIONAL, +--EURECOM COMMENT, ADDED NEXT LINE iE-Extensions X2ap-ProtocolExtensionContainer { {X2ap-CellMeasurementResult-Item-ExtIEs} } OPTIONAL, + iE-Extensions X2ap-IE-Extensions OPTIONAL, + ... +} X2ap-CriticalityDiagnostics ::= SEQUENCE { procedureCode X2ap-ProcedureCode OPTIONAL, @@ -455,6 +518,44 @@ X2ap-E-RAB-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { ... } +X2ap-E-RABs-ToBeSetup-List ::= SEQUENCE (SIZE(1..x2ap-maxnoofBearers)) OF X2ap-IE + +X2ap-E-RABs-ToBeSetup-Item ::= SEQUENCE { + e-RAB-ID X2ap-E-RAB-ID, + e-RAB-Level-QoS-Parameters X2ap-E-RAB-Level-QoS-Parameters, + dL-Forwarding X2ap-DL-Forwarding OPTIONAL, + uL-GTPtunnelEndpoint X2ap-GTPtunnelEndpoint, +--EURECOM COMMENT, ADDED NEXT LINE iE-Extensions ProtocolExtensionContainer { {X2ap-E-RABs-ToBeSetup-ItemExtIEs} } OPTIONAL, + iE-Extensions X2ap-IE-Extensions OPTIONAL, + ... +} + +X2ap-E-RABs-Admitted-List ::= SEQUENCE (SIZE (1..x2ap-maxnoofBearers)) OF X2ap-IE +--ProtocolIE-Single-Container { {X2ap-E-RABs-Admitted-ItemIEs} } + +X2ap-E-RABs-Admitted-Item ::= SEQUENCE { + e-RAB-ID X2ap-E-RAB-ID, + uL-GTP-TunnelEndpoint X2ap-GTPtunnelEndpoint OPTIONAL, + dL-GTP-TunnelEndpoint X2ap-GTPtunnelEndpoint OPTIONAL, +--EURECOM COMMENT, ADDED NEXT LINE iE-Extensions ProtocolExtensionContainer { {X2ap-E-RABs-Admitted-Item-ExtIEs} } OPTIONAL, + iE-Extensions X2ap-IE-Extensions OPTIONAL, + ... +} + +X2ap-E-RABs-SubjectToStatusTransfer-List ::= SEQUENCE (SIZE (1..x2ap-maxnoofBearers)) OF X2ap-IE +--ProtocolIE-Single-Container { { X2ap-E-RABs-SubjectToStatusTransfer-ItemIEs} } + +X2ap-E-RABs-SubjectToStatusTransfer-Item ::= SEQUENCE { + e-RAB-ID X2ap-E-RAB-ID, + + receiveStatusofULPDCPSDUs X2ap-ReceiveStatusofULPDCPSDUs OPTIONAL, + uL-COUNTvalue X2ap-COUNTvalue, + dL-COUNTvalue X2ap-COUNTvalue, +--EURECOM COMMENT, ADDED NEXT LINE iE-Extensions ProtocolExtensionContainer { {X2ap-E-RABs-SubjectToStatusTransfer-ItemExtIEs} } OPTIONAL, + iE-Extensions X2ap-IE-Extensions OPTIONAL, + ... +} + X2ap-EUTRANCellIdentifier ::= BIT STRING (SIZE (28)) X2ap-EUTRANTraceID ::= OCTET STRING (SIZE (8)) @@ -709,6 +810,18 @@ X2ap-MDT-Activation ::= ENUMERATED { ... } + +X2ap-MeasurementInitiationResult-List ::= SEQUENCE (SIZE (1..x2ap-maxCellineNB)) OF X2ap-IE +--ProtocolIE-Single-Container { { X2ap-MeasurementInitiationResult-ItemIEs} } + +X2ap-MeasurementInitiationResult-Item ::= SEQUENCE { + cell-ID X2ap-ECGI, + measurementFailureCause-List X2ap-MeasurementFailureCause-List OPTIONAL, +--EURECOM COMMENT, ADDED NEXT LINE iE-Extensions ProtocolExtensionContainer { { X2ap-MeasurementInitiationResult-Item-ExtIEs} } OPTIONAL, + iE-Extensions X2ap-IE-Extensions OPTIONAL, + ... +} + X2ap-MDT-Configuration ::= SEQUENCE { mdt-Activation X2ap-MDT-Activation, areaScopeOfMDT X2ap-AreaScopeOfMDT, @@ -816,9 +929,15 @@ X2ap-Number-of-Antennaports ::= ENUMERATED { -- O +X2ap-Old-ECGIs::= SEQUENCE (SIZE (1..x2ap-maxCellineNB)) OF X2ap-ECGI + X2ap-Oneframe ::= BIT STRING (SIZE (6)) -- P +X2ap-PartialSuccessIndicator ::= ENUMERATED { + partial-success-allowed, +... +} X2ap-PDCP-SN ::= INTEGER (0..4095) @@ -871,6 +990,14 @@ X2ap-QCI ::= INTEGER (0..255) -- R +X2ap-ReportingPeriodicity ::= ENUMERATED { + one-thousand-ms, + two-thousand-ms, + five-thousand-ms, + ten-thousand-ms, +... +} + X2ap-RadioframeAllocationOffset ::= INTEGER (0..7, ...) X2ap-RadioframeAllocationPeriod ::= ENUMERATED{ @@ -975,6 +1102,14 @@ X2ap-RRCConnSetupIndicator::= ENUMERATED { } -- S +X2ap-ServedCellsToActivate::= SEQUENCE (SIZE (1..x2ap-maxCellineNB)) OF X2ap-ServedCellsToActivate-Item + +X2ap-ServedCellsToActivate-Item ::= SEQUENCE { + ecgi X2ap-ECGI, +--EURECOM COMMENT, ADDED NEXT LINE iE-Extensions ProtocolExtensionContainer { { X2ap-ServedCellsToActivate-Item-ExtIEs} } OPTIONAL, + iE-Extensions X2ap-IE-Extensions OPTIONAL, + ... +} X2ap-S1TNLLoadIndicator ::= SEQUENCE { dLS1TNLLoadIndicator X2ap-LoadIndicator, @@ -991,10 +1126,10 @@ X2ap-S1TNLLoadIndicator-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { -X2ap-ServedCells ::= SEQUENCE (SIZE (1.. x2ap-maxCellineNB)) OF ServedCellItem +X2ap-ServedCells ::= SEQUENCE (SIZE (1.. x2ap-maxCellineNB)) OF X2ap-ServedCellItem -ServedCellItem ::= SEQUENCE { +X2ap-ServedCellItem ::= SEQUENCE { servedCellInfo X2ap-ServedCell-Information, neighbour-Info X2ap-Neighbour-Information OPTIONAL, --EURECOM COMMENT, ADDED NEXT LINE iE-Extensions ProtocolExtensionContainer { {ServedCell-ExtIEs} } OPTIONAL, @@ -1006,6 +1141,17 @@ X2ap-ServedCell-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { ... } +X2ap-ServedCellsToModify::= SEQUENCE (SIZE (1..x2ap-maxCellineNB)) OF X2ap-ServedCellsToModify-Item + +X2ap-ServedCellsToModify-Item ::= SEQUENCE { + old-ecgi X2ap-ECGI, + servedCellInfo X2ap-ServedCell-Information, + neighbour-Info X2ap-Neighbour-Information OPTIONAL, +--EURECOM COMMENT, ADDED NEXT LINE iE-Extensions ProtocolExtensionContainer { { X2ap-ServedCellsToModify-Item-ExtIEs} } OPTIONAL, + iE-Extensions X2ap-IE-Extensions OPTIONAL, + ... +} + X2ap-ServedCell-Information ::= SEQUENCE { pCI X2ap-PCI, cellId X2ap-ECGI, @@ -1214,6 +1360,21 @@ X2ap-UESecurityCapabilities-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { ... } +X2ap-UE-ContextInformation ::= SEQUENCE { + mME-UE-S1AP-ID X2ap-UE-S1AP-ID, + uESecurityCapabilities X2ap-UESecurityCapabilities, + aS-SecurityInformation X2ap-AS-SecurityInformation, + uEaggregateMaximumBitRate X2ap-UEAggregateMaximumBitRate, + subscriberProfileIDforRFP X2ap-SubscriberProfileIDforRFP OPTIONAL, + e-RABs-ToBeSetup-List X2ap-E-RABs-ToBeSetup-List, + rRC-Context X2ap-RRC-Context, + handoverRestrictionList X2ap-HandoverRestrictionList OPTIONAL, + locationReportingInformation X2ap-LocationReportingInformation OPTIONAL, +--EURECOM COMMENT, ADDED NEXT LINE iE-Extensions ProtocolExtensionContainer { {X2ap-UE-ContextInformation-ExtIEs} } OPTIONAL, + iE-Extensions X2ap-IE-Extensions OPTIONAL, + ... +} + X2ap-UL-GBR-PRB-usage::= INTEGER (0..100) X2ap-UL-non-GBR-PRB-usage::= INTEGER (0..100) diff --git a/openair2/X2AP/MESSAGES/ASN1/R11.2/X2AP-PDU-Contents.asn b/openair2/X2AP/MESSAGES/ASN1/R11.2/X2AP-PDU-Contents.asn index 3a055d9efb..d0a3546a15 100755 --- a/openair2/X2AP/MESSAGES/ASN1/R11.2/X2AP-PDU-Contents.asn +++ b/openair2/X2AP/MESSAGES/ASN1/R11.2/X2AP-PDU-Contents.asn @@ -196,32 +196,18 @@ X2ap-HandoverRequest ::= SEQUENCE { } X2ap-HandoverRequest-IEs X2AP-PROTOCOL-IES ::= { - { ID id-Old-eNB-UE-X2AP-ID CRITICALITY reject TYPE X2ap-X2ap-UE-X2AP-ID PRESENCE mandatory }| - { ID id-Cause CRITICALITY ignore TYPE X2ap-X2ap-Cause PRESENCE mandatory }| - { ID id-TargetCell-ID CRITICALITY reject TYPE X2ap-X2ap-ECGI PRESENCE mandatory }| - { ID id-GUMMEI-ID CRITICALITY reject TYPE X2ap-X2ap-GUMMEI PRESENCE mandatory }| - { ID id-UE-ContextInformation CRITICALITY reject TYPE X2ap-X2ap-UE-ContextInformation PRESENCE mandatory }| - { ID id-UE-HistoryInformation CRITICALITY ignore TYPE X2ap-X2ap-UE-HistoryInformation PRESENCE mandatory }| - { ID id-TraceActivation CRITICALITY ignore TYPE X2ap-X2ap-TraceActivation PRESENCE optional}| - { ID id-SRVCCOperationPossible CRITICALITY ignore TYPE X2ap-X2ap-SRVCCOperationPossible PRESENCE optional}| - { ID id-CSGMembershipStatus CRITICALITY reject TYPE X2ap-X2ap-CSGMembershipStatus PRESENCE optional}, + { ID id-Old-eNB-UE-X2AP-ID CRITICALITY reject TYPE X2ap-UE-X2AP-ID PRESENCE mandatory }| + { ID id-Cause CRITICALITY ignore TYPE X2ap-Cause PRESENCE mandatory }| + { ID id-TargetCell-ID CRITICALITY reject TYPE X2ap-ECGI PRESENCE mandatory }| + { ID id-GUMMEI-ID CRITICALITY reject TYPE X2ap-GUMMEI PRESENCE mandatory }| + { ID id-UE-ContextInformation CRITICALITY reject TYPE X2ap-UE-ContextInformation PRESENCE mandatory }| + { ID id-UE-HistoryInformation CRITICALITY ignore TYPE X2ap-UE-HistoryInformation PRESENCE mandatory }| + { ID id-TraceActivation CRITICALITY ignore TYPE X2ap-TraceActivation PRESENCE optional}| + { ID id-SRVCCOperationPossible CRITICALITY ignore TYPE X2ap-SRVCCOperationPossible PRESENCE optional}| + { ID id-CSGMembershipStatus CRITICALITY reject TYPE X2ap-CSGMembershipStatus PRESENCE optional}, ... } -X2ap-UE-ContextInformation ::= SEQUENCE { - mME-UE-S1AP-ID X2ap-UE-S1AP-ID, - uESecurityCapabilities X2ap-UESecurityCapabilities, - aS-SecurityInformation X2ap-AS-SecurityInformation, - uEaggregateMaximumBitRate X2ap-UEAggregateMaximumBitRate, - subscriberProfileIDforRFP X2ap-SubscriberProfileIDforRFP OPTIONAL, - e-RABs-ToBeSetup-List X2ap-E-RABs-ToBeSetup-List, - rRC-Context X2ap-RRC-Context, - handoverRestrictionList X2ap-HandoverRestrictionList OPTIONAL, - locationReportingInformation X2ap-LocationReportingInformation OPTIONAL, ---EURECOM COMMENT, ADDED NEXT LINE iE-Extensions ProtocolExtensionContainer { {X2ap-UE-ContextInformation-ExtIEs} } OPTIONAL, - iE-Extensions X2ap-IE-Extensions OPTIONAL, - ... -} X2ap-UE-ContextInformation-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { { ID id-ManagementBasedMDTallowed CRITICALITY ignore EXTENSION X2ap-ManagementBasedMDTallowed PRESENCE optional }, @@ -231,17 +217,7 @@ X2ap-UE-ContextInformation-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { X2ap-E-RABs-ToBeSetup-List ::= SEQUENCE (SIZE(1..x2ap-maxnoofBearers)) OF ProtocolIE-Single-Container { {X2ap-E-RABs-ToBeSetup-ItemIEs} } X2ap-E-RABs-ToBeSetup-ItemIEs X2AP-PROTOCOL-IES ::= { - { ID id-E-RABs-ToBeSetup-Item CRITICALITY ignore TYPE X2ap-X2ap-E-RABs-ToBeSetup-Item PRESENCE mandatory }, - ... -} - -X2ap-E-RABs-ToBeSetup-Item ::= SEQUENCE { - e-RAB-ID X2ap-E-RAB-ID, - e-RAB-Level-QoS-Parameters X2ap-E-RAB-Level-QoS-Parameters, - dL-Forwarding X2ap-DL-Forwarding OPTIONAL, - uL-GTPtunnelEndpoint X2ap-GTPtunnelEndpoint, ---EURECOM COMMENT, ADDED NEXT LINE iE-Extensions ProtocolExtensionContainer { {X2ap-E-RABs-ToBeSetup-ItemExtIEs} } OPTIONAL, - iE-Extensions X2ap-IE-Extensions OPTIONAL, + { ID id-E-RABs-ToBeSetup-Item CRITICALITY ignore TYPE X2ap-E-RABs-ToBeSetup-Item PRESENCE mandatory }, ... } @@ -263,12 +239,12 @@ X2ap-HandoverRequestAcknowledge ::= SEQUENCE { } X2ap-HandoverRequestAcknowledge-IEs X2AP-PROTOCOL-IES ::= { - { ID id-Old-eNB-UE-X2AP-ID CRITICALITY ignore TYPE X2ap-X2ap-UE-X2AP-ID PRESENCE mandatory} | - { ID id-New-eNB-UE-X2AP-ID CRITICALITY ignore TYPE X2ap-X2ap-UE-X2AP-ID PRESENCE mandatory} | - { ID id-E-RABs-Admitted-List CRITICALITY ignore TYPE X2ap-X2ap-E-RABs-Admitted-List PRESENCE mandatory} | - { ID id-E-RABs-NotAdmitted-List CRITICALITY ignore TYPE X2ap-X2ap-E-RAB-List PRESENCE optional} | - { ID id-TargeteNBtoSource-eNBTransparentContainer CRITICALITY ignore TYPE X2ap-X2ap-TargeteNBtoSource-eNBTransparentContainer PRESENCE mandatory }| - { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE X2ap-X2ap-CriticalityDiagnostics PRESENCE optional }, + { ID id-Old-eNB-UE-X2AP-ID CRITICALITY ignore TYPE X2ap-UE-X2AP-ID PRESENCE mandatory} | + { ID id-New-eNB-UE-X2AP-ID CRITICALITY ignore TYPE X2ap-UE-X2AP-ID PRESENCE mandatory} | + { ID id-E-RABs-Admitted-List CRITICALITY ignore TYPE X2ap-E-RABs-Admitted-List PRESENCE mandatory} | + { ID id-E-RABs-NotAdmitted-List CRITICALITY ignore TYPE X2ap-E-RAB-List PRESENCE optional} | + { ID id-TargeteNBtoSource-eNBTransparentContainer CRITICALITY ignore TYPE X2ap-TargeteNBtoSource-eNBTransparentContainer PRESENCE mandatory }| + { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE X2ap-CriticalityDiagnostics PRESENCE optional }, ... } @@ -278,15 +254,6 @@ X2ap-E-RABs-Admitted-ItemIEs X2AP-PROTOCOL-IES ::= { { ID id-E-RABs-Admitted-Item CRITICALITY ignore TYPE X2ap-E-RABs-Admitted-Item PRESENCE mandatory } } -X2ap-E-RABs-Admitted-Item ::= SEQUENCE { - e-RAB-ID X2ap-E-RAB-ID, - uL-GTP-TunnelEndpoint X2ap-GTPtunnelEndpoint OPTIONAL, - dL-GTP-TunnelEndpoint X2ap-GTPtunnelEndpoint OPTIONAL, ---EURECOM COMMENT, ADDED NEXT LINE iE-Extensions ProtocolExtensionContainer { {X2ap-E-RABs-Admitted-Item-ExtIEs} } OPTIONAL, - iE-Extensions X2ap-IE-Extensions OPTIONAL, - ... -} - X2ap-E-RABs-Admitted-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { ... } @@ -323,7 +290,7 @@ X2ap-HandoverReport ::= SEQUENCE { ... } -HandoverReport-IEs X2AP-PROTOCOL-IES ::= { +X2ap-HandoverReport-IEs X2AP-PROTOCOL-IES ::= { { ID id-HandoverReportType CRITICALITY ignore TYPE X2ap-HandoverReportTYPE X2ap-PRESENCE mandatory}| { ID id-Cause CRITICALITY ignore TYPE X2ap-Cause PRESENCE mandatory} | { ID id-SourceCellECGI CRITICALITY ignore TYPE X2ap-ECGI PRESENCE mandatory}| @@ -357,17 +324,6 @@ X2ap-E-RABs-SubjectToStatusTransfer-ItemIEs X2AP-PROTOCOL-IES ::= { { ID id-E-RABs-SubjectToStatusTransfer-Item CRITICALITY ignore TYPE X2ap-E-RABs-SubjectToStatusTransfer-Item PRESENCE mandatory } } -X2ap-E-RABs-SubjectToStatusTransfer-Item ::= SEQUENCE { - e-RAB-ID X2ap-E-RAB-ID, - - receiveStatusofULPDCPSDUs X2ap-ReceiveStatusofULPDCPSDUs OPTIONAL, - uL-COUNTvalue X2ap-COUNTvalue, - dL-COUNTvalue X2ap-COUNTvalue, ---EURECOM COMMENT, ADDED NEXT LINE iE-Extensions ProtocolExtensionContainer { {X2ap-E-RABs-SubjectToStatusTransfer-ItemExtIEs} } OPTIONAL, - iE-Extensions X2ap-IE-Extensions OPTIONAL, - ... -} - X2ap-E-RABs-SubjectToStatusTransfer-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { ... } @@ -469,12 +425,12 @@ X2ap-ResetResponse-IEs X2AP-PROTOCOL-IES ::= { -- -- ************************************************************** -X2ap-X2SetupRequest ::= SEQUENCE { - protocolIEs ProtocolIE-Container {{X2ap-X2SetupRequest-IEs}}, +X2SetupRequest ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{X2SetupRequest-IEs}}, ... } -X2ap-X2SetupRequest-IEs X2AP-PROTOCOL-IES ::= { +X2SetupRequest-IEs X2AP-PROTOCOL-IES ::= { { ID id-GlobalENB-ID CRITICALITY reject TYPE X2ap-GlobalENB-ID PRESENCE mandatory} | { ID id-ServedCells CRITICALITY reject TYPE X2ap-ServedCells PRESENCE mandatory} | { ID id-GUGroupIDList CRITICALITY reject TYPE X2ap-GUGroupIDList PRESENCE optional}, @@ -489,12 +445,12 @@ X2ap-X2SetupRequest-IEs X2AP-PROTOCOL-IES ::= { -- -- ************************************************************** -X2ap-X2SetupResponse ::= SEQUENCE { - protocolIEs ProtocolIE-Container {{X2ap-X2SetupResponse-IEs}}, +X2SetupResponse ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{X2SetupResponse-IEs}}, ... } -X2ap-X2SetupResponse-IEs X2AP-PROTOCOL-IES ::= { +X2SetupResponse-IEs X2AP-PROTOCOL-IES ::= { { ID id-GlobalENB-ID CRITICALITY reject TYPE X2ap-GlobalENB-ID PRESENCE mandatory} | { ID id-ServedCells CRITICALITY reject TYPE X2ap-ServedCells PRESENCE mandatory} | { ID id-GUGroupIDList CRITICALITY reject TYPE X2ap-GUGroupIDList PRESENCE optional}| @@ -510,12 +466,12 @@ X2ap-X2SetupResponse-IEs X2AP-PROTOCOL-IES ::= { -- -- ************************************************************** -X2ap-X2SetupFailure ::= SEQUENCE { - protocolIEs ProtocolIE-Container {{X2ap-X2SetupFailure-IEs}}, +X2SetupFailure ::= SEQUENCE { + protocolIEs ProtocolIE-Container {{X2SetupFailure-IEs}}, ... } -X2ap-X2SetupFailure-IEs X2AP-PROTOCOL-IES ::= { +X2SetupFailure-IEs X2AP-PROTOCOL-IES ::= { { ID id-Cause CRITICALITY ignore TYPE X2ap-Cause PRESENCE mandatory} | { ID id-TimeToWait CRITICALITY ignore TYPE X2ap-TimeToWait PRESENCE optional} | { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE X2ap-CriticalityDiagnostics PRESENCE optional }, @@ -547,15 +503,6 @@ X2ap-CellInformation-ItemIEs X2AP-PROTOCOL-IES ::= { { ID id-CellInformation-Item CRITICALITY ignore TYPE X2ap-CellInformation-Item PRESENCE mandatory } } -X2ap-CellInformation-Item ::= SEQUENCE { - cell-ID ECGI, - ul-InterferenceOverloadIndication X2ap-UL-InterferenceOverloadIndication OPTIONAL, - ul-HighInterferenceIndicationInfo X2ap-UL-HighInterferenceIndicationInfo OPTIONAL, - relativeNarrowbandTxPower X2ap-RelativeNarrowbandTxPower OPTIONAL, ---EURECOM COMMENT, ADDED NEXT LINE iE-Extensions ProtocolExtensionContainer { {X2ap-CellInformation-Item-ExtIEs} } OPTIONAL, - iE-Extensions X2ap-IE-Extensions OPTIONAL, - ... -} X2ap-CellInformation-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { { ID id-ABSInformation CRITICALITY ignore EXTENSION X2ap-ABSInformation PRESENCE optional }| @@ -585,23 +532,12 @@ X2ap-ENBConfigurationUpdate-IEs X2AP-PROTOCOL-IES ::= { X2ap-ServedCellsToModify::= SEQUENCE (SIZE (1..x2ap-maxCellineNB)) OF X2ap-ServedCellsToModify-Item -X2ap-ServedCellsToModify-Item::= SEQUENCE { - old-ecgi X2ap-ECGI, - servedCellInfo X2ap-ServedCell-Information, - neighbour-Info X2ap-Neighbour-Information OPTIONAL, ---EURECOM COMMENT, ADDED NEXT LINE iE-Extensions ProtocolExtensionContainer { { X2ap-ServedCellsToModify-Item-ExtIEs} } OPTIONAL, - iE-Extensions X2ap-IE-Extensions OPTIONAL, - ... -} ServedCellsToModify-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { { ID id-DeactivationIndication CRITICALITY ignore EXTENSION X2ap-DeactivationIndication PRESENCE optional }, ... } -X2ap- -Old-ECGIs::= SEQUENCE (SIZE (1..x2ap-maxCellineNB)) OF X2ap-ECGI - -- ************************************************************** -- -- ENB CONFIGURATION UPDATE ACKNOWLEDGE @@ -667,12 +603,7 @@ X2ap-CellToReport-ItemIEs X2AP-PROTOCOL-IES ::= { { ID id-CellToReport-Item CRITICALITY ignore TYPE X2ap-CellToReport-Item PRESENCE mandatory } } -X2ap-CellToReport-Item ::= SEQUENCE { - cell-ID X2ap-ECGI, ---EURECOM COMMENT, ADDED NEXT LINE iE-Extensions X2ap-ProtocolExtensionContainer { {CellToReport-Item-ExtIEs} } OPTIONAL, - iE-Extensions X2ap-IE-Extensions OPTIONAL, - ... -} + X2ap-CellToReport-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { ... @@ -718,13 +649,7 @@ X2ap-MeasurementInitiationResult-ItemIEs X2AP-PROTOCOL-IES ::= { { ID id-MeasurementInitiationResult-Item CRITICALITY ignore TYPE X2ap-MeasurementInitiationResult-Item PRESENCE mandatory} } -X2ap-MeasurementInitiationResult-Item ::= SEQUENCE { - cell-ID X2ap-ECGI, - measurementFailureCause-List X2ap-MeasurementFailureCause-List OPTIONAL, ---EURECOM COMMENT, ADDED NEXT LINE iE-Extensions ProtocolExtensionContainer { { X2ap-MeasurementInitiationResult-Item-ExtIEs} } OPTIONAL, - iE-Extensions X2ap-IE-Extensions OPTIONAL, - ... -} + X2ap-MeasurementInitiationResult-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { ... @@ -736,13 +661,6 @@ X2ap-MeasurementFailureCause-ItemIEs X2AP-PROTOCOL-IES ::= { { ID id-MeasurementFailureCause-Item CRITICALITY ignore TYPE X2ap-MeasurementFailureCause-Item PRESENCE mandatory} } -X2ap-MeasurementFailureCause-Item ::= SEQUENCE { - measurementFailedReportCharacteristics X2ap-ReportCharacteristics, - cause X2ap-Cause, ---EURECOM COMMENT, ADDED NEXT LINE iE-Extensions ProtocolExtensionContainer { { X2ap-MeasurementFailureCause-Item-ExtIEs} } OPTIONAL, - iE-Extensions X2ap-IE-Extensions OPTIONAL, - ... -} X2ap-MeasurementFailureCause-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { ... @@ -774,14 +692,6 @@ X2ap-CompleteFailureCauseInformation-ItemIEs X2AP-PROTOCOL-IES ::= { { ID id-CompleteFailureCauseInformation-Item CRITICALITY ignore TYPE X2ap-CompleteFailureCauseInformation-Item PRESENCE mandatory} } -X2ap-CompleteFailureCauseInformation-Item ::= SEQUENCE { - cell-ID X2ap-ECGI, - measurementFailureCause-List X2ap-MeasurementFailureCause-List, ---EURECOM COMMENT, ADDED NEXT LINE iE-Extensions ProtocolExtensionContainer { { X2ap-CompleteFailureCauseInformation-Item-ExtIEs} } OPTIONAL, - iE-Extensions X2ap-IE-Extensions OPTIONAL, - ... -} - X2ap-CompleteFailureCauseInformation-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { ... } @@ -810,16 +720,6 @@ X2ap-CellMeasurementResult-ItemIEs X2AP-PROTOCOL-IES ::= { { ID id-CellMeasurementResult-Item CRITICALITY ignore TYPE X2ap-CellMeasurementResult-Item PRESENCE mandatory } } -X2ap-CellMeasurementResult-Item ::= SEQUENCE { - cell-ID X2ap-ECGI, - hWLoadIndicator X2ap-HWLoadIndicator OPTIONAL, - s1TNLLoadIndicator X2ap-S1TNLLoadIndicator OPTIONAL, - radioResourceStatus X2ap-RadioResourceStatus OPTIONAL, ---EURECOM COMMENT, ADDED NEXT LINE iE-Extensions X2ap-ProtocolExtensionContainer { {X2ap-CellMeasurementResult-Item-ExtIEs} } OPTIONAL, - iE-Extensions X2ap-IE-Extensions OPTIONAL, - ... -} - X2ap-CellMeasurementResult-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { { ID id-CompositeAvailableCapacityGroup CRITICALITY ignore EXTENSION X2ap-CompositeAvailableCapacityGroup PRESENCE optional}| { ID id-ABS-Status CRITICALITY ignore EXTENSION X2ap-ABS-Status PRESENCE optional}, @@ -942,12 +842,6 @@ X2ap-CellActivationRequest-IEs X2AP-PROTOCOL-IES ::= { X2ap-ServedCellsToActivate::= SEQUENCE (SIZE (1..x2ap-maxCellineNB)) OF X2ap-ServedCellsToActivate-Item -X2ap-ServedCellsToActivate-Item::= SEQUENCE { - ecgi ECGI, ---EURECOM COMMENT, ADDED NEXT LINE iE-Extensions ProtocolExtensionContainer { { X2ap-ServedCellsToActivate-Item-ExtIEs} } OPTIONAL, - iE-Extensions X2ap-IE-Extensions OPTIONAL, - ... -} X2ap-ServedCellsToActivate-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { ... @@ -972,12 +866,7 @@ X2ap-CellActivationResponse-IEs X2AP-PROTOCOL-IES ::= { X2ap-ActivatedCellList ::= SEQUENCE (SIZE (1..x2ap-maxCellineNB)) OF X2ap-ActivatedCellList-Item -X2ap-ActivatedCellList-Item::= SEQUENCE { - ecgi ECGI, ---EURECOM COMMENT, ADDED NEXT LINE iE-Extensions ProtocolExtensionContainer { { X2ap-ActivatedCellList-Item-ExtIEs} } OPTIONAL, - iE-Extensions X2ap-IE-Extensions OPTIONAL, - ... -} + X2ap-ActivatedCellList-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { ... diff --git a/openair2/X2AP/MESSAGES/ASN1/R11.2/X2AP-PDU.asn b/openair2/X2AP/MESSAGES/ASN1/R11.2/X2AP-PDU.asn index 50e2628b7c..330c19b279 100755 --- a/openair2/X2AP/MESSAGES/ASN1/R11.2/X2AP-PDU.asn +++ b/openair2/X2AP/MESSAGES/ASN1/R11.2/X2AP-PDU.asn @@ -52,52 +52,52 @@ X2ap-UnsuccessfulOutcome ::= SEQUENCE { } X2ap-HandoverRequest ::= SEQUENCE { - handoverRequest-ies SEQUENCE (SIZE (0..x2ap-maxProtocolIEs)) OF X2ap-IE, + x2ap-HandoverRequest-ies SEQUENCE (SIZE (0..x2ap-maxProtocolIEs)) OF X2ap-IE, ... } X2ap-HandoverRequestAcknowledge ::= SEQUENCE { - handoverRequestAcknowledge-ies SEQUENCE (SIZE (0..x2ap-maxProtocolIEs)) OF X2ap-IE, + x2ap-HandoverRequestAcknowledge-ies SEQUENCE (SIZE (0..x2ap-maxProtocolIEs)) OF X2ap-IE, ... } X2ap-HandoverPreparationFailure ::= SEQUENCE { - handoverPreparationFailure-ies SEQUENCE (SIZE (0..x2ap-maxProtocolIEs)) OF X2ap-IE, + x2ap-HandoverPreparationFailure-ies SEQUENCE (SIZE (0..x2ap-maxProtocolIEs)) OF X2ap-IE, ... } X2ap-SNStatusTransfer ::= SEQUENCE { - snStatusTransfer-ies SEQUENCE (SIZE (0..x2ap-maxProtocolIEs)) OF X2ap-IE, + x2ap-SNStatusTransfer-ies SEQUENCE (SIZE (0..x2ap-maxProtocolIEs)) OF X2ap-IE, ... } X2ap-UEContextRelease ::= SEQUENCE { - ueContextRelease-ies SEQUENCE (SIZE (0..x2ap-maxProtocolIEs)) OF X2ap-IE, + x2ap-UEContextRelease-ies SEQUENCE (SIZE (0..x2ap-maxProtocolIEs)) OF X2ap-IE, ... } X2ap-HandoverCancel ::= SEQUENCE { - handoverCancel-ies SEQUENCE (SIZE (0..x2ap-maxProtocolIEs)) OF X2ap-IE, + x2ap-HandoverCancel-ies SEQUENCE (SIZE (0..x2ap-maxProtocolIEs)) OF X2ap-IE, ... } X2ap-HandoverReport ::= SEQUENCE { - handoverReport-ies SEQUENCE (SIZE (0..x2ap-maxProtocolIEs)) OF X2ap-IE, + x2ap-HandoverReport-ies SEQUENCE (SIZE (0..x2ap-maxProtocolIEs)) OF X2ap-IE, ... } X2ap-ErrorIndication ::= SEQUENCE { - errorIndication-ies SEQUENCE (SIZE (0..x2ap-maxProtocolIEs)) OF X2ap-IE, + x2ap-ErrorIndication-ies SEQUENCE (SIZE (0..x2ap-maxProtocolIEs)) OF X2ap-IE, ... } X2ap-ResetRequest ::= SEQUENCE { - resetRequest-ies SEQUENCE (SIZE (0..x2ap-maxProtocolIEs)) OF X2ap-IE, + x2ap-ResetRequest-ies SEQUENCE (SIZE (0..x2ap-maxProtocolIEs)) OF X2ap-IE, ... } X2ap-ResetResponse ::= SEQUENCE { - resetResponse-ies SEQUENCE (SIZE (0..x2ap-maxProtocolIEs)) OF X2ap-IE, + x2ap-ResetResponse-ies SEQUENCE (SIZE (0..x2ap-maxProtocolIEs)) OF X2ap-IE, ... } @@ -117,83 +117,83 @@ X2SetupFailure ::= SEQUENCE { } X2ap-LoadInformation ::= SEQUENCE { - loadInformation-ies SEQUENCE (SIZE (0..x2ap-maxProtocolIEs)) OF X2ap-IE, + x2ap-LoadInformation-ies SEQUENCE (SIZE (0..x2ap-maxProtocolIEs)) OF X2ap-IE, ... } X2ap-ENBConfigurationUpdate ::= SEQUENCE { - eNBConfigurationUpdate-ies SEQUENCE (SIZE (0..x2ap-maxProtocolIEs)) OF X2ap-IE, + x2ap-ENBConfigurationUpdate-ies SEQUENCE (SIZE (0..x2ap-maxProtocolIEs)) OF X2ap-IE, ... } X2ap-ENBConfigurationUpdateAcknowledge ::= SEQUENCE { - eNBConfigurationUpdateAcknowledge-ies SEQUENCE (SIZE (0..x2ap-maxProtocolIEs)) OF X2ap-IE, + x2ap-ENBConfigurationUpdateAcknowledge-ies SEQUENCE (SIZE (0..x2ap-maxProtocolIEs)) OF X2ap-IE, ... } X2ap-ENBConfigurationUpdateFailure ::= SEQUENCE { - eNBConfigurationUpdateFailure-ies SEQUENCE (SIZE (0..x2ap-maxProtocolIEs)) OF X2ap-IE, + x2ap-ENBConfigurationUpdateFailure-ies SEQUENCE (SIZE (0..x2ap-maxProtocolIEs)) OF X2ap-IE, ... } X2ap-ResourceStatusRequest ::= SEQUENCE { - resourceStatusRequest-ies SEQUENCE (SIZE (0..x2ap-maxProtocolIEs)) OF X2ap-IE, + x2ap-ResourceStatusRequest-ies SEQUENCE (SIZE (0..x2ap-maxProtocolIEs)) OF X2ap-IE, ... } X2ap-ResourceStatusResponse ::= SEQUENCE { - resourceStatusResponse-ies SEQUENCE (SIZE (0..x2ap-maxProtocolIEs)) OF X2ap-IE, + x2ap-ResourceStatusResponse-ies SEQUENCE (SIZE (0..x2ap-maxProtocolIEs)) OF X2ap-IE, ... } X2ap-ResourceStatusFailure ::= SEQUENCE { - resourceStatusFailure-ies SEQUENCE (SIZE (0..x2ap-maxProtocolIEs)) OF X2ap-IE, + x2ap-ResourceStatusFailure-ies SEQUENCE (SIZE (0..x2ap-maxProtocolIEs)) OF X2ap-IE, ... } X2ap-ResourceStatusUpdate ::= SEQUENCE { - resourceStatusUpdate-ies SEQUENCE (SIZE (0..x2ap-maxProtocolIEs)) OF X2ap-IE, + x2ap-ResourceStatusUpdate-ies SEQUENCE (SIZE (0..x2ap-maxProtocolIEs)) OF X2ap-IE, ... } X2ap-RLFIndication ::= SEQUENCE { - rlfIndication-ies SEQUENCE (SIZE (0..x2ap-maxProtocolIEs)) OF X2ap-IE, + x2ap-RLFIndication-ies SEQUENCE (SIZE (0..x2ap-maxProtocolIEs)) OF X2ap-IE, ... } X2ap-PrivateMessage ::= SEQUENCE { - privateMessage-ies SEQUENCE (SIZE (0..x2ap-maxProtocolIEs)) OF X2ap-IE, + x2ap-PrivateMessage-ies SEQUENCE (SIZE (0..x2ap-maxProtocolIEs)) OF X2ap-IE, ... } X2ap-MobilityChangeRequest ::= SEQUENCE { - mobilityChangeRequest-ies SEQUENCE (SIZE (0..x2ap-maxProtocolIEs)) OF X2ap-IE, + x2ap-MobilityChangeRequest-ies SEQUENCE (SIZE (0..x2ap-maxProtocolIEs)) OF X2ap-IE, ... } X2ap-MobilityChangeAcknowledge ::= SEQUENCE { - mobilityChangeAcknowledge-ies SEQUENCE (SIZE (0..x2ap-maxProtocolIEs)) OF X2ap-IE, + x2ap-MobilityChangeAcknowledge-ies SEQUENCE (SIZE (0..x2ap-maxProtocolIEs)) OF X2ap-IE, ... } X2ap-MobilityChangeFailure ::= SEQUENCE { - mobilityChangeFailure-ies SEQUENCE (SIZE (0..x2ap-maxProtocolIEs)) OF X2ap-IE, + x2ap-MobilityChangeFailure-ies SEQUENCE (SIZE (0..x2ap-maxProtocolIEs)) OF X2ap-IE, ... } X2ap-CellActivationRequest ::= SEQUENCE { - cellActivationRequest-ies SEQUENCE (SIZE (0..x2ap-maxProtocolIEs)) OF X2ap-IE, + x2ap-CellActivationRequest-ies SEQUENCE (SIZE (0..x2ap-maxProtocolIEs)) OF X2ap-IE, ... } X2ap-CellActivationResponse ::= SEQUENCE { - cellActivationResponse-ies SEQUENCE (SIZE (0..x2ap-maxProtocolIEs)) OF X2ap-IE, + x2ap-CellActivationResponse-ies SEQUENCE (SIZE (0..x2ap-maxProtocolIEs)) OF X2ap-IE, ... } X2ap-CellActivationFailure ::= SEQUENCE { - cellActivationFailure-ies SEQUENCE (SIZE (0..x2ap-maxProtocolIEs)) OF X2ap-IE, + x2ap-CellActivationFailure-ies SEQUENCE (SIZE (0..x2ap-maxProtocolIEs)) OF X2ap-IE, ... } -END \ No newline at end of file +END diff --git a/openair2/X2AP/MESSAGES/ASN1/asn1tostruct.py b/openair2/X2AP/MESSAGES/ASN1/asn1tostruct.py index 479f45e91a..c298e8ae87 100644 --- a/openair2/X2AP/MESSAGES/ASN1/asn1tostruct.py +++ b/openair2/X2AP/MESSAGES/ASN1/asn1tostruct.py @@ -3,7 +3,7 @@ import datetime import getopt import getpass -version = "1.0.0" +version = "1.0.2" lines = "" iesDefs = {} @@ -19,6 +19,7 @@ WARN = '\033[93m' ENDC = '\033[0m' fileprefix = "" +fileprefix_first_upper = "" def printFail(string): sys.stderr.write(FAIL + string + ENDC + "\n") @@ -87,7 +88,7 @@ def lowerFirstCamelWord(word): for c in swapped: if c in string.lowercase: newstr += c - idx += 1 + idx += 1 else: break if idx < 2: @@ -164,6 +165,8 @@ if len(iesDefs) == 0: printFail("No Information Element parsed, exiting") sys.exit(0) +fileprefix_first_upper = fileprefix[0].upper() + fileprefix[1:] + f = open(outdir + fileprefix + '_ies_defs.h', 'w') outputHeaderToFile(f, filename) f.write("#include \"%s_common.h\"\n\n" % (fileprefix)) @@ -223,9 +226,9 @@ for key in iesDefs: f.write("} %s_t;\n\n" % (re.sub('-', '_', key))) f.write("typedef struct %s_message_s {\n" % (fileprefix)) -f.write(" ProcedureCode_t procedureCode;\n") -f.write(" Criticality_t criticality;\n") -f.write(" uint8_t direction;\n") +f.write(" %s_ProcedureCode_t procedureCode;\n" % (fileprefix_first_upper)) +f.write(" %s_Criticality_t criticality;\n" % (fileprefix_first_upper)) +f.write(" uint8_t direction;\n") f.write(" union {\n") messageList = iesDefs.keys() @@ -301,7 +304,8 @@ for key in iesDefs: f.write(" * \\param file File descriptor to write output.\n") f.write(" **/\n") f.write("asn_enc_rval_t %s_xer_print_%s(\n" % (fileprefix, re.sub('item', 'list', firstlower.lower()))) - f.write(" FILE *file,\n") + f.write(" asn_app_consume_bytes_f *cb,\n") + f.write(" void *app_key,\n") f.write(" %sIEs_t *%sIEs);\n\n" % (re.sub('item', 'list', asn1cStruct), firstlower)) else: f.write("/** \\brief Display %s message using XER encoding.\n" % (asn1cStruct)) @@ -309,8 +313,13 @@ for key in iesDefs: f.write(" * \\param file File descriptor to write output.\n") f.write(" **/\n") f.write("asn_enc_rval_t %s_xer_print_%s(\n" % (fileprefix, firstlower.lower())) - f.write(" FILE *file,\n") + f.write(" asn_app_consume_bytes_f *cb,\n") + f.write(" void *app_key,\n") f.write(" %s_message *message_p);\n\n" % (fileprefix)) + +f.write("int %s_xer__print2sp(const void *buffer, size_t size, void *app_key);\n\n" % (fileprefix.lower())) +f.write("int %s_xer__print2fp(const void *buffer, size_t size, void *app_key);\n\n" % (fileprefix.lower())) +f.write("extern size_t %s_string_total_size;\n\n" % (fileprefix.lower())) f.write("#endif /* %s_IES_DEFS_H_ */\n\n" % (fileprefix.upper())) #Generate Decode functions @@ -353,7 +362,7 @@ for key in iesDefs: f.write(" %s_DEBUG(\"Decoding message %s (%%s:%%d)\\n\", __FILE__, __LINE__);\n\n" % (fileprefix.upper(), re.sub('-', '_', keyName))) f.write(" ANY_to_type_aper(any_p, &asn_DEF_%s, (void**)&%s_p);\n\n" % (asn1cStruct, asn1cStructfirstlower)) f.write(" for (i = 0; i < %s_p->%slist.count; i++) {\n" % (asn1cStructfirstlower, iesaccess)) - f.write(" IE_t *ie_p;\n") + f.write(" %s_IE_t *ie_p;\n" % (fileprefix[0].upper() + fileprefix[1:])) f.write(" ie_p = %s_p->%slist.array[i];\n" % (asn1cStructfirstlower, iesaccess)) f.write(" switch(ie_p->id) {\n") for ie in iesDefs[key]["ies"]: @@ -368,7 +377,7 @@ for key in iesDefs: f.write(" /* Optional field */\n") elif ie[3] == "conditional": f.write(" /* Conditional field */\n") - f.write(" case ProtocolIE_ID_%s:\n" % (re.sub('-', '_', ie[0]))) + f.write(" case %s_ProtocolIE_ID_%s:\n" % (fileprefix_first_upper, re.sub('-', '_', ie[0]))) f.write(" {\n") f.write(" %s_t *%s_p = NULL;\n" % (ietypeunderscore, lowerFirstCamelWord(ietypesubst))) if ie[3] != "mandatory": @@ -416,12 +425,12 @@ for key in iesDefs: f.write(" assert(%sIEs != NULL);\n\n" % (lowerFirstCamelWord(re.sub('-', '_', keyname)))); f.write(" for (i = 0; i < %s->list.count; i++) {\n" % (lowerFirstCamelWord(re.sub('-', '_', keyname)))) - f.write(" IE_t *ie_p = %s->list.array[i];\n" % (lowerFirstCamelWord(re.sub('-', '_', keyname)))) + f.write(" %s_IE_t *ie_p = %s->list.array[i];\n" % (fileprefix[0].upper() + fileprefix[1:], lowerFirstCamelWord(re.sub('-', '_', keyname)))) f.write(" switch (ie_p->id) {\n") for ie in iesDefs[key]["ies"]: iename = re.sub('id-', '', ie[0]) ienameunderscore = lowerFirstCamelWord(re.sub('-', '_', iename)) - f.write(" case ProtocolIE_ID_%s:\n" % (re.sub('-', '_', ie[0]))) + f.write(" case %s_ProtocolIE_ID_%s:\n" % (fileprefix_first_upper, re.sub('-', '_', ie[0]))) f.write(" {\n") f.write(" %s_t *%s_p = NULL;\n" % (re.sub('-', '_', ie[2]), lowerFirstCamelWord(re.sub('-', '', ie[2])))) f.write(" tempDecoded = ANY_to_type_aper(&ie_p->value, &asn_DEF_%s, (void**)&%s_p);\n" % (re.sub('-', '_', ie[2]), lowerFirstCamelWord(re.sub('-', '', ie[2])))) @@ -478,7 +487,7 @@ for key in iesDefs: f.write(" %s_t *%s,\n" % (asn1cStruct, firstwordlower)) f.write(" %s_t *%s) {\n\n" % (re.sub('-', '_', key), lowerFirstCamelWord(re.sub('-', '_', key)))) - f.write(" IE_t *ie;\n\n") + f.write(" %s_IE_t *ie;\n\n" % (fileprefix_first_upper)) f.write(" assert(%s != NULL);\n" % (firstwordlower)); f.write(" assert(%s != NULL);\n\n" % (lowerFirstCamelWord(re.sub('-', '_', key)))); @@ -497,10 +506,10 @@ for key in iesDefs: f.write(" /* Conditional field */\n") f.write(" if (%s->presenceMask & %s_%s_PRESENT) {\n" % (lowerFirstCamelWord(re.sub('-', '_', key)), keyupperunderscore, ieupperunderscore)) #f.write(" == %s_%s_PRESENT) {\n" % (keyupperunderscore, ieupperunderscore)) - f.write(" if ((ie = %s_new_ie(ProtocolIE_ID_%s,\n" % (fileprefix, re.sub('-', '_', ie[0]))) - f.write(" Criticality_%s,\n" % (ie[1])) - f.write(" &asn_DEF_%s,\n" % (ietypeunderscore)) - f.write(" &%s->%s)) == NULL) {\n" % (lowerFirstCamelWord(re.sub('-', '_', key)), ienamefirstwordlower)) + f.write(" if ((ie = %s_new_ie(%s_ProtocolIE_ID_%s,\n" % (fileprefix, fileprefix_first_upper, re.sub('-', '_', ie[0]))) + f.write(" %s_Criticality_%s,\n" % (fileprefix_first_upper, ie[1])) + f.write(" &asn_DEF_%s,\n" % (ietypeunderscore)) + f.write(" &%s->%s)) == NULL) {\n" % (lowerFirstCamelWord(re.sub('-', '_', key)), ienamefirstwordlower)) f.write(" return -1;\n") f.write(" }\n") f.write(" ASN_SEQUENCE_ADD(&%s->%slist, ie);\n" % (firstwordlower, iesaccess)) @@ -511,9 +520,9 @@ for key in iesDefs: f.write(" memset(&%s, 0, sizeof(%s_t));\n" % (ienamefirstwordlower, ietypeunderscore)) f.write("\n") f.write(" if (%s_encode_%s(&%s, &%s->%s) < 0) return -1;\n" % (fileprefix, ietypeunderscore.lower(), ienamefirstwordlower, lowerFirstCamelWord(re.sub('-', '_', key)), ienamefirstwordlower)) - f.write(" if ((ie = %s_new_ie(ProtocolIE_ID_%s,\n" % (fileprefix, re.sub('-', '_', ie[0]))) - f.write(" Criticality_%s,\n" % (ie[1])) - f.write(" &asn_DEF_%s,\n" % (ietypeunderscore)) + f.write(" if ((ie = %s_new_ie(%s_ProtocolIE_ID_%s,\n" % (fileprefix, fileprefix_first_upper, re.sub('-', '_', ie[0]))) + f.write(" %s_Criticality_%s,\n" % (fileprefix_first_upper, ie[1])) + f.write(" &asn_DEF_%s,\n" % (ietypeunderscore)) if ie[2] in ieofielist.keys(): f.write(" &%s)) == NULL) {\n" % (ienamefirstwordlower)) else: @@ -546,14 +555,14 @@ for (key, value) in iesDefs.items(): f.write(" %sIEs_t *%sIEs) {\n\n" % (re.sub('-', '_', i), lowerFirstCamelWord(re.sub('-', '_', i)))) f.write(" int i;\n") - f.write(" IE_t *ie;\n\n") + f.write(" %s_IE_t *ie;\n\n" % (fileprefix_first_upper)) f.write(" assert(%s != NULL);\n" % (firstwordlower)); f.write(" assert(%sIEs != NULL);\n\n" % (lowerFirstCamelWord(re.sub('-', '_', i)))); f.write(" for (i = 0; i < %sIEs->%s.count; i++) {\n" % (firstwordlower, re.sub('IEs', '', lowerFirstCamelWord(re.sub('-', '_', key))))) - f.write(" if ((ie = %s_new_ie(ProtocolIE_ID_%s,\n" % (fileprefix, re.sub('-', '_', ie[0]))) - f.write(" Criticality_%s,\n" % (ie[1])) + f.write(" if ((ie = %s_new_ie(%s_ProtocolIE_ID_%s,\n" % (fileprefix, fileprefix_first_upper, re.sub('-', '_', ie[0]))) + f.write(" %s_Criticality_%s,\n" % (fileprefix_first_upper, ie[1])) f.write(" &asn_DEF_%s,\n" % (ietypeunderscore)) f.write(" %sIEs->%s.array[i])) == NULL) {\n" % (firstwordlower, re.sub('IEs', '', lowerFirstCamelWord(re.sub('-', '_', key))))) f.write(" return -1;\n") @@ -571,8 +580,9 @@ f.write("#include \n\n") f.write("#include \n#include \n\n") f.write("#include \"%s_common.h\"\n#include \"%s_ies_defs.h\"\n\n" % (fileprefix, fileprefix)) -f.write("""static int -xer__print2fp(const void *buffer, size_t size, void *app_key) { +f.write("size_t %s_string_total_size = 0;\n\n" % (fileprefix.lower())) +f.write("""int +%s_xer__print2fp(const void *buffer, size_t size, void *app_key) { FILE *stream = (FILE *)app_key; if(fwrite(buffer, 1, size, stream) != size) @@ -581,7 +591,22 @@ xer__print2fp(const void *buffer, size_t size, void *app_key) { return 0; } -static asn_enc_rval_t +""" % (fileprefix.lower())) + +f.write("""int %s_xer__print2sp(const void *buffer, size_t size, void *app_key) { + char *string = (char *)app_key; + + /* Copy buffer to the formatted string */ + memcpy(&string[%s_string_total_size], buffer, size); + + %s_string_total_size += size; + + return 0; +} + +""" % (fileprefix.lower(), fileprefix.lower(), fileprefix.lower())) + +f.write("""static asn_enc_rval_t xer_encode_local(asn_TYPE_descriptor_t *td, void *sptr, asn_app_consume_bytes_f *cb, void *app_key, int indent) { asn_enc_rval_t er, tmper; @@ -622,7 +647,9 @@ for (key, value) in iesDefs.items(): f.write("asn_enc_rval_t %s_xer_print_%s(\n" % (fileprefix, re.sub('ies', '', re.sub('item', 'list', re.sub('-', '_', key).lower())))) else: f.write("asn_enc_rval_t %s_xer_print_%s(\n" % (fileprefix, re.sub('ies', '', re.sub('-', '_', key).lower()))) - f.write(" FILE *file,\n") + #f.write(" FILE *file,\n") + f.write(" asn_app_consume_bytes_f *cb,\n") + f.write(" void *app_key,\n") if key in ieofielist.values(): iesStructName = lowerFirstCamelWord(re.sub('Item', 'List', re.sub('-', '_', key))) f.write(" %sIEs_t *%s) {\n\n" % (re.sub('IEs', '', re.sub('Item', 'List', re.sub('-', '_', key))), iesStructName)) @@ -632,21 +659,23 @@ for (key, value) in iesDefs.items(): f.write(" %s_message *message_p)\n{\n" % (fileprefix)) f.write(" %s_t *%s;\n" % (re.sub('-', '_', key), iesStructName)) f.write(" asn_enc_rval_t er;\n") - f.write(" void *app_key = (void *)file;\n") - f.write(" asn_app_consume_bytes_f *cb = xer__print2fp;\n\n") + #f.write(" void *app_key = (void *)file;\n") + #f.write(" asn_app_consume_bytes_f *cb = %s_xer__print2fp;\n\n" % (fileprefix.lower())) f.write(" %s = &message_p->msg.%s;\n\n" % (iesStructName, iesStructName)) if key in ieofielist.values(): # Increase indentation level f.write(" for (i = 0; i < %s->%s.count; i++) {\n" % (iesStructName, re.sub('IEs', '', lowerFirstCamelWord(re.sub('-', '_', key))))) - f.write(" xer_fprint(file, &asn_DEF_%s, %s->%s.array[i]);\n" % (ietypeunderscore, iesStructName, re.sub('IEs', '', lowerFirstCamelWord(re.sub('-', '_', key))))) + #f.write(" xer_fprint(file, &asn_DEF_%s, %s->%s.array[i]);\n" % (ietypeunderscore, iesStructName, re.sub('IEs', '', lowerFirstCamelWord(re.sub('-', '_', key))))) + f.write(" er = xer_encode(&asn_DEF_%s, %s->%s.array[i], XER_F_BASIC, cb, app_key);\n" % (ietypeunderscore, iesStructName, re.sub('IEs', '', lowerFirstCamelWord(re.sub('-', '_', key))))) f.write(" }\n") else: - f.write(" fprintf(file, \"<%s-PDU>\\n\");\n" % (fileprefix.upper())) - f.write(" xer_encode_local(&asn_DEF_Criticality, &message_p->criticality, cb, app_key, 1);\n") - f.write(" xer_encode_local(&asn_DEF_ProcedureCode, &message_p->procedureCode, cb, app_key, 1);\n") - f.write(" fprintf(file, \" <%s>\\n\");\n" % (key)) + f.write(" cb(\"<%s-PDU>\\n\", %d, app_key);\n" % (key, len("<%s-PDU>\n" % (key)))) + f.write(" xer_encode_local(&asn_DEF_%s_Criticality, &message_p->criticality, cb, app_key, 1);\n" % fileprefix_first_upper) + f.write(" xer_encode_local(&asn_DEF_%s_ProcedureCode, &message_p->procedureCode, cb, app_key, 1);\n" % fileprefix_first_upper) + + f.write(" cb(\" <%s>\\n\", %d, app_key);\n" % (key, len(" <%s>\n" % (key)))) for ie in iesDefs[key]["ies"]: iename = re.sub('-', '_', re.sub('id-', '', ie[0])) @@ -664,12 +693,11 @@ for (key, value) in iesDefs.items(): # Is it an encapsulated IE ? if ie[2] in ieofielist.keys(): - f.write(" %s_xer_print_%s(file, &%s->%s);\n" % (fileprefix, re.sub('ies', '', re.sub('-', '_', ie[2]).lower()), iesStructName, ienamefirstwordlower)) + f.write(" %s_xer_print_%s(cb, app_key, &%s->%s);\n" % (fileprefix, re.sub('ies', '', re.sub('-', '_', ie[2]).lower()), iesStructName, ienamefirstwordlower)) else: f.write(" xer_encode_local(&asn_DEF_%s, &%s->%s, cb, app_key, 2);\n" % (ietypeunderscore, iesStructName, ienamefirstwordlower)) - #f.write(" _i_ASN_TEXT_INDENT(1, 1);\n") - f.write(" fprintf(file, \" \\n\");\n" % (key)) - f.write(" fprintf(file, \"\\n\");\n" % (fileprefix.upper())) + f.write(" cb(\" \\n\", %d, app_key);\n" % (key, len(" \n" % (key)))) + f.write(" cb(\"\\n\", %d, app_key);\n" % (key, len("\n" % (key)))) f.write(" _ASN_ENCODED_OK(er);\n") #if key not in ieofielist.values(): diff --git a/openair2/X2AP/x2ap_common.h b/openair2/X2AP/x2ap_common.h index c48360e08a..fe7b710d96 100755 --- a/openair2/X2AP/x2ap_common.h +++ b/openair2/X2AP/x2ap_common.h @@ -35,23 +35,36 @@ #include "X2ap-ABSInformation.h" #include "X2ap-ABSInformationTDD.h" #include "X2ap-ABS-Status.h" +#include "X2ap-ActivatedCellList.h" #include "X2ap-AllocationAndRetentionPriority.h" #include "X2ap-AreaScopeOfMDT.h" #include "X2ap-AS-SecurityInformation.h" #include "X2ap-BandInfo.h" #include "X2ap-BitRate.h" #include "X2ap-BroadcastPLMNs-Item.h" + #include "X2ap-CapacityValue.h" #include "X2ap-Cause.h" #include "X2ap-CauseMisc.h" #include "X2ap-CauseProtocol.h" #include "X2ap-CauseRadioNetwork.h" #include "X2ap-CauseTransport.h" +#include "X2ap-CellActivationFailure.h" +#include "X2ap-CellActivationRequest.h" +#include "X2ap-CellActivationResponse.h" #include "X2ap-CellBasedMDT.h" #include "X2ap-CellCapacityClassValue.h" #include "X2ap-CellIdListforMDT.h" +#include "X2ap-CellInformation-Item.h" +#include "X2ap-CellInformation-List.h" #include "X2ap-Cell-Size.h" +#include "X2ap-CellToReport-Item.h" +#include "X2ap-CellToReport-List.h" #include "X2ap-CellType.h" +#include "X2ap-CellMeasurementResult-Item.h" +#include "X2ap-CellMeasurementResult-List.h" +#include "X2ap-CompleteFailureCauseInformation-Item.h" +#include "X2ap-CompleteFailureCauseInformation-List.h" #include "X2ap-CompositeAvailableCapacityGroup.h" #include "X2ap-CompositeAvailableCapacity.h" #include "X2ap-COUNTvalue.h" @@ -73,16 +86,24 @@ #include "X2ap-ECGI.h" #include "X2ap-ENB-ID.h" #include "X2ap-ENBConfigurationUpdateFailure.h" +#include "X2ap-ENBConfigurationUpdateAcknowledge.h" +#include "X2ap-ENBConfigurationUpdate.h" #include "X2ap-EncryptionAlgorithms.h" #include "X2ap-EPLMNs.h" #include "X2ap-E-RAB-ID.h" #include "X2ap-E-RAB-Item.h" +#include "X2ap-E-RABs-Admitted-List.h" #include "X2ap-E-RAB-Level-QoS-Parameters.h" #include "X2ap-E-RAB-List.h" +#include "X2ap-E-RABs-SubjectToStatusTransfer-Item.h" +#include "X2ap-E-RABs-Admitted-Item.h" +#include "X2ap-E-RABs-SubjectToStatusTransfer-List.h" +#include "X2ap-ErrorIndication.h" #include "X2ap-EUTRA-Mode-Info.h" #include "X2ap-EUTRANCellIdentifier.h" #include "X2ap-EUTRANTraceID.h" #include "X2ap-EventType.h" + #include "X2ap-FDD-Info.h" #include "X2ap-ForbiddenInterRATs.h" #include "X2ap-ForbiddenLACs.h" @@ -103,7 +124,11 @@ #include "X2ap-HandoverCancel.h" #include "X2ap-HandoverReportType.h" #include "X2ap-HandoverRequest.h" +#include "X2ap-HandoverReport.h" #include "X2ap-HandoverRestrictionList.h" +#include "X2ap-HandoverPreparationFailure.h" +#include "X2ap-HandoverRequestAcknowledge.h" + #include "X2ap-HFN.h" #include "X2ap-HWLoadIndicator.h" #include "X2ap-IE-Extensions.h" @@ -118,6 +143,7 @@ #include "X2ap-LastVisitedGERANCellInformation.h" #include "X2ap-LastVisitedUTRANCellInformation.h" #include "X2ap-LoadIndicator.h" +#include "X2ap-LoadInformation.h" #include "X2ap-LocationReportingInformation.h" #include "X2ap-ManagementBasedMDTallowed.h" #include "X2ap-MBMS-Service-Area-Identity.h" @@ -129,6 +155,10 @@ #include "X2ap-Measurement-ID.h" #include "X2ap-MeasurementsToActivate.h" #include "X2ap-MeasurementThresholdA2.h" +#include "X2ap-MeasurementInitiationResult-Item.h" +#include "X2ap-MeasurementInitiationResult-List.h" + +#include "X2ap-MeasurementFailureCause-Item.h" #include "X2ap-MME-Code.h" #include "X2ap-MME-Group-ID.h" #include "X2ap-MobilityChangeAcknowledge.h" @@ -141,6 +171,8 @@ #include "X2ap-NextHopChainingCount.h" #include "X2ap-Number-of-Antennaports.h" #include "X2ap-Oneframe.h" +#include "X2ap-Old-ECGIs.h" +#include "X2ap-PartialSuccessIndicator.h" #include "X2ap-PCI.h" #include "X2ap-PDCP-SN.h" #include "X2AP-PDU.h" @@ -166,14 +198,22 @@ #include "X2ap-ReportCharacteristics.h" #include "X2ap-ReportingTriggerMDT.h" #include "X2ap-ReportIntervalMDT.h" +#include "X2ap-ReportingPeriodicity.h" #include "X2ap-ResourceStatusFailure.h" +#include "X2ap-ResourceStatusResponse.h" +#include "X2ap-ResourceStatusUpdate.h" + #include "X2ap-RNTP-Threshold.h" #include "X2ap-RRCConnReestabIndicator.h" #include "X2ap-RRCConnSetupIndicator.h" #include "X2ap-RRC-Context.h" +#include "X2ap-RLFIndication.h" +#include "X2ap-ResourceStatusRequest.h" #include "X2ap-S1TNLLoadIndicator.h" -#include "X2ap-ServedCell-Information.h" +//nclude "X2ap-ServedCellInformation.h" #include "X2ap-ServedCells.h" +#include "X2ap-ServedCellsToModify.h" +#include "X2ap-ServedCellsToActivate.h" #include "X2ap-ShortMAC-I.h" #include "X2ap-SpecialSubframe-Info.h" #include "X2ap-SpecialSubframePatterns.h" @@ -181,6 +221,8 @@ #include "X2ap-SubframeAllocation.h" #include "X2ap-SubframeAssignment.h" #include "X2ap-SubscriberProfileIDforRFP.h" +#include "X2ap-SNStatusTransfer.h" + #include "X2ap-TABasedMDT.h" #include "X2ap-TAC.h" #include "X2ap-TAListforMDT.h" @@ -193,6 +235,7 @@ #include "X2ap-TimeToWait.h" #include "X2ap-Time-UE-StayedInCell-EnhancedGranularity.h" #include "X2ap-Time-UE-StayedInCell.h" +#include "X2ap-E-RABs-ToBeSetup-Item.h" #include "X2ap-TraceActivation.h" #include "X2ap-TraceCollectionEntityIPAddress.h" #include "X2ap-TraceDepth.h" @@ -201,6 +244,7 @@ #include "X2ap-TriggeringMessage.h" #include "X2ap-TypeOfError.h" #include "X2ap-UEAggregateMaximumBitRate.h" +#include "X2ap-UE-ContextInformation.h" #include "X2ap-UE-HistoryInformation.h" #include "X2ap-UE-RLF-Report-Container.h" #include "X2ap-UE-S1AP-ID.h" @@ -218,10 +262,17 @@ #include "X2ap-UsableABSInformationFDD.h" #include "X2ap-UsableABSInformation.h" #include "X2ap-UsableABSInformationTDD.h" + +#include "X2ap-ResetResponse.h" +#include "X2ap-ResetRequest.h" #include "X2SetupFailure.h" #include "X2SetupRequest.h" #include "X2SetupResponse.h" +#include "X2ap-Old-ECGIs.h" +#include "X2ap-Criticality.h" +#include "X2ap-ProcedureCode.h" + #ifndef X2AP_COMMON_H_ #define X2AP_COMMON_H_ diff --git a/openair3/NEMO_SHO/COPYING b/openair3/NEMO_SHO/COPYING deleted file mode 100644 index 94a9ed024d..0000000000 --- a/openair3/NEMO_SHO/COPYING +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. diff --git a/openair3/NEMO_SHO/README b/openair3/NEMO_SHO/README deleted file mode 100644 index 8753e997a9..0000000000 --- a/openair3/NEMO_SHO/README +++ /dev/null @@ -1,6 +0,0 @@ -THE APPLY ORDER MUST BE THE FOLLOWING: -mmipv6-daemon-umip-0.4-nepl-20080108.patch -mmipv6-daemon-umip-0.4-nepl-mcoa-20080108.patch -mmipv6-daemon-umip-0.4-sho-20080331.patch -mmipv6-daemon-umip-0.4-nasmesh-2009-may-12.patch - diff --git a/openair3/NEMO_SHO/mipv6-daemon-umip-0.4-nasmesh-2009-may-12.patch b/openair3/NEMO_SHO/mipv6-daemon-umip-0.4-nasmesh-2009-may-12.patch deleted file mode 100644 index abb8f76f8a..0000000000 --- a/openair3/NEMO_SHO/mipv6-daemon-umip-0.4-nasmesh-2009-may-12.patch +++ /dev/null @@ -1,301 +0,0 @@ -Only in mipv6-daemon-umip-0.4_patch_nepl_mcoa_sho: config.h -Only in mipv6-daemon-umip-0.4_patch_nepl_mcoa_sho: config.log -Only in mipv6-daemon-umip-0.4_patch_nepl_mcoa_sho: config.status -Only in mipv6-daemon-umip-0.4_patch_nepl_mcoa_sho/libmissing: .deps -Only in mipv6-daemon-umip-0.4_patch_nepl_mcoa_sho/libmissing: Makefile -Only in mipv6-daemon-umip-0.4_patch_nepl_mcoa_sho/libnetlink: .deps -Only in mipv6-daemon-umip-0.4_patch_nepl_mcoa_sho/libnetlink: Makefile -Only in mipv6-daemon-umip-0.4_patch_nepl_mcoa_sho: Makefile -Only in mipv6-daemon-umip-0.4_patch_nepl_mcoa_sho/man: Makefile -Only in mipv6-daemon-umip-0.4_patch_nepl_mcoa_sho/src: .deps -Only in mipv6-daemon-umip-0.4_patch_nepl_mcoa_sho/src: gram.c -Only in mipv6-daemon-umip-0.4_patch_nepl_mcoa_sho/src: gram.h -Only in mipv6-daemon-umip-0.4_patch_nepl_mcoa_sho/src: Makefile -diff -ur mipv6-daemon-umip-0.4.all.paches.original/src/mh.c mipv6-daemon-umip-0.4_patch_nepl_mcoa_sho/src/mh.c ---- mipv6-daemon-umip-0.4.all.paches.original/src/mh.c 2009-05-12 14:38:53.000000000 +0200 -+++ mipv6-daemon-umip-0.4_patch_nepl_mcoa_sho/src/mh.c 2009-05-12 14:33:25.000000000 +0200 -@@ -816,8 +816,11 @@ - } - - pthread_mutex_lock(&mh_sock.send_mutex); -- setsockopt(mh_sock.fd, IPPROTO_IPV6, IPV6_PKTINFO, -+ ret = setsockopt(mh_sock.fd, IPPROTO_IPV6, IPV6_PKTINFO, - &on, sizeof(int)); -+ if (ret < 0) -+ dbg("setsockopt: %s\n", strerror(errno)); -+ - ret = sendmsg(mh_sock.fd, &msg, 0); - if (ret < 0) - dbg("sendmsg: %s\n", strerror(errno)); -Only in mipv6-daemon-umip-0.4_patch_nepl_mcoa_sho/src: mh.c~ -diff -ur mipv6-daemon-umip-0.4.all.paches.original/src/mn.c mipv6-daemon-umip-0.4_patch_nepl_mcoa_sho/src/mn.c ---- mipv6-daemon-umip-0.4.all.paches.original/src/mn.c 2009-05-12 14:38:53.000000000 +0200 -+++ mipv6-daemon-umip-0.4_patch_nepl_mcoa_sho/src/mn.c 2009-05-12 14:33:25.000000000 +0200 -@@ -130,6 +130,8 @@ - * is the BID number. BID must be between - * BCE_TABLE_MIN and BCE_TABLE_MAX - */ -+ MDBG("--------------------------------------\n"); -+ MDBG("mcoa_mn_init_rt_table()\n"); - assert(bule); - - /* If BID is not assigned, default table is taken */ -@@ -147,6 +149,8 @@ - { - int ret = -1; - -+ MDBG("--------------------------------------\n"); -+ MDBG("mn_block_rule_del()\n"); - if (!(hai->home_block & HOME_ADDR_RULE_BLOCK)) { - MDBG("blackhole is not set.\n"); - return ret; -@@ -166,6 +170,8 @@ - { - int ret = -1; - -+ MDBG("--------------------------------------\n"); -+ MDBG("mn_block_rule_add()\n"); - if (hai->home_block & HOME_ADDR_RULE_BLOCK) { - MDBG("blackhole is already set.\n"); - return ret; -@@ -182,6 +188,8 @@ - - static void bul_expire(struct tq_elem *tqe) - { -+ MDBG("--------------------------------------\n"); -+ MDBG("bul_expire()\n"); - pthread_rwlock_wrlock(&mn_lock); - if (!task_interrupted()) { - struct bulentry *bule = tq_data(tqe, struct bulentry, tqe); -@@ -205,6 +213,8 @@ - uint16_t flags = e->flags; - uint16_t bid = e->bid; - -+ MDBG("--------------------------------------\n"); -+ MDBG("bule_invalidate()\n"); - if (type != BUL_ENTRY) - return; - -@@ -307,6 +317,8 @@ - struct in6_addr *raddr = &ip6h->ip6_dst; - struct in6_addr addr; - -+ MDBG("--------------------------------------\n"); -+ MDBG("mn_recv_param_prob()\n"); - /* We only handle code 1 & 2 messages. */ - if (ih->icmp6_code != ICMP6_PARAMPROB_NEXTHEADER && - ih->icmp6_code != ICMP6_PARAMPROB_OPTION) -@@ -623,6 +635,8 @@ - */ - static int mn_dereg_bule(struct bulentry *bule) - { -+ MDBG("--------------------------------------\n"); -+ MDBG("mn_dereg_bule()\n"); - if (bule->type != NON_MIP_CN_ENTRY) { - bule->seq++; - bule->mcoa_dereg = 0; -@@ -637,6 +651,8 @@ - { - struct bulentry *bule = vbule; - -+ MDBG("--------------------------------------\n"); -+ MDBG("mn_dereg()\n"); - if (bule->type == BUL_ENTRY) { - if (!(bule->flags & IP6_MH_BU_HOME)) { - bule->dereg = 1; -@@ -684,6 +700,8 @@ - { - int dhaad = dhaad_home_reg_failed(hai); - int type = FLUSH_VALID; -+ MDBG("--------------------------------------\n"); -+ MDBG("mn_change_ha()\n"); - if (hai->home_reg_status != HOME_REG_NONE) - bul_iterate(&hai->bul, _bul_flush, &type); - syslog(LOG_ERR, -@@ -820,6 +838,8 @@ - uint32_t valid = PREFIX_LIFETIME_INFINITE; - int plen = (mha->if_next == hai->if_tunnel ? 128 : hai->plen); - -+ MDBG("--------------------------------------\n"); -+ MDBG("mv_hoa\n"); - clock_gettime(CLOCK_REALTIME, &now); - - if (hai->lladdr_comp && rta_tb[IFA_CACHEINFO] != NULL) { -@@ -889,6 +909,8 @@ - { - struct list_head *l; - struct prefix_list_entry *pe; -+ MDBG("--------------------------------------\n"); -+ MDBG("nemo_mr_tnl_routes_add\n"); - list_for_each(l, &hai->mob_net_prefixes) { - struct prefix_list_entry *p; - p = list_entry(l, struct prefix_list_entry, list); -@@ -917,6 +939,8 @@ - int ifindex, int all, int rtable) - { - int err = 0; -+ MDBG("--------------------------------------\n"); -+ MDBG("mn_tnl_state_add\n"); - if (hai->home_reg_status != HOME_REG_NONE) { - if ((err = mn_ro_pol_add(hai, ifindex, all)) < 0) - return err; -@@ -939,6 +963,8 @@ - int ifindex, int rtable) - { - struct list_head *l; -+ MDBG("--------------------------------------\n"); -+ MDBG("nemo_mr_tnl_routes_del\n"); - list_for_each(l, &hai->mob_net_prefixes) { - struct prefix_list_entry *p; - p = list_entry(l, struct prefix_list_entry, list); -@@ -1001,6 +1027,8 @@ - struct home_addr_info *hai, - struct timespec *lifetime) - { -+ MDBG("--------------------------------------\n"); -+ MDBG("process_first_home_bu\n"); - int err = 0; - assert(hai->current_coa); - bule->type = BUL_ENTRY; -@@ -1090,6 +1118,8 @@ - int homereg_expired = 0; - movement_t type_movement = MIP6_TYPE_MOVEMENT_UNKNOWN; - -+ MDBG("--------------------------------------\n"); -+ MDBG("mn_send_home_bu\n"); - TRACE; - assert(hai->current_coa); - -@@ -1285,6 +1315,8 @@ - - void mn_send_cn_bu(struct bulentry *bule) - { -+ MDBG("--------------------------------------\n"); -+ MDBG("mn_send_cn_bu\n"); - /* Rate limiting CN registration binding updates - is necessary for multihomed MNs */ - if (mn_bu_ratelimit(bule)) -@@ -1487,6 +1519,8 @@ - struct timespec now, ba_lifetime, br_adv; - uint16_t seqno, bid; - -+ MDBG("--------------------------------------\n"); -+ MDBG("mn_recv_ba\n"); - TRACE; - - if (len < sizeof(struct ip6_mh_binding_ack) || -@@ -1875,6 +1909,8 @@ - struct home_addr_info *hai, - int replace) - { -+ MDBG("--------------------------------------\n"); -+ MDBG("mcoa_iface_dflt_hoa_rule_del\n"); - /* MCoA: Delete the default HoA rule */ - rule_del(NULL, bule->bid, IP6_RULE_PRIO_MIP6_HOA_OUT, - 0, RTN_UNICAST, &hai->hoa.addr, 128, -@@ -1900,6 +1936,8 @@ - struct prefix_list_entry *p, - int replace) - { -+ MDBG("--------------------------------------\n"); -+ MDBG("mcoa_iface_dflt_mnp_rules_del\n"); - /* MCoA: Delete the default MNP rule */ - rule_del(NULL, bule->bid, IP6_RULE_PRIO_MIP6_FWD_MCOA, - 0, RTN_UNICAST, &p->ple_prefix, p->ple_plen, -@@ -1926,6 +1964,8 @@ - struct list_head *l; - int delete_dflt_mnp = 0; - -+ MDBG("--------------------------------------\n"); -+ MDBG("mcoa_iface_rules_del\n"); - bule = bul_get(hai, NULL, &hai->ha_addr, bid); - if (!hai->reg_mcoa || (bule && !bule->rules)) - return NULL; -@@ -1977,6 +2017,8 @@ - { - struct list_head *l; - -+ MDBG("--------------------------------------\n"); -+ MDBG("mcoa_mn_rules_del\n"); - list_for_each(l, &hinfo->mcoa) { - struct mn_addr *iface = NULL; - iface = list_entry(l, struct mn_addr, list); -@@ -2006,6 +2048,8 @@ - struct list_head *l; - uint8_t prio; - -+ MDBG("--------------------------------------\n"); -+ MDBG("mcoa_iface_rules_add\n"); - bule = bul_get(hai, NULL, &hai->ha_addr, bid); - if (!bid || !hai->reg_mcoa || !bule || (bule && bule->rules)) - return 0; -@@ -2088,6 +2132,8 @@ - { - struct list_head *l; - -+ MDBG("--------------------------------------\n"); -+ MDBG("nemo_mr_rules_del\n"); - list_for_each(l, &hinfo->mob_net_prefixes) { - struct prefix_list_entry *p = NULL; - p = list_entry(l, struct prefix_list_entry, list); -@@ -2111,6 +2157,8 @@ - struct prefix_list_entry *pe = NULL; - struct list_head *l; - -+ MDBG("--------------------------------------\n"); -+ MDBG("nemo_mr_rules_add\n"); - list_for_each(l, &hinfo->mob_net_prefixes) { - struct prefix_list_entry *p = NULL; - p = list_entry(l, struct prefix_list_entry, list); -@@ -2164,6 +2212,8 @@ - struct flag_hoa_args arg; - int plen = (hai->hoa.iif == hai->if_tunnel ? 128 : hai->plen); - -+ MDBG("--------------------------------------\n"); -+ MDBG("clean_home_addr_info\n"); - list_del(&hai->list); - if (hai->mob_rtr) - nemo_mr_rules_del(hai); -@@ -2538,6 +2588,8 @@ - struct mv_hoa_args mha; - struct list_head *l; - -+ MDBG("--------------------------------------\n"); -+ MDBG("mn_move\n"); - mha.target = hai; - - TRACE; -Only in mipv6-daemon-umip-0.4_patch_nepl_mcoa_sho/src: mn.c~ -diff -ur mipv6-daemon-umip-0.4.all.paches.original/src/movement.c mipv6-daemon-umip-0.4_patch_nepl_mcoa_sho/src/movement.c ---- mipv6-daemon-umip-0.4.all.paches.original/src/movement.c 2009-05-12 14:38:53.000000000 +0200 -+++ mipv6-daemon-umip-0.4_patch_nepl_mcoa_sho/src/movement.c 2009-05-12 14:33:25.000000000 +0200 -@@ -611,7 +611,9 @@ - memset(lladdr, 0, sizeof(struct in6_addr)); - uint8_t *eui = lladdr->s6_addr + 8; - switch (iface_type) { -- case ARPHRD_ETHER: -+ case ARPHRD_EUROPENAIRMESH: -+ memcpy(eui, hwa, 8); -+ break; - case ARPHRD_IEEE802: - case ARPHRD_IEEE802_TR: - case ARPHRD_IEEE80211: -Only in mipv6-daemon-umip-0.4_patch_nepl_mcoa_sho/src: movement.c~ -diff -ur mipv6-daemon-umip-0.4.all.paches.original/src/ndisc.h mipv6-daemon-umip-0.4_patch_nepl_mcoa_sho/src/ndisc.h ---- mipv6-daemon-umip-0.4.all.paches.original/src/ndisc.h 2009-05-12 14:38:38.000000000 +0200 -+++ mipv6-daemon-umip-0.4_patch_nepl_mcoa_sho/src/ndisc.h 2009-05-12 14:33:25.000000000 +0200 -@@ -11,6 +11,8 @@ - { - switch (iface_type) { - /* supported physical devices */ -+ case ARPHRD_EUROPENAIRMESH: -+ return 8; - case ARPHRD_ETHER: - case ARPHRD_IEEE802: - case ARPHRD_IEEE802_TR: -Only in mipv6-daemon-umip-0.4_patch_nepl_mcoa_sho/src: ndisc.h~ -Only in mipv6-daemon-umip-0.4_patch_nepl_mcoa_sho/src: pmgr.c -Only in mipv6-daemon-umip-0.4_patch_nepl_mcoa_sho/src: pmgr.h -Only in mipv6-daemon-umip-0.4_patch_nepl_mcoa_sho/src: scan.c -Only in mipv6-daemon-umip-0.4_patch_nepl_mcoa_sho: stamp-h1 -Only in mipv6-daemon-umip-0.4.all.paches.original: ZE_PATCH.patch diff --git a/openair3/NEMO_SHO/mipv6-daemon-umip-0.4-nepl-20080108.patch b/openair3/NEMO_SHO/mipv6-daemon-umip-0.4-nepl-20080108.patch deleted file mode 100755 index 7d70c0d531..0000000000 --- a/openair3/NEMO_SHO/mipv6-daemon-umip-0.4-nepl-20080108.patch +++ /dev/null @@ -1,2862 +0,0 @@ -diff -r a7e20b0b5c43 AUTHORS ---- a/AUTHORS Wed Nov 28 16:43:32 2007 +0100 -+++ b/AUTHORS Tue Jan 08 11:28:48 2008 +0100 -@@ -5,3 +5,14 @@ Petander. Code has been contributed by - Petander. Code has been contributed by several individuals. See - THANKS for listing. See libnetlink/README for information regarding - libnetlink. -+ -+The NEMO Basic support code is developed by Ville Nuorvala -+ in co-operation with the Nautilus6/WIDE -+project (http://www.nautilus6.org). -+ -+The NEMO Basic Support code has been ported to UMIP by Romain KUNTZ -+ and received contributions from the -+following people: -+- Sebastien DECUGIS (Nautilus6): IPsec support for NEMO -+- Arnaud EBALARD (EADS): fixes for Big Endian architectures and -+ improvements of the NEMO debug messages. -diff -r a7e20b0b5c43 BUGS ---- a/BUGS Wed Nov 28 16:43:32 2007 +0100 -+++ b/BUGS Tue Jan 08 11:28:48 2008 +0100 -@@ -17,3 +17,11 @@ Mobile Node issues - * Multihoming support hasn't been very thoroughly tested and should - therefore be considered developmental code. However, it is a lot - more stable than in the Release Candidates. -+ -+NEMO issues -+----------- -+ -+* The Mobile Router's home address may only be on the egress interface. -+ -+* Dynamic routing protocols between the Home Agent and Mobile Router -+ are not yet supported. -diff -r a7e20b0b5c43 COPYING.NEMO ---- /dev/null Thu Jan 01 00:00:00 1970 +0000 -+++ b/COPYING.NEMO Tue Jan 08 11:28:48 2008 +0100 -@@ -0,0 +1,13 @@ -+Cisco and Nokia have both published IPR notices regarding RFC 3963 -+"Network Mobility (NEMO) Basic Support Protocol." -+ -+Cisco has agreed not to assert its patents against any party agreeing with the -+terms in its IPR notice. -+ -+Likewise, Nokia has agreed not to assert its patents against Open Source -+implementations of the specification. -+ -+For further information, please read -+licenses/cisco-ipr-draft-ietf-nemo-basic-support-03.txt and -+licenses/nokia-ipr-draft-ietf-nemo-basic-support.txt. -+ -diff -r a7e20b0b5c43 INSTALL ---- a/INSTALL Wed Nov 28 16:43:32 2007 +0100 -+++ b/INSTALL Tue Jan 08 11:28:48 2008 +0100 -@@ -45,6 +45,8 @@ 4. Run 'make install'. Executables shou - further information on how to configure your node. Also take a - look at the example configuration files in the extras directory. - -+ For comments about NEMO check README.NEMO. -+ - For comments about IPsec support check README.IPsec. - - 5. A startup script -diff -r a7e20b0b5c43 README ---- a/README Wed Nov 28 16:43:32 2007 +0100 -+++ b/README Tue Jan 08 11:28:48 2008 +0100 -@@ -2,6 +2,9 @@ MIPL Mobile IPv6 for Linux - - MIPL Mobile IPv6 for Linux is an implementation of the Mobility - Support in IP version 6 (RFC 3775). -+ -+ It also supports Network Mobility with the NEMO Basic Support -+ implementation (RFC 3963). - - This user space part works together with Mobile IPv6 enabled Linux - kernels. See INSTALL and any other documents referred there for -diff -r a7e20b0b5c43 README.NEMO ---- /dev/null Thu Jan 01 00:00:00 1970 +0000 -+++ b/README.NEMO Tue Jan 08 11:28:48 2008 +0100 -@@ -0,0 +1,18 @@ -+README for NEMO Basic Support -+----------------------------- -+ -+Here are a few things you need to keep in mind when setting up Network -+Mobility: -+ -+The MR is a router so you need to set -+/proc/sys/net/ipv6/conf/all/forwarding to 1 to make sure it will forward -+packets between its ingress and egress interfaces. -+ -+With static routing the HA and other routers on the home link might need some -+additional boot-strapping. If the MR has a physical home link that it may be -+attached to, the other routers must be pre-configured with routes to the MR's -+Mobile Network Prefixes via the MR's home address. This ensures packets will -+be forwarded correctly also when the MR is at home. -+ -+To be able to support NEMO DHAAD the HA needs to have AdvHomeAgentInfo and -+AdvMobRtrSupportFlag turned on in radvd.conf. -diff -r a7e20b0b5c43 include/netinet/icmp6.h ---- a/include/netinet/icmp6.h Wed Nov 28 16:43:32 2007 +0100 -+++ b/include/netinet/icmp6.h Tue Jan 08 11:28:48 2008 +0100 -@@ -27,7 +27,13 @@ struct mip_dhaad_req { /* Dynamic HA Ad - #define mip_dhreq_code mip_dhreq_hdr.icmp6_code - #define mip_dhreq_cksum mip_dhreq_hdr.icmp6_cksum - #define mip_dhreq_id mip_dhreq_hdr.icmp6_data16[0] --#define mip_dhreq_reserved mip_dhreq_hdr.icmp6_data16[1] -+#define mip_dhreq_flags_reserved mip_dhreq_hdr.icmp6_data16[1] -+ -+#if BYTE_ORDER == BIG_ENDIAN -+#define MIP_DHREQ_FLAG_SUPPORT_MR 0x8000 -+#else /* BYTE_ORDER == LITTLE_ENDIAN */ -+#define MIP_DHREQ_FLAG_SUPPORT_MR 0x0080 -+#endif - #endif - - #ifndef HAVE_STRUCT_MIP_DHAAD_REP -@@ -40,7 +46,13 @@ struct mip_dhaad_rep { /* HA Address Di - #define mip_dhrep_code mip_dhrep_hdr.icmp6_code - #define mip_dhrep_cksum mip_dhrep_hdr.icmp6_cksum - #define mip_dhrep_id mip_dhrep_hdr.icmp6_data16[0] --#define mip_dhrep_reserved mip_dhrep_hdr.icmp6_data16[1] -+#define mip_dhrep_flags_reserved mip_dhrep_hdr.icmp6_data16[1] -+ -+#if BYTE_ORDER == BIG_ENDIAN -+#define MIP_DHREP_FLAG_SUPPORT_MR 0x8000 -+#else /* BYTE_ORDER == LITTLE_ENDIAN */ -+#define MIP_DHREP_FLAG_SUPPORT_MR 0x0080 -+#endif - #endif - - #ifndef HAVE_STRUCT_MIP_PREFIX_SOLICIT -@@ -89,10 +101,20 @@ struct nd_opt_homeagent_info { /* Home A - struct nd_opt_homeagent_info { /* Home Agent information */ - uint8_t nd_opt_hai_type; - uint8_t nd_opt_hai_len; -- uint16_t nd_opt_hai_reserved; -+ uint16_t nd_opt_hai_flags_reserved; - uint16_t nd_opt_hai_preference; - uint16_t nd_opt_hai_lifetime; - }; - #endif - -+#define nd_opt_hai_reserved nd_opt_hai_flags_reserved -+ -+#ifndef ND_OPT_HAI_FLAG_SUPPORT_MR -+#if BYTE_ORDER == BIG_ENDIAN -+#define ND_OPT_HAI_FLAG_SUPPORT_MR 0x8000 -+#else /* BYTE_ORDER == LITTLE_ENDIAN */ -+#define ND_OPT_HAI_FLAG_SUPPORT_MR 0x0080 -+#endif -+#endif -+ - #endif /* netinet/icmp6.h */ -diff -r a7e20b0b5c43 licenses/cisco-ipr-draft-ietf-nemo-basic-support-03.txt ---- /dev/null Thu Jan 01 00:00:00 1970 +0000 -+++ b/licenses/cisco-ipr-draft-ietf-nemo-basic-support-03.txt Tue Jan 08 11:28:48 2008 +0100 -@@ -0,0 +1,41 @@ -+Title: Cisco Systems' Updated Statement about IPR claimed in -+ draft-ietf-nemo-basic-support-03.txt -+Received 25 October 2004 -+From: Robert Barr -+ -+This statement updates the IPR statement filed by Cisco on June 20, 2003 for -+draft-ietf-nemo-basic-support-00.txt. -+ -+Cisco is the owner of US Patent No. 6,636,498 and at least one pending -+patent application -+relating to the subject matter of draft-ietf-nemo-basic-support-03.txt -+"Network Mobility (NEMO) Basic Support Protocol" . -+If a standard relating to this subject matter is adopted by IETF and any -+claims -+of any issued Cisco patents are necessary for practicing this standard, any -+party will be able to obtain a license from Cisco to use any such patent -+claims under openly specified, reasonable, non-discriminatory terms, with -+reciprocity, to implement and fully comply with the standard. -+ -+The reasonable non-discriminatory terms are: -+ -+If this standard is adopted, Cisco will not assert any patents owned or -+controlled by Cisco against any party for making, using, selling, importing -+or offering for sale a product that implements the standard, provided, -+however that Cisco retains the right to assert its patents (including the -+right to claim past royalties) against any party that asserts a patent it -+owns or controls (either directly or indirectly) against Cisco or any of -+Cisco's affiliates or successors in title; and Cisco retains the right to -+assert its patents against any product or portion thereof that is not -+necessary for compliance with the standard. -+ -+Royalty-bearing licenses will be available to anyone who prefers that -+option. -+ -+For information contact: -+ -+Robert Barr -+Worldwide Patent Counsel -+Cisco Systems -+408-525-9706 -+rbarr@cisco.com -diff -r a7e20b0b5c43 licenses/nokia-ipr-draft-ietf-nemo-basic-support.txt ---- /dev/null Thu Jan 01 00:00:00 1970 +0000 -+++ b/licenses/nokia-ipr-draft-ietf-nemo-basic-support.txt Tue Jan 08 11:28:48 2008 +0100 -@@ -0,0 +1,26 @@ -+Title: Nokia Corporation's statement about IPR claimed in draft-ietf-nemo-basic-support -+Received: July 1, 2003 -+From: Heikki Huttunen -+ -+This is to advise the IETF that Nokia believes the Nokia patent application "Mobile Router -+Support for IPv6", US10/295014, WO03/043226 may be relevant to Nemo Basic Support Protocol -+. -+ -+Regarding internet draft "draft-ietf-nemo-basic-support", to the extent this draft is -+included into final IETF standard specification, Nokia agrees not to assert those claims -+in Nokia patents that apply to this draft and that are technically necessary to implement -+the IETF standard specification against any other party in respect of its implementation of -+the specification, if only practiced under any software distributed under the present terms -+of GNU GENERAL PUBLIC LICENSE (http://www.fsf.org/copyleft/gpl.html) or under license terms -+that conform to the present open source definition (http://www.opensource.org/osd.html) and -+provided that the party relying on this commitment does not assert its patents against Nokia. -+ -+Otherwise general Nokia Statement on Patent Licensing (http://www.ietf.org/ietf/IPR/NOKIA) -+applies to this submission. -+ -+ -+Heikki Huttunen -+Director, Licensing -+Nokia Corporation -+P.O Box 86, FIN-24101 Salo, Finland -+Phone: +358 (0) 7180 41202, Fax: +358 (0) 7180 44275 -diff -r a7e20b0b5c43 man/mip6d.conf.tmpl ---- a/man/mip6d.conf.tmpl Wed Nov 28 16:43:32 2007 +0100 -+++ b/man/mip6d.conf.tmpl Tue Jan 08 11:28:48 2008 +0100 -@@ -1,12 +1,12 @@ - .\" $Id: mip6d.conf.tmpl 1.33 06/05/12 11:48:36+03:00 vnuorval@tcs.hut.fi $ --.TH mip6d.conf 5 "January 31, 2006" "" "Mobile IPv6 Daemon Configuration" -+.TH mip6d.conf 5 "January 31, 2006" "" "Mobile IPv6 and NEMO Daemon Configuration" - .SH NAME --mip6d.conf \- MIPL Mobile IPv6 Configuration file -+mip6d.conf \- MIPL Mobile IPv6 and NEMO Configuration file - .SH SYNOPSIS - .B %etc%/mip6d.conf - .sp - .SH DESCRIPTION --MIPL Mobile IPv6 daemon's configuration file -+MIPL Mobile IPv6 and NEMO daemon's configuration file - .P - Below is a list of currently supported configuration options. All - configuration lines are terminated with a semicolon. Sub-sections are -@@ -184,10 +184,29 @@ Default: 86400 - Default: 86400 - - .TP --.BR "BindingAclPolicy " "address " "allow | deny" -+.BR "HaAcceptMobRtr enabled | disabled" - --Defines if a MN is allowed to register with the HA or not. The MN home address --of the MN is given in the address field." -+Indicates if the HA accepts Mobile Router bindings. -+ -+Default: disabled; -+ -+.TP -+.BR "HaServedPrefix " "prefix/length" ";" -+ -+Prefix is an IPv6 prefix and length is the prefix length. Defines the whole -+aggregated or extended prefix the HA serves. This option is only used for MR -+bindings and is only needed if the MRs derive their Home Addresses from their -+Mobile Network Prefixes, instead of one of the home link prefixes. -+ -+.TP -+.BR "BindingAclPolicy " "address MNP list " "allow | deny" -+ -+Defines if a MN is allowed to register with the HA or not. The home address -+of the MN is given in the address field. The mobile network prefixes -+belonging a NEMO Mobile Router are listed in the MNP list. The list can either -+be an empty string or a comma separated list of network prefixes -+enclosed in braces, for example: -+.B "(3ffe:2620:6:3::/64, 3ffe:2620:6:4::/64)" - - .TP - .BR "DefaultBindingAclPolicy allow | deny" -@@ -254,6 +273,13 @@ Default: disabled - Default: disabled - - .TP -+.BR "MobRtrUseExplicitMode enabled | disabled" -+ -+Toggles between explicit or implicit mode home registrations in the MR. -+ -+Default: enabled -+ -+.TP - .BR "UseCnBuAck " "boolean" ";" - - Indicates if the Acknowledge bit should be set in Binding Updates sent to -@@ -299,7 +325,7 @@ Default: disabled; - .TP - .nf - .BR "MnHomeLink " "name " "{" --.BR " HomeAddress " "address/length" ";" -+.BR " HomeAddress " "address/length MNP list" ";" - .BR " HomeAgentAddress " "address" ";" - .BR " MnRoPolicy ..." - .BR " ..." -@@ -317,11 +343,14 @@ definitions. All the home link specific - definitions. All the home link specific definitions are detailed below: - - .TP --.BR "HomeAddress " "address/length" ";" -+.BR "HomeAddress " "address/length MNP list" ";" - - Address is an IPv6 address, and length the prefix length of the --address, usually 64. This option must be included in a home link --definition. -+address, usually 64. The MNP list contains the mobile network prefixes -+belonging to that particular NEMO Mobile Router. The MNP list is of the -+same format as in -+.B "BindingAclPolicy." -+This option must be included in a home link definition. - - .TP - .BR "HomeAgentAddress " "address" ";" -@@ -330,6 +359,13 @@ if it is the unspecified address ::. - if it is the unspecified address ::. - - Default: :: -+ -+.TP -+.BR "IsMobRtr enabled | disabled" -+ -+Defines if the MN is a NEMO MR. -+ -+Default: disabled - - .TP - The route optimization policies are of the form: -@@ -351,6 +387,49 @@ matching this entry. - matching this entry. - - .SH EXAMPLES -+ -+.TP -+.BR "A NEMO Home Agent example:" -+ -+.nf -+NodeConfig HA; -+ -+Interface "eth0"; -+ -+HaAcceptMobRtr enabled; -+ -+HaServedPrefix 3ffe:2620:6::/48; -+ -+DefaultBindingAclPolicy deny; -+BindingAclPolicy 3ffe:2620:6:1::1234 (3ffe:2620:6:2::/64, 3ffe:2620:6:3::/64) allow; -+BindingAclPolicy 3ffe:2620:6:1::1235 allow; -+ -+UseMnHaIPsec disabled; -+.fi -+ -+.TP -+.BR "A NEMO Mobile Router example:" -+ -+.nf -+NodeConfig MN; -+ -+DoRouteOptimizationCN disabled; -+DoRouteOptimizationMN disabled; -+ -+Interface "eth0"; -+ -+MnRouterProbes 1; -+ -+MobRtrUseExplicitMode enabled; -+ -+MnHomeLink "eth0" { -+ IsMobRtr enabled; -+ HomeAgentAddress 3ffe:2620:6:1::1; -+ HomeAddress 3ffe:2620:6:1::1234/64 (3ffe:2620:6:2::/64, 3ffe:2620:6:3::/64); -+} -+ -+UseMnHaIPsec disabled; -+.fi - - .TP - .BR "A Correspondent Node example:" -diff -r a7e20b0b5c43 man/mip6d.tmpl ---- a/man/mip6d.tmpl Wed Nov 28 16:43:32 2007 +0100 -+++ b/man/mip6d.tmpl Tue Jan 08 11:28:48 2008 +0100 -@@ -1,13 +1,13 @@ - .\" $Id: mip6d.tmpl 1.4 05/05/16 13:13:41+03:00 anttit@tcs.hut.fi $ --.TH mip6d 1 "May 16, 2005" "" "Mobile IPv6 Daemon" -+.TH mip6d 1 "May 16, 2005" "" "Mobile IPv6 and NEMO Daemon" - .SH NAME --mip6d \- MIPL Mobile IPv6 protocol implementation -+mip6d \- MIPL Mobile IPv6 and NEMO Basic Support protocol implementation - .SH SYNOPSIS - .B mip6d [options] - .sp - .SH DESCRIPTION - --Mobile IPv6 implementation -+Mobile IPv6 and NEMO Basic Support implementation - - .SH OPTIONS - .IP "\fB\-V, \-\-version\fP" -@@ -41,3 +41,5 @@ RFC3775: Mobility Support in IPv6, - .PP - RFC3776: Using IPsec to Protect Mobile IPv6 Signaling Between Mobile - Nodes and Home Agents -+.PP -+RFC3963: Network Mobility (NEMO) Basic Support Protocol -diff -r a7e20b0b5c43 src/bcache.c ---- a/src/bcache.c Wed Nov 28 16:43:32 2007 +0100 -+++ b/src/bcache.c Tue Jan 08 11:28:48 2008 +0100 -@@ -39,6 +39,7 @@ - #include "mh.h" - #include "cn.h" - #include "vt.h" -+#include "prefix.h" - - #define BCACHE_BUCKETS 32 - -@@ -63,6 +64,7 @@ void dump_bce(void *bce, void *os) - { - struct bcentry *e = (struct bcentry *)bce; - FILE *out = (FILE *)os; -+ int mnpcount = 0; - - fprintf(out, " == Binding Cache entry "); - -@@ -87,6 +89,37 @@ void dump_bce(void *bce, void *os) - NIP6ADDR(&e->our_addr)); - fprintf(out, " lifetime %ld\n ", e->lifetime.tv_sec); - fprintf(out, " seqno %d\n", e->seqno); -+ -+ if (e->flags & IP6_MH_BA_MR) { -+ struct list_head *list; -+ -+ /* MR registration type */ -+ fprintf(out, "MR Registration type: "); -+ switch(e->nemo_type) { -+ case BCE_NEMO_EXPLICIT: -+ fprintf(out, "explicit.\n"); -+ break; -+ case BCE_NEMO_IMPLICIT: -+ fprintf(out, "implicit.\n"); -+ break; -+ default: -+ fprintf(out, "unknown.\n"); -+ } -+ -+ /* Mobile Network prefixes */ -+ fprintf(out, "MR Mobile network prefixes: "); -+ list_for_each(list, &e->mob_net_prefixes) { -+ struct prefix_list_entry *p; -+ p = list_entry(list, struct prefix_list_entry, list); -+ if (mnpcount) -+ fprintf(out, " "); -+ fprintf(out, "%x:%x:%x:%x:%x:%x:%x:%x/%d\n", -+ NIP6ADDR(&p->ple_prefix), p->ple_plen); -+ mnpcount++; -+ } -+ if (!mnpcount) -+ fprintf(out, " none registered.\n"); -+ } - - fflush(out); - } -@@ -144,6 +177,7 @@ struct bcentry *bcache_alloc(int type) - } - memset(tmp, 0, sizeof(*tmp)); - INIT_LIST_HEAD(&tmp->tqe.list); -+ INIT_LIST_HEAD(&tmp->mob_net_prefixes); - return tmp; - } - -@@ -158,6 +192,7 @@ void bcache_free(struct bcentry *bce) - /* This function should really return allocated space to free - * pool. */ - pthread_rwlock_destroy(&bce->lock); -+ prefix_list_free(&bce->mob_net_prefixes); - free(bce); - } - -diff -r a7e20b0b5c43 src/bcache.h ---- a/src/bcache.h Wed Nov 28 16:43:32 2007 +0100 -+++ b/src/bcache.h Tue Jan 08 11:28:48 2008 +0100 -@@ -18,7 +18,8 @@ struct bcentry { - - uint16_t nonce_coa; - uint16_t nonce_hoa; -- int type; /* Entry type */ -+ uint16_t type; /* Entry type */ -+ uint16_t nemo_type; /* NEMO registration type */ - int unreach; /* ICMP dest unreach count */ - int tunnel; /* Tunnel interface index */ - int link; /* Home link interface index */ -@@ -33,6 +34,8 @@ struct bcentry { - struct tq_elem tqe; /* Timer queue entry for expire */ - - void (*cleanup)(struct bcentry *bce); /* Clean up bce data */ -+ -+ struct list_head mob_net_prefixes; - }; - - #define BCE_NONCE_BLOCK 0 -@@ -40,6 +43,10 @@ struct bcentry { - #define BCE_CACHED 2 - #define BCE_CACHE_DYING 3 - #define BCE_DAD 4 -+ -+#define BCE_NEMO_EXPLICIT 1 -+#define BCE_NEMO_IMPLICIT 2 -+#define BCE_NEMO_DYNAMIC 3 - - struct bcentry *bcache_alloc(int type); - -diff -r a7e20b0b5c43 src/bul.c ---- a/src/bul.c Wed Nov 28 16:43:32 2007 +0100 -+++ b/src/bul.c Tue Jan 08 11:28:48 2008 +0100 -@@ -103,9 +103,11 @@ void dump_bule(void *bule, void *os) - if (e->flags & IP6_MH_BU_ACK) - fprintf(out, "IP6_MH_BU_ACK "); - if (e->flags & IP6_MH_BU_LLOCAL) -- fprintf(out, "IP6_MH_BU_LLOCAL"); -+ fprintf(out, "IP6_MH_BU_LLOCAL "); - if (e->flags & IP6_MH_BU_KEYM) -- fprintf(out, "IP6_MH_BU_KEYM"); -+ fprintf(out, "IP6_MH_BU_KEYM "); -+ if (e->flags & IP6_MH_BU_MR) -+ fprintf(out, "IP6_MH_BU_MR"); - - fprintf(out, "\n"); - fflush(out); -@@ -184,7 +186,8 @@ int bul_add(struct bulentry *bule) - goto home_bul_free; - } else if (bule->type == NON_MIP_CN_ENTRY) { - if (bule->flags & IP6_MH_BU_HOME) { -- if (xfrm_block_hoa(hai) < 0) -+ if (xfrm_block_hoa(hai) < 0 || -+ (hai->mob_rtr && xfrm_block_ra(hai) < 0)) - goto home_bul_free; - } - } -@@ -231,6 +234,10 @@ void bul_delete(struct bulentry *bule) - xfrm_unblock_link(hai); - if (hai->home_block & HOME_ADDR_BLOCK) - xfrm_unblock_hoa(hai); -+ if (hai->home_block & NEMO_RA_BLOCK) -+ xfrm_unblock_ra(hai); -+ if (hai->home_block & NEMO_FWD_BLOCK) -+ xfrm_unblock_fwd(hai); - } - } - while (bule->ext_cleanup) -diff -r a7e20b0b5c43 src/cn.c ---- a/src/cn.c Wed Nov 28 16:43:32 2007 +0100 -+++ b/src/cn.c Tue Jan 08 11:28:48 2008 +0100 -@@ -177,8 +177,8 @@ void cn_recv_bu(const struct ip6_mh *mh, - non_ind = mh_opt(&bu->ip6mhbu_hdr, &mh_opts, IP6_MHOPT_NONCEID); - bce = bcache_get(out.src, out.dst); - if (bce) { -- if ((bce->flags^bu_flags) & IP6_MH_BU_HOME) { -- /* H-bit mismatch, flags changed */ -+ if ((bce->flags^bu_flags) & (IP6_MH_BU_HOME|IP6_MH_BU_MR)) { -+ /* H-bit or R-bit mismatch, flags changed */ - bcache_release_entry(bce); - bce = NULL; - status = IP6_MH_BAS_REG_NOT_ALLOWED; -@@ -221,9 +221,15 @@ void cn_recv_bu(const struct ip6_mh *mh, - /* else get rid of it */ - bcache_delete(out.src, out.dst); - } -- } else if (bu_flags & IP6_MH_BU_HOME) { -- status = IP6_MH_BAS_HA_NOT_SUPPORTED; -- goto send_nack; -+ } else { -+ if (bu_flags & IP6_MH_BU_HOME) { -+ status = IP6_MH_BAS_HA_NOT_SUPPORTED; -+ goto send_nack; -+ } -+ if (bu_flags & IP6_MH_BU_MR) { -+ status = IP6_MH_BAS_MR_OP_NOT_PERMITTED; -+ goto send_nack; -+ } - } - status = conf.pmgr.discard_binding(out.dst, out.bind_coa, - out.src, bu, len); -diff -r a7e20b0b5c43 src/conf.c ---- a/src/conf.c Wed Nov 28 16:43:32 2007 +0100 -+++ b/src/conf.c Tue Jan 08 11:28:48 2008 +0100 -@@ -212,6 +212,7 @@ static void conf_default(struct mip6_con - INIT_LIST_HEAD(&c->home_addrs); - c->MoveModulePath = NULL; /* internal */ - c->DoRouteOptimizationMN = 1; -+ c->MobRtrUseExplicitMode = 1; - c->SendMobPfxSols = 1; - c->OptimisticHandoff = 0; - -@@ -221,6 +222,7 @@ static void conf_default(struct mip6_con - c->MaxMobPfxAdvInterval = 86400; /* seconds */ - c->MinMobPfxAdvInterval = 600; /* seconds */ - c->HaMaxBindingLife = MAX_BINDING_LIFETIME; -+ INIT_LIST_HEAD(&c->nemo_ha_served_prefixes); - - /* CN bindings */ - c->DoRouteOptimizationCN = 1; -@@ -304,6 +306,8 @@ void conf_show(struct mip6_config *c) - CONF_BOOL_STR(c->MnDiscardHaParamProb)); - dbg("SendMobPfxSols = %s\n", CONF_BOOL_STR(c->SendMobPfxSols)); - dbg("OptimisticHandoff = %s\n", CONF_BOOL_STR(c->OptimisticHandoff)); -+ dbg("MobRtrUseExplicitMode = %s\n", -+ CONF_BOOL_STR(c->MobRtrUseExplicitMode)); - - /* HA options */ - dbg("SendMobPfxAdvs = %s\n", CONF_BOOL_STR(c->SendMobPfxAdvs)); -@@ -312,7 +316,8 @@ void conf_show(struct mip6_config *c) - dbg("MaxMobPfxAdvInterval = %u\n", c->MaxMobPfxAdvInterval); - dbg("MinMobPfxAdvInterval = %u\n", c->MinMobPfxAdvInterval); - dbg("HaMaxBindingLife = %u\n", c->HaMaxBindingLife); -- -+ dbg("HaAcceptMobRtr = %s\n", CONF_BOOL_STR(c->HaAcceptMobRtr)); -+ - /* CN options */ - dbg("DoRouteOptimizationCN = %s\n", - CONF_BOOL_STR(c->DoRouteOptimizationCN)); -diff -r a7e20b0b5c43 src/conf.h ---- a/src/conf.h Wed Nov 28 16:43:32 2007 +0100 -+++ b/src/conf.h Tue Jan 08 11:28:48 2008 +0100 -@@ -39,6 +39,7 @@ struct mip6_config { - struct list_head home_addrs; - char *MoveModulePath; - uint16_t CnBuAck; -+ char MobRtrUseExplicitMode; - char DoRouteOptimizationMN; - char MnUseAllInterfaces; - char MnDiscardHaParamProb; -@@ -46,15 +47,16 @@ struct mip6_config { - char OptimisticHandoff; - - /* HA options */ -+ char HaAcceptMobRtr; - char SendMobPfxAdvs; - char SendUnsolMobPfxAdvs; - unsigned int MaxMobPfxAdvInterval; - unsigned int MinMobPfxAdvInterval; - unsigned int HaMaxBindingLife; -+ struct list_head nemo_ha_served_prefixes; - - /* CN options */ - char DoRouteOptimizationCN; -- - }; - - struct net_iface { -diff -r a7e20b0b5c43 src/dhaad_ha.c ---- a/src/dhaad_ha.c Wed Nov 28 16:43:32 2007 +0100 -+++ b/src/dhaad_ha.c Tue Jan 08 11:28:48 2008 +0100 -@@ -83,8 +83,8 @@ static void dhaad_expire_halist(struct t - pthread_rwlock_unlock(&ha_lock); - } - --void dhaad_insert_halist(struct ha_interface *i, -- uint16_t key, uint16_t life_sec, -+void dhaad_insert_halist(struct ha_interface *i, uint16_t key, -+ uint16_t life_sec, uint16_t flags, - struct nd_opt_prefix_info *pinfo, - const struct in6_addr *lladdr) - { -@@ -110,6 +110,7 @@ void dhaad_insert_halist(struct ha_inter - return; - } - memset(ha, 0, sizeof(*ha)); -+ ha->flags = flags; - ha->iface = i; - ha->addr = *addr; - INIT_LIST_HEAD(&ha->tqe.list); -@@ -136,18 +137,22 @@ void dhaad_insert_halist(struct ha_inter - return; - } - --static int dhaad_get_halist(struct ha_interface *i, int max, struct iovec *iov) -+static int dhaad_get_halist(struct ha_interface *i, uint16_t flags, -+ int max, struct iovec *iov) - { - struct list_head *lp; - int n = 0; - list_for_each(lp, &i->ha_list) { - struct home_agent *h; - h = list_entry(lp, struct home_agent, list); -- n++; -- iov[n].iov_len = sizeof(struct in6_addr); -- iov[n].iov_base = &h->addr; -- if (n >= max) -- break; -+ if (!(flags & MIP_DHREQ_FLAG_SUPPORT_MR) || -+ h->flags & ND_OPT_HAI_FLAG_SUPPORT_MR) { -+ n++; -+ iov[n].iov_len = sizeof(struct in6_addr); -+ iov[n].iov_base = &h->addr; -+ if (n >= max) -+ break; -+ } - } - return n; - } -@@ -177,8 +182,12 @@ static void dhaad_recv_req(const struct - - rph->mip_dhrep_id = rqh->mip_dhreq_id; - -+ if (rqh->mip_dhreq_flags_reserved & MIP_DHREQ_FLAG_SUPPORT_MR) -+ rph->mip_dhrep_flags_reserved = MIP_DHREP_FLAG_SUPPORT_MR; -+ - pthread_rwlock_rdlock(&ha_lock); -- iovlen = dhaad_get_halist(i, MAX_HOME_AGENTS, iov); -+ iovlen = dhaad_get_halist(i, rqh->mip_dhreq_flags_reserved, -+ MAX_HOME_AGENTS, iov); - icmp6_send(i->ifindex, 64, ha_addr, src, iov, iovlen + 1); - pthread_rwlock_unlock(&ha_lock); - free_iov_data(&iov[0], 1); -diff -r a7e20b0b5c43 src/dhaad_ha.h ---- a/src/dhaad_ha.h Wed Nov 28 16:43:32 2007 +0100 -+++ b/src/dhaad_ha.h Tue Jan 08 11:28:48 2008 +0100 -@@ -17,8 +17,8 @@ void dhaad_halist_iterate(struct ha_inte - int (* func)(int, void *, void *), void *arg); - #endif - --void dhaad_insert_halist(struct ha_interface *i, -- uint16_t key, uint16_t life_sec, -+void dhaad_insert_halist(struct ha_interface *i, uint16_t key, -+ uint16_t life_sec, uint16_t flags, - struct nd_opt_prefix_info *pinfo, - const struct in6_addr *lladdr); - -diff -r a7e20b0b5c43 src/dhaad_mn.c ---- a/src/dhaad_mn.c Wed Nov 28 16:43:32 2007 +0100 -+++ b/src/dhaad_mn.c Tue Jan 08 11:28:48 2008 +0100 -@@ -86,7 +86,8 @@ static int dhaad_append_candidate(struct - } - - static int dhaad_send_request(int oif, struct in6_addr *src, -- struct in6_addr *pfx, int plen) -+ struct in6_addr *pfx, int plen, -+ uint16_t flags) - { - struct mip_dhaad_req *ih; - struct iovec iov; -@@ -98,6 +99,7 @@ static int dhaad_send_request(int oif, s - return -1; - id = dhaad_id++; - ih->mip_dhreq_id = htons(id); -+ ih->mip_dhreq_flags_reserved = flags; - dhaad_gen_ha_anycast(&dst, pfx, plen); - icmp6_send(oif, 0, src, &dst, &iov, 1); - free_iov_data(&iov, 1); -@@ -121,7 +123,9 @@ static void dhaad_resend(struct tq_elem - t->dhaad_id = dhaad_send_request(hai->primary_coa.iif, - &hai->primary_coa.addr, - &hai->home_prefix, -- hai->home_plen); -+ hai->home_plen, -+ hai->mob_rtr? -+ MIP_DHREQ_FLAG_SUPPORT_MR:0); - t->dhaad_resends++; - tsadd(t->dhaad_delay, t->dhaad_delay, t->dhaad_delay); - add_task_rel(&t->dhaad_delay, &t->tqe, dhaad_resend); -@@ -139,11 +143,15 @@ static void _dhaad_start(struct home_add - t->dhaad_resends == DHAAD_RETRIES))) { - if (!(hai->home_block & HOME_ADDR_BLOCK)) - xfrm_block_hoa(hai); -+ if (hai->mob_rtr && !(hai->home_block & NEMO_RA_BLOCK)) -+ xfrm_block_ra(hai); - t->dhaad_resends = 0; - t->dhaad_id = dhaad_send_request(hai->primary_coa.iif, - &hai->primary_coa.addr, - &hai->home_prefix, -- hai->home_plen); -+ hai->home_plen, -+ hai->mob_rtr? -+ MIP_DHREQ_FLAG_SUPPORT_MR:0); - t->dhaad_delay = INITIAL_DHAAD_TIMEOUT_TS; - add_task_rel(&t->dhaad_delay, &t->tqe, dhaad_resend); - } -@@ -165,6 +173,8 @@ static void _dhaad_stop(struct home_addr - tsclear(t->dhaad_delay); - if (hai->home_block & HOME_ADDR_BLOCK) - xfrm_unblock_hoa(hai); -+ if (hai->home_block & NEMO_RA_BLOCK) -+ xfrm_unblock_ra(hai); - } - - void dhaad_stop(struct home_addr_info *hai) -@@ -245,6 +255,12 @@ static void dhaad_recv_rep(const struct - pthread_rwlock_unlock(&mn_lock); - return; - } -+ if (hai->mob_rtr && -+ !(rph->mip_dhrep_flags_reserved & MIP_DHREP_FLAG_SUPPORT_MR)) { -+ dbg("HA doesn't support MR\n"); -+ pthread_rwlock_unlock(&mn_lock); -+ return; -+ } - ha = (struct in6_addr *)(ih + 1); - - dhaad_flush_candidates(&hai->ha_list); -diff -r a7e20b0b5c43 src/gram.y ---- a/src/gram.y Wed Nov 28 16:43:32 2007 +0100 -+++ b/src/gram.y Tue Jan 08 11:28:48 2008 +0100 -@@ -30,10 +30,10 @@ - #ifdef HAVE_CONFIG_H - #include - #endif -+#include - #include - #include - #include --#include - #include - #include - #include -@@ -54,8 +54,23 @@ struct net_iface ni = { - }; - - struct home_addr_info hai = { -- .ro_policies = LIST_HEAD_INIT(hai.ro_policies) -+ .ro_policies = LIST_HEAD_INIT(hai.ro_policies), -+ .mob_net_prefixes = LIST_HEAD_INIT(hai.mob_net_prefixes) - }; -+ -+LIST_HEAD(prefixes); -+ -+int mv_prefixes(struct list_head *list) -+{ -+ struct list_head *l, *n; -+ int res = 0; -+ list_for_each_safe(l, n, &prefixes) { -+ list_del(l); -+ list_add_tail(l, list); -+ res++; -+ } -+ return res; -+} - - struct policy_bind_acl_entry *bae = NULL; - -@@ -165,6 +180,11 @@ static void uerror(const char *fmt, ...) - %token MNROUTERPROBETIMEOUT - %token MNDISCARDHAPARAMPROB - %token OPTIMISTICHANDOFF -+%token HOMEPREFIX -+%token HAACCEPTMOBRTR -+%token ISMOBRTR -+%token HASERVEDPREFIX -+%token MOBRTRUSEEXPLICITMODE - - %token INV_TOKEN - -@@ -282,6 +302,19 @@ topdef : MIP6ENTITY mip6entity ';' - { - conf.DefaultBindingAclPolicy = $2; - } -+ | HAACCEPTMOBRTR BOOL ';' -+ { -+ conf.HaAcceptMobRtr = $2; -+ } -+ | HASERVEDPREFIX prefixlistentry ';' -+ { -+ list_splice(&prefixes, -+ conf.nemo_ha_served_prefixes.prev); -+ } -+ | MOBRTRUSEEXPLICITMODE BOOL ';' -+ { -+ conf.MobRtrUseExplicitMode = $2; -+ } - | BINDINGACLPOLICY bindaclpolicy ';' - { - bae = NULL; -@@ -398,12 +431,16 @@ linksub : QSTRING '{' linkdefs '}' - memcpy(nhai, &hai, sizeof(struct home_addr_info)); - INIT_LIST_HEAD(&nhai->ro_policies); - INIT_LIST_HEAD(&nhai->ha_list.home_agents); -+ INIT_LIST_HEAD(&nhai->mob_net_prefixes); - nhai->ha_list.dhaad_id = -1; - list_splice(&hai.ro_policies, &nhai->ro_policies); -+ list_splice(&hai.mob_net_prefixes, -+ &nhai->mob_net_prefixes); - list_add_tail(&nhai->list, &conf.home_addrs); - - memset(&hai, 0, sizeof(struct home_addr_info)); - INIT_LIST_HEAD(&hai.ro_policies); -+ INIT_LIST_HEAD(&hai.mob_net_prefixes); - } - ; - -@@ -415,16 +452,35 @@ linkdef : HOMEAGENTADDRESS ADDR ';' - { - memcpy(&hai.ha_addr, &$2, sizeof(struct in6_addr)); - } -- | HOMEADDRESS ADDR '/' prefixlen ';' -- { -- hai.hoa.addr = $2; -- hai.plen = $4; -- } -+ | HOMEADDRESS homeaddress ';' - | USEALTCOA BOOL ';' - { - hai.altcoa = $2; - } - | MNROPOLICY mnropolicy ';' -+ | ISMOBRTR BOOL ';' -+ { -+ if ($2) -+ hai.mob_rtr = IP6_MH_BU_MR; -+ } -+ | HOMEPREFIX ADDR '/' prefixlen ';' -+ { -+ ipv6_addr_prefix(&hai.home_prefix, &$2, $4); -+ hai.home_plen = $4; -+ } -+ ; -+ -+homeaddress : homeaddrdef prefixlistsub -+ { -+ hai.mnp_count = mv_prefixes(&hai.mob_net_prefixes); -+ } -+ ; -+ -+homeaddrdef : ADDR '/' prefixlen -+ { -+ hai.hoa.addr = $1; -+ hai.plen = $3; -+ } - ; - - ipsecpolicyset : ipsechaaddrdef ipsecmnaddrdefs ipsecpolicydefs -@@ -639,7 +695,7 @@ bindaclpolval : BOOL - | NUMBER { $$ = $1; } - ; - --bindaclpolicy : ADDR bindaclpolval -+bindaclpolicy : ADDR prefixlistsub bindaclpolval - { - bae = malloc(sizeof(struct policy_bind_acl_entry)); - if (bae == NULL) { -@@ -649,7 +705,9 @@ bindaclpolicy : ADDR bindaclpolval - memset(bae, 0, sizeof(struct policy_bind_acl_entry)); - bae->hoa = $1; - bae->plen = 128; -- bae->bind_policy = $2; -+ INIT_LIST_HEAD(&bae->mob_net_prefixes); -+ bae->mnp_count = mv_prefixes(&bae->mob_net_prefixes); -+ bae->bind_policy = $3; - list_add_tail(&bae->list, &conf.bind_acl); - } - ; -@@ -664,4 +722,27 @@ prefixlen : NUMBER - } - ; - -+prefixlistsub : -+ | '(' prefixlist ')' -+ ; -+ -+prefixlist : prefixlistentry -+ | prefixlist ',' prefixlistentry -+ ; -+ -+prefixlistentry : ADDR '/' prefixlen -+ { -+ struct prefix_list_entry *p; -+ p = malloc(sizeof(struct prefix_list_entry)); -+ if (p == NULL) { -+ fprintf(stderr, -+ "%s: out of memory\n", __FUNCTION__); -+ return -1; -+ } -+ memset(p, 0, sizeof(struct prefix_list_entry)); -+ p->ple_prefix = $1; -+ p->ple_plen = $3; -+ list_add_tail(&p->list, &prefixes); -+ } -+ ; - %% -diff -r a7e20b0b5c43 src/ha.c ---- a/src/ha.c Wed Nov 28 16:43:32 2007 +0100 -+++ b/src/ha.c Tue Jan 08 11:28:48 2008 +0100 -@@ -79,6 +79,7 @@ static void ha_recv_ra(const struct icmp - struct ha_interface *iface; - uint16_t pref = 0; - uint16_t life = 0; -+ uint16_t flags = 0; - - /* validity checks */ - if (hoplimit < 255 || !IN6_IS_ADDR_LINKLOCAL(src) || -@@ -120,6 +121,7 @@ static void ha_recv_ra(const struct icmp - hainfo = (struct nd_opt_homeagent_info *)opt; - pref = ntohs(hainfo->nd_opt_hai_preference); - life = ntohs(hainfo->nd_opt_hai_lifetime); -+ flags = hainfo->nd_opt_hai_flags_reserved; - } - optlen -= olen; - opt += olen; -@@ -129,7 +131,7 @@ static void ha_recv_ra(const struct icmp - if (pinfo[i]->nd_opt_pi_flags_reserved & - ND_OPT_PI_FLAG_RADDR) { - dhaad_insert_halist(iface, pref, life, -- pinfo[i], src); -+ flags, pinfo[i], src); - } - } - mpd_del_expired_pinfos(iface); -@@ -499,14 +501,53 @@ static int ha_vt_init(void) - } - #endif - -+ -+static void nemo_ha_del_mnp_routes(struct list_head *old_mnps, -+ struct list_head *new_mnps, -+ int ifindex, int all) -+{ -+ struct list_head *list; -+ list_for_each(list, old_mnps) { -+ struct prefix_list_entry *p; -+ p = list_entry(list, struct prefix_list_entry, list); -+ if (!all && -+ prefix_list_find(new_mnps, &p->ple_prefix, p->ple_plen)) -+ continue; -+ -+ route_del(ifindex, RT6_TABLE_MIP6, IP6_RT_PRIO_MIP6_FWD, -+ NULL, 0, &p->ple_prefix, p->ple_plen, NULL); -+ } -+} -+ -+static int nemo_ha_add_mnp_routes(struct list_head *old_mnps, -+ struct list_head *new_mnps, -+ int ifindex, int all) -+{ -+ struct list_head *list; -+ list_for_each(list, new_mnps) { -+ struct prefix_list_entry *p; -+ p = list_entry(list, struct prefix_list_entry, list); -+ if (!all && -+ prefix_list_find(old_mnps, &p->ple_prefix, p->ple_plen)) -+ continue; -+ if (route_add(ifindex, RT6_TABLE_MIP6, RTPROT_MIP, -+ 0, IP6_RT_PRIO_MIP6_FWD, -+ NULL, 0, &p->ple_prefix, p->ple_plen, NULL) < 0) -+ return -1; -+ } -+ return 0; -+} -+ - struct home_tnl_ops_parm { - struct bcentry *bce; - int ba_status; -+ struct list_head mob_net_prefixes; - }; - - static int home_tnl_del(int old_if, int new_if, struct home_tnl_ops_parm *p) - { - const struct in6_addr *our_addr, *peer_addr, *coa, *old_coa; -+ struct list_head *mnp; - - assert(old_if); - -@@ -514,17 +555,22 @@ static int home_tnl_del(int old_if, int - peer_addr = &p->bce->peer_addr; - coa = &p->bce->peer_addr; - old_coa = &p->bce->coa; -+ mnp = &p->bce->mob_net_prefixes; - - if (conf.UseMnHaIPsec) { - /* migrate */ - ha_ipsec_tnl_update(our_addr, peer_addr, -- coa, old_coa, p->bce->tunnel); -+ coa, old_coa, p->bce->tunnel, mnp); - /* delete SP entry */ -- ha_ipsec_tnl_pol_del(our_addr, peer_addr, p->bce->tunnel); -+ ha_ipsec_tnl_pol_del(our_addr, peer_addr, p->bce->tunnel, mnp); - } - /* delete HoA route */ - route_del(old_if, RT6_TABLE_MAIN, - IP6_RT_PRIO_MIP6_FWD, NULL, 0, peer_addr, 128, NULL); -+ -+ /* delete MNP routes */ -+ nemo_ha_del_mnp_routes(&p->bce->mob_net_prefixes, -+ &p->mob_net_prefixes, old_if, 1); - /* update tunnel interface */ - p->bce->tunnel = new_if; - -@@ -534,17 +580,29 @@ static int home_tnl_add(int old_if, int - static int home_tnl_add(int old_if, int new_if, struct home_tnl_ops_parm *p) - { - const struct in6_addr *our_addr, *peer_addr, *coa, *old_coa; -+ struct list_head *mnp; - - assert(new_if); - - our_addr = &p->bce->our_addr; - peer_addr = &p->bce->peer_addr; - coa = &p->bce->coa; -- old_coa = &p->bce->peer_addr; -+ old_coa = IN6_ARE_ADDR_EQUAL(&p->bce->old_coa, &in6addr_any) ? -+ &p->bce->peer_addr : &p->bce->old_coa; -+ mnp = &p->mob_net_prefixes; - - /* update tunnel interface */ - p->bce->tunnel = new_if; - -+ /* add MNP routes */ -+ if (nemo_ha_add_mnp_routes(&p->bce->mob_net_prefixes, -+ &p->mob_net_prefixes, new_if, 1) < 0) { -+ if (p->bce->nemo_type == BCE_NEMO_EXPLICIT) -+ p->ba_status = IP6_MH_BAS_INVAL_PRFX; -+ else -+ p->ba_status = IP6_MH_BAS_FWDING_FAILED; -+ goto err; -+ } - /* add HoA route */ - if (route_add(new_if, RT6_TABLE_MAIN, - RTPROT_MIP, 0, IP6_RT_PRIO_MIP6_FWD, -@@ -555,13 +613,13 @@ static int home_tnl_add(int old_if, int - /* add SP entry */ - if (conf.UseMnHaIPsec) { - if (ha_ipsec_tnl_pol_add(our_addr, peer_addr, -- p->bce->tunnel) < 0) { -+ p->bce->tunnel, mnp) < 0) { - p->ba_status = IP6_MH_BAS_INSUFFICIENT; - goto err; - } - /* migrate */ - if (ha_ipsec_tnl_update(our_addr, peer_addr, coa, old_coa, -- p->bce->tunnel) < 0) { -+ p->bce->tunnel, mnp) < 0) { - p->ba_status = IP6_MH_BAS_INSUFFICIENT; - goto err; - } -@@ -578,17 +636,51 @@ static int home_tnl_chg(int old_if, int - - if (old_if == new_if) { - const struct in6_addr *our_addr, *peer_addr, *coa, *old_coa; -+ struct list_head *mnp; - - our_addr = &p->bce->our_addr; - peer_addr = &p->bce->peer_addr; - coa = &p->bce->coa; - old_coa = &p->bce->old_coa; -+ mnp = &p->mob_net_prefixes; -+ -+ /* if interface hasn't changed, at least check if the -+ MR's MNPs have changed */ -+ if (!prefix_list_cmp(&p->bce->mob_net_prefixes, -+ &p->mob_net_prefixes)) { -+ -+ /* Remove old policies and install new ones */ -+ if (conf.UseMnHaIPsec) { -+ ha_ipsec_mnp_pol_del(our_addr, peer_addr, -+ &p->bce->mob_net_prefixes, -+ &p->mob_net_prefixes, -+ p->bce->tunnel); -+ ha_ipsec_mnp_pol_add(our_addr, peer_addr, -+ &p->bce->mob_net_prefixes, -+ &p->mob_net_prefixes, -+ p->bce->tunnel); -+ } -+ -+ /* Do the same for routes */ -+ nemo_ha_del_mnp_routes(&p->bce->mob_net_prefixes, -+ &p->mob_net_prefixes, -+ old_if, 0); -+ if (nemo_ha_add_mnp_routes(&p->bce->mob_net_prefixes, -+ &p->mob_net_prefixes, -+ new_if, 0) < 0) { -+ if (p->bce->nemo_type == BCE_NEMO_EXPLICIT) -+ p->ba_status = IP6_MH_BAS_INVAL_PRFX; -+ else -+ p->ba_status = IP6_MH_BAS_FWDING_FAILED; -+ return -1; -+ } -+ } - - /* migrate */ - if (conf.UseMnHaIPsec && - !IN6_ARE_ADDR_EQUAL(old_coa, coa) && - ha_ipsec_tnl_update(our_addr, peer_addr, coa, old_coa, -- p->bce->tunnel) < 0) { -+ p->bce->tunnel, mnp) < 0) { - return -1; - } - } else { -@@ -632,6 +724,61 @@ static void home_cleanup(struct bcentry - if (conf.UseMnHaIPsec) { - ha_mn_ipsec_pol_mod(&bce->our_addr, &bce->peer_addr); - } -+} -+ -+ -+static int ha_extract_mnps(const struct ip6_mh_binding_update *bu, -+ const struct mh_options *opts, -+ struct list_head *mob_net_prefixes) -+{ -+ struct ip6_mh_opt_mob_net_prefix *op; -+ int prefix_count = 0; -+ for (op = mh_opt(&bu->ip6mhbu_hdr, opts, IP6_MHOPT_MOB_NET_PRFX); -+ op != NULL; -+ op = mh_opt_next(&bu->ip6mhbu_hdr, opts, op)) { -+ struct prefix_list_entry *p; -+ p = malloc(sizeof(struct prefix_list_entry)); -+ if (p == NULL) { -+ prefix_list_free(mob_net_prefixes); -+ return -1; -+ } -+ memset(p, 0, sizeof(struct prefix_list_entry)); -+ p->ple_plen = op->ip6mnp_prefix_len; -+ p->ple_prefix = op->ip6mnp_prefix; -+ list_add_tail(&p->list, mob_net_prefixes); -+ prefix_count++; -+ } -+ return prefix_count; -+} -+ -+static int ha_get_mnps(const struct in6_addr *hoa, -+ struct list_head *mob_net_prefixes) -+{ -+ struct nd_opt_prefix_info *mnps; -+ int mnp_count = conf.pmgr.get_mnp_count(hoa); -+ int i; -+ -+ if (mnp_count <= 0) -+ return mnp_count; -+ -+ mnps = calloc(mnp_count, sizeof(struct nd_opt_prefix_info)); -+ if (mnps == NULL) -+ return -1; -+ -+ mnp_count = conf.pmgr.get_mnps(hoa, mnp_count, mnps); -+ for (i = 0; i < mnp_count; i++) { -+ struct prefix_list_entry *p; -+ p = malloc(sizeof(struct prefix_list_entry)); -+ if (p == NULL) { -+ prefix_list_free(mob_net_prefixes); -+ free(mnps); -+ return -1; -+ } -+ p->pinfo = *(mnps + i); -+ list_add_tail(&p->list, mob_net_prefixes); -+ } -+ free(mnps); -+ return mnp_count; - } - - struct ha_recv_bu_args { -@@ -684,8 +831,9 @@ restart: - bce = bcache_get(out.src, out.dst); - if (bce) { - if (bce->type != BCE_NONCE_BLOCK) { -- if (!(bce->flags & IP6_MH_BU_HOME)) { -- /* H-bit mismatch, flags changed */ -+ /* H-bit or R-bit mismatch, flags changed */ -+ if ((bce->flags ^ bu_flags) & -+ (IP6_MH_BU_HOME | IP6_MH_BU_MR)) { - bcache_release_entry(bce); - bce = NULL; - status = IP6_MH_BAS_REG_NOT_ALLOWED; -@@ -733,9 +881,15 @@ restart: - } - if ((status = mpd_prefix_check(out.src, out.dst, - &lft, &home_ifindex, new)) < 0) { -- /* not home agent for this subnet */ -- status = IP6_MH_BAS_NOT_HOME_SUBNET; -- goto send_nack; -+ if (!(bu_flags & IP6_MH_BU_MR) || -+ home_ifindex == 0 || -+ !prefix_list_find(&conf.nemo_ha_served_prefixes, -+ out.dst, 0)) { -+ /* not home agent for this subnet */ -+ status = IP6_MH_BAS_NOT_HOME_SUBNET; -+ goto send_nack; -+ } -+ status = IP6_MH_BAS_ACCEPTED; - } - status = conf.pmgr.discard_binding(out.dst, out.bind_coa, - out.src, arg->bu, arg->len); -@@ -787,6 +941,25 @@ restart: - } - new = 1; - } -+ INIT_LIST_HEAD(&p.mob_net_prefixes); -+ if (bu_flags & IP6_MH_BU_MR && tsisset(lft)) { -+ if (mh_opt(&arg->bu->ip6mhbu_hdr, -+ &arg->mh_opts, IP6_MHOPT_MOB_NET_PRFX) != NULL) { -+ if (ha_extract_mnps(arg->bu, -+ &arg->mh_opts, -+ &p.mob_net_prefixes) < 0) { -+ status = IP6_MH_BAS_INVAL_PRFX; -+ goto send_nack; -+ } -+ bce->nemo_type = BCE_NEMO_EXPLICIT; -+ } else if (ha_get_mnps(out.dst, &p.mob_net_prefixes) > 0) { -+ bce->nemo_type = BCE_NEMO_IMPLICIT; -+ } else { -+ /* Todo: dynamic routing */ -+ status = IP6_MH_BAS_FWDING_FAILED; -+ goto send_nack; -+ } -+ } - p.bce = bce; - p.ba_status = status; - bce->seqno = seqno; -@@ -801,6 +974,9 @@ restart: - status = IP6_MH_BAS_INSUFFICIENT; - goto send_nack; - } -+ /* Now save the MNP list in the BCE */ -+ list_splice(&p.mob_net_prefixes, &bce->mob_net_prefixes); -+ - bce->cleanup = home_cleanup; - - if (route_add(bce->link, RT6_TABLE_MIP6, -@@ -829,6 +1005,10 @@ restart: - status = IP6_MH_BAS_INSUFFICIENT; - goto send_nack; - } -+ /* Now update the MNP list in the BCE */ -+ prefix_list_free(&bce->mob_net_prefixes); -+ list_splice(&p.mob_net_prefixes, &bce->mob_net_prefixes); -+ - bcache_update_expire(bce); - } - /* bce is always valid here */ -@@ -855,6 +1035,9 @@ restart: - * have a binding before sending this Binding Update, - * discard the connections to the home address. */ - } -+ if (status < IP6_MH_BAS_UNSPECIFIED && bu_flags & IP6_MH_BU_MR) -+ ba_flags |= IP6_MH_BA_MR; -+ - if (!(arg->flags & HA_BU_F_SKIP_BA)) - mh_send_ba(&out, status, ba_flags, seqno, &lft, NULL, iif); - if (new && tsisset(lft)) -diff -r a7e20b0b5c43 src/ha.h ---- a/src/ha.h Wed Nov 28 16:43:32 2007 +0100 -+++ b/src/ha.h Tue Jan 08 11:28:48 2008 +0100 -@@ -23,6 +23,7 @@ struct home_agent { - struct list_head list; - struct in6_addr addr; - uint16_t preference; -+ uint16_t flags; - struct timespec lifetime; - struct ha_interface *iface; - struct tq_elem tqe; -diff -r a7e20b0b5c43 src/ipsec.c ---- a/src/ipsec.c Wed Nov 28 16:43:32 2007 +0100 -+++ b/src/ipsec.c Tue Jan 08 11:28:48 2008 +0100 -@@ -81,7 +81,9 @@ static void _set_sp(struct xfrm_userpoli - struct ipsec_policy_entry *e, - int dir, - const struct in6_addr *in6_dst, -+ int dst_len, - const struct in6_addr *in6_src, -+ int src_len, - int ifindex, - int nodetype) - { -@@ -97,10 +99,13 @@ static void _set_sp(struct xfrm_userpoli - sp->action = e->action; - memcpy(&sp->sel.saddr.a6, in6_src, sizeof(sp->sel.saddr.a6)); - memcpy(&sp->sel.daddr.a6, in6_dst, sizeof(sp->sel.daddr.a6)); -- sp->sel.prefixlen_s = IN6_ARE_ADDR_EQUAL(in6_src, &in6addr_any) ? -- 0 : 128; -- sp->sel.prefixlen_d = IN6_ARE_ADDR_EQUAL(in6_dst, &in6addr_any) ? -- 0 : 128; -+ sp->sel.prefixlen_s = src_len; -+ if (!src_len && (!IN6_ARE_ADDR_EQUAL(in6_src, &in6addr_any))) -+ sp->sel.prefixlen_s = 128; -+ sp->sel.prefixlen_d = dst_len; -+ if (!dst_len && (!IN6_ARE_ADDR_EQUAL(in6_dst, &in6addr_any))) -+ sp->sel.prefixlen_d = 128; -+ - sp->sel.ifindex = 0; - - switch (e->type) { -@@ -347,6 +352,7 @@ struct ha_ipsec_tnl_update { - int tunnel; - struct in6_addr coa; - struct in6_addr old_coa; -+ struct list_head *mnp; - }; - - /* -@@ -365,6 +371,7 @@ static int _ha_tnl_update(const struct i - int ifindex; - const struct in6_addr *oldcoa, *newcoa; - const struct in6_addr *peer_addr = hoa; -+ struct list_head *mnp; - u_int8_t ipsec_proto; - struct xfrm_user_tmpl tmpl; - struct xfrm_userpolicy_info sp; -@@ -399,13 +406,14 @@ static int _ha_tnl_update(const struct i - oldcoa = IN6_ARE_ADDR_EQUAL(&info->old_coa, &in6addr_any) ? - peer_addr : &info->old_coa; - newcoa = &info->coa; -+ mnp = info->mnp; - - dump_migrate(ifindex, ipsec_proto, hoa, haaddr, oldcoa, newcoa); - - /* inbound */ - _set_tmpl(&tmpl, 0, ipsec_proto, XFRM_MODE_TUNNEL, - haaddr, oldcoa, e->reqid_toha); -- _set_sp(&sp, e, XFRM_POLICY_IN, &in6addr_any, hoa, -+ _set_sp(&sp, e, XFRM_POLICY_IN, &in6addr_any, 0, hoa, 0, - ifindex, MIP6_ENTITY_HA); - if ((err = xfrm_sendmigrate(&sp, &tmpl, haaddr, newcoa)) < 0) { - dbg("migrate for INBOUND policy failed\n"); -@@ -415,7 +423,7 @@ static int _ha_tnl_update(const struct i - /* forward */ - _set_tmpl(&tmpl, 0, ipsec_proto, XFRM_MODE_TUNNEL, - haaddr, oldcoa, e->reqid_toha); -- _set_sp(&sp, e, XFRM_POLICY_FWD, &in6addr_any, hoa, -+ _set_sp(&sp, e, XFRM_POLICY_FWD, &in6addr_any, 0, hoa, 0, - ifindex, MIP6_ENTITY_HA); - if ((err = xfrm_sendmigrate(&sp, &tmpl, haaddr, newcoa)) < 0) { - dbg("migrate for FORWARD policy failed\n"); -@@ -425,11 +433,54 @@ static int _ha_tnl_update(const struct i - /* outbound */ - _set_tmpl(&tmpl, 0, ipsec_proto, XFRM_MODE_TUNNEL, - oldcoa, haaddr, e->reqid_tomn); -- _set_sp(&sp, e, XFRM_POLICY_OUT, hoa, &in6addr_any, -+ _set_sp(&sp, e, XFRM_POLICY_OUT, hoa, 0, &in6addr_any, 0, - ifindex, MIP6_ENTITY_HA); - if ((err = xfrm_sendmigrate(&sp, &tmpl, newcoa, haaddr)) < 0) { - dbg("migrate for OUTBOUND policy failed\n"); - goto end; -+ } -+ -+ /* Mobile router case */ -+ if ( (e->type == IPSEC_POLICY_TYPE_TUNNELPAYLOAD) && mnp) -+ { -+ struct list_head *list; -+ -+ /* We have to modify rules to protect traffic to and from MNP's, the same way as HoA */ -+ list_for_each(list, mnp) -+ { -+ struct prefix_list_entry *p; -+ p = list_entry(list, struct prefix_list_entry, list); -+ -+ /* inbound */ -+ _set_tmpl(&tmpl, 0, ipsec_proto, XFRM_MODE_TUNNEL, -+ haaddr, oldcoa, e->reqid_toha); -+ _set_sp(&sp, e, XFRM_POLICY_IN, &in6addr_any, 0, &p->ple_prefix, p->ple_plen, -+ ifindex, MIP6_ENTITY_HA); -+ if ((err = xfrm_sendmigrate(&sp, &tmpl, haaddr, newcoa)) < 0) { -+ dbg("migrate for INBOUND policy failed\n"); -+ goto end; -+ } -+ -+ /* forward */ -+ _set_tmpl(&tmpl, 0, ipsec_proto, XFRM_MODE_TUNNEL, -+ haaddr, oldcoa, e->reqid_toha); -+ _set_sp(&sp, e, XFRM_POLICY_FWD, &in6addr_any, 0, &p->ple_prefix, p->ple_plen, -+ ifindex, MIP6_ENTITY_HA); -+ if ((err = xfrm_sendmigrate(&sp, &tmpl, haaddr, newcoa)) < 0) { -+ dbg("migrate for FORWARD policy failed\n"); -+ goto end; -+ } -+ -+ /* outbound */ -+ _set_tmpl(&tmpl, 0, ipsec_proto, XFRM_MODE_TUNNEL, -+ oldcoa, haaddr, e->reqid_tomn); -+ _set_sp(&sp, e, XFRM_POLICY_OUT, &p->ple_prefix, p->ple_plen, &in6addr_any, 0, -+ ifindex, MIP6_ENTITY_HA); -+ if ((err = xfrm_sendmigrate(&sp, &tmpl, newcoa, haaddr)) < 0) { -+ dbg("migrate for OUTBOUND policy failed\n"); -+ goto end; -+ } -+ } - } - - end: -@@ -440,13 +491,176 @@ int ha_ipsec_tnl_update(const struct in6 - const struct in6_addr *hoa, - const struct in6_addr *coa, - const struct in6_addr *old_coa, -- int tunnel) -+ int tunnel, -+ struct list_head *mnp) - { - struct ha_ipsec_tnl_update b; - b.coa = *coa; - b.old_coa = *old_coa; - b.tunnel = tunnel; -+ b.mnp = mnp; - return ipsec_policy_apply(haaddr, hoa, _ha_tnl_update, &b); -+} -+ -+struct ha_ipsec_mnp_update { -+ int tunnel; -+ struct list_head *old_mnps; -+ struct list_head *new_mnps; -+}; -+ -+/* -+ * Add/Delete MNP IPsec Security Policy -+ */ -+static int _ha_mnp_pol_mod(const struct in6_addr *haaddr, -+ const struct in6_addr *hoa, -+ struct ipsec_policy_entry *e, -+ void *arg, -+ int add) -+{ -+ int err = 0; -+ struct ha_ipsec_mnp_update *parms = (struct ha_ipsec_mnp_update *)arg; -+ struct xfrm_userpolicy_info sp; -+ struct xfrm_user_tmpl tmpl; -+ u_int16_t ipsec_proto; -+ struct list_head *list, *old_mnps, *new_mnps, *main_mnps, *ref_mnps; -+ int ifindex; -+ -+ assert(haaddr); -+ assert(hoa); -+ assert(e); -+ assert(arg); -+ -+ ifindex = parms->tunnel; -+ old_mnps = parms->old_mnps; -+ new_mnps = parms->new_mnps; -+ -+ if (e->type != IPSEC_POLICY_TYPE_TUNNELPAYLOAD) -+ goto end; -+ -+ /* XXX Limitation: Single IPsec proto can only be applied */ -+ if (ipsec_use_esp(e)) -+ ipsec_proto = IPPROTO_ESP; -+ else if (ipsec_use_ah(e)) -+ ipsec_proto = IPPROTO_AH; -+ else if (ipsec_use_ipcomp(e)) -+ ipsec_proto = IPPROTO_COMP; -+ else { -+ dbg("invalid ipsec proto\n"); -+ goto end; -+ } -+ -+ /* Reverse the search logic on lists based on expected -+ * action (add/del) */ -+ main_mnps = add ? new_mnps : old_mnps; -+ ref_mnps = add ? old_mnps : new_mnps; -+ -+ if (main_mnps == NULL) -+ goto end; -+ -+ /* We have to add/delete rules to protect traffic to -+ and from MNP's, the same way as HoA */ -+ list_for_each(list, main_mnps) { -+ struct prefix_list_entry *p; -+ p = list_entry(list, struct prefix_list_entry, list); -+ -+ if (ref_mnps && -+ prefix_list_find(ref_mnps, &p->ple_prefix, p->ple_plen)) -+ continue; -+ -+ /* inbound */ -+ _set_sp(&sp, e, XFRM_POLICY_IN, &in6addr_any, 0, &p->ple_prefix, p->ple_plen, -+ ifindex, MIP6_ENTITY_HA); -+ _set_tmpl(&tmpl, AF_INET6, ipsec_proto, XFRM_MODE_TUNNEL, -+ haaddr, hoa, e->reqid_toha); -+ if (xfrm_ipsec_policy_mod(&sp, &tmpl, 1, add) < 0) { -+ dbg("modifying INBOUND policy failed\n"); -+ err = -1; -+ goto end; -+ } -+ -+ /* forward */ -+ _set_sp(&sp, e, XFRM_POLICY_FWD, &in6addr_any, 0, &p->ple_prefix, p->ple_plen, -+ ifindex, MIP6_ENTITY_HA); -+ _set_tmpl(&tmpl, AF_INET6, ipsec_proto, XFRM_MODE_TUNNEL, -+ haaddr, hoa, e->reqid_toha); -+ if (xfrm_ipsec_policy_mod(&sp, &tmpl, 1, add) < 0) { -+ dbg("modifying FORWARD policy failed\n"); -+ err = -1; -+ goto end; -+ } -+ -+ /* outbound */ -+ _set_sp(&sp, e, XFRM_POLICY_OUT, &p->ple_prefix, p->ple_plen, &in6addr_any, 0, -+ ifindex, MIP6_ENTITY_HA); -+ _set_tmpl(&tmpl, AF_INET6, ipsec_proto, XFRM_MODE_TUNNEL, -+ hoa, haaddr, e->reqid_tomn); -+ if (xfrm_ipsec_policy_mod(&sp, &tmpl, 1, add) < 0) { -+ dbg("modifying OUTBOUND policy failed\n"); -+ err = -1; -+ goto end; -+ } -+ } -+ -+ end: -+ return err; -+} -+ -+ -+/* -+ * Add SP entry (for MNP on HA) -+ * -+ * NOTE: -+ * - This is a hook routine to ipsec_policy_apply() -+ */ -+static int _ha_mnp_pol_add(const struct in6_addr *haaddr, -+ const struct in6_addr *hoa, -+ struct ipsec_policy_entry *e, -+ void *arg) -+{ -+ return _ha_mnp_pol_mod(haaddr, hoa, e, arg, 1); -+} -+ -+int ha_ipsec_mnp_pol_add(const struct in6_addr *our_addr, -+ const struct in6_addr *peer_addr, -+ struct list_head *old_mnps, -+ struct list_head *new_mnps, -+ int tunnel) -+{ -+ struct ha_ipsec_mnp_update b; -+ b.tunnel = tunnel; -+ b.old_mnps = old_mnps; -+ b.new_mnps = new_mnps; -+ -+ return ipsec_policy_apply(our_addr, peer_addr, _ha_mnp_pol_add, &b); -+} -+ -+/* -+ * Delete SP entry (for MNP on HA) -+ * -+ * NOTE: -+ * - This is a hook routine to ipsec_policy_apply() -+ */ -+static int _ha_mnp_pol_del(const struct in6_addr *haaddr, -+ const struct in6_addr *hoa, -+ struct ipsec_policy_entry *e, -+ void *arg) -+{ -+ return _ha_mnp_pol_mod(haaddr, hoa, e, arg, 0); -+} -+ -+int ha_ipsec_mnp_pol_del(const struct in6_addr *our_addr, -+ const struct in6_addr *peer_addr, -+ struct list_head *old_mnps, -+ struct list_head *new_mnps, -+ int tunnel) -+{ -+ struct ha_ipsec_mnp_update b; -+ b.tunnel = tunnel; -+ b.old_mnps = old_mnps; -+ b.new_mnps = new_mnps; -+ -+ return ipsec_policy_apply(our_addr, peer_addr, -+ _ha_mnp_pol_del, &b); - } - - /* -@@ -459,7 +673,9 @@ static int _ha_tnl_pol_mod(const struct - int add) - { - int err = 0; -- int ifindex = *(int *)arg; -+ struct ha_ipsec_tnl_update *parms = (struct ha_ipsec_tnl_update *)arg; -+ int ifindex; -+ struct list_head *mnp; - struct xfrm_userpolicy_info sp; - struct xfrm_user_tmpl tmpl; - u_int16_t ipsec_proto; -@@ -468,6 +684,9 @@ static int _ha_tnl_pol_mod(const struct - assert(hoa); - assert(e); - assert(arg); -+ -+ ifindex = parms->tunnel; -+ mnp = parms->mnp; - - switch (e->type) { - case IPSEC_POLICY_TYPE_TUNNELHOMETESTING: -@@ -493,7 +712,7 @@ static int _ha_tnl_pol_mod(const struct - dump_migrate(ifindex, ipsec_proto, hoa, haaddr, NULL, NULL); - - /* inbound */ -- _set_sp(&sp, e, XFRM_POLICY_IN, &in6addr_any, hoa, -+ _set_sp(&sp, e, XFRM_POLICY_IN, &in6addr_any, 0, hoa, 0, - ifindex, MIP6_ENTITY_HA); - _set_tmpl(&tmpl, AF_INET6, ipsec_proto, XFRM_MODE_TUNNEL, - haaddr, hoa, e->reqid_toha); -@@ -504,7 +723,7 @@ static int _ha_tnl_pol_mod(const struct - } - - /* forward */ -- _set_sp(&sp, e, XFRM_POLICY_FWD, &in6addr_any, hoa, -+ _set_sp(&sp, e, XFRM_POLICY_FWD, &in6addr_any, 0, hoa, 0, - ifindex, MIP6_ENTITY_HA); - _set_tmpl(&tmpl, AF_INET6, ipsec_proto, XFRM_MODE_TUNNEL, - haaddr, hoa, e->reqid_toha); -@@ -515,7 +734,7 @@ static int _ha_tnl_pol_mod(const struct - } - - /* outbound */ -- _set_sp(&sp, e, XFRM_POLICY_OUT, hoa, &in6addr_any, -+ _set_sp(&sp, e, XFRM_POLICY_OUT, hoa, 0, &in6addr_any, 0, - ifindex, MIP6_ENTITY_HA); - _set_tmpl(&tmpl, AF_INET6, ipsec_proto, XFRM_MODE_TUNNEL, - hoa, haaddr, e->reqid_tomn); -@@ -525,6 +744,16 @@ static int _ha_tnl_pol_mod(const struct - goto end; - } - -+ /* Mobile Router case */ -+ if ((e->type == IPSEC_POLICY_TYPE_TUNNELPAYLOAD) && mnp) { -+ struct ha_ipsec_mnp_update b; -+ -+ b.tunnel = ifindex; -+ b.old_mnps = add ? NULL : mnp; -+ b.new_mnps = add ? mnp : NULL; -+ -+ err = _ha_mnp_pol_mod(haaddr, hoa, e, (void *)&b, add); -+ } - end: - return err; - } -@@ -545,11 +774,14 @@ static int _ha_tnl_pol_add(const struct - - int ha_ipsec_tnl_pol_add(const struct in6_addr *our_addr, - const struct in6_addr *peer_addr, -- int tunnel) -+ int tunnel, -+ struct list_head *mnp) - { -- int t = tunnel; -+ struct ha_ipsec_tnl_update b; -+ b.tunnel = tunnel; -+ b.mnp = mnp; - -- return ipsec_policy_apply(our_addr, peer_addr, _ha_tnl_pol_add, &t); -+ return ipsec_policy_apply(our_addr, peer_addr, _ha_tnl_pol_add, &b); - } - - /* -@@ -568,12 +800,15 @@ static int _ha_tnl_pol_del(const struct - - int ha_ipsec_tnl_pol_del(const struct in6_addr *our_addr, - const struct in6_addr *peer_addr, -- int tunnel) -+ int tunnel, -+ struct list_head *mnp) - { -- int t = tunnel; -+ struct ha_ipsec_tnl_update b; -+ b.tunnel = tunnel; -+ b.mnp = mnp; - - return ipsec_policy_apply(our_addr, peer_addr, -- _ha_tnl_pol_del, &t); -+ _ha_tnl_pol_del, &b); - } - - /* -@@ -631,7 +866,7 @@ static int _mn_tnl_update(const struct i - /* outbound */ - _set_tmpl(&tmpl, 0, ipsec_proto, XFRM_MODE_TUNNEL, - haaddr, oldcoa, e->reqid_toha); -- _set_sp(&sp, e, XFRM_POLICY_OUT, &in6addr_any, hoa, -+ _set_sp(&sp, e, XFRM_POLICY_OUT, &in6addr_any, 0, hoa, 0, - ifindex, MIP6_ENTITY_MN); - if ((err = xfrm_sendmigrate(&sp, &tmpl, haaddr, newcoa)) < 0) { - dbg("migrate for OUTBOUND policy failed\n"); -@@ -641,7 +876,7 @@ static int _mn_tnl_update(const struct i - /* inbound */ - _set_tmpl(&tmpl, 0, ipsec_proto, XFRM_MODE_TUNNEL, - oldcoa, haaddr, e->reqid_tomn); -- _set_sp(&sp, e, XFRM_POLICY_IN, hoa, &in6addr_any, -+ _set_sp(&sp, e, XFRM_POLICY_IN, hoa, 0, &in6addr_any, 0, - ifindex, MIP6_ENTITY_MN); - if ((err = xfrm_sendmigrate(&sp, &tmpl, newcoa, haaddr)) < 0) { - dbg("migrate for INBOUND policy (1) failed\n"); -@@ -657,7 +892,7 @@ static int _mn_tnl_update(const struct i - /* template */ - _set_tmpl(&tmpl, 0, ipsec_proto, XFRM_MODE_TUNNEL, - oldcoa, haaddr, e->reqid_tomn); -- _set_sp(&sp, e, XFRM_POLICY_IN, hoa, &in6addr_any, -+ _set_sp(&sp, e, XFRM_POLICY_IN, hoa, 0, &in6addr_any, 0, - ifindex, MIP6_ENTITY_MN); - /* additional settings */ - sp.priority = MIP6_PRIO_RO_SIG_IPSEC; -@@ -666,6 +901,52 @@ static int _mn_tnl_update(const struct i - if ((err = xfrm_sendmigrate(&sp, &tmpl, newcoa, haaddr)) < 0) { - dbg("migrate for INBOUND policy (2) failed\n"); - goto end; -+ } -+ } -+ -+ /* -+ * If we are a Mobile Router, we also need to migrate IN/FWD/OUT rules -+ * for forwarded traffic in case we have TUNNELPAYLOAD protection. -+ */ -+ if ((e->type == IPSEC_POLICY_TYPE_TUNNELPAYLOAD) && (bule->home->mob_rtr)) -+ { -+ struct list_head *mnp; -+ -+ list_for_each(mnp, &bule->home->mob_net_prefixes) -+ { -+ struct prefix_list_entry *p; -+ p = list_entry(mnp, struct prefix_list_entry, list); -+ -+ /* outbound */ -+ _set_tmpl(&tmpl, 0, ipsec_proto, XFRM_MODE_TUNNEL, -+ haaddr, oldcoa, e->reqid_toha); -+ _set_sp(&sp, e, XFRM_POLICY_OUT, &in6addr_any, 0, &p->ple_prefix, p->ple_plen, -+ ifindex, MIP6_ENTITY_MN); -+ if ((err = xfrm_sendmigrate(&sp, &tmpl, haaddr, newcoa)) < 0) { -+ dbg("migrate for OUTBOUND policy failed\n"); -+ goto end; -+ } -+ -+ /* forwarded */ -+ _set_tmpl(&tmpl, 0, ipsec_proto, XFRM_MODE_TUNNEL, -+ oldcoa, haaddr, e->reqid_tomn); -+ _set_sp(&sp, e, XFRM_POLICY_IN, &p->ple_prefix, p->ple_plen, &in6addr_any, 0, -+ ifindex, MIP6_ENTITY_MN); -+ if ((err = xfrm_sendmigrate(&sp, &tmpl, newcoa, haaddr)) < 0) { -+ dbg("migrate for INBOUND policy (1) failed\n"); -+ goto end; -+ } -+ -+ /* inbound */ -+ _set_tmpl(&tmpl, 0, ipsec_proto, XFRM_MODE_TUNNEL, -+ oldcoa, haaddr, e->reqid_tomn); -+ _set_sp(&sp, e, XFRM_POLICY_IN, &p->ple_prefix, p->ple_plen, &in6addr_any, 0, -+ ifindex, MIP6_ENTITY_MN); -+ if ((err = xfrm_sendmigrate(&sp, &tmpl, newcoa, haaddr)) < 0) { -+ dbg("migrate for INBOUND policy (1) failed\n"); -+ goto end; -+ } -+ - } - } - -@@ -724,7 +1005,7 @@ static int _mn_tnl_pol_mod(const struct - dump_migrate(ifindex, ipsec_proto, hoa, haaddr, NULL, NULL); - - /* inbound */ -- _set_sp(&sp, e, XFRM_POLICY_IN, hoa, &in6addr_any, -+ _set_sp(&sp, e, XFRM_POLICY_IN, hoa, 0, &in6addr_any, 0, - ifindex, MIP6_ENTITY_MN); - _set_tmpl(&tmpl, AF_INET6, ipsec_proto, XFRM_MODE_TUNNEL, - hoa, haaddr, e->reqid_tomn); -@@ -735,7 +1016,7 @@ static int _mn_tnl_pol_mod(const struct - } - - /* outbound */ -- _set_sp(&sp, e, XFRM_POLICY_OUT, &in6addr_any, hoa, -+ _set_sp(&sp, e, XFRM_POLICY_OUT, &in6addr_any, 0, hoa, 0, - ifindex, MIP6_ENTITY_MN); - _set_tmpl(&tmpl, AF_INET6, ipsec_proto, XFRM_MODE_TUNNEL, - haaddr, hoa, e->reqid_toha); -@@ -758,6 +1039,54 @@ static int _mn_tnl_pol_mod(const struct - mn_ipsec_recv_bu_tnl_pol_del(bule, ifindex, e); - /* restore wildrecv SPD entry for processing BU */ - err = cn_wildrecv_bu_pol_add(); -+ } -+ } -+ -+ /* -+ * If we are a Mobile Router, we also need to create IN/FWD/OUT rules -+ * for forwarded traffic in case we have TUNNELPAYLOAD protection. -+ */ -+ if ((e->type == IPSEC_POLICY_TYPE_TUNNELPAYLOAD) && (bule->home->mob_rtr)) -+ { -+ struct list_head *mnp; -+ -+ list_for_each(mnp, &bule->home->mob_net_prefixes) -+ { -+ struct prefix_list_entry *p; -+ p = list_entry(mnp, struct prefix_list_entry, list); -+ -+ /* inbound */ -+ _set_sp(&sp, e, XFRM_POLICY_IN, &p->ple_prefix, p->ple_plen, &in6addr_any, 0, -+ ifindex, MIP6_ENTITY_MN); -+ _set_tmpl(&tmpl, AF_INET6, ipsec_proto, XFRM_MODE_TUNNEL, -+ hoa, haaddr, e->reqid_tomn); -+ if (xfrm_ipsec_policy_mod(&sp, &tmpl, 1, add) < 0) { -+ dbg("modifying INBOUND policy failed.\n"); -+ err = -1; -+ goto end; -+ } -+ -+ /* forward */ -+ _set_sp(&sp, e, XFRM_POLICY_FWD, &p->ple_prefix, p->ple_plen, &in6addr_any, 0, -+ ifindex, MIP6_ENTITY_MN); -+ _set_tmpl(&tmpl, AF_INET6, ipsec_proto, XFRM_MODE_TUNNEL, -+ hoa, haaddr, e->reqid_tomn); -+ if (xfrm_ipsec_policy_mod(&sp, &tmpl, 1, add) < 0) { -+ dbg("modifying INBOUND policy failed.\n"); -+ err = -1; -+ goto end; -+ } -+ -+ /* outbound */ -+ _set_sp(&sp, e, XFRM_POLICY_OUT, &in6addr_any, 0, &p->ple_prefix, p->ple_plen, -+ ifindex, MIP6_ENTITY_MN); -+ _set_tmpl(&tmpl, AF_INET6, ipsec_proto, XFRM_MODE_TUNNEL, -+ haaddr, hoa, e->reqid_toha); -+ if (xfrm_ipsec_policy_mod(&sp, &tmpl, 1, add) < 0) { -+ dbg("modifying OUTBOUND policy failed.\n"); -+ err = -1; -+ goto end; -+ } - } - } - -diff -r a7e20b0b5c43 src/ipsec.h ---- a/src/ipsec.h Wed Nov 28 16:43:32 2007 +0100 -+++ b/src/ipsec.h Tue Jan 08 11:28:48 2008 +0100 -@@ -82,15 +82,30 @@ int ha_ipsec_tnl_update(const struct in6 - const struct in6_addr *hoa, - const struct in6_addr *coa, - const struct in6_addr *old_coa, -- int tunnel); -+ int tunnel, -+ struct list_head *mnp); -+ -+int ha_ipsec_mnp_pol_del(const struct in6_addr *our_addr, -+ const struct in6_addr *peer_addr, -+ struct list_head *old_mnps, -+ struct list_head *new_mnps, -+ int tunnel); -+ -+int ha_ipsec_mnp_pol_add(const struct in6_addr *our_addr, -+ const struct in6_addr *peer_addr, -+ struct list_head *old_mnps, -+ struct list_head *new_mnps, -+ int tunnel); - - int ha_ipsec_tnl_pol_add(const struct in6_addr *our_addr, - const struct in6_addr *peer_addr, -- int tunnel); -+ int tunnel, -+ struct list_head *mnp); - - int ha_ipsec_tnl_pol_del(const struct in6_addr *our_addr, - const struct in6_addr *peer_addr, -- int tunnel); -+ int tunnel, -+ struct list_head *mnp); - - int mn_ipsec_tnl_update(const struct in6_addr *haaddr, - const struct in6_addr *hoa, -diff -r a7e20b0b5c43 src/mh.c ---- a/src/mh.c Wed Nov 28 16:43:32 2007 +0100 -+++ b/src/mh.c Tue Jan 08 11:28:48 2008 +0100 -@@ -51,6 +51,7 @@ - #include "conf.h" - #include "bcache.h" - #include "keygen.h" -+#include "prefix.h" - - #define MH_DEBUG_LEVEL 1 - -@@ -75,6 +76,7 @@ int mh_opts_dup_ok[] = { - 0, /* Alternate CoA */ - 0, /* Nonce Index */ - 0, /* Binding Auth Data */ -+ 1, /* Mobile Network Prefix */ - }; - - #define __MH_SENTINEL (IP6_MH_TYPE_MAX + 1) -@@ -401,6 +403,46 @@ static int create_opt_pad(struct iovec * - return 0; - } - -+int mh_create_opt_mob_net_prefix(struct iovec *iov, int mnp_count, -+ struct list_head *mnps) -+{ -+ int optlen = (mnp_count * sizeof(struct ip6_mh_opt_mob_net_prefix) + -+ (mnp_count - 1) * sizeof(_pad4)); -+ struct list_head *l; -+ int i = 0; -+ uint8_t *data; -+ iov->iov_base = malloc(optlen); -+ iov->iov_len = optlen; -+ -+ if (iov->iov_base == NULL) -+ return -ENOMEM; -+ -+ memset(iov->iov_base, 0, iov->iov_len); -+ data = (uint8_t *)iov->iov_base; -+ -+ list_for_each(l, mnps) { -+ struct prefix_list_entry *p; -+ struct ip6_mh_opt_mob_net_prefix *mnp; -+ -+ p = list_entry(l, struct prefix_list_entry, list); -+ mnp = (struct ip6_mh_opt_mob_net_prefix *)data; -+ -+ mnp->ip6mnp_type = IP6_MHOPT_MOB_NET_PRFX; -+ mnp->ip6mnp_len = 18; -+ mnp->ip6mnp_prefix_len = p->ple_plen; -+ mnp->ip6mnp_prefix = p->ple_prefix; -+ -+ data += sizeof(struct ip6_mh_opt_mob_net_prefix); -+ -+ /* do internal padding here, so one iovec for MNPs is enough */ -+ if (++i < mnp_count) { -+ memcpy(data, _pad4, sizeof(_pad4)); -+ data += sizeof(_pad4); -+ } -+ } -+ return 0; -+} -+ - static size_t mh_length(struct iovec *vec, int count) - { - size_t len = 0; -@@ -441,6 +483,9 @@ static int mh_try_pad(const struct iovec - break; - case IP6_MHOPT_BAUTH: - pad = optpad(8, 2, len); /* 8n+2 */ -+ break; -+ case IP6_MHOPT_MOB_NET_PRFX: -+ pad = optpad(8, 4, len); /* 8n+4 */ - break; - } - if (pad > 0) { -@@ -694,6 +739,8 @@ static int mh_opt_len_chk(uint8_t type, - return len != sizeof(struct ip6_mh_opt_nonce_index); - case IP6_MHOPT_BAUTH: - return len != sizeof(struct ip6_mh_opt_auth_data); -+ case IP6_MHOPT_MOB_NET_PRFX: -+ return len != sizeof(struct ip6_mh_opt_mob_net_prefix); - case IP6_MHOPT_PADN: - default: - return 0; -diff -r a7e20b0b5c43 src/mh.h ---- a/src/mh.h Wed Nov 28 16:43:32 2007 +0100 -+++ b/src/mh.h Tue Jan 08 11:28:48 2008 +0100 -@@ -10,7 +10,7 @@ - - /* If new types or options appear, these should be updated. */ - #define IP6_MH_TYPE_MAX IP6_MH_TYPE_BERROR --#define IP6_MHOPT_MAX IP6_MHOPT_BAUTH -+#define IP6_MHOPT_MAX IP6_MHOPT_MOB_NET_PRFX - - struct in6_addr_bundle { - struct in6_addr *src; -@@ -74,6 +74,11 @@ int mh_create_opt_nonce_index(struct iov - - int mh_create_opt_auth_data(struct iovec *iov); - -+struct list_head; -+ -+int mh_create_opt_mob_net_prefix(struct iovec *iov, int mnp_count, -+ struct list_head *mnps); -+ - static inline void *mh_opt(const struct ip6_mh *mh, - const struct mh_options *mh_opts, uint8_t type) - { -diff -r a7e20b0b5c43 src/mn.c ---- a/src/mn.c Wed Nov 28 16:43:32 2007 +0100 -+++ b/src/mn.c Tue Jan 08 11:28:48 2008 +0100 -@@ -326,7 +326,17 @@ static int mn_send_bu_msg(struct bulentr - free_iov_data(iov, iov_ind); - return -ENOMEM; - } -- if (!(bule->flags & IP6_MH_BU_HOME)) { -+ if (bule->flags & IP6_MH_BU_HOME) { -+ struct home_addr_info *hai = bule->home; -+ if (bule->flags & IP6_MH_BU_MR && bu->ip6mhbu_lifetime && -+ bule->home->mnp_count > 0 && conf.MobRtrUseExplicitMode && -+ mh_create_opt_mob_net_prefix(&iov[iov_ind++], -+ hai->mnp_count, -+ &hai->mob_net_prefixes) < 0) { -+ free_iov_data(iov, iov_ind); -+ return -ENOMEM; -+ } -+ } else { - if (mh_create_opt_nonce_index(&iov[iov_ind++], bule->rr.ho_ni, - bule->rr.co_ni) || - mh_create_opt_auth_data(&iov[iov_ind++])) { -@@ -616,6 +626,34 @@ static int mv_hoa(struct ifaddrmsg *ifa, - return 0; - } - -+int nemo_mr_tnl_routes_add(struct home_addr_info *hai, int ifindex) -+{ -+ struct list_head *l; -+ struct prefix_list_entry *pe; -+ list_for_each(l, &hai->mob_net_prefixes) { -+ struct prefix_list_entry *p; -+ p = list_entry(l, struct prefix_list_entry, list); -+ if (route_add(ifindex, RT6_TABLE_MIP6, RTPROT_MIP, -+ 0, IP6_RT_PRIO_MIP6_FWD, -+ &p->ple_prefix, p->ple_plen, -+ &in6addr_any, 0, NULL) < 0) { -+ pe = p; -+ goto undo; -+ } -+ } -+ return 0; -+undo: -+ list_for_each(l, &hai->mob_net_prefixes) { -+ struct prefix_list_entry *p; -+ p = list_entry(l, struct prefix_list_entry, list); -+ route_del(ifindex, RT6_TABLE_MIP6, IP6_RT_PRIO_MIP6_FWD, -+ &p->ple_prefix, p->ple_plen, &in6addr_any, 0, NULL); -+ if (p == pe) -+ break; -+ } -+ return -1; -+} -+ - static int mn_tnl_state_add(struct home_addr_info *hai, int ifindex, int all) - { - int err = 0; -@@ -628,12 +666,31 @@ static int mn_tnl_state_add(struct home_ - mn_ro_pol_del(hai, ifindex, all); - } - } -+ if (hai->mob_rtr && -+ (err = nemo_mr_tnl_routes_add(hai, ifindex)) < 0) { -+ route_del(ifindex, RT6_TABLE_MIP6, IP6_RT_PRIO_MIP6_OUT, -+ &hai->hoa.addr, 128, &in6addr_any, 0, NULL); -+ mn_ro_pol_del(hai, ifindex, all); -+ } - return err; -+} -+ -+static void nemo_mr_tnl_routes_del(struct home_addr_info *hai, int ifindex) -+{ -+ struct list_head *l; -+ list_for_each(l, &hai->mob_net_prefixes) { -+ struct prefix_list_entry *p; -+ p = list_entry(l, struct prefix_list_entry, list); -+ route_del(ifindex, RT6_TABLE_MIP6, IP6_RT_PRIO_MIP6_FWD, -+ &p->ple_prefix, p->ple_plen, &in6addr_any, 0, NULL); -+ } - } - - static void mn_tnl_state_del(struct home_addr_info *hai, int ifindex, int all) - { - if (hai->home_reg_status != HOME_REG_NONE) { -+ if (hai->mob_rtr) -+ nemo_mr_tnl_routes_del(hai, ifindex); - route_del(ifindex, RT6_TABLE_MIP6, IP6_RT_PRIO_MIP6_OUT, - &hai->hoa.addr, 128, &in6addr_any, 0, NULL); - mn_ro_pol_del(hai, ifindex, all); -@@ -674,7 +731,8 @@ static int process_first_home_bu(struct - { - int err = 0; - bule->type = BUL_ENTRY; -- bule->flags = IP6_MH_BU_HOME | IP6_MH_BU_ACK | hai->lladdr_comp; -+ bule->flags = (IP6_MH_BU_HOME | IP6_MH_BU_ACK | -+ hai->lladdr_comp | hai->mob_rtr); - bule->coa_changed = -1; - bule->coa = hai->primary_coa.addr; - bule->if_coa = hai->primary_coa.iif; -@@ -1084,6 +1142,18 @@ static void mn_recv_ba(const struct ip6_ - if (bule->flags & IP6_MH_BU_HOME) { - struct home_addr_info *hai = bule->home; - struct ip6_mh_opt_refresh_advice *bra; -+ -+ if (bule->flags & IP6_MH_BU_MR && -+ !(ba->ip6mhba_flags & IP6_MH_BA_MR)) { -+ if (hai->use_dhaad) { -+ mn_change_ha(hai); -+ } else { -+ int one = 1; -+ bul_iterate(&hai->bul, mn_dereg, &one); -+ } -+ pthread_rwlock_unlock(&mn_lock); -+ return; -+ } - if (!tsisset(ba_lifetime)) { - int type = FLUSH_FAILED; - mn_dereg_home(hai); -@@ -1251,12 +1321,73 @@ static int flag_hoa(struct ifaddrmsg *if - return 0; - } - -+static void nemo_mr_rules_del(struct home_addr_info *hinfo) -+{ -+ struct list_head *l; -+ -+ list_for_each(l, &hinfo->mob_net_prefixes) { -+ struct prefix_list_entry *p = NULL; -+ p = list_entry(l, struct prefix_list_entry, list); -+ rule_del(NULL, RT6_TABLE_MIP6, -+ IP6_RULE_PRIO_MIP6_FWD, RTN_UNICAST, -+ &p->ple_prefix, p->ple_plen, &in6addr_any, 0, 0); -+ rule_del(NULL, RT6_TABLE_MAIN, -+ IP6_RULE_PRIO_MIP6_MNP_IN, RTN_UNICAST, -+ &in6addr_any, 0, &p->ple_prefix, p->ple_plen, 0); -+ } -+} -+ -+static int nemo_mr_rules_add(struct home_addr_info *hinfo) -+{ -+ struct prefix_list_entry *pe = NULL; -+ struct list_head *l; -+ -+ list_for_each(l, &hinfo->mob_net_prefixes) { -+ struct prefix_list_entry *p = NULL; -+ p = list_entry(l, struct prefix_list_entry, list); -+ if (rule_add(NULL, RT6_TABLE_MAIN, -+ IP6_RULE_PRIO_MIP6_MNP_IN, RTN_UNICAST, -+ &in6addr_any, 0, -+ &p->ple_prefix, p->ple_plen, 0) < 0) { -+ pe = p; -+ goto undo; -+ } -+ if (rule_add(NULL, RT6_TABLE_MIP6, -+ IP6_RULE_PRIO_MIP6_FWD, RTN_UNICAST, -+ &p->ple_prefix, p->ple_plen, -+ &in6addr_any, 0, 0) < 0) { -+ rule_del(NULL, RT6_TABLE_MAIN, -+ IP6_RULE_PRIO_MIP6_MNP_IN, RTN_UNICAST, -+ &in6addr_any, 0, &p->ple_prefix, p->ple_plen, 0); -+ pe = p; -+ goto undo; -+ } -+ } -+ return 0; -+undo: -+ list_for_each(l, &hinfo->mob_net_prefixes) { -+ struct prefix_list_entry *p = NULL; -+ p = list_entry(l, struct prefix_list_entry, list); -+ rule_del(NULL, RT6_TABLE_MIP6, -+ IP6_RULE_PRIO_MIP6_FWD, RTN_UNICAST, -+ &p->ple_prefix, p->ple_plen, &in6addr_any, 0, 0); -+ rule_del(NULL, RT6_TABLE_MAIN, -+ IP6_RULE_PRIO_MIP6_MNP_IN, RTN_UNICAST, -+ &in6addr_any, 0, &p->ple_prefix, p->ple_plen, 0); -+ if (p == pe) -+ break; -+ } -+ return -1; -+} -+ - static void clean_home_addr_info(struct home_addr_info *hai) - { - struct flag_hoa_args arg; - int plen = (hai->hoa.iif == hai->if_tunnel ? 128 : hai->plen); - - list_del(&hai->list); -+ if (hai->mob_rtr) -+ nemo_mr_rules_del(hai); - arg.target = hai; - arg.flag = 0; - addr_do(&hai->hoa.addr, plen, -@@ -1310,13 +1441,23 @@ static struct home_addr_info *hai_copy(s - - if (pthread_mutex_init(&hai->ha_list.c_lock, NULL)) - goto undo; -+ -+ INIT_LIST_HEAD(&hai->mob_net_prefixes); -+ if (hai->mob_rtr && -+ prefix_list_copy(&conf_hai->mob_net_prefixes, -+ &hai->mob_net_prefixes) < 0) -+ goto mutex_undo; -+ - INIT_LIST_HEAD(&hai->ro_policies); - if (rpl_copy(&conf_hai->ro_policies, &hai->ro_policies) < 0) -- goto mutex_undo; -+ goto mnp_undo; -+ - INIT_LIST_HEAD(&hai->ha_list.tqe.list); - INIT_LIST_HEAD(&hai->ha_list.home_agents); - } - return hai; -+mnp_undo: -+ prefix_list_free(&hai->mob_net_prefixes); - mutex_undo: - pthread_mutex_destroy(&hai->ha_list.c_lock); - undo: -@@ -1337,6 +1478,15 @@ static int conf_home_addr_info(struct ho - if ((hai = hai_copy(conf_hai)) == NULL) - goto err; - -+ if (hai->mob_rtr) { -+ MDBG("is Mobile Router\n"); -+ list_for_each(list, &hai->mob_net_prefixes) { -+ struct prefix_list_entry *p; -+ p = list_entry(list, struct prefix_list_entry, list); -+ MDBG("Mobile Network Prefix %x:%x:%x:%x:%x:%x:%x:%x/%d\n", -+ NIP6ADDR(&p->ple_prefix), p->ple_plen); -+ } -+ } - if (IN6_IS_ADDR_UNSPECIFIED(&hai->ha_addr)) { - hai->use_dhaad = 1; - } else { -@@ -1379,6 +1529,9 @@ static int conf_home_addr_info(struct ho - - if (addr_do(&hai->hoa.addr, 128, - hai->if_tunnel, &arg, flag_hoa) < 0) { -+ goto clean_err; -+ } -+ if (hai->mob_rtr && nemo_mr_rules_add(hai) < 0) { - goto clean_err; - } - hai->at_home = hai->hoa.iif == hai->if_home; -diff -r a7e20b0b5c43 src/mn.h ---- a/src/mn.h Wed Nov 28 16:43:32 2007 +0100 -+++ b/src/mn.h Tue Jan 08 11:28:48 2008 +0100 -@@ -45,9 +45,11 @@ struct ha_candidate_list { - pthread_mutex_t c_lock; - }; - --#define HOME_LINK_BLOCK 0x1 --#define HOME_ADDR_BLOCK 0x2 --#define HOME_ADDR_RULE_BLOCK 0x4 -+#define HOME_LINK_BLOCK 0x01 -+#define HOME_ADDR_BLOCK 0x02 -+#define HOME_ADDR_RULE_BLOCK 0x04 -+#define NEMO_RA_BLOCK 0x08 -+#define NEMO_FWD_BLOCK 0x10 - - struct mn_addr { - struct in6_addr addr; -@@ -84,7 +86,10 @@ struct home_addr_info { - int if_block; - short hwalen; - uint8_t altcoa; -+ uint16_t mob_rtr; - char name[IF_NAMESIZE]; -+ int mnp_count; -+ struct list_head mob_net_prefixes; - }; - - enum { -diff -r a7e20b0b5c43 src/movement.c ---- a/src/movement.c Wed Nov 28 16:43:32 2007 +0100 -+++ b/src/movement.c Tue Jan 08 11:28:48 2008 +0100 -@@ -78,6 +78,7 @@ static int conf_default_rs = 3; - static int conf_default_rs = 3; - static int conf_default_rs_ival = 4; - -+static int conf_forwarding = 0; - static int conf_autoconf = 1; - static int conf_ra_defrtr = 0; - static int conf_rs = 0; -@@ -177,6 +178,12 @@ static void __md_free_router(struct md_r - - route_del(rtr->ifindex, RT_TABLE_MAIN, 0, - &in6addr_any, 0, &in6addr_any, 0, &rtr->lladdr); -+ -+ /* delete default route for the packets coming from the -+ * Mobile Network -+ */ -+ route_del(rtr->ifindex, RT6_TABLE_MIP6, 0, -+ &in6addr_any, 0, &in6addr_any, 0, &rtr->lladdr); - } - list_for_each_safe(l, n, &rtr->prefixes) { - struct prefix_list_entry *p; -@@ -231,8 +238,31 @@ static void md_expire_coa(struct md_inet - list_add_tail(&coa->list, &iface->expired_coas); - } - -+static void md_reset_egress_forward(void) -+{ -+ struct list_head *l; -+ int forward = 0;; -+ -+ if (list_empty(&ifaces)) -+ return; -+ -+ list_for_each(l, &ifaces) { -+ struct md_inet6_iface *i; -+ i = list_entry(l, struct md_inet6_iface, list); -+ forward |= i->home_link; -+ } -+ list_for_each(l, &ifaces) { -+ struct md_inet6_iface *i; -+ i = list_entry(l, struct md_inet6_iface, list); -+ set_iface_proc_entry(PROC_SYS_IP6_FORWARDING, -+ i->name, forward); -+ } -+} -+ - static void md_reset_home_link(struct md_inet6_iface *i) - { -+ if (i->home_link) -+ md_reset_egress_forward(); - i->home_link = 0; - i->ll_dad_unsafe = 0; - } -@@ -648,6 +678,8 @@ md_create_inet6_iface(struct ifinfomsg * - - static void iface_proc_entries_init(struct md_inet6_iface *iface) - { -+ set_iface_proc_entry(PROC_SYS_IP6_FORWARDING, iface->name, -+ conf_forwarding); - set_iface_proc_entry(PROC_SYS_IP6_AUTOCONF, iface->name, - conf_autoconf); - set_iface_proc_entry(PROC_SYS_IP6_ACCEPT_RA_DEFRTR, iface->name, conf_ra_defrtr); -@@ -878,6 +910,8 @@ static void md_check_home_link(struct md - ll_dad_unsafe |= hai->lladdr_comp; - } - } -+ if (i->home_link != home_link) -+ md_reset_egress_forward(); - i->home_link = home_link; - i->ll_dad_unsafe = ll_dad_unsafe; - } -@@ -1189,6 +1223,11 @@ static void md_update_router_stats(struc - RTF_DEFAULT|RTF_ADDRCONF, 1024, - &in6addr_any, 0, &in6addr_any, 0, &rtr->lladdr); - -+ /* default route for the packet coming from the Mobile Network */ -+ route_add(rtr->ifindex, RT6_TABLE_MIP6, RTPROT_MIP, -+ 0, IP6_RT_PRIO_MIP6_FWD, -+ &in6addr_any, 0, &in6addr_any, 0, &rtr->lladdr); -+ - list_for_each(list, &rtr->prefixes) { - struct prefix_list_entry *p; - p = list_entry(list, struct prefix_list_entry, list); -@@ -1737,6 +1776,8 @@ static void iface_default_proc_entries_c - - static void iface_proc_entries_cleanup(struct md_inet6_iface *iface) - { -+ set_iface_proc_entry(PROC_SYS_IP6_FORWARDING, iface->name, -+ iface->devconf[DEVCONF_FORWARDING]); - set_iface_proc_entry(PROC_SYS_IP6_AUTOCONF, iface->name, - iface->devconf[DEVCONF_AUTOCONF]); - set_iface_proc_entry(PROC_SYS_IP6_ACCEPT_RA_DEFRTR, iface->name, -diff -r a7e20b0b5c43 src/ndisc.c ---- a/src/ndisc.c Wed Nov 28 16:43:32 2007 +0100 -+++ b/src/ndisc.c Tue Jan 08 11:28:48 2008 +0100 -@@ -106,7 +106,7 @@ int proxy_nd_start(int ifindex, struct i - { - struct in6_addr lladdr; - int err; -- int nd_flags = 0; -+ int nd_flags = bu_flags&IP6_MH_BU_MR ? NTF_ROUTER : 0; - - err = pneigh_add(ifindex, nd_flags, target); - -@@ -117,7 +117,9 @@ int proxy_nd_start(int ifindex, struct i - pneigh_del(ifindex, target); - } - if (!err) { -- uint32_t na_flags = ND_NA_FLAG_OVERRIDE; -+ uint32_t na_flags = (ND_NA_FLAG_OVERRIDE | -+ nd_flags ? ND_NA_FLAG_ROUTER : 0); -+ - ndisc_send_na(ifindex, src, &in6addr_all_nodes_mc, - target, na_flags); - -diff -r a7e20b0b5c43 src/policy.c ---- a/src/policy.c Wed Nov 28 16:43:32 2007 +0100 -+++ b/src/policy.c Tue Jan 08 11:28:48 2008 +0100 -@@ -107,6 +107,23 @@ int default_max_binding_life(const struc - return 0; - } - -+static inline int -+policy_check_mob_net_prefix(const struct policy_bind_acl_entry *acl, -+ const struct ip6_mh_binding_update *bu, -+ const struct mh_options *opts) -+{ -+ struct ip6_mh_opt_mob_net_prefix *op; -+ for (op = mh_opt(&bu->ip6mhbu_hdr, opts, IP6_MHOPT_MOB_NET_PRFX); -+ op != NULL; -+ op = mh_opt_next(&bu->ip6mhbu_hdr, opts, op)) { -+ if (!prefix_list_get(&acl->mob_net_prefixes, -+ &op->ip6mnp_prefix, -+ op->ip6mnp_prefix_len)) -+ return IP6_MH_BAS_NOT_AUTH_FOR_PRFX; -+ } -+ return IP6_MH_BAS_ACCEPTED; -+} -+ - /** - * default_discard_binding - check for discard policy - * @remote_hoa: remote MN's home address -@@ -127,10 +144,20 @@ int default_discard_binding(const struct - int ret = def_bind_policy; - struct policy_bind_acl_entry *acl; - -+ if (bu->ip6mhbu_flags & IP6_MH_BU_MR && !conf.HaAcceptMobRtr) -+ return IP6_MH_BAS_MR_OP_NOT_PERMITTED; -+ - pthread_rwlock_rdlock(&policy_lock); - acl = hash_get(&policy_bind_acl_hash, NULL, remote_hoa); - if (acl != NULL) { - ret = acl->bind_policy; -+ if (ret < IP6_MH_BAS_UNSPECIFIED && -+ bu->ip6mhbu_flags & IP6_MH_BU_MR) { -+ struct mh_options opts; -+ mh_opt_parse(&bu->ip6mhbu_hdr, len, -+ sizeof(*bu), &opts); -+ ret = policy_check_mob_net_prefix(acl, bu, &opts); -+ } - } - pthread_rwlock_unlock(&policy_lock); - return ret; -@@ -227,6 +254,42 @@ int default_best_ro_coa(const struct in6 - return 0; - } - -+int default_get_mnp_count(const struct in6_addr *hoa) -+{ -+ int ret = 0; -+ struct policy_bind_acl_entry *acl; -+ pthread_rwlock_rdlock(&policy_lock); -+ acl = hash_get(&policy_bind_acl_hash, NULL, hoa); -+ if (acl != NULL) -+ ret = acl->mnp_count; -+ pthread_rwlock_unlock(&policy_lock); -+ return ret; -+ -+} -+ -+int default_get_mnps(const struct in6_addr *hoa, -+ const int mnp_count, -+ struct nd_opt_prefix_info *mnps) -+{ -+ int i = 0; -+ struct policy_bind_acl_entry *acl; -+ -+ pthread_rwlock_rdlock(&policy_lock); -+ acl = hash_get(&policy_bind_acl_hash, NULL, hoa); -+ if (acl != NULL) { -+ struct list_head *l; -+ list_for_each(l, &acl->mob_net_prefixes) { -+ struct prefix_list_entry *e; -+ if (i >= mnp_count) -+ break; -+ e = list_entry(l, struct prefix_list_entry, list); -+ mnps[i++] = e->pinfo; -+ } -+ } -+ pthread_rwlock_unlock(&policy_lock); -+ return i; -+} -+ - static int policy_bind_acle_cleanup(void *data, void *arg) - { - struct policy_bind_acl_entry *acl = data; -diff -r a7e20b0b5c43 src/policy.h ---- a/src/policy.h Wed Nov 28 16:43:32 2007 +0100 -+++ b/src/policy.h Tue Jan 08 11:28:48 2008 +0100 -@@ -10,12 +10,15 @@ - - struct ip6_mh_binding_update; - struct nd_router_advert; -+struct nd_opt_prefix_info; - - struct policy_bind_acl_entry { - struct list_head list; - struct in6_addr hoa; - int plen; - int bind_policy; -+ int mnp_count; -+ struct list_head mob_net_prefixes; - }; - - /** -@@ -147,6 +150,12 @@ int default_best_ro_coa(const struct in6 - const struct in6_addr *cn, - struct in6_addr *coa); - -+int default_get_mnp_count(const struct in6_addr *hoa); -+ -+int default_get_mnps(const struct in6_addr *hoa, -+ const int mnp_count, -+ struct nd_opt_prefix_info *mnps); -+ - void policy_cleanup(void); - - int policy_init(void); -diff -r a7e20b0b5c43 src/proc_sys.h ---- a/src/proc_sys.h Wed Nov 28 16:43:32 2007 +0100 -+++ b/src/proc_sys.h Tue Jan 08 11:28:48 2008 +0100 -@@ -14,6 +14,7 @@ - #define PROC_SYS_IP6_APP_SOLICIT "/proc/sys/net/ipv6/neigh/%s/app_solicit" - #define PROC_SYS_IP6_BASEREACHTIME_MS "/proc/sys/net/ipv6/neigh/%s/base_reachable_time_ms" - #define PROC_SYS_IP6_RETRANSTIMER_MS "/proc/sys/net/ipv6/neigh/%s/retrans_time_ms" -+#define PROC_SYS_IP6_FORWARDING "/proc/sys/net/ipv6/conf/%s/forwarding" - - int set_iface_proc_entry(const char *tmpl, const char *if_name, int val); - -diff -r a7e20b0b5c43 src/rtnl.h ---- a/src/rtnl.h Wed Nov 28 16:43:32 2007 +0100 -+++ b/src/rtnl.h Tue Jan 08 11:28:48 2008 +0100 -@@ -16,6 +16,7 @@ - #define IP6_RT_PRIO_MIP6_FWD 192 - #define IP6_RT_PRIO_ADDRCONF 256 - -+#define IP6_RULE_PRIO_MIP6_MNP_IN 1000 - #define IP6_RULE_PRIO_MIP6_HOA_OUT 1001 - #define IP6_RULE_PRIO_MIP6_COA_OUT 1002 - #define IP6_RULE_PRIO_MIP6_BLOCK 1003 -diff -r a7e20b0b5c43 src/scan.l ---- a/src/scan.l Wed Nov 28 16:43:32 2007 +0100 -+++ b/src/scan.l Tue Jan 08 11:28:48 2008 +0100 -@@ -136,6 +136,11 @@ MnRouterProbeTimeout { return MNROUTERP - MnRouterProbeTimeout { return MNROUTERPROBETIMEOUT; } - MnDiscardHaParamProb { return MNDISCARDHAPARAMPROB; } - OptimisticHandoff { return OPTIMISTICHANDOFF; } -+HaAcceptMobRtr { return HAACCEPTMOBRTR; } -+IsMobRtr { return ISMOBRTR; } -+HaServedPrefix { return HASERVEDPREFIX; } -+HomePrefix { return HOMEPREFIX; } -+MobRtrUseExplicitMode { return MOBRTRUSEEXPLICITMODE; } - internal { return INTERNAL; } - - {addr} { -diff -r a7e20b0b5c43 src/vt.c ---- a/src/vt.c Wed Nov 28 16:43:32 2007 +0100 -+++ b/src/vt.c Tue Jan 08 11:28:48 2008 +0100 -@@ -677,6 +677,16 @@ static int bcache_vt_dump(void *data, vo - } - - fprintf(vh->vh_stream, "\n"); -+ -+ /* Dump the registered MNP */ -+ { -+ struct list_head *l; -+ list_for_each(l, &bce->mob_net_prefixes) { -+ struct prefix_list_entry *p; -+ p = list_entry(l, struct prefix_list_entry, list); -+ fprintf(vh->vh_stream, " MNP: %x:%x:%x:%x:%x:%x:%x:%x/%d\n", NIP6ADDR(&p->ple_prefix), p->ple_plen); -+ } -+ } - - return 0; - } -diff -r a7e20b0b5c43 src/xfrm.c ---- a/src/xfrm.c Wed Nov 28 16:43:32 2007 +0100 -+++ b/src/xfrm.c Tue Jan 08 11:28:48 2008 +0100 -@@ -679,12 +679,73 @@ static int _mn_ha_ipsec_bypass_init(cons - return err; - } - -+static int mr_ipsec_bypass_init(void) -+{ -+ struct list_head *home; -+ struct list_head *mnps; -+ int err=0; -+ -+ /* Loop for each HomeAddress info */ -+ list_for_each(home, &conf.home_addrs) -+ { -+ struct home_addr_info *hai; -+ hai = list_entry(home, struct home_addr_info, list); -+ -+ /* If Mobile Router for this link, loop for each MNP */ -+ if (hai->mob_rtr) -+ { -+ /* Add bypass policies to and from the MNP link */ -+ list_for_each(mnps, &hai->mob_net_prefixes) -+ { -+ struct prefix_list_entry * mnp; -+ struct xfrm_selector sel; -+ -+ mnp = list_entry(mnps, struct prefix_list_entry, list); -+ -+ memset(&sel, 0, sizeof(sel)); -+ sel.family = AF_INET6; -+ sel.user = getuid(); -+ -+ /* IN, src = MNP , dst = any */ -+ memcpy(&sel.saddr.a6, &mnp->ple_prefix, sizeof(sel.saddr.a6)); -+ sel.prefixlen_s = mnp->ple_plen; -+ -+ err = xfrm_ipsec_policy_add(&sel, 0, XFRM_POLICY_IN, -+ XFRM_POLICY_ALLOW, MIP6_PRIO_MR_LOCAL_DATA_BYPASS, -+ NULL, 0); -+ -+ /* XXX: what should we do in case of error? */ -+ -+ /* FWD, src = MNP , dst = any */ -+ err = xfrm_ipsec_policy_add(&sel, 0, XFRM_POLICY_FWD, -+ XFRM_POLICY_ALLOW, MIP6_PRIO_MR_LOCAL_DATA_BYPASS, -+ NULL, 0); -+ -+ /* OUT, src = any , dst = MNP */ -+ memset(&sel.saddr.a6, 0, sizeof(sel.saddr.a6)); -+ sel.prefixlen_s = 0; -+ memcpy(&sel.daddr.a6, &mnp->ple_prefix, sizeof(sel.daddr.a6)); -+ sel.prefixlen_d = mnp->ple_plen; -+ -+ err = xfrm_ipsec_policy_add(&sel, 0, XFRM_POLICY_OUT, -+ XFRM_POLICY_ALLOW, MIP6_PRIO_MR_LOCAL_DATA_BYPASS, -+ NULL, 0); -+ } -+ } -+ } -+ -+ return err; -+} -+ - static inline int mn_ha_ipsec_init(void) - { - int err; - - /* insert bypass policy */ - err = ipsec_policy_walk(_mn_ha_ipsec_bypass_init, NULL); -+ -+ /* insert NEMO-related bypass */ -+ err = mr_ipsec_bypass_init(); - - err = ipsec_policy_walk(_mn_ha_ipsec_init, NULL); - -@@ -787,9 +848,64 @@ static int _mn_ha_ipsec_bypass_cleanup(c - return err; - } - -+static int mr_ipsec_bypass_cleanup(void) -+{ -+ struct list_head *home; -+ struct list_head *mnps; -+ int err=0; -+ -+ /* Loop for each HomeAddress info */ -+ list_for_each(home, &conf.home_addrs) -+ { -+ struct home_addr_info *hai; -+ hai = list_entry(home, struct home_addr_info, list); -+ -+ /* If Mobile Router for this link, loop for each MNP */ -+ if (hai->mob_rtr) -+ { -+ /* Delete bypass policies to and from the MNP link */ -+ list_for_each(mnps, &hai->mob_net_prefixes) -+ { -+ struct prefix_list_entry * mnp; -+ struct xfrm_selector sel; -+ -+ mnp = list_entry(mnps, struct prefix_list_entry, list); -+ -+ memset(&sel, 0, sizeof(sel)); -+ sel.family = AF_INET6; -+ sel.user = getuid(); -+ -+ /* IN, src = MNP , dst = any */ -+ memcpy(&sel.saddr.a6, &mnp->ple_prefix, sizeof(sel.saddr.a6)); -+ sel.prefixlen_s = mnp->ple_plen; -+ -+ err = xfrm_ipsec_policy_del(&sel, XFRM_POLICY_IN); -+ -+ /* XXX: what should we do in case of error? */ -+ -+ /* FWD, src = MNP , dst = any */ -+ err = xfrm_ipsec_policy_del(&sel, XFRM_POLICY_FWD); -+ -+ /* OUT, src = any , dst = MNP */ -+ memset(&sel.saddr.a6, 0, sizeof(sel.saddr.a6)); -+ sel.prefixlen_s = 0; -+ memcpy(&sel.daddr.a6, &mnp->ple_prefix, sizeof(sel.daddr.a6)); -+ sel.prefixlen_d = mnp->ple_plen; -+ -+ err = xfrm_ipsec_policy_del(&sel, XFRM_POLICY_OUT); -+ } -+ } -+ } -+ -+ return err; -+} -+ -+ - static inline void mn_ha_ipsec_cleanup(void) - { - ipsec_policy_walk(_mn_ha_ipsec_bypass_cleanup, NULL); -+ -+ (void)mr_ipsec_bypass_cleanup(); - - ipsec_policy_walk(_mn_ha_ipsec_cleanup, NULL); - } -@@ -1719,6 +1835,8 @@ int xfrm_pre_bu_add_bule(struct bulentry - if (hai->home_block & HOME_LINK_BLOCK) - xfrm_unblock_link(hai); - xfrm_block_link(hai); -+ if (hai->mob_rtr && !(hai->home_block & NEMO_FWD_BLOCK)) -+ xfrm_block_fwd(hai); - } - if (IN6_ARE_ADDR_EQUAL(&bule->hoa, &bule->coa)) { - if (rdata) -@@ -1784,6 +1902,8 @@ int xfrm_post_ba_mod_bule(struct bulentr - struct home_addr_info *hai = bule->home; - if (hai->home_block & HOME_LINK_BLOCK) - xfrm_unblock_link(hai); -+ if (hai->home_block & NEMO_FWD_BLOCK) -+ xfrm_unblock_fwd(hai); - } - /* check if XFRM policies and states have already been cleaned up */ - if (IN6_ARE_ADDR_EQUAL(&bule->hoa, &bule->coa)) -@@ -2058,6 +2178,50 @@ void xfrm_unblock_hoa(struct home_addr_i - hai->home_block &= ~HOME_ADDR_BLOCK; - } - -+/* block all RA messages sent by MR */ -+int xfrm_block_ra(struct home_addr_info *hai) -+{ -+ int ret = 0; -+ struct xfrm_selector sel; -+ hai->home_block |= NEMO_RA_BLOCK; -+ set_selector(&in6addr_any, &in6addr_any, IPPROTO_ICMPV6, -+ ND_ROUTER_ADVERT, 0, 0, &sel); -+ if ((ret = xfrm_mip_policy_add(&sel, 0, XFRM_POLICY_OUT, XFRM_POLICY_BLOCK, -+ MIP6_PRIO_HOME_BLOCK, NULL, 0))) -+ return ret; -+ return ret; -+} -+ -+void xfrm_unblock_ra(struct home_addr_info *hai) -+{ -+ struct xfrm_selector sel; -+ set_selector(&in6addr_any, &in6addr_any, IPPROTO_ICMPV6, -+ ND_ROUTER_ADVERT, 0, 0, &sel); -+ xfrm_mip_policy_del(&sel, XFRM_POLICY_OUT); -+ hai->home_block &= ~NEMO_RA_BLOCK; -+} -+ -+/* block all forwarded packets */ -+int xfrm_block_fwd(struct home_addr_info *hai) -+{ -+ int ret = 0; -+ struct xfrm_selector sel; -+ hai->home_block |= NEMO_FWD_BLOCK; -+ set_selector(&in6addr_any, &in6addr_any, 0, 0, 0, 0, &sel); -+ if ((ret = xfrm_mip_policy_add(&sel, 0, XFRM_POLICY_FWD, XFRM_POLICY_BLOCK, -+ MIP6_PRIO_HOME_BLOCK, NULL, 0))) -+ return ret; -+ return ret; -+} -+ -+void xfrm_unblock_fwd(struct home_addr_info *hai) -+{ -+ struct xfrm_selector sel; -+ set_selector(&in6addr_any, &in6addr_any, 0, 0, 0, 0, &sel); -+ xfrm_mip_policy_del(&sel, XFRM_POLICY_FWD); -+ hai->home_block &= ~NEMO_FWD_BLOCK; -+} -+ - int mn_ipsec_recv_bu_tnl_pol_add(struct bulentry *bule, int ifindex, - struct ipsec_policy_entry *e) - { -diff -r a7e20b0b5c43 src/xfrm.h ---- a/src/xfrm.h Wed Nov 28 16:43:32 2007 +0100 -+++ b/src/xfrm.h Tue Jan 08 11:28:48 2008 +0100 -@@ -15,6 +15,7 @@ - #define MIP6_PRIO_RO_SIG_IPSEC 7 /* XXX: BU between MN-MN with IPsec */ - #define MIP6_PRIO_RO_SIG 8 /* XXX: BU between MN-CN */ - #define MIP6_PRIO_RO_SIG_ANY 9 -+#define MIP6_PRIO_MR_LOCAL_DATA_BYPASS 9 /* Bypass rule for local traffic in mobile network */ - #define MIP6_PRIO_RO_SIG_RR 10 /* XXX: MH(or HoTI/HoT) between MN-CN */ - #define MIP6_PRIO_RO_BLOCK 11 - #define MIP6_PRIO_NO_RO_SIG_ANY 12 -@@ -87,6 +88,12 @@ int xfrm_block_hoa(struct home_addr_info - int xfrm_block_hoa(struct home_addr_info *hai); - void xfrm_unblock_hoa(struct home_addr_info *hai); - -+int xfrm_block_ra(struct home_addr_info *hai); -+void xfrm_unblock_ra(struct home_addr_info *hai); -+ -+int xfrm_block_fwd(struct home_addr_info *hai); -+void xfrm_unblock_fwd(struct home_addr_info *hai); -+ - int ha_mn_ipsec_pol_mod(struct in6_addr *haaddr, - struct in6_addr *hoa); - diff --git a/openair3/NEMO_SHO/mipv6-daemon-umip-0.4-nepl-mcoa-20080108.patch b/openair3/NEMO_SHO/mipv6-daemon-umip-0.4-nepl-mcoa-20080108.patch deleted file mode 100755 index 11217388cf..0000000000 --- a/openair3/NEMO_SHO/mipv6-daemon-umip-0.4-nepl-mcoa-20080108.patch +++ /dev/null @@ -1,5535 +0,0 @@ -diff -r 82fcd4bea972 NEWS.MCOA ---- /dev/null Thu Jan 01 00:00:00 1970 +0000 -+++ b/NEWS.MCOA Fri Jan 11 17:02:25 2008 +0100 -@@ -0,0 +1,103 @@ -+mipv6-daemon-umip-0.4-nepl-mcoa-20080108.patch -+News and Bugfixes list since mipv6-daemon-umip-0.3-nepl-mcoa-20071022.patch: -+ -+* Updated code on top of the latest NEPL patch -+* No new features -+ -+----------------------------------------------------------------------- -+mipv6-daemon-umip-0.4-nepl-mcoa-20071022.patch -+News and Bugfixes list since mipv6-daemon-umip-0.3-nepl-mcoa-20070613.patch: -+ -+* Ported the code to UMIP 0.4. MCoA now runs on a 2.6.23 kernel, -+ with an UMIP 0.4-based code for the userland. -+* Merged a fix to the proxy ND code for the HA (provided by -+ Tobias HOF): the HA can now be used as legacy node on the -+ Home Link (whereas it only worked as a gateway before). -+ -+----------------------------------------------------------------------- -+mipv6-daemon-umip-0.3-nepl-mcoa-20070613.patch -+News and Bugfixes list since nemo-0.2-mcoa-beta2-20060630: -+ -+* Ported the code to UMIP. MCoA now runs on a 2.6.21.3 kernel, -+ with an UMIP-based code for the userland. -+* MCoA is now provided as a patch for the UMIP userland. -+* The MCoA kernel patch is not needed anymore as it has been -+ integrated in the mainline kernel. -+* No new functionnalities were added. -+ -+----------------------------------------------------------------------- -+nemo-0.2-mcoa-beta3-20070118 -+News and Bugfixes list since nemo-0.2-mcoa-beta2-20060630: -+ -+* Base code: -+- Userland runs on a 2.6.16 kernel -+- Upgraded fwmark patch for 2.6.16 kernel -+- MCoA userland code updated to nemo-20060725 -+ -+* Features: -+- New "Reliable" option that allows to use the BU as a -+ heartbeat, and to automatically divert the traffic to -+ another interface when one MR-HA path fails. -+ See the manpage for details. -+- MPS/MPA can now be used with MCoA. -+- When handover occurs on an interface, forwarded traffic is now -+ blocked only for the interface performing the handover (whereas -+ it was blocked globally before). The local traffic is also -+ blocked for the interface that performs the handover, whereas -+ it was blocked for the HoA interface before. -+- Merged patch to support HoA from MNP (for Mobile Routers) -+- Merged patch to support SIT tunnels -+- Merged patch to fix the MR behaviour in the Home Network -+ (the MR was not correctly forwarding packets from the MNNs) -+ -+* Bugfixes: -+- The source address used to send the BU was sometimes outdated -+ because the CoA was not correctly updated in the XFRM kernel -+ state. -+- When packets originated from the MR were sent to the HA, the -+ HA did not behave correctly because the source address of the -+ packet may not match the one in the kernel XFRM state (that -+ can only store one CoA). Thus the MR behaviour has been -+ slightly changed to NOT use HAO dest. option when sending -+ packet to the HA (This behaviour seems to respect the MIP6 -+ spec). -+- When packets originated from the MR were sent to the HA, and -+ the MR handoffs, the HA still sent replied packets to the -+ old CoA (using Routing Header Type 2). The HA now updates -+ correctly the CoA stored in the kernel, but as the kernel -+ can only store 1 CoA at a time, when the HA replies to the -+ MR the path may be asymetric. -+- Added more checks in the configuration file grammar to -+ avoid configuration errors for MCoA. -+- Solved infinite loop when interface was declared as Interface -+ but not in IfMultipleCoA. -+- Fixed some bugs when MCoA was disabled. It now works fine when -+ not using MCoA. Interface prefence works also fine. -+- Fixed bugs when one entry was invalidated: rules are now -+ correctly deleted. -+- Fixed bugs when choosing the default rule: invalid BULE are -+ not looked up when searching for the default rule. -+- Improved the MR and HA behaviour regarding error management. -+ -+ -+----------------------------------------------------------------------- -+nemo-0.2-mcoa-beta2-20060630 -+News and Bugfixes list since nemo-0.2-mcoa-beta1-20060531: -+ -+- The MR was in some cases installing the same rules twice. -+- The MR had a problem to install some rules after recovering a failure. -+- The MR was stuck in an infinite loop at startup if MCoA was disabled -+- The MR could not clean properly tunnels if registration failed with HA -+- Policy issues when Returning home with a usual MR but using MCoA code -+- When the MR only have 1 active interface, handoff policy is different -+ (rules not erased and dereg bu not send during handoff time) -+- When the MR receives a BAck without BID option, whereas it sent a BU -+ with a BID option, the MR only registers the prefered interface -+ -+- If HA is not configured for MCoA, or MCoA not allowed for the HoA, then -+ BU is accepted but no BID option is sent in BAck -+ -+- Merged the OptimisticHandoff patch -+- Merged the PPP patch -+ -+----------------------------------------------------------------------- -diff -r 82fcd4bea972 README.MCOA ---- /dev/null Thu Jan 01 00:00:00 1970 +0000 -+++ b/README.MCOA Fri Jan 11 17:02:25 2008 +0100 -@@ -0,0 +1,154 @@ -+-------------------------------------------- -+Multiple CoA implementation on UMIP -+ -+ver. 20080108 -+-------------------------------------------- -+Romain KUNTZ -+Jean LORCHAT -+Nautilus6 Project -+-------------------------------------------- -+ -+ -+1. What is Multiple CoA? -+------------------------ -+ -+Multiple CoA (Multiple Care-of Addresses Registration, MCoA) allows -+a Mobile Node to register multiple Care-of Addresses at the same -+time to its Home Agent. Main benefits, amongst others, are policy -+routing and fault tolerance for the Mobile Router. -+ -+The current implementation is based on -+draft-ietf-monami6-multiplecoa-01 and is shipped as a tarball -+that contains kernel patches and the userland. -+ -+This implementation is based on UMIP, a Mobility platform on Linux. -+More information about UMIP can be found on -+ -+ -+ -+2. Limitations -+-------------- -+ -+Due to its early stage of development, the MCoA implementation still -+have some important limitations. Please read them carefully to -+understand what you cannot do with this implementation: -+ -+- IPsec is not yet supported. It will in the future, but we now -+ concentrate on the non-IPsec part. -+ -+- Returning home is not supported. Do not try to boot your MN at home -+ or to return home with one of its interface, this will not work. -+ This feature will be available in the future. -+ -+- Once the MN has established multiple tunnels, the policy routing -+ only works FOR THE FORWARDED TRAFFIC. The traffic generated by the -+ MN itself will not be routed according to your policies. Only the -+ traffic from the MNN, routed via the Mobile Router, will be routed -+ according to the policies you installed on the MR. You can expect -+ some improvements in the next releases. -+ -+- CN are not supported, ie the MN cannot register multiple CoA to -+ the CN. -+ -+- The BID for each interface must be chosen between 1 and 251. This -+ limitation is due to the implementation design. We will try to -+ improve this point in the future. -+ -+- This implementation does not support yet the Bulk Registration, -+ mainly because Bulk registration is still under discussion at -+ the IETF. -+ -+ -+3. Known Bugs -+------------- -+ -+- Binding Refresh Request do not include the BID option -+- Binding Error do not include the BID option -+- The BU is sometimes sent via another interface than expected. -+- Certainly many others! -+ -+4. Instructions -+--------------- -+ -+a. Testbed Setup -+---------------- -+ -+Testbed setup, kernel and userlan compilation, configuration -+files etc. are explained in the NEPL Howto available on: -+http://www.nautilus6.org/doc/nepl-howto/ -+ -+Please check this document (especially section 6) to setup -+your MCoA testbed. -+ -+b. Policy Routing -+----------------- -+ -+Once your MN has registered multiple CoA to your Home Agent, it can -+use its multiple MN-HA tunnel for policy routing. -+ -+The policy routing part is managed with ip6tables. Be sure to install -+this tool on both your HA and MN. -+ -+- How does it work? -+------------------- -+ -+The BID that you assigned to each interface will be used to mark the -+packets. Packets marked with BID X will be routed through the -+interface whose BID is X. If this interface is not available (because -+it is down), then the packet will be routed through the most prefered -+interface (the one with the best BidPriority). -+ -+NOTE: -+At the moment, ONLY PACKETS FORWARDED BY THE MR (ie packets sent by MNN) -+can benefit from the policy routing. Packets generated by the MR itself -+will not be routed according to your rules. We are currently working to -+improve the current situation to also allow the MR to benefit from the -+policy routing. -+ -+ -+- How to mark a packet? -+----------------------- -+ -+Use the ip6tables tool and the MARK target to mark your packets with -+the BID. Ip6tables rules must be done in the PREROUTING chain, in the -+mangle table. -+ -+For example, on the MN, to mark as 100 all icmpv6 packets whose -+destination is 2001:a:b::1000, you can do: -+ -+ip6tables -A PREROUTING -t mangle -+ -p icmpv6 --destination 2001:a:b::1000 -+ -j MARK --set-mark 100 -+ -+Those packets will be sent through the interface whose BID is 100. -+You will also need to create the "symetric" rule on the Home Agent: -+ -+ip6tables -A PREROUTING -t mangle -+ -p icmpv6 --source 2001:a:b::1000 -+ -j MARK --set-mark 100 -+ -+As you see, one current limitation is that each rules created on the -+MN must be also created on the Home Agent. We plan to support in the -+future some policy exchange mechanism between the MN and the HA in -+order to configure automatically the HA. -+ -+Read carefully the ip6tables manpage. You will be able to create -+rules based on many parameters, and thus create a very subtle policy -+routing on your MN. -+ -+ -+5. Support -+---------- -+ -+The MCoA implementation is not supported by the UMIP team, so please -+do not complain on their Mailing List. If you have any questions -+regarding this work, or any BUG report, feel free to subscribe to -+our support and announce mailing lists: -+ -+http://www.nautilus6.org/ml.php -+ -+-------------------------------------------- -+Romain KUNTZ -+Jean LORCHAT -+Nautilus6 Project -+-------------------------------------------- -diff -r 82fcd4bea972 include/netinet/ip6mh.h ---- a/include/netinet/ip6mh.h Fri Jan 11 16:55:08 2008 +0100 -+++ b/include/netinet/ip6mh.h Fri Jan 11 17:02:25 2008 +0100 -@@ -146,6 +146,25 @@ struct ip6_mh_opt_mob_net_prefix { - } __attribute__ ((packed)); - - /* -+ * MCoA registration -+ * Binding Unique Identifier sub-option -+ */ -+struct ip6_mh_opt_bid { -+ uint8_t ip6mobid_type; -+ uint8_t ip6mobid_len; -+ uint16_t ip6mobid_bid; -+ uint8_t ip6mobid_priority; -+ uint8_t ip6mobid_reserved; -+} __attribute__((packed)); -+ -+/* Binding Unique Identifier sub-option flags */ -+#if BYTE_ORDER == BIG_ENDIAN -+#define IP6_OPT_BID_BULK 0x80 /* Bulk Registration */ -+#else /* BYTE_ORDER == LITTLE_ENDIAN */ -+#define IP6_OPT_BID_BULK 0x80 /* Bulk Registration */ -+#endif -+ -+/* - * Mobility Header Message Types - */ - #define IP6_MH_TYPE_BRR 0 /* Binding Refresh Request */ -@@ -167,6 +186,7 @@ struct ip6_mh_opt_mob_net_prefix { - #define IP6_MHOPT_NONCEID 0x04 /* Nonce Index */ - #define IP6_MHOPT_BAUTH 0x05 /* Binding Auth Data */ - #define IP6_MHOPT_MOB_NET_PRFX 0x06 /* Mobile Network Prefix */ -+#define IP6_MHOPT_BID 0x07 /* Binding Unique Identifier */ - - /* - * Status values accompanied with Mobility Binding Acknowledgement -@@ -191,6 +211,9 @@ struct ip6_mh_opt_mob_net_prefix { - #define IP6_MH_BAS_INVAL_PRFX 141 /* Invalid Prefix */ - #define IP6_MH_BAS_NOT_AUTH_FOR_PRFX 142 /* Not Authorized for Prefix */ - #define IP6_MH_BAS_FWDING_FAILED 143 /* Forwarding Setup failed */ -+#define IP6_MH_BAS_CONFLICT_BINDING 144 /* (TBD) MCoA Conflict between bindings */ -+#define IP6_MH_BAS_MCOA_BULK_FAILED 145 /* (TBD) MCoA Bulk registration failed */ -+ - /* - * Status values for the Binding Error mobility messages - */ -diff -r 82fcd4bea972 man/mip6d.conf.tmpl ---- a/man/mip6d.conf.tmpl Fri Jan 11 16:55:08 2008 +0100 -+++ b/man/mip6d.conf.tmpl Fri Jan 11 17:02:25 2008 +0100 -@@ -57,6 +57,9 @@ These options are used both in the Home - .BR "Interface " "name" " {" - .BR " MnIfPreference " "number" ";" - .BR " IfType " "CN | HA | MN" ";" -+.BR " Bid " "number" ";" -+.BR " BidPriority " "number" ";" -+.BR " Reliable " "boolean" ";" - .B } - .fi - -@@ -74,9 +77,10 @@ sets the interface preference value for - sets the interface preference value for an interface in a multi-homed - Mobile Node. The most preferred intefaces have preference 1, the - second most preferred have 2, etc. A preference of zero means the --interface will not be used. -+interface will not be used. Do not use this option if you use the Multiple -+Care-of Address registration on your Mobile Node with this interface. - --Default: 5 -+Default: 0 - - .B IfType - overrides the default node behavior for this interface. If a MN doesn't -@@ -86,6 +90,43 @@ Default: same as - Default: same as - .B NodeConfig - -+.B Bid -+Sets the BID for this interface. The BID must be unique within all -+interface definitions. This BID will be used as an Interface Identifier -+that the user can use for policy routing. If this option is defined, -+also set the -+.B BidPriority -+option, and do not set the -+.B MnIfPreference -+option. -+.B Bid -+must be set between 1 and 251 (this is one of the current limitation -+with this MCoA implementation). -+ -+Default: 0 (no BID) -+ -+.B BidPriority -+Sets the priority of the binding (the higher the better). When no -+policies are define for some flows, the binding with the higher -+preference is used. If this option is defined, do not set the -+.B MnIfPreference -+option for this interface. -+.B BidPriority -+must be set between 1 and 255. -+ -+Default: 0 -+ -+.B Reliable -+allows you to specify if the interface can be considered as reliable -+when using MCoA. If set to false, the traffic will be redirected to -+another interface during the BU-BAck exchange. You can thus use the -+BU as a heartbeat (by specifying a small -+.B MnMaxHaBindingLife -+), which can be pretty useful when one of your MR-HA path is not -+reliable: traffic is redirected to the interface with the best -+priority as long as no BAck is received. -+ -+Default: true - - .TP - .BR "UseMnHaIPsec " "boolean" ";" -@@ -191,6 +232,13 @@ Default: disabled; - Default: disabled; - - .TP -+.BR "HaAcceptMCoAReg enabled | disabled" -+ -+Indicates if the HA accepts Multiple Care-of Addresses registration. -+ -+Default: disabled; -+ -+.TP - .BR "HaServedPrefix " "prefix/length" ";" - - Prefix is an IPv6 prefix and length is the prefix length. Defines the whole -@@ -199,7 +247,7 @@ Mobile Network Prefixes, instead of one - Mobile Network Prefixes, instead of one of the home link prefixes. - - .TP --.BR "BindingAclPolicy " "address MNP list " "allow | deny" -+.BR "BindingAclPolicy " "address MNP list " "MCoAReg | NoMCoAReg " "allow | deny" - - Defines if a MN is allowed to register with the HA or not. The home address - of the MN is given in the address field. The mobile network prefixes -@@ -207,6 +255,12 @@ be an empty string or a comma separated - be an empty string or a comma separated list of network prefixes - enclosed in braces, for example: - .B "(3ffe:2620:6:3::/64, 3ffe:2620:6:4::/64)" -+The HA can forbid or allow the MN to register Multiple Care-of Addresses by -+setting the -+.B NoMCoAReg -+or -+.B MCoAReg -+flag. - - .TP - .BR "DefaultBindingAclPolicy allow | deny" -@@ -368,6 +422,31 @@ Default: disabled - Default: disabled - - .TP -+.BR "RegMultipleCoA enabled | disabled" -+ -+Defines if the Mobile Node should try to register Multiple Care-of -+Addresses to its Home Agent. If enabled, use also the -+.B IfMultipleCoA -+option. If disabled, the node will only register one CoA at a time. -+ -+Default: disabled; -+ -+.TP -+.BR "IfMultipleCoA " "name1, name2, ..." ";" -+ -+Defines the list of interfaces that will be used for Multiple Care-of -+Addresses registration. This list must be composed with the names -+(enclosed in double quotes) of the interfaces (eg. "eth1"), separated -+with a coma. Each interface listed must have an -+.B Interface -+definition properly filled with the Multiple Care-of Address options -+( -+.B Bid -+and -+.B BidPriority -+). -+ -+.TP - The route optimization policies are of the form: - - .TP -@@ -389,7 +468,7 @@ matching this entry. - .SH EXAMPLES - - .TP --.BR "A NEMO Home Agent example:" -+.BR "A NEMO Home Agent example with MCoA support:" - - .nf - NodeConfig HA; -@@ -397,18 +476,19 @@ Interface "eth0"; - Interface "eth0"; - - HaAcceptMobRtr enabled; -+HaAcceptMCoAReg enabled; - - HaServedPrefix 3ffe:2620:6::/48; - - DefaultBindingAclPolicy deny; --BindingAclPolicy 3ffe:2620:6:1::1234 (3ffe:2620:6:2::/64, 3ffe:2620:6:3::/64) allow; -+BindingAclPolicy 3ffe:2620:6:1::1234 (3ffe:2620:6:2::/64, 3ffe:2620:6:3::/64) MCoAReg allow; - BindingAclPolicy 3ffe:2620:6:1::1235 allow; - - UseMnHaIPsec disabled; - .fi - - .TP --.BR "A NEMO Mobile Router example:" -+.BR "A NEMO Mobile Router example with MCoA support:" - - .nf - NodeConfig MN; -@@ -416,7 +496,15 @@ DoRouteOptimizationCN disabled; - DoRouteOptimizationCN disabled; - DoRouteOptimizationMN disabled; - --Interface "eth0"; -+Interface "eth0" { -+ Bid 111; -+ BidPriority 10; -+}; -+ -+Interface "eth1" { -+ Bid 222; -+ BidPriority 5; -+}; - - MnRouterProbes 1; - -@@ -426,6 +514,8 @@ MnHomeLink "eth0" { - IsMobRtr enabled; - HomeAgentAddress 3ffe:2620:6:1::1; - HomeAddress 3ffe:2620:6:1::1234/64 (3ffe:2620:6:2::/64, 3ffe:2620:6:3::/64); -+ RegMultipleCoA enabled; -+ IfMultipleCoA "eth0", "eth1"; - } - - UseMnHaIPsec disabled; -diff -r 82fcd4bea972 src/bcache.c ---- a/src/bcache.c Fri Jan 11 16:55:08 2008 +0100 -+++ b/src/bcache.c Fri Jan 11 17:02:25 2008 +0100 -@@ -48,6 +48,7 @@ static int bcache_count = 0; - static int bcache_count = 0; - - pthread_rwlock_t bc_lock; /* Protects binding cache */ -+int bce_next_entry(void *bce_v, void *next_bce_v); - - /** - * get_bcache_count - returns number of home and cache entries -@@ -90,6 +91,12 @@ void dump_bce(void *bce, void *os) - fprintf(out, " lifetime %ld\n ", e->lifetime.tv_sec); - fprintf(out, " seqno %d\n", e->seqno); - -+ if (e->bid) -+ fprintf(out, " BID = %d, Priority = %d\n", -+ e->bid, e->priority); -+ else -+ fprintf(out, " No BID assigned\n"); -+ - if (e->flags & IP6_MH_BA_MR) { - struct list_head *list; - -@@ -201,6 +208,7 @@ void bcache_free(struct bcentry *bce) - * @hinfo: home address info, optional if our_addr is present - * @our_addr: local address (home address) - * @peer_addr: address of CN -+ * @bid: BID of the bce - * - * Returns reference to non-null entry on success and null on failure. - * If caller adjusts lifetime of entry, caller must call -@@ -208,7 +216,8 @@ void bcache_free(struct bcentry *bce) - * call bcache_release_entry() after entry is not used anymore. - **/ - struct bcentry *bcache_get(const struct in6_addr *our_addr, -- const struct in6_addr *peer_addr) -+ const struct in6_addr *peer_addr, -+ uint16_t bid) - { - struct bcentry *bce; - -@@ -216,7 +225,7 @@ struct bcentry *bcache_get(const struct - - pthread_rwlock_rdlock(&bc_lock); - -- bce = hash_get(&bc_hash, our_addr, peer_addr); -+ bce = hash_get(&bc_hash, our_addr, peer_addr, bid); - - if (bce) - pthread_rwlock_wrlock(&bce->lock); -@@ -240,16 +249,19 @@ void bcache_release_entry(struct bcentry - * bce_type - get type of binding cache entry - * @our_addr: our IPv6 address - * @peer_addr: peer's IPv6 address -+ * @bid: BID of the bce - * - * Looks up entry from binding cache and returns its type. If not - * found, returns -%ENOENT. - **/ --int bce_type(const struct in6_addr *our_addr, const struct in6_addr *peer_addr) -+int bce_type(const struct in6_addr *our_addr, -+ const struct in6_addr *peer_addr, -+ uint16_t bid) - { - struct bcentry *bce; - int type; - -- bce = bcache_get(our_addr, peer_addr); -+ bce = bcache_get(our_addr, peer_addr, bid); - - if (bce == NULL) - return -ENOENT; -@@ -264,7 +276,8 @@ static int __bcache_insert(struct bcentr - { - int ret; - -- ret = hash_add(&bc_hash, bce, &bce->our_addr, &bce->peer_addr); -+ ret = hash_add(&bc_hash, bce, &bce->our_addr, -+ &bce->peer_addr, &bce->bid); - if (ret) - return ret; - -@@ -282,7 +295,14 @@ static int __bcache_start(struct bcentry - bce->type == BCE_HOMEREG ? bce->lifetime : tmp, - expires); - add_task_abs(&expires, &bce->tqe, _expire); -- xfrm_add_bce(&bce->our_addr, &bce->peer_addr, &bce->coa, 0); -+ /* MCoA -+ * Due to the BID, the BC may have several entries with the -+ * same peer_addr. Thus we add states and policies only if -+ * there are no entries yet for the our_addr/peer_addr pair -+ * (see bce->xfrm_create). -+ */ -+ xfrm_add_bce(&bce->our_addr, &bce->peer_addr, &bce->coa, 0, -+ bce->xfrm_create); - return 0; - } - -@@ -350,22 +370,26 @@ int bcache_update_expire(struct bcentry - } - tsadd(expires, bce->add_time, expires); - add_task_abs(&expires, &bce->tqe, _expire); -- xfrm_add_bce(&bce->our_addr, &bce->peer_addr, &bce->coa, 1); -+ xfrm_add_bce(&bce->our_addr, &bce->peer_addr, &bce->coa, 1, 0); - - return 0; - } - - /** - * bcache_delete - deletes a bul entry -+ * If bid == 0, all entries that match our_addr/peer_addr are deleted - **/ - void bcache_delete(const struct in6_addr *our_addr, -- const struct in6_addr *peer_addr) -+ const struct in6_addr *peer_addr, -+ uint16_t bid) - { - struct bcentry *bce; - pthread_rwlock_wrlock(&bc_lock); -- bce = hash_get(&bc_hash, our_addr, peer_addr); -- if (bce) -- bce_delete(bce, 0); -+ while ((bce = hash_get(&bc_hash, our_addr, peer_addr, bid))) { -+ if (bce) -+ bce_delete(bce, 0); -+ } -+ - pthread_rwlock_unlock(&bc_lock); - } - -@@ -398,8 +422,27 @@ static void bce_delete(struct bcentry *b - pthread_rwlock_wrlock(&bce->lock); - if (bce->type != BCE_DAD) { - del_task(&bce->tqe); -- if (bce->type != BCE_NONCE_BLOCK) -- xfrm_del_bce(&bce->our_addr, &bce->peer_addr); -+ if (bce->type != BCE_NONCE_BLOCK) { -+ /* MCoA -+ * Due to the BID, the BC can have several entries -+ * with the same our_addr/peer_addr pair. We delete -+ * the xfrm data if we do not have any BCE for -+ * this peer_addr anymore, or we update it (we need -+ * to update the kernel's CoA to a valid one). -+ */ -+ if(mcoa_bce_count(&bce->peer_addr) == 1) -+ xfrm_del_bce(&bce->our_addr, &bce->peer_addr); -+ else { -+ struct bcentry *next = bce; -+ /* Look for another valid BCE */ -+ bcache_iterate_in(&bce->peer_addr, -+ bce_next_entry, &next); -+ /* Replace the CoA */ -+ xfrm_add_bce(&next->our_addr, -+ &next->peer_addr, -+ &next->coa, 1, 0); -+ } -+ } - } - if (bce->cleanup) - bce->cleanup(bce); -@@ -414,7 +457,7 @@ static void bce_delete(struct bcentry *b - } - } - bcache_count--; -- hash_delete(&bc_hash, &bce->our_addr, &bce->peer_addr); -+ hash_delete(&bc_hash, &bce->our_addr, &bce->peer_addr, bce->bid); - pthread_rwlock_unlock(&bce->lock); - bcache_free(bce); - } -@@ -458,3 +501,71 @@ int bcache_iterate(int (* func)(void *, - pthread_rwlock_unlock(&bc_lock); - return err; - } -+ -+/** -+ * bcache_iterate_in - apply function to every BC entry that match peer_addr -+ * @peer_addr: the peer_addr of the hash -+ * @func: function to apply -+ * @arg: extra data for @func -+ * -+ * Iterates through binding cache, calling @func for each entry that -+ * match peer_addr. Extra data may be passed to @func in @arg. @func -+ * takes a bcentry as its first argument and @arg as second argument. -+ * -+ * Be sure that bc_lock is locked before using this function, and -+ * unlocked after using it. -+ **/ -+int bcache_iterate_in(const struct in6_addr *peer_addr, -+ int (* func)(void *, void *), -+ void *arg) -+{ -+ int err; -+ err = hash_iterate_in(&bc_hash, peer_addr, func, arg); -+ return err; -+} -+ -+int bce_highest_priority(void *bce_v, void *best_bce_v) -+{ -+ struct bcentry *bce = bce_v; -+ struct bcentry **best_bce = best_bce_v; -+ -+ assert(bce); -+ assert(best_bce); -+ -+ if (!(*best_bce) || (bce->priority > (*best_bce)->priority)) -+ (*best_bce) = bce; -+ -+ return 0; -+} -+ -+int bce_next_entry(void *bce_v, void *next_bce_v) -+{ -+ struct bcentry *bce = bce_v; -+ struct bcentry **next_bce = next_bce_v; -+ -+ assert(bce); -+ assert(next_bce); -+ -+ if (bce->bid != (*next_bce)->bid) { -+ (*next_bce) = bce; -+ return 1; -+ } -+ -+ return 0; -+} -+ -+int mcoa_bce_inc_counter(void *bule_v, void *counter_v) -+{ -+ int *counter = counter_v; -+ (*counter)++; -+ return 0; -+} -+ -+int mcoa_bce_count(const struct in6_addr *peer_addr) -+{ -+ int count = 0; -+ bcache_iterate_in(peer_addr, mcoa_bce_inc_counter, &count); -+ -+ return count; -+} -+ -diff -r 82fcd4bea972 src/bcache.h ---- a/src/bcache.h Fri Jan 11 16:55:08 2008 +0100 -+++ b/src/bcache.h Fri Jan 11 17:02:25 2008 +0100 -@@ -20,6 +20,12 @@ struct bcentry { - uint16_t nonce_hoa; - uint16_t type; /* Entry type */ - uint16_t nemo_type; /* NEMO registration type */ -+ uint16_t bid; /* MCoA: Binding Identifier */ -+ uint8_t priority; /* MCoA: BID priority */ -+ int table; /* MCoA: Table id to where are stored -+ the routes */ -+ int xfrm_create; /* MCoA: If xfrm policies/states must -+ be created */ - int unreach; /* ICMP dest unreach count */ - int tunnel; /* Tunnel interface index */ - int link; /* Home link interface index */ -@@ -48,12 +54,16 @@ struct bcentry { - #define BCE_NEMO_IMPLICIT 2 - #define BCE_NEMO_DYNAMIC 3 - -+#define BCE_TABLE_MIN 1 -+#define BCE_TABLE_MAX 251 -+ - struct bcentry *bcache_alloc(int type); - - void bcache_free(struct bcentry *bce); - - struct bcentry *bcache_get(const struct in6_addr *our_addr, -- const struct in6_addr *peer_addr); -+ const struct in6_addr *peer_addr, -+ uint16_t bid); - - int bcache_add(struct bcentry *bce); - -@@ -63,28 +73,37 @@ int bcache_update_expire(struct bcentry - int bcache_update_expire(struct bcentry *bce); - - void bcache_delete(const struct in6_addr *our_addr, -- const struct in6_addr *peer_addr); -+ const struct in6_addr *peer_addr, -+ uint16_t bid); - - int bcache_init(void); - void bcache_flush(void); - void bcache_cleanup(void); - - int bcache_iterate(int (* func)(void *, void *), void *arg); -+int bcache_iterate_in(const struct in6_addr *peer_addr, -+ int (* func)(void *, void *), -+ void *arg); - - void bcache_release_entry(struct bcentry *bce); - - int bce_type(const struct in6_addr *our_addr, -- const struct in6_addr *peer_addr); -+ const struct in6_addr *peer_addr, -+ uint16_t bid); - - static inline int bce_exists(const struct in6_addr *our_addr, -- const struct in6_addr *peer_addr) -+ const struct in6_addr *peer_addr, -+ uint16_t bid) - { -- return bce_type(our_addr, peer_addr) >= BCE_NONCE_BLOCK; -+ return bce_type(our_addr, peer_addr, bid) >= BCE_NONCE_BLOCK; - } -+ -+int bce_highest_priority(void *bce_v, void *best_bce_v); - - void dump_bce(void *bce, void *os); - - int get_bcache_count(int type); -+int mcoa_bce_count(const struct in6_addr *peer_addr); - - extern pthread_rwlock_t bc_lock; /* Protects binding cache */ - -diff -r 82fcd4bea972 src/bul.c ---- a/src/bul.c Fri Jan 11 16:55:08 2008 +0100 -+++ b/src/bul.c Fri Jan 11 17:02:25 2008 +0100 -@@ -38,6 +38,8 @@ - #include "xfrm.h" - #include "debug.h" - #include "retrout.h" -+#include "tunnelctl.h" -+#include "rtnl.h" - #ifdef ENABLE_VT - #include "vt.h" - #endif -@@ -55,7 +57,8 @@ static struct hash bul_hash; - static struct hash bul_hash; - - struct bulentry *create_bule(const struct in6_addr *hoa, -- const struct in6_addr *cn_addr) -+ const struct in6_addr *cn_addr, -+ u_int16_t bid) - { - struct bulentry *bule; - if ((bule = malloc(sizeof(*bule))) != NULL) { -@@ -63,6 +66,11 @@ struct bulentry *create_bule(const struc - bule->hoa = *hoa; - bule->last_coa = *hoa; - bule->peer_addr = *cn_addr; -+ bule->bid = bid; -+ bule->if_tunnel = 0; -+ bule->rules = 0; -+ bule->home_block = 0; -+ bule->mcoa_dereg = 1; - INIT_LIST_HEAD(&bule->tqe.list); - bule->seq = random(); - } -@@ -97,6 +105,11 @@ void dump_bule(void *bule, void *os) - NIP6ADDR(&e->peer_addr)); - fprintf(out, " lifetime = %ld, ", e->lifetime.tv_sec); - fprintf(out, " delay = %ld\n", tstomsec(e->delay)); -+ if (e->bid) -+ fprintf(out, " BID = %d, Priority = %d\n", -+ e->bid, e->priority); -+ else -+ fprintf(out, " No BID assigned\n"); - fprintf(out, " flags: "); - if (e->flags & IP6_MH_BU_HOME) - fprintf(out, "IP6_MH_BU_HOME "); -@@ -118,21 +131,23 @@ void dump_bule(void *bule, void *os) - * @hinfo: home address info, optional if our_addr is present - * @our_addr: local address (home address) - * @peer_addr: address of CN -+ * @bid: Binding Unique Identifier - * - * Returns non-null entry on success and null on failure. Caller must - * call del_task and add_task, if lifetime of the entry is changed. - **/ - struct bulentry *bul_get(struct home_addr_info *hinfo, - const struct in6_addr *our_addr, -- const struct in6_addr *peer_addr) -+ const struct in6_addr *peer_addr, -+ u_int16_t bid) - { - struct bulentry *bule; - - assert(hinfo || our_addr); - - if (hinfo) -- bule = hash_get(&hinfo->bul, NULL, peer_addr); -- else bule = hash_get(&bul_hash, our_addr, peer_addr); -+ bule = hash_get(&hinfo->bul, NULL, peer_addr, bid); -+ else bule = hash_get(&bul_hash, our_addr, peer_addr, bid); - return bule; - } - -@@ -175,9 +190,11 @@ int bul_add(struct bulentry *bule) - - assert(bule && tsisset(bule->lifetime) && hai); - -- if ((ret = hash_add(&bul_hash, bule, &bule->hoa, &bule->peer_addr)) < 0) -+ if ((ret = hash_add(&bul_hash, bule, &bule->hoa, &bule->peer_addr, -+ &bule->bid)) < 0) - return ret; -- if ((ret = hash_add(&hai->bul, bule, NULL, &bule->peer_addr)) < 0) -+ if ((ret = hash_add(&hai->bul, bule, NULL, &bule->peer_addr, -+ &bule->bid)) < 0) - goto bul_free; - - clock_gettime(CLOCK_REALTIME, &bule->lastsent); -@@ -197,9 +214,9 @@ int bul_add(struct bulentry *bule) - add_task_abs(&timer_expire, &bule->tqe, bule->callback); - return 0; - home_bul_free: -- hash_delete(&hai->bul, &bule->hoa, &bule->peer_addr); -+ hash_delete(&hai->bul, &bule->hoa, &bule->peer_addr, bule->bid); - bul_free: -- hash_delete(&bul_hash, &bule->hoa, &bule->peer_addr); -+ hash_delete(&bul_hash, &bule->hoa, &bule->peer_addr, bule->bid); - return ret; - } - -@@ -209,8 +226,8 @@ void bul_delete(struct bulentry *bule) - struct home_addr_info *hai = bule->home; - - del_task(&bule->tqe); -- hash_delete(&bul_hash, &bule->hoa, &bule->peer_addr); -- hash_delete(&hai->bul, NULL, &bule->peer_addr); -+ hash_delete(&bul_hash, &bule->hoa, &bule->peer_addr, bule->bid); -+ hash_delete(&hai->bul, NULL, &bule->peer_addr, bule->bid); - - if (!IN6_ARE_ADDR_EQUAL(&bule->hoa, &bule->coa)) { - bule->last_coa = bule->coa; -@@ -222,6 +239,7 @@ void bul_delete(struct bulentry *bule) - if (!(bule->flags & IP6_MH_BU_HOME)) - mn_rr_delete_bule(bule); - } -+ - if (bule->flags & IP6_MH_BU_HOME) { - if (bule->type == UNREACH_ENTRY) { - pthread_mutex_lock(&hai->ha_list.c_lock); -@@ -232,16 +250,28 @@ void bul_delete(struct bulentry *bule) - } else { - if (hai->home_block & HOME_LINK_BLOCK) - xfrm_unblock_link(hai); -+ if (bule->home_block & HOME_LINK_BLOCK) -+ xfrm_unblock_bule_link(bule); - if (hai->home_block & HOME_ADDR_BLOCK) - xfrm_unblock_hoa(hai); - if (hai->home_block & NEMO_RA_BLOCK) - xfrm_unblock_ra(hai); - if (hai->home_block & NEMO_FWD_BLOCK) - xfrm_unblock_fwd(hai); -+ if (bule->home_block & NEMO_FWD_BLOCK) -+ bule_unblock_fwd(bule); - } - } - while (bule->ext_cleanup) - bule->ext_cleanup(bule); -+ -+ /* MCoA -+ * If MCoA is used, the tunnel related to this BULE -+ * has to be deleted. -+ */ -+ if (bule->home->reg_mcoa && bule->type != NON_MIP_CN_ENTRY) -+ tunnel_del(bule->if_tunnel, NULL, NULL); -+ - dbg("Deleting bule\n"); - dbg_func(bule, dump_bule); - free_bule(bule); -@@ -312,3 +342,129 @@ int bul_iterate(struct hash *h, int (* f - struct hash *tmp = h ? h : &bul_hash; - return hash_iterate(tmp, func, arg); - } -+ -+/** -+ * bul_iterate_in - apply function to every BUL entry that match peer_addr -+ * @peer_addr: the peer_addr of the hash -+ * @func: function to apply -+ * @arg: extra data for @func -+ * -+ * Iterates through binding update list, calling @func for each entry that -+ * match peer_addr. Extra data may be passed to @func in @arg. @func -+ * takes a BUL entry as its first argument and @arg as second argument. -+ **/ -+int bul_iterate_in(struct in6_addr *peer_addr, -+ int (* func)(void *, void *), -+ void *arg) -+{ -+ return hash_iterate_in(&bul_hash, peer_addr, func, arg); -+} -+ -+int bul_highest_priority(void *bule_v, void *best_bule_v) -+{ -+ struct bulentry *bule = bule_v; -+ struct bulentry **best_bule = best_bule_v; -+ -+ assert(bule); -+ assert(best_bule); -+ -+ if(bule->type == NON_MIP_CN_ENTRY || -+ bule->type == UNREACH_ENTRY) -+ return 0; -+ -+ if (!(*best_bule) -+ || (bule->priority > (*best_bule)->priority -+ && bule->rules)) -+ (*best_bule) = bule; -+ -+ return 0; -+} -+ -+int mcoa_bule_inc_counter(void *bule_v, void *counter_v) -+{ -+ struct bulentry *bule = bule_v; -+ int *counter = counter_v; -+ assert(counter); -+ -+ if(bule->type != NON_MIP_CN_ENTRY) -+ (*counter)++; -+ return 0; -+} -+ -+/** -+ * mcoa_bule_count - count the number of entry (!NON_MIP_CN_ENTRY) -+ * with the same peer_addr. -+ * @bule: the bule where to pick up the peer address -+ **/ -+ -+int mcoa_bule_count(struct bulentry *bule) -+{ -+ int count = 0; -+ assert(bule); -+ bul_iterate_in(&bule->peer_addr, mcoa_bule_inc_counter, &count); -+ return count; -+} -+ -+ -+int mcoa_bule_setdereg(void *bule_v, void *dereg_v) -+{ -+ int *dereg = dereg_v; -+ struct bulentry *bule = bule_v; -+ -+ assert(dereg); -+ bule->mcoa_dereg = *(dereg); -+ return 0; -+} -+ -+/** -+ * mcoa_bule_dereg - Set the BULE mcoa_dereg flag to value for -+ * all entries that match bule->peer_addr. -+ * @bule: the bule where to pick up the peer address -+ * @value: the value to set -+ **/ -+int mcoa_bule_dereg(struct bulentry *bule, int value) -+{ -+ bul_iterate_in(&bule->peer_addr, mcoa_bule_setdereg, &value); -+ return 0; -+} -+ -+/** -+ * bule_block_fwd - Block forwarding for all MNPs -+ * via the fwmark (BID) of the bule -+ * @bule: the bule -+ */ -+void bule_block_fwd(struct bulentry *bule) -+{ -+ struct list_head *l; -+ if (!bule->rules) -+ return; -+ bule->home_block |= NEMO_FWD_BLOCK; -+ list_for_each(l, &bule->home->mob_net_prefixes) { -+ struct prefix_list_entry *p = NULL; -+ p = list_entry(l, struct prefix_list_entry, list); -+ rule_add(NULL, 0, IP6_RULE_PRIO_MIP6_BLOCK, -+ /*fwmark*/ bule->bid, RTN_BLACKHOLE, -+ &p->ple_prefix, p->ple_plen, -+ &in6addr_any, 0, 0); -+ } -+} -+ -+/** -+ * bule_unblock_fwd - unblock forwarding for all MNPs -+ * via the fwmark (BID) of the bule -+ * @bule: the bule -+ */ -+void bule_unblock_fwd(struct bulentry *bule) -+{ -+ struct list_head *l; -+ bule->home_block &= ~NEMO_FWD_BLOCK; -+ list_for_each(l, &bule->home->mob_net_prefixes) { -+ struct prefix_list_entry *p = NULL; -+ p = list_entry(l, struct prefix_list_entry, list); -+ rule_del(NULL, 0, IP6_RULE_PRIO_MIP6_BLOCK, -+ /*fwmark*/ bule->bid, RTN_BLACKHOLE, -+ &p->ple_prefix, p->ple_plen, -+ &in6addr_any, 0, 0); -+ } -+} -+ -diff -r 82fcd4bea972 src/bul.h ---- a/src/bul.h Fri Jan 11 16:55:08 2008 +0100 -+++ b/src/bul.h Fri Jan 11 17:02:25 2008 +0100 -@@ -9,6 +9,9 @@ - #include "tqueue.h" - #include "hash.h" - #include "list.h" -+ -+#define BULE_TABLE_MIN 1 -+#define BULE_TABLE_MAX 251 - - struct home_addr_info; - -@@ -31,10 +34,16 @@ struct bulentry { - struct in6_addr hoa; - struct in6_addr coa; /* care-of address of the sent BU */ - int if_coa; -+ int if_tunnel; /* MCoA: Tunnel iface for the BCE */ -+ int table; /* MCoA: Routing table where are -+ stored the routes */ -+ int rules; /* MCoA: if rules are installed for -+ this BULE */ - int type; /* BUL / NON_MIP_CN / UNREACH */ - uint16_t seq; /* sequence number of the latest BU */ - uint16_t flags; /* BU send flags */ -- struct in6_addr last_coa; /* Last good coa */ -+ uint16_t bid; /* MCoA: Binding Identifier */ -+ struct in6_addr last_coa; /* Last good coa */ - struct timespec lastsent; - struct timespec lifetime; /* lifetime sent in this BU */ - struct timespec delay; /* call back time in ms*/ -@@ -47,7 +56,11 @@ struct bulentry { - uint8_t use_alt_coa; /* Whether to use alt. CoA option */ - uint8_t dereg; /* for calculating BSA key */ - uint8_t do_send_bu; /* send bu / not send bu */ -- -+ uint8_t priority; /* MCoA: BID priority */ -+ uint8_t home_block; /* MCoA: NEMO_FWD_BLOCK, ... */ -+ uint8_t mcoa_dereg; /* MCoA: if BCE needs to be -+ deregistered with a BU */ -+ - /* Information for return routability */ - struct retrout_info rr; - uint8_t Kbm[HMAC_SHA1_KEY_SIZE]; -@@ -84,7 +97,8 @@ enum { - - struct bulentry *bul_get(struct home_addr_info *hinfo, - const struct in6_addr *our_addr, -- const struct in6_addr *peer_addr); -+ const struct in6_addr *peer_addr, -+ u_int16_t bid); - - int bul_add(struct bulentry *bule); - -@@ -94,7 +108,11 @@ void bul_update_expire(struct bulentry * - void bul_update_expire(struct bulentry *bule); - - int bul_iterate(struct hash *h, int (* func)(void *bule, void *arg), void *arg); -+int bul_iterate_in(struct in6_addr *peer_addr, -+ int (* func)(void *, void *), -+ void *arg); - -+int bul_highest_priority(void *bule_v, void *best_bule_v); - int bul_init(void); - int bul_home_init(struct home_addr_info *home); - void bul_home_cleanup(struct hash *bul); -@@ -102,7 +120,12 @@ void bul_cleanup(void); - void bul_cleanup(void); - void dump_bule(void *bule, void *os); - struct bulentry *create_bule(const struct in6_addr *hoa, -- const struct in6_addr *cn_addr); -+ const struct in6_addr *cn_addr, -+ u_int16_t bid); - void free_bule(struct bulentry *bule); -+int mcoa_bule_count(struct bulentry *bule); -+int mcoa_bule_dereg(struct bulentry *bule_v, int value); -+void bule_block_fwd(struct bulentry *bule); -+void bule_unblock_fwd(struct bulentry *bule); - - #endif -diff -r 82fcd4bea972 src/cn.c ---- a/src/cn.c Fri Jan 11 16:55:08 2008 +0100 -+++ b/src/cn.c Fri Jan 11 17:02:25 2008 +0100 -@@ -67,7 +67,11 @@ static void cn_recv_dst_unreach(const st - if (icmp6_parse_data(ip6h, optlen, &laddr, &raddr) < 0) - return; - -- bce = bcache_get(laddr, raddr); -+ /* MCoA TODO2 -+ * Add MCoA support for the CN -+ * MCOA_NO_BID must be replaced with the BUI's BID -+ */ -+ bce = bcache_get(laddr, raddr, MCOA_NO_BID); - - if (bce == NULL) - return; -@@ -76,7 +80,7 @@ static void cn_recv_dst_unreach(const st - if (bce->unreach > ICMP_ERROR_PERSISTENT_THRESHOLD && - bce->type != BCE_HOMEREG) { - bcache_release_entry(bce); -- bcache_delete(laddr, raddr); -+ bcache_delete(laddr, raddr, MCOA_NO_BID); - dbg("BCE for %x:%x:%x:%x:%x:%x:%x:%x deleted " - "due to receipt of ICMPv6 destination unreach\n", - NIP6ADDR(raddr)); -@@ -156,6 +160,7 @@ void cn_recv_bu(const struct ip6_mh *mh, - struct in6_addr_bundle out; - struct ip6_mh_binding_update *bu; - struct ip6_mh_opt_nonce_index *non_ind; -+ struct ip6_mh_opt_bid *bid_opt = NULL; - struct bcentry *bce = NULL; - struct timespec lft; - int status, new = 0; -@@ -175,7 +180,18 @@ void cn_recv_bu(const struct ip6_mh *mh, - - bu_flags = bu->ip6mhbu_flags; - non_ind = mh_opt(&bu->ip6mhbu_hdr, &mh_opts, IP6_MHOPT_NONCEID); -- bce = bcache_get(out.src, out.dst); -+ /* MCoA TODO2 -+ * MCoA support for CN is not implemented yet -+ * At the moment we ignore the BUs with BUI option -+ */ -+ if ((bid_opt = mh_opt(&bu->ip6mhbu_hdr, &mh_opts, IP6_MHOPT_BID))) { -+ dbg("Received BU with BUI sub-option, but CN doesn't " -+ "support MCoA registration. BU skipped.\n"); -+ status = IP6_MH_BAS_REG_NOT_ALLOWED; -+ goto send_nack; -+ } -+ -+ bce = bcache_get(out.src, out.dst, MCOA_NO_BID); - if (bce) { - if ((bce->flags^bu_flags) & (IP6_MH_BU_HOME|IP6_MH_BU_MR)) { - /* H-bit or R-bit mismatch, flags changed */ -@@ -219,7 +235,7 @@ void cn_recv_bu(const struct ip6_mh *mh, - goto send_nack; - } - /* else get rid of it */ -- bcache_delete(out.src, out.dst); -+ bcache_delete(out.src, out.dst, MCOA_NO_BID); - } - } else { - if (bu_flags & IP6_MH_BU_HOME) { -@@ -281,18 +297,18 @@ void cn_recv_bu(const struct ip6_mh *mh, - } - /* dereg, success */ - bcache_release_entry(bce); -- bcache_delete(out.src, out.dst); -+ bcache_delete(out.src, out.dst, MCOA_NO_BID); - status = IP6_MH_BAS_ACCEPTED; - } - if (bu_flags & IP6_MH_BU_ACK) -- mh_send_ba(&out, status, 0, seqno, &lft, key, iif); -+ mh_send_ba(&out, status, 0, seqno, &lft, 0, 0, key, iif); - return; - send_nack: - if (bce) { - bcache_release_entry(bce); -- bcache_delete(out.src, out.dst); -+ bcache_delete(out.src, out.dst, MCOA_NO_BID); - } -- mh_send_ba_err(&out, status, 0, seqno, pkey, iif); -+ mh_send_ba_err(&out, status, 0, seqno, 0, 0, pkey, iif); - } - - static struct mh_handler cn_bu_handler = -diff -r 82fcd4bea972 src/conf.c ---- a/src/conf.c Fri Jan 11 16:55:08 2008 +0100 -+++ b/src/conf.c Fri Jan 11 17:02:25 2008 +0100 -@@ -74,6 +74,7 @@ static void conf_version(void) - { - fprintf(stderr, - "%s (%s) %s\n" -+ "With Multiple Care-of Addresses registration support\n" - "%s\n" - "This is free software; see the source for copying conditions. There is NO\n" - "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n", -@@ -218,6 +219,7 @@ static void conf_default(struct mip6_con - - /* HA options */ - c->SendMobPfxAdvs = 1; -+ c->HaAcceptMCoAReg = 0; - c->SendUnsolMobPfxAdvs = 1; - c->MaxMobPfxAdvInterval = 86400; /* seconds */ - c->MinMobPfxAdvInterval = 600; /* seconds */ -@@ -317,8 +319,89 @@ void conf_show(struct mip6_config *c) - dbg("MinMobPfxAdvInterval = %u\n", c->MinMobPfxAdvInterval); - dbg("HaMaxBindingLife = %u\n", c->HaMaxBindingLife); - dbg("HaAcceptMobRtr = %s\n", CONF_BOOL_STR(c->HaAcceptMobRtr)); -+ dbg("HaAcceptMCoAReg = %s\n", CONF_BOOL_STR(c->HaAcceptMCoAReg)); - - /* CN options */ - dbg("DoRouteOptimizationCN = %s\n", - CONF_BOOL_STR(c->DoRouteOptimizationCN)); - } -+ -+/* -+ * get_reliable_from_ifindex - return the reliability value -+ * from the interface index -+ * @iif: the interface index -+ */ -+int get_reliable_from_ifindex(int iif) -+{ -+ struct list_head *list; -+ -+ list_for_each(list, &conf.net_ifaces) { -+ struct net_iface *nif; -+ nif = list_entry(list, struct net_iface, list); -+ if (nif->ifindex == iif) { -+ if (is_if_mn(nif)) -+ return nif->mn_if_reliable; -+ return -1; -+ } -+ } -+ return -1; -+} -+ -+/* -+ * get_bid_from_ifindex - return the bid from the interface index -+ * @iif: the interface index -+ */ -+uint16_t get_bid_from_ifindex(int iif) -+{ -+ struct list_head *list; -+ -+ list_for_each(list, &conf.net_ifaces) { -+ struct net_iface *nif; -+ nif = list_entry(list, struct net_iface, list); -+ if (nif->ifindex == iif) { -+ if (is_if_mn(nif)) -+ return nif->mn_if_bid; -+ return 0; -+ } -+ } -+ return 0; -+} -+ -+/* -+ * get_prio_from_bid - return the priority from the bid -+ * @bid: the bid of the interface -+ */ -+uint8_t get_prio_from_bid(uint16_t bid) -+{ -+ struct list_head *list; -+ -+ list_for_each(list, &conf.net_ifaces) { -+ struct net_iface *nif; -+ nif = list_entry(list, struct net_iface, list); -+ if (nif->mn_if_bid == bid) { -+ if (is_if_mn(nif)) -+ return nif->mn_if_bidprio; -+ return 0; -+ } -+ } -+ return 0; -+} -+ -+/* -+ * get_highest_prio - return the highest BID priority from the -+ * interface list -+ */ -+uint8_t get_highest_prio() -+{ -+ struct list_head *list; -+ int priority = 0; -+ -+ list_for_each(list, &conf.net_ifaces) { -+ struct net_iface *nif; -+ nif = list_entry(list, struct net_iface, list); -+ if (nif->mn_if_bidprio >= priority) -+ priority = nif->mn_if_bidprio; -+ } -+ return priority; -+} -+ -diff -r 82fcd4bea972 src/conf.h ---- a/src/conf.h Fri Jan 11 16:55:08 2008 +0100 -+++ b/src/conf.h Fri Jan 11 17:02:25 2008 +0100 -@@ -48,6 +48,7 @@ struct mip6_config { - - /* HA options */ - char HaAcceptMobRtr; -+ char HaAcceptMCoAReg; - char SendMobPfxAdvs; - char SendUnsolMobPfxAdvs; - unsigned int MaxMobPfxAdvInterval; -@@ -66,6 +67,9 @@ struct net_iface { - int is_rtr; - int mip6_if_entity; - int mn_if_preference; -+ uint16_t mn_if_bid; -+ uint8_t mn_if_bidprio; -+ int mn_if_reliable; - }; - - extern struct mip6_config conf; -@@ -119,6 +123,11 @@ int conf_parse(struct mip6_config *c, in - - void conf_show(struct mip6_config *c); - -+int get_reliable_from_ifindex(int iif); -+uint16_t get_bid_from_ifindex(int iif); -+uint8_t get_prio_from_bid(uint16_t bid); -+uint8_t get_highest_prio(); -+ - int yyparse(void); - - int yylex(void); -diff -r 82fcd4bea972 src/dhaad_mn.c ---- a/src/dhaad_mn.c Fri Jan 11 16:55:08 2008 +0100 -+++ b/src/dhaad_mn.c Fri Jan 11 17:02:25 2008 +0100 -@@ -120,8 +120,9 @@ static void dhaad_resend(struct tq_elem - pthread_rwlock_unlock(&mn_lock); - return; - } -- t->dhaad_id = dhaad_send_request(hai->primary_coa.iif, -- &hai->primary_coa.addr, -+ assert(hai->current_coa); -+ t->dhaad_id = dhaad_send_request(hai->current_coa->iif, -+ &hai->current_coa->addr, - &hai->home_prefix, - hai->home_plen, - hai->mob_rtr? -@@ -146,8 +147,9 @@ static void _dhaad_start(struct home_add - if (hai->mob_rtr && !(hai->home_block & NEMO_RA_BLOCK)) - xfrm_block_ra(hai); - t->dhaad_resends = 0; -- t->dhaad_id = dhaad_send_request(hai->primary_coa.iif, -- &hai->primary_coa.addr, -+ assert(hai->current_coa); -+ t->dhaad_id = dhaad_send_request(hai->current_coa->iif, -+ &hai->current_coa->addr, - &hai->home_prefix, - hai->home_plen, - hai->mob_rtr? -diff -r 82fcd4bea972 src/gram.y ---- a/src/gram.y Fri Jan 11 16:55:08 2008 +0100 -+++ b/src/gram.y Fri Jan 11 17:02:25 2008 +0100 -@@ -47,15 +47,20 @@ - #include "util.h" - #include "ipsec.h" - #include "rtnl.h" -+#include "bul.h" - - struct net_iface ni = { - .mip6_if_entity = MIP6_ENTITY_NO, - .mn_if_preference = POL_MN_IF_DEF_PREFERENCE, -+ .mn_if_bid = POL_MN_IF_DEF_BID, -+ .mn_if_bidprio = POL_MN_IF_DEF_BID_PRIORITY, -+ .mn_if_reliable = POL_MN_IF_DEF_RELIABLE - }; - - struct home_addr_info hai = { - .ro_policies = LIST_HEAD_INIT(hai.ro_policies), -- .mob_net_prefixes = LIST_HEAD_INIT(hai.mob_net_prefixes) -+ .mob_net_prefixes = LIST_HEAD_INIT(hai.mob_net_prefixes), -+ .mcoa = LIST_HEAD_INIT(hai.mcoa) - }; - - LIST_HEAD(prefixes); -@@ -185,6 +190,14 @@ static void uerror(const char *fmt, ...) - %token ISMOBRTR - %token HASERVEDPREFIX - %token MOBRTRUSEEXPLICITMODE -+%token HAACCEPTMCOAREG -+%token MCOAREG -+%token NOMCOAREG -+%token BID -+%token BIDPRIORITY -+%token RELIABLE -+%token REGMULTIPLECOA -+%token IFMULTIPLECOA - - %token INV_TOKEN - -@@ -197,6 +210,7 @@ static void uerror(const char *fmt, ...) - %type mnropolicyaddr - %type dorouteopt - %type bindaclpolval -+%type mcoapolval - %type prefixlen - %type mip6entity - %type xfrmaction -@@ -306,6 +320,10 @@ topdef : MIP6ENTITY mip6entity ';' - { - conf.HaAcceptMobRtr = $2; - } -+ | HAACCEPTMCOAREG BOOL ';' -+ { -+ conf.HaAcceptMCoAReg = $2; -+ } - | HASERVEDPREFIX prefixlistentry ';' - { - list_splice(&prefixes, -@@ -375,6 +393,9 @@ ifacedef : QSTRING ifacesub - memset(&ni, 0, sizeof(struct net_iface)); - ni.mip6_if_entity = MIP6_ENTITY_NO; - ni.mn_if_preference = POL_MN_IF_DEF_PREFERENCE; -+ ni.mn_if_bid = POL_MN_IF_DEF_BID; -+ ni.mn_if_bidprio = POL_MN_IF_DEF_BID_PRIORITY; -+ ni.mn_if_reliable = POL_MN_IF_DEF_RELIABLE; - } - ; - -@@ -392,7 +413,44 @@ ifaceopt : IFTYPE mip6entity ';' - } - | MNIFPREFERENCE NUMBER ';' - { -- ni.mn_if_preference = $2; -+ if (ni.mn_if_bid) { -+ uerror("You cannot set MnIfPreference if BID " -+ "is set. Use BidPriority instead."); -+ return -1; -+ } -+ ni.mn_if_preference = $2; -+ } -+ | BID NUMBER ';' -+ { -+ if (ni.mn_if_preference) { -+ uerror("If BID is set, you cannot set " -+ "MnIfPreference. Use BidPriority instead."); -+ return -1; -+ } -+ if ($2 < BULE_TABLE_MIN || $2 > BULE_TABLE_MAX) { -+ uerror("BID error (%d <= Bid <= %d)", -+ BULE_TABLE_MIN, BULE_TABLE_MAX); -+ return -1; -+ } -+ ni.mn_if_bid = $2; -+ } -+ | BIDPRIORITY NUMBER ';' -+ { -+ if (ni.mn_if_preference) { -+ uerror("You cannot set BidPriority if " -+ "MnIfPreference is set."); -+ return -1; -+ } -+ if ($2 < 1 || $2 > 255) { -+ uerror("BidPriotity error " -+ "(%d <= BidPriority <= %d)",1, 255); -+ return -1; -+ } -+ ni.mn_if_bidprio = $2; -+ } -+ | RELIABLE BOOL ';' -+ { -+ ni.mn_if_reliable = $2; - } - ; - -@@ -432,15 +490,28 @@ linksub : QSTRING '{' linkdefs '}' - INIT_LIST_HEAD(&nhai->ro_policies); - INIT_LIST_HEAD(&nhai->ha_list.home_agents); - INIT_LIST_HEAD(&nhai->mob_net_prefixes); -+ INIT_LIST_HEAD(&nhai->mcoa); - nhai->ha_list.dhaad_id = -1; - list_splice(&hai.ro_policies, &nhai->ro_policies); - list_splice(&hai.mob_net_prefixes, - &nhai->mob_net_prefixes); -+ list_splice(&hai.mcoa, &nhai->mcoa); -+ if (!hai.reg_mcoa) { -+ /* If MCoA registration is not used, we -+ * initialize nhai->current_coa -+ */ -+ nhai->current_coa = malloc(sizeof(struct mn_addr)); -+ if (nhai->current_coa == NULL) { -+ uerror("out of memory"); -+ return -1; -+ } -+ } - list_add_tail(&nhai->list, &conf.home_addrs); - - memset(&hai, 0, sizeof(struct home_addr_info)); - INIT_LIST_HEAD(&hai.ro_policies); - INIT_LIST_HEAD(&hai.mob_net_prefixes); -+ INIT_LIST_HEAD(&hai.mcoa); - } - ; - -@@ -468,6 +539,11 @@ linkdef : HOMEAGENTADDRESS ADDR ';' - ipv6_addr_prefix(&hai.home_prefix, &$2, $4); - hai.home_plen = $4; - } -+ | REGMULTIPLECOA BOOL ';' -+ { -+ hai.reg_mcoa = $2; -+ } -+ | IFMULTIPLECOA iflist ';' - ; - - homeaddress : homeaddrdef prefixlistsub -@@ -695,7 +771,12 @@ bindaclpolval : BOOL - | NUMBER { $$ = $1; } - ; - --bindaclpolicy : ADDR prefixlistsub bindaclpolval -+mcoapolval : MCOAREG { $$ = 1; } -+ | NOMCOAREG { $$ = 0; } -+ | '' { $$ = 0; } -+ ; -+ -+bindaclpolicy : ADDR prefixlistsub mcoapolval bindaclpolval - { - bae = malloc(sizeof(struct policy_bind_acl_entry)); - if (bae == NULL) { -@@ -707,7 +788,8 @@ bindaclpolicy : ADDR prefixlistsub binda - bae->plen = 128; - INIT_LIST_HEAD(&bae->mob_net_prefixes); - bae->mnp_count = mv_prefixes(&bae->mob_net_prefixes); -- bae->bind_policy = $3; -+ bae->mcoa_reg = $3; -+ bae->bind_policy = $4; - list_add_tail(&bae->list, &conf.bind_acl); - } - ; -@@ -745,4 +827,58 @@ prefixlistentry : ADDR '/' prefixlen - list_add_tail(&p->list, &prefixes); - } - ; -+ -+iflist : iflistentry -+ | iflist ',' iflistentry -+ ; -+ -+iflistentry : QSTRING -+ { -+ struct mn_addr *mncoa; -+ struct list_head *l; -+ int declared = 0, bid = 0; -+ -+ /* Check that this interface has been -+ * previously declared as "Interface" */ -+ list_for_each(l, &conf.net_ifaces) { -+ struct net_iface *ni; -+ ni = list_entry(l, struct net_iface, -+ list); -+ -+ if(if_nametoindex($1) == ni->ifindex) { -+ declared = 1; -+ bid = ni->mn_if_bid; -+ break; -+ } -+ } -+ -+ if(!declared) { -+ uerror("Interface %s has not been " -+ "declared as Interface\n", $1); -+ return -1; -+ } -+ -+ if(!bid) { -+ uerror("Interface %s has no BID " -+ "although you declared it in " -+ "IfMultipleCoA\n", $1); -+ return -1; -+ } -+ -+ mncoa = malloc(sizeof(struct mn_addr)); -+ if (mncoa == NULL) { -+ fprintf(stderr, "%s: out of memory\n", -+ __FUNCTION__); -+ return -1; -+ } -+ memset(mncoa, 0, sizeof(struct mn_addr)); -+ if ((mncoa->iif = if_nametoindex($1)) == 0) { -+ fprintf(stderr, "%s: %s is not a valid " -+ "interface name\n", __FUNCTION__, $1); -+ return -1; -+ } -+ free($1); -+ list_add_tail(&mncoa->list, &hai.mcoa); -+ } -+ ; - %% -diff -r 82fcd4bea972 src/ha.c ---- a/src/ha.c Fri Jan 11 16:55:08 2008 +0100 -+++ b/src/ha.c Fri Jan 11 17:02:25 2008 +0100 -@@ -59,6 +59,14 @@ - #include "xfrm.h" - #include "ndisc.h" - #include "prefix.h" -+ -+#define HA_DEBUG_LEVEL 1 -+ -+#if HA_DEBUG_LEVEL >= 1 -+#define MDBG dbg -+#else -+#define MDBG(...) -+#endif /* MDBG */ - - static pthread_mutex_t bu_worker_mutex; - static volatile unsigned long bu_worker_count = 0; -@@ -504,7 +512,7 @@ static int ha_vt_init(void) - - static void nemo_ha_del_mnp_routes(struct list_head *old_mnps, - struct list_head *new_mnps, -- int ifindex, int all) -+ int table, int ifindex, int all) - { - struct list_head *list; - list_for_each(list, old_mnps) { -@@ -514,14 +522,22 @@ static void nemo_ha_del_mnp_routes(struc - prefix_list_find(new_mnps, &p->ple_prefix, p->ple_plen)) - continue; - -- route_del(ifindex, RT6_TABLE_MIP6, IP6_RT_PRIO_MIP6_FWD, -+ route_del(ifindex, table, IP6_RT_PRIO_MIP6_FWD, - NULL, 0, &p->ple_prefix, p->ple_plen, NULL); -+ -+ /* MCoA -+ * Delete the MNP fwmark rule -+ */ -+ if(table != RT6_TABLE_MIP6) -+ rule_del(NULL, table, IP6_RULE_PRIO_MIP6_FWD_FWM, -+ table, RTN_UNICAST, &in6addr_any, 0, -+ &p->ple_prefix, p->ple_plen, 0); - } - } - - static int nemo_ha_add_mnp_routes(struct list_head *old_mnps, - struct list_head *new_mnps, -- int ifindex, int all) -+ int table, int ifindex, int all) - { - struct list_head *list; - list_for_each(list, new_mnps) { -@@ -530,11 +546,89 @@ static int nemo_ha_add_mnp_routes(struct - if (!all && - prefix_list_find(old_mnps, &p->ple_prefix, p->ple_plen)) - continue; -- if (route_add(ifindex, RT6_TABLE_MIP6, RTPROT_MIP, -+ if (route_add(ifindex, table, RTPROT_MIP, - 0, IP6_RT_PRIO_MIP6_FWD, - NULL, 0, &p->ple_prefix, p->ple_plen, NULL) < 0) - return -1; -+ /* MCoA -+ * Add the MNP fwmark rule -+ */ -+ if(table != RT6_TABLE_MIP6 -+ && rule_add(NULL, table, IP6_RULE_PRIO_MIP6_FWD_FWM, -+ table, RTN_UNICAST, &in6addr_any, 0, -+ &p->ple_prefix, p->ple_plen, 0) < 0) -+ return -1; - } -+ return 0; -+} -+ -+static int mcoa_ha_init_rt_table(struct bcentry *bce) -+{ -+ /* MCoA TODO2 -+ * At the moment, the routing table number is the BID number. -+ * BID thus must be between BCE_TABLE_MIN and BCE_TABLE_MAX -+ */ -+ assert(bce); -+ -+ /* If BID is not assigned, default table is taken */ -+ if (!bce->bid) -+ return (bce->table = RT6_TABLE_MIP6); -+ -+ if (bce->bid >= BCE_TABLE_MIN && bce->bid <= BCE_TABLE_MAX) -+ return (bce->table = bce->bid); -+ -+ return -1; -+} -+ -+static int mcoa_ha_del_dflt_rules(struct bcentry *bce) -+{ -+ struct list_head *list; -+ struct prefix_list_entry *pfx; -+ struct bcentry *best_bce = bce; -+ const struct in6_addr *peer_addr = &bce->peer_addr; -+ int8_t priority = 0; -+ -+ MDBG("Current BCE has the best priority (%d), " -+ "erasing default rules\n", best_bce->priority); -+ -+ /* Erase the default HoA rule */ -+ rule_del(NULL, 0, IP6_RULE_PRIO_MIP6_FWD_MCOA, 0, -+ RTN_UNICAST, &in6addr_any, 0, peer_addr, 128, 0); -+ -+ /* Erase the default MNP rules */ -+ list_for_each(list, &bce->mob_net_prefixes) { -+ pfx = list_entry(list, struct prefix_list_entry, list); -+ rule_del(NULL, 0, IP6_RULE_PRIO_MIP6_FWD_MCOA, 0, -+ RTN_UNICAST, &in6addr_any, 0, -+ &pfx->ple_prefix, pfx->ple_plen, 0); -+ } -+ -+ /* Create new rule with next best bce available */ -+ priority = bce->priority; -+ bce->priority = 0; -+ bcache_iterate_in(&bce->peer_addr, bce_highest_priority, -+ &best_bce); -+ bce->priority = priority; -+ -+ if(best_bce != bce) { -+ MDBG("Rules replaced with BCE prio %d\n", -+ best_bce->priority); -+ rule_add(NULL, best_bce->table, -+ IP6_RULE_PRIO_MIP6_FWD_MCOA, 0, RTN_UNICAST, -+ &in6addr_any, 0, peer_addr, 128, 0); -+ -+ /* Default prefix rules */ -+ list_for_each(list, &bce->mob_net_prefixes) { -+ pfx = list_entry(list, -+ struct prefix_list_entry, list); -+ rule_add(NULL, best_bce->table, -+ IP6_RULE_PRIO_MIP6_FWD_MCOA, 0, -+ RTN_UNICAST, &in6addr_any, 0, -+ &pfx->ple_prefix, pfx->ple_plen, 0); -+ } -+ } else -+ MDBG("No other BCE available, no dflt rules added\n"); -+ - return 0; - } - -@@ -544,10 +638,49 @@ struct home_tnl_ops_parm { - struct list_head mob_net_prefixes; - }; - -+static int mcoa_ha_add_dflt_rules(struct home_tnl_ops_parm *p) -+{ -+ struct list_head *list; -+ struct bcentry *bce = p->bce; -+ const struct in6_addr *peer_addr = &bce->peer_addr; -+ -+ MDBG("BCE has the best priority (%d), adding default HoA " -+ "and prefix rules\n", bce->priority); -+ -+ /* Erase the default HoA rule */ -+ rule_del(NULL, 0, IP6_RULE_PRIO_MIP6_FWD_MCOA, 0, -+ RTN_UNICAST, &in6addr_any, 0, peer_addr, 128, 0); -+ -+ /* Add the default HoA rule */ -+ if (rule_add(NULL, bce->table, -+ IP6_RULE_PRIO_MIP6_FWD_MCOA, 0, RTN_UNICAST, -+ &in6addr_any, 0, peer_addr, 128, 0) < 0) -+ return -1; -+ -+ /* Delete and add the default prefix rules */ -+ list_for_each(list, &p->mob_net_prefixes) { -+ struct prefix_list_entry *pfx; -+ pfx = list_entry(list, struct prefix_list_entry, list); -+ -+ rule_del(NULL, 0, IP6_RULE_PRIO_MIP6_FWD_MCOA, -+ 0, RTN_UNICAST, &in6addr_any, 0, -+ &pfx->ple_prefix, pfx->ple_plen, 0); -+ -+ if (rule_add(NULL, bce->table, -+ IP6_RULE_PRIO_MIP6_FWD_MCOA, 0, -+ RTN_UNICAST, &in6addr_any, 0, -+ &pfx->ple_prefix, pfx->ple_plen, 0) < 0) -+ return -1; -+ } -+ -+ return 0; -+} -+ - static int home_tnl_del(int old_if, int new_if, struct home_tnl_ops_parm *p) - { - const struct in6_addr *our_addr, *peer_addr, *coa, *old_coa; - struct list_head *mnp; -+ struct bcentry *best_bce = NULL; - - assert(old_if); - -@@ -565,12 +698,33 @@ static int home_tnl_del(int old_if, int - ha_ipsec_tnl_pol_del(our_addr, peer_addr, p->bce->tunnel, mnp); - } - /* delete HoA route */ -+ /* MCoA: The route is deleted in the table given by p->bce->table */ -+ /* RKRK: for the moment the route is installed in the MAIN table. -+ * See home_tnl_add */ -+ //MDBG("Deleting old default route in table %d\n", p->bce->table); -+ MDBG("Deleting old default route in table %d\n", RT6_TABLE_MAIN); -+ //route_del(old_if, p->bce->table, - route_del(old_if, RT6_TABLE_MAIN, - IP6_RT_PRIO_MIP6_FWD, NULL, 0, peer_addr, 128, NULL); -- -+ - /* delete MNP routes */ - nemo_ha_del_mnp_routes(&p->bce->mob_net_prefixes, -- &p->mob_net_prefixes, old_if, 1); -+ &p->mob_net_prefixes, p->bce->table, -+ old_if, 1); -+ /* MCoA -+ * Delete the HoA and fwmark rules, and if needed replace -+ * the default HoA and MNP rules with the best available one -+ */ -+ if(p->bce->table != RT6_TABLE_MIP6) { -+ rule_del(NULL, p->bce->table, IP6_RULE_PRIO_MIP6_FWD_FWM, -+ p->bce->table, RTN_UNICAST, &in6addr_any, 0, -+ peer_addr, 128, 0); -+ best_bce = p->bce; -+ bcache_iterate_in(&p->bce->peer_addr, -+ bce_highest_priority, &best_bce); -+ if(best_bce == p->bce) -+ mcoa_ha_del_dflt_rules(p->bce); -+ } - /* update tunnel interface */ - p->bce->tunnel = new_if; - -@@ -581,6 +735,7 @@ static int home_tnl_add(int old_if, int - { - const struct in6_addr *our_addr, *peer_addr, *coa, *old_coa; - struct list_head *mnp; -+ struct bcentry *best_bce = NULL; - - assert(new_if); - -@@ -596,7 +751,8 @@ static int home_tnl_add(int old_if, int - - /* add MNP routes */ - if (nemo_ha_add_mnp_routes(&p->bce->mob_net_prefixes, -- &p->mob_net_prefixes, new_if, 1) < 0) { -+ &p->mob_net_prefixes, p->bce->table, -+ new_if, 1) < 0) { - if (p->bce->nemo_type == BCE_NEMO_EXPLICIT) - p->ba_status = IP6_MH_BAS_INVAL_PRFX; - else -@@ -604,11 +760,38 @@ static int home_tnl_add(int old_if, int - goto err; - } - /* add HoA route */ -+ /* MCoA: The route is added in the table given by p->bce->table */ -+ /* RKRK: does not work. Route has to be added in the MAIN table. -+ * Need to check why! */ -+ //MDBG("Adding route in table %d via iface %d\n", p->bce->table, new_if); -+ MDBG("Adding route in table %d via iface %d\n", RT6_TABLE_MAIN, new_if); -+ //if (route_add(new_if, p->bce->table, - if (route_add(new_if, RT6_TABLE_MAIN, - RTPROT_MIP, 0, IP6_RT_PRIO_MIP6_FWD, - NULL, 0, peer_addr, 128, NULL) < 0) { - p->ba_status = IP6_MH_BAS_INSUFFICIENT; - goto err; -+ } -+ /* MCoA -+ * Add the HoA and fwmark rules, and if needed replace -+ * the default HoA and MNP rules with the best available one -+ */ -+ if (p->bce->table != RT6_TABLE_MIP6) { -+ if (rule_add(NULL, p->bce->table, -+ IP6_RULE_PRIO_MIP6_FWD_FWM, -+ p->bce->table, RTN_UNICAST, -+ &in6addr_any, 0, peer_addr, 128, 0) < 0) { -+ p->ba_status = IP6_MH_BAS_INSUFFICIENT; -+ goto err; -+ } -+ best_bce = p->bce; -+ bcache_iterate_in(&p->bce->peer_addr, -+ bce_highest_priority, &best_bce); -+ if(best_bce == p->bce -+ && mcoa_ha_add_dflt_rules(p) < 0) { -+ p->ba_status = IP6_MH_BAS_INSUFFICIENT; -+ goto err; -+ } - } - /* add SP entry */ - if (conf.UseMnHaIPsec) { -@@ -664,9 +847,11 @@ static int home_tnl_chg(int old_if, int - /* Do the same for routes */ - nemo_ha_del_mnp_routes(&p->bce->mob_net_prefixes, - &p->mob_net_prefixes, -+ p->bce->table, - old_if, 0); - if (nemo_ha_add_mnp_routes(&p->bce->mob_net_prefixes, - &p->mob_net_prefixes, -+ p->bce->table, - new_if, 0) < 0) { - if (p->bce->nemo_type == BCE_NEMO_EXPLICIT) - p->ba_status = IP6_MH_BAS_INVAL_PRFX; -@@ -707,12 +892,22 @@ static int home_tnl_ops(int request, int - - static void home_cleanup(struct bcentry *bce) - { -- mpd_cancel_mpa(&bce->our_addr, &bce->peer_addr); -+ int nb_entry = mcoa_bce_count(&bce->peer_addr); -+ -+ /* MCoA -+ * MPA is canceled if this is the last BCE entry -+ */ -+ if (nb_entry == 1) -+ mpd_cancel_mpa(&bce->our_addr, &bce->peer_addr); - - if (bce->link > 0) { -- route_del(bce->link, RT6_TABLE_MIP6, IP6_RT_PRIO_MIP6_OUT, -+ route_del(bce->link, bce->table, IP6_RT_PRIO_MIP6_OUT, - &bce->our_addr, 128, &bce->peer_addr, 128, NULL); -- proxy_nd_stop(bce->link, &bce->peer_addr, bce->flags); -+ /* MCoA -+ * Proxy ND is stopped if this is the last BCE entry -+ */ -+ if (nb_entry == 1) -+ proxy_nd_stop(bce->link, &bce->peer_addr, bce->flags); - } - if (bce->tunnel > 0) { - struct home_tnl_ops_parm p = { -@@ -724,6 +919,9 @@ static void home_cleanup(struct bcentry - if (conf.UseMnHaIPsec) { - ha_mn_ipsec_pol_mod(&bce->our_addr, &bce->peer_addr); - } -+ -+ /* MCoA: Freeing the BCE's MNPs list */ -+ prefix_list_free(&bce->mob_net_prefixes); - } - - -@@ -800,19 +998,28 @@ static void *ha_recv_bu_worker(void *var - { - struct ha_recv_bu_args *arg = varg; - struct in6_addr_bundle out; -- struct bcentry *bce; -+ struct bcentry *bce, *bce_exists; - struct timespec lft, tmp; -- int iif, status, new, home_ifindex; -- uint16_t bu_flags, seqno; -- uint8_t ba_flags; -+ int iif, status, status_bid, new, home_ifindex; -+ int update_dflt_table; -+ uint16_t bu_flags, seqno, bid; -+ uint8_t ba_flags, bid_priority, bid_flags; - struct home_tnl_ops_parm p; -+ struct ip6_mh_opt_bid *bid_opt; - - pthread_dbg("thread started"); - restart: - home_ifindex = 0; - new = 0; -+ bid = 0; -+ bid_priority = 0; -+ bid_flags = 0; -+ update_dflt_table = 0; - ba_flags = 0; -- lft = arg->lft; -+ status = IP6_MH_BAS_UNSPECIFIED; -+ status_bid = 0; -+ bce = NULL; -+ lft = arg->lft; - iif = arg->iif; - bu_flags = arg->bu->ip6mhbu_flags; - seqno = ntohs(arg->bu->ip6mhbu_seqno); -@@ -827,8 +1034,79 @@ restart: - else - out.bind_coa = NULL; - out.local_coa = NULL; -+ bid_opt = NULL; - -- bce = bcache_get(out.src, out.dst); -+ /* MCoA -+ * We check if a BCE already exists for this HoA -+ * We take the first one available -+ */ -+ bce_exists = bcache_get(out.src, out.dst, MCOA_NO_BID); -+ if(bce_exists) -+ bcache_release_entry(bce_exists); -+ -+ /* MCoA -+ * we need the BID before looking at the BCE -+ */ -+ bid_opt = mh_opt(&arg->bu->ip6mhbu_hdr, -+ &arg->mh_opts, -+ IP6_MHOPT_BID); -+ -+ if (bid_opt && !default_mcoa_reg(out.dst)) { -+ /* MCoA: BAck without BID option will be sent */ -+ MDBG("BUI option, but MCoA registration not allowed.\n"); -+ } else if (bid_opt) { -+ MDBG("BUI option, and HA is configured for MCoA.\n"); -+ bid = ntohs(bid_opt->ip6mobid_bid); -+ bid_priority = bid_opt->ip6mobid_priority; -+ bid_flags = ntohs(bid_opt->ip6mobid_reserved); -+ -+ if (!bid) { -+ MDBG("BID invalid, BU discarded.\n"); -+ goto out; -+ } -+ -+ MDBG("BID = %d, Priority = %d\n", bid, bid_priority); -+ /* MCoA TODO1 -+ * if B flag is set but no altcoa option: -+ * BAck status 145. -+ * To update according to latest draft. -+ */ -+ if (bid_flags & IP6_OPT_BID_BULK) { -+ /* MCoA TODO1 -+ * At the moment we do not check the AltCoA option, -+ * and just reject the BU if B flag is set -+ */ -+ MDBG("BULK Reg., but not supported yet.\n"); -+ status = IP6_MH_BAS_MCOA_BULK_FAILED; -+ goto send_nack; -+ } -+ if (bce_exists && !bce_exists->bid) { -+ /* MCoA -+ * The BCE has a BID = 0, this means no MCoA -+ * are registered. We delete the entry and set -+ * BA status to 144. -+ * New registratration is done later -+ */ -+ MDBG("BID option but BCE has no BID\n"); -+ MDBG("Delete BCE and register new one.\n"); -+ bcache_delete(out.src, out.dst, MCOA_NO_BID); -+ status_bid = IP6_MH_BAS_CONFLICT_BINDING; -+ } -+ } else /* No BUI option in BU */ { -+ if(tsisset(lft) && bce_exists && bce_exists->bid) { -+ /* MCoA -+ * A BCE exists with a BID != 0 but no BUI -+ * sub-option are set in the BU: we delete -+ * all existing entries for this HoA. New -+ * registration is done later. -+ */ -+ MDBG("No BID option but BCE has BID.\n"); -+ MDBG("Delete all BCE and register new one.\n"); -+ bcache_delete(out.src, out.dst, MCOA_NO_BID); -+ } -+ } -+ -+ bce = bcache_get(out.src, out.dst, bid); - if (bce) { - if (bce->type != BCE_NONCE_BLOCK) { - /* H-bit or R-bit mismatch, flags changed */ -@@ -873,7 +1151,7 @@ restart: - goto send_nack; - } - /* else get rid of it */ -- bcache_delete(out.src, out.dst); -+ bcache_delete(out.src, out.dst, bid); - } - } else if (!tsisset(lft)) { - status = IP6_MH_BAS_NOT_HA; -@@ -895,6 +1173,10 @@ restart: - out.src, arg->bu, arg->len); - if (status >= IP6_MH_BAS_UNSPECIFIED) - goto send_nack; -+ -+ if(status_bid) -+ status = status_bid; -+ - /* lifetime may be further decreased by local policy */ - if (conf.pmgr.max_binding_life(out.dst, out.bind_coa, out.src, - arg->bu, arg->len, &lft, &tmp)) { -@@ -916,24 +1198,38 @@ restart: - bce->type = BCE_DAD; - bce->cleanup = NULL; - bce->link = home_ifindex; -- -+ bce->bid = bid; -+ bce->priority = bid_priority; -+ if(bce_exists) -+ bce->xfrm_create = 0; -+ else -+ bce->xfrm_create = 1; -+ -+ /* MCoA: Initialize the routing table used by the BCE */ -+ if(mcoa_ha_init_rt_table(bce) < 0) { -+ free(bce); -+ bce = NULL; -+ status = IP6_MH_BAS_INSUFFICIENT; -+ goto send_nack; -+ } - if (bcache_add_homereg(bce) < 0) { - free(bce); - bce = NULL; - status = IP6_MH_BAS_INSUFFICIENT; - goto send_nack; - } -- if (!(arg->flags & HA_BU_F_SKIP_DAD)) { -+ /* MCoA: Do DAD only if no entries yet for this HoA */ -+ if (!(arg->flags & HA_BU_F_SKIP_DAD) && !bce_exists) { - /* Do DAD for home address */ - if (ndisc_do_dad(home_ifindex, out.dst, - bu_flags & IP6_MH_BU_LLOCAL) < 0) { -- bcache_delete(out.src, out.dst); -+ bcache_delete(out.src, out.dst, bid); - bce = NULL; - status = IP6_MH_BAS_DAD_FAILED; - goto send_nack; - } - } -- bce = bcache_get(out.src, out.dst); -+ bce = bcache_get(out.src, out.dst, bid); - if (!bce) { - BUG("BCE deleted before DAD completed!"); - status = IP6_MH_BAS_UNSPECIFIED; -@@ -965,6 +1261,7 @@ restart: - bce->seqno = seqno; - bce->flags = bu_flags; - bce->lifetime = lft; -+ - if (new) { - if (tunnel_add(out.src, out.bind_coa, 0, - home_tnl_ops, &p) < 0) { -@@ -979,7 +1276,8 @@ restart: - - bce->cleanup = home_cleanup; - -- if (route_add(bce->link, RT6_TABLE_MIP6, -+ /* MCoA: The route is added in the table given by the BCE */ -+ if (route_add(bce->link, bce->table, - RTPROT_MIP, 0, IP6_RT_PRIO_MIP6_OUT, - &bce->our_addr, 128, &bce->peer_addr, 128, - NULL) < 0) { -@@ -987,16 +1285,23 @@ restart: - goto send_nack; - } - -- if (proxy_nd_start(bce->link, out.dst, out.src, -- bu_flags) < 0) { -- status = IP6_MH_BAS_INSUFFICIENT; -- goto send_nack; -+ /* MCoA: Do Proxy ND only if no entries yet for this HoA */ -+ if (!bce_exists) { -+ if (proxy_nd_start(bce->link, out.dst, -+ out.src, bu_flags) < 0) { -+ status = IP6_MH_BAS_INSUFFICIENT; -+ goto send_nack; -+ } - } - bce->type = BCE_HOMEREG; - bcache_complete_homereg(bce); - } else { - bce->old_coa = bce->coa; - bce->coa = *out.bind_coa; -+ if (tsisset(lft)) { -+ bce->bid = bid; -+ bce->priority = bid_priority; -+ } - if (tunnel_mod(bce->tunnel, out.src, out.bind_coa, 0, - home_tnl_ops, &p) < 0) { - if (p.ba_status >= IP6_MH_BAS_UNSPECIFIED) -@@ -1006,15 +1311,24 @@ restart: - goto send_nack; - } - /* Now update the MNP list in the BCE */ -- prefix_list_free(&bce->mob_net_prefixes); -- list_splice(&p.mob_net_prefixes, &bce->mob_net_prefixes); -- -+ /* MCoA: the update is done only if this is not a -+ * deregistration BU, otherwise MNPs are erased from the BCE -+ * (the dereg BU does not have any MNP option), thus there -+ * is a problem to update the fwmark MNP rules -+ */ -+ if (tsisset(lft)) { -+ prefix_list_free(&bce->mob_net_prefixes); -+ list_splice(&p.mob_net_prefixes, &bce->mob_net_prefixes); -+ } - bcache_update_expire(bce); - } - /* bce is always valid here */ - bcache_release_entry(bce); - if (!tsisset(lft)) -- bcache_delete(out.src, out.dst); -+ /* MCoA: We delete one specific entry (bid is set) -+ * or all entries for this HoA (if bid is set to 0) -+ */ -+ bcache_delete(out.src, out.dst, bid); - - if ((bu_flags & IP6_MH_BU_KEYM) && - conf.pmgr.use_keymgm(out.dst, out.src)) -@@ -1035,12 +1349,16 @@ restart: - * have a binding before sending this Binding Update, - * discard the connections to the home address. */ - } -- if (status < IP6_MH_BAS_UNSPECIFIED && bu_flags & IP6_MH_BU_MR) -+ if ((status < IP6_MH_BAS_UNSPECIFIED -+ || status == IP6_MH_BAS_CONFLICT_BINDING) -+ && bu_flags & IP6_MH_BU_MR) - ba_flags |= IP6_MH_BA_MR; - - if (!(arg->flags & HA_BU_F_SKIP_BA)) -- mh_send_ba(&out, status, ba_flags, seqno, &lft, NULL, iif); -- if (new && tsisset(lft)) -+ mh_send_ba(&out, status, ba_flags, seqno, &lft, -+ bid, bid_priority, NULL, iif); -+ /* MCoA: Start MPA only if no entries yet for this HoA */ -+ if (!bce_exists && new && tsisset(lft)) - mpd_start_mpa(&bce->our_addr, &bce->peer_addr); - out: - free(arg); -@@ -1060,10 +1378,12 @@ send_nack: - send_nack: - if (bce) { - bcache_release_entry(bce); -- bcache_delete(out.src, out.dst); -+ bcache_delete(out.src, out.dst, bid); - } - if (!(arg->flags & HA_BU_F_SKIP_BA)) -- mh_send_ba_err(&out, status, 0, seqno, NULL, iif); -+ /* MCoA: Specify the BID and BID priority to the BAck */ -+ mh_send_ba_err(&out, status, 0, seqno, bid, -+ bid_priority, NULL, iif); - goto out; - } - -@@ -1089,12 +1409,13 @@ int ha_recv_bu_main(const struct ip6_mh - - arg = malloc(sizeof(struct ha_recv_bu_args) + len); - if (!arg) { -- if (bce_exists(out.src, out.dst)) -- bcache_delete(out.src, out.dst); -+ if (bce_exists(out.src, out.dst, MCOA_NO_BID)) -+ bcache_delete(out.src, out.dst, MCOA_NO_BID); - - if (!(arg->flags & HA_BU_F_SKIP_BA)) - mh_send_ba_err(&out, IP6_MH_BAS_INSUFFICIENT, 0, -- ntohs(bu->ip6mhbu_seqno), NULL, iif); -+ ntohs(bu->ip6mhbu_seqno), 0, 0, -+ NULL, iif); - return -ENOMEM; - } - arg->src = *out.src; -@@ -1166,8 +1487,9 @@ int ha_init(void) - return -1; - if (mpd_ha_init() < 0) - return -1; -+ /* MCoA: Rule to the default table (RT6_TABLE_MIP6) */ - if (rule_add(NULL, RT6_TABLE_MIP6, -- IP6_RULE_PRIO_MIP6_FWD, RTN_UNICAST, -+ IP6_RULE_PRIO_MIP6_FWD, 0, RTN_UNICAST, - &in6addr_any, 0, &in6addr_any, 0, 0) < 0) - return -1; - icmp6_handler_reg(ND_ROUTER_ADVERT, &ha_ra_handler); -@@ -1185,7 +1507,7 @@ void ha_cleanup(void) - pthread_mutex_unlock(&bu_worker_mutex); - bcache_flush(); - rule_del(NULL, RT6_TABLE_MIP6, -- IP6_RULE_PRIO_MIP6_FWD, RTN_UNICAST, -+ IP6_RULE_PRIO_MIP6_FWD, 0, RTN_UNICAST, - &in6addr_any, 0, &in6addr_any, 0, 0); - mpd_ha_cleanup(); - dhaad_ha_cleanup(); -diff -r 82fcd4bea972 src/hash.c ---- a/src/hash.c Fri Jan 11 16:55:08 2008 +0100 -+++ b/src/hash.c Fri Jan 11 17:02:25 2008 +0100 -@@ -47,6 +47,7 @@ struct hash_entry { - struct hash_entry { - struct in6_addr *our_addr; /* pointer to our_addr in data */ - struct in6_addr *peer_addr; /* pointer to peer_addr in data */ -+ uint16_t *bid; /* pointer to bid in data, can be NULL */ - struct hash_entry *next; - void *data; - }; -@@ -78,7 +79,7 @@ static uint32_t calc_hash1(int s, const - } - - static int match2(struct hash_entry *h, const struct in6_addr *our_addr, -- const struct in6_addr *peer_addr) -+ const struct in6_addr *peer_addr, uint16_t bid) - { - assert(h); - assert(our_addr && h->our_addr); -@@ -89,9 +90,15 @@ static int match2(struct hash_entry *h, - printf("h->peer %s\n", inet_ntop(AF_INET6, h->peer_addr, s, sizeof(s))); - printf("our_addr %s\n", inet_ntop(AF_INET6, our_addr, s, sizeof(s))); - printf("h->our_addr %s\n", inet_ntop(AF_INET6, h->our_addr, s, sizeof(s))); -+ printf("bid %d\n", bid); -+ if(h->bid != NULL) -+ printf("h->bid %d\n", *(h->bid)); -+ else -+ printf("h->bid is NULL\n"); - #endif - if (IN6_ARE_ADDR_EQUAL(h->peer_addr, peer_addr) && -- IN6_ARE_ADDR_EQUAL(h->our_addr, our_addr)) { -+ IN6_ARE_ADDR_EQUAL(h->our_addr, our_addr) && -+ (bid == 0 || (h->bid != NULL && bid == *(h->bid)))) { - return 1; - } - return 0; -@@ -99,7 +106,7 @@ static int match2(struct hash_entry *h, - } - - static int match1(struct hash_entry *h, const struct in6_addr *dummy, -- const struct in6_addr *peer_addr) -+ const struct in6_addr *peer_addr, uint16_t bid) - { - assert(h); - assert(h->peer_addr && peer_addr); -@@ -107,8 +114,14 @@ static int match1(struct hash_entry *h, - char s[INET6_ADDRSTRLEN]; - printf("match1: peer %s\n", inet_ntop(AF_INET6, peer_addr, s, sizeof(s))); - printf("h->peer %s\n", inet_ntop(AF_INET6, h->peer_addr, s, sizeof(s))); -+ printf("bid %d\n", bid); -+ if(h->bid != NULL) -+ printf("h->bid %d\n", *(h->bid)); -+ else -+ printf("h->bid is NULL\n"); - #endif -- if (!IN6_ARE_ADDR_EQUAL(h->peer_addr, peer_addr)) -+ if (!IN6_ARE_ADDR_EQUAL(h->peer_addr, peer_addr) || -+ (bid !=0 && h->bid != NULL && bid != *(h->bid))) - return 0; - return 1; - } -@@ -155,7 +168,8 @@ void hash_cleanup(struct hash *h) - - void *hash_get(const struct hash *h, - const struct in6_addr *our_addr, -- const struct in6_addr *peer_addr) -+ const struct in6_addr *peer_addr, -+ uint16_t bid) - { - struct hash_entry *hptr = NULL; - -@@ -165,7 +179,7 @@ void *hash_get(const struct hash *h, - hptr = h->hash_buckets[h->calc_hash(h->buckets, our_addr , peer_addr)]; - - while(hptr) { -- if (h->match(hptr, our_addr, peer_addr)) -+ if (h->match(hptr, our_addr, peer_addr, bid)) - return hptr->data; - hptr = hptr->next; - } -@@ -173,7 +187,8 @@ void *hash_get(const struct hash *h, - } - - int hash_add(const struct hash *h, void *data, -- struct in6_addr *our_addr, struct in6_addr *peer_addr) -+ struct in6_addr *our_addr, struct in6_addr *peer_addr, -+ uint16_t *bid) - { - struct hash_entry *hptr = NULL, *new; - uint32_t hash_ind; -@@ -185,17 +200,19 @@ int hash_add(const struct hash *h, void - assert(peer_addr); - - if ((new = (struct hash_entry *)malloc(sizeof(struct hash_entry))) == NULL) { -- dbg("out of memeory\n"); -+ dbg("out of memory\n"); - return -ENOMEM; - } - new->our_addr = our_addr; - new->peer_addr = peer_addr; - new->data = data; -+ new->bid = bid; - hash_ind = h->calc_hash(h->buckets, our_addr, peer_addr); - hptr = h->hash_buckets[hash_ind]; - if (hptr) { - while (hptr->next){ -- if (h->match(hptr, our_addr, peer_addr)) { -+ if (h->match(hptr, our_addr, peer_addr, -+ (bid) ? (*bid) : 0)) { - free(new); - return -EEXIST; - } -@@ -231,9 +248,35 @@ int hash_iterate(const struct hash *h, i - return 0; - } - -+int hash_iterate_in(const struct hash *h, -+ const struct in6_addr *peer_addr, -+ int (*func)(void *, void *), -+ void *arg) -+{ -+ int err = 0; -+ int i; -+ struct hash_entry *hptr, *nptr; -+ -+ assert(func); -+ -+ for (i=0; i < h->buckets; i++) { -+ if((hptr = h->hash_buckets[i]) != NULL) { -+ while(hptr) { -+ nptr = hptr->next; -+ if (IN6_ARE_ADDR_EQUAL(hptr->peer_addr, peer_addr) -+ && (err = func(hptr->data, arg))) -+ return err; -+ hptr = nptr; -+ } -+ } -+ } -+ return 0; -+} -+ - void hash_delete(const struct hash *h, - const struct in6_addr *our_addr, -- const struct in6_addr *peer_addr) -+ const struct in6_addr *peer_addr, -+ uint16_t bid) - { - struct hash_entry *hptr, *pptr, *head; - int hash_ind; -@@ -247,7 +290,7 @@ void hash_delete(const struct hash *h, - - pptr = hptr = head; - while (hptr) { -- if (h->match(hptr, our_addr, peer_addr)){ -+ if (h->match(hptr, our_addr, peer_addr, bid)){ - if (hptr != head) - pptr->next = hptr->next; - else { -diff -r 82fcd4bea972 src/hash.h ---- a/src/hash.h Fri Jan 11 16:55:08 2008 +0100 -+++ b/src/hash.h Fri Jan 11 17:02:25 2008 +0100 -@@ -20,7 +20,9 @@ struct hash { - int buckets; - int type; - uint32_t (*calc_hash)(int, const struct in6_addr *, const struct in6_addr *); -- int (*match)(struct hash_entry *, const struct in6_addr *, const struct in6_addr *); -+ int (*match)(struct hash_entry *, const struct in6_addr *, -+ const struct in6_addr *, uint16_t); -+ - struct hash_entry **hash_buckets; - }; - -@@ -37,19 +39,24 @@ int hash_init(struct hash *h, int type, - */ - void hash_cleanup(struct hash *h); - /* -- * Get data stored in a hash entry based on one or two addresses, depending on type of hash -+ * Get data stored in a hash entry based on one or two addresses and the bid, -+ * depending on type of hash. bid=0 means we do not use bid as a search key. - */ - void *hash_get(const struct hash *h, - const struct in6_addr *our_addr, -- const struct in6_addr *peer_addr) ; -+ const struct in6_addr *peer_addr, -+ uint16_t bid); - - /* Iterate through the hash and call func for every entry */ - - int hash_iterate(const struct hash *h, int (*func)(void *data, void *arg), void *arg); -+int hash_iterate_in(const struct hash *h, const struct in6_addr *peer_addr, -+ int (*func)(void *, void *), void *arg); - - /* Add a hash entry to hash */ - int hash_add(const struct hash *h, void *data, -- struct in6_addr *our_addr, struct in6_addr *peer_addr); -+ struct in6_addr *our_addr, struct in6_addr *peer_addr, -+ uint16_t *bid); - - /* - *Delete entry from hash -@@ -57,6 +64,7 @@ int hash_add(const struct hash *h, void - - void hash_delete(const struct hash *h, - const struct in6_addr *our_addr, -- const struct in6_addr *peer_addr); -+ const struct in6_addr *peer_addr, -+ uint16_t bid); - - #endif /* _HASH_H */ -diff -r 82fcd4bea972 src/mh.c ---- a/src/mh.c Fri Jan 11 16:55:08 2008 +0100 -+++ b/src/mh.c Fri Jan 11 17:02:25 2008 +0100 -@@ -77,6 +77,7 @@ int mh_opts_dup_ok[] = { - 0, /* Nonce Index */ - 0, /* Binding Auth Data */ - 1, /* Mobile Network Prefix */ -+ 1 /* Binding Unique Identifier */ - }; - - #define __MH_SENTINEL (IP6_MH_TYPE_MAX + 1) -@@ -443,6 +444,41 @@ int mh_create_opt_mob_net_prefix(struct - return 0; - } - -+/* MCoA -+ * mh_create_opt_bid - Create a Binding Unique Identifier Option -+ * MCoA TODO1: need to be adapted for BULK registration -+ */ -+int mh_create_opt_bid(struct iovec *iov, uint16_t bid, -+ uint8_t priority, uint8_t bid_flags) -+{ -+ int optlen = sizeof(struct ip6_mh_opt_bid); -+ struct ip6_mh_opt_bid *opt_bid; -+ uint8_t *data; -+ -+ iov->iov_base = malloc(optlen); -+ iov->iov_len = optlen; -+ -+ if (iov->iov_base == NULL) -+ return -ENOMEM; -+ -+ memset(iov->iov_base, 0, iov->iov_len); -+ data = (uint8_t *)iov->iov_base; -+ -+ opt_bid = (struct ip6_mh_opt_bid *)data; -+ -+ opt_bid->ip6mobid_type = IP6_MHOPT_BID; -+ opt_bid->ip6mobid_len = 4; -+ opt_bid->ip6mobid_bid = htons(bid); -+ opt_bid->ip6mobid_priority = priority; -+ opt_bid->ip6mobid_reserved |= bid_flags; -+ -+ data += sizeof(struct ip6_mh_opt_bid); -+ MDBG("BUI sub-option created with BID = %d and priority %d\n", -+ bid, priority); -+ -+ return 0; -+} -+ - static size_t mh_length(struct iovec *vec, int count) - { - size_t len = 0; -@@ -487,6 +523,9 @@ static int mh_try_pad(const struct iovec - case IP6_MHOPT_MOB_NET_PRFX: - pad = optpad(8, 4, len); /* 8n+4 */ - break; -+ case IP6_MHOPT_BID: -+ pad = optpad(2, 0, len); /* 2n */ -+ break; - } - if (pad > 0) { - create_opt_pad(&out[n++], pad); -@@ -497,9 +536,10 @@ static int mh_try_pad(const struct iovec - out[n].iov_base = in[m].iov_base; - n++; - } -- if (count == 1) { -+ if (count == 1 || len%8 != 0) { - pad = optpad(8, 0, len); - create_opt_pad(&out[n++], pad); -+ MDBG("Added %d bytes for padding\n", pad); - } - - return n; -@@ -984,11 +1024,14 @@ void mh_send_brr(struct in6_addr *mn_add - - void mh_send_ba(const struct in6_addr_bundle *addrs, uint8_t status, - uint8_t flags, uint16_t sequence, -- const struct timespec *lifetime, const uint8_t *key, int iif) -+ const struct timespec *lifetime, -+ const uint16_t bid, -+ const uint8_t priority, -+ const uint8_t *key, int iif) - { - int iovlen = 1; - struct ip6_mh_binding_ack *ba; -- struct iovec mh_vec[2]; -+ struct iovec mh_vec[3]; - - MDBG("status %d\n", status); - -@@ -1012,6 +1055,9 @@ void mh_send_ba(const struct in6_addr_bu - } - if (key) - mh_create_opt_auth_data(&mh_vec[iovlen++]); -+ /* MCoA: Create Binding Unique Identifier Option if needed */ -+ if (bid) -+ mh_create_opt_bid(&mh_vec[iovlen++], bid, priority, 0); - mh_send(addrs, mh_vec, iovlen, key, iif); - free_iov_data(mh_vec, iovlen); - } -@@ -1058,8 +1104,11 @@ int mh_bu_parse(struct ip6_mh_binding_up - return -1; - if (!IN6_ARE_ADDR_EQUAL(out_addrs->bind_coa, peer_addr)) { - /* check that there is no circular reference */ -- if (bce_exists(our_addr, out_addrs->bind_coa)) -+ if (bce_exists(our_addr, out_addrs->bind_coa, -+ MCOA_NO_BID)) { -+ MDBG("Circular reference found in BC\n"); - return -1; -+ } - tssetsec(*lifetime, ntohs(bu->ip6mhbu_lifetime) << 2); - } - } -diff -r 82fcd4bea972 src/mh.h ---- a/src/mh.h Fri Jan 11 16:55:08 2008 +0100 -+++ b/src/mh.h Fri Jan 11 17:02:25 2008 +0100 -@@ -10,7 +10,7 @@ - - /* If new types or options appear, these should be updated. */ - #define IP6_MH_TYPE_MAX IP6_MH_TYPE_BERROR --#define IP6_MHOPT_MAX IP6_MHOPT_MOB_NET_PRFX -+#define IP6_MHOPT_MAX IP6_MHOPT_BID - - struct in6_addr_bundle { - struct in6_addr *src; -@@ -43,14 +43,20 @@ void mh_send_ba(const struct in6_addr_bu - void mh_send_ba(const struct in6_addr_bundle *addrs, uint8_t status, - uint8_t flags, uint16_t sequence, - const struct timespec *lifetime, -+ const uint16_t bid, -+ const uint8_t priority, - const uint8_t *key, int iif); - - static inline void mh_send_ba_err(const struct in6_addr_bundle *addrs, - uint8_t status, uint8_t flags, -- uint16_t seqno, const uint8_t *key, int iif) -+ uint16_t seqno, -+ const uint16_t bid, -+ const uint8_t priority, -+ const uint8_t *key, int iif) - { - struct timespec zero = { 0, 0 }; -- mh_send_ba(addrs, status, flags, seqno, &zero, key, iif); -+ mh_send_ba(addrs, status, flags, seqno, &zero, -+ bid, priority, key, iif); - } - - void mh_send_be(struct in6_addr *dst, -@@ -78,6 +84,9 @@ struct list_head; - - int mh_create_opt_mob_net_prefix(struct iovec *iov, int mnp_count, - struct list_head *mnps); -+ -+int mh_create_opt_bid(struct iovec *iov, uint16_t bid, uint8_t priority, -+ uint8_t bid_flags); - - static inline void *mh_opt(const struct ip6_mh *mh, - const struct mh_options *mh_opts, uint8_t type) -diff -r 82fcd4bea972 src/mipv6.h ---- a/src/mipv6.h Fri Jan 11 16:55:08 2008 +0100 -+++ b/src/mipv6.h Fri Jan 11 17:02:25 2008 +0100 -@@ -23,6 +23,7 @@ - /* Constants below have no explicit names in the spec. */ - - #define MAX_BINDING_LIFETIME (0xffff << 2) /* seconds */ -+#define MCOA_NO_BID 0 /* BID is null */ - - /* Maximum time for a binding to be unused for CN to still send a BRR - * before the binding expires */ -diff -r 82fcd4bea972 src/mn.c ---- a/src/mn.c Fri Jan 11 16:55:08 2008 +0100 -+++ b/src/mn.c Fri Jan 11 17:02:25 2008 +0100 -@@ -35,6 +35,8 @@ - #include - #include - #include -+#include -+#include - - #include - #include -@@ -94,10 +96,44 @@ const struct timespec min_valid_bu_lifet - const struct timespec min_valid_bu_lifetime_ts = - { MIN_VALID_BU_LIFETIME, 0 }; - -+struct flag_hoa_args { -+ struct home_addr_info *target; -+ struct bulentry *bule; -+ int flag; -+}; -+ - static int pending_bas = 0; - - static void mn_send_home_bu(struct home_addr_info *hai); - static int mn_ext_tunnel_ops(int request, int old_if, int new_if, void *data); -+static int flag_hoa(struct ifaddrmsg *ifa, struct rtattr *rta_tb[], void *arg); -+static int mcoa_iface_rules_add(int iif, struct home_addr_info *hai); -+static struct bulentry* mcoa_iface_rules_del(int iif, -+ struct home_addr_info *hai, -+ int replace); -+static void mcoa_mn_rules_del(struct home_addr_info *hinfo); -+static int nemo_mr_rules_add(struct home_addr_info *hinfo); -+static void nemo_mr_rules_del(struct home_addr_info *hinfo); -+ -+static int mcoa_mn_init_rt_table(struct bulentry *bule) -+{ -+ /* MCoA TODO2 -+ * At the moment, the routing table number -+ * is the BID number. BID must be between -+ * BCE_TABLE_MIN and BCE_TABLE_MAX -+ */ -+ assert(bule); -+ -+ /* If BID is not assigned, default table is taken */ -+ if (!bule->bid) -+ return (bule->table = RT6_TABLE_MIP6); -+ -+ if (bule->bid >= BULE_TABLE_MIN && bule->bid <= BULE_TABLE_MAX) -+ return (bule->table = bule->bid); -+ -+ MDBG("Routing Table index is out of range"); -+ return -1; -+} - - static int mn_block_rule_del(struct home_addr_info *hai) - { -@@ -108,9 +144,9 @@ static int mn_block_rule_del(struct home - return ret; - } - -- if ((ret = rule_del(NULL, 0, IP6_RULE_PRIO_MIP6_BLOCK, RTN_BLACKHOLE, -- &hai->hoa.addr, 128, &in6addr_any, 0, -- FIB_RULE_FIND_SADDR)) < 0) -+ if ((ret = rule_del(NULL, 0, IP6_RULE_PRIO_MIP6_BLOCK, 0, -+ RTN_BLACKHOLE, &hai->hoa.addr, 128, &in6addr_any, -+ 0, FIB_RULE_FIND_SADDR)) < 0) - MDBG("failed to delete blackhole rule.\n"); - else - hai->home_block &= ~HOME_ADDR_RULE_BLOCK; -@@ -126,9 +162,9 @@ static int mn_block_rule_add(struct home - MDBG("blackhole is already set.\n"); - return ret; - } -- if ((ret = rule_add(NULL, 0, IP6_RULE_PRIO_MIP6_BLOCK, RTN_BLACKHOLE, -- &hai->hoa.addr, 128, &in6addr_any, 0, -- FIB_RULE_FIND_SADDR)) < 0) -+ if ((ret = rule_add(NULL, 0, IP6_RULE_PRIO_MIP6_BLOCK, -+ 0, RTN_BLACKHOLE, &hai->hoa.addr, 128, -+ &in6addr_any, 0, FIB_RULE_FIND_SADDR)) < 0) - MDBG("failed to add blackhole rule.\n"); - else - hai->home_block |= HOME_ADDR_RULE_BLOCK; -@@ -156,7 +192,10 @@ static void bule_invalidate(struct bulen - struct home_addr_info *hai = e->home; - struct in6_addr hoa, peer_addr; - int type = e->type; -+ int rules = e->rules; -+ int if_coa = e->if_coa; - uint16_t flags = e->flags; -+ uint16_t bid = e->bid; - - if (type != BUL_ENTRY) - return; -@@ -173,7 +212,7 @@ static void bule_invalidate(struct bulen - if (hai->at_home) - return; - -- e = create_bule(&hoa, &peer_addr); -+ e = create_bule(&hoa, &peer_addr, hai->reg_mcoa?bid:0); - - if (e == NULL) - return; -@@ -185,6 +224,19 @@ static void bule_invalidate(struct bulen - e->lifetime = NON_MIP_CN_LTIME_TS; - e->delay = NON_MIP_CN_LTIME_TS; - e->callback = bul_expire; -+ e->priority = get_prio_from_bid(e->bid); -+ e->mcoa_dereg = 0; -+ /* MCoA: No tunnels are linked to this BULE anymore */ -+ e->if_tunnel = 0; -+ /* MCoA: We prevent MIPL to install rules for this entry */ -+ e->rules = 1; -+ mcoa_mn_init_rt_table(e); -+ -+ /* MCoA: Erase rules corresponding to this BULE */ -+ /* TODO2: this should be done when bul is deleted */ -+ if(hai->reg_mcoa && rules) -+ mcoa_iface_rules_del(if_coa, hai, 1); -+ - if (bul_add(e) < 0) - bul_delete(e); - } -@@ -279,7 +331,10 @@ static void mn_recv_param_prob(const str - pthread_rwlock_wrlock(&mn_lock); - if (mn_rr_error_check(laddr, raddr, &addr)) - laddr = &addr; -- e = bul_get(NULL, laddr, raddr); -+ /* MCoA TODO1 -+ * All bule with same laddr, raddr should be invalidated -+ */ -+ e = bul_get(NULL, laddr, raddr, get_bid_from_ifindex(iif)); - if (e != NULL) { - if (e->flags & IP6_MH_BU_HOME) { - if (!conf.UseMnHaIPsec && -@@ -328,6 +383,19 @@ static int mn_send_bu_msg(struct bulentr - } - if (bule->flags & IP6_MH_BU_HOME) { - struct home_addr_info *hai = bule->home; -+ /* MCoA TODO1: to update according to latest draft -+ * Binding Unique Identifier Option -+ * For deregistration, BUI option is sent only -+ * when some specific entry needs to be deleted. -+ * If all entries are deleted, no need to send BUI -+ */ -+ if ((bu->ip6mhbu_lifetime || !bule->mcoa_dereg) -+ && hai->reg_mcoa && bule->bid -+ && mh_create_opt_bid(&iov[iov_ind++], bule->bid, -+ bule->priority, 0) < 0) { -+ free_iov_data(iov, iov_ind); -+ return -ENOMEM; -+ } - if (bule->flags & IP6_MH_BU_MR && bu->ip6mhbu_lifetime && - bule->home->mnp_count > 0 && conf.MobRtrUseExplicitMode && - mh_create_opt_mob_net_prefix(&iov[iov_ind++], -@@ -353,7 +421,29 @@ static int mn_send_bu_msg(struct bulentr - addrs.remote_coa = NULL; - addrs.bind_coa = &bule->coa; - -+ /* MCoA -+ * before sending BU, if !bule->rules then -+ * add rule from HoA to HA in table bule->table -+ * This to be able to send a BU if no rules are in -+ * the RPDB (eg. because of the Reliability option) -+ */ -+ if(bule->home->reg_mcoa && !bule->rules) -+ /* MCoA: Rule for HoA to HA from the MN */ -+ rule_add(NULL, bule->table, -+ IP6_RULE_PRIO_MIP6_HOA_OUT_MCOA, 0, RTN_UNICAST, -+ &bule->home->hoa.addr, 128, &bule->peer_addr, 128, -+ FIB_RULE_FIND_SADDR); -+ - ret = mh_send(&addrs, iov, iov_ind, bind_key, bule->if_coa); -+ -+ /* MCoA -+ * Delete the previously installed rule -+ */ -+ if(bule->home->reg_mcoa && !bule->rules) -+ rule_del(NULL, bule->table, -+ IP6_RULE_PRIO_MIP6_HOA_OUT_MCOA, 0, RTN_UNICAST, -+ &bule->home->hoa.addr, 128, &bule->peer_addr, 128, -+ FIB_RULE_FIND_SADDR); - - if (ret <= 0) - MDBG("mh_send failed ret: %d\n", ret); -@@ -363,15 +453,35 @@ static int mn_send_bu_msg(struct bulentr - return ret; - } - -+struct mn_addr *mcoa_get_current_coa(struct home_addr_info *hai, int iif) -+{ -+ struct list_head *l; -+ -+ if(!hai->reg_mcoa) -+ return hai->current_coa; -+ -+ list_for_each(l, &hai->mcoa) { -+ struct mn_addr *coa_entry; -+ coa_entry = list_entry(l, struct mn_addr, list); -+ if (coa_entry->iif == iif) -+ return coa_entry; -+ } -+ -+ return NULL; -+} -+ - static int mn_get_home_lifetime(struct home_addr_info *hai, -- struct timespec *lifetime, int dereg) -+ struct timespec *lifetime, -+ int iif, int dereg) - { - if (!hai->at_home && !dereg) { -- struct mn_addr *coa = &hai->primary_coa; -+ /* MCoA: Pick up the CoA from the correct iface */ -+ struct mn_addr *coa = mcoa_get_current_coa(hai, iif); - struct timespec now; - unsigned long coa_lft; - unsigned long hoa_lft; - -+ assert(coa); - clock_gettime(CLOCK_REALTIME, &now); - - coa_lft = mpd_curr_lft(&now, &coa->timestamp, -@@ -403,16 +513,20 @@ static int mn_get_ro_lifetime(struct hom - if (!hai->at_home && !dereg) { - struct bulentry *e; - -- e = bul_get(hai, NULL, &hai->ha_addr); -+ e = bul_get(hai, NULL, &hai->ha_addr, -+ hai->reg_mcoa? -+ get_bid_from_ifindex(hai->current_coa->iif) -+ :MCOA_NO_BID); - - if (e == NULL || !(e->flags & IP6_MH_BU_HOME)) { - MDBG("No valid home registration"); - } else { - struct timespec now; -- struct mn_addr *coa = &hai->primary_coa; -+ struct mn_addr *coa = hai->current_coa; - unsigned long coa_lft; - unsigned long home_lft; - -+ assert(coa); - clock_gettime(CLOCK_REALTIME, &now); - - coa_lft = mpd_curr_lft(&now, &coa->timestamp, -@@ -432,6 +546,21 @@ static int mn_get_ro_lifetime(struct hom - return 1; - } - -+/* MCoA -+ * Deregister a specific bule -+ */ -+static int mn_dereg_bule(struct bulentry *bule) -+{ -+ if (bule->type != NON_MIP_CN_ENTRY) { -+ bule->seq++; -+ bule->mcoa_dereg = 0; -+ tsclear(bule->lifetime); -+ mn_send_bu_msg(bule); -+ } -+ bul_delete(bule); -+ return 0; -+} -+ - static int mn_dereg(void *vbule, void *arg) - { - struct bulentry *bule = vbule; -@@ -445,7 +574,20 @@ static int mn_dereg(void *vbule, void *a - } - bule->seq++; - tsclear(bule->lifetime); -- mn_send_bu_msg(bule); -+ /* MCoA -+ * When a MN wants to deregister Multiple CoA, -+ * one BU is enough to deregister all the CoA -+ */ -+ if(bule->home->reg_mcoa && bule->mcoa_dereg) { -+ mn_send_bu_msg(bule); -+ /* MCoA -+ * Flag the other entries that match the -+ * peer address (to avoid sending multiple -+ * BUs) -+ */ -+ mcoa_bule_dereg(bule, 0); -+ } else if (!bule->home->reg_mcoa) -+ mn_send_bu_msg(bule); - } - bul_delete(bule); - return 0; -@@ -486,8 +628,9 @@ static int bu_lft_check(struct bulentry - int dereg; - - if (bule->flags & IP6_MH_BU_HOME) -- dereg = mn_get_home_lifetime(bule->home, &bule->lifetime, 0); -- else -+ dereg = mn_get_home_lifetime(bule->home, &bule->lifetime, -+ bule->if_coa, 0); -+ else - dereg = mn_get_ro_lifetime(bule->home, &bule->lifetime, - bule->dereg); - -@@ -544,6 +687,7 @@ static void bu_refresh(struct tq_elem *t - if (!task_interrupted()) { - struct bulentry *bule = tq_data(tqe, struct bulentry, tqe); - int expired; -+ int iif = bule->if_coa; - MDBG("Bul refresh type: %d\n", bule->type); - - clock_gettime(CLOCK_REALTIME, &bule->lastsent); -@@ -554,6 +698,10 @@ static void bu_refresh(struct tq_elem *t - - bule->seq++; - bule->callback = bu_resend; -+ /* MCoA : Check for interface reliability */ -+ if(bule->home->reg_mcoa -+ && get_reliable_from_ifindex(iif) == 0) -+ mcoa_iface_rules_del(iif, bule->home, 1); - pre_bu_bul_update(bule); - mn_send_bu_msg(bule); - -@@ -626,14 +774,53 @@ static int mv_hoa(struct ifaddrmsg *ifa, - return 0; - } - --int nemo_mr_tnl_routes_add(struct home_addr_info *hai, int ifindex) -+/* -+ * Copy home address between two interfaces -+ */ -+static int cp_hoa(struct ifaddrmsg *ifa, struct rtattr *rta_tb[], void *arg) -+{ -+ struct mv_hoa_args *mha = arg; -+ struct home_addr_info *hai = mha->target; -+ struct mn_addr *hoa = &hai->hoa; -+ int err; -+ struct timespec now; -+ uint32_t preferred = PREFIX_LIFETIME_INFINITE; -+ uint32_t valid = PREFIX_LIFETIME_INFINITE; -+ int plen = (mha->if_next == hai->if_tunnel ? 128 : hai->plen); -+ -+ clock_gettime(CLOCK_REALTIME, &now); -+ -+ if (hai->lladdr_comp && rta_tb[IFA_CACHEINFO] != NULL) { -+ struct ifa_cacheinfo *ci = RTA_DATA(rta_tb[IFA_CACHEINFO]); -+ mn_update_hoa_lifetime(hoa, &now, -+ ci->ifa_valid, ci->ifa_prefered); -+ valid = ci->ifa_valid; -+ preferred = ci->ifa_prefered; -+ } -+ if (mha->if_next == ifa->ifa_index) -+ return 0; -+ -+ MDBG("Copy HoA %x:%x:%x:%x:%x:%x:%x:%x/%d from iface %d to %d\n", -+ NIP6ADDR(&hoa->addr), plen, ifa->ifa_index, mha->if_next); -+ -+ err = addr_add(&hoa->addr, plen, -+ ifa->ifa_flags|IFA_F_HOMEADDRESS, -+ ifa->ifa_scope, mha->if_next, preferred, valid); -+ if (err < 0) -+ return err; -+ -+ return 0; -+} -+ -+int nemo_mr_tnl_routes_add(struct home_addr_info *hai, -+ int ifindex, int rtable) - { - struct list_head *l; - struct prefix_list_entry *pe; - list_for_each(l, &hai->mob_net_prefixes) { - struct prefix_list_entry *p; - p = list_entry(l, struct prefix_list_entry, list); -- if (route_add(ifindex, RT6_TABLE_MIP6, RTPROT_MIP, -+ if (route_add(ifindex, rtable, RTPROT_MIP, - 0, IP6_RT_PRIO_MIP6_FWD, - &p->ple_prefix, p->ple_plen, - &in6addr_any, 0, NULL) < 0) { -@@ -646,7 +833,7 @@ undo: - list_for_each(l, &hai->mob_net_prefixes) { - struct prefix_list_entry *p; - p = list_entry(l, struct prefix_list_entry, list); -- route_del(ifindex, RT6_TABLE_MIP6, IP6_RT_PRIO_MIP6_FWD, -+ route_del(ifindex, rtable, IP6_RT_PRIO_MIP6_FWD, - &p->ple_prefix, p->ple_plen, &in6addr_any, 0, NULL); - if (p == pe) - break; -@@ -654,44 +841,47 @@ undo: - return -1; - } - --static int mn_tnl_state_add(struct home_addr_info *hai, int ifindex, int all) -+static int mn_tnl_state_add(struct home_addr_info *hai, -+ int ifindex, int all, int rtable) - { - int err = 0; - if (hai->home_reg_status != HOME_REG_NONE) { - if ((err = mn_ro_pol_add(hai, ifindex, all)) < 0) - return err; -- if ((err = route_add(ifindex, RT6_TABLE_MIP6, RTPROT_MIP, 0, -+ if ((err = route_add(ifindex, rtable, RTPROT_MIP, 0, - IP6_RT_PRIO_MIP6_OUT, &in6addr_any, 0, - &in6addr_any, 0, NULL)) < 0) { - mn_ro_pol_del(hai, ifindex, all); - } - } - if (hai->mob_rtr && -- (err = nemo_mr_tnl_routes_add(hai, ifindex)) < 0) { -- route_del(ifindex, RT6_TABLE_MIP6, IP6_RT_PRIO_MIP6_OUT, -+ (err = nemo_mr_tnl_routes_add(hai, ifindex, rtable)) < 0) { -+ route_del(ifindex, rtable, IP6_RT_PRIO_MIP6_OUT, - &hai->hoa.addr, 128, &in6addr_any, 0, NULL); - mn_ro_pol_del(hai, ifindex, all); - } - return err; - } - --static void nemo_mr_tnl_routes_del(struct home_addr_info *hai, int ifindex) -+static void nemo_mr_tnl_routes_del(struct home_addr_info *hai, -+ int ifindex, int rtable) - { - struct list_head *l; - list_for_each(l, &hai->mob_net_prefixes) { - struct prefix_list_entry *p; - p = list_entry(l, struct prefix_list_entry, list); -- route_del(ifindex, RT6_TABLE_MIP6, IP6_RT_PRIO_MIP6_FWD, -+ route_del(ifindex, rtable, IP6_RT_PRIO_MIP6_FWD, - &p->ple_prefix, p->ple_plen, &in6addr_any, 0, NULL); - } - } - --static void mn_tnl_state_del(struct home_addr_info *hai, int ifindex, int all) -+static void mn_tnl_state_del(struct home_addr_info *hai, int ifindex, -+ int all, int rtable) - { - if (hai->home_reg_status != HOME_REG_NONE) { - if (hai->mob_rtr) -- nemo_mr_tnl_routes_del(hai, ifindex); -- route_del(ifindex, RT6_TABLE_MIP6, IP6_RT_PRIO_MIP6_OUT, -+ nemo_mr_tnl_routes_del(hai, ifindex, rtable); -+ route_del(ifindex, rtable, IP6_RT_PRIO_MIP6_OUT, - &hai->hoa.addr, 128, &in6addr_any, 0, NULL); - mn_ro_pol_del(hai, ifindex, all); - } -@@ -715,8 +905,18 @@ static void mn_pol_ext_cleanup(struct bu - static void mn_pol_ext_cleanup(struct bulentry *bule) - { - MDBG("\n"); -- mpd_cancel_mps(&bule->hoa, &bule->peer_addr); -- mn_tnl_state_del(bule->home, bule->home->if_tunnel, 0); -+ /* MCoA -+ * MPS is canceled only if the BULE is the last entry -+ * for the HoA, or when at home -+ */ -+ if (mcoa_bule_count(bule) == 0 || bule->home->at_home) -+ mpd_cancel_mps(&bule->hoa, &bule->peer_addr); -+ if (bule->home->reg_mcoa) -+ mn_tnl_state_del(bule->home, bule->if_tunnel, 0, -+ bule->table); -+ else -+ mn_tnl_state_del(bule->home, bule->home->if_tunnel, -+ 0, bule->table); - - if (conf.UseMnHaIPsec) { - mn_ipsec_tnl_update(&bule->peer_addr, &bule->hoa, bule); -@@ -730,12 +930,13 @@ static int process_first_home_bu(struct - struct timespec *lifetime) - { - int err = 0; -+ assert(hai->current_coa); - bule->type = BUL_ENTRY; - bule->flags = (IP6_MH_BU_HOME | IP6_MH_BU_ACK | - hai->lladdr_comp | hai->mob_rtr); - bule->coa_changed = -1; -- bule->coa = hai->primary_coa.addr; -- bule->if_coa = hai->primary_coa.iif; -+ bule->coa = hai->current_coa->addr; -+ bule->if_coa = hai->current_coa->iif; - bule->lifetime = *lifetime; - bule->delay = conf.InitialBindackTimeoutFirstReg_ts; - bule->callback = bu_resend; -@@ -744,10 +945,47 @@ static int process_first_home_bu(struct - bule->ext_cleanup = mn_pol_ext_cleanup; - bule->home = hai; - bule->consecutive_resends = 0; -+ bule->priority = get_prio_from_bid(bule->bid); - - hai->home_reg_status = HOME_REG_UNCERTAIN; - -- if ((err = mn_tnl_state_add(hai, hai->if_tunnel, 0)) < 0) -+ /* MCoA: MCoA requires one tunnel per CoA. Need to create a new one */ -+ if (bule->if_tunnel == 0 -+ && hai->reg_mcoa -+ && get_bid_from_ifindex(hai->current_coa->iif)) { -+ MDBG("Creating new tunnel for iface %d (BID %d)\n", -+ hai->current_coa->iif, -+ get_bid_from_ifindex(hai->current_coa->iif)); -+ bule->if_tunnel = tunnel_add(&hai->hoa.addr, -+ &hai->ha_addr, -+ hai->current_coa->iif, -+ NULL, NULL); -+ if (bule->if_tunnel <= 0) { -+ MDBG("Failed to create MN-HA tunnel\n"); -+ return -1; -+ } else { -+ MDBG("MN-HA tunnel created (iface tnl = %d)\n", -+ bule->if_tunnel); -+ struct flag_hoa_args arg; -+ arg.target = hai; -+ arg.flag = 1; -+ arg.bule = bule; -+ if (addr_do(&hai->hoa.addr, 128, -+ bule->if_tunnel, &arg, -+ flag_hoa) < 0) { -+ MDBG("addr_do failed for tunnel %d\n", -+ bule->if_tunnel); -+ return -1; -+ } -+ } -+ } else if (bule->if_tunnel == 0) -+ /* MCoA -+ * If MCoA is not used, then initialise the tunnel -+ * number to the one in hai -+ */ -+ bule->if_tunnel = hai->if_tunnel; -+ -+ if ((err = mn_tnl_state_add(hai, bule->if_tunnel, 0, bule->table)) < 0) - MDBG("Failed to initialize new bule for HA\n"); - else - MDBG("New bule for HA\n"); -@@ -781,14 +1019,18 @@ static void mn_send_home_bu(struct home_ - movement_t type_movement = MIP6_TYPE_MOVEMENT_UNKNOWN; - - TRACE; -+ assert(hai->current_coa); - - if (IN6_IS_ADDR_UNSPECIFIED(&hai->ha_addr)) { - MDBG("HA not set for home link\n"); - return; - } -- mn_get_home_lifetime(hai, &lifetime, 0); -+ mn_get_home_lifetime(hai, &lifetime, hai->current_coa->iif, 0); - -- if ((bule = bul_get(hai, NULL, &hai->ha_addr)) == NULL) { -+ if ((bule = bul_get(hai, NULL, &hai->ha_addr, -+ hai->reg_mcoa? -+ get_bid_from_ifindex(hai->current_coa->iif) -+ :MCOA_NO_BID)) == NULL) { - assert(!hai->at_home); - /* Create new bul entry for HA */ - if (!tsisset(lifetime)) { -@@ -807,14 +1049,22 @@ static void mn_send_home_bu(struct home_ - mn_change_ha(hai); - return; - } -- bule = create_bule(&hai->hoa.addr, &hai->ha_addr); -+ bule = create_bule(&hai->hoa.addr, &hai->ha_addr, -+ hai->reg_mcoa? -+ get_bid_from_ifindex(hai->current_coa->iif) -+ :MCOA_NO_BID); - if (bule == NULL) - return; -- if (process_first_home_bu(bule, hai, &lifetime) < 0 || -+ if (mcoa_mn_init_rt_table(bule) < 0 || -+ process_first_home_bu(bule, hai, &lifetime) < 0 || - bul_add(bule) < 0) { - bul_delete(bule); - return; - } -+ /* MCoA: Check for interface reliability */ -+ if(get_reliable_from_ifindex(bule->if_coa) > 0) -+ /* MCoA: Add the rules */ -+ mcoa_iface_rules_add(hai->current_coa->iif, hai); - type_movement = MIP6_TYPE_MOVEMENT_HL2FL; - MDBG("New bule for HA\n"); - } else if (bule->type == BUL_ENTRY) { -@@ -829,8 +1079,8 @@ static void mn_send_home_bu(struct home_ - } - type_movement = MIP6_TYPE_MOVEMENT_HL2FL; - } else { -- bule->coa = hai->primary_coa.addr; -- bule->if_coa = hai->primary_coa.iif; -+ bule->coa = hai->current_coa->addr; -+ bule->if_coa = hai->current_coa->iif; - - /* Rate limiting home registration binding updates - is necessary for multihomed MNs */ -@@ -850,6 +1100,10 @@ static void mn_send_home_bu(struct home_ - bule->callback = bu_resend; - } - bule->seq++; -+ /* MCoA: Check for interface reliability */ -+ if(bule->home->reg_mcoa -+ && get_reliable_from_ifindex(bule->if_coa) == 0) -+ mcoa_iface_rules_del(bule->if_coa, bule->home, 1); - pre_bu_bul_update(bule); - MDBG("Bule for HA exists. Updating it.\n"); - } else { -@@ -885,10 +1139,13 @@ static void mn_send_home_bu(struct home_ - &bule->hoa, bule); - } - } -+ /* MCoA: Update the current routing table */ -+ hai->table = bule->table; - /* Before bul_iterate, tunnel modification should be done. */ -- tunnel_mod(hai->if_tunnel, &hai->primary_coa.addr, &hai->ha_addr, -- hai->primary_coa.iif, mn_ext_tunnel_ops, hai); -- -+ bule->if_tunnel = tunnel_mod(bule->if_tunnel, &hai->current_coa->addr, -+ &hai->ha_addr, hai->current_coa->iif, -+ mn_ext_tunnel_ops, hai); -+ hai->if_tunnel = bule->if_tunnel; - bule->last_coa = bule->coa; - bule->coa_changed = 0; - -@@ -1017,14 +1274,87 @@ static int mn_chk_bauth(struct ip6_mh_bi - return -1; - } - -+static int mn_disable_mcoa(struct bulentry *bule) -+{ -+/* -+ struct bulentry *bule_del; -+ struct home_addr_info *hai; -+ struct flag_hoa_args arg; -+ struct list_head *l, *tmp; -+ struct net_iface *best_iface = NULL; -+*/ -+ -+ /* MCoA TODO1: At the moment we simply exit */ -+ MDBG("HA does not accept MCoA registration. Check "\ -+ "your HA or change your MR configuration\n"); -+ kill(0, SIGINT); -+ return 0; -+ -+/* -+ assert(bule); -+ hai = bule->home; -+ mcoa_mn_rules_del(hai); -+ while((bule_del = bul_get(hai, NULL, -+ &bule->peer_addr, MCOA_NO_BID))) -+ bul_delete(bule_del); -+ -+ hai->if_tunnel = tunnel_add(&hai->hoa.addr, &hai->ha_addr, -+ hai->if_home, NULL, NULL); -+ if (hai->if_tunnel <= 0) { -+ MDBG("failed to create MN-HA tunnel\n"); -+ goto clean_err; -+ } -+ -+ arg.target = hai; -+ arg.flag = 1; -+ if (addr_do(&hai->hoa.addr, 128, hai->if_tunnel, -+ &arg, flag_hoa) < 0) -+ goto clean_err; -+ -+ nemo_mr_rules_del(hai); -+ hai->reg_mcoa = 0; -+ nemo_mr_rules_add(hai); -+ if (rule_add(NULL, RT6_TABLE_MIP6, IP6_RULE_PRIO_MIP6_HOA_OUT, 0, -+ RTN_UNICAST, &hai->hoa.addr, -+ 128, &in6addr_any, 0, FIB_RULE_FIND_SADDR) < 0) -+ goto clean_err; -+ -+ list_for_each(l, &conf.net_ifaces) { -+ struct net_iface *iface = NULL; -+ iface = list_entry(l, struct net_iface, list); -+ if (!best_iface -+ || iface->mn_if_bidprio > best_iface->mn_if_bidprio) -+ best_iface = iface; -+ } -+ list_for_each_safe(l, tmp, &conf.net_ifaces) { -+ struct net_iface *iface = NULL; -+ iface = list_entry(l, struct net_iface, list); -+ if (iface != best_iface) { -+ MDBG("Deleting iface %d\n", iface->ifindex); -+ list_del(l); -+ } -+ } -+ return 1; -+ -+clean_err: -+ rule_del(NULL, RT6_TABLE_MIP6, -+ IP6_RULE_PRIO_MIP6_HOA_OUT, 0, RTN_UNICAST, -+ &hai->hoa.addr, 128, &in6addr_any, 0, FIB_RULE_FIND_SADDR); -+ tunnel_del(hai->if_tunnel, NULL, NULL); -+ -+ return 0; -+*/ -+} -+ - static void mn_recv_ba(const struct ip6_mh *mh, ssize_t len, - const struct in6_addr_bundle *in, int iif) - { - struct ip6_mh_binding_ack *ba; -+ struct ip6_mh_opt_bid *bui; - struct mh_options mh_opts; - struct bulentry *bule; - struct timespec now, ba_lifetime, br_adv; -- uint16_t seqno; -+ uint16_t seqno, bid; - - TRACE; - -@@ -1036,25 +1366,32 @@ static void mn_recv_ba(const struct ip6_ - ba = (struct ip6_mh_binding_ack *)mh; - - pthread_rwlock_wrlock(&mn_lock); -- bule = bul_get(NULL, in->dst, in->src); -+ -+ /* MCoA: Lookup in BA options for the BUI sub-option and the BID */ -+ bui = mh_opt(&ba->ip6mhba_hdr, &mh_opts, IP6_MHOPT_BID); -+ bid = bui ? ntohs(bui->ip6mobid_bid) : MCOA_NO_BID; -+ -+ bule = bul_get(NULL, in->dst, in->src, bid); - if (!bule || bule->type != BUL_ENTRY) { - MDBG("Got BA without corresponding BUL entry " - "from %x:%x:%x:%x:%x:%x:%x:%x " - "to home address %x:%x:%x:%x:%x:%x:%x:%x " -- "with coa %x:%x:%x:%x:%x:%x:%x:%x\n", -+ "with coa %x:%x:%x:%x:%x:%x:%x:%x" -+ "and bid %d\n", - NIP6ADDR(in->src), - NIP6ADDR(in->dst), - NIP6ADDR(in->local_coa != NULL ? -- in->local_coa : &in6addr_any)); -+ in->local_coa : &in6addr_any), -+ bid); - pthread_rwlock_unlock(&mn_lock); - return; - } - dbg("Got BA from %x:%x:%x:%x:%x:%x:%x:%x " - "to home address %x:%x:%x:%x:%x:%x:%x:%x " -- "with coa %x:%x:%x:%x:%x:%x:%x:%x and status %d\n", -+ "with coa %x:%x:%x:%x:%x:%x:%x:%x, bid %d and status %d\n", - NIP6ADDR(in->src), NIP6ADDR(in->dst), - NIP6ADDR(in->local_coa != NULL ? in->local_coa : &in6addr_any), -- ba->ip6mhba_status); -+ bid, ba->ip6mhba_status); - dbg("Dumping corresponding BULE\n"); - dbg_func(bule, dump_bule); - /* First check authenticator */ -@@ -1076,6 +1413,17 @@ static void mn_recv_ba(const struct ip6_ - return; - } - } -+ /* MCoA: Check if BID matches */ -+ if (bule->bid && !bui) { -+ /* The BACK did not have any BID suboption whereas -+ * we sent a BU with a BID option. MCoA is disabled -+ * on the node. -+ */ -+ MDBG("Got BA with no BID option, disabling MCoA registration.\n"); -+ mn_disable_mcoa(bule); -+ pthread_rwlock_unlock(&mn_lock); -+ return; -+ } - bule->do_send_bu = 0; - bule->consecutive_resends = 0; - clock_gettime(CLOCK_REALTIME, &now); -@@ -1086,11 +1434,18 @@ static void mn_recv_ba(const struct ip6_ - bule->seq = seqno + 1; - if (bule->flags & IP6_MH_BU_HOME) - mn_get_home_lifetime(bule->home, -- &bule->lifetime, 0); -+ &bule->lifetime, -+ bule->if_coa, -+ 0); - else - mn_get_ro_lifetime(bule->home, - &bule->lifetime, 0); - bule->callback = bu_resend; -+ /* MCoA: Check for interface reliability */ -+ if(bule->home->reg_mcoa -+ && get_reliable_from_ifindex(bule->if_coa) == 0) -+ mcoa_iface_rules_del(bule->if_coa, -+ bule->home, 1); - pre_bu_bul_update(bule); - mn_send_bu_msg(bule); - bule->delay = conf.InitialBindackTimeoutReReg_ts; -@@ -1137,6 +1492,10 @@ static void mn_recv_ba(const struct ip6_ - tssetsec(ba_lifetime, ntohs(ba->ip6mhba_lifetime) << 2); - br_adv = ba_lifetime; - tsadd(bule->lastsent, ba_lifetime, bule->hard_expire); -+ /* MCoA: Check for interface reliability */ -+ if(bule->home->reg_mcoa -+ && get_reliable_from_ifindex(bule->if_coa) == 0) -+ mcoa_iface_rules_add(bule->if_coa, bule->home); - if (!(bule->flags & IP6_MH_BU_HOME) || !conf.OptimisticHandoff) - post_ba_bul_update(bule); - if (bule->flags & IP6_MH_BU_HOME) { -@@ -1266,11 +1625,6 @@ struct home_addr_info *mn_get_home_addr_ - return NULL; - } - --struct flag_hoa_args { -- struct home_addr_info *target; -- int flag; --}; -- - static int flag_hoa(struct ifaddrmsg *ifa, struct rtattr *rta_tb[], void *arg) - { - /* -@@ -1279,13 +1633,18 @@ static int flag_hoa(struct ifaddrmsg *if - - struct flag_hoa_args *fhoa = arg; - struct home_addr_info *hai = fhoa->target; -+ struct bulentry *bule = fhoa->bule; - struct mn_addr *hoa = &hai->hoa; - struct in6_addr *addr = RTA_DATA(rta_tb[IFA_ADDRESS]); - struct timespec now; - uint32_t preferred; - uint32_t valid; -- int err; -- int plen = (ifa->ifa_index == hai->if_tunnel ? 128 : hai->plen); -+ int err, plen; -+ -+ if (hai->reg_mcoa && bule != NULL) -+ plen = (ifa->ifa_index == bule->if_tunnel ? 128 : hai->plen); -+ else -+ plen = (ifa->ifa_index == hai->if_tunnel ? 128 : hai->plen); - - clock_gettime(CLOCK_REALTIME, &now); - -@@ -1321,6 +1680,220 @@ static int flag_hoa(struct ifaddrmsg *if - return 0; - } - -+static int mcoa_iface_dflt_hoa_rule_del(struct bulentry *bule, -+ struct bulentry *best_bule, -+ struct home_addr_info *hai, -+ int replace) -+{ -+ /* MCoA: Delete the default HoA rule */ -+ rule_del(NULL, bule->bid, IP6_RULE_PRIO_MIP6_HOA_OUT, -+ 0, RTN_UNICAST, &hai->hoa.addr, 128, -+ &in6addr_any, 0, FIB_RULE_FIND_SADDR); -+ -+ /* MCoA -+ * Do not replace the default rules -+ * if there are no other best bule -+ */ -+ if(best_bule && best_bule != bule && replace) { -+ if (rule_add(NULL, best_bule->bid, -+ IP6_RULE_PRIO_MIP6_HOA_OUT, 0, RTN_UNICAST, -+ &hai->hoa.addr, 128, &in6addr_any, 0, -+ FIB_RULE_FIND_SADDR) < 0) -+ return -1; -+ } -+ return 0; -+} -+ -+static void mcoa_iface_dflt_mnp_rules_del(struct bulentry *bule, -+ struct bulentry *best_bule, -+ struct home_addr_info *hai, -+ struct prefix_list_entry *p, -+ int replace) -+{ -+ /* MCoA: Delete the default MNP rule */ -+ rule_del(NULL, bule->bid, IP6_RULE_PRIO_MIP6_FWD_MCOA, -+ 0, RTN_UNICAST, &p->ple_prefix, p->ple_plen, -+ &in6addr_any, 0, 0); -+ -+ /* MCoA -+ * Do not replace the default rules -+ * if there are no other best bule -+ */ -+ if(best_bule && best_bule != bule && replace) { -+ rule_add(NULL, best_bule->bid, -+ IP6_RULE_PRIO_MIP6_FWD_MCOA, 0, RTN_UNICAST, -+ &p->ple_prefix, p->ple_plen, &in6addr_any, 0, 0); -+ } -+} -+ -+static struct bulentry* mcoa_iface_rules_del(int iif, -+ struct home_addr_info *hai, -+ int replace) -+{ -+ uint16_t bid = hai->reg_mcoa?get_bid_from_ifindex(iif):MCOA_NO_BID; -+ uint8_t prio_tmp = 0; -+ struct bulentry *bule, *best_bule = NULL; -+ struct list_head *l; -+ int delete_dflt_mnp = 0; -+ -+ bule = bul_get(hai, NULL, &hai->ha_addr, bid); -+ if (!hai->reg_mcoa || (bule && !bule->rules)) -+ return NULL; -+ -+ /* MCoA: Delete rule for HoA traffic from the MN */ -+ rule_del(NULL, bid, IP6_RULE_PRIO_MIP6_HOA_OUT_MCOA, -+ /* fwmark */ bid, RTN_UNICAST, -+ &hai->hoa.addr, 128, &in6addr_any, 0, -+ FIB_RULE_FIND_SADDR); -+ -+ bul_iterate_in(&hai->ha_addr, bul_highest_priority, -+ &best_bule); -+ if(bule && best_bule == bule) { -+ delete_dflt_mnp = 1; -+ /* MCoA: search for the next best BULE */ -+ prio_tmp = bule->priority; -+ bule->priority = 0; -+ bul_iterate_in(&hai->ha_addr, -+ bul_highest_priority, &best_bule); -+ bule->priority = prio_tmp; -+ /* MCoA: delete the default HoA rule */ -+ mcoa_iface_dflt_hoa_rule_del(bule, best_bule, hai, replace); -+ } -+ -+ list_for_each(l, &hai->mob_net_prefixes) { -+ struct prefix_list_entry *p = NULL; -+ p = list_entry(l, struct prefix_list_entry, list); -+ /* MCoA: Delete MNP rule */ -+ rule_del(NULL, bid, IP6_RULE_PRIO_MIP6_FWD_FWM, -+ /*fwmark*/ bid, RTN_UNICAST, &p->ple_prefix, -+ p->ple_plen, &in6addr_any, 0, 0); -+ if(delete_dflt_mnp) { -+ /* MCoA: Delete default MNP rule */ -+ mcoa_iface_dflt_mnp_rules_del(bule, best_bule, -+ hai, p, replace); -+ } -+ } -+ -+ if (bule) { -+ bule->rules = 0; -+ MDBG("MNP and HoA rules deleted for iface %d bid %d\n", -+ iif, bule->bid); -+ } -+ -+ return bule; -+} -+ -+static void mcoa_mn_rules_del(struct home_addr_info *hinfo) -+{ -+ struct list_head *l; -+ -+ list_for_each(l, &hinfo->mcoa) { -+ struct mn_addr *iface = NULL; -+ iface = list_entry(l, struct mn_addr, list); -+ mcoa_iface_rules_del(iface->iif, hinfo, 0); -+ } -+ rule_del(NULL, 0, IP6_RULE_PRIO_MIP6_HOA_OUT, -+ 0, RTN_UNICAST, &hinfo->hoa.addr, 128, -+ &in6addr_any, 0, FIB_RULE_FIND_SADDR); -+ if (hinfo->at_home && hinfo->reg_mcoa) { -+ list_for_each(l, &hinfo->mob_net_prefixes) { -+ struct prefix_list_entry *p = NULL; -+ p = list_entry(l, struct prefix_list_entry, -+ list); -+ rule_del(NULL, RT6_TABLE_MIP6, -+ IP6_RULE_PRIO_MIP6_FWD, 0, -+ RTN_UNICAST, &p->ple_prefix, -+ p->ple_plen, &in6addr_any, 0, 0); -+ } -+ } -+} -+ -+static int mcoa_iface_rules_add(int iif, struct home_addr_info *hai) -+{ -+ uint16_t bid = hai->reg_mcoa?get_bid_from_ifindex(iif):MCOA_NO_BID; -+ struct bulentry *bule, *best_bule = NULL; -+ struct prefix_list_entry *pe = NULL; -+ struct list_head *l; -+ uint8_t prio; -+ -+ bule = bul_get(hai, NULL, &hai->ha_addr, bid); -+ if (!bid || !hai->reg_mcoa || !bule || (bule && bule->rules)) -+ return 0; -+ -+ prio = get_prio_from_bid(bid); -+ -+ /* MCoA: Rule for HoA traffic from the MN */ -+ if (rule_add(NULL, bid, IP6_RULE_PRIO_MIP6_HOA_OUT_MCOA, -+ /* fwmark */ bid, RTN_UNICAST, -+ &hai->hoa.addr, 128, &in6addr_any, 0, -+ FIB_RULE_FIND_SADDR) < 0) -+ goto undo; -+ -+ bul_iterate_in(&hai->ha_addr, bul_highest_priority, -+ &best_bule); -+ -+ if (!best_bule || prio >= best_bule->priority) { -+ rule_del(NULL, 0, IP6_RULE_PRIO_MIP6_HOA_OUT, -+ 0, RTN_UNICAST, &hai->hoa.addr, 128, -+ &in6addr_any, 0, FIB_RULE_FIND_SADDR); -+ if (rule_add(NULL, bid, IP6_RULE_PRIO_MIP6_HOA_OUT, -+ 0, RTN_UNICAST, &hai->hoa.addr, 128, -+ &in6addr_any, 0, FIB_RULE_FIND_SADDR) < 0) -+ goto undo; -+ } -+ -+ /* MCoA: Rule for forwarded traffic from the NEMO */ -+ list_for_each(l, &hai->mob_net_prefixes) { -+ struct prefix_list_entry *p = NULL; -+ p = list_entry(l, struct prefix_list_entry, list); -+ if (rule_add(NULL, bid, IP6_RULE_PRIO_MIP6_FWD_FWM, -+ /*fwmark*/ bid, RTN_UNICAST, -+ &p->ple_prefix, p->ple_plen, -+ &in6addr_any, 0, 0) < 0) { -+ pe = p; -+ goto undo; -+ } -+ /* MCoA -+ * Add default rules if the bule has the highest -+ * priority -+ */ -+ if (!best_bule || prio >= best_bule->priority) { -+ rule_del(NULL, 0, IP6_RULE_PRIO_MIP6_FWD_MCOA, -+ 0, RTN_UNICAST, &p->ple_prefix, p->ple_plen, -+ &in6addr_any, 0, 0); -+ if (rule_add(NULL, bid, IP6_RULE_PRIO_MIP6_FWD_MCOA, -+ 0, RTN_UNICAST, &p->ple_prefix, p->ple_plen, -+ &in6addr_any, 0, 0) < 0) -+ goto undo; -+ } -+ } -+ -+ bule->rules = 1; -+ MDBG("MNP and HoA Rules added for interface %d.\n", iif); -+ return 0; -+ -+undo: -+ rule_del(NULL, bid, IP6_RULE_PRIO_MIP6_HOA_OUT_MCOA, -+ /* fwmark */ bid, RTN_UNICAST, -+ &hai->hoa.addr, 128, &in6addr_any, 0, -+ FIB_RULE_FIND_SADDR); -+ -+ rule_del(NULL, bid, IP6_RULE_PRIO_MIP6_HOA_OUT, -+ 0, RTN_UNICAST, &hai->hoa.addr, 128, -+ &in6addr_any, 0, FIB_RULE_FIND_SADDR); -+ -+ list_for_each(l, &hai->mob_net_prefixes) { -+ struct prefix_list_entry *p = NULL; -+ p = list_entry(l, struct prefix_list_entry, list); -+ rule_del(NULL, bid, IP6_RULE_PRIO_MIP6_FWD_FWM, -+ /*fwmark*/ bid, RTN_UNICAST, &p->ple_prefix, -+ p->ple_plen, &in6addr_any, 0, 0); -+ if (p == pe) -+ break; -+ } -+ return -1; -+} -+ - static void nemo_mr_rules_del(struct home_addr_info *hinfo) - { - struct list_head *l; -@@ -1328,11 +1901,17 @@ static void nemo_mr_rules_del(struct hom - list_for_each(l, &hinfo->mob_net_prefixes) { - struct prefix_list_entry *p = NULL; - p = list_entry(l, struct prefix_list_entry, list); -- rule_del(NULL, RT6_TABLE_MIP6, -- IP6_RULE_PRIO_MIP6_FWD, RTN_UNICAST, -- &p->ple_prefix, p->ple_plen, &in6addr_any, 0, 0); -+ if (hinfo->reg_mcoa) { -+ rule_del(NULL, 0, IP6_RULE_PRIO_MIP6_FWD_MCOA, 0, -+ RTN_UNICAST, &p->ple_prefix, p->ple_plen, -+ &in6addr_any, 0, 0); -+ } else -+ rule_del(NULL, RT6_TABLE_MIP6, -+ IP6_RULE_PRIO_MIP6_FWD, 0, RTN_UNICAST, -+ &p->ple_prefix, p->ple_plen, &in6addr_any, -+ 0, 0); - rule_del(NULL, RT6_TABLE_MAIN, -- IP6_RULE_PRIO_MIP6_MNP_IN, RTN_UNICAST, -+ IP6_RULE_PRIO_MIP6_MNP_IN, 0, RTN_UNICAST, - &in6addr_any, 0, &p->ple_prefix, p->ple_plen, 0); - } - } -@@ -1346,19 +1925,21 @@ static int nemo_mr_rules_add(struct home - struct prefix_list_entry *p = NULL; - p = list_entry(l, struct prefix_list_entry, list); - if (rule_add(NULL, RT6_TABLE_MAIN, -- IP6_RULE_PRIO_MIP6_MNP_IN, RTN_UNICAST, -+ IP6_RULE_PRIO_MIP6_MNP_IN, 0, RTN_UNICAST, - &in6addr_any, 0, - &p->ple_prefix, p->ple_plen, 0) < 0) { - pe = p; - goto undo; - } -- if (rule_add(NULL, RT6_TABLE_MIP6, -- IP6_RULE_PRIO_MIP6_FWD, RTN_UNICAST, -- &p->ple_prefix, p->ple_plen, -- &in6addr_any, 0, 0) < 0) { -+ if (!hinfo->reg_mcoa -+ && rule_add(NULL, RT6_TABLE_MIP6, -+ IP6_RULE_PRIO_MIP6_FWD, 0, RTN_UNICAST, -+ &p->ple_prefix, p->ple_plen, -+ &in6addr_any, 0, 0) < 0) { - rule_del(NULL, RT6_TABLE_MAIN, -- IP6_RULE_PRIO_MIP6_MNP_IN, RTN_UNICAST, -- &in6addr_any, 0, &p->ple_prefix, p->ple_plen, 0); -+ IP6_RULE_PRIO_MIP6_MNP_IN, 0, -+ RTN_UNICAST, &in6addr_any, 0, -+ &p->ple_prefix, p->ple_plen, 0); - pe = p; - goto undo; - } -@@ -1368,17 +1949,25 @@ undo: - list_for_each(l, &hinfo->mob_net_prefixes) { - struct prefix_list_entry *p = NULL; - p = list_entry(l, struct prefix_list_entry, list); -- rule_del(NULL, RT6_TABLE_MIP6, -- IP6_RULE_PRIO_MIP6_FWD, RTN_UNICAST, -- &p->ple_prefix, p->ple_plen, &in6addr_any, 0, 0); -+ if (!hinfo->reg_mcoa) { -+ rule_del(NULL, RT6_TABLE_MIP6, -+ IP6_RULE_PRIO_MIP6_FWD, 0, RTN_UNICAST, -+ &p->ple_prefix, p->ple_plen, -+ &in6addr_any, 0, 0); -+ } - rule_del(NULL, RT6_TABLE_MAIN, -- IP6_RULE_PRIO_MIP6_MNP_IN, RTN_UNICAST, -+ IP6_RULE_PRIO_MIP6_MNP_IN, 0, RTN_UNICAST, - &in6addr_any, 0, &p->ple_prefix, p->ple_plen, 0); - if (p == pe) - break; - } - return -1; - } -+ -+struct mcoa_tnl_id { -+ struct list_head list; -+ int tnl_id; -+}; - - static void clean_home_addr_info(struct home_addr_info *hai) - { -@@ -1390,17 +1979,24 @@ static void clean_home_addr_info(struct - nemo_mr_rules_del(hai); - arg.target = hai; - arg.flag = 0; -- addr_do(&hai->hoa.addr, plen, -- hai->hoa.iif, &arg, flag_hoa); -+ /* MCoA: Flag HoA on the tunnel iface is not necessary here */ -+ if (!hai->reg_mcoa) -+ addr_do(&hai->hoa.addr, plen, -+ hai->hoa.iif, &arg, flag_hoa); - bul_iterate(&hai->bul, mn_dereg, NULL); -- bul_home_cleanup(&hai->bul); -- -+ /* MCoA: Delete all mn rules */ -+ if (hai->reg_mcoa) -+ mcoa_mn_rules_del(hai); - mn_block_rule_del(hai); - -- rule_del(NULL, RT6_TABLE_MIP6, -- IP6_RULE_PRIO_MIP6_HOA_OUT, RTN_UNICAST, -- &hai->hoa.addr, 128, &in6addr_any, 0, FIB_RULE_FIND_SADDR); -- tunnel_del(hai->if_tunnel, NULL, NULL); -+ if (!hai->reg_mcoa) { -+ rule_del(NULL, RT6_TABLE_MIP6, -+ IP6_RULE_PRIO_MIP6_HOA_OUT, 0, RTN_UNICAST, -+ &hai->hoa.addr, 128, &in6addr_any, 0, -+ FIB_RULE_FIND_SADDR); -+ tunnel_del(hai->if_tunnel, NULL, NULL); -+ } -+ bul_home_cleanup(&hai->bul); - dhaad_stop(hai); - free(hai); - } -@@ -1448,6 +2044,11 @@ static struct home_addr_info *hai_copy(s - &hai->mob_net_prefixes) < 0) - goto mutex_undo; - -+ INIT_LIST_HEAD(&hai->mcoa); -+ if (hai->reg_mcoa && -+ prefix_list_copy(&conf_hai->mcoa, &hai->mcoa) < 0) -+ goto mutex_undo; -+ - INIT_LIST_HEAD(&hai->ro_policies); - if (rpl_copy(&conf_hai->ro_policies, &hai->ro_policies) < 0) - goto mnp_undo; -@@ -1493,17 +2094,22 @@ static int conf_home_addr_info(struct ho - MDBG("HA address %x:%x:%x:%x:%x:%x:%x:%x\n", - NIP6ADDR(&hai->ha_addr)); - } -- hai->if_tunnel = tunnel_add(&hai->hoa.addr, &hai->ha_addr, -- hai->if_home, NULL, NULL); -+ /* MCoA: tunnel is created only if MCoA registration is not used */ -+ if(!hai->reg_mcoa) { -+ hai->if_tunnel = tunnel_add(&hai->hoa.addr, -+ &hai->ha_addr, -+ hai->if_home, NULL, NULL); - -- if (hai->if_tunnel <= 0) { -- MDBG("failed to create MN-HA tunnel\n"); -- goto clean_err; -- } -- if (rule_add(NULL, RT6_TABLE_MIP6, -- IP6_RULE_PRIO_MIP6_HOA_OUT, RTN_UNICAST, -- &hai->hoa.addr, 128, &in6addr_any, 0, FIB_RULE_FIND_SADDR) < 0) { -- goto clean_err; -+ if (hai->if_tunnel <= 0) { -+ MDBG("failed to create MN-HA tunnel\n"); -+ goto clean_err; -+ } -+ if (rule_add(NULL, RT6_TABLE_MIP6, -+ IP6_RULE_PRIO_MIP6_HOA_OUT, 0, RTN_UNICAST, -+ &hai->hoa.addr, 128, &in6addr_any, 0, -+ FIB_RULE_FIND_SADDR) < 0) { -+ goto clean_err; -+ } - } - - if (mn_block_rule_add(hai) < 0) -@@ -1524,16 +2130,25 @@ static int conf_home_addr_info(struct ho - PREFIX_LIFETIME_INFINITE, - PREFIX_LIFETIME_INFINITE); - -- arg.target = hai; -- arg.flag = 1; -+ /* MCoA */ -+ if(!hai->reg_mcoa) { -+ arg.target = hai; -+ arg.flag = 1; - -- if (addr_do(&hai->hoa.addr, 128, -- hai->if_tunnel, &arg, flag_hoa) < 0) { -- goto clean_err; -+ if (addr_do(&hai->hoa.addr, 128, -+ hai->if_tunnel, &arg, flag_hoa) < 0) { -+ goto clean_err; -+ } - } - if (hai->mob_rtr && nemo_mr_rules_add(hai) < 0) { - goto clean_err; - } -+ /* MCoA TODO1 -+ * For Home-CoA support, hai->at_home must be initialized to 0 -+ * if(hai->reg_mcoa) hai->at_home = 0; -+ * BUT Home-CoA solution seems to be deprecated by the no-NDP -+ * solution -+ */ - hai->at_home = hai->hoa.iif == hai->if_home; - pthread_rwlock_wrlock(&mn_lock); - list_add(&hai->list, &home_addr_list); -@@ -1635,7 +2250,11 @@ int mn_update_home_prefix(struct home_ad - if (!hai->at_home) { - struct bulentry *e; - -- e = bul_get(hai, NULL, &hai->ha_addr); -+ /* MCoA TODO1 -+ * Do the same for all entries that match &hai->ha_addr -+ */ -+ e = bul_get(hai, NULL, &hai->ha_addr, MCOA_NO_BID); -+ - if (e == NULL || !(e->flags & IP6_MH_BU_HOME)) - return -ENOENT; - -@@ -1668,8 +2287,9 @@ static int mn_get_ro_coa(const struct in - return ret; - hai = mn_get_home_addr(hoa); - if (hai) { -- *coa = hai->primary_coa.addr; -- ret = hai->primary_coa.iif; -+ assert(hai->current_coa); -+ *coa = hai->current_coa->addr; -+ ret = hai->current_coa->iif; - } else { - MDBG("Failed to find a home address info\n"); - ret = -1; -@@ -1683,14 +2303,14 @@ static inline void linklocal_rt_rules_de - static inline void linklocal_rt_rules_del(void) - { - rule_del(NULL, RT6_TABLE_MAIN, -- IP6_RULE_PRIO_MIP6_COA_OUT, RTN_UNICAST, -+ IP6_RULE_PRIO_MIP6_COA_OUT, 0, RTN_UNICAST, - &linklocal_prefix, 64, &in6addr_any, 0, 0); - } - - static inline int linklocal_rt_rules_add(void) - { - return rule_add(NULL, RT6_TABLE_MAIN, -- IP6_RULE_PRIO_MIP6_COA_OUT, RTN_UNICAST, -+ IP6_RULE_PRIO_MIP6_COA_OUT, 0, RTN_UNICAST, - &linklocal_prefix, 64, &in6addr_any, 0, 0); - } - -@@ -1705,12 +2325,13 @@ static int mn_ext_tunnel_ops(int request - mha.if_next = new_if; - mha.target = hai; - -+ /* MCoA: Update state for the correct table (hai->table) */ - if (hai->hoa.iif == old_if && -- (mn_tnl_state_add(hai, new_if, 1) || -+ (mn_tnl_state_add(hai, new_if, 1, hai->table) || - addr_do(&hai->hoa.addr, 128, old_if, &mha, mv_hoa) < 0)) - goto undo; - -- mn_tnl_state_del(hai, old_if, 1); -+ mn_tnl_state_del(hai, old_if, 1, hai->table); - hai->if_tunnel = new_if; - return 0; - undo: -@@ -1718,28 +2339,52 @@ undo: - - if (hai->hoa.iif == new_if) - addr_do(&hai->hoa.addr, 128, new_if, &mha, mv_hoa); -- mn_tnl_state_del(hai, new_if, 1); -+ mn_tnl_state_del(hai, new_if, 1, hai->table); - return -1; - } - - static int mn_move(struct home_addr_info *hai) - { - struct mv_hoa_args mha; -+ struct list_head *l; - - mha.target = hai; - - TRACE; -+ assert(hai->current_coa); - - if (hai->at_home) { - int plen = (hai->hoa.iif == hai->if_tunnel ? 128 : hai->plen); - struct bulentry *e; - MDBG("in home net\n"); -+ /* MCoA -+ * If we are in the home network, add a rule to -+ * RT6_TABLE_MIP6 to allow routing of the packets from -+ * the MNNs (routes in RT6_TABLE_MIP6 are -+ * added/deleted in movement.c/md_update_router_stats, -+ * __md_free_router) and the MR. -+ */ -+ if (hai->reg_mcoa) { -+ list_for_each(l, &hai->mob_net_prefixes) { -+ struct prefix_list_entry *p = NULL; -+ p = list_entry(l, struct prefix_list_entry, -+ list); -+ rule_add(NULL, RT6_TABLE_MIP6, -+ IP6_RULE_PRIO_MIP6_FWD, 0, -+ RTN_UNICAST, &p->ple_prefix, -+ p->ple_plen, &in6addr_any, 0, 0); -+ } -+ } - if (hai->home_reg_status == HOME_REG_NONE && -- (e = bul_get(hai, NULL, &hai->ha_addr)) != NULL && -+ (e = bul_get(hai, NULL, &hai->ha_addr, -+ hai->reg_mcoa? -+ get_bid_from_ifindex(hai->current_coa->iif) -+ :MCOA_NO_BID)) -+ != NULL && - e->flags & IP6_MH_BU_HOME && e->type != BUL_ENTRY) - bul_delete(e); -- if (hai->hoa.iif != hai->primary_coa.iif) { -- mha.if_next = hai->primary_coa.iif; -+ if (hai->hoa.iif != hai->current_coa->iif) { -+ mha.if_next = hai->current_coa->iif; - addr_do(&hai->hoa.addr, plen, - hai->hoa.iif, &mha, mv_hoa); - if (hai->home_reg_status == HOME_REG_NONE) { -@@ -1760,10 +2405,33 @@ static int mn_move(struct home_addr_info - hai->pend_ba = 0; - pending_bas--; - } -+ /* MCoA -+ * When in a foreign network, delete the -+ * rules to RT6_TABLE_MIP6 -+ */ -+ if (hai->reg_mcoa) { -+ list_for_each(l, &hai->mob_net_prefixes) { -+ struct prefix_list_entry *p = NULL; -+ p = list_entry(l, struct prefix_list_entry, -+ list); -+ rule_del(NULL, RT6_TABLE_MIP6, -+ IP6_RULE_PRIO_MIP6_FWD, 0, -+ RTN_UNICAST, &p->ple_prefix, -+ p->ple_plen, &in6addr_any, 0, 0); -+ } -+ } - if (hai->hoa.iif != hai->if_tunnel) { - mha.if_next = hai->if_tunnel; -- addr_do(&hai->hoa.addr, hai->plen, -- hai->hoa.iif, &mha, mv_hoa); -+ /* MCoA -+ * HoA is moved if we do not use MCoA, -+ * HoA is copied if we use MCoA -+ */ -+ if (hai->reg_mcoa) -+ addr_do(&hai->hoa.addr, hai->plen, -+ hai->hoa.iif, &mha, cp_hoa); -+ else -+ addr_do(&hai->hoa.addr, hai->plen, -+ hai->hoa.iif, &mha, mv_hoa); - } - do_handoff(hai); - } -@@ -1951,6 +2619,7 @@ static int mn_do_dad(struct home_addr_in - struct in6_addr solicit; - int type = FLUSH_ALL; - -+ assert(hai->current_coa); - if ((sock = socket(AF_INET6, SOCK_RAW, IPPROTO_ICMPV6)) < 0) - return ret; - -@@ -1963,22 +2632,22 @@ static int mn_do_dad(struct home_addr_in - sizeof(struct icmp6_filter)); - - ipv6_addr_solict_mult(&hai->hoa.addr, &solicit); -- if_mc_group(sock, hai->primary_coa.iif, &in6addr_all_nodes_mc, -+ if_mc_group(sock, hai->current_coa->iif, &in6addr_all_nodes_mc, - IPV6_JOIN_GROUP); -- if_mc_group(sock, hai->primary_coa.iif, &solicit, IPV6_JOIN_GROUP); -+ if_mc_group(sock, hai->current_coa->iif, &solicit, IPV6_JOIN_GROUP); - - if (hai->home_reg_status == HOME_REG_NONE) { - if (hai->lladdr_comp) { - struct in6_addr lladdr; - ipv6_addr_llocal(&hai->hoa.addr, &lladdr); - if (mn_addr_do_dad(sock, NULL, &lladdr, 64, -- hai->primary_coa.iif, 0) < 0) { -+ hai->current_coa->iif, 0) < 0) { - MDBG("Link-local DAD failed!\n"); - goto err; - } - } - if (mn_addr_do_dad(sock, hai, &hai->hoa.addr, hai->plen, -- hai->primary_coa.iif, 0) < 0) { -+ hai->current_coa->iif, 0) < 0) { - MDBG("HoA DAD failed!\n"); - goto err; - } -@@ -1986,7 +2655,7 @@ static int mn_do_dad(struct home_addr_in - mn_send_home_na(hai); - ret = mn_move(hai); - } else if (!mn_addr_do_dad(sock, hai, &hai->hoa.addr, -- hai->plen, hai->primary_coa.iif, 1)) { -+ hai->plen, hai->current_coa->iif, 1)) { - ret = mn_move(hai); - } - out: -@@ -2009,15 +2678,19 @@ static inline void mn_update_coa_lifetim - - static void mn_coa_updated(struct home_addr_info *hai) - { -+ assert(hai->current_coa); - if (!hai->at_home) { - struct bulentry *e; - struct mn_addr *coa; - -- e = bul_get(hai, NULL, &hai->ha_addr); -+ e = bul_get(hai, NULL, &hai->ha_addr, -+ hai->reg_mcoa? -+ get_bid_from_ifindex(hai->current_coa->iif) -+ :MCOA_NO_BID); - if (e == NULL || !(e->flags & IP6_MH_BU_HOME)) - return; - -- coa = &hai->primary_coa; -+ coa = hai->current_coa; - - MDBG2("preferred_time %u valid_life %u\n", - coa->preferred_time.tv_sec, -@@ -2075,6 +2748,10 @@ static struct md_inet6_iface *mn_get_ifa - list_for_each(l, iface_list) { - struct md_inet6_iface *iface; - iface = list_entry(l, struct md_inet6_iface, list); -+ /* MCoA TODO1 -+ * If MCoA is used, MCoA preference must be used instead -+ * of interfaces preference -+ */ - if (mn_verify_iface(iface) && - (best_iface == NULL || - (best_iface)->preference > iface->preference || -@@ -2119,6 +2796,106 @@ static struct md_coa *mn_get_coa(const s - return best_coa; - } - -+static int mcoa_mn_make_ho_verdict(const struct movement_event *me, -+ const struct home_addr_info *hai, -+ struct md_router **next_rtr, -+ struct md_coa **next_coa) -+{ -+ /* MCoA -+ * The handoff algorithm is different from -+ * mn_make_ho_verdict because we do not perform vertical -+ * handover, but only horizontal handovers. -+ */ -+ struct md_router *rtr; -+ struct md_coa *coa = NULL; -+ int force = 0; -+ -+ /* MCoA TODO1 -+ * For Home-CoA support, remove this if(){} -+ * BUT Home-CoA seems to be deprecated -+ */ -+ if (me->iface != NULL && -+ (rtr = md_get_first_router(&me->iface->default_rtr)) != NULL && -+ mn_is_at_home(&rtr->prefixes, &hai->home_prefix, hai->home_plen)) { -+ *next_rtr = rtr; -+ *next_coa = NULL; -+ return MN_HO_RETURN_HOME; -+ } -+ switch (me->event_type) { -+ case ME_DHAAD: -+ force = 1; -+ break; -+ case ME_IFACE_DOWN: -+ case ME_LINK_DOWN: -+ case ME_RTR_EXPIRED: -+ break; -+ case ME_RTR_NEW: -+ assert(!list_empty(&me->iface->default_rtr)); -+ case ME_LINK_UP: -+ assert(me->iface != NULL); -+ break; -+ case ME_RTR_BACK: -+ case ME_RTR_UPDATED: -+ assert(me->iface != NULL); -+ assert(!list_empty(&me->iface->default_rtr)); -+ -+ *next_coa = md_get_coa(&me->iface->coas, -+ &hai->current_coa->addr); -+ if (*next_coa == NULL) -+ break; -+ *next_rtr = md_get_first_router(&me->iface->default_rtr); -+ return MN_HO_REESTABLISH; -+ case ME_COA_NEW: -+ assert(me->iface != NULL); -+ assert(me->coa != NULL); -+ assert(me->iface->ifindex == me->coa->ifindex); -+ break; -+ case ME_COA_EXPIRED: -+ assert(me->iface != NULL); -+ assert(me->coa != NULL); -+ assert(me->iface->ifindex == me->coa->ifindex); -+ -+ if (IN6_ARE_ADDR_EQUAL(&hai->current_coa->addr, -+ &me->coa->addr)) -+ break; -+ return MN_HO_IGNORE; -+ case ME_COA_LFT_DEC: -+ case ME_COA_LFT_INC: -+ assert(me->iface != NULL); -+ assert(me->coa != NULL); -+ assert(me->iface->ifindex == me->coa->ifindex); -+ -+ if (!IN6_ARE_ADDR_EQUAL(&hai->current_coa->addr, -+ &me->coa->addr)) { -+ return MN_HO_IGNORE; -+ } -+ -+ *next_coa = me->coa; -+ return MN_HO_CHECK_LIFETIME; -+ default: -+ return MN_HO_IGNORE; -+ } -+ if (!mn_verify_iface(me->iface)) -+ return MN_HO_INVALIDATE; -+ -+ coa = mn_get_coa(hai, me->iface->ifindex, -+ &hai->current_coa->addr, &me->iface->coas); -+ -+ if (coa == NULL) -+ return MN_HO_INVALIDATE; -+ -+ if (!force && -+ IN6_ARE_ADDR_EQUAL(&coa->addr, &hai->current_coa->addr)) -+ return MN_HO_IGNORE; -+ -+ if (list_empty(&me->iface->default_rtr)) -+ return MN_HO_IGNORE; -+ -+ *next_rtr = md_get_first_router(&me->iface->default_rtr); -+ *next_coa = coa; -+ return MN_HO_PROCEED; -+} -+ - static int mn_make_ho_verdict(const struct movement_event *me, - const struct home_addr_info *hai, - struct md_router **next_rtr, -@@ -2127,9 +2904,11 @@ static int mn_make_ho_verdict(const stru - struct md_inet6_iface *old_iface = NULL, *new_iface = NULL; - struct md_router *rtr; - struct md_coa *coa = NULL; -- int pref_iif = hai->primary_coa.iif; /* prefer current CoA interface */ -+ int pref_iif; - int force = 0; - -+ assert(hai->current_coa); -+ pref_iif = hai->current_coa->iif; /* prefer current CoA interface */ - if (me->iface != NULL && - (rtr = md_get_first_router(&me->iface->default_rtr)) != NULL && - mn_is_at_home(&rtr->prefixes, &hai->home_prefix, hai->home_plen)) { -@@ -2170,7 +2949,7 @@ static int mn_make_ho_verdict(const stru - return MN_HO_IGNORE; - - *next_coa = md_get_coa(&old_iface->coas, -- &hai->primary_coa.addr); -+ &hai->current_coa->addr); - if (*next_coa == NULL) - break; - *next_rtr = md_get_first_router(&old_iface->default_rtr); -@@ -2187,7 +2966,7 @@ static int mn_make_ho_verdict(const stru - - if (old_iface == NULL || - (old_iface == me->iface && -- IN6_ARE_ADDR_EQUAL(&hai->primary_coa.addr, -+ IN6_ARE_ADDR_EQUAL(&hai->current_coa->addr, - &me->coa->addr))) - break; - return MN_HO_IGNORE; -@@ -2201,7 +2980,7 @@ static int mn_make_ho_verdict(const stru - break; - - if (old_iface != me->iface || -- !IN6_ARE_ADDR_EQUAL(&hai->primary_coa.addr, -+ !IN6_ARE_ADDR_EQUAL(&hai->current_coa->addr, - &me->coa->addr)) - return MN_HO_IGNORE; - -@@ -2216,13 +2995,13 @@ static int mn_make_ho_verdict(const stru - return MN_HO_INVALIDATE; - - coa = mn_get_coa(hai, new_iface->ifindex, -- &hai->primary_coa.addr, &new_iface->coas); -+ &hai->current_coa->addr, &new_iface->coas); - - if (coa == NULL) - return MN_HO_INVALIDATE; - - if (!force && new_iface == old_iface && -- IN6_ARE_ADDR_EQUAL(&coa->addr, &hai->primary_coa.addr)) -+ IN6_ARE_ADDR_EQUAL(&coa->addr, &hai->current_coa->addr)) - return MN_HO_IGNORE; - - if (list_empty(&new_iface->default_rtr)) -@@ -2231,6 +3010,100 @@ static int mn_make_ho_verdict(const stru - *next_rtr = md_get_first_router(&new_iface->default_rtr); - *next_coa = coa; - return MN_HO_PROCEED; -+} -+ -+static void mcoa_mn_chk_ho_verdict(struct home_addr_info *hai, -+ const struct movement_event *event) -+{ -+ struct md_router *rtr = NULL; -+ struct md_coa *coa = NULL; -+ struct bulentry *bule; -+ int move_home = 0; -+ int active_coa = 0; -+ -+ if ((bule = bul_get(hai, NULL, &hai->ha_addr, -+ hai->reg_mcoa? -+ get_bid_from_ifindex(event->iface->ifindex) -+ :MCOA_NO_BID))) -+ active_coa = mcoa_bule_count(bule); -+ -+ if (event->event_type == ME_COA_EXPIRED && -+ IN6_ARE_ADDR_EQUAL(&event->coa->addr, &hai->hoa.addr)) -+ return; -+ -+ hai->current_coa = mcoa_get_current_coa(hai, event->iface->ifindex); -+ if (hai->current_coa == NULL) -+ return; -+ -+ hai->verdict = mcoa_mn_make_ho_verdict(event, hai, &rtr, &coa); -+ MDBG2("Verdict %d for iface %d\n", -+ hai->verdict, hai->current_coa->iif); -+ -+ if (hai->verdict == MN_HO_IGNORE) -+ return; -+ -+ if (hai->verdict == MN_HO_INVALIDATE) { -+ /* MCoA -+ * Unless this is the last available interface -+ * Rules related to this iface are deleted, -+ * BULE is deleted, and deregistration BU is sent -+ */ -+ if (active_coa > 1 -+ && (bule = mcoa_iface_rules_del(hai->current_coa->iif, -+ hai, 1))) -+ /* MCoA TODO2 -+ * Send a deregistration BU -+ * Is it the correct place to do that? -+ * because when BACK is received, BULE has -+ * already been deleted -+ * (actually BAck cannot be received at the BULE's CoA -+ * because the iface is down...) -+ */ -+ mn_dereg_bule(bule); -+ hai->current_coa = NULL; -+ return; -+ } -+ if (rtr != NULL) -+ move_home = mn_home_rtr_chk(hai, rtr); -+ -+ if (hai->verdict == MN_HO_CHECK_LIFETIME) { -+ mn_update_coa_lifetime(hai->current_coa, coa); -+ mn_coa_updated(hai); -+ } else if (hai->verdict == MN_HO_REESTABLISH) { -+ mn_update_coa_lifetime(hai->current_coa, coa); -+ mn_coa_updated(hai); -+ } else { -+ switch (hai->verdict) { -+ case MN_HO_PROCEED: -+ hai->current_coa->addr = coa->addr; -+ mn_update_coa_lifetime(hai->current_coa, coa); -+ /* MCoA -+ * Rules related to this iface are added if needed -+ */ -+ mcoa_iface_rules_add(hai->current_coa->iif, hai); -+ break; -+ case MN_HO_RETURN_HOME: -+ hai->current_coa->addr = hai->hoa.addr; -+ mcoa_iface_rules_del(hai->current_coa->iif, hai, 1); -+ break; -+ default: -+ return; -+ } -+ if (hai->at_home && !hai->pend_ba) { -+ /* check if router is HA */ -+ if (hai->home_reg_status != HOME_REG_NONE && -+ rtr_addr_chk(rtr, &hai->ha_addr)) { -+ mn_move(hai); -+ } else if (hai->home_reg_status != HOME_REG_NONE || -+ move_home) { -+ int type = FLUSH_FAILED; -+ mn_do_dad(hai, 0); -+ if (hai->home_reg_status == HOME_REG_NONE) -+ bul_iterate(&hai->bul, -+ _bul_flush, &type); -+ } -+ } -+ } - } - - static void mn_chk_ho_verdict(struct home_addr_info *hai, -@@ -2244,35 +3117,36 @@ static void mn_chk_ho_verdict(struct hom - IN6_ARE_ADDR_EQUAL(&event->coa->addr, &hai->hoa.addr)) - return; - -+ assert(hai->current_coa); - hai->verdict = mn_make_ho_verdict(event, hai, &rtr, &coa); - - if (hai->verdict == MN_HO_IGNORE) - return; - - if (hai->verdict == MN_HO_INVALIDATE) { -- hai->primary_coa.iif = 0; -+ hai->current_coa->iif = 0; - return; - } - if (rtr != NULL) - move_home = mn_home_rtr_chk(hai, rtr); - - if (hai->verdict == MN_HO_CHECK_LIFETIME) { -- mn_update_coa_lifetime(&hai->primary_coa, coa); -+ mn_update_coa_lifetime(hai->current_coa, coa); - mn_coa_updated(hai); - } else if (hai->verdict == MN_HO_REESTABLISH) { -- hai->primary_coa.iif = coa->ifindex; -- mn_update_coa_lifetime(&hai->primary_coa, coa); -+ hai->current_coa->iif = coa->ifindex; -+ mn_update_coa_lifetime(hai->current_coa, coa); - mn_coa_updated(hai); - } else { - switch (hai->verdict) { - case MN_HO_PROCEED: -- hai->primary_coa.iif = coa->ifindex; -- hai->primary_coa.addr = coa->addr; -- mn_update_coa_lifetime(&hai->primary_coa, coa); -+ hai->current_coa->iif = coa->ifindex; -+ hai->current_coa->addr = coa->addr; -+ mn_update_coa_lifetime(hai->current_coa, coa); - break; - case MN_HO_RETURN_HOME: -- hai->primary_coa.iif = rtr->ifindex; -- hai->primary_coa.addr = hai->hoa.addr; -+ hai->current_coa->iif = rtr->ifindex; -+ hai->current_coa->addr = hai->hoa.addr; - break; - default: - return; -@@ -2311,14 +3185,20 @@ int mn_movement_event(struct movement_ev - return 0; - } - dhaad_stop(hai); -- mn_chk_ho_verdict(hai, event); -+ if (hai->reg_mcoa) -+ mcoa_mn_chk_ho_verdict(hai, event); -+ else -+ mn_chk_ho_verdict(hai, event); - } else { - if (event->event_type == ME_COA_EXPIRED) - mn_rr_delete_co(&event->coa->addr); - list_for_each(lh, &home_addr_list) { - hai = list_entry(lh, - struct home_addr_info, list); -- mn_chk_ho_verdict(hai, event); -+ if (hai->reg_mcoa) -+ mcoa_mn_chk_ho_verdict(hai, event); -+ else -+ mn_chk_ho_verdict(hai, event); - } - } - } -@@ -2397,7 +3277,9 @@ void mn_start_ro(struct in6_addr *cn, st - "from %x:%x:%x:%x:%x:%x:%x:%x\n", - NIP6ADDR(cn), NIP6ADDR(hoa)); - -- bule = bul_get(NULL, hoa, cn); -+ bule = bul_get(NULL, hoa, cn, -+ hai->reg_mcoa? -+ get_bid_from_ifindex(iif):MCOA_NO_BID); - - if (bule) { - /* If BUL entry exists, RR is done or in progress */ -@@ -2405,7 +3287,9 @@ void mn_start_ro(struct in6_addr *cn, st - return; - } - -- bule = create_bule(hoa, cn); -+ bule = create_bule(hoa, cn, -+ hai->reg_mcoa? -+ get_bid_from_ifindex(iif):MCOA_NO_BID); - if (!bule) { - MDBG("Malloc failed at starting of RO\n"); - pthread_rwlock_unlock(&mn_lock); -@@ -2419,6 +3303,18 @@ void mn_start_ro(struct in6_addr *cn, st - bule->coa_changed = -1; - bule->home = hai; - bule->rr.state = RR_NOT_STARTED; -+ bule->priority = get_prio_from_bid(bule->bid); -+ /* MCoA TODO2 -+ * At the moment we prevent MIPL from installing rules for -+ * this entry -+ */ -+ bule->rules = 1; -+ /* MCoA TODO2 -+ * Support for CN -+ * The table index must be filled with -+ * mcoa_mn_init_rt_table(bule) -+ */ -+ bule->table = RT6_TABLE_MIP6; - - mn_reset_ro_bule(bule); - -@@ -2451,7 +3347,10 @@ static void mn_recv_brr(const struct ip6 - hoa = in->dst; - pthread_rwlock_wrlock(&mn_lock); - /* Do we have BUL entry for cn? If not, drop. */ -- if ((e = bul_get(NULL, hoa, cn)) == NULL) { -+ /* MCoA TODO2 -+ * get BID from BRR BUI option -+ */ -+ if ((e = bul_get(NULL, hoa, cn, get_bid_from_ifindex(iif))) == NULL) { - pthread_rwlock_unlock(&mn_lock); - return; - } -@@ -2499,7 +3398,11 @@ static void mn_recv_be(const struct ip6_ - hoa = in->dst; - - /* Do we have BUL entry for cn? If not, drop. */ -- if ((e = bul_get(NULL, hoa, cn)) == NULL || e->type != BUL_ENTRY) -+ /* MCoA TODO2 -+ * get BID from BUI option in BERROR -+ */ -+ if ((e = bul_get(NULL, hoa, cn, get_bid_from_ifindex(iif))) == NULL -+ || e->type != BUL_ENTRY) - goto out; - - clock_gettime(CLOCK_REALTIME, &now); -diff -r 82fcd4bea972 src/mn.h ---- a/src/mn.h Fri Jan 11 16:55:08 2008 +0100 -+++ b/src/mn.h Fri Jan 11 17:02:25 2008 +0100 -@@ -52,6 +52,7 @@ struct ha_candidate_list { - #define NEMO_FWD_BLOCK 0x10 - - struct mn_addr { -+ struct list_head list; - struct in6_addr addr; - int iif; - struct timespec timestamp; -@@ -75,7 +76,8 @@ struct home_addr_info { - uint8_t home_plen; - struct in6_addr home_prefix; - struct hash bul; /* Binding Update List */ -- struct mn_addr primary_coa; -+ struct mn_addr *current_coa; /* MCoA: pointer to a member of mcoa */ -+ struct list_head mcoa; /* MCoA: list of all active CoAs */ - struct list_head ro_policies; - struct ha_candidate_list ha_list; - struct in6_addr ha_addr; -@@ -84,9 +86,11 @@ struct home_addr_info { - int if_tunnel; - int if_home; - int if_block; -+ int table; /* MCoA: routing table number where routes are stored */ - short hwalen; - uint8_t altcoa; - uint16_t mob_rtr; -+ uint8_t reg_mcoa; - char name[IF_NAMESIZE]; - int mnp_count; - struct list_head mob_net_prefixes; -diff -r 82fcd4bea972 src/movement.c ---- a/src/movement.c Fri Jan 11 16:55:08 2008 +0100 -+++ b/src/movement.c Fri Jan 11 17:02:25 2008 +0100 -@@ -165,7 +165,7 @@ static void md_prefix_rule_del(struct pr - struct in6_addr prefix; - ipv6_addr_prefix(&prefix, &p->ple_prefix, p->ple_plen); - rule_del(NULL, RT6_TABLE_MAIN, IP6_RULE_PRIO_MIP6_COA_OUT, -- RTN_UNICAST, &prefix, p->ple_plen, -+ 0, RTN_UNICAST, &prefix, p->ple_plen, - &in6addr_any, 0, 0); - } - -@@ -312,10 +312,10 @@ static void md_expire_router(struct md_i - - static void md_block_rule_del(struct md_inet6_iface *iface) - { -- rule_del(NULL, 0, IP6_RULE_PRIO_MIP6_BLOCK_HOA, RTN_BLACKHOLE, -+ rule_del(NULL, 0, IP6_RULE_PRIO_MIP6_BLOCK_HOA, 0, RTN_BLACKHOLE, - &in6addr_any, 0, &in6addr_any, 0, 0); -- rule_del(NULL, RT6_TABLE_MAIN, IP6_RULE_PRIO_MIP6_COA_OUT, RTN_UNICAST, -- &in6addr_any, 128, &in6addr_any, 0, 0); -+ rule_del(NULL, RT6_TABLE_MAIN, IP6_RULE_PRIO_MIP6_COA_OUT, 0, -+ RTN_UNICAST, &in6addr_any, 128, &in6addr_any, 0, 0); - iface->iface_flags &= ~MD_BLOCK_TRAFFIC; - } - -@@ -1290,7 +1290,7 @@ static void md_prefix_rule_add(struct pr - struct in6_addr prefix; - ipv6_addr_prefix(&prefix, &p->ple_prefix, p->ple_plen); - rule_add(NULL, RT6_TABLE_MAIN, IP6_RULE_PRIO_MIP6_COA_OUT, -- RTN_UNICAST, &prefix, p->ple_plen, -+ 0, RTN_UNICAST, &prefix, p->ple_plen, - &in6addr_any, 0, 0); - } - -@@ -1361,13 +1361,13 @@ static int md_block_rule_add(struct md_i - iface->iface_flags |= MD_BLOCK_TRAFFIC; - /* Allow DAD probes and RS messages */ - rule_add(NULL, RT6_TABLE_MAIN, -- IP6_RULE_PRIO_MIP6_COA_OUT, RTN_UNICAST, -+ IP6_RULE_PRIO_MIP6_COA_OUT, 0, RTN_UNICAST, - &in6addr_any, 128, &in6addr_any, 0, 0); - /* drop outgoing global traffic until DAD has been performed - on CoA to make routing and tunnel end-point updates atomic - during handoff */ - return rule_add(NULL, 0, -- IP6_RULE_PRIO_MIP6_BLOCK_HOA, RTN_BLACKHOLE, -+ IP6_RULE_PRIO_MIP6_BLOCK_HOA, 0, RTN_BLACKHOLE, - &in6addr_any, 0, &in6addr_any, 0, 0); - } - -diff -r 82fcd4bea972 src/mpdisc_ha.c ---- a/src/mpdisc_ha.c Fri Jan 11 16:55:08 2008 +0100 -+++ b/src/mpdisc_ha.c Fri Jan 11 17:02:25 2008 +0100 -@@ -68,7 +68,7 @@ static inline struct mpa_entry *mpa_get( - const struct in6_addr *hoa) - - { -- return hash_get(&mpa_hash, ha, hoa); -+ return hash_get(&mpa_hash, ha, hoa, 0); - } - - /* HA functions */ -@@ -214,7 +214,7 @@ void mpd_cancel_mpa(const struct in6_add - pthread_mutex_lock(&mpa_lock); - e = mpa_get(ha, hoa); - if (e != NULL) { -- hash_delete(&mpa_hash, &e->ha, &e->hoa); -+ hash_delete(&mpa_hash, &e->ha, &e->hoa, 0); - if (tsisset(e->delay)) - del_task(&e->tqe); - free(e); -@@ -239,7 +239,7 @@ int mpd_start_mpa(const struct in6_addr - memset(e, 0, sizeof(struct mpa_entry)); - e->ha = *ha; - e->hoa = *hoa; -- if (hash_add(&mpa_hash, e, &e->ha, &e->hoa)) { -+ if (hash_add(&mpa_hash, e, &e->ha, &e->hoa, NULL)) { - free(e); - goto out; - } -diff -r 82fcd4bea972 src/mpdisc_mn.c ---- a/src/mpdisc_mn.c Fri Jan 11 16:55:08 2008 +0100 -+++ b/src/mpdisc_mn.c Fri Jan 11 17:02:25 2008 +0100 -@@ -65,7 +65,7 @@ static inline struct mps_entry *mps_get( - static inline struct mps_entry *mps_get(const struct in6_addr *hoa, - const struct in6_addr *ha) - { -- return hash_get(&mps_hash, hoa, ha); -+ return hash_get(&mps_hash, hoa, ha, 0); - } - - #ifdef ENABLE_VT -@@ -116,7 +116,7 @@ void mpd_cancel_mps(const struct in6_add - e = mps_get(hoa, ha); - if (e != NULL) { - dbg("canceling MPS\n"); -- hash_delete(&mps_hash, &e->hoa, &e->ha); -+ hash_delete(&mps_hash, &e->hoa, &e->ha, 0); - if (tsisset(e->delay)) - del_task(&e->tqe); - free(e); -@@ -175,7 +175,7 @@ int mpd_schedule_first_mps(const struct - memset(e, 0, sizeof(struct mps_entry)); - e->hoa = *hoa; - e->ha = *ha; -- if (hash_add(&mps_hash, e, &e->hoa, &e->ha)) { -+ if (hash_add(&mps_hash, e, &e->hoa, &e->ha, NULL)) { - free(e); - goto out; - } -diff -r 82fcd4bea972 src/ndisc.h ---- a/src/ndisc.h Fri Jan 11 16:55:08 2008 +0100 -+++ b/src/ndisc.h Fri Jan 11 17:02:25 2008 +0100 -@@ -21,6 +21,7 @@ static inline short nd_get_l2addr_len(un - return 1; - /* supported virtual devices */ - case ARPHRD_SIT: -+ return 4; - case ARPHRD_TUNNEL6: - case ARPHRD_PPP: - case ARPHRD_IPGRE: -diff -r 82fcd4bea972 src/policy.c ---- a/src/policy.c Fri Jan 11 16:55:08 2008 +0100 -+++ b/src/policy.c Fri Jan 11 17:02:25 2008 +0100 -@@ -47,6 +47,25 @@ pthread_rwlock_t policy_lock; - pthread_rwlock_t policy_lock; - struct hash policy_bind_acl_hash; - int def_bind_policy = IP6_MH_BAS_PROHIBIT; -+ -+/** -+ * default_mcoa_reg - Check if MCoA reg is allowed -+ * @remote_hoa: remote MN's home address -+ * -+ * Returns 0 if not allowed, 1 if allowed. -+ **/ -+int default_mcoa_reg(const struct in6_addr *remote_hoa) -+{ -+ struct policy_bind_acl_entry *acl; -+ int ret = 1; -+ -+ pthread_rwlock_rdlock(&policy_lock); -+ acl = hash_get(&policy_bind_acl_hash, NULL, remote_hoa, 0); -+ if (!conf.HaAcceptMCoAReg || (acl && !acl->mcoa_reg)) -+ ret = 0; -+ pthread_rwlock_unlock(&policy_lock); -+ return ret; -+} - - /** - * default_best_iface - select best interface during handoff -@@ -148,7 +167,7 @@ int default_discard_binding(const struct - return IP6_MH_BAS_MR_OP_NOT_PERMITTED; - - pthread_rwlock_rdlock(&policy_lock); -- acl = hash_get(&policy_bind_acl_hash, NULL, remote_hoa); -+ acl = hash_get(&policy_bind_acl_hash, NULL, remote_hoa, 0); - if (acl != NULL) { - ret = acl->bind_policy; - if (ret < IP6_MH_BAS_UNSPECIFIED && -@@ -213,8 +232,16 @@ int default_accept_inet6_iface(int iif) - struct net_iface *nif; - nif = list_entry(list, struct net_iface, list); - if (nif->ifindex == iif) { -- if (is_if_mn(nif)) -- return nif->mn_if_preference; -+ if (is_if_mn(nif)) { -+ /* MCoA -+ * Return the BID Priority if the -+ * interface preference is 0 -+ */ -+ if(nif->mn_if_preference) -+ return nif->mn_if_preference; -+ else -+ return nif->mn_if_bidprio; -+ } - return 0; - } - } -@@ -259,7 +286,7 @@ int default_get_mnp_count(const struct i - int ret = 0; - struct policy_bind_acl_entry *acl; - pthread_rwlock_rdlock(&policy_lock); -- acl = hash_get(&policy_bind_acl_hash, NULL, hoa); -+ acl = hash_get(&policy_bind_acl_hash, NULL, hoa, 0); - if (acl != NULL) - ret = acl->mnp_count; - pthread_rwlock_unlock(&policy_lock); -@@ -275,7 +302,7 @@ int default_get_mnps(const struct in6_ad - struct policy_bind_acl_entry *acl; - - pthread_rwlock_rdlock(&policy_lock); -- acl = hash_get(&policy_bind_acl_hash, NULL, hoa); -+ acl = hash_get(&policy_bind_acl_hash, NULL, hoa, 0); - if (acl != NULL) { - struct list_head *l; - list_for_each(l, &acl->mob_net_prefixes) { -@@ -314,7 +341,7 @@ static int policy_bind_acl_add(struct po - static int policy_bind_acl_add(struct policy_bind_acl_entry *acl) - { - int err; -- err = hash_add(&policy_bind_acl_hash, acl, NULL, &acl->hoa); -+ err = hash_add(&policy_bind_acl_hash, acl, NULL, &acl->hoa, NULL); - if (!err) { - list_del(&acl->list); - } -diff -r 82fcd4bea972 src/policy.h ---- a/src/policy.h Fri Jan 11 16:55:08 2008 +0100 -+++ b/src/policy.h Fri Jan 11 17:02:25 2008 +0100 -@@ -6,7 +6,13 @@ - #include - #include "list.h" - --#define POL_MN_IF_DEF_PREFERENCE 5 -+/* MCoA -+ * Changed POL_MN_IF_DEF_PREFERENCE from 5 to 0 -+ */ -+#define POL_MN_IF_DEF_PREFERENCE 0 -+#define POL_MN_IF_DEF_BID 0 -+#define POL_MN_IF_DEF_BID_PRIORITY 0 -+#define POL_MN_IF_DEF_RELIABLE 1 - - struct ip6_mh_binding_update; - struct nd_router_advert; -@@ -17,9 +23,18 @@ struct policy_bind_acl_entry { - struct in6_addr hoa; - int plen; - int bind_policy; -+ int mcoa_reg; - int mnp_count; - struct list_head mob_net_prefixes; - }; -+ -+/** -+ * default_mcoa_reg - Check if MCoA registration is allowed -+ * @remote_hoa: remote MN's home address -+ * -+ * Returns 0 if not allowed, 1 if allowed. -+ **/ -+int default_mcoa_reg(const struct in6_addr *remote_hoa); - - /** - * default_best_iface - select best interface during handoff -diff -r 82fcd4bea972 src/retrout.c ---- a/src/retrout.c Fri Jan 11 16:55:08 2008 +0100 -+++ b/src/retrout.c Fri Jan 11 17:02:25 2008 +0100 -@@ -151,7 +151,7 @@ static struct rrlentry *rre_create(int t - rre->own2 = *own2; - rre->iif = iif; - -- if (hash_add(&rrl_hash, rre, &rre->own1, &rre->peer) < 0) { -+ if (hash_add(&rrl_hash, rre, &rre->own1, &rre->peer, NULL) < 0) { - rrl_delete(rre); - return NULL; - } -@@ -168,7 +168,7 @@ static struct rrlentry *rrl_get(int type - - assert(our_addr); - -- rre = (struct rrlentry *)hash_get(&rrl_hash, our_addr, peer_addr); -+ rre = (struct rrlentry *)hash_get(&rrl_hash, our_addr, peer_addr, 0); - - if (rre != NULL && rre->type != type) - return NULL; -@@ -188,7 +188,7 @@ static void rrl_delete(struct rrlentry * - TRACE; - - del_task(&rre->tqe); -- hash_delete(&rrl_hash, &rre->own1, &rre->peer); -+ hash_delete(&rrl_hash, &rre->own1, &rre->peer, 0); - - if (rre->type == COT_ENTRY) { - struct list_head *list, *n; -@@ -629,7 +629,7 @@ int mn_rr_error_check(const struct in6_a - const struct in6_addr *peer, - struct in6_addr *hoa) - { -- struct rrlentry *rre = hash_get(&rrl_hash, own, peer); -+ struct rrlentry *rre = hash_get(&rrl_hash, own, peer, 0); - - if (rre == NULL || !rre->wait) - return 0; -@@ -694,7 +694,11 @@ static void mn_recv_cot(const struct ip6 - struct addr_holder *ah; - - ah = list_entry(list, struct addr_holder, list); -- bule = bul_get(NULL, &ah->addr, cn_addr); -+ /* MCoA TODO2 -+ * MCoA does not work with RR -+ * At the moment the first entry that match is chosen -+ */ -+ bule = bul_get(NULL, &ah->addr, cn_addr, MCOA_NO_BID); - - if (bule == NULL || bule->type != BUL_ENTRY || - !IN6_ARE_ADDR_EQUAL(&rre_co->own1, &bule->coa)) { -@@ -774,7 +778,11 @@ static void mn_recv_hot(const struct ip6 - pthread_rwlock_unlock(&mn_lock); - return; - } -- bule = bul_get(NULL, home_addr, cn_addr); -+ /* MCoA TODO2 -+ * MCoA does not work with RR -+ * At the moment the first entry that match is chosen -+ */ -+ bule = bul_get(NULL, home_addr, cn_addr, MCOA_NO_BID); - - if (bule == NULL || bule->type != BUL_ENTRY) { - rrl_delete(rre_ho); -diff -r 82fcd4bea972 src/rtnl.c ---- a/src/rtnl.c Fri Jan 11 16:55:08 2008 +0100 -+++ b/src/rtnl.c Fri Jan 11 17:02:25 2008 +0100 -@@ -299,7 +299,7 @@ int route_del(int oif, uint8_t table, ui - } - - static int rule_mod(const char *iface, int cmd, uint8_t table, -- uint32_t priority, uint8_t action, -+ uint32_t priority, uint32_t fwmark, uint8_t action, - const struct in6_addr *src, int src_plen, - const struct in6_addr *dst, int dst_plen, int flags) - { -@@ -331,6 +331,8 @@ static int rule_mod(const char *iface, i - addattr_l(n, sizeof(buf), RTA_SRC, src, sizeof(*src)); - if (priority) - addattr32(n, sizeof(buf), RTA_PRIORITY, priority); -+ if (fwmark) -+ addattr32(n, sizeof(buf), RTA_PROTOINFO, fwmark); - if (iface) - addattr_l(n, sizeof(buf), RTA_IIF, iface, strlen(iface) + 1); - -@@ -349,12 +351,12 @@ static int rule_mod(const char *iface, i - * negative otherwise. - **/ - int rule_add(const char *iface, uint8_t table, -- uint32_t priority, uint8_t action, -+ uint32_t priority, uint32_t fwmark, uint8_t action, - const struct in6_addr *src, int src_plen, - const struct in6_addr *dst, int dst_plen, int flags) - { - return rule_mod(iface, RTM_NEWRULE, table, -- priority, action, -+ priority, fwmark, action, - src, src_plen, dst, dst_plen, flags); - } - -@@ -370,12 +372,12 @@ int rule_add(const char *iface, uint8_t - * otherwise. - **/ - int rule_del(const char *iface, uint8_t table, -- uint32_t priority, uint8_t action, -+ uint32_t priority, uint32_t fwmark, uint8_t action, - const struct in6_addr *src, int src_plen, - const struct in6_addr *dst, int dst_plen, int flags) - { - return rule_mod(iface, RTM_DELRULE, table, -- priority, action, -+ priority, fwmark, action, - src, src_plen, dst, dst_plen, flags); - } - -diff -r 82fcd4bea972 src/rtnl.h ---- a/src/rtnl.h Fri Jan 11 16:55:08 2008 +0100 -+++ b/src/rtnl.h Fri Jan 11 17:02:25 2008 +0100 -@@ -17,11 +17,14 @@ - #define IP6_RT_PRIO_ADDRCONF 256 - - #define IP6_RULE_PRIO_MIP6_MNP_IN 1000 --#define IP6_RULE_PRIO_MIP6_HOA_OUT 1001 --#define IP6_RULE_PRIO_MIP6_COA_OUT 1002 --#define IP6_RULE_PRIO_MIP6_BLOCK 1003 --#define IP6_RULE_PRIO_MIP6_BLOCK_HOA 1004 --#define IP6_RULE_PRIO_MIP6_FWD 1005 -+#define IP6_RULE_PRIO_MIP6_HOA_OUT_MCOA 1001 -+#define IP6_RULE_PRIO_MIP6_HOA_OUT 1002 -+#define IP6_RULE_PRIO_MIP6_COA_OUT 1003 -+#define IP6_RULE_PRIO_MIP6_BLOCK 1004 -+#define IP6_RULE_PRIO_MIP6_BLOCK_HOA 1005 -+#define IP6_RULE_PRIO_MIP6_FWD_FWM 1006 -+#define IP6_RULE_PRIO_MIP6_FWD_MCOA 1007 -+#define IP6_RULE_PRIO_MIP6_FWD 1008 - - static inline int rtnl_route_open(struct rtnl_handle *rth, - unsigned subscriptions) -@@ -74,12 +77,12 @@ int route_del(int oif, uint8_t table, ui - const struct in6_addr *gateway); - - int rule_add(const char *iface, uint8_t table, -- uint32_t priority, uint8_t action, -+ uint32_t priority, uint32_t fwmark, uint8_t action, - const struct in6_addr *src, int src_plen, - const struct in6_addr *dst, int dst_plen, int flags); - - int rule_del(const char *iface, uint8_t table, -- uint32_t priority, uint8_t action, -+ uint32_t priority, uint32_t fwmark, uint8_t action, - const struct in6_addr *src, int src_plen, - const struct in6_addr *dst, int dst_plen,int flags); - -diff -r 82fcd4bea972 src/scan.l ---- a/src/scan.l Fri Jan 11 16:55:08 2008 +0100 -+++ b/src/scan.l Fri Jan 11 17:02:25 2008 +0100 -@@ -137,7 +137,15 @@ MnDiscardHaParamProb { return MNDISCARD - MnDiscardHaParamProb { return MNDISCARDHAPARAMPROB; } - OptimisticHandoff { return OPTIMISTICHANDOFF; } - HaAcceptMobRtr { return HAACCEPTMOBRTR; } -+HaAcceptMCoAReg { return HAACCEPTMCOAREG; } -+MCoAReg { return MCOAREG; } -+NoMCoAReg { return NOMCOAREG; } - IsMobRtr { return ISMOBRTR; } -+Bid { return BID; } -+BidPriority { return BIDPRIORITY; } -+Reliable { return RELIABLE; } -+RegMultipleCoA { return REGMULTIPLECOA; } -+IfMultipleCoA { return IFMULTIPLECOA; } - HaServedPrefix { return HASERVEDPREFIX; } - HomePrefix { return HOMEPREFIX; } - MobRtrUseExplicitMode { return MOBRTRUSEEXPLICITMODE; } -diff -r 82fcd4bea972 src/tunnelctl.c ---- a/src/tunnelctl.c Fri Jan 11 16:55:08 2008 +0100 -+++ b/src/tunnelctl.c Fri Jan 11 17:02:25 2008 +0100 -@@ -157,7 +157,7 @@ static int __tunnel_del(struct mip6_tnl - if (tnl->users == 0) { - struct ifreq ifr; - list_del(&tnl->list); -- hash_delete(&tnl_hash, &tnl->parm.laddr, &tnl->parm.raddr); -+ hash_delete(&tnl_hash, &tnl->parm.laddr, &tnl->parm.raddr, 0); - strcpy(ifr.ifr_name, tnl->parm.name); - if ((res = ioctl(tnl_fd, SIOCDELTUNNEL, &ifr)) < 0) { - TDBG("SIOCDELTUNNEL failed status %d %s\n", -@@ -249,7 +249,7 @@ static struct mip6_tnl *__tunnel_add(str - TDBG("no device called %s\n", tnl->parm.name); - goto err; - } -- if (hash_add(&tnl_hash, tnl, &tnl->parm.laddr, &tnl->parm.raddr) < 0) -+ if (hash_add(&tnl_hash, tnl, &tnl->parm.laddr, &tnl->parm.raddr, NULL) < 0) - goto err; - - list_add_tail(&tnl->list, &tnl_list); -@@ -287,7 +287,7 @@ int tunnel_add(struct in6_addr *local, - int res; - - pthread_mutex_lock(&tnl_lock); -- if ((tnl = hash_get(&tnl_hash, local, remote)) != NULL) { -+ if ((tnl = hash_get(&tnl_hash, local, remote, 0)) != NULL) { - tnl->users++; - TDBG("tunnel %s (%d) from %x:%x:%x:%x:%x:%x:%x:%x " - "to %x:%x:%x:%x:%x:%x:%x:%x user count increased to %d\n", -@@ -339,9 +339,10 @@ static int __tunnel_mod(struct mip6_tnl - errno, strerror(errno)); - return -1; - } -- hash_delete(&tnl_hash, &tnl->parm.laddr, &tnl->parm.raddr); -+ hash_delete(&tnl_hash, &tnl->parm.laddr, &tnl->parm.raddr, 0); - memcpy(&tnl->parm, &parm, sizeof(struct ip6_tnl_parm)); -- if (hash_add(&tnl_hash, tnl, &tnl->parm.laddr, &tnl->parm.raddr) < 0) { -+ if (hash_add(&tnl_hash, tnl, &tnl->parm.laddr, -+ &tnl->parm.raddr, NULL) < 0) { - free(tnl); - return -1; - } -@@ -387,7 +388,7 @@ int tunnel_mod(int ifindex, - old = get_tnl(ifindex); - assert(old != NULL); - -- if ((new = hash_get(&tnl_hash, local, remote)) != NULL) { -+ if ((new = hash_get(&tnl_hash, local, remote, 0)) != NULL) { - if (new != old) { - new->users++; - TDBG("tunnel %s (%d) from %x:%x:%x:%x:%x:%x:%x:%x " -@@ -448,7 +449,7 @@ static int tnl_cleanup(void *data, void - { - struct mip6_tnl *tnl = (struct mip6_tnl *) data; - list_del(&tnl->list); -- hash_delete(&tnl_hash, &tnl->parm.laddr, &tnl->parm.raddr); -+ hash_delete(&tnl_hash, &tnl->parm.laddr, &tnl->parm.raddr, 0); - free(tnl); - return 0; - } -diff -r 82fcd4bea972 src/vt.c ---- a/src/vt.c Fri Jan 11 16:55:08 2008 +0100 -+++ b/src/vt.c Fri Jan 11 17:02:25 2008 +0100 -@@ -428,6 +428,12 @@ static int bul_vt_dump(void *data, void - fprintf(vh->vh_stream, " last_coa %x:%x:%x:%x:%x:%x:%x:%x", - NIP6ADDR(&bule->last_coa)); - -+ if (bule->bid) { -+ fprintf(vh->vh_stream, " BID %d", bule->bid); -+ fprintf(vh->vh_stream, " BidPriority %d", -+ bule->priority); -+ } -+ - fprintf(vh->vh_stream, "\n"); - - if (!(bule->flags & IP6_MH_BU_HOME)) { -@@ -579,6 +585,11 @@ static int bcache_vt_dump(void *data, vo - - fprintf(vh->vh_stream, " coa %x:%x:%x:%x:%x:%x:%x:%x", - NIP6ADDR(&bce->coa)); -+ -+ if (bce->bid) { -+ fprintf(vh->vh_stream, " BID %d", bce->bid); -+ fprintf(vh->vh_stream, " BidPriority %d", bce->priority); -+ } - - if (vh->vh_opt.verbose == VT_BOOL_TRUE) - fprintf(vh->vh_stream, " nonce %u", bce->nonce_coa); -diff -r 82fcd4bea972 src/xfrm.c ---- a/src/xfrm.c Fri Jan 11 16:55:08 2008 +0100 -+++ b/src/xfrm.c Fri Jan 11 17:02:25 2008 +0100 -@@ -56,7 +56,7 @@ - #include "conf.h" - #include "ipsec.h" - --#define XFRM_DEBUG_LEVEL 1 -+#define XFRM_DEBUG_LEVEL 2 - - #if XFRM_DEBUG_LEVEL >= 1 - #define XDBG dbg -@@ -1555,7 +1555,7 @@ static int xfrm_bule_bce_update(const st - int res = -1; - pthread_rwlock_rdlock(&mn_lock); - if ((hai = mn_get_home_addr(our_addr)) != NULL) { -- if ((e = bul_get(hai, NULL, peer_addr)) != NULL) { -+ if ((e = bul_get(hai, NULL, peer_addr, MCOA_NO_BID)) != NULL) { - if (e->type == BUL_ENTRY && - !_xfrm_add_bule_bce(our_addr, peer_addr, replace)) - res = 0; -@@ -1582,30 +1582,34 @@ int xfrm_add_bce(const struct in6_addr * - int xfrm_add_bce(const struct in6_addr *our_addr, - const struct in6_addr *peer_addr, - const struct in6_addr *coa, -- int replace) -+ int replace, -+ int create) - { - struct xfrm_selector sel; - - /* Create policy for outbound RO data traffic */ -- set_selector(peer_addr, our_addr, 0, 0, 0, 0, &sel); -- if (xfrm_state_add(&sel, IPPROTO_ROUTING, coa, replace, 0)){ -- /* -- * WORKAROUND -- * In some cases, MN fail to add it because of the state -- * inserted by kernel when notifying aquire. So,update it. -- */ -- if (xfrm_state_add(&sel, IPPROTO_ROUTING, coa, 1, 0)) -- return -1; -- } -- set_selector(our_addr, peer_addr, 0, 0, 0, 0, &sel); -- if (xfrm_state_add(&sel, IPPROTO_DSTOPTS, coa, replace, 0)){ -- /* -- * WORKAROUND -- * In some cases, MN fail to add it because of the state -- * inserted by kernel when notifying aquire. So,update it. -- */ -- if (xfrm_state_add(&sel, IPPROTO_DSTOPTS, coa, 1, 0)) -- return -1; -+ if (create || replace) { -+ set_selector(peer_addr, our_addr, 0, 0, 0, 0, &sel); -+ if (xfrm_state_add(&sel, IPPROTO_ROUTING, coa, replace, 0)){ -+ /* -+ * WORKAROUND -+ * In some cases, MN fail to add it because of the state -+ * inserted by kernel when notifying aquire. So,update it. -+ */ -+ if (xfrm_state_add(&sel, IPPROTO_ROUTING, coa, 1, 0)) -+ return -1; -+ } -+ -+ set_selector(our_addr, peer_addr, 0, 0, 0, 0, &sel); -+ if (xfrm_state_add(&sel, IPPROTO_DSTOPTS, coa, replace, 0)){ -+ /* -+ * WORKAROUND -+ * In some cases, MN fail to add it because of the state -+ * inserted by kernel when notifying aquire. So,update it. -+ */ -+ if (xfrm_state_add(&sel, IPPROTO_DSTOPTS, coa, 1, 0)) -+ return -1; -+ } - } - if (is_mn() && !xfrm_bule_bce_update(our_addr, peer_addr, replace)) - return 0; -@@ -1614,7 +1618,8 @@ int xfrm_add_bce(const struct in6_addr * - _ha_mn_ipsec_pol_mod, NULL) < 0) - return -1; - } -- _xfrm_add_bce(our_addr, peer_addr, replace); -+ if (create || replace) -+ _xfrm_add_bce(our_addr, peer_addr, replace); - return 0; - } - -@@ -1643,7 +1648,7 @@ void xfrm_del_bce(const struct in6_addr - /* for MN-MN communications, checking BUL to insert RO policy */ - pthread_rwlock_rdlock(&mn_lock); - if ((hai = mn_get_home_addr(our_addr)) != NULL) { -- if ((e = bul_get(hai, NULL, peer_addr)) != NULL) { -+ if ((e = bul_get(hai, NULL, peer_addr, MCOA_NO_BID)) != NULL) { - if (e->type == BUL_ENTRY) - _xfrm_add_bule_bce(our_addr, peer_addr, 0); - } -@@ -1736,7 +1741,7 @@ static int _xfrm_bce_reset(struct bulent - static int _xfrm_bce_reset(struct bulentry *bule) - { - /* for MN - MN communication */ -- struct bcentry *bce = bcache_get(&bule->hoa, &bule->peer_addr); -+ struct bcentry *bce = bcache_get(&bule->hoa, &bule->peer_addr, MCOA_NO_BID); - int res = 0; - if (!bce) - return 0; -@@ -1754,21 +1759,34 @@ static int _xfrm_del_bule_data(struct bu - static int _xfrm_del_bule_data(struct bulentry *bule) - { - struct xfrm_selector sel; -+ int bule_exists = mcoa_bule_count(bule); - int prio; - -- set_selector(&bule->peer_addr, &bule->hoa, 0, 0, 0, 0, &sel); -- xfrm_state_del(IPPROTO_DSTOPTS, &sel); -+ /* MCoA -+ * XFRM states are deleted only when the last BULE for -+ * the same peer is deleted, or when returning home -+ */ -+ if (!bule_exists || !bule->home->reg_mcoa || bule->home->at_home) { -+ XDBG2("Last entry for the peer, deleting XFRM states\n"); -+ set_selector(&bule->peer_addr, &bule->hoa, 0, 0, 0, 0, &sel); -+ xfrm_state_del(IPPROTO_DSTOPTS, &sel); -+ } - - if (bule->home->home_reg_status != HOME_REG_NONE && - mn_has_cn_ro_pol(bule)) { - struct xfrm_user_tmpl tmpl; - create_trig_dstopt_tmpl(&tmpl, &bule->peer_addr, &bule->hoa); -+ /* MCoA: replaced bule->home->if_tunnel with bule->if_tunnel */ - set_selector(&bule->peer_addr, &bule->hoa, -- 0, 0, 0, bule->home->if_tunnel, &sel); -+ 0, 0, 0, bule->if_tunnel, &sel); - xfrm_mip_policy_add(&sel, 1, XFRM_POLICY_OUT, - XFRM_POLICY_ALLOW, MIP6_PRIO_RO_TRIG, &tmpl, 1); -- } else -- _mn_bule_ro_pol_del(bule, bule->home->if_tunnel); -+ } else if(!bule_exists || !bule->home->reg_mcoa || bule->home->at_home) { -+ /* MCoA: policies deleted only if this is the last BULE -+ * for the same peer, or when returning home */ -+ /* MCoA: replaced bule->home->if_tunnel with bule->if_tunnel */ -+ _mn_bule_ro_pol_del(bule, bule->if_tunnel); -+ } - - if (!(bule->flags & IP6_MH_BU_HOME)) - _xfrm_bce_reset(bule); -@@ -1779,20 +1797,25 @@ static int _xfrm_del_bule_data(struct bu - /* MN - CN/HA case, BU out */ - prio = (bule->flags & IP6_MH_BU_HOME ? - MIP6_PRIO_HOME_SIG : MIP6_PRIO_RO_SIG); -- if (bule->flags & IP6_MH_BU_ACK) { -+ if ((bule->flags & IP6_MH_BU_ACK) -+ && (!bule_exists || !bule->home->reg_mcoa -+ || bule->home->at_home)) { - set_selector(&bule->hoa, &bule->peer_addr, IPPROTO_MH, - IP6_MH_TYPE_BACK, 0, 0, &sel); - if (xfrm_mip_policy_add(&sel, 1, XFRM_POLICY_IN, - XFRM_POLICY_ALLOW, prio, NULL, 0)) - return -1; - } -- set_selector(&bule->peer_addr, &bule->hoa, IPPROTO_MH, -- IP6_MH_TYPE_BU, 0, 0, &sel); -- if (xfrm_mip_policy_add(&sel, 1, XFRM_POLICY_OUT, -- XFRM_POLICY_ALLOW, prio, NULL, 0)) -- return -1; -+ if (!bule_exists || !bule->home->reg_mcoa -+ || bule->home->at_home) { -+ set_selector(&bule->peer_addr, &bule->hoa, IPPROTO_MH, -+ IP6_MH_TYPE_BU, 0, 0, &sel); -+ if (xfrm_mip_policy_add(&sel, 1, XFRM_POLICY_OUT, -+ XFRM_POLICY_ALLOW, prio, NULL, 0)) -+ return -1; -+ bule->xfrm_state &= ~BUL_XFRM_STATE_DATA; -+ } - -- bule->xfrm_state &= ~BUL_XFRM_STATE_DATA; - return 0; - } - -@@ -1817,7 +1840,14 @@ void xfrm_del_bule(struct bulentry *bule - { - if (bule->xfrm_state & BUL_XFRM_STATE_DATA) - _xfrm_del_bule_data(bule); -- _xfrm_del_bule_sig(bule); -+ /* MCoA -+ * XFRM policies are deleted only when the last BULE for the -+ * same peer is deleted, or when returning home -+ */ -+ if (mcoa_bule_count(bule) == 0 || bule->home->at_home) { -+ XDBG2("Last entry for the peer, deleting XFRM policies\n"); -+ _xfrm_del_bule_sig(bule); -+ } - } - - /* before sending BU, MN should insert policy/state only for BU/BA */ -@@ -1829,14 +1859,26 @@ int xfrm_pre_bu_add_bule(struct bulentry - int rdata = bule->xfrm_state & BUL_XFRM_STATE_DATA; - int prio; - int exist = 0; -+ int bule_count = mcoa_bule_count(bule); - - if (bule->flags & IP6_MH_BU_HOME) { - struct home_addr_info *hai = bule->home; - if (hai->home_block & HOME_LINK_BLOCK) - xfrm_unblock_link(hai); -- xfrm_block_link(hai); -- if (hai->mob_rtr && !(hai->home_block & NEMO_FWD_BLOCK)) -- xfrm_block_fwd(hai); -+ if (bule->home_block & HOME_LINK_BLOCK) -+ xfrm_unblock_bule_link(bule); -+ if (!hai->reg_mcoa) -+ xfrm_block_link(hai); -+ else -+ xfrm_block_bule_link(bule); -+ if (hai->mob_rtr) { -+ if (!hai->reg_mcoa && -+ !(hai->home_block & NEMO_FWD_BLOCK)) -+ xfrm_block_fwd(hai); -+ else if (hai->reg_mcoa && -+ !(bule->home_block & NEMO_FWD_BLOCK)) -+ bule_block_fwd(bule); -+ } - } - if (IN6_ARE_ADDR_EQUAL(&bule->hoa, &bule->coa)) { - if (rdata) -@@ -1850,25 +1892,32 @@ int xfrm_pre_bu_add_bule(struct bulentry - return -1; - } - /* MN - CN/HA case, BU out */ -- prio = (bule->flags & IP6_MH_BU_HOME ? -- MIP6_PRIO_HOME_SIG : MIP6_PRIO_RO_SIG); -- if (bule->flags & IP6_MH_BU_ACK) { -- create_rh_tmpl(&tmpl); -- set_selector(&bule->hoa, &bule->peer_addr, IPPROTO_MH, -- IP6_MH_TYPE_BACK, 0, 0, &sel); -- if (xfrm_mip_policy_add(&sel, rsig, XFRM_POLICY_IN, -+ if (bule_count == 1) { -+ /* MCoA -+ * If another BULE already exists for this HoA/HA addr -+ * we do not need to install the policies once again -+ */ -+ prio = (bule->flags & IP6_MH_BU_HOME ? -+ MIP6_PRIO_HOME_SIG : MIP6_PRIO_RO_SIG); -+ if (bule->flags & IP6_MH_BU_ACK) { -+ create_rh_tmpl(&tmpl); -+ set_selector(&bule->hoa, &bule->peer_addr, IPPROTO_MH, -+ IP6_MH_TYPE_BACK, 0, 0, &sel); -+ if (xfrm_mip_policy_add(&sel, rsig, XFRM_POLICY_IN, -+ XFRM_POLICY_ALLOW, prio, &tmpl, 1)) -+ return -1; -+ } -+ create_dstopt_tmpl(&tmpl, &bule->peer_addr, &bule->hoa); -+ set_selector(&bule->peer_addr, &bule->hoa, IPPROTO_MH, -+ IP6_MH_TYPE_BU, 0, 0, &sel); -+ if (xfrm_mip_policy_add(&sel, rsig, XFRM_POLICY_OUT, - XFRM_POLICY_ALLOW, prio, &tmpl, 1)) - return -1; - } -- create_dstopt_tmpl(&tmpl, &bule->peer_addr, &bule->hoa); -- set_selector(&bule->peer_addr, &bule->hoa, IPPROTO_MH, -- IP6_MH_TYPE_BU, 0, 0, &sel); -- if (xfrm_mip_policy_add(&sel, rsig, XFRM_POLICY_OUT, -- XFRM_POLICY_ALLOW, prio, &tmpl, 1)) -- return -1; - - if (!(bule->flags & IP6_MH_BU_HOME)) { -- struct bcentry *bce = bcache_get(&bule->hoa, &bule->peer_addr); -+ struct bcentry *bce = bcache_get(&bule->hoa, &bule->peer_addr, -+ MCOA_NO_BID); - if (bce) { - if (bce->type > BCE_NONCE_BLOCK && - _xfrm_add_bce(&bule->hoa, &bule->peer_addr, 1)) { -@@ -1879,11 +1928,16 @@ int xfrm_pre_bu_add_bule(struct bulentry - exist = 1; - } - } -- if(!exist &&_mn_bule_ro_pol_add(bule, bule->home->if_tunnel, rdata)) -+ /* MCoA: Replaced bule->home->if_tunnel with bule->if_tunnel */ -+ if(!exist && bule_count == 1 -+ && _mn_bule_ro_pol_add(bule, bule->if_tunnel, rdata)) - return -1; - set_selector(&bule->peer_addr, &bule->hoa, 0, 0, 0, 0, &sel); - /* XXX: acquired state is already inserted */ -- if (!(bule->flags & IP6_MH_BU_HOME)) { -+ /* MCoA: Add the states if there is only 1 BCE for the peer, -+ * otherwise just update the CoA -+ */ -+ if (!(bule->flags & IP6_MH_BU_HOME) || mcoa_bule_count(bule) > 1) { - XDBG2("%s: original rdata = %d\n", __FUNCTION__, rdata); - rdata = 1; - } -@@ -1902,15 +1956,20 @@ int xfrm_post_ba_mod_bule(struct bulentr - struct home_addr_info *hai = bule->home; - if (hai->home_block & HOME_LINK_BLOCK) - xfrm_unblock_link(hai); -+ if (bule->home_block & HOME_LINK_BLOCK) -+ xfrm_unblock_bule_link(bule); - if (hai->home_block & NEMO_FWD_BLOCK) - xfrm_unblock_fwd(hai); -+ if (bule->home_block & NEMO_FWD_BLOCK) -+ bule_unblock_fwd(bule); - } - /* check if XFRM policies and states have already been cleaned up */ - if (IN6_ARE_ADDR_EQUAL(&bule->hoa, &bule->coa)) - return 0; - - if (!(bule->flags & IP6_MH_BU_HOME)) { -- struct bcentry *bce = bcache_get(&bule->hoa, &bule->peer_addr); -+ struct bcentry *bce = bcache_get(&bule->hoa, &bule->peer_addr, -+ MCOA_NO_BID); - if (bce) { - if (bce->type > BCE_NONCE_BLOCK && - _xfrm_add_bule_bce(&bule->hoa, -@@ -1925,11 +1984,27 @@ int xfrm_post_ba_mod_bule(struct bulentr - } - prio = (bule->flags & IP6_MH_BU_HOME ? - MIP6_PRIO_HOME_DATA : MIP6_PRIO_RO_BULE_DATA); -- set_selector(&bule->peer_addr, &bule->hoa, 0, 0, 0, -- bule->home->if_tunnel, &sel); -- create_dstopt_tmpl(&tmpls[0], &bule->peer_addr, &bule->hoa); -- ret = xfrm_mip_policy_add(&sel, 1, XFRM_POLICY_OUT, -- XFRM_POLICY_ALLOW, prio, tmpls, 1); -+ -+ /* MCoA: Replaced bule->home->if_tunnel with bule->if_tunnel */ -+ set_selector(&bule->peer_addr, &bule->hoa, 0, 0, 0, -+ bule->if_tunnel, &sel); -+ -+ /* MCoA TODO1: to update according to the latest draft. -+ * When MCoA is used, do not use HAO dest. option -+ * for traffic from the MN/MR to the HA. Tunnel packets -+ * instead. -+ */ -+ if(bule->home->reg_mcoa) { -+ ret = xfrm_mip_policy_add(&sel, 1, XFRM_POLICY_OUT, -+ XFRM_POLICY_ALLOW, prio, -+ NULL, 0); -+ } else { -+ create_dstopt_tmpl(&tmpls[0], &bule->peer_addr, &bule->hoa); -+ ret = xfrm_mip_policy_add(&sel, 1, XFRM_POLICY_OUT, -+ XFRM_POLICY_ALLOW, prio, -+ tmpls, 1); -+ } -+ - if (ret) - XDBG("failed to insert outbound policy\n"); - -@@ -2126,6 +2201,31 @@ void xfrm_cleanup(void) - xfrm_cn_cleanup(); - } - -+/* blocking all payload packets from MN via a specific interface */ -+int xfrm_block_bule_link(struct bulentry *bule) -+{ -+ int ret = 0; -+ struct xfrm_selector sel; -+ bule->home_block |= HOME_LINK_BLOCK; -+ /* allow MN to send NA messages */ -+ /* RK: such policy is already installed in xfrm_cn_init at startup, -+ * so we update it (update field to 1) */ -+ set_selector(&in6addr_any, &in6addr_any, IPPROTO_ICMPV6, -+ ND_NEIGHBOR_ADVERT, 0, bule->if_coa, &sel); -+ if ((ret = xfrm_mip_policy_add(&sel, 1 /* update */, XFRM_POLICY_OUT, -+ XFRM_POLICY_ALLOW, -+ MIP6_PRIO_HOME_SIG_ANY, NULL, 0))) -+ return ret; -+ -+ /* block any packets from HoA to the CN */ -+ set_selector(&in6addr_any, &in6addr_any, 0, 0, 0, bule->if_coa, &sel); -+ if ((ret = xfrm_mip_policy_add(&sel, 0, XFRM_POLICY_OUT, -+ XFRM_POLICY_BLOCK, -+ MIP6_PRIO_HOME_BLOCK, NULL, 0))) -+ return ret; -+ return ret; -+} -+ - /* blocking all payload packets from MN */ - int xfrm_block_link(struct home_addr_info *hai) - { -@@ -2141,6 +2241,21 @@ int xfrm_block_link(struct home_addr_inf - MIP6_PRIO_HOME_BLOCK, NULL, 0))) - return ret; - return ret; -+} -+ -+void xfrm_unblock_bule_link(struct bulentry *bule) -+{ -+ struct xfrm_selector sel; -+ set_selector(&in6addr_any, &in6addr_any, 0, 0, 0, bule->if_coa, &sel); -+ xfrm_mip_policy_del(&sel, XFRM_POLICY_OUT); -+ /* RK: instead of deleting the policy, update it to its previous state -+ * (the one installed in xfrm_cn_init) */ -+ set_selector(&in6addr_any, &in6addr_any, IPPROTO_ICMPV6, -+ ND_NEIGHBOR_ADVERT, 0, 0, &sel); -+ if (xfrm_mip_policy_add(&sel, 1 /* update */, XFRM_POLICY_OUT, XFRM_POLICY_ALLOW, -+ MIP6_PRIO_NO_RO_SIG_ANY, NULL, 0) < 0) -+ XDBG("Could not update NA policy\n"); -+ bule->home_block &= ~HOME_LINK_BLOCK; - } - - void xfrm_unblock_link(struct home_addr_info *hai) -diff -r 82fcd4bea972 src/xfrm.h ---- a/src/xfrm.h Fri Jan 11 16:55:08 2008 +0100 -+++ b/src/xfrm.h Fri Jan 11 17:02:25 2008 +0100 -@@ -51,7 +51,8 @@ int xfrm_add_bce(const struct in6_addr * - int xfrm_add_bce(const struct in6_addr *our_addr, - const struct in6_addr *peer_addr, - const struct in6_addr *coa, -- int replace); -+ int replace, -+ int create); - - void xfrm_del_bce(const struct in6_addr *our_addr, - const struct in6_addr *peer_addr); -@@ -82,7 +83,9 @@ int cn_wildrecv_bu_pol_add(void); - int cn_wildrecv_bu_pol_add(void); - void cn_wildrecv_bu_pol_del(void); - -+int xfrm_block_bule_link(struct bulentry *bule); - int xfrm_block_link(struct home_addr_info *hai); -+void xfrm_unblock_bule_link(struct bulentry *bule); - void xfrm_unblock_link(struct home_addr_info *hai); - - int xfrm_block_hoa(struct home_addr_info *hai); diff --git a/openair3/NEMO_SHO/mipv6-daemon-umip-0.4-sho-20080331.patch b/openair3/NEMO_SHO/mipv6-daemon-umip-0.4-sho-20080331.patch deleted file mode 100755 index 50da24d540..0000000000 --- a/openair3/NEMO_SHO/mipv6-daemon-umip-0.4-sho-20080331.patch +++ /dev/null @@ -1,978 +0,0 @@ -diff -Nru mipv6-daemon-umip-0.4-nepl-mcoa/extras/mr_mcoa_sho_UMIP.conf mipv6-daemon-umip-0.4-nepl-mcoa-sho/extras/mr_mcoa_sho_UMIP.conf ---- mipv6-daemon-umip-0.4-nepl-mcoa/extras/mr_mcoa_sho_UMIP.conf 1970-01-01 01:00:00.000000000 +0100 -+++ mipv6-daemon-umip-0.4-nepl-mcoa-sho/extras/mr_mcoa_sho_UMIP.conf 2008-03-31 17:06:27.000000000 +0200 -@@ -0,0 +1,67 @@ -+# This is an example of mip6d Mobile Node configuration file -+ -+NodeConfig MN; -+ -+## If set to > 0, will not detach from tty -+DebugLevel 10; -+ -+## Support route optimization with other MNs -+DoRouteOptimizationCN disabled; -+ -+## Use route optimization with CNs -+DoRouteOptimizationMN disabled; -+ -+UseCnBuAck disabled; -+ -+Interface "eth0" { -+ Bid 100; -+ BidPriority 1; -+ Reliable false; -+ DefaultDelay 5000; -+} -+ -+Interface "eth1" { -+ Bid 200; -+ BidPriority 1; -+ Reliable true; -+ DefaultDelay 0; -+} -+ -+MnRouterProbes 1; -+ -+MnHomeLink "eth0" { -+ IsMobRtr enabled; -+ MnUseSHO enabled; -+# MnUseSHO disabled; -+ MnUseAdaptiveCombining enabled; -+# MnUseAdaptiveCombining disabled; -+ HomeAgentAddress 2001:4::1; -+ HomeAddress 2001:4::4/64 (2001:4:0:2::/64); -+ RegMultipleCoA enabled; -+ IfMultipleCoA "eth0", "eth1"; -+ -+ # proto type code route opt. -+# MnRoPolicy ICMP 129 0 enabled; -+# MnRoPolicy ICMP any any disabled; -+ # proto dst src route opt. -+# MnRoPolicy TCP 80 any enabled; -+# MnRoPolicy TCP any any disabled; -+} -+ -+## -+## IPsec configuration -+## -+ -+UseMnHaIPsec disabled; -+ -+## Key Management Mobility Capability -+KeyMngMobCapability disabled; -+ -+IPsecPolicySet { -+ HomeAgentAddress 3ffe:2620:6:1::1; -+ HomeAddress 3ffe:2620:6:1::1234/64; -+ -+ IPsecPolicy HomeRegBinding UseESP; -+ IPsecPolicy MobPfxDisc UseESP; -+ IPsecPolicy TunnelMh UseESP; -+} -diff -Nru mipv6-daemon-umip-0.4-nepl-mcoa/include/netinet/ip6mh.h mipv6-daemon-umip-0.4-nepl-mcoa-sho/include/netinet/ip6mh.h ---- mipv6-daemon-umip-0.4-nepl-mcoa/include/netinet/ip6mh.h 2008-03-21 16:40:07.000000000 +0100 -+++ mipv6-daemon-umip-0.4-nepl-mcoa-sho/include/netinet/ip6mh.h 2008-03-20 17:02:41.000000000 +0100 -@@ -157,6 +157,25 @@ - uint8_t ip6mobid_reserved; - } __attribute__((packed)); - -+/* NEMO-SHO */ -+struct ip6_mh_opt_fid { -+ uint8_t ip6fid_type; -+ uint8_t ip6fid_len; -+ uint8_t ip6fid_flags_high; -+ uint8_t ip6fid_flags_low; -+ uint8_t ip6fid_fid; -+ uint8_t ip6fid_action; -+ uint8_t ip6fid_status; -+ uint8_t ip6fid_pro_cls; -+} __attribute__((packed)); -+ -+struct ip6_mh_opt_fid_subopt{ -+ uint8_t ip6fid_subopt_type; -+ uint8_t ip6fid_subopt_len; -+ uint8_t ip6fid_subopt_bid; -+} __attribute__((packed)); -+/* NEMO-SHO */ -+ - /* Binding Unique Identifier sub-option flags */ - #if BYTE_ORDER == BIG_ENDIAN - #define IP6_OPT_BID_BULK 0x80 /* Bulk Registration */ -@@ -187,6 +206,7 @@ - #define IP6_MHOPT_BAUTH 0x05 /* Binding Auth Data */ - #define IP6_MHOPT_MOB_NET_PRFX 0x06 /* Mobile Network Prefix */ - #define IP6_MHOPT_BID 0x07 /* Binding Unique Identifier */ -+#define IP6_MHOPT_FID 0x08 /* Flow Identification */ - - /* - * Status values accompanied with Mobility Binding Acknowledgement -diff -Nru mipv6-daemon-umip-0.4-nepl-mcoa/src/bul.c mipv6-daemon-umip-0.4-nepl-mcoa-sho/src/bul.c ---- mipv6-daemon-umip-0.4-nepl-mcoa/src/bul.c 2008-03-21 16:40:07.000000000 +0100 -+++ mipv6-daemon-umip-0.4-nepl-mcoa-sho/src/bul.c 2008-03-20 16:55:16.000000000 +0100 -@@ -71,6 +71,7 @@ - bule->rules = 0; - bule->home_block = 0; - bule->mcoa_dereg = 1; -+ bule->fid = 0; /* NEMO-SHO */ - INIT_LIST_HEAD(&bule->tqe.list); - bule->seq = random(); - } -diff -Nru mipv6-daemon-umip-0.4-nepl-mcoa/src/bul.h mipv6-daemon-umip-0.4-nepl-mcoa-sho/src/bul.h ---- mipv6-daemon-umip-0.4-nepl-mcoa/src/bul.h 2008-03-21 16:40:07.000000000 +0100 -+++ mipv6-daemon-umip-0.4-nepl-mcoa-sho/src/bul.h 2008-03-20 16:54:49.000000000 +0100 -@@ -43,6 +43,7 @@ - uint16_t seq; /* sequence number of the latest BU */ - uint16_t flags; /* BU send flags */ - uint16_t bid; /* MCoA: Binding Identifier */ -+ uint8_t fid; /* NEMO-SHO: Associated FID */ - struct in6_addr last_coa; /* Last good coa */ - struct timespec lastsent; - struct timespec lifetime; /* lifetime sent in this BU */ -diff -Nru mipv6-daemon-umip-0.4-nepl-mcoa/src/cn.c mipv6-daemon-umip-0.4-nepl-mcoa-sho/src/cn.c ---- mipv6-daemon-umip-0.4-nepl-mcoa/src/cn.c 2008-03-21 16:40:07.000000000 +0100 -+++ mipv6-daemon-umip-0.4-nepl-mcoa-sho/src/cn.c 2008-03-20 17:12:02.000000000 +0100 -@@ -301,7 +301,7 @@ - status = IP6_MH_BAS_ACCEPTED; - } - if (bu_flags & IP6_MH_BU_ACK) -- mh_send_ba(&out, status, 0, seqno, &lft, 0, 0, key, iif); -+ mh_send_ba(&out, status, 0, seqno, &lft, 0, 0, NULL, key, iif); /* NEMO-SHO */ - return; - send_nack: - if (bce) { -diff -Nru mipv6-daemon-umip-0.4-nepl-mcoa/src/conf.c mipv6-daemon-umip-0.4-nepl-mcoa-sho/src/conf.c ---- mipv6-daemon-umip-0.4-nepl-mcoa/src/conf.c 2008-03-21 16:40:07.000000000 +0100 -+++ mipv6-daemon-umip-0.4-nepl-mcoa-sho/src/conf.c 2008-03-21 15:29:32.000000000 +0100 -@@ -404,4 +404,27 @@ - } - return priority; - } -+#if 1 -+// NEMO-SHO -+/* -+ * get_bid_from_ifindex - return the bid from the interface index -+ * @iif: the interface index -+ */ -+uint16_t get_delay_from_bid(uint16_t bid) -+{ -+ struct list_head *list; -+ -+ list_for_each(list, &conf.net_ifaces) { -+ struct net_iface *nif; -+ nif = list_entry(list, struct net_iface, list); -+ if (nif->mn_if_bid == bid) { -+ if (is_if_mn(nif)) -+ return nif->mn_if_delay; -+ return 0; -+ } -+ } -+ -+ return 0; -+} -+#endif - -diff -Nru mipv6-daemon-umip-0.4-nepl-mcoa/src/conf.h mipv6-daemon-umip-0.4-nepl-mcoa-sho/src/conf.h ---- mipv6-daemon-umip-0.4-nepl-mcoa/src/conf.h 2008-03-21 16:40:07.000000000 +0100 -+++ mipv6-daemon-umip-0.4-nepl-mcoa-sho/src/conf.h 2008-03-21 15:27:52.000000000 +0100 -@@ -45,6 +45,8 @@ - char MnDiscardHaParamProb; - char SendMobPfxSols; - char OptimisticHandoff; -+ char MnUseSHO; -+ char UseAdaptiveCombining; - - /* HA options */ - char HaAcceptMobRtr; -@@ -70,6 +72,7 @@ - uint16_t mn_if_bid; - uint8_t mn_if_bidprio; - int mn_if_reliable; -+ uint16_t mn_if_delay; /* NEMO-SHO option */ - }; - - extern struct mip6_config conf; -@@ -127,6 +130,7 @@ - uint16_t get_bid_from_ifindex(int iif); - uint8_t get_prio_from_bid(uint16_t bid); - uint8_t get_highest_prio(); -+uint16_t get_delay_from_bid(uint16_t bid); - - int yyparse(void); - -diff -Nru mipv6-daemon-umip-0.4-nepl-mcoa/src/gram.y mipv6-daemon-umip-0.4-nepl-mcoa-sho/src/gram.y ---- mipv6-daemon-umip-0.4-nepl-mcoa/src/gram.y 2008-03-21 16:40:07.000000000 +0100 -+++ mipv6-daemon-umip-0.4-nepl-mcoa-sho/src/gram.y 2008-03-21 15:49:44.000000000 +0100 -@@ -54,7 +54,8 @@ - .mn_if_preference = POL_MN_IF_DEF_PREFERENCE, - .mn_if_bid = POL_MN_IF_DEF_BID, - .mn_if_bidprio = POL_MN_IF_DEF_BID_PRIORITY, -- .mn_if_reliable = POL_MN_IF_DEF_RELIABLE -+ .mn_if_reliable = POL_MN_IF_DEF_RELIABLE, -+ .mn_if_delay = POL_MN_IF_DEF_DELAY - }; - - struct home_addr_info hai = { -@@ -196,8 +197,11 @@ - %token BID - %token BIDPRIORITY - %token RELIABLE -+%token DEFAULTDELAY - %token REGMULTIPLECOA - %token IFMULTIPLECOA -+%token MNUSESHO -+%token MNUSEAPC - - %token INV_TOKEN - -@@ -448,6 +452,20 @@ - } - ni.mn_if_bidprio = $2; - } -+ | DEFAULTDELAY NUMBER ';' -+ { -+ if (ni.mn_if_preference) { -+ uerror("You cannot set Default Delay if " -+ "MnIfPreference is set."); -+ return -1; -+ } -+ if ($2 < 0 || $2 > 65535) { -+ uerror("DefDelay error " -+ "(%d <= BidPriority <= %d)",0, 65535); -+ return -1; -+ } -+ ni.mn_if_delay = $2; -+ } - | RELIABLE BOOL ';' - { - ni.mn_if_reliable = $2; -@@ -543,6 +561,14 @@ - { - hai.reg_mcoa = $2; - } -+ | MNUSESHO BOOL ';' -+ { -+ conf.MnUseSHO = $2; -+ } -+ | MNUSEAPC BOOL ';' -+ { -+ conf.UseAdaptiveCombining = $2; -+ } - | IFMULTIPLECOA iflist ';' - ; - -diff -Nru mipv6-daemon-umip-0.4-nepl-mcoa/src/ha.c mipv6-daemon-umip-0.4-nepl-mcoa-sho/src/ha.c ---- mipv6-daemon-umip-0.4-nepl-mcoa/src/ha.c 2008-03-21 16:40:07.000000000 +0100 -+++ mipv6-daemon-umip-0.4-nepl-mcoa-sho/src/ha.c 2008-03-21 16:27:40.000000000 +0100 -@@ -60,6 +60,17 @@ - #include "ndisc.h" - #include "prefix.h" - -+/* NEMO-SHO CONFIG */ -+#define NEMO_SHO_LTOH // Enable in case of low speed to high speed -+#ifdef NEMO_SHO_LTOH -+const static int NEMO_SHO_DEFAULT_DELAY1 = 0; // msec -+const static int NEMO_SHO_DEFAULT_DELAY2 = 1000; // msec -+#else -+const static int NEMO_SHO_DEFAULT_DELAY1 = 0; // msec -+const static int NEMO_SHO_DEFAULT_DELAY2 = 0; // msec -+#endif -+/* NEMO-SHO CONFIG*/ -+ - #define HA_DEBUG_LEVEL 1 - - #if HA_DEBUG_LEVEL >= 1 -@@ -1007,6 +1018,12 @@ - struct home_tnl_ops_parm p; - struct ip6_mh_opt_bid *bid_opt; - -+ /* NEMO-SHO */ -+ struct ip6_mh_opt_fid *fid_opt; -+ struct ip6_mh_opt_fid_subopt *fid_opt_subopt; -+ struct bcentry *bce_associated = NULL; -+ /* NEMO-SHO */ -+ - pthread_dbg("thread started"); - restart: - home_ifindex = 0; -@@ -1035,6 +1052,10 @@ - out.bind_coa = NULL; - out.local_coa = NULL; - bid_opt = NULL; -+ /* NEMO-SHO */ -+ fid_opt = NULL; -+ fid_opt_subopt = NULL; -+ /* NEMO-SHO */ - - /* MCoA - * We check if a BCE already exists for this HoA -@@ -1322,6 +1343,85 @@ - } - bcache_update_expire(bce); - } -+ /* NEMO-SHO */ -+ /* check if there is FID option */ -+ fid_opt = mh_opt(&arg->bu->ip6mhbu_hdr, -+ &arg->mh_opts, -+ IP6_MHOPT_FID); -+ /* check if there is BID sub-option */ -+ if (fid_opt && (fid_opt->ip6fid_len > (sizeof(struct ip6_mh_opt_fid) - 2))){ -+ fid_opt_subopt = (struct ip6_mh_opt_fid_subopt*)(fid_opt+1); -+ if (fid_opt_subopt->ip6fid_subopt_type == 1) -+ MDBG("FID: BID Reference sub-option\n"); -+ else { -+ MDBG("FID: Unknown sub-option. FID is not processed\n"); -+ fid_opt_subopt = NULL; -+ } -+ } -+ -+ if (fid_opt){ -+ MDBG("FID option (FID=%d) action=%d, status=%d, pro=%d, cls=%d\n", -+ fid_opt->ip6fid_fid, fid_opt->ip6fid_action, fid_opt->ip6fid_status, -+ (fid_opt->ip6fid_pro_cls & 0xF0) >> 4, -+ fid_opt->ip6fid_pro_cls & 0x0F); -+ uint8_t action = fid_opt->ip6fid_action; -+ switch ( fid_opt->ip6fid_pro_cls & 0xF0){ -+ case FBIND_ADD_FLOW: -+ MDBG("FID: ADD FLOW\n"); -+ if ( (action == FBIND_ACTION_NCAST) || -+ (action == FBIND_ACTION_NCAST_COMBINE )|| -+ (action == FBIND_ACTION_NCAST_COMBINE_ADAP) ){ -+ int nemo_sho_flag = SHO_BICAST; -+ if (conf.debug_level > 0) -+ nemo_sho_flag |= SHO_DEBUG; -+ if (action == FBIND_ACTION_NCAST_COMBINE) -+ nemo_sho_flag |= SHO_COMBINING; -+ else if (action == FBIND_ACTION_NCAST_COMBINE_ADAP) -+ nemo_sho_flag |= (SHO_COMBINING|SHO_ADAPTIVE); -+ -+ assert(fid_opt_subopt); -+ MDBG("FID: ACTION NCAST (SHO_FLAG=%x)\n", nemo_sho_flag); -+ // look up another bcache assigned to bid -+ bce_associated = bcache_get(out.src, out.dst, -+ fid_opt_subopt->ip6fid_subopt_bid); -+ if (bce_associated){ -+ if (dtunnel_mod_type(bce->tunnel, -+ out.src, -+ out.bind_coa, -+ &bce_associated->coa, -+ 0, // dummy -+ nemo_sho_flag, -+ 1, /* HA to MN/MR */ -+ NEMO_SHO_DEFAULT_DELAY1, -+ NEMO_SHO_DEFAULT_DELAY2 -+ )< 0 ){ -+ } -+ bcache_release_entry(bce_associated); -+ } -+ else -+ MDBG("FID: no other binding cache entry\n"); -+ } -+ else -+ MDBG("FID: Unsupported Action\n"); -+ break; -+ case FBIND_REMOVE_FLOW: -+ MDBG("FID: REMOVE FLOW\n"); -+ dtunnel_mod_type(bce->tunnel, -+ out.src, -+ out.bind_coa, -+ 0, -+ 0, // dummy -+ 0, // stop bicasting/combining -+ 1 /* HA to MN/MR */, -+ 0, -+ 0); -+ break; -+ default: -+ break; -+ } -+ } -+ /* NEMO-SHO */ -+ - /* bce is always valid here */ - bcache_release_entry(bce); - if (!tsisset(lft)) -@@ -1356,7 +1456,7 @@ - - if (!(arg->flags & HA_BU_F_SKIP_BA)) - mh_send_ba(&out, status, ba_flags, seqno, &lft, -- bid, bid_priority, NULL, iif); -+ bid, bid_priority, fid_opt, NULL, iif); /* NEMO-SHO */ - /* MCoA: Start MPA only if no entries yet for this HoA */ - if (!bce_exists && new && tsisset(lft)) - mpd_start_mpa(&bce->our_addr, &bce->peer_addr); -diff -Nru mipv6-daemon-umip-0.4-nepl-mcoa/src/mh.c mipv6-daemon-umip-0.4-nepl-mcoa-sho/src/mh.c ---- mipv6-daemon-umip-0.4-nepl-mcoa/src/mh.c 2008-03-21 16:40:07.000000000 +0100 -+++ mipv6-daemon-umip-0.4-nepl-mcoa-sho/src/mh.c 2008-03-20 17:11:24.000000000 +0100 -@@ -479,6 +479,62 @@ - return 0; - } - -+/* NEMO-SHO -+ * mh_create_opt_fid - Create a Flow Identifier Option -+ * TODO1: (TBA) -+ */ -+int mh_create_opt_fid(struct iovec *iov, -+ uint8_t fid, uint8_t action, uint8_t status, -+ uint8_t priority, -+ uint8_t pro, -+ int fid_subopt, -+ uint8_t bid) -+{ -+ int optlen = sizeof(struct ip6_mh_opt_fid) + -+ (fid_subopt?sizeof(struct ip6_mh_opt_fid_subopt):0); -+ struct ip6_mh_opt_fid *opt_fid; -+ struct ip6_mh_opt_fid_subopt *opt_fid_subopt; -+ uint8_t *data; -+ -+ iov->iov_base = malloc(optlen); -+ iov->iov_len = optlen; -+ -+ if (iov->iov_base == NULL) -+ return -ENOMEM; -+ -+ memset(iov->iov_base, 0, iov->iov_len); -+ data = (uint8_t *)iov->iov_base; -+ -+ opt_fid = (struct ip6_mh_opt_fid *)data; -+ -+#define IP6_OPT_FID_R 0x80 -+#define IP6_OPT_FID_H 0x40 -+ -+ opt_fid->ip6fid_type = IP6_MHOPT_FID; -+ opt_fid->ip6fid_len = fid_subopt?9:6; // NEMO-SHO TODO: hard-coded -+ opt_fid->ip6fid_flags_high = 0; -+ opt_fid->ip6fid_flags_low = IP6_OPT_FID_H|priority; // TODO: priority should be masked -+ opt_fid->ip6fid_fid = fid; -+ opt_fid->ip6fid_action = action; -+ opt_fid->ip6fid_status = status; -+ opt_fid->ip6fid_pro_cls = (pro << 4) | 0x00; -+ data += sizeof(struct ip6_mh_opt_fid); -+ -+ if (fid_subopt){ -+ opt_fid_subopt = (struct ip6_mh_opt_fid_subopt *)data; -+ opt_fid_subopt->ip6fid_subopt_type = 1; -+ opt_fid_subopt->ip6fid_subopt_len = 3; -+ opt_fid_subopt->ip6fid_subopt_bid = bid; -+ data += sizeof(struct ip6_mh_opt_fid_subopt); -+ } -+ -+ MDBG("FID sub-option created with FID = %d and action %d\n", -+ fid, action); -+ -+ return 0; -+} -+/* NEMO-SHO */ -+ - static size_t mh_length(struct iovec *vec, int count) - { - size_t len = 0; -@@ -526,6 +582,11 @@ - case IP6_MHOPT_BID: - pad = optpad(2, 0, len); /* 2n */ - break; -+ /* NEMO-SHO */ -+ case IP6_MHOPT_FID: -+ pad = optpad(2, 0, len); /* 2n */ -+ break; -+ /* NEMO-SHO */ - } - if (pad > 0) { - create_opt_pad(&out[n++], pad); -@@ -1027,6 +1088,7 @@ - const struct timespec *lifetime, - const uint16_t bid, - const uint8_t priority, -+ const struct ip6_mh_opt_fid *opt_fid, /* NEMO-SHO */ - const uint8_t *key, int iif) - { - int iovlen = 1; -@@ -1058,6 +1120,18 @@ - /* MCoA: Create Binding Unique Identifier Option if needed */ - if (bid) - mh_create_opt_bid(&mh_vec[iovlen++], bid, priority, 0); -+ -+ /* NEMO-SHO: FID option if needed & BA is accepted */ -+ if (opt_fid && (status == IP6_MH_BAS_ACCEPTED)) -+ mh_create_opt_fid(&mh_vec[iovlen++], -+ opt_fid->ip6fid_fid, //fid -+ opt_fid->ip6fid_action, //action (n-casting) -+ 0, //status -+ 0, //priority -+ opt_fid->ip6fid_pro_cls, //process -+ 0,0); //subopt is not present -+ /* NEMO-SHO */ -+ - mh_send(addrs, mh_vec, iovlen, key, iif); - free_iov_data(mh_vec, iovlen); - } -diff -Nru mipv6-daemon-umip-0.4-nepl-mcoa/src/mh.h mipv6-daemon-umip-0.4-nepl-mcoa-sho/src/mh.h ---- mipv6-daemon-umip-0.4-nepl-mcoa/src/mh.h 2008-03-21 16:40:07.000000000 +0100 -+++ mipv6-daemon-umip-0.4-nepl-mcoa-sho/src/mh.h 2008-03-21 16:27:24.000000000 +0100 -@@ -10,7 +10,7 @@ - - /* If new types or options appear, these should be updated. */ - #define IP6_MH_TYPE_MAX IP6_MH_TYPE_BERROR --#define IP6_MHOPT_MAX IP6_MHOPT_BID -+#define IP6_MHOPT_MAX IP6_MHOPT_FID /* NEMO-SHO */ - - struct in6_addr_bundle { - struct in6_addr *src; -@@ -45,6 +45,7 @@ - const struct timespec *lifetime, - const uint16_t bid, - const uint8_t priority, -+ const struct ip6_mh_opt_fid *opt_fid, /* NEMO-SHO */ - const uint8_t *key, int iif); - - static inline void mh_send_ba_err(const struct in6_addr_bundle *addrs, -@@ -56,7 +57,7 @@ - { - struct timespec zero = { 0, 0 }; - mh_send_ba(addrs, status, flags, seqno, &zero, -- bid, priority, key, iif); -+ bid, priority, NULL, key, iif); /* NEMO-SHO */ - } - - void mh_send_be(struct in6_addr *dst, -@@ -87,6 +88,14 @@ - - int mh_create_opt_bid(struct iovec *iov, uint16_t bid, uint8_t priority, - uint8_t bid_flags); -+/* NEMO-SHO */ -+int mh_create_opt_fid(struct iovec *iov, -+ uint8_t fid, uint8_t action, uint8_t status, -+ uint8_t priority, -+ uint8_t pro, -+ int fid_subopt, -+ uint8_t bid); -+/* NEMO-SHO */ - - static inline void *mh_opt(const struct ip6_mh *mh, - const struct mh_options *mh_opts, uint8_t type) -@@ -138,4 +147,13 @@ - void mh_handler_reg(uint8_t type, struct mh_handler *handler); - void mh_handler_dereg(uint8_t type, struct mh_handler *handler); - -+/* NEMO-SHO FlowBinding */ -+#define FBIND_ADD_FLOW 0x00 -+#define FBIND_REMOVE_FLOW 0xF0 -+#define FBIND_ACTION_NCAST 0x03 -+#define FBIND_ACTION_NCAST_COMBINE 0x04 -+#define FBIND_ACTION_NCAST_COMBINE_ADAP 0x05 -+#define FBIND_FID_SHO 0x08 -+/* NEMO-SHO */ -+ - #endif -diff -Nru mipv6-daemon-umip-0.4-nepl-mcoa/src/mn.c mipv6-daemon-umip-0.4-nepl-mcoa-sho/src/mn.c ---- mipv6-daemon-umip-0.4-nepl-mcoa/src/mn.c 2008-03-21 16:40:07.000000000 +0100 -+++ mipv6-daemon-umip-0.4-nepl-mcoa-sho/src/mn.c 2008-03-31 16:15:06.000000000 +0200 -@@ -67,6 +67,14 @@ - #include "dhaad_mn.h" - #include "ipsec.h" - -+/* NEMO-SHO CONFIG */ -+uint16_t mcoa_get_previous_bid(struct home_addr_info *hai); -+enum { -+ TYPE_HO_DOWNWARD, -+ TYPE_HO_UPWARD -+}; -+/* NEMO-SHO CONFIG*/ -+ - #define MN_DEBUG_LEVEL 1 - - #if MN_DEBUG_LEVEL >= 1 -@@ -396,6 +404,49 @@ - free_iov_data(iov, iov_ind); - return -ENOMEM; - } -+ /* NEMO-SHO */ -+ if (hai->reg_mcoa && bule->bid && bule->fid){ -+ uint16_t prev_bid = -+ mcoa_get_previous_bid(hai); -+ uint8_t action; -+ if (conf.MnUseSHO){ -+ if (conf.UseAdaptiveCombining) -+ action = FBIND_ACTION_NCAST_COMBINE_ADAP; -+ else -+ action = FBIND_ACTION_NCAST_COMBINE; -+ } -+ else -+ action = FBIND_ACTION_NCAST; -+ // Start N-casting -+ if ( bu->ip6mhbu_lifetime && -+ mh_create_opt_fid(&iov[iov_ind++], -+ bule->fid, //fid -+ action, -+ 0, //status -+ 0, //priority -+ FBIND_ADD_FLOW, //process (adding) -+ 1, //subopt is present -+ prev_bid //bid -+ ) < 0 ){ -+ free_iov_data(iov, iov_ind); -+ return -ENOMEM; -+ } -+ // Stop N-casting -+ else if (!bule->mcoa_dereg && -+ mh_create_opt_fid(&iov[iov_ind++], -+ bule->fid, //fid -+ action, -+ 0, //status -+ 0, //priority -+ 0xF,//process (removing) -+ 0, //subopt is not present -+ 0 //bid -+ ) < 0){ -+ free_iov_data(iov, iov_ind); -+ return -ENOMEM; -+ } -+ } -+ /* NEMO-SHO */ - if (bule->flags & IP6_MH_BU_MR && bu->ip6mhbu_lifetime && - bule->home->mnp_count > 0 && conf.MobRtrUseExplicitMode && - mh_create_opt_mob_net_prefix(&iov[iov_ind++], -@@ -452,6 +503,27 @@ - - return ret; - } -+/* NEMO-SHO */ -+uint16_t mcoa_get_previous_bid(struct home_addr_info *hai) -+{ -+ struct list_head *l; -+ int iif = hai->current_coa->iif; -+ -+ if(!hai->reg_mcoa){ -+ MDBG("================================= reg_mcoa is 0\n"); -+ return 0; -+ } -+ -+ list_for_each(l, &hai->mcoa) { -+ struct mn_addr *coa_entry; -+ coa_entry = list_entry(l, struct mn_addr, list); -+ if (coa_entry->iif != iif) -+ return get_bid_from_ifindex(coa_entry->iif); -+ } -+ MDBG("================================= cannot find entry\n"); -+ return 0; -+} -+/* NEMO-SHO */ - - struct mn_addr *mcoa_get_current_coa(struct home_addr_info *hai, int iif) - { -@@ -1121,6 +1193,24 @@ - } - if (!homereg_expired) { - bule->do_send_bu = 1; -+ /* NEMO-SHO */ -+ if (conf.MnUseSHO){ -+ struct bulentry *bul_prev = NULL; -+ uint16_t prev_bid = -+ mcoa_get_previous_bid(hai); -+ if (prev_bid) -+ bul_prev = bul_get(hai, NULL, -+ &hai->ha_addr, -+ prev_bid); -+ -+ if (hai->reg_mcoa && bul_prev) { -+ MDBG("=====previous_bid %d=====\n", prev_bid); -+ bule->fid = FBIND_FID_SHO; -+ } -+ else -+ bule->fid = 0; -+ } -+ /* NEMO-SHO */ - mn_send_bu_msg(bule); - bul_update_timer(bule); - if (conf.OptimisticHandoff) -@@ -1145,6 +1235,44 @@ - bule->if_tunnel = tunnel_mod(bule->if_tunnel, &hai->current_coa->addr, - &hai->ha_addr, hai->current_coa->iif, - mn_ext_tunnel_ops, hai); -+ /* NEMO-SHO */ -+ if (bule->fid){ -+ int HOtype; -+ // only Packet Combining is enabled for this moement -+ int nemo_sho_flag = SHO_COMBINING; -+ if (conf.UseAdaptiveCombining) -+ nemo_sho_flag |=SHO_ADAPTIVE; -+ if (conf.debug_level > 0) -+ nemo_sho_flag |=SHO_DEBUG; -+ -+ uint16_t prev_bid = -+ mcoa_get_previous_bid(hai); -+ struct bulentry *bul_prev = bul_get(hai, NULL, &hai->ha_addr, -+ prev_bid); -+ // share the same fid with another bul -+ bul_prev->fid = bule->fid; -+ -+ if (get_delay_from_bid(prev_bid) > -+ get_delay_from_bid(bule->bid) ) -+ HOtype = TYPE_HO_DOWNWARD; -+ else -+ HOtype = TYPE_HO_UPWARD; -+ -+ dtunnel_mod_type(bule->if_tunnel, -+ &bule->coa, -+ &bule->peer_addr, -+ &bul_prev->coa, -+ bule->if_coa, -+ nemo_sho_flag, -+ 0, -+ (HOtype==TYPE_HO_DOWNWARD)? -+ get_delay_from_bid(bule->bid):0, -+ (HOtype==TYPE_HO_DOWNWARD)? -+ get_delay_from_bid(prev_bid):0 -+ ); /* from MR to HA */ -+ } -+ /* NEMO-SHO */ -+ - hai->if_tunnel = bule->if_tunnel; - bule->last_coa = bule->coa; - bule->coa_changed = 0; -@@ -1351,6 +1479,9 @@ - { - struct ip6_mh_binding_ack *ba; - struct ip6_mh_opt_bid *bui; -+ // NEMO-SHO -+ struct ip6_mh_opt_fid *fid_opt = NULL; -+ // NEMO-SHO - struct mh_options mh_opts; - struct bulentry *bule; - struct timespec now, ba_lifetime, br_adv; -@@ -1370,6 +1501,7 @@ - /* MCoA: Lookup in BA options for the BUI sub-option and the BID */ - bui = mh_opt(&ba->ip6mhba_hdr, &mh_opts, IP6_MHOPT_BID); - bid = bui ? ntohs(bui->ip6mobid_bid) : MCOA_NO_BID; -+ fid_opt = mh_opt(&ba->ip6mhba_hdr, &mh_opts, IP6_MHOPT_FID); - - bule = bul_get(NULL, in->dst, in->src, bid); - if (!bule || bule->type != BUL_ENTRY) { -@@ -1383,6 +1515,26 @@ - NIP6ADDR(in->local_coa != NULL ? - in->local_coa : &in6addr_any), - bid); -+ if (fid_opt){ -+ struct home_addr_info *hai = mn_get_home_addr(in->dst); -+ if (hai){ -+ MDBG("FID option (FID=%d) is attached. releasing Bicasting/Combining info\n", fid_opt->ip6fid_fid); -+ bule = bul_get(hai, NULL, in->src, -+ get_bid_from_ifindex(iif)); -+ if (bule->fid == fid_opt->ip6fid_fid){ -+ dtunnel_mod_type(bule->if_tunnel, -+ &bule->coa, -+ &bule->peer_addr, -+ 0, -+ 0, -+ 0, -+ 0, -+ 0, -+ 0); /* from MR to HA */ -+ } -+ } -+ hai = NULL; -+ } - pthread_rwlock_unlock(&mn_lock); - return; - } -@@ -1554,6 +1706,44 @@ - dbg("Deleting bul entry\n"); - bul_delete(bule); - } else { -+ /* NEMO-SHO */ -+ if (bule->fid){ -+ int nemo_sho_flag = SHO_BICAST|SHO_COMBINING; -+ dbg("DTUNNEL from %x:%x:%x:%x:%x:%x:%x:%x " -+ "with coa %x:%x:%x:%x:%x:%x:%x:%x\n", -+ NIP6ADDR(in->src), NIP6ADDR(in->local_coa)); -+ -+ if (conf.UseAdaptiveCombining) -+ nemo_sho_flag |=SHO_ADAPTIVE; -+ if (conf.debug_level > 0) -+ nemo_sho_flag |=SHO_DEBUG; -+ -+ struct home_addr_info *hai = bule->home; -+ uint16_t prev_bid = -+ mcoa_get_previous_bid(hai); -+ struct bulentry *bul_prev = bul_get(hai, NULL, -+ &hai->ha_addr, -+ prev_bid); -+ int HOtype; -+ if (get_delay_from_bid(prev_bid) > -+ get_delay_from_bid(bule->bid) ) -+ HOtype = TYPE_HO_DOWNWARD; -+ else -+ HOtype = TYPE_HO_UPWARD; -+ dtunnel_mod_type(bule->if_tunnel, -+ &bule->coa, -+ &bule->peer_addr, -+ &bul_prev->coa, -+ bule->if_coa, -+ nemo_sho_flag, -+ 0, -+ (HOtype==TYPE_HO_DOWNWARD)? -+ get_delay_from_bid(bule->bid):0, -+ (HOtype==TYPE_HO_DOWNWARD)? -+ get_delay_from_bid(prev_bid):0 -+ ); /* from MR to HA */ -+ } -+ /* NEMO-SHO */ - set_bule_lifetime(bule, &ba_lifetime, &br_adv); - if (bule->flags & IP6_MH_BU_HOME) { - dbg("Callback to bu_refresh after %d seconds\n", -diff -Nru mipv6-daemon-umip-0.4-nepl-mcoa/src/movement.c mipv6-daemon-umip-0.4-nepl-mcoa-sho/src/movement.c ---- mipv6-daemon-umip-0.4-nepl-mcoa/src/movement.c 2008-03-21 16:40:07.000000000 +0100 -+++ mipv6-daemon-umip-0.4-nepl-mcoa-sho/src/movement.c 2008-03-31 14:43:09.000000000 +0200 -@@ -48,7 +48,7 @@ - #include "prefix.h" - #include "conf.h" - --#define MD_DEBUG_LEVEL 1 -+#define MD_DEBUG_LEVEL 0 - - #if MD_DEBUG_LEVEL >= 1 - #define MDBG dbg -@@ -1411,10 +1411,13 @@ - if (old) - md_expire_router(iface, old, new); - -+ //NEMO-SHO avoid blocking outbound traffic here -+#if 0 - if (list_empty(&iface->coas) && - !(iface->iface_flags & MD_BLOCK_TRAFFIC)) { - md_block_rule_add(iface); - } -+#endif - new->used = 1; - md_add_default_router(iface, new); - __md_new_link(iface, link_changed); -diff -Nru mipv6-daemon-umip-0.4-nepl-mcoa/src/policy.h mipv6-daemon-umip-0.4-nepl-mcoa-sho/src/policy.h ---- mipv6-daemon-umip-0.4-nepl-mcoa/src/policy.h 2008-03-21 16:40:07.000000000 +0100 -+++ mipv6-daemon-umip-0.4-nepl-mcoa-sho/src/policy.h 2008-03-21 15:43:20.000000000 +0100 -@@ -13,6 +13,7 @@ - #define POL_MN_IF_DEF_BID 0 - #define POL_MN_IF_DEF_BID_PRIORITY 0 - #define POL_MN_IF_DEF_RELIABLE 1 -+#define POL_MN_IF_DEF_DELAY 0 - - struct ip6_mh_binding_update; - struct nd_router_advert; -diff -Nru mipv6-daemon-umip-0.4-nepl-mcoa/src/scan.l mipv6-daemon-umip-0.4-nepl-mcoa-sho/src/scan.l ---- mipv6-daemon-umip-0.4-nepl-mcoa/src/scan.l 2008-03-21 16:40:07.000000000 +0100 -+++ mipv6-daemon-umip-0.4-nepl-mcoa-sho/src/scan.l 2008-03-21 15:34:55.000000000 +0100 -@@ -139,11 +139,14 @@ - HaAcceptMobRtr { return HAACCEPTMOBRTR; } - HaAcceptMCoAReg { return HAACCEPTMCOAREG; } - MCoAReg { return MCOAREG; } -+MnUseSHO { return MNUSESHO; } -+MnUseAdaptiveCombining { return MNUSEAPC; } - NoMCoAReg { return NOMCOAREG; } - IsMobRtr { return ISMOBRTR; } - Bid { return BID; } - BidPriority { return BIDPRIORITY; } - Reliable { return RELIABLE; } -+DefaultDelay { return DEFAULTDELAY; } - RegMultipleCoA { return REGMULTIPLECOA; } - IfMultipleCoA { return IFMULTIPLECOA; } - HaServedPrefix { return HASERVEDPREFIX; } -diff -Nru mipv6-daemon-umip-0.4-nepl-mcoa/src/tunnelctl.c mipv6-daemon-umip-0.4-nepl-mcoa-sho/src/tunnelctl.c ---- mipv6-daemon-umip-0.4-nepl-mcoa/src/tunnelctl.c 2008-03-21 16:40:07.000000000 +0100 -+++ mipv6-daemon-umip-0.4-nepl-mcoa-sho/src/tunnelctl.c 2008-03-20 16:51:35.000000000 +0100 -@@ -315,6 +315,73 @@ - return res; - } - -+// ---------------- rueegg ------------------------- -+int dtunnel_mod_type(int ifindex, -+ struct in6_addr *local, -+ struct in6_addr *remote, -+ struct in6_addr *addr2, -+ int link, -+ int do_bicasting, -+ int tnl_type, -+ unsigned short defaultDeltaT1, -+ unsigned short defaultDeltaT2) -+{ -+ struct mip6_tnl *tnl; -+ struct ip6_tnl_parm parm; -+ struct ifreq ifr; -+ -+ int res = -1; -+ -+ pthread_mutex_lock(&tnl_lock); -+ -+ TDBG("modifying mode of tunnel %d end points with " -+ "from %x:%x:%x:%x:%x:%x:%x:%x " -+ "to %x:%x:%x:%x:%x:%x:%x:%x\n", -+ ifindex, NIP6ADDR(local), NIP6ADDR(remote)); -+ -+ tnl = get_tnl(ifindex); -+ assert(tnl != NULL); -+ -+ if (tnl->users == 1){ -+ memset(&parm, 0, sizeof(struct ip6_tnl_parm)); -+ parm.proto = IPPROTO_IPV6; -+ parm.flags = IP6_TNL_F_MIP6_DEV|IP6_TNL_F_IGN_ENCAP_LIMIT; -+ parm.hop_limit = 64; -+ parm.laddr = *local; -+ parm.raddr = *remote; -+ parm.link = link; -+ parm.dparms.dtnl_flag = do_bicasting; //rueegg -+ if (do_bicasting) { -+ parm.dparms.dtnl_type = tnl_type; //rueegg -+ parm.dparms.addr2 = *addr2; //rueegg -+ } -+ parm.dparms.defaultDeltaT[0]=defaultDeltaT1; -+ parm.dparms.defaultDeltaT[1]=defaultDeltaT2; -+ -+ strcpy(ifr.ifr_name, tnl->parm.name); -+ ifr.ifr_ifru.ifru_data = (void *)&parm; -+ -+ if(ioctl(tnl_fd, SIOCCHGTUNNEL, &ifr) < 0) { -+ TDBG("SIOCCHGTUNNEL failed status %d %s\n", -+ errno, strerror(errno)); -+ pthread_mutex_unlock(&tnl_lock); -+ return -1; -+ } -+ memcpy(&tnl->parm, &parm, sizeof(struct ip6_tnl_parm)); -+ TDBG("modified tunnel iface %s (%d)" -+ "from %x:%x:%x:%x:%x:%x:%x:%x " -+ "to %x:%x:%x:%x:%x:%x:%x:%x\n", -+ tnl->parm.name, tnl->ifindex, NIP6ADDR(&tnl->parm.laddr), -+ NIP6ADDR(&tnl->parm.raddr)); -+ res = tnl->ifindex; -+ } -+ -+ pthread_mutex_unlock(&tnl_lock); -+ return res; -+} -+ -+// ---------- rueegg end ------------------- -+ - static int __tunnel_mod(struct mip6_tnl *tnl, - struct in6_addr *local, - struct in6_addr *remote, -diff -Nru mipv6-daemon-umip-0.4-nepl-mcoa/src/tunnelctl.h mipv6-daemon-umip-0.4-nepl-mcoa-sho/src/tunnelctl.h ---- mipv6-daemon-umip-0.4-nepl-mcoa/src/tunnelctl.h 2007-09-13 11:42:42.000000000 +0200 -+++ mipv6-daemon-umip-0.4-nepl-mcoa-sho/src/tunnelctl.h 2008-03-20 16:51:13.000000000 +0100 -@@ -28,6 +28,21 @@ - void *data), - void *data); - -+/* NEMO-SHO by hirokazu */ -+#define SHO_BICAST 0x1 -+#define SHO_COMBINING 0x2 -+#define SHO_ADAPTIVE 0x4 -+#define SHO_DEBUG 0x8 -+int dtunnel_mod_type(int ifindex, -+ struct in6_addr *local, -+ struct in6_addr *remote, -+ struct in6_addr *addr2, -+ int link, -+ int do_bicasting, -+ int tnl_type, -+ unsigned short defaultDeltaT1, -+ unsigned short defaultDeltaT2); -+/* NEMO-SHO by hirokazu */ - - int tunnelctl_init(void); - diff --git a/openair3/NEMO_SHO/mipv6-daemon-umip-0.4.tar.gz b/openair3/NEMO_SHO/mipv6-daemon-umip-0.4.tar.gz deleted file mode 100755 index 940362a1b5..0000000000 Binary files a/openair3/NEMO_SHO/mipv6-daemon-umip-0.4.tar.gz and /dev/null differ diff --git a/openair3/PMIPv6/AUTHORS b/openair3/PMIPv6/AUTHORS deleted file mode 100644 index f26c125b8f..0000000000 --- a/openair3/PMIPv6/AUTHORS +++ /dev/null @@ -1 +0,0 @@ -OpenAir3 - Mobile Communication Department - EURECOM (Sophia-Antipolis, FRANCE) diff --git a/openair3/PMIPv6/BUGS b/openair3/PMIPv6/BUGS deleted file mode 100644 index e295671c8c..0000000000 --- a/openair3/PMIPv6/BUGS +++ /dev/null @@ -1,50 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06410 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ -/*________________________OPENAIR/OPENAIR3/________________________ - - File : INSTALL.kernel - Authors : OpenAir3 - Company : EURECOM - Emails : openair3@eurecom.fr -________________________________________________________________*/ - -------------------------- - BUGS -------------------------- - -PROBLEM : "config.h file not found" -SOLUTION : A simple symbolic link is enough to avoid this error. Open a terminal and type : - $ ln -s /usr/src/linux-source-XX.XX.XX/include/linux/autoconf.h /usr/src/linux-sources-XX.XX.XX/include/linux/config.h - -PROBLEM : "Error while loading shared libraries : libfreeradius-client.so.2 cannot open shared object file : no such file or directory" -SOLUTION : Open a terminal and type : - $ export LD_LIBRARY_PATH=/usr/local/lin:$LD_LIBRARY_PATH - - To avoid this problem to occur once again, we add the previsou line to the Bashrc file. Open a terminal and type: - $ echo "export LD_LIBRARY_PATH=/usr/local/lin:$LD_LIBRARY_PATH" >> ~/.bashrc \ No newline at end of file diff --git a/openair3/PMIPv6/CHANGELOG b/openair3/PMIPv6/CHANGELOG deleted file mode 100644 index d30f765095..0000000000 --- a/openair3/PMIPv6/CHANGELOG +++ /dev/null @@ -1,60 +0,0 @@ -================================================================== -Proxy Mobile IPv6 - Changelog -================================================================== -Changes in 0.4.2 (9 Nov 2012) - *Corrected bugs in virtual terminal, enabled at configuration with --enable-vt - *Check of P flag in PBU. - *Radius now not mandatory, enabled at configuration with --with-pmip-use-radius - *Only one type of script per MAG, LMA (before we had a script for MAG1, another one for MAG2, etc) - *LMA host type is fusionned with HA host type - *Rename executable from pmip6d to mip6d in order to ease integration of our PMIP stack with the umip project - *Check that RS or message alerting for an incoming MN comes from the ingress interface - *Added timer handler for tunnel. - *Tunnels now can be static or dynamic - *The alternative of using radius is to create a mapping file (hw address <-> IPv6 W prefix):/etc/pmip/mac-mapping.auth - *We can put comments in /etc/pmip/mac-mapping.auth file - *Now 2 MNs attached to the same MAG can communicate between them. - *Added detection of router sollicitation messages from mobiles (over ethernet and other LTE technologies) - -Changes in 0.4.1 (13 Dec 2011): - *Added Handoff Indicator Option (RFC5213), Access Technology Type Option(RFC5213), - Mobile Node Identifier Option (RFC 4283) for RFC 5213 PBU/PBA messages. - *Correction of P and A flag in PBU message (bad endianess issue). - *Correction and use of automatic padding for options alignment. - *Removed command line options for PMIP protocol, let only UMIP options, because - the number of configuration parameters is rather high, so it is preferable to - use the configuration files. - *Updated man pages for pmip6d and pmip6d.conf. - *removed HomeNetworkPrefix and OurAddress entries in LMA and MAG configuration files. - -Changes in 0.4 (21 Nov 2011): - *Now the configuration is inside only one configuration file, for each entity. - A python script automaticaly parse the configuration file and take the appropriate - decision for configuring the testbed, there should be no need for modifying this script. - *Removed hardcoded syslog parse string, now they are located in the configuration files. - *Now PBU lifetime is smaller (40 seconds instead of 1000 seconds), now the restart - of this timer works. - *Now timestamp option is OK in PBU/PBA, but we will improve the processing in next release (windowing). - *Now sequence numbering of PBU/PBA messages is checked. - *Added miscellaneous parameters in configuration files, some will be processed in future - release (RFC5213EnableMAGLocalRouting), RFC5213TimestampBasedApproachInUse should be always - set to enabled, RFC5213MobileNodeGeneratedTimestampInUse should be always set to disabled. - *Added traces in case of critical section problems. - *Added correct type values (RFC 5213) for PBU/PBA message options. - *Corrected bug of BCE update in LMA: the tunnel was always deleted. - *Corrected bugs in handlers. - *Renamed eth_address2hw_address, hw_address2eth_address to EUI64_to_EUI48, EUI48_to_EUI64 - *Reinforced the test procedure for checking the presence of a mobile on a MAG. - *Warning, there are some known memory leaks, they will be fixed in next release. - -Changes in 0.3 (10 Juin 2011): - * - -Changes in 0.2 (17 May 2011): - * Update of README.first, INSTALL, INSTALL.kernel files for the UBUNTU 10.04 LTS version - * Add of the "Simple_experimentation" directory which contains the drawing and the shell script files to achieve a 1 LMA + 2 MAGs testbed. - * Update of the /etc/match content file format - -Changes in 0.1 (23 Oct 2010): - * First release - diff --git a/openair3/PMIPv6/COPYING b/openair3/PMIPv6/COPYING deleted file mode 100644 index 94a9ed024d..0000000000 --- a/openair3/PMIPv6/COPYING +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. diff --git a/openair3/PMIPv6/INSTALL b/openair3/PMIPv6/INSTALL deleted file mode 100644 index 217a7e3a56..0000000000 --- a/openair3/PMIPv6/INSTALL +++ /dev/null @@ -1,153 +0,0 @@ -/******************************************************************************* - - OPENAIRINTERFACE 0/1/2/3 - Copyright(c) 1999 - 2010 EURECOM - - This program is free software; you can redistribute it and/or modify it - under the terms and conditions of the GNU General Public License, - version 2, as published by the Free Software Foundation. - - This program is distributed in the hope it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - more details. - - You should have received a copy of the GNU General Public License along with - this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - - The full GNU General Public License is included in this distribution in - the file called "COPYING". - - Contact Information: - Openair Admin - Mailing List - Forums http://forums.eurecom.fr/openairinterface - Eurecom, 2229, route des cretes, 06560 Valbonne Sophia Antipolis, France - -*******************************************************************************/ -/*________________________OPENAIR/OPENAIR3/________________________ - - File : INSTALL - Authors : OpenAir3 - Company : EURECOM - Emails : openair3@eurecom.fr -________________________________________________________________*/ - -------------------------- -Table of contents -------------------------- - -The content of this readme is the following: - - 0) System requirements - 1) Installation of SYSLOGs Servers on MAGs (it has to be done only on MAG machines) - 2) EURECOM FreeRadius Installation - 2.1) FreeRadius client installation (concern only MAG machines) - 2.2) FreeRadius Server installation (concern only LMA machines) - 3) PMIP6D Compilation - 4) Change MAC addresses on other MAGs - ------------------------------------------ -0) System Requirements ------------------------------------------ - - We validated that PMIP6D runs under UBUNTU 10.04 x86 LTS version. For this reason, we highly recommend you to use this UBUNTU version. - However, we don't exclude that it might also work with other linux systems. - -------------------------------------------------------------------------------- -1) Installation of SYSLOGs Servers on MAGs (It does not have to be done on LMA) -------------------------------------------------------------------------------- - - 1.1) Each MAG machine has to run a SYSLOG Server on it. - So on each machine that you use as MAG, you have to install a SYSLOG server : - Installation of the SOCKLOG and SYSKLOGD packages : - $ apt-get install socklog sysklogd - - Edit and change the Syslog server configuration : - $ gedit /etc/syslog.conf - -> In this file, look for the line containing local7.info and change it to have this -> "local7.info /var/log/pmip_syslog.log" - -> In case the line wouldn't exist, go at the bottom of the text file and add this line "local7.info /var/log/pmip_syslog.log" - $ touch /var/log/pmip_syslog.log - -> The file has to exist before to be used - $ gedit /etc/default/syslogd - -> You should have the option "-r" enabled for the SYSLOG Daemon. So be sure you have -> SYSLOGD="-r" - $ /etc/init.d/sysklogd restart - -> We restart the syslog daemon to take into account the modifications we just did - - 1.2) Each Access Point should have their SYSLOG client enabled and configured. - So on each Access Point you have to do what follows : - For example on a CISCO SERIES 1100 ACCESS POINT web interface, you should go to EVENT LOG, then to CONFIGURATION and then add the MAG IP Address on which the syslog server is running. - Access Point Web Interface (10.0.0.1) --> EVENT LOG --> CONF --> Put SYSLOG SERVER's IP ADDRESS - ----------------------------------------------------------------------- -2) EURECOM FreeRadius Installation ----------------------------------------------------------------------- - - Since the FreeRADIUS Client v1.1.6 from freeradius.org is limited to IPv4 protocol, we modified it in order to use only IPv6. - The Freeradius clients has to installed on all LMA and MAG. - - FYI, "THEGOODPATH" indicates the path where you downloaded PMIPv6_v0.4.1. We suggest you to copy everything in "/usr/local/src". - Each line starting by a "$" are commands to be executed in a shell. - - 2.1) FreeRadius client installation (It has to be installed on all MAGs and LMAs) - $ cd THEGOODPATH/freeradiusclient-1.1.6/ - $ autoreconf -i - $ ./configure - $ make - $ make install - - On all the MAGs, do as follows : - In the "/etc/hosts" file, you have to tell the ipv6 address of the FreeRadius Server - $ gedit /etc/hosts - At the bottom of the file, type for example : "2001:100::1 radius6server" - - To let PMIP6D find Freeradius libraries, execute what follows : - $ gedit /etc/ld.so.conf - Add at the bottom of the file this line -> "include /usr/local/lib/". Save and exit. - $ ldconfig - - 2.2) FreeRadius Server installation (Has to be done only on LMAs) - - Now we proceed to the FreeRadius Server 2.1.12 installation : - We will get the code from http://freeradius.org/ website, and download the 2.1.12 FreeRADIUS server source code (2.5 MB) - $ wget ftp://ftp.freeradius.org/pub/freeradius/freeradius-server-2.1.12.tar.bz2 - $ tar xjf freeradius-server-2.1.12.tar.bz2 - $ cd freeradius-server-2.1.12 - $ ./configure - $ make - $ make install - - You need now to copy three configuration files to the FreeRADIUS server in order to correctly connect the clients. - $ cd THEGOODPATH/freeradiusclient-1.1.6/examples/ - $ cp users /usr/local/etc/raddb/ - $ gedit /usr/local/etc/raddb/users - N.B: This file contains all the Mobile Node MAC addresses authorised in the PMIP6D domain. Please update it with your data. - $ cp radiusd.conf /usr/local/etc/raddb/ - N.B: This file contains all the information required for the connection, authentication between the Server and clients (MAGs). - $ cp clients.conf /usr/local/etc/raddb/ - N.B: This file contains the list of authorised clients (MAGs). Please update this file with all your MAGs information. - ------------------------------------------------------ -3) PMIP6D Compilation (To be done on LMAs and MAGs) ------------------------------------------------------ - Execute the following commands : - $ cd THEGOODPATH/pmipv6-daemon-umip-0.4/ - $ autoreconf -i - $ ./configure - $ make - $ make install - - WARNING : If you have some issues during the PMIP6D compilation, please look into the BUGS file. - If you are still facing any issue, please report it to us using the following email "openair3@eurecom.fr" - ------------------------------------------ -4) Change MAC addresses on other MAGs ------------------------------------------ - - 4.1) One of the specificity of a PMIP Domain is that the Mobile Node should not be aware of its mobility inside the PMIP Domain. - One of the way to achieve this is to copy the MAC Address of one of the MAG and duplicate it for all other MAGs. - So in the configuration scripts we force the ingress MAG address to a predefined MAC address: 00:11:22:33:44:55 with the help of the macchanger executable. - If you have a look to "THEGOODPATH/pmipv6-daemon-umip-0.4/extras/UMIP0.4_MAG2_UBUNTU.10.04.py" file, you will notice that we achieve this automatically via the configuration script. - - Moreover, your Access Points should not add their MAC Address to the IP Packets that they forward. To do this, you should put your Access Points in a MASQUERADING mode. diff --git a/openair3/PMIPv6/INSTALL.kernel b/openair3/PMIPv6/INSTALL.kernel deleted file mode 100644 index 99a96d35d6..0000000000 --- a/openair3/PMIPv6/INSTALL.kernel +++ /dev/null @@ -1,137 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06410 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ -/*________________________OPENAIR/OPENAIR3/________________________ - - File : INSTALL.kernel - Authors : OpenAir3 - Company : EURECOM - Emails : openair3@eurecom.fr -________________________________________________________________*/ - -------------------------- -Table of contents -------------------------- - -The content of this file is the following: - - 0) PMIP6D - 1) HOW TO BUILD THE PROPER KERNEL - 1.1) Enable the required features in the kernel - 1.2) Kernel recompilation - - -0) PMIP6D -================================ -Proxy Mobile IPv6 (PMIPv6) is a network-based mobility management protocol for localized domains, which has been actively standardized by the IETF NETLMM Working Group. PMIPv6 is starting to attract much attention among telecommunication and internet communities due to its salient features and it is expected to expedite the real deployment of IP-based mobility management. - -Notice also that this release is for use with: -- i386, - -WARNING: The PMIP6D has been developped and validated under Linux UBUNTU 10.04 LTS distribution. - We can not confirm it will work with other systems however it might work with other UBUNTU systems. - -1) HOW TO BUILD THE PROPER KERNEL -================================= - -1.1) Enable the required features in the kernel ------------------------------------------------ - -Your current kernel DOES NOT require any patches in order to run PMIP6D, however you need to enable some already existing features in your kernel and recompile it. - -If you don't already have your kernel source installed on your machine, follow what is next. -Be sure to be connected to Internet, open a new shell and type : - $ apt-get update - $ apt-get install linux-source - $ cd /usr/src/ - $ tar xjf linux-source-XX.XX.XX (with XX.XX.XX depends on your system version) - $ ln -s /usr/src/linux-source-XX.XX.XX /usr/src/linux - -Now that you have your kernel source, we will configure them. -In your shell, execute : - $ apt-get install qt3-apps-dev g++ - $ cd /usr/src/linux-source-XX.XX.XX - -Run either : - $ make xconfig # (Qt-based) (recommended) - $ make gconfig # (GTK-based) - $ make menuconfig # (You need to install libncurses4-dev first) - -And set the features this way : -N.B: When you execute "make xconfig" all the features are set in a tree. For some features, you'll find in brackets the path in the kernel tree to reach the feature you want to enable. - - Required for every nodes : - CONFIG_EXPERIMENTAL=y (GENERAL SETUP -> PROMPT FOR DEV AND OR INCOMPLETE DRIVERS) - CONFIG_SYSVIPC=y (GENERAL SETUP -> SYSTEM V IPC) - CONFIG_PROC_FS=y - CONFIG_NET=y (NETWORKING SUPPORT -> NETWORKING OPTIONS -> TCP/IP NETWORKING) - CONFIG_INET=y (NETWORKING SUPPORT -> NETWORKING OPTIONS -> TCP/IP NETWORKING) - CONFIG_IPV6=y (NETWORKING SUPPORT -> NETWORKING OPTIONS -> TCP/IP NETWORKING) - CONFIG_IPV6_MIP6=y (NETWORKING SUPPORT -> NETWORKING OPTIONS -> IPV6 PROTOCOL) - CONFIG_XFRM=y - CONFIG_XFRM_USER=y (NETWORKING SUPPORT -> NETWORKING OPTIONS -> TRANSFORMATION USER CONFIGURATION INTERFACE) - CONFIG_XFRM_SUB_POLICY=y (NETWORKING SUPPORT -> NETWORKING OPTIONS -> TRANSFORMATION SUB POLICY SUPPORT) - CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION=y (NETWORKING SUPPORT -> NETWORKING OPTIONS -> IPV6 PROTOCOL -> IPV6: MIPV6 ROUTE OPTIMISATION MODE) - - The Home Agent and Mobile Node also need: - CONFIG_IPV6_TUNNEL=y (NETWORKING SUPPORT -> NETWORKING OPTIONS -> IPV6 PROTOCOL -> IPV6: IPV6 IN IPV6 TUNNEL) - CONFIG_IP_ADVANCED_ROUTER=y (NETWORKING SUPPORT -> NETWORKING OPTIONS -> IP: ADVANCED ROUTER) - CONFIG_IPV6_MULTIPLE_TABLES=y - - The Mobile Node also needs: - CONFIG_IPV6_SUBTREES=y - - For some additional movement indicators on the Mobile Node you may set: - CONFIG_ARPD=y (NETWORKING SUPPORT -> NETWORKING OPTIONS -> IP: ARP DAEMON SUPPORT) - - For IPsec support you need at least: - CONFIG_INET6_ESP=y (NETWORKING SUPPORT -> NETWORKING OPTIONS -> IPV6 PROTOCOL -> IPV6 ESP TRANSFORMATION) - - If you plan to use IPsec tunnel mode you need: - CONFIG_NET_KEY=y (NETWORKING SUPPORT -> NETWORKING OPTIONS -> PF_KEY SOCKETS) - CONFIG_NET_KEY_MIGRATE=y (NETWORKING SUPPORT -> NETWORKING OPTIONS -> PF_KEY SOCKETS -> PF_KEY MIGRATE) - Do not turn CONFIG_IPV6_MIP6_DEBUG on - -In order to be sure, you did it in a proper way, there is a script in the PMIP6D directory which is capable of checking if the kernel settings are set correctly. -To check your kernel, open a new shell, go to your PMIP6D directory and type : - $ ./chkconf_kernel.sh /usr/src/linux-source-XX.XX.XX - -1.2) Kernel recompilation ------------------------------------------------ - -Now that you gave the good options to your kernel, we need to recompile it. - $ cd /usr/src/linux-source-XX.XX.XX - $ make && make modules_install && make install - N.B: If you have many cores in your CPU and wand to use all of them in order to make the compilation faster, you might add "-jX" option to your "make" command with X=nb of core. For example for a dual-core CPU, type "make -j2". For a quad-core CPU, type "make -j4" - - $ mkinitramfs -o /boot/initrd.img-XX.XX.XX XX.XX.XX - $ update-grub - N.B: If your computer does not reboot on the good kernel, edit and update the "default" line inside the following file -> /boot/grub/grub.cfg - - You should now reboot your system in order to take into account modifications you made on your kernel - $ reboot diff --git a/openair3/PMIPv6/README.first b/openair3/PMIPv6/README.first deleted file mode 100644 index 0723268626..0000000000 --- a/openair3/PMIPv6/README.first +++ /dev/null @@ -1,126 +0,0 @@ -/******************************************************************************* - - OPENAIRINTERFACE 0/1/2/3 - Copyright(c) 1999 - 2010 EURECOM - - This program is free software; you can redistribute it and/or modify it - under the terms and conditions of the GNU General Public License, - version 2, as published by the Free Software Foundation. - - This program is distributed in the hope it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - more details. - - You should have received a copy of the GNU General Public License along with - this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - - The full GNU General Public License is included in this distribution in - the file called "COPYING". - - Contact Information: - Openair Admin - Mailing List - Forums http://forums.eurecom.fr/openairinterface - Eurecom, 2229, route des cretes, 06560 Valbonne Sophia Antipolis, France - -*******************************************************************************/ -/*________________________OPENAIR/OPENAIR3/________________________ - - File : README - Authors : OpenAir3 - Company : EURECOM - Emails : openair3@eurecom.fr -________________________________________________________________*/ - - -------------------------- -Table of contents -------------------------- - -The content of this README is the following: - - 1) What is this block about in OpenAirInterface - 2) Folders and files description - 3) Organization of the folders and their dependencies - 4) Hardware requirement and How to build PMIP6D - 5) How to run a simple experimentation - ------------------------------------------------- -1) What is this block about in OpenAirInterface ? ------------------------------------------------ - - Proxy Mobile IPv6 (or PMIPv6, or PMIP) is a network-based mobility management protocol standardized by IETF. It is a protocol for building a common and access technology independent of mobile core networks, accommodating various access technologies such as WiMAX, 3GPP, 3GPP2 and WLAN based access architectures. Proxy Mobile IPv6 is the only network-based mobility management protocol standardized by IETF. - ------------------------------------------ -2) Folders and files description ------------------------------------------ - - File/Folder Description - ----------- ----------- - - - freeradius-client-1.1.6/ contains files for the Radius client - - examples contains FreeRADIUS server configuration file examples - - - mipv6-daemon-umip-0.4/ contains files distributed with MIPL linux package - - extras/ contains example configuration files and scripts for lauching executables - - include/ contains files distributed with MIPL linux package - - libmissing/ contains files distributed with MIPL linux package - - libnetlink/ contains files distributed with MIPL linux package - - man/ contains manual files of MIPL and PMIP - - src/ contains files distributed with MIPL linux package - - src/pmip/ contains PMIP files - - ----------------------------------------------------- -3) Organization of the folders and their dependencies ----------------------------------------------------- - - The 2 folders have the following structures : - - - freeradius-client-1.1.6/ is the FreeRADIUS client v1.1.6 source code that we modified. - - - pmipv6-daemon-umip-0.4/ is the Proxy Mobile IPv6 code built on top of UMIP 0.4 - - PMIP6D is quite independent from the other OpenAirInterface blocks. - ------------------------------------------ - 4) Hardware requirement and How to build PMIP6D ------------------------------------------ - 4.1) HARDWARE REQUIREMENT - - In our PMIP6D implementation, the Mobile Node's attachment and detachment phases are done at layer 2 using SYSLOG messages exchanged between the Access Point and the MAG. - Thus, it's mandatory for your Access Point to act as SYSLOG client. - - 4.2) HOW TO BUILD PMIP6D - - WARNING: The PMIP6D has been developped and validated under Linux UBUNTU 10.04 LTS x86 distribution. - We can not confirm it will work with other systems. - - In this document, "$THEGOODPATH" indicates the directory path where you place the PMIP6D code. (we suggest you to place it there -> /usr/local/src/) - - 4.2.1) Installation of the required packages on MAG and LMA machines : - libpcap-dev / indent / bison / flex / iproute-dev / macchanger / libc6-dev / libssl-dev / autoconf / libtool / python-netaddr - Open a new shell and type : - $ apt-get install libpcap-dev indent bison flex iproute-dev libc6-dev libssl-dev autoconf libtool macchanger python-netaddr - - 4.2.2) Kernel recompilation - PMIP6D does not require to modify/patch the kernel, however some features are by default disabled inside the official Ubuntu kernels and we need to enable them. - Follow the "INSTALL.kernel" text file to know how to set up correctly your kernel. - - 4.2.3) Proxy Mobile-IPv6 Daemon and FreeRADIUS installation - Follow the "INSTALL" text file to know how to build PMIP6D tool. - ----------------------------------------------------------------- - 5) How to run a simple experimentation ----------------------------------------------------------------- - - In order to create a PMIP domain composed of 3 nodes (1 LMA + 2 MAGS) (see the picture "$THEGOODPATH/pmipv6-daemon-umip-0.4/src/pmip/docs/images/PMIPv6_schema_example_1LMA_2MRs.jpg"): - - LMA, MAG1 and MAG2 are in the same network which has for IPv6 prefix 2001:100::/64 - With LMA: Ethernet1=2001:100::1 / MAG1: Ethernet1=2001:100::2 & Ethernet2=2001:1::2 / MAG2: Ethernet1=2001:100::3 & Ethernet2=2001:1::3 - - On LMA execute -> ./$THEGOODPATH/pmipv6-daemon-umip-0.4/extras/UMIP0.4_LMA_UBUNTU.10.04.py - On MAG1 execute -> ./$THEGOODPATH/pmipv6-daemon-umip-0.4/extras/UMIP0.4_MAG1_UBUNTU.10.04.py - On MAG2 execute -> ./$THEGOODPATH/pmipv6-daemon-umip-0.4/extras/UMIP0.4_MAG2_UBUNTU.10.04.py diff --git a/openair3/PMIPv6/VERSION b/openair3/PMIPv6/VERSION deleted file mode 100644 index 83bdc9930a..0000000000 --- a/openair3/PMIPv6/VERSION +++ /dev/null @@ -1,2 +0,0 @@ -EURECOM -Proxy Mobile IPv6 Daemon - VERSION 0.4.1 (December 2011) diff --git a/openair3/PMIPv6/chkconf_kernel.sh b/openair3/PMIPv6/chkconf_kernel.sh deleted file mode 100755 index 174333629f..0000000000 --- a/openair3/PMIPv6/chkconf_kernel.sh +++ /dev/null @@ -1,89 +0,0 @@ -#!/bin/sh - -# Simple shell script to check kernel configuration sanity -# for use with MIPL Mobile IPv6 -# -# Author: Antti Tuominen -# -# $Id: chkconf_kernel.sh 1.3 05/05/16 12:15:16+03:00 vnuorval@tcs.hut.fi $ -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version -# 2 of the License, or (at your option) any later version. - - -# Default settings for kernel -EXPERIMENTAL=y -SYSVIPC=y -PROC_FS=y -NET=y -NET_KEY=y -NET_KEY_MIGRATE=y -INET=y -IPV6=y -INET6_ESP=y -IPV6_TUNNEL=y -IPV6_MULTIPLE_TABLES=y -IPV6_SUBTREES=y -IPV6_MIP6=y -XFRM=y -XFRM_USER=y -XFRM_SUB_POLICY=y -INET6_XFRM_MODE_ROUTEOPTIMIZATION=y - -COMMON="EXPERIMENTAL SYSVIPC PROC_FS NET INET IPV6 IPV6_MIP6 \ - XFRM XFRM_USER XFRM_SUB_POLICY INET6_XFRM_MODE_ROUTEOPTIMIZATION" - -MNHA="IPV6_TUNNEL IPV6_MULTIPLE_TABLES" - -MN="IPV6_SUBTREES" - -IPSEC="INET6_ESP" - -PFKEY="NET_KEY NET_KEY_MIGRATE" - -TAGS="$COMMON $MNHA $MN $IPSEC $PFKEY" - -if [ "$1" = "" ] ; then - KERNELCONFIG="/proc/config.gz" - CAT=zcat -else - LINUX=$1 - KERNELCONFIG="$LINUX/.config" - CAT=cat -fi - -if [ ! -f $KERNELCONFIG ] ; then - echo "$KERNELCONFIG does not exist." - exit 1 -fi - -WARN=0; - -echo -echo "Checking kernel configuration..." -echo "Using $KERNELCONFIG"; - -for TAG in $TAGS ; do - VAL=`$CAT $KERNELCONFIG | sed -ne "/$TAG[= ]/s/^CONFIG_$TAG[= ]//gp"`; - eval "DFLT=\$$TAG"; - if [ "$VAL" != "$DFLT" ] ; then - if [ -z "$VAL" ] ; then - VERDICT="not supported"; - else - VERDICT="$VAL"; - fi - echo " Warning: CONFIG_$TAG should be set to $DFLT ($VERDICT)"; - let WARN=$WARN+1; - fi -done - -echo -if [ $WARN -eq 0 ] ; then - echo "All kernel options are as they should."; -else - echo "Above $WARN options may conflict with MIPL."; - echo "If you are not sure, use the recommended setting."; -fi -echo diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/BUGS b/openair3/PMIPv6/freeradius-client-1.1.6/BUGS deleted file mode 100644 index 88d288f93b..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/BUGS +++ /dev/null @@ -1,22 +0,0 @@ -$Id: BUGS,v 1.2 2007/06/21 18:35:00 cparker Exp $ - -Testing can show the presense of bugs, but not their absence. - -- Dijkstra - -The get_seqnbr function in build_req.c sometimes returns the same -number, if invoked from multiple processes at the same time. This -occurs only if a lot of process try to read the sequence file, -so I suspect a race condition in the locking code, but I can't -find one. Any help is appreciated. - -Radlogin respectively send_server in sendserver.c does not honour a -ACCESS_CHALLENGE packet from the RADIUS server. - -There are interoperability problems with radiusd 1.16... but all the Merit -radiusds I tried worked (last one I tried 2.4.21). There is an option to -configure (--enable-radius-116) to kludge around this... It turned out to be -a bug in radiusd 1.16: it doesn't include the shared secret in the digest -calculation. See patches/radiusd-1.16.accounting.diff for a real fix. - -There are some issues that occur on occasion when defining clients with -hostnames, rather than dotted-quad IPs. diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/COPYRIGHT b/openair3/PMIPv6/freeradius-client-1.1.6/COPYRIGHT deleted file mode 100644 index f0d4be6556..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/COPYRIGHT +++ /dev/null @@ -1,135 +0,0 @@ -See the respective source files to find out which copyrights apply. - ------------------------------------------------------------------------------- -Copyright (c) 1998 The NetBSD Foundation, Inc. -All rights reserved. - -This code is derived from software contributed to The NetBSD Foundation -by Christos Zoulas. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. -3. All advertising materials mentioning features or use of this software - must display the following acknowledgement: - This product includes software developed by the NetBSD - Foundation, Inc. and its contributors. -4. Neither the name of The NetBSD Foundation nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS -``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED -TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS -BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -POSSIBILITY OF SUCH DAMAGE. ------------------------------------------------------------------------------- - ------------------------------------------------------------------------------- -Copyright (c) 2003 Maxim Sobolev -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS -OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF -SUCH DAMAGE. - ------------------------------------------------------------------------------- -Copyright (C) 1995,1996,1997,1998 Lars Fenneberg - -Permission to use, copy, modify, and distribute this software for any -purpose and without fee is hereby granted, provided that this copyright and -permission notice appear on all copies and supporting documentation, the -name of Lars Fenneberg not be used in advertising or publicity pertaining to -distribution of the program without specific prior permission, and notice be -given in supporting documentation that copying and distribution is by -permission of Lars Fenneberg. - -Lars Fenneberg makes no representations about the suitability of this -software for any purpose. It is provided "as is" without express or implied -warranty. - ------------------------------------------------------------------------------- -Copyright 1992 Livingston Enterprises, Inc. -Livingston Enterprises, Inc. 6920 Koll Center Parkway Pleasanton, CA 94566 - -Permission to use, copy, modify, and distribute this software for any -purpose and without fee is hereby granted, provided that this copyright -and permission notice appear on all copies and supporting documentation, -the name of Livingston Enterprises, Inc. not be used in advertising or -publicity pertaining to distribution of the program without specific -prior permission, and notice be given in supporting documentation that -copying and distribution is by permission of Livingston Enterprises, Inc. - -Livingston Enterprises, Inc. makes no representations about the suitability -of this software for any purpose. It is provided "as is" without express -or implied warranty. ------------------------------------------------------------------------------- -[C] The Regents of the University of Michigan and Merit Network, Inc. 1992, -1993, 1994, 1995 All Rights Reserved - -Permission to use, copy, modify, and distribute this software and its -documentation for any purpose and without fee is hereby granted, provided -that the above copyright notice and this permission notice appear in all -copies of the software and derivative works or modified versions thereof, -and that both the copyright notice and this permission and disclaimer -notice appear in supporting documentation. - -THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER -EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE REGENTS OF THE -UNIVERSITY OF MICHIGAN AND MERIT NETWORK, INC. DO NOT WARRANT THAT THE -FUNCTIONS CONTAINED IN THE SOFTWARE WILL MEET LICENSEE'S REQUIREMENTS OR -THAT OPERATION WILL BE UNINTERRUPTED OR ERROR FREE. The Regents of the -University of Michigan and Merit Network, Inc. shall not be liable for any -special, indirect, incidental or consequential damages with respect to any -claim by Licensee or any third party arising from use of the software. ------------------------------------------------------------------------------- -Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. -All rights reserved. - -License to copy and use this software is granted provided that it -is identified as the "RSA Data Security, Inc. MD5 Message-Digest -Algorithm" in all material mentioning or referencing this software -or this function. - -License is also granted to make and use derivative works provided -that such works are identified as "derived from the RSA Data -Security, Inc. MD5 Message-Digest Algorithm" in all material -mentioning or referencing the derived work. - -RSA Data Security, Inc. makes no representations concerning either -the merchantability of this software or the suitability of this -software for any particular purpose. It is provided "as is" -without express or implied warranty of any kind. - -These notices must be retained in any copies of any part of this -documentation and/or software. ------------------------------------------------------------------------------- diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/Makefile b/openair3/PMIPv6/freeradius-client-1.1.6/Makefile deleted file mode 100644 index 0916352e7f..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/Makefile +++ /dev/null @@ -1,740 +0,0 @@ -# Makefile.in generated by automake 1.11.1 from Makefile.am. -# Makefile. Generated from Makefile.in by configure. - -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, -# Inc. -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - - - -# -# $Id: Makefile.am,v 1.3 2006/03/14 17:14:27 janakj Exp $ -# -# Copyright (C) 1997 Lars Fenneberg -# -# See the file COPYRIGHT for the respective terms and conditions. -# If the file is missing contact me at lf@elemental.net -# and I'll send you a copy. -# -# - -pkgdatadir = $(datadir)/radiusclient -pkgincludedir = $(includedir)/radiusclient -pkglibdir = $(libdir)/radiusclient -pkglibexecdir = $(libexecdir)/radiusclient -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = i686-pc-linux-gnu -host_triplet = i686-pc-linux-gnu -target_triplet = i686-pc-linux-gnu -subdir = . -DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \ - $(srcdir)/Makefile.in $(srcdir)/config.h.in \ - $(top_srcdir)/configure config.guess config.sub depcomp \ - install-sh ltmain.sh missing mkinstalldirs -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/configure.in -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ - configure.lineno config.status.lineno -mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs -CONFIG_HEADER = config.h -CONFIG_CLEAN_FILES = -CONFIG_CLEAN_VPATH_FILES = -SOURCES = -DIST_SOURCES = -RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ - html-recursive info-recursive install-data-recursive \ - install-dvi-recursive install-exec-recursive \ - install-html-recursive install-info-recursive \ - install-pdf-recursive install-ps-recursive install-recursive \ - installcheck-recursive installdirs-recursive pdf-recursive \ - ps-recursive uninstall-recursive -RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ - distclean-recursive maintainer-clean-recursive -AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ - $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ - distdir dist dist-all distcheck -ETAGS = etags -CTAGS = ctags -DIST_SUBDIRS = $(SUBDIRS) -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -distdir = $(PACKAGE)-$(VERSION) -top_distdir = $(distdir) -am__remove_distdir = \ - { test ! -d "$(distdir)" \ - || { find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ - && rm -fr "$(distdir)"; }; } -am__relativize = \ - dir0=`pwd`; \ - sed_first='s,^\([^/]*\)/.*$$,\1,'; \ - sed_rest='s,^[^/]*/*,,'; \ - sed_last='s,^.*/\([^/]*\)$$,\1,'; \ - sed_butlast='s,/*[^/]*$$,,'; \ - while test -n "$$dir1"; do \ - first=`echo "$$dir1" | sed -e "$$sed_first"`; \ - if test "$$first" != "."; then \ - if test "$$first" = ".."; then \ - dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ - dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ - else \ - first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ - if test "$$first2" = "$$first"; then \ - dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ - else \ - dir2="../$$dir2"; \ - fi; \ - dir0="$$dir0"/"$$first"; \ - fi; \ - fi; \ - dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ - done; \ - reldir="$$dir2" -DIST_ARCHIVES = $(distdir).tar.gz -GZIP_ENV = --best -distuninstallcheck_listfiles = find . -type f -print -distcleancheck_listfiles = find . -type f -print -ACLOCAL = ${SHELL} /usr/local/src/freeradius-client-1.1.6/missing --run aclocal-1.11 -ALLOCA = -AMTAR = ${SHELL} /usr/local/src/freeradius-client-1.1.6/missing --run tar -AR = /usr/bin/ar -AUTOCONF = ${SHELL} /usr/local/src/freeradius-client-1.1.6/missing --run autoconf -AUTOHEADER = ${SHELL} /usr/local/src/freeradius-client-1.1.6/missing --run autoheader -AUTOMAKE = ${SHELL} /usr/local/src/freeradius-client-1.1.6/missing --run automake-1.11 -AWK = gawk -CC = gcc -CCDEPMODE = depmode=gcc3 -CFLAGS = -g -O2 -CPP = gcc -E -CPPFLAGS = -CYGPATH_W = echo -DEFS = -DHAVE_CONFIG_H -DEPDIR = .deps -DSYMUTIL = -DUMPBIN = -ECHO_C = -ECHO_N = -n -ECHO_T = -EGREP = /bin/grep -E -EXEEXT = -FGREP = /bin/grep -F -GREP = /bin/grep -INSTALL = /usr/bin/install -c -INSTALL_DATA = ${INSTALL} -m 644 -INSTALL_PROGRAM = ${INSTALL} -INSTALL_SCRIPT = ${INSTALL} -INSTALL_STRIP_PROGRAM = $(install_sh) -c -s -LD = /usr/bin/ld -LDFLAGS = -LIBOBJS = -LIBS = -lcrypt -lnsl -LIBTOOL = $(SHELL) $(top_builddir)/libtool -LIBVERSION = 2:0:0 -LIPO = -LN_S = ln -s -LTLIBOBJS = -MAINT = # -MAKEINFO = ${SHELL} /usr/local/src/freeradius-client-1.1.6/missing --run makeinfo -MKDIR_P = /bin/mkdir -p -NM = /usr/bin/nm -B -NMEDIT = -OBJDUMP = objdump -OBJEXT = o -OTOOL = -OTOOL64 = -PACKAGE = radiusclient -PACKAGE_BUGREPORT = -PACKAGE_NAME = -PACKAGE_STRING = -PACKAGE_TARNAME = -PACKAGE_URL = -PACKAGE_VERSION = -PATH_SEPARATOR = : -RANLIB = ranlib -RC_LOG_FACILITY = LOG_DAEMON -RC_SECURE_PATH = /bin:/usr/bin:/usr/local/bin -SED = /bin/sed -SET_MAKE = -SHELL = /bin/bash -STRIP = strip -VERSION = 1.1.6 -abs_builddir = /usr/local/src/freeradius-client-1.1.6 -abs_srcdir = /usr/local/src/freeradius-client-1.1.6 -abs_top_builddir = /usr/local/src/freeradius-client-1.1.6 -abs_top_srcdir = /usr/local/src/freeradius-client-1.1.6 -ac_ct_CC = gcc -ac_ct_DUMPBIN = -am__include = include -am__leading_dot = . -am__quote = -am__tar = ${AMTAR} chof - "$$tardir" -am__untar = ${AMTAR} xf - -bindir = ${exec_prefix}/bin -build = i686-pc-linux-gnu -build_alias = -build_cpu = i686 -build_os = linux-gnu -build_vendor = pc -builddir = . -datadir = ${datarootdir} -datarootdir = ${prefix}/share -docdir = ${datarootdir}/doc/${PACKAGE} -dvidir = ${docdir} -exec_prefix = ${prefix} -host = i686-pc-linux-gnu -host_alias = -host_cpu = i686 -host_os = linux-gnu -host_vendor = pc -htmldir = ${docdir} -includedir = ${prefix}/include -infodir = ${datarootdir}/info -install_sh = ${SHELL} /usr/local/src/freeradius-client-1.1.6/install-sh -libdir = ${exec_prefix}/lib -libexecdir = ${exec_prefix}/libexec -localedir = ${datarootdir}/locale -localstatedir = ${prefix}/var -lt_ECHO = echo -mandir = ${datarootdir}/man -mkdir_p = /bin/mkdir -p -oldincludedir = /usr/include -pdfdir = ${docdir} -pkgsysconfdir = ${prefix}/etc/radiusclient -prefix = /usr/local -program_transform_name = s,x,x, -psdir = ${docdir} -sbindir = ${exec_prefix}/sbin -sharedstatedir = ${prefix}/com -srcdir = . -sysconfdir = ${prefix}/etc -target = i686-pc-linux-gnu -target_alias = -target_cpu = i686 -target_os = linux-gnu -target_vendor = pc -top_build_prefix = -top_builddir = . -top_srcdir = . -AUTOMAKE_OPTIONS = foreign -INCLUDES = -D_GNU_SOURCE -SUBDIRS = include lib src etc man doc patches login.radius rpm -EXTRA_DIST = BUGS CHANGES COPYRIGHT README README.radexample -CLEANFILES = *~ -all: config.h - $(MAKE) $(AM_MAKEFLAGS) all-recursive - -.SUFFIXES: -am--refresh: - @: -$(srcdir)/Makefile.in: # $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \ - $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \ - && exit 0; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --foreign Makefile -.PRECIOUS: Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - echo ' $(SHELL) ./config.status'; \ - $(SHELL) ./config.status;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - $(SHELL) ./config.status --recheck - -$(top_srcdir)/configure: # $(am__configure_deps) - $(am__cd) $(srcdir) && $(AUTOCONF) -$(ACLOCAL_M4): # $(am__aclocal_m4_deps) - $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) -$(am__aclocal_m4_deps): - -config.h: stamp-h1 - @if test ! -f $@; then \ - rm -f stamp-h1; \ - $(MAKE) $(AM_MAKEFLAGS) stamp-h1; \ - else :; fi - -stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status - @rm -f stamp-h1 - cd $(top_builddir) && $(SHELL) ./config.status config.h -$(srcdir)/config.h.in: # $(am__configure_deps) - ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) - rm -f stamp-h1 - touch $@ - -distclean-hdr: - -rm -f config.h stamp-h1 - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs - -distclean-libtool: - -rm -f libtool config.lt - -# This directory's subdirectories are mostly independent; you can cd -# into them and run `make' without going through this Makefile. -# To change the values of `make' variables: instead of editing Makefiles, -# (1) if the variable is set in `config.status', edit `config.status' -# (which will cause the Makefiles to be regenerated when you run `make'); -# (2) otherwise, pass the desired values on the `make' command line. -$(RECURSIVE_TARGETS): - @fail= failcom='exit 1'; \ - for f in x $$MAKEFLAGS; do \ - case $$f in \ - *=* | --[!k]*);; \ - *k*) failcom='fail=yes';; \ - esac; \ - done; \ - dot_seen=no; \ - target=`echo $@ | sed s/-recursive//`; \ - list='$(SUBDIRS)'; for subdir in $$list; do \ - echo "Making $$target in $$subdir"; \ - if test "$$subdir" = "."; then \ - dot_seen=yes; \ - local_target="$$target-am"; \ - else \ - local_target="$$target"; \ - fi; \ - ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ - || eval $$failcom; \ - done; \ - if test "$$dot_seen" = "no"; then \ - $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ - fi; test -z "$$fail" - -$(RECURSIVE_CLEAN_TARGETS): - @fail= failcom='exit 1'; \ - for f in x $$MAKEFLAGS; do \ - case $$f in \ - *=* | --[!k]*);; \ - *k*) failcom='fail=yes';; \ - esac; \ - done; \ - dot_seen=no; \ - case "$@" in \ - distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ - *) list='$(SUBDIRS)' ;; \ - esac; \ - rev=''; for subdir in $$list; do \ - if test "$$subdir" = "."; then :; else \ - rev="$$subdir $$rev"; \ - fi; \ - done; \ - rev="$$rev ."; \ - target=`echo $@ | sed s/-recursive//`; \ - for subdir in $$rev; do \ - echo "Making $$target in $$subdir"; \ - if test "$$subdir" = "."; then \ - local_target="$$target-am"; \ - else \ - local_target="$$target"; \ - fi; \ - ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ - || eval $$failcom; \ - done && test -z "$$fail" -tags-recursive: - list='$(SUBDIRS)'; for subdir in $$list; do \ - test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ - done -ctags-recursive: - list='$(SUBDIRS)'; for subdir in $$list; do \ - test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ - done - -ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - mkid -fID $$unique -tags: TAGS - -TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - set x; \ - here=`pwd`; \ - if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ - include_option=--etags-include; \ - empty_fix=.; \ - else \ - include_option=--include; \ - empty_fix=; \ - fi; \ - list='$(SUBDIRS)'; for subdir in $$list; do \ - if test "$$subdir" = .; then :; else \ - test ! -f $$subdir/TAGS || \ - set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ - fi; \ - done; \ - list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - shift; \ - if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ - test -n "$$unique" || unique=$$empty_fix; \ - if test $$# -gt 0; then \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - "$$@" $$unique; \ - else \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$unique; \ - fi; \ - fi -ctags: CTAGS -CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - test -z "$(CTAGS_ARGS)$$unique" \ - || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$unique - -GTAGS: - here=`$(am__cd) $(top_builddir) && pwd` \ - && $(am__cd) $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) "$$here" - -distclean-tags: - -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - -distdir: $(DISTFILES) - $(am__remove_distdir) - test -d "$(distdir)" || mkdir "$(distdir)" - @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - list='$(DISTFILES)'; \ - dist_files=`for file in $$list; do echo $$file; done | \ - sed -e "s|^$$srcdirstrip/||;t" \ - -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ - case $$dist_files in \ - */*) $(MKDIR_P) `echo "$$dist_files" | \ - sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ - sort -u` ;; \ - esac; \ - for file in $$dist_files; do \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - if test -d $$d/$$file; then \ - dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test -d "$(distdir)/$$file"; then \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ - else \ - test -f "$(distdir)/$$file" \ - || cp -p $$d/$$file "$(distdir)/$$file" \ - || exit 1; \ - fi; \ - done - @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ - if test "$$subdir" = .; then :; else \ - test -d "$(distdir)/$$subdir" \ - || $(MKDIR_P) "$(distdir)/$$subdir" \ - || exit 1; \ - fi; \ - done - @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ - if test "$$subdir" = .; then :; else \ - dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ - $(am__relativize); \ - new_distdir=$$reldir; \ - dir1=$$subdir; dir2="$(top_distdir)"; \ - $(am__relativize); \ - new_top_distdir=$$reldir; \ - echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ - echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ - ($(am__cd) $$subdir && \ - $(MAKE) $(AM_MAKEFLAGS) \ - top_distdir="$$new_top_distdir" \ - distdir="$$new_distdir" \ - am__remove_distdir=: \ - am__skip_length_check=: \ - am__skip_mode_fix=: \ - distdir) \ - || exit 1; \ - fi; \ - done - -test -n "$(am__skip_mode_fix)" \ - || find "$(distdir)" -type d ! -perm -755 \ - -exec chmod u+rwx,go+rx {} \; -o \ - ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ - ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ - ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ - || chmod -R a+r "$(distdir)" -dist-gzip: distdir - tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz - $(am__remove_distdir) - -dist-bzip2: distdir - tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2 - $(am__remove_distdir) - -dist-lzma: distdir - tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma - $(am__remove_distdir) - -dist-xz: distdir - tardir=$(distdir) && $(am__tar) | xz -c >$(distdir).tar.xz - $(am__remove_distdir) - -dist-tarZ: distdir - tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z - $(am__remove_distdir) - -dist-shar: distdir - shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz - $(am__remove_distdir) - -dist-zip: distdir - -rm -f $(distdir).zip - zip -rq $(distdir).zip $(distdir) - $(am__remove_distdir) - -dist dist-all: distdir - tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz - $(am__remove_distdir) - -# This target untars the dist file and tries a VPATH configuration. Then -# it guarantees that the distribution is self-contained by making another -# tarfile. -distcheck: dist - case '$(DIST_ARCHIVES)' in \ - *.tar.gz*) \ - GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ - *.tar.bz2*) \ - bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ - *.tar.lzma*) \ - lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\ - *.tar.xz*) \ - xz -dc $(distdir).tar.xz | $(am__untar) ;;\ - *.tar.Z*) \ - uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ - *.shar.gz*) \ - GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ - *.zip*) \ - unzip $(distdir).zip ;;\ - esac - chmod -R a-w $(distdir); chmod a+w $(distdir) - mkdir $(distdir)/_build - mkdir $(distdir)/_inst - chmod a-w $(distdir) - test -d $(distdir)/_build || exit 0; \ - dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ - && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ - && am__cwd=`pwd` \ - && $(am__cd) $(distdir)/_build \ - && ../configure --srcdir=.. --prefix="$$dc_install_base" \ - $(DISTCHECK_CONFIGURE_FLAGS) \ - && $(MAKE) $(AM_MAKEFLAGS) \ - && $(MAKE) $(AM_MAKEFLAGS) dvi \ - && $(MAKE) $(AM_MAKEFLAGS) check \ - && $(MAKE) $(AM_MAKEFLAGS) install \ - && $(MAKE) $(AM_MAKEFLAGS) installcheck \ - && $(MAKE) $(AM_MAKEFLAGS) uninstall \ - && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ - distuninstallcheck \ - && chmod -R a-w "$$dc_install_base" \ - && ({ \ - (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ - && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ - && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ - && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ - distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ - } || { rm -rf "$$dc_destdir"; exit 1; }) \ - && rm -rf "$$dc_destdir" \ - && $(MAKE) $(AM_MAKEFLAGS) dist \ - && rm -rf $(DIST_ARCHIVES) \ - && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ - && cd "$$am__cwd" \ - || exit 1 - $(am__remove_distdir) - @(echo "$(distdir) archives ready for distribution: "; \ - list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ - sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' -distuninstallcheck: - @$(am__cd) '$(distuninstallcheck_dir)' \ - && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \ - || { echo "ERROR: files left after uninstall:" ; \ - if test -n "$(DESTDIR)"; then \ - echo " (check DESTDIR support)"; \ - fi ; \ - $(distuninstallcheck_listfiles) ; \ - exit 1; } >&2 -distcleancheck: distclean - @if test '$(srcdir)' = . ; then \ - echo "ERROR: distcleancheck can only run from a VPATH build" ; \ - exit 1 ; \ - fi - @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ - || { echo "ERROR: files left in build directory after distclean:" ; \ - $(distcleancheck_listfiles) ; \ - exit 1; } >&2 -check-am: all-am -check: check-recursive -all-am: Makefile config.h -installdirs: installdirs-recursive -installdirs-am: -install: install-recursive -install-exec: install-exec-recursive -install-data: install-data-recursive -uninstall: uninstall-recursive - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-recursive -install-strip: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install -mostlyclean-generic: - -clean-generic: - -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." -clean: clean-recursive - -clean-am: clean-generic clean-libtool mostlyclean-am - -distclean: distclean-recursive - -rm -f $(am__CONFIG_DISTCLEAN_FILES) - -rm -f Makefile -distclean-am: clean-am distclean-generic distclean-hdr \ - distclean-libtool distclean-tags - -dvi: dvi-recursive - -dvi-am: - -html: html-recursive - -html-am: - -info: info-recursive - -info-am: - -install-data-am: - -install-dvi: install-dvi-recursive - -install-dvi-am: - -install-exec-am: - -install-html: install-html-recursive - -install-html-am: - -install-info: install-info-recursive - -install-info-am: - -install-man: - -install-pdf: install-pdf-recursive - -install-pdf-am: - -install-ps: install-ps-recursive - -install-ps-am: - -installcheck-am: - -maintainer-clean: maintainer-clean-recursive - -rm -f $(am__CONFIG_DISTCLEAN_FILES) - -rm -rf $(top_srcdir)/autom4te.cache - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-recursive - -mostlyclean-am: mostlyclean-generic mostlyclean-libtool - -pdf: pdf-recursive - -pdf-am: - -ps: ps-recursive - -ps-am: - -uninstall-am: - -.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all \ - ctags-recursive install-am install-strip tags-recursive - -.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ - all all-am am--refresh check check-am clean clean-generic \ - clean-libtool ctags ctags-recursive dist dist-all dist-bzip2 \ - dist-gzip dist-lzma dist-shar dist-tarZ dist-xz dist-zip \ - distcheck distclean distclean-generic distclean-hdr \ - distclean-libtool distclean-tags distcleancheck distdir \ - distuninstallcheck dvi dvi-am html html-am info info-am \ - install install-am install-data install-data-am install-dvi \ - install-dvi-am install-exec install-exec-am install-html \ - install-html-am install-info install-info-am install-man \ - install-pdf install-pdf-am install-ps install-ps-am \ - install-strip installcheck installcheck-am installdirs \ - installdirs-am maintainer-clean maintainer-clean-generic \ - mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ - ps ps-am tags tags-recursive uninstall uninstall-am - - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/Makefile.am b/openair3/PMIPv6/freeradius-client-1.1.6/Makefile.am deleted file mode 100644 index 95415e6691..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/Makefile.am +++ /dev/null @@ -1,22 +0,0 @@ -# -# $Id: Makefile.am,v 1.3 2006/03/14 17:14:27 janakj Exp $ -# -# Copyright (C) 1997 Lars Fenneberg -# -# See the file COPYRIGHT for the respective terms and conditions. -# If the file is missing contact me at lf@elemental.net -# and I'll send you a copy. -# -# - -AUTOMAKE_OPTIONS = foreign - -INCLUDES = -D_GNU_SOURCE - -ACLOCAL = @ACLOCAL@ -LTLIBOBJS = @LTLIBOBJS@ - -SUBDIRS = include lib src etc man doc patches login.radius rpm -EXTRA_DIST = BUGS CHANGES COPYRIGHT README README.radexample - -CLEANFILES = *~ diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/Makefile.in b/openair3/PMIPv6/freeradius-client-1.1.6/Makefile.in deleted file mode 100644 index 8e91a84ad6..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/Makefile.in +++ /dev/null @@ -1,740 +0,0 @@ -# Makefile.in generated by automake 1.11.1 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, -# Inc. -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -@SET_MAKE@ - -# -# $Id: Makefile.am,v 1.3 2006/03/14 17:14:27 janakj Exp $ -# -# Copyright (C) 1997 Lars Fenneberg -# -# See the file COPYRIGHT for the respective terms and conditions. -# If the file is missing contact me at lf@elemental.net -# and I'll send you a copy. -# -# -VPATH = @srcdir@ -pkgdatadir = $(datadir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ -pkglibexecdir = $(libexecdir)/@PACKAGE@ -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = @build@ -host_triplet = @host@ -target_triplet = @target@ -subdir = . -DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \ - $(srcdir)/Makefile.in $(srcdir)/config.h.in \ - $(top_srcdir)/configure config.guess config.sub depcomp \ - install-sh ltmain.sh missing mkinstalldirs -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/configure.in -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ - configure.lineno config.status.lineno -mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs -CONFIG_HEADER = config.h -CONFIG_CLEAN_FILES = -CONFIG_CLEAN_VPATH_FILES = -SOURCES = -DIST_SOURCES = -RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ - html-recursive info-recursive install-data-recursive \ - install-dvi-recursive install-exec-recursive \ - install-html-recursive install-info-recursive \ - install-pdf-recursive install-ps-recursive install-recursive \ - installcheck-recursive installdirs-recursive pdf-recursive \ - ps-recursive uninstall-recursive -RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ - distclean-recursive maintainer-clean-recursive -AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ - $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ - distdir dist dist-all distcheck -ETAGS = etags -CTAGS = ctags -DIST_SUBDIRS = $(SUBDIRS) -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -distdir = $(PACKAGE)-$(VERSION) -top_distdir = $(distdir) -am__remove_distdir = \ - { test ! -d "$(distdir)" \ - || { find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ - && rm -fr "$(distdir)"; }; } -am__relativize = \ - dir0=`pwd`; \ - sed_first='s,^\([^/]*\)/.*$$,\1,'; \ - sed_rest='s,^[^/]*/*,,'; \ - sed_last='s,^.*/\([^/]*\)$$,\1,'; \ - sed_butlast='s,/*[^/]*$$,,'; \ - while test -n "$$dir1"; do \ - first=`echo "$$dir1" | sed -e "$$sed_first"`; \ - if test "$$first" != "."; then \ - if test "$$first" = ".."; then \ - dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ - dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ - else \ - first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ - if test "$$first2" = "$$first"; then \ - dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ - else \ - dir2="../$$dir2"; \ - fi; \ - dir0="$$dir0"/"$$first"; \ - fi; \ - fi; \ - dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ - done; \ - reldir="$$dir2" -DIST_ARCHIVES = $(distdir).tar.gz -GZIP_ENV = --best -distuninstallcheck_listfiles = find . -type f -print -distcleancheck_listfiles = find . -type f -print -ACLOCAL = @ACLOCAL@ -ALLOCA = @ALLOCA@ -AMTAR = @AMTAR@ -AR = @AR@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -CC = @CC@ -CCDEPMODE = @CCDEPMODE@ -CFLAGS = @CFLAGS@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CYGPATH_W = @CYGPATH_W@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -DSYMUTIL = @DSYMUTIL@ -DUMPBIN = @DUMPBIN@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -EXEEXT = @EXEEXT@ -FGREP = @FGREP@ -GREP = @GREP@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -LD = @LD@ -LDFLAGS = @LDFLAGS@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LIBTOOL = @LIBTOOL@ -LIBVERSION = @LIBVERSION@ -LIPO = @LIPO@ -LN_S = @LN_S@ -LTLIBOBJS = @LTLIBOBJS@ -MAINT = @MAINT@ -MAKEINFO = @MAKEINFO@ -MKDIR_P = @MKDIR_P@ -NM = @NM@ -NMEDIT = @NMEDIT@ -OBJDUMP = @OBJDUMP@ -OBJEXT = @OBJEXT@ -OTOOL = @OTOOL@ -OTOOL64 = @OTOOL64@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_URL = @PACKAGE_URL@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -RANLIB = @RANLIB@ -RC_LOG_FACILITY = @RC_LOG_FACILITY@ -RC_SECURE_PATH = @RC_SECURE_PATH@ -SED = @SED@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -STRIP = @STRIP@ -VERSION = @VERSION@ -abs_builddir = @abs_builddir@ -abs_srcdir = @abs_srcdir@ -abs_top_builddir = @abs_top_builddir@ -abs_top_srcdir = @abs_top_srcdir@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ -am__include = @am__include@ -am__leading_dot = @am__leading_dot@ -am__quote = @am__quote@ -am__tar = @am__tar@ -am__untar = @am__untar@ -bindir = @bindir@ -build = @build@ -build_alias = @build_alias@ -build_cpu = @build_cpu@ -build_os = @build_os@ -build_vendor = @build_vendor@ -builddir = @builddir@ -datadir = @datadir@ -datarootdir = @datarootdir@ -docdir = @docdir@ -dvidir = @dvidir@ -exec_prefix = @exec_prefix@ -host = @host@ -host_alias = @host_alias@ -host_cpu = @host_cpu@ -host_os = @host_os@ -host_vendor = @host_vendor@ -htmldir = @htmldir@ -includedir = @includedir@ -infodir = @infodir@ -install_sh = @install_sh@ -libdir = @libdir@ -libexecdir = @libexecdir@ -localedir = @localedir@ -localstatedir = @localstatedir@ -lt_ECHO = @lt_ECHO@ -mandir = @mandir@ -mkdir_p = @mkdir_p@ -oldincludedir = @oldincludedir@ -pdfdir = @pdfdir@ -pkgsysconfdir = @pkgsysconfdir@ -prefix = @prefix@ -program_transform_name = @program_transform_name@ -psdir = @psdir@ -sbindir = @sbindir@ -sharedstatedir = @sharedstatedir@ -srcdir = @srcdir@ -sysconfdir = @sysconfdir@ -target = @target@ -target_alias = @target_alias@ -target_cpu = @target_cpu@ -target_os = @target_os@ -target_vendor = @target_vendor@ -top_build_prefix = @top_build_prefix@ -top_builddir = @top_builddir@ -top_srcdir = @top_srcdir@ -AUTOMAKE_OPTIONS = foreign -INCLUDES = -D_GNU_SOURCE -SUBDIRS = include lib src etc man doc patches login.radius rpm -EXTRA_DIST = BUGS CHANGES COPYRIGHT README README.radexample -CLEANFILES = *~ -all: config.h - $(MAKE) $(AM_MAKEFLAGS) all-recursive - -.SUFFIXES: -am--refresh: - @: -$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \ - $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \ - && exit 0; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --foreign Makefile -.PRECIOUS: Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - echo ' $(SHELL) ./config.status'; \ - $(SHELL) ./config.status;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - $(SHELL) ./config.status --recheck - -$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) - $(am__cd) $(srcdir) && $(AUTOCONF) -$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) - $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) -$(am__aclocal_m4_deps): - -config.h: stamp-h1 - @if test ! -f $@; then \ - rm -f stamp-h1; \ - $(MAKE) $(AM_MAKEFLAGS) stamp-h1; \ - else :; fi - -stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status - @rm -f stamp-h1 - cd $(top_builddir) && $(SHELL) ./config.status config.h -$(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) - ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) - rm -f stamp-h1 - touch $@ - -distclean-hdr: - -rm -f config.h stamp-h1 - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs - -distclean-libtool: - -rm -f libtool config.lt - -# This directory's subdirectories are mostly independent; you can cd -# into them and run `make' without going through this Makefile. -# To change the values of `make' variables: instead of editing Makefiles, -# (1) if the variable is set in `config.status', edit `config.status' -# (which will cause the Makefiles to be regenerated when you run `make'); -# (2) otherwise, pass the desired values on the `make' command line. -$(RECURSIVE_TARGETS): - @fail= failcom='exit 1'; \ - for f in x $$MAKEFLAGS; do \ - case $$f in \ - *=* | --[!k]*);; \ - *k*) failcom='fail=yes';; \ - esac; \ - done; \ - dot_seen=no; \ - target=`echo $@ | sed s/-recursive//`; \ - list='$(SUBDIRS)'; for subdir in $$list; do \ - echo "Making $$target in $$subdir"; \ - if test "$$subdir" = "."; then \ - dot_seen=yes; \ - local_target="$$target-am"; \ - else \ - local_target="$$target"; \ - fi; \ - ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ - || eval $$failcom; \ - done; \ - if test "$$dot_seen" = "no"; then \ - $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ - fi; test -z "$$fail" - -$(RECURSIVE_CLEAN_TARGETS): - @fail= failcom='exit 1'; \ - for f in x $$MAKEFLAGS; do \ - case $$f in \ - *=* | --[!k]*);; \ - *k*) failcom='fail=yes';; \ - esac; \ - done; \ - dot_seen=no; \ - case "$@" in \ - distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ - *) list='$(SUBDIRS)' ;; \ - esac; \ - rev=''; for subdir in $$list; do \ - if test "$$subdir" = "."; then :; else \ - rev="$$subdir $$rev"; \ - fi; \ - done; \ - rev="$$rev ."; \ - target=`echo $@ | sed s/-recursive//`; \ - for subdir in $$rev; do \ - echo "Making $$target in $$subdir"; \ - if test "$$subdir" = "."; then \ - local_target="$$target-am"; \ - else \ - local_target="$$target"; \ - fi; \ - ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ - || eval $$failcom; \ - done && test -z "$$fail" -tags-recursive: - list='$(SUBDIRS)'; for subdir in $$list; do \ - test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ - done -ctags-recursive: - list='$(SUBDIRS)'; for subdir in $$list; do \ - test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ - done - -ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - mkid -fID $$unique -tags: TAGS - -TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - set x; \ - here=`pwd`; \ - if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ - include_option=--etags-include; \ - empty_fix=.; \ - else \ - include_option=--include; \ - empty_fix=; \ - fi; \ - list='$(SUBDIRS)'; for subdir in $$list; do \ - if test "$$subdir" = .; then :; else \ - test ! -f $$subdir/TAGS || \ - set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ - fi; \ - done; \ - list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - shift; \ - if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ - test -n "$$unique" || unique=$$empty_fix; \ - if test $$# -gt 0; then \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - "$$@" $$unique; \ - else \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$unique; \ - fi; \ - fi -ctags: CTAGS -CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - test -z "$(CTAGS_ARGS)$$unique" \ - || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$unique - -GTAGS: - here=`$(am__cd) $(top_builddir) && pwd` \ - && $(am__cd) $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) "$$here" - -distclean-tags: - -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - -distdir: $(DISTFILES) - $(am__remove_distdir) - test -d "$(distdir)" || mkdir "$(distdir)" - @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - list='$(DISTFILES)'; \ - dist_files=`for file in $$list; do echo $$file; done | \ - sed -e "s|^$$srcdirstrip/||;t" \ - -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ - case $$dist_files in \ - */*) $(MKDIR_P) `echo "$$dist_files" | \ - sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ - sort -u` ;; \ - esac; \ - for file in $$dist_files; do \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - if test -d $$d/$$file; then \ - dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test -d "$(distdir)/$$file"; then \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ - else \ - test -f "$(distdir)/$$file" \ - || cp -p $$d/$$file "$(distdir)/$$file" \ - || exit 1; \ - fi; \ - done - @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ - if test "$$subdir" = .; then :; else \ - test -d "$(distdir)/$$subdir" \ - || $(MKDIR_P) "$(distdir)/$$subdir" \ - || exit 1; \ - fi; \ - done - @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ - if test "$$subdir" = .; then :; else \ - dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ - $(am__relativize); \ - new_distdir=$$reldir; \ - dir1=$$subdir; dir2="$(top_distdir)"; \ - $(am__relativize); \ - new_top_distdir=$$reldir; \ - echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ - echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ - ($(am__cd) $$subdir && \ - $(MAKE) $(AM_MAKEFLAGS) \ - top_distdir="$$new_top_distdir" \ - distdir="$$new_distdir" \ - am__remove_distdir=: \ - am__skip_length_check=: \ - am__skip_mode_fix=: \ - distdir) \ - || exit 1; \ - fi; \ - done - -test -n "$(am__skip_mode_fix)" \ - || find "$(distdir)" -type d ! -perm -755 \ - -exec chmod u+rwx,go+rx {} \; -o \ - ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ - ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ - ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ - || chmod -R a+r "$(distdir)" -dist-gzip: distdir - tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz - $(am__remove_distdir) - -dist-bzip2: distdir - tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2 - $(am__remove_distdir) - -dist-lzma: distdir - tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma - $(am__remove_distdir) - -dist-xz: distdir - tardir=$(distdir) && $(am__tar) | xz -c >$(distdir).tar.xz - $(am__remove_distdir) - -dist-tarZ: distdir - tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z - $(am__remove_distdir) - -dist-shar: distdir - shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz - $(am__remove_distdir) - -dist-zip: distdir - -rm -f $(distdir).zip - zip -rq $(distdir).zip $(distdir) - $(am__remove_distdir) - -dist dist-all: distdir - tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz - $(am__remove_distdir) - -# This target untars the dist file and tries a VPATH configuration. Then -# it guarantees that the distribution is self-contained by making another -# tarfile. -distcheck: dist - case '$(DIST_ARCHIVES)' in \ - *.tar.gz*) \ - GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ - *.tar.bz2*) \ - bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ - *.tar.lzma*) \ - lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\ - *.tar.xz*) \ - xz -dc $(distdir).tar.xz | $(am__untar) ;;\ - *.tar.Z*) \ - uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ - *.shar.gz*) \ - GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ - *.zip*) \ - unzip $(distdir).zip ;;\ - esac - chmod -R a-w $(distdir); chmod a+w $(distdir) - mkdir $(distdir)/_build - mkdir $(distdir)/_inst - chmod a-w $(distdir) - test -d $(distdir)/_build || exit 0; \ - dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ - && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ - && am__cwd=`pwd` \ - && $(am__cd) $(distdir)/_build \ - && ../configure --srcdir=.. --prefix="$$dc_install_base" \ - $(DISTCHECK_CONFIGURE_FLAGS) \ - && $(MAKE) $(AM_MAKEFLAGS) \ - && $(MAKE) $(AM_MAKEFLAGS) dvi \ - && $(MAKE) $(AM_MAKEFLAGS) check \ - && $(MAKE) $(AM_MAKEFLAGS) install \ - && $(MAKE) $(AM_MAKEFLAGS) installcheck \ - && $(MAKE) $(AM_MAKEFLAGS) uninstall \ - && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ - distuninstallcheck \ - && chmod -R a-w "$$dc_install_base" \ - && ({ \ - (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ - && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ - && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ - && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ - distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ - } || { rm -rf "$$dc_destdir"; exit 1; }) \ - && rm -rf "$$dc_destdir" \ - && $(MAKE) $(AM_MAKEFLAGS) dist \ - && rm -rf $(DIST_ARCHIVES) \ - && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ - && cd "$$am__cwd" \ - || exit 1 - $(am__remove_distdir) - @(echo "$(distdir) archives ready for distribution: "; \ - list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ - sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' -distuninstallcheck: - @$(am__cd) '$(distuninstallcheck_dir)' \ - && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \ - || { echo "ERROR: files left after uninstall:" ; \ - if test -n "$(DESTDIR)"; then \ - echo " (check DESTDIR support)"; \ - fi ; \ - $(distuninstallcheck_listfiles) ; \ - exit 1; } >&2 -distcleancheck: distclean - @if test '$(srcdir)' = . ; then \ - echo "ERROR: distcleancheck can only run from a VPATH build" ; \ - exit 1 ; \ - fi - @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ - || { echo "ERROR: files left in build directory after distclean:" ; \ - $(distcleancheck_listfiles) ; \ - exit 1; } >&2 -check-am: all-am -check: check-recursive -all-am: Makefile config.h -installdirs: installdirs-recursive -installdirs-am: -install: install-recursive -install-exec: install-exec-recursive -install-data: install-data-recursive -uninstall: uninstall-recursive - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-recursive -install-strip: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install -mostlyclean-generic: - -clean-generic: - -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." -clean: clean-recursive - -clean-am: clean-generic clean-libtool mostlyclean-am - -distclean: distclean-recursive - -rm -f $(am__CONFIG_DISTCLEAN_FILES) - -rm -f Makefile -distclean-am: clean-am distclean-generic distclean-hdr \ - distclean-libtool distclean-tags - -dvi: dvi-recursive - -dvi-am: - -html: html-recursive - -html-am: - -info: info-recursive - -info-am: - -install-data-am: - -install-dvi: install-dvi-recursive - -install-dvi-am: - -install-exec-am: - -install-html: install-html-recursive - -install-html-am: - -install-info: install-info-recursive - -install-info-am: - -install-man: - -install-pdf: install-pdf-recursive - -install-pdf-am: - -install-ps: install-ps-recursive - -install-ps-am: - -installcheck-am: - -maintainer-clean: maintainer-clean-recursive - -rm -f $(am__CONFIG_DISTCLEAN_FILES) - -rm -rf $(top_srcdir)/autom4te.cache - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-recursive - -mostlyclean-am: mostlyclean-generic mostlyclean-libtool - -pdf: pdf-recursive - -pdf-am: - -ps: ps-recursive - -ps-am: - -uninstall-am: - -.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all \ - ctags-recursive install-am install-strip tags-recursive - -.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ - all all-am am--refresh check check-am clean clean-generic \ - clean-libtool ctags ctags-recursive dist dist-all dist-bzip2 \ - dist-gzip dist-lzma dist-shar dist-tarZ dist-xz dist-zip \ - distcheck distclean distclean-generic distclean-hdr \ - distclean-libtool distclean-tags distcleancheck distdir \ - distuninstallcheck dvi dvi-am html html-am info info-am \ - install install-am install-data install-data-am install-dvi \ - install-dvi-am install-exec install-exec-am install-html \ - install-html-am install-info install-info-am install-man \ - install-pdf install-pdf-am install-ps install-ps-am \ - install-strip installcheck installcheck-am installdirs \ - installdirs-am maintainer-clean maintainer-clean-generic \ - mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ - ps ps-am tags tags-recursive uninstall uninstall-am - - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/README b/openair3/PMIPv6/freeradius-client-1.1.6/README deleted file mode 100644 index 7a62aa60bc..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/README +++ /dev/null @@ -1,52 +0,0 @@ -$Id: README,v 1.7 2007/03/02 15:05:56 cparker Exp $ - -FreeRADIUS Client is a framework and library for writing RADIUS Clients -which additionally includes radlogin, a flexible RADIUS aware login -replacement, a command line program to send RADIUS accounting records -and a utility to query the status of a (Merit) RADIUS server. - -All these programs are based on a library which lets you develop a -RADIUS-aware application in less than 50 lines of C code. - -The most current documentation is available online at: - http://wiki.freeradius.org/Radiusclient - -It is highly portable and runs on Linux, many BSD variants and Solaris. - -FreeRADIUS Client is known to compile on the following platforms: - - Compiled on: - - i386-pc-bsdi2.1 - sparc-unknown-netbsd1.2.1 - i386-unknown-freebsd2.2.6 - - Compiled and tested on: - - x86 Linux - x86_64 Linux - sparc-sun-solaris2.5.1 - -********* SECURITY NOTE ********* - -This code has not yet been fully audited by the FreeRADIUS project, as it -has only recently been adopted by the FreeRADIUS project to continue -development and support. Any security related issues should be reported -to the project either via email: - - security at freeradius dot org - -or via the FreeRADIUS bugtracker: - - http://bugs.freeradius.org/enter_bug.cgi?product=freeradius-client - -As is the case with any open-source project, patches in addition to -bug reports are always welcome. - -Additional Security related information on the FreeRADIUS project: - - http://www.freeradius.org/security.html - -********* END SECURITY NOTE ********* - - diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/README.radexample b/openair3/PMIPv6/freeradius-client-1.1.6/README.radexample deleted file mode 100644 index c549365c19..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/README.radexample +++ /dev/null @@ -1,12 +0,0 @@ -$Id: README.radexample,v 1.1.1.1 2003/12/02 10:39:17 sobomax Exp $ - -In src/radexample.c is a small example on how to use the library -lib/libradclient.a. - -You only need to include radiusclient.h into your applications and link -against the library. For this example to work your radiusclient config file -has to be setup right. - -I make no guarantees that the library interface stays the same as -radiusclient evolves, but I think that the whole thing is so simple that the -changes to source code which uses this library should always be trivial. diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/aclocal.m4 b/openair3/PMIPv6/freeradius-client-1.1.6/aclocal.m4 deleted file mode 100644 index c5f3fc1a85..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/aclocal.m4 +++ /dev/null @@ -1,8969 +0,0 @@ -# generated automatically by aclocal 1.11.1 -*- Autoconf -*- - -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, -# 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -m4_ifndef([AC_AUTOCONF_VERSION], - [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl -m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.65],, -[m4_warning([this file was generated for autoconf 2.65. -You have another version of autoconf. It may work, but is not guaranteed to. -If you have problems, you may need to regenerate the build system entirely. -To do so, use the procedure documented by the package, typically `autoreconf'.])]) - -# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- -# -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, -# 2006, 2007, 2008 Free Software Foundation, Inc. -# Written by Gordon Matzigkeit, 1996 -# -# This file is free software; the Free Software Foundation gives -# unlimited permission to copy and/or distribute it, with or without -# modifications, as long as this notice is preserved. - -m4_define([_LT_COPYING], [dnl -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, -# 2006, 2007, 2008 Free Software Foundation, Inc. -# Written by Gordon Matzigkeit, 1996 -# -# This file is part of GNU Libtool. -# -# GNU Libtool is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License as -# published by the Free Software Foundation; either version 2 of -# the License, or (at your option) any later version. -# -# As a special exception to the GNU General Public License, -# if you distribute this file as part of a program or library that -# is built using GNU Libtool, you may include this file under the -# same distribution terms that you use for the rest of that program. -# -# GNU Libtool is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with GNU Libtool; see the file COPYING. If not, a copy -# can be downloaded from http://www.gnu.org/licenses/gpl.html, or -# obtained by writing to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -]) - -# serial 56 LT_INIT - - -# LT_PREREQ(VERSION) -# ------------------ -# Complain and exit if this libtool version is less that VERSION. -m4_defun([LT_PREREQ], -[m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1, - [m4_default([$3], - [m4_fatal([Libtool version $1 or higher is required], - 63)])], - [$2])]) - - -# _LT_CHECK_BUILDDIR -# ------------------ -# Complain if the absolute build directory name contains unusual characters -m4_defun([_LT_CHECK_BUILDDIR], -[case `pwd` in - *\ * | *\ *) - AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;; -esac -]) - - -# LT_INIT([OPTIONS]) -# ------------------ -AC_DEFUN([LT_INIT], -[AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT -AC_BEFORE([$0], [LT_LANG])dnl -AC_BEFORE([$0], [LT_OUTPUT])dnl -AC_BEFORE([$0], [LTDL_INIT])dnl -m4_require([_LT_CHECK_BUILDDIR])dnl - -dnl Autoconf doesn't catch unexpanded LT_ macros by default: -m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl -m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl -dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4 -dnl unless we require an AC_DEFUNed macro: -AC_REQUIRE([LTOPTIONS_VERSION])dnl -AC_REQUIRE([LTSUGAR_VERSION])dnl -AC_REQUIRE([LTVERSION_VERSION])dnl -AC_REQUIRE([LTOBSOLETE_VERSION])dnl -m4_require([_LT_PROG_LTMAIN])dnl - -dnl Parse OPTIONS -_LT_SET_OPTIONS([$0], [$1]) - -# This can be used to rebuild libtool when needed -LIBTOOL_DEPS="$ltmain" - -# Always use our own libtool. -LIBTOOL='$(SHELL) $(top_builddir)/libtool' -AC_SUBST(LIBTOOL)dnl - -_LT_SETUP - -# Only expand once: -m4_define([LT_INIT]) -])# LT_INIT - -# Old names: -AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT]) -AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_PROG_LIBTOOL], []) -dnl AC_DEFUN([AM_PROG_LIBTOOL], []) - - -# _LT_CC_BASENAME(CC) -# ------------------- -# Calculate cc_basename. Skip known compiler wrappers and cross-prefix. -m4_defun([_LT_CC_BASENAME], -[for cc_temp in $1""; do - case $cc_temp in - compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; - distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; - \-*) ;; - *) break;; - esac -done -cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` -]) - - -# _LT_FILEUTILS_DEFAULTS -# ---------------------- -# It is okay to use these file commands and assume they have been set -# sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'. -m4_defun([_LT_FILEUTILS_DEFAULTS], -[: ${CP="cp -f"} -: ${MV="mv -f"} -: ${RM="rm -f"} -])# _LT_FILEUTILS_DEFAULTS - - -# _LT_SETUP -# --------- -m4_defun([_LT_SETUP], -[AC_REQUIRE([AC_CANONICAL_HOST])dnl -AC_REQUIRE([AC_CANONICAL_BUILD])dnl -_LT_DECL([], [host_alias], [0], [The host system])dnl -_LT_DECL([], [host], [0])dnl -_LT_DECL([], [host_os], [0])dnl -dnl -_LT_DECL([], [build_alias], [0], [The build system])dnl -_LT_DECL([], [build], [0])dnl -_LT_DECL([], [build_os], [0])dnl -dnl -AC_REQUIRE([AC_PROG_CC])dnl -AC_REQUIRE([LT_PATH_LD])dnl -AC_REQUIRE([LT_PATH_NM])dnl -dnl -AC_REQUIRE([AC_PROG_LN_S])dnl -test -z "$LN_S" && LN_S="ln -s" -_LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl -dnl -AC_REQUIRE([LT_CMD_MAX_LEN])dnl -_LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl -_LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl -dnl -m4_require([_LT_FILEUTILS_DEFAULTS])dnl -m4_require([_LT_CHECK_SHELL_FEATURES])dnl -m4_require([_LT_CMD_RELOAD])dnl -m4_require([_LT_CHECK_MAGIC_METHOD])dnl -m4_require([_LT_CMD_OLD_ARCHIVE])dnl -m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl - -_LT_CONFIG_LIBTOOL_INIT([ -# See if we are running on zsh, and set the options which allow our -# commands through without removal of \ escapes INIT. -if test -n "\${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST -fi -]) -if test -n "${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST -fi - -_LT_CHECK_OBJDIR - -m4_require([_LT_TAG_COMPILER])dnl -_LT_PROG_ECHO_BACKSLASH - -case $host_os in -aix3*) - # AIX sometimes has problems with the GCC collect2 program. For some - # reason, if we set the COLLECT_NAMES environment variable, the problems - # vanish in a puff of smoke. - if test "X${COLLECT_NAMES+set}" != Xset; then - COLLECT_NAMES= - export COLLECT_NAMES - fi - ;; -esac - -# Sed substitution that helps us do robust quoting. It backslashifies -# metacharacters that are still active within double-quoted strings. -sed_quote_subst='s/\([["`$\\]]\)/\\\1/g' - -# Same as above, but do not quote variable references. -double_quote_subst='s/\([["`\\]]\)/\\\1/g' - -# Sed substitution to delay expansion of an escaped shell variable in a -# double_quote_subst'ed string. -delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' - -# Sed substitution to delay expansion of an escaped single quote. -delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' - -# Sed substitution to avoid accidental globbing in evaled expressions -no_glob_subst='s/\*/\\\*/g' - -# Global variables: -ofile=libtool -can_build_shared=yes - -# All known linkers require a `.a' archive for static linking (except MSVC, -# which needs '.lib'). -libext=a - -with_gnu_ld="$lt_cv_prog_gnu_ld" - -old_CC="$CC" -old_CFLAGS="$CFLAGS" - -# Set sane defaults for various variables -test -z "$CC" && CC=cc -test -z "$LTCC" && LTCC=$CC -test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS -test -z "$LD" && LD=ld -test -z "$ac_objext" && ac_objext=o - -_LT_CC_BASENAME([$compiler]) - -# Only perform the check for file, if the check method requires it -test -z "$MAGIC_CMD" && MAGIC_CMD=file -case $deplibs_check_method in -file_magic*) - if test "$file_magic_cmd" = '$MAGIC_CMD'; then - _LT_PATH_MAGIC - fi - ;; -esac - -# Use C for the default configuration in the libtool script -LT_SUPPORTED_TAG([CC]) -_LT_LANG_C_CONFIG -_LT_LANG_DEFAULT_CONFIG -_LT_CONFIG_COMMANDS -])# _LT_SETUP - - -# _LT_PROG_LTMAIN -# --------------- -# Note that this code is called both from `configure', and `config.status' -# now that we use AC_CONFIG_COMMANDS to generate libtool. Notably, -# `config.status' has no value for ac_aux_dir unless we are using Automake, -# so we pass a copy along to make sure it has a sensible value anyway. -m4_defun([_LT_PROG_LTMAIN], -[m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl -_LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir']) -ltmain="$ac_aux_dir/ltmain.sh" -])# _LT_PROG_LTMAIN - - - -# So that we can recreate a full libtool script including additional -# tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS -# in macros and then make a single call at the end using the `libtool' -# label. - - -# _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS]) -# ---------------------------------------- -# Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later. -m4_define([_LT_CONFIG_LIBTOOL_INIT], -[m4_ifval([$1], - [m4_append([_LT_OUTPUT_LIBTOOL_INIT], - [$1 -])])]) - -# Initialize. -m4_define([_LT_OUTPUT_LIBTOOL_INIT]) - - -# _LT_CONFIG_LIBTOOL([COMMANDS]) -# ------------------------------ -# Register COMMANDS to be passed to AC_CONFIG_COMMANDS later. -m4_define([_LT_CONFIG_LIBTOOL], -[m4_ifval([$1], - [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS], - [$1 -])])]) - -# Initialize. -m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS]) - - -# _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS]) -# ----------------------------------------------------- -m4_defun([_LT_CONFIG_SAVE_COMMANDS], -[_LT_CONFIG_LIBTOOL([$1]) -_LT_CONFIG_LIBTOOL_INIT([$2]) -]) - - -# _LT_FORMAT_COMMENT([COMMENT]) -# ----------------------------- -# Add leading comment marks to the start of each line, and a trailing -# full-stop to the whole comment if one is not present already. -m4_define([_LT_FORMAT_COMMENT], -[m4_ifval([$1], [ -m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])], - [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.]) -)]) - - - - - -# _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?]) -# ------------------------------------------------------------------- -# CONFIGNAME is the name given to the value in the libtool script. -# VARNAME is the (base) name used in the configure script. -# VALUE may be 0, 1 or 2 for a computed quote escaped value based on -# VARNAME. Any other value will be used directly. -m4_define([_LT_DECL], -[lt_if_append_uniq([lt_decl_varnames], [$2], [, ], - [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name], - [m4_ifval([$1], [$1], [$2])]) - lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3]) - m4_ifval([$4], - [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])]) - lt_dict_add_subkey([lt_decl_dict], [$2], - [tagged?], [m4_ifval([$5], [yes], [no])])]) -]) - - -# _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION]) -# -------------------------------------------------------- -m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])]) - - -# lt_decl_tag_varnames([SEPARATOR], [VARNAME1...]) -# ------------------------------------------------ -m4_define([lt_decl_tag_varnames], -[_lt_decl_filter([tagged?], [yes], $@)]) - - -# _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..]) -# --------------------------------------------------------- -m4_define([_lt_decl_filter], -[m4_case([$#], - [0], [m4_fatal([$0: too few arguments: $#])], - [1], [m4_fatal([$0: too few arguments: $#: $1])], - [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)], - [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)], - [lt_dict_filter([lt_decl_dict], $@)])[]dnl -]) - - -# lt_decl_quote_varnames([SEPARATOR], [VARNAME1...]) -# -------------------------------------------------- -m4_define([lt_decl_quote_varnames], -[_lt_decl_filter([value], [1], $@)]) - - -# lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...]) -# --------------------------------------------------- -m4_define([lt_decl_dquote_varnames], -[_lt_decl_filter([value], [2], $@)]) - - -# lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...]) -# --------------------------------------------------- -m4_define([lt_decl_varnames_tagged], -[m4_assert([$# <= 2])dnl -_$0(m4_quote(m4_default([$1], [[, ]])), - m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]), - m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))]) -m4_define([_lt_decl_varnames_tagged], -[m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])]) - - -# lt_decl_all_varnames([SEPARATOR], [VARNAME1...]) -# ------------------------------------------------ -m4_define([lt_decl_all_varnames], -[_$0(m4_quote(m4_default([$1], [[, ]])), - m4_if([$2], [], - m4_quote(lt_decl_varnames), - m4_quote(m4_shift($@))))[]dnl -]) -m4_define([_lt_decl_all_varnames], -[lt_join($@, lt_decl_varnames_tagged([$1], - lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl -]) - - -# _LT_CONFIG_STATUS_DECLARE([VARNAME]) -# ------------------------------------ -# Quote a variable value, and forward it to `config.status' so that its -# declaration there will have the same value as in `configure'. VARNAME -# must have a single quote delimited value for this to work. -m4_define([_LT_CONFIG_STATUS_DECLARE], -[$1='`$ECHO "X$][$1" | $Xsed -e "$delay_single_quote_subst"`']) - - -# _LT_CONFIG_STATUS_DECLARATIONS -# ------------------------------ -# We delimit libtool config variables with single quotes, so when -# we write them to config.status, we have to be sure to quote all -# embedded single quotes properly. In configure, this macro expands -# each variable declared with _LT_DECL (and _LT_TAGDECL) into: -# -# ='`$ECHO "X$" | $Xsed -e "$delay_single_quote_subst"`' -m4_defun([_LT_CONFIG_STATUS_DECLARATIONS], -[m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames), - [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])]) - - -# _LT_LIBTOOL_TAGS -# ---------------- -# Output comment and list of tags supported by the script -m4_defun([_LT_LIBTOOL_TAGS], -[_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl -available_tags="_LT_TAGS"dnl -]) - - -# _LT_LIBTOOL_DECLARE(VARNAME, [TAG]) -# ----------------------------------- -# Extract the dictionary values for VARNAME (optionally with TAG) and -# expand to a commented shell variable setting: -# -# # Some comment about what VAR is for. -# visible_name=$lt_internal_name -m4_define([_LT_LIBTOOL_DECLARE], -[_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], - [description])))[]dnl -m4_pushdef([_libtool_name], - m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl -m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])), - [0], [_libtool_name=[$]$1], - [1], [_libtool_name=$lt_[]$1], - [2], [_libtool_name=$lt_[]$1], - [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl -m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl -]) - - -# _LT_LIBTOOL_CONFIG_VARS -# ----------------------- -# Produce commented declarations of non-tagged libtool config variables -# suitable for insertion in the LIBTOOL CONFIG section of the `libtool' -# script. Tagged libtool config variables (even for the LIBTOOL CONFIG -# section) are produced by _LT_LIBTOOL_TAG_VARS. -m4_defun([_LT_LIBTOOL_CONFIG_VARS], -[m4_foreach([_lt_var], - m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)), - [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])]) - - -# _LT_LIBTOOL_TAG_VARS(TAG) -# ------------------------- -m4_define([_LT_LIBTOOL_TAG_VARS], -[m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames), - [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])]) - - -# _LT_TAGVAR(VARNAME, [TAGNAME]) -# ------------------------------ -m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])]) - - -# _LT_CONFIG_COMMANDS -# ------------------- -# Send accumulated output to $CONFIG_STATUS. Thanks to the lists of -# variables for single and double quote escaping we saved from calls -# to _LT_DECL, we can put quote escaped variables declarations -# into `config.status', and then the shell code to quote escape them in -# for loops in `config.status'. Finally, any additional code accumulated -# from calls to _LT_CONFIG_LIBTOOL_INIT is expanded. -m4_defun([_LT_CONFIG_COMMANDS], -[AC_PROVIDE_IFELSE([LT_OUTPUT], - dnl If the libtool generation code has been placed in $CONFIG_LT, - dnl instead of duplicating it all over again into config.status, - dnl then we will have config.status run $CONFIG_LT later, so it - dnl needs to know what name is stored there: - [AC_CONFIG_COMMANDS([libtool], - [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])], - dnl If the libtool generation code is destined for config.status, - dnl expand the accumulated commands and init code now: - [AC_CONFIG_COMMANDS([libtool], - [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])]) -])#_LT_CONFIG_COMMANDS - - -# Initialize. -m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT], -[ - -# The HP-UX ksh and POSIX shell print the target directory to stdout -# if CDPATH is set. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -sed_quote_subst='$sed_quote_subst' -double_quote_subst='$double_quote_subst' -delay_variable_subst='$delay_variable_subst' -_LT_CONFIG_STATUS_DECLARATIONS -LTCC='$LTCC' -LTCFLAGS='$LTCFLAGS' -compiler='$compiler_DEFAULT' - -# Quote evaled strings. -for var in lt_decl_all_varnames([[ \ -]], lt_decl_quote_varnames); do - case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in - *[[\\\\\\\`\\"\\\$]]*) - eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" - ;; - *) - eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" - ;; - esac -done - -# Double-quote double-evaled strings. -for var in lt_decl_all_varnames([[ \ -]], lt_decl_dquote_varnames); do - case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in - *[[\\\\\\\`\\"\\\$]]*) - eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" - ;; - *) - eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" - ;; - esac -done - -# Fix-up fallback echo if it was mangled by the above quoting rules. -case \$lt_ECHO in -*'\\\[$]0 --fallback-echo"')dnl " - lt_ECHO=\`\$ECHO "X\$lt_ECHO" | \$Xsed -e 's/\\\\\\\\\\\\\\\[$]0 --fallback-echo"\[$]/\[$]0 --fallback-echo"/'\` - ;; -esac - -_LT_OUTPUT_LIBTOOL_INIT -]) - - -# LT_OUTPUT -# --------- -# This macro allows early generation of the libtool script (before -# AC_OUTPUT is called), incase it is used in configure for compilation -# tests. -AC_DEFUN([LT_OUTPUT], -[: ${CONFIG_LT=./config.lt} -AC_MSG_NOTICE([creating $CONFIG_LT]) -cat >"$CONFIG_LT" <<_LTEOF -#! $SHELL -# Generated by $as_me. -# Run this file to recreate a libtool stub with the current configuration. - -lt_cl_silent=false -SHELL=\${CONFIG_SHELL-$SHELL} -_LTEOF - -cat >>"$CONFIG_LT" <<\_LTEOF -AS_SHELL_SANITIZE -_AS_PREPARE - -exec AS_MESSAGE_FD>&1 -exec AS_MESSAGE_LOG_FD>>config.log -{ - echo - AS_BOX([Running $as_me.]) -} >&AS_MESSAGE_LOG_FD - -lt_cl_help="\ -\`$as_me' creates a local libtool stub from the current configuration, -for use in further configure time tests before the real libtool is -generated. - -Usage: $[0] [[OPTIONS]] - - -h, --help print this help, then exit - -V, --version print version number, then exit - -q, --quiet do not print progress messages - -d, --debug don't remove temporary files - -Report bugs to ." - -lt_cl_version="\ -m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl -m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]) -configured by $[0], generated by m4_PACKAGE_STRING. - -Copyright (C) 2008 Free Software Foundation, Inc. -This config.lt script is free software; the Free Software Foundation -gives unlimited permision to copy, distribute and modify it." - -while test $[#] != 0 -do - case $[1] in - --version | --v* | -V ) - echo "$lt_cl_version"; exit 0 ;; - --help | --h* | -h ) - echo "$lt_cl_help"; exit 0 ;; - --debug | --d* | -d ) - debug=: ;; - --quiet | --q* | --silent | --s* | -q ) - lt_cl_silent=: ;; - - -*) AC_MSG_ERROR([unrecognized option: $[1] -Try \`$[0] --help' for more information.]) ;; - - *) AC_MSG_ERROR([unrecognized argument: $[1] -Try \`$[0] --help' for more information.]) ;; - esac - shift -done - -if $lt_cl_silent; then - exec AS_MESSAGE_FD>/dev/null -fi -_LTEOF - -cat >>"$CONFIG_LT" <<_LTEOF -_LT_OUTPUT_LIBTOOL_COMMANDS_INIT -_LTEOF - -cat >>"$CONFIG_LT" <<\_LTEOF -AC_MSG_NOTICE([creating $ofile]) -_LT_OUTPUT_LIBTOOL_COMMANDS -AS_EXIT(0) -_LTEOF -chmod +x "$CONFIG_LT" - -# configure is writing to config.log, but config.lt does its own redirection, -# appending to config.log, which fails on DOS, as config.log is still kept -# open by configure. Here we exec the FD to /dev/null, effectively closing -# config.log, so it can be properly (re)opened and appended to by config.lt. -if test "$no_create" != yes; then - lt_cl_success=: - test "$silent" = yes && - lt_config_lt_args="$lt_config_lt_args --quiet" - exec AS_MESSAGE_LOG_FD>/dev/null - $SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false - exec AS_MESSAGE_LOG_FD>>config.log - $lt_cl_success || AS_EXIT(1) -fi -])# LT_OUTPUT - - -# _LT_CONFIG(TAG) -# --------------- -# If TAG is the built-in tag, create an initial libtool script with a -# default configuration from the untagged config vars. Otherwise add code -# to config.status for appending the configuration named by TAG from the -# matching tagged config vars. -m4_defun([_LT_CONFIG], -[m4_require([_LT_FILEUTILS_DEFAULTS])dnl -_LT_CONFIG_SAVE_COMMANDS([ - m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl - m4_if(_LT_TAG, [C], [ - # See if we are running on zsh, and set the options which allow our - # commands through without removal of \ escapes. - if test -n "${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST - fi - - cfgfile="${ofile}T" - trap "$RM \"$cfgfile\"; exit 1" 1 2 15 - $RM "$cfgfile" - - cat <<_LT_EOF >> "$cfgfile" -#! $SHELL - -# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. -# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION -# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: -# NOTE: Changes made to this file will be lost: look at ltmain.sh. -# -_LT_COPYING -_LT_LIBTOOL_TAGS - -# ### BEGIN LIBTOOL CONFIG -_LT_LIBTOOL_CONFIG_VARS -_LT_LIBTOOL_TAG_VARS -# ### END LIBTOOL CONFIG - -_LT_EOF - - case $host_os in - aix3*) - cat <<\_LT_EOF >> "$cfgfile" -# AIX sometimes has problems with the GCC collect2 program. For some -# reason, if we set the COLLECT_NAMES environment variable, the problems -# vanish in a puff of smoke. -if test "X${COLLECT_NAMES+set}" != Xset; then - COLLECT_NAMES= - export COLLECT_NAMES -fi -_LT_EOF - ;; - esac - - _LT_PROG_LTMAIN - - # We use sed instead of cat because bash on DJGPP gets confused if - # if finds mixed CR/LF and LF-only lines. Since sed operates in - # text mode, it properly converts lines to CR/LF. This bash problem - # is reportedly fixed, but why not run on old versions too? - sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \ - || (rm -f "$cfgfile"; exit 1) - - _LT_PROG_XSI_SHELLFNS - - sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \ - || (rm -f "$cfgfile"; exit 1) - - mv -f "$cfgfile" "$ofile" || - (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") - chmod +x "$ofile" -], -[cat <<_LT_EOF >> "$ofile" - -dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded -dnl in a comment (ie after a #). -# ### BEGIN LIBTOOL TAG CONFIG: $1 -_LT_LIBTOOL_TAG_VARS(_LT_TAG) -# ### END LIBTOOL TAG CONFIG: $1 -_LT_EOF -])dnl /m4_if -], -[m4_if([$1], [], [ - PACKAGE='$PACKAGE' - VERSION='$VERSION' - TIMESTAMP='$TIMESTAMP' - RM='$RM' - ofile='$ofile'], []) -])dnl /_LT_CONFIG_SAVE_COMMANDS -])# _LT_CONFIG - - -# LT_SUPPORTED_TAG(TAG) -# --------------------- -# Trace this macro to discover what tags are supported by the libtool -# --tag option, using: -# autoconf --trace 'LT_SUPPORTED_TAG:$1' -AC_DEFUN([LT_SUPPORTED_TAG], []) - - -# C support is built-in for now -m4_define([_LT_LANG_C_enabled], []) -m4_define([_LT_TAGS], []) - - -# LT_LANG(LANG) -# ------------- -# Enable libtool support for the given language if not already enabled. -AC_DEFUN([LT_LANG], -[AC_BEFORE([$0], [LT_OUTPUT])dnl -m4_case([$1], - [C], [_LT_LANG(C)], - [C++], [_LT_LANG(CXX)], - [Java], [_LT_LANG(GCJ)], - [Fortran 77], [_LT_LANG(F77)], - [Fortran], [_LT_LANG(FC)], - [Windows Resource], [_LT_LANG(RC)], - [m4_ifdef([_LT_LANG_]$1[_CONFIG], - [_LT_LANG($1)], - [m4_fatal([$0: unsupported language: "$1"])])])dnl -])# LT_LANG - - -# _LT_LANG(LANGNAME) -# ------------------ -m4_defun([_LT_LANG], -[m4_ifdef([_LT_LANG_]$1[_enabled], [], - [LT_SUPPORTED_TAG([$1])dnl - m4_append([_LT_TAGS], [$1 ])dnl - m4_define([_LT_LANG_]$1[_enabled], [])dnl - _LT_LANG_$1_CONFIG($1)])dnl -])# _LT_LANG - - -# _LT_LANG_DEFAULT_CONFIG -# ----------------------- -m4_defun([_LT_LANG_DEFAULT_CONFIG], -[AC_PROVIDE_IFELSE([AC_PROG_CXX], - [LT_LANG(CXX)], - [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])]) - -AC_PROVIDE_IFELSE([AC_PROG_F77], - [LT_LANG(F77)], - [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])]) - -AC_PROVIDE_IFELSE([AC_PROG_FC], - [LT_LANG(FC)], - [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])]) - -dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal -dnl pulling things in needlessly. -AC_PROVIDE_IFELSE([AC_PROG_GCJ], - [LT_LANG(GCJ)], - [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], - [LT_LANG(GCJ)], - [AC_PROVIDE_IFELSE([LT_PROG_GCJ], - [LT_LANG(GCJ)], - [m4_ifdef([AC_PROG_GCJ], - [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])]) - m4_ifdef([A][M_PROG_GCJ], - [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])]) - m4_ifdef([LT_PROG_GCJ], - [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])]) - -AC_PROVIDE_IFELSE([LT_PROG_RC], - [LT_LANG(RC)], - [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])]) -])# _LT_LANG_DEFAULT_CONFIG - -# Obsolete macros: -AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)]) -AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)]) -AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)]) -AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_CXX], []) -dnl AC_DEFUN([AC_LIBTOOL_F77], []) -dnl AC_DEFUN([AC_LIBTOOL_FC], []) -dnl AC_DEFUN([AC_LIBTOOL_GCJ], []) - - -# _LT_TAG_COMPILER -# ---------------- -m4_defun([_LT_TAG_COMPILER], -[AC_REQUIRE([AC_PROG_CC])dnl - -_LT_DECL([LTCC], [CC], [1], [A C compiler])dnl -_LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl -_LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl -_LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl - -# If no C compiler was specified, use CC. -LTCC=${LTCC-"$CC"} - -# If no C compiler flags were specified, use CFLAGS. -LTCFLAGS=${LTCFLAGS-"$CFLAGS"} - -# Allow CC to be a program name with arguments. -compiler=$CC -])# _LT_TAG_COMPILER - - -# _LT_COMPILER_BOILERPLATE -# ------------------------ -# Check for compiler boilerplate output or warnings with -# the simple compiler test code. -m4_defun([_LT_COMPILER_BOILERPLATE], -[m4_require([_LT_DECL_SED])dnl -ac_outfile=conftest.$ac_objext -echo "$lt_simple_compile_test_code" >conftest.$ac_ext -eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_compiler_boilerplate=`cat conftest.err` -$RM conftest* -])# _LT_COMPILER_BOILERPLATE - - -# _LT_LINKER_BOILERPLATE -# ---------------------- -# Check for linker boilerplate output or warnings with -# the simple link test code. -m4_defun([_LT_LINKER_BOILERPLATE], -[m4_require([_LT_DECL_SED])dnl -ac_outfile=conftest.$ac_objext -echo "$lt_simple_link_test_code" >conftest.$ac_ext -eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_linker_boilerplate=`cat conftest.err` -$RM -r conftest* -])# _LT_LINKER_BOILERPLATE - -# _LT_REQUIRED_DARWIN_CHECKS -# ------------------------- -m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[ - case $host_os in - rhapsody* | darwin*) - AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:]) - AC_CHECK_TOOL([NMEDIT], [nmedit], [:]) - AC_CHECK_TOOL([LIPO], [lipo], [:]) - AC_CHECK_TOOL([OTOOL], [otool], [:]) - AC_CHECK_TOOL([OTOOL64], [otool64], [:]) - _LT_DECL([], [DSYMUTIL], [1], - [Tool to manipulate archived DWARF debug symbol files on Mac OS X]) - _LT_DECL([], [NMEDIT], [1], - [Tool to change global to local symbols on Mac OS X]) - _LT_DECL([], [LIPO], [1], - [Tool to manipulate fat objects and archives on Mac OS X]) - _LT_DECL([], [OTOOL], [1], - [ldd/readelf like tool for Mach-O binaries on Mac OS X]) - _LT_DECL([], [OTOOL64], [1], - [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4]) - - AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod], - [lt_cv_apple_cc_single_mod=no - if test -z "${LT_MULTI_MODULE}"; then - # By default we will add the -single_module flag. You can override - # by either setting the environment variable LT_MULTI_MODULE - # non-empty at configure time, or by adding -multi_module to the - # link flags. - rm -rf libconftest.dylib* - echo "int foo(void){return 1;}" > conftest.c - echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ --dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD - $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ - -dynamiclib -Wl,-single_module conftest.c 2>conftest.err - _lt_result=$? - if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then - lt_cv_apple_cc_single_mod=yes - else - cat conftest.err >&AS_MESSAGE_LOG_FD - fi - rm -rf libconftest.dylib* - rm -f conftest.* - fi]) - AC_CACHE_CHECK([for -exported_symbols_list linker flag], - [lt_cv_ld_exported_symbols_list], - [lt_cv_ld_exported_symbols_list=no - save_LDFLAGS=$LDFLAGS - echo "_main" > conftest.sym - LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" - AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], - [lt_cv_ld_exported_symbols_list=yes], - [lt_cv_ld_exported_symbols_list=no]) - LDFLAGS="$save_LDFLAGS" - ]) - case $host_os in - rhapsody* | darwin1.[[012]]) - _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; - darwin1.*) - _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; - darwin*) # darwin 5.x on - # if running on 10.5 or later, the deployment target defaults - # to the OS version, if on x86, and 10.4, the deployment - # target defaults to 10.4. Don't you love it? - case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in - 10.0,*86*-darwin8*|10.0,*-darwin[[91]]*) - _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; - 10.[[012]]*) - _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; - 10.*) - _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; - esac - ;; - esac - if test "$lt_cv_apple_cc_single_mod" = "yes"; then - _lt_dar_single_mod='$single_module' - fi - if test "$lt_cv_ld_exported_symbols_list" = "yes"; then - _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' - else - _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' - fi - if test "$DSYMUTIL" != ":"; then - _lt_dsymutil='~$DSYMUTIL $lib || :' - else - _lt_dsymutil= - fi - ;; - esac -]) - - -# _LT_DARWIN_LINKER_FEATURES -# -------------------------- -# Checks for linker and compiler features on darwin -m4_defun([_LT_DARWIN_LINKER_FEATURES], -[ - m4_require([_LT_REQUIRED_DARWIN_CHECKS]) - _LT_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_TAGVAR(hardcode_direct, $1)=no - _LT_TAGVAR(hardcode_automatic, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported - _LT_TAGVAR(whole_archive_flag_spec, $1)='' - _LT_TAGVAR(link_all_deplibs, $1)=yes - _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined" - case $cc_basename in - ifort*) _lt_dar_can_shared=yes ;; - *) _lt_dar_can_shared=$GCC ;; - esac - if test "$_lt_dar_can_shared" = "yes"; then - output_verbose_link_cmd=echo - _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" - _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" - _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" - _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" - m4_if([$1], [CXX], -[ if test "$lt_cv_apple_cc_single_mod" != "yes"; then - _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" - _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" - fi -],[]) - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi -]) - -# _LT_SYS_MODULE_PATH_AIX -# ----------------------- -# Links a minimal program and checks the executable -# for the system default hardcoded library path. In most cases, -# this is /usr/lib:/lib, but when the MPI compilers are used -# the location of the communication and MPI libs are included too. -# If we don't find anything, use the default library path according -# to the aix ld manual. -m4_defun([_LT_SYS_MODULE_PATH_AIX], -[m4_require([_LT_DECL_SED])dnl -AC_LINK_IFELSE(AC_LANG_PROGRAM,[ -lt_aix_libpath_sed=' - /Import File Strings/,/^$/ { - /^0/ { - s/^0 *\(.*\)$/\1/ - p - } - }' -aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -# Check for a 64-bit object if we didn't find anything. -if test -z "$aix_libpath"; then - aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -fi],[]) -if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi -])# _LT_SYS_MODULE_PATH_AIX - - -# _LT_SHELL_INIT(ARG) -# ------------------- -m4_define([_LT_SHELL_INIT], -[ifdef([AC_DIVERSION_NOTICE], - [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)], - [AC_DIVERT_PUSH(NOTICE)]) -$1 -AC_DIVERT_POP -])# _LT_SHELL_INIT - - -# _LT_PROG_ECHO_BACKSLASH -# ----------------------- -# Add some code to the start of the generated configure script which -# will find an echo command which doesn't interpret backslashes. -m4_defun([_LT_PROG_ECHO_BACKSLASH], -[_LT_SHELL_INIT([ -# Check that we are running under the correct shell. -SHELL=${CONFIG_SHELL-/bin/sh} - -case X$lt_ECHO in -X*--fallback-echo) - # Remove one level of quotation (which was required for Make). - ECHO=`echo "$lt_ECHO" | sed 's,\\\\\[$]\\[$]0,'[$]0','` - ;; -esac - -ECHO=${lt_ECHO-echo} -if test "X[$]1" = X--no-reexec; then - # Discard the --no-reexec flag, and continue. - shift -elif test "X[$]1" = X--fallback-echo; then - # Avoid inline document here, it may be left over - : -elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' ; then - # Yippee, $ECHO works! - : -else - # Restart under the correct shell. - exec $SHELL "[$]0" --no-reexec ${1+"[$]@"} -fi - -if test "X[$]1" = X--fallback-echo; then - # used as fallback echo - shift - cat <<_LT_EOF -[$]* -_LT_EOF - exit 0 -fi - -# The HP-UX ksh and POSIX shell print the target directory to stdout -# if CDPATH is set. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -if test -z "$lt_ECHO"; then - if test "X${echo_test_string+set}" != Xset; then - # find a string as large as possible, as long as the shell can cope with it - for cmd in 'sed 50q "[$]0"' 'sed 20q "[$]0"' 'sed 10q "[$]0"' 'sed 2q "[$]0"' 'echo test'; do - # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ... - if { echo_test_string=`eval $cmd`; } 2>/dev/null && - { test "X$echo_test_string" = "X$echo_test_string"; } 2>/dev/null - then - break - fi - done - fi - - if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' && - echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - : - else - # The Solaris, AIX, and Digital Unix default echo programs unquote - # backslashes. This makes it impossible to quote backslashes using - # echo "$something" | sed 's/\\/\\\\/g' - # - # So, first we look for a working echo in the user's PATH. - - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for dir in $PATH /usr/ucb; do - IFS="$lt_save_ifs" - if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && - test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && - echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - ECHO="$dir/echo" - break - fi - done - IFS="$lt_save_ifs" - - if test "X$ECHO" = Xecho; then - # We didn't find a better echo, so look for alternatives. - if test "X`{ print -r '\t'; } 2>/dev/null`" = 'X\t' && - echo_testing_string=`{ print -r "$echo_test_string"; } 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - # This shell has a builtin print -r that does the trick. - ECHO='print -r' - elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } && - test "X$CONFIG_SHELL" != X/bin/ksh; then - # If we have ksh, try running configure again with it. - ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} - export ORIGINAL_CONFIG_SHELL - CONFIG_SHELL=/bin/ksh - export CONFIG_SHELL - exec $CONFIG_SHELL "[$]0" --no-reexec ${1+"[$]@"} - else - # Try using printf. - ECHO='printf %s\n' - if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' && - echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - # Cool, printf works - : - elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` && - test "X$echo_testing_string" = 'X\t' && - echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL - export CONFIG_SHELL - SHELL="$CONFIG_SHELL" - export SHELL - ECHO="$CONFIG_SHELL [$]0 --fallback-echo" - elif echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` && - test "X$echo_testing_string" = 'X\t' && - echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - ECHO="$CONFIG_SHELL [$]0 --fallback-echo" - else - # maybe with a smaller string... - prev=: - - for cmd in 'echo test' 'sed 2q "[$]0"' 'sed 10q "[$]0"' 'sed 20q "[$]0"' 'sed 50q "[$]0"'; do - if { test "X$echo_test_string" = "X`eval $cmd`"; } 2>/dev/null - then - break - fi - prev="$cmd" - done - - if test "$prev" != 'sed 50q "[$]0"'; then - echo_test_string=`eval $prev` - export echo_test_string - exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "[$]0" ${1+"[$]@"} - else - # Oops. We lost completely, so just stick with echo. - ECHO=echo - fi - fi - fi - fi - fi -fi - -# Copy echo and quote the copy suitably for passing to libtool from -# the Makefile, instead of quoting the original, which is used later. -lt_ECHO=$ECHO -if test "X$lt_ECHO" = "X$CONFIG_SHELL [$]0 --fallback-echo"; then - lt_ECHO="$CONFIG_SHELL \\\$\[$]0 --fallback-echo" -fi - -AC_SUBST(lt_ECHO) -]) -_LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts]) -_LT_DECL([], [ECHO], [1], - [An echo program that does not interpret backslashes]) -])# _LT_PROG_ECHO_BACKSLASH - - -# _LT_ENABLE_LOCK -# --------------- -m4_defun([_LT_ENABLE_LOCK], -[AC_ARG_ENABLE([libtool-lock], - [AS_HELP_STRING([--disable-libtool-lock], - [avoid locking (might break parallel builds)])]) -test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes - -# Some flags need to be propagated to the compiler or linker for good -# libtool support. -case $host in -ia64-*-hpux*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if AC_TRY_EVAL(ac_compile); then - case `/usr/bin/file conftest.$ac_objext` in - *ELF-32*) - HPUX_IA64_MODE="32" - ;; - *ELF-64*) - HPUX_IA64_MODE="64" - ;; - esac - fi - rm -rf conftest* - ;; -*-*-irix6*) - # Find out which ABI we are using. - echo '[#]line __oline__ "configure"' > conftest.$ac_ext - if AC_TRY_EVAL(ac_compile); then - if test "$lt_cv_prog_gnu_ld" = yes; then - case `/usr/bin/file conftest.$ac_objext` in - *32-bit*) - LD="${LD-ld} -melf32bsmip" - ;; - *N32*) - LD="${LD-ld} -melf32bmipn32" - ;; - *64-bit*) - LD="${LD-ld} -melf64bmip" - ;; - esac - else - case `/usr/bin/file conftest.$ac_objext` in - *32-bit*) - LD="${LD-ld} -32" - ;; - *N32*) - LD="${LD-ld} -n32" - ;; - *64-bit*) - LD="${LD-ld} -64" - ;; - esac - fi - fi - rm -rf conftest* - ;; - -x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ -s390*-*linux*|s390*-*tpf*|sparc*-*linux*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if AC_TRY_EVAL(ac_compile); then - case `/usr/bin/file conftest.o` in - *32-bit*) - case $host in - x86_64-*kfreebsd*-gnu) - LD="${LD-ld} -m elf_i386_fbsd" - ;; - x86_64-*linux*) - LD="${LD-ld} -m elf_i386" - ;; - ppc64-*linux*|powerpc64-*linux*) - LD="${LD-ld} -m elf32ppclinux" - ;; - s390x-*linux*) - LD="${LD-ld} -m elf_s390" - ;; - sparc64-*linux*) - LD="${LD-ld} -m elf32_sparc" - ;; - esac - ;; - *64-bit*) - case $host in - x86_64-*kfreebsd*-gnu) - LD="${LD-ld} -m elf_x86_64_fbsd" - ;; - x86_64-*linux*) - LD="${LD-ld} -m elf_x86_64" - ;; - ppc*-*linux*|powerpc*-*linux*) - LD="${LD-ld} -m elf64ppc" - ;; - s390*-*linux*|s390*-*tpf*) - LD="${LD-ld} -m elf64_s390" - ;; - sparc*-*linux*) - LD="${LD-ld} -m elf64_sparc" - ;; - esac - ;; - esac - fi - rm -rf conftest* - ;; - -*-*-sco3.2v5*) - # On SCO OpenServer 5, we need -belf to get full-featured binaries. - SAVE_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS -belf" - AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, - [AC_LANG_PUSH(C) - AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) - AC_LANG_POP]) - if test x"$lt_cv_cc_needs_belf" != x"yes"; then - # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf - CFLAGS="$SAVE_CFLAGS" - fi - ;; -sparc*-*solaris*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if AC_TRY_EVAL(ac_compile); then - case `/usr/bin/file conftest.o` in - *64-bit*) - case $lt_cv_prog_gnu_ld in - yes*) LD="${LD-ld} -m elf64_sparc" ;; - *) - if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then - LD="${LD-ld} -64" - fi - ;; - esac - ;; - esac - fi - rm -rf conftest* - ;; -esac - -need_locks="$enable_libtool_lock" -])# _LT_ENABLE_LOCK - - -# _LT_CMD_OLD_ARCHIVE -# ------------------- -m4_defun([_LT_CMD_OLD_ARCHIVE], -[AC_CHECK_TOOL(AR, ar, false) -test -z "$AR" && AR=ar -test -z "$AR_FLAGS" && AR_FLAGS=cru -_LT_DECL([], [AR], [1], [The archiver]) -_LT_DECL([], [AR_FLAGS], [1]) - -AC_CHECK_TOOL(STRIP, strip, :) -test -z "$STRIP" && STRIP=: -_LT_DECL([], [STRIP], [1], [A symbol stripping program]) - -AC_CHECK_TOOL(RANLIB, ranlib, :) -test -z "$RANLIB" && RANLIB=: -_LT_DECL([], [RANLIB], [1], - [Commands used to install an old-style archive]) - -# Determine commands to create old-style static archives. -old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' -old_postinstall_cmds='chmod 644 $oldlib' -old_postuninstall_cmds= - -if test -n "$RANLIB"; then - case $host_os in - openbsd*) - old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib" - ;; - *) - old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib" - ;; - esac - old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" -fi -_LT_DECL([], [old_postinstall_cmds], [2]) -_LT_DECL([], [old_postuninstall_cmds], [2]) -_LT_TAGDECL([], [old_archive_cmds], [2], - [Commands used to build an old-style archive]) -])# _LT_CMD_OLD_ARCHIVE - - -# _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, -# [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) -# ---------------------------------------------------------------- -# Check whether the given compiler option works -AC_DEFUN([_LT_COMPILER_OPTION], -[m4_require([_LT_FILEUTILS_DEFAULTS])dnl -m4_require([_LT_DECL_SED])dnl -AC_CACHE_CHECK([$1], [$2], - [$2=no - m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="$3" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - # The option is referenced via a variable to avoid confusing sed. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&AS_MESSAGE_LOG_FD - echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD - if (exit $ac_status) && test -s "$ac_outfile"; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings other than the usual output. - $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then - $2=yes - fi - fi - $RM conftest* -]) - -if test x"[$]$2" = xyes; then - m4_if([$5], , :, [$5]) -else - m4_if([$6], , :, [$6]) -fi -])# _LT_COMPILER_OPTION - -# Old name: -AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], []) - - -# _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, -# [ACTION-SUCCESS], [ACTION-FAILURE]) -# ---------------------------------------------------- -# Check whether the given linker option works -AC_DEFUN([_LT_LINKER_OPTION], -[m4_require([_LT_FILEUTILS_DEFAULTS])dnl -m4_require([_LT_DECL_SED])dnl -AC_CACHE_CHECK([$1], [$2], - [$2=no - save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS $3" - echo "$lt_simple_link_test_code" > conftest.$ac_ext - if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then - # The linker can only warn and ignore the option if not recognized - # So say no if there are warnings - if test -s conftest.err; then - # Append any errors to the config.log. - cat conftest.err 1>&AS_MESSAGE_LOG_FD - $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if diff conftest.exp conftest.er2 >/dev/null; then - $2=yes - fi - else - $2=yes - fi - fi - $RM -r conftest* - LDFLAGS="$save_LDFLAGS" -]) - -if test x"[$]$2" = xyes; then - m4_if([$4], , :, [$4]) -else - m4_if([$5], , :, [$5]) -fi -])# _LT_LINKER_OPTION - -# Old name: -AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], []) - - -# LT_CMD_MAX_LEN -#--------------- -AC_DEFUN([LT_CMD_MAX_LEN], -[AC_REQUIRE([AC_CANONICAL_HOST])dnl -# find the maximum length of command line arguments -AC_MSG_CHECKING([the maximum length of command line arguments]) -AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl - i=0 - teststring="ABCD" - - case $build_os in - msdosdjgpp*) - # On DJGPP, this test can blow up pretty badly due to problems in libc - # (any single argument exceeding 2000 bytes causes a buffer overrun - # during glob expansion). Even if it were fixed, the result of this - # check would be larger than it should be. - lt_cv_sys_max_cmd_len=12288; # 12K is about right - ;; - - gnu*) - # Under GNU Hurd, this test is not required because there is - # no limit to the length of command line arguments. - # Libtool will interpret -1 as no limit whatsoever - lt_cv_sys_max_cmd_len=-1; - ;; - - cygwin* | mingw* | cegcc*) - # On Win9x/ME, this test blows up -- it succeeds, but takes - # about 5 minutes as the teststring grows exponentially. - # Worse, since 9x/ME are not pre-emptively multitasking, - # you end up with a "frozen" computer, even though with patience - # the test eventually succeeds (with a max line length of 256k). - # Instead, let's just punt: use the minimum linelength reported by - # all of the supported platforms: 8192 (on NT/2K/XP). - lt_cv_sys_max_cmd_len=8192; - ;; - - amigaos*) - # On AmigaOS with pdksh, this test takes hours, literally. - # So we just punt and use a minimum line length of 8192. - lt_cv_sys_max_cmd_len=8192; - ;; - - netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) - # This has been around since 386BSD, at least. Likely further. - if test -x /sbin/sysctl; then - lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` - elif test -x /usr/sbin/sysctl; then - lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` - else - lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs - fi - # And add a safety zone - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` - ;; - - interix*) - # We know the value 262144 and hardcode it with a safety zone (like BSD) - lt_cv_sys_max_cmd_len=196608 - ;; - - osf*) - # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure - # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not - # nice to cause kernel panics so lets avoid the loop below. - # First set a reasonable default. - lt_cv_sys_max_cmd_len=16384 - # - if test -x /sbin/sysconfig; then - case `/sbin/sysconfig -q proc exec_disable_arg_limit` in - *1*) lt_cv_sys_max_cmd_len=-1 ;; - esac - fi - ;; - sco3.2v5*) - lt_cv_sys_max_cmd_len=102400 - ;; - sysv5* | sco5v6* | sysv4.2uw2*) - kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` - if test -n "$kargmax"; then - lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'` - else - lt_cv_sys_max_cmd_len=32768 - fi - ;; - *) - lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` - if test -n "$lt_cv_sys_max_cmd_len"; then - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` - else - # Make teststring a little bigger before we do anything with it. - # a 1K string should be a reasonable start. - for i in 1 2 3 4 5 6 7 8 ; do - teststring=$teststring$teststring - done - SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} - # If test is not a shell built-in, we'll probably end up computing a - # maximum length that is only half of the actual maximum length, but - # we can't tell. - while { test "X"`$SHELL [$]0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \ - = "XX$teststring$teststring"; } >/dev/null 2>&1 && - test $i != 17 # 1/2 MB should be enough - do - i=`expr $i + 1` - teststring=$teststring$teststring - done - # Only check the string length outside the loop. - lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` - teststring= - # Add a significant safety factor because C++ compilers can tack on - # massive amounts of additional arguments before passing them to the - # linker. It appears as though 1/2 is a usable value. - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` - fi - ;; - esac -]) -if test -n $lt_cv_sys_max_cmd_len ; then - AC_MSG_RESULT($lt_cv_sys_max_cmd_len) -else - AC_MSG_RESULT(none) -fi -max_cmd_len=$lt_cv_sys_max_cmd_len -_LT_DECL([], [max_cmd_len], [0], - [What is the maximum length of a command?]) -])# LT_CMD_MAX_LEN - -# Old name: -AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], []) - - -# _LT_HEADER_DLFCN -# ---------------- -m4_defun([_LT_HEADER_DLFCN], -[AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl -])# _LT_HEADER_DLFCN - - -# _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, -# ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) -# ---------------------------------------------------------------- -m4_defun([_LT_TRY_DLOPEN_SELF], -[m4_require([_LT_HEADER_DLFCN])dnl -if test "$cross_compiling" = yes; then : - [$4] -else - lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 - lt_status=$lt_dlunknown - cat > conftest.$ac_ext <<_LT_EOF -[#line __oline__ "configure" -#include "confdefs.h" - -#if HAVE_DLFCN_H -#include -#endif - -#include - -#ifdef RTLD_GLOBAL -# define LT_DLGLOBAL RTLD_GLOBAL -#else -# ifdef DL_GLOBAL -# define LT_DLGLOBAL DL_GLOBAL -# else -# define LT_DLGLOBAL 0 -# endif -#endif - -/* We may have to define LT_DLLAZY_OR_NOW in the command line if we - find out it does not work in some platform. */ -#ifndef LT_DLLAZY_OR_NOW -# ifdef RTLD_LAZY -# define LT_DLLAZY_OR_NOW RTLD_LAZY -# else -# ifdef DL_LAZY -# define LT_DLLAZY_OR_NOW DL_LAZY -# else -# ifdef RTLD_NOW -# define LT_DLLAZY_OR_NOW RTLD_NOW -# else -# ifdef DL_NOW -# define LT_DLLAZY_OR_NOW DL_NOW -# else -# define LT_DLLAZY_OR_NOW 0 -# endif -# endif -# endif -# endif -#endif - -void fnord() { int i=42;} -int main () -{ - void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); - int status = $lt_dlunknown; - - if (self) - { - if (dlsym (self,"fnord")) status = $lt_dlno_uscore; - else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; - /* dlclose (self); */ - } - else - puts (dlerror ()); - - return status; -}] -_LT_EOF - if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then - (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null - lt_status=$? - case x$lt_status in - x$lt_dlno_uscore) $1 ;; - x$lt_dlneed_uscore) $2 ;; - x$lt_dlunknown|x*) $3 ;; - esac - else : - # compilation failed - $3 - fi -fi -rm -fr conftest* -])# _LT_TRY_DLOPEN_SELF - - -# LT_SYS_DLOPEN_SELF -# ------------------ -AC_DEFUN([LT_SYS_DLOPEN_SELF], -[m4_require([_LT_HEADER_DLFCN])dnl -if test "x$enable_dlopen" != xyes; then - enable_dlopen=unknown - enable_dlopen_self=unknown - enable_dlopen_self_static=unknown -else - lt_cv_dlopen=no - lt_cv_dlopen_libs= - - case $host_os in - beos*) - lt_cv_dlopen="load_add_on" - lt_cv_dlopen_libs= - lt_cv_dlopen_self=yes - ;; - - mingw* | pw32* | cegcc*) - lt_cv_dlopen="LoadLibrary" - lt_cv_dlopen_libs= - ;; - - cygwin*) - lt_cv_dlopen="dlopen" - lt_cv_dlopen_libs= - ;; - - darwin*) - # if libdl is installed we need to link against it - AC_CHECK_LIB([dl], [dlopen], - [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[ - lt_cv_dlopen="dyld" - lt_cv_dlopen_libs= - lt_cv_dlopen_self=yes - ]) - ;; - - *) - AC_CHECK_FUNC([shl_load], - [lt_cv_dlopen="shl_load"], - [AC_CHECK_LIB([dld], [shl_load], - [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"], - [AC_CHECK_FUNC([dlopen], - [lt_cv_dlopen="dlopen"], - [AC_CHECK_LIB([dl], [dlopen], - [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], - [AC_CHECK_LIB([svld], [dlopen], - [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"], - [AC_CHECK_LIB([dld], [dld_link], - [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"]) - ]) - ]) - ]) - ]) - ]) - ;; - esac - - if test "x$lt_cv_dlopen" != xno; then - enable_dlopen=yes - else - enable_dlopen=no - fi - - case $lt_cv_dlopen in - dlopen) - save_CPPFLAGS="$CPPFLAGS" - test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" - - save_LDFLAGS="$LDFLAGS" - wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" - - save_LIBS="$LIBS" - LIBS="$lt_cv_dlopen_libs $LIBS" - - AC_CACHE_CHECK([whether a program can dlopen itself], - lt_cv_dlopen_self, [dnl - _LT_TRY_DLOPEN_SELF( - lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, - lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) - ]) - - if test "x$lt_cv_dlopen_self" = xyes; then - wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" - AC_CACHE_CHECK([whether a statically linked program can dlopen itself], - lt_cv_dlopen_self_static, [dnl - _LT_TRY_DLOPEN_SELF( - lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, - lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) - ]) - fi - - CPPFLAGS="$save_CPPFLAGS" - LDFLAGS="$save_LDFLAGS" - LIBS="$save_LIBS" - ;; - esac - - case $lt_cv_dlopen_self in - yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; - *) enable_dlopen_self=unknown ;; - esac - - case $lt_cv_dlopen_self_static in - yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; - *) enable_dlopen_self_static=unknown ;; - esac -fi -_LT_DECL([dlopen_support], [enable_dlopen], [0], - [Whether dlopen is supported]) -_LT_DECL([dlopen_self], [enable_dlopen_self], [0], - [Whether dlopen of programs is supported]) -_LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0], - [Whether dlopen of statically linked programs is supported]) -])# LT_SYS_DLOPEN_SELF - -# Old name: -AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], []) - - -# _LT_COMPILER_C_O([TAGNAME]) -# --------------------------- -# Check to see if options -c and -o are simultaneously supported by compiler. -# This macro does not hard code the compiler like AC_PROG_CC_C_O. -m4_defun([_LT_COMPILER_C_O], -[m4_require([_LT_DECL_SED])dnl -m4_require([_LT_FILEUTILS_DEFAULTS])dnl -m4_require([_LT_TAG_COMPILER])dnl -AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], - [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)], - [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no - $RM -r conftest 2>/dev/null - mkdir conftest - cd conftest - mkdir out - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - lt_compiler_flag="-o out/conftest2.$ac_objext" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&AS_MESSAGE_LOG_FD - echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD - if (exit $ac_status) && test -s out/conftest2.$ac_objext - then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings - $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp - $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 - if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then - _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes - fi - fi - chmod u+w . 2>&AS_MESSAGE_LOG_FD - $RM conftest* - # SGI C++ compiler will create directory out/ii_files/ for - # template instantiation - test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files - $RM out/* && rmdir out - cd .. - $RM -r conftest - $RM conftest* -]) -_LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1], - [Does compiler simultaneously support -c and -o options?]) -])# _LT_COMPILER_C_O - - -# _LT_COMPILER_FILE_LOCKS([TAGNAME]) -# ---------------------------------- -# Check to see if we can do hard links to lock some files if needed -m4_defun([_LT_COMPILER_FILE_LOCKS], -[m4_require([_LT_ENABLE_LOCK])dnl -m4_require([_LT_FILEUTILS_DEFAULTS])dnl -_LT_COMPILER_C_O([$1]) - -hard_links="nottested" -if test "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then - # do not overwrite the value of need_locks provided by the user - AC_MSG_CHECKING([if we can lock with hard links]) - hard_links=yes - $RM conftest* - ln conftest.a conftest.b 2>/dev/null && hard_links=no - touch conftest.a - ln conftest.a conftest.b 2>&5 || hard_links=no - ln conftest.a conftest.b 2>/dev/null && hard_links=no - AC_MSG_RESULT([$hard_links]) - if test "$hard_links" = no; then - AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe]) - need_locks=warn - fi -else - need_locks=no -fi -_LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?]) -])# _LT_COMPILER_FILE_LOCKS - - -# _LT_CHECK_OBJDIR -# ---------------- -m4_defun([_LT_CHECK_OBJDIR], -[AC_CACHE_CHECK([for objdir], [lt_cv_objdir], -[rm -f .libs 2>/dev/null -mkdir .libs 2>/dev/null -if test -d .libs; then - lt_cv_objdir=.libs -else - # MS-DOS does not allow filenames that begin with a dot. - lt_cv_objdir=_libs -fi -rmdir .libs 2>/dev/null]) -objdir=$lt_cv_objdir -_LT_DECL([], [objdir], [0], - [The name of the directory that contains temporary libtool files])dnl -m4_pattern_allow([LT_OBJDIR])dnl -AC_DEFINE_UNQUOTED(LT_OBJDIR, "$lt_cv_objdir/", - [Define to the sub-directory in which libtool stores uninstalled libraries.]) -])# _LT_CHECK_OBJDIR - - -# _LT_LINKER_HARDCODE_LIBPATH([TAGNAME]) -# -------------------------------------- -# Check hardcoding attributes. -m4_defun([_LT_LINKER_HARDCODE_LIBPATH], -[AC_MSG_CHECKING([how to hardcode library paths into programs]) -_LT_TAGVAR(hardcode_action, $1)= -if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" || - test -n "$_LT_TAGVAR(runpath_var, $1)" || - test "X$_LT_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then - - # We can hardcode non-existent directories. - if test "$_LT_TAGVAR(hardcode_direct, $1)" != no && - # If the only mechanism to avoid hardcoding is shlibpath_var, we - # have to relink, otherwise we might link with an installed library - # when we should be linking with a yet-to-be-installed one - ## test "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" != no && - test "$_LT_TAGVAR(hardcode_minus_L, $1)" != no; then - # Linking always hardcodes the temporary library directory. - _LT_TAGVAR(hardcode_action, $1)=relink - else - # We can link without hardcoding, and we can hardcode nonexisting dirs. - _LT_TAGVAR(hardcode_action, $1)=immediate - fi -else - # We cannot hardcode anything, or else we can only hardcode existing - # directories. - _LT_TAGVAR(hardcode_action, $1)=unsupported -fi -AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)]) - -if test "$_LT_TAGVAR(hardcode_action, $1)" = relink || - test "$_LT_TAGVAR(inherit_rpath, $1)" = yes; then - # Fast installation is not supported - enable_fast_install=no -elif test "$shlibpath_overrides_runpath" = yes || - test "$enable_shared" = no; then - # Fast installation is not necessary - enable_fast_install=needless -fi -_LT_TAGDECL([], [hardcode_action], [0], - [How to hardcode a shared library path into an executable]) -])# _LT_LINKER_HARDCODE_LIBPATH - - -# _LT_CMD_STRIPLIB -# ---------------- -m4_defun([_LT_CMD_STRIPLIB], -[m4_require([_LT_DECL_EGREP]) -striplib= -old_striplib= -AC_MSG_CHECKING([whether stripping libraries is possible]) -if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then - test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" - test -z "$striplib" && striplib="$STRIP --strip-unneeded" - AC_MSG_RESULT([yes]) -else -# FIXME - insert some real tests, host_os isn't really good enough - case $host_os in - darwin*) - if test -n "$STRIP" ; then - striplib="$STRIP -x" - old_striplib="$STRIP -S" - AC_MSG_RESULT([yes]) - else - AC_MSG_RESULT([no]) - fi - ;; - *) - AC_MSG_RESULT([no]) - ;; - esac -fi -_LT_DECL([], [old_striplib], [1], [Commands to strip libraries]) -_LT_DECL([], [striplib], [1]) -])# _LT_CMD_STRIPLIB - - -# _LT_SYS_DYNAMIC_LINKER([TAG]) -# ----------------------------- -# PORTME Fill in your ld.so characteristics -m4_defun([_LT_SYS_DYNAMIC_LINKER], -[AC_REQUIRE([AC_CANONICAL_HOST])dnl -m4_require([_LT_DECL_EGREP])dnl -m4_require([_LT_FILEUTILS_DEFAULTS])dnl -m4_require([_LT_DECL_OBJDUMP])dnl -m4_require([_LT_DECL_SED])dnl -AC_MSG_CHECKING([dynamic linker characteristics]) -m4_if([$1], - [], [ -if test "$GCC" = yes; then - case $host_os in - darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; - *) lt_awk_arg="/^libraries:/" ;; - esac - lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"` - if $ECHO "$lt_search_path_spec" | $GREP ';' >/dev/null ; then - # if the path contains ";" then we assume it to be the separator - # otherwise default to the standard path separator (i.e. ":") - it is - # assumed that no part of a normal pathname contains ";" but that should - # okay in the real world where ";" in dirpaths is itself problematic. - lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e 's/;/ /g'` - else - lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - fi - # Ok, now we have the path, separated by spaces, we can step through it - # and add multilib dir if necessary. - lt_tmp_lt_search_path_spec= - lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` - for lt_sys_path in $lt_search_path_spec; do - if test -d "$lt_sys_path/$lt_multi_os_dir"; then - lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" - else - test -d "$lt_sys_path" && \ - lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" - fi - done - lt_search_path_spec=`$ECHO $lt_tmp_lt_search_path_spec | awk ' -BEGIN {RS=" "; FS="/|\n";} { - lt_foo=""; - lt_count=0; - for (lt_i = NF; lt_i > 0; lt_i--) { - if ($lt_i != "" && $lt_i != ".") { - if ($lt_i == "..") { - lt_count++; - } else { - if (lt_count == 0) { - lt_foo="/" $lt_i lt_foo; - } else { - lt_count--; - } - } - } - } - if (lt_foo != "") { lt_freq[[lt_foo]]++; } - if (lt_freq[[lt_foo]] == 1) { print lt_foo; } -}'` - sys_lib_search_path_spec=`$ECHO $lt_search_path_spec` -else - sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" -fi]) -library_names_spec= -libname_spec='lib$name' -soname_spec= -shrext_cmds=".so" -postinstall_cmds= -postuninstall_cmds= -finish_cmds= -finish_eval= -shlibpath_var= -shlibpath_overrides_runpath=unknown -version_type=none -dynamic_linker="$host_os ld.so" -sys_lib_dlsearch_path_spec="/lib /usr/lib" -need_lib_prefix=unknown -hardcode_into_libs=no - -# when you set need_version to no, make sure it does not cause -set_version -# flags to be left without arguments -need_version=unknown - -case $host_os in -aix3*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' - shlibpath_var=LIBPATH - - # AIX 3 has no versioning support, so we append a major version to the name. - soname_spec='${libname}${release}${shared_ext}$major' - ;; - -aix[[4-9]]*) - version_type=linux - need_lib_prefix=no - need_version=no - hardcode_into_libs=yes - if test "$host_cpu" = ia64; then - # AIX 5 supports IA64 - library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - else - # With GCC up to 2.95.x, collect2 would create an import file - # for dependence libraries. The import file would start with - # the line `#! .'. This would cause the generated library to - # depend on `.', always an invalid library. This was fixed in - # development snapshots of GCC prior to 3.0. - case $host_os in - aix4 | aix4.[[01]] | aix4.[[01]].*) - if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' - echo ' yes ' - echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then - : - else - can_build_shared=no - fi - ;; - esac - # AIX (on Power*) has no versioning support, so currently we can not hardcode correct - # soname into executable. Probably we can add versioning support to - # collect2, so additional links can be useful in future. - if test "$aix_use_runtimelinking" = yes; then - # If using run time linking (on AIX 4.2 or later) use lib.so - # instead of lib.a to let people know that these are not - # typical AIX shared libraries. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - else - # We preserve .a as extension for shared libraries through AIX4.2 - # and later when we are not doing run time linking. - library_names_spec='${libname}${release}.a $libname.a' - soname_spec='${libname}${release}${shared_ext}$major' - fi - shlibpath_var=LIBPATH - fi - ;; - -amigaos*) - case $host_cpu in - powerpc) - # Since July 2007 AmigaOS4 officially supports .so libraries. - # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - ;; - m68k) - library_names_spec='$libname.ixlibrary $libname.a' - # Create ${libname}_ixlibrary.a entries in /sys/libs. - finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' - ;; - esac - ;; - -beos*) - library_names_spec='${libname}${shared_ext}' - dynamic_linker="$host_os ld.so" - shlibpath_var=LIBRARY_PATH - ;; - -bsdi[[45]]*) - version_type=linux - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" - sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" - # the default ld.so.conf also contains /usr/contrib/lib and - # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow - # libtool to hard-code these into programs - ;; - -cygwin* | mingw* | pw32* | cegcc*) - version_type=windows - shrext_cmds=".dll" - need_version=no - need_lib_prefix=no - - case $GCC,$host_os in - yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*) - library_names_spec='$libname.dll.a' - # DLL is installed to $(libdir)/../bin by postinstall_cmds - postinstall_cmds='base_file=`basename \${file}`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ - dldir=$destdir/`dirname \$dlpath`~ - test -d \$dldir || mkdir -p \$dldir~ - $install_prog $dir/$dlname \$dldir/$dlname~ - chmod a+x \$dldir/$dlname~ - if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then - eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; - fi' - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $RM \$dlpath' - shlibpath_overrides_runpath=yes - - case $host_os in - cygwin*) - # Cygwin DLLs use 'cyg' prefix rather than 'lib' - soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' - sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" - ;; - mingw* | cegcc*) - # MinGW DLLs use traditional 'lib' prefix - soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' - sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` - if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then - # It is most probably a Windows format PATH printed by - # mingw gcc, but we are running on Cygwin. Gcc prints its search - # path with ; separators, and with drive letters. We can handle the - # drive letters (cygwin fileutils understands them), so leave them, - # especially as we might pass files found there to a mingw objdump, - # which wouldn't understand a cygwinified path. Ahh. - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` - else - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - fi - ;; - pw32*) - # pw32 DLLs use 'pw' prefix rather than 'lib' - library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' - ;; - esac - ;; - - *) - library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib' - ;; - esac - dynamic_linker='Win32 ld.exe' - # FIXME: first we should search . and the directory the executable is in - shlibpath_var=PATH - ;; - -darwin* | rhapsody*) - dynamic_linker="$host_os dyld" - version_type=darwin - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' - soname_spec='${libname}${release}${major}$shared_ext' - shlibpath_overrides_runpath=yes - shlibpath_var=DYLD_LIBRARY_PATH - shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' -m4_if([$1], [],[ - sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"]) - sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' - ;; - -dgux*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -freebsd1*) - dynamic_linker=no - ;; - -freebsd* | dragonfly*) - # DragonFly does not have aout. When/if they implement a new - # versioning mechanism, adjust this. - if test -x /usr/bin/objformat; then - objformat=`/usr/bin/objformat` - else - case $host_os in - freebsd[[123]]*) objformat=aout ;; - *) objformat=elf ;; - esac - fi - version_type=freebsd-$objformat - case $version_type in - freebsd-elf*) - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - need_version=no - need_lib_prefix=no - ;; - freebsd-*) - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' - need_version=yes - ;; - esac - shlibpath_var=LD_LIBRARY_PATH - case $host_os in - freebsd2*) - shlibpath_overrides_runpath=yes - ;; - freebsd3.[[01]]* | freebsdelf3.[[01]]*) - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \ - freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1) - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - *) # from 4.6 on, and DragonFly - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - esac - ;; - -gnu*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - hardcode_into_libs=yes - ;; - -hpux9* | hpux10* | hpux11*) - # Give a soname corresponding to the major version so that dld.sl refuses to - # link against other versions. - version_type=sunos - need_lib_prefix=no - need_version=no - case $host_cpu in - ia64*) - shrext_cmds='.so' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.so" - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - if test "X$HPUX_IA64_MODE" = X32; then - sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" - else - sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" - fi - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - hppa*64*) - shrext_cmds='.sl' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.sl" - shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - *) - shrext_cmds='.sl' - dynamic_linker="$host_os dld.sl" - shlibpath_var=SHLIB_PATH - shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - ;; - esac - # HP-UX runs *really* slowly unless shared libraries are mode 555. - postinstall_cmds='chmod 555 $lib' - ;; - -interix[[3-9]]*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - -irix5* | irix6* | nonstopux*) - case $host_os in - nonstopux*) version_type=nonstopux ;; - *) - if test "$lt_cv_prog_gnu_ld" = yes; then - version_type=linux - else - version_type=irix - fi ;; - esac - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' - case $host_os in - irix5* | nonstopux*) - libsuff= shlibsuff= - ;; - *) - case $LD in # libtool.m4 will add one of these switches to LD - *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") - libsuff= shlibsuff= libmagic=32-bit;; - *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") - libsuff=32 shlibsuff=N32 libmagic=N32;; - *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") - libsuff=64 shlibsuff=64 libmagic=64-bit;; - *) libsuff= shlibsuff= libmagic=never-match;; - esac - ;; - esac - shlibpath_var=LD_LIBRARY${shlibsuff}_PATH - shlibpath_overrides_runpath=no - sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" - sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" - hardcode_into_libs=yes - ;; - -# No shared lib support for Linux oldld, aout, or coff. -linux*oldld* | linux*aout* | linux*coff*) - dynamic_linker=no - ;; - -# This must be Linux ELF. -linux* | k*bsd*-gnu | kopensolaris*-gnu) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - # Some binutils ld are patched to set DT_RUNPATH - save_LDFLAGS=$LDFLAGS - save_libdir=$libdir - eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \ - LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\"" - AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], - [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null], - [shlibpath_overrides_runpath=yes])]) - LDFLAGS=$save_LDFLAGS - libdir=$save_libdir - - # This implies no fast_install, which is unacceptable. - # Some rework will be needed to allow for fast_install - # before this can be enabled. - hardcode_into_libs=yes - - # Append ld.so.conf contents to the search path - if test -f /etc/ld.so.conf; then - lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` - sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" - fi - - # We used to test for /lib/ld.so.1 and disable shared libraries on - # powerpc, because MkLinux only supported shared libraries with the - # GNU dynamic linker. Since this was broken with cross compilers, - # most powerpc-linux boxes support dynamic linking these days and - # people can always --disable-shared, the test was removed, and we - # assume the GNU/Linux dynamic linker is in use. - dynamic_linker='GNU/Linux ld.so' - ;; - -netbsdelf*-gnu) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - dynamic_linker='NetBSD ld.elf_so' - ;; - -netbsd*) - version_type=sunos - need_lib_prefix=no - need_version=no - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - dynamic_linker='NetBSD (a.out) ld.so' - else - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='NetBSD ld.elf_so' - fi - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - -newsos6) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; - -*nto* | *qnx*) - version_type=qnx - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - dynamic_linker='ldqnx.so' - ;; - -openbsd*) - version_type=sunos - sys_lib_dlsearch_path_spec="/usr/lib" - need_lib_prefix=no - # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. - case $host_os in - openbsd3.3 | openbsd3.3.*) need_version=yes ;; - *) need_version=no ;; - esac - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - shlibpath_var=LD_LIBRARY_PATH - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - case $host_os in - openbsd2.[[89]] | openbsd2.[[89]].*) - shlibpath_overrides_runpath=no - ;; - *) - shlibpath_overrides_runpath=yes - ;; - esac - else - shlibpath_overrides_runpath=yes - fi - ;; - -os2*) - libname_spec='$name' - shrext_cmds=".dll" - need_lib_prefix=no - library_names_spec='$libname${shared_ext} $libname.a' - dynamic_linker='OS/2 ld.exe' - shlibpath_var=LIBPATH - ;; - -osf3* | osf4* | osf5*) - version_type=osf - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" - sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" - ;; - -rdos*) - dynamic_linker=no - ;; - -solaris*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - # ldd complains unless libraries are executable - postinstall_cmds='chmod +x $lib' - ;; - -sunos4*) - version_type=sunos - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - if test "$with_gnu_ld" = yes; then - need_lib_prefix=no - fi - need_version=yes - ;; - -sysv4 | sysv4.3*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - case $host_vendor in - sni) - shlibpath_overrides_runpath=no - need_lib_prefix=no - runpath_var=LD_RUN_PATH - ;; - siemens) - need_lib_prefix=no - ;; - motorola) - need_lib_prefix=no - need_version=no - shlibpath_overrides_runpath=no - sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' - ;; - esac - ;; - -sysv4*MP*) - if test -d /usr/nec ;then - version_type=linux - library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' - soname_spec='$libname${shared_ext}.$major' - shlibpath_var=LD_LIBRARY_PATH - fi - ;; - -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - version_type=freebsd-elf - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - if test "$with_gnu_ld" = yes; then - sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' - else - sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' - case $host_os in - sco3.2v5*) - sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" - ;; - esac - fi - sys_lib_dlsearch_path_spec='/usr/lib' - ;; - -tpf*) - # TPF is a cross-target only. Preferred cross-host = GNU/Linux. - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - -uts4*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -*) - dynamic_linker=no - ;; -esac -AC_MSG_RESULT([$dynamic_linker]) -test "$dynamic_linker" = no && can_build_shared=no - -variables_saved_for_relink="PATH $shlibpath_var $runpath_var" -if test "$GCC" = yes; then - variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" -fi - -if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then - sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" -fi -if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then - sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" -fi - -_LT_DECL([], [variables_saved_for_relink], [1], - [Variables whose values should be saved in libtool wrapper scripts and - restored at link time]) -_LT_DECL([], [need_lib_prefix], [0], - [Do we need the "lib" prefix for modules?]) -_LT_DECL([], [need_version], [0], [Do we need a version for libraries?]) -_LT_DECL([], [version_type], [0], [Library versioning type]) -_LT_DECL([], [runpath_var], [0], [Shared library runtime path variable]) -_LT_DECL([], [shlibpath_var], [0],[Shared library path variable]) -_LT_DECL([], [shlibpath_overrides_runpath], [0], - [Is shlibpath searched before the hard-coded library search path?]) -_LT_DECL([], [libname_spec], [1], [Format of library name prefix]) -_LT_DECL([], [library_names_spec], [1], - [[List of archive names. First name is the real one, the rest are links. - The last name is the one that the linker finds with -lNAME]]) -_LT_DECL([], [soname_spec], [1], - [[The coded name of the library, if different from the real name]]) -_LT_DECL([], [postinstall_cmds], [2], - [Command to use after installation of a shared archive]) -_LT_DECL([], [postuninstall_cmds], [2], - [Command to use after uninstallation of a shared archive]) -_LT_DECL([], [finish_cmds], [2], - [Commands used to finish a libtool library installation in a directory]) -_LT_DECL([], [finish_eval], [1], - [[As "finish_cmds", except a single script fragment to be evaled but - not shown]]) -_LT_DECL([], [hardcode_into_libs], [0], - [Whether we should hardcode library paths into libraries]) -_LT_DECL([], [sys_lib_search_path_spec], [2], - [Compile-time system search path for libraries]) -_LT_DECL([], [sys_lib_dlsearch_path_spec], [2], - [Run-time system search path for libraries]) -])# _LT_SYS_DYNAMIC_LINKER - - -# _LT_PATH_TOOL_PREFIX(TOOL) -# -------------------------- -# find a file program which can recognize shared library -AC_DEFUN([_LT_PATH_TOOL_PREFIX], -[m4_require([_LT_DECL_EGREP])dnl -AC_MSG_CHECKING([for $1]) -AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, -[case $MAGIC_CMD in -[[\\/*] | ?:[\\/]*]) - lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. - ;; -*) - lt_save_MAGIC_CMD="$MAGIC_CMD" - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR -dnl $ac_dummy forces splitting on constant user-supplied paths. -dnl POSIX.2 word splitting is done only on the output of word expansions, -dnl not every word. This closes a longstanding sh security hole. - ac_dummy="m4_if([$2], , $PATH, [$2])" - for ac_dir in $ac_dummy; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$1; then - lt_cv_path_MAGIC_CMD="$ac_dir/$1" - if test -n "$file_magic_test_file"; then - case $deplibs_check_method in - "file_magic "*) - file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` - MAGIC_CMD="$lt_cv_path_MAGIC_CMD" - if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | - $EGREP "$file_magic_regex" > /dev/null; then - : - else - cat <<_LT_EOF 1>&2 - -*** Warning: the command libtool uses to detect shared libraries, -*** $file_magic_cmd, produces output that libtool cannot recognize. -*** The result is that libtool may fail to recognize shared libraries -*** as such. This will affect the creation of libtool libraries that -*** depend on shared libraries, but programs linked with such libtool -*** libraries will work regardless of this problem. Nevertheless, you -*** may want to report the problem to your system manager and/or to -*** bug-libtool@gnu.org - -_LT_EOF - fi ;; - esac - fi - break - fi - done - IFS="$lt_save_ifs" - MAGIC_CMD="$lt_save_MAGIC_CMD" - ;; -esac]) -MAGIC_CMD="$lt_cv_path_MAGIC_CMD" -if test -n "$MAGIC_CMD"; then - AC_MSG_RESULT($MAGIC_CMD) -else - AC_MSG_RESULT(no) -fi -_LT_DECL([], [MAGIC_CMD], [0], - [Used to examine libraries when file_magic_cmd begins with "file"])dnl -])# _LT_PATH_TOOL_PREFIX - -# Old name: -AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], []) - - -# _LT_PATH_MAGIC -# -------------- -# find a file program which can recognize a shared library -m4_defun([_LT_PATH_MAGIC], -[_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) -if test -z "$lt_cv_path_MAGIC_CMD"; then - if test -n "$ac_tool_prefix"; then - _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) - else - MAGIC_CMD=: - fi -fi -])# _LT_PATH_MAGIC - - -# LT_PATH_LD -# ---------- -# find the pathname to the GNU or non-GNU linker -AC_DEFUN([LT_PATH_LD], -[AC_REQUIRE([AC_PROG_CC])dnl -AC_REQUIRE([AC_CANONICAL_HOST])dnl -AC_REQUIRE([AC_CANONICAL_BUILD])dnl -m4_require([_LT_DECL_SED])dnl -m4_require([_LT_DECL_EGREP])dnl - -AC_ARG_WITH([gnu-ld], - [AS_HELP_STRING([--with-gnu-ld], - [assume the C compiler uses GNU ld @<:@default=no@:>@])], - [test "$withval" = no || with_gnu_ld=yes], - [with_gnu_ld=no])dnl - -ac_prog=ld -if test "$GCC" = yes; then - # Check if gcc -print-prog-name=ld gives a path. - AC_MSG_CHECKING([for ld used by $CC]) - case $host in - *-*-mingw*) - # gcc leaves a trailing carriage return which upsets mingw - ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; - *) - ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; - esac - case $ac_prog in - # Accept absolute paths. - [[\\/]]* | ?:[[\\/]]*) - re_direlt='/[[^/]][[^/]]*/\.\./' - # Canonicalize the pathname of ld - ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` - while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do - ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` - done - test -z "$LD" && LD="$ac_prog" - ;; - "") - # If it fails, then pretend we aren't using GCC. - ac_prog=ld - ;; - *) - # If it is relative, then search for the first ld in PATH. - with_gnu_ld=unknown - ;; - esac -elif test "$with_gnu_ld" = yes; then - AC_MSG_CHECKING([for GNU ld]) -else - AC_MSG_CHECKING([for non-GNU ld]) -fi -AC_CACHE_VAL(lt_cv_path_LD, -[if test -z "$LD"; then - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for ac_dir in $PATH; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then - lt_cv_path_LD="$ac_dir/$ac_prog" - # Check to see if the program is GNU ld. I'd rather use --version, - # but apparently some variants of GNU ld only accept -v. - # Break only if it was the GNU/non-GNU ld that we prefer. - case `"$lt_cv_path_LD" -v 2>&1 &1 /dev/null 2>&1; then - lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' - lt_cv_file_magic_cmd='func_win32_libid' - else - lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?' - lt_cv_file_magic_cmd='$OBJDUMP -f' - fi - ;; - -cegcc) - # use the weaker test based on 'objdump'. See mingw*. - lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' - lt_cv_file_magic_cmd='$OBJDUMP -f' - ;; - -darwin* | rhapsody*) - lt_cv_deplibs_check_method=pass_all - ;; - -freebsd* | dragonfly*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then - case $host_cpu in - i*86 ) - # Not sure whether the presence of OpenBSD here was a mistake. - # Let's accept both of them until this is cleared up. - lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library' - lt_cv_file_magic_cmd=/usr/bin/file - lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` - ;; - esac - else - lt_cv_deplibs_check_method=pass_all - fi - ;; - -gnu*) - lt_cv_deplibs_check_method=pass_all - ;; - -hpux10.20* | hpux11*) - lt_cv_file_magic_cmd=/usr/bin/file - case $host_cpu in - ia64*) - lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' - lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so - ;; - hppa*64*) - [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]'] - lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl - ;; - *) - lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]].[[0-9]]) shared library' - lt_cv_file_magic_test_file=/usr/lib/libc.sl - ;; - esac - ;; - -interix[[3-9]]*) - # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here - lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$' - ;; - -irix5* | irix6* | nonstopux*) - case $LD in - *-32|*"-32 ") libmagic=32-bit;; - *-n32|*"-n32 ") libmagic=N32;; - *-64|*"-64 ") libmagic=64-bit;; - *) libmagic=never-match;; - esac - lt_cv_deplibs_check_method=pass_all - ;; - -# This must be Linux ELF. -linux* | k*bsd*-gnu | kopensolaris*-gnu) - lt_cv_deplibs_check_method=pass_all - ;; - -netbsd* | netbsdelf*-gnu) - if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then - lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' - else - lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' - fi - ;; - -newos6*) - lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' - lt_cv_file_magic_cmd=/usr/bin/file - lt_cv_file_magic_test_file=/usr/lib/libnls.so - ;; - -*nto* | *qnx*) - lt_cv_deplibs_check_method=pass_all - ;; - -openbsd*) - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' - else - lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' - fi - ;; - -osf3* | osf4* | osf5*) - lt_cv_deplibs_check_method=pass_all - ;; - -rdos*) - lt_cv_deplibs_check_method=pass_all - ;; - -solaris*) - lt_cv_deplibs_check_method=pass_all - ;; - -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - lt_cv_deplibs_check_method=pass_all - ;; - -sysv4 | sysv4.3*) - case $host_vendor in - motorola) - lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' - lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` - ;; - ncr) - lt_cv_deplibs_check_method=pass_all - ;; - sequent) - lt_cv_file_magic_cmd='/bin/file' - lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' - ;; - sni) - lt_cv_file_magic_cmd='/bin/file' - lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" - lt_cv_file_magic_test_file=/lib/libc.so - ;; - siemens) - lt_cv_deplibs_check_method=pass_all - ;; - pc) - lt_cv_deplibs_check_method=pass_all - ;; - esac - ;; - -tpf*) - lt_cv_deplibs_check_method=pass_all - ;; -esac -]) -file_magic_cmd=$lt_cv_file_magic_cmd -deplibs_check_method=$lt_cv_deplibs_check_method -test -z "$deplibs_check_method" && deplibs_check_method=unknown - -_LT_DECL([], [deplibs_check_method], [1], - [Method to check whether dependent libraries are shared objects]) -_LT_DECL([], [file_magic_cmd], [1], - [Command to use when deplibs_check_method == "file_magic"]) -])# _LT_CHECK_MAGIC_METHOD - - -# LT_PATH_NM -# ---------- -# find the pathname to a BSD- or MS-compatible name lister -AC_DEFUN([LT_PATH_NM], -[AC_REQUIRE([AC_PROG_CC])dnl -AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM, -[if test -n "$NM"; then - # Let the user override the test. - lt_cv_path_NM="$NM" -else - lt_nm_to_check="${ac_tool_prefix}nm" - if test -n "$ac_tool_prefix" && test "$build" = "$host"; then - lt_nm_to_check="$lt_nm_to_check nm" - fi - for lt_tmp_nm in $lt_nm_to_check; do - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - tmp_nm="$ac_dir/$lt_tmp_nm" - if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then - # Check to see if the nm accepts a BSD-compat flag. - # Adding the `sed 1q' prevents false positives on HP-UX, which says: - # nm: unknown option "B" ignored - # Tru64's nm complains that /dev/null is an invalid object file - case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in - */dev/null* | *'Invalid file or object type'*) - lt_cv_path_NM="$tmp_nm -B" - break - ;; - *) - case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in - */dev/null*) - lt_cv_path_NM="$tmp_nm -p" - break - ;; - *) - lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but - continue # so that we can try to find one that supports BSD flags - ;; - esac - ;; - esac - fi - done - IFS="$lt_save_ifs" - done - : ${lt_cv_path_NM=no} -fi]) -if test "$lt_cv_path_NM" != "no"; then - NM="$lt_cv_path_NM" -else - # Didn't find any BSD compatible name lister, look for dumpbin. - AC_CHECK_TOOLS(DUMPBIN, ["dumpbin -symbols" "link -dump -symbols"], :) - AC_SUBST([DUMPBIN]) - if test "$DUMPBIN" != ":"; then - NM="$DUMPBIN" - fi -fi -test -z "$NM" && NM=nm -AC_SUBST([NM]) -_LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl - -AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface], - [lt_cv_nm_interface="BSD nm" - echo "int some_variable = 0;" > conftest.$ac_ext - (eval echo "\"\$as_me:__oline__: $ac_compile\"" >&AS_MESSAGE_LOG_FD) - (eval "$ac_compile" 2>conftest.err) - cat conftest.err >&AS_MESSAGE_LOG_FD - (eval echo "\"\$as_me:__oline__: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD) - (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) - cat conftest.err >&AS_MESSAGE_LOG_FD - (eval echo "\"\$as_me:__oline__: output\"" >&AS_MESSAGE_LOG_FD) - cat conftest.out >&AS_MESSAGE_LOG_FD - if $GREP 'External.*some_variable' conftest.out > /dev/null; then - lt_cv_nm_interface="MS dumpbin" - fi - rm -f conftest*]) -])# LT_PATH_NM - -# Old names: -AU_ALIAS([AM_PROG_NM], [LT_PATH_NM]) -AU_ALIAS([AC_PROG_NM], [LT_PATH_NM]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AM_PROG_NM], []) -dnl AC_DEFUN([AC_PROG_NM], []) - - -# LT_LIB_M -# -------- -# check for math library -AC_DEFUN([LT_LIB_M], -[AC_REQUIRE([AC_CANONICAL_HOST])dnl -LIBM= -case $host in -*-*-beos* | *-*-cygwin* | *-*-pw32* | *-*-darwin*) - # These system don't have libm, or don't need it - ;; -*-ncr-sysv4.3*) - AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw") - AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") - ;; -*) - AC_CHECK_LIB(m, cos, LIBM="-lm") - ;; -esac -AC_SUBST([LIBM]) -])# LT_LIB_M - -# Old name: -AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_CHECK_LIBM], []) - - -# _LT_COMPILER_NO_RTTI([TAGNAME]) -# ------------------------------- -m4_defun([_LT_COMPILER_NO_RTTI], -[m4_require([_LT_TAG_COMPILER])dnl - -_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= - -if test "$GCC" = yes; then - _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' - - _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], - lt_cv_prog_compiler_rtti_exceptions, - [-fno-rtti -fno-exceptions], [], - [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) -fi -_LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1], - [Compiler flag to turn off builtin functions]) -])# _LT_COMPILER_NO_RTTI - - -# _LT_CMD_GLOBAL_SYMBOLS -# ---------------------- -m4_defun([_LT_CMD_GLOBAL_SYMBOLS], -[AC_REQUIRE([AC_CANONICAL_HOST])dnl -AC_REQUIRE([AC_PROG_CC])dnl -AC_REQUIRE([LT_PATH_NM])dnl -AC_REQUIRE([LT_PATH_LD])dnl -m4_require([_LT_DECL_SED])dnl -m4_require([_LT_DECL_EGREP])dnl -m4_require([_LT_TAG_COMPILER])dnl - -# Check for command to grab the raw symbol name followed by C symbol from nm. -AC_MSG_CHECKING([command to parse $NM output from $compiler object]) -AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], -[ -# These are sane defaults that work on at least a few old systems. -# [They come from Ultrix. What could be older than Ultrix?!! ;)] - -# Character class describing NM global symbol codes. -symcode='[[BCDEGRST]]' - -# Regexp to match symbols that can be accessed directly from C. -sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' - -# Define system-specific variables. -case $host_os in -aix*) - symcode='[[BCDT]]' - ;; -cygwin* | mingw* | pw32* | cegcc*) - symcode='[[ABCDGISTW]]' - ;; -hpux*) - if test "$host_cpu" = ia64; then - symcode='[[ABCDEGRST]]' - fi - ;; -irix* | nonstopux*) - symcode='[[BCDEGRST]]' - ;; -osf*) - symcode='[[BCDEGQRST]]' - ;; -solaris*) - symcode='[[BDRT]]' - ;; -sco3.2v5*) - symcode='[[DT]]' - ;; -sysv4.2uw2*) - symcode='[[DT]]' - ;; -sysv5* | sco5v6* | unixware* | OpenUNIX*) - symcode='[[ABDT]]' - ;; -sysv4) - symcode='[[DFNSTU]]' - ;; -esac - -# If we're using GNU nm, then use its standard symbol codes. -case `$NM -V 2>&1` in -*GNU* | *'with BFD'*) - symcode='[[ABCDGIRSTW]]' ;; -esac - -# Transform an extracted symbol line into a proper C declaration. -# Some systems (esp. on ia64) link data and code symbols differently, -# so use this general approach. -lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" - -# Transform an extracted symbol line into symbol name and symbol address -lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p'" -lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"lib\2\", (void *) \&\2},/p'" - -# Handle CRLF in mingw tool chain -opt_cr= -case $build_os in -mingw*) - opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp - ;; -esac - -# Try without a prefix underscore, then with it. -for ac_symprfx in "" "_"; do - - # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. - symxfrm="\\1 $ac_symprfx\\2 \\2" - - # Write the raw and C identifiers. - if test "$lt_cv_nm_interface" = "MS dumpbin"; then - # Fake it for dumpbin and say T for any non-static function - # and D for any global variable. - # Also find C++ and __fastcall symbols from MSVC++, - # which start with @ or ?. - lt_cv_sys_global_symbol_pipe="$AWK ['"\ -" {last_section=section; section=\$ 3};"\ -" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ -" \$ 0!~/External *\|/{next};"\ -" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ -" {if(hide[section]) next};"\ -" {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ -" {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ -" s[1]~/^[@?]/{print s[1], s[1]; next};"\ -" s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ -" ' prfx=^$ac_symprfx]" - else - lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" - fi - - # Check to see that the pipe works correctly. - pipe_works=no - - rm -f conftest* - cat > conftest.$ac_ext <<_LT_EOF -#ifdef __cplusplus -extern "C" { -#endif -char nm_test_var; -void nm_test_func(void); -void nm_test_func(void){} -#ifdef __cplusplus -} -#endif -int main(){nm_test_var='a';nm_test_func();return(0);} -_LT_EOF - - if AC_TRY_EVAL(ac_compile); then - # Now try to grab the symbols. - nlist=conftest.nm - if AC_TRY_EVAL(NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) && test -s "$nlist"; then - # Try sorting and uniquifying the output. - if sort "$nlist" | uniq > "$nlist"T; then - mv -f "$nlist"T "$nlist" - else - rm -f "$nlist"T - fi - - # Make sure that we snagged all the symbols we need. - if $GREP ' nm_test_var$' "$nlist" >/dev/null; then - if $GREP ' nm_test_func$' "$nlist" >/dev/null; then - cat <<_LT_EOF > conftest.$ac_ext -#ifdef __cplusplus -extern "C" { -#endif - -_LT_EOF - # Now generate the symbol file. - eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' - - cat <<_LT_EOF >> conftest.$ac_ext - -/* The mapping between symbol names and symbols. */ -const struct { - const char *name; - void *address; -} -lt__PROGRAM__LTX_preloaded_symbols[[]] = -{ - { "@PROGRAM@", (void *) 0 }, -_LT_EOF - $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext - cat <<\_LT_EOF >> conftest.$ac_ext - {0, (void *) 0} -}; - -/* This works around a problem in FreeBSD linker */ -#ifdef FREEBSD_WORKAROUND -static const void *lt_preloaded_setup() { - return lt__PROGRAM__LTX_preloaded_symbols; -} -#endif - -#ifdef __cplusplus -} -#endif -_LT_EOF - # Now try linking the two files. - mv conftest.$ac_objext conftstm.$ac_objext - lt_save_LIBS="$LIBS" - lt_save_CFLAGS="$CFLAGS" - LIBS="conftstm.$ac_objext" - CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" - if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then - pipe_works=yes - fi - LIBS="$lt_save_LIBS" - CFLAGS="$lt_save_CFLAGS" - else - echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD - fi - else - echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD - fi - else - echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD - fi - else - echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD - cat conftest.$ac_ext >&5 - fi - rm -rf conftest* conftst* - - # Do not use the global_symbol_pipe unless it works. - if test "$pipe_works" = yes; then - break - else - lt_cv_sys_global_symbol_pipe= - fi -done -]) -if test -z "$lt_cv_sys_global_symbol_pipe"; then - lt_cv_sys_global_symbol_to_cdecl= -fi -if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then - AC_MSG_RESULT(failed) -else - AC_MSG_RESULT(ok) -fi - -_LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1], - [Take the output of nm and produce a listing of raw symbols and C names]) -_LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1], - [Transform the output of nm in a proper C declaration]) -_LT_DECL([global_symbol_to_c_name_address], - [lt_cv_sys_global_symbol_to_c_name_address], [1], - [Transform the output of nm in a C name address pair]) -_LT_DECL([global_symbol_to_c_name_address_lib_prefix], - [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1], - [Transform the output of nm in a C name address pair when lib prefix is needed]) -]) # _LT_CMD_GLOBAL_SYMBOLS - - -# _LT_COMPILER_PIC([TAGNAME]) -# --------------------------- -m4_defun([_LT_COMPILER_PIC], -[m4_require([_LT_TAG_COMPILER])dnl -_LT_TAGVAR(lt_prog_compiler_wl, $1)= -_LT_TAGVAR(lt_prog_compiler_pic, $1)= -_LT_TAGVAR(lt_prog_compiler_static, $1)= - -AC_MSG_CHECKING([for $compiler option to produce PIC]) -m4_if([$1], [CXX], [ - # C++ specific cases for pic, static, wl, etc. - if test "$GXX" = yes; then - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' - - case $host_os in - aix*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - fi - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - m68k) - # FIXME: we need at least 68020 code to build shared libraries, but - # adding the `-m68020' flag to GCC prevents building anything better, - # like `-m68040'. - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' - ;; - esac - ;; - - beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) - # PIC is the default for these OSes. - ;; - mingw* | cygwin* | os2* | pw32* | cegcc*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - # Although the cygwin gcc ignores -fPIC, still need this for old-style - # (--disable-auto-import) libraries - m4_if([$1], [GCJ], [], - [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) - ;; - darwin* | rhapsody*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' - ;; - *djgpp*) - # DJGPP does not support shared libraries at all - _LT_TAGVAR(lt_prog_compiler_pic, $1)= - ;; - interix[[3-9]]*) - # Interix 3.x gcc -fpic/-fPIC options generate broken code. - # Instead, we relocate shared libraries at runtime. - ;; - sysv4*MP*) - if test -d /usr/nec; then - _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic - fi - ;; - hpux*) - # PIC is the default for 64-bit PA HP-UX, but not for 32-bit - # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag - # sets the default TLS model and affects inlining. - case $host_cpu in - hppa*64*) - ;; - *) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - esac - ;; - *qnx* | *nto*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' - ;; - *) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - esac - else - case $host_os in - aix[[4-9]]*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - else - _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' - fi - ;; - chorus*) - case $cc_basename in - cxch68*) - # Green Hills C++ Compiler - # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" - ;; - esac - ;; - dgux*) - case $cc_basename in - ec++*) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - ;; - ghcx*) - # Green Hills C++ Compiler - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' - ;; - *) - ;; - esac - ;; - freebsd* | dragonfly*) - # FreeBSD uses GNU C++ - ;; - hpux9* | hpux10* | hpux11*) - case $cc_basename in - CC*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' - if test "$host_cpu" != ia64; then - _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' - fi - ;; - aCC*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' - ;; - esac - ;; - *) - ;; - esac - ;; - interix*) - # This is c89, which is MS Visual C++ (no shared libs) - # Anyone wants to do a port? - ;; - irix5* | irix6* | nonstopux*) - case $cc_basename in - CC*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - # CC pic flag -KPIC is the default. - ;; - *) - ;; - esac - ;; - linux* | k*bsd*-gnu | kopensolaris*-gnu) - case $cc_basename in - KCC*) - # KAI C++ Compiler - _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - ecpc* ) - # old Intel C++ for x86_64 which still supported -KPIC. - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' - ;; - icpc* ) - # Intel C++, used to be incompatible with GCC. - # ICC 10 doesn't accept -KPIC any more. - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' - ;; - pgCC* | pgcpp*) - # Portland Group C++ compiler - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - cxx*) - # Compaq C++ - # Make sure the PIC flag is empty. It appears that all Alpha - # Linux and Compaq Tru64 Unix objects are PIC. - _LT_TAGVAR(lt_prog_compiler_pic, $1)= - _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - xlc* | xlC*) - # IBM XL 8.0 on PPC - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' - ;; - *) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C++ 5.9 - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' - ;; - esac - ;; - esac - ;; - lynxos*) - ;; - m88k*) - ;; - mvs*) - case $cc_basename in - cxx*) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' - ;; - *) - ;; - esac - ;; - netbsd* | netbsdelf*-gnu) - ;; - *qnx* | *nto*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' - ;; - osf3* | osf4* | osf5*) - case $cc_basename in - KCC*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' - ;; - RCC*) - # Rational C++ 2.4.1 - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' - ;; - cxx*) - # Digital/Compaq C++ - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - # Make sure the PIC flag is empty. It appears that all Alpha - # Linux and Compaq Tru64 Unix objects are PIC. - _LT_TAGVAR(lt_prog_compiler_pic, $1)= - _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - *) - ;; - esac - ;; - psos*) - ;; - solaris*) - case $cc_basename in - CC*) - # Sun C++ 4.2, 5.x and Centerline C++ - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' - ;; - gcx*) - # Green Hills C++ Compiler - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' - ;; - *) - ;; - esac - ;; - sunos4*) - case $cc_basename in - CC*) - # Sun C++ 4.x - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - lcc*) - # Lucid - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' - ;; - *) - ;; - esac - ;; - sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) - case $cc_basename in - CC*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - esac - ;; - tandem*) - case $cc_basename in - NCC*) - # NonStop-UX NCC 3.20 - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - ;; - *) - ;; - esac - ;; - vxworks*) - ;; - *) - _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no - ;; - esac - fi -], -[ - if test "$GCC" = yes; then - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' - - case $host_os in - aix*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - fi - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - m68k) - # FIXME: we need at least 68020 code to build shared libraries, but - # adding the `-m68020' flag to GCC prevents building anything better, - # like `-m68040'. - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' - ;; - esac - ;; - - beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) - # PIC is the default for these OSes. - ;; - - mingw* | cygwin* | pw32* | os2* | cegcc*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - # Although the cygwin gcc ignores -fPIC, still need this for old-style - # (--disable-auto-import) libraries - m4_if([$1], [GCJ], [], - [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) - ;; - - darwin* | rhapsody*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' - ;; - - hpux*) - # PIC is the default for 64-bit PA HP-UX, but not for 32-bit - # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag - # sets the default TLS model and affects inlining. - case $host_cpu in - hppa*64*) - # +Z the default - ;; - *) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - esac - ;; - - interix[[3-9]]*) - # Interix 3.x gcc -fpic/-fPIC options generate broken code. - # Instead, we relocate shared libraries at runtime. - ;; - - msdosdjgpp*) - # Just because we use GCC doesn't mean we suddenly get shared libraries - # on systems that don't support them. - _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no - enable_shared=no - ;; - - *nto* | *qnx*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' - ;; - - sysv4*MP*) - if test -d /usr/nec; then - _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic - fi - ;; - - *) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - esac - else - # PORTME Check for flag to pass linker flags through the system compiler. - case $host_os in - aix*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - else - _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' - fi - ;; - - mingw* | cygwin* | pw32* | os2* | cegcc*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - m4_if([$1], [GCJ], [], - [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) - ;; - - hpux9* | hpux10* | hpux11*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but - # not for PA HP-UX. - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' - ;; - esac - # Is there a better lt_prog_compiler_static that works with the bundled CC? - _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' - ;; - - irix5* | irix6* | nonstopux*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - # PIC (with -KPIC) is the default. - _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - - linux* | k*bsd*-gnu | kopensolaris*-gnu) - case $cc_basename in - # old Intel for x86_64 which still supported -KPIC. - ecc*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' - ;; - # icc used to be incompatible with GCC. - # ICC 10 doesn't accept -KPIC any more. - icc* | ifort*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' - ;; - # Lahey Fortran 8.1. - lf95*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared' - _LT_TAGVAR(lt_prog_compiler_static, $1)='--static' - ;; - pgcc* | pgf77* | pgf90* | pgf95*) - # Portland Group compilers (*not* the Pentium gcc compiler, - # which looks to be a dead project) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - ccc*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - # All Alpha code is PIC. - _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - xl*) - # IBM XL C 8.0/Fortran 10.1 on PPC - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' - ;; - *) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C 5.9 - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - ;; - *Sun\ F*) - # Sun Fortran 8.3 passes all unrecognized flags to the linker - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - _LT_TAGVAR(lt_prog_compiler_wl, $1)='' - ;; - esac - ;; - esac - ;; - - newsos6) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - - *nto* | *qnx*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' - ;; - - osf3* | osf4* | osf5*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - # All OSF/1 code is PIC. - _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - - rdos*) - _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - - solaris*) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - case $cc_basename in - f77* | f90* | f95*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';; - *) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';; - esac - ;; - - sunos4*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - - sysv4 | sysv4.2uw2* | sysv4.3*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - - sysv4*MP*) - if test -d /usr/nec ;then - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - fi - ;; - - sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - - unicos*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no - ;; - - uts4*) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - - *) - _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no - ;; - esac - fi -]) -case $host_os in - # For platforms which do not support PIC, -DPIC is meaningless: - *djgpp*) - _LT_TAGVAR(lt_prog_compiler_pic, $1)= - ;; - *) - _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])" - ;; -esac -AC_MSG_RESULT([$_LT_TAGVAR(lt_prog_compiler_pic, $1)]) -_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1], - [How to pass a linker flag through the compiler]) - -# -# Check to make sure the PIC flag actually works. -# -if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then - _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works], - [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)], - [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [], - [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in - "" | " "*) ;; - *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;; - esac], - [_LT_TAGVAR(lt_prog_compiler_pic, $1)= - _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) -fi -_LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1], - [Additional compiler flags for building library objects]) - -# -# Check to make sure the static flag actually works. -# -wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\" -_LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], - _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1), - $lt_tmp_static_flag, - [], - [_LT_TAGVAR(lt_prog_compiler_static, $1)=]) -_LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1], - [Compiler flag to prevent dynamic linking]) -])# _LT_COMPILER_PIC - - -# _LT_LINKER_SHLIBS([TAGNAME]) -# ---------------------------- -# See if the linker supports building shared libraries. -m4_defun([_LT_LINKER_SHLIBS], -[AC_REQUIRE([LT_PATH_LD])dnl -AC_REQUIRE([LT_PATH_NM])dnl -m4_require([_LT_FILEUTILS_DEFAULTS])dnl -m4_require([_LT_DECL_EGREP])dnl -m4_require([_LT_DECL_SED])dnl -m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl -m4_require([_LT_TAG_COMPILER])dnl -AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) -m4_if([$1], [CXX], [ - _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - case $host_os in - aix[[4-9]]*) - # If we're using GNU nm, then we don't want the "-C" option. - # -C means demangle to AIX nm, but means don't demangle with GNU nm - if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then - _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' - else - _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' - fi - ;; - pw32*) - _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds" - ;; - cygwin* | mingw* | cegcc*) - _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;/^.*[[ ]]__nm__/s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' - ;; - linux* | k*bsd*-gnu) - _LT_TAGVAR(link_all_deplibs, $1)=no - ;; - *) - _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - ;; - esac - _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] -], [ - runpath_var= - _LT_TAGVAR(allow_undefined_flag, $1)= - _LT_TAGVAR(always_export_symbols, $1)=no - _LT_TAGVAR(archive_cmds, $1)= - _LT_TAGVAR(archive_expsym_cmds, $1)= - _LT_TAGVAR(compiler_needs_object, $1)=no - _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no - _LT_TAGVAR(export_dynamic_flag_spec, $1)= - _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - _LT_TAGVAR(hardcode_automatic, $1)=no - _LT_TAGVAR(hardcode_direct, $1)=no - _LT_TAGVAR(hardcode_direct_absolute, $1)=no - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= - _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= - _LT_TAGVAR(hardcode_libdir_separator, $1)= - _LT_TAGVAR(hardcode_minus_L, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported - _LT_TAGVAR(inherit_rpath, $1)=no - _LT_TAGVAR(link_all_deplibs, $1)=unknown - _LT_TAGVAR(module_cmds, $1)= - _LT_TAGVAR(module_expsym_cmds, $1)= - _LT_TAGVAR(old_archive_from_new_cmds, $1)= - _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)= - _LT_TAGVAR(thread_safe_flag_spec, $1)= - _LT_TAGVAR(whole_archive_flag_spec, $1)= - # include_expsyms should be a list of space-separated symbols to be *always* - # included in the symbol list - _LT_TAGVAR(include_expsyms, $1)= - # exclude_expsyms can be an extended regexp of symbols to exclude - # it will be wrapped by ` (' and `)$', so one must not match beginning or - # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', - # as well as any symbol that contains `d'. - _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] - # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out - # platforms (ab)use it in PIC code, but their linkers get confused if - # the symbol is explicitly referenced. Since portable code cannot - # rely on this symbol name, it's probably fine to never include it in - # preloaded symbol tables. - # Exclude shared library initialization/finalization symbols. -dnl Note also adjust exclude_expsyms for C++ above. - extract_expsyms_cmds= - - case $host_os in - cygwin* | mingw* | pw32* | cegcc*) - # FIXME: the MSVC++ port hasn't been tested in a loooong time - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - if test "$GCC" != yes; then - with_gnu_ld=no - fi - ;; - interix*) - # we just hope/assume this is gcc and not c89 (= MSVC++) - with_gnu_ld=yes - ;; - openbsd*) - with_gnu_ld=no - ;; - linux* | k*bsd*-gnu) - _LT_TAGVAR(link_all_deplibs, $1)=no - ;; - esac - - _LT_TAGVAR(ld_shlibs, $1)=yes - if test "$with_gnu_ld" = yes; then - # If archive_cmds runs LD, not CC, wlarc should be empty - wlarc='${wl}' - - # Set some defaults for GNU ld with shared library support. These - # are reset later if shared libraries are not supported. Putting them - # here allows them to be overridden if necessary. - runpath_var=LD_RUN_PATH - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - # ancient GNU ld didn't support --whole-archive et. al. - if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then - _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - else - _LT_TAGVAR(whole_archive_flag_spec, $1)= - fi - supports_anon_versioning=no - case `$LD -v 2>&1` in - *GNU\ gold*) supports_anon_versioning=yes ;; - *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 - *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... - *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... - *\ 2.11.*) ;; # other 2.11 versions - *) supports_anon_versioning=yes ;; - esac - - # See if GNU ld supports shared libraries. - case $host_os in - aix[[3-9]]*) - # On AIX/PPC, the GNU linker is very broken - if test "$host_cpu" != ia64; then - _LT_TAGVAR(ld_shlibs, $1)=no - cat <<_LT_EOF 1>&2 - -*** Warning: the GNU linker, at least up to release 2.9.1, is reported -*** to be unable to reliably create shared libraries on AIX. -*** Therefore, libtool is disabling shared libraries support. If you -*** really care for shared libraries, you may want to modify your PATH -*** so that a non-GNU linker is found, and then restart. - -_LT_EOF - fi - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='' - ;; - m68k) - _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_minus_L, $1)=yes - ;; - esac - ;; - - beos*) - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - # Joseph Beckenbach says some releases of gcc - # support --undefined. This deserves some investigation. FIXME - _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - cygwin* | mingw* | pw32* | cegcc*) - # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, - # as there is no search path for DLLs. - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - _LT_TAGVAR(always_export_symbols, $1)=no - _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes - _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' - - if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - # If the export-symbols file already is a .def file (1st line - # is EXPORTS), use it as is; otherwise, prepend... - _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - cp $export_symbols $output_objdir/$soname.def; - else - echo EXPORTS > $output_objdir/$soname.def; - cat $export_symbols >> $output_objdir/$soname.def; - fi~ - $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - interix[[3-9]]*) - _LT_TAGVAR(hardcode_direct, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. - # Instead, shared libraries are loaded at an image base (0x10000000 by - # default) and relocated if they conflict, which is a slow very memory - # consuming and fragmenting process. To avoid this, we pick a random, - # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link - # time. Moving up from 0x10000000 also allows more sbrk(2) space. - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - ;; - - gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) - tmp_diet=no - if test "$host_os" = linux-dietlibc; then - case $cc_basename in - diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) - esac - fi - if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ - && test "$tmp_diet" = no - then - tmp_addflag= - tmp_sharedflag='-shared' - case $cc_basename,$host_cpu in - pgcc*) # Portland Group C compiler - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_addflag=' $pic_flag' - ;; - pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_addflag=' $pic_flag -Mnomain' ;; - ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 - tmp_addflag=' -i_dynamic' ;; - efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 - tmp_addflag=' -i_dynamic -nofor_main' ;; - ifc* | ifort*) # Intel Fortran compiler - tmp_addflag=' -nofor_main' ;; - lf95*) # Lahey Fortran 8.1 - _LT_TAGVAR(whole_archive_flag_spec, $1)= - tmp_sharedflag='--shared' ;; - xl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below) - tmp_sharedflag='-qmkshrobj' - tmp_addflag= ;; - esac - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) # Sun C 5.9 - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' - _LT_TAGVAR(compiler_needs_object, $1)=yes - tmp_sharedflag='-G' ;; - *Sun\ F*) # Sun Fortran 8.3 - tmp_sharedflag='-G' ;; - esac - _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - - if test "x$supports_anon_versioning" = xyes; then - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - echo "local: *; };" >> $output_objdir/$libname.ver~ - $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' - fi - - case $cc_basename in - xlf*) - # IBM XL Fortran 10.1 on PPC cannot create shared libs itself - _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= - _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir' - _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib' - if test "x$supports_anon_versioning" = xyes; then - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - echo "local: *; };" >> $output_objdir/$libname.ver~ - $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' - fi - ;; - esac - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - netbsd* | netbsdelf*-gnu) - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' - wlarc= - else - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - fi - ;; - - solaris*) - if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then - _LT_TAGVAR(ld_shlibs, $1)=no - cat <<_LT_EOF 1>&2 - -*** Warning: The releases 2.8.* of the GNU linker cannot reliably -*** create shared libraries on Solaris systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.9.1 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. - -_LT_EOF - elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) - case `$LD -v 2>&1` in - *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) - _LT_TAGVAR(ld_shlibs, $1)=no - cat <<_LT_EOF 1>&2 - -*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not -*** reliably create shared libraries on SCO systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.16.91.0.3 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. - -_LT_EOF - ;; - *) - # For security reasons, it is highly recommended that you always - # use absolute paths for naming shared libraries, and exclude the - # DT_RUNPATH tag from executables and libraries. But doing so - # requires that you compile everything twice, which is a pain. - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - ;; - - sunos4*) - _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' - wlarc= - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - *) - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - - if test "$_LT_TAGVAR(ld_shlibs, $1)" = no; then - runpath_var= - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= - _LT_TAGVAR(export_dynamic_flag_spec, $1)= - _LT_TAGVAR(whole_archive_flag_spec, $1)= - fi - else - # PORTME fill in a description of your system's linker (not GNU ld) - case $host_os in - aix3*) - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - _LT_TAGVAR(always_export_symbols, $1)=yes - _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' - # Note: this linker hardcodes the directories in LIBPATH if there - # are no directories specified by -L. - _LT_TAGVAR(hardcode_minus_L, $1)=yes - if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then - # Neither direct hardcoding nor static linking is supported with a - # broken collect2. - _LT_TAGVAR(hardcode_direct, $1)=unsupported - fi - ;; - - aix[[4-9]]*) - if test "$host_cpu" = ia64; then - # On IA64, the linker does run time linking by default, so we don't - # have to do anything special. - aix_use_runtimelinking=no - exp_sym_flag='-Bexport' - no_entry_flag="" - else - # If we're using GNU nm, then we don't want the "-C" option. - # -C means demangle to AIX nm, but means don't demangle with GNU nm - if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then - _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' - else - _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' - fi - aix_use_runtimelinking=no - - # Test if we are trying to use run time linking or normal - # AIX style linking. If -brtl is somewhere in LDFLAGS, we - # need to do runtime linking. - case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) - for ld_flag in $LDFLAGS; do - if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then - aix_use_runtimelinking=yes - break - fi - done - ;; - esac - - exp_sym_flag='-bexport' - no_entry_flag='-bnoentry' - fi - - # When large executables or shared objects are built, AIX ld can - # have problems creating the table of contents. If linking a library - # or program results in "error TOC overflow" add -mminimal-toc to - # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not - # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. - - _LT_TAGVAR(archive_cmds, $1)='' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_direct_absolute, $1)=yes - _LT_TAGVAR(hardcode_libdir_separator, $1)=':' - _LT_TAGVAR(link_all_deplibs, $1)=yes - _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' - - if test "$GCC" = yes; then - case $host_os in aix4.[[012]]|aix4.[[012]].*) - # We only want to do this on AIX 4.2 and lower, the check - # below for broken collect2 doesn't work under 4.3+ - collect2name=`${CC} -print-prog-name=collect2` - if test -f "$collect2name" && - strings "$collect2name" | $GREP resolve_lib_name >/dev/null - then - # We have reworked collect2 - : - else - # We have old collect2 - _LT_TAGVAR(hardcode_direct, $1)=unsupported - # It fails to find uninstalled libraries when the uninstalled - # path is not listed in the libpath. Setting hardcode_minus_L - # to unsupported forces relinking - _LT_TAGVAR(hardcode_minus_L, $1)=yes - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)= - fi - ;; - esac - shared_flag='-shared' - if test "$aix_use_runtimelinking" = yes; then - shared_flag="$shared_flag "'${wl}-G' - fi - _LT_TAGVAR(link_all_deplibs, $1)=no - else - # not using gcc - if test "$host_cpu" = ia64; then - # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release - # chokes on -Wl,-G. The following line is correct: - shared_flag='-G' - else - if test "$aix_use_runtimelinking" = yes; then - shared_flag='${wl}-G' - else - shared_flag='${wl}-bM:SRE' - fi - fi - fi - - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' - # It seems that -bexpall does not export symbols beginning with - # underscore (_), so it is better to generate a list of symbols to export. - _LT_TAGVAR(always_export_symbols, $1)=yes - if test "$aix_use_runtimelinking" = yes; then - # Warning - without using the other runtime loading flags (-brtl), - # -berok will link without error, but may produce a broken library. - _LT_TAGVAR(allow_undefined_flag, $1)='-berok' - # Determine the default libpath from the value encoded in an - # empty executable. - _LT_SYS_MODULE_PATH_AIX - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" - else - if test "$host_cpu" = ia64; then - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' - _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" - _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" - else - # Determine the default libpath from the value encoded in an - # empty executable. - _LT_SYS_MODULE_PATH_AIX - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" - # Warning - without using the other run time loading flags, - # -berok will link without error, but may produce a broken library. - _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' - _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' - # Exported symbols can be pulled into shared objects from archives - _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' - _LT_TAGVAR(archive_cmds_need_lc, $1)=yes - # This is similar to how AIX traditionally builds its shared libraries. - _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' - fi - fi - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='' - ;; - m68k) - _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_minus_L, $1)=yes - ;; - esac - ;; - - bsdi[[45]]*) - _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic - ;; - - cygwin* | mingw* | pw32* | cegcc*) - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - # hardcode_libdir_flag_spec is actually meaningless, as there is - # no search path for DLLs. - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - # Tell ltmain to make .lib files, not .a files. - libext=lib - # Tell ltmain to make .dll files, not .so files. - shrext_cmds=".dll" - # FIXME: Setting linknames here is a bad hack. - _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `$ECHO "X$deplibs" | $Xsed -e '\''s/ -lc$//'\''` -link -dll~linknames=' - # The linker will automatically build a .lib file if we build a DLL. - _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' - # FIXME: Should let the user specify the lib program. - _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs' - _LT_TAGVAR(fix_srcfile_path, $1)='`cygpath -w "$srcfile"`' - _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes - ;; - - darwin* | rhapsody*) - _LT_DARWIN_LINKER_FEATURES($1) - ;; - - dgux*) - _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - freebsd1*) - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - - # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor - # support. Future versions do this automatically, but an explicit c++rt0.o - # does not break anything, and helps significantly (at the cost of a little - # extra space). - freebsd2.2*) - _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - # Unfortunately, older versions of FreeBSD 2 do not have this feature. - freebsd2*) - _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_minus_L, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - # FreeBSD 3 and greater uses gcc -shared to do shared libraries. - freebsd* | dragonfly*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - hpux9*) - if test "$GCC" = yes; then - _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - else - _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - fi - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_TAGVAR(hardcode_direct, $1)=yes - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - _LT_TAGVAR(hardcode_minus_L, $1)=yes - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - ;; - - hpux10*) - if test "$GCC" = yes -a "$with_gnu_ld" = no; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - else - _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' - fi - if test "$with_gnu_ld" = no; then - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_direct_absolute, $1)=yes - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - _LT_TAGVAR(hardcode_minus_L, $1)=yes - fi - ;; - - hpux11*) - if test "$GCC" = yes -a "$with_gnu_ld" = no; then - case $host_cpu in - hppa*64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - ia64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - else - case $host_cpu in - hppa*64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - ia64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - fi - if test "$with_gnu_ld" = no; then - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - - case $host_cpu in - hppa*64*|ia64*) - _LT_TAGVAR(hardcode_direct, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - *) - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_direct_absolute, $1)=yes - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - _LT_TAGVAR(hardcode_minus_L, $1)=yes - ;; - esac - fi - ;; - - irix5* | irix6* | nonstopux*) - if test "$GCC" = yes; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - # Try to use the -exported_symbol ld option, if it does not - # work, assume that -exports_file does not work either and - # implicitly export all symbols. - save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" - AC_LINK_IFELSE(int foo(void) {}, - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' - ) - LDFLAGS="$save_LDFLAGS" - else - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' - fi - _LT_TAGVAR(archive_cmds_need_lc, $1)='no' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_TAGVAR(inherit_rpath, $1)=yes - _LT_TAGVAR(link_all_deplibs, $1)=yes - ;; - - netbsd* | netbsdelf*-gnu) - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out - else - _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF - fi - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - newsos6) - _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - *nto* | *qnx*) - ;; - - openbsd*) - if test -f /usr/libexec/ld.so; then - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_TAGVAR(hardcode_direct_absolute, $1)=yes - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - else - case $host_os in - openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*) - _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - ;; - *) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - ;; - esac - fi - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - os2*) - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_minus_L, $1)=yes - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$ECHO DATA >> $output_objdir/$libname.def~$ECHO " SINGLE NONSHARED" >> $output_objdir/$libname.def~$ECHO EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' - _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' - ;; - - osf3*) - if test "$GCC" = yes; then - _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' - fi - _LT_TAGVAR(archive_cmds_need_lc, $1)='no' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - ;; - - osf4* | osf5*) # as osf3* with the addition of -msym flag - if test "$GCC" = yes; then - _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - else - _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ - $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' - - # Both c and cxx compiler support -rpath directly - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' - fi - _LT_TAGVAR(archive_cmds_need_lc, $1)='no' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - ;; - - solaris*) - _LT_TAGVAR(no_undefined_flag, $1)=' -z defs' - if test "$GCC" = yes; then - wlarc='${wl}' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' - else - case `$CC -V 2>&1` in - *"Compilers 5.0"*) - wlarc='' - _LT_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' - ;; - *) - wlarc='${wl}' - _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' - ;; - esac - fi - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - case $host_os in - solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; - *) - # The compiler driver will combine and reorder linker options, - # but understands `-z linker_flag'. GCC discards it without `$wl', - # but is careful enough not to reorder. - # Supported since Solaris 2.6 (maybe 2.5.1?) - if test "$GCC" = yes; then - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' - else - _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' - fi - ;; - esac - _LT_TAGVAR(link_all_deplibs, $1)=yes - ;; - - sunos4*) - if test "x$host_vendor" = xsequent; then - # Use $CC to link under sequent, because it throws in some extra .o - # files that make .init and .fini sections work. - _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' - else - _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' - fi - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_minus_L, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - sysv4) - case $host_vendor in - sni) - _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true??? - ;; - siemens) - ## LD is ld it makes a PLAMLIB - ## CC just makes a GrossModule. - _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' - _LT_TAGVAR(hardcode_direct, $1)=no - ;; - motorola) - _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie - ;; - esac - runpath_var='LD_RUN_PATH' - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - sysv4.3*) - _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' - ;; - - sysv4*MP*) - if test -d /usr/nec; then - _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - runpath_var=LD_RUN_PATH - hardcode_runpath_var=yes - _LT_TAGVAR(ld_shlibs, $1)=yes - fi - ;; - - sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) - _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' - _LT_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - runpath_var='LD_RUN_PATH' - - if test "$GCC" = yes; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - else - _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - fi - ;; - - sysv5* | sco3.2v5* | sco5v6*) - # Note: We can NOT use -z defs as we might desire, because we do not - # link with -lc, and that would cause any symbols used from libc to - # always be unresolved, which means just about no library would - # ever link correctly. If we're not using GNU ld we use -z text - # though, which does catch some bad symbols but isn't as heavy-handed - # as -z defs. - _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' - _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' - _LT_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=':' - _LT_TAGVAR(link_all_deplibs, $1)=yes - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' - runpath_var='LD_RUN_PATH' - - if test "$GCC" = yes; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - else - _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - fi - ;; - - uts4*) - _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - *) - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - esac - - if test x$host_vendor = xsni; then - case $host in - sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym' - ;; - esac - fi - fi -]) -AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) -test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no - -_LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld - -_LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl -_LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl -_LT_DECL([], [extract_expsyms_cmds], [2], - [The commands to extract the exported symbol list from a shared archive]) - -# -# Do we need to explicitly link libc? -# -case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in -x|xyes) - # Assume -lc should be added - _LT_TAGVAR(archive_cmds_need_lc, $1)=yes - - if test "$enable_shared" = yes && test "$GCC" = yes; then - case $_LT_TAGVAR(archive_cmds, $1) in - *'~'*) - # FIXME: we may have to deal with multi-command sequences. - ;; - '$CC '*) - # Test whether the compiler implicitly links with -lc since on some - # systems, -lgcc has to come before -lc. If gcc already passes -lc - # to ld, don't add -lc before -lgcc. - AC_MSG_CHECKING([whether -lc should be explicitly linked in]) - $RM conftest* - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - if AC_TRY_EVAL(ac_compile) 2>conftest.err; then - soname=conftest - lib=conftest - libobjs=conftest.$ac_objext - deplibs= - wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) - pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1) - compiler_flags=-v - linker_flags=-v - verstring= - output_objdir=. - libname=conftest - lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1) - _LT_TAGVAR(allow_undefined_flag, $1)= - if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) - then - _LT_TAGVAR(archive_cmds_need_lc, $1)=no - else - _LT_TAGVAR(archive_cmds_need_lc, $1)=yes - fi - _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag - else - cat conftest.err 1>&5 - fi - $RM conftest* - AC_MSG_RESULT([$_LT_TAGVAR(archive_cmds_need_lc, $1)]) - ;; - esac - fi - ;; -esac - -_LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0], - [Whether or not to add -lc for building shared libraries]) -_LT_TAGDECL([allow_libtool_libs_with_static_runtimes], - [enable_shared_with_static_runtimes], [0], - [Whether or not to disallow shared libs when runtime libs are static]) -_LT_TAGDECL([], [export_dynamic_flag_spec], [1], - [Compiler flag to allow reflexive dlopens]) -_LT_TAGDECL([], [whole_archive_flag_spec], [1], - [Compiler flag to generate shared objects directly from archives]) -_LT_TAGDECL([], [compiler_needs_object], [1], - [Whether the compiler copes with passing no objects directly]) -_LT_TAGDECL([], [old_archive_from_new_cmds], [2], - [Create an old-style archive from a shared archive]) -_LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2], - [Create a temporary old-style archive to link instead of a shared archive]) -_LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive]) -_LT_TAGDECL([], [archive_expsym_cmds], [2]) -_LT_TAGDECL([], [module_cmds], [2], - [Commands used to build a loadable module if different from building - a shared archive.]) -_LT_TAGDECL([], [module_expsym_cmds], [2]) -_LT_TAGDECL([], [with_gnu_ld], [1], - [Whether we are building with GNU ld or not]) -_LT_TAGDECL([], [allow_undefined_flag], [1], - [Flag that allows shared libraries with undefined symbols to be built]) -_LT_TAGDECL([], [no_undefined_flag], [1], - [Flag that enforces no undefined symbols]) -_LT_TAGDECL([], [hardcode_libdir_flag_spec], [1], - [Flag to hardcode $libdir into a binary during linking. - This must work even if $libdir does not exist]) -_LT_TAGDECL([], [hardcode_libdir_flag_spec_ld], [1], - [[If ld is used when linking, flag to hardcode $libdir into a binary - during linking. This must work even if $libdir does not exist]]) -_LT_TAGDECL([], [hardcode_libdir_separator], [1], - [Whether we need a single "-rpath" flag with a separated argument]) -_LT_TAGDECL([], [hardcode_direct], [0], - [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes - DIR into the resulting binary]) -_LT_TAGDECL([], [hardcode_direct_absolute], [0], - [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes - DIR into the resulting binary and the resulting library dependency is - "absolute", i.e impossible to change by setting ${shlibpath_var} if the - library is relocated]) -_LT_TAGDECL([], [hardcode_minus_L], [0], - [Set to "yes" if using the -LDIR flag during linking hardcodes DIR - into the resulting binary]) -_LT_TAGDECL([], [hardcode_shlibpath_var], [0], - [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR - into the resulting binary]) -_LT_TAGDECL([], [hardcode_automatic], [0], - [Set to "yes" if building a shared library automatically hardcodes DIR - into the library and all subsequent libraries and executables linked - against it]) -_LT_TAGDECL([], [inherit_rpath], [0], - [Set to yes if linker adds runtime paths of dependent libraries - to runtime path list]) -_LT_TAGDECL([], [link_all_deplibs], [0], - [Whether libtool must link a program against all its dependency libraries]) -_LT_TAGDECL([], [fix_srcfile_path], [1], - [Fix the shell variable $srcfile for the compiler]) -_LT_TAGDECL([], [always_export_symbols], [0], - [Set to "yes" if exported symbols are required]) -_LT_TAGDECL([], [export_symbols_cmds], [2], - [The commands to list exported symbols]) -_LT_TAGDECL([], [exclude_expsyms], [1], - [Symbols that should not be listed in the preloaded symbols]) -_LT_TAGDECL([], [include_expsyms], [1], - [Symbols that must always be exported]) -_LT_TAGDECL([], [prelink_cmds], [2], - [Commands necessary for linking programs (against libraries) with templates]) -_LT_TAGDECL([], [file_list_spec], [1], - [Specify filename containing input files]) -dnl FIXME: Not yet implemented -dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1], -dnl [Compiler flag to generate thread safe objects]) -])# _LT_LINKER_SHLIBS - - -# _LT_LANG_C_CONFIG([TAG]) -# ------------------------ -# Ensure that the configuration variables for a C compiler are suitably -# defined. These variables are subsequently used by _LT_CONFIG to write -# the compiler configuration to `libtool'. -m4_defun([_LT_LANG_C_CONFIG], -[m4_require([_LT_DECL_EGREP])dnl -lt_save_CC="$CC" -AC_LANG_PUSH(C) - -# Source file extension for C test sources. -ac_ext=c - -# Object file extension for compiled C test sources. -objext=o -_LT_TAGVAR(objext, $1)=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code="int some_variable = 0;" - -# Code to be used in simple link tests -lt_simple_link_test_code='int main(){return(0);}' - -_LT_TAG_COMPILER -# Save the default compiler, since it gets overwritten when the other -# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. -compiler_DEFAULT=$CC - -# save warnings/boilerplate of simple test code -_LT_COMPILER_BOILERPLATE -_LT_LINKER_BOILERPLATE - -if test -n "$compiler"; then - _LT_COMPILER_NO_RTTI($1) - _LT_COMPILER_PIC($1) - _LT_COMPILER_C_O($1) - _LT_COMPILER_FILE_LOCKS($1) - _LT_LINKER_SHLIBS($1) - _LT_SYS_DYNAMIC_LINKER($1) - _LT_LINKER_HARDCODE_LIBPATH($1) - LT_SYS_DLOPEN_SELF - _LT_CMD_STRIPLIB - - # Report which library types will actually be built - AC_MSG_CHECKING([if libtool supports shared libraries]) - AC_MSG_RESULT([$can_build_shared]) - - AC_MSG_CHECKING([whether to build shared libraries]) - test "$can_build_shared" = "no" && enable_shared=no - - # On AIX, shared libraries and static libraries use the same namespace, and - # are all built from PIC. - case $host_os in - aix3*) - test "$enable_shared" = yes && enable_static=no - if test -n "$RANLIB"; then - archive_cmds="$archive_cmds~\$RANLIB \$lib" - postinstall_cmds='$RANLIB $lib' - fi - ;; - - aix[[4-9]]*) - if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then - test "$enable_shared" = yes && enable_static=no - fi - ;; - esac - AC_MSG_RESULT([$enable_shared]) - - AC_MSG_CHECKING([whether to build static libraries]) - # Make sure either enable_shared or enable_static is yes. - test "$enable_shared" = yes || enable_static=yes - AC_MSG_RESULT([$enable_static]) - - _LT_CONFIG($1) -fi -AC_LANG_POP -CC="$lt_save_CC" -])# _LT_LANG_C_CONFIG - - -# _LT_PROG_CXX -# ------------ -# Since AC_PROG_CXX is broken, in that it returns g++ if there is no c++ -# compiler, we have our own version here. -m4_defun([_LT_PROG_CXX], -[ -pushdef([AC_MSG_ERROR], [_lt_caught_CXX_error=yes]) -AC_PROG_CXX -if test -n "$CXX" && ( test "X$CXX" != "Xno" && - ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || - (test "X$CXX" != "Xg++"))) ; then - AC_PROG_CXXCPP -else - _lt_caught_CXX_error=yes -fi -popdef([AC_MSG_ERROR]) -])# _LT_PROG_CXX - -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([_LT_PROG_CXX], []) - - -# _LT_LANG_CXX_CONFIG([TAG]) -# -------------------------- -# Ensure that the configuration variables for a C++ compiler are suitably -# defined. These variables are subsequently used by _LT_CONFIG to write -# the compiler configuration to `libtool'. -m4_defun([_LT_LANG_CXX_CONFIG], -[AC_REQUIRE([_LT_PROG_CXX])dnl -m4_require([_LT_FILEUTILS_DEFAULTS])dnl -m4_require([_LT_DECL_EGREP])dnl - -AC_LANG_PUSH(C++) -_LT_TAGVAR(archive_cmds_need_lc, $1)=no -_LT_TAGVAR(allow_undefined_flag, $1)= -_LT_TAGVAR(always_export_symbols, $1)=no -_LT_TAGVAR(archive_expsym_cmds, $1)= -_LT_TAGVAR(compiler_needs_object, $1)=no -_LT_TAGVAR(export_dynamic_flag_spec, $1)= -_LT_TAGVAR(hardcode_direct, $1)=no -_LT_TAGVAR(hardcode_direct_absolute, $1)=no -_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= -_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= -_LT_TAGVAR(hardcode_libdir_separator, $1)= -_LT_TAGVAR(hardcode_minus_L, $1)=no -_LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported -_LT_TAGVAR(hardcode_automatic, $1)=no -_LT_TAGVAR(inherit_rpath, $1)=no -_LT_TAGVAR(module_cmds, $1)= -_LT_TAGVAR(module_expsym_cmds, $1)= -_LT_TAGVAR(link_all_deplibs, $1)=unknown -_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds -_LT_TAGVAR(no_undefined_flag, $1)= -_LT_TAGVAR(whole_archive_flag_spec, $1)= -_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no - -# Source file extension for C++ test sources. -ac_ext=cpp - -# Object file extension for compiled C++ test sources. -objext=o -_LT_TAGVAR(objext, $1)=$objext - -# No sense in running all these tests if we already determined that -# the CXX compiler isn't working. Some variables (like enable_shared) -# are currently assumed to apply to all compilers on this platform, -# and will be corrupted by setting them based on a non-working compiler. -if test "$_lt_caught_CXX_error" != yes; then - # Code to be used in simple compile tests - lt_simple_compile_test_code="int some_variable = 0;" - - # Code to be used in simple link tests - lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }' - - # ltmain only uses $CC for tagged configurations so make sure $CC is set. - _LT_TAG_COMPILER - - # save warnings/boilerplate of simple test code - _LT_COMPILER_BOILERPLATE - _LT_LINKER_BOILERPLATE - - # Allow CC to be a program name with arguments. - lt_save_CC=$CC - lt_save_LD=$LD - lt_save_GCC=$GCC - GCC=$GXX - lt_save_with_gnu_ld=$with_gnu_ld - lt_save_path_LD=$lt_cv_path_LD - if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then - lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx - else - $as_unset lt_cv_prog_gnu_ld - fi - if test -n "${lt_cv_path_LDCXX+set}"; then - lt_cv_path_LD=$lt_cv_path_LDCXX - else - $as_unset lt_cv_path_LD - fi - test -z "${LDCXX+set}" || LD=$LDCXX - CC=${CXX-"c++"} - compiler=$CC - _LT_TAGVAR(compiler, $1)=$CC - _LT_CC_BASENAME([$compiler]) - - if test -n "$compiler"; then - # We don't want -fno-exception when compiling C++ code, so set the - # no_builtin_flag separately - if test "$GXX" = yes; then - _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' - else - _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= - fi - - if test "$GXX" = yes; then - # Set up default GNU C++ configuration - - LT_PATH_LD - - # Check if GNU C++ uses GNU ld as the underlying linker, since the - # archiving commands below assume that GNU ld is being used. - if test "$with_gnu_ld" = yes; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - - # If archive_cmds runs LD, not CC, wlarc should be empty - # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to - # investigate it a little bit more. (MM) - wlarc='${wl}' - - # ancient GNU ld didn't support --whole-archive et. al. - if eval "`$CC -print-prog-name=ld` --help 2>&1" | - $GREP 'no-whole-archive' > /dev/null; then - _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - else - _LT_TAGVAR(whole_archive_flag_spec, $1)= - fi - else - with_gnu_ld=no - wlarc= - - # A generic and very simple default shared library creation - # command for GNU C++ for the case where it uses the native - # linker, instead of GNU ld. If possible, this setting should - # overridden to take advantage of the native linker features on - # the platform it is being used on. - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' - fi - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' - - else - GXX=no - with_gnu_ld=no - wlarc= - fi - - # PORTME: fill in a description of your system's C++ link characteristics - AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) - _LT_TAGVAR(ld_shlibs, $1)=yes - case $host_os in - aix3*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - aix[[4-9]]*) - if test "$host_cpu" = ia64; then - # On IA64, the linker does run time linking by default, so we don't - # have to do anything special. - aix_use_runtimelinking=no - exp_sym_flag='-Bexport' - no_entry_flag="" - else - aix_use_runtimelinking=no - - # Test if we are trying to use run time linking or normal - # AIX style linking. If -brtl is somewhere in LDFLAGS, we - # need to do runtime linking. - case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) - for ld_flag in $LDFLAGS; do - case $ld_flag in - *-brtl*) - aix_use_runtimelinking=yes - break - ;; - esac - done - ;; - esac - - exp_sym_flag='-bexport' - no_entry_flag='-bnoentry' - fi - - # When large executables or shared objects are built, AIX ld can - # have problems creating the table of contents. If linking a library - # or program results in "error TOC overflow" add -mminimal-toc to - # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not - # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. - - _LT_TAGVAR(archive_cmds, $1)='' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_direct_absolute, $1)=yes - _LT_TAGVAR(hardcode_libdir_separator, $1)=':' - _LT_TAGVAR(link_all_deplibs, $1)=yes - _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' - - if test "$GXX" = yes; then - case $host_os in aix4.[[012]]|aix4.[[012]].*) - # We only want to do this on AIX 4.2 and lower, the check - # below for broken collect2 doesn't work under 4.3+ - collect2name=`${CC} -print-prog-name=collect2` - if test -f "$collect2name" && - strings "$collect2name" | $GREP resolve_lib_name >/dev/null - then - # We have reworked collect2 - : - else - # We have old collect2 - _LT_TAGVAR(hardcode_direct, $1)=unsupported - # It fails to find uninstalled libraries when the uninstalled - # path is not listed in the libpath. Setting hardcode_minus_L - # to unsupported forces relinking - _LT_TAGVAR(hardcode_minus_L, $1)=yes - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)= - fi - esac - shared_flag='-shared' - if test "$aix_use_runtimelinking" = yes; then - shared_flag="$shared_flag "'${wl}-G' - fi - else - # not using gcc - if test "$host_cpu" = ia64; then - # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release - # chokes on -Wl,-G. The following line is correct: - shared_flag='-G' - else - if test "$aix_use_runtimelinking" = yes; then - shared_flag='${wl}-G' - else - shared_flag='${wl}-bM:SRE' - fi - fi - fi - - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' - # It seems that -bexpall does not export symbols beginning with - # underscore (_), so it is better to generate a list of symbols to - # export. - _LT_TAGVAR(always_export_symbols, $1)=yes - if test "$aix_use_runtimelinking" = yes; then - # Warning - without using the other runtime loading flags (-brtl), - # -berok will link without error, but may produce a broken library. - _LT_TAGVAR(allow_undefined_flag, $1)='-berok' - # Determine the default libpath from the value encoded in an empty - # executable. - _LT_SYS_MODULE_PATH_AIX - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" - - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" - else - if test "$host_cpu" = ia64; then - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' - _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" - _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" - else - # Determine the default libpath from the value encoded in an - # empty executable. - _LT_SYS_MODULE_PATH_AIX - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" - # Warning - without using the other run time loading flags, - # -berok will link without error, but may produce a broken library. - _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' - _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' - # Exported symbols can be pulled into shared objects from archives - _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' - _LT_TAGVAR(archive_cmds_need_lc, $1)=yes - # This is similar to how AIX traditionally builds its shared - # libraries. - _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' - fi - fi - ;; - - beos*) - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - # Joseph Beckenbach says some releases of gcc - # support --undefined. This deserves some investigation. FIXME - _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - chorus*) - case $cc_basename in - *) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - esac - ;; - - cygwin* | mingw* | pw32* | cegcc*) - # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, - # as there is no search path for DLLs. - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - _LT_TAGVAR(always_export_symbols, $1)=no - _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes - - if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - # If the export-symbols file already is a .def file (1st line - # is EXPORTS), use it as is; otherwise, prepend... - _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - cp $export_symbols $output_objdir/$soname.def; - else - echo EXPORTS > $output_objdir/$soname.def; - cat $export_symbols >> $output_objdir/$soname.def; - fi~ - $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - darwin* | rhapsody*) - _LT_DARWIN_LINKER_FEATURES($1) - ;; - - dgux*) - case $cc_basename in - ec++*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - ghcx*) - # Green Hills C++ Compiler - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - *) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - esac - ;; - - freebsd[[12]]*) - # C++ shared libraries reported to be fairly broken before - # switch to ELF - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - - freebsd-elf*) - _LT_TAGVAR(archive_cmds_need_lc, $1)=no - ;; - - freebsd* | dragonfly*) - # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF - # conventions - _LT_TAGVAR(ld_shlibs, $1)=yes - ;; - - gnu*) - ;; - - hpux9*) - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, - # but as the default - # location of the library. - - case $cc_basename in - CC*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - aCC*) - _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' - ;; - *) - if test "$GXX" = yes; then - _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - else - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - ;; - - hpux10*|hpux11*) - if test $with_gnu_ld = no; then - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - - case $host_cpu in - hppa*64*|ia64*) - ;; - *) - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - ;; - esac - fi - case $host_cpu in - hppa*64*|ia64*) - _LT_TAGVAR(hardcode_direct, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - *) - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_direct_absolute, $1)=yes - _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, - # but as the default - # location of the library. - ;; - esac - - case $cc_basename in - CC*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - aCC*) - case $host_cpu in - hppa*64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - ia64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - *) - _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - esac - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' - ;; - *) - if test "$GXX" = yes; then - if test $with_gnu_ld = no; then - case $host_cpu in - hppa*64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - ia64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - *) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - esac - fi - else - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - ;; - - interix[[3-9]]*) - _LT_TAGVAR(hardcode_direct, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. - # Instead, shared libraries are loaded at an image base (0x10000000 by - # default) and relocated if they conflict, which is a slow very memory - # consuming and fragmenting process. To avoid this, we pick a random, - # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link - # time. Moving up from 0x10000000 also allows more sbrk(2) space. - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - ;; - irix5* | irix6*) - case $cc_basename in - CC*) - # SGI C++ - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' - - # Archives containing C++ object files must be created using - # "CC -ar", where "CC" is the IRIX C++ compiler. This is - # necessary to make sure instantiated templates are included - # in the archive. - _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' - ;; - *) - if test "$GXX" = yes; then - if test "$with_gnu_ld" = no; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` -o $lib' - fi - fi - _LT_TAGVAR(link_all_deplibs, $1)=yes - ;; - esac - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_TAGVAR(inherit_rpath, $1)=yes - ;; - - linux* | k*bsd*-gnu | kopensolaris*-gnu) - case $cc_basename in - KCC*) - # Kuck and Associates, Inc. (KAI) C++ Compiler - - # KCC will only create a shared library if the output file - # ends with ".so" (or ".sl" for HP-UX), so rename the library - # to its proper name (with version) after linking. - _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' - - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - - # Archives containing C++ object files must be created using - # "CC -Bstatic", where "CC" is the KAI C++ compiler. - _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' - ;; - icpc* | ecpc* ) - # Intel C++ - with_gnu_ld=yes - # version 8.0 and above of icpc choke on multiply defined symbols - # if we add $predep_objects and $postdep_objects, however 7.1 and - # earlier do not add the objects themselves. - case `$CC -V 2>&1` in - *"Version 7."*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - ;; - *) # Version 8.0 or newer - tmp_idyn= - case $host_cpu in - ia64*) tmp_idyn=' -i_dynamic';; - esac - _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - ;; - esac - _LT_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' - ;; - pgCC* | pgcpp*) - # Portland Group C++ compiler - case `$CC -V` in - *pgCC\ [[1-5]]* | *pgcpp\ [[1-5]]*) - _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~ - rm -rf $tpldir~ - $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ - compile_command="$compile_command `find $tpldir -name \*.o | $NL2SP`"' - _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~ - rm -rf $tpldir~ - $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ - $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | $NL2SP`~ - $RANLIB $oldlib' - _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~ - rm -rf $tpldir~ - $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ - $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~ - rm -rf $tpldir~ - $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ - $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' - ;; - *) # Version 6 will use weak symbols - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' - ;; - esac - - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' - ;; - cxx*) - # Compaq C++ - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' - - runpath_var=LD_RUN_PATH - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' - ;; - xl*) - # IBM XL 8.0 on PPC, with GNU ld - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - if test "x$supports_anon_versioning" = xyes; then - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - echo "local: *; };" >> $output_objdir/$libname.ver~ - $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' - fi - ;; - *) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C++ 5.9 - _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' - _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' - _LT_TAGVAR(compiler_needs_object, $1)=yes - - # Not sure whether something based on - # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 - # would be better. - output_verbose_link_cmd='echo' - - # Archives containing C++ object files must be created using - # "CC -xar", where "CC" is the Sun C++ compiler. This is - # necessary to make sure instantiated templates are included - # in the archive. - _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' - ;; - esac - ;; - esac - ;; - - lynxos*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - - m88k*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - - mvs*) - case $cc_basename in - cxx*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - *) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - esac - ;; - - netbsd*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' - wlarc= - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - fi - # Workaround some broken pre-1.5 toolchains - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' - ;; - - *nto* | *qnx*) - _LT_TAGVAR(ld_shlibs, $1)=yes - ;; - - openbsd2*) - # C++ shared libraries are fairly broken - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - - openbsd*) - if test -f /usr/libexec/ld.so; then - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_TAGVAR(hardcode_direct_absolute, $1)=yes - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - fi - output_verbose_link_cmd=echo - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - osf3* | osf4* | osf5*) - case $cc_basename in - KCC*) - # Kuck and Associates, Inc. (KAI) C++ Compiler - - # KCC will only create a shared library if the output file - # ends with ".so" (or ".sl" for HP-UX), so rename the library - # to its proper name (with version) after linking. - _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' - - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - - # Archives containing C++ object files must be created using - # the KAI C++ compiler. - case $host in - osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; - *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;; - esac - ;; - RCC*) - # Rational C++ 2.4.1 - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - cxx*) - case $host in - osf3*) - _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && $ECHO "X${wl}-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - ;; - *) - _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ - echo "-hidden">> $lib.exp~ - $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~ - $RM $lib.exp' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' - ;; - esac - - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' - ;; - *) - if test "$GXX" = yes && test "$with_gnu_ld" = no; then - _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' - case $host in - osf3*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - ;; - *) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - ;; - esac - - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' - - else - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - ;; - - psos*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - - sunos4*) - case $cc_basename in - CC*) - # Sun C++ 4.x - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - lcc*) - # Lucid - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - *) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - esac - ;; - - solaris*) - case $cc_basename in - CC*) - # Sun C++ 4.2, 5.x and Centerline C++ - _LT_TAGVAR(archive_cmds_need_lc,$1)=yes - _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' - _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' - - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - case $host_os in - solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; - *) - # The compiler driver will combine and reorder linker options, - # but understands `-z linker_flag'. - # Supported since Solaris 2.6 (maybe 2.5.1?) - _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' - ;; - esac - _LT_TAGVAR(link_all_deplibs, $1)=yes - - output_verbose_link_cmd='echo' - - # Archives containing C++ object files must be created using - # "CC -xar", where "CC" is the Sun C++ compiler. This is - # necessary to make sure instantiated templates are included - # in the archive. - _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' - ;; - gcx*) - # Green Hills C++ Compiler - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' - - # The C++ compiler must be used to create the archive. - _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' - ;; - *) - # GNU C++ compiler with Solaris linker - if test "$GXX" = yes && test "$with_gnu_ld" = no; then - _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs' - if $CC --version | $GREP -v '^2\.7' > /dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' - else - # g++ 2.7 appears to require `-G' NOT `-shared' on this - # platform. - _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' - fi - - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir' - case $host_os in - solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; - *) - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' - ;; - esac - fi - ;; - esac - ;; - - sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) - _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' - _LT_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - runpath_var='LD_RUN_PATH' - - case $cc_basename in - CC*) - _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - ;; - - sysv5* | sco3.2v5* | sco5v6*) - # Note: We can NOT use -z defs as we might desire, because we do not - # link with -lc, and that would cause any symbols used from libc to - # always be unresolved, which means just about no library would - # ever link correctly. If we're not using GNU ld we use -z text - # though, which does catch some bad symbols but isn't as heavy-handed - # as -z defs. - _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' - _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' - _LT_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=':' - _LT_TAGVAR(link_all_deplibs, $1)=yes - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' - runpath_var='LD_RUN_PATH' - - case $cc_basename in - CC*) - _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - ;; - - tandem*) - case $cc_basename in - NCC*) - # NonStop-UX NCC 3.20 - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - *) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - esac - ;; - - vxworks*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - - *) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - esac - - AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) - test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no - - _LT_TAGVAR(GCC, $1)="$GXX" - _LT_TAGVAR(LD, $1)="$LD" - - ## CAVEAT EMPTOR: - ## There is no encapsulation within the following macros, do not change - ## the running order or otherwise move them around unless you know exactly - ## what you are doing... - _LT_SYS_HIDDEN_LIBDEPS($1) - _LT_COMPILER_PIC($1) - _LT_COMPILER_C_O($1) - _LT_COMPILER_FILE_LOCKS($1) - _LT_LINKER_SHLIBS($1) - _LT_SYS_DYNAMIC_LINKER($1) - _LT_LINKER_HARDCODE_LIBPATH($1) - - _LT_CONFIG($1) - fi # test -n "$compiler" - - CC=$lt_save_CC - LDCXX=$LD - LD=$lt_save_LD - GCC=$lt_save_GCC - with_gnu_ld=$lt_save_with_gnu_ld - lt_cv_path_LDCXX=$lt_cv_path_LD - lt_cv_path_LD=$lt_save_path_LD - lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld - lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld -fi # test "$_lt_caught_CXX_error" != yes - -AC_LANG_POP -])# _LT_LANG_CXX_CONFIG - - -# _LT_SYS_HIDDEN_LIBDEPS([TAGNAME]) -# --------------------------------- -# Figure out "hidden" library dependencies from verbose -# compiler output when linking a shared library. -# Parse the compiler output and extract the necessary -# objects, libraries and library flags. -m4_defun([_LT_SYS_HIDDEN_LIBDEPS], -[m4_require([_LT_FILEUTILS_DEFAULTS])dnl -# Dependencies to place before and after the object being linked: -_LT_TAGVAR(predep_objects, $1)= -_LT_TAGVAR(postdep_objects, $1)= -_LT_TAGVAR(predeps, $1)= -_LT_TAGVAR(postdeps, $1)= -_LT_TAGVAR(compiler_lib_search_path, $1)= - -dnl we can't use the lt_simple_compile_test_code here, -dnl because it contains code intended for an executable, -dnl not a library. It's possible we should let each -dnl tag define a new lt_????_link_test_code variable, -dnl but it's only used here... -m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF -int a; -void foo (void) { a = 0; } -_LT_EOF -], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF -class Foo -{ -public: - Foo (void) { a = 0; } -private: - int a; -}; -_LT_EOF -], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF - subroutine foo - implicit none - integer*4 a - a=0 - return - end -_LT_EOF -], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF - subroutine foo - implicit none - integer a - a=0 - return - end -_LT_EOF -], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF -public class foo { - private int a; - public void bar (void) { - a = 0; - } -}; -_LT_EOF -]) -dnl Parse the compiler output and extract the necessary -dnl objects, libraries and library flags. -if AC_TRY_EVAL(ac_compile); then - # Parse the compiler output and extract the necessary - # objects, libraries and library flags. - - # Sentinel used to keep track of whether or not we are before - # the conftest object file. - pre_test_object_deps_done=no - - for p in `eval "$output_verbose_link_cmd"`; do - case $p in - - -L* | -R* | -l*) - # Some compilers place space between "-{L,R}" and the path. - # Remove the space. - if test $p = "-L" || - test $p = "-R"; then - prev=$p - continue - else - prev= - fi - - if test "$pre_test_object_deps_done" = no; then - case $p in - -L* | -R*) - # Internal compiler library paths should come after those - # provided the user. The postdeps already come after the - # user supplied libs so there is no need to process them. - if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then - _LT_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}" - else - _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}" - fi - ;; - # The "-l" case would never come before the object being - # linked, so don't bother handling this case. - esac - else - if test -z "$_LT_TAGVAR(postdeps, $1)"; then - _LT_TAGVAR(postdeps, $1)="${prev}${p}" - else - _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}" - fi - fi - ;; - - *.$objext) - # This assumes that the test object file only shows up - # once in the compiler output. - if test "$p" = "conftest.$objext"; then - pre_test_object_deps_done=yes - continue - fi - - if test "$pre_test_object_deps_done" = no; then - if test -z "$_LT_TAGVAR(predep_objects, $1)"; then - _LT_TAGVAR(predep_objects, $1)="$p" - else - _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p" - fi - else - if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then - _LT_TAGVAR(postdep_objects, $1)="$p" - else - _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p" - fi - fi - ;; - - *) ;; # Ignore the rest. - - esac - done - - # Clean up. - rm -f a.out a.exe -else - echo "libtool.m4: error: problem compiling $1 test program" -fi - -$RM -f confest.$objext - -# PORTME: override above test on systems where it is broken -m4_if([$1], [CXX], -[case $host_os in -interix[[3-9]]*) - # Interix 3.5 installs completely hosed .la files for C++, so rather than - # hack all around it, let's just trust "g++" to DTRT. - _LT_TAGVAR(predep_objects,$1)= - _LT_TAGVAR(postdep_objects,$1)= - _LT_TAGVAR(postdeps,$1)= - ;; - -linux*) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C++ 5.9 - - # The more standards-conforming stlport4 library is - # incompatible with the Cstd library. Avoid specifying - # it if it's in CXXFLAGS. Ignore libCrun as - # -library=stlport4 depends on it. - case " $CXX $CXXFLAGS " in - *" -library=stlport4 "*) - solaris_use_stlport4=yes - ;; - esac - - if test "$solaris_use_stlport4" != yes; then - _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' - fi - ;; - esac - ;; - -solaris*) - case $cc_basename in - CC*) - # The more standards-conforming stlport4 library is - # incompatible with the Cstd library. Avoid specifying - # it if it's in CXXFLAGS. Ignore libCrun as - # -library=stlport4 depends on it. - case " $CXX $CXXFLAGS " in - *" -library=stlport4 "*) - solaris_use_stlport4=yes - ;; - esac - - # Adding this requires a known-good setup of shared libraries for - # Sun compiler versions before 5.6, else PIC objects from an old - # archive will be linked into the output, leading to subtle bugs. - if test "$solaris_use_stlport4" != yes; then - _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' - fi - ;; - esac - ;; -esac -]) - -case " $_LT_TAGVAR(postdeps, $1) " in -*" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; -esac - _LT_TAGVAR(compiler_lib_search_dirs, $1)= -if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then - _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` -fi -_LT_TAGDECL([], [compiler_lib_search_dirs], [1], - [The directories searched by this compiler when creating a shared library]) -_LT_TAGDECL([], [predep_objects], [1], - [Dependencies to place before and after the objects being linked to - create a shared library]) -_LT_TAGDECL([], [postdep_objects], [1]) -_LT_TAGDECL([], [predeps], [1]) -_LT_TAGDECL([], [postdeps], [1]) -_LT_TAGDECL([], [compiler_lib_search_path], [1], - [The library search path used internally by the compiler when linking - a shared library]) -])# _LT_SYS_HIDDEN_LIBDEPS - - -# _LT_PROG_F77 -# ------------ -# Since AC_PROG_F77 is broken, in that it returns the empty string -# if there is no fortran compiler, we have our own version here. -m4_defun([_LT_PROG_F77], -[ -pushdef([AC_MSG_ERROR], [_lt_disable_F77=yes]) -AC_PROG_F77 -if test -z "$F77" || test "X$F77" = "Xno"; then - _lt_disable_F77=yes -fi -popdef([AC_MSG_ERROR]) -])# _LT_PROG_F77 - -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([_LT_PROG_F77], []) - - -# _LT_LANG_F77_CONFIG([TAG]) -# -------------------------- -# Ensure that the configuration variables for a Fortran 77 compiler are -# suitably defined. These variables are subsequently used by _LT_CONFIG -# to write the compiler configuration to `libtool'. -m4_defun([_LT_LANG_F77_CONFIG], -[AC_REQUIRE([_LT_PROG_F77])dnl -AC_LANG_PUSH(Fortran 77) - -_LT_TAGVAR(archive_cmds_need_lc, $1)=no -_LT_TAGVAR(allow_undefined_flag, $1)= -_LT_TAGVAR(always_export_symbols, $1)=no -_LT_TAGVAR(archive_expsym_cmds, $1)= -_LT_TAGVAR(export_dynamic_flag_spec, $1)= -_LT_TAGVAR(hardcode_direct, $1)=no -_LT_TAGVAR(hardcode_direct_absolute, $1)=no -_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= -_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= -_LT_TAGVAR(hardcode_libdir_separator, $1)= -_LT_TAGVAR(hardcode_minus_L, $1)=no -_LT_TAGVAR(hardcode_automatic, $1)=no -_LT_TAGVAR(inherit_rpath, $1)=no -_LT_TAGVAR(module_cmds, $1)= -_LT_TAGVAR(module_expsym_cmds, $1)= -_LT_TAGVAR(link_all_deplibs, $1)=unknown -_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds -_LT_TAGVAR(no_undefined_flag, $1)= -_LT_TAGVAR(whole_archive_flag_spec, $1)= -_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no - -# Source file extension for f77 test sources. -ac_ext=f - -# Object file extension for compiled f77 test sources. -objext=o -_LT_TAGVAR(objext, $1)=$objext - -# No sense in running all these tests if we already determined that -# the F77 compiler isn't working. Some variables (like enable_shared) -# are currently assumed to apply to all compilers on this platform, -# and will be corrupted by setting them based on a non-working compiler. -if test "$_lt_disable_F77" != yes; then - # Code to be used in simple compile tests - lt_simple_compile_test_code="\ - subroutine t - return - end -" - - # Code to be used in simple link tests - lt_simple_link_test_code="\ - program t - end -" - - # ltmain only uses $CC for tagged configurations so make sure $CC is set. - _LT_TAG_COMPILER - - # save warnings/boilerplate of simple test code - _LT_COMPILER_BOILERPLATE - _LT_LINKER_BOILERPLATE - - # Allow CC to be a program name with arguments. - lt_save_CC="$CC" - lt_save_GCC=$GCC - CC=${F77-"f77"} - compiler=$CC - _LT_TAGVAR(compiler, $1)=$CC - _LT_CC_BASENAME([$compiler]) - GCC=$G77 - if test -n "$compiler"; then - AC_MSG_CHECKING([if libtool supports shared libraries]) - AC_MSG_RESULT([$can_build_shared]) - - AC_MSG_CHECKING([whether to build shared libraries]) - test "$can_build_shared" = "no" && enable_shared=no - - # On AIX, shared libraries and static libraries use the same namespace, and - # are all built from PIC. - case $host_os in - aix3*) - test "$enable_shared" = yes && enable_static=no - if test -n "$RANLIB"; then - archive_cmds="$archive_cmds~\$RANLIB \$lib" - postinstall_cmds='$RANLIB $lib' - fi - ;; - aix[[4-9]]*) - if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then - test "$enable_shared" = yes && enable_static=no - fi - ;; - esac - AC_MSG_RESULT([$enable_shared]) - - AC_MSG_CHECKING([whether to build static libraries]) - # Make sure either enable_shared or enable_static is yes. - test "$enable_shared" = yes || enable_static=yes - AC_MSG_RESULT([$enable_static]) - - _LT_TAGVAR(GCC, $1)="$G77" - _LT_TAGVAR(LD, $1)="$LD" - - ## CAVEAT EMPTOR: - ## There is no encapsulation within the following macros, do not change - ## the running order or otherwise move them around unless you know exactly - ## what you are doing... - _LT_COMPILER_PIC($1) - _LT_COMPILER_C_O($1) - _LT_COMPILER_FILE_LOCKS($1) - _LT_LINKER_SHLIBS($1) - _LT_SYS_DYNAMIC_LINKER($1) - _LT_LINKER_HARDCODE_LIBPATH($1) - - _LT_CONFIG($1) - fi # test -n "$compiler" - - GCC=$lt_save_GCC - CC="$lt_save_CC" -fi # test "$_lt_disable_F77" != yes - -AC_LANG_POP -])# _LT_LANG_F77_CONFIG - - -# _LT_PROG_FC -# ----------- -# Since AC_PROG_FC is broken, in that it returns the empty string -# if there is no fortran compiler, we have our own version here. -m4_defun([_LT_PROG_FC], -[ -pushdef([AC_MSG_ERROR], [_lt_disable_FC=yes]) -AC_PROG_FC -if test -z "$FC" || test "X$FC" = "Xno"; then - _lt_disable_FC=yes -fi -popdef([AC_MSG_ERROR]) -])# _LT_PROG_FC - -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([_LT_PROG_FC], []) - - -# _LT_LANG_FC_CONFIG([TAG]) -# ------------------------- -# Ensure that the configuration variables for a Fortran compiler are -# suitably defined. These variables are subsequently used by _LT_CONFIG -# to write the compiler configuration to `libtool'. -m4_defun([_LT_LANG_FC_CONFIG], -[AC_REQUIRE([_LT_PROG_FC])dnl -AC_LANG_PUSH(Fortran) - -_LT_TAGVAR(archive_cmds_need_lc, $1)=no -_LT_TAGVAR(allow_undefined_flag, $1)= -_LT_TAGVAR(always_export_symbols, $1)=no -_LT_TAGVAR(archive_expsym_cmds, $1)= -_LT_TAGVAR(export_dynamic_flag_spec, $1)= -_LT_TAGVAR(hardcode_direct, $1)=no -_LT_TAGVAR(hardcode_direct_absolute, $1)=no -_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= -_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= -_LT_TAGVAR(hardcode_libdir_separator, $1)= -_LT_TAGVAR(hardcode_minus_L, $1)=no -_LT_TAGVAR(hardcode_automatic, $1)=no -_LT_TAGVAR(inherit_rpath, $1)=no -_LT_TAGVAR(module_cmds, $1)= -_LT_TAGVAR(module_expsym_cmds, $1)= -_LT_TAGVAR(link_all_deplibs, $1)=unknown -_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds -_LT_TAGVAR(no_undefined_flag, $1)= -_LT_TAGVAR(whole_archive_flag_spec, $1)= -_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no - -# Source file extension for fc test sources. -ac_ext=${ac_fc_srcext-f} - -# Object file extension for compiled fc test sources. -objext=o -_LT_TAGVAR(objext, $1)=$objext - -# No sense in running all these tests if we already determined that -# the FC compiler isn't working. Some variables (like enable_shared) -# are currently assumed to apply to all compilers on this platform, -# and will be corrupted by setting them based on a non-working compiler. -if test "$_lt_disable_FC" != yes; then - # Code to be used in simple compile tests - lt_simple_compile_test_code="\ - subroutine t - return - end -" - - # Code to be used in simple link tests - lt_simple_link_test_code="\ - program t - end -" - - # ltmain only uses $CC for tagged configurations so make sure $CC is set. - _LT_TAG_COMPILER - - # save warnings/boilerplate of simple test code - _LT_COMPILER_BOILERPLATE - _LT_LINKER_BOILERPLATE - - # Allow CC to be a program name with arguments. - lt_save_CC="$CC" - lt_save_GCC=$GCC - CC=${FC-"f95"} - compiler=$CC - GCC=$ac_cv_fc_compiler_gnu - - _LT_TAGVAR(compiler, $1)=$CC - _LT_CC_BASENAME([$compiler]) - - if test -n "$compiler"; then - AC_MSG_CHECKING([if libtool supports shared libraries]) - AC_MSG_RESULT([$can_build_shared]) - - AC_MSG_CHECKING([whether to build shared libraries]) - test "$can_build_shared" = "no" && enable_shared=no - - # On AIX, shared libraries and static libraries use the same namespace, and - # are all built from PIC. - case $host_os in - aix3*) - test "$enable_shared" = yes && enable_static=no - if test -n "$RANLIB"; then - archive_cmds="$archive_cmds~\$RANLIB \$lib" - postinstall_cmds='$RANLIB $lib' - fi - ;; - aix[[4-9]]*) - if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then - test "$enable_shared" = yes && enable_static=no - fi - ;; - esac - AC_MSG_RESULT([$enable_shared]) - - AC_MSG_CHECKING([whether to build static libraries]) - # Make sure either enable_shared or enable_static is yes. - test "$enable_shared" = yes || enable_static=yes - AC_MSG_RESULT([$enable_static]) - - _LT_TAGVAR(GCC, $1)="$ac_cv_fc_compiler_gnu" - _LT_TAGVAR(LD, $1)="$LD" - - ## CAVEAT EMPTOR: - ## There is no encapsulation within the following macros, do not change - ## the running order or otherwise move them around unless you know exactly - ## what you are doing... - _LT_SYS_HIDDEN_LIBDEPS($1) - _LT_COMPILER_PIC($1) - _LT_COMPILER_C_O($1) - _LT_COMPILER_FILE_LOCKS($1) - _LT_LINKER_SHLIBS($1) - _LT_SYS_DYNAMIC_LINKER($1) - _LT_LINKER_HARDCODE_LIBPATH($1) - - _LT_CONFIG($1) - fi # test -n "$compiler" - - GCC=$lt_save_GCC - CC="$lt_save_CC" -fi # test "$_lt_disable_FC" != yes - -AC_LANG_POP -])# _LT_LANG_FC_CONFIG - - -# _LT_LANG_GCJ_CONFIG([TAG]) -# -------------------------- -# Ensure that the configuration variables for the GNU Java Compiler compiler -# are suitably defined. These variables are subsequently used by _LT_CONFIG -# to write the compiler configuration to `libtool'. -m4_defun([_LT_LANG_GCJ_CONFIG], -[AC_REQUIRE([LT_PROG_GCJ])dnl -AC_LANG_SAVE - -# Source file extension for Java test sources. -ac_ext=java - -# Object file extension for compiled Java test sources. -objext=o -_LT_TAGVAR(objext, $1)=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code="class foo {}" - -# Code to be used in simple link tests -lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }' - -# ltmain only uses $CC for tagged configurations so make sure $CC is set. -_LT_TAG_COMPILER - -# save warnings/boilerplate of simple test code -_LT_COMPILER_BOILERPLATE -_LT_LINKER_BOILERPLATE - -# Allow CC to be a program name with arguments. -lt_save_CC="$CC" -lt_save_GCC=$GCC -GCC=yes -CC=${GCJ-"gcj"} -compiler=$CC -_LT_TAGVAR(compiler, $1)=$CC -_LT_TAGVAR(LD, $1)="$LD" -_LT_CC_BASENAME([$compiler]) - -# GCJ did not exist at the time GCC didn't implicitly link libc in. -_LT_TAGVAR(archive_cmds_need_lc, $1)=no - -_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds - -if test -n "$compiler"; then - _LT_COMPILER_NO_RTTI($1) - _LT_COMPILER_PIC($1) - _LT_COMPILER_C_O($1) - _LT_COMPILER_FILE_LOCKS($1) - _LT_LINKER_SHLIBS($1) - _LT_LINKER_HARDCODE_LIBPATH($1) - - _LT_CONFIG($1) -fi - -AC_LANG_RESTORE - -GCC=$lt_save_GCC -CC="$lt_save_CC" -])# _LT_LANG_GCJ_CONFIG - - -# _LT_LANG_RC_CONFIG([TAG]) -# ------------------------- -# Ensure that the configuration variables for the Windows resource compiler -# are suitably defined. These variables are subsequently used by _LT_CONFIG -# to write the compiler configuration to `libtool'. -m4_defun([_LT_LANG_RC_CONFIG], -[AC_REQUIRE([LT_PROG_RC])dnl -AC_LANG_SAVE - -# Source file extension for RC test sources. -ac_ext=rc - -# Object file extension for compiled RC test sources. -objext=o -_LT_TAGVAR(objext, $1)=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' - -# Code to be used in simple link tests -lt_simple_link_test_code="$lt_simple_compile_test_code" - -# ltmain only uses $CC for tagged configurations so make sure $CC is set. -_LT_TAG_COMPILER - -# save warnings/boilerplate of simple test code -_LT_COMPILER_BOILERPLATE -_LT_LINKER_BOILERPLATE - -# Allow CC to be a program name with arguments. -lt_save_CC="$CC" -lt_save_GCC=$GCC -GCC= -CC=${RC-"windres"} -compiler=$CC -_LT_TAGVAR(compiler, $1)=$CC -_LT_CC_BASENAME([$compiler]) -_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes - -if test -n "$compiler"; then - : - _LT_CONFIG($1) -fi - -GCC=$lt_save_GCC -AC_LANG_RESTORE -CC="$lt_save_CC" -])# _LT_LANG_RC_CONFIG - - -# LT_PROG_GCJ -# ----------- -AC_DEFUN([LT_PROG_GCJ], -[m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ], - [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ], - [AC_CHECK_TOOL(GCJ, gcj,) - test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2" - AC_SUBST(GCJFLAGS)])])[]dnl -]) - -# Old name: -AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([LT_AC_PROG_GCJ], []) - - -# LT_PROG_RC -# ---------- -AC_DEFUN([LT_PROG_RC], -[AC_CHECK_TOOL(RC, windres,) -]) - -# Old name: -AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([LT_AC_PROG_RC], []) - - -# _LT_DECL_EGREP -# -------------- -# If we don't have a new enough Autoconf to choose the best grep -# available, choose the one first in the user's PATH. -m4_defun([_LT_DECL_EGREP], -[AC_REQUIRE([AC_PROG_EGREP])dnl -AC_REQUIRE([AC_PROG_FGREP])dnl -test -z "$GREP" && GREP=grep -_LT_DECL([], [GREP], [1], [A grep program that handles long lines]) -_LT_DECL([], [EGREP], [1], [An ERE matcher]) -_LT_DECL([], [FGREP], [1], [A literal string matcher]) -dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too -AC_SUBST([GREP]) -]) - - -# _LT_DECL_OBJDUMP -# -------------- -# If we don't have a new enough Autoconf to choose the best objdump -# available, choose the one first in the user's PATH. -m4_defun([_LT_DECL_OBJDUMP], -[AC_CHECK_TOOL(OBJDUMP, objdump, false) -test -z "$OBJDUMP" && OBJDUMP=objdump -_LT_DECL([], [OBJDUMP], [1], [An object symbol dumper]) -AC_SUBST([OBJDUMP]) -]) - - -# _LT_DECL_SED -# ------------ -# Check for a fully-functional sed program, that truncates -# as few characters as possible. Prefer GNU sed if found. -m4_defun([_LT_DECL_SED], -[AC_PROG_SED -test -z "$SED" && SED=sed -Xsed="$SED -e 1s/^X//" -_LT_DECL([], [SED], [1], [A sed program that does not truncate output]) -_LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"], - [Sed that helps us avoid accidentally triggering echo(1) options like -n]) -])# _LT_DECL_SED - -m4_ifndef([AC_PROG_SED], [ -# NOTE: This macro has been submitted for inclusion into # -# GNU Autoconf as AC_PROG_SED. When it is available in # -# a released version of Autoconf we should remove this # -# macro and use it instead. # - -m4_defun([AC_PROG_SED], -[AC_MSG_CHECKING([for a sed that does not truncate output]) -AC_CACHE_VAL(lt_cv_path_SED, -[# Loop through the user's path and test for sed and gsed. -# Then use that list of sed's as ones to test for truncation. -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for lt_ac_prog in sed gsed; do - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then - lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" - fi - done - done -done -IFS=$as_save_IFS -lt_ac_max=0 -lt_ac_count=0 -# Add /usr/xpg4/bin/sed as it is typically found on Solaris -# along with /bin/sed that truncates output. -for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do - test ! -f $lt_ac_sed && continue - cat /dev/null > conftest.in - lt_ac_count=0 - echo $ECHO_N "0123456789$ECHO_C" >conftest.in - # Check for GNU sed and select it if it is found. - if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then - lt_cv_path_SED=$lt_ac_sed - break - fi - while true; do - cat conftest.in conftest.in >conftest.tmp - mv conftest.tmp conftest.in - cp conftest.in conftest.nl - echo >>conftest.nl - $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break - cmp -s conftest.out conftest.nl || break - # 10000 chars as input seems more than enough - test $lt_ac_count -gt 10 && break - lt_ac_count=`expr $lt_ac_count + 1` - if test $lt_ac_count -gt $lt_ac_max; then - lt_ac_max=$lt_ac_count - lt_cv_path_SED=$lt_ac_sed - fi - done -done -]) -SED=$lt_cv_path_SED -AC_SUBST([SED]) -AC_MSG_RESULT([$SED]) -])#AC_PROG_SED -])#m4_ifndef - -# Old name: -AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([LT_AC_PROG_SED], []) - - -# _LT_CHECK_SHELL_FEATURES -# ------------------------ -# Find out whether the shell is Bourne or XSI compatible, -# or has some other useful features. -m4_defun([_LT_CHECK_SHELL_FEATURES], -[AC_MSG_CHECKING([whether the shell understands some XSI constructs]) -# Try some XSI features -xsi_shell=no -( _lt_dummy="a/b/c" - test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \ - = c,a/b,, \ - && eval 'test $(( 1 + 1 )) -eq 2 \ - && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ - && xsi_shell=yes -AC_MSG_RESULT([$xsi_shell]) -_LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell']) - -AC_MSG_CHECKING([whether the shell understands "+="]) -lt_shell_append=no -( foo=bar; set foo baz; eval "$[1]+=\$[2]" && test "$foo" = barbaz ) \ - >/dev/null 2>&1 \ - && lt_shell_append=yes -AC_MSG_RESULT([$lt_shell_append]) -_LT_CONFIG_LIBTOOL_INIT([lt_shell_append='$lt_shell_append']) - -if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then - lt_unset=unset -else - lt_unset=false -fi -_LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl - -# test EBCDIC or ASCII -case `echo X|tr X '\101'` in - A) # ASCII based system - # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr - lt_SP2NL='tr \040 \012' - lt_NL2SP='tr \015\012 \040\040' - ;; - *) # EBCDIC based system - lt_SP2NL='tr \100 \n' - lt_NL2SP='tr \r\n \100\100' - ;; -esac -_LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl -_LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl -])# _LT_CHECK_SHELL_FEATURES - - -# _LT_PROG_XSI_SHELLFNS -# --------------------- -# Bourne and XSI compatible variants of some useful shell functions. -m4_defun([_LT_PROG_XSI_SHELLFNS], -[case $xsi_shell in - yes) - cat << \_LT_EOF >> "$cfgfile" - -# func_dirname file append nondir_replacement -# Compute the dirname of FILE. If nonempty, add APPEND to the result, -# otherwise set result to NONDIR_REPLACEMENT. -func_dirname () -{ - case ${1} in - */*) func_dirname_result="${1%/*}${2}" ;; - * ) func_dirname_result="${3}" ;; - esac -} - -# func_basename file -func_basename () -{ - func_basename_result="${1##*/}" -} - -# func_dirname_and_basename file append nondir_replacement -# perform func_basename and func_dirname in a single function -# call: -# dirname: Compute the dirname of FILE. If nonempty, -# add APPEND to the result, otherwise set result -# to NONDIR_REPLACEMENT. -# value returned in "$func_dirname_result" -# basename: Compute filename of FILE. -# value retuned in "$func_basename_result" -# Implementation must be kept synchronized with func_dirname -# and func_basename. For efficiency, we do not delegate to -# those functions but instead duplicate the functionality here. -func_dirname_and_basename () -{ - case ${1} in - */*) func_dirname_result="${1%/*}${2}" ;; - * ) func_dirname_result="${3}" ;; - esac - func_basename_result="${1##*/}" -} - -# func_stripname prefix suffix name -# strip PREFIX and SUFFIX off of NAME. -# PREFIX and SUFFIX must not contain globbing or regex special -# characters, hashes, percent signs, but SUFFIX may contain a leading -# dot (in which case that matches only a dot). -func_stripname () -{ - # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are - # positional parameters, so assign one to ordinary parameter first. - func_stripname_result=${3} - func_stripname_result=${func_stripname_result#"${1}"} - func_stripname_result=${func_stripname_result%"${2}"} -} - -# func_opt_split -func_opt_split () -{ - func_opt_split_opt=${1%%=*} - func_opt_split_arg=${1#*=} -} - -# func_lo2o object -func_lo2o () -{ - case ${1} in - *.lo) func_lo2o_result=${1%.lo}.${objext} ;; - *) func_lo2o_result=${1} ;; - esac -} - -# func_xform libobj-or-source -func_xform () -{ - func_xform_result=${1%.*}.lo -} - -# func_arith arithmetic-term... -func_arith () -{ - func_arith_result=$(( $[*] )) -} - -# func_len string -# STRING may not start with a hyphen. -func_len () -{ - func_len_result=${#1} -} - -_LT_EOF - ;; - *) # Bourne compatible functions. - cat << \_LT_EOF >> "$cfgfile" - -# func_dirname file append nondir_replacement -# Compute the dirname of FILE. If nonempty, add APPEND to the result, -# otherwise set result to NONDIR_REPLACEMENT. -func_dirname () -{ - # Extract subdirectory from the argument. - func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"` - if test "X$func_dirname_result" = "X${1}"; then - func_dirname_result="${3}" - else - func_dirname_result="$func_dirname_result${2}" - fi -} - -# func_basename file -func_basename () -{ - func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"` -} - -dnl func_dirname_and_basename -dnl A portable version of this function is already defined in general.m4sh -dnl so there is no need for it here. - -# func_stripname prefix suffix name -# strip PREFIX and SUFFIX off of NAME. -# PREFIX and SUFFIX must not contain globbing or regex special -# characters, hashes, percent signs, but SUFFIX may contain a leading -# dot (in which case that matches only a dot). -# func_strip_suffix prefix name -func_stripname () -{ - case ${2} in - .*) func_stripname_result=`$ECHO "X${3}" \ - | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;; - *) func_stripname_result=`$ECHO "X${3}" \ - | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;; - esac -} - -# sed scripts: -my_sed_long_opt='1s/^\(-[[^=]]*\)=.*/\1/;q' -my_sed_long_arg='1s/^-[[^=]]*=//' - -# func_opt_split -func_opt_split () -{ - func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"` - func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"` -} - -# func_lo2o object -func_lo2o () -{ - func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"` -} - -# func_xform libobj-or-source -func_xform () -{ - func_xform_result=`$ECHO "X${1}" | $Xsed -e 's/\.[[^.]]*$/.lo/'` -} - -# func_arith arithmetic-term... -func_arith () -{ - func_arith_result=`expr "$[@]"` -} - -# func_len string -# STRING may not start with a hyphen. -func_len () -{ - func_len_result=`expr "$[1]" : ".*" 2>/dev/null || echo $max_cmd_len` -} - -_LT_EOF -esac - -case $lt_shell_append in - yes) - cat << \_LT_EOF >> "$cfgfile" - -# func_append var value -# Append VALUE to the end of shell variable VAR. -func_append () -{ - eval "$[1]+=\$[2]" -} -_LT_EOF - ;; - *) - cat << \_LT_EOF >> "$cfgfile" - -# func_append var value -# Append VALUE to the end of shell variable VAR. -func_append () -{ - eval "$[1]=\$$[1]\$[2]" -} - -_LT_EOF - ;; - esac -]) - -# Helper functions for option handling. -*- Autoconf -*- -# -# Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc. -# Written by Gary V. Vaughan, 2004 -# -# This file is free software; the Free Software Foundation gives -# unlimited permission to copy and/or distribute it, with or without -# modifications, as long as this notice is preserved. - -# serial 6 ltoptions.m4 - -# This is to help aclocal find these macros, as it can't see m4_define. -AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])]) - - -# _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME) -# ------------------------------------------ -m4_define([_LT_MANGLE_OPTION], -[[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])]) - - -# _LT_SET_OPTION(MACRO-NAME, OPTION-NAME) -# --------------------------------------- -# Set option OPTION-NAME for macro MACRO-NAME, and if there is a -# matching handler defined, dispatch to it. Other OPTION-NAMEs are -# saved as a flag. -m4_define([_LT_SET_OPTION], -[m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl -m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]), - _LT_MANGLE_DEFUN([$1], [$2]), - [m4_warning([Unknown $1 option `$2'])])[]dnl -]) - - -# _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET]) -# ------------------------------------------------------------ -# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. -m4_define([_LT_IF_OPTION], -[m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])]) - - -# _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET) -# ------------------------------------------------------- -# Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME -# are set. -m4_define([_LT_UNLESS_OPTIONS], -[m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), - [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option), - [m4_define([$0_found])])])[]dnl -m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3 -])[]dnl -]) - - -# _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST) -# ---------------------------------------- -# OPTION-LIST is a space-separated list of Libtool options associated -# with MACRO-NAME. If any OPTION has a matching handler declared with -# LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about -# the unknown option and exit. -m4_defun([_LT_SET_OPTIONS], -[# Set options -m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), - [_LT_SET_OPTION([$1], _LT_Option)]) - -m4_if([$1],[LT_INIT],[ - dnl - dnl Simply set some default values (i.e off) if boolean options were not - dnl specified: - _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no - ]) - _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no - ]) - dnl - dnl If no reference was made to various pairs of opposing options, then - dnl we run the default mode handler for the pair. For example, if neither - dnl `shared' nor `disable-shared' was passed, we enable building of shared - dnl archives by default: - _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED]) - _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC]) - _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC]) - _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install], - [_LT_ENABLE_FAST_INSTALL]) - ]) -])# _LT_SET_OPTIONS - - - -# _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME) -# ----------------------------------------- -m4_define([_LT_MANGLE_DEFUN], -[[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])]) - - -# LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE) -# ----------------------------------------------- -m4_define([LT_OPTION_DEFINE], -[m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl -])# LT_OPTION_DEFINE - - -# dlopen -# ------ -LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes -]) - -AU_DEFUN([AC_LIBTOOL_DLOPEN], -[_LT_SET_OPTION([LT_INIT], [dlopen]) -AC_DIAGNOSE([obsolete], -[$0: Remove this warning and the call to _LT_SET_OPTION when you -put the `dlopen' option into LT_INIT's first parameter.]) -]) - -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], []) - - -# win32-dll -# --------- -# Declare package support for building win32 dll's. -LT_OPTION_DEFINE([LT_INIT], [win32-dll], -[enable_win32_dll=yes - -case $host in -*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-cegcc*) - AC_CHECK_TOOL(AS, as, false) - AC_CHECK_TOOL(DLLTOOL, dlltool, false) - AC_CHECK_TOOL(OBJDUMP, objdump, false) - ;; -esac - -test -z "$AS" && AS=as -_LT_DECL([], [AS], [0], [Assembler program])dnl - -test -z "$DLLTOOL" && DLLTOOL=dlltool -_LT_DECL([], [DLLTOOL], [0], [DLL creation program])dnl - -test -z "$OBJDUMP" && OBJDUMP=objdump -_LT_DECL([], [OBJDUMP], [0], [Object dumper program])dnl -])# win32-dll - -AU_DEFUN([AC_LIBTOOL_WIN32_DLL], -[AC_REQUIRE([AC_CANONICAL_HOST])dnl -_LT_SET_OPTION([LT_INIT], [win32-dll]) -AC_DIAGNOSE([obsolete], -[$0: Remove this warning and the call to _LT_SET_OPTION when you -put the `win32-dll' option into LT_INIT's first parameter.]) -]) - -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], []) - - -# _LT_ENABLE_SHARED([DEFAULT]) -# ---------------------------- -# implement the --enable-shared flag, and supports the `shared' and -# `disable-shared' LT_INIT options. -# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. -m4_define([_LT_ENABLE_SHARED], -[m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl -AC_ARG_ENABLE([shared], - [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@], - [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])], - [p=${PACKAGE-default} - case $enableval in - yes) enable_shared=yes ;; - no) enable_shared=no ;; - *) - enable_shared=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_shared=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac], - [enable_shared=]_LT_ENABLE_SHARED_DEFAULT) - - _LT_DECL([build_libtool_libs], [enable_shared], [0], - [Whether or not to build shared libraries]) -])# _LT_ENABLE_SHARED - -LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])]) -LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])]) - -# Old names: -AC_DEFUN([AC_ENABLE_SHARED], -[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared]) -]) - -AC_DEFUN([AC_DISABLE_SHARED], -[_LT_SET_OPTION([LT_INIT], [disable-shared]) -]) - -AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) -AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) - -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AM_ENABLE_SHARED], []) -dnl AC_DEFUN([AM_DISABLE_SHARED], []) - - - -# _LT_ENABLE_STATIC([DEFAULT]) -# ---------------------------- -# implement the --enable-static flag, and support the `static' and -# `disable-static' LT_INIT options. -# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. -m4_define([_LT_ENABLE_STATIC], -[m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl -AC_ARG_ENABLE([static], - [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@], - [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])], - [p=${PACKAGE-default} - case $enableval in - yes) enable_static=yes ;; - no) enable_static=no ;; - *) - enable_static=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_static=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac], - [enable_static=]_LT_ENABLE_STATIC_DEFAULT) - - _LT_DECL([build_old_libs], [enable_static], [0], - [Whether or not to build static libraries]) -])# _LT_ENABLE_STATIC - -LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])]) -LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])]) - -# Old names: -AC_DEFUN([AC_ENABLE_STATIC], -[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static]) -]) - -AC_DEFUN([AC_DISABLE_STATIC], -[_LT_SET_OPTION([LT_INIT], [disable-static]) -]) - -AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) -AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) - -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AM_ENABLE_STATIC], []) -dnl AC_DEFUN([AM_DISABLE_STATIC], []) - - - -# _LT_ENABLE_FAST_INSTALL([DEFAULT]) -# ---------------------------------- -# implement the --enable-fast-install flag, and support the `fast-install' -# and `disable-fast-install' LT_INIT options. -# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. -m4_define([_LT_ENABLE_FAST_INSTALL], -[m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl -AC_ARG_ENABLE([fast-install], - [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], - [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], - [p=${PACKAGE-default} - case $enableval in - yes) enable_fast_install=yes ;; - no) enable_fast_install=no ;; - *) - enable_fast_install=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_fast_install=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac], - [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT) - -_LT_DECL([fast_install], [enable_fast_install], [0], - [Whether or not to optimize for fast installation])dnl -])# _LT_ENABLE_FAST_INSTALL - -LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])]) -LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])]) - -# Old names: -AU_DEFUN([AC_ENABLE_FAST_INSTALL], -[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install]) -AC_DIAGNOSE([obsolete], -[$0: Remove this warning and the call to _LT_SET_OPTION when you put -the `fast-install' option into LT_INIT's first parameter.]) -]) - -AU_DEFUN([AC_DISABLE_FAST_INSTALL], -[_LT_SET_OPTION([LT_INIT], [disable-fast-install]) -AC_DIAGNOSE([obsolete], -[$0: Remove this warning and the call to _LT_SET_OPTION when you put -the `disable-fast-install' option into LT_INIT's first parameter.]) -]) - -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], []) -dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], []) - - -# _LT_WITH_PIC([MODE]) -# -------------------- -# implement the --with-pic flag, and support the `pic-only' and `no-pic' -# LT_INIT options. -# MODE is either `yes' or `no'. If omitted, it defaults to `both'. -m4_define([_LT_WITH_PIC], -[AC_ARG_WITH([pic], - [AS_HELP_STRING([--with-pic], - [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], - [pic_mode="$withval"], - [pic_mode=default]) - -test -z "$pic_mode" && pic_mode=m4_default([$1], [default]) - -_LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl -])# _LT_WITH_PIC - -LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])]) -LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])]) - -# Old name: -AU_DEFUN([AC_LIBTOOL_PICMODE], -[_LT_SET_OPTION([LT_INIT], [pic-only]) -AC_DIAGNOSE([obsolete], -[$0: Remove this warning and the call to _LT_SET_OPTION when you -put the `pic-only' option into LT_INIT's first parameter.]) -]) - -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_PICMODE], []) - - -m4_define([_LTDL_MODE], []) -LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive], - [m4_define([_LTDL_MODE], [nonrecursive])]) -LT_OPTION_DEFINE([LTDL_INIT], [recursive], - [m4_define([_LTDL_MODE], [recursive])]) -LT_OPTION_DEFINE([LTDL_INIT], [subproject], - [m4_define([_LTDL_MODE], [subproject])]) - -m4_define([_LTDL_TYPE], []) -LT_OPTION_DEFINE([LTDL_INIT], [installable], - [m4_define([_LTDL_TYPE], [installable])]) -LT_OPTION_DEFINE([LTDL_INIT], [convenience], - [m4_define([_LTDL_TYPE], [convenience])]) - -# ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*- -# -# Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc. -# Written by Gary V. Vaughan, 2004 -# -# This file is free software; the Free Software Foundation gives -# unlimited permission to copy and/or distribute it, with or without -# modifications, as long as this notice is preserved. - -# serial 6 ltsugar.m4 - -# This is to help aclocal find these macros, as it can't see m4_define. -AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])]) - - -# lt_join(SEP, ARG1, [ARG2...]) -# ----------------------------- -# Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their -# associated separator. -# Needed until we can rely on m4_join from Autoconf 2.62, since all earlier -# versions in m4sugar had bugs. -m4_define([lt_join], -[m4_if([$#], [1], [], - [$#], [2], [[$2]], - [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])]) -m4_define([_lt_join], -[m4_if([$#$2], [2], [], - [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])]) - - -# lt_car(LIST) -# lt_cdr(LIST) -# ------------ -# Manipulate m4 lists. -# These macros are necessary as long as will still need to support -# Autoconf-2.59 which quotes differently. -m4_define([lt_car], [[$1]]) -m4_define([lt_cdr], -[m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])], - [$#], 1, [], - [m4_dquote(m4_shift($@))])]) -m4_define([lt_unquote], $1) - - -# lt_append(MACRO-NAME, STRING, [SEPARATOR]) -# ------------------------------------------ -# Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'. -# Note that neither SEPARATOR nor STRING are expanded; they are appended -# to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked). -# No SEPARATOR is output if MACRO-NAME was previously undefined (different -# than defined and empty). -# -# This macro is needed until we can rely on Autoconf 2.62, since earlier -# versions of m4sugar mistakenly expanded SEPARATOR but not STRING. -m4_define([lt_append], -[m4_define([$1], - m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])]) - - - -# lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...]) -# ---------------------------------------------------------- -# Produce a SEP delimited list of all paired combinations of elements of -# PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list -# has the form PREFIXmINFIXSUFFIXn. -# Needed until we can rely on m4_combine added in Autoconf 2.62. -m4_define([lt_combine], -[m4_if(m4_eval([$# > 3]), [1], - [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl -[[m4_foreach([_Lt_prefix], [$2], - [m4_foreach([_Lt_suffix], - ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[, - [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])]) - - -# lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ]) -# ----------------------------------------------------------------------- -# Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited -# by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ. -m4_define([lt_if_append_uniq], -[m4_ifdef([$1], - [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1], - [lt_append([$1], [$2], [$3])$4], - [$5])], - [lt_append([$1], [$2], [$3])$4])]) - - -# lt_dict_add(DICT, KEY, VALUE) -# ----------------------------- -m4_define([lt_dict_add], -[m4_define([$1($2)], [$3])]) - - -# lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE) -# -------------------------------------------- -m4_define([lt_dict_add_subkey], -[m4_define([$1($2:$3)], [$4])]) - - -# lt_dict_fetch(DICT, KEY, [SUBKEY]) -# ---------------------------------- -m4_define([lt_dict_fetch], -[m4_ifval([$3], - m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]), - m4_ifdef([$1($2)], [m4_defn([$1($2)])]))]) - - -# lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE]) -# ----------------------------------------------------------------- -m4_define([lt_if_dict_fetch], -[m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4], - [$5], - [$6])]) - - -# lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...]) -# -------------------------------------------------------------- -m4_define([lt_dict_filter], -[m4_if([$5], [], [], - [lt_join(m4_quote(m4_default([$4], [[, ]])), - lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]), - [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl -]) - -# ltversion.m4 -- version numbers -*- Autoconf -*- -# -# Copyright (C) 2004 Free Software Foundation, Inc. -# Written by Scott James Remnant, 2004 -# -# This file is free software; the Free Software Foundation gives -# unlimited permission to copy and/or distribute it, with or without -# modifications, as long as this notice is preserved. - -# Generated from ltversion.in. - -# serial 3017 ltversion.m4 -# This file is part of GNU Libtool - -m4_define([LT_PACKAGE_VERSION], [2.2.6b]) -m4_define([LT_PACKAGE_REVISION], [1.3017]) - -AC_DEFUN([LTVERSION_VERSION], -[macro_version='2.2.6b' -macro_revision='1.3017' -_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) -_LT_DECL(, macro_revision, 0) -]) - -# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*- -# -# Copyright (C) 2004, 2005, 2007 Free Software Foundation, Inc. -# Written by Scott James Remnant, 2004. -# -# This file is free software; the Free Software Foundation gives -# unlimited permission to copy and/or distribute it, with or without -# modifications, as long as this notice is preserved. - -# serial 4 lt~obsolete.m4 - -# These exist entirely to fool aclocal when bootstrapping libtool. -# -# In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN) -# which have later been changed to m4_define as they aren't part of the -# exported API, or moved to Autoconf or Automake where they belong. -# -# The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN -# in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us -# using a macro with the same name in our local m4/libtool.m4 it'll -# pull the old libtool.m4 in (it doesn't see our shiny new m4_define -# and doesn't know about Autoconf macros at all.) -# -# So we provide this file, which has a silly filename so it's always -# included after everything else. This provides aclocal with the -# AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything -# because those macros already exist, or will be overwritten later. -# We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. -# -# Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here. -# Yes, that means every name once taken will need to remain here until -# we give up compatibility with versions before 1.7, at which point -# we need to keep only those names which we still refer to. - -# This is to help aclocal find these macros, as it can't see m4_define. -AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])]) - -m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])]) -m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])]) -m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])]) -m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])]) -m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])]) -m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])]) -m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])]) -m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])]) -m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])]) -m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])]) -m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])]) -m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])]) -m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])]) -m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])]) -m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])]) -m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])]) -m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])]) -m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])]) -m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])]) -m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])]) -m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])]) -m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])]) -m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])]) -m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])]) -m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])]) -m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])]) -m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])]) -m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])]) -m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])]) -m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])]) -m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])]) -m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])]) -m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])]) -m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])]) -m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])]) -m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])]) -m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])]) -m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])]) -m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])]) -m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])]) -m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])]) -m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])]) -m4_ifndef([AC_LIBTOOL_RC], [AC_DEFUN([AC_LIBTOOL_RC])]) -m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])]) -m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])]) -m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])]) -m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])]) -m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])]) -m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])]) -m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])]) -m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])]) -m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])]) -m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])]) -m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])]) -m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])]) - -# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# AM_AUTOMAKE_VERSION(VERSION) -# ---------------------------- -# Automake X.Y traces this macro to ensure aclocal.m4 has been -# generated from the m4 files accompanying Automake X.Y. -# (This private macro should not be called outside this file.) -AC_DEFUN([AM_AUTOMAKE_VERSION], -[am__api_version='1.11' -dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to -dnl require some minimum version. Point them to the right macro. -m4_if([$1], [1.11.1], [], - [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl -]) - -# _AM_AUTOCONF_VERSION(VERSION) -# ----------------------------- -# aclocal traces this macro to find the Autoconf version. -# This is a private macro too. Using m4_define simplifies -# the logic in aclocal, which can simply ignore this definition. -m4_define([_AM_AUTOCONF_VERSION], []) - -# AM_SET_CURRENT_AUTOMAKE_VERSION -# ------------------------------- -# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. -# This function is AC_REQUIREd by AM_INIT_AUTOMAKE. -AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], -[AM_AUTOMAKE_VERSION([1.11.1])dnl -m4_ifndef([AC_AUTOCONF_VERSION], - [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl -_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) - -# AM_AUX_DIR_EXPAND -*- Autoconf -*- - -# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets -# $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to -# `$srcdir', `$srcdir/..', or `$srcdir/../..'. -# -# Of course, Automake must honor this variable whenever it calls a -# tool from the auxiliary directory. The problem is that $srcdir (and -# therefore $ac_aux_dir as well) can be either absolute or relative, -# depending on how configure is run. This is pretty annoying, since -# it makes $ac_aux_dir quite unusable in subdirectories: in the top -# source directory, any form will work fine, but in subdirectories a -# relative path needs to be adjusted first. -# -# $ac_aux_dir/missing -# fails when called from a subdirectory if $ac_aux_dir is relative -# $top_srcdir/$ac_aux_dir/missing -# fails if $ac_aux_dir is absolute, -# fails when called from a subdirectory in a VPATH build with -# a relative $ac_aux_dir -# -# The reason of the latter failure is that $top_srcdir and $ac_aux_dir -# are both prefixed by $srcdir. In an in-source build this is usually -# harmless because $srcdir is `.', but things will broke when you -# start a VPATH build or use an absolute $srcdir. -# -# So we could use something similar to $top_srcdir/$ac_aux_dir/missing, -# iff we strip the leading $srcdir from $ac_aux_dir. That would be: -# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` -# and then we would define $MISSING as -# MISSING="\${SHELL} $am_aux_dir/missing" -# This will work as long as MISSING is not called from configure, because -# unfortunately $(top_srcdir) has no meaning in configure. -# However there are other variables, like CC, which are often used in -# configure, and could therefore not use this "fixed" $ac_aux_dir. -# -# Another solution, used here, is to always expand $ac_aux_dir to an -# absolute PATH. The drawback is that using absolute paths prevent a -# configured tree to be moved without reconfiguration. - -AC_DEFUN([AM_AUX_DIR_EXPAND], -[dnl Rely on autoconf to set up CDPATH properly. -AC_PREREQ([2.50])dnl -# expand $ac_aux_dir to an absolute path -am_aux_dir=`cd $ac_aux_dir && pwd` -]) - -# AM_CONDITIONAL -*- Autoconf -*- - -# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008 -# Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 9 - -# AM_CONDITIONAL(NAME, SHELL-CONDITION) -# ------------------------------------- -# Define a conditional. -AC_DEFUN([AM_CONDITIONAL], -[AC_PREREQ(2.52)dnl - ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], - [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl -AC_SUBST([$1_TRUE])dnl -AC_SUBST([$1_FALSE])dnl -_AM_SUBST_NOTMAKE([$1_TRUE])dnl -_AM_SUBST_NOTMAKE([$1_FALSE])dnl -m4_define([_AM_COND_VALUE_$1], [$2])dnl -if $2; then - $1_TRUE= - $1_FALSE='#' -else - $1_TRUE='#' - $1_FALSE= -fi -AC_CONFIG_COMMANDS_PRE( -[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then - AC_MSG_ERROR([[conditional "$1" was never defined. -Usually this means the macro was only invoked conditionally.]]) -fi])]) - -# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009 -# Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 10 - -# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be -# written in clear, in which case automake, when reading aclocal.m4, -# will think it sees a *use*, and therefore will trigger all it's -# C support machinery. Also note that it means that autoscan, seeing -# CC etc. in the Makefile, will ask for an AC_PROG_CC use... - - -# _AM_DEPENDENCIES(NAME) -# ---------------------- -# See how the compiler implements dependency checking. -# NAME is "CC", "CXX", "GCJ", or "OBJC". -# We try a few techniques and use that to set a single cache variable. -# -# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was -# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular -# dependency, and given that the user is not expected to run this macro, -# just rely on AC_PROG_CC. -AC_DEFUN([_AM_DEPENDENCIES], -[AC_REQUIRE([AM_SET_DEPDIR])dnl -AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl -AC_REQUIRE([AM_MAKE_INCLUDE])dnl -AC_REQUIRE([AM_DEP_TRACK])dnl - -ifelse([$1], CC, [depcc="$CC" am_compiler_list=], - [$1], CXX, [depcc="$CXX" am_compiler_list=], - [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], - [$1], UPC, [depcc="$UPC" am_compiler_list=], - [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], - [depcc="$$1" am_compiler_list=]) - -AC_CACHE_CHECK([dependency style of $depcc], - [am_cv_$1_dependencies_compiler_type], -[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then - # We make a subdir and do the tests there. Otherwise we can end up - # making bogus files that we don't know about and never remove. For - # instance it was reported that on HP-UX the gcc test will end up - # making a dummy file named `D' -- because `-MD' means `put the output - # in D'. - mkdir conftest.dir - # Copy depcomp to subdir because otherwise we won't find it if we're - # using a relative directory. - cp "$am_depcomp" conftest.dir - cd conftest.dir - # We will build objects and dependencies in a subdirectory because - # it helps to detect inapplicable dependency modes. For instance - # both Tru64's cc and ICC support -MD to output dependencies as a - # side effect of compilation, but ICC will put the dependencies in - # the current directory while Tru64 will put them in the object - # directory. - mkdir sub - - am_cv_$1_dependencies_compiler_type=none - if test "$am_compiler_list" = ""; then - am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` - fi - am__universal=false - m4_case([$1], [CC], - [case " $depcc " in #( - *\ -arch\ *\ -arch\ *) am__universal=true ;; - esac], - [CXX], - [case " $depcc " in #( - *\ -arch\ *\ -arch\ *) am__universal=true ;; - esac]) - - for depmode in $am_compiler_list; do - # Setup a source with many dependencies, because some compilers - # like to wrap large dependency lists on column 80 (with \), and - # we should not choose a depcomp mode which is confused by this. - # - # We need to recreate these files for each test, as the compiler may - # overwrite some of them when testing with obscure command lines. - # This happens at least with the AIX C compiler. - : > sub/conftest.c - for i in 1 2 3 4 5 6; do - echo '#include "conftst'$i'.h"' >> sub/conftest.c - # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with - # Solaris 8's {/usr,}/bin/sh. - touch sub/conftst$i.h - done - echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf - - # We check with `-c' and `-o' for the sake of the "dashmstdout" - # mode. It turns out that the SunPro C++ compiler does not properly - # handle `-M -o', and we need to detect this. Also, some Intel - # versions had trouble with output in subdirs - am__obj=sub/conftest.${OBJEXT-o} - am__minus_obj="-o $am__obj" - case $depmode in - gcc) - # This depmode causes a compiler race in universal mode. - test "$am__universal" = false || continue - ;; - nosideeffect) - # after this tag, mechanisms are not by side-effect, so they'll - # only be used when explicitly requested - if test "x$enable_dependency_tracking" = xyes; then - continue - else - break - fi - ;; - msvisualcpp | msvcmsys) - # This compiler won't grok `-c -o', but also, the minuso test has - # not run yet. These depmodes are late enough in the game, and - # so weak that their functioning should not be impacted. - am__obj=conftest.${OBJEXT-o} - am__minus_obj= - ;; - none) break ;; - esac - if depmode=$depmode \ - source=sub/conftest.c object=$am__obj \ - depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ - $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ - >/dev/null 2>conftest.err && - grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && - grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && - grep $am__obj sub/conftest.Po > /dev/null 2>&1 && - ${MAKE-make} -s -f confmf > /dev/null 2>&1; then - # icc doesn't choke on unknown options, it will just issue warnings - # or remarks (even with -Werror). So we grep stderr for any message - # that says an option was ignored or not supported. - # When given -MP, icc 7.0 and 7.1 complain thusly: - # icc: Command line warning: ignoring option '-M'; no argument required - # The diagnosis changed in icc 8.0: - # icc: Command line remark: option '-MP' not supported - if (grep 'ignoring option' conftest.err || - grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else - am_cv_$1_dependencies_compiler_type=$depmode - break - fi - fi - done - - cd .. - rm -rf conftest.dir -else - am_cv_$1_dependencies_compiler_type=none -fi -]) -AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) -AM_CONDITIONAL([am__fastdep$1], [ - test "x$enable_dependency_tracking" != xno \ - && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) -]) - - -# AM_SET_DEPDIR -# ------------- -# Choose a directory name for dependency files. -# This macro is AC_REQUIREd in _AM_DEPENDENCIES -AC_DEFUN([AM_SET_DEPDIR], -[AC_REQUIRE([AM_SET_LEADING_DOT])dnl -AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl -]) - - -# AM_DEP_TRACK -# ------------ -AC_DEFUN([AM_DEP_TRACK], -[AC_ARG_ENABLE(dependency-tracking, -[ --disable-dependency-tracking speeds up one-time build - --enable-dependency-tracking do not reject slow dependency extractors]) -if test "x$enable_dependency_tracking" != xno; then - am_depcomp="$ac_aux_dir/depcomp" - AMDEPBACKSLASH='\' -fi -AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) -AC_SUBST([AMDEPBACKSLASH])dnl -_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl -]) - -# Generate code to set up dependency tracking. -*- Autoconf -*- - -# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008 -# Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -#serial 5 - -# _AM_OUTPUT_DEPENDENCY_COMMANDS -# ------------------------------ -AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], -[{ - # Autoconf 2.62 quotes --file arguments for eval, but not when files - # are listed without --file. Let's play safe and only enable the eval - # if we detect the quoting. - case $CONFIG_FILES in - *\'*) eval set x "$CONFIG_FILES" ;; - *) set x $CONFIG_FILES ;; - esac - shift - for mf - do - # Strip MF so we end up with the name of the file. - mf=`echo "$mf" | sed -e 's/:.*$//'` - # Check whether this is an Automake generated Makefile or not. - # We used to match only the files named `Makefile.in', but - # some people rename them; so instead we look at the file content. - # Grep'ing the first line is not enough: some people post-process - # each Makefile.in and add a new line on top of each file to say so. - # Grep'ing the whole file is not good either: AIX grep has a line - # limit of 2048, but all sed's we know have understand at least 4000. - if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then - dirpart=`AS_DIRNAME("$mf")` - else - continue - fi - # Extract the definition of DEPDIR, am__include, and am__quote - # from the Makefile without running `make'. - DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` - test -z "$DEPDIR" && continue - am__include=`sed -n 's/^am__include = //p' < "$mf"` - test -z "am__include" && continue - am__quote=`sed -n 's/^am__quote = //p' < "$mf"` - # When using ansi2knr, U may be empty or an underscore; expand it - U=`sed -n 's/^U = //p' < "$mf"` - # Find all dependency output files, they are included files with - # $(DEPDIR) in their names. We invoke sed twice because it is the - # simplest approach to changing $(DEPDIR) to its actual value in the - # expansion. - for file in `sed -n " - s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ - sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do - # Make sure the directory exists. - test -f "$dirpart/$file" && continue - fdir=`AS_DIRNAME(["$file"])` - AS_MKDIR_P([$dirpart/$fdir]) - # echo "creating $dirpart/$file" - echo '# dummy' > "$dirpart/$file" - done - done -} -])# _AM_OUTPUT_DEPENDENCY_COMMANDS - - -# AM_OUTPUT_DEPENDENCY_COMMANDS -# ----------------------------- -# This macro should only be invoked once -- use via AC_REQUIRE. -# -# This code is only required when automatic dependency tracking -# is enabled. FIXME. This creates each `.P' file that we will -# need in order to bootstrap the dependency handling code. -AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], -[AC_CONFIG_COMMANDS([depfiles], - [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], - [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) -]) - -# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005 -# Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 8 - -# AM_CONFIG_HEADER is obsolete. It has been replaced by AC_CONFIG_HEADERS. -AU_DEFUN([AM_CONFIG_HEADER], [AC_CONFIG_HEADERS($@)]) - -# Do all the work for Automake. -*- Autoconf -*- - -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, -# 2005, 2006, 2008, 2009 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 16 - -# This macro actually does too much. Some checks are only needed if -# your package does certain things. But this isn't really a big deal. - -# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) -# AM_INIT_AUTOMAKE([OPTIONS]) -# ----------------------------------------------- -# The call with PACKAGE and VERSION arguments is the old style -# call (pre autoconf-2.50), which is being phased out. PACKAGE -# and VERSION should now be passed to AC_INIT and removed from -# the call to AM_INIT_AUTOMAKE. -# We support both call styles for the transition. After -# the next Automake release, Autoconf can make the AC_INIT -# arguments mandatory, and then we can depend on a new Autoconf -# release and drop the old call support. -AC_DEFUN([AM_INIT_AUTOMAKE], -[AC_PREREQ([2.62])dnl -dnl Autoconf wants to disallow AM_ names. We explicitly allow -dnl the ones we care about. -m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl -AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl -AC_REQUIRE([AC_PROG_INSTALL])dnl -if test "`cd $srcdir && pwd`" != "`pwd`"; then - # Use -I$(srcdir) only when $(srcdir) != ., so that make's output - # is not polluted with repeated "-I." - AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl - # test to see if srcdir already configured - if test -f $srcdir/config.status; then - AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) - fi -fi - -# test whether we have cygpath -if test -z "$CYGPATH_W"; then - if (cygpath --version) >/dev/null 2>/dev/null; then - CYGPATH_W='cygpath -w' - else - CYGPATH_W=echo - fi -fi -AC_SUBST([CYGPATH_W]) - -# Define the identity of the package. -dnl Distinguish between old-style and new-style calls. -m4_ifval([$2], -[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl - AC_SUBST([PACKAGE], [$1])dnl - AC_SUBST([VERSION], [$2])], -[_AM_SET_OPTIONS([$1])dnl -dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. -m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,, - [m4_fatal([AC_INIT should be called with package and version arguments])])dnl - AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl - AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl - -_AM_IF_OPTION([no-define],, -[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) - AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl - -# Some tools Automake needs. -AC_REQUIRE([AM_SANITY_CHECK])dnl -AC_REQUIRE([AC_ARG_PROGRAM])dnl -AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) -AM_MISSING_PROG(AUTOCONF, autoconf) -AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) -AM_MISSING_PROG(AUTOHEADER, autoheader) -AM_MISSING_PROG(MAKEINFO, makeinfo) -AC_REQUIRE([AM_PROG_INSTALL_SH])dnl -AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl -AC_REQUIRE([AM_PROG_MKDIR_P])dnl -# We need awk for the "check" target. The system "awk" is bad on -# some platforms. -AC_REQUIRE([AC_PROG_AWK])dnl -AC_REQUIRE([AC_PROG_MAKE_SET])dnl -AC_REQUIRE([AM_SET_LEADING_DOT])dnl -_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], - [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], - [_AM_PROG_TAR([v7])])]) -_AM_IF_OPTION([no-dependencies],, -[AC_PROVIDE_IFELSE([AC_PROG_CC], - [_AM_DEPENDENCIES(CC)], - [define([AC_PROG_CC], - defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl -AC_PROVIDE_IFELSE([AC_PROG_CXX], - [_AM_DEPENDENCIES(CXX)], - [define([AC_PROG_CXX], - defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl -AC_PROVIDE_IFELSE([AC_PROG_OBJC], - [_AM_DEPENDENCIES(OBJC)], - [define([AC_PROG_OBJC], - defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl -]) -_AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl -dnl The `parallel-tests' driver may need to know about EXEEXT, so add the -dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro -dnl is hooked onto _AC_COMPILER_EXEEXT early, see below. -AC_CONFIG_COMMANDS_PRE(dnl -[m4_provide_if([_AM_COMPILER_EXEEXT], - [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl -]) - -dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion. Do not -dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further -dnl mangled by Autoconf and run in a shell conditional statement. -m4_define([_AC_COMPILER_EXEEXT], -m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) - - -# When config.status generates a header, we must update the stamp-h file. -# This file resides in the same directory as the config header -# that is generated. The stamp files are numbered to have different names. - -# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the -# loop where config.status creates the headers, so we can generate -# our stamp files there. -AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], -[# Compute $1's index in $config_headers. -_am_arg=$1 -_am_stamp_count=1 -for _am_header in $config_headers :; do - case $_am_header in - $_am_arg | $_am_arg:* ) - break ;; - * ) - _am_stamp_count=`expr $_am_stamp_count + 1` ;; - esac -done -echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) - -# Copyright (C) 2001, 2003, 2005, 2008 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# AM_PROG_INSTALL_SH -# ------------------ -# Define $install_sh. -AC_DEFUN([AM_PROG_INSTALL_SH], -[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl -if test x"${install_sh}" != xset; then - case $am_aux_dir in - *\ * | *\ *) - install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; - *) - install_sh="\${SHELL} $am_aux_dir/install-sh" - esac -fi -AC_SUBST(install_sh)]) - -# Copyright (C) 2003, 2005 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 2 - -# Check whether the underlying file-system supports filenames -# with a leading dot. For instance MS-DOS doesn't. -AC_DEFUN([AM_SET_LEADING_DOT], -[rm -rf .tst 2>/dev/null -mkdir .tst 2>/dev/null -if test -d .tst; then - am__leading_dot=. -else - am__leading_dot=_ -fi -rmdir .tst 2>/dev/null -AC_SUBST([am__leading_dot])]) - -# Add --enable-maintainer-mode option to configure. -*- Autoconf -*- -# From Jim Meyering - -# Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004, 2005, 2008 -# Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 5 - -# AM_MAINTAINER_MODE([DEFAULT-MODE]) -# ---------------------------------- -# Control maintainer-specific portions of Makefiles. -# Default is to disable them, unless `enable' is passed literally. -# For symmetry, `disable' may be passed as well. Anyway, the user -# can override the default with the --enable/--disable switch. -AC_DEFUN([AM_MAINTAINER_MODE], -[m4_case(m4_default([$1], [disable]), - [enable], [m4_define([am_maintainer_other], [disable])], - [disable], [m4_define([am_maintainer_other], [enable])], - [m4_define([am_maintainer_other], [enable]) - m4_warn([syntax], [unexpected argument to AM@&t@_MAINTAINER_MODE: $1])]) -AC_MSG_CHECKING([whether to am_maintainer_other maintainer-specific portions of Makefiles]) - dnl maintainer-mode's default is 'disable' unless 'enable' is passed - AC_ARG_ENABLE([maintainer-mode], -[ --][am_maintainer_other][-maintainer-mode am_maintainer_other make rules and dependencies not useful - (and sometimes confusing) to the casual installer], - [USE_MAINTAINER_MODE=$enableval], - [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes])) - AC_MSG_RESULT([$USE_MAINTAINER_MODE]) - AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes]) - MAINT=$MAINTAINER_MODE_TRUE - AC_SUBST([MAINT])dnl -] -) - -AU_DEFUN([jm_MAINTAINER_MODE], [AM_MAINTAINER_MODE]) - -# Check to see how 'make' treats includes. -*- Autoconf -*- - -# Copyright (C) 2001, 2002, 2003, 2005, 2009 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 4 - -# AM_MAKE_INCLUDE() -# ----------------- -# Check to see how make treats includes. -AC_DEFUN([AM_MAKE_INCLUDE], -[am_make=${MAKE-make} -cat > confinc << 'END' -am__doit: - @echo this is the am__doit target -.PHONY: am__doit -END -# If we don't find an include directive, just comment out the code. -AC_MSG_CHECKING([for style of include used by $am_make]) -am__include="#" -am__quote= -_am_result=none -# First try GNU make style include. -echo "include confinc" > confmf -# Ignore all kinds of additional output from `make'. -case `$am_make -s -f confmf 2> /dev/null` in #( -*the\ am__doit\ target*) - am__include=include - am__quote= - _am_result=GNU - ;; -esac -# Now try BSD make style include. -if test "$am__include" = "#"; then - echo '.include "confinc"' > confmf - case `$am_make -s -f confmf 2> /dev/null` in #( - *the\ am__doit\ target*) - am__include=.include - am__quote="\"" - _am_result=BSD - ;; - esac -fi -AC_SUBST([am__include]) -AC_SUBST([am__quote]) -AC_MSG_RESULT([$_am_result]) -rm -f confinc confmf -]) - -# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- - -# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008 -# Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 6 - -# AM_MISSING_PROG(NAME, PROGRAM) -# ------------------------------ -AC_DEFUN([AM_MISSING_PROG], -[AC_REQUIRE([AM_MISSING_HAS_RUN]) -$1=${$1-"${am_missing_run}$2"} -AC_SUBST($1)]) - - -# AM_MISSING_HAS_RUN -# ------------------ -# Define MISSING if not defined so far and test if it supports --run. -# If it does, set am_missing_run to use it, otherwise, to nothing. -AC_DEFUN([AM_MISSING_HAS_RUN], -[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl -AC_REQUIRE_AUX_FILE([missing])dnl -if test x"${MISSING+set}" != xset; then - case $am_aux_dir in - *\ * | *\ *) - MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; - *) - MISSING="\${SHELL} $am_aux_dir/missing" ;; - esac -fi -# Use eval to expand $SHELL -if eval "$MISSING --run true"; then - am_missing_run="$MISSING --run " -else - am_missing_run= - AC_MSG_WARN([`missing' script is too old or missing]) -fi -]) - -# Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# AM_PROG_MKDIR_P -# --------------- -# Check for `mkdir -p'. -AC_DEFUN([AM_PROG_MKDIR_P], -[AC_PREREQ([2.60])dnl -AC_REQUIRE([AC_PROG_MKDIR_P])dnl -dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P, -dnl while keeping a definition of mkdir_p for backward compatibility. -dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile. -dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of -dnl Makefile.ins that do not define MKDIR_P, so we do our own -dnl adjustment using top_builddir (which is defined more often than -dnl MKDIR_P). -AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl -case $mkdir_p in - [[\\/$]]* | ?:[[\\/]]*) ;; - */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; -esac -]) - -# Helper functions for option handling. -*- Autoconf -*- - -# Copyright (C) 2001, 2002, 2003, 2005, 2008 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 4 - -# _AM_MANGLE_OPTION(NAME) -# ----------------------- -AC_DEFUN([_AM_MANGLE_OPTION], -[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) - -# _AM_SET_OPTION(NAME) -# ------------------------------ -# Set option NAME. Presently that only means defining a flag for this option. -AC_DEFUN([_AM_SET_OPTION], -[m4_define(_AM_MANGLE_OPTION([$1]), 1)]) - -# _AM_SET_OPTIONS(OPTIONS) -# ---------------------------------- -# OPTIONS is a space-separated list of Automake options. -AC_DEFUN([_AM_SET_OPTIONS], -[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) - -# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) -# ------------------------------------------- -# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. -AC_DEFUN([_AM_IF_OPTION], -[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) - -# Check to make sure that the build environment is sane. -*- Autoconf -*- - -# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008 -# Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 5 - -# AM_SANITY_CHECK -# --------------- -AC_DEFUN([AM_SANITY_CHECK], -[AC_MSG_CHECKING([whether build environment is sane]) -# Just in case -sleep 1 -echo timestamp > conftest.file -# Reject unsafe characters in $srcdir or the absolute working directory -# name. Accept space and tab only in the latter. -am_lf=' -' -case `pwd` in - *[[\\\"\#\$\&\'\`$am_lf]]*) - AC_MSG_ERROR([unsafe absolute working directory name]);; -esac -case $srcdir in - *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) - AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);; -esac - -# Do `set' in a subshell so we don't clobber the current shell's -# arguments. Must try -L first in case configure is actually a -# symlink; some systems play weird games with the mod time of symlinks -# (eg FreeBSD returns the mod time of the symlink's containing -# directory). -if ( - set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` - if test "$[*]" = "X"; then - # -L didn't work. - set X `ls -t "$srcdir/configure" conftest.file` - fi - rm -f conftest.file - if test "$[*]" != "X $srcdir/configure conftest.file" \ - && test "$[*]" != "X conftest.file $srcdir/configure"; then - - # If neither matched, then we have a broken ls. This can happen - # if, for instance, CONFIG_SHELL is bash and it inherits a - # broken ls alias from the environment. This has actually - # happened. Such a system could not be considered "sane". - AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken -alias in your environment]) - fi - - test "$[2]" = conftest.file - ) -then - # Ok. - : -else - AC_MSG_ERROR([newly created file is older than distributed files! -Check your system clock]) -fi -AC_MSG_RESULT(yes)]) - -# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# AM_PROG_INSTALL_STRIP -# --------------------- -# One issue with vendor `install' (even GNU) is that you can't -# specify the program used to strip binaries. This is especially -# annoying in cross-compiling environments, where the build's strip -# is unlikely to handle the host's binaries. -# Fortunately install-sh will honor a STRIPPROG variable, so we -# always use install-sh in `make install-strip', and initialize -# STRIPPROG with the value of the STRIP variable (set by the user). -AC_DEFUN([AM_PROG_INSTALL_STRIP], -[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl -# Installed binaries are usually stripped using `strip' when the user -# run `make install-strip'. However `strip' might not be the right -# tool to use in cross-compilation environments, therefore Automake -# will honor the `STRIP' environment variable to overrule this program. -dnl Don't test for $cross_compiling = yes, because it might be `maybe'. -if test "$cross_compiling" != no; then - AC_CHECK_TOOL([STRIP], [strip], :) -fi -INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" -AC_SUBST([INSTALL_STRIP_PROGRAM])]) - -# Copyright (C) 2006, 2008 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 2 - -# _AM_SUBST_NOTMAKE(VARIABLE) -# --------------------------- -# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. -# This macro is traced by Automake. -AC_DEFUN([_AM_SUBST_NOTMAKE]) - -# AM_SUBST_NOTMAKE(VARIABLE) -# --------------------------- -# Public sister of _AM_SUBST_NOTMAKE. -AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) - -# Check how to create a tarball. -*- Autoconf -*- - -# Copyright (C) 2004, 2005 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 2 - -# _AM_PROG_TAR(FORMAT) -# -------------------- -# Check how to create a tarball in format FORMAT. -# FORMAT should be one of `v7', `ustar', or `pax'. -# -# Substitute a variable $(am__tar) that is a command -# writing to stdout a FORMAT-tarball containing the directory -# $tardir. -# tardir=directory && $(am__tar) > result.tar -# -# Substitute a variable $(am__untar) that extract such -# a tarball read from stdin. -# $(am__untar) < result.tar -AC_DEFUN([_AM_PROG_TAR], -[# Always define AMTAR for backward compatibility. -AM_MISSING_PROG([AMTAR], [tar]) -m4_if([$1], [v7], - [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'], - [m4_case([$1], [ustar],, [pax],, - [m4_fatal([Unknown tar format])]) -AC_MSG_CHECKING([how to create a $1 tar archive]) -# Loop over all known methods to create a tar archive until one works. -_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' -_am_tools=${am_cv_prog_tar_$1-$_am_tools} -# Do not fold the above two line into one, because Tru64 sh and -# Solaris sh will not grok spaces in the rhs of `-'. -for _am_tool in $_am_tools -do - case $_am_tool in - gnutar) - for _am_tar in tar gnutar gtar; - do - AM_RUN_LOG([$_am_tar --version]) && break - done - am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' - am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' - am__untar="$_am_tar -xf -" - ;; - plaintar) - # Must skip GNU tar: if it does not support --format= it doesn't create - # ustar tarball either. - (tar --version) >/dev/null 2>&1 && continue - am__tar='tar chf - "$$tardir"' - am__tar_='tar chf - "$tardir"' - am__untar='tar xf -' - ;; - pax) - am__tar='pax -L -x $1 -w "$$tardir"' - am__tar_='pax -L -x $1 -w "$tardir"' - am__untar='pax -r' - ;; - cpio) - am__tar='find "$$tardir" -print | cpio -o -H $1 -L' - am__tar_='find "$tardir" -print | cpio -o -H $1 -L' - am__untar='cpio -i -H $1 -d' - ;; - none) - am__tar=false - am__tar_=false - am__untar=false - ;; - esac - - # If the value was cached, stop now. We just wanted to have am__tar - # and am__untar set. - test -n "${am_cv_prog_tar_$1}" && break - - # tar/untar a dummy directory, and stop if the command works - rm -rf conftest.dir - mkdir conftest.dir - echo GrepMe > conftest.dir/file - AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) - rm -rf conftest.dir - if test -s conftest.tar; then - AM_RUN_LOG([$am__untar /dev/null 2>&1 && break - fi -done -rm -rf conftest.dir - -AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) -AC_MSG_RESULT([$am_cv_prog_tar_$1])]) -AC_SUBST([am__tar]) -AC_SUBST([am__untar]) -]) # _AM_PROG_TAR - diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/autom4te.cache/output.0 b/openair3/PMIPv6/freeradius-client-1.1.6/autom4te.cache/output.0 deleted file mode 100644 index a6e784509d..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/autom4te.cache/output.0 +++ /dev/null @@ -1,15351 +0,0 @@ -@%:@! /bin/sh -@%:@ Guess values for system-dependent variables and create Makefiles. -@%:@ Generated by GNU Autoconf 2.65. -@%:@ -@%:@ -@%:@ Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, -@%:@ 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, -@%:@ Inc. -@%:@ -@%:@ -@%:@ This configure script is free software; the Free Software Foundation -@%:@ gives unlimited permission to copy, distribute and modify it. -## -------------------- ## -## M4sh Initialization. ## -## -------------------- ## - -# Be more Bourne compatible -DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : - emulate sh - NULLCMD=: - # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in @%:@( - *posix*) : - set -o posix ;; @%:@( - *) : - ;; -esac -fi - - -as_nl=' -' -export as_nl -# Printing a long string crashes Solaris 7 /usr/bin/printf. -as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo -# Prefer a ksh shell builtin over an external printf program on Solaris, -# but without wasting forks for bash or zsh. -if test -z "$BASH_VERSION$ZSH_VERSION" \ - && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='print -r --' - as_echo_n='print -rn --' -elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='printf %s\n' - as_echo_n='printf %s' -else - if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then - as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' - as_echo_n='/usr/ucb/echo -n' - else - as_echo_body='eval expr "X$1" : "X\\(.*\\)"' - as_echo_n_body='eval - arg=$1; - case $arg in @%:@( - *"$as_nl"*) - expr "X$arg" : "X\\(.*\\)$as_nl"; - arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; - esac; - expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" - ' - export as_echo_n_body - as_echo_n='sh -c $as_echo_n_body as_echo' - fi - export as_echo_body - as_echo='sh -c $as_echo_body as_echo' -fi - -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - PATH_SEPARATOR=: - (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { - (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || - PATH_SEPARATOR=';' - } -fi - - -# IFS -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent editors from complaining about space-tab. -# (If _AS_PATH_WALK were called with IFS unset, it would disable word -# splitting by setting IFS to empty value.) -IFS=" "" $as_nl" - -# Find who we are. Look in the path if we contain no directory separator. -case $0 in @%:@(( - *[\\/]* ) as_myself=$0 ;; - *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break - done -IFS=$as_save_IFS - - ;; -esac -# We did not find ourselves, most probably we were run as `sh COMMAND' -# in which case we are not to be found in the path. -if test "x$as_myself" = x; then - as_myself=$0 -fi -if test ! -f "$as_myself"; then - $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 - exit 1 -fi - -# Unset variables that we do not need and which cause bugs (e.g. in -# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" -# suppresses any "Segmentation fault" message there. '((' could -# trigger a bug in pdksh 5.2.14. -for as_var in BASH_ENV ENV MAIL MAILPATH -do eval test x\${$as_var+set} = xset \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# CDPATH. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -if test "x$CONFIG_SHELL" = x; then - as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : - emulate sh - NULLCMD=: - # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which - # is contrary to our usage. Disable this feature. - alias -g '\${1+\"\$@\"}'='\"\$@\"' - setopt NO_GLOB_SUBST -else - case \`(set -o) 2>/dev/null\` in @%:@( - *posix*) : - set -o posix ;; @%:@( - *) : - ;; -esac -fi -" - as_required="as_fn_return () { (exit \$1); } -as_fn_success () { as_fn_return 0; } -as_fn_failure () { as_fn_return 1; } -as_fn_ret_success () { return 0; } -as_fn_ret_failure () { return 1; } - -exitcode=0 -as_fn_success || { exitcode=1; echo as_fn_success failed.; } -as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } -as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } -as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } -if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : - -else - exitcode=1; echo positional parameters were not saved. -fi -test x\$exitcode = x0 || exit 1" - as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO - as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO - eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && - test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 -test \$(( 1 + 1 )) = 2 || exit 1" - if (eval "$as_required") 2>/dev/null; then : - as_have_required=yes -else - as_have_required=no -fi - if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : - -else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -as_found=false -for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - as_found=: - case $as_dir in @%:@( - /*) - for as_base in sh bash ksh sh5; do - # Try only shells that exist, to save several forks. - as_shell=$as_dir/$as_base - if { test -f "$as_shell" || test -f "$as_shell.exe"; } && - { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : - CONFIG_SHELL=$as_shell as_have_required=yes - if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : - break 2 -fi -fi - done;; - esac - as_found=false -done -$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && - { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : - CONFIG_SHELL=$SHELL as_have_required=yes -fi; } -IFS=$as_save_IFS - - - if test "x$CONFIG_SHELL" != x; then : - # We cannot yet assume a decent shell, so we have to provide a - # neutralization value for shells without unset; and this also - # works around shells that cannot unset nonexistent variables. - BASH_ENV=/dev/null - ENV=/dev/null - (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV - export CONFIG_SHELL - exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} -fi - - if test x$as_have_required = xno; then : - $as_echo "$0: This script requires a shell more modern than all" - $as_echo "$0: the shells that I found on your system." - if test x${ZSH_VERSION+set} = xset ; then - $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" - $as_echo "$0: be upgraded to zsh 4.3.4 or later." - else - $as_echo "$0: Please tell bug-autoconf@gnu.org about your system, -$0: including any error possibly output before this -$0: message. Then install a modern shell, or manually run -$0: the script under such a shell if you do have one." - fi - exit 1 -fi -fi -fi -SHELL=${CONFIG_SHELL-/bin/sh} -export SHELL -# Unset more variables known to interfere with behavior of common tools. -CLICOLOR_FORCE= GREP_OPTIONS= -unset CLICOLOR_FORCE GREP_OPTIONS - -## --------------------- ## -## M4sh Shell Functions. ## -## --------------------- ## -@%:@ as_fn_unset VAR -@%:@ --------------- -@%:@ Portably unset VAR. -as_fn_unset () -{ - { eval $1=; unset $1;} -} -as_unset=as_fn_unset - -@%:@ as_fn_set_status STATUS -@%:@ ----------------------- -@%:@ Set @S|@? to STATUS, without forking. -as_fn_set_status () -{ - return $1 -} @%:@ as_fn_set_status - -@%:@ as_fn_exit STATUS -@%:@ ----------------- -@%:@ Exit the shell with STATUS, even in a "trap 0" or "set -e" context. -as_fn_exit () -{ - set +e - as_fn_set_status $1 - exit $1 -} @%:@ as_fn_exit - -@%:@ as_fn_mkdir_p -@%:@ ------------- -@%:@ Create "@S|@as_dir" as a directory, including parents if necessary. -as_fn_mkdir_p () -{ - - case $as_dir in #( - -*) as_dir=./$as_dir;; - esac - test -d "$as_dir" || eval $as_mkdir_p || { - as_dirs= - while :; do - case $as_dir in #( - *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( - *) as_qdir=$as_dir;; - esac - as_dirs="'$as_qdir' $as_dirs" - as_dir=`$as_dirname -- "$as_dir" || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - test -d "$as_dir" && break - done - test -z "$as_dirs" || eval "mkdir $as_dirs" - } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir" - - -} @%:@ as_fn_mkdir_p -@%:@ as_fn_append VAR VALUE -@%:@ ---------------------- -@%:@ Append the text in VALUE to the end of the definition contained in VAR. Take -@%:@ advantage of any shell optimizations that allow amortized linear growth over -@%:@ repeated appends, instead of the typical quadratic growth present in naive -@%:@ implementations. -if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : - eval 'as_fn_append () - { - eval $1+=\$2 - }' -else - as_fn_append () - { - eval $1=\$$1\$2 - } -fi # as_fn_append - -@%:@ as_fn_arith ARG... -@%:@ ------------------ -@%:@ Perform arithmetic evaluation on the ARGs, and store the result in the -@%:@ global @S|@as_val. Take advantage of shells that can avoid forks. The arguments -@%:@ must be portable across @S|@(()) and expr. -if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : - eval 'as_fn_arith () - { - as_val=$(( $* )) - }' -else - as_fn_arith () - { - as_val=`expr "$@" || test $? -eq 1` - } -fi # as_fn_arith - - -@%:@ as_fn_error ERROR [LINENO LOG_FD] -@%:@ --------------------------------- -@%:@ Output "`basename @S|@0`: error: ERROR" to stderr. If LINENO and LOG_FD are -@%:@ provided, also output the error to LOG_FD, referencing LINENO. Then exit the -@%:@ script with status @S|@?, using 1 if that was 0. -as_fn_error () -{ - as_status=$?; test $as_status -eq 0 && as_status=1 - if test "$3"; then - as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3 - fi - $as_echo "$as_me: error: $1" >&2 - as_fn_exit $as_status -} @%:@ as_fn_error - -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi - -if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then - as_basename=basename -else - as_basename=false -fi - -if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then - as_dirname=dirname -else - as_dirname=false -fi - -as_me=`$as_basename -- "$0" || -$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X/"$0" | - sed '/^.*\/\([^/][^/]*\)\/*$/{ - s//\1/ - q - } - /^X\/\(\/\/\)$/{ - s//\1/ - q - } - /^X\/\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - -# Avoid depending upon Character Ranges. -as_cr_letters='abcdefghijklmnopqrstuvwxyz' -as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' -as_cr_Letters=$as_cr_letters$as_cr_LETTERS -as_cr_digits='0123456789' -as_cr_alnum=$as_cr_Letters$as_cr_digits - - - as_lineno_1=$LINENO as_lineno_1a=$LINENO - as_lineno_2=$LINENO as_lineno_2a=$LINENO - eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && - test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { - # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) - sed -n ' - p - /[$]LINENO/= - ' <$as_myself | - sed ' - s/[$]LINENO.*/&-/ - t lineno - b - :lineno - N - :loop - s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ - t loop - s/-\n.*// - ' >$as_me.lineno && - chmod +x "$as_me.lineno" || - { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } - - # Don't try to exec as it changes $[0], causing all sort of problems - # (the dirname of $[0] is not the place where we might find the - # original and so on. Autoconf is especially sensitive to this). - . "./$as_me.lineno" - # Exit status is that of the last command. - exit -} - -ECHO_C= ECHO_N= ECHO_T= -case `echo -n x` in @%:@((((( --n*) - case `echo 'xy\c'` in - *c*) ECHO_T=' ';; # ECHO_T is single tab character. - xy) ECHO_C='\c';; - *) echo `echo ksh88 bug on AIX 6.1` > /dev/null - ECHO_T=' ';; - esac;; -*) - ECHO_N='-n';; -esac - -rm -f conf$$ conf$$.exe conf$$.file -if test -d conf$$.dir; then - rm -f conf$$.dir/conf$$.file -else - rm -f conf$$.dir - mkdir conf$$.dir 2>/dev/null -fi -if (echo >conf$$.file) 2>/dev/null; then - if ln -s conf$$.file conf$$ 2>/dev/null; then - as_ln_s='ln -s' - # ... but there are two gotchas: - # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -p'. - ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || - as_ln_s='cp -p' - elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln - else - as_ln_s='cp -p' - fi -else - as_ln_s='cp -p' -fi -rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file -rmdir conf$$.dir 2>/dev/null - -if mkdir -p . 2>/dev/null; then - as_mkdir_p='mkdir -p "$as_dir"' -else - test -d ./-p && rmdir ./-p - as_mkdir_p=false -fi - -if test -x / >/dev/null 2>&1; then - as_test_x='test -x' -else - if ls -dL / >/dev/null 2>&1; then - as_ls_L_option=L - else - as_ls_L_option= - fi - as_test_x=' - eval sh -c '\'' - if test -d "$1"; then - test -d "$1/."; - else - case $1 in @%:@( - -*)set "./$1";; - esac; - case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in @%:@(( - ???[sx]*):;;*)false;;esac;fi - '\'' sh - ' -fi -as_executable_p=$as_test_x - -# Sed expression to map a string onto a valid CPP name. -as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" - -# Sed expression to map a string onto a valid variable name. -as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" - - - -# Check that we are running under the correct shell. -SHELL=${CONFIG_SHELL-/bin/sh} - -case X$lt_ECHO in -X*--fallback-echo) - # Remove one level of quotation (which was required for Make). - ECHO=`echo "$lt_ECHO" | sed 's,\\\\\$\\$0,'$0','` - ;; -esac - -ECHO=${lt_ECHO-echo} -if test "X$1" = X--no-reexec; then - # Discard the --no-reexec flag, and continue. - shift -elif test "X$1" = X--fallback-echo; then - # Avoid inline document here, it may be left over - : -elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' ; then - # Yippee, $ECHO works! - : -else - # Restart under the correct shell. - exec $SHELL "$0" --no-reexec ${1+"$@"} -fi - -if test "X$1" = X--fallback-echo; then - # used as fallback echo - shift - cat <<_LT_EOF -$* -_LT_EOF - exit 0 -fi - -# The HP-UX ksh and POSIX shell print the target directory to stdout -# if CDPATH is set. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -if test -z "$lt_ECHO"; then - if test "X${echo_test_string+set}" != Xset; then - # find a string as large as possible, as long as the shell can cope with it - for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do - # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ... - if { echo_test_string=`eval $cmd`; } 2>/dev/null && - { test "X$echo_test_string" = "X$echo_test_string"; } 2>/dev/null - then - break - fi - done - fi - - if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' && - echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - : - else - # The Solaris, AIX, and Digital Unix default echo programs unquote - # backslashes. This makes it impossible to quote backslashes using - # echo "$something" | sed 's/\\/\\\\/g' - # - # So, first we look for a working echo in the user's PATH. - - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for dir in $PATH /usr/ucb; do - IFS="$lt_save_ifs" - if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && - test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && - echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - ECHO="$dir/echo" - break - fi - done - IFS="$lt_save_ifs" - - if test "X$ECHO" = Xecho; then - # We didn't find a better echo, so look for alternatives. - if test "X`{ print -r '\t'; } 2>/dev/null`" = 'X\t' && - echo_testing_string=`{ print -r "$echo_test_string"; } 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - # This shell has a builtin print -r that does the trick. - ECHO='print -r' - elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } && - test "X$CONFIG_SHELL" != X/bin/ksh; then - # If we have ksh, try running configure again with it. - ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} - export ORIGINAL_CONFIG_SHELL - CONFIG_SHELL=/bin/ksh - export CONFIG_SHELL - exec $CONFIG_SHELL "$0" --no-reexec ${1+"$@"} - else - # Try using printf. - ECHO='printf %s\n' - if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' && - echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - # Cool, printf works - : - elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && - test "X$echo_testing_string" = 'X\t' && - echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL - export CONFIG_SHELL - SHELL="$CONFIG_SHELL" - export SHELL - ECHO="$CONFIG_SHELL $0 --fallback-echo" - elif echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && - test "X$echo_testing_string" = 'X\t' && - echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - ECHO="$CONFIG_SHELL $0 --fallback-echo" - else - # maybe with a smaller string... - prev=: - - for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do - if { test "X$echo_test_string" = "X`eval $cmd`"; } 2>/dev/null - then - break - fi - prev="$cmd" - done - - if test "$prev" != 'sed 50q "$0"'; then - echo_test_string=`eval $prev` - export echo_test_string - exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "$0" ${1+"$@"} - else - # Oops. We lost completely, so just stick with echo. - ECHO=echo - fi - fi - fi - fi - fi -fi - -# Copy echo and quote the copy suitably for passing to libtool from -# the Makefile, instead of quoting the original, which is used later. -lt_ECHO=$ECHO -if test "X$lt_ECHO" = "X$CONFIG_SHELL $0 --fallback-echo"; then - lt_ECHO="$CONFIG_SHELL \\\$\$0 --fallback-echo" -fi - - - - -test -n "$DJDIR" || exec 7<&0 &1 - -# Name of the host. -# hostname on some systems (SVR3.2, Linux) returns a bogus exit status, -# so uname gets run too. -ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` - -# -# Initializations. -# -ac_default_prefix=/usr/local -ac_clean_files= -ac_config_libobj_dir=. -LIB@&t@OBJS= -cross_compiling=no -subdirs= -MFLAGS= -MAKEFLAGS= - -# Identity of this package. -PACKAGE_NAME= -PACKAGE_TARNAME= -PACKAGE_VERSION= -PACKAGE_STRING= -PACKAGE_BUGREPORT= -PACKAGE_URL= - -ac_unique_file="src/radlogin.c" -# Factoring default headers for most tests. -ac_includes_default="\ -#include -#ifdef HAVE_SYS_TYPES_H -# include -#endif -#ifdef HAVE_SYS_STAT_H -# include -#endif -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif -#ifdef HAVE_STRING_H -# if !defined STDC_HEADERS && defined HAVE_MEMORY_H -# include -# endif -# include -#endif -#ifdef HAVE_STRINGS_H -# include -#endif -#ifdef HAVE_INTTYPES_H -# include -#endif -#ifdef HAVE_STDINT_H -# include -#endif -#ifdef HAVE_UNISTD_H -# include -#endif" - -ac_subst_vars='am__EXEEXT_FALSE -am__EXEEXT_TRUE -LTLIBOBJS -RC_LOG_FACILITY -RC_SECURE_PATH -ALLOCA -LIB@&t@OBJS -CPP -OTOOL64 -OTOOL -LIPO -NMEDIT -DSYMUTIL -lt_ECHO -RANLIB -AR -OBJDUMP -LN_S -NM -ac_ct_DUMPBIN -DUMPBIN -LD -FGREP -EGREP -GREP -SED -am__fastdepCC_FALSE -am__fastdepCC_TRUE -CCDEPMODE -AMDEPBACKSLASH -AMDEP_FALSE -AMDEP_TRUE -am__quote -am__include -DEPDIR -OBJEXT -EXEEXT -ac_ct_CC -CPPFLAGS -LDFLAGS -CFLAGS -CC -LIBTOOL -pkgsysconfdir -LIBVERSION -am__untar -am__tar -AMTAR -am__leading_dot -SET_MAKE -AWK -mkdir_p -MKDIR_P -INSTALL_STRIP_PROGRAM -STRIP -install_sh -MAKEINFO -AUTOHEADER -AUTOMAKE -AUTOCONF -ACLOCAL -VERSION -PACKAGE -CYGPATH_W -am__isrc -INSTALL_DATA -INSTALL_SCRIPT -INSTALL_PROGRAM -target_os -target_vendor -target_cpu -target -host_os -host_vendor -host_cpu -host -build_os -build_vendor -build_cpu -build -MAINT -MAINTAINER_MODE_FALSE -MAINTAINER_MODE_TRUE -target_alias -host_alias -build_alias -LIBS -ECHO_T -ECHO_N -ECHO_C -DEFS -mandir -localedir -libdir -psdir -pdfdir -dvidir -htmldir -infodir -docdir -oldincludedir -includedir -localstatedir -sharedstatedir -sysconfdir -datadir -datarootdir -libexecdir -sbindir -bindir -program_transform_name -prefix -exec_prefix -PACKAGE_URL -PACKAGE_BUGREPORT -PACKAGE_STRING -PACKAGE_VERSION -PACKAGE_TARNAME -PACKAGE_NAME -PATH_SEPARATOR -SHELL' -ac_subst_files='' -ac_user_opts=' -enable_option_checking -enable_maintainer_mode -enable_shared -enable_static -with_pic -enable_fast_install -enable_dependency_tracking -with_gnu_ld -enable_libtool_lock -enable_shadow -with_secure_path -with_facility -enable_radius_116 -enable_scp -' - ac_precious_vars='build_alias -host_alias -target_alias -CC -CFLAGS -LDFLAGS -LIBS -CPPFLAGS -CPP' - - -# Initialize some variables set by options. -ac_init_help= -ac_init_version=false -ac_unrecognized_opts= -ac_unrecognized_sep= -# The variables have the same names as the options, with -# dashes changed to underlines. -cache_file=/dev/null -exec_prefix=NONE -no_create= -no_recursion= -prefix=NONE -program_prefix=NONE -program_suffix=NONE -program_transform_name=s,x,x, -silent= -site= -srcdir= -verbose= -x_includes=NONE -x_libraries=NONE - -# Installation directory options. -# These are left unexpanded so users can "make install exec_prefix=/foo" -# and all the variables that are supposed to be based on exec_prefix -# by default will actually change. -# Use braces instead of parens because sh, perl, etc. also accept them. -# (The list follows the same order as the GNU Coding Standards.) -bindir='${exec_prefix}/bin' -sbindir='${exec_prefix}/sbin' -libexecdir='${exec_prefix}/libexec' -datarootdir='${prefix}/share' -datadir='${datarootdir}' -sysconfdir='${prefix}/etc' -sharedstatedir='${prefix}/com' -localstatedir='${prefix}/var' -includedir='${prefix}/include' -oldincludedir='/usr/include' -docdir='${datarootdir}/doc/${PACKAGE}' -infodir='${datarootdir}/info' -htmldir='${docdir}' -dvidir='${docdir}' -pdfdir='${docdir}' -psdir='${docdir}' -libdir='${exec_prefix}/lib' -localedir='${datarootdir}/locale' -mandir='${datarootdir}/man' - -ac_prev= -ac_dashdash= -for ac_option -do - # If the previous option needs an argument, assign it. - if test -n "$ac_prev"; then - eval $ac_prev=\$ac_option - ac_prev= - continue - fi - - case $ac_option in - *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; - *) ac_optarg=yes ;; - esac - - # Accept the important Cygnus configure options, so we can diagnose typos. - - case $ac_dashdash$ac_option in - --) - ac_dashdash=yes ;; - - -bindir | --bindir | --bindi | --bind | --bin | --bi) - ac_prev=bindir ;; - -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) - bindir=$ac_optarg ;; - - -build | --build | --buil | --bui | --bu) - ac_prev=build_alias ;; - -build=* | --build=* | --buil=* | --bui=* | --bu=*) - build_alias=$ac_optarg ;; - - -cache-file | --cache-file | --cache-fil | --cache-fi \ - | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) - ac_prev=cache_file ;; - -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ - | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) - cache_file=$ac_optarg ;; - - --config-cache | -C) - cache_file=config.cache ;; - - -datadir | --datadir | --datadi | --datad) - ac_prev=datadir ;; - -datadir=* | --datadir=* | --datadi=* | --datad=*) - datadir=$ac_optarg ;; - - -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ - | --dataroo | --dataro | --datar) - ac_prev=datarootdir ;; - -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ - | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) - datarootdir=$ac_optarg ;; - - -disable-* | --disable-*) - ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error "invalid feature name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"enable_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval enable_$ac_useropt=no ;; - - -docdir | --docdir | --docdi | --doc | --do) - ac_prev=docdir ;; - -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) - docdir=$ac_optarg ;; - - -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) - ac_prev=dvidir ;; - -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) - dvidir=$ac_optarg ;; - - -enable-* | --enable-*) - ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error "invalid feature name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"enable_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval enable_$ac_useropt=\$ac_optarg ;; - - -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ - | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ - | --exec | --exe | --ex) - ac_prev=exec_prefix ;; - -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ - | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ - | --exec=* | --exe=* | --ex=*) - exec_prefix=$ac_optarg ;; - - -gas | --gas | --ga | --g) - # Obsolete; use --with-gas. - with_gas=yes ;; - - -help | --help | --hel | --he | -h) - ac_init_help=long ;; - -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) - ac_init_help=recursive ;; - -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) - ac_init_help=short ;; - - -host | --host | --hos | --ho) - ac_prev=host_alias ;; - -host=* | --host=* | --hos=* | --ho=*) - host_alias=$ac_optarg ;; - - -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) - ac_prev=htmldir ;; - -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ - | --ht=*) - htmldir=$ac_optarg ;; - - -includedir | --includedir | --includedi | --included | --include \ - | --includ | --inclu | --incl | --inc) - ac_prev=includedir ;; - -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ - | --includ=* | --inclu=* | --incl=* | --inc=*) - includedir=$ac_optarg ;; - - -infodir | --infodir | --infodi | --infod | --info | --inf) - ac_prev=infodir ;; - -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) - infodir=$ac_optarg ;; - - -libdir | --libdir | --libdi | --libd) - ac_prev=libdir ;; - -libdir=* | --libdir=* | --libdi=* | --libd=*) - libdir=$ac_optarg ;; - - -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ - | --libexe | --libex | --libe) - ac_prev=libexecdir ;; - -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ - | --libexe=* | --libex=* | --libe=*) - libexecdir=$ac_optarg ;; - - -localedir | --localedir | --localedi | --localed | --locale) - ac_prev=localedir ;; - -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) - localedir=$ac_optarg ;; - - -localstatedir | --localstatedir | --localstatedi | --localstated \ - | --localstate | --localstat | --localsta | --localst | --locals) - ac_prev=localstatedir ;; - -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ - | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) - localstatedir=$ac_optarg ;; - - -mandir | --mandir | --mandi | --mand | --man | --ma | --m) - ac_prev=mandir ;; - -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) - mandir=$ac_optarg ;; - - -nfp | --nfp | --nf) - # Obsolete; use --without-fp. - with_fp=no ;; - - -no-create | --no-create | --no-creat | --no-crea | --no-cre \ - | --no-cr | --no-c | -n) - no_create=yes ;; - - -no-recursion | --no-recursion | --no-recursio | --no-recursi \ - | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) - no_recursion=yes ;; - - -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ - | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ - | --oldin | --oldi | --old | --ol | --o) - ac_prev=oldincludedir ;; - -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ - | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ - | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) - oldincludedir=$ac_optarg ;; - - -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) - ac_prev=prefix ;; - -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) - prefix=$ac_optarg ;; - - -program-prefix | --program-prefix | --program-prefi | --program-pref \ - | --program-pre | --program-pr | --program-p) - ac_prev=program_prefix ;; - -program-prefix=* | --program-prefix=* | --program-prefi=* \ - | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) - program_prefix=$ac_optarg ;; - - -program-suffix | --program-suffix | --program-suffi | --program-suff \ - | --program-suf | --program-su | --program-s) - ac_prev=program_suffix ;; - -program-suffix=* | --program-suffix=* | --program-suffi=* \ - | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) - program_suffix=$ac_optarg ;; - - -program-transform-name | --program-transform-name \ - | --program-transform-nam | --program-transform-na \ - | --program-transform-n | --program-transform- \ - | --program-transform | --program-transfor \ - | --program-transfo | --program-transf \ - | --program-trans | --program-tran \ - | --progr-tra | --program-tr | --program-t) - ac_prev=program_transform_name ;; - -program-transform-name=* | --program-transform-name=* \ - | --program-transform-nam=* | --program-transform-na=* \ - | --program-transform-n=* | --program-transform-=* \ - | --program-transform=* | --program-transfor=* \ - | --program-transfo=* | --program-transf=* \ - | --program-trans=* | --program-tran=* \ - | --progr-tra=* | --program-tr=* | --program-t=*) - program_transform_name=$ac_optarg ;; - - -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) - ac_prev=pdfdir ;; - -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) - pdfdir=$ac_optarg ;; - - -psdir | --psdir | --psdi | --psd | --ps) - ac_prev=psdir ;; - -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) - psdir=$ac_optarg ;; - - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil) - silent=yes ;; - - -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) - ac_prev=sbindir ;; - -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ - | --sbi=* | --sb=*) - sbindir=$ac_optarg ;; - - -sharedstatedir | --sharedstatedir | --sharedstatedi \ - | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ - | --sharedst | --shareds | --shared | --share | --shar \ - | --sha | --sh) - ac_prev=sharedstatedir ;; - -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ - | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ - | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ - | --sha=* | --sh=*) - sharedstatedir=$ac_optarg ;; - - -site | --site | --sit) - ac_prev=site ;; - -site=* | --site=* | --sit=*) - site=$ac_optarg ;; - - -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) - ac_prev=srcdir ;; - -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) - srcdir=$ac_optarg ;; - - -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ - | --syscon | --sysco | --sysc | --sys | --sy) - ac_prev=sysconfdir ;; - -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ - | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) - sysconfdir=$ac_optarg ;; - - -target | --target | --targe | --targ | --tar | --ta | --t) - ac_prev=target_alias ;; - -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) - target_alias=$ac_optarg ;; - - -v | -verbose | --verbose | --verbos | --verbo | --verb) - verbose=yes ;; - - -version | --version | --versio | --versi | --vers | -V) - ac_init_version=: ;; - - -with-* | --with-*) - ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error "invalid package name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"with_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval with_$ac_useropt=\$ac_optarg ;; - - -without-* | --without-*) - ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error "invalid package name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"with_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval with_$ac_useropt=no ;; - - --x) - # Obsolete; use --with-x. - with_x=yes ;; - - -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ - | --x-incl | --x-inc | --x-in | --x-i) - ac_prev=x_includes ;; - -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ - | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) - x_includes=$ac_optarg ;; - - -x-libraries | --x-libraries | --x-librarie | --x-librari \ - | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) - ac_prev=x_libraries ;; - -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ - | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) - x_libraries=$ac_optarg ;; - - -*) as_fn_error "unrecognized option: \`$ac_option' -Try \`$0 --help' for more information." - ;; - - *=*) - ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` - # Reject names that are not valid shell variable names. - case $ac_envvar in #( - '' | [0-9]* | *[!_$as_cr_alnum]* ) - as_fn_error "invalid variable name: \`$ac_envvar'" ;; - esac - eval $ac_envvar=\$ac_optarg - export $ac_envvar ;; - - *) - # FIXME: should be removed in autoconf 3.0. - $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 - expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && - $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 - : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} - ;; - - esac -done - -if test -n "$ac_prev"; then - ac_option=--`echo $ac_prev | sed 's/_/-/g'` - as_fn_error "missing argument to $ac_option" -fi - -if test -n "$ac_unrecognized_opts"; then - case $enable_option_checking in - no) ;; - fatal) as_fn_error "unrecognized options: $ac_unrecognized_opts" ;; - *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; - esac -fi - -# Check all directory arguments for consistency. -for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ - datadir sysconfdir sharedstatedir localstatedir includedir \ - oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ - libdir localedir mandir -do - eval ac_val=\$$ac_var - # Remove trailing slashes. - case $ac_val in - */ ) - ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` - eval $ac_var=\$ac_val;; - esac - # Be sure to have absolute directory names. - case $ac_val in - [\\/$]* | ?:[\\/]* ) continue;; - NONE | '' ) case $ac_var in *prefix ) continue;; esac;; - esac - as_fn_error "expected an absolute directory name for --$ac_var: $ac_val" -done - -# There might be people who depend on the old broken behavior: `$host' -# used to hold the argument of --host etc. -# FIXME: To remove some day. -build=$build_alias -host=$host_alias -target=$target_alias - -# FIXME: To remove some day. -if test "x$host_alias" != x; then - if test "x$build_alias" = x; then - cross_compiling=maybe - $as_echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. - If a cross compiler is detected then cross compile mode will be used." >&2 - elif test "x$build_alias" != "x$host_alias"; then - cross_compiling=yes - fi -fi - -ac_tool_prefix= -test -n "$host_alias" && ac_tool_prefix=$host_alias- - -test "$silent" = yes && exec 6>/dev/null - - -ac_pwd=`pwd` && test -n "$ac_pwd" && -ac_ls_di=`ls -di .` && -ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || - as_fn_error "working directory cannot be determined" -test "X$ac_ls_di" = "X$ac_pwd_ls_di" || - as_fn_error "pwd does not report name of working directory" - - -# Find the source files, if location was not specified. -if test -z "$srcdir"; then - ac_srcdir_defaulted=yes - # Try the directory containing this script, then the parent directory. - ac_confdir=`$as_dirname -- "$as_myself" || -$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_myself" : 'X\(//\)[^/]' \| \ - X"$as_myself" : 'X\(//\)$' \| \ - X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_myself" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - srcdir=$ac_confdir - if test ! -r "$srcdir/$ac_unique_file"; then - srcdir=.. - fi -else - ac_srcdir_defaulted=no -fi -if test ! -r "$srcdir/$ac_unique_file"; then - test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." - as_fn_error "cannot find sources ($ac_unique_file) in $srcdir" -fi -ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" -ac_abs_confdir=`( - cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error "$ac_msg" - pwd)` -# When building in place, set srcdir=. -if test "$ac_abs_confdir" = "$ac_pwd"; then - srcdir=. -fi -# Remove unnecessary trailing slashes from srcdir. -# Double slashes in file names in object file debugging info -# mess up M-x gdb in Emacs. -case $srcdir in -*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; -esac -for ac_var in $ac_precious_vars; do - eval ac_env_${ac_var}_set=\${${ac_var}+set} - eval ac_env_${ac_var}_value=\$${ac_var} - eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} - eval ac_cv_env_${ac_var}_value=\$${ac_var} -done - -# -# Report the --help message. -# -if test "$ac_init_help" = "long"; then - # Omit some internal or obsolete options to make the list less imposing. - # This message is too long to be a string in the A/UX 3.1 sh. - cat <<_ACEOF -\`configure' configures this package to adapt to many kinds of systems. - -Usage: $0 [OPTION]... [VAR=VALUE]... - -To assign environment variables (e.g., CC, CFLAGS...), specify them as -VAR=VALUE. See below for descriptions of some of the useful variables. - -Defaults for the options are specified in brackets. - -Configuration: - -h, --help display this help and exit - --help=short display options specific to this package - --help=recursive display the short help of all the included packages - -V, --version display version information and exit - -q, --quiet, --silent do not print \`checking...' messages - --cache-file=FILE cache test results in FILE [disabled] - -C, --config-cache alias for \`--cache-file=config.cache' - -n, --no-create do not create output files - --srcdir=DIR find the sources in DIR [configure dir or \`..'] - -Installation directories: - --prefix=PREFIX install architecture-independent files in PREFIX - @<:@@S|@ac_default_prefix@:>@ - --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX - @<:@PREFIX@:>@ - -By default, \`make install' will install all the files in -\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify -an installation prefix other than \`$ac_default_prefix' using \`--prefix', -for instance \`--prefix=\$HOME'. - -For better control, use the options below. - -Fine tuning of the installation directories: - --bindir=DIR user executables [EPREFIX/bin] - --sbindir=DIR system admin executables [EPREFIX/sbin] - --libexecdir=DIR program executables [EPREFIX/libexec] - --sysconfdir=DIR read-only single-machine data [PREFIX/etc] - --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] - --localstatedir=DIR modifiable single-machine data [PREFIX/var] - --libdir=DIR object code libraries [EPREFIX/lib] - --includedir=DIR C header files [PREFIX/include] - --oldincludedir=DIR C header files for non-gcc [/usr/include] - --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] - --datadir=DIR read-only architecture-independent data [DATAROOTDIR] - --infodir=DIR info documentation [DATAROOTDIR/info] - --localedir=DIR locale-dependent data [DATAROOTDIR/locale] - --mandir=DIR man documentation [DATAROOTDIR/man] - --docdir=DIR documentation root @<:@DATAROOTDIR/doc/PACKAGE@:>@ - --htmldir=DIR html documentation [DOCDIR] - --dvidir=DIR dvi documentation [DOCDIR] - --pdfdir=DIR pdf documentation [DOCDIR] - --psdir=DIR ps documentation [DOCDIR] -_ACEOF - - cat <<\_ACEOF - -Program names: - --program-prefix=PREFIX prepend PREFIX to installed program names - --program-suffix=SUFFIX append SUFFIX to installed program names - --program-transform-name=PROGRAM run sed PROGRAM on installed program names - -System types: - --build=BUILD configure for building on BUILD [guessed] - --host=HOST cross-compile to build programs to run on HOST [BUILD] - --target=TARGET configure for building compilers for TARGET [HOST] -_ACEOF -fi - -if test -n "$ac_init_help"; then - - cat <<\_ACEOF - -Optional Features: - --disable-option-checking ignore unrecognized --enable/--with options - --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) - --enable-FEATURE[=ARG] include FEATURE [ARG=yes] - --enable-maintainer-mode enable make rules and dependencies not useful - (and sometimes confusing) to the casual installer - --enable-shared@<:@=PKGS@:>@ build shared libraries @<:@default=yes@:>@ - --enable-static@<:@=PKGS@:>@ build static libraries @<:@default=yes@:>@ - --enable-fast-install@<:@=PKGS@:>@ - optimize for fast installation @<:@default=yes@:>@ - --disable-dependency-tracking speeds up one-time build - --enable-dependency-tracking do not reject slow dependency extractors - --disable-libtool-lock avoid locking (might break parallel builds) - --enable-shadow Enable shadow password support - --enable-radius-116 Include support for Livingston's RADIUS server 1.16 - --enable-scp Add service type hints derived from username prefix - -Optional Packages: - --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] - --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) - --with-pic try to use only PIC/non-PIC objects @<:@default=use - both@:>@ - --with-gnu-ld assume the C compiler uses GNU ld @<:@default=no@:>@ - --with-secure-path PATH setting for exec'ed programs - --with-facility Syslog facility to use - -Some influential environment variables: - CC C compiler command - CFLAGS C compiler flags - LDFLAGS linker flags, e.g. -L if you have libraries in a - nonstandard directory - LIBS libraries to pass to the linker, e.g. -l - CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if - you have headers in a nonstandard directory - CPP C preprocessor - -Use these variables to override the choices made by `configure' or to help -it to find libraries and programs with nonstandard names/locations. - -Report bugs to the package provider. -_ACEOF -ac_status=$? -fi - -if test "$ac_init_help" = "recursive"; then - # If there are subdirs, report their specific --help. - for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue - test -d "$ac_dir" || - { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || - continue - ac_builddir=. - -case "$ac_dir" in -.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; -*) - ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` - # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` - case $ac_top_builddir_sub in - "") ac_top_builddir_sub=. ac_top_build_prefix= ;; - *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; - esac ;; -esac -ac_abs_top_builddir=$ac_pwd -ac_abs_builddir=$ac_pwd$ac_dir_suffix -# for backward compatibility: -ac_top_builddir=$ac_top_build_prefix - -case $srcdir in - .) # We are building in place. - ac_srcdir=. - ac_top_srcdir=$ac_top_builddir_sub - ac_abs_top_srcdir=$ac_pwd ;; - [\\/]* | ?:[\\/]* ) # Absolute name. - ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir - ac_abs_top_srcdir=$srcdir ;; - *) # Relative name. - ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_build_prefix$srcdir - ac_abs_top_srcdir=$ac_pwd/$srcdir ;; -esac -ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix - - cd "$ac_dir" || { ac_status=$?; continue; } - # Check for guested configure. - if test -f "$ac_srcdir/configure.gnu"; then - echo && - $SHELL "$ac_srcdir/configure.gnu" --help=recursive - elif test -f "$ac_srcdir/configure"; then - echo && - $SHELL "$ac_srcdir/configure" --help=recursive - else - $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 - fi || ac_status=$? - cd "$ac_pwd" || { ac_status=$?; break; } - done -fi - -test -n "$ac_init_help" && exit $ac_status -if $ac_init_version; then - cat <<\_ACEOF -configure -generated by GNU Autoconf 2.65 - -Copyright (C) 2009 Free Software Foundation, Inc. -This configure script is free software; the Free Software Foundation -gives unlimited permission to copy, distribute and modify it. -_ACEOF - exit -fi - -## ------------------------ ## -## Autoconf initialization. ## -## ------------------------ ## - -@%:@ ac_fn_c_try_compile LINENO -@%:@ -------------------------- -@%:@ Try to compile conftest.@S|@ac_ext, and return whether this succeeded. -ac_fn_c_try_compile () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext - if { { ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compile") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - as_fn_set_status $ac_retval - -} @%:@ ac_fn_c_try_compile - -@%:@ ac_fn_c_try_link LINENO -@%:@ ----------------------- -@%:@ Try to link conftest.@S|@ac_ext, and return whether this succeeded. -ac_fn_c_try_link () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext conftest$ac_exeext - if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && { - test "$cross_compiling" = yes || - $as_test_x conftest$ac_exeext - }; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information - # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would - # interfere with the next link command; also delete a directory that is - # left behind by Apple's compiler. We do this before executing the actions. - rm -rf conftest.dSYM conftest_ipa8_conftest.oo - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - as_fn_set_status $ac_retval - -} @%:@ ac_fn_c_try_link - -@%:@ ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES -@%:@ ------------------------------------------------------- -@%:@ Tests whether HEADER exists and can be compiled using the include files in -@%:@ INCLUDES, setting the cache variable VAR accordingly. -ac_fn_c_check_header_compile () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -@%:@include <$2> -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - eval "$3=yes" -else - eval "$3=no" -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - -} @%:@ ac_fn_c_check_header_compile - -@%:@ ac_fn_c_try_cpp LINENO -@%:@ ---------------------- -@%:@ Try to preprocess conftest.@S|@ac_ext, and return whether this succeeded. -ac_fn_c_try_cpp () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { { ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - as_fn_set_status $ac_retval - -} @%:@ ac_fn_c_try_cpp - -@%:@ ac_fn_c_try_run LINENO -@%:@ ---------------------- -@%:@ Try to link conftest.@S|@ac_ext, and return whether this succeeded. Assumes -@%:@ that executables *can* be run. -ac_fn_c_try_run () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' - { { case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then : - ac_retval=0 -else - $as_echo "$as_me: program exited with status $ac_status" >&5 - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=$ac_status -fi - rm -rf conftest.dSYM conftest_ipa8_conftest.oo - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - as_fn_set_status $ac_retval - -} @%:@ ac_fn_c_try_run - -@%:@ ac_fn_c_check_func LINENO FUNC VAR -@%:@ ---------------------------------- -@%:@ Tests whether FUNC exists, setting the cache variable VAR accordingly -ac_fn_c_check_func () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -/* Define $2 to an innocuous variant, in case declares $2. - For example, HP-UX 11i declares gettimeofday. */ -#define $2 innocuous_$2 - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $2 (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef $2 - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char $2 (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined __stub_$2 || defined __stub___$2 -choke me -#endif - -int -main () -{ -return $2 (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$3=yes" -else - eval "$3=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - -} @%:@ ac_fn_c_check_func - -@%:@ ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES -@%:@ ------------------------------------------------------- -@%:@ Tests whether HEADER exists, giving a warning if it cannot be compiled using -@%:@ the include files in INCLUDES and setting the cache variable VAR -@%:@ accordingly. -ac_fn_c_check_header_mongrel () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : - $as_echo_n "(cached) " >&6 -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -else - # Is the header compilable? -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 -$as_echo_n "checking $2 usability... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -@%:@include <$2> -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_header_compiler=yes -else - ac_header_compiler=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 -$as_echo "$ac_header_compiler" >&6; } - -# Is the header present? -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 -$as_echo_n "checking $2 presence... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -@%:@include <$2> -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - ac_header_preproc=yes -else - ac_header_preproc=no -fi -rm -f conftest.err conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 -$as_echo "$ac_header_preproc" >&6; } - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( - yes:no: ) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 -$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} - ;; - no:yes:* ) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 -$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 -$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 -$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 -$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} - ;; -esac - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : - $as_echo_n "(cached) " >&6 -else - eval "$3=\$ac_header_compiler" -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -fi - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - -} @%:@ ac_fn_c_check_header_mongrel - -@%:@ ac_fn_c_check_type LINENO TYPE VAR INCLUDES -@%:@ ------------------------------------------- -@%:@ Tests whether TYPE exists after having included INCLUDES, setting cache -@%:@ variable VAR accordingly. -ac_fn_c_check_type () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : - $as_echo_n "(cached) " >&6 -else - eval "$3=no" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -if (sizeof ($2)) - return 0; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -if (sizeof (($2))) - return 0; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - -else - eval "$3=yes" -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - -} @%:@ ac_fn_c_check_type -cat >config.log <<_ACEOF -This file contains any messages produced by compilers while -running configure, to aid debugging if configure makes a mistake. - -It was created by $as_me, which was -generated by GNU Autoconf 2.65. Invocation command line was - - $ $0 $@ - -_ACEOF -exec 5>>config.log -{ -cat <<_ASUNAME -## --------- ## -## Platform. ## -## --------- ## - -hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` -uname -m = `(uname -m) 2>/dev/null || echo unknown` -uname -r = `(uname -r) 2>/dev/null || echo unknown` -uname -s = `(uname -s) 2>/dev/null || echo unknown` -uname -v = `(uname -v) 2>/dev/null || echo unknown` - -/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` -/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` - -/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` -/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` -/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` -/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` -/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` -/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` -/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` - -_ASUNAME - -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - $as_echo "PATH: $as_dir" - done -IFS=$as_save_IFS - -} >&5 - -cat >&5 <<_ACEOF - - -## ----------- ## -## Core tests. ## -## ----------- ## - -_ACEOF - - -# Keep a trace of the command line. -# Strip out --no-create and --no-recursion so they do not pile up. -# Strip out --silent because we don't want to record it for future runs. -# Also quote any args containing shell meta-characters. -# Make two passes to allow for proper duplicate-argument suppression. -ac_configure_args= -ac_configure_args0= -ac_configure_args1= -ac_must_keep_next=false -for ac_pass in 1 2 -do - for ac_arg - do - case $ac_arg in - -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil) - continue ;; - *\'*) - ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; - esac - case $ac_pass in - 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; - 2) - as_fn_append ac_configure_args1 " '$ac_arg'" - if test $ac_must_keep_next = true; then - ac_must_keep_next=false # Got value, back to normal. - else - case $ac_arg in - *=* | --config-cache | -C | -disable-* | --disable-* \ - | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ - | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ - | -with-* | --with-* | -without-* | --without-* | --x) - case "$ac_configure_args0 " in - "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; - esac - ;; - -* ) ac_must_keep_next=true ;; - esac - fi - as_fn_append ac_configure_args " '$ac_arg'" - ;; - esac - done -done -{ ac_configure_args0=; unset ac_configure_args0;} -{ ac_configure_args1=; unset ac_configure_args1;} - -# When interrupted or exit'd, cleanup temporary files, and complete -# config.log. We remove comments because anyway the quotes in there -# would cause problems or look ugly. -# WARNING: Use '\'' to represent an apostrophe within the trap. -# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. -trap 'exit_status=$? - # Save into config.log some information that might help in debugging. - { - echo - - cat <<\_ASBOX -## ---------------- ## -## Cache variables. ## -## ---------------- ## -_ASBOX - echo - # The following way of writing the cache mishandles newlines in values, -( - for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do - eval ac_val=\$$ac_var - case $ac_val in #( - *${as_nl}*) - case $ac_var in #( - *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; - esac - case $ac_var in #( - _ | IFS | as_nl) ;; #( - BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( - *) { eval $ac_var=; unset $ac_var;} ;; - esac ;; - esac - done - (set) 2>&1 | - case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( - *${as_nl}ac_space=\ *) - sed -n \ - "s/'\''/'\''\\\\'\'''\''/g; - s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" - ;; #( - *) - sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" - ;; - esac | - sort -) - echo - - cat <<\_ASBOX -## ----------------- ## -## Output variables. ## -## ----------------- ## -_ASBOX - echo - for ac_var in $ac_subst_vars - do - eval ac_val=\$$ac_var - case $ac_val in - *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; - esac - $as_echo "$ac_var='\''$ac_val'\''" - done | sort - echo - - if test -n "$ac_subst_files"; then - cat <<\_ASBOX -## ------------------- ## -## File substitutions. ## -## ------------------- ## -_ASBOX - echo - for ac_var in $ac_subst_files - do - eval ac_val=\$$ac_var - case $ac_val in - *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; - esac - $as_echo "$ac_var='\''$ac_val'\''" - done | sort - echo - fi - - if test -s confdefs.h; then - cat <<\_ASBOX -## ----------- ## -## confdefs.h. ## -## ----------- ## -_ASBOX - echo - cat confdefs.h - echo - fi - test "$ac_signal" != 0 && - $as_echo "$as_me: caught signal $ac_signal" - $as_echo "$as_me: exit $exit_status" - } >&5 - rm -f core *.core core.conftest.* && - rm -f -r conftest* confdefs* conf$$* $ac_clean_files && - exit $exit_status -' 0 -for ac_signal in 1 2 13 15; do - trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal -done -ac_signal=0 - -# confdefs.h avoids OS command line length limits that DEFS can exceed. -rm -f -r conftest* confdefs.h - -$as_echo "/* confdefs.h */" > confdefs.h - -# Predefined preprocessor variables. - -cat >>confdefs.h <<_ACEOF -@%:@define PACKAGE_NAME "$PACKAGE_NAME" -_ACEOF - -cat >>confdefs.h <<_ACEOF -@%:@define PACKAGE_TARNAME "$PACKAGE_TARNAME" -_ACEOF - -cat >>confdefs.h <<_ACEOF -@%:@define PACKAGE_VERSION "$PACKAGE_VERSION" -_ACEOF - -cat >>confdefs.h <<_ACEOF -@%:@define PACKAGE_STRING "$PACKAGE_STRING" -_ACEOF - -cat >>confdefs.h <<_ACEOF -@%:@define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" -_ACEOF - -cat >>confdefs.h <<_ACEOF -@%:@define PACKAGE_URL "$PACKAGE_URL" -_ACEOF - - -# Let the site file select an alternate cache file if it wants to. -# Prefer an explicitly selected file to automatically selected ones. -ac_site_file1=NONE -ac_site_file2=NONE -if test -n "$CONFIG_SITE"; then - ac_site_file1=$CONFIG_SITE -elif test "x$prefix" != xNONE; then - ac_site_file1=$prefix/share/config.site - ac_site_file2=$prefix/etc/config.site -else - ac_site_file1=$ac_default_prefix/share/config.site - ac_site_file2=$ac_default_prefix/etc/config.site -fi -for ac_site_file in "$ac_site_file1" "$ac_site_file2" -do - test "x$ac_site_file" = xNONE && continue - if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 -$as_echo "$as_me: loading site script $ac_site_file" >&6;} - sed 's/^/| /' "$ac_site_file" >&5 - . "$ac_site_file" - fi -done - -if test -r "$cache_file"; then - # Some versions of bash will fail to source /dev/null (special files - # actually), so we avoid doing that. DJGPP emulates it as a regular file. - if test /dev/null != "$cache_file" && test -f "$cache_file"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 -$as_echo "$as_me: loading cache $cache_file" >&6;} - case $cache_file in - [\\/]* | ?:[\\/]* ) . "$cache_file";; - *) . "./$cache_file";; - esac - fi -else - { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 -$as_echo "$as_me: creating cache $cache_file" >&6;} - >$cache_file -fi - -# Check that the precious variables saved in the cache have kept the same -# value. -ac_cache_corrupted=false -for ac_var in $ac_precious_vars; do - eval ac_old_set=\$ac_cv_env_${ac_var}_set - eval ac_new_set=\$ac_env_${ac_var}_set - eval ac_old_val=\$ac_cv_env_${ac_var}_value - eval ac_new_val=\$ac_env_${ac_var}_value - case $ac_old_set,$ac_new_set in - set,) - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 -$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} - ac_cache_corrupted=: ;; - ,set) - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 -$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} - ac_cache_corrupted=: ;; - ,);; - *) - if test "x$ac_old_val" != "x$ac_new_val"; then - # differences in whitespace do not lead to failure. - ac_old_val_w=`echo x $ac_old_val` - ac_new_val_w=`echo x $ac_new_val` - if test "$ac_old_val_w" != "$ac_new_val_w"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 -$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} - ac_cache_corrupted=: - else - { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 -$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} - eval $ac_var=\$ac_old_val - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 -$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 -$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} - fi;; - esac - # Pass precious variables to config.status. - if test "$ac_new_set" = set; then - case $ac_new_val in - *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; - *) ac_arg=$ac_var=$ac_new_val ;; - esac - case " $ac_configure_args " in - *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. - *) as_fn_append ac_configure_args " '$ac_arg'" ;; - esac - fi -done -if $ac_cache_corrupted; then - { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 -$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} - as_fn_error "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 -fi -## -------------------- ## -## Main body of script. ## -## -------------------- ## - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5 -$as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; } - @%:@ Check whether --enable-maintainer-mode was given. -if test "${enable_maintainer_mode+set}" = set; then : - enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval -else - USE_MAINTAINER_MODE=no -fi - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_MAINTAINER_MODE" >&5 -$as_echo "$USE_MAINTAINER_MODE" >&6; } - if test $USE_MAINTAINER_MODE = yes; then - MAINTAINER_MODE_TRUE= - MAINTAINER_MODE_FALSE='#' -else - MAINTAINER_MODE_TRUE='#' - MAINTAINER_MODE_FALSE= -fi - - MAINT=$MAINTAINER_MODE_TRUE - - - - -ac_aux_dir= -for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do - for ac_t in install-sh install.sh shtool; do - if test -f "$ac_dir/$ac_t"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/$ac_t -c" - break 2 - fi - done -done -if test -z "$ac_aux_dir"; then - as_fn_error "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 -fi - -# These three variables are undocumented and unsupported, -# and are intended to be withdrawn in a future Autoconf release. -# They can cause serious problems if a builder's source tree is in a directory -# whose full name contains unusual characters. -ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. -ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. -ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. - - -# Make sure we can run config.sub. -$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || - as_fn_error "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 -$as_echo_n "checking build system type... " >&6; } -if test "${ac_cv_build+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_build_alias=$build_alias -test "x$ac_build_alias" = x && - ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` -test "x$ac_build_alias" = x && - as_fn_error "cannot guess build type; you must specify one" "$LINENO" 5 -ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || - as_fn_error "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 -$as_echo "$ac_cv_build" >&6; } -case $ac_cv_build in -*-*-*) ;; -*) as_fn_error "invalid value of canonical build" "$LINENO" 5;; -esac -build=$ac_cv_build -ac_save_IFS=$IFS; IFS='-' -set x $ac_cv_build -shift -build_cpu=$1 -build_vendor=$2 -shift; shift -# Remember, the first character of IFS is used to create $*, -# except with old shells: -build_os=$* -IFS=$ac_save_IFS -case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 -$as_echo_n "checking host system type... " >&6; } -if test "${ac_cv_host+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test "x$host_alias" = x; then - ac_cv_host=$ac_cv_build -else - ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || - as_fn_error "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 -$as_echo "$ac_cv_host" >&6; } -case $ac_cv_host in -*-*-*) ;; -*) as_fn_error "invalid value of canonical host" "$LINENO" 5;; -esac -host=$ac_cv_host -ac_save_IFS=$IFS; IFS='-' -set x $ac_cv_host -shift -host_cpu=$1 -host_vendor=$2 -shift; shift -# Remember, the first character of IFS is used to create $*, -# except with old shells: -host_os=$* -IFS=$ac_save_IFS -case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking target system type" >&5 -$as_echo_n "checking target system type... " >&6; } -if test "${ac_cv_target+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test "x$target_alias" = x; then - ac_cv_target=$ac_cv_host -else - ac_cv_target=`$SHELL "$ac_aux_dir/config.sub" $target_alias` || - as_fn_error "$SHELL $ac_aux_dir/config.sub $target_alias failed" "$LINENO" 5 -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_target" >&5 -$as_echo "$ac_cv_target" >&6; } -case $ac_cv_target in -*-*-*) ;; -*) as_fn_error "invalid value of canonical target" "$LINENO" 5;; -esac -target=$ac_cv_target -ac_save_IFS=$IFS; IFS='-' -set x $ac_cv_target -shift -target_cpu=$1 -target_vendor=$2 -shift; shift -# Remember, the first character of IFS is used to create $*, -# except with old shells: -target_os=$* -IFS=$ac_save_IFS -case $target_os in *\ *) target_os=`echo "$target_os" | sed 's/ /-/g'`;; esac - - -# The aliases save the names the user supplied, while $host etc. -# will get canonicalized. -test -n "$target_alias" && - test "$program_prefix$program_suffix$program_transform_name" = \ - NONENONEs,x,x, && - program_prefix=${target_alias}- - -case "$target" in - *) - ;; -esac - -am__api_version='1.11' - -# Find a good install program. We prefer a C program (faster), -# so one script is as good as another. But avoid the broken or -# incompatible versions: -# SysV /etc/install, /usr/sbin/install -# SunOS /usr/etc/install -# IRIX /sbin/install -# AIX /bin/install -# AmigaOS /C/install, which installs bootblocks on floppy discs -# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag -# AFS /usr/afsws/bin/install, which mishandles nonexistent args -# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" -# OS/2's system install, which has a completely different semantic -# ./install, which can be erroneously created by make from ./install.sh. -# Reject install programs that cannot install multiple files. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 -$as_echo_n "checking for a BSD-compatible install... " >&6; } -if test -z "$INSTALL"; then -if test "${ac_cv_path_install+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - # Account for people who put trailing slashes in PATH elements. -case $as_dir/ in @%:@(( - ./ | .// | /[cC]/* | \ - /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ - ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ - /usr/ucb/* ) ;; - *) - # OSF1 and SCO ODT 3.0 have their own names for install. - # Don't use installbsd from OSF since it installs stuff as root - # by default. - for ac_prog in ginstall scoinst install; do - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then - if test $ac_prog = install && - grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then - # AIX install. It has an incompatible calling convention. - : - elif test $ac_prog = install && - grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then - # program-specific install script used by HP pwplus--don't use. - : - else - rm -rf conftest.one conftest.two conftest.dir - echo one > conftest.one - echo two > conftest.two - mkdir conftest.dir - if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && - test -s conftest.one && test -s conftest.two && - test -s conftest.dir/conftest.one && - test -s conftest.dir/conftest.two - then - ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" - break 3 - fi - fi - fi - done - done - ;; -esac - - done -IFS=$as_save_IFS - -rm -rf conftest.one conftest.two conftest.dir - -fi - if test "${ac_cv_path_install+set}" = set; then - INSTALL=$ac_cv_path_install - else - # As a last resort, use the slow shell script. Don't cache a - # value for INSTALL within a source directory, because that will - # break other packages using the cache if that directory is - # removed, or if the value is a relative name. - INSTALL=$ac_install_sh - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 -$as_echo "$INSTALL" >&6; } - -# Use test -z because SunOS4 sh mishandles braces in ${var-val}. -# It thinks the first close brace ends the variable substitution. -test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' - -test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' - -test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 -$as_echo_n "checking whether build environment is sane... " >&6; } -# Just in case -sleep 1 -echo timestamp > conftest.file -# Reject unsafe characters in $srcdir or the absolute working directory -# name. Accept space and tab only in the latter. -am_lf=' -' -case `pwd` in - *[\\\"\#\$\&\'\`$am_lf]*) - as_fn_error "unsafe absolute working directory name" "$LINENO" 5;; -esac -case $srcdir in - *[\\\"\#\$\&\'\`$am_lf\ \ ]*) - as_fn_error "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;; -esac - -# Do `set' in a subshell so we don't clobber the current shell's -# arguments. Must try -L first in case configure is actually a -# symlink; some systems play weird games with the mod time of symlinks -# (eg FreeBSD returns the mod time of the symlink's containing -# directory). -if ( - set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` - if test "$*" = "X"; then - # -L didn't work. - set X `ls -t "$srcdir/configure" conftest.file` - fi - rm -f conftest.file - if test "$*" != "X $srcdir/configure conftest.file" \ - && test "$*" != "X conftest.file $srcdir/configure"; then - - # If neither matched, then we have a broken ls. This can happen - # if, for instance, CONFIG_SHELL is bash and it inherits a - # broken ls alias from the environment. This has actually - # happened. Such a system could not be considered "sane". - as_fn_error "ls -t appears to fail. Make sure there is not a broken -alias in your environment" "$LINENO" 5 - fi - - test "$2" = conftest.file - ) -then - # Ok. - : -else - as_fn_error "newly created file is older than distributed files! -Check your system clock" "$LINENO" 5 -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -test "$program_prefix" != NONE && - program_transform_name="s&^&$program_prefix&;$program_transform_name" -# Use a double $ so make ignores it. -test "$program_suffix" != NONE && - program_transform_name="s&\$&$program_suffix&;$program_transform_name" -# Double any \ or $. -# By default was `s,x,x', remove it if useless. -ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' -program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` - -# expand $ac_aux_dir to an absolute path -am_aux_dir=`cd $ac_aux_dir && pwd` - -if test x"${MISSING+set}" != xset; then - case $am_aux_dir in - *\ * | *\ *) - MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; - *) - MISSING="\${SHELL} $am_aux_dir/missing" ;; - esac -fi -# Use eval to expand $SHELL -if eval "$MISSING --run true"; then - am_missing_run="$MISSING --run " -else - am_missing_run= - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5 -$as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} -fi - -if test x"${install_sh}" != xset; then - case $am_aux_dir in - *\ * | *\ *) - install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; - *) - install_sh="\${SHELL} $am_aux_dir/install-sh" - esac -fi - -# Installed binaries are usually stripped using `strip' when the user -# run `make install-strip'. However `strip' might not be the right -# tool to use in cross-compilation environments, therefore Automake -# will honor the `STRIP' environment variable to overrule this program. -if test "$cross_compiling" != no; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. -set dummy ${ac_tool_prefix}strip; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_STRIP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$STRIP"; then - ac_cv_prog_STRIP="$STRIP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_STRIP="${ac_tool_prefix}strip" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -STRIP=$ac_cv_prog_STRIP -if test -n "$STRIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 -$as_echo "$STRIP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_STRIP"; then - ac_ct_STRIP=$STRIP - # Extract the first word of "strip", so it can be a program name with args. -set dummy strip; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_STRIP"; then - ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_STRIP="strip" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP -if test -n "$ac_ct_STRIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 -$as_echo "$ac_ct_STRIP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_STRIP" = x; then - STRIP=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - STRIP=$ac_ct_STRIP - fi -else - STRIP="$ac_cv_prog_STRIP" -fi - -fi -INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 -$as_echo_n "checking for a thread-safe mkdir -p... " >&6; } -if test -z "$MKDIR_P"; then - if test "${ac_cv_path_mkdir+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in mkdir gmkdir; do - for ac_exec_ext in '' $ac_executable_extensions; do - { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue - case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( - 'mkdir (GNU coreutils) '* | \ - 'mkdir (coreutils) '* | \ - 'mkdir (fileutils) '4.1*) - ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext - break 3;; - esac - done - done - done -IFS=$as_save_IFS - -fi - - test -d ./--version && rmdir ./--version - if test "${ac_cv_path_mkdir+set}" = set; then - MKDIR_P="$ac_cv_path_mkdir -p" - else - # As a last resort, use the slow shell script. Don't cache a - # value for MKDIR_P within a source directory, because that will - # break other packages using the cache if that directory is - # removed, or if the value is a relative name. - MKDIR_P="$ac_install_sh -d" - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 -$as_echo "$MKDIR_P" >&6; } - -mkdir_p="$MKDIR_P" -case $mkdir_p in - [\\/$]* | ?:[\\/]*) ;; - */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; -esac - -for ac_prog in gawk mawk nawk awk -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_AWK+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$AWK"; then - ac_cv_prog_AWK="$AWK" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_AWK="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -AWK=$ac_cv_prog_AWK -if test -n "$AWK"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 -$as_echo "$AWK" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$AWK" && break -done - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 -$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } -set x ${MAKE-make} -ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` -if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then : - $as_echo_n "(cached) " >&6 -else - cat >conftest.make <<\_ACEOF -SHELL = /bin/sh -all: - @echo '@@@%%%=$(MAKE)=@@@%%%' -_ACEOF -# GNU make sometimes prints "make[1]: Entering...", which would confuse us. -case `${MAKE-make} -f conftest.make 2>/dev/null` in - *@@@%%%=?*=@@@%%%*) - eval ac_cv_prog_make_${ac_make}_set=yes;; - *) - eval ac_cv_prog_make_${ac_make}_set=no;; -esac -rm -f conftest.make -fi -if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - SET_MAKE= -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - SET_MAKE="MAKE=${MAKE-make}" -fi - -rm -rf .tst 2>/dev/null -mkdir .tst 2>/dev/null -if test -d .tst; then - am__leading_dot=. -else - am__leading_dot=_ -fi -rmdir .tst 2>/dev/null - -if test "`cd $srcdir && pwd`" != "`pwd`"; then - # Use -I$(srcdir) only when $(srcdir) != ., so that make's output - # is not polluted with repeated "-I." - am__isrc=' -I$(srcdir)' - # test to see if srcdir already configured - if test -f $srcdir/config.status; then - as_fn_error "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 - fi -fi - -# test whether we have cygpath -if test -z "$CYGPATH_W"; then - if (cygpath --version) >/dev/null 2>/dev/null; then - CYGPATH_W='cygpath -w' - else - CYGPATH_W=echo - fi -fi - - -# Define the identity of the package. - PACKAGE=radiusclient - VERSION=1.1.6 - - -cat >>confdefs.h <<_ACEOF -@%:@define PACKAGE "$PACKAGE" -_ACEOF - - -cat >>confdefs.h <<_ACEOF -@%:@define VERSION "$VERSION" -_ACEOF - -# Some tools Automake needs. - -ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} - - -AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} - - -AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} - - -AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} - - -MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} - -# We need awk for the "check" target. The system "awk" is bad on -# some platforms. -# Always define AMTAR for backward compatibility. - -AMTAR=${AMTAR-"${am_missing_run}tar"} - -am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -' - - - - - - -LIBVERSION=2:0:0 - - -pkgsysconfdir=${sysconfdir}/$PACKAGE - - -case `pwd` in - *\ * | *\ *) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 -$as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; -esac - - - -macro_version='2.2.6b' -macro_revision='1.3017' - - - - - - - - - - - - - -ltmain="$ac_aux_dir/ltmain.sh" - -DEPDIR="${am__leading_dot}deps" - -ac_config_commands="$ac_config_commands depfiles" - - -am_make=${MAKE-make} -cat > confinc << 'END' -am__doit: - @echo this is the am__doit target -.PHONY: am__doit -END -# If we don't find an include directive, just comment out the code. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 -$as_echo_n "checking for style of include used by $am_make... " >&6; } -am__include="#" -am__quote= -_am_result=none -# First try GNU make style include. -echo "include confinc" > confmf -# Ignore all kinds of additional output from `make'. -case `$am_make -s -f confmf 2> /dev/null` in #( -*the\ am__doit\ target*) - am__include=include - am__quote= - _am_result=GNU - ;; -esac -# Now try BSD make style include. -if test "$am__include" = "#"; then - echo '.include "confinc"' > confmf - case `$am_make -s -f confmf 2> /dev/null` in #( - *the\ am__doit\ target*) - am__include=.include - am__quote="\"" - _am_result=BSD - ;; - esac -fi - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 -$as_echo "$_am_result" >&6; } -rm -f confinc confmf - -@%:@ Check whether --enable-dependency-tracking was given. -if test "${enable_dependency_tracking+set}" = set; then : - enableval=$enable_dependency_tracking; -fi - -if test "x$enable_dependency_tracking" != xno; then - am_depcomp="$ac_aux_dir/depcomp" - AMDEPBACKSLASH='\' -fi - if test "x$enable_dependency_tracking" != xno; then - AMDEP_TRUE= - AMDEP_FALSE='#' -else - AMDEP_TRUE='#' - AMDEP_FALSE= -fi - - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. -set dummy ${ac_tool_prefix}gcc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_CC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_CC="${ac_tool_prefix}gcc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_CC"; then - ac_ct_CC=$CC - # Extract the first word of "gcc", so it can be a program name with args. -set dummy gcc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_CC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_CC="gcc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -$as_echo "$ac_ct_CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_CC" = x; then - CC="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - CC=$ac_ct_CC - fi -else - CC="$ac_cv_prog_CC" -fi - -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. -set dummy ${ac_tool_prefix}cc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_CC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_CC="${ac_tool_prefix}cc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - fi -fi -if test -z "$CC"; then - # Extract the first word of "cc", so it can be a program name with args. -set dummy cc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_CC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else - ac_prog_rejected=no -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then - ac_prog_rejected=yes - continue - fi - ac_cv_prog_CC="cc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -if test $ac_prog_rejected = yes; then - # We found a bogon in the path, so make sure we never use it. - set dummy $ac_cv_prog_CC - shift - if test $@%:@ != 0; then - # We chose a different compiler from the bogus one. - # However, it has the same basename, so the bogon will be chosen - # first if we set CC to just the basename; use the full file name. - shift - ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" - fi -fi -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - for ac_prog in cl.exe - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_CC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_CC="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$CC" && break - done -fi -if test -z "$CC"; then - ac_ct_CC=$CC - for ac_prog in cl.exe -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_CC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_CC="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -$as_echo "$ac_ct_CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$ac_ct_CC" && break -done - - if test "x$ac_ct_CC" = x; then - CC="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - CC=$ac_ct_CC - fi -fi - -fi - - -test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error "no acceptable C compiler found in \$PATH -See \`config.log' for more details." "$LINENO" 5; } - -# Provide some information about the compiler. -$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 -set X $ac_compile -ac_compiler=$2 -for ac_option in --version -v -V -qversion; do - { { ac_try="$ac_compiler $ac_option >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compiler $ac_option >&5") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - sed '10a\ -... rest of stderr output deleted ... - 10q' conftest.err >conftest.er1 - cat conftest.er1 >&5 - fi - rm -f conftest.er1 conftest.err - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } -done - -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -ac_clean_files_save=$ac_clean_files -ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" -# Try to create an executable without -o first, disregard a.out. -# It will help us diagnose broken compilers, and finding out an intuition -# of exeext. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 -$as_echo_n "checking whether the C compiler works... " >&6; } -ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` - -# The possible output files: -ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" - -ac_rmfiles= -for ac_file in $ac_files -do - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; - * ) ac_rmfiles="$ac_rmfiles $ac_file";; - esac -done -rm -f $ac_rmfiles - -if { { ac_try="$ac_link_default" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link_default") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : - # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. -# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' -# in a Makefile. We should not override ac_cv_exeext if it was cached, -# so that the user can short-circuit this test for compilers unknown to -# Autoconf. -for ac_file in $ac_files '' -do - test -f "$ac_file" || continue - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) - ;; - [ab].out ) - # We found the default executable, but exeext='' is most - # certainly right. - break;; - *.* ) - if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; - then :; else - ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` - fi - # We set ac_cv_exeext here because the later test for it is not - # safe: cross compilers may not add the suffix if given an `-o' - # argument, so we may need to know it at that point already. - # Even if this section looks crufty: it has the advantage of - # actually working. - break;; - * ) - break;; - esac -done -test "$ac_cv_exeext" = no && ac_cv_exeext= - -else - ac_file='' -fi -if test -z "$ac_file"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -$as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -{ as_fn_set_status 77 -as_fn_error "C compiler cannot create executables -See \`config.log' for more details." "$LINENO" 5; }; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 -$as_echo_n "checking for C compiler default output file name... " >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 -$as_echo "$ac_file" >&6; } -ac_exeext=$ac_cv_exeext - -rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out -ac_clean_files=$ac_clean_files_save -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 -$as_echo_n "checking for suffix of executables... " >&6; } -if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : - # If both `conftest.exe' and `conftest' are `present' (well, observable) -# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will -# work properly (i.e., refer to `conftest.exe'), while it won't with -# `rm'. -for ac_file in conftest.exe conftest conftest.*; do - test -f "$ac_file" || continue - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; - *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` - break;; - * ) break;; - esac -done -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error "cannot compute suffix of executables: cannot compile and link -See \`config.log' for more details." "$LINENO" 5; } -fi -rm -f conftest conftest$ac_cv_exeext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 -$as_echo "$ac_cv_exeext" >&6; } - -rm -f conftest.$ac_ext -EXEEXT=$ac_cv_exeext -ac_exeext=$EXEEXT -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -@%:@include -int -main () -{ -FILE *f = fopen ("conftest.out", "w"); - return ferror (f) || fclose (f) != 0; - - ; - return 0; -} -_ACEOF -ac_clean_files="$ac_clean_files conftest.out" -# Check that the compiler produces executables we can run. If not, either -# the compiler is broken, or we cross compile. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 -$as_echo_n "checking whether we are cross compiling... " >&6; } -if test "$cross_compiling" != yes; then - { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } - if { ac_try='./conftest$ac_cv_exeext' - { { case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then - cross_compiling=no - else - if test "$cross_compiling" = maybe; then - cross_compiling=yes - else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error "cannot run C compiled programs. -If you meant to cross compile, use \`--host'. -See \`config.log' for more details." "$LINENO" 5; } - fi - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 -$as_echo "$cross_compiling" >&6; } - -rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out -ac_clean_files=$ac_clean_files_save -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 -$as_echo_n "checking for suffix of object files... " >&6; } -if test "${ac_cv_objext+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.o conftest.obj -if { { ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compile") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : - for ac_file in conftest.o conftest.obj conftest.*; do - test -f "$ac_file" || continue; - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; - *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` - break;; - esac -done -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error "cannot compute suffix of object files: cannot compile -See \`config.log' for more details." "$LINENO" 5; } -fi -rm -f conftest.$ac_cv_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 -$as_echo "$ac_cv_objext" >&6; } -OBJEXT=$ac_cv_objext -ac_objext=$OBJEXT -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 -$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } -if test "${ac_cv_c_compiler_gnu+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ -#ifndef __GNUC__ - choke me -#endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_compiler_gnu=yes -else - ac_compiler_gnu=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -ac_cv_c_compiler_gnu=$ac_compiler_gnu - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 -$as_echo "$ac_cv_c_compiler_gnu" >&6; } -if test $ac_compiler_gnu = yes; then - GCC=yes -else - GCC= -fi -ac_test_CFLAGS=${CFLAGS+set} -ac_save_CFLAGS=$CFLAGS -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 -$as_echo_n "checking whether $CC accepts -g... " >&6; } -if test "${ac_cv_prog_cc_g+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_save_c_werror_flag=$ac_c_werror_flag - ac_c_werror_flag=yes - ac_cv_prog_cc_g=no - CFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_g=yes -else - CFLAGS="" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - -else - ac_c_werror_flag=$ac_save_c_werror_flag - CFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_g=yes -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_c_werror_flag=$ac_save_c_werror_flag -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 -$as_echo "$ac_cv_prog_cc_g" >&6; } -if test "$ac_test_CFLAGS" = set; then - CFLAGS=$ac_save_CFLAGS -elif test $ac_cv_prog_cc_g = yes; then - if test "$GCC" = yes; then - CFLAGS="-g -O2" - else - CFLAGS="-g" - fi -else - if test "$GCC" = yes; then - CFLAGS="-O2" - else - CFLAGS= - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 -$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } -if test "${ac_cv_prog_cc_c89+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_cv_prog_cc_c89=no -ac_save_CC=$CC -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#include -#include -/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ -struct buf { int x; }; -FILE * (*rcsopen) (struct buf *, struct stat *, int); -static char *e (p, i) - char **p; - int i; -{ - return p[i]; -} -static char *f (char * (*g) (char **, int), char **p, ...) -{ - char *s; - va_list v; - va_start (v,p); - s = g (p, va_arg (v,int)); - va_end (v); - return s; -} - -/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has - function prototypes and stuff, but not '\xHH' hex character constants. - These don't provoke an error unfortunately, instead are silently treated - as 'x'. The following induces an error, until -std is added to get - proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an - array size at least. It's necessary to write '\x00'==0 to get something - that's true only with -std. */ -int osf4_cc_array ['\x00' == 0 ? 1 : -1]; - -/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters - inside strings and character constants. */ -#define FOO(x) 'x' -int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; - -int test (int i, double x); -struct s1 {int (*f) (int a);}; -struct s2 {int (*f) (double a);}; -int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); -int argc; -char **argv; -int -main () -{ -return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; - ; - return 0; -} -_ACEOF -for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ - -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" -do - CC="$ac_save_CC $ac_arg" - if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_c89=$ac_arg -fi -rm -f core conftest.err conftest.$ac_objext - test "x$ac_cv_prog_cc_c89" != "xno" && break -done -rm -f conftest.$ac_ext -CC=$ac_save_CC - -fi -# AC_CACHE_VAL -case "x$ac_cv_prog_cc_c89" in - x) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -$as_echo "none needed" >&6; } ;; - xno) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 -$as_echo "unsupported" >&6; } ;; - *) - CC="$CC $ac_cv_prog_cc_c89" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 -$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; -esac -if test "x$ac_cv_prog_cc_c89" != xno; then : - -fi - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -depcc="$CC" am_compiler_list= - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 -$as_echo_n "checking dependency style of $depcc... " >&6; } -if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then - # We make a subdir and do the tests there. Otherwise we can end up - # making bogus files that we don't know about and never remove. For - # instance it was reported that on HP-UX the gcc test will end up - # making a dummy file named `D' -- because `-MD' means `put the output - # in D'. - mkdir conftest.dir - # Copy depcomp to subdir because otherwise we won't find it if we're - # using a relative directory. - cp "$am_depcomp" conftest.dir - cd conftest.dir - # We will build objects and dependencies in a subdirectory because - # it helps to detect inapplicable dependency modes. For instance - # both Tru64's cc and ICC support -MD to output dependencies as a - # side effect of compilation, but ICC will put the dependencies in - # the current directory while Tru64 will put them in the object - # directory. - mkdir sub - - am_cv_CC_dependencies_compiler_type=none - if test "$am_compiler_list" = ""; then - am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` - fi - am__universal=false - case " $depcc " in #( - *\ -arch\ *\ -arch\ *) am__universal=true ;; - esac - - for depmode in $am_compiler_list; do - # Setup a source with many dependencies, because some compilers - # like to wrap large dependency lists on column 80 (with \), and - # we should not choose a depcomp mode which is confused by this. - # - # We need to recreate these files for each test, as the compiler may - # overwrite some of them when testing with obscure command lines. - # This happens at least with the AIX C compiler. - : > sub/conftest.c - for i in 1 2 3 4 5 6; do - echo '#include "conftst'$i'.h"' >> sub/conftest.c - # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with - # Solaris 8's {/usr,}/bin/sh. - touch sub/conftst$i.h - done - echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf - - # We check with `-c' and `-o' for the sake of the "dashmstdout" - # mode. It turns out that the SunPro C++ compiler does not properly - # handle `-M -o', and we need to detect this. Also, some Intel - # versions had trouble with output in subdirs - am__obj=sub/conftest.${OBJEXT-o} - am__minus_obj="-o $am__obj" - case $depmode in - gcc) - # This depmode causes a compiler race in universal mode. - test "$am__universal" = false || continue - ;; - nosideeffect) - # after this tag, mechanisms are not by side-effect, so they'll - # only be used when explicitly requested - if test "x$enable_dependency_tracking" = xyes; then - continue - else - break - fi - ;; - msvisualcpp | msvcmsys) - # This compiler won't grok `-c -o', but also, the minuso test has - # not run yet. These depmodes are late enough in the game, and - # so weak that their functioning should not be impacted. - am__obj=conftest.${OBJEXT-o} - am__minus_obj= - ;; - none) break ;; - esac - if depmode=$depmode \ - source=sub/conftest.c object=$am__obj \ - depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ - $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ - >/dev/null 2>conftest.err && - grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && - grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && - grep $am__obj sub/conftest.Po > /dev/null 2>&1 && - ${MAKE-make} -s -f confmf > /dev/null 2>&1; then - # icc doesn't choke on unknown options, it will just issue warnings - # or remarks (even with -Werror). So we grep stderr for any message - # that says an option was ignored or not supported. - # When given -MP, icc 7.0 and 7.1 complain thusly: - # icc: Command line warning: ignoring option '-M'; no argument required - # The diagnosis changed in icc 8.0: - # icc: Command line remark: option '-MP' not supported - if (grep 'ignoring option' conftest.err || - grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else - am_cv_CC_dependencies_compiler_type=$depmode - break - fi - fi - done - - cd .. - rm -rf conftest.dir -else - am_cv_CC_dependencies_compiler_type=none -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 -$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } -CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type - - if - test "x$enable_dependency_tracking" != xno \ - && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then - am__fastdepCC_TRUE= - am__fastdepCC_FALSE='#' -else - am__fastdepCC_TRUE='#' - am__fastdepCC_FALSE= -fi - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 -$as_echo_n "checking for a sed that does not truncate output... " >&6; } -if test "${ac_cv_path_SED+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ - for ac_i in 1 2 3 4 5 6 7; do - ac_script="$ac_script$as_nl$ac_script" - done - echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed - { ac_script=; unset ac_script;} - if test -z "$SED"; then - ac_path_SED_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in sed gsed; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" - { test -f "$ac_path_SED" && $as_test_x "$ac_path_SED"; } || continue -# Check for GNU ac_path_SED and select it if it is found. - # Check for GNU $ac_path_SED -case `"$ac_path_SED" --version 2>&1` in -*GNU*) - ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo '' >> "conftest.nl" - "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_SED_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_SED="$ac_path_SED" - ac_path_SED_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_SED_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_SED"; then - as_fn_error "no acceptable sed could be found in \$PATH" "$LINENO" 5 - fi -else - ac_cv_path_SED=$SED -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 -$as_echo "$ac_cv_path_SED" >&6; } - SED="$ac_cv_path_SED" - rm -f conftest.sed - -test -z "$SED" && SED=sed -Xsed="$SED -e 1s/^X//" - - - - - - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 -$as_echo_n "checking for grep that handles long lines and -e... " >&6; } -if test "${ac_cv_path_GREP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -z "$GREP"; then - ac_path_GREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in grep ggrep; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" - { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue -# Check for GNU ac_path_GREP and select it if it is found. - # Check for GNU $ac_path_GREP -case `"$ac_path_GREP" --version 2>&1` in -*GNU*) - ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo 'GREP' >> "conftest.nl" - "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_GREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_GREP="$ac_path_GREP" - ac_path_GREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_GREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_GREP"; then - as_fn_error "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi -else - ac_cv_path_GREP=$GREP -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 -$as_echo "$ac_cv_path_GREP" >&6; } - GREP="$ac_cv_path_GREP" - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 -$as_echo_n "checking for egrep... " >&6; } -if test "${ac_cv_path_EGREP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 - then ac_cv_path_EGREP="$GREP -E" - else - if test -z "$EGREP"; then - ac_path_EGREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in egrep; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" - { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue -# Check for GNU ac_path_EGREP and select it if it is found. - # Check for GNU $ac_path_EGREP -case `"$ac_path_EGREP" --version 2>&1` in -*GNU*) - ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo 'EGREP' >> "conftest.nl" - "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_EGREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_EGREP="$ac_path_EGREP" - ac_path_EGREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_EGREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_EGREP"; then - as_fn_error "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi -else - ac_cv_path_EGREP=$EGREP -fi - - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 -$as_echo "$ac_cv_path_EGREP" >&6; } - EGREP="$ac_cv_path_EGREP" - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 -$as_echo_n "checking for fgrep... " >&6; } -if test "${ac_cv_path_FGREP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 - then ac_cv_path_FGREP="$GREP -F" - else - if test -z "$FGREP"; then - ac_path_FGREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in fgrep; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" - { test -f "$ac_path_FGREP" && $as_test_x "$ac_path_FGREP"; } || continue -# Check for GNU ac_path_FGREP and select it if it is found. - # Check for GNU $ac_path_FGREP -case `"$ac_path_FGREP" --version 2>&1` in -*GNU*) - ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo 'FGREP' >> "conftest.nl" - "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_FGREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_FGREP="$ac_path_FGREP" - ac_path_FGREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_FGREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_FGREP"; then - as_fn_error "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi -else - ac_cv_path_FGREP=$FGREP -fi - - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 -$as_echo "$ac_cv_path_FGREP" >&6; } - FGREP="$ac_cv_path_FGREP" - - -test -z "$GREP" && GREP=grep - - - - - - - - - - - - - - - - - - - -@%:@ Check whether --with-gnu-ld was given. -if test "${with_gnu_ld+set}" = set; then : - withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes -else - with_gnu_ld=no -fi - -ac_prog=ld -if test "$GCC" = yes; then - # Check if gcc -print-prog-name=ld gives a path. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 -$as_echo_n "checking for ld used by $CC... " >&6; } - case $host in - *-*-mingw*) - # gcc leaves a trailing carriage return which upsets mingw - ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; - *) - ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; - esac - case $ac_prog in - # Accept absolute paths. - [\\/]* | ?:[\\/]*) - re_direlt='/[^/][^/]*/\.\./' - # Canonicalize the pathname of ld - ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` - while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do - ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` - done - test -z "$LD" && LD="$ac_prog" - ;; - "") - # If it fails, then pretend we aren't using GCC. - ac_prog=ld - ;; - *) - # If it is relative, then search for the first ld in PATH. - with_gnu_ld=unknown - ;; - esac -elif test "$with_gnu_ld" = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 -$as_echo_n "checking for GNU ld... " >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 -$as_echo_n "checking for non-GNU ld... " >&6; } -fi -if test "${lt_cv_path_LD+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -z "$LD"; then - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for ac_dir in $PATH; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then - lt_cv_path_LD="$ac_dir/$ac_prog" - # Check to see if the program is GNU ld. I'd rather use --version, - # but apparently some variants of GNU ld only accept -v. - # Break only if it was the GNU/non-GNU ld that we prefer. - case `"$lt_cv_path_LD" -v 2>&1 &5 -$as_echo "$LD" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi -test -z "$LD" && as_fn_error "no acceptable ld found in \$PATH" "$LINENO" 5 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 -$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } -if test "${lt_cv_prog_gnu_ld+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - # I'd rather use --version here, but apparently some GNU lds only accept -v. -case `$LD -v 2>&1 &5 -$as_echo "$lt_cv_prog_gnu_ld" >&6; } -with_gnu_ld=$lt_cv_prog_gnu_ld - - - - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 -$as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } -if test "${lt_cv_path_NM+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$NM"; then - # Let the user override the test. - lt_cv_path_NM="$NM" -else - lt_nm_to_check="${ac_tool_prefix}nm" - if test -n "$ac_tool_prefix" && test "$build" = "$host"; then - lt_nm_to_check="$lt_nm_to_check nm" - fi - for lt_tmp_nm in $lt_nm_to_check; do - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - tmp_nm="$ac_dir/$lt_tmp_nm" - if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then - # Check to see if the nm accepts a BSD-compat flag. - # Adding the `sed 1q' prevents false positives on HP-UX, which says: - # nm: unknown option "B" ignored - # Tru64's nm complains that /dev/null is an invalid object file - case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in - */dev/null* | *'Invalid file or object type'*) - lt_cv_path_NM="$tmp_nm -B" - break - ;; - *) - case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in - */dev/null*) - lt_cv_path_NM="$tmp_nm -p" - break - ;; - *) - lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but - continue # so that we can try to find one that supports BSD flags - ;; - esac - ;; - esac - fi - done - IFS="$lt_save_ifs" - done - : ${lt_cv_path_NM=no} -fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 -$as_echo "$lt_cv_path_NM" >&6; } -if test "$lt_cv_path_NM" != "no"; then - NM="$lt_cv_path_NM" -else - # Didn't find any BSD compatible name lister, look for dumpbin. - if test -n "$ac_tool_prefix"; then - for ac_prog in "dumpbin -symbols" "link -dump -symbols" - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_DUMPBIN+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$DUMPBIN"; then - ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -DUMPBIN=$ac_cv_prog_DUMPBIN -if test -n "$DUMPBIN"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 -$as_echo "$DUMPBIN" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$DUMPBIN" && break - done -fi -if test -z "$DUMPBIN"; then - ac_ct_DUMPBIN=$DUMPBIN - for ac_prog in "dumpbin -symbols" "link -dump -symbols" -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_DUMPBIN+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_DUMPBIN"; then - ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN -if test -n "$ac_ct_DUMPBIN"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 -$as_echo "$ac_ct_DUMPBIN" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$ac_ct_DUMPBIN" && break -done - - if test "x$ac_ct_DUMPBIN" = x; then - DUMPBIN=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - DUMPBIN=$ac_ct_DUMPBIN - fi -fi - - - if test "$DUMPBIN" != ":"; then - NM="$DUMPBIN" - fi -fi -test -z "$NM" && NM=nm - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 -$as_echo_n "checking the name lister ($NM) interface... " >&6; } -if test "${lt_cv_nm_interface+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_nm_interface="BSD nm" - echo "int some_variable = 0;" > conftest.$ac_ext - (eval echo "\"\$as_me:__oline__: $ac_compile\"" >&5) - (eval "$ac_compile" 2>conftest.err) - cat conftest.err >&5 - (eval echo "\"\$as_me:__oline__: $NM \\\"conftest.$ac_objext\\\"\"" >&5) - (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) - cat conftest.err >&5 - (eval echo "\"\$as_me:__oline__: output\"" >&5) - cat conftest.out >&5 - if $GREP 'External.*some_variable' conftest.out > /dev/null; then - lt_cv_nm_interface="MS dumpbin" - fi - rm -f conftest* -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 -$as_echo "$lt_cv_nm_interface" >&6; } - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 -$as_echo_n "checking whether ln -s works... " >&6; } -LN_S=$as_ln_s -if test "$LN_S" = "ln -s"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 -$as_echo "no, using $LN_S" >&6; } -fi - -# find the maximum length of command line arguments -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 -$as_echo_n "checking the maximum length of command line arguments... " >&6; } -if test "${lt_cv_sys_max_cmd_len+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - i=0 - teststring="ABCD" - - case $build_os in - msdosdjgpp*) - # On DJGPP, this test can blow up pretty badly due to problems in libc - # (any single argument exceeding 2000 bytes causes a buffer overrun - # during glob expansion). Even if it were fixed, the result of this - # check would be larger than it should be. - lt_cv_sys_max_cmd_len=12288; # 12K is about right - ;; - - gnu*) - # Under GNU Hurd, this test is not required because there is - # no limit to the length of command line arguments. - # Libtool will interpret -1 as no limit whatsoever - lt_cv_sys_max_cmd_len=-1; - ;; - - cygwin* | mingw* | cegcc*) - # On Win9x/ME, this test blows up -- it succeeds, but takes - # about 5 minutes as the teststring grows exponentially. - # Worse, since 9x/ME are not pre-emptively multitasking, - # you end up with a "frozen" computer, even though with patience - # the test eventually succeeds (with a max line length of 256k). - # Instead, let's just punt: use the minimum linelength reported by - # all of the supported platforms: 8192 (on NT/2K/XP). - lt_cv_sys_max_cmd_len=8192; - ;; - - amigaos*) - # On AmigaOS with pdksh, this test takes hours, literally. - # So we just punt and use a minimum line length of 8192. - lt_cv_sys_max_cmd_len=8192; - ;; - - netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) - # This has been around since 386BSD, at least. Likely further. - if test -x /sbin/sysctl; then - lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` - elif test -x /usr/sbin/sysctl; then - lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` - else - lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs - fi - # And add a safety zone - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` - ;; - - interix*) - # We know the value 262144 and hardcode it with a safety zone (like BSD) - lt_cv_sys_max_cmd_len=196608 - ;; - - osf*) - # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure - # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not - # nice to cause kernel panics so lets avoid the loop below. - # First set a reasonable default. - lt_cv_sys_max_cmd_len=16384 - # - if test -x /sbin/sysconfig; then - case `/sbin/sysconfig -q proc exec_disable_arg_limit` in - *1*) lt_cv_sys_max_cmd_len=-1 ;; - esac - fi - ;; - sco3.2v5*) - lt_cv_sys_max_cmd_len=102400 - ;; - sysv5* | sco5v6* | sysv4.2uw2*) - kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` - if test -n "$kargmax"; then - lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` - else - lt_cv_sys_max_cmd_len=32768 - fi - ;; - *) - lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` - if test -n "$lt_cv_sys_max_cmd_len"; then - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` - else - # Make teststring a little bigger before we do anything with it. - # a 1K string should be a reasonable start. - for i in 1 2 3 4 5 6 7 8 ; do - teststring=$teststring$teststring - done - SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} - # If test is not a shell built-in, we'll probably end up computing a - # maximum length that is only half of the actual maximum length, but - # we can't tell. - while { test "X"`$SHELL $0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \ - = "XX$teststring$teststring"; } >/dev/null 2>&1 && - test $i != 17 # 1/2 MB should be enough - do - i=`expr $i + 1` - teststring=$teststring$teststring - done - # Only check the string length outside the loop. - lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` - teststring= - # Add a significant safety factor because C++ compilers can tack on - # massive amounts of additional arguments before passing them to the - # linker. It appears as though 1/2 is a usable value. - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` - fi - ;; - esac - -fi - -if test -n $lt_cv_sys_max_cmd_len ; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 -$as_echo "$lt_cv_sys_max_cmd_len" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 -$as_echo "none" >&6; } -fi -max_cmd_len=$lt_cv_sys_max_cmd_len - - - - - - -: ${CP="cp -f"} -: ${MV="mv -f"} -: ${RM="rm -f"} - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands some XSI constructs" >&5 -$as_echo_n "checking whether the shell understands some XSI constructs... " >&6; } -# Try some XSI features -xsi_shell=no -( _lt_dummy="a/b/c" - test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \ - = c,a/b,, \ - && eval 'test $(( 1 + 1 )) -eq 2 \ - && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ - && xsi_shell=yes -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $xsi_shell" >&5 -$as_echo "$xsi_shell" >&6; } - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands \"+=\"" >&5 -$as_echo_n "checking whether the shell understands \"+=\"... " >&6; } -lt_shell_append=no -( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \ - >/dev/null 2>&1 \ - && lt_shell_append=yes -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_shell_append" >&5 -$as_echo "$lt_shell_append" >&6; } - - -if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then - lt_unset=unset -else - lt_unset=false -fi - - - - - -# test EBCDIC or ASCII -case `echo X|tr X '\101'` in - A) # ASCII based system - # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr - lt_SP2NL='tr \040 \012' - lt_NL2SP='tr \015\012 \040\040' - ;; - *) # EBCDIC based system - lt_SP2NL='tr \100 \n' - lt_NL2SP='tr \r\n \100\100' - ;; -esac - - - - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 -$as_echo_n "checking for $LD option to reload object files... " >&6; } -if test "${lt_cv_ld_reload_flag+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_ld_reload_flag='-r' -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 -$as_echo "$lt_cv_ld_reload_flag" >&6; } -reload_flag=$lt_cv_ld_reload_flag -case $reload_flag in -"" | " "*) ;; -*) reload_flag=" $reload_flag" ;; -esac -reload_cmds='$LD$reload_flag -o $output$reload_objs' -case $host_os in - darwin*) - if test "$GCC" = yes; then - reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs' - else - reload_cmds='$LD$reload_flag -o $output$reload_objs' - fi - ;; -esac - - - - - - - - - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. -set dummy ${ac_tool_prefix}objdump; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_OBJDUMP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$OBJDUMP"; then - ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -OBJDUMP=$ac_cv_prog_OBJDUMP -if test -n "$OBJDUMP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 -$as_echo "$OBJDUMP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_OBJDUMP"; then - ac_ct_OBJDUMP=$OBJDUMP - # Extract the first word of "objdump", so it can be a program name with args. -set dummy objdump; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_OBJDUMP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_OBJDUMP"; then - ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_OBJDUMP="objdump" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP -if test -n "$ac_ct_OBJDUMP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 -$as_echo "$ac_ct_OBJDUMP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_OBJDUMP" = x; then - OBJDUMP="false" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - OBJDUMP=$ac_ct_OBJDUMP - fi -else - OBJDUMP="$ac_cv_prog_OBJDUMP" -fi - -test -z "$OBJDUMP" && OBJDUMP=objdump - - - - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 -$as_echo_n "checking how to recognize dependent libraries... " >&6; } -if test "${lt_cv_deplibs_check_method+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_file_magic_cmd='$MAGIC_CMD' -lt_cv_file_magic_test_file= -lt_cv_deplibs_check_method='unknown' -# Need to set the preceding variable on all platforms that support -# interlibrary dependencies. -# 'none' -- dependencies not supported. -# `unknown' -- same as none, but documents that we really don't know. -# 'pass_all' -- all dependencies passed with no checks. -# 'test_compile' -- check by making test program. -# 'file_magic [[regex]]' -- check by looking for files in library path -# which responds to the $file_magic_cmd with a given extended regex. -# If you have `file' or equivalent on your system and you're not sure -# whether `pass_all' will *always* work, you probably want this one. - -case $host_os in -aix[4-9]*) - lt_cv_deplibs_check_method=pass_all - ;; - -beos*) - lt_cv_deplibs_check_method=pass_all - ;; - -bsdi[45]*) - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' - lt_cv_file_magic_cmd='/usr/bin/file -L' - lt_cv_file_magic_test_file=/shlib/libc.so - ;; - -cygwin*) - # func_win32_libid is a shell function defined in ltmain.sh - lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' - lt_cv_file_magic_cmd='func_win32_libid' - ;; - -mingw* | pw32*) - # Base MSYS/MinGW do not provide the 'file' command needed by - # func_win32_libid shell function, so use a weaker test based on 'objdump', - # unless we find 'file', for example because we are cross-compiling. - if ( file / ) >/dev/null 2>&1; then - lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' - lt_cv_file_magic_cmd='func_win32_libid' - else - lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?' - lt_cv_file_magic_cmd='$OBJDUMP -f' - fi - ;; - -cegcc) - # use the weaker test based on 'objdump'. See mingw*. - lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' - lt_cv_file_magic_cmd='$OBJDUMP -f' - ;; - -darwin* | rhapsody*) - lt_cv_deplibs_check_method=pass_all - ;; - -freebsd* | dragonfly*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then - case $host_cpu in - i*86 ) - # Not sure whether the presence of OpenBSD here was a mistake. - # Let's accept both of them until this is cleared up. - lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' - lt_cv_file_magic_cmd=/usr/bin/file - lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` - ;; - esac - else - lt_cv_deplibs_check_method=pass_all - fi - ;; - -gnu*) - lt_cv_deplibs_check_method=pass_all - ;; - -hpux10.20* | hpux11*) - lt_cv_file_magic_cmd=/usr/bin/file - case $host_cpu in - ia64*) - lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' - lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so - ;; - hppa*64*) - lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]' - lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl - ;; - *) - lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library' - lt_cv_file_magic_test_file=/usr/lib/libc.sl - ;; - esac - ;; - -interix[3-9]*) - # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' - ;; - -irix5* | irix6* | nonstopux*) - case $LD in - *-32|*"-32 ") libmagic=32-bit;; - *-n32|*"-n32 ") libmagic=N32;; - *-64|*"-64 ") libmagic=64-bit;; - *) libmagic=never-match;; - esac - lt_cv_deplibs_check_method=pass_all - ;; - -# This must be Linux ELF. -linux* | k*bsd*-gnu | kopensolaris*-gnu) - lt_cv_deplibs_check_method=pass_all - ;; - -netbsd* | netbsdelf*-gnu) - if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' - else - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' - fi - ;; - -newos6*) - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' - lt_cv_file_magic_cmd=/usr/bin/file - lt_cv_file_magic_test_file=/usr/lib/libnls.so - ;; - -*nto* | *qnx*) - lt_cv_deplibs_check_method=pass_all - ;; - -openbsd*) - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' - else - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' - fi - ;; - -osf3* | osf4* | osf5*) - lt_cv_deplibs_check_method=pass_all - ;; - -rdos*) - lt_cv_deplibs_check_method=pass_all - ;; - -solaris*) - lt_cv_deplibs_check_method=pass_all - ;; - -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - lt_cv_deplibs_check_method=pass_all - ;; - -sysv4 | sysv4.3*) - case $host_vendor in - motorola) - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' - lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` - ;; - ncr) - lt_cv_deplibs_check_method=pass_all - ;; - sequent) - lt_cv_file_magic_cmd='/bin/file' - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' - ;; - sni) - lt_cv_file_magic_cmd='/bin/file' - lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" - lt_cv_file_magic_test_file=/lib/libc.so - ;; - siemens) - lt_cv_deplibs_check_method=pass_all - ;; - pc) - lt_cv_deplibs_check_method=pass_all - ;; - esac - ;; - -tpf*) - lt_cv_deplibs_check_method=pass_all - ;; -esac - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 -$as_echo "$lt_cv_deplibs_check_method" >&6; } -file_magic_cmd=$lt_cv_file_magic_cmd -deplibs_check_method=$lt_cv_deplibs_check_method -test -z "$deplibs_check_method" && deplibs_check_method=unknown - - - - - - - - - - - - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. -set dummy ${ac_tool_prefix}ar; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_AR+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$AR"; then - ac_cv_prog_AR="$AR" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_AR="${ac_tool_prefix}ar" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -AR=$ac_cv_prog_AR -if test -n "$AR"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 -$as_echo "$AR" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_AR"; then - ac_ct_AR=$AR - # Extract the first word of "ar", so it can be a program name with args. -set dummy ar; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_AR+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_AR"; then - ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_AR="ar" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_AR=$ac_cv_prog_ac_ct_AR -if test -n "$ac_ct_AR"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 -$as_echo "$ac_ct_AR" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_AR" = x; then - AR="false" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - AR=$ac_ct_AR - fi -else - AR="$ac_cv_prog_AR" -fi - -test -z "$AR" && AR=ar -test -z "$AR_FLAGS" && AR_FLAGS=cru - - - - - - - - - - - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. -set dummy ${ac_tool_prefix}strip; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_STRIP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$STRIP"; then - ac_cv_prog_STRIP="$STRIP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_STRIP="${ac_tool_prefix}strip" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -STRIP=$ac_cv_prog_STRIP -if test -n "$STRIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 -$as_echo "$STRIP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_STRIP"; then - ac_ct_STRIP=$STRIP - # Extract the first word of "strip", so it can be a program name with args. -set dummy strip; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_STRIP"; then - ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_STRIP="strip" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP -if test -n "$ac_ct_STRIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 -$as_echo "$ac_ct_STRIP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_STRIP" = x; then - STRIP=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - STRIP=$ac_ct_STRIP - fi -else - STRIP="$ac_cv_prog_STRIP" -fi - -test -z "$STRIP" && STRIP=: - - - - - - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. -set dummy ${ac_tool_prefix}ranlib; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_RANLIB+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$RANLIB"; then - ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -RANLIB=$ac_cv_prog_RANLIB -if test -n "$RANLIB"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 -$as_echo "$RANLIB" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_RANLIB"; then - ac_ct_RANLIB=$RANLIB - # Extract the first word of "ranlib", so it can be a program name with args. -set dummy ranlib; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_RANLIB"; then - ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_RANLIB="ranlib" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB -if test -n "$ac_ct_RANLIB"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 -$as_echo "$ac_ct_RANLIB" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_RANLIB" = x; then - RANLIB=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - RANLIB=$ac_ct_RANLIB - fi -else - RANLIB="$ac_cv_prog_RANLIB" -fi - -test -z "$RANLIB" && RANLIB=: - - - - - - -# Determine commands to create old-style static archives. -old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' -old_postinstall_cmds='chmod 644 $oldlib' -old_postuninstall_cmds= - -if test -n "$RANLIB"; then - case $host_os in - openbsd*) - old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib" - ;; - *) - old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib" - ;; - esac - old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" -fi - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -# If no C compiler was specified, use CC. -LTCC=${LTCC-"$CC"} - -# If no C compiler flags were specified, use CFLAGS. -LTCFLAGS=${LTCFLAGS-"$CFLAGS"} - -# Allow CC to be a program name with arguments. -compiler=$CC - - -# Check for command to grab the raw symbol name followed by C symbol from nm. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 -$as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } -if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - -# These are sane defaults that work on at least a few old systems. -# [They come from Ultrix. What could be older than Ultrix?!! ;)] - -# Character class describing NM global symbol codes. -symcode='[BCDEGRST]' - -# Regexp to match symbols that can be accessed directly from C. -sympat='\([_A-Za-z][_A-Za-z0-9]*\)' - -# Define system-specific variables. -case $host_os in -aix*) - symcode='[BCDT]' - ;; -cygwin* | mingw* | pw32* | cegcc*) - symcode='[ABCDGISTW]' - ;; -hpux*) - if test "$host_cpu" = ia64; then - symcode='[ABCDEGRST]' - fi - ;; -irix* | nonstopux*) - symcode='[BCDEGRST]' - ;; -osf*) - symcode='[BCDEGQRST]' - ;; -solaris*) - symcode='[BDRT]' - ;; -sco3.2v5*) - symcode='[DT]' - ;; -sysv4.2uw2*) - symcode='[DT]' - ;; -sysv5* | sco5v6* | unixware* | OpenUNIX*) - symcode='[ABDT]' - ;; -sysv4) - symcode='[DFNSTU]' - ;; -esac - -# If we're using GNU nm, then use its standard symbol codes. -case `$NM -V 2>&1` in -*GNU* | *'with BFD'*) - symcode='[ABCDGIRSTW]' ;; -esac - -# Transform an extracted symbol line into a proper C declaration. -# Some systems (esp. on ia64) link data and code symbols differently, -# so use this general approach. -lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" - -# Transform an extracted symbol line into symbol name and symbol address -lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'" -lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'" - -# Handle CRLF in mingw tool chain -opt_cr= -case $build_os in -mingw*) - opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp - ;; -esac - -# Try without a prefix underscore, then with it. -for ac_symprfx in "" "_"; do - - # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. - symxfrm="\\1 $ac_symprfx\\2 \\2" - - # Write the raw and C identifiers. - if test "$lt_cv_nm_interface" = "MS dumpbin"; then - # Fake it for dumpbin and say T for any non-static function - # and D for any global variable. - # Also find C++ and __fastcall symbols from MSVC++, - # which start with @ or ?. - lt_cv_sys_global_symbol_pipe="$AWK '"\ -" {last_section=section; section=\$ 3};"\ -" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ -" \$ 0!~/External *\|/{next};"\ -" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ -" {if(hide[section]) next};"\ -" {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ -" {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ -" s[1]~/^[@?]/{print s[1], s[1]; next};"\ -" s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ -" ' prfx=^$ac_symprfx" - else - lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" - fi - - # Check to see that the pipe works correctly. - pipe_works=no - - rm -f conftest* - cat > conftest.$ac_ext <<_LT_EOF -#ifdef __cplusplus -extern "C" { -#endif -char nm_test_var; -void nm_test_func(void); -void nm_test_func(void){} -#ifdef __cplusplus -} -#endif -int main(){nm_test_var='a';nm_test_func();return(0);} -_LT_EOF - - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - # Now try to grab the symbols. - nlist=conftest.nm - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\""; } >&5 - (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && test -s "$nlist"; then - # Try sorting and uniquifying the output. - if sort "$nlist" | uniq > "$nlist"T; then - mv -f "$nlist"T "$nlist" - else - rm -f "$nlist"T - fi - - # Make sure that we snagged all the symbols we need. - if $GREP ' nm_test_var$' "$nlist" >/dev/null; then - if $GREP ' nm_test_func$' "$nlist" >/dev/null; then - cat <<_LT_EOF > conftest.$ac_ext -#ifdef __cplusplus -extern "C" { -#endif - -_LT_EOF - # Now generate the symbol file. - eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' - - cat <<_LT_EOF >> conftest.$ac_ext - -/* The mapping between symbol names and symbols. */ -const struct { - const char *name; - void *address; -} -lt__PROGRAM__LTX_preloaded_symbols[] = -{ - { "@PROGRAM@", (void *) 0 }, -_LT_EOF - $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext - cat <<\_LT_EOF >> conftest.$ac_ext - {0, (void *) 0} -}; - -/* This works around a problem in FreeBSD linker */ -#ifdef FREEBSD_WORKAROUND -static const void *lt_preloaded_setup() { - return lt__PROGRAM__LTX_preloaded_symbols; -} -#endif - -#ifdef __cplusplus -} -#endif -_LT_EOF - # Now try linking the two files. - mv conftest.$ac_objext conftstm.$ac_objext - lt_save_LIBS="$LIBS" - lt_save_CFLAGS="$CFLAGS" - LIBS="conftstm.$ac_objext" - CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 - (eval $ac_link) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && test -s conftest${ac_exeext}; then - pipe_works=yes - fi - LIBS="$lt_save_LIBS" - CFLAGS="$lt_save_CFLAGS" - else - echo "cannot find nm_test_func in $nlist" >&5 - fi - else - echo "cannot find nm_test_var in $nlist" >&5 - fi - else - echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 - fi - else - echo "$progname: failed program was:" >&5 - cat conftest.$ac_ext >&5 - fi - rm -rf conftest* conftst* - - # Do not use the global_symbol_pipe unless it works. - if test "$pipe_works" = yes; then - break - else - lt_cv_sys_global_symbol_pipe= - fi -done - -fi - -if test -z "$lt_cv_sys_global_symbol_pipe"; then - lt_cv_sys_global_symbol_to_cdecl= -fi -if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 -$as_echo "failed" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 -$as_echo "ok" >&6; } -fi - - - - - - - - - - - - - - - - - - - - - - - -@%:@ Check whether --enable-libtool-lock was given. -if test "${enable_libtool_lock+set}" = set; then : - enableval=$enable_libtool_lock; -fi - -test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes - -# Some flags need to be propagated to the compiler or linker for good -# libtool support. -case $host in -ia64-*-hpux*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - case `/usr/bin/file conftest.$ac_objext` in - *ELF-32*) - HPUX_IA64_MODE="32" - ;; - *ELF-64*) - HPUX_IA64_MODE="64" - ;; - esac - fi - rm -rf conftest* - ;; -*-*-irix6*) - # Find out which ABI we are using. - echo '#line __oline__ "configure"' > conftest.$ac_ext - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - if test "$lt_cv_prog_gnu_ld" = yes; then - case `/usr/bin/file conftest.$ac_objext` in - *32-bit*) - LD="${LD-ld} -melf32bsmip" - ;; - *N32*) - LD="${LD-ld} -melf32bmipn32" - ;; - *64-bit*) - LD="${LD-ld} -melf64bmip" - ;; - esac - else - case `/usr/bin/file conftest.$ac_objext` in - *32-bit*) - LD="${LD-ld} -32" - ;; - *N32*) - LD="${LD-ld} -n32" - ;; - *64-bit*) - LD="${LD-ld} -64" - ;; - esac - fi - fi - rm -rf conftest* - ;; - -x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ -s390*-*linux*|s390*-*tpf*|sparc*-*linux*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - case `/usr/bin/file conftest.o` in - *32-bit*) - case $host in - x86_64-*kfreebsd*-gnu) - LD="${LD-ld} -m elf_i386_fbsd" - ;; - x86_64-*linux*) - LD="${LD-ld} -m elf_i386" - ;; - ppc64-*linux*|powerpc64-*linux*) - LD="${LD-ld} -m elf32ppclinux" - ;; - s390x-*linux*) - LD="${LD-ld} -m elf_s390" - ;; - sparc64-*linux*) - LD="${LD-ld} -m elf32_sparc" - ;; - esac - ;; - *64-bit*) - case $host in - x86_64-*kfreebsd*-gnu) - LD="${LD-ld} -m elf_x86_64_fbsd" - ;; - x86_64-*linux*) - LD="${LD-ld} -m elf_x86_64" - ;; - ppc*-*linux*|powerpc*-*linux*) - LD="${LD-ld} -m elf64ppc" - ;; - s390*-*linux*|s390*-*tpf*) - LD="${LD-ld} -m elf64_s390" - ;; - sparc*-*linux*) - LD="${LD-ld} -m elf64_sparc" - ;; - esac - ;; - esac - fi - rm -rf conftest* - ;; - -*-*-sco3.2v5*) - # On SCO OpenServer 5, we need -belf to get full-featured binaries. - SAVE_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS -belf" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 -$as_echo_n "checking whether the C compiler needs -belf... " >&6; } -if test "${lt_cv_cc_needs_belf+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - lt_cv_cc_needs_belf=yes -else - lt_cv_cc_needs_belf=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 -$as_echo "$lt_cv_cc_needs_belf" >&6; } - if test x"$lt_cv_cc_needs_belf" != x"yes"; then - # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf - CFLAGS="$SAVE_CFLAGS" - fi - ;; -sparc*-*solaris*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - case `/usr/bin/file conftest.o` in - *64-bit*) - case $lt_cv_prog_gnu_ld in - yes*) LD="${LD-ld} -m elf64_sparc" ;; - *) - if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then - LD="${LD-ld} -64" - fi - ;; - esac - ;; - esac - fi - rm -rf conftest* - ;; -esac - -need_locks="$enable_libtool_lock" - - - case $host_os in - rhapsody* | darwin*) - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. -set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_DSYMUTIL+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$DSYMUTIL"; then - ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -DSYMUTIL=$ac_cv_prog_DSYMUTIL -if test -n "$DSYMUTIL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 -$as_echo "$DSYMUTIL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_DSYMUTIL"; then - ac_ct_DSYMUTIL=$DSYMUTIL - # Extract the first word of "dsymutil", so it can be a program name with args. -set dummy dsymutil; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_DSYMUTIL+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_DSYMUTIL"; then - ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL -if test -n "$ac_ct_DSYMUTIL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 -$as_echo "$ac_ct_DSYMUTIL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_DSYMUTIL" = x; then - DSYMUTIL=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - DSYMUTIL=$ac_ct_DSYMUTIL - fi -else - DSYMUTIL="$ac_cv_prog_DSYMUTIL" -fi - - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. -set dummy ${ac_tool_prefix}nmedit; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_NMEDIT+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$NMEDIT"; then - ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -NMEDIT=$ac_cv_prog_NMEDIT -if test -n "$NMEDIT"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 -$as_echo "$NMEDIT" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_NMEDIT"; then - ac_ct_NMEDIT=$NMEDIT - # Extract the first word of "nmedit", so it can be a program name with args. -set dummy nmedit; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_NMEDIT+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_NMEDIT"; then - ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_NMEDIT="nmedit" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT -if test -n "$ac_ct_NMEDIT"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 -$as_echo "$ac_ct_NMEDIT" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_NMEDIT" = x; then - NMEDIT=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - NMEDIT=$ac_ct_NMEDIT - fi -else - NMEDIT="$ac_cv_prog_NMEDIT" -fi - - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. -set dummy ${ac_tool_prefix}lipo; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_LIPO+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$LIPO"; then - ac_cv_prog_LIPO="$LIPO" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_LIPO="${ac_tool_prefix}lipo" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -LIPO=$ac_cv_prog_LIPO -if test -n "$LIPO"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 -$as_echo "$LIPO" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_LIPO"; then - ac_ct_LIPO=$LIPO - # Extract the first word of "lipo", so it can be a program name with args. -set dummy lipo; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_LIPO+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_LIPO"; then - ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_LIPO="lipo" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO -if test -n "$ac_ct_LIPO"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 -$as_echo "$ac_ct_LIPO" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_LIPO" = x; then - LIPO=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - LIPO=$ac_ct_LIPO - fi -else - LIPO="$ac_cv_prog_LIPO" -fi - - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. -set dummy ${ac_tool_prefix}otool; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_OTOOL+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$OTOOL"; then - ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_OTOOL="${ac_tool_prefix}otool" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -OTOOL=$ac_cv_prog_OTOOL -if test -n "$OTOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 -$as_echo "$OTOOL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_OTOOL"; then - ac_ct_OTOOL=$OTOOL - # Extract the first word of "otool", so it can be a program name with args. -set dummy otool; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_OTOOL+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_OTOOL"; then - ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_OTOOL="otool" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL -if test -n "$ac_ct_OTOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 -$as_echo "$ac_ct_OTOOL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_OTOOL" = x; then - OTOOL=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - OTOOL=$ac_ct_OTOOL - fi -else - OTOOL="$ac_cv_prog_OTOOL" -fi - - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. -set dummy ${ac_tool_prefix}otool64; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_OTOOL64+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$OTOOL64"; then - ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -OTOOL64=$ac_cv_prog_OTOOL64 -if test -n "$OTOOL64"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 -$as_echo "$OTOOL64" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_OTOOL64"; then - ac_ct_OTOOL64=$OTOOL64 - # Extract the first word of "otool64", so it can be a program name with args. -set dummy otool64; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_OTOOL64+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_OTOOL64"; then - ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_OTOOL64="otool64" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 -if test -n "$ac_ct_OTOOL64"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 -$as_echo "$ac_ct_OTOOL64" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_OTOOL64" = x; then - OTOOL64=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - OTOOL64=$ac_ct_OTOOL64 - fi -else - OTOOL64="$ac_cv_prog_OTOOL64" -fi - - - - - - - - - - - - - - - - - - - - - - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 -$as_echo_n "checking for -single_module linker flag... " >&6; } -if test "${lt_cv_apple_cc_single_mod+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_apple_cc_single_mod=no - if test -z "${LT_MULTI_MODULE}"; then - # By default we will add the -single_module flag. You can override - # by either setting the environment variable LT_MULTI_MODULE - # non-empty at configure time, or by adding -multi_module to the - # link flags. - rm -rf libconftest.dylib* - echo "int foo(void){return 1;}" > conftest.c - echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ --dynamiclib -Wl,-single_module conftest.c" >&5 - $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ - -dynamiclib -Wl,-single_module conftest.c 2>conftest.err - _lt_result=$? - if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then - lt_cv_apple_cc_single_mod=yes - else - cat conftest.err >&5 - fi - rm -rf libconftest.dylib* - rm -f conftest.* - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 -$as_echo "$lt_cv_apple_cc_single_mod" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 -$as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } -if test "${lt_cv_ld_exported_symbols_list+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_ld_exported_symbols_list=no - save_LDFLAGS=$LDFLAGS - echo "_main" > conftest.sym - LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - lt_cv_ld_exported_symbols_list=yes -else - lt_cv_ld_exported_symbols_list=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - LDFLAGS="$save_LDFLAGS" - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 -$as_echo "$lt_cv_ld_exported_symbols_list" >&6; } - case $host_os in - rhapsody* | darwin1.[012]) - _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; - darwin1.*) - _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; - darwin*) # darwin 5.x on - # if running on 10.5 or later, the deployment target defaults - # to the OS version, if on x86, and 10.4, the deployment - # target defaults to 10.4. Don't you love it? - case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in - 10.0,*86*-darwin8*|10.0,*-darwin[91]*) - _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; - 10.[012]*) - _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; - 10.*) - _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; - esac - ;; - esac - if test "$lt_cv_apple_cc_single_mod" = "yes"; then - _lt_dar_single_mod='$single_module' - fi - if test "$lt_cv_ld_exported_symbols_list" = "yes"; then - _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' - else - _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' - fi - if test "$DSYMUTIL" != ":"; then - _lt_dsymutil='~$DSYMUTIL $lib || :' - else - _lt_dsymutil= - fi - ;; - esac - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 -$as_echo_n "checking how to run the C preprocessor... " >&6; } -# On Suns, sometimes $CPP names a directory. -if test -n "$CPP" && test -d "$CPP"; then - CPP= -fi -if test -z "$CPP"; then - if test "${ac_cv_prog_CPP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - # Double quotes because CPP needs to be expanded - for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" - do - ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -@%:@ifdef __STDC__ -@%:@ include -@%:@else -@%:@ include -@%:@endif - Syntax error -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -@%:@include -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - break -fi - - done - ac_cv_prog_CPP=$CPP - -fi - CPP=$ac_cv_prog_CPP -else - ac_cv_prog_CPP=$CPP -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 -$as_echo "$CPP" >&6; } -ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -@%:@ifdef __STDC__ -@%:@ include -@%:@else -@%:@ include -@%:@endif - Syntax error -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -@%:@include -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error "C preprocessor \"$CPP\" fails sanity check -See \`config.log' for more details." "$LINENO" 5; } -fi - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 -$as_echo_n "checking for ANSI C header files... " >&6; } -if test "${ac_cv_header_stdc+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#include -#include - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_header_stdc=yes -else - ac_cv_header_stdc=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - -if test $ac_cv_header_stdc = yes; then - # SunOS 4.x string.h does not declare mem*, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "memchr" >/dev/null 2>&1; then : - -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "free" >/dev/null 2>&1; then : - -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. - if test "$cross_compiling" = yes; then : - : -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#if ((' ' & 0x0FF) == 0x020) -# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') -# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) -#else -# define ISLOWER(c) \ - (('a' <= (c) && (c) <= 'i') \ - || ('j' <= (c) && (c) <= 'r') \ - || ('s' <= (c) && (c) <= 'z')) -# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) -#endif - -#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) -int -main () -{ - int i; - for (i = 0; i < 256; i++) - if (XOR (islower (i), ISLOWER (i)) - || toupper (i) != TOUPPER (i)) - return 2; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - -else - ac_cv_header_stdc=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - -fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 -$as_echo "$ac_cv_header_stdc" >&6; } -if test $ac_cv_header_stdc = yes; then - -$as_echo "@%:@define STDC_HEADERS 1" >>confdefs.h - -fi - -# On IRIX 5.3, sys/types and inttypes.h are conflicting. -for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ - inttypes.h stdint.h unistd.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default -" -eval as_val=\$$as_ac_Header - if test "x$as_val" = x""yes; then : - cat >>confdefs.h <<_ACEOF -@%:@define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - -fi - -done - - -for ac_header in dlfcn.h -do : - ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default -" -if test "x$ac_cv_header_dlfcn_h" = x""yes; then : - cat >>confdefs.h <<_ACEOF -@%:@define HAVE_DLFCN_H 1 -_ACEOF - -fi - -done - - - -# Set options - - - - enable_dlopen=no - - - enable_win32_dll=no - - - @%:@ Check whether --enable-shared was given. -if test "${enable_shared+set}" = set; then : - enableval=$enable_shared; p=${PACKAGE-default} - case $enableval in - yes) enable_shared=yes ;; - no) enable_shared=no ;; - *) - enable_shared=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_shared=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac -else - enable_shared=yes -fi - - - - - - - - - - @%:@ Check whether --enable-static was given. -if test "${enable_static+set}" = set; then : - enableval=$enable_static; p=${PACKAGE-default} - case $enableval in - yes) enable_static=yes ;; - no) enable_static=no ;; - *) - enable_static=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_static=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac -else - enable_static=yes -fi - - - - - - - - - - -@%:@ Check whether --with-pic was given. -if test "${with_pic+set}" = set; then : - withval=$with_pic; pic_mode="$withval" -else - pic_mode=default -fi - - -test -z "$pic_mode" && pic_mode=default - - - - - - - - @%:@ Check whether --enable-fast-install was given. -if test "${enable_fast_install+set}" = set; then : - enableval=$enable_fast_install; p=${PACKAGE-default} - case $enableval in - yes) enable_fast_install=yes ;; - no) enable_fast_install=no ;; - *) - enable_fast_install=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_fast_install=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac -else - enable_fast_install=yes -fi - - - - - - - - - - - -# This can be used to rebuild libtool when needed -LIBTOOL_DEPS="$ltmain" - -# Always use our own libtool. -LIBTOOL='$(SHELL) $(top_builddir)/libtool' - - - - - - - - - - - - - - - - - - - - - - - - - -test -z "$LN_S" && LN_S="ln -s" - - - - - - - - - - - - - - -if test -n "${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 -$as_echo_n "checking for objdir... " >&6; } -if test "${lt_cv_objdir+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - rm -f .libs 2>/dev/null -mkdir .libs 2>/dev/null -if test -d .libs; then - lt_cv_objdir=.libs -else - # MS-DOS does not allow filenames that begin with a dot. - lt_cv_objdir=_libs -fi -rmdir .libs 2>/dev/null -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 -$as_echo "$lt_cv_objdir" >&6; } -objdir=$lt_cv_objdir - - - - - -cat >>confdefs.h <<_ACEOF -@%:@define LT_OBJDIR "$lt_cv_objdir/" -_ACEOF - - - - - - - - - - - - - - - - - -case $host_os in -aix3*) - # AIX sometimes has problems with the GCC collect2 program. For some - # reason, if we set the COLLECT_NAMES environment variable, the problems - # vanish in a puff of smoke. - if test "X${COLLECT_NAMES+set}" != Xset; then - COLLECT_NAMES= - export COLLECT_NAMES - fi - ;; -esac - -# Sed substitution that helps us do robust quoting. It backslashifies -# metacharacters that are still active within double-quoted strings. -sed_quote_subst='s/\(["`$\\]\)/\\\1/g' - -# Same as above, but do not quote variable references. -double_quote_subst='s/\(["`\\]\)/\\\1/g' - -# Sed substitution to delay expansion of an escaped shell variable in a -# double_quote_subst'ed string. -delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' - -# Sed substitution to delay expansion of an escaped single quote. -delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' - -# Sed substitution to avoid accidental globbing in evaled expressions -no_glob_subst='s/\*/\\\*/g' - -# Global variables: -ofile=libtool -can_build_shared=yes - -# All known linkers require a `.a' archive for static linking (except MSVC, -# which needs '.lib'). -libext=a - -with_gnu_ld="$lt_cv_prog_gnu_ld" - -old_CC="$CC" -old_CFLAGS="$CFLAGS" - -# Set sane defaults for various variables -test -z "$CC" && CC=cc -test -z "$LTCC" && LTCC=$CC -test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS -test -z "$LD" && LD=ld -test -z "$ac_objext" && ac_objext=o - -for cc_temp in $compiler""; do - case $cc_temp in - compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; - distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; - \-*) ;; - *) break;; - esac -done -cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` - - -# Only perform the check for file, if the check method requires it -test -z "$MAGIC_CMD" && MAGIC_CMD=file -case $deplibs_check_method in -file_magic*) - if test "$file_magic_cmd" = '$MAGIC_CMD'; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 -$as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } -if test "${lt_cv_path_MAGIC_CMD+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $MAGIC_CMD in -[\\/*] | ?:[\\/]*) - lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. - ;; -*) - lt_save_MAGIC_CMD="$MAGIC_CMD" - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" - for ac_dir in $ac_dummy; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/${ac_tool_prefix}file; then - lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file" - if test -n "$file_magic_test_file"; then - case $deplibs_check_method in - "file_magic "*) - file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` - MAGIC_CMD="$lt_cv_path_MAGIC_CMD" - if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | - $EGREP "$file_magic_regex" > /dev/null; then - : - else - cat <<_LT_EOF 1>&2 - -*** Warning: the command libtool uses to detect shared libraries, -*** $file_magic_cmd, produces output that libtool cannot recognize. -*** The result is that libtool may fail to recognize shared libraries -*** as such. This will affect the creation of libtool libraries that -*** depend on shared libraries, but programs linked with such libtool -*** libraries will work regardless of this problem. Nevertheless, you -*** may want to report the problem to your system manager and/or to -*** bug-libtool@gnu.org - -_LT_EOF - fi ;; - esac - fi - break - fi - done - IFS="$lt_save_ifs" - MAGIC_CMD="$lt_save_MAGIC_CMD" - ;; -esac -fi - -MAGIC_CMD="$lt_cv_path_MAGIC_CMD" -if test -n "$MAGIC_CMD"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 -$as_echo "$MAGIC_CMD" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - - -if test -z "$lt_cv_path_MAGIC_CMD"; then - if test -n "$ac_tool_prefix"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5 -$as_echo_n "checking for file... " >&6; } -if test "${lt_cv_path_MAGIC_CMD+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $MAGIC_CMD in -[\\/*] | ?:[\\/]*) - lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. - ;; -*) - lt_save_MAGIC_CMD="$MAGIC_CMD" - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" - for ac_dir in $ac_dummy; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/file; then - lt_cv_path_MAGIC_CMD="$ac_dir/file" - if test -n "$file_magic_test_file"; then - case $deplibs_check_method in - "file_magic "*) - file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` - MAGIC_CMD="$lt_cv_path_MAGIC_CMD" - if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | - $EGREP "$file_magic_regex" > /dev/null; then - : - else - cat <<_LT_EOF 1>&2 - -*** Warning: the command libtool uses to detect shared libraries, -*** $file_magic_cmd, produces output that libtool cannot recognize. -*** The result is that libtool may fail to recognize shared libraries -*** as such. This will affect the creation of libtool libraries that -*** depend on shared libraries, but programs linked with such libtool -*** libraries will work regardless of this problem. Nevertheless, you -*** may want to report the problem to your system manager and/or to -*** bug-libtool@gnu.org - -_LT_EOF - fi ;; - esac - fi - break - fi - done - IFS="$lt_save_ifs" - MAGIC_CMD="$lt_save_MAGIC_CMD" - ;; -esac -fi - -MAGIC_CMD="$lt_cv_path_MAGIC_CMD" -if test -n "$MAGIC_CMD"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 -$as_echo "$MAGIC_CMD" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - else - MAGIC_CMD=: - fi -fi - - fi - ;; -esac - -# Use C for the default configuration in the libtool script - -lt_save_CC="$CC" -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - -# Source file extension for C test sources. -ac_ext=c - -# Object file extension for compiled C test sources. -objext=o -objext=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code="int some_variable = 0;" - -# Code to be used in simple link tests -lt_simple_link_test_code='int main(){return(0);}' - - - - - - - -# If no C compiler was specified, use CC. -LTCC=${LTCC-"$CC"} - -# If no C compiler flags were specified, use CFLAGS. -LTCFLAGS=${LTCFLAGS-"$CFLAGS"} - -# Allow CC to be a program name with arguments. -compiler=$CC - -# Save the default compiler, since it gets overwritten when the other -# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. -compiler_DEFAULT=$CC - -# save warnings/boilerplate of simple test code -ac_outfile=conftest.$ac_objext -echo "$lt_simple_compile_test_code" >conftest.$ac_ext -eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_compiler_boilerplate=`cat conftest.err` -$RM conftest* - -ac_outfile=conftest.$ac_objext -echo "$lt_simple_link_test_code" >conftest.$ac_ext -eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_linker_boilerplate=`cat conftest.err` -$RM -r conftest* - - -## CAVEAT EMPTOR: -## There is no encapsulation within the following macros, do not change -## the running order or otherwise move them around unless you know exactly -## what you are doing... -if test -n "$compiler"; then - -lt_prog_compiler_no_builtin_flag= - -if test "$GCC" = yes; then - lt_prog_compiler_no_builtin_flag=' -fno-builtin' - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 -$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } -if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_rtti_exceptions=no - ac_outfile=conftest.$ac_objext - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="-fno-rtti -fno-exceptions" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - # The option is referenced via a variable to avoid confusing sed. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&5) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&5 - echo "$as_me:__oline__: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s "$ac_outfile"; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings other than the usual output. - $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then - lt_cv_prog_compiler_rtti_exceptions=yes - fi - fi - $RM conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 -$as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } - -if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then - lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" -else - : -fi - -fi - - - - - - - lt_prog_compiler_wl= -lt_prog_compiler_pic= -lt_prog_compiler_static= - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 -$as_echo_n "checking for $compiler option to produce PIC... " >&6; } - - if test "$GCC" = yes; then - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_static='-static' - - case $host_os in - aix*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - lt_prog_compiler_static='-Bstatic' - fi - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - lt_prog_compiler_pic='-fPIC' - ;; - m68k) - # FIXME: we need at least 68020 code to build shared libraries, but - # adding the `-m68020' flag to GCC prevents building anything better, - # like `-m68040'. - lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' - ;; - esac - ;; - - beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) - # PIC is the default for these OSes. - ;; - - mingw* | cygwin* | pw32* | os2* | cegcc*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - # Although the cygwin gcc ignores -fPIC, still need this for old-style - # (--disable-auto-import) libraries - lt_prog_compiler_pic='-DDLL_EXPORT' - ;; - - darwin* | rhapsody*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - lt_prog_compiler_pic='-fno-common' - ;; - - hpux*) - # PIC is the default for 64-bit PA HP-UX, but not for 32-bit - # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag - # sets the default TLS model and affects inlining. - case $host_cpu in - hppa*64*) - # +Z the default - ;; - *) - lt_prog_compiler_pic='-fPIC' - ;; - esac - ;; - - interix[3-9]*) - # Interix 3.x gcc -fpic/-fPIC options generate broken code. - # Instead, we relocate shared libraries at runtime. - ;; - - msdosdjgpp*) - # Just because we use GCC doesn't mean we suddenly get shared libraries - # on systems that don't support them. - lt_prog_compiler_can_build_shared=no - enable_shared=no - ;; - - *nto* | *qnx*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - lt_prog_compiler_pic='-fPIC -shared' - ;; - - sysv4*MP*) - if test -d /usr/nec; then - lt_prog_compiler_pic=-Kconform_pic - fi - ;; - - *) - lt_prog_compiler_pic='-fPIC' - ;; - esac - else - # PORTME Check for flag to pass linker flags through the system compiler. - case $host_os in - aix*) - lt_prog_compiler_wl='-Wl,' - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - lt_prog_compiler_static='-Bstatic' - else - lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' - fi - ;; - - mingw* | cygwin* | pw32* | os2* | cegcc*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - lt_prog_compiler_pic='-DDLL_EXPORT' - ;; - - hpux9* | hpux10* | hpux11*) - lt_prog_compiler_wl='-Wl,' - # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but - # not for PA HP-UX. - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - lt_prog_compiler_pic='+Z' - ;; - esac - # Is there a better lt_prog_compiler_static that works with the bundled CC? - lt_prog_compiler_static='${wl}-a ${wl}archive' - ;; - - irix5* | irix6* | nonstopux*) - lt_prog_compiler_wl='-Wl,' - # PIC (with -KPIC) is the default. - lt_prog_compiler_static='-non_shared' - ;; - - linux* | k*bsd*-gnu | kopensolaris*-gnu) - case $cc_basename in - # old Intel for x86_64 which still supported -KPIC. - ecc*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-static' - ;; - # icc used to be incompatible with GCC. - # ICC 10 doesn't accept -KPIC any more. - icc* | ifort*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-fPIC' - lt_prog_compiler_static='-static' - ;; - # Lahey Fortran 8.1. - lf95*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='--shared' - lt_prog_compiler_static='--static' - ;; - pgcc* | pgf77* | pgf90* | pgf95*) - # Portland Group compilers (*not* the Pentium gcc compiler, - # which looks to be a dead project) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-fpic' - lt_prog_compiler_static='-Bstatic' - ;; - ccc*) - lt_prog_compiler_wl='-Wl,' - # All Alpha code is PIC. - lt_prog_compiler_static='-non_shared' - ;; - xl*) - # IBM XL C 8.0/Fortran 10.1 on PPC - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-qpic' - lt_prog_compiler_static='-qstaticlink' - ;; - *) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C 5.9 - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - lt_prog_compiler_wl='-Wl,' - ;; - *Sun\ F*) - # Sun Fortran 8.3 passes all unrecognized flags to the linker - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - lt_prog_compiler_wl='' - ;; - esac - ;; - esac - ;; - - newsos6) - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - ;; - - *nto* | *qnx*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - lt_prog_compiler_pic='-fPIC -shared' - ;; - - osf3* | osf4* | osf5*) - lt_prog_compiler_wl='-Wl,' - # All OSF/1 code is PIC. - lt_prog_compiler_static='-non_shared' - ;; - - rdos*) - lt_prog_compiler_static='-non_shared' - ;; - - solaris*) - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - case $cc_basename in - f77* | f90* | f95*) - lt_prog_compiler_wl='-Qoption ld ';; - *) - lt_prog_compiler_wl='-Wl,';; - esac - ;; - - sunos4*) - lt_prog_compiler_wl='-Qoption ld ' - lt_prog_compiler_pic='-PIC' - lt_prog_compiler_static='-Bstatic' - ;; - - sysv4 | sysv4.2uw2* | sysv4.3*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - ;; - - sysv4*MP*) - if test -d /usr/nec ;then - lt_prog_compiler_pic='-Kconform_pic' - lt_prog_compiler_static='-Bstatic' - fi - ;; - - sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - ;; - - unicos*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_can_build_shared=no - ;; - - uts4*) - lt_prog_compiler_pic='-pic' - lt_prog_compiler_static='-Bstatic' - ;; - - *) - lt_prog_compiler_can_build_shared=no - ;; - esac - fi - -case $host_os in - # For platforms which do not support PIC, -DPIC is meaningless: - *djgpp*) - lt_prog_compiler_pic= - ;; - *) - lt_prog_compiler_pic="$lt_prog_compiler_pic@&t@ -DPIC" - ;; -esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic" >&5 -$as_echo "$lt_prog_compiler_pic" >&6; } - - - - - - -# -# Check to make sure the PIC flag actually works. -# -if test -n "$lt_prog_compiler_pic"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 -$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } -if test "${lt_cv_prog_compiler_pic_works+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_pic_works=no - ac_outfile=conftest.$ac_objext - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="$lt_prog_compiler_pic@&t@ -DPIC" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - # The option is referenced via a variable to avoid confusing sed. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&5) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&5 - echo "$as_me:__oline__: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s "$ac_outfile"; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings other than the usual output. - $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then - lt_cv_prog_compiler_pic_works=yes - fi - fi - $RM conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 -$as_echo "$lt_cv_prog_compiler_pic_works" >&6; } - -if test x"$lt_cv_prog_compiler_pic_works" = xyes; then - case $lt_prog_compiler_pic in - "" | " "*) ;; - *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; - esac -else - lt_prog_compiler_pic= - lt_prog_compiler_can_build_shared=no -fi - -fi - - - - - - -# -# Check to make sure the static flag actually works. -# -wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 -$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } -if test "${lt_cv_prog_compiler_static_works+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_static_works=no - save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS $lt_tmp_static_flag" - echo "$lt_simple_link_test_code" > conftest.$ac_ext - if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then - # The linker can only warn and ignore the option if not recognized - # So say no if there are warnings - if test -s conftest.err; then - # Append any errors to the config.log. - cat conftest.err 1>&5 - $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if diff conftest.exp conftest.er2 >/dev/null; then - lt_cv_prog_compiler_static_works=yes - fi - else - lt_cv_prog_compiler_static_works=yes - fi - fi - $RM -r conftest* - LDFLAGS="$save_LDFLAGS" - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 -$as_echo "$lt_cv_prog_compiler_static_works" >&6; } - -if test x"$lt_cv_prog_compiler_static_works" = xyes; then - : -else - lt_prog_compiler_static= -fi - - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 -$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } -if test "${lt_cv_prog_compiler_c_o+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_c_o=no - $RM -r conftest 2>/dev/null - mkdir conftest - cd conftest - mkdir out - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - lt_compiler_flag="-o out/conftest2.$ac_objext" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&5) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&5 - echo "$as_me:__oline__: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s out/conftest2.$ac_objext - then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings - $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp - $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 - if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then - lt_cv_prog_compiler_c_o=yes - fi - fi - chmod u+w . 2>&5 - $RM conftest* - # SGI C++ compiler will create directory out/ii_files/ for - # template instantiation - test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files - $RM out/* && rmdir out - cd .. - $RM -r conftest - $RM conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 -$as_echo "$lt_cv_prog_compiler_c_o" >&6; } - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 -$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } -if test "${lt_cv_prog_compiler_c_o+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_c_o=no - $RM -r conftest 2>/dev/null - mkdir conftest - cd conftest - mkdir out - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - lt_compiler_flag="-o out/conftest2.$ac_objext" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&5) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&5 - echo "$as_me:__oline__: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s out/conftest2.$ac_objext - then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings - $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp - $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 - if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then - lt_cv_prog_compiler_c_o=yes - fi - fi - chmod u+w . 2>&5 - $RM conftest* - # SGI C++ compiler will create directory out/ii_files/ for - # template instantiation - test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files - $RM out/* && rmdir out - cd .. - $RM -r conftest - $RM conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 -$as_echo "$lt_cv_prog_compiler_c_o" >&6; } - - - - -hard_links="nottested" -if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then - # do not overwrite the value of need_locks provided by the user - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 -$as_echo_n "checking if we can lock with hard links... " >&6; } - hard_links=yes - $RM conftest* - ln conftest.a conftest.b 2>/dev/null && hard_links=no - touch conftest.a - ln conftest.a conftest.b 2>&5 || hard_links=no - ln conftest.a conftest.b 2>/dev/null && hard_links=no - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 -$as_echo "$hard_links" >&6; } - if test "$hard_links" = no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 -$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} - need_locks=warn - fi -else - need_locks=no -fi - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 -$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } - - runpath_var= - allow_undefined_flag= - always_export_symbols=no - archive_cmds= - archive_expsym_cmds= - compiler_needs_object=no - enable_shared_with_static_runtimes=no - export_dynamic_flag_spec= - export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - hardcode_automatic=no - hardcode_direct=no - hardcode_direct_absolute=no - hardcode_libdir_flag_spec= - hardcode_libdir_flag_spec_ld= - hardcode_libdir_separator= - hardcode_minus_L=no - hardcode_shlibpath_var=unsupported - inherit_rpath=no - link_all_deplibs=unknown - module_cmds= - module_expsym_cmds= - old_archive_from_new_cmds= - old_archive_from_expsyms_cmds= - thread_safe_flag_spec= - whole_archive_flag_spec= - # include_expsyms should be a list of space-separated symbols to be *always* - # included in the symbol list - include_expsyms= - # exclude_expsyms can be an extended regexp of symbols to exclude - # it will be wrapped by ` (' and `)$', so one must not match beginning or - # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', - # as well as any symbol that contains `d'. - exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' - # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out - # platforms (ab)use it in PIC code, but their linkers get confused if - # the symbol is explicitly referenced. Since portable code cannot - # rely on this symbol name, it's probably fine to never include it in - # preloaded symbol tables. - # Exclude shared library initialization/finalization symbols. - extract_expsyms_cmds= - - case $host_os in - cygwin* | mingw* | pw32* | cegcc*) - # FIXME: the MSVC++ port hasn't been tested in a loooong time - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - if test "$GCC" != yes; then - with_gnu_ld=no - fi - ;; - interix*) - # we just hope/assume this is gcc and not c89 (= MSVC++) - with_gnu_ld=yes - ;; - openbsd*) - with_gnu_ld=no - ;; - linux* | k*bsd*-gnu) - link_all_deplibs=no - ;; - esac - - ld_shlibs=yes - if test "$with_gnu_ld" = yes; then - # If archive_cmds runs LD, not CC, wlarc should be empty - wlarc='${wl}' - - # Set some defaults for GNU ld with shared library support. These - # are reset later if shared libraries are not supported. Putting them - # here allows them to be overridden if necessary. - runpath_var=LD_RUN_PATH - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - export_dynamic_flag_spec='${wl}--export-dynamic' - # ancient GNU ld didn't support --whole-archive et. al. - if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then - whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - else - whole_archive_flag_spec= - fi - supports_anon_versioning=no - case `$LD -v 2>&1` in - *GNU\ gold*) supports_anon_versioning=yes ;; - *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 - *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... - *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... - *\ 2.11.*) ;; # other 2.11 versions - *) supports_anon_versioning=yes ;; - esac - - # See if GNU ld supports shared libraries. - case $host_os in - aix[3-9]*) - # On AIX/PPC, the GNU linker is very broken - if test "$host_cpu" != ia64; then - ld_shlibs=no - cat <<_LT_EOF 1>&2 - -*** Warning: the GNU linker, at least up to release 2.9.1, is reported -*** to be unable to reliably create shared libraries on AIX. -*** Therefore, libtool is disabling shared libraries support. If you -*** really care for shared libraries, you may want to modify your PATH -*** so that a non-GNU linker is found, and then restart. - -_LT_EOF - fi - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='' - ;; - m68k) - archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_minus_L=yes - ;; - esac - ;; - - beos*) - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - allow_undefined_flag=unsupported - # Joseph Beckenbach says some releases of gcc - # support --undefined. This deserves some investigation. FIXME - archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - else - ld_shlibs=no - fi - ;; - - cygwin* | mingw* | pw32* | cegcc*) - # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, - # as there is no search path for DLLs. - hardcode_libdir_flag_spec='-L$libdir' - allow_undefined_flag=unsupported - always_export_symbols=no - enable_shared_with_static_runtimes=yes - export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' - - if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - # If the export-symbols file already is a .def file (1st line - # is EXPORTS), use it as is; otherwise, prepend... - archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - cp $export_symbols $output_objdir/$soname.def; - else - echo EXPORTS > $output_objdir/$soname.def; - cat $export_symbols >> $output_objdir/$soname.def; - fi~ - $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - else - ld_shlibs=no - fi - ;; - - interix[3-9]*) - hardcode_direct=no - hardcode_shlibpath_var=no - hardcode_libdir_flag_spec='${wl}-rpath,$libdir' - export_dynamic_flag_spec='${wl}-E' - # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. - # Instead, shared libraries are loaded at an image base (0x10000000 by - # default) and relocated if they conflict, which is a slow very memory - # consuming and fragmenting process. To avoid this, we pick a random, - # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link - # time. Moving up from 0x10000000 also allows more sbrk(2) space. - archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - ;; - - gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) - tmp_diet=no - if test "$host_os" = linux-dietlibc; then - case $cc_basename in - diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) - esac - fi - if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ - && test "$tmp_diet" = no - then - tmp_addflag= - tmp_sharedflag='-shared' - case $cc_basename,$host_cpu in - pgcc*) # Portland Group C compiler - whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_addflag=' $pic_flag' - ;; - pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers - whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_addflag=' $pic_flag -Mnomain' ;; - ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 - tmp_addflag=' -i_dynamic' ;; - efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 - tmp_addflag=' -i_dynamic -nofor_main' ;; - ifc* | ifort*) # Intel Fortran compiler - tmp_addflag=' -nofor_main' ;; - lf95*) # Lahey Fortran 8.1 - whole_archive_flag_spec= - tmp_sharedflag='--shared' ;; - xl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) - tmp_sharedflag='-qmkshrobj' - tmp_addflag= ;; - esac - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) # Sun C 5.9 - whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' - compiler_needs_object=yes - tmp_sharedflag='-G' ;; - *Sun\ F*) # Sun Fortran 8.3 - tmp_sharedflag='-G' ;; - esac - archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - - if test "x$supports_anon_versioning" = xyes; then - archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - echo "local: *; };" >> $output_objdir/$libname.ver~ - $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' - fi - - case $cc_basename in - xlf*) - # IBM XL Fortran 10.1 on PPC cannot create shared libs itself - whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' - hardcode_libdir_flag_spec= - hardcode_libdir_flag_spec_ld='-rpath $libdir' - archive_cmds='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib' - if test "x$supports_anon_versioning" = xyes; then - archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - echo "local: *; };" >> $output_objdir/$libname.ver~ - $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' - fi - ;; - esac - else - ld_shlibs=no - fi - ;; - - netbsd* | netbsdelf*-gnu) - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' - wlarc= - else - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - fi - ;; - - solaris*) - if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then - ld_shlibs=no - cat <<_LT_EOF 1>&2 - -*** Warning: The releases 2.8.* of the GNU linker cannot reliably -*** create shared libraries on Solaris systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.9.1 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. - -_LT_EOF - elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - ld_shlibs=no - fi - ;; - - sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) - case `$LD -v 2>&1` in - *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) - ld_shlibs=no - cat <<_LT_EOF 1>&2 - -*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not -*** reliably create shared libraries on SCO systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.16.91.0.3 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. - -_LT_EOF - ;; - *) - # For security reasons, it is highly recommended that you always - # use absolute paths for naming shared libraries, and exclude the - # DT_RUNPATH tag from executables and libraries. But doing so - # requires that you compile everything twice, which is a pain. - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - ld_shlibs=no - fi - ;; - esac - ;; - - sunos4*) - archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' - wlarc= - hardcode_direct=yes - hardcode_shlibpath_var=no - ;; - - *) - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - ld_shlibs=no - fi - ;; - esac - - if test "$ld_shlibs" = no; then - runpath_var= - hardcode_libdir_flag_spec= - export_dynamic_flag_spec= - whole_archive_flag_spec= - fi - else - # PORTME fill in a description of your system's linker (not GNU ld) - case $host_os in - aix3*) - allow_undefined_flag=unsupported - always_export_symbols=yes - archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' - # Note: this linker hardcodes the directories in LIBPATH if there - # are no directories specified by -L. - hardcode_minus_L=yes - if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then - # Neither direct hardcoding nor static linking is supported with a - # broken collect2. - hardcode_direct=unsupported - fi - ;; - - aix[4-9]*) - if test "$host_cpu" = ia64; then - # On IA64, the linker does run time linking by default, so we don't - # have to do anything special. - aix_use_runtimelinking=no - exp_sym_flag='-Bexport' - no_entry_flag="" - else - # If we're using GNU nm, then we don't want the "-C" option. - # -C means demangle to AIX nm, but means don't demangle with GNU nm - if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then - export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' - else - export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' - fi - aix_use_runtimelinking=no - - # Test if we are trying to use run time linking or normal - # AIX style linking. If -brtl is somewhere in LDFLAGS, we - # need to do runtime linking. - case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) - for ld_flag in $LDFLAGS; do - if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then - aix_use_runtimelinking=yes - break - fi - done - ;; - esac - - exp_sym_flag='-bexport' - no_entry_flag='-bnoentry' - fi - - # When large executables or shared objects are built, AIX ld can - # have problems creating the table of contents. If linking a library - # or program results in "error TOC overflow" add -mminimal-toc to - # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not - # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. - - archive_cmds='' - hardcode_direct=yes - hardcode_direct_absolute=yes - hardcode_libdir_separator=':' - link_all_deplibs=yes - file_list_spec='${wl}-f,' - - if test "$GCC" = yes; then - case $host_os in aix4.[012]|aix4.[012].*) - # We only want to do this on AIX 4.2 and lower, the check - # below for broken collect2 doesn't work under 4.3+ - collect2name=`${CC} -print-prog-name=collect2` - if test -f "$collect2name" && - strings "$collect2name" | $GREP resolve_lib_name >/dev/null - then - # We have reworked collect2 - : - else - # We have old collect2 - hardcode_direct=unsupported - # It fails to find uninstalled libraries when the uninstalled - # path is not listed in the libpath. Setting hardcode_minus_L - # to unsupported forces relinking - hardcode_minus_L=yes - hardcode_libdir_flag_spec='-L$libdir' - hardcode_libdir_separator= - fi - ;; - esac - shared_flag='-shared' - if test "$aix_use_runtimelinking" = yes; then - shared_flag="$shared_flag "'${wl}-G' - fi - link_all_deplibs=no - else - # not using gcc - if test "$host_cpu" = ia64; then - # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release - # chokes on -Wl,-G. The following line is correct: - shared_flag='-G' - else - if test "$aix_use_runtimelinking" = yes; then - shared_flag='${wl}-G' - else - shared_flag='${wl}-bM:SRE' - fi - fi - fi - - export_dynamic_flag_spec='${wl}-bexpall' - # It seems that -bexpall does not export symbols beginning with - # underscore (_), so it is better to generate a list of symbols to export. - always_export_symbols=yes - if test "$aix_use_runtimelinking" = yes; then - # Warning - without using the other runtime loading flags (-brtl), - # -berok will link without error, but may produce a broken library. - allow_undefined_flag='-berok' - # Determine the default libpath from the value encoded in an - # empty executable. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - -lt_aix_libpath_sed=' - /Import File Strings/,/^$/ { - /^0/ { - s/^0 *\(.*\)$/\1/ - p - } - }' -aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -# Check for a 64-bit object if we didn't find anything. -if test -z "$aix_libpath"; then - aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -fi -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi - - hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" - archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" - else - if test "$host_cpu" = ia64; then - hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' - allow_undefined_flag="-z nodefs" - archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" - else - # Determine the default libpath from the value encoded in an - # empty executable. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - -lt_aix_libpath_sed=' - /Import File Strings/,/^$/ { - /^0/ { - s/^0 *\(.*\)$/\1/ - p - } - }' -aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -# Check for a 64-bit object if we didn't find anything. -if test -z "$aix_libpath"; then - aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -fi -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi - - hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" - # Warning - without using the other run time loading flags, - # -berok will link without error, but may produce a broken library. - no_undefined_flag=' ${wl}-bernotok' - allow_undefined_flag=' ${wl}-berok' - # Exported symbols can be pulled into shared objects from archives - whole_archive_flag_spec='$convenience' - archive_cmds_need_lc=yes - # This is similar to how AIX traditionally builds its shared libraries. - archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' - fi - fi - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='' - ;; - m68k) - archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_minus_L=yes - ;; - esac - ;; - - bsdi[45]*) - export_dynamic_flag_spec=-rdynamic - ;; - - cygwin* | mingw* | pw32* | cegcc*) - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - # hardcode_libdir_flag_spec is actually meaningless, as there is - # no search path for DLLs. - hardcode_libdir_flag_spec=' ' - allow_undefined_flag=unsupported - # Tell ltmain to make .lib files, not .a files. - libext=lib - # Tell ltmain to make .dll files, not .so files. - shrext_cmds=".dll" - # FIXME: Setting linknames here is a bad hack. - archive_cmds='$CC -o $lib $libobjs $compiler_flags `$ECHO "X$deplibs" | $Xsed -e '\''s/ -lc$//'\''` -link -dll~linknames=' - # The linker will automatically build a .lib file if we build a DLL. - old_archive_from_new_cmds='true' - # FIXME: Should let the user specify the lib program. - old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' - fix_srcfile_path='`cygpath -w "$srcfile"`' - enable_shared_with_static_runtimes=yes - ;; - - darwin* | rhapsody*) - - - archive_cmds_need_lc=no - hardcode_direct=no - hardcode_automatic=yes - hardcode_shlibpath_var=unsupported - whole_archive_flag_spec='' - link_all_deplibs=yes - allow_undefined_flag="$_lt_dar_allow_undefined" - case $cc_basename in - ifort*) _lt_dar_can_shared=yes ;; - *) _lt_dar_can_shared=$GCC ;; - esac - if test "$_lt_dar_can_shared" = "yes"; then - output_verbose_link_cmd=echo - archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" - module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" - archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" - module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" - - else - ld_shlibs=no - fi - - ;; - - dgux*) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_shlibpath_var=no - ;; - - freebsd1*) - ld_shlibs=no - ;; - - # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor - # support. Future versions do this automatically, but an explicit c++rt0.o - # does not break anything, and helps significantly (at the cost of a little - # extra space). - freebsd2.2*) - archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' - hardcode_libdir_flag_spec='-R$libdir' - hardcode_direct=yes - hardcode_shlibpath_var=no - ;; - - # Unfortunately, older versions of FreeBSD 2 do not have this feature. - freebsd2*) - archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct=yes - hardcode_minus_L=yes - hardcode_shlibpath_var=no - ;; - - # FreeBSD 3 and greater uses gcc -shared to do shared libraries. - freebsd* | dragonfly*) - archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' - hardcode_libdir_flag_spec='-R$libdir' - hardcode_direct=yes - hardcode_shlibpath_var=no - ;; - - hpux9*) - if test "$GCC" = yes; then - archive_cmds='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - else - archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - fi - hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' - hardcode_libdir_separator=: - hardcode_direct=yes - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L=yes - export_dynamic_flag_spec='${wl}-E' - ;; - - hpux10*) - if test "$GCC" = yes -a "$with_gnu_ld" = no; then - archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' - fi - if test "$with_gnu_ld" = no; then - hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' - hardcode_libdir_flag_spec_ld='+b $libdir' - hardcode_libdir_separator=: - hardcode_direct=yes - hardcode_direct_absolute=yes - export_dynamic_flag_spec='${wl}-E' - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L=yes - fi - ;; - - hpux11*) - if test "$GCC" = yes -a "$with_gnu_ld" = no; then - case $host_cpu in - hppa*64*) - archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - ia64*) - archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - else - case $host_cpu in - hppa*64*) - archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - ia64*) - archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - fi - if test "$with_gnu_ld" = no; then - hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' - hardcode_libdir_separator=: - - case $host_cpu in - hppa*64*|ia64*) - hardcode_direct=no - hardcode_shlibpath_var=no - ;; - *) - hardcode_direct=yes - hardcode_direct_absolute=yes - export_dynamic_flag_spec='${wl}-E' - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L=yes - ;; - esac - fi - ;; - - irix5* | irix6* | nonstopux*) - if test "$GCC" = yes; then - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - # Try to use the -exported_symbol ld option, if it does not - # work, assume that -exports_file does not work either and - # implicitly export all symbols. - save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -int foo(void) {} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' - -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - LDFLAGS="$save_LDFLAGS" - else - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' - archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' - fi - archive_cmds_need_lc='no' - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator=: - inherit_rpath=yes - link_all_deplibs=yes - ;; - - netbsd* | netbsdelf*-gnu) - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out - else - archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF - fi - hardcode_libdir_flag_spec='-R$libdir' - hardcode_direct=yes - hardcode_shlibpath_var=no - ;; - - newsos6) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct=yes - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator=: - hardcode_shlibpath_var=no - ;; - - *nto* | *qnx*) - ;; - - openbsd*) - if test -f /usr/libexec/ld.so; then - hardcode_direct=yes - hardcode_shlibpath_var=no - hardcode_direct_absolute=yes - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' - hardcode_libdir_flag_spec='${wl}-rpath,$libdir' - export_dynamic_flag_spec='${wl}-E' - else - case $host_os in - openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) - archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec='-R$libdir' - ;; - *) - archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - hardcode_libdir_flag_spec='${wl}-rpath,$libdir' - ;; - esac - fi - else - ld_shlibs=no - fi - ;; - - os2*) - hardcode_libdir_flag_spec='-L$libdir' - hardcode_minus_L=yes - allow_undefined_flag=unsupported - archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$ECHO DATA >> $output_objdir/$libname.def~$ECHO " SINGLE NONSHARED" >> $output_objdir/$libname.def~$ECHO EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' - old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' - ;; - - osf3*) - if test "$GCC" = yes; then - allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' - archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - allow_undefined_flag=' -expect_unresolved \*' - archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' - fi - archive_cmds_need_lc='no' - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator=: - ;; - - osf4* | osf5*) # as osf3* with the addition of -msym flag - if test "$GCC" = yes; then - allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' - archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - else - allow_undefined_flag=' -expect_unresolved \*' - archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' - archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ - $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' - - # Both c and cxx compiler support -rpath directly - hardcode_libdir_flag_spec='-rpath $libdir' - fi - archive_cmds_need_lc='no' - hardcode_libdir_separator=: - ;; - - solaris*) - no_undefined_flag=' -z defs' - if test "$GCC" = yes; then - wlarc='${wl}' - archive_cmds='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' - else - case `$CC -V 2>&1` in - *"Compilers 5.0"*) - wlarc='' - archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' - archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' - ;; - *) - wlarc='${wl}' - archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' - ;; - esac - fi - hardcode_libdir_flag_spec='-R$libdir' - hardcode_shlibpath_var=no - case $host_os in - solaris2.[0-5] | solaris2.[0-5].*) ;; - *) - # The compiler driver will combine and reorder linker options, - # but understands `-z linker_flag'. GCC discards it without `$wl', - # but is careful enough not to reorder. - # Supported since Solaris 2.6 (maybe 2.5.1?) - if test "$GCC" = yes; then - whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' - else - whole_archive_flag_spec='-z allextract$convenience -z defaultextract' - fi - ;; - esac - link_all_deplibs=yes - ;; - - sunos4*) - if test "x$host_vendor" = xsequent; then - # Use $CC to link under sequent, because it throws in some extra .o - # files that make .init and .fini sections work. - archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' - fi - hardcode_libdir_flag_spec='-L$libdir' - hardcode_direct=yes - hardcode_minus_L=yes - hardcode_shlibpath_var=no - ;; - - sysv4) - case $host_vendor in - sni) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct=yes # is this really true??? - ;; - siemens) - ## LD is ld it makes a PLAMLIB - ## CC just makes a GrossModule. - archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' - reload_cmds='$CC -r -o $output$reload_objs' - hardcode_direct=no - ;; - motorola) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct=no #Motorola manual says yes, but my tests say they lie - ;; - esac - runpath_var='LD_RUN_PATH' - hardcode_shlibpath_var=no - ;; - - sysv4.3*) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_shlibpath_var=no - export_dynamic_flag_spec='-Bexport' - ;; - - sysv4*MP*) - if test -d /usr/nec; then - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_shlibpath_var=no - runpath_var=LD_RUN_PATH - hardcode_runpath_var=yes - ld_shlibs=yes - fi - ;; - - sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) - no_undefined_flag='${wl}-z,text' - archive_cmds_need_lc=no - hardcode_shlibpath_var=no - runpath_var='LD_RUN_PATH' - - if test "$GCC" = yes; then - archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - fi - ;; - - sysv5* | sco3.2v5* | sco5v6*) - # Note: We can NOT use -z defs as we might desire, because we do not - # link with -lc, and that would cause any symbols used from libc to - # always be unresolved, which means just about no library would - # ever link correctly. If we're not using GNU ld we use -z text - # though, which does catch some bad symbols but isn't as heavy-handed - # as -z defs. - no_undefined_flag='${wl}-z,text' - allow_undefined_flag='${wl}-z,nodefs' - archive_cmds_need_lc=no - hardcode_shlibpath_var=no - hardcode_libdir_flag_spec='${wl}-R,$libdir' - hardcode_libdir_separator=':' - link_all_deplibs=yes - export_dynamic_flag_spec='${wl}-Bexport' - runpath_var='LD_RUN_PATH' - - if test "$GCC" = yes; then - archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - fi - ;; - - uts4*) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_shlibpath_var=no - ;; - - *) - ld_shlibs=no - ;; - esac - - if test x$host_vendor = xsni; then - case $host in - sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) - export_dynamic_flag_spec='${wl}-Blargedynsym' - ;; - esac - fi - fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 -$as_echo "$ld_shlibs" >&6; } -test "$ld_shlibs" = no && can_build_shared=no - -with_gnu_ld=$with_gnu_ld - - - - - - - - - - - - - - - -# -# Do we need to explicitly link libc? -# -case "x$archive_cmds_need_lc" in -x|xyes) - # Assume -lc should be added - archive_cmds_need_lc=yes - - if test "$enable_shared" = yes && test "$GCC" = yes; then - case $archive_cmds in - *'~'*) - # FIXME: we may have to deal with multi-command sequences. - ;; - '$CC '*) - # Test whether the compiler implicitly links with -lc since on some - # systems, -lgcc has to come before -lc. If gcc already passes -lc - # to ld, don't add -lc before -lgcc. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 -$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } - $RM conftest* - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } 2>conftest.err; then - soname=conftest - lib=conftest - libobjs=conftest.$ac_objext - deplibs= - wl=$lt_prog_compiler_wl - pic_flag=$lt_prog_compiler_pic - compiler_flags=-v - linker_flags=-v - verstring= - output_objdir=. - libname=conftest - lt_save_allow_undefined_flag=$allow_undefined_flag - allow_undefined_flag= - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 - (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } - then - archive_cmds_need_lc=no - else - archive_cmds_need_lc=yes - fi - allow_undefined_flag=$lt_save_allow_undefined_flag - else - cat conftest.err 1>&5 - fi - $RM conftest* - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $archive_cmds_need_lc" >&5 -$as_echo "$archive_cmds_need_lc" >&6; } - ;; - esac - fi - ;; -esac - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 -$as_echo_n "checking dynamic linker characteristics... " >&6; } - -if test "$GCC" = yes; then - case $host_os in - darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; - *) lt_awk_arg="/^libraries:/" ;; - esac - lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"` - if $ECHO "$lt_search_path_spec" | $GREP ';' >/dev/null ; then - # if the path contains ";" then we assume it to be the separator - # otherwise default to the standard path separator (i.e. ":") - it is - # assumed that no part of a normal pathname contains ";" but that should - # okay in the real world where ";" in dirpaths is itself problematic. - lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e 's/;/ /g'` - else - lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - fi - # Ok, now we have the path, separated by spaces, we can step through it - # and add multilib dir if necessary. - lt_tmp_lt_search_path_spec= - lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` - for lt_sys_path in $lt_search_path_spec; do - if test -d "$lt_sys_path/$lt_multi_os_dir"; then - lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" - else - test -d "$lt_sys_path" && \ - lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" - fi - done - lt_search_path_spec=`$ECHO $lt_tmp_lt_search_path_spec | awk ' -BEGIN {RS=" "; FS="/|\n";} { - lt_foo=""; - lt_count=0; - for (lt_i = NF; lt_i > 0; lt_i--) { - if ($lt_i != "" && $lt_i != ".") { - if ($lt_i == "..") { - lt_count++; - } else { - if (lt_count == 0) { - lt_foo="/" $lt_i lt_foo; - } else { - lt_count--; - } - } - } - } - if (lt_foo != "") { lt_freq[lt_foo]++; } - if (lt_freq[lt_foo] == 1) { print lt_foo; } -}'` - sys_lib_search_path_spec=`$ECHO $lt_search_path_spec` -else - sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" -fi -library_names_spec= -libname_spec='lib$name' -soname_spec= -shrext_cmds=".so" -postinstall_cmds= -postuninstall_cmds= -finish_cmds= -finish_eval= -shlibpath_var= -shlibpath_overrides_runpath=unknown -version_type=none -dynamic_linker="$host_os ld.so" -sys_lib_dlsearch_path_spec="/lib /usr/lib" -need_lib_prefix=unknown -hardcode_into_libs=no - -# when you set need_version to no, make sure it does not cause -set_version -# flags to be left without arguments -need_version=unknown - -case $host_os in -aix3*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' - shlibpath_var=LIBPATH - - # AIX 3 has no versioning support, so we append a major version to the name. - soname_spec='${libname}${release}${shared_ext}$major' - ;; - -aix[4-9]*) - version_type=linux - need_lib_prefix=no - need_version=no - hardcode_into_libs=yes - if test "$host_cpu" = ia64; then - # AIX 5 supports IA64 - library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - else - # With GCC up to 2.95.x, collect2 would create an import file - # for dependence libraries. The import file would start with - # the line `#! .'. This would cause the generated library to - # depend on `.', always an invalid library. This was fixed in - # development snapshots of GCC prior to 3.0. - case $host_os in - aix4 | aix4.[01] | aix4.[01].*) - if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' - echo ' yes ' - echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then - : - else - can_build_shared=no - fi - ;; - esac - # AIX (on Power*) has no versioning support, so currently we can not hardcode correct - # soname into executable. Probably we can add versioning support to - # collect2, so additional links can be useful in future. - if test "$aix_use_runtimelinking" = yes; then - # If using run time linking (on AIX 4.2 or later) use lib.so - # instead of lib.a to let people know that these are not - # typical AIX shared libraries. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - else - # We preserve .a as extension for shared libraries through AIX4.2 - # and later when we are not doing run time linking. - library_names_spec='${libname}${release}.a $libname.a' - soname_spec='${libname}${release}${shared_ext}$major' - fi - shlibpath_var=LIBPATH - fi - ;; - -amigaos*) - case $host_cpu in - powerpc) - # Since July 2007 AmigaOS4 officially supports .so libraries. - # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - ;; - m68k) - library_names_spec='$libname.ixlibrary $libname.a' - # Create ${libname}_ixlibrary.a entries in /sys/libs. - finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' - ;; - esac - ;; - -beos*) - library_names_spec='${libname}${shared_ext}' - dynamic_linker="$host_os ld.so" - shlibpath_var=LIBRARY_PATH - ;; - -bsdi[45]*) - version_type=linux - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" - sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" - # the default ld.so.conf also contains /usr/contrib/lib and - # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow - # libtool to hard-code these into programs - ;; - -cygwin* | mingw* | pw32* | cegcc*) - version_type=windows - shrext_cmds=".dll" - need_version=no - need_lib_prefix=no - - case $GCC,$host_os in - yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*) - library_names_spec='$libname.dll.a' - # DLL is installed to $(libdir)/../bin by postinstall_cmds - postinstall_cmds='base_file=`basename \${file}`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ - dldir=$destdir/`dirname \$dlpath`~ - test -d \$dldir || mkdir -p \$dldir~ - $install_prog $dir/$dlname \$dldir/$dlname~ - chmod a+x \$dldir/$dlname~ - if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then - eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; - fi' - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $RM \$dlpath' - shlibpath_overrides_runpath=yes - - case $host_os in - cygwin*) - # Cygwin DLLs use 'cyg' prefix rather than 'lib' - soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" - ;; - mingw* | cegcc*) - # MinGW DLLs use traditional 'lib' prefix - soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` - if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then - # It is most probably a Windows format PATH printed by - # mingw gcc, but we are running on Cygwin. Gcc prints its search - # path with ; separators, and with drive letters. We can handle the - # drive letters (cygwin fileutils understands them), so leave them, - # especially as we might pass files found there to a mingw objdump, - # which wouldn't understand a cygwinified path. Ahh. - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` - else - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - fi - ;; - pw32*) - # pw32 DLLs use 'pw' prefix rather than 'lib' - library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - ;; - esac - ;; - - *) - library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' - ;; - esac - dynamic_linker='Win32 ld.exe' - # FIXME: first we should search . and the directory the executable is in - shlibpath_var=PATH - ;; - -darwin* | rhapsody*) - dynamic_linker="$host_os dyld" - version_type=darwin - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' - soname_spec='${libname}${release}${major}$shared_ext' - shlibpath_overrides_runpath=yes - shlibpath_var=DYLD_LIBRARY_PATH - shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' - - sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" - sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' - ;; - -dgux*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -freebsd1*) - dynamic_linker=no - ;; - -freebsd* | dragonfly*) - # DragonFly does not have aout. When/if they implement a new - # versioning mechanism, adjust this. - if test -x /usr/bin/objformat; then - objformat=`/usr/bin/objformat` - else - case $host_os in - freebsd[123]*) objformat=aout ;; - *) objformat=elf ;; - esac - fi - version_type=freebsd-$objformat - case $version_type in - freebsd-elf*) - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - need_version=no - need_lib_prefix=no - ;; - freebsd-*) - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' - need_version=yes - ;; - esac - shlibpath_var=LD_LIBRARY_PATH - case $host_os in - freebsd2*) - shlibpath_overrides_runpath=yes - ;; - freebsd3.[01]* | freebsdelf3.[01]*) - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ - freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - *) # from 4.6 on, and DragonFly - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - esac - ;; - -gnu*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - hardcode_into_libs=yes - ;; - -hpux9* | hpux10* | hpux11*) - # Give a soname corresponding to the major version so that dld.sl refuses to - # link against other versions. - version_type=sunos - need_lib_prefix=no - need_version=no - case $host_cpu in - ia64*) - shrext_cmds='.so' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.so" - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - if test "X$HPUX_IA64_MODE" = X32; then - sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" - else - sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" - fi - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - hppa*64*) - shrext_cmds='.sl' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.sl" - shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - *) - shrext_cmds='.sl' - dynamic_linker="$host_os dld.sl" - shlibpath_var=SHLIB_PATH - shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - ;; - esac - # HP-UX runs *really* slowly unless shared libraries are mode 555. - postinstall_cmds='chmod 555 $lib' - ;; - -interix[3-9]*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - -irix5* | irix6* | nonstopux*) - case $host_os in - nonstopux*) version_type=nonstopux ;; - *) - if test "$lt_cv_prog_gnu_ld" = yes; then - version_type=linux - else - version_type=irix - fi ;; - esac - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' - case $host_os in - irix5* | nonstopux*) - libsuff= shlibsuff= - ;; - *) - case $LD in # libtool.m4 will add one of these switches to LD - *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") - libsuff= shlibsuff= libmagic=32-bit;; - *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") - libsuff=32 shlibsuff=N32 libmagic=N32;; - *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") - libsuff=64 shlibsuff=64 libmagic=64-bit;; - *) libsuff= shlibsuff= libmagic=never-match;; - esac - ;; - esac - shlibpath_var=LD_LIBRARY${shlibsuff}_PATH - shlibpath_overrides_runpath=no - sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" - sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" - hardcode_into_libs=yes - ;; - -# No shared lib support for Linux oldld, aout, or coff. -linux*oldld* | linux*aout* | linux*coff*) - dynamic_linker=no - ;; - -# This must be Linux ELF. -linux* | k*bsd*-gnu | kopensolaris*-gnu) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - # Some binutils ld are patched to set DT_RUNPATH - save_LDFLAGS=$LDFLAGS - save_libdir=$libdir - eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ - LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : - shlibpath_overrides_runpath=yes -fi -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - LDFLAGS=$save_LDFLAGS - libdir=$save_libdir - - # This implies no fast_install, which is unacceptable. - # Some rework will be needed to allow for fast_install - # before this can be enabled. - hardcode_into_libs=yes - - # Append ld.so.conf contents to the search path - if test -f /etc/ld.so.conf; then - lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` - sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" - fi - - # We used to test for /lib/ld.so.1 and disable shared libraries on - # powerpc, because MkLinux only supported shared libraries with the - # GNU dynamic linker. Since this was broken with cross compilers, - # most powerpc-linux boxes support dynamic linking these days and - # people can always --disable-shared, the test was removed, and we - # assume the GNU/Linux dynamic linker is in use. - dynamic_linker='GNU/Linux ld.so' - ;; - -netbsdelf*-gnu) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - dynamic_linker='NetBSD ld.elf_so' - ;; - -netbsd*) - version_type=sunos - need_lib_prefix=no - need_version=no - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - dynamic_linker='NetBSD (a.out) ld.so' - else - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='NetBSD ld.elf_so' - fi - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - -newsos6) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; - -*nto* | *qnx*) - version_type=qnx - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - dynamic_linker='ldqnx.so' - ;; - -openbsd*) - version_type=sunos - sys_lib_dlsearch_path_spec="/usr/lib" - need_lib_prefix=no - # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. - case $host_os in - openbsd3.3 | openbsd3.3.*) need_version=yes ;; - *) need_version=no ;; - esac - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - shlibpath_var=LD_LIBRARY_PATH - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - case $host_os in - openbsd2.[89] | openbsd2.[89].*) - shlibpath_overrides_runpath=no - ;; - *) - shlibpath_overrides_runpath=yes - ;; - esac - else - shlibpath_overrides_runpath=yes - fi - ;; - -os2*) - libname_spec='$name' - shrext_cmds=".dll" - need_lib_prefix=no - library_names_spec='$libname${shared_ext} $libname.a' - dynamic_linker='OS/2 ld.exe' - shlibpath_var=LIBPATH - ;; - -osf3* | osf4* | osf5*) - version_type=osf - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" - sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" - ;; - -rdos*) - dynamic_linker=no - ;; - -solaris*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - # ldd complains unless libraries are executable - postinstall_cmds='chmod +x $lib' - ;; - -sunos4*) - version_type=sunos - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - if test "$with_gnu_ld" = yes; then - need_lib_prefix=no - fi - need_version=yes - ;; - -sysv4 | sysv4.3*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - case $host_vendor in - sni) - shlibpath_overrides_runpath=no - need_lib_prefix=no - runpath_var=LD_RUN_PATH - ;; - siemens) - need_lib_prefix=no - ;; - motorola) - need_lib_prefix=no - need_version=no - shlibpath_overrides_runpath=no - sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' - ;; - esac - ;; - -sysv4*MP*) - if test -d /usr/nec ;then - version_type=linux - library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' - soname_spec='$libname${shared_ext}.$major' - shlibpath_var=LD_LIBRARY_PATH - fi - ;; - -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - version_type=freebsd-elf - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - if test "$with_gnu_ld" = yes; then - sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' - else - sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' - case $host_os in - sco3.2v5*) - sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" - ;; - esac - fi - sys_lib_dlsearch_path_spec='/usr/lib' - ;; - -tpf*) - # TPF is a cross-target only. Preferred cross-host = GNU/Linux. - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - -uts4*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -*) - dynamic_linker=no - ;; -esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 -$as_echo "$dynamic_linker" >&6; } -test "$dynamic_linker" = no && can_build_shared=no - -variables_saved_for_relink="PATH $shlibpath_var $runpath_var" -if test "$GCC" = yes; then - variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" -fi - -if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then - sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" -fi -if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then - sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" -fi - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 -$as_echo_n "checking how to hardcode library paths into programs... " >&6; } -hardcode_action= -if test -n "$hardcode_libdir_flag_spec" || - test -n "$runpath_var" || - test "X$hardcode_automatic" = "Xyes" ; then - - # We can hardcode non-existent directories. - if test "$hardcode_direct" != no && - # If the only mechanism to avoid hardcoding is shlibpath_var, we - # have to relink, otherwise we might link with an installed library - # when we should be linking with a yet-to-be-installed one - ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no && - test "$hardcode_minus_L" != no; then - # Linking always hardcodes the temporary library directory. - hardcode_action=relink - else - # We can link without hardcoding, and we can hardcode nonexisting dirs. - hardcode_action=immediate - fi -else - # We cannot hardcode anything, or else we can only hardcode existing - # directories. - hardcode_action=unsupported -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 -$as_echo "$hardcode_action" >&6; } - -if test "$hardcode_action" = relink || - test "$inherit_rpath" = yes; then - # Fast installation is not supported - enable_fast_install=no -elif test "$shlibpath_overrides_runpath" = yes || - test "$enable_shared" = no; then - # Fast installation is not necessary - enable_fast_install=needless -fi - - - - - - - if test "x$enable_dlopen" != xyes; then - enable_dlopen=unknown - enable_dlopen_self=unknown - enable_dlopen_self_static=unknown -else - lt_cv_dlopen=no - lt_cv_dlopen_libs= - - case $host_os in - beos*) - lt_cv_dlopen="load_add_on" - lt_cv_dlopen_libs= - lt_cv_dlopen_self=yes - ;; - - mingw* | pw32* | cegcc*) - lt_cv_dlopen="LoadLibrary" - lt_cv_dlopen_libs= - ;; - - cygwin*) - lt_cv_dlopen="dlopen" - lt_cv_dlopen_libs= - ;; - - darwin*) - # if libdl is installed we need to link against it - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 -$as_echo_n "checking for dlopen in -ldl... " >&6; } -if test "${ac_cv_lib_dl_dlopen+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldl $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dlopen (); -int -main () -{ -return dlopen (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_dl_dlopen=yes -else - ac_cv_lib_dl_dlopen=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 -$as_echo "$ac_cv_lib_dl_dlopen" >&6; } -if test "x$ac_cv_lib_dl_dlopen" = x""yes; then : - lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" -else - - lt_cv_dlopen="dyld" - lt_cv_dlopen_libs= - lt_cv_dlopen_self=yes - -fi - - ;; - - *) - ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" -if test "x$ac_cv_func_shl_load" = x""yes; then : - lt_cv_dlopen="shl_load" -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 -$as_echo_n "checking for shl_load in -ldld... " >&6; } -if test "${ac_cv_lib_dld_shl_load+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldld $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char shl_load (); -int -main () -{ -return shl_load (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_dld_shl_load=yes -else - ac_cv_lib_dld_shl_load=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 -$as_echo "$ac_cv_lib_dld_shl_load" >&6; } -if test "x$ac_cv_lib_dld_shl_load" = x""yes; then : - lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld" -else - ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" -if test "x$ac_cv_func_dlopen" = x""yes; then : - lt_cv_dlopen="dlopen" -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 -$as_echo_n "checking for dlopen in -ldl... " >&6; } -if test "${ac_cv_lib_dl_dlopen+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldl $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dlopen (); -int -main () -{ -return dlopen (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_dl_dlopen=yes -else - ac_cv_lib_dl_dlopen=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 -$as_echo "$ac_cv_lib_dl_dlopen" >&6; } -if test "x$ac_cv_lib_dl_dlopen" = x""yes; then : - lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 -$as_echo_n "checking for dlopen in -lsvld... " >&6; } -if test "${ac_cv_lib_svld_dlopen+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lsvld $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dlopen (); -int -main () -{ -return dlopen (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_svld_dlopen=yes -else - ac_cv_lib_svld_dlopen=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 -$as_echo "$ac_cv_lib_svld_dlopen" >&6; } -if test "x$ac_cv_lib_svld_dlopen" = x""yes; then : - lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 -$as_echo_n "checking for dld_link in -ldld... " >&6; } -if test "${ac_cv_lib_dld_dld_link+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldld $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dld_link (); -int -main () -{ -return dld_link (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_dld_dld_link=yes -else - ac_cv_lib_dld_dld_link=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 -$as_echo "$ac_cv_lib_dld_dld_link" >&6; } -if test "x$ac_cv_lib_dld_dld_link" = x""yes; then : - lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld" -fi - - -fi - - -fi - - -fi - - -fi - - -fi - - ;; - esac - - if test "x$lt_cv_dlopen" != xno; then - enable_dlopen=yes - else - enable_dlopen=no - fi - - case $lt_cv_dlopen in - dlopen) - save_CPPFLAGS="$CPPFLAGS" - test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" - - save_LDFLAGS="$LDFLAGS" - wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" - - save_LIBS="$LIBS" - LIBS="$lt_cv_dlopen_libs $LIBS" - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 -$as_echo_n "checking whether a program can dlopen itself... " >&6; } -if test "${lt_cv_dlopen_self+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - lt_cv_dlopen_self=cross -else - lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 - lt_status=$lt_dlunknown - cat > conftest.$ac_ext <<_LT_EOF -#line __oline__ "configure" -#include "confdefs.h" - -#if HAVE_DLFCN_H -#include -#endif - -#include - -#ifdef RTLD_GLOBAL -# define LT_DLGLOBAL RTLD_GLOBAL -#else -# ifdef DL_GLOBAL -# define LT_DLGLOBAL DL_GLOBAL -# else -# define LT_DLGLOBAL 0 -# endif -#endif - -/* We may have to define LT_DLLAZY_OR_NOW in the command line if we - find out it does not work in some platform. */ -#ifndef LT_DLLAZY_OR_NOW -# ifdef RTLD_LAZY -# define LT_DLLAZY_OR_NOW RTLD_LAZY -# else -# ifdef DL_LAZY -# define LT_DLLAZY_OR_NOW DL_LAZY -# else -# ifdef RTLD_NOW -# define LT_DLLAZY_OR_NOW RTLD_NOW -# else -# ifdef DL_NOW -# define LT_DLLAZY_OR_NOW DL_NOW -# else -# define LT_DLLAZY_OR_NOW 0 -# endif -# endif -# endif -# endif -#endif - -void fnord() { int i=42;} -int main () -{ - void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); - int status = $lt_dlunknown; - - if (self) - { - if (dlsym (self,"fnord")) status = $lt_dlno_uscore; - else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; - /* dlclose (self); */ - } - else - puts (dlerror ()); - - return status; -} -_LT_EOF - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 - (eval $ac_link) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then - (./conftest; exit; ) >&5 2>/dev/null - lt_status=$? - case x$lt_status in - x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; - x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; - x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; - esac - else : - # compilation failed - lt_cv_dlopen_self=no - fi -fi -rm -fr conftest* - - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 -$as_echo "$lt_cv_dlopen_self" >&6; } - - if test "x$lt_cv_dlopen_self" = xyes; then - wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 -$as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } -if test "${lt_cv_dlopen_self_static+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - lt_cv_dlopen_self_static=cross -else - lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 - lt_status=$lt_dlunknown - cat > conftest.$ac_ext <<_LT_EOF -#line __oline__ "configure" -#include "confdefs.h" - -#if HAVE_DLFCN_H -#include -#endif - -#include - -#ifdef RTLD_GLOBAL -# define LT_DLGLOBAL RTLD_GLOBAL -#else -# ifdef DL_GLOBAL -# define LT_DLGLOBAL DL_GLOBAL -# else -# define LT_DLGLOBAL 0 -# endif -#endif - -/* We may have to define LT_DLLAZY_OR_NOW in the command line if we - find out it does not work in some platform. */ -#ifndef LT_DLLAZY_OR_NOW -# ifdef RTLD_LAZY -# define LT_DLLAZY_OR_NOW RTLD_LAZY -# else -# ifdef DL_LAZY -# define LT_DLLAZY_OR_NOW DL_LAZY -# else -# ifdef RTLD_NOW -# define LT_DLLAZY_OR_NOW RTLD_NOW -# else -# ifdef DL_NOW -# define LT_DLLAZY_OR_NOW DL_NOW -# else -# define LT_DLLAZY_OR_NOW 0 -# endif -# endif -# endif -# endif -#endif - -void fnord() { int i=42;} -int main () -{ - void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); - int status = $lt_dlunknown; - - if (self) - { - if (dlsym (self,"fnord")) status = $lt_dlno_uscore; - else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; - /* dlclose (self); */ - } - else - puts (dlerror ()); - - return status; -} -_LT_EOF - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 - (eval $ac_link) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then - (./conftest; exit; ) >&5 2>/dev/null - lt_status=$? - case x$lt_status in - x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; - x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; - x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; - esac - else : - # compilation failed - lt_cv_dlopen_self_static=no - fi -fi -rm -fr conftest* - - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 -$as_echo "$lt_cv_dlopen_self_static" >&6; } - fi - - CPPFLAGS="$save_CPPFLAGS" - LDFLAGS="$save_LDFLAGS" - LIBS="$save_LIBS" - ;; - esac - - case $lt_cv_dlopen_self in - yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; - *) enable_dlopen_self=unknown ;; - esac - - case $lt_cv_dlopen_self_static in - yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; - *) enable_dlopen_self_static=unknown ;; - esac -fi - - - - - - - - - - - - - - - - - -striplib= -old_striplib= -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 -$as_echo_n "checking whether stripping libraries is possible... " >&6; } -if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then - test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" - test -z "$striplib" && striplib="$STRIP --strip-unneeded" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -else -# FIXME - insert some real tests, host_os isn't really good enough - case $host_os in - darwin*) - if test -n "$STRIP" ; then - striplib="$STRIP -x" - old_striplib="$STRIP -S" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - fi - ;; - *) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - ;; - esac -fi - - - - - - - - - - - - - # Report which library types will actually be built - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 -$as_echo_n "checking if libtool supports shared libraries... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 -$as_echo "$can_build_shared" >&6; } - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 -$as_echo_n "checking whether to build shared libraries... " >&6; } - test "$can_build_shared" = "no" && enable_shared=no - - # On AIX, shared libraries and static libraries use the same namespace, and - # are all built from PIC. - case $host_os in - aix3*) - test "$enable_shared" = yes && enable_static=no - if test -n "$RANLIB"; then - archive_cmds="$archive_cmds~\$RANLIB \$lib" - postinstall_cmds='$RANLIB $lib' - fi - ;; - - aix[4-9]*) - if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then - test "$enable_shared" = yes && enable_static=no - fi - ;; - esac - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 -$as_echo "$enable_shared" >&6; } - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 -$as_echo_n "checking whether to build static libraries... " >&6; } - # Make sure either enable_shared or enable_static is yes. - test "$enable_shared" = yes || enable_static=yes - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 -$as_echo "$enable_static" >&6; } - - - - -fi -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -CC="$lt_save_CC" - - - - - - - - - - - - - - ac_config_commands="$ac_config_commands libtool" - - - - -# Only expand once: - - - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. -set dummy ${ac_tool_prefix}gcc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_CC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_CC="${ac_tool_prefix}gcc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_CC"; then - ac_ct_CC=$CC - # Extract the first word of "gcc", so it can be a program name with args. -set dummy gcc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_CC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_CC="gcc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -$as_echo "$ac_ct_CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_CC" = x; then - CC="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - CC=$ac_ct_CC - fi -else - CC="$ac_cv_prog_CC" -fi - -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. -set dummy ${ac_tool_prefix}cc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_CC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_CC="${ac_tool_prefix}cc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - fi -fi -if test -z "$CC"; then - # Extract the first word of "cc", so it can be a program name with args. -set dummy cc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_CC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else - ac_prog_rejected=no -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then - ac_prog_rejected=yes - continue - fi - ac_cv_prog_CC="cc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -if test $ac_prog_rejected = yes; then - # We found a bogon in the path, so make sure we never use it. - set dummy $ac_cv_prog_CC - shift - if test $@%:@ != 0; then - # We chose a different compiler from the bogus one. - # However, it has the same basename, so the bogon will be chosen - # first if we set CC to just the basename; use the full file name. - shift - ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" - fi -fi -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - for ac_prog in cl.exe - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_CC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_CC="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$CC" && break - done -fi -if test -z "$CC"; then - ac_ct_CC=$CC - for ac_prog in cl.exe -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_CC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_CC="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -$as_echo "$ac_ct_CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$ac_ct_CC" && break -done - - if test "x$ac_ct_CC" = x; then - CC="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - CC=$ac_ct_CC - fi -fi - -fi - - -test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error "no acceptable C compiler found in \$PATH -See \`config.log' for more details." "$LINENO" 5; } - -# Provide some information about the compiler. -$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 -set X $ac_compile -ac_compiler=$2 -for ac_option in --version -v -V -qversion; do - { { ac_try="$ac_compiler $ac_option >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compiler $ac_option >&5") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - sed '10a\ -... rest of stderr output deleted ... - 10q' conftest.err >conftest.er1 - cat conftest.er1 >&5 - fi - rm -f conftest.er1 conftest.err - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } -done - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 -$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } -if test "${ac_cv_c_compiler_gnu+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ -#ifndef __GNUC__ - choke me -#endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_compiler_gnu=yes -else - ac_compiler_gnu=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -ac_cv_c_compiler_gnu=$ac_compiler_gnu - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 -$as_echo "$ac_cv_c_compiler_gnu" >&6; } -if test $ac_compiler_gnu = yes; then - GCC=yes -else - GCC= -fi -ac_test_CFLAGS=${CFLAGS+set} -ac_save_CFLAGS=$CFLAGS -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 -$as_echo_n "checking whether $CC accepts -g... " >&6; } -if test "${ac_cv_prog_cc_g+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_save_c_werror_flag=$ac_c_werror_flag - ac_c_werror_flag=yes - ac_cv_prog_cc_g=no - CFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_g=yes -else - CFLAGS="" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - -else - ac_c_werror_flag=$ac_save_c_werror_flag - CFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_g=yes -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_c_werror_flag=$ac_save_c_werror_flag -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 -$as_echo "$ac_cv_prog_cc_g" >&6; } -if test "$ac_test_CFLAGS" = set; then - CFLAGS=$ac_save_CFLAGS -elif test $ac_cv_prog_cc_g = yes; then - if test "$GCC" = yes; then - CFLAGS="-g -O2" - else - CFLAGS="-g" - fi -else - if test "$GCC" = yes; then - CFLAGS="-O2" - else - CFLAGS= - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 -$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } -if test "${ac_cv_prog_cc_c89+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_cv_prog_cc_c89=no -ac_save_CC=$CC -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#include -#include -/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ -struct buf { int x; }; -FILE * (*rcsopen) (struct buf *, struct stat *, int); -static char *e (p, i) - char **p; - int i; -{ - return p[i]; -} -static char *f (char * (*g) (char **, int), char **p, ...) -{ - char *s; - va_list v; - va_start (v,p); - s = g (p, va_arg (v,int)); - va_end (v); - return s; -} - -/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has - function prototypes and stuff, but not '\xHH' hex character constants. - These don't provoke an error unfortunately, instead are silently treated - as 'x'. The following induces an error, until -std is added to get - proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an - array size at least. It's necessary to write '\x00'==0 to get something - that's true only with -std. */ -int osf4_cc_array ['\x00' == 0 ? 1 : -1]; - -/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters - inside strings and character constants. */ -#define FOO(x) 'x' -int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; - -int test (int i, double x); -struct s1 {int (*f) (int a);}; -struct s2 {int (*f) (double a);}; -int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); -int argc; -char **argv; -int -main () -{ -return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; - ; - return 0; -} -_ACEOF -for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ - -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" -do - CC="$ac_save_CC $ac_arg" - if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_c89=$ac_arg -fi -rm -f core conftest.err conftest.$ac_objext - test "x$ac_cv_prog_cc_c89" != "xno" && break -done -rm -f conftest.$ac_ext -CC=$ac_save_CC - -fi -# AC_CACHE_VAL -case "x$ac_cv_prog_cc_c89" in - x) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -$as_echo "none needed" >&6; } ;; - xno) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 -$as_echo "unsupported" >&6; } ;; - *) - CC="$CC $ac_cv_prog_cc_c89" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 -$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; -esac -if test "x$ac_cv_prog_cc_c89" != xno; then : - -fi - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -depcc="$CC" am_compiler_list= - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 -$as_echo_n "checking dependency style of $depcc... " >&6; } -if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then - # We make a subdir and do the tests there. Otherwise we can end up - # making bogus files that we don't know about and never remove. For - # instance it was reported that on HP-UX the gcc test will end up - # making a dummy file named `D' -- because `-MD' means `put the output - # in D'. - mkdir conftest.dir - # Copy depcomp to subdir because otherwise we won't find it if we're - # using a relative directory. - cp "$am_depcomp" conftest.dir - cd conftest.dir - # We will build objects and dependencies in a subdirectory because - # it helps to detect inapplicable dependency modes. For instance - # both Tru64's cc and ICC support -MD to output dependencies as a - # side effect of compilation, but ICC will put the dependencies in - # the current directory while Tru64 will put them in the object - # directory. - mkdir sub - - am_cv_CC_dependencies_compiler_type=none - if test "$am_compiler_list" = ""; then - am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` - fi - am__universal=false - case " $depcc " in #( - *\ -arch\ *\ -arch\ *) am__universal=true ;; - esac - - for depmode in $am_compiler_list; do - # Setup a source with many dependencies, because some compilers - # like to wrap large dependency lists on column 80 (with \), and - # we should not choose a depcomp mode which is confused by this. - # - # We need to recreate these files for each test, as the compiler may - # overwrite some of them when testing with obscure command lines. - # This happens at least with the AIX C compiler. - : > sub/conftest.c - for i in 1 2 3 4 5 6; do - echo '#include "conftst'$i'.h"' >> sub/conftest.c - # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with - # Solaris 8's {/usr,}/bin/sh. - touch sub/conftst$i.h - done - echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf - - # We check with `-c' and `-o' for the sake of the "dashmstdout" - # mode. It turns out that the SunPro C++ compiler does not properly - # handle `-M -o', and we need to detect this. Also, some Intel - # versions had trouble with output in subdirs - am__obj=sub/conftest.${OBJEXT-o} - am__minus_obj="-o $am__obj" - case $depmode in - gcc) - # This depmode causes a compiler race in universal mode. - test "$am__universal" = false || continue - ;; - nosideeffect) - # after this tag, mechanisms are not by side-effect, so they'll - # only be used when explicitly requested - if test "x$enable_dependency_tracking" = xyes; then - continue - else - break - fi - ;; - msvisualcpp | msvcmsys) - # This compiler won't grok `-c -o', but also, the minuso test has - # not run yet. These depmodes are late enough in the game, and - # so weak that their functioning should not be impacted. - am__obj=conftest.${OBJEXT-o} - am__minus_obj= - ;; - none) break ;; - esac - if depmode=$depmode \ - source=sub/conftest.c object=$am__obj \ - depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ - $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ - >/dev/null 2>conftest.err && - grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && - grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && - grep $am__obj sub/conftest.Po > /dev/null 2>&1 && - ${MAKE-make} -s -f confmf > /dev/null 2>&1; then - # icc doesn't choke on unknown options, it will just issue warnings - # or remarks (even with -Werror). So we grep stderr for any message - # that says an option was ignored or not supported. - # When given -MP, icc 7.0 and 7.1 complain thusly: - # icc: Command line warning: ignoring option '-M'; no argument required - # The diagnosis changed in icc 8.0: - # icc: Command line remark: option '-MP' not supported - if (grep 'ignoring option' conftest.err || - grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else - am_cv_CC_dependencies_compiler_type=$depmode - break - fi - fi - done - - cd .. - rm -rf conftest.dir -else - am_cv_CC_dependencies_compiler_type=none -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 -$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } -CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type - - if - test "x$enable_dependency_tracking" != xno \ - && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then - am__fastdepCC_TRUE= - am__fastdepCC_FALSE='#' -else - am__fastdepCC_TRUE='#' - am__fastdepCC_FALSE= -fi - - - -# Extract the first word of "ar", so it can be a program name with args. -set dummy ar; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_AR+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $AR in - [\\/]* | ?:[\\/]*) - ac_cv_path_AR="$AR" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_AR="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -AR=$ac_cv_path_AR -if test -n "$AR"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 -$as_echo "$AR" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to include shadow password support" >&5 -$as_echo_n "checking whether to include shadow password support... " >&6; } -@%:@ Check whether --enable-shadow was given. -if test "${enable_shadow+set}" = set; then : - enableval=$enable_shadow; - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - $as_echo "@%:@define HAVE_SHADOW_PASSWORDS 1" >>confdefs.h - - shadow_passwords=yes - -else - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - shadow_passwords=no - - -fi - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for socket in -lsocket" >&5 -$as_echo_n "checking for socket in -lsocket... " >&6; } -if test "${ac_cv_lib_socket_socket+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lsocket $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char socket (); -int -main () -{ -return socket (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_socket_socket=yes -else - ac_cv_lib_socket_socket=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_socket" >&5 -$as_echo "$ac_cv_lib_socket_socket" >&6; } -if test "x$ac_cv_lib_socket_socket" = x""yes; then : - cat >>confdefs.h <<_ACEOF -@%:@define HAVE_LIBSOCKET 1 -_ACEOF - - LIBS="-lsocket $LIBS" - -fi - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyaddr in -lnsl" >&5 -$as_echo_n "checking for gethostbyaddr in -lnsl... " >&6; } -if test "${ac_cv_lib_nsl_gethostbyaddr+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lnsl $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char gethostbyaddr (); -int -main () -{ -return gethostbyaddr (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_nsl_gethostbyaddr=yes -else - ac_cv_lib_nsl_gethostbyaddr=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nsl_gethostbyaddr" >&5 -$as_echo "$ac_cv_lib_nsl_gethostbyaddr" >&6; } -if test "x$ac_cv_lib_nsl_gethostbyaddr" = x""yes; then : - cat >>confdefs.h <<_ACEOF -@%:@define HAVE_LIBNSL 1 -_ACEOF - - LIBS="-lnsl $LIBS" - -fi - - -gethostbyaddrrstyle="" -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking gethostbyaddr_r() syntax" >&5 -$as_echo_n "checking gethostbyaddr_r() syntax... " >&6; } -case "$host" in -*-freebsd*) - -$as_echo "@%:@define GETHOSTBYADDR_R /**/" >>confdefs.h - - -$as_echo "@%:@define GETHOSTBYADDRRSTYLE_BSD /**/" >>confdefs.h - - gethostbyaddrrstyle=BSD - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: FreeBSD overridden to BSD-style" >&5 -$as_echo "$as_me: WARNING: FreeBSD overridden to BSD-style" >&2;} - ;; -esac -if test "x$gethostbyaddrrstyle" = "x"; then - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -#include -#include - -int -main () -{ - gethostbyaddr_r(NULL, 0, 0, NULL, NULL, 0, NULL, NULL) - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - - $as_echo "@%:@define GETHOSTBYADDR_R 1" >>confdefs.h - - -$as_echo "@%:@define GETHOSTBYADDRRSTYLE_GNU /**/" >>confdefs.h - - gethostbyaddrrstyle=GNU - -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -if test "x$gethostbyaddrrstyle" = "x"; then - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -#include -#include - -int -main () -{ - gethostbyaddr_r(NULL, 0, 0, NULL, NULL, 0, NULL) - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - - $as_echo "@%:@define GETHOSTBYADDR_R 1" >>confdefs.h - - -$as_echo "@%:@define GETHOSTBYADDRRSTYLE_SYSV /**/" >>confdefs.h - - gethostbyaddrrstyle=SYSV - -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -if test "x$gethostbyaddrrstyle" = "x"; then - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -#include -#include - -int -main () -{ - gethostbyaddr(NULL, 0, 0) - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - - $as_echo "@%:@define GETHOSTBYADDR_R 1" >>confdefs.h - - $as_echo "@%:@define GETHOSTBYADDRRSTYLE_BSD 1" >>confdefs.h - - gethostbyaddrrstyle=BSD - -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi - -if test "x$gethostbyaddrrstyle" = "x"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: none! It must not exist, here." >&5 -$as_echo "none! It must not exist, here." >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${gethostbyaddrrstyle}-style" >&5 -$as_echo "${gethostbyaddrrstyle}-style" >&6; } -fi - -if test "x$gethostbyaddrrstyle" = "xBSD"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: ****** BSD-style gethostbyaddr might NOT be thread-safe! ****** " >&5 -$as_echo "$as_me: WARNING: ****** BSD-style gethostbyaddr might NOT be thread-safe! ****** " >&2;} -fi - -gethostbynamerstyle="" -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking gethostbyname_r() syntax" >&5 -$as_echo_n "checking gethostbyname_r() syntax... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -#include -#include - -int -main () -{ - gethostbyname_r(NULL, NULL, NULL, 0, NULL, NULL) - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - - -$as_echo "@%:@define GETHOSTBYNAME_R /**/" >>confdefs.h - - -$as_echo "@%:@define GETHOSTBYNAMERSTYLE_GNU /**/" >>confdefs.h - - gethostbynamerstyle=GNU - -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -if test "x$gethostbynamerstyle" = "x"; then - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -#include -#include - -int -main () -{ - gethostbyname_r(NULL, NULL, NULL, 0, NULL) - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - - $as_echo "@%:@define GETHOSTBYNAME_R 1" >>confdefs.h - - -$as_echo "@%:@define GETHOSTBYNAMERSTYLE_SYSV /**/" >>confdefs.h - - gethostbynamerstyle=SYSV - -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -if test "x$gethostbynamerstyle" = "x"; then - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -#include -#include - -int -main () -{ - gethostbyname(NULL) - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - - $as_echo "@%:@define GETHOSTBYNAME_R 1" >>confdefs.h - - -$as_echo "@%:@define GETHOSTBYNAMERSTYLE_BSD /**/" >>confdefs.h - - gethostbynamerstyle=BSD - -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi - -if test "x$gethostbynamerstyle" = "x"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: none! It must not exist, here." >&5 -$as_echo "none! It must not exist, here." >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${gethostbynamerstyle}-style" >&5 -$as_echo "${gethostbynamerstyle}-style" >&6; } -fi - -if test "x$gethostbynamerstyle" = "xBSD"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: ****** BSD-style gethostbyname might NOT be thread-safe! ****** " >&5 -$as_echo "$as_me: WARNING: ****** BSD-style gethostbyname might NOT be thread-safe! ****** " >&2;} -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for crypt in -lcrypt" >&5 -$as_echo_n "checking for crypt in -lcrypt... " >&6; } -if test "${ac_cv_lib_crypt_crypt+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lcrypt $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char crypt (); -int -main () -{ -return crypt (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_crypt_crypt=yes -else - ac_cv_lib_crypt_crypt=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_crypt_crypt" >&5 -$as_echo "$ac_cv_lib_crypt_crypt" >&6; } -if test "x$ac_cv_lib_crypt_crypt" = x""yes; then : - cat >>confdefs.h <<_ACEOF -@%:@define HAVE_LIBCRYPT 1 -_ACEOF - - LIBS="-lcrypt $LIBS" - -fi - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5 -$as_echo_n "checking whether byte ordering is bigendian... " >&6; } -if test "${ac_cv_c_bigendian+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_cv_c_bigendian=unknown - # See if we're dealing with a universal compiler. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifndef __APPLE_CC__ - not a universal capable compiler - #endif - typedef int dummy; - -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - - # Check for potential -arch flags. It is not universal unless - # there are at least two -arch flags with different values. - ac_arch= - ac_prev= - for ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do - if test -n "$ac_prev"; then - case $ac_word in - i?86 | x86_64 | ppc | ppc64) - if test -z "$ac_arch" || test "$ac_arch" = "$ac_word"; then - ac_arch=$ac_word - else - ac_cv_c_bigendian=universal - break - fi - ;; - esac - ac_prev= - elif test "x$ac_word" = "x-arch"; then - ac_prev=arch - fi - done -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - if test $ac_cv_c_bigendian = unknown; then - # See if sys/param.h defines the BYTE_ORDER macro. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - #include - -int -main () -{ -#if ! (defined BYTE_ORDER && defined BIG_ENDIAN \ - && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \ - && LITTLE_ENDIAN) - bogus endian macros - #endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - # It does; now see whether it defined to BIG_ENDIAN or not. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - #include - -int -main () -{ -#if BYTE_ORDER != BIG_ENDIAN - not big endian - #endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_c_bigendian=yes -else - ac_cv_c_bigendian=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - fi - if test $ac_cv_c_bigendian = unknown; then - # See if defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris). - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -int -main () -{ -#if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN) - bogus endian macros - #endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - # It does; now see whether it defined to _BIG_ENDIAN or not. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -int -main () -{ -#ifndef _BIG_ENDIAN - not big endian - #endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_c_bigendian=yes -else - ac_cv_c_bigendian=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - fi - if test $ac_cv_c_bigendian = unknown; then - # Compile a test program. - if test "$cross_compiling" = yes; then : - # Try to guess by grepping values from an object file. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -short int ascii_mm[] = - { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; - short int ascii_ii[] = - { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; - int use_ascii (int i) { - return ascii_mm[i] + ascii_ii[i]; - } - short int ebcdic_ii[] = - { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; - short int ebcdic_mm[] = - { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; - int use_ebcdic (int i) { - return ebcdic_mm[i] + ebcdic_ii[i]; - } - extern int foo; - -int -main () -{ -return use_ascii (foo) == use_ebcdic (foo); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then - ac_cv_c_bigendian=yes - fi - if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then - if test "$ac_cv_c_bigendian" = unknown; then - ac_cv_c_bigendian=no - else - # finding both strings is unlikely to happen, but who knows? - ac_cv_c_bigendian=unknown - fi - fi -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ - - /* Are we little or big endian? From Harbison&Steele. */ - union - { - long int l; - char c[sizeof (long int)]; - } u; - u.l = 1; - return u.c[sizeof (long int) - 1] == 1; - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - ac_cv_c_bigendian=no -else - ac_cv_c_bigendian=yes -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5 -$as_echo "$ac_cv_c_bigendian" >&6; } - case $ac_cv_c_bigendian in #( - yes) - $as_echo "@%:@define WORDS_BIGENDIAN 1" >>confdefs.h -;; #( - no) - ;; #( - universal) - -$as_echo "@%:@define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h - - ;; #( - *) - as_fn_error "unknown endianness - presetting ac_cv_c_bigendian=no (or yes) will help" "$LINENO" 5 ;; - esac - -if test $ac_cv_c_bigendian = yes; then - $as_echo "@%:@define BIG_ENDIAN 1" >>confdefs.h - -else - $as_echo "@%:@define LITTLE_ENDIAN 1" >>confdefs.h - -fi - -ac_header_dirent=no -for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h; do - as_ac_Header=`$as_echo "ac_cv_header_dirent_$ac_hdr" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_hdr that defines DIR" >&5 -$as_echo_n "checking for $ac_hdr that defines DIR... " >&6; } -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include <$ac_hdr> - -int -main () -{ -if ((DIR *) 0) -return 0; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - eval "$as_ac_Header=yes" -else - eval "$as_ac_Header=no" -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -eval ac_res=\$$as_ac_Header - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -eval as_val=\$$as_ac_Header - if test "x$as_val" = x""yes; then : - cat >>confdefs.h <<_ACEOF -@%:@define `$as_echo "HAVE_$ac_hdr" | $as_tr_cpp` 1 -_ACEOF - -ac_header_dirent=$ac_hdr; break -fi - -done -# Two versions of opendir et al. are in -ldir and -lx on SCO Xenix. -if test $ac_header_dirent = dirent.h; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5 -$as_echo_n "checking for library containing opendir... " >&6; } -if test "${ac_cv_search_opendir+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_func_search_save_LIBS=$LIBS -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char opendir (); -int -main () -{ -return opendir (); - ; - return 0; -} -_ACEOF -for ac_lib in '' dir; do - if test -z "$ac_lib"; then - ac_res="none required" - else - ac_res=-l$ac_lib - LIBS="-l$ac_lib $ac_func_search_save_LIBS" - fi - if ac_fn_c_try_link "$LINENO"; then : - ac_cv_search_opendir=$ac_res -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext - if test "${ac_cv_search_opendir+set}" = set; then : - break -fi -done -if test "${ac_cv_search_opendir+set}" = set; then : - -else - ac_cv_search_opendir=no -fi -rm conftest.$ac_ext -LIBS=$ac_func_search_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5 -$as_echo "$ac_cv_search_opendir" >&6; } -ac_res=$ac_cv_search_opendir -if test "$ac_res" != no; then : - test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" - -fi - -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5 -$as_echo_n "checking for library containing opendir... " >&6; } -if test "${ac_cv_search_opendir+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_func_search_save_LIBS=$LIBS -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char opendir (); -int -main () -{ -return opendir (); - ; - return 0; -} -_ACEOF -for ac_lib in '' x; do - if test -z "$ac_lib"; then - ac_res="none required" - else - ac_res=-l$ac_lib - LIBS="-l$ac_lib $ac_func_search_save_LIBS" - fi - if ac_fn_c_try_link "$LINENO"; then : - ac_cv_search_opendir=$ac_res -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext - if test "${ac_cv_search_opendir+set}" = set; then : - break -fi -done -if test "${ac_cv_search_opendir+set}" = set; then : - -else - ac_cv_search_opendir=no -fi -rm conftest.$ac_ext -LIBS=$ac_func_search_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5 -$as_echo "$ac_cv_search_opendir" >&6; } -ac_res=$ac_cv_search_opendir -if test "$ac_res" != no; then : - test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" - -fi - -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 -$as_echo_n "checking for ANSI C header files... " >&6; } -if test "${ac_cv_header_stdc+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#include -#include - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_header_stdc=yes -else - ac_cv_header_stdc=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - -if test $ac_cv_header_stdc = yes; then - # SunOS 4.x string.h does not declare mem*, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "memchr" >/dev/null 2>&1; then : - -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "free" >/dev/null 2>&1; then : - -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. - if test "$cross_compiling" = yes; then : - : -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#if ((' ' & 0x0FF) == 0x020) -# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') -# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) -#else -# define ISLOWER(c) \ - (('a' <= (c) && (c) <= 'i') \ - || ('j' <= (c) && (c) <= 'r') \ - || ('s' <= (c) && (c) <= 'z')) -# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) -#endif - -#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) -int -main () -{ - int i; - for (i = 0; i < 256; i++) - if (XOR (islower (i), ISLOWER (i)) - || toupper (i) != TOUPPER (i)) - return 2; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - -else - ac_cv_header_stdc=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - -fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 -$as_echo "$ac_cv_header_stdc" >&6; } -if test $ac_cv_header_stdc = yes; then - -$as_echo "@%:@define STDC_HEADERS 1" >>confdefs.h - -fi - -for ac_header in crypt.h signal.h sys/signal.h sys/stat.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" -eval as_val=\$$as_ac_Header - if test "x$as_val" = x""yes; then : - cat >>confdefs.h <<_ACEOF -@%:@define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - -fi - -done - -for ac_header in fcntl.h sys/fcntl.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" -eval as_val=\$$as_ac_Header - if test "x$as_val" = x""yes; then : - cat >>confdefs.h <<_ACEOF -@%:@define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - -fi - -done - -for ac_header in sys/utsname.h getopt.h unistd.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" -eval as_val=\$$as_ac_Header - if test "x$as_val" = x""yes; then : - cat >>confdefs.h <<_ACEOF -@%:@define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - -fi - -done - -for ac_header in sys/file.h termios.h sys/ioctl.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" -eval as_val=\$$as_ac_Header - if test "x$as_val" = x""yes; then : - cat >>confdefs.h <<_ACEOF -@%:@define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - -fi - -done - -for ac_header in netdb.h syslog.h pwd.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" -eval as_val=\$$as_ac_Header - if test "x$as_val" = x""yes; then : - cat >>confdefs.h <<_ACEOF -@%:@define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - -fi - -done - -for ac_header in sys/socket.h netinet/in.h arpa/inet.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" -eval as_val=\$$as_ac_Header - if test "x$as_val" = x""yes; then : - cat >>confdefs.h <<_ACEOF -@%:@define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - -fi - -done - -if test "$shadow_passwords" = "yes" -then - ac_fn_c_check_header_mongrel "$LINENO" "shadow.h" "ac_cv_header_shadow_h" "$ac_includes_default" -if test "x$ac_cv_header_shadow_h" = x""yes; then : - -fi - - -fi - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5 -$as_echo_n "checking for an ANSI C-conforming const... " >&6; } -if test "${ac_cv_c_const+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ -/* FIXME: Include the comments suggested by Paul. */ -#ifndef __cplusplus - /* Ultrix mips cc rejects this. */ - typedef int charset[2]; - const charset cs; - /* SunOS 4.1.1 cc rejects this. */ - char const *const *pcpcc; - char **ppc; - /* NEC SVR4.0.2 mips cc rejects this. */ - struct point {int x, y;}; - static struct point const zero = {0,0}; - /* AIX XL C 1.02.0.0 rejects this. - It does not let you subtract one const X* pointer from another in - an arm of an if-expression whose if-part is not a constant - expression */ - const char *g = "string"; - pcpcc = &g + (g ? g-g : 0); - /* HPUX 7.0 cc rejects these. */ - ++pcpcc; - ppc = (char**) pcpcc; - pcpcc = (char const *const *) ppc; - { /* SCO 3.2v4 cc rejects this. */ - char *t; - char const *s = 0 ? (char *) 0 : (char const *) 0; - - *t++ = 0; - if (s) return 0; - } - { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ - int x[] = {25, 17}; - const int *foo = &x[0]; - ++foo; - } - { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ - typedef const int *iptr; - iptr p = 0; - ++p; - } - { /* AIX XL C 1.02.0.0 rejects this saying - "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ - struct s { int j; const int *ap[3]; }; - struct s *b; b->j = 5; - } - { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ - const int foo = 10; - if (!foo) return 0; - } - return !cs[0] && !zero.x; -#endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_c_const=yes -else - ac_cv_c_const=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5 -$as_echo "$ac_cv_c_const" >&6; } -if test $ac_cv_c_const = no; then - -$as_echo "@%:@define const /**/" >>confdefs.h - -fi - -ac_fn_c_check_type "$LINENO" "off_t" "ac_cv_type_off_t" "$ac_includes_default" -if test "x$ac_cv_type_off_t" = x""yes; then : - -else - -cat >>confdefs.h <<_ACEOF -@%:@define off_t long int -_ACEOF - -fi - -ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" -if test "x$ac_cv_type_size_t" = x""yes; then : - -else - -cat >>confdefs.h <<_ACEOF -@%:@define size_t unsigned int -_ACEOF - -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether time.h and sys/time.h may both be included" >&5 -$as_echo_n "checking whether time.h and sys/time.h may both be included... " >&6; } -if test "${ac_cv_header_time+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#include - -int -main () -{ -if ((struct tm *) 0) -return 0; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_header_time=yes -else - ac_cv_header_time=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_time" >&5 -$as_echo "$ac_cv_header_time" >&6; } -if test $ac_cv_header_time = yes; then - -$as_echo "@%:@define TIME_WITH_SYS_TIME 1" >>confdefs.h - -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether struct tm is in sys/time.h or time.h" >&5 -$as_echo_n "checking whether struct tm is in sys/time.h or time.h... " >&6; } -if test "${ac_cv_struct_tm+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include - -int -main () -{ -struct tm tm; - int *p = &tm.tm_sec; - return !p; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_struct_tm=time.h -else - ac_cv_struct_tm=sys/time.h -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_struct_tm" >&5 -$as_echo "$ac_cv_struct_tm" >&6; } -if test $ac_cv_struct_tm = sys/time.h; then - -$as_echo "@%:@define TM_IN_SYS_TIME 1" >>confdefs.h - -fi - - -if test $ac_cv_c_compiler_gnu = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC needs -traditional" >&5 -$as_echo_n "checking whether $CC needs -traditional... " >&6; } -if test "${ac_cv_prog_gcc_traditional+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_pattern="Autoconf.*'x'" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -Autoconf TIOCGETP -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "$ac_pattern" >/dev/null 2>&1; then : - ac_cv_prog_gcc_traditional=yes -else - ac_cv_prog_gcc_traditional=no -fi -rm -f conftest* - - - if test $ac_cv_prog_gcc_traditional = no; then - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -Autoconf TCGETA -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "$ac_pattern" >/dev/null 2>&1; then : - ac_cv_prog_gcc_traditional=yes -fi -rm -f conftest* - - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_gcc_traditional" >&5 -$as_echo "$ac_cv_prog_gcc_traditional" >&6; } - if test $ac_cv_prog_gcc_traditional = yes; then - CC="$CC -traditional" - fi -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for working memcmp" >&5 -$as_echo_n "checking for working memcmp... " >&6; } -if test "${ac_cv_func_memcmp_working+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - ac_cv_func_memcmp_working=no -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ - - /* Some versions of memcmp are not 8-bit clean. */ - char c0 = '\100', c1 = '\200', c2 = '\201'; - if (memcmp(&c0, &c2, 1) >= 0 || memcmp(&c1, &c2, 1) >= 0) - return 1; - - /* The Next x86 OpenStep bug shows up only when comparing 16 bytes - or more and with at least one buffer not starting on a 4-byte boundary. - William Lewis provided this test program. */ - { - char foo[21]; - char bar[21]; - int i; - for (i = 0; i < 4; i++) - { - char *a = foo + i; - char *b = bar + i; - strcpy (a, "--------01111111"); - strcpy (b, "--------10000000"); - if (memcmp (a, b, 16) >= 0) - return 1; - } - return 0; - } - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - ac_cv_func_memcmp_working=yes -else - ac_cv_func_memcmp_working=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_memcmp_working" >&5 -$as_echo "$ac_cv_func_memcmp_working" >&6; } -test $ac_cv_func_memcmp_working = no && case " $LIB@&t@OBJS " in - *" memcmp.$ac_objext "* ) ;; - *) LIB@&t@OBJS="$LIB@&t@OBJS memcmp.$ac_objext" - ;; -esac - - -if test "${ac_cv_func_setvbuf_reversed+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_cv_func_setvbuf_reversed=no -fi - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking return type of signal handlers" >&5 -$as_echo_n "checking return type of signal handlers... " >&6; } -if test "${ac_cv_type_signal+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include - -int -main () -{ -return *(signal (0, 0)) (0) == 1; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_type_signal=int -else - ac_cv_type_signal=void -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_signal" >&5 -$as_echo "$ac_cv_type_signal" >&6; } - -cat >>confdefs.h <<_ACEOF -@%:@define RETSIGTYPE $ac_cv_type_signal -_ACEOF - - -for ac_func in strftime -do : - ac_fn_c_check_func "$LINENO" "strftime" "ac_cv_func_strftime" -if test "x$ac_cv_func_strftime" = x""yes; then : - cat >>confdefs.h <<_ACEOF -@%:@define HAVE_STRFTIME 1 -_ACEOF - -else - # strftime is in -lintl on SCO UNIX. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for strftime in -lintl" >&5 -$as_echo_n "checking for strftime in -lintl... " >&6; } -if test "${ac_cv_lib_intl_strftime+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lintl $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char strftime (); -int -main () -{ -return strftime (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_intl_strftime=yes -else - ac_cv_lib_intl_strftime=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_intl_strftime" >&5 -$as_echo "$ac_cv_lib_intl_strftime" >&6; } -if test "x$ac_cv_lib_intl_strftime" = x""yes; then : - $as_echo "@%:@define HAVE_STRFTIME 1" >>confdefs.h - -LIBS="-lintl $LIBS" -fi - -fi -done - -# The Ultrix 4.2 mips builtin alloca declared by alloca.h only works -# for constant arguments. Useless! -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for working alloca.h" >&5 -$as_echo_n "checking for working alloca.h... " >&6; } -if test "${ac_cv_working_alloca_h+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -@%:@include -int -main () -{ -char *p = (char *) alloca (2 * sizeof (int)); - if (p) return 0; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_working_alloca_h=yes -else - ac_cv_working_alloca_h=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_working_alloca_h" >&5 -$as_echo "$ac_cv_working_alloca_h" >&6; } -if test $ac_cv_working_alloca_h = yes; then - -$as_echo "@%:@define HAVE_ALLOCA_H 1" >>confdefs.h - -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for alloca" >&5 -$as_echo_n "checking for alloca... " >&6; } -if test "${ac_cv_func_alloca_works+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __GNUC__ -# define alloca __builtin_alloca -#else -# ifdef _MSC_VER -# include -# define alloca _alloca -# else -# ifdef HAVE_ALLOCA_H -# include -# else -# ifdef _AIX - #pragma alloca -# else -# ifndef alloca /* predefined by HP cc +Olibcalls */ -char *alloca (); -# endif -# endif -# endif -# endif -#endif - -int -main () -{ -char *p = (char *) alloca (1); - if (p) return 0; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_func_alloca_works=yes -else - ac_cv_func_alloca_works=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_alloca_works" >&5 -$as_echo "$ac_cv_func_alloca_works" >&6; } - -if test $ac_cv_func_alloca_works = yes; then - -$as_echo "@%:@define HAVE_ALLOCA 1" >>confdefs.h - -else - # The SVR3 libPW and SVR4 libucb both contain incompatible functions -# that cause trouble. Some versions do not even contain alloca or -# contain a buggy version. If you still want to use their alloca, -# use ar to extract alloca.o from them instead of compiling alloca.c. - -ALLOCA=\${LIBOBJDIR}alloca.$ac_objext - -$as_echo "@%:@define C_ALLOCA 1" >>confdefs.h - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether \`alloca.c' needs Cray hooks" >&5 -$as_echo_n "checking whether \`alloca.c' needs Cray hooks... " >&6; } -if test "${ac_cv_os_cray+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#if defined CRAY && ! defined CRAY2 -webecray -#else -wenotbecray -#endif - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "webecray" >/dev/null 2>&1; then : - ac_cv_os_cray=yes -else - ac_cv_os_cray=no -fi -rm -f conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_os_cray" >&5 -$as_echo "$ac_cv_os_cray" >&6; } -if test $ac_cv_os_cray = yes; then - for ac_func in _getb67 GETB67 getb67; do - as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` -ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" -eval as_val=\$$as_ac_var - if test "x$as_val" = x""yes; then : - -cat >>confdefs.h <<_ACEOF -@%:@define CRAY_STACKSEG_END $ac_func -_ACEOF - - break -fi - - done -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking stack direction for C alloca" >&5 -$as_echo_n "checking stack direction for C alloca... " >&6; } -if test "${ac_cv_c_stack_direction+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - ac_cv_c_stack_direction=0 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$ac_includes_default -int -find_stack_direction () -{ - static char *addr = 0; - auto char dummy; - if (addr == 0) - { - addr = &dummy; - return find_stack_direction (); - } - else - return (&dummy > addr) ? 1 : -1; -} - -int -main () -{ - return find_stack_direction () < 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - ac_cv_c_stack_direction=1 -else - ac_cv_c_stack_direction=-1 -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_stack_direction" >&5 -$as_echo "$ac_cv_c_stack_direction" >&6; } -cat >>confdefs.h <<_ACEOF -@%:@define STACK_DIRECTION $ac_cv_c_stack_direction -_ACEOF - - -fi - -for ac_func in strdup strerror strcasecmp -do : - as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` -ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" -eval as_val=\$$as_ac_var - if test "x$as_val" = x""yes; then : - cat >>confdefs.h <<_ACEOF -@%:@define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 -_ACEOF - -else - case " $LIB@&t@OBJS " in - *" $ac_func.$ac_objext "* ) ;; - *) LIB@&t@OBJS="$LIB@&t@OBJS $ac_func.$ac_objext" - ;; -esac - -fi -done - - -for ac_func in flock fcntl uname gethostname sysinfo getdomainname -do : - as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` -ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" -eval as_val=\$$as_ac_var - if test "x$as_val" = x""yes; then : - cat >>confdefs.h <<_ACEOF -@%:@define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 -_ACEOF - -fi -done - -for ac_func in stricmp random rand snprintf vsnprintf -do : - as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` -ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" -eval as_val=\$$as_ac_var - if test "x$as_val" = x""yes; then : - cat >>confdefs.h <<_ACEOF -@%:@define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 -_ACEOF - -fi -done - - -if test "$ac_cv_func_uname" = 'yes' -then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for field domainname in struct utsname" >&5 -$as_echo_n "checking for field domainname in struct utsname... " >&6; } - if test "$cross_compiling" = yes; then : - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error "cannot run test program while cross compiling -See \`config.log' for more details." "$LINENO" 5; } -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - #include - - main(int argc, char **argv) - { - struct utsname uts; - uts.domainname[0] = '\0'; - } - -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - $as_echo "@%:@define HAVE_STRUCT_UTSNAME_DOMAINNAME 1" >>confdefs.h - -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for /dev/urandom" >&5 -$as_echo_n "checking for /dev/urandom... " >&6; } -if test -c /dev/urandom -then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - $as_echo "@%:@define HAVE_DEV_URANDOM 1" >>confdefs.h - -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - -echo $ac_n "using the following PATH setting for exec'ed programs... $ac_c" 1>&6 - -@%:@ Check whether --with-secure-path was given. -if test "${with_secure_path+set}" = set; then : - withval=$with_secure_path; - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $withval" >&5 -$as_echo "$withval" >&6; } - RC_SECURE_PATH=$withval - -else - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: /bin:/usr/bin:/usr/local/bin" >&5 -$as_echo "/bin:/usr/bin:/usr/local/bin" >&6; } - RC_SECURE_PATH=/bin:/usr/bin:/usr/local/bin - - -fi - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking which syslog facility to use" >&5 -$as_echo_n "checking which syslog facility to use... " >&6; } - -@%:@ Check whether --with-facility was given. -if test "${with_facility+set}" = set; then : - withval=$with_facility; - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $withval" >&5 -$as_echo "$withval" >&6; } - RC_LOG_FACILITY=$withval - -else - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: LOG_DAEMON" >&5 -$as_echo "LOG_DAEMON" >&6; } - RC_LOG_FACILITY=LOG_DAEMON - - -fi - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to include Livingston's RADIUS server 1.16 kludge" >&5 -$as_echo_n "checking whether to include Livingston's RADIUS server 1.16 kludge... " >&6; } -@%:@ Check whether --enable-radius-116 was given. -if test "${enable_radius_116+set}" = set; then : - enableval=$enable_radius_116; - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - $as_echo "@%:@define RADIUS_116 1" >>confdefs.h - - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: !! This is a bug in Livingston's RADIUS server v1.16. There" >&5 -$as_echo "$as_me: WARNING: !! This is a bug in Livingston's RADIUS server v1.16. There" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: !! is a patch included with radiusclient which fixes this" >&5 -$as_echo "$as_me: WARNING: !! is a patch included with radiusclient which fixes this" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: !! problem. See patches/radiusd-1.16.accounting.diff. With" >&5 -$as_echo "$as_me: WARNING: !! problem. See patches/radiusd-1.16.accounting.diff. With" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: !! the patched RADIUS server you no longer need to activate" >&5 -$as_echo "$as_me: WARNING: !! the patched RADIUS server you no longer need to activate" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: !! this hack." >&5 -$as_echo "$as_me: WARNING: !! this hack." >&2;} - -else - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - - -fi - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to add service type hints derived from username prefix" >&5 -$as_echo_n "checking whether to add service type hints derived from username prefix... " >&6; } -@%:@ Check whether --enable-scp was given. -if test "${enable_scp+set}" = set; then : - enableval=$enable_scp; - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - $as_echo "@%:@define SCP 1" >>confdefs.h - - -else - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - - -fi - - - - - - - - - - - - - - - - -ac_config_headers="$ac_config_headers config.h" - -ac_config_files="$ac_config_files Makefile include/Makefile lib/Makefile src/Makefile man/Makefile etc/Makefile doc/Makefile patches/Makefile login.radius/Makefile login.radius/migs/Makefile rpm/Makefile debian/Makefile" - -ac_config_commands="$ac_config_commands default" - -cat >confcache <<\_ACEOF -# This file is a shell script that caches the results of configure -# tests run on this system so they can be shared between configure -# scripts and configure runs, see configure's option --config-cache. -# It is not useful on other systems. If it contains results you don't -# want to keep, you may remove or edit it. -# -# config.status only pays attention to the cache file if you give it -# the --recheck option to rerun configure. -# -# `ac_cv_env_foo' variables (set or unset) will be overridden when -# loading this file, other *unset* `ac_cv_foo' will be assigned the -# following values. - -_ACEOF - -# The following way of writing the cache mishandles newlines in values, -# but we know of no workaround that is simple, portable, and efficient. -# So, we kill variables containing newlines. -# Ultrix sh set writes to stderr and can't be redirected directly, -# and sets the high bit in the cache file unless we assign to the vars. -( - for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do - eval ac_val=\$$ac_var - case $ac_val in #( - *${as_nl}*) - case $ac_var in #( - *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; - esac - case $ac_var in #( - _ | IFS | as_nl) ;; #( - BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( - *) { eval $ac_var=; unset $ac_var;} ;; - esac ;; - esac - done - - (set) 2>&1 | - case $as_nl`(ac_space=' '; set) 2>&1` in #( - *${as_nl}ac_space=\ *) - # `set' does not quote correctly, so add quotes: double-quote - # substitution turns \\\\ into \\, and sed turns \\ into \. - sed -n \ - "s/'/'\\\\''/g; - s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" - ;; #( - *) - # `set' quotes correctly as required by POSIX, so do not add quotes. - sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" - ;; - esac | - sort -) | - sed ' - /^ac_cv_env_/b end - t clear - :clear - s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ - t end - s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ - :end' >>confcache -if diff "$cache_file" confcache >/dev/null 2>&1; then :; else - if test -w "$cache_file"; then - test "x$cache_file" != "x/dev/null" && - { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 -$as_echo "$as_me: updating cache $cache_file" >&6;} - cat confcache >$cache_file - else - { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 -$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} - fi -fi -rm -f confcache - -test "x$prefix" = xNONE && prefix=$ac_default_prefix -# Let make expand exec_prefix. -test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' - -DEFS=-DHAVE_CONFIG_H - -ac_libobjs= -ac_ltlibobjs= -for ac_i in : $LIB@&t@OBJS; do test "x$ac_i" = x: && continue - # 1. Remove the extension, and $U if already installed. - ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' - ac_i=`$as_echo "$ac_i" | sed "$ac_script"` - # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR - # will be set to the directory where LIBOBJS objects are built. - as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" - as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' -done -LIB@&t@OBJS=$ac_libobjs - -LTLIBOBJS=$ac_ltlibobjs - - -if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then - as_fn_error "conditional \"MAINTAINER_MODE\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi - if test -n "$EXEEXT"; then - am__EXEEXT_TRUE= - am__EXEEXT_FALSE='#' -else - am__EXEEXT_TRUE='#' - am__EXEEXT_FALSE= -fi - -if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then - as_fn_error "conditional \"AMDEP\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then - as_fn_error "conditional \"am__fastdepCC\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then - as_fn_error "conditional \"am__fastdepCC\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi - - -: ${CONFIG_STATUS=./config.status} -ac_write_fail=0 -ac_clean_files_save=$ac_clean_files -ac_clean_files="$ac_clean_files $CONFIG_STATUS" -{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 -$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} -as_write_fail=0 -cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 -#! $SHELL -# Generated by $as_me. -# Run this file to recreate the current configuration. -# Compiler output produced by configure, useful for debugging -# configure, is in config.log if it exists. - -debug=false -ac_cs_recheck=false -ac_cs_silent=false - -SHELL=\${CONFIG_SHELL-$SHELL} -export SHELL -_ASEOF -cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 -## -------------------- ## -## M4sh Initialization. ## -## -------------------- ## - -# Be more Bourne compatible -DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : - emulate sh - NULLCMD=: - # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in @%:@( - *posix*) : - set -o posix ;; @%:@( - *) : - ;; -esac -fi - - -as_nl=' -' -export as_nl -# Printing a long string crashes Solaris 7 /usr/bin/printf. -as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo -# Prefer a ksh shell builtin over an external printf program on Solaris, -# but without wasting forks for bash or zsh. -if test -z "$BASH_VERSION$ZSH_VERSION" \ - && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='print -r --' - as_echo_n='print -rn --' -elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='printf %s\n' - as_echo_n='printf %s' -else - if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then - as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' - as_echo_n='/usr/ucb/echo -n' - else - as_echo_body='eval expr "X$1" : "X\\(.*\\)"' - as_echo_n_body='eval - arg=$1; - case $arg in @%:@( - *"$as_nl"*) - expr "X$arg" : "X\\(.*\\)$as_nl"; - arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; - esac; - expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" - ' - export as_echo_n_body - as_echo_n='sh -c $as_echo_n_body as_echo' - fi - export as_echo_body - as_echo='sh -c $as_echo_body as_echo' -fi - -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - PATH_SEPARATOR=: - (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { - (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || - PATH_SEPARATOR=';' - } -fi - - -# IFS -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent editors from complaining about space-tab. -# (If _AS_PATH_WALK were called with IFS unset, it would disable word -# splitting by setting IFS to empty value.) -IFS=" "" $as_nl" - -# Find who we are. Look in the path if we contain no directory separator. -case $0 in @%:@(( - *[\\/]* ) as_myself=$0 ;; - *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break - done -IFS=$as_save_IFS - - ;; -esac -# We did not find ourselves, most probably we were run as `sh COMMAND' -# in which case we are not to be found in the path. -if test "x$as_myself" = x; then - as_myself=$0 -fi -if test ! -f "$as_myself"; then - $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 - exit 1 -fi - -# Unset variables that we do not need and which cause bugs (e.g. in -# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" -# suppresses any "Segmentation fault" message there. '((' could -# trigger a bug in pdksh 5.2.14. -for as_var in BASH_ENV ENV MAIL MAILPATH -do eval test x\${$as_var+set} = xset \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# CDPATH. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - - -@%:@ as_fn_error ERROR [LINENO LOG_FD] -@%:@ --------------------------------- -@%:@ Output "`basename @S|@0`: error: ERROR" to stderr. If LINENO and LOG_FD are -@%:@ provided, also output the error to LOG_FD, referencing LINENO. Then exit the -@%:@ script with status @S|@?, using 1 if that was 0. -as_fn_error () -{ - as_status=$?; test $as_status -eq 0 && as_status=1 - if test "$3"; then - as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3 - fi - $as_echo "$as_me: error: $1" >&2 - as_fn_exit $as_status -} @%:@ as_fn_error - - -@%:@ as_fn_set_status STATUS -@%:@ ----------------------- -@%:@ Set @S|@? to STATUS, without forking. -as_fn_set_status () -{ - return $1 -} @%:@ as_fn_set_status - -@%:@ as_fn_exit STATUS -@%:@ ----------------- -@%:@ Exit the shell with STATUS, even in a "trap 0" or "set -e" context. -as_fn_exit () -{ - set +e - as_fn_set_status $1 - exit $1 -} @%:@ as_fn_exit - -@%:@ as_fn_unset VAR -@%:@ --------------- -@%:@ Portably unset VAR. -as_fn_unset () -{ - { eval $1=; unset $1;} -} -as_unset=as_fn_unset -@%:@ as_fn_append VAR VALUE -@%:@ ---------------------- -@%:@ Append the text in VALUE to the end of the definition contained in VAR. Take -@%:@ advantage of any shell optimizations that allow amortized linear growth over -@%:@ repeated appends, instead of the typical quadratic growth present in naive -@%:@ implementations. -if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : - eval 'as_fn_append () - { - eval $1+=\$2 - }' -else - as_fn_append () - { - eval $1=\$$1\$2 - } -fi # as_fn_append - -@%:@ as_fn_arith ARG... -@%:@ ------------------ -@%:@ Perform arithmetic evaluation on the ARGs, and store the result in the -@%:@ global @S|@as_val. Take advantage of shells that can avoid forks. The arguments -@%:@ must be portable across @S|@(()) and expr. -if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : - eval 'as_fn_arith () - { - as_val=$(( $* )) - }' -else - as_fn_arith () - { - as_val=`expr "$@" || test $? -eq 1` - } -fi # as_fn_arith - - -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi - -if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then - as_basename=basename -else - as_basename=false -fi - -if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then - as_dirname=dirname -else - as_dirname=false -fi - -as_me=`$as_basename -- "$0" || -$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X/"$0" | - sed '/^.*\/\([^/][^/]*\)\/*$/{ - s//\1/ - q - } - /^X\/\(\/\/\)$/{ - s//\1/ - q - } - /^X\/\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - -# Avoid depending upon Character Ranges. -as_cr_letters='abcdefghijklmnopqrstuvwxyz' -as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' -as_cr_Letters=$as_cr_letters$as_cr_LETTERS -as_cr_digits='0123456789' -as_cr_alnum=$as_cr_Letters$as_cr_digits - -ECHO_C= ECHO_N= ECHO_T= -case `echo -n x` in @%:@((((( --n*) - case `echo 'xy\c'` in - *c*) ECHO_T=' ';; # ECHO_T is single tab character. - xy) ECHO_C='\c';; - *) echo `echo ksh88 bug on AIX 6.1` > /dev/null - ECHO_T=' ';; - esac;; -*) - ECHO_N='-n';; -esac - -rm -f conf$$ conf$$.exe conf$$.file -if test -d conf$$.dir; then - rm -f conf$$.dir/conf$$.file -else - rm -f conf$$.dir - mkdir conf$$.dir 2>/dev/null -fi -if (echo >conf$$.file) 2>/dev/null; then - if ln -s conf$$.file conf$$ 2>/dev/null; then - as_ln_s='ln -s' - # ... but there are two gotchas: - # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -p'. - ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || - as_ln_s='cp -p' - elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln - else - as_ln_s='cp -p' - fi -else - as_ln_s='cp -p' -fi -rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file -rmdir conf$$.dir 2>/dev/null - - -@%:@ as_fn_mkdir_p -@%:@ ------------- -@%:@ Create "@S|@as_dir" as a directory, including parents if necessary. -as_fn_mkdir_p () -{ - - case $as_dir in #( - -*) as_dir=./$as_dir;; - esac - test -d "$as_dir" || eval $as_mkdir_p || { - as_dirs= - while :; do - case $as_dir in #( - *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( - *) as_qdir=$as_dir;; - esac - as_dirs="'$as_qdir' $as_dirs" - as_dir=`$as_dirname -- "$as_dir" || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - test -d "$as_dir" && break - done - test -z "$as_dirs" || eval "mkdir $as_dirs" - } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir" - - -} @%:@ as_fn_mkdir_p -if mkdir -p . 2>/dev/null; then - as_mkdir_p='mkdir -p "$as_dir"' -else - test -d ./-p && rmdir ./-p - as_mkdir_p=false -fi - -if test -x / >/dev/null 2>&1; then - as_test_x='test -x' -else - if ls -dL / >/dev/null 2>&1; then - as_ls_L_option=L - else - as_ls_L_option= - fi - as_test_x=' - eval sh -c '\'' - if test -d "$1"; then - test -d "$1/."; - else - case $1 in @%:@( - -*)set "./$1";; - esac; - case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in @%:@(( - ???[sx]*):;;*)false;;esac;fi - '\'' sh - ' -fi -as_executable_p=$as_test_x - -# Sed expression to map a string onto a valid CPP name. -as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" - -# Sed expression to map a string onto a valid variable name. -as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" - - -exec 6>&1 -## ----------------------------------- ## -## Main body of $CONFIG_STATUS script. ## -## ----------------------------------- ## -_ASEOF -test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -# Save the log message, to keep $0 and so on meaningful, and to -# report actual input values of CONFIG_FILES etc. instead of their -# values after options handling. -ac_log=" -This file was extended by $as_me, which was -generated by GNU Autoconf 2.65. Invocation command line was - - CONFIG_FILES = $CONFIG_FILES - CONFIG_HEADERS = $CONFIG_HEADERS - CONFIG_LINKS = $CONFIG_LINKS - CONFIG_COMMANDS = $CONFIG_COMMANDS - $ $0 $@ - -on `(hostname || uname -n) 2>/dev/null | sed 1q` -" - -_ACEOF - -case $ac_config_files in *" -"*) set x $ac_config_files; shift; ac_config_files=$*;; -esac - -case $ac_config_headers in *" -"*) set x $ac_config_headers; shift; ac_config_headers=$*;; -esac - - -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -# Files that config.status was made for. -config_files="$ac_config_files" -config_headers="$ac_config_headers" -config_commands="$ac_config_commands" - -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -ac_cs_usage="\ -\`$as_me' instantiates files and other configuration actions -from templates according to the current configuration. Unless the files -and actions are specified as TAGs, all are instantiated by default. - -Usage: $0 [OPTION]... [TAG]... - - -h, --help print this help, then exit - -V, --version print version number and configuration settings, then exit - --config print configuration, then exit - -q, --quiet, --silent - do not print progress messages - -d, --debug don't remove temporary files - --recheck update $as_me by reconfiguring in the same conditions - --file=FILE[:TEMPLATE] - instantiate the configuration file FILE - --header=FILE[:TEMPLATE] - instantiate the configuration header FILE - -Configuration files: -$config_files - -Configuration headers: -$config_headers - -Configuration commands: -$config_commands - -Report bugs to the package provider." - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" -ac_cs_version="\\ -config.status -configured by $0, generated by GNU Autoconf 2.65, - with options \\"\$ac_cs_config\\" - -Copyright (C) 2009 Free Software Foundation, Inc. -This config.status script is free software; the Free Software Foundation -gives unlimited permission to copy, distribute and modify it." - -ac_pwd='$ac_pwd' -srcdir='$srcdir' -INSTALL='$INSTALL' -MKDIR_P='$MKDIR_P' -AWK='$AWK' -test -n "\$AWK" || AWK=awk -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -# The default lists apply if the user does not specify any file. -ac_need_defaults=: -while test $# != 0 -do - case $1 in - --*=*) - ac_option=`expr "X$1" : 'X\([^=]*\)='` - ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` - ac_shift=: - ;; - *) - ac_option=$1 - ac_optarg=$2 - ac_shift=shift - ;; - esac - - case $ac_option in - # Handling of the options. - -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) - ac_cs_recheck=: ;; - --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) - $as_echo "$ac_cs_version"; exit ;; - --config | --confi | --conf | --con | --co | --c ) - $as_echo "$ac_cs_config"; exit ;; - --debug | --debu | --deb | --de | --d | -d ) - debug=: ;; - --file | --fil | --fi | --f ) - $ac_shift - case $ac_optarg in - *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; - esac - as_fn_append CONFIG_FILES " '$ac_optarg'" - ac_need_defaults=false;; - --header | --heade | --head | --hea ) - $ac_shift - case $ac_optarg in - *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; - esac - as_fn_append CONFIG_HEADERS " '$ac_optarg'" - ac_need_defaults=false;; - --he | --h) - # Conflict between --help and --header - as_fn_error "ambiguous option: \`$1' -Try \`$0 --help' for more information.";; - --help | --hel | -h ) - $as_echo "$ac_cs_usage"; exit ;; - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil | --si | --s) - ac_cs_silent=: ;; - - # This is an error. - -*) as_fn_error "unrecognized option: \`$1' -Try \`$0 --help' for more information." ;; - - *) as_fn_append ac_config_targets " $1" - ac_need_defaults=false ;; - - esac - shift -done - -ac_configure_extra_args= - -if $ac_cs_silent; then - exec 6>/dev/null - ac_configure_extra_args="$ac_configure_extra_args --silent" -fi - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -if \$ac_cs_recheck; then - set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion - shift - \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 - CONFIG_SHELL='$SHELL' - export CONFIG_SHELL - exec "\$@" -fi - -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -exec 5>>config.log -{ - echo - sed 'h;s/./-/g;s/^.../@%:@@%:@ /;s/...$/ @%:@@%:@/;p;x;p;x' <<_ASBOX -@%:@@%:@ Running $as_me. @%:@@%:@ -_ASBOX - $as_echo "$ac_log" -} >&5 - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -# -# INIT-COMMANDS -# -AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" - - -# The HP-UX ksh and POSIX shell print the target directory to stdout -# if CDPATH is set. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -sed_quote_subst='$sed_quote_subst' -double_quote_subst='$double_quote_subst' -delay_variable_subst='$delay_variable_subst' -macro_version='`$ECHO "X$macro_version" | $Xsed -e "$delay_single_quote_subst"`' -macro_revision='`$ECHO "X$macro_revision" | $Xsed -e "$delay_single_quote_subst"`' -enable_shared='`$ECHO "X$enable_shared" | $Xsed -e "$delay_single_quote_subst"`' -enable_static='`$ECHO "X$enable_static" | $Xsed -e "$delay_single_quote_subst"`' -pic_mode='`$ECHO "X$pic_mode" | $Xsed -e "$delay_single_quote_subst"`' -enable_fast_install='`$ECHO "X$enable_fast_install" | $Xsed -e "$delay_single_quote_subst"`' -host_alias='`$ECHO "X$host_alias" | $Xsed -e "$delay_single_quote_subst"`' -host='`$ECHO "X$host" | $Xsed -e "$delay_single_quote_subst"`' -host_os='`$ECHO "X$host_os" | $Xsed -e "$delay_single_quote_subst"`' -build_alias='`$ECHO "X$build_alias" | $Xsed -e "$delay_single_quote_subst"`' -build='`$ECHO "X$build" | $Xsed -e "$delay_single_quote_subst"`' -build_os='`$ECHO "X$build_os" | $Xsed -e "$delay_single_quote_subst"`' -SED='`$ECHO "X$SED" | $Xsed -e "$delay_single_quote_subst"`' -Xsed='`$ECHO "X$Xsed" | $Xsed -e "$delay_single_quote_subst"`' -GREP='`$ECHO "X$GREP" | $Xsed -e "$delay_single_quote_subst"`' -EGREP='`$ECHO "X$EGREP" | $Xsed -e "$delay_single_quote_subst"`' -FGREP='`$ECHO "X$FGREP" | $Xsed -e "$delay_single_quote_subst"`' -LD='`$ECHO "X$LD" | $Xsed -e "$delay_single_quote_subst"`' -NM='`$ECHO "X$NM" | $Xsed -e "$delay_single_quote_subst"`' -LN_S='`$ECHO "X$LN_S" | $Xsed -e "$delay_single_quote_subst"`' -max_cmd_len='`$ECHO "X$max_cmd_len" | $Xsed -e "$delay_single_quote_subst"`' -ac_objext='`$ECHO "X$ac_objext" | $Xsed -e "$delay_single_quote_subst"`' -exeext='`$ECHO "X$exeext" | $Xsed -e "$delay_single_quote_subst"`' -lt_unset='`$ECHO "X$lt_unset" | $Xsed -e "$delay_single_quote_subst"`' -lt_SP2NL='`$ECHO "X$lt_SP2NL" | $Xsed -e "$delay_single_quote_subst"`' -lt_NL2SP='`$ECHO "X$lt_NL2SP" | $Xsed -e "$delay_single_quote_subst"`' -reload_flag='`$ECHO "X$reload_flag" | $Xsed -e "$delay_single_quote_subst"`' -reload_cmds='`$ECHO "X$reload_cmds" | $Xsed -e "$delay_single_quote_subst"`' -OBJDUMP='`$ECHO "X$OBJDUMP" | $Xsed -e "$delay_single_quote_subst"`' -deplibs_check_method='`$ECHO "X$deplibs_check_method" | $Xsed -e "$delay_single_quote_subst"`' -file_magic_cmd='`$ECHO "X$file_magic_cmd" | $Xsed -e "$delay_single_quote_subst"`' -AR='`$ECHO "X$AR" | $Xsed -e "$delay_single_quote_subst"`' -AR_FLAGS='`$ECHO "X$AR_FLAGS" | $Xsed -e "$delay_single_quote_subst"`' -STRIP='`$ECHO "X$STRIP" | $Xsed -e "$delay_single_quote_subst"`' -RANLIB='`$ECHO "X$RANLIB" | $Xsed -e "$delay_single_quote_subst"`' -old_postinstall_cmds='`$ECHO "X$old_postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' -old_postuninstall_cmds='`$ECHO "X$old_postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' -old_archive_cmds='`$ECHO "X$old_archive_cmds" | $Xsed -e "$delay_single_quote_subst"`' -CC='`$ECHO "X$CC" | $Xsed -e "$delay_single_quote_subst"`' -CFLAGS='`$ECHO "X$CFLAGS" | $Xsed -e "$delay_single_quote_subst"`' -compiler='`$ECHO "X$compiler" | $Xsed -e "$delay_single_quote_subst"`' -GCC='`$ECHO "X$GCC" | $Xsed -e "$delay_single_quote_subst"`' -lt_cv_sys_global_symbol_pipe='`$ECHO "X$lt_cv_sys_global_symbol_pipe" | $Xsed -e "$delay_single_quote_subst"`' -lt_cv_sys_global_symbol_to_cdecl='`$ECHO "X$lt_cv_sys_global_symbol_to_cdecl" | $Xsed -e "$delay_single_quote_subst"`' -lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address" | $Xsed -e "$delay_single_quote_subst"`' -lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`' -objdir='`$ECHO "X$objdir" | $Xsed -e "$delay_single_quote_subst"`' -SHELL='`$ECHO "X$SHELL" | $Xsed -e "$delay_single_quote_subst"`' -ECHO='`$ECHO "X$ECHO" | $Xsed -e "$delay_single_quote_subst"`' -MAGIC_CMD='`$ECHO "X$MAGIC_CMD" | $Xsed -e "$delay_single_quote_subst"`' -lt_prog_compiler_no_builtin_flag='`$ECHO "X$lt_prog_compiler_no_builtin_flag" | $Xsed -e "$delay_single_quote_subst"`' -lt_prog_compiler_wl='`$ECHO "X$lt_prog_compiler_wl" | $Xsed -e "$delay_single_quote_subst"`' -lt_prog_compiler_pic='`$ECHO "X$lt_prog_compiler_pic" | $Xsed -e "$delay_single_quote_subst"`' -lt_prog_compiler_static='`$ECHO "X$lt_prog_compiler_static" | $Xsed -e "$delay_single_quote_subst"`' -lt_cv_prog_compiler_c_o='`$ECHO "X$lt_cv_prog_compiler_c_o" | $Xsed -e "$delay_single_quote_subst"`' -need_locks='`$ECHO "X$need_locks" | $Xsed -e "$delay_single_quote_subst"`' -DSYMUTIL='`$ECHO "X$DSYMUTIL" | $Xsed -e "$delay_single_quote_subst"`' -NMEDIT='`$ECHO "X$NMEDIT" | $Xsed -e "$delay_single_quote_subst"`' -LIPO='`$ECHO "X$LIPO" | $Xsed -e "$delay_single_quote_subst"`' -OTOOL='`$ECHO "X$OTOOL" | $Xsed -e "$delay_single_quote_subst"`' -OTOOL64='`$ECHO "X$OTOOL64" | $Xsed -e "$delay_single_quote_subst"`' -libext='`$ECHO "X$libext" | $Xsed -e "$delay_single_quote_subst"`' -shrext_cmds='`$ECHO "X$shrext_cmds" | $Xsed -e "$delay_single_quote_subst"`' -extract_expsyms_cmds='`$ECHO "X$extract_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`' -archive_cmds_need_lc='`$ECHO "X$archive_cmds_need_lc" | $Xsed -e "$delay_single_quote_subst"`' -enable_shared_with_static_runtimes='`$ECHO "X$enable_shared_with_static_runtimes" | $Xsed -e "$delay_single_quote_subst"`' -export_dynamic_flag_spec='`$ECHO "X$export_dynamic_flag_spec" | $Xsed -e "$delay_single_quote_subst"`' -whole_archive_flag_spec='`$ECHO "X$whole_archive_flag_spec" | $Xsed -e "$delay_single_quote_subst"`' -compiler_needs_object='`$ECHO "X$compiler_needs_object" | $Xsed -e "$delay_single_quote_subst"`' -old_archive_from_new_cmds='`$ECHO "X$old_archive_from_new_cmds" | $Xsed -e "$delay_single_quote_subst"`' -old_archive_from_expsyms_cmds='`$ECHO "X$old_archive_from_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`' -archive_cmds='`$ECHO "X$archive_cmds" | $Xsed -e "$delay_single_quote_subst"`' -archive_expsym_cmds='`$ECHO "X$archive_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`' -module_cmds='`$ECHO "X$module_cmds" | $Xsed -e "$delay_single_quote_subst"`' -module_expsym_cmds='`$ECHO "X$module_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`' -with_gnu_ld='`$ECHO "X$with_gnu_ld" | $Xsed -e "$delay_single_quote_subst"`' -allow_undefined_flag='`$ECHO "X$allow_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`' -no_undefined_flag='`$ECHO "X$no_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`' -hardcode_libdir_flag_spec='`$ECHO "X$hardcode_libdir_flag_spec" | $Xsed -e "$delay_single_quote_subst"`' -hardcode_libdir_flag_spec_ld='`$ECHO "X$hardcode_libdir_flag_spec_ld" | $Xsed -e "$delay_single_quote_subst"`' -hardcode_libdir_separator='`$ECHO "X$hardcode_libdir_separator" | $Xsed -e "$delay_single_quote_subst"`' -hardcode_direct='`$ECHO "X$hardcode_direct" | $Xsed -e "$delay_single_quote_subst"`' -hardcode_direct_absolute='`$ECHO "X$hardcode_direct_absolute" | $Xsed -e "$delay_single_quote_subst"`' -hardcode_minus_L='`$ECHO "X$hardcode_minus_L" | $Xsed -e "$delay_single_quote_subst"`' -hardcode_shlibpath_var='`$ECHO "X$hardcode_shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`' -hardcode_automatic='`$ECHO "X$hardcode_automatic" | $Xsed -e "$delay_single_quote_subst"`' -inherit_rpath='`$ECHO "X$inherit_rpath" | $Xsed -e "$delay_single_quote_subst"`' -link_all_deplibs='`$ECHO "X$link_all_deplibs" | $Xsed -e "$delay_single_quote_subst"`' -fix_srcfile_path='`$ECHO "X$fix_srcfile_path" | $Xsed -e "$delay_single_quote_subst"`' -always_export_symbols='`$ECHO "X$always_export_symbols" | $Xsed -e "$delay_single_quote_subst"`' -export_symbols_cmds='`$ECHO "X$export_symbols_cmds" | $Xsed -e "$delay_single_quote_subst"`' -exclude_expsyms='`$ECHO "X$exclude_expsyms" | $Xsed -e "$delay_single_quote_subst"`' -include_expsyms='`$ECHO "X$include_expsyms" | $Xsed -e "$delay_single_quote_subst"`' -prelink_cmds='`$ECHO "X$prelink_cmds" | $Xsed -e "$delay_single_quote_subst"`' -file_list_spec='`$ECHO "X$file_list_spec" | $Xsed -e "$delay_single_quote_subst"`' -variables_saved_for_relink='`$ECHO "X$variables_saved_for_relink" | $Xsed -e "$delay_single_quote_subst"`' -need_lib_prefix='`$ECHO "X$need_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`' -need_version='`$ECHO "X$need_version" | $Xsed -e "$delay_single_quote_subst"`' -version_type='`$ECHO "X$version_type" | $Xsed -e "$delay_single_quote_subst"`' -runpath_var='`$ECHO "X$runpath_var" | $Xsed -e "$delay_single_quote_subst"`' -shlibpath_var='`$ECHO "X$shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`' -shlibpath_overrides_runpath='`$ECHO "X$shlibpath_overrides_runpath" | $Xsed -e "$delay_single_quote_subst"`' -libname_spec='`$ECHO "X$libname_spec" | $Xsed -e "$delay_single_quote_subst"`' -library_names_spec='`$ECHO "X$library_names_spec" | $Xsed -e "$delay_single_quote_subst"`' -soname_spec='`$ECHO "X$soname_spec" | $Xsed -e "$delay_single_quote_subst"`' -postinstall_cmds='`$ECHO "X$postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' -postuninstall_cmds='`$ECHO "X$postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' -finish_cmds='`$ECHO "X$finish_cmds" | $Xsed -e "$delay_single_quote_subst"`' -finish_eval='`$ECHO "X$finish_eval" | $Xsed -e "$delay_single_quote_subst"`' -hardcode_into_libs='`$ECHO "X$hardcode_into_libs" | $Xsed -e "$delay_single_quote_subst"`' -sys_lib_search_path_spec='`$ECHO "X$sys_lib_search_path_spec" | $Xsed -e "$delay_single_quote_subst"`' -sys_lib_dlsearch_path_spec='`$ECHO "X$sys_lib_dlsearch_path_spec" | $Xsed -e "$delay_single_quote_subst"`' -hardcode_action='`$ECHO "X$hardcode_action" | $Xsed -e "$delay_single_quote_subst"`' -enable_dlopen='`$ECHO "X$enable_dlopen" | $Xsed -e "$delay_single_quote_subst"`' -enable_dlopen_self='`$ECHO "X$enable_dlopen_self" | $Xsed -e "$delay_single_quote_subst"`' -enable_dlopen_self_static='`$ECHO "X$enable_dlopen_self_static" | $Xsed -e "$delay_single_quote_subst"`' -old_striplib='`$ECHO "X$old_striplib" | $Xsed -e "$delay_single_quote_subst"`' -striplib='`$ECHO "X$striplib" | $Xsed -e "$delay_single_quote_subst"`' - -LTCC='$LTCC' -LTCFLAGS='$LTCFLAGS' -compiler='$compiler_DEFAULT' - -# Quote evaled strings. -for var in SED \ -GREP \ -EGREP \ -FGREP \ -LD \ -NM \ -LN_S \ -lt_SP2NL \ -lt_NL2SP \ -reload_flag \ -OBJDUMP \ -deplibs_check_method \ -file_magic_cmd \ -AR \ -AR_FLAGS \ -STRIP \ -RANLIB \ -CC \ -CFLAGS \ -compiler \ -lt_cv_sys_global_symbol_pipe \ -lt_cv_sys_global_symbol_to_cdecl \ -lt_cv_sys_global_symbol_to_c_name_address \ -lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ -SHELL \ -ECHO \ -lt_prog_compiler_no_builtin_flag \ -lt_prog_compiler_wl \ -lt_prog_compiler_pic \ -lt_prog_compiler_static \ -lt_cv_prog_compiler_c_o \ -need_locks \ -DSYMUTIL \ -NMEDIT \ -LIPO \ -OTOOL \ -OTOOL64 \ -shrext_cmds \ -export_dynamic_flag_spec \ -whole_archive_flag_spec \ -compiler_needs_object \ -with_gnu_ld \ -allow_undefined_flag \ -no_undefined_flag \ -hardcode_libdir_flag_spec \ -hardcode_libdir_flag_spec_ld \ -hardcode_libdir_separator \ -fix_srcfile_path \ -exclude_expsyms \ -include_expsyms \ -file_list_spec \ -variables_saved_for_relink \ -libname_spec \ -library_names_spec \ -soname_spec \ -finish_eval \ -old_striplib \ -striplib; do - case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in - *[\\\\\\\`\\"\\\$]*) - eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" - ;; - *) - eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" - ;; - esac -done - -# Double-quote double-evaled strings. -for var in reload_cmds \ -old_postinstall_cmds \ -old_postuninstall_cmds \ -old_archive_cmds \ -extract_expsyms_cmds \ -old_archive_from_new_cmds \ -old_archive_from_expsyms_cmds \ -archive_cmds \ -archive_expsym_cmds \ -module_cmds \ -module_expsym_cmds \ -export_symbols_cmds \ -prelink_cmds \ -postinstall_cmds \ -postuninstall_cmds \ -finish_cmds \ -sys_lib_search_path_spec \ -sys_lib_dlsearch_path_spec; do - case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in - *[\\\\\\\`\\"\\\$]*) - eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" - ;; - *) - eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" - ;; - esac -done - -# Fix-up fallback echo if it was mangled by the above quoting rules. -case \$lt_ECHO in -*'\\\$0 --fallback-echo"') lt_ECHO=\`\$ECHO "X\$lt_ECHO" | \$Xsed -e 's/\\\\\\\\\\\\\\\$0 --fallback-echo"\$/\$0 --fallback-echo"/'\` - ;; -esac - -ac_aux_dir='$ac_aux_dir' -xsi_shell='$xsi_shell' -lt_shell_append='$lt_shell_append' - -# See if we are running on zsh, and set the options which allow our -# commands through without removal of \ escapes INIT. -if test -n "\${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST -fi - - - PACKAGE='$PACKAGE' - VERSION='$VERSION' - TIMESTAMP='$TIMESTAMP' - RM='$RM' - ofile='$ofile' - - - - - -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 - -# Handling of arguments. -for ac_config_target in $ac_config_targets -do - case $ac_config_target in - "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; - "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; - "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; - "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; - "include/Makefile") CONFIG_FILES="$CONFIG_FILES include/Makefile" ;; - "lib/Makefile") CONFIG_FILES="$CONFIG_FILES lib/Makefile" ;; - "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; - "man/Makefile") CONFIG_FILES="$CONFIG_FILES man/Makefile" ;; - "etc/Makefile") CONFIG_FILES="$CONFIG_FILES etc/Makefile" ;; - "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; - "patches/Makefile") CONFIG_FILES="$CONFIG_FILES patches/Makefile" ;; - "login.radius/Makefile") CONFIG_FILES="$CONFIG_FILES login.radius/Makefile" ;; - "login.radius/migs/Makefile") CONFIG_FILES="$CONFIG_FILES login.radius/migs/Makefile" ;; - "rpm/Makefile") CONFIG_FILES="$CONFIG_FILES rpm/Makefile" ;; - "debian/Makefile") CONFIG_FILES="$CONFIG_FILES debian/Makefile" ;; - "default") CONFIG_COMMANDS="$CONFIG_COMMANDS default" ;; - - *) as_fn_error "invalid argument: \`$ac_config_target'" "$LINENO" 5;; - esac -done - - -# If the user did not use the arguments to specify the items to instantiate, -# then the envvar interface is used. Set only those that are not. -# We use the long form for the default assignment because of an extremely -# bizarre bug on SunOS 4.1.3. -if $ac_need_defaults; then - test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files - test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers - test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands -fi - -# Have a temporary directory for convenience. Make it in the build tree -# simply because there is no reason against having it here, and in addition, -# creating and moving files from /tmp can sometimes cause problems. -# Hook for its removal unless debugging. -# Note that there is a small window in which the directory will not be cleaned: -# after its creation but before its name has been assigned to `$tmp'. -$debug || -{ - tmp= - trap 'exit_status=$? - { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status -' 0 - trap 'as_fn_exit 1' 1 2 13 15 -} -# Create a (secure) tmp directory for tmp files. - -{ - tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && - test -n "$tmp" && test -d "$tmp" -} || -{ - tmp=./conf$$-$RANDOM - (umask 077 && mkdir "$tmp") -} || as_fn_error "cannot create a temporary directory in ." "$LINENO" 5 - -# Set up the scripts for CONFIG_FILES section. -# No need to generate them if there are no CONFIG_FILES. -# This happens for instance with `./config.status config.h'. -if test -n "$CONFIG_FILES"; then - - -ac_cr=`echo X | tr X '\015'` -# On cygwin, bash can eat \r inside `` if the user requested igncr. -# But we know of no other shell where ac_cr would be empty at this -# point, so we can use a bashism as a fallback. -if test "x$ac_cr" = x; then - eval ac_cr=\$\'\\r\' -fi -ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` -if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then - ac_cs_awk_cr='\r' -else - ac_cs_awk_cr=$ac_cr -fi - -echo 'BEGIN {' >"$tmp/subs1.awk" && -_ACEOF - - -{ - echo "cat >conf$$subs.awk <<_ACEOF" && - echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && - echo "_ACEOF" -} >conf$$subs.sh || - as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 -ac_delim_num=`echo "$ac_subst_vars" | grep -c '$'` -ac_delim='%!_!# ' -for ac_last_try in false false false false false :; do - . ./conf$$subs.sh || - as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 - - ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` - if test $ac_delim_n = $ac_delim_num; then - break - elif $ac_last_try; then - as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 - else - ac_delim="$ac_delim!$ac_delim _$ac_delim!! " - fi -done -rm -f conf$$subs.sh - -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -cat >>"\$tmp/subs1.awk" <<\\_ACAWK && -_ACEOF -sed -n ' -h -s/^/S["/; s/!.*/"]=/ -p -g -s/^[^!]*!// -:repl -t repl -s/'"$ac_delim"'$// -t delim -:nl -h -s/\(.\{148\}\)..*/\1/ -t more1 -s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ -p -n -b repl -:more1 -s/["\\]/\\&/g; s/^/"/; s/$/"\\/ -p -g -s/.\{148\}// -t nl -:delim -h -s/\(.\{148\}\)..*/\1/ -t more2 -s/["\\]/\\&/g; s/^/"/; s/$/"/ -p -b -:more2 -s/["\\]/\\&/g; s/^/"/; s/$/"\\/ -p -g -s/.\{148\}// -t delim -' >$CONFIG_STATUS || ac_write_fail=1 -rm -f conf$$subs.awk -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -_ACAWK -cat >>"\$tmp/subs1.awk" <<_ACAWK && - for (key in S) S_is_set[key] = 1 - FS = "" - -} -{ - line = $ 0 - nfields = split(line, field, "@") - substed = 0 - len = length(field[1]) - for (i = 2; i < nfields; i++) { - key = field[i] - keylen = length(key) - if (S_is_set[key]) { - value = S[key] - line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) - len += length(value) + length(field[++i]) - substed = 1 - } else - len += 1 + keylen - } - - print line -} - -_ACAWK -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then - sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" -else - cat -fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \ - || as_fn_error "could not setup config files machinery" "$LINENO" 5 -_ACEOF - -# VPATH may cause trouble with some makes, so we remove $(srcdir), -# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and -# trailing colons and then remove the whole line if VPATH becomes empty -# (actually we leave an empty line to preserve line numbers). -if test "x$srcdir" = x.; then - ac_vpsub='/^[ ]*VPATH[ ]*=/{ -s/:*\$(srcdir):*/:/ -s/:*\${srcdir}:*/:/ -s/:*@srcdir@:*/:/ -s/^\([^=]*=[ ]*\):*/\1/ -s/:*$// -s/^[^=]*=[ ]*$// -}' -fi - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -fi # test -n "$CONFIG_FILES" - -# Set up the scripts for CONFIG_HEADERS section. -# No need to generate them if there are no CONFIG_HEADERS. -# This happens for instance with `./config.status Makefile'. -if test -n "$CONFIG_HEADERS"; then -cat >"$tmp/defines.awk" <<\_ACAWK || -BEGIN { -_ACEOF - -# Transform confdefs.h into an awk script `defines.awk', embedded as -# here-document in config.status, that substitutes the proper values into -# config.h.in to produce config.h. - -# Create a delimiter string that does not exist in confdefs.h, to ease -# handling of long lines. -ac_delim='%!_!# ' -for ac_last_try in false false :; do - ac_t=`sed -n "/$ac_delim/p" confdefs.h` - if test -z "$ac_t"; then - break - elif $ac_last_try; then - as_fn_error "could not make $CONFIG_HEADERS" "$LINENO" 5 - else - ac_delim="$ac_delim!$ac_delim _$ac_delim!! " - fi -done - -# For the awk script, D is an array of macro values keyed by name, -# likewise P contains macro parameters if any. Preserve backslash -# newline sequences. - -ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* -sed -n ' -s/.\{148\}/&'"$ac_delim"'/g -t rset -:rset -s/^[ ]*#[ ]*define[ ][ ]*/ / -t def -d -:def -s/\\$// -t bsnl -s/["\\]/\\&/g -s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ -D["\1"]=" \3"/p -s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p -d -:bsnl -s/["\\]/\\&/g -s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ -D["\1"]=" \3\\\\\\n"\\/p -t cont -s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p -t cont -d -:cont -n -s/.\{148\}/&'"$ac_delim"'/g -t clear -:clear -s/\\$// -t bsnlc -s/["\\]/\\&/g; s/^/"/; s/$/"/p -d -:bsnlc -s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p -b cont -' >$CONFIG_STATUS || ac_write_fail=1 - -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 - for (key in D) D_is_set[key] = 1 - FS = "" -} -/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { - line = \$ 0 - split(line, arg, " ") - if (arg[1] == "#") { - defundef = arg[2] - mac1 = arg[3] - } else { - defundef = substr(arg[1], 2) - mac1 = arg[2] - } - split(mac1, mac2, "(") #) - macro = mac2[1] - prefix = substr(line, 1, index(line, defundef) - 1) - if (D_is_set[macro]) { - # Preserve the white space surrounding the "#". - print prefix "define", macro P[macro] D[macro] - next - } else { - # Replace #undef with comments. This is necessary, for example, - # in the case of _POSIX_SOURCE, which is predefined and required - # on some systems where configure will not decide to define it. - if (defundef == "undef") { - print "/*", prefix defundef, macro, "*/" - next - } - } -} -{ print } -_ACAWK -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 - as_fn_error "could not setup config headers machinery" "$LINENO" 5 -fi # test -n "$CONFIG_HEADERS" - - -eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" -shift -for ac_tag -do - case $ac_tag in - :[FHLC]) ac_mode=$ac_tag; continue;; - esac - case $ac_mode$ac_tag in - :[FHL]*:*);; - :L* | :C*:*) as_fn_error "invalid tag \`$ac_tag'" "$LINENO" 5;; - :[FH]-) ac_tag=-:-;; - :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; - esac - ac_save_IFS=$IFS - IFS=: - set x $ac_tag - IFS=$ac_save_IFS - shift - ac_file=$1 - shift - - case $ac_mode in - :L) ac_source=$1;; - :[FH]) - ac_file_inputs= - for ac_f - do - case $ac_f in - -) ac_f="$tmp/stdin";; - *) # Look for the file first in the build tree, then in the source tree - # (if the path is not absolute). The absolute path cannot be DOS-style, - # because $ac_f cannot contain `:'. - test -f "$ac_f" || - case $ac_f in - [\\/$]*) false;; - *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; - esac || - as_fn_error "cannot find input file: \`$ac_f'" "$LINENO" 5;; - esac - case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac - as_fn_append ac_file_inputs " '$ac_f'" - done - - # Let's still pretend it is `configure' which instantiates (i.e., don't - # use $as_me), people would be surprised to read: - # /* config.h. Generated by config.status. */ - configure_input='Generated from '` - $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' - `' by configure.' - if test x"$ac_file" != x-; then - configure_input="$ac_file. $configure_input" - { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 -$as_echo "$as_me: creating $ac_file" >&6;} - fi - # Neutralize special characters interpreted by sed in replacement strings. - case $configure_input in #( - *\&* | *\|* | *\\* ) - ac_sed_conf_input=`$as_echo "$configure_input" | - sed 's/[\\\\&|]/\\\\&/g'`;; #( - *) ac_sed_conf_input=$configure_input;; - esac - - case $ac_tag in - *:-:* | *:-) cat >"$tmp/stdin" \ - || as_fn_error "could not create $ac_file" "$LINENO" 5 ;; - esac - ;; - esac - - ac_dir=`$as_dirname -- "$ac_file" || -$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$ac_file" : 'X\(//\)[^/]' \| \ - X"$ac_file" : 'X\(//\)$' \| \ - X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$ac_file" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - as_dir="$ac_dir"; as_fn_mkdir_p - ac_builddir=. - -case "$ac_dir" in -.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; -*) - ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` - # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` - case $ac_top_builddir_sub in - "") ac_top_builddir_sub=. ac_top_build_prefix= ;; - *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; - esac ;; -esac -ac_abs_top_builddir=$ac_pwd -ac_abs_builddir=$ac_pwd$ac_dir_suffix -# for backward compatibility: -ac_top_builddir=$ac_top_build_prefix - -case $srcdir in - .) # We are building in place. - ac_srcdir=. - ac_top_srcdir=$ac_top_builddir_sub - ac_abs_top_srcdir=$ac_pwd ;; - [\\/]* | ?:[\\/]* ) # Absolute name. - ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir - ac_abs_top_srcdir=$srcdir ;; - *) # Relative name. - ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_build_prefix$srcdir - ac_abs_top_srcdir=$ac_pwd/$srcdir ;; -esac -ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix - - - case $ac_mode in - :F) - # - # CONFIG_FILE - # - - case $INSTALL in - [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; - *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; - esac - ac_MKDIR_P=$MKDIR_P - case $MKDIR_P in - [\\/$]* | ?:[\\/]* ) ;; - */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; - esac -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -# If the template does not know about datarootdir, expand it. -# FIXME: This hack should be removed a few years after 2.60. -ac_datarootdir_hack=; ac_datarootdir_seen= -ac_sed_dataroot=' -/datarootdir/ { - p - q -} -/@datadir@/p -/@docdir@/p -/@infodir@/p -/@localedir@/p -/@mandir@/p' -case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in -*datarootdir*) ac_datarootdir_seen=yes;; -*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 -$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 - ac_datarootdir_hack=' - s&@datadir@&$datadir&g - s&@docdir@&$docdir&g - s&@infodir@&$infodir&g - s&@localedir@&$localedir&g - s&@mandir@&$mandir&g - s&\\\${datarootdir}&$datarootdir&g' ;; -esac -_ACEOF - -# Neutralize VPATH when `$srcdir' = `.'. -# Shell code in configure.ac might set extrasub. -# FIXME: do we really want to maintain this feature? -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -ac_sed_extra="$ac_vpsub -$extrasub -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -:t -/@[a-zA-Z_][a-zA-Z_0-9]*@/!b -s|@configure_input@|$ac_sed_conf_input|;t t -s&@top_builddir@&$ac_top_builddir_sub&;t t -s&@top_build_prefix@&$ac_top_build_prefix&;t t -s&@srcdir@&$ac_srcdir&;t t -s&@abs_srcdir@&$ac_abs_srcdir&;t t -s&@top_srcdir@&$ac_top_srcdir&;t t -s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t -s&@builddir@&$ac_builddir&;t t -s&@abs_builddir@&$ac_abs_builddir&;t t -s&@abs_top_builddir@&$ac_abs_top_builddir&;t t -s&@INSTALL@&$ac_INSTALL&;t t -s&@MKDIR_P@&$ac_MKDIR_P&;t t -$ac_datarootdir_hack -" -eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \ - || as_fn_error "could not create $ac_file" "$LINENO" 5 - -test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && - { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && - { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' -which seems to be undefined. Please make sure it is defined." >&5 -$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' -which seems to be undefined. Please make sure it is defined." >&2;} - - rm -f "$tmp/stdin" - case $ac_file in - -) cat "$tmp/out" && rm -f "$tmp/out";; - *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";; - esac \ - || as_fn_error "could not create $ac_file" "$LINENO" 5 - ;; - :H) - # - # CONFIG_HEADER - # - if test x"$ac_file" != x-; then - { - $as_echo "/* $configure_input */" \ - && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" - } >"$tmp/config.h" \ - || as_fn_error "could not create $ac_file" "$LINENO" 5 - if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then - { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 -$as_echo "$as_me: $ac_file is unchanged" >&6;} - else - rm -f "$ac_file" - mv "$tmp/config.h" "$ac_file" \ - || as_fn_error "could not create $ac_file" "$LINENO" 5 - fi - else - $as_echo "/* $configure_input */" \ - && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \ - || as_fn_error "could not create -" "$LINENO" 5 - fi -# Compute "$ac_file"'s index in $config_headers. -_am_arg="$ac_file" -_am_stamp_count=1 -for _am_header in $config_headers :; do - case $_am_header in - $_am_arg | $_am_arg:* ) - break ;; - * ) - _am_stamp_count=`expr $_am_stamp_count + 1` ;; - esac -done -echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || -$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$_am_arg" : 'X\(//\)[^/]' \| \ - X"$_am_arg" : 'X\(//\)$' \| \ - X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$_am_arg" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'`/stamp-h$_am_stamp_count - ;; - - :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 -$as_echo "$as_me: executing $ac_file commands" >&6;} - ;; - esac - - - case $ac_file$ac_mode in - "depfiles":C) test x"$AMDEP_TRUE" != x"" || { - # Autoconf 2.62 quotes --file arguments for eval, but not when files - # are listed without --file. Let's play safe and only enable the eval - # if we detect the quoting. - case $CONFIG_FILES in - *\'*) eval set x "$CONFIG_FILES" ;; - *) set x $CONFIG_FILES ;; - esac - shift - for mf - do - # Strip MF so we end up with the name of the file. - mf=`echo "$mf" | sed -e 's/:.*$//'` - # Check whether this is an Automake generated Makefile or not. - # We used to match only the files named `Makefile.in', but - # some people rename them; so instead we look at the file content. - # Grep'ing the first line is not enough: some people post-process - # each Makefile.in and add a new line on top of each file to say so. - # Grep'ing the whole file is not good either: AIX grep has a line - # limit of 2048, but all sed's we know have understand at least 4000. - if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then - dirpart=`$as_dirname -- "$mf" || -$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$mf" : 'X\(//\)[^/]' \| \ - X"$mf" : 'X\(//\)$' \| \ - X"$mf" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$mf" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - else - continue - fi - # Extract the definition of DEPDIR, am__include, and am__quote - # from the Makefile without running `make'. - DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` - test -z "$DEPDIR" && continue - am__include=`sed -n 's/^am__include = //p' < "$mf"` - test -z "am__include" && continue - am__quote=`sed -n 's/^am__quote = //p' < "$mf"` - # When using ansi2knr, U may be empty or an underscore; expand it - U=`sed -n 's/^U = //p' < "$mf"` - # Find all dependency output files, they are included files with - # $(DEPDIR) in their names. We invoke sed twice because it is the - # simplest approach to changing $(DEPDIR) to its actual value in the - # expansion. - for file in `sed -n " - s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ - sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do - # Make sure the directory exists. - test -f "$dirpart/$file" && continue - fdir=`$as_dirname -- "$file" || -$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$file" : 'X\(//\)[^/]' \| \ - X"$file" : 'X\(//\)$' \| \ - X"$file" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$file" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - as_dir=$dirpart/$fdir; as_fn_mkdir_p - # echo "creating $dirpart/$file" - echo '# dummy' > "$dirpart/$file" - done - done -} - ;; - "libtool":C) - - # See if we are running on zsh, and set the options which allow our - # commands through without removal of \ escapes. - if test -n "${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST - fi - - cfgfile="${ofile}T" - trap "$RM \"$cfgfile\"; exit 1" 1 2 15 - $RM "$cfgfile" - - cat <<_LT_EOF >> "$cfgfile" -#! $SHELL - -# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. -# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION -# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: -# NOTE: Changes made to this file will be lost: look at ltmain.sh. -# -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, -# 2006, 2007, 2008 Free Software Foundation, Inc. -# Written by Gordon Matzigkeit, 1996 -# -# This file is part of GNU Libtool. -# -# GNU Libtool is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License as -# published by the Free Software Foundation; either version 2 of -# the License, or (at your option) any later version. -# -# As a special exception to the GNU General Public License, -# if you distribute this file as part of a program or library that -# is built using GNU Libtool, you may include this file under the -# same distribution terms that you use for the rest of that program. -# -# GNU Libtool is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with GNU Libtool; see the file COPYING. If not, a copy -# can be downloaded from http://www.gnu.org/licenses/gpl.html, or -# obtained by writing to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - - -# The names of the tagged configurations supported by this script. -available_tags="" - -# ### BEGIN LIBTOOL CONFIG - -# Which release of libtool.m4 was used? -macro_version=$macro_version -macro_revision=$macro_revision - -# Whether or not to build shared libraries. -build_libtool_libs=$enable_shared - -# Whether or not to build static libraries. -build_old_libs=$enable_static - -# What type of objects to build. -pic_mode=$pic_mode - -# Whether or not to optimize for fast installation. -fast_install=$enable_fast_install - -# The host system. -host_alias=$host_alias -host=$host -host_os=$host_os - -# The build system. -build_alias=$build_alias -build=$build -build_os=$build_os - -# A sed program that does not truncate output. -SED=$lt_SED - -# Sed that helps us avoid accidentally triggering echo(1) options like -n. -Xsed="\$SED -e 1s/^X//" - -# A grep program that handles long lines. -GREP=$lt_GREP - -# An ERE matcher. -EGREP=$lt_EGREP - -# A literal string matcher. -FGREP=$lt_FGREP - -# A BSD- or MS-compatible name lister. -NM=$lt_NM - -# Whether we need soft or hard links. -LN_S=$lt_LN_S - -# What is the maximum length of a command? -max_cmd_len=$max_cmd_len - -# Object file suffix (normally "o"). -objext=$ac_objext - -# Executable file suffix (normally ""). -exeext=$exeext - -# whether the shell understands "unset". -lt_unset=$lt_unset - -# turn spaces into newlines. -SP2NL=$lt_lt_SP2NL - -# turn newlines into spaces. -NL2SP=$lt_lt_NL2SP - -# How to create reloadable object files. -reload_flag=$lt_reload_flag -reload_cmds=$lt_reload_cmds - -# An object symbol dumper. -OBJDUMP=$lt_OBJDUMP - -# Method to check whether dependent libraries are shared objects. -deplibs_check_method=$lt_deplibs_check_method - -# Command to use when deplibs_check_method == "file_magic". -file_magic_cmd=$lt_file_magic_cmd - -# The archiver. -AR=$lt_AR -AR_FLAGS=$lt_AR_FLAGS - -# A symbol stripping program. -STRIP=$lt_STRIP - -# Commands used to install an old-style archive. -RANLIB=$lt_RANLIB -old_postinstall_cmds=$lt_old_postinstall_cmds -old_postuninstall_cmds=$lt_old_postuninstall_cmds - -# A C compiler. -LTCC=$lt_CC - -# LTCC compiler flags. -LTCFLAGS=$lt_CFLAGS - -# Take the output of nm and produce a listing of raw symbols and C names. -global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe - -# Transform the output of nm in a proper C declaration. -global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl - -# Transform the output of nm in a C name address pair. -global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address - -# Transform the output of nm in a C name address pair when lib prefix is needed. -global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix - -# The name of the directory that contains temporary libtool files. -objdir=$objdir - -# Shell to use when invoking shell scripts. -SHELL=$lt_SHELL - -# An echo program that does not interpret backslashes. -ECHO=$lt_ECHO - -# Used to examine libraries when file_magic_cmd begins with "file". -MAGIC_CMD=$MAGIC_CMD - -# Must we lock files when doing compilation? -need_locks=$lt_need_locks - -# Tool to manipulate archived DWARF debug symbol files on Mac OS X. -DSYMUTIL=$lt_DSYMUTIL - -# Tool to change global to local symbols on Mac OS X. -NMEDIT=$lt_NMEDIT - -# Tool to manipulate fat objects and archives on Mac OS X. -LIPO=$lt_LIPO - -# ldd/readelf like tool for Mach-O binaries on Mac OS X. -OTOOL=$lt_OTOOL - -# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. -OTOOL64=$lt_OTOOL64 - -# Old archive suffix (normally "a"). -libext=$libext - -# Shared library suffix (normally ".so"). -shrext_cmds=$lt_shrext_cmds - -# The commands to extract the exported symbol list from a shared archive. -extract_expsyms_cmds=$lt_extract_expsyms_cmds - -# Variables whose values should be saved in libtool wrapper scripts and -# restored at link time. -variables_saved_for_relink=$lt_variables_saved_for_relink - -# Do we need the "lib" prefix for modules? -need_lib_prefix=$need_lib_prefix - -# Do we need a version for libraries? -need_version=$need_version - -# Library versioning type. -version_type=$version_type - -# Shared library runtime path variable. -runpath_var=$runpath_var - -# Shared library path variable. -shlibpath_var=$shlibpath_var - -# Is shlibpath searched before the hard-coded library search path? -shlibpath_overrides_runpath=$shlibpath_overrides_runpath - -# Format of library name prefix. -libname_spec=$lt_libname_spec - -# List of archive names. First name is the real one, the rest are links. -# The last name is the one that the linker finds with -lNAME -library_names_spec=$lt_library_names_spec - -# The coded name of the library, if different from the real name. -soname_spec=$lt_soname_spec - -# Command to use after installation of a shared archive. -postinstall_cmds=$lt_postinstall_cmds - -# Command to use after uninstallation of a shared archive. -postuninstall_cmds=$lt_postuninstall_cmds - -# Commands used to finish a libtool library installation in a directory. -finish_cmds=$lt_finish_cmds - -# As "finish_cmds", except a single script fragment to be evaled but -# not shown. -finish_eval=$lt_finish_eval - -# Whether we should hardcode library paths into libraries. -hardcode_into_libs=$hardcode_into_libs - -# Compile-time system search path for libraries. -sys_lib_search_path_spec=$lt_sys_lib_search_path_spec - -# Run-time system search path for libraries. -sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec - -# Whether dlopen is supported. -dlopen_support=$enable_dlopen - -# Whether dlopen of programs is supported. -dlopen_self=$enable_dlopen_self - -# Whether dlopen of statically linked programs is supported. -dlopen_self_static=$enable_dlopen_self_static - -# Commands to strip libraries. -old_striplib=$lt_old_striplib -striplib=$lt_striplib - - -# The linker used to build libraries. -LD=$lt_LD - -# Commands used to build an old-style archive. -old_archive_cmds=$lt_old_archive_cmds - -# A language specific compiler. -CC=$lt_compiler - -# Is the compiler the GNU compiler? -with_gcc=$GCC - -# Compiler flag to turn off builtin functions. -no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag - -# How to pass a linker flag through the compiler. -wl=$lt_lt_prog_compiler_wl - -# Additional compiler flags for building library objects. -pic_flag=$lt_lt_prog_compiler_pic - -# Compiler flag to prevent dynamic linking. -link_static_flag=$lt_lt_prog_compiler_static - -# Does compiler simultaneously support -c and -o options? -compiler_c_o=$lt_lt_cv_prog_compiler_c_o - -# Whether or not to add -lc for building shared libraries. -build_libtool_need_lc=$archive_cmds_need_lc - -# Whether or not to disallow shared libs when runtime libs are static. -allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes - -# Compiler flag to allow reflexive dlopens. -export_dynamic_flag_spec=$lt_export_dynamic_flag_spec - -# Compiler flag to generate shared objects directly from archives. -whole_archive_flag_spec=$lt_whole_archive_flag_spec - -# Whether the compiler copes with passing no objects directly. -compiler_needs_object=$lt_compiler_needs_object - -# Create an old-style archive from a shared archive. -old_archive_from_new_cmds=$lt_old_archive_from_new_cmds - -# Create a temporary old-style archive to link instead of a shared archive. -old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds - -# Commands used to build a shared archive. -archive_cmds=$lt_archive_cmds -archive_expsym_cmds=$lt_archive_expsym_cmds - -# Commands used to build a loadable module if different from building -# a shared archive. -module_cmds=$lt_module_cmds -module_expsym_cmds=$lt_module_expsym_cmds - -# Whether we are building with GNU ld or not. -with_gnu_ld=$lt_with_gnu_ld - -# Flag that allows shared libraries with undefined symbols to be built. -allow_undefined_flag=$lt_allow_undefined_flag - -# Flag that enforces no undefined symbols. -no_undefined_flag=$lt_no_undefined_flag - -# Flag to hardcode \$libdir into a binary during linking. -# This must work even if \$libdir does not exist -hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec - -# If ld is used when linking, flag to hardcode \$libdir into a binary -# during linking. This must work even if \$libdir does not exist. -hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld - -# Whether we need a single "-rpath" flag with a separated argument. -hardcode_libdir_separator=$lt_hardcode_libdir_separator - -# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes -# DIR into the resulting binary. -hardcode_direct=$hardcode_direct - -# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes -# DIR into the resulting binary and the resulting library dependency is -# "absolute",i.e impossible to change by setting \${shlibpath_var} if the -# library is relocated. -hardcode_direct_absolute=$hardcode_direct_absolute - -# Set to "yes" if using the -LDIR flag during linking hardcodes DIR -# into the resulting binary. -hardcode_minus_L=$hardcode_minus_L - -# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR -# into the resulting binary. -hardcode_shlibpath_var=$hardcode_shlibpath_var - -# Set to "yes" if building a shared library automatically hardcodes DIR -# into the library and all subsequent libraries and executables linked -# against it. -hardcode_automatic=$hardcode_automatic - -# Set to yes if linker adds runtime paths of dependent libraries -# to runtime path list. -inherit_rpath=$inherit_rpath - -# Whether libtool must link a program against all its dependency libraries. -link_all_deplibs=$link_all_deplibs - -# Fix the shell variable \$srcfile for the compiler. -fix_srcfile_path=$lt_fix_srcfile_path - -# Set to "yes" if exported symbols are required. -always_export_symbols=$always_export_symbols - -# The commands to list exported symbols. -export_symbols_cmds=$lt_export_symbols_cmds - -# Symbols that should not be listed in the preloaded symbols. -exclude_expsyms=$lt_exclude_expsyms - -# Symbols that must always be exported. -include_expsyms=$lt_include_expsyms - -# Commands necessary for linking programs (against libraries) with templates. -prelink_cmds=$lt_prelink_cmds - -# Specify filename containing input files. -file_list_spec=$lt_file_list_spec - -# How to hardcode a shared library path into an executable. -hardcode_action=$hardcode_action - -# ### END LIBTOOL CONFIG - -_LT_EOF - - case $host_os in - aix3*) - cat <<\_LT_EOF >> "$cfgfile" -# AIX sometimes has problems with the GCC collect2 program. For some -# reason, if we set the COLLECT_NAMES environment variable, the problems -# vanish in a puff of smoke. -if test "X${COLLECT_NAMES+set}" != Xset; then - COLLECT_NAMES= - export COLLECT_NAMES -fi -_LT_EOF - ;; - esac - - -ltmain="$ac_aux_dir/ltmain.sh" - - - # We use sed instead of cat because bash on DJGPP gets confused if - # if finds mixed CR/LF and LF-only lines. Since sed operates in - # text mode, it properly converts lines to CR/LF. This bash problem - # is reportedly fixed, but why not run on old versions too? - sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \ - || (rm -f "$cfgfile"; exit 1) - - case $xsi_shell in - yes) - cat << \_LT_EOF >> "$cfgfile" - -# func_dirname file append nondir_replacement -# Compute the dirname of FILE. If nonempty, add APPEND to the result, -# otherwise set result to NONDIR_REPLACEMENT. -func_dirname () -{ - case ${1} in - */*) func_dirname_result="${1%/*}${2}" ;; - * ) func_dirname_result="${3}" ;; - esac -} - -# func_basename file -func_basename () -{ - func_basename_result="${1##*/}" -} - -# func_dirname_and_basename file append nondir_replacement -# perform func_basename and func_dirname in a single function -# call: -# dirname: Compute the dirname of FILE. If nonempty, -# add APPEND to the result, otherwise set result -# to NONDIR_REPLACEMENT. -# value returned in "$func_dirname_result" -# basename: Compute filename of FILE. -# value retuned in "$func_basename_result" -# Implementation must be kept synchronized with func_dirname -# and func_basename. For efficiency, we do not delegate to -# those functions but instead duplicate the functionality here. -func_dirname_and_basename () -{ - case ${1} in - */*) func_dirname_result="${1%/*}${2}" ;; - * ) func_dirname_result="${3}" ;; - esac - func_basename_result="${1##*/}" -} - -# func_stripname prefix suffix name -# strip PREFIX and SUFFIX off of NAME. -# PREFIX and SUFFIX must not contain globbing or regex special -# characters, hashes, percent signs, but SUFFIX may contain a leading -# dot (in which case that matches only a dot). -func_stripname () -{ - # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are - # positional parameters, so assign one to ordinary parameter first. - func_stripname_result=${3} - func_stripname_result=${func_stripname_result#"${1}"} - func_stripname_result=${func_stripname_result%"${2}"} -} - -# func_opt_split -func_opt_split () -{ - func_opt_split_opt=${1%%=*} - func_opt_split_arg=${1#*=} -} - -# func_lo2o object -func_lo2o () -{ - case ${1} in - *.lo) func_lo2o_result=${1%.lo}.${objext} ;; - *) func_lo2o_result=${1} ;; - esac -} - -# func_xform libobj-or-source -func_xform () -{ - func_xform_result=${1%.*}.lo -} - -# func_arith arithmetic-term... -func_arith () -{ - func_arith_result=$(( $* )) -} - -# func_len string -# STRING may not start with a hyphen. -func_len () -{ - func_len_result=${#1} -} - -_LT_EOF - ;; - *) # Bourne compatible functions. - cat << \_LT_EOF >> "$cfgfile" - -# func_dirname file append nondir_replacement -# Compute the dirname of FILE. If nonempty, add APPEND to the result, -# otherwise set result to NONDIR_REPLACEMENT. -func_dirname () -{ - # Extract subdirectory from the argument. - func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"` - if test "X$func_dirname_result" = "X${1}"; then - func_dirname_result="${3}" - else - func_dirname_result="$func_dirname_result${2}" - fi -} - -# func_basename file -func_basename () -{ - func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"` -} - - -# func_stripname prefix suffix name -# strip PREFIX and SUFFIX off of NAME. -# PREFIX and SUFFIX must not contain globbing or regex special -# characters, hashes, percent signs, but SUFFIX may contain a leading -# dot (in which case that matches only a dot). -# func_strip_suffix prefix name -func_stripname () -{ - case ${2} in - .*) func_stripname_result=`$ECHO "X${3}" \ - | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;; - *) func_stripname_result=`$ECHO "X${3}" \ - | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;; - esac -} - -# sed scripts: -my_sed_long_opt='1s/^\(-[^=]*\)=.*/\1/;q' -my_sed_long_arg='1s/^-[^=]*=//' - -# func_opt_split -func_opt_split () -{ - func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"` - func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"` -} - -# func_lo2o object -func_lo2o () -{ - func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"` -} - -# func_xform libobj-or-source -func_xform () -{ - func_xform_result=`$ECHO "X${1}" | $Xsed -e 's/\.[^.]*$/.lo/'` -} - -# func_arith arithmetic-term... -func_arith () -{ - func_arith_result=`expr "$@"` -} - -# func_len string -# STRING may not start with a hyphen. -func_len () -{ - func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len` -} - -_LT_EOF -esac - -case $lt_shell_append in - yes) - cat << \_LT_EOF >> "$cfgfile" - -# func_append var value -# Append VALUE to the end of shell variable VAR. -func_append () -{ - eval "$1+=\$2" -} -_LT_EOF - ;; - *) - cat << \_LT_EOF >> "$cfgfile" - -# func_append var value -# Append VALUE to the end of shell variable VAR. -func_append () -{ - eval "$1=\$$1\$2" -} - -_LT_EOF - ;; - esac - - - sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \ - || (rm -f "$cfgfile"; exit 1) - - mv -f "$cfgfile" "$ofile" || - (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") - chmod +x "$ofile" - - ;; - "default":C) test -z "$CONFIG_HEADERS" || echo timestamp > stamp-h ;; - - esac -done # for ac_tag - - -as_fn_exit 0 -_ACEOF -ac_clean_files=$ac_clean_files_save - -test $ac_write_fail = 0 || - as_fn_error "write failure creating $CONFIG_STATUS" "$LINENO" 5 - - -# configure is writing to config.log, and then calls config.status. -# config.status does its own redirection, appending to config.log. -# Unfortunately, on DOS this fails, as config.log is still kept open -# by configure, so config.status won't be able to write to it; its -# output is simply discarded. So we exec the FD to /dev/null, -# effectively closing config.log, so it can be properly (re)opened and -# appended to by config.status. When coming back to configure, we -# need to make the FD available again. -if test "$no_create" != yes; then - ac_cs_success=: - ac_config_status_args= - test "$silent" = yes && - ac_config_status_args="$ac_config_status_args --quiet" - exec 5>/dev/null - $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false - exec 5>>config.log - # Use ||, not &&, to avoid exiting from the if with $? = 1, which - # would make configure fail if this is the last instruction. - $ac_cs_success || as_fn_exit $? -fi -if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 -$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} -fi - diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/autom4te.cache/output.1 b/openair3/PMIPv6/freeradius-client-1.1.6/autom4te.cache/output.1 deleted file mode 100644 index 771268bc4f..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/autom4te.cache/output.1 +++ /dev/null @@ -1,15347 +0,0 @@ -@%:@! /bin/sh -@%:@ Guess values for system-dependent variables and create Makefiles. -@%:@ Generated by GNU Autoconf 2.65. -@%:@ -@%:@ -@%:@ Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, -@%:@ 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, -@%:@ Inc. -@%:@ -@%:@ -@%:@ This configure script is free software; the Free Software Foundation -@%:@ gives unlimited permission to copy, distribute and modify it. -## -------------------- ## -## M4sh Initialization. ## -## -------------------- ## - -# Be more Bourne compatible -DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : - emulate sh - NULLCMD=: - # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in @%:@( - *posix*) : - set -o posix ;; @%:@( - *) : - ;; -esac -fi - - -as_nl=' -' -export as_nl -# Printing a long string crashes Solaris 7 /usr/bin/printf. -as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo -# Prefer a ksh shell builtin over an external printf program on Solaris, -# but without wasting forks for bash or zsh. -if test -z "$BASH_VERSION$ZSH_VERSION" \ - && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='print -r --' - as_echo_n='print -rn --' -elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='printf %s\n' - as_echo_n='printf %s' -else - if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then - as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' - as_echo_n='/usr/ucb/echo -n' - else - as_echo_body='eval expr "X$1" : "X\\(.*\\)"' - as_echo_n_body='eval - arg=$1; - case $arg in @%:@( - *"$as_nl"*) - expr "X$arg" : "X\\(.*\\)$as_nl"; - arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; - esac; - expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" - ' - export as_echo_n_body - as_echo_n='sh -c $as_echo_n_body as_echo' - fi - export as_echo_body - as_echo='sh -c $as_echo_body as_echo' -fi - -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - PATH_SEPARATOR=: - (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { - (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || - PATH_SEPARATOR=';' - } -fi - - -# IFS -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent editors from complaining about space-tab. -# (If _AS_PATH_WALK were called with IFS unset, it would disable word -# splitting by setting IFS to empty value.) -IFS=" "" $as_nl" - -# Find who we are. Look in the path if we contain no directory separator. -case $0 in @%:@(( - *[\\/]* ) as_myself=$0 ;; - *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break - done -IFS=$as_save_IFS - - ;; -esac -# We did not find ourselves, most probably we were run as `sh COMMAND' -# in which case we are not to be found in the path. -if test "x$as_myself" = x; then - as_myself=$0 -fi -if test ! -f "$as_myself"; then - $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 - exit 1 -fi - -# Unset variables that we do not need and which cause bugs (e.g. in -# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" -# suppresses any "Segmentation fault" message there. '((' could -# trigger a bug in pdksh 5.2.14. -for as_var in BASH_ENV ENV MAIL MAILPATH -do eval test x\${$as_var+set} = xset \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# CDPATH. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -if test "x$CONFIG_SHELL" = x; then - as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : - emulate sh - NULLCMD=: - # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which - # is contrary to our usage. Disable this feature. - alias -g '\${1+\"\$@\"}'='\"\$@\"' - setopt NO_GLOB_SUBST -else - case \`(set -o) 2>/dev/null\` in @%:@( - *posix*) : - set -o posix ;; @%:@( - *) : - ;; -esac -fi -" - as_required="as_fn_return () { (exit \$1); } -as_fn_success () { as_fn_return 0; } -as_fn_failure () { as_fn_return 1; } -as_fn_ret_success () { return 0; } -as_fn_ret_failure () { return 1; } - -exitcode=0 -as_fn_success || { exitcode=1; echo as_fn_success failed.; } -as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } -as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } -as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } -if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : - -else - exitcode=1; echo positional parameters were not saved. -fi -test x\$exitcode = x0 || exit 1" - as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO - as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO - eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && - test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 -test \$(( 1 + 1 )) = 2 || exit 1" - if (eval "$as_required") 2>/dev/null; then : - as_have_required=yes -else - as_have_required=no -fi - if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : - -else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -as_found=false -for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - as_found=: - case $as_dir in @%:@( - /*) - for as_base in sh bash ksh sh5; do - # Try only shells that exist, to save several forks. - as_shell=$as_dir/$as_base - if { test -f "$as_shell" || test -f "$as_shell.exe"; } && - { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : - CONFIG_SHELL=$as_shell as_have_required=yes - if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : - break 2 -fi -fi - done;; - esac - as_found=false -done -$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && - { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : - CONFIG_SHELL=$SHELL as_have_required=yes -fi; } -IFS=$as_save_IFS - - - if test "x$CONFIG_SHELL" != x; then : - # We cannot yet assume a decent shell, so we have to provide a - # neutralization value for shells without unset; and this also - # works around shells that cannot unset nonexistent variables. - BASH_ENV=/dev/null - ENV=/dev/null - (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV - export CONFIG_SHELL - exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} -fi - - if test x$as_have_required = xno; then : - $as_echo "$0: This script requires a shell more modern than all" - $as_echo "$0: the shells that I found on your system." - if test x${ZSH_VERSION+set} = xset ; then - $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" - $as_echo "$0: be upgraded to zsh 4.3.4 or later." - else - $as_echo "$0: Please tell bug-autoconf@gnu.org about your system, -$0: including any error possibly output before this -$0: message. Then install a modern shell, or manually run -$0: the script under such a shell if you do have one." - fi - exit 1 -fi -fi -fi -SHELL=${CONFIG_SHELL-/bin/sh} -export SHELL -# Unset more variables known to interfere with behavior of common tools. -CLICOLOR_FORCE= GREP_OPTIONS= -unset CLICOLOR_FORCE GREP_OPTIONS - -## --------------------- ## -## M4sh Shell Functions. ## -## --------------------- ## -@%:@ as_fn_unset VAR -@%:@ --------------- -@%:@ Portably unset VAR. -as_fn_unset () -{ - { eval $1=; unset $1;} -} -as_unset=as_fn_unset - -@%:@ as_fn_set_status STATUS -@%:@ ----------------------- -@%:@ Set @S|@? to STATUS, without forking. -as_fn_set_status () -{ - return $1 -} @%:@ as_fn_set_status - -@%:@ as_fn_exit STATUS -@%:@ ----------------- -@%:@ Exit the shell with STATUS, even in a "trap 0" or "set -e" context. -as_fn_exit () -{ - set +e - as_fn_set_status $1 - exit $1 -} @%:@ as_fn_exit - -@%:@ as_fn_mkdir_p -@%:@ ------------- -@%:@ Create "@S|@as_dir" as a directory, including parents if necessary. -as_fn_mkdir_p () -{ - - case $as_dir in #( - -*) as_dir=./$as_dir;; - esac - test -d "$as_dir" || eval $as_mkdir_p || { - as_dirs= - while :; do - case $as_dir in #( - *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( - *) as_qdir=$as_dir;; - esac - as_dirs="'$as_qdir' $as_dirs" - as_dir=`$as_dirname -- "$as_dir" || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - test -d "$as_dir" && break - done - test -z "$as_dirs" || eval "mkdir $as_dirs" - } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir" - - -} @%:@ as_fn_mkdir_p -@%:@ as_fn_append VAR VALUE -@%:@ ---------------------- -@%:@ Append the text in VALUE to the end of the definition contained in VAR. Take -@%:@ advantage of any shell optimizations that allow amortized linear growth over -@%:@ repeated appends, instead of the typical quadratic growth present in naive -@%:@ implementations. -if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : - eval 'as_fn_append () - { - eval $1+=\$2 - }' -else - as_fn_append () - { - eval $1=\$$1\$2 - } -fi # as_fn_append - -@%:@ as_fn_arith ARG... -@%:@ ------------------ -@%:@ Perform arithmetic evaluation on the ARGs, and store the result in the -@%:@ global @S|@as_val. Take advantage of shells that can avoid forks. The arguments -@%:@ must be portable across @S|@(()) and expr. -if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : - eval 'as_fn_arith () - { - as_val=$(( $* )) - }' -else - as_fn_arith () - { - as_val=`expr "$@" || test $? -eq 1` - } -fi # as_fn_arith - - -@%:@ as_fn_error ERROR [LINENO LOG_FD] -@%:@ --------------------------------- -@%:@ Output "`basename @S|@0`: error: ERROR" to stderr. If LINENO and LOG_FD are -@%:@ provided, also output the error to LOG_FD, referencing LINENO. Then exit the -@%:@ script with status @S|@?, using 1 if that was 0. -as_fn_error () -{ - as_status=$?; test $as_status -eq 0 && as_status=1 - if test "$3"; then - as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3 - fi - $as_echo "$as_me: error: $1" >&2 - as_fn_exit $as_status -} @%:@ as_fn_error - -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi - -if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then - as_basename=basename -else - as_basename=false -fi - -if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then - as_dirname=dirname -else - as_dirname=false -fi - -as_me=`$as_basename -- "$0" || -$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X/"$0" | - sed '/^.*\/\([^/][^/]*\)\/*$/{ - s//\1/ - q - } - /^X\/\(\/\/\)$/{ - s//\1/ - q - } - /^X\/\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - -# Avoid depending upon Character Ranges. -as_cr_letters='abcdefghijklmnopqrstuvwxyz' -as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' -as_cr_Letters=$as_cr_letters$as_cr_LETTERS -as_cr_digits='0123456789' -as_cr_alnum=$as_cr_Letters$as_cr_digits - - - as_lineno_1=$LINENO as_lineno_1a=$LINENO - as_lineno_2=$LINENO as_lineno_2a=$LINENO - eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && - test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { - # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) - sed -n ' - p - /[$]LINENO/= - ' <$as_myself | - sed ' - s/[$]LINENO.*/&-/ - t lineno - b - :lineno - N - :loop - s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ - t loop - s/-\n.*// - ' >$as_me.lineno && - chmod +x "$as_me.lineno" || - { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } - - # Don't try to exec as it changes $[0], causing all sort of problems - # (the dirname of $[0] is not the place where we might find the - # original and so on. Autoconf is especially sensitive to this). - . "./$as_me.lineno" - # Exit status is that of the last command. - exit -} - -ECHO_C= ECHO_N= ECHO_T= -case `echo -n x` in @%:@((((( --n*) - case `echo 'xy\c'` in - *c*) ECHO_T=' ';; # ECHO_T is single tab character. - xy) ECHO_C='\c';; - *) echo `echo ksh88 bug on AIX 6.1` > /dev/null - ECHO_T=' ';; - esac;; -*) - ECHO_N='-n';; -esac - -rm -f conf$$ conf$$.exe conf$$.file -if test -d conf$$.dir; then - rm -f conf$$.dir/conf$$.file -else - rm -f conf$$.dir - mkdir conf$$.dir 2>/dev/null -fi -if (echo >conf$$.file) 2>/dev/null; then - if ln -s conf$$.file conf$$ 2>/dev/null; then - as_ln_s='ln -s' - # ... but there are two gotchas: - # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -p'. - ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || - as_ln_s='cp -p' - elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln - else - as_ln_s='cp -p' - fi -else - as_ln_s='cp -p' -fi -rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file -rmdir conf$$.dir 2>/dev/null - -if mkdir -p . 2>/dev/null; then - as_mkdir_p='mkdir -p "$as_dir"' -else - test -d ./-p && rmdir ./-p - as_mkdir_p=false -fi - -if test -x / >/dev/null 2>&1; then - as_test_x='test -x' -else - if ls -dL / >/dev/null 2>&1; then - as_ls_L_option=L - else - as_ls_L_option= - fi - as_test_x=' - eval sh -c '\'' - if test -d "$1"; then - test -d "$1/."; - else - case $1 in @%:@( - -*)set "./$1";; - esac; - case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in @%:@(( - ???[sx]*):;;*)false;;esac;fi - '\'' sh - ' -fi -as_executable_p=$as_test_x - -# Sed expression to map a string onto a valid CPP name. -as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" - -# Sed expression to map a string onto a valid variable name. -as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" - - - -# Check that we are running under the correct shell. -SHELL=${CONFIG_SHELL-/bin/sh} - -case X$lt_ECHO in -X*--fallback-echo) - # Remove one level of quotation (which was required for Make). - ECHO=`echo "$lt_ECHO" | sed 's,\\\\\$\\$0,'$0','` - ;; -esac - -ECHO=${lt_ECHO-echo} -if test "X$1" = X--no-reexec; then - # Discard the --no-reexec flag, and continue. - shift -elif test "X$1" = X--fallback-echo; then - # Avoid inline document here, it may be left over - : -elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' ; then - # Yippee, $ECHO works! - : -else - # Restart under the correct shell. - exec $SHELL "$0" --no-reexec ${1+"$@"} -fi - -if test "X$1" = X--fallback-echo; then - # used as fallback echo - shift - cat <<_LT_EOF -$* -_LT_EOF - exit 0 -fi - -# The HP-UX ksh and POSIX shell print the target directory to stdout -# if CDPATH is set. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -if test -z "$lt_ECHO"; then - if test "X${echo_test_string+set}" != Xset; then - # find a string as large as possible, as long as the shell can cope with it - for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do - # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ... - if { echo_test_string=`eval $cmd`; } 2>/dev/null && - { test "X$echo_test_string" = "X$echo_test_string"; } 2>/dev/null - then - break - fi - done - fi - - if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' && - echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - : - else - # The Solaris, AIX, and Digital Unix default echo programs unquote - # backslashes. This makes it impossible to quote backslashes using - # echo "$something" | sed 's/\\/\\\\/g' - # - # So, first we look for a working echo in the user's PATH. - - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for dir in $PATH /usr/ucb; do - IFS="$lt_save_ifs" - if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && - test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && - echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - ECHO="$dir/echo" - break - fi - done - IFS="$lt_save_ifs" - - if test "X$ECHO" = Xecho; then - # We didn't find a better echo, so look for alternatives. - if test "X`{ print -r '\t'; } 2>/dev/null`" = 'X\t' && - echo_testing_string=`{ print -r "$echo_test_string"; } 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - # This shell has a builtin print -r that does the trick. - ECHO='print -r' - elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } && - test "X$CONFIG_SHELL" != X/bin/ksh; then - # If we have ksh, try running configure again with it. - ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} - export ORIGINAL_CONFIG_SHELL - CONFIG_SHELL=/bin/ksh - export CONFIG_SHELL - exec $CONFIG_SHELL "$0" --no-reexec ${1+"$@"} - else - # Try using printf. - ECHO='printf %s\n' - if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' && - echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - # Cool, printf works - : - elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && - test "X$echo_testing_string" = 'X\t' && - echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL - export CONFIG_SHELL - SHELL="$CONFIG_SHELL" - export SHELL - ECHO="$CONFIG_SHELL $0 --fallback-echo" - elif echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && - test "X$echo_testing_string" = 'X\t' && - echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - ECHO="$CONFIG_SHELL $0 --fallback-echo" - else - # maybe with a smaller string... - prev=: - - for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do - if { test "X$echo_test_string" = "X`eval $cmd`"; } 2>/dev/null - then - break - fi - prev="$cmd" - done - - if test "$prev" != 'sed 50q "$0"'; then - echo_test_string=`eval $prev` - export echo_test_string - exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "$0" ${1+"$@"} - else - # Oops. We lost completely, so just stick with echo. - ECHO=echo - fi - fi - fi - fi - fi -fi - -# Copy echo and quote the copy suitably for passing to libtool from -# the Makefile, instead of quoting the original, which is used later. -lt_ECHO=$ECHO -if test "X$lt_ECHO" = "X$CONFIG_SHELL $0 --fallback-echo"; then - lt_ECHO="$CONFIG_SHELL \\\$\$0 --fallback-echo" -fi - - - - -test -n "$DJDIR" || exec 7<&0 &1 - -# Name of the host. -# hostname on some systems (SVR3.2, Linux) returns a bogus exit status, -# so uname gets run too. -ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` - -# -# Initializations. -# -ac_default_prefix=/usr/local -ac_clean_files= -ac_config_libobj_dir=. -LIB@&t@OBJS= -cross_compiling=no -subdirs= -MFLAGS= -MAKEFLAGS= - -# Identity of this package. -PACKAGE_NAME= -PACKAGE_TARNAME= -PACKAGE_VERSION= -PACKAGE_STRING= -PACKAGE_BUGREPORT= -PACKAGE_URL= - -ac_unique_file="src/radlogin.c" -# Factoring default headers for most tests. -ac_includes_default="\ -#include -#ifdef HAVE_SYS_TYPES_H -# include -#endif -#ifdef HAVE_SYS_STAT_H -# include -#endif -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif -#ifdef HAVE_STRING_H -# if !defined STDC_HEADERS && defined HAVE_MEMORY_H -# include -# endif -# include -#endif -#ifdef HAVE_STRINGS_H -# include -#endif -#ifdef HAVE_INTTYPES_H -# include -#endif -#ifdef HAVE_STDINT_H -# include -#endif -#ifdef HAVE_UNISTD_H -# include -#endif" - -ac_subst_vars='am__EXEEXT_FALSE -am__EXEEXT_TRUE -LTLIBOBJS -RC_LOG_FACILITY -RC_SECURE_PATH -ALLOCA -LIB@&t@OBJS -CPP -OTOOL64 -OTOOL -LIPO -NMEDIT -DSYMUTIL -lt_ECHO -RANLIB -AR -OBJDUMP -LN_S -NM -ac_ct_DUMPBIN -DUMPBIN -LD -FGREP -EGREP -GREP -SED -am__fastdepCC_FALSE -am__fastdepCC_TRUE -CCDEPMODE -AMDEPBACKSLASH -AMDEP_FALSE -AMDEP_TRUE -am__quote -am__include -DEPDIR -OBJEXT -EXEEXT -ac_ct_CC -CPPFLAGS -LDFLAGS -CFLAGS -CC -LIBTOOL -pkgsysconfdir -LIBVERSION -am__untar -am__tar -AMTAR -am__leading_dot -SET_MAKE -AWK -mkdir_p -MKDIR_P -INSTALL_STRIP_PROGRAM -STRIP -install_sh -MAKEINFO -AUTOHEADER -AUTOMAKE -AUTOCONF -ACLOCAL -VERSION -PACKAGE -CYGPATH_W -am__isrc -INSTALL_DATA -INSTALL_SCRIPT -INSTALL_PROGRAM -target_os -target_vendor -target_cpu -target -host_os -host_vendor -host_cpu -host -build_os -build_vendor -build_cpu -build -MAINT -MAINTAINER_MODE_FALSE -MAINTAINER_MODE_TRUE -target_alias -host_alias -build_alias -LIBS -ECHO_T -ECHO_N -ECHO_C -DEFS -mandir -localedir -libdir -psdir -pdfdir -dvidir -htmldir -infodir -docdir -oldincludedir -includedir -localstatedir -sharedstatedir -sysconfdir -datadir -datarootdir -libexecdir -sbindir -bindir -program_transform_name -prefix -exec_prefix -PACKAGE_URL -PACKAGE_BUGREPORT -PACKAGE_STRING -PACKAGE_VERSION -PACKAGE_TARNAME -PACKAGE_NAME -PATH_SEPARATOR -SHELL' -ac_subst_files='' -ac_user_opts=' -enable_option_checking -enable_maintainer_mode -enable_shared -enable_static -with_pic -enable_fast_install -enable_dependency_tracking -with_gnu_ld -enable_libtool_lock -enable_shadow -with_secure_path -with_facility -enable_radius_116 -enable_scp -' - ac_precious_vars='build_alias -host_alias -target_alias -CC -CFLAGS -LDFLAGS -LIBS -CPPFLAGS -CPP' - - -# Initialize some variables set by options. -ac_init_help= -ac_init_version=false -ac_unrecognized_opts= -ac_unrecognized_sep= -# The variables have the same names as the options, with -# dashes changed to underlines. -cache_file=/dev/null -exec_prefix=NONE -no_create= -no_recursion= -prefix=NONE -program_prefix=NONE -program_suffix=NONE -program_transform_name=s,x,x, -silent= -site= -srcdir= -verbose= -x_includes=NONE -x_libraries=NONE - -# Installation directory options. -# These are left unexpanded so users can "make install exec_prefix=/foo" -# and all the variables that are supposed to be based on exec_prefix -# by default will actually change. -# Use braces instead of parens because sh, perl, etc. also accept them. -# (The list follows the same order as the GNU Coding Standards.) -bindir='${exec_prefix}/bin' -sbindir='${exec_prefix}/sbin' -libexecdir='${exec_prefix}/libexec' -datarootdir='${prefix}/share' -datadir='${datarootdir}' -sysconfdir='${prefix}/etc' -sharedstatedir='${prefix}/com' -localstatedir='${prefix}/var' -includedir='${prefix}/include' -oldincludedir='/usr/include' -docdir='${datarootdir}/doc/${PACKAGE}' -infodir='${datarootdir}/info' -htmldir='${docdir}' -dvidir='${docdir}' -pdfdir='${docdir}' -psdir='${docdir}' -libdir='${exec_prefix}/lib' -localedir='${datarootdir}/locale' -mandir='${datarootdir}/man' - -ac_prev= -ac_dashdash= -for ac_option -do - # If the previous option needs an argument, assign it. - if test -n "$ac_prev"; then - eval $ac_prev=\$ac_option - ac_prev= - continue - fi - - case $ac_option in - *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; - *) ac_optarg=yes ;; - esac - - # Accept the important Cygnus configure options, so we can diagnose typos. - - case $ac_dashdash$ac_option in - --) - ac_dashdash=yes ;; - - -bindir | --bindir | --bindi | --bind | --bin | --bi) - ac_prev=bindir ;; - -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) - bindir=$ac_optarg ;; - - -build | --build | --buil | --bui | --bu) - ac_prev=build_alias ;; - -build=* | --build=* | --buil=* | --bui=* | --bu=*) - build_alias=$ac_optarg ;; - - -cache-file | --cache-file | --cache-fil | --cache-fi \ - | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) - ac_prev=cache_file ;; - -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ - | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) - cache_file=$ac_optarg ;; - - --config-cache | -C) - cache_file=config.cache ;; - - -datadir | --datadir | --datadi | --datad) - ac_prev=datadir ;; - -datadir=* | --datadir=* | --datadi=* | --datad=*) - datadir=$ac_optarg ;; - - -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ - | --dataroo | --dataro | --datar) - ac_prev=datarootdir ;; - -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ - | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) - datarootdir=$ac_optarg ;; - - -disable-* | --disable-*) - ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error "invalid feature name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"enable_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval enable_$ac_useropt=no ;; - - -docdir | --docdir | --docdi | --doc | --do) - ac_prev=docdir ;; - -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) - docdir=$ac_optarg ;; - - -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) - ac_prev=dvidir ;; - -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) - dvidir=$ac_optarg ;; - - -enable-* | --enable-*) - ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error "invalid feature name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"enable_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval enable_$ac_useropt=\$ac_optarg ;; - - -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ - | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ - | --exec | --exe | --ex) - ac_prev=exec_prefix ;; - -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ - | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ - | --exec=* | --exe=* | --ex=*) - exec_prefix=$ac_optarg ;; - - -gas | --gas | --ga | --g) - # Obsolete; use --with-gas. - with_gas=yes ;; - - -help | --help | --hel | --he | -h) - ac_init_help=long ;; - -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) - ac_init_help=recursive ;; - -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) - ac_init_help=short ;; - - -host | --host | --hos | --ho) - ac_prev=host_alias ;; - -host=* | --host=* | --hos=* | --ho=*) - host_alias=$ac_optarg ;; - - -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) - ac_prev=htmldir ;; - -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ - | --ht=*) - htmldir=$ac_optarg ;; - - -includedir | --includedir | --includedi | --included | --include \ - | --includ | --inclu | --incl | --inc) - ac_prev=includedir ;; - -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ - | --includ=* | --inclu=* | --incl=* | --inc=*) - includedir=$ac_optarg ;; - - -infodir | --infodir | --infodi | --infod | --info | --inf) - ac_prev=infodir ;; - -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) - infodir=$ac_optarg ;; - - -libdir | --libdir | --libdi | --libd) - ac_prev=libdir ;; - -libdir=* | --libdir=* | --libdi=* | --libd=*) - libdir=$ac_optarg ;; - - -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ - | --libexe | --libex | --libe) - ac_prev=libexecdir ;; - -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ - | --libexe=* | --libex=* | --libe=*) - libexecdir=$ac_optarg ;; - - -localedir | --localedir | --localedi | --localed | --locale) - ac_prev=localedir ;; - -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) - localedir=$ac_optarg ;; - - -localstatedir | --localstatedir | --localstatedi | --localstated \ - | --localstate | --localstat | --localsta | --localst | --locals) - ac_prev=localstatedir ;; - -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ - | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) - localstatedir=$ac_optarg ;; - - -mandir | --mandir | --mandi | --mand | --man | --ma | --m) - ac_prev=mandir ;; - -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) - mandir=$ac_optarg ;; - - -nfp | --nfp | --nf) - # Obsolete; use --without-fp. - with_fp=no ;; - - -no-create | --no-create | --no-creat | --no-crea | --no-cre \ - | --no-cr | --no-c | -n) - no_create=yes ;; - - -no-recursion | --no-recursion | --no-recursio | --no-recursi \ - | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) - no_recursion=yes ;; - - -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ - | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ - | --oldin | --oldi | --old | --ol | --o) - ac_prev=oldincludedir ;; - -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ - | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ - | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) - oldincludedir=$ac_optarg ;; - - -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) - ac_prev=prefix ;; - -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) - prefix=$ac_optarg ;; - - -program-prefix | --program-prefix | --program-prefi | --program-pref \ - | --program-pre | --program-pr | --program-p) - ac_prev=program_prefix ;; - -program-prefix=* | --program-prefix=* | --program-prefi=* \ - | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) - program_prefix=$ac_optarg ;; - - -program-suffix | --program-suffix | --program-suffi | --program-suff \ - | --program-suf | --program-su | --program-s) - ac_prev=program_suffix ;; - -program-suffix=* | --program-suffix=* | --program-suffi=* \ - | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) - program_suffix=$ac_optarg ;; - - -program-transform-name | --program-transform-name \ - | --program-transform-nam | --program-transform-na \ - | --program-transform-n | --program-transform- \ - | --program-transform | --program-transfor \ - | --program-transfo | --program-transf \ - | --program-trans | --program-tran \ - | --progr-tra | --program-tr | --program-t) - ac_prev=program_transform_name ;; - -program-transform-name=* | --program-transform-name=* \ - | --program-transform-nam=* | --program-transform-na=* \ - | --program-transform-n=* | --program-transform-=* \ - | --program-transform=* | --program-transfor=* \ - | --program-transfo=* | --program-transf=* \ - | --program-trans=* | --program-tran=* \ - | --progr-tra=* | --program-tr=* | --program-t=*) - program_transform_name=$ac_optarg ;; - - -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) - ac_prev=pdfdir ;; - -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) - pdfdir=$ac_optarg ;; - - -psdir | --psdir | --psdi | --psd | --ps) - ac_prev=psdir ;; - -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) - psdir=$ac_optarg ;; - - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil) - silent=yes ;; - - -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) - ac_prev=sbindir ;; - -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ - | --sbi=* | --sb=*) - sbindir=$ac_optarg ;; - - -sharedstatedir | --sharedstatedir | --sharedstatedi \ - | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ - | --sharedst | --shareds | --shared | --share | --shar \ - | --sha | --sh) - ac_prev=sharedstatedir ;; - -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ - | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ - | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ - | --sha=* | --sh=*) - sharedstatedir=$ac_optarg ;; - - -site | --site | --sit) - ac_prev=site ;; - -site=* | --site=* | --sit=*) - site=$ac_optarg ;; - - -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) - ac_prev=srcdir ;; - -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) - srcdir=$ac_optarg ;; - - -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ - | --syscon | --sysco | --sysc | --sys | --sy) - ac_prev=sysconfdir ;; - -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ - | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) - sysconfdir=$ac_optarg ;; - - -target | --target | --targe | --targ | --tar | --ta | --t) - ac_prev=target_alias ;; - -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) - target_alias=$ac_optarg ;; - - -v | -verbose | --verbose | --verbos | --verbo | --verb) - verbose=yes ;; - - -version | --version | --versio | --versi | --vers | -V) - ac_init_version=: ;; - - -with-* | --with-*) - ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error "invalid package name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"with_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval with_$ac_useropt=\$ac_optarg ;; - - -without-* | --without-*) - ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error "invalid package name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"with_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval with_$ac_useropt=no ;; - - --x) - # Obsolete; use --with-x. - with_x=yes ;; - - -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ - | --x-incl | --x-inc | --x-in | --x-i) - ac_prev=x_includes ;; - -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ - | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) - x_includes=$ac_optarg ;; - - -x-libraries | --x-libraries | --x-librarie | --x-librari \ - | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) - ac_prev=x_libraries ;; - -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ - | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) - x_libraries=$ac_optarg ;; - - -*) as_fn_error "unrecognized option: \`$ac_option' -Try \`$0 --help' for more information." - ;; - - *=*) - ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` - # Reject names that are not valid shell variable names. - case $ac_envvar in #( - '' | [0-9]* | *[!_$as_cr_alnum]* ) - as_fn_error "invalid variable name: \`$ac_envvar'" ;; - esac - eval $ac_envvar=\$ac_optarg - export $ac_envvar ;; - - *) - # FIXME: should be removed in autoconf 3.0. - $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 - expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && - $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 - : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} - ;; - - esac -done - -if test -n "$ac_prev"; then - ac_option=--`echo $ac_prev | sed 's/_/-/g'` - as_fn_error "missing argument to $ac_option" -fi - -if test -n "$ac_unrecognized_opts"; then - case $enable_option_checking in - no) ;; - fatal) as_fn_error "unrecognized options: $ac_unrecognized_opts" ;; - *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; - esac -fi - -# Check all directory arguments for consistency. -for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ - datadir sysconfdir sharedstatedir localstatedir includedir \ - oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ - libdir localedir mandir -do - eval ac_val=\$$ac_var - # Remove trailing slashes. - case $ac_val in - */ ) - ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` - eval $ac_var=\$ac_val;; - esac - # Be sure to have absolute directory names. - case $ac_val in - [\\/$]* | ?:[\\/]* ) continue;; - NONE | '' ) case $ac_var in *prefix ) continue;; esac;; - esac - as_fn_error "expected an absolute directory name for --$ac_var: $ac_val" -done - -# There might be people who depend on the old broken behavior: `$host' -# used to hold the argument of --host etc. -# FIXME: To remove some day. -build=$build_alias -host=$host_alias -target=$target_alias - -# FIXME: To remove some day. -if test "x$host_alias" != x; then - if test "x$build_alias" = x; then - cross_compiling=maybe - $as_echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. - If a cross compiler is detected then cross compile mode will be used." >&2 - elif test "x$build_alias" != "x$host_alias"; then - cross_compiling=yes - fi -fi - -ac_tool_prefix= -test -n "$host_alias" && ac_tool_prefix=$host_alias- - -test "$silent" = yes && exec 6>/dev/null - - -ac_pwd=`pwd` && test -n "$ac_pwd" && -ac_ls_di=`ls -di .` && -ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || - as_fn_error "working directory cannot be determined" -test "X$ac_ls_di" = "X$ac_pwd_ls_di" || - as_fn_error "pwd does not report name of working directory" - - -# Find the source files, if location was not specified. -if test -z "$srcdir"; then - ac_srcdir_defaulted=yes - # Try the directory containing this script, then the parent directory. - ac_confdir=`$as_dirname -- "$as_myself" || -$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_myself" : 'X\(//\)[^/]' \| \ - X"$as_myself" : 'X\(//\)$' \| \ - X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_myself" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - srcdir=$ac_confdir - if test ! -r "$srcdir/$ac_unique_file"; then - srcdir=.. - fi -else - ac_srcdir_defaulted=no -fi -if test ! -r "$srcdir/$ac_unique_file"; then - test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." - as_fn_error "cannot find sources ($ac_unique_file) in $srcdir" -fi -ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" -ac_abs_confdir=`( - cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error "$ac_msg" - pwd)` -# When building in place, set srcdir=. -if test "$ac_abs_confdir" = "$ac_pwd"; then - srcdir=. -fi -# Remove unnecessary trailing slashes from srcdir. -# Double slashes in file names in object file debugging info -# mess up M-x gdb in Emacs. -case $srcdir in -*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; -esac -for ac_var in $ac_precious_vars; do - eval ac_env_${ac_var}_set=\${${ac_var}+set} - eval ac_env_${ac_var}_value=\$${ac_var} - eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} - eval ac_cv_env_${ac_var}_value=\$${ac_var} -done - -# -# Report the --help message. -# -if test "$ac_init_help" = "long"; then - # Omit some internal or obsolete options to make the list less imposing. - # This message is too long to be a string in the A/UX 3.1 sh. - cat <<_ACEOF -\`configure' configures this package to adapt to many kinds of systems. - -Usage: $0 [OPTION]... [VAR=VALUE]... - -To assign environment variables (e.g., CC, CFLAGS...), specify them as -VAR=VALUE. See below for descriptions of some of the useful variables. - -Defaults for the options are specified in brackets. - -Configuration: - -h, --help display this help and exit - --help=short display options specific to this package - --help=recursive display the short help of all the included packages - -V, --version display version information and exit - -q, --quiet, --silent do not print \`checking...' messages - --cache-file=FILE cache test results in FILE [disabled] - -C, --config-cache alias for \`--cache-file=config.cache' - -n, --no-create do not create output files - --srcdir=DIR find the sources in DIR [configure dir or \`..'] - -Installation directories: - --prefix=PREFIX install architecture-independent files in PREFIX - @<:@@S|@ac_default_prefix@:>@ - --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX - @<:@PREFIX@:>@ - -By default, \`make install' will install all the files in -\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify -an installation prefix other than \`$ac_default_prefix' using \`--prefix', -for instance \`--prefix=\$HOME'. - -For better control, use the options below. - -Fine tuning of the installation directories: - --bindir=DIR user executables [EPREFIX/bin] - --sbindir=DIR system admin executables [EPREFIX/sbin] - --libexecdir=DIR program executables [EPREFIX/libexec] - --sysconfdir=DIR read-only single-machine data [PREFIX/etc] - --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] - --localstatedir=DIR modifiable single-machine data [PREFIX/var] - --libdir=DIR object code libraries [EPREFIX/lib] - --includedir=DIR C header files [PREFIX/include] - --oldincludedir=DIR C header files for non-gcc [/usr/include] - --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] - --datadir=DIR read-only architecture-independent data [DATAROOTDIR] - --infodir=DIR info documentation [DATAROOTDIR/info] - --localedir=DIR locale-dependent data [DATAROOTDIR/locale] - --mandir=DIR man documentation [DATAROOTDIR/man] - --docdir=DIR documentation root @<:@DATAROOTDIR/doc/PACKAGE@:>@ - --htmldir=DIR html documentation [DOCDIR] - --dvidir=DIR dvi documentation [DOCDIR] - --pdfdir=DIR pdf documentation [DOCDIR] - --psdir=DIR ps documentation [DOCDIR] -_ACEOF - - cat <<\_ACEOF - -Program names: - --program-prefix=PREFIX prepend PREFIX to installed program names - --program-suffix=SUFFIX append SUFFIX to installed program names - --program-transform-name=PROGRAM run sed PROGRAM on installed program names - -System types: - --build=BUILD configure for building on BUILD [guessed] - --host=HOST cross-compile to build programs to run on HOST [BUILD] - --target=TARGET configure for building compilers for TARGET [HOST] -_ACEOF -fi - -if test -n "$ac_init_help"; then - - cat <<\_ACEOF - -Optional Features: - --disable-option-checking ignore unrecognized --enable/--with options - --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) - --enable-FEATURE[=ARG] include FEATURE [ARG=yes] - --enable-maintainer-mode enable make rules and dependencies not useful - (and sometimes confusing) to the casual installer - --enable-shared@<:@=PKGS@:>@ build shared libraries @<:@default=yes@:>@ - --enable-static@<:@=PKGS@:>@ build static libraries @<:@default=yes@:>@ - --enable-fast-install@<:@=PKGS@:>@ - optimize for fast installation @<:@default=yes@:>@ - --disable-dependency-tracking speeds up one-time build - --enable-dependency-tracking do not reject slow dependency extractors - --disable-libtool-lock avoid locking (might break parallel builds) - --enable-shadow Enable shadow password support - --enable-radius-116 Include support for Livingston's RADIUS server 1.16 - --enable-scp Add service type hints derived from username prefix - -Optional Packages: - --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] - --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) - --with-pic try to use only PIC/non-PIC objects @<:@default=use - both@:>@ - --with-gnu-ld assume the C compiler uses GNU ld @<:@default=no@:>@ - --with-secure-path PATH setting for exec'ed programs - --with-facility Syslog facility to use - -Some influential environment variables: - CC C compiler command - CFLAGS C compiler flags - LDFLAGS linker flags, e.g. -L if you have libraries in a - nonstandard directory - LIBS libraries to pass to the linker, e.g. -l - CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if - you have headers in a nonstandard directory - CPP C preprocessor - -Use these variables to override the choices made by `configure' or to help -it to find libraries and programs with nonstandard names/locations. - -Report bugs to the package provider. -_ACEOF -ac_status=$? -fi - -if test "$ac_init_help" = "recursive"; then - # If there are subdirs, report their specific --help. - for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue - test -d "$ac_dir" || - { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || - continue - ac_builddir=. - -case "$ac_dir" in -.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; -*) - ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` - # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` - case $ac_top_builddir_sub in - "") ac_top_builddir_sub=. ac_top_build_prefix= ;; - *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; - esac ;; -esac -ac_abs_top_builddir=$ac_pwd -ac_abs_builddir=$ac_pwd$ac_dir_suffix -# for backward compatibility: -ac_top_builddir=$ac_top_build_prefix - -case $srcdir in - .) # We are building in place. - ac_srcdir=. - ac_top_srcdir=$ac_top_builddir_sub - ac_abs_top_srcdir=$ac_pwd ;; - [\\/]* | ?:[\\/]* ) # Absolute name. - ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir - ac_abs_top_srcdir=$srcdir ;; - *) # Relative name. - ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_build_prefix$srcdir - ac_abs_top_srcdir=$ac_pwd/$srcdir ;; -esac -ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix - - cd "$ac_dir" || { ac_status=$?; continue; } - # Check for guested configure. - if test -f "$ac_srcdir/configure.gnu"; then - echo && - $SHELL "$ac_srcdir/configure.gnu" --help=recursive - elif test -f "$ac_srcdir/configure"; then - echo && - $SHELL "$ac_srcdir/configure" --help=recursive - else - $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 - fi || ac_status=$? - cd "$ac_pwd" || { ac_status=$?; break; } - done -fi - -test -n "$ac_init_help" && exit $ac_status -if $ac_init_version; then - cat <<\_ACEOF -configure -generated by GNU Autoconf 2.65 - -Copyright (C) 2009 Free Software Foundation, Inc. -This configure script is free software; the Free Software Foundation -gives unlimited permission to copy, distribute and modify it. -_ACEOF - exit -fi - -## ------------------------ ## -## Autoconf initialization. ## -## ------------------------ ## - -@%:@ ac_fn_c_try_compile LINENO -@%:@ -------------------------- -@%:@ Try to compile conftest.@S|@ac_ext, and return whether this succeeded. -ac_fn_c_try_compile () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext - if { { ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compile") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - as_fn_set_status $ac_retval - -} @%:@ ac_fn_c_try_compile - -@%:@ ac_fn_c_try_link LINENO -@%:@ ----------------------- -@%:@ Try to link conftest.@S|@ac_ext, and return whether this succeeded. -ac_fn_c_try_link () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext conftest$ac_exeext - if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && { - test "$cross_compiling" = yes || - $as_test_x conftest$ac_exeext - }; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information - # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would - # interfere with the next link command; also delete a directory that is - # left behind by Apple's compiler. We do this before executing the actions. - rm -rf conftest.dSYM conftest_ipa8_conftest.oo - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - as_fn_set_status $ac_retval - -} @%:@ ac_fn_c_try_link - -@%:@ ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES -@%:@ ------------------------------------------------------- -@%:@ Tests whether HEADER exists and can be compiled using the include files in -@%:@ INCLUDES, setting the cache variable VAR accordingly. -ac_fn_c_check_header_compile () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -@%:@include <$2> -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - eval "$3=yes" -else - eval "$3=no" -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - -} @%:@ ac_fn_c_check_header_compile - -@%:@ ac_fn_c_try_cpp LINENO -@%:@ ---------------------- -@%:@ Try to preprocess conftest.@S|@ac_ext, and return whether this succeeded. -ac_fn_c_try_cpp () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { { ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - as_fn_set_status $ac_retval - -} @%:@ ac_fn_c_try_cpp - -@%:@ ac_fn_c_try_run LINENO -@%:@ ---------------------- -@%:@ Try to link conftest.@S|@ac_ext, and return whether this succeeded. Assumes -@%:@ that executables *can* be run. -ac_fn_c_try_run () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' - { { case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then : - ac_retval=0 -else - $as_echo "$as_me: program exited with status $ac_status" >&5 - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=$ac_status -fi - rm -rf conftest.dSYM conftest_ipa8_conftest.oo - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - as_fn_set_status $ac_retval - -} @%:@ ac_fn_c_try_run - -@%:@ ac_fn_c_check_func LINENO FUNC VAR -@%:@ ---------------------------------- -@%:@ Tests whether FUNC exists, setting the cache variable VAR accordingly -ac_fn_c_check_func () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -/* Define $2 to an innocuous variant, in case declares $2. - For example, HP-UX 11i declares gettimeofday. */ -#define $2 innocuous_$2 - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $2 (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef $2 - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char $2 (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined __stub_$2 || defined __stub___$2 -choke me -#endif - -int -main () -{ -return $2 (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$3=yes" -else - eval "$3=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - -} @%:@ ac_fn_c_check_func - -@%:@ ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES -@%:@ ------------------------------------------------------- -@%:@ Tests whether HEADER exists, giving a warning if it cannot be compiled using -@%:@ the include files in INCLUDES and setting the cache variable VAR -@%:@ accordingly. -ac_fn_c_check_header_mongrel () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : - $as_echo_n "(cached) " >&6 -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -else - # Is the header compilable? -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 -$as_echo_n "checking $2 usability... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -@%:@include <$2> -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_header_compiler=yes -else - ac_header_compiler=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 -$as_echo "$ac_header_compiler" >&6; } - -# Is the header present? -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 -$as_echo_n "checking $2 presence... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -@%:@include <$2> -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - ac_header_preproc=yes -else - ac_header_preproc=no -fi -rm -f conftest.err conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 -$as_echo "$ac_header_preproc" >&6; } - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( - yes:no: ) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 -$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} - ;; - no:yes:* ) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 -$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 -$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 -$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 -$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} - ;; -esac - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : - $as_echo_n "(cached) " >&6 -else - eval "$3=\$ac_header_compiler" -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -fi - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - -} @%:@ ac_fn_c_check_header_mongrel - -@%:@ ac_fn_c_check_type LINENO TYPE VAR INCLUDES -@%:@ ------------------------------------------- -@%:@ Tests whether TYPE exists after having included INCLUDES, setting cache -@%:@ variable VAR accordingly. -ac_fn_c_check_type () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : - $as_echo_n "(cached) " >&6 -else - eval "$3=no" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -if (sizeof ($2)) - return 0; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -if (sizeof (($2))) - return 0; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - -else - eval "$3=yes" -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - -} @%:@ ac_fn_c_check_type -cat >config.log <<_ACEOF -This file contains any messages produced by compilers while -running configure, to aid debugging if configure makes a mistake. - -It was created by $as_me, which was -generated by GNU Autoconf 2.65. Invocation command line was - - $ $0 $@ - -_ACEOF -exec 5>>config.log -{ -cat <<_ASUNAME -## --------- ## -## Platform. ## -## --------- ## - -hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` -uname -m = `(uname -m) 2>/dev/null || echo unknown` -uname -r = `(uname -r) 2>/dev/null || echo unknown` -uname -s = `(uname -s) 2>/dev/null || echo unknown` -uname -v = `(uname -v) 2>/dev/null || echo unknown` - -/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` -/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` - -/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` -/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` -/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` -/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` -/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` -/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` -/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` - -_ASUNAME - -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - $as_echo "PATH: $as_dir" - done -IFS=$as_save_IFS - -} >&5 - -cat >&5 <<_ACEOF - - -## ----------- ## -## Core tests. ## -## ----------- ## - -_ACEOF - - -# Keep a trace of the command line. -# Strip out --no-create and --no-recursion so they do not pile up. -# Strip out --silent because we don't want to record it for future runs. -# Also quote any args containing shell meta-characters. -# Make two passes to allow for proper duplicate-argument suppression. -ac_configure_args= -ac_configure_args0= -ac_configure_args1= -ac_must_keep_next=false -for ac_pass in 1 2 -do - for ac_arg - do - case $ac_arg in - -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil) - continue ;; - *\'*) - ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; - esac - case $ac_pass in - 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; - 2) - as_fn_append ac_configure_args1 " '$ac_arg'" - if test $ac_must_keep_next = true; then - ac_must_keep_next=false # Got value, back to normal. - else - case $ac_arg in - *=* | --config-cache | -C | -disable-* | --disable-* \ - | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ - | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ - | -with-* | --with-* | -without-* | --without-* | --x) - case "$ac_configure_args0 " in - "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; - esac - ;; - -* ) ac_must_keep_next=true ;; - esac - fi - as_fn_append ac_configure_args " '$ac_arg'" - ;; - esac - done -done -{ ac_configure_args0=; unset ac_configure_args0;} -{ ac_configure_args1=; unset ac_configure_args1;} - -# When interrupted or exit'd, cleanup temporary files, and complete -# config.log. We remove comments because anyway the quotes in there -# would cause problems or look ugly. -# WARNING: Use '\'' to represent an apostrophe within the trap. -# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. -trap 'exit_status=$? - # Save into config.log some information that might help in debugging. - { - echo - - cat <<\_ASBOX -## ---------------- ## -## Cache variables. ## -## ---------------- ## -_ASBOX - echo - # The following way of writing the cache mishandles newlines in values, -( - for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do - eval ac_val=\$$ac_var - case $ac_val in #( - *${as_nl}*) - case $ac_var in #( - *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; - esac - case $ac_var in #( - _ | IFS | as_nl) ;; #( - BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( - *) { eval $ac_var=; unset $ac_var;} ;; - esac ;; - esac - done - (set) 2>&1 | - case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( - *${as_nl}ac_space=\ *) - sed -n \ - "s/'\''/'\''\\\\'\'''\''/g; - s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" - ;; #( - *) - sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" - ;; - esac | - sort -) - echo - - cat <<\_ASBOX -## ----------------- ## -## Output variables. ## -## ----------------- ## -_ASBOX - echo - for ac_var in $ac_subst_vars - do - eval ac_val=\$$ac_var - case $ac_val in - *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; - esac - $as_echo "$ac_var='\''$ac_val'\''" - done | sort - echo - - if test -n "$ac_subst_files"; then - cat <<\_ASBOX -## ------------------- ## -## File substitutions. ## -## ------------------- ## -_ASBOX - echo - for ac_var in $ac_subst_files - do - eval ac_val=\$$ac_var - case $ac_val in - *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; - esac - $as_echo "$ac_var='\''$ac_val'\''" - done | sort - echo - fi - - if test -s confdefs.h; then - cat <<\_ASBOX -## ----------- ## -## confdefs.h. ## -## ----------- ## -_ASBOX - echo - cat confdefs.h - echo - fi - test "$ac_signal" != 0 && - $as_echo "$as_me: caught signal $ac_signal" - $as_echo "$as_me: exit $exit_status" - } >&5 - rm -f core *.core core.conftest.* && - rm -f -r conftest* confdefs* conf$$* $ac_clean_files && - exit $exit_status -' 0 -for ac_signal in 1 2 13 15; do - trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal -done -ac_signal=0 - -# confdefs.h avoids OS command line length limits that DEFS can exceed. -rm -f -r conftest* confdefs.h - -$as_echo "/* confdefs.h */" > confdefs.h - -# Predefined preprocessor variables. - -cat >>confdefs.h <<_ACEOF -@%:@define PACKAGE_NAME "$PACKAGE_NAME" -_ACEOF - -cat >>confdefs.h <<_ACEOF -@%:@define PACKAGE_TARNAME "$PACKAGE_TARNAME" -_ACEOF - -cat >>confdefs.h <<_ACEOF -@%:@define PACKAGE_VERSION "$PACKAGE_VERSION" -_ACEOF - -cat >>confdefs.h <<_ACEOF -@%:@define PACKAGE_STRING "$PACKAGE_STRING" -_ACEOF - -cat >>confdefs.h <<_ACEOF -@%:@define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" -_ACEOF - -cat >>confdefs.h <<_ACEOF -@%:@define PACKAGE_URL "$PACKAGE_URL" -_ACEOF - - -# Let the site file select an alternate cache file if it wants to. -# Prefer an explicitly selected file to automatically selected ones. -ac_site_file1=NONE -ac_site_file2=NONE -if test -n "$CONFIG_SITE"; then - ac_site_file1=$CONFIG_SITE -elif test "x$prefix" != xNONE; then - ac_site_file1=$prefix/share/config.site - ac_site_file2=$prefix/etc/config.site -else - ac_site_file1=$ac_default_prefix/share/config.site - ac_site_file2=$ac_default_prefix/etc/config.site -fi -for ac_site_file in "$ac_site_file1" "$ac_site_file2" -do - test "x$ac_site_file" = xNONE && continue - if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 -$as_echo "$as_me: loading site script $ac_site_file" >&6;} - sed 's/^/| /' "$ac_site_file" >&5 - . "$ac_site_file" - fi -done - -if test -r "$cache_file"; then - # Some versions of bash will fail to source /dev/null (special files - # actually), so we avoid doing that. DJGPP emulates it as a regular file. - if test /dev/null != "$cache_file" && test -f "$cache_file"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 -$as_echo "$as_me: loading cache $cache_file" >&6;} - case $cache_file in - [\\/]* | ?:[\\/]* ) . "$cache_file";; - *) . "./$cache_file";; - esac - fi -else - { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 -$as_echo "$as_me: creating cache $cache_file" >&6;} - >$cache_file -fi - -# Check that the precious variables saved in the cache have kept the same -# value. -ac_cache_corrupted=false -for ac_var in $ac_precious_vars; do - eval ac_old_set=\$ac_cv_env_${ac_var}_set - eval ac_new_set=\$ac_env_${ac_var}_set - eval ac_old_val=\$ac_cv_env_${ac_var}_value - eval ac_new_val=\$ac_env_${ac_var}_value - case $ac_old_set,$ac_new_set in - set,) - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 -$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} - ac_cache_corrupted=: ;; - ,set) - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 -$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} - ac_cache_corrupted=: ;; - ,);; - *) - if test "x$ac_old_val" != "x$ac_new_val"; then - # differences in whitespace do not lead to failure. - ac_old_val_w=`echo x $ac_old_val` - ac_new_val_w=`echo x $ac_new_val` - if test "$ac_old_val_w" != "$ac_new_val_w"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 -$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} - ac_cache_corrupted=: - else - { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 -$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} - eval $ac_var=\$ac_old_val - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 -$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 -$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} - fi;; - esac - # Pass precious variables to config.status. - if test "$ac_new_set" = set; then - case $ac_new_val in - *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; - *) ac_arg=$ac_var=$ac_new_val ;; - esac - case " $ac_configure_args " in - *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. - *) as_fn_append ac_configure_args " '$ac_arg'" ;; - esac - fi -done -if $ac_cache_corrupted; then - { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 -$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} - as_fn_error "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 -fi -## -------------------- ## -## Main body of script. ## -## -------------------- ## - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5 -$as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; } - @%:@ Check whether --enable-maintainer-mode was given. -if test "${enable_maintainer_mode+set}" = set; then : - enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval -else - USE_MAINTAINER_MODE=no -fi - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_MAINTAINER_MODE" >&5 -$as_echo "$USE_MAINTAINER_MODE" >&6; } - if test $USE_MAINTAINER_MODE = yes; then - MAINTAINER_MODE_TRUE= - MAINTAINER_MODE_FALSE='#' -else - MAINTAINER_MODE_TRUE='#' - MAINTAINER_MODE_FALSE= -fi - - MAINT=$MAINTAINER_MODE_TRUE - - - - -ac_aux_dir= -for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do - for ac_t in install-sh install.sh shtool; do - if test -f "$ac_dir/$ac_t"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/$ac_t -c" - break 2 - fi - done -done -if test -z "$ac_aux_dir"; then - as_fn_error "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 -fi - -# These three variables are undocumented and unsupported, -# and are intended to be withdrawn in a future Autoconf release. -# They can cause serious problems if a builder's source tree is in a directory -# whose full name contains unusual characters. -ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. -ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. -ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. - - -# Make sure we can run config.sub. -$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || - as_fn_error "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 -$as_echo_n "checking build system type... " >&6; } -if test "${ac_cv_build+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_build_alias=$build_alias -test "x$ac_build_alias" = x && - ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` -test "x$ac_build_alias" = x && - as_fn_error "cannot guess build type; you must specify one" "$LINENO" 5 -ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || - as_fn_error "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 -$as_echo "$ac_cv_build" >&6; } -case $ac_cv_build in -*-*-*) ;; -*) as_fn_error "invalid value of canonical build" "$LINENO" 5;; -esac -build=$ac_cv_build -ac_save_IFS=$IFS; IFS='-' -set x $ac_cv_build -shift -build_cpu=$1 -build_vendor=$2 -shift; shift -# Remember, the first character of IFS is used to create $*, -# except with old shells: -build_os=$* -IFS=$ac_save_IFS -case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 -$as_echo_n "checking host system type... " >&6; } -if test "${ac_cv_host+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test "x$host_alias" = x; then - ac_cv_host=$ac_cv_build -else - ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || - as_fn_error "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 -$as_echo "$ac_cv_host" >&6; } -case $ac_cv_host in -*-*-*) ;; -*) as_fn_error "invalid value of canonical host" "$LINENO" 5;; -esac -host=$ac_cv_host -ac_save_IFS=$IFS; IFS='-' -set x $ac_cv_host -shift -host_cpu=$1 -host_vendor=$2 -shift; shift -# Remember, the first character of IFS is used to create $*, -# except with old shells: -host_os=$* -IFS=$ac_save_IFS -case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking target system type" >&5 -$as_echo_n "checking target system type... " >&6; } -if test "${ac_cv_target+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test "x$target_alias" = x; then - ac_cv_target=$ac_cv_host -else - ac_cv_target=`$SHELL "$ac_aux_dir/config.sub" $target_alias` || - as_fn_error "$SHELL $ac_aux_dir/config.sub $target_alias failed" "$LINENO" 5 -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_target" >&5 -$as_echo "$ac_cv_target" >&6; } -case $ac_cv_target in -*-*-*) ;; -*) as_fn_error "invalid value of canonical target" "$LINENO" 5;; -esac -target=$ac_cv_target -ac_save_IFS=$IFS; IFS='-' -set x $ac_cv_target -shift -target_cpu=$1 -target_vendor=$2 -shift; shift -# Remember, the first character of IFS is used to create $*, -# except with old shells: -target_os=$* -IFS=$ac_save_IFS -case $target_os in *\ *) target_os=`echo "$target_os" | sed 's/ /-/g'`;; esac - - -# The aliases save the names the user supplied, while $host etc. -# will get canonicalized. -test -n "$target_alias" && - test "$program_prefix$program_suffix$program_transform_name" = \ - NONENONEs,x,x, && - program_prefix=${target_alias}- - -case "$target" in - *) - ;; -esac - -am__api_version='1.11' - -# Find a good install program. We prefer a C program (faster), -# so one script is as good as another. But avoid the broken or -# incompatible versions: -# SysV /etc/install, /usr/sbin/install -# SunOS /usr/etc/install -# IRIX /sbin/install -# AIX /bin/install -# AmigaOS /C/install, which installs bootblocks on floppy discs -# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag -# AFS /usr/afsws/bin/install, which mishandles nonexistent args -# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" -# OS/2's system install, which has a completely different semantic -# ./install, which can be erroneously created by make from ./install.sh. -# Reject install programs that cannot install multiple files. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 -$as_echo_n "checking for a BSD-compatible install... " >&6; } -if test -z "$INSTALL"; then -if test "${ac_cv_path_install+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - # Account for people who put trailing slashes in PATH elements. -case $as_dir/ in @%:@(( - ./ | .// | /[cC]/* | \ - /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ - ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ - /usr/ucb/* ) ;; - *) - # OSF1 and SCO ODT 3.0 have their own names for install. - # Don't use installbsd from OSF since it installs stuff as root - # by default. - for ac_prog in ginstall scoinst install; do - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then - if test $ac_prog = install && - grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then - # AIX install. It has an incompatible calling convention. - : - elif test $ac_prog = install && - grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then - # program-specific install script used by HP pwplus--don't use. - : - else - rm -rf conftest.one conftest.two conftest.dir - echo one > conftest.one - echo two > conftest.two - mkdir conftest.dir - if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && - test -s conftest.one && test -s conftest.two && - test -s conftest.dir/conftest.one && - test -s conftest.dir/conftest.two - then - ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" - break 3 - fi - fi - fi - done - done - ;; -esac - - done -IFS=$as_save_IFS - -rm -rf conftest.one conftest.two conftest.dir - -fi - if test "${ac_cv_path_install+set}" = set; then - INSTALL=$ac_cv_path_install - else - # As a last resort, use the slow shell script. Don't cache a - # value for INSTALL within a source directory, because that will - # break other packages using the cache if that directory is - # removed, or if the value is a relative name. - INSTALL=$ac_install_sh - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 -$as_echo "$INSTALL" >&6; } - -# Use test -z because SunOS4 sh mishandles braces in ${var-val}. -# It thinks the first close brace ends the variable substitution. -test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' - -test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' - -test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 -$as_echo_n "checking whether build environment is sane... " >&6; } -# Just in case -sleep 1 -echo timestamp > conftest.file -# Reject unsafe characters in $srcdir or the absolute working directory -# name. Accept space and tab only in the latter. -am_lf=' -' -case `pwd` in - *[\\\"\#\$\&\'\`$am_lf]*) - as_fn_error "unsafe absolute working directory name" "$LINENO" 5;; -esac -case $srcdir in - *[\\\"\#\$\&\'\`$am_lf\ \ ]*) - as_fn_error "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;; -esac - -# Do `set' in a subshell so we don't clobber the current shell's -# arguments. Must try -L first in case configure is actually a -# symlink; some systems play weird games with the mod time of symlinks -# (eg FreeBSD returns the mod time of the symlink's containing -# directory). -if ( - set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` - if test "$*" = "X"; then - # -L didn't work. - set X `ls -t "$srcdir/configure" conftest.file` - fi - rm -f conftest.file - if test "$*" != "X $srcdir/configure conftest.file" \ - && test "$*" != "X conftest.file $srcdir/configure"; then - - # If neither matched, then we have a broken ls. This can happen - # if, for instance, CONFIG_SHELL is bash and it inherits a - # broken ls alias from the environment. This has actually - # happened. Such a system could not be considered "sane". - as_fn_error "ls -t appears to fail. Make sure there is not a broken -alias in your environment" "$LINENO" 5 - fi - - test "$2" = conftest.file - ) -then - # Ok. - : -else - as_fn_error "newly created file is older than distributed files! -Check your system clock" "$LINENO" 5 -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -test "$program_prefix" != NONE && - program_transform_name="s&^&$program_prefix&;$program_transform_name" -# Use a double $ so make ignores it. -test "$program_suffix" != NONE && - program_transform_name="s&\$&$program_suffix&;$program_transform_name" -# Double any \ or $. -# By default was `s,x,x', remove it if useless. -ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' -program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` - -# expand $ac_aux_dir to an absolute path -am_aux_dir=`cd $ac_aux_dir && pwd` - -if test x"${MISSING+set}" != xset; then - case $am_aux_dir in - *\ * | *\ *) - MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; - *) - MISSING="\${SHELL} $am_aux_dir/missing" ;; - esac -fi -# Use eval to expand $SHELL -if eval "$MISSING --run true"; then - am_missing_run="$MISSING --run " -else - am_missing_run= - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5 -$as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} -fi - -if test x"${install_sh}" != xset; then - case $am_aux_dir in - *\ * | *\ *) - install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; - *) - install_sh="\${SHELL} $am_aux_dir/install-sh" - esac -fi - -# Installed binaries are usually stripped using `strip' when the user -# run `make install-strip'. However `strip' might not be the right -# tool to use in cross-compilation environments, therefore Automake -# will honor the `STRIP' environment variable to overrule this program. -if test "$cross_compiling" != no; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. -set dummy ${ac_tool_prefix}strip; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_STRIP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$STRIP"; then - ac_cv_prog_STRIP="$STRIP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_STRIP="${ac_tool_prefix}strip" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -STRIP=$ac_cv_prog_STRIP -if test -n "$STRIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 -$as_echo "$STRIP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_STRIP"; then - ac_ct_STRIP=$STRIP - # Extract the first word of "strip", so it can be a program name with args. -set dummy strip; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_STRIP"; then - ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_STRIP="strip" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP -if test -n "$ac_ct_STRIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 -$as_echo "$ac_ct_STRIP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_STRIP" = x; then - STRIP=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - STRIP=$ac_ct_STRIP - fi -else - STRIP="$ac_cv_prog_STRIP" -fi - -fi -INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 -$as_echo_n "checking for a thread-safe mkdir -p... " >&6; } -if test -z "$MKDIR_P"; then - if test "${ac_cv_path_mkdir+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in mkdir gmkdir; do - for ac_exec_ext in '' $ac_executable_extensions; do - { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue - case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( - 'mkdir (GNU coreutils) '* | \ - 'mkdir (coreutils) '* | \ - 'mkdir (fileutils) '4.1*) - ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext - break 3;; - esac - done - done - done -IFS=$as_save_IFS - -fi - - test -d ./--version && rmdir ./--version - if test "${ac_cv_path_mkdir+set}" = set; then - MKDIR_P="$ac_cv_path_mkdir -p" - else - # As a last resort, use the slow shell script. Don't cache a - # value for MKDIR_P within a source directory, because that will - # break other packages using the cache if that directory is - # removed, or if the value is a relative name. - MKDIR_P="$ac_install_sh -d" - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 -$as_echo "$MKDIR_P" >&6; } - -mkdir_p="$MKDIR_P" -case $mkdir_p in - [\\/$]* | ?:[\\/]*) ;; - */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; -esac - -for ac_prog in gawk mawk nawk awk -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_AWK+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$AWK"; then - ac_cv_prog_AWK="$AWK" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_AWK="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -AWK=$ac_cv_prog_AWK -if test -n "$AWK"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 -$as_echo "$AWK" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$AWK" && break -done - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 -$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } -set x ${MAKE-make} -ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` -if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then : - $as_echo_n "(cached) " >&6 -else - cat >conftest.make <<\_ACEOF -SHELL = /bin/sh -all: - @echo '@@@%%%=$(MAKE)=@@@%%%' -_ACEOF -# GNU make sometimes prints "make[1]: Entering...", which would confuse us. -case `${MAKE-make} -f conftest.make 2>/dev/null` in - *@@@%%%=?*=@@@%%%*) - eval ac_cv_prog_make_${ac_make}_set=yes;; - *) - eval ac_cv_prog_make_${ac_make}_set=no;; -esac -rm -f conftest.make -fi -if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - SET_MAKE= -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - SET_MAKE="MAKE=${MAKE-make}" -fi - -rm -rf .tst 2>/dev/null -mkdir .tst 2>/dev/null -if test -d .tst; then - am__leading_dot=. -else - am__leading_dot=_ -fi -rmdir .tst 2>/dev/null - -if test "`cd $srcdir && pwd`" != "`pwd`"; then - # Use -I$(srcdir) only when $(srcdir) != ., so that make's output - # is not polluted with repeated "-I." - am__isrc=' -I$(srcdir)' - # test to see if srcdir already configured - if test -f $srcdir/config.status; then - as_fn_error "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 - fi -fi - -# test whether we have cygpath -if test -z "$CYGPATH_W"; then - if (cygpath --version) >/dev/null 2>/dev/null; then - CYGPATH_W='cygpath -w' - else - CYGPATH_W=echo - fi -fi - - -# Define the identity of the package. - PACKAGE=radiusclient - VERSION=1.1.6 - - -cat >>confdefs.h <<_ACEOF -@%:@define PACKAGE "$PACKAGE" -_ACEOF - - -cat >>confdefs.h <<_ACEOF -@%:@define VERSION "$VERSION" -_ACEOF - -# Some tools Automake needs. - -ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} - - -AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} - - -AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} - - -AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} - - -MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} - -# We need awk for the "check" target. The system "awk" is bad on -# some platforms. -# Always define AMTAR for backward compatibility. - -AMTAR=${AMTAR-"${am_missing_run}tar"} - -am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -' - - - - - - -LIBVERSION=2:0:0 - - -pkgsysconfdir=${sysconfdir}/$PACKAGE - - -case `pwd` in - *\ * | *\ *) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 -$as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; -esac - - - -macro_version='2.2.6b' -macro_revision='1.3017' - - - - - - - - - - - - - -ltmain="$ac_aux_dir/ltmain.sh" - -DEPDIR="${am__leading_dot}deps" - -ac_config_commands="$ac_config_commands depfiles" - - -am_make=${MAKE-make} -cat > confinc << 'END' -am__doit: - @echo this is the am__doit target -.PHONY: am__doit -END -# If we don't find an include directive, just comment out the code. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 -$as_echo_n "checking for style of include used by $am_make... " >&6; } -am__include="#" -am__quote= -_am_result=none -# First try GNU make style include. -echo "include confinc" > confmf -# Ignore all kinds of additional output from `make'. -case `$am_make -s -f confmf 2> /dev/null` in #( -*the\ am__doit\ target*) - am__include=include - am__quote= - _am_result=GNU - ;; -esac -# Now try BSD make style include. -if test "$am__include" = "#"; then - echo '.include "confinc"' > confmf - case `$am_make -s -f confmf 2> /dev/null` in #( - *the\ am__doit\ target*) - am__include=.include - am__quote="\"" - _am_result=BSD - ;; - esac -fi - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 -$as_echo "$_am_result" >&6; } -rm -f confinc confmf - -@%:@ Check whether --enable-dependency-tracking was given. -if test "${enable_dependency_tracking+set}" = set; then : - enableval=$enable_dependency_tracking; -fi - -if test "x$enable_dependency_tracking" != xno; then - am_depcomp="$ac_aux_dir/depcomp" - AMDEPBACKSLASH='\' -fi - if test "x$enable_dependency_tracking" != xno; then - AMDEP_TRUE= - AMDEP_FALSE='#' -else - AMDEP_TRUE='#' - AMDEP_FALSE= -fi - - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. -set dummy ${ac_tool_prefix}gcc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_CC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_CC="${ac_tool_prefix}gcc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_CC"; then - ac_ct_CC=$CC - # Extract the first word of "gcc", so it can be a program name with args. -set dummy gcc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_CC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_CC="gcc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -$as_echo "$ac_ct_CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_CC" = x; then - CC="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - CC=$ac_ct_CC - fi -else - CC="$ac_cv_prog_CC" -fi - -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. -set dummy ${ac_tool_prefix}cc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_CC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_CC="${ac_tool_prefix}cc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - fi -fi -if test -z "$CC"; then - # Extract the first word of "cc", so it can be a program name with args. -set dummy cc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_CC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else - ac_prog_rejected=no -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then - ac_prog_rejected=yes - continue - fi - ac_cv_prog_CC="cc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -if test $ac_prog_rejected = yes; then - # We found a bogon in the path, so make sure we never use it. - set dummy $ac_cv_prog_CC - shift - if test $@%:@ != 0; then - # We chose a different compiler from the bogus one. - # However, it has the same basename, so the bogon will be chosen - # first if we set CC to just the basename; use the full file name. - shift - ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" - fi -fi -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - for ac_prog in cl.exe - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_CC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_CC="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$CC" && break - done -fi -if test -z "$CC"; then - ac_ct_CC=$CC - for ac_prog in cl.exe -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_CC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_CC="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -$as_echo "$ac_ct_CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$ac_ct_CC" && break -done - - if test "x$ac_ct_CC" = x; then - CC="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - CC=$ac_ct_CC - fi -fi - -fi - - -test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error "no acceptable C compiler found in \$PATH -See \`config.log' for more details." "$LINENO" 5; } - -# Provide some information about the compiler. -$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 -set X $ac_compile -ac_compiler=$2 -for ac_option in --version -v -V -qversion; do - { { ac_try="$ac_compiler $ac_option >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compiler $ac_option >&5") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - sed '10a\ -... rest of stderr output deleted ... - 10q' conftest.err >conftest.er1 - cat conftest.er1 >&5 - fi - rm -f conftest.er1 conftest.err - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } -done - -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -ac_clean_files_save=$ac_clean_files -ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" -# Try to create an executable without -o first, disregard a.out. -# It will help us diagnose broken compilers, and finding out an intuition -# of exeext. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 -$as_echo_n "checking whether the C compiler works... " >&6; } -ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` - -# The possible output files: -ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" - -ac_rmfiles= -for ac_file in $ac_files -do - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; - * ) ac_rmfiles="$ac_rmfiles $ac_file";; - esac -done -rm -f $ac_rmfiles - -if { { ac_try="$ac_link_default" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link_default") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : - # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. -# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' -# in a Makefile. We should not override ac_cv_exeext if it was cached, -# so that the user can short-circuit this test for compilers unknown to -# Autoconf. -for ac_file in $ac_files '' -do - test -f "$ac_file" || continue - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) - ;; - [ab].out ) - # We found the default executable, but exeext='' is most - # certainly right. - break;; - *.* ) - if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; - then :; else - ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` - fi - # We set ac_cv_exeext here because the later test for it is not - # safe: cross compilers may not add the suffix if given an `-o' - # argument, so we may need to know it at that point already. - # Even if this section looks crufty: it has the advantage of - # actually working. - break;; - * ) - break;; - esac -done -test "$ac_cv_exeext" = no && ac_cv_exeext= - -else - ac_file='' -fi -if test -z "$ac_file"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -$as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -{ as_fn_set_status 77 -as_fn_error "C compiler cannot create executables -See \`config.log' for more details." "$LINENO" 5; }; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 -$as_echo_n "checking for C compiler default output file name... " >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 -$as_echo "$ac_file" >&6; } -ac_exeext=$ac_cv_exeext - -rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out -ac_clean_files=$ac_clean_files_save -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 -$as_echo_n "checking for suffix of executables... " >&6; } -if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : - # If both `conftest.exe' and `conftest' are `present' (well, observable) -# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will -# work properly (i.e., refer to `conftest.exe'), while it won't with -# `rm'. -for ac_file in conftest.exe conftest conftest.*; do - test -f "$ac_file" || continue - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; - *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` - break;; - * ) break;; - esac -done -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error "cannot compute suffix of executables: cannot compile and link -See \`config.log' for more details." "$LINENO" 5; } -fi -rm -f conftest conftest$ac_cv_exeext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 -$as_echo "$ac_cv_exeext" >&6; } - -rm -f conftest.$ac_ext -EXEEXT=$ac_cv_exeext -ac_exeext=$EXEEXT -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -@%:@include -int -main () -{ -FILE *f = fopen ("conftest.out", "w"); - return ferror (f) || fclose (f) != 0; - - ; - return 0; -} -_ACEOF -ac_clean_files="$ac_clean_files conftest.out" -# Check that the compiler produces executables we can run. If not, either -# the compiler is broken, or we cross compile. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 -$as_echo_n "checking whether we are cross compiling... " >&6; } -if test "$cross_compiling" != yes; then - { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } - if { ac_try='./conftest$ac_cv_exeext' - { { case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then - cross_compiling=no - else - if test "$cross_compiling" = maybe; then - cross_compiling=yes - else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error "cannot run C compiled programs. -If you meant to cross compile, use \`--host'. -See \`config.log' for more details." "$LINENO" 5; } - fi - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 -$as_echo "$cross_compiling" >&6; } - -rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out -ac_clean_files=$ac_clean_files_save -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 -$as_echo_n "checking for suffix of object files... " >&6; } -if test "${ac_cv_objext+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.o conftest.obj -if { { ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compile") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : - for ac_file in conftest.o conftest.obj conftest.*; do - test -f "$ac_file" || continue; - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; - *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` - break;; - esac -done -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error "cannot compute suffix of object files: cannot compile -See \`config.log' for more details." "$LINENO" 5; } -fi -rm -f conftest.$ac_cv_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 -$as_echo "$ac_cv_objext" >&6; } -OBJEXT=$ac_cv_objext -ac_objext=$OBJEXT -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 -$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } -if test "${ac_cv_c_compiler_gnu+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ -#ifndef __GNUC__ - choke me -#endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_compiler_gnu=yes -else - ac_compiler_gnu=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -ac_cv_c_compiler_gnu=$ac_compiler_gnu - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 -$as_echo "$ac_cv_c_compiler_gnu" >&6; } -if test $ac_compiler_gnu = yes; then - GCC=yes -else - GCC= -fi -ac_test_CFLAGS=${CFLAGS+set} -ac_save_CFLAGS=$CFLAGS -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 -$as_echo_n "checking whether $CC accepts -g... " >&6; } -if test "${ac_cv_prog_cc_g+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_save_c_werror_flag=$ac_c_werror_flag - ac_c_werror_flag=yes - ac_cv_prog_cc_g=no - CFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_g=yes -else - CFLAGS="" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - -else - ac_c_werror_flag=$ac_save_c_werror_flag - CFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_g=yes -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_c_werror_flag=$ac_save_c_werror_flag -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 -$as_echo "$ac_cv_prog_cc_g" >&6; } -if test "$ac_test_CFLAGS" = set; then - CFLAGS=$ac_save_CFLAGS -elif test $ac_cv_prog_cc_g = yes; then - if test "$GCC" = yes; then - CFLAGS="-g -O2" - else - CFLAGS="-g" - fi -else - if test "$GCC" = yes; then - CFLAGS="-O2" - else - CFLAGS= - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 -$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } -if test "${ac_cv_prog_cc_c89+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_cv_prog_cc_c89=no -ac_save_CC=$CC -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#include -#include -/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ -struct buf { int x; }; -FILE * (*rcsopen) (struct buf *, struct stat *, int); -static char *e (p, i) - char **p; - int i; -{ - return p[i]; -} -static char *f (char * (*g) (char **, int), char **p, ...) -{ - char *s; - va_list v; - va_start (v,p); - s = g (p, va_arg (v,int)); - va_end (v); - return s; -} - -/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has - function prototypes and stuff, but not '\xHH' hex character constants. - These don't provoke an error unfortunately, instead are silently treated - as 'x'. The following induces an error, until -std is added to get - proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an - array size at least. It's necessary to write '\x00'==0 to get something - that's true only with -std. */ -int osf4_cc_array ['\x00' == 0 ? 1 : -1]; - -/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters - inside strings and character constants. */ -#define FOO(x) 'x' -int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; - -int test (int i, double x); -struct s1 {int (*f) (int a);}; -struct s2 {int (*f) (double a);}; -int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); -int argc; -char **argv; -int -main () -{ -return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; - ; - return 0; -} -_ACEOF -for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ - -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" -do - CC="$ac_save_CC $ac_arg" - if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_c89=$ac_arg -fi -rm -f core conftest.err conftest.$ac_objext - test "x$ac_cv_prog_cc_c89" != "xno" && break -done -rm -f conftest.$ac_ext -CC=$ac_save_CC - -fi -# AC_CACHE_VAL -case "x$ac_cv_prog_cc_c89" in - x) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -$as_echo "none needed" >&6; } ;; - xno) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 -$as_echo "unsupported" >&6; } ;; - *) - CC="$CC $ac_cv_prog_cc_c89" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 -$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; -esac -if test "x$ac_cv_prog_cc_c89" != xno; then : - -fi - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -depcc="$CC" am_compiler_list= - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 -$as_echo_n "checking dependency style of $depcc... " >&6; } -if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then - # We make a subdir and do the tests there. Otherwise we can end up - # making bogus files that we don't know about and never remove. For - # instance it was reported that on HP-UX the gcc test will end up - # making a dummy file named `D' -- because `-MD' means `put the output - # in D'. - mkdir conftest.dir - # Copy depcomp to subdir because otherwise we won't find it if we're - # using a relative directory. - cp "$am_depcomp" conftest.dir - cd conftest.dir - # We will build objects and dependencies in a subdirectory because - # it helps to detect inapplicable dependency modes. For instance - # both Tru64's cc and ICC support -MD to output dependencies as a - # side effect of compilation, but ICC will put the dependencies in - # the current directory while Tru64 will put them in the object - # directory. - mkdir sub - - am_cv_CC_dependencies_compiler_type=none - if test "$am_compiler_list" = ""; then - am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` - fi - am__universal=false - case " $depcc " in #( - *\ -arch\ *\ -arch\ *) am__universal=true ;; - esac - - for depmode in $am_compiler_list; do - # Setup a source with many dependencies, because some compilers - # like to wrap large dependency lists on column 80 (with \), and - # we should not choose a depcomp mode which is confused by this. - # - # We need to recreate these files for each test, as the compiler may - # overwrite some of them when testing with obscure command lines. - # This happens at least with the AIX C compiler. - : > sub/conftest.c - for i in 1 2 3 4 5 6; do - echo '#include "conftst'$i'.h"' >> sub/conftest.c - # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with - # Solaris 8's {/usr,}/bin/sh. - touch sub/conftst$i.h - done - echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf - - # We check with `-c' and `-o' for the sake of the "dashmstdout" - # mode. It turns out that the SunPro C++ compiler does not properly - # handle `-M -o', and we need to detect this. Also, some Intel - # versions had trouble with output in subdirs - am__obj=sub/conftest.${OBJEXT-o} - am__minus_obj="-o $am__obj" - case $depmode in - gcc) - # This depmode causes a compiler race in universal mode. - test "$am__universal" = false || continue - ;; - nosideeffect) - # after this tag, mechanisms are not by side-effect, so they'll - # only be used when explicitly requested - if test "x$enable_dependency_tracking" = xyes; then - continue - else - break - fi - ;; - msvisualcpp | msvcmsys) - # This compiler won't grok `-c -o', but also, the minuso test has - # not run yet. These depmodes are late enough in the game, and - # so weak that their functioning should not be impacted. - am__obj=conftest.${OBJEXT-o} - am__minus_obj= - ;; - none) break ;; - esac - if depmode=$depmode \ - source=sub/conftest.c object=$am__obj \ - depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ - $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ - >/dev/null 2>conftest.err && - grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && - grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && - grep $am__obj sub/conftest.Po > /dev/null 2>&1 && - ${MAKE-make} -s -f confmf > /dev/null 2>&1; then - # icc doesn't choke on unknown options, it will just issue warnings - # or remarks (even with -Werror). So we grep stderr for any message - # that says an option was ignored or not supported. - # When given -MP, icc 7.0 and 7.1 complain thusly: - # icc: Command line warning: ignoring option '-M'; no argument required - # The diagnosis changed in icc 8.0: - # icc: Command line remark: option '-MP' not supported - if (grep 'ignoring option' conftest.err || - grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else - am_cv_CC_dependencies_compiler_type=$depmode - break - fi - fi - done - - cd .. - rm -rf conftest.dir -else - am_cv_CC_dependencies_compiler_type=none -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 -$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } -CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type - - if - test "x$enable_dependency_tracking" != xno \ - && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then - am__fastdepCC_TRUE= - am__fastdepCC_FALSE='#' -else - am__fastdepCC_TRUE='#' - am__fastdepCC_FALSE= -fi - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 -$as_echo_n "checking for a sed that does not truncate output... " >&6; } -if test "${ac_cv_path_SED+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ - for ac_i in 1 2 3 4 5 6 7; do - ac_script="$ac_script$as_nl$ac_script" - done - echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed - { ac_script=; unset ac_script;} - if test -z "$SED"; then - ac_path_SED_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in sed gsed; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" - { test -f "$ac_path_SED" && $as_test_x "$ac_path_SED"; } || continue -# Check for GNU ac_path_SED and select it if it is found. - # Check for GNU $ac_path_SED -case `"$ac_path_SED" --version 2>&1` in -*GNU*) - ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo '' >> "conftest.nl" - "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_SED_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_SED="$ac_path_SED" - ac_path_SED_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_SED_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_SED"; then - as_fn_error "no acceptable sed could be found in \$PATH" "$LINENO" 5 - fi -else - ac_cv_path_SED=$SED -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 -$as_echo "$ac_cv_path_SED" >&6; } - SED="$ac_cv_path_SED" - rm -f conftest.sed - -test -z "$SED" && SED=sed -Xsed="$SED -e 1s/^X//" - - - - - - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 -$as_echo_n "checking for grep that handles long lines and -e... " >&6; } -if test "${ac_cv_path_GREP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -z "$GREP"; then - ac_path_GREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in grep ggrep; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" - { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue -# Check for GNU ac_path_GREP and select it if it is found. - # Check for GNU $ac_path_GREP -case `"$ac_path_GREP" --version 2>&1` in -*GNU*) - ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo 'GREP' >> "conftest.nl" - "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_GREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_GREP="$ac_path_GREP" - ac_path_GREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_GREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_GREP"; then - as_fn_error "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi -else - ac_cv_path_GREP=$GREP -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 -$as_echo "$ac_cv_path_GREP" >&6; } - GREP="$ac_cv_path_GREP" - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 -$as_echo_n "checking for egrep... " >&6; } -if test "${ac_cv_path_EGREP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 - then ac_cv_path_EGREP="$GREP -E" - else - if test -z "$EGREP"; then - ac_path_EGREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in egrep; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" - { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue -# Check for GNU ac_path_EGREP and select it if it is found. - # Check for GNU $ac_path_EGREP -case `"$ac_path_EGREP" --version 2>&1` in -*GNU*) - ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo 'EGREP' >> "conftest.nl" - "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_EGREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_EGREP="$ac_path_EGREP" - ac_path_EGREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_EGREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_EGREP"; then - as_fn_error "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi -else - ac_cv_path_EGREP=$EGREP -fi - - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 -$as_echo "$ac_cv_path_EGREP" >&6; } - EGREP="$ac_cv_path_EGREP" - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 -$as_echo_n "checking for fgrep... " >&6; } -if test "${ac_cv_path_FGREP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 - then ac_cv_path_FGREP="$GREP -F" - else - if test -z "$FGREP"; then - ac_path_FGREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in fgrep; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" - { test -f "$ac_path_FGREP" && $as_test_x "$ac_path_FGREP"; } || continue -# Check for GNU ac_path_FGREP and select it if it is found. - # Check for GNU $ac_path_FGREP -case `"$ac_path_FGREP" --version 2>&1` in -*GNU*) - ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo 'FGREP' >> "conftest.nl" - "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_FGREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_FGREP="$ac_path_FGREP" - ac_path_FGREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_FGREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_FGREP"; then - as_fn_error "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi -else - ac_cv_path_FGREP=$FGREP -fi - - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 -$as_echo "$ac_cv_path_FGREP" >&6; } - FGREP="$ac_cv_path_FGREP" - - -test -z "$GREP" && GREP=grep - - - - - - - - - - - - - - - - - - - -@%:@ Check whether --with-gnu-ld was given. -if test "${with_gnu_ld+set}" = set; then : - withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes -else - with_gnu_ld=no -fi - -ac_prog=ld -if test "$GCC" = yes; then - # Check if gcc -print-prog-name=ld gives a path. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 -$as_echo_n "checking for ld used by $CC... " >&6; } - case $host in - *-*-mingw*) - # gcc leaves a trailing carriage return which upsets mingw - ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; - *) - ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; - esac - case $ac_prog in - # Accept absolute paths. - [\\/]* | ?:[\\/]*) - re_direlt='/[^/][^/]*/\.\./' - # Canonicalize the pathname of ld - ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` - while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do - ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` - done - test -z "$LD" && LD="$ac_prog" - ;; - "") - # If it fails, then pretend we aren't using GCC. - ac_prog=ld - ;; - *) - # If it is relative, then search for the first ld in PATH. - with_gnu_ld=unknown - ;; - esac -elif test "$with_gnu_ld" = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 -$as_echo_n "checking for GNU ld... " >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 -$as_echo_n "checking for non-GNU ld... " >&6; } -fi -if test "${lt_cv_path_LD+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -z "$LD"; then - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for ac_dir in $PATH; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then - lt_cv_path_LD="$ac_dir/$ac_prog" - # Check to see if the program is GNU ld. I'd rather use --version, - # but apparently some variants of GNU ld only accept -v. - # Break only if it was the GNU/non-GNU ld that we prefer. - case `"$lt_cv_path_LD" -v 2>&1 &5 -$as_echo "$LD" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi -test -z "$LD" && as_fn_error "no acceptable ld found in \$PATH" "$LINENO" 5 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 -$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } -if test "${lt_cv_prog_gnu_ld+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - # I'd rather use --version here, but apparently some GNU lds only accept -v. -case `$LD -v 2>&1 &5 -$as_echo "$lt_cv_prog_gnu_ld" >&6; } -with_gnu_ld=$lt_cv_prog_gnu_ld - - - - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 -$as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } -if test "${lt_cv_path_NM+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$NM"; then - # Let the user override the test. - lt_cv_path_NM="$NM" -else - lt_nm_to_check="${ac_tool_prefix}nm" - if test -n "$ac_tool_prefix" && test "$build" = "$host"; then - lt_nm_to_check="$lt_nm_to_check nm" - fi - for lt_tmp_nm in $lt_nm_to_check; do - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - tmp_nm="$ac_dir/$lt_tmp_nm" - if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then - # Check to see if the nm accepts a BSD-compat flag. - # Adding the `sed 1q' prevents false positives on HP-UX, which says: - # nm: unknown option "B" ignored - # Tru64's nm complains that /dev/null is an invalid object file - case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in - */dev/null* | *'Invalid file or object type'*) - lt_cv_path_NM="$tmp_nm -B" - break - ;; - *) - case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in - */dev/null*) - lt_cv_path_NM="$tmp_nm -p" - break - ;; - *) - lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but - continue # so that we can try to find one that supports BSD flags - ;; - esac - ;; - esac - fi - done - IFS="$lt_save_ifs" - done - : ${lt_cv_path_NM=no} -fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 -$as_echo "$lt_cv_path_NM" >&6; } -if test "$lt_cv_path_NM" != "no"; then - NM="$lt_cv_path_NM" -else - # Didn't find any BSD compatible name lister, look for dumpbin. - if test -n "$ac_tool_prefix"; then - for ac_prog in "dumpbin -symbols" "link -dump -symbols" - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_DUMPBIN+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$DUMPBIN"; then - ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -DUMPBIN=$ac_cv_prog_DUMPBIN -if test -n "$DUMPBIN"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 -$as_echo "$DUMPBIN" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$DUMPBIN" && break - done -fi -if test -z "$DUMPBIN"; then - ac_ct_DUMPBIN=$DUMPBIN - for ac_prog in "dumpbin -symbols" "link -dump -symbols" -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_DUMPBIN+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_DUMPBIN"; then - ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN -if test -n "$ac_ct_DUMPBIN"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 -$as_echo "$ac_ct_DUMPBIN" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$ac_ct_DUMPBIN" && break -done - - if test "x$ac_ct_DUMPBIN" = x; then - DUMPBIN=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - DUMPBIN=$ac_ct_DUMPBIN - fi -fi - - - if test "$DUMPBIN" != ":"; then - NM="$DUMPBIN" - fi -fi -test -z "$NM" && NM=nm - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 -$as_echo_n "checking the name lister ($NM) interface... " >&6; } -if test "${lt_cv_nm_interface+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_nm_interface="BSD nm" - echo "int some_variable = 0;" > conftest.$ac_ext - (eval echo "\"\$as_me:__oline__: $ac_compile\"" >&5) - (eval "$ac_compile" 2>conftest.err) - cat conftest.err >&5 - (eval echo "\"\$as_me:__oline__: $NM \\\"conftest.$ac_objext\\\"\"" >&5) - (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) - cat conftest.err >&5 - (eval echo "\"\$as_me:__oline__: output\"" >&5) - cat conftest.out >&5 - if $GREP 'External.*some_variable' conftest.out > /dev/null; then - lt_cv_nm_interface="MS dumpbin" - fi - rm -f conftest* -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 -$as_echo "$lt_cv_nm_interface" >&6; } - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 -$as_echo_n "checking whether ln -s works... " >&6; } -LN_S=$as_ln_s -if test "$LN_S" = "ln -s"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 -$as_echo "no, using $LN_S" >&6; } -fi - -# find the maximum length of command line arguments -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 -$as_echo_n "checking the maximum length of command line arguments... " >&6; } -if test "${lt_cv_sys_max_cmd_len+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - i=0 - teststring="ABCD" - - case $build_os in - msdosdjgpp*) - # On DJGPP, this test can blow up pretty badly due to problems in libc - # (any single argument exceeding 2000 bytes causes a buffer overrun - # during glob expansion). Even if it were fixed, the result of this - # check would be larger than it should be. - lt_cv_sys_max_cmd_len=12288; # 12K is about right - ;; - - gnu*) - # Under GNU Hurd, this test is not required because there is - # no limit to the length of command line arguments. - # Libtool will interpret -1 as no limit whatsoever - lt_cv_sys_max_cmd_len=-1; - ;; - - cygwin* | mingw* | cegcc*) - # On Win9x/ME, this test blows up -- it succeeds, but takes - # about 5 minutes as the teststring grows exponentially. - # Worse, since 9x/ME are not pre-emptively multitasking, - # you end up with a "frozen" computer, even though with patience - # the test eventually succeeds (with a max line length of 256k). - # Instead, let's just punt: use the minimum linelength reported by - # all of the supported platforms: 8192 (on NT/2K/XP). - lt_cv_sys_max_cmd_len=8192; - ;; - - amigaos*) - # On AmigaOS with pdksh, this test takes hours, literally. - # So we just punt and use a minimum line length of 8192. - lt_cv_sys_max_cmd_len=8192; - ;; - - netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) - # This has been around since 386BSD, at least. Likely further. - if test -x /sbin/sysctl; then - lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` - elif test -x /usr/sbin/sysctl; then - lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` - else - lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs - fi - # And add a safety zone - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` - ;; - - interix*) - # We know the value 262144 and hardcode it with a safety zone (like BSD) - lt_cv_sys_max_cmd_len=196608 - ;; - - osf*) - # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure - # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not - # nice to cause kernel panics so lets avoid the loop below. - # First set a reasonable default. - lt_cv_sys_max_cmd_len=16384 - # - if test -x /sbin/sysconfig; then - case `/sbin/sysconfig -q proc exec_disable_arg_limit` in - *1*) lt_cv_sys_max_cmd_len=-1 ;; - esac - fi - ;; - sco3.2v5*) - lt_cv_sys_max_cmd_len=102400 - ;; - sysv5* | sco5v6* | sysv4.2uw2*) - kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` - if test -n "$kargmax"; then - lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` - else - lt_cv_sys_max_cmd_len=32768 - fi - ;; - *) - lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` - if test -n "$lt_cv_sys_max_cmd_len"; then - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` - else - # Make teststring a little bigger before we do anything with it. - # a 1K string should be a reasonable start. - for i in 1 2 3 4 5 6 7 8 ; do - teststring=$teststring$teststring - done - SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} - # If test is not a shell built-in, we'll probably end up computing a - # maximum length that is only half of the actual maximum length, but - # we can't tell. - while { test "X"`$SHELL $0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \ - = "XX$teststring$teststring"; } >/dev/null 2>&1 && - test $i != 17 # 1/2 MB should be enough - do - i=`expr $i + 1` - teststring=$teststring$teststring - done - # Only check the string length outside the loop. - lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` - teststring= - # Add a significant safety factor because C++ compilers can tack on - # massive amounts of additional arguments before passing them to the - # linker. It appears as though 1/2 is a usable value. - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` - fi - ;; - esac - -fi - -if test -n $lt_cv_sys_max_cmd_len ; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 -$as_echo "$lt_cv_sys_max_cmd_len" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 -$as_echo "none" >&6; } -fi -max_cmd_len=$lt_cv_sys_max_cmd_len - - - - - - -: ${CP="cp -f"} -: ${MV="mv -f"} -: ${RM="rm -f"} - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands some XSI constructs" >&5 -$as_echo_n "checking whether the shell understands some XSI constructs... " >&6; } -# Try some XSI features -xsi_shell=no -( _lt_dummy="a/b/c" - test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \ - = c,a/b,, \ - && eval 'test $(( 1 + 1 )) -eq 2 \ - && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ - && xsi_shell=yes -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $xsi_shell" >&5 -$as_echo "$xsi_shell" >&6; } - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands \"+=\"" >&5 -$as_echo_n "checking whether the shell understands \"+=\"... " >&6; } -lt_shell_append=no -( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \ - >/dev/null 2>&1 \ - && lt_shell_append=yes -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_shell_append" >&5 -$as_echo "$lt_shell_append" >&6; } - - -if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then - lt_unset=unset -else - lt_unset=false -fi - - - - - -# test EBCDIC or ASCII -case `echo X|tr X '\101'` in - A) # ASCII based system - # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr - lt_SP2NL='tr \040 \012' - lt_NL2SP='tr \015\012 \040\040' - ;; - *) # EBCDIC based system - lt_SP2NL='tr \100 \n' - lt_NL2SP='tr \r\n \100\100' - ;; -esac - - - - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 -$as_echo_n "checking for $LD option to reload object files... " >&6; } -if test "${lt_cv_ld_reload_flag+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_ld_reload_flag='-r' -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 -$as_echo "$lt_cv_ld_reload_flag" >&6; } -reload_flag=$lt_cv_ld_reload_flag -case $reload_flag in -"" | " "*) ;; -*) reload_flag=" $reload_flag" ;; -esac -reload_cmds='$LD$reload_flag -o $output$reload_objs' -case $host_os in - darwin*) - if test "$GCC" = yes; then - reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs' - else - reload_cmds='$LD$reload_flag -o $output$reload_objs' - fi - ;; -esac - - - - - - - - - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. -set dummy ${ac_tool_prefix}objdump; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_OBJDUMP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$OBJDUMP"; then - ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -OBJDUMP=$ac_cv_prog_OBJDUMP -if test -n "$OBJDUMP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 -$as_echo "$OBJDUMP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_OBJDUMP"; then - ac_ct_OBJDUMP=$OBJDUMP - # Extract the first word of "objdump", so it can be a program name with args. -set dummy objdump; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_OBJDUMP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_OBJDUMP"; then - ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_OBJDUMP="objdump" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP -if test -n "$ac_ct_OBJDUMP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 -$as_echo "$ac_ct_OBJDUMP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_OBJDUMP" = x; then - OBJDUMP="false" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - OBJDUMP=$ac_ct_OBJDUMP - fi -else - OBJDUMP="$ac_cv_prog_OBJDUMP" -fi - -test -z "$OBJDUMP" && OBJDUMP=objdump - - - - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 -$as_echo_n "checking how to recognize dependent libraries... " >&6; } -if test "${lt_cv_deplibs_check_method+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_file_magic_cmd='$MAGIC_CMD' -lt_cv_file_magic_test_file= -lt_cv_deplibs_check_method='unknown' -# Need to set the preceding variable on all platforms that support -# interlibrary dependencies. -# 'none' -- dependencies not supported. -# `unknown' -- same as none, but documents that we really don't know. -# 'pass_all' -- all dependencies passed with no checks. -# 'test_compile' -- check by making test program. -# 'file_magic [[regex]]' -- check by looking for files in library path -# which responds to the $file_magic_cmd with a given extended regex. -# If you have `file' or equivalent on your system and you're not sure -# whether `pass_all' will *always* work, you probably want this one. - -case $host_os in -aix[4-9]*) - lt_cv_deplibs_check_method=pass_all - ;; - -beos*) - lt_cv_deplibs_check_method=pass_all - ;; - -bsdi[45]*) - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' - lt_cv_file_magic_cmd='/usr/bin/file -L' - lt_cv_file_magic_test_file=/shlib/libc.so - ;; - -cygwin*) - # func_win32_libid is a shell function defined in ltmain.sh - lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' - lt_cv_file_magic_cmd='func_win32_libid' - ;; - -mingw* | pw32*) - # Base MSYS/MinGW do not provide the 'file' command needed by - # func_win32_libid shell function, so use a weaker test based on 'objdump', - # unless we find 'file', for example because we are cross-compiling. - if ( file / ) >/dev/null 2>&1; then - lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' - lt_cv_file_magic_cmd='func_win32_libid' - else - lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?' - lt_cv_file_magic_cmd='$OBJDUMP -f' - fi - ;; - -cegcc) - # use the weaker test based on 'objdump'. See mingw*. - lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' - lt_cv_file_magic_cmd='$OBJDUMP -f' - ;; - -darwin* | rhapsody*) - lt_cv_deplibs_check_method=pass_all - ;; - -freebsd* | dragonfly*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then - case $host_cpu in - i*86 ) - # Not sure whether the presence of OpenBSD here was a mistake. - # Let's accept both of them until this is cleared up. - lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' - lt_cv_file_magic_cmd=/usr/bin/file - lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` - ;; - esac - else - lt_cv_deplibs_check_method=pass_all - fi - ;; - -gnu*) - lt_cv_deplibs_check_method=pass_all - ;; - -hpux10.20* | hpux11*) - lt_cv_file_magic_cmd=/usr/bin/file - case $host_cpu in - ia64*) - lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' - lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so - ;; - hppa*64*) - lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]' - lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl - ;; - *) - lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library' - lt_cv_file_magic_test_file=/usr/lib/libc.sl - ;; - esac - ;; - -interix[3-9]*) - # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' - ;; - -irix5* | irix6* | nonstopux*) - case $LD in - *-32|*"-32 ") libmagic=32-bit;; - *-n32|*"-n32 ") libmagic=N32;; - *-64|*"-64 ") libmagic=64-bit;; - *) libmagic=never-match;; - esac - lt_cv_deplibs_check_method=pass_all - ;; - -# This must be Linux ELF. -linux* | k*bsd*-gnu | kopensolaris*-gnu) - lt_cv_deplibs_check_method=pass_all - ;; - -netbsd* | netbsdelf*-gnu) - if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' - else - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' - fi - ;; - -newos6*) - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' - lt_cv_file_magic_cmd=/usr/bin/file - lt_cv_file_magic_test_file=/usr/lib/libnls.so - ;; - -*nto* | *qnx*) - lt_cv_deplibs_check_method=pass_all - ;; - -openbsd*) - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' - else - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' - fi - ;; - -osf3* | osf4* | osf5*) - lt_cv_deplibs_check_method=pass_all - ;; - -rdos*) - lt_cv_deplibs_check_method=pass_all - ;; - -solaris*) - lt_cv_deplibs_check_method=pass_all - ;; - -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - lt_cv_deplibs_check_method=pass_all - ;; - -sysv4 | sysv4.3*) - case $host_vendor in - motorola) - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' - lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` - ;; - ncr) - lt_cv_deplibs_check_method=pass_all - ;; - sequent) - lt_cv_file_magic_cmd='/bin/file' - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' - ;; - sni) - lt_cv_file_magic_cmd='/bin/file' - lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" - lt_cv_file_magic_test_file=/lib/libc.so - ;; - siemens) - lt_cv_deplibs_check_method=pass_all - ;; - pc) - lt_cv_deplibs_check_method=pass_all - ;; - esac - ;; - -tpf*) - lt_cv_deplibs_check_method=pass_all - ;; -esac - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 -$as_echo "$lt_cv_deplibs_check_method" >&6; } -file_magic_cmd=$lt_cv_file_magic_cmd -deplibs_check_method=$lt_cv_deplibs_check_method -test -z "$deplibs_check_method" && deplibs_check_method=unknown - - - - - - - - - - - - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. -set dummy ${ac_tool_prefix}ar; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_AR+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$AR"; then - ac_cv_prog_AR="$AR" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_AR="${ac_tool_prefix}ar" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -AR=$ac_cv_prog_AR -if test -n "$AR"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 -$as_echo "$AR" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_AR"; then - ac_ct_AR=$AR - # Extract the first word of "ar", so it can be a program name with args. -set dummy ar; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_AR+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_AR"; then - ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_AR="ar" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_AR=$ac_cv_prog_ac_ct_AR -if test -n "$ac_ct_AR"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 -$as_echo "$ac_ct_AR" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_AR" = x; then - AR="false" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - AR=$ac_ct_AR - fi -else - AR="$ac_cv_prog_AR" -fi - -test -z "$AR" && AR=ar -test -z "$AR_FLAGS" && AR_FLAGS=cru - - - - - - - - - - - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. -set dummy ${ac_tool_prefix}strip; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_STRIP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$STRIP"; then - ac_cv_prog_STRIP="$STRIP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_STRIP="${ac_tool_prefix}strip" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -STRIP=$ac_cv_prog_STRIP -if test -n "$STRIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 -$as_echo "$STRIP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_STRIP"; then - ac_ct_STRIP=$STRIP - # Extract the first word of "strip", so it can be a program name with args. -set dummy strip; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_STRIP"; then - ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_STRIP="strip" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP -if test -n "$ac_ct_STRIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 -$as_echo "$ac_ct_STRIP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_STRIP" = x; then - STRIP=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - STRIP=$ac_ct_STRIP - fi -else - STRIP="$ac_cv_prog_STRIP" -fi - -test -z "$STRIP" && STRIP=: - - - - - - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. -set dummy ${ac_tool_prefix}ranlib; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_RANLIB+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$RANLIB"; then - ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -RANLIB=$ac_cv_prog_RANLIB -if test -n "$RANLIB"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 -$as_echo "$RANLIB" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_RANLIB"; then - ac_ct_RANLIB=$RANLIB - # Extract the first word of "ranlib", so it can be a program name with args. -set dummy ranlib; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_RANLIB"; then - ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_RANLIB="ranlib" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB -if test -n "$ac_ct_RANLIB"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 -$as_echo "$ac_ct_RANLIB" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_RANLIB" = x; then - RANLIB=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - RANLIB=$ac_ct_RANLIB - fi -else - RANLIB="$ac_cv_prog_RANLIB" -fi - -test -z "$RANLIB" && RANLIB=: - - - - - - -# Determine commands to create old-style static archives. -old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' -old_postinstall_cmds='chmod 644 $oldlib' -old_postuninstall_cmds= - -if test -n "$RANLIB"; then - case $host_os in - openbsd*) - old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib" - ;; - *) - old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib" - ;; - esac - old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" -fi - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -# If no C compiler was specified, use CC. -LTCC=${LTCC-"$CC"} - -# If no C compiler flags were specified, use CFLAGS. -LTCFLAGS=${LTCFLAGS-"$CFLAGS"} - -# Allow CC to be a program name with arguments. -compiler=$CC - - -# Check for command to grab the raw symbol name followed by C symbol from nm. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 -$as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } -if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - -# These are sane defaults that work on at least a few old systems. -# [They come from Ultrix. What could be older than Ultrix?!! ;)] - -# Character class describing NM global symbol codes. -symcode='[BCDEGRST]' - -# Regexp to match symbols that can be accessed directly from C. -sympat='\([_A-Za-z][_A-Za-z0-9]*\)' - -# Define system-specific variables. -case $host_os in -aix*) - symcode='[BCDT]' - ;; -cygwin* | mingw* | pw32* | cegcc*) - symcode='[ABCDGISTW]' - ;; -hpux*) - if test "$host_cpu" = ia64; then - symcode='[ABCDEGRST]' - fi - ;; -irix* | nonstopux*) - symcode='[BCDEGRST]' - ;; -osf*) - symcode='[BCDEGQRST]' - ;; -solaris*) - symcode='[BDRT]' - ;; -sco3.2v5*) - symcode='[DT]' - ;; -sysv4.2uw2*) - symcode='[DT]' - ;; -sysv5* | sco5v6* | unixware* | OpenUNIX*) - symcode='[ABDT]' - ;; -sysv4) - symcode='[DFNSTU]' - ;; -esac - -# If we're using GNU nm, then use its standard symbol codes. -case `$NM -V 2>&1` in -*GNU* | *'with BFD'*) - symcode='[ABCDGIRSTW]' ;; -esac - -# Transform an extracted symbol line into a proper C declaration. -# Some systems (esp. on ia64) link data and code symbols differently, -# so use this general approach. -lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" - -# Transform an extracted symbol line into symbol name and symbol address -lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'" -lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'" - -# Handle CRLF in mingw tool chain -opt_cr= -case $build_os in -mingw*) - opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp - ;; -esac - -# Try without a prefix underscore, then with it. -for ac_symprfx in "" "_"; do - - # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. - symxfrm="\\1 $ac_symprfx\\2 \\2" - - # Write the raw and C identifiers. - if test "$lt_cv_nm_interface" = "MS dumpbin"; then - # Fake it for dumpbin and say T for any non-static function - # and D for any global variable. - # Also find C++ and __fastcall symbols from MSVC++, - # which start with @ or ?. - lt_cv_sys_global_symbol_pipe="$AWK '"\ -" {last_section=section; section=\$ 3};"\ -" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ -" \$ 0!~/External *\|/{next};"\ -" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ -" {if(hide[section]) next};"\ -" {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ -" {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ -" s[1]~/^[@?]/{print s[1], s[1]; next};"\ -" s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ -" ' prfx=^$ac_symprfx" - else - lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" - fi - - # Check to see that the pipe works correctly. - pipe_works=no - - rm -f conftest* - cat > conftest.$ac_ext <<_LT_EOF -#ifdef __cplusplus -extern "C" { -#endif -char nm_test_var; -void nm_test_func(void); -void nm_test_func(void){} -#ifdef __cplusplus -} -#endif -int main(){nm_test_var='a';nm_test_func();return(0);} -_LT_EOF - - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - # Now try to grab the symbols. - nlist=conftest.nm - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\""; } >&5 - (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && test -s "$nlist"; then - # Try sorting and uniquifying the output. - if sort "$nlist" | uniq > "$nlist"T; then - mv -f "$nlist"T "$nlist" - else - rm -f "$nlist"T - fi - - # Make sure that we snagged all the symbols we need. - if $GREP ' nm_test_var$' "$nlist" >/dev/null; then - if $GREP ' nm_test_func$' "$nlist" >/dev/null; then - cat <<_LT_EOF > conftest.$ac_ext -#ifdef __cplusplus -extern "C" { -#endif - -_LT_EOF - # Now generate the symbol file. - eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' - - cat <<_LT_EOF >> conftest.$ac_ext - -/* The mapping between symbol names and symbols. */ -const struct { - const char *name; - void *address; -} -lt__PROGRAM__LTX_preloaded_symbols[] = -{ - { "@PROGRAM@", (void *) 0 }, -_LT_EOF - $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext - cat <<\_LT_EOF >> conftest.$ac_ext - {0, (void *) 0} -}; - -/* This works around a problem in FreeBSD linker */ -#ifdef FREEBSD_WORKAROUND -static const void *lt_preloaded_setup() { - return lt__PROGRAM__LTX_preloaded_symbols; -} -#endif - -#ifdef __cplusplus -} -#endif -_LT_EOF - # Now try linking the two files. - mv conftest.$ac_objext conftstm.$ac_objext - lt_save_LIBS="$LIBS" - lt_save_CFLAGS="$CFLAGS" - LIBS="conftstm.$ac_objext" - CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 - (eval $ac_link) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && test -s conftest${ac_exeext}; then - pipe_works=yes - fi - LIBS="$lt_save_LIBS" - CFLAGS="$lt_save_CFLAGS" - else - echo "cannot find nm_test_func in $nlist" >&5 - fi - else - echo "cannot find nm_test_var in $nlist" >&5 - fi - else - echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 - fi - else - echo "$progname: failed program was:" >&5 - cat conftest.$ac_ext >&5 - fi - rm -rf conftest* conftst* - - # Do not use the global_symbol_pipe unless it works. - if test "$pipe_works" = yes; then - break - else - lt_cv_sys_global_symbol_pipe= - fi -done - -fi - -if test -z "$lt_cv_sys_global_symbol_pipe"; then - lt_cv_sys_global_symbol_to_cdecl= -fi -if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 -$as_echo "failed" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 -$as_echo "ok" >&6; } -fi - - - - - - - - - - - - - - - - - - - - - - - -@%:@ Check whether --enable-libtool-lock was given. -if test "${enable_libtool_lock+set}" = set; then : - enableval=$enable_libtool_lock; -fi - -test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes - -# Some flags need to be propagated to the compiler or linker for good -# libtool support. -case $host in -ia64-*-hpux*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - case `/usr/bin/file conftest.$ac_objext` in - *ELF-32*) - HPUX_IA64_MODE="32" - ;; - *ELF-64*) - HPUX_IA64_MODE="64" - ;; - esac - fi - rm -rf conftest* - ;; -*-*-irix6*) - # Find out which ABI we are using. - echo '#line __oline__ "configure"' > conftest.$ac_ext - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - if test "$lt_cv_prog_gnu_ld" = yes; then - case `/usr/bin/file conftest.$ac_objext` in - *32-bit*) - LD="${LD-ld} -melf32bsmip" - ;; - *N32*) - LD="${LD-ld} -melf32bmipn32" - ;; - *64-bit*) - LD="${LD-ld} -melf64bmip" - ;; - esac - else - case `/usr/bin/file conftest.$ac_objext` in - *32-bit*) - LD="${LD-ld} -32" - ;; - *N32*) - LD="${LD-ld} -n32" - ;; - *64-bit*) - LD="${LD-ld} -64" - ;; - esac - fi - fi - rm -rf conftest* - ;; - -x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ -s390*-*linux*|s390*-*tpf*|sparc*-*linux*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - case `/usr/bin/file conftest.o` in - *32-bit*) - case $host in - x86_64-*kfreebsd*-gnu) - LD="${LD-ld} -m elf_i386_fbsd" - ;; - x86_64-*linux*) - LD="${LD-ld} -m elf_i386" - ;; - ppc64-*linux*|powerpc64-*linux*) - LD="${LD-ld} -m elf32ppclinux" - ;; - s390x-*linux*) - LD="${LD-ld} -m elf_s390" - ;; - sparc64-*linux*) - LD="${LD-ld} -m elf32_sparc" - ;; - esac - ;; - *64-bit*) - case $host in - x86_64-*kfreebsd*-gnu) - LD="${LD-ld} -m elf_x86_64_fbsd" - ;; - x86_64-*linux*) - LD="${LD-ld} -m elf_x86_64" - ;; - ppc*-*linux*|powerpc*-*linux*) - LD="${LD-ld} -m elf64ppc" - ;; - s390*-*linux*|s390*-*tpf*) - LD="${LD-ld} -m elf64_s390" - ;; - sparc*-*linux*) - LD="${LD-ld} -m elf64_sparc" - ;; - esac - ;; - esac - fi - rm -rf conftest* - ;; - -*-*-sco3.2v5*) - # On SCO OpenServer 5, we need -belf to get full-featured binaries. - SAVE_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS -belf" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 -$as_echo_n "checking whether the C compiler needs -belf... " >&6; } -if test "${lt_cv_cc_needs_belf+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - lt_cv_cc_needs_belf=yes -else - lt_cv_cc_needs_belf=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 -$as_echo "$lt_cv_cc_needs_belf" >&6; } - if test x"$lt_cv_cc_needs_belf" != x"yes"; then - # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf - CFLAGS="$SAVE_CFLAGS" - fi - ;; -sparc*-*solaris*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - case `/usr/bin/file conftest.o` in - *64-bit*) - case $lt_cv_prog_gnu_ld in - yes*) LD="${LD-ld} -m elf64_sparc" ;; - *) - if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then - LD="${LD-ld} -64" - fi - ;; - esac - ;; - esac - fi - rm -rf conftest* - ;; -esac - -need_locks="$enable_libtool_lock" - - - case $host_os in - rhapsody* | darwin*) - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. -set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_DSYMUTIL+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$DSYMUTIL"; then - ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -DSYMUTIL=$ac_cv_prog_DSYMUTIL -if test -n "$DSYMUTIL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 -$as_echo "$DSYMUTIL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_DSYMUTIL"; then - ac_ct_DSYMUTIL=$DSYMUTIL - # Extract the first word of "dsymutil", so it can be a program name with args. -set dummy dsymutil; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_DSYMUTIL+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_DSYMUTIL"; then - ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL -if test -n "$ac_ct_DSYMUTIL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 -$as_echo "$ac_ct_DSYMUTIL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_DSYMUTIL" = x; then - DSYMUTIL=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - DSYMUTIL=$ac_ct_DSYMUTIL - fi -else - DSYMUTIL="$ac_cv_prog_DSYMUTIL" -fi - - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. -set dummy ${ac_tool_prefix}nmedit; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_NMEDIT+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$NMEDIT"; then - ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -NMEDIT=$ac_cv_prog_NMEDIT -if test -n "$NMEDIT"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 -$as_echo "$NMEDIT" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_NMEDIT"; then - ac_ct_NMEDIT=$NMEDIT - # Extract the first word of "nmedit", so it can be a program name with args. -set dummy nmedit; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_NMEDIT+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_NMEDIT"; then - ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_NMEDIT="nmedit" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT -if test -n "$ac_ct_NMEDIT"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 -$as_echo "$ac_ct_NMEDIT" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_NMEDIT" = x; then - NMEDIT=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - NMEDIT=$ac_ct_NMEDIT - fi -else - NMEDIT="$ac_cv_prog_NMEDIT" -fi - - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. -set dummy ${ac_tool_prefix}lipo; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_LIPO+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$LIPO"; then - ac_cv_prog_LIPO="$LIPO" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_LIPO="${ac_tool_prefix}lipo" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -LIPO=$ac_cv_prog_LIPO -if test -n "$LIPO"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 -$as_echo "$LIPO" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_LIPO"; then - ac_ct_LIPO=$LIPO - # Extract the first word of "lipo", so it can be a program name with args. -set dummy lipo; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_LIPO+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_LIPO"; then - ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_LIPO="lipo" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO -if test -n "$ac_ct_LIPO"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 -$as_echo "$ac_ct_LIPO" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_LIPO" = x; then - LIPO=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - LIPO=$ac_ct_LIPO - fi -else - LIPO="$ac_cv_prog_LIPO" -fi - - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. -set dummy ${ac_tool_prefix}otool; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_OTOOL+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$OTOOL"; then - ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_OTOOL="${ac_tool_prefix}otool" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -OTOOL=$ac_cv_prog_OTOOL -if test -n "$OTOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 -$as_echo "$OTOOL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_OTOOL"; then - ac_ct_OTOOL=$OTOOL - # Extract the first word of "otool", so it can be a program name with args. -set dummy otool; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_OTOOL+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_OTOOL"; then - ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_OTOOL="otool" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL -if test -n "$ac_ct_OTOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 -$as_echo "$ac_ct_OTOOL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_OTOOL" = x; then - OTOOL=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - OTOOL=$ac_ct_OTOOL - fi -else - OTOOL="$ac_cv_prog_OTOOL" -fi - - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. -set dummy ${ac_tool_prefix}otool64; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_OTOOL64+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$OTOOL64"; then - ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -OTOOL64=$ac_cv_prog_OTOOL64 -if test -n "$OTOOL64"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 -$as_echo "$OTOOL64" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_OTOOL64"; then - ac_ct_OTOOL64=$OTOOL64 - # Extract the first word of "otool64", so it can be a program name with args. -set dummy otool64; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_OTOOL64+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_OTOOL64"; then - ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_OTOOL64="otool64" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 -if test -n "$ac_ct_OTOOL64"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 -$as_echo "$ac_ct_OTOOL64" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_OTOOL64" = x; then - OTOOL64=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - OTOOL64=$ac_ct_OTOOL64 - fi -else - OTOOL64="$ac_cv_prog_OTOOL64" -fi - - - - - - - - - - - - - - - - - - - - - - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 -$as_echo_n "checking for -single_module linker flag... " >&6; } -if test "${lt_cv_apple_cc_single_mod+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_apple_cc_single_mod=no - if test -z "${LT_MULTI_MODULE}"; then - # By default we will add the -single_module flag. You can override - # by either setting the environment variable LT_MULTI_MODULE - # non-empty at configure time, or by adding -multi_module to the - # link flags. - rm -rf libconftest.dylib* - echo "int foo(void){return 1;}" > conftest.c - echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ --dynamiclib -Wl,-single_module conftest.c" >&5 - $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ - -dynamiclib -Wl,-single_module conftest.c 2>conftest.err - _lt_result=$? - if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then - lt_cv_apple_cc_single_mod=yes - else - cat conftest.err >&5 - fi - rm -rf libconftest.dylib* - rm -f conftest.* - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 -$as_echo "$lt_cv_apple_cc_single_mod" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 -$as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } -if test "${lt_cv_ld_exported_symbols_list+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_ld_exported_symbols_list=no - save_LDFLAGS=$LDFLAGS - echo "_main" > conftest.sym - LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - lt_cv_ld_exported_symbols_list=yes -else - lt_cv_ld_exported_symbols_list=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - LDFLAGS="$save_LDFLAGS" - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 -$as_echo "$lt_cv_ld_exported_symbols_list" >&6; } - case $host_os in - rhapsody* | darwin1.[012]) - _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; - darwin1.*) - _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; - darwin*) # darwin 5.x on - # if running on 10.5 or later, the deployment target defaults - # to the OS version, if on x86, and 10.4, the deployment - # target defaults to 10.4. Don't you love it? - case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in - 10.0,*86*-darwin8*|10.0,*-darwin[91]*) - _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; - 10.[012]*) - _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; - 10.*) - _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; - esac - ;; - esac - if test "$lt_cv_apple_cc_single_mod" = "yes"; then - _lt_dar_single_mod='$single_module' - fi - if test "$lt_cv_ld_exported_symbols_list" = "yes"; then - _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' - else - _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' - fi - if test "$DSYMUTIL" != ":"; then - _lt_dsymutil='~$DSYMUTIL $lib || :' - else - _lt_dsymutil= - fi - ;; - esac - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 -$as_echo_n "checking how to run the C preprocessor... " >&6; } -# On Suns, sometimes $CPP names a directory. -if test -n "$CPP" && test -d "$CPP"; then - CPP= -fi -if test -z "$CPP"; then - if test "${ac_cv_prog_CPP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - # Double quotes because CPP needs to be expanded - for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" - do - ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -@%:@ifdef __STDC__ -@%:@ include -@%:@else -@%:@ include -@%:@endif - Syntax error -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -@%:@include -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - break -fi - - done - ac_cv_prog_CPP=$CPP - -fi - CPP=$ac_cv_prog_CPP -else - ac_cv_prog_CPP=$CPP -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 -$as_echo "$CPP" >&6; } -ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -@%:@ifdef __STDC__ -@%:@ include -@%:@else -@%:@ include -@%:@endif - Syntax error -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -@%:@include -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error "C preprocessor \"$CPP\" fails sanity check -See \`config.log' for more details." "$LINENO" 5; } -fi - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 -$as_echo_n "checking for ANSI C header files... " >&6; } -if test "${ac_cv_header_stdc+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#include -#include - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_header_stdc=yes -else - ac_cv_header_stdc=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - -if test $ac_cv_header_stdc = yes; then - # SunOS 4.x string.h does not declare mem*, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "memchr" >/dev/null 2>&1; then : - -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "free" >/dev/null 2>&1; then : - -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. - if test "$cross_compiling" = yes; then : - : -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#if ((' ' & 0x0FF) == 0x020) -# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') -# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) -#else -# define ISLOWER(c) \ - (('a' <= (c) && (c) <= 'i') \ - || ('j' <= (c) && (c) <= 'r') \ - || ('s' <= (c) && (c) <= 'z')) -# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) -#endif - -#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) -int -main () -{ - int i; - for (i = 0; i < 256; i++) - if (XOR (islower (i), ISLOWER (i)) - || toupper (i) != TOUPPER (i)) - return 2; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - -else - ac_cv_header_stdc=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - -fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 -$as_echo "$ac_cv_header_stdc" >&6; } -if test $ac_cv_header_stdc = yes; then - -$as_echo "@%:@define STDC_HEADERS 1" >>confdefs.h - -fi - -# On IRIX 5.3, sys/types and inttypes.h are conflicting. -for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ - inttypes.h stdint.h unistd.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default -" -eval as_val=\$$as_ac_Header - if test "x$as_val" = x""yes; then : - cat >>confdefs.h <<_ACEOF -@%:@define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - -fi - -done - - -for ac_header in dlfcn.h -do : - ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default -" -if test "x$ac_cv_header_dlfcn_h" = x""yes; then : - cat >>confdefs.h <<_ACEOF -@%:@define HAVE_DLFCN_H 1 -_ACEOF - -fi - -done - - - -# Set options - - - - enable_dlopen=no - - - enable_win32_dll=no - - - @%:@ Check whether --enable-shared was given. -if test "${enable_shared+set}" = set; then : - enableval=$enable_shared; p=${PACKAGE-default} - case $enableval in - yes) enable_shared=yes ;; - no) enable_shared=no ;; - *) - enable_shared=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_shared=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac -else - enable_shared=yes -fi - - - - - - - - - - @%:@ Check whether --enable-static was given. -if test "${enable_static+set}" = set; then : - enableval=$enable_static; p=${PACKAGE-default} - case $enableval in - yes) enable_static=yes ;; - no) enable_static=no ;; - *) - enable_static=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_static=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac -else - enable_static=yes -fi - - - - - - - - - - -@%:@ Check whether --with-pic was given. -if test "${with_pic+set}" = set; then : - withval=$with_pic; pic_mode="$withval" -else - pic_mode=default -fi - - -test -z "$pic_mode" && pic_mode=default - - - - - - - - @%:@ Check whether --enable-fast-install was given. -if test "${enable_fast_install+set}" = set; then : - enableval=$enable_fast_install; p=${PACKAGE-default} - case $enableval in - yes) enable_fast_install=yes ;; - no) enable_fast_install=no ;; - *) - enable_fast_install=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_fast_install=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac -else - enable_fast_install=yes -fi - - - - - - - - - - - -# This can be used to rebuild libtool when needed -LIBTOOL_DEPS="$ltmain" - -# Always use our own libtool. -LIBTOOL='$(SHELL) $(top_builddir)/libtool' - - - - - - - - - - - - - - - - - - - - - - - - - -test -z "$LN_S" && LN_S="ln -s" - - - - - - - - - - - - - - -if test -n "${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 -$as_echo_n "checking for objdir... " >&6; } -if test "${lt_cv_objdir+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - rm -f .libs 2>/dev/null -mkdir .libs 2>/dev/null -if test -d .libs; then - lt_cv_objdir=.libs -else - # MS-DOS does not allow filenames that begin with a dot. - lt_cv_objdir=_libs -fi -rmdir .libs 2>/dev/null -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 -$as_echo "$lt_cv_objdir" >&6; } -objdir=$lt_cv_objdir - - - - - -cat >>confdefs.h <<_ACEOF -@%:@define LT_OBJDIR "$lt_cv_objdir/" -_ACEOF - - - - - - - - - - - - - - - - - -case $host_os in -aix3*) - # AIX sometimes has problems with the GCC collect2 program. For some - # reason, if we set the COLLECT_NAMES environment variable, the problems - # vanish in a puff of smoke. - if test "X${COLLECT_NAMES+set}" != Xset; then - COLLECT_NAMES= - export COLLECT_NAMES - fi - ;; -esac - -# Sed substitution that helps us do robust quoting. It backslashifies -# metacharacters that are still active within double-quoted strings. -sed_quote_subst='s/\(["`$\\]\)/\\\1/g' - -# Same as above, but do not quote variable references. -double_quote_subst='s/\(["`\\]\)/\\\1/g' - -# Sed substitution to delay expansion of an escaped shell variable in a -# double_quote_subst'ed string. -delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' - -# Sed substitution to delay expansion of an escaped single quote. -delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' - -# Sed substitution to avoid accidental globbing in evaled expressions -no_glob_subst='s/\*/\\\*/g' - -# Global variables: -ofile=libtool -can_build_shared=yes - -# All known linkers require a `.a' archive for static linking (except MSVC, -# which needs '.lib'). -libext=a - -with_gnu_ld="$lt_cv_prog_gnu_ld" - -old_CC="$CC" -old_CFLAGS="$CFLAGS" - -# Set sane defaults for various variables -test -z "$CC" && CC=cc -test -z "$LTCC" && LTCC=$CC -test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS -test -z "$LD" && LD=ld -test -z "$ac_objext" && ac_objext=o - -for cc_temp in $compiler""; do - case $cc_temp in - compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; - distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; - \-*) ;; - *) break;; - esac -done -cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` - - -# Only perform the check for file, if the check method requires it -test -z "$MAGIC_CMD" && MAGIC_CMD=file -case $deplibs_check_method in -file_magic*) - if test "$file_magic_cmd" = '$MAGIC_CMD'; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 -$as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } -if test "${lt_cv_path_MAGIC_CMD+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $MAGIC_CMD in -[\\/*] | ?:[\\/]*) - lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. - ;; -*) - lt_save_MAGIC_CMD="$MAGIC_CMD" - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" - for ac_dir in $ac_dummy; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/${ac_tool_prefix}file; then - lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file" - if test -n "$file_magic_test_file"; then - case $deplibs_check_method in - "file_magic "*) - file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` - MAGIC_CMD="$lt_cv_path_MAGIC_CMD" - if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | - $EGREP "$file_magic_regex" > /dev/null; then - : - else - cat <<_LT_EOF 1>&2 - -*** Warning: the command libtool uses to detect shared libraries, -*** $file_magic_cmd, produces output that libtool cannot recognize. -*** The result is that libtool may fail to recognize shared libraries -*** as such. This will affect the creation of libtool libraries that -*** depend on shared libraries, but programs linked with such libtool -*** libraries will work regardless of this problem. Nevertheless, you -*** may want to report the problem to your system manager and/or to -*** bug-libtool@gnu.org - -_LT_EOF - fi ;; - esac - fi - break - fi - done - IFS="$lt_save_ifs" - MAGIC_CMD="$lt_save_MAGIC_CMD" - ;; -esac -fi - -MAGIC_CMD="$lt_cv_path_MAGIC_CMD" -if test -n "$MAGIC_CMD"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 -$as_echo "$MAGIC_CMD" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - - -if test -z "$lt_cv_path_MAGIC_CMD"; then - if test -n "$ac_tool_prefix"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5 -$as_echo_n "checking for file... " >&6; } -if test "${lt_cv_path_MAGIC_CMD+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $MAGIC_CMD in -[\\/*] | ?:[\\/]*) - lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. - ;; -*) - lt_save_MAGIC_CMD="$MAGIC_CMD" - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" - for ac_dir in $ac_dummy; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/file; then - lt_cv_path_MAGIC_CMD="$ac_dir/file" - if test -n "$file_magic_test_file"; then - case $deplibs_check_method in - "file_magic "*) - file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` - MAGIC_CMD="$lt_cv_path_MAGIC_CMD" - if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | - $EGREP "$file_magic_regex" > /dev/null; then - : - else - cat <<_LT_EOF 1>&2 - -*** Warning: the command libtool uses to detect shared libraries, -*** $file_magic_cmd, produces output that libtool cannot recognize. -*** The result is that libtool may fail to recognize shared libraries -*** as such. This will affect the creation of libtool libraries that -*** depend on shared libraries, but programs linked with such libtool -*** libraries will work regardless of this problem. Nevertheless, you -*** may want to report the problem to your system manager and/or to -*** bug-libtool@gnu.org - -_LT_EOF - fi ;; - esac - fi - break - fi - done - IFS="$lt_save_ifs" - MAGIC_CMD="$lt_save_MAGIC_CMD" - ;; -esac -fi - -MAGIC_CMD="$lt_cv_path_MAGIC_CMD" -if test -n "$MAGIC_CMD"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 -$as_echo "$MAGIC_CMD" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - else - MAGIC_CMD=: - fi -fi - - fi - ;; -esac - -# Use C for the default configuration in the libtool script - -lt_save_CC="$CC" -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - -# Source file extension for C test sources. -ac_ext=c - -# Object file extension for compiled C test sources. -objext=o -objext=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code="int some_variable = 0;" - -# Code to be used in simple link tests -lt_simple_link_test_code='int main(){return(0);}' - - - - - - - -# If no C compiler was specified, use CC. -LTCC=${LTCC-"$CC"} - -# If no C compiler flags were specified, use CFLAGS. -LTCFLAGS=${LTCFLAGS-"$CFLAGS"} - -# Allow CC to be a program name with arguments. -compiler=$CC - -# Save the default compiler, since it gets overwritten when the other -# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. -compiler_DEFAULT=$CC - -# save warnings/boilerplate of simple test code -ac_outfile=conftest.$ac_objext -echo "$lt_simple_compile_test_code" >conftest.$ac_ext -eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_compiler_boilerplate=`cat conftest.err` -$RM conftest* - -ac_outfile=conftest.$ac_objext -echo "$lt_simple_link_test_code" >conftest.$ac_ext -eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_linker_boilerplate=`cat conftest.err` -$RM -r conftest* - - -if test -n "$compiler"; then - -lt_prog_compiler_no_builtin_flag= - -if test "$GCC" = yes; then - lt_prog_compiler_no_builtin_flag=' -fno-builtin' - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 -$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } -if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_rtti_exceptions=no - ac_outfile=conftest.$ac_objext - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="-fno-rtti -fno-exceptions" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - # The option is referenced via a variable to avoid confusing sed. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&5) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&5 - echo "$as_me:__oline__: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s "$ac_outfile"; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings other than the usual output. - $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then - lt_cv_prog_compiler_rtti_exceptions=yes - fi - fi - $RM conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 -$as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } - -if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then - lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" -else - : -fi - -fi - - - - - - - lt_prog_compiler_wl= -lt_prog_compiler_pic= -lt_prog_compiler_static= - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 -$as_echo_n "checking for $compiler option to produce PIC... " >&6; } - - if test "$GCC" = yes; then - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_static='-static' - - case $host_os in - aix*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - lt_prog_compiler_static='-Bstatic' - fi - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - lt_prog_compiler_pic='-fPIC' - ;; - m68k) - # FIXME: we need at least 68020 code to build shared libraries, but - # adding the `-m68020' flag to GCC prevents building anything better, - # like `-m68040'. - lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' - ;; - esac - ;; - - beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) - # PIC is the default for these OSes. - ;; - - mingw* | cygwin* | pw32* | os2* | cegcc*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - # Although the cygwin gcc ignores -fPIC, still need this for old-style - # (--disable-auto-import) libraries - lt_prog_compiler_pic='-DDLL_EXPORT' - ;; - - darwin* | rhapsody*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - lt_prog_compiler_pic='-fno-common' - ;; - - hpux*) - # PIC is the default for 64-bit PA HP-UX, but not for 32-bit - # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag - # sets the default TLS model and affects inlining. - case $host_cpu in - hppa*64*) - # +Z the default - ;; - *) - lt_prog_compiler_pic='-fPIC' - ;; - esac - ;; - - interix[3-9]*) - # Interix 3.x gcc -fpic/-fPIC options generate broken code. - # Instead, we relocate shared libraries at runtime. - ;; - - msdosdjgpp*) - # Just because we use GCC doesn't mean we suddenly get shared libraries - # on systems that don't support them. - lt_prog_compiler_can_build_shared=no - enable_shared=no - ;; - - *nto* | *qnx*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - lt_prog_compiler_pic='-fPIC -shared' - ;; - - sysv4*MP*) - if test -d /usr/nec; then - lt_prog_compiler_pic=-Kconform_pic - fi - ;; - - *) - lt_prog_compiler_pic='-fPIC' - ;; - esac - else - # PORTME Check for flag to pass linker flags through the system compiler. - case $host_os in - aix*) - lt_prog_compiler_wl='-Wl,' - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - lt_prog_compiler_static='-Bstatic' - else - lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' - fi - ;; - - mingw* | cygwin* | pw32* | os2* | cegcc*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - lt_prog_compiler_pic='-DDLL_EXPORT' - ;; - - hpux9* | hpux10* | hpux11*) - lt_prog_compiler_wl='-Wl,' - # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but - # not for PA HP-UX. - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - lt_prog_compiler_pic='+Z' - ;; - esac - # Is there a better lt_prog_compiler_static that works with the bundled CC? - lt_prog_compiler_static='${wl}-a ${wl}archive' - ;; - - irix5* | irix6* | nonstopux*) - lt_prog_compiler_wl='-Wl,' - # PIC (with -KPIC) is the default. - lt_prog_compiler_static='-non_shared' - ;; - - linux* | k*bsd*-gnu | kopensolaris*-gnu) - case $cc_basename in - # old Intel for x86_64 which still supported -KPIC. - ecc*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-static' - ;; - # icc used to be incompatible with GCC. - # ICC 10 doesn't accept -KPIC any more. - icc* | ifort*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-fPIC' - lt_prog_compiler_static='-static' - ;; - # Lahey Fortran 8.1. - lf95*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='--shared' - lt_prog_compiler_static='--static' - ;; - pgcc* | pgf77* | pgf90* | pgf95*) - # Portland Group compilers (*not* the Pentium gcc compiler, - # which looks to be a dead project) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-fpic' - lt_prog_compiler_static='-Bstatic' - ;; - ccc*) - lt_prog_compiler_wl='-Wl,' - # All Alpha code is PIC. - lt_prog_compiler_static='-non_shared' - ;; - xl*) - # IBM XL C 8.0/Fortran 10.1 on PPC - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-qpic' - lt_prog_compiler_static='-qstaticlink' - ;; - *) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C 5.9 - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - lt_prog_compiler_wl='-Wl,' - ;; - *Sun\ F*) - # Sun Fortran 8.3 passes all unrecognized flags to the linker - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - lt_prog_compiler_wl='' - ;; - esac - ;; - esac - ;; - - newsos6) - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - ;; - - *nto* | *qnx*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - lt_prog_compiler_pic='-fPIC -shared' - ;; - - osf3* | osf4* | osf5*) - lt_prog_compiler_wl='-Wl,' - # All OSF/1 code is PIC. - lt_prog_compiler_static='-non_shared' - ;; - - rdos*) - lt_prog_compiler_static='-non_shared' - ;; - - solaris*) - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - case $cc_basename in - f77* | f90* | f95*) - lt_prog_compiler_wl='-Qoption ld ';; - *) - lt_prog_compiler_wl='-Wl,';; - esac - ;; - - sunos4*) - lt_prog_compiler_wl='-Qoption ld ' - lt_prog_compiler_pic='-PIC' - lt_prog_compiler_static='-Bstatic' - ;; - - sysv4 | sysv4.2uw2* | sysv4.3*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - ;; - - sysv4*MP*) - if test -d /usr/nec ;then - lt_prog_compiler_pic='-Kconform_pic' - lt_prog_compiler_static='-Bstatic' - fi - ;; - - sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - ;; - - unicos*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_can_build_shared=no - ;; - - uts4*) - lt_prog_compiler_pic='-pic' - lt_prog_compiler_static='-Bstatic' - ;; - - *) - lt_prog_compiler_can_build_shared=no - ;; - esac - fi - -case $host_os in - # For platforms which do not support PIC, -DPIC is meaningless: - *djgpp*) - lt_prog_compiler_pic= - ;; - *) - lt_prog_compiler_pic="$lt_prog_compiler_pic@&t@ -DPIC" - ;; -esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic" >&5 -$as_echo "$lt_prog_compiler_pic" >&6; } - - - - - - -# -# Check to make sure the PIC flag actually works. -# -if test -n "$lt_prog_compiler_pic"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 -$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } -if test "${lt_cv_prog_compiler_pic_works+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_pic_works=no - ac_outfile=conftest.$ac_objext - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="$lt_prog_compiler_pic@&t@ -DPIC" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - # The option is referenced via a variable to avoid confusing sed. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&5) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&5 - echo "$as_me:__oline__: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s "$ac_outfile"; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings other than the usual output. - $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then - lt_cv_prog_compiler_pic_works=yes - fi - fi - $RM conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 -$as_echo "$lt_cv_prog_compiler_pic_works" >&6; } - -if test x"$lt_cv_prog_compiler_pic_works" = xyes; then - case $lt_prog_compiler_pic in - "" | " "*) ;; - *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; - esac -else - lt_prog_compiler_pic= - lt_prog_compiler_can_build_shared=no -fi - -fi - - - - - - -# -# Check to make sure the static flag actually works. -# -wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 -$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } -if test "${lt_cv_prog_compiler_static_works+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_static_works=no - save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS $lt_tmp_static_flag" - echo "$lt_simple_link_test_code" > conftest.$ac_ext - if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then - # The linker can only warn and ignore the option if not recognized - # So say no if there are warnings - if test -s conftest.err; then - # Append any errors to the config.log. - cat conftest.err 1>&5 - $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if diff conftest.exp conftest.er2 >/dev/null; then - lt_cv_prog_compiler_static_works=yes - fi - else - lt_cv_prog_compiler_static_works=yes - fi - fi - $RM -r conftest* - LDFLAGS="$save_LDFLAGS" - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 -$as_echo "$lt_cv_prog_compiler_static_works" >&6; } - -if test x"$lt_cv_prog_compiler_static_works" = xyes; then - : -else - lt_prog_compiler_static= -fi - - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 -$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } -if test "${lt_cv_prog_compiler_c_o+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_c_o=no - $RM -r conftest 2>/dev/null - mkdir conftest - cd conftest - mkdir out - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - lt_compiler_flag="-o out/conftest2.$ac_objext" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&5) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&5 - echo "$as_me:__oline__: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s out/conftest2.$ac_objext - then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings - $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp - $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 - if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then - lt_cv_prog_compiler_c_o=yes - fi - fi - chmod u+w . 2>&5 - $RM conftest* - # SGI C++ compiler will create directory out/ii_files/ for - # template instantiation - test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files - $RM out/* && rmdir out - cd .. - $RM -r conftest - $RM conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 -$as_echo "$lt_cv_prog_compiler_c_o" >&6; } - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 -$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } -if test "${lt_cv_prog_compiler_c_o+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_c_o=no - $RM -r conftest 2>/dev/null - mkdir conftest - cd conftest - mkdir out - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - lt_compiler_flag="-o out/conftest2.$ac_objext" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&5) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&5 - echo "$as_me:__oline__: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s out/conftest2.$ac_objext - then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings - $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp - $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 - if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then - lt_cv_prog_compiler_c_o=yes - fi - fi - chmod u+w . 2>&5 - $RM conftest* - # SGI C++ compiler will create directory out/ii_files/ for - # template instantiation - test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files - $RM out/* && rmdir out - cd .. - $RM -r conftest - $RM conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 -$as_echo "$lt_cv_prog_compiler_c_o" >&6; } - - - - -hard_links="nottested" -if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then - # do not overwrite the value of need_locks provided by the user - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 -$as_echo_n "checking if we can lock with hard links... " >&6; } - hard_links=yes - $RM conftest* - ln conftest.a conftest.b 2>/dev/null && hard_links=no - touch conftest.a - ln conftest.a conftest.b 2>&5 || hard_links=no - ln conftest.a conftest.b 2>/dev/null && hard_links=no - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 -$as_echo "$hard_links" >&6; } - if test "$hard_links" = no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 -$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} - need_locks=warn - fi -else - need_locks=no -fi - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 -$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } - - runpath_var= - allow_undefined_flag= - always_export_symbols=no - archive_cmds= - archive_expsym_cmds= - compiler_needs_object=no - enable_shared_with_static_runtimes=no - export_dynamic_flag_spec= - export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - hardcode_automatic=no - hardcode_direct=no - hardcode_direct_absolute=no - hardcode_libdir_flag_spec= - hardcode_libdir_flag_spec_ld= - hardcode_libdir_separator= - hardcode_minus_L=no - hardcode_shlibpath_var=unsupported - inherit_rpath=no - link_all_deplibs=unknown - module_cmds= - module_expsym_cmds= - old_archive_from_new_cmds= - old_archive_from_expsyms_cmds= - thread_safe_flag_spec= - whole_archive_flag_spec= - # include_expsyms should be a list of space-separated symbols to be *always* - # included in the symbol list - include_expsyms= - # exclude_expsyms can be an extended regexp of symbols to exclude - # it will be wrapped by ` (' and `)$', so one must not match beginning or - # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', - # as well as any symbol that contains `d'. - exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' - # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out - # platforms (ab)use it in PIC code, but their linkers get confused if - # the symbol is explicitly referenced. Since portable code cannot - # rely on this symbol name, it's probably fine to never include it in - # preloaded symbol tables. - # Exclude shared library initialization/finalization symbols. - extract_expsyms_cmds= - - case $host_os in - cygwin* | mingw* | pw32* | cegcc*) - # FIXME: the MSVC++ port hasn't been tested in a loooong time - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - if test "$GCC" != yes; then - with_gnu_ld=no - fi - ;; - interix*) - # we just hope/assume this is gcc and not c89 (= MSVC++) - with_gnu_ld=yes - ;; - openbsd*) - with_gnu_ld=no - ;; - linux* | k*bsd*-gnu) - link_all_deplibs=no - ;; - esac - - ld_shlibs=yes - if test "$with_gnu_ld" = yes; then - # If archive_cmds runs LD, not CC, wlarc should be empty - wlarc='${wl}' - - # Set some defaults for GNU ld with shared library support. These - # are reset later if shared libraries are not supported. Putting them - # here allows them to be overridden if necessary. - runpath_var=LD_RUN_PATH - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - export_dynamic_flag_spec='${wl}--export-dynamic' - # ancient GNU ld didn't support --whole-archive et. al. - if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then - whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - else - whole_archive_flag_spec= - fi - supports_anon_versioning=no - case `$LD -v 2>&1` in - *GNU\ gold*) supports_anon_versioning=yes ;; - *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 - *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... - *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... - *\ 2.11.*) ;; # other 2.11 versions - *) supports_anon_versioning=yes ;; - esac - - # See if GNU ld supports shared libraries. - case $host_os in - aix[3-9]*) - # On AIX/PPC, the GNU linker is very broken - if test "$host_cpu" != ia64; then - ld_shlibs=no - cat <<_LT_EOF 1>&2 - -*** Warning: the GNU linker, at least up to release 2.9.1, is reported -*** to be unable to reliably create shared libraries on AIX. -*** Therefore, libtool is disabling shared libraries support. If you -*** really care for shared libraries, you may want to modify your PATH -*** so that a non-GNU linker is found, and then restart. - -_LT_EOF - fi - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='' - ;; - m68k) - archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_minus_L=yes - ;; - esac - ;; - - beos*) - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - allow_undefined_flag=unsupported - # Joseph Beckenbach says some releases of gcc - # support --undefined. This deserves some investigation. FIXME - archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - else - ld_shlibs=no - fi - ;; - - cygwin* | mingw* | pw32* | cegcc*) - # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, - # as there is no search path for DLLs. - hardcode_libdir_flag_spec='-L$libdir' - allow_undefined_flag=unsupported - always_export_symbols=no - enable_shared_with_static_runtimes=yes - export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' - - if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - # If the export-symbols file already is a .def file (1st line - # is EXPORTS), use it as is; otherwise, prepend... - archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - cp $export_symbols $output_objdir/$soname.def; - else - echo EXPORTS > $output_objdir/$soname.def; - cat $export_symbols >> $output_objdir/$soname.def; - fi~ - $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - else - ld_shlibs=no - fi - ;; - - interix[3-9]*) - hardcode_direct=no - hardcode_shlibpath_var=no - hardcode_libdir_flag_spec='${wl}-rpath,$libdir' - export_dynamic_flag_spec='${wl}-E' - # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. - # Instead, shared libraries are loaded at an image base (0x10000000 by - # default) and relocated if they conflict, which is a slow very memory - # consuming and fragmenting process. To avoid this, we pick a random, - # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link - # time. Moving up from 0x10000000 also allows more sbrk(2) space. - archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - ;; - - gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) - tmp_diet=no - if test "$host_os" = linux-dietlibc; then - case $cc_basename in - diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) - esac - fi - if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ - && test "$tmp_diet" = no - then - tmp_addflag= - tmp_sharedflag='-shared' - case $cc_basename,$host_cpu in - pgcc*) # Portland Group C compiler - whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_addflag=' $pic_flag' - ;; - pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers - whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_addflag=' $pic_flag -Mnomain' ;; - ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 - tmp_addflag=' -i_dynamic' ;; - efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 - tmp_addflag=' -i_dynamic -nofor_main' ;; - ifc* | ifort*) # Intel Fortran compiler - tmp_addflag=' -nofor_main' ;; - lf95*) # Lahey Fortran 8.1 - whole_archive_flag_spec= - tmp_sharedflag='--shared' ;; - xl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) - tmp_sharedflag='-qmkshrobj' - tmp_addflag= ;; - esac - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) # Sun C 5.9 - whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' - compiler_needs_object=yes - tmp_sharedflag='-G' ;; - *Sun\ F*) # Sun Fortran 8.3 - tmp_sharedflag='-G' ;; - esac - archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - - if test "x$supports_anon_versioning" = xyes; then - archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - echo "local: *; };" >> $output_objdir/$libname.ver~ - $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' - fi - - case $cc_basename in - xlf*) - # IBM XL Fortran 10.1 on PPC cannot create shared libs itself - whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' - hardcode_libdir_flag_spec= - hardcode_libdir_flag_spec_ld='-rpath $libdir' - archive_cmds='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib' - if test "x$supports_anon_versioning" = xyes; then - archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - echo "local: *; };" >> $output_objdir/$libname.ver~ - $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' - fi - ;; - esac - else - ld_shlibs=no - fi - ;; - - netbsd* | netbsdelf*-gnu) - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' - wlarc= - else - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - fi - ;; - - solaris*) - if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then - ld_shlibs=no - cat <<_LT_EOF 1>&2 - -*** Warning: The releases 2.8.* of the GNU linker cannot reliably -*** create shared libraries on Solaris systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.9.1 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. - -_LT_EOF - elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - ld_shlibs=no - fi - ;; - - sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) - case `$LD -v 2>&1` in - *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) - ld_shlibs=no - cat <<_LT_EOF 1>&2 - -*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not -*** reliably create shared libraries on SCO systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.16.91.0.3 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. - -_LT_EOF - ;; - *) - # For security reasons, it is highly recommended that you always - # use absolute paths for naming shared libraries, and exclude the - # DT_RUNPATH tag from executables and libraries. But doing so - # requires that you compile everything twice, which is a pain. - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - ld_shlibs=no - fi - ;; - esac - ;; - - sunos4*) - archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' - wlarc= - hardcode_direct=yes - hardcode_shlibpath_var=no - ;; - - *) - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - ld_shlibs=no - fi - ;; - esac - - if test "$ld_shlibs" = no; then - runpath_var= - hardcode_libdir_flag_spec= - export_dynamic_flag_spec= - whole_archive_flag_spec= - fi - else - # PORTME fill in a description of your system's linker (not GNU ld) - case $host_os in - aix3*) - allow_undefined_flag=unsupported - always_export_symbols=yes - archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' - # Note: this linker hardcodes the directories in LIBPATH if there - # are no directories specified by -L. - hardcode_minus_L=yes - if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then - # Neither direct hardcoding nor static linking is supported with a - # broken collect2. - hardcode_direct=unsupported - fi - ;; - - aix[4-9]*) - if test "$host_cpu" = ia64; then - # On IA64, the linker does run time linking by default, so we don't - # have to do anything special. - aix_use_runtimelinking=no - exp_sym_flag='-Bexport' - no_entry_flag="" - else - # If we're using GNU nm, then we don't want the "-C" option. - # -C means demangle to AIX nm, but means don't demangle with GNU nm - if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then - export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' - else - export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' - fi - aix_use_runtimelinking=no - - # Test if we are trying to use run time linking or normal - # AIX style linking. If -brtl is somewhere in LDFLAGS, we - # need to do runtime linking. - case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) - for ld_flag in $LDFLAGS; do - if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then - aix_use_runtimelinking=yes - break - fi - done - ;; - esac - - exp_sym_flag='-bexport' - no_entry_flag='-bnoentry' - fi - - # When large executables or shared objects are built, AIX ld can - # have problems creating the table of contents. If linking a library - # or program results in "error TOC overflow" add -mminimal-toc to - # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not - # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. - - archive_cmds='' - hardcode_direct=yes - hardcode_direct_absolute=yes - hardcode_libdir_separator=':' - link_all_deplibs=yes - file_list_spec='${wl}-f,' - - if test "$GCC" = yes; then - case $host_os in aix4.[012]|aix4.[012].*) - # We only want to do this on AIX 4.2 and lower, the check - # below for broken collect2 doesn't work under 4.3+ - collect2name=`${CC} -print-prog-name=collect2` - if test -f "$collect2name" && - strings "$collect2name" | $GREP resolve_lib_name >/dev/null - then - # We have reworked collect2 - : - else - # We have old collect2 - hardcode_direct=unsupported - # It fails to find uninstalled libraries when the uninstalled - # path is not listed in the libpath. Setting hardcode_minus_L - # to unsupported forces relinking - hardcode_minus_L=yes - hardcode_libdir_flag_spec='-L$libdir' - hardcode_libdir_separator= - fi - ;; - esac - shared_flag='-shared' - if test "$aix_use_runtimelinking" = yes; then - shared_flag="$shared_flag "'${wl}-G' - fi - link_all_deplibs=no - else - # not using gcc - if test "$host_cpu" = ia64; then - # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release - # chokes on -Wl,-G. The following line is correct: - shared_flag='-G' - else - if test "$aix_use_runtimelinking" = yes; then - shared_flag='${wl}-G' - else - shared_flag='${wl}-bM:SRE' - fi - fi - fi - - export_dynamic_flag_spec='${wl}-bexpall' - # It seems that -bexpall does not export symbols beginning with - # underscore (_), so it is better to generate a list of symbols to export. - always_export_symbols=yes - if test "$aix_use_runtimelinking" = yes; then - # Warning - without using the other runtime loading flags (-brtl), - # -berok will link without error, but may produce a broken library. - allow_undefined_flag='-berok' - # Determine the default libpath from the value encoded in an - # empty executable. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - -lt_aix_libpath_sed=' - /Import File Strings/,/^$/ { - /^0/ { - s/^0 *\(.*\)$/\1/ - p - } - }' -aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -# Check for a 64-bit object if we didn't find anything. -if test -z "$aix_libpath"; then - aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -fi -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi - - hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" - archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" - else - if test "$host_cpu" = ia64; then - hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' - allow_undefined_flag="-z nodefs" - archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" - else - # Determine the default libpath from the value encoded in an - # empty executable. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - -lt_aix_libpath_sed=' - /Import File Strings/,/^$/ { - /^0/ { - s/^0 *\(.*\)$/\1/ - p - } - }' -aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -# Check for a 64-bit object if we didn't find anything. -if test -z "$aix_libpath"; then - aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -fi -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi - - hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" - # Warning - without using the other run time loading flags, - # -berok will link without error, but may produce a broken library. - no_undefined_flag=' ${wl}-bernotok' - allow_undefined_flag=' ${wl}-berok' - # Exported symbols can be pulled into shared objects from archives - whole_archive_flag_spec='$convenience' - archive_cmds_need_lc=yes - # This is similar to how AIX traditionally builds its shared libraries. - archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' - fi - fi - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='' - ;; - m68k) - archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_minus_L=yes - ;; - esac - ;; - - bsdi[45]*) - export_dynamic_flag_spec=-rdynamic - ;; - - cygwin* | mingw* | pw32* | cegcc*) - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - # hardcode_libdir_flag_spec is actually meaningless, as there is - # no search path for DLLs. - hardcode_libdir_flag_spec=' ' - allow_undefined_flag=unsupported - # Tell ltmain to make .lib files, not .a files. - libext=lib - # Tell ltmain to make .dll files, not .so files. - shrext_cmds=".dll" - # FIXME: Setting linknames here is a bad hack. - archive_cmds='$CC -o $lib $libobjs $compiler_flags `$ECHO "X$deplibs" | $Xsed -e '\''s/ -lc$//'\''` -link -dll~linknames=' - # The linker will automatically build a .lib file if we build a DLL. - old_archive_from_new_cmds='true' - # FIXME: Should let the user specify the lib program. - old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' - fix_srcfile_path='`cygpath -w "$srcfile"`' - enable_shared_with_static_runtimes=yes - ;; - - darwin* | rhapsody*) - - - archive_cmds_need_lc=no - hardcode_direct=no - hardcode_automatic=yes - hardcode_shlibpath_var=unsupported - whole_archive_flag_spec='' - link_all_deplibs=yes - allow_undefined_flag="$_lt_dar_allow_undefined" - case $cc_basename in - ifort*) _lt_dar_can_shared=yes ;; - *) _lt_dar_can_shared=$GCC ;; - esac - if test "$_lt_dar_can_shared" = "yes"; then - output_verbose_link_cmd=echo - archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" - module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" - archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" - module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" - - else - ld_shlibs=no - fi - - ;; - - dgux*) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_shlibpath_var=no - ;; - - freebsd1*) - ld_shlibs=no - ;; - - # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor - # support. Future versions do this automatically, but an explicit c++rt0.o - # does not break anything, and helps significantly (at the cost of a little - # extra space). - freebsd2.2*) - archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' - hardcode_libdir_flag_spec='-R$libdir' - hardcode_direct=yes - hardcode_shlibpath_var=no - ;; - - # Unfortunately, older versions of FreeBSD 2 do not have this feature. - freebsd2*) - archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct=yes - hardcode_minus_L=yes - hardcode_shlibpath_var=no - ;; - - # FreeBSD 3 and greater uses gcc -shared to do shared libraries. - freebsd* | dragonfly*) - archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' - hardcode_libdir_flag_spec='-R$libdir' - hardcode_direct=yes - hardcode_shlibpath_var=no - ;; - - hpux9*) - if test "$GCC" = yes; then - archive_cmds='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - else - archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - fi - hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' - hardcode_libdir_separator=: - hardcode_direct=yes - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L=yes - export_dynamic_flag_spec='${wl}-E' - ;; - - hpux10*) - if test "$GCC" = yes -a "$with_gnu_ld" = no; then - archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' - fi - if test "$with_gnu_ld" = no; then - hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' - hardcode_libdir_flag_spec_ld='+b $libdir' - hardcode_libdir_separator=: - hardcode_direct=yes - hardcode_direct_absolute=yes - export_dynamic_flag_spec='${wl}-E' - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L=yes - fi - ;; - - hpux11*) - if test "$GCC" = yes -a "$with_gnu_ld" = no; then - case $host_cpu in - hppa*64*) - archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - ia64*) - archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - else - case $host_cpu in - hppa*64*) - archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - ia64*) - archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - fi - if test "$with_gnu_ld" = no; then - hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' - hardcode_libdir_separator=: - - case $host_cpu in - hppa*64*|ia64*) - hardcode_direct=no - hardcode_shlibpath_var=no - ;; - *) - hardcode_direct=yes - hardcode_direct_absolute=yes - export_dynamic_flag_spec='${wl}-E' - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L=yes - ;; - esac - fi - ;; - - irix5* | irix6* | nonstopux*) - if test "$GCC" = yes; then - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - # Try to use the -exported_symbol ld option, if it does not - # work, assume that -exports_file does not work either and - # implicitly export all symbols. - save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -int foo(void) {} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' - -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - LDFLAGS="$save_LDFLAGS" - else - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' - archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' - fi - archive_cmds_need_lc='no' - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator=: - inherit_rpath=yes - link_all_deplibs=yes - ;; - - netbsd* | netbsdelf*-gnu) - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out - else - archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF - fi - hardcode_libdir_flag_spec='-R$libdir' - hardcode_direct=yes - hardcode_shlibpath_var=no - ;; - - newsos6) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct=yes - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator=: - hardcode_shlibpath_var=no - ;; - - *nto* | *qnx*) - ;; - - openbsd*) - if test -f /usr/libexec/ld.so; then - hardcode_direct=yes - hardcode_shlibpath_var=no - hardcode_direct_absolute=yes - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' - hardcode_libdir_flag_spec='${wl}-rpath,$libdir' - export_dynamic_flag_spec='${wl}-E' - else - case $host_os in - openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) - archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec='-R$libdir' - ;; - *) - archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - hardcode_libdir_flag_spec='${wl}-rpath,$libdir' - ;; - esac - fi - else - ld_shlibs=no - fi - ;; - - os2*) - hardcode_libdir_flag_spec='-L$libdir' - hardcode_minus_L=yes - allow_undefined_flag=unsupported - archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$ECHO DATA >> $output_objdir/$libname.def~$ECHO " SINGLE NONSHARED" >> $output_objdir/$libname.def~$ECHO EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' - old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' - ;; - - osf3*) - if test "$GCC" = yes; then - allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' - archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - allow_undefined_flag=' -expect_unresolved \*' - archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' - fi - archive_cmds_need_lc='no' - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator=: - ;; - - osf4* | osf5*) # as osf3* with the addition of -msym flag - if test "$GCC" = yes; then - allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' - archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - else - allow_undefined_flag=' -expect_unresolved \*' - archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' - archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ - $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' - - # Both c and cxx compiler support -rpath directly - hardcode_libdir_flag_spec='-rpath $libdir' - fi - archive_cmds_need_lc='no' - hardcode_libdir_separator=: - ;; - - solaris*) - no_undefined_flag=' -z defs' - if test "$GCC" = yes; then - wlarc='${wl}' - archive_cmds='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' - else - case `$CC -V 2>&1` in - *"Compilers 5.0"*) - wlarc='' - archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' - archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' - ;; - *) - wlarc='${wl}' - archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' - ;; - esac - fi - hardcode_libdir_flag_spec='-R$libdir' - hardcode_shlibpath_var=no - case $host_os in - solaris2.[0-5] | solaris2.[0-5].*) ;; - *) - # The compiler driver will combine and reorder linker options, - # but understands `-z linker_flag'. GCC discards it without `$wl', - # but is careful enough not to reorder. - # Supported since Solaris 2.6 (maybe 2.5.1?) - if test "$GCC" = yes; then - whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' - else - whole_archive_flag_spec='-z allextract$convenience -z defaultextract' - fi - ;; - esac - link_all_deplibs=yes - ;; - - sunos4*) - if test "x$host_vendor" = xsequent; then - # Use $CC to link under sequent, because it throws in some extra .o - # files that make .init and .fini sections work. - archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' - fi - hardcode_libdir_flag_spec='-L$libdir' - hardcode_direct=yes - hardcode_minus_L=yes - hardcode_shlibpath_var=no - ;; - - sysv4) - case $host_vendor in - sni) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct=yes # is this really true??? - ;; - siemens) - ## LD is ld it makes a PLAMLIB - ## CC just makes a GrossModule. - archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' - reload_cmds='$CC -r -o $output$reload_objs' - hardcode_direct=no - ;; - motorola) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct=no #Motorola manual says yes, but my tests say they lie - ;; - esac - runpath_var='LD_RUN_PATH' - hardcode_shlibpath_var=no - ;; - - sysv4.3*) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_shlibpath_var=no - export_dynamic_flag_spec='-Bexport' - ;; - - sysv4*MP*) - if test -d /usr/nec; then - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_shlibpath_var=no - runpath_var=LD_RUN_PATH - hardcode_runpath_var=yes - ld_shlibs=yes - fi - ;; - - sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) - no_undefined_flag='${wl}-z,text' - archive_cmds_need_lc=no - hardcode_shlibpath_var=no - runpath_var='LD_RUN_PATH' - - if test "$GCC" = yes; then - archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - fi - ;; - - sysv5* | sco3.2v5* | sco5v6*) - # Note: We can NOT use -z defs as we might desire, because we do not - # link with -lc, and that would cause any symbols used from libc to - # always be unresolved, which means just about no library would - # ever link correctly. If we're not using GNU ld we use -z text - # though, which does catch some bad symbols but isn't as heavy-handed - # as -z defs. - no_undefined_flag='${wl}-z,text' - allow_undefined_flag='${wl}-z,nodefs' - archive_cmds_need_lc=no - hardcode_shlibpath_var=no - hardcode_libdir_flag_spec='${wl}-R,$libdir' - hardcode_libdir_separator=':' - link_all_deplibs=yes - export_dynamic_flag_spec='${wl}-Bexport' - runpath_var='LD_RUN_PATH' - - if test "$GCC" = yes; then - archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - fi - ;; - - uts4*) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_shlibpath_var=no - ;; - - *) - ld_shlibs=no - ;; - esac - - if test x$host_vendor = xsni; then - case $host in - sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) - export_dynamic_flag_spec='${wl}-Blargedynsym' - ;; - esac - fi - fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 -$as_echo "$ld_shlibs" >&6; } -test "$ld_shlibs" = no && can_build_shared=no - -with_gnu_ld=$with_gnu_ld - - - - - - - - - - - - - - - -# -# Do we need to explicitly link libc? -# -case "x$archive_cmds_need_lc" in -x|xyes) - # Assume -lc should be added - archive_cmds_need_lc=yes - - if test "$enable_shared" = yes && test "$GCC" = yes; then - case $archive_cmds in - *'~'*) - # FIXME: we may have to deal with multi-command sequences. - ;; - '$CC '*) - # Test whether the compiler implicitly links with -lc since on some - # systems, -lgcc has to come before -lc. If gcc already passes -lc - # to ld, don't add -lc before -lgcc. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 -$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } - $RM conftest* - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } 2>conftest.err; then - soname=conftest - lib=conftest - libobjs=conftest.$ac_objext - deplibs= - wl=$lt_prog_compiler_wl - pic_flag=$lt_prog_compiler_pic - compiler_flags=-v - linker_flags=-v - verstring= - output_objdir=. - libname=conftest - lt_save_allow_undefined_flag=$allow_undefined_flag - allow_undefined_flag= - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 - (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } - then - archive_cmds_need_lc=no - else - archive_cmds_need_lc=yes - fi - allow_undefined_flag=$lt_save_allow_undefined_flag - else - cat conftest.err 1>&5 - fi - $RM conftest* - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $archive_cmds_need_lc" >&5 -$as_echo "$archive_cmds_need_lc" >&6; } - ;; - esac - fi - ;; -esac - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 -$as_echo_n "checking dynamic linker characteristics... " >&6; } - -if test "$GCC" = yes; then - case $host_os in - darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; - *) lt_awk_arg="/^libraries:/" ;; - esac - lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"` - if $ECHO "$lt_search_path_spec" | $GREP ';' >/dev/null ; then - # if the path contains ";" then we assume it to be the separator - # otherwise default to the standard path separator (i.e. ":") - it is - # assumed that no part of a normal pathname contains ";" but that should - # okay in the real world where ";" in dirpaths is itself problematic. - lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e 's/;/ /g'` - else - lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - fi - # Ok, now we have the path, separated by spaces, we can step through it - # and add multilib dir if necessary. - lt_tmp_lt_search_path_spec= - lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` - for lt_sys_path in $lt_search_path_spec; do - if test -d "$lt_sys_path/$lt_multi_os_dir"; then - lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" - else - test -d "$lt_sys_path" && \ - lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" - fi - done - lt_search_path_spec=`$ECHO $lt_tmp_lt_search_path_spec | awk ' -BEGIN {RS=" "; FS="/|\n";} { - lt_foo=""; - lt_count=0; - for (lt_i = NF; lt_i > 0; lt_i--) { - if ($lt_i != "" && $lt_i != ".") { - if ($lt_i == "..") { - lt_count++; - } else { - if (lt_count == 0) { - lt_foo="/" $lt_i lt_foo; - } else { - lt_count--; - } - } - } - } - if (lt_foo != "") { lt_freq[lt_foo]++; } - if (lt_freq[lt_foo] == 1) { print lt_foo; } -}'` - sys_lib_search_path_spec=`$ECHO $lt_search_path_spec` -else - sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" -fi -library_names_spec= -libname_spec='lib$name' -soname_spec= -shrext_cmds=".so" -postinstall_cmds= -postuninstall_cmds= -finish_cmds= -finish_eval= -shlibpath_var= -shlibpath_overrides_runpath=unknown -version_type=none -dynamic_linker="$host_os ld.so" -sys_lib_dlsearch_path_spec="/lib /usr/lib" -need_lib_prefix=unknown -hardcode_into_libs=no - -# when you set need_version to no, make sure it does not cause -set_version -# flags to be left without arguments -need_version=unknown - -case $host_os in -aix3*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' - shlibpath_var=LIBPATH - - # AIX 3 has no versioning support, so we append a major version to the name. - soname_spec='${libname}${release}${shared_ext}$major' - ;; - -aix[4-9]*) - version_type=linux - need_lib_prefix=no - need_version=no - hardcode_into_libs=yes - if test "$host_cpu" = ia64; then - # AIX 5 supports IA64 - library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - else - # With GCC up to 2.95.x, collect2 would create an import file - # for dependence libraries. The import file would start with - # the line `#! .'. This would cause the generated library to - # depend on `.', always an invalid library. This was fixed in - # development snapshots of GCC prior to 3.0. - case $host_os in - aix4 | aix4.[01] | aix4.[01].*) - if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' - echo ' yes ' - echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then - : - else - can_build_shared=no - fi - ;; - esac - # AIX (on Power*) has no versioning support, so currently we can not hardcode correct - # soname into executable. Probably we can add versioning support to - # collect2, so additional links can be useful in future. - if test "$aix_use_runtimelinking" = yes; then - # If using run time linking (on AIX 4.2 or later) use lib.so - # instead of lib.a to let people know that these are not - # typical AIX shared libraries. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - else - # We preserve .a as extension for shared libraries through AIX4.2 - # and later when we are not doing run time linking. - library_names_spec='${libname}${release}.a $libname.a' - soname_spec='${libname}${release}${shared_ext}$major' - fi - shlibpath_var=LIBPATH - fi - ;; - -amigaos*) - case $host_cpu in - powerpc) - # Since July 2007 AmigaOS4 officially supports .so libraries. - # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - ;; - m68k) - library_names_spec='$libname.ixlibrary $libname.a' - # Create ${libname}_ixlibrary.a entries in /sys/libs. - finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' - ;; - esac - ;; - -beos*) - library_names_spec='${libname}${shared_ext}' - dynamic_linker="$host_os ld.so" - shlibpath_var=LIBRARY_PATH - ;; - -bsdi[45]*) - version_type=linux - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" - sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" - # the default ld.so.conf also contains /usr/contrib/lib and - # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow - # libtool to hard-code these into programs - ;; - -cygwin* | mingw* | pw32* | cegcc*) - version_type=windows - shrext_cmds=".dll" - need_version=no - need_lib_prefix=no - - case $GCC,$host_os in - yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*) - library_names_spec='$libname.dll.a' - # DLL is installed to $(libdir)/../bin by postinstall_cmds - postinstall_cmds='base_file=`basename \${file}`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ - dldir=$destdir/`dirname \$dlpath`~ - test -d \$dldir || mkdir -p \$dldir~ - $install_prog $dir/$dlname \$dldir/$dlname~ - chmod a+x \$dldir/$dlname~ - if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then - eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; - fi' - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $RM \$dlpath' - shlibpath_overrides_runpath=yes - - case $host_os in - cygwin*) - # Cygwin DLLs use 'cyg' prefix rather than 'lib' - soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" - ;; - mingw* | cegcc*) - # MinGW DLLs use traditional 'lib' prefix - soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` - if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then - # It is most probably a Windows format PATH printed by - # mingw gcc, but we are running on Cygwin. Gcc prints its search - # path with ; separators, and with drive letters. We can handle the - # drive letters (cygwin fileutils understands them), so leave them, - # especially as we might pass files found there to a mingw objdump, - # which wouldn't understand a cygwinified path. Ahh. - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` - else - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - fi - ;; - pw32*) - # pw32 DLLs use 'pw' prefix rather than 'lib' - library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - ;; - esac - ;; - - *) - library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' - ;; - esac - dynamic_linker='Win32 ld.exe' - # FIXME: first we should search . and the directory the executable is in - shlibpath_var=PATH - ;; - -darwin* | rhapsody*) - dynamic_linker="$host_os dyld" - version_type=darwin - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' - soname_spec='${libname}${release}${major}$shared_ext' - shlibpath_overrides_runpath=yes - shlibpath_var=DYLD_LIBRARY_PATH - shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' - - sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" - sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' - ;; - -dgux*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -freebsd1*) - dynamic_linker=no - ;; - -freebsd* | dragonfly*) - # DragonFly does not have aout. When/if they implement a new - # versioning mechanism, adjust this. - if test -x /usr/bin/objformat; then - objformat=`/usr/bin/objformat` - else - case $host_os in - freebsd[123]*) objformat=aout ;; - *) objformat=elf ;; - esac - fi - version_type=freebsd-$objformat - case $version_type in - freebsd-elf*) - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - need_version=no - need_lib_prefix=no - ;; - freebsd-*) - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' - need_version=yes - ;; - esac - shlibpath_var=LD_LIBRARY_PATH - case $host_os in - freebsd2*) - shlibpath_overrides_runpath=yes - ;; - freebsd3.[01]* | freebsdelf3.[01]*) - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ - freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - *) # from 4.6 on, and DragonFly - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - esac - ;; - -gnu*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - hardcode_into_libs=yes - ;; - -hpux9* | hpux10* | hpux11*) - # Give a soname corresponding to the major version so that dld.sl refuses to - # link against other versions. - version_type=sunos - need_lib_prefix=no - need_version=no - case $host_cpu in - ia64*) - shrext_cmds='.so' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.so" - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - if test "X$HPUX_IA64_MODE" = X32; then - sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" - else - sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" - fi - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - hppa*64*) - shrext_cmds='.sl' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.sl" - shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - *) - shrext_cmds='.sl' - dynamic_linker="$host_os dld.sl" - shlibpath_var=SHLIB_PATH - shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - ;; - esac - # HP-UX runs *really* slowly unless shared libraries are mode 555. - postinstall_cmds='chmod 555 $lib' - ;; - -interix[3-9]*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - -irix5* | irix6* | nonstopux*) - case $host_os in - nonstopux*) version_type=nonstopux ;; - *) - if test "$lt_cv_prog_gnu_ld" = yes; then - version_type=linux - else - version_type=irix - fi ;; - esac - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' - case $host_os in - irix5* | nonstopux*) - libsuff= shlibsuff= - ;; - *) - case $LD in # libtool.m4 will add one of these switches to LD - *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") - libsuff= shlibsuff= libmagic=32-bit;; - *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") - libsuff=32 shlibsuff=N32 libmagic=N32;; - *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") - libsuff=64 shlibsuff=64 libmagic=64-bit;; - *) libsuff= shlibsuff= libmagic=never-match;; - esac - ;; - esac - shlibpath_var=LD_LIBRARY${shlibsuff}_PATH - shlibpath_overrides_runpath=no - sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" - sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" - hardcode_into_libs=yes - ;; - -# No shared lib support for Linux oldld, aout, or coff. -linux*oldld* | linux*aout* | linux*coff*) - dynamic_linker=no - ;; - -# This must be Linux ELF. -linux* | k*bsd*-gnu | kopensolaris*-gnu) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - # Some binutils ld are patched to set DT_RUNPATH - save_LDFLAGS=$LDFLAGS - save_libdir=$libdir - eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ - LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : - shlibpath_overrides_runpath=yes -fi -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - LDFLAGS=$save_LDFLAGS - libdir=$save_libdir - - # This implies no fast_install, which is unacceptable. - # Some rework will be needed to allow for fast_install - # before this can be enabled. - hardcode_into_libs=yes - - # Append ld.so.conf contents to the search path - if test -f /etc/ld.so.conf; then - lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` - sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" - fi - - # We used to test for /lib/ld.so.1 and disable shared libraries on - # powerpc, because MkLinux only supported shared libraries with the - # GNU dynamic linker. Since this was broken with cross compilers, - # most powerpc-linux boxes support dynamic linking these days and - # people can always --disable-shared, the test was removed, and we - # assume the GNU/Linux dynamic linker is in use. - dynamic_linker='GNU/Linux ld.so' - ;; - -netbsdelf*-gnu) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - dynamic_linker='NetBSD ld.elf_so' - ;; - -netbsd*) - version_type=sunos - need_lib_prefix=no - need_version=no - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - dynamic_linker='NetBSD (a.out) ld.so' - else - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='NetBSD ld.elf_so' - fi - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - -newsos6) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; - -*nto* | *qnx*) - version_type=qnx - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - dynamic_linker='ldqnx.so' - ;; - -openbsd*) - version_type=sunos - sys_lib_dlsearch_path_spec="/usr/lib" - need_lib_prefix=no - # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. - case $host_os in - openbsd3.3 | openbsd3.3.*) need_version=yes ;; - *) need_version=no ;; - esac - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - shlibpath_var=LD_LIBRARY_PATH - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - case $host_os in - openbsd2.[89] | openbsd2.[89].*) - shlibpath_overrides_runpath=no - ;; - *) - shlibpath_overrides_runpath=yes - ;; - esac - else - shlibpath_overrides_runpath=yes - fi - ;; - -os2*) - libname_spec='$name' - shrext_cmds=".dll" - need_lib_prefix=no - library_names_spec='$libname${shared_ext} $libname.a' - dynamic_linker='OS/2 ld.exe' - shlibpath_var=LIBPATH - ;; - -osf3* | osf4* | osf5*) - version_type=osf - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" - sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" - ;; - -rdos*) - dynamic_linker=no - ;; - -solaris*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - # ldd complains unless libraries are executable - postinstall_cmds='chmod +x $lib' - ;; - -sunos4*) - version_type=sunos - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - if test "$with_gnu_ld" = yes; then - need_lib_prefix=no - fi - need_version=yes - ;; - -sysv4 | sysv4.3*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - case $host_vendor in - sni) - shlibpath_overrides_runpath=no - need_lib_prefix=no - runpath_var=LD_RUN_PATH - ;; - siemens) - need_lib_prefix=no - ;; - motorola) - need_lib_prefix=no - need_version=no - shlibpath_overrides_runpath=no - sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' - ;; - esac - ;; - -sysv4*MP*) - if test -d /usr/nec ;then - version_type=linux - library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' - soname_spec='$libname${shared_ext}.$major' - shlibpath_var=LD_LIBRARY_PATH - fi - ;; - -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - version_type=freebsd-elf - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - if test "$with_gnu_ld" = yes; then - sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' - else - sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' - case $host_os in - sco3.2v5*) - sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" - ;; - esac - fi - sys_lib_dlsearch_path_spec='/usr/lib' - ;; - -tpf*) - # TPF is a cross-target only. Preferred cross-host = GNU/Linux. - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - -uts4*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -*) - dynamic_linker=no - ;; -esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 -$as_echo "$dynamic_linker" >&6; } -test "$dynamic_linker" = no && can_build_shared=no - -variables_saved_for_relink="PATH $shlibpath_var $runpath_var" -if test "$GCC" = yes; then - variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" -fi - -if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then - sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" -fi -if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then - sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" -fi - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 -$as_echo_n "checking how to hardcode library paths into programs... " >&6; } -hardcode_action= -if test -n "$hardcode_libdir_flag_spec" || - test -n "$runpath_var" || - test "X$hardcode_automatic" = "Xyes" ; then - - # We can hardcode non-existent directories. - if test "$hardcode_direct" != no && - # If the only mechanism to avoid hardcoding is shlibpath_var, we - # have to relink, otherwise we might link with an installed library - # when we should be linking with a yet-to-be-installed one - ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no && - test "$hardcode_minus_L" != no; then - # Linking always hardcodes the temporary library directory. - hardcode_action=relink - else - # We can link without hardcoding, and we can hardcode nonexisting dirs. - hardcode_action=immediate - fi -else - # We cannot hardcode anything, or else we can only hardcode existing - # directories. - hardcode_action=unsupported -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 -$as_echo "$hardcode_action" >&6; } - -if test "$hardcode_action" = relink || - test "$inherit_rpath" = yes; then - # Fast installation is not supported - enable_fast_install=no -elif test "$shlibpath_overrides_runpath" = yes || - test "$enable_shared" = no; then - # Fast installation is not necessary - enable_fast_install=needless -fi - - - - - - - if test "x$enable_dlopen" != xyes; then - enable_dlopen=unknown - enable_dlopen_self=unknown - enable_dlopen_self_static=unknown -else - lt_cv_dlopen=no - lt_cv_dlopen_libs= - - case $host_os in - beos*) - lt_cv_dlopen="load_add_on" - lt_cv_dlopen_libs= - lt_cv_dlopen_self=yes - ;; - - mingw* | pw32* | cegcc*) - lt_cv_dlopen="LoadLibrary" - lt_cv_dlopen_libs= - ;; - - cygwin*) - lt_cv_dlopen="dlopen" - lt_cv_dlopen_libs= - ;; - - darwin*) - # if libdl is installed we need to link against it - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 -$as_echo_n "checking for dlopen in -ldl... " >&6; } -if test "${ac_cv_lib_dl_dlopen+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldl $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dlopen (); -int -main () -{ -return dlopen (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_dl_dlopen=yes -else - ac_cv_lib_dl_dlopen=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 -$as_echo "$ac_cv_lib_dl_dlopen" >&6; } -if test "x$ac_cv_lib_dl_dlopen" = x""yes; then : - lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" -else - - lt_cv_dlopen="dyld" - lt_cv_dlopen_libs= - lt_cv_dlopen_self=yes - -fi - - ;; - - *) - ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" -if test "x$ac_cv_func_shl_load" = x""yes; then : - lt_cv_dlopen="shl_load" -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 -$as_echo_n "checking for shl_load in -ldld... " >&6; } -if test "${ac_cv_lib_dld_shl_load+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldld $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char shl_load (); -int -main () -{ -return shl_load (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_dld_shl_load=yes -else - ac_cv_lib_dld_shl_load=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 -$as_echo "$ac_cv_lib_dld_shl_load" >&6; } -if test "x$ac_cv_lib_dld_shl_load" = x""yes; then : - lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld" -else - ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" -if test "x$ac_cv_func_dlopen" = x""yes; then : - lt_cv_dlopen="dlopen" -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 -$as_echo_n "checking for dlopen in -ldl... " >&6; } -if test "${ac_cv_lib_dl_dlopen+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldl $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dlopen (); -int -main () -{ -return dlopen (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_dl_dlopen=yes -else - ac_cv_lib_dl_dlopen=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 -$as_echo "$ac_cv_lib_dl_dlopen" >&6; } -if test "x$ac_cv_lib_dl_dlopen" = x""yes; then : - lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 -$as_echo_n "checking for dlopen in -lsvld... " >&6; } -if test "${ac_cv_lib_svld_dlopen+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lsvld $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dlopen (); -int -main () -{ -return dlopen (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_svld_dlopen=yes -else - ac_cv_lib_svld_dlopen=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 -$as_echo "$ac_cv_lib_svld_dlopen" >&6; } -if test "x$ac_cv_lib_svld_dlopen" = x""yes; then : - lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 -$as_echo_n "checking for dld_link in -ldld... " >&6; } -if test "${ac_cv_lib_dld_dld_link+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldld $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dld_link (); -int -main () -{ -return dld_link (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_dld_dld_link=yes -else - ac_cv_lib_dld_dld_link=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 -$as_echo "$ac_cv_lib_dld_dld_link" >&6; } -if test "x$ac_cv_lib_dld_dld_link" = x""yes; then : - lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld" -fi - - -fi - - -fi - - -fi - - -fi - - -fi - - ;; - esac - - if test "x$lt_cv_dlopen" != xno; then - enable_dlopen=yes - else - enable_dlopen=no - fi - - case $lt_cv_dlopen in - dlopen) - save_CPPFLAGS="$CPPFLAGS" - test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" - - save_LDFLAGS="$LDFLAGS" - wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" - - save_LIBS="$LIBS" - LIBS="$lt_cv_dlopen_libs $LIBS" - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 -$as_echo_n "checking whether a program can dlopen itself... " >&6; } -if test "${lt_cv_dlopen_self+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - lt_cv_dlopen_self=cross -else - lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 - lt_status=$lt_dlunknown - cat > conftest.$ac_ext <<_LT_EOF -#line __oline__ "configure" -#include "confdefs.h" - -#if HAVE_DLFCN_H -#include -#endif - -#include - -#ifdef RTLD_GLOBAL -# define LT_DLGLOBAL RTLD_GLOBAL -#else -# ifdef DL_GLOBAL -# define LT_DLGLOBAL DL_GLOBAL -# else -# define LT_DLGLOBAL 0 -# endif -#endif - -/* We may have to define LT_DLLAZY_OR_NOW in the command line if we - find out it does not work in some platform. */ -#ifndef LT_DLLAZY_OR_NOW -# ifdef RTLD_LAZY -# define LT_DLLAZY_OR_NOW RTLD_LAZY -# else -# ifdef DL_LAZY -# define LT_DLLAZY_OR_NOW DL_LAZY -# else -# ifdef RTLD_NOW -# define LT_DLLAZY_OR_NOW RTLD_NOW -# else -# ifdef DL_NOW -# define LT_DLLAZY_OR_NOW DL_NOW -# else -# define LT_DLLAZY_OR_NOW 0 -# endif -# endif -# endif -# endif -#endif - -void fnord() { int i=42;} -int main () -{ - void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); - int status = $lt_dlunknown; - - if (self) - { - if (dlsym (self,"fnord")) status = $lt_dlno_uscore; - else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; - /* dlclose (self); */ - } - else - puts (dlerror ()); - - return status; -} -_LT_EOF - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 - (eval $ac_link) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then - (./conftest; exit; ) >&5 2>/dev/null - lt_status=$? - case x$lt_status in - x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; - x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; - x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; - esac - else : - # compilation failed - lt_cv_dlopen_self=no - fi -fi -rm -fr conftest* - - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 -$as_echo "$lt_cv_dlopen_self" >&6; } - - if test "x$lt_cv_dlopen_self" = xyes; then - wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 -$as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } -if test "${lt_cv_dlopen_self_static+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - lt_cv_dlopen_self_static=cross -else - lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 - lt_status=$lt_dlunknown - cat > conftest.$ac_ext <<_LT_EOF -#line __oline__ "configure" -#include "confdefs.h" - -#if HAVE_DLFCN_H -#include -#endif - -#include - -#ifdef RTLD_GLOBAL -# define LT_DLGLOBAL RTLD_GLOBAL -#else -# ifdef DL_GLOBAL -# define LT_DLGLOBAL DL_GLOBAL -# else -# define LT_DLGLOBAL 0 -# endif -#endif - -/* We may have to define LT_DLLAZY_OR_NOW in the command line if we - find out it does not work in some platform. */ -#ifndef LT_DLLAZY_OR_NOW -# ifdef RTLD_LAZY -# define LT_DLLAZY_OR_NOW RTLD_LAZY -# else -# ifdef DL_LAZY -# define LT_DLLAZY_OR_NOW DL_LAZY -# else -# ifdef RTLD_NOW -# define LT_DLLAZY_OR_NOW RTLD_NOW -# else -# ifdef DL_NOW -# define LT_DLLAZY_OR_NOW DL_NOW -# else -# define LT_DLLAZY_OR_NOW 0 -# endif -# endif -# endif -# endif -#endif - -void fnord() { int i=42;} -int main () -{ - void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); - int status = $lt_dlunknown; - - if (self) - { - if (dlsym (self,"fnord")) status = $lt_dlno_uscore; - else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; - /* dlclose (self); */ - } - else - puts (dlerror ()); - - return status; -} -_LT_EOF - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 - (eval $ac_link) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then - (./conftest; exit; ) >&5 2>/dev/null - lt_status=$? - case x$lt_status in - x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; - x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; - x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; - esac - else : - # compilation failed - lt_cv_dlopen_self_static=no - fi -fi -rm -fr conftest* - - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 -$as_echo "$lt_cv_dlopen_self_static" >&6; } - fi - - CPPFLAGS="$save_CPPFLAGS" - LDFLAGS="$save_LDFLAGS" - LIBS="$save_LIBS" - ;; - esac - - case $lt_cv_dlopen_self in - yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; - *) enable_dlopen_self=unknown ;; - esac - - case $lt_cv_dlopen_self_static in - yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; - *) enable_dlopen_self_static=unknown ;; - esac -fi - - - - - - - - - - - - - - - - - -striplib= -old_striplib= -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 -$as_echo_n "checking whether stripping libraries is possible... " >&6; } -if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then - test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" - test -z "$striplib" && striplib="$STRIP --strip-unneeded" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -else -# FIXME - insert some real tests, host_os isn't really good enough - case $host_os in - darwin*) - if test -n "$STRIP" ; then - striplib="$STRIP -x" - old_striplib="$STRIP -S" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - fi - ;; - *) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - ;; - esac -fi - - - - - - - - - - - - - # Report which library types will actually be built - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 -$as_echo_n "checking if libtool supports shared libraries... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 -$as_echo "$can_build_shared" >&6; } - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 -$as_echo_n "checking whether to build shared libraries... " >&6; } - test "$can_build_shared" = "no" && enable_shared=no - - # On AIX, shared libraries and static libraries use the same namespace, and - # are all built from PIC. - case $host_os in - aix3*) - test "$enable_shared" = yes && enable_static=no - if test -n "$RANLIB"; then - archive_cmds="$archive_cmds~\$RANLIB \$lib" - postinstall_cmds='$RANLIB $lib' - fi - ;; - - aix[4-9]*) - if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then - test "$enable_shared" = yes && enable_static=no - fi - ;; - esac - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 -$as_echo "$enable_shared" >&6; } - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 -$as_echo_n "checking whether to build static libraries... " >&6; } - # Make sure either enable_shared or enable_static is yes. - test "$enable_shared" = yes || enable_static=yes - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 -$as_echo "$enable_static" >&6; } - - - - -fi -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -CC="$lt_save_CC" - - - - - - - - - - - - - - ac_config_commands="$ac_config_commands libtool" - - - - -# Only expand once: - - - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. -set dummy ${ac_tool_prefix}gcc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_CC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_CC="${ac_tool_prefix}gcc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_CC"; then - ac_ct_CC=$CC - # Extract the first word of "gcc", so it can be a program name with args. -set dummy gcc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_CC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_CC="gcc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -$as_echo "$ac_ct_CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_CC" = x; then - CC="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - CC=$ac_ct_CC - fi -else - CC="$ac_cv_prog_CC" -fi - -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. -set dummy ${ac_tool_prefix}cc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_CC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_CC="${ac_tool_prefix}cc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - fi -fi -if test -z "$CC"; then - # Extract the first word of "cc", so it can be a program name with args. -set dummy cc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_CC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else - ac_prog_rejected=no -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then - ac_prog_rejected=yes - continue - fi - ac_cv_prog_CC="cc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -if test $ac_prog_rejected = yes; then - # We found a bogon in the path, so make sure we never use it. - set dummy $ac_cv_prog_CC - shift - if test $@%:@ != 0; then - # We chose a different compiler from the bogus one. - # However, it has the same basename, so the bogon will be chosen - # first if we set CC to just the basename; use the full file name. - shift - ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" - fi -fi -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - for ac_prog in cl.exe - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_CC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_CC="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$CC" && break - done -fi -if test -z "$CC"; then - ac_ct_CC=$CC - for ac_prog in cl.exe -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_CC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_CC="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -$as_echo "$ac_ct_CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$ac_ct_CC" && break -done - - if test "x$ac_ct_CC" = x; then - CC="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - CC=$ac_ct_CC - fi -fi - -fi - - -test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error "no acceptable C compiler found in \$PATH -See \`config.log' for more details." "$LINENO" 5; } - -# Provide some information about the compiler. -$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 -set X $ac_compile -ac_compiler=$2 -for ac_option in --version -v -V -qversion; do - { { ac_try="$ac_compiler $ac_option >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compiler $ac_option >&5") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - sed '10a\ -... rest of stderr output deleted ... - 10q' conftest.err >conftest.er1 - cat conftest.er1 >&5 - fi - rm -f conftest.er1 conftest.err - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } -done - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 -$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } -if test "${ac_cv_c_compiler_gnu+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ -#ifndef __GNUC__ - choke me -#endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_compiler_gnu=yes -else - ac_compiler_gnu=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -ac_cv_c_compiler_gnu=$ac_compiler_gnu - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 -$as_echo "$ac_cv_c_compiler_gnu" >&6; } -if test $ac_compiler_gnu = yes; then - GCC=yes -else - GCC= -fi -ac_test_CFLAGS=${CFLAGS+set} -ac_save_CFLAGS=$CFLAGS -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 -$as_echo_n "checking whether $CC accepts -g... " >&6; } -if test "${ac_cv_prog_cc_g+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_save_c_werror_flag=$ac_c_werror_flag - ac_c_werror_flag=yes - ac_cv_prog_cc_g=no - CFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_g=yes -else - CFLAGS="" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - -else - ac_c_werror_flag=$ac_save_c_werror_flag - CFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_g=yes -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_c_werror_flag=$ac_save_c_werror_flag -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 -$as_echo "$ac_cv_prog_cc_g" >&6; } -if test "$ac_test_CFLAGS" = set; then - CFLAGS=$ac_save_CFLAGS -elif test $ac_cv_prog_cc_g = yes; then - if test "$GCC" = yes; then - CFLAGS="-g -O2" - else - CFLAGS="-g" - fi -else - if test "$GCC" = yes; then - CFLAGS="-O2" - else - CFLAGS= - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 -$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } -if test "${ac_cv_prog_cc_c89+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_cv_prog_cc_c89=no -ac_save_CC=$CC -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#include -#include -/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ -struct buf { int x; }; -FILE * (*rcsopen) (struct buf *, struct stat *, int); -static char *e (p, i) - char **p; - int i; -{ - return p[i]; -} -static char *f (char * (*g) (char **, int), char **p, ...) -{ - char *s; - va_list v; - va_start (v,p); - s = g (p, va_arg (v,int)); - va_end (v); - return s; -} - -/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has - function prototypes and stuff, but not '\xHH' hex character constants. - These don't provoke an error unfortunately, instead are silently treated - as 'x'. The following induces an error, until -std is added to get - proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an - array size at least. It's necessary to write '\x00'==0 to get something - that's true only with -std. */ -int osf4_cc_array ['\x00' == 0 ? 1 : -1]; - -/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters - inside strings and character constants. */ -#define FOO(x) 'x' -int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; - -int test (int i, double x); -struct s1 {int (*f) (int a);}; -struct s2 {int (*f) (double a);}; -int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); -int argc; -char **argv; -int -main () -{ -return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; - ; - return 0; -} -_ACEOF -for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ - -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" -do - CC="$ac_save_CC $ac_arg" - if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_c89=$ac_arg -fi -rm -f core conftest.err conftest.$ac_objext - test "x$ac_cv_prog_cc_c89" != "xno" && break -done -rm -f conftest.$ac_ext -CC=$ac_save_CC - -fi -# AC_CACHE_VAL -case "x$ac_cv_prog_cc_c89" in - x) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -$as_echo "none needed" >&6; } ;; - xno) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 -$as_echo "unsupported" >&6; } ;; - *) - CC="$CC $ac_cv_prog_cc_c89" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 -$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; -esac -if test "x$ac_cv_prog_cc_c89" != xno; then : - -fi - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -depcc="$CC" am_compiler_list= - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 -$as_echo_n "checking dependency style of $depcc... " >&6; } -if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then - # We make a subdir and do the tests there. Otherwise we can end up - # making bogus files that we don't know about and never remove. For - # instance it was reported that on HP-UX the gcc test will end up - # making a dummy file named `D' -- because `-MD' means `put the output - # in D'. - mkdir conftest.dir - # Copy depcomp to subdir because otherwise we won't find it if we're - # using a relative directory. - cp "$am_depcomp" conftest.dir - cd conftest.dir - # We will build objects and dependencies in a subdirectory because - # it helps to detect inapplicable dependency modes. For instance - # both Tru64's cc and ICC support -MD to output dependencies as a - # side effect of compilation, but ICC will put the dependencies in - # the current directory while Tru64 will put them in the object - # directory. - mkdir sub - - am_cv_CC_dependencies_compiler_type=none - if test "$am_compiler_list" = ""; then - am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` - fi - am__universal=false - case " $depcc " in #( - *\ -arch\ *\ -arch\ *) am__universal=true ;; - esac - - for depmode in $am_compiler_list; do - # Setup a source with many dependencies, because some compilers - # like to wrap large dependency lists on column 80 (with \), and - # we should not choose a depcomp mode which is confused by this. - # - # We need to recreate these files for each test, as the compiler may - # overwrite some of them when testing with obscure command lines. - # This happens at least with the AIX C compiler. - : > sub/conftest.c - for i in 1 2 3 4 5 6; do - echo '#include "conftst'$i'.h"' >> sub/conftest.c - # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with - # Solaris 8's {/usr,}/bin/sh. - touch sub/conftst$i.h - done - echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf - - # We check with `-c' and `-o' for the sake of the "dashmstdout" - # mode. It turns out that the SunPro C++ compiler does not properly - # handle `-M -o', and we need to detect this. Also, some Intel - # versions had trouble with output in subdirs - am__obj=sub/conftest.${OBJEXT-o} - am__minus_obj="-o $am__obj" - case $depmode in - gcc) - # This depmode causes a compiler race in universal mode. - test "$am__universal" = false || continue - ;; - nosideeffect) - # after this tag, mechanisms are not by side-effect, so they'll - # only be used when explicitly requested - if test "x$enable_dependency_tracking" = xyes; then - continue - else - break - fi - ;; - msvisualcpp | msvcmsys) - # This compiler won't grok `-c -o', but also, the minuso test has - # not run yet. These depmodes are late enough in the game, and - # so weak that their functioning should not be impacted. - am__obj=conftest.${OBJEXT-o} - am__minus_obj= - ;; - none) break ;; - esac - if depmode=$depmode \ - source=sub/conftest.c object=$am__obj \ - depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ - $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ - >/dev/null 2>conftest.err && - grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && - grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && - grep $am__obj sub/conftest.Po > /dev/null 2>&1 && - ${MAKE-make} -s -f confmf > /dev/null 2>&1; then - # icc doesn't choke on unknown options, it will just issue warnings - # or remarks (even with -Werror). So we grep stderr for any message - # that says an option was ignored or not supported. - # When given -MP, icc 7.0 and 7.1 complain thusly: - # icc: Command line warning: ignoring option '-M'; no argument required - # The diagnosis changed in icc 8.0: - # icc: Command line remark: option '-MP' not supported - if (grep 'ignoring option' conftest.err || - grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else - am_cv_CC_dependencies_compiler_type=$depmode - break - fi - fi - done - - cd .. - rm -rf conftest.dir -else - am_cv_CC_dependencies_compiler_type=none -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 -$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } -CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type - - if - test "x$enable_dependency_tracking" != xno \ - && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then - am__fastdepCC_TRUE= - am__fastdepCC_FALSE='#' -else - am__fastdepCC_TRUE='#' - am__fastdepCC_FALSE= -fi - - - -# Extract the first word of "ar", so it can be a program name with args. -set dummy ar; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_AR+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $AR in - [\\/]* | ?:[\\/]*) - ac_cv_path_AR="$AR" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_AR="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -AR=$ac_cv_path_AR -if test -n "$AR"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 -$as_echo "$AR" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to include shadow password support" >&5 -$as_echo_n "checking whether to include shadow password support... " >&6; } -@%:@ Check whether --enable-shadow was given. -if test "${enable_shadow+set}" = set; then : - enableval=$enable_shadow; - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - $as_echo "@%:@define HAVE_SHADOW_PASSWORDS 1" >>confdefs.h - - shadow_passwords=yes - -else - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - shadow_passwords=no - - -fi - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for socket in -lsocket" >&5 -$as_echo_n "checking for socket in -lsocket... " >&6; } -if test "${ac_cv_lib_socket_socket+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lsocket $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char socket (); -int -main () -{ -return socket (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_socket_socket=yes -else - ac_cv_lib_socket_socket=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_socket" >&5 -$as_echo "$ac_cv_lib_socket_socket" >&6; } -if test "x$ac_cv_lib_socket_socket" = x""yes; then : - cat >>confdefs.h <<_ACEOF -@%:@define HAVE_LIBSOCKET 1 -_ACEOF - - LIBS="-lsocket $LIBS" - -fi - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyaddr in -lnsl" >&5 -$as_echo_n "checking for gethostbyaddr in -lnsl... " >&6; } -if test "${ac_cv_lib_nsl_gethostbyaddr+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lnsl $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char gethostbyaddr (); -int -main () -{ -return gethostbyaddr (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_nsl_gethostbyaddr=yes -else - ac_cv_lib_nsl_gethostbyaddr=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nsl_gethostbyaddr" >&5 -$as_echo "$ac_cv_lib_nsl_gethostbyaddr" >&6; } -if test "x$ac_cv_lib_nsl_gethostbyaddr" = x""yes; then : - cat >>confdefs.h <<_ACEOF -@%:@define HAVE_LIBNSL 1 -_ACEOF - - LIBS="-lnsl $LIBS" - -fi - - -gethostbyaddrrstyle="" -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking gethostbyaddr_r() syntax" >&5 -$as_echo_n "checking gethostbyaddr_r() syntax... " >&6; } -case "$host" in -*-freebsd*) - -$as_echo "@%:@define GETHOSTBYADDR_R /**/" >>confdefs.h - - -$as_echo "@%:@define GETHOSTBYADDRRSTYLE_BSD /**/" >>confdefs.h - - gethostbyaddrrstyle=BSD - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: FreeBSD overridden to BSD-style" >&5 -$as_echo "$as_me: WARNING: FreeBSD overridden to BSD-style" >&2;} - ;; -esac -if test "x$gethostbyaddrrstyle" = "x"; then - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -#include -#include - -int -main () -{ - gethostbyaddr_r(NULL, 0, 0, NULL, NULL, 0, NULL, NULL) - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - - $as_echo "@%:@define GETHOSTBYADDR_R 1" >>confdefs.h - - -$as_echo "@%:@define GETHOSTBYADDRRSTYLE_GNU /**/" >>confdefs.h - - gethostbyaddrrstyle=GNU - -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -if test "x$gethostbyaddrrstyle" = "x"; then - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -#include -#include - -int -main () -{ - gethostbyaddr_r(NULL, 0, 0, NULL, NULL, 0, NULL) - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - - $as_echo "@%:@define GETHOSTBYADDR_R 1" >>confdefs.h - - -$as_echo "@%:@define GETHOSTBYADDRRSTYLE_SYSV /**/" >>confdefs.h - - gethostbyaddrrstyle=SYSV - -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -if test "x$gethostbyaddrrstyle" = "x"; then - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -#include -#include - -int -main () -{ - gethostbyaddr(NULL, 0, 0) - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - - $as_echo "@%:@define GETHOSTBYADDR_R 1" >>confdefs.h - - $as_echo "@%:@define GETHOSTBYADDRRSTYLE_BSD 1" >>confdefs.h - - gethostbyaddrrstyle=BSD - -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi - -if test "x$gethostbyaddrrstyle" = "x"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: none! It must not exist, here." >&5 -$as_echo "none! It must not exist, here." >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${gethostbyaddrrstyle}-style" >&5 -$as_echo "${gethostbyaddrrstyle}-style" >&6; } -fi - -if test "x$gethostbyaddrrstyle" = "xBSD"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: ****** BSD-style gethostbyaddr might NOT be thread-safe! ****** " >&5 -$as_echo "$as_me: WARNING: ****** BSD-style gethostbyaddr might NOT be thread-safe! ****** " >&2;} -fi - -gethostbynamerstyle="" -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking gethostbyname_r() syntax" >&5 -$as_echo_n "checking gethostbyname_r() syntax... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -#include -#include - -int -main () -{ - gethostbyname_r(NULL, NULL, NULL, 0, NULL, NULL) - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - - -$as_echo "@%:@define GETHOSTBYNAME_R /**/" >>confdefs.h - - -$as_echo "@%:@define GETHOSTBYNAMERSTYLE_GNU /**/" >>confdefs.h - - gethostbynamerstyle=GNU - -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -if test "x$gethostbynamerstyle" = "x"; then - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -#include -#include - -int -main () -{ - gethostbyname_r(NULL, NULL, NULL, 0, NULL) - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - - $as_echo "@%:@define GETHOSTBYNAME_R 1" >>confdefs.h - - -$as_echo "@%:@define GETHOSTBYNAMERSTYLE_SYSV /**/" >>confdefs.h - - gethostbynamerstyle=SYSV - -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -if test "x$gethostbynamerstyle" = "x"; then - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -#include -#include - -int -main () -{ - gethostbyname(NULL) - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - - $as_echo "@%:@define GETHOSTBYNAME_R 1" >>confdefs.h - - -$as_echo "@%:@define GETHOSTBYNAMERSTYLE_BSD /**/" >>confdefs.h - - gethostbynamerstyle=BSD - -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi - -if test "x$gethostbynamerstyle" = "x"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: none! It must not exist, here." >&5 -$as_echo "none! It must not exist, here." >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${gethostbynamerstyle}-style" >&5 -$as_echo "${gethostbynamerstyle}-style" >&6; } -fi - -if test "x$gethostbynamerstyle" = "xBSD"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: ****** BSD-style gethostbyname might NOT be thread-safe! ****** " >&5 -$as_echo "$as_me: WARNING: ****** BSD-style gethostbyname might NOT be thread-safe! ****** " >&2;} -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for crypt in -lcrypt" >&5 -$as_echo_n "checking for crypt in -lcrypt... " >&6; } -if test "${ac_cv_lib_crypt_crypt+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lcrypt $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char crypt (); -int -main () -{ -return crypt (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_crypt_crypt=yes -else - ac_cv_lib_crypt_crypt=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_crypt_crypt" >&5 -$as_echo "$ac_cv_lib_crypt_crypt" >&6; } -if test "x$ac_cv_lib_crypt_crypt" = x""yes; then : - cat >>confdefs.h <<_ACEOF -@%:@define HAVE_LIBCRYPT 1 -_ACEOF - - LIBS="-lcrypt $LIBS" - -fi - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5 -$as_echo_n "checking whether byte ordering is bigendian... " >&6; } -if test "${ac_cv_c_bigendian+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_cv_c_bigendian=unknown - # See if we're dealing with a universal compiler. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifndef __APPLE_CC__ - not a universal capable compiler - #endif - typedef int dummy; - -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - - # Check for potential -arch flags. It is not universal unless - # there are at least two -arch flags with different values. - ac_arch= - ac_prev= - for ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do - if test -n "$ac_prev"; then - case $ac_word in - i?86 | x86_64 | ppc | ppc64) - if test -z "$ac_arch" || test "$ac_arch" = "$ac_word"; then - ac_arch=$ac_word - else - ac_cv_c_bigendian=universal - break - fi - ;; - esac - ac_prev= - elif test "x$ac_word" = "x-arch"; then - ac_prev=arch - fi - done -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - if test $ac_cv_c_bigendian = unknown; then - # See if sys/param.h defines the BYTE_ORDER macro. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - #include - -int -main () -{ -#if ! (defined BYTE_ORDER && defined BIG_ENDIAN \ - && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \ - && LITTLE_ENDIAN) - bogus endian macros - #endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - # It does; now see whether it defined to BIG_ENDIAN or not. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - #include - -int -main () -{ -#if BYTE_ORDER != BIG_ENDIAN - not big endian - #endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_c_bigendian=yes -else - ac_cv_c_bigendian=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - fi - if test $ac_cv_c_bigendian = unknown; then - # See if defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris). - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -int -main () -{ -#if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN) - bogus endian macros - #endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - # It does; now see whether it defined to _BIG_ENDIAN or not. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -int -main () -{ -#ifndef _BIG_ENDIAN - not big endian - #endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_c_bigendian=yes -else - ac_cv_c_bigendian=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - fi - if test $ac_cv_c_bigendian = unknown; then - # Compile a test program. - if test "$cross_compiling" = yes; then : - # Try to guess by grepping values from an object file. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -short int ascii_mm[] = - { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; - short int ascii_ii[] = - { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; - int use_ascii (int i) { - return ascii_mm[i] + ascii_ii[i]; - } - short int ebcdic_ii[] = - { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; - short int ebcdic_mm[] = - { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; - int use_ebcdic (int i) { - return ebcdic_mm[i] + ebcdic_ii[i]; - } - extern int foo; - -int -main () -{ -return use_ascii (foo) == use_ebcdic (foo); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then - ac_cv_c_bigendian=yes - fi - if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then - if test "$ac_cv_c_bigendian" = unknown; then - ac_cv_c_bigendian=no - else - # finding both strings is unlikely to happen, but who knows? - ac_cv_c_bigendian=unknown - fi - fi -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ - - /* Are we little or big endian? From Harbison&Steele. */ - union - { - long int l; - char c[sizeof (long int)]; - } u; - u.l = 1; - return u.c[sizeof (long int) - 1] == 1; - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - ac_cv_c_bigendian=no -else - ac_cv_c_bigendian=yes -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5 -$as_echo "$ac_cv_c_bigendian" >&6; } - case $ac_cv_c_bigendian in #( - yes) - $as_echo "@%:@define WORDS_BIGENDIAN 1" >>confdefs.h -;; #( - no) - ;; #( - universal) - -$as_echo "@%:@define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h - - ;; #( - *) - as_fn_error "unknown endianness - presetting ac_cv_c_bigendian=no (or yes) will help" "$LINENO" 5 ;; - esac - -if test $ac_cv_c_bigendian = yes; then - $as_echo "@%:@define BIG_ENDIAN 1" >>confdefs.h - -else - $as_echo "@%:@define LITTLE_ENDIAN 1" >>confdefs.h - -fi - -ac_header_dirent=no -for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h; do - as_ac_Header=`$as_echo "ac_cv_header_dirent_$ac_hdr" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_hdr that defines DIR" >&5 -$as_echo_n "checking for $ac_hdr that defines DIR... " >&6; } -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include <$ac_hdr> - -int -main () -{ -if ((DIR *) 0) -return 0; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - eval "$as_ac_Header=yes" -else - eval "$as_ac_Header=no" -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -eval ac_res=\$$as_ac_Header - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -eval as_val=\$$as_ac_Header - if test "x$as_val" = x""yes; then : - cat >>confdefs.h <<_ACEOF -@%:@define `$as_echo "HAVE_$ac_hdr" | $as_tr_cpp` 1 -_ACEOF - -ac_header_dirent=$ac_hdr; break -fi - -done -# Two versions of opendir et al. are in -ldir and -lx on SCO Xenix. -if test $ac_header_dirent = dirent.h; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5 -$as_echo_n "checking for library containing opendir... " >&6; } -if test "${ac_cv_search_opendir+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_func_search_save_LIBS=$LIBS -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char opendir (); -int -main () -{ -return opendir (); - ; - return 0; -} -_ACEOF -for ac_lib in '' dir; do - if test -z "$ac_lib"; then - ac_res="none required" - else - ac_res=-l$ac_lib - LIBS="-l$ac_lib $ac_func_search_save_LIBS" - fi - if ac_fn_c_try_link "$LINENO"; then : - ac_cv_search_opendir=$ac_res -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext - if test "${ac_cv_search_opendir+set}" = set; then : - break -fi -done -if test "${ac_cv_search_opendir+set}" = set; then : - -else - ac_cv_search_opendir=no -fi -rm conftest.$ac_ext -LIBS=$ac_func_search_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5 -$as_echo "$ac_cv_search_opendir" >&6; } -ac_res=$ac_cv_search_opendir -if test "$ac_res" != no; then : - test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" - -fi - -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5 -$as_echo_n "checking for library containing opendir... " >&6; } -if test "${ac_cv_search_opendir+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_func_search_save_LIBS=$LIBS -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char opendir (); -int -main () -{ -return opendir (); - ; - return 0; -} -_ACEOF -for ac_lib in '' x; do - if test -z "$ac_lib"; then - ac_res="none required" - else - ac_res=-l$ac_lib - LIBS="-l$ac_lib $ac_func_search_save_LIBS" - fi - if ac_fn_c_try_link "$LINENO"; then : - ac_cv_search_opendir=$ac_res -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext - if test "${ac_cv_search_opendir+set}" = set; then : - break -fi -done -if test "${ac_cv_search_opendir+set}" = set; then : - -else - ac_cv_search_opendir=no -fi -rm conftest.$ac_ext -LIBS=$ac_func_search_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5 -$as_echo "$ac_cv_search_opendir" >&6; } -ac_res=$ac_cv_search_opendir -if test "$ac_res" != no; then : - test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" - -fi - -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 -$as_echo_n "checking for ANSI C header files... " >&6; } -if test "${ac_cv_header_stdc+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#include -#include - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_header_stdc=yes -else - ac_cv_header_stdc=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - -if test $ac_cv_header_stdc = yes; then - # SunOS 4.x string.h does not declare mem*, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "memchr" >/dev/null 2>&1; then : - -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "free" >/dev/null 2>&1; then : - -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. - if test "$cross_compiling" = yes; then : - : -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#if ((' ' & 0x0FF) == 0x020) -# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') -# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) -#else -# define ISLOWER(c) \ - (('a' <= (c) && (c) <= 'i') \ - || ('j' <= (c) && (c) <= 'r') \ - || ('s' <= (c) && (c) <= 'z')) -# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) -#endif - -#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) -int -main () -{ - int i; - for (i = 0; i < 256; i++) - if (XOR (islower (i), ISLOWER (i)) - || toupper (i) != TOUPPER (i)) - return 2; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - -else - ac_cv_header_stdc=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - -fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 -$as_echo "$ac_cv_header_stdc" >&6; } -if test $ac_cv_header_stdc = yes; then - -$as_echo "@%:@define STDC_HEADERS 1" >>confdefs.h - -fi - -for ac_header in crypt.h signal.h sys/signal.h sys/stat.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" -eval as_val=\$$as_ac_Header - if test "x$as_val" = x""yes; then : - cat >>confdefs.h <<_ACEOF -@%:@define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - -fi - -done - -for ac_header in fcntl.h sys/fcntl.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" -eval as_val=\$$as_ac_Header - if test "x$as_val" = x""yes; then : - cat >>confdefs.h <<_ACEOF -@%:@define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - -fi - -done - -for ac_header in sys/utsname.h getopt.h unistd.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" -eval as_val=\$$as_ac_Header - if test "x$as_val" = x""yes; then : - cat >>confdefs.h <<_ACEOF -@%:@define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - -fi - -done - -for ac_header in sys/file.h termios.h sys/ioctl.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" -eval as_val=\$$as_ac_Header - if test "x$as_val" = x""yes; then : - cat >>confdefs.h <<_ACEOF -@%:@define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - -fi - -done - -for ac_header in netdb.h syslog.h pwd.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" -eval as_val=\$$as_ac_Header - if test "x$as_val" = x""yes; then : - cat >>confdefs.h <<_ACEOF -@%:@define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - -fi - -done - -for ac_header in sys/socket.h netinet/in.h arpa/inet.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" -eval as_val=\$$as_ac_Header - if test "x$as_val" = x""yes; then : - cat >>confdefs.h <<_ACEOF -@%:@define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - -fi - -done - -if test "$shadow_passwords" = "yes" -then - ac_fn_c_check_header_mongrel "$LINENO" "shadow.h" "ac_cv_header_shadow_h" "$ac_includes_default" -if test "x$ac_cv_header_shadow_h" = x""yes; then : - -fi - - -fi - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5 -$as_echo_n "checking for an ANSI C-conforming const... " >&6; } -if test "${ac_cv_c_const+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ -/* FIXME: Include the comments suggested by Paul. */ -#ifndef __cplusplus - /* Ultrix mips cc rejects this. */ - typedef int charset[2]; - const charset cs; - /* SunOS 4.1.1 cc rejects this. */ - char const *const *pcpcc; - char **ppc; - /* NEC SVR4.0.2 mips cc rejects this. */ - struct point {int x, y;}; - static struct point const zero = {0,0}; - /* AIX XL C 1.02.0.0 rejects this. - It does not let you subtract one const X* pointer from another in - an arm of an if-expression whose if-part is not a constant - expression */ - const char *g = "string"; - pcpcc = &g + (g ? g-g : 0); - /* HPUX 7.0 cc rejects these. */ - ++pcpcc; - ppc = (char**) pcpcc; - pcpcc = (char const *const *) ppc; - { /* SCO 3.2v4 cc rejects this. */ - char *t; - char const *s = 0 ? (char *) 0 : (char const *) 0; - - *t++ = 0; - if (s) return 0; - } - { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ - int x[] = {25, 17}; - const int *foo = &x[0]; - ++foo; - } - { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ - typedef const int *iptr; - iptr p = 0; - ++p; - } - { /* AIX XL C 1.02.0.0 rejects this saying - "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ - struct s { int j; const int *ap[3]; }; - struct s *b; b->j = 5; - } - { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ - const int foo = 10; - if (!foo) return 0; - } - return !cs[0] && !zero.x; -#endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_c_const=yes -else - ac_cv_c_const=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5 -$as_echo "$ac_cv_c_const" >&6; } -if test $ac_cv_c_const = no; then - -$as_echo "@%:@define const /**/" >>confdefs.h - -fi - -ac_fn_c_check_type "$LINENO" "off_t" "ac_cv_type_off_t" "$ac_includes_default" -if test "x$ac_cv_type_off_t" = x""yes; then : - -else - -cat >>confdefs.h <<_ACEOF -@%:@define off_t long int -_ACEOF - -fi - -ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" -if test "x$ac_cv_type_size_t" = x""yes; then : - -else - -cat >>confdefs.h <<_ACEOF -@%:@define size_t unsigned int -_ACEOF - -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether time.h and sys/time.h may both be included" >&5 -$as_echo_n "checking whether time.h and sys/time.h may both be included... " >&6; } -if test "${ac_cv_header_time+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#include - -int -main () -{ -if ((struct tm *) 0) -return 0; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_header_time=yes -else - ac_cv_header_time=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_time" >&5 -$as_echo "$ac_cv_header_time" >&6; } -if test $ac_cv_header_time = yes; then - -$as_echo "@%:@define TIME_WITH_SYS_TIME 1" >>confdefs.h - -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether struct tm is in sys/time.h or time.h" >&5 -$as_echo_n "checking whether struct tm is in sys/time.h or time.h... " >&6; } -if test "${ac_cv_struct_tm+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include - -int -main () -{ -struct tm tm; - int *p = &tm.tm_sec; - return !p; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_struct_tm=time.h -else - ac_cv_struct_tm=sys/time.h -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_struct_tm" >&5 -$as_echo "$ac_cv_struct_tm" >&6; } -if test $ac_cv_struct_tm = sys/time.h; then - -$as_echo "@%:@define TM_IN_SYS_TIME 1" >>confdefs.h - -fi - - -if test $ac_cv_c_compiler_gnu = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC needs -traditional" >&5 -$as_echo_n "checking whether $CC needs -traditional... " >&6; } -if test "${ac_cv_prog_gcc_traditional+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_pattern="Autoconf.*'x'" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -Autoconf TIOCGETP -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "$ac_pattern" >/dev/null 2>&1; then : - ac_cv_prog_gcc_traditional=yes -else - ac_cv_prog_gcc_traditional=no -fi -rm -f conftest* - - - if test $ac_cv_prog_gcc_traditional = no; then - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -Autoconf TCGETA -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "$ac_pattern" >/dev/null 2>&1; then : - ac_cv_prog_gcc_traditional=yes -fi -rm -f conftest* - - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_gcc_traditional" >&5 -$as_echo "$ac_cv_prog_gcc_traditional" >&6; } - if test $ac_cv_prog_gcc_traditional = yes; then - CC="$CC -traditional" - fi -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for working memcmp" >&5 -$as_echo_n "checking for working memcmp... " >&6; } -if test "${ac_cv_func_memcmp_working+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - ac_cv_func_memcmp_working=no -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ - - /* Some versions of memcmp are not 8-bit clean. */ - char c0 = '\100', c1 = '\200', c2 = '\201'; - if (memcmp(&c0, &c2, 1) >= 0 || memcmp(&c1, &c2, 1) >= 0) - return 1; - - /* The Next x86 OpenStep bug shows up only when comparing 16 bytes - or more and with at least one buffer not starting on a 4-byte boundary. - William Lewis provided this test program. */ - { - char foo[21]; - char bar[21]; - int i; - for (i = 0; i < 4; i++) - { - char *a = foo + i; - char *b = bar + i; - strcpy (a, "--------01111111"); - strcpy (b, "--------10000000"); - if (memcmp (a, b, 16) >= 0) - return 1; - } - return 0; - } - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - ac_cv_func_memcmp_working=yes -else - ac_cv_func_memcmp_working=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_memcmp_working" >&5 -$as_echo "$ac_cv_func_memcmp_working" >&6; } -test $ac_cv_func_memcmp_working = no && case " $LIB@&t@OBJS " in - *" memcmp.$ac_objext "* ) ;; - *) LIB@&t@OBJS="$LIB@&t@OBJS memcmp.$ac_objext" - ;; -esac - - -if test "${ac_cv_func_setvbuf_reversed+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_cv_func_setvbuf_reversed=no -fi - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking return type of signal handlers" >&5 -$as_echo_n "checking return type of signal handlers... " >&6; } -if test "${ac_cv_type_signal+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include - -int -main () -{ -return *(signal (0, 0)) (0) == 1; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_type_signal=int -else - ac_cv_type_signal=void -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_signal" >&5 -$as_echo "$ac_cv_type_signal" >&6; } - -cat >>confdefs.h <<_ACEOF -@%:@define RETSIGTYPE $ac_cv_type_signal -_ACEOF - - -for ac_func in strftime -do : - ac_fn_c_check_func "$LINENO" "strftime" "ac_cv_func_strftime" -if test "x$ac_cv_func_strftime" = x""yes; then : - cat >>confdefs.h <<_ACEOF -@%:@define HAVE_STRFTIME 1 -_ACEOF - -else - # strftime is in -lintl on SCO UNIX. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for strftime in -lintl" >&5 -$as_echo_n "checking for strftime in -lintl... " >&6; } -if test "${ac_cv_lib_intl_strftime+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lintl $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char strftime (); -int -main () -{ -return strftime (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_intl_strftime=yes -else - ac_cv_lib_intl_strftime=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_intl_strftime" >&5 -$as_echo "$ac_cv_lib_intl_strftime" >&6; } -if test "x$ac_cv_lib_intl_strftime" = x""yes; then : - $as_echo "@%:@define HAVE_STRFTIME 1" >>confdefs.h - -LIBS="-lintl $LIBS" -fi - -fi -done - -# The Ultrix 4.2 mips builtin alloca declared by alloca.h only works -# for constant arguments. Useless! -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for working alloca.h" >&5 -$as_echo_n "checking for working alloca.h... " >&6; } -if test "${ac_cv_working_alloca_h+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -@%:@include -int -main () -{ -char *p = (char *) alloca (2 * sizeof (int)); - if (p) return 0; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_working_alloca_h=yes -else - ac_cv_working_alloca_h=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_working_alloca_h" >&5 -$as_echo "$ac_cv_working_alloca_h" >&6; } -if test $ac_cv_working_alloca_h = yes; then - -$as_echo "@%:@define HAVE_ALLOCA_H 1" >>confdefs.h - -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for alloca" >&5 -$as_echo_n "checking for alloca... " >&6; } -if test "${ac_cv_func_alloca_works+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __GNUC__ -# define alloca __builtin_alloca -#else -# ifdef _MSC_VER -# include -# define alloca _alloca -# else -# ifdef HAVE_ALLOCA_H -# include -# else -# ifdef _AIX - #pragma alloca -# else -# ifndef alloca /* predefined by HP cc +Olibcalls */ -char *alloca (); -# endif -# endif -# endif -# endif -#endif - -int -main () -{ -char *p = (char *) alloca (1); - if (p) return 0; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_func_alloca_works=yes -else - ac_cv_func_alloca_works=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_alloca_works" >&5 -$as_echo "$ac_cv_func_alloca_works" >&6; } - -if test $ac_cv_func_alloca_works = yes; then - -$as_echo "@%:@define HAVE_ALLOCA 1" >>confdefs.h - -else - # The SVR3 libPW and SVR4 libucb both contain incompatible functions -# that cause trouble. Some versions do not even contain alloca or -# contain a buggy version. If you still want to use their alloca, -# use ar to extract alloca.o from them instead of compiling alloca.c. - -ALLOCA=\${LIBOBJDIR}alloca.$ac_objext - -$as_echo "@%:@define C_ALLOCA 1" >>confdefs.h - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether \`alloca.c' needs Cray hooks" >&5 -$as_echo_n "checking whether \`alloca.c' needs Cray hooks... " >&6; } -if test "${ac_cv_os_cray+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#if defined CRAY && ! defined CRAY2 -webecray -#else -wenotbecray -#endif - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "webecray" >/dev/null 2>&1; then : - ac_cv_os_cray=yes -else - ac_cv_os_cray=no -fi -rm -f conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_os_cray" >&5 -$as_echo "$ac_cv_os_cray" >&6; } -if test $ac_cv_os_cray = yes; then - for ac_func in _getb67 GETB67 getb67; do - as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` -ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" -eval as_val=\$$as_ac_var - if test "x$as_val" = x""yes; then : - -cat >>confdefs.h <<_ACEOF -@%:@define CRAY_STACKSEG_END $ac_func -_ACEOF - - break -fi - - done -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking stack direction for C alloca" >&5 -$as_echo_n "checking stack direction for C alloca... " >&6; } -if test "${ac_cv_c_stack_direction+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - ac_cv_c_stack_direction=0 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$ac_includes_default -int -find_stack_direction () -{ - static char *addr = 0; - auto char dummy; - if (addr == 0) - { - addr = &dummy; - return find_stack_direction (); - } - else - return (&dummy > addr) ? 1 : -1; -} - -int -main () -{ - return find_stack_direction () < 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - ac_cv_c_stack_direction=1 -else - ac_cv_c_stack_direction=-1 -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_stack_direction" >&5 -$as_echo "$ac_cv_c_stack_direction" >&6; } -cat >>confdefs.h <<_ACEOF -@%:@define STACK_DIRECTION $ac_cv_c_stack_direction -_ACEOF - - -fi - -for ac_func in strdup strerror strcasecmp -do : - as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` -ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" -eval as_val=\$$as_ac_var - if test "x$as_val" = x""yes; then : - cat >>confdefs.h <<_ACEOF -@%:@define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 -_ACEOF - -else - case " $LIB@&t@OBJS " in - *" $ac_func.$ac_objext "* ) ;; - *) LIB@&t@OBJS="$LIB@&t@OBJS $ac_func.$ac_objext" - ;; -esac - -fi -done - - -for ac_func in flock fcntl uname gethostname sysinfo getdomainname -do : - as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` -ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" -eval as_val=\$$as_ac_var - if test "x$as_val" = x""yes; then : - cat >>confdefs.h <<_ACEOF -@%:@define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 -_ACEOF - -fi -done - -for ac_func in stricmp random rand snprintf vsnprintf -do : - as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` -ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" -eval as_val=\$$as_ac_var - if test "x$as_val" = x""yes; then : - cat >>confdefs.h <<_ACEOF -@%:@define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 -_ACEOF - -fi -done - - -if test "$ac_cv_func_uname" = 'yes' -then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for field domainname in struct utsname" >&5 -$as_echo_n "checking for field domainname in struct utsname... " >&6; } - if test "$cross_compiling" = yes; then : - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error "cannot run test program while cross compiling -See \`config.log' for more details." "$LINENO" 5; } -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - #include - - main(int argc, char **argv) - { - struct utsname uts; - uts.domainname[0] = '\0'; - } - -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - $as_echo "@%:@define HAVE_STRUCT_UTSNAME_DOMAINNAME 1" >>confdefs.h - -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for /dev/urandom" >&5 -$as_echo_n "checking for /dev/urandom... " >&6; } -if test -c /dev/urandom -then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - $as_echo "@%:@define HAVE_DEV_URANDOM 1" >>confdefs.h - -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - -echo $ac_n "using the following PATH setting for exec'ed programs... $ac_c" 1>&6 - -@%:@ Check whether --with-secure-path was given. -if test "${with_secure_path+set}" = set; then : - withval=$with_secure_path; - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $withval" >&5 -$as_echo "$withval" >&6; } - RC_SECURE_PATH=$withval - -else - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: /bin:/usr/bin:/usr/local/bin" >&5 -$as_echo "/bin:/usr/bin:/usr/local/bin" >&6; } - RC_SECURE_PATH=/bin:/usr/bin:/usr/local/bin - - -fi - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking which syslog facility to use" >&5 -$as_echo_n "checking which syslog facility to use... " >&6; } - -@%:@ Check whether --with-facility was given. -if test "${with_facility+set}" = set; then : - withval=$with_facility; - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $withval" >&5 -$as_echo "$withval" >&6; } - RC_LOG_FACILITY=$withval - -else - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: LOG_DAEMON" >&5 -$as_echo "LOG_DAEMON" >&6; } - RC_LOG_FACILITY=LOG_DAEMON - - -fi - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to include Livingston's RADIUS server 1.16 kludge" >&5 -$as_echo_n "checking whether to include Livingston's RADIUS server 1.16 kludge... " >&6; } -@%:@ Check whether --enable-radius-116 was given. -if test "${enable_radius_116+set}" = set; then : - enableval=$enable_radius_116; - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - $as_echo "@%:@define RADIUS_116 1" >>confdefs.h - - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: !! This is a bug in Livingston's RADIUS server v1.16. There" >&5 -$as_echo "$as_me: WARNING: !! This is a bug in Livingston's RADIUS server v1.16. There" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: !! is a patch included with radiusclient which fixes this" >&5 -$as_echo "$as_me: WARNING: !! is a patch included with radiusclient which fixes this" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: !! problem. See patches/radiusd-1.16.accounting.diff. With" >&5 -$as_echo "$as_me: WARNING: !! problem. See patches/radiusd-1.16.accounting.diff. With" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: !! the patched RADIUS server you no longer need to activate" >&5 -$as_echo "$as_me: WARNING: !! the patched RADIUS server you no longer need to activate" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: !! this hack." >&5 -$as_echo "$as_me: WARNING: !! this hack." >&2;} - -else - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - - -fi - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to add service type hints derived from username prefix" >&5 -$as_echo_n "checking whether to add service type hints derived from username prefix... " >&6; } -@%:@ Check whether --enable-scp was given. -if test "${enable_scp+set}" = set; then : - enableval=$enable_scp; - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - $as_echo "@%:@define SCP 1" >>confdefs.h - - -else - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - - -fi - - - - - - - - - - - - - - - - -ac_config_headers="$ac_config_headers config.h" - -ac_config_files="$ac_config_files Makefile include/Makefile lib/Makefile src/Makefile man/Makefile etc/Makefile doc/Makefile patches/Makefile login.radius/Makefile login.radius/migs/Makefile rpm/Makefile debian/Makefile" - -ac_config_commands="$ac_config_commands default" - -cat >confcache <<\_ACEOF -# This file is a shell script that caches the results of configure -# tests run on this system so they can be shared between configure -# scripts and configure runs, see configure's option --config-cache. -# It is not useful on other systems. If it contains results you don't -# want to keep, you may remove or edit it. -# -# config.status only pays attention to the cache file if you give it -# the --recheck option to rerun configure. -# -# `ac_cv_env_foo' variables (set or unset) will be overridden when -# loading this file, other *unset* `ac_cv_foo' will be assigned the -# following values. - -_ACEOF - -# The following way of writing the cache mishandles newlines in values, -# but we know of no workaround that is simple, portable, and efficient. -# So, we kill variables containing newlines. -# Ultrix sh set writes to stderr and can't be redirected directly, -# and sets the high bit in the cache file unless we assign to the vars. -( - for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do - eval ac_val=\$$ac_var - case $ac_val in #( - *${as_nl}*) - case $ac_var in #( - *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; - esac - case $ac_var in #( - _ | IFS | as_nl) ;; #( - BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( - *) { eval $ac_var=; unset $ac_var;} ;; - esac ;; - esac - done - - (set) 2>&1 | - case $as_nl`(ac_space=' '; set) 2>&1` in #( - *${as_nl}ac_space=\ *) - # `set' does not quote correctly, so add quotes: double-quote - # substitution turns \\\\ into \\, and sed turns \\ into \. - sed -n \ - "s/'/'\\\\''/g; - s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" - ;; #( - *) - # `set' quotes correctly as required by POSIX, so do not add quotes. - sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" - ;; - esac | - sort -) | - sed ' - /^ac_cv_env_/b end - t clear - :clear - s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ - t end - s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ - :end' >>confcache -if diff "$cache_file" confcache >/dev/null 2>&1; then :; else - if test -w "$cache_file"; then - test "x$cache_file" != "x/dev/null" && - { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 -$as_echo "$as_me: updating cache $cache_file" >&6;} - cat confcache >$cache_file - else - { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 -$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} - fi -fi -rm -f confcache - -test "x$prefix" = xNONE && prefix=$ac_default_prefix -# Let make expand exec_prefix. -test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' - -DEFS=-DHAVE_CONFIG_H - -ac_libobjs= -ac_ltlibobjs= -for ac_i in : $LIB@&t@OBJS; do test "x$ac_i" = x: && continue - # 1. Remove the extension, and $U if already installed. - ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' - ac_i=`$as_echo "$ac_i" | sed "$ac_script"` - # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR - # will be set to the directory where LIBOBJS objects are built. - as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" - as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' -done -LIB@&t@OBJS=$ac_libobjs - -LTLIBOBJS=$ac_ltlibobjs - - -if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then - as_fn_error "conditional \"MAINTAINER_MODE\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi - if test -n "$EXEEXT"; then - am__EXEEXT_TRUE= - am__EXEEXT_FALSE='#' -else - am__EXEEXT_TRUE='#' - am__EXEEXT_FALSE= -fi - -if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then - as_fn_error "conditional \"AMDEP\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then - as_fn_error "conditional \"am__fastdepCC\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then - as_fn_error "conditional \"am__fastdepCC\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi - - -: ${CONFIG_STATUS=./config.status} -ac_write_fail=0 -ac_clean_files_save=$ac_clean_files -ac_clean_files="$ac_clean_files $CONFIG_STATUS" -{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 -$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} -as_write_fail=0 -cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 -#! $SHELL -# Generated by $as_me. -# Run this file to recreate the current configuration. -# Compiler output produced by configure, useful for debugging -# configure, is in config.log if it exists. - -debug=false -ac_cs_recheck=false -ac_cs_silent=false - -SHELL=\${CONFIG_SHELL-$SHELL} -export SHELL -_ASEOF -cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 -## -------------------- ## -## M4sh Initialization. ## -## -------------------- ## - -# Be more Bourne compatible -DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : - emulate sh - NULLCMD=: - # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in @%:@( - *posix*) : - set -o posix ;; @%:@( - *) : - ;; -esac -fi - - -as_nl=' -' -export as_nl -# Printing a long string crashes Solaris 7 /usr/bin/printf. -as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo -# Prefer a ksh shell builtin over an external printf program on Solaris, -# but without wasting forks for bash or zsh. -if test -z "$BASH_VERSION$ZSH_VERSION" \ - && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='print -r --' - as_echo_n='print -rn --' -elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='printf %s\n' - as_echo_n='printf %s' -else - if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then - as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' - as_echo_n='/usr/ucb/echo -n' - else - as_echo_body='eval expr "X$1" : "X\\(.*\\)"' - as_echo_n_body='eval - arg=$1; - case $arg in @%:@( - *"$as_nl"*) - expr "X$arg" : "X\\(.*\\)$as_nl"; - arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; - esac; - expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" - ' - export as_echo_n_body - as_echo_n='sh -c $as_echo_n_body as_echo' - fi - export as_echo_body - as_echo='sh -c $as_echo_body as_echo' -fi - -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - PATH_SEPARATOR=: - (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { - (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || - PATH_SEPARATOR=';' - } -fi - - -# IFS -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent editors from complaining about space-tab. -# (If _AS_PATH_WALK were called with IFS unset, it would disable word -# splitting by setting IFS to empty value.) -IFS=" "" $as_nl" - -# Find who we are. Look in the path if we contain no directory separator. -case $0 in @%:@(( - *[\\/]* ) as_myself=$0 ;; - *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break - done -IFS=$as_save_IFS - - ;; -esac -# We did not find ourselves, most probably we were run as `sh COMMAND' -# in which case we are not to be found in the path. -if test "x$as_myself" = x; then - as_myself=$0 -fi -if test ! -f "$as_myself"; then - $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 - exit 1 -fi - -# Unset variables that we do not need and which cause bugs (e.g. in -# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" -# suppresses any "Segmentation fault" message there. '((' could -# trigger a bug in pdksh 5.2.14. -for as_var in BASH_ENV ENV MAIL MAILPATH -do eval test x\${$as_var+set} = xset \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# CDPATH. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - - -@%:@ as_fn_error ERROR [LINENO LOG_FD] -@%:@ --------------------------------- -@%:@ Output "`basename @S|@0`: error: ERROR" to stderr. If LINENO and LOG_FD are -@%:@ provided, also output the error to LOG_FD, referencing LINENO. Then exit the -@%:@ script with status @S|@?, using 1 if that was 0. -as_fn_error () -{ - as_status=$?; test $as_status -eq 0 && as_status=1 - if test "$3"; then - as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3 - fi - $as_echo "$as_me: error: $1" >&2 - as_fn_exit $as_status -} @%:@ as_fn_error - - -@%:@ as_fn_set_status STATUS -@%:@ ----------------------- -@%:@ Set @S|@? to STATUS, without forking. -as_fn_set_status () -{ - return $1 -} @%:@ as_fn_set_status - -@%:@ as_fn_exit STATUS -@%:@ ----------------- -@%:@ Exit the shell with STATUS, even in a "trap 0" or "set -e" context. -as_fn_exit () -{ - set +e - as_fn_set_status $1 - exit $1 -} @%:@ as_fn_exit - -@%:@ as_fn_unset VAR -@%:@ --------------- -@%:@ Portably unset VAR. -as_fn_unset () -{ - { eval $1=; unset $1;} -} -as_unset=as_fn_unset -@%:@ as_fn_append VAR VALUE -@%:@ ---------------------- -@%:@ Append the text in VALUE to the end of the definition contained in VAR. Take -@%:@ advantage of any shell optimizations that allow amortized linear growth over -@%:@ repeated appends, instead of the typical quadratic growth present in naive -@%:@ implementations. -if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : - eval 'as_fn_append () - { - eval $1+=\$2 - }' -else - as_fn_append () - { - eval $1=\$$1\$2 - } -fi # as_fn_append - -@%:@ as_fn_arith ARG... -@%:@ ------------------ -@%:@ Perform arithmetic evaluation on the ARGs, and store the result in the -@%:@ global @S|@as_val. Take advantage of shells that can avoid forks. The arguments -@%:@ must be portable across @S|@(()) and expr. -if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : - eval 'as_fn_arith () - { - as_val=$(( $* )) - }' -else - as_fn_arith () - { - as_val=`expr "$@" || test $? -eq 1` - } -fi # as_fn_arith - - -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi - -if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then - as_basename=basename -else - as_basename=false -fi - -if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then - as_dirname=dirname -else - as_dirname=false -fi - -as_me=`$as_basename -- "$0" || -$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X/"$0" | - sed '/^.*\/\([^/][^/]*\)\/*$/{ - s//\1/ - q - } - /^X\/\(\/\/\)$/{ - s//\1/ - q - } - /^X\/\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - -# Avoid depending upon Character Ranges. -as_cr_letters='abcdefghijklmnopqrstuvwxyz' -as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' -as_cr_Letters=$as_cr_letters$as_cr_LETTERS -as_cr_digits='0123456789' -as_cr_alnum=$as_cr_Letters$as_cr_digits - -ECHO_C= ECHO_N= ECHO_T= -case `echo -n x` in @%:@((((( --n*) - case `echo 'xy\c'` in - *c*) ECHO_T=' ';; # ECHO_T is single tab character. - xy) ECHO_C='\c';; - *) echo `echo ksh88 bug on AIX 6.1` > /dev/null - ECHO_T=' ';; - esac;; -*) - ECHO_N='-n';; -esac - -rm -f conf$$ conf$$.exe conf$$.file -if test -d conf$$.dir; then - rm -f conf$$.dir/conf$$.file -else - rm -f conf$$.dir - mkdir conf$$.dir 2>/dev/null -fi -if (echo >conf$$.file) 2>/dev/null; then - if ln -s conf$$.file conf$$ 2>/dev/null; then - as_ln_s='ln -s' - # ... but there are two gotchas: - # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -p'. - ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || - as_ln_s='cp -p' - elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln - else - as_ln_s='cp -p' - fi -else - as_ln_s='cp -p' -fi -rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file -rmdir conf$$.dir 2>/dev/null - - -@%:@ as_fn_mkdir_p -@%:@ ------------- -@%:@ Create "@S|@as_dir" as a directory, including parents if necessary. -as_fn_mkdir_p () -{ - - case $as_dir in #( - -*) as_dir=./$as_dir;; - esac - test -d "$as_dir" || eval $as_mkdir_p || { - as_dirs= - while :; do - case $as_dir in #( - *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( - *) as_qdir=$as_dir;; - esac - as_dirs="'$as_qdir' $as_dirs" - as_dir=`$as_dirname -- "$as_dir" || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - test -d "$as_dir" && break - done - test -z "$as_dirs" || eval "mkdir $as_dirs" - } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir" - - -} @%:@ as_fn_mkdir_p -if mkdir -p . 2>/dev/null; then - as_mkdir_p='mkdir -p "$as_dir"' -else - test -d ./-p && rmdir ./-p - as_mkdir_p=false -fi - -if test -x / >/dev/null 2>&1; then - as_test_x='test -x' -else - if ls -dL / >/dev/null 2>&1; then - as_ls_L_option=L - else - as_ls_L_option= - fi - as_test_x=' - eval sh -c '\'' - if test -d "$1"; then - test -d "$1/."; - else - case $1 in @%:@( - -*)set "./$1";; - esac; - case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in @%:@(( - ???[sx]*):;;*)false;;esac;fi - '\'' sh - ' -fi -as_executable_p=$as_test_x - -# Sed expression to map a string onto a valid CPP name. -as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" - -# Sed expression to map a string onto a valid variable name. -as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" - - -exec 6>&1 -## ----------------------------------- ## -## Main body of $CONFIG_STATUS script. ## -## ----------------------------------- ## -_ASEOF -test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -# Save the log message, to keep $0 and so on meaningful, and to -# report actual input values of CONFIG_FILES etc. instead of their -# values after options handling. -ac_log=" -This file was extended by $as_me, which was -generated by GNU Autoconf 2.65. Invocation command line was - - CONFIG_FILES = $CONFIG_FILES - CONFIG_HEADERS = $CONFIG_HEADERS - CONFIG_LINKS = $CONFIG_LINKS - CONFIG_COMMANDS = $CONFIG_COMMANDS - $ $0 $@ - -on `(hostname || uname -n) 2>/dev/null | sed 1q` -" - -_ACEOF - -case $ac_config_files in *" -"*) set x $ac_config_files; shift; ac_config_files=$*;; -esac - -case $ac_config_headers in *" -"*) set x $ac_config_headers; shift; ac_config_headers=$*;; -esac - - -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -# Files that config.status was made for. -config_files="$ac_config_files" -config_headers="$ac_config_headers" -config_commands="$ac_config_commands" - -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -ac_cs_usage="\ -\`$as_me' instantiates files and other configuration actions -from templates according to the current configuration. Unless the files -and actions are specified as TAGs, all are instantiated by default. - -Usage: $0 [OPTION]... [TAG]... - - -h, --help print this help, then exit - -V, --version print version number and configuration settings, then exit - --config print configuration, then exit - -q, --quiet, --silent - do not print progress messages - -d, --debug don't remove temporary files - --recheck update $as_me by reconfiguring in the same conditions - --file=FILE[:TEMPLATE] - instantiate the configuration file FILE - --header=FILE[:TEMPLATE] - instantiate the configuration header FILE - -Configuration files: -$config_files - -Configuration headers: -$config_headers - -Configuration commands: -$config_commands - -Report bugs to the package provider." - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" -ac_cs_version="\\ -config.status -configured by $0, generated by GNU Autoconf 2.65, - with options \\"\$ac_cs_config\\" - -Copyright (C) 2009 Free Software Foundation, Inc. -This config.status script is free software; the Free Software Foundation -gives unlimited permission to copy, distribute and modify it." - -ac_pwd='$ac_pwd' -srcdir='$srcdir' -INSTALL='$INSTALL' -MKDIR_P='$MKDIR_P' -AWK='$AWK' -test -n "\$AWK" || AWK=awk -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -# The default lists apply if the user does not specify any file. -ac_need_defaults=: -while test $# != 0 -do - case $1 in - --*=*) - ac_option=`expr "X$1" : 'X\([^=]*\)='` - ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` - ac_shift=: - ;; - *) - ac_option=$1 - ac_optarg=$2 - ac_shift=shift - ;; - esac - - case $ac_option in - # Handling of the options. - -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) - ac_cs_recheck=: ;; - --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) - $as_echo "$ac_cs_version"; exit ;; - --config | --confi | --conf | --con | --co | --c ) - $as_echo "$ac_cs_config"; exit ;; - --debug | --debu | --deb | --de | --d | -d ) - debug=: ;; - --file | --fil | --fi | --f ) - $ac_shift - case $ac_optarg in - *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; - esac - as_fn_append CONFIG_FILES " '$ac_optarg'" - ac_need_defaults=false;; - --header | --heade | --head | --hea ) - $ac_shift - case $ac_optarg in - *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; - esac - as_fn_append CONFIG_HEADERS " '$ac_optarg'" - ac_need_defaults=false;; - --he | --h) - # Conflict between --help and --header - as_fn_error "ambiguous option: \`$1' -Try \`$0 --help' for more information.";; - --help | --hel | -h ) - $as_echo "$ac_cs_usage"; exit ;; - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil | --si | --s) - ac_cs_silent=: ;; - - # This is an error. - -*) as_fn_error "unrecognized option: \`$1' -Try \`$0 --help' for more information." ;; - - *) as_fn_append ac_config_targets " $1" - ac_need_defaults=false ;; - - esac - shift -done - -ac_configure_extra_args= - -if $ac_cs_silent; then - exec 6>/dev/null - ac_configure_extra_args="$ac_configure_extra_args --silent" -fi - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -if \$ac_cs_recheck; then - set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion - shift - \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 - CONFIG_SHELL='$SHELL' - export CONFIG_SHELL - exec "\$@" -fi - -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -exec 5>>config.log -{ - echo - sed 'h;s/./-/g;s/^.../@%:@@%:@ /;s/...$/ @%:@@%:@/;p;x;p;x' <<_ASBOX -@%:@@%:@ Running $as_me. @%:@@%:@ -_ASBOX - $as_echo "$ac_log" -} >&5 - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -# -# INIT-COMMANDS -# -AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" - - -# The HP-UX ksh and POSIX shell print the target directory to stdout -# if CDPATH is set. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -sed_quote_subst='$sed_quote_subst' -double_quote_subst='$double_quote_subst' -delay_variable_subst='$delay_variable_subst' -macro_version='`$ECHO "X$macro_version" | $Xsed -e "$delay_single_quote_subst"`' -macro_revision='`$ECHO "X$macro_revision" | $Xsed -e "$delay_single_quote_subst"`' -enable_shared='`$ECHO "X$enable_shared" | $Xsed -e "$delay_single_quote_subst"`' -enable_static='`$ECHO "X$enable_static" | $Xsed -e "$delay_single_quote_subst"`' -pic_mode='`$ECHO "X$pic_mode" | $Xsed -e "$delay_single_quote_subst"`' -enable_fast_install='`$ECHO "X$enable_fast_install" | $Xsed -e "$delay_single_quote_subst"`' -host_alias='`$ECHO "X$host_alias" | $Xsed -e "$delay_single_quote_subst"`' -host='`$ECHO "X$host" | $Xsed -e "$delay_single_quote_subst"`' -host_os='`$ECHO "X$host_os" | $Xsed -e "$delay_single_quote_subst"`' -build_alias='`$ECHO "X$build_alias" | $Xsed -e "$delay_single_quote_subst"`' -build='`$ECHO "X$build" | $Xsed -e "$delay_single_quote_subst"`' -build_os='`$ECHO "X$build_os" | $Xsed -e "$delay_single_quote_subst"`' -SED='`$ECHO "X$SED" | $Xsed -e "$delay_single_quote_subst"`' -Xsed='`$ECHO "X$Xsed" | $Xsed -e "$delay_single_quote_subst"`' -GREP='`$ECHO "X$GREP" | $Xsed -e "$delay_single_quote_subst"`' -EGREP='`$ECHO "X$EGREP" | $Xsed -e "$delay_single_quote_subst"`' -FGREP='`$ECHO "X$FGREP" | $Xsed -e "$delay_single_quote_subst"`' -LD='`$ECHO "X$LD" | $Xsed -e "$delay_single_quote_subst"`' -NM='`$ECHO "X$NM" | $Xsed -e "$delay_single_quote_subst"`' -LN_S='`$ECHO "X$LN_S" | $Xsed -e "$delay_single_quote_subst"`' -max_cmd_len='`$ECHO "X$max_cmd_len" | $Xsed -e "$delay_single_quote_subst"`' -ac_objext='`$ECHO "X$ac_objext" | $Xsed -e "$delay_single_quote_subst"`' -exeext='`$ECHO "X$exeext" | $Xsed -e "$delay_single_quote_subst"`' -lt_unset='`$ECHO "X$lt_unset" | $Xsed -e "$delay_single_quote_subst"`' -lt_SP2NL='`$ECHO "X$lt_SP2NL" | $Xsed -e "$delay_single_quote_subst"`' -lt_NL2SP='`$ECHO "X$lt_NL2SP" | $Xsed -e "$delay_single_quote_subst"`' -reload_flag='`$ECHO "X$reload_flag" | $Xsed -e "$delay_single_quote_subst"`' -reload_cmds='`$ECHO "X$reload_cmds" | $Xsed -e "$delay_single_quote_subst"`' -OBJDUMP='`$ECHO "X$OBJDUMP" | $Xsed -e "$delay_single_quote_subst"`' -deplibs_check_method='`$ECHO "X$deplibs_check_method" | $Xsed -e "$delay_single_quote_subst"`' -file_magic_cmd='`$ECHO "X$file_magic_cmd" | $Xsed -e "$delay_single_quote_subst"`' -AR='`$ECHO "X$AR" | $Xsed -e "$delay_single_quote_subst"`' -AR_FLAGS='`$ECHO "X$AR_FLAGS" | $Xsed -e "$delay_single_quote_subst"`' -STRIP='`$ECHO "X$STRIP" | $Xsed -e "$delay_single_quote_subst"`' -RANLIB='`$ECHO "X$RANLIB" | $Xsed -e "$delay_single_quote_subst"`' -old_postinstall_cmds='`$ECHO "X$old_postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' -old_postuninstall_cmds='`$ECHO "X$old_postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' -old_archive_cmds='`$ECHO "X$old_archive_cmds" | $Xsed -e "$delay_single_quote_subst"`' -CC='`$ECHO "X$CC" | $Xsed -e "$delay_single_quote_subst"`' -CFLAGS='`$ECHO "X$CFLAGS" | $Xsed -e "$delay_single_quote_subst"`' -compiler='`$ECHO "X$compiler" | $Xsed -e "$delay_single_quote_subst"`' -GCC='`$ECHO "X$GCC" | $Xsed -e "$delay_single_quote_subst"`' -lt_cv_sys_global_symbol_pipe='`$ECHO "X$lt_cv_sys_global_symbol_pipe" | $Xsed -e "$delay_single_quote_subst"`' -lt_cv_sys_global_symbol_to_cdecl='`$ECHO "X$lt_cv_sys_global_symbol_to_cdecl" | $Xsed -e "$delay_single_quote_subst"`' -lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address" | $Xsed -e "$delay_single_quote_subst"`' -lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`' -objdir='`$ECHO "X$objdir" | $Xsed -e "$delay_single_quote_subst"`' -SHELL='`$ECHO "X$SHELL" | $Xsed -e "$delay_single_quote_subst"`' -ECHO='`$ECHO "X$ECHO" | $Xsed -e "$delay_single_quote_subst"`' -MAGIC_CMD='`$ECHO "X$MAGIC_CMD" | $Xsed -e "$delay_single_quote_subst"`' -lt_prog_compiler_no_builtin_flag='`$ECHO "X$lt_prog_compiler_no_builtin_flag" | $Xsed -e "$delay_single_quote_subst"`' -lt_prog_compiler_wl='`$ECHO "X$lt_prog_compiler_wl" | $Xsed -e "$delay_single_quote_subst"`' -lt_prog_compiler_pic='`$ECHO "X$lt_prog_compiler_pic" | $Xsed -e "$delay_single_quote_subst"`' -lt_prog_compiler_static='`$ECHO "X$lt_prog_compiler_static" | $Xsed -e "$delay_single_quote_subst"`' -lt_cv_prog_compiler_c_o='`$ECHO "X$lt_cv_prog_compiler_c_o" | $Xsed -e "$delay_single_quote_subst"`' -need_locks='`$ECHO "X$need_locks" | $Xsed -e "$delay_single_quote_subst"`' -DSYMUTIL='`$ECHO "X$DSYMUTIL" | $Xsed -e "$delay_single_quote_subst"`' -NMEDIT='`$ECHO "X$NMEDIT" | $Xsed -e "$delay_single_quote_subst"`' -LIPO='`$ECHO "X$LIPO" | $Xsed -e "$delay_single_quote_subst"`' -OTOOL='`$ECHO "X$OTOOL" | $Xsed -e "$delay_single_quote_subst"`' -OTOOL64='`$ECHO "X$OTOOL64" | $Xsed -e "$delay_single_quote_subst"`' -libext='`$ECHO "X$libext" | $Xsed -e "$delay_single_quote_subst"`' -shrext_cmds='`$ECHO "X$shrext_cmds" | $Xsed -e "$delay_single_quote_subst"`' -extract_expsyms_cmds='`$ECHO "X$extract_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`' -archive_cmds_need_lc='`$ECHO "X$archive_cmds_need_lc" | $Xsed -e "$delay_single_quote_subst"`' -enable_shared_with_static_runtimes='`$ECHO "X$enable_shared_with_static_runtimes" | $Xsed -e "$delay_single_quote_subst"`' -export_dynamic_flag_spec='`$ECHO "X$export_dynamic_flag_spec" | $Xsed -e "$delay_single_quote_subst"`' -whole_archive_flag_spec='`$ECHO "X$whole_archive_flag_spec" | $Xsed -e "$delay_single_quote_subst"`' -compiler_needs_object='`$ECHO "X$compiler_needs_object" | $Xsed -e "$delay_single_quote_subst"`' -old_archive_from_new_cmds='`$ECHO "X$old_archive_from_new_cmds" | $Xsed -e "$delay_single_quote_subst"`' -old_archive_from_expsyms_cmds='`$ECHO "X$old_archive_from_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`' -archive_cmds='`$ECHO "X$archive_cmds" | $Xsed -e "$delay_single_quote_subst"`' -archive_expsym_cmds='`$ECHO "X$archive_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`' -module_cmds='`$ECHO "X$module_cmds" | $Xsed -e "$delay_single_quote_subst"`' -module_expsym_cmds='`$ECHO "X$module_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`' -with_gnu_ld='`$ECHO "X$with_gnu_ld" | $Xsed -e "$delay_single_quote_subst"`' -allow_undefined_flag='`$ECHO "X$allow_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`' -no_undefined_flag='`$ECHO "X$no_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`' -hardcode_libdir_flag_spec='`$ECHO "X$hardcode_libdir_flag_spec" | $Xsed -e "$delay_single_quote_subst"`' -hardcode_libdir_flag_spec_ld='`$ECHO "X$hardcode_libdir_flag_spec_ld" | $Xsed -e "$delay_single_quote_subst"`' -hardcode_libdir_separator='`$ECHO "X$hardcode_libdir_separator" | $Xsed -e "$delay_single_quote_subst"`' -hardcode_direct='`$ECHO "X$hardcode_direct" | $Xsed -e "$delay_single_quote_subst"`' -hardcode_direct_absolute='`$ECHO "X$hardcode_direct_absolute" | $Xsed -e "$delay_single_quote_subst"`' -hardcode_minus_L='`$ECHO "X$hardcode_minus_L" | $Xsed -e "$delay_single_quote_subst"`' -hardcode_shlibpath_var='`$ECHO "X$hardcode_shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`' -hardcode_automatic='`$ECHO "X$hardcode_automatic" | $Xsed -e "$delay_single_quote_subst"`' -inherit_rpath='`$ECHO "X$inherit_rpath" | $Xsed -e "$delay_single_quote_subst"`' -link_all_deplibs='`$ECHO "X$link_all_deplibs" | $Xsed -e "$delay_single_quote_subst"`' -fix_srcfile_path='`$ECHO "X$fix_srcfile_path" | $Xsed -e "$delay_single_quote_subst"`' -always_export_symbols='`$ECHO "X$always_export_symbols" | $Xsed -e "$delay_single_quote_subst"`' -export_symbols_cmds='`$ECHO "X$export_symbols_cmds" | $Xsed -e "$delay_single_quote_subst"`' -exclude_expsyms='`$ECHO "X$exclude_expsyms" | $Xsed -e "$delay_single_quote_subst"`' -include_expsyms='`$ECHO "X$include_expsyms" | $Xsed -e "$delay_single_quote_subst"`' -prelink_cmds='`$ECHO "X$prelink_cmds" | $Xsed -e "$delay_single_quote_subst"`' -file_list_spec='`$ECHO "X$file_list_spec" | $Xsed -e "$delay_single_quote_subst"`' -variables_saved_for_relink='`$ECHO "X$variables_saved_for_relink" | $Xsed -e "$delay_single_quote_subst"`' -need_lib_prefix='`$ECHO "X$need_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`' -need_version='`$ECHO "X$need_version" | $Xsed -e "$delay_single_quote_subst"`' -version_type='`$ECHO "X$version_type" | $Xsed -e "$delay_single_quote_subst"`' -runpath_var='`$ECHO "X$runpath_var" | $Xsed -e "$delay_single_quote_subst"`' -shlibpath_var='`$ECHO "X$shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`' -shlibpath_overrides_runpath='`$ECHO "X$shlibpath_overrides_runpath" | $Xsed -e "$delay_single_quote_subst"`' -libname_spec='`$ECHO "X$libname_spec" | $Xsed -e "$delay_single_quote_subst"`' -library_names_spec='`$ECHO "X$library_names_spec" | $Xsed -e "$delay_single_quote_subst"`' -soname_spec='`$ECHO "X$soname_spec" | $Xsed -e "$delay_single_quote_subst"`' -postinstall_cmds='`$ECHO "X$postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' -postuninstall_cmds='`$ECHO "X$postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' -finish_cmds='`$ECHO "X$finish_cmds" | $Xsed -e "$delay_single_quote_subst"`' -finish_eval='`$ECHO "X$finish_eval" | $Xsed -e "$delay_single_quote_subst"`' -hardcode_into_libs='`$ECHO "X$hardcode_into_libs" | $Xsed -e "$delay_single_quote_subst"`' -sys_lib_search_path_spec='`$ECHO "X$sys_lib_search_path_spec" | $Xsed -e "$delay_single_quote_subst"`' -sys_lib_dlsearch_path_spec='`$ECHO "X$sys_lib_dlsearch_path_spec" | $Xsed -e "$delay_single_quote_subst"`' -hardcode_action='`$ECHO "X$hardcode_action" | $Xsed -e "$delay_single_quote_subst"`' -enable_dlopen='`$ECHO "X$enable_dlopen" | $Xsed -e "$delay_single_quote_subst"`' -enable_dlopen_self='`$ECHO "X$enable_dlopen_self" | $Xsed -e "$delay_single_quote_subst"`' -enable_dlopen_self_static='`$ECHO "X$enable_dlopen_self_static" | $Xsed -e "$delay_single_quote_subst"`' -old_striplib='`$ECHO "X$old_striplib" | $Xsed -e "$delay_single_quote_subst"`' -striplib='`$ECHO "X$striplib" | $Xsed -e "$delay_single_quote_subst"`' - -LTCC='$LTCC' -LTCFLAGS='$LTCFLAGS' -compiler='$compiler_DEFAULT' - -# Quote evaled strings. -for var in SED \ -GREP \ -EGREP \ -FGREP \ -LD \ -NM \ -LN_S \ -lt_SP2NL \ -lt_NL2SP \ -reload_flag \ -OBJDUMP \ -deplibs_check_method \ -file_magic_cmd \ -AR \ -AR_FLAGS \ -STRIP \ -RANLIB \ -CC \ -CFLAGS \ -compiler \ -lt_cv_sys_global_symbol_pipe \ -lt_cv_sys_global_symbol_to_cdecl \ -lt_cv_sys_global_symbol_to_c_name_address \ -lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ -SHELL \ -ECHO \ -lt_prog_compiler_no_builtin_flag \ -lt_prog_compiler_wl \ -lt_prog_compiler_pic \ -lt_prog_compiler_static \ -lt_cv_prog_compiler_c_o \ -need_locks \ -DSYMUTIL \ -NMEDIT \ -LIPO \ -OTOOL \ -OTOOL64 \ -shrext_cmds \ -export_dynamic_flag_spec \ -whole_archive_flag_spec \ -compiler_needs_object \ -with_gnu_ld \ -allow_undefined_flag \ -no_undefined_flag \ -hardcode_libdir_flag_spec \ -hardcode_libdir_flag_spec_ld \ -hardcode_libdir_separator \ -fix_srcfile_path \ -exclude_expsyms \ -include_expsyms \ -file_list_spec \ -variables_saved_for_relink \ -libname_spec \ -library_names_spec \ -soname_spec \ -finish_eval \ -old_striplib \ -striplib; do - case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in - *[\\\\\\\`\\"\\\$]*) - eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" - ;; - *) - eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" - ;; - esac -done - -# Double-quote double-evaled strings. -for var in reload_cmds \ -old_postinstall_cmds \ -old_postuninstall_cmds \ -old_archive_cmds \ -extract_expsyms_cmds \ -old_archive_from_new_cmds \ -old_archive_from_expsyms_cmds \ -archive_cmds \ -archive_expsym_cmds \ -module_cmds \ -module_expsym_cmds \ -export_symbols_cmds \ -prelink_cmds \ -postinstall_cmds \ -postuninstall_cmds \ -finish_cmds \ -sys_lib_search_path_spec \ -sys_lib_dlsearch_path_spec; do - case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in - *[\\\\\\\`\\"\\\$]*) - eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" - ;; - *) - eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" - ;; - esac -done - -# Fix-up fallback echo if it was mangled by the above quoting rules. -case \$lt_ECHO in -*'\\\$0 --fallback-echo"') lt_ECHO=\`\$ECHO "X\$lt_ECHO" | \$Xsed -e 's/\\\\\\\\\\\\\\\$0 --fallback-echo"\$/\$0 --fallback-echo"/'\` - ;; -esac - -ac_aux_dir='$ac_aux_dir' -xsi_shell='$xsi_shell' -lt_shell_append='$lt_shell_append' - -# See if we are running on zsh, and set the options which allow our -# commands through without removal of \ escapes INIT. -if test -n "\${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST -fi - - - PACKAGE='$PACKAGE' - VERSION='$VERSION' - TIMESTAMP='$TIMESTAMP' - RM='$RM' - ofile='$ofile' - - - - - -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 - -# Handling of arguments. -for ac_config_target in $ac_config_targets -do - case $ac_config_target in - "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; - "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; - "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; - "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; - "include/Makefile") CONFIG_FILES="$CONFIG_FILES include/Makefile" ;; - "lib/Makefile") CONFIG_FILES="$CONFIG_FILES lib/Makefile" ;; - "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; - "man/Makefile") CONFIG_FILES="$CONFIG_FILES man/Makefile" ;; - "etc/Makefile") CONFIG_FILES="$CONFIG_FILES etc/Makefile" ;; - "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; - "patches/Makefile") CONFIG_FILES="$CONFIG_FILES patches/Makefile" ;; - "login.radius/Makefile") CONFIG_FILES="$CONFIG_FILES login.radius/Makefile" ;; - "login.radius/migs/Makefile") CONFIG_FILES="$CONFIG_FILES login.radius/migs/Makefile" ;; - "rpm/Makefile") CONFIG_FILES="$CONFIG_FILES rpm/Makefile" ;; - "debian/Makefile") CONFIG_FILES="$CONFIG_FILES debian/Makefile" ;; - "default") CONFIG_COMMANDS="$CONFIG_COMMANDS default" ;; - - *) as_fn_error "invalid argument: \`$ac_config_target'" "$LINENO" 5;; - esac -done - - -# If the user did not use the arguments to specify the items to instantiate, -# then the envvar interface is used. Set only those that are not. -# We use the long form for the default assignment because of an extremely -# bizarre bug on SunOS 4.1.3. -if $ac_need_defaults; then - test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files - test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers - test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands -fi - -# Have a temporary directory for convenience. Make it in the build tree -# simply because there is no reason against having it here, and in addition, -# creating and moving files from /tmp can sometimes cause problems. -# Hook for its removal unless debugging. -# Note that there is a small window in which the directory will not be cleaned: -# after its creation but before its name has been assigned to `$tmp'. -$debug || -{ - tmp= - trap 'exit_status=$? - { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status -' 0 - trap 'as_fn_exit 1' 1 2 13 15 -} -# Create a (secure) tmp directory for tmp files. - -{ - tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && - test -n "$tmp" && test -d "$tmp" -} || -{ - tmp=./conf$$-$RANDOM - (umask 077 && mkdir "$tmp") -} || as_fn_error "cannot create a temporary directory in ." "$LINENO" 5 - -# Set up the scripts for CONFIG_FILES section. -# No need to generate them if there are no CONFIG_FILES. -# This happens for instance with `./config.status config.h'. -if test -n "$CONFIG_FILES"; then - - -ac_cr=`echo X | tr X '\015'` -# On cygwin, bash can eat \r inside `` if the user requested igncr. -# But we know of no other shell where ac_cr would be empty at this -# point, so we can use a bashism as a fallback. -if test "x$ac_cr" = x; then - eval ac_cr=\$\'\\r\' -fi -ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` -if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then - ac_cs_awk_cr='\r' -else - ac_cs_awk_cr=$ac_cr -fi - -echo 'BEGIN {' >"$tmp/subs1.awk" && -_ACEOF - - -{ - echo "cat >conf$$subs.awk <<_ACEOF" && - echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && - echo "_ACEOF" -} >conf$$subs.sh || - as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 -ac_delim_num=`echo "$ac_subst_vars" | grep -c '$'` -ac_delim='%!_!# ' -for ac_last_try in false false false false false :; do - . ./conf$$subs.sh || - as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 - - ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` - if test $ac_delim_n = $ac_delim_num; then - break - elif $ac_last_try; then - as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 - else - ac_delim="$ac_delim!$ac_delim _$ac_delim!! " - fi -done -rm -f conf$$subs.sh - -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -cat >>"\$tmp/subs1.awk" <<\\_ACAWK && -_ACEOF -sed -n ' -h -s/^/S["/; s/!.*/"]=/ -p -g -s/^[^!]*!// -:repl -t repl -s/'"$ac_delim"'$// -t delim -:nl -h -s/\(.\{148\}\)..*/\1/ -t more1 -s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ -p -n -b repl -:more1 -s/["\\]/\\&/g; s/^/"/; s/$/"\\/ -p -g -s/.\{148\}// -t nl -:delim -h -s/\(.\{148\}\)..*/\1/ -t more2 -s/["\\]/\\&/g; s/^/"/; s/$/"/ -p -b -:more2 -s/["\\]/\\&/g; s/^/"/; s/$/"\\/ -p -g -s/.\{148\}// -t delim -' >$CONFIG_STATUS || ac_write_fail=1 -rm -f conf$$subs.awk -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -_ACAWK -cat >>"\$tmp/subs1.awk" <<_ACAWK && - for (key in S) S_is_set[key] = 1 - FS = "" - -} -{ - line = $ 0 - nfields = split(line, field, "@") - substed = 0 - len = length(field[1]) - for (i = 2; i < nfields; i++) { - key = field[i] - keylen = length(key) - if (S_is_set[key]) { - value = S[key] - line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) - len += length(value) + length(field[++i]) - substed = 1 - } else - len += 1 + keylen - } - - print line -} - -_ACAWK -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then - sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" -else - cat -fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \ - || as_fn_error "could not setup config files machinery" "$LINENO" 5 -_ACEOF - -# VPATH may cause trouble with some makes, so we remove $(srcdir), -# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and -# trailing colons and then remove the whole line if VPATH becomes empty -# (actually we leave an empty line to preserve line numbers). -if test "x$srcdir" = x.; then - ac_vpsub='/^[ ]*VPATH[ ]*=/{ -s/:*\$(srcdir):*/:/ -s/:*\${srcdir}:*/:/ -s/:*@srcdir@:*/:/ -s/^\([^=]*=[ ]*\):*/\1/ -s/:*$// -s/^[^=]*=[ ]*$// -}' -fi - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -fi # test -n "$CONFIG_FILES" - -# Set up the scripts for CONFIG_HEADERS section. -# No need to generate them if there are no CONFIG_HEADERS. -# This happens for instance with `./config.status Makefile'. -if test -n "$CONFIG_HEADERS"; then -cat >"$tmp/defines.awk" <<\_ACAWK || -BEGIN { -_ACEOF - -# Transform confdefs.h into an awk script `defines.awk', embedded as -# here-document in config.status, that substitutes the proper values into -# config.h.in to produce config.h. - -# Create a delimiter string that does not exist in confdefs.h, to ease -# handling of long lines. -ac_delim='%!_!# ' -for ac_last_try in false false :; do - ac_t=`sed -n "/$ac_delim/p" confdefs.h` - if test -z "$ac_t"; then - break - elif $ac_last_try; then - as_fn_error "could not make $CONFIG_HEADERS" "$LINENO" 5 - else - ac_delim="$ac_delim!$ac_delim _$ac_delim!! " - fi -done - -# For the awk script, D is an array of macro values keyed by name, -# likewise P contains macro parameters if any. Preserve backslash -# newline sequences. - -ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* -sed -n ' -s/.\{148\}/&'"$ac_delim"'/g -t rset -:rset -s/^[ ]*#[ ]*define[ ][ ]*/ / -t def -d -:def -s/\\$// -t bsnl -s/["\\]/\\&/g -s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ -D["\1"]=" \3"/p -s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p -d -:bsnl -s/["\\]/\\&/g -s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ -D["\1"]=" \3\\\\\\n"\\/p -t cont -s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p -t cont -d -:cont -n -s/.\{148\}/&'"$ac_delim"'/g -t clear -:clear -s/\\$// -t bsnlc -s/["\\]/\\&/g; s/^/"/; s/$/"/p -d -:bsnlc -s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p -b cont -' >$CONFIG_STATUS || ac_write_fail=1 - -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 - for (key in D) D_is_set[key] = 1 - FS = "" -} -/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { - line = \$ 0 - split(line, arg, " ") - if (arg[1] == "#") { - defundef = arg[2] - mac1 = arg[3] - } else { - defundef = substr(arg[1], 2) - mac1 = arg[2] - } - split(mac1, mac2, "(") #) - macro = mac2[1] - prefix = substr(line, 1, index(line, defundef) - 1) - if (D_is_set[macro]) { - # Preserve the white space surrounding the "#". - print prefix "define", macro P[macro] D[macro] - next - } else { - # Replace #undef with comments. This is necessary, for example, - # in the case of _POSIX_SOURCE, which is predefined and required - # on some systems where configure will not decide to define it. - if (defundef == "undef") { - print "/*", prefix defundef, macro, "*/" - next - } - } -} -{ print } -_ACAWK -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 - as_fn_error "could not setup config headers machinery" "$LINENO" 5 -fi # test -n "$CONFIG_HEADERS" - - -eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" -shift -for ac_tag -do - case $ac_tag in - :[FHLC]) ac_mode=$ac_tag; continue;; - esac - case $ac_mode$ac_tag in - :[FHL]*:*);; - :L* | :C*:*) as_fn_error "invalid tag \`$ac_tag'" "$LINENO" 5;; - :[FH]-) ac_tag=-:-;; - :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; - esac - ac_save_IFS=$IFS - IFS=: - set x $ac_tag - IFS=$ac_save_IFS - shift - ac_file=$1 - shift - - case $ac_mode in - :L) ac_source=$1;; - :[FH]) - ac_file_inputs= - for ac_f - do - case $ac_f in - -) ac_f="$tmp/stdin";; - *) # Look for the file first in the build tree, then in the source tree - # (if the path is not absolute). The absolute path cannot be DOS-style, - # because $ac_f cannot contain `:'. - test -f "$ac_f" || - case $ac_f in - [\\/$]*) false;; - *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; - esac || - as_fn_error "cannot find input file: \`$ac_f'" "$LINENO" 5;; - esac - case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac - as_fn_append ac_file_inputs " '$ac_f'" - done - - # Let's still pretend it is `configure' which instantiates (i.e., don't - # use $as_me), people would be surprised to read: - # /* config.h. Generated by config.status. */ - configure_input='Generated from '` - $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' - `' by configure.' - if test x"$ac_file" != x-; then - configure_input="$ac_file. $configure_input" - { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 -$as_echo "$as_me: creating $ac_file" >&6;} - fi - # Neutralize special characters interpreted by sed in replacement strings. - case $configure_input in #( - *\&* | *\|* | *\\* ) - ac_sed_conf_input=`$as_echo "$configure_input" | - sed 's/[\\\\&|]/\\\\&/g'`;; #( - *) ac_sed_conf_input=$configure_input;; - esac - - case $ac_tag in - *:-:* | *:-) cat >"$tmp/stdin" \ - || as_fn_error "could not create $ac_file" "$LINENO" 5 ;; - esac - ;; - esac - - ac_dir=`$as_dirname -- "$ac_file" || -$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$ac_file" : 'X\(//\)[^/]' \| \ - X"$ac_file" : 'X\(//\)$' \| \ - X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$ac_file" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - as_dir="$ac_dir"; as_fn_mkdir_p - ac_builddir=. - -case "$ac_dir" in -.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; -*) - ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` - # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` - case $ac_top_builddir_sub in - "") ac_top_builddir_sub=. ac_top_build_prefix= ;; - *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; - esac ;; -esac -ac_abs_top_builddir=$ac_pwd -ac_abs_builddir=$ac_pwd$ac_dir_suffix -# for backward compatibility: -ac_top_builddir=$ac_top_build_prefix - -case $srcdir in - .) # We are building in place. - ac_srcdir=. - ac_top_srcdir=$ac_top_builddir_sub - ac_abs_top_srcdir=$ac_pwd ;; - [\\/]* | ?:[\\/]* ) # Absolute name. - ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir - ac_abs_top_srcdir=$srcdir ;; - *) # Relative name. - ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_build_prefix$srcdir - ac_abs_top_srcdir=$ac_pwd/$srcdir ;; -esac -ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix - - - case $ac_mode in - :F) - # - # CONFIG_FILE - # - - case $INSTALL in - [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; - *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; - esac - ac_MKDIR_P=$MKDIR_P - case $MKDIR_P in - [\\/$]* | ?:[\\/]* ) ;; - */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; - esac -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -# If the template does not know about datarootdir, expand it. -# FIXME: This hack should be removed a few years after 2.60. -ac_datarootdir_hack=; ac_datarootdir_seen= -ac_sed_dataroot=' -/datarootdir/ { - p - q -} -/@datadir@/p -/@docdir@/p -/@infodir@/p -/@localedir@/p -/@mandir@/p' -case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in -*datarootdir*) ac_datarootdir_seen=yes;; -*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 -$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 - ac_datarootdir_hack=' - s&@datadir@&$datadir&g - s&@docdir@&$docdir&g - s&@infodir@&$infodir&g - s&@localedir@&$localedir&g - s&@mandir@&$mandir&g - s&\\\${datarootdir}&$datarootdir&g' ;; -esac -_ACEOF - -# Neutralize VPATH when `$srcdir' = `.'. -# Shell code in configure.ac might set extrasub. -# FIXME: do we really want to maintain this feature? -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -ac_sed_extra="$ac_vpsub -$extrasub -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -:t -/@[a-zA-Z_][a-zA-Z_0-9]*@/!b -s|@configure_input@|$ac_sed_conf_input|;t t -s&@top_builddir@&$ac_top_builddir_sub&;t t -s&@top_build_prefix@&$ac_top_build_prefix&;t t -s&@srcdir@&$ac_srcdir&;t t -s&@abs_srcdir@&$ac_abs_srcdir&;t t -s&@top_srcdir@&$ac_top_srcdir&;t t -s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t -s&@builddir@&$ac_builddir&;t t -s&@abs_builddir@&$ac_abs_builddir&;t t -s&@abs_top_builddir@&$ac_abs_top_builddir&;t t -s&@INSTALL@&$ac_INSTALL&;t t -s&@MKDIR_P@&$ac_MKDIR_P&;t t -$ac_datarootdir_hack -" -eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \ - || as_fn_error "could not create $ac_file" "$LINENO" 5 - -test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && - { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && - { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' -which seems to be undefined. Please make sure it is defined." >&5 -$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' -which seems to be undefined. Please make sure it is defined." >&2;} - - rm -f "$tmp/stdin" - case $ac_file in - -) cat "$tmp/out" && rm -f "$tmp/out";; - *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";; - esac \ - || as_fn_error "could not create $ac_file" "$LINENO" 5 - ;; - :H) - # - # CONFIG_HEADER - # - if test x"$ac_file" != x-; then - { - $as_echo "/* $configure_input */" \ - && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" - } >"$tmp/config.h" \ - || as_fn_error "could not create $ac_file" "$LINENO" 5 - if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then - { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 -$as_echo "$as_me: $ac_file is unchanged" >&6;} - else - rm -f "$ac_file" - mv "$tmp/config.h" "$ac_file" \ - || as_fn_error "could not create $ac_file" "$LINENO" 5 - fi - else - $as_echo "/* $configure_input */" \ - && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \ - || as_fn_error "could not create -" "$LINENO" 5 - fi -# Compute "$ac_file"'s index in $config_headers. -_am_arg="$ac_file" -_am_stamp_count=1 -for _am_header in $config_headers :; do - case $_am_header in - $_am_arg | $_am_arg:* ) - break ;; - * ) - _am_stamp_count=`expr $_am_stamp_count + 1` ;; - esac -done -echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || -$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$_am_arg" : 'X\(//\)[^/]' \| \ - X"$_am_arg" : 'X\(//\)$' \| \ - X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$_am_arg" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'`/stamp-h$_am_stamp_count - ;; - - :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 -$as_echo "$as_me: executing $ac_file commands" >&6;} - ;; - esac - - - case $ac_file$ac_mode in - "depfiles":C) test x"$AMDEP_TRUE" != x"" || { - # Autoconf 2.62 quotes --file arguments for eval, but not when files - # are listed without --file. Let's play safe and only enable the eval - # if we detect the quoting. - case $CONFIG_FILES in - *\'*) eval set x "$CONFIG_FILES" ;; - *) set x $CONFIG_FILES ;; - esac - shift - for mf - do - # Strip MF so we end up with the name of the file. - mf=`echo "$mf" | sed -e 's/:.*$//'` - # Check whether this is an Automake generated Makefile or not. - # We used to match only the files named `Makefile.in', but - # some people rename them; so instead we look at the file content. - # Grep'ing the first line is not enough: some people post-process - # each Makefile.in and add a new line on top of each file to say so. - # Grep'ing the whole file is not good either: AIX grep has a line - # limit of 2048, but all sed's we know have understand at least 4000. - if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then - dirpart=`$as_dirname -- "$mf" || -$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$mf" : 'X\(//\)[^/]' \| \ - X"$mf" : 'X\(//\)$' \| \ - X"$mf" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$mf" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - else - continue - fi - # Extract the definition of DEPDIR, am__include, and am__quote - # from the Makefile without running `make'. - DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` - test -z "$DEPDIR" && continue - am__include=`sed -n 's/^am__include = //p' < "$mf"` - test -z "am__include" && continue - am__quote=`sed -n 's/^am__quote = //p' < "$mf"` - # When using ansi2knr, U may be empty or an underscore; expand it - U=`sed -n 's/^U = //p' < "$mf"` - # Find all dependency output files, they are included files with - # $(DEPDIR) in their names. We invoke sed twice because it is the - # simplest approach to changing $(DEPDIR) to its actual value in the - # expansion. - for file in `sed -n " - s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ - sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do - # Make sure the directory exists. - test -f "$dirpart/$file" && continue - fdir=`$as_dirname -- "$file" || -$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$file" : 'X\(//\)[^/]' \| \ - X"$file" : 'X\(//\)$' \| \ - X"$file" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$file" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - as_dir=$dirpart/$fdir; as_fn_mkdir_p - # echo "creating $dirpart/$file" - echo '# dummy' > "$dirpart/$file" - done - done -} - ;; - "libtool":C) - - # See if we are running on zsh, and set the options which allow our - # commands through without removal of \ escapes. - if test -n "${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST - fi - - cfgfile="${ofile}T" - trap "$RM \"$cfgfile\"; exit 1" 1 2 15 - $RM "$cfgfile" - - cat <<_LT_EOF >> "$cfgfile" -#! $SHELL - -# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. -# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION -# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: -# NOTE: Changes made to this file will be lost: look at ltmain.sh. -# -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, -# 2006, 2007, 2008 Free Software Foundation, Inc. -# Written by Gordon Matzigkeit, 1996 -# -# This file is part of GNU Libtool. -# -# GNU Libtool is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License as -# published by the Free Software Foundation; either version 2 of -# the License, or (at your option) any later version. -# -# As a special exception to the GNU General Public License, -# if you distribute this file as part of a program or library that -# is built using GNU Libtool, you may include this file under the -# same distribution terms that you use for the rest of that program. -# -# GNU Libtool is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with GNU Libtool; see the file COPYING. If not, a copy -# can be downloaded from http://www.gnu.org/licenses/gpl.html, or -# obtained by writing to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - - -# The names of the tagged configurations supported by this script. -available_tags="" - -# ### BEGIN LIBTOOL CONFIG - -# Which release of libtool.m4 was used? -macro_version=$macro_version -macro_revision=$macro_revision - -# Whether or not to build shared libraries. -build_libtool_libs=$enable_shared - -# Whether or not to build static libraries. -build_old_libs=$enable_static - -# What type of objects to build. -pic_mode=$pic_mode - -# Whether or not to optimize for fast installation. -fast_install=$enable_fast_install - -# The host system. -host_alias=$host_alias -host=$host -host_os=$host_os - -# The build system. -build_alias=$build_alias -build=$build -build_os=$build_os - -# A sed program that does not truncate output. -SED=$lt_SED - -# Sed that helps us avoid accidentally triggering echo(1) options like -n. -Xsed="\$SED -e 1s/^X//" - -# A grep program that handles long lines. -GREP=$lt_GREP - -# An ERE matcher. -EGREP=$lt_EGREP - -# A literal string matcher. -FGREP=$lt_FGREP - -# A BSD- or MS-compatible name lister. -NM=$lt_NM - -# Whether we need soft or hard links. -LN_S=$lt_LN_S - -# What is the maximum length of a command? -max_cmd_len=$max_cmd_len - -# Object file suffix (normally "o"). -objext=$ac_objext - -# Executable file suffix (normally ""). -exeext=$exeext - -# whether the shell understands "unset". -lt_unset=$lt_unset - -# turn spaces into newlines. -SP2NL=$lt_lt_SP2NL - -# turn newlines into spaces. -NL2SP=$lt_lt_NL2SP - -# How to create reloadable object files. -reload_flag=$lt_reload_flag -reload_cmds=$lt_reload_cmds - -# An object symbol dumper. -OBJDUMP=$lt_OBJDUMP - -# Method to check whether dependent libraries are shared objects. -deplibs_check_method=$lt_deplibs_check_method - -# Command to use when deplibs_check_method == "file_magic". -file_magic_cmd=$lt_file_magic_cmd - -# The archiver. -AR=$lt_AR -AR_FLAGS=$lt_AR_FLAGS - -# A symbol stripping program. -STRIP=$lt_STRIP - -# Commands used to install an old-style archive. -RANLIB=$lt_RANLIB -old_postinstall_cmds=$lt_old_postinstall_cmds -old_postuninstall_cmds=$lt_old_postuninstall_cmds - -# A C compiler. -LTCC=$lt_CC - -# LTCC compiler flags. -LTCFLAGS=$lt_CFLAGS - -# Take the output of nm and produce a listing of raw symbols and C names. -global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe - -# Transform the output of nm in a proper C declaration. -global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl - -# Transform the output of nm in a C name address pair. -global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address - -# Transform the output of nm in a C name address pair when lib prefix is needed. -global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix - -# The name of the directory that contains temporary libtool files. -objdir=$objdir - -# Shell to use when invoking shell scripts. -SHELL=$lt_SHELL - -# An echo program that does not interpret backslashes. -ECHO=$lt_ECHO - -# Used to examine libraries when file_magic_cmd begins with "file". -MAGIC_CMD=$MAGIC_CMD - -# Must we lock files when doing compilation? -need_locks=$lt_need_locks - -# Tool to manipulate archived DWARF debug symbol files on Mac OS X. -DSYMUTIL=$lt_DSYMUTIL - -# Tool to change global to local symbols on Mac OS X. -NMEDIT=$lt_NMEDIT - -# Tool to manipulate fat objects and archives on Mac OS X. -LIPO=$lt_LIPO - -# ldd/readelf like tool for Mach-O binaries on Mac OS X. -OTOOL=$lt_OTOOL - -# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. -OTOOL64=$lt_OTOOL64 - -# Old archive suffix (normally "a"). -libext=$libext - -# Shared library suffix (normally ".so"). -shrext_cmds=$lt_shrext_cmds - -# The commands to extract the exported symbol list from a shared archive. -extract_expsyms_cmds=$lt_extract_expsyms_cmds - -# Variables whose values should be saved in libtool wrapper scripts and -# restored at link time. -variables_saved_for_relink=$lt_variables_saved_for_relink - -# Do we need the "lib" prefix for modules? -need_lib_prefix=$need_lib_prefix - -# Do we need a version for libraries? -need_version=$need_version - -# Library versioning type. -version_type=$version_type - -# Shared library runtime path variable. -runpath_var=$runpath_var - -# Shared library path variable. -shlibpath_var=$shlibpath_var - -# Is shlibpath searched before the hard-coded library search path? -shlibpath_overrides_runpath=$shlibpath_overrides_runpath - -# Format of library name prefix. -libname_spec=$lt_libname_spec - -# List of archive names. First name is the real one, the rest are links. -# The last name is the one that the linker finds with -lNAME -library_names_spec=$lt_library_names_spec - -# The coded name of the library, if different from the real name. -soname_spec=$lt_soname_spec - -# Command to use after installation of a shared archive. -postinstall_cmds=$lt_postinstall_cmds - -# Command to use after uninstallation of a shared archive. -postuninstall_cmds=$lt_postuninstall_cmds - -# Commands used to finish a libtool library installation in a directory. -finish_cmds=$lt_finish_cmds - -# As "finish_cmds", except a single script fragment to be evaled but -# not shown. -finish_eval=$lt_finish_eval - -# Whether we should hardcode library paths into libraries. -hardcode_into_libs=$hardcode_into_libs - -# Compile-time system search path for libraries. -sys_lib_search_path_spec=$lt_sys_lib_search_path_spec - -# Run-time system search path for libraries. -sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec - -# Whether dlopen is supported. -dlopen_support=$enable_dlopen - -# Whether dlopen of programs is supported. -dlopen_self=$enable_dlopen_self - -# Whether dlopen of statically linked programs is supported. -dlopen_self_static=$enable_dlopen_self_static - -# Commands to strip libraries. -old_striplib=$lt_old_striplib -striplib=$lt_striplib - - -# The linker used to build libraries. -LD=$lt_LD - -# Commands used to build an old-style archive. -old_archive_cmds=$lt_old_archive_cmds - -# A language specific compiler. -CC=$lt_compiler - -# Is the compiler the GNU compiler? -with_gcc=$GCC - -# Compiler flag to turn off builtin functions. -no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag - -# How to pass a linker flag through the compiler. -wl=$lt_lt_prog_compiler_wl - -# Additional compiler flags for building library objects. -pic_flag=$lt_lt_prog_compiler_pic - -# Compiler flag to prevent dynamic linking. -link_static_flag=$lt_lt_prog_compiler_static - -# Does compiler simultaneously support -c and -o options? -compiler_c_o=$lt_lt_cv_prog_compiler_c_o - -# Whether or not to add -lc for building shared libraries. -build_libtool_need_lc=$archive_cmds_need_lc - -# Whether or not to disallow shared libs when runtime libs are static. -allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes - -# Compiler flag to allow reflexive dlopens. -export_dynamic_flag_spec=$lt_export_dynamic_flag_spec - -# Compiler flag to generate shared objects directly from archives. -whole_archive_flag_spec=$lt_whole_archive_flag_spec - -# Whether the compiler copes with passing no objects directly. -compiler_needs_object=$lt_compiler_needs_object - -# Create an old-style archive from a shared archive. -old_archive_from_new_cmds=$lt_old_archive_from_new_cmds - -# Create a temporary old-style archive to link instead of a shared archive. -old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds - -# Commands used to build a shared archive. -archive_cmds=$lt_archive_cmds -archive_expsym_cmds=$lt_archive_expsym_cmds - -# Commands used to build a loadable module if different from building -# a shared archive. -module_cmds=$lt_module_cmds -module_expsym_cmds=$lt_module_expsym_cmds - -# Whether we are building with GNU ld or not. -with_gnu_ld=$lt_with_gnu_ld - -# Flag that allows shared libraries with undefined symbols to be built. -allow_undefined_flag=$lt_allow_undefined_flag - -# Flag that enforces no undefined symbols. -no_undefined_flag=$lt_no_undefined_flag - -# Flag to hardcode \$libdir into a binary during linking. -# This must work even if \$libdir does not exist -hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec - -# If ld is used when linking, flag to hardcode \$libdir into a binary -# during linking. This must work even if \$libdir does not exist. -hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld - -# Whether we need a single "-rpath" flag with a separated argument. -hardcode_libdir_separator=$lt_hardcode_libdir_separator - -# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes -# DIR into the resulting binary. -hardcode_direct=$hardcode_direct - -# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes -# DIR into the resulting binary and the resulting library dependency is -# "absolute",i.e impossible to change by setting \${shlibpath_var} if the -# library is relocated. -hardcode_direct_absolute=$hardcode_direct_absolute - -# Set to "yes" if using the -LDIR flag during linking hardcodes DIR -# into the resulting binary. -hardcode_minus_L=$hardcode_minus_L - -# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR -# into the resulting binary. -hardcode_shlibpath_var=$hardcode_shlibpath_var - -# Set to "yes" if building a shared library automatically hardcodes DIR -# into the library and all subsequent libraries and executables linked -# against it. -hardcode_automatic=$hardcode_automatic - -# Set to yes if linker adds runtime paths of dependent libraries -# to runtime path list. -inherit_rpath=$inherit_rpath - -# Whether libtool must link a program against all its dependency libraries. -link_all_deplibs=$link_all_deplibs - -# Fix the shell variable \$srcfile for the compiler. -fix_srcfile_path=$lt_fix_srcfile_path - -# Set to "yes" if exported symbols are required. -always_export_symbols=$always_export_symbols - -# The commands to list exported symbols. -export_symbols_cmds=$lt_export_symbols_cmds - -# Symbols that should not be listed in the preloaded symbols. -exclude_expsyms=$lt_exclude_expsyms - -# Symbols that must always be exported. -include_expsyms=$lt_include_expsyms - -# Commands necessary for linking programs (against libraries) with templates. -prelink_cmds=$lt_prelink_cmds - -# Specify filename containing input files. -file_list_spec=$lt_file_list_spec - -# How to hardcode a shared library path into an executable. -hardcode_action=$hardcode_action - -# ### END LIBTOOL CONFIG - -_LT_EOF - - case $host_os in - aix3*) - cat <<\_LT_EOF >> "$cfgfile" -# AIX sometimes has problems with the GCC collect2 program. For some -# reason, if we set the COLLECT_NAMES environment variable, the problems -# vanish in a puff of smoke. -if test "X${COLLECT_NAMES+set}" != Xset; then - COLLECT_NAMES= - export COLLECT_NAMES -fi -_LT_EOF - ;; - esac - - -ltmain="$ac_aux_dir/ltmain.sh" - - - # We use sed instead of cat because bash on DJGPP gets confused if - # if finds mixed CR/LF and LF-only lines. Since sed operates in - # text mode, it properly converts lines to CR/LF. This bash problem - # is reportedly fixed, but why not run on old versions too? - sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \ - || (rm -f "$cfgfile"; exit 1) - - case $xsi_shell in - yes) - cat << \_LT_EOF >> "$cfgfile" - -# func_dirname file append nondir_replacement -# Compute the dirname of FILE. If nonempty, add APPEND to the result, -# otherwise set result to NONDIR_REPLACEMENT. -func_dirname () -{ - case ${1} in - */*) func_dirname_result="${1%/*}${2}" ;; - * ) func_dirname_result="${3}" ;; - esac -} - -# func_basename file -func_basename () -{ - func_basename_result="${1##*/}" -} - -# func_dirname_and_basename file append nondir_replacement -# perform func_basename and func_dirname in a single function -# call: -# dirname: Compute the dirname of FILE. If nonempty, -# add APPEND to the result, otherwise set result -# to NONDIR_REPLACEMENT. -# value returned in "$func_dirname_result" -# basename: Compute filename of FILE. -# value retuned in "$func_basename_result" -# Implementation must be kept synchronized with func_dirname -# and func_basename. For efficiency, we do not delegate to -# those functions but instead duplicate the functionality here. -func_dirname_and_basename () -{ - case ${1} in - */*) func_dirname_result="${1%/*}${2}" ;; - * ) func_dirname_result="${3}" ;; - esac - func_basename_result="${1##*/}" -} - -# func_stripname prefix suffix name -# strip PREFIX and SUFFIX off of NAME. -# PREFIX and SUFFIX must not contain globbing or regex special -# characters, hashes, percent signs, but SUFFIX may contain a leading -# dot (in which case that matches only a dot). -func_stripname () -{ - # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are - # positional parameters, so assign one to ordinary parameter first. - func_stripname_result=${3} - func_stripname_result=${func_stripname_result#"${1}"} - func_stripname_result=${func_stripname_result%"${2}"} -} - -# func_opt_split -func_opt_split () -{ - func_opt_split_opt=${1%%=*} - func_opt_split_arg=${1#*=} -} - -# func_lo2o object -func_lo2o () -{ - case ${1} in - *.lo) func_lo2o_result=${1%.lo}.${objext} ;; - *) func_lo2o_result=${1} ;; - esac -} - -# func_xform libobj-or-source -func_xform () -{ - func_xform_result=${1%.*}.lo -} - -# func_arith arithmetic-term... -func_arith () -{ - func_arith_result=$(( $* )) -} - -# func_len string -# STRING may not start with a hyphen. -func_len () -{ - func_len_result=${#1} -} - -_LT_EOF - ;; - *) # Bourne compatible functions. - cat << \_LT_EOF >> "$cfgfile" - -# func_dirname file append nondir_replacement -# Compute the dirname of FILE. If nonempty, add APPEND to the result, -# otherwise set result to NONDIR_REPLACEMENT. -func_dirname () -{ - # Extract subdirectory from the argument. - func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"` - if test "X$func_dirname_result" = "X${1}"; then - func_dirname_result="${3}" - else - func_dirname_result="$func_dirname_result${2}" - fi -} - -# func_basename file -func_basename () -{ - func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"` -} - - -# func_stripname prefix suffix name -# strip PREFIX and SUFFIX off of NAME. -# PREFIX and SUFFIX must not contain globbing or regex special -# characters, hashes, percent signs, but SUFFIX may contain a leading -# dot (in which case that matches only a dot). -# func_strip_suffix prefix name -func_stripname () -{ - case ${2} in - .*) func_stripname_result=`$ECHO "X${3}" \ - | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;; - *) func_stripname_result=`$ECHO "X${3}" \ - | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;; - esac -} - -# sed scripts: -my_sed_long_opt='1s/^\(-[^=]*\)=.*/\1/;q' -my_sed_long_arg='1s/^-[^=]*=//' - -# func_opt_split -func_opt_split () -{ - func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"` - func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"` -} - -# func_lo2o object -func_lo2o () -{ - func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"` -} - -# func_xform libobj-or-source -func_xform () -{ - func_xform_result=`$ECHO "X${1}" | $Xsed -e 's/\.[^.]*$/.lo/'` -} - -# func_arith arithmetic-term... -func_arith () -{ - func_arith_result=`expr "$@"` -} - -# func_len string -# STRING may not start with a hyphen. -func_len () -{ - func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len` -} - -_LT_EOF -esac - -case $lt_shell_append in - yes) - cat << \_LT_EOF >> "$cfgfile" - -# func_append var value -# Append VALUE to the end of shell variable VAR. -func_append () -{ - eval "$1+=\$2" -} -_LT_EOF - ;; - *) - cat << \_LT_EOF >> "$cfgfile" - -# func_append var value -# Append VALUE to the end of shell variable VAR. -func_append () -{ - eval "$1=\$$1\$2" -} - -_LT_EOF - ;; - esac - - - sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \ - || (rm -f "$cfgfile"; exit 1) - - mv -f "$cfgfile" "$ofile" || - (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") - chmod +x "$ofile" - - ;; - "default":C) test -z "$CONFIG_HEADERS" || echo timestamp > stamp-h ;; - - esac -done # for ac_tag - - -as_fn_exit 0 -_ACEOF -ac_clean_files=$ac_clean_files_save - -test $ac_write_fail = 0 || - as_fn_error "write failure creating $CONFIG_STATUS" "$LINENO" 5 - - -# configure is writing to config.log, and then calls config.status. -# config.status does its own redirection, appending to config.log. -# Unfortunately, on DOS this fails, as config.log is still kept open -# by configure, so config.status won't be able to write to it; its -# output is simply discarded. So we exec the FD to /dev/null, -# effectively closing config.log, so it can be properly (re)opened and -# appended to by config.status. When coming back to configure, we -# need to make the FD available again. -if test "$no_create" != yes; then - ac_cs_success=: - ac_config_status_args= - test "$silent" = yes && - ac_config_status_args="$ac_config_status_args --quiet" - exec 5>/dev/null - $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false - exec 5>>config.log - # Use ||, not &&, to avoid exiting from the if with $? = 1, which - # would make configure fail if this is the last instruction. - $ac_cs_success || as_fn_exit $? -fi -if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 -$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} -fi - diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/autom4te.cache/requests b/openair3/PMIPv6/freeradius-client-1.1.6/autom4te.cache/requests deleted file mode 100644 index cb23234066..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/autom4te.cache/requests +++ /dev/null @@ -1,277 +0,0 @@ -# This file was generated by Autom4te Tue Dec 22 07:01:21 UTC 2009. -# It contains the lists of macros which have been traced. -# It can be safely removed. - -@request = ( - bless( [ - '0', - 1, - [ - '/usr/share/autoconf' - ], - [ - '/usr/share/autoconf/autoconf/autoconf.m4f', - '/usr/share/aclocal/argz.m4', - '/usr/share/aclocal/libtool.m4', - '/usr/share/aclocal/ltdl.m4', - '/usr/share/aclocal/ltoptions.m4', - '/usr/share/aclocal/ltsugar.m4', - '/usr/share/aclocal/ltversion.m4', - '/usr/share/aclocal/lt~obsolete.m4', - '/usr/share/aclocal-1.11/amversion.m4', - '/usr/share/aclocal-1.11/auxdir.m4', - '/usr/share/aclocal-1.11/cond.m4', - '/usr/share/aclocal-1.11/depend.m4', - '/usr/share/aclocal-1.11/depout.m4', - '/usr/share/aclocal-1.11/header.m4', - '/usr/share/aclocal-1.11/init.m4', - '/usr/share/aclocal-1.11/install-sh.m4', - '/usr/share/aclocal-1.11/lead-dot.m4', - '/usr/share/aclocal-1.11/maintainer.m4', - '/usr/share/aclocal-1.11/make.m4', - '/usr/share/aclocal-1.11/missing.m4', - '/usr/share/aclocal-1.11/mkdirp.m4', - '/usr/share/aclocal-1.11/options.m4', - '/usr/share/aclocal-1.11/runlog.m4', - '/usr/share/aclocal-1.11/sanity.m4', - '/usr/share/aclocal-1.11/silent.m4', - '/usr/share/aclocal-1.11/strip.m4', - '/usr/share/aclocal-1.11/substnot.m4', - '/usr/share/aclocal-1.11/tar.m4', - 'configure.in' - ], - { - 'AM_ENABLE_STATIC' => 1, - 'AC_LIBTOOL_LANG_RC_CONFIG' => 1, - '_LT_AC_SHELL_INIT' => 1, - 'AC_DEFUN' => 1, - 'AC_PROG_LIBTOOL' => 1, - '_LT_AC_LANG_CXX_CONFIG' => 1, - 'AM_PROG_MKDIR_P' => 1, - 'AM_AUTOMAKE_VERSION' => 1, - 'AM_SUBST_NOTMAKE' => 1, - 'AM_MISSING_PROG' => 1, - 'AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH' => 1, - '_LT_AC_LANG_C_CONFIG' => 1, - 'AM_PROG_INSTALL_STRIP' => 1, - '_m4_warn' => 1, - 'AC_LIBTOOL_OBJDIR' => 1, - 'gl_FUNC_ARGZ' => 1, - 'LTOBSOLETE_VERSION' => 1, - 'AM_SANITY_CHECK' => 1, - 'AC_LIBTOOL_LANG_GCJ_CONFIG' => 1, - 'AC_LIBTOOL_PROG_COMPILER_PIC' => 1, - 'LT_LIB_M' => 1, - '_LT_AC_CHECK_DLFCN' => 1, - 'AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE' => 1, - 'LTSUGAR_VERSION' => 1, - '_LT_PROG_LTMAIN' => 1, - 'LT_SYS_SYMBOL_USCORE' => 1, - '_AM_PROG_TAR' => 1, - 'AC_LIBTOOL_GCJ' => 1, - 'LT_SYS_DLOPEN_DEPLIBS' => 1, - 'LT_FUNC_DLSYM_USCORE' => 1, - '_LT_AC_LANG_F77' => 1, - 'AC_LIBTOOL_CONFIG' => 1, - '_AM_SUBST_NOTMAKE' => 1, - 'AC_LTDL_DLLIB' => 1, - '_AM_AUTOCONF_VERSION' => 1, - 'AM_DISABLE_SHARED' => 1, - '_LTDL_SETUP' => 1, - '_LT_AC_LANG_CXX' => 1, - 'AM_PROG_LIBTOOL' => 1, - 'AC_LIB_LTDL' => 1, - '_LT_AC_FILE_LTDLL_C' => 1, - 'AM_PROG_LD' => 1, - 'AU_DEFUN' => 1, - 'AC_PROG_NM' => 1, - 'AC_LIBTOOL_DLOPEN' => 1, - 'AC_PROG_LD' => 1, - 'AC_PROG_LD_GNU' => 1, - 'AC_ENABLE_FAST_INSTALL' => 1, - 'AC_LIBTOOL_FC' => 1, - 'LTDL_CONVENIENCE' => 1, - '_AM_SET_OPTION' => 1, - 'AC_LTDL_PREOPEN' => 1, - '_LT_LINKER_BOILERPLATE' => 1, - 'AC_LIBTOOL_LANG_CXX_CONFIG' => 1, - 'AC_LIBTOOL_PROG_CC_C_O' => 1, - 'gl_PREREQ_ARGZ' => 1, - 'LT_SUPPORTED_TAG' => 1, - 'AM_OUTPUT_DEPENDENCY_COMMANDS' => 1, - 'LT_PROG_RC' => 1, - 'LT_SYS_MODULE_EXT' => 1, - 'AC_DEFUN_ONCE' => 1, - '_LT_AC_LANG_GCJ' => 1, - 'AC_LTDL_OBJDIR' => 1, - '_LT_PATH_TOOL_PREFIX' => 1, - 'AC_LIBTOOL_RC' => 1, - 'AM_SILENT_RULES' => 1, - 'AC_DISABLE_FAST_INSTALL' => 1, - '_LT_AC_PROG_ECHO_BACKSLASH' => 1, - '_LT_AC_SYS_LIBPATH_AIX' => 1, - '_LT_AC_TRY_DLOPEN_SELF' => 1, - 'include' => 1, - 'LT_AC_PROG_SED' => 1, - 'AM_ENABLE_SHARED' => 1, - 'LTDL_INSTALLABLE' => 1, - '_LT_AC_LANG_GCJ_CONFIG' => 1, - 'AC_ENABLE_SHARED' => 1, - 'AC_ENABLE_STATIC' => 1, - 'AC_LIBTOOL_SYS_HARD_LINK_LOCKS' => 1, - '_LT_AC_TAGVAR' => 1, - 'AC_LIBTOOL_LANG_F77_CONFIG' => 1, - 'AM_CONDITIONAL' => 1, - 'LT_LIB_DLLOAD' => 1, - 'LTDL_INIT' => 1, - 'LTVERSION_VERSION' => 1, - 'AM_PROG_INSTALL_SH' => 1, - 'm4_include' => 1, - 'AC_PROG_EGREP' => 1, - '_AC_AM_CONFIG_HEADER_HOOK' => 1, - 'AC_PATH_MAGIC' => 1, - 'AC_LTDL_SYSSEARCHPATH' => 1, - 'AM_MAKE_INCLUDE' => 1, - 'LT_CMD_MAX_LEN' => 1, - '_LT_AC_TAGCONFIG' => 1, - 'm4_pattern_forbid' => 1, - '_LT_LINKER_OPTION' => 1, - 'AC_LIBTOOL_COMPILER_OPTION' => 1, - 'AC_DISABLE_SHARED' => 1, - '_LT_COMPILER_BOILERPLATE' => 1, - 'AC_LIBTOOL_WIN32_DLL' => 1, - 'AC_LIBTOOL_SETUP' => 1, - 'AC_PROG_LD_RELOAD_FLAG' => 1, - 'AC_LTDL_DLSYM_USCORE' => 1, - 'AM_MISSING_HAS_RUN' => 1, - 'LT_LANG' => 1, - 'LT_SYS_DLSEARCH_PATH' => 1, - 'LT_CONFIG_LTDL_DIR' => 1, - 'AC_LIBTOOL_DLOPEN_SELF' => 1, - 'LT_OUTPUT' => 1, - 'AC_LIBTOOL_PROG_LD_SHLIBS' => 1, - 'AC_WITH_LTDL' => 1, - 'AC_LIBTOOL_LINKER_OPTION' => 1, - 'LT_AC_PROG_RC' => 1, - 'AC_LIBTOOL_CXX' => 1, - 'LT_INIT' => 1, - 'LT_AC_PROG_GCJ' => 1, - 'LT_SYS_DLOPEN_SELF' => 1, - 'AM_DEP_TRACK' => 1, - 'AM_DISABLE_STATIC' => 1, - 'AM_CONFIG_HEADER' => 1, - '_AC_PROG_LIBTOOL' => 1, - '_AM_IF_OPTION' => 1, - 'AC_PATH_TOOL_PREFIX' => 1, - 'm4_pattern_allow' => 1, - 'AC_LIBTOOL_F77' => 1, - 'AM_SET_LEADING_DOT' => 1, - 'LT_AC_PROG_EGREP' => 1, - '_AM_DEPENDENCIES' => 1, - 'AC_LIBTOOL_LANG_C_CONFIG' => 1, - 'LTOPTIONS_VERSION' => 1, - '_LT_AC_SYS_COMPILER' => 1, - 'AM_PROG_NM' => 1, - 'AC_LIBLTDL_CONVENIENCE' => 1, - 'AC_DEPLIBS_CHECK_METHOD' => 1, - 'AC_LIBLTDL_INSTALLABLE' => 1, - 'jm_MAINTAINER_MODE' => 1, - 'AM_SET_CURRENT_AUTOMAKE_VERSION' => 1, - 'AC_LTDL_ENABLE_INSTALL' => 1, - 'AC_LIBTOOL_SYS_DYNAMIC_LINKER' => 1, - 'LT_PROG_GCJ' => 1, - 'AM_INIT_AUTOMAKE' => 1, - 'AC_DISABLE_STATIC' => 1, - 'LT_PATH_NM' => 1, - 'AM_MAINTAINER_MODE' => 1, - 'AC_LTDL_SHLIBEXT' => 1, - '_LT_AC_LOCK' => 1, - '_LT_AC_LANG_RC_CONFIG' => 1, - 'LT_SYS_MODULE_PATH' => 1, - 'AC_LIBTOOL_POSTDEP_PREDEP' => 1, - 'LT_WITH_LTDL' => 1, - 'AC_LTDL_SHLIBPATH' => 1, - 'AM_AUX_DIR_EXPAND' => 1, - '_LT_AC_LANG_F77_CONFIG' => 1, - 'AC_LIBTOOL_PROG_COMPILER_NO_RTTI' => 1, - '_AM_SET_OPTIONS' => 1, - '_LT_COMPILER_OPTION' => 1, - '_AM_OUTPUT_DEPENDENCY_COMMANDS' => 1, - 'AM_RUN_LOG' => 1, - 'AC_LIBTOOL_SYS_OLD_ARCHIVE' => 1, - 'AC_LTDL_SYS_DLOPEN_DEPLIBS' => 1, - 'AC_LIBTOOL_PICMODE' => 1, - 'LT_PATH_LD' => 1, - 'AC_CHECK_LIBM' => 1, - 'AC_LIBTOOL_SYS_LIB_STRIP' => 1, - '_AM_MANGLE_OPTION' => 1, - 'AC_LTDL_SYMBOL_USCORE' => 1, - 'AC_LIBTOOL_SYS_MAX_CMD_LEN' => 1, - 'AM_SET_DEPDIR' => 1, - '_LT_CC_BASENAME' => 1, - '_LT_LIBOBJ' => 1 - } - ], 'Autom4te::Request' ), - bless( [ - '1', - 1, - [ - '/usr/share/autoconf' - ], - [ - '/usr/share/autoconf/autoconf/autoconf.m4f', - 'aclocal.m4', - 'configure.in' - ], - { - '_LT_AC_TAGCONFIG' => 1, - 'AM_PROG_F77_C_O' => 1, - 'm4_pattern_forbid' => 1, - 'AC_INIT' => 1, - '_AM_COND_IF' => 1, - 'AC_CANONICAL_TARGET' => 1, - 'AC_SUBST' => 1, - 'AC_CONFIG_LIBOBJ_DIR' => 1, - 'AC_FC_SRCEXT' => 1, - 'AC_CANONICAL_HOST' => 1, - 'AC_PROG_LIBTOOL' => 1, - 'AM_INIT_AUTOMAKE' => 1, - 'AC_CONFIG_SUBDIRS' => 1, - 'AM_AUTOMAKE_VERSION' => 1, - 'LT_CONFIG_LTDL_DIR' => 1, - 'AC_REQUIRE_AUX_FILE' => 1, - 'AC_CONFIG_LINKS' => 1, - 'm4_sinclude' => 1, - 'LT_SUPPORTED_TAG' => 1, - 'AM_MAINTAINER_MODE' => 1, - 'AM_GNU_GETTEXT_INTL_SUBDIR' => 1, - '_m4_warn' => 1, - 'AM_PROG_CXX_C_O' => 1, - '_AM_COND_ENDIF' => 1, - 'AM_ENABLE_MULTILIB' => 1, - 'AM_SILENT_RULES' => 1, - 'AC_CONFIG_FILES' => 1, - 'LT_INIT' => 1, - 'include' => 1, - 'AM_GNU_GETTEXT' => 1, - 'AC_LIBSOURCE' => 1, - 'AM_PROG_FC_C_O' => 1, - 'AC_CANONICAL_BUILD' => 1, - 'AC_FC_FREEFORM' => 1, - 'AH_OUTPUT' => 1, - '_AM_SUBST_NOTMAKE' => 1, - 'AC_CONFIG_AUX_DIR' => 1, - 'sinclude' => 1, - 'm4_pattern_allow' => 1, - 'AM_PROG_CC_C_O' => 1, - 'AC_CANONICAL_SYSTEM' => 1, - 'AM_CONDITIONAL' => 1, - 'AC_CONFIG_HEADERS' => 1, - 'AC_DEFINE_TRACE_LITERAL' => 1, - 'm4_include' => 1, - '_AM_COND_ELSE' => 1, - 'AC_SUBST_TRACE' => 1 - } - ], 'Autom4te::Request' ) - ); - diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/autom4te.cache/traces.0 b/openair3/PMIPv6/freeradius-client-1.1.6/autom4te.cache/traces.0 deleted file mode 100644 index 796c2e7f13..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/autom4te.cache/traces.0 +++ /dev/null @@ -1,2457 +0,0 @@ -m4trace:/usr/share/aclocal/argz.m4:12: -1- AC_DEFUN([gl_FUNC_ARGZ], [gl_PREREQ_ARGZ - -AC_CHECK_HEADERS([argz.h], [], [], [AC_INCLUDES_DEFAULT]) - -AC_CHECK_TYPES([error_t], - [], - [AC_DEFINE([error_t], [int], - [Define to a type to use for `error_t' if it is not otherwise available.]) - AC_DEFINE([__error_t_defined], [1], [Define so that glibc/gnulib argp.h - does not typedef error_t.])], - [#if defined(HAVE_ARGZ_H) -# include -#endif]) - -ARGZ_H= -AC_CHECK_FUNCS([argz_add argz_append argz_count argz_create_sep argz_insert \ - argz_next argz_stringify], [], [ARGZ_H=argz.h; AC_LIBOBJ([argz])]) - -dnl if have system argz functions, allow forced use of -dnl libltdl-supplied implementation (and default to do so -dnl on "known bad" systems). Could use a runtime check, but -dnl (a) detecting malloc issues is notoriously unreliable -dnl (b) only known system that declares argz functions, -dnl provides them, yet they are broken, is cygwin -dnl releases prior to 16-Mar-2007 (1.5.24 and earlier) -dnl So, it's more straightforward simply to special case -dnl this for known bad systems. -AS_IF([test -z "$ARGZ_H"], - [AC_CACHE_CHECK( - [if argz actually works], - [lt_cv_sys_argz_works], - [[case $host_os in #( - *cygwin*) - lt_cv_sys_argz_works=no - if test "$cross_compiling" != no; then - lt_cv_sys_argz_works="guessing no" - else - lt_sed_extract_leading_digits='s/^\([0-9\.]*\).*/\1/' - save_IFS=$IFS - IFS=-. - set x `uname -r | sed -e "$lt_sed_extract_leading_digits"` - IFS=$save_IFS - lt_os_major=${2-0} - lt_os_minor=${3-0} - lt_os_micro=${4-0} - if test "$lt_os_major" -gt 1 \ - || { test "$lt_os_major" -eq 1 \ - && { test "$lt_os_minor" -gt 5 \ - || { test "$lt_os_minor" -eq 5 \ - && test "$lt_os_micro" -gt 24; }; }; }; then - lt_cv_sys_argz_works=yes - fi - fi - ;; #( - *) lt_cv_sys_argz_works=yes ;; - esac]]) - AS_IF([test $lt_cv_sys_argz_works = yes], - [AC_DEFINE([HAVE_WORKING_ARGZ], 1, - [This value is set to 1 to indicate that the system argz facility works])], - [ARGZ_H=argz.h - AC_LIBOBJ([argz])])]) - -AC_SUBST([ARGZ_H]) -]) -m4trace:/usr/share/aclocal/argz.m4:79: -1- AC_DEFUN([gl_PREREQ_ARGZ], [:]) -m4trace:/usr/share/aclocal/libtool.m4:67: -1- AC_DEFUN([LT_INIT], [AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT -AC_BEFORE([$0], [LT_LANG])dnl -AC_BEFORE([$0], [LT_OUTPUT])dnl -AC_BEFORE([$0], [LTDL_INIT])dnl -m4_require([_LT_CHECK_BUILDDIR])dnl - -dnl Autoconf doesn't catch unexpanded LT_ macros by default: -m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl -m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl -dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4 -dnl unless we require an AC_DEFUNed macro: -AC_REQUIRE([LTOPTIONS_VERSION])dnl -AC_REQUIRE([LTSUGAR_VERSION])dnl -AC_REQUIRE([LTVERSION_VERSION])dnl -AC_REQUIRE([LTOBSOLETE_VERSION])dnl -m4_require([_LT_PROG_LTMAIN])dnl - -dnl Parse OPTIONS -_LT_SET_OPTIONS([$0], [$1]) - -# This can be used to rebuild libtool when needed -LIBTOOL_DEPS="$ltmain" - -# Always use our own libtool. -LIBTOOL='$(SHELL) $(top_builddir)/libtool' -AC_SUBST(LIBTOOL)dnl - -_LT_SETUP - -# Only expand once: -m4_define([LT_INIT]) -]) -m4trace:/usr/share/aclocal/libtool.m4:102: -1- AU_DEFUN([AC_PROG_LIBTOOL], [m4_if($#, 0, [LT_INIT], [LT_INIT($@)])]) -m4trace:/usr/share/aclocal/libtool.m4:102: -1- AC_DEFUN([AC_PROG_LIBTOOL], [AC_DIAGNOSE([obsolete], [The macro `AC_PROG_LIBTOOL' is obsolete. -You should run autoupdate.])dnl -m4_if($#, 0, [LT_INIT], [LT_INIT($@)])]) -m4trace:/usr/share/aclocal/libtool.m4:103: -1- AU_DEFUN([AM_PROG_LIBTOOL], [m4_if($#, 0, [LT_INIT], [LT_INIT($@)])]) -m4trace:/usr/share/aclocal/libtool.m4:103: -1- AC_DEFUN([AM_PROG_LIBTOOL], [AC_DIAGNOSE([obsolete], [The macro `AM_PROG_LIBTOOL' is obsolete. -You should run autoupdate.])dnl -m4_if($#, 0, [LT_INIT], [LT_INIT($@)])]) -m4trace:/usr/share/aclocal/libtool.m4:562: -1- AC_DEFUN([LT_OUTPUT], [: ${CONFIG_LT=./config.lt} -AC_MSG_NOTICE([creating $CONFIG_LT]) -cat >"$CONFIG_LT" <<_LTEOF -#! $SHELL -# Generated by $as_me. -# Run this file to recreate a libtool stub with the current configuration. - -lt_cl_silent=false -SHELL=\${CONFIG_SHELL-$SHELL} -_LTEOF - -cat >>"$CONFIG_LT" <<\_LTEOF -AS_SHELL_SANITIZE -_AS_PREPARE - -exec AS_MESSAGE_FD>&1 -exec AS_MESSAGE_LOG_FD>>config.log -{ - echo - AS_BOX([Running $as_me.]) -} >&AS_MESSAGE_LOG_FD - -lt_cl_help="\ -\`$as_me' creates a local libtool stub from the current configuration, -for use in further configure time tests before the real libtool is -generated. - -Usage: $[0] [[OPTIONS]] - - -h, --help print this help, then exit - -V, --version print version number, then exit - -q, --quiet do not print progress messages - -d, --debug don't remove temporary files - -Report bugs to ." - -lt_cl_version="\ -m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl -m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]) -configured by $[0], generated by m4_PACKAGE_STRING. - -Copyright (C) 2008 Free Software Foundation, Inc. -This config.lt script is free software; the Free Software Foundation -gives unlimited permision to copy, distribute and modify it." - -while test $[#] != 0 -do - case $[1] in - --version | --v* | -V ) - echo "$lt_cl_version"; exit 0 ;; - --help | --h* | -h ) - echo "$lt_cl_help"; exit 0 ;; - --debug | --d* | -d ) - debug=: ;; - --quiet | --q* | --silent | --s* | -q ) - lt_cl_silent=: ;; - - -*) AC_MSG_ERROR([unrecognized option: $[1] -Try \`$[0] --help' for more information.]) ;; - - *) AC_MSG_ERROR([unrecognized argument: $[1] -Try \`$[0] --help' for more information.]) ;; - esac - shift -done - -if $lt_cl_silent; then - exec AS_MESSAGE_FD>/dev/null -fi -_LTEOF - -cat >>"$CONFIG_LT" <<_LTEOF -_LT_OUTPUT_LIBTOOL_COMMANDS_INIT -_LTEOF - -cat >>"$CONFIG_LT" <<\_LTEOF -AC_MSG_NOTICE([creating $ofile]) -_LT_OUTPUT_LIBTOOL_COMMANDS -AS_EXIT(0) -_LTEOF -chmod +x "$CONFIG_LT" - -# configure is writing to config.log, but config.lt does its own redirection, -# appending to config.log, which fails on DOS, as config.log is still kept -# open by configure. Here we exec the FD to /dev/null, effectively closing -# config.log, so it can be properly (re)opened and appended to by config.lt. -if test "$no_create" != yes; then - lt_cl_success=: - test "$silent" = yes && - lt_config_lt_args="$lt_config_lt_args --quiet" - exec AS_MESSAGE_LOG_FD>/dev/null - $SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false - exec AS_MESSAGE_LOG_FD>>config.log - $lt_cl_success || AS_EXIT(1) -fi -]) -m4trace:/usr/share/aclocal/libtool.m4:757: -1- AC_DEFUN([LT_SUPPORTED_TAG], []) -m4trace:/usr/share/aclocal/libtool.m4:768: -1- AC_DEFUN([LT_LANG], [AC_BEFORE([$0], [LT_OUTPUT])dnl -m4_case([$1], - [C], [_LT_LANG(C)], - [C++], [_LT_LANG(CXX)], - [Java], [_LT_LANG(GCJ)], - [Fortran 77], [_LT_LANG(F77)], - [Fortran], [_LT_LANG(FC)], - [Windows Resource], [_LT_LANG(RC)], - [m4_ifdef([_LT_LANG_]$1[_CONFIG], - [_LT_LANG($1)], - [m4_fatal([$0: unsupported language: "$1"])])])dnl -]) -m4trace:/usr/share/aclocal/libtool.m4:830: -1- AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)]) -m4trace:/usr/share/aclocal/libtool.m4:830: -1- AC_DEFUN([AC_LIBTOOL_CXX], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBTOOL_CXX' is obsolete. -You should run autoupdate.])dnl -LT_LANG(C++)]) -m4trace:/usr/share/aclocal/libtool.m4:831: -1- AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)]) -m4trace:/usr/share/aclocal/libtool.m4:831: -1- AC_DEFUN([AC_LIBTOOL_F77], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBTOOL_F77' is obsolete. -You should run autoupdate.])dnl -LT_LANG(Fortran 77)]) -m4trace:/usr/share/aclocal/libtool.m4:832: -1- AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)]) -m4trace:/usr/share/aclocal/libtool.m4:832: -1- AC_DEFUN([AC_LIBTOOL_FC], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBTOOL_FC' is obsolete. -You should run autoupdate.])dnl -LT_LANG(Fortran)]) -m4trace:/usr/share/aclocal/libtool.m4:833: -1- AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)]) -m4trace:/usr/share/aclocal/libtool.m4:833: -1- AC_DEFUN([AC_LIBTOOL_GCJ], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBTOOL_GCJ' is obsolete. -You should run autoupdate.])dnl -LT_LANG(Java)]) -m4trace:/usr/share/aclocal/libtool.m4:1402: -1- AC_DEFUN([_LT_COMPILER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl -m4_require([_LT_DECL_SED])dnl -AC_CACHE_CHECK([$1], [$2], - [$2=no - m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="$3" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - # The option is referenced via a variable to avoid confusing sed. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&AS_MESSAGE_LOG_FD - echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD - if (exit $ac_status) && test -s "$ac_outfile"; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings other than the usual output. - $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then - $2=yes - fi - fi - $RM conftest* -]) - -if test x"[$]$2" = xyes; then - m4_if([$5], , :, [$5]) -else - m4_if([$6], , :, [$6]) -fi -]) -m4trace:/usr/share/aclocal/libtool.m4:1444: -1- AU_DEFUN([AC_LIBTOOL_COMPILER_OPTION], [m4_if($#, 0, [_LT_COMPILER_OPTION], [_LT_COMPILER_OPTION($@)])]) -m4trace:/usr/share/aclocal/libtool.m4:1444: -1- AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBTOOL_COMPILER_OPTION' is obsolete. -You should run autoupdate.])dnl -m4_if($#, 0, [_LT_COMPILER_OPTION], [_LT_COMPILER_OPTION($@)])]) -m4trace:/usr/share/aclocal/libtool.m4:1453: -1- AC_DEFUN([_LT_LINKER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl -m4_require([_LT_DECL_SED])dnl -AC_CACHE_CHECK([$1], [$2], - [$2=no - save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS $3" - echo "$lt_simple_link_test_code" > conftest.$ac_ext - if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then - # The linker can only warn and ignore the option if not recognized - # So say no if there are warnings - if test -s conftest.err; then - # Append any errors to the config.log. - cat conftest.err 1>&AS_MESSAGE_LOG_FD - $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if diff conftest.exp conftest.er2 >/dev/null; then - $2=yes - fi - else - $2=yes - fi - fi - $RM -r conftest* - LDFLAGS="$save_LDFLAGS" -]) - -if test x"[$]$2" = xyes; then - m4_if([$4], , :, [$4]) -else - m4_if([$5], , :, [$5]) -fi -]) -m4trace:/usr/share/aclocal/libtool.m4:1488: -1- AU_DEFUN([AC_LIBTOOL_LINKER_OPTION], [m4_if($#, 0, [_LT_LINKER_OPTION], [_LT_LINKER_OPTION($@)])]) -m4trace:/usr/share/aclocal/libtool.m4:1488: -1- AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBTOOL_LINKER_OPTION' is obsolete. -You should run autoupdate.])dnl -m4_if($#, 0, [_LT_LINKER_OPTION], [_LT_LINKER_OPTION($@)])]) -m4trace:/usr/share/aclocal/libtool.m4:1495: -1- AC_DEFUN([LT_CMD_MAX_LEN], [AC_REQUIRE([AC_CANONICAL_HOST])dnl -# find the maximum length of command line arguments -AC_MSG_CHECKING([the maximum length of command line arguments]) -AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl - i=0 - teststring="ABCD" - - case $build_os in - msdosdjgpp*) - # On DJGPP, this test can blow up pretty badly due to problems in libc - # (any single argument exceeding 2000 bytes causes a buffer overrun - # during glob expansion). Even if it were fixed, the result of this - # check would be larger than it should be. - lt_cv_sys_max_cmd_len=12288; # 12K is about right - ;; - - gnu*) - # Under GNU Hurd, this test is not required because there is - # no limit to the length of command line arguments. - # Libtool will interpret -1 as no limit whatsoever - lt_cv_sys_max_cmd_len=-1; - ;; - - cygwin* | mingw* | cegcc*) - # On Win9x/ME, this test blows up -- it succeeds, but takes - # about 5 minutes as the teststring grows exponentially. - # Worse, since 9x/ME are not pre-emptively multitasking, - # you end up with a "frozen" computer, even though with patience - # the test eventually succeeds (with a max line length of 256k). - # Instead, let's just punt: use the minimum linelength reported by - # all of the supported platforms: 8192 (on NT/2K/XP). - lt_cv_sys_max_cmd_len=8192; - ;; - - amigaos*) - # On AmigaOS with pdksh, this test takes hours, literally. - # So we just punt and use a minimum line length of 8192. - lt_cv_sys_max_cmd_len=8192; - ;; - - netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) - # This has been around since 386BSD, at least. Likely further. - if test -x /sbin/sysctl; then - lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` - elif test -x /usr/sbin/sysctl; then - lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` - else - lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs - fi - # And add a safety zone - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` - ;; - - interix*) - # We know the value 262144 and hardcode it with a safety zone (like BSD) - lt_cv_sys_max_cmd_len=196608 - ;; - - osf*) - # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure - # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not - # nice to cause kernel panics so lets avoid the loop below. - # First set a reasonable default. - lt_cv_sys_max_cmd_len=16384 - # - if test -x /sbin/sysconfig; then - case `/sbin/sysconfig -q proc exec_disable_arg_limit` in - *1*) lt_cv_sys_max_cmd_len=-1 ;; - esac - fi - ;; - sco3.2v5*) - lt_cv_sys_max_cmd_len=102400 - ;; - sysv5* | sco5v6* | sysv4.2uw2*) - kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` - if test -n "$kargmax"; then - lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'` - else - lt_cv_sys_max_cmd_len=32768 - fi - ;; - *) - lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` - if test -n "$lt_cv_sys_max_cmd_len"; then - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` - else - # Make teststring a little bigger before we do anything with it. - # a 1K string should be a reasonable start. - for i in 1 2 3 4 5 6 7 8 ; do - teststring=$teststring$teststring - done - SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} - # If test is not a shell built-in, we'll probably end up computing a - # maximum length that is only half of the actual maximum length, but - # we can't tell. - while { test "X"`$SHELL [$]0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \ - = "XX$teststring$teststring"; } >/dev/null 2>&1 && - test $i != 17 # 1/2 MB should be enough - do - i=`expr $i + 1` - teststring=$teststring$teststring - done - # Only check the string length outside the loop. - lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` - teststring= - # Add a significant safety factor because C++ compilers can tack on - # massive amounts of additional arguments before passing them to the - # linker. It appears as though 1/2 is a usable value. - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` - fi - ;; - esac -]) -if test -n $lt_cv_sys_max_cmd_len ; then - AC_MSG_RESULT($lt_cv_sys_max_cmd_len) -else - AC_MSG_RESULT(none) -fi -max_cmd_len=$lt_cv_sys_max_cmd_len -_LT_DECL([], [max_cmd_len], [0], - [What is the maximum length of a command?]) -]) -m4trace:/usr/share/aclocal/libtool.m4:1623: -1- AU_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], [m4_if($#, 0, [LT_CMD_MAX_LEN], [LT_CMD_MAX_LEN($@)])]) -m4trace:/usr/share/aclocal/libtool.m4:1623: -1- AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBTOOL_SYS_MAX_CMD_LEN' is obsolete. -You should run autoupdate.])dnl -m4_if($#, 0, [LT_CMD_MAX_LEN], [LT_CMD_MAX_LEN($@)])]) -m4trace:/usr/share/aclocal/libtool.m4:1724: -1- AC_DEFUN([LT_SYS_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl -if test "x$enable_dlopen" != xyes; then - enable_dlopen=unknown - enable_dlopen_self=unknown - enable_dlopen_self_static=unknown -else - lt_cv_dlopen=no - lt_cv_dlopen_libs= - - case $host_os in - beos*) - lt_cv_dlopen="load_add_on" - lt_cv_dlopen_libs= - lt_cv_dlopen_self=yes - ;; - - mingw* | pw32* | cegcc*) - lt_cv_dlopen="LoadLibrary" - lt_cv_dlopen_libs= - ;; - - cygwin*) - lt_cv_dlopen="dlopen" - lt_cv_dlopen_libs= - ;; - - darwin*) - # if libdl is installed we need to link against it - AC_CHECK_LIB([dl], [dlopen], - [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[ - lt_cv_dlopen="dyld" - lt_cv_dlopen_libs= - lt_cv_dlopen_self=yes - ]) - ;; - - *) - AC_CHECK_FUNC([shl_load], - [lt_cv_dlopen="shl_load"], - [AC_CHECK_LIB([dld], [shl_load], - [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"], - [AC_CHECK_FUNC([dlopen], - [lt_cv_dlopen="dlopen"], - [AC_CHECK_LIB([dl], [dlopen], - [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], - [AC_CHECK_LIB([svld], [dlopen], - [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"], - [AC_CHECK_LIB([dld], [dld_link], - [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"]) - ]) - ]) - ]) - ]) - ]) - ;; - esac - - if test "x$lt_cv_dlopen" != xno; then - enable_dlopen=yes - else - enable_dlopen=no - fi - - case $lt_cv_dlopen in - dlopen) - save_CPPFLAGS="$CPPFLAGS" - test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" - - save_LDFLAGS="$LDFLAGS" - wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" - - save_LIBS="$LIBS" - LIBS="$lt_cv_dlopen_libs $LIBS" - - AC_CACHE_CHECK([whether a program can dlopen itself], - lt_cv_dlopen_self, [dnl - _LT_TRY_DLOPEN_SELF( - lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, - lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) - ]) - - if test "x$lt_cv_dlopen_self" = xyes; then - wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" - AC_CACHE_CHECK([whether a statically linked program can dlopen itself], - lt_cv_dlopen_self_static, [dnl - _LT_TRY_DLOPEN_SELF( - lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, - lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) - ]) - fi - - CPPFLAGS="$save_CPPFLAGS" - LDFLAGS="$save_LDFLAGS" - LIBS="$save_LIBS" - ;; - esac - - case $lt_cv_dlopen_self in - yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; - *) enable_dlopen_self=unknown ;; - esac - - case $lt_cv_dlopen_self_static in - yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; - *) enable_dlopen_self_static=unknown ;; - esac -fi -_LT_DECL([dlopen_support], [enable_dlopen], [0], - [Whether dlopen is supported]) -_LT_DECL([dlopen_self], [enable_dlopen_self], [0], - [Whether dlopen of programs is supported]) -_LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0], - [Whether dlopen of statically linked programs is supported]) -]) -m4trace:/usr/share/aclocal/libtool.m4:1841: -1- AU_DEFUN([AC_LIBTOOL_DLOPEN_SELF], [m4_if($#, 0, [LT_SYS_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF($@)])]) -m4trace:/usr/share/aclocal/libtool.m4:1841: -1- AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBTOOL_DLOPEN_SELF' is obsolete. -You should run autoupdate.])dnl -m4_if($#, 0, [LT_SYS_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF($@)])]) -m4trace:/usr/share/aclocal/libtool.m4:2741: -1- AC_DEFUN([_LT_PATH_TOOL_PREFIX], [m4_require([_LT_DECL_EGREP])dnl -AC_MSG_CHECKING([for $1]) -AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, -[case $MAGIC_CMD in -[[\\/*] | ?:[\\/]*]) - lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. - ;; -*) - lt_save_MAGIC_CMD="$MAGIC_CMD" - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR -dnl $ac_dummy forces splitting on constant user-supplied paths. -dnl POSIX.2 word splitting is done only on the output of word expansions, -dnl not every word. This closes a longstanding sh security hole. - ac_dummy="m4_if([$2], , $PATH, [$2])" - for ac_dir in $ac_dummy; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$1; then - lt_cv_path_MAGIC_CMD="$ac_dir/$1" - if test -n "$file_magic_test_file"; then - case $deplibs_check_method in - "file_magic "*) - file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` - MAGIC_CMD="$lt_cv_path_MAGIC_CMD" - if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | - $EGREP "$file_magic_regex" > /dev/null; then - : - else - cat <<_LT_EOF 1>&2 - -*** Warning: the command libtool uses to detect shared libraries, -*** $file_magic_cmd, produces output that libtool cannot recognize. -*** The result is that libtool may fail to recognize shared libraries -*** as such. This will affect the creation of libtool libraries that -*** depend on shared libraries, but programs linked with such libtool -*** libraries will work regardless of this problem. Nevertheless, you -*** may want to report the problem to your system manager and/or to -*** bug-libtool@gnu.org - -_LT_EOF - fi ;; - esac - fi - break - fi - done - IFS="$lt_save_ifs" - MAGIC_CMD="$lt_save_MAGIC_CMD" - ;; -esac]) -MAGIC_CMD="$lt_cv_path_MAGIC_CMD" -if test -n "$MAGIC_CMD"; then - AC_MSG_RESULT($MAGIC_CMD) -else - AC_MSG_RESULT(no) -fi -_LT_DECL([], [MAGIC_CMD], [0], - [Used to examine libraries when file_magic_cmd begins with "file"])dnl -]) -m4trace:/usr/share/aclocal/libtool.m4:2803: -1- AU_DEFUN([AC_PATH_TOOL_PREFIX], [m4_if($#, 0, [_LT_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX($@)])]) -m4trace:/usr/share/aclocal/libtool.m4:2803: -1- AC_DEFUN([AC_PATH_TOOL_PREFIX], [AC_DIAGNOSE([obsolete], [The macro `AC_PATH_TOOL_PREFIX' is obsolete. -You should run autoupdate.])dnl -m4_if($#, 0, [_LT_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX($@)])]) -m4trace:/usr/share/aclocal/libtool.m4:2826: -1- AC_DEFUN([LT_PATH_LD], [AC_REQUIRE([AC_PROG_CC])dnl -AC_REQUIRE([AC_CANONICAL_HOST])dnl -AC_REQUIRE([AC_CANONICAL_BUILD])dnl -m4_require([_LT_DECL_SED])dnl -m4_require([_LT_DECL_EGREP])dnl - -AC_ARG_WITH([gnu-ld], - [AS_HELP_STRING([--with-gnu-ld], - [assume the C compiler uses GNU ld @<:@default=no@:>@])], - [test "$withval" = no || with_gnu_ld=yes], - [with_gnu_ld=no])dnl - -ac_prog=ld -if test "$GCC" = yes; then - # Check if gcc -print-prog-name=ld gives a path. - AC_MSG_CHECKING([for ld used by $CC]) - case $host in - *-*-mingw*) - # gcc leaves a trailing carriage return which upsets mingw - ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; - *) - ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; - esac - case $ac_prog in - # Accept absolute paths. - [[\\/]]* | ?:[[\\/]]*) - re_direlt='/[[^/]][[^/]]*/\.\./' - # Canonicalize the pathname of ld - ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` - while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do - ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` - done - test -z "$LD" && LD="$ac_prog" - ;; - "") - # If it fails, then pretend we aren't using GCC. - ac_prog=ld - ;; - *) - # If it is relative, then search for the first ld in PATH. - with_gnu_ld=unknown - ;; - esac -elif test "$with_gnu_ld" = yes; then - AC_MSG_CHECKING([for GNU ld]) -else - AC_MSG_CHECKING([for non-GNU ld]) -fi -AC_CACHE_VAL(lt_cv_path_LD, -[if test -z "$LD"; then - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for ac_dir in $PATH; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then - lt_cv_path_LD="$ac_dir/$ac_prog" - # Check to see if the program is GNU ld. I'd rather use --version, - # but apparently some variants of GNU ld only accept -v. - # Break only if it was the GNU/non-GNU ld that we prefer. - case `"$lt_cv_path_LD" -v 2>&1 &1 | sed '1q'` in - */dev/null* | *'Invalid file or object type'*) - lt_cv_path_NM="$tmp_nm -B" - break - ;; - *) - case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in - */dev/null*) - lt_cv_path_NM="$tmp_nm -p" - break - ;; - *) - lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but - continue # so that we can try to find one that supports BSD flags - ;; - esac - ;; - esac - fi - done - IFS="$lt_save_ifs" - done - : ${lt_cv_path_NM=no} -fi]) -if test "$lt_cv_path_NM" != "no"; then - NM="$lt_cv_path_NM" -else - # Didn't find any BSD compatible name lister, look for dumpbin. - AC_CHECK_TOOLS(DUMPBIN, ["dumpbin -symbols" "link -dump -symbols"], :) - AC_SUBST([DUMPBIN]) - if test "$DUMPBIN" != ":"; then - NM="$DUMPBIN" - fi -fi -test -z "$NM" && NM=nm -AC_SUBST([NM]) -_LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl - -AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface], - [lt_cv_nm_interface="BSD nm" - echo "int some_variable = 0;" > conftest.$ac_ext - (eval echo "\"\$as_me:__oline__: $ac_compile\"" >&AS_MESSAGE_LOG_FD) - (eval "$ac_compile" 2>conftest.err) - cat conftest.err >&AS_MESSAGE_LOG_FD - (eval echo "\"\$as_me:__oline__: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD) - (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) - cat conftest.err >&AS_MESSAGE_LOG_FD - (eval echo "\"\$as_me:__oline__: output\"" >&AS_MESSAGE_LOG_FD) - cat conftest.out >&AS_MESSAGE_LOG_FD - if $GREP 'External.*some_variable' conftest.out > /dev/null; then - lt_cv_nm_interface="MS dumpbin" - fi - rm -f conftest*]) -]) -m4trace:/usr/share/aclocal/libtool.m4:3257: -1- AU_DEFUN([AM_PROG_NM], [m4_if($#, 0, [LT_PATH_NM], [LT_PATH_NM($@)])]) -m4trace:/usr/share/aclocal/libtool.m4:3257: -1- AC_DEFUN([AM_PROG_NM], [AC_DIAGNOSE([obsolete], [The macro `AM_PROG_NM' is obsolete. -You should run autoupdate.])dnl -m4_if($#, 0, [LT_PATH_NM], [LT_PATH_NM($@)])]) -m4trace:/usr/share/aclocal/libtool.m4:3258: -1- AU_DEFUN([AC_PROG_NM], [m4_if($#, 0, [LT_PATH_NM], [LT_PATH_NM($@)])]) -m4trace:/usr/share/aclocal/libtool.m4:3258: -1- AC_DEFUN([AC_PROG_NM], [AC_DIAGNOSE([obsolete], [The macro `AC_PROG_NM' is obsolete. -You should run autoupdate.])dnl -m4_if($#, 0, [LT_PATH_NM], [LT_PATH_NM($@)])]) -m4trace:/usr/share/aclocal/libtool.m4:3267: -1- AC_DEFUN([LT_LIB_M], [AC_REQUIRE([AC_CANONICAL_HOST])dnl -LIBM= -case $host in -*-*-beos* | *-*-cygwin* | *-*-pw32* | *-*-darwin*) - # These system don't have libm, or don't need it - ;; -*-ncr-sysv4.3*) - AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw") - AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") - ;; -*) - AC_CHECK_LIB(m, cos, LIBM="-lm") - ;; -esac -AC_SUBST([LIBM]) -]) -m4trace:/usr/share/aclocal/libtool.m4:3286: -1- AU_DEFUN([AC_CHECK_LIBM], [m4_if($#, 0, [LT_LIB_M], [LT_LIB_M($@)])]) -m4trace:/usr/share/aclocal/libtool.m4:3286: -1- AC_DEFUN([AC_CHECK_LIBM], [AC_DIAGNOSE([obsolete], [The macro `AC_CHECK_LIBM' is obsolete. -You should run autoupdate.])dnl -m4_if($#, 0, [LT_LIB_M], [LT_LIB_M($@)])]) -m4trace:/usr/share/aclocal/libtool.m4:6987: -1- AC_DEFUN([LT_PROG_GCJ], [m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ], - [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ], - [AC_CHECK_TOOL(GCJ, gcj,) - test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2" - AC_SUBST(GCJFLAGS)])])[]dnl -]) -m4trace:/usr/share/aclocal/libtool.m4:6996: -1- AU_DEFUN([LT_AC_PROG_GCJ], [m4_if($#, 0, [LT_PROG_GCJ], [LT_PROG_GCJ($@)])]) -m4trace:/usr/share/aclocal/libtool.m4:6996: -1- AC_DEFUN([LT_AC_PROG_GCJ], [AC_DIAGNOSE([obsolete], [The macro `LT_AC_PROG_GCJ' is obsolete. -You should run autoupdate.])dnl -m4_if($#, 0, [LT_PROG_GCJ], [LT_PROG_GCJ($@)])]) -m4trace:/usr/share/aclocal/libtool.m4:7003: -1- AC_DEFUN([LT_PROG_RC], [AC_CHECK_TOOL(RC, windres,) -]) -m4trace:/usr/share/aclocal/libtool.m4:7008: -1- AU_DEFUN([LT_AC_PROG_RC], [m4_if($#, 0, [LT_PROG_RC], [LT_PROG_RC($@)])]) -m4trace:/usr/share/aclocal/libtool.m4:7008: -1- AC_DEFUN([LT_AC_PROG_RC], [AC_DIAGNOSE([obsolete], [The macro `LT_AC_PROG_RC' is obsolete. -You should run autoupdate.])dnl -m4_if($#, 0, [LT_PROG_RC], [LT_PROG_RC($@)])]) -m4trace:/usr/share/aclocal/libtool.m4:7119: -1- AU_DEFUN([LT_AC_PROG_SED], [m4_if($#, 0, [AC_PROG_SED], [AC_PROG_SED($@)])]) -m4trace:/usr/share/aclocal/libtool.m4:7119: -1- AC_DEFUN([LT_AC_PROG_SED], [AC_DIAGNOSE([obsolete], [The macro `LT_AC_PROG_SED' is obsolete. -You should run autoupdate.])dnl -m4_if($#, 0, [AC_PROG_SED], [AC_PROG_SED($@)])]) -m4trace:/usr/share/aclocal/ltdl.m4:16: -1- AC_DEFUN([LT_CONFIG_LTDL_DIR], [AC_BEFORE([$0], [LTDL_INIT]) -_$0($*) -]) -m4trace:/usr/share/aclocal/ltdl.m4:68: -1- AC_DEFUN([LTDL_CONVENIENCE], [AC_BEFORE([$0], [LTDL_INIT])dnl -dnl Although the argument is deprecated and no longer documented, -dnl LTDL_CONVENIENCE used to take a DIRECTORY orgument, if we have one -dnl here make sure it is the same as any other declaration of libltdl's -dnl location! This also ensures lt_ltdl_dir is set when configure.ac is -dnl not yet using an explicit LT_CONFIG_LTDL_DIR. -m4_ifval([$1], [_LT_CONFIG_LTDL_DIR([$1])])dnl -_$0() -]) -m4trace:/usr/share/aclocal/ltdl.m4:81: -1- AU_DEFUN([AC_LIBLTDL_CONVENIENCE], [_LT_CONFIG_LTDL_DIR([m4_default([$1], [libltdl])]) -_LTDL_CONVENIENCE]) -m4trace:/usr/share/aclocal/ltdl.m4:81: -1- AC_DEFUN([AC_LIBLTDL_CONVENIENCE], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBLTDL_CONVENIENCE' is obsolete. -You should run autoupdate.])dnl -_LT_CONFIG_LTDL_DIR([m4_default([$1], [libltdl])]) -_LTDL_CONVENIENCE]) -m4trace:/usr/share/aclocal/ltdl.m4:124: -1- AC_DEFUN([LTDL_INSTALLABLE], [AC_BEFORE([$0], [LTDL_INIT])dnl -dnl Although the argument is deprecated and no longer documented, -dnl LTDL_INSTALLABLE used to take a DIRECTORY orgument, if we have one -dnl here make sure it is the same as any other declaration of libltdl's -dnl location! This also ensures lt_ltdl_dir is set when configure.ac is -dnl not yet using an explicit LT_CONFIG_LTDL_DIR. -m4_ifval([$1], [_LT_CONFIG_LTDL_DIR([$1])])dnl -_$0() -]) -m4trace:/usr/share/aclocal/ltdl.m4:137: -1- AU_DEFUN([AC_LIBLTDL_INSTALLABLE], [_LT_CONFIG_LTDL_DIR([m4_default([$1], [libltdl])]) -_LTDL_INSTALLABLE]) -m4trace:/usr/share/aclocal/ltdl.m4:137: -1- AC_DEFUN([AC_LIBLTDL_INSTALLABLE], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBLTDL_INSTALLABLE' is obsolete. -You should run autoupdate.])dnl -_LT_CONFIG_LTDL_DIR([m4_default([$1], [libltdl])]) -_LTDL_INSTALLABLE]) -m4trace:/usr/share/aclocal/ltdl.m4:213: -1- AC_DEFUN([_LT_LIBOBJ], [ - m4_pattern_allow([^_LT_LIBOBJS$]) - _LT_LIBOBJS="$_LT_LIBOBJS $1.$ac_objext" -]) -m4trace:/usr/share/aclocal/ltdl.m4:226: -1- AC_DEFUN([LTDL_INIT], [dnl Parse OPTIONS -_LT_SET_OPTIONS([$0], [$1]) - -dnl We need to keep our own list of libobjs separate from our parent project, -dnl and the easiest way to do that is redefine the AC_LIBOBJs macro while -dnl we look for our own LIBOBJs. -m4_pushdef([AC_LIBOBJ], m4_defn([_LT_LIBOBJ])) -m4_pushdef([AC_LIBSOURCES]) - -dnl If not otherwise defined, default to the 1.5.x compatible subproject mode: -m4_if(_LTDL_MODE, [], - [m4_define([_LTDL_MODE], m4_default([$2], [subproject])) - m4_if([-1], [m4_bregexp(_LTDL_MODE, [\(subproject\|\(non\)?recursive\)])], - [m4_fatal([unknown libltdl mode: ]_LTDL_MODE)])]) - -AC_ARG_WITH([included_ltdl], - [AS_HELP_STRING([--with-included-ltdl], - [use the GNU ltdl sources included here])]) - -if test "x$with_included_ltdl" != xyes; then - # We are not being forced to use the included libltdl sources, so - # decide whether there is a useful installed version we can use. - AC_CHECK_HEADER([ltdl.h], - [AC_CHECK_DECL([lt_dlinterface_register], - [AC_CHECK_LIB([ltdl], [lt_dladvise_preload], - [with_included_ltdl=no], - [with_included_ltdl=yes])], - [with_included_ltdl=yes], - [AC_INCLUDES_DEFAULT - #include ])], - [with_included_ltdl=yes], - [AC_INCLUDES_DEFAULT] - ) -fi - -dnl If neither LT_CONFIG_LTDL_DIR, LTDL_CONVENIENCE nor LTDL_INSTALLABLE -dnl was called yet, then for old times' sake, we assume libltdl is in an -dnl eponymous directory: -AC_PROVIDE_IFELSE([LT_CONFIG_LTDL_DIR], [], [_LT_CONFIG_LTDL_DIR([libltdl])]) - -AC_ARG_WITH([ltdl_include], - [AS_HELP_STRING([--with-ltdl-include=DIR], - [use the ltdl headers installed in DIR])]) - -if test -n "$with_ltdl_include"; then - if test -f "$with_ltdl_include/ltdl.h"; then : - else - AC_MSG_ERROR([invalid ltdl include directory: `$with_ltdl_include']) - fi -else - with_ltdl_include=no -fi - -AC_ARG_WITH([ltdl_lib], - [AS_HELP_STRING([--with-ltdl-lib=DIR], - [use the libltdl.la installed in DIR])]) - -if test -n "$with_ltdl_lib"; then - if test -f "$with_ltdl_lib/libltdl.la"; then : - else - AC_MSG_ERROR([invalid ltdl library directory: `$with_ltdl_lib']) - fi -else - with_ltdl_lib=no -fi - -case ,$with_included_ltdl,$with_ltdl_include,$with_ltdl_lib, in - ,yes,no,no,) - m4_case(m4_default(_LTDL_TYPE, [convenience]), - [convenience], [_LTDL_CONVENIENCE], - [installable], [_LTDL_INSTALLABLE], - [m4_fatal([unknown libltdl build type: ]_LTDL_TYPE)]) - ;; - ,no,no,no,) - # If the included ltdl is not to be used, then use the - # preinstalled libltdl we found. - AC_DEFINE([HAVE_LTDL], [1], - [Define this if a modern libltdl is already installed]) - LIBLTDL=-lltdl - LTDLDEPS= - LTDLINCL= - ;; - ,no*,no,*) - AC_MSG_ERROR([`--with-ltdl-include' and `--with-ltdl-lib' options must be used together]) - ;; - *) with_included_ltdl=no - LIBLTDL="-L$with_ltdl_lib -lltdl" - LTDLDEPS= - LTDLINCL="-I$with_ltdl_include" - ;; -esac -INCLTDL="$LTDLINCL" - -# Report our decision... -AC_MSG_CHECKING([where to find libltdl headers]) -AC_MSG_RESULT([$LTDLINCL]) -AC_MSG_CHECKING([where to find libltdl library]) -AC_MSG_RESULT([$LIBLTDL]) - -_LTDL_SETUP - -dnl restore autoconf definition. -m4_popdef([AC_LIBOBJ]) -m4_popdef([AC_LIBSOURCES]) - -AC_CONFIG_COMMANDS_PRE([ - _ltdl_libobjs= - _ltdl_ltlibobjs= - if test -n "$_LT_LIBOBJS"; then - # Remove the extension. - _lt_sed_drop_objext='s/\.o$//;s/\.obj$//' - for i in `for i in $_LT_LIBOBJS; do echo "$i"; done | sed "$_lt_sed_drop_objext" | sort -u`; do - _ltdl_libobjs="$_ltdl_libobjs $lt_libobj_prefix$i.$ac_objext" - _ltdl_ltlibobjs="$_ltdl_ltlibobjs $lt_libobj_prefix$i.lo" - done - fi - AC_SUBST([ltdl_LIBOBJS], [$_ltdl_libobjs]) - AC_SUBST([ltdl_LTLIBOBJS], [$_ltdl_ltlibobjs]) -]) - -# Only expand once: -m4_define([LTDL_INIT]) -]) -m4trace:/usr/share/aclocal/ltdl.m4:352: -1- AU_DEFUN([AC_LIB_LTDL], [LTDL_INIT($@)]) -m4trace:/usr/share/aclocal/ltdl.m4:352: -1- AC_DEFUN([AC_LIB_LTDL], [AC_DIAGNOSE([obsolete], [The macro `AC_LIB_LTDL' is obsolete. -You should run autoupdate.])dnl -LTDL_INIT($@)]) -m4trace:/usr/share/aclocal/ltdl.m4:353: -1- AU_DEFUN([AC_WITH_LTDL], [LTDL_INIT($@)]) -m4trace:/usr/share/aclocal/ltdl.m4:353: -1- AC_DEFUN([AC_WITH_LTDL], [AC_DIAGNOSE([obsolete], [The macro `AC_WITH_LTDL' is obsolete. -You should run autoupdate.])dnl -LTDL_INIT($@)]) -m4trace:/usr/share/aclocal/ltdl.m4:354: -1- AU_DEFUN([LT_WITH_LTDL], [LTDL_INIT($@)]) -m4trace:/usr/share/aclocal/ltdl.m4:354: -1- AC_DEFUN([LT_WITH_LTDL], [AC_DIAGNOSE([obsolete], [The macro `LT_WITH_LTDL' is obsolete. -You should run autoupdate.])dnl -LTDL_INIT($@)]) -m4trace:/usr/share/aclocal/ltdl.m4:367: -1- AC_DEFUN([_LTDL_SETUP], [AC_REQUIRE([AC_PROG_CC])dnl -AC_REQUIRE([LT_SYS_MODULE_EXT])dnl -AC_REQUIRE([LT_SYS_MODULE_PATH])dnl -AC_REQUIRE([LT_SYS_DLSEARCH_PATH])dnl -AC_REQUIRE([LT_LIB_DLLOAD])dnl -AC_REQUIRE([LT_SYS_SYMBOL_USCORE])dnl -AC_REQUIRE([LT_FUNC_DLSYM_USCORE])dnl -AC_REQUIRE([LT_SYS_DLOPEN_DEPLIBS])dnl -AC_REQUIRE([gl_FUNC_ARGZ])dnl - -m4_require([_LT_CHECK_OBJDIR])dnl -m4_require([_LT_HEADER_DLFCN])dnl -m4_require([_LT_CHECK_DLPREOPEN])dnl -m4_require([_LT_DECL_SED])dnl - -dnl Don't require this, or it will be expanded earlier than the code -dnl that sets the variables it relies on: -_LT_ENABLE_INSTALL - -dnl _LTDL_MODE specific code must be called at least once: -_LTDL_MODE_DISPATCH - -# In order that ltdl.c can compile, find out the first AC_CONFIG_HEADERS -# the user used. This is so that ltdl.h can pick up the parent projects -# config.h file, The first file in AC_CONFIG_HEADERS must contain the -# definitions required by ltdl.c. -# FIXME: Remove use of undocumented AC_LIST_HEADERS (2.59 compatibility). -AC_CONFIG_COMMANDS_PRE([dnl -m4_pattern_allow([^LT_CONFIG_H$])dnl -m4_ifset([AH_HEADER], - [LT_CONFIG_H=AH_HEADER], - [m4_ifset([AC_LIST_HEADERS], - [LT_CONFIG_H=`echo "AC_LIST_HEADERS" | $SED 's,^[[ ]]*,,;s,[[ :]].*$,,'`], - [])])]) -AC_SUBST([LT_CONFIG_H]) - -AC_CHECK_HEADERS([unistd.h dl.h sys/dl.h dld.h mach-o/dyld.h dirent.h], - [], [], [AC_INCLUDES_DEFAULT]) - -AC_CHECK_FUNCS([closedir opendir readdir], [], [AC_LIBOBJ([lt__dirent])]) -AC_CHECK_FUNCS([strlcat strlcpy], [], [AC_LIBOBJ([lt__strl])]) - -AC_DEFINE_UNQUOTED([LT_LIBEXT],["$libext"],[The archive extension]) - -name=ltdl -LTDLOPEN=`eval "\\$ECHO \"$libname_spec\""` -AC_SUBST([LTDLOPEN]) -]) -m4trace:/usr/share/aclocal/ltdl.m4:437: -1- AC_DEFUN([LT_SYS_DLOPEN_DEPLIBS], [AC_REQUIRE([AC_CANONICAL_HOST])dnl -AC_CACHE_CHECK([whether deplibs are loaded by dlopen], - [lt_cv_sys_dlopen_deplibs], - [# PORTME does your system automatically load deplibs for dlopen? - # or its logical equivalent (e.g. shl_load for HP-UX < 11) - # For now, we just catch OSes we know something about -- in the - # future, we'll try test this programmatically. - lt_cv_sys_dlopen_deplibs=unknown - case $host_os in - aix3*|aix4.1.*|aix4.2.*) - # Unknown whether this is true for these versions of AIX, but - # we want this `case' here to explicitly catch those versions. - lt_cv_sys_dlopen_deplibs=unknown - ;; - aix[[4-9]]*) - lt_cv_sys_dlopen_deplibs=yes - ;; - amigaos*) - case $host_cpu in - powerpc) - lt_cv_sys_dlopen_deplibs=no - ;; - esac - ;; - darwin*) - # Assuming the user has installed a libdl from somewhere, this is true - # If you are looking for one http://www.opendarwin.org/projects/dlcompat - lt_cv_sys_dlopen_deplibs=yes - ;; - freebsd* | dragonfly*) - lt_cv_sys_dlopen_deplibs=yes - ;; - gnu* | linux* | k*bsd*-gnu | kopensolaris*-gnu) - # GNU and its variants, using gnu ld.so (Glibc) - lt_cv_sys_dlopen_deplibs=yes - ;; - hpux10*|hpux11*) - lt_cv_sys_dlopen_deplibs=yes - ;; - interix*) - lt_cv_sys_dlopen_deplibs=yes - ;; - irix[[12345]]*|irix6.[[01]]*) - # Catch all versions of IRIX before 6.2, and indicate that we don't - # know how it worked for any of those versions. - lt_cv_sys_dlopen_deplibs=unknown - ;; - irix*) - # The case above catches anything before 6.2, and it's known that - # at 6.2 and later dlopen does load deplibs. - lt_cv_sys_dlopen_deplibs=yes - ;; - netbsd* | netbsdelf*-gnu) - lt_cv_sys_dlopen_deplibs=yes - ;; - openbsd*) - lt_cv_sys_dlopen_deplibs=yes - ;; - osf[[1234]]*) - # dlopen did load deplibs (at least at 4.x), but until the 5.x series, - # it did *not* use an RPATH in a shared library to find objects the - # library depends on, so we explicitly say `no'. - lt_cv_sys_dlopen_deplibs=no - ;; - osf5.0|osf5.0a|osf5.1) - # dlopen *does* load deplibs and with the right loader patch applied - # it even uses RPATH in a shared library to search for shared objects - # that the library depends on, but there's no easy way to know if that - # patch is installed. Since this is the case, all we can really - # say is unknown -- it depends on the patch being installed. If - # it is, this changes to `yes'. Without it, it would be `no'. - lt_cv_sys_dlopen_deplibs=unknown - ;; - osf*) - # the two cases above should catch all versions of osf <= 5.1. Read - # the comments above for what we know about them. - # At > 5.1, deplibs are loaded *and* any RPATH in a shared library - # is used to find them so we can finally say `yes'. - lt_cv_sys_dlopen_deplibs=yes - ;; - qnx*) - lt_cv_sys_dlopen_deplibs=yes - ;; - solaris*) - lt_cv_sys_dlopen_deplibs=yes - ;; - sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - libltdl_cv_sys_dlopen_deplibs=yes - ;; - esac - ]) -if test "$lt_cv_sys_dlopen_deplibs" != yes; then - AC_DEFINE([LTDL_DLOPEN_DEPLIBS], [1], - [Define if the OS needs help to load dependent libraries for dlopen().]) -fi -]) -m4trace:/usr/share/aclocal/ltdl.m4:536: -1- AU_DEFUN([AC_LTDL_SYS_DLOPEN_DEPLIBS], [m4_if($#, 0, [LT_SYS_DLOPEN_DEPLIBS], [LT_SYS_DLOPEN_DEPLIBS($@)])]) -m4trace:/usr/share/aclocal/ltdl.m4:536: -1- AC_DEFUN([AC_LTDL_SYS_DLOPEN_DEPLIBS], [AC_DIAGNOSE([obsolete], [The macro `AC_LTDL_SYS_DLOPEN_DEPLIBS' is obsolete. -You should run autoupdate.])dnl -m4_if($#, 0, [LT_SYS_DLOPEN_DEPLIBS], [LT_SYS_DLOPEN_DEPLIBS($@)])]) -m4trace:/usr/share/aclocal/ltdl.m4:543: -1- AC_DEFUN([LT_SYS_MODULE_EXT], [m4_require([_LT_SYS_DYNAMIC_LINKER])dnl -AC_CACHE_CHECK([which extension is used for runtime loadable modules], - [libltdl_cv_shlibext], -[ -module=yes -eval libltdl_cv_shlibext=$shrext_cmds - ]) -if test -n "$libltdl_cv_shlibext"; then - m4_pattern_allow([LT_MODULE_EXT])dnl - AC_DEFINE_UNQUOTED([LT_MODULE_EXT], ["$libltdl_cv_shlibext"], - [Define to the extension used for runtime loadable modules, say, ".so".]) -fi -]) -m4trace:/usr/share/aclocal/ltdl.m4:559: -1- AU_DEFUN([AC_LTDL_SHLIBEXT], [m4_if($#, 0, [LT_SYS_MODULE_EXT], [LT_SYS_MODULE_EXT($@)])]) -m4trace:/usr/share/aclocal/ltdl.m4:559: -1- AC_DEFUN([AC_LTDL_SHLIBEXT], [AC_DIAGNOSE([obsolete], [The macro `AC_LTDL_SHLIBEXT' is obsolete. -You should run autoupdate.])dnl -m4_if($#, 0, [LT_SYS_MODULE_EXT], [LT_SYS_MODULE_EXT($@)])]) -m4trace:/usr/share/aclocal/ltdl.m4:566: -1- AC_DEFUN([LT_SYS_MODULE_PATH], [m4_require([_LT_SYS_DYNAMIC_LINKER])dnl -AC_CACHE_CHECK([which variable specifies run-time module search path], - [lt_cv_module_path_var], [lt_cv_module_path_var="$shlibpath_var"]) -if test -n "$lt_cv_module_path_var"; then - m4_pattern_allow([LT_MODULE_PATH_VAR])dnl - AC_DEFINE_UNQUOTED([LT_MODULE_PATH_VAR], ["$lt_cv_module_path_var"], - [Define to the name of the environment variable that determines the run-time module search path.]) -fi -]) -m4trace:/usr/share/aclocal/ltdl.m4:578: -1- AU_DEFUN([AC_LTDL_SHLIBPATH], [m4_if($#, 0, [LT_SYS_MODULE_PATH], [LT_SYS_MODULE_PATH($@)])]) -m4trace:/usr/share/aclocal/ltdl.m4:578: -1- AC_DEFUN([AC_LTDL_SHLIBPATH], [AC_DIAGNOSE([obsolete], [The macro `AC_LTDL_SHLIBPATH' is obsolete. -You should run autoupdate.])dnl -m4_if($#, 0, [LT_SYS_MODULE_PATH], [LT_SYS_MODULE_PATH($@)])]) -m4trace:/usr/share/aclocal/ltdl.m4:585: -1- AC_DEFUN([LT_SYS_DLSEARCH_PATH], [m4_require([_LT_SYS_DYNAMIC_LINKER])dnl -AC_CACHE_CHECK([for the default library search path], - [lt_cv_sys_dlsearch_path], - [lt_cv_sys_dlsearch_path="$sys_lib_dlsearch_path_spec"]) -if test -n "$lt_cv_sys_dlsearch_path"; then - sys_dlsearch_path= - for dir in $lt_cv_sys_dlsearch_path; do - if test -z "$sys_dlsearch_path"; then - sys_dlsearch_path="$dir" - else - sys_dlsearch_path="$sys_dlsearch_path$PATH_SEPARATOR$dir" - fi - done - m4_pattern_allow([LT_DLSEARCH_PATH])dnl - AC_DEFINE_UNQUOTED([LT_DLSEARCH_PATH], ["$sys_dlsearch_path"], - [Define to the system default library search path.]) -fi -]) -m4trace:/usr/share/aclocal/ltdl.m4:606: -1- AU_DEFUN([AC_LTDL_SYSSEARCHPATH], [m4_if($#, 0, [LT_SYS_DLSEARCH_PATH], [LT_SYS_DLSEARCH_PATH($@)])]) -m4trace:/usr/share/aclocal/ltdl.m4:606: -1- AC_DEFUN([AC_LTDL_SYSSEARCHPATH], [AC_DIAGNOSE([obsolete], [The macro `AC_LTDL_SYSSEARCHPATH' is obsolete. -You should run autoupdate.])dnl -m4_if($#, 0, [LT_SYS_DLSEARCH_PATH], [LT_SYS_DLSEARCH_PATH($@)])]) -m4trace:/usr/share/aclocal/ltdl.m4:632: -1- AC_DEFUN([LT_LIB_DLLOAD], [m4_pattern_allow([^LT_DLLOADERS$]) -LT_DLLOADERS= -AC_SUBST([LT_DLLOADERS]) - -AC_LANG_PUSH([C]) - -LIBADD_DLOPEN= -AC_SEARCH_LIBS([dlopen], [dl], - [AC_DEFINE([HAVE_LIBDL], [1], - [Define if you have the libdl library or equivalent.]) - if test "$ac_cv_search_dlopen" != "none required" ; then - LIBADD_DLOPEN="-ldl" - fi - libltdl_cv_lib_dl_dlopen="yes" - LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}dlopen.la"], - [AC_LINK_IFELSE([AC_LANG_PROGRAM([[#if HAVE_DLFCN_H -# include -#endif - ]], [[dlopen(0, 0);]])], - [AC_DEFINE([HAVE_LIBDL], [1], - [Define if you have the libdl library or equivalent.]) - libltdl_cv_func_dlopen="yes" - LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}dlopen.la"], - [AC_CHECK_LIB([svld], [dlopen], - [AC_DEFINE([HAVE_LIBDL], [1], - [Define if you have the libdl library or equivalent.]) - LIBADD_DLOPEN="-lsvld" libltdl_cv_func_dlopen="yes" - LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}dlopen.la"])])]) -if test x"$libltdl_cv_func_dlopen" = xyes || test x"$libltdl_cv_lib_dl_dlopen" = xyes -then - lt_save_LIBS="$LIBS" - LIBS="$LIBS $LIBADD_DLOPEN" - AC_CHECK_FUNCS([dlerror]) - LIBS="$lt_save_LIBS" -fi -AC_SUBST([LIBADD_DLOPEN]) - -LIBADD_SHL_LOAD= -AC_CHECK_FUNC([shl_load], - [AC_DEFINE([HAVE_SHL_LOAD], [1], - [Define if you have the shl_load function.]) - LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}shl_load.la"], - [AC_CHECK_LIB([dld], [shl_load], - [AC_DEFINE([HAVE_SHL_LOAD], [1], - [Define if you have the shl_load function.]) - LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}shl_load.la" - LIBADD_SHL_LOAD="-ldld"])]) -AC_SUBST([LIBADD_SHL_LOAD]) - -case $host_os in -darwin[[1567]].*) -# We only want this for pre-Mac OS X 10.4. - AC_CHECK_FUNC([_dyld_func_lookup], - [AC_DEFINE([HAVE_DYLD], [1], - [Define if you have the _dyld_func_lookup function.]) - LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}dyld.la"]) - ;; -beos*) - LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}load_add_on.la" - ;; -cygwin* | mingw* | os2* | pw32*) - AC_CHECK_DECLS([cygwin_conv_path], [], [], [[#include ]]) - LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}loadlibrary.la" - ;; -esac - -AC_CHECK_LIB([dld], [dld_link], - [AC_DEFINE([HAVE_DLD], [1], - [Define if you have the GNU dld library.]) - LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}dld_link.la"]) -AC_SUBST([LIBADD_DLD_LINK]) - -m4_pattern_allow([^LT_DLPREOPEN$]) -LT_DLPREOPEN= -if test -n "$LT_DLLOADERS" -then - for lt_loader in $LT_DLLOADERS; do - LT_DLPREOPEN="$LT_DLPREOPEN-dlpreopen $lt_loader " - done - AC_DEFINE([HAVE_LIBDLLOADER], [1], - [Define if libdlloader will be built on this platform]) -fi -AC_SUBST([LT_DLPREOPEN]) - -dnl This isn't used anymore, but set it for backwards compatibility -LIBADD_DL="$LIBADD_DLOPEN $LIBADD_SHL_LOAD" -AC_SUBST([LIBADD_DL]) - -AC_LANG_POP -]) -m4trace:/usr/share/aclocal/ltdl.m4:725: -1- AU_DEFUN([AC_LTDL_DLLIB], [m4_if($#, 0, [LT_LIB_DLLOAD], [LT_LIB_DLLOAD($@)])]) -m4trace:/usr/share/aclocal/ltdl.m4:725: -1- AC_DEFUN([AC_LTDL_DLLIB], [AC_DIAGNOSE([obsolete], [The macro `AC_LTDL_DLLIB' is obsolete. -You should run autoupdate.])dnl -m4_if($#, 0, [LT_LIB_DLLOAD], [LT_LIB_DLLOAD($@)])]) -m4trace:/usr/share/aclocal/ltdl.m4:733: -1- AC_DEFUN([LT_SYS_SYMBOL_USCORE], [m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl -AC_CACHE_CHECK([for _ prefix in compiled symbols], - [lt_cv_sys_symbol_underscore], - [lt_cv_sys_symbol_underscore=no - cat > conftest.$ac_ext <<_LT_EOF -void nm_test_func(){} -int main(){nm_test_func;return 0;} -_LT_EOF - if AC_TRY_EVAL(ac_compile); then - # Now try to grab the symbols. - ac_nlist=conftest.nm - if AC_TRY_EVAL(NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $ac_nlist) && test -s "$ac_nlist"; then - # See whether the symbols have a leading underscore. - if grep '^. _nm_test_func' "$ac_nlist" >/dev/null; then - lt_cv_sys_symbol_underscore=yes - else - if grep '^. nm_test_func ' "$ac_nlist" >/dev/null; then - : - else - echo "configure: cannot find nm_test_func in $ac_nlist" >&AS_MESSAGE_LOG_FD - fi - fi - else - echo "configure: cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD - fi - else - echo "configure: failed program was:" >&AS_MESSAGE_LOG_FD - cat conftest.c >&AS_MESSAGE_LOG_FD - fi - rm -rf conftest* - ]) - sys_symbol_underscore=$lt_cv_sys_symbol_underscore - AC_SUBST([sys_symbol_underscore]) -]) -m4trace:/usr/share/aclocal/ltdl.m4:770: -1- AU_DEFUN([AC_LTDL_SYMBOL_USCORE], [m4_if($#, 0, [LT_SYS_SYMBOL_USCORE], [LT_SYS_SYMBOL_USCORE($@)])]) -m4trace:/usr/share/aclocal/ltdl.m4:770: -1- AC_DEFUN([AC_LTDL_SYMBOL_USCORE], [AC_DIAGNOSE([obsolete], [The macro `AC_LTDL_SYMBOL_USCORE' is obsolete. -You should run autoupdate.])dnl -m4_if($#, 0, [LT_SYS_SYMBOL_USCORE], [LT_SYS_SYMBOL_USCORE($@)])]) -m4trace:/usr/share/aclocal/ltdl.m4:777: -1- AC_DEFUN([LT_FUNC_DLSYM_USCORE], [AC_REQUIRE([LT_SYS_SYMBOL_USCORE])dnl -if test x"$lt_cv_sys_symbol_underscore" = xyes; then - if test x"$libltdl_cv_func_dlopen" = xyes || - test x"$libltdl_cv_lib_dl_dlopen" = xyes ; then - AC_CACHE_CHECK([whether we have to add an underscore for dlsym], - [libltdl_cv_need_uscore], - [libltdl_cv_need_uscore=unknown - save_LIBS="$LIBS" - LIBS="$LIBS $LIBADD_DLOPEN" - _LT_TRY_DLOPEN_SELF( - [libltdl_cv_need_uscore=no], [libltdl_cv_need_uscore=yes], - [], [libltdl_cv_need_uscore=cross]) - LIBS="$save_LIBS" - ]) - fi -fi - -if test x"$libltdl_cv_need_uscore" = xyes; then - AC_DEFINE([NEED_USCORE], [1], - [Define if dlsym() requires a leading underscore in symbol names.]) -fi -]) -m4trace:/usr/share/aclocal/ltdl.m4:802: -1- AU_DEFUN([AC_LTDL_DLSYM_USCORE], [m4_if($#, 0, [LT_FUNC_DLSYM_USCORE], [LT_FUNC_DLSYM_USCORE($@)])]) -m4trace:/usr/share/aclocal/ltdl.m4:802: -1- AC_DEFUN([AC_LTDL_DLSYM_USCORE], [AC_DIAGNOSE([obsolete], [The macro `AC_LTDL_DLSYM_USCORE' is obsolete. -You should run autoupdate.])dnl -m4_if($#, 0, [LT_FUNC_DLSYM_USCORE], [LT_FUNC_DLSYM_USCORE($@)])]) -m4trace:/usr/share/aclocal/ltoptions.m4:13: -1- AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])]) -m4trace:/usr/share/aclocal/ltoptions.m4:110: -1- AU_DEFUN([AC_LIBTOOL_DLOPEN], [_LT_SET_OPTION([LT_INIT], [dlopen]) -AC_DIAGNOSE([obsolete], -[$0: Remove this warning and the call to _LT_SET_OPTION when you -put the `dlopen' option into LT_INIT's first parameter.]) -]) -m4trace:/usr/share/aclocal/ltoptions.m4:110: -1- AC_DEFUN([AC_LIBTOOL_DLOPEN], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBTOOL_DLOPEN' is obsolete. -You should run autoupdate.])dnl -_LT_SET_OPTION([LT_INIT], [dlopen]) -AC_DIAGNOSE([obsolete], -[$0: Remove this warning and the call to _LT_SET_OPTION when you -put the `dlopen' option into LT_INIT's first parameter.]) -]) -m4trace:/usr/share/aclocal/ltoptions.m4:145: -1- AU_DEFUN([AC_LIBTOOL_WIN32_DLL], [AC_REQUIRE([AC_CANONICAL_HOST])dnl -_LT_SET_OPTION([LT_INIT], [win32-dll]) -AC_DIAGNOSE([obsolete], -[$0: Remove this warning and the call to _LT_SET_OPTION when you -put the `win32-dll' option into LT_INIT's first parameter.]) -]) -m4trace:/usr/share/aclocal/ltoptions.m4:145: -1- AC_DEFUN([AC_LIBTOOL_WIN32_DLL], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBTOOL_WIN32_DLL' is obsolete. -You should run autoupdate.])dnl -AC_REQUIRE([AC_CANONICAL_HOST])dnl -_LT_SET_OPTION([LT_INIT], [win32-dll]) -AC_DIAGNOSE([obsolete], -[$0: Remove this warning and the call to _LT_SET_OPTION when you -put the `win32-dll' option into LT_INIT's first parameter.]) -]) -m4trace:/usr/share/aclocal/ltoptions.m4:194: -1- AC_DEFUN([AC_ENABLE_SHARED], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared]) -]) -m4trace:/usr/share/aclocal/ltoptions.m4:198: -1- AC_DEFUN([AC_DISABLE_SHARED], [_LT_SET_OPTION([LT_INIT], [disable-shared]) -]) -m4trace:/usr/share/aclocal/ltoptions.m4:202: -1- AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) -m4trace:/usr/share/aclocal/ltoptions.m4:202: -1- AC_DEFUN([AM_ENABLE_SHARED], [AC_DIAGNOSE([obsolete], [The macro `AM_ENABLE_SHARED' is obsolete. -You should run autoupdate.])dnl -AC_ENABLE_SHARED($@)]) -m4trace:/usr/share/aclocal/ltoptions.m4:203: -1- AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) -m4trace:/usr/share/aclocal/ltoptions.m4:203: -1- AC_DEFUN([AM_DISABLE_SHARED], [AC_DIAGNOSE([obsolete], [The macro `AM_DISABLE_SHARED' is obsolete. -You should run autoupdate.])dnl -AC_DISABLE_SHARED($@)]) -m4trace:/usr/share/aclocal/ltoptions.m4:248: -1- AC_DEFUN([AC_ENABLE_STATIC], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static]) -]) -m4trace:/usr/share/aclocal/ltoptions.m4:252: -1- AC_DEFUN([AC_DISABLE_STATIC], [_LT_SET_OPTION([LT_INIT], [disable-static]) -]) -m4trace:/usr/share/aclocal/ltoptions.m4:256: -1- AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) -m4trace:/usr/share/aclocal/ltoptions.m4:256: -1- AC_DEFUN([AM_ENABLE_STATIC], [AC_DIAGNOSE([obsolete], [The macro `AM_ENABLE_STATIC' is obsolete. -You should run autoupdate.])dnl -AC_ENABLE_STATIC($@)]) -m4trace:/usr/share/aclocal/ltoptions.m4:257: -1- AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) -m4trace:/usr/share/aclocal/ltoptions.m4:257: -1- AC_DEFUN([AM_DISABLE_STATIC], [AC_DIAGNOSE([obsolete], [The macro `AM_DISABLE_STATIC' is obsolete. -You should run autoupdate.])dnl -AC_DISABLE_STATIC($@)]) -m4trace:/usr/share/aclocal/ltoptions.m4:302: -1- AU_DEFUN([AC_ENABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install]) -AC_DIAGNOSE([obsolete], -[$0: Remove this warning and the call to _LT_SET_OPTION when you put -the `fast-install' option into LT_INIT's first parameter.]) -]) -m4trace:/usr/share/aclocal/ltoptions.m4:302: -1- AC_DEFUN([AC_ENABLE_FAST_INSTALL], [AC_DIAGNOSE([obsolete], [The macro `AC_ENABLE_FAST_INSTALL' is obsolete. -You should run autoupdate.])dnl -_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install]) -AC_DIAGNOSE([obsolete], -[$0: Remove this warning and the call to _LT_SET_OPTION when you put -the `fast-install' option into LT_INIT's first parameter.]) -]) -m4trace:/usr/share/aclocal/ltoptions.m4:309: -1- AU_DEFUN([AC_DISABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], [disable-fast-install]) -AC_DIAGNOSE([obsolete], -[$0: Remove this warning and the call to _LT_SET_OPTION when you put -the `disable-fast-install' option into LT_INIT's first parameter.]) -]) -m4trace:/usr/share/aclocal/ltoptions.m4:309: -1- AC_DEFUN([AC_DISABLE_FAST_INSTALL], [AC_DIAGNOSE([obsolete], [The macro `AC_DISABLE_FAST_INSTALL' is obsolete. -You should run autoupdate.])dnl -_LT_SET_OPTION([LT_INIT], [disable-fast-install]) -AC_DIAGNOSE([obsolete], -[$0: Remove this warning and the call to _LT_SET_OPTION when you put -the `disable-fast-install' option into LT_INIT's first parameter.]) -]) -m4trace:/usr/share/aclocal/ltoptions.m4:342: -1- AU_DEFUN([AC_LIBTOOL_PICMODE], [_LT_SET_OPTION([LT_INIT], [pic-only]) -AC_DIAGNOSE([obsolete], -[$0: Remove this warning and the call to _LT_SET_OPTION when you -put the `pic-only' option into LT_INIT's first parameter.]) -]) -m4trace:/usr/share/aclocal/ltoptions.m4:342: -1- AC_DEFUN([AC_LIBTOOL_PICMODE], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBTOOL_PICMODE' is obsolete. -You should run autoupdate.])dnl -_LT_SET_OPTION([LT_INIT], [pic-only]) -AC_DIAGNOSE([obsolete], -[$0: Remove this warning and the call to _LT_SET_OPTION when you -put the `pic-only' option into LT_INIT's first parameter.]) -]) -m4trace:/usr/share/aclocal/ltsugar.m4:13: -1- AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])]) -m4trace:/usr/share/aclocal/ltversion.m4:18: -1- AC_DEFUN([LTVERSION_VERSION], [macro_version='2.2.6b' -macro_revision='1.3017' -_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) -_LT_DECL(, macro_revision, 0) -]) -m4trace:/usr/share/aclocal/lt~obsolete.m4:36: -1- AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])]) -m4trace:/usr/share/aclocal/lt~obsolete.m4:40: -1- AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH]) -m4trace:/usr/share/aclocal/lt~obsolete.m4:41: -1- AC_DEFUN([_LT_AC_SHELL_INIT]) -m4trace:/usr/share/aclocal/lt~obsolete.m4:42: -1- AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX]) -m4trace:/usr/share/aclocal/lt~obsolete.m4:44: -1- AC_DEFUN([_LT_AC_TAGVAR]) -m4trace:/usr/share/aclocal/lt~obsolete.m4:45: -1- AC_DEFUN([AC_LTDL_ENABLE_INSTALL]) -m4trace:/usr/share/aclocal/lt~obsolete.m4:46: -1- AC_DEFUN([AC_LTDL_PREOPEN]) -m4trace:/usr/share/aclocal/lt~obsolete.m4:47: -1- AC_DEFUN([_LT_AC_SYS_COMPILER]) -m4trace:/usr/share/aclocal/lt~obsolete.m4:48: -1- AC_DEFUN([_LT_AC_LOCK]) -m4trace:/usr/share/aclocal/lt~obsolete.m4:49: -1- AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE]) -m4trace:/usr/share/aclocal/lt~obsolete.m4:50: -1- AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF]) -m4trace:/usr/share/aclocal/lt~obsolete.m4:51: -1- AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O]) -m4trace:/usr/share/aclocal/lt~obsolete.m4:52: -1- AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS]) -m4trace:/usr/share/aclocal/lt~obsolete.m4:53: -1- AC_DEFUN([AC_LIBTOOL_OBJDIR]) -m4trace:/usr/share/aclocal/lt~obsolete.m4:54: -1- AC_DEFUN([AC_LTDL_OBJDIR]) -m4trace:/usr/share/aclocal/lt~obsolete.m4:55: -1- AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH]) -m4trace:/usr/share/aclocal/lt~obsolete.m4:56: -1- AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP]) -m4trace:/usr/share/aclocal/lt~obsolete.m4:57: -1- AC_DEFUN([AC_PATH_MAGIC]) -m4trace:/usr/share/aclocal/lt~obsolete.m4:58: -1- AC_DEFUN([AC_PROG_LD_GNU]) -m4trace:/usr/share/aclocal/lt~obsolete.m4:59: -1- AC_DEFUN([AC_PROG_LD_RELOAD_FLAG]) -m4trace:/usr/share/aclocal/lt~obsolete.m4:60: -1- AC_DEFUN([AC_DEPLIBS_CHECK_METHOD]) -m4trace:/usr/share/aclocal/lt~obsolete.m4:61: -1- AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI]) -m4trace:/usr/share/aclocal/lt~obsolete.m4:62: -1- AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE]) -m4trace:/usr/share/aclocal/lt~obsolete.m4:63: -1- AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC]) -m4trace:/usr/share/aclocal/lt~obsolete.m4:64: -1- AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS]) -m4trace:/usr/share/aclocal/lt~obsolete.m4:65: -1- AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP]) -m4trace:/usr/share/aclocal/lt~obsolete.m4:66: -1- AC_DEFUN([LT_AC_PROG_EGREP]) -m4trace:/usr/share/aclocal/lt~obsolete.m4:71: -1- AC_DEFUN([_AC_PROG_LIBTOOL]) -m4trace:/usr/share/aclocal/lt~obsolete.m4:72: -1- AC_DEFUN([AC_LIBTOOL_SETUP]) -m4trace:/usr/share/aclocal/lt~obsolete.m4:73: -1- AC_DEFUN([_LT_AC_CHECK_DLFCN]) -m4trace:/usr/share/aclocal/lt~obsolete.m4:74: -1- AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER]) -m4trace:/usr/share/aclocal/lt~obsolete.m4:75: -1- AC_DEFUN([_LT_AC_TAGCONFIG]) -m4trace:/usr/share/aclocal/lt~obsolete.m4:77: -1- AC_DEFUN([_LT_AC_LANG_CXX]) -m4trace:/usr/share/aclocal/lt~obsolete.m4:78: -1- AC_DEFUN([_LT_AC_LANG_F77]) -m4trace:/usr/share/aclocal/lt~obsolete.m4:79: -1- AC_DEFUN([_LT_AC_LANG_GCJ]) -m4trace:/usr/share/aclocal/lt~obsolete.m4:80: -1- AC_DEFUN([AC_LIBTOOL_RC]) -m4trace:/usr/share/aclocal/lt~obsolete.m4:81: -1- AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG]) -m4trace:/usr/share/aclocal/lt~obsolete.m4:82: -1- AC_DEFUN([_LT_AC_LANG_C_CONFIG]) -m4trace:/usr/share/aclocal/lt~obsolete.m4:83: -1- AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG]) -m4trace:/usr/share/aclocal/lt~obsolete.m4:84: -1- AC_DEFUN([_LT_AC_LANG_CXX_CONFIG]) -m4trace:/usr/share/aclocal/lt~obsolete.m4:85: -1- AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG]) -m4trace:/usr/share/aclocal/lt~obsolete.m4:86: -1- AC_DEFUN([_LT_AC_LANG_F77_CONFIG]) -m4trace:/usr/share/aclocal/lt~obsolete.m4:87: -1- AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG]) -m4trace:/usr/share/aclocal/lt~obsolete.m4:88: -1- AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG]) -m4trace:/usr/share/aclocal/lt~obsolete.m4:89: -1- AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG]) -m4trace:/usr/share/aclocal/lt~obsolete.m4:90: -1- AC_DEFUN([_LT_AC_LANG_RC_CONFIG]) -m4trace:/usr/share/aclocal/lt~obsolete.m4:91: -1- AC_DEFUN([AC_LIBTOOL_CONFIG]) -m4trace:/usr/share/aclocal/lt~obsolete.m4:92: -1- AC_DEFUN([_LT_AC_FILE_LTDLL_C]) -m4trace:/usr/share/aclocal-1.11/amversion.m4:14: -1- AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.11' -dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to -dnl require some minimum version. Point them to the right macro. -m4_if([$1], [1.11.1], [], - [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl -]) -m4trace:/usr/share/aclocal-1.11/amversion.m4:33: -1- AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.11.1])dnl -m4_ifndef([AC_AUTOCONF_VERSION], - [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl -_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) -m4trace:/usr/share/aclocal-1.11/auxdir.m4:47: -1- AC_DEFUN([AM_AUX_DIR_EXPAND], [dnl Rely on autoconf to set up CDPATH properly. -AC_PREREQ([2.50])dnl -# expand $ac_aux_dir to an absolute path -am_aux_dir=`cd $ac_aux_dir && pwd` -]) -m4trace:/usr/share/aclocal-1.11/cond.m4:15: -1- AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ(2.52)dnl - ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], - [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl -AC_SUBST([$1_TRUE])dnl -AC_SUBST([$1_FALSE])dnl -_AM_SUBST_NOTMAKE([$1_TRUE])dnl -_AM_SUBST_NOTMAKE([$1_FALSE])dnl -m4_define([_AM_COND_VALUE_$1], [$2])dnl -if $2; then - $1_TRUE= - $1_FALSE='#' -else - $1_TRUE='#' - $1_FALSE= -fi -AC_CONFIG_COMMANDS_PRE( -[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then - AC_MSG_ERROR([[conditional "$1" was never defined. -Usually this means the macro was only invoked conditionally.]]) -fi])]) -m4trace:/usr/share/aclocal-1.11/depend.m4:28: -1- AC_DEFUN([_AM_DEPENDENCIES], [AC_REQUIRE([AM_SET_DEPDIR])dnl -AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl -AC_REQUIRE([AM_MAKE_INCLUDE])dnl -AC_REQUIRE([AM_DEP_TRACK])dnl - -ifelse([$1], CC, [depcc="$CC" am_compiler_list=], - [$1], CXX, [depcc="$CXX" am_compiler_list=], - [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], - [$1], UPC, [depcc="$UPC" am_compiler_list=], - [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], - [depcc="$$1" am_compiler_list=]) - -AC_CACHE_CHECK([dependency style of $depcc], - [am_cv_$1_dependencies_compiler_type], -[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then - # We make a subdir and do the tests there. Otherwise we can end up - # making bogus files that we don't know about and never remove. For - # instance it was reported that on HP-UX the gcc test will end up - # making a dummy file named `D' -- because `-MD' means `put the output - # in D'. - mkdir conftest.dir - # Copy depcomp to subdir because otherwise we won't find it if we're - # using a relative directory. - cp "$am_depcomp" conftest.dir - cd conftest.dir - # We will build objects and dependencies in a subdirectory because - # it helps to detect inapplicable dependency modes. For instance - # both Tru64's cc and ICC support -MD to output dependencies as a - # side effect of compilation, but ICC will put the dependencies in - # the current directory while Tru64 will put them in the object - # directory. - mkdir sub - - am_cv_$1_dependencies_compiler_type=none - if test "$am_compiler_list" = ""; then - am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` - fi - am__universal=false - m4_case([$1], [CC], - [case " $depcc " in #( - *\ -arch\ *\ -arch\ *) am__universal=true ;; - esac], - [CXX], - [case " $depcc " in #( - *\ -arch\ *\ -arch\ *) am__universal=true ;; - esac]) - - for depmode in $am_compiler_list; do - # Setup a source with many dependencies, because some compilers - # like to wrap large dependency lists on column 80 (with \), and - # we should not choose a depcomp mode which is confused by this. - # - # We need to recreate these files for each test, as the compiler may - # overwrite some of them when testing with obscure command lines. - # This happens at least with the AIX C compiler. - : > sub/conftest.c - for i in 1 2 3 4 5 6; do - echo '#include "conftst'$i'.h"' >> sub/conftest.c - # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with - # Solaris 8's {/usr,}/bin/sh. - touch sub/conftst$i.h - done - echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf - - # We check with `-c' and `-o' for the sake of the "dashmstdout" - # mode. It turns out that the SunPro C++ compiler does not properly - # handle `-M -o', and we need to detect this. Also, some Intel - # versions had trouble with output in subdirs - am__obj=sub/conftest.${OBJEXT-o} - am__minus_obj="-o $am__obj" - case $depmode in - gcc) - # This depmode causes a compiler race in universal mode. - test "$am__universal" = false || continue - ;; - nosideeffect) - # after this tag, mechanisms are not by side-effect, so they'll - # only be used when explicitly requested - if test "x$enable_dependency_tracking" = xyes; then - continue - else - break - fi - ;; - msvisualcpp | msvcmsys) - # This compiler won't grok `-c -o', but also, the minuso test has - # not run yet. These depmodes are late enough in the game, and - # so weak that their functioning should not be impacted. - am__obj=conftest.${OBJEXT-o} - am__minus_obj= - ;; - none) break ;; - esac - if depmode=$depmode \ - source=sub/conftest.c object=$am__obj \ - depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ - $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ - >/dev/null 2>conftest.err && - grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && - grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && - grep $am__obj sub/conftest.Po > /dev/null 2>&1 && - ${MAKE-make} -s -f confmf > /dev/null 2>&1; then - # icc doesn't choke on unknown options, it will just issue warnings - # or remarks (even with -Werror). So we grep stderr for any message - # that says an option was ignored or not supported. - # When given -MP, icc 7.0 and 7.1 complain thusly: - # icc: Command line warning: ignoring option '-M'; no argument required - # The diagnosis changed in icc 8.0: - # icc: Command line remark: option '-MP' not supported - if (grep 'ignoring option' conftest.err || - grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else - am_cv_$1_dependencies_compiler_type=$depmode - break - fi - fi - done - - cd .. - rm -rf conftest.dir -else - am_cv_$1_dependencies_compiler_type=none -fi -]) -AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) -AM_CONDITIONAL([am__fastdep$1], [ - test "x$enable_dependency_tracking" != xno \ - && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) -]) -m4trace:/usr/share/aclocal-1.11/depend.m4:163: -1- AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl -AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl -]) -m4trace:/usr/share/aclocal-1.11/depend.m4:171: -1- AC_DEFUN([AM_DEP_TRACK], [AC_ARG_ENABLE(dependency-tracking, -[ --disable-dependency-tracking speeds up one-time build - --enable-dependency-tracking do not reject slow dependency extractors]) -if test "x$enable_dependency_tracking" != xno; then - am_depcomp="$ac_aux_dir/depcomp" - AMDEPBACKSLASH='\' -fi -AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) -AC_SUBST([AMDEPBACKSLASH])dnl -_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl -]) -m4trace:/usr/share/aclocal-1.11/depout.m4:14: -1- AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [{ - # Autoconf 2.62 quotes --file arguments for eval, but not when files - # are listed without --file. Let's play safe and only enable the eval - # if we detect the quoting. - case $CONFIG_FILES in - *\'*) eval set x "$CONFIG_FILES" ;; - *) set x $CONFIG_FILES ;; - esac - shift - for mf - do - # Strip MF so we end up with the name of the file. - mf=`echo "$mf" | sed -e 's/:.*$//'` - # Check whether this is an Automake generated Makefile or not. - # We used to match only the files named `Makefile.in', but - # some people rename them; so instead we look at the file content. - # Grep'ing the first line is not enough: some people post-process - # each Makefile.in and add a new line on top of each file to say so. - # Grep'ing the whole file is not good either: AIX grep has a line - # limit of 2048, but all sed's we know have understand at least 4000. - if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then - dirpart=`AS_DIRNAME("$mf")` - else - continue - fi - # Extract the definition of DEPDIR, am__include, and am__quote - # from the Makefile without running `make'. - DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` - test -z "$DEPDIR" && continue - am__include=`sed -n 's/^am__include = //p' < "$mf"` - test -z "am__include" && continue - am__quote=`sed -n 's/^am__quote = //p' < "$mf"` - # When using ansi2knr, U may be empty or an underscore; expand it - U=`sed -n 's/^U = //p' < "$mf"` - # Find all dependency output files, they are included files with - # $(DEPDIR) in their names. We invoke sed twice because it is the - # simplest approach to changing $(DEPDIR) to its actual value in the - # expansion. - for file in `sed -n " - s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ - sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do - # Make sure the directory exists. - test -f "$dirpart/$file" && continue - fdir=`AS_DIRNAME(["$file"])` - AS_MKDIR_P([$dirpart/$fdir]) - # echo "creating $dirpart/$file" - echo '# dummy' > "$dirpart/$file" - done - done -} -]) -m4trace:/usr/share/aclocal-1.11/depout.m4:75: -1- AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], - [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], - [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) -]) -m4trace:/usr/share/aclocal-1.11/header.m4:12: -1- AU_DEFUN([AM_CONFIG_HEADER], [AC_CONFIG_HEADERS($@)]) -m4trace:/usr/share/aclocal-1.11/header.m4:12: -1- AC_DEFUN([AM_CONFIG_HEADER], [AC_DIAGNOSE([obsolete], [The macro `AM_CONFIG_HEADER' is obsolete. -You should run autoupdate.])dnl -AC_CONFIG_HEADERS($@)]) -m4trace:/usr/share/aclocal-1.11/init.m4:26: -1- AC_DEFUN([AM_INIT_AUTOMAKE], [AC_PREREQ([2.62])dnl -dnl Autoconf wants to disallow AM_ names. We explicitly allow -dnl the ones we care about. -m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl -AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl -AC_REQUIRE([AC_PROG_INSTALL])dnl -if test "`cd $srcdir && pwd`" != "`pwd`"; then - # Use -I$(srcdir) only when $(srcdir) != ., so that make's output - # is not polluted with repeated "-I." - AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl - # test to see if srcdir already configured - if test -f $srcdir/config.status; then - AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) - fi -fi - -# test whether we have cygpath -if test -z "$CYGPATH_W"; then - if (cygpath --version) >/dev/null 2>/dev/null; then - CYGPATH_W='cygpath -w' - else - CYGPATH_W=echo - fi -fi -AC_SUBST([CYGPATH_W]) - -# Define the identity of the package. -dnl Distinguish between old-style and new-style calls. -m4_ifval([$2], -[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl - AC_SUBST([PACKAGE], [$1])dnl - AC_SUBST([VERSION], [$2])], -[_AM_SET_OPTIONS([$1])dnl -dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. -m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,, - [m4_fatal([AC_INIT should be called with package and version arguments])])dnl - AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl - AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl - -_AM_IF_OPTION([no-define],, -[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) - AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl - -# Some tools Automake needs. -AC_REQUIRE([AM_SANITY_CHECK])dnl -AC_REQUIRE([AC_ARG_PROGRAM])dnl -AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) -AM_MISSING_PROG(AUTOCONF, autoconf) -AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) -AM_MISSING_PROG(AUTOHEADER, autoheader) -AM_MISSING_PROG(MAKEINFO, makeinfo) -AC_REQUIRE([AM_PROG_INSTALL_SH])dnl -AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl -AC_REQUIRE([AM_PROG_MKDIR_P])dnl -# We need awk for the "check" target. The system "awk" is bad on -# some platforms. -AC_REQUIRE([AC_PROG_AWK])dnl -AC_REQUIRE([AC_PROG_MAKE_SET])dnl -AC_REQUIRE([AM_SET_LEADING_DOT])dnl -_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], - [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], - [_AM_PROG_TAR([v7])])]) -_AM_IF_OPTION([no-dependencies],, -[AC_PROVIDE_IFELSE([AC_PROG_CC], - [_AM_DEPENDENCIES(CC)], - [define([AC_PROG_CC], - defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl -AC_PROVIDE_IFELSE([AC_PROG_CXX], - [_AM_DEPENDENCIES(CXX)], - [define([AC_PROG_CXX], - defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl -AC_PROVIDE_IFELSE([AC_PROG_OBJC], - [_AM_DEPENDENCIES(OBJC)], - [define([AC_PROG_OBJC], - defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl -]) -_AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl -dnl The `parallel-tests' driver may need to know about EXEEXT, so add the -dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro -dnl is hooked onto _AC_COMPILER_EXEEXT early, see below. -AC_CONFIG_COMMANDS_PRE(dnl -[m4_provide_if([_AM_COMPILER_EXEEXT], - [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl -]) -m4trace:/usr/share/aclocal-1.11/init.m4:126: -1- AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. -_am_arg=$1 -_am_stamp_count=1 -for _am_header in $config_headers :; do - case $_am_header in - $_am_arg | $_am_arg:* ) - break ;; - * ) - _am_stamp_count=`expr $_am_stamp_count + 1` ;; - esac -done -echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) -m4trace:/usr/share/aclocal-1.11/install-sh.m4:11: -1- AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl -if test x"${install_sh}" != xset; then - case $am_aux_dir in - *\ * | *\ *) - install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; - *) - install_sh="\${SHELL} $am_aux_dir/install-sh" - esac -fi -AC_SUBST(install_sh)]) -m4trace:/usr/share/aclocal-1.11/lead-dot.m4:12: -1- AC_DEFUN([AM_SET_LEADING_DOT], [rm -rf .tst 2>/dev/null -mkdir .tst 2>/dev/null -if test -d .tst; then - am__leading_dot=. -else - am__leading_dot=_ -fi -rmdir .tst 2>/dev/null -AC_SUBST([am__leading_dot])]) -m4trace:/usr/share/aclocal-1.11/maintainer.m4:19: -1- AC_DEFUN([AM_MAINTAINER_MODE], [m4_case(m4_default([$1], [disable]), - [enable], [m4_define([am_maintainer_other], [disable])], - [disable], [m4_define([am_maintainer_other], [enable])], - [m4_define([am_maintainer_other], [enable]) - m4_warn([syntax], [unexpected argument to AM@&t@_MAINTAINER_MODE: $1])]) -AC_MSG_CHECKING([whether to am_maintainer_other maintainer-specific portions of Makefiles]) - dnl maintainer-mode's default is 'disable' unless 'enable' is passed - AC_ARG_ENABLE([maintainer-mode], -[ --][am_maintainer_other][-maintainer-mode am_maintainer_other make rules and dependencies not useful - (and sometimes confusing) to the casual installer], - [USE_MAINTAINER_MODE=$enableval], - [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes])) - AC_MSG_RESULT([$USE_MAINTAINER_MODE]) - AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes]) - MAINT=$MAINTAINER_MODE_TRUE - AC_SUBST([MAINT])dnl - -]) -m4trace:/usr/share/aclocal-1.11/maintainer.m4:39: -1- AU_DEFUN([jm_MAINTAINER_MODE], [AM_MAINTAINER_MODE]) -m4trace:/usr/share/aclocal-1.11/maintainer.m4:39: -1- AC_DEFUN([jm_MAINTAINER_MODE], [AC_DIAGNOSE([obsolete], [The macro `jm_MAINTAINER_MODE' is obsolete. -You should run autoupdate.])dnl -AM_MAINTAINER_MODE]) -m4trace:/usr/share/aclocal-1.11/make.m4:14: -1- AC_DEFUN([AM_MAKE_INCLUDE], [am_make=${MAKE-make} -cat > confinc << 'END' -am__doit: - @echo this is the am__doit target -.PHONY: am__doit -END -# If we don't find an include directive, just comment out the code. -AC_MSG_CHECKING([for style of include used by $am_make]) -am__include="#" -am__quote= -_am_result=none -# First try GNU make style include. -echo "include confinc" > confmf -# Ignore all kinds of additional output from `make'. -case `$am_make -s -f confmf 2> /dev/null` in #( -*the\ am__doit\ target*) - am__include=include - am__quote= - _am_result=GNU - ;; -esac -# Now try BSD make style include. -if test "$am__include" = "#"; then - echo '.include "confinc"' > confmf - case `$am_make -s -f confmf 2> /dev/null` in #( - *the\ am__doit\ target*) - am__include=.include - am__quote="\"" - _am_result=BSD - ;; - esac -fi -AC_SUBST([am__include]) -AC_SUBST([am__quote]) -AC_MSG_RESULT([$_am_result]) -rm -f confinc confmf -]) -m4trace:/usr/share/aclocal-1.11/missing.m4:14: -1- AC_DEFUN([AM_MISSING_PROG], [AC_REQUIRE([AM_MISSING_HAS_RUN]) -$1=${$1-"${am_missing_run}$2"} -AC_SUBST($1)]) -m4trace:/usr/share/aclocal-1.11/missing.m4:24: -1- AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl -AC_REQUIRE_AUX_FILE([missing])dnl -if test x"${MISSING+set}" != xset; then - case $am_aux_dir in - *\ * | *\ *) - MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; - *) - MISSING="\${SHELL} $am_aux_dir/missing" ;; - esac -fi -# Use eval to expand $SHELL -if eval "$MISSING --run true"; then - am_missing_run="$MISSING --run " -else - am_missing_run= - AC_MSG_WARN([`missing' script is too old or missing]) -fi -]) -m4trace:/usr/share/aclocal-1.11/mkdirp.m4:11: -1- AC_DEFUN([AM_PROG_MKDIR_P], [AC_PREREQ([2.60])dnl -AC_REQUIRE([AC_PROG_MKDIR_P])dnl -dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P, -dnl while keeping a definition of mkdir_p for backward compatibility. -dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile. -dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of -dnl Makefile.ins that do not define MKDIR_P, so we do our own -dnl adjustment using top_builddir (which is defined more often than -dnl MKDIR_P). -AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl -case $mkdir_p in - [[\\/$]]* | ?:[[\\/]]*) ;; - */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; -esac -]) -m4trace:/usr/share/aclocal-1.11/options.m4:13: -1- AC_DEFUN([_AM_MANGLE_OPTION], [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) -m4trace:/usr/share/aclocal-1.11/options.m4:19: -1- AC_DEFUN([_AM_SET_OPTION], [m4_define(_AM_MANGLE_OPTION([$1]), 1)]) -m4trace:/usr/share/aclocal-1.11/options.m4:25: -1- AC_DEFUN([_AM_SET_OPTIONS], [m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) -m4trace:/usr/share/aclocal-1.11/options.m4:31: -1- AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) -m4trace:/usr/share/aclocal-1.11/runlog.m4:12: -1- AC_DEFUN([AM_RUN_LOG], [{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD - ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD - (exit $ac_status); }]) -m4trace:/usr/share/aclocal-1.11/sanity.m4:14: -1- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) -# Just in case -sleep 1 -echo timestamp > conftest.file -# Reject unsafe characters in $srcdir or the absolute working directory -# name. Accept space and tab only in the latter. -am_lf=' -' -case `pwd` in - *[[\\\"\#\$\&\'\`$am_lf]]*) - AC_MSG_ERROR([unsafe absolute working directory name]);; -esac -case $srcdir in - *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) - AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);; -esac - -# Do `set' in a subshell so we don't clobber the current shell's -# arguments. Must try -L first in case configure is actually a -# symlink; some systems play weird games with the mod time of symlinks -# (eg FreeBSD returns the mod time of the symlink's containing -# directory). -if ( - set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` - if test "$[*]" = "X"; then - # -L didn't work. - set X `ls -t "$srcdir/configure" conftest.file` - fi - rm -f conftest.file - if test "$[*]" != "X $srcdir/configure conftest.file" \ - && test "$[*]" != "X conftest.file $srcdir/configure"; then - - # If neither matched, then we have a broken ls. This can happen - # if, for instance, CONFIG_SHELL is bash and it inherits a - # broken ls alias from the environment. This has actually - # happened. Such a system could not be considered "sane". - AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken -alias in your environment]) - fi - - test "$[2]" = conftest.file - ) -then - # Ok. - : -else - AC_MSG_ERROR([newly created file is older than distributed files! -Check your system clock]) -fi -AC_MSG_RESULT(yes)]) -m4trace:/usr/share/aclocal-1.11/silent.m4:14: -1- AC_DEFUN([AM_SILENT_RULES], [AC_ARG_ENABLE([silent-rules], -[ --enable-silent-rules less verbose build output (undo: `make V=1') - --disable-silent-rules verbose build output (undo: `make V=0')]) -case $enable_silent_rules in -yes) AM_DEFAULT_VERBOSITY=0;; -no) AM_DEFAULT_VERBOSITY=1;; -*) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; -esac -AC_SUBST([AM_DEFAULT_VERBOSITY])dnl -AM_BACKSLASH='\' -AC_SUBST([AM_BACKSLASH])dnl -_AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl -]) -m4trace:/usr/share/aclocal-1.11/strip.m4:17: -1- AC_DEFUN([AM_PROG_INSTALL_STRIP], [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl -# Installed binaries are usually stripped using `strip' when the user -# run `make install-strip'. However `strip' might not be the right -# tool to use in cross-compilation environments, therefore Automake -# will honor the `STRIP' environment variable to overrule this program. -dnl Don't test for $cross_compiling = yes, because it might be `maybe'. -if test "$cross_compiling" != no; then - AC_CHECK_TOOL([STRIP], [strip], :) -fi -INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" -AC_SUBST([INSTALL_STRIP_PROGRAM])]) -m4trace:/usr/share/aclocal-1.11/substnot.m4:14: -1- AC_DEFUN([_AM_SUBST_NOTMAKE]) -m4trace:/usr/share/aclocal-1.11/substnot.m4:19: -1- AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) -m4trace:/usr/share/aclocal-1.11/tar.m4:24: -1- AC_DEFUN([_AM_PROG_TAR], [# Always define AMTAR for backward compatibility. -AM_MISSING_PROG([AMTAR], [tar]) -m4_if([$1], [v7], - [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'], - [m4_case([$1], [ustar],, [pax],, - [m4_fatal([Unknown tar format])]) -AC_MSG_CHECKING([how to create a $1 tar archive]) -# Loop over all known methods to create a tar archive until one works. -_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' -_am_tools=${am_cv_prog_tar_$1-$_am_tools} -# Do not fold the above two line into one, because Tru64 sh and -# Solaris sh will not grok spaces in the rhs of `-'. -for _am_tool in $_am_tools -do - case $_am_tool in - gnutar) - for _am_tar in tar gnutar gtar; - do - AM_RUN_LOG([$_am_tar --version]) && break - done - am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' - am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' - am__untar="$_am_tar -xf -" - ;; - plaintar) - # Must skip GNU tar: if it does not support --format= it doesn't create - # ustar tarball either. - (tar --version) >/dev/null 2>&1 && continue - am__tar='tar chf - "$$tardir"' - am__tar_='tar chf - "$tardir"' - am__untar='tar xf -' - ;; - pax) - am__tar='pax -L -x $1 -w "$$tardir"' - am__tar_='pax -L -x $1 -w "$tardir"' - am__untar='pax -r' - ;; - cpio) - am__tar='find "$$tardir" -print | cpio -o -H $1 -L' - am__tar_='find "$tardir" -print | cpio -o -H $1 -L' - am__untar='cpio -i -H $1 -d' - ;; - none) - am__tar=false - am__tar_=false - am__untar=false - ;; - esac - - # If the value was cached, stop now. We just wanted to have am__tar - # and am__untar set. - test -n "${am_cv_prog_tar_$1}" && break - - # tar/untar a dummy directory, and stop if the command works - rm -rf conftest.dir - mkdir conftest.dir - echo GrepMe > conftest.dir/file - AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) - rm -rf conftest.dir - if test -s conftest.tar; then - AM_RUN_LOG([$am__untar /dev/null 2>&1 && break - fi -done -rm -rf conftest.dir - -AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) -AC_MSG_RESULT([$am_cv_prog_tar_$1])]) -AC_SUBST([am__tar]) -AC_SUBST([am__untar]) -]) -m4trace:configure.in:10: -1- m4_pattern_forbid([^_?A[CHUM]_]) -m4trace:configure.in:10: -1- m4_pattern_forbid([_AC_]) -m4trace:configure.in:10: -1- m4_pattern_forbid([^LIBOBJS$], [do not use LIBOBJS directly, use AC_LIBOBJ (see section `AC_LIBOBJ vs LIBOBJS']) -m4trace:configure.in:10: -1- m4_pattern_allow([^AS_FLAGS$]) -m4trace:configure.in:10: -1- m4_pattern_forbid([^_?m4_]) -m4trace:configure.in:10: -1- m4_pattern_forbid([^dnl$]) -m4trace:configure.in:10: -1- m4_pattern_forbid([^_?AS_]) -m4trace:configure.in:10: -1- m4_pattern_allow([^SHELL$]) -m4trace:configure.in:10: -1- m4_pattern_allow([^PATH_SEPARATOR$]) -m4trace:configure.in:10: -1- m4_pattern_allow([^PACKAGE_NAME$]) -m4trace:configure.in:10: -1- m4_pattern_allow([^PACKAGE_TARNAME$]) -m4trace:configure.in:10: -1- m4_pattern_allow([^PACKAGE_VERSION$]) -m4trace:configure.in:10: -1- m4_pattern_allow([^PACKAGE_STRING$]) -m4trace:configure.in:10: -1- m4_pattern_allow([^PACKAGE_BUGREPORT$]) -m4trace:configure.in:10: -1- m4_pattern_allow([^PACKAGE_URL$]) -m4trace:configure.in:10: -1- m4_pattern_allow([^exec_prefix$]) -m4trace:configure.in:10: -1- m4_pattern_allow([^prefix$]) -m4trace:configure.in:10: -1- m4_pattern_allow([^program_transform_name$]) -m4trace:configure.in:10: -1- m4_pattern_allow([^bindir$]) -m4trace:configure.in:10: -1- m4_pattern_allow([^sbindir$]) -m4trace:configure.in:10: -1- m4_pattern_allow([^libexecdir$]) -m4trace:configure.in:10: -1- m4_pattern_allow([^datarootdir$]) -m4trace:configure.in:10: -1- m4_pattern_allow([^datadir$]) -m4trace:configure.in:10: -1- m4_pattern_allow([^sysconfdir$]) -m4trace:configure.in:10: -1- m4_pattern_allow([^sharedstatedir$]) -m4trace:configure.in:10: -1- m4_pattern_allow([^localstatedir$]) -m4trace:configure.in:10: -1- m4_pattern_allow([^includedir$]) -m4trace:configure.in:10: -1- m4_pattern_allow([^oldincludedir$]) -m4trace:configure.in:10: -1- m4_pattern_allow([^docdir$]) -m4trace:configure.in:10: -1- m4_pattern_allow([^infodir$]) -m4trace:configure.in:10: -1- m4_pattern_allow([^htmldir$]) -m4trace:configure.in:10: -1- m4_pattern_allow([^dvidir$]) -m4trace:configure.in:10: -1- m4_pattern_allow([^pdfdir$]) -m4trace:configure.in:10: -1- m4_pattern_allow([^psdir$]) -m4trace:configure.in:10: -1- m4_pattern_allow([^libdir$]) -m4trace:configure.in:10: -1- m4_pattern_allow([^localedir$]) -m4trace:configure.in:10: -1- m4_pattern_allow([^mandir$]) -m4trace:configure.in:10: -1- m4_pattern_allow([^PACKAGE_NAME$]) -m4trace:configure.in:10: -1- m4_pattern_allow([^PACKAGE_TARNAME$]) -m4trace:configure.in:10: -1- m4_pattern_allow([^PACKAGE_VERSION$]) -m4trace:configure.in:10: -1- m4_pattern_allow([^PACKAGE_STRING$]) -m4trace:configure.in:10: -1- m4_pattern_allow([^PACKAGE_BUGREPORT$]) -m4trace:configure.in:10: -1- m4_pattern_allow([^PACKAGE_URL$]) -m4trace:configure.in:10: -1- m4_pattern_allow([^DEFS$]) -m4trace:configure.in:10: -1- m4_pattern_allow([^ECHO_C$]) -m4trace:configure.in:10: -1- m4_pattern_allow([^ECHO_N$]) -m4trace:configure.in:10: -1- m4_pattern_allow([^ECHO_T$]) -m4trace:configure.in:10: -1- m4_pattern_allow([^LIBS$]) -m4trace:configure.in:10: -1- m4_pattern_allow([^build_alias$]) -m4trace:configure.in:10: -1- m4_pattern_allow([^host_alias$]) -m4trace:configure.in:10: -1- m4_pattern_allow([^target_alias$]) -m4trace:configure.in:12: -1- AM_MAINTAINER_MODE -m4trace:configure.in:12: -1- AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes]) -m4trace:configure.in:12: -1- m4_pattern_allow([^MAINTAINER_MODE_TRUE$]) -m4trace:configure.in:12: -1- m4_pattern_allow([^MAINTAINER_MODE_FALSE$]) -m4trace:configure.in:12: -1- _AM_SUBST_NOTMAKE([MAINTAINER_MODE_TRUE]) -m4trace:configure.in:12: -1- _AM_SUBST_NOTMAKE([MAINTAINER_MODE_FALSE]) -m4trace:configure.in:12: -1- m4_pattern_allow([^MAINT$]) -m4trace:configure.in:15: -1- m4_pattern_allow([^build$]) -m4trace:configure.in:15: -1- m4_pattern_allow([^build_cpu$]) -m4trace:configure.in:15: -1- m4_pattern_allow([^build_vendor$]) -m4trace:configure.in:15: -1- m4_pattern_allow([^build_os$]) -m4trace:configure.in:15: -1- m4_pattern_allow([^host$]) -m4trace:configure.in:15: -1- m4_pattern_allow([^host_cpu$]) -m4trace:configure.in:15: -1- m4_pattern_allow([^host_vendor$]) -m4trace:configure.in:15: -1- m4_pattern_allow([^host_os$]) -m4trace:configure.in:15: -1- m4_pattern_allow([^target$]) -m4trace:configure.in:15: -1- m4_pattern_allow([^target_cpu$]) -m4trace:configure.in:15: -1- m4_pattern_allow([^target_vendor$]) -m4trace:configure.in:15: -1- m4_pattern_allow([^target_os$]) -m4trace:configure.in:22: -1- AM_INIT_AUTOMAKE([radiusclient], [1.1.6]) -m4trace:configure.in:22: -1- m4_pattern_allow([^AM_[A-Z]+FLAGS$]) -m4trace:configure.in:22: -1- AM_SET_CURRENT_AUTOMAKE_VERSION -m4trace:configure.in:22: -1- AM_AUTOMAKE_VERSION([1.11.1]) -m4trace:configure.in:22: -1- _AM_AUTOCONF_VERSION([2.65]) -m4trace:configure.in:22: -1- m4_pattern_allow([^INSTALL_PROGRAM$]) -m4trace:configure.in:22: -1- m4_pattern_allow([^INSTALL_SCRIPT$]) -m4trace:configure.in:22: -1- m4_pattern_allow([^INSTALL_DATA$]) -m4trace:configure.in:22: -1- m4_pattern_allow([^am__isrc$]) -m4trace:configure.in:22: -1- _AM_SUBST_NOTMAKE([am__isrc]) -m4trace:configure.in:22: -1- m4_pattern_allow([^CYGPATH_W$]) -m4trace:configure.in:22: -1- m4_pattern_allow([^PACKAGE$]) -m4trace:configure.in:22: -1- m4_pattern_allow([^VERSION$]) -m4trace:configure.in:22: -1- _AM_IF_OPTION([no-define], [], [AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) - AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])]) -m4trace:configure.in:22: -2- _AM_MANGLE_OPTION([no-define]) -m4trace:configure.in:22: -1- m4_pattern_allow([^PACKAGE$]) -m4trace:configure.in:22: -1- m4_pattern_allow([^VERSION$]) -m4trace:configure.in:22: -1- AM_SANITY_CHECK -m4trace:configure.in:22: -1- AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}]) -m4trace:configure.in:22: -1- AM_MISSING_HAS_RUN -m4trace:configure.in:22: -1- AM_AUX_DIR_EXPAND -m4trace:configure.in:22: -1- m4_pattern_allow([^ACLOCAL$]) -m4trace:configure.in:22: -1- AM_MISSING_PROG([AUTOCONF], [autoconf]) -m4trace:configure.in:22: -1- m4_pattern_allow([^AUTOCONF$]) -m4trace:configure.in:22: -1- AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}]) -m4trace:configure.in:22: -1- m4_pattern_allow([^AUTOMAKE$]) -m4trace:configure.in:22: -1- AM_MISSING_PROG([AUTOHEADER], [autoheader]) -m4trace:configure.in:22: -1- m4_pattern_allow([^AUTOHEADER$]) -m4trace:configure.in:22: -1- AM_MISSING_PROG([MAKEINFO], [makeinfo]) -m4trace:configure.in:22: -1- m4_pattern_allow([^MAKEINFO$]) -m4trace:configure.in:22: -1- AM_PROG_INSTALL_SH -m4trace:configure.in:22: -1- m4_pattern_allow([^install_sh$]) -m4trace:configure.in:22: -1- AM_PROG_INSTALL_STRIP -m4trace:configure.in:22: -1- m4_pattern_allow([^STRIP$]) -m4trace:configure.in:22: -1- m4_pattern_allow([^INSTALL_STRIP_PROGRAM$]) -m4trace:configure.in:22: -1- AM_PROG_MKDIR_P -m4trace:configure.in:22: -1- m4_pattern_allow([^MKDIR_P$]) -m4trace:configure.in:22: -1- m4_pattern_allow([^mkdir_p$]) -m4trace:configure.in:22: -1- m4_pattern_allow([^AWK$]) -m4trace:configure.in:22: -1- m4_pattern_allow([^SET_MAKE$]) -m4trace:configure.in:22: -1- AM_SET_LEADING_DOT -m4trace:configure.in:22: -1- m4_pattern_allow([^am__leading_dot$]) -m4trace:configure.in:22: -1- _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], - [_AM_PROG_TAR([v7])])]) -m4trace:configure.in:22: -2- _AM_MANGLE_OPTION([tar-ustar]) -m4trace:configure.in:22: -1- _AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_PROG_TAR([v7])]) -m4trace:configure.in:22: -2- _AM_MANGLE_OPTION([tar-pax]) -m4trace:configure.in:22: -1- _AM_PROG_TAR([v7]) -m4trace:configure.in:22: -1- AM_MISSING_PROG([AMTAR], [tar]) -m4trace:configure.in:22: -1- m4_pattern_allow([^AMTAR$]) -m4trace:configure.in:22: -1- m4_pattern_allow([^am__tar$]) -m4trace:configure.in:22: -1- m4_pattern_allow([^am__untar$]) -m4trace:configure.in:22: -1- _AM_IF_OPTION([no-dependencies], [], [AC_PROVIDE_IFELSE([AC_PROG_CC], - [_AM_DEPENDENCIES(CC)], - [define([AC_PROG_CC], - defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl -AC_PROVIDE_IFELSE([AC_PROG_CXX], - [_AM_DEPENDENCIES(CXX)], - [define([AC_PROG_CXX], - defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl -AC_PROVIDE_IFELSE([AC_PROG_OBJC], - [_AM_DEPENDENCIES(OBJC)], - [define([AC_PROG_OBJC], - defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl -]) -m4trace:configure.in:22: -2- _AM_MANGLE_OPTION([no-dependencies]) -m4trace:configure.in:22: -1- _AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])]) -m4trace:configure.in:22: -2- _AM_MANGLE_OPTION([silent-rules]) -m4trace:configure.in:25: -1- m4_pattern_allow([^LIBVERSION$]) -m4trace:configure.in:28: -1- m4_pattern_allow([^pkgsysconfdir$]) -m4trace:configure.in:30: -1- AC_PROG_LIBTOOL -m4trace:configure.in:30: -1- _m4_warn([obsolete], [The macro `AC_PROG_LIBTOOL' is obsolete. -You should run autoupdate.], [/usr/share/aclocal/libtool.m4:102: AC_PROG_LIBTOOL is expanded from... -configure.in:30: the top level]) -m4trace:configure.in:30: -1- LT_INIT -m4trace:configure.in:30: -1- m4_pattern_forbid([^_?LT_[A-Z_]+$]) -m4trace:configure.in:30: -1- m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$]) -m4trace:configure.in:30: -1- LTOPTIONS_VERSION -m4trace:configure.in:30: -1- LTSUGAR_VERSION -m4trace:configure.in:30: -1- LTVERSION_VERSION -m4trace:configure.in:30: -1- LTOBSOLETE_VERSION -m4trace:configure.in:30: -1- _LT_PROG_LTMAIN -m4trace:configure.in:30: -1- m4_pattern_allow([^LIBTOOL$]) -m4trace:configure.in:30: -1- m4_pattern_allow([^CC$]) -m4trace:configure.in:30: -1- m4_pattern_allow([^CFLAGS$]) -m4trace:configure.in:30: -1- m4_pattern_allow([^LDFLAGS$]) -m4trace:configure.in:30: -1- m4_pattern_allow([^LIBS$]) -m4trace:configure.in:30: -1- m4_pattern_allow([^CPPFLAGS$]) -m4trace:configure.in:30: -1- m4_pattern_allow([^CC$]) -m4trace:configure.in:30: -1- m4_pattern_allow([^CC$]) -m4trace:configure.in:30: -1- m4_pattern_allow([^CC$]) -m4trace:configure.in:30: -1- m4_pattern_allow([^CC$]) -m4trace:configure.in:30: -1- m4_pattern_allow([^ac_ct_CC$]) -m4trace:configure.in:30: -1- m4_pattern_allow([^EXEEXT$]) -m4trace:configure.in:30: -1- m4_pattern_allow([^OBJEXT$]) -m4trace:configure.in:30: -1- _AM_DEPENDENCIES([CC]) -m4trace:configure.in:30: -1- AM_SET_DEPDIR -m4trace:configure.in:30: -1- m4_pattern_allow([^DEPDIR$]) -m4trace:configure.in:30: -1- AM_OUTPUT_DEPENDENCY_COMMANDS -m4trace:configure.in:30: -1- AM_MAKE_INCLUDE -m4trace:configure.in:30: -1- m4_pattern_allow([^am__include$]) -m4trace:configure.in:30: -1- m4_pattern_allow([^am__quote$]) -m4trace:configure.in:30: -1- AM_DEP_TRACK -m4trace:configure.in:30: -1- AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) -m4trace:configure.in:30: -1- m4_pattern_allow([^AMDEP_TRUE$]) -m4trace:configure.in:30: -1- m4_pattern_allow([^AMDEP_FALSE$]) -m4trace:configure.in:30: -1- _AM_SUBST_NOTMAKE([AMDEP_TRUE]) -m4trace:configure.in:30: -1- _AM_SUBST_NOTMAKE([AMDEP_FALSE]) -m4trace:configure.in:30: -1- m4_pattern_allow([^AMDEPBACKSLASH$]) -m4trace:configure.in:30: -1- _AM_SUBST_NOTMAKE([AMDEPBACKSLASH]) -m4trace:configure.in:30: -1- m4_pattern_allow([^CCDEPMODE$]) -m4trace:configure.in:30: -1- AM_CONDITIONAL([am__fastdepCC], [ - test "x$enable_dependency_tracking" != xno \ - && test "$am_cv_CC_dependencies_compiler_type" = gcc3]) -m4trace:configure.in:30: -1- m4_pattern_allow([^am__fastdepCC_TRUE$]) -m4trace:configure.in:30: -1- m4_pattern_allow([^am__fastdepCC_FALSE$]) -m4trace:configure.in:30: -1- _AM_SUBST_NOTMAKE([am__fastdepCC_TRUE]) -m4trace:configure.in:30: -1- _AM_SUBST_NOTMAKE([am__fastdepCC_FALSE]) -m4trace:configure.in:30: -1- LT_PATH_LD -m4trace:configure.in:30: -1- m4_pattern_allow([^SED$]) -m4trace:configure.in:30: -1- AC_PROG_EGREP -m4trace:configure.in:30: -1- m4_pattern_allow([^GREP$]) -m4trace:configure.in:30: -1- m4_pattern_allow([^EGREP$]) -m4trace:configure.in:30: -1- m4_pattern_allow([^FGREP$]) -m4trace:configure.in:30: -1- m4_pattern_allow([^GREP$]) -m4trace:configure.in:30: -1- m4_pattern_allow([^LD$]) -m4trace:configure.in:30: -1- LT_PATH_NM -m4trace:configure.in:30: -1- m4_pattern_allow([^DUMPBIN$]) -m4trace:configure.in:30: -1- m4_pattern_allow([^ac_ct_DUMPBIN$]) -m4trace:configure.in:30: -1- m4_pattern_allow([^DUMPBIN$]) -m4trace:configure.in:30: -1- m4_pattern_allow([^NM$]) -m4trace:configure.in:30: -1- m4_pattern_allow([^LN_S$]) -m4trace:configure.in:30: -1- LT_CMD_MAX_LEN -m4trace:configure.in:30: -1- m4_pattern_allow([^OBJDUMP$]) -m4trace:configure.in:30: -1- m4_pattern_allow([^OBJDUMP$]) -m4trace:configure.in:30: -1- m4_pattern_allow([^AR$]) -m4trace:configure.in:30: -1- m4_pattern_allow([^STRIP$]) -m4trace:configure.in:30: -1- m4_pattern_allow([^RANLIB$]) -m4trace:configure.in:30: -1- m4_pattern_allow([LT_OBJDIR]) -m4trace:configure.in:30: -1- m4_pattern_allow([^LT_OBJDIR$]) -m4trace:configure.in:30: -1- m4_pattern_allow([^lt_ECHO$]) -m4trace:configure.in:30: -1- _LT_CC_BASENAME([$compiler]) -m4trace:configure.in:30: -1- _LT_PATH_TOOL_PREFIX([${ac_tool_prefix}file], [/usr/bin$PATH_SEPARATOR$PATH]) -m4trace:configure.in:30: -1- _LT_PATH_TOOL_PREFIX([file], [/usr/bin$PATH_SEPARATOR$PATH]) -m4trace:configure.in:30: -1- LT_SUPPORTED_TAG([CC]) -m4trace:configure.in:30: -1- _LT_COMPILER_BOILERPLATE -m4trace:configure.in:30: -1- _LT_LINKER_BOILERPLATE -m4trace:configure.in:30: -1- _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], [lt_cv_prog_compiler_rtti_exceptions], [-fno-rtti -fno-exceptions], [], [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, )="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, ) -fno-rtti -fno-exceptions"]) -m4trace:configure.in:30: -1- _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, ) works], [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, )], [$_LT_TAGVAR(lt_prog_compiler_pic, )@&t@m4_if([],[],[ -DPIC],[m4_if([],[CXX],[ -DPIC],[])])], [], [case $_LT_TAGVAR(lt_prog_compiler_pic, ) in - "" | " "*) ;; - *) _LT_TAGVAR(lt_prog_compiler_pic, )=" $_LT_TAGVAR(lt_prog_compiler_pic, )" ;; - esac], [_LT_TAGVAR(lt_prog_compiler_pic, )= - _LT_TAGVAR(lt_prog_compiler_can_build_shared, )=no]) -m4trace:configure.in:30: -1- _LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], [lt_cv_prog_compiler_static_works], [$lt_tmp_static_flag], [], [_LT_TAGVAR(lt_prog_compiler_static, )=]) -m4trace:configure.in:30: -1- m4_pattern_allow([^DSYMUTIL$]) -m4trace:configure.in:30: -1- m4_pattern_allow([^NMEDIT$]) -m4trace:configure.in:30: -1- m4_pattern_allow([^LIPO$]) -m4trace:configure.in:30: -1- m4_pattern_allow([^OTOOL$]) -m4trace:configure.in:30: -1- m4_pattern_allow([^OTOOL64$]) -m4trace:configure.in:30: -1- LT_SYS_DLOPEN_SELF -m4trace:configure.in:30: -1- m4_pattern_allow([^CPP$]) -m4trace:configure.in:30: -1- m4_pattern_allow([^CPPFLAGS$]) -m4trace:configure.in:30: -1- m4_pattern_allow([^CPP$]) -m4trace:configure.in:30: -1- m4_pattern_allow([^STDC_HEADERS$]) -m4trace:configure.in:30: -1- m4_pattern_allow([^HAVE_DLFCN_H$]) -m4trace:configure.in:32: -1- m4_pattern_allow([^CC$]) -m4trace:configure.in:32: -1- m4_pattern_allow([^CFLAGS$]) -m4trace:configure.in:32: -1- m4_pattern_allow([^LDFLAGS$]) -m4trace:configure.in:32: -1- m4_pattern_allow([^LIBS$]) -m4trace:configure.in:32: -1- m4_pattern_allow([^CPPFLAGS$]) -m4trace:configure.in:32: -1- m4_pattern_allow([^CC$]) -m4trace:configure.in:32: -1- m4_pattern_allow([^CC$]) -m4trace:configure.in:32: -1- m4_pattern_allow([^CC$]) -m4trace:configure.in:32: -1- m4_pattern_allow([^CC$]) -m4trace:configure.in:32: -1- m4_pattern_allow([^ac_ct_CC$]) -m4trace:configure.in:32: -1- _AM_DEPENDENCIES([CC]) -m4trace:configure.in:32: -1- m4_pattern_allow([^CCDEPMODE$]) -m4trace:configure.in:32: -1- AM_CONDITIONAL([am__fastdepCC], [ - test "x$enable_dependency_tracking" != xno \ - && test "$am_cv_CC_dependencies_compiler_type" = gcc3]) -m4trace:configure.in:32: -1- m4_pattern_allow([^am__fastdepCC_TRUE$]) -m4trace:configure.in:32: -1- m4_pattern_allow([^am__fastdepCC_FALSE$]) -m4trace:configure.in:32: -1- _AM_SUBST_NOTMAKE([am__fastdepCC_TRUE]) -m4trace:configure.in:32: -1- _AM_SUBST_NOTMAKE([am__fastdepCC_FALSE]) -m4trace:configure.in:35: -1- m4_pattern_allow([^AR$]) -m4trace:configure.in:36: -1- AM_PROG_LIBTOOL -m4trace:configure.in:36: -1- _m4_warn([obsolete], [The macro `AM_PROG_LIBTOOL' is obsolete. -You should run autoupdate.], [/usr/share/aclocal/libtool.m4:103: AM_PROG_LIBTOOL is expanded from... -configure.in:36: the top level]) -m4trace:configure.in:36: -1- LT_INIT -m4trace:configure.in:40: -1- m4_pattern_allow([^HAVE_SHADOW_PASSWORDS$]) -m4trace:configure.in:54: -1- m4_pattern_allow([^HAVE_LIBSOCKET$]) -m4trace:configure.in:58: -1- m4_pattern_allow([^HAVE_LIBNSL$]) -m4trace:configure.in:71: -1- m4_pattern_allow([^GETHOSTBYADDR_R$]) -m4trace:configure.in:72: -1- m4_pattern_allow([^GETHOSTBYADDRRSTYLE_BSD$]) -m4trace:configure.in:78: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. -You should run autoupdate.], [../../lib/autoconf/general.m4:2654: AC_TRY_LINK is expanded from... -configure.in:78: the top level]) -m4trace:configure.in:78: -1- m4_pattern_allow([^GETHOSTBYADDR_R$]) -m4trace:configure.in:78: -1- m4_pattern_allow([^GETHOSTBYADDRRSTYLE_GNU$]) -m4trace:configure.in:88: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. -You should run autoupdate.], [../../lib/autoconf/general.m4:2654: AC_TRY_LINK is expanded from... -configure.in:88: the top level]) -m4trace:configure.in:88: -1- m4_pattern_allow([^GETHOSTBYADDR_R$]) -m4trace:configure.in:88: -1- m4_pattern_allow([^GETHOSTBYADDRRSTYLE_SYSV$]) -m4trace:configure.in:98: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. -You should run autoupdate.], [../../lib/autoconf/general.m4:2654: AC_TRY_LINK is expanded from... -configure.in:98: the top level]) -m4trace:configure.in:98: -1- m4_pattern_allow([^GETHOSTBYADDR_R$]) -m4trace:configure.in:98: -1- m4_pattern_allow([^GETHOSTBYADDRRSTYLE_BSD$]) -m4trace:configure.in:127: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. -You should run autoupdate.], [../../lib/autoconf/general.m4:2654: AC_TRY_LINK is expanded from... -configure.in:127: the top level]) -m4trace:configure.in:127: -1- m4_pattern_allow([^GETHOSTBYNAME_R$]) -m4trace:configure.in:127: -1- m4_pattern_allow([^GETHOSTBYNAMERSTYLE_GNU$]) -m4trace:configure.in:136: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. -You should run autoupdate.], [../../lib/autoconf/general.m4:2654: AC_TRY_LINK is expanded from... -configure.in:136: the top level]) -m4trace:configure.in:136: -1- m4_pattern_allow([^GETHOSTBYNAME_R$]) -m4trace:configure.in:136: -1- m4_pattern_allow([^GETHOSTBYNAMERSTYLE_SYSV$]) -m4trace:configure.in:146: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. -You should run autoupdate.], [../../lib/autoconf/general.m4:2654: AC_TRY_LINK is expanded from... -configure.in:146: the top level]) -m4trace:configure.in:146: -1- m4_pattern_allow([^GETHOSTBYNAME_R$]) -m4trace:configure.in:146: -1- m4_pattern_allow([^GETHOSTBYNAMERSTYLE_BSD$]) -m4trace:configure.in:166: -1- m4_pattern_allow([^HAVE_LIBCRYPT$]) -m4trace:configure.in:169: -1- m4_pattern_allow([^WORDS_BIGENDIAN$]) -m4trace:configure.in:169: -1- m4_pattern_allow([^AC_APPLE_UNIVERSAL_BUILD$]) -m4trace:configure.in:171: -1- m4_pattern_allow([^BIG_ENDIAN$]) -m4trace:configure.in:173: -1- m4_pattern_allow([^LITTLE_ENDIAN$]) -m4trace:configure.in:178: -1- m4_pattern_allow([^STDC_HEADERS$]) -m4trace:configure.in:192: -1- m4_pattern_allow([^const$]) -m4trace:configure.in:193: -1- m4_pattern_allow([^off_t$]) -m4trace:configure.in:194: -1- m4_pattern_allow([^size_t$]) -m4trace:configure.in:195: -1- m4_pattern_allow([^TIME_WITH_SYS_TIME$]) -m4trace:configure.in:196: -1- m4_pattern_allow([^TM_IN_SYS_TIME$]) -m4trace:configure.in:200: -1- m4_pattern_allow([^LIB@&t@OBJS$]) -m4trace:configure.in:201: -1- _m4_warn([obsolete], [The macro `AC_FUNC_SETVBUF_REVERSED' is obsolete. Remove it and all references to SETVBUF_REVERSED.], [../../lib/autoconf/functions.m4:1692: AC_FUNC_SETVBUF_REVERSED is expanded from... -configure.in:201: the top level]) -m4trace:configure.in:202: -1- _m4_warn([obsolete], [The macro `AC_TYPE_SIGNAL' is obsolete. -You should run autoupdate.], [../../lib/autoconf/types.m4:738: AC_TYPE_SIGNAL is expanded from... -configure.in:202: the top level]) -m4trace:configure.in:202: -1- m4_pattern_allow([^RETSIGTYPE$]) -m4trace:configure.in:203: -1- m4_pattern_allow([^HAVE_STRFTIME$]) -m4trace:configure.in:203: -1- m4_pattern_allow([^HAVE_STRFTIME$]) -m4trace:configure.in:204: -1- m4_pattern_allow([^HAVE_ALLOCA_H$]) -m4trace:configure.in:204: -1- m4_pattern_allow([^HAVE_ALLOCA$]) -m4trace:configure.in:204: -1- m4_pattern_allow([^ALLOCA$]) -m4trace:configure.in:204: -1- m4_pattern_allow([^C_ALLOCA$]) -m4trace:configure.in:204: -1- m4_pattern_allow([^CRAY_STACKSEG_END$]) -m4trace:configure.in:204: -1- m4_pattern_allow([^STACK_DIRECTION$]) -m4trace:configure.in:205: -1- m4_pattern_allow([^LIB@&t@OBJS$]) -m4trace:configure.in:222: -2- m4_pattern_allow([^HAVE_STRUCT_UTSNAME_DOMAINNAME$]) -m4trace:configure.in:212: -1- _m4_warn([obsolete], [The macro `AC_TRY_RUN' is obsolete. -You should run autoupdate.], [../../lib/autoconf/general.m4:2731: AC_TRY_RUN is expanded from... -configure.in:212: the top level]) -m4trace:configure.in:212: -1- _m4_warn([cross], [AC_RUN_IFELSE called without default to allow cross compiling], [../../lib/autoconf/general.m4:2715: AC_RUN_IFELSE is expanded from... -../../lib/autoconf/general.m4:2731: AC_TRY_RUN is expanded from... -configure.in:212: the top level]) -m4trace:configure.in:231: -1- m4_pattern_allow([^HAVE_DEV_URANDOM$]) -m4trace:configure.in:266: -1- m4_pattern_allow([^RADIUS_116$]) -m4trace:configure.in:284: -1- m4_pattern_allow([^SCP$]) -m4trace:configure.in:295: -1- m4_pattern_allow([^RC_SECURE_PATH$]) -m4trace:configure.in:296: -1- m4_pattern_allow([^RC_LOG_FACILITY$]) -m4trace:configure.in:319: -1- AM_CONFIG_HEADER([config.h]) -m4trace:configure.in:319: -1- _m4_warn([obsolete], [The macro `AM_CONFIG_HEADER' is obsolete. -You should run autoupdate.], [/usr/share/aclocal-1.11/header.m4:12: AM_CONFIG_HEADER is expanded from... -configure.in:319: the top level]) -m4trace:configure.in:331: -1- m4_pattern_allow([^LIB@&t@OBJS$]) -m4trace:configure.in:331: -1- m4_pattern_allow([^LTLIBOBJS$]) -m4trace:configure.in:331: -1- AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"]) -m4trace:configure.in:331: -1- m4_pattern_allow([^am__EXEEXT_TRUE$]) -m4trace:configure.in:331: -1- m4_pattern_allow([^am__EXEEXT_FALSE$]) -m4trace:configure.in:331: -1- _AM_SUBST_NOTMAKE([am__EXEEXT_TRUE]) -m4trace:configure.in:331: -1- _AM_SUBST_NOTMAKE([am__EXEEXT_FALSE]) -m4trace:configure.in:331: -1- _AC_AM_CONFIG_HEADER_HOOK(["$ac_file"]) -m4trace:configure.in:331: -1- _AM_OUTPUT_DEPENDENCY_COMMANDS -m4trace:configure.in:331: -1- _LT_PROG_LTMAIN diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/autom4te.cache/traces.1 b/openair3/PMIPv6/freeradius-client-1.1.6/autom4te.cache/traces.1 deleted file mode 100644 index d80234e5df..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/autom4te.cache/traces.1 +++ /dev/null @@ -1,866 +0,0 @@ -m4trace:configure.in:10: -1- AC_INIT -m4trace:configure.in:10: -1- m4_pattern_forbid([^_?A[CHUM]_]) -m4trace:configure.in:10: -1- m4_pattern_forbid([_AC_]) -m4trace:configure.in:10: -1- m4_pattern_forbid([^LIBOBJS$], [do not use LIBOBJS directly, use AC_LIBOBJ (see section `AC_LIBOBJ vs LIBOBJS']) -m4trace:configure.in:10: -1- m4_pattern_allow([^AS_FLAGS$]) -m4trace:configure.in:10: -1- m4_pattern_forbid([^_?m4_]) -m4trace:configure.in:10: -1- m4_pattern_forbid([^dnl$]) -m4trace:configure.in:10: -1- m4_pattern_forbid([^_?AS_]) -m4trace:configure.in:10: -1- AC_SUBST([SHELL]) -m4trace:configure.in:10: -1- AC_SUBST_TRACE([SHELL]) -m4trace:configure.in:10: -1- m4_pattern_allow([^SHELL$]) -m4trace:configure.in:10: -1- AC_SUBST([PATH_SEPARATOR]) -m4trace:configure.in:10: -1- AC_SUBST_TRACE([PATH_SEPARATOR]) -m4trace:configure.in:10: -1- m4_pattern_allow([^PATH_SEPARATOR$]) -m4trace:configure.in:10: -1- AC_SUBST([PACKAGE_NAME], [m4_ifdef([AC_PACKAGE_NAME], ['AC_PACKAGE_NAME'])]) -m4trace:configure.in:10: -1- AC_SUBST_TRACE([PACKAGE_NAME]) -m4trace:configure.in:10: -1- m4_pattern_allow([^PACKAGE_NAME$]) -m4trace:configure.in:10: -1- AC_SUBST([PACKAGE_TARNAME], [m4_ifdef([AC_PACKAGE_TARNAME], ['AC_PACKAGE_TARNAME'])]) -m4trace:configure.in:10: -1- AC_SUBST_TRACE([PACKAGE_TARNAME]) -m4trace:configure.in:10: -1- m4_pattern_allow([^PACKAGE_TARNAME$]) -m4trace:configure.in:10: -1- AC_SUBST([PACKAGE_VERSION], [m4_ifdef([AC_PACKAGE_VERSION], ['AC_PACKAGE_VERSION'])]) -m4trace:configure.in:10: -1- AC_SUBST_TRACE([PACKAGE_VERSION]) -m4trace:configure.in:10: -1- m4_pattern_allow([^PACKAGE_VERSION$]) -m4trace:configure.in:10: -1- AC_SUBST([PACKAGE_STRING], [m4_ifdef([AC_PACKAGE_STRING], ['AC_PACKAGE_STRING'])]) -m4trace:configure.in:10: -1- AC_SUBST_TRACE([PACKAGE_STRING]) -m4trace:configure.in:10: -1- m4_pattern_allow([^PACKAGE_STRING$]) -m4trace:configure.in:10: -1- AC_SUBST([PACKAGE_BUGREPORT], [m4_ifdef([AC_PACKAGE_BUGREPORT], ['AC_PACKAGE_BUGREPORT'])]) -m4trace:configure.in:10: -1- AC_SUBST_TRACE([PACKAGE_BUGREPORT]) -m4trace:configure.in:10: -1- m4_pattern_allow([^PACKAGE_BUGREPORT$]) -m4trace:configure.in:10: -1- AC_SUBST([PACKAGE_URL], [m4_ifdef([AC_PACKAGE_URL], ['AC_PACKAGE_URL'])]) -m4trace:configure.in:10: -1- AC_SUBST_TRACE([PACKAGE_URL]) -m4trace:configure.in:10: -1- m4_pattern_allow([^PACKAGE_URL$]) -m4trace:configure.in:10: -1- AC_SUBST([exec_prefix], [NONE]) -m4trace:configure.in:10: -1- AC_SUBST_TRACE([exec_prefix]) -m4trace:configure.in:10: -1- m4_pattern_allow([^exec_prefix$]) -m4trace:configure.in:10: -1- AC_SUBST([prefix], [NONE]) -m4trace:configure.in:10: -1- AC_SUBST_TRACE([prefix]) -m4trace:configure.in:10: -1- m4_pattern_allow([^prefix$]) -m4trace:configure.in:10: -1- AC_SUBST([program_transform_name], [s,x,x,]) -m4trace:configure.in:10: -1- AC_SUBST_TRACE([program_transform_name]) -m4trace:configure.in:10: -1- m4_pattern_allow([^program_transform_name$]) -m4trace:configure.in:10: -1- AC_SUBST([bindir], ['${exec_prefix}/bin']) -m4trace:configure.in:10: -1- AC_SUBST_TRACE([bindir]) -m4trace:configure.in:10: -1- m4_pattern_allow([^bindir$]) -m4trace:configure.in:10: -1- AC_SUBST([sbindir], ['${exec_prefix}/sbin']) -m4trace:configure.in:10: -1- AC_SUBST_TRACE([sbindir]) -m4trace:configure.in:10: -1- m4_pattern_allow([^sbindir$]) -m4trace:configure.in:10: -1- AC_SUBST([libexecdir], ['${exec_prefix}/libexec']) -m4trace:configure.in:10: -1- AC_SUBST_TRACE([libexecdir]) -m4trace:configure.in:10: -1- m4_pattern_allow([^libexecdir$]) -m4trace:configure.in:10: -1- AC_SUBST([datarootdir], ['${prefix}/share']) -m4trace:configure.in:10: -1- AC_SUBST_TRACE([datarootdir]) -m4trace:configure.in:10: -1- m4_pattern_allow([^datarootdir$]) -m4trace:configure.in:10: -1- AC_SUBST([datadir], ['${datarootdir}']) -m4trace:configure.in:10: -1- AC_SUBST_TRACE([datadir]) -m4trace:configure.in:10: -1- m4_pattern_allow([^datadir$]) -m4trace:configure.in:10: -1- AC_SUBST([sysconfdir], ['${prefix}/etc']) -m4trace:configure.in:10: -1- AC_SUBST_TRACE([sysconfdir]) -m4trace:configure.in:10: -1- m4_pattern_allow([^sysconfdir$]) -m4trace:configure.in:10: -1- AC_SUBST([sharedstatedir], ['${prefix}/com']) -m4trace:configure.in:10: -1- AC_SUBST_TRACE([sharedstatedir]) -m4trace:configure.in:10: -1- m4_pattern_allow([^sharedstatedir$]) -m4trace:configure.in:10: -1- AC_SUBST([localstatedir], ['${prefix}/var']) -m4trace:configure.in:10: -1- AC_SUBST_TRACE([localstatedir]) -m4trace:configure.in:10: -1- m4_pattern_allow([^localstatedir$]) -m4trace:configure.in:10: -1- AC_SUBST([includedir], ['${prefix}/include']) -m4trace:configure.in:10: -1- AC_SUBST_TRACE([includedir]) -m4trace:configure.in:10: -1- m4_pattern_allow([^includedir$]) -m4trace:configure.in:10: -1- AC_SUBST([oldincludedir], ['/usr/include']) -m4trace:configure.in:10: -1- AC_SUBST_TRACE([oldincludedir]) -m4trace:configure.in:10: -1- m4_pattern_allow([^oldincludedir$]) -m4trace:configure.in:10: -1- AC_SUBST([docdir], [m4_ifset([AC_PACKAGE_TARNAME], - ['${datarootdir}/doc/${PACKAGE_TARNAME}'], - ['${datarootdir}/doc/${PACKAGE}'])]) -m4trace:configure.in:10: -1- AC_SUBST_TRACE([docdir]) -m4trace:configure.in:10: -1- m4_pattern_allow([^docdir$]) -m4trace:configure.in:10: -1- AC_SUBST([infodir], ['${datarootdir}/info']) -m4trace:configure.in:10: -1- AC_SUBST_TRACE([infodir]) -m4trace:configure.in:10: -1- m4_pattern_allow([^infodir$]) -m4trace:configure.in:10: -1- AC_SUBST([htmldir], ['${docdir}']) -m4trace:configure.in:10: -1- AC_SUBST_TRACE([htmldir]) -m4trace:configure.in:10: -1- m4_pattern_allow([^htmldir$]) -m4trace:configure.in:10: -1- AC_SUBST([dvidir], ['${docdir}']) -m4trace:configure.in:10: -1- AC_SUBST_TRACE([dvidir]) -m4trace:configure.in:10: -1- m4_pattern_allow([^dvidir$]) -m4trace:configure.in:10: -1- AC_SUBST([pdfdir], ['${docdir}']) -m4trace:configure.in:10: -1- AC_SUBST_TRACE([pdfdir]) -m4trace:configure.in:10: -1- m4_pattern_allow([^pdfdir$]) -m4trace:configure.in:10: -1- AC_SUBST([psdir], ['${docdir}']) -m4trace:configure.in:10: -1- AC_SUBST_TRACE([psdir]) -m4trace:configure.in:10: -1- m4_pattern_allow([^psdir$]) -m4trace:configure.in:10: -1- AC_SUBST([libdir], ['${exec_prefix}/lib']) -m4trace:configure.in:10: -1- AC_SUBST_TRACE([libdir]) -m4trace:configure.in:10: -1- m4_pattern_allow([^libdir$]) -m4trace:configure.in:10: -1- AC_SUBST([localedir], ['${datarootdir}/locale']) -m4trace:configure.in:10: -1- AC_SUBST_TRACE([localedir]) -m4trace:configure.in:10: -1- m4_pattern_allow([^localedir$]) -m4trace:configure.in:10: -1- AC_SUBST([mandir], ['${datarootdir}/man']) -m4trace:configure.in:10: -1- AC_SUBST_TRACE([mandir]) -m4trace:configure.in:10: -1- m4_pattern_allow([^mandir$]) -m4trace:configure.in:10: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_NAME]) -m4trace:configure.in:10: -1- m4_pattern_allow([^PACKAGE_NAME$]) -m4trace:configure.in:10: -1- AH_OUTPUT([PACKAGE_NAME], [/* Define to the full name of this package. */ -@%:@undef PACKAGE_NAME]) -m4trace:configure.in:10: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_TARNAME]) -m4trace:configure.in:10: -1- m4_pattern_allow([^PACKAGE_TARNAME$]) -m4trace:configure.in:10: -1- AH_OUTPUT([PACKAGE_TARNAME], [/* Define to the one symbol short name of this package. */ -@%:@undef PACKAGE_TARNAME]) -m4trace:configure.in:10: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_VERSION]) -m4trace:configure.in:10: -1- m4_pattern_allow([^PACKAGE_VERSION$]) -m4trace:configure.in:10: -1- AH_OUTPUT([PACKAGE_VERSION], [/* Define to the version of this package. */ -@%:@undef PACKAGE_VERSION]) -m4trace:configure.in:10: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_STRING]) -m4trace:configure.in:10: -1- m4_pattern_allow([^PACKAGE_STRING$]) -m4trace:configure.in:10: -1- AH_OUTPUT([PACKAGE_STRING], [/* Define to the full name and version of this package. */ -@%:@undef PACKAGE_STRING]) -m4trace:configure.in:10: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_BUGREPORT]) -m4trace:configure.in:10: -1- m4_pattern_allow([^PACKAGE_BUGREPORT$]) -m4trace:configure.in:10: -1- AH_OUTPUT([PACKAGE_BUGREPORT], [/* Define to the address where bug reports for this package should be sent. */ -@%:@undef PACKAGE_BUGREPORT]) -m4trace:configure.in:10: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_URL]) -m4trace:configure.in:10: -1- m4_pattern_allow([^PACKAGE_URL$]) -m4trace:configure.in:10: -1- AH_OUTPUT([PACKAGE_URL], [/* Define to the home page for this package. */ -@%:@undef PACKAGE_URL]) -m4trace:configure.in:10: -1- AC_SUBST([DEFS]) -m4trace:configure.in:10: -1- AC_SUBST_TRACE([DEFS]) -m4trace:configure.in:10: -1- m4_pattern_allow([^DEFS$]) -m4trace:configure.in:10: -1- AC_SUBST([ECHO_C]) -m4trace:configure.in:10: -1- AC_SUBST_TRACE([ECHO_C]) -m4trace:configure.in:10: -1- m4_pattern_allow([^ECHO_C$]) -m4trace:configure.in:10: -1- AC_SUBST([ECHO_N]) -m4trace:configure.in:10: -1- AC_SUBST_TRACE([ECHO_N]) -m4trace:configure.in:10: -1- m4_pattern_allow([^ECHO_N$]) -m4trace:configure.in:10: -1- AC_SUBST([ECHO_T]) -m4trace:configure.in:10: -1- AC_SUBST_TRACE([ECHO_T]) -m4trace:configure.in:10: -1- m4_pattern_allow([^ECHO_T$]) -m4trace:configure.in:10: -1- AC_SUBST([LIBS]) -m4trace:configure.in:10: -1- AC_SUBST_TRACE([LIBS]) -m4trace:configure.in:10: -1- m4_pattern_allow([^LIBS$]) -m4trace:configure.in:10: -1- AC_SUBST([build_alias]) -m4trace:configure.in:10: -1- AC_SUBST_TRACE([build_alias]) -m4trace:configure.in:10: -1- m4_pattern_allow([^build_alias$]) -m4trace:configure.in:10: -1- AC_SUBST([host_alias]) -m4trace:configure.in:10: -1- AC_SUBST_TRACE([host_alias]) -m4trace:configure.in:10: -1- m4_pattern_allow([^host_alias$]) -m4trace:configure.in:10: -1- AC_SUBST([target_alias]) -m4trace:configure.in:10: -1- AC_SUBST_TRACE([target_alias]) -m4trace:configure.in:10: -1- m4_pattern_allow([^target_alias$]) -m4trace:configure.in:12: -1- AM_MAINTAINER_MODE -m4trace:configure.in:12: -1- AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes]) -m4trace:configure.in:12: -1- AC_SUBST([MAINTAINER_MODE_TRUE]) -m4trace:configure.in:12: -1- AC_SUBST_TRACE([MAINTAINER_MODE_TRUE]) -m4trace:configure.in:12: -1- m4_pattern_allow([^MAINTAINER_MODE_TRUE$]) -m4trace:configure.in:12: -1- AC_SUBST([MAINTAINER_MODE_FALSE]) -m4trace:configure.in:12: -1- AC_SUBST_TRACE([MAINTAINER_MODE_FALSE]) -m4trace:configure.in:12: -1- m4_pattern_allow([^MAINTAINER_MODE_FALSE$]) -m4trace:configure.in:12: -1- _AM_SUBST_NOTMAKE([MAINTAINER_MODE_TRUE]) -m4trace:configure.in:12: -1- _AM_SUBST_NOTMAKE([MAINTAINER_MODE_FALSE]) -m4trace:configure.in:12: -1- AC_SUBST([MAINT]) -m4trace:configure.in:12: -1- AC_SUBST_TRACE([MAINT]) -m4trace:configure.in:12: -1- m4_pattern_allow([^MAINT$]) -m4trace:configure.in:15: -1- AC_CANONICAL_TARGET([]) -m4trace:configure.in:15: -1- AC_CANONICAL_HOST -m4trace:configure.in:15: -1- AC_CANONICAL_BUILD -m4trace:configure.in:15: -1- AC_REQUIRE_AUX_FILE([config.sub]) -m4trace:configure.in:15: -1- AC_REQUIRE_AUX_FILE([config.guess]) -m4trace:configure.in:15: -1- AC_SUBST([build], [$ac_cv_build]) -m4trace:configure.in:15: -1- AC_SUBST_TRACE([build]) -m4trace:configure.in:15: -1- m4_pattern_allow([^build$]) -m4trace:configure.in:15: -1- AC_SUBST([build_cpu], [$[1]]) -m4trace:configure.in:15: -1- AC_SUBST_TRACE([build_cpu]) -m4trace:configure.in:15: -1- m4_pattern_allow([^build_cpu$]) -m4trace:configure.in:15: -1- AC_SUBST([build_vendor], [$[2]]) -m4trace:configure.in:15: -1- AC_SUBST_TRACE([build_vendor]) -m4trace:configure.in:15: -1- m4_pattern_allow([^build_vendor$]) -m4trace:configure.in:15: -1- AC_SUBST([build_os]) -m4trace:configure.in:15: -1- AC_SUBST_TRACE([build_os]) -m4trace:configure.in:15: -1- m4_pattern_allow([^build_os$]) -m4trace:configure.in:15: -1- AC_SUBST([host], [$ac_cv_host]) -m4trace:configure.in:15: -1- AC_SUBST_TRACE([host]) -m4trace:configure.in:15: -1- m4_pattern_allow([^host$]) -m4trace:configure.in:15: -1- AC_SUBST([host_cpu], [$[1]]) -m4trace:configure.in:15: -1- AC_SUBST_TRACE([host_cpu]) -m4trace:configure.in:15: -1- m4_pattern_allow([^host_cpu$]) -m4trace:configure.in:15: -1- AC_SUBST([host_vendor], [$[2]]) -m4trace:configure.in:15: -1- AC_SUBST_TRACE([host_vendor]) -m4trace:configure.in:15: -1- m4_pattern_allow([^host_vendor$]) -m4trace:configure.in:15: -1- AC_SUBST([host_os]) -m4trace:configure.in:15: -1- AC_SUBST_TRACE([host_os]) -m4trace:configure.in:15: -1- m4_pattern_allow([^host_os$]) -m4trace:configure.in:15: -1- AC_SUBST([target], [$ac_cv_target]) -m4trace:configure.in:15: -1- AC_SUBST_TRACE([target]) -m4trace:configure.in:15: -1- m4_pattern_allow([^target$]) -m4trace:configure.in:15: -1- AC_SUBST([target_cpu], [$[1]]) -m4trace:configure.in:15: -1- AC_SUBST_TRACE([target_cpu]) -m4trace:configure.in:15: -1- m4_pattern_allow([^target_cpu$]) -m4trace:configure.in:15: -1- AC_SUBST([target_vendor], [$[2]]) -m4trace:configure.in:15: -1- AC_SUBST_TRACE([target_vendor]) -m4trace:configure.in:15: -1- m4_pattern_allow([^target_vendor$]) -m4trace:configure.in:15: -1- AC_SUBST([target_os]) -m4trace:configure.in:15: -1- AC_SUBST_TRACE([target_os]) -m4trace:configure.in:15: -1- m4_pattern_allow([^target_os$]) -m4trace:configure.in:22: -1- AM_INIT_AUTOMAKE([radiusclient], [1.1.6]) -m4trace:configure.in:22: -1- m4_pattern_allow([^AM_[A-Z]+FLAGS$]) -m4trace:configure.in:22: -1- AM_AUTOMAKE_VERSION([1.11.1]) -m4trace:configure.in:22: -1- AC_REQUIRE_AUX_FILE([install-sh]) -m4trace:configure.in:22: -1- AC_SUBST([INSTALL_PROGRAM]) -m4trace:configure.in:22: -1- AC_SUBST_TRACE([INSTALL_PROGRAM]) -m4trace:configure.in:22: -1- m4_pattern_allow([^INSTALL_PROGRAM$]) -m4trace:configure.in:22: -1- AC_SUBST([INSTALL_SCRIPT]) -m4trace:configure.in:22: -1- AC_SUBST_TRACE([INSTALL_SCRIPT]) -m4trace:configure.in:22: -1- m4_pattern_allow([^INSTALL_SCRIPT$]) -m4trace:configure.in:22: -1- AC_SUBST([INSTALL_DATA]) -m4trace:configure.in:22: -1- AC_SUBST_TRACE([INSTALL_DATA]) -m4trace:configure.in:22: -1- m4_pattern_allow([^INSTALL_DATA$]) -m4trace:configure.in:22: -1- AC_SUBST([am__isrc], [' -I$(srcdir)']) -m4trace:configure.in:22: -1- AC_SUBST_TRACE([am__isrc]) -m4trace:configure.in:22: -1- m4_pattern_allow([^am__isrc$]) -m4trace:configure.in:22: -1- _AM_SUBST_NOTMAKE([am__isrc]) -m4trace:configure.in:22: -1- AC_SUBST([CYGPATH_W]) -m4trace:configure.in:22: -1- AC_SUBST_TRACE([CYGPATH_W]) -m4trace:configure.in:22: -1- m4_pattern_allow([^CYGPATH_W$]) -m4trace:configure.in:22: -1- AC_SUBST([PACKAGE], [radiusclient]) -m4trace:configure.in:22: -1- AC_SUBST_TRACE([PACKAGE]) -m4trace:configure.in:22: -1- m4_pattern_allow([^PACKAGE$]) -m4trace:configure.in:22: -1- AC_SUBST([VERSION], [1.1.6]) -m4trace:configure.in:22: -1- AC_SUBST_TRACE([VERSION]) -m4trace:configure.in:22: -1- m4_pattern_allow([^VERSION$]) -m4trace:configure.in:22: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE]) -m4trace:configure.in:22: -1- m4_pattern_allow([^PACKAGE$]) -m4trace:configure.in:22: -1- AH_OUTPUT([PACKAGE], [/* Name of package */ -@%:@undef PACKAGE]) -m4trace:configure.in:22: -1- AC_DEFINE_TRACE_LITERAL([VERSION]) -m4trace:configure.in:22: -1- m4_pattern_allow([^VERSION$]) -m4trace:configure.in:22: -1- AH_OUTPUT([VERSION], [/* Version number of package */ -@%:@undef VERSION]) -m4trace:configure.in:22: -1- AC_REQUIRE_AUX_FILE([missing]) -m4trace:configure.in:22: -1- AC_SUBST([ACLOCAL]) -m4trace:configure.in:22: -1- AC_SUBST_TRACE([ACLOCAL]) -m4trace:configure.in:22: -1- m4_pattern_allow([^ACLOCAL$]) -m4trace:configure.in:22: -1- AC_SUBST([AUTOCONF]) -m4trace:configure.in:22: -1- AC_SUBST_TRACE([AUTOCONF]) -m4trace:configure.in:22: -1- m4_pattern_allow([^AUTOCONF$]) -m4trace:configure.in:22: -1- AC_SUBST([AUTOMAKE]) -m4trace:configure.in:22: -1- AC_SUBST_TRACE([AUTOMAKE]) -m4trace:configure.in:22: -1- m4_pattern_allow([^AUTOMAKE$]) -m4trace:configure.in:22: -1- AC_SUBST([AUTOHEADER]) -m4trace:configure.in:22: -1- AC_SUBST_TRACE([AUTOHEADER]) -m4trace:configure.in:22: -1- m4_pattern_allow([^AUTOHEADER$]) -m4trace:configure.in:22: -1- AC_SUBST([MAKEINFO]) -m4trace:configure.in:22: -1- AC_SUBST_TRACE([MAKEINFO]) -m4trace:configure.in:22: -1- m4_pattern_allow([^MAKEINFO$]) -m4trace:configure.in:22: -1- AC_SUBST([install_sh]) -m4trace:configure.in:22: -1- AC_SUBST_TRACE([install_sh]) -m4trace:configure.in:22: -1- m4_pattern_allow([^install_sh$]) -m4trace:configure.in:22: -1- AC_SUBST([STRIP]) -m4trace:configure.in:22: -1- AC_SUBST_TRACE([STRIP]) -m4trace:configure.in:22: -1- m4_pattern_allow([^STRIP$]) -m4trace:configure.in:22: -1- AC_SUBST([INSTALL_STRIP_PROGRAM]) -m4trace:configure.in:22: -1- AC_SUBST_TRACE([INSTALL_STRIP_PROGRAM]) -m4trace:configure.in:22: -1- m4_pattern_allow([^INSTALL_STRIP_PROGRAM$]) -m4trace:configure.in:22: -1- AC_REQUIRE_AUX_FILE([install-sh]) -m4trace:configure.in:22: -1- AC_SUBST([MKDIR_P]) -m4trace:configure.in:22: -1- AC_SUBST_TRACE([MKDIR_P]) -m4trace:configure.in:22: -1- m4_pattern_allow([^MKDIR_P$]) -m4trace:configure.in:22: -1- AC_SUBST([mkdir_p], ["$MKDIR_P"]) -m4trace:configure.in:22: -1- AC_SUBST_TRACE([mkdir_p]) -m4trace:configure.in:22: -1- m4_pattern_allow([^mkdir_p$]) -m4trace:configure.in:22: -1- AC_SUBST([AWK]) -m4trace:configure.in:22: -1- AC_SUBST_TRACE([AWK]) -m4trace:configure.in:22: -1- m4_pattern_allow([^AWK$]) -m4trace:configure.in:22: -1- AC_SUBST([SET_MAKE]) -m4trace:configure.in:22: -1- AC_SUBST_TRACE([SET_MAKE]) -m4trace:configure.in:22: -1- m4_pattern_allow([^SET_MAKE$]) -m4trace:configure.in:22: -1- AC_SUBST([am__leading_dot]) -m4trace:configure.in:22: -1- AC_SUBST_TRACE([am__leading_dot]) -m4trace:configure.in:22: -1- m4_pattern_allow([^am__leading_dot$]) -m4trace:configure.in:22: -1- AC_SUBST([AMTAR]) -m4trace:configure.in:22: -1- AC_SUBST_TRACE([AMTAR]) -m4trace:configure.in:22: -1- m4_pattern_allow([^AMTAR$]) -m4trace:configure.in:22: -1- AC_SUBST([am__tar]) -m4trace:configure.in:22: -1- AC_SUBST_TRACE([am__tar]) -m4trace:configure.in:22: -1- m4_pattern_allow([^am__tar$]) -m4trace:configure.in:22: -1- AC_SUBST([am__untar]) -m4trace:configure.in:22: -1- AC_SUBST_TRACE([am__untar]) -m4trace:configure.in:22: -1- m4_pattern_allow([^am__untar$]) -m4trace:configure.in:25: -1- AC_SUBST([LIBVERSION]) -m4trace:configure.in:25: -1- AC_SUBST_TRACE([LIBVERSION]) -m4trace:configure.in:25: -1- m4_pattern_allow([^LIBVERSION$]) -m4trace:configure.in:28: -1- AC_SUBST([pkgsysconfdir]) -m4trace:configure.in:28: -1- AC_SUBST_TRACE([pkgsysconfdir]) -m4trace:configure.in:28: -1- m4_pattern_allow([^pkgsysconfdir$]) -m4trace:configure.in:30: -1- AC_PROG_LIBTOOL -m4trace:configure.in:30: -1- _m4_warn([obsolete], [The macro `AC_PROG_LIBTOOL' is obsolete. -You should run autoupdate.], [aclocal.m4:123: AC_PROG_LIBTOOL is expanded from... -configure.in:30: the top level]) -m4trace:configure.in:30: -1- LT_INIT -m4trace:configure.in:30: -1- m4_pattern_forbid([^_?LT_[A-Z_]+$]) -m4trace:configure.in:30: -1- m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$]) -m4trace:configure.in:30: -1- AC_REQUIRE_AUX_FILE([ltmain.sh]) -m4trace:configure.in:30: -1- AC_SUBST([LIBTOOL]) -m4trace:configure.in:30: -1- AC_SUBST_TRACE([LIBTOOL]) -m4trace:configure.in:30: -1- m4_pattern_allow([^LIBTOOL$]) -m4trace:configure.in:30: -1- AC_SUBST([CC]) -m4trace:configure.in:30: -1- AC_SUBST_TRACE([CC]) -m4trace:configure.in:30: -1- m4_pattern_allow([^CC$]) -m4trace:configure.in:30: -1- AC_SUBST([CFLAGS]) -m4trace:configure.in:30: -1- AC_SUBST_TRACE([CFLAGS]) -m4trace:configure.in:30: -1- m4_pattern_allow([^CFLAGS$]) -m4trace:configure.in:30: -1- AC_SUBST([LDFLAGS]) -m4trace:configure.in:30: -1- AC_SUBST_TRACE([LDFLAGS]) -m4trace:configure.in:30: -1- m4_pattern_allow([^LDFLAGS$]) -m4trace:configure.in:30: -1- AC_SUBST([LIBS]) -m4trace:configure.in:30: -1- AC_SUBST_TRACE([LIBS]) -m4trace:configure.in:30: -1- m4_pattern_allow([^LIBS$]) -m4trace:configure.in:30: -1- AC_SUBST([CPPFLAGS]) -m4trace:configure.in:30: -1- AC_SUBST_TRACE([CPPFLAGS]) -m4trace:configure.in:30: -1- m4_pattern_allow([^CPPFLAGS$]) -m4trace:configure.in:30: -1- AC_SUBST([CC]) -m4trace:configure.in:30: -1- AC_SUBST_TRACE([CC]) -m4trace:configure.in:30: -1- m4_pattern_allow([^CC$]) -m4trace:configure.in:30: -1- AC_SUBST([CC]) -m4trace:configure.in:30: -1- AC_SUBST_TRACE([CC]) -m4trace:configure.in:30: -1- m4_pattern_allow([^CC$]) -m4trace:configure.in:30: -1- AC_SUBST([CC]) -m4trace:configure.in:30: -1- AC_SUBST_TRACE([CC]) -m4trace:configure.in:30: -1- m4_pattern_allow([^CC$]) -m4trace:configure.in:30: -1- AC_SUBST([CC]) -m4trace:configure.in:30: -1- AC_SUBST_TRACE([CC]) -m4trace:configure.in:30: -1- m4_pattern_allow([^CC$]) -m4trace:configure.in:30: -1- AC_SUBST([ac_ct_CC]) -m4trace:configure.in:30: -1- AC_SUBST_TRACE([ac_ct_CC]) -m4trace:configure.in:30: -1- m4_pattern_allow([^ac_ct_CC$]) -m4trace:configure.in:30: -1- AC_SUBST([EXEEXT], [$ac_cv_exeext]) -m4trace:configure.in:30: -1- AC_SUBST_TRACE([EXEEXT]) -m4trace:configure.in:30: -1- m4_pattern_allow([^EXEEXT$]) -m4trace:configure.in:30: -1- AC_SUBST([OBJEXT], [$ac_cv_objext]) -m4trace:configure.in:30: -1- AC_SUBST_TRACE([OBJEXT]) -m4trace:configure.in:30: -1- m4_pattern_allow([^OBJEXT$]) -m4trace:configure.in:30: -1- AC_SUBST([DEPDIR], ["${am__leading_dot}deps"]) -m4trace:configure.in:30: -1- AC_SUBST_TRACE([DEPDIR]) -m4trace:configure.in:30: -1- m4_pattern_allow([^DEPDIR$]) -m4trace:configure.in:30: -1- AC_SUBST([am__include]) -m4trace:configure.in:30: -1- AC_SUBST_TRACE([am__include]) -m4trace:configure.in:30: -1- m4_pattern_allow([^am__include$]) -m4trace:configure.in:30: -1- AC_SUBST([am__quote]) -m4trace:configure.in:30: -1- AC_SUBST_TRACE([am__quote]) -m4trace:configure.in:30: -1- m4_pattern_allow([^am__quote$]) -m4trace:configure.in:30: -1- AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) -m4trace:configure.in:30: -1- AC_SUBST([AMDEP_TRUE]) -m4trace:configure.in:30: -1- AC_SUBST_TRACE([AMDEP_TRUE]) -m4trace:configure.in:30: -1- m4_pattern_allow([^AMDEP_TRUE$]) -m4trace:configure.in:30: -1- AC_SUBST([AMDEP_FALSE]) -m4trace:configure.in:30: -1- AC_SUBST_TRACE([AMDEP_FALSE]) -m4trace:configure.in:30: -1- m4_pattern_allow([^AMDEP_FALSE$]) -m4trace:configure.in:30: -1- _AM_SUBST_NOTMAKE([AMDEP_TRUE]) -m4trace:configure.in:30: -1- _AM_SUBST_NOTMAKE([AMDEP_FALSE]) -m4trace:configure.in:30: -1- AC_SUBST([AMDEPBACKSLASH]) -m4trace:configure.in:30: -1- AC_SUBST_TRACE([AMDEPBACKSLASH]) -m4trace:configure.in:30: -1- m4_pattern_allow([^AMDEPBACKSLASH$]) -m4trace:configure.in:30: -1- _AM_SUBST_NOTMAKE([AMDEPBACKSLASH]) -m4trace:configure.in:30: -1- AC_SUBST([CCDEPMODE], [depmode=$am_cv_CC_dependencies_compiler_type]) -m4trace:configure.in:30: -1- AC_SUBST_TRACE([CCDEPMODE]) -m4trace:configure.in:30: -1- m4_pattern_allow([^CCDEPMODE$]) -m4trace:configure.in:30: -1- AM_CONDITIONAL([am__fastdepCC], [ - test "x$enable_dependency_tracking" != xno \ - && test "$am_cv_CC_dependencies_compiler_type" = gcc3]) -m4trace:configure.in:30: -1- AC_SUBST([am__fastdepCC_TRUE]) -m4trace:configure.in:30: -1- AC_SUBST_TRACE([am__fastdepCC_TRUE]) -m4trace:configure.in:30: -1- m4_pattern_allow([^am__fastdepCC_TRUE$]) -m4trace:configure.in:30: -1- AC_SUBST([am__fastdepCC_FALSE]) -m4trace:configure.in:30: -1- AC_SUBST_TRACE([am__fastdepCC_FALSE]) -m4trace:configure.in:30: -1- m4_pattern_allow([^am__fastdepCC_FALSE$]) -m4trace:configure.in:30: -1- _AM_SUBST_NOTMAKE([am__fastdepCC_TRUE]) -m4trace:configure.in:30: -1- _AM_SUBST_NOTMAKE([am__fastdepCC_FALSE]) -m4trace:configure.in:30: -1- AC_SUBST([SED]) -m4trace:configure.in:30: -1- AC_SUBST_TRACE([SED]) -m4trace:configure.in:30: -1- m4_pattern_allow([^SED$]) -m4trace:configure.in:30: -1- AC_SUBST([GREP]) -m4trace:configure.in:30: -1- AC_SUBST_TRACE([GREP]) -m4trace:configure.in:30: -1- m4_pattern_allow([^GREP$]) -m4trace:configure.in:30: -1- AC_SUBST([EGREP]) -m4trace:configure.in:30: -1- AC_SUBST_TRACE([EGREP]) -m4trace:configure.in:30: -1- m4_pattern_allow([^EGREP$]) -m4trace:configure.in:30: -1- AC_SUBST([FGREP]) -m4trace:configure.in:30: -1- AC_SUBST_TRACE([FGREP]) -m4trace:configure.in:30: -1- m4_pattern_allow([^FGREP$]) -m4trace:configure.in:30: -1- AC_SUBST([GREP]) -m4trace:configure.in:30: -1- AC_SUBST_TRACE([GREP]) -m4trace:configure.in:30: -1- m4_pattern_allow([^GREP$]) -m4trace:configure.in:30: -1- AC_SUBST([LD]) -m4trace:configure.in:30: -1- AC_SUBST_TRACE([LD]) -m4trace:configure.in:30: -1- m4_pattern_allow([^LD$]) -m4trace:configure.in:30: -1- AC_SUBST([DUMPBIN]) -m4trace:configure.in:30: -1- AC_SUBST_TRACE([DUMPBIN]) -m4trace:configure.in:30: -1- m4_pattern_allow([^DUMPBIN$]) -m4trace:configure.in:30: -1- AC_SUBST([ac_ct_DUMPBIN]) -m4trace:configure.in:30: -1- AC_SUBST_TRACE([ac_ct_DUMPBIN]) -m4trace:configure.in:30: -1- m4_pattern_allow([^ac_ct_DUMPBIN$]) -m4trace:configure.in:30: -1- AC_SUBST([DUMPBIN]) -m4trace:configure.in:30: -1- AC_SUBST_TRACE([DUMPBIN]) -m4trace:configure.in:30: -1- m4_pattern_allow([^DUMPBIN$]) -m4trace:configure.in:30: -1- AC_SUBST([NM]) -m4trace:configure.in:30: -1- AC_SUBST_TRACE([NM]) -m4trace:configure.in:30: -1- m4_pattern_allow([^NM$]) -m4trace:configure.in:30: -1- AC_SUBST([LN_S], [$as_ln_s]) -m4trace:configure.in:30: -1- AC_SUBST_TRACE([LN_S]) -m4trace:configure.in:30: -1- m4_pattern_allow([^LN_S$]) -m4trace:configure.in:30: -1- AC_SUBST([OBJDUMP]) -m4trace:configure.in:30: -1- AC_SUBST_TRACE([OBJDUMP]) -m4trace:configure.in:30: -1- m4_pattern_allow([^OBJDUMP$]) -m4trace:configure.in:30: -1- AC_SUBST([OBJDUMP]) -m4trace:configure.in:30: -1- AC_SUBST_TRACE([OBJDUMP]) -m4trace:configure.in:30: -1- m4_pattern_allow([^OBJDUMP$]) -m4trace:configure.in:30: -1- AC_SUBST([AR]) -m4trace:configure.in:30: -1- AC_SUBST_TRACE([AR]) -m4trace:configure.in:30: -1- m4_pattern_allow([^AR$]) -m4trace:configure.in:30: -1- AC_SUBST([STRIP]) -m4trace:configure.in:30: -1- AC_SUBST_TRACE([STRIP]) -m4trace:configure.in:30: -1- m4_pattern_allow([^STRIP$]) -m4trace:configure.in:30: -1- AC_SUBST([RANLIB]) -m4trace:configure.in:30: -1- AC_SUBST_TRACE([RANLIB]) -m4trace:configure.in:30: -1- m4_pattern_allow([^RANLIB$]) -m4trace:configure.in:30: -1- m4_pattern_allow([LT_OBJDIR]) -m4trace:configure.in:30: -1- AC_DEFINE_TRACE_LITERAL([LT_OBJDIR]) -m4trace:configure.in:30: -1- m4_pattern_allow([^LT_OBJDIR$]) -m4trace:configure.in:30: -1- AH_OUTPUT([LT_OBJDIR], [/* Define to the sub-directory in which libtool stores uninstalled libraries. - */ -@%:@undef LT_OBJDIR]) -m4trace:configure.in:30: -1- AC_SUBST([lt_ECHO]) -m4trace:configure.in:30: -1- AC_SUBST_TRACE([lt_ECHO]) -m4trace:configure.in:30: -1- m4_pattern_allow([^lt_ECHO$]) -m4trace:configure.in:30: -1- LT_SUPPORTED_TAG([CC]) -m4trace:configure.in:30: -1- AC_SUBST([DSYMUTIL]) -m4trace:configure.in:30: -1- AC_SUBST_TRACE([DSYMUTIL]) -m4trace:configure.in:30: -1- m4_pattern_allow([^DSYMUTIL$]) -m4trace:configure.in:30: -1- AC_SUBST([NMEDIT]) -m4trace:configure.in:30: -1- AC_SUBST_TRACE([NMEDIT]) -m4trace:configure.in:30: -1- m4_pattern_allow([^NMEDIT$]) -m4trace:configure.in:30: -1- AC_SUBST([LIPO]) -m4trace:configure.in:30: -1- AC_SUBST_TRACE([LIPO]) -m4trace:configure.in:30: -1- m4_pattern_allow([^LIPO$]) -m4trace:configure.in:30: -1- AC_SUBST([OTOOL]) -m4trace:configure.in:30: -1- AC_SUBST_TRACE([OTOOL]) -m4trace:configure.in:30: -1- m4_pattern_allow([^OTOOL$]) -m4trace:configure.in:30: -1- AC_SUBST([OTOOL64]) -m4trace:configure.in:30: -1- AC_SUBST_TRACE([OTOOL64]) -m4trace:configure.in:30: -1- m4_pattern_allow([^OTOOL64$]) -m4trace:configure.in:30: -1- AH_OUTPUT([HAVE_DLFCN_H], [/* Define to 1 if you have the header file. */ -@%:@undef HAVE_DLFCN_H]) -m4trace:configure.in:30: -1- AC_SUBST([CPP]) -m4trace:configure.in:30: -1- AC_SUBST_TRACE([CPP]) -m4trace:configure.in:30: -1- m4_pattern_allow([^CPP$]) -m4trace:configure.in:30: -1- AC_SUBST([CPPFLAGS]) -m4trace:configure.in:30: -1- AC_SUBST_TRACE([CPPFLAGS]) -m4trace:configure.in:30: -1- m4_pattern_allow([^CPPFLAGS$]) -m4trace:configure.in:30: -1- AC_SUBST([CPP]) -m4trace:configure.in:30: -1- AC_SUBST_TRACE([CPP]) -m4trace:configure.in:30: -1- m4_pattern_allow([^CPP$]) -m4trace:configure.in:30: -1- AC_DEFINE_TRACE_LITERAL([STDC_HEADERS]) -m4trace:configure.in:30: -1- m4_pattern_allow([^STDC_HEADERS$]) -m4trace:configure.in:30: -1- AH_OUTPUT([STDC_HEADERS], [/* Define to 1 if you have the ANSI C header files. */ -@%:@undef STDC_HEADERS]) -m4trace:configure.in:30: -1- AH_OUTPUT([HAVE_SYS_TYPES_H], [/* Define to 1 if you have the header file. */ -@%:@undef HAVE_SYS_TYPES_H]) -m4trace:configure.in:30: -1- AH_OUTPUT([HAVE_SYS_STAT_H], [/* Define to 1 if you have the header file. */ -@%:@undef HAVE_SYS_STAT_H]) -m4trace:configure.in:30: -1- AH_OUTPUT([HAVE_STDLIB_H], [/* Define to 1 if you have the header file. */ -@%:@undef HAVE_STDLIB_H]) -m4trace:configure.in:30: -1- AH_OUTPUT([HAVE_STRING_H], [/* Define to 1 if you have the header file. */ -@%:@undef HAVE_STRING_H]) -m4trace:configure.in:30: -1- AH_OUTPUT([HAVE_MEMORY_H], [/* Define to 1 if you have the header file. */ -@%:@undef HAVE_MEMORY_H]) -m4trace:configure.in:30: -1- AH_OUTPUT([HAVE_STRINGS_H], [/* Define to 1 if you have the header file. */ -@%:@undef HAVE_STRINGS_H]) -m4trace:configure.in:30: -1- AH_OUTPUT([HAVE_INTTYPES_H], [/* Define to 1 if you have the header file. */ -@%:@undef HAVE_INTTYPES_H]) -m4trace:configure.in:30: -1- AH_OUTPUT([HAVE_STDINT_H], [/* Define to 1 if you have the header file. */ -@%:@undef HAVE_STDINT_H]) -m4trace:configure.in:30: -1- AH_OUTPUT([HAVE_UNISTD_H], [/* Define to 1 if you have the header file. */ -@%:@undef HAVE_UNISTD_H]) -m4trace:configure.in:30: -1- AC_DEFINE_TRACE_LITERAL([HAVE_DLFCN_H]) -m4trace:configure.in:30: -1- m4_pattern_allow([^HAVE_DLFCN_H$]) -m4trace:configure.in:32: -1- AC_SUBST([CC]) -m4trace:configure.in:32: -1- AC_SUBST_TRACE([CC]) -m4trace:configure.in:32: -1- m4_pattern_allow([^CC$]) -m4trace:configure.in:32: -1- AC_SUBST([CFLAGS]) -m4trace:configure.in:32: -1- AC_SUBST_TRACE([CFLAGS]) -m4trace:configure.in:32: -1- m4_pattern_allow([^CFLAGS$]) -m4trace:configure.in:32: -1- AC_SUBST([LDFLAGS]) -m4trace:configure.in:32: -1- AC_SUBST_TRACE([LDFLAGS]) -m4trace:configure.in:32: -1- m4_pattern_allow([^LDFLAGS$]) -m4trace:configure.in:32: -1- AC_SUBST([LIBS]) -m4trace:configure.in:32: -1- AC_SUBST_TRACE([LIBS]) -m4trace:configure.in:32: -1- m4_pattern_allow([^LIBS$]) -m4trace:configure.in:32: -1- AC_SUBST([CPPFLAGS]) -m4trace:configure.in:32: -1- AC_SUBST_TRACE([CPPFLAGS]) -m4trace:configure.in:32: -1- m4_pattern_allow([^CPPFLAGS$]) -m4trace:configure.in:32: -1- AC_SUBST([CC]) -m4trace:configure.in:32: -1- AC_SUBST_TRACE([CC]) -m4trace:configure.in:32: -1- m4_pattern_allow([^CC$]) -m4trace:configure.in:32: -1- AC_SUBST([CC]) -m4trace:configure.in:32: -1- AC_SUBST_TRACE([CC]) -m4trace:configure.in:32: -1- m4_pattern_allow([^CC$]) -m4trace:configure.in:32: -1- AC_SUBST([CC]) -m4trace:configure.in:32: -1- AC_SUBST_TRACE([CC]) -m4trace:configure.in:32: -1- m4_pattern_allow([^CC$]) -m4trace:configure.in:32: -1- AC_SUBST([CC]) -m4trace:configure.in:32: -1- AC_SUBST_TRACE([CC]) -m4trace:configure.in:32: -1- m4_pattern_allow([^CC$]) -m4trace:configure.in:32: -1- AC_SUBST([ac_ct_CC]) -m4trace:configure.in:32: -1- AC_SUBST_TRACE([ac_ct_CC]) -m4trace:configure.in:32: -1- m4_pattern_allow([^ac_ct_CC$]) -m4trace:configure.in:32: -1- AC_SUBST([CCDEPMODE], [depmode=$am_cv_CC_dependencies_compiler_type]) -m4trace:configure.in:32: -1- AC_SUBST_TRACE([CCDEPMODE]) -m4trace:configure.in:32: -1- m4_pattern_allow([^CCDEPMODE$]) -m4trace:configure.in:32: -1- AM_CONDITIONAL([am__fastdepCC], [ - test "x$enable_dependency_tracking" != xno \ - && test "$am_cv_CC_dependencies_compiler_type" = gcc3]) -m4trace:configure.in:32: -1- AC_SUBST([am__fastdepCC_TRUE]) -m4trace:configure.in:32: -1- AC_SUBST_TRACE([am__fastdepCC_TRUE]) -m4trace:configure.in:32: -1- m4_pattern_allow([^am__fastdepCC_TRUE$]) -m4trace:configure.in:32: -1- AC_SUBST([am__fastdepCC_FALSE]) -m4trace:configure.in:32: -1- AC_SUBST_TRACE([am__fastdepCC_FALSE]) -m4trace:configure.in:32: -1- m4_pattern_allow([^am__fastdepCC_FALSE$]) -m4trace:configure.in:32: -1- _AM_SUBST_NOTMAKE([am__fastdepCC_TRUE]) -m4trace:configure.in:32: -1- _AM_SUBST_NOTMAKE([am__fastdepCC_FALSE]) -m4trace:configure.in:35: -1- AC_SUBST([AR]) -m4trace:configure.in:35: -1- AC_SUBST_TRACE([AR]) -m4trace:configure.in:35: -1- m4_pattern_allow([^AR$]) -m4trace:configure.in:36: -1- _m4_warn([obsolete], [The macro `AM_PROG_LIBTOOL' is obsolete. -You should run autoupdate.], [aclocal.m4:124: AM_PROG_LIBTOOL is expanded from... -configure.in:36: the top level]) -m4trace:configure.in:36: -1- LT_INIT -m4trace:configure.in:40: -1- AC_DEFINE_TRACE_LITERAL([HAVE_SHADOW_PASSWORDS]) -m4trace:configure.in:40: -1- m4_pattern_allow([^HAVE_SHADOW_PASSWORDS$]) -m4trace:configure.in:54: -1- AH_OUTPUT([HAVE_LIBSOCKET], [/* Define to 1 if you have the `socket\' library (-lsocket). */ -@%:@undef HAVE_LIBSOCKET]) -m4trace:configure.in:54: -1- AC_DEFINE_TRACE_LITERAL([HAVE_LIBSOCKET]) -m4trace:configure.in:54: -1- m4_pattern_allow([^HAVE_LIBSOCKET$]) -m4trace:configure.in:58: -1- AH_OUTPUT([HAVE_LIBNSL], [/* Define to 1 if you have the `nsl\' library (-lnsl). */ -@%:@undef HAVE_LIBNSL]) -m4trace:configure.in:58: -1- AC_DEFINE_TRACE_LITERAL([HAVE_LIBNSL]) -m4trace:configure.in:58: -1- m4_pattern_allow([^HAVE_LIBNSL$]) -m4trace:configure.in:71: -1- AC_DEFINE_TRACE_LITERAL([GETHOSTBYADDR_R]) -m4trace:configure.in:71: -1- m4_pattern_allow([^GETHOSTBYADDR_R$]) -m4trace:configure.in:71: -1- AH_OUTPUT([GETHOSTBYADDR_R], [/* Define to 1 us gethostbyaddr_r() */ -@%:@undef GETHOSTBYADDR_R]) -m4trace:configure.in:72: -1- AC_DEFINE_TRACE_LITERAL([GETHOSTBYADDRRSTYLE_BSD]) -m4trace:configure.in:72: -1- m4_pattern_allow([^GETHOSTBYADDRRSTYLE_BSD$]) -m4trace:configure.in:72: -1- AH_OUTPUT([GETHOSTBYADDRRSTYLE_BSD], [/* Define to 1 to use bsd-style gethostbyaddr_r() */ -@%:@undef GETHOSTBYADDRRSTYLE_BSD]) -m4trace:configure.in:78: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. -You should run autoupdate.], [../../lib/autoconf/general.m4:2654: AC_TRY_LINK is expanded from... -configure.in:78: the top level]) -m4trace:configure.in:78: -1- AC_DEFINE_TRACE_LITERAL([GETHOSTBYADDR_R]) -m4trace:configure.in:78: -1- m4_pattern_allow([^GETHOSTBYADDR_R$]) -m4trace:configure.in:78: -1- AC_DEFINE_TRACE_LITERAL([GETHOSTBYADDRRSTYLE_GNU]) -m4trace:configure.in:78: -1- m4_pattern_allow([^GETHOSTBYADDRRSTYLE_GNU$]) -m4trace:configure.in:78: -1- AH_OUTPUT([GETHOSTBYADDRRSTYLE_GNU], [/* Define to 1 to use gnu-style gethostbyaddr_r() */ -@%:@undef GETHOSTBYADDRRSTYLE_GNU]) -m4trace:configure.in:88: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. -You should run autoupdate.], [../../lib/autoconf/general.m4:2654: AC_TRY_LINK is expanded from... -configure.in:88: the top level]) -m4trace:configure.in:88: -1- AC_DEFINE_TRACE_LITERAL([GETHOSTBYADDR_R]) -m4trace:configure.in:88: -1- m4_pattern_allow([^GETHOSTBYADDR_R$]) -m4trace:configure.in:88: -1- AC_DEFINE_TRACE_LITERAL([GETHOSTBYADDRRSTYLE_SYSV]) -m4trace:configure.in:88: -1- m4_pattern_allow([^GETHOSTBYADDRRSTYLE_SYSV$]) -m4trace:configure.in:88: -1- AH_OUTPUT([GETHOSTBYADDRRSTYLE_SYSV], [/* Define to 1 to use sysv-style gethostbyaddr_r() */ -@%:@undef GETHOSTBYADDRRSTYLE_SYSV]) -m4trace:configure.in:98: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. -You should run autoupdate.], [../../lib/autoconf/general.m4:2654: AC_TRY_LINK is expanded from... -configure.in:98: the top level]) -m4trace:configure.in:98: -1- AC_DEFINE_TRACE_LITERAL([GETHOSTBYADDR_R]) -m4trace:configure.in:98: -1- m4_pattern_allow([^GETHOSTBYADDR_R$]) -m4trace:configure.in:98: -1- AC_DEFINE_TRACE_LITERAL([GETHOSTBYADDRRSTYLE_BSD]) -m4trace:configure.in:98: -1- m4_pattern_allow([^GETHOSTBYADDRRSTYLE_BSD$]) -m4trace:configure.in:127: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. -You should run autoupdate.], [../../lib/autoconf/general.m4:2654: AC_TRY_LINK is expanded from... -configure.in:127: the top level]) -m4trace:configure.in:127: -1- AC_DEFINE_TRACE_LITERAL([GETHOSTBYNAME_R]) -m4trace:configure.in:127: -1- m4_pattern_allow([^GETHOSTBYNAME_R$]) -m4trace:configure.in:127: -1- AH_OUTPUT([GETHOSTBYNAME_R], [/* Define to 1 to use gethostbyname_r() */ -@%:@undef GETHOSTBYNAME_R]) -m4trace:configure.in:127: -1- AC_DEFINE_TRACE_LITERAL([GETHOSTBYNAMERSTYLE_GNU]) -m4trace:configure.in:127: -1- m4_pattern_allow([^GETHOSTBYNAMERSTYLE_GNU$]) -m4trace:configure.in:127: -1- AH_OUTPUT([GETHOSTBYNAMERSTYLE_GNU], [/* Define to 1 to use gnu-style gethostbyname_r() */ -@%:@undef GETHOSTBYNAMERSTYLE_GNU]) -m4trace:configure.in:136: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. -You should run autoupdate.], [../../lib/autoconf/general.m4:2654: AC_TRY_LINK is expanded from... -configure.in:136: the top level]) -m4trace:configure.in:136: -1- AC_DEFINE_TRACE_LITERAL([GETHOSTBYNAME_R]) -m4trace:configure.in:136: -1- m4_pattern_allow([^GETHOSTBYNAME_R$]) -m4trace:configure.in:136: -1- AC_DEFINE_TRACE_LITERAL([GETHOSTBYNAMERSTYLE_SYSV]) -m4trace:configure.in:136: -1- m4_pattern_allow([^GETHOSTBYNAMERSTYLE_SYSV$]) -m4trace:configure.in:136: -1- AH_OUTPUT([GETHOSTBYNAMERSTYLE_SYSV], [/* Define to 1 to use sysv-style gethostbyname_r() */ -@%:@undef GETHOSTBYNAMERSTYLE_SYSV]) -m4trace:configure.in:146: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. -You should run autoupdate.], [../../lib/autoconf/general.m4:2654: AC_TRY_LINK is expanded from... -configure.in:146: the top level]) -m4trace:configure.in:146: -1- AC_DEFINE_TRACE_LITERAL([GETHOSTBYNAME_R]) -m4trace:configure.in:146: -1- m4_pattern_allow([^GETHOSTBYNAME_R$]) -m4trace:configure.in:146: -1- AC_DEFINE_TRACE_LITERAL([GETHOSTBYNAMERSTYLE_BSD]) -m4trace:configure.in:146: -1- m4_pattern_allow([^GETHOSTBYNAMERSTYLE_BSD$]) -m4trace:configure.in:146: -1- AH_OUTPUT([GETHOSTBYNAMERSTYLE_BSD], [/* Define to 1 to use bsd-style gethostbyname_r() */ -@%:@undef GETHOSTBYNAMERSTYLE_BSD]) -m4trace:configure.in:166: -1- AH_OUTPUT([HAVE_LIBCRYPT], [/* Define to 1 if you have the `crypt\' library (-lcrypt). */ -@%:@undef HAVE_LIBCRYPT]) -m4trace:configure.in:166: -1- AC_DEFINE_TRACE_LITERAL([HAVE_LIBCRYPT]) -m4trace:configure.in:166: -1- m4_pattern_allow([^HAVE_LIBCRYPT$]) -m4trace:configure.in:169: -1- AH_OUTPUT([WORDS_BIGENDIAN], [/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most - significant byte first (like Motorola and SPARC, unlike Intel). */ -#if defined AC_APPLE_UNIVERSAL_BUILD -# if defined __BIG_ENDIAN__ -# define WORDS_BIGENDIAN 1 -# endif -#else -# ifndef WORDS_BIGENDIAN -# undef WORDS_BIGENDIAN -# endif -#endif]) -m4trace:configure.in:169: -1- AC_DEFINE_TRACE_LITERAL([WORDS_BIGENDIAN]) -m4trace:configure.in:169: -1- m4_pattern_allow([^WORDS_BIGENDIAN$]) -m4trace:configure.in:169: -1- AC_DEFINE_TRACE_LITERAL([AC_APPLE_UNIVERSAL_BUILD]) -m4trace:configure.in:169: -1- m4_pattern_allow([^AC_APPLE_UNIVERSAL_BUILD$]) -m4trace:configure.in:169: -1- AH_OUTPUT([AC_APPLE_UNIVERSAL_BUILD], [/* Define if building universal (internal helper macro) */ -@%:@undef AC_APPLE_UNIVERSAL_BUILD]) -m4trace:configure.in:171: -1- AC_DEFINE_TRACE_LITERAL([BIG_ENDIAN]) -m4trace:configure.in:171: -1- m4_pattern_allow([^BIG_ENDIAN$]) -m4trace:configure.in:173: -1- AC_DEFINE_TRACE_LITERAL([LITTLE_ENDIAN]) -m4trace:configure.in:173: -1- m4_pattern_allow([^LITTLE_ENDIAN$]) -m4trace:configure.in:177: -1- AH_OUTPUT([HAVE_DIRENT_H], [/* Define to 1 if you have the header file, and it defines `DIR\'. - */ -@%:@undef HAVE_DIRENT_H]) -m4trace:configure.in:177: -1- AH_OUTPUT([HAVE_SYS_NDIR_H], [/* Define to 1 if you have the header file, and it defines `DIR\'. - */ -@%:@undef HAVE_SYS_NDIR_H]) -m4trace:configure.in:177: -1- AH_OUTPUT([HAVE_SYS_DIR_H], [/* Define to 1 if you have the header file, and it defines `DIR\'. - */ -@%:@undef HAVE_SYS_DIR_H]) -m4trace:configure.in:177: -1- AH_OUTPUT([HAVE_NDIR_H], [/* Define to 1 if you have the header file, and it defines `DIR\'. */ -@%:@undef HAVE_NDIR_H]) -m4trace:configure.in:178: -1- AC_DEFINE_TRACE_LITERAL([STDC_HEADERS]) -m4trace:configure.in:178: -1- m4_pattern_allow([^STDC_HEADERS$]) -m4trace:configure.in:178: -1- AH_OUTPUT([STDC_HEADERS], [/* Define to 1 if you have the ANSI C header files. */ -@%:@undef STDC_HEADERS]) -m4trace:configure.in:179: -1- AH_OUTPUT([HAVE_CRYPT_H], [/* Define to 1 if you have the header file. */ -@%:@undef HAVE_CRYPT_H]) -m4trace:configure.in:179: -1- AH_OUTPUT([HAVE_SIGNAL_H], [/* Define to 1 if you have the header file. */ -@%:@undef HAVE_SIGNAL_H]) -m4trace:configure.in:179: -1- AH_OUTPUT([HAVE_SYS_SIGNAL_H], [/* Define to 1 if you have the header file. */ -@%:@undef HAVE_SYS_SIGNAL_H]) -m4trace:configure.in:179: -1- AH_OUTPUT([HAVE_SYS_STAT_H], [/* Define to 1 if you have the header file. */ -@%:@undef HAVE_SYS_STAT_H]) -m4trace:configure.in:180: -1- AH_OUTPUT([HAVE_FCNTL_H], [/* Define to 1 if you have the header file. */ -@%:@undef HAVE_FCNTL_H]) -m4trace:configure.in:180: -1- AH_OUTPUT([HAVE_SYS_FCNTL_H], [/* Define to 1 if you have the header file. */ -@%:@undef HAVE_SYS_FCNTL_H]) -m4trace:configure.in:181: -1- AH_OUTPUT([HAVE_SYS_UTSNAME_H], [/* Define to 1 if you have the header file. */ -@%:@undef HAVE_SYS_UTSNAME_H]) -m4trace:configure.in:181: -1- AH_OUTPUT([HAVE_GETOPT_H], [/* Define to 1 if you have the header file. */ -@%:@undef HAVE_GETOPT_H]) -m4trace:configure.in:181: -1- AH_OUTPUT([HAVE_UNISTD_H], [/* Define to 1 if you have the header file. */ -@%:@undef HAVE_UNISTD_H]) -m4trace:configure.in:182: -1- AH_OUTPUT([HAVE_SYS_FILE_H], [/* Define to 1 if you have the header file. */ -@%:@undef HAVE_SYS_FILE_H]) -m4trace:configure.in:182: -1- AH_OUTPUT([HAVE_TERMIOS_H], [/* Define to 1 if you have the header file. */ -@%:@undef HAVE_TERMIOS_H]) -m4trace:configure.in:182: -1- AH_OUTPUT([HAVE_SYS_IOCTL_H], [/* Define to 1 if you have the header file. */ -@%:@undef HAVE_SYS_IOCTL_H]) -m4trace:configure.in:183: -1- AH_OUTPUT([HAVE_NETDB_H], [/* Define to 1 if you have the header file. */ -@%:@undef HAVE_NETDB_H]) -m4trace:configure.in:183: -1- AH_OUTPUT([HAVE_SYSLOG_H], [/* Define to 1 if you have the header file. */ -@%:@undef HAVE_SYSLOG_H]) -m4trace:configure.in:183: -1- AH_OUTPUT([HAVE_PWD_H], [/* Define to 1 if you have the header file. */ -@%:@undef HAVE_PWD_H]) -m4trace:configure.in:184: -1- AH_OUTPUT([HAVE_SYS_SOCKET_H], [/* Define to 1 if you have the header file. */ -@%:@undef HAVE_SYS_SOCKET_H]) -m4trace:configure.in:184: -1- AH_OUTPUT([HAVE_NETINET_IN_H], [/* Define to 1 if you have the header file. */ -@%:@undef HAVE_NETINET_IN_H]) -m4trace:configure.in:184: -1- AH_OUTPUT([HAVE_ARPA_INET_H], [/* Define to 1 if you have the header file. */ -@%:@undef HAVE_ARPA_INET_H]) -m4trace:configure.in:192: -1- AC_DEFINE_TRACE_LITERAL([const]) -m4trace:configure.in:192: -1- m4_pattern_allow([^const$]) -m4trace:configure.in:192: -1- AH_OUTPUT([const], [/* Define to empty if `const\' does not conform to ANSI C. */ -@%:@undef const]) -m4trace:configure.in:193: -1- AC_DEFINE_TRACE_LITERAL([off_t]) -m4trace:configure.in:193: -1- m4_pattern_allow([^off_t$]) -m4trace:configure.in:193: -1- AH_OUTPUT([off_t], [/* Define to `long int\' if does not define. */ -@%:@undef off_t]) -m4trace:configure.in:194: -1- AC_DEFINE_TRACE_LITERAL([size_t]) -m4trace:configure.in:194: -1- m4_pattern_allow([^size_t$]) -m4trace:configure.in:194: -1- AH_OUTPUT([size_t], [/* Define to `unsigned int\' if does not define. */ -@%:@undef size_t]) -m4trace:configure.in:195: -1- AC_DEFINE_TRACE_LITERAL([TIME_WITH_SYS_TIME]) -m4trace:configure.in:195: -1- m4_pattern_allow([^TIME_WITH_SYS_TIME$]) -m4trace:configure.in:195: -1- AH_OUTPUT([TIME_WITH_SYS_TIME], [/* Define to 1 if you can safely include both and . */ -@%:@undef TIME_WITH_SYS_TIME]) -m4trace:configure.in:196: -1- AC_DEFINE_TRACE_LITERAL([TM_IN_SYS_TIME]) -m4trace:configure.in:196: -1- m4_pattern_allow([^TM_IN_SYS_TIME$]) -m4trace:configure.in:196: -1- AH_OUTPUT([TM_IN_SYS_TIME], [/* Define to 1 if your declares `struct tm\'. */ -@%:@undef TM_IN_SYS_TIME]) -m4trace:configure.in:200: -1- AC_LIBSOURCE([memcmp.c]) -m4trace:configure.in:200: -1- AC_SUBST([LIB@&t@OBJS], ["$LIB@&t@OBJS memcmp.$ac_objext"]) -m4trace:configure.in:200: -1- AC_SUBST_TRACE([LIB@&t@OBJS]) -m4trace:configure.in:200: -1- m4_pattern_allow([^LIB@&t@OBJS$]) -m4trace:configure.in:201: -1- _m4_warn([obsolete], [The macro `AC_FUNC_SETVBUF_REVERSED' is obsolete. Remove it and all references to SETVBUF_REVERSED.], [../../lib/autoconf/functions.m4:1692: AC_FUNC_SETVBUF_REVERSED is expanded from... -configure.in:201: the top level]) -m4trace:configure.in:202: -1- _m4_warn([obsolete], [The macro `AC_TYPE_SIGNAL' is obsolete. -You should run autoupdate.], [../../lib/autoconf/types.m4:738: AC_TYPE_SIGNAL is expanded from... -configure.in:202: the top level]) -m4trace:configure.in:202: -1- AC_DEFINE_TRACE_LITERAL([RETSIGTYPE]) -m4trace:configure.in:202: -1- m4_pattern_allow([^RETSIGTYPE$]) -m4trace:configure.in:202: -1- AH_OUTPUT([RETSIGTYPE], [/* Define as the return type of signal handlers (`int\' or `void\'). */ -@%:@undef RETSIGTYPE]) -m4trace:configure.in:203: -1- AH_OUTPUT([HAVE_STRFTIME], [/* Define to 1 if you have the `strftime\' function. */ -@%:@undef HAVE_STRFTIME]) -m4trace:configure.in:203: -1- AC_DEFINE_TRACE_LITERAL([HAVE_STRFTIME]) -m4trace:configure.in:203: -1- m4_pattern_allow([^HAVE_STRFTIME$]) -m4trace:configure.in:203: -1- AC_DEFINE_TRACE_LITERAL([HAVE_STRFTIME]) -m4trace:configure.in:203: -1- m4_pattern_allow([^HAVE_STRFTIME$]) -m4trace:configure.in:204: -1- AC_DEFINE_TRACE_LITERAL([HAVE_ALLOCA_H]) -m4trace:configure.in:204: -1- m4_pattern_allow([^HAVE_ALLOCA_H$]) -m4trace:configure.in:204: -1- AH_OUTPUT([HAVE_ALLOCA_H], [/* Define to 1 if you have and it should be used (not on Ultrix). - */ -@%:@undef HAVE_ALLOCA_H]) -m4trace:configure.in:204: -1- AC_DEFINE_TRACE_LITERAL([HAVE_ALLOCA]) -m4trace:configure.in:204: -1- m4_pattern_allow([^HAVE_ALLOCA$]) -m4trace:configure.in:204: -1- AH_OUTPUT([HAVE_ALLOCA], [/* Define to 1 if you have `alloca\', as a function or macro. */ -@%:@undef HAVE_ALLOCA]) -m4trace:configure.in:204: -1- AC_LIBSOURCE([alloca.c]) -m4trace:configure.in:204: -1- AC_SUBST([ALLOCA], [\${LIBOBJDIR}alloca.$ac_objext]) -m4trace:configure.in:204: -1- AC_SUBST_TRACE([ALLOCA]) -m4trace:configure.in:204: -1- m4_pattern_allow([^ALLOCA$]) -m4trace:configure.in:204: -1- AC_DEFINE_TRACE_LITERAL([C_ALLOCA]) -m4trace:configure.in:204: -1- m4_pattern_allow([^C_ALLOCA$]) -m4trace:configure.in:204: -1- AH_OUTPUT([C_ALLOCA], [/* Define to 1 if using `alloca.c\'. */ -@%:@undef C_ALLOCA]) -m4trace:configure.in:204: -1- AC_DEFINE_TRACE_LITERAL([CRAY_STACKSEG_END]) -m4trace:configure.in:204: -1- m4_pattern_allow([^CRAY_STACKSEG_END$]) -m4trace:configure.in:204: -1- AH_OUTPUT([CRAY_STACKSEG_END], [/* Define to one of `_getb67\', `GETB67\', `getb67\' for Cray-2 and Cray-YMP - systems. This function is required for `alloca.c\' support on those systems. - */ -@%:@undef CRAY_STACKSEG_END]) -m4trace:configure.in:204: -1- AH_OUTPUT([STACK_DIRECTION], [/* If using the C implementation of alloca, define if you know the - direction of stack growth for your system; otherwise it will be - automatically deduced at runtime. - STACK_DIRECTION > 0 => grows toward higher addresses - STACK_DIRECTION < 0 => grows toward lower addresses - STACK_DIRECTION = 0 => direction of growth unknown */ -@%:@undef STACK_DIRECTION]) -m4trace:configure.in:204: -1- AC_DEFINE_TRACE_LITERAL([STACK_DIRECTION]) -m4trace:configure.in:204: -1- m4_pattern_allow([^STACK_DIRECTION$]) -m4trace:configure.in:205: -1- AC_LIBSOURCE([strdup.c]) -m4trace:configure.in:205: -1- AC_LIBSOURCE([strerror.c]) -m4trace:configure.in:205: -1- AC_LIBSOURCE([strcasecmp.c]) -m4trace:configure.in:205: -1- AH_OUTPUT([HAVE_STRDUP], [/* Define to 1 if you have the `strdup\' function. */ -@%:@undef HAVE_STRDUP]) -m4trace:configure.in:205: -1- AH_OUTPUT([HAVE_STRERROR], [/* Define to 1 if you have the `strerror\' function. */ -@%:@undef HAVE_STRERROR]) -m4trace:configure.in:205: -1- AH_OUTPUT([HAVE_STRCASECMP], [/* Define to 1 if you have the `strcasecmp\' function. */ -@%:@undef HAVE_STRCASECMP]) -m4trace:configure.in:205: -1- AC_SUBST([LIB@&t@OBJS], ["$LIB@&t@OBJS $ac_func.$ac_objext"]) -m4trace:configure.in:205: -1- AC_SUBST_TRACE([LIB@&t@OBJS]) -m4trace:configure.in:205: -1- m4_pattern_allow([^LIB@&t@OBJS$]) -m4trace:configure.in:206: -1- AH_OUTPUT([HAVE_FLOCK], [/* Define to 1 if you have the `flock\' function. */ -@%:@undef HAVE_FLOCK]) -m4trace:configure.in:206: -1- AH_OUTPUT([HAVE_FCNTL], [/* Define to 1 if you have the `fcntl\' function. */ -@%:@undef HAVE_FCNTL]) -m4trace:configure.in:206: -1- AH_OUTPUT([HAVE_UNAME], [/* Define to 1 if you have the `uname\' function. */ -@%:@undef HAVE_UNAME]) -m4trace:configure.in:206: -1- AH_OUTPUT([HAVE_GETHOSTNAME], [/* Define to 1 if you have the `gethostname\' function. */ -@%:@undef HAVE_GETHOSTNAME]) -m4trace:configure.in:206: -1- AH_OUTPUT([HAVE_SYSINFO], [/* Define to 1 if you have the `sysinfo\' function. */ -@%:@undef HAVE_SYSINFO]) -m4trace:configure.in:206: -1- AH_OUTPUT([HAVE_GETDOMAINNAME], [/* Define to 1 if you have the `getdomainname\' function. */ -@%:@undef HAVE_GETDOMAINNAME]) -m4trace:configure.in:207: -1- AH_OUTPUT([HAVE_STRICMP], [/* Define to 1 if you have the `stricmp\' function. */ -@%:@undef HAVE_STRICMP]) -m4trace:configure.in:207: -1- AH_OUTPUT([HAVE_RANDOM], [/* Define to 1 if you have the `random\' function. */ -@%:@undef HAVE_RANDOM]) -m4trace:configure.in:207: -1- AH_OUTPUT([HAVE_RAND], [/* Define to 1 if you have the `rand\' function. */ -@%:@undef HAVE_RAND]) -m4trace:configure.in:207: -1- AH_OUTPUT([HAVE_SNPRINTF], [/* Define to 1 if you have the `snprintf\' function. */ -@%:@undef HAVE_SNPRINTF]) -m4trace:configure.in:207: -1- AH_OUTPUT([HAVE_VSNPRINTF], [/* Define to 1 if you have the `vsnprintf\' function. */ -@%:@undef HAVE_VSNPRINTF]) -m4trace:configure.in:222: -2- AC_DEFINE_TRACE_LITERAL([HAVE_STRUCT_UTSNAME_DOMAINNAME]) -m4trace:configure.in:222: -2- m4_pattern_allow([^HAVE_STRUCT_UTSNAME_DOMAINNAME$]) -m4trace:configure.in:212: -1- _m4_warn([obsolete], [The macro `AC_TRY_RUN' is obsolete. -You should run autoupdate.], [../../lib/autoconf/general.m4:2731: AC_TRY_RUN is expanded from... -configure.in:212: the top level]) -m4trace:configure.in:212: -1- _m4_warn([cross], [AC_RUN_IFELSE called without default to allow cross compiling], [../../lib/autoconf/general.m4:2715: AC_RUN_IFELSE is expanded from... -../../lib/autoconf/general.m4:2731: AC_TRY_RUN is expanded from... -configure.in:212: the top level]) -m4trace:configure.in:231: -1- AC_DEFINE_TRACE_LITERAL([HAVE_DEV_URANDOM]) -m4trace:configure.in:231: -1- m4_pattern_allow([^HAVE_DEV_URANDOM$]) -m4trace:configure.in:266: -1- AC_DEFINE_TRACE_LITERAL([RADIUS_116]) -m4trace:configure.in:266: -1- m4_pattern_allow([^RADIUS_116$]) -m4trace:configure.in:284: -1- AC_DEFINE_TRACE_LITERAL([SCP]) -m4trace:configure.in:284: -1- m4_pattern_allow([^SCP$]) -m4trace:configure.in:295: -1- AC_SUBST([RC_SECURE_PATH]) -m4trace:configure.in:295: -1- AC_SUBST_TRACE([RC_SECURE_PATH]) -m4trace:configure.in:295: -1- m4_pattern_allow([^RC_SECURE_PATH$]) -m4trace:configure.in:296: -1- AC_SUBST([RC_LOG_FACILITY]) -m4trace:configure.in:296: -1- AC_SUBST_TRACE([RC_LOG_FACILITY]) -m4trace:configure.in:296: -1- m4_pattern_allow([^RC_LOG_FACILITY$]) -m4trace:configure.in:298: -1- AH_OUTPUT([BIG_ENDIAN], [/* is big endian arch ? */ -#undef BIG_ENDIAN]) -m4trace:configure.in:300: -1- AH_OUTPUT([LITTLE_ENDIAN], [/* is little endian arch ? */ -#undef LITTLE_ENDIAN]) -m4trace:configure.in:302: -1- AH_OUTPUT([HAVE_DEV_URANDOM], [/* does /dev/urandom exist ? */ -#undef HAVE_DEV_URANDOM]) -m4trace:configure.in:304: -1- AH_OUTPUT([HAVE_SHADOW_PASSWORDS], [/* shadow password support */ -#undef HAVE_SHADOW_PASSWORDS]) -m4trace:configure.in:306: -1- AH_OUTPUT([HAVE_STRUCT_UTSNAME_DOMAINNAME], [/*struct utsname has domainname field */ -#undef HAVE_STRUCT_UTSNAME_DOMAINNAME]) -m4trace:configure.in:308: -1- AH_OUTPUT([NEED_SIG_PROTOTYPES], [/* do you need the sig* prototypes ? */ -#undef NEED_SIG_PROTOTYPES]) -m4trace:configure.in:310: -1- AH_OUTPUT([RADIUS_116], [/* include code to kludge aroung Livingston RADIUS server 1.16 */ -#undef RADIUS_116]) -m4trace:configure.in:312: -1- AH_OUTPUT([SCP], [/* SCP support */ -#undef SCP]) -m4trace:configure.in:314: -1- AH_OUTPUT([PACKAGE], [ -#undef PACKAGE]) -m4trace:configure.in:316: -1- AH_OUTPUT([VERSION], [ -#undef VERSION]) -m4trace:configure.in:319: -1- _m4_warn([obsolete], [The macro `AM_CONFIG_HEADER' is obsolete. -You should run autoupdate.], [aclocal.m4:8385: AM_CONFIG_HEADER is expanded from... -configure.in:319: the top level]) -m4trace:configure.in:319: -1- AC_CONFIG_HEADERS([config.h]) -m4trace:configure.in:322: -1- AC_CONFIG_FILES([ -Makefile -include/Makefile lib/Makefile src/Makefile man/Makefile etc/Makefile -doc/Makefile patches/Makefile -login.radius/Makefile login.radius/migs/Makefile -rpm/Makefile -debian/Makefile -]) -m4trace:configure.in:331: -1- AC_SUBST([LIB@&t@OBJS], [$ac_libobjs]) -m4trace:configure.in:331: -1- AC_SUBST_TRACE([LIB@&t@OBJS]) -m4trace:configure.in:331: -1- m4_pattern_allow([^LIB@&t@OBJS$]) -m4trace:configure.in:331: -1- AC_SUBST([LTLIBOBJS], [$ac_ltlibobjs]) -m4trace:configure.in:331: -1- AC_SUBST_TRACE([LTLIBOBJS]) -m4trace:configure.in:331: -1- m4_pattern_allow([^LTLIBOBJS$]) -m4trace:configure.in:331: -1- AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"]) -m4trace:configure.in:331: -1- AC_SUBST([am__EXEEXT_TRUE]) -m4trace:configure.in:331: -1- AC_SUBST_TRACE([am__EXEEXT_TRUE]) -m4trace:configure.in:331: -1- m4_pattern_allow([^am__EXEEXT_TRUE$]) -m4trace:configure.in:331: -1- AC_SUBST([am__EXEEXT_FALSE]) -m4trace:configure.in:331: -1- AC_SUBST_TRACE([am__EXEEXT_FALSE]) -m4trace:configure.in:331: -1- m4_pattern_allow([^am__EXEEXT_FALSE$]) -m4trace:configure.in:331: -1- _AM_SUBST_NOTMAKE([am__EXEEXT_TRUE]) -m4trace:configure.in:331: -1- _AM_SUBST_NOTMAKE([am__EXEEXT_FALSE]) -m4trace:configure.in:331: -1- AC_SUBST_TRACE([top_builddir]) -m4trace:configure.in:331: -1- AC_SUBST_TRACE([top_build_prefix]) -m4trace:configure.in:331: -1- AC_SUBST_TRACE([srcdir]) -m4trace:configure.in:331: -1- AC_SUBST_TRACE([abs_srcdir]) -m4trace:configure.in:331: -1- AC_SUBST_TRACE([top_srcdir]) -m4trace:configure.in:331: -1- AC_SUBST_TRACE([abs_top_srcdir]) -m4trace:configure.in:331: -1- AC_SUBST_TRACE([builddir]) -m4trace:configure.in:331: -1- AC_SUBST_TRACE([abs_builddir]) -m4trace:configure.in:331: -1- AC_SUBST_TRACE([abs_top_builddir]) -m4trace:configure.in:331: -1- AC_SUBST_TRACE([INSTALL]) -m4trace:configure.in:331: -1- AC_SUBST_TRACE([MKDIR_P]) -m4trace:configure.in:331: -1- AC_REQUIRE_AUX_FILE([ltmain.sh]) diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/config.guess b/openair3/PMIPv6/freeradius-client-1.1.6/config.guess deleted file mode 100755 index e3a2116a7d..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/config.guess +++ /dev/null @@ -1,1533 +0,0 @@ -#! /bin/sh -# Attempt to guess a canonical system name. -# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, -# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 -# Free Software Foundation, Inc. - -timestamp='2009-06-10' - -# This file is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA -# 02110-1301, USA. -# -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - - -# Originally written by Per Bothner . -# Please send patches to . Submit a context -# diff and a properly formatted ChangeLog entry. -# -# This script attempts to guess a canonical system name similar to -# config.sub. If it succeeds, it prints the system name on stdout, and -# exits with 0. Otherwise, it exits with 1. -# -# The plan is that this can be called by configure scripts if you -# don't specify an explicit build system type. - -me=`echo "$0" | sed -e 's,.*/,,'` - -usage="\ -Usage: $0 [OPTION] - -Output the configuration name of the system \`$me' is run on. - -Operation modes: - -h, --help print this help, then exit - -t, --time-stamp print date of last modification, then exit - -v, --version print version number, then exit - -Report bugs and patches to ." - -version="\ -GNU config.guess ($timestamp) - -Originally written by Per Bothner. -Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, -2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. - -This is free software; see the source for copying conditions. There is NO -warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." - -help=" -Try \`$me --help' for more information." - -# Parse command line -while test $# -gt 0 ; do - case $1 in - --time-stamp | --time* | -t ) - echo "$timestamp" ; exit ;; - --version | -v ) - echo "$version" ; exit ;; - --help | --h* | -h ) - echo "$usage"; exit ;; - -- ) # Stop option processing - shift; break ;; - - ) # Use stdin as input. - break ;; - -* ) - echo "$me: invalid option $1$help" >&2 - exit 1 ;; - * ) - break ;; - esac -done - -if test $# != 0; then - echo "$me: too many arguments$help" >&2 - exit 1 -fi - -trap 'exit 1' 1 2 15 - -# CC_FOR_BUILD -- compiler used by this script. Note that the use of a -# compiler to aid in system detection is discouraged as it requires -# temporary files to be created and, as you can see below, it is a -# headache to deal with in a portable fashion. - -# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still -# use `HOST_CC' if defined, but it is deprecated. - -# Portable tmp directory creation inspired by the Autoconf team. - -set_cc_for_build=' -trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; -trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; -: ${TMPDIR=/tmp} ; - { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || - { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || - { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || - { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; -dummy=$tmp/dummy ; -tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; -case $CC_FOR_BUILD,$HOST_CC,$CC in - ,,) echo "int x;" > $dummy.c ; - for c in cc gcc c89 c99 ; do - if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then - CC_FOR_BUILD="$c"; break ; - fi ; - done ; - if test x"$CC_FOR_BUILD" = x ; then - CC_FOR_BUILD=no_compiler_found ; - fi - ;; - ,,*) CC_FOR_BUILD=$CC ;; - ,*,*) CC_FOR_BUILD=$HOST_CC ;; -esac ; set_cc_for_build= ;' - -# This is needed to find uname on a Pyramid OSx when run in the BSD universe. -# (ghazi@noc.rutgers.edu 1994-08-24) -if (test -f /.attbin/uname) >/dev/null 2>&1 ; then - PATH=$PATH:/.attbin ; export PATH -fi - -UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown -UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown -UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown -UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown - -# Note: order is significant - the case branches are not exclusive. - -case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in - *:NetBSD:*:*) - # NetBSD (nbsd) targets should (where applicable) match one or - # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, - # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently - # switched to ELF, *-*-netbsd* would select the old - # object file format. This provides both forward - # compatibility and a consistent mechanism for selecting the - # object file format. - # - # Note: NetBSD doesn't particularly care about the vendor - # portion of the name. We always set it to "unknown". - sysctl="sysctl -n hw.machine_arch" - UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ - /usr/sbin/$sysctl 2>/dev/null || echo unknown)` - case "${UNAME_MACHINE_ARCH}" in - armeb) machine=armeb-unknown ;; - arm*) machine=arm-unknown ;; - sh3el) machine=shl-unknown ;; - sh3eb) machine=sh-unknown ;; - sh5el) machine=sh5le-unknown ;; - *) machine=${UNAME_MACHINE_ARCH}-unknown ;; - esac - # The Operating System including object format, if it has switched - # to ELF recently, or will in the future. - case "${UNAME_MACHINE_ARCH}" in - arm*|i386|m68k|ns32k|sh3*|sparc|vax) - eval $set_cc_for_build - if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ - | grep -q __ELF__ - then - # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). - # Return netbsd for either. FIX? - os=netbsd - else - os=netbsdelf - fi - ;; - *) - os=netbsd - ;; - esac - # The OS release - # Debian GNU/NetBSD machines have a different userland, and - # thus, need a distinct triplet. However, they do not need - # kernel version information, so it can be replaced with a - # suitable tag, in the style of linux-gnu. - case "${UNAME_VERSION}" in - Debian*) - release='-gnu' - ;; - *) - release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` - ;; - esac - # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: - # contains redundant information, the shorter form: - # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. - echo "${machine}-${os}${release}" - exit ;; - *:OpenBSD:*:*) - UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` - echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} - exit ;; - *:ekkoBSD:*:*) - echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} - exit ;; - *:SolidBSD:*:*) - echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} - exit ;; - macppc:MirBSD:*:*) - echo powerpc-unknown-mirbsd${UNAME_RELEASE} - exit ;; - *:MirBSD:*:*) - echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} - exit ;; - alpha:OSF1:*:*) - case $UNAME_RELEASE in - *4.0) - UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` - ;; - *5.*) - UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` - ;; - esac - # According to Compaq, /usr/sbin/psrinfo has been available on - # OSF/1 and Tru64 systems produced since 1995. I hope that - # covers most systems running today. This code pipes the CPU - # types through head -n 1, so we only detect the type of CPU 0. - ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` - case "$ALPHA_CPU_TYPE" in - "EV4 (21064)") - UNAME_MACHINE="alpha" ;; - "EV4.5 (21064)") - UNAME_MACHINE="alpha" ;; - "LCA4 (21066/21068)") - UNAME_MACHINE="alpha" ;; - "EV5 (21164)") - UNAME_MACHINE="alphaev5" ;; - "EV5.6 (21164A)") - UNAME_MACHINE="alphaev56" ;; - "EV5.6 (21164PC)") - UNAME_MACHINE="alphapca56" ;; - "EV5.7 (21164PC)") - UNAME_MACHINE="alphapca57" ;; - "EV6 (21264)") - UNAME_MACHINE="alphaev6" ;; - "EV6.7 (21264A)") - UNAME_MACHINE="alphaev67" ;; - "EV6.8CB (21264C)") - UNAME_MACHINE="alphaev68" ;; - "EV6.8AL (21264B)") - UNAME_MACHINE="alphaev68" ;; - "EV6.8CX (21264D)") - UNAME_MACHINE="alphaev68" ;; - "EV6.9A (21264/EV69A)") - UNAME_MACHINE="alphaev69" ;; - "EV7 (21364)") - UNAME_MACHINE="alphaev7" ;; - "EV7.9 (21364A)") - UNAME_MACHINE="alphaev79" ;; - esac - # A Pn.n version is a patched version. - # A Vn.n version is a released version. - # A Tn.n version is a released field test version. - # A Xn.n version is an unreleased experimental baselevel. - # 1.2 uses "1.2" for uname -r. - echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` - exit ;; - Alpha\ *:Windows_NT*:*) - # How do we know it's Interix rather than the generic POSIX subsystem? - # Should we change UNAME_MACHINE based on the output of uname instead - # of the specific Alpha model? - echo alpha-pc-interix - exit ;; - 21064:Windows_NT:50:3) - echo alpha-dec-winnt3.5 - exit ;; - Amiga*:UNIX_System_V:4.0:*) - echo m68k-unknown-sysv4 - exit ;; - *:[Aa]miga[Oo][Ss]:*:*) - echo ${UNAME_MACHINE}-unknown-amigaos - exit ;; - *:[Mm]orph[Oo][Ss]:*:*) - echo ${UNAME_MACHINE}-unknown-morphos - exit ;; - *:OS/390:*:*) - echo i370-ibm-openedition - exit ;; - *:z/VM:*:*) - echo s390-ibm-zvmoe - exit ;; - *:OS400:*:*) - echo powerpc-ibm-os400 - exit ;; - arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) - echo arm-acorn-riscix${UNAME_RELEASE} - exit ;; - arm:riscos:*:*|arm:RISCOS:*:*) - echo arm-unknown-riscos - exit ;; - SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) - echo hppa1.1-hitachi-hiuxmpp - exit ;; - Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) - # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. - if test "`(/bin/universe) 2>/dev/null`" = att ; then - echo pyramid-pyramid-sysv3 - else - echo pyramid-pyramid-bsd - fi - exit ;; - NILE*:*:*:dcosx) - echo pyramid-pyramid-svr4 - exit ;; - DRS?6000:unix:4.0:6*) - echo sparc-icl-nx6 - exit ;; - DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) - case `/usr/bin/uname -p` in - sparc) echo sparc-icl-nx7; exit ;; - esac ;; - s390x:SunOS:*:*) - echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - sun4H:SunOS:5.*:*) - echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) - echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) - eval $set_cc_for_build - SUN_ARCH="i386" - # If there is a compiler, see if it is configured for 64-bit objects. - # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. - # This test works for both compilers. - if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then - if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ - (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ - grep IS_64BIT_ARCH >/dev/null - then - SUN_ARCH="x86_64" - fi - fi - echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - sun4*:SunOS:6*:*) - # According to config.sub, this is the proper way to canonicalize - # SunOS6. Hard to guess exactly what SunOS6 will be like, but - # it's likely to be more like Solaris than SunOS4. - echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - sun4*:SunOS:*:*) - case "`/usr/bin/arch -k`" in - Series*|S4*) - UNAME_RELEASE=`uname -v` - ;; - esac - # Japanese Language versions have a version number like `4.1.3-JL'. - echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` - exit ;; - sun3*:SunOS:*:*) - echo m68k-sun-sunos${UNAME_RELEASE} - exit ;; - sun*:*:4.2BSD:*) - UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` - test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 - case "`/bin/arch`" in - sun3) - echo m68k-sun-sunos${UNAME_RELEASE} - ;; - sun4) - echo sparc-sun-sunos${UNAME_RELEASE} - ;; - esac - exit ;; - aushp:SunOS:*:*) - echo sparc-auspex-sunos${UNAME_RELEASE} - exit ;; - # The situation for MiNT is a little confusing. The machine name - # can be virtually everything (everything which is not - # "atarist" or "atariste" at least should have a processor - # > m68000). The system name ranges from "MiNT" over "FreeMiNT" - # to the lowercase version "mint" (or "freemint"). Finally - # the system name "TOS" denotes a system which is actually not - # MiNT. But MiNT is downward compatible to TOS, so this should - # be no problem. - atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} - exit ;; - atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} - exit ;; - *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} - exit ;; - milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) - echo m68k-milan-mint${UNAME_RELEASE} - exit ;; - hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) - echo m68k-hades-mint${UNAME_RELEASE} - exit ;; - *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) - echo m68k-unknown-mint${UNAME_RELEASE} - exit ;; - m68k:machten:*:*) - echo m68k-apple-machten${UNAME_RELEASE} - exit ;; - powerpc:machten:*:*) - echo powerpc-apple-machten${UNAME_RELEASE} - exit ;; - RISC*:Mach:*:*) - echo mips-dec-mach_bsd4.3 - exit ;; - RISC*:ULTRIX:*:*) - echo mips-dec-ultrix${UNAME_RELEASE} - exit ;; - VAX*:ULTRIX*:*:*) - echo vax-dec-ultrix${UNAME_RELEASE} - exit ;; - 2020:CLIX:*:* | 2430:CLIX:*:*) - echo clipper-intergraph-clix${UNAME_RELEASE} - exit ;; - mips:*:*:UMIPS | mips:*:*:RISCos) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c -#ifdef __cplusplus -#include /* for printf() prototype */ - int main (int argc, char *argv[]) { -#else - int main (argc, argv) int argc; char *argv[]; { -#endif - #if defined (host_mips) && defined (MIPSEB) - #if defined (SYSTYPE_SYSV) - printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); - #endif - #if defined (SYSTYPE_SVR4) - printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); - #endif - #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) - printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); - #endif - #endif - exit (-1); - } -EOF - $CC_FOR_BUILD -o $dummy $dummy.c && - dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && - SYSTEM_NAME=`$dummy $dummyarg` && - { echo "$SYSTEM_NAME"; exit; } - echo mips-mips-riscos${UNAME_RELEASE} - exit ;; - Motorola:PowerMAX_OS:*:*) - echo powerpc-motorola-powermax - exit ;; - Motorola:*:4.3:PL8-*) - echo powerpc-harris-powermax - exit ;; - Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) - echo powerpc-harris-powermax - exit ;; - Night_Hawk:Power_UNIX:*:*) - echo powerpc-harris-powerunix - exit ;; - m88k:CX/UX:7*:*) - echo m88k-harris-cxux7 - exit ;; - m88k:*:4*:R4*) - echo m88k-motorola-sysv4 - exit ;; - m88k:*:3*:R3*) - echo m88k-motorola-sysv3 - exit ;; - AViiON:dgux:*:*) - # DG/UX returns AViiON for all architectures - UNAME_PROCESSOR=`/usr/bin/uname -p` - if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] - then - if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ - [ ${TARGET_BINARY_INTERFACE}x = x ] - then - echo m88k-dg-dgux${UNAME_RELEASE} - else - echo m88k-dg-dguxbcs${UNAME_RELEASE} - fi - else - echo i586-dg-dgux${UNAME_RELEASE} - fi - exit ;; - M88*:DolphinOS:*:*) # DolphinOS (SVR3) - echo m88k-dolphin-sysv3 - exit ;; - M88*:*:R3*:*) - # Delta 88k system running SVR3 - echo m88k-motorola-sysv3 - exit ;; - XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) - echo m88k-tektronix-sysv3 - exit ;; - Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) - echo m68k-tektronix-bsd - exit ;; - *:IRIX*:*:*) - echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` - exit ;; - ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. - echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id - exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' - i*86:AIX:*:*) - echo i386-ibm-aix - exit ;; - ia64:AIX:*:*) - if [ -x /usr/bin/oslevel ] ; then - IBM_REV=`/usr/bin/oslevel` - else - IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} - fi - echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} - exit ;; - *:AIX:2:3) - if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #include - - main() - { - if (!__power_pc()) - exit(1); - puts("powerpc-ibm-aix3.2.5"); - exit(0); - } -EOF - if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` - then - echo "$SYSTEM_NAME" - else - echo rs6000-ibm-aix3.2.5 - fi - elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then - echo rs6000-ibm-aix3.2.4 - else - echo rs6000-ibm-aix3.2 - fi - exit ;; - *:AIX:*:[456]) - IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` - if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then - IBM_ARCH=rs6000 - else - IBM_ARCH=powerpc - fi - if [ -x /usr/bin/oslevel ] ; then - IBM_REV=`/usr/bin/oslevel` - else - IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} - fi - echo ${IBM_ARCH}-ibm-aix${IBM_REV} - exit ;; - *:AIX:*:*) - echo rs6000-ibm-aix - exit ;; - ibmrt:4.4BSD:*|romp-ibm:BSD:*) - echo romp-ibm-bsd4.4 - exit ;; - ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and - echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to - exit ;; # report: romp-ibm BSD 4.3 - *:BOSX:*:*) - echo rs6000-bull-bosx - exit ;; - DPX/2?00:B.O.S.:*:*) - echo m68k-bull-sysv3 - exit ;; - 9000/[34]??:4.3bsd:1.*:*) - echo m68k-hp-bsd - exit ;; - hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) - echo m68k-hp-bsd4.4 - exit ;; - 9000/[34678]??:HP-UX:*:*) - HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` - case "${UNAME_MACHINE}" in - 9000/31? ) HP_ARCH=m68000 ;; - 9000/[34]?? ) HP_ARCH=m68k ;; - 9000/[678][0-9][0-9]) - if [ -x /usr/bin/getconf ]; then - sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` - sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` - case "${sc_cpu_version}" in - 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 - 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 - 532) # CPU_PA_RISC2_0 - case "${sc_kernel_bits}" in - 32) HP_ARCH="hppa2.0n" ;; - 64) HP_ARCH="hppa2.0w" ;; - '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 - esac ;; - esac - fi - if [ "${HP_ARCH}" = "" ]; then - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - - #define _HPUX_SOURCE - #include - #include - - int main () - { - #if defined(_SC_KERNEL_BITS) - long bits = sysconf(_SC_KERNEL_BITS); - #endif - long cpu = sysconf (_SC_CPU_VERSION); - - switch (cpu) - { - case CPU_PA_RISC1_0: puts ("hppa1.0"); break; - case CPU_PA_RISC1_1: puts ("hppa1.1"); break; - case CPU_PA_RISC2_0: - #if defined(_SC_KERNEL_BITS) - switch (bits) - { - case 64: puts ("hppa2.0w"); break; - case 32: puts ("hppa2.0n"); break; - default: puts ("hppa2.0"); break; - } break; - #else /* !defined(_SC_KERNEL_BITS) */ - puts ("hppa2.0"); break; - #endif - default: puts ("hppa1.0"); break; - } - exit (0); - } -EOF - (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` - test -z "$HP_ARCH" && HP_ARCH=hppa - fi ;; - esac - if [ ${HP_ARCH} = "hppa2.0w" ] - then - eval $set_cc_for_build - - # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating - # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler - # generating 64-bit code. GNU and HP use different nomenclature: - # - # $ CC_FOR_BUILD=cc ./config.guess - # => hppa2.0w-hp-hpux11.23 - # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess - # => hppa64-hp-hpux11.23 - - if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | - grep -q __LP64__ - then - HP_ARCH="hppa2.0w" - else - HP_ARCH="hppa64" - fi - fi - echo ${HP_ARCH}-hp-hpux${HPUX_REV} - exit ;; - ia64:HP-UX:*:*) - HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` - echo ia64-hp-hpux${HPUX_REV} - exit ;; - 3050*:HI-UX:*:*) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #include - int - main () - { - long cpu = sysconf (_SC_CPU_VERSION); - /* The order matters, because CPU_IS_HP_MC68K erroneously returns - true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct - results, however. */ - if (CPU_IS_PA_RISC (cpu)) - { - switch (cpu) - { - case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; - case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; - case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; - default: puts ("hppa-hitachi-hiuxwe2"); break; - } - } - else if (CPU_IS_HP_MC68K (cpu)) - puts ("m68k-hitachi-hiuxwe2"); - else puts ("unknown-hitachi-hiuxwe2"); - exit (0); - } -EOF - $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && - { echo "$SYSTEM_NAME"; exit; } - echo unknown-hitachi-hiuxwe2 - exit ;; - 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) - echo hppa1.1-hp-bsd - exit ;; - 9000/8??:4.3bsd:*:*) - echo hppa1.0-hp-bsd - exit ;; - *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) - echo hppa1.0-hp-mpeix - exit ;; - hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) - echo hppa1.1-hp-osf - exit ;; - hp8??:OSF1:*:*) - echo hppa1.0-hp-osf - exit ;; - i*86:OSF1:*:*) - if [ -x /usr/sbin/sysversion ] ; then - echo ${UNAME_MACHINE}-unknown-osf1mk - else - echo ${UNAME_MACHINE}-unknown-osf1 - fi - exit ;; - parisc*:Lites*:*:*) - echo hppa1.1-hp-lites - exit ;; - C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) - echo c1-convex-bsd - exit ;; - C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) - if getsysinfo -f scalar_acc - then echo c32-convex-bsd - else echo c2-convex-bsd - fi - exit ;; - C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) - echo c34-convex-bsd - exit ;; - C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) - echo c38-convex-bsd - exit ;; - C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) - echo c4-convex-bsd - exit ;; - CRAY*Y-MP:*:*:*) - echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - CRAY*[A-Z]90:*:*:*) - echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ - | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ - -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ - -e 's/\.[^.]*$/.X/' - exit ;; - CRAY*TS:*:*:*) - echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - CRAY*T3E:*:*:*) - echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - CRAY*SV1:*:*:*) - echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - *:UNICOS/mp:*:*) - echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) - FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` - FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` - FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` - echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" - exit ;; - 5000:UNIX_System_V:4.*:*) - FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` - FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` - echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" - exit ;; - i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) - echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} - exit ;; - sparc*:BSD/OS:*:*) - echo sparc-unknown-bsdi${UNAME_RELEASE} - exit ;; - *:BSD/OS:*:*) - echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} - exit ;; - *:FreeBSD:*:*) - case ${UNAME_MACHINE} in - pc98) - echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; - amd64) - echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; - *) - echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; - esac - exit ;; - i*:CYGWIN*:*) - echo ${UNAME_MACHINE}-pc-cygwin - exit ;; - *:MINGW*:*) - echo ${UNAME_MACHINE}-pc-mingw32 - exit ;; - i*:windows32*:*) - # uname -m includes "-pc" on this system. - echo ${UNAME_MACHINE}-mingw32 - exit ;; - i*:PW*:*) - echo ${UNAME_MACHINE}-pc-pw32 - exit ;; - *:Interix*:[3456]*) - case ${UNAME_MACHINE} in - x86) - echo i586-pc-interix${UNAME_RELEASE} - exit ;; - EM64T | authenticamd | genuineintel) - echo x86_64-unknown-interix${UNAME_RELEASE} - exit ;; - IA64) - echo ia64-unknown-interix${UNAME_RELEASE} - exit ;; - esac ;; - [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) - echo i${UNAME_MACHINE}-pc-mks - exit ;; - 8664:Windows_NT:*) - echo x86_64-pc-mks - exit ;; - i*:Windows_NT*:* | Pentium*:Windows_NT*:*) - # How do we know it's Interix rather than the generic POSIX subsystem? - # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we - # UNAME_MACHINE based on the output of uname instead of i386? - echo i586-pc-interix - exit ;; - i*:UWIN*:*) - echo ${UNAME_MACHINE}-pc-uwin - exit ;; - amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) - echo x86_64-unknown-cygwin - exit ;; - p*:CYGWIN*:*) - echo powerpcle-unknown-cygwin - exit ;; - prep*:SunOS:5.*:*) - echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - *:GNU:*:*) - # the GNU system - echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` - exit ;; - *:GNU/*:*:*) - # other systems with GNU libc and userland - echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu - exit ;; - i*86:Minix:*:*) - echo ${UNAME_MACHINE}-pc-minix - exit ;; - arm*:Linux:*:*) - eval $set_cc_for_build - if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ - | grep -q __ARM_EABI__ - then - echo ${UNAME_MACHINE}-unknown-linux-gnu - else - echo ${UNAME_MACHINE}-unknown-linux-gnueabi - fi - exit ;; - avr32*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - cris:Linux:*:*) - echo cris-axis-linux-gnu - exit ;; - crisv32:Linux:*:*) - echo crisv32-axis-linux-gnu - exit ;; - frv:Linux:*:*) - echo frv-unknown-linux-gnu - exit ;; - ia64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - m32r*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - m68*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - mips:Linux:*:* | mips64:Linux:*:*) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #undef CPU - #undef ${UNAME_MACHINE} - #undef ${UNAME_MACHINE}el - #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) - CPU=${UNAME_MACHINE}el - #else - #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) - CPU=${UNAME_MACHINE} - #else - CPU= - #endif - #endif -EOF - eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' - /^CPU/{ - s: ::g - p - }'`" - test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } - ;; - or32:Linux:*:*) - echo or32-unknown-linux-gnu - exit ;; - ppc:Linux:*:*) - echo powerpc-unknown-linux-gnu - exit ;; - ppc64:Linux:*:*) - echo powerpc64-unknown-linux-gnu - exit ;; - alpha:Linux:*:*) - case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in - EV5) UNAME_MACHINE=alphaev5 ;; - EV56) UNAME_MACHINE=alphaev56 ;; - PCA56) UNAME_MACHINE=alphapca56 ;; - PCA57) UNAME_MACHINE=alphapca56 ;; - EV6) UNAME_MACHINE=alphaev6 ;; - EV67) UNAME_MACHINE=alphaev67 ;; - EV68*) UNAME_MACHINE=alphaev68 ;; - esac - objdump --private-headers /bin/sh | grep -q ld.so.1 - if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi - echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} - exit ;; - padre:Linux:*:*) - echo sparc-unknown-linux-gnu - exit ;; - parisc:Linux:*:* | hppa:Linux:*:*) - # Look for CPU level - case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in - PA7*) echo hppa1.1-unknown-linux-gnu ;; - PA8*) echo hppa2.0-unknown-linux-gnu ;; - *) echo hppa-unknown-linux-gnu ;; - esac - exit ;; - parisc64:Linux:*:* | hppa64:Linux:*:*) - echo hppa64-unknown-linux-gnu - exit ;; - s390:Linux:*:* | s390x:Linux:*:*) - echo ${UNAME_MACHINE}-ibm-linux - exit ;; - sh64*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - sh*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - sparc:Linux:*:* | sparc64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - vax:Linux:*:*) - echo ${UNAME_MACHINE}-dec-linux-gnu - exit ;; - x86_64:Linux:*:*) - echo x86_64-unknown-linux-gnu - exit ;; - xtensa*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - i*86:Linux:*:*) - # The BFD linker knows what the default object file format is, so - # first see if it will tell us. cd to the root directory to prevent - # problems with other programs or directories called `ld' in the path. - # Set LC_ALL=C to ensure ld outputs messages in English. - ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \ - | sed -ne '/supported targets:/!d - s/[ ][ ]*/ /g - s/.*supported targets: *// - s/ .*// - p'` - case "$ld_supported_targets" in - elf32-i386) - TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" - ;; - esac - # Determine whether the default compiler is a.out or elf - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #include - #ifdef __ELF__ - # ifdef __GLIBC__ - # if __GLIBC__ >= 2 - LIBC=gnu - # else - LIBC=gnulibc1 - # endif - # else - LIBC=gnulibc1 - # endif - #else - #if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__SUNPRO_C) || defined(__SUNPRO_CC) - LIBC=gnu - #else - LIBC=gnuaout - #endif - #endif - #ifdef __dietlibc__ - LIBC=dietlibc - #endif -EOF - eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' - /^LIBC/{ - s: ::g - p - }'`" - test x"${LIBC}" != x && { - echo "${UNAME_MACHINE}-pc-linux-${LIBC}" - exit - } - test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; } - ;; - i*86:DYNIX/ptx:4*:*) - # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. - # earlier versions are messed up and put the nodename in both - # sysname and nodename. - echo i386-sequent-sysv4 - exit ;; - i*86:UNIX_SV:4.2MP:2.*) - # Unixware is an offshoot of SVR4, but it has its own version - # number series starting with 2... - # I am not positive that other SVR4 systems won't match this, - # I just have to hope. -- rms. - # Use sysv4.2uw... so that sysv4* matches it. - echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} - exit ;; - i*86:OS/2:*:*) - # If we were able to find `uname', then EMX Unix compatibility - # is probably installed. - echo ${UNAME_MACHINE}-pc-os2-emx - exit ;; - i*86:XTS-300:*:STOP) - echo ${UNAME_MACHINE}-unknown-stop - exit ;; - i*86:atheos:*:*) - echo ${UNAME_MACHINE}-unknown-atheos - exit ;; - i*86:syllable:*:*) - echo ${UNAME_MACHINE}-pc-syllable - exit ;; - i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) - echo i386-unknown-lynxos${UNAME_RELEASE} - exit ;; - i*86:*DOS:*:*) - echo ${UNAME_MACHINE}-pc-msdosdjgpp - exit ;; - i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) - UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` - if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then - echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} - else - echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} - fi - exit ;; - i*86:*:5:[678]*) - # UnixWare 7.x, OpenUNIX and OpenServer 6. - case `/bin/uname -X | grep "^Machine"` in - *486*) UNAME_MACHINE=i486 ;; - *Pentium) UNAME_MACHINE=i586 ;; - *Pent*|*Celeron) UNAME_MACHINE=i686 ;; - esac - echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} - exit ;; - i*86:*:3.2:*) - if test -f /usr/options/cb.name; then - UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then - UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` - (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 - (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ - && UNAME_MACHINE=i586 - (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ - && UNAME_MACHINE=i686 - (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ - && UNAME_MACHINE=i686 - echo ${UNAME_MACHINE}-pc-sco$UNAME_REL - else - echo ${UNAME_MACHINE}-pc-sysv32 - fi - exit ;; - pc:*:*:*) - # Left here for compatibility: - # uname -m prints for DJGPP always 'pc', but it prints nothing about - # the processor, so we play safe by assuming i586. - # Note: whatever this is, it MUST be the same as what config.sub - # prints for the "djgpp" host, or else GDB configury will decide that - # this is a cross-build. - echo i586-pc-msdosdjgpp - exit ;; - Intel:Mach:3*:*) - echo i386-pc-mach3 - exit ;; - paragon:*:*:*) - echo i860-intel-osf1 - exit ;; - i860:*:4.*:*) # i860-SVR4 - if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then - echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 - else # Add other i860-SVR4 vendors below as they are discovered. - echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 - fi - exit ;; - mini*:CTIX:SYS*5:*) - # "miniframe" - echo m68010-convergent-sysv - exit ;; - mc68k:UNIX:SYSTEM5:3.51m) - echo m68k-convergent-sysv - exit ;; - M680?0:D-NIX:5.3:*) - echo m68k-diab-dnix - exit ;; - M68*:*:R3V[5678]*:*) - test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; - 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) - OS_REL='' - test -r /etc/.relid \ - && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` - /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && { echo i486-ncr-sysv4.3${OS_REL}; exit; } - /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ - && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; - 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) - /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && { echo i486-ncr-sysv4; exit; } ;; - NCR*:*:4.2:* | MPRAS*:*:4.2:*) - OS_REL='.3' - test -r /etc/.relid \ - && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` - /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && { echo i486-ncr-sysv4.3${OS_REL}; exit; } - /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ - && { echo i586-ncr-sysv4.3${OS_REL}; exit; } - /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ - && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; - m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) - echo m68k-unknown-lynxos${UNAME_RELEASE} - exit ;; - mc68030:UNIX_System_V:4.*:*) - echo m68k-atari-sysv4 - exit ;; - TSUNAMI:LynxOS:2.*:*) - echo sparc-unknown-lynxos${UNAME_RELEASE} - exit ;; - rs6000:LynxOS:2.*:*) - echo rs6000-unknown-lynxos${UNAME_RELEASE} - exit ;; - PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) - echo powerpc-unknown-lynxos${UNAME_RELEASE} - exit ;; - SM[BE]S:UNIX_SV:*:*) - echo mips-dde-sysv${UNAME_RELEASE} - exit ;; - RM*:ReliantUNIX-*:*:*) - echo mips-sni-sysv4 - exit ;; - RM*:SINIX-*:*:*) - echo mips-sni-sysv4 - exit ;; - *:SINIX-*:*:*) - if uname -p 2>/dev/null >/dev/null ; then - UNAME_MACHINE=`(uname -p) 2>/dev/null` - echo ${UNAME_MACHINE}-sni-sysv4 - else - echo ns32k-sni-sysv - fi - exit ;; - PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort - # says - echo i586-unisys-sysv4 - exit ;; - *:UNIX_System_V:4*:FTX*) - # From Gerald Hewes . - # How about differentiating between stratus architectures? -djm - echo hppa1.1-stratus-sysv4 - exit ;; - *:*:*:FTX*) - # From seanf@swdc.stratus.com. - echo i860-stratus-sysv4 - exit ;; - i*86:VOS:*:*) - # From Paul.Green@stratus.com. - echo ${UNAME_MACHINE}-stratus-vos - exit ;; - *:VOS:*:*) - # From Paul.Green@stratus.com. - echo hppa1.1-stratus-vos - exit ;; - mc68*:A/UX:*:*) - echo m68k-apple-aux${UNAME_RELEASE} - exit ;; - news*:NEWS-OS:6*:*) - echo mips-sony-newsos6 - exit ;; - R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) - if [ -d /usr/nec ]; then - echo mips-nec-sysv${UNAME_RELEASE} - else - echo mips-unknown-sysv${UNAME_RELEASE} - fi - exit ;; - BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. - echo powerpc-be-beos - exit ;; - BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. - echo powerpc-apple-beos - exit ;; - BePC:BeOS:*:*) # BeOS running on Intel PC compatible. - echo i586-pc-beos - exit ;; - BePC:Haiku:*:*) # Haiku running on Intel PC compatible. - echo i586-pc-haiku - exit ;; - SX-4:SUPER-UX:*:*) - echo sx4-nec-superux${UNAME_RELEASE} - exit ;; - SX-5:SUPER-UX:*:*) - echo sx5-nec-superux${UNAME_RELEASE} - exit ;; - SX-6:SUPER-UX:*:*) - echo sx6-nec-superux${UNAME_RELEASE} - exit ;; - SX-7:SUPER-UX:*:*) - echo sx7-nec-superux${UNAME_RELEASE} - exit ;; - SX-8:SUPER-UX:*:*) - echo sx8-nec-superux${UNAME_RELEASE} - exit ;; - SX-8R:SUPER-UX:*:*) - echo sx8r-nec-superux${UNAME_RELEASE} - exit ;; - Power*:Rhapsody:*:*) - echo powerpc-apple-rhapsody${UNAME_RELEASE} - exit ;; - *:Rhapsody:*:*) - echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} - exit ;; - *:Darwin:*:*) - UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown - case $UNAME_PROCESSOR in - unknown) UNAME_PROCESSOR=powerpc ;; - esac - echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} - exit ;; - *:procnto*:*:* | *:QNX:[0123456789]*:*) - UNAME_PROCESSOR=`uname -p` - if test "$UNAME_PROCESSOR" = "x86"; then - UNAME_PROCESSOR=i386 - UNAME_MACHINE=pc - fi - echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} - exit ;; - *:QNX:*:4*) - echo i386-pc-qnx - exit ;; - NSE-?:NONSTOP_KERNEL:*:*) - echo nse-tandem-nsk${UNAME_RELEASE} - exit ;; - NSR-?:NONSTOP_KERNEL:*:*) - echo nsr-tandem-nsk${UNAME_RELEASE} - exit ;; - *:NonStop-UX:*:*) - echo mips-compaq-nonstopux - exit ;; - BS2000:POSIX*:*:*) - echo bs2000-siemens-sysv - exit ;; - DS/*:UNIX_System_V:*:*) - echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} - exit ;; - *:Plan9:*:*) - # "uname -m" is not consistent, so use $cputype instead. 386 - # is converted to i386 for consistency with other x86 - # operating systems. - if test "$cputype" = "386"; then - UNAME_MACHINE=i386 - else - UNAME_MACHINE="$cputype" - fi - echo ${UNAME_MACHINE}-unknown-plan9 - exit ;; - *:TOPS-10:*:*) - echo pdp10-unknown-tops10 - exit ;; - *:TENEX:*:*) - echo pdp10-unknown-tenex - exit ;; - KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) - echo pdp10-dec-tops20 - exit ;; - XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) - echo pdp10-xkl-tops20 - exit ;; - *:TOPS-20:*:*) - echo pdp10-unknown-tops20 - exit ;; - *:ITS:*:*) - echo pdp10-unknown-its - exit ;; - SEI:*:*:SEIUX) - echo mips-sei-seiux${UNAME_RELEASE} - exit ;; - *:DragonFly:*:*) - echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` - exit ;; - *:*VMS:*:*) - UNAME_MACHINE=`(uname -p) 2>/dev/null` - case "${UNAME_MACHINE}" in - A*) echo alpha-dec-vms ; exit ;; - I*) echo ia64-dec-vms ; exit ;; - V*) echo vax-dec-vms ; exit ;; - esac ;; - *:XENIX:*:SysV) - echo i386-pc-xenix - exit ;; - i*86:skyos:*:*) - echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' - exit ;; - i*86:rdos:*:*) - echo ${UNAME_MACHINE}-pc-rdos - exit ;; - i*86:AROS:*:*) - echo ${UNAME_MACHINE}-pc-aros - exit ;; -esac - -#echo '(No uname command or uname output not recognized.)' 1>&2 -#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 - -eval $set_cc_for_build -cat >$dummy.c < -# include -#endif -main () -{ -#if defined (sony) -#if defined (MIPSEB) - /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, - I don't know.... */ - printf ("mips-sony-bsd\n"); exit (0); -#else -#include - printf ("m68k-sony-newsos%s\n", -#ifdef NEWSOS4 - "4" -#else - "" -#endif - ); exit (0); -#endif -#endif - -#if defined (__arm) && defined (__acorn) && defined (__unix) - printf ("arm-acorn-riscix\n"); exit (0); -#endif - -#if defined (hp300) && !defined (hpux) - printf ("m68k-hp-bsd\n"); exit (0); -#endif - -#if defined (NeXT) -#if !defined (__ARCHITECTURE__) -#define __ARCHITECTURE__ "m68k" -#endif - int version; - version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; - if (version < 4) - printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); - else - printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); - exit (0); -#endif - -#if defined (MULTIMAX) || defined (n16) -#if defined (UMAXV) - printf ("ns32k-encore-sysv\n"); exit (0); -#else -#if defined (CMU) - printf ("ns32k-encore-mach\n"); exit (0); -#else - printf ("ns32k-encore-bsd\n"); exit (0); -#endif -#endif -#endif - -#if defined (__386BSD__) - printf ("i386-pc-bsd\n"); exit (0); -#endif - -#if defined (sequent) -#if defined (i386) - printf ("i386-sequent-dynix\n"); exit (0); -#endif -#if defined (ns32000) - printf ("ns32k-sequent-dynix\n"); exit (0); -#endif -#endif - -#if defined (_SEQUENT_) - struct utsname un; - - uname(&un); - - if (strncmp(un.version, "V2", 2) == 0) { - printf ("i386-sequent-ptx2\n"); exit (0); - } - if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ - printf ("i386-sequent-ptx1\n"); exit (0); - } - printf ("i386-sequent-ptx\n"); exit (0); - -#endif - -#if defined (vax) -# if !defined (ultrix) -# include -# if defined (BSD) -# if BSD == 43 - printf ("vax-dec-bsd4.3\n"); exit (0); -# else -# if BSD == 199006 - printf ("vax-dec-bsd4.3reno\n"); exit (0); -# else - printf ("vax-dec-bsd\n"); exit (0); -# endif -# endif -# else - printf ("vax-dec-bsd\n"); exit (0); -# endif -# else - printf ("vax-dec-ultrix\n"); exit (0); -# endif -#endif - -#if defined (alliant) && defined (i860) - printf ("i860-alliant-bsd\n"); exit (0); -#endif - - exit (1); -} -EOF - -$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && - { echo "$SYSTEM_NAME"; exit; } - -# Apollos put the system type in the environment. - -test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } - -# Convex versions that predate uname can use getsysinfo(1) - -if [ -x /usr/convex/getsysinfo ] -then - case `getsysinfo -f cpu_type` in - c1*) - echo c1-convex-bsd - exit ;; - c2*) - if getsysinfo -f scalar_acc - then echo c32-convex-bsd - else echo c2-convex-bsd - fi - exit ;; - c34*) - echo c34-convex-bsd - exit ;; - c38*) - echo c38-convex-bsd - exit ;; - c4*) - echo c4-convex-bsd - exit ;; - esac -fi - -cat >&2 < in order to provide the needed -information to handle your system. - -config.guess timestamp = $timestamp - -uname -m = `(uname -m) 2>/dev/null || echo unknown` -uname -r = `(uname -r) 2>/dev/null || echo unknown` -uname -s = `(uname -s) 2>/dev/null || echo unknown` -uname -v = `(uname -v) 2>/dev/null || echo unknown` - -/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` -/bin/uname -X = `(/bin/uname -X) 2>/dev/null` - -hostinfo = `(hostinfo) 2>/dev/null` -/bin/universe = `(/bin/universe) 2>/dev/null` -/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` -/bin/arch = `(/bin/arch) 2>/dev/null` -/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` -/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` - -UNAME_MACHINE = ${UNAME_MACHINE} -UNAME_RELEASE = ${UNAME_RELEASE} -UNAME_SYSTEM = ${UNAME_SYSTEM} -UNAME_VERSION = ${UNAME_VERSION} -EOF - -exit 1 - -# Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "timestamp='" -# time-stamp-format: "%:y-%02m-%02d" -# time-stamp-end: "'" -# End: diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/config.h b/openair3/PMIPv6/freeradius-client-1.1.6/config.h deleted file mode 100644 index 6f91a2ecff..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/config.h +++ /dev/null @@ -1,284 +0,0 @@ -/* config.h. Generated from config.h.in by configure. */ -/* config.h.in. Generated from configure.in by autoheader. */ - -/* Define if building universal (internal helper macro) */ -/* #undef AC_APPLE_UNIVERSAL_BUILD */ - -/* is big endian arch ? */ -/* #undef BIG_ENDIAN */ - -/* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP - systems. This function is required for `alloca.c' support on those systems. - */ -/* #undef CRAY_STACKSEG_END */ - -/* Define to 1 if using `alloca.c'. */ -/* #undef C_ALLOCA */ - -/* Define to 1 to use bsd-style gethostbyaddr_r() */ -/* #undef GETHOSTBYADDRRSTYLE_BSD */ - -/* Define to 1 to use gnu-style gethostbyaddr_r() */ -#define GETHOSTBYADDRRSTYLE_GNU /**/ - -/* Define to 1 to use sysv-style gethostbyaddr_r() */ -/* #undef GETHOSTBYADDRRSTYLE_SYSV */ - -/* Define to 1 us gethostbyaddr_r() */ -#define GETHOSTBYADDR_R 1 - -/* Define to 1 to use bsd-style gethostbyname_r() */ -/* #undef GETHOSTBYNAMERSTYLE_BSD */ - -/* Define to 1 to use gnu-style gethostbyname_r() */ -#define GETHOSTBYNAMERSTYLE_GNU /**/ - -/* Define to 1 to use sysv-style gethostbyname_r() */ -/* #undef GETHOSTBYNAMERSTYLE_SYSV */ - -/* Define to 1 to use gethostbyname_r() */ -#define GETHOSTBYNAME_R /**/ - -/* Define to 1 if you have `alloca', as a function or macro. */ -#define HAVE_ALLOCA 1 - -/* Define to 1 if you have and it should be used (not on Ultrix). - */ -#define HAVE_ALLOCA_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_ARPA_INET_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_CRYPT_H 1 - -/* does /dev/urandom exist ? */ -#define HAVE_DEV_URANDOM 1 - -/* Define to 1 if you have the header file, and it defines `DIR'. - */ -#define HAVE_DIRENT_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_DLFCN_H 1 - -/* Define to 1 if you have the `fcntl' function. */ -#define HAVE_FCNTL 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_FCNTL_H 1 - -/* Define to 1 if you have the `flock' function. */ -#define HAVE_FLOCK 1 - -/* Define to 1 if you have the `getdomainname' function. */ -#define HAVE_GETDOMAINNAME 1 - -/* Define to 1 if you have the `gethostname' function. */ -#define HAVE_GETHOSTNAME 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_GETOPT_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_INTTYPES_H 1 - -/* Define to 1 if you have the `crypt' library (-lcrypt). */ -#define HAVE_LIBCRYPT 1 - -/* Define to 1 if you have the `nsl' library (-lnsl). */ -#define HAVE_LIBNSL 1 - -/* Define to 1 if you have the `socket' library (-lsocket). */ -/* #undef HAVE_LIBSOCKET */ - -/* Define to 1 if you have the header file. */ -#define HAVE_MEMORY_H 1 - -/* Define to 1 if you have the header file, and it defines `DIR'. */ -/* #undef HAVE_NDIR_H */ - -/* Define to 1 if you have the header file. */ -#define HAVE_NETDB_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_NETINET_IN_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_PWD_H 1 - -/* Define to 1 if you have the `rand' function. */ -#define HAVE_RAND 1 - -/* Define to 1 if you have the `random' function. */ -#define HAVE_RANDOM 1 - -/* shadow password support */ -/* #undef HAVE_SHADOW_PASSWORDS */ - -/* Define to 1 if you have the header file. */ -#define HAVE_SIGNAL_H 1 - -/* Define to 1 if you have the `snprintf' function. */ -#define HAVE_SNPRINTF 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_STDINT_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_STDLIB_H 1 - -/* Define to 1 if you have the `strcasecmp' function. */ -#define HAVE_STRCASECMP 1 - -/* Define to 1 if you have the `strdup' function. */ -#define HAVE_STRDUP 1 - -/* Define to 1 if you have the `strerror' function. */ -#define HAVE_STRERROR 1 - -/* Define to 1 if you have the `strftime' function. */ -#define HAVE_STRFTIME 1 - -/* Define to 1 if you have the `stricmp' function. */ -/* #undef HAVE_STRICMP */ - -/* Define to 1 if you have the header file. */ -#define HAVE_STRINGS_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_STRING_H 1 - -/*struct utsname has domainname field */ -/* #undef HAVE_STRUCT_UTSNAME_DOMAINNAME */ - -/* Define to 1 if you have the `sysinfo' function. */ -#define HAVE_SYSINFO 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_SYSLOG_H 1 - -/* Define to 1 if you have the header file, and it defines `DIR'. - */ -/* #undef HAVE_SYS_DIR_H */ - -/* Define to 1 if you have the header file. */ -#define HAVE_SYS_FCNTL_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_SYS_FILE_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_SYS_IOCTL_H 1 - -/* Define to 1 if you have the header file, and it defines `DIR'. - */ -/* #undef HAVE_SYS_NDIR_H */ - -/* Define to 1 if you have the header file. */ -#define HAVE_SYS_SIGNAL_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_SYS_SOCKET_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_SYS_STAT_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_SYS_TYPES_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_SYS_UTSNAME_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_TERMIOS_H 1 - -/* Define to 1 if you have the `uname' function. */ -#define HAVE_UNAME 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_UNISTD_H 1 - -/* Define to 1 if you have the `vsnprintf' function. */ -#define HAVE_VSNPRINTF 1 - -/* is little endian arch ? */ -#define LITTLE_ENDIAN 1 - -/* Define to the sub-directory in which libtool stores uninstalled libraries. - */ -#define LT_OBJDIR ".libs/" - -/* do you need the sig* prototypes ? */ -/* #undef NEED_SIG_PROTOTYPES */ - - -#define PACKAGE "radiusclient" - -/* Define to the address where bug reports for this package should be sent. */ -#define PACKAGE_BUGREPORT "" - -/* Define to the full name of this package. */ -#define PACKAGE_NAME "" - -/* Define to the full name and version of this package. */ -#define PACKAGE_STRING "" - -/* Define to the one symbol short name of this package. */ -#define PACKAGE_TARNAME "" - -/* Define to the home page for this package. */ -#define PACKAGE_URL "" - -/* Define to the version of this package. */ -#define PACKAGE_VERSION "" - -/* include code to kludge aroung Livingston RADIUS server 1.16 */ -/* #undef RADIUS_116 */ - -/* Define as the return type of signal handlers (`int' or `void'). */ -#define RETSIGTYPE void - -/* SCP support */ -/* #undef SCP */ - -/* If using the C implementation of alloca, define if you know the - direction of stack growth for your system; otherwise it will be - automatically deduced at runtime. - STACK_DIRECTION > 0 => grows toward higher addresses - STACK_DIRECTION < 0 => grows toward lower addresses - STACK_DIRECTION = 0 => direction of growth unknown */ -/* #undef STACK_DIRECTION */ - -/* Define to 1 if you have the ANSI C header files. */ -#define STDC_HEADERS 1 - -/* Define to 1 if you can safely include both and . */ -#define TIME_WITH_SYS_TIME 1 - -/* Define to 1 if your declares `struct tm'. */ -/* #undef TM_IN_SYS_TIME */ - - -#define VERSION "1.1.6" - -/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most - significant byte first (like Motorola and SPARC, unlike Intel). */ -#if defined AC_APPLE_UNIVERSAL_BUILD -# if defined __BIG_ENDIAN__ -# define WORDS_BIGENDIAN 1 -# endif -#else -# ifndef WORDS_BIGENDIAN -/* # undef WORDS_BIGENDIAN */ -# endif -#endif - -/* Define to empty if `const' does not conform to ANSI C. */ -/* #undef const */ - -/* Define to `long int' if does not define. */ -/* #undef off_t */ - -/* Define to `unsigned int' if does not define. */ -/* #undef size_t */ diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/config.h.in b/openair3/PMIPv6/freeradius-client-1.1.6/config.h.in deleted file mode 100644 index 0c53018ccb..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/config.h.in +++ /dev/null @@ -1,283 +0,0 @@ -/* config.h.in. Generated from configure.in by autoheader. */ - -/* Define if building universal (internal helper macro) */ -#undef AC_APPLE_UNIVERSAL_BUILD - -/* is big endian arch ? */ -#undef BIG_ENDIAN - -/* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP - systems. This function is required for `alloca.c' support on those systems. - */ -#undef CRAY_STACKSEG_END - -/* Define to 1 if using `alloca.c'. */ -#undef C_ALLOCA - -/* Define to 1 to use bsd-style gethostbyaddr_r() */ -#undef GETHOSTBYADDRRSTYLE_BSD - -/* Define to 1 to use gnu-style gethostbyaddr_r() */ -#undef GETHOSTBYADDRRSTYLE_GNU - -/* Define to 1 to use sysv-style gethostbyaddr_r() */ -#undef GETHOSTBYADDRRSTYLE_SYSV - -/* Define to 1 us gethostbyaddr_r() */ -#undef GETHOSTBYADDR_R - -/* Define to 1 to use bsd-style gethostbyname_r() */ -#undef GETHOSTBYNAMERSTYLE_BSD - -/* Define to 1 to use gnu-style gethostbyname_r() */ -#undef GETHOSTBYNAMERSTYLE_GNU - -/* Define to 1 to use sysv-style gethostbyname_r() */ -#undef GETHOSTBYNAMERSTYLE_SYSV - -/* Define to 1 to use gethostbyname_r() */ -#undef GETHOSTBYNAME_R - -/* Define to 1 if you have `alloca', as a function or macro. */ -#undef HAVE_ALLOCA - -/* Define to 1 if you have and it should be used (not on Ultrix). - */ -#undef HAVE_ALLOCA_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_ARPA_INET_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_CRYPT_H - -/* does /dev/urandom exist ? */ -#undef HAVE_DEV_URANDOM - -/* Define to 1 if you have the header file, and it defines `DIR'. - */ -#undef HAVE_DIRENT_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_DLFCN_H - -/* Define to 1 if you have the `fcntl' function. */ -#undef HAVE_FCNTL - -/* Define to 1 if you have the header file. */ -#undef HAVE_FCNTL_H - -/* Define to 1 if you have the `flock' function. */ -#undef HAVE_FLOCK - -/* Define to 1 if you have the `getdomainname' function. */ -#undef HAVE_GETDOMAINNAME - -/* Define to 1 if you have the `gethostname' function. */ -#undef HAVE_GETHOSTNAME - -/* Define to 1 if you have the header file. */ -#undef HAVE_GETOPT_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_INTTYPES_H - -/* Define to 1 if you have the `crypt' library (-lcrypt). */ -#undef HAVE_LIBCRYPT - -/* Define to 1 if you have the `nsl' library (-lnsl). */ -#undef HAVE_LIBNSL - -/* Define to 1 if you have the `socket' library (-lsocket). */ -#undef HAVE_LIBSOCKET - -/* Define to 1 if you have the header file. */ -#undef HAVE_MEMORY_H - -/* Define to 1 if you have the header file, and it defines `DIR'. */ -#undef HAVE_NDIR_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_NETDB_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_NETINET_IN_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_PWD_H - -/* Define to 1 if you have the `rand' function. */ -#undef HAVE_RAND - -/* Define to 1 if you have the `random' function. */ -#undef HAVE_RANDOM - -/* shadow password support */ -#undef HAVE_SHADOW_PASSWORDS - -/* Define to 1 if you have the header file. */ -#undef HAVE_SIGNAL_H - -/* Define to 1 if you have the `snprintf' function. */ -#undef HAVE_SNPRINTF - -/* Define to 1 if you have the header file. */ -#undef HAVE_STDINT_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_STDLIB_H - -/* Define to 1 if you have the `strcasecmp' function. */ -#undef HAVE_STRCASECMP - -/* Define to 1 if you have the `strdup' function. */ -#undef HAVE_STRDUP - -/* Define to 1 if you have the `strerror' function. */ -#undef HAVE_STRERROR - -/* Define to 1 if you have the `strftime' function. */ -#undef HAVE_STRFTIME - -/* Define to 1 if you have the `stricmp' function. */ -#undef HAVE_STRICMP - -/* Define to 1 if you have the header file. */ -#undef HAVE_STRINGS_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_STRING_H - -/*struct utsname has domainname field */ -#undef HAVE_STRUCT_UTSNAME_DOMAINNAME - -/* Define to 1 if you have the `sysinfo' function. */ -#undef HAVE_SYSINFO - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYSLOG_H - -/* Define to 1 if you have the header file, and it defines `DIR'. - */ -#undef HAVE_SYS_DIR_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_FCNTL_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_FILE_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_IOCTL_H - -/* Define to 1 if you have the header file, and it defines `DIR'. - */ -#undef HAVE_SYS_NDIR_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_SIGNAL_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_SOCKET_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_STAT_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_TYPES_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_UTSNAME_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_TERMIOS_H - -/* Define to 1 if you have the `uname' function. */ -#undef HAVE_UNAME - -/* Define to 1 if you have the header file. */ -#undef HAVE_UNISTD_H - -/* Define to 1 if you have the `vsnprintf' function. */ -#undef HAVE_VSNPRINTF - -/* is little endian arch ? */ -#undef LITTLE_ENDIAN - -/* Define to the sub-directory in which libtool stores uninstalled libraries. - */ -#undef LT_OBJDIR - -/* do you need the sig* prototypes ? */ -#undef NEED_SIG_PROTOTYPES - - -#undef PACKAGE - -/* Define to the address where bug reports for this package should be sent. */ -#undef PACKAGE_BUGREPORT - -/* Define to the full name of this package. */ -#undef PACKAGE_NAME - -/* Define to the full name and version of this package. */ -#undef PACKAGE_STRING - -/* Define to the one symbol short name of this package. */ -#undef PACKAGE_TARNAME - -/* Define to the home page for this package. */ -#undef PACKAGE_URL - -/* Define to the version of this package. */ -#undef PACKAGE_VERSION - -/* include code to kludge aroung Livingston RADIUS server 1.16 */ -#undef RADIUS_116 - -/* Define as the return type of signal handlers (`int' or `void'). */ -#undef RETSIGTYPE - -/* SCP support */ -#undef SCP - -/* If using the C implementation of alloca, define if you know the - direction of stack growth for your system; otherwise it will be - automatically deduced at runtime. - STACK_DIRECTION > 0 => grows toward higher addresses - STACK_DIRECTION < 0 => grows toward lower addresses - STACK_DIRECTION = 0 => direction of growth unknown */ -#undef STACK_DIRECTION - -/* Define to 1 if you have the ANSI C header files. */ -#undef STDC_HEADERS - -/* Define to 1 if you can safely include both and . */ -#undef TIME_WITH_SYS_TIME - -/* Define to 1 if your declares `struct tm'. */ -#undef TM_IN_SYS_TIME - - -#undef VERSION - -/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most - significant byte first (like Motorola and SPARC, unlike Intel). */ -#if defined AC_APPLE_UNIVERSAL_BUILD -# if defined __BIG_ENDIAN__ -# define WORDS_BIGENDIAN 1 -# endif -#else -# ifndef WORDS_BIGENDIAN -# undef WORDS_BIGENDIAN -# endif -#endif - -/* Define to empty if `const' does not conform to ANSI C. */ -#undef const - -/* Define to `long int' if does not define. */ -#undef off_t - -/* Define to `unsigned int' if does not define. */ -#undef size_t diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/config.log b/openair3/PMIPv6/freeradius-client-1.1.6/config.log deleted file mode 100644 index 0f269c84ae..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/config.log +++ /dev/null @@ -1,1575 +0,0 @@ -This file contains any messages produced by compilers while -running configure, to aid debugging if configure makes a mistake. - -It was created by configure, which was -generated by GNU Autoconf 2.65. Invocation command line was - - $ ./configure - -## --------- ## -## Platform. ## -## --------- ## - -hostname = neo -uname -m = i686 -uname -r = 2.6.32.38+drm33.16 -uname -s = Linux -uname -v = #1 SMP Tue May 31 17:08:33 CEST 2011 - -/usr/bin/uname -p = unknown -/bin/uname -X = unknown - -/bin/arch = unknown -/usr/bin/arch -k = unknown -/usr/convex/getsysinfo = unknown -/usr/bin/hostinfo = unknown -/bin/machine = unknown -/usr/bin/oslevel = unknown -/bin/universe = unknown - -PATH: /usr/realtime/bin -PATH: /usr/local/sbin -PATH: /usr/local/bin -PATH: /usr/sbin -PATH: /usr/bin -PATH: /sbin -PATH: /bin -PATH: /usr/games - - -## ----------- ## -## Core tests. ## -## ----------- ## - -configure:2374: checking whether to enable maintainer-specific portions of Makefiles -configure:2383: result: no -configure:2425: checking build system type -configure:2439: result: i686-pc-linux-gnu -configure:2459: checking host system type -configure:2472: result: i686-pc-linux-gnu -configure:2492: checking target system type -configure:2505: result: i686-pc-linux-gnu -configure:2553: checking for a BSD-compatible install -configure:2621: result: /usr/bin/install -c -configure:2632: checking whether build environment is sane -configure:2682: result: yes -configure:2823: checking for a thread-safe mkdir -p -configure:2862: result: /bin/mkdir -p -configure:2875: checking for gawk -configure:2891: found /usr/bin/gawk -configure:2902: result: gawk -configure:2913: checking whether make sets $(MAKE) -configure:2935: result: yes -configure:3059: checking for style of include used by make -configure:3087: result: GNU -configure:3157: checking for gcc -configure:3173: found /usr/bin/gcc -configure:3184: result: gcc -configure:3413: checking for C compiler version -configure:3422: gcc --version >&5 -gcc (Ubuntu 4.4.3-4ubuntu5) 4.4.3 -Copyright (C) 2009 Free Software Foundation, Inc. -This is free software; see the source for copying conditions. There is NO -warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -configure:3433: $? = 0 -configure:3422: gcc -v >&5 -Using built-in specs. -Target: i486-linux-gnu -Configured with: ../src/configure -v --with-pkgversion='Ubuntu 4.4.3-4ubuntu5' --with-bugurl=file:///usr/share/doc/gcc-4.4/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --enable-shared --enable-multiarch --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.4 --program-suffix=-4.4 --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-plugin --enable-objc-gc --enable-targets=all --disable-werror --with-arch-32=i486 --with-tune=generic --enable-checking=release --build=i486-linux-gnu --host=i486-linux-gnu --target=i486-linux-gnu -Thread model: posix -gcc version 4.4.3 (Ubuntu 4.4.3-4ubuntu5) -configure:3433: $? = 0 -configure:3422: gcc -V >&5 -gcc: '-V' option must have argument -configure:3433: $? = 1 -configure:3422: gcc -qversion >&5 -gcc: unrecognized option '-qversion' -gcc: no input files -configure:3433: $? = 1 -configure:3453: checking whether the C compiler works -configure:3475: gcc conftest.c >&5 -configure:3479: $? = 0 -configure:3528: result: yes -configure:3531: checking for C compiler default output file name -configure:3533: result: a.out -configure:3539: checking for suffix of executables -configure:3546: gcc -o conftest conftest.c >&5 -configure:3550: $? = 0 -configure:3572: result: -configure:3594: checking whether we are cross compiling -configure:3602: gcc -o conftest conftest.c >&5 -configure:3606: $? = 0 -configure:3613: ./conftest -configure:3617: $? = 0 -configure:3632: result: no -configure:3637: checking for suffix of object files -configure:3659: gcc -c conftest.c >&5 -configure:3663: $? = 0 -configure:3684: result: o -configure:3688: checking whether we are using the GNU C compiler -configure:3707: gcc -c conftest.c >&5 -configure:3707: $? = 0 -configure:3716: result: yes -configure:3725: checking whether gcc accepts -g -configure:3745: gcc -c -g conftest.c >&5 -configure:3745: $? = 0 -configure:3786: result: yes -configure:3803: checking for gcc option to accept ISO C89 -configure:3867: gcc -c -g -O2 conftest.c >&5 -configure:3867: $? = 0 -configure:3880: result: none needed -configure:3902: checking dependency style of gcc -configure:4012: result: gcc3 -configure:4027: checking for a sed that does not truncate output -configure:4091: result: /bin/sed -configure:4109: checking for grep that handles long lines and -e -configure:4167: result: /bin/grep -configure:4172: checking for egrep -configure:4234: result: /bin/grep -E -configure:4239: checking for fgrep -configure:4301: result: /bin/grep -F -configure:4336: checking for ld used by gcc -configure:4403: result: /usr/bin/ld -configure:4410: checking if the linker (/usr/bin/ld) is GNU ld -configure:4425: result: yes -configure:4437: checking for BSD- or MS-compatible name lister (nm) -configure:4486: result: /usr/bin/nm -B -configure:4604: checking the name lister (/usr/bin/nm -B) interface -configure:4611: gcc -c -g -O2 conftest.c >&5 -configure:4614: /usr/bin/nm -B "conftest.o" -configure:4617: output -00000000 B some_variable -configure:4624: result: BSD nm -configure:4627: checking whether ln -s works -configure:4631: result: yes -configure:4639: checking the maximum length of command line arguments -configure:4759: result: 1572864 -configure:4776: checking whether the shell understands some XSI constructs -configure:4786: result: yes -configure:4790: checking whether the shell understands "+=" -configure:4796: result: yes -configure:4831: checking for /usr/bin/ld option to reload object files -configure:4838: result: -r -configure:4907: checking for objdump -configure:4923: found /usr/bin/objdump -configure:4934: result: objdump -configure:4966: checking how to recognize dependent libraries -configure:5162: result: pass_all -configure:5222: checking for ar -configure:5238: found /usr/bin/ar -configure:5249: result: ar -configure:5327: checking for strip -configure:5343: found /usr/bin/strip -configure:5354: result: strip -configure:5426: checking for ranlib -configure:5442: found /usr/bin/ranlib -configure:5453: result: ranlib -configure:5543: checking command to parse /usr/bin/nm -B output from gcc object -configure:5661: gcc -c -g -O2 conftest.c >&5 -configure:5664: $? = 0 -configure:5668: /usr/bin/nm -B conftest.o \| sed -n -e 's/^.*[ ]\([ABCDGIRSTW][ABCDGIRSTW]*\)[ ][ ]*\([_A-Za-z][_A-Za-z0-9]*\)$/\1 \2 \2/p' \> conftest.nm -configure:5671: $? = 0 -configure:5725: gcc -o conftest -g -O2 conftest.c conftstm.o >&5 -configure:5728: $? = 0 -configure:5766: result: ok -configure:6575: checking how to run the C preprocessor -configure:6606: gcc -E conftest.c -configure:6606: $? = 0 -configure:6620: gcc -E conftest.c -conftest.c:11:28: error: ac_nonexistent.h: No such file or directory -configure:6620: $? = 1 -configure: failed program was: -| /* confdefs.h */ -| #define PACKAGE_NAME "" -| #define PACKAGE_TARNAME "" -| #define PACKAGE_VERSION "" -| #define PACKAGE_STRING "" -| #define PACKAGE_BUGREPORT "" -| #define PACKAGE_URL "" -| #define PACKAGE "radiusclient" -| #define VERSION "1.1.6" -| /* end confdefs.h. */ -| #include -configure:6645: result: gcc -E -configure:6665: gcc -E conftest.c -configure:6665: $? = 0 -configure:6679: gcc -E conftest.c -conftest.c:11:28: error: ac_nonexistent.h: No such file or directory -configure:6679: $? = 1 -configure: failed program was: -| /* confdefs.h */ -| #define PACKAGE_NAME "" -| #define PACKAGE_TARNAME "" -| #define PACKAGE_VERSION "" -| #define PACKAGE_STRING "" -| #define PACKAGE_BUGREPORT "" -| #define PACKAGE_URL "" -| #define PACKAGE "radiusclient" -| #define VERSION "1.1.6" -| /* end confdefs.h. */ -| #include -configure:6708: checking for ANSI C header files -configure:6728: gcc -c -g -O2 conftest.c >&5 -configure:6728: $? = 0 -configure:6801: gcc -o conftest -g -O2 conftest.c >&5 -configure:6801: $? = 0 -configure:6801: ./conftest -configure:6801: $? = 0 -configure:6812: result: yes -configure:6825: checking for sys/types.h -configure:6825: gcc -c -g -O2 conftest.c >&5 -configure:6825: $? = 0 -configure:6825: result: yes -configure:6825: checking for sys/stat.h -configure:6825: gcc -c -g -O2 conftest.c >&5 -configure:6825: $? = 0 -configure:6825: result: yes -configure:6825: checking for stdlib.h -configure:6825: gcc -c -g -O2 conftest.c >&5 -configure:6825: $? = 0 -configure:6825: result: yes -configure:6825: checking for string.h -configure:6825: gcc -c -g -O2 conftest.c >&5 -configure:6825: $? = 0 -configure:6825: result: yes -configure:6825: checking for memory.h -configure:6825: gcc -c -g -O2 conftest.c >&5 -configure:6825: $? = 0 -configure:6825: result: yes -configure:6825: checking for strings.h -configure:6825: gcc -c -g -O2 conftest.c >&5 -configure:6825: $? = 0 -configure:6825: result: yes -configure:6825: checking for inttypes.h -configure:6825: gcc -c -g -O2 conftest.c >&5 -configure:6825: $? = 0 -configure:6825: result: yes -configure:6825: checking for stdint.h -configure:6825: gcc -c -g -O2 conftest.c >&5 -configure:6825: $? = 0 -configure:6825: result: yes -configure:6825: checking for unistd.h -configure:6825: gcc -c -g -O2 conftest.c >&5 -configure:6825: $? = 0 -configure:6825: result: yes -configure:6840: checking for dlfcn.h -configure:6840: gcc -c -g -O2 conftest.c >&5 -configure:6840: $? = 0 -configure:6840: result: yes -configure:7024: checking for objdir -configure:7039: result: .libs -configure:7331: checking if gcc supports -fno-rtti -fno-exceptions -configure:7349: gcc -c -g -O2 -fno-rtti -fno-exceptions conftest.c >&5 -cc1: warning: command line option "-fno-rtti" is valid for C++/ObjC++ but not for C -configure:7353: $? = 0 -configure:7366: result: no -configure:7386: checking for gcc option to produce PIC -configure:7658: result: -fPIC -DPIC -configure:7670: checking if gcc PIC flag -fPIC -DPIC works -configure:7688: gcc -c -g -O2 -fPIC -DPIC -DPIC conftest.c >&5 -configure:7692: $? = 0 -configure:7705: result: yes -configure:7729: checking if gcc static flag -static works -configure:7757: result: yes -configure:7772: checking if gcc supports -c -o file.o -configure:7793: gcc -c -g -O2 -o out/conftest2.o conftest.c >&5 -configure:7797: $? = 0 -configure:7819: result: yes -configure:7827: checking if gcc supports -c -o file.o -configure:7874: result: yes -configure:7907: checking whether the gcc linker (/usr/bin/ld) supports shared libraries -configure:8898: result: yes -configure:8935: checking whether -lc should be explicitly linked in -configure:8940: gcc -c -g -O2 conftest.c >&5 -configure:8943: $? = 0 -configure:8958: gcc -shared conftest.o -v -Wl,-soname -Wl,conftest -o conftest 2\>\&1 \| /bin/grep -lc \>/dev/null 2\>\&1 -configure:8961: $? = 0 -configure:8973: result: no -configure:9137: checking dynamic linker characteristics -configure:9570: gcc -o conftest -g -O2 -Wl,-rpath -Wl,/foo conftest.c >&5 -configure:9570: $? = 0 -configure:9800: result: GNU/Linux ld.so -configure:9902: checking how to hardcode library paths into programs -configure:9927: result: immediate -configure:10447: checking whether stripping libraries is possible -configure:10452: result: yes -configure:10487: checking if libtool supports shared libraries -configure:10489: result: yes -configure:10492: checking whether to build shared libraries -configure:10513: result: yes -configure:10516: checking whether to build static libraries -configure:10520: result: yes -configure:10604: checking for gcc -configure:10631: result: gcc -configure:10860: checking for C compiler version -configure:10869: gcc --version >&5 -gcc (Ubuntu 4.4.3-4ubuntu5) 4.4.3 -Copyright (C) 2009 Free Software Foundation, Inc. -This is free software; see the source for copying conditions. There is NO -warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -configure:10880: $? = 0 -configure:10869: gcc -v >&5 -Using built-in specs. -Target: i486-linux-gnu -Configured with: ../src/configure -v --with-pkgversion='Ubuntu 4.4.3-4ubuntu5' --with-bugurl=file:///usr/share/doc/gcc-4.4/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --enable-shared --enable-multiarch --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.4 --program-suffix=-4.4 --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-plugin --enable-objc-gc --enable-targets=all --disable-werror --with-arch-32=i486 --with-tune=generic --enable-checking=release --build=i486-linux-gnu --host=i486-linux-gnu --target=i486-linux-gnu -Thread model: posix -gcc version 4.4.3 (Ubuntu 4.4.3-4ubuntu5) -configure:10880: $? = 0 -configure:10869: gcc -V >&5 -gcc: '-V' option must have argument -configure:10880: $? = 1 -configure:10869: gcc -qversion >&5 -gcc: unrecognized option '-qversion' -gcc: no input files -configure:10880: $? = 1 -configure:10884: checking whether we are using the GNU C compiler -configure:10912: result: yes -configure:10921: checking whether gcc accepts -g -configure:10982: result: yes -configure:10999: checking for gcc option to accept ISO C89 -configure:11076: result: none needed -configure:11098: checking dependency style of gcc -configure:11208: result: gcc3 -configure:11226: checking for ar -configure:11244: found /usr/bin/ar -configure:11256: result: /usr/bin/ar -configure:11266: checking whether to include shadow password support -configure:11279: result: no -configure:11287: checking for socket in -lsocket -configure:11312: gcc -o conftest -g -O2 conftest.c -lsocket >&5 -/usr/bin/ld: cannot find -lsocket -collect2: ld returned 1 exit status -configure:11312: $? = 1 -configure: failed program was: -| /* confdefs.h */ -| #define PACKAGE_NAME "" -| #define PACKAGE_TARNAME "" -| #define PACKAGE_VERSION "" -| #define PACKAGE_STRING "" -| #define PACKAGE_BUGREPORT "" -| #define PACKAGE_URL "" -| #define PACKAGE "radiusclient" -| #define VERSION "1.1.6" -| #define STDC_HEADERS 1 -| #define HAVE_SYS_TYPES_H 1 -| #define HAVE_SYS_STAT_H 1 -| #define HAVE_STDLIB_H 1 -| #define HAVE_STRING_H 1 -| #define HAVE_MEMORY_H 1 -| #define HAVE_STRINGS_H 1 -| #define HAVE_INTTYPES_H 1 -| #define HAVE_STDINT_H 1 -| #define HAVE_UNISTD_H 1 -| #define HAVE_DLFCN_H 1 -| #define LT_OBJDIR ".libs/" -| /* end confdefs.h. */ -| -| /* Override any GCC internal prototype to avoid an error. -| Use char because int might match the return type of a GCC -| builtin and then its argument prototype would still apply. */ -| #ifdef __cplusplus -| extern "C" -| #endif -| char socket (); -| int -| main () -| { -| return socket (); -| ; -| return 0; -| } -configure:11321: result: no -configure:11333: checking for gethostbyaddr in -lnsl -configure:11358: gcc -o conftest -g -O2 conftest.c -lnsl >&5 -configure:11358: $? = 0 -configure:11367: result: yes -configure:11380: checking gethostbyaddr_r() syntax -configure:11410: gcc -o conftest -g -O2 conftest.c -lnsl >&5 -configure:11410: $? = 0 -configure:11483: result: GNU-style -configure:11493: checking gethostbyname_r() syntax -configure:11509: gcc -o conftest -g -O2 conftest.c -lnsl >&5 -configure:11509: $? = 0 -configure:11583: result: GNU-style -configure:11592: checking for crypt in -lcrypt -configure:11617: gcc -o conftest -g -O2 conftest.c -lcrypt -lnsl >&5 -configure:11617: $? = 0 -configure:11626: result: yes -configure:11638: checking whether byte ordering is bigendian -configure:11653: gcc -c -g -O2 conftest.c >&5 -conftest.c:30: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'a' -configure:11653: $? = 1 -configure: failed program was: -| /* confdefs.h */ -| #define PACKAGE_NAME "" -| #define PACKAGE_TARNAME "" -| #define PACKAGE_VERSION "" -| #define PACKAGE_STRING "" -| #define PACKAGE_BUGREPORT "" -| #define PACKAGE_URL "" -| #define PACKAGE "radiusclient" -| #define VERSION "1.1.6" -| #define STDC_HEADERS 1 -| #define HAVE_SYS_TYPES_H 1 -| #define HAVE_SYS_STAT_H 1 -| #define HAVE_STDLIB_H 1 -| #define HAVE_STRING_H 1 -| #define HAVE_MEMORY_H 1 -| #define HAVE_STRINGS_H 1 -| #define HAVE_INTTYPES_H 1 -| #define HAVE_STDINT_H 1 -| #define HAVE_UNISTD_H 1 -| #define HAVE_DLFCN_H 1 -| #define LT_OBJDIR ".libs/" -| #define HAVE_LIBNSL 1 -| #define GETHOSTBYADDR_R 1 -| #define GETHOSTBYADDRRSTYLE_GNU /**/ -| #define GETHOSTBYNAME_R /**/ -| #define GETHOSTBYNAMERSTYLE_GNU /**/ -| #define HAVE_LIBCRYPT 1 -| /* end confdefs.h. */ -| #ifndef __APPLE_CC__ -| not a universal capable compiler -| #endif -| typedef int dummy; -| -configure:11698: gcc -c -g -O2 conftest.c >&5 -configure:11698: $? = 0 -configure:11716: gcc -c -g -O2 conftest.c >&5 -conftest.c: In function 'main': -conftest.c:36: error: 'not' undeclared (first use in this function) -conftest.c:36: error: (Each undeclared identifier is reported only once -conftest.c:36: error: for each function it appears in.) -conftest.c:36: error: expected ';' before 'big' -configure:11716: $? = 1 -configure: failed program was: -| /* confdefs.h */ -| #define PACKAGE_NAME "" -| #define PACKAGE_TARNAME "" -| #define PACKAGE_VERSION "" -| #define PACKAGE_STRING "" -| #define PACKAGE_BUGREPORT "" -| #define PACKAGE_URL "" -| #define PACKAGE "radiusclient" -| #define VERSION "1.1.6" -| #define STDC_HEADERS 1 -| #define HAVE_SYS_TYPES_H 1 -| #define HAVE_SYS_STAT_H 1 -| #define HAVE_STDLIB_H 1 -| #define HAVE_STRING_H 1 -| #define HAVE_MEMORY_H 1 -| #define HAVE_STRINGS_H 1 -| #define HAVE_INTTYPES_H 1 -| #define HAVE_STDINT_H 1 -| #define HAVE_UNISTD_H 1 -| #define HAVE_DLFCN_H 1 -| #define LT_OBJDIR ".libs/" -| #define HAVE_LIBNSL 1 -| #define GETHOSTBYADDR_R 1 -| #define GETHOSTBYADDRRSTYLE_GNU /**/ -| #define GETHOSTBYNAME_R /**/ -| #define GETHOSTBYNAMERSTYLE_GNU /**/ -| #define HAVE_LIBCRYPT 1 -| /* end confdefs.h. */ -| #include -| #include -| -| int -| main () -| { -| #if BYTE_ORDER != BIG_ENDIAN -| not big endian -| #endif -| -| ; -| return 0; -| } -configure:11844: result: no -configure:11873: checking for dirent.h that defines DIR -configure:11892: gcc -c -g -O2 conftest.c >&5 -configure:11892: $? = 0 -configure:11900: result: yes -configure:11914: checking for library containing opendir -configure:11945: gcc -o conftest -g -O2 conftest.c -lcrypt -lnsl >&5 -configure:11945: $? = 0 -configure:11962: result: none required -configure:12029: checking for ANSI C header files -configure:12133: result: yes -configure:12144: checking crypt.h usability -configure:12144: gcc -c -g -O2 conftest.c >&5 -configure:12144: $? = 0 -configure:12144: result: yes -configure:12144: checking crypt.h presence -configure:12144: gcc -E conftest.c -configure:12144: $? = 0 -configure:12144: result: yes -configure:12144: checking for crypt.h -configure:12144: result: yes -configure:12144: checking signal.h usability -configure:12144: gcc -c -g -O2 conftest.c >&5 -configure:12144: $? = 0 -configure:12144: result: yes -configure:12144: checking signal.h presence -configure:12144: gcc -E conftest.c -configure:12144: $? = 0 -configure:12144: result: yes -configure:12144: checking for signal.h -configure:12144: result: yes -configure:12144: checking sys/signal.h usability -configure:12144: gcc -c -g -O2 conftest.c >&5 -configure:12144: $? = 0 -configure:12144: result: yes -configure:12144: checking sys/signal.h presence -configure:12144: gcc -E conftest.c -configure:12144: $? = 0 -configure:12144: result: yes -configure:12144: checking for sys/signal.h -configure:12144: result: yes -configure:12144: checking for sys/stat.h -configure:12144: result: yes -configure:12158: checking fcntl.h usability -configure:12158: gcc -c -g -O2 conftest.c >&5 -configure:12158: $? = 0 -configure:12158: result: yes -configure:12158: checking fcntl.h presence -configure:12158: gcc -E conftest.c -configure:12158: $? = 0 -configure:12158: result: yes -configure:12158: checking for fcntl.h -configure:12158: result: yes -configure:12158: checking sys/fcntl.h usability -configure:12158: gcc -c -g -O2 conftest.c >&5 -configure:12158: $? = 0 -configure:12158: result: yes -configure:12158: checking sys/fcntl.h presence -configure:12158: gcc -E conftest.c -configure:12158: $? = 0 -configure:12158: result: yes -configure:12158: checking for sys/fcntl.h -configure:12158: result: yes -configure:12172: checking sys/utsname.h usability -configure:12172: gcc -c -g -O2 conftest.c >&5 -configure:12172: $? = 0 -configure:12172: result: yes -configure:12172: checking sys/utsname.h presence -configure:12172: gcc -E conftest.c -configure:12172: $? = 0 -configure:12172: result: yes -configure:12172: checking for sys/utsname.h -configure:12172: result: yes -configure:12172: checking getopt.h usability -configure:12172: gcc -c -g -O2 conftest.c >&5 -configure:12172: $? = 0 -configure:12172: result: yes -configure:12172: checking getopt.h presence -configure:12172: gcc -E conftest.c -configure:12172: $? = 0 -configure:12172: result: yes -configure:12172: checking for getopt.h -configure:12172: result: yes -configure:12172: checking for unistd.h -configure:12172: result: yes -configure:12186: checking sys/file.h usability -configure:12186: gcc -c -g -O2 conftest.c >&5 -configure:12186: $? = 0 -configure:12186: result: yes -configure:12186: checking sys/file.h presence -configure:12186: gcc -E conftest.c -configure:12186: $? = 0 -configure:12186: result: yes -configure:12186: checking for sys/file.h -configure:12186: result: yes -configure:12186: checking termios.h usability -configure:12186: gcc -c -g -O2 conftest.c >&5 -configure:12186: $? = 0 -configure:12186: result: yes -configure:12186: checking termios.h presence -configure:12186: gcc -E conftest.c -configure:12186: $? = 0 -configure:12186: result: yes -configure:12186: checking for termios.h -configure:12186: result: yes -configure:12186: checking sys/ioctl.h usability -configure:12186: gcc -c -g -O2 conftest.c >&5 -configure:12186: $? = 0 -configure:12186: result: yes -configure:12186: checking sys/ioctl.h presence -configure:12186: gcc -E conftest.c -configure:12186: $? = 0 -configure:12186: result: yes -configure:12186: checking for sys/ioctl.h -configure:12186: result: yes -configure:12200: checking netdb.h usability -configure:12200: gcc -c -g -O2 conftest.c >&5 -configure:12200: $? = 0 -configure:12200: result: yes -configure:12200: checking netdb.h presence -configure:12200: gcc -E conftest.c -configure:12200: $? = 0 -configure:12200: result: yes -configure:12200: checking for netdb.h -configure:12200: result: yes -configure:12200: checking syslog.h usability -configure:12200: gcc -c -g -O2 conftest.c >&5 -configure:12200: $? = 0 -configure:12200: result: yes -configure:12200: checking syslog.h presence -configure:12200: gcc -E conftest.c -configure:12200: $? = 0 -configure:12200: result: yes -configure:12200: checking for syslog.h -configure:12200: result: yes -configure:12200: checking pwd.h usability -configure:12200: gcc -c -g -O2 conftest.c >&5 -configure:12200: $? = 0 -configure:12200: result: yes -configure:12200: checking pwd.h presence -configure:12200: gcc -E conftest.c -configure:12200: $? = 0 -configure:12200: result: yes -configure:12200: checking for pwd.h -configure:12200: result: yes -configure:12214: checking sys/socket.h usability -configure:12214: gcc -c -g -O2 conftest.c >&5 -configure:12214: $? = 0 -configure:12214: result: yes -configure:12214: checking sys/socket.h presence -configure:12214: gcc -E conftest.c -configure:12214: $? = 0 -configure:12214: result: yes -configure:12214: checking for sys/socket.h -configure:12214: result: yes -configure:12214: checking netinet/in.h usability -configure:12214: gcc -c -g -O2 conftest.c >&5 -configure:12214: $? = 0 -configure:12214: result: yes -configure:12214: checking netinet/in.h presence -configure:12214: gcc -E conftest.c -configure:12214: $? = 0 -configure:12214: result: yes -configure:12214: checking for netinet/in.h -configure:12214: result: yes -configure:12214: checking arpa/inet.h usability -configure:12214: gcc -c -g -O2 conftest.c >&5 -configure:12214: $? = 0 -configure:12214: result: yes -configure:12214: checking arpa/inet.h presence -configure:12214: gcc -E conftest.c -configure:12214: $? = 0 -configure:12214: result: yes -configure:12214: checking for arpa/inet.h -configure:12214: result: yes -configure:12236: checking for an ANSI C-conforming const -configure:12301: gcc -c -g -O2 conftest.c >&5 -configure:12301: $? = 0 -configure:12308: result: yes -configure:12316: checking for off_t -configure:12316: gcc -c -g -O2 conftest.c >&5 -configure:12316: $? = 0 -configure:12316: gcc -c -g -O2 conftest.c >&5 -conftest.c: In function 'main': -conftest.c:86: error: expected expression before ')' token -configure:12316: $? = 1 -configure: failed program was: -| /* confdefs.h */ -| #define PACKAGE_NAME "" -| #define PACKAGE_TARNAME "" -| #define PACKAGE_VERSION "" -| #define PACKAGE_STRING "" -| #define PACKAGE_BUGREPORT "" -| #define PACKAGE_URL "" -| #define PACKAGE "radiusclient" -| #define VERSION "1.1.6" -| #define STDC_HEADERS 1 -| #define HAVE_SYS_TYPES_H 1 -| #define HAVE_SYS_STAT_H 1 -| #define HAVE_STDLIB_H 1 -| #define HAVE_STRING_H 1 -| #define HAVE_MEMORY_H 1 -| #define HAVE_STRINGS_H 1 -| #define HAVE_INTTYPES_H 1 -| #define HAVE_STDINT_H 1 -| #define HAVE_UNISTD_H 1 -| #define HAVE_DLFCN_H 1 -| #define LT_OBJDIR ".libs/" -| #define HAVE_LIBNSL 1 -| #define GETHOSTBYADDR_R 1 -| #define GETHOSTBYADDRRSTYLE_GNU /**/ -| #define GETHOSTBYNAME_R /**/ -| #define GETHOSTBYNAMERSTYLE_GNU /**/ -| #define HAVE_LIBCRYPT 1 -| #define LITTLE_ENDIAN 1 -| #define HAVE_DIRENT_H 1 -| #define STDC_HEADERS 1 -| #define HAVE_CRYPT_H 1 -| #define HAVE_SIGNAL_H 1 -| #define HAVE_SYS_SIGNAL_H 1 -| #define HAVE_SYS_STAT_H 1 -| #define HAVE_FCNTL_H 1 -| #define HAVE_SYS_FCNTL_H 1 -| #define HAVE_SYS_UTSNAME_H 1 -| #define HAVE_GETOPT_H 1 -| #define HAVE_UNISTD_H 1 -| #define HAVE_SYS_FILE_H 1 -| #define HAVE_TERMIOS_H 1 -| #define HAVE_SYS_IOCTL_H 1 -| #define HAVE_NETDB_H 1 -| #define HAVE_SYSLOG_H 1 -| #define HAVE_PWD_H 1 -| #define HAVE_SYS_SOCKET_H 1 -| #define HAVE_NETINET_IN_H 1 -| #define HAVE_ARPA_INET_H 1 -| /* end confdefs.h. */ -| #include -| #ifdef HAVE_SYS_TYPES_H -| # include -| #endif -| #ifdef HAVE_SYS_STAT_H -| # include -| #endif -| #ifdef STDC_HEADERS -| # include -| # include -| #else -| # ifdef HAVE_STDLIB_H -| # include -| # endif -| #endif -| #ifdef HAVE_STRING_H -| # if !defined STDC_HEADERS && defined HAVE_MEMORY_H -| # include -| # endif -| # include -| #endif -| #ifdef HAVE_STRINGS_H -| # include -| #endif -| #ifdef HAVE_INTTYPES_H -| # include -| #endif -| #ifdef HAVE_STDINT_H -| # include -| #endif -| #ifdef HAVE_UNISTD_H -| # include -| #endif -| int -| main () -| { -| if (sizeof ((off_t))) -| return 0; -| ; -| return 0; -| } -configure:12316: result: yes -configure:12327: checking for size_t -configure:12327: gcc -c -g -O2 conftest.c >&5 -configure:12327: $? = 0 -configure:12327: gcc -c -g -O2 conftest.c >&5 -conftest.c: In function 'main': -conftest.c:86: error: expected expression before ')' token -configure:12327: $? = 1 -configure: failed program was: -| /* confdefs.h */ -| #define PACKAGE_NAME "" -| #define PACKAGE_TARNAME "" -| #define PACKAGE_VERSION "" -| #define PACKAGE_STRING "" -| #define PACKAGE_BUGREPORT "" -| #define PACKAGE_URL "" -| #define PACKAGE "radiusclient" -| #define VERSION "1.1.6" -| #define STDC_HEADERS 1 -| #define HAVE_SYS_TYPES_H 1 -| #define HAVE_SYS_STAT_H 1 -| #define HAVE_STDLIB_H 1 -| #define HAVE_STRING_H 1 -| #define HAVE_MEMORY_H 1 -| #define HAVE_STRINGS_H 1 -| #define HAVE_INTTYPES_H 1 -| #define HAVE_STDINT_H 1 -| #define HAVE_UNISTD_H 1 -| #define HAVE_DLFCN_H 1 -| #define LT_OBJDIR ".libs/" -| #define HAVE_LIBNSL 1 -| #define GETHOSTBYADDR_R 1 -| #define GETHOSTBYADDRRSTYLE_GNU /**/ -| #define GETHOSTBYNAME_R /**/ -| #define GETHOSTBYNAMERSTYLE_GNU /**/ -| #define HAVE_LIBCRYPT 1 -| #define LITTLE_ENDIAN 1 -| #define HAVE_DIRENT_H 1 -| #define STDC_HEADERS 1 -| #define HAVE_CRYPT_H 1 -| #define HAVE_SIGNAL_H 1 -| #define HAVE_SYS_SIGNAL_H 1 -| #define HAVE_SYS_STAT_H 1 -| #define HAVE_FCNTL_H 1 -| #define HAVE_SYS_FCNTL_H 1 -| #define HAVE_SYS_UTSNAME_H 1 -| #define HAVE_GETOPT_H 1 -| #define HAVE_UNISTD_H 1 -| #define HAVE_SYS_FILE_H 1 -| #define HAVE_TERMIOS_H 1 -| #define HAVE_SYS_IOCTL_H 1 -| #define HAVE_NETDB_H 1 -| #define HAVE_SYSLOG_H 1 -| #define HAVE_PWD_H 1 -| #define HAVE_SYS_SOCKET_H 1 -| #define HAVE_NETINET_IN_H 1 -| #define HAVE_ARPA_INET_H 1 -| /* end confdefs.h. */ -| #include -| #ifdef HAVE_SYS_TYPES_H -| # include -| #endif -| #ifdef HAVE_SYS_STAT_H -| # include -| #endif -| #ifdef STDC_HEADERS -| # include -| # include -| #else -| # ifdef HAVE_STDLIB_H -| # include -| # endif -| #endif -| #ifdef HAVE_STRING_H -| # if !defined STDC_HEADERS && defined HAVE_MEMORY_H -| # include -| # endif -| # include -| #endif -| #ifdef HAVE_STRINGS_H -| # include -| #endif -| #ifdef HAVE_INTTYPES_H -| # include -| #endif -| #ifdef HAVE_STDINT_H -| # include -| #endif -| #ifdef HAVE_UNISTD_H -| # include -| #endif -| int -| main () -| { -| if (sizeof ((size_t))) -| return 0; -| ; -| return 0; -| } -configure:12327: result: yes -configure:12338: checking whether time.h and sys/time.h may both be included -configure:12358: gcc -c -g -O2 conftest.c >&5 -configure:12358: $? = 0 -configure:12365: result: yes -configure:12373: checking whether struct tm is in sys/time.h or time.h -configure:12393: gcc -c -g -O2 conftest.c >&5 -configure:12393: $? = 0 -configure:12400: result: time.h -configure:12410: checking whether gcc needs -traditional -configure:12444: result: no -configure:12451: checking for working memcmp -configure:12494: gcc -o conftest -g -O2 conftest.c -lcrypt -lnsl >&5 -configure:12494: $? = 0 -configure:12494: ./conftest -configure:12494: $? = 0 -configure:12504: result: yes -configure:12520: checking return type of signal handlers -configure:12538: gcc -c -g -O2 conftest.c >&5 -conftest.c: In function 'main': -conftest.c:57: error: void value not ignored as it ought to be -configure:12538: $? = 1 -configure: failed program was: -| /* confdefs.h */ -| #define PACKAGE_NAME "" -| #define PACKAGE_TARNAME "" -| #define PACKAGE_VERSION "" -| #define PACKAGE_STRING "" -| #define PACKAGE_BUGREPORT "" -| #define PACKAGE_URL "" -| #define PACKAGE "radiusclient" -| #define VERSION "1.1.6" -| #define STDC_HEADERS 1 -| #define HAVE_SYS_TYPES_H 1 -| #define HAVE_SYS_STAT_H 1 -| #define HAVE_STDLIB_H 1 -| #define HAVE_STRING_H 1 -| #define HAVE_MEMORY_H 1 -| #define HAVE_STRINGS_H 1 -| #define HAVE_INTTYPES_H 1 -| #define HAVE_STDINT_H 1 -| #define HAVE_UNISTD_H 1 -| #define HAVE_DLFCN_H 1 -| #define LT_OBJDIR ".libs/" -| #define HAVE_LIBNSL 1 -| #define GETHOSTBYADDR_R 1 -| #define GETHOSTBYADDRRSTYLE_GNU /**/ -| #define GETHOSTBYNAME_R /**/ -| #define GETHOSTBYNAMERSTYLE_GNU /**/ -| #define HAVE_LIBCRYPT 1 -| #define LITTLE_ENDIAN 1 -| #define HAVE_DIRENT_H 1 -| #define STDC_HEADERS 1 -| #define HAVE_CRYPT_H 1 -| #define HAVE_SIGNAL_H 1 -| #define HAVE_SYS_SIGNAL_H 1 -| #define HAVE_SYS_STAT_H 1 -| #define HAVE_FCNTL_H 1 -| #define HAVE_SYS_FCNTL_H 1 -| #define HAVE_SYS_UTSNAME_H 1 -| #define HAVE_GETOPT_H 1 -| #define HAVE_UNISTD_H 1 -| #define HAVE_SYS_FILE_H 1 -| #define HAVE_TERMIOS_H 1 -| #define HAVE_SYS_IOCTL_H 1 -| #define HAVE_NETDB_H 1 -| #define HAVE_SYSLOG_H 1 -| #define HAVE_PWD_H 1 -| #define HAVE_SYS_SOCKET_H 1 -| #define HAVE_NETINET_IN_H 1 -| #define HAVE_ARPA_INET_H 1 -| #define TIME_WITH_SYS_TIME 1 -| /* end confdefs.h. */ -| #include -| #include -| -| int -| main () -| { -| return *(signal (0, 0)) (0) == 1; -| ; -| return 0; -| } -configure:12545: result: void -configure:12555: checking for strftime -configure:12555: gcc -o conftest -g -O2 conftest.c -lcrypt -lnsl >&5 -conftest.c:75: warning: conflicting types for built-in function 'strftime' -configure:12555: $? = 0 -configure:12555: result: yes -configure:12610: checking for working alloca.h -configure:12627: gcc -o conftest -g -O2 conftest.c -lcrypt -lnsl >&5 -configure:12627: $? = 0 -configure:12635: result: yes -configure:12643: checking for alloca -configure:12680: gcc -o conftest -g -O2 conftest.c -lcrypt -lnsl >&5 -configure:12680: $? = 0 -configure:12688: result: yes -configure:12801: checking for strdup -configure:12801: gcc -o conftest -g -O2 conftest.c -lcrypt -lnsl >&5 -conftest.c:78: warning: conflicting types for built-in function 'strdup' -configure:12801: $? = 0 -configure:12801: result: yes -configure:12801: checking for strerror -configure:12801: gcc -o conftest -g -O2 conftest.c -lcrypt -lnsl >&5 -configure:12801: $? = 0 -configure:12801: result: yes -configure:12801: checking for strcasecmp -configure:12801: gcc -o conftest -g -O2 conftest.c -lcrypt -lnsl >&5 -conftest.c:80: warning: conflicting types for built-in function 'strcasecmp' -configure:12801: $? = 0 -configure:12801: result: yes -configure:12822: checking for flock -configure:12822: gcc -o conftest -g -O2 conftest.c -lcrypt -lnsl >&5 -configure:12822: $? = 0 -configure:12822: result: yes -configure:12822: checking for fcntl -configure:12822: gcc -o conftest -g -O2 conftest.c -lcrypt -lnsl >&5 -configure:12822: $? = 0 -configure:12822: result: yes -configure:12822: checking for uname -configure:12822: gcc -o conftest -g -O2 conftest.c -lcrypt -lnsl >&5 -configure:12822: $? = 0 -configure:12822: result: yes -configure:12822: checking for gethostname -configure:12822: gcc -o conftest -g -O2 conftest.c -lcrypt -lnsl >&5 -configure:12822: $? = 0 -configure:12822: result: yes -configure:12822: checking for sysinfo -configure:12822: gcc -o conftest -g -O2 conftest.c -lcrypt -lnsl >&5 -configure:12822: $? = 0 -configure:12822: result: yes -configure:12822: checking for getdomainname -configure:12822: gcc -o conftest -g -O2 conftest.c -lcrypt -lnsl >&5 -configure:12822: $? = 0 -configure:12822: result: yes -configure:12835: checking for stricmp -configure:12835: gcc -o conftest -g -O2 conftest.c -lcrypt -lnsl >&5 -/tmp/ccYAuh6J.o: In function `main': -/usr/local/src/freeradius-client-1.1.6/conftest.c:98: undefined reference to `stricmp' -collect2: ld returned 1 exit status -configure:12835: $? = 1 -configure: failed program was: -| /* confdefs.h */ -| #define PACKAGE_NAME "" -| #define PACKAGE_TARNAME "" -| #define PACKAGE_VERSION "" -| #define PACKAGE_STRING "" -| #define PACKAGE_BUGREPORT "" -| #define PACKAGE_URL "" -| #define PACKAGE "radiusclient" -| #define VERSION "1.1.6" -| #define STDC_HEADERS 1 -| #define HAVE_SYS_TYPES_H 1 -| #define HAVE_SYS_STAT_H 1 -| #define HAVE_STDLIB_H 1 -| #define HAVE_STRING_H 1 -| #define HAVE_MEMORY_H 1 -| #define HAVE_STRINGS_H 1 -| #define HAVE_INTTYPES_H 1 -| #define HAVE_STDINT_H 1 -| #define HAVE_UNISTD_H 1 -| #define HAVE_DLFCN_H 1 -| #define LT_OBJDIR ".libs/" -| #define HAVE_LIBNSL 1 -| #define GETHOSTBYADDR_R 1 -| #define GETHOSTBYADDRRSTYLE_GNU /**/ -| #define GETHOSTBYNAME_R /**/ -| #define GETHOSTBYNAMERSTYLE_GNU /**/ -| #define HAVE_LIBCRYPT 1 -| #define LITTLE_ENDIAN 1 -| #define HAVE_DIRENT_H 1 -| #define STDC_HEADERS 1 -| #define HAVE_CRYPT_H 1 -| #define HAVE_SIGNAL_H 1 -| #define HAVE_SYS_SIGNAL_H 1 -| #define HAVE_SYS_STAT_H 1 -| #define HAVE_FCNTL_H 1 -| #define HAVE_SYS_FCNTL_H 1 -| #define HAVE_SYS_UTSNAME_H 1 -| #define HAVE_GETOPT_H 1 -| #define HAVE_UNISTD_H 1 -| #define HAVE_SYS_FILE_H 1 -| #define HAVE_TERMIOS_H 1 -| #define HAVE_SYS_IOCTL_H 1 -| #define HAVE_NETDB_H 1 -| #define HAVE_SYSLOG_H 1 -| #define HAVE_PWD_H 1 -| #define HAVE_SYS_SOCKET_H 1 -| #define HAVE_NETINET_IN_H 1 -| #define HAVE_ARPA_INET_H 1 -| #define TIME_WITH_SYS_TIME 1 -| #define RETSIGTYPE void -| #define HAVE_STRFTIME 1 -| #define HAVE_ALLOCA_H 1 -| #define HAVE_ALLOCA 1 -| #define HAVE_STRDUP 1 -| #define HAVE_STRERROR 1 -| #define HAVE_STRCASECMP 1 -| #define HAVE_FLOCK 1 -| #define HAVE_FCNTL 1 -| #define HAVE_UNAME 1 -| #define HAVE_GETHOSTNAME 1 -| #define HAVE_SYSINFO 1 -| #define HAVE_GETDOMAINNAME 1 -| /* end confdefs.h. */ -| /* Define stricmp to an innocuous variant, in case declares stricmp. -| For example, HP-UX 11i declares gettimeofday. */ -| #define stricmp innocuous_stricmp -| -| /* System header to define __stub macros and hopefully few prototypes, -| which can conflict with char stricmp (); below. -| Prefer to if __STDC__ is defined, since -| exists even on freestanding compilers. */ -| -| #ifdef __STDC__ -| # include -| #else -| # include -| #endif -| -| #undef stricmp -| -| /* Override any GCC internal prototype to avoid an error. -| Use char because int might match the return type of a GCC -| builtin and then its argument prototype would still apply. */ -| #ifdef __cplusplus -| extern "C" -| #endif -| char stricmp (); -| /* The GNU C library defines this for functions which it implements -| to always fail with ENOSYS. Some functions are actually named -| something starting with __ and the normal name is an alias. */ -| #if defined __stub_stricmp || defined __stub___stricmp -| choke me -| #endif -| -| int -| main () -| { -| return stricmp (); -| ; -| return 0; -| } -configure:12835: result: no -configure:12835: checking for random -configure:12835: gcc -o conftest -g -O2 conftest.c -lcrypt -lnsl >&5 -configure:12835: $? = 0 -configure:12835: result: yes -configure:12835: checking for rand -configure:12835: gcc -o conftest -g -O2 conftest.c -lcrypt -lnsl >&5 -configure:12835: $? = 0 -configure:12835: result: yes -configure:12835: checking for snprintf -configure:12835: gcc -o conftest -g -O2 conftest.c -lcrypt -lnsl >&5 -conftest.c:89: warning: conflicting types for built-in function 'snprintf' -configure:12835: $? = 0 -configure:12835: result: yes -configure:12835: checking for vsnprintf -configure:12835: gcc -o conftest -g -O2 conftest.c -lcrypt -lnsl >&5 -conftest.c:90: warning: conflicting types for built-in function 'vsnprintf' -configure:12835: $? = 0 -configure:12835: result: yes -configure:12848: checking for field domainname in struct utsname -configure:12868: gcc -o conftest -g -O2 conftest.c -lcrypt -lnsl >&5 -conftest.c: In function 'main': -conftest.c:74: error: 'struct utsname' has no member named 'domainname' -configure:12868: $? = 1 -configure: program exited with status 1 -configure: failed program was: -| /* confdefs.h */ -| #define PACKAGE_NAME "" -| #define PACKAGE_TARNAME "" -| #define PACKAGE_VERSION "" -| #define PACKAGE_STRING "" -| #define PACKAGE_BUGREPORT "" -| #define PACKAGE_URL "" -| #define PACKAGE "radiusclient" -| #define VERSION "1.1.6" -| #define STDC_HEADERS 1 -| #define HAVE_SYS_TYPES_H 1 -| #define HAVE_SYS_STAT_H 1 -| #define HAVE_STDLIB_H 1 -| #define HAVE_STRING_H 1 -| #define HAVE_MEMORY_H 1 -| #define HAVE_STRINGS_H 1 -| #define HAVE_INTTYPES_H 1 -| #define HAVE_STDINT_H 1 -| #define HAVE_UNISTD_H 1 -| #define HAVE_DLFCN_H 1 -| #define LT_OBJDIR ".libs/" -| #define HAVE_LIBNSL 1 -| #define GETHOSTBYADDR_R 1 -| #define GETHOSTBYADDRRSTYLE_GNU /**/ -| #define GETHOSTBYNAME_R /**/ -| #define GETHOSTBYNAMERSTYLE_GNU /**/ -| #define HAVE_LIBCRYPT 1 -| #define LITTLE_ENDIAN 1 -| #define HAVE_DIRENT_H 1 -| #define STDC_HEADERS 1 -| #define HAVE_CRYPT_H 1 -| #define HAVE_SIGNAL_H 1 -| #define HAVE_SYS_SIGNAL_H 1 -| #define HAVE_SYS_STAT_H 1 -| #define HAVE_FCNTL_H 1 -| #define HAVE_SYS_FCNTL_H 1 -| #define HAVE_SYS_UTSNAME_H 1 -| #define HAVE_GETOPT_H 1 -| #define HAVE_UNISTD_H 1 -| #define HAVE_SYS_FILE_H 1 -| #define HAVE_TERMIOS_H 1 -| #define HAVE_SYS_IOCTL_H 1 -| #define HAVE_NETDB_H 1 -| #define HAVE_SYSLOG_H 1 -| #define HAVE_PWD_H 1 -| #define HAVE_SYS_SOCKET_H 1 -| #define HAVE_NETINET_IN_H 1 -| #define HAVE_ARPA_INET_H 1 -| #define TIME_WITH_SYS_TIME 1 -| #define RETSIGTYPE void -| #define HAVE_STRFTIME 1 -| #define HAVE_ALLOCA_H 1 -| #define HAVE_ALLOCA 1 -| #define HAVE_STRDUP 1 -| #define HAVE_STRERROR 1 -| #define HAVE_STRCASECMP 1 -| #define HAVE_FLOCK 1 -| #define HAVE_FCNTL 1 -| #define HAVE_UNAME 1 -| #define HAVE_GETHOSTNAME 1 -| #define HAVE_SYSINFO 1 -| #define HAVE_GETDOMAINNAME 1 -| #define HAVE_RANDOM 1 -| #define HAVE_RAND 1 -| #define HAVE_SNPRINTF 1 -| #define HAVE_VSNPRINTF 1 -| /* end confdefs.h. */ -| -| #include -| -| main(int argc, char **argv) -| { -| struct utsname uts; -| uts.domainname[0] = '\0'; -| } -| -configure:12874: result: no -configure:12884: checking for /dev/urandom -configure:12888: result: yes -configure:12908: result: /bin:/usr/bin:/usr/local/bin -configure:12916: checking which syslog facility to use -configure:12928: result: LOG_DAEMON -configure:12936: checking whether to include Livingston's RADIUS server 1.16 kludge -configure:12958: result: no -configure:12965: checking whether to add service type hints derived from username prefix -configure:12977: result: no -configure:13131: creating ./config.status - -## ---------------------- ## -## Running config.status. ## -## ---------------------- ## - -This file was extended by config.status, which was -generated by GNU Autoconf 2.65. Invocation command line was - - CONFIG_FILES = - CONFIG_HEADERS = - CONFIG_LINKS = - CONFIG_COMMANDS = - $ ./config.status - -on neo - -config.status:1133: creating Makefile -config.status:1133: creating include/Makefile -config.status:1133: creating lib/Makefile -config.status:1133: creating src/Makefile -config.status:1133: creating man/Makefile -config.status:1133: creating etc/Makefile -config.status:1133: creating doc/Makefile -config.status:1133: creating patches/Makefile -config.status:1133: creating login.radius/Makefile -config.status:1133: creating login.radius/migs/Makefile -config.status:1133: creating rpm/Makefile -config.status:1133: creating debian/Makefile -config.status:1133: creating config.h -config.status:1353: executing depfiles commands -config.status:1353: executing libtool commands -config.status:1353: executing default commands - -## ---------------- ## -## Cache variables. ## -## ---------------- ## - -ac_cv_build=i686-pc-linux-gnu -ac_cv_c_bigendian=no -ac_cv_c_compiler_gnu=yes -ac_cv_c_const=yes -ac_cv_env_CC_set= -ac_cv_env_CC_value= -ac_cv_env_CFLAGS_set= -ac_cv_env_CFLAGS_value= -ac_cv_env_CPPFLAGS_set= -ac_cv_env_CPPFLAGS_value= -ac_cv_env_CPP_set= -ac_cv_env_CPP_value= -ac_cv_env_LDFLAGS_set= -ac_cv_env_LDFLAGS_value= -ac_cv_env_LIBS_set= -ac_cv_env_LIBS_value= -ac_cv_env_build_alias_set= -ac_cv_env_build_alias_value= -ac_cv_env_host_alias_set= -ac_cv_env_host_alias_value= -ac_cv_env_target_alias_set= -ac_cv_env_target_alias_value= -ac_cv_func_alloca_works=yes -ac_cv_func_fcntl=yes -ac_cv_func_flock=yes -ac_cv_func_getdomainname=yes -ac_cv_func_gethostname=yes -ac_cv_func_memcmp_working=yes -ac_cv_func_rand=yes -ac_cv_func_random=yes -ac_cv_func_setvbuf_reversed=no -ac_cv_func_snprintf=yes -ac_cv_func_strcasecmp=yes -ac_cv_func_strdup=yes -ac_cv_func_strerror=yes -ac_cv_func_strftime=yes -ac_cv_func_stricmp=no -ac_cv_func_sysinfo=yes -ac_cv_func_uname=yes -ac_cv_func_vsnprintf=yes -ac_cv_header_arpa_inet_h=yes -ac_cv_header_crypt_h=yes -ac_cv_header_dirent_dirent_h=yes -ac_cv_header_dlfcn_h=yes -ac_cv_header_fcntl_h=yes -ac_cv_header_getopt_h=yes -ac_cv_header_inttypes_h=yes -ac_cv_header_memory_h=yes -ac_cv_header_netdb_h=yes -ac_cv_header_netinet_in_h=yes -ac_cv_header_pwd_h=yes -ac_cv_header_signal_h=yes -ac_cv_header_stdc=yes -ac_cv_header_stdint_h=yes -ac_cv_header_stdlib_h=yes -ac_cv_header_string_h=yes -ac_cv_header_strings_h=yes -ac_cv_header_sys_fcntl_h=yes -ac_cv_header_sys_file_h=yes -ac_cv_header_sys_ioctl_h=yes -ac_cv_header_sys_signal_h=yes -ac_cv_header_sys_socket_h=yes -ac_cv_header_sys_stat_h=yes -ac_cv_header_sys_types_h=yes -ac_cv_header_sys_utsname_h=yes -ac_cv_header_syslog_h=yes -ac_cv_header_termios_h=yes -ac_cv_header_time=yes -ac_cv_header_unistd_h=yes -ac_cv_host=i686-pc-linux-gnu -ac_cv_lib_crypt_crypt=yes -ac_cv_lib_nsl_gethostbyaddr=yes -ac_cv_lib_socket_socket=no -ac_cv_objext=o -ac_cv_path_AR=/usr/bin/ar -ac_cv_path_EGREP='/bin/grep -E' -ac_cv_path_FGREP='/bin/grep -F' -ac_cv_path_GREP=/bin/grep -ac_cv_path_SED=/bin/sed -ac_cv_path_install='/usr/bin/install -c' -ac_cv_path_mkdir=/bin/mkdir -ac_cv_prog_AWK=gawk -ac_cv_prog_CPP='gcc -E' -ac_cv_prog_ac_ct_AR=ar -ac_cv_prog_ac_ct_CC=gcc -ac_cv_prog_ac_ct_OBJDUMP=objdump -ac_cv_prog_ac_ct_RANLIB=ranlib -ac_cv_prog_ac_ct_STRIP=strip -ac_cv_prog_cc_c89= -ac_cv_prog_cc_g=yes -ac_cv_prog_gcc_traditional=no -ac_cv_prog_make_make_set=yes -ac_cv_search_opendir='none required' -ac_cv_struct_tm=time.h -ac_cv_target=i686-pc-linux-gnu -ac_cv_type_off_t=yes -ac_cv_type_signal=void -ac_cv_type_size_t=yes -ac_cv_working_alloca_h=yes -am_cv_CC_dependencies_compiler_type=gcc3 -lt_cv_deplibs_check_method=pass_all -lt_cv_file_magic_cmd='$MAGIC_CMD' -lt_cv_file_magic_test_file= -lt_cv_ld_reload_flag=-r -lt_cv_nm_interface='BSD nm' -lt_cv_objdir=.libs -lt_cv_path_LD=/usr/bin/ld -lt_cv_path_NM='/usr/bin/nm -B' -lt_cv_prog_compiler_c_o=yes -lt_cv_prog_compiler_pic_works=yes -lt_cv_prog_compiler_rtti_exceptions=no -lt_cv_prog_compiler_static_works=yes -lt_cv_prog_gnu_ld=yes -lt_cv_sys_global_symbol_pipe='sed -n -e '\''s/^.*[ ]\([ABCDGIRSTW][ABCDGIRSTW]*\)[ ][ ]*\([_A-Za-z][_A-Za-z0-9]*\)$/\1 \2 \2/p'\''' -lt_cv_sys_global_symbol_to_c_name_address='sed -n -e '\''s/^: \([^ ]*\) $/ {\"\1\", (void *) 0},/p'\'' -e '\''s/^[ABCDGIRSTW]* \([^ ]*\) \([^ ]*\)$/ {"\2", (void *) \&\2},/p'\''' -lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='sed -n -e '\''s/^: \([^ ]*\) $/ {\"\1\", (void *) 0},/p'\'' -e '\''s/^[ABCDGIRSTW]* \([^ ]*\) \(lib[^ ]*\)$/ {"\2", (void *) \&\2},/p'\'' -e '\''s/^[ABCDGIRSTW]* \([^ ]*\) \([^ ]*\)$/ {"lib\2", (void *) \&\2},/p'\''' -lt_cv_sys_global_symbol_to_cdecl='sed -n -e '\''s/^T .* \(.*\)$/extern int \1();/p'\'' -e '\''s/^[ABCDGIRSTW]* .* \(.*\)$/extern char \1;/p'\''' -lt_cv_sys_max_cmd_len=1572864 - -## ----------------- ## -## Output variables. ## -## ----------------- ## - -ACLOCAL='${SHELL} /usr/local/src/freeradius-client-1.1.6/missing --run aclocal-1.11' -ALLOCA='' -AMDEPBACKSLASH='\' -AMDEP_FALSE='#' -AMDEP_TRUE='' -AMTAR='${SHELL} /usr/local/src/freeradius-client-1.1.6/missing --run tar' -AR='/usr/bin/ar' -AUTOCONF='${SHELL} /usr/local/src/freeradius-client-1.1.6/missing --run autoconf' -AUTOHEADER='${SHELL} /usr/local/src/freeradius-client-1.1.6/missing --run autoheader' -AUTOMAKE='${SHELL} /usr/local/src/freeradius-client-1.1.6/missing --run automake-1.11' -AWK='gawk' -CC='gcc' -CCDEPMODE='depmode=gcc3' -CFLAGS='-g -O2' -CPP='gcc -E' -CPPFLAGS='' -CYGPATH_W='echo' -DEFS='-DHAVE_CONFIG_H' -DEPDIR='.deps' -DSYMUTIL='' -DUMPBIN='' -ECHO_C='' -ECHO_N='-n' -ECHO_T='' -EGREP='/bin/grep -E' -EXEEXT='' -FGREP='/bin/grep -F' -GREP='/bin/grep' -INSTALL_DATA='${INSTALL} -m 644' -INSTALL_PROGRAM='${INSTALL}' -INSTALL_SCRIPT='${INSTALL}' -INSTALL_STRIP_PROGRAM='$(install_sh) -c -s' -LD='/usr/bin/ld' -LDFLAGS='' -LIBOBJS='' -LIBS='-lcrypt -lnsl ' -LIBTOOL='$(SHELL) $(top_builddir)/libtool' -LIBVERSION='2:0:0' -LIPO='' -LN_S='ln -s' -LTLIBOBJS='' -MAINT='#' -MAINTAINER_MODE_FALSE='' -MAINTAINER_MODE_TRUE='#' -MAKEINFO='${SHELL} /usr/local/src/freeradius-client-1.1.6/missing --run makeinfo' -MKDIR_P='/bin/mkdir -p' -NM='/usr/bin/nm -B' -NMEDIT='' -OBJDUMP='objdump' -OBJEXT='o' -OTOOL64='' -OTOOL='' -PACKAGE='radiusclient' -PACKAGE_BUGREPORT='' -PACKAGE_NAME='' -PACKAGE_STRING='' -PACKAGE_TARNAME='' -PACKAGE_URL='' -PACKAGE_VERSION='' -PATH_SEPARATOR=':' -RANLIB='ranlib' -RC_LOG_FACILITY='LOG_DAEMON' -RC_SECURE_PATH='/bin:/usr/bin:/usr/local/bin' -SED='/bin/sed' -SET_MAKE='' -SHELL='/bin/bash' -STRIP='strip' -VERSION='1.1.6' -ac_ct_CC='gcc' -ac_ct_DUMPBIN='' -am__EXEEXT_FALSE='' -am__EXEEXT_TRUE='#' -am__fastdepCC_FALSE='#' -am__fastdepCC_TRUE='' -am__include='include' -am__isrc='' -am__leading_dot='.' -am__quote='' -am__tar='${AMTAR} chof - "$$tardir"' -am__untar='${AMTAR} xf -' -bindir='${exec_prefix}/bin' -build='i686-pc-linux-gnu' -build_alias='' -build_cpu='i686' -build_os='linux-gnu' -build_vendor='pc' -datadir='${datarootdir}' -datarootdir='${prefix}/share' -docdir='${datarootdir}/doc/${PACKAGE}' -dvidir='${docdir}' -exec_prefix='${prefix}' -host='i686-pc-linux-gnu' -host_alias='' -host_cpu='i686' -host_os='linux-gnu' -host_vendor='pc' -htmldir='${docdir}' -includedir='${prefix}/include' -infodir='${datarootdir}/info' -install_sh='${SHELL} /usr/local/src/freeradius-client-1.1.6/install-sh' -libdir='${exec_prefix}/lib' -libexecdir='${exec_prefix}/libexec' -localedir='${datarootdir}/locale' -localstatedir='${prefix}/var' -lt_ECHO='echo' -mandir='${datarootdir}/man' -mkdir_p='/bin/mkdir -p' -oldincludedir='/usr/include' -pdfdir='${docdir}' -pkgsysconfdir='${prefix}/etc/radiusclient' -prefix='/usr/local' -program_transform_name='s,x,x,' -psdir='${docdir}' -sbindir='${exec_prefix}/sbin' -sharedstatedir='${prefix}/com' -sysconfdir='${prefix}/etc' -target='i686-pc-linux-gnu' -target_alias='' -target_cpu='i686' -target_os='linux-gnu' -target_vendor='pc' - -## ----------- ## -## confdefs.h. ## -## ----------- ## - -/* confdefs.h */ -#define PACKAGE_NAME "" -#define PACKAGE_TARNAME "" -#define PACKAGE_VERSION "" -#define PACKAGE_STRING "" -#define PACKAGE_BUGREPORT "" -#define PACKAGE_URL "" -#define PACKAGE "radiusclient" -#define VERSION "1.1.6" -#define STDC_HEADERS 1 -#define HAVE_SYS_TYPES_H 1 -#define HAVE_SYS_STAT_H 1 -#define HAVE_STDLIB_H 1 -#define HAVE_STRING_H 1 -#define HAVE_MEMORY_H 1 -#define HAVE_STRINGS_H 1 -#define HAVE_INTTYPES_H 1 -#define HAVE_STDINT_H 1 -#define HAVE_UNISTD_H 1 -#define HAVE_DLFCN_H 1 -#define LT_OBJDIR ".libs/" -#define HAVE_LIBNSL 1 -#define GETHOSTBYADDR_R 1 -#define GETHOSTBYADDRRSTYLE_GNU /**/ -#define GETHOSTBYNAME_R /**/ -#define GETHOSTBYNAMERSTYLE_GNU /**/ -#define HAVE_LIBCRYPT 1 -#define LITTLE_ENDIAN 1 -#define HAVE_DIRENT_H 1 -#define STDC_HEADERS 1 -#define HAVE_CRYPT_H 1 -#define HAVE_SIGNAL_H 1 -#define HAVE_SYS_SIGNAL_H 1 -#define HAVE_SYS_STAT_H 1 -#define HAVE_FCNTL_H 1 -#define HAVE_SYS_FCNTL_H 1 -#define HAVE_SYS_UTSNAME_H 1 -#define HAVE_GETOPT_H 1 -#define HAVE_UNISTD_H 1 -#define HAVE_SYS_FILE_H 1 -#define HAVE_TERMIOS_H 1 -#define HAVE_SYS_IOCTL_H 1 -#define HAVE_NETDB_H 1 -#define HAVE_SYSLOG_H 1 -#define HAVE_PWD_H 1 -#define HAVE_SYS_SOCKET_H 1 -#define HAVE_NETINET_IN_H 1 -#define HAVE_ARPA_INET_H 1 -#define TIME_WITH_SYS_TIME 1 -#define RETSIGTYPE void -#define HAVE_STRFTIME 1 -#define HAVE_ALLOCA_H 1 -#define HAVE_ALLOCA 1 -#define HAVE_STRDUP 1 -#define HAVE_STRERROR 1 -#define HAVE_STRCASECMP 1 -#define HAVE_FLOCK 1 -#define HAVE_FCNTL 1 -#define HAVE_UNAME 1 -#define HAVE_GETHOSTNAME 1 -#define HAVE_SYSINFO 1 -#define HAVE_GETDOMAINNAME 1 -#define HAVE_RANDOM 1 -#define HAVE_RAND 1 -#define HAVE_SNPRINTF 1 -#define HAVE_VSNPRINTF 1 -#define HAVE_DEV_URANDOM 1 - -configure: exit 0 diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/config.status b/openair3/PMIPv6/freeradius-client-1.1.6/config.status deleted file mode 100755 index ce61cc12bd..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/config.status +++ /dev/null @@ -1,2096 +0,0 @@ -#! /bin/bash -# Generated by configure. -# Run this file to recreate the current configuration. -# Compiler output produced by configure, useful for debugging -# configure, is in config.log if it exists. - -debug=false -ac_cs_recheck=false -ac_cs_silent=false - -SHELL=${CONFIG_SHELL-/bin/bash} -export SHELL -## -------------------- ## -## M4sh Initialization. ## -## -------------------- ## - -# Be more Bourne compatible -DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : - emulate sh - NULLCMD=: - # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in #( - *posix*) : - set -o posix ;; #( - *) : - ;; -esac -fi - - -as_nl=' -' -export as_nl -# Printing a long string crashes Solaris 7 /usr/bin/printf. -as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo -# Prefer a ksh shell builtin over an external printf program on Solaris, -# but without wasting forks for bash or zsh. -if test -z "$BASH_VERSION$ZSH_VERSION" \ - && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='print -r --' - as_echo_n='print -rn --' -elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='printf %s\n' - as_echo_n='printf %s' -else - if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then - as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' - as_echo_n='/usr/ucb/echo -n' - else - as_echo_body='eval expr "X$1" : "X\\(.*\\)"' - as_echo_n_body='eval - arg=$1; - case $arg in #( - *"$as_nl"*) - expr "X$arg" : "X\\(.*\\)$as_nl"; - arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; - esac; - expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" - ' - export as_echo_n_body - as_echo_n='sh -c $as_echo_n_body as_echo' - fi - export as_echo_body - as_echo='sh -c $as_echo_body as_echo' -fi - -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - PATH_SEPARATOR=: - (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { - (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || - PATH_SEPARATOR=';' - } -fi - - -# IFS -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent editors from complaining about space-tab. -# (If _AS_PATH_WALK were called with IFS unset, it would disable word -# splitting by setting IFS to empty value.) -IFS=" "" $as_nl" - -# Find who we are. Look in the path if we contain no directory separator. -case $0 in #(( - *[\\/]* ) as_myself=$0 ;; - *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break - done -IFS=$as_save_IFS - - ;; -esac -# We did not find ourselves, most probably we were run as `sh COMMAND' -# in which case we are not to be found in the path. -if test "x$as_myself" = x; then - as_myself=$0 -fi -if test ! -f "$as_myself"; then - $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 - exit 1 -fi - -# Unset variables that we do not need and which cause bugs (e.g. in -# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" -# suppresses any "Segmentation fault" message there. '((' could -# trigger a bug in pdksh 5.2.14. -for as_var in BASH_ENV ENV MAIL MAILPATH -do eval test x\${$as_var+set} = xset \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# CDPATH. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - - -# as_fn_error ERROR [LINENO LOG_FD] -# --------------------------------- -# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are -# provided, also output the error to LOG_FD, referencing LINENO. Then exit the -# script with status $?, using 1 if that was 0. -as_fn_error () -{ - as_status=$?; test $as_status -eq 0 && as_status=1 - if test "$3"; then - as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3 - fi - $as_echo "$as_me: error: $1" >&2 - as_fn_exit $as_status -} # as_fn_error - - -# as_fn_set_status STATUS -# ----------------------- -# Set $? to STATUS, without forking. -as_fn_set_status () -{ - return $1 -} # as_fn_set_status - -# as_fn_exit STATUS -# ----------------- -# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. -as_fn_exit () -{ - set +e - as_fn_set_status $1 - exit $1 -} # as_fn_exit - -# as_fn_unset VAR -# --------------- -# Portably unset VAR. -as_fn_unset () -{ - { eval $1=; unset $1;} -} -as_unset=as_fn_unset -# as_fn_append VAR VALUE -# ---------------------- -# Append the text in VALUE to the end of the definition contained in VAR. Take -# advantage of any shell optimizations that allow amortized linear growth over -# repeated appends, instead of the typical quadratic growth present in naive -# implementations. -if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : - eval 'as_fn_append () - { - eval $1+=\$2 - }' -else - as_fn_append () - { - eval $1=\$$1\$2 - } -fi # as_fn_append - -# as_fn_arith ARG... -# ------------------ -# Perform arithmetic evaluation on the ARGs, and store the result in the -# global $as_val. Take advantage of shells that can avoid forks. The arguments -# must be portable across $(()) and expr. -if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : - eval 'as_fn_arith () - { - as_val=$(( $* )) - }' -else - as_fn_arith () - { - as_val=`expr "$@" || test $? -eq 1` - } -fi # as_fn_arith - - -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi - -if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then - as_basename=basename -else - as_basename=false -fi - -if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then - as_dirname=dirname -else - as_dirname=false -fi - -as_me=`$as_basename -- "$0" || -$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X/"$0" | - sed '/^.*\/\([^/][^/]*\)\/*$/{ - s//\1/ - q - } - /^X\/\(\/\/\)$/{ - s//\1/ - q - } - /^X\/\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - -# Avoid depending upon Character Ranges. -as_cr_letters='abcdefghijklmnopqrstuvwxyz' -as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' -as_cr_Letters=$as_cr_letters$as_cr_LETTERS -as_cr_digits='0123456789' -as_cr_alnum=$as_cr_Letters$as_cr_digits - -ECHO_C= ECHO_N= ECHO_T= -case `echo -n x` in #((((( --n*) - case `echo 'xy\c'` in - *c*) ECHO_T=' ';; # ECHO_T is single tab character. - xy) ECHO_C='\c';; - *) echo `echo ksh88 bug on AIX 6.1` > /dev/null - ECHO_T=' ';; - esac;; -*) - ECHO_N='-n';; -esac - -rm -f conf$$ conf$$.exe conf$$.file -if test -d conf$$.dir; then - rm -f conf$$.dir/conf$$.file -else - rm -f conf$$.dir - mkdir conf$$.dir 2>/dev/null -fi -if (echo >conf$$.file) 2>/dev/null; then - if ln -s conf$$.file conf$$ 2>/dev/null; then - as_ln_s='ln -s' - # ... but there are two gotchas: - # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -p'. - ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || - as_ln_s='cp -p' - elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln - else - as_ln_s='cp -p' - fi -else - as_ln_s='cp -p' -fi -rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file -rmdir conf$$.dir 2>/dev/null - - -# as_fn_mkdir_p -# ------------- -# Create "$as_dir" as a directory, including parents if necessary. -as_fn_mkdir_p () -{ - - case $as_dir in #( - -*) as_dir=./$as_dir;; - esac - test -d "$as_dir" || eval $as_mkdir_p || { - as_dirs= - while :; do - case $as_dir in #( - *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( - *) as_qdir=$as_dir;; - esac - as_dirs="'$as_qdir' $as_dirs" - as_dir=`$as_dirname -- "$as_dir" || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - test -d "$as_dir" && break - done - test -z "$as_dirs" || eval "mkdir $as_dirs" - } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir" - - -} # as_fn_mkdir_p -if mkdir -p . 2>/dev/null; then - as_mkdir_p='mkdir -p "$as_dir"' -else - test -d ./-p && rmdir ./-p - as_mkdir_p=false -fi - -if test -x / >/dev/null 2>&1; then - as_test_x='test -x' -else - if ls -dL / >/dev/null 2>&1; then - as_ls_L_option=L - else - as_ls_L_option= - fi - as_test_x=' - eval sh -c '\'' - if test -d "$1"; then - test -d "$1/."; - else - case $1 in #( - -*)set "./$1";; - esac; - case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( - ???[sx]*):;;*)false;;esac;fi - '\'' sh - ' -fi -as_executable_p=$as_test_x - -# Sed expression to map a string onto a valid CPP name. -as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" - -# Sed expression to map a string onto a valid variable name. -as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" - - -exec 6>&1 -## ----------------------------------- ## -## Main body of $CONFIG_STATUS script. ## -## ----------------------------------- ## -# Save the log message, to keep $0 and so on meaningful, and to -# report actual input values of CONFIG_FILES etc. instead of their -# values after options handling. -ac_log=" -This file was extended by $as_me, which was -generated by GNU Autoconf 2.65. Invocation command line was - - CONFIG_FILES = $CONFIG_FILES - CONFIG_HEADERS = $CONFIG_HEADERS - CONFIG_LINKS = $CONFIG_LINKS - CONFIG_COMMANDS = $CONFIG_COMMANDS - $ $0 $@ - -on `(hostname || uname -n) 2>/dev/null | sed 1q` -" - -# Files that config.status was made for. -config_files=" Makefile include/Makefile lib/Makefile src/Makefile man/Makefile etc/Makefile doc/Makefile patches/Makefile login.radius/Makefile login.radius/migs/Makefile rpm/Makefile debian/Makefile" -config_headers=" config.h" -config_commands=" depfiles libtool default" - -ac_cs_usage="\ -\`$as_me' instantiates files and other configuration actions -from templates according to the current configuration. Unless the files -and actions are specified as TAGs, all are instantiated by default. - -Usage: $0 [OPTION]... [TAG]... - - -h, --help print this help, then exit - -V, --version print version number and configuration settings, then exit - --config print configuration, then exit - -q, --quiet, --silent - do not print progress messages - -d, --debug don't remove temporary files - --recheck update $as_me by reconfiguring in the same conditions - --file=FILE[:TEMPLATE] - instantiate the configuration file FILE - --header=FILE[:TEMPLATE] - instantiate the configuration header FILE - -Configuration files: -$config_files - -Configuration headers: -$config_headers - -Configuration commands: -$config_commands - -Report bugs to the package provider." - -ac_cs_config="" -ac_cs_version="\ -config.status -configured by ./configure, generated by GNU Autoconf 2.65, - with options \"$ac_cs_config\" - -Copyright (C) 2009 Free Software Foundation, Inc. -This config.status script is free software; the Free Software Foundation -gives unlimited permission to copy, distribute and modify it." - -ac_pwd='/usr/local/src/freeradius-client-1.1.6' -srcdir='.' -INSTALL='/usr/bin/install -c' -MKDIR_P='/bin/mkdir -p' -AWK='gawk' -test -n "$AWK" || AWK=awk -# The default lists apply if the user does not specify any file. -ac_need_defaults=: -while test $# != 0 -do - case $1 in - --*=*) - ac_option=`expr "X$1" : 'X\([^=]*\)='` - ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` - ac_shift=: - ;; - *) - ac_option=$1 - ac_optarg=$2 - ac_shift=shift - ;; - esac - - case $ac_option in - # Handling of the options. - -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) - ac_cs_recheck=: ;; - --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) - $as_echo "$ac_cs_version"; exit ;; - --config | --confi | --conf | --con | --co | --c ) - $as_echo "$ac_cs_config"; exit ;; - --debug | --debu | --deb | --de | --d | -d ) - debug=: ;; - --file | --fil | --fi | --f ) - $ac_shift - case $ac_optarg in - *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; - esac - as_fn_append CONFIG_FILES " '$ac_optarg'" - ac_need_defaults=false;; - --header | --heade | --head | --hea ) - $ac_shift - case $ac_optarg in - *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; - esac - as_fn_append CONFIG_HEADERS " '$ac_optarg'" - ac_need_defaults=false;; - --he | --h) - # Conflict between --help and --header - as_fn_error "ambiguous option: \`$1' -Try \`$0 --help' for more information.";; - --help | --hel | -h ) - $as_echo "$ac_cs_usage"; exit ;; - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil | --si | --s) - ac_cs_silent=: ;; - - # This is an error. - -*) as_fn_error "unrecognized option: \`$1' -Try \`$0 --help' for more information." ;; - - *) as_fn_append ac_config_targets " $1" - ac_need_defaults=false ;; - - esac - shift -done - -ac_configure_extra_args= - -if $ac_cs_silent; then - exec 6>/dev/null - ac_configure_extra_args="$ac_configure_extra_args --silent" -fi - -if $ac_cs_recheck; then - set X '/bin/bash' './configure' $ac_configure_extra_args --no-create --no-recursion - shift - $as_echo "running CONFIG_SHELL=/bin/bash $*" >&6 - CONFIG_SHELL='/bin/bash' - export CONFIG_SHELL - exec "$@" -fi - -exec 5>>config.log -{ - echo - sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX -## Running $as_me. ## -_ASBOX - $as_echo "$ac_log" -} >&5 - -# -# INIT-COMMANDS -# -AMDEP_TRUE="" ac_aux_dir="." - - -# The HP-UX ksh and POSIX shell print the target directory to stdout -# if CDPATH is set. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -sed_quote_subst='s/\(["`$\\]\)/\\\1/g' -double_quote_subst='s/\(["`\\]\)/\\\1/g' -delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' -macro_version='2.2.6b' -macro_revision='1.3017' -enable_shared='yes' -enable_static='yes' -pic_mode='default' -enable_fast_install='yes' -host_alias='' -host='i686-pc-linux-gnu' -host_os='linux-gnu' -build_alias='' -build='i686-pc-linux-gnu' -build_os='linux-gnu' -SED='/bin/sed' -Xsed='/bin/sed -e 1s/^X//' -GREP='/bin/grep' -EGREP='/bin/grep -E' -FGREP='/bin/grep -F' -LD='/usr/bin/ld' -NM='/usr/bin/nm -B' -LN_S='ln -s' -max_cmd_len='1572864' -ac_objext='o' -exeext='' -lt_unset='unset' -lt_SP2NL='tr \040 \012' -lt_NL2SP='tr \015\012 \040\040' -reload_flag=' -r' -reload_cmds='$LD$reload_flag -o $output$reload_objs' -OBJDUMP='objdump' -deplibs_check_method='pass_all' -file_magic_cmd='$MAGIC_CMD' -AR='/usr/bin/ar' -AR_FLAGS='cru' -STRIP='strip' -RANLIB='ranlib' -old_postinstall_cmds='chmod 644 $oldlib~$RANLIB $oldlib' -old_postuninstall_cmds='' -old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs~$RANLIB $oldlib' -CC='gcc' -CFLAGS='-g -O2' -compiler='gcc' -GCC='yes' -lt_cv_sys_global_symbol_pipe='sed -n -e '\''s/^.*[ ]\([ABCDGIRSTW][ABCDGIRSTW]*\)[ ][ ]*\([_A-Za-z][_A-Za-z0-9]*\)$/\1 \2 \2/p'\''' -lt_cv_sys_global_symbol_to_cdecl='sed -n -e '\''s/^T .* \(.*\)$/extern int \1();/p'\'' -e '\''s/^[ABCDGIRSTW]* .* \(.*\)$/extern char \1;/p'\''' -lt_cv_sys_global_symbol_to_c_name_address='sed -n -e '\''s/^: \([^ ]*\) $/ {\"\1\", (void *) 0},/p'\'' -e '\''s/^[ABCDGIRSTW]* \([^ ]*\) \([^ ]*\)$/ {"\2", (void *) \&\2},/p'\''' -lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='sed -n -e '\''s/^: \([^ ]*\) $/ {\"\1\", (void *) 0},/p'\'' -e '\''s/^[ABCDGIRSTW]* \([^ ]*\) \(lib[^ ]*\)$/ {"\2", (void *) \&\2},/p'\'' -e '\''s/^[ABCDGIRSTW]* \([^ ]*\) \([^ ]*\)$/ {"lib\2", (void *) \&\2},/p'\''' -objdir='.libs' -SHELL='/bin/bash' -ECHO='echo' -MAGIC_CMD='file' -lt_prog_compiler_no_builtin_flag=' -fno-builtin' -lt_prog_compiler_wl='-Wl,' -lt_prog_compiler_pic=' -fPIC -DPIC' -lt_prog_compiler_static='-static' -lt_cv_prog_compiler_c_o='yes' -need_locks='no' -DSYMUTIL='' -NMEDIT='' -LIPO='' -OTOOL='' -OTOOL64='' -libext='a' -shrext_cmds='.so' -extract_expsyms_cmds='' -archive_cmds_need_lc='no' -enable_shared_with_static_runtimes='no' -export_dynamic_flag_spec='${wl}--export-dynamic' -whole_archive_flag_spec='${wl}--whole-archive$convenience ${wl}--no-whole-archive' -compiler_needs_object='no' -old_archive_from_new_cmds='' -old_archive_from_expsyms_cmds='' -archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' -archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - echo "local: *; };" >> $output_objdir/$libname.ver~ - $CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' -module_cmds='' -module_expsym_cmds='' -with_gnu_ld='yes' -allow_undefined_flag='' -no_undefined_flag='' -hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' -hardcode_libdir_flag_spec_ld='' -hardcode_libdir_separator='' -hardcode_direct='no' -hardcode_direct_absolute='no' -hardcode_minus_L='no' -hardcode_shlibpath_var='unsupported' -hardcode_automatic='no' -inherit_rpath='no' -link_all_deplibs='no' -fix_srcfile_path='' -always_export_symbols='no' -export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' -exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' -include_expsyms='' -prelink_cmds='' -file_list_spec='' -variables_saved_for_relink='PATH LD_LIBRARY_PATH LD_RUN_PATH GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH' -need_lib_prefix='no' -need_version='no' -version_type='linux' -runpath_var='LD_RUN_PATH' -shlibpath_var='LD_LIBRARY_PATH' -shlibpath_overrides_runpath='no' -libname_spec='lib$name' -library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' -soname_spec='${libname}${release}${shared_ext}$major' -postinstall_cmds='' -postuninstall_cmds='' -finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' -finish_eval='' -hardcode_into_libs='yes' -sys_lib_search_path_spec='/usr/lib/gcc/i486-linux-gnu/4.4.3 /usr/lib /lib /usr/lib/i486-linux-gnu' -sys_lib_dlsearch_path_spec='/lib /usr/lib /usr/lib/mesa /lib/i486-linux-gnu /usr/lib/i486-linux-gnu /usr/lib/alsa-lib /usr/local/lib ' -hardcode_action='immediate' -enable_dlopen='unknown' -enable_dlopen_self='unknown' -enable_dlopen_self_static='unknown' -old_striplib='strip --strip-debug' -striplib='strip --strip-unneeded' - -LTCC='gcc' -LTCFLAGS='-g -O2' -compiler='gcc' - -# Quote evaled strings. -for var in SED GREP EGREP FGREP LD NM LN_S lt_SP2NL lt_NL2SP reload_flag OBJDUMP deplibs_check_method file_magic_cmd AR AR_FLAGS STRIP RANLIB CC CFLAGS compiler lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl lt_cv_sys_global_symbol_to_c_name_address lt_cv_sys_global_symbol_to_c_name_address_lib_prefix SHELL ECHO lt_prog_compiler_no_builtin_flag lt_prog_compiler_wl lt_prog_compiler_pic lt_prog_compiler_static lt_cv_prog_compiler_c_o need_locks DSYMUTIL NMEDIT LIPO OTOOL OTOOL64 shrext_cmds export_dynamic_flag_spec whole_archive_flag_spec compiler_needs_object with_gnu_ld allow_undefined_flag no_undefined_flag hardcode_libdir_flag_spec hardcode_libdir_flag_spec_ld hardcode_libdir_separator fix_srcfile_path exclude_expsyms include_expsyms file_list_spec variables_saved_for_relink libname_spec library_names_spec soname_spec finish_eval old_striplib striplib; do - case `eval \\$ECHO "X\\$$var"` in - *[\\\`\"\$]*) - eval "lt_$var=\\\"\`\$ECHO \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" - ;; - *) - eval "lt_$var=\\\"\$$var\\\"" - ;; - esac -done - -# Double-quote double-evaled strings. -for var in reload_cmds old_postinstall_cmds old_postuninstall_cmds old_archive_cmds extract_expsyms_cmds old_archive_from_new_cmds old_archive_from_expsyms_cmds archive_cmds archive_expsym_cmds module_cmds module_expsym_cmds export_symbols_cmds prelink_cmds postinstall_cmds postuninstall_cmds finish_cmds sys_lib_search_path_spec sys_lib_dlsearch_path_spec; do - case `eval \\$ECHO "X\\$$var"` in - *[\\\`\"\$]*) - eval "lt_$var=\\\"\`\$ECHO \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" - ;; - *) - eval "lt_$var=\\\"\$$var\\\"" - ;; - esac -done - -# Fix-up fallback echo if it was mangled by the above quoting rules. -case $lt_ECHO in -*'\$0 --fallback-echo"') lt_ECHO=`$ECHO "X$lt_ECHO" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` - ;; -esac - -ac_aux_dir='.' -xsi_shell='yes' -lt_shell_append='yes' - -# See if we are running on zsh, and set the options which allow our -# commands through without removal of \ escapes INIT. -if test -n "${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST -fi - - - PACKAGE='radiusclient' - VERSION='1.1.6' - TIMESTAMP='' - RM='rm -f' - ofile='libtool' - - - - - - -# Handling of arguments. -for ac_config_target in $ac_config_targets -do - case $ac_config_target in - "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; - "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; - "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; - "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; - "include/Makefile") CONFIG_FILES="$CONFIG_FILES include/Makefile" ;; - "lib/Makefile") CONFIG_FILES="$CONFIG_FILES lib/Makefile" ;; - "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; - "man/Makefile") CONFIG_FILES="$CONFIG_FILES man/Makefile" ;; - "etc/Makefile") CONFIG_FILES="$CONFIG_FILES etc/Makefile" ;; - "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; - "patches/Makefile") CONFIG_FILES="$CONFIG_FILES patches/Makefile" ;; - "login.radius/Makefile") CONFIG_FILES="$CONFIG_FILES login.radius/Makefile" ;; - "login.radius/migs/Makefile") CONFIG_FILES="$CONFIG_FILES login.radius/migs/Makefile" ;; - "rpm/Makefile") CONFIG_FILES="$CONFIG_FILES rpm/Makefile" ;; - "debian/Makefile") CONFIG_FILES="$CONFIG_FILES debian/Makefile" ;; - "default") CONFIG_COMMANDS="$CONFIG_COMMANDS default" ;; - - *) as_fn_error "invalid argument: \`$ac_config_target'" "$LINENO" 5;; - esac -done - - -# If the user did not use the arguments to specify the items to instantiate, -# then the envvar interface is used. Set only those that are not. -# We use the long form for the default assignment because of an extremely -# bizarre bug on SunOS 4.1.3. -if $ac_need_defaults; then - test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files - test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers - test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands -fi - -# Have a temporary directory for convenience. Make it in the build tree -# simply because there is no reason against having it here, and in addition, -# creating and moving files from /tmp can sometimes cause problems. -# Hook for its removal unless debugging. -# Note that there is a small window in which the directory will not be cleaned: -# after its creation but before its name has been assigned to `$tmp'. -$debug || -{ - tmp= - trap 'exit_status=$? - { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status -' 0 - trap 'as_fn_exit 1' 1 2 13 15 -} -# Create a (secure) tmp directory for tmp files. - -{ - tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && - test -n "$tmp" && test -d "$tmp" -} || -{ - tmp=./conf$$-$RANDOM - (umask 077 && mkdir "$tmp") -} || as_fn_error "cannot create a temporary directory in ." "$LINENO" 5 - -# Set up the scripts for CONFIG_FILES section. -# No need to generate them if there are no CONFIG_FILES. -# This happens for instance with `./config.status config.h'. -if test -n "$CONFIG_FILES"; then - - -ac_cr=`echo X | tr X '\015'` -# On cygwin, bash can eat \r inside `` if the user requested igncr. -# But we know of no other shell where ac_cr would be empty at this -# point, so we can use a bashism as a fallback. -if test "x$ac_cr" = x; then - eval ac_cr=\$\'\\r\' -fi -ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` -if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then - ac_cs_awk_cr='\r' -else - ac_cs_awk_cr=$ac_cr -fi - -echo 'BEGIN {' >"$tmp/subs1.awk" && -cat >>"$tmp/subs1.awk" <<\_ACAWK && -S["am__EXEEXT_FALSE"]="" -S["am__EXEEXT_TRUE"]="#" -S["LTLIBOBJS"]="" -S["RC_LOG_FACILITY"]="LOG_DAEMON" -S["RC_SECURE_PATH"]="/bin:/usr/bin:/usr/local/bin" -S["ALLOCA"]="" -S["LIBOBJS"]="" -S["CPP"]="gcc -E" -S["OTOOL64"]="" -S["OTOOL"]="" -S["LIPO"]="" -S["NMEDIT"]="" -S["DSYMUTIL"]="" -S["lt_ECHO"]="echo" -S["RANLIB"]="ranlib" -S["AR"]="/usr/bin/ar" -S["OBJDUMP"]="objdump" -S["LN_S"]="ln -s" -S["NM"]="/usr/bin/nm -B" -S["ac_ct_DUMPBIN"]="" -S["DUMPBIN"]="" -S["LD"]="/usr/bin/ld" -S["FGREP"]="/bin/grep -F" -S["EGREP"]="/bin/grep -E" -S["GREP"]="/bin/grep" -S["SED"]="/bin/sed" -S["am__fastdepCC_FALSE"]="#" -S["am__fastdepCC_TRUE"]="" -S["CCDEPMODE"]="depmode=gcc3" -S["AMDEPBACKSLASH"]="\\" -S["AMDEP_FALSE"]="#" -S["AMDEP_TRUE"]="" -S["am__quote"]="" -S["am__include"]="include" -S["DEPDIR"]=".deps" -S["OBJEXT"]="o" -S["EXEEXT"]="" -S["ac_ct_CC"]="gcc" -S["CPPFLAGS"]="" -S["LDFLAGS"]="" -S["CFLAGS"]="-g -O2" -S["CC"]="gcc" -S["LIBTOOL"]="$(SHELL) $(top_builddir)/libtool" -S["pkgsysconfdir"]="${prefix}/etc/radiusclient" -S["LIBVERSION"]="2:0:0" -S["am__untar"]="${AMTAR} xf -" -S["am__tar"]="${AMTAR} chof - \"$$tardir\"" -S["AMTAR"]="${SHELL} /usr/local/src/freeradius-client-1.1.6/missing --run tar" -S["am__leading_dot"]="." -S["SET_MAKE"]="" -S["AWK"]="gawk" -S["mkdir_p"]="/bin/mkdir -p" -S["MKDIR_P"]="/bin/mkdir -p" -S["INSTALL_STRIP_PROGRAM"]="$(install_sh) -c -s" -S["STRIP"]="strip" -S["install_sh"]="${SHELL} /usr/local/src/freeradius-client-1.1.6/install-sh" -S["MAKEINFO"]="${SHELL} /usr/local/src/freeradius-client-1.1.6/missing --run makeinfo" -S["AUTOHEADER"]="${SHELL} /usr/local/src/freeradius-client-1.1.6/missing --run autoheader" -S["AUTOMAKE"]="${SHELL} /usr/local/src/freeradius-client-1.1.6/missing --run automake-1.11" -S["AUTOCONF"]="${SHELL} /usr/local/src/freeradius-client-1.1.6/missing --run autoconf" -S["ACLOCAL"]="${SHELL} /usr/local/src/freeradius-client-1.1.6/missing --run aclocal-1.11" -S["VERSION"]="1.1.6" -S["PACKAGE"]="radiusclient" -S["CYGPATH_W"]="echo" -S["am__isrc"]="" -S["INSTALL_DATA"]="${INSTALL} -m 644" -S["INSTALL_SCRIPT"]="${INSTALL}" -S["INSTALL_PROGRAM"]="${INSTALL}" -S["target_os"]="linux-gnu" -S["target_vendor"]="pc" -S["target_cpu"]="i686" -S["target"]="i686-pc-linux-gnu" -S["host_os"]="linux-gnu" -S["host_vendor"]="pc" -S["host_cpu"]="i686" -S["host"]="i686-pc-linux-gnu" -S["build_os"]="linux-gnu" -S["build_vendor"]="pc" -S["build_cpu"]="i686" -S["build"]="i686-pc-linux-gnu" -S["MAINT"]="#" -S["MAINTAINER_MODE_FALSE"]="" -S["MAINTAINER_MODE_TRUE"]="#" -S["target_alias"]="" -S["host_alias"]="" -S["build_alias"]="" -S["LIBS"]="-lcrypt -lnsl " -S["ECHO_T"]="" -S["ECHO_N"]="-n" -S["ECHO_C"]="" -S["DEFS"]="-DHAVE_CONFIG_H" -S["mandir"]="${datarootdir}/man" -S["localedir"]="${datarootdir}/locale" -S["libdir"]="${exec_prefix}/lib" -S["psdir"]="${docdir}" -S["pdfdir"]="${docdir}" -S["dvidir"]="${docdir}" -S["htmldir"]="${docdir}" -S["infodir"]="${datarootdir}/info" -S["docdir"]="${datarootdir}/doc/${PACKAGE}" -S["oldincludedir"]="/usr/include" -S["includedir"]="${prefix}/include" -S["localstatedir"]="${prefix}/var" -S["sharedstatedir"]="${prefix}/com" -S["sysconfdir"]="${prefix}/etc" -S["datadir"]="${datarootdir}" -S["datarootdir"]="${prefix}/share" -S["libexecdir"]="${exec_prefix}/libexec" -S["sbindir"]="${exec_prefix}/sbin" -S["bindir"]="${exec_prefix}/bin" -S["program_transform_name"]="s,x,x," -S["prefix"]="/usr/local" -S["exec_prefix"]="${prefix}" -S["PACKAGE_URL"]="" -S["PACKAGE_BUGREPORT"]="" -S["PACKAGE_STRING"]="" -S["PACKAGE_VERSION"]="" -S["PACKAGE_TARNAME"]="" -S["PACKAGE_NAME"]="" -S["PATH_SEPARATOR"]=":" -S["SHELL"]="/bin/bash" -_ACAWK -cat >>"$tmp/subs1.awk" <<_ACAWK && - for (key in S) S_is_set[key] = 1 - FS = "" - -} -{ - line = $ 0 - nfields = split(line, field, "@") - substed = 0 - len = length(field[1]) - for (i = 2; i < nfields; i++) { - key = field[i] - keylen = length(key) - if (S_is_set[key]) { - value = S[key] - line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) - len += length(value) + length(field[++i]) - substed = 1 - } else - len += 1 + keylen - } - - print line -} - -_ACAWK -if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then - sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" -else - cat -fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \ - || as_fn_error "could not setup config files machinery" "$LINENO" 5 -fi # test -n "$CONFIG_FILES" - -# Set up the scripts for CONFIG_HEADERS section. -# No need to generate them if there are no CONFIG_HEADERS. -# This happens for instance with `./config.status Makefile'. -if test -n "$CONFIG_HEADERS"; then -cat >"$tmp/defines.awk" <<\_ACAWK || -BEGIN { -D["PACKAGE_NAME"]=" \"\"" -D["PACKAGE_TARNAME"]=" \"\"" -D["PACKAGE_VERSION"]=" \"\"" -D["PACKAGE_STRING"]=" \"\"" -D["PACKAGE_BUGREPORT"]=" \"\"" -D["PACKAGE_URL"]=" \"\"" -D["PACKAGE"]=" \"radiusclient\"" -D["VERSION"]=" \"1.1.6\"" -D["STDC_HEADERS"]=" 1" -D["HAVE_SYS_TYPES_H"]=" 1" -D["HAVE_SYS_STAT_H"]=" 1" -D["HAVE_STDLIB_H"]=" 1" -D["HAVE_STRING_H"]=" 1" -D["HAVE_MEMORY_H"]=" 1" -D["HAVE_STRINGS_H"]=" 1" -D["HAVE_INTTYPES_H"]=" 1" -D["HAVE_STDINT_H"]=" 1" -D["HAVE_UNISTD_H"]=" 1" -D["HAVE_DLFCN_H"]=" 1" -D["LT_OBJDIR"]=" \".libs/\"" -D["HAVE_LIBNSL"]=" 1" -D["GETHOSTBYADDR_R"]=" 1" -D["GETHOSTBYADDRRSTYLE_GNU"]=" /**/" -D["GETHOSTBYNAME_R"]=" /**/" -D["GETHOSTBYNAMERSTYLE_GNU"]=" /**/" -D["HAVE_LIBCRYPT"]=" 1" -D["LITTLE_ENDIAN"]=" 1" -D["HAVE_DIRENT_H"]=" 1" -D["STDC_HEADERS"]=" 1" -D["HAVE_CRYPT_H"]=" 1" -D["HAVE_SIGNAL_H"]=" 1" -D["HAVE_SYS_SIGNAL_H"]=" 1" -D["HAVE_SYS_STAT_H"]=" 1" -D["HAVE_FCNTL_H"]=" 1" -D["HAVE_SYS_FCNTL_H"]=" 1" -D["HAVE_SYS_UTSNAME_H"]=" 1" -D["HAVE_GETOPT_H"]=" 1" -D["HAVE_UNISTD_H"]=" 1" -D["HAVE_SYS_FILE_H"]=" 1" -D["HAVE_TERMIOS_H"]=" 1" -D["HAVE_SYS_IOCTL_H"]=" 1" -D["HAVE_NETDB_H"]=" 1" -D["HAVE_SYSLOG_H"]=" 1" -D["HAVE_PWD_H"]=" 1" -D["HAVE_SYS_SOCKET_H"]=" 1" -D["HAVE_NETINET_IN_H"]=" 1" -D["HAVE_ARPA_INET_H"]=" 1" -D["TIME_WITH_SYS_TIME"]=" 1" -D["RETSIGTYPE"]=" void" -D["HAVE_STRFTIME"]=" 1" -D["HAVE_ALLOCA_H"]=" 1" -D["HAVE_ALLOCA"]=" 1" -D["HAVE_STRDUP"]=" 1" -D["HAVE_STRERROR"]=" 1" -D["HAVE_STRCASECMP"]=" 1" -D["HAVE_FLOCK"]=" 1" -D["HAVE_FCNTL"]=" 1" -D["HAVE_UNAME"]=" 1" -D["HAVE_GETHOSTNAME"]=" 1" -D["HAVE_SYSINFO"]=" 1" -D["HAVE_GETDOMAINNAME"]=" 1" -D["HAVE_RANDOM"]=" 1" -D["HAVE_RAND"]=" 1" -D["HAVE_SNPRINTF"]=" 1" -D["HAVE_VSNPRINTF"]=" 1" -D["HAVE_DEV_URANDOM"]=" 1" - for (key in D) D_is_set[key] = 1 - FS = "" -} -/^[\t ]*#[\t ]*(define|undef)[\t ]+[_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ][_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789]*([\t (]|$)/ { - line = $ 0 - split(line, arg, " ") - if (arg[1] == "#") { - defundef = arg[2] - mac1 = arg[3] - } else { - defundef = substr(arg[1], 2) - mac1 = arg[2] - } - split(mac1, mac2, "(") #) - macro = mac2[1] - prefix = substr(line, 1, index(line, defundef) - 1) - if (D_is_set[macro]) { - # Preserve the white space surrounding the "#". - print prefix "define", macro P[macro] D[macro] - next - } else { - # Replace #undef with comments. This is necessary, for example, - # in the case of _POSIX_SOURCE, which is predefined and required - # on some systems where configure will not decide to define it. - if (defundef == "undef") { - print "/*", prefix defundef, macro, "*/" - next - } - } -} -{ print } -_ACAWK - as_fn_error "could not setup config headers machinery" "$LINENO" 5 -fi # test -n "$CONFIG_HEADERS" - - -eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" -shift -for ac_tag -do - case $ac_tag in - :[FHLC]) ac_mode=$ac_tag; continue;; - esac - case $ac_mode$ac_tag in - :[FHL]*:*);; - :L* | :C*:*) as_fn_error "invalid tag \`$ac_tag'" "$LINENO" 5;; - :[FH]-) ac_tag=-:-;; - :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; - esac - ac_save_IFS=$IFS - IFS=: - set x $ac_tag - IFS=$ac_save_IFS - shift - ac_file=$1 - shift - - case $ac_mode in - :L) ac_source=$1;; - :[FH]) - ac_file_inputs= - for ac_f - do - case $ac_f in - -) ac_f="$tmp/stdin";; - *) # Look for the file first in the build tree, then in the source tree - # (if the path is not absolute). The absolute path cannot be DOS-style, - # because $ac_f cannot contain `:'. - test -f "$ac_f" || - case $ac_f in - [\\/$]*) false;; - *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; - esac || - as_fn_error "cannot find input file: \`$ac_f'" "$LINENO" 5;; - esac - case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac - as_fn_append ac_file_inputs " '$ac_f'" - done - - # Let's still pretend it is `configure' which instantiates (i.e., don't - # use $as_me), people would be surprised to read: - # /* config.h. Generated by config.status. */ - configure_input='Generated from '` - $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' - `' by configure.' - if test x"$ac_file" != x-; then - configure_input="$ac_file. $configure_input" - { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 -$as_echo "$as_me: creating $ac_file" >&6;} - fi - # Neutralize special characters interpreted by sed in replacement strings. - case $configure_input in #( - *\&* | *\|* | *\\* ) - ac_sed_conf_input=`$as_echo "$configure_input" | - sed 's/[\\\\&|]/\\\\&/g'`;; #( - *) ac_sed_conf_input=$configure_input;; - esac - - case $ac_tag in - *:-:* | *:-) cat >"$tmp/stdin" \ - || as_fn_error "could not create $ac_file" "$LINENO" 5 ;; - esac - ;; - esac - - ac_dir=`$as_dirname -- "$ac_file" || -$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$ac_file" : 'X\(//\)[^/]' \| \ - X"$ac_file" : 'X\(//\)$' \| \ - X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$ac_file" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - as_dir="$ac_dir"; as_fn_mkdir_p - ac_builddir=. - -case "$ac_dir" in -.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; -*) - ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` - # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` - case $ac_top_builddir_sub in - "") ac_top_builddir_sub=. ac_top_build_prefix= ;; - *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; - esac ;; -esac -ac_abs_top_builddir=$ac_pwd -ac_abs_builddir=$ac_pwd$ac_dir_suffix -# for backward compatibility: -ac_top_builddir=$ac_top_build_prefix - -case $srcdir in - .) # We are building in place. - ac_srcdir=. - ac_top_srcdir=$ac_top_builddir_sub - ac_abs_top_srcdir=$ac_pwd ;; - [\\/]* | ?:[\\/]* ) # Absolute name. - ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir - ac_abs_top_srcdir=$srcdir ;; - *) # Relative name. - ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_build_prefix$srcdir - ac_abs_top_srcdir=$ac_pwd/$srcdir ;; -esac -ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix - - - case $ac_mode in - :F) - # - # CONFIG_FILE - # - - case $INSTALL in - [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; - *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; - esac - ac_MKDIR_P=$MKDIR_P - case $MKDIR_P in - [\\/$]* | ?:[\\/]* ) ;; - */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; - esac -# If the template does not know about datarootdir, expand it. -# FIXME: This hack should be removed a few years after 2.60. -ac_datarootdir_hack=; ac_datarootdir_seen= -ac_sed_dataroot=' -/datarootdir/ { - p - q -} -/@datadir@/p -/@docdir@/p -/@infodir@/p -/@localedir@/p -/@mandir@/p' -case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in -*datarootdir*) ac_datarootdir_seen=yes;; -*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 -$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} - ac_datarootdir_hack=' - s&@datadir@&${datarootdir}&g - s&@docdir@&${datarootdir}/doc/${PACKAGE}&g - s&@infodir@&${datarootdir}/info&g - s&@localedir@&${datarootdir}/locale&g - s&@mandir@&${datarootdir}/man&g - s&\${datarootdir}&${prefix}/share&g' ;; -esac -ac_sed_extra="/^[ ]*VPATH[ ]*=/{ -s/:*\$(srcdir):*/:/ -s/:*\${srcdir}:*/:/ -s/:*@srcdir@:*/:/ -s/^\([^=]*=[ ]*\):*/\1/ -s/:*$// -s/^[^=]*=[ ]*$// -} - -:t -/@[a-zA-Z_][a-zA-Z_0-9]*@/!b -s|@configure_input@|$ac_sed_conf_input|;t t -s&@top_builddir@&$ac_top_builddir_sub&;t t -s&@top_build_prefix@&$ac_top_build_prefix&;t t -s&@srcdir@&$ac_srcdir&;t t -s&@abs_srcdir@&$ac_abs_srcdir&;t t -s&@top_srcdir@&$ac_top_srcdir&;t t -s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t -s&@builddir@&$ac_builddir&;t t -s&@abs_builddir@&$ac_abs_builddir&;t t -s&@abs_top_builddir@&$ac_abs_top_builddir&;t t -s&@INSTALL@&$ac_INSTALL&;t t -s&@MKDIR_P@&$ac_MKDIR_P&;t t -$ac_datarootdir_hack -" -eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \ - || as_fn_error "could not create $ac_file" "$LINENO" 5 - -test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && - { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && - { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' -which seems to be undefined. Please make sure it is defined." >&5 -$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' -which seems to be undefined. Please make sure it is defined." >&2;} - - rm -f "$tmp/stdin" - case $ac_file in - -) cat "$tmp/out" && rm -f "$tmp/out";; - *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";; - esac \ - || as_fn_error "could not create $ac_file" "$LINENO" 5 - ;; - :H) - # - # CONFIG_HEADER - # - if test x"$ac_file" != x-; then - { - $as_echo "/* $configure_input */" \ - && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" - } >"$tmp/config.h" \ - || as_fn_error "could not create $ac_file" "$LINENO" 5 - if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then - { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 -$as_echo "$as_me: $ac_file is unchanged" >&6;} - else - rm -f "$ac_file" - mv "$tmp/config.h" "$ac_file" \ - || as_fn_error "could not create $ac_file" "$LINENO" 5 - fi - else - $as_echo "/* $configure_input */" \ - && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \ - || as_fn_error "could not create -" "$LINENO" 5 - fi -# Compute "$ac_file"'s index in $config_headers. -_am_arg="$ac_file" -_am_stamp_count=1 -for _am_header in $config_headers :; do - case $_am_header in - $_am_arg | $_am_arg:* ) - break ;; - * ) - _am_stamp_count=`expr $_am_stamp_count + 1` ;; - esac -done -echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || -$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$_am_arg" : 'X\(//\)[^/]' \| \ - X"$_am_arg" : 'X\(//\)$' \| \ - X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$_am_arg" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'`/stamp-h$_am_stamp_count - ;; - - :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 -$as_echo "$as_me: executing $ac_file commands" >&6;} - ;; - esac - - - case $ac_file$ac_mode in - "depfiles":C) test x"$AMDEP_TRUE" != x"" || { - # Autoconf 2.62 quotes --file arguments for eval, but not when files - # are listed without --file. Let's play safe and only enable the eval - # if we detect the quoting. - case $CONFIG_FILES in - *\'*) eval set x "$CONFIG_FILES" ;; - *) set x $CONFIG_FILES ;; - esac - shift - for mf - do - # Strip MF so we end up with the name of the file. - mf=`echo "$mf" | sed -e 's/:.*$//'` - # Check whether this is an Automake generated Makefile or not. - # We used to match only the files named `Makefile.in', but - # some people rename them; so instead we look at the file content. - # Grep'ing the first line is not enough: some people post-process - # each Makefile.in and add a new line on top of each file to say so. - # Grep'ing the whole file is not good either: AIX grep has a line - # limit of 2048, but all sed's we know have understand at least 4000. - if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then - dirpart=`$as_dirname -- "$mf" || -$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$mf" : 'X\(//\)[^/]' \| \ - X"$mf" : 'X\(//\)$' \| \ - X"$mf" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$mf" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - else - continue - fi - # Extract the definition of DEPDIR, am__include, and am__quote - # from the Makefile without running `make'. - DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` - test -z "$DEPDIR" && continue - am__include=`sed -n 's/^am__include = //p' < "$mf"` - test -z "am__include" && continue - am__quote=`sed -n 's/^am__quote = //p' < "$mf"` - # When using ansi2knr, U may be empty or an underscore; expand it - U=`sed -n 's/^U = //p' < "$mf"` - # Find all dependency output files, they are included files with - # $(DEPDIR) in their names. We invoke sed twice because it is the - # simplest approach to changing $(DEPDIR) to its actual value in the - # expansion. - for file in `sed -n " - s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ - sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do - # Make sure the directory exists. - test -f "$dirpart/$file" && continue - fdir=`$as_dirname -- "$file" || -$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$file" : 'X\(//\)[^/]' \| \ - X"$file" : 'X\(//\)$' \| \ - X"$file" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$file" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - as_dir=$dirpart/$fdir; as_fn_mkdir_p - # echo "creating $dirpart/$file" - echo '# dummy' > "$dirpart/$file" - done - done -} - ;; - "libtool":C) - - # See if we are running on zsh, and set the options which allow our - # commands through without removal of \ escapes. - if test -n "${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST - fi - - cfgfile="${ofile}T" - trap "$RM \"$cfgfile\"; exit 1" 1 2 15 - $RM "$cfgfile" - - cat <<_LT_EOF >> "$cfgfile" -#! $SHELL - -# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. -# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION -# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: -# NOTE: Changes made to this file will be lost: look at ltmain.sh. -# -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, -# 2006, 2007, 2008 Free Software Foundation, Inc. -# Written by Gordon Matzigkeit, 1996 -# -# This file is part of GNU Libtool. -# -# GNU Libtool is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License as -# published by the Free Software Foundation; either version 2 of -# the License, or (at your option) any later version. -# -# As a special exception to the GNU General Public License, -# if you distribute this file as part of a program or library that -# is built using GNU Libtool, you may include this file under the -# same distribution terms that you use for the rest of that program. -# -# GNU Libtool is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with GNU Libtool; see the file COPYING. If not, a copy -# can be downloaded from http://www.gnu.org/licenses/gpl.html, or -# obtained by writing to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - - -# The names of the tagged configurations supported by this script. -available_tags="" - -# ### BEGIN LIBTOOL CONFIG - -# Which release of libtool.m4 was used? -macro_version=$macro_version -macro_revision=$macro_revision - -# Whether or not to build shared libraries. -build_libtool_libs=$enable_shared - -# Whether or not to build static libraries. -build_old_libs=$enable_static - -# What type of objects to build. -pic_mode=$pic_mode - -# Whether or not to optimize for fast installation. -fast_install=$enable_fast_install - -# The host system. -host_alias=$host_alias -host=$host -host_os=$host_os - -# The build system. -build_alias=$build_alias -build=$build -build_os=$build_os - -# A sed program that does not truncate output. -SED=$lt_SED - -# Sed that helps us avoid accidentally triggering echo(1) options like -n. -Xsed="\$SED -e 1s/^X//" - -# A grep program that handles long lines. -GREP=$lt_GREP - -# An ERE matcher. -EGREP=$lt_EGREP - -# A literal string matcher. -FGREP=$lt_FGREP - -# A BSD- or MS-compatible name lister. -NM=$lt_NM - -# Whether we need soft or hard links. -LN_S=$lt_LN_S - -# What is the maximum length of a command? -max_cmd_len=$max_cmd_len - -# Object file suffix (normally "o"). -objext=$ac_objext - -# Executable file suffix (normally ""). -exeext=$exeext - -# whether the shell understands "unset". -lt_unset=$lt_unset - -# turn spaces into newlines. -SP2NL=$lt_lt_SP2NL - -# turn newlines into spaces. -NL2SP=$lt_lt_NL2SP - -# How to create reloadable object files. -reload_flag=$lt_reload_flag -reload_cmds=$lt_reload_cmds - -# An object symbol dumper. -OBJDUMP=$lt_OBJDUMP - -# Method to check whether dependent libraries are shared objects. -deplibs_check_method=$lt_deplibs_check_method - -# Command to use when deplibs_check_method == "file_magic". -file_magic_cmd=$lt_file_magic_cmd - -# The archiver. -AR=$lt_AR -AR_FLAGS=$lt_AR_FLAGS - -# A symbol stripping program. -STRIP=$lt_STRIP - -# Commands used to install an old-style archive. -RANLIB=$lt_RANLIB -old_postinstall_cmds=$lt_old_postinstall_cmds -old_postuninstall_cmds=$lt_old_postuninstall_cmds - -# A C compiler. -LTCC=$lt_CC - -# LTCC compiler flags. -LTCFLAGS=$lt_CFLAGS - -# Take the output of nm and produce a listing of raw symbols and C names. -global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe - -# Transform the output of nm in a proper C declaration. -global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl - -# Transform the output of nm in a C name address pair. -global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address - -# Transform the output of nm in a C name address pair when lib prefix is needed. -global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix - -# The name of the directory that contains temporary libtool files. -objdir=$objdir - -# Shell to use when invoking shell scripts. -SHELL=$lt_SHELL - -# An echo program that does not interpret backslashes. -ECHO=$lt_ECHO - -# Used to examine libraries when file_magic_cmd begins with "file". -MAGIC_CMD=$MAGIC_CMD - -# Must we lock files when doing compilation? -need_locks=$lt_need_locks - -# Tool to manipulate archived DWARF debug symbol files on Mac OS X. -DSYMUTIL=$lt_DSYMUTIL - -# Tool to change global to local symbols on Mac OS X. -NMEDIT=$lt_NMEDIT - -# Tool to manipulate fat objects and archives on Mac OS X. -LIPO=$lt_LIPO - -# ldd/readelf like tool for Mach-O binaries on Mac OS X. -OTOOL=$lt_OTOOL - -# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. -OTOOL64=$lt_OTOOL64 - -# Old archive suffix (normally "a"). -libext=$libext - -# Shared library suffix (normally ".so"). -shrext_cmds=$lt_shrext_cmds - -# The commands to extract the exported symbol list from a shared archive. -extract_expsyms_cmds=$lt_extract_expsyms_cmds - -# Variables whose values should be saved in libtool wrapper scripts and -# restored at link time. -variables_saved_for_relink=$lt_variables_saved_for_relink - -# Do we need the "lib" prefix for modules? -need_lib_prefix=$need_lib_prefix - -# Do we need a version for libraries? -need_version=$need_version - -# Library versioning type. -version_type=$version_type - -# Shared library runtime path variable. -runpath_var=$runpath_var - -# Shared library path variable. -shlibpath_var=$shlibpath_var - -# Is shlibpath searched before the hard-coded library search path? -shlibpath_overrides_runpath=$shlibpath_overrides_runpath - -# Format of library name prefix. -libname_spec=$lt_libname_spec - -# List of archive names. First name is the real one, the rest are links. -# The last name is the one that the linker finds with -lNAME -library_names_spec=$lt_library_names_spec - -# The coded name of the library, if different from the real name. -soname_spec=$lt_soname_spec - -# Command to use after installation of a shared archive. -postinstall_cmds=$lt_postinstall_cmds - -# Command to use after uninstallation of a shared archive. -postuninstall_cmds=$lt_postuninstall_cmds - -# Commands used to finish a libtool library installation in a directory. -finish_cmds=$lt_finish_cmds - -# As "finish_cmds", except a single script fragment to be evaled but -# not shown. -finish_eval=$lt_finish_eval - -# Whether we should hardcode library paths into libraries. -hardcode_into_libs=$hardcode_into_libs - -# Compile-time system search path for libraries. -sys_lib_search_path_spec=$lt_sys_lib_search_path_spec - -# Run-time system search path for libraries. -sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec - -# Whether dlopen is supported. -dlopen_support=$enable_dlopen - -# Whether dlopen of programs is supported. -dlopen_self=$enable_dlopen_self - -# Whether dlopen of statically linked programs is supported. -dlopen_self_static=$enable_dlopen_self_static - -# Commands to strip libraries. -old_striplib=$lt_old_striplib -striplib=$lt_striplib - - -# The linker used to build libraries. -LD=$lt_LD - -# Commands used to build an old-style archive. -old_archive_cmds=$lt_old_archive_cmds - -# A language specific compiler. -CC=$lt_compiler - -# Is the compiler the GNU compiler? -with_gcc=$GCC - -# Compiler flag to turn off builtin functions. -no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag - -# How to pass a linker flag through the compiler. -wl=$lt_lt_prog_compiler_wl - -# Additional compiler flags for building library objects. -pic_flag=$lt_lt_prog_compiler_pic - -# Compiler flag to prevent dynamic linking. -link_static_flag=$lt_lt_prog_compiler_static - -# Does compiler simultaneously support -c and -o options? -compiler_c_o=$lt_lt_cv_prog_compiler_c_o - -# Whether or not to add -lc for building shared libraries. -build_libtool_need_lc=$archive_cmds_need_lc - -# Whether or not to disallow shared libs when runtime libs are static. -allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes - -# Compiler flag to allow reflexive dlopens. -export_dynamic_flag_spec=$lt_export_dynamic_flag_spec - -# Compiler flag to generate shared objects directly from archives. -whole_archive_flag_spec=$lt_whole_archive_flag_spec - -# Whether the compiler copes with passing no objects directly. -compiler_needs_object=$lt_compiler_needs_object - -# Create an old-style archive from a shared archive. -old_archive_from_new_cmds=$lt_old_archive_from_new_cmds - -# Create a temporary old-style archive to link instead of a shared archive. -old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds - -# Commands used to build a shared archive. -archive_cmds=$lt_archive_cmds -archive_expsym_cmds=$lt_archive_expsym_cmds - -# Commands used to build a loadable module if different from building -# a shared archive. -module_cmds=$lt_module_cmds -module_expsym_cmds=$lt_module_expsym_cmds - -# Whether we are building with GNU ld or not. -with_gnu_ld=$lt_with_gnu_ld - -# Flag that allows shared libraries with undefined symbols to be built. -allow_undefined_flag=$lt_allow_undefined_flag - -# Flag that enforces no undefined symbols. -no_undefined_flag=$lt_no_undefined_flag - -# Flag to hardcode \$libdir into a binary during linking. -# This must work even if \$libdir does not exist -hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec - -# If ld is used when linking, flag to hardcode \$libdir into a binary -# during linking. This must work even if \$libdir does not exist. -hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld - -# Whether we need a single "-rpath" flag with a separated argument. -hardcode_libdir_separator=$lt_hardcode_libdir_separator - -# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes -# DIR into the resulting binary. -hardcode_direct=$hardcode_direct - -# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes -# DIR into the resulting binary and the resulting library dependency is -# "absolute",i.e impossible to change by setting \${shlibpath_var} if the -# library is relocated. -hardcode_direct_absolute=$hardcode_direct_absolute - -# Set to "yes" if using the -LDIR flag during linking hardcodes DIR -# into the resulting binary. -hardcode_minus_L=$hardcode_minus_L - -# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR -# into the resulting binary. -hardcode_shlibpath_var=$hardcode_shlibpath_var - -# Set to "yes" if building a shared library automatically hardcodes DIR -# into the library and all subsequent libraries and executables linked -# against it. -hardcode_automatic=$hardcode_automatic - -# Set to yes if linker adds runtime paths of dependent libraries -# to runtime path list. -inherit_rpath=$inherit_rpath - -# Whether libtool must link a program against all its dependency libraries. -link_all_deplibs=$link_all_deplibs - -# Fix the shell variable \$srcfile for the compiler. -fix_srcfile_path=$lt_fix_srcfile_path - -# Set to "yes" if exported symbols are required. -always_export_symbols=$always_export_symbols - -# The commands to list exported symbols. -export_symbols_cmds=$lt_export_symbols_cmds - -# Symbols that should not be listed in the preloaded symbols. -exclude_expsyms=$lt_exclude_expsyms - -# Symbols that must always be exported. -include_expsyms=$lt_include_expsyms - -# Commands necessary for linking programs (against libraries) with templates. -prelink_cmds=$lt_prelink_cmds - -# Specify filename containing input files. -file_list_spec=$lt_file_list_spec - -# How to hardcode a shared library path into an executable. -hardcode_action=$hardcode_action - -# ### END LIBTOOL CONFIG - -_LT_EOF - - case $host_os in - aix3*) - cat <<\_LT_EOF >> "$cfgfile" -# AIX sometimes has problems with the GCC collect2 program. For some -# reason, if we set the COLLECT_NAMES environment variable, the problems -# vanish in a puff of smoke. -if test "X${COLLECT_NAMES+set}" != Xset; then - COLLECT_NAMES= - export COLLECT_NAMES -fi -_LT_EOF - ;; - esac - - -ltmain="$ac_aux_dir/ltmain.sh" - - - # We use sed instead of cat because bash on DJGPP gets confused if - # if finds mixed CR/LF and LF-only lines. Since sed operates in - # text mode, it properly converts lines to CR/LF. This bash problem - # is reportedly fixed, but why not run on old versions too? - sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \ - || (rm -f "$cfgfile"; exit 1) - - case $xsi_shell in - yes) - cat << \_LT_EOF >> "$cfgfile" - -# func_dirname file append nondir_replacement -# Compute the dirname of FILE. If nonempty, add APPEND to the result, -# otherwise set result to NONDIR_REPLACEMENT. -func_dirname () -{ - case ${1} in - */*) func_dirname_result="${1%/*}${2}" ;; - * ) func_dirname_result="${3}" ;; - esac -} - -# func_basename file -func_basename () -{ - func_basename_result="${1##*/}" -} - -# func_dirname_and_basename file append nondir_replacement -# perform func_basename and func_dirname in a single function -# call: -# dirname: Compute the dirname of FILE. If nonempty, -# add APPEND to the result, otherwise set result -# to NONDIR_REPLACEMENT. -# value returned in "$func_dirname_result" -# basename: Compute filename of FILE. -# value retuned in "$func_basename_result" -# Implementation must be kept synchronized with func_dirname -# and func_basename. For efficiency, we do not delegate to -# those functions but instead duplicate the functionality here. -func_dirname_and_basename () -{ - case ${1} in - */*) func_dirname_result="${1%/*}${2}" ;; - * ) func_dirname_result="${3}" ;; - esac - func_basename_result="${1##*/}" -} - -# func_stripname prefix suffix name -# strip PREFIX and SUFFIX off of NAME. -# PREFIX and SUFFIX must not contain globbing or regex special -# characters, hashes, percent signs, but SUFFIX may contain a leading -# dot (in which case that matches only a dot). -func_stripname () -{ - # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are - # positional parameters, so assign one to ordinary parameter first. - func_stripname_result=${3} - func_stripname_result=${func_stripname_result#"${1}"} - func_stripname_result=${func_stripname_result%"${2}"} -} - -# func_opt_split -func_opt_split () -{ - func_opt_split_opt=${1%%=*} - func_opt_split_arg=${1#*=} -} - -# func_lo2o object -func_lo2o () -{ - case ${1} in - *.lo) func_lo2o_result=${1%.lo}.${objext} ;; - *) func_lo2o_result=${1} ;; - esac -} - -# func_xform libobj-or-source -func_xform () -{ - func_xform_result=${1%.*}.lo -} - -# func_arith arithmetic-term... -func_arith () -{ - func_arith_result=$(( $* )) -} - -# func_len string -# STRING may not start with a hyphen. -func_len () -{ - func_len_result=${#1} -} - -_LT_EOF - ;; - *) # Bourne compatible functions. - cat << \_LT_EOF >> "$cfgfile" - -# func_dirname file append nondir_replacement -# Compute the dirname of FILE. If nonempty, add APPEND to the result, -# otherwise set result to NONDIR_REPLACEMENT. -func_dirname () -{ - # Extract subdirectory from the argument. - func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"` - if test "X$func_dirname_result" = "X${1}"; then - func_dirname_result="${3}" - else - func_dirname_result="$func_dirname_result${2}" - fi -} - -# func_basename file -func_basename () -{ - func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"` -} - - -# func_stripname prefix suffix name -# strip PREFIX and SUFFIX off of NAME. -# PREFIX and SUFFIX must not contain globbing or regex special -# characters, hashes, percent signs, but SUFFIX may contain a leading -# dot (in which case that matches only a dot). -# func_strip_suffix prefix name -func_stripname () -{ - case ${2} in - .*) func_stripname_result=`$ECHO "X${3}" \ - | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;; - *) func_stripname_result=`$ECHO "X${3}" \ - | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;; - esac -} - -# sed scripts: -my_sed_long_opt='1s/^\(-[^=]*\)=.*/\1/;q' -my_sed_long_arg='1s/^-[^=]*=//' - -# func_opt_split -func_opt_split () -{ - func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"` - func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"` -} - -# func_lo2o object -func_lo2o () -{ - func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"` -} - -# func_xform libobj-or-source -func_xform () -{ - func_xform_result=`$ECHO "X${1}" | $Xsed -e 's/\.[^.]*$/.lo/'` -} - -# func_arith arithmetic-term... -func_arith () -{ - func_arith_result=`expr "$@"` -} - -# func_len string -# STRING may not start with a hyphen. -func_len () -{ - func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len` -} - -_LT_EOF -esac - -case $lt_shell_append in - yes) - cat << \_LT_EOF >> "$cfgfile" - -# func_append var value -# Append VALUE to the end of shell variable VAR. -func_append () -{ - eval "$1+=\$2" -} -_LT_EOF - ;; - *) - cat << \_LT_EOF >> "$cfgfile" - -# func_append var value -# Append VALUE to the end of shell variable VAR. -func_append () -{ - eval "$1=\$$1\$2" -} - -_LT_EOF - ;; - esac - - - sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \ - || (rm -f "$cfgfile"; exit 1) - - mv -f "$cfgfile" "$ofile" || - (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") - chmod +x "$ofile" - - ;; - "default":C) test -z "$CONFIG_HEADERS" || echo timestamp > stamp-h ;; - - esac -done # for ac_tag - - -as_fn_exit 0 diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/config.sub b/openair3/PMIPv6/freeradius-client-1.1.6/config.sub deleted file mode 100755 index eb0389a693..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/config.sub +++ /dev/null @@ -1,1693 +0,0 @@ -#! /bin/sh -# Configuration validation subroutine script. -# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, -# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 -# Free Software Foundation, Inc. - -timestamp='2009-06-11' - -# This file is (in principle) common to ALL GNU software. -# The presence of a machine in this file suggests that SOME GNU software -# can handle that machine. It does not imply ALL GNU software can. -# -# This file is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA -# 02110-1301, USA. -# -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - - -# Please send patches to . Submit a context -# diff and a properly formatted ChangeLog entry. -# -# Configuration subroutine to validate and canonicalize a configuration type. -# Supply the specified configuration type as an argument. -# If it is invalid, we print an error message on stderr and exit with code 1. -# Otherwise, we print the canonical config type on stdout and succeed. - -# This file is supposed to be the same for all GNU packages -# and recognize all the CPU types, system types and aliases -# that are meaningful with *any* GNU software. -# Each package is responsible for reporting which valid configurations -# it does not support. The user should be able to distinguish -# a failure to support a valid configuration from a meaningless -# configuration. - -# The goal of this file is to map all the various variations of a given -# machine specification into a single specification in the form: -# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM -# or in some cases, the newer four-part form: -# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM -# It is wrong to echo any other type of specification. - -me=`echo "$0" | sed -e 's,.*/,,'` - -usage="\ -Usage: $0 [OPTION] CPU-MFR-OPSYS - $0 [OPTION] ALIAS - -Canonicalize a configuration name. - -Operation modes: - -h, --help print this help, then exit - -t, --time-stamp print date of last modification, then exit - -v, --version print version number, then exit - -Report bugs and patches to ." - -version="\ -GNU config.sub ($timestamp) - -Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, -2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. - -This is free software; see the source for copying conditions. There is NO -warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." - -help=" -Try \`$me --help' for more information." - -# Parse command line -while test $# -gt 0 ; do - case $1 in - --time-stamp | --time* | -t ) - echo "$timestamp" ; exit ;; - --version | -v ) - echo "$version" ; exit ;; - --help | --h* | -h ) - echo "$usage"; exit ;; - -- ) # Stop option processing - shift; break ;; - - ) # Use stdin as input. - break ;; - -* ) - echo "$me: invalid option $1$help" - exit 1 ;; - - *local*) - # First pass through any local machine types. - echo $1 - exit ;; - - * ) - break ;; - esac -done - -case $# in - 0) echo "$me: missing argument$help" >&2 - exit 1;; - 1) ;; - *) echo "$me: too many arguments$help" >&2 - exit 1;; -esac - -# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). -# Here we must recognize all the valid KERNEL-OS combinations. -maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` -case $maybe_os in - nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \ - uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \ - kopensolaris*-gnu* | \ - storm-chaos* | os2-emx* | rtmk-nova*) - os=-$maybe_os - basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` - ;; - *) - basic_machine=`echo $1 | sed 's/-[^-]*$//'` - if [ $basic_machine != $1 ] - then os=`echo $1 | sed 's/.*-/-/'` - else os=; fi - ;; -esac - -### Let's recognize common machines as not being operating systems so -### that things like config.sub decstation-3100 work. We also -### recognize some manufacturers as not being operating systems, so we -### can provide default operating systems below. -case $os in - -sun*os*) - # Prevent following clause from handling this invalid input. - ;; - -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ - -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ - -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ - -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ - -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ - -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ - -apple | -axis | -knuth | -cray) - os= - basic_machine=$1 - ;; - -bluegene*) - os=-cnk - ;; - -sim | -cisco | -oki | -wec | -winbond) - os= - basic_machine=$1 - ;; - -scout) - ;; - -wrs) - os=-vxworks - basic_machine=$1 - ;; - -chorusos*) - os=-chorusos - basic_machine=$1 - ;; - -chorusrdb) - os=-chorusrdb - basic_machine=$1 - ;; - -hiux*) - os=-hiuxwe2 - ;; - -sco6) - os=-sco5v6 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco5) - os=-sco3.2v5 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco4) - os=-sco3.2v4 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco3.2.[4-9]*) - os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco3.2v[4-9]*) - # Don't forget version if it is 3.2v4 or newer. - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco5v6*) - # Don't forget version if it is 3.2v4 or newer. - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco*) - os=-sco3.2v2 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -udk*) - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -isc) - os=-isc2.2 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -clix*) - basic_machine=clipper-intergraph - ;; - -isc*) - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -lynx*) - os=-lynxos - ;; - -ptx*) - basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` - ;; - -windowsnt*) - os=`echo $os | sed -e 's/windowsnt/winnt/'` - ;; - -psos*) - os=-psos - ;; - -mint | -mint[0-9]*) - basic_machine=m68k-atari - os=-mint - ;; -esac - -# Decode aliases for certain CPU-COMPANY combinations. -case $basic_machine in - # Recognize the basic CPU types without company name. - # Some are omitted here because they have special meanings below. - 1750a | 580 \ - | a29k \ - | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ - | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ - | am33_2.0 \ - | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \ - | bfin \ - | c4x | clipper \ - | d10v | d30v | dlx | dsp16xx \ - | fido | fr30 | frv \ - | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ - | i370 | i860 | i960 | ia64 \ - | ip2k | iq2000 \ - | lm32 \ - | m32c | m32r | m32rle | m68000 | m68k | m88k \ - | maxq | mb | microblaze | mcore | mep | metag \ - | mips | mipsbe | mipseb | mipsel | mipsle \ - | mips16 \ - | mips64 | mips64el \ - | mips64octeon | mips64octeonel \ - | mips64orion | mips64orionel \ - | mips64r5900 | mips64r5900el \ - | mips64vr | mips64vrel \ - | mips64vr4100 | mips64vr4100el \ - | mips64vr4300 | mips64vr4300el \ - | mips64vr5000 | mips64vr5000el \ - | mips64vr5900 | mips64vr5900el \ - | mipsisa32 | mipsisa32el \ - | mipsisa32r2 | mipsisa32r2el \ - | mipsisa64 | mipsisa64el \ - | mipsisa64r2 | mipsisa64r2el \ - | mipsisa64sb1 | mipsisa64sb1el \ - | mipsisa64sr71k | mipsisa64sr71kel \ - | mipstx39 | mipstx39el \ - | mn10200 | mn10300 \ - | moxie \ - | mt \ - | msp430 \ - | nios | nios2 \ - | ns16k | ns32k \ - | or32 \ - | pdp10 | pdp11 | pj | pjl \ - | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ - | pyramid \ - | score \ - | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ - | sh64 | sh64le \ - | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ - | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ - | spu | strongarm \ - | tahoe | thumb | tic4x | tic80 | tron \ - | v850 | v850e \ - | we32k \ - | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \ - | z8k | z80) - basic_machine=$basic_machine-unknown - ;; - m6811 | m68hc11 | m6812 | m68hc12) - # Motorola 68HC11/12. - basic_machine=$basic_machine-unknown - os=-none - ;; - m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) - ;; - ms1) - basic_machine=mt-unknown - ;; - - # We use `pc' rather than `unknown' - # because (1) that's what they normally are, and - # (2) the word "unknown" tends to confuse beginning users. - i*86 | x86_64) - basic_machine=$basic_machine-pc - ;; - # Object if more than one company name word. - *-*-*) - echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 - exit 1 - ;; - # Recognize the basic CPU types with company name. - 580-* \ - | a29k-* \ - | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ - | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ - | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ - | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ - | avr-* | avr32-* \ - | bfin-* | bs2000-* \ - | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ - | clipper-* | craynv-* | cydra-* \ - | d10v-* | d30v-* | dlx-* \ - | elxsi-* \ - | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ - | h8300-* | h8500-* \ - | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ - | i*86-* | i860-* | i960-* | ia64-* \ - | ip2k-* | iq2000-* \ - | lm32-* \ - | m32c-* | m32r-* | m32rle-* \ - | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ - | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ - | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ - | mips16-* \ - | mips64-* | mips64el-* \ - | mips64octeon-* | mips64octeonel-* \ - | mips64orion-* | mips64orionel-* \ - | mips64r5900-* | mips64r5900el-* \ - | mips64vr-* | mips64vrel-* \ - | mips64vr4100-* | mips64vr4100el-* \ - | mips64vr4300-* | mips64vr4300el-* \ - | mips64vr5000-* | mips64vr5000el-* \ - | mips64vr5900-* | mips64vr5900el-* \ - | mipsisa32-* | mipsisa32el-* \ - | mipsisa32r2-* | mipsisa32r2el-* \ - | mipsisa64-* | mipsisa64el-* \ - | mipsisa64r2-* | mipsisa64r2el-* \ - | mipsisa64sb1-* | mipsisa64sb1el-* \ - | mipsisa64sr71k-* | mipsisa64sr71kel-* \ - | mipstx39-* | mipstx39el-* \ - | mmix-* \ - | mt-* \ - | msp430-* \ - | nios-* | nios2-* \ - | none-* | np1-* | ns16k-* | ns32k-* \ - | orion-* \ - | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ - | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ - | pyramid-* \ - | romp-* | rs6000-* \ - | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ - | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ - | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ - | sparclite-* \ - | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \ - | tahoe-* | thumb-* \ - | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* | tile-* \ - | tron-* \ - | v850-* | v850e-* | vax-* \ - | we32k-* \ - | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \ - | xstormy16-* | xtensa*-* \ - | ymp-* \ - | z8k-* | z80-*) - ;; - # Recognize the basic CPU types without company name, with glob match. - xtensa*) - basic_machine=$basic_machine-unknown - ;; - # Recognize the various machine names and aliases which stand - # for a CPU type and a company and sometimes even an OS. - 386bsd) - basic_machine=i386-unknown - os=-bsd - ;; - 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) - basic_machine=m68000-att - ;; - 3b*) - basic_machine=we32k-att - ;; - a29khif) - basic_machine=a29k-amd - os=-udi - ;; - abacus) - basic_machine=abacus-unknown - ;; - adobe68k) - basic_machine=m68010-adobe - os=-scout - ;; - alliant | fx80) - basic_machine=fx80-alliant - ;; - altos | altos3068) - basic_machine=m68k-altos - ;; - am29k) - basic_machine=a29k-none - os=-bsd - ;; - amd64) - basic_machine=x86_64-pc - ;; - amd64-*) - basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - amdahl) - basic_machine=580-amdahl - os=-sysv - ;; - amiga | amiga-*) - basic_machine=m68k-unknown - ;; - amigaos | amigados) - basic_machine=m68k-unknown - os=-amigaos - ;; - amigaunix | amix) - basic_machine=m68k-unknown - os=-sysv4 - ;; - apollo68) - basic_machine=m68k-apollo - os=-sysv - ;; - apollo68bsd) - basic_machine=m68k-apollo - os=-bsd - ;; - aros) - basic_machine=i386-pc - os=-aros - ;; - aux) - basic_machine=m68k-apple - os=-aux - ;; - balance) - basic_machine=ns32k-sequent - os=-dynix - ;; - blackfin) - basic_machine=bfin-unknown - os=-linux - ;; - blackfin-*) - basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` - os=-linux - ;; - bluegene*) - basic_machine=powerpc-ibm - os=-cnk - ;; - c90) - basic_machine=c90-cray - os=-unicos - ;; - cegcc) - basic_machine=arm-unknown - os=-cegcc - ;; - convex-c1) - basic_machine=c1-convex - os=-bsd - ;; - convex-c2) - basic_machine=c2-convex - os=-bsd - ;; - convex-c32) - basic_machine=c32-convex - os=-bsd - ;; - convex-c34) - basic_machine=c34-convex - os=-bsd - ;; - convex-c38) - basic_machine=c38-convex - os=-bsd - ;; - cray | j90) - basic_machine=j90-cray - os=-unicos - ;; - craynv) - basic_machine=craynv-cray - os=-unicosmp - ;; - cr16) - basic_machine=cr16-unknown - os=-elf - ;; - crds | unos) - basic_machine=m68k-crds - ;; - crisv32 | crisv32-* | etraxfs*) - basic_machine=crisv32-axis - ;; - cris | cris-* | etrax*) - basic_machine=cris-axis - ;; - crx) - basic_machine=crx-unknown - os=-elf - ;; - da30 | da30-*) - basic_machine=m68k-da30 - ;; - decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) - basic_machine=mips-dec - ;; - decsystem10* | dec10*) - basic_machine=pdp10-dec - os=-tops10 - ;; - decsystem20* | dec20*) - basic_machine=pdp10-dec - os=-tops20 - ;; - delta | 3300 | motorola-3300 | motorola-delta \ - | 3300-motorola | delta-motorola) - basic_machine=m68k-motorola - ;; - delta88) - basic_machine=m88k-motorola - os=-sysv3 - ;; - dicos) - basic_machine=i686-pc - os=-dicos - ;; - djgpp) - basic_machine=i586-pc - os=-msdosdjgpp - ;; - dpx20 | dpx20-*) - basic_machine=rs6000-bull - os=-bosx - ;; - dpx2* | dpx2*-bull) - basic_machine=m68k-bull - os=-sysv3 - ;; - ebmon29k) - basic_machine=a29k-amd - os=-ebmon - ;; - elxsi) - basic_machine=elxsi-elxsi - os=-bsd - ;; - encore | umax | mmax) - basic_machine=ns32k-encore - ;; - es1800 | OSE68k | ose68k | ose | OSE) - basic_machine=m68k-ericsson - os=-ose - ;; - fx2800) - basic_machine=i860-alliant - ;; - genix) - basic_machine=ns32k-ns - ;; - gmicro) - basic_machine=tron-gmicro - os=-sysv - ;; - go32) - basic_machine=i386-pc - os=-go32 - ;; - h3050r* | hiux*) - basic_machine=hppa1.1-hitachi - os=-hiuxwe2 - ;; - h8300hms) - basic_machine=h8300-hitachi - os=-hms - ;; - h8300xray) - basic_machine=h8300-hitachi - os=-xray - ;; - h8500hms) - basic_machine=h8500-hitachi - os=-hms - ;; - harris) - basic_machine=m88k-harris - os=-sysv3 - ;; - hp300-*) - basic_machine=m68k-hp - ;; - hp300bsd) - basic_machine=m68k-hp - os=-bsd - ;; - hp300hpux) - basic_machine=m68k-hp - os=-hpux - ;; - hp3k9[0-9][0-9] | hp9[0-9][0-9]) - basic_machine=hppa1.0-hp - ;; - hp9k2[0-9][0-9] | hp9k31[0-9]) - basic_machine=m68000-hp - ;; - hp9k3[2-9][0-9]) - basic_machine=m68k-hp - ;; - hp9k6[0-9][0-9] | hp6[0-9][0-9]) - basic_machine=hppa1.0-hp - ;; - hp9k7[0-79][0-9] | hp7[0-79][0-9]) - basic_machine=hppa1.1-hp - ;; - hp9k78[0-9] | hp78[0-9]) - # FIXME: really hppa2.0-hp - basic_machine=hppa1.1-hp - ;; - hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) - # FIXME: really hppa2.0-hp - basic_machine=hppa1.1-hp - ;; - hp9k8[0-9][13679] | hp8[0-9][13679]) - basic_machine=hppa1.1-hp - ;; - hp9k8[0-9][0-9] | hp8[0-9][0-9]) - basic_machine=hppa1.0-hp - ;; - hppa-next) - os=-nextstep3 - ;; - hppaosf) - basic_machine=hppa1.1-hp - os=-osf - ;; - hppro) - basic_machine=hppa1.1-hp - os=-proelf - ;; - i370-ibm* | ibm*) - basic_machine=i370-ibm - ;; -# I'm not sure what "Sysv32" means. Should this be sysv3.2? - i*86v32) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-sysv32 - ;; - i*86v4*) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-sysv4 - ;; - i*86v) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-sysv - ;; - i*86sol2) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-solaris2 - ;; - i386mach) - basic_machine=i386-mach - os=-mach - ;; - i386-vsta | vsta) - basic_machine=i386-unknown - os=-vsta - ;; - iris | iris4d) - basic_machine=mips-sgi - case $os in - -irix*) - ;; - *) - os=-irix4 - ;; - esac - ;; - isi68 | isi) - basic_machine=m68k-isi - os=-sysv - ;; - m68knommu) - basic_machine=m68k-unknown - os=-linux - ;; - m68knommu-*) - basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` - os=-linux - ;; - m88k-omron*) - basic_machine=m88k-omron - ;; - magnum | m3230) - basic_machine=mips-mips - os=-sysv - ;; - merlin) - basic_machine=ns32k-utek - os=-sysv - ;; - mingw32) - basic_machine=i386-pc - os=-mingw32 - ;; - mingw32ce) - basic_machine=arm-unknown - os=-mingw32ce - ;; - miniframe) - basic_machine=m68000-convergent - ;; - *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) - basic_machine=m68k-atari - os=-mint - ;; - mips3*-*) - basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` - ;; - mips3*) - basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown - ;; - monitor) - basic_machine=m68k-rom68k - os=-coff - ;; - morphos) - basic_machine=powerpc-unknown - os=-morphos - ;; - msdos) - basic_machine=i386-pc - os=-msdos - ;; - ms1-*) - basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` - ;; - mvs) - basic_machine=i370-ibm - os=-mvs - ;; - ncr3000) - basic_machine=i486-ncr - os=-sysv4 - ;; - netbsd386) - basic_machine=i386-unknown - os=-netbsd - ;; - netwinder) - basic_machine=armv4l-rebel - os=-linux - ;; - news | news700 | news800 | news900) - basic_machine=m68k-sony - os=-newsos - ;; - news1000) - basic_machine=m68030-sony - os=-newsos - ;; - news-3600 | risc-news) - basic_machine=mips-sony - os=-newsos - ;; - necv70) - basic_machine=v70-nec - os=-sysv - ;; - next | m*-next ) - basic_machine=m68k-next - case $os in - -nextstep* ) - ;; - -ns2*) - os=-nextstep2 - ;; - *) - os=-nextstep3 - ;; - esac - ;; - nh3000) - basic_machine=m68k-harris - os=-cxux - ;; - nh[45]000) - basic_machine=m88k-harris - os=-cxux - ;; - nindy960) - basic_machine=i960-intel - os=-nindy - ;; - mon960) - basic_machine=i960-intel - os=-mon960 - ;; - nonstopux) - basic_machine=mips-compaq - os=-nonstopux - ;; - np1) - basic_machine=np1-gould - ;; - nsr-tandem) - basic_machine=nsr-tandem - ;; - op50n-* | op60c-*) - basic_machine=hppa1.1-oki - os=-proelf - ;; - openrisc | openrisc-*) - basic_machine=or32-unknown - ;; - os400) - basic_machine=powerpc-ibm - os=-os400 - ;; - OSE68000 | ose68000) - basic_machine=m68000-ericsson - os=-ose - ;; - os68k) - basic_machine=m68k-none - os=-os68k - ;; - pa-hitachi) - basic_machine=hppa1.1-hitachi - os=-hiuxwe2 - ;; - paragon) - basic_machine=i860-intel - os=-osf - ;; - parisc) - basic_machine=hppa-unknown - os=-linux - ;; - parisc-*) - basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` - os=-linux - ;; - pbd) - basic_machine=sparc-tti - ;; - pbb) - basic_machine=m68k-tti - ;; - pc532 | pc532-*) - basic_machine=ns32k-pc532 - ;; - pc98) - basic_machine=i386-pc - ;; - pc98-*) - basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pentium | p5 | k5 | k6 | nexgen | viac3) - basic_machine=i586-pc - ;; - pentiumpro | p6 | 6x86 | athlon | athlon_*) - basic_machine=i686-pc - ;; - pentiumii | pentium2 | pentiumiii | pentium3) - basic_machine=i686-pc - ;; - pentium4) - basic_machine=i786-pc - ;; - pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) - basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pentiumpro-* | p6-* | 6x86-* | athlon-*) - basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) - basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pentium4-*) - basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pn) - basic_machine=pn-gould - ;; - power) basic_machine=power-ibm - ;; - ppc) basic_machine=powerpc-unknown - ;; - ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ppcle | powerpclittle | ppc-le | powerpc-little) - basic_machine=powerpcle-unknown - ;; - ppcle-* | powerpclittle-*) - basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ppc64) basic_machine=powerpc64-unknown - ;; - ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ppc64le | powerpc64little | ppc64-le | powerpc64-little) - basic_machine=powerpc64le-unknown - ;; - ppc64le-* | powerpc64little-*) - basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ps2) - basic_machine=i386-ibm - ;; - pw32) - basic_machine=i586-unknown - os=-pw32 - ;; - rdos) - basic_machine=i386-pc - os=-rdos - ;; - rom68k) - basic_machine=m68k-rom68k - os=-coff - ;; - rm[46]00) - basic_machine=mips-siemens - ;; - rtpc | rtpc-*) - basic_machine=romp-ibm - ;; - s390 | s390-*) - basic_machine=s390-ibm - ;; - s390x | s390x-*) - basic_machine=s390x-ibm - ;; - sa29200) - basic_machine=a29k-amd - os=-udi - ;; - sb1) - basic_machine=mipsisa64sb1-unknown - ;; - sb1el) - basic_machine=mipsisa64sb1el-unknown - ;; - sde) - basic_machine=mipsisa32-sde - os=-elf - ;; - sei) - basic_machine=mips-sei - os=-seiux - ;; - sequent) - basic_machine=i386-sequent - ;; - sh) - basic_machine=sh-hitachi - os=-hms - ;; - sh5el) - basic_machine=sh5le-unknown - ;; - sh64) - basic_machine=sh64-unknown - ;; - sparclite-wrs | simso-wrs) - basic_machine=sparclite-wrs - os=-vxworks - ;; - sps7) - basic_machine=m68k-bull - os=-sysv2 - ;; - spur) - basic_machine=spur-unknown - ;; - st2000) - basic_machine=m68k-tandem - ;; - stratus) - basic_machine=i860-stratus - os=-sysv4 - ;; - sun2) - basic_machine=m68000-sun - ;; - sun2os3) - basic_machine=m68000-sun - os=-sunos3 - ;; - sun2os4) - basic_machine=m68000-sun - os=-sunos4 - ;; - sun3os3) - basic_machine=m68k-sun - os=-sunos3 - ;; - sun3os4) - basic_machine=m68k-sun - os=-sunos4 - ;; - sun4os3) - basic_machine=sparc-sun - os=-sunos3 - ;; - sun4os4) - basic_machine=sparc-sun - os=-sunos4 - ;; - sun4sol2) - basic_machine=sparc-sun - os=-solaris2 - ;; - sun3 | sun3-*) - basic_machine=m68k-sun - ;; - sun4) - basic_machine=sparc-sun - ;; - sun386 | sun386i | roadrunner) - basic_machine=i386-sun - ;; - sv1) - basic_machine=sv1-cray - os=-unicos - ;; - symmetry) - basic_machine=i386-sequent - os=-dynix - ;; - t3e) - basic_machine=alphaev5-cray - os=-unicos - ;; - t90) - basic_machine=t90-cray - os=-unicos - ;; - tic54x | c54x*) - basic_machine=tic54x-unknown - os=-coff - ;; - tic55x | c55x*) - basic_machine=tic55x-unknown - os=-coff - ;; - tic6x | c6x*) - basic_machine=tic6x-unknown - os=-coff - ;; - tile*) - basic_machine=tile-unknown - os=-linux-gnu - ;; - tx39) - basic_machine=mipstx39-unknown - ;; - tx39el) - basic_machine=mipstx39el-unknown - ;; - toad1) - basic_machine=pdp10-xkl - os=-tops20 - ;; - tower | tower-32) - basic_machine=m68k-ncr - ;; - tpf) - basic_machine=s390x-ibm - os=-tpf - ;; - udi29k) - basic_machine=a29k-amd - os=-udi - ;; - ultra3) - basic_machine=a29k-nyu - os=-sym1 - ;; - v810 | necv810) - basic_machine=v810-nec - os=-none - ;; - vaxv) - basic_machine=vax-dec - os=-sysv - ;; - vms) - basic_machine=vax-dec - os=-vms - ;; - vpp*|vx|vx-*) - basic_machine=f301-fujitsu - ;; - vxworks960) - basic_machine=i960-wrs - os=-vxworks - ;; - vxworks68) - basic_machine=m68k-wrs - os=-vxworks - ;; - vxworks29k) - basic_machine=a29k-wrs - os=-vxworks - ;; - w65*) - basic_machine=w65-wdc - os=-none - ;; - w89k-*) - basic_machine=hppa1.1-winbond - os=-proelf - ;; - xbox) - basic_machine=i686-pc - os=-mingw32 - ;; - xps | xps100) - basic_machine=xps100-honeywell - ;; - ymp) - basic_machine=ymp-cray - os=-unicos - ;; - z8k-*-coff) - basic_machine=z8k-unknown - os=-sim - ;; - z80-*-coff) - basic_machine=z80-unknown - os=-sim - ;; - none) - basic_machine=none-none - os=-none - ;; - -# Here we handle the default manufacturer of certain CPU types. It is in -# some cases the only manufacturer, in others, it is the most popular. - w89k) - basic_machine=hppa1.1-winbond - ;; - op50n) - basic_machine=hppa1.1-oki - ;; - op60c) - basic_machine=hppa1.1-oki - ;; - romp) - basic_machine=romp-ibm - ;; - mmix) - basic_machine=mmix-knuth - ;; - rs6000) - basic_machine=rs6000-ibm - ;; - vax) - basic_machine=vax-dec - ;; - pdp10) - # there are many clones, so DEC is not a safe bet - basic_machine=pdp10-unknown - ;; - pdp11) - basic_machine=pdp11-dec - ;; - we32k) - basic_machine=we32k-att - ;; - sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) - basic_machine=sh-unknown - ;; - sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) - basic_machine=sparc-sun - ;; - cydra) - basic_machine=cydra-cydrome - ;; - orion) - basic_machine=orion-highlevel - ;; - orion105) - basic_machine=clipper-highlevel - ;; - mac | mpw | mac-mpw) - basic_machine=m68k-apple - ;; - pmac | pmac-mpw) - basic_machine=powerpc-apple - ;; - *-unknown) - # Make sure to match an already-canonicalized machine name. - ;; - *) - echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 - exit 1 - ;; -esac - -# Here we canonicalize certain aliases for manufacturers. -case $basic_machine in - *-digital*) - basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` - ;; - *-commodore*) - basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` - ;; - *) - ;; -esac - -# Decode manufacturer-specific aliases for certain operating systems. - -if [ x"$os" != x"" ] -then -case $os in - # First match some system type aliases - # that might get confused with valid system types. - # -solaris* is a basic system type, with this one exception. - -solaris1 | -solaris1.*) - os=`echo $os | sed -e 's|solaris1|sunos4|'` - ;; - -solaris) - os=-solaris2 - ;; - -svr4*) - os=-sysv4 - ;; - -unixware*) - os=-sysv4.2uw - ;; - -gnu/linux*) - os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` - ;; - # First accept the basic system types. - # The portable systems comes first. - # Each alternative MUST END IN A *, to match a version number. - # -sysv* is not here because it comes later, after sysvr4. - -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ - | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ - | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ - | -kopensolaris* \ - | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ - | -aos* | -aros* \ - | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ - | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ - | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ - | -openbsd* | -solidbsd* \ - | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ - | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ - | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ - | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ - | -chorusos* | -chorusrdb* | -cegcc* \ - | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ - | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \ - | -uxpv* | -beos* | -mpeix* | -udk* \ - | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ - | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ - | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ - | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ - | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ - | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ - | -skyos* | -haiku* | -rdos* | -toppers* | -drops*) - # Remember, each alternative MUST END IN *, to match a version number. - ;; - -qnx*) - case $basic_machine in - x86-* | i*86-*) - ;; - *) - os=-nto$os - ;; - esac - ;; - -nto-qnx*) - ;; - -nto*) - os=`echo $os | sed -e 's|nto|nto-qnx|'` - ;; - -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ - | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ - | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) - ;; - -mac*) - os=`echo $os | sed -e 's|mac|macos|'` - ;; - -linux-dietlibc) - os=-linux-dietlibc - ;; - -linux*) - os=`echo $os | sed -e 's|linux|linux-gnu|'` - ;; - -sunos5*) - os=`echo $os | sed -e 's|sunos5|solaris2|'` - ;; - -sunos6*) - os=`echo $os | sed -e 's|sunos6|solaris3|'` - ;; - -opened*) - os=-openedition - ;; - -os400*) - os=-os400 - ;; - -wince*) - os=-wince - ;; - -osfrose*) - os=-osfrose - ;; - -osf*) - os=-osf - ;; - -utek*) - os=-bsd - ;; - -dynix*) - os=-bsd - ;; - -acis*) - os=-aos - ;; - -atheos*) - os=-atheos - ;; - -syllable*) - os=-syllable - ;; - -386bsd) - os=-bsd - ;; - -ctix* | -uts*) - os=-sysv - ;; - -nova*) - os=-rtmk-nova - ;; - -ns2 ) - os=-nextstep2 - ;; - -nsk*) - os=-nsk - ;; - # Preserve the version number of sinix5. - -sinix5.*) - os=`echo $os | sed -e 's|sinix|sysv|'` - ;; - -sinix*) - os=-sysv4 - ;; - -tpf*) - os=-tpf - ;; - -triton*) - os=-sysv3 - ;; - -oss*) - os=-sysv3 - ;; - -svr4) - os=-sysv4 - ;; - -svr3) - os=-sysv3 - ;; - -sysvr4) - os=-sysv4 - ;; - # This must come after -sysvr4. - -sysv*) - ;; - -ose*) - os=-ose - ;; - -es1800*) - os=-ose - ;; - -xenix) - os=-xenix - ;; - -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) - os=-mint - ;; - -aros*) - os=-aros - ;; - -kaos*) - os=-kaos - ;; - -zvmoe) - os=-zvmoe - ;; - -dicos*) - os=-dicos - ;; - -none) - ;; - *) - # Get rid of the `-' at the beginning of $os. - os=`echo $os | sed 's/[^-]*-//'` - echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 - exit 1 - ;; -esac -else - -# Here we handle the default operating systems that come with various machines. -# The value should be what the vendor currently ships out the door with their -# machine or put another way, the most popular os provided with the machine. - -# Note that if you're going to try to match "-MANUFACTURER" here (say, -# "-sun"), then you have to tell the case statement up towards the top -# that MANUFACTURER isn't an operating system. Otherwise, code above -# will signal an error saying that MANUFACTURER isn't an operating -# system, and we'll never get to this point. - -case $basic_machine in - score-*) - os=-elf - ;; - spu-*) - os=-elf - ;; - *-acorn) - os=-riscix1.2 - ;; - arm*-rebel) - os=-linux - ;; - arm*-semi) - os=-aout - ;; - c4x-* | tic4x-*) - os=-coff - ;; - # This must come before the *-dec entry. - pdp10-*) - os=-tops20 - ;; - pdp11-*) - os=-none - ;; - *-dec | vax-*) - os=-ultrix4.2 - ;; - m68*-apollo) - os=-domain - ;; - i386-sun) - os=-sunos4.0.2 - ;; - m68000-sun) - os=-sunos3 - # This also exists in the configure program, but was not the - # default. - # os=-sunos4 - ;; - m68*-cisco) - os=-aout - ;; - mep-*) - os=-elf - ;; - mips*-cisco) - os=-elf - ;; - mips*-*) - os=-elf - ;; - or32-*) - os=-coff - ;; - *-tti) # must be before sparc entry or we get the wrong os. - os=-sysv3 - ;; - sparc-* | *-sun) - os=-sunos4.1.1 - ;; - *-be) - os=-beos - ;; - *-haiku) - os=-haiku - ;; - *-ibm) - os=-aix - ;; - *-knuth) - os=-mmixware - ;; - *-wec) - os=-proelf - ;; - *-winbond) - os=-proelf - ;; - *-oki) - os=-proelf - ;; - *-hp) - os=-hpux - ;; - *-hitachi) - os=-hiux - ;; - i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) - os=-sysv - ;; - *-cbm) - os=-amigaos - ;; - *-dg) - os=-dgux - ;; - *-dolphin) - os=-sysv3 - ;; - m68k-ccur) - os=-rtu - ;; - m88k-omron*) - os=-luna - ;; - *-next ) - os=-nextstep - ;; - *-sequent) - os=-ptx - ;; - *-crds) - os=-unos - ;; - *-ns) - os=-genix - ;; - i370-*) - os=-mvs - ;; - *-next) - os=-nextstep3 - ;; - *-gould) - os=-sysv - ;; - *-highlevel) - os=-bsd - ;; - *-encore) - os=-bsd - ;; - *-sgi) - os=-irix - ;; - *-siemens) - os=-sysv4 - ;; - *-masscomp) - os=-rtu - ;; - f30[01]-fujitsu | f700-fujitsu) - os=-uxpv - ;; - *-rom68k) - os=-coff - ;; - *-*bug) - os=-coff - ;; - *-apple) - os=-macos - ;; - *-atari*) - os=-mint - ;; - *) - os=-none - ;; -esac -fi - -# Here we handle the case where we know the os, and the CPU type, but not the -# manufacturer. We pick the logical manufacturer. -vendor=unknown -case $basic_machine in - *-unknown) - case $os in - -riscix*) - vendor=acorn - ;; - -sunos*) - vendor=sun - ;; - -cnk*|-aix*) - vendor=ibm - ;; - -beos*) - vendor=be - ;; - -hpux*) - vendor=hp - ;; - -mpeix*) - vendor=hp - ;; - -hiux*) - vendor=hitachi - ;; - -unos*) - vendor=crds - ;; - -dgux*) - vendor=dg - ;; - -luna*) - vendor=omron - ;; - -genix*) - vendor=ns - ;; - -mvs* | -opened*) - vendor=ibm - ;; - -os400*) - vendor=ibm - ;; - -ptx*) - vendor=sequent - ;; - -tpf*) - vendor=ibm - ;; - -vxsim* | -vxworks* | -windiss*) - vendor=wrs - ;; - -aux*) - vendor=apple - ;; - -hms*) - vendor=hitachi - ;; - -mpw* | -macos*) - vendor=apple - ;; - -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) - vendor=atari - ;; - -vos*) - vendor=stratus - ;; - esac - basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` - ;; -esac - -echo $basic_machine$os -exit - -# Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "timestamp='" -# time-stamp-format: "%:y-%02m-%02d" -# time-stamp-end: "'" -# End: diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/configure b/openair3/PMIPv6/freeradius-client-1.1.6/configure deleted file mode 100755 index 437f118eb3..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/configure +++ /dev/null @@ -1,15347 +0,0 @@ -#! /bin/sh -# Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.65. -# -# -# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, -# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, -# Inc. -# -# -# This configure script is free software; the Free Software Foundation -# gives unlimited permission to copy, distribute and modify it. -## -------------------- ## -## M4sh Initialization. ## -## -------------------- ## - -# Be more Bourne compatible -DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : - emulate sh - NULLCMD=: - # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in #( - *posix*) : - set -o posix ;; #( - *) : - ;; -esac -fi - - -as_nl=' -' -export as_nl -# Printing a long string crashes Solaris 7 /usr/bin/printf. -as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo -# Prefer a ksh shell builtin over an external printf program on Solaris, -# but without wasting forks for bash or zsh. -if test -z "$BASH_VERSION$ZSH_VERSION" \ - && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='print -r --' - as_echo_n='print -rn --' -elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='printf %s\n' - as_echo_n='printf %s' -else - if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then - as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' - as_echo_n='/usr/ucb/echo -n' - else - as_echo_body='eval expr "X$1" : "X\\(.*\\)"' - as_echo_n_body='eval - arg=$1; - case $arg in #( - *"$as_nl"*) - expr "X$arg" : "X\\(.*\\)$as_nl"; - arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; - esac; - expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" - ' - export as_echo_n_body - as_echo_n='sh -c $as_echo_n_body as_echo' - fi - export as_echo_body - as_echo='sh -c $as_echo_body as_echo' -fi - -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - PATH_SEPARATOR=: - (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { - (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || - PATH_SEPARATOR=';' - } -fi - - -# IFS -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent editors from complaining about space-tab. -# (If _AS_PATH_WALK were called with IFS unset, it would disable word -# splitting by setting IFS to empty value.) -IFS=" "" $as_nl" - -# Find who we are. Look in the path if we contain no directory separator. -case $0 in #(( - *[\\/]* ) as_myself=$0 ;; - *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break - done -IFS=$as_save_IFS - - ;; -esac -# We did not find ourselves, most probably we were run as `sh COMMAND' -# in which case we are not to be found in the path. -if test "x$as_myself" = x; then - as_myself=$0 -fi -if test ! -f "$as_myself"; then - $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 - exit 1 -fi - -# Unset variables that we do not need and which cause bugs (e.g. in -# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" -# suppresses any "Segmentation fault" message there. '((' could -# trigger a bug in pdksh 5.2.14. -for as_var in BASH_ENV ENV MAIL MAILPATH -do eval test x\${$as_var+set} = xset \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# CDPATH. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -if test "x$CONFIG_SHELL" = x; then - as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : - emulate sh - NULLCMD=: - # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which - # is contrary to our usage. Disable this feature. - alias -g '\${1+\"\$@\"}'='\"\$@\"' - setopt NO_GLOB_SUBST -else - case \`(set -o) 2>/dev/null\` in #( - *posix*) : - set -o posix ;; #( - *) : - ;; -esac -fi -" - as_required="as_fn_return () { (exit \$1); } -as_fn_success () { as_fn_return 0; } -as_fn_failure () { as_fn_return 1; } -as_fn_ret_success () { return 0; } -as_fn_ret_failure () { return 1; } - -exitcode=0 -as_fn_success || { exitcode=1; echo as_fn_success failed.; } -as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } -as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } -as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } -if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : - -else - exitcode=1; echo positional parameters were not saved. -fi -test x\$exitcode = x0 || exit 1" - as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO - as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO - eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && - test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 -test \$(( 1 + 1 )) = 2 || exit 1" - if (eval "$as_required") 2>/dev/null; then : - as_have_required=yes -else - as_have_required=no -fi - if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : - -else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -as_found=false -for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - as_found=: - case $as_dir in #( - /*) - for as_base in sh bash ksh sh5; do - # Try only shells that exist, to save several forks. - as_shell=$as_dir/$as_base - if { test -f "$as_shell" || test -f "$as_shell.exe"; } && - { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : - CONFIG_SHELL=$as_shell as_have_required=yes - if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : - break 2 -fi -fi - done;; - esac - as_found=false -done -$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && - { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : - CONFIG_SHELL=$SHELL as_have_required=yes -fi; } -IFS=$as_save_IFS - - - if test "x$CONFIG_SHELL" != x; then : - # We cannot yet assume a decent shell, so we have to provide a - # neutralization value for shells without unset; and this also - # works around shells that cannot unset nonexistent variables. - BASH_ENV=/dev/null - ENV=/dev/null - (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV - export CONFIG_SHELL - exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} -fi - - if test x$as_have_required = xno; then : - $as_echo "$0: This script requires a shell more modern than all" - $as_echo "$0: the shells that I found on your system." - if test x${ZSH_VERSION+set} = xset ; then - $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" - $as_echo "$0: be upgraded to zsh 4.3.4 or later." - else - $as_echo "$0: Please tell bug-autoconf@gnu.org about your system, -$0: including any error possibly output before this -$0: message. Then install a modern shell, or manually run -$0: the script under such a shell if you do have one." - fi - exit 1 -fi -fi -fi -SHELL=${CONFIG_SHELL-/bin/sh} -export SHELL -# Unset more variables known to interfere with behavior of common tools. -CLICOLOR_FORCE= GREP_OPTIONS= -unset CLICOLOR_FORCE GREP_OPTIONS - -## --------------------- ## -## M4sh Shell Functions. ## -## --------------------- ## -# as_fn_unset VAR -# --------------- -# Portably unset VAR. -as_fn_unset () -{ - { eval $1=; unset $1;} -} -as_unset=as_fn_unset - -# as_fn_set_status STATUS -# ----------------------- -# Set $? to STATUS, without forking. -as_fn_set_status () -{ - return $1 -} # as_fn_set_status - -# as_fn_exit STATUS -# ----------------- -# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. -as_fn_exit () -{ - set +e - as_fn_set_status $1 - exit $1 -} # as_fn_exit - -# as_fn_mkdir_p -# ------------- -# Create "$as_dir" as a directory, including parents if necessary. -as_fn_mkdir_p () -{ - - case $as_dir in #( - -*) as_dir=./$as_dir;; - esac - test -d "$as_dir" || eval $as_mkdir_p || { - as_dirs= - while :; do - case $as_dir in #( - *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( - *) as_qdir=$as_dir;; - esac - as_dirs="'$as_qdir' $as_dirs" - as_dir=`$as_dirname -- "$as_dir" || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - test -d "$as_dir" && break - done - test -z "$as_dirs" || eval "mkdir $as_dirs" - } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir" - - -} # as_fn_mkdir_p -# as_fn_append VAR VALUE -# ---------------------- -# Append the text in VALUE to the end of the definition contained in VAR. Take -# advantage of any shell optimizations that allow amortized linear growth over -# repeated appends, instead of the typical quadratic growth present in naive -# implementations. -if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : - eval 'as_fn_append () - { - eval $1+=\$2 - }' -else - as_fn_append () - { - eval $1=\$$1\$2 - } -fi # as_fn_append - -# as_fn_arith ARG... -# ------------------ -# Perform arithmetic evaluation on the ARGs, and store the result in the -# global $as_val. Take advantage of shells that can avoid forks. The arguments -# must be portable across $(()) and expr. -if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : - eval 'as_fn_arith () - { - as_val=$(( $* )) - }' -else - as_fn_arith () - { - as_val=`expr "$@" || test $? -eq 1` - } -fi # as_fn_arith - - -# as_fn_error ERROR [LINENO LOG_FD] -# --------------------------------- -# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are -# provided, also output the error to LOG_FD, referencing LINENO. Then exit the -# script with status $?, using 1 if that was 0. -as_fn_error () -{ - as_status=$?; test $as_status -eq 0 && as_status=1 - if test "$3"; then - as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3 - fi - $as_echo "$as_me: error: $1" >&2 - as_fn_exit $as_status -} # as_fn_error - -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi - -if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then - as_basename=basename -else - as_basename=false -fi - -if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then - as_dirname=dirname -else - as_dirname=false -fi - -as_me=`$as_basename -- "$0" || -$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X/"$0" | - sed '/^.*\/\([^/][^/]*\)\/*$/{ - s//\1/ - q - } - /^X\/\(\/\/\)$/{ - s//\1/ - q - } - /^X\/\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - -# Avoid depending upon Character Ranges. -as_cr_letters='abcdefghijklmnopqrstuvwxyz' -as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' -as_cr_Letters=$as_cr_letters$as_cr_LETTERS -as_cr_digits='0123456789' -as_cr_alnum=$as_cr_Letters$as_cr_digits - - - as_lineno_1=$LINENO as_lineno_1a=$LINENO - as_lineno_2=$LINENO as_lineno_2a=$LINENO - eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && - test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { - # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) - sed -n ' - p - /[$]LINENO/= - ' <$as_myself | - sed ' - s/[$]LINENO.*/&-/ - t lineno - b - :lineno - N - :loop - s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ - t loop - s/-\n.*// - ' >$as_me.lineno && - chmod +x "$as_me.lineno" || - { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } - - # Don't try to exec as it changes $[0], causing all sort of problems - # (the dirname of $[0] is not the place where we might find the - # original and so on. Autoconf is especially sensitive to this). - . "./$as_me.lineno" - # Exit status is that of the last command. - exit -} - -ECHO_C= ECHO_N= ECHO_T= -case `echo -n x` in #((((( --n*) - case `echo 'xy\c'` in - *c*) ECHO_T=' ';; # ECHO_T is single tab character. - xy) ECHO_C='\c';; - *) echo `echo ksh88 bug on AIX 6.1` > /dev/null - ECHO_T=' ';; - esac;; -*) - ECHO_N='-n';; -esac - -rm -f conf$$ conf$$.exe conf$$.file -if test -d conf$$.dir; then - rm -f conf$$.dir/conf$$.file -else - rm -f conf$$.dir - mkdir conf$$.dir 2>/dev/null -fi -if (echo >conf$$.file) 2>/dev/null; then - if ln -s conf$$.file conf$$ 2>/dev/null; then - as_ln_s='ln -s' - # ... but there are two gotchas: - # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -p'. - ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || - as_ln_s='cp -p' - elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln - else - as_ln_s='cp -p' - fi -else - as_ln_s='cp -p' -fi -rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file -rmdir conf$$.dir 2>/dev/null - -if mkdir -p . 2>/dev/null; then - as_mkdir_p='mkdir -p "$as_dir"' -else - test -d ./-p && rmdir ./-p - as_mkdir_p=false -fi - -if test -x / >/dev/null 2>&1; then - as_test_x='test -x' -else - if ls -dL / >/dev/null 2>&1; then - as_ls_L_option=L - else - as_ls_L_option= - fi - as_test_x=' - eval sh -c '\'' - if test -d "$1"; then - test -d "$1/."; - else - case $1 in #( - -*)set "./$1";; - esac; - case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( - ???[sx]*):;;*)false;;esac;fi - '\'' sh - ' -fi -as_executable_p=$as_test_x - -# Sed expression to map a string onto a valid CPP name. -as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" - -# Sed expression to map a string onto a valid variable name. -as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" - - - -# Check that we are running under the correct shell. -SHELL=${CONFIG_SHELL-/bin/sh} - -case X$lt_ECHO in -X*--fallback-echo) - # Remove one level of quotation (which was required for Make). - ECHO=`echo "$lt_ECHO" | sed 's,\\\\\$\\$0,'$0','` - ;; -esac - -ECHO=${lt_ECHO-echo} -if test "X$1" = X--no-reexec; then - # Discard the --no-reexec flag, and continue. - shift -elif test "X$1" = X--fallback-echo; then - # Avoid inline document here, it may be left over - : -elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' ; then - # Yippee, $ECHO works! - : -else - # Restart under the correct shell. - exec $SHELL "$0" --no-reexec ${1+"$@"} -fi - -if test "X$1" = X--fallback-echo; then - # used as fallback echo - shift - cat <<_LT_EOF -$* -_LT_EOF - exit 0 -fi - -# The HP-UX ksh and POSIX shell print the target directory to stdout -# if CDPATH is set. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -if test -z "$lt_ECHO"; then - if test "X${echo_test_string+set}" != Xset; then - # find a string as large as possible, as long as the shell can cope with it - for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do - # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ... - if { echo_test_string=`eval $cmd`; } 2>/dev/null && - { test "X$echo_test_string" = "X$echo_test_string"; } 2>/dev/null - then - break - fi - done - fi - - if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' && - echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - : - else - # The Solaris, AIX, and Digital Unix default echo programs unquote - # backslashes. This makes it impossible to quote backslashes using - # echo "$something" | sed 's/\\/\\\\/g' - # - # So, first we look for a working echo in the user's PATH. - - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for dir in $PATH /usr/ucb; do - IFS="$lt_save_ifs" - if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && - test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && - echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - ECHO="$dir/echo" - break - fi - done - IFS="$lt_save_ifs" - - if test "X$ECHO" = Xecho; then - # We didn't find a better echo, so look for alternatives. - if test "X`{ print -r '\t'; } 2>/dev/null`" = 'X\t' && - echo_testing_string=`{ print -r "$echo_test_string"; } 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - # This shell has a builtin print -r that does the trick. - ECHO='print -r' - elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } && - test "X$CONFIG_SHELL" != X/bin/ksh; then - # If we have ksh, try running configure again with it. - ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} - export ORIGINAL_CONFIG_SHELL - CONFIG_SHELL=/bin/ksh - export CONFIG_SHELL - exec $CONFIG_SHELL "$0" --no-reexec ${1+"$@"} - else - # Try using printf. - ECHO='printf %s\n' - if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' && - echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - # Cool, printf works - : - elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && - test "X$echo_testing_string" = 'X\t' && - echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL - export CONFIG_SHELL - SHELL="$CONFIG_SHELL" - export SHELL - ECHO="$CONFIG_SHELL $0 --fallback-echo" - elif echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && - test "X$echo_testing_string" = 'X\t' && - echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - ECHO="$CONFIG_SHELL $0 --fallback-echo" - else - # maybe with a smaller string... - prev=: - - for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do - if { test "X$echo_test_string" = "X`eval $cmd`"; } 2>/dev/null - then - break - fi - prev="$cmd" - done - - if test "$prev" != 'sed 50q "$0"'; then - echo_test_string=`eval $prev` - export echo_test_string - exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "$0" ${1+"$@"} - else - # Oops. We lost completely, so just stick with echo. - ECHO=echo - fi - fi - fi - fi - fi -fi - -# Copy echo and quote the copy suitably for passing to libtool from -# the Makefile, instead of quoting the original, which is used later. -lt_ECHO=$ECHO -if test "X$lt_ECHO" = "X$CONFIG_SHELL $0 --fallback-echo"; then - lt_ECHO="$CONFIG_SHELL \\\$\$0 --fallback-echo" -fi - - - - -test -n "$DJDIR" || exec 7<&0 &1 - -# Name of the host. -# hostname on some systems (SVR3.2, Linux) returns a bogus exit status, -# so uname gets run too. -ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` - -# -# Initializations. -# -ac_default_prefix=/usr/local -ac_clean_files= -ac_config_libobj_dir=. -LIBOBJS= -cross_compiling=no -subdirs= -MFLAGS= -MAKEFLAGS= - -# Identity of this package. -PACKAGE_NAME= -PACKAGE_TARNAME= -PACKAGE_VERSION= -PACKAGE_STRING= -PACKAGE_BUGREPORT= -PACKAGE_URL= - -ac_unique_file="src/radlogin.c" -# Factoring default headers for most tests. -ac_includes_default="\ -#include -#ifdef HAVE_SYS_TYPES_H -# include -#endif -#ifdef HAVE_SYS_STAT_H -# include -#endif -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif -#ifdef HAVE_STRING_H -# if !defined STDC_HEADERS && defined HAVE_MEMORY_H -# include -# endif -# include -#endif -#ifdef HAVE_STRINGS_H -# include -#endif -#ifdef HAVE_INTTYPES_H -# include -#endif -#ifdef HAVE_STDINT_H -# include -#endif -#ifdef HAVE_UNISTD_H -# include -#endif" - -ac_subst_vars='am__EXEEXT_FALSE -am__EXEEXT_TRUE -LTLIBOBJS -RC_LOG_FACILITY -RC_SECURE_PATH -ALLOCA -LIBOBJS -CPP -OTOOL64 -OTOOL -LIPO -NMEDIT -DSYMUTIL -lt_ECHO -RANLIB -AR -OBJDUMP -LN_S -NM -ac_ct_DUMPBIN -DUMPBIN -LD -FGREP -EGREP -GREP -SED -am__fastdepCC_FALSE -am__fastdepCC_TRUE -CCDEPMODE -AMDEPBACKSLASH -AMDEP_FALSE -AMDEP_TRUE -am__quote -am__include -DEPDIR -OBJEXT -EXEEXT -ac_ct_CC -CPPFLAGS -LDFLAGS -CFLAGS -CC -LIBTOOL -pkgsysconfdir -LIBVERSION -am__untar -am__tar -AMTAR -am__leading_dot -SET_MAKE -AWK -mkdir_p -MKDIR_P -INSTALL_STRIP_PROGRAM -STRIP -install_sh -MAKEINFO -AUTOHEADER -AUTOMAKE -AUTOCONF -ACLOCAL -VERSION -PACKAGE -CYGPATH_W -am__isrc -INSTALL_DATA -INSTALL_SCRIPT -INSTALL_PROGRAM -target_os -target_vendor -target_cpu -target -host_os -host_vendor -host_cpu -host -build_os -build_vendor -build_cpu -build -MAINT -MAINTAINER_MODE_FALSE -MAINTAINER_MODE_TRUE -target_alias -host_alias -build_alias -LIBS -ECHO_T -ECHO_N -ECHO_C -DEFS -mandir -localedir -libdir -psdir -pdfdir -dvidir -htmldir -infodir -docdir -oldincludedir -includedir -localstatedir -sharedstatedir -sysconfdir -datadir -datarootdir -libexecdir -sbindir -bindir -program_transform_name -prefix -exec_prefix -PACKAGE_URL -PACKAGE_BUGREPORT -PACKAGE_STRING -PACKAGE_VERSION -PACKAGE_TARNAME -PACKAGE_NAME -PATH_SEPARATOR -SHELL' -ac_subst_files='' -ac_user_opts=' -enable_option_checking -enable_maintainer_mode -enable_shared -enable_static -with_pic -enable_fast_install -enable_dependency_tracking -with_gnu_ld -enable_libtool_lock -enable_shadow -with_secure_path -with_facility -enable_radius_116 -enable_scp -' - ac_precious_vars='build_alias -host_alias -target_alias -CC -CFLAGS -LDFLAGS -LIBS -CPPFLAGS -CPP' - - -# Initialize some variables set by options. -ac_init_help= -ac_init_version=false -ac_unrecognized_opts= -ac_unrecognized_sep= -# The variables have the same names as the options, with -# dashes changed to underlines. -cache_file=/dev/null -exec_prefix=NONE -no_create= -no_recursion= -prefix=NONE -program_prefix=NONE -program_suffix=NONE -program_transform_name=s,x,x, -silent= -site= -srcdir= -verbose= -x_includes=NONE -x_libraries=NONE - -# Installation directory options. -# These are left unexpanded so users can "make install exec_prefix=/foo" -# and all the variables that are supposed to be based on exec_prefix -# by default will actually change. -# Use braces instead of parens because sh, perl, etc. also accept them. -# (The list follows the same order as the GNU Coding Standards.) -bindir='${exec_prefix}/bin' -sbindir='${exec_prefix}/sbin' -libexecdir='${exec_prefix}/libexec' -datarootdir='${prefix}/share' -datadir='${datarootdir}' -sysconfdir='${prefix}/etc' -sharedstatedir='${prefix}/com' -localstatedir='${prefix}/var' -includedir='${prefix}/include' -oldincludedir='/usr/include' -docdir='${datarootdir}/doc/${PACKAGE}' -infodir='${datarootdir}/info' -htmldir='${docdir}' -dvidir='${docdir}' -pdfdir='${docdir}' -psdir='${docdir}' -libdir='${exec_prefix}/lib' -localedir='${datarootdir}/locale' -mandir='${datarootdir}/man' - -ac_prev= -ac_dashdash= -for ac_option -do - # If the previous option needs an argument, assign it. - if test -n "$ac_prev"; then - eval $ac_prev=\$ac_option - ac_prev= - continue - fi - - case $ac_option in - *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; - *) ac_optarg=yes ;; - esac - - # Accept the important Cygnus configure options, so we can diagnose typos. - - case $ac_dashdash$ac_option in - --) - ac_dashdash=yes ;; - - -bindir | --bindir | --bindi | --bind | --bin | --bi) - ac_prev=bindir ;; - -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) - bindir=$ac_optarg ;; - - -build | --build | --buil | --bui | --bu) - ac_prev=build_alias ;; - -build=* | --build=* | --buil=* | --bui=* | --bu=*) - build_alias=$ac_optarg ;; - - -cache-file | --cache-file | --cache-fil | --cache-fi \ - | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) - ac_prev=cache_file ;; - -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ - | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) - cache_file=$ac_optarg ;; - - --config-cache | -C) - cache_file=config.cache ;; - - -datadir | --datadir | --datadi | --datad) - ac_prev=datadir ;; - -datadir=* | --datadir=* | --datadi=* | --datad=*) - datadir=$ac_optarg ;; - - -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ - | --dataroo | --dataro | --datar) - ac_prev=datarootdir ;; - -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ - | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) - datarootdir=$ac_optarg ;; - - -disable-* | --disable-*) - ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error "invalid feature name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"enable_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval enable_$ac_useropt=no ;; - - -docdir | --docdir | --docdi | --doc | --do) - ac_prev=docdir ;; - -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) - docdir=$ac_optarg ;; - - -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) - ac_prev=dvidir ;; - -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) - dvidir=$ac_optarg ;; - - -enable-* | --enable-*) - ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error "invalid feature name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"enable_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval enable_$ac_useropt=\$ac_optarg ;; - - -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ - | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ - | --exec | --exe | --ex) - ac_prev=exec_prefix ;; - -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ - | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ - | --exec=* | --exe=* | --ex=*) - exec_prefix=$ac_optarg ;; - - -gas | --gas | --ga | --g) - # Obsolete; use --with-gas. - with_gas=yes ;; - - -help | --help | --hel | --he | -h) - ac_init_help=long ;; - -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) - ac_init_help=recursive ;; - -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) - ac_init_help=short ;; - - -host | --host | --hos | --ho) - ac_prev=host_alias ;; - -host=* | --host=* | --hos=* | --ho=*) - host_alias=$ac_optarg ;; - - -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) - ac_prev=htmldir ;; - -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ - | --ht=*) - htmldir=$ac_optarg ;; - - -includedir | --includedir | --includedi | --included | --include \ - | --includ | --inclu | --incl | --inc) - ac_prev=includedir ;; - -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ - | --includ=* | --inclu=* | --incl=* | --inc=*) - includedir=$ac_optarg ;; - - -infodir | --infodir | --infodi | --infod | --info | --inf) - ac_prev=infodir ;; - -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) - infodir=$ac_optarg ;; - - -libdir | --libdir | --libdi | --libd) - ac_prev=libdir ;; - -libdir=* | --libdir=* | --libdi=* | --libd=*) - libdir=$ac_optarg ;; - - -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ - | --libexe | --libex | --libe) - ac_prev=libexecdir ;; - -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ - | --libexe=* | --libex=* | --libe=*) - libexecdir=$ac_optarg ;; - - -localedir | --localedir | --localedi | --localed | --locale) - ac_prev=localedir ;; - -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) - localedir=$ac_optarg ;; - - -localstatedir | --localstatedir | --localstatedi | --localstated \ - | --localstate | --localstat | --localsta | --localst | --locals) - ac_prev=localstatedir ;; - -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ - | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) - localstatedir=$ac_optarg ;; - - -mandir | --mandir | --mandi | --mand | --man | --ma | --m) - ac_prev=mandir ;; - -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) - mandir=$ac_optarg ;; - - -nfp | --nfp | --nf) - # Obsolete; use --without-fp. - with_fp=no ;; - - -no-create | --no-create | --no-creat | --no-crea | --no-cre \ - | --no-cr | --no-c | -n) - no_create=yes ;; - - -no-recursion | --no-recursion | --no-recursio | --no-recursi \ - | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) - no_recursion=yes ;; - - -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ - | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ - | --oldin | --oldi | --old | --ol | --o) - ac_prev=oldincludedir ;; - -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ - | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ - | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) - oldincludedir=$ac_optarg ;; - - -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) - ac_prev=prefix ;; - -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) - prefix=$ac_optarg ;; - - -program-prefix | --program-prefix | --program-prefi | --program-pref \ - | --program-pre | --program-pr | --program-p) - ac_prev=program_prefix ;; - -program-prefix=* | --program-prefix=* | --program-prefi=* \ - | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) - program_prefix=$ac_optarg ;; - - -program-suffix | --program-suffix | --program-suffi | --program-suff \ - | --program-suf | --program-su | --program-s) - ac_prev=program_suffix ;; - -program-suffix=* | --program-suffix=* | --program-suffi=* \ - | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) - program_suffix=$ac_optarg ;; - - -program-transform-name | --program-transform-name \ - | --program-transform-nam | --program-transform-na \ - | --program-transform-n | --program-transform- \ - | --program-transform | --program-transfor \ - | --program-transfo | --program-transf \ - | --program-trans | --program-tran \ - | --progr-tra | --program-tr | --program-t) - ac_prev=program_transform_name ;; - -program-transform-name=* | --program-transform-name=* \ - | --program-transform-nam=* | --program-transform-na=* \ - | --program-transform-n=* | --program-transform-=* \ - | --program-transform=* | --program-transfor=* \ - | --program-transfo=* | --program-transf=* \ - | --program-trans=* | --program-tran=* \ - | --progr-tra=* | --program-tr=* | --program-t=*) - program_transform_name=$ac_optarg ;; - - -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) - ac_prev=pdfdir ;; - -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) - pdfdir=$ac_optarg ;; - - -psdir | --psdir | --psdi | --psd | --ps) - ac_prev=psdir ;; - -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) - psdir=$ac_optarg ;; - - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil) - silent=yes ;; - - -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) - ac_prev=sbindir ;; - -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ - | --sbi=* | --sb=*) - sbindir=$ac_optarg ;; - - -sharedstatedir | --sharedstatedir | --sharedstatedi \ - | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ - | --sharedst | --shareds | --shared | --share | --shar \ - | --sha | --sh) - ac_prev=sharedstatedir ;; - -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ - | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ - | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ - | --sha=* | --sh=*) - sharedstatedir=$ac_optarg ;; - - -site | --site | --sit) - ac_prev=site ;; - -site=* | --site=* | --sit=*) - site=$ac_optarg ;; - - -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) - ac_prev=srcdir ;; - -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) - srcdir=$ac_optarg ;; - - -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ - | --syscon | --sysco | --sysc | --sys | --sy) - ac_prev=sysconfdir ;; - -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ - | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) - sysconfdir=$ac_optarg ;; - - -target | --target | --targe | --targ | --tar | --ta | --t) - ac_prev=target_alias ;; - -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) - target_alias=$ac_optarg ;; - - -v | -verbose | --verbose | --verbos | --verbo | --verb) - verbose=yes ;; - - -version | --version | --versio | --versi | --vers | -V) - ac_init_version=: ;; - - -with-* | --with-*) - ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error "invalid package name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"with_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval with_$ac_useropt=\$ac_optarg ;; - - -without-* | --without-*) - ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error "invalid package name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"with_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval with_$ac_useropt=no ;; - - --x) - # Obsolete; use --with-x. - with_x=yes ;; - - -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ - | --x-incl | --x-inc | --x-in | --x-i) - ac_prev=x_includes ;; - -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ - | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) - x_includes=$ac_optarg ;; - - -x-libraries | --x-libraries | --x-librarie | --x-librari \ - | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) - ac_prev=x_libraries ;; - -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ - | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) - x_libraries=$ac_optarg ;; - - -*) as_fn_error "unrecognized option: \`$ac_option' -Try \`$0 --help' for more information." - ;; - - *=*) - ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` - # Reject names that are not valid shell variable names. - case $ac_envvar in #( - '' | [0-9]* | *[!_$as_cr_alnum]* ) - as_fn_error "invalid variable name: \`$ac_envvar'" ;; - esac - eval $ac_envvar=\$ac_optarg - export $ac_envvar ;; - - *) - # FIXME: should be removed in autoconf 3.0. - $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 - expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && - $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 - : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} - ;; - - esac -done - -if test -n "$ac_prev"; then - ac_option=--`echo $ac_prev | sed 's/_/-/g'` - as_fn_error "missing argument to $ac_option" -fi - -if test -n "$ac_unrecognized_opts"; then - case $enable_option_checking in - no) ;; - fatal) as_fn_error "unrecognized options: $ac_unrecognized_opts" ;; - *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; - esac -fi - -# Check all directory arguments for consistency. -for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ - datadir sysconfdir sharedstatedir localstatedir includedir \ - oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ - libdir localedir mandir -do - eval ac_val=\$$ac_var - # Remove trailing slashes. - case $ac_val in - */ ) - ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` - eval $ac_var=\$ac_val;; - esac - # Be sure to have absolute directory names. - case $ac_val in - [\\/$]* | ?:[\\/]* ) continue;; - NONE | '' ) case $ac_var in *prefix ) continue;; esac;; - esac - as_fn_error "expected an absolute directory name for --$ac_var: $ac_val" -done - -# There might be people who depend on the old broken behavior: `$host' -# used to hold the argument of --host etc. -# FIXME: To remove some day. -build=$build_alias -host=$host_alias -target=$target_alias - -# FIXME: To remove some day. -if test "x$host_alias" != x; then - if test "x$build_alias" = x; then - cross_compiling=maybe - $as_echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. - If a cross compiler is detected then cross compile mode will be used." >&2 - elif test "x$build_alias" != "x$host_alias"; then - cross_compiling=yes - fi -fi - -ac_tool_prefix= -test -n "$host_alias" && ac_tool_prefix=$host_alias- - -test "$silent" = yes && exec 6>/dev/null - - -ac_pwd=`pwd` && test -n "$ac_pwd" && -ac_ls_di=`ls -di .` && -ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || - as_fn_error "working directory cannot be determined" -test "X$ac_ls_di" = "X$ac_pwd_ls_di" || - as_fn_error "pwd does not report name of working directory" - - -# Find the source files, if location was not specified. -if test -z "$srcdir"; then - ac_srcdir_defaulted=yes - # Try the directory containing this script, then the parent directory. - ac_confdir=`$as_dirname -- "$as_myself" || -$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_myself" : 'X\(//\)[^/]' \| \ - X"$as_myself" : 'X\(//\)$' \| \ - X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_myself" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - srcdir=$ac_confdir - if test ! -r "$srcdir/$ac_unique_file"; then - srcdir=.. - fi -else - ac_srcdir_defaulted=no -fi -if test ! -r "$srcdir/$ac_unique_file"; then - test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." - as_fn_error "cannot find sources ($ac_unique_file) in $srcdir" -fi -ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" -ac_abs_confdir=`( - cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error "$ac_msg" - pwd)` -# When building in place, set srcdir=. -if test "$ac_abs_confdir" = "$ac_pwd"; then - srcdir=. -fi -# Remove unnecessary trailing slashes from srcdir. -# Double slashes in file names in object file debugging info -# mess up M-x gdb in Emacs. -case $srcdir in -*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; -esac -for ac_var in $ac_precious_vars; do - eval ac_env_${ac_var}_set=\${${ac_var}+set} - eval ac_env_${ac_var}_value=\$${ac_var} - eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} - eval ac_cv_env_${ac_var}_value=\$${ac_var} -done - -# -# Report the --help message. -# -if test "$ac_init_help" = "long"; then - # Omit some internal or obsolete options to make the list less imposing. - # This message is too long to be a string in the A/UX 3.1 sh. - cat <<_ACEOF -\`configure' configures this package to adapt to many kinds of systems. - -Usage: $0 [OPTION]... [VAR=VALUE]... - -To assign environment variables (e.g., CC, CFLAGS...), specify them as -VAR=VALUE. See below for descriptions of some of the useful variables. - -Defaults for the options are specified in brackets. - -Configuration: - -h, --help display this help and exit - --help=short display options specific to this package - --help=recursive display the short help of all the included packages - -V, --version display version information and exit - -q, --quiet, --silent do not print \`checking...' messages - --cache-file=FILE cache test results in FILE [disabled] - -C, --config-cache alias for \`--cache-file=config.cache' - -n, --no-create do not create output files - --srcdir=DIR find the sources in DIR [configure dir or \`..'] - -Installation directories: - --prefix=PREFIX install architecture-independent files in PREFIX - [$ac_default_prefix] - --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX - [PREFIX] - -By default, \`make install' will install all the files in -\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify -an installation prefix other than \`$ac_default_prefix' using \`--prefix', -for instance \`--prefix=\$HOME'. - -For better control, use the options below. - -Fine tuning of the installation directories: - --bindir=DIR user executables [EPREFIX/bin] - --sbindir=DIR system admin executables [EPREFIX/sbin] - --libexecdir=DIR program executables [EPREFIX/libexec] - --sysconfdir=DIR read-only single-machine data [PREFIX/etc] - --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] - --localstatedir=DIR modifiable single-machine data [PREFIX/var] - --libdir=DIR object code libraries [EPREFIX/lib] - --includedir=DIR C header files [PREFIX/include] - --oldincludedir=DIR C header files for non-gcc [/usr/include] - --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] - --datadir=DIR read-only architecture-independent data [DATAROOTDIR] - --infodir=DIR info documentation [DATAROOTDIR/info] - --localedir=DIR locale-dependent data [DATAROOTDIR/locale] - --mandir=DIR man documentation [DATAROOTDIR/man] - --docdir=DIR documentation root [DATAROOTDIR/doc/PACKAGE] - --htmldir=DIR html documentation [DOCDIR] - --dvidir=DIR dvi documentation [DOCDIR] - --pdfdir=DIR pdf documentation [DOCDIR] - --psdir=DIR ps documentation [DOCDIR] -_ACEOF - - cat <<\_ACEOF - -Program names: - --program-prefix=PREFIX prepend PREFIX to installed program names - --program-suffix=SUFFIX append SUFFIX to installed program names - --program-transform-name=PROGRAM run sed PROGRAM on installed program names - -System types: - --build=BUILD configure for building on BUILD [guessed] - --host=HOST cross-compile to build programs to run on HOST [BUILD] - --target=TARGET configure for building compilers for TARGET [HOST] -_ACEOF -fi - -if test -n "$ac_init_help"; then - - cat <<\_ACEOF - -Optional Features: - --disable-option-checking ignore unrecognized --enable/--with options - --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) - --enable-FEATURE[=ARG] include FEATURE [ARG=yes] - --enable-maintainer-mode enable make rules and dependencies not useful - (and sometimes confusing) to the casual installer - --enable-shared[=PKGS] build shared libraries [default=yes] - --enable-static[=PKGS] build static libraries [default=yes] - --enable-fast-install[=PKGS] - optimize for fast installation [default=yes] - --disable-dependency-tracking speeds up one-time build - --enable-dependency-tracking do not reject slow dependency extractors - --disable-libtool-lock avoid locking (might break parallel builds) - --enable-shadow Enable shadow password support - --enable-radius-116 Include support for Livingston's RADIUS server 1.16 - --enable-scp Add service type hints derived from username prefix - -Optional Packages: - --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] - --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) - --with-pic try to use only PIC/non-PIC objects [default=use - both] - --with-gnu-ld assume the C compiler uses GNU ld [default=no] - --with-secure-path PATH setting for exec'ed programs - --with-facility Syslog facility to use - -Some influential environment variables: - CC C compiler command - CFLAGS C compiler flags - LDFLAGS linker flags, e.g. -L if you have libraries in a - nonstandard directory - LIBS libraries to pass to the linker, e.g. -l - CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if - you have headers in a nonstandard directory - CPP C preprocessor - -Use these variables to override the choices made by `configure' or to help -it to find libraries and programs with nonstandard names/locations. - -Report bugs to the package provider. -_ACEOF -ac_status=$? -fi - -if test "$ac_init_help" = "recursive"; then - # If there are subdirs, report their specific --help. - for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue - test -d "$ac_dir" || - { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || - continue - ac_builddir=. - -case "$ac_dir" in -.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; -*) - ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` - # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` - case $ac_top_builddir_sub in - "") ac_top_builddir_sub=. ac_top_build_prefix= ;; - *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; - esac ;; -esac -ac_abs_top_builddir=$ac_pwd -ac_abs_builddir=$ac_pwd$ac_dir_suffix -# for backward compatibility: -ac_top_builddir=$ac_top_build_prefix - -case $srcdir in - .) # We are building in place. - ac_srcdir=. - ac_top_srcdir=$ac_top_builddir_sub - ac_abs_top_srcdir=$ac_pwd ;; - [\\/]* | ?:[\\/]* ) # Absolute name. - ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir - ac_abs_top_srcdir=$srcdir ;; - *) # Relative name. - ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_build_prefix$srcdir - ac_abs_top_srcdir=$ac_pwd/$srcdir ;; -esac -ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix - - cd "$ac_dir" || { ac_status=$?; continue; } - # Check for guested configure. - if test -f "$ac_srcdir/configure.gnu"; then - echo && - $SHELL "$ac_srcdir/configure.gnu" --help=recursive - elif test -f "$ac_srcdir/configure"; then - echo && - $SHELL "$ac_srcdir/configure" --help=recursive - else - $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 - fi || ac_status=$? - cd "$ac_pwd" || { ac_status=$?; break; } - done -fi - -test -n "$ac_init_help" && exit $ac_status -if $ac_init_version; then - cat <<\_ACEOF -configure -generated by GNU Autoconf 2.65 - -Copyright (C) 2009 Free Software Foundation, Inc. -This configure script is free software; the Free Software Foundation -gives unlimited permission to copy, distribute and modify it. -_ACEOF - exit -fi - -## ------------------------ ## -## Autoconf initialization. ## -## ------------------------ ## - -# ac_fn_c_try_compile LINENO -# -------------------------- -# Try to compile conftest.$ac_ext, and return whether this succeeded. -ac_fn_c_try_compile () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext - if { { ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compile") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - as_fn_set_status $ac_retval - -} # ac_fn_c_try_compile - -# ac_fn_c_try_link LINENO -# ----------------------- -# Try to link conftest.$ac_ext, and return whether this succeeded. -ac_fn_c_try_link () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext conftest$ac_exeext - if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && { - test "$cross_compiling" = yes || - $as_test_x conftest$ac_exeext - }; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information - # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would - # interfere with the next link command; also delete a directory that is - # left behind by Apple's compiler. We do this before executing the actions. - rm -rf conftest.dSYM conftest_ipa8_conftest.oo - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - as_fn_set_status $ac_retval - -} # ac_fn_c_try_link - -# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES -# ------------------------------------------------------- -# Tests whether HEADER exists and can be compiled using the include files in -# INCLUDES, setting the cache variable VAR accordingly. -ac_fn_c_check_header_compile () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -#include <$2> -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - eval "$3=yes" -else - eval "$3=no" -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - -} # ac_fn_c_check_header_compile - -# ac_fn_c_try_cpp LINENO -# ---------------------- -# Try to preprocess conftest.$ac_ext, and return whether this succeeded. -ac_fn_c_try_cpp () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { { ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - as_fn_set_status $ac_retval - -} # ac_fn_c_try_cpp - -# ac_fn_c_try_run LINENO -# ---------------------- -# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes -# that executables *can* be run. -ac_fn_c_try_run () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' - { { case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then : - ac_retval=0 -else - $as_echo "$as_me: program exited with status $ac_status" >&5 - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=$ac_status -fi - rm -rf conftest.dSYM conftest_ipa8_conftest.oo - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - as_fn_set_status $ac_retval - -} # ac_fn_c_try_run - -# ac_fn_c_check_func LINENO FUNC VAR -# ---------------------------------- -# Tests whether FUNC exists, setting the cache variable VAR accordingly -ac_fn_c_check_func () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -/* Define $2 to an innocuous variant, in case declares $2. - For example, HP-UX 11i declares gettimeofday. */ -#define $2 innocuous_$2 - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $2 (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef $2 - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char $2 (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined __stub_$2 || defined __stub___$2 -choke me -#endif - -int -main () -{ -return $2 (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$3=yes" -else - eval "$3=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - -} # ac_fn_c_check_func - -# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES -# ------------------------------------------------------- -# Tests whether HEADER exists, giving a warning if it cannot be compiled using -# the include files in INCLUDES and setting the cache variable VAR -# accordingly. -ac_fn_c_check_header_mongrel () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : - $as_echo_n "(cached) " >&6 -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -else - # Is the header compilable? -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 -$as_echo_n "checking $2 usability... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -#include <$2> -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_header_compiler=yes -else - ac_header_compiler=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 -$as_echo "$ac_header_compiler" >&6; } - -# Is the header present? -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 -$as_echo_n "checking $2 presence... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <$2> -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - ac_header_preproc=yes -else - ac_header_preproc=no -fi -rm -f conftest.err conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 -$as_echo "$ac_header_preproc" >&6; } - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( - yes:no: ) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 -$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} - ;; - no:yes:* ) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 -$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 -$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 -$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 -$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} - ;; -esac - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : - $as_echo_n "(cached) " >&6 -else - eval "$3=\$ac_header_compiler" -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -fi - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - -} # ac_fn_c_check_header_mongrel - -# ac_fn_c_check_type LINENO TYPE VAR INCLUDES -# ------------------------------------------- -# Tests whether TYPE exists after having included INCLUDES, setting cache -# variable VAR accordingly. -ac_fn_c_check_type () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : - $as_echo_n "(cached) " >&6 -else - eval "$3=no" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -if (sizeof ($2)) - return 0; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -if (sizeof (($2))) - return 0; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - -else - eval "$3=yes" -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - -} # ac_fn_c_check_type -cat >config.log <<_ACEOF -This file contains any messages produced by compilers while -running configure, to aid debugging if configure makes a mistake. - -It was created by $as_me, which was -generated by GNU Autoconf 2.65. Invocation command line was - - $ $0 $@ - -_ACEOF -exec 5>>config.log -{ -cat <<_ASUNAME -## --------- ## -## Platform. ## -## --------- ## - -hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` -uname -m = `(uname -m) 2>/dev/null || echo unknown` -uname -r = `(uname -r) 2>/dev/null || echo unknown` -uname -s = `(uname -s) 2>/dev/null || echo unknown` -uname -v = `(uname -v) 2>/dev/null || echo unknown` - -/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` -/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` - -/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` -/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` -/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` -/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` -/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` -/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` -/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` - -_ASUNAME - -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - $as_echo "PATH: $as_dir" - done -IFS=$as_save_IFS - -} >&5 - -cat >&5 <<_ACEOF - - -## ----------- ## -## Core tests. ## -## ----------- ## - -_ACEOF - - -# Keep a trace of the command line. -# Strip out --no-create and --no-recursion so they do not pile up. -# Strip out --silent because we don't want to record it for future runs. -# Also quote any args containing shell meta-characters. -# Make two passes to allow for proper duplicate-argument suppression. -ac_configure_args= -ac_configure_args0= -ac_configure_args1= -ac_must_keep_next=false -for ac_pass in 1 2 -do - for ac_arg - do - case $ac_arg in - -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil) - continue ;; - *\'*) - ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; - esac - case $ac_pass in - 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; - 2) - as_fn_append ac_configure_args1 " '$ac_arg'" - if test $ac_must_keep_next = true; then - ac_must_keep_next=false # Got value, back to normal. - else - case $ac_arg in - *=* | --config-cache | -C | -disable-* | --disable-* \ - | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ - | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ - | -with-* | --with-* | -without-* | --without-* | --x) - case "$ac_configure_args0 " in - "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; - esac - ;; - -* ) ac_must_keep_next=true ;; - esac - fi - as_fn_append ac_configure_args " '$ac_arg'" - ;; - esac - done -done -{ ac_configure_args0=; unset ac_configure_args0;} -{ ac_configure_args1=; unset ac_configure_args1;} - -# When interrupted or exit'd, cleanup temporary files, and complete -# config.log. We remove comments because anyway the quotes in there -# would cause problems or look ugly. -# WARNING: Use '\'' to represent an apostrophe within the trap. -# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. -trap 'exit_status=$? - # Save into config.log some information that might help in debugging. - { - echo - - cat <<\_ASBOX -## ---------------- ## -## Cache variables. ## -## ---------------- ## -_ASBOX - echo - # The following way of writing the cache mishandles newlines in values, -( - for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do - eval ac_val=\$$ac_var - case $ac_val in #( - *${as_nl}*) - case $ac_var in #( - *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; - esac - case $ac_var in #( - _ | IFS | as_nl) ;; #( - BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( - *) { eval $ac_var=; unset $ac_var;} ;; - esac ;; - esac - done - (set) 2>&1 | - case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( - *${as_nl}ac_space=\ *) - sed -n \ - "s/'\''/'\''\\\\'\'''\''/g; - s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" - ;; #( - *) - sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" - ;; - esac | - sort -) - echo - - cat <<\_ASBOX -## ----------------- ## -## Output variables. ## -## ----------------- ## -_ASBOX - echo - for ac_var in $ac_subst_vars - do - eval ac_val=\$$ac_var - case $ac_val in - *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; - esac - $as_echo "$ac_var='\''$ac_val'\''" - done | sort - echo - - if test -n "$ac_subst_files"; then - cat <<\_ASBOX -## ------------------- ## -## File substitutions. ## -## ------------------- ## -_ASBOX - echo - for ac_var in $ac_subst_files - do - eval ac_val=\$$ac_var - case $ac_val in - *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; - esac - $as_echo "$ac_var='\''$ac_val'\''" - done | sort - echo - fi - - if test -s confdefs.h; then - cat <<\_ASBOX -## ----------- ## -## confdefs.h. ## -## ----------- ## -_ASBOX - echo - cat confdefs.h - echo - fi - test "$ac_signal" != 0 && - $as_echo "$as_me: caught signal $ac_signal" - $as_echo "$as_me: exit $exit_status" - } >&5 - rm -f core *.core core.conftest.* && - rm -f -r conftest* confdefs* conf$$* $ac_clean_files && - exit $exit_status -' 0 -for ac_signal in 1 2 13 15; do - trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal -done -ac_signal=0 - -# confdefs.h avoids OS command line length limits that DEFS can exceed. -rm -f -r conftest* confdefs.h - -$as_echo "/* confdefs.h */" > confdefs.h - -# Predefined preprocessor variables. - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_NAME "$PACKAGE_NAME" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_TARNAME "$PACKAGE_TARNAME" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_VERSION "$PACKAGE_VERSION" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_STRING "$PACKAGE_STRING" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_URL "$PACKAGE_URL" -_ACEOF - - -# Let the site file select an alternate cache file if it wants to. -# Prefer an explicitly selected file to automatically selected ones. -ac_site_file1=NONE -ac_site_file2=NONE -if test -n "$CONFIG_SITE"; then - ac_site_file1=$CONFIG_SITE -elif test "x$prefix" != xNONE; then - ac_site_file1=$prefix/share/config.site - ac_site_file2=$prefix/etc/config.site -else - ac_site_file1=$ac_default_prefix/share/config.site - ac_site_file2=$ac_default_prefix/etc/config.site -fi -for ac_site_file in "$ac_site_file1" "$ac_site_file2" -do - test "x$ac_site_file" = xNONE && continue - if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 -$as_echo "$as_me: loading site script $ac_site_file" >&6;} - sed 's/^/| /' "$ac_site_file" >&5 - . "$ac_site_file" - fi -done - -if test -r "$cache_file"; then - # Some versions of bash will fail to source /dev/null (special files - # actually), so we avoid doing that. DJGPP emulates it as a regular file. - if test /dev/null != "$cache_file" && test -f "$cache_file"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 -$as_echo "$as_me: loading cache $cache_file" >&6;} - case $cache_file in - [\\/]* | ?:[\\/]* ) . "$cache_file";; - *) . "./$cache_file";; - esac - fi -else - { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 -$as_echo "$as_me: creating cache $cache_file" >&6;} - >$cache_file -fi - -# Check that the precious variables saved in the cache have kept the same -# value. -ac_cache_corrupted=false -for ac_var in $ac_precious_vars; do - eval ac_old_set=\$ac_cv_env_${ac_var}_set - eval ac_new_set=\$ac_env_${ac_var}_set - eval ac_old_val=\$ac_cv_env_${ac_var}_value - eval ac_new_val=\$ac_env_${ac_var}_value - case $ac_old_set,$ac_new_set in - set,) - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 -$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} - ac_cache_corrupted=: ;; - ,set) - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 -$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} - ac_cache_corrupted=: ;; - ,);; - *) - if test "x$ac_old_val" != "x$ac_new_val"; then - # differences in whitespace do not lead to failure. - ac_old_val_w=`echo x $ac_old_val` - ac_new_val_w=`echo x $ac_new_val` - if test "$ac_old_val_w" != "$ac_new_val_w"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 -$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} - ac_cache_corrupted=: - else - { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 -$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} - eval $ac_var=\$ac_old_val - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 -$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 -$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} - fi;; - esac - # Pass precious variables to config.status. - if test "$ac_new_set" = set; then - case $ac_new_val in - *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; - *) ac_arg=$ac_var=$ac_new_val ;; - esac - case " $ac_configure_args " in - *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. - *) as_fn_append ac_configure_args " '$ac_arg'" ;; - esac - fi -done -if $ac_cache_corrupted; then - { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 -$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} - as_fn_error "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 -fi -## -------------------- ## -## Main body of script. ## -## -------------------- ## - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5 -$as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; } - # Check whether --enable-maintainer-mode was given. -if test "${enable_maintainer_mode+set}" = set; then : - enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval -else - USE_MAINTAINER_MODE=no -fi - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_MAINTAINER_MODE" >&5 -$as_echo "$USE_MAINTAINER_MODE" >&6; } - if test $USE_MAINTAINER_MODE = yes; then - MAINTAINER_MODE_TRUE= - MAINTAINER_MODE_FALSE='#' -else - MAINTAINER_MODE_TRUE='#' - MAINTAINER_MODE_FALSE= -fi - - MAINT=$MAINTAINER_MODE_TRUE - - - - -ac_aux_dir= -for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do - for ac_t in install-sh install.sh shtool; do - if test -f "$ac_dir/$ac_t"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/$ac_t -c" - break 2 - fi - done -done -if test -z "$ac_aux_dir"; then - as_fn_error "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 -fi - -# These three variables are undocumented and unsupported, -# and are intended to be withdrawn in a future Autoconf release. -# They can cause serious problems if a builder's source tree is in a directory -# whose full name contains unusual characters. -ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. -ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. -ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. - - -# Make sure we can run config.sub. -$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || - as_fn_error "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 -$as_echo_n "checking build system type... " >&6; } -if test "${ac_cv_build+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_build_alias=$build_alias -test "x$ac_build_alias" = x && - ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` -test "x$ac_build_alias" = x && - as_fn_error "cannot guess build type; you must specify one" "$LINENO" 5 -ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || - as_fn_error "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 -$as_echo "$ac_cv_build" >&6; } -case $ac_cv_build in -*-*-*) ;; -*) as_fn_error "invalid value of canonical build" "$LINENO" 5;; -esac -build=$ac_cv_build -ac_save_IFS=$IFS; IFS='-' -set x $ac_cv_build -shift -build_cpu=$1 -build_vendor=$2 -shift; shift -# Remember, the first character of IFS is used to create $*, -# except with old shells: -build_os=$* -IFS=$ac_save_IFS -case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 -$as_echo_n "checking host system type... " >&6; } -if test "${ac_cv_host+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test "x$host_alias" = x; then - ac_cv_host=$ac_cv_build -else - ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || - as_fn_error "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 -$as_echo "$ac_cv_host" >&6; } -case $ac_cv_host in -*-*-*) ;; -*) as_fn_error "invalid value of canonical host" "$LINENO" 5;; -esac -host=$ac_cv_host -ac_save_IFS=$IFS; IFS='-' -set x $ac_cv_host -shift -host_cpu=$1 -host_vendor=$2 -shift; shift -# Remember, the first character of IFS is used to create $*, -# except with old shells: -host_os=$* -IFS=$ac_save_IFS -case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking target system type" >&5 -$as_echo_n "checking target system type... " >&6; } -if test "${ac_cv_target+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test "x$target_alias" = x; then - ac_cv_target=$ac_cv_host -else - ac_cv_target=`$SHELL "$ac_aux_dir/config.sub" $target_alias` || - as_fn_error "$SHELL $ac_aux_dir/config.sub $target_alias failed" "$LINENO" 5 -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_target" >&5 -$as_echo "$ac_cv_target" >&6; } -case $ac_cv_target in -*-*-*) ;; -*) as_fn_error "invalid value of canonical target" "$LINENO" 5;; -esac -target=$ac_cv_target -ac_save_IFS=$IFS; IFS='-' -set x $ac_cv_target -shift -target_cpu=$1 -target_vendor=$2 -shift; shift -# Remember, the first character of IFS is used to create $*, -# except with old shells: -target_os=$* -IFS=$ac_save_IFS -case $target_os in *\ *) target_os=`echo "$target_os" | sed 's/ /-/g'`;; esac - - -# The aliases save the names the user supplied, while $host etc. -# will get canonicalized. -test -n "$target_alias" && - test "$program_prefix$program_suffix$program_transform_name" = \ - NONENONEs,x,x, && - program_prefix=${target_alias}- - -case "$target" in - *) - ;; -esac - -am__api_version='1.11' - -# Find a good install program. We prefer a C program (faster), -# so one script is as good as another. But avoid the broken or -# incompatible versions: -# SysV /etc/install, /usr/sbin/install -# SunOS /usr/etc/install -# IRIX /sbin/install -# AIX /bin/install -# AmigaOS /C/install, which installs bootblocks on floppy discs -# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag -# AFS /usr/afsws/bin/install, which mishandles nonexistent args -# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" -# OS/2's system install, which has a completely different semantic -# ./install, which can be erroneously created by make from ./install.sh. -# Reject install programs that cannot install multiple files. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 -$as_echo_n "checking for a BSD-compatible install... " >&6; } -if test -z "$INSTALL"; then -if test "${ac_cv_path_install+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - # Account for people who put trailing slashes in PATH elements. -case $as_dir/ in #(( - ./ | .// | /[cC]/* | \ - /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ - ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ - /usr/ucb/* ) ;; - *) - # OSF1 and SCO ODT 3.0 have their own names for install. - # Don't use installbsd from OSF since it installs stuff as root - # by default. - for ac_prog in ginstall scoinst install; do - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then - if test $ac_prog = install && - grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then - # AIX install. It has an incompatible calling convention. - : - elif test $ac_prog = install && - grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then - # program-specific install script used by HP pwplus--don't use. - : - else - rm -rf conftest.one conftest.two conftest.dir - echo one > conftest.one - echo two > conftest.two - mkdir conftest.dir - if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && - test -s conftest.one && test -s conftest.two && - test -s conftest.dir/conftest.one && - test -s conftest.dir/conftest.two - then - ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" - break 3 - fi - fi - fi - done - done - ;; -esac - - done -IFS=$as_save_IFS - -rm -rf conftest.one conftest.two conftest.dir - -fi - if test "${ac_cv_path_install+set}" = set; then - INSTALL=$ac_cv_path_install - else - # As a last resort, use the slow shell script. Don't cache a - # value for INSTALL within a source directory, because that will - # break other packages using the cache if that directory is - # removed, or if the value is a relative name. - INSTALL=$ac_install_sh - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 -$as_echo "$INSTALL" >&6; } - -# Use test -z because SunOS4 sh mishandles braces in ${var-val}. -# It thinks the first close brace ends the variable substitution. -test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' - -test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' - -test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 -$as_echo_n "checking whether build environment is sane... " >&6; } -# Just in case -sleep 1 -echo timestamp > conftest.file -# Reject unsafe characters in $srcdir or the absolute working directory -# name. Accept space and tab only in the latter. -am_lf=' -' -case `pwd` in - *[\\\"\#\$\&\'\`$am_lf]*) - as_fn_error "unsafe absolute working directory name" "$LINENO" 5;; -esac -case $srcdir in - *[\\\"\#\$\&\'\`$am_lf\ \ ]*) - as_fn_error "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;; -esac - -# Do `set' in a subshell so we don't clobber the current shell's -# arguments. Must try -L first in case configure is actually a -# symlink; some systems play weird games with the mod time of symlinks -# (eg FreeBSD returns the mod time of the symlink's containing -# directory). -if ( - set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` - if test "$*" = "X"; then - # -L didn't work. - set X `ls -t "$srcdir/configure" conftest.file` - fi - rm -f conftest.file - if test "$*" != "X $srcdir/configure conftest.file" \ - && test "$*" != "X conftest.file $srcdir/configure"; then - - # If neither matched, then we have a broken ls. This can happen - # if, for instance, CONFIG_SHELL is bash and it inherits a - # broken ls alias from the environment. This has actually - # happened. Such a system could not be considered "sane". - as_fn_error "ls -t appears to fail. Make sure there is not a broken -alias in your environment" "$LINENO" 5 - fi - - test "$2" = conftest.file - ) -then - # Ok. - : -else - as_fn_error "newly created file is older than distributed files! -Check your system clock" "$LINENO" 5 -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -test "$program_prefix" != NONE && - program_transform_name="s&^&$program_prefix&;$program_transform_name" -# Use a double $ so make ignores it. -test "$program_suffix" != NONE && - program_transform_name="s&\$&$program_suffix&;$program_transform_name" -# Double any \ or $. -# By default was `s,x,x', remove it if useless. -ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' -program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` - -# expand $ac_aux_dir to an absolute path -am_aux_dir=`cd $ac_aux_dir && pwd` - -if test x"${MISSING+set}" != xset; then - case $am_aux_dir in - *\ * | *\ *) - MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; - *) - MISSING="\${SHELL} $am_aux_dir/missing" ;; - esac -fi -# Use eval to expand $SHELL -if eval "$MISSING --run true"; then - am_missing_run="$MISSING --run " -else - am_missing_run= - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5 -$as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} -fi - -if test x"${install_sh}" != xset; then - case $am_aux_dir in - *\ * | *\ *) - install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; - *) - install_sh="\${SHELL} $am_aux_dir/install-sh" - esac -fi - -# Installed binaries are usually stripped using `strip' when the user -# run `make install-strip'. However `strip' might not be the right -# tool to use in cross-compilation environments, therefore Automake -# will honor the `STRIP' environment variable to overrule this program. -if test "$cross_compiling" != no; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. -set dummy ${ac_tool_prefix}strip; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_STRIP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$STRIP"; then - ac_cv_prog_STRIP="$STRIP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_STRIP="${ac_tool_prefix}strip" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -STRIP=$ac_cv_prog_STRIP -if test -n "$STRIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 -$as_echo "$STRIP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_STRIP"; then - ac_ct_STRIP=$STRIP - # Extract the first word of "strip", so it can be a program name with args. -set dummy strip; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_STRIP"; then - ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_STRIP="strip" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP -if test -n "$ac_ct_STRIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 -$as_echo "$ac_ct_STRIP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_STRIP" = x; then - STRIP=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - STRIP=$ac_ct_STRIP - fi -else - STRIP="$ac_cv_prog_STRIP" -fi - -fi -INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 -$as_echo_n "checking for a thread-safe mkdir -p... " >&6; } -if test -z "$MKDIR_P"; then - if test "${ac_cv_path_mkdir+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in mkdir gmkdir; do - for ac_exec_ext in '' $ac_executable_extensions; do - { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue - case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( - 'mkdir (GNU coreutils) '* | \ - 'mkdir (coreutils) '* | \ - 'mkdir (fileutils) '4.1*) - ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext - break 3;; - esac - done - done - done -IFS=$as_save_IFS - -fi - - test -d ./--version && rmdir ./--version - if test "${ac_cv_path_mkdir+set}" = set; then - MKDIR_P="$ac_cv_path_mkdir -p" - else - # As a last resort, use the slow shell script. Don't cache a - # value for MKDIR_P within a source directory, because that will - # break other packages using the cache if that directory is - # removed, or if the value is a relative name. - MKDIR_P="$ac_install_sh -d" - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 -$as_echo "$MKDIR_P" >&6; } - -mkdir_p="$MKDIR_P" -case $mkdir_p in - [\\/$]* | ?:[\\/]*) ;; - */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; -esac - -for ac_prog in gawk mawk nawk awk -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_AWK+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$AWK"; then - ac_cv_prog_AWK="$AWK" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_AWK="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -AWK=$ac_cv_prog_AWK -if test -n "$AWK"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 -$as_echo "$AWK" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$AWK" && break -done - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 -$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } -set x ${MAKE-make} -ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` -if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then : - $as_echo_n "(cached) " >&6 -else - cat >conftest.make <<\_ACEOF -SHELL = /bin/sh -all: - @echo '@@@%%%=$(MAKE)=@@@%%%' -_ACEOF -# GNU make sometimes prints "make[1]: Entering...", which would confuse us. -case `${MAKE-make} -f conftest.make 2>/dev/null` in - *@@@%%%=?*=@@@%%%*) - eval ac_cv_prog_make_${ac_make}_set=yes;; - *) - eval ac_cv_prog_make_${ac_make}_set=no;; -esac -rm -f conftest.make -fi -if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - SET_MAKE= -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - SET_MAKE="MAKE=${MAKE-make}" -fi - -rm -rf .tst 2>/dev/null -mkdir .tst 2>/dev/null -if test -d .tst; then - am__leading_dot=. -else - am__leading_dot=_ -fi -rmdir .tst 2>/dev/null - -if test "`cd $srcdir && pwd`" != "`pwd`"; then - # Use -I$(srcdir) only when $(srcdir) != ., so that make's output - # is not polluted with repeated "-I." - am__isrc=' -I$(srcdir)' - # test to see if srcdir already configured - if test -f $srcdir/config.status; then - as_fn_error "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 - fi -fi - -# test whether we have cygpath -if test -z "$CYGPATH_W"; then - if (cygpath --version) >/dev/null 2>/dev/null; then - CYGPATH_W='cygpath -w' - else - CYGPATH_W=echo - fi -fi - - -# Define the identity of the package. - PACKAGE=radiusclient - VERSION=1.1.6 - - -cat >>confdefs.h <<_ACEOF -#define PACKAGE "$PACKAGE" -_ACEOF - - -cat >>confdefs.h <<_ACEOF -#define VERSION "$VERSION" -_ACEOF - -# Some tools Automake needs. - -ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} - - -AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} - - -AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} - - -AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} - - -MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} - -# We need awk for the "check" target. The system "awk" is bad on -# some platforms. -# Always define AMTAR for backward compatibility. - -AMTAR=${AMTAR-"${am_missing_run}tar"} - -am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -' - - - - - - -LIBVERSION=2:0:0 - - -pkgsysconfdir=${sysconfdir}/$PACKAGE - - -case `pwd` in - *\ * | *\ *) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 -$as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; -esac - - - -macro_version='2.2.6b' -macro_revision='1.3017' - - - - - - - - - - - - - -ltmain="$ac_aux_dir/ltmain.sh" - -DEPDIR="${am__leading_dot}deps" - -ac_config_commands="$ac_config_commands depfiles" - - -am_make=${MAKE-make} -cat > confinc << 'END' -am__doit: - @echo this is the am__doit target -.PHONY: am__doit -END -# If we don't find an include directive, just comment out the code. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 -$as_echo_n "checking for style of include used by $am_make... " >&6; } -am__include="#" -am__quote= -_am_result=none -# First try GNU make style include. -echo "include confinc" > confmf -# Ignore all kinds of additional output from `make'. -case `$am_make -s -f confmf 2> /dev/null` in #( -*the\ am__doit\ target*) - am__include=include - am__quote= - _am_result=GNU - ;; -esac -# Now try BSD make style include. -if test "$am__include" = "#"; then - echo '.include "confinc"' > confmf - case `$am_make -s -f confmf 2> /dev/null` in #( - *the\ am__doit\ target*) - am__include=.include - am__quote="\"" - _am_result=BSD - ;; - esac -fi - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 -$as_echo "$_am_result" >&6; } -rm -f confinc confmf - -# Check whether --enable-dependency-tracking was given. -if test "${enable_dependency_tracking+set}" = set; then : - enableval=$enable_dependency_tracking; -fi - -if test "x$enable_dependency_tracking" != xno; then - am_depcomp="$ac_aux_dir/depcomp" - AMDEPBACKSLASH='\' -fi - if test "x$enable_dependency_tracking" != xno; then - AMDEP_TRUE= - AMDEP_FALSE='#' -else - AMDEP_TRUE='#' - AMDEP_FALSE= -fi - - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. -set dummy ${ac_tool_prefix}gcc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_CC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_CC="${ac_tool_prefix}gcc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_CC"; then - ac_ct_CC=$CC - # Extract the first word of "gcc", so it can be a program name with args. -set dummy gcc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_CC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_CC="gcc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -$as_echo "$ac_ct_CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_CC" = x; then - CC="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - CC=$ac_ct_CC - fi -else - CC="$ac_cv_prog_CC" -fi - -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. -set dummy ${ac_tool_prefix}cc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_CC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_CC="${ac_tool_prefix}cc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - fi -fi -if test -z "$CC"; then - # Extract the first word of "cc", so it can be a program name with args. -set dummy cc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_CC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else - ac_prog_rejected=no -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then - ac_prog_rejected=yes - continue - fi - ac_cv_prog_CC="cc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -if test $ac_prog_rejected = yes; then - # We found a bogon in the path, so make sure we never use it. - set dummy $ac_cv_prog_CC - shift - if test $# != 0; then - # We chose a different compiler from the bogus one. - # However, it has the same basename, so the bogon will be chosen - # first if we set CC to just the basename; use the full file name. - shift - ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" - fi -fi -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - for ac_prog in cl.exe - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_CC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_CC="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$CC" && break - done -fi -if test -z "$CC"; then - ac_ct_CC=$CC - for ac_prog in cl.exe -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_CC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_CC="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -$as_echo "$ac_ct_CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$ac_ct_CC" && break -done - - if test "x$ac_ct_CC" = x; then - CC="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - CC=$ac_ct_CC - fi -fi - -fi - - -test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error "no acceptable C compiler found in \$PATH -See \`config.log' for more details." "$LINENO" 5; } - -# Provide some information about the compiler. -$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 -set X $ac_compile -ac_compiler=$2 -for ac_option in --version -v -V -qversion; do - { { ac_try="$ac_compiler $ac_option >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compiler $ac_option >&5") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - sed '10a\ -... rest of stderr output deleted ... - 10q' conftest.err >conftest.er1 - cat conftest.er1 >&5 - fi - rm -f conftest.er1 conftest.err - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } -done - -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -ac_clean_files_save=$ac_clean_files -ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" -# Try to create an executable without -o first, disregard a.out. -# It will help us diagnose broken compilers, and finding out an intuition -# of exeext. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 -$as_echo_n "checking whether the C compiler works... " >&6; } -ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` - -# The possible output files: -ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" - -ac_rmfiles= -for ac_file in $ac_files -do - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; - * ) ac_rmfiles="$ac_rmfiles $ac_file";; - esac -done -rm -f $ac_rmfiles - -if { { ac_try="$ac_link_default" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link_default") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : - # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. -# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' -# in a Makefile. We should not override ac_cv_exeext if it was cached, -# so that the user can short-circuit this test for compilers unknown to -# Autoconf. -for ac_file in $ac_files '' -do - test -f "$ac_file" || continue - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) - ;; - [ab].out ) - # We found the default executable, but exeext='' is most - # certainly right. - break;; - *.* ) - if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; - then :; else - ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` - fi - # We set ac_cv_exeext here because the later test for it is not - # safe: cross compilers may not add the suffix if given an `-o' - # argument, so we may need to know it at that point already. - # Even if this section looks crufty: it has the advantage of - # actually working. - break;; - * ) - break;; - esac -done -test "$ac_cv_exeext" = no && ac_cv_exeext= - -else - ac_file='' -fi -if test -z "$ac_file"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -$as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -{ as_fn_set_status 77 -as_fn_error "C compiler cannot create executables -See \`config.log' for more details." "$LINENO" 5; }; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 -$as_echo_n "checking for C compiler default output file name... " >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 -$as_echo "$ac_file" >&6; } -ac_exeext=$ac_cv_exeext - -rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out -ac_clean_files=$ac_clean_files_save -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 -$as_echo_n "checking for suffix of executables... " >&6; } -if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : - # If both `conftest.exe' and `conftest' are `present' (well, observable) -# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will -# work properly (i.e., refer to `conftest.exe'), while it won't with -# `rm'. -for ac_file in conftest.exe conftest conftest.*; do - test -f "$ac_file" || continue - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; - *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` - break;; - * ) break;; - esac -done -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error "cannot compute suffix of executables: cannot compile and link -See \`config.log' for more details." "$LINENO" 5; } -fi -rm -f conftest conftest$ac_cv_exeext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 -$as_echo "$ac_cv_exeext" >&6; } - -rm -f conftest.$ac_ext -EXEEXT=$ac_cv_exeext -ac_exeext=$EXEEXT -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main () -{ -FILE *f = fopen ("conftest.out", "w"); - return ferror (f) || fclose (f) != 0; - - ; - return 0; -} -_ACEOF -ac_clean_files="$ac_clean_files conftest.out" -# Check that the compiler produces executables we can run. If not, either -# the compiler is broken, or we cross compile. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 -$as_echo_n "checking whether we are cross compiling... " >&6; } -if test "$cross_compiling" != yes; then - { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } - if { ac_try='./conftest$ac_cv_exeext' - { { case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then - cross_compiling=no - else - if test "$cross_compiling" = maybe; then - cross_compiling=yes - else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error "cannot run C compiled programs. -If you meant to cross compile, use \`--host'. -See \`config.log' for more details." "$LINENO" 5; } - fi - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 -$as_echo "$cross_compiling" >&6; } - -rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out -ac_clean_files=$ac_clean_files_save -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 -$as_echo_n "checking for suffix of object files... " >&6; } -if test "${ac_cv_objext+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.o conftest.obj -if { { ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compile") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : - for ac_file in conftest.o conftest.obj conftest.*; do - test -f "$ac_file" || continue; - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; - *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` - break;; - esac -done -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error "cannot compute suffix of object files: cannot compile -See \`config.log' for more details." "$LINENO" 5; } -fi -rm -f conftest.$ac_cv_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 -$as_echo "$ac_cv_objext" >&6; } -OBJEXT=$ac_cv_objext -ac_objext=$OBJEXT -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 -$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } -if test "${ac_cv_c_compiler_gnu+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ -#ifndef __GNUC__ - choke me -#endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_compiler_gnu=yes -else - ac_compiler_gnu=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -ac_cv_c_compiler_gnu=$ac_compiler_gnu - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 -$as_echo "$ac_cv_c_compiler_gnu" >&6; } -if test $ac_compiler_gnu = yes; then - GCC=yes -else - GCC= -fi -ac_test_CFLAGS=${CFLAGS+set} -ac_save_CFLAGS=$CFLAGS -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 -$as_echo_n "checking whether $CC accepts -g... " >&6; } -if test "${ac_cv_prog_cc_g+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_save_c_werror_flag=$ac_c_werror_flag - ac_c_werror_flag=yes - ac_cv_prog_cc_g=no - CFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_g=yes -else - CFLAGS="" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - -else - ac_c_werror_flag=$ac_save_c_werror_flag - CFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_g=yes -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_c_werror_flag=$ac_save_c_werror_flag -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 -$as_echo "$ac_cv_prog_cc_g" >&6; } -if test "$ac_test_CFLAGS" = set; then - CFLAGS=$ac_save_CFLAGS -elif test $ac_cv_prog_cc_g = yes; then - if test "$GCC" = yes; then - CFLAGS="-g -O2" - else - CFLAGS="-g" - fi -else - if test "$GCC" = yes; then - CFLAGS="-O2" - else - CFLAGS= - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 -$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } -if test "${ac_cv_prog_cc_c89+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_cv_prog_cc_c89=no -ac_save_CC=$CC -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#include -#include -/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ -struct buf { int x; }; -FILE * (*rcsopen) (struct buf *, struct stat *, int); -static char *e (p, i) - char **p; - int i; -{ - return p[i]; -} -static char *f (char * (*g) (char **, int), char **p, ...) -{ - char *s; - va_list v; - va_start (v,p); - s = g (p, va_arg (v,int)); - va_end (v); - return s; -} - -/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has - function prototypes and stuff, but not '\xHH' hex character constants. - These don't provoke an error unfortunately, instead are silently treated - as 'x'. The following induces an error, until -std is added to get - proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an - array size at least. It's necessary to write '\x00'==0 to get something - that's true only with -std. */ -int osf4_cc_array ['\x00' == 0 ? 1 : -1]; - -/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters - inside strings and character constants. */ -#define FOO(x) 'x' -int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; - -int test (int i, double x); -struct s1 {int (*f) (int a);}; -struct s2 {int (*f) (double a);}; -int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); -int argc; -char **argv; -int -main () -{ -return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; - ; - return 0; -} -_ACEOF -for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ - -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" -do - CC="$ac_save_CC $ac_arg" - if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_c89=$ac_arg -fi -rm -f core conftest.err conftest.$ac_objext - test "x$ac_cv_prog_cc_c89" != "xno" && break -done -rm -f conftest.$ac_ext -CC=$ac_save_CC - -fi -# AC_CACHE_VAL -case "x$ac_cv_prog_cc_c89" in - x) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -$as_echo "none needed" >&6; } ;; - xno) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 -$as_echo "unsupported" >&6; } ;; - *) - CC="$CC $ac_cv_prog_cc_c89" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 -$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; -esac -if test "x$ac_cv_prog_cc_c89" != xno; then : - -fi - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -depcc="$CC" am_compiler_list= - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 -$as_echo_n "checking dependency style of $depcc... " >&6; } -if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then - # We make a subdir and do the tests there. Otherwise we can end up - # making bogus files that we don't know about and never remove. For - # instance it was reported that on HP-UX the gcc test will end up - # making a dummy file named `D' -- because `-MD' means `put the output - # in D'. - mkdir conftest.dir - # Copy depcomp to subdir because otherwise we won't find it if we're - # using a relative directory. - cp "$am_depcomp" conftest.dir - cd conftest.dir - # We will build objects and dependencies in a subdirectory because - # it helps to detect inapplicable dependency modes. For instance - # both Tru64's cc and ICC support -MD to output dependencies as a - # side effect of compilation, but ICC will put the dependencies in - # the current directory while Tru64 will put them in the object - # directory. - mkdir sub - - am_cv_CC_dependencies_compiler_type=none - if test "$am_compiler_list" = ""; then - am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` - fi - am__universal=false - case " $depcc " in #( - *\ -arch\ *\ -arch\ *) am__universal=true ;; - esac - - for depmode in $am_compiler_list; do - # Setup a source with many dependencies, because some compilers - # like to wrap large dependency lists on column 80 (with \), and - # we should not choose a depcomp mode which is confused by this. - # - # We need to recreate these files for each test, as the compiler may - # overwrite some of them when testing with obscure command lines. - # This happens at least with the AIX C compiler. - : > sub/conftest.c - for i in 1 2 3 4 5 6; do - echo '#include "conftst'$i'.h"' >> sub/conftest.c - # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with - # Solaris 8's {/usr,}/bin/sh. - touch sub/conftst$i.h - done - echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf - - # We check with `-c' and `-o' for the sake of the "dashmstdout" - # mode. It turns out that the SunPro C++ compiler does not properly - # handle `-M -o', and we need to detect this. Also, some Intel - # versions had trouble with output in subdirs - am__obj=sub/conftest.${OBJEXT-o} - am__minus_obj="-o $am__obj" - case $depmode in - gcc) - # This depmode causes a compiler race in universal mode. - test "$am__universal" = false || continue - ;; - nosideeffect) - # after this tag, mechanisms are not by side-effect, so they'll - # only be used when explicitly requested - if test "x$enable_dependency_tracking" = xyes; then - continue - else - break - fi - ;; - msvisualcpp | msvcmsys) - # This compiler won't grok `-c -o', but also, the minuso test has - # not run yet. These depmodes are late enough in the game, and - # so weak that their functioning should not be impacted. - am__obj=conftest.${OBJEXT-o} - am__minus_obj= - ;; - none) break ;; - esac - if depmode=$depmode \ - source=sub/conftest.c object=$am__obj \ - depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ - $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ - >/dev/null 2>conftest.err && - grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && - grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && - grep $am__obj sub/conftest.Po > /dev/null 2>&1 && - ${MAKE-make} -s -f confmf > /dev/null 2>&1; then - # icc doesn't choke on unknown options, it will just issue warnings - # or remarks (even with -Werror). So we grep stderr for any message - # that says an option was ignored or not supported. - # When given -MP, icc 7.0 and 7.1 complain thusly: - # icc: Command line warning: ignoring option '-M'; no argument required - # The diagnosis changed in icc 8.0: - # icc: Command line remark: option '-MP' not supported - if (grep 'ignoring option' conftest.err || - grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else - am_cv_CC_dependencies_compiler_type=$depmode - break - fi - fi - done - - cd .. - rm -rf conftest.dir -else - am_cv_CC_dependencies_compiler_type=none -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 -$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } -CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type - - if - test "x$enable_dependency_tracking" != xno \ - && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then - am__fastdepCC_TRUE= - am__fastdepCC_FALSE='#' -else - am__fastdepCC_TRUE='#' - am__fastdepCC_FALSE= -fi - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 -$as_echo_n "checking for a sed that does not truncate output... " >&6; } -if test "${ac_cv_path_SED+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ - for ac_i in 1 2 3 4 5 6 7; do - ac_script="$ac_script$as_nl$ac_script" - done - echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed - { ac_script=; unset ac_script;} - if test -z "$SED"; then - ac_path_SED_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in sed gsed; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" - { test -f "$ac_path_SED" && $as_test_x "$ac_path_SED"; } || continue -# Check for GNU ac_path_SED and select it if it is found. - # Check for GNU $ac_path_SED -case `"$ac_path_SED" --version 2>&1` in -*GNU*) - ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo '' >> "conftest.nl" - "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_SED_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_SED="$ac_path_SED" - ac_path_SED_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_SED_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_SED"; then - as_fn_error "no acceptable sed could be found in \$PATH" "$LINENO" 5 - fi -else - ac_cv_path_SED=$SED -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 -$as_echo "$ac_cv_path_SED" >&6; } - SED="$ac_cv_path_SED" - rm -f conftest.sed - -test -z "$SED" && SED=sed -Xsed="$SED -e 1s/^X//" - - - - - - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 -$as_echo_n "checking for grep that handles long lines and -e... " >&6; } -if test "${ac_cv_path_GREP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -z "$GREP"; then - ac_path_GREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in grep ggrep; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" - { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue -# Check for GNU ac_path_GREP and select it if it is found. - # Check for GNU $ac_path_GREP -case `"$ac_path_GREP" --version 2>&1` in -*GNU*) - ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo 'GREP' >> "conftest.nl" - "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_GREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_GREP="$ac_path_GREP" - ac_path_GREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_GREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_GREP"; then - as_fn_error "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi -else - ac_cv_path_GREP=$GREP -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 -$as_echo "$ac_cv_path_GREP" >&6; } - GREP="$ac_cv_path_GREP" - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 -$as_echo_n "checking for egrep... " >&6; } -if test "${ac_cv_path_EGREP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 - then ac_cv_path_EGREP="$GREP -E" - else - if test -z "$EGREP"; then - ac_path_EGREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in egrep; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" - { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue -# Check for GNU ac_path_EGREP and select it if it is found. - # Check for GNU $ac_path_EGREP -case `"$ac_path_EGREP" --version 2>&1` in -*GNU*) - ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo 'EGREP' >> "conftest.nl" - "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_EGREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_EGREP="$ac_path_EGREP" - ac_path_EGREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_EGREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_EGREP"; then - as_fn_error "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi -else - ac_cv_path_EGREP=$EGREP -fi - - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 -$as_echo "$ac_cv_path_EGREP" >&6; } - EGREP="$ac_cv_path_EGREP" - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 -$as_echo_n "checking for fgrep... " >&6; } -if test "${ac_cv_path_FGREP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 - then ac_cv_path_FGREP="$GREP -F" - else - if test -z "$FGREP"; then - ac_path_FGREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in fgrep; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" - { test -f "$ac_path_FGREP" && $as_test_x "$ac_path_FGREP"; } || continue -# Check for GNU ac_path_FGREP and select it if it is found. - # Check for GNU $ac_path_FGREP -case `"$ac_path_FGREP" --version 2>&1` in -*GNU*) - ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo 'FGREP' >> "conftest.nl" - "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_FGREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_FGREP="$ac_path_FGREP" - ac_path_FGREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_FGREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_FGREP"; then - as_fn_error "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi -else - ac_cv_path_FGREP=$FGREP -fi - - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 -$as_echo "$ac_cv_path_FGREP" >&6; } - FGREP="$ac_cv_path_FGREP" - - -test -z "$GREP" && GREP=grep - - - - - - - - - - - - - - - - - - - -# Check whether --with-gnu-ld was given. -if test "${with_gnu_ld+set}" = set; then : - withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes -else - with_gnu_ld=no -fi - -ac_prog=ld -if test "$GCC" = yes; then - # Check if gcc -print-prog-name=ld gives a path. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 -$as_echo_n "checking for ld used by $CC... " >&6; } - case $host in - *-*-mingw*) - # gcc leaves a trailing carriage return which upsets mingw - ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; - *) - ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; - esac - case $ac_prog in - # Accept absolute paths. - [\\/]* | ?:[\\/]*) - re_direlt='/[^/][^/]*/\.\./' - # Canonicalize the pathname of ld - ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` - while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do - ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` - done - test -z "$LD" && LD="$ac_prog" - ;; - "") - # If it fails, then pretend we aren't using GCC. - ac_prog=ld - ;; - *) - # If it is relative, then search for the first ld in PATH. - with_gnu_ld=unknown - ;; - esac -elif test "$with_gnu_ld" = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 -$as_echo_n "checking for GNU ld... " >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 -$as_echo_n "checking for non-GNU ld... " >&6; } -fi -if test "${lt_cv_path_LD+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -z "$LD"; then - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for ac_dir in $PATH; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then - lt_cv_path_LD="$ac_dir/$ac_prog" - # Check to see if the program is GNU ld. I'd rather use --version, - # but apparently some variants of GNU ld only accept -v. - # Break only if it was the GNU/non-GNU ld that we prefer. - case `"$lt_cv_path_LD" -v 2>&1 &5 -$as_echo "$LD" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi -test -z "$LD" && as_fn_error "no acceptable ld found in \$PATH" "$LINENO" 5 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 -$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } -if test "${lt_cv_prog_gnu_ld+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - # I'd rather use --version here, but apparently some GNU lds only accept -v. -case `$LD -v 2>&1 &5 -$as_echo "$lt_cv_prog_gnu_ld" >&6; } -with_gnu_ld=$lt_cv_prog_gnu_ld - - - - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 -$as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } -if test "${lt_cv_path_NM+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$NM"; then - # Let the user override the test. - lt_cv_path_NM="$NM" -else - lt_nm_to_check="${ac_tool_prefix}nm" - if test -n "$ac_tool_prefix" && test "$build" = "$host"; then - lt_nm_to_check="$lt_nm_to_check nm" - fi - for lt_tmp_nm in $lt_nm_to_check; do - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - tmp_nm="$ac_dir/$lt_tmp_nm" - if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then - # Check to see if the nm accepts a BSD-compat flag. - # Adding the `sed 1q' prevents false positives on HP-UX, which says: - # nm: unknown option "B" ignored - # Tru64's nm complains that /dev/null is an invalid object file - case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in - */dev/null* | *'Invalid file or object type'*) - lt_cv_path_NM="$tmp_nm -B" - break - ;; - *) - case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in - */dev/null*) - lt_cv_path_NM="$tmp_nm -p" - break - ;; - *) - lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but - continue # so that we can try to find one that supports BSD flags - ;; - esac - ;; - esac - fi - done - IFS="$lt_save_ifs" - done - : ${lt_cv_path_NM=no} -fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 -$as_echo "$lt_cv_path_NM" >&6; } -if test "$lt_cv_path_NM" != "no"; then - NM="$lt_cv_path_NM" -else - # Didn't find any BSD compatible name lister, look for dumpbin. - if test -n "$ac_tool_prefix"; then - for ac_prog in "dumpbin -symbols" "link -dump -symbols" - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_DUMPBIN+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$DUMPBIN"; then - ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -DUMPBIN=$ac_cv_prog_DUMPBIN -if test -n "$DUMPBIN"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 -$as_echo "$DUMPBIN" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$DUMPBIN" && break - done -fi -if test -z "$DUMPBIN"; then - ac_ct_DUMPBIN=$DUMPBIN - for ac_prog in "dumpbin -symbols" "link -dump -symbols" -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_DUMPBIN+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_DUMPBIN"; then - ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN -if test -n "$ac_ct_DUMPBIN"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 -$as_echo "$ac_ct_DUMPBIN" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$ac_ct_DUMPBIN" && break -done - - if test "x$ac_ct_DUMPBIN" = x; then - DUMPBIN=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - DUMPBIN=$ac_ct_DUMPBIN - fi -fi - - - if test "$DUMPBIN" != ":"; then - NM="$DUMPBIN" - fi -fi -test -z "$NM" && NM=nm - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 -$as_echo_n "checking the name lister ($NM) interface... " >&6; } -if test "${lt_cv_nm_interface+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_nm_interface="BSD nm" - echo "int some_variable = 0;" > conftest.$ac_ext - (eval echo "\"\$as_me:4611: $ac_compile\"" >&5) - (eval "$ac_compile" 2>conftest.err) - cat conftest.err >&5 - (eval echo "\"\$as_me:4614: $NM \\\"conftest.$ac_objext\\\"\"" >&5) - (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) - cat conftest.err >&5 - (eval echo "\"\$as_me:4617: output\"" >&5) - cat conftest.out >&5 - if $GREP 'External.*some_variable' conftest.out > /dev/null; then - lt_cv_nm_interface="MS dumpbin" - fi - rm -f conftest* -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 -$as_echo "$lt_cv_nm_interface" >&6; } - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 -$as_echo_n "checking whether ln -s works... " >&6; } -LN_S=$as_ln_s -if test "$LN_S" = "ln -s"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 -$as_echo "no, using $LN_S" >&6; } -fi - -# find the maximum length of command line arguments -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 -$as_echo_n "checking the maximum length of command line arguments... " >&6; } -if test "${lt_cv_sys_max_cmd_len+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - i=0 - teststring="ABCD" - - case $build_os in - msdosdjgpp*) - # On DJGPP, this test can blow up pretty badly due to problems in libc - # (any single argument exceeding 2000 bytes causes a buffer overrun - # during glob expansion). Even if it were fixed, the result of this - # check would be larger than it should be. - lt_cv_sys_max_cmd_len=12288; # 12K is about right - ;; - - gnu*) - # Under GNU Hurd, this test is not required because there is - # no limit to the length of command line arguments. - # Libtool will interpret -1 as no limit whatsoever - lt_cv_sys_max_cmd_len=-1; - ;; - - cygwin* | mingw* | cegcc*) - # On Win9x/ME, this test blows up -- it succeeds, but takes - # about 5 minutes as the teststring grows exponentially. - # Worse, since 9x/ME are not pre-emptively multitasking, - # you end up with a "frozen" computer, even though with patience - # the test eventually succeeds (with a max line length of 256k). - # Instead, let's just punt: use the minimum linelength reported by - # all of the supported platforms: 8192 (on NT/2K/XP). - lt_cv_sys_max_cmd_len=8192; - ;; - - amigaos*) - # On AmigaOS with pdksh, this test takes hours, literally. - # So we just punt and use a minimum line length of 8192. - lt_cv_sys_max_cmd_len=8192; - ;; - - netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) - # This has been around since 386BSD, at least. Likely further. - if test -x /sbin/sysctl; then - lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` - elif test -x /usr/sbin/sysctl; then - lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` - else - lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs - fi - # And add a safety zone - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` - ;; - - interix*) - # We know the value 262144 and hardcode it with a safety zone (like BSD) - lt_cv_sys_max_cmd_len=196608 - ;; - - osf*) - # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure - # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not - # nice to cause kernel panics so lets avoid the loop below. - # First set a reasonable default. - lt_cv_sys_max_cmd_len=16384 - # - if test -x /sbin/sysconfig; then - case `/sbin/sysconfig -q proc exec_disable_arg_limit` in - *1*) lt_cv_sys_max_cmd_len=-1 ;; - esac - fi - ;; - sco3.2v5*) - lt_cv_sys_max_cmd_len=102400 - ;; - sysv5* | sco5v6* | sysv4.2uw2*) - kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` - if test -n "$kargmax"; then - lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` - else - lt_cv_sys_max_cmd_len=32768 - fi - ;; - *) - lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` - if test -n "$lt_cv_sys_max_cmd_len"; then - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` - else - # Make teststring a little bigger before we do anything with it. - # a 1K string should be a reasonable start. - for i in 1 2 3 4 5 6 7 8 ; do - teststring=$teststring$teststring - done - SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} - # If test is not a shell built-in, we'll probably end up computing a - # maximum length that is only half of the actual maximum length, but - # we can't tell. - while { test "X"`$SHELL $0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \ - = "XX$teststring$teststring"; } >/dev/null 2>&1 && - test $i != 17 # 1/2 MB should be enough - do - i=`expr $i + 1` - teststring=$teststring$teststring - done - # Only check the string length outside the loop. - lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` - teststring= - # Add a significant safety factor because C++ compilers can tack on - # massive amounts of additional arguments before passing them to the - # linker. It appears as though 1/2 is a usable value. - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` - fi - ;; - esac - -fi - -if test -n $lt_cv_sys_max_cmd_len ; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 -$as_echo "$lt_cv_sys_max_cmd_len" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 -$as_echo "none" >&6; } -fi -max_cmd_len=$lt_cv_sys_max_cmd_len - - - - - - -: ${CP="cp -f"} -: ${MV="mv -f"} -: ${RM="rm -f"} - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands some XSI constructs" >&5 -$as_echo_n "checking whether the shell understands some XSI constructs... " >&6; } -# Try some XSI features -xsi_shell=no -( _lt_dummy="a/b/c" - test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \ - = c,a/b,, \ - && eval 'test $(( 1 + 1 )) -eq 2 \ - && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ - && xsi_shell=yes -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $xsi_shell" >&5 -$as_echo "$xsi_shell" >&6; } - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands \"+=\"" >&5 -$as_echo_n "checking whether the shell understands \"+=\"... " >&6; } -lt_shell_append=no -( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \ - >/dev/null 2>&1 \ - && lt_shell_append=yes -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_shell_append" >&5 -$as_echo "$lt_shell_append" >&6; } - - -if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then - lt_unset=unset -else - lt_unset=false -fi - - - - - -# test EBCDIC or ASCII -case `echo X|tr X '\101'` in - A) # ASCII based system - # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr - lt_SP2NL='tr \040 \012' - lt_NL2SP='tr \015\012 \040\040' - ;; - *) # EBCDIC based system - lt_SP2NL='tr \100 \n' - lt_NL2SP='tr \r\n \100\100' - ;; -esac - - - - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 -$as_echo_n "checking for $LD option to reload object files... " >&6; } -if test "${lt_cv_ld_reload_flag+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_ld_reload_flag='-r' -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 -$as_echo "$lt_cv_ld_reload_flag" >&6; } -reload_flag=$lt_cv_ld_reload_flag -case $reload_flag in -"" | " "*) ;; -*) reload_flag=" $reload_flag" ;; -esac -reload_cmds='$LD$reload_flag -o $output$reload_objs' -case $host_os in - darwin*) - if test "$GCC" = yes; then - reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs' - else - reload_cmds='$LD$reload_flag -o $output$reload_objs' - fi - ;; -esac - - - - - - - - - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. -set dummy ${ac_tool_prefix}objdump; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_OBJDUMP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$OBJDUMP"; then - ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -OBJDUMP=$ac_cv_prog_OBJDUMP -if test -n "$OBJDUMP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 -$as_echo "$OBJDUMP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_OBJDUMP"; then - ac_ct_OBJDUMP=$OBJDUMP - # Extract the first word of "objdump", so it can be a program name with args. -set dummy objdump; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_OBJDUMP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_OBJDUMP"; then - ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_OBJDUMP="objdump" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP -if test -n "$ac_ct_OBJDUMP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 -$as_echo "$ac_ct_OBJDUMP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_OBJDUMP" = x; then - OBJDUMP="false" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - OBJDUMP=$ac_ct_OBJDUMP - fi -else - OBJDUMP="$ac_cv_prog_OBJDUMP" -fi - -test -z "$OBJDUMP" && OBJDUMP=objdump - - - - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 -$as_echo_n "checking how to recognize dependent libraries... " >&6; } -if test "${lt_cv_deplibs_check_method+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_file_magic_cmd='$MAGIC_CMD' -lt_cv_file_magic_test_file= -lt_cv_deplibs_check_method='unknown' -# Need to set the preceding variable on all platforms that support -# interlibrary dependencies. -# 'none' -- dependencies not supported. -# `unknown' -- same as none, but documents that we really don't know. -# 'pass_all' -- all dependencies passed with no checks. -# 'test_compile' -- check by making test program. -# 'file_magic [[regex]]' -- check by looking for files in library path -# which responds to the $file_magic_cmd with a given extended regex. -# If you have `file' or equivalent on your system and you're not sure -# whether `pass_all' will *always* work, you probably want this one. - -case $host_os in -aix[4-9]*) - lt_cv_deplibs_check_method=pass_all - ;; - -beos*) - lt_cv_deplibs_check_method=pass_all - ;; - -bsdi[45]*) - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' - lt_cv_file_magic_cmd='/usr/bin/file -L' - lt_cv_file_magic_test_file=/shlib/libc.so - ;; - -cygwin*) - # func_win32_libid is a shell function defined in ltmain.sh - lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' - lt_cv_file_magic_cmd='func_win32_libid' - ;; - -mingw* | pw32*) - # Base MSYS/MinGW do not provide the 'file' command needed by - # func_win32_libid shell function, so use a weaker test based on 'objdump', - # unless we find 'file', for example because we are cross-compiling. - if ( file / ) >/dev/null 2>&1; then - lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' - lt_cv_file_magic_cmd='func_win32_libid' - else - lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?' - lt_cv_file_magic_cmd='$OBJDUMP -f' - fi - ;; - -cegcc) - # use the weaker test based on 'objdump'. See mingw*. - lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' - lt_cv_file_magic_cmd='$OBJDUMP -f' - ;; - -darwin* | rhapsody*) - lt_cv_deplibs_check_method=pass_all - ;; - -freebsd* | dragonfly*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then - case $host_cpu in - i*86 ) - # Not sure whether the presence of OpenBSD here was a mistake. - # Let's accept both of them until this is cleared up. - lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' - lt_cv_file_magic_cmd=/usr/bin/file - lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` - ;; - esac - else - lt_cv_deplibs_check_method=pass_all - fi - ;; - -gnu*) - lt_cv_deplibs_check_method=pass_all - ;; - -hpux10.20* | hpux11*) - lt_cv_file_magic_cmd=/usr/bin/file - case $host_cpu in - ia64*) - lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' - lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so - ;; - hppa*64*) - lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]' - lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl - ;; - *) - lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library' - lt_cv_file_magic_test_file=/usr/lib/libc.sl - ;; - esac - ;; - -interix[3-9]*) - # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' - ;; - -irix5* | irix6* | nonstopux*) - case $LD in - *-32|*"-32 ") libmagic=32-bit;; - *-n32|*"-n32 ") libmagic=N32;; - *-64|*"-64 ") libmagic=64-bit;; - *) libmagic=never-match;; - esac - lt_cv_deplibs_check_method=pass_all - ;; - -# This must be Linux ELF. -linux* | k*bsd*-gnu | kopensolaris*-gnu) - lt_cv_deplibs_check_method=pass_all - ;; - -netbsd* | netbsdelf*-gnu) - if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' - else - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' - fi - ;; - -newos6*) - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' - lt_cv_file_magic_cmd=/usr/bin/file - lt_cv_file_magic_test_file=/usr/lib/libnls.so - ;; - -*nto* | *qnx*) - lt_cv_deplibs_check_method=pass_all - ;; - -openbsd*) - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' - else - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' - fi - ;; - -osf3* | osf4* | osf5*) - lt_cv_deplibs_check_method=pass_all - ;; - -rdos*) - lt_cv_deplibs_check_method=pass_all - ;; - -solaris*) - lt_cv_deplibs_check_method=pass_all - ;; - -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - lt_cv_deplibs_check_method=pass_all - ;; - -sysv4 | sysv4.3*) - case $host_vendor in - motorola) - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' - lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` - ;; - ncr) - lt_cv_deplibs_check_method=pass_all - ;; - sequent) - lt_cv_file_magic_cmd='/bin/file' - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' - ;; - sni) - lt_cv_file_magic_cmd='/bin/file' - lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" - lt_cv_file_magic_test_file=/lib/libc.so - ;; - siemens) - lt_cv_deplibs_check_method=pass_all - ;; - pc) - lt_cv_deplibs_check_method=pass_all - ;; - esac - ;; - -tpf*) - lt_cv_deplibs_check_method=pass_all - ;; -esac - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 -$as_echo "$lt_cv_deplibs_check_method" >&6; } -file_magic_cmd=$lt_cv_file_magic_cmd -deplibs_check_method=$lt_cv_deplibs_check_method -test -z "$deplibs_check_method" && deplibs_check_method=unknown - - - - - - - - - - - - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. -set dummy ${ac_tool_prefix}ar; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_AR+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$AR"; then - ac_cv_prog_AR="$AR" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_AR="${ac_tool_prefix}ar" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -AR=$ac_cv_prog_AR -if test -n "$AR"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 -$as_echo "$AR" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_AR"; then - ac_ct_AR=$AR - # Extract the first word of "ar", so it can be a program name with args. -set dummy ar; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_AR+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_AR"; then - ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_AR="ar" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_AR=$ac_cv_prog_ac_ct_AR -if test -n "$ac_ct_AR"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 -$as_echo "$ac_ct_AR" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_AR" = x; then - AR="false" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - AR=$ac_ct_AR - fi -else - AR="$ac_cv_prog_AR" -fi - -test -z "$AR" && AR=ar -test -z "$AR_FLAGS" && AR_FLAGS=cru - - - - - - - - - - - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. -set dummy ${ac_tool_prefix}strip; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_STRIP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$STRIP"; then - ac_cv_prog_STRIP="$STRIP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_STRIP="${ac_tool_prefix}strip" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -STRIP=$ac_cv_prog_STRIP -if test -n "$STRIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 -$as_echo "$STRIP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_STRIP"; then - ac_ct_STRIP=$STRIP - # Extract the first word of "strip", so it can be a program name with args. -set dummy strip; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_STRIP"; then - ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_STRIP="strip" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP -if test -n "$ac_ct_STRIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 -$as_echo "$ac_ct_STRIP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_STRIP" = x; then - STRIP=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - STRIP=$ac_ct_STRIP - fi -else - STRIP="$ac_cv_prog_STRIP" -fi - -test -z "$STRIP" && STRIP=: - - - - - - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. -set dummy ${ac_tool_prefix}ranlib; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_RANLIB+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$RANLIB"; then - ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -RANLIB=$ac_cv_prog_RANLIB -if test -n "$RANLIB"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 -$as_echo "$RANLIB" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_RANLIB"; then - ac_ct_RANLIB=$RANLIB - # Extract the first word of "ranlib", so it can be a program name with args. -set dummy ranlib; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_RANLIB"; then - ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_RANLIB="ranlib" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB -if test -n "$ac_ct_RANLIB"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 -$as_echo "$ac_ct_RANLIB" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_RANLIB" = x; then - RANLIB=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - RANLIB=$ac_ct_RANLIB - fi -else - RANLIB="$ac_cv_prog_RANLIB" -fi - -test -z "$RANLIB" && RANLIB=: - - - - - - -# Determine commands to create old-style static archives. -old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' -old_postinstall_cmds='chmod 644 $oldlib' -old_postuninstall_cmds= - -if test -n "$RANLIB"; then - case $host_os in - openbsd*) - old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib" - ;; - *) - old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib" - ;; - esac - old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" -fi - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -# If no C compiler was specified, use CC. -LTCC=${LTCC-"$CC"} - -# If no C compiler flags were specified, use CFLAGS. -LTCFLAGS=${LTCFLAGS-"$CFLAGS"} - -# Allow CC to be a program name with arguments. -compiler=$CC - - -# Check for command to grab the raw symbol name followed by C symbol from nm. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 -$as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } -if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - -# These are sane defaults that work on at least a few old systems. -# [They come from Ultrix. What could be older than Ultrix?!! ;)] - -# Character class describing NM global symbol codes. -symcode='[BCDEGRST]' - -# Regexp to match symbols that can be accessed directly from C. -sympat='\([_A-Za-z][_A-Za-z0-9]*\)' - -# Define system-specific variables. -case $host_os in -aix*) - symcode='[BCDT]' - ;; -cygwin* | mingw* | pw32* | cegcc*) - symcode='[ABCDGISTW]' - ;; -hpux*) - if test "$host_cpu" = ia64; then - symcode='[ABCDEGRST]' - fi - ;; -irix* | nonstopux*) - symcode='[BCDEGRST]' - ;; -osf*) - symcode='[BCDEGQRST]' - ;; -solaris*) - symcode='[BDRT]' - ;; -sco3.2v5*) - symcode='[DT]' - ;; -sysv4.2uw2*) - symcode='[DT]' - ;; -sysv5* | sco5v6* | unixware* | OpenUNIX*) - symcode='[ABDT]' - ;; -sysv4) - symcode='[DFNSTU]' - ;; -esac - -# If we're using GNU nm, then use its standard symbol codes. -case `$NM -V 2>&1` in -*GNU* | *'with BFD'*) - symcode='[ABCDGIRSTW]' ;; -esac - -# Transform an extracted symbol line into a proper C declaration. -# Some systems (esp. on ia64) link data and code symbols differently, -# so use this general approach. -lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" - -# Transform an extracted symbol line into symbol name and symbol address -lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'" -lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'" - -# Handle CRLF in mingw tool chain -opt_cr= -case $build_os in -mingw*) - opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp - ;; -esac - -# Try without a prefix underscore, then with it. -for ac_symprfx in "" "_"; do - - # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. - symxfrm="\\1 $ac_symprfx\\2 \\2" - - # Write the raw and C identifiers. - if test "$lt_cv_nm_interface" = "MS dumpbin"; then - # Fake it for dumpbin and say T for any non-static function - # and D for any global variable. - # Also find C++ and __fastcall symbols from MSVC++, - # which start with @ or ?. - lt_cv_sys_global_symbol_pipe="$AWK '"\ -" {last_section=section; section=\$ 3};"\ -" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ -" \$ 0!~/External *\|/{next};"\ -" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ -" {if(hide[section]) next};"\ -" {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ -" {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ -" s[1]~/^[@?]/{print s[1], s[1]; next};"\ -" s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ -" ' prfx=^$ac_symprfx" - else - lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" - fi - - # Check to see that the pipe works correctly. - pipe_works=no - - rm -f conftest* - cat > conftest.$ac_ext <<_LT_EOF -#ifdef __cplusplus -extern "C" { -#endif -char nm_test_var; -void nm_test_func(void); -void nm_test_func(void){} -#ifdef __cplusplus -} -#endif -int main(){nm_test_var='a';nm_test_func();return(0);} -_LT_EOF - - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - # Now try to grab the symbols. - nlist=conftest.nm - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\""; } >&5 - (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && test -s "$nlist"; then - # Try sorting and uniquifying the output. - if sort "$nlist" | uniq > "$nlist"T; then - mv -f "$nlist"T "$nlist" - else - rm -f "$nlist"T - fi - - # Make sure that we snagged all the symbols we need. - if $GREP ' nm_test_var$' "$nlist" >/dev/null; then - if $GREP ' nm_test_func$' "$nlist" >/dev/null; then - cat <<_LT_EOF > conftest.$ac_ext -#ifdef __cplusplus -extern "C" { -#endif - -_LT_EOF - # Now generate the symbol file. - eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' - - cat <<_LT_EOF >> conftest.$ac_ext - -/* The mapping between symbol names and symbols. */ -const struct { - const char *name; - void *address; -} -lt__PROGRAM__LTX_preloaded_symbols[] = -{ - { "@PROGRAM@", (void *) 0 }, -_LT_EOF - $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext - cat <<\_LT_EOF >> conftest.$ac_ext - {0, (void *) 0} -}; - -/* This works around a problem in FreeBSD linker */ -#ifdef FREEBSD_WORKAROUND -static const void *lt_preloaded_setup() { - return lt__PROGRAM__LTX_preloaded_symbols; -} -#endif - -#ifdef __cplusplus -} -#endif -_LT_EOF - # Now try linking the two files. - mv conftest.$ac_objext conftstm.$ac_objext - lt_save_LIBS="$LIBS" - lt_save_CFLAGS="$CFLAGS" - LIBS="conftstm.$ac_objext" - CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 - (eval $ac_link) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && test -s conftest${ac_exeext}; then - pipe_works=yes - fi - LIBS="$lt_save_LIBS" - CFLAGS="$lt_save_CFLAGS" - else - echo "cannot find nm_test_func in $nlist" >&5 - fi - else - echo "cannot find nm_test_var in $nlist" >&5 - fi - else - echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 - fi - else - echo "$progname: failed program was:" >&5 - cat conftest.$ac_ext >&5 - fi - rm -rf conftest* conftst* - - # Do not use the global_symbol_pipe unless it works. - if test "$pipe_works" = yes; then - break - else - lt_cv_sys_global_symbol_pipe= - fi -done - -fi - -if test -z "$lt_cv_sys_global_symbol_pipe"; then - lt_cv_sys_global_symbol_to_cdecl= -fi -if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 -$as_echo "failed" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 -$as_echo "ok" >&6; } -fi - - - - - - - - - - - - - - - - - - - - - - - -# Check whether --enable-libtool-lock was given. -if test "${enable_libtool_lock+set}" = set; then : - enableval=$enable_libtool_lock; -fi - -test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes - -# Some flags need to be propagated to the compiler or linker for good -# libtool support. -case $host in -ia64-*-hpux*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - case `/usr/bin/file conftest.$ac_objext` in - *ELF-32*) - HPUX_IA64_MODE="32" - ;; - *ELF-64*) - HPUX_IA64_MODE="64" - ;; - esac - fi - rm -rf conftest* - ;; -*-*-irix6*) - # Find out which ABI we are using. - echo '#line 5823 "configure"' > conftest.$ac_ext - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - if test "$lt_cv_prog_gnu_ld" = yes; then - case `/usr/bin/file conftest.$ac_objext` in - *32-bit*) - LD="${LD-ld} -melf32bsmip" - ;; - *N32*) - LD="${LD-ld} -melf32bmipn32" - ;; - *64-bit*) - LD="${LD-ld} -melf64bmip" - ;; - esac - else - case `/usr/bin/file conftest.$ac_objext` in - *32-bit*) - LD="${LD-ld} -32" - ;; - *N32*) - LD="${LD-ld} -n32" - ;; - *64-bit*) - LD="${LD-ld} -64" - ;; - esac - fi - fi - rm -rf conftest* - ;; - -x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ -s390*-*linux*|s390*-*tpf*|sparc*-*linux*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - case `/usr/bin/file conftest.o` in - *32-bit*) - case $host in - x86_64-*kfreebsd*-gnu) - LD="${LD-ld} -m elf_i386_fbsd" - ;; - x86_64-*linux*) - LD="${LD-ld} -m elf_i386" - ;; - ppc64-*linux*|powerpc64-*linux*) - LD="${LD-ld} -m elf32ppclinux" - ;; - s390x-*linux*) - LD="${LD-ld} -m elf_s390" - ;; - sparc64-*linux*) - LD="${LD-ld} -m elf32_sparc" - ;; - esac - ;; - *64-bit*) - case $host in - x86_64-*kfreebsd*-gnu) - LD="${LD-ld} -m elf_x86_64_fbsd" - ;; - x86_64-*linux*) - LD="${LD-ld} -m elf_x86_64" - ;; - ppc*-*linux*|powerpc*-*linux*) - LD="${LD-ld} -m elf64ppc" - ;; - s390*-*linux*|s390*-*tpf*) - LD="${LD-ld} -m elf64_s390" - ;; - sparc*-*linux*) - LD="${LD-ld} -m elf64_sparc" - ;; - esac - ;; - esac - fi - rm -rf conftest* - ;; - -*-*-sco3.2v5*) - # On SCO OpenServer 5, we need -belf to get full-featured binaries. - SAVE_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS -belf" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 -$as_echo_n "checking whether the C compiler needs -belf... " >&6; } -if test "${lt_cv_cc_needs_belf+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - lt_cv_cc_needs_belf=yes -else - lt_cv_cc_needs_belf=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 -$as_echo "$lt_cv_cc_needs_belf" >&6; } - if test x"$lt_cv_cc_needs_belf" != x"yes"; then - # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf - CFLAGS="$SAVE_CFLAGS" - fi - ;; -sparc*-*solaris*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - case `/usr/bin/file conftest.o` in - *64-bit*) - case $lt_cv_prog_gnu_ld in - yes*) LD="${LD-ld} -m elf64_sparc" ;; - *) - if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then - LD="${LD-ld} -64" - fi - ;; - esac - ;; - esac - fi - rm -rf conftest* - ;; -esac - -need_locks="$enable_libtool_lock" - - - case $host_os in - rhapsody* | darwin*) - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. -set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_DSYMUTIL+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$DSYMUTIL"; then - ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -DSYMUTIL=$ac_cv_prog_DSYMUTIL -if test -n "$DSYMUTIL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 -$as_echo "$DSYMUTIL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_DSYMUTIL"; then - ac_ct_DSYMUTIL=$DSYMUTIL - # Extract the first word of "dsymutil", so it can be a program name with args. -set dummy dsymutil; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_DSYMUTIL+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_DSYMUTIL"; then - ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL -if test -n "$ac_ct_DSYMUTIL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 -$as_echo "$ac_ct_DSYMUTIL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_DSYMUTIL" = x; then - DSYMUTIL=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - DSYMUTIL=$ac_ct_DSYMUTIL - fi -else - DSYMUTIL="$ac_cv_prog_DSYMUTIL" -fi - - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. -set dummy ${ac_tool_prefix}nmedit; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_NMEDIT+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$NMEDIT"; then - ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -NMEDIT=$ac_cv_prog_NMEDIT -if test -n "$NMEDIT"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 -$as_echo "$NMEDIT" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_NMEDIT"; then - ac_ct_NMEDIT=$NMEDIT - # Extract the first word of "nmedit", so it can be a program name with args. -set dummy nmedit; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_NMEDIT+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_NMEDIT"; then - ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_NMEDIT="nmedit" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT -if test -n "$ac_ct_NMEDIT"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 -$as_echo "$ac_ct_NMEDIT" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_NMEDIT" = x; then - NMEDIT=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - NMEDIT=$ac_ct_NMEDIT - fi -else - NMEDIT="$ac_cv_prog_NMEDIT" -fi - - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. -set dummy ${ac_tool_prefix}lipo; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_LIPO+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$LIPO"; then - ac_cv_prog_LIPO="$LIPO" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_LIPO="${ac_tool_prefix}lipo" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -LIPO=$ac_cv_prog_LIPO -if test -n "$LIPO"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 -$as_echo "$LIPO" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_LIPO"; then - ac_ct_LIPO=$LIPO - # Extract the first word of "lipo", so it can be a program name with args. -set dummy lipo; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_LIPO+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_LIPO"; then - ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_LIPO="lipo" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO -if test -n "$ac_ct_LIPO"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 -$as_echo "$ac_ct_LIPO" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_LIPO" = x; then - LIPO=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - LIPO=$ac_ct_LIPO - fi -else - LIPO="$ac_cv_prog_LIPO" -fi - - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. -set dummy ${ac_tool_prefix}otool; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_OTOOL+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$OTOOL"; then - ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_OTOOL="${ac_tool_prefix}otool" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -OTOOL=$ac_cv_prog_OTOOL -if test -n "$OTOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 -$as_echo "$OTOOL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_OTOOL"; then - ac_ct_OTOOL=$OTOOL - # Extract the first word of "otool", so it can be a program name with args. -set dummy otool; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_OTOOL+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_OTOOL"; then - ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_OTOOL="otool" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL -if test -n "$ac_ct_OTOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 -$as_echo "$ac_ct_OTOOL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_OTOOL" = x; then - OTOOL=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - OTOOL=$ac_ct_OTOOL - fi -else - OTOOL="$ac_cv_prog_OTOOL" -fi - - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. -set dummy ${ac_tool_prefix}otool64; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_OTOOL64+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$OTOOL64"; then - ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -OTOOL64=$ac_cv_prog_OTOOL64 -if test -n "$OTOOL64"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 -$as_echo "$OTOOL64" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_OTOOL64"; then - ac_ct_OTOOL64=$OTOOL64 - # Extract the first word of "otool64", so it can be a program name with args. -set dummy otool64; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_OTOOL64+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_OTOOL64"; then - ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_OTOOL64="otool64" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 -if test -n "$ac_ct_OTOOL64"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 -$as_echo "$ac_ct_OTOOL64" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_OTOOL64" = x; then - OTOOL64=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - OTOOL64=$ac_ct_OTOOL64 - fi -else - OTOOL64="$ac_cv_prog_OTOOL64" -fi - - - - - - - - - - - - - - - - - - - - - - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 -$as_echo_n "checking for -single_module linker flag... " >&6; } -if test "${lt_cv_apple_cc_single_mod+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_apple_cc_single_mod=no - if test -z "${LT_MULTI_MODULE}"; then - # By default we will add the -single_module flag. You can override - # by either setting the environment variable LT_MULTI_MODULE - # non-empty at configure time, or by adding -multi_module to the - # link flags. - rm -rf libconftest.dylib* - echo "int foo(void){return 1;}" > conftest.c - echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ --dynamiclib -Wl,-single_module conftest.c" >&5 - $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ - -dynamiclib -Wl,-single_module conftest.c 2>conftest.err - _lt_result=$? - if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then - lt_cv_apple_cc_single_mod=yes - else - cat conftest.err >&5 - fi - rm -rf libconftest.dylib* - rm -f conftest.* - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 -$as_echo "$lt_cv_apple_cc_single_mod" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 -$as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } -if test "${lt_cv_ld_exported_symbols_list+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_ld_exported_symbols_list=no - save_LDFLAGS=$LDFLAGS - echo "_main" > conftest.sym - LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - lt_cv_ld_exported_symbols_list=yes -else - lt_cv_ld_exported_symbols_list=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - LDFLAGS="$save_LDFLAGS" - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 -$as_echo "$lt_cv_ld_exported_symbols_list" >&6; } - case $host_os in - rhapsody* | darwin1.[012]) - _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; - darwin1.*) - _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; - darwin*) # darwin 5.x on - # if running on 10.5 or later, the deployment target defaults - # to the OS version, if on x86, and 10.4, the deployment - # target defaults to 10.4. Don't you love it? - case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in - 10.0,*86*-darwin8*|10.0,*-darwin[91]*) - _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; - 10.[012]*) - _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; - 10.*) - _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; - esac - ;; - esac - if test "$lt_cv_apple_cc_single_mod" = "yes"; then - _lt_dar_single_mod='$single_module' - fi - if test "$lt_cv_ld_exported_symbols_list" = "yes"; then - _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' - else - _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' - fi - if test "$DSYMUTIL" != ":"; then - _lt_dsymutil='~$DSYMUTIL $lib || :' - else - _lt_dsymutil= - fi - ;; - esac - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 -$as_echo_n "checking how to run the C preprocessor... " >&6; } -# On Suns, sometimes $CPP names a directory. -if test -n "$CPP" && test -d "$CPP"; then - CPP= -fi -if test -z "$CPP"; then - if test "${ac_cv_prog_CPP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - # Double quotes because CPP needs to be expanded - for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" - do - ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - break -fi - - done - ac_cv_prog_CPP=$CPP - -fi - CPP=$ac_cv_prog_CPP -else - ac_cv_prog_CPP=$CPP -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 -$as_echo "$CPP" >&6; } -ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error "C preprocessor \"$CPP\" fails sanity check -See \`config.log' for more details." "$LINENO" 5; } -fi - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 -$as_echo_n "checking for ANSI C header files... " >&6; } -if test "${ac_cv_header_stdc+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#include -#include - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_header_stdc=yes -else - ac_cv_header_stdc=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - -if test $ac_cv_header_stdc = yes; then - # SunOS 4.x string.h does not declare mem*, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "memchr" >/dev/null 2>&1; then : - -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "free" >/dev/null 2>&1; then : - -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. - if test "$cross_compiling" = yes; then : - : -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#if ((' ' & 0x0FF) == 0x020) -# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') -# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) -#else -# define ISLOWER(c) \ - (('a' <= (c) && (c) <= 'i') \ - || ('j' <= (c) && (c) <= 'r') \ - || ('s' <= (c) && (c) <= 'z')) -# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) -#endif - -#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) -int -main () -{ - int i; - for (i = 0; i < 256; i++) - if (XOR (islower (i), ISLOWER (i)) - || toupper (i) != TOUPPER (i)) - return 2; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - -else - ac_cv_header_stdc=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - -fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 -$as_echo "$ac_cv_header_stdc" >&6; } -if test $ac_cv_header_stdc = yes; then - -$as_echo "#define STDC_HEADERS 1" >>confdefs.h - -fi - -# On IRIX 5.3, sys/types and inttypes.h are conflicting. -for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ - inttypes.h stdint.h unistd.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default -" -eval as_val=\$$as_ac_Header - if test "x$as_val" = x""yes; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - -fi - -done - - -for ac_header in dlfcn.h -do : - ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default -" -if test "x$ac_cv_header_dlfcn_h" = x""yes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_DLFCN_H 1 -_ACEOF - -fi - -done - - - -# Set options - - - - enable_dlopen=no - - - enable_win32_dll=no - - - # Check whether --enable-shared was given. -if test "${enable_shared+set}" = set; then : - enableval=$enable_shared; p=${PACKAGE-default} - case $enableval in - yes) enable_shared=yes ;; - no) enable_shared=no ;; - *) - enable_shared=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_shared=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac -else - enable_shared=yes -fi - - - - - - - - - - # Check whether --enable-static was given. -if test "${enable_static+set}" = set; then : - enableval=$enable_static; p=${PACKAGE-default} - case $enableval in - yes) enable_static=yes ;; - no) enable_static=no ;; - *) - enable_static=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_static=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac -else - enable_static=yes -fi - - - - - - - - - - -# Check whether --with-pic was given. -if test "${with_pic+set}" = set; then : - withval=$with_pic; pic_mode="$withval" -else - pic_mode=default -fi - - -test -z "$pic_mode" && pic_mode=default - - - - - - - - # Check whether --enable-fast-install was given. -if test "${enable_fast_install+set}" = set; then : - enableval=$enable_fast_install; p=${PACKAGE-default} - case $enableval in - yes) enable_fast_install=yes ;; - no) enable_fast_install=no ;; - *) - enable_fast_install=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_fast_install=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac -else - enable_fast_install=yes -fi - - - - - - - - - - - -# This can be used to rebuild libtool when needed -LIBTOOL_DEPS="$ltmain" - -# Always use our own libtool. -LIBTOOL='$(SHELL) $(top_builddir)/libtool' - - - - - - - - - - - - - - - - - - - - - - - - - -test -z "$LN_S" && LN_S="ln -s" - - - - - - - - - - - - - - -if test -n "${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 -$as_echo_n "checking for objdir... " >&6; } -if test "${lt_cv_objdir+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - rm -f .libs 2>/dev/null -mkdir .libs 2>/dev/null -if test -d .libs; then - lt_cv_objdir=.libs -else - # MS-DOS does not allow filenames that begin with a dot. - lt_cv_objdir=_libs -fi -rmdir .libs 2>/dev/null -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 -$as_echo "$lt_cv_objdir" >&6; } -objdir=$lt_cv_objdir - - - - - -cat >>confdefs.h <<_ACEOF -#define LT_OBJDIR "$lt_cv_objdir/" -_ACEOF - - - - - - - - - - - - - - - - - -case $host_os in -aix3*) - # AIX sometimes has problems with the GCC collect2 program. For some - # reason, if we set the COLLECT_NAMES environment variable, the problems - # vanish in a puff of smoke. - if test "X${COLLECT_NAMES+set}" != Xset; then - COLLECT_NAMES= - export COLLECT_NAMES - fi - ;; -esac - -# Sed substitution that helps us do robust quoting. It backslashifies -# metacharacters that are still active within double-quoted strings. -sed_quote_subst='s/\(["`$\\]\)/\\\1/g' - -# Same as above, but do not quote variable references. -double_quote_subst='s/\(["`\\]\)/\\\1/g' - -# Sed substitution to delay expansion of an escaped shell variable in a -# double_quote_subst'ed string. -delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' - -# Sed substitution to delay expansion of an escaped single quote. -delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' - -# Sed substitution to avoid accidental globbing in evaled expressions -no_glob_subst='s/\*/\\\*/g' - -# Global variables: -ofile=libtool -can_build_shared=yes - -# All known linkers require a `.a' archive for static linking (except MSVC, -# which needs '.lib'). -libext=a - -with_gnu_ld="$lt_cv_prog_gnu_ld" - -old_CC="$CC" -old_CFLAGS="$CFLAGS" - -# Set sane defaults for various variables -test -z "$CC" && CC=cc -test -z "$LTCC" && LTCC=$CC -test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS -test -z "$LD" && LD=ld -test -z "$ac_objext" && ac_objext=o - -for cc_temp in $compiler""; do - case $cc_temp in - compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; - distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; - \-*) ;; - *) break;; - esac -done -cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` - - -# Only perform the check for file, if the check method requires it -test -z "$MAGIC_CMD" && MAGIC_CMD=file -case $deplibs_check_method in -file_magic*) - if test "$file_magic_cmd" = '$MAGIC_CMD'; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 -$as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } -if test "${lt_cv_path_MAGIC_CMD+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $MAGIC_CMD in -[\\/*] | ?:[\\/]*) - lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. - ;; -*) - lt_save_MAGIC_CMD="$MAGIC_CMD" - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" - for ac_dir in $ac_dummy; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/${ac_tool_prefix}file; then - lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file" - if test -n "$file_magic_test_file"; then - case $deplibs_check_method in - "file_magic "*) - file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` - MAGIC_CMD="$lt_cv_path_MAGIC_CMD" - if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | - $EGREP "$file_magic_regex" > /dev/null; then - : - else - cat <<_LT_EOF 1>&2 - -*** Warning: the command libtool uses to detect shared libraries, -*** $file_magic_cmd, produces output that libtool cannot recognize. -*** The result is that libtool may fail to recognize shared libraries -*** as such. This will affect the creation of libtool libraries that -*** depend on shared libraries, but programs linked with such libtool -*** libraries will work regardless of this problem. Nevertheless, you -*** may want to report the problem to your system manager and/or to -*** bug-libtool@gnu.org - -_LT_EOF - fi ;; - esac - fi - break - fi - done - IFS="$lt_save_ifs" - MAGIC_CMD="$lt_save_MAGIC_CMD" - ;; -esac -fi - -MAGIC_CMD="$lt_cv_path_MAGIC_CMD" -if test -n "$MAGIC_CMD"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 -$as_echo "$MAGIC_CMD" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - - -if test -z "$lt_cv_path_MAGIC_CMD"; then - if test -n "$ac_tool_prefix"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5 -$as_echo_n "checking for file... " >&6; } -if test "${lt_cv_path_MAGIC_CMD+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $MAGIC_CMD in -[\\/*] | ?:[\\/]*) - lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. - ;; -*) - lt_save_MAGIC_CMD="$MAGIC_CMD" - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" - for ac_dir in $ac_dummy; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/file; then - lt_cv_path_MAGIC_CMD="$ac_dir/file" - if test -n "$file_magic_test_file"; then - case $deplibs_check_method in - "file_magic "*) - file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` - MAGIC_CMD="$lt_cv_path_MAGIC_CMD" - if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | - $EGREP "$file_magic_regex" > /dev/null; then - : - else - cat <<_LT_EOF 1>&2 - -*** Warning: the command libtool uses to detect shared libraries, -*** $file_magic_cmd, produces output that libtool cannot recognize. -*** The result is that libtool may fail to recognize shared libraries -*** as such. This will affect the creation of libtool libraries that -*** depend on shared libraries, but programs linked with such libtool -*** libraries will work regardless of this problem. Nevertheless, you -*** may want to report the problem to your system manager and/or to -*** bug-libtool@gnu.org - -_LT_EOF - fi ;; - esac - fi - break - fi - done - IFS="$lt_save_ifs" - MAGIC_CMD="$lt_save_MAGIC_CMD" - ;; -esac -fi - -MAGIC_CMD="$lt_cv_path_MAGIC_CMD" -if test -n "$MAGIC_CMD"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 -$as_echo "$MAGIC_CMD" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - else - MAGIC_CMD=: - fi -fi - - fi - ;; -esac - -# Use C for the default configuration in the libtool script - -lt_save_CC="$CC" -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - -# Source file extension for C test sources. -ac_ext=c - -# Object file extension for compiled C test sources. -objext=o -objext=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code="int some_variable = 0;" - -# Code to be used in simple link tests -lt_simple_link_test_code='int main(){return(0);}' - - - - - - - -# If no C compiler was specified, use CC. -LTCC=${LTCC-"$CC"} - -# If no C compiler flags were specified, use CFLAGS. -LTCFLAGS=${LTCFLAGS-"$CFLAGS"} - -# Allow CC to be a program name with arguments. -compiler=$CC - -# Save the default compiler, since it gets overwritten when the other -# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. -compiler_DEFAULT=$CC - -# save warnings/boilerplate of simple test code -ac_outfile=conftest.$ac_objext -echo "$lt_simple_compile_test_code" >conftest.$ac_ext -eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_compiler_boilerplate=`cat conftest.err` -$RM conftest* - -ac_outfile=conftest.$ac_objext -echo "$lt_simple_link_test_code" >conftest.$ac_ext -eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_linker_boilerplate=`cat conftest.err` -$RM -r conftest* - - -if test -n "$compiler"; then - -lt_prog_compiler_no_builtin_flag= - -if test "$GCC" = yes; then - lt_prog_compiler_no_builtin_flag=' -fno-builtin' - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 -$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } -if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_rtti_exceptions=no - ac_outfile=conftest.$ac_objext - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="-fno-rtti -fno-exceptions" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - # The option is referenced via a variable to avoid confusing sed. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:7349: $lt_compile\"" >&5) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&5 - echo "$as_me:7353: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s "$ac_outfile"; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings other than the usual output. - $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then - lt_cv_prog_compiler_rtti_exceptions=yes - fi - fi - $RM conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 -$as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } - -if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then - lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" -else - : -fi - -fi - - - - - - - lt_prog_compiler_wl= -lt_prog_compiler_pic= -lt_prog_compiler_static= - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 -$as_echo_n "checking for $compiler option to produce PIC... " >&6; } - - if test "$GCC" = yes; then - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_static='-static' - - case $host_os in - aix*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - lt_prog_compiler_static='-Bstatic' - fi - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - lt_prog_compiler_pic='-fPIC' - ;; - m68k) - # FIXME: we need at least 68020 code to build shared libraries, but - # adding the `-m68020' flag to GCC prevents building anything better, - # like `-m68040'. - lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' - ;; - esac - ;; - - beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) - # PIC is the default for these OSes. - ;; - - mingw* | cygwin* | pw32* | os2* | cegcc*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - # Although the cygwin gcc ignores -fPIC, still need this for old-style - # (--disable-auto-import) libraries - lt_prog_compiler_pic='-DDLL_EXPORT' - ;; - - darwin* | rhapsody*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - lt_prog_compiler_pic='-fno-common' - ;; - - hpux*) - # PIC is the default for 64-bit PA HP-UX, but not for 32-bit - # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag - # sets the default TLS model and affects inlining. - case $host_cpu in - hppa*64*) - # +Z the default - ;; - *) - lt_prog_compiler_pic='-fPIC' - ;; - esac - ;; - - interix[3-9]*) - # Interix 3.x gcc -fpic/-fPIC options generate broken code. - # Instead, we relocate shared libraries at runtime. - ;; - - msdosdjgpp*) - # Just because we use GCC doesn't mean we suddenly get shared libraries - # on systems that don't support them. - lt_prog_compiler_can_build_shared=no - enable_shared=no - ;; - - *nto* | *qnx*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - lt_prog_compiler_pic='-fPIC -shared' - ;; - - sysv4*MP*) - if test -d /usr/nec; then - lt_prog_compiler_pic=-Kconform_pic - fi - ;; - - *) - lt_prog_compiler_pic='-fPIC' - ;; - esac - else - # PORTME Check for flag to pass linker flags through the system compiler. - case $host_os in - aix*) - lt_prog_compiler_wl='-Wl,' - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - lt_prog_compiler_static='-Bstatic' - else - lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' - fi - ;; - - mingw* | cygwin* | pw32* | os2* | cegcc*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - lt_prog_compiler_pic='-DDLL_EXPORT' - ;; - - hpux9* | hpux10* | hpux11*) - lt_prog_compiler_wl='-Wl,' - # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but - # not for PA HP-UX. - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - lt_prog_compiler_pic='+Z' - ;; - esac - # Is there a better lt_prog_compiler_static that works with the bundled CC? - lt_prog_compiler_static='${wl}-a ${wl}archive' - ;; - - irix5* | irix6* | nonstopux*) - lt_prog_compiler_wl='-Wl,' - # PIC (with -KPIC) is the default. - lt_prog_compiler_static='-non_shared' - ;; - - linux* | k*bsd*-gnu | kopensolaris*-gnu) - case $cc_basename in - # old Intel for x86_64 which still supported -KPIC. - ecc*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-static' - ;; - # icc used to be incompatible with GCC. - # ICC 10 doesn't accept -KPIC any more. - icc* | ifort*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-fPIC' - lt_prog_compiler_static='-static' - ;; - # Lahey Fortran 8.1. - lf95*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='--shared' - lt_prog_compiler_static='--static' - ;; - pgcc* | pgf77* | pgf90* | pgf95*) - # Portland Group compilers (*not* the Pentium gcc compiler, - # which looks to be a dead project) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-fpic' - lt_prog_compiler_static='-Bstatic' - ;; - ccc*) - lt_prog_compiler_wl='-Wl,' - # All Alpha code is PIC. - lt_prog_compiler_static='-non_shared' - ;; - xl*) - # IBM XL C 8.0/Fortran 10.1 on PPC - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-qpic' - lt_prog_compiler_static='-qstaticlink' - ;; - *) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C 5.9 - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - lt_prog_compiler_wl='-Wl,' - ;; - *Sun\ F*) - # Sun Fortran 8.3 passes all unrecognized flags to the linker - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - lt_prog_compiler_wl='' - ;; - esac - ;; - esac - ;; - - newsos6) - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - ;; - - *nto* | *qnx*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - lt_prog_compiler_pic='-fPIC -shared' - ;; - - osf3* | osf4* | osf5*) - lt_prog_compiler_wl='-Wl,' - # All OSF/1 code is PIC. - lt_prog_compiler_static='-non_shared' - ;; - - rdos*) - lt_prog_compiler_static='-non_shared' - ;; - - solaris*) - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - case $cc_basename in - f77* | f90* | f95*) - lt_prog_compiler_wl='-Qoption ld ';; - *) - lt_prog_compiler_wl='-Wl,';; - esac - ;; - - sunos4*) - lt_prog_compiler_wl='-Qoption ld ' - lt_prog_compiler_pic='-PIC' - lt_prog_compiler_static='-Bstatic' - ;; - - sysv4 | sysv4.2uw2* | sysv4.3*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - ;; - - sysv4*MP*) - if test -d /usr/nec ;then - lt_prog_compiler_pic='-Kconform_pic' - lt_prog_compiler_static='-Bstatic' - fi - ;; - - sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - ;; - - unicos*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_can_build_shared=no - ;; - - uts4*) - lt_prog_compiler_pic='-pic' - lt_prog_compiler_static='-Bstatic' - ;; - - *) - lt_prog_compiler_can_build_shared=no - ;; - esac - fi - -case $host_os in - # For platforms which do not support PIC, -DPIC is meaningless: - *djgpp*) - lt_prog_compiler_pic= - ;; - *) - lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" - ;; -esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic" >&5 -$as_echo "$lt_prog_compiler_pic" >&6; } - - - - - - -# -# Check to make sure the PIC flag actually works. -# -if test -n "$lt_prog_compiler_pic"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 -$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } -if test "${lt_cv_prog_compiler_pic_works+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_pic_works=no - ac_outfile=conftest.$ac_objext - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="$lt_prog_compiler_pic -DPIC" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - # The option is referenced via a variable to avoid confusing sed. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:7688: $lt_compile\"" >&5) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&5 - echo "$as_me:7692: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s "$ac_outfile"; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings other than the usual output. - $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then - lt_cv_prog_compiler_pic_works=yes - fi - fi - $RM conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 -$as_echo "$lt_cv_prog_compiler_pic_works" >&6; } - -if test x"$lt_cv_prog_compiler_pic_works" = xyes; then - case $lt_prog_compiler_pic in - "" | " "*) ;; - *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; - esac -else - lt_prog_compiler_pic= - lt_prog_compiler_can_build_shared=no -fi - -fi - - - - - - -# -# Check to make sure the static flag actually works. -# -wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 -$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } -if test "${lt_cv_prog_compiler_static_works+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_static_works=no - save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS $lt_tmp_static_flag" - echo "$lt_simple_link_test_code" > conftest.$ac_ext - if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then - # The linker can only warn and ignore the option if not recognized - # So say no if there are warnings - if test -s conftest.err; then - # Append any errors to the config.log. - cat conftest.err 1>&5 - $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if diff conftest.exp conftest.er2 >/dev/null; then - lt_cv_prog_compiler_static_works=yes - fi - else - lt_cv_prog_compiler_static_works=yes - fi - fi - $RM -r conftest* - LDFLAGS="$save_LDFLAGS" - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 -$as_echo "$lt_cv_prog_compiler_static_works" >&6; } - -if test x"$lt_cv_prog_compiler_static_works" = xyes; then - : -else - lt_prog_compiler_static= -fi - - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 -$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } -if test "${lt_cv_prog_compiler_c_o+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_c_o=no - $RM -r conftest 2>/dev/null - mkdir conftest - cd conftest - mkdir out - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - lt_compiler_flag="-o out/conftest2.$ac_objext" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:7793: $lt_compile\"" >&5) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&5 - echo "$as_me:7797: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s out/conftest2.$ac_objext - then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings - $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp - $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 - if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then - lt_cv_prog_compiler_c_o=yes - fi - fi - chmod u+w . 2>&5 - $RM conftest* - # SGI C++ compiler will create directory out/ii_files/ for - # template instantiation - test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files - $RM out/* && rmdir out - cd .. - $RM -r conftest - $RM conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 -$as_echo "$lt_cv_prog_compiler_c_o" >&6; } - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 -$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } -if test "${lt_cv_prog_compiler_c_o+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_c_o=no - $RM -r conftest 2>/dev/null - mkdir conftest - cd conftest - mkdir out - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - lt_compiler_flag="-o out/conftest2.$ac_objext" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:7848: $lt_compile\"" >&5) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&5 - echo "$as_me:7852: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s out/conftest2.$ac_objext - then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings - $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp - $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 - if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then - lt_cv_prog_compiler_c_o=yes - fi - fi - chmod u+w . 2>&5 - $RM conftest* - # SGI C++ compiler will create directory out/ii_files/ for - # template instantiation - test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files - $RM out/* && rmdir out - cd .. - $RM -r conftest - $RM conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 -$as_echo "$lt_cv_prog_compiler_c_o" >&6; } - - - - -hard_links="nottested" -if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then - # do not overwrite the value of need_locks provided by the user - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 -$as_echo_n "checking if we can lock with hard links... " >&6; } - hard_links=yes - $RM conftest* - ln conftest.a conftest.b 2>/dev/null && hard_links=no - touch conftest.a - ln conftest.a conftest.b 2>&5 || hard_links=no - ln conftest.a conftest.b 2>/dev/null && hard_links=no - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 -$as_echo "$hard_links" >&6; } - if test "$hard_links" = no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 -$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} - need_locks=warn - fi -else - need_locks=no -fi - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 -$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } - - runpath_var= - allow_undefined_flag= - always_export_symbols=no - archive_cmds= - archive_expsym_cmds= - compiler_needs_object=no - enable_shared_with_static_runtimes=no - export_dynamic_flag_spec= - export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - hardcode_automatic=no - hardcode_direct=no - hardcode_direct_absolute=no - hardcode_libdir_flag_spec= - hardcode_libdir_flag_spec_ld= - hardcode_libdir_separator= - hardcode_minus_L=no - hardcode_shlibpath_var=unsupported - inherit_rpath=no - link_all_deplibs=unknown - module_cmds= - module_expsym_cmds= - old_archive_from_new_cmds= - old_archive_from_expsyms_cmds= - thread_safe_flag_spec= - whole_archive_flag_spec= - # include_expsyms should be a list of space-separated symbols to be *always* - # included in the symbol list - include_expsyms= - # exclude_expsyms can be an extended regexp of symbols to exclude - # it will be wrapped by ` (' and `)$', so one must not match beginning or - # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', - # as well as any symbol that contains `d'. - exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' - # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out - # platforms (ab)use it in PIC code, but their linkers get confused if - # the symbol is explicitly referenced. Since portable code cannot - # rely on this symbol name, it's probably fine to never include it in - # preloaded symbol tables. - # Exclude shared library initialization/finalization symbols. - extract_expsyms_cmds= - - case $host_os in - cygwin* | mingw* | pw32* | cegcc*) - # FIXME: the MSVC++ port hasn't been tested in a loooong time - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - if test "$GCC" != yes; then - with_gnu_ld=no - fi - ;; - interix*) - # we just hope/assume this is gcc and not c89 (= MSVC++) - with_gnu_ld=yes - ;; - openbsd*) - with_gnu_ld=no - ;; - linux* | k*bsd*-gnu) - link_all_deplibs=no - ;; - esac - - ld_shlibs=yes - if test "$with_gnu_ld" = yes; then - # If archive_cmds runs LD, not CC, wlarc should be empty - wlarc='${wl}' - - # Set some defaults for GNU ld with shared library support. These - # are reset later if shared libraries are not supported. Putting them - # here allows them to be overridden if necessary. - runpath_var=LD_RUN_PATH - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - export_dynamic_flag_spec='${wl}--export-dynamic' - # ancient GNU ld didn't support --whole-archive et. al. - if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then - whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - else - whole_archive_flag_spec= - fi - supports_anon_versioning=no - case `$LD -v 2>&1` in - *GNU\ gold*) supports_anon_versioning=yes ;; - *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 - *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... - *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... - *\ 2.11.*) ;; # other 2.11 versions - *) supports_anon_versioning=yes ;; - esac - - # See if GNU ld supports shared libraries. - case $host_os in - aix[3-9]*) - # On AIX/PPC, the GNU linker is very broken - if test "$host_cpu" != ia64; then - ld_shlibs=no - cat <<_LT_EOF 1>&2 - -*** Warning: the GNU linker, at least up to release 2.9.1, is reported -*** to be unable to reliably create shared libraries on AIX. -*** Therefore, libtool is disabling shared libraries support. If you -*** really care for shared libraries, you may want to modify your PATH -*** so that a non-GNU linker is found, and then restart. - -_LT_EOF - fi - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='' - ;; - m68k) - archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_minus_L=yes - ;; - esac - ;; - - beos*) - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - allow_undefined_flag=unsupported - # Joseph Beckenbach says some releases of gcc - # support --undefined. This deserves some investigation. FIXME - archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - else - ld_shlibs=no - fi - ;; - - cygwin* | mingw* | pw32* | cegcc*) - # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, - # as there is no search path for DLLs. - hardcode_libdir_flag_spec='-L$libdir' - allow_undefined_flag=unsupported - always_export_symbols=no - enable_shared_with_static_runtimes=yes - export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' - - if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - # If the export-symbols file already is a .def file (1st line - # is EXPORTS), use it as is; otherwise, prepend... - archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - cp $export_symbols $output_objdir/$soname.def; - else - echo EXPORTS > $output_objdir/$soname.def; - cat $export_symbols >> $output_objdir/$soname.def; - fi~ - $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - else - ld_shlibs=no - fi - ;; - - interix[3-9]*) - hardcode_direct=no - hardcode_shlibpath_var=no - hardcode_libdir_flag_spec='${wl}-rpath,$libdir' - export_dynamic_flag_spec='${wl}-E' - # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. - # Instead, shared libraries are loaded at an image base (0x10000000 by - # default) and relocated if they conflict, which is a slow very memory - # consuming and fragmenting process. To avoid this, we pick a random, - # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link - # time. Moving up from 0x10000000 also allows more sbrk(2) space. - archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - ;; - - gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) - tmp_diet=no - if test "$host_os" = linux-dietlibc; then - case $cc_basename in - diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) - esac - fi - if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ - && test "$tmp_diet" = no - then - tmp_addflag= - tmp_sharedflag='-shared' - case $cc_basename,$host_cpu in - pgcc*) # Portland Group C compiler - whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_addflag=' $pic_flag' - ;; - pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers - whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_addflag=' $pic_flag -Mnomain' ;; - ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 - tmp_addflag=' -i_dynamic' ;; - efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 - tmp_addflag=' -i_dynamic -nofor_main' ;; - ifc* | ifort*) # Intel Fortran compiler - tmp_addflag=' -nofor_main' ;; - lf95*) # Lahey Fortran 8.1 - whole_archive_flag_spec= - tmp_sharedflag='--shared' ;; - xl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) - tmp_sharedflag='-qmkshrobj' - tmp_addflag= ;; - esac - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) # Sun C 5.9 - whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' - compiler_needs_object=yes - tmp_sharedflag='-G' ;; - *Sun\ F*) # Sun Fortran 8.3 - tmp_sharedflag='-G' ;; - esac - archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - - if test "x$supports_anon_versioning" = xyes; then - archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - echo "local: *; };" >> $output_objdir/$libname.ver~ - $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' - fi - - case $cc_basename in - xlf*) - # IBM XL Fortran 10.1 on PPC cannot create shared libs itself - whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' - hardcode_libdir_flag_spec= - hardcode_libdir_flag_spec_ld='-rpath $libdir' - archive_cmds='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib' - if test "x$supports_anon_versioning" = xyes; then - archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - echo "local: *; };" >> $output_objdir/$libname.ver~ - $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' - fi - ;; - esac - else - ld_shlibs=no - fi - ;; - - netbsd* | netbsdelf*-gnu) - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' - wlarc= - else - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - fi - ;; - - solaris*) - if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then - ld_shlibs=no - cat <<_LT_EOF 1>&2 - -*** Warning: The releases 2.8.* of the GNU linker cannot reliably -*** create shared libraries on Solaris systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.9.1 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. - -_LT_EOF - elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - ld_shlibs=no - fi - ;; - - sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) - case `$LD -v 2>&1` in - *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) - ld_shlibs=no - cat <<_LT_EOF 1>&2 - -*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not -*** reliably create shared libraries on SCO systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.16.91.0.3 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. - -_LT_EOF - ;; - *) - # For security reasons, it is highly recommended that you always - # use absolute paths for naming shared libraries, and exclude the - # DT_RUNPATH tag from executables and libraries. But doing so - # requires that you compile everything twice, which is a pain. - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - ld_shlibs=no - fi - ;; - esac - ;; - - sunos4*) - archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' - wlarc= - hardcode_direct=yes - hardcode_shlibpath_var=no - ;; - - *) - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - ld_shlibs=no - fi - ;; - esac - - if test "$ld_shlibs" = no; then - runpath_var= - hardcode_libdir_flag_spec= - export_dynamic_flag_spec= - whole_archive_flag_spec= - fi - else - # PORTME fill in a description of your system's linker (not GNU ld) - case $host_os in - aix3*) - allow_undefined_flag=unsupported - always_export_symbols=yes - archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' - # Note: this linker hardcodes the directories in LIBPATH if there - # are no directories specified by -L. - hardcode_minus_L=yes - if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then - # Neither direct hardcoding nor static linking is supported with a - # broken collect2. - hardcode_direct=unsupported - fi - ;; - - aix[4-9]*) - if test "$host_cpu" = ia64; then - # On IA64, the linker does run time linking by default, so we don't - # have to do anything special. - aix_use_runtimelinking=no - exp_sym_flag='-Bexport' - no_entry_flag="" - else - # If we're using GNU nm, then we don't want the "-C" option. - # -C means demangle to AIX nm, but means don't demangle with GNU nm - if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then - export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' - else - export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' - fi - aix_use_runtimelinking=no - - # Test if we are trying to use run time linking or normal - # AIX style linking. If -brtl is somewhere in LDFLAGS, we - # need to do runtime linking. - case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) - for ld_flag in $LDFLAGS; do - if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then - aix_use_runtimelinking=yes - break - fi - done - ;; - esac - - exp_sym_flag='-bexport' - no_entry_flag='-bnoentry' - fi - - # When large executables or shared objects are built, AIX ld can - # have problems creating the table of contents. If linking a library - # or program results in "error TOC overflow" add -mminimal-toc to - # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not - # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. - - archive_cmds='' - hardcode_direct=yes - hardcode_direct_absolute=yes - hardcode_libdir_separator=':' - link_all_deplibs=yes - file_list_spec='${wl}-f,' - - if test "$GCC" = yes; then - case $host_os in aix4.[012]|aix4.[012].*) - # We only want to do this on AIX 4.2 and lower, the check - # below for broken collect2 doesn't work under 4.3+ - collect2name=`${CC} -print-prog-name=collect2` - if test -f "$collect2name" && - strings "$collect2name" | $GREP resolve_lib_name >/dev/null - then - # We have reworked collect2 - : - else - # We have old collect2 - hardcode_direct=unsupported - # It fails to find uninstalled libraries when the uninstalled - # path is not listed in the libpath. Setting hardcode_minus_L - # to unsupported forces relinking - hardcode_minus_L=yes - hardcode_libdir_flag_spec='-L$libdir' - hardcode_libdir_separator= - fi - ;; - esac - shared_flag='-shared' - if test "$aix_use_runtimelinking" = yes; then - shared_flag="$shared_flag "'${wl}-G' - fi - link_all_deplibs=no - else - # not using gcc - if test "$host_cpu" = ia64; then - # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release - # chokes on -Wl,-G. The following line is correct: - shared_flag='-G' - else - if test "$aix_use_runtimelinking" = yes; then - shared_flag='${wl}-G' - else - shared_flag='${wl}-bM:SRE' - fi - fi - fi - - export_dynamic_flag_spec='${wl}-bexpall' - # It seems that -bexpall does not export symbols beginning with - # underscore (_), so it is better to generate a list of symbols to export. - always_export_symbols=yes - if test "$aix_use_runtimelinking" = yes; then - # Warning - without using the other runtime loading flags (-brtl), - # -berok will link without error, but may produce a broken library. - allow_undefined_flag='-berok' - # Determine the default libpath from the value encoded in an - # empty executable. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - -lt_aix_libpath_sed=' - /Import File Strings/,/^$/ { - /^0/ { - s/^0 *\(.*\)$/\1/ - p - } - }' -aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -# Check for a 64-bit object if we didn't find anything. -if test -z "$aix_libpath"; then - aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -fi -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi - - hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" - archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" - else - if test "$host_cpu" = ia64; then - hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' - allow_undefined_flag="-z nodefs" - archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" - else - # Determine the default libpath from the value encoded in an - # empty executable. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - -lt_aix_libpath_sed=' - /Import File Strings/,/^$/ { - /^0/ { - s/^0 *\(.*\)$/\1/ - p - } - }' -aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -# Check for a 64-bit object if we didn't find anything. -if test -z "$aix_libpath"; then - aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -fi -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi - - hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" - # Warning - without using the other run time loading flags, - # -berok will link without error, but may produce a broken library. - no_undefined_flag=' ${wl}-bernotok' - allow_undefined_flag=' ${wl}-berok' - # Exported symbols can be pulled into shared objects from archives - whole_archive_flag_spec='$convenience' - archive_cmds_need_lc=yes - # This is similar to how AIX traditionally builds its shared libraries. - archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' - fi - fi - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='' - ;; - m68k) - archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_minus_L=yes - ;; - esac - ;; - - bsdi[45]*) - export_dynamic_flag_spec=-rdynamic - ;; - - cygwin* | mingw* | pw32* | cegcc*) - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - # hardcode_libdir_flag_spec is actually meaningless, as there is - # no search path for DLLs. - hardcode_libdir_flag_spec=' ' - allow_undefined_flag=unsupported - # Tell ltmain to make .lib files, not .a files. - libext=lib - # Tell ltmain to make .dll files, not .so files. - shrext_cmds=".dll" - # FIXME: Setting linknames here is a bad hack. - archive_cmds='$CC -o $lib $libobjs $compiler_flags `$ECHO "X$deplibs" | $Xsed -e '\''s/ -lc$//'\''` -link -dll~linknames=' - # The linker will automatically build a .lib file if we build a DLL. - old_archive_from_new_cmds='true' - # FIXME: Should let the user specify the lib program. - old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' - fix_srcfile_path='`cygpath -w "$srcfile"`' - enable_shared_with_static_runtimes=yes - ;; - - darwin* | rhapsody*) - - - archive_cmds_need_lc=no - hardcode_direct=no - hardcode_automatic=yes - hardcode_shlibpath_var=unsupported - whole_archive_flag_spec='' - link_all_deplibs=yes - allow_undefined_flag="$_lt_dar_allow_undefined" - case $cc_basename in - ifort*) _lt_dar_can_shared=yes ;; - *) _lt_dar_can_shared=$GCC ;; - esac - if test "$_lt_dar_can_shared" = "yes"; then - output_verbose_link_cmd=echo - archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" - module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" - archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" - module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" - - else - ld_shlibs=no - fi - - ;; - - dgux*) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_shlibpath_var=no - ;; - - freebsd1*) - ld_shlibs=no - ;; - - # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor - # support. Future versions do this automatically, but an explicit c++rt0.o - # does not break anything, and helps significantly (at the cost of a little - # extra space). - freebsd2.2*) - archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' - hardcode_libdir_flag_spec='-R$libdir' - hardcode_direct=yes - hardcode_shlibpath_var=no - ;; - - # Unfortunately, older versions of FreeBSD 2 do not have this feature. - freebsd2*) - archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct=yes - hardcode_minus_L=yes - hardcode_shlibpath_var=no - ;; - - # FreeBSD 3 and greater uses gcc -shared to do shared libraries. - freebsd* | dragonfly*) - archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' - hardcode_libdir_flag_spec='-R$libdir' - hardcode_direct=yes - hardcode_shlibpath_var=no - ;; - - hpux9*) - if test "$GCC" = yes; then - archive_cmds='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - else - archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - fi - hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' - hardcode_libdir_separator=: - hardcode_direct=yes - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L=yes - export_dynamic_flag_spec='${wl}-E' - ;; - - hpux10*) - if test "$GCC" = yes -a "$with_gnu_ld" = no; then - archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' - fi - if test "$with_gnu_ld" = no; then - hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' - hardcode_libdir_flag_spec_ld='+b $libdir' - hardcode_libdir_separator=: - hardcode_direct=yes - hardcode_direct_absolute=yes - export_dynamic_flag_spec='${wl}-E' - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L=yes - fi - ;; - - hpux11*) - if test "$GCC" = yes -a "$with_gnu_ld" = no; then - case $host_cpu in - hppa*64*) - archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - ia64*) - archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - else - case $host_cpu in - hppa*64*) - archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - ia64*) - archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - fi - if test "$with_gnu_ld" = no; then - hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' - hardcode_libdir_separator=: - - case $host_cpu in - hppa*64*|ia64*) - hardcode_direct=no - hardcode_shlibpath_var=no - ;; - *) - hardcode_direct=yes - hardcode_direct_absolute=yes - export_dynamic_flag_spec='${wl}-E' - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L=yes - ;; - esac - fi - ;; - - irix5* | irix6* | nonstopux*) - if test "$GCC" = yes; then - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - # Try to use the -exported_symbol ld option, if it does not - # work, assume that -exports_file does not work either and - # implicitly export all symbols. - save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -int foo(void) {} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' - -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - LDFLAGS="$save_LDFLAGS" - else - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' - archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' - fi - archive_cmds_need_lc='no' - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator=: - inherit_rpath=yes - link_all_deplibs=yes - ;; - - netbsd* | netbsdelf*-gnu) - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out - else - archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF - fi - hardcode_libdir_flag_spec='-R$libdir' - hardcode_direct=yes - hardcode_shlibpath_var=no - ;; - - newsos6) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct=yes - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator=: - hardcode_shlibpath_var=no - ;; - - *nto* | *qnx*) - ;; - - openbsd*) - if test -f /usr/libexec/ld.so; then - hardcode_direct=yes - hardcode_shlibpath_var=no - hardcode_direct_absolute=yes - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' - hardcode_libdir_flag_spec='${wl}-rpath,$libdir' - export_dynamic_flag_spec='${wl}-E' - else - case $host_os in - openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) - archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec='-R$libdir' - ;; - *) - archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - hardcode_libdir_flag_spec='${wl}-rpath,$libdir' - ;; - esac - fi - else - ld_shlibs=no - fi - ;; - - os2*) - hardcode_libdir_flag_spec='-L$libdir' - hardcode_minus_L=yes - allow_undefined_flag=unsupported - archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$ECHO DATA >> $output_objdir/$libname.def~$ECHO " SINGLE NONSHARED" >> $output_objdir/$libname.def~$ECHO EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' - old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' - ;; - - osf3*) - if test "$GCC" = yes; then - allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' - archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - allow_undefined_flag=' -expect_unresolved \*' - archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' - fi - archive_cmds_need_lc='no' - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator=: - ;; - - osf4* | osf5*) # as osf3* with the addition of -msym flag - if test "$GCC" = yes; then - allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' - archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - else - allow_undefined_flag=' -expect_unresolved \*' - archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' - archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ - $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' - - # Both c and cxx compiler support -rpath directly - hardcode_libdir_flag_spec='-rpath $libdir' - fi - archive_cmds_need_lc='no' - hardcode_libdir_separator=: - ;; - - solaris*) - no_undefined_flag=' -z defs' - if test "$GCC" = yes; then - wlarc='${wl}' - archive_cmds='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' - else - case `$CC -V 2>&1` in - *"Compilers 5.0"*) - wlarc='' - archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' - archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' - ;; - *) - wlarc='${wl}' - archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' - ;; - esac - fi - hardcode_libdir_flag_spec='-R$libdir' - hardcode_shlibpath_var=no - case $host_os in - solaris2.[0-5] | solaris2.[0-5].*) ;; - *) - # The compiler driver will combine and reorder linker options, - # but understands `-z linker_flag'. GCC discards it without `$wl', - # but is careful enough not to reorder. - # Supported since Solaris 2.6 (maybe 2.5.1?) - if test "$GCC" = yes; then - whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' - else - whole_archive_flag_spec='-z allextract$convenience -z defaultextract' - fi - ;; - esac - link_all_deplibs=yes - ;; - - sunos4*) - if test "x$host_vendor" = xsequent; then - # Use $CC to link under sequent, because it throws in some extra .o - # files that make .init and .fini sections work. - archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' - fi - hardcode_libdir_flag_spec='-L$libdir' - hardcode_direct=yes - hardcode_minus_L=yes - hardcode_shlibpath_var=no - ;; - - sysv4) - case $host_vendor in - sni) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct=yes # is this really true??? - ;; - siemens) - ## LD is ld it makes a PLAMLIB - ## CC just makes a GrossModule. - archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' - reload_cmds='$CC -r -o $output$reload_objs' - hardcode_direct=no - ;; - motorola) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct=no #Motorola manual says yes, but my tests say they lie - ;; - esac - runpath_var='LD_RUN_PATH' - hardcode_shlibpath_var=no - ;; - - sysv4.3*) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_shlibpath_var=no - export_dynamic_flag_spec='-Bexport' - ;; - - sysv4*MP*) - if test -d /usr/nec; then - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_shlibpath_var=no - runpath_var=LD_RUN_PATH - hardcode_runpath_var=yes - ld_shlibs=yes - fi - ;; - - sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) - no_undefined_flag='${wl}-z,text' - archive_cmds_need_lc=no - hardcode_shlibpath_var=no - runpath_var='LD_RUN_PATH' - - if test "$GCC" = yes; then - archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - fi - ;; - - sysv5* | sco3.2v5* | sco5v6*) - # Note: We can NOT use -z defs as we might desire, because we do not - # link with -lc, and that would cause any symbols used from libc to - # always be unresolved, which means just about no library would - # ever link correctly. If we're not using GNU ld we use -z text - # though, which does catch some bad symbols but isn't as heavy-handed - # as -z defs. - no_undefined_flag='${wl}-z,text' - allow_undefined_flag='${wl}-z,nodefs' - archive_cmds_need_lc=no - hardcode_shlibpath_var=no - hardcode_libdir_flag_spec='${wl}-R,$libdir' - hardcode_libdir_separator=':' - link_all_deplibs=yes - export_dynamic_flag_spec='${wl}-Bexport' - runpath_var='LD_RUN_PATH' - - if test "$GCC" = yes; then - archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - fi - ;; - - uts4*) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_shlibpath_var=no - ;; - - *) - ld_shlibs=no - ;; - esac - - if test x$host_vendor = xsni; then - case $host in - sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) - export_dynamic_flag_spec='${wl}-Blargedynsym' - ;; - esac - fi - fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 -$as_echo "$ld_shlibs" >&6; } -test "$ld_shlibs" = no && can_build_shared=no - -with_gnu_ld=$with_gnu_ld - - - - - - - - - - - - - - - -# -# Do we need to explicitly link libc? -# -case "x$archive_cmds_need_lc" in -x|xyes) - # Assume -lc should be added - archive_cmds_need_lc=yes - - if test "$enable_shared" = yes && test "$GCC" = yes; then - case $archive_cmds in - *'~'*) - # FIXME: we may have to deal with multi-command sequences. - ;; - '$CC '*) - # Test whether the compiler implicitly links with -lc since on some - # systems, -lgcc has to come before -lc. If gcc already passes -lc - # to ld, don't add -lc before -lgcc. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 -$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } - $RM conftest* - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } 2>conftest.err; then - soname=conftest - lib=conftest - libobjs=conftest.$ac_objext - deplibs= - wl=$lt_prog_compiler_wl - pic_flag=$lt_prog_compiler_pic - compiler_flags=-v - linker_flags=-v - verstring= - output_objdir=. - libname=conftest - lt_save_allow_undefined_flag=$allow_undefined_flag - allow_undefined_flag= - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 - (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } - then - archive_cmds_need_lc=no - else - archive_cmds_need_lc=yes - fi - allow_undefined_flag=$lt_save_allow_undefined_flag - else - cat conftest.err 1>&5 - fi - $RM conftest* - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $archive_cmds_need_lc" >&5 -$as_echo "$archive_cmds_need_lc" >&6; } - ;; - esac - fi - ;; -esac - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 -$as_echo_n "checking dynamic linker characteristics... " >&6; } - -if test "$GCC" = yes; then - case $host_os in - darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; - *) lt_awk_arg="/^libraries:/" ;; - esac - lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"` - if $ECHO "$lt_search_path_spec" | $GREP ';' >/dev/null ; then - # if the path contains ";" then we assume it to be the separator - # otherwise default to the standard path separator (i.e. ":") - it is - # assumed that no part of a normal pathname contains ";" but that should - # okay in the real world where ";" in dirpaths is itself problematic. - lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e 's/;/ /g'` - else - lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - fi - # Ok, now we have the path, separated by spaces, we can step through it - # and add multilib dir if necessary. - lt_tmp_lt_search_path_spec= - lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` - for lt_sys_path in $lt_search_path_spec; do - if test -d "$lt_sys_path/$lt_multi_os_dir"; then - lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" - else - test -d "$lt_sys_path" && \ - lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" - fi - done - lt_search_path_spec=`$ECHO $lt_tmp_lt_search_path_spec | awk ' -BEGIN {RS=" "; FS="/|\n";} { - lt_foo=""; - lt_count=0; - for (lt_i = NF; lt_i > 0; lt_i--) { - if ($lt_i != "" && $lt_i != ".") { - if ($lt_i == "..") { - lt_count++; - } else { - if (lt_count == 0) { - lt_foo="/" $lt_i lt_foo; - } else { - lt_count--; - } - } - } - } - if (lt_foo != "") { lt_freq[lt_foo]++; } - if (lt_freq[lt_foo] == 1) { print lt_foo; } -}'` - sys_lib_search_path_spec=`$ECHO $lt_search_path_spec` -else - sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" -fi -library_names_spec= -libname_spec='lib$name' -soname_spec= -shrext_cmds=".so" -postinstall_cmds= -postuninstall_cmds= -finish_cmds= -finish_eval= -shlibpath_var= -shlibpath_overrides_runpath=unknown -version_type=none -dynamic_linker="$host_os ld.so" -sys_lib_dlsearch_path_spec="/lib /usr/lib" -need_lib_prefix=unknown -hardcode_into_libs=no - -# when you set need_version to no, make sure it does not cause -set_version -# flags to be left without arguments -need_version=unknown - -case $host_os in -aix3*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' - shlibpath_var=LIBPATH - - # AIX 3 has no versioning support, so we append a major version to the name. - soname_spec='${libname}${release}${shared_ext}$major' - ;; - -aix[4-9]*) - version_type=linux - need_lib_prefix=no - need_version=no - hardcode_into_libs=yes - if test "$host_cpu" = ia64; then - # AIX 5 supports IA64 - library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - else - # With GCC up to 2.95.x, collect2 would create an import file - # for dependence libraries. The import file would start with - # the line `#! .'. This would cause the generated library to - # depend on `.', always an invalid library. This was fixed in - # development snapshots of GCC prior to 3.0. - case $host_os in - aix4 | aix4.[01] | aix4.[01].*) - if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' - echo ' yes ' - echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then - : - else - can_build_shared=no - fi - ;; - esac - # AIX (on Power*) has no versioning support, so currently we can not hardcode correct - # soname into executable. Probably we can add versioning support to - # collect2, so additional links can be useful in future. - if test "$aix_use_runtimelinking" = yes; then - # If using run time linking (on AIX 4.2 or later) use lib.so - # instead of lib.a to let people know that these are not - # typical AIX shared libraries. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - else - # We preserve .a as extension for shared libraries through AIX4.2 - # and later when we are not doing run time linking. - library_names_spec='${libname}${release}.a $libname.a' - soname_spec='${libname}${release}${shared_ext}$major' - fi - shlibpath_var=LIBPATH - fi - ;; - -amigaos*) - case $host_cpu in - powerpc) - # Since July 2007 AmigaOS4 officially supports .so libraries. - # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - ;; - m68k) - library_names_spec='$libname.ixlibrary $libname.a' - # Create ${libname}_ixlibrary.a entries in /sys/libs. - finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' - ;; - esac - ;; - -beos*) - library_names_spec='${libname}${shared_ext}' - dynamic_linker="$host_os ld.so" - shlibpath_var=LIBRARY_PATH - ;; - -bsdi[45]*) - version_type=linux - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" - sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" - # the default ld.so.conf also contains /usr/contrib/lib and - # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow - # libtool to hard-code these into programs - ;; - -cygwin* | mingw* | pw32* | cegcc*) - version_type=windows - shrext_cmds=".dll" - need_version=no - need_lib_prefix=no - - case $GCC,$host_os in - yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*) - library_names_spec='$libname.dll.a' - # DLL is installed to $(libdir)/../bin by postinstall_cmds - postinstall_cmds='base_file=`basename \${file}`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ - dldir=$destdir/`dirname \$dlpath`~ - test -d \$dldir || mkdir -p \$dldir~ - $install_prog $dir/$dlname \$dldir/$dlname~ - chmod a+x \$dldir/$dlname~ - if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then - eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; - fi' - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $RM \$dlpath' - shlibpath_overrides_runpath=yes - - case $host_os in - cygwin*) - # Cygwin DLLs use 'cyg' prefix rather than 'lib' - soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" - ;; - mingw* | cegcc*) - # MinGW DLLs use traditional 'lib' prefix - soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` - if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then - # It is most probably a Windows format PATH printed by - # mingw gcc, but we are running on Cygwin. Gcc prints its search - # path with ; separators, and with drive letters. We can handle the - # drive letters (cygwin fileutils understands them), so leave them, - # especially as we might pass files found there to a mingw objdump, - # which wouldn't understand a cygwinified path. Ahh. - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` - else - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - fi - ;; - pw32*) - # pw32 DLLs use 'pw' prefix rather than 'lib' - library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - ;; - esac - ;; - - *) - library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' - ;; - esac - dynamic_linker='Win32 ld.exe' - # FIXME: first we should search . and the directory the executable is in - shlibpath_var=PATH - ;; - -darwin* | rhapsody*) - dynamic_linker="$host_os dyld" - version_type=darwin - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' - soname_spec='${libname}${release}${major}$shared_ext' - shlibpath_overrides_runpath=yes - shlibpath_var=DYLD_LIBRARY_PATH - shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' - - sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" - sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' - ;; - -dgux*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -freebsd1*) - dynamic_linker=no - ;; - -freebsd* | dragonfly*) - # DragonFly does not have aout. When/if they implement a new - # versioning mechanism, adjust this. - if test -x /usr/bin/objformat; then - objformat=`/usr/bin/objformat` - else - case $host_os in - freebsd[123]*) objformat=aout ;; - *) objformat=elf ;; - esac - fi - version_type=freebsd-$objformat - case $version_type in - freebsd-elf*) - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - need_version=no - need_lib_prefix=no - ;; - freebsd-*) - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' - need_version=yes - ;; - esac - shlibpath_var=LD_LIBRARY_PATH - case $host_os in - freebsd2*) - shlibpath_overrides_runpath=yes - ;; - freebsd3.[01]* | freebsdelf3.[01]*) - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ - freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - *) # from 4.6 on, and DragonFly - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - esac - ;; - -gnu*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - hardcode_into_libs=yes - ;; - -hpux9* | hpux10* | hpux11*) - # Give a soname corresponding to the major version so that dld.sl refuses to - # link against other versions. - version_type=sunos - need_lib_prefix=no - need_version=no - case $host_cpu in - ia64*) - shrext_cmds='.so' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.so" - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - if test "X$HPUX_IA64_MODE" = X32; then - sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" - else - sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" - fi - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - hppa*64*) - shrext_cmds='.sl' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.sl" - shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - *) - shrext_cmds='.sl' - dynamic_linker="$host_os dld.sl" - shlibpath_var=SHLIB_PATH - shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - ;; - esac - # HP-UX runs *really* slowly unless shared libraries are mode 555. - postinstall_cmds='chmod 555 $lib' - ;; - -interix[3-9]*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - -irix5* | irix6* | nonstopux*) - case $host_os in - nonstopux*) version_type=nonstopux ;; - *) - if test "$lt_cv_prog_gnu_ld" = yes; then - version_type=linux - else - version_type=irix - fi ;; - esac - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' - case $host_os in - irix5* | nonstopux*) - libsuff= shlibsuff= - ;; - *) - case $LD in # libtool.m4 will add one of these switches to LD - *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") - libsuff= shlibsuff= libmagic=32-bit;; - *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") - libsuff=32 shlibsuff=N32 libmagic=N32;; - *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") - libsuff=64 shlibsuff=64 libmagic=64-bit;; - *) libsuff= shlibsuff= libmagic=never-match;; - esac - ;; - esac - shlibpath_var=LD_LIBRARY${shlibsuff}_PATH - shlibpath_overrides_runpath=no - sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" - sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" - hardcode_into_libs=yes - ;; - -# No shared lib support for Linux oldld, aout, or coff. -linux*oldld* | linux*aout* | linux*coff*) - dynamic_linker=no - ;; - -# This must be Linux ELF. -linux* | k*bsd*-gnu | kopensolaris*-gnu) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - # Some binutils ld are patched to set DT_RUNPATH - save_LDFLAGS=$LDFLAGS - save_libdir=$libdir - eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ - LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : - shlibpath_overrides_runpath=yes -fi -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - LDFLAGS=$save_LDFLAGS - libdir=$save_libdir - - # This implies no fast_install, which is unacceptable. - # Some rework will be needed to allow for fast_install - # before this can be enabled. - hardcode_into_libs=yes - - # Append ld.so.conf contents to the search path - if test -f /etc/ld.so.conf; then - lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` - sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" - fi - - # We used to test for /lib/ld.so.1 and disable shared libraries on - # powerpc, because MkLinux only supported shared libraries with the - # GNU dynamic linker. Since this was broken with cross compilers, - # most powerpc-linux boxes support dynamic linking these days and - # people can always --disable-shared, the test was removed, and we - # assume the GNU/Linux dynamic linker is in use. - dynamic_linker='GNU/Linux ld.so' - ;; - -netbsdelf*-gnu) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - dynamic_linker='NetBSD ld.elf_so' - ;; - -netbsd*) - version_type=sunos - need_lib_prefix=no - need_version=no - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - dynamic_linker='NetBSD (a.out) ld.so' - else - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='NetBSD ld.elf_so' - fi - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - -newsos6) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; - -*nto* | *qnx*) - version_type=qnx - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - dynamic_linker='ldqnx.so' - ;; - -openbsd*) - version_type=sunos - sys_lib_dlsearch_path_spec="/usr/lib" - need_lib_prefix=no - # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. - case $host_os in - openbsd3.3 | openbsd3.3.*) need_version=yes ;; - *) need_version=no ;; - esac - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - shlibpath_var=LD_LIBRARY_PATH - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - case $host_os in - openbsd2.[89] | openbsd2.[89].*) - shlibpath_overrides_runpath=no - ;; - *) - shlibpath_overrides_runpath=yes - ;; - esac - else - shlibpath_overrides_runpath=yes - fi - ;; - -os2*) - libname_spec='$name' - shrext_cmds=".dll" - need_lib_prefix=no - library_names_spec='$libname${shared_ext} $libname.a' - dynamic_linker='OS/2 ld.exe' - shlibpath_var=LIBPATH - ;; - -osf3* | osf4* | osf5*) - version_type=osf - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" - sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" - ;; - -rdos*) - dynamic_linker=no - ;; - -solaris*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - # ldd complains unless libraries are executable - postinstall_cmds='chmod +x $lib' - ;; - -sunos4*) - version_type=sunos - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - if test "$with_gnu_ld" = yes; then - need_lib_prefix=no - fi - need_version=yes - ;; - -sysv4 | sysv4.3*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - case $host_vendor in - sni) - shlibpath_overrides_runpath=no - need_lib_prefix=no - runpath_var=LD_RUN_PATH - ;; - siemens) - need_lib_prefix=no - ;; - motorola) - need_lib_prefix=no - need_version=no - shlibpath_overrides_runpath=no - sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' - ;; - esac - ;; - -sysv4*MP*) - if test -d /usr/nec ;then - version_type=linux - library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' - soname_spec='$libname${shared_ext}.$major' - shlibpath_var=LD_LIBRARY_PATH - fi - ;; - -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - version_type=freebsd-elf - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - if test "$with_gnu_ld" = yes; then - sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' - else - sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' - case $host_os in - sco3.2v5*) - sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" - ;; - esac - fi - sys_lib_dlsearch_path_spec='/usr/lib' - ;; - -tpf*) - # TPF is a cross-target only. Preferred cross-host = GNU/Linux. - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - -uts4*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -*) - dynamic_linker=no - ;; -esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 -$as_echo "$dynamic_linker" >&6; } -test "$dynamic_linker" = no && can_build_shared=no - -variables_saved_for_relink="PATH $shlibpath_var $runpath_var" -if test "$GCC" = yes; then - variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" -fi - -if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then - sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" -fi -if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then - sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" -fi - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 -$as_echo_n "checking how to hardcode library paths into programs... " >&6; } -hardcode_action= -if test -n "$hardcode_libdir_flag_spec" || - test -n "$runpath_var" || - test "X$hardcode_automatic" = "Xyes" ; then - - # We can hardcode non-existent directories. - if test "$hardcode_direct" != no && - # If the only mechanism to avoid hardcoding is shlibpath_var, we - # have to relink, otherwise we might link with an installed library - # when we should be linking with a yet-to-be-installed one - ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no && - test "$hardcode_minus_L" != no; then - # Linking always hardcodes the temporary library directory. - hardcode_action=relink - else - # We can link without hardcoding, and we can hardcode nonexisting dirs. - hardcode_action=immediate - fi -else - # We cannot hardcode anything, or else we can only hardcode existing - # directories. - hardcode_action=unsupported -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 -$as_echo "$hardcode_action" >&6; } - -if test "$hardcode_action" = relink || - test "$inherit_rpath" = yes; then - # Fast installation is not supported - enable_fast_install=no -elif test "$shlibpath_overrides_runpath" = yes || - test "$enable_shared" = no; then - # Fast installation is not necessary - enable_fast_install=needless -fi - - - - - - - if test "x$enable_dlopen" != xyes; then - enable_dlopen=unknown - enable_dlopen_self=unknown - enable_dlopen_self_static=unknown -else - lt_cv_dlopen=no - lt_cv_dlopen_libs= - - case $host_os in - beos*) - lt_cv_dlopen="load_add_on" - lt_cv_dlopen_libs= - lt_cv_dlopen_self=yes - ;; - - mingw* | pw32* | cegcc*) - lt_cv_dlopen="LoadLibrary" - lt_cv_dlopen_libs= - ;; - - cygwin*) - lt_cv_dlopen="dlopen" - lt_cv_dlopen_libs= - ;; - - darwin*) - # if libdl is installed we need to link against it - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 -$as_echo_n "checking for dlopen in -ldl... " >&6; } -if test "${ac_cv_lib_dl_dlopen+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldl $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dlopen (); -int -main () -{ -return dlopen (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_dl_dlopen=yes -else - ac_cv_lib_dl_dlopen=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 -$as_echo "$ac_cv_lib_dl_dlopen" >&6; } -if test "x$ac_cv_lib_dl_dlopen" = x""yes; then : - lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" -else - - lt_cv_dlopen="dyld" - lt_cv_dlopen_libs= - lt_cv_dlopen_self=yes - -fi - - ;; - - *) - ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" -if test "x$ac_cv_func_shl_load" = x""yes; then : - lt_cv_dlopen="shl_load" -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 -$as_echo_n "checking for shl_load in -ldld... " >&6; } -if test "${ac_cv_lib_dld_shl_load+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldld $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char shl_load (); -int -main () -{ -return shl_load (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_dld_shl_load=yes -else - ac_cv_lib_dld_shl_load=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 -$as_echo "$ac_cv_lib_dld_shl_load" >&6; } -if test "x$ac_cv_lib_dld_shl_load" = x""yes; then : - lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld" -else - ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" -if test "x$ac_cv_func_dlopen" = x""yes; then : - lt_cv_dlopen="dlopen" -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 -$as_echo_n "checking for dlopen in -ldl... " >&6; } -if test "${ac_cv_lib_dl_dlopen+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldl $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dlopen (); -int -main () -{ -return dlopen (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_dl_dlopen=yes -else - ac_cv_lib_dl_dlopen=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 -$as_echo "$ac_cv_lib_dl_dlopen" >&6; } -if test "x$ac_cv_lib_dl_dlopen" = x""yes; then : - lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 -$as_echo_n "checking for dlopen in -lsvld... " >&6; } -if test "${ac_cv_lib_svld_dlopen+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lsvld $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dlopen (); -int -main () -{ -return dlopen (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_svld_dlopen=yes -else - ac_cv_lib_svld_dlopen=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 -$as_echo "$ac_cv_lib_svld_dlopen" >&6; } -if test "x$ac_cv_lib_svld_dlopen" = x""yes; then : - lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 -$as_echo_n "checking for dld_link in -ldld... " >&6; } -if test "${ac_cv_lib_dld_dld_link+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldld $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dld_link (); -int -main () -{ -return dld_link (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_dld_dld_link=yes -else - ac_cv_lib_dld_dld_link=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 -$as_echo "$ac_cv_lib_dld_dld_link" >&6; } -if test "x$ac_cv_lib_dld_dld_link" = x""yes; then : - lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld" -fi - - -fi - - -fi - - -fi - - -fi - - -fi - - ;; - esac - - if test "x$lt_cv_dlopen" != xno; then - enable_dlopen=yes - else - enable_dlopen=no - fi - - case $lt_cv_dlopen in - dlopen) - save_CPPFLAGS="$CPPFLAGS" - test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" - - save_LDFLAGS="$LDFLAGS" - wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" - - save_LIBS="$LIBS" - LIBS="$lt_cv_dlopen_libs $LIBS" - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 -$as_echo_n "checking whether a program can dlopen itself... " >&6; } -if test "${lt_cv_dlopen_self+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - lt_cv_dlopen_self=cross -else - lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 - lt_status=$lt_dlunknown - cat > conftest.$ac_ext <<_LT_EOF -#line 10232 "configure" -#include "confdefs.h" - -#if HAVE_DLFCN_H -#include -#endif - -#include - -#ifdef RTLD_GLOBAL -# define LT_DLGLOBAL RTLD_GLOBAL -#else -# ifdef DL_GLOBAL -# define LT_DLGLOBAL DL_GLOBAL -# else -# define LT_DLGLOBAL 0 -# endif -#endif - -/* We may have to define LT_DLLAZY_OR_NOW in the command line if we - find out it does not work in some platform. */ -#ifndef LT_DLLAZY_OR_NOW -# ifdef RTLD_LAZY -# define LT_DLLAZY_OR_NOW RTLD_LAZY -# else -# ifdef DL_LAZY -# define LT_DLLAZY_OR_NOW DL_LAZY -# else -# ifdef RTLD_NOW -# define LT_DLLAZY_OR_NOW RTLD_NOW -# else -# ifdef DL_NOW -# define LT_DLLAZY_OR_NOW DL_NOW -# else -# define LT_DLLAZY_OR_NOW 0 -# endif -# endif -# endif -# endif -#endif - -void fnord() { int i=42;} -int main () -{ - void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); - int status = $lt_dlunknown; - - if (self) - { - if (dlsym (self,"fnord")) status = $lt_dlno_uscore; - else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; - /* dlclose (self); */ - } - else - puts (dlerror ()); - - return status; -} -_LT_EOF - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 - (eval $ac_link) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then - (./conftest; exit; ) >&5 2>/dev/null - lt_status=$? - case x$lt_status in - x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; - x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; - x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; - esac - else : - # compilation failed - lt_cv_dlopen_self=no - fi -fi -rm -fr conftest* - - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 -$as_echo "$lt_cv_dlopen_self" >&6; } - - if test "x$lt_cv_dlopen_self" = xyes; then - wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 -$as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } -if test "${lt_cv_dlopen_self_static+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - lt_cv_dlopen_self_static=cross -else - lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 - lt_status=$lt_dlunknown - cat > conftest.$ac_ext <<_LT_EOF -#line 10328 "configure" -#include "confdefs.h" - -#if HAVE_DLFCN_H -#include -#endif - -#include - -#ifdef RTLD_GLOBAL -# define LT_DLGLOBAL RTLD_GLOBAL -#else -# ifdef DL_GLOBAL -# define LT_DLGLOBAL DL_GLOBAL -# else -# define LT_DLGLOBAL 0 -# endif -#endif - -/* We may have to define LT_DLLAZY_OR_NOW in the command line if we - find out it does not work in some platform. */ -#ifndef LT_DLLAZY_OR_NOW -# ifdef RTLD_LAZY -# define LT_DLLAZY_OR_NOW RTLD_LAZY -# else -# ifdef DL_LAZY -# define LT_DLLAZY_OR_NOW DL_LAZY -# else -# ifdef RTLD_NOW -# define LT_DLLAZY_OR_NOW RTLD_NOW -# else -# ifdef DL_NOW -# define LT_DLLAZY_OR_NOW DL_NOW -# else -# define LT_DLLAZY_OR_NOW 0 -# endif -# endif -# endif -# endif -#endif - -void fnord() { int i=42;} -int main () -{ - void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); - int status = $lt_dlunknown; - - if (self) - { - if (dlsym (self,"fnord")) status = $lt_dlno_uscore; - else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; - /* dlclose (self); */ - } - else - puts (dlerror ()); - - return status; -} -_LT_EOF - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 - (eval $ac_link) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then - (./conftest; exit; ) >&5 2>/dev/null - lt_status=$? - case x$lt_status in - x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; - x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; - x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; - esac - else : - # compilation failed - lt_cv_dlopen_self_static=no - fi -fi -rm -fr conftest* - - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 -$as_echo "$lt_cv_dlopen_self_static" >&6; } - fi - - CPPFLAGS="$save_CPPFLAGS" - LDFLAGS="$save_LDFLAGS" - LIBS="$save_LIBS" - ;; - esac - - case $lt_cv_dlopen_self in - yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; - *) enable_dlopen_self=unknown ;; - esac - - case $lt_cv_dlopen_self_static in - yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; - *) enable_dlopen_self_static=unknown ;; - esac -fi - - - - - - - - - - - - - - - - - -striplib= -old_striplib= -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 -$as_echo_n "checking whether stripping libraries is possible... " >&6; } -if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then - test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" - test -z "$striplib" && striplib="$STRIP --strip-unneeded" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -else -# FIXME - insert some real tests, host_os isn't really good enough - case $host_os in - darwin*) - if test -n "$STRIP" ; then - striplib="$STRIP -x" - old_striplib="$STRIP -S" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - fi - ;; - *) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - ;; - esac -fi - - - - - - - - - - - - - # Report which library types will actually be built - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 -$as_echo_n "checking if libtool supports shared libraries... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 -$as_echo "$can_build_shared" >&6; } - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 -$as_echo_n "checking whether to build shared libraries... " >&6; } - test "$can_build_shared" = "no" && enable_shared=no - - # On AIX, shared libraries and static libraries use the same namespace, and - # are all built from PIC. - case $host_os in - aix3*) - test "$enable_shared" = yes && enable_static=no - if test -n "$RANLIB"; then - archive_cmds="$archive_cmds~\$RANLIB \$lib" - postinstall_cmds='$RANLIB $lib' - fi - ;; - - aix[4-9]*) - if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then - test "$enable_shared" = yes && enable_static=no - fi - ;; - esac - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 -$as_echo "$enable_shared" >&6; } - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 -$as_echo_n "checking whether to build static libraries... " >&6; } - # Make sure either enable_shared or enable_static is yes. - test "$enable_shared" = yes || enable_static=yes - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 -$as_echo "$enable_static" >&6; } - - - - -fi -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -CC="$lt_save_CC" - - - - - - - - - - - - - - ac_config_commands="$ac_config_commands libtool" - - - - -# Only expand once: - - - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. -set dummy ${ac_tool_prefix}gcc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_CC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_CC="${ac_tool_prefix}gcc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_CC"; then - ac_ct_CC=$CC - # Extract the first word of "gcc", so it can be a program name with args. -set dummy gcc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_CC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_CC="gcc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -$as_echo "$ac_ct_CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_CC" = x; then - CC="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - CC=$ac_ct_CC - fi -else - CC="$ac_cv_prog_CC" -fi - -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. -set dummy ${ac_tool_prefix}cc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_CC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_CC="${ac_tool_prefix}cc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - fi -fi -if test -z "$CC"; then - # Extract the first word of "cc", so it can be a program name with args. -set dummy cc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_CC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else - ac_prog_rejected=no -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then - ac_prog_rejected=yes - continue - fi - ac_cv_prog_CC="cc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -if test $ac_prog_rejected = yes; then - # We found a bogon in the path, so make sure we never use it. - set dummy $ac_cv_prog_CC - shift - if test $# != 0; then - # We chose a different compiler from the bogus one. - # However, it has the same basename, so the bogon will be chosen - # first if we set CC to just the basename; use the full file name. - shift - ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" - fi -fi -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - for ac_prog in cl.exe - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_CC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_CC="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$CC" && break - done -fi -if test -z "$CC"; then - ac_ct_CC=$CC - for ac_prog in cl.exe -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_CC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_CC="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -$as_echo "$ac_ct_CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$ac_ct_CC" && break -done - - if test "x$ac_ct_CC" = x; then - CC="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - CC=$ac_ct_CC - fi -fi - -fi - - -test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error "no acceptable C compiler found in \$PATH -See \`config.log' for more details." "$LINENO" 5; } - -# Provide some information about the compiler. -$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 -set X $ac_compile -ac_compiler=$2 -for ac_option in --version -v -V -qversion; do - { { ac_try="$ac_compiler $ac_option >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compiler $ac_option >&5") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - sed '10a\ -... rest of stderr output deleted ... - 10q' conftest.err >conftest.er1 - cat conftest.er1 >&5 - fi - rm -f conftest.er1 conftest.err - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } -done - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 -$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } -if test "${ac_cv_c_compiler_gnu+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ -#ifndef __GNUC__ - choke me -#endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_compiler_gnu=yes -else - ac_compiler_gnu=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -ac_cv_c_compiler_gnu=$ac_compiler_gnu - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 -$as_echo "$ac_cv_c_compiler_gnu" >&6; } -if test $ac_compiler_gnu = yes; then - GCC=yes -else - GCC= -fi -ac_test_CFLAGS=${CFLAGS+set} -ac_save_CFLAGS=$CFLAGS -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 -$as_echo_n "checking whether $CC accepts -g... " >&6; } -if test "${ac_cv_prog_cc_g+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_save_c_werror_flag=$ac_c_werror_flag - ac_c_werror_flag=yes - ac_cv_prog_cc_g=no - CFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_g=yes -else - CFLAGS="" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - -else - ac_c_werror_flag=$ac_save_c_werror_flag - CFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_g=yes -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_c_werror_flag=$ac_save_c_werror_flag -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 -$as_echo "$ac_cv_prog_cc_g" >&6; } -if test "$ac_test_CFLAGS" = set; then - CFLAGS=$ac_save_CFLAGS -elif test $ac_cv_prog_cc_g = yes; then - if test "$GCC" = yes; then - CFLAGS="-g -O2" - else - CFLAGS="-g" - fi -else - if test "$GCC" = yes; then - CFLAGS="-O2" - else - CFLAGS= - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 -$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } -if test "${ac_cv_prog_cc_c89+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_cv_prog_cc_c89=no -ac_save_CC=$CC -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#include -#include -/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ -struct buf { int x; }; -FILE * (*rcsopen) (struct buf *, struct stat *, int); -static char *e (p, i) - char **p; - int i; -{ - return p[i]; -} -static char *f (char * (*g) (char **, int), char **p, ...) -{ - char *s; - va_list v; - va_start (v,p); - s = g (p, va_arg (v,int)); - va_end (v); - return s; -} - -/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has - function prototypes and stuff, but not '\xHH' hex character constants. - These don't provoke an error unfortunately, instead are silently treated - as 'x'. The following induces an error, until -std is added to get - proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an - array size at least. It's necessary to write '\x00'==0 to get something - that's true only with -std. */ -int osf4_cc_array ['\x00' == 0 ? 1 : -1]; - -/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters - inside strings and character constants. */ -#define FOO(x) 'x' -int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; - -int test (int i, double x); -struct s1 {int (*f) (int a);}; -struct s2 {int (*f) (double a);}; -int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); -int argc; -char **argv; -int -main () -{ -return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; - ; - return 0; -} -_ACEOF -for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ - -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" -do - CC="$ac_save_CC $ac_arg" - if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_c89=$ac_arg -fi -rm -f core conftest.err conftest.$ac_objext - test "x$ac_cv_prog_cc_c89" != "xno" && break -done -rm -f conftest.$ac_ext -CC=$ac_save_CC - -fi -# AC_CACHE_VAL -case "x$ac_cv_prog_cc_c89" in - x) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -$as_echo "none needed" >&6; } ;; - xno) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 -$as_echo "unsupported" >&6; } ;; - *) - CC="$CC $ac_cv_prog_cc_c89" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 -$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; -esac -if test "x$ac_cv_prog_cc_c89" != xno; then : - -fi - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -depcc="$CC" am_compiler_list= - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 -$as_echo_n "checking dependency style of $depcc... " >&6; } -if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then - # We make a subdir and do the tests there. Otherwise we can end up - # making bogus files that we don't know about and never remove. For - # instance it was reported that on HP-UX the gcc test will end up - # making a dummy file named `D' -- because `-MD' means `put the output - # in D'. - mkdir conftest.dir - # Copy depcomp to subdir because otherwise we won't find it if we're - # using a relative directory. - cp "$am_depcomp" conftest.dir - cd conftest.dir - # We will build objects and dependencies in a subdirectory because - # it helps to detect inapplicable dependency modes. For instance - # both Tru64's cc and ICC support -MD to output dependencies as a - # side effect of compilation, but ICC will put the dependencies in - # the current directory while Tru64 will put them in the object - # directory. - mkdir sub - - am_cv_CC_dependencies_compiler_type=none - if test "$am_compiler_list" = ""; then - am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` - fi - am__universal=false - case " $depcc " in #( - *\ -arch\ *\ -arch\ *) am__universal=true ;; - esac - - for depmode in $am_compiler_list; do - # Setup a source with many dependencies, because some compilers - # like to wrap large dependency lists on column 80 (with \), and - # we should not choose a depcomp mode which is confused by this. - # - # We need to recreate these files for each test, as the compiler may - # overwrite some of them when testing with obscure command lines. - # This happens at least with the AIX C compiler. - : > sub/conftest.c - for i in 1 2 3 4 5 6; do - echo '#include "conftst'$i'.h"' >> sub/conftest.c - # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with - # Solaris 8's {/usr,}/bin/sh. - touch sub/conftst$i.h - done - echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf - - # We check with `-c' and `-o' for the sake of the "dashmstdout" - # mode. It turns out that the SunPro C++ compiler does not properly - # handle `-M -o', and we need to detect this. Also, some Intel - # versions had trouble with output in subdirs - am__obj=sub/conftest.${OBJEXT-o} - am__minus_obj="-o $am__obj" - case $depmode in - gcc) - # This depmode causes a compiler race in universal mode. - test "$am__universal" = false || continue - ;; - nosideeffect) - # after this tag, mechanisms are not by side-effect, so they'll - # only be used when explicitly requested - if test "x$enable_dependency_tracking" = xyes; then - continue - else - break - fi - ;; - msvisualcpp | msvcmsys) - # This compiler won't grok `-c -o', but also, the minuso test has - # not run yet. These depmodes are late enough in the game, and - # so weak that their functioning should not be impacted. - am__obj=conftest.${OBJEXT-o} - am__minus_obj= - ;; - none) break ;; - esac - if depmode=$depmode \ - source=sub/conftest.c object=$am__obj \ - depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ - $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ - >/dev/null 2>conftest.err && - grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && - grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && - grep $am__obj sub/conftest.Po > /dev/null 2>&1 && - ${MAKE-make} -s -f confmf > /dev/null 2>&1; then - # icc doesn't choke on unknown options, it will just issue warnings - # or remarks (even with -Werror). So we grep stderr for any message - # that says an option was ignored or not supported. - # When given -MP, icc 7.0 and 7.1 complain thusly: - # icc: Command line warning: ignoring option '-M'; no argument required - # The diagnosis changed in icc 8.0: - # icc: Command line remark: option '-MP' not supported - if (grep 'ignoring option' conftest.err || - grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else - am_cv_CC_dependencies_compiler_type=$depmode - break - fi - fi - done - - cd .. - rm -rf conftest.dir -else - am_cv_CC_dependencies_compiler_type=none -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 -$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } -CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type - - if - test "x$enable_dependency_tracking" != xno \ - && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then - am__fastdepCC_TRUE= - am__fastdepCC_FALSE='#' -else - am__fastdepCC_TRUE='#' - am__fastdepCC_FALSE= -fi - - - -# Extract the first word of "ar", so it can be a program name with args. -set dummy ar; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_AR+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $AR in - [\\/]* | ?:[\\/]*) - ac_cv_path_AR="$AR" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_AR="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -AR=$ac_cv_path_AR -if test -n "$AR"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 -$as_echo "$AR" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to include shadow password support" >&5 -$as_echo_n "checking whether to include shadow password support... " >&6; } -# Check whether --enable-shadow was given. -if test "${enable_shadow+set}" = set; then : - enableval=$enable_shadow; - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - $as_echo "#define HAVE_SHADOW_PASSWORDS 1" >>confdefs.h - - shadow_passwords=yes - -else - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - shadow_passwords=no - - -fi - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for socket in -lsocket" >&5 -$as_echo_n "checking for socket in -lsocket... " >&6; } -if test "${ac_cv_lib_socket_socket+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lsocket $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char socket (); -int -main () -{ -return socket (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_socket_socket=yes -else - ac_cv_lib_socket_socket=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_socket" >&5 -$as_echo "$ac_cv_lib_socket_socket" >&6; } -if test "x$ac_cv_lib_socket_socket" = x""yes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_LIBSOCKET 1 -_ACEOF - - LIBS="-lsocket $LIBS" - -fi - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyaddr in -lnsl" >&5 -$as_echo_n "checking for gethostbyaddr in -lnsl... " >&6; } -if test "${ac_cv_lib_nsl_gethostbyaddr+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lnsl $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char gethostbyaddr (); -int -main () -{ -return gethostbyaddr (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_nsl_gethostbyaddr=yes -else - ac_cv_lib_nsl_gethostbyaddr=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nsl_gethostbyaddr" >&5 -$as_echo "$ac_cv_lib_nsl_gethostbyaddr" >&6; } -if test "x$ac_cv_lib_nsl_gethostbyaddr" = x""yes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_LIBNSL 1 -_ACEOF - - LIBS="-lnsl $LIBS" - -fi - - -gethostbyaddrrstyle="" -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking gethostbyaddr_r() syntax" >&5 -$as_echo_n "checking gethostbyaddr_r() syntax... " >&6; } -case "$host" in -*-freebsd*) - -$as_echo "#define GETHOSTBYADDR_R /**/" >>confdefs.h - - -$as_echo "#define GETHOSTBYADDRRSTYLE_BSD /**/" >>confdefs.h - - gethostbyaddrrstyle=BSD - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: FreeBSD overridden to BSD-style" >&5 -$as_echo "$as_me: WARNING: FreeBSD overridden to BSD-style" >&2;} - ;; -esac -if test "x$gethostbyaddrrstyle" = "x"; then - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -#include -#include - -int -main () -{ - gethostbyaddr_r(NULL, 0, 0, NULL, NULL, 0, NULL, NULL) - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - - $as_echo "#define GETHOSTBYADDR_R 1" >>confdefs.h - - -$as_echo "#define GETHOSTBYADDRRSTYLE_GNU /**/" >>confdefs.h - - gethostbyaddrrstyle=GNU - -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -if test "x$gethostbyaddrrstyle" = "x"; then - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -#include -#include - -int -main () -{ - gethostbyaddr_r(NULL, 0, 0, NULL, NULL, 0, NULL) - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - - $as_echo "#define GETHOSTBYADDR_R 1" >>confdefs.h - - -$as_echo "#define GETHOSTBYADDRRSTYLE_SYSV /**/" >>confdefs.h - - gethostbyaddrrstyle=SYSV - -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -if test "x$gethostbyaddrrstyle" = "x"; then - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -#include -#include - -int -main () -{ - gethostbyaddr(NULL, 0, 0) - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - - $as_echo "#define GETHOSTBYADDR_R 1" >>confdefs.h - - $as_echo "#define GETHOSTBYADDRRSTYLE_BSD 1" >>confdefs.h - - gethostbyaddrrstyle=BSD - -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi - -if test "x$gethostbyaddrrstyle" = "x"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: none! It must not exist, here." >&5 -$as_echo "none! It must not exist, here." >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${gethostbyaddrrstyle}-style" >&5 -$as_echo "${gethostbyaddrrstyle}-style" >&6; } -fi - -if test "x$gethostbyaddrrstyle" = "xBSD"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: ****** BSD-style gethostbyaddr might NOT be thread-safe! ****** " >&5 -$as_echo "$as_me: WARNING: ****** BSD-style gethostbyaddr might NOT be thread-safe! ****** " >&2;} -fi - -gethostbynamerstyle="" -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking gethostbyname_r() syntax" >&5 -$as_echo_n "checking gethostbyname_r() syntax... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -#include -#include - -int -main () -{ - gethostbyname_r(NULL, NULL, NULL, 0, NULL, NULL) - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - - -$as_echo "#define GETHOSTBYNAME_R /**/" >>confdefs.h - - -$as_echo "#define GETHOSTBYNAMERSTYLE_GNU /**/" >>confdefs.h - - gethostbynamerstyle=GNU - -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -if test "x$gethostbynamerstyle" = "x"; then - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -#include -#include - -int -main () -{ - gethostbyname_r(NULL, NULL, NULL, 0, NULL) - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - - $as_echo "#define GETHOSTBYNAME_R 1" >>confdefs.h - - -$as_echo "#define GETHOSTBYNAMERSTYLE_SYSV /**/" >>confdefs.h - - gethostbynamerstyle=SYSV - -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -if test "x$gethostbynamerstyle" = "x"; then - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -#include -#include - -int -main () -{ - gethostbyname(NULL) - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - - $as_echo "#define GETHOSTBYNAME_R 1" >>confdefs.h - - -$as_echo "#define GETHOSTBYNAMERSTYLE_BSD /**/" >>confdefs.h - - gethostbynamerstyle=BSD - -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi - -if test "x$gethostbynamerstyle" = "x"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: none! It must not exist, here." >&5 -$as_echo "none! It must not exist, here." >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${gethostbynamerstyle}-style" >&5 -$as_echo "${gethostbynamerstyle}-style" >&6; } -fi - -if test "x$gethostbynamerstyle" = "xBSD"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: ****** BSD-style gethostbyname might NOT be thread-safe! ****** " >&5 -$as_echo "$as_me: WARNING: ****** BSD-style gethostbyname might NOT be thread-safe! ****** " >&2;} -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for crypt in -lcrypt" >&5 -$as_echo_n "checking for crypt in -lcrypt... " >&6; } -if test "${ac_cv_lib_crypt_crypt+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lcrypt $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char crypt (); -int -main () -{ -return crypt (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_crypt_crypt=yes -else - ac_cv_lib_crypt_crypt=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_crypt_crypt" >&5 -$as_echo "$ac_cv_lib_crypt_crypt" >&6; } -if test "x$ac_cv_lib_crypt_crypt" = x""yes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_LIBCRYPT 1 -_ACEOF - - LIBS="-lcrypt $LIBS" - -fi - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5 -$as_echo_n "checking whether byte ordering is bigendian... " >&6; } -if test "${ac_cv_c_bigendian+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_cv_c_bigendian=unknown - # See if we're dealing with a universal compiler. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifndef __APPLE_CC__ - not a universal capable compiler - #endif - typedef int dummy; - -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - - # Check for potential -arch flags. It is not universal unless - # there are at least two -arch flags with different values. - ac_arch= - ac_prev= - for ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do - if test -n "$ac_prev"; then - case $ac_word in - i?86 | x86_64 | ppc | ppc64) - if test -z "$ac_arch" || test "$ac_arch" = "$ac_word"; then - ac_arch=$ac_word - else - ac_cv_c_bigendian=universal - break - fi - ;; - esac - ac_prev= - elif test "x$ac_word" = "x-arch"; then - ac_prev=arch - fi - done -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - if test $ac_cv_c_bigendian = unknown; then - # See if sys/param.h defines the BYTE_ORDER macro. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - #include - -int -main () -{ -#if ! (defined BYTE_ORDER && defined BIG_ENDIAN \ - && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \ - && LITTLE_ENDIAN) - bogus endian macros - #endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - # It does; now see whether it defined to BIG_ENDIAN or not. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - #include - -int -main () -{ -#if BYTE_ORDER != BIG_ENDIAN - not big endian - #endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_c_bigendian=yes -else - ac_cv_c_bigendian=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - fi - if test $ac_cv_c_bigendian = unknown; then - # See if defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris). - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -int -main () -{ -#if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN) - bogus endian macros - #endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - # It does; now see whether it defined to _BIG_ENDIAN or not. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -int -main () -{ -#ifndef _BIG_ENDIAN - not big endian - #endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_c_bigendian=yes -else - ac_cv_c_bigendian=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - fi - if test $ac_cv_c_bigendian = unknown; then - # Compile a test program. - if test "$cross_compiling" = yes; then : - # Try to guess by grepping values from an object file. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -short int ascii_mm[] = - { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; - short int ascii_ii[] = - { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; - int use_ascii (int i) { - return ascii_mm[i] + ascii_ii[i]; - } - short int ebcdic_ii[] = - { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; - short int ebcdic_mm[] = - { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; - int use_ebcdic (int i) { - return ebcdic_mm[i] + ebcdic_ii[i]; - } - extern int foo; - -int -main () -{ -return use_ascii (foo) == use_ebcdic (foo); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then - ac_cv_c_bigendian=yes - fi - if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then - if test "$ac_cv_c_bigendian" = unknown; then - ac_cv_c_bigendian=no - else - # finding both strings is unlikely to happen, but who knows? - ac_cv_c_bigendian=unknown - fi - fi -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ - - /* Are we little or big endian? From Harbison&Steele. */ - union - { - long int l; - char c[sizeof (long int)]; - } u; - u.l = 1; - return u.c[sizeof (long int) - 1] == 1; - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - ac_cv_c_bigendian=no -else - ac_cv_c_bigendian=yes -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5 -$as_echo "$ac_cv_c_bigendian" >&6; } - case $ac_cv_c_bigendian in #( - yes) - $as_echo "#define WORDS_BIGENDIAN 1" >>confdefs.h -;; #( - no) - ;; #( - universal) - -$as_echo "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h - - ;; #( - *) - as_fn_error "unknown endianness - presetting ac_cv_c_bigendian=no (or yes) will help" "$LINENO" 5 ;; - esac - -if test $ac_cv_c_bigendian = yes; then - $as_echo "#define BIG_ENDIAN 1" >>confdefs.h - -else - $as_echo "#define LITTLE_ENDIAN 1" >>confdefs.h - -fi - -ac_header_dirent=no -for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h; do - as_ac_Header=`$as_echo "ac_cv_header_dirent_$ac_hdr" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_hdr that defines DIR" >&5 -$as_echo_n "checking for $ac_hdr that defines DIR... " >&6; } -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include <$ac_hdr> - -int -main () -{ -if ((DIR *) 0) -return 0; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - eval "$as_ac_Header=yes" -else - eval "$as_ac_Header=no" -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -eval ac_res=\$$as_ac_Header - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -eval as_val=\$$as_ac_Header - if test "x$as_val" = x""yes; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_hdr" | $as_tr_cpp` 1 -_ACEOF - -ac_header_dirent=$ac_hdr; break -fi - -done -# Two versions of opendir et al. are in -ldir and -lx on SCO Xenix. -if test $ac_header_dirent = dirent.h; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5 -$as_echo_n "checking for library containing opendir... " >&6; } -if test "${ac_cv_search_opendir+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_func_search_save_LIBS=$LIBS -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char opendir (); -int -main () -{ -return opendir (); - ; - return 0; -} -_ACEOF -for ac_lib in '' dir; do - if test -z "$ac_lib"; then - ac_res="none required" - else - ac_res=-l$ac_lib - LIBS="-l$ac_lib $ac_func_search_save_LIBS" - fi - if ac_fn_c_try_link "$LINENO"; then : - ac_cv_search_opendir=$ac_res -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext - if test "${ac_cv_search_opendir+set}" = set; then : - break -fi -done -if test "${ac_cv_search_opendir+set}" = set; then : - -else - ac_cv_search_opendir=no -fi -rm conftest.$ac_ext -LIBS=$ac_func_search_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5 -$as_echo "$ac_cv_search_opendir" >&6; } -ac_res=$ac_cv_search_opendir -if test "$ac_res" != no; then : - test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" - -fi - -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5 -$as_echo_n "checking for library containing opendir... " >&6; } -if test "${ac_cv_search_opendir+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_func_search_save_LIBS=$LIBS -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char opendir (); -int -main () -{ -return opendir (); - ; - return 0; -} -_ACEOF -for ac_lib in '' x; do - if test -z "$ac_lib"; then - ac_res="none required" - else - ac_res=-l$ac_lib - LIBS="-l$ac_lib $ac_func_search_save_LIBS" - fi - if ac_fn_c_try_link "$LINENO"; then : - ac_cv_search_opendir=$ac_res -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext - if test "${ac_cv_search_opendir+set}" = set; then : - break -fi -done -if test "${ac_cv_search_opendir+set}" = set; then : - -else - ac_cv_search_opendir=no -fi -rm conftest.$ac_ext -LIBS=$ac_func_search_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5 -$as_echo "$ac_cv_search_opendir" >&6; } -ac_res=$ac_cv_search_opendir -if test "$ac_res" != no; then : - test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" - -fi - -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 -$as_echo_n "checking for ANSI C header files... " >&6; } -if test "${ac_cv_header_stdc+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#include -#include - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_header_stdc=yes -else - ac_cv_header_stdc=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - -if test $ac_cv_header_stdc = yes; then - # SunOS 4.x string.h does not declare mem*, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "memchr" >/dev/null 2>&1; then : - -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "free" >/dev/null 2>&1; then : - -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. - if test "$cross_compiling" = yes; then : - : -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#if ((' ' & 0x0FF) == 0x020) -# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') -# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) -#else -# define ISLOWER(c) \ - (('a' <= (c) && (c) <= 'i') \ - || ('j' <= (c) && (c) <= 'r') \ - || ('s' <= (c) && (c) <= 'z')) -# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) -#endif - -#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) -int -main () -{ - int i; - for (i = 0; i < 256; i++) - if (XOR (islower (i), ISLOWER (i)) - || toupper (i) != TOUPPER (i)) - return 2; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - -else - ac_cv_header_stdc=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - -fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 -$as_echo "$ac_cv_header_stdc" >&6; } -if test $ac_cv_header_stdc = yes; then - -$as_echo "#define STDC_HEADERS 1" >>confdefs.h - -fi - -for ac_header in crypt.h signal.h sys/signal.h sys/stat.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" -eval as_val=\$$as_ac_Header - if test "x$as_val" = x""yes; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - -fi - -done - -for ac_header in fcntl.h sys/fcntl.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" -eval as_val=\$$as_ac_Header - if test "x$as_val" = x""yes; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - -fi - -done - -for ac_header in sys/utsname.h getopt.h unistd.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" -eval as_val=\$$as_ac_Header - if test "x$as_val" = x""yes; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - -fi - -done - -for ac_header in sys/file.h termios.h sys/ioctl.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" -eval as_val=\$$as_ac_Header - if test "x$as_val" = x""yes; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - -fi - -done - -for ac_header in netdb.h syslog.h pwd.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" -eval as_val=\$$as_ac_Header - if test "x$as_val" = x""yes; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - -fi - -done - -for ac_header in sys/socket.h netinet/in.h arpa/inet.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" -eval as_val=\$$as_ac_Header - if test "x$as_val" = x""yes; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - -fi - -done - -if test "$shadow_passwords" = "yes" -then - ac_fn_c_check_header_mongrel "$LINENO" "shadow.h" "ac_cv_header_shadow_h" "$ac_includes_default" -if test "x$ac_cv_header_shadow_h" = x""yes; then : - -fi - - -fi - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5 -$as_echo_n "checking for an ANSI C-conforming const... " >&6; } -if test "${ac_cv_c_const+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ -/* FIXME: Include the comments suggested by Paul. */ -#ifndef __cplusplus - /* Ultrix mips cc rejects this. */ - typedef int charset[2]; - const charset cs; - /* SunOS 4.1.1 cc rejects this. */ - char const *const *pcpcc; - char **ppc; - /* NEC SVR4.0.2 mips cc rejects this. */ - struct point {int x, y;}; - static struct point const zero = {0,0}; - /* AIX XL C 1.02.0.0 rejects this. - It does not let you subtract one const X* pointer from another in - an arm of an if-expression whose if-part is not a constant - expression */ - const char *g = "string"; - pcpcc = &g + (g ? g-g : 0); - /* HPUX 7.0 cc rejects these. */ - ++pcpcc; - ppc = (char**) pcpcc; - pcpcc = (char const *const *) ppc; - { /* SCO 3.2v4 cc rejects this. */ - char *t; - char const *s = 0 ? (char *) 0 : (char const *) 0; - - *t++ = 0; - if (s) return 0; - } - { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ - int x[] = {25, 17}; - const int *foo = &x[0]; - ++foo; - } - { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ - typedef const int *iptr; - iptr p = 0; - ++p; - } - { /* AIX XL C 1.02.0.0 rejects this saying - "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ - struct s { int j; const int *ap[3]; }; - struct s *b; b->j = 5; - } - { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ - const int foo = 10; - if (!foo) return 0; - } - return !cs[0] && !zero.x; -#endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_c_const=yes -else - ac_cv_c_const=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5 -$as_echo "$ac_cv_c_const" >&6; } -if test $ac_cv_c_const = no; then - -$as_echo "#define const /**/" >>confdefs.h - -fi - -ac_fn_c_check_type "$LINENO" "off_t" "ac_cv_type_off_t" "$ac_includes_default" -if test "x$ac_cv_type_off_t" = x""yes; then : - -else - -cat >>confdefs.h <<_ACEOF -#define off_t long int -_ACEOF - -fi - -ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" -if test "x$ac_cv_type_size_t" = x""yes; then : - -else - -cat >>confdefs.h <<_ACEOF -#define size_t unsigned int -_ACEOF - -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether time.h and sys/time.h may both be included" >&5 -$as_echo_n "checking whether time.h and sys/time.h may both be included... " >&6; } -if test "${ac_cv_header_time+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#include - -int -main () -{ -if ((struct tm *) 0) -return 0; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_header_time=yes -else - ac_cv_header_time=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_time" >&5 -$as_echo "$ac_cv_header_time" >&6; } -if test $ac_cv_header_time = yes; then - -$as_echo "#define TIME_WITH_SYS_TIME 1" >>confdefs.h - -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether struct tm is in sys/time.h or time.h" >&5 -$as_echo_n "checking whether struct tm is in sys/time.h or time.h... " >&6; } -if test "${ac_cv_struct_tm+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include - -int -main () -{ -struct tm tm; - int *p = &tm.tm_sec; - return !p; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_struct_tm=time.h -else - ac_cv_struct_tm=sys/time.h -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_struct_tm" >&5 -$as_echo "$ac_cv_struct_tm" >&6; } -if test $ac_cv_struct_tm = sys/time.h; then - -$as_echo "#define TM_IN_SYS_TIME 1" >>confdefs.h - -fi - - -if test $ac_cv_c_compiler_gnu = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC needs -traditional" >&5 -$as_echo_n "checking whether $CC needs -traditional... " >&6; } -if test "${ac_cv_prog_gcc_traditional+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_pattern="Autoconf.*'x'" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -Autoconf TIOCGETP -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "$ac_pattern" >/dev/null 2>&1; then : - ac_cv_prog_gcc_traditional=yes -else - ac_cv_prog_gcc_traditional=no -fi -rm -f conftest* - - - if test $ac_cv_prog_gcc_traditional = no; then - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -Autoconf TCGETA -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "$ac_pattern" >/dev/null 2>&1; then : - ac_cv_prog_gcc_traditional=yes -fi -rm -f conftest* - - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_gcc_traditional" >&5 -$as_echo "$ac_cv_prog_gcc_traditional" >&6; } - if test $ac_cv_prog_gcc_traditional = yes; then - CC="$CC -traditional" - fi -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for working memcmp" >&5 -$as_echo_n "checking for working memcmp... " >&6; } -if test "${ac_cv_func_memcmp_working+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - ac_cv_func_memcmp_working=no -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ - - /* Some versions of memcmp are not 8-bit clean. */ - char c0 = '\100', c1 = '\200', c2 = '\201'; - if (memcmp(&c0, &c2, 1) >= 0 || memcmp(&c1, &c2, 1) >= 0) - return 1; - - /* The Next x86 OpenStep bug shows up only when comparing 16 bytes - or more and with at least one buffer not starting on a 4-byte boundary. - William Lewis provided this test program. */ - { - char foo[21]; - char bar[21]; - int i; - for (i = 0; i < 4; i++) - { - char *a = foo + i; - char *b = bar + i; - strcpy (a, "--------01111111"); - strcpy (b, "--------10000000"); - if (memcmp (a, b, 16) >= 0) - return 1; - } - return 0; - } - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - ac_cv_func_memcmp_working=yes -else - ac_cv_func_memcmp_working=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_memcmp_working" >&5 -$as_echo "$ac_cv_func_memcmp_working" >&6; } -test $ac_cv_func_memcmp_working = no && case " $LIBOBJS " in - *" memcmp.$ac_objext "* ) ;; - *) LIBOBJS="$LIBOBJS memcmp.$ac_objext" - ;; -esac - - -if test "${ac_cv_func_setvbuf_reversed+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_cv_func_setvbuf_reversed=no -fi - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking return type of signal handlers" >&5 -$as_echo_n "checking return type of signal handlers... " >&6; } -if test "${ac_cv_type_signal+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include - -int -main () -{ -return *(signal (0, 0)) (0) == 1; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_type_signal=int -else - ac_cv_type_signal=void -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_signal" >&5 -$as_echo "$ac_cv_type_signal" >&6; } - -cat >>confdefs.h <<_ACEOF -#define RETSIGTYPE $ac_cv_type_signal -_ACEOF - - -for ac_func in strftime -do : - ac_fn_c_check_func "$LINENO" "strftime" "ac_cv_func_strftime" -if test "x$ac_cv_func_strftime" = x""yes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_STRFTIME 1 -_ACEOF - -else - # strftime is in -lintl on SCO UNIX. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for strftime in -lintl" >&5 -$as_echo_n "checking for strftime in -lintl... " >&6; } -if test "${ac_cv_lib_intl_strftime+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lintl $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char strftime (); -int -main () -{ -return strftime (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_intl_strftime=yes -else - ac_cv_lib_intl_strftime=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_intl_strftime" >&5 -$as_echo "$ac_cv_lib_intl_strftime" >&6; } -if test "x$ac_cv_lib_intl_strftime" = x""yes; then : - $as_echo "#define HAVE_STRFTIME 1" >>confdefs.h - -LIBS="-lintl $LIBS" -fi - -fi -done - -# The Ultrix 4.2 mips builtin alloca declared by alloca.h only works -# for constant arguments. Useless! -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for working alloca.h" >&5 -$as_echo_n "checking for working alloca.h... " >&6; } -if test "${ac_cv_working_alloca_h+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main () -{ -char *p = (char *) alloca (2 * sizeof (int)); - if (p) return 0; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_working_alloca_h=yes -else - ac_cv_working_alloca_h=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_working_alloca_h" >&5 -$as_echo "$ac_cv_working_alloca_h" >&6; } -if test $ac_cv_working_alloca_h = yes; then - -$as_echo "#define HAVE_ALLOCA_H 1" >>confdefs.h - -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for alloca" >&5 -$as_echo_n "checking for alloca... " >&6; } -if test "${ac_cv_func_alloca_works+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __GNUC__ -# define alloca __builtin_alloca -#else -# ifdef _MSC_VER -# include -# define alloca _alloca -# else -# ifdef HAVE_ALLOCA_H -# include -# else -# ifdef _AIX - #pragma alloca -# else -# ifndef alloca /* predefined by HP cc +Olibcalls */ -char *alloca (); -# endif -# endif -# endif -# endif -#endif - -int -main () -{ -char *p = (char *) alloca (1); - if (p) return 0; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_func_alloca_works=yes -else - ac_cv_func_alloca_works=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_alloca_works" >&5 -$as_echo "$ac_cv_func_alloca_works" >&6; } - -if test $ac_cv_func_alloca_works = yes; then - -$as_echo "#define HAVE_ALLOCA 1" >>confdefs.h - -else - # The SVR3 libPW and SVR4 libucb both contain incompatible functions -# that cause trouble. Some versions do not even contain alloca or -# contain a buggy version. If you still want to use their alloca, -# use ar to extract alloca.o from them instead of compiling alloca.c. - -ALLOCA=\${LIBOBJDIR}alloca.$ac_objext - -$as_echo "#define C_ALLOCA 1" >>confdefs.h - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether \`alloca.c' needs Cray hooks" >&5 -$as_echo_n "checking whether \`alloca.c' needs Cray hooks... " >&6; } -if test "${ac_cv_os_cray+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#if defined CRAY && ! defined CRAY2 -webecray -#else -wenotbecray -#endif - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "webecray" >/dev/null 2>&1; then : - ac_cv_os_cray=yes -else - ac_cv_os_cray=no -fi -rm -f conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_os_cray" >&5 -$as_echo "$ac_cv_os_cray" >&6; } -if test $ac_cv_os_cray = yes; then - for ac_func in _getb67 GETB67 getb67; do - as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` -ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" -eval as_val=\$$as_ac_var - if test "x$as_val" = x""yes; then : - -cat >>confdefs.h <<_ACEOF -#define CRAY_STACKSEG_END $ac_func -_ACEOF - - break -fi - - done -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking stack direction for C alloca" >&5 -$as_echo_n "checking stack direction for C alloca... " >&6; } -if test "${ac_cv_c_stack_direction+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - ac_cv_c_stack_direction=0 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$ac_includes_default -int -find_stack_direction () -{ - static char *addr = 0; - auto char dummy; - if (addr == 0) - { - addr = &dummy; - return find_stack_direction (); - } - else - return (&dummy > addr) ? 1 : -1; -} - -int -main () -{ - return find_stack_direction () < 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - ac_cv_c_stack_direction=1 -else - ac_cv_c_stack_direction=-1 -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_stack_direction" >&5 -$as_echo "$ac_cv_c_stack_direction" >&6; } -cat >>confdefs.h <<_ACEOF -#define STACK_DIRECTION $ac_cv_c_stack_direction -_ACEOF - - -fi - -for ac_func in strdup strerror strcasecmp -do : - as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` -ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" -eval as_val=\$$as_ac_var - if test "x$as_val" = x""yes; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 -_ACEOF - -else - case " $LIBOBJS " in - *" $ac_func.$ac_objext "* ) ;; - *) LIBOBJS="$LIBOBJS $ac_func.$ac_objext" - ;; -esac - -fi -done - - -for ac_func in flock fcntl uname gethostname sysinfo getdomainname -do : - as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` -ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" -eval as_val=\$$as_ac_var - if test "x$as_val" = x""yes; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 -_ACEOF - -fi -done - -for ac_func in stricmp random rand snprintf vsnprintf -do : - as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` -ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" -eval as_val=\$$as_ac_var - if test "x$as_val" = x""yes; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 -_ACEOF - -fi -done - - -if test "$ac_cv_func_uname" = 'yes' -then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for field domainname in struct utsname" >&5 -$as_echo_n "checking for field domainname in struct utsname... " >&6; } - if test "$cross_compiling" = yes; then : - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error "cannot run test program while cross compiling -See \`config.log' for more details." "$LINENO" 5; } -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - #include - - main(int argc, char **argv) - { - struct utsname uts; - uts.domainname[0] = '\0'; - } - -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - $as_echo "#define HAVE_STRUCT_UTSNAME_DOMAINNAME 1" >>confdefs.h - -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for /dev/urandom" >&5 -$as_echo_n "checking for /dev/urandom... " >&6; } -if test -c /dev/urandom -then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - $as_echo "#define HAVE_DEV_URANDOM 1" >>confdefs.h - -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - -echo $ac_n "using the following PATH setting for exec'ed programs... $ac_c" 1>&6 - -# Check whether --with-secure-path was given. -if test "${with_secure_path+set}" = set; then : - withval=$with_secure_path; - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $withval" >&5 -$as_echo "$withval" >&6; } - RC_SECURE_PATH=$withval - -else - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: /bin:/usr/bin:/usr/local/bin" >&5 -$as_echo "/bin:/usr/bin:/usr/local/bin" >&6; } - RC_SECURE_PATH=/bin:/usr/bin:/usr/local/bin - - -fi - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking which syslog facility to use" >&5 -$as_echo_n "checking which syslog facility to use... " >&6; } - -# Check whether --with-facility was given. -if test "${with_facility+set}" = set; then : - withval=$with_facility; - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $withval" >&5 -$as_echo "$withval" >&6; } - RC_LOG_FACILITY=$withval - -else - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: LOG_DAEMON" >&5 -$as_echo "LOG_DAEMON" >&6; } - RC_LOG_FACILITY=LOG_DAEMON - - -fi - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to include Livingston's RADIUS server 1.16 kludge" >&5 -$as_echo_n "checking whether to include Livingston's RADIUS server 1.16 kludge... " >&6; } -# Check whether --enable-radius-116 was given. -if test "${enable_radius_116+set}" = set; then : - enableval=$enable_radius_116; - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - $as_echo "#define RADIUS_116 1" >>confdefs.h - - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: !! This is a bug in Livingston's RADIUS server v1.16. There" >&5 -$as_echo "$as_me: WARNING: !! This is a bug in Livingston's RADIUS server v1.16. There" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: !! is a patch included with radiusclient which fixes this" >&5 -$as_echo "$as_me: WARNING: !! is a patch included with radiusclient which fixes this" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: !! problem. See patches/radiusd-1.16.accounting.diff. With" >&5 -$as_echo "$as_me: WARNING: !! problem. See patches/radiusd-1.16.accounting.diff. With" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: !! the patched RADIUS server you no longer need to activate" >&5 -$as_echo "$as_me: WARNING: !! the patched RADIUS server you no longer need to activate" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: !! this hack." >&5 -$as_echo "$as_me: WARNING: !! this hack." >&2;} - -else - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - - -fi - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to add service type hints derived from username prefix" >&5 -$as_echo_n "checking whether to add service type hints derived from username prefix... " >&6; } -# Check whether --enable-scp was given. -if test "${enable_scp+set}" = set; then : - enableval=$enable_scp; - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - $as_echo "#define SCP 1" >>confdefs.h - - -else - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - - -fi - - - - - - - - - - - - - - - - -ac_config_headers="$ac_config_headers config.h" - -ac_config_files="$ac_config_files Makefile include/Makefile lib/Makefile src/Makefile man/Makefile etc/Makefile doc/Makefile patches/Makefile login.radius/Makefile login.radius/migs/Makefile rpm/Makefile debian/Makefile" - -ac_config_commands="$ac_config_commands default" - -cat >confcache <<\_ACEOF -# This file is a shell script that caches the results of configure -# tests run on this system so they can be shared between configure -# scripts and configure runs, see configure's option --config-cache. -# It is not useful on other systems. If it contains results you don't -# want to keep, you may remove or edit it. -# -# config.status only pays attention to the cache file if you give it -# the --recheck option to rerun configure. -# -# `ac_cv_env_foo' variables (set or unset) will be overridden when -# loading this file, other *unset* `ac_cv_foo' will be assigned the -# following values. - -_ACEOF - -# The following way of writing the cache mishandles newlines in values, -# but we know of no workaround that is simple, portable, and efficient. -# So, we kill variables containing newlines. -# Ultrix sh set writes to stderr and can't be redirected directly, -# and sets the high bit in the cache file unless we assign to the vars. -( - for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do - eval ac_val=\$$ac_var - case $ac_val in #( - *${as_nl}*) - case $ac_var in #( - *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; - esac - case $ac_var in #( - _ | IFS | as_nl) ;; #( - BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( - *) { eval $ac_var=; unset $ac_var;} ;; - esac ;; - esac - done - - (set) 2>&1 | - case $as_nl`(ac_space=' '; set) 2>&1` in #( - *${as_nl}ac_space=\ *) - # `set' does not quote correctly, so add quotes: double-quote - # substitution turns \\\\ into \\, and sed turns \\ into \. - sed -n \ - "s/'/'\\\\''/g; - s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" - ;; #( - *) - # `set' quotes correctly as required by POSIX, so do not add quotes. - sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" - ;; - esac | - sort -) | - sed ' - /^ac_cv_env_/b end - t clear - :clear - s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ - t end - s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ - :end' >>confcache -if diff "$cache_file" confcache >/dev/null 2>&1; then :; else - if test -w "$cache_file"; then - test "x$cache_file" != "x/dev/null" && - { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 -$as_echo "$as_me: updating cache $cache_file" >&6;} - cat confcache >$cache_file - else - { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 -$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} - fi -fi -rm -f confcache - -test "x$prefix" = xNONE && prefix=$ac_default_prefix -# Let make expand exec_prefix. -test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' - -DEFS=-DHAVE_CONFIG_H - -ac_libobjs= -ac_ltlibobjs= -for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue - # 1. Remove the extension, and $U if already installed. - ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' - ac_i=`$as_echo "$ac_i" | sed "$ac_script"` - # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR - # will be set to the directory where LIBOBJS objects are built. - as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" - as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' -done -LIBOBJS=$ac_libobjs - -LTLIBOBJS=$ac_ltlibobjs - - -if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then - as_fn_error "conditional \"MAINTAINER_MODE\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi - if test -n "$EXEEXT"; then - am__EXEEXT_TRUE= - am__EXEEXT_FALSE='#' -else - am__EXEEXT_TRUE='#' - am__EXEEXT_FALSE= -fi - -if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then - as_fn_error "conditional \"AMDEP\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then - as_fn_error "conditional \"am__fastdepCC\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then - as_fn_error "conditional \"am__fastdepCC\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi - - -: ${CONFIG_STATUS=./config.status} -ac_write_fail=0 -ac_clean_files_save=$ac_clean_files -ac_clean_files="$ac_clean_files $CONFIG_STATUS" -{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 -$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} -as_write_fail=0 -cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 -#! $SHELL -# Generated by $as_me. -# Run this file to recreate the current configuration. -# Compiler output produced by configure, useful for debugging -# configure, is in config.log if it exists. - -debug=false -ac_cs_recheck=false -ac_cs_silent=false - -SHELL=\${CONFIG_SHELL-$SHELL} -export SHELL -_ASEOF -cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 -## -------------------- ## -## M4sh Initialization. ## -## -------------------- ## - -# Be more Bourne compatible -DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : - emulate sh - NULLCMD=: - # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in #( - *posix*) : - set -o posix ;; #( - *) : - ;; -esac -fi - - -as_nl=' -' -export as_nl -# Printing a long string crashes Solaris 7 /usr/bin/printf. -as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo -# Prefer a ksh shell builtin over an external printf program on Solaris, -# but without wasting forks for bash or zsh. -if test -z "$BASH_VERSION$ZSH_VERSION" \ - && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='print -r --' - as_echo_n='print -rn --' -elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='printf %s\n' - as_echo_n='printf %s' -else - if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then - as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' - as_echo_n='/usr/ucb/echo -n' - else - as_echo_body='eval expr "X$1" : "X\\(.*\\)"' - as_echo_n_body='eval - arg=$1; - case $arg in #( - *"$as_nl"*) - expr "X$arg" : "X\\(.*\\)$as_nl"; - arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; - esac; - expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" - ' - export as_echo_n_body - as_echo_n='sh -c $as_echo_n_body as_echo' - fi - export as_echo_body - as_echo='sh -c $as_echo_body as_echo' -fi - -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - PATH_SEPARATOR=: - (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { - (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || - PATH_SEPARATOR=';' - } -fi - - -# IFS -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent editors from complaining about space-tab. -# (If _AS_PATH_WALK were called with IFS unset, it would disable word -# splitting by setting IFS to empty value.) -IFS=" "" $as_nl" - -# Find who we are. Look in the path if we contain no directory separator. -case $0 in #(( - *[\\/]* ) as_myself=$0 ;; - *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break - done -IFS=$as_save_IFS - - ;; -esac -# We did not find ourselves, most probably we were run as `sh COMMAND' -# in which case we are not to be found in the path. -if test "x$as_myself" = x; then - as_myself=$0 -fi -if test ! -f "$as_myself"; then - $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 - exit 1 -fi - -# Unset variables that we do not need and which cause bugs (e.g. in -# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" -# suppresses any "Segmentation fault" message there. '((' could -# trigger a bug in pdksh 5.2.14. -for as_var in BASH_ENV ENV MAIL MAILPATH -do eval test x\${$as_var+set} = xset \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# CDPATH. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - - -# as_fn_error ERROR [LINENO LOG_FD] -# --------------------------------- -# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are -# provided, also output the error to LOG_FD, referencing LINENO. Then exit the -# script with status $?, using 1 if that was 0. -as_fn_error () -{ - as_status=$?; test $as_status -eq 0 && as_status=1 - if test "$3"; then - as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3 - fi - $as_echo "$as_me: error: $1" >&2 - as_fn_exit $as_status -} # as_fn_error - - -# as_fn_set_status STATUS -# ----------------------- -# Set $? to STATUS, without forking. -as_fn_set_status () -{ - return $1 -} # as_fn_set_status - -# as_fn_exit STATUS -# ----------------- -# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. -as_fn_exit () -{ - set +e - as_fn_set_status $1 - exit $1 -} # as_fn_exit - -# as_fn_unset VAR -# --------------- -# Portably unset VAR. -as_fn_unset () -{ - { eval $1=; unset $1;} -} -as_unset=as_fn_unset -# as_fn_append VAR VALUE -# ---------------------- -# Append the text in VALUE to the end of the definition contained in VAR. Take -# advantage of any shell optimizations that allow amortized linear growth over -# repeated appends, instead of the typical quadratic growth present in naive -# implementations. -if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : - eval 'as_fn_append () - { - eval $1+=\$2 - }' -else - as_fn_append () - { - eval $1=\$$1\$2 - } -fi # as_fn_append - -# as_fn_arith ARG... -# ------------------ -# Perform arithmetic evaluation on the ARGs, and store the result in the -# global $as_val. Take advantage of shells that can avoid forks. The arguments -# must be portable across $(()) and expr. -if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : - eval 'as_fn_arith () - { - as_val=$(( $* )) - }' -else - as_fn_arith () - { - as_val=`expr "$@" || test $? -eq 1` - } -fi # as_fn_arith - - -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi - -if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then - as_basename=basename -else - as_basename=false -fi - -if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then - as_dirname=dirname -else - as_dirname=false -fi - -as_me=`$as_basename -- "$0" || -$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X/"$0" | - sed '/^.*\/\([^/][^/]*\)\/*$/{ - s//\1/ - q - } - /^X\/\(\/\/\)$/{ - s//\1/ - q - } - /^X\/\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - -# Avoid depending upon Character Ranges. -as_cr_letters='abcdefghijklmnopqrstuvwxyz' -as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' -as_cr_Letters=$as_cr_letters$as_cr_LETTERS -as_cr_digits='0123456789' -as_cr_alnum=$as_cr_Letters$as_cr_digits - -ECHO_C= ECHO_N= ECHO_T= -case `echo -n x` in #((((( --n*) - case `echo 'xy\c'` in - *c*) ECHO_T=' ';; # ECHO_T is single tab character. - xy) ECHO_C='\c';; - *) echo `echo ksh88 bug on AIX 6.1` > /dev/null - ECHO_T=' ';; - esac;; -*) - ECHO_N='-n';; -esac - -rm -f conf$$ conf$$.exe conf$$.file -if test -d conf$$.dir; then - rm -f conf$$.dir/conf$$.file -else - rm -f conf$$.dir - mkdir conf$$.dir 2>/dev/null -fi -if (echo >conf$$.file) 2>/dev/null; then - if ln -s conf$$.file conf$$ 2>/dev/null; then - as_ln_s='ln -s' - # ... but there are two gotchas: - # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -p'. - ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || - as_ln_s='cp -p' - elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln - else - as_ln_s='cp -p' - fi -else - as_ln_s='cp -p' -fi -rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file -rmdir conf$$.dir 2>/dev/null - - -# as_fn_mkdir_p -# ------------- -# Create "$as_dir" as a directory, including parents if necessary. -as_fn_mkdir_p () -{ - - case $as_dir in #( - -*) as_dir=./$as_dir;; - esac - test -d "$as_dir" || eval $as_mkdir_p || { - as_dirs= - while :; do - case $as_dir in #( - *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( - *) as_qdir=$as_dir;; - esac - as_dirs="'$as_qdir' $as_dirs" - as_dir=`$as_dirname -- "$as_dir" || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - test -d "$as_dir" && break - done - test -z "$as_dirs" || eval "mkdir $as_dirs" - } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir" - - -} # as_fn_mkdir_p -if mkdir -p . 2>/dev/null; then - as_mkdir_p='mkdir -p "$as_dir"' -else - test -d ./-p && rmdir ./-p - as_mkdir_p=false -fi - -if test -x / >/dev/null 2>&1; then - as_test_x='test -x' -else - if ls -dL / >/dev/null 2>&1; then - as_ls_L_option=L - else - as_ls_L_option= - fi - as_test_x=' - eval sh -c '\'' - if test -d "$1"; then - test -d "$1/."; - else - case $1 in #( - -*)set "./$1";; - esac; - case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( - ???[sx]*):;;*)false;;esac;fi - '\'' sh - ' -fi -as_executable_p=$as_test_x - -# Sed expression to map a string onto a valid CPP name. -as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" - -# Sed expression to map a string onto a valid variable name. -as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" - - -exec 6>&1 -## ----------------------------------- ## -## Main body of $CONFIG_STATUS script. ## -## ----------------------------------- ## -_ASEOF -test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -# Save the log message, to keep $0 and so on meaningful, and to -# report actual input values of CONFIG_FILES etc. instead of their -# values after options handling. -ac_log=" -This file was extended by $as_me, which was -generated by GNU Autoconf 2.65. Invocation command line was - - CONFIG_FILES = $CONFIG_FILES - CONFIG_HEADERS = $CONFIG_HEADERS - CONFIG_LINKS = $CONFIG_LINKS - CONFIG_COMMANDS = $CONFIG_COMMANDS - $ $0 $@ - -on `(hostname || uname -n) 2>/dev/null | sed 1q` -" - -_ACEOF - -case $ac_config_files in *" -"*) set x $ac_config_files; shift; ac_config_files=$*;; -esac - -case $ac_config_headers in *" -"*) set x $ac_config_headers; shift; ac_config_headers=$*;; -esac - - -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -# Files that config.status was made for. -config_files="$ac_config_files" -config_headers="$ac_config_headers" -config_commands="$ac_config_commands" - -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -ac_cs_usage="\ -\`$as_me' instantiates files and other configuration actions -from templates according to the current configuration. Unless the files -and actions are specified as TAGs, all are instantiated by default. - -Usage: $0 [OPTION]... [TAG]... - - -h, --help print this help, then exit - -V, --version print version number and configuration settings, then exit - --config print configuration, then exit - -q, --quiet, --silent - do not print progress messages - -d, --debug don't remove temporary files - --recheck update $as_me by reconfiguring in the same conditions - --file=FILE[:TEMPLATE] - instantiate the configuration file FILE - --header=FILE[:TEMPLATE] - instantiate the configuration header FILE - -Configuration files: -$config_files - -Configuration headers: -$config_headers - -Configuration commands: -$config_commands - -Report bugs to the package provider." - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" -ac_cs_version="\\ -config.status -configured by $0, generated by GNU Autoconf 2.65, - with options \\"\$ac_cs_config\\" - -Copyright (C) 2009 Free Software Foundation, Inc. -This config.status script is free software; the Free Software Foundation -gives unlimited permission to copy, distribute and modify it." - -ac_pwd='$ac_pwd' -srcdir='$srcdir' -INSTALL='$INSTALL' -MKDIR_P='$MKDIR_P' -AWK='$AWK' -test -n "\$AWK" || AWK=awk -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -# The default lists apply if the user does not specify any file. -ac_need_defaults=: -while test $# != 0 -do - case $1 in - --*=*) - ac_option=`expr "X$1" : 'X\([^=]*\)='` - ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` - ac_shift=: - ;; - *) - ac_option=$1 - ac_optarg=$2 - ac_shift=shift - ;; - esac - - case $ac_option in - # Handling of the options. - -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) - ac_cs_recheck=: ;; - --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) - $as_echo "$ac_cs_version"; exit ;; - --config | --confi | --conf | --con | --co | --c ) - $as_echo "$ac_cs_config"; exit ;; - --debug | --debu | --deb | --de | --d | -d ) - debug=: ;; - --file | --fil | --fi | --f ) - $ac_shift - case $ac_optarg in - *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; - esac - as_fn_append CONFIG_FILES " '$ac_optarg'" - ac_need_defaults=false;; - --header | --heade | --head | --hea ) - $ac_shift - case $ac_optarg in - *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; - esac - as_fn_append CONFIG_HEADERS " '$ac_optarg'" - ac_need_defaults=false;; - --he | --h) - # Conflict between --help and --header - as_fn_error "ambiguous option: \`$1' -Try \`$0 --help' for more information.";; - --help | --hel | -h ) - $as_echo "$ac_cs_usage"; exit ;; - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil | --si | --s) - ac_cs_silent=: ;; - - # This is an error. - -*) as_fn_error "unrecognized option: \`$1' -Try \`$0 --help' for more information." ;; - - *) as_fn_append ac_config_targets " $1" - ac_need_defaults=false ;; - - esac - shift -done - -ac_configure_extra_args= - -if $ac_cs_silent; then - exec 6>/dev/null - ac_configure_extra_args="$ac_configure_extra_args --silent" -fi - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -if \$ac_cs_recheck; then - set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion - shift - \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 - CONFIG_SHELL='$SHELL' - export CONFIG_SHELL - exec "\$@" -fi - -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -exec 5>>config.log -{ - echo - sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX -## Running $as_me. ## -_ASBOX - $as_echo "$ac_log" -} >&5 - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -# -# INIT-COMMANDS -# -AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" - - -# The HP-UX ksh and POSIX shell print the target directory to stdout -# if CDPATH is set. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -sed_quote_subst='$sed_quote_subst' -double_quote_subst='$double_quote_subst' -delay_variable_subst='$delay_variable_subst' -macro_version='`$ECHO "X$macro_version" | $Xsed -e "$delay_single_quote_subst"`' -macro_revision='`$ECHO "X$macro_revision" | $Xsed -e "$delay_single_quote_subst"`' -enable_shared='`$ECHO "X$enable_shared" | $Xsed -e "$delay_single_quote_subst"`' -enable_static='`$ECHO "X$enable_static" | $Xsed -e "$delay_single_quote_subst"`' -pic_mode='`$ECHO "X$pic_mode" | $Xsed -e "$delay_single_quote_subst"`' -enable_fast_install='`$ECHO "X$enable_fast_install" | $Xsed -e "$delay_single_quote_subst"`' -host_alias='`$ECHO "X$host_alias" | $Xsed -e "$delay_single_quote_subst"`' -host='`$ECHO "X$host" | $Xsed -e "$delay_single_quote_subst"`' -host_os='`$ECHO "X$host_os" | $Xsed -e "$delay_single_quote_subst"`' -build_alias='`$ECHO "X$build_alias" | $Xsed -e "$delay_single_quote_subst"`' -build='`$ECHO "X$build" | $Xsed -e "$delay_single_quote_subst"`' -build_os='`$ECHO "X$build_os" | $Xsed -e "$delay_single_quote_subst"`' -SED='`$ECHO "X$SED" | $Xsed -e "$delay_single_quote_subst"`' -Xsed='`$ECHO "X$Xsed" | $Xsed -e "$delay_single_quote_subst"`' -GREP='`$ECHO "X$GREP" | $Xsed -e "$delay_single_quote_subst"`' -EGREP='`$ECHO "X$EGREP" | $Xsed -e "$delay_single_quote_subst"`' -FGREP='`$ECHO "X$FGREP" | $Xsed -e "$delay_single_quote_subst"`' -LD='`$ECHO "X$LD" | $Xsed -e "$delay_single_quote_subst"`' -NM='`$ECHO "X$NM" | $Xsed -e "$delay_single_quote_subst"`' -LN_S='`$ECHO "X$LN_S" | $Xsed -e "$delay_single_quote_subst"`' -max_cmd_len='`$ECHO "X$max_cmd_len" | $Xsed -e "$delay_single_quote_subst"`' -ac_objext='`$ECHO "X$ac_objext" | $Xsed -e "$delay_single_quote_subst"`' -exeext='`$ECHO "X$exeext" | $Xsed -e "$delay_single_quote_subst"`' -lt_unset='`$ECHO "X$lt_unset" | $Xsed -e "$delay_single_quote_subst"`' -lt_SP2NL='`$ECHO "X$lt_SP2NL" | $Xsed -e "$delay_single_quote_subst"`' -lt_NL2SP='`$ECHO "X$lt_NL2SP" | $Xsed -e "$delay_single_quote_subst"`' -reload_flag='`$ECHO "X$reload_flag" | $Xsed -e "$delay_single_quote_subst"`' -reload_cmds='`$ECHO "X$reload_cmds" | $Xsed -e "$delay_single_quote_subst"`' -OBJDUMP='`$ECHO "X$OBJDUMP" | $Xsed -e "$delay_single_quote_subst"`' -deplibs_check_method='`$ECHO "X$deplibs_check_method" | $Xsed -e "$delay_single_quote_subst"`' -file_magic_cmd='`$ECHO "X$file_magic_cmd" | $Xsed -e "$delay_single_quote_subst"`' -AR='`$ECHO "X$AR" | $Xsed -e "$delay_single_quote_subst"`' -AR_FLAGS='`$ECHO "X$AR_FLAGS" | $Xsed -e "$delay_single_quote_subst"`' -STRIP='`$ECHO "X$STRIP" | $Xsed -e "$delay_single_quote_subst"`' -RANLIB='`$ECHO "X$RANLIB" | $Xsed -e "$delay_single_quote_subst"`' -old_postinstall_cmds='`$ECHO "X$old_postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' -old_postuninstall_cmds='`$ECHO "X$old_postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' -old_archive_cmds='`$ECHO "X$old_archive_cmds" | $Xsed -e "$delay_single_quote_subst"`' -CC='`$ECHO "X$CC" | $Xsed -e "$delay_single_quote_subst"`' -CFLAGS='`$ECHO "X$CFLAGS" | $Xsed -e "$delay_single_quote_subst"`' -compiler='`$ECHO "X$compiler" | $Xsed -e "$delay_single_quote_subst"`' -GCC='`$ECHO "X$GCC" | $Xsed -e "$delay_single_quote_subst"`' -lt_cv_sys_global_symbol_pipe='`$ECHO "X$lt_cv_sys_global_symbol_pipe" | $Xsed -e "$delay_single_quote_subst"`' -lt_cv_sys_global_symbol_to_cdecl='`$ECHO "X$lt_cv_sys_global_symbol_to_cdecl" | $Xsed -e "$delay_single_quote_subst"`' -lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address" | $Xsed -e "$delay_single_quote_subst"`' -lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`' -objdir='`$ECHO "X$objdir" | $Xsed -e "$delay_single_quote_subst"`' -SHELL='`$ECHO "X$SHELL" | $Xsed -e "$delay_single_quote_subst"`' -ECHO='`$ECHO "X$ECHO" | $Xsed -e "$delay_single_quote_subst"`' -MAGIC_CMD='`$ECHO "X$MAGIC_CMD" | $Xsed -e "$delay_single_quote_subst"`' -lt_prog_compiler_no_builtin_flag='`$ECHO "X$lt_prog_compiler_no_builtin_flag" | $Xsed -e "$delay_single_quote_subst"`' -lt_prog_compiler_wl='`$ECHO "X$lt_prog_compiler_wl" | $Xsed -e "$delay_single_quote_subst"`' -lt_prog_compiler_pic='`$ECHO "X$lt_prog_compiler_pic" | $Xsed -e "$delay_single_quote_subst"`' -lt_prog_compiler_static='`$ECHO "X$lt_prog_compiler_static" | $Xsed -e "$delay_single_quote_subst"`' -lt_cv_prog_compiler_c_o='`$ECHO "X$lt_cv_prog_compiler_c_o" | $Xsed -e "$delay_single_quote_subst"`' -need_locks='`$ECHO "X$need_locks" | $Xsed -e "$delay_single_quote_subst"`' -DSYMUTIL='`$ECHO "X$DSYMUTIL" | $Xsed -e "$delay_single_quote_subst"`' -NMEDIT='`$ECHO "X$NMEDIT" | $Xsed -e "$delay_single_quote_subst"`' -LIPO='`$ECHO "X$LIPO" | $Xsed -e "$delay_single_quote_subst"`' -OTOOL='`$ECHO "X$OTOOL" | $Xsed -e "$delay_single_quote_subst"`' -OTOOL64='`$ECHO "X$OTOOL64" | $Xsed -e "$delay_single_quote_subst"`' -libext='`$ECHO "X$libext" | $Xsed -e "$delay_single_quote_subst"`' -shrext_cmds='`$ECHO "X$shrext_cmds" | $Xsed -e "$delay_single_quote_subst"`' -extract_expsyms_cmds='`$ECHO "X$extract_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`' -archive_cmds_need_lc='`$ECHO "X$archive_cmds_need_lc" | $Xsed -e "$delay_single_quote_subst"`' -enable_shared_with_static_runtimes='`$ECHO "X$enable_shared_with_static_runtimes" | $Xsed -e "$delay_single_quote_subst"`' -export_dynamic_flag_spec='`$ECHO "X$export_dynamic_flag_spec" | $Xsed -e "$delay_single_quote_subst"`' -whole_archive_flag_spec='`$ECHO "X$whole_archive_flag_spec" | $Xsed -e "$delay_single_quote_subst"`' -compiler_needs_object='`$ECHO "X$compiler_needs_object" | $Xsed -e "$delay_single_quote_subst"`' -old_archive_from_new_cmds='`$ECHO "X$old_archive_from_new_cmds" | $Xsed -e "$delay_single_quote_subst"`' -old_archive_from_expsyms_cmds='`$ECHO "X$old_archive_from_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`' -archive_cmds='`$ECHO "X$archive_cmds" | $Xsed -e "$delay_single_quote_subst"`' -archive_expsym_cmds='`$ECHO "X$archive_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`' -module_cmds='`$ECHO "X$module_cmds" | $Xsed -e "$delay_single_quote_subst"`' -module_expsym_cmds='`$ECHO "X$module_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`' -with_gnu_ld='`$ECHO "X$with_gnu_ld" | $Xsed -e "$delay_single_quote_subst"`' -allow_undefined_flag='`$ECHO "X$allow_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`' -no_undefined_flag='`$ECHO "X$no_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`' -hardcode_libdir_flag_spec='`$ECHO "X$hardcode_libdir_flag_spec" | $Xsed -e "$delay_single_quote_subst"`' -hardcode_libdir_flag_spec_ld='`$ECHO "X$hardcode_libdir_flag_spec_ld" | $Xsed -e "$delay_single_quote_subst"`' -hardcode_libdir_separator='`$ECHO "X$hardcode_libdir_separator" | $Xsed -e "$delay_single_quote_subst"`' -hardcode_direct='`$ECHO "X$hardcode_direct" | $Xsed -e "$delay_single_quote_subst"`' -hardcode_direct_absolute='`$ECHO "X$hardcode_direct_absolute" | $Xsed -e "$delay_single_quote_subst"`' -hardcode_minus_L='`$ECHO "X$hardcode_minus_L" | $Xsed -e "$delay_single_quote_subst"`' -hardcode_shlibpath_var='`$ECHO "X$hardcode_shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`' -hardcode_automatic='`$ECHO "X$hardcode_automatic" | $Xsed -e "$delay_single_quote_subst"`' -inherit_rpath='`$ECHO "X$inherit_rpath" | $Xsed -e "$delay_single_quote_subst"`' -link_all_deplibs='`$ECHO "X$link_all_deplibs" | $Xsed -e "$delay_single_quote_subst"`' -fix_srcfile_path='`$ECHO "X$fix_srcfile_path" | $Xsed -e "$delay_single_quote_subst"`' -always_export_symbols='`$ECHO "X$always_export_symbols" | $Xsed -e "$delay_single_quote_subst"`' -export_symbols_cmds='`$ECHO "X$export_symbols_cmds" | $Xsed -e "$delay_single_quote_subst"`' -exclude_expsyms='`$ECHO "X$exclude_expsyms" | $Xsed -e "$delay_single_quote_subst"`' -include_expsyms='`$ECHO "X$include_expsyms" | $Xsed -e "$delay_single_quote_subst"`' -prelink_cmds='`$ECHO "X$prelink_cmds" | $Xsed -e "$delay_single_quote_subst"`' -file_list_spec='`$ECHO "X$file_list_spec" | $Xsed -e "$delay_single_quote_subst"`' -variables_saved_for_relink='`$ECHO "X$variables_saved_for_relink" | $Xsed -e "$delay_single_quote_subst"`' -need_lib_prefix='`$ECHO "X$need_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`' -need_version='`$ECHO "X$need_version" | $Xsed -e "$delay_single_quote_subst"`' -version_type='`$ECHO "X$version_type" | $Xsed -e "$delay_single_quote_subst"`' -runpath_var='`$ECHO "X$runpath_var" | $Xsed -e "$delay_single_quote_subst"`' -shlibpath_var='`$ECHO "X$shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`' -shlibpath_overrides_runpath='`$ECHO "X$shlibpath_overrides_runpath" | $Xsed -e "$delay_single_quote_subst"`' -libname_spec='`$ECHO "X$libname_spec" | $Xsed -e "$delay_single_quote_subst"`' -library_names_spec='`$ECHO "X$library_names_spec" | $Xsed -e "$delay_single_quote_subst"`' -soname_spec='`$ECHO "X$soname_spec" | $Xsed -e "$delay_single_quote_subst"`' -postinstall_cmds='`$ECHO "X$postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' -postuninstall_cmds='`$ECHO "X$postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' -finish_cmds='`$ECHO "X$finish_cmds" | $Xsed -e "$delay_single_quote_subst"`' -finish_eval='`$ECHO "X$finish_eval" | $Xsed -e "$delay_single_quote_subst"`' -hardcode_into_libs='`$ECHO "X$hardcode_into_libs" | $Xsed -e "$delay_single_quote_subst"`' -sys_lib_search_path_spec='`$ECHO "X$sys_lib_search_path_spec" | $Xsed -e "$delay_single_quote_subst"`' -sys_lib_dlsearch_path_spec='`$ECHO "X$sys_lib_dlsearch_path_spec" | $Xsed -e "$delay_single_quote_subst"`' -hardcode_action='`$ECHO "X$hardcode_action" | $Xsed -e "$delay_single_quote_subst"`' -enable_dlopen='`$ECHO "X$enable_dlopen" | $Xsed -e "$delay_single_quote_subst"`' -enable_dlopen_self='`$ECHO "X$enable_dlopen_self" | $Xsed -e "$delay_single_quote_subst"`' -enable_dlopen_self_static='`$ECHO "X$enable_dlopen_self_static" | $Xsed -e "$delay_single_quote_subst"`' -old_striplib='`$ECHO "X$old_striplib" | $Xsed -e "$delay_single_quote_subst"`' -striplib='`$ECHO "X$striplib" | $Xsed -e "$delay_single_quote_subst"`' - -LTCC='$LTCC' -LTCFLAGS='$LTCFLAGS' -compiler='$compiler_DEFAULT' - -# Quote evaled strings. -for var in SED \ -GREP \ -EGREP \ -FGREP \ -LD \ -NM \ -LN_S \ -lt_SP2NL \ -lt_NL2SP \ -reload_flag \ -OBJDUMP \ -deplibs_check_method \ -file_magic_cmd \ -AR \ -AR_FLAGS \ -STRIP \ -RANLIB \ -CC \ -CFLAGS \ -compiler \ -lt_cv_sys_global_symbol_pipe \ -lt_cv_sys_global_symbol_to_cdecl \ -lt_cv_sys_global_symbol_to_c_name_address \ -lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ -SHELL \ -ECHO \ -lt_prog_compiler_no_builtin_flag \ -lt_prog_compiler_wl \ -lt_prog_compiler_pic \ -lt_prog_compiler_static \ -lt_cv_prog_compiler_c_o \ -need_locks \ -DSYMUTIL \ -NMEDIT \ -LIPO \ -OTOOL \ -OTOOL64 \ -shrext_cmds \ -export_dynamic_flag_spec \ -whole_archive_flag_spec \ -compiler_needs_object \ -with_gnu_ld \ -allow_undefined_flag \ -no_undefined_flag \ -hardcode_libdir_flag_spec \ -hardcode_libdir_flag_spec_ld \ -hardcode_libdir_separator \ -fix_srcfile_path \ -exclude_expsyms \ -include_expsyms \ -file_list_spec \ -variables_saved_for_relink \ -libname_spec \ -library_names_spec \ -soname_spec \ -finish_eval \ -old_striplib \ -striplib; do - case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in - *[\\\\\\\`\\"\\\$]*) - eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" - ;; - *) - eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" - ;; - esac -done - -# Double-quote double-evaled strings. -for var in reload_cmds \ -old_postinstall_cmds \ -old_postuninstall_cmds \ -old_archive_cmds \ -extract_expsyms_cmds \ -old_archive_from_new_cmds \ -old_archive_from_expsyms_cmds \ -archive_cmds \ -archive_expsym_cmds \ -module_cmds \ -module_expsym_cmds \ -export_symbols_cmds \ -prelink_cmds \ -postinstall_cmds \ -postuninstall_cmds \ -finish_cmds \ -sys_lib_search_path_spec \ -sys_lib_dlsearch_path_spec; do - case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in - *[\\\\\\\`\\"\\\$]*) - eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" - ;; - *) - eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" - ;; - esac -done - -# Fix-up fallback echo if it was mangled by the above quoting rules. -case \$lt_ECHO in -*'\\\$0 --fallback-echo"') lt_ECHO=\`\$ECHO "X\$lt_ECHO" | \$Xsed -e 's/\\\\\\\\\\\\\\\$0 --fallback-echo"\$/\$0 --fallback-echo"/'\` - ;; -esac - -ac_aux_dir='$ac_aux_dir' -xsi_shell='$xsi_shell' -lt_shell_append='$lt_shell_append' - -# See if we are running on zsh, and set the options which allow our -# commands through without removal of \ escapes INIT. -if test -n "\${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST -fi - - - PACKAGE='$PACKAGE' - VERSION='$VERSION' - TIMESTAMP='$TIMESTAMP' - RM='$RM' - ofile='$ofile' - - - - - -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 - -# Handling of arguments. -for ac_config_target in $ac_config_targets -do - case $ac_config_target in - "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; - "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; - "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; - "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; - "include/Makefile") CONFIG_FILES="$CONFIG_FILES include/Makefile" ;; - "lib/Makefile") CONFIG_FILES="$CONFIG_FILES lib/Makefile" ;; - "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; - "man/Makefile") CONFIG_FILES="$CONFIG_FILES man/Makefile" ;; - "etc/Makefile") CONFIG_FILES="$CONFIG_FILES etc/Makefile" ;; - "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; - "patches/Makefile") CONFIG_FILES="$CONFIG_FILES patches/Makefile" ;; - "login.radius/Makefile") CONFIG_FILES="$CONFIG_FILES login.radius/Makefile" ;; - "login.radius/migs/Makefile") CONFIG_FILES="$CONFIG_FILES login.radius/migs/Makefile" ;; - "rpm/Makefile") CONFIG_FILES="$CONFIG_FILES rpm/Makefile" ;; - "debian/Makefile") CONFIG_FILES="$CONFIG_FILES debian/Makefile" ;; - "default") CONFIG_COMMANDS="$CONFIG_COMMANDS default" ;; - - *) as_fn_error "invalid argument: \`$ac_config_target'" "$LINENO" 5;; - esac -done - - -# If the user did not use the arguments to specify the items to instantiate, -# then the envvar interface is used. Set only those that are not. -# We use the long form for the default assignment because of an extremely -# bizarre bug on SunOS 4.1.3. -if $ac_need_defaults; then - test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files - test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers - test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands -fi - -# Have a temporary directory for convenience. Make it in the build tree -# simply because there is no reason against having it here, and in addition, -# creating and moving files from /tmp can sometimes cause problems. -# Hook for its removal unless debugging. -# Note that there is a small window in which the directory will not be cleaned: -# after its creation but before its name has been assigned to `$tmp'. -$debug || -{ - tmp= - trap 'exit_status=$? - { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status -' 0 - trap 'as_fn_exit 1' 1 2 13 15 -} -# Create a (secure) tmp directory for tmp files. - -{ - tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && - test -n "$tmp" && test -d "$tmp" -} || -{ - tmp=./conf$$-$RANDOM - (umask 077 && mkdir "$tmp") -} || as_fn_error "cannot create a temporary directory in ." "$LINENO" 5 - -# Set up the scripts for CONFIG_FILES section. -# No need to generate them if there are no CONFIG_FILES. -# This happens for instance with `./config.status config.h'. -if test -n "$CONFIG_FILES"; then - - -ac_cr=`echo X | tr X '\015'` -# On cygwin, bash can eat \r inside `` if the user requested igncr. -# But we know of no other shell where ac_cr would be empty at this -# point, so we can use a bashism as a fallback. -if test "x$ac_cr" = x; then - eval ac_cr=\$\'\\r\' -fi -ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` -if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then - ac_cs_awk_cr='\r' -else - ac_cs_awk_cr=$ac_cr -fi - -echo 'BEGIN {' >"$tmp/subs1.awk" && -_ACEOF - - -{ - echo "cat >conf$$subs.awk <<_ACEOF" && - echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && - echo "_ACEOF" -} >conf$$subs.sh || - as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 -ac_delim_num=`echo "$ac_subst_vars" | grep -c '$'` -ac_delim='%!_!# ' -for ac_last_try in false false false false false :; do - . ./conf$$subs.sh || - as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 - - ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` - if test $ac_delim_n = $ac_delim_num; then - break - elif $ac_last_try; then - as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 - else - ac_delim="$ac_delim!$ac_delim _$ac_delim!! " - fi -done -rm -f conf$$subs.sh - -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -cat >>"\$tmp/subs1.awk" <<\\_ACAWK && -_ACEOF -sed -n ' -h -s/^/S["/; s/!.*/"]=/ -p -g -s/^[^!]*!// -:repl -t repl -s/'"$ac_delim"'$// -t delim -:nl -h -s/\(.\{148\}\)..*/\1/ -t more1 -s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ -p -n -b repl -:more1 -s/["\\]/\\&/g; s/^/"/; s/$/"\\/ -p -g -s/.\{148\}// -t nl -:delim -h -s/\(.\{148\}\)..*/\1/ -t more2 -s/["\\]/\\&/g; s/^/"/; s/$/"/ -p -b -:more2 -s/["\\]/\\&/g; s/^/"/; s/$/"\\/ -p -g -s/.\{148\}// -t delim -' >$CONFIG_STATUS || ac_write_fail=1 -rm -f conf$$subs.awk -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -_ACAWK -cat >>"\$tmp/subs1.awk" <<_ACAWK && - for (key in S) S_is_set[key] = 1 - FS = "" - -} -{ - line = $ 0 - nfields = split(line, field, "@") - substed = 0 - len = length(field[1]) - for (i = 2; i < nfields; i++) { - key = field[i] - keylen = length(key) - if (S_is_set[key]) { - value = S[key] - line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) - len += length(value) + length(field[++i]) - substed = 1 - } else - len += 1 + keylen - } - - print line -} - -_ACAWK -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then - sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" -else - cat -fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \ - || as_fn_error "could not setup config files machinery" "$LINENO" 5 -_ACEOF - -# VPATH may cause trouble with some makes, so we remove $(srcdir), -# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and -# trailing colons and then remove the whole line if VPATH becomes empty -# (actually we leave an empty line to preserve line numbers). -if test "x$srcdir" = x.; then - ac_vpsub='/^[ ]*VPATH[ ]*=/{ -s/:*\$(srcdir):*/:/ -s/:*\${srcdir}:*/:/ -s/:*@srcdir@:*/:/ -s/^\([^=]*=[ ]*\):*/\1/ -s/:*$// -s/^[^=]*=[ ]*$// -}' -fi - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -fi # test -n "$CONFIG_FILES" - -# Set up the scripts for CONFIG_HEADERS section. -# No need to generate them if there are no CONFIG_HEADERS. -# This happens for instance with `./config.status Makefile'. -if test -n "$CONFIG_HEADERS"; then -cat >"$tmp/defines.awk" <<\_ACAWK || -BEGIN { -_ACEOF - -# Transform confdefs.h into an awk script `defines.awk', embedded as -# here-document in config.status, that substitutes the proper values into -# config.h.in to produce config.h. - -# Create a delimiter string that does not exist in confdefs.h, to ease -# handling of long lines. -ac_delim='%!_!# ' -for ac_last_try in false false :; do - ac_t=`sed -n "/$ac_delim/p" confdefs.h` - if test -z "$ac_t"; then - break - elif $ac_last_try; then - as_fn_error "could not make $CONFIG_HEADERS" "$LINENO" 5 - else - ac_delim="$ac_delim!$ac_delim _$ac_delim!! " - fi -done - -# For the awk script, D is an array of macro values keyed by name, -# likewise P contains macro parameters if any. Preserve backslash -# newline sequences. - -ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* -sed -n ' -s/.\{148\}/&'"$ac_delim"'/g -t rset -:rset -s/^[ ]*#[ ]*define[ ][ ]*/ / -t def -d -:def -s/\\$// -t bsnl -s/["\\]/\\&/g -s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ -D["\1"]=" \3"/p -s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p -d -:bsnl -s/["\\]/\\&/g -s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ -D["\1"]=" \3\\\\\\n"\\/p -t cont -s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p -t cont -d -:cont -n -s/.\{148\}/&'"$ac_delim"'/g -t clear -:clear -s/\\$// -t bsnlc -s/["\\]/\\&/g; s/^/"/; s/$/"/p -d -:bsnlc -s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p -b cont -' >$CONFIG_STATUS || ac_write_fail=1 - -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 - for (key in D) D_is_set[key] = 1 - FS = "" -} -/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { - line = \$ 0 - split(line, arg, " ") - if (arg[1] == "#") { - defundef = arg[2] - mac1 = arg[3] - } else { - defundef = substr(arg[1], 2) - mac1 = arg[2] - } - split(mac1, mac2, "(") #) - macro = mac2[1] - prefix = substr(line, 1, index(line, defundef) - 1) - if (D_is_set[macro]) { - # Preserve the white space surrounding the "#". - print prefix "define", macro P[macro] D[macro] - next - } else { - # Replace #undef with comments. This is necessary, for example, - # in the case of _POSIX_SOURCE, which is predefined and required - # on some systems where configure will not decide to define it. - if (defundef == "undef") { - print "/*", prefix defundef, macro, "*/" - next - } - } -} -{ print } -_ACAWK -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 - as_fn_error "could not setup config headers machinery" "$LINENO" 5 -fi # test -n "$CONFIG_HEADERS" - - -eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" -shift -for ac_tag -do - case $ac_tag in - :[FHLC]) ac_mode=$ac_tag; continue;; - esac - case $ac_mode$ac_tag in - :[FHL]*:*);; - :L* | :C*:*) as_fn_error "invalid tag \`$ac_tag'" "$LINENO" 5;; - :[FH]-) ac_tag=-:-;; - :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; - esac - ac_save_IFS=$IFS - IFS=: - set x $ac_tag - IFS=$ac_save_IFS - shift - ac_file=$1 - shift - - case $ac_mode in - :L) ac_source=$1;; - :[FH]) - ac_file_inputs= - for ac_f - do - case $ac_f in - -) ac_f="$tmp/stdin";; - *) # Look for the file first in the build tree, then in the source tree - # (if the path is not absolute). The absolute path cannot be DOS-style, - # because $ac_f cannot contain `:'. - test -f "$ac_f" || - case $ac_f in - [\\/$]*) false;; - *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; - esac || - as_fn_error "cannot find input file: \`$ac_f'" "$LINENO" 5;; - esac - case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac - as_fn_append ac_file_inputs " '$ac_f'" - done - - # Let's still pretend it is `configure' which instantiates (i.e., don't - # use $as_me), people would be surprised to read: - # /* config.h. Generated by config.status. */ - configure_input='Generated from '` - $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' - `' by configure.' - if test x"$ac_file" != x-; then - configure_input="$ac_file. $configure_input" - { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 -$as_echo "$as_me: creating $ac_file" >&6;} - fi - # Neutralize special characters interpreted by sed in replacement strings. - case $configure_input in #( - *\&* | *\|* | *\\* ) - ac_sed_conf_input=`$as_echo "$configure_input" | - sed 's/[\\\\&|]/\\\\&/g'`;; #( - *) ac_sed_conf_input=$configure_input;; - esac - - case $ac_tag in - *:-:* | *:-) cat >"$tmp/stdin" \ - || as_fn_error "could not create $ac_file" "$LINENO" 5 ;; - esac - ;; - esac - - ac_dir=`$as_dirname -- "$ac_file" || -$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$ac_file" : 'X\(//\)[^/]' \| \ - X"$ac_file" : 'X\(//\)$' \| \ - X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$ac_file" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - as_dir="$ac_dir"; as_fn_mkdir_p - ac_builddir=. - -case "$ac_dir" in -.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; -*) - ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` - # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` - case $ac_top_builddir_sub in - "") ac_top_builddir_sub=. ac_top_build_prefix= ;; - *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; - esac ;; -esac -ac_abs_top_builddir=$ac_pwd -ac_abs_builddir=$ac_pwd$ac_dir_suffix -# for backward compatibility: -ac_top_builddir=$ac_top_build_prefix - -case $srcdir in - .) # We are building in place. - ac_srcdir=. - ac_top_srcdir=$ac_top_builddir_sub - ac_abs_top_srcdir=$ac_pwd ;; - [\\/]* | ?:[\\/]* ) # Absolute name. - ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir - ac_abs_top_srcdir=$srcdir ;; - *) # Relative name. - ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_build_prefix$srcdir - ac_abs_top_srcdir=$ac_pwd/$srcdir ;; -esac -ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix - - - case $ac_mode in - :F) - # - # CONFIG_FILE - # - - case $INSTALL in - [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; - *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; - esac - ac_MKDIR_P=$MKDIR_P - case $MKDIR_P in - [\\/$]* | ?:[\\/]* ) ;; - */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; - esac -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -# If the template does not know about datarootdir, expand it. -# FIXME: This hack should be removed a few years after 2.60. -ac_datarootdir_hack=; ac_datarootdir_seen= -ac_sed_dataroot=' -/datarootdir/ { - p - q -} -/@datadir@/p -/@docdir@/p -/@infodir@/p -/@localedir@/p -/@mandir@/p' -case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in -*datarootdir*) ac_datarootdir_seen=yes;; -*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 -$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 - ac_datarootdir_hack=' - s&@datadir@&$datadir&g - s&@docdir@&$docdir&g - s&@infodir@&$infodir&g - s&@localedir@&$localedir&g - s&@mandir@&$mandir&g - s&\\\${datarootdir}&$datarootdir&g' ;; -esac -_ACEOF - -# Neutralize VPATH when `$srcdir' = `.'. -# Shell code in configure.ac might set extrasub. -# FIXME: do we really want to maintain this feature? -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -ac_sed_extra="$ac_vpsub -$extrasub -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -:t -/@[a-zA-Z_][a-zA-Z_0-9]*@/!b -s|@configure_input@|$ac_sed_conf_input|;t t -s&@top_builddir@&$ac_top_builddir_sub&;t t -s&@top_build_prefix@&$ac_top_build_prefix&;t t -s&@srcdir@&$ac_srcdir&;t t -s&@abs_srcdir@&$ac_abs_srcdir&;t t -s&@top_srcdir@&$ac_top_srcdir&;t t -s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t -s&@builddir@&$ac_builddir&;t t -s&@abs_builddir@&$ac_abs_builddir&;t t -s&@abs_top_builddir@&$ac_abs_top_builddir&;t t -s&@INSTALL@&$ac_INSTALL&;t t -s&@MKDIR_P@&$ac_MKDIR_P&;t t -$ac_datarootdir_hack -" -eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \ - || as_fn_error "could not create $ac_file" "$LINENO" 5 - -test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && - { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && - { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' -which seems to be undefined. Please make sure it is defined." >&5 -$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' -which seems to be undefined. Please make sure it is defined." >&2;} - - rm -f "$tmp/stdin" - case $ac_file in - -) cat "$tmp/out" && rm -f "$tmp/out";; - *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";; - esac \ - || as_fn_error "could not create $ac_file" "$LINENO" 5 - ;; - :H) - # - # CONFIG_HEADER - # - if test x"$ac_file" != x-; then - { - $as_echo "/* $configure_input */" \ - && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" - } >"$tmp/config.h" \ - || as_fn_error "could not create $ac_file" "$LINENO" 5 - if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then - { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 -$as_echo "$as_me: $ac_file is unchanged" >&6;} - else - rm -f "$ac_file" - mv "$tmp/config.h" "$ac_file" \ - || as_fn_error "could not create $ac_file" "$LINENO" 5 - fi - else - $as_echo "/* $configure_input */" \ - && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \ - || as_fn_error "could not create -" "$LINENO" 5 - fi -# Compute "$ac_file"'s index in $config_headers. -_am_arg="$ac_file" -_am_stamp_count=1 -for _am_header in $config_headers :; do - case $_am_header in - $_am_arg | $_am_arg:* ) - break ;; - * ) - _am_stamp_count=`expr $_am_stamp_count + 1` ;; - esac -done -echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || -$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$_am_arg" : 'X\(//\)[^/]' \| \ - X"$_am_arg" : 'X\(//\)$' \| \ - X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$_am_arg" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'`/stamp-h$_am_stamp_count - ;; - - :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 -$as_echo "$as_me: executing $ac_file commands" >&6;} - ;; - esac - - - case $ac_file$ac_mode in - "depfiles":C) test x"$AMDEP_TRUE" != x"" || { - # Autoconf 2.62 quotes --file arguments for eval, but not when files - # are listed without --file. Let's play safe and only enable the eval - # if we detect the quoting. - case $CONFIG_FILES in - *\'*) eval set x "$CONFIG_FILES" ;; - *) set x $CONFIG_FILES ;; - esac - shift - for mf - do - # Strip MF so we end up with the name of the file. - mf=`echo "$mf" | sed -e 's/:.*$//'` - # Check whether this is an Automake generated Makefile or not. - # We used to match only the files named `Makefile.in', but - # some people rename them; so instead we look at the file content. - # Grep'ing the first line is not enough: some people post-process - # each Makefile.in and add a new line on top of each file to say so. - # Grep'ing the whole file is not good either: AIX grep has a line - # limit of 2048, but all sed's we know have understand at least 4000. - if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then - dirpart=`$as_dirname -- "$mf" || -$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$mf" : 'X\(//\)[^/]' \| \ - X"$mf" : 'X\(//\)$' \| \ - X"$mf" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$mf" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - else - continue - fi - # Extract the definition of DEPDIR, am__include, and am__quote - # from the Makefile without running `make'. - DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` - test -z "$DEPDIR" && continue - am__include=`sed -n 's/^am__include = //p' < "$mf"` - test -z "am__include" && continue - am__quote=`sed -n 's/^am__quote = //p' < "$mf"` - # When using ansi2knr, U may be empty or an underscore; expand it - U=`sed -n 's/^U = //p' < "$mf"` - # Find all dependency output files, they are included files with - # $(DEPDIR) in their names. We invoke sed twice because it is the - # simplest approach to changing $(DEPDIR) to its actual value in the - # expansion. - for file in `sed -n " - s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ - sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do - # Make sure the directory exists. - test -f "$dirpart/$file" && continue - fdir=`$as_dirname -- "$file" || -$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$file" : 'X\(//\)[^/]' \| \ - X"$file" : 'X\(//\)$' \| \ - X"$file" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$file" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - as_dir=$dirpart/$fdir; as_fn_mkdir_p - # echo "creating $dirpart/$file" - echo '# dummy' > "$dirpart/$file" - done - done -} - ;; - "libtool":C) - - # See if we are running on zsh, and set the options which allow our - # commands through without removal of \ escapes. - if test -n "${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST - fi - - cfgfile="${ofile}T" - trap "$RM \"$cfgfile\"; exit 1" 1 2 15 - $RM "$cfgfile" - - cat <<_LT_EOF >> "$cfgfile" -#! $SHELL - -# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. -# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION -# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: -# NOTE: Changes made to this file will be lost: look at ltmain.sh. -# -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, -# 2006, 2007, 2008 Free Software Foundation, Inc. -# Written by Gordon Matzigkeit, 1996 -# -# This file is part of GNU Libtool. -# -# GNU Libtool is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License as -# published by the Free Software Foundation; either version 2 of -# the License, or (at your option) any later version. -# -# As a special exception to the GNU General Public License, -# if you distribute this file as part of a program or library that -# is built using GNU Libtool, you may include this file under the -# same distribution terms that you use for the rest of that program. -# -# GNU Libtool is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with GNU Libtool; see the file COPYING. If not, a copy -# can be downloaded from http://www.gnu.org/licenses/gpl.html, or -# obtained by writing to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - - -# The names of the tagged configurations supported by this script. -available_tags="" - -# ### BEGIN LIBTOOL CONFIG - -# Which release of libtool.m4 was used? -macro_version=$macro_version -macro_revision=$macro_revision - -# Whether or not to build shared libraries. -build_libtool_libs=$enable_shared - -# Whether or not to build static libraries. -build_old_libs=$enable_static - -# What type of objects to build. -pic_mode=$pic_mode - -# Whether or not to optimize for fast installation. -fast_install=$enable_fast_install - -# The host system. -host_alias=$host_alias -host=$host -host_os=$host_os - -# The build system. -build_alias=$build_alias -build=$build -build_os=$build_os - -# A sed program that does not truncate output. -SED=$lt_SED - -# Sed that helps us avoid accidentally triggering echo(1) options like -n. -Xsed="\$SED -e 1s/^X//" - -# A grep program that handles long lines. -GREP=$lt_GREP - -# An ERE matcher. -EGREP=$lt_EGREP - -# A literal string matcher. -FGREP=$lt_FGREP - -# A BSD- or MS-compatible name lister. -NM=$lt_NM - -# Whether we need soft or hard links. -LN_S=$lt_LN_S - -# What is the maximum length of a command? -max_cmd_len=$max_cmd_len - -# Object file suffix (normally "o"). -objext=$ac_objext - -# Executable file suffix (normally ""). -exeext=$exeext - -# whether the shell understands "unset". -lt_unset=$lt_unset - -# turn spaces into newlines. -SP2NL=$lt_lt_SP2NL - -# turn newlines into spaces. -NL2SP=$lt_lt_NL2SP - -# How to create reloadable object files. -reload_flag=$lt_reload_flag -reload_cmds=$lt_reload_cmds - -# An object symbol dumper. -OBJDUMP=$lt_OBJDUMP - -# Method to check whether dependent libraries are shared objects. -deplibs_check_method=$lt_deplibs_check_method - -# Command to use when deplibs_check_method == "file_magic". -file_magic_cmd=$lt_file_magic_cmd - -# The archiver. -AR=$lt_AR -AR_FLAGS=$lt_AR_FLAGS - -# A symbol stripping program. -STRIP=$lt_STRIP - -# Commands used to install an old-style archive. -RANLIB=$lt_RANLIB -old_postinstall_cmds=$lt_old_postinstall_cmds -old_postuninstall_cmds=$lt_old_postuninstall_cmds - -# A C compiler. -LTCC=$lt_CC - -# LTCC compiler flags. -LTCFLAGS=$lt_CFLAGS - -# Take the output of nm and produce a listing of raw symbols and C names. -global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe - -# Transform the output of nm in a proper C declaration. -global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl - -# Transform the output of nm in a C name address pair. -global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address - -# Transform the output of nm in a C name address pair when lib prefix is needed. -global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix - -# The name of the directory that contains temporary libtool files. -objdir=$objdir - -# Shell to use when invoking shell scripts. -SHELL=$lt_SHELL - -# An echo program that does not interpret backslashes. -ECHO=$lt_ECHO - -# Used to examine libraries when file_magic_cmd begins with "file". -MAGIC_CMD=$MAGIC_CMD - -# Must we lock files when doing compilation? -need_locks=$lt_need_locks - -# Tool to manipulate archived DWARF debug symbol files on Mac OS X. -DSYMUTIL=$lt_DSYMUTIL - -# Tool to change global to local symbols on Mac OS X. -NMEDIT=$lt_NMEDIT - -# Tool to manipulate fat objects and archives on Mac OS X. -LIPO=$lt_LIPO - -# ldd/readelf like tool for Mach-O binaries on Mac OS X. -OTOOL=$lt_OTOOL - -# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. -OTOOL64=$lt_OTOOL64 - -# Old archive suffix (normally "a"). -libext=$libext - -# Shared library suffix (normally ".so"). -shrext_cmds=$lt_shrext_cmds - -# The commands to extract the exported symbol list from a shared archive. -extract_expsyms_cmds=$lt_extract_expsyms_cmds - -# Variables whose values should be saved in libtool wrapper scripts and -# restored at link time. -variables_saved_for_relink=$lt_variables_saved_for_relink - -# Do we need the "lib" prefix for modules? -need_lib_prefix=$need_lib_prefix - -# Do we need a version for libraries? -need_version=$need_version - -# Library versioning type. -version_type=$version_type - -# Shared library runtime path variable. -runpath_var=$runpath_var - -# Shared library path variable. -shlibpath_var=$shlibpath_var - -# Is shlibpath searched before the hard-coded library search path? -shlibpath_overrides_runpath=$shlibpath_overrides_runpath - -# Format of library name prefix. -libname_spec=$lt_libname_spec - -# List of archive names. First name is the real one, the rest are links. -# The last name is the one that the linker finds with -lNAME -library_names_spec=$lt_library_names_spec - -# The coded name of the library, if different from the real name. -soname_spec=$lt_soname_spec - -# Command to use after installation of a shared archive. -postinstall_cmds=$lt_postinstall_cmds - -# Command to use after uninstallation of a shared archive. -postuninstall_cmds=$lt_postuninstall_cmds - -# Commands used to finish a libtool library installation in a directory. -finish_cmds=$lt_finish_cmds - -# As "finish_cmds", except a single script fragment to be evaled but -# not shown. -finish_eval=$lt_finish_eval - -# Whether we should hardcode library paths into libraries. -hardcode_into_libs=$hardcode_into_libs - -# Compile-time system search path for libraries. -sys_lib_search_path_spec=$lt_sys_lib_search_path_spec - -# Run-time system search path for libraries. -sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec - -# Whether dlopen is supported. -dlopen_support=$enable_dlopen - -# Whether dlopen of programs is supported. -dlopen_self=$enable_dlopen_self - -# Whether dlopen of statically linked programs is supported. -dlopen_self_static=$enable_dlopen_self_static - -# Commands to strip libraries. -old_striplib=$lt_old_striplib -striplib=$lt_striplib - - -# The linker used to build libraries. -LD=$lt_LD - -# Commands used to build an old-style archive. -old_archive_cmds=$lt_old_archive_cmds - -# A language specific compiler. -CC=$lt_compiler - -# Is the compiler the GNU compiler? -with_gcc=$GCC - -# Compiler flag to turn off builtin functions. -no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag - -# How to pass a linker flag through the compiler. -wl=$lt_lt_prog_compiler_wl - -# Additional compiler flags for building library objects. -pic_flag=$lt_lt_prog_compiler_pic - -# Compiler flag to prevent dynamic linking. -link_static_flag=$lt_lt_prog_compiler_static - -# Does compiler simultaneously support -c and -o options? -compiler_c_o=$lt_lt_cv_prog_compiler_c_o - -# Whether or not to add -lc for building shared libraries. -build_libtool_need_lc=$archive_cmds_need_lc - -# Whether or not to disallow shared libs when runtime libs are static. -allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes - -# Compiler flag to allow reflexive dlopens. -export_dynamic_flag_spec=$lt_export_dynamic_flag_spec - -# Compiler flag to generate shared objects directly from archives. -whole_archive_flag_spec=$lt_whole_archive_flag_spec - -# Whether the compiler copes with passing no objects directly. -compiler_needs_object=$lt_compiler_needs_object - -# Create an old-style archive from a shared archive. -old_archive_from_new_cmds=$lt_old_archive_from_new_cmds - -# Create a temporary old-style archive to link instead of a shared archive. -old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds - -# Commands used to build a shared archive. -archive_cmds=$lt_archive_cmds -archive_expsym_cmds=$lt_archive_expsym_cmds - -# Commands used to build a loadable module if different from building -# a shared archive. -module_cmds=$lt_module_cmds -module_expsym_cmds=$lt_module_expsym_cmds - -# Whether we are building with GNU ld or not. -with_gnu_ld=$lt_with_gnu_ld - -# Flag that allows shared libraries with undefined symbols to be built. -allow_undefined_flag=$lt_allow_undefined_flag - -# Flag that enforces no undefined symbols. -no_undefined_flag=$lt_no_undefined_flag - -# Flag to hardcode \$libdir into a binary during linking. -# This must work even if \$libdir does not exist -hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec - -# If ld is used when linking, flag to hardcode \$libdir into a binary -# during linking. This must work even if \$libdir does not exist. -hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld - -# Whether we need a single "-rpath" flag with a separated argument. -hardcode_libdir_separator=$lt_hardcode_libdir_separator - -# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes -# DIR into the resulting binary. -hardcode_direct=$hardcode_direct - -# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes -# DIR into the resulting binary and the resulting library dependency is -# "absolute",i.e impossible to change by setting \${shlibpath_var} if the -# library is relocated. -hardcode_direct_absolute=$hardcode_direct_absolute - -# Set to "yes" if using the -LDIR flag during linking hardcodes DIR -# into the resulting binary. -hardcode_minus_L=$hardcode_minus_L - -# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR -# into the resulting binary. -hardcode_shlibpath_var=$hardcode_shlibpath_var - -# Set to "yes" if building a shared library automatically hardcodes DIR -# into the library and all subsequent libraries and executables linked -# against it. -hardcode_automatic=$hardcode_automatic - -# Set to yes if linker adds runtime paths of dependent libraries -# to runtime path list. -inherit_rpath=$inherit_rpath - -# Whether libtool must link a program against all its dependency libraries. -link_all_deplibs=$link_all_deplibs - -# Fix the shell variable \$srcfile for the compiler. -fix_srcfile_path=$lt_fix_srcfile_path - -# Set to "yes" if exported symbols are required. -always_export_symbols=$always_export_symbols - -# The commands to list exported symbols. -export_symbols_cmds=$lt_export_symbols_cmds - -# Symbols that should not be listed in the preloaded symbols. -exclude_expsyms=$lt_exclude_expsyms - -# Symbols that must always be exported. -include_expsyms=$lt_include_expsyms - -# Commands necessary for linking programs (against libraries) with templates. -prelink_cmds=$lt_prelink_cmds - -# Specify filename containing input files. -file_list_spec=$lt_file_list_spec - -# How to hardcode a shared library path into an executable. -hardcode_action=$hardcode_action - -# ### END LIBTOOL CONFIG - -_LT_EOF - - case $host_os in - aix3*) - cat <<\_LT_EOF >> "$cfgfile" -# AIX sometimes has problems with the GCC collect2 program. For some -# reason, if we set the COLLECT_NAMES environment variable, the problems -# vanish in a puff of smoke. -if test "X${COLLECT_NAMES+set}" != Xset; then - COLLECT_NAMES= - export COLLECT_NAMES -fi -_LT_EOF - ;; - esac - - -ltmain="$ac_aux_dir/ltmain.sh" - - - # We use sed instead of cat because bash on DJGPP gets confused if - # if finds mixed CR/LF and LF-only lines. Since sed operates in - # text mode, it properly converts lines to CR/LF. This bash problem - # is reportedly fixed, but why not run on old versions too? - sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \ - || (rm -f "$cfgfile"; exit 1) - - case $xsi_shell in - yes) - cat << \_LT_EOF >> "$cfgfile" - -# func_dirname file append nondir_replacement -# Compute the dirname of FILE. If nonempty, add APPEND to the result, -# otherwise set result to NONDIR_REPLACEMENT. -func_dirname () -{ - case ${1} in - */*) func_dirname_result="${1%/*}${2}" ;; - * ) func_dirname_result="${3}" ;; - esac -} - -# func_basename file -func_basename () -{ - func_basename_result="${1##*/}" -} - -# func_dirname_and_basename file append nondir_replacement -# perform func_basename and func_dirname in a single function -# call: -# dirname: Compute the dirname of FILE. If nonempty, -# add APPEND to the result, otherwise set result -# to NONDIR_REPLACEMENT. -# value returned in "$func_dirname_result" -# basename: Compute filename of FILE. -# value retuned in "$func_basename_result" -# Implementation must be kept synchronized with func_dirname -# and func_basename. For efficiency, we do not delegate to -# those functions but instead duplicate the functionality here. -func_dirname_and_basename () -{ - case ${1} in - */*) func_dirname_result="${1%/*}${2}" ;; - * ) func_dirname_result="${3}" ;; - esac - func_basename_result="${1##*/}" -} - -# func_stripname prefix suffix name -# strip PREFIX and SUFFIX off of NAME. -# PREFIX and SUFFIX must not contain globbing or regex special -# characters, hashes, percent signs, but SUFFIX may contain a leading -# dot (in which case that matches only a dot). -func_stripname () -{ - # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are - # positional parameters, so assign one to ordinary parameter first. - func_stripname_result=${3} - func_stripname_result=${func_stripname_result#"${1}"} - func_stripname_result=${func_stripname_result%"${2}"} -} - -# func_opt_split -func_opt_split () -{ - func_opt_split_opt=${1%%=*} - func_opt_split_arg=${1#*=} -} - -# func_lo2o object -func_lo2o () -{ - case ${1} in - *.lo) func_lo2o_result=${1%.lo}.${objext} ;; - *) func_lo2o_result=${1} ;; - esac -} - -# func_xform libobj-or-source -func_xform () -{ - func_xform_result=${1%.*}.lo -} - -# func_arith arithmetic-term... -func_arith () -{ - func_arith_result=$(( $* )) -} - -# func_len string -# STRING may not start with a hyphen. -func_len () -{ - func_len_result=${#1} -} - -_LT_EOF - ;; - *) # Bourne compatible functions. - cat << \_LT_EOF >> "$cfgfile" - -# func_dirname file append nondir_replacement -# Compute the dirname of FILE. If nonempty, add APPEND to the result, -# otherwise set result to NONDIR_REPLACEMENT. -func_dirname () -{ - # Extract subdirectory from the argument. - func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"` - if test "X$func_dirname_result" = "X${1}"; then - func_dirname_result="${3}" - else - func_dirname_result="$func_dirname_result${2}" - fi -} - -# func_basename file -func_basename () -{ - func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"` -} - - -# func_stripname prefix suffix name -# strip PREFIX and SUFFIX off of NAME. -# PREFIX and SUFFIX must not contain globbing or regex special -# characters, hashes, percent signs, but SUFFIX may contain a leading -# dot (in which case that matches only a dot). -# func_strip_suffix prefix name -func_stripname () -{ - case ${2} in - .*) func_stripname_result=`$ECHO "X${3}" \ - | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;; - *) func_stripname_result=`$ECHO "X${3}" \ - | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;; - esac -} - -# sed scripts: -my_sed_long_opt='1s/^\(-[^=]*\)=.*/\1/;q' -my_sed_long_arg='1s/^-[^=]*=//' - -# func_opt_split -func_opt_split () -{ - func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"` - func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"` -} - -# func_lo2o object -func_lo2o () -{ - func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"` -} - -# func_xform libobj-or-source -func_xform () -{ - func_xform_result=`$ECHO "X${1}" | $Xsed -e 's/\.[^.]*$/.lo/'` -} - -# func_arith arithmetic-term... -func_arith () -{ - func_arith_result=`expr "$@"` -} - -# func_len string -# STRING may not start with a hyphen. -func_len () -{ - func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len` -} - -_LT_EOF -esac - -case $lt_shell_append in - yes) - cat << \_LT_EOF >> "$cfgfile" - -# func_append var value -# Append VALUE to the end of shell variable VAR. -func_append () -{ - eval "$1+=\$2" -} -_LT_EOF - ;; - *) - cat << \_LT_EOF >> "$cfgfile" - -# func_append var value -# Append VALUE to the end of shell variable VAR. -func_append () -{ - eval "$1=\$$1\$2" -} - -_LT_EOF - ;; - esac - - - sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \ - || (rm -f "$cfgfile"; exit 1) - - mv -f "$cfgfile" "$ofile" || - (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") - chmod +x "$ofile" - - ;; - "default":C) test -z "$CONFIG_HEADERS" || echo timestamp > stamp-h ;; - - esac -done # for ac_tag - - -as_fn_exit 0 -_ACEOF -ac_clean_files=$ac_clean_files_save - -test $ac_write_fail = 0 || - as_fn_error "write failure creating $CONFIG_STATUS" "$LINENO" 5 - - -# configure is writing to config.log, and then calls config.status. -# config.status does its own redirection, appending to config.log. -# Unfortunately, on DOS this fails, as config.log is still kept open -# by configure, so config.status won't be able to write to it; its -# output is simply discarded. So we exec the FD to /dev/null, -# effectively closing config.log, so it can be properly (re)opened and -# appended to by config.status. When coming back to configure, we -# need to make the FD available again. -if test "$no_create" != yes; then - ac_cs_success=: - ac_config_status_args= - test "$silent" = yes && - ac_config_status_args="$ac_config_status_args --quiet" - exec 5>/dev/null - $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false - exec 5>>config.log - # Use ||, not &&, to avoid exiting from the if with $? = 1, which - # would make configure fail if this is the last instruction. - $ac_cs_success || as_fn_exit $? -fi -if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 -$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} -fi - diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/configure.in b/openair3/PMIPv6/freeradius-client-1.1.6/configure.in deleted file mode 100644 index 4f194bda4e..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/configure.in +++ /dev/null @@ -1,331 +0,0 @@ -# -# $Id: configure.in,v 1.38 2008/03/05 18:02:55 cparker Exp $ -# -# Copyright (C) 1996,1997 Lars Fenneberg -# -# See the file COPYRIGHT for the respective terms and conditions. -# -# - -AC_INIT - -AM_MAINTAINER_MODE - -AC_CONFIG_SRCDIR([src/radlogin.c]) -AC_CANONICAL_TARGET([]) - -case "$target" in - *) - ;; -esac - -AM_INIT_AUTOMAKE(radiusclient, 1.1.6) - -LIBVERSION=2:0:0 -AC_SUBST(LIBVERSION) - -pkgsysconfdir=${sysconfdir}/$PACKAGE -AC_SUBST(pkgsysconfdir) - -AC_PROG_LIBTOOL - -AC_PROG_CC - -dnl Needed for normal compile -AC_PATH_PROG(AR, ar) -AM_PROG_LIBTOOL - -dnl HAVE_SHADOW_PASSWORDS -AC_MSG_CHECKING(whether to include shadow password support) -AC_ARG_ENABLE(shadow, -[ --enable-shadow Enable shadow password support], -[ - AC_MSG_RESULT(yes) - AC_DEFINE(HAVE_SHADOW_PASSWORDS) - shadow_passwords=yes -], -[ - AC_MSG_RESULT(no) - shadow_passwords=no -] -) - -dnl Check if we need -lsocket. -AC_CHECK_LIB(socket, socket) - -dnl Check if we need -lnsl. Usually if we want to -dnl link against -lsocket we need to include -lnsl as well. -AC_CHECK_LIB(nsl, gethostbyaddr) - -dnl Check the style of gethostbyaddr, in order of preference -dnl GNU (_r eight args) -dnl SYSV (_r six args) -dnl BSD (three args, may not be thread safe) -dnl Tru64 has BSD version, but it is thread safe -dnl http://h30097.www3.hp.com/docs/base_doc/DOCUMENTATION/V51B_HTML/MAN/MAN3/1739____.HTM -dnl We need #stdio.h to define NULL on FreeBSD (at least) -gethostbyaddrrstyle="" -AC_MSG_CHECKING([gethostbyaddr_r() syntax]) -case "$host" in -*-freebsd*) - AC_DEFINE([GETHOSTBYADDR_R], [], [Define to 1 us gethostbyaddr_r()]) - AC_DEFINE([GETHOSTBYADDRRSTYLE_BSD], [], [Define to 1 to use bsd-style gethostbyaddr_r()]) - gethostbyaddrrstyle=BSD - AC_MSG_WARN([FreeBSD overridden to BSD-style]) - ;; -esac -if test "x$gethostbyaddrrstyle" = "x"; then - AC_TRY_LINK([ -#include -#include -], [ gethostbyaddr_r(NULL, 0, 0, NULL, NULL, 0, NULL, NULL) ], [ - AC_DEFINE(GETHOSTBYADDR_R) - AC_DEFINE([GETHOSTBYADDRRSTYLE_GNU], [], [Define to 1 to use gnu-style gethostbyaddr_r()]) - gethostbyaddrrstyle=GNU -]) -fi -if test "x$gethostbyaddrrstyle" = "x"; then - AC_TRY_LINK([ -#include -#include -], [ gethostbyaddr_r(NULL, 0, 0, NULL, NULL, 0, NULL) ] , [ - AC_DEFINE(GETHOSTBYADDR_R) - AC_DEFINE([GETHOSTBYADDRRSTYLE_SYSV], [], [Define to 1 to use sysv-style gethostbyaddr_r()]) - gethostbyaddrrstyle=SYSV -]) -fi -if test "x$gethostbyaddrrstyle" = "x"; then - AC_TRY_LINK([ -#include -#include -], [ gethostbyaddr(NULL, 0, 0) ], [ - AC_DEFINE(GETHOSTBYADDR_R) - AC_DEFINE(GETHOSTBYADDRRSTYLE_BSD) - gethostbyaddrrstyle=BSD -]) -fi - -if test "x$gethostbyaddrrstyle" = "x"; then - AC_MSG_RESULT([none! It must not exist, here.]) -else - AC_MSG_RESULT([${gethostbyaddrrstyle}-style]) -fi - -if test "x$gethostbyaddrrstyle" = "xBSD"; then - AC_MSG_WARN([ ****** BSD-style gethostbyaddr might NOT be thread-safe! ****** ]) -fi - -dnl Check the style of gethostbyname, in order of preference -dnl GNU (_r seven args) -dnl SYSV (_r five args) -dnl BSD (two args, may not be thread safe) -dnl Tru64 has BSD version, but it _is_ thread safe -dnl http://h30097.www3.hp.com/docs/base_doc/DOCUMENTATION/V51B_HTML/MAN/MAN3/1946____.HTM -dnl We need #stdio.h to define NULL on FreeBSD (at least) -gethostbynamerstyle="" -AC_MSG_CHECKING([gethostbyname_r() syntax]) -AC_TRY_LINK([ -#include -#include -], [ gethostbyname_r(NULL, NULL, NULL, 0, NULL, NULL) ], [ - AC_DEFINE([GETHOSTBYNAME_R], [], [Define to 1 to use gethostbyname_r()]) - AC_DEFINE([GETHOSTBYNAMERSTYLE_GNU], [], [Define to 1 to use gnu-style gethostbyname_r()]) - gethostbynamerstyle=GNU -]) -if test "x$gethostbynamerstyle" = "x"; then - AC_TRY_LINK([ -#include -#include -], [ gethostbyname_r(NULL, NULL, NULL, 0, NULL) ] , [ - AC_DEFINE(GETHOSTBYNAME_R) - AC_DEFINE([GETHOSTBYNAMERSTYLE_SYSV], [], [Define to 1 to use sysv-style gethostbyname_r()]) - gethostbynamerstyle=SYSV -]) -fi -if test "x$gethostbynamerstyle" = "x"; then - AC_TRY_LINK([ -#include -#include -], [ gethostbyname(NULL) ], [ - AC_DEFINE(GETHOSTBYNAME_R) - AC_DEFINE([GETHOSTBYNAMERSTYLE_BSD], [], [Define to 1 to use bsd-style gethostbyname_r()]) - gethostbynamerstyle=BSD -]) -fi - -if test "x$gethostbynamerstyle" = "x"; then - AC_MSG_RESULT([none! It must not exist, here.]) -else - AC_MSG_RESULT([${gethostbynamerstyle}-style]) -fi - -if test "x$gethostbynamerstyle" = "xBSD"; then - AC_MSG_WARN([ ****** BSD-style gethostbyname might NOT be thread-safe! ****** ]) -fi - -AC_CHECK_LIB(crypt, crypt) - -dnl Checks for endianness -AC_C_BIGENDIAN -if test $ac_cv_c_bigendian = yes; then - AC_DEFINE(BIG_ENDIAN) -else - AC_DEFINE(LITTLE_ENDIAN) -fi - -dnl Checks for header files. -AC_HEADER_DIRENT -AC_HEADER_STDC -AC_CHECK_HEADERS(crypt.h signal.h sys/signal.h sys/stat.h) -AC_CHECK_HEADERS(fcntl.h sys/fcntl.h) -AC_CHECK_HEADERS(sys/utsname.h getopt.h unistd.h) -AC_CHECK_HEADERS(sys/file.h termios.h sys/ioctl.h) -AC_CHECK_HEADERS(netdb.h syslog.h pwd.h) -AC_CHECK_HEADERS(sys/socket.h netinet/in.h arpa/inet.h) -if test "$shadow_passwords" = "yes" -then - AC_CHECK_HEADER(shadow.h) -fi - - -dnl Checks for typedefs, structures, and compiler characteristics. -AC_C_CONST -AC_TYPE_OFF_T -AC_TYPE_SIZE_T -AC_HEADER_TIME -AC_STRUCT_TM - -dnl Checks for library functions. -AC_PROG_GCC_TRADITIONAL -AC_FUNC_MEMCMP -AC_FUNC_SETVBUF_REVERSED -AC_TYPE_SIGNAL -AC_FUNC_STRFTIME -AC_FUNC_ALLOCA -AC_REPLACE_FUNCS(strdup strerror strcasecmp) -AC_CHECK_FUNCS(flock fcntl uname gethostname sysinfo getdomainname) -AC_CHECK_FUNCS(stricmp random rand snprintf vsnprintf) - -if test "$ac_cv_func_uname" = 'yes' -then - AC_MSG_CHECKING([for field domainname in struct utsname]) - AC_TRY_RUN([ - #include - - main(int argc, char **argv) - { - struct utsname uts; - uts.domainname[0] = '\0'; - } - ], - AC_MSG_RESULT(yes) - AC_DEFINE(HAVE_STRUCT_UTSNAME_DOMAINNAME), - AC_MSG_RESULT(no) - ) -fi - -AC_MSG_CHECKING([for /dev/urandom]) -if test -c /dev/urandom -then - AC_MSG_RESULT(yes) - AC_DEFINE(HAVE_DEV_URANDOM) -else - AC_MSG_RESULT(no) -fi - -dnl Determine PATH setting -echo $ac_n "using the following PATH setting for exec'ed programs... $ac_c" 1>&6 -AC_ARG_WITH(secure-path, -[ --with-secure-path PATH setting for exec'ed programs], -[ - AC_MSG_RESULT($withval) - RC_SECURE_PATH=$withval -], -[ - AC_MSG_RESULT(/bin:/usr/bin:/usr/local/bin) - RC_SECURE_PATH=/bin:/usr/bin:/usr/local/bin -] -) - -dnl Checking which syslog facility to use -AC_MSG_CHECKING(which syslog facility to use) -AC_ARG_WITH(facility, -[ --with-facility Syslog facility to use], -[ - AC_MSG_RESULT($withval) - RC_LOG_FACILITY=$withval -], -[ - AC_MSG_RESULT(LOG_DAEMON) - RC_LOG_FACILITY=LOG_DAEMON -] -) - -dnl RADIUS_116 -AC_MSG_CHECKING(whether to include Livingston's RADIUS server 1.16 kludge) -AC_ARG_ENABLE(radius-116, -[ --enable-radius-116 Include support for Livingston's RADIUS server 1.16], -[ - AC_MSG_RESULT(yes) - AC_DEFINE(RADIUS_116) - AC_MSG_WARN([!! This is a bug in Livingston's RADIUS server v1.16. There]) - AC_MSG_WARN([!! is a patch included with radiusclient which fixes this]) - AC_MSG_WARN([!! problem. See patches/radiusd-1.16.accounting.diff. With]) - AC_MSG_WARN([!! the patched RADIUS server you no longer need to activate]) - AC_MSG_WARN([!! this hack.]) -], -[ - AC_MSG_RESULT(no) -] -) - -dnl SCP -AC_MSG_CHECKING(whether to add service type hints derived from username prefix) -AC_ARG_ENABLE(scp, -[ --enable-scp Add service type hints derived from username prefix], -[ - AC_MSG_RESULT(yes) - AC_DEFINE(SCP) -], -[ - AC_MSG_RESULT(no) -] -) - -AC_SUBST(RC_SECURE_PATH) -AC_SUBST(RC_LOG_FACILITY) - -AH_OUTPUT([BIG_ENDIAN], [/* is big endian arch ? */ -#undef BIG_ENDIAN]) -AH_OUTPUT([LITTLE_ENDIAN], [/* is little endian arch ? */ -#undef LITTLE_ENDIAN]) -AH_OUTPUT([HAVE_DEV_URANDOM], [/* does /dev/urandom exist ? */ -#undef HAVE_DEV_URANDOM]) -AH_OUTPUT([HAVE_SHADOW_PASSWORDS], [/* shadow password support */ -#undef HAVE_SHADOW_PASSWORDS]) -AH_OUTPUT([HAVE_STRUCT_UTSNAME_DOMAINNAME], [/*struct utsname has domainname field */ -#undef HAVE_STRUCT_UTSNAME_DOMAINNAME]) -AH_OUTPUT([NEED_SIG_PROTOTYPES], [/* do you need the sig* prototypes ? */ -#undef NEED_SIG_PROTOTYPES]) -AH_OUTPUT([RADIUS_116], [/* include code to kludge aroung Livingston RADIUS server 1.16 */ -#undef RADIUS_116]) -AH_OUTPUT([SCP], [/* SCP support */ -#undef SCP]) -AH_OUTPUT([PACKAGE], [ -#undef PACKAGE]) -AH_OUTPUT([VERSION], [ -#undef VERSION]) - -AM_CONFIG_HEADER(config.h) -dnl LTLIBOBJS=`echo "$LIB@&t@OBJS" | sed 's,\.[[^.]]* ,.lo ,g;s,\.[[^.]]*$,.lo,'` -dnl AC_SUBST(LTLIBOBJS) -AC_CONFIG_FILES([ -Makefile -include/Makefile lib/Makefile src/Makefile man/Makefile etc/Makefile -doc/Makefile patches/Makefile -login.radius/Makefile login.radius/migs/Makefile -rpm/Makefile -debian/Makefile -]) -AC_CONFIG_COMMANDS([default],[[test -z "$CONFIG_HEADERS" || echo timestamp > stamp-h]],[[]]) -AC_OUTPUT diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/debian/Makefile b/openair3/PMIPv6/freeradius-client-1.1.6/debian/Makefile deleted file mode 100644 index 1acceb5e3d..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/debian/Makefile +++ /dev/null @@ -1,377 +0,0 @@ -# Makefile.in generated by automake 1.11.1 from Makefile.am. -# debian/Makefile. Generated from Makefile.in by configure. - -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, -# Inc. -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - - - -# -# $Id: Makefile.am,v 1.1 2004/11/17 13:13:42 janakj Exp $ -# -# Copyright (C) 1997 Lars Fenneberg -# -# See the file COPYRIGHT for the respective terms and conditions. -# If the file is missing contact me at lf@elemental.net -# and I'll send you a copy. -# -# - -pkgdatadir = $(datadir)/radiusclient -pkgincludedir = $(includedir)/radiusclient -pkglibdir = $(libdir)/radiusclient -pkglibexecdir = $(libexecdir)/radiusclient -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = i686-pc-linux-gnu -host_triplet = i686-pc-linux-gnu -target_triplet = i686-pc-linux-gnu -subdir = debian -DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/configure.in -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs -CONFIG_HEADER = $(top_builddir)/config.h -CONFIG_CLEAN_FILES = -CONFIG_CLEAN_VPATH_FILES = -SOURCES = -DIST_SOURCES = -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = ${SHELL} /usr/local/src/freeradius-client-1.1.6/missing --run aclocal-1.11 -ALLOCA = -AMTAR = ${SHELL} /usr/local/src/freeradius-client-1.1.6/missing --run tar -AR = /usr/bin/ar -AUTOCONF = ${SHELL} /usr/local/src/freeradius-client-1.1.6/missing --run autoconf -AUTOHEADER = ${SHELL} /usr/local/src/freeradius-client-1.1.6/missing --run autoheader -AUTOMAKE = ${SHELL} /usr/local/src/freeradius-client-1.1.6/missing --run automake-1.11 -AWK = gawk -CC = gcc -CCDEPMODE = depmode=gcc3 -CFLAGS = -g -O2 -CPP = gcc -E -CPPFLAGS = -CYGPATH_W = echo -DEFS = -DHAVE_CONFIG_H -DEPDIR = .deps -DSYMUTIL = -DUMPBIN = -ECHO_C = -ECHO_N = -n -ECHO_T = -EGREP = /bin/grep -E -EXEEXT = -FGREP = /bin/grep -F -GREP = /bin/grep -INSTALL = /usr/bin/install -c -INSTALL_DATA = ${INSTALL} -m 644 -INSTALL_PROGRAM = ${INSTALL} -INSTALL_SCRIPT = ${INSTALL} -INSTALL_STRIP_PROGRAM = $(install_sh) -c -s -LD = /usr/bin/ld -LDFLAGS = -LIBOBJS = -LIBS = -lcrypt -lnsl -LIBTOOL = $(SHELL) $(top_builddir)/libtool -LIBVERSION = 2:0:0 -LIPO = -LN_S = ln -s -LTLIBOBJS = -MAINT = # -MAKEINFO = ${SHELL} /usr/local/src/freeradius-client-1.1.6/missing --run makeinfo -MKDIR_P = /bin/mkdir -p -NM = /usr/bin/nm -B -NMEDIT = -OBJDUMP = objdump -OBJEXT = o -OTOOL = -OTOOL64 = -PACKAGE = radiusclient -PACKAGE_BUGREPORT = -PACKAGE_NAME = -PACKAGE_STRING = -PACKAGE_TARNAME = -PACKAGE_URL = -PACKAGE_VERSION = -PATH_SEPARATOR = : -RANLIB = ranlib -RC_LOG_FACILITY = LOG_DAEMON -RC_SECURE_PATH = /bin:/usr/bin:/usr/local/bin -SED = /bin/sed -SET_MAKE = -SHELL = /bin/bash -STRIP = strip -VERSION = 1.1.6 -abs_builddir = /usr/local/src/freeradius-client-1.1.6/debian -abs_srcdir = /usr/local/src/freeradius-client-1.1.6/debian -abs_top_builddir = /usr/local/src/freeradius-client-1.1.6 -abs_top_srcdir = /usr/local/src/freeradius-client-1.1.6 -ac_ct_CC = gcc -ac_ct_DUMPBIN = -am__include = include -am__leading_dot = . -am__quote = -am__tar = ${AMTAR} chof - "$$tardir" -am__untar = ${AMTAR} xf - -bindir = ${exec_prefix}/bin -build = i686-pc-linux-gnu -build_alias = -build_cpu = i686 -build_os = linux-gnu -build_vendor = pc -builddir = . -datadir = ${datarootdir} -datarootdir = ${prefix}/share -docdir = ${datarootdir}/doc/${PACKAGE} -dvidir = ${docdir} -exec_prefix = ${prefix} -host = i686-pc-linux-gnu -host_alias = -host_cpu = i686 -host_os = linux-gnu -host_vendor = pc -htmldir = ${docdir} -includedir = ${prefix}/include -infodir = ${datarootdir}/info -install_sh = ${SHELL} /usr/local/src/freeradius-client-1.1.6/install-sh -libdir = ${exec_prefix}/lib -libexecdir = ${exec_prefix}/libexec -localedir = ${datarootdir}/locale -localstatedir = ${prefix}/var -lt_ECHO = echo -mandir = ${datarootdir}/man -mkdir_p = /bin/mkdir -p -oldincludedir = /usr/include -pdfdir = ${docdir} -pkgsysconfdir = ${prefix}/etc/radiusclient -prefix = /usr/local -program_transform_name = s,x,x, -psdir = ${docdir} -sbindir = ${exec_prefix}/sbin -sharedstatedir = ${prefix}/com -srcdir = . -sysconfdir = ${prefix}/etc -target = i686-pc-linux-gnu -target_alias = -target_cpu = i686 -target_os = linux-gnu -target_vendor = pc -top_build_prefix = ../ -top_builddir = .. -top_srcdir = .. -AUTOMAKE_OPTIONS = foreign -EXTRA_DIST = README.debian changelog conffiles control copyright dirs \ - docs examples files libradius-ng-dev.dirs libradius-ng-dev.files \ - libradius-ng.conffiles libradius-ng.dirs libradius-ng.files \ - libradius-ng.postinst libradius-ng.substvars postrm \ - radiusclient-ng.dirs radiusclient-ng.files \ - radiusclient-ng.postinst rules substvars watch - -all: all-am - -.SUFFIXES: -$(srcdir)/Makefile.in: # $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ - && { if test -f $@; then exit 0; else break; fi; }; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign debian/Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --foreign debian/Makefile -.PRECIOUS: Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: # $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): # $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(am__aclocal_m4_deps): - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs -tags: TAGS -TAGS: - -ctags: CTAGS -CTAGS: - - -distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - list='$(DISTFILES)'; \ - dist_files=`for file in $$list; do echo $$file; done | \ - sed -e "s|^$$srcdirstrip/||;t" \ - -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ - case $$dist_files in \ - */*) $(MKDIR_P) `echo "$$dist_files" | \ - sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ - sort -u` ;; \ - esac; \ - for file in $$dist_files; do \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - if test -d $$d/$$file; then \ - dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test -d "$(distdir)/$$file"; then \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ - else \ - test -f "$(distdir)/$$file" \ - || cp -p $$d/$$file "$(distdir)/$$file" \ - || exit 1; \ - fi; \ - done -check-am: all-am -check: check-am -all-am: Makefile -installdirs: -install: install-am -install-exec: install-exec-am -install-data: install-data-am -uninstall: uninstall-am - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-am -install-strip: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install -mostlyclean-generic: - -clean-generic: - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." -clean: clean-am - -clean-am: clean-generic clean-libtool mostlyclean-am - -distclean: distclean-am - -rm -f Makefile -distclean-am: clean-am distclean-generic - -dvi: dvi-am - -dvi-am: - -html: html-am - -html-am: - -info: info-am - -info-am: - -install-data-am: - -install-dvi: install-dvi-am - -install-dvi-am: - -install-exec-am: - -install-html: install-html-am - -install-html-am: - -install-info: install-info-am - -install-info-am: - -install-man: - -install-pdf: install-pdf-am - -install-pdf-am: - -install-ps: install-ps-am - -install-ps-am: - -installcheck-am: - -maintainer-clean: maintainer-clean-am - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-am - -mostlyclean-am: mostlyclean-generic mostlyclean-libtool - -pdf: pdf-am - -pdf-am: - -ps: ps-am - -ps-am: - -uninstall-am: - -.MAKE: install-am install-strip - -.PHONY: all all-am check check-am clean clean-generic clean-libtool \ - distclean distclean-generic distclean-libtool distdir dvi \ - dvi-am html html-am info info-am install install-am \ - install-data install-data-am install-dvi install-dvi-am \ - install-exec install-exec-am install-html install-html-am \ - install-info install-info-am install-man install-pdf \ - install-pdf-am install-ps install-ps-am install-strip \ - installcheck installcheck-am installdirs maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-generic \ - mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am - - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/debian/Makefile.am b/openair3/PMIPv6/freeradius-client-1.1.6/debian/Makefile.am deleted file mode 100644 index 7ecd7790af..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/debian/Makefile.am +++ /dev/null @@ -1,20 +0,0 @@ -# -# $Id: Makefile.am,v 1.1 2004/11/17 13:13:42 janakj Exp $ -# -# Copyright (C) 1997 Lars Fenneberg -# -# See the file COPYRIGHT for the respective terms and conditions. -# If the file is missing contact me at lf@elemental.net -# and I'll send you a copy. -# -# - -AUTOMAKE_OPTIONS = foreign - -EXTRA_DIST = README.debian changelog conffiles control copyright dirs \ - docs examples files libradius-ng-dev.dirs libradius-ng-dev.files \ - libradius-ng.conffiles libradius-ng.dirs libradius-ng.files \ - libradius-ng.postinst libradius-ng.substvars postrm \ - radiusclient-ng.dirs radiusclient-ng.files \ - radiusclient-ng.postinst rules substvars watch - diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/debian/Makefile.in b/openair3/PMIPv6/freeradius-client-1.1.6/debian/Makefile.in deleted file mode 100644 index 6ffa7bf2e7..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/debian/Makefile.in +++ /dev/null @@ -1,377 +0,0 @@ -# Makefile.in generated by automake 1.11.1 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, -# Inc. -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -@SET_MAKE@ - -# -# $Id: Makefile.am,v 1.1 2004/11/17 13:13:42 janakj Exp $ -# -# Copyright (C) 1997 Lars Fenneberg -# -# See the file COPYRIGHT for the respective terms and conditions. -# If the file is missing contact me at lf@elemental.net -# and I'll send you a copy. -# -# -VPATH = @srcdir@ -pkgdatadir = $(datadir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ -pkglibexecdir = $(libexecdir)/@PACKAGE@ -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = @build@ -host_triplet = @host@ -target_triplet = @target@ -subdir = debian -DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/configure.in -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs -CONFIG_HEADER = $(top_builddir)/config.h -CONFIG_CLEAN_FILES = -CONFIG_CLEAN_VPATH_FILES = -SOURCES = -DIST_SOURCES = -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = @ACLOCAL@ -ALLOCA = @ALLOCA@ -AMTAR = @AMTAR@ -AR = @AR@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -CC = @CC@ -CCDEPMODE = @CCDEPMODE@ -CFLAGS = @CFLAGS@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CYGPATH_W = @CYGPATH_W@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -DSYMUTIL = @DSYMUTIL@ -DUMPBIN = @DUMPBIN@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -EXEEXT = @EXEEXT@ -FGREP = @FGREP@ -GREP = @GREP@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -LD = @LD@ -LDFLAGS = @LDFLAGS@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LIBTOOL = @LIBTOOL@ -LIBVERSION = @LIBVERSION@ -LIPO = @LIPO@ -LN_S = @LN_S@ -LTLIBOBJS = @LTLIBOBJS@ -MAINT = @MAINT@ -MAKEINFO = @MAKEINFO@ -MKDIR_P = @MKDIR_P@ -NM = @NM@ -NMEDIT = @NMEDIT@ -OBJDUMP = @OBJDUMP@ -OBJEXT = @OBJEXT@ -OTOOL = @OTOOL@ -OTOOL64 = @OTOOL64@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_URL = @PACKAGE_URL@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -RANLIB = @RANLIB@ -RC_LOG_FACILITY = @RC_LOG_FACILITY@ -RC_SECURE_PATH = @RC_SECURE_PATH@ -SED = @SED@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -STRIP = @STRIP@ -VERSION = @VERSION@ -abs_builddir = @abs_builddir@ -abs_srcdir = @abs_srcdir@ -abs_top_builddir = @abs_top_builddir@ -abs_top_srcdir = @abs_top_srcdir@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ -am__include = @am__include@ -am__leading_dot = @am__leading_dot@ -am__quote = @am__quote@ -am__tar = @am__tar@ -am__untar = @am__untar@ -bindir = @bindir@ -build = @build@ -build_alias = @build_alias@ -build_cpu = @build_cpu@ -build_os = @build_os@ -build_vendor = @build_vendor@ -builddir = @builddir@ -datadir = @datadir@ -datarootdir = @datarootdir@ -docdir = @docdir@ -dvidir = @dvidir@ -exec_prefix = @exec_prefix@ -host = @host@ -host_alias = @host_alias@ -host_cpu = @host_cpu@ -host_os = @host_os@ -host_vendor = @host_vendor@ -htmldir = @htmldir@ -includedir = @includedir@ -infodir = @infodir@ -install_sh = @install_sh@ -libdir = @libdir@ -libexecdir = @libexecdir@ -localedir = @localedir@ -localstatedir = @localstatedir@ -lt_ECHO = @lt_ECHO@ -mandir = @mandir@ -mkdir_p = @mkdir_p@ -oldincludedir = @oldincludedir@ -pdfdir = @pdfdir@ -pkgsysconfdir = @pkgsysconfdir@ -prefix = @prefix@ -program_transform_name = @program_transform_name@ -psdir = @psdir@ -sbindir = @sbindir@ -sharedstatedir = @sharedstatedir@ -srcdir = @srcdir@ -sysconfdir = @sysconfdir@ -target = @target@ -target_alias = @target_alias@ -target_cpu = @target_cpu@ -target_os = @target_os@ -target_vendor = @target_vendor@ -top_build_prefix = @top_build_prefix@ -top_builddir = @top_builddir@ -top_srcdir = @top_srcdir@ -AUTOMAKE_OPTIONS = foreign -EXTRA_DIST = README.debian changelog conffiles control copyright dirs \ - docs examples files libradius-ng-dev.dirs libradius-ng-dev.files \ - libradius-ng.conffiles libradius-ng.dirs libradius-ng.files \ - libradius-ng.postinst libradius-ng.substvars postrm \ - radiusclient-ng.dirs radiusclient-ng.files \ - radiusclient-ng.postinst rules substvars watch - -all: all-am - -.SUFFIXES: -$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ - && { if test -f $@; then exit 0; else break; fi; }; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign debian/Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --foreign debian/Makefile -.PRECIOUS: Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(am__aclocal_m4_deps): - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs -tags: TAGS -TAGS: - -ctags: CTAGS -CTAGS: - - -distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - list='$(DISTFILES)'; \ - dist_files=`for file in $$list; do echo $$file; done | \ - sed -e "s|^$$srcdirstrip/||;t" \ - -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ - case $$dist_files in \ - */*) $(MKDIR_P) `echo "$$dist_files" | \ - sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ - sort -u` ;; \ - esac; \ - for file in $$dist_files; do \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - if test -d $$d/$$file; then \ - dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test -d "$(distdir)/$$file"; then \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ - else \ - test -f "$(distdir)/$$file" \ - || cp -p $$d/$$file "$(distdir)/$$file" \ - || exit 1; \ - fi; \ - done -check-am: all-am -check: check-am -all-am: Makefile -installdirs: -install: install-am -install-exec: install-exec-am -install-data: install-data-am -uninstall: uninstall-am - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-am -install-strip: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install -mostlyclean-generic: - -clean-generic: - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." -clean: clean-am - -clean-am: clean-generic clean-libtool mostlyclean-am - -distclean: distclean-am - -rm -f Makefile -distclean-am: clean-am distclean-generic - -dvi: dvi-am - -dvi-am: - -html: html-am - -html-am: - -info: info-am - -info-am: - -install-data-am: - -install-dvi: install-dvi-am - -install-dvi-am: - -install-exec-am: - -install-html: install-html-am - -install-html-am: - -install-info: install-info-am - -install-info-am: - -install-man: - -install-pdf: install-pdf-am - -install-pdf-am: - -install-ps: install-ps-am - -install-ps-am: - -installcheck-am: - -maintainer-clean: maintainer-clean-am - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-am - -mostlyclean-am: mostlyclean-generic mostlyclean-libtool - -pdf: pdf-am - -pdf-am: - -ps: ps-am - -ps-am: - -uninstall-am: - -.MAKE: install-am install-strip - -.PHONY: all all-am check check-am clean clean-generic clean-libtool \ - distclean distclean-generic distclean-libtool distdir dvi \ - dvi-am html html-am info info-am install install-am \ - install-data install-data-am install-dvi install-dvi-am \ - install-exec install-exec-am install-html install-html-am \ - install-info install-info-am install-man install-pdf \ - install-pdf-am install-ps install-ps-am install-strip \ - installcheck installcheck-am installdirs maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-generic \ - mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am - - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/debian/README.debian b/openair3/PMIPv6/freeradius-client-1.1.6/debian/README.debian deleted file mode 100644 index 3e57867fd8..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/debian/README.debian +++ /dev/null @@ -1,19 +0,0 @@ -radiusclient-ng for DEBIAN --------------------------- - -Radiusclient is a /bin/login replacement which gets called by a getty -to log in a user and to setup the user's login environment. Normal -login programs just check the login name and password which the user -entered against the local password file (/etc/passwd, /etc/shadow). In -contrast to that Radiusclient also uses the RADIUS protocol to -authenticate the user. - -radiusclient-ng is a version with enhanced API in the libradiusclient -library by Maxim Sobolev - -Please view /usr/doc/radiusclient-ng/instop.html with your favourite WWW -browser, e.g lynx or netscape. - -Config files are in /etc/radiusclient-ng. - -Jan Janak , Mon, 15 Nov 2004 12:20:42 +0100 diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/debian/changelog b/openair3/PMIPv6/freeradius-client-1.1.6/debian/changelog deleted file mode 100644 index 342346d6d1..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/debian/changelog +++ /dev/null @@ -1,11 +0,0 @@ -radiusclient-ng (0.5.0) unstable; urgency=low - - * New upstream release - - -- Jan Janak Mon, 23 May 2005 20:37:22 +0200 - -radiusclient-ng (0.4.8) unstable; urgency=low - - * Initial Release. - - -- Jan Janak Mon, 15 Nov 2004 12:20:43 +0100 diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/debian/conffiles b/openair3/PMIPv6/freeradius-client-1.1.6/debian/conffiles deleted file mode 100644 index 63e04a1790..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/debian/conffiles +++ /dev/null @@ -1,3 +0,0 @@ -/etc/radiusclient-ng/issue -/etc/radiusclient-ng/port-id-map -/etc/radiusclient-ng/servers diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/debian/control b/openair3/PMIPv6/freeradius-client-1.1.6/debian/control deleted file mode 100644 index d2af9a20eb..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/debian/control +++ /dev/null @@ -1,59 +0,0 @@ -Source: radiusclient-ng -Section: admin -Priority: extra -Maintainer: Jan Janak -Build-Depends: debhelper, libtool -Standards-Version: 3.5.2 - -Package: radiusclient-ng -Architecture: any -Section: admin -Depends: libradius-ng, perl5, ${shlibs:Depends} -Conflicts: radiusclient1 -Description: /bin/login replacement which uses the RADIUS protocol for authentication. - Radiusclient is a /bin/login replacement which gets called by a getty - to log in a user and to setup the user's login environment. Normal - login programs just check the login name and password which the user - entered against the local password file (/etc/passwd, /etc/shadow). - In contrast to that Radiusclient also uses the RADIUS protocol to - authenticate the user. - . - The "-ng" version of libradiusclient contains enhanced API made by - Maxim Sobolev - . - This is the main binary archive. - -Package: libradius-ng-dev -Architecture: any -Section: libdevel -Depends: libradius-ng, libc6-dev -Description: /bin/login replacement with RADIUS. Header file and link lib. - Radiusclient is a /bin/login replacement which gets called by a getty - to log in a user and to setup the user's login environment. Normal - login programs just check the login name and password which the user - entered against the local password file (/etc/passwd, /etc/shadow). - In contrast to that Radiusclient also uses the RADIUS protocol to - authenticate the user. - . - The "-ng" version of libradiusclient contains enhanced API made by - Maxim Sobolev - . - This is the development package, to be able to develop programs that - uses the RADIUS library. - -Package: libradius-ng -Architecture: any -Section: libs -Depends: ${shlibs:Depends} -Description: /bin/login replacement with RADIUS. Shared lib to used by programs. - Radiusclient is a /bin/login replacement which gets called by a getty - to log in a user and to setup the user's login environment. Normal - login programs just check the login name and password which the user - entered against the local password file (/etc/passwd, /etc/shadow). In - contrast to that Radiusclient also uses the RADIUS protocol to - authenticate the user. - . - The "-ng" version of libradiusclient contains enhanced API made by - Maxim Sobolev - . - This is the libraries needed by any client needing the RADIUS protocol. diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/debian/copyright b/openair3/PMIPv6/freeradius-client-1.1.6/debian/copyright deleted file mode 100644 index f5637d6414..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/debian/copyright +++ /dev/null @@ -1,87 +0,0 @@ -This package was debianized by Jan Janak on -Mon, 15 Nov 2004 12:20:42 +0100. - -The debian package files have been derived from the original -radiusclient1 debian package. - -It was downloaded from ftp.cityline.net/pub/radiusclient/ - -Upstream Author(s): Lars Fenneberg - -Copyright: - -See the respective source files to find out which copyrights apply. - ------------------------------------------------------------------------------- -Copyright (C) 1995,1996,1997,1998 Lars Fenneberg - -Permission to use, copy, modify, and distribute this software for any -purpose and without fee is hereby granted, provided that this copyright and -permission notice appear on all copies and supporting documentation, the -name of Lars Fenneberg not be used in advertising or publicity pertaining to -distribution of the program without specific prior permission, and notice be -given in supporting documentation that copying and distribution is by -permission of Lars Fenneberg. - -Lars Fenneberg makes no representations about the suitability of this -software for any purpose. It is provided "as is" without express or implied -warranty. - ------------------------------------------------------------------------------- -Copyright 1992 Livingston Enterprises, Inc. -Livingston Enterprises, Inc. 6920 Koll Center Parkway Pleasanton, CA 94566 - -Permission to use, copy, modify, and distribute this software for any -purpose and without fee is hereby granted, provided that this copyright -and permission notice appear on all copies and supporting documentation, -the name of Livingston Enterprises, Inc. not be used in advertising or -publicity pertaining to distribution of the program without specific -prior permission, and notice be given in supporting documentation that -copying and distribution is by permission of Livingston Enterprises, Inc. - -Livingston Enterprises, Inc. makes no representations about the suitability -of this software for any purpose. It is provided "as is" without express -or implied warranty. ------------------------------------------------------------------------------- -[C] The Regents of the University of Michigan and Merit Network, Inc. 1992, -1993, 1994, 1995 All Rights Reserved - -Permission to use, copy, modify, and distribute this software and its -documentation for any purpose and without fee is hereby granted, provided -that the above copyright notice and this permission notice appear in all -copies of the software and derivative works or modified versions thereof, -and that both the copyright notice and this permission and disclaimer -notice appear in supporting documentation. - -THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER -EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE REGENTS OF THE -UNIVERSITY OF MICHIGAN AND MERIT NETWORK, INC. DO NOT WARRANT THAT THE -FUNCTIONS CONTAINED IN THE SOFTWARE WILL MEET LICENSEE'S REQUIREMENTS OR -THAT OPERATION WILL BE UNINTERRUPTED OR ERROR FREE. The Regents of the -University of Michigan and Merit Network, Inc. shall not be liable for any -special, indirect, incidental or consequential damages with respect to any -claim by Licensee or any third party arising from use of the software. ------------------------------------------------------------------------------- -Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. -All rights reserved. - -License to copy and use this software is granted provided that it -is identified as the "RSA Data Security, Inc. MD5 Message-Digest -Algorithm" in all material mentioning or referencing this software -or this function. - -License is also granted to make and use derivative works provided -that such works are identified as "derived from the RSA Data -Security, Inc. MD5 Message-Digest Algorithm" in all material -mentioning or referencing the derived work. - -RSA Data Security, Inc. makes no representations concerning either -the merchantability of this software or the suitability of this -software for any particular purpose. It is provided "as is" -without express or implied warranty of any kind. - -These notices must be retained in any copies of any part of this -documentation and/or software. ------------------------------------------------------------------------------- - diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/debian/dirs b/openair3/PMIPv6/freeradius-client-1.1.6/debian/dirs deleted file mode 100644 index d463a2ac87..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/debian/dirs +++ /dev/null @@ -1,6 +0,0 @@ -etc/radiusclient-ng -usr/sbin - -usr/lib -usr/include -usr/man/man3 diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/debian/docs b/openair3/PMIPv6/freeradius-client-1.1.6/debian/docs deleted file mode 100644 index e3773eb1d9..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/debian/docs +++ /dev/null @@ -1 +0,0 @@ -BUGS README README.radexample doc/instop.html diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/debian/examples b/openair3/PMIPv6/freeradius-client-1.1.6/debian/examples deleted file mode 100644 index 99d5eeec94..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/debian/examples +++ /dev/null @@ -1,5 +0,0 @@ -login.radius/migs/README -login.radius/migs/ip-down -login.radius/migs/ip-up -login.radius/migs/login.radius -src/radexample.c diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/debian/files b/openair3/PMIPv6/freeradius-client-1.1.6/debian/files deleted file mode 100644 index a59ae9837e..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/debian/files +++ /dev/null @@ -1,3 +0,0 @@ -radiusclient-ng_0.5.1_i386.deb admin extra -libradius-ng-dev_0.5.1_i386.deb libdevel extra -libradius-ng_0.5.1_i386.deb libs extra diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/debian/libradius-ng-dev.dirs b/openair3/PMIPv6/freeradius-client-1.1.6/debian/libradius-ng-dev.dirs deleted file mode 100644 index 44188162ec..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/debian/libradius-ng-dev.dirs +++ /dev/null @@ -1,2 +0,0 @@ -usr/lib -usr/include diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/debian/libradius-ng-dev.files b/openair3/PMIPv6/freeradius-client-1.1.6/debian/libradius-ng-dev.files deleted file mode 100644 index 86d402f8fb..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/debian/libradius-ng-dev.files +++ /dev/null @@ -1,4 +0,0 @@ -usr/include/freeradius-client.h -usr/lib/libradiusclient-ng.la -usr/lib/libradiusclient-ng.a - diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/debian/libradius-ng.conffiles b/openair3/PMIPv6/freeradius-client-1.1.6/debian/libradius-ng.conffiles deleted file mode 100644 index 3711ce4120..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/debian/libradius-ng.conffiles +++ /dev/null @@ -1,5 +0,0 @@ -/etc/radiusclient-ng/radiusclient.conf -/etc/radiusclient-ng/dictionary -/etc/radiusclient-ng/dictionary.ascend -/etc/radiusclient-ng/dictionary.compat -/etc/radiusclient-ng/dictionary.merit diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/debian/libradius-ng.dirs b/openair3/PMIPv6/freeradius-client-1.1.6/debian/libradius-ng.dirs deleted file mode 100644 index 7102b716dd..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/debian/libradius-ng.dirs +++ /dev/null @@ -1,2 +0,0 @@ -etc/radiusclient-ng -usr/lib diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/debian/libradius-ng.files b/openair3/PMIPv6/freeradius-client-1.1.6/debian/libradius-ng.files deleted file mode 100644 index 49cc562b5b..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/debian/libradius-ng.files +++ /dev/null @@ -1 +0,0 @@ -/usr/lib/*.so.* diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/debian/libradius-ng.postinst b/openair3/PMIPv6/freeradius-client-1.1.6/debian/libradius-ng.postinst deleted file mode 100755 index fee41f3115..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/debian/libradius-ng.postinst +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/sh - -if [ "$1" = "configure" ]; then - # Call ldconfig - ldconfig -fi - -#DEBHELPER# diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/debian/libradius-ng.substvars b/openair3/PMIPv6/freeradius-client-1.1.6/debian/libradius-ng.substvars deleted file mode 100644 index b7d60550cb..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/debian/libradius-ng.substvars +++ /dev/null @@ -1 +0,0 @@ -shlibs:Depends=libc6 (>= 2.3.2.ds1-4) diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/debian/postrm b/openair3/PMIPv6/freeradius-client-1.1.6/debian/postrm deleted file mode 100755 index a2c66fa239..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/debian/postrm +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh - -#DEBHELPER# diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/debian/radiusclient-ng.dirs b/openair3/PMIPv6/freeradius-client-1.1.6/debian/radiusclient-ng.dirs deleted file mode 100644 index 6006d8c3a3..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/debian/radiusclient-ng.dirs +++ /dev/null @@ -1,2 +0,0 @@ -etc/radiusclient-ng -usr/sbin diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/debian/radiusclient-ng.files b/openair3/PMIPv6/freeradius-client-1.1.6/debian/radiusclient-ng.files deleted file mode 100644 index 2588e7317b..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/debian/radiusclient-ng.files +++ /dev/null @@ -1,9 +0,0 @@ -etc/radiusclient-ng/issue -etc/radiusclient-ng/port-id-map -etc/radiusclient-ng/radiusclient.conf -etc/radiusclient-ng/servers -usr/sbin/radlogin -usr/sbin/radstatus -usr/sbin/radacct -usr/sbin/radexample -usr/sbin/login.radius diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/debian/radiusclient-ng.postinst b/openair3/PMIPv6/freeradius-client-1.1.6/debian/radiusclient-ng.postinst deleted file mode 100755 index e6b71cb335..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/debian/radiusclient-ng.postinst +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/sh - -if [ -d /usr/doc -a ! -e /usr/doc/radiusclient-ng -a -d /usr/share/doc/radiusclient-ng ]; then - ln -sf ../share/doc/radiusclient-ng /usr/doc/radiusclient-ng -fi - -chmod 600 /etc/radiusclient-ng/servers - -#DEBHELPER# diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/debian/rules b/openair3/PMIPv6/freeradius-client-1.1.6/debian/rules deleted file mode 100755 index 4960a2dfee..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/debian/rules +++ /dev/null @@ -1,113 +0,0 @@ -#!/usr/bin/make -f -# Made with the aid of dh_make, by Craig Small -# Sample debian/rules that uses debhelper. GNU copyright 1997 by Joey Hess. -# This version is for a hypothetical package that builds an -# architecture-dependant package, as well as an architecture-independant -# package. - -package=radiusclient-ng - -version=$(shell expr `pwd` : '.*-\([0-9.]*\)') -version_major=$(shell expr `pwd` : '.*-\([0-9]*\).[0-9.]*') -version_so=2.0.0 - -topdir=$(shell pwd) - -# Uncomment this to turn on verbose mode. -#export DH_VERBOSE=1 - -build: build-stamp -build-stamp: - dh_testdir - - @( \ - for link in config.guess config.sub ltmain.sh missing mkinstalldirs; do \ - ln -s /usr/share/libtool/$$link $$link; \ - done; \ - ) - - ./configure --prefix=/usr --sysconfdir=/etc --enable-shadow - - rm -f libtool - ln -s /usr/bin/libtool libtool - - make - - touch build-stamp - -clean: - dh_testdir - dh_testroot - rm -f build-stamp - - -rm -rf static shared - @( \ - for link in config.guess config.sub ltmain.sh missing mkinstalldirs; do \ - rm -f $$link; \ - done; \ - ) - - # Add here commands to clean up after the build process. - -$(MAKE) distclean - - dh_clean - -dirs: - dh_installdirs - - dh_testdir - dh_testroot - - dh_installdocs - dh_installexamples - dh_installmenu -# dh_installmanpages - dh_undocumented login.radius.1 radacct.1 radexample.1 radlogin.1 radstatus.1 - dh_installchangelogs - -binary-arch: dirs radiusclient-ng libradius-ng libradius-ng-dev - dh_installdeb - - dh_strip - dh_compress - dh_fixperms - - dh_shlibdeps - dh_gencontrol - dh_makeshlibs -m$(version_so) - dh_md5sums - - chmod 600 $(topdir)/debian/tmp/etc/radiusclient-ng/servers - dh_builddeb - -radiusclient-ng: build - for file in radacct radexample radlogin radstatus; do \ - install -m755 $(topdir)/src/.libs/$$file $(topdir)/debian/tmp/usr/sbin; \ - done - install -m755 $(topdir)/login.radius/migs/login.radius $(topdir)/debian/tmp/usr/sbin - for file in issue port-id-map servers; do \ - install -m644 $(topdir)/etc/$$file $(topdir)/debian/tmp/etc/radiusclient-ng; \ - done - -libradius-ng: build - install -m755 $(topdir)/lib/.libs/libfreeradius-client.so.$(version_so) debian/libradius-ng/usr/lib - for file in radiusclient.conf dictionary dictionary.ascend dictionary.compat dictionary.merit; do \ - install -m644 $(topdir)/etc/$$file $(topdir)/debian/libradius-ng/etc/radiusclient-ng; \ - done - cd debian/libradius-ng/usr/lib && ln -s libfreeradius-client.so.$(version_so) libfreeradius-client.so.2 - -libradius-ng-dev: build - install -m644 $(topdir)/include/freeradius-client.h $(topdir)/debian/libradius-ng-dev/usr/include - install -m644 $(topdir)/lib/.libs/libfreeradius-client.a $(topdir)/debian/libradius-ng-dev/usr/lib - install -m644 $(topdir)/lib/libfreeradius-client.la $(topdir)/debian/libradius-ng-dev/usr/lib - cd debian/libradius-ng-dev/usr/lib && ln -s libfreeradius-client.so.$(version_so) libfreeradius-client.so - -source diff: - @echo >&2 'source and diff are obsolete - use dpkg-source -b'; false - -binary: binary-arch -.PHONY: build clean binary-arch binary radiusclient-ng libradius-ng-dev - -# Local variables: -# mode: Makefile -# End: diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/debian/substvars b/openair3/PMIPv6/freeradius-client-1.1.6/debian/substvars deleted file mode 100644 index b7d60550cb..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/debian/substvars +++ /dev/null @@ -1 +0,0 @@ -shlibs:Depends=libc6 (>= 2.3.2.ds1-4) diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/debian/watch b/openair3/PMIPv6/freeradius-client-1.1.6/debian/watch deleted file mode 100644 index 5feac544f1..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/debian/watch +++ /dev/null @@ -1,5 +0,0 @@ -# Example watch control file for uscan -# Rename this file to "watch" and then you can run the "uscan" command -# to check for upstream updates and more. -# Site Directory Pattern Version Script -ftp.cityline.net /pub/radiusclient radiusclient-*.tar.gz debian uupdate diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/depcomp b/openair3/PMIPv6/freeradius-client-1.1.6/depcomp deleted file mode 100755 index 65899658ee..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/depcomp +++ /dev/null @@ -1,411 +0,0 @@ -#! /bin/sh - -# depcomp - compile a program generating dependencies as side-effects -# Copyright 1999, 2000 Free Software Foundation, Inc. - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA -# 02111-1307, USA. - -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - -# Originally written by Alexandre Oliva . - -if test -z "$depmode" || test -z "$source" || test -z "$object"; then - echo "depcomp: Variables source, object and depmode must be set" 1>&2 - exit 1 -fi -# `libtool' can also be set to `yes' or `no'. - -depfile=${depfile-`echo "$object" | sed 's,\([^/]*\)$,.deps/\1,;s/\.\([^.]*\)$/.P\1/'`} -tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} - -rm -f "$tmpdepfile" - -# Some modes work just like other modes, but use different flags. We -# parameterize here, but still list the modes in the big case below, -# to make depend.m4 easier to write. Note that we *cannot* use a case -# here, because this file can only contain one case statement. -if test "$depmode" = hp; then - # HP compiler uses -M and no extra arg. - gccflag=-M - depmode=gcc -fi - -if test "$depmode" = dashXmstdout; then - # This is just like dashmstdout with a different argument. - dashmflag=-xM - depmode=dashmstdout -fi - -case "$depmode" in -gcc3) -## gcc 3 implements dependency tracking that does exactly what -## we want. Yay! Note: for some reason libtool 1.4 doesn't like -## it if -MD -MP comes after the -MF stuff. Hmm. - "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" - stat=$? - if test $stat -eq 0; then : - else - rm -f "$tmpdepfile" - exit $stat - fi - mv "$tmpdepfile" "$depfile" - ;; - -gcc) -## There are various ways to get dependency output from gcc. Here's -## why we pick this rather obscure method: -## - Don't want to use -MD because we'd like the dependencies to end -## up in a subdir. Having to rename by hand is ugly. -## (We might end up doing this anyway to support other compilers.) -## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like -## -MM, not -M (despite what the docs say). -## - Using -M directly means running the compiler twice (even worse -## than renaming). - if test -z "$gccflag"; then - gccflag=-MD, - fi - "$@" -Wp,"$gccflag$tmpdepfile" - stat=$? - if test $stat -eq 0; then : - else - rm -f "$tmpdepfile" - exit $stat - fi - rm -f "$depfile" - echo "$object : \\" > "$depfile" - alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz -## The second -e expression handles DOS-style file names with drive letters. - sed -e 's/^[^:]*: / /' \ - -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" -## This next piece of magic avoids the `deleted header file' problem. -## The problem is that when a header file which appears in a .P file -## is deleted, the dependency causes make to die (because there is -## typically no way to rebuild the header). We avoid this by adding -## dummy dependencies for each header file. Too bad gcc doesn't do -## this for us directly. - tr ' ' ' -' < "$tmpdepfile" | -## Some versions of gcc put a space before the `:'. On the theory -## that the space means something, we add a space to the output as -## well. -## Some versions of the HPUX 10.20 sed can't process this invocation -## correctly. Breaking it into two sed invocations is a workaround. - sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" - rm -f "$tmpdepfile" - ;; - -hp) - # This case exists only to let depend.m4 do its work. It works by - # looking at the text of this script. This case will never be run, - # since it is checked for above. - exit 1 - ;; - -sgi) - if test "$libtool" = yes; then - "$@" "-Wp,-MDupdate,$tmpdepfile" - else - "$@" -MDupdate "$tmpdepfile" - fi - stat=$? - if test $stat -eq 0; then : - else - rm -f "$tmpdepfile" - exit $stat - fi - rm -f "$depfile" - - if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files - echo "$object : \\" > "$depfile" - - # Clip off the initial element (the dependent). Don't try to be - # clever and replace this with sed code, as IRIX sed won't handle - # lines with more than a fixed number of characters (4096 in - # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; - # the IRIX cc adds comments like `#:fec' to the end of the - # dependency line. - tr ' ' ' -' < "$tmpdepfile" \ - | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ - tr ' -' ' ' >> $depfile - echo >> $depfile - - # The second pass generates a dummy entry for each header file. - tr ' ' ' -' < "$tmpdepfile" \ - | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ - >> $depfile - else - # The sourcefile does not contain any dependencies, so just - # store a dummy comment line, to avoid errors with the Makefile - # "include basename.Plo" scheme. - echo "#dummy" > "$depfile" - fi - rm -f "$tmpdepfile" - ;; - -aix) - # The C for AIX Compiler uses -M and outputs the dependencies - # in a .u file. This file always lives in the current directory. - # Also, the AIX compiler puts `$object:' at the start of each line; - # $object doesn't have directory information. - stripped=`echo "$object" | sed -e 's,^.*/,,' -e 's/\(.*\)\..*$/\1/'` - tmpdepfile="$stripped.u" - outname="$stripped.o" - if test "$libtool" = yes; then - "$@" -Wc,-M - else - "$@" -M - fi - - stat=$? - if test $stat -eq 0; then : - else - rm -f "$tmpdepfile" - exit $stat - fi - - if test -f "$tmpdepfile"; then - # Each line is of the form `foo.o: dependent.h'. - # Do two passes, one to just change these to - # `$object: dependent.h' and one to simply `dependent.h:'. - sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile" - sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile" - else - # The sourcefile does not contain any dependencies, so just - # store a dummy comment line, to avoid errors with the Makefile - # "include basename.Plo" scheme. - echo "#dummy" > "$depfile" - fi - rm -f "$tmpdepfile" - ;; - -tru64) - # The Tru64 AIX compiler uses -MD to generate dependencies as a side - # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. - # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put - # dependencies in `foo.d' instead, so we check for that too. - # Subdirectories are respected. - - tmpdepfile1="$object.d" - tmpdepfile2=`echo "$object" | sed -e 's/.o$/.d/'` - if test "$libtool" = yes; then - "$@" -Wc,-MD - else - "$@" -MD - fi - - stat=$? - if test $stat -eq 0; then : - else - rm -f "$tmpdepfile1" "$tmpdepfile2" - exit $stat - fi - - if test -f "$tmpdepfile1"; then - tmpdepfile="$tmpdepfile1" - else - tmpdepfile="$tmpdepfile2" - fi - if test -f "$tmpdepfile"; then - sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" - # That's a space and a tab in the []. - sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" - else - echo "#dummy" > "$depfile" - fi - rm -f "$tmpdepfile" - ;; - -#nosideeffect) - # This comment above is used by automake to tell side-effect - # dependency tracking mechanisms from slower ones. - -dashmstdout) - # Important note: in order to support this mode, a compiler *must* - # always write the proprocessed file to stdout, regardless of -o, - # because we must use -o when running libtool. - test -z "$dashmflag" && dashmflag=-M - ( IFS=" " - case " $* " in - *" --mode=compile "*) # this is libtool, let us make it quiet - for arg - do # cycle over the arguments - case "$arg" in - "--mode=compile") - # insert --quiet before "--mode=compile" - set fnord "$@" --quiet - shift # fnord - ;; - esac - set fnord "$@" "$arg" - shift # fnord - shift # "$arg" - done - ;; - esac - "$@" $dashmflag | sed 's:^[^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" - ) & - proc=$! - "$@" - stat=$? - wait "$proc" - if test "$stat" != 0; then exit $stat; fi - rm -f "$depfile" - cat < "$tmpdepfile" > "$depfile" - tr ' ' ' -' < "$tmpdepfile" | \ -## Some versions of the HPUX 10.20 sed can't process this invocation -## correctly. Breaking it into two sed invocations is a workaround. - sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" - rm -f "$tmpdepfile" - ;; - -dashXmstdout) - # This case only exists to satisfy depend.m4. It is never actually - # run, as this mode is specially recognized in the preamble. - exit 1 - ;; - -makedepend) - # X makedepend - ( - shift - cleared=no - for arg in "$@"; do - case $cleared in no) - set ""; shift - cleared=yes - esac - case "$arg" in - -D*|-I*) - set fnord "$@" "$arg"; shift;; - -*) - ;; - *) - set fnord "$@" "$arg"; shift;; - esac - done - obj_suffix="`echo $object | sed 's/^.*\././'`" - touch "$tmpdepfile" - ${MAKEDEPEND-makedepend} 2>/dev/null -o"$obj_suffix" -f"$tmpdepfile" "$@" - ) & - proc=$! - "$@" - stat=$? - wait "$proc" - if test "$stat" != 0; then exit $stat; fi - rm -f "$depfile" - cat < "$tmpdepfile" > "$depfile" - tail +3 "$tmpdepfile" | tr ' ' ' -' | \ -## Some versions of the HPUX 10.20 sed can't process this invocation -## correctly. Breaking it into two sed invocations is a workaround. - sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" - rm -f "$tmpdepfile" "$tmpdepfile".bak - ;; - -cpp) - # Important note: in order to support this mode, a compiler *must* - # always write the proprocessed file to stdout, regardless of -o, - # because we must use -o when running libtool. - ( IFS=" " - case " $* " in - *" --mode=compile "*) - for arg - do # cycle over the arguments - case $arg in - "--mode=compile") - # insert --quiet before "--mode=compile" - set fnord "$@" --quiet - shift # fnord - ;; - esac - set fnord "$@" "$arg" - shift # fnord - shift # "$arg" - done - ;; - esac - "$@" -E | - sed -n '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | - sed '$ s: \\$::' > "$tmpdepfile" - ) & - proc=$! - "$@" - stat=$? - wait "$proc" - if test "$stat" != 0; then exit $stat; fi - rm -f "$depfile" - echo "$object : \\" > "$depfile" - cat < "$tmpdepfile" >> "$depfile" - sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" - rm -f "$tmpdepfile" - ;; - -msvisualcpp) - # Important note: in order to support this mode, a compiler *must* - # always write the proprocessed file to stdout, regardless of -o, - # because we must use -o when running libtool. - ( IFS=" " - case " $* " in - *" --mode=compile "*) - for arg - do # cycle over the arguments - case $arg in - "--mode=compile") - # insert --quiet before "--mode=compile" - set fnord "$@" --quiet - shift # fnord - ;; - esac - set fnord "$@" "$arg" - shift # fnord - shift # "$arg" - done - ;; - esac - "$@" -E | - sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile" - ) & - proc=$! - "$@" - stat=$? - wait "$proc" - if test "$stat" != 0; then exit $stat; fi - rm -f "$depfile" - echo "$object : \\" > "$depfile" - . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" - echo " " >> "$depfile" - . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile" - rm -f "$tmpdepfile" - ;; - -none) - exec "$@" - ;; - -*) - echo "Unknown depmode $depmode" 1>&2 - exit 1 - ;; -esac - -exit 0 diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/doc/ChangeLog b/openair3/PMIPv6/freeradius-client-1.1.6/doc/ChangeLog deleted file mode 100644 index 69c2ae56ab..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/doc/ChangeLog +++ /dev/null @@ -1,22 +0,0 @@ -$Id: ChangeLog,v 1.5 2008/03/05 17:55:52 cparker Exp $ - -FreeRADIUS-client 1.1.6, March 5, 2008 - - o Added dead_time functionality / configuration - o Merge in fixes and enhancements from 'radiusclient-ng' - o Improved functionality for embedded operation - - In use in FreeSWITCH and OpenSER projects - o Wrap gethostby*() family of calls with threadsafe variants - o Change UINT4 to uint32_t, int to size_t, etc. - o Fixed wrong usage of strncat function in several places - -FreeRADIUS-client 1.1.5, March 2, 2007 - - o Fixed endian issues with MD5 functions - o Added library hooks to allow embedding of radius client functionality - o Added example embedded program 'radembedded' in /src - o Minor bugfixes to add better error checking/data validation - -FreeRADIUS-client 1.1.4, Jan 14, 2007 - - o Initial FreeRADIUS Client release diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/doc/Makefile b/openair3/PMIPv6/freeradius-client-1.1.6/doc/Makefile deleted file mode 100644 index ad9decc121..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/doc/Makefile +++ /dev/null @@ -1,373 +0,0 @@ -# Makefile.in generated by automake 1.11.1 from Makefile.am. -# doc/Makefile. Generated from Makefile.in by configure. - -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, -# Inc. -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - - - -# -# $Id: Makefile.am,v 1.1.1.1 2003/12/02 10:39:22 sobomax Exp $ -# -# Copyright (C) 1997 Lars Fenneberg -# -# See the file COPYRIGHT for the respective terms and conditions. -# If the file is missing contact me at lf@elemental.net -# and I'll send you a copy. -# - -pkgdatadir = $(datadir)/radiusclient -pkgincludedir = $(includedir)/radiusclient -pkglibdir = $(libdir)/radiusclient -pkglibexecdir = $(libexecdir)/radiusclient -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = i686-pc-linux-gnu -host_triplet = i686-pc-linux-gnu -target_triplet = i686-pc-linux-gnu -subdir = doc -DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ - ChangeLog -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/configure.in -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs -CONFIG_HEADER = $(top_builddir)/config.h -CONFIG_CLEAN_FILES = -CONFIG_CLEAN_VPATH_FILES = -SOURCES = -DIST_SOURCES = -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = ${SHELL} /usr/local/src/freeradius-client-1.1.6/missing --run aclocal-1.11 -ALLOCA = -AMTAR = ${SHELL} /usr/local/src/freeradius-client-1.1.6/missing --run tar -AR = /usr/bin/ar -AUTOCONF = ${SHELL} /usr/local/src/freeradius-client-1.1.6/missing --run autoconf -AUTOHEADER = ${SHELL} /usr/local/src/freeradius-client-1.1.6/missing --run autoheader -AUTOMAKE = ${SHELL} /usr/local/src/freeradius-client-1.1.6/missing --run automake-1.11 -AWK = gawk -CC = gcc -CCDEPMODE = depmode=gcc3 -CFLAGS = -g -O2 -CPP = gcc -E -CPPFLAGS = -CYGPATH_W = echo -DEFS = -DHAVE_CONFIG_H -DEPDIR = .deps -DSYMUTIL = -DUMPBIN = -ECHO_C = -ECHO_N = -n -ECHO_T = -EGREP = /bin/grep -E -EXEEXT = -FGREP = /bin/grep -F -GREP = /bin/grep -INSTALL = /usr/bin/install -c -INSTALL_DATA = ${INSTALL} -m 644 -INSTALL_PROGRAM = ${INSTALL} -INSTALL_SCRIPT = ${INSTALL} -INSTALL_STRIP_PROGRAM = $(install_sh) -c -s -LD = /usr/bin/ld -LDFLAGS = -LIBOBJS = -LIBS = -lcrypt -lnsl -LIBTOOL = $(SHELL) $(top_builddir)/libtool -LIBVERSION = 2:0:0 -LIPO = -LN_S = ln -s -LTLIBOBJS = -MAINT = # -MAKEINFO = ${SHELL} /usr/local/src/freeradius-client-1.1.6/missing --run makeinfo -MKDIR_P = /bin/mkdir -p -NM = /usr/bin/nm -B -NMEDIT = -OBJDUMP = objdump -OBJEXT = o -OTOOL = -OTOOL64 = -PACKAGE = radiusclient -PACKAGE_BUGREPORT = -PACKAGE_NAME = -PACKAGE_STRING = -PACKAGE_TARNAME = -PACKAGE_URL = -PACKAGE_VERSION = -PATH_SEPARATOR = : -RANLIB = ranlib -RC_LOG_FACILITY = LOG_DAEMON -RC_SECURE_PATH = /bin:/usr/bin:/usr/local/bin -SED = /bin/sed -SET_MAKE = -SHELL = /bin/bash -STRIP = strip -VERSION = 1.1.6 -abs_builddir = /usr/local/src/freeradius-client-1.1.6/doc -abs_srcdir = /usr/local/src/freeradius-client-1.1.6/doc -abs_top_builddir = /usr/local/src/freeradius-client-1.1.6 -abs_top_srcdir = /usr/local/src/freeradius-client-1.1.6 -ac_ct_CC = gcc -ac_ct_DUMPBIN = -am__include = include -am__leading_dot = . -am__quote = -am__tar = ${AMTAR} chof - "$$tardir" -am__untar = ${AMTAR} xf - -bindir = ${exec_prefix}/bin -build = i686-pc-linux-gnu -build_alias = -build_cpu = i686 -build_os = linux-gnu -build_vendor = pc -builddir = . -datadir = ${datarootdir} -datarootdir = ${prefix}/share -docdir = ${datarootdir}/doc/${PACKAGE} -dvidir = ${docdir} -exec_prefix = ${prefix} -host = i686-pc-linux-gnu -host_alias = -host_cpu = i686 -host_os = linux-gnu -host_vendor = pc -htmldir = ${docdir} -includedir = ${prefix}/include -infodir = ${datarootdir}/info -install_sh = ${SHELL} /usr/local/src/freeradius-client-1.1.6/install-sh -libdir = ${exec_prefix}/lib -libexecdir = ${exec_prefix}/libexec -localedir = ${datarootdir}/locale -localstatedir = ${prefix}/var -lt_ECHO = echo -mandir = ${datarootdir}/man -mkdir_p = /bin/mkdir -p -oldincludedir = /usr/include -pdfdir = ${docdir} -pkgsysconfdir = ${prefix}/etc/radiusclient -prefix = /usr/local -program_transform_name = s,x,x, -psdir = ${docdir} -sbindir = ${exec_prefix}/sbin -sharedstatedir = ${prefix}/com -srcdir = . -sysconfdir = ${prefix}/etc -target = i686-pc-linux-gnu -target_alias = -target_cpu = i686 -target_os = linux-gnu -target_vendor = pc -top_build_prefix = ../ -top_builddir = .. -top_srcdir = .. -AUTOMAKE_OPTIONS = foreign -CLEANFILES = *~ -EXTRA_DIST = instop.html -all: all-am - -.SUFFIXES: -$(srcdir)/Makefile.in: # $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ - && { if test -f $@; then exit 0; else break; fi; }; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign doc/Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --foreign doc/Makefile -.PRECIOUS: Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: # $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): # $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(am__aclocal_m4_deps): - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs -tags: TAGS -TAGS: - -ctags: CTAGS -CTAGS: - - -distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - list='$(DISTFILES)'; \ - dist_files=`for file in $$list; do echo $$file; done | \ - sed -e "s|^$$srcdirstrip/||;t" \ - -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ - case $$dist_files in \ - */*) $(MKDIR_P) `echo "$$dist_files" | \ - sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ - sort -u` ;; \ - esac; \ - for file in $$dist_files; do \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - if test -d $$d/$$file; then \ - dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test -d "$(distdir)/$$file"; then \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ - else \ - test -f "$(distdir)/$$file" \ - || cp -p $$d/$$file "$(distdir)/$$file" \ - || exit 1; \ - fi; \ - done -check-am: all-am -check: check-am -all-am: Makefile -installdirs: -install: install-am -install-exec: install-exec-am -install-data: install-data-am -uninstall: uninstall-am - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-am -install-strip: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install -mostlyclean-generic: - -clean-generic: - -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." -clean: clean-am - -clean-am: clean-generic clean-libtool mostlyclean-am - -distclean: distclean-am - -rm -f Makefile -distclean-am: clean-am distclean-generic - -dvi: dvi-am - -dvi-am: - -html: html-am - -html-am: - -info: info-am - -info-am: - -install-data-am: - -install-dvi: install-dvi-am - -install-dvi-am: - -install-exec-am: - -install-html: install-html-am - -install-html-am: - -install-info: install-info-am - -install-info-am: - -install-man: - -install-pdf: install-pdf-am - -install-pdf-am: - -install-ps: install-ps-am - -install-ps-am: - -installcheck-am: - -maintainer-clean: maintainer-clean-am - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-am - -mostlyclean-am: mostlyclean-generic mostlyclean-libtool - -pdf: pdf-am - -pdf-am: - -ps: ps-am - -ps-am: - -uninstall-am: - -.MAKE: install-am install-strip - -.PHONY: all all-am check check-am clean clean-generic clean-libtool \ - distclean distclean-generic distclean-libtool distdir dvi \ - dvi-am html html-am info info-am install install-am \ - install-data install-data-am install-dvi install-dvi-am \ - install-exec install-exec-am install-html install-html-am \ - install-info install-info-am install-man install-pdf \ - install-pdf-am install-ps install-ps-am install-strip \ - installcheck installcheck-am installdirs maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-generic \ - mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am - - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/doc/Makefile.am b/openair3/PMIPv6/freeradius-client-1.1.6/doc/Makefile.am deleted file mode 100644 index 1269554c16..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/doc/Makefile.am +++ /dev/null @@ -1,15 +0,0 @@ -# -# $Id: Makefile.am,v 1.1.1.1 2003/12/02 10:39:22 sobomax Exp $ -# -# Copyright (C) 1997 Lars Fenneberg -# -# See the file COPYRIGHT for the respective terms and conditions. -# If the file is missing contact me at lf@elemental.net -# and I'll send you a copy. -# - -AUTOMAKE_OPTIONS = foreign - -CLEANFILES = *~ - -EXTRA_DIST = instop.html diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/doc/Makefile.in b/openair3/PMIPv6/freeradius-client-1.1.6/doc/Makefile.in deleted file mode 100644 index 2a36d20eb7..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/doc/Makefile.in +++ /dev/null @@ -1,373 +0,0 @@ -# Makefile.in generated by automake 1.11.1 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, -# Inc. -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -@SET_MAKE@ - -# -# $Id: Makefile.am,v 1.1.1.1 2003/12/02 10:39:22 sobomax Exp $ -# -# Copyright (C) 1997 Lars Fenneberg -# -# See the file COPYRIGHT for the respective terms and conditions. -# If the file is missing contact me at lf@elemental.net -# and I'll send you a copy. -# -VPATH = @srcdir@ -pkgdatadir = $(datadir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ -pkglibexecdir = $(libexecdir)/@PACKAGE@ -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = @build@ -host_triplet = @host@ -target_triplet = @target@ -subdir = doc -DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ - ChangeLog -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/configure.in -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs -CONFIG_HEADER = $(top_builddir)/config.h -CONFIG_CLEAN_FILES = -CONFIG_CLEAN_VPATH_FILES = -SOURCES = -DIST_SOURCES = -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = @ACLOCAL@ -ALLOCA = @ALLOCA@ -AMTAR = @AMTAR@ -AR = @AR@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -CC = @CC@ -CCDEPMODE = @CCDEPMODE@ -CFLAGS = @CFLAGS@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CYGPATH_W = @CYGPATH_W@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -DSYMUTIL = @DSYMUTIL@ -DUMPBIN = @DUMPBIN@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -EXEEXT = @EXEEXT@ -FGREP = @FGREP@ -GREP = @GREP@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -LD = @LD@ -LDFLAGS = @LDFLAGS@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LIBTOOL = @LIBTOOL@ -LIBVERSION = @LIBVERSION@ -LIPO = @LIPO@ -LN_S = @LN_S@ -LTLIBOBJS = @LTLIBOBJS@ -MAINT = @MAINT@ -MAKEINFO = @MAKEINFO@ -MKDIR_P = @MKDIR_P@ -NM = @NM@ -NMEDIT = @NMEDIT@ -OBJDUMP = @OBJDUMP@ -OBJEXT = @OBJEXT@ -OTOOL = @OTOOL@ -OTOOL64 = @OTOOL64@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_URL = @PACKAGE_URL@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -RANLIB = @RANLIB@ -RC_LOG_FACILITY = @RC_LOG_FACILITY@ -RC_SECURE_PATH = @RC_SECURE_PATH@ -SED = @SED@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -STRIP = @STRIP@ -VERSION = @VERSION@ -abs_builddir = @abs_builddir@ -abs_srcdir = @abs_srcdir@ -abs_top_builddir = @abs_top_builddir@ -abs_top_srcdir = @abs_top_srcdir@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ -am__include = @am__include@ -am__leading_dot = @am__leading_dot@ -am__quote = @am__quote@ -am__tar = @am__tar@ -am__untar = @am__untar@ -bindir = @bindir@ -build = @build@ -build_alias = @build_alias@ -build_cpu = @build_cpu@ -build_os = @build_os@ -build_vendor = @build_vendor@ -builddir = @builddir@ -datadir = @datadir@ -datarootdir = @datarootdir@ -docdir = @docdir@ -dvidir = @dvidir@ -exec_prefix = @exec_prefix@ -host = @host@ -host_alias = @host_alias@ -host_cpu = @host_cpu@ -host_os = @host_os@ -host_vendor = @host_vendor@ -htmldir = @htmldir@ -includedir = @includedir@ -infodir = @infodir@ -install_sh = @install_sh@ -libdir = @libdir@ -libexecdir = @libexecdir@ -localedir = @localedir@ -localstatedir = @localstatedir@ -lt_ECHO = @lt_ECHO@ -mandir = @mandir@ -mkdir_p = @mkdir_p@ -oldincludedir = @oldincludedir@ -pdfdir = @pdfdir@ -pkgsysconfdir = @pkgsysconfdir@ -prefix = @prefix@ -program_transform_name = @program_transform_name@ -psdir = @psdir@ -sbindir = @sbindir@ -sharedstatedir = @sharedstatedir@ -srcdir = @srcdir@ -sysconfdir = @sysconfdir@ -target = @target@ -target_alias = @target_alias@ -target_cpu = @target_cpu@ -target_os = @target_os@ -target_vendor = @target_vendor@ -top_build_prefix = @top_build_prefix@ -top_builddir = @top_builddir@ -top_srcdir = @top_srcdir@ -AUTOMAKE_OPTIONS = foreign -CLEANFILES = *~ -EXTRA_DIST = instop.html -all: all-am - -.SUFFIXES: -$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ - && { if test -f $@; then exit 0; else break; fi; }; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign doc/Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --foreign doc/Makefile -.PRECIOUS: Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(am__aclocal_m4_deps): - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs -tags: TAGS -TAGS: - -ctags: CTAGS -CTAGS: - - -distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - list='$(DISTFILES)'; \ - dist_files=`for file in $$list; do echo $$file; done | \ - sed -e "s|^$$srcdirstrip/||;t" \ - -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ - case $$dist_files in \ - */*) $(MKDIR_P) `echo "$$dist_files" | \ - sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ - sort -u` ;; \ - esac; \ - for file in $$dist_files; do \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - if test -d $$d/$$file; then \ - dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test -d "$(distdir)/$$file"; then \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ - else \ - test -f "$(distdir)/$$file" \ - || cp -p $$d/$$file "$(distdir)/$$file" \ - || exit 1; \ - fi; \ - done -check-am: all-am -check: check-am -all-am: Makefile -installdirs: -install: install-am -install-exec: install-exec-am -install-data: install-data-am -uninstall: uninstall-am - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-am -install-strip: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install -mostlyclean-generic: - -clean-generic: - -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." -clean: clean-am - -clean-am: clean-generic clean-libtool mostlyclean-am - -distclean: distclean-am - -rm -f Makefile -distclean-am: clean-am distclean-generic - -dvi: dvi-am - -dvi-am: - -html: html-am - -html-am: - -info: info-am - -info-am: - -install-data-am: - -install-dvi: install-dvi-am - -install-dvi-am: - -install-exec-am: - -install-html: install-html-am - -install-html-am: - -install-info: install-info-am - -install-info-am: - -install-man: - -install-pdf: install-pdf-am - -install-pdf-am: - -install-ps: install-ps-am - -install-ps-am: - -installcheck-am: - -maintainer-clean: maintainer-clean-am - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-am - -mostlyclean-am: mostlyclean-generic mostlyclean-libtool - -pdf: pdf-am - -pdf-am: - -ps: ps-am - -ps-am: - -uninstall-am: - -.MAKE: install-am install-strip - -.PHONY: all all-am check check-am clean clean-generic clean-libtool \ - distclean distclean-generic distclean-libtool distdir dvi \ - dvi-am html html-am info info-am install install-am \ - install-data install-data-am install-dvi install-dvi-am \ - install-exec install-exec-am install-html install-html-am \ - install-info install-info-am install-man install-pdf \ - install-pdf-am install-ps install-ps-am install-strip \ - installcheck installcheck-am installdirs maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-generic \ - mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am - - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/doc/README b/openair3/PMIPv6/freeradius-client-1.1.6/doc/README deleted file mode 100644 index e421e5efa6..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/doc/README +++ /dev/null @@ -1,16 +0,0 @@ -In combination with freeradius-server you can test -freeradius-client in a simple configuration. - -cp /usr/share/doc/packages/radiusclient/login.radius/login.example /usr/sbin/login.radius -chmod +x /usr/sbin/login.radius - -You then have to change /etc/raddb/{clients,users} and -/etc/radiusclient/servers - just remove the '#' from the -corresponding lines. - -Start radiusd (insserv radiusd and then execute rcradiusd start). - -Afterwards you may install radlogin on e.g. /dev/tty8 and login -using a local user name. You are transferred to localhost via telnet - -not very interesting, but accounting is already enabled in /var/radacct. - diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/doc/instop.html b/openair3/PMIPv6/freeradius-client-1.1.6/doc/instop.html deleted file mode 100644 index 0869e577fc..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/doc/instop.html +++ /dev/null @@ -1,451 +0,0 @@ - - - -Radiusclient - Installation and Operation Guide - - - - -

-
- -Radiusclient - Installation and Operation Guide - -
-

- -
- - -

-Table of contents -

- - - - - -

- -Introduction - -

- - Radiusclient is a /bin/login replacement which gets called by a - getty to log in a user and to setup the user's login environment. -
- Normal login programs just check the login name and password which the - user entered against the local password file (/etc/passwd, /etc/shadow). - In contrast to that Radiusclient also uses the RADIUS protocol to - authenticate the user. - -

- - RADIUS stands for Remote Authentication Dial - In User Service and is a protocol for carrying - authentication, authorization, and configuration information between - a Network Access Server (NAS) which desires to authenticate its - links and a shared Authentication Server.
The protocol - originally was designed by the well known terminal server - manufacturer Livingston for use with their Portmaster series of - terminal servers. Since then it has been implemented by a lot of - other vendors and it is also on it's way to become a Internet - Standard. - - -

- -Principles of operation - -

- - If the main program of Radiusclient which is called radlogin gets - invoked by your systems's getty, it behaves like the normal login - program to the user. - -

- - First it asks the user for his loginname (if not supplied by getty) - and his password. - -

- - Then it tries to find the login name either through a RADIUS server - query or in the local passwd file or through both methods. - -

- - If the user is authenticated locally radlogin calls the local login - program to spawn a login enviroment. - -

- - If the user is authenticated via RADIUS radlogin calls a special other - login program which gets the information that was passed from the RADIUS - server in enviroment variables. - -

- - In this special login program you can now either start a telnet/rlogin - session or start up SLIP/CSLIP or even PPP based on the information from - the RADIUS server. Furthermore you can send accounting information to a - RADIUS accouting server via a program called radacct which is also - part of Radiusclient. - - -

- -Installation - -

- - Get the Radiusclient package from the places mentioned - below. - -

- - Then unpack it in a directory which you normally use for keeping your - source code. For example do: - -

- -

-	cd /usr/src
-	gzip -dc radiusclient-x.x.tar.gz | tar xvvf -
-	
- -

- - You now should have a directory called radiusclient-x.x in which all the - source code of Radiusclient is stored. - -

- - First run configure --help to see if you need to enable any options. - Then configure the sources by calling configure with the - appropriate options. - -

- - Have a look at include/messages.h if you'd like to change some - of the messages there. But normally you shouldn't. - -

- - Executing "make" builds the executables. - -

- - Executing "make install" will install the executables and example - versions of all the needed config and data files. Be careful - the installation process will overwrite existing files - without asking you. - Try "make -n install" to see which file gets were if you're - unsure. - -

- - The installation procedure will only install a dummy login.radius - script which just outputs all RADIUS_* environment variables and - then exits. - -

- - You need to write your own login.radius if you want that the script - does something useful. See the login.radius directory for example - scripts. - -

- - You will have to look into radiusclient.conf and edit it. - -

- - Add the following two line to /etc/services if you don't - already have them: - -

- -

-	radius          1645/udp	# RADIUS access requests
-	radacct         1646/udp	# RADIUS accounting requests
-	
-

- - Get your getty to execute radlogin instead of the normal login - process. The method of how to do this varies from getty to getty. - -

- -

    -
  • If you're using getty_ps you can set the LOGIN directive in the - respective config file. - -

    - -

  • agetty has a command line option (-l) which allows - you to specify an alternate login program, i.e. radlogin. - -

    - -

  • With mgetty you add the following line to your login.cfg file: - -

    - -

    -	*       -       -       /radlogin @
    -		
    - -
- - I suggest you use mgetty or getty_ps, mgetty even has a nice - automatic PPP detection feature, which can be useful. - - -

- -Availability - -

- - This program is avaiable from - ftp.cityline.net in the directory - /pub/radiusclient. -
- Download the version with the largest version number, older version are - only kept for reference. - - - -

- -Credits - -

- - My thanks go to all the people who have helped me in one or another - way with the development of radiusclient but especially to: - -

- -

- - - - - - - - - - -
- - Miguel A.L. Paraz <map@iphil.net> - -
- - Matjaz Godec <gody@master.slon.net> - -
- - Michael Lausch <mla@gams.co.at> - -
-
- - -

- -Copyright - -

- - Read the file COPYRIGHT in the top directory of Radiusclient for the - respective copyrights. - -

- - If you like the Radiusclient software very much and/or are using - it on a production machine please send my a postcard. My postal - address is: - -

- -

- - - - -
- Lars Fenneberg
- Boettgerstrasse 29
- 22851 Norderstedt
- Germany
-
-
- - -

- -Contacting the author - -

- - Send your comments, suggestions, bug reports and patches to - - Lars Fenneberg <lf@elemental.net>. - - -

- -Appendix A: Command line flags - -

- -
- - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - -
- radlogin -
- -f - - Path to an alternative configuration file -
- -i - - File name of the terminal used to determine what to send in - the NAS-Port attribute. Normally the tty of stdin is used. -
- -n - - Disable display if the radlogin issue file. This option is set - by default if radlogin is called with an argument. -
- -V - - Display version information -
- -h - - Display usage information -
-
- - - - - - - - - - - - - - - - - -
- radacct -
- -i - - File name of the terminal used to determine what to send in - the NAS-Port attribute. Normally the tty of stdout is used. -
- -V - - Display version information -
- -h - - Display usage information -
-
- - - - - - - - - - - - - -
- radstatus -
- -V - - Display version information -
- -h - - Display usage information -
-
-
- -

- -


-
-Last changed: 7/19/98
-Copyright © 1996,1997,1998, Lars Fenneberg, lf@elemental.net
- - diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/doc/login.example b/openair3/PMIPv6/freeradius-client-1.1.6/doc/login.example deleted file mode 100755 index 959e204609..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/doc/login.example +++ /dev/null @@ -1,279 +0,0 @@ -#!/usr/bin/perl -# -# Sample login-Skript for use with radlogin -# -# Copyright (c) 1998 S.u.S.E. GmbH Fuerth, Germany. -# -# please send bugfixes or comments to feedback@suse.de. -# -# derived partly from login.radius/migs/login.radius -# currently does not do anything useful - for testing purposes only -# It only sets up Accounting for a simple Rlogin-User -# -# You can install this is /usr/sbin/login.radius for testing with -# radlogin - -use strict; - -# Programs and files. -my $prog_radacct = "/usr/bin/radacct"; -my $prog_rlogin = "/usr/bin/rlogin"; -my $prog_telnet = "/usr/bin/telnet"; -my $prog_tcpclear = "/usr/bin/telnet -e ''"; -my $prog_tty = "/usr/bin/tty"; -my $prog_who = "/usr/bin/who"; - -my $debug = 1; - -my $path_radiusclient_map = "/etc/radclient/port-id-map"; - -my $login_host = "0.0.0.0"; - -############################################################################# - -# Main program. - -print "Starting.\n" if ($debug); - -# Run 'who am i' to determine the current port. -my $port = `$prog_tty`; -chomp ($port); - -# Translate port numbers to numbers for RADIUS. -# This translation is done again by radacct, but it may be useful here. -# Remove if CPU time is a problem. - -my ($portid, $line); -open (H, $path_radiusclient_map); -while (($line = ) && (!$portid)) -{ - my @info = split (/\s+/, $line); - $portid = $info[1] if ($info[0] eq $port); -} -close (H); - -if ($debug) -{ - # Print out all the RADIUS variables. - my @el = grep (/^RADIUS/, keys (%ENV)); - my $e; - foreach $e (@el) - { - print "$e = " . $ENV{$e} . "\n"; - } -} - -# If the service type is Framed, then give them PPP. -# SLIP is not implemented (and will probably never be). -my $username = $ENV{"RADIUS_USER_NAME"}; - -# Generate a "unique" string for the session ID. -my $sessionid = "$$" . time (); - -if ($ENV{"RADIUS_SERVICE_TYPE"} =~ /Login/) -{ - # Warning: This code has not been tested as well as the PPP version, - # as of now (19961107). - - # Determine what host to connect to. - if (($ENV{"RADIUS_LOGIN_IP_HOST"} eq "0.0.0.0") || - !defined ($ENV{"RADIUS_LOGIN_IP_HOST"})) - { - die ("login_host not defined"); - } - elsif ($ENV{"RADIUS_LOGIN_IP_HOST"} eq "255.255.255.255") - { - # The user should be able to choose. Prompt the user. - print "Host to connect to? "; - $login_host = ; - chomp ($login_host); - } - else - { - # Use what's specified by the RADIUS server. - $login_host = $ENV{"RADIUS_LOGIN_IP_HOST"}; - } - - # Log into a host. Default to telnet. Do the accounting - # now, since the target of the login wouldn't know how to - # account for it. - - # Time. - my $timestart = time (); - my $login_service = $ENV{"RADIUS_LOGIN_SERVICE"}; - - # What protocol are we running? - my ($prog_run, $login_port); - - if ($login_service eq "Rlogin") - { - $prog_run = $prog_rlogin; - } - elsif ($login_service eq "Telnet") - { - $prog_run = $prog_telnet; - $login_port = $ENV{"RADIUS_LOGIN_PORT"}; - } - elsif ($login_service eq "TCP-Clear") - { - $prog_run = $prog_tcpclear; - $login_port = $ENV{"RADIUS_LOGIN_PORT"}; - } else { - die "unkown login_service $login_service\n"; - } - - # Start accounting. Send the record. - open (H, "| $prog_radacct") || die ("Cannot run $prog_radacct"); - - my $cmd = - "Acct-Session-ID = \"$sessionid\"\n" . - "User-Name = \"$username\"\n" . - "Acct-Status-Type = Start\n" . - "Acct-Authentic = RADIUS\n" . - "Service-Type = Login-User\n" . - "Login-Service = " . $login_service . "\n" . - "Login-IP-Host = $login_host\n"; - print H $cmd; - close (H); - - # Store the user information into portinfo. We need to - # manually fork, since we have to know the PID of the program. - - my $pid = fork (); - if ($pid == 0) - { - # Child. Run the program. - # print "Connecting to $login_host:\n"; - my $cmd = "$prog_run $login_host $login_port"; - print "Running $cmd\n" if ($debug); - exec ("$cmd"); - } - else - { - # Parent. - $login_host = $ENV{"RADIUS_LOGIN_IP_HOST"}; - } - - # Log into a host. Default to telnet. Do the accounting - # now, since the target of the login wouldn't know how to - # account for it. - - # Time. - my $timestart = time (); - my $login_service = $ENV{"RADIUS_LOGIN_SERVICE"}; - - # What protocol are we running? - my ($prog_run, $login_port); - - if ($login_service eq "Rlogin") - { - $prog_run = $prog_rlogin; - } - elsif ($login_service eq "Telnet") - { - $prog_run = $prog_telnet; - $login_port = $ENV{"RADIUS_LOGIN_PORT"}; - } - elsif ($login_service eq "TCP-Clear") - { - $prog_run = $prog_tcpclear; - $login_port = $ENV{"RADIUS_LOGIN_PORT"}; - } else { - die "unkown login_service $login_service\n"; - } - - # Start accounting. Send the record. - open (H, "| $prog_radacct") || die ("Cannot run $prog_radacct"); - - my $cmd = - "Acct-Session-ID = \"$sessionid\"\n" . - "User-Name = \"$username\"\n" . - "Acct-Status-Type = Start\n" . - "Acct-Authentic = RADIUS\n" . - "Service-Type = Login-User\n" . - "Login-Service = " . $login_service . "\n" . - "Login-IP-Host = $login_host\n"; - print H $cmd; - close (H); - - # Store the user information into portinfo. We need to - # manually fork, since we have to know the PID of the program. - - my $pid = fork (); - if ($pid == 0) - { - # Child. Run the program. - # print "Connecting to $login_host:\n"; - my $cmd = "$prog_run $login_host $login_port"; - print "Running $cmd\n" if ($debug); - exec ("$cmd"); - } - else - { - # Parent. - # Create the portinfo record, which needs the pid of the program - # to kill. - # The IP address is all zero, as it is not applicable here. - # Store the time now, and the Session-Timeout. - - # Wait for the session to finish. - waitpid ($pid, 0); - } - # Stop. Send the record. - open (H, "| $prog_radacct") || die ("Cannot run $prog_radacct"); - - my $timespent = time () - $timestart; - - my $cmd = - "Acct-Session-ID = \"$sessionid\"\n" . - "User-Name = \"$username\"\n" . - "Acct-Status-Type = Stop\n" . - "Acct-Authentic = RADIUS\n" . - "Service-Type = Login-User\n" . - "Login-Service = " . $login_service . "\n" . - "Login-IP-Host = $login_host\n" . - "Acct-Session-Time = $timespent\n"; - - print H $cmd; - close (H); -} else { - my $r = $ENV{"RADIUS_SERVICE_TYP"}; - print "Unhandled Service-Type $r\n"; -} - -### END #### - - - - - # Create the portinfo record, which needs the pid of the program - # to kill. - # The IP address is all zero, as it is not applicable here. - # Store the time now, and the Session-Timeout. - - # Wait for the session to finish. - waitpid ($pid, 0); - } - # Stop. Send the record. - open (H, "| $prog_radacct") || die ("Cannot run $prog_radacct"); - - my $timespent = time () - $timestart; - - my $cmd = - "Acct-Session-ID = \"$sessionid\"\n" . - "User-Name = \"$username\"\n" . - "Acct-Status-Type = Stop\n" . - "Acct-Authentic = RADIUS\n" . - "Service-Type = Login-User\n" . - "Login-Service = " . $login_service . "\n" . - "Login-IP-Host = $login_host\n" . - "Acct-Session-Time = $timespent\n"; - - print H $cmd; - close (H); -} else { - my $r = $ENV{"RADIUS_SERVICE_TYP"}; - print "Unhandled Service-Type $r\n"; -} - -### END #### diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/doc/release-method.txt b/openair3/PMIPv6/freeradius-client-1.1.6/doc/release-method.txt deleted file mode 100644 index 095bac65cb..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/doc/release-method.txt +++ /dev/null @@ -1,139 +0,0 @@ -# Version: $Id: release-method.txt,v 1.2 2007/04/14 23:40:35 pnixon Exp $ -# -# This is NOT a shell script! -# -# This file documents the methods used by the developers to perform a release of the software. -# -# If you're not a developer, then you can ignore this file. -# -# -VERSION=1 -REVISION=1 - -# cvs -d :pserver:USER@cvs.freeradius.org:/source checkout -P -d freeradius-client-$(VERSION).$(REVISION) radiusclient -cvs -d :pserver:USER@cvs.freeradius.org:/source checkout -P -d freeradius-client-1.1 radiusclient - -# -# Do NOT type 'configure', 'make', or anything else. -# We presume that -# -# cd freeradius-client-$(VERSION).$(REVISION) -cd freeradius-client-1.1 - -# -# Create a branch for the release -# -cvs tag -b branch_1_1 - -# -# Mark all of the files to be for the branch -# -cvs update -rbranch_1_1 - -# -# remove $$ surrounding the $Date ... $ -# add any last-minute notes -# -vi doc/ChangeLog - -# -# Commit it (to the branch) -# -cvs commit doc/ChangeLog - -# -# Change version/revision numbers -# -vi configure.in -vi redhat/freeradius-client.spec -vi suse/freeradius-client.spec -vi debian/changelog -vi debian/rules - -# -# Re-build and commit the configure scripts and other autofoo -libtoolize --force -aclocal -automake -ac -autoconf -cvs commit - -# -# tag the files for the release, -# which is a POINT release of the main release. -# -# i.e. We may way a 0.7.1 release later, which will -# be tagged 'release_0_7_1' on the branch for 0.7, -# which is called 'branch_0_7'. -# -# cvs tag release_$(VERSION)_$(REVISION)_0 -cvs tag release_1_1_0 - -# -# Delete the CVS directories. -# -rm -rf `find . -name CVS -print` - -# -# Delete any temporary files. -# -rm -f `find . -name "*~" -print` - -# -# Visually inspect the source, to be sure it's clean. -# - -cd .. - -# tar jcf freeradius-client-$(VERSION).$(REVISION).tar.bz2 freeradius-client-$(VERSION).$(REVISION) -tar jcf freeradius-client-1.1.tar.bz2 freeradius-client-1.1 - -# -# Sign the archive. -# - -# -# These next steps presume you have an account on the main -# FreeRADIUS web server. -# -scp freeradius-client-1.1.tar.bz2 ...freeradius.org - -# move the archive to ftp 'pub/radius' directory - -# move the previous version to the 'old' directory -mv freeradius-client-1.0.tar.bz2 old - -# -# delete the old soft link. -# -rm freeradius-client.tar.bz2 - -# -# link the new version to it's simple name -# -ln -s freeradius-1.1.tar.bz2 freeradius.tar.bz2 - -# go to the www directory - -# -# Ensure that the source archive on the web is updated. -# cvs update -APd radiusd - -# edit index.html, and add in the release notes under 'news' -# edit getting.html, and update notes about current/old releases. - -# on your work machine again, -rm -rf freeradius-client-1.1.tar.gz freeradius-client-1.1 - -# go to your working directory -# edit configure.in, to bump the version to '1.2-pre' -autoconf -cvs commit configure configure.in - -cd doc - -# -# Add in notes about next release, in preparation for more change log notes. -# -vi ChangeLog -cvs commit ChangeLog diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/etc/Makefile b/openair3/PMIPv6/freeradius-client-1.1.6/etc/Makefile deleted file mode 100644 index 859f297782..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/etc/Makefile +++ /dev/null @@ -1,441 +0,0 @@ -# Makefile.in generated by automake 1.11.1 from Makefile.am. -# etc/Makefile. Generated from Makefile.in by configure. - -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, -# Inc. -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - - - -# -# $Id: Makefile.am,v 1.5 2008/01/05 03:04:46 sobomax Exp $ -# -# Copyright (C) 1997,1998 Lars Fenneberg -# -# See the file COPYRIGHT for the respective terms and conditions. -# If the file is missing contact me at lf@elemental.net -# and I'll send you a copy. -# - - -pkgdatadir = $(datadir)/radiusclient -pkgincludedir = $(includedir)/radiusclient -pkglibdir = $(libdir)/radiusclient -pkglibexecdir = $(libexecdir)/radiusclient -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = i686-pc-linux-gnu -host_triplet = i686-pc-linux-gnu -target_triplet = i686-pc-linux-gnu -subdir = etc -DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/configure.in -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs -CONFIG_HEADER = $(top_builddir)/config.h -CONFIG_CLEAN_FILES = -CONFIG_CLEAN_VPATH_FILES = -SOURCES = -DIST_SOURCES = -am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; -am__vpath_adj = case $$p in \ - $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ - *) f=$$p;; \ - esac; -am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; -am__install_max = 40 -am__nobase_strip_setup = \ - srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` -am__nobase_strip = \ - for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" -am__nobase_list = $(am__nobase_strip_setup); \ - for p in $$list; do echo "$$p $$p"; done | \ - sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ - $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ - if (++n[$$2] == $(am__install_max)) \ - { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ - END { for (dir in files) print dir, files[dir] }' -am__base_list = \ - sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ - sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' -am__installdirs = "$(DESTDIR)$(pkgsysconfdir)" -DATA = $(pkgsysconf_DATA) -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = ${SHELL} /usr/local/src/freeradius-client-1.1.6/missing --run aclocal-1.11 -ALLOCA = -AMTAR = ${SHELL} /usr/local/src/freeradius-client-1.1.6/missing --run tar -AR = /usr/bin/ar -AUTOCONF = ${SHELL} /usr/local/src/freeradius-client-1.1.6/missing --run autoconf -AUTOHEADER = ${SHELL} /usr/local/src/freeradius-client-1.1.6/missing --run autoheader -AUTOMAKE = ${SHELL} /usr/local/src/freeradius-client-1.1.6/missing --run automake-1.11 -AWK = gawk -CC = gcc -CCDEPMODE = depmode=gcc3 -CFLAGS = -g -O2 -CPP = gcc -E -CPPFLAGS = -CYGPATH_W = echo -DEFS = -DHAVE_CONFIG_H -DEPDIR = .deps -DSYMUTIL = -DUMPBIN = -ECHO_C = -ECHO_N = -n -ECHO_T = -EGREP = /bin/grep -E -EXEEXT = -FGREP = /bin/grep -F -GREP = /bin/grep -INSTALL = /usr/bin/install -c -INSTALL_DATA = ${INSTALL} -m 644 -INSTALL_PROGRAM = ${INSTALL} -INSTALL_SCRIPT = ${INSTALL} -INSTALL_STRIP_PROGRAM = $(install_sh) -c -s -LD = /usr/bin/ld -LDFLAGS = -LIBOBJS = -LIBS = -lcrypt -lnsl -LIBTOOL = $(SHELL) $(top_builddir)/libtool -LIBVERSION = 2:0:0 -LIPO = -LN_S = ln -s -LTLIBOBJS = -MAINT = # -MAKEINFO = ${SHELL} /usr/local/src/freeradius-client-1.1.6/missing --run makeinfo -MKDIR_P = /bin/mkdir -p -NM = /usr/bin/nm -B -NMEDIT = -OBJDUMP = objdump -OBJEXT = o -OTOOL = -OTOOL64 = -PACKAGE = radiusclient -PACKAGE_BUGREPORT = -PACKAGE_NAME = -PACKAGE_STRING = -PACKAGE_TARNAME = -PACKAGE_URL = -PACKAGE_VERSION = -PATH_SEPARATOR = : -RANLIB = ranlib -RC_LOG_FACILITY = LOG_DAEMON -RC_SECURE_PATH = /bin:/usr/bin:/usr/local/bin -SED = /bin/sed -SET_MAKE = -SHELL = /bin/bash -STRIP = strip -VERSION = 1.1.6 -abs_builddir = /usr/local/src/freeradius-client-1.1.6/etc -abs_srcdir = /usr/local/src/freeradius-client-1.1.6/etc -abs_top_builddir = /usr/local/src/freeradius-client-1.1.6 -abs_top_srcdir = /usr/local/src/freeradius-client-1.1.6 -ac_ct_CC = gcc -ac_ct_DUMPBIN = -am__include = include -am__leading_dot = . -am__quote = -am__tar = ${AMTAR} chof - "$$tardir" -am__untar = ${AMTAR} xf - -bindir = ${exec_prefix}/bin -build = i686-pc-linux-gnu -build_alias = -build_cpu = i686 -build_os = linux-gnu -build_vendor = pc -builddir = . -datadir = ${datarootdir} -datarootdir = ${prefix}/share -docdir = ${datarootdir}/doc/${PACKAGE} -dvidir = ${docdir} -exec_prefix = ${prefix} -host = i686-pc-linux-gnu -host_alias = -host_cpu = i686 -host_os = linux-gnu -host_vendor = pc -htmldir = ${docdir} -includedir = ${prefix}/include -infodir = ${datarootdir}/info -install_sh = ${SHELL} /usr/local/src/freeradius-client-1.1.6/install-sh -libdir = ${exec_prefix}/lib -libexecdir = ${exec_prefix}/libexec -localedir = ${datarootdir}/locale -localstatedir = ${prefix}/var -lt_ECHO = echo -mandir = ${datarootdir}/man -mkdir_p = /bin/mkdir -p -oldincludedir = /usr/include -pdfdir = ${docdir} -pkgsysconfdir = ${prefix}/etc/radiusclient -prefix = /usr/local -program_transform_name = s,x,x, -psdir = ${docdir} -sbindir = ${exec_prefix}/sbin -sharedstatedir = ${prefix}/com -srcdir = . -sysconfdir = ${prefix}/etc -target = i686-pc-linux-gnu -target_alias = -target_cpu = i686 -target_os = linux-gnu -target_vendor = pc -top_build_prefix = ../ -top_builddir = .. -top_srcdir = .. -AUTOMAKE_OPTIONS = foreign -CLEANFILES = *~ radiusclient.conf -pkgsysconf_DATA = issue port-id-map radiusclient.conf \ - dictionary dictionary.ascend dictionary.compat dictionary.merit \ - dictionary.sip - -EXTRA_DIST = issue port-id-map dictionary dictionary.ascend \ - dictionary.compat dictionary.merit servers radiusclient.conf.in \ - dictionary.sip - -all: all-am - -.SUFFIXES: -$(srcdir)/Makefile.in: # $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ - && { if test -f $@; then exit 0; else break; fi; }; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign etc/Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --foreign etc/Makefile -.PRECIOUS: Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: # $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): # $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(am__aclocal_m4_deps): - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs -install-pkgsysconfDATA: $(pkgsysconf_DATA) - @$(NORMAL_INSTALL) - test -z "$(pkgsysconfdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgsysconfdir)" - @list='$(pkgsysconf_DATA)'; test -n "$(pkgsysconfdir)" || list=; \ - for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - echo "$$d$$p"; \ - done | $(am__base_list) | \ - while read files; do \ - echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgsysconfdir)'"; \ - $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgsysconfdir)" || exit $$?; \ - done - -uninstall-pkgsysconfDATA: - @$(NORMAL_UNINSTALL) - @list='$(pkgsysconf_DATA)'; test -n "$(pkgsysconfdir)" || list=; \ - files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ - test -n "$$files" || exit 0; \ - echo " ( cd '$(DESTDIR)$(pkgsysconfdir)' && rm -f" $$files ")"; \ - cd "$(DESTDIR)$(pkgsysconfdir)" && rm -f $$files -tags: TAGS -TAGS: - -ctags: CTAGS -CTAGS: - - -distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - list='$(DISTFILES)'; \ - dist_files=`for file in $$list; do echo $$file; done | \ - sed -e "s|^$$srcdirstrip/||;t" \ - -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ - case $$dist_files in \ - */*) $(MKDIR_P) `echo "$$dist_files" | \ - sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ - sort -u` ;; \ - esac; \ - for file in $$dist_files; do \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - if test -d $$d/$$file; then \ - dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test -d "$(distdir)/$$file"; then \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ - else \ - test -f "$(distdir)/$$file" \ - || cp -p $$d/$$file "$(distdir)/$$file" \ - || exit 1; \ - fi; \ - done -check-am: all-am -check: check-am -all-am: Makefile $(DATA) -installdirs: - for dir in "$(DESTDIR)$(pkgsysconfdir)"; do \ - test -z "$$dir" || $(MKDIR_P) "$$dir"; \ - done -install: install-am -install-exec: install-exec-am -install-data: install-data-am -uninstall: uninstall-am - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-am -install-strip: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install -mostlyclean-generic: - -clean-generic: - -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." -clean: clean-am - -clean-am: clean-generic clean-libtool mostlyclean-am - -distclean: distclean-am - -rm -f Makefile -distclean-am: clean-am distclean-generic - -dvi: dvi-am - -dvi-am: - -html: html-am - -html-am: - -info: info-am - -info-am: - -install-data-am: install-data-local install-pkgsysconfDATA - -install-dvi: install-dvi-am - -install-dvi-am: - -install-exec-am: - -install-html: install-html-am - -install-html-am: - -install-info: install-info-am - -install-info-am: - -install-man: - -install-pdf: install-pdf-am - -install-pdf-am: - -install-ps: install-ps-am - -install-ps-am: - -installcheck-am: - -maintainer-clean: maintainer-clean-am - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-am - -mostlyclean-am: mostlyclean-generic mostlyclean-libtool - -pdf: pdf-am - -pdf-am: - -ps: ps-am - -ps-am: - -uninstall-am: uninstall-local uninstall-pkgsysconfDATA - -.MAKE: install-am install-strip - -.PHONY: all all-am check check-am clean clean-generic clean-libtool \ - distclean distclean-generic distclean-libtool distdir dvi \ - dvi-am html html-am info info-am install install-am \ - install-data install-data-am install-data-local install-dvi \ - install-dvi-am install-exec install-exec-am install-html \ - install-html-am install-info install-info-am install-man \ - install-pdf install-pdf-am install-pkgsysconfDATA install-ps \ - install-ps-am install-strip installcheck installcheck-am \ - installdirs maintainer-clean maintainer-clean-generic \ - mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ - ps ps-am uninstall uninstall-am uninstall-local \ - uninstall-pkgsysconfDATA - - -radiusclient.conf: radiusclient.conf.in - sed -e 's|@sbin''dir@|$(sbindir)|g' \ - -e 's|@pkgsysconf''dir@|$(pkgsysconfdir)|g' \ - <$(srcdir)/radiusclient.conf.in >radiusclient.conf - -install-data-local: servers - $(mkinstalldirs) $(DESTDIR)$(pkgsysconfdir); \ - echo " $(INSTALL) -m 600 $(srcdir)/servers $(DESTDIR)$(pkgsysconfdir)/servers"; \ - $(INSTALL) -m 600 $(srcdir)/servers $(DESTDIR)$(pkgsysconfdir)/servers - -uninstall-local: - rm -f $(DESTDIR)$(pkgsysconfdir)/servers - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/etc/Makefile.am b/openair3/PMIPv6/freeradius-client-1.1.6/etc/Makefile.am deleted file mode 100644 index 245d1a8d58..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/etc/Makefile.am +++ /dev/null @@ -1,36 +0,0 @@ -# -# $Id: Makefile.am,v 1.5 2008/01/05 03:04:46 sobomax Exp $ -# -# Copyright (C) 1997,1998 Lars Fenneberg -# -# See the file COPYRIGHT for the respective terms and conditions. -# If the file is missing contact me at lf@elemental.net -# and I'll send you a copy. -# - -AUTOMAKE_OPTIONS = foreign - -CLEANFILES = *~ radiusclient.conf - -sbindir = @sbindir@ -pkgsysconfdir = @pkgsysconfdir@ -pkgsysconf_DATA = issue port-id-map radiusclient.conf \ - dictionary dictionary.ascend dictionary.compat dictionary.merit \ - dictionary.sip - -EXTRA_DIST = issue port-id-map dictionary dictionary.ascend \ - dictionary.compat dictionary.merit servers radiusclient.conf.in \ - dictionary.sip - -radiusclient.conf: radiusclient.conf.in - sed -e 's|@sbin''dir@|$(sbindir)|g' \ - -e 's|@pkgsysconf''dir@|$(pkgsysconfdir)|g' \ - <$(srcdir)/radiusclient.conf.in >radiusclient.conf - -install-data-local: servers - $(mkinstalldirs) $(DESTDIR)$(pkgsysconfdir); \ - echo " $(INSTALL) -m 600 $(srcdir)/servers $(DESTDIR)$(pkgsysconfdir)/servers"; \ - $(INSTALL) -m 600 $(srcdir)/servers $(DESTDIR)$(pkgsysconfdir)/servers - -uninstall-local: - rm -f $(DESTDIR)$(pkgsysconfdir)/servers diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/etc/Makefile.in b/openair3/PMIPv6/freeradius-client-1.1.6/etc/Makefile.in deleted file mode 100644 index 269cd80515..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/etc/Makefile.in +++ /dev/null @@ -1,441 +0,0 @@ -# Makefile.in generated by automake 1.11.1 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, -# Inc. -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -@SET_MAKE@ - -# -# $Id: Makefile.am,v 1.5 2008/01/05 03:04:46 sobomax Exp $ -# -# Copyright (C) 1997,1998 Lars Fenneberg -# -# See the file COPYRIGHT for the respective terms and conditions. -# If the file is missing contact me at lf@elemental.net -# and I'll send you a copy. -# - -VPATH = @srcdir@ -pkgdatadir = $(datadir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ -pkglibexecdir = $(libexecdir)/@PACKAGE@ -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = @build@ -host_triplet = @host@ -target_triplet = @target@ -subdir = etc -DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/configure.in -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs -CONFIG_HEADER = $(top_builddir)/config.h -CONFIG_CLEAN_FILES = -CONFIG_CLEAN_VPATH_FILES = -SOURCES = -DIST_SOURCES = -am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; -am__vpath_adj = case $$p in \ - $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ - *) f=$$p;; \ - esac; -am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; -am__install_max = 40 -am__nobase_strip_setup = \ - srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` -am__nobase_strip = \ - for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" -am__nobase_list = $(am__nobase_strip_setup); \ - for p in $$list; do echo "$$p $$p"; done | \ - sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ - $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ - if (++n[$$2] == $(am__install_max)) \ - { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ - END { for (dir in files) print dir, files[dir] }' -am__base_list = \ - sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ - sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' -am__installdirs = "$(DESTDIR)$(pkgsysconfdir)" -DATA = $(pkgsysconf_DATA) -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = @ACLOCAL@ -ALLOCA = @ALLOCA@ -AMTAR = @AMTAR@ -AR = @AR@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -CC = @CC@ -CCDEPMODE = @CCDEPMODE@ -CFLAGS = @CFLAGS@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CYGPATH_W = @CYGPATH_W@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -DSYMUTIL = @DSYMUTIL@ -DUMPBIN = @DUMPBIN@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -EXEEXT = @EXEEXT@ -FGREP = @FGREP@ -GREP = @GREP@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -LD = @LD@ -LDFLAGS = @LDFLAGS@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LIBTOOL = @LIBTOOL@ -LIBVERSION = @LIBVERSION@ -LIPO = @LIPO@ -LN_S = @LN_S@ -LTLIBOBJS = @LTLIBOBJS@ -MAINT = @MAINT@ -MAKEINFO = @MAKEINFO@ -MKDIR_P = @MKDIR_P@ -NM = @NM@ -NMEDIT = @NMEDIT@ -OBJDUMP = @OBJDUMP@ -OBJEXT = @OBJEXT@ -OTOOL = @OTOOL@ -OTOOL64 = @OTOOL64@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_URL = @PACKAGE_URL@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -RANLIB = @RANLIB@ -RC_LOG_FACILITY = @RC_LOG_FACILITY@ -RC_SECURE_PATH = @RC_SECURE_PATH@ -SED = @SED@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -STRIP = @STRIP@ -VERSION = @VERSION@ -abs_builddir = @abs_builddir@ -abs_srcdir = @abs_srcdir@ -abs_top_builddir = @abs_top_builddir@ -abs_top_srcdir = @abs_top_srcdir@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ -am__include = @am__include@ -am__leading_dot = @am__leading_dot@ -am__quote = @am__quote@ -am__tar = @am__tar@ -am__untar = @am__untar@ -bindir = @bindir@ -build = @build@ -build_alias = @build_alias@ -build_cpu = @build_cpu@ -build_os = @build_os@ -build_vendor = @build_vendor@ -builddir = @builddir@ -datadir = @datadir@ -datarootdir = @datarootdir@ -docdir = @docdir@ -dvidir = @dvidir@ -exec_prefix = @exec_prefix@ -host = @host@ -host_alias = @host_alias@ -host_cpu = @host_cpu@ -host_os = @host_os@ -host_vendor = @host_vendor@ -htmldir = @htmldir@ -includedir = @includedir@ -infodir = @infodir@ -install_sh = @install_sh@ -libdir = @libdir@ -libexecdir = @libexecdir@ -localedir = @localedir@ -localstatedir = @localstatedir@ -lt_ECHO = @lt_ECHO@ -mandir = @mandir@ -mkdir_p = @mkdir_p@ -oldincludedir = @oldincludedir@ -pdfdir = @pdfdir@ -pkgsysconfdir = @pkgsysconfdir@ -prefix = @prefix@ -program_transform_name = @program_transform_name@ -psdir = @psdir@ -sbindir = @sbindir@ -sharedstatedir = @sharedstatedir@ -srcdir = @srcdir@ -sysconfdir = @sysconfdir@ -target = @target@ -target_alias = @target_alias@ -target_cpu = @target_cpu@ -target_os = @target_os@ -target_vendor = @target_vendor@ -top_build_prefix = @top_build_prefix@ -top_builddir = @top_builddir@ -top_srcdir = @top_srcdir@ -AUTOMAKE_OPTIONS = foreign -CLEANFILES = *~ radiusclient.conf -pkgsysconf_DATA = issue port-id-map radiusclient.conf \ - dictionary dictionary.ascend dictionary.compat dictionary.merit \ - dictionary.sip - -EXTRA_DIST = issue port-id-map dictionary dictionary.ascend \ - dictionary.compat dictionary.merit servers radiusclient.conf.in \ - dictionary.sip - -all: all-am - -.SUFFIXES: -$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ - && { if test -f $@; then exit 0; else break; fi; }; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign etc/Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --foreign etc/Makefile -.PRECIOUS: Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(am__aclocal_m4_deps): - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs -install-pkgsysconfDATA: $(pkgsysconf_DATA) - @$(NORMAL_INSTALL) - test -z "$(pkgsysconfdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgsysconfdir)" - @list='$(pkgsysconf_DATA)'; test -n "$(pkgsysconfdir)" || list=; \ - for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - echo "$$d$$p"; \ - done | $(am__base_list) | \ - while read files; do \ - echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgsysconfdir)'"; \ - $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgsysconfdir)" || exit $$?; \ - done - -uninstall-pkgsysconfDATA: - @$(NORMAL_UNINSTALL) - @list='$(pkgsysconf_DATA)'; test -n "$(pkgsysconfdir)" || list=; \ - files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ - test -n "$$files" || exit 0; \ - echo " ( cd '$(DESTDIR)$(pkgsysconfdir)' && rm -f" $$files ")"; \ - cd "$(DESTDIR)$(pkgsysconfdir)" && rm -f $$files -tags: TAGS -TAGS: - -ctags: CTAGS -CTAGS: - - -distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - list='$(DISTFILES)'; \ - dist_files=`for file in $$list; do echo $$file; done | \ - sed -e "s|^$$srcdirstrip/||;t" \ - -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ - case $$dist_files in \ - */*) $(MKDIR_P) `echo "$$dist_files" | \ - sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ - sort -u` ;; \ - esac; \ - for file in $$dist_files; do \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - if test -d $$d/$$file; then \ - dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test -d "$(distdir)/$$file"; then \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ - else \ - test -f "$(distdir)/$$file" \ - || cp -p $$d/$$file "$(distdir)/$$file" \ - || exit 1; \ - fi; \ - done -check-am: all-am -check: check-am -all-am: Makefile $(DATA) -installdirs: - for dir in "$(DESTDIR)$(pkgsysconfdir)"; do \ - test -z "$$dir" || $(MKDIR_P) "$$dir"; \ - done -install: install-am -install-exec: install-exec-am -install-data: install-data-am -uninstall: uninstall-am - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-am -install-strip: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install -mostlyclean-generic: - -clean-generic: - -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." -clean: clean-am - -clean-am: clean-generic clean-libtool mostlyclean-am - -distclean: distclean-am - -rm -f Makefile -distclean-am: clean-am distclean-generic - -dvi: dvi-am - -dvi-am: - -html: html-am - -html-am: - -info: info-am - -info-am: - -install-data-am: install-data-local install-pkgsysconfDATA - -install-dvi: install-dvi-am - -install-dvi-am: - -install-exec-am: - -install-html: install-html-am - -install-html-am: - -install-info: install-info-am - -install-info-am: - -install-man: - -install-pdf: install-pdf-am - -install-pdf-am: - -install-ps: install-ps-am - -install-ps-am: - -installcheck-am: - -maintainer-clean: maintainer-clean-am - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-am - -mostlyclean-am: mostlyclean-generic mostlyclean-libtool - -pdf: pdf-am - -pdf-am: - -ps: ps-am - -ps-am: - -uninstall-am: uninstall-local uninstall-pkgsysconfDATA - -.MAKE: install-am install-strip - -.PHONY: all all-am check check-am clean clean-generic clean-libtool \ - distclean distclean-generic distclean-libtool distdir dvi \ - dvi-am html html-am info info-am install install-am \ - install-data install-data-am install-data-local install-dvi \ - install-dvi-am install-exec install-exec-am install-html \ - install-html-am install-info install-info-am install-man \ - install-pdf install-pdf-am install-pkgsysconfDATA install-ps \ - install-ps-am install-strip installcheck installcheck-am \ - installdirs maintainer-clean maintainer-clean-generic \ - mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ - ps ps-am uninstall uninstall-am uninstall-local \ - uninstall-pkgsysconfDATA - - -radiusclient.conf: radiusclient.conf.in - sed -e 's|@sbin''dir@|$(sbindir)|g' \ - -e 's|@pkgsysconf''dir@|$(pkgsysconfdir)|g' \ - <$(srcdir)/radiusclient.conf.in >radiusclient.conf - -install-data-local: servers - $(mkinstalldirs) $(DESTDIR)$(pkgsysconfdir); \ - echo " $(INSTALL) -m 600 $(srcdir)/servers $(DESTDIR)$(pkgsysconfdir)/servers"; \ - $(INSTALL) -m 600 $(srcdir)/servers $(DESTDIR)$(pkgsysconfdir)/servers - -uninstall-local: - rm -f $(DESTDIR)$(pkgsysconfdir)/servers - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/etc/dictionary b/openair3/PMIPv6/freeradius-client-1.1.6/etc/dictionary deleted file mode 100644 index 444af15625..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/etc/dictionary +++ /dev/null @@ -1,240 +0,0 @@ -# -# Updated 97/06/13 to livingston-radius-2.01 miquels@cistron.nl -# -# This file contains dictionary translations for parsing -# requests and generating responses. All transactions are -# composed of Attribute/Value Pairs. The value of each attribute -# is specified as one of 4 data types. Valid data types are: -# -# string - 0-253 octets -# ipaddr - 4 octets in network byte order -# integer - 32 bit value in big endian order (high byte first) -# date - 32 bit value in big endian order - seconds since -# 00:00:00 GMT, Jan. 1, 1970 -# -# Enumerated values are stored in the user file with dictionary -# VALUE translations for easy administration. -# -# Example: -# -# ATTRIBUTE VALUE -# --------------- ----- -# Framed-Protocol = PPP -# 7 = 1 (integer encoding) -# - -# -# Following are the proper new names. Use these. -# -ATTRIBUTE User-Name 1 string -ATTRIBUTE Password 2 string -ATTRIBUTE CHAP-Password 3 string -ATTRIBUTE NAS-IP-Address 4 ipaddr -ATTRIBUTE NAS-Port-Id 5 integer -ATTRIBUTE Service-Type 6 integer -ATTRIBUTE Framed-Protocol 7 integer -ATTRIBUTE Framed-IP-Address 8 ipaddr -ATTRIBUTE Framed-IP-Netmask 9 ipaddr -ATTRIBUTE Framed-Routing 10 integer -ATTRIBUTE Filter-Id 11 string -ATTRIBUTE Framed-MTU 12 integer -ATTRIBUTE Framed-Compression 13 integer -ATTRIBUTE Login-IP-Host 14 ipaddr -ATTRIBUTE Login-Service 15 integer -ATTRIBUTE Login-TCP-Port 16 integer -ATTRIBUTE Reply-Message 18 string -ATTRIBUTE Callback-Number 19 string -ATTRIBUTE Callback-Id 20 string -ATTRIBUTE Framed-Route 22 string -ATTRIBUTE Framed-IPX-Network 23 ipaddr -ATTRIBUTE State 24 string -ATTRIBUTE Class 25 string -ATTRIBUTE Vendor-Specific 26 string -ATTRIBUTE Session-Timeout 27 integer -ATTRIBUTE Idle-Timeout 28 integer -ATTRIBUTE Termination-Action 29 integer -ATTRIBUTE Called-Station-Id 30 string -ATTRIBUTE Calling-Station-Id 31 string -ATTRIBUTE NAS-Identifier 32 string -ATTRIBUTE Proxy-State 33 string -ATTRIBUTE Login-LAT-Service 34 string -ATTRIBUTE Login-LAT-Node 35 string -ATTRIBUTE Login-LAT-Group 36 string -ATTRIBUTE Framed-AppleTalk-Link 37 integer -ATTRIBUTE Framed-AppleTalk-Network 38 integer -ATTRIBUTE Framed-AppleTalk-Zone 39 string -ATTRIBUTE Acct-Status-Type 40 integer -ATTRIBUTE Acct-Delay-Time 41 integer -ATTRIBUTE Acct-Input-Octets 42 integer -ATTRIBUTE Acct-Output-Octets 43 integer -ATTRIBUTE Acct-Session-Id 44 string -ATTRIBUTE Acct-Authentic 45 integer -ATTRIBUTE Acct-Session-Time 46 integer -ATTRIBUTE Acct-Input-Packets 47 integer -ATTRIBUTE Acct-Output-Packets 48 integer -ATTRIBUTE Acct-Terminate-Cause 49 integer -ATTRIBUTE Acct-Multi-Session-Id 50 string -ATTRIBUTE Acct-Link-Count 51 integer -ATTRIBUTE Event-Timestamp 55 integer -ATTRIBUTE CHAP-Challenge 60 string -ATTRIBUTE NAS-Port-Type 61 integer -ATTRIBUTE Port-Limit 62 integer -ATTRIBUTE Login-LAT-Port 63 integer -ATTRIBUTE Connect-Info 77 string - -# -# RFC3162 IPv6 attributes -# -ATTRIBUTE NAS-IPv6-Address 95 string -ATTRIBUTE Framed-Interface-Id 96 string -ATTRIBUTE Framed-IPv6-Prefix 97 string -ATTRIBUTE Login-IPv6-Host 98 string -ATTRIBUTE Framed-IPv6-Route 99 string -ATTRIBUTE Framed-IPv6-Pool 100 string - -# -# Experimental Non Protocol Attributes used by Cistron-Radiusd -# -ATTRIBUTE Huntgroup-Name 221 string -ATTRIBUTE User-Category 1029 string -ATTRIBUTE Group-Name 1030 string -ATTRIBUTE Simultaneous-Use 1034 integer -ATTRIBUTE Strip-User-Name 1035 integer -ATTRIBUTE Fall-Through 1036 integer -ATTRIBUTE Add-Port-To-IP-Address 1037 integer -ATTRIBUTE Exec-Program 1038 string -ATTRIBUTE Exec-Program-Wait 1039 string -ATTRIBUTE Hint 1040 string - -# -# Non-Protocol Attributes -# These attributes are used internally by the server -# -ATTRIBUTE Expiration 21 date -ATTRIBUTE Auth-Type 1000 integer -ATTRIBUTE Menu 1001 string -ATTRIBUTE Termination-Menu 1002 string -ATTRIBUTE Prefix 1003 string -ATTRIBUTE Suffix 1004 string -ATTRIBUTE Group 1005 string -ATTRIBUTE Crypt-Password 1006 string -ATTRIBUTE Connect-Rate 1007 integer - -# -# Integer Translations -# - -# User Types - -VALUE Service-Type Login-User 1 -VALUE Service-Type Framed-User 2 -VALUE Service-Type Callback-Login-User 3 -VALUE Service-Type Callback-Framed-User 4 -VALUE Service-Type Outbound-User 5 -VALUE Service-Type Administrative-User 6 -VALUE Service-Type NAS-Prompt-User 7 - -# Framed Protocols - -VALUE Framed-Protocol PPP 1 -VALUE Framed-Protocol SLIP 2 - -# Framed Routing Values - -VALUE Framed-Routing None 0 -VALUE Framed-Routing Broadcast 1 -VALUE Framed-Routing Listen 2 -VALUE Framed-Routing Broadcast-Listen 3 - -# Framed Compression Types - -VALUE Framed-Compression None 0 -VALUE Framed-Compression Van-Jacobson-TCP-IP 1 - -# Login Services - -VALUE Login-Service Telnet 0 -VALUE Login-Service Rlogin 1 -VALUE Login-Service TCP-Clear 2 -VALUE Login-Service PortMaster 3 - -# Status Types - -VALUE Acct-Status-Type Start 1 -VALUE Acct-Status-Type Stop 2 -VALUE Acct-Status-Type Alive 3 -VALUE Acct-Status-Type Accounting-On 7 -VALUE Acct-Status-Type Accounting-Off 8 - -# Authentication Types - -VALUE Acct-Authentic RADIUS 1 -VALUE Acct-Authentic Local 2 -VALUE Acct-Authentic PowerLink128 100 - -# Termination Options - -VALUE Termination-Action Default 0 -VALUE Termination-Action RADIUS-Request 1 - -# NAS Port Types, available in 3.3.1 and later - -VALUE NAS-Port-Type Async 0 -VALUE NAS-Port-Type Sync 1 -VALUE NAS-Port-Type ISDN 2 -VALUE NAS-Port-Type ISDN-V120 3 -VALUE NAS-Port-Type ISDN-V110 4 - -# Acct Terminate Causes, available in 3.3.2 and later - -VALUE Acct-Terminate-Cause User-Request 1 -VALUE Acct-Terminate-Cause Lost-Carrier 2 -VALUE Acct-Terminate-Cause Lost-Service 3 -VALUE Acct-Terminate-Cause Idle-Timeout 4 -VALUE Acct-Terminate-Cause Session-Timeout 5 -VALUE Acct-Terminate-Cause Admin-Reset 6 -VALUE Acct-Terminate-Cause Admin-Reboot 7 -VALUE Acct-Terminate-Cause Port-Error 8 -VALUE Acct-Terminate-Cause NAS-Error 9 -VALUE Acct-Terminate-Cause NAS-Request 10 -VALUE Acct-Terminate-Cause NAS-Reboot 11 -VALUE Acct-Terminate-Cause Port-Unneeded 12 -VALUE Acct-Terminate-Cause Port-Preempted 13 -VALUE Acct-Terminate-Cause Port-Suspended 14 -VALUE Acct-Terminate-Cause Service-Unavailable 15 -VALUE Acct-Terminate-Cause Callback 16 -VALUE Acct-Terminate-Cause User-Error 17 -VALUE Acct-Terminate-Cause Host-Request 18 - -# -# Non-Protocol Integer Translations -# - -VALUE Auth-Type Local 0 -VALUE Auth-Type System 1 -VALUE Auth-Type SecurID 2 -VALUE Auth-Type Crypt-Local 3 -VALUE Auth-Type Reject 4 - -# -# Cistron extensions -# -VALUE Auth-Type Pam 253 -VALUE Auth-Type Accept 254 - -# -# Experimental Non-Protocol Integer Translations for Cistron-Radiusd -# -VALUE Fall-Through No 0 -VALUE Fall-Through Yes 1 -VALUE Add-Port-To-IP-Address No 0 -VALUE Add-Port-To-IP-Address Yes 1 - -# -# Configuration Values -# uncomment these two lines to turn account expiration on -# - -#VALUE Server-Config Password-Expiration 30 -#VALUE Server-Config Password-Warning 5 - diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/etc/dictionary.ascend b/openair3/PMIPv6/freeradius-client-1.1.6/etc/dictionary.ascend deleted file mode 100644 index a02c207d56..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/etc/dictionary.ascend +++ /dev/null @@ -1,297 +0,0 @@ -# -# Ascend dictionary. -# -# Enable by putting the line "$INCLUDE dictionary.ascend" into -# the main dictionary file. -# -# Version: 1.00 21-Jul-1997 Jens Glaser -# - - -# -# Ascend specific extensions -# Used by ASCEND MAX/Pipeline products -# -ATTRIBUTE Ascend-FCP-Parameter 119 string -ATTRIBUTE Ascend-Modem-PortNo 120 integer -ATTRIBUTE Ascend-Modem-SlotNo 121 integer -ATTRIBUTE Ascend-Modem-ShelfNo 122 integer -ATTRIBUTE Ascend-Call-Attempt-Limit 123 integer -ATTRIBUTE Ascend-Call-Block-Duration 124 integer -ATTRIBUTE Ascend-Maximum-Call-Duration 125 integer -ATTRIBUTE Ascend-Temporary-Rtes 126 integer -ATTRIBUTE Tunneling-Protocol 127 integer -ATTRIBUTE Ascend-Shared-Profile-Enable 128 integer -ATTRIBUTE Ascend-Primary-Home-Agent 129 string -ATTRIBUTE Ascend-Secondary-Home-Agent 130 string -ATTRIBUTE Ascend-Dialout-Allowed 131 integer -ATTRIBUTE Ascend-Client-Gateway 132 ipaddr -ATTRIBUTE Ascend-BACP-Enable 133 integer -ATTRIBUTE Ascend-DHCP-Maximum-Leases 134 integer -ATTRIBUTE Ascend-Client-Primary-DNS 135 ipaddr -ATTRIBUTE Ascend-Client-Secondary-DNS 136 ipaddr -ATTRIBUTE Ascend-Client-Assign-DNS 137 integer -ATTRIBUTE Ascend-User-Acct-Type 138 integer -ATTRIBUTE Ascend-User-Acct-Host 139 ipaddr -ATTRIBUTE Ascend-User-Acct-Port 140 integer -ATTRIBUTE Ascend-User-Acct-Key 141 string -ATTRIBUTE Ascend-User-Acct-Base 142 integer -ATTRIBUTE Ascend-User-Acct-Time 143 integer -ATTRIBUTE Ascend-Assign-IP-Client 144 ipaddr -ATTRIBUTE Ascend-Assign-IP-Server 145 ipaddr -ATTRIBUTE Ascend-Assign-IP-Global-Pool 146 string -ATTRIBUTE Ascend-DHCP-Reply 147 integer -ATTRIBUTE Ascend-DHCP-Pool-Number 148 integer -ATTRIBUTE Ascend-Expect-Callback 149 integer -ATTRIBUTE Ascend-Event-Type 150 integer -ATTRIBUTE Ascend-Session-Svr-Key 151 string -ATTRIBUTE Ascend-Multicast-Rate-Limit 152 integer -ATTRIBUTE Ascend-IF-Netmask 153 ipaddr -ATTRIBUTE Ascend-Remote-Addr 154 ipaddr -ATTRIBUTE Ascend-Multicast-Client 155 integer -ATTRIBUTE Ascend-FR-Circuit-Name 156 string -ATTRIBUTE Ascend-FR-LinkUp 157 integer -ATTRIBUTE Ascend-FR-Nailed-Grp 158 integer -ATTRIBUTE Ascend-FR-Type 159 integer -ATTRIBUTE Ascend-FR-Link-Mgt 160 integer -ATTRIBUTE Ascend-FR-N391 161 integer -ATTRIBUTE Ascend-FR-DCE-N392 162 integer -ATTRIBUTE Ascend-FR-DTE-N392 163 integer -ATTRIBUTE Ascend-FR-DCE-N393 164 integer -ATTRIBUTE Ascend-FR-DTE-N393 165 integer -ATTRIBUTE Ascend-FR-T391 166 integer -ATTRIBUTE Ascend-FR-T392 167 integer -ATTRIBUTE Ascend-Bridge-Address 168 string -ATTRIBUTE Ascend-TS-Idle-Limit 169 integer -ATTRIBUTE Ascend-TS-Idle-Mode 170 integer -ATTRIBUTE Ascend-DBA-Monitor 171 integer -ATTRIBUTE Ascend-Base-Channel-Count 172 integer -ATTRIBUTE Ascend-Minimum-Channels 173 integer -ATTRIBUTE Ascend-IPX-Route 174 string -ATTRIBUTE Ascend-FT1-Caller 175 integer -ATTRIBUTE Ascend-Backup 176 string -ATTRIBUTE Ascend-Call-Type 177 integer -ATTRIBUTE Ascend-Group 178 string -ATTRIBUTE Ascend-FR-DLCI 179 integer -ATTRIBUTE Ascend-FR-Profile-Name 180 string -ATTRIBUTE Ascend-Ara-PW 181 string -ATTRIBUTE Ascend-IPX-Node-Addr 182 string -ATTRIBUTE Ascend-Home-Agent-IP-Addr 183 ipaddr -ATTRIBUTE Ascend-Home-Agent-Password 184 string -ATTRIBUTE Ascend-Home-Network-Name 185 string -ATTRIBUTE Ascend-Home-Agent-UDP-Port 186 integer -ATTRIBUTE Ascend-Multilink-ID 187 integer -ATTRIBUTE Ascend-Num-In-Multilink 188 integer -ATTRIBUTE Ascend-First-Dest 189 ipaddr -ATTRIBUTE Ascend-Pre-Input-Octets 190 integer -ATTRIBUTE Ascend-Pre-Output-Octets 191 integer -ATTRIBUTE Ascend-Pre-Input-Packets 192 integer -ATTRIBUTE Ascend-Pre-Output-Packets 193 integer -ATTRIBUTE Ascend-Maximum-Time 194 integer -ATTRIBUTE Ascend-Disconnect-Cause 195 integer -ATTRIBUTE Ascend-Connect-Progress 196 integer -ATTRIBUTE Ascend-Data-Rate 197 integer -ATTRIBUTE Ascend-PreSession-Time 198 integer -ATTRIBUTE Ascend-Token-Idle 199 integer -ATTRIBUTE Ascend-Token-Immediate 200 integer -ATTRIBUTE Ascend-Require-Auth 201 integer -ATTRIBUTE Ascend-Number-Sessions 202 string -ATTRIBUTE Ascend-Authen-Alias 203 string -ATTRIBUTE Ascend-Token-Expiry 204 integer -ATTRIBUTE Ascend-Menu-Selector 205 string -ATTRIBUTE Ascend-Menu-Item 206 string -ATTRIBUTE Ascend-PW-Warntime 207 integer -ATTRIBUTE Ascend-PW-Lifetime 208 integer -ATTRIBUTE Ascend-IP-Direct 209 ipaddr -ATTRIBUTE Ascend-PPP-VJ-Slot-Comp 210 integer -ATTRIBUTE Ascend-PPP-VJ-1172 211 integer -ATTRIBUTE Ascend-PPP-Async-Map 212 integer -ATTRIBUTE Ascend-Third-Prompt 213 string -ATTRIBUTE Ascend-Send-Secret 214 string -ATTRIBUTE Ascend-Receive-Secret 215 string -ATTRIBUTE Ascend-IPX-Peer-Mode 216 integer -ATTRIBUTE Ascend-IP-Pool-Definition 217 string -ATTRIBUTE Ascend-Assign-IP-Pool 218 integer -ATTRIBUTE Ascend-FR-Direct 219 integer -ATTRIBUTE Ascend-FR-Direct-Profile 220 string -ATTRIBUTE Ascend-FR-Direct-DLCI 221 integer -ATTRIBUTE Ascend-Handle-IPX 222 integer -ATTRIBUTE Ascend-Netware-timeout 223 integer -ATTRIBUTE Ascend-IPX-Alias 224 integer -ATTRIBUTE Ascend-Metric 225 integer -ATTRIBUTE Ascend-PRI-Number-Type 226 integer -ATTRIBUTE Ascend-Dial-Number 227 string -ATTRIBUTE Ascend-Route-IP 228 integer -ATTRIBUTE Ascend-Route-IPX 229 integer -ATTRIBUTE Ascend-Bridge 230 integer -ATTRIBUTE Ascend-Send-Auth 231 integer -ATTRIBUTE Ascend-Send-Passwd 232 string -ATTRIBUTE Ascend-Link-Compression 233 integer -ATTRIBUTE Ascend-Target-Util 234 integer -ATTRIBUTE Ascend-Maximum-Channels 235 integer -ATTRIBUTE Ascend-Inc-Channel-Count 236 integer -ATTRIBUTE Ascend-Dec-Channel-Count 237 integer -ATTRIBUTE Ascend-Seconds-Of-History 238 integer -ATTRIBUTE Ascend-History-Weigh-Type 239 integer -ATTRIBUTE Ascend-Add-Seconds 240 integer -ATTRIBUTE Ascend-Remove-Seconds 241 integer -ATTRIBUTE Ascend-Idle-Limit 244 integer -ATTRIBUTE Ascend-Preempt-Limit 245 integer -ATTRIBUTE Ascend-Callback 246 integer -ATTRIBUTE Ascend-Data-Svc 247 integer -ATTRIBUTE Ascend-Force-56 248 integer -ATTRIBUTE Ascend-Billing-Number 249 string -ATTRIBUTE Ascend-Call-By-Call 250 integer -ATTRIBUTE Ascend-Transit-Number 251 string -ATTRIBUTE Ascend-Host-Info 252 string -ATTRIBUTE Ascend-PPP-Address 253 ipaddr -ATTRIBUTE Ascend-MPP-Idle-Percent 254 integer -ATTRIBUTE Ascend-Xmit-Rate 255 integer - - - -# Ascend protocols -VALUE Service-Type Dialout-Framed-User 5 -VALUE Framed-Protocol ARA 255 -VALUE Framed-Protocol MPP 256 -VALUE Framed-Protocol EURAW 257 -VALUE Framed-Protocol EUUI 258 -VALUE Framed-Protocol X25 259 -VALUE Framed-Protocol COMB 260 -VALUE Framed-Protocol FR 261 -VALUE Framed-Protocol MP 262 -VALUE Framed-Protocol FR-CIR 263 - - -# -# Ascend specific extensions -# Used by ASCEND MAX/Pipeline products (see above) -# - -VALUE Ascend-FR-Direct FR-Direct-No 0 -VALUE Ascend-FR-Direct FR-Direct-Yes 1 -VALUE Ascend-Handle-IPX Handle-IPX-None 0 -VALUE Ascend-Handle-IPX Handle-IPX-Client 1 -VALUE Ascend-Handle-IPX Handle-IPX-Server 2 -VALUE Ascend-IPX-Peer-Mode IPX-Peer-Router 0 -VALUE Ascend-IPX-Peer-Mode IPX-Peer-Dialin 1 -VALUE Ascend-Call-Type Nailed 1 -VALUE Ascend-Call-Type Nailed/Mpp 2 -VALUE Ascend-Call-Type Perm/Switched 3 -VALUE Ascend-FT1-Caller FT1-No 0 -VALUE Ascend-FT1-Caller FT1-Yes 1 -VALUE Ascend-PRI-Number-Type Unknown-Number 0 -VALUE Ascend-PRI-Number-Type Intl-Number 1 -VALUE Ascend-PRI-Number-Type National-Number 2 -VALUE Ascend-PRI-Number-Type Local-Number 4 -VALUE Ascend-PRI-Number-Type Abbrev-Number 5 -VALUE Ascend-Route-IPX Route-IPX-No 0 -VALUE Ascend-Route-IPX Route-IPX-Yes 1 -VALUE Ascend-Bridge Bridge-No 0 -VALUE Ascend-Bridge Bridge-Yes 1 -VALUE Ascend-TS-Idle-Mode TS-Idle-None 0 -VALUE Ascend-TS-Idle-Mode TS-Idle-Input 1 -VALUE Ascend-TS-Idle-Mode TS-Idle-Input-Output 2 -VALUE Ascend-Send-Auth Send-Auth-None 0 -VALUE Ascend-Send-Auth Send-Auth-PAP 1 -VALUE Ascend-Send-Auth Send-Auth-CHAP 2 -VALUE Ascend-Send-Auth Send-Auth-MS-CHAP 3 -VALUE Ascend-Link-Compression Link-Comp-None 0 -VALUE Ascend-Link-Compression Link-Comp-Stac 1 -VALUE Ascend-Link-Compression Link-Comp-Stac-Draft-9 2 -VALUE Ascend-Link-Compression Link-Comp-MS-Stac 3 -VALUE Ascend-History-Weigh-Type History-Constant 0 -VALUE Ascend-History-Weigh-Type History-Linear 1 -VALUE Ascend-History-Weigh-Type History-Quadratic 2 -VALUE Ascend-Callback Callback-No 0 -VALUE Ascend-Callback Callback-Yes 1 -VALUE Ascend-Expect-Callback Expect-Callback-No 0 -VALUE Ascend-Expect-Callback Expect-Callback-Yes 1 -VALUE Ascend-Data-Svc Switched-Voice-Bearer 0 -VALUE Ascend-Data-Svc Switched-56KR 1 -VALUE Ascend-Data-Svc Switched-64K 2 -VALUE Ascend-Data-Svc Switched-64KR 3 -VALUE Ascend-Data-Svc Switched-56K 4 -VALUE Ascend-Data-Svc Switched-384KR 5 -VALUE Ascend-Data-Svc Switched-384K 6 -VALUE Ascend-Data-Svc Switched-1536K 7 -VALUE Ascend-Data-Svc Switched-1536KR 8 -VALUE Ascend-Data-Svc Switched-128K 9 -VALUE Ascend-Data-Svc Switched-192K 10 -VALUE Ascend-Data-Svc Switched-256K 11 -VALUE Ascend-Data-Svc Switched-320K 12 -VALUE Ascend-Data-Svc Switched-384K-MR 13 -VALUE Ascend-Data-Svc Switched-448K 14 -VALUE Ascend-Data-Svc Switched-512K 15 -VALUE Ascend-Data-Svc Switched-576K 16 -VALUE Ascend-Data-Svc Switched-640K 17 -VALUE Ascend-Data-Svc Switched-704K 18 -VALUE Ascend-Data-Svc Switched-768K 19 -VALUE Ascend-Data-Svc Switched-832K 20 -VALUE Ascend-Data-Svc Switched-896K 21 -VALUE Ascend-Data-Svc Switched-960K 22 -VALUE Ascend-Data-Svc Switched-1024K 23 -VALUE Ascend-Data-Svc Switched-1088K 24 -VALUE Ascend-Data-Svc Switched-1152K 25 -VALUE Ascend-Data-Svc Switched-1216K 26 -VALUE Ascend-Data-Svc Switched-1280K 27 -VALUE Ascend-Data-Svc Switched-1344K 28 -VALUE Ascend-Data-Svc Switched-1408K 29 -VALUE Ascend-Data-Svc Switched-1472K 30 -VALUE Ascend-Data-Svc Switched-1600K 31 -VALUE Ascend-Data-Svc Switched-1664K 32 -VALUE Ascend-Data-Svc Switched-1728K 33 -VALUE Ascend-Data-Svc Switched-1792K 34 -VALUE Ascend-Data-Svc Switched-1856K 35 -VALUE Ascend-Data-Svc Switched-1920K 36 -VALUE Ascend-Data-Svc Switched-inherited 37 -VALUE Ascend-Data-Svc Switched-restricted-bearer-x30 38 -VALUE Ascend-Data-Svc Switched-clear-bearer-v110 39 -VALUE Ascend-Data-Svc Switched-restricted-64-x30 40 -VALUE Ascend-Data-Svc Switched-clear-56-v110 41 -VALUE Ascend-Data-Svc Switched-modem 42 -VALUE Ascend-Data-Svc Switched-atmodem 43 -VALUE Ascend-Data-Svc Nailed-56KR 1 -VALUE Ascend-Data-Svc Nailed-64K 2 -VALUE Ascend-Force-56 Force-56-No 0 -VALUE Ascend-Force-56 Force-56-Yes 1 -VALUE Ascend-PW-Lifetime Lifetime-In-Days 0 -VALUE Ascend-PW-Warntime Days-Of-Warning 0 -VALUE Ascend-PPP-VJ-1172 PPP-VJ-1172 1 -VALUE Ascend-PPP-VJ-Slot-Comp VJ-Slot-Comp-No 1 -VALUE Ascend-Require-Auth Not-Require-Auth 0 -VALUE Ascend-Require-Auth Require-Auth 1 -VALUE Ascend-Token-Immediate Tok-Imm-No 0 -VALUE Ascend-Token-Immediate Tok-Imm-Yes 1 -VALUE Ascend-DBA-Monitor DBA-Transmit 0 -VALUE Ascend-DBA-Monitor DBA-Transmit-Recv 1 -VALUE Ascend-DBA-Monitor DBA-None 2 -VALUE Ascend-FR-Type Ascend-FR-DTE 0 -VALUE Ascend-FR-Type Ascend-FR-DCE 1 -VALUE Ascend-FR-Type Ascend-FR-NNI 2 -VALUE Ascend-FR-Link-Mgt Ascend-FR-No-Link-Mgt 0 -VALUE Ascend-FR-Link-Mgt Ascend-FR-T1-617D 1 -VALUE Ascend-FR-Link-Mgt Ascend-FR-Q-933A 2 -VALUE Ascend-FR-LinkUp Ascend-LinkUp-Default 0 -VALUE Ascend-FR-LinkUp Ascend-LinkUp-AlwaysUp 1 -VALUE Ascend-Multicast-Client Multicast-No 0 -VALUE Ascend-Multicast-Client Multicast-Yes 1 -VALUE Ascend-User-Acct-Type Ascend-User-Acct-None 0 -VALUE Ascend-User-Acct-Type Ascend-User-Acct-User 1 -VALUE Ascend-User-Acct-Type Ascend-User-Acct-User-Default 2 -VALUE Ascend-User-Acct-Base Base-10 0 -VALUE Ascend-User-Acct-Base Base-16 1 -VALUE Ascend-DHCP-Reply DHCP-Reply-No 0 -VALUE Ascend-DHCP-Reply DHCP-Reply-Yes 1 -VALUE Ascend-Client-Assign-DNS DNS-Assign-No 0 -VALUE Ascend-Client-Assign-DNS DNS-Assign-Yes 1 -VALUE Ascend-Event-Type Ascend-ColdStart 1 -VALUE Ascend-Event-Type Ascend-Session-Event 2 -VALUE Ascend-BACP-Enable BACP-No 0 -VALUE Ascend-BACP-Enable BACP-Yes 1 -VALUE Ascend-Dialout-Allowed Dialout-Not-Allowed 0 -VALUE Ascend-Dialout-Allowed Dialout-Allowed 1 -VALUE Ascend-Shared-Profile-Enable Shared-Profile-No 0 -VALUE Ascend-Shared-Profile-Enable Shared-Profile-Yes 1 -VALUE Ascend-Temporary-Rtes Temp-Rtes-No 0 -VALUE Ascend-Temporary-Rtes Temp-Rtes-Yes 1 diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/etc/dictionary.compat b/openair3/PMIPv6/freeradius-client-1.1.6/etc/dictionary.compat deleted file mode 100644 index 4c85ea87db..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/etc/dictionary.compat +++ /dev/null @@ -1,47 +0,0 @@ -# -# Obsolete names for backwards compatibility with older users files. -# Move the $INCLUDE in the main dictionary file to the end if you want -# these names to be used in the "details" logfile. -# -ATTRIBUTE Client-Id 4 ipaddr -ATTRIBUTE Client-Port-Id 5 integer -ATTRIBUTE User-Service-Type 6 integer -ATTRIBUTE Framed-Address 8 ipaddr -ATTRIBUTE Framed-Netmask 9 ipaddr -ATTRIBUTE Framed-Filter-Id 11 string -ATTRIBUTE Login-Host 14 ipaddr -ATTRIBUTE Login-Port 16 integer -ATTRIBUTE Old-Password 17 string -ATTRIBUTE Port-Message 18 string -ATTRIBUTE Dialback-No 19 string -ATTRIBUTE Dialback-Name 20 string -ATTRIBUTE Challenge-State 24 string -VALUE Framed-Compression Van-Jacobsen-TCP-IP 1 -VALUE Framed-Compression VJ-TCP-IP 1 -VALUE Service-Type Shell-User 6 -VALUE Auth-Type Unix 1 -VALUE Service-Type Dialback-Login-User 3 -VALUE Service-Type Dialback-Framed-User 4 - -# -# For compatibility with MERIT users files. -# -ATTRIBUTE NAS-Port 5 integer -ATTRIBUTE Login-Host 14 ipaddr -ATTRIBUTE Login-Callback-Number 19 string -ATTRIBUTE Framed-Callback-Id 20 string -ATTRIBUTE Client-Port-DNIS 30 string -ATTRIBUTE Caller-ID 31 string -VALUE Service-Type Login 1 -VALUE Service-Type Framed 2 -VALUE Service-Type Callback-Login 3 -VALUE Service-Type Callback-Framed 4 -VALUE Service-Type Exec-User 7 - -# -# For compatibility with ESVA RADIUS, Old Cistron RADIUS -# -ATTRIBUTE Session 1034 integer -ATTRIBUTE User-Name-Is-Star 1035 integer -VALUE User-Name-Is-Star No 0 -VALUE User-Name-Is-Star Yes 1 diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/etc/dictionary.merit b/openair3/PMIPv6/freeradius-client-1.1.6/etc/dictionary.merit deleted file mode 100644 index 7d675e50a8..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/etc/dictionary.merit +++ /dev/null @@ -1,17 +0,0 @@ -# -# Experimental extensions, configuration only (for check-items) -# Names/numbers as per the MERIT extensions (if possible). -# -ATTRIBUTE NAS-Identifier 32 string -ATTRIBUTE Proxy-State 33 string -ATTRIBUTE Login-LAT-Service 34 string -ATTRIBUTE Login-LAT-Node 35 string -ATTRIBUTE Login-LAT-Group 36 string -ATTRIBUTE Framed-AppleTalk-Link 37 integer -ATTRIBUTE Framed-AppleTalk-Network 38 integer -ATTRIBUTE Framed-AppleTalk-Zone 39 string -ATTRIBUTE Acct-Input-Packets 47 integer -ATTRIBUTE Acct-Output-Packets 48 integer -# 8 is a MERIT extension. -VALUE Service-Type Authenticate-Only 8 - diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/etc/dictionary.sip b/openair3/PMIPv6/freeradius-client-1.1.6/etc/dictionary.sip deleted file mode 100644 index 149fa4cb5e..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/etc/dictionary.sip +++ /dev/null @@ -1,77 +0,0 @@ -# -# Updated 97/06/13 to livingston-radius-2.01 miquels@cistron.nl -# -# This file contains dictionary translations for parsing -# requests and generating responses. All transactions are -# composed of Attribute/Value Pairs. The value of each attribute -# is specified as one of 4 data types. Valid data types are: -# -# string - 0-253 octets -# ipaddr - 4 octets in network byte order -# integer - 32 bit value in big endian order (high byte first) -# date - 32 bit value in big endian order - seconds since -# 00:00:00 GMT, Jan. 1, 1970 -# -# Enumerated values are stored in the user file with dictionary -# VALUE translations for easy administration. -# -# Example: -# -# ATTRIBUTE VALUE -# --------------- ----- -# Framed-Protocol = PPP -# 7 = 1 (integer encoding) -# - -# -# Experimental SIP Attributes/Values (draft-sterman-aaa-sip-00.txt etc) -# -ATTRIBUTE Sip-Method 101 integer -ATTRIBUTE Sip-Response-Code 102 integer -ATTRIBUTE Sip-CSeq 103 string -ATTRIBUTE Sip-To-Tag 104 string -ATTRIBUTE Sip-From-Tag 105 string -ATTRIBUTE Sip-Branch-ID 106 string -ATTRIBUTE Sip-Translated-Request-URI 107 string -ATTRIBUTE Sip-Source-IP-Address 108 ipaddr -ATTRIBUTE Sip-Source-Port 109 integer -ATTRIBUTE Sip-User-ID 110 string -ATTRIBUTE Sip-User-Realm 111 string -ATTRIBUTE Sip-User-Nonce 112 string -ATTRIBUTE Sip-User-Method 113 string -ATTRIBUTE Sip-User-Digest-URI 114 string -ATTRIBUTE Sip-User-Nonce-Count 115 string -ATTRIBUTE Sip-User-QOP 116 string -ATTRIBUTE Sip-User-Opaque 117 string -ATTRIBUTE Sip-User-Response 118 string -ATTRIBUTE Sip-User-CNonce 119 string -ATTRIBUTE Sip-URI-User 208 string -ATTRIBUTE Sip-Req-URI 210 string -ATTRIBUTE Sip-CC 212 string -ATTRIBUTE Sip-RPId 213 string -ATTRIBUTE Digest-Response 206 string -ATTRIBUTE Digest-Attributes 207 string -ATTRIBUTE Digest-Realm 1063 string -ATTRIBUTE Digest-Nonce 1064 string -ATTRIBUTE Digest-Method 1065 string -ATTRIBUTE Digest-URI 1066 string -ATTRIBUTE Digest-QOP 1067 string -ATTRIBUTE Digest-Algorithm 1068 string -ATTRIBUTE Digest-Body-Digest 1069 string -ATTRIBUTE Digest-CNonce 1070 string -ATTRIBUTE Digest-Nonce-Count 1071 string -ATTRIBUTE Digest-User-Name 1072 string - -VALUE Service-Type SIP 15 - -VALUE Sip-Method Other 0 -VALUE Sip-Method Invite 1 -VALUE Sip-Method Cancel 2 -VALUE Sip-Method Ack 3 -VALUE Sip-Method Bye 4 - -VALUE Sip-Response-Code Other 0 -VALUE Sip-Response-Code Invite 1 -VALUE Sip-Response-Code Cancel 2 -VALUE Sip-Response-Code Ack 3 -VALUE Sip-Response-Code Bye 4 diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/etc/issue b/openair3/PMIPv6/freeradius-client-1.1.6/etc/issue deleted file mode 100644 index 62544873df..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/etc/issue +++ /dev/null @@ -1,5 +0,0 @@ -(\I) ------------------------------------------------------ -\S \R (\N) (port \L) ------------------------------------------------------ - diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/etc/port-id-map b/openair3/PMIPv6/freeradius-client-1.1.6/etc/port-id-map deleted file mode 100644 index 9088a0b928..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/etc/port-id-map +++ /dev/null @@ -1,24 +0,0 @@ -# -# port-id-map -# -# This file describes the ttyname to port id mapping. The port id -# is reported as part of a RADIUS authentication or accouting request. -# -#ttyname (as returned by ttyname(3)) port-id -/dev/tty1 1 -/dev/tty2 2 -/dev/tty3 3 -/dev/tty4 4 -/dev/tty5 5 -/dev/tty6 6 -/dev/tty7 7 -/dev/tty8 8 -/dev/ttyS0 9 -/dev/ttyS1 10 -/dev/ttyS2 11 -/dev/ttyS3 12 -/dev/ttyS4 13 -/dev/ttyS5 14 -/dev/ttyS6 15 -/dev/ttyS7 16 - \ No newline at end of file diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/etc/radiusclient.conf b/openair3/PMIPv6/freeradius-client-1.1.6/etc/radiusclient.conf deleted file mode 100644 index 3a315b46ff..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/etc/radiusclient.conf +++ /dev/null @@ -1,92 +0,0 @@ -# General settings - -# specify which authentication comes first respectively which -# authentication is used. possible values are: "radius" and "local". -# if you specify "radius,local" then the RADIUS server is asked -# first then the local one. if only one keyword is specified only -# this server is asked. -auth_order radius,local - -# maximum login tries a user has -login_tries 4 - -# timeout for all login tries -# if this time is exceeded the user is kicked out -login_timeout 60 - -# name of the nologin file which when it exists disables logins. -# it may be extended by the ttyname which will result in -# a terminal specific lock (e.g. /etc/nologin.ttyS2 will disable -# logins on /dev/ttyS2) -nologin /etc/nologin - -# name of the issue file. it's only display when no username is passed -# on the radlogin command line -issue /usr/local/etc/radiusclient/issue - -# RADIUS settings - -# RADIUS server to use for authentication requests. this config -# item can appear more then one time. if multiple servers are -# defined they are tried in a round robin fashion if one -# server is not answering. -# optionally you can specify a the port number on which is remote -# RADIUS listens separated by a colon from the hostname. if -# no port is specified /etc/services is consulted of the radius -# service. if this fails also a compiled in default is used. -authserver localhost - -# RADIUS server to use for accouting requests. All that I -# said for authserver applies, too. -# -acctserver localhost - -# file holding shared secrets used for the communication -# between the RADIUS client and server -servers /usr/local/etc/radiusclient/servers - -# dictionary of allowed attributes and values -# just like in the normal RADIUS distributions -dictionary /usr/local/etc/radiusclient/dictionary - -# program to call for a RADIUS authenticated login -login_radius /usr/local/sbin/login.radius - -# file which holds sequence number for communication with the -# RADIUS server -seqfile /var/run/radius.seq - -# file which specifies mapping between ttyname and NAS-Port attribute -mapfile /usr/local/etc/radiusclient/port-id-map - -# default authentication realm to append to all usernames if no -# realm was explicitly specified by the user -# the radiusd directly form Livingston doesnt use any realms, so leave -# it blank then -default_realm - -# time to wait for a reply from the RADIUS server -radius_timeout 10 - -# resend request this many times before trying the next server -radius_retries 3 - -# The length of time in seconds that we skip a nonresponsive RADIUS -# server for transaction requests. Server(s) being in the "dead" state -# are tried only after all other non-dead servers have been tried and -# failed or timeouted. The deadtime interval starts when the server -# does not respond to an authentication/accounting request transmissions. -# When the interval expires, the "dead" server would be re-tried again, -# and if it's still down then it will be considered "dead" for another -# such interval and so on. This option is no-op if there is only one -# server in the list. Set to 0 in order to disable the feature. -radius_deadtime 0 - -# local address from which radius packets have to be sent -bindaddr * - -# LOCAL settings - -# program to execute for local login -# it must support the -f flag for preauthenticated login -login_local /bin/login diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/etc/radiusclient.conf.in b/openair3/PMIPv6/freeradius-client-1.1.6/etc/radiusclient.conf.in deleted file mode 100644 index fdf62e6de6..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/etc/radiusclient.conf.in +++ /dev/null @@ -1,92 +0,0 @@ -# General settings - -# specify which authentication comes first respectively which -# authentication is used. possible values are: "radius" and "local". -# if you specify "radius,local" then the RADIUS server is asked -# first then the local one. if only one keyword is specified only -# this server is asked. -auth_order radius,local - -# maximum login tries a user has -login_tries 4 - -# timeout for all login tries -# if this time is exceeded the user is kicked out -login_timeout 60 - -# name of the nologin file which when it exists disables logins. -# it may be extended by the ttyname which will result in -# a terminal specific lock (e.g. /etc/nologin.ttyS2 will disable -# logins on /dev/ttyS2) -nologin /etc/nologin - -# name of the issue file. it's only display when no username is passed -# on the radlogin command line -issue @pkgsysconfdir@/issue - -# RADIUS settings - -# RADIUS server to use for authentication requests. this config -# item can appear more then one time. if multiple servers are -# defined they are tried in a round robin fashion if one -# server is not answering. -# optionally you can specify a the port number on which is remote -# RADIUS listens separated by a colon from the hostname. if -# no port is specified /etc/services is consulted of the radius -# service. if this fails also a compiled in default is used. -authserver localhost - -# RADIUS server to use for accouting requests. All that I -# said for authserver applies, too. -# -acctserver localhost - -# file holding shared secrets used for the communication -# between the RADIUS client and server -servers @pkgsysconfdir@/servers - -# dictionary of allowed attributes and values -# just like in the normal RADIUS distributions -dictionary @pkgsysconfdir@/dictionary - -# program to call for a RADIUS authenticated login -login_radius @sbindir@/login.radius - -# file which holds sequence number for communication with the -# RADIUS server -seqfile /var/run/radius.seq - -# file which specifies mapping between ttyname and NAS-Port attribute -mapfile @pkgsysconfdir@/port-id-map - -# default authentication realm to append to all usernames if no -# realm was explicitly specified by the user -# the radiusd directly form Livingston doesnt use any realms, so leave -# it blank then -default_realm - -# time to wait for a reply from the RADIUS server -radius_timeout 10 - -# resend request this many times before trying the next server -radius_retries 3 - -# The length of time in seconds that we skip a nonresponsive RADIUS -# server for transaction requests. Server(s) being in the "dead" state -# are tried only after all other non-dead servers have been tried and -# failed or timeouted. The deadtime interval starts when the server -# does not respond to an authentication/accounting request transmissions. -# When the interval expires, the "dead" server would be re-tried again, -# and if it's still down then it will be considered "dead" for another -# such interval and so on. This option is no-op if there is only one -# server in the list. Set to 0 in order to disable the feature. -radius_deadtime 0 - -# local address from which radius packets have to be sent -bindaddr * - -# LOCAL settings - -# program to execute for local login -# it must support the -f flag for preauthenticated login -login_local /bin/login diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/etc/servers b/openair3/PMIPv6/freeradius-client-1.1.6/etc/servers deleted file mode 100644 index 3ef683c606..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/etc/servers +++ /dev/null @@ -1,11 +0,0 @@ -## Server Name or Client/Server pair Key -## ---------------- --------------- -# -#portmaster.elemental.net hardlyasecret -#portmaster2.elemental.net donttellanyone -# -## uncomment the following line for simple testing of radlogin -## with freeradius-server -# -# -radius6server testing123 diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/examples/clients.conf b/openair3/PMIPv6/freeradius-client-1.1.6/examples/clients.conf deleted file mode 100644 index 85e6a88cca..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/examples/clients.conf +++ /dev/null @@ -1,242 +0,0 @@ -# -*- text -*- -## -## clients.conf -- client configuration directives -## -## $Id$ - -####################################################################### -# -# Define RADIUS clients (usually a NAS, Access Point, etc.). - -# -# Defines a RADIUS client. -# -# '127.0.0.1' is another name for 'localhost'. It is enabled by default, -# to allow testing of the server after an initial installation. If you -# are not going to be permitting RADIUS queries from localhost, we suggest -# that you delete, or comment out, this entry. -# -# - -# -# Each client has a "short name" that is used to distinguish it from -# other clients. -# -# In version 1.x, the string after the word "client" was the IP -# address of the client. In 2.0, the IP address is configured via -# the "ipaddr" or "ipv6addr" fields. For compatibility, the 1.x -# format is still accepted. -# -client localhost { - # Allowed values are: - # dotted quad (1.2.3.4) - # hostname (radius.example.com) -# ipaddr = 127.0.0.1 - - # OR, you can use an IPv6 address, but not both - # at the same time. - ipv6addr = :: # any. ::1 == localhost - - # - # A note on DNS: We STRONGLY recommend using IP addresses - # rather than host names. Using host names means that the - # server will do DNS lookups when it starts, making it - # dependent on DNS. i.e. If anything goes wrong with DNS, - # the server won't start! - # - # The server also looks up the IP address from DNS once, and - # only once, when it starts. If the DNS record is later - # updated, the server WILL NOT see that update. - # - - # One client definition can be applied to an entire network. - # e.g. 127/8 should be defined with "ipaddr = 127.0.0.0" and - # "netmask = 8" - # - # If not specified, the default netmask is 32 (i.e. /32) - # - # We do NOT recommend using anything other than 32. There - # are usually other, better ways to achieve the same goal. - # Using netmasks of other than 32 can cause security issues. - # - # You can specify overlapping networks (127/8 and 127.0/16) - # In that case, the smallest possible network will be used - # as the "best match" for the client. - # - # Clients can also be defined dynamically at run time, based - # on any criteria. e.g. SQL lookups, keying off of NAS-Identifier, - # etc. - # See raddb/sites-available/dynamic-clients for details. - # - -# netmask = 32 - - # - # The shared secret use to "encrypt" and "sign" packets between - # the NAS and FreeRADIUS. You MUST change this secret from the - # default, otherwise it's not a secret any more! - # - # The secret can be any string, up to 8k characters in length. - # - # Control codes can be entered vi octal encoding, - # e.g. "\101\102" == "AB" - # Quotation marks can be entered by escaping them, - # e.g. "foo\"bar" - # - # A note on security: The security of the RADIUS protocol - # depends COMPLETELY on this secret! We recommend using a - # shared secret that is composed of: - # - # upper case letters - # lower case letters - # numbers - # - # And is at LEAST 8 characters long, preferably 16 characters in - # length. The secret MUST be random, and should not be words, - # phrase, or anything else that is recognizable. - # - # The default secret below is only for testing, and should - # not be used in any real environment. - # - secret = testing123 - - # - # Old-style clients do not send a Message-Authenticator - # in an Access-Request. RFC 5080 suggests that all clients - # SHOULD include it in an Access-Request. The configuration - # item below allows the server to require it. If a client - # is required to include a Message-Authenticator and it does - # not, then the packet will be silently discarded. - # - # allowed values: yes, no - require_message_authenticator = no - - # - # The short name is used as an alias for the fully qualified - # domain name, or the IP address. - # - # It is accepted for compatibility with 1.x, but it is no - # longer necessary in 2.0 - # -# shortname = localhost - - # - # the following three fields are optional, but may be used by - # checkrad.pl for simultaneous use checks - # - - # - # The nastype tells 'checkrad.pl' which NAS-specific method to - # use to query the NAS for simultaneous use. - # - # Permitted NAS types are: - # - # cisco - # computone - # livingston - # max40xx - # multitech - # netserver - # pathras - # patton - # portslave - # tc - # usrhiper - # other # for all other types - - # - nastype = other # localhost isn't usually a NAS... - - # - # The following two configurations are for future use. - # The 'naspasswd' file is currently used to store the NAS - # login name and password, which is used by checkrad.pl - # when querying the NAS for simultaneous use. - # -# login = !root - password = linux - - # - # As of 2.0, clients can also be tied to a virtual server. - # This is done by setting the "virtual_server" configuration - # item, as in the example below. - # -# virtual_server = home1 - - # - # A pointer to the "home_server_pool" OR a "home_server" - # section that contains the CoA configuration for this - # client. For an example of a coa home server or pool, - # see raddb/sites-available/originate-coa -# coa_server = coa -} - -# IPv6 Client -client 2001:100::3 { - secret = testing123 - shortname = mag2 - nastype = other - password = linux -} -client 2001:100::2 { - secret = testing123 - shortname = mag1 - nastype = other - password = linux -} -# -# All IPv6 Site-local clients -#client fe80::/16 { -# secret = testing123 -# shortname = localhost -#} - -#client some.host.org { -# secret = testing123 -# shortname = localhost -#} - -# -# You can now specify one secret for a network of clients. -# When a client request comes in, the BEST match is chosen. -# i.e. The entry from the smallest possible network. -# -#client 192.168.0.0/24 { -# secret = testing123-1 -# shortname = private-network-1 -#} -# -#client 192.168.0.0/16 { -# secret = testing123-2 -# shortname = private-network-2 -#} - - -#client 10.10.10.10 { -# # secret and password are mapped through the "secrets" file. -# secret = testing123 -# shortname = liv1 -# # the following three fields are optional, but may be used by -# # checkrad.pl for simultaneous usage checks -# nastype = livingston -# login = !root -# password = someadminpas -#} - -####################################################################### -# -# Per-socket client lists. The configuration entries are exactly -# the same as above, but they are nested inside of a section. -# -# You can have as many per-socket client lists as you have "listen" -# sections, or you can re-use a list among multiple "listen" sections. -# -# Un-comment this section, and edit a "listen" section to add: -# "clients = per_socket_clients". That IP address/port combination -# will then accept ONLY the clients listed in this section. -# -#clients per_socket_clients { -# client 192.168.3.4 { -# secret = testing123 -# } -#} diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/examples/radiusd.conf b/openair3/PMIPv6/freeradius-client-1.1.6/examples/radiusd.conf deleted file mode 100644 index 48fa1c5f05..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/examples/radiusd.conf +++ /dev/null @@ -1,801 +0,0 @@ -# -*- text -*- -## -## radiusd.conf -- FreeRADIUS server configuration file. -## -## http://www.freeradius.org/ -## $Id$ -## - -###################################################################### -# -# Read "man radiusd" before editing this file. See the section -# titled DEBUGGING. It outlines a method where you can quickly -# obtain the configuration you want, without running into -# trouble. -# -# Run the server in debugging mode, and READ the output. -# -# $ radiusd -X -# -# We cannot emphasize this point strongly enough. The vast -# majority of problems can be solved by carefully reading the -# debugging output, which includes warnings about common issues, -# and suggestions for how they may be fixed. -# -# There may be a lot of output, but look carefully for words like: -# "warning", "error", "reject", or "failure". The messages there -# will usually be enough to guide you to a solution. -# -# If you are going to ask a question on the mailing list, then -# explain what you are trying to do, and include the output from -# debugging mode (radiusd -X). Failure to do so means that all -# of the responses to your question will be people telling you -# to "post the output of radiusd -X". - -###################################################################### -# -# The location of other config files and logfiles are declared -# in this file. -# -# Also general configuration for modules can be done in this -# file, it is exported through the API to modules that ask for -# it. -# -# See "man radiusd.conf" for documentation on the format of this -# file. Note that the individual configuration items are NOT -# documented in that "man" page. They are only documented here, -# in the comments. -# -# As of 2.0.0, FreeRADIUS supports a simple processing language -# in the "authorize", "authenticate", "accounting", etc. sections. -# See "man unlang" for details. -# - -prefix = /usr/local -exec_prefix = ${prefix} -sysconfdir = ${prefix}/etc -localstatedir = ${prefix}/var -sbindir = ${exec_prefix}/sbin -logdir = ${localstatedir}/log/radius -raddbdir = ${sysconfdir}/raddb -radacctdir = ${logdir}/radacct - -# -# name of the running server. See also the "-n" command-line option. -name = radiusd - -# Location of config and logfiles. -confdir = ${raddbdir} -run_dir = ${localstatedir}/run/${name} - -# Should likely be ${localstatedir}/lib/radiusd -db_dir = ${raddbdir} - -# -# libdir: Where to find the rlm_* modules. -# -# This should be automatically set at configuration time. -# -# If the server builds and installs, but fails at execution time -# with an 'undefined symbol' error, then you can use the libdir -# directive to work around the problem. -# -# The cause is usually that a library has been installed on your -# system in a place where the dynamic linker CANNOT find it. When -# executing as root (or another user), your personal environment MAY -# be set up to allow the dynamic linker to find the library. When -# executing as a daemon, FreeRADIUS MAY NOT have the same -# personalized configuration. -# -# To work around the problem, find out which library contains that symbol, -# and add the directory containing that library to the end of 'libdir', -# with a colon separating the directory names. NO spaces are allowed. -# -# e.g. libdir = /usr/local/lib:/opt/package/lib -# -# You can also try setting the LD_LIBRARY_PATH environment variable -# in a script which starts the server. -# -# If that does not work, then you can re-configure and re-build the -# server to NOT use shared libraries, via: -# -# ./configure --disable-shared -# make -# make install -# -libdir = ${exec_prefix}/lib - -# pidfile: Where to place the PID of the RADIUS server. -# -# The server may be signalled while it's running by using this -# file. -# -# This file is written when ONLY running in daemon mode. -# -# e.g.: kill -HUP `cat /var/run/radiusd/radiusd.pid` -# -pidfile = ${run_dir}/${name}.pid - -# chroot: directory where the server does "chroot". -# -# The chroot is done very early in the process of starting the server. -# After the chroot has been performed it switches to the "user" listed -# below (which MUST be specified). If "group" is specified, it switchs -# to that group, too. Any other groups listed for the specified "user" -# in "/etc/group" are also added as part of this process. -# -# The current working directory (chdir / cd) is left *outside* of the -# chroot until all of the modules have been initialized. This allows -# the "raddb" directory to be left outside of the chroot. Once the -# modules have been initialized, it does a "chdir" to ${logdir}. This -# means that it should be impossible to break out of the chroot. -# -# If you are worried about security issues related to this use of chdir, -# then simply ensure that the "raddb" directory is inside of the chroot, -# end be sure to do "cd raddb" BEFORE starting the server. -# -# If the server is statically linked, then the only files that have -# to exist in the chroot are ${run_dir} and ${logdir}. If you do the -# "cd raddb" as discussed above, then the "raddb" directory has to be -# inside of the chroot directory, too. -# -#chroot = /path/to/chroot/directory - -# user/group: The name (or #number) of the user/group to run radiusd as. -# -# If these are commented out, the server will run as the user/group -# that started it. In order to change to a different user/group, you -# MUST be root ( or have root privleges ) to start the server. -# -# We STRONGLY recommend that you run the server with as few permissions -# as possible. That is, if you're not using shadow passwords, the -# user and group items below should be set to radius'. -# -# NOTE that some kernels refuse to setgid(group) when the value of -# (unsigned)group is above 60000; don't use group nobody on these systems! -# -# On systems with shadow passwords, you might have to set 'group = shadow' -# for the server to be able to read the shadow password file. If you can -# authenticate users while in debug mode, but not in daemon mode, it may be -# that the debugging mode server is running as a user that can read the -# shadow info, and the user listed below can not. -# -# The server will also try to use "initgroups" to read /etc/groups. -# It will join all groups where "user" is a member. This can allow -# for some finer-grained access controls. -# -#user = radius -#group = radius - -# max_request_time: The maximum time (in seconds) to handle a request. -# -# Requests which take more time than this to process may be killed, and -# a REJECT message is returned. -# -# WARNING: If you notice that requests take a long time to be handled, -# then this MAY INDICATE a bug in the server, in one of the modules -# used to handle a request, OR in your local configuration. -# -# This problem is most often seen when using an SQL database. If it takes -# more than a second or two to receive an answer from the SQL database, -# then it probably means that you haven't indexed the database. See your -# SQL server documentation for more information. -# -# Useful range of values: 5 to 120 -# -max_request_time = 30 - -# cleanup_delay: The time to wait (in seconds) before cleaning up -# a reply which was sent to the NAS. -# -# The RADIUS request is normally cached internally for a short period -# of time, after the reply is sent to the NAS. The reply packet may be -# lost in the network, and the NAS will not see it. The NAS will then -# re-send the request, and the server will respond quickly with the -# cached reply. -# -# If this value is set too low, then duplicate requests from the NAS -# MAY NOT be detected, and will instead be handled as seperate requests. -# -# If this value is set too high, then the server will cache too many -# requests, and some new requests may get blocked. (See 'max_requests'.) -# -# Useful range of values: 2 to 10 -# -cleanup_delay = 5 - -# max_requests: The maximum number of requests which the server keeps -# track of. This should be 256 multiplied by the number of clients. -# e.g. With 4 clients, this number should be 1024. -# -# If this number is too low, then when the server becomes busy, -# it will not respond to any new requests, until the 'cleanup_delay' -# time has passed, and it has removed the old requests. -# -# If this number is set too high, then the server will use a bit more -# memory for no real benefit. -# -# If you aren't sure what it should be set to, it's better to set it -# too high than too low. Setting it to 1000 per client is probably -# the highest it should be. -# -# Useful range of values: 256 to infinity -# -max_requests = 1024 - -# listen: Make the server listen on a particular IP address, and send -# replies out from that address. This directive is most useful for -# hosts with multiple IP addresses on one interface. -# -# If you want the server to listen on additional addresses, or on -# additionnal ports, you can use multiple "listen" sections. -# -# Each section make the server listen for only one type of packet, -# therefore authentication and accounting have to be configured in -# different sections. -# -# The server ignore all "listen" section if you are using '-i' and '-p' -# on the command line. -# -listen { - # Type of packets to listen for. - # Allowed values are: - # auth listen for authentication packets - # acct listen for accounting packets - # proxy IP to use for sending proxied packets - # detail Read from the detail file. For examples, see - # raddb/sites-available/copy-acct-to-home-server - # status listen for Status-Server packets. For examples, - # see raddb/sites-available/status - # coa listen for CoA-Request and Disconnect-Request - # packets. For examples, see the file - # raddb/sites-available/coa-server - # - type = auth - - # Note: "type = proxy" lets you control the source IP used for - # proxying packets, with some limitations: - # - # * A proxy listener CANNOT be used in a virtual server section. - # * You should probably set "port = 0". - # * Any "clients" configuration will be ignored. - # - # See also proxy.conf, and the "src_ipaddr" configuration entry - # in the sample "home_server" section. When you specify the - # source IP address for packets sent to a home server, the - # proxy listeners are automatically created. - - # IP address on which to listen. - # Allowed values are: - # dotted quad (1.2.3.4) - # hostname (radius.example.com) - # wildcard (*) -# ipaddr = * - - # OR, you can use an IPv6 address, but not both - # at the same time. - ipv6addr = :: # any. ::1 == localhost - - # Port on which to listen. - # Allowed values are: - # integer port number (1812) - # 0 means "use /etc/services for the proper port" - port = 0 - - # Some systems support binding to an interface, in addition - # to the IP address. This feature isn't strictly necessary, - # but for sites with many IP addresses on one interface, - # it's useful to say "listen on all addresses for eth0". - # - # If your system does not support this feature, you will - # get an error if you try to use it. - # -# interface = eth0 - - # Per-socket lists of clients. This is a very useful feature. - # - # The name here is a reference to a section elsewhere in - # radiusd.conf, or clients.conf. Having the name as - # a reference allows multiple sockets to use the same - # set of clients. - # - # If this configuration is used, then the global list of clients - # is IGNORED for this "listen" section. Take care configuring - # this feature, to ensure you don't accidentally disable a - # client you need. - # - # See clients.conf for the configuration of "per_socket_clients". - # -# clients = per_socket_clients -} - -# This second "listen" section is for listening on the accounting -# port, too. -# -listen { -# ipaddr = * - ipv6addr = :: - port = 0 - type = acct -# interface = eth0 -# clients = per_socket_clients -} - -# hostname_lookups: Log the names of clients or just their IP addresses -# e.g., www.freeradius.org (on) or 206.47.27.232 (off). -# -# The default is 'off' because it would be overall better for the net -# if people had to knowingly turn this feature on, since enabling it -# means that each client request will result in AT LEAST one lookup -# request to the nameserver. Enabling hostname_lookups will also -# mean that your server may stop randomly for 30 seconds from time -# to time, if the DNS requests take too long. -# -# Turning hostname lookups off also means that the server won't block -# for 30 seconds, if it sees an IP address which has no name associated -# with it. -# -# allowed values: {no, yes} -# -hostname_lookups = no - -# Core dumps are a bad thing. This should only be set to 'yes' -# if you're debugging a problem with the server. -# -# allowed values: {no, yes} -# -allow_core_dumps = no - -# Regular expressions -# -# These items are set at configure time. If they're set to "yes", -# then setting them to "no" turns off regular expression support. -# -# If they're set to "no" at configure time, then setting them to "yes" -# WILL NOT WORK. It will give you an error. -# -regular_expressions = yes -extended_expressions = yes - -# -# Logging section. The various "log_*" configuration items -# will eventually be moved here. -# -log { - # - # Destination for log messages. This can be one of: - # - # files - log to "file", as defined below. - # syslog - to syslog (see also the "syslog_facility", below. - # stdout - standard output - # stderr - standard error. - # - # The command-line option "-X" over-rides this option, and forces - # logging to go to stdout. - # - destination = syslog - - # - # The logging messages for the server are appended to the - # tail of this file if destination == "files" - # - # If the server is running in debugging mode, this file is - # NOT used. - # - file = ${logdir}/radius.log - - # - # If this configuration parameter is set, then log messages for - # a *request* go to this file, rather than to radius.log. - # - # i.e. This is a log file per request, once the server has accepted - # the request as being from a valid client. Messages that are - # not associated with a request still go to radius.log. - # - # Not all log messages in the server core have been updated to use - # this new internal API. As a result, some messages will still - # go to radius.log. Please submit patches to fix this behavior. - # - # The file name is expanded dynamically. You should ONLY user - # server-side attributes for the filename (e.g. things you control). - # Using this feature MAY also slow down the server substantially, - # especially if you do thinks like SQL calls as part of the - # expansion of the filename. - # - # The name of the log file should use attributes that don't change - # over the lifetime of a request, such as User-Name, - # Virtual-Server or Packet-Src-IP-Address. Otherwise, the log - # messages will be distributed over multiple files. - # - # Logging can be enabled for an individual request by a special - # dynamic expansion macro: %{debug: 1}, where the debug level - # for this request is set to '1' (or 2, 3, etc.). e.g. - # - # ... - # update control { - # Tmp-String-0 = "%{debug:1}" - # } - # ... - # - # The attribute that the value is assigned to is unimportant, - # and should be a "throw-away" attribute with no side effects. - # - requests = ${logdir}/radiusd-%{%{Virtual-Server}:-DEFAULT}-%Y%m%d.log - - # - # Which syslog facility to use, if ${destination} == "syslog" - # - # The exact values permitted here are OS-dependent. You probably - # don't want to change this. - # - syslog_facility = daemon - - # Log the full User-Name attribute, as it was found in the request. - # - # allowed values: {no, yes} - # - stripped_names = yes - - # Log authentication requests to the log file. - # - # allowed values: {no, yes} - # - auth = yes - - # Log passwords with the authentication requests. - # auth_badpass - logs password if it's rejected - # auth_goodpass - logs password if it's correct - # - # allowed values: {no, yes} - # - auth_badpass = yes - auth_goodpass = yes - - # Log additional text at the end of the "Login OK" messages. - # for these to work, the "auth" and "auth_goopass" or "auth_badpass" - # configurations above have to be set to "yes". - # - # The strings below are dynamically expanded, which means that - # you can put anything you want in them. However, note that - # this expansion can be slow, and can negatively impact server - # performance. - # -# msg_goodpass = "" -# msg_badpass = "" -} - -# The program to execute to do concurrency checks. -checkrad = ${sbindir}/checkrad - -# SECURITY CONFIGURATION -# -# There may be multiple methods of attacking on the server. This -# section holds the configuration items which minimize the impact -# of those attacks -# -security { - # - # max_attributes: The maximum number of attributes - # permitted in a RADIUS packet. Packets which have MORE - # than this number of attributes in them will be dropped. - # - # If this number is set too low, then no RADIUS packets - # will be accepted. - # - # If this number is set too high, then an attacker may be - # able to send a small number of packets which will cause - # the server to use all available memory on the machine. - # - # Setting this number to 0 means "allow any number of attributes" - max_attributes = 200 - - # - # reject_delay: When sending an Access-Reject, it can be - # delayed for a few seconds. This may help slow down a DoS - # attack. It also helps to slow down people trying to brute-force - # crack a users password. - # - # Setting this number to 0 means "send rejects immediately" - # - # If this number is set higher than 'cleanup_delay', then the - # rejects will be sent at 'cleanup_delay' time, when the request - # is deleted from the internal cache of requests. - # - # Useful ranges: 1 to 5 - reject_delay = 1 - - # - # status_server: Whether or not the server will respond - # to Status-Server requests. - # - # When sent a Status-Server message, the server responds with - # an Access-Accept or Accounting-Response packet. - # - # This is mainly useful for administrators who want to "ping" - # the server, without adding test users, or creating fake - # accounting packets. - # - # It's also useful when a NAS marks a RADIUS server "dead". - # The NAS can periodically "ping" the server with a Status-Server - # packet. If the server responds, it must be alive, and the - # NAS can start using it for real requests. - # - # See also raddb/sites-available/status - # - status_server = yes -} - -# PROXY CONFIGURATION -# -# proxy_requests: Turns proxying of RADIUS requests on or off. -# -# The server has proxying turned on by default. If your system is NOT -# set up to proxy requests to another server, then you can turn proxying -# off here. This will save a small amount of resources on the server. -# -# If you have proxying turned off, and your configuration files say -# to proxy a request, then an error message will be logged. -# -# To disable proxying, change the "yes" to "no", and comment the -# $INCLUDE line. -# -# allowed values: {no, yes} -# -proxy_requests = no -$INCLUDE proxy.conf - - -# CLIENTS CONFIGURATION -# -# Client configuration is defined in "clients.conf". -# - -# The 'clients.conf' file contains all of the information from the old -# 'clients' and 'naslist' configuration files. We recommend that you -# do NOT use 'client's or 'naslist', although they are still -# supported. -# -# Anything listed in 'clients.conf' will take precedence over the -# information from the old-style configuration files. -# -$INCLUDE clients.conf - - -# THREAD POOL CONFIGURATION -# -# The thread pool is a long-lived group of threads which -# take turns (round-robin) handling any incoming requests. -# -# You probably want to have a few spare threads around, -# so that high-load situations can be handled immediately. If you -# don't have any spare threads, then the request handling will -# be delayed while a new thread is created, and added to the pool. -# -# You probably don't want too many spare threads around, -# otherwise they'll be sitting there taking up resources, and -# not doing anything productive. -# -# The numbers given below should be adequate for most situations. -# -thread pool { - # Number of servers to start initially --- should be a reasonable - # ballpark figure. - start_servers = 5 - - # Limit on the total number of servers running. - # - # If this limit is ever reached, clients will be LOCKED OUT, so it - # should NOT BE SET TOO LOW. It is intended mainly as a brake to - # keep a runaway server from taking the system with it as it spirals - # down... - # - # You may find that the server is regularly reaching the - # 'max_servers' number of threads, and that increasing - # 'max_servers' doesn't seem to make much difference. - # - # If this is the case, then the problem is MOST LIKELY that - # your back-end databases are taking too long to respond, and - # are preventing the server from responding in a timely manner. - # - # The solution is NOT do keep increasing the 'max_servers' - # value, but instead to fix the underlying cause of the - # problem: slow database, or 'hostname_lookups=yes'. - # - # For more information, see 'max_request_time', above. - # - max_servers = 32 - - # Server-pool size regulation. Rather than making you guess - # how many servers you need, FreeRADIUS dynamically adapts to - # the load it sees, that is, it tries to maintain enough - # servers to handle the current load, plus a few spare - # servers to handle transient load spikes. - # - # It does this by periodically checking how many servers are - # waiting for a request. If there are fewer than - # min_spare_servers, it creates a new spare. If there are - # more than max_spare_servers, some of the spares die off. - # The default values are probably OK for most sites. - # - min_spare_servers = 3 - max_spare_servers = 10 - - # There may be memory leaks or resource allocation problems with - # the server. If so, set this value to 300 or so, so that the - # resources will be cleaned up periodically. - # - # This should only be necessary if there are serious bugs in the - # server which have not yet been fixed. - # - # '0' is a special value meaning 'infinity', or 'the servers never - # exit' - max_requests_per_server = 0 -} - -# MODULE CONFIGURATION -# -# The names and configuration of each module is located in this section. -# -# After the modules are defined here, they may be referred to by name, -# in other sections of this configuration file. -# -modules { - # - # Each module has a configuration as follows: - # - # name [ instance ] { - # config_item = value - # ... - # } - # - # The 'name' is used to load the 'rlm_name' library - # which implements the functionality of the module. - # - # The 'instance' is optional. To have two different instances - # of a module, it first must be referred to by 'name'. - # The different copies of the module are then created by - # inventing two 'instance' names, e.g. 'instance1' and 'instance2' - # - # The instance names can then be used in later configuration - # INSTEAD of the original 'name'. See the 'radutmp' configuration - # for an example. - # - - # - # As of 2.0.5, most of the module configurations are in a - # sub-directory. Files matching the regex /[a-zA-Z0-9_.]+/ - # are loaded. The modules are initialized ONLY if they are - # referenced in a processing section, such as authorize, - # authenticate, accounting, pre/post-proxy, etc. - # - $INCLUDE ${confdir}/modules/ - - # Extensible Authentication Protocol - # - # For all EAP related authentications. - # Now in another file, because it is very large. - # - $INCLUDE eap.conf - - # Include another file that has the SQL-related configuration. - # This is another file only because it tends to be big. - # -# $INCLUDE sql.conf - - # - # This module is an SQL enabled version of the counter module. - # - # Rather than maintaining seperate (GDBM) databases of - # accounting info for each counter, this module uses the data - # stored in the raddacct table by the sql modules. This - # module NEVER does any database INSERTs or UPDATEs. It is - # totally dependent on the SQL module to process Accounting - # packets. - # -# $INCLUDE sql/mysql/counter.conf - - # - # IP addresses managed in an SQL table. - # -# $INCLUDE sqlippool.conf -} - -# Instantiation -# -# This section orders the loading of the modules. Modules -# listed here will get loaded BEFORE the later sections like -# authorize, authenticate, etc. get examined. -# -# This section is not strictly needed. When a section like -# authorize refers to a module, it's automatically loaded and -# initialized. However, some modules may not be listed in any -# of the following sections, so they can be listed here. -# -# Also, listing modules here ensures that you have control over -# the order in which they are initalized. If one module needs -# something defined by another module, you can list them in order -# here, and ensure that the configuration will be OK. -# -instantiate { - # - # Allows the execution of external scripts. - # The entire command line (and output) must fit into 253 bytes. - # - # e.g. Framed-Pool = `%{exec:/bin/echo foo}` - exec - - # - # The expression module doesn't do authorization, - # authentication, or accounting. It only does dynamic - # translation, of the form: - # - # Session-Timeout = `%{expr:2 + 3}` - # - # So the module needs to be instantiated, but CANNOT be - # listed in any other section. See 'doc/rlm_expr' for - # more information. - # - expr - - # - # We add the counter module here so that it registers - # the check-name attribute before any module which sets - # it -# daily - expiration - logintime - - # subsections here can be thought of as "virtual" modules. - # - # e.g. If you have two redundant SQL servers, and you want to - # use them in the authorize and accounting sections, you could - # place a "redundant" block in each section, containing the - # exact same text. Or, you could uncomment the following - # lines, and list "redundant_sql" in the authorize and - # accounting sections. - # - #redundant redundant_sql { - # sql1 - # sql2 - #} -} - -###################################################################### -# -# Policies that can be applied in multiple places are listed -# globally. That way, they can be defined once, and referred -# to multiple times. -# -###################################################################### -$INCLUDE policy.conf - -###################################################################### -# -# Load virtual servers. -# -# This next $INCLUDE line loads files in the directory that -# match the regular expression: /[a-zA-Z0-9_.]+/ -# -# It allows you to define new virtual servers simply by placing -# a file into the raddb/sites-enabled/ directory. -# -$INCLUDE sites-enabled/ - -###################################################################### -# -# All of the other configuration sections like "authorize {}", -# "authenticate {}", "accounting {}", have been moved to the -# the file: -# -# raddb/sites-available/default -# -# This is the "default" virtual server that has the same -# configuration as in version 1.0.x and 1.1.x. The default -# installation enables this virtual server. You should -# edit it to create policies for your local site. -# -# For more documentation on virtual servers, see: -# -# raddb/sites-available/README -# -###################################################################### diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/examples/users b/openair3/PMIPv6/freeradius-client-1.1.6/examples/users deleted file mode 100644 index 9a3dbc288f..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/examples/users +++ /dev/null @@ -1,251 +0,0 @@ -# -# Please read the documentation file ../doc/processing_users_file, -# or 'man 5 users' (after installing the server) for more information. -# -# This file contains authentication security and configuration -# information for each user. Accounting requests are NOT processed -# through this file. Instead, see 'acct_users', in this directory. -# -# The first field is the user's name and can be up to -# 253 characters in length. This is followed (on the same line) with -# the list of authentication requirements for that user. This can -# include password, comm server name, comm server port number, protocol -# type (perhaps set by the "hints" file), and huntgroup name (set by -# the "huntgroups" file). -# -# If you are not sure why a particular reply is being sent by the -# server, then run the server in debugging mode (radiusd -X), and -# you will see which entries in this file are matched. -# -# When an authentication request is received from the comm server, -# these values are tested. Only the first match is used unless the -# "Fall-Through" variable is set to "Yes". -# -# A special user named "DEFAULT" matches on all usernames. -# You can have several DEFAULT entries. All entries are processed -# in the order they appear in this file. The first entry that -# matches the login-request will stop processing unless you use -# the Fall-Through variable. -# -# If you use the database support to turn this file into a .db or .dbm -# file, the DEFAULT entries _have_ to be at the end of this file and -# you can't have multiple entries for one username. -# -# Indented (with the tab character) lines following the first -# line indicate the configuration values to be passed back to -# the comm server to allow the initiation of a user session. -# This can include things like the PPP configuration values -# or the host to log the user onto. -# -# You can include another `users' file with `$INCLUDE users.other' -# - -# -# For a list of RADIUS attributes, and links to their definitions, -# see: -# -# http://www.freeradius.org/rfc/attributes.html -# - -# -# Deny access for a specific user. Note that this entry MUST -# be before any other 'Auth-Type' attribute which results in the user -# being authenticated. -# -# Note that there is NO 'Fall-Through' attribute, so the user will not -# be given any additional resources. -# -#lameuser Auth-Type := Reject -# Reply-Message = "Your account has been disabled." - - -testing Cleartext-Password := "linux" - - - -0000001c232fe989 Auth-Type := Accept, User-Password == "linux" - Service-Type = Authenticate-Only, - Framed-Interface-Id = 0000:0000:0000:0000, - Framed-IPv6-Prefix = 2001:0100:0005:6000::/64 - -0000001e2a48017e Auth-Type := Accept, User-Password == "linux" - Service-Type = Authenticate-Only, - Framed-Interface-Id = 0000:0000:0000:0000, - Framed-IPv6-Prefix = 2001:0100:0003:0000::/64 - -0000001c234c9d29 Auth-Type := Accept, User-Password == "linux" - Service-Type = Authenticate-Only, - Framed-Interface-Id = 0000:0000:0000:0000, - Framed-IPv6-Prefix = 2001:0100:0006:0000::/64 - -0000001c232f1932 Auth-Type := Accept, User-Password == "linux" - Service-Type = Authenticate-Only, - Framed-Interface-Id = 0000:0000:0000:0000, - Framed-IPv6-Prefix = 2001:0100:0008:0000::/64 - -0000000fb50ddb44 Auth-Type := Accept, User-Password == "linux" - Service-Type = Authenticate-Only, - Framed-Interface-Id = 0000:0000:0000:0000, - Framed-IPv6-Prefix = 2001:0100:0004:4000::/64 - -000000146c53180a Auth-Type := Accept, User-Password == "linux" - Service-Type = Authenticate-Only, - Framed-Interface-Id = 0000:0000:0000:0000, - Framed-IPv6-Prefix = 2001:0100:0006:5000::/64 - -0000001f3c57ca49 Auth-Type := Accept, User-Password == "linux" - Service-Type = Authenticate-Only, - Framed-Interface-Id = 0000:0000:0000:0000, - Framed-IPv6-Prefix = 2001:0100:0009:9000::/64 - -000000184d8cb5c8 Auth-Type := Accept, User-Password == "linux" - Service-Type = Authenticate-Only, - Framed-Interface-Id = 0000:0000:0000:0000, - Framed-IPv6-Prefix = 2001:0100:3333:0000::/64 - - - - -# -# Deny access for a group of users. -# -# Note that there is NO 'Fall-Through' attribute, so the user will not -# be given any additional resources. -# -#DEFAULT Group == "disabled", Auth-Type := Reject -# Reply-Message = "Your account has been disabled." -# - -# -# This is a complete entry for "steve". Note that there is no Fall-Through -# entry so that no DEFAULT entry will be used, and the user will NOT -# get any attributes in addition to the ones listed here. -# -#steve Cleartext-Password := "testing" -# Service-Type = Framed-User, -# Framed-Protocol = PPP, -# Framed-IP-Address = 172.16.3.33, -# Framed-IP-Netmask = 255.255.255.0, -# Framed-Routing = Broadcast-Listen, -# Framed-Filter-Id = "std.ppp", -# Framed-MTU = 1500, -# Framed-Compression = Van-Jacobsen-TCP-IP - -# -# This is an entry for a user with a space in their name. -# Note the double quotes surrounding the name. -# -#"John Doe" Cleartext-Password := "hello" -# Reply-Message = "Hello, %{User-Name}" - -# -# Dial user back and telnet to the default host for that port -# -#Deg Cleartext-Password := "ge55ged" -# Service-Type = Callback-Login-User, -# Login-IP-Host = 0.0.0.0, -# Callback-Number = "9,5551212", -# Login-Service = Telnet, -# Login-TCP-Port = Telnet - -# -# Another complete entry. After the user "dialbk" has logged in, the -# connection will be broken and the user will be dialed back after which -# he will get a connection to the host "timeshare1". -# -#dialbk Cleartext-Password := "callme" -# Service-Type = Callback-Login-User, -# Login-IP-Host = timeshare1, -# Login-Service = PortMaster, -# Callback-Number = "9,1-800-555-1212" - -# -# user "swilson" will only get a static IP number if he logs in with -# a framed protocol on a terminal server in Alphen (see the huntgroups file). -# -# Note that by setting "Fall-Through", other attributes will be added from -# the following DEFAULT entries -# -#swilson Service-Type == Framed-User, Huntgroup-Name == "alphen" -# Framed-IP-Address = 192.168.1.65, -# Fall-Through = Yes - -# -# If the user logs in as 'username.shell', then authenticate them -# using the default method, give them shell access, and stop processing -# the rest of the file. -# -#DEFAULT Suffix == ".shell" -# Service-Type = Login-User, -# Login-Service = Telnet, -# Login-IP-Host = your.shell.machine - - -# -# The rest of this file contains the several DEFAULT entries. -# DEFAULT entries match with all login names. -# Note that DEFAULT entries can also Fall-Through (see first entry). -# A name-value pair from a DEFAULT entry will _NEVER_ override -# an already existing name-value pair. -# - -# -# Set up different IP address pools for the terminal servers. -# Note that the "+" behind the IP address means that this is the "base" -# IP address. The Port-Id (S0, S1 etc) will be added to it. -# -#DEFAULT Service-Type == Framed-User, Huntgroup-Name == "alphen" -# Framed-IP-Address = 192.168.1.32+, -# Fall-Through = Yes - -#DEFAULT Service-Type == Framed-User, Huntgroup-Name == "delft" -# Framed-IP-Address = 192.168.2.32+, -# Fall-Through = Yes - -# -# Sample defaults for all framed connections. -# -#DEFAULT Service-Type == Framed-User -# Framed-IP-Address = 255.255.255.254, -# Framed-MTU = 576, -# Service-Type = Framed-User, -# Fall-Through = Yes - -# -# Default for PPP: dynamic IP address, PPP mode, VJ-compression. -# NOTE: we do not use Hint = "PPP", since PPP might also be auto-detected -# by the terminal server in which case there may not be a "P" suffix. -# The terminal server sends "Framed-Protocol = PPP" for auto PPP. -# -DEFAULT Framed-Protocol == PPP - Framed-Protocol = PPP, - Framed-Compression = Van-Jacobson-TCP-IP - -# -# Default for CSLIP: dynamic IP address, SLIP mode, VJ-compression. -# -DEFAULT Hint == "CSLIP" - Framed-Protocol = SLIP, - Framed-Compression = Van-Jacobson-TCP-IP - -# -# Default for SLIP: dynamic IP address, SLIP mode. -# -DEFAULT Hint == "SLIP" - Framed-Protocol = SLIP - -# -# Last default: rlogin to our main server. -# -#DEFAULT -# Service-Type = Login-User, -# Login-Service = Rlogin, -# Login-IP-Host = shellbox.ispdomain.com - -# # -# # Last default: shell on the local terminal server. -# # -# DEFAULT -# Service-Type = Administrative-User - -# On no match, the user is denied access. diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/include/Makefile b/openair3/PMIPv6/freeradius-client-1.1.6/include/Makefile deleted file mode 100644 index 028d80b460..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/include/Makefile +++ /dev/null @@ -1,470 +0,0 @@ -# Makefile.in generated by automake 1.11.1 from Makefile.am. -# include/Makefile. Generated from Makefile.in by configure. - -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, -# Inc. -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - - - -# -# $Id: Makefile.am,v 1.3 2007/01/06 20:15:28 pnixon Exp $ -# -# Copyright (C) 1997 Lars Fenneberg -# -# See the file COPYRIGHT for the respective terms and conditions. -# If the file is missing contact me at lf@elemental.net -# and I'll send you a copy. -# -# - - -pkgdatadir = $(datadir)/radiusclient -pkgincludedir = $(includedir)/radiusclient -pkglibdir = $(libdir)/radiusclient -pkglibexecdir = $(libexecdir)/radiusclient -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = i686-pc-linux-gnu -host_triplet = i686-pc-linux-gnu -target_triplet = i686-pc-linux-gnu -subdir = include -DIST_COMMON = $(include_HEADERS) $(noinst_HEADERS) \ - $(srcdir)/Makefile.am $(srcdir)/Makefile.in -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/configure.in -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs -CONFIG_HEADER = $(top_builddir)/config.h -CONFIG_CLEAN_FILES = -CONFIG_CLEAN_VPATH_FILES = -SOURCES = -DIST_SOURCES = -am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; -am__vpath_adj = case $$p in \ - $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ - *) f=$$p;; \ - esac; -am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; -am__install_max = 40 -am__nobase_strip_setup = \ - srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` -am__nobase_strip = \ - for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" -am__nobase_list = $(am__nobase_strip_setup); \ - for p in $$list; do echo "$$p $$p"; done | \ - sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ - $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ - if (++n[$$2] == $(am__install_max)) \ - { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ - END { for (dir in files) print dir, files[dir] }' -am__base_list = \ - sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ - sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' -am__installdirs = "$(DESTDIR)$(includedir)" -HEADERS = $(include_HEADERS) $(noinst_HEADERS) -ETAGS = etags -CTAGS = ctags -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = ${SHELL} /usr/local/src/freeradius-client-1.1.6/missing --run aclocal-1.11 -ALLOCA = -AMTAR = ${SHELL} /usr/local/src/freeradius-client-1.1.6/missing --run tar -AR = /usr/bin/ar -AUTOCONF = ${SHELL} /usr/local/src/freeradius-client-1.1.6/missing --run autoconf -AUTOHEADER = ${SHELL} /usr/local/src/freeradius-client-1.1.6/missing --run autoheader -AUTOMAKE = ${SHELL} /usr/local/src/freeradius-client-1.1.6/missing --run automake-1.11 -AWK = gawk -CC = gcc -CCDEPMODE = depmode=gcc3 -CFLAGS = -g -O2 -CPP = gcc -E -CPPFLAGS = -CYGPATH_W = echo -DEFS = -DHAVE_CONFIG_H -DEPDIR = .deps -DSYMUTIL = -DUMPBIN = -ECHO_C = -ECHO_N = -n -ECHO_T = -EGREP = /bin/grep -E -EXEEXT = -FGREP = /bin/grep -F -GREP = /bin/grep -INSTALL = /usr/bin/install -c -INSTALL_DATA = ${INSTALL} -m 644 -INSTALL_PROGRAM = ${INSTALL} -INSTALL_SCRIPT = ${INSTALL} -INSTALL_STRIP_PROGRAM = $(install_sh) -c -s -LD = /usr/bin/ld -LDFLAGS = -LIBOBJS = -LIBS = -lcrypt -lnsl -LIBTOOL = $(SHELL) $(top_builddir)/libtool -LIBVERSION = 2:0:0 -LIPO = -LN_S = ln -s -LTLIBOBJS = -MAINT = # -MAKEINFO = ${SHELL} /usr/local/src/freeradius-client-1.1.6/missing --run makeinfo -MKDIR_P = /bin/mkdir -p -NM = /usr/bin/nm -B -NMEDIT = -OBJDUMP = objdump -OBJEXT = o -OTOOL = -OTOOL64 = -PACKAGE = radiusclient -PACKAGE_BUGREPORT = -PACKAGE_NAME = -PACKAGE_STRING = -PACKAGE_TARNAME = -PACKAGE_URL = -PACKAGE_VERSION = -PATH_SEPARATOR = : -RANLIB = ranlib -RC_LOG_FACILITY = LOG_DAEMON -RC_SECURE_PATH = /bin:/usr/bin:/usr/local/bin -SED = /bin/sed -SET_MAKE = -SHELL = /bin/bash -STRIP = strip -VERSION = 1.1.6 -abs_builddir = /usr/local/src/freeradius-client-1.1.6/include -abs_srcdir = /usr/local/src/freeradius-client-1.1.6/include -abs_top_builddir = /usr/local/src/freeradius-client-1.1.6 -abs_top_srcdir = /usr/local/src/freeradius-client-1.1.6 -ac_ct_CC = gcc -ac_ct_DUMPBIN = -am__include = include -am__leading_dot = . -am__quote = -am__tar = ${AMTAR} chof - "$$tardir" -am__untar = ${AMTAR} xf - -bindir = ${exec_prefix}/bin -build = i686-pc-linux-gnu -build_alias = -build_cpu = i686 -build_os = linux-gnu -build_vendor = pc -builddir = . -datadir = ${datarootdir} -datarootdir = ${prefix}/share -docdir = ${datarootdir}/doc/${PACKAGE} -dvidir = ${docdir} -exec_prefix = ${prefix} -host = i686-pc-linux-gnu -host_alias = -host_cpu = i686 -host_os = linux-gnu -host_vendor = pc -htmldir = ${docdir} -includedir = ${prefix}/include -infodir = ${datarootdir}/info -install_sh = ${SHELL} /usr/local/src/freeradius-client-1.1.6/install-sh -libdir = ${exec_prefix}/lib -libexecdir = ${exec_prefix}/libexec -localedir = ${datarootdir}/locale -localstatedir = ${prefix}/var -lt_ECHO = echo -mandir = ${datarootdir}/man -mkdir_p = /bin/mkdir -p -oldincludedir = /usr/include -pdfdir = ${docdir} -pkgsysconfdir = ${prefix}/etc/radiusclient -prefix = /usr/local -program_transform_name = s,x,x, -psdir = ${docdir} -sbindir = ${exec_prefix}/sbin -sharedstatedir = ${prefix}/com -srcdir = . -sysconfdir = ${prefix}/etc -target = i686-pc-linux-gnu -target_alias = -target_cpu = i686 -target_os = linux-gnu -target_vendor = pc -top_build_prefix = ../ -top_builddir = .. -top_srcdir = .. -AUTOMAKE_OPTIONS = foreign -noinst_HEADERS = pathnames.h messages.h includes.h -include_HEADERS = freeradius-client.h -all: all-am - -.SUFFIXES: -$(srcdir)/Makefile.in: # $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ - && { if test -f $@; then exit 0; else break; fi; }; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign include/Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --foreign include/Makefile -.PRECIOUS: Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: # $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): # $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(am__aclocal_m4_deps): - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs -install-includeHEADERS: $(include_HEADERS) - @$(NORMAL_INSTALL) - test -z "$(includedir)" || $(MKDIR_P) "$(DESTDIR)$(includedir)" - @list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \ - for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - echo "$$d$$p"; \ - done | $(am__base_list) | \ - while read files; do \ - echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(includedir)'"; \ - $(INSTALL_HEADER) $$files "$(DESTDIR)$(includedir)" || exit $$?; \ - done - -uninstall-includeHEADERS: - @$(NORMAL_UNINSTALL) - @list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \ - files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ - test -n "$$files" || exit 0; \ - echo " ( cd '$(DESTDIR)$(includedir)' && rm -f" $$files ")"; \ - cd "$(DESTDIR)$(includedir)" && rm -f $$files - -ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - mkid -fID $$unique -tags: TAGS - -TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - set x; \ - here=`pwd`; \ - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - shift; \ - if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ - test -n "$$unique" || unique=$$empty_fix; \ - if test $$# -gt 0; then \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - "$$@" $$unique; \ - else \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$unique; \ - fi; \ - fi -ctags: CTAGS -CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - test -z "$(CTAGS_ARGS)$$unique" \ - || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$unique - -GTAGS: - here=`$(am__cd) $(top_builddir) && pwd` \ - && $(am__cd) $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) "$$here" - -distclean-tags: - -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - -distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - list='$(DISTFILES)'; \ - dist_files=`for file in $$list; do echo $$file; done | \ - sed -e "s|^$$srcdirstrip/||;t" \ - -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ - case $$dist_files in \ - */*) $(MKDIR_P) `echo "$$dist_files" | \ - sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ - sort -u` ;; \ - esac; \ - for file in $$dist_files; do \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - if test -d $$d/$$file; then \ - dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test -d "$(distdir)/$$file"; then \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ - else \ - test -f "$(distdir)/$$file" \ - || cp -p $$d/$$file "$(distdir)/$$file" \ - || exit 1; \ - fi; \ - done -check-am: all-am -check: check-am -all-am: Makefile $(HEADERS) -installdirs: - for dir in "$(DESTDIR)$(includedir)"; do \ - test -z "$$dir" || $(MKDIR_P) "$$dir"; \ - done -install: install-am -install-exec: install-exec-am -install-data: install-data-am -uninstall: uninstall-am - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-am -install-strip: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install -mostlyclean-generic: - -clean-generic: - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." -clean: clean-am - -clean-am: clean-generic clean-libtool mostlyclean-am - -distclean: distclean-am - -rm -f Makefile -distclean-am: clean-am distclean-generic distclean-tags - -dvi: dvi-am - -dvi-am: - -html: html-am - -html-am: - -info: info-am - -info-am: - -install-data-am: install-includeHEADERS - -install-dvi: install-dvi-am - -install-dvi-am: - -install-exec-am: - -install-html: install-html-am - -install-html-am: - -install-info: install-info-am - -install-info-am: - -install-man: - -install-pdf: install-pdf-am - -install-pdf-am: - -install-ps: install-ps-am - -install-ps-am: - -installcheck-am: - -maintainer-clean: maintainer-clean-am - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-am - -mostlyclean-am: mostlyclean-generic mostlyclean-libtool - -pdf: pdf-am - -pdf-am: - -ps: ps-am - -ps-am: - -uninstall-am: uninstall-includeHEADERS - -.MAKE: install-am install-strip - -.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ - clean-libtool ctags distclean distclean-generic \ - distclean-libtool distclean-tags distdir dvi dvi-am html \ - html-am info info-am install install-am install-data \ - install-data-am install-dvi install-dvi-am install-exec \ - install-exec-am install-html install-html-am \ - install-includeHEADERS install-info install-info-am \ - install-man install-pdf install-pdf-am install-ps \ - install-ps-am install-strip installcheck installcheck-am \ - installdirs maintainer-clean maintainer-clean-generic \ - mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ - ps ps-am tags uninstall uninstall-am uninstall-includeHEADERS - - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/include/Makefile.am b/openair3/PMIPv6/freeradius-client-1.1.6/include/Makefile.am deleted file mode 100644 index e5733536f3..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/include/Makefile.am +++ /dev/null @@ -1,15 +0,0 @@ -# -# $Id: Makefile.am,v 1.3 2007/01/06 20:15:28 pnixon Exp $ -# -# Copyright (C) 1997 Lars Fenneberg -# -# See the file COPYRIGHT for the respective terms and conditions. -# If the file is missing contact me at lf@elemental.net -# and I'll send you a copy. -# -# - -AUTOMAKE_OPTIONS = foreign - -noinst_HEADERS = pathnames.h messages.h includes.h -include_HEADERS = freeradius-client.h diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/include/Makefile.in b/openair3/PMIPv6/freeradius-client-1.1.6/include/Makefile.in deleted file mode 100644 index 55ffbf4df2..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/include/Makefile.in +++ /dev/null @@ -1,470 +0,0 @@ -# Makefile.in generated by automake 1.11.1 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, -# Inc. -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -@SET_MAKE@ - -# -# $Id: Makefile.am,v 1.3 2007/01/06 20:15:28 pnixon Exp $ -# -# Copyright (C) 1997 Lars Fenneberg -# -# See the file COPYRIGHT for the respective terms and conditions. -# If the file is missing contact me at lf@elemental.net -# and I'll send you a copy. -# -# - -VPATH = @srcdir@ -pkgdatadir = $(datadir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ -pkglibexecdir = $(libexecdir)/@PACKAGE@ -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = @build@ -host_triplet = @host@ -target_triplet = @target@ -subdir = include -DIST_COMMON = $(include_HEADERS) $(noinst_HEADERS) \ - $(srcdir)/Makefile.am $(srcdir)/Makefile.in -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/configure.in -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs -CONFIG_HEADER = $(top_builddir)/config.h -CONFIG_CLEAN_FILES = -CONFIG_CLEAN_VPATH_FILES = -SOURCES = -DIST_SOURCES = -am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; -am__vpath_adj = case $$p in \ - $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ - *) f=$$p;; \ - esac; -am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; -am__install_max = 40 -am__nobase_strip_setup = \ - srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` -am__nobase_strip = \ - for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" -am__nobase_list = $(am__nobase_strip_setup); \ - for p in $$list; do echo "$$p $$p"; done | \ - sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ - $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ - if (++n[$$2] == $(am__install_max)) \ - { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ - END { for (dir in files) print dir, files[dir] }' -am__base_list = \ - sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ - sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' -am__installdirs = "$(DESTDIR)$(includedir)" -HEADERS = $(include_HEADERS) $(noinst_HEADERS) -ETAGS = etags -CTAGS = ctags -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = @ACLOCAL@ -ALLOCA = @ALLOCA@ -AMTAR = @AMTAR@ -AR = @AR@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -CC = @CC@ -CCDEPMODE = @CCDEPMODE@ -CFLAGS = @CFLAGS@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CYGPATH_W = @CYGPATH_W@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -DSYMUTIL = @DSYMUTIL@ -DUMPBIN = @DUMPBIN@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -EXEEXT = @EXEEXT@ -FGREP = @FGREP@ -GREP = @GREP@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -LD = @LD@ -LDFLAGS = @LDFLAGS@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LIBTOOL = @LIBTOOL@ -LIBVERSION = @LIBVERSION@ -LIPO = @LIPO@ -LN_S = @LN_S@ -LTLIBOBJS = @LTLIBOBJS@ -MAINT = @MAINT@ -MAKEINFO = @MAKEINFO@ -MKDIR_P = @MKDIR_P@ -NM = @NM@ -NMEDIT = @NMEDIT@ -OBJDUMP = @OBJDUMP@ -OBJEXT = @OBJEXT@ -OTOOL = @OTOOL@ -OTOOL64 = @OTOOL64@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_URL = @PACKAGE_URL@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -RANLIB = @RANLIB@ -RC_LOG_FACILITY = @RC_LOG_FACILITY@ -RC_SECURE_PATH = @RC_SECURE_PATH@ -SED = @SED@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -STRIP = @STRIP@ -VERSION = @VERSION@ -abs_builddir = @abs_builddir@ -abs_srcdir = @abs_srcdir@ -abs_top_builddir = @abs_top_builddir@ -abs_top_srcdir = @abs_top_srcdir@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ -am__include = @am__include@ -am__leading_dot = @am__leading_dot@ -am__quote = @am__quote@ -am__tar = @am__tar@ -am__untar = @am__untar@ -bindir = @bindir@ -build = @build@ -build_alias = @build_alias@ -build_cpu = @build_cpu@ -build_os = @build_os@ -build_vendor = @build_vendor@ -builddir = @builddir@ -datadir = @datadir@ -datarootdir = @datarootdir@ -docdir = @docdir@ -dvidir = @dvidir@ -exec_prefix = @exec_prefix@ -host = @host@ -host_alias = @host_alias@ -host_cpu = @host_cpu@ -host_os = @host_os@ -host_vendor = @host_vendor@ -htmldir = @htmldir@ -includedir = @includedir@ -infodir = @infodir@ -install_sh = @install_sh@ -libdir = @libdir@ -libexecdir = @libexecdir@ -localedir = @localedir@ -localstatedir = @localstatedir@ -lt_ECHO = @lt_ECHO@ -mandir = @mandir@ -mkdir_p = @mkdir_p@ -oldincludedir = @oldincludedir@ -pdfdir = @pdfdir@ -pkgsysconfdir = @pkgsysconfdir@ -prefix = @prefix@ -program_transform_name = @program_transform_name@ -psdir = @psdir@ -sbindir = @sbindir@ -sharedstatedir = @sharedstatedir@ -srcdir = @srcdir@ -sysconfdir = @sysconfdir@ -target = @target@ -target_alias = @target_alias@ -target_cpu = @target_cpu@ -target_os = @target_os@ -target_vendor = @target_vendor@ -top_build_prefix = @top_build_prefix@ -top_builddir = @top_builddir@ -top_srcdir = @top_srcdir@ -AUTOMAKE_OPTIONS = foreign -noinst_HEADERS = pathnames.h messages.h includes.h -include_HEADERS = freeradius-client.h -all: all-am - -.SUFFIXES: -$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ - && { if test -f $@; then exit 0; else break; fi; }; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign include/Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --foreign include/Makefile -.PRECIOUS: Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(am__aclocal_m4_deps): - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs -install-includeHEADERS: $(include_HEADERS) - @$(NORMAL_INSTALL) - test -z "$(includedir)" || $(MKDIR_P) "$(DESTDIR)$(includedir)" - @list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \ - for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - echo "$$d$$p"; \ - done | $(am__base_list) | \ - while read files; do \ - echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(includedir)'"; \ - $(INSTALL_HEADER) $$files "$(DESTDIR)$(includedir)" || exit $$?; \ - done - -uninstall-includeHEADERS: - @$(NORMAL_UNINSTALL) - @list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \ - files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ - test -n "$$files" || exit 0; \ - echo " ( cd '$(DESTDIR)$(includedir)' && rm -f" $$files ")"; \ - cd "$(DESTDIR)$(includedir)" && rm -f $$files - -ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - mkid -fID $$unique -tags: TAGS - -TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - set x; \ - here=`pwd`; \ - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - shift; \ - if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ - test -n "$$unique" || unique=$$empty_fix; \ - if test $$# -gt 0; then \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - "$$@" $$unique; \ - else \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$unique; \ - fi; \ - fi -ctags: CTAGS -CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - test -z "$(CTAGS_ARGS)$$unique" \ - || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$unique - -GTAGS: - here=`$(am__cd) $(top_builddir) && pwd` \ - && $(am__cd) $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) "$$here" - -distclean-tags: - -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - -distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - list='$(DISTFILES)'; \ - dist_files=`for file in $$list; do echo $$file; done | \ - sed -e "s|^$$srcdirstrip/||;t" \ - -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ - case $$dist_files in \ - */*) $(MKDIR_P) `echo "$$dist_files" | \ - sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ - sort -u` ;; \ - esac; \ - for file in $$dist_files; do \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - if test -d $$d/$$file; then \ - dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test -d "$(distdir)/$$file"; then \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ - else \ - test -f "$(distdir)/$$file" \ - || cp -p $$d/$$file "$(distdir)/$$file" \ - || exit 1; \ - fi; \ - done -check-am: all-am -check: check-am -all-am: Makefile $(HEADERS) -installdirs: - for dir in "$(DESTDIR)$(includedir)"; do \ - test -z "$$dir" || $(MKDIR_P) "$$dir"; \ - done -install: install-am -install-exec: install-exec-am -install-data: install-data-am -uninstall: uninstall-am - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-am -install-strip: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install -mostlyclean-generic: - -clean-generic: - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." -clean: clean-am - -clean-am: clean-generic clean-libtool mostlyclean-am - -distclean: distclean-am - -rm -f Makefile -distclean-am: clean-am distclean-generic distclean-tags - -dvi: dvi-am - -dvi-am: - -html: html-am - -html-am: - -info: info-am - -info-am: - -install-data-am: install-includeHEADERS - -install-dvi: install-dvi-am - -install-dvi-am: - -install-exec-am: - -install-html: install-html-am - -install-html-am: - -install-info: install-info-am - -install-info-am: - -install-man: - -install-pdf: install-pdf-am - -install-pdf-am: - -install-ps: install-ps-am - -install-ps-am: - -installcheck-am: - -maintainer-clean: maintainer-clean-am - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-am - -mostlyclean-am: mostlyclean-generic mostlyclean-libtool - -pdf: pdf-am - -pdf-am: - -ps: ps-am - -ps-am: - -uninstall-am: uninstall-includeHEADERS - -.MAKE: install-am install-strip - -.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ - clean-libtool ctags distclean distclean-generic \ - distclean-libtool distclean-tags distdir dvi dvi-am html \ - html-am info info-am install install-am install-data \ - install-data-am install-dvi install-dvi-am install-exec \ - install-exec-am install-html install-html-am \ - install-includeHEADERS install-info install-info-am \ - install-man install-pdf install-pdf-am install-ps \ - install-ps-am install-strip installcheck installcheck-am \ - installdirs maintainer-clean maintainer-clean-generic \ - mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ - ps ps-am tags uninstall uninstall-am uninstall-includeHEADERS - - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/include/freeradius-client.h b/openair3/PMIPv6/freeradius-client-1.1.6/include/freeradius-client.h deleted file mode 100644 index 545d8c5323..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/include/freeradius-client.h +++ /dev/null @@ -1,520 +0,0 @@ -/* - * $Id: freeradius-client.h,v 1.13 2008/02/11 06:54:23 sobomax Exp $ - * - * Copyright (C) 1995,1996,1997,1998 Lars Fenneberg - * - * Copyright 1992 Livingston Enterprises, Inc. - * - * Copyright 1992,1993, 1994,1995 The Regents of the University of Michigan - * and Merit Network, Inc. All Rights Reserved - * - * See the file COPYRIGHT for the respective terms and conditions. - * If the file is missing contact me at lf@elemental.net - * and I'll send you a copy. - * - */ - -#ifndef FREERADIUS_CLIENT_H -#define FREERADIUS_CLIENT_H - -#ifdef CP_DEBUG -#define DEBUG(args...) rc_log(## args) -#else -#define DEBUG(args...) ; -#endif - -#include -/* - * Include for C99 uintX_t defines is stdint.h on most systems. Solaris uses - * inttypes.h instead. Comment out the stdint include if you get an error, - * and uncomment the inttypes.h include. - */ -#include -/* #include */ -#include -#include -#include -#include -#include - -#undef __BEGIN_DECLS -#undef __END_DECLS -#ifdef __cplusplus -# define __BEGIN_DECLS extern "C" { -# define __END_DECLS } -#else -# define __BEGIN_DECLS /* empty */ -# define __END_DECLS /* empty */ -#endif - -#define AUTH_VECTOR_LEN 16 -#define AUTH_PASS_LEN (3 * 16) /* multiple of 16 */ -#define AUTH_ID_LEN 64 -#define AUTH_STRING_LEN 253 /* maximum of 253 */ - -#define BUFFER_LEN 8192 - -#define NAME_LENGTH 32 -#define GETSTR_LENGTH 128 /* must be bigger than AUTH_PASS_LEN */ - -#define MAX_SECRET_LENGTH (3 * 16) /* MUST be multiple of 16 */ - -#define VENDOR(x) (((x) >> 16) & 0xffff) -#define ATTRID(x) ((x) & 0xffff) - -/* codes for radius_buildreq, radius_getport, etc. */ -#define AUTH 0 -#define ACCT 1 - -/* defines for config.c */ - -#define SERVER_MAX 8 - -#define AUTH_LOCAL_FST (1<<0) -#define AUTH_RADIUS_FST (1<<1) -#define AUTH_LOCAL_SND (1<<2) -#define AUTH_RADIUS_SND (1<<3) - -typedef struct server { - int max; - char *name[SERVER_MAX]; - uint16_t port[SERVER_MAX]; - char *secret[SERVER_MAX]; - double deadtime_ends[SERVER_MAX]; -} SERVER; - -typedef struct pw_auth_hdr { - uint8_t code; - uint8_t id; - uint16_t length; - uint8_t vector[AUTH_VECTOR_LEN]; - uint8_t data[2]; -} AUTH_HDR; - -struct rc_conf { - struct _option *config_options; - struct map2id_s *map2id_list; - struct dict_attr *dictionary_attributes; - struct dict_value *dictionary_values; - struct dict_vendor *dictionary_vendors; - char buf[GETSTR_LENGTH]; - char buf1[14]; - char ifname[512]; - char *ppbuf; - struct in6_addr this_host_ipaddr; - struct in6_addr *this_host_bind_ipaddr; - char dummy[512]; -}; - -typedef struct rc_conf rc_handle; - -#define AUTH_HDR_LEN 20 -#define CHAP_VALUE_LENGTH 16 - -#define PW_AUTH_UDP_PORT 1645 -#define PW_ACCT_UDP_PORT 1646 - -#define PW_TYPE_STRING 0 -#define PW_TYPE_INTEGER 1 -#define PW_TYPE_IPADDR 2 -#define PW_TYPE_DATE 3 -#define PW_TYPE_IPV6ADDR 4 - -/* standard RADIUS codes */ - -#define PW_ACCESS_REQUEST 1 -#define PW_ACCESS_ACCEPT 2 -#define PW_ACCESS_REJECT 3 -#define PW_ACCOUNTING_REQUEST 4 -#define PW_ACCOUNTING_RESPONSE 5 -#define PW_ACCOUNTING_STATUS 6 -#define PW_PASSWORD_REQUEST 7 -#define PW_PASSWORD_ACK 8 -#define PW_PASSWORD_REJECT 9 -#define PW_ACCOUNTING_MESSAGE 10 -#define PW_ACCESS_CHALLENGE 11 -#define PW_STATUS_SERVER 12 -#define PW_STATUS_CLIENT 13 - - -/* standard RADIUS attribute-value pairs */ - -#define PW_USER_NAME 1 /* string */ -#define PW_USER_PASSWORD 2 /* string */ -#define PW_CHAP_PASSWORD 3 /* string */ -#define PW_NAS_IP_ADDRESS 4 /* ipaddr */ -#define PW_NAS_PORT 5 /* integer */ -#define PW_SERVICE_TYPE 6 /* integer */ -#define PW_FRAMED_PROTOCOL 7 /* integer */ -#define PW_FRAMED_IP_ADDRESS 8 /* ipaddr */ -#define PW_FRAMED_IP_NETMASK 9 /* ipaddr */ -#define PW_FRAMED_ROUTING 10 /* integer */ -#define PW_FILTER_ID 11 /* string */ -#define PW_FRAMED_MTU 12 /* integer */ -#define PW_FRAMED_COMPRESSION 13 /* integer */ -#define PW_LOGIN_IP_HOST 14 /* ipaddr */ -#define PW_LOGIN_SERVICE 15 /* integer */ -#define PW_LOGIN_PORT 16 /* integer */ -#define PW_OLD_PASSWORD 17 /* string */ /* deprecated */ -#define PW_REPLY_MESSAGE 18 /* string */ -#define PW_LOGIN_CALLBACK_NUMBER 19 /* string */ -#define PW_FRAMED_CALLBACK_ID 20 /* string */ -#define PW_EXPIRATION 21 /* date */ /* deprecated */ -#define PW_FRAMED_ROUTE 22 /* string */ -#define PW_FRAMED_IPX_NETWORK 23 /* integer */ -#define PW_STATE 24 /* string */ -#define PW_CLASS 25 /* string */ -#define PW_VENDOR_SPECIFIC 26 /* string */ -#define PW_SESSION_TIMEOUT 27 /* integer */ -#define PW_IDLE_TIMEOUT 28 /* integer */ -#define PW_TERMINATION_ACTION 29 /* integer */ -#define PW_CALLED_STATION_ID 30 /* string */ -#define PW_CALLING_STATION_ID 31 /* string */ -#define PW_NAS_IDENTIFIER 32 /* string */ -#define PW_PROXY_STATE 33 /* string */ -#define PW_LOGIN_LAT_SERVICE 34 /* string */ -#define PW_LOGIN_LAT_NODE 35 /* string */ -#define PW_LOGIN_LAT_GROUP 36 /* string */ -#define PW_FRAMED_APPLETALK_LINK 37 /* integer */ -#define PW_FRAMED_APPLETALK_NETWORK 38 /* integer */ -#define PW_FRAMED_APPLETALK_ZONE 39 /* string */ -#define PW_EVENT_TIMESTAMP 55 /* integer */ -#define PW_CHAP_CHALLENGE 60 /* string */ -#define PW_NAS_PORT_TYPE 61 /* integer */ -#define PW_PORT_LIMIT 62 /* integer */ -#define PW_LOGIN_LAT_PORT 63 /* string */ -#define PW_CONNECT_INFO 77 /* string */ - -/* RFC3162 IPv6 attributes */ - -#define PW_NAS_IPV6_ADDRESS 95 /* string */ -#define PW_FRAMED_INTERFACE_ID 96 /* string */ -#define PW_FRAMED_IPV6_PREFIX 97 /* string */ -#define PW_LOGIN_IPV6_HOST 98 /* string */ -#define PW_FRAMED_IPV6_ROUTE 99 /* string */ -#define PW_FRAMED_IPV6_POOL 100 /* string */ - -/* Accounting */ - -#define PW_ACCT_STATUS_TYPE 40 /* integer */ -#define PW_ACCT_DELAY_TIME 41 /* integer */ -#define PW_ACCT_INPUT_OCTETS 42 /* integer */ -#define PW_ACCT_OUTPUT_OCTETS 43 /* integer */ -#define PW_ACCT_SESSION_ID 44 /* string */ -#define PW_ACCT_AUTHENTIC 45 /* integer */ -#define PW_ACCT_SESSION_TIME 46 /* integer */ -#define PW_ACCT_INPUT_PACKETS 47 /* integer */ -#define PW_ACCT_OUTPUT_PACKETS 48 /* integer */ -#define PW_ACCT_TERMINATE_CAUSE 49 /* integer */ -#define PW_ACCT_MULTI_SESSION_ID 50 /* string */ -#define PW_ACCT_LINK_COUNT 51 /* integer */ - -/* Experimental SIP-specific attributes (draft-sterman-aaa-sip-00.txt etc) */ - -#define PW_DIGEST_RESPONSE 206 /* string */ -#define PW_DIGEST_ATTRIBUTES 207 /* string */ -#define PW_DIGEST_REALM 1063 /* string */ -#define PW_DIGEST_NONCE 1064 /* string */ -#define PW_DIGEST_METHOD 1065 /* string */ -#define PW_DIGEST_URI 1066 /* string */ -#define PW_DIGEST_QOP 1067 /* string */ -#define PW_DIGEST_ALGORITHM 1068 /* string */ -#define PW_DIGEST_BODY_DIGEST 1069 /* string */ -#define PW_DIGEST_CNONCE 1070 /* string */ -#define PW_DIGEST_NONCE_COUNT 1071 /* string */ -#define PW_DIGEST_USER_NAME 1072 /* string */ - -/* Merit Experimental Extensions */ - -#define PW_USER_ID 222 /* string */ -#define PW_USER_REALM 223 /* string */ - -/* Integer Translations */ - -/* SERVICE TYPES */ - -#define PW_LOGIN 1 -#define PW_FRAMED 2 -#define PW_CALLBACK_LOGIN 3 -#define PW_CALLBACK_FRAMED 4 -#define PW_OUTBOUND 5 -#define PW_ADMINISTRATIVE 6 -#define PW_NAS_PROMPT 7 -#define PW_AUTHENTICATE_ONLY 8 -#define PW_CALLBACK_NAS_PROMPT 9 - -/* FRAMED PROTOCOLS */ - -#define PW_PPP 1 -#define PW_SLIP 2 -#define PW_ARA 3 -#define PW_GANDALF 4 -#define PW_XYLOGICS 5 - -/* FRAMED ROUTING VALUES */ - -#define PW_NONE 0 -#define PW_BROADCAST 1 -#define PW_LISTEN 2 -#define PW_BROADCAST_LISTEN 3 - -/* FRAMED COMPRESSION TYPES */ - -#define PW_VAN_JACOBSON_TCP_IP 1 -#define PW_IPX_HEADER_COMPRESSION 2 - -/* LOGIN SERVICES */ - -#define PW_TELNET 0 -#define PW_RLOGIN 1 -#define PW_TCP_CLEAR 2 -#define PW_PORTMASTER 3 -#define PW_LAT 4 -#define PW_X25_PAD 5 -#define PW_X25_T3POS 6 - -/* TERMINATION ACTIONS */ - -#define PW_DEFAULT 0 -#define PW_RADIUS_REQUEST 1 - -/* PROHIBIT PROTOCOL */ - -#define PW_DUMB 0 /* 1 and 2 are defined in FRAMED PROTOCOLS */ -#define PW_AUTH_ONLY 3 -#define PW_ALL 255 - -/* ACCOUNTING STATUS TYPES */ - -#define PW_STATUS_START 1 -#define PW_STATUS_STOP 2 -#define PW_STATUS_ALIVE 3 -#define PW_STATUS_MODEM_START 4 -#define PW_STATUS_MODEM_STOP 5 -#define PW_STATUS_CANCEL 6 -#define PW_ACCOUNTING_ON 7 -#define PW_ACCOUNTING_OFF 8 - -/* ACCOUNTING TERMINATION CAUSES */ - -#define PW_USER_REQUEST 1 -#define PW_LOST_CARRIER 2 -#define PW_LOST_SERVICE 3 -#define PW_ACCT_IDLE_TIMEOUT 4 -#define PW_ACCT_SESSION_TIMEOUT 5 -#define PW_ADMIN_RESET 6 -#define PW_ADMIN_REBOOT 7 -#define PW_PORT_ERROR 8 -#define PW_NAS_ERROR 9 -#define PW_NAS_REQUEST 10 -#define PW_NAS_REBOOT 11 -#define PW_PORT_UNNEEDED 12 -#define PW_PORT_PREEMPTED 13 -#define PW_PORT_SUSPENDED 14 -#define PW_SERVICE_UNAVAILABLE 15 -#define PW_CALLBACK 16 -#define PW_USER_ERROR 17 -#define PW_HOST_REQUEST 18 - -/* NAS PORT TYPES */ - -#define PW_ASYNC 0 -#define PW_SYNC 1 -#define PW_ISDN_SYNC 2 -#define PW_ISDN_SYNC_V120 3 -#define PW_ISDN_SYNC_V110 4 -#define PW_VIRTUAL 5 - -/* AUTHENTIC TYPES */ -#define PW_RADIUS 1 -#define PW_LOCAL 2 -#define PW_REMOTE 3 - -/* Server data structures */ - -typedef struct dict_attr { - char name[NAME_LENGTH + 1]; /* attribute name */ - int value; /* attribute index */ - int type; /* string, int, etc. */ - struct dict_attr *next; -} DICT_ATTR; - -typedef struct dict_value { - char attrname[NAME_LENGTH +1]; - char name[NAME_LENGTH + 1]; - int value; - struct dict_value *next; -} DICT_VALUE; - -typedef struct dict_vendor { - char vendorname[NAME_LENGTH +1]; - int vendorpec; - struct dict_vendor *next; -} DICT_VENDOR; - -typedef struct value_pair { - char name[NAME_LENGTH + 1]; - int attribute; - int type; - uint32_t lvalue; - char strvalue[AUTH_STRING_LEN + 1]; - struct in6_addr in6addrvalue; - struct value_pair *next; -} VALUE_PAIR; - -/* don't change this, as it has to be the same as in the Merit radiusd code */ -#define MGMT_POLL_SECRET "Hardlyasecret" - -/* Define return codes from "SendServer" utility */ - -#define BADRESP_RC -2 -#define ERROR_RC -1 -#define OK_RC 0 -#define TIMEOUT_RC 1 -#define REJECT_RC 2 - -typedef struct send_data { /* Used to pass information to sendserver() function */ - uint8_t code; /* RADIUS packet code */ - uint8_t seq_nbr; /* Packet sequence number */ - char *server; /* Name/addrress of RADIUS server */ - int svc_port; /* RADIUS protocol destination port */ - char *secret; /* Shared secret of RADIUS server */ - int timeout; /* Session timeout in seconds */ - int retries; - VALUE_PAIR *send_pairs; /* More a/v pairs to send */ - VALUE_PAIR *receive_pairs; /* Where to place received a/v pairs */ -} SEND_DATA; - -#ifndef MIN -#define MIN(a, b) ((a) < (b) ? (a) : (b)) -#endif -#ifndef MAX -#define MAX(a, b) ((a) > (b) ? (a) : (b)) -#endif - -#ifndef PATH_MAX -#define PATH_MAX 1024 -#endif - -typedef struct env { - int maxsize, size; - char **env; -} ENV; - -#define ENV_SIZE 128 - -__BEGIN_DECLS - -/* Function prototypes */ - -/* avpair.c */ - -VALUE_PAIR *rc_avpair_add(const rc_handle *, VALUE_PAIR **, int, void *, int, int); -int rc_avpair_assign(VALUE_PAIR *, void *, int); -VALUE_PAIR *rc_avpair_new(const rc_handle *, int, void *, int, int); -VALUE_PAIR *rc_avpair_gen(const rc_handle *, VALUE_PAIR *, unsigned char *, int, int); -VALUE_PAIR *rc_avpair_get(VALUE_PAIR *, int, int); -void rc_avpair_insert(VALUE_PAIR **, VALUE_PAIR *, VALUE_PAIR *); -void rc_avpair_free(VALUE_PAIR *); -int rc_avpair_parse(const rc_handle *, char *, VALUE_PAIR **); -int rc_avpair_tostr(const rc_handle *, VALUE_PAIR *, char *, int, char *, int); -char *rc_avpair_log(rc_handle *, VALUE_PAIR *); -VALUE_PAIR *rc_avpair_readin(const rc_handle *, FILE *); - -/* buildreq.c */ - -void rc_buildreq(rc_handle *, SEND_DATA *, int, char *, unsigned short, char *, int, int); -unsigned char rc_get_seqnbr(rc_handle *); -int rc_auth(rc_handle *, uint32_t, VALUE_PAIR *, VALUE_PAIR **, char *); -int rc_auth_proxy(rc_handle *, VALUE_PAIR *, VALUE_PAIR **, char *); -int rc_acct(rc_handle *, uint32_t, VALUE_PAIR *); -int rc_acct_proxy(rc_handle *, VALUE_PAIR *); -int rc_check(rc_handle *, char *, char *, unsigned short, char *); - -/* clientid.c */ - -int rc_read_mapfile(rc_handle *, char *); -uint32_t rc_map2id(rc_handle *, char *); -void rc_map2id_free(rc_handle *); - -/* config.c */ - -rc_handle *rc_read_config(char *); -char *rc_conf_str(rc_handle *, char *); -int rc_conf_int(rc_handle *, char *); -SERVER *rc_conf_srv(rc_handle *, char *); -int rc_find_server(rc_handle *, char *, struct in6_addr *, char *); -void rc_config_free(rc_handle *); -int rc_add_config(rc_handle *, const char *, const char *, const char *, const int); -rc_handle *rc_config_init(rc_handle *); -int test_config(rc_handle *, char *); - -/* dict.c */ - -int rc_read_dictionary(rc_handle *, const char *); -DICT_ATTR *rc_dict_getattr(const rc_handle *, int); -DICT_ATTR *rc_dict_findattr(const rc_handle *, const char *); -DICT_VALUE *rc_dict_findval(const rc_handle *, const char *); -DICT_VENDOR *rc_dict_findvend(const rc_handle *, const char *); -DICT_VENDOR *rc_dict_getvend(const rc_handle *, int); -DICT_VALUE * rc_dict_getval(const rc_handle *, uint32_t, const char *); -void rc_dict_free(rc_handle *); - -/* ip_util.c */ -#define NIP6ADDR(addr) \ -ntohs((addr)->s6_addr16[0]), \ -ntohs((addr)->s6_addr16[1]), \ -ntohs((addr)->s6_addr16[2]), \ -ntohs((addr)->s6_addr16[3]), \ -ntohs((addr)->s6_addr16[4]), \ -ntohs((addr)->s6_addr16[5]), \ -ntohs((addr)->s6_addr16[6]), \ -ntohs((addr)->s6_addr16[7]) - -struct hostent *rc_gethostbyname(const char *); -int rc_get_ipaddr (char *host, struct in6_addr* rval); -int rc_good_ipaddr(char *); -const char *rc_ip_hostname(struct in6_addr*); -unsigned short rc_getport(int); -int rc_own_hostname(char *, int); -void rc_own_ipaddress(rc_handle *rh, struct in6_addr* rval); -void rc_own_bind_ipaddress(rc_handle *rh, struct in6_addr* rval); -struct sockaddr; -int rc_get_srcaddr(struct sockaddr_in6 *, struct sockaddr_in6 *); - - -/* log.c */ - -void rc_openlog(char *); -void rc_log(int, const char *, ...); - -/* sendserver.c */ - -int rc_send_server(rc_handle *, SEND_DATA *, char *); - -/* util.c */ - -void rc_str2tm(char *, struct tm *); -char *rc_getifname(rc_handle *, char *); -char *rc_getstr(rc_handle *, char *, int); -void rc_mdelay(int); -char *rc_mksid(rc_handle *); -rc_handle *rc_new(void); -void rc_destroy(rc_handle *); -char *rc_fgetln(FILE *, size_t *); -double rc_getctime(void); - -/* env.c */ - -struct env *rc_new_env(int); -void rc_free_env(struct env *); -int rc_add_env(struct env *, char *, char *); -int rc_import_env(struct env *, char **); - -/* md5.c */ - -void rc_md5_calc(unsigned char *, unsigned char *, unsigned int); - -__END_DECLS - -#endif /* FREERADIUS_CLIENT_H */ diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/include/includes.h b/openair3/PMIPv6/freeradius-client-1.1.6/include/includes.h deleted file mode 100644 index bb9753aeb2..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/include/includes.h +++ /dev/null @@ -1,182 +0,0 @@ -/* - * $Id: includes.h,v 1.6 2007/06/21 18:07:22 cparker Exp $ - * - * Copyright (C) 1997 Lars Fenneberg - * - * Copyright 1992 Livingston Enterprises, Inc. - * - * Copyright 1992,1993, 1994,1995 The Regents of the University of Michigan - * and Merit Network, Inc. All Rights Reserved - * - * See the file COPYRIGHT for the respective terms and conditions. - * If the file is missing contact me at lf@elemental.net - * and I'll send you a copy. - * - */ - -#include "config.h" - -/* AIX requires this to be the first thing in the file. */ -#ifndef __GNUC__ -# if HAVE_ALLOCA_H -# include -# else -# ifdef _AIX -# pragma alloca -# else -# ifndef alloca /* predefined by HP cc +Olibcalls */ -char *alloca (); -# endif -# endif -# endif -#endif - -#include - -#include -#include -#include - -#ifdef HAVE_NETDB_H -#include -#endif - -#ifdef HAVE_SYSLOG_H -#include -#endif - -#ifdef STDC_HEADERS -# include -# include -# include -#else -# include -# ifndef HAVE_STRCHR -# define strchr index -# define strrchr rindex -# endif -#endif - -/* I realize that this is ugly and unsafe.. :( */ -#ifndef HAVE_SNPRINTF -# define snprintf(buf, len, format, ...) sprintf(buf, format, __VA_ARGS__) -#endif -#ifndef HAVE_VSNPRINTF -# define vsnprintf(buf, len, format, ap) vsprintf(buf, format, ap) -#endif - -#ifdef HAVE_UNISTD_H -# include -#endif /* HAVE_UNISTD_H */ - -#ifdef HAVE_FCNTL_H -# include -#endif - -#ifdef HAVE_SYS_FCNTL_H -# include -#endif - -#ifdef HAVE_SYS_FILE_H -# include -#endif - -#ifdef HAVE_SYS_STAT_H -# include -#endif - -#ifdef HAVE_SYS_UTSNAME_H -# include -#endif - -#ifdef HAVE_SYS_IOCTL_H -# include -#endif - -#ifdef HAVE_CRYPT_H -# include -#endif - -#ifdef HAVE_LIMITS_H -# include -#endif - -#ifdef HAVE_TERMIOS_H -# include -#endif - -#ifndef PATH_MAX -#define PATH_MAX 1024 -#endif - -#ifndef UCHAR_MAX -# ifdef __STDC__ -# define UCHAR_MAX 255U -# else -# define UCHAR_MAX 255 -# endif -#endif - -#ifdef HAVE_PWD_H -#include -#endif - -#ifdef HAVE_SYS_SOCKET_H -#include -#endif - -#ifdef HAVE_NETINET_IN_H -#include -#endif - -#ifdef HAVE_ARPA_INET_H -#include -#endif - -#if defined(HAVE_SIGNAL_H) -# include -#endif -#if defined(HAVE_SYS_SIGNAL_H) -# include -#endif - -#ifdef NEED_SIG_PROTOTYPES -int sigemptyset(sigset_t *); -int sigaddset(sigset_t *, int); -int sigprocmask (int, sigset_t *, sigset_t *); -#endif - -#if HAVE_GETOPT_H -# include -#endif - -#if defined(HAVE_SHADOW_H) && defined(HAVE_SHADOW_PASSWORDS) -# include -#endif - -#if TIME_WITH_SYS_TIME -# include -# include -#else -# if HAVE_SYS_TIME_H -# include -# else -# include -# endif -#endif - -/* - * prefer srandom/random over srand/rand as there generator has a - * better distribution of the numbers on certain systems. - * on Linux both generators are identical. - */ -#ifndef HAVE_RANDOM -# ifdef HAVE_RAND -# define srandom srand -# define random rand -# endif -#endif - -/* rlib/lock.c */ -int do_lock_exclusive(FILE *); -int do_unlock(FILE *); diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/include/messages.h b/openair3/PMIPv6/freeradius-client-1.1.6/include/messages.h deleted file mode 100644 index 02d8b4e966..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/include/messages.h +++ /dev/null @@ -1,53 +0,0 @@ -/* - * $Id: messages.h,v 1.2 2004/02/23 20:10:39 sobomax Exp $ - * - * Copyright (C) 1995,1996 Lars Fenneberg - * - * Copyright 1992 Livingston Enterprises, Inc. - * - * Copyright 1992,1993, 1994,1995 The Regents of the University of Michigan - * and Merit Network, Inc. All Rights Reserved - * - * See the file COPYRIGHT for the respective terms and conditions. - * If the file is missing contact me at lf@elemental.net - * and I'll send you a copy. - * - */ - -/* - * Only messages that the user gets under normal use are in here. - * Error messages and such are still in the source code. - */ - -#ifndef MESSAGES_H -#define MESSAGES_H - -/* radlogin.c */ - -#define SC_LOGIN "login: " -#define SC_PASSWORD "Password: " - -#define SC_TIMEOUT "\r\nlogin timed out after %d seconds. Bye.\r\n" -#define SC_EXCEEDED "Maximum login tries exceeded. Go away!\r\n" - -#define SC_RADIUS_OK "RADIUS: Authentication OK\r\n" -#define SC_RADIUS_FAILED "RADIUS: Authentication failure\r\n" - -#define SC_LOCAL_OK "local: Authentication OK\r\n" -#define SC_LOCAL_FAILED "local: Authentication failure\r\n" -#define SC_NOLOGIN "\r\nSystem closed for maintenance. Try again later...\r\n" - -#define SC_SERVER_REPLY "RADIUS: %s" - -#define SC_DEFAULT_ISSUE "(\\I)\r\n\r\n\\S \\R (\\N) (port \\L)\r\n\r\n" - -/* radacct.c */ - -#define SC_ACCT_OK "RADIUS accounting OK\r\n" -#define SC_ACCT_FAILED "RADIUS accounting failed (RC=%i)\r\n" - -/* radstatus.c */ - -#define SC_STATUS_FAILED "RADIUS: Status failure\r\n" - -#endif /* MESSAGES_H */ diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/include/pathnames.h b/openair3/PMIPv6/freeradius-client-1.1.6/include/pathnames.h deleted file mode 100644 index b686ad4078..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/include/pathnames.h +++ /dev/null @@ -1,28 +0,0 @@ -/* - * $Id: pathnames.h,v 1.2 2004/02/23 20:10:39 sobomax Exp $ - * - * Copyright (C) 1995,1996 Lars Fenneberg - * - * Copyright 1992 Livingston Enterprises, Inc. - * - * Copyright 1992,1993, 1994,1995 The Regents of the University of Michigan - * and Merit Network, Inc. All Rights Reserved - * - * See the file COPYRIGHT for the respective terms and conditions. - * If the file is missing contact me at lf@elemental.net - * and I'll send you a copy. - * - */ - -#ifndef PATHNAMES_H -#define PATHNAMES_H - -#define _PATH_DEV_URANDOM "/dev/urandom" /* Linux only */ -#define _PATH_ETC_ISSUE "/etc/issue" - -/* normally defined in the Makefile */ -#ifndef _PATH_ETC_RADIUSCLIENT_CONF -#define _PATH_ETC_RADIUSCLIENT_CONF "/etc/radiusclient.conf" -#endif - -#endif /* PATHNAMES_H */ diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/install-sh b/openair3/PMIPv6/freeradius-client-1.1.6/install-sh deleted file mode 100755 index 6781b987bd..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/install-sh +++ /dev/null @@ -1,520 +0,0 @@ -#!/bin/sh -# install - install a program, script, or datafile - -scriptversion=2009-04-28.21; # UTC - -# This originates from X11R5 (mit/util/scripts/install.sh), which was -# later released in X11R6 (xc/config/util/install.sh) with the -# following copyright and license. -# -# Copyright (C) 1994 X Consortium -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to -# deal in the Software without restriction, including without limitation the -# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -# sell copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- -# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -# -# Except as contained in this notice, the name of the X Consortium shall not -# be used in advertising or otherwise to promote the sale, use or other deal- -# ings in this Software without prior written authorization from the X Consor- -# tium. -# -# -# FSF changes to this file are in the public domain. -# -# Calling this script install-sh is preferred over install.sh, to prevent -# `make' implicit rules from creating a file called install from it -# when there is no Makefile. -# -# This script is compatible with the BSD install script, but was written -# from scratch. - -nl=' -' -IFS=" "" $nl" - -# set DOITPROG to echo to test this script - -# Don't use :- since 4.3BSD and earlier shells don't like it. -doit=${DOITPROG-} -if test -z "$doit"; then - doit_exec=exec -else - doit_exec=$doit -fi - -# Put in absolute file names if you don't have them in your path; -# or use environment vars. - -chgrpprog=${CHGRPPROG-chgrp} -chmodprog=${CHMODPROG-chmod} -chownprog=${CHOWNPROG-chown} -cmpprog=${CMPPROG-cmp} -cpprog=${CPPROG-cp} -mkdirprog=${MKDIRPROG-mkdir} -mvprog=${MVPROG-mv} -rmprog=${RMPROG-rm} -stripprog=${STRIPPROG-strip} - -posix_glob='?' -initialize_posix_glob=' - test "$posix_glob" != "?" || { - if (set -f) 2>/dev/null; then - posix_glob= - else - posix_glob=: - fi - } -' - -posix_mkdir= - -# Desired mode of installed file. -mode=0755 - -chgrpcmd= -chmodcmd=$chmodprog -chowncmd= -mvcmd=$mvprog -rmcmd="$rmprog -f" -stripcmd= - -src= -dst= -dir_arg= -dst_arg= - -copy_on_change=false -no_target_directory= - -usage="\ -Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE - or: $0 [OPTION]... SRCFILES... DIRECTORY - or: $0 [OPTION]... -t DIRECTORY SRCFILES... - or: $0 [OPTION]... -d DIRECTORIES... - -In the 1st form, copy SRCFILE to DSTFILE. -In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. -In the 4th, create DIRECTORIES. - -Options: - --help display this help and exit. - --version display version info and exit. - - -c (ignored) - -C install only if different (preserve the last data modification time) - -d create directories instead of installing files. - -g GROUP $chgrpprog installed files to GROUP. - -m MODE $chmodprog installed files to MODE. - -o USER $chownprog installed files to USER. - -s $stripprog installed files. - -t DIRECTORY install into DIRECTORY. - -T report an error if DSTFILE is a directory. - -Environment variables override the default commands: - CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG - RMPROG STRIPPROG -" - -while test $# -ne 0; do - case $1 in - -c) ;; - - -C) copy_on_change=true;; - - -d) dir_arg=true;; - - -g) chgrpcmd="$chgrpprog $2" - shift;; - - --help) echo "$usage"; exit $?;; - - -m) mode=$2 - case $mode in - *' '* | *' '* | *' -'* | *'*'* | *'?'* | *'['*) - echo "$0: invalid mode: $mode" >&2 - exit 1;; - esac - shift;; - - -o) chowncmd="$chownprog $2" - shift;; - - -s) stripcmd=$stripprog;; - - -t) dst_arg=$2 - shift;; - - -T) no_target_directory=true;; - - --version) echo "$0 $scriptversion"; exit $?;; - - --) shift - break;; - - -*) echo "$0: invalid option: $1" >&2 - exit 1;; - - *) break;; - esac - shift -done - -if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then - # When -d is used, all remaining arguments are directories to create. - # When -t is used, the destination is already specified. - # Otherwise, the last argument is the destination. Remove it from $@. - for arg - do - if test -n "$dst_arg"; then - # $@ is not empty: it contains at least $arg. - set fnord "$@" "$dst_arg" - shift # fnord - fi - shift # arg - dst_arg=$arg - done -fi - -if test $# -eq 0; then - if test -z "$dir_arg"; then - echo "$0: no input file specified." >&2 - exit 1 - fi - # It's OK to call `install-sh -d' without argument. - # This can happen when creating conditional directories. - exit 0 -fi - -if test -z "$dir_arg"; then - trap '(exit $?); exit' 1 2 13 15 - - # Set umask so as not to create temps with too-generous modes. - # However, 'strip' requires both read and write access to temps. - case $mode in - # Optimize common cases. - *644) cp_umask=133;; - *755) cp_umask=22;; - - *[0-7]) - if test -z "$stripcmd"; then - u_plus_rw= - else - u_plus_rw='% 200' - fi - cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; - *) - if test -z "$stripcmd"; then - u_plus_rw= - else - u_plus_rw=,u+rw - fi - cp_umask=$mode$u_plus_rw;; - esac -fi - -for src -do - # Protect names starting with `-'. - case $src in - -*) src=./$src;; - esac - - if test -n "$dir_arg"; then - dst=$src - dstdir=$dst - test -d "$dstdir" - dstdir_status=$? - else - - # Waiting for this to be detected by the "$cpprog $src $dsttmp" command - # might cause directories to be created, which would be especially bad - # if $src (and thus $dsttmp) contains '*'. - if test ! -f "$src" && test ! -d "$src"; then - echo "$0: $src does not exist." >&2 - exit 1 - fi - - if test -z "$dst_arg"; then - echo "$0: no destination specified." >&2 - exit 1 - fi - - dst=$dst_arg - # Protect names starting with `-'. - case $dst in - -*) dst=./$dst;; - esac - - # If destination is a directory, append the input filename; won't work - # if double slashes aren't ignored. - if test -d "$dst"; then - if test -n "$no_target_directory"; then - echo "$0: $dst_arg: Is a directory" >&2 - exit 1 - fi - dstdir=$dst - dst=$dstdir/`basename "$src"` - dstdir_status=0 - else - # Prefer dirname, but fall back on a substitute if dirname fails. - dstdir=` - (dirname "$dst") 2>/dev/null || - expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$dst" : 'X\(//\)[^/]' \| \ - X"$dst" : 'X\(//\)$' \| \ - X"$dst" : 'X\(/\)' \| . 2>/dev/null || - echo X"$dst" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q' - ` - - test -d "$dstdir" - dstdir_status=$? - fi - fi - - obsolete_mkdir_used=false - - if test $dstdir_status != 0; then - case $posix_mkdir in - '') - # Create intermediate dirs using mode 755 as modified by the umask. - # This is like FreeBSD 'install' as of 1997-10-28. - umask=`umask` - case $stripcmd.$umask in - # Optimize common cases. - *[2367][2367]) mkdir_umask=$umask;; - .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; - - *[0-7]) - mkdir_umask=`expr $umask + 22 \ - - $umask % 100 % 40 + $umask % 20 \ - - $umask % 10 % 4 + $umask % 2 - `;; - *) mkdir_umask=$umask,go-w;; - esac - - # With -d, create the new directory with the user-specified mode. - # Otherwise, rely on $mkdir_umask. - if test -n "$dir_arg"; then - mkdir_mode=-m$mode - else - mkdir_mode= - fi - - posix_mkdir=false - case $umask in - *[123567][0-7][0-7]) - # POSIX mkdir -p sets u+wx bits regardless of umask, which - # is incompatible with FreeBSD 'install' when (umask & 300) != 0. - ;; - *) - tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ - trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 - - if (umask $mkdir_umask && - exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 - then - if test -z "$dir_arg" || { - # Check for POSIX incompatibilities with -m. - # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or - # other-writeable bit of parent directory when it shouldn't. - # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. - ls_ld_tmpdir=`ls -ld "$tmpdir"` - case $ls_ld_tmpdir in - d????-?r-*) different_mode=700;; - d????-?--*) different_mode=755;; - *) false;; - esac && - $mkdirprog -m$different_mode -p -- "$tmpdir" && { - ls_ld_tmpdir_1=`ls -ld "$tmpdir"` - test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" - } - } - then posix_mkdir=: - fi - rmdir "$tmpdir/d" "$tmpdir" - else - # Remove any dirs left behind by ancient mkdir implementations. - rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null - fi - trap '' 0;; - esac;; - esac - - if - $posix_mkdir && ( - umask $mkdir_umask && - $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" - ) - then : - else - - # The umask is ridiculous, or mkdir does not conform to POSIX, - # or it failed possibly due to a race condition. Create the - # directory the slow way, step by step, checking for races as we go. - - case $dstdir in - /*) prefix='/';; - -*) prefix='./';; - *) prefix='';; - esac - - eval "$initialize_posix_glob" - - oIFS=$IFS - IFS=/ - $posix_glob set -f - set fnord $dstdir - shift - $posix_glob set +f - IFS=$oIFS - - prefixes= - - for d - do - test -z "$d" && continue - - prefix=$prefix$d - if test -d "$prefix"; then - prefixes= - else - if $posix_mkdir; then - (umask=$mkdir_umask && - $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break - # Don't fail if two instances are running concurrently. - test -d "$prefix" || exit 1 - else - case $prefix in - *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; - *) qprefix=$prefix;; - esac - prefixes="$prefixes '$qprefix'" - fi - fi - prefix=$prefix/ - done - - if test -n "$prefixes"; then - # Don't fail if two instances are running concurrently. - (umask $mkdir_umask && - eval "\$doit_exec \$mkdirprog $prefixes") || - test -d "$dstdir" || exit 1 - obsolete_mkdir_used=true - fi - fi - fi - - if test -n "$dir_arg"; then - { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && - { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && - { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || - test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 - else - - # Make a couple of temp file names in the proper directory. - dsttmp=$dstdir/_inst.$$_ - rmtmp=$dstdir/_rm.$$_ - - # Trap to clean up those temp files at exit. - trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 - - # Copy the file name to the temp name. - (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && - - # and set any options; do chmod last to preserve setuid bits. - # - # If any of these fail, we abort the whole thing. If we want to - # ignore errors from any of these, just make sure not to ignore - # errors from the above "$doit $cpprog $src $dsttmp" command. - # - { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && - { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && - { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && - { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && - - # If -C, don't bother to copy if it wouldn't change the file. - if $copy_on_change && - old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && - new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && - - eval "$initialize_posix_glob" && - $posix_glob set -f && - set X $old && old=:$2:$4:$5:$6 && - set X $new && new=:$2:$4:$5:$6 && - $posix_glob set +f && - - test "$old" = "$new" && - $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 - then - rm -f "$dsttmp" - else - # Rename the file to the real destination. - $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || - - # The rename failed, perhaps because mv can't rename something else - # to itself, or perhaps because mv is so ancient that it does not - # support -f. - { - # Now remove or move aside any old file at destination location. - # We try this two ways since rm can't unlink itself on some - # systems and the destination file might be busy for other - # reasons. In this case, the final cleanup might fail but the new - # file should still install successfully. - { - test ! -f "$dst" || - $doit $rmcmd -f "$dst" 2>/dev/null || - { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && - { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } - } || - { echo "$0: cannot unlink or rename $dst" >&2 - (exit 1); exit 1 - } - } && - - # Now rename the file to the real destination. - $doit $mvcmd "$dsttmp" "$dst" - } - fi || exit 1 - - trap '' 0 - fi -done - -# Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "scriptversion=" -# time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-time-zone: "UTC" -# time-stamp-end: "; # UTC" -# End: diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/lib/.deps/avpair.Plo b/openair3/PMIPv6/freeradius-client-1.1.6/lib/.deps/avpair.Plo deleted file mode 100644 index 0fe136d672..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/lib/.deps/avpair.Plo +++ /dev/null @@ -1,259 +0,0 @@ -avpair.lo: avpair.c ../config.h ../include/includes.h \ - /usr/include/sys/types.h /usr/include/features.h \ - /usr/include/bits/predefs.h /usr/include/sys/cdefs.h \ - /usr/include/bits/wordsize.h /usr/include/gnu/stubs.h \ - /usr/include/gnu/stubs-32.h /usr/include/bits/types.h \ - /usr/include/bits/typesizes.h /usr/include/time.h \ - /usr/lib/gcc/i486-linux-gnu/4.4.3/include/stddef.h /usr/include/endian.h \ - /usr/include/bits/endian.h /usr/include/bits/byteswap.h \ - /usr/include/sys/select.h /usr/include/bits/select.h \ - /usr/include/bits/sigset.h /usr/include/bits/time.h \ - /usr/include/sys/sysmacros.h /usr/include/bits/pthreadtypes.h \ - /usr/include/ctype.h /usr/include/xlocale.h /usr/include/stdio.h \ - /usr/include/libio.h /usr/include/_G_config.h /usr/include/wchar.h \ - /usr/lib/gcc/i486-linux-gnu/4.4.3/include/stdarg.h \ - /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h \ - /usr/include/bits/stdio.h /usr/include/bits/stdio2.h \ - /usr/include/errno.h /usr/include/bits/errno.h \ - /usr/include/linux/errno.h /usr/include/asm/errno.h \ - /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ - /usr/include/netdb.h /usr/include/netinet/in.h /usr/include/stdint.h \ - /usr/include/bits/wchar.h /usr/include/sys/socket.h \ - /usr/include/sys/uio.h /usr/include/bits/uio.h \ - /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ - /usr/include/asm/socket.h /usr/include/asm-generic/socket.h \ - /usr/include/asm/sockios.h /usr/include/asm-generic/sockios.h \ - /usr/include/bits/socket2.h /usr/include/bits/in.h \ - /usr/include/rpc/netdb.h /usr/include/bits/netdb.h /usr/include/syslog.h \ - /usr/include/sys/syslog.h /usr/include/bits/syslog-path.h \ - /usr/include/bits/syslog.h /usr/include/stdlib.h /usr/include/alloca.h \ - /usr/include/bits/stdlib.h /usr/include/string.h \ - /usr/include/bits/string.h /usr/include/bits/string2.h \ - /usr/include/bits/string3.h /usr/include/unistd.h \ - /usr/include/bits/posix_opt.h /usr/include/bits/confname.h \ - /usr/include/getopt.h /usr/include/bits/unistd.h /usr/include/fcntl.h \ - /usr/include/bits/fcntl.h /usr/include/bits/fcntl2.h \ - /usr/include/sys/fcntl.h /usr/include/sys/file.h /usr/include/sys/stat.h \ - /usr/include/bits/stat.h /usr/include/sys/utsname.h \ - /usr/include/bits/utsname.h /usr/include/sys/ioctl.h \ - /usr/include/bits/ioctls.h /usr/include/asm/ioctls.h \ - /usr/include/asm-generic/ioctls.h /usr/include/linux/ioctl.h \ - /usr/include/asm/ioctl.h /usr/include/asm-generic/ioctl.h \ - /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ - /usr/include/crypt.h /usr/include/termios.h /usr/include/bits/termios.h \ - /usr/include/pwd.h /usr/include/arpa/inet.h /usr/include/signal.h \ - /usr/include/bits/signum.h /usr/include/bits/siginfo.h \ - /usr/include/bits/sigaction.h /usr/include/bits/sigcontext.h \ - /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ - /usr/include/sys/signal.h /usr/include/sys/time.h \ - ../include/freeradius-client.h - -../config.h: - -../include/includes.h: - -/usr/include/sys/types.h: - -/usr/include/features.h: - -/usr/include/bits/predefs.h: - -/usr/include/sys/cdefs.h: - -/usr/include/bits/wordsize.h: - -/usr/include/gnu/stubs.h: - -/usr/include/gnu/stubs-32.h: - -/usr/include/bits/types.h: - -/usr/include/bits/typesizes.h: - -/usr/include/time.h: - -/usr/lib/gcc/i486-linux-gnu/4.4.3/include/stddef.h: - -/usr/include/endian.h: - -/usr/include/bits/endian.h: - -/usr/include/bits/byteswap.h: - -/usr/include/sys/select.h: - -/usr/include/bits/select.h: - -/usr/include/bits/sigset.h: - -/usr/include/bits/time.h: - -/usr/include/sys/sysmacros.h: - -/usr/include/bits/pthreadtypes.h: - -/usr/include/ctype.h: - -/usr/include/xlocale.h: - -/usr/include/stdio.h: - -/usr/include/libio.h: - -/usr/include/_G_config.h: - -/usr/include/wchar.h: - -/usr/lib/gcc/i486-linux-gnu/4.4.3/include/stdarg.h: - -/usr/include/bits/stdio_lim.h: - -/usr/include/bits/sys_errlist.h: - -/usr/include/bits/stdio.h: - -/usr/include/bits/stdio2.h: - -/usr/include/errno.h: - -/usr/include/bits/errno.h: - -/usr/include/linux/errno.h: - -/usr/include/asm/errno.h: - -/usr/include/asm-generic/errno.h: - -/usr/include/asm-generic/errno-base.h: - -/usr/include/netdb.h: - -/usr/include/netinet/in.h: - -/usr/include/stdint.h: - -/usr/include/bits/wchar.h: - -/usr/include/sys/socket.h: - -/usr/include/sys/uio.h: - -/usr/include/bits/uio.h: - -/usr/include/bits/socket.h: - -/usr/include/bits/sockaddr.h: - -/usr/include/asm/socket.h: - -/usr/include/asm-generic/socket.h: - -/usr/include/asm/sockios.h: - -/usr/include/asm-generic/sockios.h: - -/usr/include/bits/socket2.h: - -/usr/include/bits/in.h: - -/usr/include/rpc/netdb.h: - -/usr/include/bits/netdb.h: - -/usr/include/syslog.h: - -/usr/include/sys/syslog.h: - -/usr/include/bits/syslog-path.h: - -/usr/include/bits/syslog.h: - -/usr/include/stdlib.h: - -/usr/include/alloca.h: - -/usr/include/bits/stdlib.h: - -/usr/include/string.h: - -/usr/include/bits/string.h: - -/usr/include/bits/string2.h: - -/usr/include/bits/string3.h: - -/usr/include/unistd.h: - -/usr/include/bits/posix_opt.h: - -/usr/include/bits/confname.h: - -/usr/include/getopt.h: - -/usr/include/bits/unistd.h: - -/usr/include/fcntl.h: - -/usr/include/bits/fcntl.h: - -/usr/include/bits/fcntl2.h: - -/usr/include/sys/fcntl.h: - -/usr/include/sys/file.h: - -/usr/include/sys/stat.h: - -/usr/include/bits/stat.h: - -/usr/include/sys/utsname.h: - -/usr/include/bits/utsname.h: - -/usr/include/sys/ioctl.h: - -/usr/include/bits/ioctls.h: - -/usr/include/asm/ioctls.h: - -/usr/include/asm-generic/ioctls.h: - -/usr/include/linux/ioctl.h: - -/usr/include/asm/ioctl.h: - -/usr/include/asm-generic/ioctl.h: - -/usr/include/bits/ioctl-types.h: - -/usr/include/sys/ttydefaults.h: - -/usr/include/crypt.h: - -/usr/include/termios.h: - -/usr/include/bits/termios.h: - -/usr/include/pwd.h: - -/usr/include/arpa/inet.h: - -/usr/include/signal.h: - -/usr/include/bits/signum.h: - -/usr/include/bits/siginfo.h: - -/usr/include/bits/sigaction.h: - -/usr/include/bits/sigcontext.h: - -/usr/include/bits/sigstack.h: - -/usr/include/bits/sigthread.h: - -/usr/include/sys/signal.h: - -/usr/include/sys/time.h: - -../include/freeradius-client.h: diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/lib/.deps/buildreq.Plo b/openair3/PMIPv6/freeradius-client-1.1.6/lib/.deps/buildreq.Plo deleted file mode 100644 index 6de5a1475e..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/lib/.deps/buildreq.Plo +++ /dev/null @@ -1,259 +0,0 @@ -buildreq.lo: buildreq.c ../config.h ../include/includes.h \ - /usr/include/sys/types.h /usr/include/features.h \ - /usr/include/bits/predefs.h /usr/include/sys/cdefs.h \ - /usr/include/bits/wordsize.h /usr/include/gnu/stubs.h \ - /usr/include/gnu/stubs-32.h /usr/include/bits/types.h \ - /usr/include/bits/typesizes.h /usr/include/time.h \ - /usr/lib/gcc/i486-linux-gnu/4.4.3/include/stddef.h /usr/include/endian.h \ - /usr/include/bits/endian.h /usr/include/bits/byteswap.h \ - /usr/include/sys/select.h /usr/include/bits/select.h \ - /usr/include/bits/sigset.h /usr/include/bits/time.h \ - /usr/include/sys/sysmacros.h /usr/include/bits/pthreadtypes.h \ - /usr/include/ctype.h /usr/include/xlocale.h /usr/include/stdio.h \ - /usr/include/libio.h /usr/include/_G_config.h /usr/include/wchar.h \ - /usr/lib/gcc/i486-linux-gnu/4.4.3/include/stdarg.h \ - /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h \ - /usr/include/bits/stdio.h /usr/include/bits/stdio2.h \ - /usr/include/errno.h /usr/include/bits/errno.h \ - /usr/include/linux/errno.h /usr/include/asm/errno.h \ - /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ - /usr/include/netdb.h /usr/include/netinet/in.h /usr/include/stdint.h \ - /usr/include/bits/wchar.h /usr/include/sys/socket.h \ - /usr/include/sys/uio.h /usr/include/bits/uio.h \ - /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ - /usr/include/asm/socket.h /usr/include/asm-generic/socket.h \ - /usr/include/asm/sockios.h /usr/include/asm-generic/sockios.h \ - /usr/include/bits/socket2.h /usr/include/bits/in.h \ - /usr/include/rpc/netdb.h /usr/include/bits/netdb.h /usr/include/syslog.h \ - /usr/include/sys/syslog.h /usr/include/bits/syslog-path.h \ - /usr/include/bits/syslog.h /usr/include/stdlib.h /usr/include/alloca.h \ - /usr/include/bits/stdlib.h /usr/include/string.h \ - /usr/include/bits/string.h /usr/include/bits/string2.h \ - /usr/include/bits/string3.h /usr/include/unistd.h \ - /usr/include/bits/posix_opt.h /usr/include/bits/confname.h \ - /usr/include/getopt.h /usr/include/bits/unistd.h /usr/include/fcntl.h \ - /usr/include/bits/fcntl.h /usr/include/bits/fcntl2.h \ - /usr/include/sys/fcntl.h /usr/include/sys/file.h /usr/include/sys/stat.h \ - /usr/include/bits/stat.h /usr/include/sys/utsname.h \ - /usr/include/bits/utsname.h /usr/include/sys/ioctl.h \ - /usr/include/bits/ioctls.h /usr/include/asm/ioctls.h \ - /usr/include/asm-generic/ioctls.h /usr/include/linux/ioctl.h \ - /usr/include/asm/ioctl.h /usr/include/asm-generic/ioctl.h \ - /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ - /usr/include/crypt.h /usr/include/termios.h /usr/include/bits/termios.h \ - /usr/include/pwd.h /usr/include/arpa/inet.h /usr/include/signal.h \ - /usr/include/bits/signum.h /usr/include/bits/siginfo.h \ - /usr/include/bits/sigaction.h /usr/include/bits/sigcontext.h \ - /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ - /usr/include/sys/signal.h /usr/include/sys/time.h \ - ../include/freeradius-client.h - -../config.h: - -../include/includes.h: - -/usr/include/sys/types.h: - -/usr/include/features.h: - -/usr/include/bits/predefs.h: - -/usr/include/sys/cdefs.h: - -/usr/include/bits/wordsize.h: - -/usr/include/gnu/stubs.h: - -/usr/include/gnu/stubs-32.h: - -/usr/include/bits/types.h: - -/usr/include/bits/typesizes.h: - -/usr/include/time.h: - -/usr/lib/gcc/i486-linux-gnu/4.4.3/include/stddef.h: - -/usr/include/endian.h: - -/usr/include/bits/endian.h: - -/usr/include/bits/byteswap.h: - -/usr/include/sys/select.h: - -/usr/include/bits/select.h: - -/usr/include/bits/sigset.h: - -/usr/include/bits/time.h: - -/usr/include/sys/sysmacros.h: - -/usr/include/bits/pthreadtypes.h: - -/usr/include/ctype.h: - -/usr/include/xlocale.h: - -/usr/include/stdio.h: - -/usr/include/libio.h: - -/usr/include/_G_config.h: - -/usr/include/wchar.h: - -/usr/lib/gcc/i486-linux-gnu/4.4.3/include/stdarg.h: - -/usr/include/bits/stdio_lim.h: - -/usr/include/bits/sys_errlist.h: - -/usr/include/bits/stdio.h: - -/usr/include/bits/stdio2.h: - -/usr/include/errno.h: - -/usr/include/bits/errno.h: - -/usr/include/linux/errno.h: - -/usr/include/asm/errno.h: - -/usr/include/asm-generic/errno.h: - -/usr/include/asm-generic/errno-base.h: - -/usr/include/netdb.h: - -/usr/include/netinet/in.h: - -/usr/include/stdint.h: - -/usr/include/bits/wchar.h: - -/usr/include/sys/socket.h: - -/usr/include/sys/uio.h: - -/usr/include/bits/uio.h: - -/usr/include/bits/socket.h: - -/usr/include/bits/sockaddr.h: - -/usr/include/asm/socket.h: - -/usr/include/asm-generic/socket.h: - -/usr/include/asm/sockios.h: - -/usr/include/asm-generic/sockios.h: - -/usr/include/bits/socket2.h: - -/usr/include/bits/in.h: - -/usr/include/rpc/netdb.h: - -/usr/include/bits/netdb.h: - -/usr/include/syslog.h: - -/usr/include/sys/syslog.h: - -/usr/include/bits/syslog-path.h: - -/usr/include/bits/syslog.h: - -/usr/include/stdlib.h: - -/usr/include/alloca.h: - -/usr/include/bits/stdlib.h: - -/usr/include/string.h: - -/usr/include/bits/string.h: - -/usr/include/bits/string2.h: - -/usr/include/bits/string3.h: - -/usr/include/unistd.h: - -/usr/include/bits/posix_opt.h: - -/usr/include/bits/confname.h: - -/usr/include/getopt.h: - -/usr/include/bits/unistd.h: - -/usr/include/fcntl.h: - -/usr/include/bits/fcntl.h: - -/usr/include/bits/fcntl2.h: - -/usr/include/sys/fcntl.h: - -/usr/include/sys/file.h: - -/usr/include/sys/stat.h: - -/usr/include/bits/stat.h: - -/usr/include/sys/utsname.h: - -/usr/include/bits/utsname.h: - -/usr/include/sys/ioctl.h: - -/usr/include/bits/ioctls.h: - -/usr/include/asm/ioctls.h: - -/usr/include/asm-generic/ioctls.h: - -/usr/include/linux/ioctl.h: - -/usr/include/asm/ioctl.h: - -/usr/include/asm-generic/ioctl.h: - -/usr/include/bits/ioctl-types.h: - -/usr/include/sys/ttydefaults.h: - -/usr/include/crypt.h: - -/usr/include/termios.h: - -/usr/include/bits/termios.h: - -/usr/include/pwd.h: - -/usr/include/arpa/inet.h: - -/usr/include/signal.h: - -/usr/include/bits/signum.h: - -/usr/include/bits/siginfo.h: - -/usr/include/bits/sigaction.h: - -/usr/include/bits/sigcontext.h: - -/usr/include/bits/sigstack.h: - -/usr/include/bits/sigthread.h: - -/usr/include/sys/signal.h: - -/usr/include/sys/time.h: - -../include/freeradius-client.h: diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/lib/.deps/clientid.Plo b/openair3/PMIPv6/freeradius-client-1.1.6/lib/.deps/clientid.Plo deleted file mode 100644 index 726a732ac5..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/lib/.deps/clientid.Plo +++ /dev/null @@ -1,259 +0,0 @@ -clientid.lo: clientid.c ../config.h ../include/includes.h \ - /usr/include/sys/types.h /usr/include/features.h \ - /usr/include/bits/predefs.h /usr/include/sys/cdefs.h \ - /usr/include/bits/wordsize.h /usr/include/gnu/stubs.h \ - /usr/include/gnu/stubs-32.h /usr/include/bits/types.h \ - /usr/include/bits/typesizes.h /usr/include/time.h \ - /usr/lib/gcc/i486-linux-gnu/4.4.3/include/stddef.h /usr/include/endian.h \ - /usr/include/bits/endian.h /usr/include/bits/byteswap.h \ - /usr/include/sys/select.h /usr/include/bits/select.h \ - /usr/include/bits/sigset.h /usr/include/bits/time.h \ - /usr/include/sys/sysmacros.h /usr/include/bits/pthreadtypes.h \ - /usr/include/ctype.h /usr/include/xlocale.h /usr/include/stdio.h \ - /usr/include/libio.h /usr/include/_G_config.h /usr/include/wchar.h \ - /usr/lib/gcc/i486-linux-gnu/4.4.3/include/stdarg.h \ - /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h \ - /usr/include/bits/stdio.h /usr/include/bits/stdio2.h \ - /usr/include/errno.h /usr/include/bits/errno.h \ - /usr/include/linux/errno.h /usr/include/asm/errno.h \ - /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ - /usr/include/netdb.h /usr/include/netinet/in.h /usr/include/stdint.h \ - /usr/include/bits/wchar.h /usr/include/sys/socket.h \ - /usr/include/sys/uio.h /usr/include/bits/uio.h \ - /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ - /usr/include/asm/socket.h /usr/include/asm-generic/socket.h \ - /usr/include/asm/sockios.h /usr/include/asm-generic/sockios.h \ - /usr/include/bits/socket2.h /usr/include/bits/in.h \ - /usr/include/rpc/netdb.h /usr/include/bits/netdb.h /usr/include/syslog.h \ - /usr/include/sys/syslog.h /usr/include/bits/syslog-path.h \ - /usr/include/bits/syslog.h /usr/include/stdlib.h /usr/include/alloca.h \ - /usr/include/bits/stdlib.h /usr/include/string.h \ - /usr/include/bits/string.h /usr/include/bits/string2.h \ - /usr/include/bits/string3.h /usr/include/unistd.h \ - /usr/include/bits/posix_opt.h /usr/include/bits/confname.h \ - /usr/include/getopt.h /usr/include/bits/unistd.h /usr/include/fcntl.h \ - /usr/include/bits/fcntl.h /usr/include/bits/fcntl2.h \ - /usr/include/sys/fcntl.h /usr/include/sys/file.h /usr/include/sys/stat.h \ - /usr/include/bits/stat.h /usr/include/sys/utsname.h \ - /usr/include/bits/utsname.h /usr/include/sys/ioctl.h \ - /usr/include/bits/ioctls.h /usr/include/asm/ioctls.h \ - /usr/include/asm-generic/ioctls.h /usr/include/linux/ioctl.h \ - /usr/include/asm/ioctl.h /usr/include/asm-generic/ioctl.h \ - /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ - /usr/include/crypt.h /usr/include/termios.h /usr/include/bits/termios.h \ - /usr/include/pwd.h /usr/include/arpa/inet.h /usr/include/signal.h \ - /usr/include/bits/signum.h /usr/include/bits/siginfo.h \ - /usr/include/bits/sigaction.h /usr/include/bits/sigcontext.h \ - /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ - /usr/include/sys/signal.h /usr/include/sys/time.h \ - ../include/freeradius-client.h - -../config.h: - -../include/includes.h: - -/usr/include/sys/types.h: - -/usr/include/features.h: - -/usr/include/bits/predefs.h: - -/usr/include/sys/cdefs.h: - -/usr/include/bits/wordsize.h: - -/usr/include/gnu/stubs.h: - -/usr/include/gnu/stubs-32.h: - -/usr/include/bits/types.h: - -/usr/include/bits/typesizes.h: - -/usr/include/time.h: - -/usr/lib/gcc/i486-linux-gnu/4.4.3/include/stddef.h: - -/usr/include/endian.h: - -/usr/include/bits/endian.h: - -/usr/include/bits/byteswap.h: - -/usr/include/sys/select.h: - -/usr/include/bits/select.h: - -/usr/include/bits/sigset.h: - -/usr/include/bits/time.h: - -/usr/include/sys/sysmacros.h: - -/usr/include/bits/pthreadtypes.h: - -/usr/include/ctype.h: - -/usr/include/xlocale.h: - -/usr/include/stdio.h: - -/usr/include/libio.h: - -/usr/include/_G_config.h: - -/usr/include/wchar.h: - -/usr/lib/gcc/i486-linux-gnu/4.4.3/include/stdarg.h: - -/usr/include/bits/stdio_lim.h: - -/usr/include/bits/sys_errlist.h: - -/usr/include/bits/stdio.h: - -/usr/include/bits/stdio2.h: - -/usr/include/errno.h: - -/usr/include/bits/errno.h: - -/usr/include/linux/errno.h: - -/usr/include/asm/errno.h: - -/usr/include/asm-generic/errno.h: - -/usr/include/asm-generic/errno-base.h: - -/usr/include/netdb.h: - -/usr/include/netinet/in.h: - -/usr/include/stdint.h: - -/usr/include/bits/wchar.h: - -/usr/include/sys/socket.h: - -/usr/include/sys/uio.h: - -/usr/include/bits/uio.h: - -/usr/include/bits/socket.h: - -/usr/include/bits/sockaddr.h: - -/usr/include/asm/socket.h: - -/usr/include/asm-generic/socket.h: - -/usr/include/asm/sockios.h: - -/usr/include/asm-generic/sockios.h: - -/usr/include/bits/socket2.h: - -/usr/include/bits/in.h: - -/usr/include/rpc/netdb.h: - -/usr/include/bits/netdb.h: - -/usr/include/syslog.h: - -/usr/include/sys/syslog.h: - -/usr/include/bits/syslog-path.h: - -/usr/include/bits/syslog.h: - -/usr/include/stdlib.h: - -/usr/include/alloca.h: - -/usr/include/bits/stdlib.h: - -/usr/include/string.h: - -/usr/include/bits/string.h: - -/usr/include/bits/string2.h: - -/usr/include/bits/string3.h: - -/usr/include/unistd.h: - -/usr/include/bits/posix_opt.h: - -/usr/include/bits/confname.h: - -/usr/include/getopt.h: - -/usr/include/bits/unistd.h: - -/usr/include/fcntl.h: - -/usr/include/bits/fcntl.h: - -/usr/include/bits/fcntl2.h: - -/usr/include/sys/fcntl.h: - -/usr/include/sys/file.h: - -/usr/include/sys/stat.h: - -/usr/include/bits/stat.h: - -/usr/include/sys/utsname.h: - -/usr/include/bits/utsname.h: - -/usr/include/sys/ioctl.h: - -/usr/include/bits/ioctls.h: - -/usr/include/asm/ioctls.h: - -/usr/include/asm-generic/ioctls.h: - -/usr/include/linux/ioctl.h: - -/usr/include/asm/ioctl.h: - -/usr/include/asm-generic/ioctl.h: - -/usr/include/bits/ioctl-types.h: - -/usr/include/sys/ttydefaults.h: - -/usr/include/crypt.h: - -/usr/include/termios.h: - -/usr/include/bits/termios.h: - -/usr/include/pwd.h: - -/usr/include/arpa/inet.h: - -/usr/include/signal.h: - -/usr/include/bits/signum.h: - -/usr/include/bits/siginfo.h: - -/usr/include/bits/sigaction.h: - -/usr/include/bits/sigcontext.h: - -/usr/include/bits/sigstack.h: - -/usr/include/bits/sigthread.h: - -/usr/include/sys/signal.h: - -/usr/include/sys/time.h: - -../include/freeradius-client.h: diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/lib/.deps/config.Plo b/openair3/PMIPv6/freeradius-client-1.1.6/lib/.deps/config.Plo deleted file mode 100644 index f9fa6785f6..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/lib/.deps/config.Plo +++ /dev/null @@ -1,261 +0,0 @@ -config.lo: config.c ../config.h ../include/includes.h \ - /usr/include/sys/types.h /usr/include/features.h \ - /usr/include/bits/predefs.h /usr/include/sys/cdefs.h \ - /usr/include/bits/wordsize.h /usr/include/gnu/stubs.h \ - /usr/include/gnu/stubs-32.h /usr/include/bits/types.h \ - /usr/include/bits/typesizes.h /usr/include/time.h \ - /usr/lib/gcc/i486-linux-gnu/4.4.3/include/stddef.h /usr/include/endian.h \ - /usr/include/bits/endian.h /usr/include/bits/byteswap.h \ - /usr/include/sys/select.h /usr/include/bits/select.h \ - /usr/include/bits/sigset.h /usr/include/bits/time.h \ - /usr/include/sys/sysmacros.h /usr/include/bits/pthreadtypes.h \ - /usr/include/ctype.h /usr/include/xlocale.h /usr/include/stdio.h \ - /usr/include/libio.h /usr/include/_G_config.h /usr/include/wchar.h \ - /usr/lib/gcc/i486-linux-gnu/4.4.3/include/stdarg.h \ - /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h \ - /usr/include/bits/stdio.h /usr/include/bits/stdio2.h \ - /usr/include/errno.h /usr/include/bits/errno.h \ - /usr/include/linux/errno.h /usr/include/asm/errno.h \ - /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ - /usr/include/netdb.h /usr/include/netinet/in.h /usr/include/stdint.h \ - /usr/include/bits/wchar.h /usr/include/sys/socket.h \ - /usr/include/sys/uio.h /usr/include/bits/uio.h \ - /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ - /usr/include/asm/socket.h /usr/include/asm-generic/socket.h \ - /usr/include/asm/sockios.h /usr/include/asm-generic/sockios.h \ - /usr/include/bits/socket2.h /usr/include/bits/in.h \ - /usr/include/rpc/netdb.h /usr/include/bits/netdb.h /usr/include/syslog.h \ - /usr/include/sys/syslog.h /usr/include/bits/syslog-path.h \ - /usr/include/bits/syslog.h /usr/include/stdlib.h /usr/include/alloca.h \ - /usr/include/bits/stdlib.h /usr/include/string.h \ - /usr/include/bits/string.h /usr/include/bits/string2.h \ - /usr/include/bits/string3.h /usr/include/unistd.h \ - /usr/include/bits/posix_opt.h /usr/include/bits/confname.h \ - /usr/include/getopt.h /usr/include/bits/unistd.h /usr/include/fcntl.h \ - /usr/include/bits/fcntl.h /usr/include/bits/fcntl2.h \ - /usr/include/sys/fcntl.h /usr/include/sys/file.h /usr/include/sys/stat.h \ - /usr/include/bits/stat.h /usr/include/sys/utsname.h \ - /usr/include/bits/utsname.h /usr/include/sys/ioctl.h \ - /usr/include/bits/ioctls.h /usr/include/asm/ioctls.h \ - /usr/include/asm-generic/ioctls.h /usr/include/linux/ioctl.h \ - /usr/include/asm/ioctl.h /usr/include/asm-generic/ioctl.h \ - /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ - /usr/include/crypt.h /usr/include/termios.h /usr/include/bits/termios.h \ - /usr/include/pwd.h /usr/include/arpa/inet.h /usr/include/signal.h \ - /usr/include/bits/signum.h /usr/include/bits/siginfo.h \ - /usr/include/bits/sigaction.h /usr/include/bits/sigcontext.h \ - /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ - /usr/include/sys/signal.h /usr/include/sys/time.h \ - ../include/freeradius-client.h options.h - -../config.h: - -../include/includes.h: - -/usr/include/sys/types.h: - -/usr/include/features.h: - -/usr/include/bits/predefs.h: - -/usr/include/sys/cdefs.h: - -/usr/include/bits/wordsize.h: - -/usr/include/gnu/stubs.h: - -/usr/include/gnu/stubs-32.h: - -/usr/include/bits/types.h: - -/usr/include/bits/typesizes.h: - -/usr/include/time.h: - -/usr/lib/gcc/i486-linux-gnu/4.4.3/include/stddef.h: - -/usr/include/endian.h: - -/usr/include/bits/endian.h: - -/usr/include/bits/byteswap.h: - -/usr/include/sys/select.h: - -/usr/include/bits/select.h: - -/usr/include/bits/sigset.h: - -/usr/include/bits/time.h: - -/usr/include/sys/sysmacros.h: - -/usr/include/bits/pthreadtypes.h: - -/usr/include/ctype.h: - -/usr/include/xlocale.h: - -/usr/include/stdio.h: - -/usr/include/libio.h: - -/usr/include/_G_config.h: - -/usr/include/wchar.h: - -/usr/lib/gcc/i486-linux-gnu/4.4.3/include/stdarg.h: - -/usr/include/bits/stdio_lim.h: - -/usr/include/bits/sys_errlist.h: - -/usr/include/bits/stdio.h: - -/usr/include/bits/stdio2.h: - -/usr/include/errno.h: - -/usr/include/bits/errno.h: - -/usr/include/linux/errno.h: - -/usr/include/asm/errno.h: - -/usr/include/asm-generic/errno.h: - -/usr/include/asm-generic/errno-base.h: - -/usr/include/netdb.h: - -/usr/include/netinet/in.h: - -/usr/include/stdint.h: - -/usr/include/bits/wchar.h: - -/usr/include/sys/socket.h: - -/usr/include/sys/uio.h: - -/usr/include/bits/uio.h: - -/usr/include/bits/socket.h: - -/usr/include/bits/sockaddr.h: - -/usr/include/asm/socket.h: - -/usr/include/asm-generic/socket.h: - -/usr/include/asm/sockios.h: - -/usr/include/asm-generic/sockios.h: - -/usr/include/bits/socket2.h: - -/usr/include/bits/in.h: - -/usr/include/rpc/netdb.h: - -/usr/include/bits/netdb.h: - -/usr/include/syslog.h: - -/usr/include/sys/syslog.h: - -/usr/include/bits/syslog-path.h: - -/usr/include/bits/syslog.h: - -/usr/include/stdlib.h: - -/usr/include/alloca.h: - -/usr/include/bits/stdlib.h: - -/usr/include/string.h: - -/usr/include/bits/string.h: - -/usr/include/bits/string2.h: - -/usr/include/bits/string3.h: - -/usr/include/unistd.h: - -/usr/include/bits/posix_opt.h: - -/usr/include/bits/confname.h: - -/usr/include/getopt.h: - -/usr/include/bits/unistd.h: - -/usr/include/fcntl.h: - -/usr/include/bits/fcntl.h: - -/usr/include/bits/fcntl2.h: - -/usr/include/sys/fcntl.h: - -/usr/include/sys/file.h: - -/usr/include/sys/stat.h: - -/usr/include/bits/stat.h: - -/usr/include/sys/utsname.h: - -/usr/include/bits/utsname.h: - -/usr/include/sys/ioctl.h: - -/usr/include/bits/ioctls.h: - -/usr/include/asm/ioctls.h: - -/usr/include/asm-generic/ioctls.h: - -/usr/include/linux/ioctl.h: - -/usr/include/asm/ioctl.h: - -/usr/include/asm-generic/ioctl.h: - -/usr/include/bits/ioctl-types.h: - -/usr/include/sys/ttydefaults.h: - -/usr/include/crypt.h: - -/usr/include/termios.h: - -/usr/include/bits/termios.h: - -/usr/include/pwd.h: - -/usr/include/arpa/inet.h: - -/usr/include/signal.h: - -/usr/include/bits/signum.h: - -/usr/include/bits/siginfo.h: - -/usr/include/bits/sigaction.h: - -/usr/include/bits/sigcontext.h: - -/usr/include/bits/sigstack.h: - -/usr/include/bits/sigthread.h: - -/usr/include/sys/signal.h: - -/usr/include/sys/time.h: - -../include/freeradius-client.h: - -options.h: diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/lib/.deps/dict.Plo b/openair3/PMIPv6/freeradius-client-1.1.6/lib/.deps/dict.Plo deleted file mode 100644 index f8614825ae..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/lib/.deps/dict.Plo +++ /dev/null @@ -1,259 +0,0 @@ -dict.lo: dict.c ../config.h ../include/includes.h \ - /usr/include/sys/types.h /usr/include/features.h \ - /usr/include/bits/predefs.h /usr/include/sys/cdefs.h \ - /usr/include/bits/wordsize.h /usr/include/gnu/stubs.h \ - /usr/include/gnu/stubs-32.h /usr/include/bits/types.h \ - /usr/include/bits/typesizes.h /usr/include/time.h \ - /usr/lib/gcc/i486-linux-gnu/4.4.3/include/stddef.h /usr/include/endian.h \ - /usr/include/bits/endian.h /usr/include/bits/byteswap.h \ - /usr/include/sys/select.h /usr/include/bits/select.h \ - /usr/include/bits/sigset.h /usr/include/bits/time.h \ - /usr/include/sys/sysmacros.h /usr/include/bits/pthreadtypes.h \ - /usr/include/ctype.h /usr/include/xlocale.h /usr/include/stdio.h \ - /usr/include/libio.h /usr/include/_G_config.h /usr/include/wchar.h \ - /usr/lib/gcc/i486-linux-gnu/4.4.3/include/stdarg.h \ - /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h \ - /usr/include/bits/stdio.h /usr/include/bits/stdio2.h \ - /usr/include/errno.h /usr/include/bits/errno.h \ - /usr/include/linux/errno.h /usr/include/asm/errno.h \ - /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ - /usr/include/netdb.h /usr/include/netinet/in.h /usr/include/stdint.h \ - /usr/include/bits/wchar.h /usr/include/sys/socket.h \ - /usr/include/sys/uio.h /usr/include/bits/uio.h \ - /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ - /usr/include/asm/socket.h /usr/include/asm-generic/socket.h \ - /usr/include/asm/sockios.h /usr/include/asm-generic/sockios.h \ - /usr/include/bits/socket2.h /usr/include/bits/in.h \ - /usr/include/rpc/netdb.h /usr/include/bits/netdb.h /usr/include/syslog.h \ - /usr/include/sys/syslog.h /usr/include/bits/syslog-path.h \ - /usr/include/bits/syslog.h /usr/include/stdlib.h /usr/include/alloca.h \ - /usr/include/bits/stdlib.h /usr/include/string.h \ - /usr/include/bits/string.h /usr/include/bits/string2.h \ - /usr/include/bits/string3.h /usr/include/unistd.h \ - /usr/include/bits/posix_opt.h /usr/include/bits/confname.h \ - /usr/include/getopt.h /usr/include/bits/unistd.h /usr/include/fcntl.h \ - /usr/include/bits/fcntl.h /usr/include/bits/fcntl2.h \ - /usr/include/sys/fcntl.h /usr/include/sys/file.h /usr/include/sys/stat.h \ - /usr/include/bits/stat.h /usr/include/sys/utsname.h \ - /usr/include/bits/utsname.h /usr/include/sys/ioctl.h \ - /usr/include/bits/ioctls.h /usr/include/asm/ioctls.h \ - /usr/include/asm-generic/ioctls.h /usr/include/linux/ioctl.h \ - /usr/include/asm/ioctl.h /usr/include/asm-generic/ioctl.h \ - /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ - /usr/include/crypt.h /usr/include/termios.h /usr/include/bits/termios.h \ - /usr/include/pwd.h /usr/include/arpa/inet.h /usr/include/signal.h \ - /usr/include/bits/signum.h /usr/include/bits/siginfo.h \ - /usr/include/bits/sigaction.h /usr/include/bits/sigcontext.h \ - /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ - /usr/include/sys/signal.h /usr/include/sys/time.h \ - ../include/freeradius-client.h - -../config.h: - -../include/includes.h: - -/usr/include/sys/types.h: - -/usr/include/features.h: - -/usr/include/bits/predefs.h: - -/usr/include/sys/cdefs.h: - -/usr/include/bits/wordsize.h: - -/usr/include/gnu/stubs.h: - -/usr/include/gnu/stubs-32.h: - -/usr/include/bits/types.h: - -/usr/include/bits/typesizes.h: - -/usr/include/time.h: - -/usr/lib/gcc/i486-linux-gnu/4.4.3/include/stddef.h: - -/usr/include/endian.h: - -/usr/include/bits/endian.h: - -/usr/include/bits/byteswap.h: - -/usr/include/sys/select.h: - -/usr/include/bits/select.h: - -/usr/include/bits/sigset.h: - -/usr/include/bits/time.h: - -/usr/include/sys/sysmacros.h: - -/usr/include/bits/pthreadtypes.h: - -/usr/include/ctype.h: - -/usr/include/xlocale.h: - -/usr/include/stdio.h: - -/usr/include/libio.h: - -/usr/include/_G_config.h: - -/usr/include/wchar.h: - -/usr/lib/gcc/i486-linux-gnu/4.4.3/include/stdarg.h: - -/usr/include/bits/stdio_lim.h: - -/usr/include/bits/sys_errlist.h: - -/usr/include/bits/stdio.h: - -/usr/include/bits/stdio2.h: - -/usr/include/errno.h: - -/usr/include/bits/errno.h: - -/usr/include/linux/errno.h: - -/usr/include/asm/errno.h: - -/usr/include/asm-generic/errno.h: - -/usr/include/asm-generic/errno-base.h: - -/usr/include/netdb.h: - -/usr/include/netinet/in.h: - -/usr/include/stdint.h: - -/usr/include/bits/wchar.h: - -/usr/include/sys/socket.h: - -/usr/include/sys/uio.h: - -/usr/include/bits/uio.h: - -/usr/include/bits/socket.h: - -/usr/include/bits/sockaddr.h: - -/usr/include/asm/socket.h: - -/usr/include/asm-generic/socket.h: - -/usr/include/asm/sockios.h: - -/usr/include/asm-generic/sockios.h: - -/usr/include/bits/socket2.h: - -/usr/include/bits/in.h: - -/usr/include/rpc/netdb.h: - -/usr/include/bits/netdb.h: - -/usr/include/syslog.h: - -/usr/include/sys/syslog.h: - -/usr/include/bits/syslog-path.h: - -/usr/include/bits/syslog.h: - -/usr/include/stdlib.h: - -/usr/include/alloca.h: - -/usr/include/bits/stdlib.h: - -/usr/include/string.h: - -/usr/include/bits/string.h: - -/usr/include/bits/string2.h: - -/usr/include/bits/string3.h: - -/usr/include/unistd.h: - -/usr/include/bits/posix_opt.h: - -/usr/include/bits/confname.h: - -/usr/include/getopt.h: - -/usr/include/bits/unistd.h: - -/usr/include/fcntl.h: - -/usr/include/bits/fcntl.h: - -/usr/include/bits/fcntl2.h: - -/usr/include/sys/fcntl.h: - -/usr/include/sys/file.h: - -/usr/include/sys/stat.h: - -/usr/include/bits/stat.h: - -/usr/include/sys/utsname.h: - -/usr/include/bits/utsname.h: - -/usr/include/sys/ioctl.h: - -/usr/include/bits/ioctls.h: - -/usr/include/asm/ioctls.h: - -/usr/include/asm-generic/ioctls.h: - -/usr/include/linux/ioctl.h: - -/usr/include/asm/ioctl.h: - -/usr/include/asm-generic/ioctl.h: - -/usr/include/bits/ioctl-types.h: - -/usr/include/sys/ttydefaults.h: - -/usr/include/crypt.h: - -/usr/include/termios.h: - -/usr/include/bits/termios.h: - -/usr/include/pwd.h: - -/usr/include/arpa/inet.h: - -/usr/include/signal.h: - -/usr/include/bits/signum.h: - -/usr/include/bits/siginfo.h: - -/usr/include/bits/sigaction.h: - -/usr/include/bits/sigcontext.h: - -/usr/include/bits/sigstack.h: - -/usr/include/bits/sigthread.h: - -/usr/include/sys/signal.h: - -/usr/include/sys/time.h: - -../include/freeradius-client.h: diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/lib/.deps/env.Plo b/openair3/PMIPv6/freeradius-client-1.1.6/lib/.deps/env.Plo deleted file mode 100644 index 28379c789b..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/lib/.deps/env.Plo +++ /dev/null @@ -1,259 +0,0 @@ -env.lo: env.c ../config.h ../include/includes.h /usr/include/sys/types.h \ - /usr/include/features.h /usr/include/bits/predefs.h \ - /usr/include/sys/cdefs.h /usr/include/bits/wordsize.h \ - /usr/include/gnu/stubs.h /usr/include/gnu/stubs-32.h \ - /usr/include/bits/types.h /usr/include/bits/typesizes.h \ - /usr/include/time.h /usr/lib/gcc/i486-linux-gnu/4.4.3/include/stddef.h \ - /usr/include/endian.h /usr/include/bits/endian.h \ - /usr/include/bits/byteswap.h /usr/include/sys/select.h \ - /usr/include/bits/select.h /usr/include/bits/sigset.h \ - /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ - /usr/include/bits/pthreadtypes.h /usr/include/ctype.h \ - /usr/include/xlocale.h /usr/include/stdio.h /usr/include/libio.h \ - /usr/include/_G_config.h /usr/include/wchar.h \ - /usr/lib/gcc/i486-linux-gnu/4.4.3/include/stdarg.h \ - /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h \ - /usr/include/bits/stdio.h /usr/include/bits/stdio2.h \ - /usr/include/errno.h /usr/include/bits/errno.h \ - /usr/include/linux/errno.h /usr/include/asm/errno.h \ - /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ - /usr/include/netdb.h /usr/include/netinet/in.h /usr/include/stdint.h \ - /usr/include/bits/wchar.h /usr/include/sys/socket.h \ - /usr/include/sys/uio.h /usr/include/bits/uio.h \ - /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ - /usr/include/asm/socket.h /usr/include/asm-generic/socket.h \ - /usr/include/asm/sockios.h /usr/include/asm-generic/sockios.h \ - /usr/include/bits/socket2.h /usr/include/bits/in.h \ - /usr/include/rpc/netdb.h /usr/include/bits/netdb.h /usr/include/syslog.h \ - /usr/include/sys/syslog.h /usr/include/bits/syslog-path.h \ - /usr/include/bits/syslog.h /usr/include/stdlib.h /usr/include/alloca.h \ - /usr/include/bits/stdlib.h /usr/include/string.h \ - /usr/include/bits/string.h /usr/include/bits/string2.h \ - /usr/include/bits/string3.h /usr/include/unistd.h \ - /usr/include/bits/posix_opt.h /usr/include/bits/confname.h \ - /usr/include/getopt.h /usr/include/bits/unistd.h /usr/include/fcntl.h \ - /usr/include/bits/fcntl.h /usr/include/bits/fcntl2.h \ - /usr/include/sys/fcntl.h /usr/include/sys/file.h /usr/include/sys/stat.h \ - /usr/include/bits/stat.h /usr/include/sys/utsname.h \ - /usr/include/bits/utsname.h /usr/include/sys/ioctl.h \ - /usr/include/bits/ioctls.h /usr/include/asm/ioctls.h \ - /usr/include/asm-generic/ioctls.h /usr/include/linux/ioctl.h \ - /usr/include/asm/ioctl.h /usr/include/asm-generic/ioctl.h \ - /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ - /usr/include/crypt.h /usr/include/termios.h /usr/include/bits/termios.h \ - /usr/include/pwd.h /usr/include/arpa/inet.h /usr/include/signal.h \ - /usr/include/bits/signum.h /usr/include/bits/siginfo.h \ - /usr/include/bits/sigaction.h /usr/include/bits/sigcontext.h \ - /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ - /usr/include/sys/signal.h /usr/include/sys/time.h \ - ../include/freeradius-client.h - -../config.h: - -../include/includes.h: - -/usr/include/sys/types.h: - -/usr/include/features.h: - -/usr/include/bits/predefs.h: - -/usr/include/sys/cdefs.h: - -/usr/include/bits/wordsize.h: - -/usr/include/gnu/stubs.h: - -/usr/include/gnu/stubs-32.h: - -/usr/include/bits/types.h: - -/usr/include/bits/typesizes.h: - -/usr/include/time.h: - -/usr/lib/gcc/i486-linux-gnu/4.4.3/include/stddef.h: - -/usr/include/endian.h: - -/usr/include/bits/endian.h: - -/usr/include/bits/byteswap.h: - -/usr/include/sys/select.h: - -/usr/include/bits/select.h: - -/usr/include/bits/sigset.h: - -/usr/include/bits/time.h: - -/usr/include/sys/sysmacros.h: - -/usr/include/bits/pthreadtypes.h: - -/usr/include/ctype.h: - -/usr/include/xlocale.h: - -/usr/include/stdio.h: - -/usr/include/libio.h: - -/usr/include/_G_config.h: - -/usr/include/wchar.h: - -/usr/lib/gcc/i486-linux-gnu/4.4.3/include/stdarg.h: - -/usr/include/bits/stdio_lim.h: - -/usr/include/bits/sys_errlist.h: - -/usr/include/bits/stdio.h: - -/usr/include/bits/stdio2.h: - -/usr/include/errno.h: - -/usr/include/bits/errno.h: - -/usr/include/linux/errno.h: - -/usr/include/asm/errno.h: - -/usr/include/asm-generic/errno.h: - -/usr/include/asm-generic/errno-base.h: - -/usr/include/netdb.h: - -/usr/include/netinet/in.h: - -/usr/include/stdint.h: - -/usr/include/bits/wchar.h: - -/usr/include/sys/socket.h: - -/usr/include/sys/uio.h: - -/usr/include/bits/uio.h: - -/usr/include/bits/socket.h: - -/usr/include/bits/sockaddr.h: - -/usr/include/asm/socket.h: - -/usr/include/asm-generic/socket.h: - -/usr/include/asm/sockios.h: - -/usr/include/asm-generic/sockios.h: - -/usr/include/bits/socket2.h: - -/usr/include/bits/in.h: - -/usr/include/rpc/netdb.h: - -/usr/include/bits/netdb.h: - -/usr/include/syslog.h: - -/usr/include/sys/syslog.h: - -/usr/include/bits/syslog-path.h: - -/usr/include/bits/syslog.h: - -/usr/include/stdlib.h: - -/usr/include/alloca.h: - -/usr/include/bits/stdlib.h: - -/usr/include/string.h: - -/usr/include/bits/string.h: - -/usr/include/bits/string2.h: - -/usr/include/bits/string3.h: - -/usr/include/unistd.h: - -/usr/include/bits/posix_opt.h: - -/usr/include/bits/confname.h: - -/usr/include/getopt.h: - -/usr/include/bits/unistd.h: - -/usr/include/fcntl.h: - -/usr/include/bits/fcntl.h: - -/usr/include/bits/fcntl2.h: - -/usr/include/sys/fcntl.h: - -/usr/include/sys/file.h: - -/usr/include/sys/stat.h: - -/usr/include/bits/stat.h: - -/usr/include/sys/utsname.h: - -/usr/include/bits/utsname.h: - -/usr/include/sys/ioctl.h: - -/usr/include/bits/ioctls.h: - -/usr/include/asm/ioctls.h: - -/usr/include/asm-generic/ioctls.h: - -/usr/include/linux/ioctl.h: - -/usr/include/asm/ioctl.h: - -/usr/include/asm-generic/ioctl.h: - -/usr/include/bits/ioctl-types.h: - -/usr/include/sys/ttydefaults.h: - -/usr/include/crypt.h: - -/usr/include/termios.h: - -/usr/include/bits/termios.h: - -/usr/include/pwd.h: - -/usr/include/arpa/inet.h: - -/usr/include/signal.h: - -/usr/include/bits/signum.h: - -/usr/include/bits/siginfo.h: - -/usr/include/bits/sigaction.h: - -/usr/include/bits/sigcontext.h: - -/usr/include/bits/sigstack.h: - -/usr/include/bits/sigthread.h: - -/usr/include/sys/signal.h: - -/usr/include/sys/time.h: - -../include/freeradius-client.h: diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/lib/.deps/ip_util.Plo b/openair3/PMIPv6/freeradius-client-1.1.6/lib/.deps/ip_util.Plo deleted file mode 100644 index 483e140c41..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/lib/.deps/ip_util.Plo +++ /dev/null @@ -1,259 +0,0 @@ -ip_util.lo: ip_util.c ../config.h ../include/includes.h \ - /usr/include/sys/types.h /usr/include/features.h \ - /usr/include/bits/predefs.h /usr/include/sys/cdefs.h \ - /usr/include/bits/wordsize.h /usr/include/gnu/stubs.h \ - /usr/include/gnu/stubs-32.h /usr/include/bits/types.h \ - /usr/include/bits/typesizes.h /usr/include/time.h \ - /usr/lib/gcc/i486-linux-gnu/4.4.3/include/stddef.h /usr/include/endian.h \ - /usr/include/bits/endian.h /usr/include/bits/byteswap.h \ - /usr/include/sys/select.h /usr/include/bits/select.h \ - /usr/include/bits/sigset.h /usr/include/bits/time.h \ - /usr/include/sys/sysmacros.h /usr/include/bits/pthreadtypes.h \ - /usr/include/ctype.h /usr/include/xlocale.h /usr/include/stdio.h \ - /usr/include/libio.h /usr/include/_G_config.h /usr/include/wchar.h \ - /usr/lib/gcc/i486-linux-gnu/4.4.3/include/stdarg.h \ - /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h \ - /usr/include/bits/stdio.h /usr/include/bits/stdio2.h \ - /usr/include/errno.h /usr/include/bits/errno.h \ - /usr/include/linux/errno.h /usr/include/asm/errno.h \ - /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ - /usr/include/netdb.h /usr/include/netinet/in.h /usr/include/stdint.h \ - /usr/include/bits/wchar.h /usr/include/sys/socket.h \ - /usr/include/sys/uio.h /usr/include/bits/uio.h \ - /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ - /usr/include/asm/socket.h /usr/include/asm-generic/socket.h \ - /usr/include/asm/sockios.h /usr/include/asm-generic/sockios.h \ - /usr/include/bits/socket2.h /usr/include/bits/in.h \ - /usr/include/rpc/netdb.h /usr/include/bits/netdb.h /usr/include/syslog.h \ - /usr/include/sys/syslog.h /usr/include/bits/syslog-path.h \ - /usr/include/bits/syslog.h /usr/include/stdlib.h /usr/include/alloca.h \ - /usr/include/bits/stdlib.h /usr/include/string.h \ - /usr/include/bits/string.h /usr/include/bits/string2.h \ - /usr/include/bits/string3.h /usr/include/unistd.h \ - /usr/include/bits/posix_opt.h /usr/include/bits/confname.h \ - /usr/include/getopt.h /usr/include/bits/unistd.h /usr/include/fcntl.h \ - /usr/include/bits/fcntl.h /usr/include/bits/fcntl2.h \ - /usr/include/sys/fcntl.h /usr/include/sys/file.h /usr/include/sys/stat.h \ - /usr/include/bits/stat.h /usr/include/sys/utsname.h \ - /usr/include/bits/utsname.h /usr/include/sys/ioctl.h \ - /usr/include/bits/ioctls.h /usr/include/asm/ioctls.h \ - /usr/include/asm-generic/ioctls.h /usr/include/linux/ioctl.h \ - /usr/include/asm/ioctl.h /usr/include/asm-generic/ioctl.h \ - /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ - /usr/include/crypt.h /usr/include/termios.h /usr/include/bits/termios.h \ - /usr/include/pwd.h /usr/include/arpa/inet.h /usr/include/signal.h \ - /usr/include/bits/signum.h /usr/include/bits/siginfo.h \ - /usr/include/bits/sigaction.h /usr/include/bits/sigcontext.h \ - /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ - /usr/include/sys/signal.h /usr/include/sys/time.h \ - ../include/freeradius-client.h - -../config.h: - -../include/includes.h: - -/usr/include/sys/types.h: - -/usr/include/features.h: - -/usr/include/bits/predefs.h: - -/usr/include/sys/cdefs.h: - -/usr/include/bits/wordsize.h: - -/usr/include/gnu/stubs.h: - -/usr/include/gnu/stubs-32.h: - -/usr/include/bits/types.h: - -/usr/include/bits/typesizes.h: - -/usr/include/time.h: - -/usr/lib/gcc/i486-linux-gnu/4.4.3/include/stddef.h: - -/usr/include/endian.h: - -/usr/include/bits/endian.h: - -/usr/include/bits/byteswap.h: - -/usr/include/sys/select.h: - -/usr/include/bits/select.h: - -/usr/include/bits/sigset.h: - -/usr/include/bits/time.h: - -/usr/include/sys/sysmacros.h: - -/usr/include/bits/pthreadtypes.h: - -/usr/include/ctype.h: - -/usr/include/xlocale.h: - -/usr/include/stdio.h: - -/usr/include/libio.h: - -/usr/include/_G_config.h: - -/usr/include/wchar.h: - -/usr/lib/gcc/i486-linux-gnu/4.4.3/include/stdarg.h: - -/usr/include/bits/stdio_lim.h: - -/usr/include/bits/sys_errlist.h: - -/usr/include/bits/stdio.h: - -/usr/include/bits/stdio2.h: - -/usr/include/errno.h: - -/usr/include/bits/errno.h: - -/usr/include/linux/errno.h: - -/usr/include/asm/errno.h: - -/usr/include/asm-generic/errno.h: - -/usr/include/asm-generic/errno-base.h: - -/usr/include/netdb.h: - -/usr/include/netinet/in.h: - -/usr/include/stdint.h: - -/usr/include/bits/wchar.h: - -/usr/include/sys/socket.h: - -/usr/include/sys/uio.h: - -/usr/include/bits/uio.h: - -/usr/include/bits/socket.h: - -/usr/include/bits/sockaddr.h: - -/usr/include/asm/socket.h: - -/usr/include/asm-generic/socket.h: - -/usr/include/asm/sockios.h: - -/usr/include/asm-generic/sockios.h: - -/usr/include/bits/socket2.h: - -/usr/include/bits/in.h: - -/usr/include/rpc/netdb.h: - -/usr/include/bits/netdb.h: - -/usr/include/syslog.h: - -/usr/include/sys/syslog.h: - -/usr/include/bits/syslog-path.h: - -/usr/include/bits/syslog.h: - -/usr/include/stdlib.h: - -/usr/include/alloca.h: - -/usr/include/bits/stdlib.h: - -/usr/include/string.h: - -/usr/include/bits/string.h: - -/usr/include/bits/string2.h: - -/usr/include/bits/string3.h: - -/usr/include/unistd.h: - -/usr/include/bits/posix_opt.h: - -/usr/include/bits/confname.h: - -/usr/include/getopt.h: - -/usr/include/bits/unistd.h: - -/usr/include/fcntl.h: - -/usr/include/bits/fcntl.h: - -/usr/include/bits/fcntl2.h: - -/usr/include/sys/fcntl.h: - -/usr/include/sys/file.h: - -/usr/include/sys/stat.h: - -/usr/include/bits/stat.h: - -/usr/include/sys/utsname.h: - -/usr/include/bits/utsname.h: - -/usr/include/sys/ioctl.h: - -/usr/include/bits/ioctls.h: - -/usr/include/asm/ioctls.h: - -/usr/include/asm-generic/ioctls.h: - -/usr/include/linux/ioctl.h: - -/usr/include/asm/ioctl.h: - -/usr/include/asm-generic/ioctl.h: - -/usr/include/bits/ioctl-types.h: - -/usr/include/sys/ttydefaults.h: - -/usr/include/crypt.h: - -/usr/include/termios.h: - -/usr/include/bits/termios.h: - -/usr/include/pwd.h: - -/usr/include/arpa/inet.h: - -/usr/include/signal.h: - -/usr/include/bits/signum.h: - -/usr/include/bits/siginfo.h: - -/usr/include/bits/sigaction.h: - -/usr/include/bits/sigcontext.h: - -/usr/include/bits/sigstack.h: - -/usr/include/bits/sigthread.h: - -/usr/include/sys/signal.h: - -/usr/include/sys/time.h: - -../include/freeradius-client.h: diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/lib/.deps/lock.Plo b/openair3/PMIPv6/freeradius-client-1.1.6/lib/.deps/lock.Plo deleted file mode 100644 index 2eb74b3d10..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/lib/.deps/lock.Plo +++ /dev/null @@ -1,256 +0,0 @@ -lock.lo: lock.c ../config.h ../include/includes.h \ - /usr/include/sys/types.h /usr/include/features.h \ - /usr/include/bits/predefs.h /usr/include/sys/cdefs.h \ - /usr/include/bits/wordsize.h /usr/include/gnu/stubs.h \ - /usr/include/gnu/stubs-32.h /usr/include/bits/types.h \ - /usr/include/bits/typesizes.h /usr/include/time.h \ - /usr/lib/gcc/i486-linux-gnu/4.4.3/include/stddef.h /usr/include/endian.h \ - /usr/include/bits/endian.h /usr/include/bits/byteswap.h \ - /usr/include/sys/select.h /usr/include/bits/select.h \ - /usr/include/bits/sigset.h /usr/include/bits/time.h \ - /usr/include/sys/sysmacros.h /usr/include/bits/pthreadtypes.h \ - /usr/include/ctype.h /usr/include/xlocale.h /usr/include/stdio.h \ - /usr/include/libio.h /usr/include/_G_config.h /usr/include/wchar.h \ - /usr/lib/gcc/i486-linux-gnu/4.4.3/include/stdarg.h \ - /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h \ - /usr/include/bits/stdio.h /usr/include/bits/stdio2.h \ - /usr/include/errno.h /usr/include/bits/errno.h \ - /usr/include/linux/errno.h /usr/include/asm/errno.h \ - /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ - /usr/include/netdb.h /usr/include/netinet/in.h /usr/include/stdint.h \ - /usr/include/bits/wchar.h /usr/include/sys/socket.h \ - /usr/include/sys/uio.h /usr/include/bits/uio.h \ - /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ - /usr/include/asm/socket.h /usr/include/asm-generic/socket.h \ - /usr/include/asm/sockios.h /usr/include/asm-generic/sockios.h \ - /usr/include/bits/socket2.h /usr/include/bits/in.h \ - /usr/include/rpc/netdb.h /usr/include/bits/netdb.h /usr/include/syslog.h \ - /usr/include/sys/syslog.h /usr/include/bits/syslog-path.h \ - /usr/include/bits/syslog.h /usr/include/stdlib.h /usr/include/alloca.h \ - /usr/include/bits/stdlib.h /usr/include/string.h \ - /usr/include/bits/string.h /usr/include/bits/string2.h \ - /usr/include/bits/string3.h /usr/include/unistd.h \ - /usr/include/bits/posix_opt.h /usr/include/bits/confname.h \ - /usr/include/getopt.h /usr/include/bits/unistd.h /usr/include/fcntl.h \ - /usr/include/bits/fcntl.h /usr/include/bits/fcntl2.h \ - /usr/include/sys/fcntl.h /usr/include/sys/file.h /usr/include/sys/stat.h \ - /usr/include/bits/stat.h /usr/include/sys/utsname.h \ - /usr/include/bits/utsname.h /usr/include/sys/ioctl.h \ - /usr/include/bits/ioctls.h /usr/include/asm/ioctls.h \ - /usr/include/asm-generic/ioctls.h /usr/include/linux/ioctl.h \ - /usr/include/asm/ioctl.h /usr/include/asm-generic/ioctl.h \ - /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ - /usr/include/crypt.h /usr/include/termios.h /usr/include/bits/termios.h \ - /usr/include/pwd.h /usr/include/arpa/inet.h /usr/include/signal.h \ - /usr/include/bits/signum.h /usr/include/bits/siginfo.h \ - /usr/include/bits/sigaction.h /usr/include/bits/sigcontext.h \ - /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ - /usr/include/sys/signal.h /usr/include/sys/time.h - -../config.h: - -../include/includes.h: - -/usr/include/sys/types.h: - -/usr/include/features.h: - -/usr/include/bits/predefs.h: - -/usr/include/sys/cdefs.h: - -/usr/include/bits/wordsize.h: - -/usr/include/gnu/stubs.h: - -/usr/include/gnu/stubs-32.h: - -/usr/include/bits/types.h: - -/usr/include/bits/typesizes.h: - -/usr/include/time.h: - -/usr/lib/gcc/i486-linux-gnu/4.4.3/include/stddef.h: - -/usr/include/endian.h: - -/usr/include/bits/endian.h: - -/usr/include/bits/byteswap.h: - -/usr/include/sys/select.h: - -/usr/include/bits/select.h: - -/usr/include/bits/sigset.h: - -/usr/include/bits/time.h: - -/usr/include/sys/sysmacros.h: - -/usr/include/bits/pthreadtypes.h: - -/usr/include/ctype.h: - -/usr/include/xlocale.h: - -/usr/include/stdio.h: - -/usr/include/libio.h: - -/usr/include/_G_config.h: - -/usr/include/wchar.h: - -/usr/lib/gcc/i486-linux-gnu/4.4.3/include/stdarg.h: - -/usr/include/bits/stdio_lim.h: - -/usr/include/bits/sys_errlist.h: - -/usr/include/bits/stdio.h: - -/usr/include/bits/stdio2.h: - -/usr/include/errno.h: - -/usr/include/bits/errno.h: - -/usr/include/linux/errno.h: - -/usr/include/asm/errno.h: - -/usr/include/asm-generic/errno.h: - -/usr/include/asm-generic/errno-base.h: - -/usr/include/netdb.h: - -/usr/include/netinet/in.h: - -/usr/include/stdint.h: - -/usr/include/bits/wchar.h: - -/usr/include/sys/socket.h: - -/usr/include/sys/uio.h: - -/usr/include/bits/uio.h: - -/usr/include/bits/socket.h: - -/usr/include/bits/sockaddr.h: - -/usr/include/asm/socket.h: - -/usr/include/asm-generic/socket.h: - -/usr/include/asm/sockios.h: - -/usr/include/asm-generic/sockios.h: - -/usr/include/bits/socket2.h: - -/usr/include/bits/in.h: - -/usr/include/rpc/netdb.h: - -/usr/include/bits/netdb.h: - -/usr/include/syslog.h: - -/usr/include/sys/syslog.h: - -/usr/include/bits/syslog-path.h: - -/usr/include/bits/syslog.h: - -/usr/include/stdlib.h: - -/usr/include/alloca.h: - -/usr/include/bits/stdlib.h: - -/usr/include/string.h: - -/usr/include/bits/string.h: - -/usr/include/bits/string2.h: - -/usr/include/bits/string3.h: - -/usr/include/unistd.h: - -/usr/include/bits/posix_opt.h: - -/usr/include/bits/confname.h: - -/usr/include/getopt.h: - -/usr/include/bits/unistd.h: - -/usr/include/fcntl.h: - -/usr/include/bits/fcntl.h: - -/usr/include/bits/fcntl2.h: - -/usr/include/sys/fcntl.h: - -/usr/include/sys/file.h: - -/usr/include/sys/stat.h: - -/usr/include/bits/stat.h: - -/usr/include/sys/utsname.h: - -/usr/include/bits/utsname.h: - -/usr/include/sys/ioctl.h: - -/usr/include/bits/ioctls.h: - -/usr/include/asm/ioctls.h: - -/usr/include/asm-generic/ioctls.h: - -/usr/include/linux/ioctl.h: - -/usr/include/asm/ioctl.h: - -/usr/include/asm-generic/ioctl.h: - -/usr/include/bits/ioctl-types.h: - -/usr/include/sys/ttydefaults.h: - -/usr/include/crypt.h: - -/usr/include/termios.h: - -/usr/include/bits/termios.h: - -/usr/include/pwd.h: - -/usr/include/arpa/inet.h: - -/usr/include/signal.h: - -/usr/include/bits/signum.h: - -/usr/include/bits/siginfo.h: - -/usr/include/bits/sigaction.h: - -/usr/include/bits/sigcontext.h: - -/usr/include/bits/sigstack.h: - -/usr/include/bits/sigthread.h: - -/usr/include/sys/signal.h: - -/usr/include/sys/time.h: diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/lib/.deps/log.Plo b/openair3/PMIPv6/freeradius-client-1.1.6/lib/.deps/log.Plo deleted file mode 100644 index d3cafda834..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/lib/.deps/log.Plo +++ /dev/null @@ -1,259 +0,0 @@ -log.lo: log.c ../config.h ../include/includes.h /usr/include/sys/types.h \ - /usr/include/features.h /usr/include/bits/predefs.h \ - /usr/include/sys/cdefs.h /usr/include/bits/wordsize.h \ - /usr/include/gnu/stubs.h /usr/include/gnu/stubs-32.h \ - /usr/include/bits/types.h /usr/include/bits/typesizes.h \ - /usr/include/time.h /usr/lib/gcc/i486-linux-gnu/4.4.3/include/stddef.h \ - /usr/include/endian.h /usr/include/bits/endian.h \ - /usr/include/bits/byteswap.h /usr/include/sys/select.h \ - /usr/include/bits/select.h /usr/include/bits/sigset.h \ - /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ - /usr/include/bits/pthreadtypes.h /usr/include/ctype.h \ - /usr/include/xlocale.h /usr/include/stdio.h /usr/include/libio.h \ - /usr/include/_G_config.h /usr/include/wchar.h \ - /usr/lib/gcc/i486-linux-gnu/4.4.3/include/stdarg.h \ - /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h \ - /usr/include/bits/stdio.h /usr/include/bits/stdio2.h \ - /usr/include/errno.h /usr/include/bits/errno.h \ - /usr/include/linux/errno.h /usr/include/asm/errno.h \ - /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ - /usr/include/netdb.h /usr/include/netinet/in.h /usr/include/stdint.h \ - /usr/include/bits/wchar.h /usr/include/sys/socket.h \ - /usr/include/sys/uio.h /usr/include/bits/uio.h \ - /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ - /usr/include/asm/socket.h /usr/include/asm-generic/socket.h \ - /usr/include/asm/sockios.h /usr/include/asm-generic/sockios.h \ - /usr/include/bits/socket2.h /usr/include/bits/in.h \ - /usr/include/rpc/netdb.h /usr/include/bits/netdb.h /usr/include/syslog.h \ - /usr/include/sys/syslog.h /usr/include/bits/syslog-path.h \ - /usr/include/bits/syslog.h /usr/include/stdlib.h /usr/include/alloca.h \ - /usr/include/bits/stdlib.h /usr/include/string.h \ - /usr/include/bits/string.h /usr/include/bits/string2.h \ - /usr/include/bits/string3.h /usr/include/unistd.h \ - /usr/include/bits/posix_opt.h /usr/include/bits/confname.h \ - /usr/include/getopt.h /usr/include/bits/unistd.h /usr/include/fcntl.h \ - /usr/include/bits/fcntl.h /usr/include/bits/fcntl2.h \ - /usr/include/sys/fcntl.h /usr/include/sys/file.h /usr/include/sys/stat.h \ - /usr/include/bits/stat.h /usr/include/sys/utsname.h \ - /usr/include/bits/utsname.h /usr/include/sys/ioctl.h \ - /usr/include/bits/ioctls.h /usr/include/asm/ioctls.h \ - /usr/include/asm-generic/ioctls.h /usr/include/linux/ioctl.h \ - /usr/include/asm/ioctl.h /usr/include/asm-generic/ioctl.h \ - /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ - /usr/include/crypt.h /usr/include/termios.h /usr/include/bits/termios.h \ - /usr/include/pwd.h /usr/include/arpa/inet.h /usr/include/signal.h \ - /usr/include/bits/signum.h /usr/include/bits/siginfo.h \ - /usr/include/bits/sigaction.h /usr/include/bits/sigcontext.h \ - /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ - /usr/include/sys/signal.h /usr/include/sys/time.h \ - ../include/freeradius-client.h - -../config.h: - -../include/includes.h: - -/usr/include/sys/types.h: - -/usr/include/features.h: - -/usr/include/bits/predefs.h: - -/usr/include/sys/cdefs.h: - -/usr/include/bits/wordsize.h: - -/usr/include/gnu/stubs.h: - -/usr/include/gnu/stubs-32.h: - -/usr/include/bits/types.h: - -/usr/include/bits/typesizes.h: - -/usr/include/time.h: - -/usr/lib/gcc/i486-linux-gnu/4.4.3/include/stddef.h: - -/usr/include/endian.h: - -/usr/include/bits/endian.h: - -/usr/include/bits/byteswap.h: - -/usr/include/sys/select.h: - -/usr/include/bits/select.h: - -/usr/include/bits/sigset.h: - -/usr/include/bits/time.h: - -/usr/include/sys/sysmacros.h: - -/usr/include/bits/pthreadtypes.h: - -/usr/include/ctype.h: - -/usr/include/xlocale.h: - -/usr/include/stdio.h: - -/usr/include/libio.h: - -/usr/include/_G_config.h: - -/usr/include/wchar.h: - -/usr/lib/gcc/i486-linux-gnu/4.4.3/include/stdarg.h: - -/usr/include/bits/stdio_lim.h: - -/usr/include/bits/sys_errlist.h: - -/usr/include/bits/stdio.h: - -/usr/include/bits/stdio2.h: - -/usr/include/errno.h: - -/usr/include/bits/errno.h: - -/usr/include/linux/errno.h: - -/usr/include/asm/errno.h: - -/usr/include/asm-generic/errno.h: - -/usr/include/asm-generic/errno-base.h: - -/usr/include/netdb.h: - -/usr/include/netinet/in.h: - -/usr/include/stdint.h: - -/usr/include/bits/wchar.h: - -/usr/include/sys/socket.h: - -/usr/include/sys/uio.h: - -/usr/include/bits/uio.h: - -/usr/include/bits/socket.h: - -/usr/include/bits/sockaddr.h: - -/usr/include/asm/socket.h: - -/usr/include/asm-generic/socket.h: - -/usr/include/asm/sockios.h: - -/usr/include/asm-generic/sockios.h: - -/usr/include/bits/socket2.h: - -/usr/include/bits/in.h: - -/usr/include/rpc/netdb.h: - -/usr/include/bits/netdb.h: - -/usr/include/syslog.h: - -/usr/include/sys/syslog.h: - -/usr/include/bits/syslog-path.h: - -/usr/include/bits/syslog.h: - -/usr/include/stdlib.h: - -/usr/include/alloca.h: - -/usr/include/bits/stdlib.h: - -/usr/include/string.h: - -/usr/include/bits/string.h: - -/usr/include/bits/string2.h: - -/usr/include/bits/string3.h: - -/usr/include/unistd.h: - -/usr/include/bits/posix_opt.h: - -/usr/include/bits/confname.h: - -/usr/include/getopt.h: - -/usr/include/bits/unistd.h: - -/usr/include/fcntl.h: - -/usr/include/bits/fcntl.h: - -/usr/include/bits/fcntl2.h: - -/usr/include/sys/fcntl.h: - -/usr/include/sys/file.h: - -/usr/include/sys/stat.h: - -/usr/include/bits/stat.h: - -/usr/include/sys/utsname.h: - -/usr/include/bits/utsname.h: - -/usr/include/sys/ioctl.h: - -/usr/include/bits/ioctls.h: - -/usr/include/asm/ioctls.h: - -/usr/include/asm-generic/ioctls.h: - -/usr/include/linux/ioctl.h: - -/usr/include/asm/ioctl.h: - -/usr/include/asm-generic/ioctl.h: - -/usr/include/bits/ioctl-types.h: - -/usr/include/sys/ttydefaults.h: - -/usr/include/crypt.h: - -/usr/include/termios.h: - -/usr/include/bits/termios.h: - -/usr/include/pwd.h: - -/usr/include/arpa/inet.h: - -/usr/include/signal.h: - -/usr/include/bits/signum.h: - -/usr/include/bits/siginfo.h: - -/usr/include/bits/sigaction.h: - -/usr/include/bits/sigcontext.h: - -/usr/include/bits/sigstack.h: - -/usr/include/bits/sigthread.h: - -/usr/include/sys/signal.h: - -/usr/include/sys/time.h: - -../include/freeradius-client.h: diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/lib/.deps/md5.Plo b/openair3/PMIPv6/freeradius-client-1.1.6/lib/.deps/md5.Plo deleted file mode 100644 index e017ec271f..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/lib/.deps/md5.Plo +++ /dev/null @@ -1,77 +0,0 @@ -md5.lo: md5.c md5.h ../config.h /usr/include/inttypes.h \ - /usr/include/features.h /usr/include/bits/predefs.h \ - /usr/include/sys/cdefs.h /usr/include/bits/wordsize.h \ - /usr/include/gnu/stubs.h /usr/include/gnu/stubs-32.h \ - /usr/include/stdint.h /usr/include/bits/wchar.h /usr/include/sys/types.h \ - /usr/include/bits/types.h /usr/include/bits/typesizes.h \ - /usr/include/time.h /usr/lib/gcc/i486-linux-gnu/4.4.3/include/stddef.h \ - /usr/include/endian.h /usr/include/bits/endian.h \ - /usr/include/bits/byteswap.h /usr/include/sys/select.h \ - /usr/include/bits/select.h /usr/include/bits/sigset.h \ - /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ - /usr/include/bits/pthreadtypes.h /usr/include/string.h \ - /usr/include/xlocale.h /usr/include/bits/string.h \ - /usr/include/bits/string2.h /usr/include/stdlib.h \ - /usr/include/bits/string3.h - -md5.h: - -../config.h: - -/usr/include/inttypes.h: - -/usr/include/features.h: - -/usr/include/bits/predefs.h: - -/usr/include/sys/cdefs.h: - -/usr/include/bits/wordsize.h: - -/usr/include/gnu/stubs.h: - -/usr/include/gnu/stubs-32.h: - -/usr/include/stdint.h: - -/usr/include/bits/wchar.h: - -/usr/include/sys/types.h: - -/usr/include/bits/types.h: - -/usr/include/bits/typesizes.h: - -/usr/include/time.h: - -/usr/lib/gcc/i486-linux-gnu/4.4.3/include/stddef.h: - -/usr/include/endian.h: - -/usr/include/bits/endian.h: - -/usr/include/bits/byteswap.h: - -/usr/include/sys/select.h: - -/usr/include/bits/select.h: - -/usr/include/bits/sigset.h: - -/usr/include/bits/time.h: - -/usr/include/sys/sysmacros.h: - -/usr/include/bits/pthreadtypes.h: - -/usr/include/string.h: - -/usr/include/xlocale.h: - -/usr/include/bits/string.h: - -/usr/include/bits/string2.h: - -/usr/include/stdlib.h: - -/usr/include/bits/string3.h: diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/lib/.deps/sendserver.Plo b/openair3/PMIPv6/freeradius-client-1.1.6/lib/.deps/sendserver.Plo deleted file mode 100644 index 4f73da54b6..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/lib/.deps/sendserver.Plo +++ /dev/null @@ -1,261 +0,0 @@ -sendserver.lo: sendserver.c ../config.h ../include/includes.h \ - /usr/include/sys/types.h /usr/include/features.h \ - /usr/include/bits/predefs.h /usr/include/sys/cdefs.h \ - /usr/include/bits/wordsize.h /usr/include/gnu/stubs.h \ - /usr/include/gnu/stubs-32.h /usr/include/bits/types.h \ - /usr/include/bits/typesizes.h /usr/include/time.h \ - /usr/lib/gcc/i486-linux-gnu/4.4.3/include/stddef.h /usr/include/endian.h \ - /usr/include/bits/endian.h /usr/include/bits/byteswap.h \ - /usr/include/sys/select.h /usr/include/bits/select.h \ - /usr/include/bits/sigset.h /usr/include/bits/time.h \ - /usr/include/sys/sysmacros.h /usr/include/bits/pthreadtypes.h \ - /usr/include/ctype.h /usr/include/xlocale.h /usr/include/stdio.h \ - /usr/include/libio.h /usr/include/_G_config.h /usr/include/wchar.h \ - /usr/lib/gcc/i486-linux-gnu/4.4.3/include/stdarg.h \ - /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h \ - /usr/include/bits/stdio.h /usr/include/bits/stdio2.h \ - /usr/include/errno.h /usr/include/bits/errno.h \ - /usr/include/linux/errno.h /usr/include/asm/errno.h \ - /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ - /usr/include/netdb.h /usr/include/netinet/in.h /usr/include/stdint.h \ - /usr/include/bits/wchar.h /usr/include/sys/socket.h \ - /usr/include/sys/uio.h /usr/include/bits/uio.h \ - /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ - /usr/include/asm/socket.h /usr/include/asm-generic/socket.h \ - /usr/include/asm/sockios.h /usr/include/asm-generic/sockios.h \ - /usr/include/bits/socket2.h /usr/include/bits/in.h \ - /usr/include/rpc/netdb.h /usr/include/bits/netdb.h /usr/include/syslog.h \ - /usr/include/sys/syslog.h /usr/include/bits/syslog-path.h \ - /usr/include/bits/syslog.h /usr/include/stdlib.h /usr/include/alloca.h \ - /usr/include/bits/stdlib.h /usr/include/string.h \ - /usr/include/bits/string.h /usr/include/bits/string2.h \ - /usr/include/bits/string3.h /usr/include/unistd.h \ - /usr/include/bits/posix_opt.h /usr/include/bits/confname.h \ - /usr/include/getopt.h /usr/include/bits/unistd.h /usr/include/fcntl.h \ - /usr/include/bits/fcntl.h /usr/include/bits/fcntl2.h \ - /usr/include/sys/fcntl.h /usr/include/sys/file.h /usr/include/sys/stat.h \ - /usr/include/bits/stat.h /usr/include/sys/utsname.h \ - /usr/include/bits/utsname.h /usr/include/sys/ioctl.h \ - /usr/include/bits/ioctls.h /usr/include/asm/ioctls.h \ - /usr/include/asm-generic/ioctls.h /usr/include/linux/ioctl.h \ - /usr/include/asm/ioctl.h /usr/include/asm-generic/ioctl.h \ - /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ - /usr/include/crypt.h /usr/include/termios.h /usr/include/bits/termios.h \ - /usr/include/pwd.h /usr/include/arpa/inet.h /usr/include/signal.h \ - /usr/include/bits/signum.h /usr/include/bits/siginfo.h \ - /usr/include/bits/sigaction.h /usr/include/bits/sigcontext.h \ - /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ - /usr/include/sys/signal.h /usr/include/sys/time.h \ - ../include/freeradius-client.h ../include/pathnames.h - -../config.h: - -../include/includes.h: - -/usr/include/sys/types.h: - -/usr/include/features.h: - -/usr/include/bits/predefs.h: - -/usr/include/sys/cdefs.h: - -/usr/include/bits/wordsize.h: - -/usr/include/gnu/stubs.h: - -/usr/include/gnu/stubs-32.h: - -/usr/include/bits/types.h: - -/usr/include/bits/typesizes.h: - -/usr/include/time.h: - -/usr/lib/gcc/i486-linux-gnu/4.4.3/include/stddef.h: - -/usr/include/endian.h: - -/usr/include/bits/endian.h: - -/usr/include/bits/byteswap.h: - -/usr/include/sys/select.h: - -/usr/include/bits/select.h: - -/usr/include/bits/sigset.h: - -/usr/include/bits/time.h: - -/usr/include/sys/sysmacros.h: - -/usr/include/bits/pthreadtypes.h: - -/usr/include/ctype.h: - -/usr/include/xlocale.h: - -/usr/include/stdio.h: - -/usr/include/libio.h: - -/usr/include/_G_config.h: - -/usr/include/wchar.h: - -/usr/lib/gcc/i486-linux-gnu/4.4.3/include/stdarg.h: - -/usr/include/bits/stdio_lim.h: - -/usr/include/bits/sys_errlist.h: - -/usr/include/bits/stdio.h: - -/usr/include/bits/stdio2.h: - -/usr/include/errno.h: - -/usr/include/bits/errno.h: - -/usr/include/linux/errno.h: - -/usr/include/asm/errno.h: - -/usr/include/asm-generic/errno.h: - -/usr/include/asm-generic/errno-base.h: - -/usr/include/netdb.h: - -/usr/include/netinet/in.h: - -/usr/include/stdint.h: - -/usr/include/bits/wchar.h: - -/usr/include/sys/socket.h: - -/usr/include/sys/uio.h: - -/usr/include/bits/uio.h: - -/usr/include/bits/socket.h: - -/usr/include/bits/sockaddr.h: - -/usr/include/asm/socket.h: - -/usr/include/asm-generic/socket.h: - -/usr/include/asm/sockios.h: - -/usr/include/asm-generic/sockios.h: - -/usr/include/bits/socket2.h: - -/usr/include/bits/in.h: - -/usr/include/rpc/netdb.h: - -/usr/include/bits/netdb.h: - -/usr/include/syslog.h: - -/usr/include/sys/syslog.h: - -/usr/include/bits/syslog-path.h: - -/usr/include/bits/syslog.h: - -/usr/include/stdlib.h: - -/usr/include/alloca.h: - -/usr/include/bits/stdlib.h: - -/usr/include/string.h: - -/usr/include/bits/string.h: - -/usr/include/bits/string2.h: - -/usr/include/bits/string3.h: - -/usr/include/unistd.h: - -/usr/include/bits/posix_opt.h: - -/usr/include/bits/confname.h: - -/usr/include/getopt.h: - -/usr/include/bits/unistd.h: - -/usr/include/fcntl.h: - -/usr/include/bits/fcntl.h: - -/usr/include/bits/fcntl2.h: - -/usr/include/sys/fcntl.h: - -/usr/include/sys/file.h: - -/usr/include/sys/stat.h: - -/usr/include/bits/stat.h: - -/usr/include/sys/utsname.h: - -/usr/include/bits/utsname.h: - -/usr/include/sys/ioctl.h: - -/usr/include/bits/ioctls.h: - -/usr/include/asm/ioctls.h: - -/usr/include/asm-generic/ioctls.h: - -/usr/include/linux/ioctl.h: - -/usr/include/asm/ioctl.h: - -/usr/include/asm-generic/ioctl.h: - -/usr/include/bits/ioctl-types.h: - -/usr/include/sys/ttydefaults.h: - -/usr/include/crypt.h: - -/usr/include/termios.h: - -/usr/include/bits/termios.h: - -/usr/include/pwd.h: - -/usr/include/arpa/inet.h: - -/usr/include/signal.h: - -/usr/include/bits/signum.h: - -/usr/include/bits/siginfo.h: - -/usr/include/bits/sigaction.h: - -/usr/include/bits/sigcontext.h: - -/usr/include/bits/sigstack.h: - -/usr/include/bits/sigthread.h: - -/usr/include/sys/signal.h: - -/usr/include/sys/time.h: - -../include/freeradius-client.h: - -../include/pathnames.h: diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/lib/.deps/util.Plo b/openair3/PMIPv6/freeradius-client-1.1.6/lib/.deps/util.Plo deleted file mode 100644 index ee4f608095..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/lib/.deps/util.Plo +++ /dev/null @@ -1,258 +0,0 @@ -util.lo: util.c /usr/include/sys/time.h /usr/include/features.h \ - /usr/include/bits/predefs.h /usr/include/sys/cdefs.h \ - /usr/include/bits/wordsize.h /usr/include/gnu/stubs.h \ - /usr/include/gnu/stubs-32.h /usr/include/bits/types.h \ - /usr/include/bits/typesizes.h /usr/include/time.h \ - /usr/include/bits/time.h /usr/include/sys/select.h \ - /usr/include/bits/select.h /usr/include/bits/sigset.h ../config.h \ - ../include/includes.h /usr/include/sys/types.h \ - /usr/lib/gcc/i486-linux-gnu/4.4.3/include/stddef.h /usr/include/endian.h \ - /usr/include/bits/endian.h /usr/include/bits/byteswap.h \ - /usr/include/sys/sysmacros.h /usr/include/bits/pthreadtypes.h \ - /usr/include/ctype.h /usr/include/xlocale.h /usr/include/stdio.h \ - /usr/include/libio.h /usr/include/_G_config.h /usr/include/wchar.h \ - /usr/lib/gcc/i486-linux-gnu/4.4.3/include/stdarg.h \ - /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h \ - /usr/include/bits/stdio.h /usr/include/bits/stdio2.h \ - /usr/include/errno.h /usr/include/bits/errno.h \ - /usr/include/linux/errno.h /usr/include/asm/errno.h \ - /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ - /usr/include/netdb.h /usr/include/netinet/in.h /usr/include/stdint.h \ - /usr/include/bits/wchar.h /usr/include/sys/socket.h \ - /usr/include/sys/uio.h /usr/include/bits/uio.h \ - /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ - /usr/include/asm/socket.h /usr/include/asm-generic/socket.h \ - /usr/include/asm/sockios.h /usr/include/asm-generic/sockios.h \ - /usr/include/bits/socket2.h /usr/include/bits/in.h \ - /usr/include/rpc/netdb.h /usr/include/bits/netdb.h /usr/include/syslog.h \ - /usr/include/sys/syslog.h /usr/include/bits/syslog-path.h \ - /usr/include/bits/syslog.h /usr/include/stdlib.h /usr/include/alloca.h \ - /usr/include/bits/stdlib.h /usr/include/string.h \ - /usr/include/bits/string.h /usr/include/bits/string2.h \ - /usr/include/bits/string3.h /usr/include/unistd.h \ - /usr/include/bits/posix_opt.h /usr/include/bits/confname.h \ - /usr/include/getopt.h /usr/include/bits/unistd.h /usr/include/fcntl.h \ - /usr/include/bits/fcntl.h /usr/include/bits/fcntl2.h \ - /usr/include/sys/fcntl.h /usr/include/sys/file.h /usr/include/sys/stat.h \ - /usr/include/bits/stat.h /usr/include/sys/utsname.h \ - /usr/include/bits/utsname.h /usr/include/sys/ioctl.h \ - /usr/include/bits/ioctls.h /usr/include/asm/ioctls.h \ - /usr/include/asm-generic/ioctls.h /usr/include/linux/ioctl.h \ - /usr/include/asm/ioctl.h /usr/include/asm-generic/ioctl.h \ - /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ - /usr/include/crypt.h /usr/include/termios.h /usr/include/bits/termios.h \ - /usr/include/pwd.h /usr/include/arpa/inet.h /usr/include/signal.h \ - /usr/include/bits/signum.h /usr/include/bits/siginfo.h \ - /usr/include/bits/sigaction.h /usr/include/bits/sigcontext.h \ - /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ - /usr/include/sys/signal.h ../include/freeradius-client.h - -/usr/include/sys/time.h: - -/usr/include/features.h: - -/usr/include/bits/predefs.h: - -/usr/include/sys/cdefs.h: - -/usr/include/bits/wordsize.h: - -/usr/include/gnu/stubs.h: - -/usr/include/gnu/stubs-32.h: - -/usr/include/bits/types.h: - -/usr/include/bits/typesizes.h: - -/usr/include/time.h: - -/usr/include/bits/time.h: - -/usr/include/sys/select.h: - -/usr/include/bits/select.h: - -/usr/include/bits/sigset.h: - -../config.h: - -../include/includes.h: - -/usr/include/sys/types.h: - -/usr/lib/gcc/i486-linux-gnu/4.4.3/include/stddef.h: - -/usr/include/endian.h: - -/usr/include/bits/endian.h: - -/usr/include/bits/byteswap.h: - -/usr/include/sys/sysmacros.h: - -/usr/include/bits/pthreadtypes.h: - -/usr/include/ctype.h: - -/usr/include/xlocale.h: - -/usr/include/stdio.h: - -/usr/include/libio.h: - -/usr/include/_G_config.h: - -/usr/include/wchar.h: - -/usr/lib/gcc/i486-linux-gnu/4.4.3/include/stdarg.h: - -/usr/include/bits/stdio_lim.h: - -/usr/include/bits/sys_errlist.h: - -/usr/include/bits/stdio.h: - -/usr/include/bits/stdio2.h: - -/usr/include/errno.h: - -/usr/include/bits/errno.h: - -/usr/include/linux/errno.h: - -/usr/include/asm/errno.h: - -/usr/include/asm-generic/errno.h: - -/usr/include/asm-generic/errno-base.h: - -/usr/include/netdb.h: - -/usr/include/netinet/in.h: - -/usr/include/stdint.h: - -/usr/include/bits/wchar.h: - -/usr/include/sys/socket.h: - -/usr/include/sys/uio.h: - -/usr/include/bits/uio.h: - -/usr/include/bits/socket.h: - -/usr/include/bits/sockaddr.h: - -/usr/include/asm/socket.h: - -/usr/include/asm-generic/socket.h: - -/usr/include/asm/sockios.h: - -/usr/include/asm-generic/sockios.h: - -/usr/include/bits/socket2.h: - -/usr/include/bits/in.h: - -/usr/include/rpc/netdb.h: - -/usr/include/bits/netdb.h: - -/usr/include/syslog.h: - -/usr/include/sys/syslog.h: - -/usr/include/bits/syslog-path.h: - -/usr/include/bits/syslog.h: - -/usr/include/stdlib.h: - -/usr/include/alloca.h: - -/usr/include/bits/stdlib.h: - -/usr/include/string.h: - -/usr/include/bits/string.h: - -/usr/include/bits/string2.h: - -/usr/include/bits/string3.h: - -/usr/include/unistd.h: - -/usr/include/bits/posix_opt.h: - -/usr/include/bits/confname.h: - -/usr/include/getopt.h: - -/usr/include/bits/unistd.h: - -/usr/include/fcntl.h: - -/usr/include/bits/fcntl.h: - -/usr/include/bits/fcntl2.h: - -/usr/include/sys/fcntl.h: - -/usr/include/sys/file.h: - -/usr/include/sys/stat.h: - -/usr/include/bits/stat.h: - -/usr/include/sys/utsname.h: - -/usr/include/bits/utsname.h: - -/usr/include/sys/ioctl.h: - -/usr/include/bits/ioctls.h: - -/usr/include/asm/ioctls.h: - -/usr/include/asm-generic/ioctls.h: - -/usr/include/linux/ioctl.h: - -/usr/include/asm/ioctl.h: - -/usr/include/asm-generic/ioctl.h: - -/usr/include/bits/ioctl-types.h: - -/usr/include/sys/ttydefaults.h: - -/usr/include/crypt.h: - -/usr/include/termios.h: - -/usr/include/bits/termios.h: - -/usr/include/pwd.h: - -/usr/include/arpa/inet.h: - -/usr/include/signal.h: - -/usr/include/bits/signum.h: - -/usr/include/bits/siginfo.h: - -/usr/include/bits/sigaction.h: - -/usr/include/bits/sigcontext.h: - -/usr/include/bits/sigstack.h: - -/usr/include/bits/sigthread.h: - -/usr/include/sys/signal.h: - -../include/freeradius-client.h: diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/lib/.libs/libfreeradius-client.a b/openair3/PMIPv6/freeradius-client-1.1.6/lib/.libs/libfreeradius-client.a deleted file mode 100644 index 09455b0349..0000000000 Binary files a/openair3/PMIPv6/freeradius-client-1.1.6/lib/.libs/libfreeradius-client.a and /dev/null differ diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/lib/.libs/libfreeradius-client.lai b/openair3/PMIPv6/freeradius-client-1.1.6/lib/.libs/libfreeradius-client.lai deleted file mode 100644 index be705f7fe7..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/lib/.libs/libfreeradius-client.lai +++ /dev/null @@ -1,41 +0,0 @@ -# libfreeradius-client.la - a libtool library file -# Generated by ltmain.sh (GNU libtool) 2.2.6b Debian-2.2.6b-2ubuntu1 -# -# Please DO NOT delete this file! -# It is necessary for linking the library. - -# The name that we can dlopen(3). -dlname='libfreeradius-client.so.2' - -# Names of this library. -library_names='libfreeradius-client.so.2.0.0 libfreeradius-client.so.2 libfreeradius-client.so' - -# The name of the static archive. -old_library='libfreeradius-client.a' - -# Linker flags that can not go in dependency_libs. -inherited_linker_flags='' - -# Libraries that this one depends upon. -dependency_libs=' -lcrypt -lnsl' - -# Names of additional weak libraries provided by this library -weak_library_names='' - -# Version information for libfreeradius-client. -current=2 -age=0 -revision=0 - -# Is this an already installed library? -installed=yes - -# Should we warn about portability when linking against -modules? -shouldnotlink=no - -# Files to dlopen/dlpreopen -dlopen='' -dlpreopen='' - -# Directory that this library needs to be installed in: -libdir='/usr/local/lib' diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/lib/.libs/libfreeradius-client.so b/openair3/PMIPv6/freeradius-client-1.1.6/lib/.libs/libfreeradius-client.so deleted file mode 100644 index be98ab86a5..0000000000 Binary files a/openair3/PMIPv6/freeradius-client-1.1.6/lib/.libs/libfreeradius-client.so and /dev/null differ diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/lib/.libs/libfreeradius-client.so.2 b/openair3/PMIPv6/freeradius-client-1.1.6/lib/.libs/libfreeradius-client.so.2 deleted file mode 100644 index be98ab86a5..0000000000 Binary files a/openair3/PMIPv6/freeradius-client-1.1.6/lib/.libs/libfreeradius-client.so.2 and /dev/null differ diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/lib/.libs/libfreeradius-client.so.2.0.0 b/openair3/PMIPv6/freeradius-client-1.1.6/lib/.libs/libfreeradius-client.so.2.0.0 deleted file mode 100644 index be98ab86a5..0000000000 Binary files a/openair3/PMIPv6/freeradius-client-1.1.6/lib/.libs/libfreeradius-client.so.2.0.0 and /dev/null differ diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/lib/Makefile b/openair3/PMIPv6/freeradius-client-1.1.6/lib/Makefile deleted file mode 100644 index e493999916..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/lib/Makefile +++ /dev/null @@ -1,557 +0,0 @@ -# Makefile.in generated by automake 1.11.1 from Makefile.am. -# lib/Makefile. Generated from Makefile.in by configure. - -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, -# Inc. -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - - - -# -# $Id: Makefile.am,v 1.6 2008/01/05 03:08:04 sobomax Exp $ -# -# Copyright (C) 1995,1997,1998 Lars Fenneberg -# -# See the file COPYRIGHT for the respective terms and conditions. -# If the file is missing contact me at lf@elemental.net -# and I'll send you a copy. -# - - -pkgdatadir = $(datadir)/radiusclient -pkgincludedir = $(includedir)/radiusclient -pkglibdir = $(libdir)/radiusclient -pkglibexecdir = $(libexecdir)/radiusclient -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = i686-pc-linux-gnu -host_triplet = i686-pc-linux-gnu -target_triplet = i686-pc-linux-gnu -subdir = lib -DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/configure.in -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs -CONFIG_HEADER = $(top_builddir)/config.h -CONFIG_CLEAN_FILES = -CONFIG_CLEAN_VPATH_FILES = -am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; -am__vpath_adj = case $$p in \ - $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ - *) f=$$p;; \ - esac; -am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; -am__install_max = 40 -am__nobase_strip_setup = \ - srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` -am__nobase_strip = \ - for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" -am__nobase_list = $(am__nobase_strip_setup); \ - for p in $$list; do echo "$$p $$p"; done | \ - sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ - $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ - if (++n[$$2] == $(am__install_max)) \ - { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ - END { for (dir in files) print dir, files[dir] }' -am__base_list = \ - sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ - sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' -am__installdirs = "$(DESTDIR)$(libdir)" -LTLIBRARIES = $(lib_LTLIBRARIES) -libfreeradius_client_la_LIBADD = -am_libfreeradius_client_la_OBJECTS = buildreq.lo clientid.lo env.lo \ - sendserver.lo avpair.lo config.lo dict.lo ip_util.lo log.lo \ - md5.lo util.lo lock.lo -libfreeradius_client_la_OBJECTS = \ - $(am_libfreeradius_client_la_OBJECTS) -libfreeradius_client_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ - $(libfreeradius_client_la_LDFLAGS) $(LDFLAGS) -o $@ -DEFAULT_INCLUDES = -I. -I$(top_builddir) -depcomp = $(SHELL) $(top_srcdir)/depcomp -am__depfiles_maybe = depfiles -am__mv = mv -f -COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ - $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ - --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ - $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -CCLD = $(CC) -LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ - --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ - $(LDFLAGS) -o $@ -SOURCES = $(libfreeradius_client_la_SOURCES) -DIST_SOURCES = $(libfreeradius_client_la_SOURCES) -ETAGS = etags -CTAGS = ctags -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = ${SHELL} /usr/local/src/freeradius-client-1.1.6/missing --run aclocal-1.11 -ALLOCA = -AMTAR = ${SHELL} /usr/local/src/freeradius-client-1.1.6/missing --run tar -AR = /usr/bin/ar -AUTOCONF = ${SHELL} /usr/local/src/freeradius-client-1.1.6/missing --run autoconf -AUTOHEADER = ${SHELL} /usr/local/src/freeradius-client-1.1.6/missing --run autoheader -AUTOMAKE = ${SHELL} /usr/local/src/freeradius-client-1.1.6/missing --run automake-1.11 -AWK = gawk -CC = gcc -CCDEPMODE = depmode=gcc3 -CFLAGS = -g -O2 -CPP = gcc -E -CPPFLAGS = -CYGPATH_W = echo -DEFS = -DHAVE_CONFIG_H -DRC_LOG_FACILITY=$(RC_LOG_FACILITY) -DEPDIR = .deps -DSYMUTIL = -DUMPBIN = -ECHO_C = -ECHO_N = -n -ECHO_T = -EGREP = /bin/grep -E -EXEEXT = -FGREP = /bin/grep -F -GREP = /bin/grep -INSTALL = /usr/bin/install -c -INSTALL_DATA = ${INSTALL} -m 644 -INSTALL_PROGRAM = ${INSTALL} -INSTALL_SCRIPT = ${INSTALL} -INSTALL_STRIP_PROGRAM = $(install_sh) -c -s -LD = /usr/bin/ld -LDFLAGS = -LIBOBJS = -LIBS = -lcrypt -lnsl -LIBTOOL = $(SHELL) $(top_builddir)/libtool -LIBVERSION = 2:0:0 -LIPO = -LN_S = ln -s -LTLIBOBJS = -MAINT = # -MAKEINFO = ${SHELL} /usr/local/src/freeradius-client-1.1.6/missing --run makeinfo -MKDIR_P = /bin/mkdir -p -NM = /usr/bin/nm -B -NMEDIT = -OBJDUMP = objdump -OBJEXT = o -OTOOL = -OTOOL64 = -PACKAGE = radiusclient -PACKAGE_BUGREPORT = -PACKAGE_NAME = -PACKAGE_STRING = -PACKAGE_TARNAME = -PACKAGE_URL = -PACKAGE_VERSION = -PATH_SEPARATOR = : -RANLIB = ranlib -RC_LOG_FACILITY = LOG_DAEMON -RC_SECURE_PATH = /bin:/usr/bin:/usr/local/bin -SED = /bin/sed -SET_MAKE = -SHELL = /bin/bash -STRIP = strip -VERSION = 1.1.6 -abs_builddir = /usr/local/src/freeradius-client-1.1.6/lib -abs_srcdir = /usr/local/src/freeradius-client-1.1.6/lib -abs_top_builddir = /usr/local/src/freeradius-client-1.1.6 -abs_top_srcdir = /usr/local/src/freeradius-client-1.1.6 -ac_ct_CC = gcc -ac_ct_DUMPBIN = -am__include = include -am__leading_dot = . -am__quote = -am__tar = ${AMTAR} chof - "$$tardir" -am__untar = ${AMTAR} xf - -bindir = ${exec_prefix}/bin -build = i686-pc-linux-gnu -build_alias = -build_cpu = i686 -build_os = linux-gnu -build_vendor = pc -builddir = . -datadir = ${datarootdir} -datarootdir = ${prefix}/share -docdir = ${datarootdir}/doc/${PACKAGE} -dvidir = ${docdir} -exec_prefix = ${prefix} -host = i686-pc-linux-gnu -host_alias = -host_cpu = i686 -host_os = linux-gnu -host_vendor = pc -htmldir = ${docdir} -includedir = ${prefix}/include -infodir = ${datarootdir}/info -install_sh = ${SHELL} /usr/local/src/freeradius-client-1.1.6/install-sh -libdir = ${exec_prefix}/lib -libexecdir = ${exec_prefix}/libexec -localedir = ${datarootdir}/locale -localstatedir = ${prefix}/var -lt_ECHO = echo -mandir = ${datarootdir}/man -mkdir_p = /bin/mkdir -p -oldincludedir = /usr/include -pdfdir = ${docdir} -pkgsysconfdir = ${prefix}/etc/radiusclient -prefix = /usr/local -program_transform_name = s,x,x, -psdir = ${docdir} -sbindir = ${exec_prefix}/sbin -sharedstatedir = ${prefix}/com -srcdir = . -sysconfdir = ${prefix}/etc -target = i686-pc-linux-gnu -target_alias = -target_cpu = i686 -target_os = linux-gnu -target_vendor = pc -top_build_prefix = ../ -top_builddir = .. -top_srcdir = .. -AUTOMAKE_OPTIONS = foreign -INCLUDES = -I$(srcdir) -I$(top_srcdir)/include -I$(top_builddir) -CLEANFILES = *~ -lib_LTLIBRARIES = libfreeradius-client.la -libfreeradius_client_la_SOURCES = buildreq.c clientid.c env.c sendserver.c \ - avpair.c config.c dict.c ip_util.c log.c md5.c util.c lock.c \ - options.h md5.h - -libfreeradius_client_la_LDFLAGS = -version-info $(LIBVERSION) -all: all-am - -.SUFFIXES: -.SUFFIXES: .c .lo .o .obj -$(srcdir)/Makefile.in: # $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ - && { if test -f $@; then exit 0; else break; fi; }; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign lib/Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --foreign lib/Makefile -.PRECIOUS: Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: # $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): # $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(am__aclocal_m4_deps): -install-libLTLIBRARIES: $(lib_LTLIBRARIES) - @$(NORMAL_INSTALL) - test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)" - @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ - list2=; for p in $$list; do \ - if test -f $$p; then \ - list2="$$list2 $$p"; \ - else :; fi; \ - done; \ - test -z "$$list2" || { \ - echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ - $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ - } - -uninstall-libLTLIBRARIES: - @$(NORMAL_UNINSTALL) - @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ - for p in $$list; do \ - $(am__strip_dir) \ - echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ - $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ - done - -clean-libLTLIBRARIES: - -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) - @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ - dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ - test "$$dir" != "$$p" || dir=.; \ - echo "rm -f \"$${dir}/so_locations\""; \ - rm -f "$${dir}/so_locations"; \ - done -libfreeradius-client.la: $(libfreeradius_client_la_OBJECTS) $(libfreeradius_client_la_DEPENDENCIES) - $(libfreeradius_client_la_LINK) -rpath $(libdir) $(libfreeradius_client_la_OBJECTS) $(libfreeradius_client_la_LIBADD) $(LIBS) - -mostlyclean-compile: - -rm -f *.$(OBJEXT) - -distclean-compile: - -rm -f *.tab.c - -include ./$(DEPDIR)/avpair.Plo -include ./$(DEPDIR)/buildreq.Plo -include ./$(DEPDIR)/clientid.Plo -include ./$(DEPDIR)/config.Plo -include ./$(DEPDIR)/dict.Plo -include ./$(DEPDIR)/env.Plo -include ./$(DEPDIR)/ip_util.Plo -include ./$(DEPDIR)/lock.Plo -include ./$(DEPDIR)/log.Plo -include ./$(DEPDIR)/md5.Plo -include ./$(DEPDIR)/sendserver.Plo -include ./$(DEPDIR)/util.Plo - -.c.o: - $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< - $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po -# source='$<' object='$@' libtool=no \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(COMPILE) -c $< - -.c.obj: - $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` - $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po -# source='$<' object='$@' libtool=no \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(COMPILE) -c `$(CYGPATH_W) '$<'` - -.c.lo: - $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< - $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo -# source='$<' object='$@' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(LTCOMPILE) -c -o $@ $< - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs - -ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - mkid -fID $$unique -tags: TAGS - -TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - set x; \ - here=`pwd`; \ - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - shift; \ - if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ - test -n "$$unique" || unique=$$empty_fix; \ - if test $$# -gt 0; then \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - "$$@" $$unique; \ - else \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$unique; \ - fi; \ - fi -ctags: CTAGS -CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - test -z "$(CTAGS_ARGS)$$unique" \ - || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$unique - -GTAGS: - here=`$(am__cd) $(top_builddir) && pwd` \ - && $(am__cd) $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) "$$here" - -distclean-tags: - -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - -distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - list='$(DISTFILES)'; \ - dist_files=`for file in $$list; do echo $$file; done | \ - sed -e "s|^$$srcdirstrip/||;t" \ - -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ - case $$dist_files in \ - */*) $(MKDIR_P) `echo "$$dist_files" | \ - sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ - sort -u` ;; \ - esac; \ - for file in $$dist_files; do \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - if test -d $$d/$$file; then \ - dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test -d "$(distdir)/$$file"; then \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ - else \ - test -f "$(distdir)/$$file" \ - || cp -p $$d/$$file "$(distdir)/$$file" \ - || exit 1; \ - fi; \ - done -check-am: all-am -check: check-am -all-am: Makefile $(LTLIBRARIES) -installdirs: - for dir in "$(DESTDIR)$(libdir)"; do \ - test -z "$$dir" || $(MKDIR_P) "$$dir"; \ - done -install: install-am -install-exec: install-exec-am -install-data: install-data-am -uninstall: uninstall-am - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-am -install-strip: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install -mostlyclean-generic: - -clean-generic: - -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." -clean: clean-am - -clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ - mostlyclean-am - -distclean: distclean-am - -rm -rf ./$(DEPDIR) - -rm -f Makefile -distclean-am: clean-am distclean-compile distclean-generic \ - distclean-tags - -dvi: dvi-am - -dvi-am: - -html: html-am - -html-am: - -info: info-am - -info-am: - -install-data-am: - -install-dvi: install-dvi-am - -install-dvi-am: - -install-exec-am: install-libLTLIBRARIES - -install-html: install-html-am - -install-html-am: - -install-info: install-info-am - -install-info-am: - -install-man: - -install-pdf: install-pdf-am - -install-pdf-am: - -install-ps: install-ps-am - -install-ps-am: - -installcheck-am: - -maintainer-clean: maintainer-clean-am - -rm -rf ./$(DEPDIR) - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-am - -mostlyclean-am: mostlyclean-compile mostlyclean-generic \ - mostlyclean-libtool - -pdf: pdf-am - -pdf-am: - -ps: ps-am - -ps-am: - -uninstall-am: uninstall-libLTLIBRARIES - -.MAKE: install-am install-strip - -.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ - clean-libLTLIBRARIES clean-libtool ctags distclean \ - distclean-compile distclean-generic distclean-libtool \ - distclean-tags distdir dvi dvi-am html html-am info info-am \ - install install-am install-data install-data-am install-dvi \ - install-dvi-am install-exec install-exec-am install-html \ - install-html-am install-info install-info-am \ - install-libLTLIBRARIES install-man install-pdf install-pdf-am \ - install-ps install-ps-am install-strip installcheck \ - installcheck-am installdirs maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-compile \ - mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ - tags uninstall uninstall-am uninstall-libLTLIBRARIES - - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/lib/Makefile.am b/openair3/PMIPv6/freeradius-client-1.1.6/lib/Makefile.am deleted file mode 100644 index 2a78bbbb70..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/lib/Makefile.am +++ /dev/null @@ -1,25 +0,0 @@ -# -# $Id: Makefile.am,v 1.6 2008/01/05 03:08:04 sobomax Exp $ -# -# Copyright (C) 1995,1997,1998 Lars Fenneberg -# -# See the file COPYRIGHT for the respective terms and conditions. -# If the file is missing contact me at lf@elemental.net -# and I'll send you a copy. -# - -AUTOMAKE_OPTIONS = foreign - -RC_LOG_FACILITY = @RC_LOG_FACILITY@ -LIBVERSION = @LIBVERSION@ - -INCLUDES = -I$(srcdir) -I$(top_srcdir)/include -I$(top_builddir) -DEFS = @DEFS@ -DRC_LOG_FACILITY=$(RC_LOG_FACILITY) - -CLEANFILES = *~ - -lib_LTLIBRARIES = libfreeradius-client.la -libfreeradius_client_la_SOURCES = buildreq.c clientid.c env.c sendserver.c \ - avpair.c config.c dict.c ip_util.c log.c md5.c util.c lock.c \ - options.h md5.h -libfreeradius_client_la_LDFLAGS = -version-info $(LIBVERSION) diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/lib/Makefile.in b/openair3/PMIPv6/freeradius-client-1.1.6/lib/Makefile.in deleted file mode 100644 index b4fb033308..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/lib/Makefile.in +++ /dev/null @@ -1,557 +0,0 @@ -# Makefile.in generated by automake 1.11.1 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, -# Inc. -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -@SET_MAKE@ - -# -# $Id: Makefile.am,v 1.6 2008/01/05 03:08:04 sobomax Exp $ -# -# Copyright (C) 1995,1997,1998 Lars Fenneberg -# -# See the file COPYRIGHT for the respective terms and conditions. -# If the file is missing contact me at lf@elemental.net -# and I'll send you a copy. -# - -VPATH = @srcdir@ -pkgdatadir = $(datadir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ -pkglibexecdir = $(libexecdir)/@PACKAGE@ -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = @build@ -host_triplet = @host@ -target_triplet = @target@ -subdir = lib -DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/configure.in -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs -CONFIG_HEADER = $(top_builddir)/config.h -CONFIG_CLEAN_FILES = -CONFIG_CLEAN_VPATH_FILES = -am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; -am__vpath_adj = case $$p in \ - $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ - *) f=$$p;; \ - esac; -am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; -am__install_max = 40 -am__nobase_strip_setup = \ - srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` -am__nobase_strip = \ - for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" -am__nobase_list = $(am__nobase_strip_setup); \ - for p in $$list; do echo "$$p $$p"; done | \ - sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ - $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ - if (++n[$$2] == $(am__install_max)) \ - { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ - END { for (dir in files) print dir, files[dir] }' -am__base_list = \ - sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ - sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' -am__installdirs = "$(DESTDIR)$(libdir)" -LTLIBRARIES = $(lib_LTLIBRARIES) -libfreeradius_client_la_LIBADD = -am_libfreeradius_client_la_OBJECTS = buildreq.lo clientid.lo env.lo \ - sendserver.lo avpair.lo config.lo dict.lo ip_util.lo log.lo \ - md5.lo util.lo lock.lo -libfreeradius_client_la_OBJECTS = \ - $(am_libfreeradius_client_la_OBJECTS) -libfreeradius_client_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ - $(libfreeradius_client_la_LDFLAGS) $(LDFLAGS) -o $@ -DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) -depcomp = $(SHELL) $(top_srcdir)/depcomp -am__depfiles_maybe = depfiles -am__mv = mv -f -COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ - $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ - --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ - $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -CCLD = $(CC) -LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ - --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ - $(LDFLAGS) -o $@ -SOURCES = $(libfreeradius_client_la_SOURCES) -DIST_SOURCES = $(libfreeradius_client_la_SOURCES) -ETAGS = etags -CTAGS = ctags -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = @ACLOCAL@ -ALLOCA = @ALLOCA@ -AMTAR = @AMTAR@ -AR = @AR@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -CC = @CC@ -CCDEPMODE = @CCDEPMODE@ -CFLAGS = @CFLAGS@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CYGPATH_W = @CYGPATH_W@ -DEFS = @DEFS@ -DRC_LOG_FACILITY=$(RC_LOG_FACILITY) -DEPDIR = @DEPDIR@ -DSYMUTIL = @DSYMUTIL@ -DUMPBIN = @DUMPBIN@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -EXEEXT = @EXEEXT@ -FGREP = @FGREP@ -GREP = @GREP@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -LD = @LD@ -LDFLAGS = @LDFLAGS@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LIBTOOL = @LIBTOOL@ -LIBVERSION = @LIBVERSION@ -LIPO = @LIPO@ -LN_S = @LN_S@ -LTLIBOBJS = @LTLIBOBJS@ -MAINT = @MAINT@ -MAKEINFO = @MAKEINFO@ -MKDIR_P = @MKDIR_P@ -NM = @NM@ -NMEDIT = @NMEDIT@ -OBJDUMP = @OBJDUMP@ -OBJEXT = @OBJEXT@ -OTOOL = @OTOOL@ -OTOOL64 = @OTOOL64@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_URL = @PACKAGE_URL@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -RANLIB = @RANLIB@ -RC_LOG_FACILITY = @RC_LOG_FACILITY@ -RC_SECURE_PATH = @RC_SECURE_PATH@ -SED = @SED@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -STRIP = @STRIP@ -VERSION = @VERSION@ -abs_builddir = @abs_builddir@ -abs_srcdir = @abs_srcdir@ -abs_top_builddir = @abs_top_builddir@ -abs_top_srcdir = @abs_top_srcdir@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ -am__include = @am__include@ -am__leading_dot = @am__leading_dot@ -am__quote = @am__quote@ -am__tar = @am__tar@ -am__untar = @am__untar@ -bindir = @bindir@ -build = @build@ -build_alias = @build_alias@ -build_cpu = @build_cpu@ -build_os = @build_os@ -build_vendor = @build_vendor@ -builddir = @builddir@ -datadir = @datadir@ -datarootdir = @datarootdir@ -docdir = @docdir@ -dvidir = @dvidir@ -exec_prefix = @exec_prefix@ -host = @host@ -host_alias = @host_alias@ -host_cpu = @host_cpu@ -host_os = @host_os@ -host_vendor = @host_vendor@ -htmldir = @htmldir@ -includedir = @includedir@ -infodir = @infodir@ -install_sh = @install_sh@ -libdir = @libdir@ -libexecdir = @libexecdir@ -localedir = @localedir@ -localstatedir = @localstatedir@ -lt_ECHO = @lt_ECHO@ -mandir = @mandir@ -mkdir_p = @mkdir_p@ -oldincludedir = @oldincludedir@ -pdfdir = @pdfdir@ -pkgsysconfdir = @pkgsysconfdir@ -prefix = @prefix@ -program_transform_name = @program_transform_name@ -psdir = @psdir@ -sbindir = @sbindir@ -sharedstatedir = @sharedstatedir@ -srcdir = @srcdir@ -sysconfdir = @sysconfdir@ -target = @target@ -target_alias = @target_alias@ -target_cpu = @target_cpu@ -target_os = @target_os@ -target_vendor = @target_vendor@ -top_build_prefix = @top_build_prefix@ -top_builddir = @top_builddir@ -top_srcdir = @top_srcdir@ -AUTOMAKE_OPTIONS = foreign -INCLUDES = -I$(srcdir) -I$(top_srcdir)/include -I$(top_builddir) -CLEANFILES = *~ -lib_LTLIBRARIES = libfreeradius-client.la -libfreeradius_client_la_SOURCES = buildreq.c clientid.c env.c sendserver.c \ - avpair.c config.c dict.c ip_util.c log.c md5.c util.c lock.c \ - options.h md5.h - -libfreeradius_client_la_LDFLAGS = -version-info $(LIBVERSION) -all: all-am - -.SUFFIXES: -.SUFFIXES: .c .lo .o .obj -$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ - && { if test -f $@; then exit 0; else break; fi; }; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign lib/Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --foreign lib/Makefile -.PRECIOUS: Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(am__aclocal_m4_deps): -install-libLTLIBRARIES: $(lib_LTLIBRARIES) - @$(NORMAL_INSTALL) - test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)" - @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ - list2=; for p in $$list; do \ - if test -f $$p; then \ - list2="$$list2 $$p"; \ - else :; fi; \ - done; \ - test -z "$$list2" || { \ - echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ - $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ - } - -uninstall-libLTLIBRARIES: - @$(NORMAL_UNINSTALL) - @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ - for p in $$list; do \ - $(am__strip_dir) \ - echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ - $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ - done - -clean-libLTLIBRARIES: - -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) - @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ - dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ - test "$$dir" != "$$p" || dir=.; \ - echo "rm -f \"$${dir}/so_locations\""; \ - rm -f "$${dir}/so_locations"; \ - done -libfreeradius-client.la: $(libfreeradius_client_la_OBJECTS) $(libfreeradius_client_la_DEPENDENCIES) - $(libfreeradius_client_la_LINK) -rpath $(libdir) $(libfreeradius_client_la_OBJECTS) $(libfreeradius_client_la_LIBADD) $(LIBS) - -mostlyclean-compile: - -rm -f *.$(OBJEXT) - -distclean-compile: - -rm -f *.tab.c - -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/avpair.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/buildreq.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/clientid.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/config.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dict.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/env.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ip_util.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lock.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/log.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/md5.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sendserver.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/util.Plo@am__quote@ - -.c.o: -@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(COMPILE) -c $< - -.c.obj: -@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` - -.c.lo: -@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs - -ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - mkid -fID $$unique -tags: TAGS - -TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - set x; \ - here=`pwd`; \ - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - shift; \ - if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ - test -n "$$unique" || unique=$$empty_fix; \ - if test $$# -gt 0; then \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - "$$@" $$unique; \ - else \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$unique; \ - fi; \ - fi -ctags: CTAGS -CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - test -z "$(CTAGS_ARGS)$$unique" \ - || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$unique - -GTAGS: - here=`$(am__cd) $(top_builddir) && pwd` \ - && $(am__cd) $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) "$$here" - -distclean-tags: - -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - -distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - list='$(DISTFILES)'; \ - dist_files=`for file in $$list; do echo $$file; done | \ - sed -e "s|^$$srcdirstrip/||;t" \ - -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ - case $$dist_files in \ - */*) $(MKDIR_P) `echo "$$dist_files" | \ - sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ - sort -u` ;; \ - esac; \ - for file in $$dist_files; do \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - if test -d $$d/$$file; then \ - dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test -d "$(distdir)/$$file"; then \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ - else \ - test -f "$(distdir)/$$file" \ - || cp -p $$d/$$file "$(distdir)/$$file" \ - || exit 1; \ - fi; \ - done -check-am: all-am -check: check-am -all-am: Makefile $(LTLIBRARIES) -installdirs: - for dir in "$(DESTDIR)$(libdir)"; do \ - test -z "$$dir" || $(MKDIR_P) "$$dir"; \ - done -install: install-am -install-exec: install-exec-am -install-data: install-data-am -uninstall: uninstall-am - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-am -install-strip: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install -mostlyclean-generic: - -clean-generic: - -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." -clean: clean-am - -clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ - mostlyclean-am - -distclean: distclean-am - -rm -rf ./$(DEPDIR) - -rm -f Makefile -distclean-am: clean-am distclean-compile distclean-generic \ - distclean-tags - -dvi: dvi-am - -dvi-am: - -html: html-am - -html-am: - -info: info-am - -info-am: - -install-data-am: - -install-dvi: install-dvi-am - -install-dvi-am: - -install-exec-am: install-libLTLIBRARIES - -install-html: install-html-am - -install-html-am: - -install-info: install-info-am - -install-info-am: - -install-man: - -install-pdf: install-pdf-am - -install-pdf-am: - -install-ps: install-ps-am - -install-ps-am: - -installcheck-am: - -maintainer-clean: maintainer-clean-am - -rm -rf ./$(DEPDIR) - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-am - -mostlyclean-am: mostlyclean-compile mostlyclean-generic \ - mostlyclean-libtool - -pdf: pdf-am - -pdf-am: - -ps: ps-am - -ps-am: - -uninstall-am: uninstall-libLTLIBRARIES - -.MAKE: install-am install-strip - -.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ - clean-libLTLIBRARIES clean-libtool ctags distclean \ - distclean-compile distclean-generic distclean-libtool \ - distclean-tags distdir dvi dvi-am html html-am info info-am \ - install install-am install-data install-data-am install-dvi \ - install-dvi-am install-exec install-exec-am install-html \ - install-html-am install-info install-info-am \ - install-libLTLIBRARIES install-man install-pdf install-pdf-am \ - install-ps install-ps-am install-strip installcheck \ - installcheck-am installdirs maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-compile \ - mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ - tags uninstall uninstall-am uninstall-libLTLIBRARIES - - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/lib/avpair.c b/openair3/PMIPv6/freeradius-client-1.1.6/lib/avpair.c deleted file mode 100644 index b31775d691..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/lib/avpair.c +++ /dev/null @@ -1,846 +0,0 @@ -/* - * $Id: avpair.c,v 1.23 2008/01/09 07:05:11 sobomax Exp $ - * - * Copyright (C) 1995 Lars Fenneberg - * - * Copyright 1992 Livingston Enterprises, Inc. - * - * Copyright 1992,1993, 1994,1995 The Regents of the University of Michigan - * and Merit Network, Inc. All Rights Reserved - * - * See the file COPYRIGHT for the respective terms and conditions. - * If the file is missing contact me at lf@elemental.net - * and I'll send you a copy. - * - */ - -#include -#include -#include - -/* - * Function: rc_avpair_add - * - * Purpose: add an attribute-value pair to the given list. - * - * Returns: pointer to added a/v pair upon success, NULL pointer upon failure. - * - * Remarks: Always appends the new pair to the end of the list. - * - */ - -VALUE_PAIR *rc_avpair_add (const rc_handle *rh, VALUE_PAIR **list, int attrid, void *pval, int len, int vendorpec) -{ - VALUE_PAIR *vp; - - vp = rc_avpair_new (rh, attrid, pval, len, vendorpec); - - if (vp != NULL) { - rc_avpair_insert (list, NULL, vp); - } - - return vp; - -} - -/* - * Function: rc_avpair_assign - * - * Purpose: assign the given value to an attribute-value pair. - * - * Returns: 0 on success, - * -1 on failure. - * - */ - -int rc_avpair_assign (VALUE_PAIR *vp, void *pval, int len) -{ - - switch (vp->type) { - case PW_TYPE_STRING: - if (len == -1) - len = (uint32_t)strlen((char *)pval); - - if (len > AUTH_STRING_LEN) { - rc_log(LOG_ERR, "rc_avpair_assign: bad attribute length"); - return -1; - } - - memcpy(vp->strvalue, (char *)pval, len); - vp->strvalue[len] = '\0'; - vp->lvalue = len; - break; - - case PW_TYPE_DATE: - case PW_TYPE_INTEGER: - case PW_TYPE_IPADDR: - vp->lvalue = * (uint32_t *) pval; - break; - - case PW_TYPE_IPV6ADDR: - memcpy(&vp->in6addrvalue, pval, sizeof(struct in6_addr)); - //rc_log(LOG_NOTICE, "rc_avpair_assign: PW_TYPE_IPV6ADDR %x:%x:%x:%x:%x:%x:%x:%x\n", NIP6ADDR(&vp->in6addrvalue)); - break; - - default: - rc_log(LOG_ERR, "rc_avpair_assign: unknown attribute %d", vp->type); - return -1; - } - - return 0; -} - -/* - * Function: rc_avpair_new - * - * Purpose: make a new attribute-value pair with given parameters. - * - * Returns: pointer to generated a/v pair when successful, NULL when failure. - * - */ - -VALUE_PAIR *rc_avpair_new (const rc_handle *rh, int attrid, void *pval, int len, int vendorpec) -{ - VALUE_PAIR *vp = NULL; - DICT_ATTR *pda; - - attrid = attrid | (vendorpec << 16); - - if ((pda = rc_dict_getattr (rh, attrid)) == NULL) { - rc_log(LOG_ERR,"rc_avpair_new: unknown attribute %d", attrid); - return NULL; - } - - if (vendorpec != 0 && rc_dict_getvend(rh, vendorpec) == NULL) { - rc_log(LOG_ERR,"rc_avpair_new: unknown Vendor-Id %d", vendorpec); - return NULL; - } - - if ((vp = malloc (sizeof (VALUE_PAIR))) != NULL) { - strncpy (vp->name, pda->name, sizeof (vp->name)); - vp->attribute = attrid; - vp->next = NULL; - vp->type = pda->type; - - if (rc_avpair_assign (vp, pval, len) == 0) { - /* XXX: Fix up Digest-Attributes */ - switch (vp->attribute) { - case PW_DIGEST_REALM: - case PW_DIGEST_NONCE: - case PW_DIGEST_METHOD: - case PW_DIGEST_URI: - case PW_DIGEST_QOP: - case PW_DIGEST_ALGORITHM: - case PW_DIGEST_BODY_DIGEST: - case PW_DIGEST_CNONCE: - case PW_DIGEST_NONCE_COUNT: - case PW_DIGEST_USER_NAME: - - /* overlapping! */ - if (vp->lvalue > AUTH_STRING_LEN - 2) - vp->lvalue = AUTH_STRING_LEN - 2; - - memmove(&vp->strvalue[2], &vp->strvalue[0], vp->lvalue); - vp->strvalue[0] = vp->attribute - PW_DIGEST_REALM + 1; - vp->lvalue += 2; - vp->strvalue[1] = vp->lvalue; - vp->strvalue[vp->lvalue] = '\0'; - vp->attribute = PW_DIGEST_ATTRIBUTES; - - default: - break; - } - - return vp; - } - - free (vp); - vp = NULL; - } else { - rc_log(LOG_CRIT,"rc_avpair_new: out of memory"); - } - - return vp; -} - -/* - * - * Function: rc_avpair_gen - * - * Purpose: takes attribute/value pairs from buffer and builds a - * value_pair list using allocated memory. Uses recursion. - * - * Returns: value_pair list or NULL on failure - */ - -VALUE_PAIR * -rc_avpair_gen(const rc_handle *rh, VALUE_PAIR *pair, unsigned char *ptr, - int length, int vendorpec) -{ - int attribute, attrlen, x_len; - unsigned char *x_ptr; - uint32_t lvalue; - DICT_ATTR *attr; - VALUE_PAIR *rpair; - char buffer[(AUTH_STRING_LEN * 2) + 1]; - /* For hex string conversion. */ - char hex[3]; - - if (length < 2) { - rc_log(LOG_ERR, "rc_avpair_gen: received attribute with " - "invalid length"); - goto shithappens; - } - - attrlen = ptr[1]; - - if (length < attrlen || attrlen < 2) { - rc_log(LOG_ERR, "rc_avpair_gen: received attribute with " - "invalid length"); - goto shithappens; - } - - /* Advance to the next attribute and process recursively */ - if (length != attrlen) { - pair = rc_avpair_gen(rh, pair, ptr + attrlen, length - attrlen, - vendorpec); - - if (pair == NULL) - return NULL; - } - - /* Actual processing */ - attribute = ptr[0] | (vendorpec << 16); - ptr += 2; - attrlen -= 2; - - /* VSA */ - if (attribute == PW_VENDOR_SPECIFIC) { - if (attrlen < 4) { - rc_log(LOG_ERR, "rc_avpair_gen: received VSA " - "attribute with invalid length"); - goto shithappens; - } - - memcpy(&lvalue, ptr, 4); - vendorpec = ntohl(lvalue); - - if (rc_dict_getvend(rh, vendorpec) == NULL) { - /* Warn and skip over the unknown VSA */ - rc_log(LOG_WARNING, "rc_avpair_gen: received VSA " - "attribute with unknown Vendor-Id %d", vendorpec); - return pair; - } - - /* Process recursively */ - return rc_avpair_gen(rh, pair, ptr + 4, attrlen - 4, - vendorpec); - } - - /* Normal */ - attr = rc_dict_getattr(rh, attribute); - - if (attr == NULL) { - buffer[0] = '\0'; /* Initial length. */ - x_ptr = ptr; - - for (x_len = attrlen; x_len > 0; x_len--, x_ptr++) { - sprintf(hex, "%2.2X", x_ptr[0]); - strcat(buffer, hex); - } - - if (vendorpec == 0) { - rc_log(LOG_WARNING, "rc_avpair_gen: received " - "unknown attribute %d of length %d: 0x%s", - attribute, attrlen + 2, buffer); - } else { - rc_log(LOG_WARNING, "rc_avpair_gen: received " - "unknown VSA attribute %d, vendor %d of " - "length %d: 0x%s", attribute & 0xffff, - VENDOR(attribute), attrlen + 2, buffer); - } - - goto shithappens; - } - - rpair = malloc(sizeof(*rpair)); - - if (rpair == NULL) { - rc_log(LOG_CRIT, "rc_avpair_gen: out of memory"); - goto shithappens; - } - - memset(rpair, '\0', sizeof(*rpair)); - - /* Insert this new pair at the beginning of the list */ - rpair->next = pair; - pair = rpair; - strcpy(pair->name, attr->name); - pair->attribute = attr->value; - pair->type = attr->type; - - switch (attr->type) { - case PW_TYPE_STRING: - memcpy(pair->strvalue, (char *)ptr, (size_t)attrlen); - pair->strvalue[attrlen] = '\0'; - pair->lvalue = attrlen; - break; - - case PW_TYPE_INTEGER: - if (attrlen != 4) { - rc_log(LOG_ERR, "rc_avpair_gen: received INT " - "attribute with invalid length"); - goto shithappens; - } - - case PW_TYPE_IPADDR: - if (attrlen != 4) { - rc_log(LOG_ERR, "rc_avpair_gen: received IPADDR" - " attribute with invalid length"); - goto shithappens; - } - - memcpy((char *)&lvalue, (char *)ptr, 4); - pair->lvalue = ntohl(lvalue); - break; - - case PW_TYPE_IPV6ADDR: - if (attrlen != 16) { - rc_log(LOG_ERR, "rc_avpair_gen: received IPV6ADDR" - " attribute with invalid length %d (should be %d)", attrlen, 16); - goto shithappens; - } - - memcpy(&pair->in6addrvalue, ptr, 16); - //rc_log(LOG_NOTICE, "rc_avpair_gen: PW_TYPE_IPV6ADDR %x:%x:%x:%x:%x:%x:%x:%x\n", NIP6ADDR(&pair->in6addrvalue)); - break; - - default: - rc_log(LOG_WARNING, "rc_avpair_gen: %s has unknown type", - attr->name); - goto shithappens; - } - - return pair; - -shithappens: - - while (pair != NULL) { - rpair = pair->next; - free(pair); - pair = rpair; - } - - return NULL; -} - -/* - * Function: rc_avpair_get - * - * Purpose: Find the first attribute value-pair (which matches the given - * attribute) from the specified value-pair list. - * - * Returns: found value_pair - * - */ - -VALUE_PAIR *rc_avpair_get (VALUE_PAIR *vp, int attrid, int vendorpec) -{ - for (; vp != NULL && !(ATTRID(vp->attribute) == ATTRID(attrid) && - VENDOR(vp->attribute) == vendorpec); vp = vp->next) { - continue; - } - - return vp; -} - -/* - * Function: rc_avpair_insert - * - * Purpose: Given the address of an existing list "a" and a pointer - * to an entry "p" in that list, add the value pair "b" to - * the "a" list after the "p" entry. If "p" is NULL, add - * the value pair "b" to the end of "a". - * - */ - -void rc_avpair_insert (VALUE_PAIR **a, VALUE_PAIR *p, VALUE_PAIR *b) -{ - VALUE_PAIR *this_node = NULL; - VALUE_PAIR *vp; - - if (b->next != NULL) { - rc_log(LOG_CRIT, "rc_avpair_insert: value pair (0x%p) next ptr. (0x%p) not NULL", b, b->next); - abort (); - } - - if (*a == NULL) { - *a = b; - return; - } - - vp = *a; - - if ( p == NULL) { /* run to end of "a" list */ - while (vp != NULL) { - this_node = vp; - vp = vp->next; - } - } else { /* look for the "p" entry in the "a" list */ - this_node = *a; - - while (this_node != NULL) { - if (this_node == p) { - break; - } - - this_node = this_node->next; - } - } - - b->next = this_node->next; - this_node->next = b; - - return; -} - -/* - * Function: rc_avpair_free - * - * Purpose: frees all value_pairs in the list - * - */ - -void rc_avpair_free (VALUE_PAIR *pair) -{ - VALUE_PAIR *next; - - while (pair != NULL) { - next = pair->next; - free (pair); - pair = next; - } -} - -/* - * Function: rc_fieldcpy - * - * Purpose: Copy a data field from the buffer. Advance the buffer - * past the data field. Ensure that no more than len - 1 - * bytes are copied and that resulting string is terminated - * with '\0'. - * - */ - -static void -rc_fieldcpy(char *string, char **uptr, const char *stopat, size_t len) -{ - char *ptr, *estring; - - ptr = *uptr; - estring = string + len - 1; - - if (*ptr == '"') { - ptr++; - - while (*ptr != '"' && *ptr != '\0' && *ptr != '\n') { - if (string < estring) - *string++ = *ptr; - - ptr++; - } - - if (*ptr == '"') { - ptr++; - } - - *string = '\0'; - *uptr = ptr; - return; - } - - while (*ptr != '\0' && strchr(stopat, *ptr) == NULL) { - if (string < estring) - *string++ = *ptr; - - ptr++; - } - - *string = '\0'; - *uptr = ptr; - return; -} - - -/* - * Function: rc_avpair_parse - * - * Purpose: parses the buffer to extract the attribute-value pairs. - * - * Returns: 0 = successful parse of attribute-value pair, - * -1 = syntax (or other) error detected. - * - */ - -#define PARSE_MODE_NAME 0 -#define PARSE_MODE_EQUAL 1 -#define PARSE_MODE_VALUE 2 -#define PARSE_MODE_INVALID 3 - -int rc_avpair_parse (const rc_handle *rh, char *buffer, VALUE_PAIR **first_pair) -{ - int mode; - char attrstr[AUTH_ID_LEN]; - char valstr[AUTH_STRING_LEN + 1]; - DICT_ATTR *attr = NULL; - DICT_VALUE *dval; - VALUE_PAIR *pair; - VALUE_PAIR *link; - struct tm *tm; - time_t timeval; - - mode = PARSE_MODE_NAME; - - while (*buffer != '\n' && *buffer != '\0') { - if (*buffer == ' ' || *buffer == '\t') { - buffer++; - continue; - } - - switch (mode) { - case PARSE_MODE_NAME: /* Attribute Name */ - rc_fieldcpy (attrstr, &buffer, " \t\n=,", sizeof(attrstr)); - - if ((attr = - rc_dict_findattr (rh, attrstr)) == NULL) { - rc_log(LOG_ERR, "rc_avpair_parse: unknown attribute"); - - if (*first_pair) { - rc_avpair_free(*first_pair); - *first_pair = NULL; - } - - return -1; - } - - mode = PARSE_MODE_EQUAL; - break; - - case PARSE_MODE_EQUAL: /* Equal sign */ - if (*buffer == '=') { - mode = PARSE_MODE_VALUE; - buffer++; - } else { - rc_log(LOG_ERR, "rc_avpair_parse: missing or misplaced equal sign"); - - if (*first_pair) { - rc_avpair_free(*first_pair); - *first_pair = NULL; - } - - return -1; - } - - break; - - case PARSE_MODE_VALUE: /* Value */ - rc_fieldcpy (valstr, &buffer, " \t\n,", sizeof(valstr)); - - if ((pair = malloc (sizeof (VALUE_PAIR))) == NULL) { - rc_log(LOG_CRIT, "rc_avpair_parse: out of memory"); - - if (*first_pair) { - rc_avpair_free(*first_pair); - *first_pair = NULL; - } - - return -1; - } - - strcpy (pair->name, attr->name); - pair->attribute = attr->value; - pair->type = attr->type; - - switch (pair->type) { - - case PW_TYPE_STRING: - strcpy (pair->strvalue, valstr); - pair->lvalue = (uint32_t)strlen(valstr); - break; - - case PW_TYPE_INTEGER: - if (isdigit (*valstr)) { - pair->lvalue = atoi (valstr); - } else { - if ((dval = rc_dict_findval (rh, valstr)) - == NULL) { - rc_log(LOG_ERR, "rc_avpair_parse: unknown attribute value: %s", valstr); - - if (*first_pair) { - rc_avpair_free(*first_pair); - *first_pair = NULL; - } - - free (pair); - return -1; - } else { - pair->lvalue = dval->value; - } - } - - break; - - case PW_TYPE_IPADDR: - rc_log(LOG_ERR, "rc_avpair_parse: PW_TYPE_IPADDR not allowed"); - //rc_get_ipaddr(valstr, (struct in6_addr*)&pair->lvalue); - break; - - case PW_TYPE_IPV6ADDR: - //rc_log(LOG_NOTICE, "rc_avpair_parse: PW_TYPE_IPV6ADDR"); - rc_get_ipaddr(valstr, (struct in6_addr*)&pair->in6addrvalue); - break; - - case PW_TYPE_DATE: - timeval = time (0); - tm = localtime (&timeval); - tm->tm_hour = 0; - tm->tm_min = 0; - tm->tm_sec = 0; - rc_str2tm (valstr, tm); -#ifdef TIMELOCAL - pair->lvalue = (uint32_t) timelocal (tm); -#else /* TIMELOCAL */ - pair->lvalue = (uint32_t) mktime (tm); -#endif /* TIMELOCAL */ - break; - - default: - rc_log(LOG_ERR, "rc_avpair_parse: unknown attribute type %d", pair->type); - - if (*first_pair) { - rc_avpair_free(*first_pair); - *first_pair = NULL; - } - - free (pair); - return -1; - } - - /* XXX: Fix up Digest-Attributes */ - switch (pair->attribute) { - case PW_DIGEST_REALM: - case PW_DIGEST_NONCE: - case PW_DIGEST_METHOD: - case PW_DIGEST_URI: - case PW_DIGEST_QOP: - case PW_DIGEST_ALGORITHM: - case PW_DIGEST_BODY_DIGEST: - case PW_DIGEST_CNONCE: - case PW_DIGEST_NONCE_COUNT: - case PW_DIGEST_USER_NAME: - - /* overlapping! */ - if (pair->lvalue > AUTH_STRING_LEN - 2) - pair->lvalue = AUTH_STRING_LEN - 2; - - memmove(&pair->strvalue[2], &pair->strvalue[0], pair->lvalue); - pair->strvalue[0] = pair->attribute - PW_DIGEST_REALM + 1; - pair->lvalue += 2; - pair->strvalue[1] = pair->lvalue; - pair->strvalue[pair->lvalue] = '\0'; - pair->attribute = PW_DIGEST_ATTRIBUTES; - } - - pair->next = NULL; - - if (*first_pair == NULL) { - *first_pair = pair; - } else { - link = *first_pair; - - while (link->next != NULL) { - link = link->next; - } - - link->next = pair; - } - - mode = PARSE_MODE_NAME; - break; - - default: - mode = PARSE_MODE_NAME; - break; - } - } - - return 0; -} - -/* - * Function: rc_avpair_tostr - * - * Purpose: Translate an av_pair into two strings - * - * Returns: 0 on success, -1 on failure - * - */ - -int rc_avpair_tostr (const rc_handle *rh, VALUE_PAIR *pair, char *name, int ln, char *value, int lv) -{ - DICT_VALUE *dval; - char buffer[32]; - struct in_addr inad; - struct in6_addr in6ad; - unsigned char *ptr; - - *name = *value = '\0'; - - if (!pair || pair->name[0] == '\0') { - rc_log(LOG_ERR, "rc_avpair_tostr: pair is NULL or empty"); - return -1; - } - - strncpy(name, pair->name, (size_t) ln); - - switch (pair->type) { - case PW_TYPE_STRING: - lv--; - ptr = (unsigned char *) pair->strvalue; - - if (pair->attribute == PW_DIGEST_ATTRIBUTES) { - pair->strvalue[*(ptr + 1)] = '\0'; - ptr += 2; - } - - while (*ptr != '\0') { - if (!(isprint (*ptr))) { - sprintf (buffer, "\\%03o", *ptr); - strncat(value, buffer, (size_t) lv); - lv -= 4; - - if (lv < 0) break; - } else { - strncat(value, (char *)ptr, 1); - lv--; - - if (lv < 0) break; - } - - ptr++; - } - - break; - - case PW_TYPE_INTEGER: - dval = rc_dict_getval (rh, pair->lvalue, pair->name); - - if (dval != NULL) { - strncpy(value, dval->name, (size_t) lv-1); - } else { - sprintf (buffer, "%ld", (long int)pair->lvalue); - strncpy(value, buffer, (size_t) lv); - } - - break; - - case PW_TYPE_IPADDR: - //rc_log(LOG_NOTICE, "rc_avpair_tostr: PW_TYPE_IPADDR "); - inad.s_addr = htonl(pair->lvalue); - strncpy (value, inet_ntoa (inad), (size_t) lv-1); - break; - - case PW_TYPE_IPV6ADDR: - - //rc_log(LOG_NOTICE, "rc_avpair_tostr: PW_TYPE_IPV6ADDR "); - if (!inet_ntop(AF_INET6, (const void *) &pair->in6addrvalue, value, (size_t) lv-1)) { - rc_log(LOG_ERR, "rc_avpair_tostr: PW_TYPE_IPV6ADDR error inet_ntop: %s", strerror(errno)); - } - - break; - - case PW_TYPE_DATE: - strftime (buffer, sizeof (buffer), "%m/%d/%y %H:%M:%S", - gmtime ((time_t *) & pair->lvalue)); - strncpy(value, buffer, lv-1); - break; - - default: - rc_log(LOG_ERR, "rc_avpair_tostr: unknown attribute type %d", pair->type); - return -1; - break; - } - - return 0; -} - -/* - * Function: rc_avpair_log - * - * Purpose: format sequence of attribute value pairs into printable - * string. The string is dynamically allocated and is automatically - * freed when rc_handle is destroyed or rc_avpair_log() is called - * again. - * - */ -char * -rc_avpair_log(rc_handle *rh, VALUE_PAIR *pair) -{ - size_t len, nlen; - VALUE_PAIR *vp; - char name[33], value[256]; - char *cp; - - len = 0; - - for (vp = pair; vp != NULL; vp = vp->next) { - if (rc_avpair_tostr(rh, vp, name, sizeof(name), value, - sizeof(value)) == -1) - return NULL; - - nlen = len + 32 + 3 + strlen(value) + 2 + 2; - cp = realloc(rh->ppbuf, nlen); - - if (cp == NULL) { - rc_log(LOG_ERR, "rc_avpair_log: can't allocate memory"); - return NULL; - } - - sprintf(cp + len, "%-32s = '%s'\n", name, value); - rh->ppbuf = cp; - len = nlen - 1; - } - - return (len > 0) ? rh->ppbuf : NULL; -} - -/* - * Function: rc_avpair_readin - * - * Purpose: get a sequence of attribute value pairs from the file input - * and make them into a list of value_pairs - * - */ - -VALUE_PAIR *rc_avpair_readin(const rc_handle *rh, FILE *input) -{ - VALUE_PAIR *vp = NULL; - char buffer[1024], *q; - - while (fgets(buffer, sizeof(buffer), input) != NULL) { - q = buffer; - - while(*q && isspace(*q)) q++; - - if ((*q == '\n') || (*q == '#') || (*q == '\0')) - continue; - - if (rc_avpair_parse(rh, q, &vp) < 0) { - rc_log(LOG_ERR, "rc_avpair_readin: malformed attribute: %s", buffer); - rc_avpair_free(vp); - return NULL; - } - } - - return vp; -} diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/lib/buildreq.c b/openair3/PMIPv6/freeradius-client-1.1.6/lib/buildreq.c deleted file mode 100644 index a2f82ef2c7..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/lib/buildreq.c +++ /dev/null @@ -1,347 +0,0 @@ -/* - * $Id: buildreq.c,v 1.15 2008/03/05 16:35:20 cparker Exp $ - * - * Copyright (C) 1995,1997 Lars Fenneberg - * - * See the file COPYRIGHT for the respective terms and conditions. - * If the file is missing contact me at lf@elemental.net - * and I'll send you a copy. - * - */ - -#include -#include -#include - -unsigned char rc_get_seqnbr(rc_handle *); - -/* - * Function: rc_buildreq - * - * Purpose: builds a skeleton RADIUS request using information from the - * config file. - * - */ - -void rc_buildreq(rc_handle *rh, SEND_DATA *data, int code, char *server, unsigned short port, - char *secret, int timeout, int retries) -{ - data->server = server; - data->secret = secret; - data->svc_port = port; - data->seq_nbr = rc_get_seqnbr(rh); - data->timeout = timeout; - data->retries = retries; - data->code = code; -} - -/* - * Function: rc_guess_seqnbr - * - * Purpose: return a random sequence number - * - */ - -static unsigned char rc_guess_seqnbr(void) -{ - srandom((unsigned int)(time(NULL)+getpid())); - return (unsigned char)(random() & UCHAR_MAX); -} - -/* - * Function: rc_get_seqnbr - * - * Purpose: generate a sequence number - * - */ - -unsigned char rc_get_seqnbr(rc_handle *rh) -{ - FILE *sf; - int tries = 1; - int seq_nbr; - char *seqfile = rc_conf_str(rh, "seqfile"); - - if ((sf = fopen(seqfile, "a+")) == NULL) { - rc_log(LOG_ERR,"rc_get_seqnbr: couldn't open sequence file %s: %s", seqfile, strerror(errno)); - /* well, so guess a sequence number */ - return rc_guess_seqnbr(); - } - - while (do_lock_exclusive(sf)!= 0) { - if (errno != EWOULDBLOCK) { - rc_log(LOG_ERR, "rc_get_seqnbr: flock failure: %s: %s", seqfile, strerror(errno)); - fclose(sf); - return rc_guess_seqnbr(); - } - - tries++; - - if (tries <= 10) - rc_mdelay(500); - else - break; - } - - if (tries > 10) { - rc_log(LOG_ERR,"rc_get_seqnbr: couldn't get lock after %d tries: %s", tries-1, seqfile); - fclose(sf); - return rc_guess_seqnbr(); - } - - rewind(sf); - - if (fscanf(sf, "%d", &seq_nbr) != 1) { - rc_log(LOG_ERR,"rc_get_seqnbr: fscanf failure: %s", seqfile); - seq_nbr = rc_guess_seqnbr(); - } - - rewind(sf); - ftruncate(fileno(sf),0); - fprintf(sf,"%d\n", (seq_nbr+1) & UCHAR_MAX); - - fflush(sf); /* fflush because a process may read it between the do_unlock and fclose */ - - if (do_unlock(sf) != 0) - rc_log(LOG_ERR, "rc_get_seqnbr: couldn't release lock on %s: %s", seqfile, strerror(errno)); - - fclose(sf); - - return (unsigned char)seq_nbr; -} - -/* - * Function: rc_aaa - * - * Purpose: Builds an authentication/accounting request for port id client_port - * with the value_pairs send and submits it to a server - * - * Returns: received value_pairs in received, messages from the server in msg - * and 0 on success, negative on failure as return value - * - */ - -int rc_aaa(rc_handle *rh, uint32_t client_port, VALUE_PAIR *send, VALUE_PAIR **received, - char *msg, int add_nas_port, int request_type) -{ - SEND_DATA data; - VALUE_PAIR *adt_vp; - int result; - int i, skip_count; - SERVER *aaaserver; - int timeout = rc_conf_int(rh, "radius_timeout"); - int retries = rc_conf_int(rh, "radius_retries"); - int radius_deadtime = rc_conf_int(rh, "radius_deadtime"); - double start_time; - time_t dtime; - - if (request_type != PW_ACCOUNTING_REQUEST) { - aaaserver = rc_conf_srv(rh, "authserver"); - } else { - aaaserver = rc_conf_srv(rh, "acctserver"); - } - - if (aaaserver == NULL) - return ERROR_RC; - - data.send_pairs = send; - data.receive_pairs = NULL; - - if (add_nas_port != 0) { - /* - * Fill in NAS-Port - */ - if (rc_avpair_add(rh, &(data.send_pairs), PW_NAS_PORT, - &client_port, 0, 0) == NULL) { - rc_log(LOG_ERR,"rc_aaa: PW_NAS_PORT "); - return ERROR_RC; - } - } - - if (request_type == PW_ACCOUNTING_REQUEST) { - /* - * Fill in Acct-Delay-Time - */ - dtime = 0; - - if ((adt_vp = rc_avpair_add(rh, &(data.send_pairs), - PW_ACCT_DELAY_TIME, &dtime, 0, 0)) == NULL) { - rc_log(LOG_ERR,"rc_aaa: PW_ACCOUNTING_REQUEST"); - return ERROR_RC; - } - } - - start_time = rc_getctime(); - skip_count = 0; - result = ERROR_RC; - - for (i=0; (i < aaaserver->max) && (result != OK_RC) && (result != BADRESP_RC) - ; i++) { - if (aaaserver->deadtime_ends[i] != -1 && - aaaserver->deadtime_ends[i] > start_time) { - skip_count++; - continue; - } - - if (data.receive_pairs != NULL) { - rc_avpair_free(data.receive_pairs); - data.receive_pairs = NULL; - } - - rc_buildreq(rh, &data, request_type, aaaserver->name[i], - aaaserver->port[i], aaaserver->secret[i], timeout, retries); - - if (request_type == PW_ACCOUNTING_REQUEST) { - dtime = rc_getctime() - start_time; - rc_avpair_assign(adt_vp, &dtime, 0); - } - - result = rc_send_server (rh, &data, msg); - - if (result == TIMEOUT_RC && radius_deadtime > 0) - aaaserver->deadtime_ends[i] = start_time + (double)radius_deadtime; - } - - if (result == OK_RC || result == BADRESP_RC || skip_count == 0) - goto exit; - - result = ERROR_RC; - - for (i=0; (i < aaaserver->max) && (result != OK_RC) && (result != BADRESP_RC) - ; i++) { - if (aaaserver->deadtime_ends[i] == -1 || - aaaserver->deadtime_ends[i] <= start_time) { - continue; - } - - if (data.receive_pairs != NULL) { - rc_avpair_free(data.receive_pairs); - data.receive_pairs = NULL; - } - - rc_buildreq(rh, &data, request_type, aaaserver->name[i], - aaaserver->port[i], aaaserver->secret[i], timeout, retries); - - if (request_type == PW_ACCOUNTING_REQUEST) { - dtime = rc_getctime() - start_time; - rc_avpair_assign(adt_vp, &dtime, 0); - } - - result = rc_send_server (rh, &data, msg); - - if (result != TIMEOUT_RC) - aaaserver->deadtime_ends[i] = -1; - } - -exit: - - if (request_type != PW_ACCOUNTING_REQUEST) { - *received = data.receive_pairs; - } else { - rc_avpair_free(data.receive_pairs); - } - - return result; -} - -/* - * Function: rc_auth - * - * Purpose: Builds an authentication request for port id client_port - * with the value_pairs send and submits it to a server - * - * Returns: received value_pairs in received, messages from the server in msg - * and 0 on success, negative on failure as return value - * - */ - -int rc_auth(rc_handle *rh, uint32_t client_port, VALUE_PAIR *send, VALUE_PAIR **received, - char *msg) -{ - - return rc_aaa(rh, client_port, send, received, msg, 1, PW_ACCESS_REQUEST); -} - -/* - * Function: rc_auth_proxy - * - * Purpose: Builds an authentication request - * with the value_pairs send and submits it to a server. - * Works for a proxy; does not add IP address, and does - * does not rely on config file. - * - * Returns: received value_pairs in received, messages from the server in msg - * and 0 on success, negative on failure as return value - * - */ - -int rc_auth_proxy(rc_handle *rh, VALUE_PAIR *send, VALUE_PAIR **received, char *msg) -{ - - return rc_aaa(rh, 0, send, received, msg, 0, PW_ACCESS_REQUEST); -} - - -/* - * Function: rc_acct - * - * Purpose: Builds an accounting request for port id client_port - * with the value_pairs send - * - * Remarks: NAS-IP-Address, NAS-Port and Acct-Delay-Time get filled - * in by this function, the rest has to be supplied. - */ - -int rc_acct(rc_handle *rh, uint32_t client_port, VALUE_PAIR *send) -{ - char msg[4096]; - - return rc_aaa(rh, client_port, send, NULL, msg, 1, PW_ACCOUNTING_REQUEST); -} - -/* - * Function: rc_acct_proxy - * - * Purpose: Builds an accounting request with the value_pairs send - * - */ - -int rc_acct_proxy(rc_handle *rh, VALUE_PAIR *send) -{ - char msg[4096]; - - return rc_aaa(rh, 0, send, NULL, msg, 0, PW_ACCOUNTING_REQUEST); -} - -/* - * Function: rc_check - * - * Purpose: ask the server hostname on the specified port for a - * status message - * - */ - -int rc_check(rc_handle *rh, char *host, char *secret, unsigned short port, char *msg) -{ - SEND_DATA data; - int result; - uint32_t service_type; - int timeout = rc_conf_int(rh, "radius_timeout"); - int retries = rc_conf_int(rh, "radius_retries"); - - data.send_pairs = data.receive_pairs = NULL; - - /* - * Fill in Service-Type - */ - - service_type = PW_ADMINISTRATIVE; - rc_avpair_add(rh, &(data.send_pairs), PW_SERVICE_TYPE, &service_type, 0, 0); - - rc_buildreq(rh, &data, PW_STATUS_SERVER, host, port, secret, timeout, retries); - result = rc_send_server (rh, &data, msg); - - rc_avpair_free(data.receive_pairs); - - return result; -} diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/lib/clientid.c b/openair3/PMIPv6/freeradius-client-1.1.6/lib/clientid.c deleted file mode 100644 index 8b0aa09285..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/lib/clientid.c +++ /dev/null @@ -1,147 +0,0 @@ -/* - * $Id: clientid.c,v 1.7 2007/07/11 17:29:29 cparker Exp $ - * - * Copyright (C) 1995,1996,1997 Lars Fenneberg - * - * See the file COPYRIGHT for the respective terms and conditions. - * If the file is missing contact me at lf@elemental.net - * and I'll send you a copy. - * - */ - -#include -#include -#include - -struct map2id_s { - char *name; - uint32_t id; - - struct map2id_s *next; -}; - -/* - * Function: rc_read_mapfile - * - * Purpose: Read in the ttyname to port id map file - * - * Arguments: the file name of the map file - * - * Returns: zero on success, negative integer on failure - */ - -int rc_read_mapfile(rc_handle *rh, char *filename) -{ - char buffer[1024]; - FILE *mapfd; - char *c, *name, *id, *q; - struct map2id_s *p; - int lnr = 0; - - if ((mapfd = fopen(filename,"r")) == NULL) { - rc_log(LOG_ERR,"rc_read_mapfile: can't read %s: %s", filename, strerror(errno)); - return -1; - } - -#define SKIP(p) while(*p && isspace(*p)) p++; - - while (fgets(buffer, sizeof(buffer), mapfd) != NULL) { - lnr++; - - q = buffer; - - SKIP(q); - - if ((*q == '\n') || (*q == '#') || (*q == '\0')) - continue; - - if (( c = strchr(q, ' ')) || (c = strchr(q,'\t'))) { - - *c = '\0'; - c++; - SKIP(c); - - name = q; - id = c; - - if ((p = (struct map2id_s *)malloc(sizeof(*p))) == NULL) { - rc_log(LOG_CRIT,"rc_read_mapfile: out of memory"); - fclose(mapfd); - return -1; - } - - p->name = strdup(name); - p->id = atoi(id); - p->next = rh->map2id_list; - rh->map2id_list = p; - - } else { - - rc_log(LOG_ERR, "rc_read_mapfile: malformed line in %s, line %d", filename, lnr); - fclose(mapfd); - return -1; - - } - } - -#undef SKIP - - fclose(mapfd); - - return 0; -} - -/* - * Function: rc_map2id - * - * Purpose: Map ttyname to port id - * - * Arguments: full pathname of the tty - * - * Returns: port id, zero if no entry found - */ - -uint32_t rc_map2id(rc_handle *rh, char *name) -{ - struct map2id_s *p; - char ttyname[PATH_MAX]; - - *ttyname = '\0'; - - if (*name != '/') - strcpy(ttyname, "/dev/"); - - strncat(ttyname, name, sizeof(ttyname)-strlen(ttyname)-1); - - for(p = rh->map2id_list; p; p = p->next) - if (!strcmp(ttyname, p->name)) return p->id; - - rc_log(LOG_WARNING,"rc_map2id: can't find tty %s in map database", ttyname); - - return 0; -} - -/* - * Function: rc_map2id_free - * - * Purpose: Free allocated map2id list - * - * Arguments: Radius Client handle - */ - -void -rc_map2id_free(rc_handle *rh) -{ - struct map2id_s *p, *np; - - if (rh->map2id_list == NULL) - return; - - for(p = rh->map2id_list; p != NULL; p = np) { - np = p->next; - free(p->name); - free(p); - } - - rh->map2id_list = NULL; -} diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/lib/config.c b/openair3/PMIPv6/freeradius-client-1.1.6/lib/config.c deleted file mode 100644 index 79981eca5b..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/lib/config.c +++ /dev/null @@ -1,984 +0,0 @@ -/* - * $Id: config.c,v 1.22 2008/02/11 06:54:23 sobomax Exp $ - * - * Copyright (C) 1995,1996,1997 Lars Fenneberg - * - * Copyright 1992 Livingston Enterprises, Inc. - * - * Copyright 1992,1993, 1994,1995 The Regents of the University of Michigan - * and Merit Network, Inc. All Rights Reserved - * - * See the file COPYRIGHT for the respective terms and conditions. - * If the file is missing contact me at lf@elemental.net - * and I'll send you a copy. - * - */ - -#include -#include -#include -#include - -/* - * Function: find_option - * - * Purpose: find an option in the option list - * - * Returns: pointer to option on success, NULL otherwise - */ - -static OPTION *find_option(rc_handle *rh, const char *optname, unsigned int type) -{ - int i; - - /* there're so few options that a binary search seems not necessary */ - for (i = 0; i < NUM_OPTIONS; i++) { - if (!strcmp(rh->config_options[i].name, optname) && - (rh->config_options[i].type & type)) { - return &rh->config_options[i]; - } - } - - return NULL; -} - -/* - * Function: set_option_... - * - * Purpose: set a specific option doing type conversions - * - * Returns: 0 on success, -1 on failure - */ - -static int set_option_str(const char *filename, int line, OPTION *option, const char *p) -{ - if (p) { - option->val = (void *) strdup(p); - - if (option->val == NULL) { - rc_log(LOG_CRIT, "read_config: out of memory"); - return -1; - } - } else { - option->val = NULL; - } - - return 0; -} - -static int set_option_int(const char *filename, int line, OPTION *option, const char *p) -{ - int *iptr; - - if (p == NULL) { - rc_log(LOG_ERR, "%s: line %d: bogus option value", filename, line); - return -1; - } - - if ((iptr = malloc(sizeof(*iptr))) == NULL) { - rc_log(LOG_CRIT, "read_config: out of memory"); - return -1; - } - - *iptr = atoi(p); - option->val = (void *) iptr; - - return 0; -} - -static int set_option_srv(const char *filename, int line, OPTION *option, const char *p) -{ - SERVER *serv; - char *p_pointer; - char *p_dupe; - char *p_save; - char *q; - char *s; - struct servent *svp; - - p_dupe = strdup(p); - - if (p_dupe == NULL) { - rc_log(LOG_ERR, "%s: line %d: Invalid option or memory failure", filename, line); - return -1; - } - - serv = (SERVER *) option->val; - - if (serv == NULL) { - rc_log(LOG_ERR, "[freeradius-client] option->val / server is NULL, allocating memory"); - serv = malloc(sizeof(*serv)); - - if (serv == NULL) { - rc_log(LOG_CRIT, "read_config: out of memory"); - free(p_dupe); - return -1; - } - - serv->max = 0; - } - - p_pointer = strtok_r(p_dupe, ", \t", &p_save); - - /* Check to see if we have 'servername:port' syntax */ - if ((q = strchr(p_pointer,':')) != NULL) { - *q = '\0'; - q++; - - /* Check to see if we have 'servername:port:secret' syntax */ - if((s = strchr(q,':')) != NULL) { - *s = '\0'; - s++; - serv->secret[serv->max] = strdup(s); - - if (serv->secret[serv->max] == NULL) { - rc_log(LOG_CRIT, "read_config: out of memory"); - - if (option->val == NULL) { - free(p_dupe); - free(serv); - } - - return -1; - } - } - } - - if(q && strlen(q) > 0) { - serv->port[serv->max] = atoi(q); - } else { - if (!strcmp(option->name,"authserver")) - if ((svp = getservbyname ("radius", "udp")) == NULL) - serv->port[serv->max] = PW_AUTH_UDP_PORT; - else - serv->port[serv->max] = ntohs ((unsigned int) svp->s_port); - else if (!strcmp(option->name, "acctserver")) - if ((svp = getservbyname ("radacct", "udp")) == NULL) - serv->port[serv->max] = PW_ACCT_UDP_PORT; - else - serv->port[serv->max] = ntohs ((unsigned int) svp->s_port); - else { - rc_log(LOG_ERR, "%s: line %d: no default port for %s", filename, line, option->name); - - if (option->val == NULL) { - free(p_dupe); - free(serv); - } - - return -1; - } - } - - serv->name[serv->max] = strdup(p_pointer); - //rc_log(LOG_NOTICE,"set_option_srv filename %s serv->name %s, serv->port[%d]=%d serv->secret[%d]=%s", - // filename, serv->name[serv->max], serv->max, serv->port[serv->max], serv->max,serv->secret[serv->max]); - - if (serv->name[serv->max] == NULL) { - rc_log(LOG_CRIT, "read_config: out of memory"); - - if (option->val == NULL) { - free(p_dupe); - free(serv); - } - - return -1; - } - - free(p_dupe); - - serv->deadtime_ends[serv->max] = -1; - serv->max++; - - if (option->val == NULL) - option->val = (void *)serv; - - return 0; -} - -static int set_option_auo(const char *filename, int line, OPTION *option, const char *p) -{ - int *iptr; - char *p_dupe = NULL; - char *p_pointer = NULL; - char *p_save = NULL; - - p_dupe = strdup(p); - - if (p_dupe == NULL) { - rc_log(LOG_WARNING, "%s: line %d: bogus option value", filename, line); - return -1; - } - - if ((iptr = malloc(sizeof(iptr))) == NULL) { - rc_log(LOG_CRIT, "read_config: out of memory"); - return -1; - } - - *iptr = 0; - /*if(strstr(p_dupe,", \t") != NULL) {*/ - p_pointer = strtok_r(p_dupe, ", \t", &p_save); - /*}*/ - - if (!strncmp(p_pointer, "local", 5)) - *iptr = AUTH_LOCAL_FST; - else if (!strncmp(p_pointer, "radius", 6)) - *iptr = AUTH_RADIUS_FST; - else { - rc_log(LOG_ERR,"%s: auth_order: unknown keyword: %s", filename, p); - free(p_dupe); - return -1; - } - - p_pointer = strtok_r(NULL, ", \t", &p_save); - - if (p_pointer && (*p_pointer != '\0')) { - if ((*iptr & AUTH_RADIUS_FST) && !strcmp(p_pointer, "local")) - *iptr = (*iptr) | AUTH_LOCAL_SND; - else if ((*iptr & AUTH_LOCAL_FST) && !strcmp(p_pointer, "radius")) - *iptr = (*iptr) | AUTH_RADIUS_SND; - else { - rc_log(LOG_ERR,"%s: auth_order: unknown or unexpected keyword: %s", filename, p); - free(p_dupe); - return -1; - } - } - - option->val = (void *) iptr; - - free(p_dupe); - return 0; -} - - -/* Function: rc_add_config - * - * Purpose: allow a config option to be added to rc_handle from inside a program - * - * Returns: 0 on success, -1 on failure - */ - -int rc_add_config(rc_handle *rh, const char *option_name, const char *option_val, const char *source, const int line) -{ - OPTION *option; - - if ((option = find_option(rh, option_name, OT_ANY)) == NULL) { - rc_log(LOG_ERR, "ERROR: unrecognized option: %s", option_name); - return -1; - } - - if (option->status != ST_UNDEF) { - rc_log(LOG_ERR, "ERROR: duplicate option: %s", option_name); - return -1; - } - - switch (option->type) { - case OT_STR: - if (set_option_str(source, line, option, option_val) < 0) { - return -1; - } - - break; - - case OT_INT: - if (set_option_int(source, line, option, option_val) < 0) { - return -1; - } - - break; - - case OT_SRV: - if (set_option_srv(source, line, option, option_val) < 0) { - return -1; - } - - break; - - case OT_AUO: - if (set_option_auo(source, line, option, option_val) < 0) { - return -1; - } - - break; - - default: - rc_log(LOG_CRIT, "rc_read_config: impossible case branch!"); - abort(); - } - - return 0; -} - -/* - * Function: rc_config_init - * - * Purpose: initialize the configuration structure from an external program. For use when not - * running a standalone client that reads from a config file. - * - * Returns: rc_handle on success, NULL on failure - */ - -rc_handle * -rc_config_init(rc_handle *rh) -{ - int i; - SERVER *authservers; - SERVER *acctservers; - - rh->config_options = malloc(sizeof(config_options_default)); - - if (rh->config_options == NULL) { - rc_log(LOG_CRIT, "rc_config_init: out of memory"); - rc_destroy(rh); - return NULL; - } - - memcpy(rh->config_options, &config_options_default, sizeof(config_options_default)); - - authservers = rc_conf_srv(rh, "authserver"); - acctservers = rc_conf_srv(rh, "acctserver"); - authservers = malloc(sizeof(SERVER)); - acctservers = malloc(sizeof(SERVER)); - - if(authservers == NULL || acctservers == NULL) { - rc_log(LOG_CRIT, "rc_config_init: error initializing server structs"); - rc_destroy(rh); - return NULL; - } - - - authservers->max = 0; - acctservers->max = 0; - - for(i=0; i < SERVER_MAX; i++) { - authservers->name[i] = NULL; - authservers->secret[i] = NULL; - acctservers->name[i] = NULL; - acctservers->secret[i] = NULL; - } - - return rh; -} - - -/* - * Function: rc_read_config - * - * Purpose: read the global config file - * - * Returns: new rc_handle on success, NULL when failure - */ - -rc_handle * -rc_read_config(char *filename) -{ - FILE *configfd; - char buffer[512], *p; - OPTION *option; - int line; - size_t pos; - rc_handle *rh; - - rh = rc_new(); - - if (rh == NULL) - return NULL; - - rh->config_options = malloc(sizeof(config_options_default)); - - if (rh->config_options == NULL) { - rc_log(LOG_CRIT, "rc_read_config: out of memory"); - rc_destroy(rh); - return NULL; - } - - memcpy(rh->config_options, &config_options_default, sizeof(config_options_default)); - - if ((configfd = fopen(filename,"r")) == NULL) { - rc_log(LOG_ERR,"rc_read_config: can't open %s: %s", filename, strerror(errno)); - rc_destroy(rh); - return NULL; - } - - line = 0; - - while ((fgets(buffer, sizeof(buffer), configfd) != NULL)) { - line++; - p = buffer; - - if ((*p == '\n') || (*p == '#') || (*p == '\0')) - continue; - - p[strlen(p)-1] = '\0'; - - - if ((pos = strcspn(p, "\t ")) == 0) { - rc_log(LOG_ERR, "%s: line %d: bogus format: %s", filename, line, p); - fclose(configfd); - rc_destroy(rh); - return NULL; - } - - p[pos] = '\0'; - - if ((option = find_option(rh, p, OT_ANY)) == NULL) { - rc_log(LOG_ERR, "%s: line %d: unrecognized keyword: %s", filename, line, p); - fclose(configfd); - rc_destroy(rh); - return NULL; - } - - if (option->status != ST_UNDEF) { - rc_log(LOG_ERR, "%s: line %d: duplicate option line: %s", filename, line, p); - fclose(configfd); - rc_destroy(rh); - return NULL; - } - - p += pos+1; - - while (isspace(*p)) - p++; - - pos = strlen(p) - 1; - - while(pos >= 0 && isspace(p[pos])) - pos--; - - p[pos + 1] = '\0'; - - switch (option->type) { - case OT_STR: - if (set_option_str(filename, line, option, p) < 0) { - fclose(configfd); - rc_destroy(rh); - return NULL; - } - - break; - - case OT_INT: - if (set_option_int(filename, line, option, p) < 0) { - fclose(configfd); - rc_destroy(rh); - return NULL; - } - - break; - - case OT_SRV: - if (set_option_srv(filename, line, option, p) < 0) { - fclose(configfd); - rc_destroy(rh); - return NULL; - } - - break; - - case OT_AUO: - if (set_option_auo(filename, line, option, p) < 0) { - fclose(configfd); - rc_destroy(rh); - return NULL; - } - - break; - - default: - rc_log(LOG_CRIT, "rc_read_config: impossible case branch!"); - abort(); - } - } - - fclose(configfd); - - if (test_config(rh, filename) == -1) { - rc_destroy(rh); - return NULL; - } - - return rh; -} - -/* - * Function: rc_conf_str, rc_conf_int, rc_conf_src - * - * Purpose: get the value of a config option - * - * Returns: config option value - */ - -char *rc_conf_str(rc_handle *rh, char *optname) -{ - OPTION *option; - - option = find_option(rh, optname, OT_STR); - - if (option != NULL) { - return (char *)option->val; - } else { - rc_log(LOG_CRIT, "rc_conf_str: unkown config option requested: %s", optname); - abort(); - return NULL; - } -} - -int rc_conf_int(rc_handle *rh, char *optname) -{ - OPTION *option; - - option = find_option(rh, optname, OT_INT|OT_AUO); - - if (option != NULL) { - return *((int *)option->val); - } else { - rc_log(LOG_CRIT, "rc_conf_int: unkown config option requested: %s", optname); - abort(); - return 0; - } -} - -SERVER *rc_conf_srv(rc_handle *rh, char *optname) -{ - OPTION *option; - - option = find_option(rh, optname, OT_SRV); - - if (option != NULL) { - return (SERVER *)option->val; - } else { - rc_log(LOG_CRIT, "rc_conf_srv: unkown config option requested: %s", optname); - abort(); - return NULL; - } -} - -/* - * Function: test_config - * - * Purpose: test the configuration the user supplied - * - * Returns: 0 on success, -1 when failure - */ - -int test_config(rc_handle *rh, char *filename) -{ -#if 0 - struct stat st; - char *file; -#endif - - if (!(rc_conf_srv(rh, "authserver")->max)) { - rc_log(LOG_ERR,"%s: no authserver specified", filename); - return -1; - } - - if (!(rc_conf_srv(rh, "acctserver")->max)) { - rc_log(LOG_ERR,"%s: no acctserver specified", filename); - return -1; - } - - if (!rc_conf_str(rh, "servers")) { - rc_log(LOG_ERR,"%s: no servers file specified", filename); - return -1; - } - - if (!rc_conf_str(rh, "dictionary")) { - rc_log(LOG_ERR,"%s: no dictionary specified", filename); - return -1; - } - - if (rc_conf_int(rh, "radius_timeout") <= 0) { - rc_log(LOG_ERR,"%s: radius_timeout <= 0 is illegal", filename); - return -1; - } - - if (rc_conf_int(rh, "radius_retries") <= 0) { - rc_log(LOG_ERR,"%s: radius_retries <= 0 is illegal", filename); - return -1; - } - - if (rc_conf_int(rh, "radius_deadtime") < 0) { - rc_log(LOG_ERR,"%s: radius_deadtime is illegal", filename); - return -1; - } - -#if 0 - file = rc_conf_str(rh, "login_local"); - - if (stat(file, &st) == 0) { - if (!S_ISREG(st.st_mode)) { - rc_log(LOG_ERR,"%s: not a regular file: %s", filename, file); - return -1; - } - } else { - rc_log(LOG_ERR,"%s: file not found: %s", filename, file); - return -1; - } - - file = rc_conf_str(rh, "login_radius"); - - if (stat(file, &st) == 0) { - if (!S_ISREG(st.st_mode)) { - rc_log(LOG_ERR,"%s: not a regular file: %s", filename, file); - return -1; - } - } else { - rc_log(LOG_ERR,"%s: file not found: %s", filename, file); - return -1; - } - -#endif - - if (rc_conf_int(rh, "login_tries") <= 0) { - rc_log(LOG_ERR,"%s: login_tries <= 0 is illegal", filename); - return -1; - } - - if (rc_conf_str(rh, "seqfile") == NULL) { - rc_log(LOG_ERR,"%s: seqfile not specified", filename); - return -1; - } - - if (rc_conf_int(rh, "login_timeout") <= 0) { - rc_log(LOG_ERR,"%s: login_timeout <= 0 is illegal", filename); - return -1; - } - - if (rc_conf_str(rh, "mapfile") == NULL) { - rc_log(LOG_ERR,"%s: mapfile not specified", filename); - return -1; - } - - if (rc_conf_str(rh, "nologin") == NULL) { - rc_log(LOG_ERR,"%s: nologin not specified", filename); - return -1; - } - - return 0; -} - -/* - * Function: rc_find_match - * - * Purpose: see if ip_addr is one of the ip addresses of hostname - * - * Returns: 0 on success, -1 when failure - * - */ - -static int find_match (struct in6_addr *ip_addr, char *hostname) -{ - - struct in6_addr addr; - char **paddr; - struct hostent *hp; - - //rc_log(LOG_NOTICE,"find_match(%x:%x:%x:%x:%x:%x:%x:%x/%s)\n", NIP6ADDR(ip_addr), hostname); - if (rc_good_ipaddr (hostname) == 0) { - if (rc_get_ipaddr(hostname, &addr) == 0) { - //rc_log(LOG_NOTICE,"find_match %x:%x:%x:%x:%x:%x:%x:%x/%s Success@1\n", NIP6ADDR(ip_addr), hostname); - return 0; - } - - if (IN6_ARE_ADDR_EQUAL(ip_addr, &addr)) { - //rc_log(LOG_NOTICE,"find_match %x:%x:%x:%x:%x:%x:%x:%x/%s Success@2\n", NIP6ADDR(ip_addr), hostname); - return 0; - } - - //rc_log(LOG_NOTICE,"find_match %x:%x:%x:%x:%x:%x:%x:%x/%s Failed@3\n", NIP6ADDR(ip_addr), hostname); - return -1; - } - - if ((hp = rc_gethostbyname(hostname)) == NULL) { - //rc_log(LOG_NOTICE,"find_match %x:%x:%x:%x:%x:%x:%x:%x/%s Failed@4\n", NIP6ADDR(ip_addr), hostname); - return -1; - } - - for (paddr = hp->h_addr_list; *paddr; paddr++) { - addr = ** (struct in6_addr **) paddr; - - //rc_log(LOG_NOTICE,"find_match Compare %x:%x:%x:%x:%x:%x:%x:%x/%x:%x:%x:%x:%x:%x:%x:%x\n", NIP6ADDR(ip_addr), NIP6ADDR(&addr)); - if (IN6_ARE_ADDR_EQUAL(ip_addr, &addr)) { - //rc_log(LOG_NOTICE,"find_match %x:%x:%x:%x:%x:%x:%x:%x/%s Success@5\n", NIP6ADDR(ip_addr), hostname); - return 0; - } - } - - //rc_log(LOG_NOTICE,"find_match %x:%x:%x:%x:%x:%x:%x:%x/%s Failed@6\n", NIP6ADDR(ip_addr), hostname); - return -1; -} - -/* - * Function: rc_ipaddr_local - * - * Purpose: checks if provided address is local address - * - * Returns: 0 if local, 1 if not local, -1 on failure - * - */ - -static int -rc_ipaddr_local(struct in6_addr *ip_addr) -{ - int temp_sock, res, serrno; - struct sockaddr_in6 sin; - - temp_sock = socket(AF_INET6, SOCK_DGRAM, 0); - - if (temp_sock == -1) - return -1; - - memset(&sin, '\0', sizeof(sin)); - sin.sin6_family = AF_INET6; - memcpy (sin.sin6_addr.s6_addr, ip_addr->s6_addr, 16); - sin.sin6_port = htons(0); - res = bind(temp_sock, (struct sockaddr *)&sin, sizeof(sin)); - serrno = errno; - close(temp_sock); - - if (res == 0) - return 0; - - if (serrno == EADDRNOTAVAIL) - return 1; - - return -1; -} - -/* - * Function: rc_is_myname - * - * Purpose: check if provided name refers to ourselves - * - * Returns: 0 if yes, 1 if no and -1 on failure - * - */ - -static int -rc_is_myname(char *hostname) -{ - struct in6_addr addr; - struct in6_addr **paddr; - struct hostent *hp; - int res; - - //rc_log(LOG_NOTICE,"rc_is_myname(%s)", hostname); - if (rc_good_ipaddr(hostname) == 0) { - if (rc_get_ipaddr(hostname, &addr) == 0) { - //rc_log(LOG_NOTICE,"rc_is_myname(%s) return false", hostname); - return -1; - } - - return rc_ipaddr_local(&addr); - } - - if ((hp = rc_gethostbyname(hostname)) == NULL) - return -1; - - for (paddr = (struct in6_addr**)hp->h_addr_list; *paddr; paddr++) { - addr = **(struct in6_addr **)paddr; - res = rc_ipaddr_local(&addr); - - if (res == 0 || res == -1) { - //rc_log(LOG_NOTICE,"rc_is_myname(%s) return %d", hostname, res); - return res; - } - } - - //rc_log(LOG_NOTICE,"rc_is_myname(%s) return 1", hostname); - return 1; -} - -/* - * Function: rc_find_server - * - * Purpose: locate a server in the rh config or if not found, check for a servers file - * - * Returns: 0 on success, -1 on failure - * - */ - -int rc_find_server (rc_handle *rh, char *server_name, struct in6_addr *ip_addr, char *secret) -{ - int i; - size_t len; - int result = 0; - FILE *clientfd; - char *h; - char *s; - char buffer[128]; - char hostnm[AUTH_ID_LEN + 1]; - char *buffer_save; - char *hostnm_save; - SERVER *authservers; - SERVER *acctservers; - - /* Lookup the IP address of the radius server */ - if (rc_get_ipaddr (server_name, ip_addr) == (uint32_t) 0) { - //rc_log(LOG_NOTICE,"rc_find_server(%s)/rc_get_ipaddr() Failed\n", server_name); - return -1; - } - - //rc_log(LOG_NOTICE,"rc_find_server(%s)/rc_get_ipaddr success : %x:%x:%x:%x:%x:%x:%x:%x\n", server_name, NIP6ADDR(ip_addr)); - - /* Check to see if the server secret is defined in the rh config */ - if( (authservers = rc_conf_srv(rh, "authserver")) != NULL ) { - //rc_log(LOG_NOTICE,"rc_find_server(%s) parsing config authserver", server_name); - for( i = 0; i < authservers->max; i++ ) { - //rc_log(LOG_NOTICE,"rc_find_server(%s) parsing %s (secret=%s)", - // server_name, authservers->name[i], authservers->secret[i]); - if( (strncmp(server_name, authservers->name[i], strlen(server_name)) == 0) && - (authservers->secret[i] != NULL) ) { - memset (secret, '\0', MAX_SECRET_LENGTH); - len = strlen (authservers->secret[i]); - - if (len > MAX_SECRET_LENGTH) { - len = MAX_SECRET_LENGTH; - } - - strncpy (secret, authservers->secret[i], (size_t) len); - secret[MAX_SECRET_LENGTH] = '\0'; - //rc_log(LOG_NOTICE,"rc_find_server(%s) authservers secret: %s\n", server_name, secret); - return 0; - } - } - } - - //rc_log(LOG_NOTICE,"rc_find_server(%s) parsed config authserver", server_name); - - if( (acctservers = rc_conf_srv(rh, "acctserver")) != NULL ) { - for( i = 0; i < acctservers->max; i++ ) { - if( (strncmp(server_name, acctservers->name[i], strlen(server_name)) == 0) && - (acctservers->secret[i] != NULL) ) { - memset (secret, '\0', MAX_SECRET_LENGTH); - len = strlen (acctservers->secret[i]); - - if (len > MAX_SECRET_LENGTH) { - len = MAX_SECRET_LENGTH; - } - - strncpy (secret, acctservers->secret[i], (size_t) len); - secret[MAX_SECRET_LENGTH] = '\0'; - //rc_log(LOG_NOTICE,"rc_find_server(%s) acctservers secret: %s\n", server_name, secret); - return 0; - } - } - } - - //rc_log(LOG_NOTICE,"rc_find_server(%s) parsed config acctserver", server_name); - - /* We didn't find it in the rh_config or the servername is too long so look for a - * servers file to define the secret(s) - */ - - if ((clientfd = fopen (rc_conf_str(rh, "servers"), "r")) == NULL) { - rc_log(LOG_ERR, "rc_find_server: couldn't open file: %s: %s", strerror(errno), rc_conf_str(rh, "servers")); - return -1; - } - - //rc_log(LOG_NOTICE,"rc_find_server(%s) opened file: %s", server_name, rc_conf_str(rh, "servers")); - - while (fgets (buffer, sizeof (buffer), clientfd) != NULL) { - if (*buffer == '#') - continue; - - if ((h = strtok_r(buffer, " \t\n", &buffer_save)) == NULL) /* first hostname */ - continue; - - memset (hostnm, '\0', AUTH_ID_LEN); - len = strlen (h); - - if (len > AUTH_ID_LEN) { - len = AUTH_ID_LEN; - } - - strncpy (hostnm, h, (size_t) len); - hostnm[AUTH_ID_LEN] = '\0'; - - if ((s = strtok_r (NULL, " \t\n", &buffer_save)) == NULL) /* and secret field */ - continue; - - memset (secret, '\0', MAX_SECRET_LENGTH); - len = strlen (s); - - if (len > MAX_SECRET_LENGTH) { - len = MAX_SECRET_LENGTH; - } - - strncpy (secret, s, (size_t) len); - secret[MAX_SECRET_LENGTH] = '\0'; - - if (!strchr (hostnm, '/')) { /* If single name form */ - if (find_match (ip_addr, hostnm) == 0) { - result++; - break; - } - } else { /* / "paired" form */ - strtok_r(hostnm, "/", &hostnm_save); - - if (rc_is_myname(hostnm) == 0) { - /* If we're the 1st name, target is 2nd */ - if (find_match (ip_addr, hostnm_save) == 0) { - result++; - break; - } - } else { /* If we were 2nd name, target is 1st name */ - if (find_match (ip_addr, hostnm) == 0) { - result++; - break; - } - } - } - } - - fclose (clientfd); - //rc_log(LOG_NOTICE,"rc_find_server() finished parsing file: %s", rc_conf_str(rh, "servers")); - //rc_log(LOG_NOTICE,"rc_find_server() closed file: %s", rc_conf_str(rh, "servers")); - - if (result == 0) { - memset (buffer, '\0', sizeof (buffer)); - memset (secret, '\0', sizeof (secret)); - rc_log(LOG_ERR, "rc_find_server: couldn't find RADIUS server %s in %s", - server_name, rc_conf_str(rh, "servers")); - return -1; - } - - return 0; -} - -/* - * Function: rc_config_free - * - * Purpose: Free allocated config values - * - * Arguments: Radius Client handle - */ - -void -rc_config_free(rc_handle *rh) -{ - int i, j; - SERVER *serv; - - if (rh->config_options == NULL) - return; - - for (i = 0; i < NUM_OPTIONS; i++) { - if (rh->config_options[i].val == NULL) - continue; - - if (rh->config_options[i].type == OT_SRV) { - serv = (SERVER *)rh->config_options[i].val; - - for (j = 0; j < serv->max; j++) - free(serv->name[j]); - - free(serv); - } else { - free(rh->config_options[i].val); - } - } - - free(rh->config_options); - rh->config_options = NULL; -} diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/lib/dict.c b/openair3/PMIPv6/freeradius-client-1.1.6/lib/dict.c deleted file mode 100644 index d11b0b60ea..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/lib/dict.c +++ /dev/null @@ -1,480 +0,0 @@ -/* - * $Id: dict.c,v 1.10 2007/07/11 17:29:29 cparker Exp $ - * - * Copyright (C) 1995,1996,1997 Lars Fenneberg - * - * Copyright 1992 Livingston Enterprises, Inc. - * - * Copyright 1992,1993, 1994,1995 The Regents of the University of Michigan - * and Merit Network, Inc. All Rights Reserved - * - * See the file COPYRIGHT for the respective terms and conditions. - * If the file is missing contact me at lf@elemental.net - * and I'll send you a copy. - * - */ - -#include -#include -#include - -/* - * Function: rc_read_dictionary - * - * Purpose: Initialize the dictionary. Read all ATTRIBUTES into - * the dictionary_attributes list. Read all VALUES into - * the dictionary_values list. - * - */ - -int rc_read_dictionary (rc_handle *rh, const char *filename) -{ - FILE *dictfd; - char dummystr[AUTH_ID_LEN]; - char namestr[AUTH_ID_LEN]; - char valstr[AUTH_ID_LEN]; - char attrstr[AUTH_ID_LEN]; - char typestr[AUTH_ID_LEN]; - char optstr[AUTH_ID_LEN]; - char *cp, *ifilename; - int line_no; - DICT_ATTR *attr; - DICT_VALUE *dval; - DICT_VENDOR *dvend; - char buffer[256]; - int value; - int type; - - if ((dictfd = fopen (filename, "r")) == NULL) { - rc_log(LOG_ERR, "rc_read_dictionary: couldn't open dictionary %s: %s", - filename, strerror(errno)); - return -1; - } - - line_no = 0; - - while (fgets (buffer, sizeof (buffer), dictfd) != NULL) { - line_no++; - - /* Skip empty space */ - if (*buffer == '#' || *buffer == '\0' || *buffer == '\n' || \ - *buffer == '\r') { - continue; - } - - /* Strip out comments */ - cp = strchr(buffer, '#'); - - if (cp != NULL) { - *cp = '\0'; - } - - if (strncmp (buffer, "ATTRIBUTE", 9) == 0) { - optstr[0] = '\0'; - - /* Read the ATTRIBUTE line */ - if (sscanf (buffer, "%s%s%s%s%s", dummystr, namestr, - valstr, typestr, optstr) < 4) { - rc_log(LOG_ERR, "rc_read_dictionary: invalid attribute on line %d of dictionary %s", - line_no, filename); - fclose(dictfd); - return -1; - } - - /* - * Validate all entries - */ - if (strlen (namestr) > NAME_LENGTH) { - rc_log(LOG_ERR, "rc_read_dictionary: invalid name length on line %d of dictionary %s", - line_no, filename); - fclose(dictfd); - return -1; - } - - if (!isdigit (*valstr)) { - rc_log(LOG_ERR, - "rc_read_dictionary: invalid value on line %d of dictionary %s", - line_no, filename); - fclose(dictfd); - return -1; - } - - value = atoi (valstr); - - if (strcmp (typestr, "string") == 0) { - type = PW_TYPE_STRING; - } else if (strcmp (typestr, "integer") == 0) { - type = PW_TYPE_INTEGER; - } else if (strcmp (typestr, "ipaddr") == 0) { - type = PW_TYPE_IPADDR; - } else if (strcmp (typestr, "ipv6addr") == 0) { - type = PW_TYPE_IPV6ADDR; - } else if (strcmp (typestr, "date") == 0) { - type = PW_TYPE_DATE; - } else { - rc_log(LOG_ERR, - "rc_read_dictionary: invalid type on line %d of dictionary %s", - line_no, filename); - fclose(dictfd); - return -1; - } - - dvend = NULL; - - if (optstr[0] != '\0') { - char *cp1; - - for (cp1 = optstr; cp1 != NULL; cp1 = cp) { - cp = strchr(cp1, ','); - - if (cp != NULL) { - *cp = '\0'; - cp++; - } - - if (strncmp(cp1, "vendor=", 7) == 0) - cp1 += 7; - - dvend = rc_dict_findvend(rh, cp1); - - if (dvend == NULL) { - rc_log(LOG_ERR, - "rc_read_dictionary: unknown Vendor-Id %s on line %d of dictionary %s", - cp1, line_no, filename); - fclose(dictfd); - return -1; - } - } - } - - /* Create a new attribute for the list */ - if ((attr = malloc (sizeof (DICT_ATTR))) == NULL) { - rc_log(LOG_CRIT, "rc_read_dictionary: out of memory"); - fclose(dictfd); - return -1; - } - - strcpy (attr->name, namestr); - attr->value = value; - attr->type = type; - - if (dvend != NULL) - attr->value |= (dvend->vendorpec << 16); - - //rc_log(LOG_ERR, "rc_read_dictionary: ADD ATTRIBUTE Name %s Value %d Type %d",attr->name, attr->value, attr->type); - /* Insert it into the list */ - attr->next = rh->dictionary_attributes; - rh->dictionary_attributes = attr; - } else if (strncmp (buffer, "VALUE", 5) == 0) { - /* Read the VALUE line */ - if (sscanf (buffer, "%s%s%s%s", dummystr, attrstr, - namestr, valstr) != 4) { - rc_log(LOG_ERR, - "rc_read_dictionary: invalid value entry on line %d of dictionary %s", - line_no, filename); - fclose(dictfd); - return -1; - } - - /* - * Validate all entries - */ - if (strlen (attrstr) > NAME_LENGTH) { - rc_log(LOG_ERR, - "rc_read_dictionary: invalid attribute length on line %d of dictionary %s", - line_no, filename); - fclose(dictfd); - return -1; - } - - if (strlen (namestr) > NAME_LENGTH) { - rc_log(LOG_ERR, - "rc_read_dictionary: invalid name length on line %d of dictionary %s", - line_no, filename); - fclose(dictfd); - return -1; - } - - if (!isdigit (*valstr)) { - rc_log(LOG_ERR, - "rc_read_dictionary: invalid value on line %d of dictionary %s", - line_no, filename); - fclose(dictfd); - return -1; - } - - value = atoi (valstr); - - /* Create a new VALUE entry for the list */ - if ((dval = malloc (sizeof (DICT_VALUE))) == NULL) { - rc_log(LOG_CRIT, "rc_read_dictionary: out of memory"); - fclose(dictfd); - return -1; - } - - strcpy (dval->attrname, attrstr); - strcpy (dval->name, namestr); - dval->value = value; - - //rc_log(LOG_ERR, "rc_read_dictionary: ADD VALUE Name %s Value %s Type %d",dval->attrname, dval->name, dval->value); - /* Insert it into the list */ - dval->next = rh->dictionary_values; - rh->dictionary_values = dval; - } else if (strncmp (buffer, "$INCLUDE", 8) == 0) { - /* Read the $INCLUDE line */ - if (sscanf (buffer, "%s%s", dummystr, namestr) != 2) { - rc_log(LOG_ERR, - "rc_read_dictionary: invalid include entry on line %d of dictionary %s", - line_no, filename); - fclose(dictfd); - return -1; - } - - ifilename = namestr; - - /* Append directory if necessary */ - if (namestr[0] != '/') { - cp = strrchr(filename, '/'); - - if (cp != NULL) { - ifilename = alloca(AUTH_ID_LEN); - *cp = '\0'; - sprintf(ifilename, "%s/%s", filename, namestr); - *cp = '/'; - } - } - - if (rc_read_dictionary(rh, ifilename) < 0) { - fclose(dictfd); - return -1; - } - } else if (strncmp (buffer, "VENDOR", 6) == 0) { - /* Read the VALUE line */ - if (sscanf (buffer, "%s%s%s", dummystr, attrstr, valstr) != 3) { - rc_log(LOG_ERR, - "rc_read_dictionary: invalid Vendor-Id on line %d of dictionary %s", - line_no, filename); - fclose(dictfd); - return -1; - } - - /* Validate all entries */ - if (strlen (attrstr) > NAME_LENGTH) { - rc_log(LOG_ERR, - "rc_read_dictionary: invalid attribute length on line %d of dictionary %s", - line_no, filename); - fclose(dictfd); - return -1; - } - - if (!isdigit (*valstr)) { - rc_log(LOG_ERR, - "rc_read_dictionary: invalid Vendor-Id on line %d of dictionary %s", - line_no, filename); - fclose(dictfd); - return -1; - } - - value = atoi (valstr); - - /* Create a new VENDOR entry for the list */ - dvend = malloc(sizeof(DICT_VENDOR)); - - if (dvend == NULL) { - rc_log(LOG_CRIT, "rc_read_dictionary: out of memory"); - fclose(dictfd); - return -1; - } - - strcpy (dvend->vendorname, attrstr); - dvend->vendorpec = value; - - /* Insert it into the list */ - dvend->next = rh->dictionary_vendors; - rh->dictionary_vendors = dvend; - } - } - - fclose (dictfd); - return 0; -} - -/* - * Function: rc_dict_getattr - * - * Purpose: Return the full attribute structure based on the - * attribute id number. - * - */ - -DICT_ATTR *rc_dict_getattr (const rc_handle *rh, int attribute) -{ - DICT_ATTR *attr; - - attr = rh->dictionary_attributes; - - while (attr != NULL) { - if (attr->value == attribute) { - //rc_log(LOG_CRIT, "rc_dict_getattr: Found Name %s Value %d Type %d",attr->name, attr->value, attr->type); - return attr; - } - - attr = attr->next; - } - - rc_log(LOG_CRIT, "rc_dict_getattr: attribute %d not found",attribute); - return NULL; -} - -/* - * Function: rc_dict_findattr - * - * Purpose: Return the full attribute structure based on the - * attribute name. - * - */ - -DICT_ATTR *rc_dict_findattr (const rc_handle *rh, const char *attrname) -{ - DICT_ATTR *attr; - - attr = rh->dictionary_attributes; - - while (attr != NULL) { - if (strcasecmp (attr->name, attrname) == 0) { - return attr; - } - - attr = attr->next; - } - - return NULL; -} - - -/* - * Function: rc_dict_findval - * - * Purpose: Return the full value structure based on the - * value name. - * - */ - -DICT_VALUE *rc_dict_findval (const rc_handle *rh, const char *valname) -{ - DICT_VALUE *val; - - val = rh->dictionary_values; - - while (val != NULL) { - if (strcasecmp (val->name, valname) == 0) { - return val; - } - - val = val->next; - } - - return NULL; -} - -/* - * Function: rc_dict_findvend - * - * Purpose: Return the full vendor structure based on the - * vendor name. - * - */ - -DICT_VENDOR * -rc_dict_findvend(const rc_handle *rh, const char *vendorname) -{ - DICT_VENDOR *vend; - - for (vend = rh->dictionary_vendors; vend != NULL; vend = vend->next) - if (strcasecmp(vend->vendorname, vendorname) == 0) - return vend; - - return NULL; -} - -/* - * Function: rc_dict_getvend - * - * Purpose: Return the full vendor structure based on the - * vendor id number. - * - */ - -DICT_VENDOR * -rc_dict_getvend (const rc_handle *rh, int vendorpec) -{ - DICT_VENDOR *vend; - - for (vend = rh->dictionary_vendors; vend != NULL; vend = vend->next) - if (vend->vendorpec == vendorpec) - return vend; - - return NULL; -} - -/* - * Function: dict_getval - * - * Purpose: Return the full value structure based on the - * actual value and the associated attribute name. - * - */ - -DICT_VALUE * -rc_dict_getval (const rc_handle *rh, uint32_t value, const char *attrname) -{ - DICT_VALUE *val; - - val = rh->dictionary_values; - - while (val != NULL) { - if (strcmp (val->attrname, attrname) == 0 && - val->value == value) { - return val; - } - - val = val->next; - } - - return NULL; -} - -/* - * Function: rc_dict_free - * - * Purpose: Free allocated av lists - * - * Arguments: Radius Client handle - */ - -void -rc_dict_free(rc_handle *rh) -{ - DICT_ATTR *attr, *nattr; - DICT_VALUE *val, *nval; - DICT_VENDOR *vend, *nvend; - - for (attr = rh->dictionary_attributes; attr != NULL; attr = nattr) { - nattr = attr->next; - free(attr); - } - - for (val = rh->dictionary_values; val != NULL; val = nval) { - nval = val->next; - free(val); - } - - for (vend = rh->dictionary_vendors; vend != NULL; vend = nvend) { - nvend = vend->next; - free(vend); - } - - rh->dictionary_attributes = NULL; - rh->dictionary_values = NULL; - rh->dictionary_vendors = NULL; -} diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/lib/env.c b/openair3/PMIPv6/freeradius-client-1.1.6/lib/env.c deleted file mode 100644 index 25fb093391..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/lib/env.c +++ /dev/null @@ -1,138 +0,0 @@ -/* - * $Id: env.c,v 1.6 2007/06/21 18:07:23 cparker Exp $ - * - * Copyright (C) 1995,1996,1997 Lars Fenneberg - * - * See the file COPYRIGHT for the respective terms and conditions. - * If the file is missing contact me at lf@elemental.net - * and I'll send you a copy. - * - */ - -#include -#include -#include - -/* - * Function: rc_new_env - * - * Purpose: allocate space for a new environment - * - */ - -ENV *rc_new_env(int size) -{ - ENV *p; - - if (size < 1) - return NULL; - - if ((p = malloc(sizeof(*p))) == NULL) - return NULL; - - if ((p->env = malloc(size * sizeof(char *))) == NULL) { - rc_log(LOG_CRIT, "rc_new_env: out of memory"); - free(p); - return NULL; - } - - p->env[0] = NULL; - - p->size = 0; - p->maxsize = size; - - return p; -} - -/* - * Function: rc_free_env - * - * Purpose: free the space used by an env structure - * - */ - -void rc_free_env(ENV *env) -{ - free(env->env); - free(env); -} - -/* - * Function: rc_add_env - * - * Purpose: add an environment entry - * - */ - -int rc_add_env(ENV *env, char *name, char *value) -{ - int i; - char *new_env; - - for (i = 0; env->env[i] != NULL; i++) { - if (strncmp(env->env[i], name, MAX(strchr(env->env[i], '=') - env->env[i], (int)strlen(name))) == 0) - break; - } - - if (env->env[i]) { - if ((new_env = realloc(env->env[i], strlen(name)+strlen(value)+2)) == NULL) - return -1; - - env->env[i] = new_env; - - sprintf(env->env[i],"%s=%s", name, value); - } else { - if (env->size == (env->maxsize-1)) { - rc_log(LOG_CRIT, "rc_add_env: not enough space for environment (increase ENV_SIZE)"); - return -1; - } - - if ((env->env[env->size] = malloc(strlen(name)+strlen(value)+2)) == NULL) { - rc_log(LOG_CRIT, "rc_add_env: out of memory"); - return -1; - } - - sprintf(env->env[env->size],"%s=%s", name, value); - - env->size++; - - env->env[env->size] = NULL; - } - - return 0; -} - -/* - * Function: rc_import_env - * - * Purpose: imports an array of null-terminated strings - * - */ - -int rc_import_env(ENV *env, char **import) -{ - char *es; - - while (*import) { - es = strchr(*import, '='); - - if (!es) { - import++; - continue; - } - - /* ok, i grant thats not very clean... */ - *es = '\0'; - - if (rc_add_env(env, *import, es+1) < 0) { - *es = '='; - return -1; - } - - *es = '='; - - import++; - } - - return 0; -} diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/lib/ip_util.c b/openair3/PMIPv6/freeradius-client-1.1.6/lib/ip_util.c deleted file mode 100644 index d02a011750..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/lib/ip_util.c +++ /dev/null @@ -1,435 +0,0 @@ -/* - * $Id: ip_util.c,v 1.13 2007/07/11 17:29:29 cparker Exp $ - * - * Copyright (C) 1995,1996,1997 Lars Fenneberg - * - * Copyright 1992 Livingston Enterprises, Inc. - * - * Copyright 1992,1993, 1994,1995 The Regents of the University of Michigan - * and Merit Network, Inc. All Rights Reserved - * - * See the file COPYRIGHT for the respective terms and conditions. - * If the file is missing contact me at lf@elemental.net - * and I'll send you a copy. - * - */ - -#include -#include -#include - -#if !defined(SA_LEN) -#define SA_LEN(sa) \ - (((sa)->sa_family == AF_INET) ? \ - sizeof(struct sockaddr_in) : sizeof(struct sockaddr_in6)) -#endif - -/* - * Function: rc_gethostbyname - * - * Purpose: threadsafe replacement for gethostbyname. - * - * Returns: NULL on failure, hostent pointer on success - */ - -struct hostent *rc_gethostbyname(const char *hostname) -{ - struct hostent *hp; - hp = gethostbyname2(hostname, AF_INET6); - return hp; -} - - -/* - * Function: rc_get_ipaddr - * - * Purpose: return an IP address in host long notation from a host - * name or address in dot notation. - * - * Returns: 0 on failure - */ - -int rc_get_ipaddr (char *host, struct in6_addr* rval) -{ - - struct hostent *hp; - unsigned char buf[sizeof(struct in6_addr)]; - - if (rc_good_ipaddr (host) == 0) { - if ( inet_pton(AF_INET6, host, rval) <= 0) { - rc_log(LOG_ERR,"rc_get_ipaddr: error inet_pton(%s)", host); - return 0; - } - - //rc_log(LOG_NOTICE,"rc_get_ipaddr (inet_pton) %s->%x:%x:%x:%x:%x:%x:%x:%x\n", host, NIP6ADDR(rval)); - return 1; - } - - struct addrinfo hints; - - struct addrinfo *result, *rp; - - int s, sfd; - - *rval = in6addr_any; - - - memset(&hints, 0, sizeof(struct addrinfo)); - - hints.ai_family = AF_INET6; // Allow IPv4 or IPv6 - - hints.ai_socktype = 0; // SOCK_DGRAM; Datagram socket - - hints.ai_flags = 0; - - hints.ai_protocol = 0; // Any protocol - - s = getaddrinfo(host, NULL, &hints, &result); - - if (s != 0) { - rc_log(LOG_ERR,"rc_get_ipaddr(%s) getaddrinfo: %s", host, gai_strerror(s)); - return 0; - } - - // getaddrinfo() returns a list of address structures. - //Try each address until we successfully connect(2). - //If socket(2) (or connect(2)) fails, we (close the socket - //and) try the next address. - - for (rp = result; rp != NULL; rp = rp->ai_next) { - if (rp->ai_canonname) { - ;//rc_log(LOG_NOTICE,"rc_get_ipaddr(%s) getaddrinfo() Canonical name:\n%s\nAdresses:\n", host, rp->ai_canonname); - } - - if (rp->ai_family == AF_INET6) { - char dst[INET6_ADDRSTRLEN]; - - - sfd = socket(rp->ai_family, rp->ai_socktype, rp->ai_protocol); - - if (sfd == -1) { - continue; - } - - memcpy(rval, &((struct sockaddr_in6 *)rp->ai_addr)->sin6_addr, sizeof(struct in6_addr)); - - //rc_log(LOG_NOTICE,"rc_get_ipaddr(%s) try connect to address : %x:%x:%x:%x:%x:%x:%x:%x socktype %d protocol %d\n", - //host, NIP6ADDR(rval), rp->ai_socktype, rp->ai_protocol); - if (connect(sfd, rp->ai_addr, rp->ai_addrlen) != -1) { - - //memcpy( rval, rp->ai_addr, sizeof(struct in6_addr)); - //rc_log(LOG_NOTICE,"rc_get_ipaddr(%s) success : %x:%x:%x:%x:%x:%x:%x:%x\n", host, NIP6ADDR(rval)); - if (!inet_ntop(AF_INET6, (const void *) rval, dst, sizeof(dst))) { - rc_log(LOG_ERR,"inet_ntop: %s\n", strerror(errno)); - break; - } - - //rc_log(LOG_NOTICE,"rc_get_ipaddr() inet_ntop %s->%s\n", host, dst); - close(sfd); - break; // Success - } - - close(sfd); - } - } - - if (rp == NULL) { // No address succeeded - rc_log(LOG_ERR,"rc_get_ipaddr(%s) Could not connect", host); - return 0; - } - - freeaddrinfo(result); // No longer needed - //rc_log(LOG_NOTICE,"rc_get_ipaddr (getaddrinfo) %s->%x:%x:%x:%x:%x:%x:%x:%x\t return 1", host, NIP6ADDR(rval)); - return 1; -} - - -/* - * Function: rc_good_ipaddr - * - * Purpose: check for valid IP address in standard dot notation. - * - * Returns: 0 on success, -1 when failure - * - */ - -int rc_good_ipaddr (char *addr) -{ - int qc = 0; - int qd = 0; - int str_index; - char ip_number_str[4]; - int ip_number_index; - size_t i; - - for (i = 0; i < strlen(addr); ++i) { - qc += (addr[i] == ':') ? 1 : 0; - qd += (addr[i] == '.') ? 1 : 0; - } - - if (qc > 7) { - //rc_log(LOG_ERR,"rc_good_ipaddr(%s): false @1", addr); - return -1; - } - - if (qd && qd != 3) { - //rc_log(LOG_ERR,"rc_good_ipaddr(%s): false @2", addr); - return -1; - } - - if (qc == 0 && qd == 0) { - //rc_log(LOG_ERR,"rc_good_ipaddr(%s): false @3", addr); - return -1; - } - - ip_number_index = 0; - - for ( str_index = 0 ; str_index < strlen(addr); str_index++) { - if ((addr[str_index] != '.') && (addr[str_index] != ':')) { - if (ip_number_index < 4) { - ip_number_str[ip_number_index] = addr[str_index]; - ip_number_index = ip_number_index + 1; - } else { - //rc_log(LOG_ERR,"rc_good_ipaddr(%s): false @3", addr); - return -1; - } - } else { - if (ip_number_index != 0) { - for (i = 0; i < ip_number_index; ++i) { - if ((ip_number_str[i]) < '0' || (ip_number_str[i] > '9' && ip_number_str[i] < 'A') || - (ip_number_str[i] > 'F' && ip_number_str[i] < 'a') || ip_number_str[i] > 'f') { - //rc_log(LOG_ERR,"rc_good_ipaddr(%s): false @4", addr); - return -1; - } - } - } - - ip_number_index = 0; - } - } - - //rc_log(LOG_ERR,"rc_good_ipaddr(%s): true", addr); - return 0; -} - -/* - * Function: rc_ip_hostname - * - * Purpose: Return a printable host name (or IP address in dot notation) - * for the supplied IP address. - * - */ - -const char *rc_ip_hostname (struct in6_addr* h_ipaddr) -{ - /* - struct hostent *hp; - uint32_t n_ipaddr = htonl (h_ipaddr); - - if ((hp = rc_gethostbyaddr ((char *) &n_ipaddr, sizeof (struct in_addr), - AF_INET)) == NULL) { - rc_log(LOG_ERR,"rc_ip_hostname: couldn't look up host by addr: %08lX", h_ipaddr); - } - - return (hp == NULL) ? "unknown" : hp->h_name; - */ - static char host[INET6_ADDRSTRLEN]; - - if (inet_ntop(AF_INET6, h_ipaddr, host, INET6_ADDRSTRLEN) == NULL) { - return "unknown"; - } else { - return host; - } - -} - -/* - * Function: rc_getport - * - * Purpose: get the port number for the supplied request type - * - */ - -unsigned short rc_getport(int type) -{ - struct servent *svp; - - if ((svp = getservbyname ((type==AUTH)?"radius":"radacct", "udp")) == NULL) { - return (type==AUTH) ? PW_AUTH_UDP_PORT : PW_ACCT_UDP_PORT; - } else { - return ntohs ((unsigned short) svp->s_port); - } -} - -/* - * Function: rc_own_hostname - * - * Purpose: get the hostname of this machine - * - * Returns -1 on failure, 0 on success - * - */ - -int -rc_own_hostname(char *hostname, int len) -{ -#ifdef HAVE_UNAME - struct utsname uts; -#endif - -#if defined(HAVE_UNAME) - - if (uname(&uts) < 0) { - rc_log(LOG_ERR,"rc_own_hostname: couldn't get own hostname"); - return -1; - } - - strncpy(hostname, uts.nodename, len); -#elif defined(HAVE_GETHOSTNAME) - - if (gethostname(hostname, len) < 0) { - rc_log(LOG_ERR,"rc_own_hostname: couldn't get own hostname"); - return -1; - } - -#elif defined(HAVE_SYSINFO) - - if (sysinfo(SI_HOSTNAME, hostname, len) < 0) { - rc_log(LOG_ERR,"rc_own_hostname: couldn't get own hostname"); - return -1; - } - -#else - return -1; -#endif - - return 0; -} - -/* - * Function: rc_own_ipaddress - * - * Purpose: get the IP address of this host in host order - * - * Returns: IP address on success, 0 on failure - * - */ - -void rc_own_ipaddress(rc_handle *rh, struct in6_addr* rval) -{ - char hostname[256]; - *rval = in6addr_any; - - if (!IN6_ARE_ADDR_EQUAL(&rh->this_host_ipaddr, &in6addr_any)) { - if (rc_conf_str(rh, "bindaddr") == NULL || - strcmp(rc_conf_str(rh, "bindaddr"), "*") == 0) { - if (rc_own_hostname(hostname, sizeof(hostname)) < 0) - //rc_log(LOG_NOTICE,"rc_own_ipaddress %x:%x:%x:%x:%x:%x:%x:%x\n", NIP6ADDR(rval)); - return ; - } else { - strncpy(hostname, rc_conf_str(rh, "bindaddr"), sizeof(hostname)); - hostname[sizeof(hostname) - 1] = '\0'; - } - - if (rc_get_ipaddr (hostname, &rh->this_host_ipaddr) == 0) { - rc_log(LOG_ERR, "rc_own_ipaddress: couldn't get own IP address"); - //rc_log(LOG_NOTICE,"rc_own_ipaddress %x:%x:%x:%x:%x:%x:%x:%x\n", NIP6ADDR(rval)); - return ; - } - } - - memcpy(rval, &rh->this_host_ipaddr, sizeof (struct in6_addr)); - //rc_log(LOG_NOTICE,"rc_own_ipaddress %x:%x:%x:%x:%x:%x:%x:%x\n", NIP6ADDR(rval)); -} - -/* - * Function: rc_own_bind_ipaddress - * - * Purpose: get the IP address to be used as a source address - * for sending requests in host order - * - * Returns: IP address - * - */ - -void rc_own_bind_ipaddress(rc_handle *rh, struct in6_addr* rval) -{ - char hostname[256]; - - if (rh->this_host_bind_ipaddr != NULL) { - memcpy(rval, rh->this_host_bind_ipaddr, sizeof (struct in6_addr)); - //rc_log(LOG_NOTICE,"rc_own_bind_ipaddress %x:%x:%x:%x:%x:%x:%x:%x\n", NIP6ADDR(rval)); - return; - } - - rh->this_host_bind_ipaddr = malloc(sizeof (struct in6_addr)); - - if (rh->this_host_bind_ipaddr == NULL) - rc_log(LOG_CRIT, "rc_own_bind_ipaddress: out of memory"); - - if (rc_conf_str(rh, "bindaddr") == NULL || - strcmp(rc_conf_str(rh, "bindaddr"), "*") == 0) { - *rval = in6addr_any; - //rc_log(LOG_NOTICE,"rc_own_bind_ipaddress: in6addr_any\n"); - } else { - strncpy(hostname, rc_conf_str(rh, "bindaddr"), sizeof(hostname)); - hostname[sizeof(hostname) - 1] = '\0'; - - if (rc_get_ipaddr (hostname, rval) == 0) { - rc_log(LOG_ERR, "rc_own_ipaddress: couldn't get IP address from bindaddr"); - *rval = in6addr_any; - //rc_log(LOG_NOTICE,"rc_own_bind_ipaddress: in6addr_any\n"); - } - } - - if (rh->this_host_bind_ipaddr != NULL) { - memcpy(rh->this_host_bind_ipaddr, rval, sizeof (struct in6_addr)); - //rc_log(LOG_NOTICE,"rc_own_bind_ipaddress assign rh->this_host_bind_ipaddr to %x:%x:%x:%x:%x:%x:%x:%x\n", NIP6ADDR(rh->this_host_bind_ipaddr)); - //*rh->this_host_bind_ipaddr = *rval; - } - -} - -/* - * Function: rc_get_srcaddr - * - * Purpose: given remote address find local address which the - * system will use as a source address for sending - * datagrams to that remote address - * - * Returns: 0 in success, -1 on failure, address is filled into - * the first argument. - * - */ -int -rc_get_srcaddr(struct sockaddr_in6 *lia, struct sockaddr_in6 *ria) -{ - int temp_sock; - socklen_t namelen; - - temp_sock = socket(ria->sin6_family, SOCK_DGRAM, 0); - - if (temp_sock == -1) { - rc_log(LOG_ERR, "rc_get_srcaddr: socket: %s", strerror(errno)); - return -1; - } - - if (connect(temp_sock, (struct sockaddr*)ria, sizeof(struct sockaddr_in6)) != 0) { - rc_log(LOG_ERR, "rc_get_srcaddr: connect: %s", - strerror(errno)); - close(temp_sock); - return -1; - } - - namelen = sizeof(struct sockaddr_in6); - - if (getsockname(temp_sock, (struct sockaddr*)lia, &namelen) != 0) { - rc_log(LOG_ERR, "rc_get_srcaddr: getsockname: %s", - strerror(errno)); - close(temp_sock); - return -1; - } - - close(temp_sock); - return 0; -} diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/lib/lock.c b/openair3/PMIPv6/freeradius-client-1.1.6/lib/lock.c deleted file mode 100644 index 998ee82377..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/lib/lock.c +++ /dev/null @@ -1,78 +0,0 @@ -/* - * $Id: lock.c,v 1.4 2007/07/11 16:37:35 cparker Exp $ - * - * Copyright (C) 1997 Lars Fenneberg - * - * See the file COPYRIGHT for the respective terms and conditions. - * If the file is missing contact me at lf@elemental.net - * and I'll send you a copy. - * - */ - -#include "config.h" -#include "includes.h" - -#if defined(HAVE_FLOCK) - -int do_lock_exclusive(FILE * fd) -{ - return flock(fileno(fd), LOCK_EX|LOCK_NB); -} - -int do_unlock(FILE * fd) -{ - return flock(fileno(fd), LOCK_UN); -} - -#elif defined(WIN32) - -int do_lock_exclusive(FILE * fd) -{ - _lock_file(fd); - return 1; -} - -int do_unlock(FILE * fd) -{ - _unlock_file(fd); - return 1; -} - -#elif defined(HAVE_FCNTL) - -int do_lock_exclusive(FILE * fd) -{ - flock_t fl; - int res; - - memset((void *)&fl, 0, sizeof(fl)); - - fl.l_type = F_WRLCK; - fl.l_whence = fl.l_start = 0; - fl.l_len = 0; /* 0 means "to end of file" */ - - res = fcntl(fileno(fd), F_SETLK, &fl); - - if ((res == -1) && (errno == EAGAIN)) - errno = EWOULDBLOCK; - - return res; -} - -int do_unlock(FILE * fd) -{ - flock_t fl; - - memset((void *)&fl, 0, sizeof(fl)); - - fl.l_type = F_UNLCK; - fl.l_whence = fl.l_start = 0; - fl.l_len = 0; /* 0 means "to end of file" */ - - return fcntl(fileno(fd), F_SETLK, &fl); -} - -#else -#error YOU_LOSE "need either flock(2) or fcntl(2)" -#endif - diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/lib/log.c b/openair3/PMIPv6/freeradius-client-1.1.6/lib/log.c deleted file mode 100644 index e685b7ba3e..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/lib/log.c +++ /dev/null @@ -1,57 +0,0 @@ -/* - * $Id: log.c,v 1.5 2007/06/21 18:07:23 cparker Exp $ - * - * Copyright (C) 1995,1996,1997 Lars Fenneberg - * - * See the file COPYRIGHT for the respective terms and conditions. - * If the file is missing contact me at lf@elemental.net - * and I'll send you a copy. - * - */ - -#include -#include -#include - -/* - * Function: rc_openlog - * - * Purpose: open log - * - * Arguments: identification string - * - * Returns: nothing - * - */ - -void rc_openlog(char *ident) -{ -#ifndef _MSC_VER /* TODO: Fix me */ - openlog(ident, LOG_PID, RC_LOG_FACILITY); -#endif -} - -/* - * Function: rc_log - * - * Purpose: log information - * - * Arguments: priority (just like syslog), rest like printf - * - * Returns: nothing - * - */ - -void rc_log(int prio, const char *format, ...) -{ - char buff[1024]; - va_list ap; - - va_start(ap,format); - vsnprintf(buff, sizeof(buff), format, ap); - va_end(ap); - printf("%s\n", buff); -#ifndef _MSC_VER /* TODO: Fix me */ - syslog(prio, "%s", buff); -#endif -} diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/lib/md5.c b/openair3/PMIPv6/freeradius-client-1.1.6/lib/md5.c deleted file mode 100644 index c8dceb66dd..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/lib/md5.c +++ /dev/null @@ -1,280 +0,0 @@ -/* MD5 message-digest algorithm */ - -/* This file is licensed under the BSD License, but is largely derived from - * public domain source code - */ - -/* - * FORCE MD5 TO USE OUR MD5 HEADER FILE! - * - * If we don't do this, it might pick up the systems broken MD5. - * - Alan DeKok - */ -#include "md5.h" - -void rc_md5_calc(unsigned char *output, unsigned char *input, - size_t inputlen); - -void rc_md5_calc(unsigned char *output, unsigned char *input, - size_t inlen) -{ - MD5_CTX context; - - MD5Init(&context); - MD5Update(&context, input, inlen); - MD5Final(output, &context); -} - -/* The below was retrieved from - * http://www.openbsd.org/cgi-bin/cvsweb/~checkout~/src/sys/crypto/md5.c?rev=1.1 - * with the following changes: - * #includes commented out. - * Support context->count as uint32_t[2] instead of uint64_t - * u_int* to uint* - */ - -/* - * This code implements the MD5 message-digest algorithm. - * The algorithm is due to Ron Rivest. This code was - * written by Colin Plumb in 1993, no copyright is claimed. - * This code is in the public domain; do with it what you wish. - * - * Equivalent code is available from RSA Data Security, Inc. - * This code has been tested against that, and is equivalent, - * except that you don't need to include two pages of legalese - * with every copy. - * - * To compute the message digest of a chunk of bytes, declare an - * MD5Context structure, pass it to MD5Init, call MD5Update as - * needed on buffers full of bytes, and then call MD5Final, which - * will fill a supplied 16-byte array with the digest. - */ - -/*#include */ -/*#include */ -/*#include */ - -#define PUT_64BIT_LE(cp, value) do { \ - (cp)[7] = (value)[1] >> 24; \ - (cp)[6] = (value)[1] >> 16; \ - (cp)[5] = (value)[1] >> 8; \ - (cp)[4] = (value)[1]; \ - (cp)[3] = (value)[0] >> 24; \ - (cp)[2] = (value)[0] >> 16; \ - (cp)[1] = (value)[0] >> 8; \ - (cp)[0] = (value)[0]; } while (0) - -#define PUT_32BIT_LE(cp, value) do { \ - (cp)[3] = (value) >> 24; \ - (cp)[2] = (value) >> 16; \ - (cp)[1] = (value) >> 8; \ - (cp)[0] = (value); } while (0) - -static uint8_t PADDING[MD5_BLOCK_LENGTH] = { - 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -}; - -/* - * Start MD5 accumulation. Set bit count to 0 and buffer to mysterious - * initialization constants. - */ -void -MD5Init(MD5_CTX *ctx) -{ - ctx->count[0] = 0; - ctx->count[1] = 0; - ctx->state[0] = 0x67452301; - ctx->state[1] = 0xefcdab89; - ctx->state[2] = 0x98badcfe; - ctx->state[3] = 0x10325476; -} - -/* - * Update context to reflect the concatenation of another buffer full - * of bytes. - */ -void -MD5Update(MD5_CTX *ctx, const unsigned char *input, size_t len) -{ - size_t have, need; - - /* Check how many bytes we already have and how many more we need. */ - have = (size_t)((ctx->count[0] >> 3) & (MD5_BLOCK_LENGTH - 1)); - need = MD5_BLOCK_LENGTH - have; - - /* Update bitcount */ - /* ctx->count += (uint64_t)len << 3;*/ - if ((ctx->count[0] += ((uint32_t)len << 3)) < (uint32_t)len) { - /* Overflowed ctx->count[0] */ - ctx->count[1]++; - } - - ctx->count[1] += ((uint32_t)len >> 29); - - - - if (len >= need) { - if (have != 0) { - memcpy(ctx->buffer + have, input, need); - MD5Transform(ctx->state, ctx->buffer); - input += need; - len -= need; - have = 0; - } - - /* Process data in MD5_BLOCK_LENGTH-byte chunks. */ - while (len >= MD5_BLOCK_LENGTH) { - MD5Transform(ctx->state, input); - input += MD5_BLOCK_LENGTH; - len -= MD5_BLOCK_LENGTH; - } - } - - /* Handle any remaining bytes of data. */ - if (len != 0) - memcpy(ctx->buffer + have, input, len); -} - -/* - * Final wrapup - pad to 64-byte boundary with the bit pattern - * 1 0* (64-bit count of bits processed, MSB-first) - */ -void -MD5Final(unsigned char digest[MD5_DIGEST_LENGTH], MD5_CTX *ctx) -{ - uint8_t count[8]; - size_t padlen; - int i; - - /* Convert count to 8 bytes in little endian order. */ - PUT_64BIT_LE(count, ctx->count); - - /* Pad out to 56 mod 64. */ - padlen = MD5_BLOCK_LENGTH - - ((ctx->count[0] >> 3) & (MD5_BLOCK_LENGTH - 1)); - - if (padlen < 1 + 8) - padlen += MD5_BLOCK_LENGTH; - - MD5Update(ctx, PADDING, padlen - 8); /* padlen - 8 <= 64 */ - MD5Update(ctx, count, 8); - - if (digest != NULL) { - for (i = 0; i < 4; i++) - PUT_32BIT_LE(digest + i * 4, ctx->state[i]); - } - - memset(ctx, 0, sizeof(*ctx)); /* in case it's sensitive */ -} - - -/* The four core functions - F1 is optimized somewhat */ - -/* #define F1(x, y, z) (x & y | ~x & z) */ -#define F1(x, y, z) (z ^ (x & (y ^ z))) -#define F2(x, y, z) F1(z, x, y) -#define F3(x, y, z) (x ^ y ^ z) -#define F4(x, y, z) (y ^ (x | ~z)) - -/* This is the central step in the MD5 algorithm. */ -#define MD5STEP(f, w, x, y, z, data, s) \ - ( w += f(x, y, z) + data, w = w<>(32-s), w += x ) - -/* - * The core of the MD5 algorithm, this alters an existing MD5 hash to - * reflect the addition of 16 longwords of new data. MD5Update blocks - * the data and converts bytes into longwords for this routine. - */ -void -MD5Transform(uint32_t state[4], const uint8_t block[MD5_BLOCK_LENGTH]) -{ - uint32_t a, b, c, d, in[MD5_BLOCK_LENGTH / 4]; - - for (a = 0; a < MD5_BLOCK_LENGTH / 4; a++) { - in[a] = (uint32_t)( - (uint32_t)(block[a * 4 + 0]) | - (uint32_t)(block[a * 4 + 1]) << 8 | - (uint32_t)(block[a * 4 + 2]) << 16 | - (uint32_t)(block[a * 4 + 3]) << 24); - } - - a = state[0]; - b = state[1]; - c = state[2]; - d = state[3]; - - MD5STEP(F1, a, b, c, d, in[ 0] + 0xd76aa478, 7); - MD5STEP(F1, d, a, b, c, in[ 1] + 0xe8c7b756, 12); - MD5STEP(F1, c, d, a, b, in[ 2] + 0x242070db, 17); - MD5STEP(F1, b, c, d, a, in[ 3] + 0xc1bdceee, 22); - MD5STEP(F1, a, b, c, d, in[ 4] + 0xf57c0faf, 7); - MD5STEP(F1, d, a, b, c, in[ 5] + 0x4787c62a, 12); - MD5STEP(F1, c, d, a, b, in[ 6] + 0xa8304613, 17); - MD5STEP(F1, b, c, d, a, in[ 7] + 0xfd469501, 22); - MD5STEP(F1, a, b, c, d, in[ 8] + 0x698098d8, 7); - MD5STEP(F1, d, a, b, c, in[ 9] + 0x8b44f7af, 12); - MD5STEP(F1, c, d, a, b, in[10] + 0xffff5bb1, 17); - MD5STEP(F1, b, c, d, a, in[11] + 0x895cd7be, 22); - MD5STEP(F1, a, b, c, d, in[12] + 0x6b901122, 7); - MD5STEP(F1, d, a, b, c, in[13] + 0xfd987193, 12); - MD5STEP(F1, c, d, a, b, in[14] + 0xa679438e, 17); - MD5STEP(F1, b, c, d, a, in[15] + 0x49b40821, 22); - - MD5STEP(F2, a, b, c, d, in[ 1] + 0xf61e2562, 5); - MD5STEP(F2, d, a, b, c, in[ 6] + 0xc040b340, 9); - MD5STEP(F2, c, d, a, b, in[11] + 0x265e5a51, 14); - MD5STEP(F2, b, c, d, a, in[ 0] + 0xe9b6c7aa, 20); - MD5STEP(F2, a, b, c, d, in[ 5] + 0xd62f105d, 5); - MD5STEP(F2, d, a, b, c, in[10] + 0x02441453, 9); - MD5STEP(F2, c, d, a, b, in[15] + 0xd8a1e681, 14); - MD5STEP(F2, b, c, d, a, in[ 4] + 0xe7d3fbc8, 20); - MD5STEP(F2, a, b, c, d, in[ 9] + 0x21e1cde6, 5); - MD5STEP(F2, d, a, b, c, in[14] + 0xc33707d6, 9); - MD5STEP(F2, c, d, a, b, in[ 3] + 0xf4d50d87, 14); - MD5STEP(F2, b, c, d, a, in[ 8] + 0x455a14ed, 20); - MD5STEP(F2, a, b, c, d, in[13] + 0xa9e3e905, 5); - MD5STEP(F2, d, a, b, c, in[ 2] + 0xfcefa3f8, 9); - MD5STEP(F2, c, d, a, b, in[ 7] + 0x676f02d9, 14); - MD5STEP(F2, b, c, d, a, in[12] + 0x8d2a4c8a, 20); - - MD5STEP(F3, a, b, c, d, in[ 5] + 0xfffa3942, 4); - MD5STEP(F3, d, a, b, c, in[ 8] + 0x8771f681, 11); - MD5STEP(F3, c, d, a, b, in[11] + 0x6d9d6122, 16); - MD5STEP(F3, b, c, d, a, in[14] + 0xfde5380c, 23); - MD5STEP(F3, a, b, c, d, in[ 1] + 0xa4beea44, 4); - MD5STEP(F3, d, a, b, c, in[ 4] + 0x4bdecfa9, 11); - MD5STEP(F3, c, d, a, b, in[ 7] + 0xf6bb4b60, 16); - MD5STEP(F3, b, c, d, a, in[10] + 0xbebfbc70, 23); - MD5STEP(F3, a, b, c, d, in[13] + 0x289b7ec6, 4); - MD5STEP(F3, d, a, b, c, in[ 0] + 0xeaa127fa, 11); - MD5STEP(F3, c, d, a, b, in[ 3] + 0xd4ef3085, 16); - MD5STEP(F3, b, c, d, a, in[ 6] + 0x04881d05, 23); - MD5STEP(F3, a, b, c, d, in[ 9] + 0xd9d4d039, 4); - MD5STEP(F3, d, a, b, c, in[12] + 0xe6db99e5, 11); - MD5STEP(F3, c, d, a, b, in[15] + 0x1fa27cf8, 16); - MD5STEP(F3, b, c, d, a, in[2 ] + 0xc4ac5665, 23); - - MD5STEP(F4, a, b, c, d, in[ 0] + 0xf4292244, 6); - MD5STEP(F4, d, a, b, c, in[7 ] + 0x432aff97, 10); - MD5STEP(F4, c, d, a, b, in[14] + 0xab9423a7, 15); - MD5STEP(F4, b, c, d, a, in[5 ] + 0xfc93a039, 21); - MD5STEP(F4, a, b, c, d, in[12] + 0x655b59c3, 6); - MD5STEP(F4, d, a, b, c, in[3 ] + 0x8f0ccc92, 10); - MD5STEP(F4, c, d, a, b, in[10] + 0xffeff47d, 15); - MD5STEP(F4, b, c, d, a, in[1 ] + 0x85845dd1, 21); - MD5STEP(F4, a, b, c, d, in[8 ] + 0x6fa87e4f, 6); - MD5STEP(F4, d, a, b, c, in[15] + 0xfe2ce6e0, 10); - MD5STEP(F4, c, d, a, b, in[6 ] + 0xa3014314, 15); - MD5STEP(F4, b, c, d, a, in[13] + 0x4e0811a1, 21); - MD5STEP(F4, a, b, c, d, in[4 ] + 0xf7537e82, 6); - MD5STEP(F4, d, a, b, c, in[11] + 0xbd3af235, 10); - MD5STEP(F4, c, d, a, b, in[2 ] + 0x2ad7d2bb, 15); - MD5STEP(F4, b, c, d, a, in[9 ] + 0xeb86d391, 21); - - state[0] += a; - state[1] += b; - state[2] += c; - state[3] += d; -} diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/lib/md5.h b/openair3/PMIPv6/freeradius-client-1.1.6/lib/md5.h deleted file mode 100644 index a2874f11d9..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/lib/md5.h +++ /dev/null @@ -1,78 +0,0 @@ -/* - * md5.h Structures and prototypes for md5. - * - * Version: $Id: md5.h,v 1.2 2007/06/21 18:07:24 cparker Exp $ - * License: BSD, but largely derived from a public domain source. - * - */ - -#ifndef _RCRAD_MD5_H -#define _RCRAD_MD5_H - -#include "config.h" - -#ifdef HAVE_INTTYPES_H -#include -#endif - -#ifdef HAVE_SYS_TYPES_H -#include -#endif - -#ifdef HAVE_STDINT_H -#include -#endif - -#include -/* - * FreeRADIUS Client defines to ensure globally unique MD5 function names, - * so that we don't pick up vendor-specific broken MD5 libraries. - */ -#define MD5_CTX librad_MD5_CTX -#define MD5Init librad_MD5Init -#define MD5Update librad_MD5Update -#define MD5Final librad_MD5Final -#define MD5Transform librad_MD5Transform - -/* The below was retrieved from - * http://www.openbsd.org/cgi-bin/cvsweb/~checkout~/src/sys/crypto/md5.h?rev=1.1 - * With the following changes: uint64_t => uint32_t[2] - * Commented out #include - * Commented out the __BEGIN and __END _DECLS, and the __attributes. - */ - -/* - * This code implements the MD5 message-digest algorithm. - * The algorithm is due to Ron Rivest. This code was - * written by Colin Plumb in 1993, no copyright is claimed. - * This code is in the public domain; do with it what you wish. - * - * Equivalent code is available from RSA Data Security, Inc. - * This code has been tested against that, and is equivalent, - * except that you don't need to include two pages of legalese - * with every copy. - */ - -#define MD5_BLOCK_LENGTH 64 -#define MD5_DIGEST_LENGTH 16 - -typedef struct MD5Context { - uint32_t state[4]; /* state */ - uint32_t count[2]; /* number of bits, mod 2^64 */ - uint8_t buffer[MD5_BLOCK_LENGTH]; /* input buffer */ -} MD5_CTX; - -/* include */ - -/* __BEGIN_DECLS */ -void MD5Init(MD5_CTX *); -void MD5Update(MD5_CTX *, const uint8_t *, size_t) -/* __attribute__((__bounded__(__string__,2,3)))*/; -void MD5Final(uint8_t [MD5_DIGEST_LENGTH], MD5_CTX *) -/* __attribute__((__bounded__(__minbytes__,1,MD5_DIGEST_LENGTH)))*/; -void MD5Transform(uint32_t [4], const uint8_t [MD5_BLOCK_LENGTH]) -/* __attribute__((__bounded__(__minbytes__,1,4)))*/ -/* __attribute__((__bounded__(__minbytes__,2,MD5_BLOCK_LENGTH)))*/; -/* __END_DECLS */ - -#endif /* _RCRAD_MD5_H */ diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/lib/options.h b/openair3/PMIPv6/freeradius-client-1.1.6/lib/options.h deleted file mode 100644 index 48891f24d8..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/lib/options.h +++ /dev/null @@ -1,57 +0,0 @@ -/* - * $Id: options.h,v 1.6 2008/03/05 16:35:20 cparker Exp $ - * - * Copyright (C) 1996 Lars Fenneberg - * - * See the file COPYRIGHT for the respective terms and conditions. - * If the file is missing contact me at lf@elemental.net - * and I'll send you a copy. - * - */ - -#define OPTION_LEN 64 - -/* ids for different option types */ -#define OT_STR (1<<0) /* string */ -#define OT_INT (1<<1) /* integer */ -#define OT_SRV (1<<2) /* server list */ -#define OT_AUO (1<<3) /* authentication order */ - -#define OT_ANY ((unsigned int)~0) /* used internally */ - -/* status types */ -#define ST_UNDEF (1<<0) /* option is undefined */ - -typedef struct _option { - char name[OPTION_LEN]; /* name of the option */ - int type, status; /* type and status */ - void *val; /* pointer to option value */ -} OPTION; - -static OPTION config_options_default[] = { - /* internally used options */ - {"config_file", OT_STR, ST_UNDEF, NULL}, - /* General options */ - {"auth_order", OT_AUO, ST_UNDEF, NULL}, - {"login_tries", OT_INT, ST_UNDEF, NULL}, - {"login_timeout", OT_INT, ST_UNDEF, NULL}, - {"nologin", OT_STR, ST_UNDEF, NULL}, - {"issue", OT_STR, ST_UNDEF, NULL}, - /* RADIUS specific options */ - {"authserver", OT_SRV, ST_UNDEF, NULL}, - {"acctserver", OT_SRV, ST_UNDEF, NULL}, - {"servers", OT_STR, ST_UNDEF, NULL}, - {"dictionary", OT_STR, ST_UNDEF, NULL}, - {"login_radius", OT_STR, ST_UNDEF, NULL}, - {"seqfile", OT_STR, ST_UNDEF, NULL}, - {"mapfile", OT_STR, ST_UNDEF, NULL}, - {"default_realm", OT_STR, ST_UNDEF, NULL}, - {"radius_timeout", OT_INT, ST_UNDEF, NULL}, - {"radius_retries", OT_INT, ST_UNDEF, NULL}, - {"radius_deadtime", OT_INT, ST_UNDEF, NULL}, - {"bindaddr", OT_STR, ST_UNDEF, NULL}, - /* local options */ - {"login_local", OT_STR, ST_UNDEF, NULL}, -}; - -#define NUM_OPTIONS ((sizeof(config_options_default))/(sizeof(config_options_default[0]))) diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/lib/sendserver.c b/openair3/PMIPv6/freeradius-client-1.1.6/lib/sendserver.c deleted file mode 100644 index 7b39eb9f28..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/lib/sendserver.c +++ /dev/null @@ -1,661 +0,0 @@ -/* - * $Id: sendserver.c,v 1.25 2008/01/05 03:06:53 sobomax Exp $ - * - * Copyright (C) 1995,1996,1997 Lars Fenneberg - * - * Copyright 1992 Livingston Enterprises, Inc. - * - * Copyright 1992,1993, 1994,1995 The Regents of the University of Michigan - * and Merit Network, Inc. All Rights Reserved - * - * See the file COPYRIGHT for the respective terms and conditions. - * If the file is missing contact me at lf@elemental.net - * and I'll send you a copy. - * - */ - -#include -#include -#include -#include - -#define SA(p) ((struct sockaddr *)(p)) - - -static void rc_random_vector (unsigned char *); -static int rc_check_reply (AUTH_HDR *, int, char *, unsigned char *, unsigned char); - -static int g_radius_sockfd = -1; -static struct sockaddr_in6 g_sinlocal; -static struct sockaddr_in6 g_sinremote; -static char g_secret[MAX_SECRET_LENGTH + 1]; -static char *g_server_name; /* Name of server to query */ -static struct in6_addr g_auth_ipaddr; -static char g_str_addr[INET6_ADDRSTRLEN]; -/* - * Function: rc_pack_list - * - * Purpose: Packs an attribute value pair list into a buffer. - * - * Returns: Number of octets packed. - * - */ - -static int rc_pack_list (VALUE_PAIR *vp, char *secret, AUTH_HDR *auth) -{ - int length, i, pc, padded_length; - int total_length = 0; - size_t secretlen; - uint32_t lvalue, vendor; - unsigned char passbuf[MAX(AUTH_PASS_LEN, CHAP_VALUE_LENGTH)]; - unsigned char md5buf[256]; - unsigned char *buf, *vector, *vsa_length_ptr; - - buf = auth->data; - - while (vp != NULL) { - vsa_length_ptr = NULL; - - if (VENDOR(vp->attribute) != 0) { - *buf++ = PW_VENDOR_SPECIFIC; - vsa_length_ptr = buf; - *buf++ = 6; - vendor = htonl(VENDOR(vp->attribute)); - memcpy(buf, &vendor, sizeof(uint32_t)); - buf += 4; - total_length += 6; - } - - *buf++ = (vp->attribute & 0xff); - - switch (vp->attribute) { - case PW_USER_PASSWORD: - //rc_log(LOG_NOTICE,"rc_pack_list: PW_USER_PASSWORD name %s length %d string %s\n", vp->name, vp->lvalue, vp->strvalue); - - /* Encrypt the password */ - - /* Chop off password at AUTH_PASS_LEN */ - length = vp->lvalue; - - if (length > AUTH_PASS_LEN) - length = AUTH_PASS_LEN; - - /* Calculate the padded length */ - padded_length = (length+(AUTH_VECTOR_LEN-1)) & ~(AUTH_VECTOR_LEN-1); - - /* Record the attribute length */ - *buf++ = padded_length + 2; - - if (vsa_length_ptr != NULL) *vsa_length_ptr += padded_length + 2; - - /* Pad the password with zeros */ - memset ((char *) passbuf, '\0', AUTH_PASS_LEN); - memcpy ((char *) passbuf, vp->strvalue, (size_t) length); - - secretlen = strlen (secret); - vector = (unsigned char *)auth->vector; - - for(i = 0; i < padded_length; i += AUTH_VECTOR_LEN) { - /* Calculate the MD5 digest*/ - strcpy ((char *) md5buf, secret); - memcpy ((char *) md5buf + secretlen, vector, - AUTH_VECTOR_LEN); - rc_md5_calc (buf, md5buf, secretlen + AUTH_VECTOR_LEN); - - /* Remeber the start of the digest */ - vector = buf; - - /* Xor the password into the MD5 digest */ - for (pc = i; pc < (i + AUTH_VECTOR_LEN); pc++) { - *buf++ ^= passbuf[pc]; - } - } - - total_length += padded_length + 2; - - break; -#if 0 - - case PW_CHAP_PASSWORD: - - *buf++ = CHAP_VALUE_LENGTH + 2; - - if (vsa_length_ptr != NULL) *vsa_length_ptr += CHAP_VALUE_LENGTH + 2; - - /* Encrypt the Password */ - length = vp->lvalue; - - if (length > CHAP_VALUE_LENGTH) { - length = CHAP_VALUE_LENGTH; - } - - memset ((char *) passbuf, '\0', CHAP_VALUE_LENGTH); - memcpy ((char *) passbuf, vp->strvalue, (size_t) length); - - /* Calculate the MD5 Digest */ - secretlen = strlen (secret); - strcpy ((char *) md5buf, secret); - memcpy ((char *) md5buf + secretlen, (char *) auth->vector, - AUTH_VECTOR_LEN); - rc_md5_calc (buf, md5buf, secretlen + AUTH_VECTOR_LEN); - - /* Xor the password into the MD5 digest */ - for (i = 0; i < CHAP_VALUE_LENGTH; i++) { - *buf++ ^= passbuf[i]; - } - - total_length += CHAP_VALUE_LENGTH + 2; - - break; -#endif - - default: - switch (vp->type) { - case PW_TYPE_STRING: - //rc_log(LOG_NOTICE,"rc_pack_list: PW_TYPE_STRING name %s\n", vp->name); - length = vp->lvalue; - *buf++ = length + 2; - - if (vsa_length_ptr != NULL) *vsa_length_ptr += length + 2; - - memcpy (buf, vp->strvalue, (size_t) length); - buf += length; - total_length += length + 2; - break; - - case PW_TYPE_INTEGER: - //rc_log(LOG_NOTICE,"rc_pack_list: PW_TYPE_INTEGER name %s\n", vp->name); - *buf++ = sizeof (uint32_t) + 2; - - if (vsa_length_ptr != NULL) *vsa_length_ptr += sizeof(uint32_t) + 2; - - lvalue = htonl (vp->lvalue); - memcpy (buf, (char *) &lvalue, sizeof (uint32_t)); - buf += sizeof (uint32_t); - total_length += sizeof (uint32_t) + 2; - break; - - case PW_TYPE_IPADDR: - //rc_log(LOG_NOTICE,"rc_pack_list: PW_TYPE_IPADDR name %s\n", vp->name); - *buf++ = sizeof (uint32_t) + 2; - - if (vsa_length_ptr != NULL) *vsa_length_ptr += sizeof(uint32_t) + 2; - - lvalue = htonl (vp->lvalue); - memcpy (buf, (char *) &lvalue, sizeof (uint32_t)); - buf += sizeof (uint32_t); - total_length += sizeof (uint32_t) + 2; - break; - - case PW_TYPE_IPV6ADDR: - //rc_log(LOG_NOTICE,"rc_pack_list: PW_TYPE_IPV6ADDR name %s %x:%x:%x:%x:%x:%x:%x:%x\n", vp->name, NIP6ADDR(&vp->in6addrvalue)); - *buf++ = 16 + 2; - - if (vsa_length_ptr != NULL) *vsa_length_ptr += 16 + 2; - - memcpy (buf, (char *) &vp->in6addrvalue, 16); - buf += 16; - total_length += 16 + 2; - break; - - default: - break; - } - - break; - } - - vp = vp->next; - } - - return total_length; -} - -/* - * Function: rc_send_server - * - * Purpose: send a request to a RADIUS server and wait for the reply - * - */ - -int rc_send_server (rc_handle *rh, SEND_DATA *data, char *msg) -{ - - struct timeval authtime; - fd_set readfds; - AUTH_HDR *auth, *recv_auth; - struct in6_addr nas_ipaddr; - socklen_t salen; - int result; - int total_length; - int length; - int retry_max; - size_t secretlen; - unsigned char vector[AUTH_VECTOR_LEN]; - char recv_buffer[BUFFER_LEN]; - char send_buffer[BUFFER_LEN]; - int retries; - VALUE_PAIR *vp; - - if (g_radius_sockfd < 0) { - g_server_name = data->server; - - if (g_server_name == NULL || g_server_name[0] == '\0') { - rc_log(LOG_ERR, "rc_send_server: server_name == NULL || server_name[0] == '\0'"); - return ERROR_RC; - } - - if ((vp = rc_avpair_get(data->send_pairs, PW_SERVICE_TYPE, 0)) && \ - (vp->lvalue == PW_ADMINISTRATIVE)) { - strcpy(g_secret, MGMT_POLL_SECRET); - - if (rc_get_ipaddr(g_server_name, &g_auth_ipaddr) == 0) { - rc_log(LOG_ERR, "rc_send_server: rc_get_ipaddr failed"); - return ERROR_RC; - } - } else { - if(data->secret != NULL) { - strncpy(g_secret, data->secret, MAX_SECRET_LENGTH); - } - - /* - else - { - */ - if (rc_find_server (rh, g_server_name, &g_auth_ipaddr, g_secret) != 0) { - rc_log(LOG_ERR, "rc_send_server: unable to find server: %s", g_server_name); - return ERROR_RC; - } - - //rc_log(LOG_NOTICE,"rc_send_server: g_auth_ipaddr %x:%x:%x:%x:%x:%x:%x:%x secret %s", - // NIP6ADDR(&g_auth_ipaddr), g_secret); - /*}*/ - } - - //rc_log(LOG_NOTICE, "DEBUG: rc_send_server: creating socket to: %s", g_server_name); - - g_radius_sockfd = socket (AF_INET6, SOCK_DGRAM, 0); - - if (g_radius_sockfd < 0) { - memset (g_secret, '\0', sizeof (g_secret)); - rc_log(LOG_ERR, "rc_send_server: socket: %s", strerror(errno)); - return ERROR_RC; - } - - memset((char *)&g_sinlocal, '\0', sizeof(struct sockaddr_in6)); - g_sinlocal.sin6_family = AF_INET6; - rc_own_bind_ipaddress(rh, &g_sinlocal.sin6_addr); - g_sinlocal.sin6_port = htons((unsigned short) 0); - - //rc_log(LOG_NOTICE,"rc_send_server: before bind: address sinlocal %x:%x:%x:%x:%x:%x:%x:%x", NIP6ADDR(&g_sinlocal.sin6_addr)); - if (bind(g_radius_sockfd, SA(&g_sinlocal), sizeof(g_sinlocal)) < 0) { - close (g_radius_sockfd); - g_radius_sockfd = -1; - memset (g_secret, '\0', sizeof (g_secret)); - rc_log(LOG_ERR, "rc_send_server: bind : %s: %s", g_server_name, strerror(errno)); - //rc_log(LOG_ERR,"rc_send_server: bind address %x:%x:%x:%x:%x:%x:%x:%x", NIP6ADDR(&g_sinlocal.sin6_addr)); - return ERROR_RC; - } - - retry_max = data->retries; /* Max. numbers to try for reply */ - retries = 0; /* Init retry cnt for blocking call */ - - memset ((char *)&g_sinremote, '\0', sizeof(struct sockaddr_in6)); - g_sinremote.sin6_family = AF_INET6; - memcpy(&g_sinremote.sin6_addr, &g_auth_ipaddr, sizeof(struct in6_addr)); - g_sinremote.sin6_port = htons ((unsigned short) data->svc_port); - //rc_log(LOG_NOTICE,"rc_send_server: sinremote = %x:%x:%x:%x:%x:%x:%x:%x", NIP6ADDR(&g_sinremote.sin6_addr)); - - /* - * Fill in NAS-IP-Address - */ - if (IN6_ARE_ADDR_EQUAL(&g_sinlocal.sin6_addr, &in6addr_any)) { - //rc_log(LOG_NOTICE,"rc_send_server: sinlocal == in6addr_any"); - if (rc_get_srcaddr(&g_sinlocal, &g_sinremote) != 0) { - close (g_radius_sockfd); - g_radius_sockfd = -1; - memset (g_secret, '\0', sizeof (g_secret)); - rc_log(LOG_ERR, "rc_send_server: rc_get_srcaddr failed"); - return ERROR_RC; - } - - //rc_log(LOG_NOTICE,"rc_send_server: sinlocal = rc_get_srcaddr(sinremote) = %x:%x:%x:%x:%x:%x:%x:%x", NIP6ADDR(&g_sinlocal.sin6_addr)); - } - - memcpy(&nas_ipaddr, &g_sinlocal.sin6_addr, sizeof(struct in6_addr)); - - if (inet_ntop(AF_INET6, &nas_ipaddr, g_str_addr, INET6_ADDRSTRLEN) == NULL) { - close (g_radius_sockfd); - g_radius_sockfd = -1; - rc_log(LOG_ERR, "rc_send_server: inet_ntop failed"); - return ERROR_RC; - } - } - - //rc_log(LOG_NOTICE,"rc_send_server: filling PW_NAS_IPV6_ADDRESS %s", g_str_addr); - rc_avpair_add(rh, &(data->send_pairs), PW_NAS_IPV6_ADDRESS, - g_str_addr, 0, 0); - /*rc_avpair_add(rh, &(data->send_pairs), PW_NAS_IP_ADDRESS, - &nas_ipaddr, 0, 0);*/ - - /* Build a request */ - auth = (AUTH_HDR *) send_buffer; - auth->code = data->code; - auth->id = data->seq_nbr; - - if (data->code == PW_ACCOUNTING_REQUEST) { - total_length = rc_pack_list(data->send_pairs, g_secret, auth) + AUTH_HDR_LEN; - - auth->length = htons ((unsigned short) total_length); - - memset((char *) auth->vector, 0, AUTH_VECTOR_LEN); - secretlen = strlen (g_secret); - memcpy ((char *) auth + total_length, g_secret, secretlen); - rc_md5_calc (vector, (unsigned char *) auth, total_length + secretlen); - memcpy ((char *) auth->vector, (char *) vector, AUTH_VECTOR_LEN); - } else { - rc_random_vector (vector); - memcpy ((char *) auth->vector, (char *) vector, AUTH_VECTOR_LEN); - - total_length = rc_pack_list(data->send_pairs, g_secret, auth) + AUTH_HDR_LEN; - - auth->length = htons ((unsigned short) total_length); - } - - //DEBUG(LOG_ERR, "DEBUG: local %s : 0, remote %s : %u\n", - // inet_ntoa(g_sinlocal.sin_addr), - // inet_ntoa(g_sinremote.sin_addr), data->svc_port); - - for (;;) { - //rc_log(LOG_NOTICE,"rc_send_server: sendto"); - if (sendto (g_radius_sockfd, (char *) auth, (unsigned int) total_length, (int) 0, - SA(&g_sinremote), sizeof (struct sockaddr_in6)) < 0) { - rc_log(LOG_ERR, "rc_send_server: sendto: %s", strerror(errno)); - } - - authtime.tv_usec = 0L; - authtime.tv_sec = (long) data->timeout; - FD_ZERO (&readfds); - FD_SET (g_radius_sockfd, &readfds); - - if (select (g_radius_sockfd + 1, &readfds, NULL, NULL, &authtime) < 0) { - if (errno == EINTR) - continue; - - rc_log(LOG_ERR, "rc_send_server: select: %s", strerror(errno)); - memset (g_secret, '\0', sizeof (g_secret)); - close (g_radius_sockfd); - g_radius_sockfd = -1; - rc_log(LOG_ERR, "rc_send_server: select failed"); - return ERROR_RC; - } - - if (FD_ISSET (g_radius_sockfd, &readfds)) - break; - - - /* - * Timed out waiting for response. Retry "retry_max" times - * before giving up. If retry_max = 0, don't retry at all. - */ - if (++retries >= retry_max) { - char remote_str[INET6_ADDRSTRLEN]; - inet_ntop(AF_INET6, &g_sinremote.sin6_addr, remote_str, sizeof(g_sinremote.sin6_addr)); - rc_log(LOG_ERR, - "rc_send_server: no reply from RADIUS server %s:%u, %s", - rc_ip_hostname (&g_auth_ipaddr), data->svc_port, remote_str); - close (g_radius_sockfd); - g_radius_sockfd = -1; - memset (g_secret, '\0', sizeof (g_secret)); - return TIMEOUT_RC; - } - } - - salen = sizeof(g_sinremote); - length = recvfrom (g_radius_sockfd, (char *) recv_buffer, - (int) sizeof (recv_buffer), - (int) 0, SA(&g_sinremote), &salen); - //rc_log(LOG_NOTICE,"rc_send_server: received %d bytes", length); - - if (length <= 0) { - rc_log(LOG_ERR, "rc_send_server: recvfrom: %s:%d: %s", g_server_name,\ - data->svc_port, strerror(errno)); - close (g_radius_sockfd); - g_radius_sockfd = -1; - memset (g_secret, '\0', sizeof (g_secret)); - rc_log(LOG_ERR, "rc_send_server: recvfrom failed"); - return ERROR_RC; - } - - recv_auth = (AUTH_HDR *)recv_buffer; - - if (length < AUTH_HDR_LEN || length < ntohs(recv_auth->length)) { - rc_log(LOG_ERR, "rc_send_server: recvfrom: %s:%d: reply is too short", - g_server_name, data->svc_port); - close(g_radius_sockfd); - g_radius_sockfd = -1; - memset(g_secret, '\0', sizeof(g_secret)); - return ERROR_RC; - } - - //rc_log(LOG_NOTICE,"rc_send_server: checking reply"); - result = rc_check_reply (recv_auth, BUFFER_LEN, g_secret, vector, data->seq_nbr); - //rc_log(LOG_NOTICE,"rc_send_server: reply checked"); - - length = ntohs(recv_auth->length) - AUTH_HDR_LEN; - - if (length > 0) { - data->receive_pairs = rc_avpair_gen(rh, NULL, recv_auth->data, - length, 0); - } else { - data->receive_pairs = NULL; - } - - //close (g_radius_sockfd); - //memset (g_secret, '\0', sizeof (g_secret)); - - if (result != OK_RC) return result; - - *msg = '\0'; - vp = data->receive_pairs; - - while (vp) { - if ((vp = rc_avpair_get(vp, PW_REPLY_MESSAGE, 0))) { - strcat(msg, vp->strvalue); - strcat(msg, "\n"); - vp = vp->next; - } - } - - if ((recv_auth->code == PW_ACCESS_ACCEPT) || - (recv_auth->code == PW_PASSWORD_ACK) || - (recv_auth->code == PW_ACCOUNTING_RESPONSE)) { - result = OK_RC; - } else if ((recv_auth->code == PW_ACCESS_REJECT) || - (recv_auth->code == PW_PASSWORD_REJECT)) { - result = REJECT_RC; - } else { - result = BADRESP_RC; - } - - return result; -} - -/* - * Function: rc_check_reply - * - * Purpose: verify items in returned packet. - * - * Returns: OK_RC -- upon success, - * BADRESP_RC -- if anything looks funny. - * - */ - -static int rc_check_reply (AUTH_HDR *auth, int bufferlen, char *secret, unsigned char *vector, uint8_t seq_nbr) -{ - int secretlen; - int totallen; - unsigned char calc_digest[AUTH_VECTOR_LEN]; - unsigned char reply_digest[AUTH_VECTOR_LEN]; -#ifdef DIGEST_DEBUG - uint8_t *ptr; -#endif - - totallen = ntohs (auth->length); - secretlen = (int)strlen (secret); - - /* Do sanity checks on packet length */ - if ((totallen < 20) || (totallen > 4096)) { - rc_log(LOG_ERR, "rc_check_reply: received RADIUS server response with invalid length"); - return BADRESP_RC; - } - - /* Verify buffer space, should never trigger with current buffer size and check above */ - if ((totallen + secretlen) > bufferlen) { - rc_log(LOG_ERR, "rc_check_reply: not enough buffer space to verify RADIUS server response"); - return BADRESP_RC; - } - - /* Verify that id (seq. number) matches what we sent */ - if (auth->id != seq_nbr) { - rc_log(LOG_ERR, "rc_check_reply: received non-matching id in RADIUS server response"); - return BADRESP_RC; - } - - /* Verify the reply digest */ - memcpy ((char *) reply_digest, (char *) auth->vector, AUTH_VECTOR_LEN); - memcpy ((char *) auth->vector, (char *) vector, AUTH_VECTOR_LEN); - memcpy ((char *) auth + totallen, secret, secretlen); -#ifdef DIGEST_DEBUG - rc_log(LOG_ERR, "Calculating digest on:"); - - for (ptr = (u_char *)auth; ptr < ((u_char *)auth) + totallen + secretlen; ptr += 32) { - char buf[65]; - int i; - - buf[0] = '\0'; - - for (i = 0; i < 32; i++) { - if (ptr + i >= ((u_char *)auth) + totallen + secretlen) - break; - - sprintf(buf + i * 2, "%.2X", ptr[i]); - } - - rc_log(LOG_ERR, " %s", buf); - } - -#endif - rc_md5_calc (calc_digest, (unsigned char *) auth, totallen + secretlen); -#ifdef DIGEST_DEBUG - rc_log(LOG_ERR, "Calculated digest is:"); - - for (ptr = (u_char *)calc_digest; ptr < ((u_char *)calc_digest) + 16; ptr += 32) { - char buf[65]; - int i; - - buf[0] = '\0'; - - for (i = 0; i < 32; i++) { - if (ptr + i >= ((u_char *)calc_digest) + 16) - break; - - sprintf(buf + i * 2, "%.2X", ptr[i]); - } - - rc_log(LOG_ERR, " %s", buf); - } - - rc_log(LOG_ERR, "Reply digest is:"); - - for (ptr = (u_char *)reply_digest; ptr < ((u_char *)reply_digest) + 16; ptr += 32) { - char buf[65]; - int i; - - buf[0] = '\0'; - - for (i = 0; i < 32; i++) { - if (ptr + i >= ((u_char *)reply_digest) + 16) - break; - - sprintf(buf + i * 2, "%.2X", ptr[i]); - } - - rc_log(LOG_ERR, " %s", buf); - } - -#endif - - if (memcmp ((char *) reply_digest, (char *) calc_digest, - AUTH_VECTOR_LEN) != 0) { -#ifdef RADIUS_116 - - /* the original Livingston radiusd v1.16 seems to have - a bug in digest calculation with accounting requests, - authentication request are ok. i looked at the code - but couldn't find any bugs. any help to get this - kludge out are welcome. preferably i want to - reproduce the calculation bug here to be compatible - to stock Livingston radiusd v1.16. -lf, 03/14/96 - */ - if (auth->code == PW_ACCOUNTING_RESPONSE) - return OK_RC; - -#endif - rc_log(LOG_ERR, "rc_check_reply: received invalid reply digest from RADIUS server"); - return BADRESP_RC; - } - - return OK_RC; - -} - -/* - * Function: rc_random_vector - * - * Purpose: generates a random vector of AUTH_VECTOR_LEN octets. - * - * Returns: the vector (call by reference) - * - */ - -static void rc_random_vector (unsigned char *vector) -{ - int randno; - int i; -#if defined(HAVE_DEV_URANDOM) - int fd; - - /* well, I added this to increase the security for user passwords. - we use /dev/urandom here, as /dev/random might block and we don't - need that much randomness. BTW, great idea, Ted! -lf, 03/18/95 */ - - if ((fd = open(_PATH_DEV_URANDOM, O_RDONLY)) >= 0) { - unsigned char *pos; - int readcount; - - i = AUTH_VECTOR_LEN; - pos = vector; - - while (i > 0) { - readcount = read(fd, (char *)pos, i); - pos += readcount; - i -= readcount; - } - - close(fd); - return; - } /* else fall through */ - -#endif - srand ((unsigned)time (0) + getppid() + getpid()); /* random enough :) */ - - for (i = 0; i < AUTH_VECTOR_LEN;) { - randno = rand (); - memcpy ((char *) vector, (char *) &randno, sizeof (int)); - vector += sizeof (int); - i += sizeof (int); - } - - return; -} diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/lib/util.c b/openair3/PMIPv6/freeradius-client-1.1.6/lib/util.c deleted file mode 100644 index bc7e8f776e..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/lib/util.c +++ /dev/null @@ -1,358 +0,0 @@ -/* - * $Id: util.c,v 1.9 2008/02/11 06:54:23 sobomax Exp $ - * - * Copyright (c) 1998 The NetBSD Foundation, Inc. - * - * Copyright (C) 1995,1996,1997 Lars Fenneberg - * - * Copyright 1992 Livingston Enterprises, Inc. - * - * Copyright 1992,1993, 1994,1995 The Regents of the University of Michigan - * and Merit Network, Inc. All Rights Reserved - * - * See the file COPYRIGHT for the respective terms and conditions. - * If the file is missing contact me at lf@elemental.net - * and I'll send you a copy. - * - */ - -#include - -#include -#include -#include - -#define RC_BUFSIZ 1024 - -/* - * Function: rc_str2tm - * - * Purpose: Turns printable string into correct tm struct entries. - * - */ - -static const char * months[] = { - "Jan", "Feb", "Mar", "Apr", "May", "Jun", - "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" -}; - -void rc_str2tm (char *valstr, struct tm *tm) -{ - int i; - - /* Get the month */ - for (i = 0; i < 12; i++) { - if (strncmp (months[i], valstr, 3) == 0) { - tm->tm_mon = i; - i = 13; - } - } - - /* Get the Day */ - tm->tm_mday = atoi (&valstr[4]); - - /* Now the year */ - tm->tm_year = atoi (&valstr[7]) - 1900; -} - -/* - * Function: rc_getifname - * - * Purpose: get the network interface name associated with this tty - * - */ - -char *rc_getifname(rc_handle *rh, char *tty) -{ -#if defined(BSD4_4) || defined(linux) - int fd; - - if ((fd = open(tty, O_RDWR|O_NDELAY)) < 0) { - rc_log(LOG_ERR, "rc_getifname: can't open %s: %s", tty, strerror(errno)); - return NULL; - } - -#endif - -#ifdef BSD4_4 - strcpy(rh->ifname,ttyname(fd)); - - if (strlen(rh->ifname) < 1) { - rc_log(LOG_ERR, "rc_getifname: can't get attached interface of %s: %s", tty, strerror(errno)); - close(fd); - return NULL; - } - -#elif linux - - if (ioctl(fd, SIOCGIFNAME, rh->ifname) < 0) { - rc_log(LOG_ERR, "rc_getifname: can't ioctl %s: %s", tty, strerror(errno)); - close(fd); - return NULL; - } - -#else - return NULL; -#endif - -#if defined(BSD4_4) || defined(linux) - close(fd); - return rh->ifname; -#endif -} - -/* - * Function: rc_getstr - * - * Purpose: Reads in a string from the user (with or witout echo) - * - */ -#ifndef _MSC_VER -char *rc_getstr (rc_handle *rh, char *prompt, int do_echo) -{ - int in, out; - char *p; - struct termios term_old, term_new; - int is_term, flags, old_flags; - char c; - int flushed = 0; - sigset_t newset; - sigset_t oldset; - - in = fileno(stdin); - out = fileno(stdout); - - (void) sigemptyset (&newset); - (void) sigaddset (&newset, SIGINT); - (void) sigaddset (&newset, SIGTSTP); - (void) sigaddset (&newset, SIGQUIT); - - (void) sigprocmask (SIG_BLOCK, &newset, &oldset); - - if ((is_term = isatty(in))) { - - (void) tcgetattr (in, &term_old); - term_new = term_old; - - if (do_echo) - term_new.c_lflag |= ECHO; - else - term_new.c_lflag &= ~ECHO; - - if (tcsetattr (in, TCSAFLUSH, &term_new) == 0) - flushed = 1; - - } else { - is_term = 0; - - if ((flags = fcntl(in, F_GETFL, 0)) >= 0) { - old_flags = flags; - flags |= O_NONBLOCK; - - fcntl(in, F_SETFL, flags); - - while (read(in, &c, 1) > 0) - /* nothing */; - - fcntl(in, F_SETFL, old_flags); - - flushed = 1; - } - } - - write(out, prompt, strlen(prompt)); - - /* well, this looks ugly, but it handles the following end of line - markers: \r \r\0 \r\n \n \n\r, at least at a second pass */ - - p = rh->buf; - - for (;;) { - if (read(in, &c, 1) <= 0) - return NULL; - - if (!flushed && ((c == '\0') || (c == '\r') || (c == '\n'))) { - flushed = 1; - continue; - } - - if ((c == '\r') || (c == '\n')) - break; - - flushed = 1; - - if (p < rh->buf + GETSTR_LENGTH) { - if (do_echo && !is_term) - write(out, &c, 1); - - *p++ = c; - } - } - - *p = '\0'; - - if (!do_echo || !is_term) write(out, "\r\n", 2); - - if (is_term) - tcsetattr (in, TCSAFLUSH, &term_old); - else { - if ((flags = fcntl(in, F_GETFL, 0)) >= 0) { - old_flags = flags; - flags |= O_NONBLOCK; - - fcntl(in, F_SETFL, flags); - - while (read(in, &c, 1) > 0) - /* nothing */; - - fcntl(in, F_SETFL, old_flags); - } - } - - (void) sigprocmask (SIG_SETMASK, &oldset, NULL); - - return rh->buf; -} -#endif -void rc_mdelay(int msecs) -{ - struct timeval tv; - - tv.tv_sec = (int) msecs / 1000; - tv.tv_usec = (msecs % 1000) * 1000; - - select(0, NULL, NULL, NULL, &tv); -} - -/* - * Function: rc_mksid - * - * Purpose: generate a quite unique string - * - * Remarks: not that unique at all... - * - */ - -char * -rc_mksid (rc_handle *rh) -{ - sprintf (rh->buf1, "%08lX%04X", (unsigned long int) time (NULL), (unsigned int) getpid ()); - return rh->buf1; -} - -/* - * Function: rc_new - * - * Purpose: Initialises new Radius Client handle - * - */ - -rc_handle * -rc_new(void) -{ - rc_handle *rh; - - rh = malloc(sizeof(*rh)); - - if (rh == NULL) { - rc_log(LOG_CRIT, "rc_new: out of memory"); - return NULL; - } - - memset(rh, 0, sizeof(*rh)); - return rh; -} - -/* - * Function: rc_destroy - * - * Purpose: Destroys Radius Client handle reclaiming all memory - * - */ - -void -rc_destroy(rc_handle *rh) -{ - - rc_map2id_free(rh); - rc_dict_free(rh); - rc_config_free(rh); - - if (rh->this_host_bind_ipaddr != NULL) - free(rh->this_host_bind_ipaddr); - - if (rh->ppbuf != NULL) - free(rh->ppbuf); - - free(rh); -} - -/* - * Function: rc_fgetln - * - * Purpose: Get next line from the stream. - * - */ - -char * -rc_fgetln(FILE *fp, size_t *len) -{ - static char *buf = NULL; - static size_t bufsiz = 0; - char *ptr; - - if (buf == NULL) { - bufsiz = RC_BUFSIZ; - - if ((buf = malloc(bufsiz)) == NULL) - return NULL; - } - - if (fgets(buf, (int)bufsiz, fp) == NULL) - return NULL; - - *len = 0; - - while ((ptr = strchr(&buf[*len], '\n')) == NULL) { - size_t nbufsiz = bufsiz + RC_BUFSIZ; - char *nbuf = realloc(buf, nbufsiz); - - if (nbuf == NULL) { - int oerrno = errno; - free(buf); - errno = oerrno; - buf = NULL; - return NULL; - } else - buf = nbuf; - - *len = bufsiz; - - if (fgets(&buf[bufsiz], RC_BUFSIZ, fp) == NULL) - return buf; - - bufsiz = nbufsiz; - } - - *len = (ptr - buf) + 1; - return buf; -} - -/* - * Function: rc_getctime - * - * Purpose: Get current time (seconds since epoch) expressed as - * double-precision floating point number. - * - */ - -double -rc_getctime(void) -{ - struct timeval timev; - - if (gettimeofday(&timev, NULL) == -1) - return -1; - - return timev.tv_sec + ((double)timev.tv_usec) / 1000000.0; -} diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/libtool b/openair3/PMIPv6/freeradius-client-1.1.6/libtool deleted file mode 100755 index a67cd30b48..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/libtool +++ /dev/null @@ -1,8900 +0,0 @@ -#! /bin/bash - -# libtool - Provide generalized library-building support services. -# Generated automatically by config.status (radiusclient) 1.1.6 -# Libtool was configured on host neo: -# NOTE: Changes made to this file will be lost: look at ltmain.sh. -# -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, -# 2006, 2007, 2008 Free Software Foundation, Inc. -# Written by Gordon Matzigkeit, 1996 -# -# This file is part of GNU Libtool. -# -# GNU Libtool is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License as -# published by the Free Software Foundation; either version 2 of -# the License, or (at your option) any later version. -# -# As a special exception to the GNU General Public License, -# if you distribute this file as part of a program or library that -# is built using GNU Libtool, you may include this file under the -# same distribution terms that you use for the rest of that program. -# -# GNU Libtool is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with GNU Libtool; see the file COPYING. If not, a copy -# can be downloaded from http://www.gnu.org/licenses/gpl.html, or -# obtained by writing to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - - -# The names of the tagged configurations supported by this script. -available_tags="" - -# ### BEGIN LIBTOOL CONFIG - -# Which release of libtool.m4 was used? -macro_version=2.2.6b -macro_revision=1.3017 - -# Whether or not to build shared libraries. -build_libtool_libs=yes - -# Whether or not to build static libraries. -build_old_libs=yes - -# What type of objects to build. -pic_mode=default - -# Whether or not to optimize for fast installation. -fast_install=yes - -# The host system. -host_alias= -host=i686-pc-linux-gnu -host_os=linux-gnu - -# The build system. -build_alias= -build=i686-pc-linux-gnu -build_os=linux-gnu - -# A sed program that does not truncate output. -SED="/bin/sed" - -# Sed that helps us avoid accidentally triggering echo(1) options like -n. -Xsed="$SED -e 1s/^X//" - -# A grep program that handles long lines. -GREP="/bin/grep" - -# An ERE matcher. -EGREP="/bin/grep -E" - -# A literal string matcher. -FGREP="/bin/grep -F" - -# A BSD- or MS-compatible name lister. -NM="/usr/bin/nm -B" - -# Whether we need soft or hard links. -LN_S="ln -s" - -# What is the maximum length of a command? -max_cmd_len=1572864 - -# Object file suffix (normally "o"). -objext=o - -# Executable file suffix (normally ""). -exeext= - -# whether the shell understands "unset". -lt_unset=unset - -# turn spaces into newlines. -SP2NL="tr \\040 \\012" - -# turn newlines into spaces. -NL2SP="tr \\015\\012 \\040\\040" - -# How to create reloadable object files. -reload_flag=" -r" -reload_cmds="\$LD\$reload_flag -o \$output\$reload_objs" - -# An object symbol dumper. -OBJDUMP="objdump" - -# Method to check whether dependent libraries are shared objects. -deplibs_check_method="pass_all" - -# Command to use when deplibs_check_method == "file_magic". -file_magic_cmd="\$MAGIC_CMD" - -# The archiver. -AR="/usr/bin/ar" -AR_FLAGS="cru" - -# A symbol stripping program. -STRIP="strip" - -# Commands used to install an old-style archive. -RANLIB="ranlib" -old_postinstall_cmds="chmod 644 \$oldlib~\$RANLIB \$oldlib" -old_postuninstall_cmds="" - -# A C compiler. -LTCC="gcc" - -# LTCC compiler flags. -LTCFLAGS="-g -O2" - -# Take the output of nm and produce a listing of raw symbols and C names. -global_symbol_pipe="sed -n -e 's/^.*[ ]\\([ABCDGIRSTW][ABCDGIRSTW]*\\)[ ][ ]*\\([_A-Za-z][_A-Za-z0-9]*\\)\$/\\1 \\2 \\2/p'" - -# Transform the output of nm in a proper C declaration. -global_symbol_to_cdecl="sed -n -e 's/^T .* \\(.*\\)\$/extern int \\1();/p' -e 's/^[ABCDGIRSTW]* .* \\(.*\\)\$/extern char \\1;/p'" - -# Transform the output of nm in a C name address pair. -global_symbol_to_c_name_address="sed -n -e 's/^: \\([^ ]*\\) \$/ {\\\"\\1\\\", (void *) 0},/p' -e 's/^[ABCDGIRSTW]* \\([^ ]*\\) \\([^ ]*\\)\$/ {\"\\2\", (void *) \\&\\2},/p'" - -# Transform the output of nm in a C name address pair when lib prefix is needed. -global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \\([^ ]*\\) \$/ {\\\"\\1\\\", (void *) 0},/p' -e 's/^[ABCDGIRSTW]* \\([^ ]*\\) \\(lib[^ ]*\\)\$/ {\"\\2\", (void *) \\&\\2},/p' -e 's/^[ABCDGIRSTW]* \\([^ ]*\\) \\([^ ]*\\)\$/ {\"lib\\2\", (void *) \\&\\2},/p'" - -# The name of the directory that contains temporary libtool files. -objdir=.libs - -# Shell to use when invoking shell scripts. -SHELL="/bin/bash" - -# An echo program that does not interpret backslashes. -ECHO="echo" - -# Used to examine libraries when file_magic_cmd begins with "file". -MAGIC_CMD=file - -# Must we lock files when doing compilation? -need_locks="no" - -# Tool to manipulate archived DWARF debug symbol files on Mac OS X. -DSYMUTIL="" - -# Tool to change global to local symbols on Mac OS X. -NMEDIT="" - -# Tool to manipulate fat objects and archives on Mac OS X. -LIPO="" - -# ldd/readelf like tool for Mach-O binaries on Mac OS X. -OTOOL="" - -# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. -OTOOL64="" - -# Old archive suffix (normally "a"). -libext=a - -# Shared library suffix (normally ".so"). -shrext_cmds=".so" - -# The commands to extract the exported symbol list from a shared archive. -extract_expsyms_cmds="" - -# Variables whose values should be saved in libtool wrapper scripts and -# restored at link time. -variables_saved_for_relink="PATH LD_LIBRARY_PATH LD_RUN_PATH GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" - -# Do we need the "lib" prefix for modules? -need_lib_prefix=no - -# Do we need a version for libraries? -need_version=no - -# Library versioning type. -version_type=linux - -# Shared library runtime path variable. -runpath_var=LD_RUN_PATH - -# Shared library path variable. -shlibpath_var=LD_LIBRARY_PATH - -# Is shlibpath searched before the hard-coded library search path? -shlibpath_overrides_runpath=no - -# Format of library name prefix. -libname_spec="lib\$name" - -# List of archive names. First name is the real one, the rest are links. -# The last name is the one that the linker finds with -lNAME -library_names_spec="\${libname}\${release}\${shared_ext}\$versuffix \${libname}\${release}\${shared_ext}\$major \$libname\${shared_ext}" - -# The coded name of the library, if different from the real name. -soname_spec="\${libname}\${release}\${shared_ext}\$major" - -# Command to use after installation of a shared archive. -postinstall_cmds="" - -# Command to use after uninstallation of a shared archive. -postuninstall_cmds="" - -# Commands used to finish a libtool library installation in a directory. -finish_cmds="PATH=\\\"\\\$PATH:/sbin\\\" ldconfig -n \$libdir" - -# As "finish_cmds", except a single script fragment to be evaled but -# not shown. -finish_eval="" - -# Whether we should hardcode library paths into libraries. -hardcode_into_libs=yes - -# Compile-time system search path for libraries. -sys_lib_search_path_spec="/usr/lib/gcc/i486-linux-gnu/4.4.3 /usr/lib /lib /usr/lib/i486-linux-gnu" - -# Run-time system search path for libraries. -sys_lib_dlsearch_path_spec="/lib /usr/lib /usr/lib/mesa /lib/i486-linux-gnu /usr/lib/i486-linux-gnu /usr/lib/alsa-lib /usr/local/lib " - -# Whether dlopen is supported. -dlopen_support=unknown - -# Whether dlopen of programs is supported. -dlopen_self=unknown - -# Whether dlopen of statically linked programs is supported. -dlopen_self_static=unknown - -# Commands to strip libraries. -old_striplib="strip --strip-debug" -striplib="strip --strip-unneeded" - - -# The linker used to build libraries. -LD="/usr/bin/ld" - -# Commands used to build an old-style archive. -old_archive_cmds="\$AR \$AR_FLAGS \$oldlib\$oldobjs~\$RANLIB \$oldlib" - -# A language specific compiler. -CC="gcc" - -# Is the compiler the GNU compiler? -with_gcc=yes - -# Compiler flag to turn off builtin functions. -no_builtin_flag=" -fno-builtin" - -# How to pass a linker flag through the compiler. -wl="-Wl," - -# Additional compiler flags for building library objects. -pic_flag=" -fPIC -DPIC" - -# Compiler flag to prevent dynamic linking. -link_static_flag="-static" - -# Does compiler simultaneously support -c and -o options? -compiler_c_o="yes" - -# Whether or not to add -lc for building shared libraries. -build_libtool_need_lc=no - -# Whether or not to disallow shared libs when runtime libs are static. -allow_libtool_libs_with_static_runtimes=no - -# Compiler flag to allow reflexive dlopens. -export_dynamic_flag_spec="\${wl}--export-dynamic" - -# Compiler flag to generate shared objects directly from archives. -whole_archive_flag_spec="\${wl}--whole-archive\$convenience \${wl}--no-whole-archive" - -# Whether the compiler copes with passing no objects directly. -compiler_needs_object="no" - -# Create an old-style archive from a shared archive. -old_archive_from_new_cmds="" - -# Create a temporary old-style archive to link instead of a shared archive. -old_archive_from_expsyms_cmds="" - -# Commands used to build a shared archive. -archive_cmds="\$CC -shared \$libobjs \$deplibs \$compiler_flags \${wl}-soname \$wl\$soname -o \$lib" -archive_expsym_cmds="echo \\\"{ global:\\\" > \$output_objdir/\$libname.ver~ - cat \$export_symbols | sed -e \\\"s/\\\\(.*\\\\)/\\\\1;/\\\" >> \$output_objdir/\$libname.ver~ - echo \\\"local: *; };\\\" >> \$output_objdir/\$libname.ver~ - \$CC -shared \$libobjs \$deplibs \$compiler_flags \${wl}-soname \$wl\$soname \${wl}-version-script \${wl}\$output_objdir/\$libname.ver -o \$lib" - -# Commands used to build a loadable module if different from building -# a shared archive. -module_cmds="" -module_expsym_cmds="" - -# Whether we are building with GNU ld or not. -with_gnu_ld="yes" - -# Flag that allows shared libraries with undefined symbols to be built. -allow_undefined_flag="" - -# Flag that enforces no undefined symbols. -no_undefined_flag="" - -# Flag to hardcode $libdir into a binary during linking. -# This must work even if $libdir does not exist -hardcode_libdir_flag_spec="\${wl}-rpath \${wl}\$libdir" - -# If ld is used when linking, flag to hardcode $libdir into a binary -# during linking. This must work even if $libdir does not exist. -hardcode_libdir_flag_spec_ld="" - -# Whether we need a single "-rpath" flag with a separated argument. -hardcode_libdir_separator="" - -# Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes -# DIR into the resulting binary. -hardcode_direct=no - -# Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes -# DIR into the resulting binary and the resulting library dependency is -# "absolute",i.e impossible to change by setting ${shlibpath_var} if the -# library is relocated. -hardcode_direct_absolute=no - -# Set to "yes" if using the -LDIR flag during linking hardcodes DIR -# into the resulting binary. -hardcode_minus_L=no - -# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR -# into the resulting binary. -hardcode_shlibpath_var=unsupported - -# Set to "yes" if building a shared library automatically hardcodes DIR -# into the library and all subsequent libraries and executables linked -# against it. -hardcode_automatic=no - -# Set to yes if linker adds runtime paths of dependent libraries -# to runtime path list. -inherit_rpath=no - -# Whether libtool must link a program against all its dependency libraries. -link_all_deplibs=no - -# Fix the shell variable $srcfile for the compiler. -fix_srcfile_path="" - -# Set to "yes" if exported symbols are required. -always_export_symbols=no - -# The commands to list exported symbols. -export_symbols_cmds="\$NM \$libobjs \$convenience | \$global_symbol_pipe | \$SED 's/.* //' | sort | uniq > \$export_symbols" - -# Symbols that should not be listed in the preloaded symbols. -exclude_expsyms="_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*" - -# Symbols that must always be exported. -include_expsyms="" - -# Commands necessary for linking programs (against libraries) with templates. -prelink_cmds="" - -# Specify filename containing input files. -file_list_spec="" - -# How to hardcode a shared library path into an executable. -hardcode_action=immediate - -# ### END LIBTOOL CONFIG - -# Generated from ltmain.m4sh. - -# ltmain.sh (GNU libtool) 2.2.6b -# Written by Gordon Matzigkeit , 1996 - -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, 2007 2008 Free Software Foundation, Inc. -# This is free software; see the source for copying conditions. There is NO -# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -# GNU Libtool is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# As a special exception to the GNU General Public License, -# if you distribute this file as part of a program or library that -# is built using GNU Libtool, you may include this file under the -# same distribution terms that you use for the rest of that program. -# -# GNU Libtool is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with GNU Libtool; see the file COPYING. If not, a copy -# can be downloaded from http://www.gnu.org/licenses/gpl.html, -# or obtained by writing to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - -# Usage: $progname [OPTION]... [MODE-ARG]... -# -# Provide generalized library-building support services. -# -# --config show all configuration variables -# --debug enable verbose shell tracing -# -n, --dry-run display commands without modifying any files -# --features display basic configuration information and exit -# --mode=MODE use operation mode MODE -# --preserve-dup-deps don't remove duplicate dependency libraries -# --quiet, --silent don't print informational messages -# --tag=TAG use configuration variables from tag TAG -# -v, --verbose print informational messages (default) -# --version print version information -# -h, --help print short or long help message -# -# MODE must be one of the following: -# -# clean remove files from the build directory -# compile compile a source file into a libtool object -# execute automatically set library path, then run a program -# finish complete the installation of libtool libraries -# install install libraries or executables -# link create a library or an executable -# uninstall remove libraries from an installed directory -# -# MODE-ARGS vary depending on the MODE. -# Try `$progname --help --mode=MODE' for a more detailed description of MODE. -# -# When reporting a bug, please describe a test case to reproduce it and -# include the following information: -# -# host-triplet: $host -# shell: $SHELL -# compiler: $LTCC -# compiler flags: $LTCFLAGS -# linker: $LD (gnu? $with_gnu_ld) -# $progname: (GNU libtool) 2.2.6b Debian-2.2.6b-2ubuntu1 -# automake: $automake_version -# autoconf: $autoconf_version -# -# Report bugs to . - -PROGRAM=ltmain.sh -PACKAGE=libtool -VERSION="2.2.6b Debian-2.2.6b-2ubuntu1" -TIMESTAMP="" -package_revision=1.3017 - -# Be Bourne compatible -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then - emulate sh - NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac -fi -BIN_SH=xpg4; export BIN_SH # for Tru64 -DUALCASE=1; export DUALCASE # for MKS sh - -# NLS nuisances: We save the old values to restore during execute mode. -# Only set LANG and LC_ALL to C if already set. -# These must not be set unconditionally because not all systems understand -# e.g. LANG=C (notably SCO). -lt_user_locale= -lt_safe_locale= -for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES -do - eval "if test \"\${$lt_var+set}\" = set; then - save_$lt_var=\$$lt_var - $lt_var=C - export $lt_var - lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\" - lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\" - fi" -done - -$lt_unset CDPATH - - - - - -: ${CP="cp -f"} -: ${ECHO="echo"} -: ${EGREP="/bin/grep -E"} -: ${FGREP="/bin/grep -F"} -: ${GREP="/bin/grep"} -: ${LN_S="ln -s"} -: ${MAKE="make"} -: ${MKDIR="mkdir"} -: ${MV="mv -f"} -: ${RM="rm -f"} -: ${SED="/bin/sed"} -: ${SHELL="${CONFIG_SHELL-/bin/sh}"} -: ${Xsed="$SED -e 1s/^X//"} - -# Global variables: -EXIT_SUCCESS=0 -EXIT_FAILURE=1 -EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. -EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. - -exit_status=$EXIT_SUCCESS - -# Make sure IFS has a sensible default -lt_nl=' -' -IFS=" $lt_nl" - -dirname="s,/[^/]*$,," -basename="s,^.*/,," - -# func_dirname_and_basename file append nondir_replacement -# perform func_basename and func_dirname in a single function -# call: -# dirname: Compute the dirname of FILE. If nonempty, -# add APPEND to the result, otherwise set result -# to NONDIR_REPLACEMENT. -# value returned in "$func_dirname_result" -# basename: Compute filename of FILE. -# value retuned in "$func_basename_result" -# Implementation must be kept synchronized with func_dirname -# and func_basename. For efficiency, we do not delegate to -# those functions but instead duplicate the functionality here. -func_dirname_and_basename () -{ - # Extract subdirectory from the argument. - func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"` - if test "X$func_dirname_result" = "X${1}"; then - func_dirname_result="${3}" - else - func_dirname_result="$func_dirname_result${2}" - fi - func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"` -} - -# Generated shell functions inserted here. - -# func_dirname file append nondir_replacement -# Compute the dirname of FILE. If nonempty, add APPEND to the result, -# otherwise set result to NONDIR_REPLACEMENT. -func_dirname () -{ - case ${1} in - */*) func_dirname_result="${1%/*}${2}" ;; - * ) func_dirname_result="${3}" ;; - esac -} - -# func_basename file -func_basename () -{ - func_basename_result="${1##*/}" -} - -# func_dirname_and_basename file append nondir_replacement -# perform func_basename and func_dirname in a single function -# call: -# dirname: Compute the dirname of FILE. If nonempty, -# add APPEND to the result, otherwise set result -# to NONDIR_REPLACEMENT. -# value returned in "$func_dirname_result" -# basename: Compute filename of FILE. -# value retuned in "$func_basename_result" -# Implementation must be kept synchronized with func_dirname -# and func_basename. For efficiency, we do not delegate to -# those functions but instead duplicate the functionality here. -func_dirname_and_basename () -{ - case ${1} in - */*) func_dirname_result="${1%/*}${2}" ;; - * ) func_dirname_result="${3}" ;; - esac - func_basename_result="${1##*/}" -} - -# func_stripname prefix suffix name -# strip PREFIX and SUFFIX off of NAME. -# PREFIX and SUFFIX must not contain globbing or regex special -# characters, hashes, percent signs, but SUFFIX may contain a leading -# dot (in which case that matches only a dot). -func_stripname () -{ - # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are - # positional parameters, so assign one to ordinary parameter first. - func_stripname_result=${3} - func_stripname_result=${func_stripname_result#"${1}"} - func_stripname_result=${func_stripname_result%"${2}"} -} - -# func_opt_split -func_opt_split () -{ - func_opt_split_opt=${1%%=*} - func_opt_split_arg=${1#*=} -} - -# func_lo2o object -func_lo2o () -{ - case ${1} in - *.lo) func_lo2o_result=${1%.lo}.${objext} ;; - *) func_lo2o_result=${1} ;; - esac -} - -# func_xform libobj-or-source -func_xform () -{ - func_xform_result=${1%.*}.lo -} - -# func_arith arithmetic-term... -func_arith () -{ - func_arith_result=$(( $* )) -} - -# func_len string -# STRING may not start with a hyphen. -func_len () -{ - func_len_result=${#1} -} - - -# func_append var value -# Append VALUE to the end of shell variable VAR. -func_append () -{ - eval "$1+=\$2" -} -# Generated shell functions inserted here. - -# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh -# is ksh but when the shell is invoked as "sh" and the current value of -# the _XPG environment variable is not equal to 1 (one), the special -# positional parameter $0, within a function call, is the name of the -# function. -progpath="$0" - -# The name of this program: -# In the unlikely event $progname began with a '-', it would play havoc with -# func_echo (imagine progname=-n), so we prepend ./ in that case: -func_dirname_and_basename "$progpath" -progname=$func_basename_result -case $progname in - -*) progname=./$progname ;; -esac - -# Make sure we have an absolute path for reexecution: -case $progpath in - [\\/]*|[A-Za-z]:\\*) ;; - *[\\/]*) - progdir=$func_dirname_result - progdir=`cd "$progdir" && pwd` - progpath="$progdir/$progname" - ;; - *) - save_IFS="$IFS" - IFS=: - for progdir in $PATH; do - IFS="$save_IFS" - test -x "$progdir/$progname" && break - done - IFS="$save_IFS" - test -n "$progdir" || progdir=`pwd` - progpath="$progdir/$progname" - ;; -esac - -# Sed substitution that helps us do robust quoting. It backslashifies -# metacharacters that are still active within double-quoted strings. -Xsed="${SED}"' -e 1s/^X//' -sed_quote_subst='s/\([`"$\\]\)/\\\1/g' - -# Same as above, but do not quote variable references. -double_quote_subst='s/\(["`\\]\)/\\\1/g' - -# Re-`\' parameter expansions in output of double_quote_subst that were -# `\'-ed in input to the same. If an odd number of `\' preceded a '$' -# in input to double_quote_subst, that '$' was protected from expansion. -# Since each input `\' is now two `\'s, look for any number of runs of -# four `\'s followed by two `\'s and then a '$'. `\' that '$'. -bs='\\' -bs2='\\\\' -bs4='\\\\\\\\' -dollar='\$' -sed_double_backslash="\ - s/$bs4/&\\ -/g - s/^$bs2$dollar/$bs&/ - s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g - s/\n//g" - -# Standard options: -opt_dry_run=false -opt_help=false -opt_quiet=false -opt_verbose=false -opt_warning=: - -# func_echo arg... -# Echo program name prefixed message, along with the current mode -# name if it has been set yet. -func_echo () -{ - $ECHO "$progname${mode+: }$mode: $*" -} - -# func_verbose arg... -# Echo program name prefixed message in verbose mode only. -func_verbose () -{ - $opt_verbose && func_echo ${1+"$@"} - - # A bug in bash halts the script if the last line of a function - # fails when set -e is in force, so we need another command to - # work around that: - : -} - -# func_error arg... -# Echo program name prefixed message to standard error. -func_error () -{ - $ECHO "$progname${mode+: }$mode: "${1+"$@"} 1>&2 -} - -# func_warning arg... -# Echo program name prefixed warning message to standard error. -func_warning () -{ - $opt_warning && $ECHO "$progname${mode+: }$mode: warning: "${1+"$@"} 1>&2 - - # bash bug again: - : -} - -# func_fatal_error arg... -# Echo program name prefixed message to standard error, and exit. -func_fatal_error () -{ - func_error ${1+"$@"} - exit $EXIT_FAILURE -} - -# func_fatal_help arg... -# Echo program name prefixed message to standard error, followed by -# a help hint, and exit. -func_fatal_help () -{ - func_error ${1+"$@"} - func_fatal_error "$help" -} -help="Try \`$progname --help' for more information." ## default - - -# func_grep expression filename -# Check whether EXPRESSION matches any line of FILENAME, without output. -func_grep () -{ - $GREP "$1" "$2" >/dev/null 2>&1 -} - - -# func_mkdir_p directory-path -# Make sure the entire path to DIRECTORY-PATH is available. -func_mkdir_p () -{ - my_directory_path="$1" - my_dir_list= - - if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then - - # Protect directory names starting with `-' - case $my_directory_path in - -*) my_directory_path="./$my_directory_path" ;; - esac - - # While some portion of DIR does not yet exist... - while test ! -d "$my_directory_path"; do - # ...make a list in topmost first order. Use a colon delimited - # list incase some portion of path contains whitespace. - my_dir_list="$my_directory_path:$my_dir_list" - - # If the last portion added has no slash in it, the list is done - case $my_directory_path in */*) ;; *) break ;; esac - - # ...otherwise throw away the child directory and loop - my_directory_path=`$ECHO "X$my_directory_path" | $Xsed -e "$dirname"` - done - my_dir_list=`$ECHO "X$my_dir_list" | $Xsed -e 's,:*$,,'` - - save_mkdir_p_IFS="$IFS"; IFS=':' - for my_dir in $my_dir_list; do - IFS="$save_mkdir_p_IFS" - # mkdir can fail with a `File exist' error if two processes - # try to create one of the directories concurrently. Don't - # stop in that case! - $MKDIR "$my_dir" 2>/dev/null || : - done - IFS="$save_mkdir_p_IFS" - - # Bail out if we (or some other process) failed to create a directory. - test -d "$my_directory_path" || \ - func_fatal_error "Failed to create \`$1'" - fi -} - - -# func_mktempdir [string] -# Make a temporary directory that won't clash with other running -# libtool processes, and avoids race conditions if possible. If -# given, STRING is the basename for that directory. -func_mktempdir () -{ - my_template="${TMPDIR-/tmp}/${1-$progname}" - - if test "$opt_dry_run" = ":"; then - # Return a directory name, but don't create it in dry-run mode - my_tmpdir="${my_template}-$$" - else - - # If mktemp works, use that first and foremost - my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` - - if test ! -d "$my_tmpdir"; then - # Failing that, at least try and use $RANDOM to avoid a race - my_tmpdir="${my_template}-${RANDOM-0}$$" - - save_mktempdir_umask=`umask` - umask 0077 - $MKDIR "$my_tmpdir" - umask $save_mktempdir_umask - fi - - # If we're not in dry-run mode, bomb out on failure - test -d "$my_tmpdir" || \ - func_fatal_error "cannot create temporary directory \`$my_tmpdir'" - fi - - $ECHO "X$my_tmpdir" | $Xsed -} - - -# func_quote_for_eval arg -# Aesthetically quote ARG to be evaled later. -# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT -# is double-quoted, suitable for a subsequent eval, whereas -# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters -# which are still active within double quotes backslashified. -func_quote_for_eval () -{ - case $1 in - *[\\\`\"\$]*) - func_quote_for_eval_unquoted_result=`$ECHO "X$1" | $Xsed -e "$sed_quote_subst"` ;; - *) - func_quote_for_eval_unquoted_result="$1" ;; - esac - - case $func_quote_for_eval_unquoted_result in - # Double-quote args containing shell metacharacters to delay - # word splitting, command substitution and and variable - # expansion for a subsequent eval. - # Many Bourne shells cannot handle close brackets correctly - # in scan sets, so we specify it separately. - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") - func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\"" - ;; - *) - func_quote_for_eval_result="$func_quote_for_eval_unquoted_result" - esac -} - - -# func_quote_for_expand arg -# Aesthetically quote ARG to be evaled later; same as above, -# but do not quote variable references. -func_quote_for_expand () -{ - case $1 in - *[\\\`\"]*) - my_arg=`$ECHO "X$1" | $Xsed \ - -e "$double_quote_subst" -e "$sed_double_backslash"` ;; - *) - my_arg="$1" ;; - esac - - case $my_arg in - # Double-quote args containing shell metacharacters to delay - # word splitting and command substitution for a subsequent eval. - # Many Bourne shells cannot handle close brackets correctly - # in scan sets, so we specify it separately. - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") - my_arg="\"$my_arg\"" - ;; - esac - - func_quote_for_expand_result="$my_arg" -} - - -# func_show_eval cmd [fail_exp] -# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is -# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP -# is given, then evaluate it. -func_show_eval () -{ - my_cmd="$1" - my_fail_exp="${2-:}" - - ${opt_silent-false} || { - func_quote_for_expand "$my_cmd" - eval "func_echo $func_quote_for_expand_result" - } - - if ${opt_dry_run-false}; then :; else - eval "$my_cmd" - my_status=$? - if test "$my_status" -eq 0; then :; else - eval "(exit $my_status); $my_fail_exp" - fi - fi -} - - -# func_show_eval_locale cmd [fail_exp] -# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is -# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP -# is given, then evaluate it. Use the saved locale for evaluation. -func_show_eval_locale () -{ - my_cmd="$1" - my_fail_exp="${2-:}" - - ${opt_silent-false} || { - func_quote_for_expand "$my_cmd" - eval "func_echo $func_quote_for_expand_result" - } - - if ${opt_dry_run-false}; then :; else - eval "$lt_user_locale - $my_cmd" - my_status=$? - eval "$lt_safe_locale" - if test "$my_status" -eq 0; then :; else - eval "(exit $my_status); $my_fail_exp" - fi - fi -} - - - - - -# func_version -# Echo version message to standard output and exit. -func_version () -{ - $SED -n '/^# '$PROGRAM' (GNU /,/# warranty; / { - s/^# // - s/^# *$// - s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/ - p - }' < "$progpath" - exit $? -} - -# func_usage -# Echo short help message to standard output and exit. -func_usage () -{ - $SED -n '/^# Usage:/,/# -h/ { - s/^# // - s/^# *$// - s/\$progname/'$progname'/ - p - }' < "$progpath" - $ECHO - $ECHO "run \`$progname --help | more' for full usage" - exit $? -} - -# func_help -# Echo long help message to standard output and exit. -func_help () -{ - $SED -n '/^# Usage:/,/# Report bugs to/ { - s/^# // - s/^# *$// - s*\$progname*'$progname'* - s*\$host*'"$host"'* - s*\$SHELL*'"$SHELL"'* - s*\$LTCC*'"$LTCC"'* - s*\$LTCFLAGS*'"$LTCFLAGS"'* - s*\$LD*'"$LD"'* - s/\$with_gnu_ld/'"$with_gnu_ld"'/ - s/\$automake_version/'"`(automake --version) 2>/dev/null |$SED 1q`"'/ - s/\$autoconf_version/'"`(autoconf --version) 2>/dev/null |$SED 1q`"'/ - p - }' < "$progpath" - exit $? -} - -# func_missing_arg argname -# Echo program name prefixed message to standard error and set global -# exit_cmd. -func_missing_arg () -{ - func_error "missing argument for $1" - exit_cmd=exit -} - -exit_cmd=: - - - - - -# Check that we have a working $ECHO. -if test "X$1" = X--no-reexec; then - # Discard the --no-reexec flag, and continue. - shift -elif test "X$1" = X--fallback-echo; then - # Avoid inline document here, it may be left over - : -elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t'; then - # Yippee, $ECHO works! - : -else - # Restart under the correct shell, and then maybe $ECHO will work. - exec $SHELL "$progpath" --no-reexec ${1+"$@"} -fi - -if test "X$1" = X--fallback-echo; then - # used as fallback echo - shift - cat </dev/null 2>&1; then - taglist="$taglist $tagname" - - # Evaluate the configuration. Be careful to quote the path - # and the sed script, to avoid splitting on whitespace, but - # also don't use non-portable quotes within backquotes within - # quotes we have to do it in 2 steps: - extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` - eval "$extractedcf" - else - func_error "ignoring unknown tag $tagname" - fi - ;; - esac -} - -# Parse options once, thoroughly. This comes as soon as possible in -# the script to make things like `libtool --version' happen quickly. -{ - - # Shorthand for --mode=foo, only valid as the first argument - case $1 in - clean|clea|cle|cl) - shift; set dummy --mode clean ${1+"$@"}; shift - ;; - compile|compil|compi|comp|com|co|c) - shift; set dummy --mode compile ${1+"$@"}; shift - ;; - execute|execut|execu|exec|exe|ex|e) - shift; set dummy --mode execute ${1+"$@"}; shift - ;; - finish|finis|fini|fin|fi|f) - shift; set dummy --mode finish ${1+"$@"}; shift - ;; - install|instal|insta|inst|ins|in|i) - shift; set dummy --mode install ${1+"$@"}; shift - ;; - link|lin|li|l) - shift; set dummy --mode link ${1+"$@"}; shift - ;; - uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) - shift; set dummy --mode uninstall ${1+"$@"}; shift - ;; - esac - - # Parse non-mode specific arguments: - while test "$#" -gt 0; do - opt="$1" - shift - - case $opt in - --config) func_config ;; - - --debug) preserve_args="$preserve_args $opt" - func_echo "enabling shell trace mode" - opt_debug='set -x' - $opt_debug - ;; - - -dlopen) test "$#" -eq 0 && func_missing_arg "$opt" && break - execute_dlfiles="$execute_dlfiles $1" - shift - ;; - - --dry-run | -n) opt_dry_run=: ;; - --features) func_features ;; - --finish) mode="finish" ;; - - --mode) test "$#" -eq 0 && func_missing_arg "$opt" && break - case $1 in - # Valid mode arguments: - clean) ;; - compile) ;; - execute) ;; - finish) ;; - install) ;; - link) ;; - relink) ;; - uninstall) ;; - - # Catch anything else as an error - *) func_error "invalid argument for $opt" - exit_cmd=exit - break - ;; - esac - - mode="$1" - shift - ;; - - --preserve-dup-deps) - opt_duplicate_deps=: ;; - - --quiet|--silent) preserve_args="$preserve_args $opt" - opt_silent=: - ;; - - --verbose| -v) preserve_args="$preserve_args $opt" - opt_silent=false - ;; - - --tag) test "$#" -eq 0 && func_missing_arg "$opt" && break - preserve_args="$preserve_args $opt $1" - func_enable_tag "$1" # tagname is set here - shift - ;; - - # Separate optargs to long options: - -dlopen=*|--mode=*|--tag=*) - func_opt_split "$opt" - set dummy "$func_opt_split_opt" "$func_opt_split_arg" ${1+"$@"} - shift - ;; - - -\?|-h) func_usage ;; - --help) opt_help=: ;; - --version) func_version ;; - - -*) func_fatal_help "unrecognized option \`$opt'" ;; - - *) nonopt="$opt" - break - ;; - esac - done - - - case $host in - *cygwin* | *mingw* | *pw32* | *cegcc*) - # don't eliminate duplications in $postdeps and $predeps - opt_duplicate_compiler_generated_deps=: - ;; - *) - opt_duplicate_compiler_generated_deps=$opt_duplicate_deps - ;; - esac - - # Having warned about all mis-specified options, bail out if - # anything was wrong. - $exit_cmd $EXIT_FAILURE -} - -# func_check_version_match -# Ensure that we are using m4 macros, and libtool script from the same -# release of libtool. -func_check_version_match () -{ - if test "$package_revision" != "$macro_revision"; then - if test "$VERSION" != "$macro_version"; then - if test -z "$macro_version"; then - cat >&2 <<_LT_EOF -$progname: Version mismatch error. This is $PACKAGE $VERSION, but the -$progname: definition of this LT_INIT comes from an older release. -$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION -$progname: and run autoconf again. -_LT_EOF - else - cat >&2 <<_LT_EOF -$progname: Version mismatch error. This is $PACKAGE $VERSION, but the -$progname: definition of this LT_INIT comes from $PACKAGE $macro_version. -$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION -$progname: and run autoconf again. -_LT_EOF - fi - else - cat >&2 <<_LT_EOF -$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, -$progname: but the definition of this LT_INIT comes from revision $macro_revision. -$progname: You should recreate aclocal.m4 with macros from revision $package_revision -$progname: of $PACKAGE $VERSION and run autoconf again. -_LT_EOF - fi - - exit $EXIT_MISMATCH - fi -} - - -## ----------- ## -## Main. ## -## ----------- ## - -$opt_help || { - # Sanity checks first: - func_check_version_match - - if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then - func_fatal_configuration "not configured to build any kind of library" - fi - - test -z "$mode" && func_fatal_error "error: you must specify a MODE." - - - # Darwin sucks - eval std_shrext=\"$shrext_cmds\" - - - # Only execute mode is allowed to have -dlopen flags. - if test -n "$execute_dlfiles" && test "$mode" != execute; then - func_error "unrecognized option \`-dlopen'" - $ECHO "$help" 1>&2 - exit $EXIT_FAILURE - fi - - # Change the help message to a mode-specific one. - generic_help="$help" - help="Try \`$progname --help --mode=$mode' for more information." -} - - -# func_lalib_p file -# True iff FILE is a libtool `.la' library or `.lo' object file. -# This function is only a basic sanity check; it will hardly flush out -# determined imposters. -func_lalib_p () -{ - test -f "$1" && - $SED -e 4q "$1" 2>/dev/null \ - | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 -} - -# func_lalib_unsafe_p file -# True iff FILE is a libtool `.la' library or `.lo' object file. -# This function implements the same check as func_lalib_p without -# resorting to external programs. To this end, it redirects stdin and -# closes it afterwards, without saving the original file descriptor. -# As a safety measure, use it only where a negative result would be -# fatal anyway. Works if `file' does not exist. -func_lalib_unsafe_p () -{ - lalib_p=no - if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then - for lalib_p_l in 1 2 3 4 - do - read lalib_p_line - case "$lalib_p_line" in - \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; - esac - done - exec 0<&5 5<&- - fi - test "$lalib_p" = yes -} - -# func_ltwrapper_script_p file -# True iff FILE is a libtool wrapper script -# This function is only a basic sanity check; it will hardly flush out -# determined imposters. -func_ltwrapper_script_p () -{ - func_lalib_p "$1" -} - -# func_ltwrapper_executable_p file -# True iff FILE is a libtool wrapper executable -# This function is only a basic sanity check; it will hardly flush out -# determined imposters. -func_ltwrapper_executable_p () -{ - func_ltwrapper_exec_suffix= - case $1 in - *.exe) ;; - *) func_ltwrapper_exec_suffix=.exe ;; - esac - $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 -} - -# func_ltwrapper_scriptname file -# Assumes file is an ltwrapper_executable -# uses $file to determine the appropriate filename for a -# temporary ltwrapper_script. -func_ltwrapper_scriptname () -{ - func_ltwrapper_scriptname_result="" - if func_ltwrapper_executable_p "$1"; then - func_dirname_and_basename "$1" "" "." - func_stripname '' '.exe' "$func_basename_result" - func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper" - fi -} - -# func_ltwrapper_p file -# True iff FILE is a libtool wrapper script or wrapper executable -# This function is only a basic sanity check; it will hardly flush out -# determined imposters. -func_ltwrapper_p () -{ - func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" -} - - -# func_execute_cmds commands fail_cmd -# Execute tilde-delimited COMMANDS. -# If FAIL_CMD is given, eval that upon failure. -# FAIL_CMD may read-access the current command in variable CMD! -func_execute_cmds () -{ - $opt_debug - save_ifs=$IFS; IFS='~' - for cmd in $1; do - IFS=$save_ifs - eval cmd=\"$cmd\" - func_show_eval "$cmd" "${2-:}" - done - IFS=$save_ifs -} - - -# func_source file -# Source FILE, adding directory component if necessary. -# Note that it is not necessary on cygwin/mingw to append a dot to -# FILE even if both FILE and FILE.exe exist: automatic-append-.exe -# behavior happens only for exec(3), not for open(2)! Also, sourcing -# `FILE.' does not work on cygwin managed mounts. -func_source () -{ - $opt_debug - case $1 in - */* | *\\*) . "$1" ;; - *) . "./$1" ;; - esac -} - - -# func_infer_tag arg -# Infer tagged configuration to use if any are available and -# if one wasn't chosen via the "--tag" command line option. -# Only attempt this if the compiler in the base compile -# command doesn't match the default compiler. -# arg is usually of the form 'gcc ...' -func_infer_tag () -{ - $opt_debug - if test -n "$available_tags" && test -z "$tagname"; then - CC_quoted= - for arg in $CC; do - func_quote_for_eval "$arg" - CC_quoted="$CC_quoted $func_quote_for_eval_result" - done - case $@ in - # Blanks in the command may have been stripped by the calling shell, - # but not from the CC environment variable when configure was run. - " $CC "* | "$CC "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*) ;; - # Blanks at the start of $base_compile will cause this to fail - # if we don't check for them as well. - *) - for z in $available_tags; do - if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then - # Evaluate the configuration. - eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" - CC_quoted= - for arg in $CC; do - # Double-quote args containing other shell metacharacters. - func_quote_for_eval "$arg" - CC_quoted="$CC_quoted $func_quote_for_eval_result" - done - case "$@ " in - " $CC "* | "$CC "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*) - # The compiler in the base compile command matches - # the one in the tagged configuration. - # Assume this is the tagged configuration we want. - tagname=$z - break - ;; - esac - fi - done - # If $tagname still isn't set, then no tagged configuration - # was found and let the user know that the "--tag" command - # line option must be used. - if test -z "$tagname"; then - func_echo "unable to infer tagged configuration" - func_fatal_error "specify a tag with \`--tag'" -# else -# func_verbose "using $tagname tagged configuration" - fi - ;; - esac - fi -} - - - -# func_write_libtool_object output_name pic_name nonpic_name -# Create a libtool object file (analogous to a ".la" file), -# but don't create it if we're doing a dry run. -func_write_libtool_object () -{ - write_libobj=${1} - if test "$build_libtool_libs" = yes; then - write_lobj=\'${2}\' - else - write_lobj=none - fi - - if test "$build_old_libs" = yes; then - write_oldobj=\'${3}\' - else - write_oldobj=none - fi - - $opt_dry_run || { - cat >${write_libobj}T <?"'"'"' &()|`$[]' \ - && func_warning "libobj name \`$libobj' may not contain shell special characters." - func_dirname_and_basename "$obj" "/" "" - objname="$func_basename_result" - xdir="$func_dirname_result" - lobj=${xdir}$objdir/$objname - - test -z "$base_compile" && \ - func_fatal_help "you must specify a compilation command" - - # Delete any leftover library objects. - if test "$build_old_libs" = yes; then - removelist="$obj $lobj $libobj ${libobj}T" - else - removelist="$lobj $libobj ${libobj}T" - fi - - # On Cygwin there's no "real" PIC flag so we must build both object types - case $host_os in - cygwin* | mingw* | pw32* | os2* | cegcc*) - pic_mode=default - ;; - esac - if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then - # non-PIC code in shared libraries is not supported - pic_mode=default - fi - - # Calculate the filename of the output object if compiler does - # not support -o with -c - if test "$compiler_c_o" = no; then - output_obj=`$ECHO "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext} - lockfile="$output_obj.lock" - else - output_obj= - need_locks=no - lockfile= - fi - - # Lock this critical section if it is needed - # We use this script file to make the link, it avoids creating a new file - if test "$need_locks" = yes; then - until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do - func_echo "Waiting for $lockfile to be removed" - sleep 2 - done - elif test "$need_locks" = warn; then - if test -f "$lockfile"; then - $ECHO "\ -*** ERROR, $lockfile exists and contains: -`cat $lockfile 2>/dev/null` - -This indicates that another process is trying to use the same -temporary object file, and libtool could not work around it because -your compiler does not support \`-c' and \`-o' together. If you -repeat this compilation, it may succeed, by chance, but you had better -avoid parallel builds (make -j) in this platform, or get a better -compiler." - - $opt_dry_run || $RM $removelist - exit $EXIT_FAILURE - fi - removelist="$removelist $output_obj" - $ECHO "$srcfile" > "$lockfile" - fi - - $opt_dry_run || $RM $removelist - removelist="$removelist $lockfile" - trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 - - if test -n "$fix_srcfile_path"; then - eval srcfile=\"$fix_srcfile_path\" - fi - func_quote_for_eval "$srcfile" - qsrcfile=$func_quote_for_eval_result - - # Only build a PIC object if we are building libtool libraries. - if test "$build_libtool_libs" = yes; then - # Without this assignment, base_compile gets emptied. - fbsd_hideous_sh_bug=$base_compile - - if test "$pic_mode" != no; then - command="$base_compile $qsrcfile $pic_flag" - else - # Don't build PIC code - command="$base_compile $qsrcfile" - fi - - func_mkdir_p "$xdir$objdir" - - if test -z "$output_obj"; then - # Place PIC objects in $objdir - command="$command -o $lobj" - fi - - func_show_eval_locale "$command" \ - 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' - - if test "$need_locks" = warn && - test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then - $ECHO "\ -*** ERROR, $lockfile contains: -`cat $lockfile 2>/dev/null` - -but it should contain: -$srcfile - -This indicates that another process is trying to use the same -temporary object file, and libtool could not work around it because -your compiler does not support \`-c' and \`-o' together. If you -repeat this compilation, it may succeed, by chance, but you had better -avoid parallel builds (make -j) in this platform, or get a better -compiler." - - $opt_dry_run || $RM $removelist - exit $EXIT_FAILURE - fi - - # Just move the object if needed, then go on to compile the next one - if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then - func_show_eval '$MV "$output_obj" "$lobj"' \ - 'error=$?; $opt_dry_run || $RM $removelist; exit $error' - fi - - # Allow error messages only from the first compilation. - if test "$suppress_opt" = yes; then - suppress_output=' >/dev/null 2>&1' - fi - fi - - # Only build a position-dependent object if we build old libraries. - if test "$build_old_libs" = yes; then - if test "$pic_mode" != yes; then - # Don't build PIC code - command="$base_compile $qsrcfile$pie_flag" - else - command="$base_compile $qsrcfile $pic_flag" - fi - if test "$compiler_c_o" = yes; then - command="$command -o $obj" - fi - - # Suppress compiler output if we already did a PIC compilation. - command="$command$suppress_output" - func_show_eval_locale "$command" \ - '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' - - if test "$need_locks" = warn && - test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then - $ECHO "\ -*** ERROR, $lockfile contains: -`cat $lockfile 2>/dev/null` - -but it should contain: -$srcfile - -This indicates that another process is trying to use the same -temporary object file, and libtool could not work around it because -your compiler does not support \`-c' and \`-o' together. If you -repeat this compilation, it may succeed, by chance, but you had better -avoid parallel builds (make -j) in this platform, or get a better -compiler." - - $opt_dry_run || $RM $removelist - exit $EXIT_FAILURE - fi - - # Just move the object if needed - if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then - func_show_eval '$MV "$output_obj" "$obj"' \ - 'error=$?; $opt_dry_run || $RM $removelist; exit $error' - fi - fi - - $opt_dry_run || { - func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" - - # Unlock the critical section if it was locked - if test "$need_locks" != no; then - removelist=$lockfile - $RM "$lockfile" - fi - } - - exit $EXIT_SUCCESS -} - -$opt_help || { -test "$mode" = compile && func_mode_compile ${1+"$@"} -} - -func_mode_help () -{ - # We need to display help for each of the modes. - case $mode in - "") - # Generic help is extracted from the usage comments - # at the start of this file. - func_help - ;; - - clean) - $ECHO \ -"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... - -Remove files from the build directory. - -RM is the name of the program to use to delete files associated with each FILE -(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed -to RM. - -If FILE is a libtool library, object or program, all the files associated -with it are deleted. Otherwise, only FILE itself is deleted using RM." - ;; - - compile) - $ECHO \ -"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE - -Compile a source file into a libtool library object. - -This mode accepts the following additional options: - - -o OUTPUT-FILE set the output file name to OUTPUT-FILE - -no-suppress do not suppress compiler output for multiple passes - -prefer-pic try to building PIC objects only - -prefer-non-pic try to building non-PIC objects only - -shared do not build a \`.o' file suitable for static linking - -static only build a \`.o' file suitable for static linking - -COMPILE-COMMAND is a command to be used in creating a \`standard' object file -from the given SOURCEFILE. - -The output file name is determined by removing the directory component from -SOURCEFILE, then substituting the C source code suffix \`.c' with the -library object suffix, \`.lo'." - ;; - - execute) - $ECHO \ -"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... - -Automatically set library path, then run a program. - -This mode accepts the following additional options: - - -dlopen FILE add the directory containing FILE to the library path - -This mode sets the library path environment variable according to \`-dlopen' -flags. - -If any of the ARGS are libtool executable wrappers, then they are translated -into their corresponding uninstalled binary, and any of their required library -directories are added to the library path. - -Then, COMMAND is executed, with ARGS as arguments." - ;; - - finish) - $ECHO \ -"Usage: $progname [OPTION]... --mode=finish [LIBDIR]... - -Complete the installation of libtool libraries. - -Each LIBDIR is a directory that contains libtool libraries. - -The commands that this mode executes may require superuser privileges. Use -the \`--dry-run' option if you just want to see what would be executed." - ;; - - install) - $ECHO \ -"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... - -Install executables or libraries. - -INSTALL-COMMAND is the installation command. The first component should be -either the \`install' or \`cp' program. - -The following components of INSTALL-COMMAND are treated specially: - - -inst-prefix PREFIX-DIR Use PREFIX-DIR as a staging area for installation - -The rest of the components are interpreted as arguments to that command (only -BSD-compatible install options are recognized)." - ;; - - link) - $ECHO \ -"Usage: $progname [OPTION]... --mode=link LINK-COMMAND... - -Link object files or libraries together to form another library, or to -create an executable program. - -LINK-COMMAND is a command using the C compiler that you would use to create -a program from several object files. - -The following components of LINK-COMMAND are treated specially: - - -all-static do not do any dynamic linking at all - -avoid-version do not add a version suffix if possible - -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime - -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols - -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) - -export-symbols SYMFILE - try to export only the symbols listed in SYMFILE - -export-symbols-regex REGEX - try to export only the symbols matching REGEX - -LLIBDIR search LIBDIR for required installed libraries - -lNAME OUTPUT-FILE requires the installed library libNAME - -module build a library that can dlopened - -no-fast-install disable the fast-install mode - -no-install link a not-installable executable - -no-undefined declare that a library does not refer to external symbols - -o OUTPUT-FILE create OUTPUT-FILE from the specified objects - -objectlist FILE Use a list of object files found in FILE to specify objects - -precious-files-regex REGEX - don't remove output files matching REGEX - -release RELEASE specify package release information - -rpath LIBDIR the created library will eventually be installed in LIBDIR - -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries - -shared only do dynamic linking of libtool libraries - -shrext SUFFIX override the standard shared library file extension - -static do not do any dynamic linking of uninstalled libtool libraries - -static-libtool-libs - do not do any dynamic linking of libtool libraries - -version-info CURRENT[:REVISION[:AGE]] - specify library version info [each variable defaults to 0] - -weak LIBNAME declare that the target provides the LIBNAME interface - -All other options (arguments beginning with \`-') are ignored. - -Every other argument is treated as a filename. Files ending in \`.la' are -treated as uninstalled libtool libraries, other files are standard or library -object files. - -If the OUTPUT-FILE ends in \`.la', then a libtool library is created, -only library objects (\`.lo' files) may be specified, and \`-rpath' is -required, except when creating a convenience library. - -If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created -using \`ar' and \`ranlib', or on Windows using \`lib'. - -If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file -is created, otherwise an executable program is created." - ;; - - uninstall) - $ECHO \ -"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... - -Remove libraries from an installation directory. - -RM is the name of the program to use to delete files associated with each FILE -(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed -to RM. - -If FILE is a libtool library, all the files associated with it are deleted. -Otherwise, only FILE itself is deleted using RM." - ;; - - *) - func_fatal_help "invalid operation mode \`$mode'" - ;; - esac - - $ECHO - $ECHO "Try \`$progname --help' for more information about other modes." - - exit $? -} - - # Now that we've collected a possible --mode arg, show help if necessary - $opt_help && func_mode_help - - -# func_mode_execute arg... -func_mode_execute () -{ - $opt_debug - # The first argument is the command name. - cmd="$nonopt" - test -z "$cmd" && \ - func_fatal_help "you must specify a COMMAND" - - # Handle -dlopen flags immediately. - for file in $execute_dlfiles; do - test -f "$file" \ - || func_fatal_help "\`$file' is not a file" - - dir= - case $file in - *.la) - # Check to see that this really is a libtool archive. - func_lalib_unsafe_p "$file" \ - || func_fatal_help "\`$lib' is not a valid libtool archive" - - # Read the libtool library. - dlname= - library_names= - func_source "$file" - - # Skip this library if it cannot be dlopened. - if test -z "$dlname"; then - # Warn if it was a shared library. - test -n "$library_names" && \ - func_warning "\`$file' was not linked with \`-export-dynamic'" - continue - fi - - func_dirname "$file" "" "." - dir="$func_dirname_result" - - if test -f "$dir/$objdir/$dlname"; then - dir="$dir/$objdir" - else - if test ! -f "$dir/$dlname"; then - func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" - fi - fi - ;; - - *.lo) - # Just add the directory containing the .lo file. - func_dirname "$file" "" "." - dir="$func_dirname_result" - ;; - - *) - func_warning "\`-dlopen' is ignored for non-libtool libraries and objects" - continue - ;; - esac - - # Get the absolute pathname. - absdir=`cd "$dir" && pwd` - test -n "$absdir" && dir="$absdir" - - # Now add the directory to shlibpath_var. - if eval "test -z \"\$$shlibpath_var\""; then - eval "$shlibpath_var=\"\$dir\"" - else - eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" - fi - done - - # This variable tells wrapper scripts just to set shlibpath_var - # rather than running their programs. - libtool_execute_magic="$magic" - - # Check if any of the arguments is a wrapper script. - args= - for file - do - case $file in - -*) ;; - *) - # Do a test to see if this is really a libtool program. - if func_ltwrapper_script_p "$file"; then - func_source "$file" - # Transform arg to wrapped name. - file="$progdir/$program" - elif func_ltwrapper_executable_p "$file"; then - func_ltwrapper_scriptname "$file" - func_source "$func_ltwrapper_scriptname_result" - # Transform arg to wrapped name. - file="$progdir/$program" - fi - ;; - esac - # Quote arguments (to preserve shell metacharacters). - func_quote_for_eval "$file" - args="$args $func_quote_for_eval_result" - done - - if test "X$opt_dry_run" = Xfalse; then - if test -n "$shlibpath_var"; then - # Export the shlibpath_var. - eval "export $shlibpath_var" - fi - - # Restore saved environment variables - for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES - do - eval "if test \"\${save_$lt_var+set}\" = set; then - $lt_var=\$save_$lt_var; export $lt_var - else - $lt_unset $lt_var - fi" - done - - # Now prepare to actually exec the command. - exec_cmd="\$cmd$args" - else - # Display what would be done. - if test -n "$shlibpath_var"; then - eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" - $ECHO "export $shlibpath_var" - fi - $ECHO "$cmd$args" - exit $EXIT_SUCCESS - fi -} - -test "$mode" = execute && func_mode_execute ${1+"$@"} - - -# func_mode_finish arg... -func_mode_finish () -{ - $opt_debug - libdirs="$nonopt" - admincmds= - - if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then - for dir - do - libdirs="$libdirs $dir" - done - - for libdir in $libdirs; do - if test -n "$finish_cmds"; then - # Do each command in the finish commands. - func_execute_cmds "$finish_cmds" 'admincmds="$admincmds -'"$cmd"'"' - fi - if test -n "$finish_eval"; then - # Do the single finish_eval. - eval cmds=\"$finish_eval\" - $opt_dry_run || eval "$cmds" || admincmds="$admincmds - $cmds" - fi - done - fi - - # Exit here if they wanted silent mode. - $opt_silent && exit $EXIT_SUCCESS - - $ECHO "X----------------------------------------------------------------------" | $Xsed - $ECHO "Libraries have been installed in:" - for libdir in $libdirs; do - $ECHO " $libdir" - done - $ECHO - $ECHO "If you ever happen to want to link against installed libraries" - $ECHO "in a given directory, LIBDIR, you must either use libtool, and" - $ECHO "specify the full pathname of the library, or use the \`-LLIBDIR'" - $ECHO "flag during linking and do at least one of the following:" - if test -n "$shlibpath_var"; then - $ECHO " - add LIBDIR to the \`$shlibpath_var' environment variable" - $ECHO " during execution" - fi - if test -n "$runpath_var"; then - $ECHO " - add LIBDIR to the \`$runpath_var' environment variable" - $ECHO " during linking" - fi - if test -n "$hardcode_libdir_flag_spec"; then - libdir=LIBDIR - eval flag=\"$hardcode_libdir_flag_spec\" - - $ECHO " - use the \`$flag' linker flag" - fi - if test -n "$admincmds"; then - $ECHO " - have your system administrator run these commands:$admincmds" - fi - if test -f /etc/ld.so.conf; then - $ECHO " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" - fi - $ECHO - - $ECHO "See any operating system documentation about shared libraries for" - case $host in - solaris2.[6789]|solaris2.1[0-9]) - $ECHO "more information, such as the ld(1), crle(1) and ld.so(8) manual" - $ECHO "pages." - ;; - *) - $ECHO "more information, such as the ld(1) and ld.so(8) manual pages." - ;; - esac - $ECHO "X----------------------------------------------------------------------" | $Xsed - exit $EXIT_SUCCESS -} - -test "$mode" = finish && func_mode_finish ${1+"$@"} - - -# func_mode_install arg... -func_mode_install () -{ - $opt_debug - # There may be an optional sh(1) argument at the beginning of - # install_prog (especially on Windows NT). - if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || - # Allow the use of GNU shtool's install command. - $ECHO "X$nonopt" | $GREP shtool >/dev/null; then - # Aesthetically quote it. - func_quote_for_eval "$nonopt" - install_prog="$func_quote_for_eval_result " - arg=$1 - shift - else - install_prog= - arg=$nonopt - fi - - # The real first argument should be the name of the installation program. - # Aesthetically quote it. - func_quote_for_eval "$arg" - install_prog="$install_prog$func_quote_for_eval_result" - - # We need to accept at least all the BSD install flags. - dest= - files= - opts= - prev= - install_type= - isdir=no - stripme= - for arg - do - if test -n "$dest"; then - files="$files $dest" - dest=$arg - continue - fi - - case $arg in - -d) isdir=yes ;; - -f) - case " $install_prog " in - *[\\\ /]cp\ *) ;; - *) prev=$arg ;; - esac - ;; - -g | -m | -o) - prev=$arg - ;; - -s) - stripme=" -s" - continue - ;; - -*) - ;; - *) - # If the previous option needed an argument, then skip it. - if test -n "$prev"; then - prev= - else - dest=$arg - continue - fi - ;; - esac - - # Aesthetically quote the argument. - func_quote_for_eval "$arg" - install_prog="$install_prog $func_quote_for_eval_result" - done - - test -z "$install_prog" && \ - func_fatal_help "you must specify an install program" - - test -n "$prev" && \ - func_fatal_help "the \`$prev' option requires an argument" - - if test -z "$files"; then - if test -z "$dest"; then - func_fatal_help "no file or destination specified" - else - func_fatal_help "you must specify a destination" - fi - fi - - # Strip any trailing slash from the destination. - func_stripname '' '/' "$dest" - dest=$func_stripname_result - - # Check to see that the destination is a directory. - test -d "$dest" && isdir=yes - if test "$isdir" = yes; then - destdir="$dest" - destname= - else - func_dirname_and_basename "$dest" "" "." - destdir="$func_dirname_result" - destname="$func_basename_result" - - # Not a directory, so check to see that there is only one file specified. - set dummy $files; shift - test "$#" -gt 1 && \ - func_fatal_help "\`$dest' is not a directory" - fi - case $destdir in - [\\/]* | [A-Za-z]:[\\/]*) ;; - *) - for file in $files; do - case $file in - *.lo) ;; - *) - func_fatal_help "\`$destdir' must be an absolute directory name" - ;; - esac - done - ;; - esac - - # This variable tells wrapper scripts just to set variables rather - # than running their programs. - libtool_install_magic="$magic" - - staticlibs= - future_libdirs= - current_libdirs= - for file in $files; do - - # Do each installation. - case $file in - *.$libext) - # Do the static libraries later. - staticlibs="$staticlibs $file" - ;; - - *.la) - # Check to see that this really is a libtool archive. - func_lalib_unsafe_p "$file" \ - || func_fatal_help "\`$file' is not a valid libtool archive" - - library_names= - old_library= - relink_command= - func_source "$file" - - # Add the libdir to current_libdirs if it is the destination. - if test "X$destdir" = "X$libdir"; then - case "$current_libdirs " in - *" $libdir "*) ;; - *) current_libdirs="$current_libdirs $libdir" ;; - esac - else - # Note the libdir as a future libdir. - case "$future_libdirs " in - *" $libdir "*) ;; - *) future_libdirs="$future_libdirs $libdir" ;; - esac - fi - - func_dirname "$file" "/" "" - dir="$func_dirname_result" - dir="$dir$objdir" - - if test -n "$relink_command"; then - # Determine the prefix the user has applied to our future dir. - inst_prefix_dir=`$ECHO "X$destdir" | $Xsed -e "s%$libdir\$%%"` - - # Don't allow the user to place us outside of our expected - # location b/c this prevents finding dependent libraries that - # are installed to the same prefix. - # At present, this check doesn't affect windows .dll's that - # are installed into $libdir/../bin (currently, that works fine) - # but it's something to keep an eye on. - test "$inst_prefix_dir" = "$destdir" && \ - func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir" - - if test -n "$inst_prefix_dir"; then - # Stick the inst_prefix_dir data into the link command. - relink_command=`$ECHO "X$relink_command" | $Xsed -e "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` - else - relink_command=`$ECHO "X$relink_command" | $Xsed -e "s%@inst_prefix_dir@%%"` - fi - - func_warning "relinking \`$file'" - func_show_eval "$relink_command" \ - 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"' - fi - - # See the names of the shared library. - set dummy $library_names; shift - if test -n "$1"; then - realname="$1" - shift - - srcname="$realname" - test -n "$relink_command" && srcname="$realname"T - - # Install the shared library and build the symlinks. - func_show_eval "$install_prog $dir/$srcname $destdir/$realname" \ - 'exit $?' - tstripme="$stripme" - case $host_os in - cygwin* | mingw* | pw32* | cegcc*) - case $realname in - *.dll.a) - tstripme="" - ;; - esac - ;; - esac - if test -n "$tstripme" && test -n "$striplib"; then - func_show_eval "$striplib $destdir/$realname" 'exit $?' - fi - - if test "$#" -gt 0; then - # Delete the old symlinks, and create new ones. - # Try `ln -sf' first, because the `ln' binary might depend on - # the symlink we replace! Solaris /bin/ln does not understand -f, - # so we also need to try rm && ln -s. - for linkname - do - test "$linkname" != "$realname" \ - && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" - done - fi - - # Do each command in the postinstall commands. - lib="$destdir/$realname" - func_execute_cmds "$postinstall_cmds" 'exit $?' - fi - - # Install the pseudo-library for information purposes. - func_basename "$file" - name="$func_basename_result" - instname="$dir/$name"i - func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' - - # Maybe install the static library, too. - test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library" - ;; - - *.lo) - # Install (i.e. copy) a libtool object. - - # Figure out destination file name, if it wasn't already specified. - if test -n "$destname"; then - destfile="$destdir/$destname" - else - func_basename "$file" - destfile="$func_basename_result" - destfile="$destdir/$destfile" - fi - - # Deduce the name of the destination old-style object file. - case $destfile in - *.lo) - func_lo2o "$destfile" - staticdest=$func_lo2o_result - ;; - *.$objext) - staticdest="$destfile" - destfile= - ;; - *) - func_fatal_help "cannot copy a libtool object to \`$destfile'" - ;; - esac - - # Install the libtool object if requested. - test -n "$destfile" && \ - func_show_eval "$install_prog $file $destfile" 'exit $?' - - # Install the old object if enabled. - if test "$build_old_libs" = yes; then - # Deduce the name of the old-style object file. - func_lo2o "$file" - staticobj=$func_lo2o_result - func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' - fi - exit $EXIT_SUCCESS - ;; - - *) - # Figure out destination file name, if it wasn't already specified. - if test -n "$destname"; then - destfile="$destdir/$destname" - else - func_basename "$file" - destfile="$func_basename_result" - destfile="$destdir/$destfile" - fi - - # If the file is missing, and there is a .exe on the end, strip it - # because it is most likely a libtool script we actually want to - # install - stripped_ext="" - case $file in - *.exe) - if test ! -f "$file"; then - func_stripname '' '.exe' "$file" - file=$func_stripname_result - stripped_ext=".exe" - fi - ;; - esac - - # Do a test to see if this is really a libtool program. - case $host in - *cygwin* | *mingw*) - if func_ltwrapper_executable_p "$file"; then - func_ltwrapper_scriptname "$file" - wrapper=$func_ltwrapper_scriptname_result - else - func_stripname '' '.exe' "$file" - wrapper=$func_stripname_result - fi - ;; - *) - wrapper=$file - ;; - esac - if func_ltwrapper_script_p "$wrapper"; then - notinst_deplibs= - relink_command= - - func_source "$wrapper" - - # Check the variables that should have been set. - test -z "$generated_by_libtool_version" && \ - func_fatal_error "invalid libtool wrapper script \`$wrapper'" - - finalize=yes - for lib in $notinst_deplibs; do - # Check to see that each library is installed. - libdir= - if test -f "$lib"; then - func_source "$lib" - fi - libfile="$libdir/"`$ECHO "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test - if test -n "$libdir" && test ! -f "$libfile"; then - func_warning "\`$lib' has not been installed in \`$libdir'" - finalize=no - fi - done - - relink_command= - func_source "$wrapper" - - outputname= - if test "$fast_install" = no && test -n "$relink_command"; then - $opt_dry_run || { - if test "$finalize" = yes; then - tmpdir=`func_mktempdir` - func_basename "$file$stripped_ext" - file="$func_basename_result" - outputname="$tmpdir/$file" - # Replace the output file specification. - relink_command=`$ECHO "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'` - - $opt_silent || { - func_quote_for_expand "$relink_command" - eval "func_echo $func_quote_for_expand_result" - } - if eval "$relink_command"; then : - else - func_error "error: relink \`$file' with the above command before installing it" - $opt_dry_run || ${RM}r "$tmpdir" - continue - fi - file="$outputname" - else - func_warning "cannot relink \`$file'" - fi - } - else - # Install the binary that we compiled earlier. - file=`$ECHO "X$file$stripped_ext" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"` - fi - fi - - # remove .exe since cygwin /usr/bin/install will append another - # one anyway - case $install_prog,$host in - */usr/bin/install*,*cygwin*) - case $file:$destfile in - *.exe:*.exe) - # this is ok - ;; - *.exe:*) - destfile=$destfile.exe - ;; - *:*.exe) - func_stripname '' '.exe' "$destfile" - destfile=$func_stripname_result - ;; - esac - ;; - esac - func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' - $opt_dry_run || if test -n "$outputname"; then - ${RM}r "$tmpdir" - fi - ;; - esac - done - - for file in $staticlibs; do - func_basename "$file" - name="$func_basename_result" - - # Set up the ranlib parameters. - oldlib="$destdir/$name" - - func_show_eval "$install_prog \$file \$oldlib" 'exit $?' - - if test -n "$stripme" && test -n "$old_striplib"; then - func_show_eval "$old_striplib $oldlib" 'exit $?' - fi - - # Do each command in the postinstall commands. - func_execute_cmds "$old_postinstall_cmds" 'exit $?' - done - - test -n "$future_libdirs" && \ - func_warning "remember to run \`$progname --finish$future_libdirs'" - - if test -n "$current_libdirs"; then - # Maybe just do a dry run. - $opt_dry_run && current_libdirs=" -n$current_libdirs" - exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' - else - exit $EXIT_SUCCESS - fi -} - -test "$mode" = install && func_mode_install ${1+"$@"} - - -# func_generate_dlsyms outputname originator pic_p -# Extract symbols from dlprefiles and create ${outputname}S.o with -# a dlpreopen symbol table. -func_generate_dlsyms () -{ - $opt_debug - my_outputname="$1" - my_originator="$2" - my_pic_p="${3-no}" - my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'` - my_dlsyms= - - if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then - if test -n "$NM" && test -n "$global_symbol_pipe"; then - my_dlsyms="${my_outputname}S.c" - else - func_error "not configured to extract global symbols from dlpreopened files" - fi - fi - - if test -n "$my_dlsyms"; then - case $my_dlsyms in - "") ;; - *.c) - # Discover the nlist of each of the dlfiles. - nlist="$output_objdir/${my_outputname}.nm" - - func_show_eval "$RM $nlist ${nlist}S ${nlist}T" - - # Parse the name list into a source file. - func_verbose "creating $output_objdir/$my_dlsyms" - - $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ -/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */ -/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */ - -#ifdef __cplusplus -extern \"C\" { -#endif - -/* External symbol declarations for the compiler. */\ -" - - if test "$dlself" = yes; then - func_verbose "generating symbol list for \`$output'" - - $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" - - # Add our own program objects to the symbol list. - progfiles=`$ECHO "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` - for progfile in $progfiles; do - func_verbose "extracting global C symbols from \`$progfile'" - $opt_dry_run || eval "$NM $progfile | $global_symbol_pipe >> '$nlist'" - done - - if test -n "$exclude_expsyms"; then - $opt_dry_run || { - eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' - eval '$MV "$nlist"T "$nlist"' - } - fi - - if test -n "$export_symbols_regex"; then - $opt_dry_run || { - eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' - eval '$MV "$nlist"T "$nlist"' - } - fi - - # Prepare the list of exported symbols - if test -z "$export_symbols"; then - export_symbols="$output_objdir/$outputname.exp" - $opt_dry_run || { - $RM $export_symbols - eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' - case $host in - *cygwin* | *mingw* | *cegcc* ) - eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' - eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' - ;; - esac - } - else - $opt_dry_run || { - eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' - eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' - eval '$MV "$nlist"T "$nlist"' - case $host in - *cygwin | *mingw* | *cegcc* ) - eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' - eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' - ;; - esac - } - fi - fi - - for dlprefile in $dlprefiles; do - func_verbose "extracting global C symbols from \`$dlprefile'" - func_basename "$dlprefile" - name="$func_basename_result" - $opt_dry_run || { - eval '$ECHO ": $name " >> "$nlist"' - eval "$NM $dlprefile 2>/dev/null | $global_symbol_pipe >> '$nlist'" - } - done - - $opt_dry_run || { - # Make sure we have at least an empty file. - test -f "$nlist" || : > "$nlist" - - if test -n "$exclude_expsyms"; then - $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T - $MV "$nlist"T "$nlist" - fi - - # Try sorting and uniquifying the output. - if $GREP -v "^: " < "$nlist" | - if sort -k 3 /dev/null 2>&1; then - sort -k 3 - else - sort +2 - fi | - uniq > "$nlist"S; then - : - else - $GREP -v "^: " < "$nlist" > "$nlist"S - fi - - if test -f "$nlist"S; then - eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' - else - $ECHO '/* NONE */' >> "$output_objdir/$my_dlsyms" - fi - - $ECHO >> "$output_objdir/$my_dlsyms" "\ - -/* The mapping between symbol names and symbols. */ -typedef struct { - const char *name; - void *address; -} lt_dlsymlist; -" - case $host in - *cygwin* | *mingw* | *cegcc* ) - $ECHO >> "$output_objdir/$my_dlsyms" "\ -/* DATA imports from DLLs on WIN32 con't be const, because - runtime relocations are performed -- see ld's documentation - on pseudo-relocs. */" - lt_dlsym_const= ;; - *osf5*) - echo >> "$output_objdir/$my_dlsyms" "\ -/* This system does not cope well with relocations in const data */" - lt_dlsym_const= ;; - *) - lt_dlsym_const=const ;; - esac - - $ECHO >> "$output_objdir/$my_dlsyms" "\ -extern $lt_dlsym_const lt_dlsymlist -lt_${my_prefix}_LTX_preloaded_symbols[]; -$lt_dlsym_const lt_dlsymlist -lt_${my_prefix}_LTX_preloaded_symbols[] = -{\ - { \"$my_originator\", (void *) 0 }," - - case $need_lib_prefix in - no) - eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" - ;; - *) - eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" - ;; - esac - $ECHO >> "$output_objdir/$my_dlsyms" "\ - {0, (void *) 0} -}; - -/* This works around a problem in FreeBSD linker */ -#ifdef FREEBSD_WORKAROUND -static const void *lt_preloaded_setup() { - return lt_${my_prefix}_LTX_preloaded_symbols; -} -#endif - -#ifdef __cplusplus -} -#endif\ -" - } # !$opt_dry_run - - pic_flag_for_symtable= - case "$compile_command " in - *" -static "*) ;; - *) - case $host in - # compiling the symbol table file with pic_flag works around - # a FreeBSD bug that causes programs to crash when -lm is - # linked before any other PIC object. But we must not use - # pic_flag when linking with -static. The problem exists in - # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. - *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) - pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; - *-*-hpux*) - pic_flag_for_symtable=" $pic_flag" ;; - *) - if test "X$my_pic_p" != Xno; then - pic_flag_for_symtable=" $pic_flag" - fi - ;; - esac - ;; - esac - symtab_cflags= - for arg in $LTCFLAGS; do - case $arg in - -pie | -fpie | -fPIE) ;; - *) symtab_cflags="$symtab_cflags $arg" ;; - esac - done - - # Now compile the dynamic symbol file. - func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' - - # Clean up the generated files. - func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"' - - # Transform the symbol file into the correct name. - symfileobj="$output_objdir/${my_outputname}S.$objext" - case $host in - *cygwin* | *mingw* | *cegcc* ) - if test -f "$output_objdir/$my_outputname.def"; then - compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` - finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` - else - compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` - finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` - fi - ;; - *) - compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` - finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` - ;; - esac - ;; - *) - func_fatal_error "unknown suffix for \`$my_dlsyms'" - ;; - esac - else - # We keep going just in case the user didn't refer to - # lt_preloaded_symbols. The linker will fail if global_symbol_pipe - # really was required. - - # Nullify the symbol file. - compile_command=`$ECHO "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"` - finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"` - fi -} - -# func_win32_libid arg -# return the library type of file 'arg' -# -# Need a lot of goo to handle *both* DLLs and import libs -# Has to be a shell function in order to 'eat' the argument -# that is supplied when $file_magic_command is called. -func_win32_libid () -{ - $opt_debug - win32_libid_type="unknown" - win32_fileres=`file -L $1 2>/dev/null` - case $win32_fileres in - *ar\ archive\ import\ library*) # definitely import - win32_libid_type="x86 archive import" - ;; - *ar\ archive*) # could be an import, or static - if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | - $EGREP 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then - win32_nmres=`eval $NM -f posix -A $1 | - $SED -n -e ' - 1,100{ - / I /{ - s,.*,import, - p - q - } - }'` - case $win32_nmres in - import*) win32_libid_type="x86 archive import";; - *) win32_libid_type="x86 archive static";; - esac - fi - ;; - *DLL*) - win32_libid_type="x86 DLL" - ;; - *executable*) # but shell scripts are "executable" too... - case $win32_fileres in - *MS\ Windows\ PE\ Intel*) - win32_libid_type="x86 DLL" - ;; - esac - ;; - esac - $ECHO "$win32_libid_type" -} - - - -# func_extract_an_archive dir oldlib -func_extract_an_archive () -{ - $opt_debug - f_ex_an_ar_dir="$1"; shift - f_ex_an_ar_oldlib="$1" - func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" 'exit $?' - if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then - : - else - func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" - fi -} - - -# func_extract_archives gentop oldlib ... -func_extract_archives () -{ - $opt_debug - my_gentop="$1"; shift - my_oldlibs=${1+"$@"} - my_oldobjs="" - my_xlib="" - my_xabs="" - my_xdir="" - - for my_xlib in $my_oldlibs; do - # Extract the objects. - case $my_xlib in - [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; - *) my_xabs=`pwd`"/$my_xlib" ;; - esac - func_basename "$my_xlib" - my_xlib="$func_basename_result" - my_xlib_u=$my_xlib - while :; do - case " $extracted_archives " in - *" $my_xlib_u "*) - func_arith $extracted_serial + 1 - extracted_serial=$func_arith_result - my_xlib_u=lt$extracted_serial-$my_xlib ;; - *) break ;; - esac - done - extracted_archives="$extracted_archives $my_xlib_u" - my_xdir="$my_gentop/$my_xlib_u" - - func_mkdir_p "$my_xdir" - - case $host in - *-darwin*) - func_verbose "Extracting $my_xabs" - # Do not bother doing anything if just a dry run - $opt_dry_run || { - darwin_orig_dir=`pwd` - cd $my_xdir || exit $? - darwin_archive=$my_xabs - darwin_curdir=`pwd` - darwin_base_archive=`basename "$darwin_archive"` - darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` - if test -n "$darwin_arches"; then - darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` - darwin_arch= - func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" - for darwin_arch in $darwin_arches ; do - func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}" - $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" - cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" - func_extract_an_archive "`pwd`" "${darwin_base_archive}" - cd "$darwin_curdir" - $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" - done # $darwin_arches - ## Okay now we've a bunch of thin objects, gotta fatten them up :) - darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u` - darwin_file= - darwin_files= - for darwin_file in $darwin_filelist; do - darwin_files=`find unfat-$$ -name $darwin_file -print | $NL2SP` - $LIPO -create -output "$darwin_file" $darwin_files - done # $darwin_filelist - $RM -rf unfat-$$ - cd "$darwin_orig_dir" - else - cd $darwin_orig_dir - func_extract_an_archive "$my_xdir" "$my_xabs" - fi # $darwin_arches - } # !$opt_dry_run - ;; - *) - func_extract_an_archive "$my_xdir" "$my_xabs" - ;; - esac - my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP` - done - - func_extract_archives_result="$my_oldobjs" -} - - - -# func_emit_wrapper_part1 [arg=no] -# -# Emit the first part of a libtool wrapper script on stdout. -# For more information, see the description associated with -# func_emit_wrapper(), below. -func_emit_wrapper_part1 () -{ - func_emit_wrapper_part1_arg1=no - if test -n "$1" ; then - func_emit_wrapper_part1_arg1=$1 - fi - - $ECHO "\ -#! $SHELL - -# $output - temporary wrapper script for $objdir/$outputname -# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION -# -# The $output program cannot be directly executed until all the libtool -# libraries that it depends on are installed. -# -# This wrapper script should never be moved out of the build directory. -# If it is, it will not operate correctly. - -# Sed substitution that helps us do robust quoting. It backslashifies -# metacharacters that are still active within double-quoted strings. -Xsed='${SED} -e 1s/^X//' -sed_quote_subst='$sed_quote_subst' - -# Be Bourne compatible -if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then - emulate sh - NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which - # is contrary to our usage. Disable this feature. - alias -g '\${1+\"\$@\"}'='\"\$@\"' - setopt NO_GLOB_SUBST -else - case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac -fi -BIN_SH=xpg4; export BIN_SH # for Tru64 -DUALCASE=1; export DUALCASE # for MKS sh - -# The HP-UX ksh and POSIX shell print the target directory to stdout -# if CDPATH is set. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -relink_command=\"$relink_command\" - -# This environment variable determines our operation mode. -if test \"\$libtool_install_magic\" = \"$magic\"; then - # install mode needs the following variables: - generated_by_libtool_version='$macro_version' - notinst_deplibs='$notinst_deplibs' -else - # When we are sourced in execute mode, \$file and \$ECHO are already set. - if test \"\$libtool_execute_magic\" != \"$magic\"; then - ECHO=\"$qecho\" - file=\"\$0\" - # Make sure echo works. - if test \"X\$1\" = X--no-reexec; then - # Discard the --no-reexec flag, and continue. - shift - elif test \"X\`{ \$ECHO '\t'; } 2>/dev/null\`\" = 'X\t'; then - # Yippee, \$ECHO works! - : - else - # Restart under the correct shell, and then maybe \$ECHO will work. - exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"} - fi - fi\ -" - $ECHO "\ - - # Find the directory that this script lives in. - thisdir=\`\$ECHO \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\` - test \"x\$thisdir\" = \"x\$file\" && thisdir=. - - # Follow symbolic links until we get to the real thisdir. - file=\`ls -ld \"\$file\" | ${SED} -n 's/.*-> //p'\` - while test -n \"\$file\"; do - destdir=\`\$ECHO \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\` - - # If there was a directory component, then change thisdir. - if test \"x\$destdir\" != \"x\$file\"; then - case \"\$destdir\" in - [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; - *) thisdir=\"\$thisdir/\$destdir\" ;; - esac - fi - - file=\`\$ECHO \"X\$file\" | \$Xsed -e 's%^.*/%%'\` - file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\` - done -" -} -# end: func_emit_wrapper_part1 - -# func_emit_wrapper_part2 [arg=no] -# -# Emit the second part of a libtool wrapper script on stdout. -# For more information, see the description associated with -# func_emit_wrapper(), below. -func_emit_wrapper_part2 () -{ - func_emit_wrapper_part2_arg1=no - if test -n "$1" ; then - func_emit_wrapper_part2_arg1=$1 - fi - - $ECHO "\ - - # Usually 'no', except on cygwin/mingw when embedded into - # the cwrapper. - WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_part2_arg1 - if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then - # special case for '.' - if test \"\$thisdir\" = \".\"; then - thisdir=\`pwd\` - fi - # remove .libs from thisdir - case \"\$thisdir\" in - *[\\\\/]$objdir ) thisdir=\`\$ECHO \"X\$thisdir\" | \$Xsed -e 's%[\\\\/][^\\\\/]*$%%'\` ;; - $objdir ) thisdir=. ;; - esac - fi - - # Try to get the absolute directory name. - absdir=\`cd \"\$thisdir\" && pwd\` - test -n \"\$absdir\" && thisdir=\"\$absdir\" -" - - if test "$fast_install" = yes; then - $ECHO "\ - program=lt-'$outputname'$exeext - progdir=\"\$thisdir/$objdir\" - - if test ! -f \"\$progdir/\$program\" || - { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ - test \"X\$file\" != \"X\$progdir/\$program\"; }; then - - file=\"\$\$-\$program\" - - if test ! -d \"\$progdir\"; then - $MKDIR \"\$progdir\" - else - $RM \"\$progdir/\$file\" - fi" - - $ECHO "\ - - # relink executable if necessary - if test -n \"\$relink_command\"; then - if relink_command_output=\`eval \$relink_command 2>&1\`; then : - else - $ECHO \"\$relink_command_output\" >&2 - $RM \"\$progdir/\$file\" - exit 1 - fi - fi - - $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || - { $RM \"\$progdir/\$program\"; - $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } - $RM \"\$progdir/\$file\" - fi" - else - $ECHO "\ - program='$outputname' - progdir=\"\$thisdir/$objdir\" -" - fi - - $ECHO "\ - - if test -f \"\$progdir/\$program\"; then" - - # Export our shlibpath_var if we have one. - if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then - $ECHO "\ - # Add our own library path to $shlibpath_var - $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" - - # Some systems cannot cope with colon-terminated $shlibpath_var - # The second colon is a workaround for a bug in BeOS R4 sed - $shlibpath_var=\`\$ECHO \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\` - - export $shlibpath_var -" - fi - - # fixup the dll searchpath if we need to. - if test -n "$dllsearchpath"; then - $ECHO "\ - # Add the dll search path components to the executable PATH - PATH=$dllsearchpath:\$PATH -" - fi - - $ECHO "\ - if test \"\$libtool_execute_magic\" != \"$magic\"; then - # Run the actual program with our arguments. -" - case $host in - # Backslashes separate directories on plain windows - *-*-mingw | *-*-os2* | *-cegcc*) - $ECHO "\ - exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} -" - ;; - - *) - $ECHO "\ - exec \"\$progdir/\$program\" \${1+\"\$@\"} -" - ;; - esac - $ECHO "\ - \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 - exit 1 - fi - else - # The program doesn't exist. - \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 - \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 - $ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 - exit 1 - fi -fi\ -" -} -# end: func_emit_wrapper_part2 - - -# func_emit_wrapper [arg=no] -# -# Emit a libtool wrapper script on stdout. -# Don't directly open a file because we may want to -# incorporate the script contents within a cygwin/mingw -# wrapper executable. Must ONLY be called from within -# func_mode_link because it depends on a number of variables -# set therein. -# -# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR -# variable will take. If 'yes', then the emitted script -# will assume that the directory in which it is stored is -# the $objdir directory. This is a cygwin/mingw-specific -# behavior. -func_emit_wrapper () -{ - func_emit_wrapper_arg1=no - if test -n "$1" ; then - func_emit_wrapper_arg1=$1 - fi - - # split this up so that func_emit_cwrapperexe_src - # can call each part independently. - func_emit_wrapper_part1 "${func_emit_wrapper_arg1}" - func_emit_wrapper_part2 "${func_emit_wrapper_arg1}" -} - - -# func_to_host_path arg -# -# Convert paths to host format when used with build tools. -# Intended for use with "native" mingw (where libtool itself -# is running under the msys shell), or in the following cross- -# build environments: -# $build $host -# mingw (msys) mingw [e.g. native] -# cygwin mingw -# *nix + wine mingw -# where wine is equipped with the `winepath' executable. -# In the native mingw case, the (msys) shell automatically -# converts paths for any non-msys applications it launches, -# but that facility isn't available from inside the cwrapper. -# Similar accommodations are necessary for $host mingw and -# $build cygwin. Calling this function does no harm for other -# $host/$build combinations not listed above. -# -# ARG is the path (on $build) that should be converted to -# the proper representation for $host. The result is stored -# in $func_to_host_path_result. -func_to_host_path () -{ - func_to_host_path_result="$1" - if test -n "$1" ; then - case $host in - *mingw* ) - lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' - case $build in - *mingw* ) # actually, msys - # awkward: cmd appends spaces to result - lt_sed_strip_trailing_spaces="s/[ ]*\$//" - func_to_host_path_tmp1=`( cmd //c echo "$1" |\ - $SED -e "$lt_sed_strip_trailing_spaces" ) 2>/dev/null || echo ""` - func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\ - $SED -e "$lt_sed_naive_backslashify"` - ;; - *cygwin* ) - func_to_host_path_tmp1=`cygpath -w "$1"` - func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\ - $SED -e "$lt_sed_naive_backslashify"` - ;; - * ) - # Unfortunately, winepath does not exit with a non-zero - # error code, so we are forced to check the contents of - # stdout. On the other hand, if the command is not - # found, the shell will set an exit code of 127 and print - # *an error message* to stdout. So we must check for both - # error code of zero AND non-empty stdout, which explains - # the odd construction: - func_to_host_path_tmp1=`winepath -w "$1" 2>/dev/null` - if test "$?" -eq 0 && test -n "${func_to_host_path_tmp1}"; then - func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\ - $SED -e "$lt_sed_naive_backslashify"` - else - # Allow warning below. - func_to_host_path_result="" - fi - ;; - esac - if test -z "$func_to_host_path_result" ; then - func_error "Could not determine host path corresponding to" - func_error " '$1'" - func_error "Continuing, but uninstalled executables may not work." - # Fallback: - func_to_host_path_result="$1" - fi - ;; - esac - fi -} -# end: func_to_host_path - -# func_to_host_pathlist arg -# -# Convert pathlists to host format when used with build tools. -# See func_to_host_path(), above. This function supports the -# following $build/$host combinations (but does no harm for -# combinations not listed here): -# $build $host -# mingw (msys) mingw [e.g. native] -# cygwin mingw -# *nix + wine mingw -# -# Path separators are also converted from $build format to -# $host format. If ARG begins or ends with a path separator -# character, it is preserved (but converted to $host format) -# on output. -# -# ARG is a pathlist (on $build) that should be converted to -# the proper representation on $host. The result is stored -# in $func_to_host_pathlist_result. -func_to_host_pathlist () -{ - func_to_host_pathlist_result="$1" - if test -n "$1" ; then - case $host in - *mingw* ) - lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' - # Remove leading and trailing path separator characters from - # ARG. msys behavior is inconsistent here, cygpath turns them - # into '.;' and ';.', and winepath ignores them completely. - func_to_host_pathlist_tmp2="$1" - # Once set for this call, this variable should not be - # reassigned. It is used in tha fallback case. - func_to_host_pathlist_tmp1=`echo "$func_to_host_pathlist_tmp2" |\ - $SED -e 's|^:*||' -e 's|:*$||'` - case $build in - *mingw* ) # Actually, msys. - # Awkward: cmd appends spaces to result. - lt_sed_strip_trailing_spaces="s/[ ]*\$//" - func_to_host_pathlist_tmp2=`( cmd //c echo "$func_to_host_pathlist_tmp1" |\ - $SED -e "$lt_sed_strip_trailing_spaces" ) 2>/dev/null || echo ""` - func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp2" |\ - $SED -e "$lt_sed_naive_backslashify"` - ;; - *cygwin* ) - func_to_host_pathlist_tmp2=`cygpath -w -p "$func_to_host_pathlist_tmp1"` - func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp2" |\ - $SED -e "$lt_sed_naive_backslashify"` - ;; - * ) - # unfortunately, winepath doesn't convert pathlists - func_to_host_pathlist_result="" - func_to_host_pathlist_oldIFS=$IFS - IFS=: - for func_to_host_pathlist_f in $func_to_host_pathlist_tmp1 ; do - IFS=$func_to_host_pathlist_oldIFS - if test -n "$func_to_host_pathlist_f" ; then - func_to_host_path "$func_to_host_pathlist_f" - if test -n "$func_to_host_path_result" ; then - if test -z "$func_to_host_pathlist_result" ; then - func_to_host_pathlist_result="$func_to_host_path_result" - else - func_to_host_pathlist_result="$func_to_host_pathlist_result;$func_to_host_path_result" - fi - fi - fi - IFS=: - done - IFS=$func_to_host_pathlist_oldIFS - ;; - esac - if test -z "$func_to_host_pathlist_result" ; then - func_error "Could not determine the host path(s) corresponding to" - func_error " '$1'" - func_error "Continuing, but uninstalled executables may not work." - # Fallback. This may break if $1 contains DOS-style drive - # specifications. The fix is not to complicate the expression - # below, but for the user to provide a working wine installation - # with winepath so that path translation in the cross-to-mingw - # case works properly. - lt_replace_pathsep_nix_to_dos="s|:|;|g" - func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp1" |\ - $SED -e "$lt_replace_pathsep_nix_to_dos"` - fi - # Now, add the leading and trailing path separators back - case "$1" in - :* ) func_to_host_pathlist_result=";$func_to_host_pathlist_result" - ;; - esac - case "$1" in - *: ) func_to_host_pathlist_result="$func_to_host_pathlist_result;" - ;; - esac - ;; - esac - fi -} -# end: func_to_host_pathlist - -# func_emit_cwrapperexe_src -# emit the source code for a wrapper executable on stdout -# Must ONLY be called from within func_mode_link because -# it depends on a number of variable set therein. -func_emit_cwrapperexe_src () -{ - cat < -#include -#ifdef _MSC_VER -# include -# include -# include -# define setmode _setmode -#else -# include -# include -# ifdef __CYGWIN__ -# include -# define HAVE_SETENV -# ifdef __STRICT_ANSI__ -char *realpath (const char *, char *); -int putenv (char *); -int setenv (const char *, const char *, int); -# endif -# endif -#endif -#include -#include -#include -#include -#include -#include -#include -#include - -#if defined(PATH_MAX) -# define LT_PATHMAX PATH_MAX -#elif defined(MAXPATHLEN) -# define LT_PATHMAX MAXPATHLEN -#else -# define LT_PATHMAX 1024 -#endif - -#ifndef S_IXOTH -# define S_IXOTH 0 -#endif -#ifndef S_IXGRP -# define S_IXGRP 0 -#endif - -#ifdef _MSC_VER -# define S_IXUSR _S_IEXEC -# define stat _stat -# ifndef _INTPTR_T_DEFINED -# define intptr_t int -# endif -#endif - -#ifndef DIR_SEPARATOR -# define DIR_SEPARATOR '/' -# define PATH_SEPARATOR ':' -#endif - -#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ - defined (__OS2__) -# define HAVE_DOS_BASED_FILE_SYSTEM -# define FOPEN_WB "wb" -# ifndef DIR_SEPARATOR_2 -# define DIR_SEPARATOR_2 '\\' -# endif -# ifndef PATH_SEPARATOR_2 -# define PATH_SEPARATOR_2 ';' -# endif -#endif - -#ifndef DIR_SEPARATOR_2 -# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) -#else /* DIR_SEPARATOR_2 */ -# define IS_DIR_SEPARATOR(ch) \ - (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) -#endif /* DIR_SEPARATOR_2 */ - -#ifndef PATH_SEPARATOR_2 -# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) -#else /* PATH_SEPARATOR_2 */ -# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) -#endif /* PATH_SEPARATOR_2 */ - -#ifdef __CYGWIN__ -# define FOPEN_WB "wb" -#endif - -#ifndef FOPEN_WB -# define FOPEN_WB "w" -#endif -#ifndef _O_BINARY -# define _O_BINARY 0 -#endif - -#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) -#define XFREE(stale) do { \ - if (stale) { free ((void *) stale); stale = 0; } \ -} while (0) - -#undef LTWRAPPER_DEBUGPRINTF -#if defined DEBUGWRAPPER -# define LTWRAPPER_DEBUGPRINTF(args) ltwrapper_debugprintf args -static void -ltwrapper_debugprintf (const char *fmt, ...) -{ - va_list args; - va_start (args, fmt); - (void) vfprintf (stderr, fmt, args); - va_end (args); -} -#else -# define LTWRAPPER_DEBUGPRINTF(args) -#endif - -const char *program_name = NULL; - -void *xmalloc (size_t num); -char *xstrdup (const char *string); -const char *base_name (const char *name); -char *find_executable (const char *wrapper); -char *chase_symlinks (const char *pathspec); -int make_executable (const char *path); -int check_executable (const char *path); -char *strendzap (char *str, const char *pat); -void lt_fatal (const char *message, ...); -void lt_setenv (const char *name, const char *value); -char *lt_extend_str (const char *orig_value, const char *add, int to_end); -void lt_opt_process_env_set (const char *arg); -void lt_opt_process_env_prepend (const char *arg); -void lt_opt_process_env_append (const char *arg); -int lt_split_name_value (const char *arg, char** name, char** value); -void lt_update_exe_path (const char *name, const char *value); -void lt_update_lib_path (const char *name, const char *value); - -static const char *script_text_part1 = -EOF - - func_emit_wrapper_part1 yes | - $SED -e 's/\([\\"]\)/\\\1/g' \ - -e 's/^/ "/' -e 's/$/\\n"/' - echo ";" - cat <"))); - for (i = 0; i < newargc; i++) - { - LTWRAPPER_DEBUGPRINTF (("(main) newargz[%d] : %s\n", i, (newargz[i] ? newargz[i] : ""))); - } - -EOF - - case $host_os in - mingw*) - cat <<"EOF" - /* execv doesn't actually work on mingw as expected on unix */ - rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz); - if (rval == -1) - { - /* failed to start process */ - LTWRAPPER_DEBUGPRINTF (("(main) failed to launch target \"%s\": errno = %d\n", lt_argv_zero, errno)); - return 127; - } - return rval; -EOF - ;; - *) - cat <<"EOF" - execv (lt_argv_zero, newargz); - return rval; /* =127, but avoids unused variable warning */ -EOF - ;; - esac - - cat <<"EOF" -} - -void * -xmalloc (size_t num) -{ - void *p = (void *) malloc (num); - if (!p) - lt_fatal ("Memory exhausted"); - - return p; -} - -char * -xstrdup (const char *string) -{ - return string ? strcpy ((char *) xmalloc (strlen (string) + 1), - string) : NULL; -} - -const char * -base_name (const char *name) -{ - const char *base; - -#if defined (HAVE_DOS_BASED_FILE_SYSTEM) - /* Skip over the disk name in MSDOS pathnames. */ - if (isalpha ((unsigned char) name[0]) && name[1] == ':') - name += 2; -#endif - - for (base = name; *name; name++) - if (IS_DIR_SEPARATOR (*name)) - base = name + 1; - return base; -} - -int -check_executable (const char *path) -{ - struct stat st; - - LTWRAPPER_DEBUGPRINTF (("(check_executable) : %s\n", - path ? (*path ? path : "EMPTY!") : "NULL!")); - if ((!path) || (!*path)) - return 0; - - if ((stat (path, &st) >= 0) - && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) - return 1; - else - return 0; -} - -int -make_executable (const char *path) -{ - int rval = 0; - struct stat st; - - LTWRAPPER_DEBUGPRINTF (("(make_executable) : %s\n", - path ? (*path ? path : "EMPTY!") : "NULL!")); - if ((!path) || (!*path)) - return 0; - - if (stat (path, &st) >= 0) - { - rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); - } - return rval; -} - -/* Searches for the full path of the wrapper. Returns - newly allocated full path name if found, NULL otherwise - Does not chase symlinks, even on platforms that support them. -*/ -char * -find_executable (const char *wrapper) -{ - int has_slash = 0; - const char *p; - const char *p_next; - /* static buffer for getcwd */ - char tmp[LT_PATHMAX + 1]; - int tmp_len; - char *concat_name; - - LTWRAPPER_DEBUGPRINTF (("(find_executable) : %s\n", - wrapper ? (*wrapper ? wrapper : "EMPTY!") : "NULL!")); - - if ((wrapper == NULL) || (*wrapper == '\0')) - return NULL; - - /* Absolute path? */ -#if defined (HAVE_DOS_BASED_FILE_SYSTEM) - if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') - { - concat_name = xstrdup (wrapper); - if (check_executable (concat_name)) - return concat_name; - XFREE (concat_name); - } - else - { -#endif - if (IS_DIR_SEPARATOR (wrapper[0])) - { - concat_name = xstrdup (wrapper); - if (check_executable (concat_name)) - return concat_name; - XFREE (concat_name); - } -#if defined (HAVE_DOS_BASED_FILE_SYSTEM) - } -#endif - - for (p = wrapper; *p; p++) - if (*p == '/') - { - has_slash = 1; - break; - } - if (!has_slash) - { - /* no slashes; search PATH */ - const char *path = getenv ("PATH"); - if (path != NULL) - { - for (p = path; *p; p = p_next) - { - const char *q; - size_t p_len; - for (q = p; *q; q++) - if (IS_PATH_SEPARATOR (*q)) - break; - p_len = q - p; - p_next = (*q == '\0' ? q : q + 1); - if (p_len == 0) - { - /* empty path: current directory */ - if (getcwd (tmp, LT_PATHMAX) == NULL) - lt_fatal ("getcwd failed"); - tmp_len = strlen (tmp); - concat_name = - XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); - memcpy (concat_name, tmp, tmp_len); - concat_name[tmp_len] = '/'; - strcpy (concat_name + tmp_len + 1, wrapper); - } - else - { - concat_name = - XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); - memcpy (concat_name, p, p_len); - concat_name[p_len] = '/'; - strcpy (concat_name + p_len + 1, wrapper); - } - if (check_executable (concat_name)) - return concat_name; - XFREE (concat_name); - } - } - /* not found in PATH; assume curdir */ - } - /* Relative path | not found in path: prepend cwd */ - if (getcwd (tmp, LT_PATHMAX) == NULL) - lt_fatal ("getcwd failed"); - tmp_len = strlen (tmp); - concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); - memcpy (concat_name, tmp, tmp_len); - concat_name[tmp_len] = '/'; - strcpy (concat_name + tmp_len + 1, wrapper); - - if (check_executable (concat_name)) - return concat_name; - XFREE (concat_name); - return NULL; -} - -char * -chase_symlinks (const char *pathspec) -{ -#ifndef S_ISLNK - return xstrdup (pathspec); -#else - char buf[LT_PATHMAX]; - struct stat s; - char *tmp_pathspec = xstrdup (pathspec); - char *p; - int has_symlinks = 0; - while (strlen (tmp_pathspec) && !has_symlinks) - { - LTWRAPPER_DEBUGPRINTF (("checking path component for symlinks: %s\n", - tmp_pathspec)); - if (lstat (tmp_pathspec, &s) == 0) - { - if (S_ISLNK (s.st_mode) != 0) - { - has_symlinks = 1; - break; - } - - /* search backwards for last DIR_SEPARATOR */ - p = tmp_pathspec + strlen (tmp_pathspec) - 1; - while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) - p--; - if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) - { - /* no more DIR_SEPARATORS left */ - break; - } - *p = '\0'; - } - else - { - char *errstr = strerror (errno); - lt_fatal ("Error accessing file %s (%s)", tmp_pathspec, errstr); - } - } - XFREE (tmp_pathspec); - - if (!has_symlinks) - { - return xstrdup (pathspec); - } - - tmp_pathspec = realpath (pathspec, buf); - if (tmp_pathspec == 0) - { - lt_fatal ("Could not follow symlinks for %s", pathspec); - } - return xstrdup (tmp_pathspec); -#endif -} - -char * -strendzap (char *str, const char *pat) -{ - size_t len, patlen; - - assert (str != NULL); - assert (pat != NULL); - - len = strlen (str); - patlen = strlen (pat); - - if (patlen <= len) - { - str += len - patlen; - if (strcmp (str, pat) == 0) - *str = '\0'; - } - return str; -} - -static void -lt_error_core (int exit_status, const char *mode, - const char *message, va_list ap) -{ - fprintf (stderr, "%s: %s: ", program_name, mode); - vfprintf (stderr, message, ap); - fprintf (stderr, ".\n"); - - if (exit_status >= 0) - exit (exit_status); -} - -void -lt_fatal (const char *message, ...) -{ - va_list ap; - va_start (ap, message); - lt_error_core (EXIT_FAILURE, "FATAL", message, ap); - va_end (ap); -} - -void -lt_setenv (const char *name, const char *value) -{ - LTWRAPPER_DEBUGPRINTF (("(lt_setenv) setting '%s' to '%s'\n", - (name ? name : ""), - (value ? value : ""))); - { -#ifdef HAVE_SETENV - /* always make a copy, for consistency with !HAVE_SETENV */ - char *str = xstrdup (value); - setenv (name, str, 1); -#else - int len = strlen (name) + 1 + strlen (value) + 1; - char *str = XMALLOC (char, len); - sprintf (str, "%s=%s", name, value); - if (putenv (str) != EXIT_SUCCESS) - { - XFREE (str); - } -#endif - } -} - -char * -lt_extend_str (const char *orig_value, const char *add, int to_end) -{ - char *new_value; - if (orig_value && *orig_value) - { - int orig_value_len = strlen (orig_value); - int add_len = strlen (add); - new_value = XMALLOC (char, add_len + orig_value_len + 1); - if (to_end) - { - strcpy (new_value, orig_value); - strcpy (new_value + orig_value_len, add); - } - else - { - strcpy (new_value, add); - strcpy (new_value + add_len, orig_value); - } - } - else - { - new_value = xstrdup (add); - } - return new_value; -} - -int -lt_split_name_value (const char *arg, char** name, char** value) -{ - const char *p; - int len; - if (!arg || !*arg) - return 1; - - p = strchr (arg, (int)'='); - - if (!p) - return 1; - - *value = xstrdup (++p); - - len = strlen (arg) - strlen (*value); - *name = XMALLOC (char, len); - strncpy (*name, arg, len-1); - (*name)[len - 1] = '\0'; - - return 0; -} - -void -lt_opt_process_env_set (const char *arg) -{ - char *name = NULL; - char *value = NULL; - - if (lt_split_name_value (arg, &name, &value) != 0) - { - XFREE (name); - XFREE (value); - lt_fatal ("bad argument for %s: '%s'", env_set_opt, arg); - } - - lt_setenv (name, value); - XFREE (name); - XFREE (value); -} - -void -lt_opt_process_env_prepend (const char *arg) -{ - char *name = NULL; - char *value = NULL; - char *new_value = NULL; - - if (lt_split_name_value (arg, &name, &value) != 0) - { - XFREE (name); - XFREE (value); - lt_fatal ("bad argument for %s: '%s'", env_prepend_opt, arg); - } - - new_value = lt_extend_str (getenv (name), value, 0); - lt_setenv (name, new_value); - XFREE (new_value); - XFREE (name); - XFREE (value); -} - -void -lt_opt_process_env_append (const char *arg) -{ - char *name = NULL; - char *value = NULL; - char *new_value = NULL; - - if (lt_split_name_value (arg, &name, &value) != 0) - { - XFREE (name); - XFREE (value); - lt_fatal ("bad argument for %s: '%s'", env_append_opt, arg); - } - - new_value = lt_extend_str (getenv (name), value, 1); - lt_setenv (name, new_value); - XFREE (new_value); - XFREE (name); - XFREE (value); -} - -void -lt_update_exe_path (const char *name, const char *value) -{ - LTWRAPPER_DEBUGPRINTF (("(lt_update_exe_path) modifying '%s' by prepending '%s'\n", - (name ? name : ""), - (value ? value : ""))); - - if (name && *name && value && *value) - { - char *new_value = lt_extend_str (getenv (name), value, 0); - /* some systems can't cope with a ':'-terminated path #' */ - int len = strlen (new_value); - while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1])) - { - new_value[len-1] = '\0'; - } - lt_setenv (name, new_value); - XFREE (new_value); - } -} - -void -lt_update_lib_path (const char *name, const char *value) -{ - LTWRAPPER_DEBUGPRINTF (("(lt_update_lib_path) modifying '%s' by prepending '%s'\n", - (name ? name : ""), - (value ? value : ""))); - - if (name && *name && value && *value) - { - char *new_value = lt_extend_str (getenv (name), value, 0); - lt_setenv (name, new_value); - XFREE (new_value); - } -} - - -EOF -} -# end: func_emit_cwrapperexe_src - -# func_mode_link arg... -func_mode_link () -{ - $opt_debug - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) - # It is impossible to link a dll without this setting, and - # we shouldn't force the makefile maintainer to figure out - # which system we are compiling for in order to pass an extra - # flag for every libtool invocation. - # allow_undefined=no - - # FIXME: Unfortunately, there are problems with the above when trying - # to make a dll which has undefined symbols, in which case not - # even a static library is built. For now, we need to specify - # -no-undefined on the libtool link line when we can be certain - # that all symbols are satisfied, otherwise we get a static library. - allow_undefined=yes - ;; - *) - allow_undefined=yes - ;; - esac - libtool_args=$nonopt - base_compile="$nonopt $@" - compile_command=$nonopt - finalize_command=$nonopt - - compile_rpath= - finalize_rpath= - compile_shlibpath= - finalize_shlibpath= - convenience= - old_convenience= - deplibs= - old_deplibs= - compiler_flags= - linker_flags= - dllsearchpath= - lib_search_path=`pwd` - inst_prefix_dir= - new_inherited_linker_flags= - - avoid_version=no - dlfiles= - dlprefiles= - dlself=no - export_dynamic=no - export_symbols= - export_symbols_regex= - generated= - libobjs= - ltlibs= - module=no - no_install=no - objs= - non_pic_objects= - precious_files_regex= - prefer_static_libs=no - preload=no - prev= - prevarg= - release= - rpath= - xrpath= - perm_rpath= - temp_rpath= - thread_safe=no - vinfo= - vinfo_number=no - weak_libs= - single_module="${wl}-single_module" - func_infer_tag $base_compile - - # We need to know -static, to get the right output filenames. - for arg - do - case $arg in - -shared) - test "$build_libtool_libs" != yes && \ - func_fatal_configuration "can not build a shared library" - build_old_libs=no - break - ;; - -all-static | -static | -static-libtool-libs) - case $arg in - -all-static) - if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then - func_warning "complete static linking is impossible in this configuration" - fi - if test -n "$link_static_flag"; then - dlopen_self=$dlopen_self_static - fi - prefer_static_libs=yes - ;; - -static) - if test -z "$pic_flag" && test -n "$link_static_flag"; then - dlopen_self=$dlopen_self_static - fi - prefer_static_libs=built - ;; - -static-libtool-libs) - if test -z "$pic_flag" && test -n "$link_static_flag"; then - dlopen_self=$dlopen_self_static - fi - prefer_static_libs=yes - ;; - esac - build_libtool_libs=no - build_old_libs=yes - break - ;; - esac - done - - # See if our shared archives depend on static archives. - test -n "$old_archive_from_new_cmds" && build_old_libs=yes - - # Go through the arguments, transforming them on the way. - while test "$#" -gt 0; do - arg="$1" - shift - func_quote_for_eval "$arg" - qarg=$func_quote_for_eval_unquoted_result - func_append libtool_args " $func_quote_for_eval_result" - - # If the previous option needs an argument, assign it. - if test -n "$prev"; then - case $prev in - output) - func_append compile_command " @OUTPUT@" - func_append finalize_command " @OUTPUT@" - ;; - esac - - case $prev in - dlfiles|dlprefiles) - if test "$preload" = no; then - # Add the symbol object into the linking commands. - func_append compile_command " @SYMFILE@" - func_append finalize_command " @SYMFILE@" - preload=yes - fi - case $arg in - *.la | *.lo) ;; # We handle these cases below. - force) - if test "$dlself" = no; then - dlself=needless - export_dynamic=yes - fi - prev= - continue - ;; - self) - if test "$prev" = dlprefiles; then - dlself=yes - elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then - dlself=yes - else - dlself=needless - export_dynamic=yes - fi - prev= - continue - ;; - *) - if test "$prev" = dlfiles; then - dlfiles="$dlfiles $arg" - else - dlprefiles="$dlprefiles $arg" - fi - prev= - continue - ;; - esac - ;; - expsyms) - export_symbols="$arg" - test -f "$arg" \ - || func_fatal_error "symbol file \`$arg' does not exist" - prev= - continue - ;; - expsyms_regex) - export_symbols_regex="$arg" - prev= - continue - ;; - framework) - case $host in - *-*-darwin*) - case "$deplibs " in - *" $qarg.ltframework "*) ;; - *) deplibs="$deplibs $qarg.ltframework" # this is fixed later - ;; - esac - ;; - esac - prev= - continue - ;; - inst_prefix) - inst_prefix_dir="$arg" - prev= - continue - ;; - objectlist) - if test -f "$arg"; then - save_arg=$arg - moreargs= - for fil in `cat "$save_arg"` - do -# moreargs="$moreargs $fil" - arg=$fil - # A libtool-controlled object. - - # Check to see that this really is a libtool object. - if func_lalib_unsafe_p "$arg"; then - pic_object= - non_pic_object= - - # Read the .lo file - func_source "$arg" - - if test -z "$pic_object" || - test -z "$non_pic_object" || - test "$pic_object" = none && - test "$non_pic_object" = none; then - func_fatal_error "cannot find name of object for \`$arg'" - fi - - # Extract subdirectory from the argument. - func_dirname "$arg" "/" "" - xdir="$func_dirname_result" - - if test "$pic_object" != none; then - # Prepend the subdirectory the object is found in. - pic_object="$xdir$pic_object" - - if test "$prev" = dlfiles; then - if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then - dlfiles="$dlfiles $pic_object" - prev= - continue - else - # If libtool objects are unsupported, then we need to preload. - prev=dlprefiles - fi - fi - - # CHECK ME: I think I busted this. -Ossama - if test "$prev" = dlprefiles; then - # Preload the old-style object. - dlprefiles="$dlprefiles $pic_object" - prev= - fi - - # A PIC object. - func_append libobjs " $pic_object" - arg="$pic_object" - fi - - # Non-PIC object. - if test "$non_pic_object" != none; then - # Prepend the subdirectory the object is found in. - non_pic_object="$xdir$non_pic_object" - - # A standard non-PIC object - func_append non_pic_objects " $non_pic_object" - if test -z "$pic_object" || test "$pic_object" = none ; then - arg="$non_pic_object" - fi - else - # If the PIC object exists, use it instead. - # $xdir was prepended to $pic_object above. - non_pic_object="$pic_object" - func_append non_pic_objects " $non_pic_object" - fi - else - # Only an error if not doing a dry-run. - if $opt_dry_run; then - # Extract subdirectory from the argument. - func_dirname "$arg" "/" "" - xdir="$func_dirname_result" - - func_lo2o "$arg" - pic_object=$xdir$objdir/$func_lo2o_result - non_pic_object=$xdir$func_lo2o_result - func_append libobjs " $pic_object" - func_append non_pic_objects " $non_pic_object" - else - func_fatal_error "\`$arg' is not a valid libtool object" - fi - fi - done - else - func_fatal_error "link input file \`$arg' does not exist" - fi - arg=$save_arg - prev= - continue - ;; - precious_regex) - precious_files_regex="$arg" - prev= - continue - ;; - release) - release="-$arg" - prev= - continue - ;; - rpath | xrpath) - # We need an absolute path. - case $arg in - [\\/]* | [A-Za-z]:[\\/]*) ;; - *) - func_fatal_error "only absolute run-paths are allowed" - ;; - esac - if test "$prev" = rpath; then - case "$rpath " in - *" $arg "*) ;; - *) rpath="$rpath $arg" ;; - esac - else - case "$xrpath " in - *" $arg "*) ;; - *) xrpath="$xrpath $arg" ;; - esac - fi - prev= - continue - ;; - shrext) - shrext_cmds="$arg" - prev= - continue - ;; - weak) - weak_libs="$weak_libs $arg" - prev= - continue - ;; - xcclinker) - linker_flags="$linker_flags $qarg" - compiler_flags="$compiler_flags $qarg" - prev= - func_append compile_command " $qarg" - func_append finalize_command " $qarg" - continue - ;; - xcompiler) - compiler_flags="$compiler_flags $qarg" - prev= - func_append compile_command " $qarg" - func_append finalize_command " $qarg" - continue - ;; - xlinker) - linker_flags="$linker_flags $qarg" - compiler_flags="$compiler_flags $wl$qarg" - prev= - func_append compile_command " $wl$qarg" - func_append finalize_command " $wl$qarg" - continue - ;; - *) - eval "$prev=\"\$arg\"" - prev= - continue - ;; - esac - fi # test -n "$prev" - - prevarg="$arg" - - case $arg in - -all-static) - if test -n "$link_static_flag"; then - # See comment for -static flag below, for more details. - func_append compile_command " $link_static_flag" - func_append finalize_command " $link_static_flag" - fi - continue - ;; - - -allow-undefined) - # FIXME: remove this flag sometime in the future. - func_fatal_error "\`-allow-undefined' must not be used because it is the default" - ;; - - -avoid-version) - avoid_version=yes - continue - ;; - - -dlopen) - prev=dlfiles - continue - ;; - - -dlpreopen) - prev=dlprefiles - continue - ;; - - -export-dynamic) - export_dynamic=yes - continue - ;; - - -export-symbols | -export-symbols-regex) - if test -n "$export_symbols" || test -n "$export_symbols_regex"; then - func_fatal_error "more than one -exported-symbols argument is not allowed" - fi - if test "X$arg" = "X-export-symbols"; then - prev=expsyms - else - prev=expsyms_regex - fi - continue - ;; - - -framework) - prev=framework - continue - ;; - - -inst-prefix-dir) - prev=inst_prefix - continue - ;; - - # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* - # so, if we see these flags be careful not to treat them like -L - -L[A-Z][A-Z]*:*) - case $with_gcc/$host in - no/*-*-irix* | /*-*-irix*) - func_append compile_command " $arg" - func_append finalize_command " $arg" - ;; - esac - continue - ;; - - -L*) - func_stripname '-L' '' "$arg" - dir=$func_stripname_result - if test -z "$dir"; then - if test "$#" -gt 0; then - func_fatal_error "require no space between \`-L' and \`$1'" - else - func_fatal_error "need path for \`-L' option" - fi - fi - # We need an absolute path. - case $dir in - [\\/]* | [A-Za-z]:[\\/]*) ;; - *) - absdir=`cd "$dir" && pwd` - test -z "$absdir" && \ - func_fatal_error "cannot determine absolute directory name of \`$dir'" - dir="$absdir" - ;; - esac - case "$deplibs " in - *" -L$dir "*) ;; - *) - deplibs="$deplibs -L$dir" - lib_search_path="$lib_search_path $dir" - ;; - esac - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) - testbindir=`$ECHO "X$dir" | $Xsed -e 's*/lib$*/bin*'` - case :$dllsearchpath: in - *":$dir:"*) ;; - ::) dllsearchpath=$dir;; - *) dllsearchpath="$dllsearchpath:$dir";; - esac - case :$dllsearchpath: in - *":$testbindir:"*) ;; - ::) dllsearchpath=$testbindir;; - *) dllsearchpath="$dllsearchpath:$testbindir";; - esac - ;; - esac - continue - ;; - - -l*) - if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc*) - # These systems don't actually have a C or math library (as such) - continue - ;; - *-*-os2*) - # These systems don't actually have a C library (as such) - test "X$arg" = "X-lc" && continue - ;; - *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) - # Do not include libc due to us having libc/libc_r. - test "X$arg" = "X-lc" && continue - ;; - *-*-rhapsody* | *-*-darwin1.[012]) - # Rhapsody C and math libraries are in the System framework - deplibs="$deplibs System.ltframework" - continue - ;; - *-*-sco3.2v5* | *-*-sco5v6*) - # Causes problems with __ctype - test "X$arg" = "X-lc" && continue - ;; - *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) - # Compiler inserts libc in the correct place for threads to work - test "X$arg" = "X-lc" && continue - ;; - esac - elif test "X$arg" = "X-lc_r"; then - case $host in - *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) - # Do not include libc_r directly, use -pthread flag. - continue - ;; - esac - fi - deplibs="$deplibs $arg" - continue - ;; - - -module) - module=yes - continue - ;; - - # Tru64 UNIX uses -model [arg] to determine the layout of C++ - # classes, name mangling, and exception handling. - # Darwin uses the -arch flag to determine output architecture. - -model|-arch|-isysroot) - compiler_flags="$compiler_flags $arg" - func_append compile_command " $arg" - func_append finalize_command " $arg" - prev=xcompiler - continue - ;; - - -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) - compiler_flags="$compiler_flags $arg" - func_append compile_command " $arg" - func_append finalize_command " $arg" - case "$new_inherited_linker_flags " in - *" $arg "*) ;; - * ) new_inherited_linker_flags="$new_inherited_linker_flags $arg" ;; - esac - continue - ;; - - -multi_module) - single_module="${wl}-multi_module" - continue - ;; - - -no-fast-install) - fast_install=no - continue - ;; - - -no-install) - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) - # The PATH hackery in wrapper scripts is required on Windows - # and Darwin in order for the loader to find any dlls it needs. - func_warning "\`-no-install' is ignored for $host" - func_warning "assuming \`-no-fast-install' instead" - fast_install=no - ;; - *) no_install=yes ;; - esac - continue - ;; - - -no-undefined) - allow_undefined=no - continue - ;; - - -objectlist) - prev=objectlist - continue - ;; - - -o) prev=output ;; - - -precious-files-regex) - prev=precious_regex - continue - ;; - - -release) - prev=release - continue - ;; - - -rpath) - prev=rpath - continue - ;; - - -R) - prev=xrpath - continue - ;; - - -R*) - func_stripname '-R' '' "$arg" - dir=$func_stripname_result - # We need an absolute path. - case $dir in - [\\/]* | [A-Za-z]:[\\/]*) ;; - *) - func_fatal_error "only absolute run-paths are allowed" - ;; - esac - case "$xrpath " in - *" $dir "*) ;; - *) xrpath="$xrpath $dir" ;; - esac - continue - ;; - - -shared) - # The effects of -shared are defined in a previous loop. - continue - ;; - - -shrext) - prev=shrext - continue - ;; - - -static | -static-libtool-libs) - # The effects of -static are defined in a previous loop. - # We used to do the same as -all-static on platforms that - # didn't have a PIC flag, but the assumption that the effects - # would be equivalent was wrong. It would break on at least - # Digital Unix and AIX. - continue - ;; - - -thread-safe) - thread_safe=yes - continue - ;; - - -version-info) - prev=vinfo - continue - ;; - - -version-number) - prev=vinfo - vinfo_number=yes - continue - ;; - - -weak) - prev=weak - continue - ;; - - -Wc,*) - func_stripname '-Wc,' '' "$arg" - args=$func_stripname_result - arg= - save_ifs="$IFS"; IFS=',' - for flag in $args; do - IFS="$save_ifs" - func_quote_for_eval "$flag" - arg="$arg $wl$func_quote_for_eval_result" - compiler_flags="$compiler_flags $func_quote_for_eval_result" - done - IFS="$save_ifs" - func_stripname ' ' '' "$arg" - arg=$func_stripname_result - ;; - - -Wl,*) - func_stripname '-Wl,' '' "$arg" - args=$func_stripname_result - arg= - save_ifs="$IFS"; IFS=',' - for flag in $args; do - IFS="$save_ifs" - func_quote_for_eval "$flag" - arg="$arg $wl$func_quote_for_eval_result" - compiler_flags="$compiler_flags $wl$func_quote_for_eval_result" - linker_flags="$linker_flags $func_quote_for_eval_result" - done - IFS="$save_ifs" - func_stripname ' ' '' "$arg" - arg=$func_stripname_result - ;; - - -Xcompiler) - prev=xcompiler - continue - ;; - - -Xlinker) - prev=xlinker - continue - ;; - - -XCClinker) - prev=xcclinker - continue - ;; - - # -msg_* for osf cc - -msg_*) - func_quote_for_eval "$arg" - arg="$func_quote_for_eval_result" - ;; - - # -64, -mips[0-9] enable 64-bit mode on the SGI compiler - # -r[0-9][0-9]* specifies the processor on the SGI compiler - # -xarch=*, -xtarget=* enable 64-bit mode on the Sun compiler - # +DA*, +DD* enable 64-bit mode on the HP compiler - # -q* pass through compiler args for the IBM compiler - # -m*, -t[45]*, -txscale* pass through architecture-specific - # compiler args for GCC - # -F/path gives path to uninstalled frameworks, gcc on darwin - # -p, -pg, --coverage, -fprofile-* pass through profiling flag for GCC - # @file GCC response files - -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ - -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*) - func_quote_for_eval "$arg" - arg="$func_quote_for_eval_result" - func_append compile_command " $arg" - func_append finalize_command " $arg" - compiler_flags="$compiler_flags $arg" - continue - ;; - - # Some other compiler flag. - -* | +*) - func_quote_for_eval "$arg" - arg="$func_quote_for_eval_result" - ;; - - *.$objext) - # A standard object. - objs="$objs $arg" - ;; - - *.lo) - # A libtool-controlled object. - - # Check to see that this really is a libtool object. - if func_lalib_unsafe_p "$arg"; then - pic_object= - non_pic_object= - - # Read the .lo file - func_source "$arg" - - if test -z "$pic_object" || - test -z "$non_pic_object" || - test "$pic_object" = none && - test "$non_pic_object" = none; then - func_fatal_error "cannot find name of object for \`$arg'" - fi - - # Extract subdirectory from the argument. - func_dirname "$arg" "/" "" - xdir="$func_dirname_result" - - if test "$pic_object" != none; then - # Prepend the subdirectory the object is found in. - pic_object="$xdir$pic_object" - - if test "$prev" = dlfiles; then - if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then - dlfiles="$dlfiles $pic_object" - prev= - continue - else - # If libtool objects are unsupported, then we need to preload. - prev=dlprefiles - fi - fi - - # CHECK ME: I think I busted this. -Ossama - if test "$prev" = dlprefiles; then - # Preload the old-style object. - dlprefiles="$dlprefiles $pic_object" - prev= - fi - - # A PIC object. - func_append libobjs " $pic_object" - arg="$pic_object" - fi - - # Non-PIC object. - if test "$non_pic_object" != none; then - # Prepend the subdirectory the object is found in. - non_pic_object="$xdir$non_pic_object" - - # A standard non-PIC object - func_append non_pic_objects " $non_pic_object" - if test -z "$pic_object" || test "$pic_object" = none ; then - arg="$non_pic_object" - fi - else - # If the PIC object exists, use it instead. - # $xdir was prepended to $pic_object above. - non_pic_object="$pic_object" - func_append non_pic_objects " $non_pic_object" - fi - else - # Only an error if not doing a dry-run. - if $opt_dry_run; then - # Extract subdirectory from the argument. - func_dirname "$arg" "/" "" - xdir="$func_dirname_result" - - func_lo2o "$arg" - pic_object=$xdir$objdir/$func_lo2o_result - non_pic_object=$xdir$func_lo2o_result - func_append libobjs " $pic_object" - func_append non_pic_objects " $non_pic_object" - else - func_fatal_error "\`$arg' is not a valid libtool object" - fi - fi - ;; - - *.$libext) - # An archive. - deplibs="$deplibs $arg" - old_deplibs="$old_deplibs $arg" - continue - ;; - - *.la) - # A libtool-controlled library. - - if test "$prev" = dlfiles; then - # This library was specified with -dlopen. - dlfiles="$dlfiles $arg" - prev= - elif test "$prev" = dlprefiles; then - # The library was specified with -dlpreopen. - dlprefiles="$dlprefiles $arg" - prev= - else - deplibs="$deplibs $arg" - fi - continue - ;; - - # Some other compiler argument. - *) - # Unknown arguments in both finalize_command and compile_command need - # to be aesthetically quoted because they are evaled later. - func_quote_for_eval "$arg" - arg="$func_quote_for_eval_result" - ;; - esac # arg - - # Now actually substitute the argument into the commands. - if test -n "$arg"; then - func_append compile_command " $arg" - func_append finalize_command " $arg" - fi - done # argument parsing loop - - test -n "$prev" && \ - func_fatal_help "the \`$prevarg' option requires an argument" - - if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then - eval arg=\"$export_dynamic_flag_spec\" - func_append compile_command " $arg" - func_append finalize_command " $arg" - fi - - oldlibs= - # calculate the name of the file, without its directory - func_basename "$output" - outputname="$func_basename_result" - libobjs_save="$libobjs" - - if test -n "$shlibpath_var"; then - # get the directories listed in $shlibpath_var - eval shlib_search_path=\`\$ECHO \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\` - else - shlib_search_path= - fi - eval sys_lib_search_path=\"$sys_lib_search_path_spec\" - eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" - - func_dirname "$output" "/" "" - output_objdir="$func_dirname_result$objdir" - # Create the object directory. - func_mkdir_p "$output_objdir" - - # Determine the type of output - case $output in - "") - func_fatal_help "you must specify an output file" - ;; - *.$libext) linkmode=oldlib ;; - *.lo | *.$objext) linkmode=obj ;; - *.la) linkmode=lib ;; - *) linkmode=prog ;; # Anything else should be a program. - esac - - specialdeplibs= - - libs= - # Find all interdependent deplibs by searching for libraries - # that are linked more than once (e.g. -la -lb -la) - for deplib in $deplibs; do - if $opt_duplicate_deps ; then - case "$libs " in - *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; - esac - fi - libs="$libs $deplib" - done - - if test "$linkmode" = lib; then - libs="$predeps $libs $compiler_lib_search_path $postdeps" - - # Compute libraries that are listed more than once in $predeps - # $postdeps and mark them as special (i.e., whose duplicates are - # not to be eliminated). - pre_post_deps= - if $opt_duplicate_compiler_generated_deps; then - for pre_post_dep in $predeps $postdeps; do - case "$pre_post_deps " in - *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;; - esac - pre_post_deps="$pre_post_deps $pre_post_dep" - done - fi - pre_post_deps= - fi - - deplibs= - newdependency_libs= - newlib_search_path= - need_relink=no # whether we're linking any uninstalled libtool libraries - notinst_deplibs= # not-installed libtool libraries - notinst_path= # paths that contain not-installed libtool libraries - - case $linkmode in - lib) - passes="conv dlpreopen link" - for file in $dlfiles $dlprefiles; do - case $file in - *.la) ;; - *) - func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file" - ;; - esac - done - ;; - prog) - compile_deplibs= - finalize_deplibs= - alldeplibs=no - newdlfiles= - newdlprefiles= - passes="conv scan dlopen dlpreopen link" - ;; - *) passes="conv" - ;; - esac - - for pass in $passes; do - # The preopen pass in lib mode reverses $deplibs; put it back here - # so that -L comes before libs that need it for instance... - if test "$linkmode,$pass" = "lib,link"; then - ## FIXME: Find the place where the list is rebuilt in the wrong - ## order, and fix it there properly - tmp_deplibs= - for deplib in $deplibs; do - tmp_deplibs="$deplib $tmp_deplibs" - done - deplibs="$tmp_deplibs" - fi - - if test "$linkmode,$pass" = "lib,link" || - test "$linkmode,$pass" = "prog,scan"; then - libs="$deplibs" - deplibs= - fi - if test "$linkmode" = prog; then - case $pass in - dlopen) libs="$dlfiles" ;; - dlpreopen) libs="$dlprefiles" ;; - link) - libs="$deplibs %DEPLIBS%" - test "X$link_all_deplibs" != Xno && libs="$libs $dependency_libs" - ;; - esac - fi - if test "$linkmode,$pass" = "lib,dlpreopen"; then - # Collect and forward deplibs of preopened libtool libs - for lib in $dlprefiles; do - # Ignore non-libtool-libs - dependency_libs= - case $lib in - *.la) func_source "$lib" ;; - esac - - # Collect preopened libtool deplibs, except any this library - # has declared as weak libs - for deplib in $dependency_libs; do - deplib_base=`$ECHO "X$deplib" | $Xsed -e "$basename"` - case " $weak_libs " in - *" $deplib_base "*) ;; - *) deplibs="$deplibs $deplib" ;; - esac - done - done - libs="$dlprefiles" - fi - if test "$pass" = dlopen; then - # Collect dlpreopened libraries - save_deplibs="$deplibs" - deplibs= - fi - - for deplib in $libs; do - lib= - found=no - case $deplib in - -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) - if test "$linkmode,$pass" = "prog,link"; then - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - else - compiler_flags="$compiler_flags $deplib" - if test "$linkmode" = lib ; then - case "$new_inherited_linker_flags " in - *" $deplib "*) ;; - * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;; - esac - fi - fi - continue - ;; - -l*) - if test "$linkmode" != lib && test "$linkmode" != prog; then - func_warning "\`-l' is ignored for archives/objects" - continue - fi - func_stripname '-l' '' "$deplib" - name=$func_stripname_result - if test "$linkmode" = lib; then - searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" - else - searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" - fi - for searchdir in $searchdirs; do - for search_ext in .la $std_shrext .so .a; do - # Search the libtool library - lib="$searchdir/lib${name}${search_ext}" - if test -f "$lib"; then - if test "$search_ext" = ".la"; then - found=yes - else - found=no - fi - break 2 - fi - done - done - if test "$found" != yes; then - # deplib doesn't seem to be a libtool library - if test "$linkmode,$pass" = "prog,link"; then - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - else - deplibs="$deplib $deplibs" - test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" - fi - continue - else # deplib is a libtool library - # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, - # We need to do some special things here, and not later. - if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then - case " $predeps $postdeps " in - *" $deplib "*) - if func_lalib_p "$lib"; then - library_names= - old_library= - func_source "$lib" - for l in $old_library $library_names; do - ll="$l" - done - if test "X$ll" = "X$old_library" ; then # only static version available - found=no - func_dirname "$lib" "" "." - ladir="$func_dirname_result" - lib=$ladir/$old_library - if test "$linkmode,$pass" = "prog,link"; then - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - else - deplibs="$deplib $deplibs" - test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" - fi - continue - fi - fi - ;; - *) ;; - esac - fi - fi - ;; # -l - *.ltframework) - if test "$linkmode,$pass" = "prog,link"; then - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - else - deplibs="$deplib $deplibs" - if test "$linkmode" = lib ; then - case "$new_inherited_linker_flags " in - *" $deplib "*) ;; - * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;; - esac - fi - fi - continue - ;; - -L*) - case $linkmode in - lib) - deplibs="$deplib $deplibs" - test "$pass" = conv && continue - newdependency_libs="$deplib $newdependency_libs" - func_stripname '-L' '' "$deplib" - newlib_search_path="$newlib_search_path $func_stripname_result" - ;; - prog) - if test "$pass" = conv; then - deplibs="$deplib $deplibs" - continue - fi - if test "$pass" = scan; then - deplibs="$deplib $deplibs" - else - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - fi - func_stripname '-L' '' "$deplib" - newlib_search_path="$newlib_search_path $func_stripname_result" - ;; - *) - func_warning "\`-L' is ignored for archives/objects" - ;; - esac # linkmode - continue - ;; # -L - -R*) - if test "$pass" = link; then - func_stripname '-R' '' "$deplib" - dir=$func_stripname_result - # Make sure the xrpath contains only unique directories. - case "$xrpath " in - *" $dir "*) ;; - *) xrpath="$xrpath $dir" ;; - esac - fi - deplibs="$deplib $deplibs" - continue - ;; - *.la) lib="$deplib" ;; - *.$libext) - if test "$pass" = conv; then - deplibs="$deplib $deplibs" - continue - fi - case $linkmode in - lib) - # Linking convenience modules into shared libraries is allowed, - # but linking other static libraries is non-portable. - case " $dlpreconveniencelibs " in - *" $deplib "*) ;; - *) - valid_a_lib=no - case $deplibs_check_method in - match_pattern*) - set dummy $deplibs_check_method; shift - match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` - if eval "\$ECHO \"X$deplib\"" 2>/dev/null | $Xsed -e 10q \ - | $EGREP "$match_pattern_regex" > /dev/null; then - valid_a_lib=yes - fi - ;; - pass_all) - valid_a_lib=yes - ;; - esac - if test "$valid_a_lib" != yes; then - $ECHO - $ECHO "*** Warning: Trying to link with static lib archive $deplib." - $ECHO "*** I have the capability to make that library automatically link in when" - $ECHO "*** you link to this library. But I can only do this if you have a" - $ECHO "*** shared version of the library, which you do not appear to have" - $ECHO "*** because the file extensions .$libext of this argument makes me believe" - $ECHO "*** that it is just a static archive that I should not use here." - else - $ECHO - $ECHO "*** Warning: Linking the shared library $output against the" - $ECHO "*** static library $deplib is not portable!" - deplibs="$deplib $deplibs" - fi - ;; - esac - continue - ;; - prog) - if test "$pass" != link; then - deplibs="$deplib $deplibs" - else - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - fi - continue - ;; - esac # linkmode - ;; # *.$libext - *.lo | *.$objext) - if test "$pass" = conv; then - deplibs="$deplib $deplibs" - elif test "$linkmode" = prog; then - if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then - # If there is no dlopen support or we're linking statically, - # we need to preload. - newdlprefiles="$newdlprefiles $deplib" - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - else - newdlfiles="$newdlfiles $deplib" - fi - fi - continue - ;; - %DEPLIBS%) - alldeplibs=yes - continue - ;; - esac # case $deplib - - if test "$found" = yes || test -f "$lib"; then : - else - func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'" - fi - - # Check to see that this really is a libtool archive. - func_lalib_unsafe_p "$lib" \ - || func_fatal_error "\`$lib' is not a valid libtool archive" - - func_dirname "$lib" "" "." - ladir="$func_dirname_result" - - dlname= - dlopen= - dlpreopen= - libdir= - library_names= - old_library= - inherited_linker_flags= - # If the library was installed with an old release of libtool, - # it will not redefine variables installed, or shouldnotlink - installed=yes - shouldnotlink=no - avoidtemprpath= - - - # Read the .la file - func_source "$lib" - - # Convert "-framework foo" to "foo.ltframework" - if test -n "$inherited_linker_flags"; then - tmp_inherited_linker_flags=`$ECHO "X$inherited_linker_flags" | $Xsed -e 's/-framework \([^ $]*\)/\1.ltframework/g'` - for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do - case " $new_inherited_linker_flags " in - *" $tmp_inherited_linker_flag "*) ;; - *) new_inherited_linker_flags="$new_inherited_linker_flags $tmp_inherited_linker_flag";; - esac - done - fi - dependency_libs=`$ECHO "X $dependency_libs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` - if test "$linkmode,$pass" = "lib,link" || - test "$linkmode,$pass" = "prog,scan" || - { test "$linkmode" != prog && test "$linkmode" != lib; }; then - test -n "$dlopen" && dlfiles="$dlfiles $dlopen" - test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen" - fi - - if test "$pass" = conv; then - # Only check for convenience libraries - deplibs="$lib $deplibs" - if test -z "$libdir"; then - if test -z "$old_library"; then - func_fatal_error "cannot find name of link library for \`$lib'" - fi - # It is a libtool convenience library, so add in its objects. - convenience="$convenience $ladir/$objdir/$old_library" - old_convenience="$old_convenience $ladir/$objdir/$old_library" - tmp_libs= - for deplib in $dependency_libs; do - deplibs="$deplib $deplibs" - if $opt_duplicate_deps ; then - case "$tmp_libs " in - *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; - esac - fi - tmp_libs="$tmp_libs $deplib" - done - elif test "$linkmode" != prog && test "$linkmode" != lib; then - func_fatal_error "\`$lib' is not a convenience library" - fi - continue - fi # $pass = conv - - - # Get the name of the library we link against. - linklib= - for l in $old_library $library_names; do - linklib="$l" - done - if test -z "$linklib"; then - func_fatal_error "cannot find name of link library for \`$lib'" - fi - - # This library was specified with -dlopen. - if test "$pass" = dlopen; then - if test -z "$libdir"; then - func_fatal_error "cannot -dlopen a convenience library: \`$lib'" - fi - if test -z "$dlname" || - test "$dlopen_support" != yes || - test "$build_libtool_libs" = no; then - # If there is no dlname, no dlopen support or we're linking - # statically, we need to preload. We also need to preload any - # dependent libraries so libltdl's deplib preloader doesn't - # bomb out in the load deplibs phase. - dlprefiles="$dlprefiles $lib $dependency_libs" - else - newdlfiles="$newdlfiles $lib" - fi - continue - fi # $pass = dlopen - - # We need an absolute path. - case $ladir in - [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; - *) - abs_ladir=`cd "$ladir" && pwd` - if test -z "$abs_ladir"; then - func_warning "cannot determine absolute directory name of \`$ladir'" - func_warning "passing it literally to the linker, although it might fail" - abs_ladir="$ladir" - fi - ;; - esac - func_basename "$lib" - laname="$func_basename_result" - - # Find the relevant object directory and library name. - if test "X$installed" = Xyes; then - if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then - func_warning "library \`$lib' was moved." - dir="$ladir" - absdir="$abs_ladir" - libdir="$abs_ladir" - else - dir="$libdir" - absdir="$libdir" - fi - test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes - else - if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then - dir="$ladir" - absdir="$abs_ladir" - # Remove this search path later - notinst_path="$notinst_path $abs_ladir" - else - dir="$ladir/$objdir" - absdir="$abs_ladir/$objdir" - # Remove this search path later - notinst_path="$notinst_path $abs_ladir" - fi - fi # $installed = yes - func_stripname 'lib' '.la' "$laname" - name=$func_stripname_result - - # This library was specified with -dlpreopen. - if test "$pass" = dlpreopen; then - if test -z "$libdir" && test "$linkmode" = prog; then - func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'" - fi - # Prefer using a static library (so that no silly _DYNAMIC symbols - # are required to link). - if test -n "$old_library"; then - newdlprefiles="$newdlprefiles $dir/$old_library" - # Keep a list of preopened convenience libraries to check - # that they are being used correctly in the link pass. - test -z "$libdir" && \ - dlpreconveniencelibs="$dlpreconveniencelibs $dir/$old_library" - # Otherwise, use the dlname, so that lt_dlopen finds it. - elif test -n "$dlname"; then - newdlprefiles="$newdlprefiles $dir/$dlname" - else - newdlprefiles="$newdlprefiles $dir/$linklib" - fi - fi # $pass = dlpreopen - - if test -z "$libdir"; then - # Link the convenience library - if test "$linkmode" = lib; then - deplibs="$dir/$old_library $deplibs" - elif test "$linkmode,$pass" = "prog,link"; then - compile_deplibs="$dir/$old_library $compile_deplibs" - finalize_deplibs="$dir/$old_library $finalize_deplibs" - else - deplibs="$lib $deplibs" # used for prog,scan pass - fi - continue - fi - - - if test "$linkmode" = prog && test "$pass" != link; then - newlib_search_path="$newlib_search_path $ladir" - deplibs="$lib $deplibs" - - linkalldeplibs=no - if test "$link_all_deplibs" != no || test -z "$library_names" || - test "$build_libtool_libs" = no; then - linkalldeplibs=yes - fi - - tmp_libs= - for deplib in $dependency_libs; do - case $deplib in - -L*) func_stripname '-L' '' "$deplib" - newlib_search_path="$newlib_search_path $func_stripname_result" - ;; - esac - # Need to link against all dependency_libs? - if test "$linkalldeplibs" = yes; then - deplibs="$deplib $deplibs" - else - # Need to hardcode shared library paths - # or/and link against static libraries - newdependency_libs="$deplib $newdependency_libs" - fi - if $opt_duplicate_deps ; then - case "$tmp_libs " in - *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; - esac - fi - tmp_libs="$tmp_libs $deplib" - done # for deplib - continue - fi # $linkmode = prog... - - if test "$linkmode,$pass" = "prog,link"; then - if test -n "$library_names" && - { { test "$prefer_static_libs" = no || - test "$prefer_static_libs,$installed" = "built,yes"; } || - test -z "$old_library"; }; then - # We need to hardcode the library path - if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then - # Make sure the rpath contains only unique directories. - case "$temp_rpath:" in - *"$absdir:"*) ;; - *) temp_rpath="$temp_rpath$absdir:" ;; - esac - fi - - # Hardcode the library path. - # Skip directories that are in the system default run-time - # search path. - case " $sys_lib_dlsearch_path " in - *" $absdir "*) ;; - *) - case "$compile_rpath " in - *" $absdir "*) ;; - *) compile_rpath="$compile_rpath $absdir" - esac - ;; - esac - case " $sys_lib_dlsearch_path " in - *" $libdir "*) ;; - *) - case "$finalize_rpath " in - *" $libdir "*) ;; - *) finalize_rpath="$finalize_rpath $libdir" - esac - ;; - esac - fi # $linkmode,$pass = prog,link... - - if test "$alldeplibs" = yes && - { test "$deplibs_check_method" = pass_all || - { test "$build_libtool_libs" = yes && - test -n "$library_names"; }; }; then - # We only need to search for static libraries - continue - fi - fi - - link_static=no # Whether the deplib will be linked statically - use_static_libs=$prefer_static_libs - if test "$use_static_libs" = built && test "$installed" = yes; then - use_static_libs=no - fi - if test -n "$library_names" && - { test "$use_static_libs" = no || test -z "$old_library"; }; then - case $host in - *cygwin* | *mingw* | *cegcc*) - # No point in relinking DLLs because paths are not encoded - notinst_deplibs="$notinst_deplibs $lib" - need_relink=no - ;; - *) - if test "$installed" = no; then - notinst_deplibs="$notinst_deplibs $lib" - need_relink=yes - fi - ;; - esac - # This is a shared library - - # Warn about portability, can't link against -module's on some - # systems (darwin). Don't bleat about dlopened modules though! - dlopenmodule="" - for dlpremoduletest in $dlprefiles; do - if test "X$dlpremoduletest" = "X$lib"; then - dlopenmodule="$dlpremoduletest" - break - fi - done - if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then - $ECHO - if test "$linkmode" = prog; then - $ECHO "*** Warning: Linking the executable $output against the loadable module" - else - $ECHO "*** Warning: Linking the shared library $output against the loadable module" - fi - $ECHO "*** $linklib is not portable!" - fi - if test "$linkmode" = lib && - test "$hardcode_into_libs" = yes; then - # Hardcode the library path. - # Skip directories that are in the system default run-time - # search path. - case " $sys_lib_dlsearch_path " in - *" $absdir "*) ;; - *) - case "$compile_rpath " in - *" $absdir "*) ;; - *) compile_rpath="$compile_rpath $absdir" - esac - ;; - esac - case " $sys_lib_dlsearch_path " in - *" $libdir "*) ;; - *) - case "$finalize_rpath " in - *" $libdir "*) ;; - *) finalize_rpath="$finalize_rpath $libdir" - esac - ;; - esac - fi - - if test -n "$old_archive_from_expsyms_cmds"; then - # figure out the soname - set dummy $library_names - shift - realname="$1" - shift - libname=`eval "\\$ECHO \"$libname_spec\""` - # use dlname if we got it. it's perfectly good, no? - if test -n "$dlname"; then - soname="$dlname" - elif test -n "$soname_spec"; then - # bleh windows - case $host in - *cygwin* | mingw* | *cegcc*) - func_arith $current - $age - major=$func_arith_result - versuffix="-$major" - ;; - esac - eval soname=\"$soname_spec\" - else - soname="$realname" - fi - - # Make a new name for the extract_expsyms_cmds to use - soroot="$soname" - func_basename "$soroot" - soname="$func_basename_result" - func_stripname 'lib' '.dll' "$soname" - newlib=libimp-$func_stripname_result.a - - # If the library has no export list, then create one now - if test -f "$output_objdir/$soname-def"; then : - else - func_verbose "extracting exported symbol list from \`$soname'" - func_execute_cmds "$extract_expsyms_cmds" 'exit $?' - fi - - # Create $newlib - if test -f "$output_objdir/$newlib"; then :; else - func_verbose "generating import library for \`$soname'" - func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' - fi - # make sure the library variables are pointing to the new library - dir=$output_objdir - linklib=$newlib - fi # test -n "$old_archive_from_expsyms_cmds" - - if test "$linkmode" = prog || test "$mode" != relink; then - add_shlibpath= - add_dir= - add= - lib_linked=yes - case $hardcode_action in - immediate | unsupported) - if test "$hardcode_direct" = no; then - add="$dir/$linklib" - case $host in - *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; - *-*-sysv4*uw2*) add_dir="-L$dir" ;; - *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ - *-*-unixware7*) add_dir="-L$dir" ;; - *-*-darwin* ) - # if the lib is a (non-dlopened) module then we can not - # link against it, someone is ignoring the earlier warnings - if /usr/bin/file -L $add 2> /dev/null | - $GREP ": [^:]* bundle" >/dev/null ; then - if test "X$dlopenmodule" != "X$lib"; then - $ECHO "*** Warning: lib $linklib is a module, not a shared library" - if test -z "$old_library" ; then - $ECHO - $ECHO "*** And there doesn't seem to be a static archive available" - $ECHO "*** The link will probably fail, sorry" - else - add="$dir/$old_library" - fi - elif test -n "$old_library"; then - add="$dir/$old_library" - fi - fi - esac - elif test "$hardcode_minus_L" = no; then - case $host in - *-*-sunos*) add_shlibpath="$dir" ;; - esac - add_dir="-L$dir" - add="-l$name" - elif test "$hardcode_shlibpath_var" = no; then - add_shlibpath="$dir" - add="-l$name" - else - lib_linked=no - fi - ;; - relink) - if test "$hardcode_direct" = yes && - test "$hardcode_direct_absolute" = no; then - add="$dir/$linklib" - elif test "$hardcode_minus_L" = yes; then - add_dir="-L$dir" - # Try looking first in the location we're being installed to. - if test -n "$inst_prefix_dir"; then - case $libdir in - [\\/]*) - add_dir="$add_dir -L$inst_prefix_dir$libdir" - ;; - esac - fi - add="-l$name" - elif test "$hardcode_shlibpath_var" = yes; then - add_shlibpath="$dir" - add="-l$name" - else - lib_linked=no - fi - ;; - *) lib_linked=no ;; - esac - - if test "$lib_linked" != yes; then - func_fatal_configuration "unsupported hardcode properties" - fi - - if test -n "$add_shlibpath"; then - case :$compile_shlibpath: in - *":$add_shlibpath:"*) ;; - *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;; - esac - fi - if test "$linkmode" = prog; then - test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" - test -n "$add" && compile_deplibs="$add $compile_deplibs" - else - test -n "$add_dir" && deplibs="$add_dir $deplibs" - test -n "$add" && deplibs="$add $deplibs" - if test "$hardcode_direct" != yes && - test "$hardcode_minus_L" != yes && - test "$hardcode_shlibpath_var" = yes; then - case :$finalize_shlibpath: in - *":$libdir:"*) ;; - *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; - esac - fi - fi - fi - - if test "$linkmode" = prog || test "$mode" = relink; then - add_shlibpath= - add_dir= - add= - # Finalize command for both is simple: just hardcode it. - if test "$hardcode_direct" = yes && - test "$hardcode_direct_absolute" = no; then - add="$libdir/$linklib" - elif test "$hardcode_minus_L" = yes; then - add_dir="-L$libdir" - add="-l$name" - elif test "$hardcode_shlibpath_var" = yes; then - case :$finalize_shlibpath: in - *":$libdir:"*) ;; - *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; - esac - add="-l$name" - elif test "$hardcode_automatic" = yes; then - if test -n "$inst_prefix_dir" && - test -f "$inst_prefix_dir$libdir/$linklib" ; then - add="$inst_prefix_dir$libdir/$linklib" - else - add="$libdir/$linklib" - fi - else - # We cannot seem to hardcode it, guess we'll fake it. - add_dir="-L$libdir" - # Try looking first in the location we're being installed to. - if test -n "$inst_prefix_dir"; then - case $libdir in - [\\/]*) - add_dir="$add_dir -L$inst_prefix_dir$libdir" - ;; - esac - fi - add="-l$name" - fi - - if test "$linkmode" = prog; then - test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" - test -n "$add" && finalize_deplibs="$add $finalize_deplibs" - else - test -n "$add_dir" && deplibs="$add_dir $deplibs" - test -n "$add" && deplibs="$add $deplibs" - fi - fi - elif test "$linkmode" = prog; then - # Here we assume that one of hardcode_direct or hardcode_minus_L - # is not unsupported. This is valid on all known static and - # shared platforms. - if test "$hardcode_direct" != unsupported; then - test -n "$old_library" && linklib="$old_library" - compile_deplibs="$dir/$linklib $compile_deplibs" - finalize_deplibs="$dir/$linklib $finalize_deplibs" - else - compile_deplibs="-l$name -L$dir $compile_deplibs" - finalize_deplibs="-l$name -L$dir $finalize_deplibs" - fi - elif test "$build_libtool_libs" = yes; then - # Not a shared library - if test "$deplibs_check_method" != pass_all; then - # We're trying link a shared library against a static one - # but the system doesn't support it. - - # Just print a warning and add the library to dependency_libs so - # that the program can be linked against the static library. - $ECHO - $ECHO "*** Warning: This system can not link to static lib archive $lib." - $ECHO "*** I have the capability to make that library automatically link in when" - $ECHO "*** you link to this library. But I can only do this if you have a" - $ECHO "*** shared version of the library, which you do not appear to have." - if test "$module" = yes; then - $ECHO "*** But as you try to build a module library, libtool will still create " - $ECHO "*** a static module, that should work as long as the dlopening application" - $ECHO "*** is linked with the -dlopen flag to resolve symbols at runtime." - if test -z "$global_symbol_pipe"; then - $ECHO - $ECHO "*** However, this would only work if libtool was able to extract symbol" - $ECHO "*** lists from a program, using \`nm' or equivalent, but libtool could" - $ECHO "*** not find such a program. So, this module is probably useless." - $ECHO "*** \`nm' from GNU binutils and a full rebuild may help." - fi - if test "$build_old_libs" = no; then - build_libtool_libs=module - build_old_libs=yes - else - build_libtool_libs=no - fi - fi - else - deplibs="$dir/$old_library $deplibs" - link_static=yes - fi - fi # link shared/static library? - - if test "$linkmode" = lib; then - if test -n "$dependency_libs" && - { test "$hardcode_into_libs" != yes || - test "$build_old_libs" = yes || - test "$link_static" = yes; }; then - # Extract -R from dependency_libs - temp_deplibs= - for libdir in $dependency_libs; do - case $libdir in - -R*) func_stripname '-R' '' "$libdir" - temp_xrpath=$func_stripname_result - case " $xrpath " in - *" $temp_xrpath "*) ;; - *) xrpath="$xrpath $temp_xrpath";; - esac;; - *) temp_deplibs="$temp_deplibs $libdir";; - esac - done - dependency_libs="$temp_deplibs" - fi - - newlib_search_path="$newlib_search_path $absdir" - # Link against this library - test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" - # ... and its dependency_libs - tmp_libs= - for deplib in $dependency_libs; do - newdependency_libs="$deplib $newdependency_libs" - if $opt_duplicate_deps ; then - case "$tmp_libs " in - *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; - esac - fi - tmp_libs="$tmp_libs $deplib" - done - - if test "$link_all_deplibs" != no; then - # Add the search paths of all dependency libraries - for deplib in $dependency_libs; do - path= - case $deplib in - -L*) path="$deplib" ;; - *.la) - func_dirname "$deplib" "" "." - dir="$func_dirname_result" - # We need an absolute path. - case $dir in - [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; - *) - absdir=`cd "$dir" && pwd` - if test -z "$absdir"; then - func_warning "cannot determine absolute directory name of \`$dir'" - absdir="$dir" - fi - ;; - esac - if $GREP "^installed=no" $deplib > /dev/null; then - case $host in - *-*-darwin*) - depdepl= - eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` - if test -n "$deplibrary_names" ; then - for tmp in $deplibrary_names ; do - depdepl=$tmp - done - if test -f "$absdir/$objdir/$depdepl" ; then - depdepl="$absdir/$objdir/$depdepl" - darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` - if test -z "$darwin_install_name"; then - darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` - fi - compiler_flags="$compiler_flags ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}" - linker_flags="$linker_flags -dylib_file ${darwin_install_name}:${depdepl}" - path= - fi - fi - ;; - *) - path="-L$absdir/$objdir" - ;; - esac - else - eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` - test -z "$libdir" && \ - func_fatal_error "\`$deplib' is not a valid libtool archive" - test "$absdir" != "$libdir" && \ - func_warning "\`$deplib' seems to be moved" - - path="-L$absdir" - fi - ;; - esac - case " $deplibs " in - *" $path "*) ;; - *) deplibs="$path $deplibs" ;; - esac - done - fi # link_all_deplibs != no - fi # linkmode = lib - done # for deplib in $libs - if test "$pass" = link; then - if test "$linkmode" = "prog"; then - compile_deplibs="$new_inherited_linker_flags $compile_deplibs" - finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" - else - compiler_flags="$compiler_flags "`$ECHO "X $new_inherited_linker_flags" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` - fi - fi - dependency_libs="$newdependency_libs" - if test "$pass" = dlpreopen; then - # Link the dlpreopened libraries before other libraries - for deplib in $save_deplibs; do - deplibs="$deplib $deplibs" - done - fi - if test "$pass" != dlopen; then - if test "$pass" != conv; then - # Make sure lib_search_path contains only unique directories. - lib_search_path= - for dir in $newlib_search_path; do - case "$lib_search_path " in - *" $dir "*) ;; - *) lib_search_path="$lib_search_path $dir" ;; - esac - done - newlib_search_path= - fi - - if test "$linkmode,$pass" != "prog,link"; then - vars="deplibs" - else - vars="compile_deplibs finalize_deplibs" - fi - for var in $vars dependency_libs; do - # Add libraries to $var in reverse order - eval tmp_libs=\"\$$var\" - new_libs= - for deplib in $tmp_libs; do - # FIXME: Pedantically, this is the right thing to do, so - # that some nasty dependency loop isn't accidentally - # broken: - #new_libs="$deplib $new_libs" - # Pragmatically, this seems to cause very few problems in - # practice: - case $deplib in - -L*) new_libs="$deplib $new_libs" ;; - -R*) ;; - *) - # And here is the reason: when a library appears more - # than once as an explicit dependence of a library, or - # is implicitly linked in more than once by the - # compiler, it is considered special, and multiple - # occurrences thereof are not removed. Compare this - # with having the same library being listed as a - # dependency of multiple other libraries: in this case, - # we know (pedantically, we assume) the library does not - # need to be listed more than once, so we keep only the - # last copy. This is not always right, but it is rare - # enough that we require users that really mean to play - # such unportable linking tricks to link the library - # using -Wl,-lname, so that libtool does not consider it - # for duplicate removal. - case " $specialdeplibs " in - *" $deplib "*) new_libs="$deplib $new_libs" ;; - *) - case " $new_libs " in - *" $deplib "*) ;; - *) new_libs="$deplib $new_libs" ;; - esac - ;; - esac - ;; - esac - done - tmp_libs= - for deplib in $new_libs; do - case $deplib in - -L*) - case " $tmp_libs " in - *" $deplib "*) ;; - *) tmp_libs="$tmp_libs $deplib" ;; - esac - ;; - *) tmp_libs="$tmp_libs $deplib" ;; - esac - done - eval $var=\"$tmp_libs\" - done # for var - fi - # Last step: remove runtime libs from dependency_libs - # (they stay in deplibs) - tmp_libs= - for i in $dependency_libs ; do - case " $predeps $postdeps $compiler_lib_search_path " in - *" $i "*) - i="" - ;; - esac - if test -n "$i" ; then - tmp_libs="$tmp_libs $i" - fi - done - dependency_libs=$tmp_libs - done # for pass - if test "$linkmode" = prog; then - dlfiles="$newdlfiles" - fi - if test "$linkmode" = prog || test "$linkmode" = lib; then - dlprefiles="$newdlprefiles" - fi - - case $linkmode in - oldlib) - if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then - func_warning "\`-dlopen' is ignored for archives" - fi - - case " $deplibs" in - *\ -l* | *\ -L*) - func_warning "\`-l' and \`-L' are ignored for archives" ;; - esac - - test -n "$rpath" && \ - func_warning "\`-rpath' is ignored for archives" - - test -n "$xrpath" && \ - func_warning "\`-R' is ignored for archives" - - test -n "$vinfo" && \ - func_warning "\`-version-info/-version-number' is ignored for archives" - - test -n "$release" && \ - func_warning "\`-release' is ignored for archives" - - test -n "$export_symbols$export_symbols_regex" && \ - func_warning "\`-export-symbols' is ignored for archives" - - # Now set the variables for building old libraries. - build_libtool_libs=no - oldlibs="$output" - objs="$objs$old_deplibs" - ;; - - lib) - # Make sure we only generate libraries of the form `libNAME.la'. - case $outputname in - lib*) - func_stripname 'lib' '.la' "$outputname" - name=$func_stripname_result - eval shared_ext=\"$shrext_cmds\" - eval libname=\"$libname_spec\" - ;; - *) - test "$module" = no && \ - func_fatal_help "libtool library \`$output' must begin with \`lib'" - - if test "$need_lib_prefix" != no; then - # Add the "lib" prefix for modules if required - func_stripname '' '.la' "$outputname" - name=$func_stripname_result - eval shared_ext=\"$shrext_cmds\" - eval libname=\"$libname_spec\" - else - func_stripname '' '.la' "$outputname" - libname=$func_stripname_result - fi - ;; - esac - - if test -n "$objs"; then - if test "$deplibs_check_method" != pass_all; then - func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs" - else - $ECHO - $ECHO "*** Warning: Linking the shared library $output against the non-libtool" - $ECHO "*** objects $objs is not portable!" - libobjs="$libobjs $objs" - fi - fi - - test "$dlself" != no && \ - func_warning "\`-dlopen self' is ignored for libtool libraries" - - set dummy $rpath - shift - test "$#" -gt 1 && \ - func_warning "ignoring multiple \`-rpath's for a libtool library" - - install_libdir="$1" - - oldlibs= - if test -z "$rpath"; then - if test "$build_libtool_libs" = yes; then - # Building a libtool convenience library. - # Some compilers have problems with a `.al' extension so - # convenience libraries should have the same extension an - # archive normally would. - oldlibs="$output_objdir/$libname.$libext $oldlibs" - build_libtool_libs=convenience - build_old_libs=yes - fi - - test -n "$vinfo" && \ - func_warning "\`-version-info/-version-number' is ignored for convenience libraries" - - test -n "$release" && \ - func_warning "\`-release' is ignored for convenience libraries" - else - - # Parse the version information argument. - save_ifs="$IFS"; IFS=':' - set dummy $vinfo 0 0 0 - shift - IFS="$save_ifs" - - test -n "$7" && \ - func_fatal_help "too many parameters to \`-version-info'" - - # convert absolute version numbers to libtool ages - # this retains compatibility with .la files and attempts - # to make the code below a bit more comprehensible - - case $vinfo_number in - yes) - number_major="$1" - number_minor="$2" - number_revision="$3" - # - # There are really only two kinds -- those that - # use the current revision as the major version - # and those that subtract age and use age as - # a minor version. But, then there is irix - # which has an extra 1 added just for fun - # - case $version_type in - darwin|linux|osf|windows|none) - func_arith $number_major + $number_minor - current=$func_arith_result - age="$number_minor" - revision="$number_revision" - ;; - freebsd-aout|freebsd-elf|sunos) - current="$number_major" - revision="$number_minor" - age="0" - ;; - irix|nonstopux) - func_arith $number_major + $number_minor - current=$func_arith_result - age="$number_minor" - revision="$number_minor" - lt_irix_increment=no - ;; - *) - func_fatal_configuration "$modename: unknown library version type \`$version_type'" - ;; - esac - ;; - no) - current="$1" - revision="$2" - age="$3" - ;; - esac - - # Check that each of the things are valid numbers. - case $current in - 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; - *) - func_error "CURRENT \`$current' must be a nonnegative integer" - func_fatal_error "\`$vinfo' is not valid version information" - ;; - esac - - case $revision in - 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; - *) - func_error "REVISION \`$revision' must be a nonnegative integer" - func_fatal_error "\`$vinfo' is not valid version information" - ;; - esac - - case $age in - 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; - *) - func_error "AGE \`$age' must be a nonnegative integer" - func_fatal_error "\`$vinfo' is not valid version information" - ;; - esac - - if test "$age" -gt "$current"; then - func_error "AGE \`$age' is greater than the current interface number \`$current'" - func_fatal_error "\`$vinfo' is not valid version information" - fi - - # Calculate the version variables. - major= - versuffix= - verstring= - case $version_type in - none) ;; - - darwin) - # Like Linux, but with the current version available in - # verstring for coding it into the library header - func_arith $current - $age - major=.$func_arith_result - versuffix="$major.$age.$revision" - # Darwin ld doesn't like 0 for these options... - func_arith $current + 1 - minor_current=$func_arith_result - xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" - verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" - ;; - - freebsd-aout) - major=".$current" - versuffix=".$current.$revision"; - ;; - - freebsd-elf) - major=".$current" - versuffix=".$current" - ;; - - irix | nonstopux) - if test "X$lt_irix_increment" = "Xno"; then - func_arith $current - $age - else - func_arith $current - $age + 1 - fi - major=$func_arith_result - - case $version_type in - nonstopux) verstring_prefix=nonstopux ;; - *) verstring_prefix=sgi ;; - esac - verstring="$verstring_prefix$major.$revision" - - # Add in all the interfaces that we are compatible with. - loop=$revision - while test "$loop" -ne 0; do - func_arith $revision - $loop - iface=$func_arith_result - func_arith $loop - 1 - loop=$func_arith_result - verstring="$verstring_prefix$major.$iface:$verstring" - done - - # Before this point, $major must not contain `.'. - major=.$major - versuffix="$major.$revision" - ;; - - linux) - func_arith $current - $age - major=.$func_arith_result - versuffix="$major.$age.$revision" - ;; - - osf) - func_arith $current - $age - major=.$func_arith_result - versuffix=".$current.$age.$revision" - verstring="$current.$age.$revision" - - # Add in all the interfaces that we are compatible with. - loop=$age - while test "$loop" -ne 0; do - func_arith $current - $loop - iface=$func_arith_result - func_arith $loop - 1 - loop=$func_arith_result - verstring="$verstring:${iface}.0" - done - - # Make executables depend on our current version. - verstring="$verstring:${current}.0" - ;; - - qnx) - major=".$current" - versuffix=".$current" - ;; - - sunos) - major=".$current" - versuffix=".$current.$revision" - ;; - - windows) - # Use '-' rather than '.', since we only want one - # extension on DOS 8.3 filesystems. - func_arith $current - $age - major=$func_arith_result - versuffix="-$major" - ;; - - *) - func_fatal_configuration "unknown library version type \`$version_type'" - ;; - esac - - # Clear the version info if we defaulted, and they specified a release. - if test -z "$vinfo" && test -n "$release"; then - major= - case $version_type in - darwin) - # we can't check for "0.0" in archive_cmds due to quoting - # problems, so we reset it completely - verstring= - ;; - *) - verstring="0.0" - ;; - esac - if test "$need_version" = no; then - versuffix= - else - versuffix=".0.0" - fi - fi - - # Remove version info from name if versioning should be avoided - if test "$avoid_version" = yes && test "$need_version" = no; then - major= - versuffix= - verstring="" - fi - - # Check to see if the archive will have undefined symbols. - if test "$allow_undefined" = yes; then - if test "$allow_undefined_flag" = unsupported; then - func_warning "undefined symbols not allowed in $host shared libraries" - build_libtool_libs=no - build_old_libs=yes - fi - else - # Don't allow undefined symbols. - allow_undefined_flag="$no_undefined_flag" - fi - - fi - - func_generate_dlsyms "$libname" "$libname" "yes" - libobjs="$libobjs $symfileobj" - test "X$libobjs" = "X " && libobjs= - - if test "$mode" != relink; then - # Remove our outputs, but don't remove object files since they - # may have been created when compiling PIC objects. - removelist= - tempremovelist=`$ECHO "$output_objdir/*"` - for p in $tempremovelist; do - case $p in - *.$objext | *.gcno) - ;; - $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) - if test "X$precious_files_regex" != "X"; then - if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 - then - continue - fi - fi - removelist="$removelist $p" - ;; - *) ;; - esac - done - test -n "$removelist" && \ - func_show_eval "${RM}r \$removelist" - fi - - # Now set the variables for building old libraries. - if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then - oldlibs="$oldlibs $output_objdir/$libname.$libext" - - # Transform .lo files to .o files. - oldobjs="$objs "`$ECHO "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP` - fi - - # Eliminate all temporary directories. - #for path in $notinst_path; do - # lib_search_path=`$ECHO "X$lib_search_path " | $Xsed -e "s% $path % %g"` - # deplibs=`$ECHO "X$deplibs " | $Xsed -e "s% -L$path % %g"` - # dependency_libs=`$ECHO "X$dependency_libs " | $Xsed -e "s% -L$path % %g"` - #done - - if test -n "$xrpath"; then - # If the user specified any rpath flags, then add them. - temp_xrpath= - for libdir in $xrpath; do - temp_xrpath="$temp_xrpath -R$libdir" - case "$finalize_rpath " in - *" $libdir "*) ;; - *) finalize_rpath="$finalize_rpath $libdir" ;; - esac - done - if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then - dependency_libs="$temp_xrpath $dependency_libs" - fi - fi - - # Make sure dlfiles contains only unique files that won't be dlpreopened - old_dlfiles="$dlfiles" - dlfiles= - for lib in $old_dlfiles; do - case " $dlprefiles $dlfiles " in - *" $lib "*) ;; - *) dlfiles="$dlfiles $lib" ;; - esac - done - - # Make sure dlprefiles contains only unique files - old_dlprefiles="$dlprefiles" - dlprefiles= - for lib in $old_dlprefiles; do - case "$dlprefiles " in - *" $lib "*) ;; - *) dlprefiles="$dlprefiles $lib" ;; - esac - done - - if test "$build_libtool_libs" = yes; then - if test -n "$rpath"; then - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc*) - # these systems don't actually have a c library (as such)! - ;; - *-*-rhapsody* | *-*-darwin1.[012]) - # Rhapsody C library is in the System framework - deplibs="$deplibs System.ltframework" - ;; - *-*-netbsd*) - # Don't link with libc until the a.out ld.so is fixed. - ;; - *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) - # Do not include libc due to us having libc/libc_r. - ;; - *-*-sco3.2v5* | *-*-sco5v6*) - # Causes problems with __ctype - ;; - *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) - # Compiler inserts libc in the correct place for threads to work - ;; - *) - # Add libc to deplibs on all other systems if necessary. - if test "$build_libtool_need_lc" = "yes"; then - deplibs="$deplibs -lc" - fi - ;; - esac - fi - - # Transform deplibs into only deplibs that can be linked in shared. - name_save=$name - libname_save=$libname - release_save=$release - versuffix_save=$versuffix - major_save=$major - # I'm not sure if I'm treating the release correctly. I think - # release should show up in the -l (ie -lgmp5) so we don't want to - # add it in twice. Is that correct? - release="" - versuffix="" - major="" - newdeplibs= - droppeddeps=no - case $deplibs_check_method in - pass_all) - # Don't check for shared/static. Everything works. - # This might be a little naive. We might want to check - # whether the library exists or not. But this is on - # osf3 & osf4 and I'm not really sure... Just - # implementing what was already the behavior. - newdeplibs=$deplibs - ;; - test_compile) - # This code stresses the "libraries are programs" paradigm to its - # limits. Maybe even breaks it. We compile a program, linking it - # against the deplibs as a proxy for the library. Then we can check - # whether they linked in statically or dynamically with ldd. - $opt_dry_run || $RM conftest.c - cat > conftest.c </dev/null` - for potent_lib in $potential_libs; do - # Follow soft links. - if ls -lLd "$potent_lib" 2>/dev/null | - $GREP " -> " >/dev/null; then - continue - fi - # The statement above tries to avoid entering an - # endless loop below, in case of cyclic links. - # We might still enter an endless loop, since a link - # loop can be closed while we follow links, - # but so what? - potlib="$potent_lib" - while test -h "$potlib" 2>/dev/null; do - potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` - case $potliblink in - [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; - *) potlib=`$ECHO "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";; - esac - done - if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | - $SED -e 10q | - $EGREP "$file_magic_regex" > /dev/null; then - newdeplibs="$newdeplibs $a_deplib" - a_deplib="" - break 2 - fi - done - done - fi - if test -n "$a_deplib" ; then - droppeddeps=yes - $ECHO - $ECHO "*** Warning: linker path does not have real file for library $a_deplib." - $ECHO "*** I have the capability to make that library automatically link in when" - $ECHO "*** you link to this library. But I can only do this if you have a" - $ECHO "*** shared version of the library, which you do not appear to have" - $ECHO "*** because I did check the linker path looking for a file starting" - if test -z "$potlib" ; then - $ECHO "*** with $libname but no candidates were found. (...for file magic test)" - else - $ECHO "*** with $libname and none of the candidates passed a file format test" - $ECHO "*** using a file magic. Last file checked: $potlib" - fi - fi - ;; - *) - # Add a -L argument. - newdeplibs="$newdeplibs $a_deplib" - ;; - esac - done # Gone through all deplibs. - ;; - match_pattern*) - set dummy $deplibs_check_method; shift - match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` - for a_deplib in $deplibs; do - case $a_deplib in - -l*) - func_stripname -l '' "$a_deplib" - name=$func_stripname_result - if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then - case " $predeps $postdeps " in - *" $a_deplib "*) - newdeplibs="$newdeplibs $a_deplib" - a_deplib="" - ;; - esac - fi - if test -n "$a_deplib" ; then - libname=`eval "\\$ECHO \"$libname_spec\""` - for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do - potential_libs=`ls $i/$libname[.-]* 2>/dev/null` - for potent_lib in $potential_libs; do - potlib="$potent_lib" # see symlink-check above in file_magic test - if eval "\$ECHO \"X$potent_lib\"" 2>/dev/null | $Xsed -e 10q | \ - $EGREP "$match_pattern_regex" > /dev/null; then - newdeplibs="$newdeplibs $a_deplib" - a_deplib="" - break 2 - fi - done - done - fi - if test -n "$a_deplib" ; then - droppeddeps=yes - $ECHO - $ECHO "*** Warning: linker path does not have real file for library $a_deplib." - $ECHO "*** I have the capability to make that library automatically link in when" - $ECHO "*** you link to this library. But I can only do this if you have a" - $ECHO "*** shared version of the library, which you do not appear to have" - $ECHO "*** because I did check the linker path looking for a file starting" - if test -z "$potlib" ; then - $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" - else - $ECHO "*** with $libname and none of the candidates passed a file format test" - $ECHO "*** using a regex pattern. Last file checked: $potlib" - fi - fi - ;; - *) - # Add a -L argument. - newdeplibs="$newdeplibs $a_deplib" - ;; - esac - done # Gone through all deplibs. - ;; - none | unknown | *) - newdeplibs="" - tmp_deplibs=`$ECHO "X $deplibs" | $Xsed \ - -e 's/ -lc$//' -e 's/ -[LR][^ ]*//g'` - if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then - for i in $predeps $postdeps ; do - # can't use Xsed below, because $i might contain '/' - tmp_deplibs=`$ECHO "X $tmp_deplibs" | $Xsed -e "s,$i,,"` - done - fi - if $ECHO "X $tmp_deplibs" | $Xsed -e 's/[ ]//g' | - $GREP . >/dev/null; then - $ECHO - if test "X$deplibs_check_method" = "Xnone"; then - $ECHO "*** Warning: inter-library dependencies are not supported in this platform." - else - $ECHO "*** Warning: inter-library dependencies are not known to be supported." - fi - $ECHO "*** All declared inter-library dependencies are being dropped." - droppeddeps=yes - fi - ;; - esac - versuffix=$versuffix_save - major=$major_save - release=$release_save - libname=$libname_save - name=$name_save - - case $host in - *-*-rhapsody* | *-*-darwin1.[012]) - # On Rhapsody replace the C library with the System framework - newdeplibs=`$ECHO "X $newdeplibs" | $Xsed -e 's/ -lc / System.ltframework /'` - ;; - esac - - if test "$droppeddeps" = yes; then - if test "$module" = yes; then - $ECHO - $ECHO "*** Warning: libtool could not satisfy all declared inter-library" - $ECHO "*** dependencies of module $libname. Therefore, libtool will create" - $ECHO "*** a static module, that should work as long as the dlopening" - $ECHO "*** application is linked with the -dlopen flag." - if test -z "$global_symbol_pipe"; then - $ECHO - $ECHO "*** However, this would only work if libtool was able to extract symbol" - $ECHO "*** lists from a program, using \`nm' or equivalent, but libtool could" - $ECHO "*** not find such a program. So, this module is probably useless." - $ECHO "*** \`nm' from GNU binutils and a full rebuild may help." - fi - if test "$build_old_libs" = no; then - oldlibs="$output_objdir/$libname.$libext" - build_libtool_libs=module - build_old_libs=yes - else - build_libtool_libs=no - fi - else - $ECHO "*** The inter-library dependencies that have been dropped here will be" - $ECHO "*** automatically added whenever a program is linked with this library" - $ECHO "*** or is declared to -dlopen it." - - if test "$allow_undefined" = no; then - $ECHO - $ECHO "*** Since this library must not contain undefined symbols," - $ECHO "*** because either the platform does not support them or" - $ECHO "*** it was explicitly requested with -no-undefined," - $ECHO "*** libtool will only create a static version of it." - if test "$build_old_libs" = no; then - oldlibs="$output_objdir/$libname.$libext" - build_libtool_libs=module - build_old_libs=yes - else - build_libtool_libs=no - fi - fi - fi - fi - # Done checking deplibs! - deplibs=$newdeplibs - fi - # Time to change all our "foo.ltframework" stuff back to "-framework foo" - case $host in - *-*-darwin*) - newdeplibs=`$ECHO "X $newdeplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` - new_inherited_linker_flags=`$ECHO "X $new_inherited_linker_flags" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` - deplibs=`$ECHO "X $deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` - ;; - esac - - # move library search paths that coincide with paths to not yet - # installed libraries to the beginning of the library search list - new_libs= - for path in $notinst_path; do - case " $new_libs " in - *" -L$path/$objdir "*) ;; - *) - case " $deplibs " in - *" -L$path/$objdir "*) - new_libs="$new_libs -L$path/$objdir" ;; - esac - ;; - esac - done - for deplib in $deplibs; do - case $deplib in - -L*) - case " $new_libs " in - *" $deplib "*) ;; - *) new_libs="$new_libs $deplib" ;; - esac - ;; - *) new_libs="$new_libs $deplib" ;; - esac - done - deplibs="$new_libs" - - # All the library-specific variables (install_libdir is set above). - library_names= - old_library= - dlname= - - # Test again, we may have decided not to build it any more - if test "$build_libtool_libs" = yes; then - if test "$hardcode_into_libs" = yes; then - # Hardcode the library paths - hardcode_libdirs= - dep_rpath= - rpath="$finalize_rpath" - test "$mode" != relink && rpath="$compile_rpath$rpath" - for libdir in $rpath; do - if test -n "$hardcode_libdir_flag_spec"; then - if test -n "$hardcode_libdir_separator"; then - if test -z "$hardcode_libdirs"; then - hardcode_libdirs="$libdir" - else - # Just accumulate the unique libdirs. - case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in - *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) - ;; - *) - hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" - ;; - esac - fi - else - eval flag=\"$hardcode_libdir_flag_spec\" - dep_rpath="$dep_rpath $flag" - fi - elif test -n "$runpath_var"; then - case "$perm_rpath " in - *" $libdir "*) ;; - *) perm_rpath="$perm_rpath $libdir" ;; - esac - fi - done - # Substitute the hardcoded libdirs into the rpath. - if test -n "$hardcode_libdir_separator" && - test -n "$hardcode_libdirs"; then - libdir="$hardcode_libdirs" - if test -n "$hardcode_libdir_flag_spec_ld"; then - eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\" - else - eval dep_rpath=\"$hardcode_libdir_flag_spec\" - fi - fi - if test -n "$runpath_var" && test -n "$perm_rpath"; then - # We should set the runpath_var. - rpath= - for dir in $perm_rpath; do - rpath="$rpath$dir:" - done - eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" - fi - test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" - fi - - shlibpath="$finalize_shlibpath" - test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath" - if test -n "$shlibpath"; then - eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" - fi - - # Get the real and link names of the library. - eval shared_ext=\"$shrext_cmds\" - eval library_names=\"$library_names_spec\" - set dummy $library_names - shift - realname="$1" - shift - - if test -n "$soname_spec"; then - eval soname=\"$soname_spec\" - else - soname="$realname" - fi - if test -z "$dlname"; then - dlname=$soname - fi - - lib="$output_objdir/$realname" - linknames= - for link - do - linknames="$linknames $link" - done - - # Use standard objects if they are pic - test -z "$pic_flag" && libobjs=`$ECHO "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` - test "X$libobjs" = "X " && libobjs= - - delfiles= - if test -n "$export_symbols" && test -n "$include_expsyms"; then - $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" - export_symbols="$output_objdir/$libname.uexp" - delfiles="$delfiles $export_symbols" - fi - - orig_export_symbols= - case $host_os in - cygwin* | mingw* | cegcc*) - if test -n "$export_symbols" && test -z "$export_symbols_regex"; then - # exporting using user supplied symfile - if test "x`$SED 1q $export_symbols`" != xEXPORTS; then - # and it's NOT already a .def file. Must figure out - # which of the given symbols are data symbols and tag - # them as such. So, trigger use of export_symbols_cmds. - # export_symbols gets reassigned inside the "prepare - # the list of exported symbols" if statement, so the - # include_expsyms logic still works. - orig_export_symbols="$export_symbols" - export_symbols= - always_export_symbols=yes - fi - fi - ;; - esac - - # Prepare the list of exported symbols - if test -z "$export_symbols"; then - if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then - func_verbose "generating symbol list for \`$libname.la'" - export_symbols="$output_objdir/$libname.exp" - $opt_dry_run || $RM $export_symbols - cmds=$export_symbols_cmds - save_ifs="$IFS"; IFS='~' - for cmd in $cmds; do - IFS="$save_ifs" - eval cmd=\"$cmd\" - func_len " $cmd" - len=$func_len_result - if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then - func_show_eval "$cmd" 'exit $?' - skipped_export=false - else - # The command line is too long to execute in one step. - func_verbose "using reloadable object file for export list..." - skipped_export=: - # Break out early, otherwise skipped_export may be - # set to false by a later but shorter cmd. - break - fi - done - IFS="$save_ifs" - if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then - func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' - func_show_eval '$MV "${export_symbols}T" "$export_symbols"' - fi - fi - fi - - if test -n "$export_symbols" && test -n "$include_expsyms"; then - tmp_export_symbols="$export_symbols" - test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" - $opt_dry_run || eval '$ECHO "X$include_expsyms" | $Xsed | $SP2NL >> "$tmp_export_symbols"' - fi - - if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then - # The given exports_symbols file has to be filtered, so filter it. - func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" - # FIXME: $output_objdir/$libname.filter potentially contains lots of - # 's' commands which not all seds can handle. GNU sed should be fine - # though. Also, the filter scales superlinearly with the number of - # global variables. join(1) would be nice here, but unfortunately - # isn't a blessed tool. - $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter - delfiles="$delfiles $export_symbols $output_objdir/$libname.filter" - export_symbols=$output_objdir/$libname.def - $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols - fi - - tmp_deplibs= - for test_deplib in $deplibs; do - case " $convenience " in - *" $test_deplib "*) ;; - *) - tmp_deplibs="$tmp_deplibs $test_deplib" - ;; - esac - done - deplibs="$tmp_deplibs" - - if test -n "$convenience"; then - if test -n "$whole_archive_flag_spec" && - test "$compiler_needs_object" = yes && - test -z "$libobjs"; then - # extract the archives, so we have objects to list. - # TODO: could optimize this to just extract one archive. - whole_archive_flag_spec= - fi - if test -n "$whole_archive_flag_spec"; then - save_libobjs=$libobjs - eval libobjs=\"\$libobjs $whole_archive_flag_spec\" - test "X$libobjs" = "X " && libobjs= - else - gentop="$output_objdir/${outputname}x" - generated="$generated $gentop" - - func_extract_archives $gentop $convenience - libobjs="$libobjs $func_extract_archives_result" - test "X$libobjs" = "X " && libobjs= - fi - fi - - if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then - eval flag=\"$thread_safe_flag_spec\" - linker_flags="$linker_flags $flag" - fi - - # Make a backup of the uninstalled library when relinking - if test "$mode" = relink; then - $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? - fi - - # Do each of the archive commands. - if test "$module" = yes && test -n "$module_cmds" ; then - if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then - eval test_cmds=\"$module_expsym_cmds\" - cmds=$module_expsym_cmds - else - eval test_cmds=\"$module_cmds\" - cmds=$module_cmds - fi - else - if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then - eval test_cmds=\"$archive_expsym_cmds\" - cmds=$archive_expsym_cmds - else - eval test_cmds=\"$archive_cmds\" - cmds=$archive_cmds - fi - fi - - if test "X$skipped_export" != "X:" && - func_len " $test_cmds" && - len=$func_len_result && - test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then - : - else - # The command line is too long to link in one step, link piecewise - # or, if using GNU ld and skipped_export is not :, use a linker - # script. - - # Save the value of $output and $libobjs because we want to - # use them later. If we have whole_archive_flag_spec, we - # want to use save_libobjs as it was before - # whole_archive_flag_spec was expanded, because we can't - # assume the linker understands whole_archive_flag_spec. - # This may have to be revisited, in case too many - # convenience libraries get linked in and end up exceeding - # the spec. - if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then - save_libobjs=$libobjs - fi - save_output=$output - output_la=`$ECHO "X$output" | $Xsed -e "$basename"` - - # Clear the reloadable object creation command queue and - # initialize k to one. - test_cmds= - concat_cmds= - objlist= - last_robj= - k=1 - - if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then - output=${output_objdir}/${output_la}.lnkscript - func_verbose "creating GNU ld script: $output" - $ECHO 'INPUT (' > $output - for obj in $save_libobjs - do - $ECHO "$obj" >> $output - done - $ECHO ')' >> $output - delfiles="$delfiles $output" - elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then - output=${output_objdir}/${output_la}.lnk - func_verbose "creating linker input file list: $output" - : > $output - set x $save_libobjs - shift - firstobj= - if test "$compiler_needs_object" = yes; then - firstobj="$1 " - shift - fi - for obj - do - $ECHO "$obj" >> $output - done - delfiles="$delfiles $output" - output=$firstobj\"$file_list_spec$output\" - else - if test -n "$save_libobjs"; then - func_verbose "creating reloadable object files..." - output=$output_objdir/$output_la-${k}.$objext - eval test_cmds=\"$reload_cmds\" - func_len " $test_cmds" - len0=$func_len_result - len=$len0 - - # Loop over the list of objects to be linked. - for obj in $save_libobjs - do - func_len " $obj" - func_arith $len + $func_len_result - len=$func_arith_result - if test "X$objlist" = X || - test "$len" -lt "$max_cmd_len"; then - func_append objlist " $obj" - else - # The command $test_cmds is almost too long, add a - # command to the queue. - if test "$k" -eq 1 ; then - # The first file doesn't have a previous command to add. - eval concat_cmds=\"$reload_cmds $objlist $last_robj\" - else - # All subsequent reloadable object files will link in - # the last one created. - eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj~\$RM $last_robj\" - fi - last_robj=$output_objdir/$output_la-${k}.$objext - func_arith $k + 1 - k=$func_arith_result - output=$output_objdir/$output_la-${k}.$objext - objlist=$obj - func_len " $last_robj" - func_arith $len0 + $func_len_result - len=$func_arith_result - fi - done - # Handle the remaining objects by creating one last - # reloadable object file. All subsequent reloadable object - # files will link in the last one created. - test -z "$concat_cmds" || concat_cmds=$concat_cmds~ - eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\" - if test -n "$last_robj"; then - eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\" - fi - delfiles="$delfiles $output" - - else - output= - fi - - if ${skipped_export-false}; then - func_verbose "generating symbol list for \`$libname.la'" - export_symbols="$output_objdir/$libname.exp" - $opt_dry_run || $RM $export_symbols - libobjs=$output - # Append the command to create the export file. - test -z "$concat_cmds" || concat_cmds=$concat_cmds~ - eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" - if test -n "$last_robj"; then - eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" - fi - fi - - test -n "$save_libobjs" && - func_verbose "creating a temporary reloadable object file: $output" - - # Loop through the commands generated above and execute them. - save_ifs="$IFS"; IFS='~' - for cmd in $concat_cmds; do - IFS="$save_ifs" - $opt_silent || { - func_quote_for_expand "$cmd" - eval "func_echo $func_quote_for_expand_result" - } - $opt_dry_run || eval "$cmd" || { - lt_exit=$? - - # Restore the uninstalled library and exit - if test "$mode" = relink; then - ( cd "$output_objdir" && \ - $RM "${realname}T" && \ - $MV "${realname}U" "$realname" ) - fi - - exit $lt_exit - } - done - IFS="$save_ifs" - - if test -n "$export_symbols_regex" && ${skipped_export-false}; then - func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' - func_show_eval '$MV "${export_symbols}T" "$export_symbols"' - fi - fi - - if ${skipped_export-false}; then - if test -n "$export_symbols" && test -n "$include_expsyms"; then - tmp_export_symbols="$export_symbols" - test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" - $opt_dry_run || eval '$ECHO "X$include_expsyms" | $Xsed | $SP2NL >> "$tmp_export_symbols"' - fi - - if test -n "$orig_export_symbols"; then - # The given exports_symbols file has to be filtered, so filter it. - func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" - # FIXME: $output_objdir/$libname.filter potentially contains lots of - # 's' commands which not all seds can handle. GNU sed should be fine - # though. Also, the filter scales superlinearly with the number of - # global variables. join(1) would be nice here, but unfortunately - # isn't a blessed tool. - $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter - delfiles="$delfiles $export_symbols $output_objdir/$libname.filter" - export_symbols=$output_objdir/$libname.def - $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols - fi - fi - - libobjs=$output - # Restore the value of output. - output=$save_output - - if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then - eval libobjs=\"\$libobjs $whole_archive_flag_spec\" - test "X$libobjs" = "X " && libobjs= - fi - # Expand the library linking commands again to reset the - # value of $libobjs for piecewise linking. - - # Do each of the archive commands. - if test "$module" = yes && test -n "$module_cmds" ; then - if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then - cmds=$module_expsym_cmds - else - cmds=$module_cmds - fi - else - if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then - cmds=$archive_expsym_cmds - else - cmds=$archive_cmds - fi - fi - fi - - if test -n "$delfiles"; then - # Append the command to remove temporary files to $cmds. - eval cmds=\"\$cmds~\$RM $delfiles\" - fi - - # Add any objects from preloaded convenience libraries - if test -n "$dlprefiles"; then - gentop="$output_objdir/${outputname}x" - generated="$generated $gentop" - - func_extract_archives $gentop $dlprefiles - libobjs="$libobjs $func_extract_archives_result" - test "X$libobjs" = "X " && libobjs= - fi - - save_ifs="$IFS"; IFS='~' - for cmd in $cmds; do - IFS="$save_ifs" - eval cmd=\"$cmd\" - $opt_silent || { - func_quote_for_expand "$cmd" - eval "func_echo $func_quote_for_expand_result" - } - $opt_dry_run || eval "$cmd" || { - lt_exit=$? - - # Restore the uninstalled library and exit - if test "$mode" = relink; then - ( cd "$output_objdir" && \ - $RM "${realname}T" && \ - $MV "${realname}U" "$realname" ) - fi - - exit $lt_exit - } - done - IFS="$save_ifs" - - # Restore the uninstalled library and exit - if test "$mode" = relink; then - $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? - - if test -n "$convenience"; then - if test -z "$whole_archive_flag_spec"; then - func_show_eval '${RM}r "$gentop"' - fi - fi - - exit $EXIT_SUCCESS - fi - - # Create links to the real library. - for linkname in $linknames; do - if test "$realname" != "$linkname"; then - func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' - fi - done - - # If -module or -export-dynamic was specified, set the dlname. - if test "$module" = yes || test "$export_dynamic" = yes; then - # On all known operating systems, these are identical. - dlname="$soname" - fi - fi - ;; - - obj) - if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then - func_warning "\`-dlopen' is ignored for objects" - fi - - case " $deplibs" in - *\ -l* | *\ -L*) - func_warning "\`-l' and \`-L' are ignored for objects" ;; - esac - - test -n "$rpath" && \ - func_warning "\`-rpath' is ignored for objects" - - test -n "$xrpath" && \ - func_warning "\`-R' is ignored for objects" - - test -n "$vinfo" && \ - func_warning "\`-version-info' is ignored for objects" - - test -n "$release" && \ - func_warning "\`-release' is ignored for objects" - - case $output in - *.lo) - test -n "$objs$old_deplibs" && \ - func_fatal_error "cannot build library object \`$output' from non-libtool objects" - - libobj=$output - func_lo2o "$libobj" - obj=$func_lo2o_result - ;; - *) - libobj= - obj="$output" - ;; - esac - - # Delete the old objects. - $opt_dry_run || $RM $obj $libobj - - # Objects from convenience libraries. This assumes - # single-version convenience libraries. Whenever we create - # different ones for PIC/non-PIC, this we'll have to duplicate - # the extraction. - reload_conv_objs= - gentop= - # reload_cmds runs $LD directly, so let us get rid of - # -Wl from whole_archive_flag_spec and hope we can get by with - # turning comma into space.. - wl= - - if test -n "$convenience"; then - if test -n "$whole_archive_flag_spec"; then - eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" - reload_conv_objs=$reload_objs\ `$ECHO "X$tmp_whole_archive_flags" | $Xsed -e 's|,| |g'` - else - gentop="$output_objdir/${obj}x" - generated="$generated $gentop" - - func_extract_archives $gentop $convenience - reload_conv_objs="$reload_objs $func_extract_archives_result" - fi - fi - - # Create the old-style object. - reload_objs="$objs$old_deplibs "`$ECHO "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test - - output="$obj" - func_execute_cmds "$reload_cmds" 'exit $?' - - # Exit if we aren't doing a library object file. - if test -z "$libobj"; then - if test -n "$gentop"; then - func_show_eval '${RM}r "$gentop"' - fi - - exit $EXIT_SUCCESS - fi - - if test "$build_libtool_libs" != yes; then - if test -n "$gentop"; then - func_show_eval '${RM}r "$gentop"' - fi - - # Create an invalid libtool object if no PIC, so that we don't - # accidentally link it into a program. - # $show "echo timestamp > $libobj" - # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? - exit $EXIT_SUCCESS - fi - - if test -n "$pic_flag" || test "$pic_mode" != default; then - # Only do commands if we really have different PIC objects. - reload_objs="$libobjs $reload_conv_objs" - output="$libobj" - func_execute_cmds "$reload_cmds" 'exit $?' - fi - - if test -n "$gentop"; then - func_show_eval '${RM}r "$gentop"' - fi - - exit $EXIT_SUCCESS - ;; - - prog) - case $host in - *cygwin*) func_stripname '' '.exe' "$output" - output=$func_stripname_result.exe;; - esac - test -n "$vinfo" && \ - func_warning "\`-version-info' is ignored for programs" - - test -n "$release" && \ - func_warning "\`-release' is ignored for programs" - - test "$preload" = yes \ - && test "$dlopen_support" = unknown \ - && test "$dlopen_self" = unknown \ - && test "$dlopen_self_static" = unknown && \ - func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support." - - case $host in - *-*-rhapsody* | *-*-darwin1.[012]) - # On Rhapsody replace the C library is the System framework - compile_deplibs=`$ECHO "X $compile_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'` - finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'` - ;; - esac - - case $host in - *-*-darwin*) - # Don't allow lazy linking, it breaks C++ global constructors - # But is supposedly fixed on 10.4 or later (yay!). - if test "$tagname" = CXX ; then - case ${MACOSX_DEPLOYMENT_TARGET-10.0} in - 10.[0123]) - compile_command="$compile_command ${wl}-bind_at_load" - finalize_command="$finalize_command ${wl}-bind_at_load" - ;; - esac - fi - # Time to change all our "foo.ltframework" stuff back to "-framework foo" - compile_deplibs=`$ECHO "X $compile_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` - finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` - ;; - esac - - - # move library search paths that coincide with paths to not yet - # installed libraries to the beginning of the library search list - new_libs= - for path in $notinst_path; do - case " $new_libs " in - *" -L$path/$objdir "*) ;; - *) - case " $compile_deplibs " in - *" -L$path/$objdir "*) - new_libs="$new_libs -L$path/$objdir" ;; - esac - ;; - esac - done - for deplib in $compile_deplibs; do - case $deplib in - -L*) - case " $new_libs " in - *" $deplib "*) ;; - *) new_libs="$new_libs $deplib" ;; - esac - ;; - *) new_libs="$new_libs $deplib" ;; - esac - done - compile_deplibs="$new_libs" - - - compile_command="$compile_command $compile_deplibs" - finalize_command="$finalize_command $finalize_deplibs" - - if test -n "$rpath$xrpath"; then - # If the user specified any rpath flags, then add them. - for libdir in $rpath $xrpath; do - # This is the magic to use -rpath. - case "$finalize_rpath " in - *" $libdir "*) ;; - *) finalize_rpath="$finalize_rpath $libdir" ;; - esac - done - fi - - # Now hardcode the library paths - rpath= - hardcode_libdirs= - for libdir in $compile_rpath $finalize_rpath; do - if test -n "$hardcode_libdir_flag_spec"; then - if test -n "$hardcode_libdir_separator"; then - if test -z "$hardcode_libdirs"; then - hardcode_libdirs="$libdir" - else - # Just accumulate the unique libdirs. - case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in - *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) - ;; - *) - hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" - ;; - esac - fi - else - eval flag=\"$hardcode_libdir_flag_spec\" - rpath="$rpath $flag" - fi - elif test -n "$runpath_var"; then - case "$perm_rpath " in - *" $libdir "*) ;; - *) perm_rpath="$perm_rpath $libdir" ;; - esac - fi - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) - testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'` - case :$dllsearchpath: in - *":$libdir:"*) ;; - ::) dllsearchpath=$libdir;; - *) dllsearchpath="$dllsearchpath:$libdir";; - esac - case :$dllsearchpath: in - *":$testbindir:"*) ;; - ::) dllsearchpath=$testbindir;; - *) dllsearchpath="$dllsearchpath:$testbindir";; - esac - ;; - esac - done - # Substitute the hardcoded libdirs into the rpath. - if test -n "$hardcode_libdir_separator" && - test -n "$hardcode_libdirs"; then - libdir="$hardcode_libdirs" - eval rpath=\" $hardcode_libdir_flag_spec\" - fi - compile_rpath="$rpath" - - rpath= - hardcode_libdirs= - for libdir in $finalize_rpath; do - if test -n "$hardcode_libdir_flag_spec"; then - if test -n "$hardcode_libdir_separator"; then - if test -z "$hardcode_libdirs"; then - hardcode_libdirs="$libdir" - else - # Just accumulate the unique libdirs. - case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in - *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) - ;; - *) - hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" - ;; - esac - fi - else - eval flag=\"$hardcode_libdir_flag_spec\" - rpath="$rpath $flag" - fi - elif test -n "$runpath_var"; then - case "$finalize_perm_rpath " in - *" $libdir "*) ;; - *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;; - esac - fi - done - # Substitute the hardcoded libdirs into the rpath. - if test -n "$hardcode_libdir_separator" && - test -n "$hardcode_libdirs"; then - libdir="$hardcode_libdirs" - eval rpath=\" $hardcode_libdir_flag_spec\" - fi - finalize_rpath="$rpath" - - if test -n "$libobjs" && test "$build_old_libs" = yes; then - # Transform all the library objects into standard objects. - compile_command=`$ECHO "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` - finalize_command=`$ECHO "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` - fi - - func_generate_dlsyms "$outputname" "@PROGRAM@" "no" - - # template prelinking step - if test -n "$prelink_cmds"; then - func_execute_cmds "$prelink_cmds" 'exit $?' - fi - - wrappers_required=yes - case $host in - *cygwin* | *mingw* ) - if test "$build_libtool_libs" != yes; then - wrappers_required=no - fi - ;; - *cegcc) - # Disable wrappers for cegcc, we are cross compiling anyway. - wrappers_required=no - ;; - *) - if test "$need_relink" = no || test "$build_libtool_libs" != yes; then - wrappers_required=no - fi - ;; - esac - if test "$wrappers_required" = no; then - # Replace the output file specification. - compile_command=`$ECHO "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` - link_command="$compile_command$compile_rpath" - - # We have no uninstalled library dependencies, so finalize right now. - exit_status=0 - func_show_eval "$link_command" 'exit_status=$?' - - # Delete the generated files. - if test -f "$output_objdir/${outputname}S.${objext}"; then - func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"' - fi - - exit $exit_status - fi - - if test -n "$compile_shlibpath$finalize_shlibpath"; then - compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" - fi - if test -n "$finalize_shlibpath"; then - finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" - fi - - compile_var= - finalize_var= - if test -n "$runpath_var"; then - if test -n "$perm_rpath"; then - # We should set the runpath_var. - rpath= - for dir in $perm_rpath; do - rpath="$rpath$dir:" - done - compile_var="$runpath_var=\"$rpath\$$runpath_var\" " - fi - if test -n "$finalize_perm_rpath"; then - # We should set the runpath_var. - rpath= - for dir in $finalize_perm_rpath; do - rpath="$rpath$dir:" - done - finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " - fi - fi - - if test "$no_install" = yes; then - # We don't need to create a wrapper script. - link_command="$compile_var$compile_command$compile_rpath" - # Replace the output file specification. - link_command=`$ECHO "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` - # Delete the old output file. - $opt_dry_run || $RM $output - # Link the executable and exit - func_show_eval "$link_command" 'exit $?' - exit $EXIT_SUCCESS - fi - - if test "$hardcode_action" = relink; then - # Fast installation is not supported - link_command="$compile_var$compile_command$compile_rpath" - relink_command="$finalize_var$finalize_command$finalize_rpath" - - func_warning "this platform does not like uninstalled shared libraries" - func_warning "\`$output' will be relinked during installation" - else - if test "$fast_install" != no; then - link_command="$finalize_var$compile_command$finalize_rpath" - if test "$fast_install" = yes; then - relink_command=`$ECHO "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'` - else - # fast_install is set to needless - relink_command= - fi - else - link_command="$compile_var$compile_command$compile_rpath" - relink_command="$finalize_var$finalize_command$finalize_rpath" - fi - fi - - # Replace the output file specification. - link_command=`$ECHO "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` - - # Delete the old output files. - $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname - - func_show_eval "$link_command" 'exit $?' - - # Now create the wrapper script. - func_verbose "creating $output" - - # Quote the relink command for shipping. - if test -n "$relink_command"; then - # Preserve any variables that may affect compiler behavior - for var in $variables_saved_for_relink; do - if eval test -z \"\${$var+set}\"; then - relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" - elif eval var_value=\$$var; test -z "$var_value"; then - relink_command="$var=; export $var; $relink_command" - else - func_quote_for_eval "$var_value" - relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" - fi - done - relink_command="(cd `pwd`; $relink_command)" - relink_command=`$ECHO "X$relink_command" | $Xsed -e "$sed_quote_subst"` - fi - - # Quote $ECHO for shipping. - if test "X$ECHO" = "X$SHELL $progpath --fallback-echo"; then - case $progpath in - [\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $progpath --fallback-echo";; - *) qecho="$SHELL `pwd`/$progpath --fallback-echo";; - esac - qecho=`$ECHO "X$qecho" | $Xsed -e "$sed_quote_subst"` - else - qecho=`$ECHO "X$ECHO" | $Xsed -e "$sed_quote_subst"` - fi - - # Only actually do things if not in dry run mode. - $opt_dry_run || { - # win32 will think the script is a binary if it has - # a .exe suffix, so we strip it off here. - case $output in - *.exe) func_stripname '' '.exe' "$output" - output=$func_stripname_result ;; - esac - # test for cygwin because mv fails w/o .exe extensions - case $host in - *cygwin*) - exeext=.exe - func_stripname '' '.exe' "$outputname" - outputname=$func_stripname_result ;; - *) exeext= ;; - esac - case $host in - *cygwin* | *mingw* ) - func_dirname_and_basename "$output" "" "." - output_name=$func_basename_result - output_path=$func_dirname_result - cwrappersource="$output_path/$objdir/lt-$output_name.c" - cwrapper="$output_path/$output_name.exe" - $RM $cwrappersource $cwrapper - trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 - - func_emit_cwrapperexe_src > $cwrappersource - - # The wrapper executable is built using the $host compiler, - # because it contains $host paths and files. If cross- - # compiling, it, like the target executable, must be - # executed on the $host or under an emulation environment. - $opt_dry_run || { - $LTCC $LTCFLAGS -o $cwrapper $cwrappersource - $STRIP $cwrapper - } - - # Now, create the wrapper script for func_source use: - func_ltwrapper_scriptname $cwrapper - $RM $func_ltwrapper_scriptname_result - trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 - $opt_dry_run || { - # note: this script will not be executed, so do not chmod. - if test "x$build" = "x$host" ; then - $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result - else - func_emit_wrapper no > $func_ltwrapper_scriptname_result - fi - } - ;; - * ) - $RM $output - trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 - - func_emit_wrapper no > $output - chmod +x $output - ;; - esac - } - exit $EXIT_SUCCESS - ;; - esac - - # See if we need to build an old-fashioned archive. - for oldlib in $oldlibs; do - - if test "$build_libtool_libs" = convenience; then - oldobjs="$libobjs_save $symfileobj" - addlibs="$convenience" - build_libtool_libs=no - else - if test "$build_libtool_libs" = module; then - oldobjs="$libobjs_save" - build_libtool_libs=no - else - oldobjs="$old_deplibs $non_pic_objects" - if test "$preload" = yes && test -f "$symfileobj"; then - oldobjs="$oldobjs $symfileobj" - fi - fi - addlibs="$old_convenience" - fi - - if test -n "$addlibs"; then - gentop="$output_objdir/${outputname}x" - generated="$generated $gentop" - - func_extract_archives $gentop $addlibs - oldobjs="$oldobjs $func_extract_archives_result" - fi - - # Do each command in the archive commands. - if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then - cmds=$old_archive_from_new_cmds - else - - # Add any objects from preloaded convenience libraries - if test -n "$dlprefiles"; then - gentop="$output_objdir/${outputname}x" - generated="$generated $gentop" - - func_extract_archives $gentop $dlprefiles - oldobjs="$oldobjs $func_extract_archives_result" - fi - - # POSIX demands no paths to be encoded in archives. We have - # to avoid creating archives with duplicate basenames if we - # might have to extract them afterwards, e.g., when creating a - # static archive out of a convenience library, or when linking - # the entirety of a libtool archive into another (currently - # not supported by libtool). - if (for obj in $oldobjs - do - func_basename "$obj" - $ECHO "$func_basename_result" - done | sort | sort -uc >/dev/null 2>&1); then - : - else - $ECHO "copying selected object files to avoid basename conflicts..." - gentop="$output_objdir/${outputname}x" - generated="$generated $gentop" - func_mkdir_p "$gentop" - save_oldobjs=$oldobjs - oldobjs= - counter=1 - for obj in $save_oldobjs - do - func_basename "$obj" - objbase="$func_basename_result" - case " $oldobjs " in - " ") oldobjs=$obj ;; - *[\ /]"$objbase "*) - while :; do - # Make sure we don't pick an alternate name that also - # overlaps. - newobj=lt$counter-$objbase - func_arith $counter + 1 - counter=$func_arith_result - case " $oldobjs " in - *[\ /]"$newobj "*) ;; - *) if test ! -f "$gentop/$newobj"; then break; fi ;; - esac - done - func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" - oldobjs="$oldobjs $gentop/$newobj" - ;; - *) oldobjs="$oldobjs $obj" ;; - esac - done - fi - eval cmds=\"$old_archive_cmds\" - - func_len " $cmds" - len=$func_len_result - if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then - cmds=$old_archive_cmds - else - # the command line is too long to link in one step, link in parts - func_verbose "using piecewise archive linking..." - save_RANLIB=$RANLIB - RANLIB=: - objlist= - concat_cmds= - save_oldobjs=$oldobjs - oldobjs= - # Is there a better way of finding the last object in the list? - for obj in $save_oldobjs - do - last_oldobj=$obj - done - eval test_cmds=\"$old_archive_cmds\" - func_len " $test_cmds" - len0=$func_len_result - len=$len0 - for obj in $save_oldobjs - do - func_len " $obj" - func_arith $len + $func_len_result - len=$func_arith_result - func_append objlist " $obj" - if test "$len" -lt "$max_cmd_len"; then - : - else - # the above command should be used before it gets too long - oldobjs=$objlist - if test "$obj" = "$last_oldobj" ; then - RANLIB=$save_RANLIB - fi - test -z "$concat_cmds" || concat_cmds=$concat_cmds~ - eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" - objlist= - len=$len0 - fi - done - RANLIB=$save_RANLIB - oldobjs=$objlist - if test "X$oldobjs" = "X" ; then - eval cmds=\"\$concat_cmds\" - else - eval cmds=\"\$concat_cmds~\$old_archive_cmds\" - fi - fi - fi - func_execute_cmds "$cmds" 'exit $?' - done - - test -n "$generated" && \ - func_show_eval "${RM}r$generated" - - # Now create the libtool archive. - case $output in - *.la) - old_library= - test "$build_old_libs" = yes && old_library="$libname.$libext" - func_verbose "creating $output" - - # Preserve any variables that may affect compiler behavior - for var in $variables_saved_for_relink; do - if eval test -z \"\${$var+set}\"; then - relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" - elif eval var_value=\$$var; test -z "$var_value"; then - relink_command="$var=; export $var; $relink_command" - else - func_quote_for_eval "$var_value" - relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" - fi - done - # Quote the link command for shipping. - relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" - relink_command=`$ECHO "X$relink_command" | $Xsed -e "$sed_quote_subst"` - if test "$hardcode_automatic" = yes ; then - relink_command= - fi - - # Only create the output if not a dry run. - $opt_dry_run || { - for installed in no yes; do - if test "$installed" = yes; then - if test -z "$install_libdir"; then - break - fi - output="$output_objdir/$outputname"i - # Replace all uninstalled libtool libraries with the installed ones - newdependency_libs= - for deplib in $dependency_libs; do - case $deplib in - *.la) - func_basename "$deplib" - name="$func_basename_result" - eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` - test -z "$libdir" && \ - func_fatal_error "\`$deplib' is not a valid libtool archive" - newdependency_libs="$newdependency_libs $libdir/$name" - ;; - *) newdependency_libs="$newdependency_libs $deplib" ;; - esac - done - dependency_libs="$newdependency_libs" - newdlfiles= - - for lib in $dlfiles; do - case $lib in - *.la) - func_basename "$lib" - name="$func_basename_result" - eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` - test -z "$libdir" && \ - func_fatal_error "\`$lib' is not a valid libtool archive" - newdlfiles="$newdlfiles $libdir/$name" - ;; - *) newdlfiles="$newdlfiles $lib" ;; - esac - done - dlfiles="$newdlfiles" - newdlprefiles= - for lib in $dlprefiles; do - case $lib in - *.la) - # Only pass preopened files to the pseudo-archive (for - # eventual linking with the app. that links it) if we - # didn't already link the preopened objects directly into - # the library: - func_basename "$lib" - name="$func_basename_result" - eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` - test -z "$libdir" && \ - func_fatal_error "\`$lib' is not a valid libtool archive" - newdlprefiles="$newdlprefiles $libdir/$name" - ;; - esac - done - dlprefiles="$newdlprefiles" - else - newdlfiles= - for lib in $dlfiles; do - case $lib in - [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; - *) abs=`pwd`"/$lib" ;; - esac - newdlfiles="$newdlfiles $abs" - done - dlfiles="$newdlfiles" - newdlprefiles= - for lib in $dlprefiles; do - case $lib in - [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; - *) abs=`pwd`"/$lib" ;; - esac - newdlprefiles="$newdlprefiles $abs" - done - dlprefiles="$newdlprefiles" - fi - $RM $output - # place dlname in correct position for cygwin - tdlname=$dlname - case $host,$output,$installed,$module,$dlname in - *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;; - esac - $ECHO > $output "\ -# $outputname - a libtool library file -# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION -# -# Please DO NOT delete this file! -# It is necessary for linking the library. - -# The name that we can dlopen(3). -dlname='$tdlname' - -# Names of this library. -library_names='$library_names' - -# The name of the static archive. -old_library='$old_library' - -# Linker flags that can not go in dependency_libs. -inherited_linker_flags='$new_inherited_linker_flags' - -# Libraries that this one depends upon. -dependency_libs='$dependency_libs' - -# Names of additional weak libraries provided by this library -weak_library_names='$weak_libs' - -# Version information for $libname. -current=$current -age=$age -revision=$revision - -# Is this an already installed library? -installed=$installed - -# Should we warn about portability when linking against -modules? -shouldnotlink=$module - -# Files to dlopen/dlpreopen -dlopen='$dlfiles' -dlpreopen='$dlprefiles' - -# Directory that this library needs to be installed in: -libdir='$install_libdir'" - if test "$installed" = no && test "$need_relink" = yes; then - $ECHO >> $output "\ -relink_command=\"$relink_command\"" - fi - done - } - - # Do a symbolic link so that the libtool archive can be found in - # LD_LIBRARY_PATH before the program is installed. - func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' - ;; - esac - exit $EXIT_SUCCESS -} - -{ test "$mode" = link || test "$mode" = relink; } && - func_mode_link ${1+"$@"} - - -# func_mode_uninstall arg... -func_mode_uninstall () -{ - $opt_debug - RM="$nonopt" - files= - rmforce= - exit_status=0 - - # This variable tells wrapper scripts just to set variables rather - # than running their programs. - libtool_install_magic="$magic" - - for arg - do - case $arg in - -f) RM="$RM $arg"; rmforce=yes ;; - -*) RM="$RM $arg" ;; - *) files="$files $arg" ;; - esac - done - - test -z "$RM" && \ - func_fatal_help "you must specify an RM program" - - rmdirs= - - origobjdir="$objdir" - for file in $files; do - func_dirname "$file" "" "." - dir="$func_dirname_result" - if test "X$dir" = X.; then - objdir="$origobjdir" - else - objdir="$dir/$origobjdir" - fi - func_basename "$file" - name="$func_basename_result" - test "$mode" = uninstall && objdir="$dir" - - # Remember objdir for removal later, being careful to avoid duplicates - if test "$mode" = clean; then - case " $rmdirs " in - *" $objdir "*) ;; - *) rmdirs="$rmdirs $objdir" ;; - esac - fi - - # Don't error if the file doesn't exist and rm -f was used. - if { test -L "$file"; } >/dev/null 2>&1 || - { test -h "$file"; } >/dev/null 2>&1 || - test -f "$file"; then - : - elif test -d "$file"; then - exit_status=1 - continue - elif test "$rmforce" = yes; then - continue - fi - - rmfiles="$file" - - case $name in - *.la) - # Possibly a libtool archive, so verify it. - if func_lalib_p "$file"; then - func_source $dir/$name - - # Delete the libtool libraries and symlinks. - for n in $library_names; do - rmfiles="$rmfiles $objdir/$n" - done - test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library" - - case "$mode" in - clean) - case " $library_names " in - # " " in the beginning catches empty $dlname - *" $dlname "*) ;; - *) rmfiles="$rmfiles $objdir/$dlname" ;; - esac - test -n "$libdir" && rmfiles="$rmfiles $objdir/$name $objdir/${name}i" - ;; - uninstall) - if test -n "$library_names"; then - # Do each command in the postuninstall commands. - func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' - fi - - if test -n "$old_library"; then - # Do each command in the old_postuninstall commands. - func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' - fi - # FIXME: should reinstall the best remaining shared library. - ;; - esac - fi - ;; - - *.lo) - # Possibly a libtool object, so verify it. - if func_lalib_p "$file"; then - - # Read the .lo file - func_source $dir/$name - - # Add PIC object to the list of files to remove. - if test -n "$pic_object" && - test "$pic_object" != none; then - rmfiles="$rmfiles $dir/$pic_object" - fi - - # Add non-PIC object to the list of files to remove. - if test -n "$non_pic_object" && - test "$non_pic_object" != none; then - rmfiles="$rmfiles $dir/$non_pic_object" - fi - fi - ;; - - *) - if test "$mode" = clean ; then - noexename=$name - case $file in - *.exe) - func_stripname '' '.exe' "$file" - file=$func_stripname_result - func_stripname '' '.exe' "$name" - noexename=$func_stripname_result - # $file with .exe has already been added to rmfiles, - # add $file without .exe - rmfiles="$rmfiles $file" - ;; - esac - # Do a test to see if this is a libtool program. - if func_ltwrapper_p "$file"; then - if func_ltwrapper_executable_p "$file"; then - func_ltwrapper_scriptname "$file" - relink_command= - func_source $func_ltwrapper_scriptname_result - rmfiles="$rmfiles $func_ltwrapper_scriptname_result" - else - relink_command= - func_source $dir/$noexename - fi - - # note $name still contains .exe if it was in $file originally - # as does the version of $file that was added into $rmfiles - rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}" - if test "$fast_install" = yes && test -n "$relink_command"; then - rmfiles="$rmfiles $objdir/lt-$name" - fi - if test "X$noexename" != "X$name" ; then - rmfiles="$rmfiles $objdir/lt-${noexename}.c" - fi - fi - fi - ;; - esac - func_show_eval "$RM $rmfiles" 'exit_status=1' - done - objdir="$origobjdir" - - # Try to remove the ${objdir}s in the directories where we deleted files - for dir in $rmdirs; do - if test -d "$dir"; then - func_show_eval "rmdir $dir >/dev/null 2>&1" - fi - done - - exit $exit_status -} - -{ test "$mode" = uninstall || test "$mode" = clean; } && - func_mode_uninstall ${1+"$@"} - -test -z "$mode" && { - help="$generic_help" - func_fatal_help "you must specify a MODE" -} - -test -z "$exec_cmd" && \ - func_fatal_help "invalid operation mode \`$mode'" - -if test -n "$exec_cmd"; then - eval exec "$exec_cmd" - exit $EXIT_FAILURE -fi - -exit $exit_status - - -# The TAGs below are defined such that we never get into a situation -# in which we disable both kinds of libraries. Given conflicting -# choices, we go for a static library, that is the most portable, -# since we can't tell whether shared libraries were disabled because -# the user asked for that or because the platform doesn't support -# them. This is particularly important on AIX, because we don't -# support having both static and shared libraries enabled at the same -# time on that platform, so we default to a shared-only configuration. -# If a disable-shared tag is given, we'll fallback to a static-only -# configuration. But we'll never go from static-only to shared-only. - -# ### BEGIN LIBTOOL TAG CONFIG: disable-shared -build_libtool_libs=no -build_old_libs=yes -# ### END LIBTOOL TAG CONFIG: disable-shared - -# ### BEGIN LIBTOOL TAG CONFIG: disable-static -build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` -# ### END LIBTOOL TAG CONFIG: disable-static - -# Local Variables: -# mode:shell-script -# sh-indentation:2 -# End: -# vi:sw=2 - diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/login.radius/Makefile b/openair3/PMIPv6/freeradius-client-1.1.6/login.radius/Makefile deleted file mode 100644 index 61300bc9f3..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/login.radius/Makefile +++ /dev/null @@ -1,637 +0,0 @@ -# Makefile.in generated by automake 1.11.1 from Makefile.am. -# login.radius/Makefile. Generated from Makefile.in by configure. - -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, -# Inc. -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - - - -# -# $Id: Makefile.am,v 1.1.1.1 2003/12/02 10:39:23 sobomax Exp $ -# -# Copyright (C) 1997 Lars Fenneberg -# -# See the file COPYRIGHT for the respective terms and conditions. -# If the file is missing contact me at lf@elemental.net -# and I'll send you a copy. -# -# - - -pkgdatadir = $(datadir)/radiusclient -pkgincludedir = $(includedir)/radiusclient -pkglibdir = $(libdir)/radiusclient -pkglibexecdir = $(libexecdir)/radiusclient -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = i686-pc-linux-gnu -host_triplet = i686-pc-linux-gnu -target_triplet = i686-pc-linux-gnu -subdir = login.radius -DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/configure.in -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs -CONFIG_HEADER = $(top_builddir)/config.h -CONFIG_CLEAN_FILES = -CONFIG_CLEAN_VPATH_FILES = -am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; -am__vpath_adj = case $$p in \ - $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ - *) f=$$p;; \ - esac; -am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; -am__install_max = 40 -am__nobase_strip_setup = \ - srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` -am__nobase_strip = \ - for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" -am__nobase_list = $(am__nobase_strip_setup); \ - for p in $$list; do echo "$$p $$p"; done | \ - sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ - $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ - if (++n[$$2] == $(am__install_max)) \ - { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ - END { for (dir in files) print dir, files[dir] }' -am__base_list = \ - sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ - sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' -am__installdirs = "$(DESTDIR)$(sbindir)" -SCRIPTS = $(sbin_SCRIPTS) -SOURCES = -DIST_SOURCES = -RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ - html-recursive info-recursive install-data-recursive \ - install-dvi-recursive install-exec-recursive \ - install-html-recursive install-info-recursive \ - install-pdf-recursive install-ps-recursive install-recursive \ - installcheck-recursive installdirs-recursive pdf-recursive \ - ps-recursive uninstall-recursive -RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ - distclean-recursive maintainer-clean-recursive -AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ - $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ - distdir -ETAGS = etags -CTAGS = ctags -DIST_SUBDIRS = $(SUBDIRS) -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -am__relativize = \ - dir0=`pwd`; \ - sed_first='s,^\([^/]*\)/.*$$,\1,'; \ - sed_rest='s,^[^/]*/*,,'; \ - sed_last='s,^.*/\([^/]*\)$$,\1,'; \ - sed_butlast='s,/*[^/]*$$,,'; \ - while test -n "$$dir1"; do \ - first=`echo "$$dir1" | sed -e "$$sed_first"`; \ - if test "$$first" != "."; then \ - if test "$$first" = ".."; then \ - dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ - dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ - else \ - first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ - if test "$$first2" = "$$first"; then \ - dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ - else \ - dir2="../$$dir2"; \ - fi; \ - dir0="$$dir0"/"$$first"; \ - fi; \ - fi; \ - dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ - done; \ - reldir="$$dir2" -ACLOCAL = ${SHELL} /usr/local/src/freeradius-client-1.1.6/missing --run aclocal-1.11 -ALLOCA = -AMTAR = ${SHELL} /usr/local/src/freeradius-client-1.1.6/missing --run tar -AR = /usr/bin/ar -AUTOCONF = ${SHELL} /usr/local/src/freeradius-client-1.1.6/missing --run autoconf -AUTOHEADER = ${SHELL} /usr/local/src/freeradius-client-1.1.6/missing --run autoheader -AUTOMAKE = ${SHELL} /usr/local/src/freeradius-client-1.1.6/missing --run automake-1.11 -AWK = gawk -CC = gcc -CCDEPMODE = depmode=gcc3 -CFLAGS = -g -O2 -CPP = gcc -E -CPPFLAGS = -CYGPATH_W = echo -DEFS = -DHAVE_CONFIG_H -DEPDIR = .deps -DSYMUTIL = -DUMPBIN = -ECHO_C = -ECHO_N = -n -ECHO_T = -EGREP = /bin/grep -E -EXEEXT = -FGREP = /bin/grep -F -GREP = /bin/grep -INSTALL = /usr/bin/install -c -INSTALL_DATA = ${INSTALL} -m 644 -INSTALL_PROGRAM = ${INSTALL} -INSTALL_SCRIPT = ${INSTALL} -INSTALL_STRIP_PROGRAM = $(install_sh) -c -s -LD = /usr/bin/ld -LDFLAGS = -LIBOBJS = -LIBS = -lcrypt -lnsl -LIBTOOL = $(SHELL) $(top_builddir)/libtool -LIBVERSION = 2:0:0 -LIPO = -LN_S = ln -s -LTLIBOBJS = -MAINT = # -MAKEINFO = ${SHELL} /usr/local/src/freeradius-client-1.1.6/missing --run makeinfo -MKDIR_P = /bin/mkdir -p -NM = /usr/bin/nm -B -NMEDIT = -OBJDUMP = objdump -OBJEXT = o -OTOOL = -OTOOL64 = -PACKAGE = radiusclient -PACKAGE_BUGREPORT = -PACKAGE_NAME = -PACKAGE_STRING = -PACKAGE_TARNAME = -PACKAGE_URL = -PACKAGE_VERSION = -PATH_SEPARATOR = : -RANLIB = ranlib -RC_LOG_FACILITY = LOG_DAEMON -RC_SECURE_PATH = /bin:/usr/bin:/usr/local/bin -SED = /bin/sed -SET_MAKE = -SHELL = /bin/bash -STRIP = strip -VERSION = 1.1.6 -abs_builddir = /usr/local/src/freeradius-client-1.1.6/login.radius -abs_srcdir = /usr/local/src/freeradius-client-1.1.6/login.radius -abs_top_builddir = /usr/local/src/freeradius-client-1.1.6 -abs_top_srcdir = /usr/local/src/freeradius-client-1.1.6 -ac_ct_CC = gcc -ac_ct_DUMPBIN = -am__include = include -am__leading_dot = . -am__quote = -am__tar = ${AMTAR} chof - "$$tardir" -am__untar = ${AMTAR} xf - -bindir = ${exec_prefix}/bin -build = i686-pc-linux-gnu -build_alias = -build_cpu = i686 -build_os = linux-gnu -build_vendor = pc -builddir = . -datadir = ${datarootdir} -datarootdir = ${prefix}/share -docdir = ${datarootdir}/doc/${PACKAGE} -dvidir = ${docdir} -exec_prefix = ${prefix} -host = i686-pc-linux-gnu -host_alias = -host_cpu = i686 -host_os = linux-gnu -host_vendor = pc -htmldir = ${docdir} -includedir = ${prefix}/include -infodir = ${datarootdir}/info -install_sh = ${SHELL} /usr/local/src/freeradius-client-1.1.6/install-sh -libdir = ${exec_prefix}/lib -libexecdir = ${exec_prefix}/libexec -localedir = ${datarootdir}/locale -localstatedir = ${prefix}/var -lt_ECHO = echo -mandir = ${datarootdir}/man -mkdir_p = /bin/mkdir -p -oldincludedir = /usr/include -pdfdir = ${docdir} -pkgsysconfdir = ${prefix}/etc/radiusclient -prefix = /usr/local -program_transform_name = s,x,x, -psdir = ${docdir} -sbindir = ${exec_prefix}/sbin -sharedstatedir = ${prefix}/com -srcdir = . -sysconfdir = ${prefix}/etc -target = i686-pc-linux-gnu -target_alias = -target_cpu = i686 -target_os = linux-gnu -target_vendor = pc -top_build_prefix = ../ -top_builddir = .. -top_srcdir = .. -AUTOMAKE_OPTIONS = foreign -SUBDIRS = migs -EXTRA_DIST = README login.radius -sbin_SCRIPTS = login.radius -all: all-recursive - -.SUFFIXES: -$(srcdir)/Makefile.in: # $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ - && { if test -f $@; then exit 0; else break; fi; }; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign login.radius/Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --foreign login.radius/Makefile -.PRECIOUS: Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: # $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): # $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(am__aclocal_m4_deps): -install-sbinSCRIPTS: $(sbin_SCRIPTS) - @$(NORMAL_INSTALL) - test -z "$(sbindir)" || $(MKDIR_P) "$(DESTDIR)$(sbindir)" - @list='$(sbin_SCRIPTS)'; test -n "$(sbindir)" || list=; \ - for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \ - done | \ - sed -e 'p;s,.*/,,;n' \ - -e 'h;s|.*|.|' \ - -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \ - $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \ - { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ - if ($$2 == $$4) { files[d] = files[d] " " $$1; \ - if (++n[d] == $(am__install_max)) { \ - print "f", d, files[d]; n[d] = 0; files[d] = "" } } \ - else { print "f", d "/" $$4, $$1 } } \ - END { for (d in files) print "f", d, files[d] }' | \ - while read type dir files; do \ - if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ - test -z "$$files" || { \ - echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(sbindir)$$dir'"; \ - $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(sbindir)$$dir" || exit $$?; \ - } \ - ; done - -uninstall-sbinSCRIPTS: - @$(NORMAL_UNINSTALL) - @list='$(sbin_SCRIPTS)'; test -n "$(sbindir)" || exit 0; \ - files=`for p in $$list; do echo "$$p"; done | \ - sed -e 's,.*/,,;$(transform)'`; \ - test -n "$$list" || exit 0; \ - echo " ( cd '$(DESTDIR)$(sbindir)' && rm -f" $$files ")"; \ - cd "$(DESTDIR)$(sbindir)" && rm -f $$files - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs - -# This directory's subdirectories are mostly independent; you can cd -# into them and run `make' without going through this Makefile. -# To change the values of `make' variables: instead of editing Makefiles, -# (1) if the variable is set in `config.status', edit `config.status' -# (which will cause the Makefiles to be regenerated when you run `make'); -# (2) otherwise, pass the desired values on the `make' command line. -$(RECURSIVE_TARGETS): - @fail= failcom='exit 1'; \ - for f in x $$MAKEFLAGS; do \ - case $$f in \ - *=* | --[!k]*);; \ - *k*) failcom='fail=yes';; \ - esac; \ - done; \ - dot_seen=no; \ - target=`echo $@ | sed s/-recursive//`; \ - list='$(SUBDIRS)'; for subdir in $$list; do \ - echo "Making $$target in $$subdir"; \ - if test "$$subdir" = "."; then \ - dot_seen=yes; \ - local_target="$$target-am"; \ - else \ - local_target="$$target"; \ - fi; \ - ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ - || eval $$failcom; \ - done; \ - if test "$$dot_seen" = "no"; then \ - $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ - fi; test -z "$$fail" - -$(RECURSIVE_CLEAN_TARGETS): - @fail= failcom='exit 1'; \ - for f in x $$MAKEFLAGS; do \ - case $$f in \ - *=* | --[!k]*);; \ - *k*) failcom='fail=yes';; \ - esac; \ - done; \ - dot_seen=no; \ - case "$@" in \ - distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ - *) list='$(SUBDIRS)' ;; \ - esac; \ - rev=''; for subdir in $$list; do \ - if test "$$subdir" = "."; then :; else \ - rev="$$subdir $$rev"; \ - fi; \ - done; \ - rev="$$rev ."; \ - target=`echo $@ | sed s/-recursive//`; \ - for subdir in $$rev; do \ - echo "Making $$target in $$subdir"; \ - if test "$$subdir" = "."; then \ - local_target="$$target-am"; \ - else \ - local_target="$$target"; \ - fi; \ - ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ - || eval $$failcom; \ - done && test -z "$$fail" -tags-recursive: - list='$(SUBDIRS)'; for subdir in $$list; do \ - test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ - done -ctags-recursive: - list='$(SUBDIRS)'; for subdir in $$list; do \ - test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ - done - -ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - mkid -fID $$unique -tags: TAGS - -TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - set x; \ - here=`pwd`; \ - if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ - include_option=--etags-include; \ - empty_fix=.; \ - else \ - include_option=--include; \ - empty_fix=; \ - fi; \ - list='$(SUBDIRS)'; for subdir in $$list; do \ - if test "$$subdir" = .; then :; else \ - test ! -f $$subdir/TAGS || \ - set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ - fi; \ - done; \ - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - shift; \ - if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ - test -n "$$unique" || unique=$$empty_fix; \ - if test $$# -gt 0; then \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - "$$@" $$unique; \ - else \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$unique; \ - fi; \ - fi -ctags: CTAGS -CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - test -z "$(CTAGS_ARGS)$$unique" \ - || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$unique - -GTAGS: - here=`$(am__cd) $(top_builddir) && pwd` \ - && $(am__cd) $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) "$$here" - -distclean-tags: - -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - -distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - list='$(DISTFILES)'; \ - dist_files=`for file in $$list; do echo $$file; done | \ - sed -e "s|^$$srcdirstrip/||;t" \ - -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ - case $$dist_files in \ - */*) $(MKDIR_P) `echo "$$dist_files" | \ - sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ - sort -u` ;; \ - esac; \ - for file in $$dist_files; do \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - if test -d $$d/$$file; then \ - dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test -d "$(distdir)/$$file"; then \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ - else \ - test -f "$(distdir)/$$file" \ - || cp -p $$d/$$file "$(distdir)/$$file" \ - || exit 1; \ - fi; \ - done - @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ - if test "$$subdir" = .; then :; else \ - test -d "$(distdir)/$$subdir" \ - || $(MKDIR_P) "$(distdir)/$$subdir" \ - || exit 1; \ - fi; \ - done - @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ - if test "$$subdir" = .; then :; else \ - dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ - $(am__relativize); \ - new_distdir=$$reldir; \ - dir1=$$subdir; dir2="$(top_distdir)"; \ - $(am__relativize); \ - new_top_distdir=$$reldir; \ - echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ - echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ - ($(am__cd) $$subdir && \ - $(MAKE) $(AM_MAKEFLAGS) \ - top_distdir="$$new_top_distdir" \ - distdir="$$new_distdir" \ - am__remove_distdir=: \ - am__skip_length_check=: \ - am__skip_mode_fix=: \ - distdir) \ - || exit 1; \ - fi; \ - done -check-am: all-am -check: check-recursive -all-am: Makefile $(SCRIPTS) -installdirs: installdirs-recursive -installdirs-am: - for dir in "$(DESTDIR)$(sbindir)"; do \ - test -z "$$dir" || $(MKDIR_P) "$$dir"; \ - done -install: install-recursive -install-exec: install-exec-recursive -install-data: install-data-recursive -uninstall: uninstall-recursive - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-recursive -install-strip: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install -mostlyclean-generic: - -clean-generic: - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." -clean: clean-recursive - -clean-am: clean-generic clean-libtool mostlyclean-am - -distclean: distclean-recursive - -rm -f Makefile -distclean-am: clean-am distclean-generic distclean-tags - -dvi: dvi-recursive - -dvi-am: - -html: html-recursive - -html-am: - -info: info-recursive - -info-am: - -install-data-am: - -install-dvi: install-dvi-recursive - -install-dvi-am: - -install-exec-am: install-sbinSCRIPTS - -install-html: install-html-recursive - -install-html-am: - -install-info: install-info-recursive - -install-info-am: - -install-man: - -install-pdf: install-pdf-recursive - -install-pdf-am: - -install-ps: install-ps-recursive - -install-ps-am: - -installcheck-am: - -maintainer-clean: maintainer-clean-recursive - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-recursive - -mostlyclean-am: mostlyclean-generic mostlyclean-libtool - -pdf: pdf-recursive - -pdf-am: - -ps: ps-recursive - -ps-am: - -uninstall-am: uninstall-sbinSCRIPTS - -.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ - install-am install-strip tags-recursive - -.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ - all all-am check check-am clean clean-generic clean-libtool \ - ctags ctags-recursive distclean distclean-generic \ - distclean-libtool distclean-tags distdir dvi dvi-am html \ - html-am info info-am install install-am install-data \ - install-data-am install-dvi install-dvi-am install-exec \ - install-exec-am install-html install-html-am install-info \ - install-info-am install-man install-pdf install-pdf-am \ - install-ps install-ps-am install-sbinSCRIPTS install-strip \ - installcheck installcheck-am installdirs installdirs-am \ - maintainer-clean maintainer-clean-generic mostlyclean \ - mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ - tags tags-recursive uninstall uninstall-am \ - uninstall-sbinSCRIPTS - - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/login.radius/Makefile.am b/openair3/PMIPv6/freeradius-client-1.1.6/login.radius/Makefile.am deleted file mode 100644 index b5e985e605..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/login.radius/Makefile.am +++ /dev/null @@ -1,18 +0,0 @@ -# -# $Id: Makefile.am,v 1.1.1.1 2003/12/02 10:39:23 sobomax Exp $ -# -# Copyright (C) 1997 Lars Fenneberg -# -# See the file COPYRIGHT for the respective terms and conditions. -# If the file is missing contact me at lf@elemental.net -# and I'll send you a copy. -# -# - -AUTOMAKE_OPTIONS = foreign - -SUBDIRS = migs - -EXTRA_DIST = README login.radius - -sbin_SCRIPTS = login.radius diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/login.radius/Makefile.in b/openair3/PMIPv6/freeradius-client-1.1.6/login.radius/Makefile.in deleted file mode 100644 index 681e677b4f..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/login.radius/Makefile.in +++ /dev/null @@ -1,637 +0,0 @@ -# Makefile.in generated by automake 1.11.1 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, -# Inc. -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -@SET_MAKE@ - -# -# $Id: Makefile.am,v 1.1.1.1 2003/12/02 10:39:23 sobomax Exp $ -# -# Copyright (C) 1997 Lars Fenneberg -# -# See the file COPYRIGHT for the respective terms and conditions. -# If the file is missing contact me at lf@elemental.net -# and I'll send you a copy. -# -# - -VPATH = @srcdir@ -pkgdatadir = $(datadir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ -pkglibexecdir = $(libexecdir)/@PACKAGE@ -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = @build@ -host_triplet = @host@ -target_triplet = @target@ -subdir = login.radius -DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/configure.in -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs -CONFIG_HEADER = $(top_builddir)/config.h -CONFIG_CLEAN_FILES = -CONFIG_CLEAN_VPATH_FILES = -am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; -am__vpath_adj = case $$p in \ - $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ - *) f=$$p;; \ - esac; -am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; -am__install_max = 40 -am__nobase_strip_setup = \ - srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` -am__nobase_strip = \ - for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" -am__nobase_list = $(am__nobase_strip_setup); \ - for p in $$list; do echo "$$p $$p"; done | \ - sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ - $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ - if (++n[$$2] == $(am__install_max)) \ - { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ - END { for (dir in files) print dir, files[dir] }' -am__base_list = \ - sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ - sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' -am__installdirs = "$(DESTDIR)$(sbindir)" -SCRIPTS = $(sbin_SCRIPTS) -SOURCES = -DIST_SOURCES = -RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ - html-recursive info-recursive install-data-recursive \ - install-dvi-recursive install-exec-recursive \ - install-html-recursive install-info-recursive \ - install-pdf-recursive install-ps-recursive install-recursive \ - installcheck-recursive installdirs-recursive pdf-recursive \ - ps-recursive uninstall-recursive -RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ - distclean-recursive maintainer-clean-recursive -AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ - $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ - distdir -ETAGS = etags -CTAGS = ctags -DIST_SUBDIRS = $(SUBDIRS) -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -am__relativize = \ - dir0=`pwd`; \ - sed_first='s,^\([^/]*\)/.*$$,\1,'; \ - sed_rest='s,^[^/]*/*,,'; \ - sed_last='s,^.*/\([^/]*\)$$,\1,'; \ - sed_butlast='s,/*[^/]*$$,,'; \ - while test -n "$$dir1"; do \ - first=`echo "$$dir1" | sed -e "$$sed_first"`; \ - if test "$$first" != "."; then \ - if test "$$first" = ".."; then \ - dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ - dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ - else \ - first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ - if test "$$first2" = "$$first"; then \ - dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ - else \ - dir2="../$$dir2"; \ - fi; \ - dir0="$$dir0"/"$$first"; \ - fi; \ - fi; \ - dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ - done; \ - reldir="$$dir2" -ACLOCAL = @ACLOCAL@ -ALLOCA = @ALLOCA@ -AMTAR = @AMTAR@ -AR = @AR@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -CC = @CC@ -CCDEPMODE = @CCDEPMODE@ -CFLAGS = @CFLAGS@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CYGPATH_W = @CYGPATH_W@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -DSYMUTIL = @DSYMUTIL@ -DUMPBIN = @DUMPBIN@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -EXEEXT = @EXEEXT@ -FGREP = @FGREP@ -GREP = @GREP@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -LD = @LD@ -LDFLAGS = @LDFLAGS@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LIBTOOL = @LIBTOOL@ -LIBVERSION = @LIBVERSION@ -LIPO = @LIPO@ -LN_S = @LN_S@ -LTLIBOBJS = @LTLIBOBJS@ -MAINT = @MAINT@ -MAKEINFO = @MAKEINFO@ -MKDIR_P = @MKDIR_P@ -NM = @NM@ -NMEDIT = @NMEDIT@ -OBJDUMP = @OBJDUMP@ -OBJEXT = @OBJEXT@ -OTOOL = @OTOOL@ -OTOOL64 = @OTOOL64@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_URL = @PACKAGE_URL@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -RANLIB = @RANLIB@ -RC_LOG_FACILITY = @RC_LOG_FACILITY@ -RC_SECURE_PATH = @RC_SECURE_PATH@ -SED = @SED@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -STRIP = @STRIP@ -VERSION = @VERSION@ -abs_builddir = @abs_builddir@ -abs_srcdir = @abs_srcdir@ -abs_top_builddir = @abs_top_builddir@ -abs_top_srcdir = @abs_top_srcdir@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ -am__include = @am__include@ -am__leading_dot = @am__leading_dot@ -am__quote = @am__quote@ -am__tar = @am__tar@ -am__untar = @am__untar@ -bindir = @bindir@ -build = @build@ -build_alias = @build_alias@ -build_cpu = @build_cpu@ -build_os = @build_os@ -build_vendor = @build_vendor@ -builddir = @builddir@ -datadir = @datadir@ -datarootdir = @datarootdir@ -docdir = @docdir@ -dvidir = @dvidir@ -exec_prefix = @exec_prefix@ -host = @host@ -host_alias = @host_alias@ -host_cpu = @host_cpu@ -host_os = @host_os@ -host_vendor = @host_vendor@ -htmldir = @htmldir@ -includedir = @includedir@ -infodir = @infodir@ -install_sh = @install_sh@ -libdir = @libdir@ -libexecdir = @libexecdir@ -localedir = @localedir@ -localstatedir = @localstatedir@ -lt_ECHO = @lt_ECHO@ -mandir = @mandir@ -mkdir_p = @mkdir_p@ -oldincludedir = @oldincludedir@ -pdfdir = @pdfdir@ -pkgsysconfdir = @pkgsysconfdir@ -prefix = @prefix@ -program_transform_name = @program_transform_name@ -psdir = @psdir@ -sbindir = @sbindir@ -sharedstatedir = @sharedstatedir@ -srcdir = @srcdir@ -sysconfdir = @sysconfdir@ -target = @target@ -target_alias = @target_alias@ -target_cpu = @target_cpu@ -target_os = @target_os@ -target_vendor = @target_vendor@ -top_build_prefix = @top_build_prefix@ -top_builddir = @top_builddir@ -top_srcdir = @top_srcdir@ -AUTOMAKE_OPTIONS = foreign -SUBDIRS = migs -EXTRA_DIST = README login.radius -sbin_SCRIPTS = login.radius -all: all-recursive - -.SUFFIXES: -$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ - && { if test -f $@; then exit 0; else break; fi; }; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign login.radius/Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --foreign login.radius/Makefile -.PRECIOUS: Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(am__aclocal_m4_deps): -install-sbinSCRIPTS: $(sbin_SCRIPTS) - @$(NORMAL_INSTALL) - test -z "$(sbindir)" || $(MKDIR_P) "$(DESTDIR)$(sbindir)" - @list='$(sbin_SCRIPTS)'; test -n "$(sbindir)" || list=; \ - for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \ - done | \ - sed -e 'p;s,.*/,,;n' \ - -e 'h;s|.*|.|' \ - -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \ - $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \ - { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ - if ($$2 == $$4) { files[d] = files[d] " " $$1; \ - if (++n[d] == $(am__install_max)) { \ - print "f", d, files[d]; n[d] = 0; files[d] = "" } } \ - else { print "f", d "/" $$4, $$1 } } \ - END { for (d in files) print "f", d, files[d] }' | \ - while read type dir files; do \ - if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ - test -z "$$files" || { \ - echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(sbindir)$$dir'"; \ - $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(sbindir)$$dir" || exit $$?; \ - } \ - ; done - -uninstall-sbinSCRIPTS: - @$(NORMAL_UNINSTALL) - @list='$(sbin_SCRIPTS)'; test -n "$(sbindir)" || exit 0; \ - files=`for p in $$list; do echo "$$p"; done | \ - sed -e 's,.*/,,;$(transform)'`; \ - test -n "$$list" || exit 0; \ - echo " ( cd '$(DESTDIR)$(sbindir)' && rm -f" $$files ")"; \ - cd "$(DESTDIR)$(sbindir)" && rm -f $$files - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs - -# This directory's subdirectories are mostly independent; you can cd -# into them and run `make' without going through this Makefile. -# To change the values of `make' variables: instead of editing Makefiles, -# (1) if the variable is set in `config.status', edit `config.status' -# (which will cause the Makefiles to be regenerated when you run `make'); -# (2) otherwise, pass the desired values on the `make' command line. -$(RECURSIVE_TARGETS): - @fail= failcom='exit 1'; \ - for f in x $$MAKEFLAGS; do \ - case $$f in \ - *=* | --[!k]*);; \ - *k*) failcom='fail=yes';; \ - esac; \ - done; \ - dot_seen=no; \ - target=`echo $@ | sed s/-recursive//`; \ - list='$(SUBDIRS)'; for subdir in $$list; do \ - echo "Making $$target in $$subdir"; \ - if test "$$subdir" = "."; then \ - dot_seen=yes; \ - local_target="$$target-am"; \ - else \ - local_target="$$target"; \ - fi; \ - ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ - || eval $$failcom; \ - done; \ - if test "$$dot_seen" = "no"; then \ - $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ - fi; test -z "$$fail" - -$(RECURSIVE_CLEAN_TARGETS): - @fail= failcom='exit 1'; \ - for f in x $$MAKEFLAGS; do \ - case $$f in \ - *=* | --[!k]*);; \ - *k*) failcom='fail=yes';; \ - esac; \ - done; \ - dot_seen=no; \ - case "$@" in \ - distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ - *) list='$(SUBDIRS)' ;; \ - esac; \ - rev=''; for subdir in $$list; do \ - if test "$$subdir" = "."; then :; else \ - rev="$$subdir $$rev"; \ - fi; \ - done; \ - rev="$$rev ."; \ - target=`echo $@ | sed s/-recursive//`; \ - for subdir in $$rev; do \ - echo "Making $$target in $$subdir"; \ - if test "$$subdir" = "."; then \ - local_target="$$target-am"; \ - else \ - local_target="$$target"; \ - fi; \ - ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ - || eval $$failcom; \ - done && test -z "$$fail" -tags-recursive: - list='$(SUBDIRS)'; for subdir in $$list; do \ - test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ - done -ctags-recursive: - list='$(SUBDIRS)'; for subdir in $$list; do \ - test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ - done - -ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - mkid -fID $$unique -tags: TAGS - -TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - set x; \ - here=`pwd`; \ - if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ - include_option=--etags-include; \ - empty_fix=.; \ - else \ - include_option=--include; \ - empty_fix=; \ - fi; \ - list='$(SUBDIRS)'; for subdir in $$list; do \ - if test "$$subdir" = .; then :; else \ - test ! -f $$subdir/TAGS || \ - set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ - fi; \ - done; \ - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - shift; \ - if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ - test -n "$$unique" || unique=$$empty_fix; \ - if test $$# -gt 0; then \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - "$$@" $$unique; \ - else \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$unique; \ - fi; \ - fi -ctags: CTAGS -CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - test -z "$(CTAGS_ARGS)$$unique" \ - || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$unique - -GTAGS: - here=`$(am__cd) $(top_builddir) && pwd` \ - && $(am__cd) $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) "$$here" - -distclean-tags: - -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - -distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - list='$(DISTFILES)'; \ - dist_files=`for file in $$list; do echo $$file; done | \ - sed -e "s|^$$srcdirstrip/||;t" \ - -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ - case $$dist_files in \ - */*) $(MKDIR_P) `echo "$$dist_files" | \ - sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ - sort -u` ;; \ - esac; \ - for file in $$dist_files; do \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - if test -d $$d/$$file; then \ - dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test -d "$(distdir)/$$file"; then \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ - else \ - test -f "$(distdir)/$$file" \ - || cp -p $$d/$$file "$(distdir)/$$file" \ - || exit 1; \ - fi; \ - done - @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ - if test "$$subdir" = .; then :; else \ - test -d "$(distdir)/$$subdir" \ - || $(MKDIR_P) "$(distdir)/$$subdir" \ - || exit 1; \ - fi; \ - done - @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ - if test "$$subdir" = .; then :; else \ - dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ - $(am__relativize); \ - new_distdir=$$reldir; \ - dir1=$$subdir; dir2="$(top_distdir)"; \ - $(am__relativize); \ - new_top_distdir=$$reldir; \ - echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ - echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ - ($(am__cd) $$subdir && \ - $(MAKE) $(AM_MAKEFLAGS) \ - top_distdir="$$new_top_distdir" \ - distdir="$$new_distdir" \ - am__remove_distdir=: \ - am__skip_length_check=: \ - am__skip_mode_fix=: \ - distdir) \ - || exit 1; \ - fi; \ - done -check-am: all-am -check: check-recursive -all-am: Makefile $(SCRIPTS) -installdirs: installdirs-recursive -installdirs-am: - for dir in "$(DESTDIR)$(sbindir)"; do \ - test -z "$$dir" || $(MKDIR_P) "$$dir"; \ - done -install: install-recursive -install-exec: install-exec-recursive -install-data: install-data-recursive -uninstall: uninstall-recursive - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-recursive -install-strip: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install -mostlyclean-generic: - -clean-generic: - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." -clean: clean-recursive - -clean-am: clean-generic clean-libtool mostlyclean-am - -distclean: distclean-recursive - -rm -f Makefile -distclean-am: clean-am distclean-generic distclean-tags - -dvi: dvi-recursive - -dvi-am: - -html: html-recursive - -html-am: - -info: info-recursive - -info-am: - -install-data-am: - -install-dvi: install-dvi-recursive - -install-dvi-am: - -install-exec-am: install-sbinSCRIPTS - -install-html: install-html-recursive - -install-html-am: - -install-info: install-info-recursive - -install-info-am: - -install-man: - -install-pdf: install-pdf-recursive - -install-pdf-am: - -install-ps: install-ps-recursive - -install-ps-am: - -installcheck-am: - -maintainer-clean: maintainer-clean-recursive - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-recursive - -mostlyclean-am: mostlyclean-generic mostlyclean-libtool - -pdf: pdf-recursive - -pdf-am: - -ps: ps-recursive - -ps-am: - -uninstall-am: uninstall-sbinSCRIPTS - -.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ - install-am install-strip tags-recursive - -.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ - all all-am check check-am clean clean-generic clean-libtool \ - ctags ctags-recursive distclean distclean-generic \ - distclean-libtool distclean-tags distdir dvi dvi-am html \ - html-am info info-am install install-am install-data \ - install-data-am install-dvi install-dvi-am install-exec \ - install-exec-am install-html install-html-am install-info \ - install-info-am install-man install-pdf install-pdf-am \ - install-ps install-ps-am install-sbinSCRIPTS install-strip \ - installcheck installcheck-am installdirs installdirs-am \ - maintainer-clean maintainer-clean-generic mostlyclean \ - mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ - tags tags-recursive uninstall uninstall-am \ - uninstall-sbinSCRIPTS - - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/login.radius/README b/openair3/PMIPv6/freeradius-client-1.1.6/login.radius/README deleted file mode 100644 index 7edef1be69..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/login.radius/README +++ /dev/null @@ -1,9 +0,0 @@ -You can find login.radius script examples here. - -login.radius - - Dummy script. - -migs - - Sample login.radius contributed by Miguel A.L. Paraz . diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/login.radius/login.radius b/openair3/PMIPv6/freeradius-client-1.1.6/login.radius/login.radius deleted file mode 100755 index 2a23923a0a..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/login.radius/login.radius +++ /dev/null @@ -1,24 +0,0 @@ -#!/bin/sh -# -# $Id: login.radius,v 1.1.1.1 2003/12/02 10:39:23 sobomax Exp $ -# -# Copyright (C) 1998 Lars Fenneberg -# -# See the file COPYRIGHT for the respective terms and conditions. -# If the file is missing contact me at lf@elemental.net -# and I'll send you a copy. -# - -cat <. It implements PPP, Telnet and Rlogin connections. - -There currently is no documentation but the scripts are very clear and -should provide a good starting point. - -The ip-up and ip-down scripts must be installed under /etc/ppp so that the -pppd can find them. - -lf, 970524 diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/login.radius/migs/ip-down b/openair3/PMIPv6/freeradius-client-1.1.6/login.radius/migs/ip-down deleted file mode 100755 index 336ae93722..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/login.radius/migs/ip-down +++ /dev/null @@ -1,69 +0,0 @@ -#!/usr/bin/perl -# -# ip-down -# -# Script started when the PPP daemon disconnects. -# - -use strict; -use GDBM_File; - - -#### RADIUS Begins - -my ($sessionid, $username, $port, $portid, $timeout) = split (/:/, $ARGV[5]); - -if ($sessionid) -{ -# Code to inform the server that we're getting out. - -# Port information database. - my $path_portinfo = "/var/ipoint/acct/portinfo"; - - -# Radius accounting record generator. - my $prog_radacct = "/usr/local/lib/radiusclient-ng/radacct"; - -# The session ID, username, raw port and ID are given to this script -# through the ipparam parameter of pppd 2.2.0e and above. - -# Generate the accounting entry, and hand it over to RADIUS. - -# Delete the port info entry since the user has logged off, but make use -# of the starting time. - my (%s, @e, $sessiontime); - tie (%s, "GDBM_File", $path_portinfo, GDBM_WRCREAT, 0600); - @e = split (':', $s{$portid}); - - if ($e[4]) - { - $sessiontime = time() - $e[4]; - } - - delete $s{$portid}; - untie (%s); - -# Generate the accounting entry, and hand it over to RADIUS. - - open (H, "| $prog_radacct -i $port"); - - my $cmd = - "Acct-Session-ID = \"$sessionid\"\n" . - "User-Name = \"$username\"\n" . - "Acct-Status-Type = Stop\n" . - "Acct-Authentic = RADIUS\n" . - "Service-Type = Framed\n" . - "Framed-Protocol = PPP\n" . - "Framed-IP-Address = $ARGV[4]\n"; - - if ($sessiontime) - { - $cmd .= "Acct-Session-Time = $sessiontime\n"; - } - - print H $cmd; - close (H); -} - -#### RADIUS Ends - diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/login.radius/migs/ip-up b/openair3/PMIPv6/freeradius-client-1.1.6/login.radius/migs/ip-up deleted file mode 100755 index 7622643f1e..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/login.radius/migs/ip-up +++ /dev/null @@ -1,121 +0,0 @@ -#!/usr/bin/perl -# -# ip-up -# -# Script started when the PPP daemon makes a connection. -# - -# This script is given: -# interface-name tty-device speed local-IP-address remote-IP-address -# Since this is a PPP server, local-IP-address does not change. - -# TODO: Clean up this file and make it really modular. - -use strict; -use GDBM_File; - -#### RADIUS section Begins - -# Configuration section. - -# Port information database. -my $path_portinfo = "/var/ipoint/acct/portinfo"; - - -# Radius accounting record generator. - my $prog_radacct = "/usr/local/lib/radiusclient-ng/radacct"; - -sub netmask -{ - my $count = int ($_[0] / 8); - - my $c1 = ("255." x $count); - $c1 = substr ($c1, 0, -1) if ($count == 4); - my $c2 = (256 - (1<<(8 - ($_[0] - $count * 8)))) || "0"; - $c2 .= '.' if ($count < 3); - my $c3 = substr (("0." x (3-$count)), 0, -1); - return $c1 . $c2. $c3; -} - -my ($sessionid, $username, $port, $portid, $timeout, $routelist) = - split (/:/, $ARGV[5]); - -if ($sessionid) -{ -# I-Way code to inform the server that we're getting in. - -# If there was routing, add it. Format for $route, from the Framed-Route -# parameter, is address/netmask gateway metric. If gateway is 0.0.0.0, -# add the route here. - -# Unescape the route list. - $routelist =~ s/%20/ /g; - - my $route; - - # Debug this. - open (H, ">>/tmp/ip-up.log"); - print H "ROUTELIST: " . $routelist . "\n"; - - foreach $route (split ("@", $routelist)) { - # Split the route into the components. - my @routevalue = split (' ', $route); - my ($netmaskcmd, $gwcmd, $metriccmd); - my @network = split ("/", $routevalue[0]); - - if ($network[1]) { - $netmaskcmd = "netmask " . netmask($network[1]); - } - - if ($routevalue[1] eq "0.0.0.0") { - $gwcmd = "gw $ARGV[4]"; - } - elsif ($routevalue[1]) { - $gwcmd = "gw $routevalue[1]"; - } - - if ($routevalue[2]) { - $metriccmd = "metric $routevalue[2]"; - } - - my $routecmd = "/sbin/route add -net $network[0] $netmaskcmd $gwcmd " . - "$metriccmd"; - - system ($routecmd); - print H "COMMAND: " . $routecmd . "\n"; - } - close (H); - -# The session ID, username, raw port and ID are given to this script -# through the ipparam parameter of pppd 2.2.0e and above. - -# Generate the accounting entry, and hand it over to RADIUS. - - open (H, "| $prog_radacct -i $port"); - - my $cmd = - "Acct-Session-ID = \"$sessionid\"\n" . - "User-Name = \"$username\"\n" . - "Acct-Status-Type = Start\n" . - "Acct-Authentic = RADIUS\n" . - "Service-Type = Framed\n" . - "Framed-Protocol = PPP\n" . - "Framed-IP-Address = $ARGV[4]\n"; - - print H $cmd; - close (H); -} - -# Store the username, the connection type, the IP address, the PID of pppd. -# Index it on the port ID, since 'portman' makes use of this. - -my ($timenow, %s); -$timenow = time(); -tie (%s, "GDBM_File", $path_portinfo, GDBM_WRCREAT, 0600); -$s{$portid} = join (':', $username, "Framed-User/PPP", $ARGV[4], getppid (), - $timenow, $timeout); -untie (%s); - - -#### RADIUS ends - diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/login.radius/migs/login.radius b/openair3/PMIPv6/freeradius-client-1.1.6/login.radius/migs/login.radius deleted file mode 100755 index 4a84e7bf99..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/login.radius/migs/login.radius +++ /dev/null @@ -1,312 +0,0 @@ -#!/usr/bin/perl -# -# login program to invoke PPP. -# RADIUS accounting is NOT handled by this; it is handled by /etc/ppp/ -# ip-up and ip-down which are invoked when the TCP/IP connection is up. - -# version 0.1 November 5 1996 -# clean up the code, minor features. - -# version 0.02 May 8 1996 -# -# start implementing other types of logins, not only Framed. -# Also honor static IP addresses. -# -# version 0.01 April 1 1996 -# -# - ignore RADIUS server requests for Framed-User, just -# do PPP. Later, this should be honored. For now, -# just use RADIUS for authentication; it's much simpler. -# Always use dynamic addresses. -# - -use strict; -use GDBM_File; - -#### CONFIGURATION SECTION ################################################## - -# Local IP address for the PPP connection. -my $ip_address_local = "203.176.0.3"; - -# First IP address for this terminal server, if dynamic addressing -# is requested, or if nothing is specified for Framed-IP-Address. -my $ip_address_begin = "203.176.0.161"; - -# IP translation factor; subtract this value from radclient before adding -# the beginning IP address. -my $ip_translate_factor = 32; - -# Debugging to screen? -my $debug = 1; - -# PPP parameters: - -# Async map - this one escapes only XON and XOFF characters. -my $asyncmap = "0x000A0000"; - -# MTU and MRU. 296 is good for interactive performance, -# but larger ones will lead to less overhead for file transfers. -# Maximum is 1500. -my ($mtu, $mru) = (296, 296); - -# If we're using proxy ARP, set this to "proxyarp", else leave it blank. -# my $proxyarp = "proxyarp"; -my $proxyarp = ""; - -# Login host for non-framed connections. -# This should only be an IP address, since that's what -# Login-IP-Host should be. -my $login_host = "203.176.0.4"; # marikit.iphil.net - -# Programs and files. -my $prog_pppd = "/usr/sbin/pppd"; -my $prog_radacct = "/usr/local/lib/radiusclient-ng/radacct"; -my $prog_rlogin = "/usr/bin/rlogin"; -my $prog_telnet = "/bin/telnet"; -my $prog_tcpclear = "/bin/telnet -e ''"; -my $prog_tty = "/usr/bin/tty"; -my $prog_who = "/usr/bin/who"; - -my $path_portinfo = "/var/ipoint/acct/portinfo"; -my $path_radiusclient_map = "/etc/radclient/port-id-map"; - -############################################################################# - -# Main program. - -print "Starting.\n" if ($debug); - -# Run 'who am i' to determine the current port. -my $port = `$prog_tty`; -chomp ($port); - -# Translate port numbers to numbers for RADIUS. -# This translation is done again by radacct, but it may be useful here. -# Remove if CPU time is a problem. - -my ($portid, $line); -open (H, $path_radiusclient_map); -while (($line = ) && (!$portid)) -{ - my @info = split (/\s+/, $line); - $portid = $info[1] if ($info[0] eq $port); -} -close (H); - -if ($debug) -{ - # Print out all the RADIUS variables. - my @el = grep (/^RADIUS/, keys (%ENV)); - my $e; - foreach $e (@el) - { - print "$e = " . $ENV{$e} . "\n"; - } -} - -# If the service type is Framed, then give them PPP. -# SLIP is not implemented (and will probably never be). - -my $username = $ENV{"RADIUS_USER_NAME"}; - -# Generate a "unique" string for the session ID. -my $sessionid = "$$" . time (); - -if ($ENV{"RADIUS_SERVICE_TYPE"} =~ /^Framed$/) -{ - -# Use the specified IP address, or generate one if none is specified, -# or a dynamic one requested. Or, let the user negotiate the address. - - my $ip_address = $ENV{"RADIUS_FRAMED_IP_ADDRESS"}; - - if (!$ip_address || ($ip_address eq "255.255.255.254")) - { - my @ipn = split (/\./, $ip_address_begin); - $ipn[3] += $portid - $ip_translate_factor; - $ip_address = join ('.', @ipn); - - if ($debug) - { - print "port: $port\n"; - print "portid: $portid\n"; - print "ip_translate_factor: $ip_translate_factor\n"; - print "ip_address: $ip_address\n"; - print "mru: $mru\n"; - } - - } - elsif ($ip_address eq "255.255.255.255") - { - # Clear it out so that pppd will let the remote end specify the - # IP address. - $ip_address = ""; - } - - # Override the specified MTU. - $mtu = $ENV{"RADIUS_FRAMED_MTU"} if $ENV{"RADIUS_FRAMED_MTU"}; - - # If no compression is specified, turn it off. - my $compress; - if (!$ENV{"RADIUS_FRAMED_COMPRESSION"}) - { - $compress = "-vj"; - } - -# Fix up the parameters to be passed to ip-up. Include Framed-Route. -# Escape spaces with %20's. - - # Split up the framed route into multiple parts. - # Separate the different given routes with bars. - my $routelist = join ("@", map {$ENV{$_}} - grep {/^RADIUS_FRAMED_ROUTE/} keys (%ENV) - ); - $routelist =~ s/ /%20/g; - - my $param = join (':', $sessionid, $username, $port, $portid, - $ENV{"RADIUS_SESSION_TIMEOUT"}, $routelist); - - -# Run pppd through exec, so that it grabs hold of the terminal -# and catches disconnections. - - # Portmaster-style prompt. - if ($ENV{"RADIUS_SESSION_TIMEOUT"}) - { - print "Session timeout: " . $ENV{"RADIUS_SESSION_TIMEOUT"} . - " seconds.\n"; - } - print "PPP session from ($ip_address_local) to $ip_address beginning...."; - my $pppdcmd = - "$prog_pppd $ip_address_local:$ip_address modem crtscts " . - "asyncmap $asyncmap lock -detach $compress " . - "ipparam $param mtu $mtu mru $mru $proxyarp"; - - exec ($pppdcmd); -} -elsif ($ENV{"RADIUS_SERVICE_TYPE"} =~ /Login/) -{ - # Warning: This code has not been tested as well as the PPP version, - # as of now (19961107). - - # Determine what host to connect to. - if (($ENV{"RADIUS_LOGIN_IP_HOST"} eq "0.0.0.0") || - !defined ($ENV{"RADIUS_LOGIN_IP_HOST"})) - { - # Do nothing, it's already specified above in the config section. - } - elsif ($ENV{"RADIUS_LOGIN_IP_HOST"} eq "255.255.255.255") - { - # The user should be able to choose. Prompt the user. - print "Host to connect to? "; - $login_host = ; - chomp ($login_host); - } - else - { - # Use what's specified by the RADIUS server. - $login_host = $ENV{"RADIUS_LOGIN_IP_HOST"}; - } - - # Log into a host. Default to telnet. Do the accounting - # now, since the target of the login wouldn't know how to - # account for it. - - # Start accounting. Send the record. - open (H, "| $prog_radacct") || die ("Cannot run $prog_radacct"); - - my $login_service = $ENV{"RADIUS_LOGIN_SERVICE"}; - - my $cmd = - "Acct-Session-ID = \"$sessionid\"\n" . - "User-Name = \"$username\"\n" . - "Acct-Status-Type = Start\n" . - "Acct-Authentic = RADIUS\n" . - "Service-Type = Login\n" . - "Login-Service = " . $login_service . "\n" . - "Login-IP-Host = $login_host\n"; - - print H $cmd; - close (H); - - # Time. - my $timestart = time (); - - # What protocol are we running? - my ($prog_run, $login_port); - - if ($login_service eq "Rlogin") - { - $prog_run = $prog_rlogin; - } - elsif ($login_service eq "Telnet") - { - $prog_run = $prog_telnet; - $login_port = $ENV{"RADIUS_LOGIN_PORT"}; - } - elsif ($login_service eq "TCP-Clear") - { - $prog_run = $prog_tcpclear; - $login_port = $ENV{"RADIUS_LOGIN_PORT"}; - } - - # Store the user information into portinfo. We need to - # manually fork, since we have to know the PID of the program. - - my $pid = fork (); - if ($pid == 0) - { - # Child. Run the program. - # print "Connecting to $login_host:\n"; - my $cmd = "$prog_run $login_host $login_port"; - exec ("$cmd"); - } - else - { - # Parent. - # Create the portinfo record, which needs the pid of the program - # to kill. - # The IP address is all zero, as it is not applicable here. - # Store the time now, and the Session-Timeout. - - my %db_portinfo; - - tie (%db_portinfo, "GDBM_File", $path_portinfo, GDBM_WRCREAT, 0600); - $db_portinfo{$portid} = - join (':', $username, "Login/$login_service", - "0.0.0.0", $pid, $timestart, $ENV{"RADIUS_SESSION_TIMEOUT"}); - untie (%db_portinfo); - - # Wait for the session to finish. - waitpid ($pid, 0); - } - # Stop. Send the record. - open (H, "| $prog_radacct") || die ("Cannot run $prog_radacct"); - - my $timespent = time () - $timestart; - - my $cmd = - "Acct-Session-ID = \"$sessionid\"\n" . - "User-Name = \"$username\"\n" . - "Acct-Status-Type = Stop\n" . - "Acct-Authentic = RADIUS\n" . - "Service-Type = Login\n" . - "Login-Service = " . $login_service . "\n" . - "Login-IP-Host = $login_host\n" . - "Acct-Session-Time = $timespent\n"; - - print H $cmd; - close (H); - - # Remove the record from portinfo. - my %db_portinfo; - tie (%db_portinfo, "GDBM_File", $path_portinfo, GDBM_WRCREAT, 0600); - delete $db_portinfo{$portid}; - untie (%db_portinfo); -} - -### END #### - - - - diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/ltmain.sh b/openair3/PMIPv6/freeradius-client-1.1.6/ltmain.sh deleted file mode 100644 index 7ed280bc95..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/ltmain.sh +++ /dev/null @@ -1,8413 +0,0 @@ -# Generated from ltmain.m4sh. - -# ltmain.sh (GNU libtool) 2.2.6b -# Written by Gordon Matzigkeit , 1996 - -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, 2007 2008 Free Software Foundation, Inc. -# This is free software; see the source for copying conditions. There is NO -# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -# GNU Libtool is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# As a special exception to the GNU General Public License, -# if you distribute this file as part of a program or library that -# is built using GNU Libtool, you may include this file under the -# same distribution terms that you use for the rest of that program. -# -# GNU Libtool is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with GNU Libtool; see the file COPYING. If not, a copy -# can be downloaded from http://www.gnu.org/licenses/gpl.html, -# or obtained by writing to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - -# Usage: $progname [OPTION]... [MODE-ARG]... -# -# Provide generalized library-building support services. -# -# --config show all configuration variables -# --debug enable verbose shell tracing -# -n, --dry-run display commands without modifying any files -# --features display basic configuration information and exit -# --mode=MODE use operation mode MODE -# --preserve-dup-deps don't remove duplicate dependency libraries -# --quiet, --silent don't print informational messages -# --tag=TAG use configuration variables from tag TAG -# -v, --verbose print informational messages (default) -# --version print version information -# -h, --help print short or long help message -# -# MODE must be one of the following: -# -# clean remove files from the build directory -# compile compile a source file into a libtool object -# execute automatically set library path, then run a program -# finish complete the installation of libtool libraries -# install install libraries or executables -# link create a library or an executable -# uninstall remove libraries from an installed directory -# -# MODE-ARGS vary depending on the MODE. -# Try `$progname --help --mode=MODE' for a more detailed description of MODE. -# -# When reporting a bug, please describe a test case to reproduce it and -# include the following information: -# -# host-triplet: $host -# shell: $SHELL -# compiler: $LTCC -# compiler flags: $LTCFLAGS -# linker: $LD (gnu? $with_gnu_ld) -# $progname: (GNU libtool) 2.2.6b Debian-2.2.6b-2ubuntu1 -# automake: $automake_version -# autoconf: $autoconf_version -# -# Report bugs to . - -PROGRAM=ltmain.sh -PACKAGE=libtool -VERSION="2.2.6b Debian-2.2.6b-2ubuntu1" -TIMESTAMP="" -package_revision=1.3017 - -# Be Bourne compatible -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then - emulate sh - NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac -fi -BIN_SH=xpg4; export BIN_SH # for Tru64 -DUALCASE=1; export DUALCASE # for MKS sh - -# NLS nuisances: We save the old values to restore during execute mode. -# Only set LANG and LC_ALL to C if already set. -# These must not be set unconditionally because not all systems understand -# e.g. LANG=C (notably SCO). -lt_user_locale= -lt_safe_locale= -for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES -do - eval "if test \"\${$lt_var+set}\" = set; then - save_$lt_var=\$$lt_var - $lt_var=C - export $lt_var - lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\" - lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\" - fi" -done - -$lt_unset CDPATH - - - - - -: ${CP="cp -f"} -: ${ECHO="echo"} -: ${EGREP="/bin/grep -E"} -: ${FGREP="/bin/grep -F"} -: ${GREP="/bin/grep"} -: ${LN_S="ln -s"} -: ${MAKE="make"} -: ${MKDIR="mkdir"} -: ${MV="mv -f"} -: ${RM="rm -f"} -: ${SED="/bin/sed"} -: ${SHELL="${CONFIG_SHELL-/bin/sh}"} -: ${Xsed="$SED -e 1s/^X//"} - -# Global variables: -EXIT_SUCCESS=0 -EXIT_FAILURE=1 -EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. -EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. - -exit_status=$EXIT_SUCCESS - -# Make sure IFS has a sensible default -lt_nl=' -' -IFS=" $lt_nl" - -dirname="s,/[^/]*$,," -basename="s,^.*/,," - -# func_dirname_and_basename file append nondir_replacement -# perform func_basename and func_dirname in a single function -# call: -# dirname: Compute the dirname of FILE. If nonempty, -# add APPEND to the result, otherwise set result -# to NONDIR_REPLACEMENT. -# value returned in "$func_dirname_result" -# basename: Compute filename of FILE. -# value retuned in "$func_basename_result" -# Implementation must be kept synchronized with func_dirname -# and func_basename. For efficiency, we do not delegate to -# those functions but instead duplicate the functionality here. -func_dirname_and_basename () -{ - # Extract subdirectory from the argument. - func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"` - if test "X$func_dirname_result" = "X${1}"; then - func_dirname_result="${3}" - else - func_dirname_result="$func_dirname_result${2}" - fi - func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"` -} - -# Generated shell functions inserted here. - -# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh -# is ksh but when the shell is invoked as "sh" and the current value of -# the _XPG environment variable is not equal to 1 (one), the special -# positional parameter $0, within a function call, is the name of the -# function. -progpath="$0" - -# The name of this program: -# In the unlikely event $progname began with a '-', it would play havoc with -# func_echo (imagine progname=-n), so we prepend ./ in that case: -func_dirname_and_basename "$progpath" -progname=$func_basename_result -case $progname in - -*) progname=./$progname ;; -esac - -# Make sure we have an absolute path for reexecution: -case $progpath in - [\\/]*|[A-Za-z]:\\*) ;; - *[\\/]*) - progdir=$func_dirname_result - progdir=`cd "$progdir" && pwd` - progpath="$progdir/$progname" - ;; - *) - save_IFS="$IFS" - IFS=: - for progdir in $PATH; do - IFS="$save_IFS" - test -x "$progdir/$progname" && break - done - IFS="$save_IFS" - test -n "$progdir" || progdir=`pwd` - progpath="$progdir/$progname" - ;; -esac - -# Sed substitution that helps us do robust quoting. It backslashifies -# metacharacters that are still active within double-quoted strings. -Xsed="${SED}"' -e 1s/^X//' -sed_quote_subst='s/\([`"$\\]\)/\\\1/g' - -# Same as above, but do not quote variable references. -double_quote_subst='s/\(["`\\]\)/\\\1/g' - -# Re-`\' parameter expansions in output of double_quote_subst that were -# `\'-ed in input to the same. If an odd number of `\' preceded a '$' -# in input to double_quote_subst, that '$' was protected from expansion. -# Since each input `\' is now two `\'s, look for any number of runs of -# four `\'s followed by two `\'s and then a '$'. `\' that '$'. -bs='\\' -bs2='\\\\' -bs4='\\\\\\\\' -dollar='\$' -sed_double_backslash="\ - s/$bs4/&\\ -/g - s/^$bs2$dollar/$bs&/ - s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g - s/\n//g" - -# Standard options: -opt_dry_run=false -opt_help=false -opt_quiet=false -opt_verbose=false -opt_warning=: - -# func_echo arg... -# Echo program name prefixed message, along with the current mode -# name if it has been set yet. -func_echo () -{ - $ECHO "$progname${mode+: }$mode: $*" -} - -# func_verbose arg... -# Echo program name prefixed message in verbose mode only. -func_verbose () -{ - $opt_verbose && func_echo ${1+"$@"} - - # A bug in bash halts the script if the last line of a function - # fails when set -e is in force, so we need another command to - # work around that: - : -} - -# func_error arg... -# Echo program name prefixed message to standard error. -func_error () -{ - $ECHO "$progname${mode+: }$mode: "${1+"$@"} 1>&2 -} - -# func_warning arg... -# Echo program name prefixed warning message to standard error. -func_warning () -{ - $opt_warning && $ECHO "$progname${mode+: }$mode: warning: "${1+"$@"} 1>&2 - - # bash bug again: - : -} - -# func_fatal_error arg... -# Echo program name prefixed message to standard error, and exit. -func_fatal_error () -{ - func_error ${1+"$@"} - exit $EXIT_FAILURE -} - -# func_fatal_help arg... -# Echo program name prefixed message to standard error, followed by -# a help hint, and exit. -func_fatal_help () -{ - func_error ${1+"$@"} - func_fatal_error "$help" -} -help="Try \`$progname --help' for more information." ## default - - -# func_grep expression filename -# Check whether EXPRESSION matches any line of FILENAME, without output. -func_grep () -{ - $GREP "$1" "$2" >/dev/null 2>&1 -} - - -# func_mkdir_p directory-path -# Make sure the entire path to DIRECTORY-PATH is available. -func_mkdir_p () -{ - my_directory_path="$1" - my_dir_list= - - if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then - - # Protect directory names starting with `-' - case $my_directory_path in - -*) my_directory_path="./$my_directory_path" ;; - esac - - # While some portion of DIR does not yet exist... - while test ! -d "$my_directory_path"; do - # ...make a list in topmost first order. Use a colon delimited - # list incase some portion of path contains whitespace. - my_dir_list="$my_directory_path:$my_dir_list" - - # If the last portion added has no slash in it, the list is done - case $my_directory_path in */*) ;; *) break ;; esac - - # ...otherwise throw away the child directory and loop - my_directory_path=`$ECHO "X$my_directory_path" | $Xsed -e "$dirname"` - done - my_dir_list=`$ECHO "X$my_dir_list" | $Xsed -e 's,:*$,,'` - - save_mkdir_p_IFS="$IFS"; IFS=':' - for my_dir in $my_dir_list; do - IFS="$save_mkdir_p_IFS" - # mkdir can fail with a `File exist' error if two processes - # try to create one of the directories concurrently. Don't - # stop in that case! - $MKDIR "$my_dir" 2>/dev/null || : - done - IFS="$save_mkdir_p_IFS" - - # Bail out if we (or some other process) failed to create a directory. - test -d "$my_directory_path" || \ - func_fatal_error "Failed to create \`$1'" - fi -} - - -# func_mktempdir [string] -# Make a temporary directory that won't clash with other running -# libtool processes, and avoids race conditions if possible. If -# given, STRING is the basename for that directory. -func_mktempdir () -{ - my_template="${TMPDIR-/tmp}/${1-$progname}" - - if test "$opt_dry_run" = ":"; then - # Return a directory name, but don't create it in dry-run mode - my_tmpdir="${my_template}-$$" - else - - # If mktemp works, use that first and foremost - my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` - - if test ! -d "$my_tmpdir"; then - # Failing that, at least try and use $RANDOM to avoid a race - my_tmpdir="${my_template}-${RANDOM-0}$$" - - save_mktempdir_umask=`umask` - umask 0077 - $MKDIR "$my_tmpdir" - umask $save_mktempdir_umask - fi - - # If we're not in dry-run mode, bomb out on failure - test -d "$my_tmpdir" || \ - func_fatal_error "cannot create temporary directory \`$my_tmpdir'" - fi - - $ECHO "X$my_tmpdir" | $Xsed -} - - -# func_quote_for_eval arg -# Aesthetically quote ARG to be evaled later. -# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT -# is double-quoted, suitable for a subsequent eval, whereas -# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters -# which are still active within double quotes backslashified. -func_quote_for_eval () -{ - case $1 in - *[\\\`\"\$]*) - func_quote_for_eval_unquoted_result=`$ECHO "X$1" | $Xsed -e "$sed_quote_subst"` ;; - *) - func_quote_for_eval_unquoted_result="$1" ;; - esac - - case $func_quote_for_eval_unquoted_result in - # Double-quote args containing shell metacharacters to delay - # word splitting, command substitution and and variable - # expansion for a subsequent eval. - # Many Bourne shells cannot handle close brackets correctly - # in scan sets, so we specify it separately. - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") - func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\"" - ;; - *) - func_quote_for_eval_result="$func_quote_for_eval_unquoted_result" - esac -} - - -# func_quote_for_expand arg -# Aesthetically quote ARG to be evaled later; same as above, -# but do not quote variable references. -func_quote_for_expand () -{ - case $1 in - *[\\\`\"]*) - my_arg=`$ECHO "X$1" | $Xsed \ - -e "$double_quote_subst" -e "$sed_double_backslash"` ;; - *) - my_arg="$1" ;; - esac - - case $my_arg in - # Double-quote args containing shell metacharacters to delay - # word splitting and command substitution for a subsequent eval. - # Many Bourne shells cannot handle close brackets correctly - # in scan sets, so we specify it separately. - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") - my_arg="\"$my_arg\"" - ;; - esac - - func_quote_for_expand_result="$my_arg" -} - - -# func_show_eval cmd [fail_exp] -# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is -# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP -# is given, then evaluate it. -func_show_eval () -{ - my_cmd="$1" - my_fail_exp="${2-:}" - - ${opt_silent-false} || { - func_quote_for_expand "$my_cmd" - eval "func_echo $func_quote_for_expand_result" - } - - if ${opt_dry_run-false}; then :; else - eval "$my_cmd" - my_status=$? - if test "$my_status" -eq 0; then :; else - eval "(exit $my_status); $my_fail_exp" - fi - fi -} - - -# func_show_eval_locale cmd [fail_exp] -# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is -# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP -# is given, then evaluate it. Use the saved locale for evaluation. -func_show_eval_locale () -{ - my_cmd="$1" - my_fail_exp="${2-:}" - - ${opt_silent-false} || { - func_quote_for_expand "$my_cmd" - eval "func_echo $func_quote_for_expand_result" - } - - if ${opt_dry_run-false}; then :; else - eval "$lt_user_locale - $my_cmd" - my_status=$? - eval "$lt_safe_locale" - if test "$my_status" -eq 0; then :; else - eval "(exit $my_status); $my_fail_exp" - fi - fi -} - - - - - -# func_version -# Echo version message to standard output and exit. -func_version () -{ - $SED -n '/^# '$PROGRAM' (GNU /,/# warranty; / { - s/^# // - s/^# *$// - s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/ - p - }' < "$progpath" - exit $? -} - -# func_usage -# Echo short help message to standard output and exit. -func_usage () -{ - $SED -n '/^# Usage:/,/# -h/ { - s/^# // - s/^# *$// - s/\$progname/'$progname'/ - p - }' < "$progpath" - $ECHO - $ECHO "run \`$progname --help | more' for full usage" - exit $? -} - -# func_help -# Echo long help message to standard output and exit. -func_help () -{ - $SED -n '/^# Usage:/,/# Report bugs to/ { - s/^# // - s/^# *$// - s*\$progname*'$progname'* - s*\$host*'"$host"'* - s*\$SHELL*'"$SHELL"'* - s*\$LTCC*'"$LTCC"'* - s*\$LTCFLAGS*'"$LTCFLAGS"'* - s*\$LD*'"$LD"'* - s/\$with_gnu_ld/'"$with_gnu_ld"'/ - s/\$automake_version/'"`(automake --version) 2>/dev/null |$SED 1q`"'/ - s/\$autoconf_version/'"`(autoconf --version) 2>/dev/null |$SED 1q`"'/ - p - }' < "$progpath" - exit $? -} - -# func_missing_arg argname -# Echo program name prefixed message to standard error and set global -# exit_cmd. -func_missing_arg () -{ - func_error "missing argument for $1" - exit_cmd=exit -} - -exit_cmd=: - - - - - -# Check that we have a working $ECHO. -if test "X$1" = X--no-reexec; then - # Discard the --no-reexec flag, and continue. - shift -elif test "X$1" = X--fallback-echo; then - # Avoid inline document here, it may be left over - : -elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t'; then - # Yippee, $ECHO works! - : -else - # Restart under the correct shell, and then maybe $ECHO will work. - exec $SHELL "$progpath" --no-reexec ${1+"$@"} -fi - -if test "X$1" = X--fallback-echo; then - # used as fallback echo - shift - cat </dev/null 2>&1; then - taglist="$taglist $tagname" - - # Evaluate the configuration. Be careful to quote the path - # and the sed script, to avoid splitting on whitespace, but - # also don't use non-portable quotes within backquotes within - # quotes we have to do it in 2 steps: - extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` - eval "$extractedcf" - else - func_error "ignoring unknown tag $tagname" - fi - ;; - esac -} - -# Parse options once, thoroughly. This comes as soon as possible in -# the script to make things like `libtool --version' happen quickly. -{ - - # Shorthand for --mode=foo, only valid as the first argument - case $1 in - clean|clea|cle|cl) - shift; set dummy --mode clean ${1+"$@"}; shift - ;; - compile|compil|compi|comp|com|co|c) - shift; set dummy --mode compile ${1+"$@"}; shift - ;; - execute|execut|execu|exec|exe|ex|e) - shift; set dummy --mode execute ${1+"$@"}; shift - ;; - finish|finis|fini|fin|fi|f) - shift; set dummy --mode finish ${1+"$@"}; shift - ;; - install|instal|insta|inst|ins|in|i) - shift; set dummy --mode install ${1+"$@"}; shift - ;; - link|lin|li|l) - shift; set dummy --mode link ${1+"$@"}; shift - ;; - uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) - shift; set dummy --mode uninstall ${1+"$@"}; shift - ;; - esac - - # Parse non-mode specific arguments: - while test "$#" -gt 0; do - opt="$1" - shift - - case $opt in - --config) func_config ;; - - --debug) preserve_args="$preserve_args $opt" - func_echo "enabling shell trace mode" - opt_debug='set -x' - $opt_debug - ;; - - -dlopen) test "$#" -eq 0 && func_missing_arg "$opt" && break - execute_dlfiles="$execute_dlfiles $1" - shift - ;; - - --dry-run | -n) opt_dry_run=: ;; - --features) func_features ;; - --finish) mode="finish" ;; - - --mode) test "$#" -eq 0 && func_missing_arg "$opt" && break - case $1 in - # Valid mode arguments: - clean) ;; - compile) ;; - execute) ;; - finish) ;; - install) ;; - link) ;; - relink) ;; - uninstall) ;; - - # Catch anything else as an error - *) func_error "invalid argument for $opt" - exit_cmd=exit - break - ;; - esac - - mode="$1" - shift - ;; - - --preserve-dup-deps) - opt_duplicate_deps=: ;; - - --quiet|--silent) preserve_args="$preserve_args $opt" - opt_silent=: - ;; - - --verbose| -v) preserve_args="$preserve_args $opt" - opt_silent=false - ;; - - --tag) test "$#" -eq 0 && func_missing_arg "$opt" && break - preserve_args="$preserve_args $opt $1" - func_enable_tag "$1" # tagname is set here - shift - ;; - - # Separate optargs to long options: - -dlopen=*|--mode=*|--tag=*) - func_opt_split "$opt" - set dummy "$func_opt_split_opt" "$func_opt_split_arg" ${1+"$@"} - shift - ;; - - -\?|-h) func_usage ;; - --help) opt_help=: ;; - --version) func_version ;; - - -*) func_fatal_help "unrecognized option \`$opt'" ;; - - *) nonopt="$opt" - break - ;; - esac - done - - - case $host in - *cygwin* | *mingw* | *pw32* | *cegcc*) - # don't eliminate duplications in $postdeps and $predeps - opt_duplicate_compiler_generated_deps=: - ;; - *) - opt_duplicate_compiler_generated_deps=$opt_duplicate_deps - ;; - esac - - # Having warned about all mis-specified options, bail out if - # anything was wrong. - $exit_cmd $EXIT_FAILURE -} - -# func_check_version_match -# Ensure that we are using m4 macros, and libtool script from the same -# release of libtool. -func_check_version_match () -{ - if test "$package_revision" != "$macro_revision"; then - if test "$VERSION" != "$macro_version"; then - if test -z "$macro_version"; then - cat >&2 <<_LT_EOF -$progname: Version mismatch error. This is $PACKAGE $VERSION, but the -$progname: definition of this LT_INIT comes from an older release. -$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION -$progname: and run autoconf again. -_LT_EOF - else - cat >&2 <<_LT_EOF -$progname: Version mismatch error. This is $PACKAGE $VERSION, but the -$progname: definition of this LT_INIT comes from $PACKAGE $macro_version. -$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION -$progname: and run autoconf again. -_LT_EOF - fi - else - cat >&2 <<_LT_EOF -$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, -$progname: but the definition of this LT_INIT comes from revision $macro_revision. -$progname: You should recreate aclocal.m4 with macros from revision $package_revision -$progname: of $PACKAGE $VERSION and run autoconf again. -_LT_EOF - fi - - exit $EXIT_MISMATCH - fi -} - - -## ----------- ## -## Main. ## -## ----------- ## - -$opt_help || { - # Sanity checks first: - func_check_version_match - - if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then - func_fatal_configuration "not configured to build any kind of library" - fi - - test -z "$mode" && func_fatal_error "error: you must specify a MODE." - - - # Darwin sucks - eval std_shrext=\"$shrext_cmds\" - - - # Only execute mode is allowed to have -dlopen flags. - if test -n "$execute_dlfiles" && test "$mode" != execute; then - func_error "unrecognized option \`-dlopen'" - $ECHO "$help" 1>&2 - exit $EXIT_FAILURE - fi - - # Change the help message to a mode-specific one. - generic_help="$help" - help="Try \`$progname --help --mode=$mode' for more information." -} - - -# func_lalib_p file -# True iff FILE is a libtool `.la' library or `.lo' object file. -# This function is only a basic sanity check; it will hardly flush out -# determined imposters. -func_lalib_p () -{ - test -f "$1" && - $SED -e 4q "$1" 2>/dev/null \ - | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 -} - -# func_lalib_unsafe_p file -# True iff FILE is a libtool `.la' library or `.lo' object file. -# This function implements the same check as func_lalib_p without -# resorting to external programs. To this end, it redirects stdin and -# closes it afterwards, without saving the original file descriptor. -# As a safety measure, use it only where a negative result would be -# fatal anyway. Works if `file' does not exist. -func_lalib_unsafe_p () -{ - lalib_p=no - if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then - for lalib_p_l in 1 2 3 4 - do - read lalib_p_line - case "$lalib_p_line" in - \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; - esac - done - exec 0<&5 5<&- - fi - test "$lalib_p" = yes -} - -# func_ltwrapper_script_p file -# True iff FILE is a libtool wrapper script -# This function is only a basic sanity check; it will hardly flush out -# determined imposters. -func_ltwrapper_script_p () -{ - func_lalib_p "$1" -} - -# func_ltwrapper_executable_p file -# True iff FILE is a libtool wrapper executable -# This function is only a basic sanity check; it will hardly flush out -# determined imposters. -func_ltwrapper_executable_p () -{ - func_ltwrapper_exec_suffix= - case $1 in - *.exe) ;; - *) func_ltwrapper_exec_suffix=.exe ;; - esac - $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 -} - -# func_ltwrapper_scriptname file -# Assumes file is an ltwrapper_executable -# uses $file to determine the appropriate filename for a -# temporary ltwrapper_script. -func_ltwrapper_scriptname () -{ - func_ltwrapper_scriptname_result="" - if func_ltwrapper_executable_p "$1"; then - func_dirname_and_basename "$1" "" "." - func_stripname '' '.exe' "$func_basename_result" - func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper" - fi -} - -# func_ltwrapper_p file -# True iff FILE is a libtool wrapper script or wrapper executable -# This function is only a basic sanity check; it will hardly flush out -# determined imposters. -func_ltwrapper_p () -{ - func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" -} - - -# func_execute_cmds commands fail_cmd -# Execute tilde-delimited COMMANDS. -# If FAIL_CMD is given, eval that upon failure. -# FAIL_CMD may read-access the current command in variable CMD! -func_execute_cmds () -{ - $opt_debug - save_ifs=$IFS; IFS='~' - for cmd in $1; do - IFS=$save_ifs - eval cmd=\"$cmd\" - func_show_eval "$cmd" "${2-:}" - done - IFS=$save_ifs -} - - -# func_source file -# Source FILE, adding directory component if necessary. -# Note that it is not necessary on cygwin/mingw to append a dot to -# FILE even if both FILE and FILE.exe exist: automatic-append-.exe -# behavior happens only for exec(3), not for open(2)! Also, sourcing -# `FILE.' does not work on cygwin managed mounts. -func_source () -{ - $opt_debug - case $1 in - */* | *\\*) . "$1" ;; - *) . "./$1" ;; - esac -} - - -# func_infer_tag arg -# Infer tagged configuration to use if any are available and -# if one wasn't chosen via the "--tag" command line option. -# Only attempt this if the compiler in the base compile -# command doesn't match the default compiler. -# arg is usually of the form 'gcc ...' -func_infer_tag () -{ - $opt_debug - if test -n "$available_tags" && test -z "$tagname"; then - CC_quoted= - for arg in $CC; do - func_quote_for_eval "$arg" - CC_quoted="$CC_quoted $func_quote_for_eval_result" - done - case $@ in - # Blanks in the command may have been stripped by the calling shell, - # but not from the CC environment variable when configure was run. - " $CC "* | "$CC "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*) ;; - # Blanks at the start of $base_compile will cause this to fail - # if we don't check for them as well. - *) - for z in $available_tags; do - if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then - # Evaluate the configuration. - eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" - CC_quoted= - for arg in $CC; do - # Double-quote args containing other shell metacharacters. - func_quote_for_eval "$arg" - CC_quoted="$CC_quoted $func_quote_for_eval_result" - done - case "$@ " in - " $CC "* | "$CC "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*) - # The compiler in the base compile command matches - # the one in the tagged configuration. - # Assume this is the tagged configuration we want. - tagname=$z - break - ;; - esac - fi - done - # If $tagname still isn't set, then no tagged configuration - # was found and let the user know that the "--tag" command - # line option must be used. - if test -z "$tagname"; then - func_echo "unable to infer tagged configuration" - func_fatal_error "specify a tag with \`--tag'" -# else -# func_verbose "using $tagname tagged configuration" - fi - ;; - esac - fi -} - - - -# func_write_libtool_object output_name pic_name nonpic_name -# Create a libtool object file (analogous to a ".la" file), -# but don't create it if we're doing a dry run. -func_write_libtool_object () -{ - write_libobj=${1} - if test "$build_libtool_libs" = yes; then - write_lobj=\'${2}\' - else - write_lobj=none - fi - - if test "$build_old_libs" = yes; then - write_oldobj=\'${3}\' - else - write_oldobj=none - fi - - $opt_dry_run || { - cat >${write_libobj}T <?"'"'"' &()|`$[]' \ - && func_warning "libobj name \`$libobj' may not contain shell special characters." - func_dirname_and_basename "$obj" "/" "" - objname="$func_basename_result" - xdir="$func_dirname_result" - lobj=${xdir}$objdir/$objname - - test -z "$base_compile" && \ - func_fatal_help "you must specify a compilation command" - - # Delete any leftover library objects. - if test "$build_old_libs" = yes; then - removelist="$obj $lobj $libobj ${libobj}T" - else - removelist="$lobj $libobj ${libobj}T" - fi - - # On Cygwin there's no "real" PIC flag so we must build both object types - case $host_os in - cygwin* | mingw* | pw32* | os2* | cegcc*) - pic_mode=default - ;; - esac - if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then - # non-PIC code in shared libraries is not supported - pic_mode=default - fi - - # Calculate the filename of the output object if compiler does - # not support -o with -c - if test "$compiler_c_o" = no; then - output_obj=`$ECHO "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext} - lockfile="$output_obj.lock" - else - output_obj= - need_locks=no - lockfile= - fi - - # Lock this critical section if it is needed - # We use this script file to make the link, it avoids creating a new file - if test "$need_locks" = yes; then - until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do - func_echo "Waiting for $lockfile to be removed" - sleep 2 - done - elif test "$need_locks" = warn; then - if test -f "$lockfile"; then - $ECHO "\ -*** ERROR, $lockfile exists and contains: -`cat $lockfile 2>/dev/null` - -This indicates that another process is trying to use the same -temporary object file, and libtool could not work around it because -your compiler does not support \`-c' and \`-o' together. If you -repeat this compilation, it may succeed, by chance, but you had better -avoid parallel builds (make -j) in this platform, or get a better -compiler." - - $opt_dry_run || $RM $removelist - exit $EXIT_FAILURE - fi - removelist="$removelist $output_obj" - $ECHO "$srcfile" > "$lockfile" - fi - - $opt_dry_run || $RM $removelist - removelist="$removelist $lockfile" - trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 - - if test -n "$fix_srcfile_path"; then - eval srcfile=\"$fix_srcfile_path\" - fi - func_quote_for_eval "$srcfile" - qsrcfile=$func_quote_for_eval_result - - # Only build a PIC object if we are building libtool libraries. - if test "$build_libtool_libs" = yes; then - # Without this assignment, base_compile gets emptied. - fbsd_hideous_sh_bug=$base_compile - - if test "$pic_mode" != no; then - command="$base_compile $qsrcfile $pic_flag" - else - # Don't build PIC code - command="$base_compile $qsrcfile" - fi - - func_mkdir_p "$xdir$objdir" - - if test -z "$output_obj"; then - # Place PIC objects in $objdir - command="$command -o $lobj" - fi - - func_show_eval_locale "$command" \ - 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' - - if test "$need_locks" = warn && - test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then - $ECHO "\ -*** ERROR, $lockfile contains: -`cat $lockfile 2>/dev/null` - -but it should contain: -$srcfile - -This indicates that another process is trying to use the same -temporary object file, and libtool could not work around it because -your compiler does not support \`-c' and \`-o' together. If you -repeat this compilation, it may succeed, by chance, but you had better -avoid parallel builds (make -j) in this platform, or get a better -compiler." - - $opt_dry_run || $RM $removelist - exit $EXIT_FAILURE - fi - - # Just move the object if needed, then go on to compile the next one - if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then - func_show_eval '$MV "$output_obj" "$lobj"' \ - 'error=$?; $opt_dry_run || $RM $removelist; exit $error' - fi - - # Allow error messages only from the first compilation. - if test "$suppress_opt" = yes; then - suppress_output=' >/dev/null 2>&1' - fi - fi - - # Only build a position-dependent object if we build old libraries. - if test "$build_old_libs" = yes; then - if test "$pic_mode" != yes; then - # Don't build PIC code - command="$base_compile $qsrcfile$pie_flag" - else - command="$base_compile $qsrcfile $pic_flag" - fi - if test "$compiler_c_o" = yes; then - command="$command -o $obj" - fi - - # Suppress compiler output if we already did a PIC compilation. - command="$command$suppress_output" - func_show_eval_locale "$command" \ - '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' - - if test "$need_locks" = warn && - test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then - $ECHO "\ -*** ERROR, $lockfile contains: -`cat $lockfile 2>/dev/null` - -but it should contain: -$srcfile - -This indicates that another process is trying to use the same -temporary object file, and libtool could not work around it because -your compiler does not support \`-c' and \`-o' together. If you -repeat this compilation, it may succeed, by chance, but you had better -avoid parallel builds (make -j) in this platform, or get a better -compiler." - - $opt_dry_run || $RM $removelist - exit $EXIT_FAILURE - fi - - # Just move the object if needed - if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then - func_show_eval '$MV "$output_obj" "$obj"' \ - 'error=$?; $opt_dry_run || $RM $removelist; exit $error' - fi - fi - - $opt_dry_run || { - func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" - - # Unlock the critical section if it was locked - if test "$need_locks" != no; then - removelist=$lockfile - $RM "$lockfile" - fi - } - - exit $EXIT_SUCCESS -} - -$opt_help || { -test "$mode" = compile && func_mode_compile ${1+"$@"} -} - -func_mode_help () -{ - # We need to display help for each of the modes. - case $mode in - "") - # Generic help is extracted from the usage comments - # at the start of this file. - func_help - ;; - - clean) - $ECHO \ -"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... - -Remove files from the build directory. - -RM is the name of the program to use to delete files associated with each FILE -(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed -to RM. - -If FILE is a libtool library, object or program, all the files associated -with it are deleted. Otherwise, only FILE itself is deleted using RM." - ;; - - compile) - $ECHO \ -"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE - -Compile a source file into a libtool library object. - -This mode accepts the following additional options: - - -o OUTPUT-FILE set the output file name to OUTPUT-FILE - -no-suppress do not suppress compiler output for multiple passes - -prefer-pic try to building PIC objects only - -prefer-non-pic try to building non-PIC objects only - -shared do not build a \`.o' file suitable for static linking - -static only build a \`.o' file suitable for static linking - -COMPILE-COMMAND is a command to be used in creating a \`standard' object file -from the given SOURCEFILE. - -The output file name is determined by removing the directory component from -SOURCEFILE, then substituting the C source code suffix \`.c' with the -library object suffix, \`.lo'." - ;; - - execute) - $ECHO \ -"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... - -Automatically set library path, then run a program. - -This mode accepts the following additional options: - - -dlopen FILE add the directory containing FILE to the library path - -This mode sets the library path environment variable according to \`-dlopen' -flags. - -If any of the ARGS are libtool executable wrappers, then they are translated -into their corresponding uninstalled binary, and any of their required library -directories are added to the library path. - -Then, COMMAND is executed, with ARGS as arguments." - ;; - - finish) - $ECHO \ -"Usage: $progname [OPTION]... --mode=finish [LIBDIR]... - -Complete the installation of libtool libraries. - -Each LIBDIR is a directory that contains libtool libraries. - -The commands that this mode executes may require superuser privileges. Use -the \`--dry-run' option if you just want to see what would be executed." - ;; - - install) - $ECHO \ -"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... - -Install executables or libraries. - -INSTALL-COMMAND is the installation command. The first component should be -either the \`install' or \`cp' program. - -The following components of INSTALL-COMMAND are treated specially: - - -inst-prefix PREFIX-DIR Use PREFIX-DIR as a staging area for installation - -The rest of the components are interpreted as arguments to that command (only -BSD-compatible install options are recognized)." - ;; - - link) - $ECHO \ -"Usage: $progname [OPTION]... --mode=link LINK-COMMAND... - -Link object files or libraries together to form another library, or to -create an executable program. - -LINK-COMMAND is a command using the C compiler that you would use to create -a program from several object files. - -The following components of LINK-COMMAND are treated specially: - - -all-static do not do any dynamic linking at all - -avoid-version do not add a version suffix if possible - -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime - -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols - -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) - -export-symbols SYMFILE - try to export only the symbols listed in SYMFILE - -export-symbols-regex REGEX - try to export only the symbols matching REGEX - -LLIBDIR search LIBDIR for required installed libraries - -lNAME OUTPUT-FILE requires the installed library libNAME - -module build a library that can dlopened - -no-fast-install disable the fast-install mode - -no-install link a not-installable executable - -no-undefined declare that a library does not refer to external symbols - -o OUTPUT-FILE create OUTPUT-FILE from the specified objects - -objectlist FILE Use a list of object files found in FILE to specify objects - -precious-files-regex REGEX - don't remove output files matching REGEX - -release RELEASE specify package release information - -rpath LIBDIR the created library will eventually be installed in LIBDIR - -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries - -shared only do dynamic linking of libtool libraries - -shrext SUFFIX override the standard shared library file extension - -static do not do any dynamic linking of uninstalled libtool libraries - -static-libtool-libs - do not do any dynamic linking of libtool libraries - -version-info CURRENT[:REVISION[:AGE]] - specify library version info [each variable defaults to 0] - -weak LIBNAME declare that the target provides the LIBNAME interface - -All other options (arguments beginning with \`-') are ignored. - -Every other argument is treated as a filename. Files ending in \`.la' are -treated as uninstalled libtool libraries, other files are standard or library -object files. - -If the OUTPUT-FILE ends in \`.la', then a libtool library is created, -only library objects (\`.lo' files) may be specified, and \`-rpath' is -required, except when creating a convenience library. - -If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created -using \`ar' and \`ranlib', or on Windows using \`lib'. - -If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file -is created, otherwise an executable program is created." - ;; - - uninstall) - $ECHO \ -"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... - -Remove libraries from an installation directory. - -RM is the name of the program to use to delete files associated with each FILE -(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed -to RM. - -If FILE is a libtool library, all the files associated with it are deleted. -Otherwise, only FILE itself is deleted using RM." - ;; - - *) - func_fatal_help "invalid operation mode \`$mode'" - ;; - esac - - $ECHO - $ECHO "Try \`$progname --help' for more information about other modes." - - exit $? -} - - # Now that we've collected a possible --mode arg, show help if necessary - $opt_help && func_mode_help - - -# func_mode_execute arg... -func_mode_execute () -{ - $opt_debug - # The first argument is the command name. - cmd="$nonopt" - test -z "$cmd" && \ - func_fatal_help "you must specify a COMMAND" - - # Handle -dlopen flags immediately. - for file in $execute_dlfiles; do - test -f "$file" \ - || func_fatal_help "\`$file' is not a file" - - dir= - case $file in - *.la) - # Check to see that this really is a libtool archive. - func_lalib_unsafe_p "$file" \ - || func_fatal_help "\`$lib' is not a valid libtool archive" - - # Read the libtool library. - dlname= - library_names= - func_source "$file" - - # Skip this library if it cannot be dlopened. - if test -z "$dlname"; then - # Warn if it was a shared library. - test -n "$library_names" && \ - func_warning "\`$file' was not linked with \`-export-dynamic'" - continue - fi - - func_dirname "$file" "" "." - dir="$func_dirname_result" - - if test -f "$dir/$objdir/$dlname"; then - dir="$dir/$objdir" - else - if test ! -f "$dir/$dlname"; then - func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" - fi - fi - ;; - - *.lo) - # Just add the directory containing the .lo file. - func_dirname "$file" "" "." - dir="$func_dirname_result" - ;; - - *) - func_warning "\`-dlopen' is ignored for non-libtool libraries and objects" - continue - ;; - esac - - # Get the absolute pathname. - absdir=`cd "$dir" && pwd` - test -n "$absdir" && dir="$absdir" - - # Now add the directory to shlibpath_var. - if eval "test -z \"\$$shlibpath_var\""; then - eval "$shlibpath_var=\"\$dir\"" - else - eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" - fi - done - - # This variable tells wrapper scripts just to set shlibpath_var - # rather than running their programs. - libtool_execute_magic="$magic" - - # Check if any of the arguments is a wrapper script. - args= - for file - do - case $file in - -*) ;; - *) - # Do a test to see if this is really a libtool program. - if func_ltwrapper_script_p "$file"; then - func_source "$file" - # Transform arg to wrapped name. - file="$progdir/$program" - elif func_ltwrapper_executable_p "$file"; then - func_ltwrapper_scriptname "$file" - func_source "$func_ltwrapper_scriptname_result" - # Transform arg to wrapped name. - file="$progdir/$program" - fi - ;; - esac - # Quote arguments (to preserve shell metacharacters). - func_quote_for_eval "$file" - args="$args $func_quote_for_eval_result" - done - - if test "X$opt_dry_run" = Xfalse; then - if test -n "$shlibpath_var"; then - # Export the shlibpath_var. - eval "export $shlibpath_var" - fi - - # Restore saved environment variables - for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES - do - eval "if test \"\${save_$lt_var+set}\" = set; then - $lt_var=\$save_$lt_var; export $lt_var - else - $lt_unset $lt_var - fi" - done - - # Now prepare to actually exec the command. - exec_cmd="\$cmd$args" - else - # Display what would be done. - if test -n "$shlibpath_var"; then - eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" - $ECHO "export $shlibpath_var" - fi - $ECHO "$cmd$args" - exit $EXIT_SUCCESS - fi -} - -test "$mode" = execute && func_mode_execute ${1+"$@"} - - -# func_mode_finish arg... -func_mode_finish () -{ - $opt_debug - libdirs="$nonopt" - admincmds= - - if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then - for dir - do - libdirs="$libdirs $dir" - done - - for libdir in $libdirs; do - if test -n "$finish_cmds"; then - # Do each command in the finish commands. - func_execute_cmds "$finish_cmds" 'admincmds="$admincmds -'"$cmd"'"' - fi - if test -n "$finish_eval"; then - # Do the single finish_eval. - eval cmds=\"$finish_eval\" - $opt_dry_run || eval "$cmds" || admincmds="$admincmds - $cmds" - fi - done - fi - - # Exit here if they wanted silent mode. - $opt_silent && exit $EXIT_SUCCESS - - $ECHO "X----------------------------------------------------------------------" | $Xsed - $ECHO "Libraries have been installed in:" - for libdir in $libdirs; do - $ECHO " $libdir" - done - $ECHO - $ECHO "If you ever happen to want to link against installed libraries" - $ECHO "in a given directory, LIBDIR, you must either use libtool, and" - $ECHO "specify the full pathname of the library, or use the \`-LLIBDIR'" - $ECHO "flag during linking and do at least one of the following:" - if test -n "$shlibpath_var"; then - $ECHO " - add LIBDIR to the \`$shlibpath_var' environment variable" - $ECHO " during execution" - fi - if test -n "$runpath_var"; then - $ECHO " - add LIBDIR to the \`$runpath_var' environment variable" - $ECHO " during linking" - fi - if test -n "$hardcode_libdir_flag_spec"; then - libdir=LIBDIR - eval flag=\"$hardcode_libdir_flag_spec\" - - $ECHO " - use the \`$flag' linker flag" - fi - if test -n "$admincmds"; then - $ECHO " - have your system administrator run these commands:$admincmds" - fi - if test -f /etc/ld.so.conf; then - $ECHO " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" - fi - $ECHO - - $ECHO "See any operating system documentation about shared libraries for" - case $host in - solaris2.[6789]|solaris2.1[0-9]) - $ECHO "more information, such as the ld(1), crle(1) and ld.so(8) manual" - $ECHO "pages." - ;; - *) - $ECHO "more information, such as the ld(1) and ld.so(8) manual pages." - ;; - esac - $ECHO "X----------------------------------------------------------------------" | $Xsed - exit $EXIT_SUCCESS -} - -test "$mode" = finish && func_mode_finish ${1+"$@"} - - -# func_mode_install arg... -func_mode_install () -{ - $opt_debug - # There may be an optional sh(1) argument at the beginning of - # install_prog (especially on Windows NT). - if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || - # Allow the use of GNU shtool's install command. - $ECHO "X$nonopt" | $GREP shtool >/dev/null; then - # Aesthetically quote it. - func_quote_for_eval "$nonopt" - install_prog="$func_quote_for_eval_result " - arg=$1 - shift - else - install_prog= - arg=$nonopt - fi - - # The real first argument should be the name of the installation program. - # Aesthetically quote it. - func_quote_for_eval "$arg" - install_prog="$install_prog$func_quote_for_eval_result" - - # We need to accept at least all the BSD install flags. - dest= - files= - opts= - prev= - install_type= - isdir=no - stripme= - for arg - do - if test -n "$dest"; then - files="$files $dest" - dest=$arg - continue - fi - - case $arg in - -d) isdir=yes ;; - -f) - case " $install_prog " in - *[\\\ /]cp\ *) ;; - *) prev=$arg ;; - esac - ;; - -g | -m | -o) - prev=$arg - ;; - -s) - stripme=" -s" - continue - ;; - -*) - ;; - *) - # If the previous option needed an argument, then skip it. - if test -n "$prev"; then - prev= - else - dest=$arg - continue - fi - ;; - esac - - # Aesthetically quote the argument. - func_quote_for_eval "$arg" - install_prog="$install_prog $func_quote_for_eval_result" - done - - test -z "$install_prog" && \ - func_fatal_help "you must specify an install program" - - test -n "$prev" && \ - func_fatal_help "the \`$prev' option requires an argument" - - if test -z "$files"; then - if test -z "$dest"; then - func_fatal_help "no file or destination specified" - else - func_fatal_help "you must specify a destination" - fi - fi - - # Strip any trailing slash from the destination. - func_stripname '' '/' "$dest" - dest=$func_stripname_result - - # Check to see that the destination is a directory. - test -d "$dest" && isdir=yes - if test "$isdir" = yes; then - destdir="$dest" - destname= - else - func_dirname_and_basename "$dest" "" "." - destdir="$func_dirname_result" - destname="$func_basename_result" - - # Not a directory, so check to see that there is only one file specified. - set dummy $files; shift - test "$#" -gt 1 && \ - func_fatal_help "\`$dest' is not a directory" - fi - case $destdir in - [\\/]* | [A-Za-z]:[\\/]*) ;; - *) - for file in $files; do - case $file in - *.lo) ;; - *) - func_fatal_help "\`$destdir' must be an absolute directory name" - ;; - esac - done - ;; - esac - - # This variable tells wrapper scripts just to set variables rather - # than running their programs. - libtool_install_magic="$magic" - - staticlibs= - future_libdirs= - current_libdirs= - for file in $files; do - - # Do each installation. - case $file in - *.$libext) - # Do the static libraries later. - staticlibs="$staticlibs $file" - ;; - - *.la) - # Check to see that this really is a libtool archive. - func_lalib_unsafe_p "$file" \ - || func_fatal_help "\`$file' is not a valid libtool archive" - - library_names= - old_library= - relink_command= - func_source "$file" - - # Add the libdir to current_libdirs if it is the destination. - if test "X$destdir" = "X$libdir"; then - case "$current_libdirs " in - *" $libdir "*) ;; - *) current_libdirs="$current_libdirs $libdir" ;; - esac - else - # Note the libdir as a future libdir. - case "$future_libdirs " in - *" $libdir "*) ;; - *) future_libdirs="$future_libdirs $libdir" ;; - esac - fi - - func_dirname "$file" "/" "" - dir="$func_dirname_result" - dir="$dir$objdir" - - if test -n "$relink_command"; then - # Determine the prefix the user has applied to our future dir. - inst_prefix_dir=`$ECHO "X$destdir" | $Xsed -e "s%$libdir\$%%"` - - # Don't allow the user to place us outside of our expected - # location b/c this prevents finding dependent libraries that - # are installed to the same prefix. - # At present, this check doesn't affect windows .dll's that - # are installed into $libdir/../bin (currently, that works fine) - # but it's something to keep an eye on. - test "$inst_prefix_dir" = "$destdir" && \ - func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir" - - if test -n "$inst_prefix_dir"; then - # Stick the inst_prefix_dir data into the link command. - relink_command=`$ECHO "X$relink_command" | $Xsed -e "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` - else - relink_command=`$ECHO "X$relink_command" | $Xsed -e "s%@inst_prefix_dir@%%"` - fi - - func_warning "relinking \`$file'" - func_show_eval "$relink_command" \ - 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"' - fi - - # See the names of the shared library. - set dummy $library_names; shift - if test -n "$1"; then - realname="$1" - shift - - srcname="$realname" - test -n "$relink_command" && srcname="$realname"T - - # Install the shared library and build the symlinks. - func_show_eval "$install_prog $dir/$srcname $destdir/$realname" \ - 'exit $?' - tstripme="$stripme" - case $host_os in - cygwin* | mingw* | pw32* | cegcc*) - case $realname in - *.dll.a) - tstripme="" - ;; - esac - ;; - esac - if test -n "$tstripme" && test -n "$striplib"; then - func_show_eval "$striplib $destdir/$realname" 'exit $?' - fi - - if test "$#" -gt 0; then - # Delete the old symlinks, and create new ones. - # Try `ln -sf' first, because the `ln' binary might depend on - # the symlink we replace! Solaris /bin/ln does not understand -f, - # so we also need to try rm && ln -s. - for linkname - do - test "$linkname" != "$realname" \ - && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" - done - fi - - # Do each command in the postinstall commands. - lib="$destdir/$realname" - func_execute_cmds "$postinstall_cmds" 'exit $?' - fi - - # Install the pseudo-library for information purposes. - func_basename "$file" - name="$func_basename_result" - instname="$dir/$name"i - func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' - - # Maybe install the static library, too. - test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library" - ;; - - *.lo) - # Install (i.e. copy) a libtool object. - - # Figure out destination file name, if it wasn't already specified. - if test -n "$destname"; then - destfile="$destdir/$destname" - else - func_basename "$file" - destfile="$func_basename_result" - destfile="$destdir/$destfile" - fi - - # Deduce the name of the destination old-style object file. - case $destfile in - *.lo) - func_lo2o "$destfile" - staticdest=$func_lo2o_result - ;; - *.$objext) - staticdest="$destfile" - destfile= - ;; - *) - func_fatal_help "cannot copy a libtool object to \`$destfile'" - ;; - esac - - # Install the libtool object if requested. - test -n "$destfile" && \ - func_show_eval "$install_prog $file $destfile" 'exit $?' - - # Install the old object if enabled. - if test "$build_old_libs" = yes; then - # Deduce the name of the old-style object file. - func_lo2o "$file" - staticobj=$func_lo2o_result - func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' - fi - exit $EXIT_SUCCESS - ;; - - *) - # Figure out destination file name, if it wasn't already specified. - if test -n "$destname"; then - destfile="$destdir/$destname" - else - func_basename "$file" - destfile="$func_basename_result" - destfile="$destdir/$destfile" - fi - - # If the file is missing, and there is a .exe on the end, strip it - # because it is most likely a libtool script we actually want to - # install - stripped_ext="" - case $file in - *.exe) - if test ! -f "$file"; then - func_stripname '' '.exe' "$file" - file=$func_stripname_result - stripped_ext=".exe" - fi - ;; - esac - - # Do a test to see if this is really a libtool program. - case $host in - *cygwin* | *mingw*) - if func_ltwrapper_executable_p "$file"; then - func_ltwrapper_scriptname "$file" - wrapper=$func_ltwrapper_scriptname_result - else - func_stripname '' '.exe' "$file" - wrapper=$func_stripname_result - fi - ;; - *) - wrapper=$file - ;; - esac - if func_ltwrapper_script_p "$wrapper"; then - notinst_deplibs= - relink_command= - - func_source "$wrapper" - - # Check the variables that should have been set. - test -z "$generated_by_libtool_version" && \ - func_fatal_error "invalid libtool wrapper script \`$wrapper'" - - finalize=yes - for lib in $notinst_deplibs; do - # Check to see that each library is installed. - libdir= - if test -f "$lib"; then - func_source "$lib" - fi - libfile="$libdir/"`$ECHO "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test - if test -n "$libdir" && test ! -f "$libfile"; then - func_warning "\`$lib' has not been installed in \`$libdir'" - finalize=no - fi - done - - relink_command= - func_source "$wrapper" - - outputname= - if test "$fast_install" = no && test -n "$relink_command"; then - $opt_dry_run || { - if test "$finalize" = yes; then - tmpdir=`func_mktempdir` - func_basename "$file$stripped_ext" - file="$func_basename_result" - outputname="$tmpdir/$file" - # Replace the output file specification. - relink_command=`$ECHO "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'` - - $opt_silent || { - func_quote_for_expand "$relink_command" - eval "func_echo $func_quote_for_expand_result" - } - if eval "$relink_command"; then : - else - func_error "error: relink \`$file' with the above command before installing it" - $opt_dry_run || ${RM}r "$tmpdir" - continue - fi - file="$outputname" - else - func_warning "cannot relink \`$file'" - fi - } - else - # Install the binary that we compiled earlier. - file=`$ECHO "X$file$stripped_ext" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"` - fi - fi - - # remove .exe since cygwin /usr/bin/install will append another - # one anyway - case $install_prog,$host in - */usr/bin/install*,*cygwin*) - case $file:$destfile in - *.exe:*.exe) - # this is ok - ;; - *.exe:*) - destfile=$destfile.exe - ;; - *:*.exe) - func_stripname '' '.exe' "$destfile" - destfile=$func_stripname_result - ;; - esac - ;; - esac - func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' - $opt_dry_run || if test -n "$outputname"; then - ${RM}r "$tmpdir" - fi - ;; - esac - done - - for file in $staticlibs; do - func_basename "$file" - name="$func_basename_result" - - # Set up the ranlib parameters. - oldlib="$destdir/$name" - - func_show_eval "$install_prog \$file \$oldlib" 'exit $?' - - if test -n "$stripme" && test -n "$old_striplib"; then - func_show_eval "$old_striplib $oldlib" 'exit $?' - fi - - # Do each command in the postinstall commands. - func_execute_cmds "$old_postinstall_cmds" 'exit $?' - done - - test -n "$future_libdirs" && \ - func_warning "remember to run \`$progname --finish$future_libdirs'" - - if test -n "$current_libdirs"; then - # Maybe just do a dry run. - $opt_dry_run && current_libdirs=" -n$current_libdirs" - exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' - else - exit $EXIT_SUCCESS - fi -} - -test "$mode" = install && func_mode_install ${1+"$@"} - - -# func_generate_dlsyms outputname originator pic_p -# Extract symbols from dlprefiles and create ${outputname}S.o with -# a dlpreopen symbol table. -func_generate_dlsyms () -{ - $opt_debug - my_outputname="$1" - my_originator="$2" - my_pic_p="${3-no}" - my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'` - my_dlsyms= - - if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then - if test -n "$NM" && test -n "$global_symbol_pipe"; then - my_dlsyms="${my_outputname}S.c" - else - func_error "not configured to extract global symbols from dlpreopened files" - fi - fi - - if test -n "$my_dlsyms"; then - case $my_dlsyms in - "") ;; - *.c) - # Discover the nlist of each of the dlfiles. - nlist="$output_objdir/${my_outputname}.nm" - - func_show_eval "$RM $nlist ${nlist}S ${nlist}T" - - # Parse the name list into a source file. - func_verbose "creating $output_objdir/$my_dlsyms" - - $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ -/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */ -/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */ - -#ifdef __cplusplus -extern \"C\" { -#endif - -/* External symbol declarations for the compiler. */\ -" - - if test "$dlself" = yes; then - func_verbose "generating symbol list for \`$output'" - - $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" - - # Add our own program objects to the symbol list. - progfiles=`$ECHO "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` - for progfile in $progfiles; do - func_verbose "extracting global C symbols from \`$progfile'" - $opt_dry_run || eval "$NM $progfile | $global_symbol_pipe >> '$nlist'" - done - - if test -n "$exclude_expsyms"; then - $opt_dry_run || { - eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' - eval '$MV "$nlist"T "$nlist"' - } - fi - - if test -n "$export_symbols_regex"; then - $opt_dry_run || { - eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' - eval '$MV "$nlist"T "$nlist"' - } - fi - - # Prepare the list of exported symbols - if test -z "$export_symbols"; then - export_symbols="$output_objdir/$outputname.exp" - $opt_dry_run || { - $RM $export_symbols - eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' - case $host in - *cygwin* | *mingw* | *cegcc* ) - eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' - eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' - ;; - esac - } - else - $opt_dry_run || { - eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' - eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' - eval '$MV "$nlist"T "$nlist"' - case $host in - *cygwin | *mingw* | *cegcc* ) - eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' - eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' - ;; - esac - } - fi - fi - - for dlprefile in $dlprefiles; do - func_verbose "extracting global C symbols from \`$dlprefile'" - func_basename "$dlprefile" - name="$func_basename_result" - $opt_dry_run || { - eval '$ECHO ": $name " >> "$nlist"' - eval "$NM $dlprefile 2>/dev/null | $global_symbol_pipe >> '$nlist'" - } - done - - $opt_dry_run || { - # Make sure we have at least an empty file. - test -f "$nlist" || : > "$nlist" - - if test -n "$exclude_expsyms"; then - $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T - $MV "$nlist"T "$nlist" - fi - - # Try sorting and uniquifying the output. - if $GREP -v "^: " < "$nlist" | - if sort -k 3 /dev/null 2>&1; then - sort -k 3 - else - sort +2 - fi | - uniq > "$nlist"S; then - : - else - $GREP -v "^: " < "$nlist" > "$nlist"S - fi - - if test -f "$nlist"S; then - eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' - else - $ECHO '/* NONE */' >> "$output_objdir/$my_dlsyms" - fi - - $ECHO >> "$output_objdir/$my_dlsyms" "\ - -/* The mapping between symbol names and symbols. */ -typedef struct { - const char *name; - void *address; -} lt_dlsymlist; -" - case $host in - *cygwin* | *mingw* | *cegcc* ) - $ECHO >> "$output_objdir/$my_dlsyms" "\ -/* DATA imports from DLLs on WIN32 con't be const, because - runtime relocations are performed -- see ld's documentation - on pseudo-relocs. */" - lt_dlsym_const= ;; - *osf5*) - echo >> "$output_objdir/$my_dlsyms" "\ -/* This system does not cope well with relocations in const data */" - lt_dlsym_const= ;; - *) - lt_dlsym_const=const ;; - esac - - $ECHO >> "$output_objdir/$my_dlsyms" "\ -extern $lt_dlsym_const lt_dlsymlist -lt_${my_prefix}_LTX_preloaded_symbols[]; -$lt_dlsym_const lt_dlsymlist -lt_${my_prefix}_LTX_preloaded_symbols[] = -{\ - { \"$my_originator\", (void *) 0 }," - - case $need_lib_prefix in - no) - eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" - ;; - *) - eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" - ;; - esac - $ECHO >> "$output_objdir/$my_dlsyms" "\ - {0, (void *) 0} -}; - -/* This works around a problem in FreeBSD linker */ -#ifdef FREEBSD_WORKAROUND -static const void *lt_preloaded_setup() { - return lt_${my_prefix}_LTX_preloaded_symbols; -} -#endif - -#ifdef __cplusplus -} -#endif\ -" - } # !$opt_dry_run - - pic_flag_for_symtable= - case "$compile_command " in - *" -static "*) ;; - *) - case $host in - # compiling the symbol table file with pic_flag works around - # a FreeBSD bug that causes programs to crash when -lm is - # linked before any other PIC object. But we must not use - # pic_flag when linking with -static. The problem exists in - # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. - *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) - pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; - *-*-hpux*) - pic_flag_for_symtable=" $pic_flag" ;; - *) - if test "X$my_pic_p" != Xno; then - pic_flag_for_symtable=" $pic_flag" - fi - ;; - esac - ;; - esac - symtab_cflags= - for arg in $LTCFLAGS; do - case $arg in - -pie | -fpie | -fPIE) ;; - *) symtab_cflags="$symtab_cflags $arg" ;; - esac - done - - # Now compile the dynamic symbol file. - func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' - - # Clean up the generated files. - func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"' - - # Transform the symbol file into the correct name. - symfileobj="$output_objdir/${my_outputname}S.$objext" - case $host in - *cygwin* | *mingw* | *cegcc* ) - if test -f "$output_objdir/$my_outputname.def"; then - compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` - finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` - else - compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` - finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` - fi - ;; - *) - compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` - finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` - ;; - esac - ;; - *) - func_fatal_error "unknown suffix for \`$my_dlsyms'" - ;; - esac - else - # We keep going just in case the user didn't refer to - # lt_preloaded_symbols. The linker will fail if global_symbol_pipe - # really was required. - - # Nullify the symbol file. - compile_command=`$ECHO "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"` - finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"` - fi -} - -# func_win32_libid arg -# return the library type of file 'arg' -# -# Need a lot of goo to handle *both* DLLs and import libs -# Has to be a shell function in order to 'eat' the argument -# that is supplied when $file_magic_command is called. -func_win32_libid () -{ - $opt_debug - win32_libid_type="unknown" - win32_fileres=`file -L $1 2>/dev/null` - case $win32_fileres in - *ar\ archive\ import\ library*) # definitely import - win32_libid_type="x86 archive import" - ;; - *ar\ archive*) # could be an import, or static - if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | - $EGREP 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then - win32_nmres=`eval $NM -f posix -A $1 | - $SED -n -e ' - 1,100{ - / I /{ - s,.*,import, - p - q - } - }'` - case $win32_nmres in - import*) win32_libid_type="x86 archive import";; - *) win32_libid_type="x86 archive static";; - esac - fi - ;; - *DLL*) - win32_libid_type="x86 DLL" - ;; - *executable*) # but shell scripts are "executable" too... - case $win32_fileres in - *MS\ Windows\ PE\ Intel*) - win32_libid_type="x86 DLL" - ;; - esac - ;; - esac - $ECHO "$win32_libid_type" -} - - - -# func_extract_an_archive dir oldlib -func_extract_an_archive () -{ - $opt_debug - f_ex_an_ar_dir="$1"; shift - f_ex_an_ar_oldlib="$1" - func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" 'exit $?' - if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then - : - else - func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" - fi -} - - -# func_extract_archives gentop oldlib ... -func_extract_archives () -{ - $opt_debug - my_gentop="$1"; shift - my_oldlibs=${1+"$@"} - my_oldobjs="" - my_xlib="" - my_xabs="" - my_xdir="" - - for my_xlib in $my_oldlibs; do - # Extract the objects. - case $my_xlib in - [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; - *) my_xabs=`pwd`"/$my_xlib" ;; - esac - func_basename "$my_xlib" - my_xlib="$func_basename_result" - my_xlib_u=$my_xlib - while :; do - case " $extracted_archives " in - *" $my_xlib_u "*) - func_arith $extracted_serial + 1 - extracted_serial=$func_arith_result - my_xlib_u=lt$extracted_serial-$my_xlib ;; - *) break ;; - esac - done - extracted_archives="$extracted_archives $my_xlib_u" - my_xdir="$my_gentop/$my_xlib_u" - - func_mkdir_p "$my_xdir" - - case $host in - *-darwin*) - func_verbose "Extracting $my_xabs" - # Do not bother doing anything if just a dry run - $opt_dry_run || { - darwin_orig_dir=`pwd` - cd $my_xdir || exit $? - darwin_archive=$my_xabs - darwin_curdir=`pwd` - darwin_base_archive=`basename "$darwin_archive"` - darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` - if test -n "$darwin_arches"; then - darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` - darwin_arch= - func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" - for darwin_arch in $darwin_arches ; do - func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}" - $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" - cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" - func_extract_an_archive "`pwd`" "${darwin_base_archive}" - cd "$darwin_curdir" - $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" - done # $darwin_arches - ## Okay now we've a bunch of thin objects, gotta fatten them up :) - darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u` - darwin_file= - darwin_files= - for darwin_file in $darwin_filelist; do - darwin_files=`find unfat-$$ -name $darwin_file -print | $NL2SP` - $LIPO -create -output "$darwin_file" $darwin_files - done # $darwin_filelist - $RM -rf unfat-$$ - cd "$darwin_orig_dir" - else - cd $darwin_orig_dir - func_extract_an_archive "$my_xdir" "$my_xabs" - fi # $darwin_arches - } # !$opt_dry_run - ;; - *) - func_extract_an_archive "$my_xdir" "$my_xabs" - ;; - esac - my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP` - done - - func_extract_archives_result="$my_oldobjs" -} - - - -# func_emit_wrapper_part1 [arg=no] -# -# Emit the first part of a libtool wrapper script on stdout. -# For more information, see the description associated with -# func_emit_wrapper(), below. -func_emit_wrapper_part1 () -{ - func_emit_wrapper_part1_arg1=no - if test -n "$1" ; then - func_emit_wrapper_part1_arg1=$1 - fi - - $ECHO "\ -#! $SHELL - -# $output - temporary wrapper script for $objdir/$outputname -# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION -# -# The $output program cannot be directly executed until all the libtool -# libraries that it depends on are installed. -# -# This wrapper script should never be moved out of the build directory. -# If it is, it will not operate correctly. - -# Sed substitution that helps us do robust quoting. It backslashifies -# metacharacters that are still active within double-quoted strings. -Xsed='${SED} -e 1s/^X//' -sed_quote_subst='$sed_quote_subst' - -# Be Bourne compatible -if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then - emulate sh - NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which - # is contrary to our usage. Disable this feature. - alias -g '\${1+\"\$@\"}'='\"\$@\"' - setopt NO_GLOB_SUBST -else - case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac -fi -BIN_SH=xpg4; export BIN_SH # for Tru64 -DUALCASE=1; export DUALCASE # for MKS sh - -# The HP-UX ksh and POSIX shell print the target directory to stdout -# if CDPATH is set. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -relink_command=\"$relink_command\" - -# This environment variable determines our operation mode. -if test \"\$libtool_install_magic\" = \"$magic\"; then - # install mode needs the following variables: - generated_by_libtool_version='$macro_version' - notinst_deplibs='$notinst_deplibs' -else - # When we are sourced in execute mode, \$file and \$ECHO are already set. - if test \"\$libtool_execute_magic\" != \"$magic\"; then - ECHO=\"$qecho\" - file=\"\$0\" - # Make sure echo works. - if test \"X\$1\" = X--no-reexec; then - # Discard the --no-reexec flag, and continue. - shift - elif test \"X\`{ \$ECHO '\t'; } 2>/dev/null\`\" = 'X\t'; then - # Yippee, \$ECHO works! - : - else - # Restart under the correct shell, and then maybe \$ECHO will work. - exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"} - fi - fi\ -" - $ECHO "\ - - # Find the directory that this script lives in. - thisdir=\`\$ECHO \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\` - test \"x\$thisdir\" = \"x\$file\" && thisdir=. - - # Follow symbolic links until we get to the real thisdir. - file=\`ls -ld \"\$file\" | ${SED} -n 's/.*-> //p'\` - while test -n \"\$file\"; do - destdir=\`\$ECHO \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\` - - # If there was a directory component, then change thisdir. - if test \"x\$destdir\" != \"x\$file\"; then - case \"\$destdir\" in - [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; - *) thisdir=\"\$thisdir/\$destdir\" ;; - esac - fi - - file=\`\$ECHO \"X\$file\" | \$Xsed -e 's%^.*/%%'\` - file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\` - done -" -} -# end: func_emit_wrapper_part1 - -# func_emit_wrapper_part2 [arg=no] -# -# Emit the second part of a libtool wrapper script on stdout. -# For more information, see the description associated with -# func_emit_wrapper(), below. -func_emit_wrapper_part2 () -{ - func_emit_wrapper_part2_arg1=no - if test -n "$1" ; then - func_emit_wrapper_part2_arg1=$1 - fi - - $ECHO "\ - - # Usually 'no', except on cygwin/mingw when embedded into - # the cwrapper. - WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_part2_arg1 - if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then - # special case for '.' - if test \"\$thisdir\" = \".\"; then - thisdir=\`pwd\` - fi - # remove .libs from thisdir - case \"\$thisdir\" in - *[\\\\/]$objdir ) thisdir=\`\$ECHO \"X\$thisdir\" | \$Xsed -e 's%[\\\\/][^\\\\/]*$%%'\` ;; - $objdir ) thisdir=. ;; - esac - fi - - # Try to get the absolute directory name. - absdir=\`cd \"\$thisdir\" && pwd\` - test -n \"\$absdir\" && thisdir=\"\$absdir\" -" - - if test "$fast_install" = yes; then - $ECHO "\ - program=lt-'$outputname'$exeext - progdir=\"\$thisdir/$objdir\" - - if test ! -f \"\$progdir/\$program\" || - { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ - test \"X\$file\" != \"X\$progdir/\$program\"; }; then - - file=\"\$\$-\$program\" - - if test ! -d \"\$progdir\"; then - $MKDIR \"\$progdir\" - else - $RM \"\$progdir/\$file\" - fi" - - $ECHO "\ - - # relink executable if necessary - if test -n \"\$relink_command\"; then - if relink_command_output=\`eval \$relink_command 2>&1\`; then : - else - $ECHO \"\$relink_command_output\" >&2 - $RM \"\$progdir/\$file\" - exit 1 - fi - fi - - $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || - { $RM \"\$progdir/\$program\"; - $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } - $RM \"\$progdir/\$file\" - fi" - else - $ECHO "\ - program='$outputname' - progdir=\"\$thisdir/$objdir\" -" - fi - - $ECHO "\ - - if test -f \"\$progdir/\$program\"; then" - - # Export our shlibpath_var if we have one. - if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then - $ECHO "\ - # Add our own library path to $shlibpath_var - $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" - - # Some systems cannot cope with colon-terminated $shlibpath_var - # The second colon is a workaround for a bug in BeOS R4 sed - $shlibpath_var=\`\$ECHO \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\` - - export $shlibpath_var -" - fi - - # fixup the dll searchpath if we need to. - if test -n "$dllsearchpath"; then - $ECHO "\ - # Add the dll search path components to the executable PATH - PATH=$dllsearchpath:\$PATH -" - fi - - $ECHO "\ - if test \"\$libtool_execute_magic\" != \"$magic\"; then - # Run the actual program with our arguments. -" - case $host in - # Backslashes separate directories on plain windows - *-*-mingw | *-*-os2* | *-cegcc*) - $ECHO "\ - exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} -" - ;; - - *) - $ECHO "\ - exec \"\$progdir/\$program\" \${1+\"\$@\"} -" - ;; - esac - $ECHO "\ - \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 - exit 1 - fi - else - # The program doesn't exist. - \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 - \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 - $ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 - exit 1 - fi -fi\ -" -} -# end: func_emit_wrapper_part2 - - -# func_emit_wrapper [arg=no] -# -# Emit a libtool wrapper script on stdout. -# Don't directly open a file because we may want to -# incorporate the script contents within a cygwin/mingw -# wrapper executable. Must ONLY be called from within -# func_mode_link because it depends on a number of variables -# set therein. -# -# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR -# variable will take. If 'yes', then the emitted script -# will assume that the directory in which it is stored is -# the $objdir directory. This is a cygwin/mingw-specific -# behavior. -func_emit_wrapper () -{ - func_emit_wrapper_arg1=no - if test -n "$1" ; then - func_emit_wrapper_arg1=$1 - fi - - # split this up so that func_emit_cwrapperexe_src - # can call each part independently. - func_emit_wrapper_part1 "${func_emit_wrapper_arg1}" - func_emit_wrapper_part2 "${func_emit_wrapper_arg1}" -} - - -# func_to_host_path arg -# -# Convert paths to host format when used with build tools. -# Intended for use with "native" mingw (where libtool itself -# is running under the msys shell), or in the following cross- -# build environments: -# $build $host -# mingw (msys) mingw [e.g. native] -# cygwin mingw -# *nix + wine mingw -# where wine is equipped with the `winepath' executable. -# In the native mingw case, the (msys) shell automatically -# converts paths for any non-msys applications it launches, -# but that facility isn't available from inside the cwrapper. -# Similar accommodations are necessary for $host mingw and -# $build cygwin. Calling this function does no harm for other -# $host/$build combinations not listed above. -# -# ARG is the path (on $build) that should be converted to -# the proper representation for $host. The result is stored -# in $func_to_host_path_result. -func_to_host_path () -{ - func_to_host_path_result="$1" - if test -n "$1" ; then - case $host in - *mingw* ) - lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' - case $build in - *mingw* ) # actually, msys - # awkward: cmd appends spaces to result - lt_sed_strip_trailing_spaces="s/[ ]*\$//" - func_to_host_path_tmp1=`( cmd //c echo "$1" |\ - $SED -e "$lt_sed_strip_trailing_spaces" ) 2>/dev/null || echo ""` - func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\ - $SED -e "$lt_sed_naive_backslashify"` - ;; - *cygwin* ) - func_to_host_path_tmp1=`cygpath -w "$1"` - func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\ - $SED -e "$lt_sed_naive_backslashify"` - ;; - * ) - # Unfortunately, winepath does not exit with a non-zero - # error code, so we are forced to check the contents of - # stdout. On the other hand, if the command is not - # found, the shell will set an exit code of 127 and print - # *an error message* to stdout. So we must check for both - # error code of zero AND non-empty stdout, which explains - # the odd construction: - func_to_host_path_tmp1=`winepath -w "$1" 2>/dev/null` - if test "$?" -eq 0 && test -n "${func_to_host_path_tmp1}"; then - func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\ - $SED -e "$lt_sed_naive_backslashify"` - else - # Allow warning below. - func_to_host_path_result="" - fi - ;; - esac - if test -z "$func_to_host_path_result" ; then - func_error "Could not determine host path corresponding to" - func_error " '$1'" - func_error "Continuing, but uninstalled executables may not work." - # Fallback: - func_to_host_path_result="$1" - fi - ;; - esac - fi -} -# end: func_to_host_path - -# func_to_host_pathlist arg -# -# Convert pathlists to host format when used with build tools. -# See func_to_host_path(), above. This function supports the -# following $build/$host combinations (but does no harm for -# combinations not listed here): -# $build $host -# mingw (msys) mingw [e.g. native] -# cygwin mingw -# *nix + wine mingw -# -# Path separators are also converted from $build format to -# $host format. If ARG begins or ends with a path separator -# character, it is preserved (but converted to $host format) -# on output. -# -# ARG is a pathlist (on $build) that should be converted to -# the proper representation on $host. The result is stored -# in $func_to_host_pathlist_result. -func_to_host_pathlist () -{ - func_to_host_pathlist_result="$1" - if test -n "$1" ; then - case $host in - *mingw* ) - lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' - # Remove leading and trailing path separator characters from - # ARG. msys behavior is inconsistent here, cygpath turns them - # into '.;' and ';.', and winepath ignores them completely. - func_to_host_pathlist_tmp2="$1" - # Once set for this call, this variable should not be - # reassigned. It is used in tha fallback case. - func_to_host_pathlist_tmp1=`echo "$func_to_host_pathlist_tmp2" |\ - $SED -e 's|^:*||' -e 's|:*$||'` - case $build in - *mingw* ) # Actually, msys. - # Awkward: cmd appends spaces to result. - lt_sed_strip_trailing_spaces="s/[ ]*\$//" - func_to_host_pathlist_tmp2=`( cmd //c echo "$func_to_host_pathlist_tmp1" |\ - $SED -e "$lt_sed_strip_trailing_spaces" ) 2>/dev/null || echo ""` - func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp2" |\ - $SED -e "$lt_sed_naive_backslashify"` - ;; - *cygwin* ) - func_to_host_pathlist_tmp2=`cygpath -w -p "$func_to_host_pathlist_tmp1"` - func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp2" |\ - $SED -e "$lt_sed_naive_backslashify"` - ;; - * ) - # unfortunately, winepath doesn't convert pathlists - func_to_host_pathlist_result="" - func_to_host_pathlist_oldIFS=$IFS - IFS=: - for func_to_host_pathlist_f in $func_to_host_pathlist_tmp1 ; do - IFS=$func_to_host_pathlist_oldIFS - if test -n "$func_to_host_pathlist_f" ; then - func_to_host_path "$func_to_host_pathlist_f" - if test -n "$func_to_host_path_result" ; then - if test -z "$func_to_host_pathlist_result" ; then - func_to_host_pathlist_result="$func_to_host_path_result" - else - func_to_host_pathlist_result="$func_to_host_pathlist_result;$func_to_host_path_result" - fi - fi - fi - IFS=: - done - IFS=$func_to_host_pathlist_oldIFS - ;; - esac - if test -z "$func_to_host_pathlist_result" ; then - func_error "Could not determine the host path(s) corresponding to" - func_error " '$1'" - func_error "Continuing, but uninstalled executables may not work." - # Fallback. This may break if $1 contains DOS-style drive - # specifications. The fix is not to complicate the expression - # below, but for the user to provide a working wine installation - # with winepath so that path translation in the cross-to-mingw - # case works properly. - lt_replace_pathsep_nix_to_dos="s|:|;|g" - func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp1" |\ - $SED -e "$lt_replace_pathsep_nix_to_dos"` - fi - # Now, add the leading and trailing path separators back - case "$1" in - :* ) func_to_host_pathlist_result=";$func_to_host_pathlist_result" - ;; - esac - case "$1" in - *: ) func_to_host_pathlist_result="$func_to_host_pathlist_result;" - ;; - esac - ;; - esac - fi -} -# end: func_to_host_pathlist - -# func_emit_cwrapperexe_src -# emit the source code for a wrapper executable on stdout -# Must ONLY be called from within func_mode_link because -# it depends on a number of variable set therein. -func_emit_cwrapperexe_src () -{ - cat < -#include -#ifdef _MSC_VER -# include -# include -# include -# define setmode _setmode -#else -# include -# include -# ifdef __CYGWIN__ -# include -# define HAVE_SETENV -# ifdef __STRICT_ANSI__ -char *realpath (const char *, char *); -int putenv (char *); -int setenv (const char *, const char *, int); -# endif -# endif -#endif -#include -#include -#include -#include -#include -#include -#include -#include - -#if defined(PATH_MAX) -# define LT_PATHMAX PATH_MAX -#elif defined(MAXPATHLEN) -# define LT_PATHMAX MAXPATHLEN -#else -# define LT_PATHMAX 1024 -#endif - -#ifndef S_IXOTH -# define S_IXOTH 0 -#endif -#ifndef S_IXGRP -# define S_IXGRP 0 -#endif - -#ifdef _MSC_VER -# define S_IXUSR _S_IEXEC -# define stat _stat -# ifndef _INTPTR_T_DEFINED -# define intptr_t int -# endif -#endif - -#ifndef DIR_SEPARATOR -# define DIR_SEPARATOR '/' -# define PATH_SEPARATOR ':' -#endif - -#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ - defined (__OS2__) -# define HAVE_DOS_BASED_FILE_SYSTEM -# define FOPEN_WB "wb" -# ifndef DIR_SEPARATOR_2 -# define DIR_SEPARATOR_2 '\\' -# endif -# ifndef PATH_SEPARATOR_2 -# define PATH_SEPARATOR_2 ';' -# endif -#endif - -#ifndef DIR_SEPARATOR_2 -# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) -#else /* DIR_SEPARATOR_2 */ -# define IS_DIR_SEPARATOR(ch) \ - (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) -#endif /* DIR_SEPARATOR_2 */ - -#ifndef PATH_SEPARATOR_2 -# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) -#else /* PATH_SEPARATOR_2 */ -# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) -#endif /* PATH_SEPARATOR_2 */ - -#ifdef __CYGWIN__ -# define FOPEN_WB "wb" -#endif - -#ifndef FOPEN_WB -# define FOPEN_WB "w" -#endif -#ifndef _O_BINARY -# define _O_BINARY 0 -#endif - -#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) -#define XFREE(stale) do { \ - if (stale) { free ((void *) stale); stale = 0; } \ -} while (0) - -#undef LTWRAPPER_DEBUGPRINTF -#if defined DEBUGWRAPPER -# define LTWRAPPER_DEBUGPRINTF(args) ltwrapper_debugprintf args -static void -ltwrapper_debugprintf (const char *fmt, ...) -{ - va_list args; - va_start (args, fmt); - (void) vfprintf (stderr, fmt, args); - va_end (args); -} -#else -# define LTWRAPPER_DEBUGPRINTF(args) -#endif - -const char *program_name = NULL; - -void *xmalloc (size_t num); -char *xstrdup (const char *string); -const char *base_name (const char *name); -char *find_executable (const char *wrapper); -char *chase_symlinks (const char *pathspec); -int make_executable (const char *path); -int check_executable (const char *path); -char *strendzap (char *str, const char *pat); -void lt_fatal (const char *message, ...); -void lt_setenv (const char *name, const char *value); -char *lt_extend_str (const char *orig_value, const char *add, int to_end); -void lt_opt_process_env_set (const char *arg); -void lt_opt_process_env_prepend (const char *arg); -void lt_opt_process_env_append (const char *arg); -int lt_split_name_value (const char *arg, char** name, char** value); -void lt_update_exe_path (const char *name, const char *value); -void lt_update_lib_path (const char *name, const char *value); - -static const char *script_text_part1 = -EOF - - func_emit_wrapper_part1 yes | - $SED -e 's/\([\\"]\)/\\\1/g' \ - -e 's/^/ "/' -e 's/$/\\n"/' - echo ";" - cat <"))); - for (i = 0; i < newargc; i++) - { - LTWRAPPER_DEBUGPRINTF (("(main) newargz[%d] : %s\n", i, (newargz[i] ? newargz[i] : ""))); - } - -EOF - - case $host_os in - mingw*) - cat <<"EOF" - /* execv doesn't actually work on mingw as expected on unix */ - rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz); - if (rval == -1) - { - /* failed to start process */ - LTWRAPPER_DEBUGPRINTF (("(main) failed to launch target \"%s\": errno = %d\n", lt_argv_zero, errno)); - return 127; - } - return rval; -EOF - ;; - *) - cat <<"EOF" - execv (lt_argv_zero, newargz); - return rval; /* =127, but avoids unused variable warning */ -EOF - ;; - esac - - cat <<"EOF" -} - -void * -xmalloc (size_t num) -{ - void *p = (void *) malloc (num); - if (!p) - lt_fatal ("Memory exhausted"); - - return p; -} - -char * -xstrdup (const char *string) -{ - return string ? strcpy ((char *) xmalloc (strlen (string) + 1), - string) : NULL; -} - -const char * -base_name (const char *name) -{ - const char *base; - -#if defined (HAVE_DOS_BASED_FILE_SYSTEM) - /* Skip over the disk name in MSDOS pathnames. */ - if (isalpha ((unsigned char) name[0]) && name[1] == ':') - name += 2; -#endif - - for (base = name; *name; name++) - if (IS_DIR_SEPARATOR (*name)) - base = name + 1; - return base; -} - -int -check_executable (const char *path) -{ - struct stat st; - - LTWRAPPER_DEBUGPRINTF (("(check_executable) : %s\n", - path ? (*path ? path : "EMPTY!") : "NULL!")); - if ((!path) || (!*path)) - return 0; - - if ((stat (path, &st) >= 0) - && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) - return 1; - else - return 0; -} - -int -make_executable (const char *path) -{ - int rval = 0; - struct stat st; - - LTWRAPPER_DEBUGPRINTF (("(make_executable) : %s\n", - path ? (*path ? path : "EMPTY!") : "NULL!")); - if ((!path) || (!*path)) - return 0; - - if (stat (path, &st) >= 0) - { - rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); - } - return rval; -} - -/* Searches for the full path of the wrapper. Returns - newly allocated full path name if found, NULL otherwise - Does not chase symlinks, even on platforms that support them. -*/ -char * -find_executable (const char *wrapper) -{ - int has_slash = 0; - const char *p; - const char *p_next; - /* static buffer for getcwd */ - char tmp[LT_PATHMAX + 1]; - int tmp_len; - char *concat_name; - - LTWRAPPER_DEBUGPRINTF (("(find_executable) : %s\n", - wrapper ? (*wrapper ? wrapper : "EMPTY!") : "NULL!")); - - if ((wrapper == NULL) || (*wrapper == '\0')) - return NULL; - - /* Absolute path? */ -#if defined (HAVE_DOS_BASED_FILE_SYSTEM) - if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') - { - concat_name = xstrdup (wrapper); - if (check_executable (concat_name)) - return concat_name; - XFREE (concat_name); - } - else - { -#endif - if (IS_DIR_SEPARATOR (wrapper[0])) - { - concat_name = xstrdup (wrapper); - if (check_executable (concat_name)) - return concat_name; - XFREE (concat_name); - } -#if defined (HAVE_DOS_BASED_FILE_SYSTEM) - } -#endif - - for (p = wrapper; *p; p++) - if (*p == '/') - { - has_slash = 1; - break; - } - if (!has_slash) - { - /* no slashes; search PATH */ - const char *path = getenv ("PATH"); - if (path != NULL) - { - for (p = path; *p; p = p_next) - { - const char *q; - size_t p_len; - for (q = p; *q; q++) - if (IS_PATH_SEPARATOR (*q)) - break; - p_len = q - p; - p_next = (*q == '\0' ? q : q + 1); - if (p_len == 0) - { - /* empty path: current directory */ - if (getcwd (tmp, LT_PATHMAX) == NULL) - lt_fatal ("getcwd failed"); - tmp_len = strlen (tmp); - concat_name = - XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); - memcpy (concat_name, tmp, tmp_len); - concat_name[tmp_len] = '/'; - strcpy (concat_name + tmp_len + 1, wrapper); - } - else - { - concat_name = - XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); - memcpy (concat_name, p, p_len); - concat_name[p_len] = '/'; - strcpy (concat_name + p_len + 1, wrapper); - } - if (check_executable (concat_name)) - return concat_name; - XFREE (concat_name); - } - } - /* not found in PATH; assume curdir */ - } - /* Relative path | not found in path: prepend cwd */ - if (getcwd (tmp, LT_PATHMAX) == NULL) - lt_fatal ("getcwd failed"); - tmp_len = strlen (tmp); - concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); - memcpy (concat_name, tmp, tmp_len); - concat_name[tmp_len] = '/'; - strcpy (concat_name + tmp_len + 1, wrapper); - - if (check_executable (concat_name)) - return concat_name; - XFREE (concat_name); - return NULL; -} - -char * -chase_symlinks (const char *pathspec) -{ -#ifndef S_ISLNK - return xstrdup (pathspec); -#else - char buf[LT_PATHMAX]; - struct stat s; - char *tmp_pathspec = xstrdup (pathspec); - char *p; - int has_symlinks = 0; - while (strlen (tmp_pathspec) && !has_symlinks) - { - LTWRAPPER_DEBUGPRINTF (("checking path component for symlinks: %s\n", - tmp_pathspec)); - if (lstat (tmp_pathspec, &s) == 0) - { - if (S_ISLNK (s.st_mode) != 0) - { - has_symlinks = 1; - break; - } - - /* search backwards for last DIR_SEPARATOR */ - p = tmp_pathspec + strlen (tmp_pathspec) - 1; - while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) - p--; - if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) - { - /* no more DIR_SEPARATORS left */ - break; - } - *p = '\0'; - } - else - { - char *errstr = strerror (errno); - lt_fatal ("Error accessing file %s (%s)", tmp_pathspec, errstr); - } - } - XFREE (tmp_pathspec); - - if (!has_symlinks) - { - return xstrdup (pathspec); - } - - tmp_pathspec = realpath (pathspec, buf); - if (tmp_pathspec == 0) - { - lt_fatal ("Could not follow symlinks for %s", pathspec); - } - return xstrdup (tmp_pathspec); -#endif -} - -char * -strendzap (char *str, const char *pat) -{ - size_t len, patlen; - - assert (str != NULL); - assert (pat != NULL); - - len = strlen (str); - patlen = strlen (pat); - - if (patlen <= len) - { - str += len - patlen; - if (strcmp (str, pat) == 0) - *str = '\0'; - } - return str; -} - -static void -lt_error_core (int exit_status, const char *mode, - const char *message, va_list ap) -{ - fprintf (stderr, "%s: %s: ", program_name, mode); - vfprintf (stderr, message, ap); - fprintf (stderr, ".\n"); - - if (exit_status >= 0) - exit (exit_status); -} - -void -lt_fatal (const char *message, ...) -{ - va_list ap; - va_start (ap, message); - lt_error_core (EXIT_FAILURE, "FATAL", message, ap); - va_end (ap); -} - -void -lt_setenv (const char *name, const char *value) -{ - LTWRAPPER_DEBUGPRINTF (("(lt_setenv) setting '%s' to '%s'\n", - (name ? name : ""), - (value ? value : ""))); - { -#ifdef HAVE_SETENV - /* always make a copy, for consistency with !HAVE_SETENV */ - char *str = xstrdup (value); - setenv (name, str, 1); -#else - int len = strlen (name) + 1 + strlen (value) + 1; - char *str = XMALLOC (char, len); - sprintf (str, "%s=%s", name, value); - if (putenv (str) != EXIT_SUCCESS) - { - XFREE (str); - } -#endif - } -} - -char * -lt_extend_str (const char *orig_value, const char *add, int to_end) -{ - char *new_value; - if (orig_value && *orig_value) - { - int orig_value_len = strlen (orig_value); - int add_len = strlen (add); - new_value = XMALLOC (char, add_len + orig_value_len + 1); - if (to_end) - { - strcpy (new_value, orig_value); - strcpy (new_value + orig_value_len, add); - } - else - { - strcpy (new_value, add); - strcpy (new_value + add_len, orig_value); - } - } - else - { - new_value = xstrdup (add); - } - return new_value; -} - -int -lt_split_name_value (const char *arg, char** name, char** value) -{ - const char *p; - int len; - if (!arg || !*arg) - return 1; - - p = strchr (arg, (int)'='); - - if (!p) - return 1; - - *value = xstrdup (++p); - - len = strlen (arg) - strlen (*value); - *name = XMALLOC (char, len); - strncpy (*name, arg, len-1); - (*name)[len - 1] = '\0'; - - return 0; -} - -void -lt_opt_process_env_set (const char *arg) -{ - char *name = NULL; - char *value = NULL; - - if (lt_split_name_value (arg, &name, &value) != 0) - { - XFREE (name); - XFREE (value); - lt_fatal ("bad argument for %s: '%s'", env_set_opt, arg); - } - - lt_setenv (name, value); - XFREE (name); - XFREE (value); -} - -void -lt_opt_process_env_prepend (const char *arg) -{ - char *name = NULL; - char *value = NULL; - char *new_value = NULL; - - if (lt_split_name_value (arg, &name, &value) != 0) - { - XFREE (name); - XFREE (value); - lt_fatal ("bad argument for %s: '%s'", env_prepend_opt, arg); - } - - new_value = lt_extend_str (getenv (name), value, 0); - lt_setenv (name, new_value); - XFREE (new_value); - XFREE (name); - XFREE (value); -} - -void -lt_opt_process_env_append (const char *arg) -{ - char *name = NULL; - char *value = NULL; - char *new_value = NULL; - - if (lt_split_name_value (arg, &name, &value) != 0) - { - XFREE (name); - XFREE (value); - lt_fatal ("bad argument for %s: '%s'", env_append_opt, arg); - } - - new_value = lt_extend_str (getenv (name), value, 1); - lt_setenv (name, new_value); - XFREE (new_value); - XFREE (name); - XFREE (value); -} - -void -lt_update_exe_path (const char *name, const char *value) -{ - LTWRAPPER_DEBUGPRINTF (("(lt_update_exe_path) modifying '%s' by prepending '%s'\n", - (name ? name : ""), - (value ? value : ""))); - - if (name && *name && value && *value) - { - char *new_value = lt_extend_str (getenv (name), value, 0); - /* some systems can't cope with a ':'-terminated path #' */ - int len = strlen (new_value); - while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1])) - { - new_value[len-1] = '\0'; - } - lt_setenv (name, new_value); - XFREE (new_value); - } -} - -void -lt_update_lib_path (const char *name, const char *value) -{ - LTWRAPPER_DEBUGPRINTF (("(lt_update_lib_path) modifying '%s' by prepending '%s'\n", - (name ? name : ""), - (value ? value : ""))); - - if (name && *name && value && *value) - { - char *new_value = lt_extend_str (getenv (name), value, 0); - lt_setenv (name, new_value); - XFREE (new_value); - } -} - - -EOF -} -# end: func_emit_cwrapperexe_src - -# func_mode_link arg... -func_mode_link () -{ - $opt_debug - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) - # It is impossible to link a dll without this setting, and - # we shouldn't force the makefile maintainer to figure out - # which system we are compiling for in order to pass an extra - # flag for every libtool invocation. - # allow_undefined=no - - # FIXME: Unfortunately, there are problems with the above when trying - # to make a dll which has undefined symbols, in which case not - # even a static library is built. For now, we need to specify - # -no-undefined on the libtool link line when we can be certain - # that all symbols are satisfied, otherwise we get a static library. - allow_undefined=yes - ;; - *) - allow_undefined=yes - ;; - esac - libtool_args=$nonopt - base_compile="$nonopt $@" - compile_command=$nonopt - finalize_command=$nonopt - - compile_rpath= - finalize_rpath= - compile_shlibpath= - finalize_shlibpath= - convenience= - old_convenience= - deplibs= - old_deplibs= - compiler_flags= - linker_flags= - dllsearchpath= - lib_search_path=`pwd` - inst_prefix_dir= - new_inherited_linker_flags= - - avoid_version=no - dlfiles= - dlprefiles= - dlself=no - export_dynamic=no - export_symbols= - export_symbols_regex= - generated= - libobjs= - ltlibs= - module=no - no_install=no - objs= - non_pic_objects= - precious_files_regex= - prefer_static_libs=no - preload=no - prev= - prevarg= - release= - rpath= - xrpath= - perm_rpath= - temp_rpath= - thread_safe=no - vinfo= - vinfo_number=no - weak_libs= - single_module="${wl}-single_module" - func_infer_tag $base_compile - - # We need to know -static, to get the right output filenames. - for arg - do - case $arg in - -shared) - test "$build_libtool_libs" != yes && \ - func_fatal_configuration "can not build a shared library" - build_old_libs=no - break - ;; - -all-static | -static | -static-libtool-libs) - case $arg in - -all-static) - if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then - func_warning "complete static linking is impossible in this configuration" - fi - if test -n "$link_static_flag"; then - dlopen_self=$dlopen_self_static - fi - prefer_static_libs=yes - ;; - -static) - if test -z "$pic_flag" && test -n "$link_static_flag"; then - dlopen_self=$dlopen_self_static - fi - prefer_static_libs=built - ;; - -static-libtool-libs) - if test -z "$pic_flag" && test -n "$link_static_flag"; then - dlopen_self=$dlopen_self_static - fi - prefer_static_libs=yes - ;; - esac - build_libtool_libs=no - build_old_libs=yes - break - ;; - esac - done - - # See if our shared archives depend on static archives. - test -n "$old_archive_from_new_cmds" && build_old_libs=yes - - # Go through the arguments, transforming them on the way. - while test "$#" -gt 0; do - arg="$1" - shift - func_quote_for_eval "$arg" - qarg=$func_quote_for_eval_unquoted_result - func_append libtool_args " $func_quote_for_eval_result" - - # If the previous option needs an argument, assign it. - if test -n "$prev"; then - case $prev in - output) - func_append compile_command " @OUTPUT@" - func_append finalize_command " @OUTPUT@" - ;; - esac - - case $prev in - dlfiles|dlprefiles) - if test "$preload" = no; then - # Add the symbol object into the linking commands. - func_append compile_command " @SYMFILE@" - func_append finalize_command " @SYMFILE@" - preload=yes - fi - case $arg in - *.la | *.lo) ;; # We handle these cases below. - force) - if test "$dlself" = no; then - dlself=needless - export_dynamic=yes - fi - prev= - continue - ;; - self) - if test "$prev" = dlprefiles; then - dlself=yes - elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then - dlself=yes - else - dlself=needless - export_dynamic=yes - fi - prev= - continue - ;; - *) - if test "$prev" = dlfiles; then - dlfiles="$dlfiles $arg" - else - dlprefiles="$dlprefiles $arg" - fi - prev= - continue - ;; - esac - ;; - expsyms) - export_symbols="$arg" - test -f "$arg" \ - || func_fatal_error "symbol file \`$arg' does not exist" - prev= - continue - ;; - expsyms_regex) - export_symbols_regex="$arg" - prev= - continue - ;; - framework) - case $host in - *-*-darwin*) - case "$deplibs " in - *" $qarg.ltframework "*) ;; - *) deplibs="$deplibs $qarg.ltframework" # this is fixed later - ;; - esac - ;; - esac - prev= - continue - ;; - inst_prefix) - inst_prefix_dir="$arg" - prev= - continue - ;; - objectlist) - if test -f "$arg"; then - save_arg=$arg - moreargs= - for fil in `cat "$save_arg"` - do -# moreargs="$moreargs $fil" - arg=$fil - # A libtool-controlled object. - - # Check to see that this really is a libtool object. - if func_lalib_unsafe_p "$arg"; then - pic_object= - non_pic_object= - - # Read the .lo file - func_source "$arg" - - if test -z "$pic_object" || - test -z "$non_pic_object" || - test "$pic_object" = none && - test "$non_pic_object" = none; then - func_fatal_error "cannot find name of object for \`$arg'" - fi - - # Extract subdirectory from the argument. - func_dirname "$arg" "/" "" - xdir="$func_dirname_result" - - if test "$pic_object" != none; then - # Prepend the subdirectory the object is found in. - pic_object="$xdir$pic_object" - - if test "$prev" = dlfiles; then - if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then - dlfiles="$dlfiles $pic_object" - prev= - continue - else - # If libtool objects are unsupported, then we need to preload. - prev=dlprefiles - fi - fi - - # CHECK ME: I think I busted this. -Ossama - if test "$prev" = dlprefiles; then - # Preload the old-style object. - dlprefiles="$dlprefiles $pic_object" - prev= - fi - - # A PIC object. - func_append libobjs " $pic_object" - arg="$pic_object" - fi - - # Non-PIC object. - if test "$non_pic_object" != none; then - # Prepend the subdirectory the object is found in. - non_pic_object="$xdir$non_pic_object" - - # A standard non-PIC object - func_append non_pic_objects " $non_pic_object" - if test -z "$pic_object" || test "$pic_object" = none ; then - arg="$non_pic_object" - fi - else - # If the PIC object exists, use it instead. - # $xdir was prepended to $pic_object above. - non_pic_object="$pic_object" - func_append non_pic_objects " $non_pic_object" - fi - else - # Only an error if not doing a dry-run. - if $opt_dry_run; then - # Extract subdirectory from the argument. - func_dirname "$arg" "/" "" - xdir="$func_dirname_result" - - func_lo2o "$arg" - pic_object=$xdir$objdir/$func_lo2o_result - non_pic_object=$xdir$func_lo2o_result - func_append libobjs " $pic_object" - func_append non_pic_objects " $non_pic_object" - else - func_fatal_error "\`$arg' is not a valid libtool object" - fi - fi - done - else - func_fatal_error "link input file \`$arg' does not exist" - fi - arg=$save_arg - prev= - continue - ;; - precious_regex) - precious_files_regex="$arg" - prev= - continue - ;; - release) - release="-$arg" - prev= - continue - ;; - rpath | xrpath) - # We need an absolute path. - case $arg in - [\\/]* | [A-Za-z]:[\\/]*) ;; - *) - func_fatal_error "only absolute run-paths are allowed" - ;; - esac - if test "$prev" = rpath; then - case "$rpath " in - *" $arg "*) ;; - *) rpath="$rpath $arg" ;; - esac - else - case "$xrpath " in - *" $arg "*) ;; - *) xrpath="$xrpath $arg" ;; - esac - fi - prev= - continue - ;; - shrext) - shrext_cmds="$arg" - prev= - continue - ;; - weak) - weak_libs="$weak_libs $arg" - prev= - continue - ;; - xcclinker) - linker_flags="$linker_flags $qarg" - compiler_flags="$compiler_flags $qarg" - prev= - func_append compile_command " $qarg" - func_append finalize_command " $qarg" - continue - ;; - xcompiler) - compiler_flags="$compiler_flags $qarg" - prev= - func_append compile_command " $qarg" - func_append finalize_command " $qarg" - continue - ;; - xlinker) - linker_flags="$linker_flags $qarg" - compiler_flags="$compiler_flags $wl$qarg" - prev= - func_append compile_command " $wl$qarg" - func_append finalize_command " $wl$qarg" - continue - ;; - *) - eval "$prev=\"\$arg\"" - prev= - continue - ;; - esac - fi # test -n "$prev" - - prevarg="$arg" - - case $arg in - -all-static) - if test -n "$link_static_flag"; then - # See comment for -static flag below, for more details. - func_append compile_command " $link_static_flag" - func_append finalize_command " $link_static_flag" - fi - continue - ;; - - -allow-undefined) - # FIXME: remove this flag sometime in the future. - func_fatal_error "\`-allow-undefined' must not be used because it is the default" - ;; - - -avoid-version) - avoid_version=yes - continue - ;; - - -dlopen) - prev=dlfiles - continue - ;; - - -dlpreopen) - prev=dlprefiles - continue - ;; - - -export-dynamic) - export_dynamic=yes - continue - ;; - - -export-symbols | -export-symbols-regex) - if test -n "$export_symbols" || test -n "$export_symbols_regex"; then - func_fatal_error "more than one -exported-symbols argument is not allowed" - fi - if test "X$arg" = "X-export-symbols"; then - prev=expsyms - else - prev=expsyms_regex - fi - continue - ;; - - -framework) - prev=framework - continue - ;; - - -inst-prefix-dir) - prev=inst_prefix - continue - ;; - - # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* - # so, if we see these flags be careful not to treat them like -L - -L[A-Z][A-Z]*:*) - case $with_gcc/$host in - no/*-*-irix* | /*-*-irix*) - func_append compile_command " $arg" - func_append finalize_command " $arg" - ;; - esac - continue - ;; - - -L*) - func_stripname '-L' '' "$arg" - dir=$func_stripname_result - if test -z "$dir"; then - if test "$#" -gt 0; then - func_fatal_error "require no space between \`-L' and \`$1'" - else - func_fatal_error "need path for \`-L' option" - fi - fi - # We need an absolute path. - case $dir in - [\\/]* | [A-Za-z]:[\\/]*) ;; - *) - absdir=`cd "$dir" && pwd` - test -z "$absdir" && \ - func_fatal_error "cannot determine absolute directory name of \`$dir'" - dir="$absdir" - ;; - esac - case "$deplibs " in - *" -L$dir "*) ;; - *) - deplibs="$deplibs -L$dir" - lib_search_path="$lib_search_path $dir" - ;; - esac - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) - testbindir=`$ECHO "X$dir" | $Xsed -e 's*/lib$*/bin*'` - case :$dllsearchpath: in - *":$dir:"*) ;; - ::) dllsearchpath=$dir;; - *) dllsearchpath="$dllsearchpath:$dir";; - esac - case :$dllsearchpath: in - *":$testbindir:"*) ;; - ::) dllsearchpath=$testbindir;; - *) dllsearchpath="$dllsearchpath:$testbindir";; - esac - ;; - esac - continue - ;; - - -l*) - if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc*) - # These systems don't actually have a C or math library (as such) - continue - ;; - *-*-os2*) - # These systems don't actually have a C library (as such) - test "X$arg" = "X-lc" && continue - ;; - *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) - # Do not include libc due to us having libc/libc_r. - test "X$arg" = "X-lc" && continue - ;; - *-*-rhapsody* | *-*-darwin1.[012]) - # Rhapsody C and math libraries are in the System framework - deplibs="$deplibs System.ltframework" - continue - ;; - *-*-sco3.2v5* | *-*-sco5v6*) - # Causes problems with __ctype - test "X$arg" = "X-lc" && continue - ;; - *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) - # Compiler inserts libc in the correct place for threads to work - test "X$arg" = "X-lc" && continue - ;; - esac - elif test "X$arg" = "X-lc_r"; then - case $host in - *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) - # Do not include libc_r directly, use -pthread flag. - continue - ;; - esac - fi - deplibs="$deplibs $arg" - continue - ;; - - -module) - module=yes - continue - ;; - - # Tru64 UNIX uses -model [arg] to determine the layout of C++ - # classes, name mangling, and exception handling. - # Darwin uses the -arch flag to determine output architecture. - -model|-arch|-isysroot) - compiler_flags="$compiler_flags $arg" - func_append compile_command " $arg" - func_append finalize_command " $arg" - prev=xcompiler - continue - ;; - - -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) - compiler_flags="$compiler_flags $arg" - func_append compile_command " $arg" - func_append finalize_command " $arg" - case "$new_inherited_linker_flags " in - *" $arg "*) ;; - * ) new_inherited_linker_flags="$new_inherited_linker_flags $arg" ;; - esac - continue - ;; - - -multi_module) - single_module="${wl}-multi_module" - continue - ;; - - -no-fast-install) - fast_install=no - continue - ;; - - -no-install) - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) - # The PATH hackery in wrapper scripts is required on Windows - # and Darwin in order for the loader to find any dlls it needs. - func_warning "\`-no-install' is ignored for $host" - func_warning "assuming \`-no-fast-install' instead" - fast_install=no - ;; - *) no_install=yes ;; - esac - continue - ;; - - -no-undefined) - allow_undefined=no - continue - ;; - - -objectlist) - prev=objectlist - continue - ;; - - -o) prev=output ;; - - -precious-files-regex) - prev=precious_regex - continue - ;; - - -release) - prev=release - continue - ;; - - -rpath) - prev=rpath - continue - ;; - - -R) - prev=xrpath - continue - ;; - - -R*) - func_stripname '-R' '' "$arg" - dir=$func_stripname_result - # We need an absolute path. - case $dir in - [\\/]* | [A-Za-z]:[\\/]*) ;; - *) - func_fatal_error "only absolute run-paths are allowed" - ;; - esac - case "$xrpath " in - *" $dir "*) ;; - *) xrpath="$xrpath $dir" ;; - esac - continue - ;; - - -shared) - # The effects of -shared are defined in a previous loop. - continue - ;; - - -shrext) - prev=shrext - continue - ;; - - -static | -static-libtool-libs) - # The effects of -static are defined in a previous loop. - # We used to do the same as -all-static on platforms that - # didn't have a PIC flag, but the assumption that the effects - # would be equivalent was wrong. It would break on at least - # Digital Unix and AIX. - continue - ;; - - -thread-safe) - thread_safe=yes - continue - ;; - - -version-info) - prev=vinfo - continue - ;; - - -version-number) - prev=vinfo - vinfo_number=yes - continue - ;; - - -weak) - prev=weak - continue - ;; - - -Wc,*) - func_stripname '-Wc,' '' "$arg" - args=$func_stripname_result - arg= - save_ifs="$IFS"; IFS=',' - for flag in $args; do - IFS="$save_ifs" - func_quote_for_eval "$flag" - arg="$arg $wl$func_quote_for_eval_result" - compiler_flags="$compiler_flags $func_quote_for_eval_result" - done - IFS="$save_ifs" - func_stripname ' ' '' "$arg" - arg=$func_stripname_result - ;; - - -Wl,*) - func_stripname '-Wl,' '' "$arg" - args=$func_stripname_result - arg= - save_ifs="$IFS"; IFS=',' - for flag in $args; do - IFS="$save_ifs" - func_quote_for_eval "$flag" - arg="$arg $wl$func_quote_for_eval_result" - compiler_flags="$compiler_flags $wl$func_quote_for_eval_result" - linker_flags="$linker_flags $func_quote_for_eval_result" - done - IFS="$save_ifs" - func_stripname ' ' '' "$arg" - arg=$func_stripname_result - ;; - - -Xcompiler) - prev=xcompiler - continue - ;; - - -Xlinker) - prev=xlinker - continue - ;; - - -XCClinker) - prev=xcclinker - continue - ;; - - # -msg_* for osf cc - -msg_*) - func_quote_for_eval "$arg" - arg="$func_quote_for_eval_result" - ;; - - # -64, -mips[0-9] enable 64-bit mode on the SGI compiler - # -r[0-9][0-9]* specifies the processor on the SGI compiler - # -xarch=*, -xtarget=* enable 64-bit mode on the Sun compiler - # +DA*, +DD* enable 64-bit mode on the HP compiler - # -q* pass through compiler args for the IBM compiler - # -m*, -t[45]*, -txscale* pass through architecture-specific - # compiler args for GCC - # -F/path gives path to uninstalled frameworks, gcc on darwin - # -p, -pg, --coverage, -fprofile-* pass through profiling flag for GCC - # @file GCC response files - -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ - -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*) - func_quote_for_eval "$arg" - arg="$func_quote_for_eval_result" - func_append compile_command " $arg" - func_append finalize_command " $arg" - compiler_flags="$compiler_flags $arg" - continue - ;; - - # Some other compiler flag. - -* | +*) - func_quote_for_eval "$arg" - arg="$func_quote_for_eval_result" - ;; - - *.$objext) - # A standard object. - objs="$objs $arg" - ;; - - *.lo) - # A libtool-controlled object. - - # Check to see that this really is a libtool object. - if func_lalib_unsafe_p "$arg"; then - pic_object= - non_pic_object= - - # Read the .lo file - func_source "$arg" - - if test -z "$pic_object" || - test -z "$non_pic_object" || - test "$pic_object" = none && - test "$non_pic_object" = none; then - func_fatal_error "cannot find name of object for \`$arg'" - fi - - # Extract subdirectory from the argument. - func_dirname "$arg" "/" "" - xdir="$func_dirname_result" - - if test "$pic_object" != none; then - # Prepend the subdirectory the object is found in. - pic_object="$xdir$pic_object" - - if test "$prev" = dlfiles; then - if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then - dlfiles="$dlfiles $pic_object" - prev= - continue - else - # If libtool objects are unsupported, then we need to preload. - prev=dlprefiles - fi - fi - - # CHECK ME: I think I busted this. -Ossama - if test "$prev" = dlprefiles; then - # Preload the old-style object. - dlprefiles="$dlprefiles $pic_object" - prev= - fi - - # A PIC object. - func_append libobjs " $pic_object" - arg="$pic_object" - fi - - # Non-PIC object. - if test "$non_pic_object" != none; then - # Prepend the subdirectory the object is found in. - non_pic_object="$xdir$non_pic_object" - - # A standard non-PIC object - func_append non_pic_objects " $non_pic_object" - if test -z "$pic_object" || test "$pic_object" = none ; then - arg="$non_pic_object" - fi - else - # If the PIC object exists, use it instead. - # $xdir was prepended to $pic_object above. - non_pic_object="$pic_object" - func_append non_pic_objects " $non_pic_object" - fi - else - # Only an error if not doing a dry-run. - if $opt_dry_run; then - # Extract subdirectory from the argument. - func_dirname "$arg" "/" "" - xdir="$func_dirname_result" - - func_lo2o "$arg" - pic_object=$xdir$objdir/$func_lo2o_result - non_pic_object=$xdir$func_lo2o_result - func_append libobjs " $pic_object" - func_append non_pic_objects " $non_pic_object" - else - func_fatal_error "\`$arg' is not a valid libtool object" - fi - fi - ;; - - *.$libext) - # An archive. - deplibs="$deplibs $arg" - old_deplibs="$old_deplibs $arg" - continue - ;; - - *.la) - # A libtool-controlled library. - - if test "$prev" = dlfiles; then - # This library was specified with -dlopen. - dlfiles="$dlfiles $arg" - prev= - elif test "$prev" = dlprefiles; then - # The library was specified with -dlpreopen. - dlprefiles="$dlprefiles $arg" - prev= - else - deplibs="$deplibs $arg" - fi - continue - ;; - - # Some other compiler argument. - *) - # Unknown arguments in both finalize_command and compile_command need - # to be aesthetically quoted because they are evaled later. - func_quote_for_eval "$arg" - arg="$func_quote_for_eval_result" - ;; - esac # arg - - # Now actually substitute the argument into the commands. - if test -n "$arg"; then - func_append compile_command " $arg" - func_append finalize_command " $arg" - fi - done # argument parsing loop - - test -n "$prev" && \ - func_fatal_help "the \`$prevarg' option requires an argument" - - if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then - eval arg=\"$export_dynamic_flag_spec\" - func_append compile_command " $arg" - func_append finalize_command " $arg" - fi - - oldlibs= - # calculate the name of the file, without its directory - func_basename "$output" - outputname="$func_basename_result" - libobjs_save="$libobjs" - - if test -n "$shlibpath_var"; then - # get the directories listed in $shlibpath_var - eval shlib_search_path=\`\$ECHO \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\` - else - shlib_search_path= - fi - eval sys_lib_search_path=\"$sys_lib_search_path_spec\" - eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" - - func_dirname "$output" "/" "" - output_objdir="$func_dirname_result$objdir" - # Create the object directory. - func_mkdir_p "$output_objdir" - - # Determine the type of output - case $output in - "") - func_fatal_help "you must specify an output file" - ;; - *.$libext) linkmode=oldlib ;; - *.lo | *.$objext) linkmode=obj ;; - *.la) linkmode=lib ;; - *) linkmode=prog ;; # Anything else should be a program. - esac - - specialdeplibs= - - libs= - # Find all interdependent deplibs by searching for libraries - # that are linked more than once (e.g. -la -lb -la) - for deplib in $deplibs; do - if $opt_duplicate_deps ; then - case "$libs " in - *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; - esac - fi - libs="$libs $deplib" - done - - if test "$linkmode" = lib; then - libs="$predeps $libs $compiler_lib_search_path $postdeps" - - # Compute libraries that are listed more than once in $predeps - # $postdeps and mark them as special (i.e., whose duplicates are - # not to be eliminated). - pre_post_deps= - if $opt_duplicate_compiler_generated_deps; then - for pre_post_dep in $predeps $postdeps; do - case "$pre_post_deps " in - *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;; - esac - pre_post_deps="$pre_post_deps $pre_post_dep" - done - fi - pre_post_deps= - fi - - deplibs= - newdependency_libs= - newlib_search_path= - need_relink=no # whether we're linking any uninstalled libtool libraries - notinst_deplibs= # not-installed libtool libraries - notinst_path= # paths that contain not-installed libtool libraries - - case $linkmode in - lib) - passes="conv dlpreopen link" - for file in $dlfiles $dlprefiles; do - case $file in - *.la) ;; - *) - func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file" - ;; - esac - done - ;; - prog) - compile_deplibs= - finalize_deplibs= - alldeplibs=no - newdlfiles= - newdlprefiles= - passes="conv scan dlopen dlpreopen link" - ;; - *) passes="conv" - ;; - esac - - for pass in $passes; do - # The preopen pass in lib mode reverses $deplibs; put it back here - # so that -L comes before libs that need it for instance... - if test "$linkmode,$pass" = "lib,link"; then - ## FIXME: Find the place where the list is rebuilt in the wrong - ## order, and fix it there properly - tmp_deplibs= - for deplib in $deplibs; do - tmp_deplibs="$deplib $tmp_deplibs" - done - deplibs="$tmp_deplibs" - fi - - if test "$linkmode,$pass" = "lib,link" || - test "$linkmode,$pass" = "prog,scan"; then - libs="$deplibs" - deplibs= - fi - if test "$linkmode" = prog; then - case $pass in - dlopen) libs="$dlfiles" ;; - dlpreopen) libs="$dlprefiles" ;; - link) - libs="$deplibs %DEPLIBS%" - test "X$link_all_deplibs" != Xno && libs="$libs $dependency_libs" - ;; - esac - fi - if test "$linkmode,$pass" = "lib,dlpreopen"; then - # Collect and forward deplibs of preopened libtool libs - for lib in $dlprefiles; do - # Ignore non-libtool-libs - dependency_libs= - case $lib in - *.la) func_source "$lib" ;; - esac - - # Collect preopened libtool deplibs, except any this library - # has declared as weak libs - for deplib in $dependency_libs; do - deplib_base=`$ECHO "X$deplib" | $Xsed -e "$basename"` - case " $weak_libs " in - *" $deplib_base "*) ;; - *) deplibs="$deplibs $deplib" ;; - esac - done - done - libs="$dlprefiles" - fi - if test "$pass" = dlopen; then - # Collect dlpreopened libraries - save_deplibs="$deplibs" - deplibs= - fi - - for deplib in $libs; do - lib= - found=no - case $deplib in - -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) - if test "$linkmode,$pass" = "prog,link"; then - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - else - compiler_flags="$compiler_flags $deplib" - if test "$linkmode" = lib ; then - case "$new_inherited_linker_flags " in - *" $deplib "*) ;; - * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;; - esac - fi - fi - continue - ;; - -l*) - if test "$linkmode" != lib && test "$linkmode" != prog; then - func_warning "\`-l' is ignored for archives/objects" - continue - fi - func_stripname '-l' '' "$deplib" - name=$func_stripname_result - if test "$linkmode" = lib; then - searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" - else - searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" - fi - for searchdir in $searchdirs; do - for search_ext in .la $std_shrext .so .a; do - # Search the libtool library - lib="$searchdir/lib${name}${search_ext}" - if test -f "$lib"; then - if test "$search_ext" = ".la"; then - found=yes - else - found=no - fi - break 2 - fi - done - done - if test "$found" != yes; then - # deplib doesn't seem to be a libtool library - if test "$linkmode,$pass" = "prog,link"; then - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - else - deplibs="$deplib $deplibs" - test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" - fi - continue - else # deplib is a libtool library - # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, - # We need to do some special things here, and not later. - if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then - case " $predeps $postdeps " in - *" $deplib "*) - if func_lalib_p "$lib"; then - library_names= - old_library= - func_source "$lib" - for l in $old_library $library_names; do - ll="$l" - done - if test "X$ll" = "X$old_library" ; then # only static version available - found=no - func_dirname "$lib" "" "." - ladir="$func_dirname_result" - lib=$ladir/$old_library - if test "$linkmode,$pass" = "prog,link"; then - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - else - deplibs="$deplib $deplibs" - test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" - fi - continue - fi - fi - ;; - *) ;; - esac - fi - fi - ;; # -l - *.ltframework) - if test "$linkmode,$pass" = "prog,link"; then - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - else - deplibs="$deplib $deplibs" - if test "$linkmode" = lib ; then - case "$new_inherited_linker_flags " in - *" $deplib "*) ;; - * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;; - esac - fi - fi - continue - ;; - -L*) - case $linkmode in - lib) - deplibs="$deplib $deplibs" - test "$pass" = conv && continue - newdependency_libs="$deplib $newdependency_libs" - func_stripname '-L' '' "$deplib" - newlib_search_path="$newlib_search_path $func_stripname_result" - ;; - prog) - if test "$pass" = conv; then - deplibs="$deplib $deplibs" - continue - fi - if test "$pass" = scan; then - deplibs="$deplib $deplibs" - else - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - fi - func_stripname '-L' '' "$deplib" - newlib_search_path="$newlib_search_path $func_stripname_result" - ;; - *) - func_warning "\`-L' is ignored for archives/objects" - ;; - esac # linkmode - continue - ;; # -L - -R*) - if test "$pass" = link; then - func_stripname '-R' '' "$deplib" - dir=$func_stripname_result - # Make sure the xrpath contains only unique directories. - case "$xrpath " in - *" $dir "*) ;; - *) xrpath="$xrpath $dir" ;; - esac - fi - deplibs="$deplib $deplibs" - continue - ;; - *.la) lib="$deplib" ;; - *.$libext) - if test "$pass" = conv; then - deplibs="$deplib $deplibs" - continue - fi - case $linkmode in - lib) - # Linking convenience modules into shared libraries is allowed, - # but linking other static libraries is non-portable. - case " $dlpreconveniencelibs " in - *" $deplib "*) ;; - *) - valid_a_lib=no - case $deplibs_check_method in - match_pattern*) - set dummy $deplibs_check_method; shift - match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` - if eval "\$ECHO \"X$deplib\"" 2>/dev/null | $Xsed -e 10q \ - | $EGREP "$match_pattern_regex" > /dev/null; then - valid_a_lib=yes - fi - ;; - pass_all) - valid_a_lib=yes - ;; - esac - if test "$valid_a_lib" != yes; then - $ECHO - $ECHO "*** Warning: Trying to link with static lib archive $deplib." - $ECHO "*** I have the capability to make that library automatically link in when" - $ECHO "*** you link to this library. But I can only do this if you have a" - $ECHO "*** shared version of the library, which you do not appear to have" - $ECHO "*** because the file extensions .$libext of this argument makes me believe" - $ECHO "*** that it is just a static archive that I should not use here." - else - $ECHO - $ECHO "*** Warning: Linking the shared library $output against the" - $ECHO "*** static library $deplib is not portable!" - deplibs="$deplib $deplibs" - fi - ;; - esac - continue - ;; - prog) - if test "$pass" != link; then - deplibs="$deplib $deplibs" - else - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - fi - continue - ;; - esac # linkmode - ;; # *.$libext - *.lo | *.$objext) - if test "$pass" = conv; then - deplibs="$deplib $deplibs" - elif test "$linkmode" = prog; then - if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then - # If there is no dlopen support or we're linking statically, - # we need to preload. - newdlprefiles="$newdlprefiles $deplib" - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - else - newdlfiles="$newdlfiles $deplib" - fi - fi - continue - ;; - %DEPLIBS%) - alldeplibs=yes - continue - ;; - esac # case $deplib - - if test "$found" = yes || test -f "$lib"; then : - else - func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'" - fi - - # Check to see that this really is a libtool archive. - func_lalib_unsafe_p "$lib" \ - || func_fatal_error "\`$lib' is not a valid libtool archive" - - func_dirname "$lib" "" "." - ladir="$func_dirname_result" - - dlname= - dlopen= - dlpreopen= - libdir= - library_names= - old_library= - inherited_linker_flags= - # If the library was installed with an old release of libtool, - # it will not redefine variables installed, or shouldnotlink - installed=yes - shouldnotlink=no - avoidtemprpath= - - - # Read the .la file - func_source "$lib" - - # Convert "-framework foo" to "foo.ltframework" - if test -n "$inherited_linker_flags"; then - tmp_inherited_linker_flags=`$ECHO "X$inherited_linker_flags" | $Xsed -e 's/-framework \([^ $]*\)/\1.ltframework/g'` - for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do - case " $new_inherited_linker_flags " in - *" $tmp_inherited_linker_flag "*) ;; - *) new_inherited_linker_flags="$new_inherited_linker_flags $tmp_inherited_linker_flag";; - esac - done - fi - dependency_libs=`$ECHO "X $dependency_libs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` - if test "$linkmode,$pass" = "lib,link" || - test "$linkmode,$pass" = "prog,scan" || - { test "$linkmode" != prog && test "$linkmode" != lib; }; then - test -n "$dlopen" && dlfiles="$dlfiles $dlopen" - test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen" - fi - - if test "$pass" = conv; then - # Only check for convenience libraries - deplibs="$lib $deplibs" - if test -z "$libdir"; then - if test -z "$old_library"; then - func_fatal_error "cannot find name of link library for \`$lib'" - fi - # It is a libtool convenience library, so add in its objects. - convenience="$convenience $ladir/$objdir/$old_library" - old_convenience="$old_convenience $ladir/$objdir/$old_library" - tmp_libs= - for deplib in $dependency_libs; do - deplibs="$deplib $deplibs" - if $opt_duplicate_deps ; then - case "$tmp_libs " in - *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; - esac - fi - tmp_libs="$tmp_libs $deplib" - done - elif test "$linkmode" != prog && test "$linkmode" != lib; then - func_fatal_error "\`$lib' is not a convenience library" - fi - continue - fi # $pass = conv - - - # Get the name of the library we link against. - linklib= - for l in $old_library $library_names; do - linklib="$l" - done - if test -z "$linklib"; then - func_fatal_error "cannot find name of link library for \`$lib'" - fi - - # This library was specified with -dlopen. - if test "$pass" = dlopen; then - if test -z "$libdir"; then - func_fatal_error "cannot -dlopen a convenience library: \`$lib'" - fi - if test -z "$dlname" || - test "$dlopen_support" != yes || - test "$build_libtool_libs" = no; then - # If there is no dlname, no dlopen support or we're linking - # statically, we need to preload. We also need to preload any - # dependent libraries so libltdl's deplib preloader doesn't - # bomb out in the load deplibs phase. - dlprefiles="$dlprefiles $lib $dependency_libs" - else - newdlfiles="$newdlfiles $lib" - fi - continue - fi # $pass = dlopen - - # We need an absolute path. - case $ladir in - [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; - *) - abs_ladir=`cd "$ladir" && pwd` - if test -z "$abs_ladir"; then - func_warning "cannot determine absolute directory name of \`$ladir'" - func_warning "passing it literally to the linker, although it might fail" - abs_ladir="$ladir" - fi - ;; - esac - func_basename "$lib" - laname="$func_basename_result" - - # Find the relevant object directory and library name. - if test "X$installed" = Xyes; then - if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then - func_warning "library \`$lib' was moved." - dir="$ladir" - absdir="$abs_ladir" - libdir="$abs_ladir" - else - dir="$libdir" - absdir="$libdir" - fi - test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes - else - if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then - dir="$ladir" - absdir="$abs_ladir" - # Remove this search path later - notinst_path="$notinst_path $abs_ladir" - else - dir="$ladir/$objdir" - absdir="$abs_ladir/$objdir" - # Remove this search path later - notinst_path="$notinst_path $abs_ladir" - fi - fi # $installed = yes - func_stripname 'lib' '.la' "$laname" - name=$func_stripname_result - - # This library was specified with -dlpreopen. - if test "$pass" = dlpreopen; then - if test -z "$libdir" && test "$linkmode" = prog; then - func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'" - fi - # Prefer using a static library (so that no silly _DYNAMIC symbols - # are required to link). - if test -n "$old_library"; then - newdlprefiles="$newdlprefiles $dir/$old_library" - # Keep a list of preopened convenience libraries to check - # that they are being used correctly in the link pass. - test -z "$libdir" && \ - dlpreconveniencelibs="$dlpreconveniencelibs $dir/$old_library" - # Otherwise, use the dlname, so that lt_dlopen finds it. - elif test -n "$dlname"; then - newdlprefiles="$newdlprefiles $dir/$dlname" - else - newdlprefiles="$newdlprefiles $dir/$linklib" - fi - fi # $pass = dlpreopen - - if test -z "$libdir"; then - # Link the convenience library - if test "$linkmode" = lib; then - deplibs="$dir/$old_library $deplibs" - elif test "$linkmode,$pass" = "prog,link"; then - compile_deplibs="$dir/$old_library $compile_deplibs" - finalize_deplibs="$dir/$old_library $finalize_deplibs" - else - deplibs="$lib $deplibs" # used for prog,scan pass - fi - continue - fi - - - if test "$linkmode" = prog && test "$pass" != link; then - newlib_search_path="$newlib_search_path $ladir" - deplibs="$lib $deplibs" - - linkalldeplibs=no - if test "$link_all_deplibs" != no || test -z "$library_names" || - test "$build_libtool_libs" = no; then - linkalldeplibs=yes - fi - - tmp_libs= - for deplib in $dependency_libs; do - case $deplib in - -L*) func_stripname '-L' '' "$deplib" - newlib_search_path="$newlib_search_path $func_stripname_result" - ;; - esac - # Need to link against all dependency_libs? - if test "$linkalldeplibs" = yes; then - deplibs="$deplib $deplibs" - else - # Need to hardcode shared library paths - # or/and link against static libraries - newdependency_libs="$deplib $newdependency_libs" - fi - if $opt_duplicate_deps ; then - case "$tmp_libs " in - *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; - esac - fi - tmp_libs="$tmp_libs $deplib" - done # for deplib - continue - fi # $linkmode = prog... - - if test "$linkmode,$pass" = "prog,link"; then - if test -n "$library_names" && - { { test "$prefer_static_libs" = no || - test "$prefer_static_libs,$installed" = "built,yes"; } || - test -z "$old_library"; }; then - # We need to hardcode the library path - if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then - # Make sure the rpath contains only unique directories. - case "$temp_rpath:" in - *"$absdir:"*) ;; - *) temp_rpath="$temp_rpath$absdir:" ;; - esac - fi - - # Hardcode the library path. - # Skip directories that are in the system default run-time - # search path. - case " $sys_lib_dlsearch_path " in - *" $absdir "*) ;; - *) - case "$compile_rpath " in - *" $absdir "*) ;; - *) compile_rpath="$compile_rpath $absdir" - esac - ;; - esac - case " $sys_lib_dlsearch_path " in - *" $libdir "*) ;; - *) - case "$finalize_rpath " in - *" $libdir "*) ;; - *) finalize_rpath="$finalize_rpath $libdir" - esac - ;; - esac - fi # $linkmode,$pass = prog,link... - - if test "$alldeplibs" = yes && - { test "$deplibs_check_method" = pass_all || - { test "$build_libtool_libs" = yes && - test -n "$library_names"; }; }; then - # We only need to search for static libraries - continue - fi - fi - - link_static=no # Whether the deplib will be linked statically - use_static_libs=$prefer_static_libs - if test "$use_static_libs" = built && test "$installed" = yes; then - use_static_libs=no - fi - if test -n "$library_names" && - { test "$use_static_libs" = no || test -z "$old_library"; }; then - case $host in - *cygwin* | *mingw* | *cegcc*) - # No point in relinking DLLs because paths are not encoded - notinst_deplibs="$notinst_deplibs $lib" - need_relink=no - ;; - *) - if test "$installed" = no; then - notinst_deplibs="$notinst_deplibs $lib" - need_relink=yes - fi - ;; - esac - # This is a shared library - - # Warn about portability, can't link against -module's on some - # systems (darwin). Don't bleat about dlopened modules though! - dlopenmodule="" - for dlpremoduletest in $dlprefiles; do - if test "X$dlpremoduletest" = "X$lib"; then - dlopenmodule="$dlpremoduletest" - break - fi - done - if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then - $ECHO - if test "$linkmode" = prog; then - $ECHO "*** Warning: Linking the executable $output against the loadable module" - else - $ECHO "*** Warning: Linking the shared library $output against the loadable module" - fi - $ECHO "*** $linklib is not portable!" - fi - if test "$linkmode" = lib && - test "$hardcode_into_libs" = yes; then - # Hardcode the library path. - # Skip directories that are in the system default run-time - # search path. - case " $sys_lib_dlsearch_path " in - *" $absdir "*) ;; - *) - case "$compile_rpath " in - *" $absdir "*) ;; - *) compile_rpath="$compile_rpath $absdir" - esac - ;; - esac - case " $sys_lib_dlsearch_path " in - *" $libdir "*) ;; - *) - case "$finalize_rpath " in - *" $libdir "*) ;; - *) finalize_rpath="$finalize_rpath $libdir" - esac - ;; - esac - fi - - if test -n "$old_archive_from_expsyms_cmds"; then - # figure out the soname - set dummy $library_names - shift - realname="$1" - shift - libname=`eval "\\$ECHO \"$libname_spec\""` - # use dlname if we got it. it's perfectly good, no? - if test -n "$dlname"; then - soname="$dlname" - elif test -n "$soname_spec"; then - # bleh windows - case $host in - *cygwin* | mingw* | *cegcc*) - func_arith $current - $age - major=$func_arith_result - versuffix="-$major" - ;; - esac - eval soname=\"$soname_spec\" - else - soname="$realname" - fi - - # Make a new name for the extract_expsyms_cmds to use - soroot="$soname" - func_basename "$soroot" - soname="$func_basename_result" - func_stripname 'lib' '.dll' "$soname" - newlib=libimp-$func_stripname_result.a - - # If the library has no export list, then create one now - if test -f "$output_objdir/$soname-def"; then : - else - func_verbose "extracting exported symbol list from \`$soname'" - func_execute_cmds "$extract_expsyms_cmds" 'exit $?' - fi - - # Create $newlib - if test -f "$output_objdir/$newlib"; then :; else - func_verbose "generating import library for \`$soname'" - func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' - fi - # make sure the library variables are pointing to the new library - dir=$output_objdir - linklib=$newlib - fi # test -n "$old_archive_from_expsyms_cmds" - - if test "$linkmode" = prog || test "$mode" != relink; then - add_shlibpath= - add_dir= - add= - lib_linked=yes - case $hardcode_action in - immediate | unsupported) - if test "$hardcode_direct" = no; then - add="$dir/$linklib" - case $host in - *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; - *-*-sysv4*uw2*) add_dir="-L$dir" ;; - *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ - *-*-unixware7*) add_dir="-L$dir" ;; - *-*-darwin* ) - # if the lib is a (non-dlopened) module then we can not - # link against it, someone is ignoring the earlier warnings - if /usr/bin/file -L $add 2> /dev/null | - $GREP ": [^:]* bundle" >/dev/null ; then - if test "X$dlopenmodule" != "X$lib"; then - $ECHO "*** Warning: lib $linklib is a module, not a shared library" - if test -z "$old_library" ; then - $ECHO - $ECHO "*** And there doesn't seem to be a static archive available" - $ECHO "*** The link will probably fail, sorry" - else - add="$dir/$old_library" - fi - elif test -n "$old_library"; then - add="$dir/$old_library" - fi - fi - esac - elif test "$hardcode_minus_L" = no; then - case $host in - *-*-sunos*) add_shlibpath="$dir" ;; - esac - add_dir="-L$dir" - add="-l$name" - elif test "$hardcode_shlibpath_var" = no; then - add_shlibpath="$dir" - add="-l$name" - else - lib_linked=no - fi - ;; - relink) - if test "$hardcode_direct" = yes && - test "$hardcode_direct_absolute" = no; then - add="$dir/$linklib" - elif test "$hardcode_minus_L" = yes; then - add_dir="-L$dir" - # Try looking first in the location we're being installed to. - if test -n "$inst_prefix_dir"; then - case $libdir in - [\\/]*) - add_dir="$add_dir -L$inst_prefix_dir$libdir" - ;; - esac - fi - add="-l$name" - elif test "$hardcode_shlibpath_var" = yes; then - add_shlibpath="$dir" - add="-l$name" - else - lib_linked=no - fi - ;; - *) lib_linked=no ;; - esac - - if test "$lib_linked" != yes; then - func_fatal_configuration "unsupported hardcode properties" - fi - - if test -n "$add_shlibpath"; then - case :$compile_shlibpath: in - *":$add_shlibpath:"*) ;; - *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;; - esac - fi - if test "$linkmode" = prog; then - test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" - test -n "$add" && compile_deplibs="$add $compile_deplibs" - else - test -n "$add_dir" && deplibs="$add_dir $deplibs" - test -n "$add" && deplibs="$add $deplibs" - if test "$hardcode_direct" != yes && - test "$hardcode_minus_L" != yes && - test "$hardcode_shlibpath_var" = yes; then - case :$finalize_shlibpath: in - *":$libdir:"*) ;; - *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; - esac - fi - fi - fi - - if test "$linkmode" = prog || test "$mode" = relink; then - add_shlibpath= - add_dir= - add= - # Finalize command for both is simple: just hardcode it. - if test "$hardcode_direct" = yes && - test "$hardcode_direct_absolute" = no; then - add="$libdir/$linklib" - elif test "$hardcode_minus_L" = yes; then - add_dir="-L$libdir" - add="-l$name" - elif test "$hardcode_shlibpath_var" = yes; then - case :$finalize_shlibpath: in - *":$libdir:"*) ;; - *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; - esac - add="-l$name" - elif test "$hardcode_automatic" = yes; then - if test -n "$inst_prefix_dir" && - test -f "$inst_prefix_dir$libdir/$linklib" ; then - add="$inst_prefix_dir$libdir/$linklib" - else - add="$libdir/$linklib" - fi - else - # We cannot seem to hardcode it, guess we'll fake it. - add_dir="-L$libdir" - # Try looking first in the location we're being installed to. - if test -n "$inst_prefix_dir"; then - case $libdir in - [\\/]*) - add_dir="$add_dir -L$inst_prefix_dir$libdir" - ;; - esac - fi - add="-l$name" - fi - - if test "$linkmode" = prog; then - test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" - test -n "$add" && finalize_deplibs="$add $finalize_deplibs" - else - test -n "$add_dir" && deplibs="$add_dir $deplibs" - test -n "$add" && deplibs="$add $deplibs" - fi - fi - elif test "$linkmode" = prog; then - # Here we assume that one of hardcode_direct or hardcode_minus_L - # is not unsupported. This is valid on all known static and - # shared platforms. - if test "$hardcode_direct" != unsupported; then - test -n "$old_library" && linklib="$old_library" - compile_deplibs="$dir/$linklib $compile_deplibs" - finalize_deplibs="$dir/$linklib $finalize_deplibs" - else - compile_deplibs="-l$name -L$dir $compile_deplibs" - finalize_deplibs="-l$name -L$dir $finalize_deplibs" - fi - elif test "$build_libtool_libs" = yes; then - # Not a shared library - if test "$deplibs_check_method" != pass_all; then - # We're trying link a shared library against a static one - # but the system doesn't support it. - - # Just print a warning and add the library to dependency_libs so - # that the program can be linked against the static library. - $ECHO - $ECHO "*** Warning: This system can not link to static lib archive $lib." - $ECHO "*** I have the capability to make that library automatically link in when" - $ECHO "*** you link to this library. But I can only do this if you have a" - $ECHO "*** shared version of the library, which you do not appear to have." - if test "$module" = yes; then - $ECHO "*** But as you try to build a module library, libtool will still create " - $ECHO "*** a static module, that should work as long as the dlopening application" - $ECHO "*** is linked with the -dlopen flag to resolve symbols at runtime." - if test -z "$global_symbol_pipe"; then - $ECHO - $ECHO "*** However, this would only work if libtool was able to extract symbol" - $ECHO "*** lists from a program, using \`nm' or equivalent, but libtool could" - $ECHO "*** not find such a program. So, this module is probably useless." - $ECHO "*** \`nm' from GNU binutils and a full rebuild may help." - fi - if test "$build_old_libs" = no; then - build_libtool_libs=module - build_old_libs=yes - else - build_libtool_libs=no - fi - fi - else - deplibs="$dir/$old_library $deplibs" - link_static=yes - fi - fi # link shared/static library? - - if test "$linkmode" = lib; then - if test -n "$dependency_libs" && - { test "$hardcode_into_libs" != yes || - test "$build_old_libs" = yes || - test "$link_static" = yes; }; then - # Extract -R from dependency_libs - temp_deplibs= - for libdir in $dependency_libs; do - case $libdir in - -R*) func_stripname '-R' '' "$libdir" - temp_xrpath=$func_stripname_result - case " $xrpath " in - *" $temp_xrpath "*) ;; - *) xrpath="$xrpath $temp_xrpath";; - esac;; - *) temp_deplibs="$temp_deplibs $libdir";; - esac - done - dependency_libs="$temp_deplibs" - fi - - newlib_search_path="$newlib_search_path $absdir" - # Link against this library - test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" - # ... and its dependency_libs - tmp_libs= - for deplib in $dependency_libs; do - newdependency_libs="$deplib $newdependency_libs" - if $opt_duplicate_deps ; then - case "$tmp_libs " in - *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; - esac - fi - tmp_libs="$tmp_libs $deplib" - done - - if test "$link_all_deplibs" != no; then - # Add the search paths of all dependency libraries - for deplib in $dependency_libs; do - path= - case $deplib in - -L*) path="$deplib" ;; - *.la) - func_dirname "$deplib" "" "." - dir="$func_dirname_result" - # We need an absolute path. - case $dir in - [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; - *) - absdir=`cd "$dir" && pwd` - if test -z "$absdir"; then - func_warning "cannot determine absolute directory name of \`$dir'" - absdir="$dir" - fi - ;; - esac - if $GREP "^installed=no" $deplib > /dev/null; then - case $host in - *-*-darwin*) - depdepl= - eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` - if test -n "$deplibrary_names" ; then - for tmp in $deplibrary_names ; do - depdepl=$tmp - done - if test -f "$absdir/$objdir/$depdepl" ; then - depdepl="$absdir/$objdir/$depdepl" - darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` - if test -z "$darwin_install_name"; then - darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` - fi - compiler_flags="$compiler_flags ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}" - linker_flags="$linker_flags -dylib_file ${darwin_install_name}:${depdepl}" - path= - fi - fi - ;; - *) - path="-L$absdir/$objdir" - ;; - esac - else - eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` - test -z "$libdir" && \ - func_fatal_error "\`$deplib' is not a valid libtool archive" - test "$absdir" != "$libdir" && \ - func_warning "\`$deplib' seems to be moved" - - path="-L$absdir" - fi - ;; - esac - case " $deplibs " in - *" $path "*) ;; - *) deplibs="$path $deplibs" ;; - esac - done - fi # link_all_deplibs != no - fi # linkmode = lib - done # for deplib in $libs - if test "$pass" = link; then - if test "$linkmode" = "prog"; then - compile_deplibs="$new_inherited_linker_flags $compile_deplibs" - finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" - else - compiler_flags="$compiler_flags "`$ECHO "X $new_inherited_linker_flags" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` - fi - fi - dependency_libs="$newdependency_libs" - if test "$pass" = dlpreopen; then - # Link the dlpreopened libraries before other libraries - for deplib in $save_deplibs; do - deplibs="$deplib $deplibs" - done - fi - if test "$pass" != dlopen; then - if test "$pass" != conv; then - # Make sure lib_search_path contains only unique directories. - lib_search_path= - for dir in $newlib_search_path; do - case "$lib_search_path " in - *" $dir "*) ;; - *) lib_search_path="$lib_search_path $dir" ;; - esac - done - newlib_search_path= - fi - - if test "$linkmode,$pass" != "prog,link"; then - vars="deplibs" - else - vars="compile_deplibs finalize_deplibs" - fi - for var in $vars dependency_libs; do - # Add libraries to $var in reverse order - eval tmp_libs=\"\$$var\" - new_libs= - for deplib in $tmp_libs; do - # FIXME: Pedantically, this is the right thing to do, so - # that some nasty dependency loop isn't accidentally - # broken: - #new_libs="$deplib $new_libs" - # Pragmatically, this seems to cause very few problems in - # practice: - case $deplib in - -L*) new_libs="$deplib $new_libs" ;; - -R*) ;; - *) - # And here is the reason: when a library appears more - # than once as an explicit dependence of a library, or - # is implicitly linked in more than once by the - # compiler, it is considered special, and multiple - # occurrences thereof are not removed. Compare this - # with having the same library being listed as a - # dependency of multiple other libraries: in this case, - # we know (pedantically, we assume) the library does not - # need to be listed more than once, so we keep only the - # last copy. This is not always right, but it is rare - # enough that we require users that really mean to play - # such unportable linking tricks to link the library - # using -Wl,-lname, so that libtool does not consider it - # for duplicate removal. - case " $specialdeplibs " in - *" $deplib "*) new_libs="$deplib $new_libs" ;; - *) - case " $new_libs " in - *" $deplib "*) ;; - *) new_libs="$deplib $new_libs" ;; - esac - ;; - esac - ;; - esac - done - tmp_libs= - for deplib in $new_libs; do - case $deplib in - -L*) - case " $tmp_libs " in - *" $deplib "*) ;; - *) tmp_libs="$tmp_libs $deplib" ;; - esac - ;; - *) tmp_libs="$tmp_libs $deplib" ;; - esac - done - eval $var=\"$tmp_libs\" - done # for var - fi - # Last step: remove runtime libs from dependency_libs - # (they stay in deplibs) - tmp_libs= - for i in $dependency_libs ; do - case " $predeps $postdeps $compiler_lib_search_path " in - *" $i "*) - i="" - ;; - esac - if test -n "$i" ; then - tmp_libs="$tmp_libs $i" - fi - done - dependency_libs=$tmp_libs - done # for pass - if test "$linkmode" = prog; then - dlfiles="$newdlfiles" - fi - if test "$linkmode" = prog || test "$linkmode" = lib; then - dlprefiles="$newdlprefiles" - fi - - case $linkmode in - oldlib) - if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then - func_warning "\`-dlopen' is ignored for archives" - fi - - case " $deplibs" in - *\ -l* | *\ -L*) - func_warning "\`-l' and \`-L' are ignored for archives" ;; - esac - - test -n "$rpath" && \ - func_warning "\`-rpath' is ignored for archives" - - test -n "$xrpath" && \ - func_warning "\`-R' is ignored for archives" - - test -n "$vinfo" && \ - func_warning "\`-version-info/-version-number' is ignored for archives" - - test -n "$release" && \ - func_warning "\`-release' is ignored for archives" - - test -n "$export_symbols$export_symbols_regex" && \ - func_warning "\`-export-symbols' is ignored for archives" - - # Now set the variables for building old libraries. - build_libtool_libs=no - oldlibs="$output" - objs="$objs$old_deplibs" - ;; - - lib) - # Make sure we only generate libraries of the form `libNAME.la'. - case $outputname in - lib*) - func_stripname 'lib' '.la' "$outputname" - name=$func_stripname_result - eval shared_ext=\"$shrext_cmds\" - eval libname=\"$libname_spec\" - ;; - *) - test "$module" = no && \ - func_fatal_help "libtool library \`$output' must begin with \`lib'" - - if test "$need_lib_prefix" != no; then - # Add the "lib" prefix for modules if required - func_stripname '' '.la' "$outputname" - name=$func_stripname_result - eval shared_ext=\"$shrext_cmds\" - eval libname=\"$libname_spec\" - else - func_stripname '' '.la' "$outputname" - libname=$func_stripname_result - fi - ;; - esac - - if test -n "$objs"; then - if test "$deplibs_check_method" != pass_all; then - func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs" - else - $ECHO - $ECHO "*** Warning: Linking the shared library $output against the non-libtool" - $ECHO "*** objects $objs is not portable!" - libobjs="$libobjs $objs" - fi - fi - - test "$dlself" != no && \ - func_warning "\`-dlopen self' is ignored for libtool libraries" - - set dummy $rpath - shift - test "$#" -gt 1 && \ - func_warning "ignoring multiple \`-rpath's for a libtool library" - - install_libdir="$1" - - oldlibs= - if test -z "$rpath"; then - if test "$build_libtool_libs" = yes; then - # Building a libtool convenience library. - # Some compilers have problems with a `.al' extension so - # convenience libraries should have the same extension an - # archive normally would. - oldlibs="$output_objdir/$libname.$libext $oldlibs" - build_libtool_libs=convenience - build_old_libs=yes - fi - - test -n "$vinfo" && \ - func_warning "\`-version-info/-version-number' is ignored for convenience libraries" - - test -n "$release" && \ - func_warning "\`-release' is ignored for convenience libraries" - else - - # Parse the version information argument. - save_ifs="$IFS"; IFS=':' - set dummy $vinfo 0 0 0 - shift - IFS="$save_ifs" - - test -n "$7" && \ - func_fatal_help "too many parameters to \`-version-info'" - - # convert absolute version numbers to libtool ages - # this retains compatibility with .la files and attempts - # to make the code below a bit more comprehensible - - case $vinfo_number in - yes) - number_major="$1" - number_minor="$2" - number_revision="$3" - # - # There are really only two kinds -- those that - # use the current revision as the major version - # and those that subtract age and use age as - # a minor version. But, then there is irix - # which has an extra 1 added just for fun - # - case $version_type in - darwin|linux|osf|windows|none) - func_arith $number_major + $number_minor - current=$func_arith_result - age="$number_minor" - revision="$number_revision" - ;; - freebsd-aout|freebsd-elf|sunos) - current="$number_major" - revision="$number_minor" - age="0" - ;; - irix|nonstopux) - func_arith $number_major + $number_minor - current=$func_arith_result - age="$number_minor" - revision="$number_minor" - lt_irix_increment=no - ;; - *) - func_fatal_configuration "$modename: unknown library version type \`$version_type'" - ;; - esac - ;; - no) - current="$1" - revision="$2" - age="$3" - ;; - esac - - # Check that each of the things are valid numbers. - case $current in - 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; - *) - func_error "CURRENT \`$current' must be a nonnegative integer" - func_fatal_error "\`$vinfo' is not valid version information" - ;; - esac - - case $revision in - 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; - *) - func_error "REVISION \`$revision' must be a nonnegative integer" - func_fatal_error "\`$vinfo' is not valid version information" - ;; - esac - - case $age in - 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; - *) - func_error "AGE \`$age' must be a nonnegative integer" - func_fatal_error "\`$vinfo' is not valid version information" - ;; - esac - - if test "$age" -gt "$current"; then - func_error "AGE \`$age' is greater than the current interface number \`$current'" - func_fatal_error "\`$vinfo' is not valid version information" - fi - - # Calculate the version variables. - major= - versuffix= - verstring= - case $version_type in - none) ;; - - darwin) - # Like Linux, but with the current version available in - # verstring for coding it into the library header - func_arith $current - $age - major=.$func_arith_result - versuffix="$major.$age.$revision" - # Darwin ld doesn't like 0 for these options... - func_arith $current + 1 - minor_current=$func_arith_result - xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" - verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" - ;; - - freebsd-aout) - major=".$current" - versuffix=".$current.$revision"; - ;; - - freebsd-elf) - major=".$current" - versuffix=".$current" - ;; - - irix | nonstopux) - if test "X$lt_irix_increment" = "Xno"; then - func_arith $current - $age - else - func_arith $current - $age + 1 - fi - major=$func_arith_result - - case $version_type in - nonstopux) verstring_prefix=nonstopux ;; - *) verstring_prefix=sgi ;; - esac - verstring="$verstring_prefix$major.$revision" - - # Add in all the interfaces that we are compatible with. - loop=$revision - while test "$loop" -ne 0; do - func_arith $revision - $loop - iface=$func_arith_result - func_arith $loop - 1 - loop=$func_arith_result - verstring="$verstring_prefix$major.$iface:$verstring" - done - - # Before this point, $major must not contain `.'. - major=.$major - versuffix="$major.$revision" - ;; - - linux) - func_arith $current - $age - major=.$func_arith_result - versuffix="$major.$age.$revision" - ;; - - osf) - func_arith $current - $age - major=.$func_arith_result - versuffix=".$current.$age.$revision" - verstring="$current.$age.$revision" - - # Add in all the interfaces that we are compatible with. - loop=$age - while test "$loop" -ne 0; do - func_arith $current - $loop - iface=$func_arith_result - func_arith $loop - 1 - loop=$func_arith_result - verstring="$verstring:${iface}.0" - done - - # Make executables depend on our current version. - verstring="$verstring:${current}.0" - ;; - - qnx) - major=".$current" - versuffix=".$current" - ;; - - sunos) - major=".$current" - versuffix=".$current.$revision" - ;; - - windows) - # Use '-' rather than '.', since we only want one - # extension on DOS 8.3 filesystems. - func_arith $current - $age - major=$func_arith_result - versuffix="-$major" - ;; - - *) - func_fatal_configuration "unknown library version type \`$version_type'" - ;; - esac - - # Clear the version info if we defaulted, and they specified a release. - if test -z "$vinfo" && test -n "$release"; then - major= - case $version_type in - darwin) - # we can't check for "0.0" in archive_cmds due to quoting - # problems, so we reset it completely - verstring= - ;; - *) - verstring="0.0" - ;; - esac - if test "$need_version" = no; then - versuffix= - else - versuffix=".0.0" - fi - fi - - # Remove version info from name if versioning should be avoided - if test "$avoid_version" = yes && test "$need_version" = no; then - major= - versuffix= - verstring="" - fi - - # Check to see if the archive will have undefined symbols. - if test "$allow_undefined" = yes; then - if test "$allow_undefined_flag" = unsupported; then - func_warning "undefined symbols not allowed in $host shared libraries" - build_libtool_libs=no - build_old_libs=yes - fi - else - # Don't allow undefined symbols. - allow_undefined_flag="$no_undefined_flag" - fi - - fi - - func_generate_dlsyms "$libname" "$libname" "yes" - libobjs="$libobjs $symfileobj" - test "X$libobjs" = "X " && libobjs= - - if test "$mode" != relink; then - # Remove our outputs, but don't remove object files since they - # may have been created when compiling PIC objects. - removelist= - tempremovelist=`$ECHO "$output_objdir/*"` - for p in $tempremovelist; do - case $p in - *.$objext | *.gcno) - ;; - $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) - if test "X$precious_files_regex" != "X"; then - if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 - then - continue - fi - fi - removelist="$removelist $p" - ;; - *) ;; - esac - done - test -n "$removelist" && \ - func_show_eval "${RM}r \$removelist" - fi - - # Now set the variables for building old libraries. - if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then - oldlibs="$oldlibs $output_objdir/$libname.$libext" - - # Transform .lo files to .o files. - oldobjs="$objs "`$ECHO "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP` - fi - - # Eliminate all temporary directories. - #for path in $notinst_path; do - # lib_search_path=`$ECHO "X$lib_search_path " | $Xsed -e "s% $path % %g"` - # deplibs=`$ECHO "X$deplibs " | $Xsed -e "s% -L$path % %g"` - # dependency_libs=`$ECHO "X$dependency_libs " | $Xsed -e "s% -L$path % %g"` - #done - - if test -n "$xrpath"; then - # If the user specified any rpath flags, then add them. - temp_xrpath= - for libdir in $xrpath; do - temp_xrpath="$temp_xrpath -R$libdir" - case "$finalize_rpath " in - *" $libdir "*) ;; - *) finalize_rpath="$finalize_rpath $libdir" ;; - esac - done - if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then - dependency_libs="$temp_xrpath $dependency_libs" - fi - fi - - # Make sure dlfiles contains only unique files that won't be dlpreopened - old_dlfiles="$dlfiles" - dlfiles= - for lib in $old_dlfiles; do - case " $dlprefiles $dlfiles " in - *" $lib "*) ;; - *) dlfiles="$dlfiles $lib" ;; - esac - done - - # Make sure dlprefiles contains only unique files - old_dlprefiles="$dlprefiles" - dlprefiles= - for lib in $old_dlprefiles; do - case "$dlprefiles " in - *" $lib "*) ;; - *) dlprefiles="$dlprefiles $lib" ;; - esac - done - - if test "$build_libtool_libs" = yes; then - if test -n "$rpath"; then - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc*) - # these systems don't actually have a c library (as such)! - ;; - *-*-rhapsody* | *-*-darwin1.[012]) - # Rhapsody C library is in the System framework - deplibs="$deplibs System.ltframework" - ;; - *-*-netbsd*) - # Don't link with libc until the a.out ld.so is fixed. - ;; - *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) - # Do not include libc due to us having libc/libc_r. - ;; - *-*-sco3.2v5* | *-*-sco5v6*) - # Causes problems with __ctype - ;; - *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) - # Compiler inserts libc in the correct place for threads to work - ;; - *) - # Add libc to deplibs on all other systems if necessary. - if test "$build_libtool_need_lc" = "yes"; then - deplibs="$deplibs -lc" - fi - ;; - esac - fi - - # Transform deplibs into only deplibs that can be linked in shared. - name_save=$name - libname_save=$libname - release_save=$release - versuffix_save=$versuffix - major_save=$major - # I'm not sure if I'm treating the release correctly. I think - # release should show up in the -l (ie -lgmp5) so we don't want to - # add it in twice. Is that correct? - release="" - versuffix="" - major="" - newdeplibs= - droppeddeps=no - case $deplibs_check_method in - pass_all) - # Don't check for shared/static. Everything works. - # This might be a little naive. We might want to check - # whether the library exists or not. But this is on - # osf3 & osf4 and I'm not really sure... Just - # implementing what was already the behavior. - newdeplibs=$deplibs - ;; - test_compile) - # This code stresses the "libraries are programs" paradigm to its - # limits. Maybe even breaks it. We compile a program, linking it - # against the deplibs as a proxy for the library. Then we can check - # whether they linked in statically or dynamically with ldd. - $opt_dry_run || $RM conftest.c - cat > conftest.c </dev/null` - for potent_lib in $potential_libs; do - # Follow soft links. - if ls -lLd "$potent_lib" 2>/dev/null | - $GREP " -> " >/dev/null; then - continue - fi - # The statement above tries to avoid entering an - # endless loop below, in case of cyclic links. - # We might still enter an endless loop, since a link - # loop can be closed while we follow links, - # but so what? - potlib="$potent_lib" - while test -h "$potlib" 2>/dev/null; do - potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` - case $potliblink in - [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; - *) potlib=`$ECHO "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";; - esac - done - if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | - $SED -e 10q | - $EGREP "$file_magic_regex" > /dev/null; then - newdeplibs="$newdeplibs $a_deplib" - a_deplib="" - break 2 - fi - done - done - fi - if test -n "$a_deplib" ; then - droppeddeps=yes - $ECHO - $ECHO "*** Warning: linker path does not have real file for library $a_deplib." - $ECHO "*** I have the capability to make that library automatically link in when" - $ECHO "*** you link to this library. But I can only do this if you have a" - $ECHO "*** shared version of the library, which you do not appear to have" - $ECHO "*** because I did check the linker path looking for a file starting" - if test -z "$potlib" ; then - $ECHO "*** with $libname but no candidates were found. (...for file magic test)" - else - $ECHO "*** with $libname and none of the candidates passed a file format test" - $ECHO "*** using a file magic. Last file checked: $potlib" - fi - fi - ;; - *) - # Add a -L argument. - newdeplibs="$newdeplibs $a_deplib" - ;; - esac - done # Gone through all deplibs. - ;; - match_pattern*) - set dummy $deplibs_check_method; shift - match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` - for a_deplib in $deplibs; do - case $a_deplib in - -l*) - func_stripname -l '' "$a_deplib" - name=$func_stripname_result - if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then - case " $predeps $postdeps " in - *" $a_deplib "*) - newdeplibs="$newdeplibs $a_deplib" - a_deplib="" - ;; - esac - fi - if test -n "$a_deplib" ; then - libname=`eval "\\$ECHO \"$libname_spec\""` - for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do - potential_libs=`ls $i/$libname[.-]* 2>/dev/null` - for potent_lib in $potential_libs; do - potlib="$potent_lib" # see symlink-check above in file_magic test - if eval "\$ECHO \"X$potent_lib\"" 2>/dev/null | $Xsed -e 10q | \ - $EGREP "$match_pattern_regex" > /dev/null; then - newdeplibs="$newdeplibs $a_deplib" - a_deplib="" - break 2 - fi - done - done - fi - if test -n "$a_deplib" ; then - droppeddeps=yes - $ECHO - $ECHO "*** Warning: linker path does not have real file for library $a_deplib." - $ECHO "*** I have the capability to make that library automatically link in when" - $ECHO "*** you link to this library. But I can only do this if you have a" - $ECHO "*** shared version of the library, which you do not appear to have" - $ECHO "*** because I did check the linker path looking for a file starting" - if test -z "$potlib" ; then - $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" - else - $ECHO "*** with $libname and none of the candidates passed a file format test" - $ECHO "*** using a regex pattern. Last file checked: $potlib" - fi - fi - ;; - *) - # Add a -L argument. - newdeplibs="$newdeplibs $a_deplib" - ;; - esac - done # Gone through all deplibs. - ;; - none | unknown | *) - newdeplibs="" - tmp_deplibs=`$ECHO "X $deplibs" | $Xsed \ - -e 's/ -lc$//' -e 's/ -[LR][^ ]*//g'` - if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then - for i in $predeps $postdeps ; do - # can't use Xsed below, because $i might contain '/' - tmp_deplibs=`$ECHO "X $tmp_deplibs" | $Xsed -e "s,$i,,"` - done - fi - if $ECHO "X $tmp_deplibs" | $Xsed -e 's/[ ]//g' | - $GREP . >/dev/null; then - $ECHO - if test "X$deplibs_check_method" = "Xnone"; then - $ECHO "*** Warning: inter-library dependencies are not supported in this platform." - else - $ECHO "*** Warning: inter-library dependencies are not known to be supported." - fi - $ECHO "*** All declared inter-library dependencies are being dropped." - droppeddeps=yes - fi - ;; - esac - versuffix=$versuffix_save - major=$major_save - release=$release_save - libname=$libname_save - name=$name_save - - case $host in - *-*-rhapsody* | *-*-darwin1.[012]) - # On Rhapsody replace the C library with the System framework - newdeplibs=`$ECHO "X $newdeplibs" | $Xsed -e 's/ -lc / System.ltframework /'` - ;; - esac - - if test "$droppeddeps" = yes; then - if test "$module" = yes; then - $ECHO - $ECHO "*** Warning: libtool could not satisfy all declared inter-library" - $ECHO "*** dependencies of module $libname. Therefore, libtool will create" - $ECHO "*** a static module, that should work as long as the dlopening" - $ECHO "*** application is linked with the -dlopen flag." - if test -z "$global_symbol_pipe"; then - $ECHO - $ECHO "*** However, this would only work if libtool was able to extract symbol" - $ECHO "*** lists from a program, using \`nm' or equivalent, but libtool could" - $ECHO "*** not find such a program. So, this module is probably useless." - $ECHO "*** \`nm' from GNU binutils and a full rebuild may help." - fi - if test "$build_old_libs" = no; then - oldlibs="$output_objdir/$libname.$libext" - build_libtool_libs=module - build_old_libs=yes - else - build_libtool_libs=no - fi - else - $ECHO "*** The inter-library dependencies that have been dropped here will be" - $ECHO "*** automatically added whenever a program is linked with this library" - $ECHO "*** or is declared to -dlopen it." - - if test "$allow_undefined" = no; then - $ECHO - $ECHO "*** Since this library must not contain undefined symbols," - $ECHO "*** because either the platform does not support them or" - $ECHO "*** it was explicitly requested with -no-undefined," - $ECHO "*** libtool will only create a static version of it." - if test "$build_old_libs" = no; then - oldlibs="$output_objdir/$libname.$libext" - build_libtool_libs=module - build_old_libs=yes - else - build_libtool_libs=no - fi - fi - fi - fi - # Done checking deplibs! - deplibs=$newdeplibs - fi - # Time to change all our "foo.ltframework" stuff back to "-framework foo" - case $host in - *-*-darwin*) - newdeplibs=`$ECHO "X $newdeplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` - new_inherited_linker_flags=`$ECHO "X $new_inherited_linker_flags" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` - deplibs=`$ECHO "X $deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` - ;; - esac - - # move library search paths that coincide with paths to not yet - # installed libraries to the beginning of the library search list - new_libs= - for path in $notinst_path; do - case " $new_libs " in - *" -L$path/$objdir "*) ;; - *) - case " $deplibs " in - *" -L$path/$objdir "*) - new_libs="$new_libs -L$path/$objdir" ;; - esac - ;; - esac - done - for deplib in $deplibs; do - case $deplib in - -L*) - case " $new_libs " in - *" $deplib "*) ;; - *) new_libs="$new_libs $deplib" ;; - esac - ;; - *) new_libs="$new_libs $deplib" ;; - esac - done - deplibs="$new_libs" - - # All the library-specific variables (install_libdir is set above). - library_names= - old_library= - dlname= - - # Test again, we may have decided not to build it any more - if test "$build_libtool_libs" = yes; then - if test "$hardcode_into_libs" = yes; then - # Hardcode the library paths - hardcode_libdirs= - dep_rpath= - rpath="$finalize_rpath" - test "$mode" != relink && rpath="$compile_rpath$rpath" - for libdir in $rpath; do - if test -n "$hardcode_libdir_flag_spec"; then - if test -n "$hardcode_libdir_separator"; then - if test -z "$hardcode_libdirs"; then - hardcode_libdirs="$libdir" - else - # Just accumulate the unique libdirs. - case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in - *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) - ;; - *) - hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" - ;; - esac - fi - else - eval flag=\"$hardcode_libdir_flag_spec\" - dep_rpath="$dep_rpath $flag" - fi - elif test -n "$runpath_var"; then - case "$perm_rpath " in - *" $libdir "*) ;; - *) perm_rpath="$perm_rpath $libdir" ;; - esac - fi - done - # Substitute the hardcoded libdirs into the rpath. - if test -n "$hardcode_libdir_separator" && - test -n "$hardcode_libdirs"; then - libdir="$hardcode_libdirs" - if test -n "$hardcode_libdir_flag_spec_ld"; then - eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\" - else - eval dep_rpath=\"$hardcode_libdir_flag_spec\" - fi - fi - if test -n "$runpath_var" && test -n "$perm_rpath"; then - # We should set the runpath_var. - rpath= - for dir in $perm_rpath; do - rpath="$rpath$dir:" - done - eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" - fi - test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" - fi - - shlibpath="$finalize_shlibpath" - test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath" - if test -n "$shlibpath"; then - eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" - fi - - # Get the real and link names of the library. - eval shared_ext=\"$shrext_cmds\" - eval library_names=\"$library_names_spec\" - set dummy $library_names - shift - realname="$1" - shift - - if test -n "$soname_spec"; then - eval soname=\"$soname_spec\" - else - soname="$realname" - fi - if test -z "$dlname"; then - dlname=$soname - fi - - lib="$output_objdir/$realname" - linknames= - for link - do - linknames="$linknames $link" - done - - # Use standard objects if they are pic - test -z "$pic_flag" && libobjs=`$ECHO "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` - test "X$libobjs" = "X " && libobjs= - - delfiles= - if test -n "$export_symbols" && test -n "$include_expsyms"; then - $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" - export_symbols="$output_objdir/$libname.uexp" - delfiles="$delfiles $export_symbols" - fi - - orig_export_symbols= - case $host_os in - cygwin* | mingw* | cegcc*) - if test -n "$export_symbols" && test -z "$export_symbols_regex"; then - # exporting using user supplied symfile - if test "x`$SED 1q $export_symbols`" != xEXPORTS; then - # and it's NOT already a .def file. Must figure out - # which of the given symbols are data symbols and tag - # them as such. So, trigger use of export_symbols_cmds. - # export_symbols gets reassigned inside the "prepare - # the list of exported symbols" if statement, so the - # include_expsyms logic still works. - orig_export_symbols="$export_symbols" - export_symbols= - always_export_symbols=yes - fi - fi - ;; - esac - - # Prepare the list of exported symbols - if test -z "$export_symbols"; then - if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then - func_verbose "generating symbol list for \`$libname.la'" - export_symbols="$output_objdir/$libname.exp" - $opt_dry_run || $RM $export_symbols - cmds=$export_symbols_cmds - save_ifs="$IFS"; IFS='~' - for cmd in $cmds; do - IFS="$save_ifs" - eval cmd=\"$cmd\" - func_len " $cmd" - len=$func_len_result - if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then - func_show_eval "$cmd" 'exit $?' - skipped_export=false - else - # The command line is too long to execute in one step. - func_verbose "using reloadable object file for export list..." - skipped_export=: - # Break out early, otherwise skipped_export may be - # set to false by a later but shorter cmd. - break - fi - done - IFS="$save_ifs" - if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then - func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' - func_show_eval '$MV "${export_symbols}T" "$export_symbols"' - fi - fi - fi - - if test -n "$export_symbols" && test -n "$include_expsyms"; then - tmp_export_symbols="$export_symbols" - test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" - $opt_dry_run || eval '$ECHO "X$include_expsyms" | $Xsed | $SP2NL >> "$tmp_export_symbols"' - fi - - if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then - # The given exports_symbols file has to be filtered, so filter it. - func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" - # FIXME: $output_objdir/$libname.filter potentially contains lots of - # 's' commands which not all seds can handle. GNU sed should be fine - # though. Also, the filter scales superlinearly with the number of - # global variables. join(1) would be nice here, but unfortunately - # isn't a blessed tool. - $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter - delfiles="$delfiles $export_symbols $output_objdir/$libname.filter" - export_symbols=$output_objdir/$libname.def - $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols - fi - - tmp_deplibs= - for test_deplib in $deplibs; do - case " $convenience " in - *" $test_deplib "*) ;; - *) - tmp_deplibs="$tmp_deplibs $test_deplib" - ;; - esac - done - deplibs="$tmp_deplibs" - - if test -n "$convenience"; then - if test -n "$whole_archive_flag_spec" && - test "$compiler_needs_object" = yes && - test -z "$libobjs"; then - # extract the archives, so we have objects to list. - # TODO: could optimize this to just extract one archive. - whole_archive_flag_spec= - fi - if test -n "$whole_archive_flag_spec"; then - save_libobjs=$libobjs - eval libobjs=\"\$libobjs $whole_archive_flag_spec\" - test "X$libobjs" = "X " && libobjs= - else - gentop="$output_objdir/${outputname}x" - generated="$generated $gentop" - - func_extract_archives $gentop $convenience - libobjs="$libobjs $func_extract_archives_result" - test "X$libobjs" = "X " && libobjs= - fi - fi - - if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then - eval flag=\"$thread_safe_flag_spec\" - linker_flags="$linker_flags $flag" - fi - - # Make a backup of the uninstalled library when relinking - if test "$mode" = relink; then - $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? - fi - - # Do each of the archive commands. - if test "$module" = yes && test -n "$module_cmds" ; then - if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then - eval test_cmds=\"$module_expsym_cmds\" - cmds=$module_expsym_cmds - else - eval test_cmds=\"$module_cmds\" - cmds=$module_cmds - fi - else - if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then - eval test_cmds=\"$archive_expsym_cmds\" - cmds=$archive_expsym_cmds - else - eval test_cmds=\"$archive_cmds\" - cmds=$archive_cmds - fi - fi - - if test "X$skipped_export" != "X:" && - func_len " $test_cmds" && - len=$func_len_result && - test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then - : - else - # The command line is too long to link in one step, link piecewise - # or, if using GNU ld and skipped_export is not :, use a linker - # script. - - # Save the value of $output and $libobjs because we want to - # use them later. If we have whole_archive_flag_spec, we - # want to use save_libobjs as it was before - # whole_archive_flag_spec was expanded, because we can't - # assume the linker understands whole_archive_flag_spec. - # This may have to be revisited, in case too many - # convenience libraries get linked in and end up exceeding - # the spec. - if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then - save_libobjs=$libobjs - fi - save_output=$output - output_la=`$ECHO "X$output" | $Xsed -e "$basename"` - - # Clear the reloadable object creation command queue and - # initialize k to one. - test_cmds= - concat_cmds= - objlist= - last_robj= - k=1 - - if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then - output=${output_objdir}/${output_la}.lnkscript - func_verbose "creating GNU ld script: $output" - $ECHO 'INPUT (' > $output - for obj in $save_libobjs - do - $ECHO "$obj" >> $output - done - $ECHO ')' >> $output - delfiles="$delfiles $output" - elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then - output=${output_objdir}/${output_la}.lnk - func_verbose "creating linker input file list: $output" - : > $output - set x $save_libobjs - shift - firstobj= - if test "$compiler_needs_object" = yes; then - firstobj="$1 " - shift - fi - for obj - do - $ECHO "$obj" >> $output - done - delfiles="$delfiles $output" - output=$firstobj\"$file_list_spec$output\" - else - if test -n "$save_libobjs"; then - func_verbose "creating reloadable object files..." - output=$output_objdir/$output_la-${k}.$objext - eval test_cmds=\"$reload_cmds\" - func_len " $test_cmds" - len0=$func_len_result - len=$len0 - - # Loop over the list of objects to be linked. - for obj in $save_libobjs - do - func_len " $obj" - func_arith $len + $func_len_result - len=$func_arith_result - if test "X$objlist" = X || - test "$len" -lt "$max_cmd_len"; then - func_append objlist " $obj" - else - # The command $test_cmds is almost too long, add a - # command to the queue. - if test "$k" -eq 1 ; then - # The first file doesn't have a previous command to add. - eval concat_cmds=\"$reload_cmds $objlist $last_robj\" - else - # All subsequent reloadable object files will link in - # the last one created. - eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj~\$RM $last_robj\" - fi - last_robj=$output_objdir/$output_la-${k}.$objext - func_arith $k + 1 - k=$func_arith_result - output=$output_objdir/$output_la-${k}.$objext - objlist=$obj - func_len " $last_robj" - func_arith $len0 + $func_len_result - len=$func_arith_result - fi - done - # Handle the remaining objects by creating one last - # reloadable object file. All subsequent reloadable object - # files will link in the last one created. - test -z "$concat_cmds" || concat_cmds=$concat_cmds~ - eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\" - if test -n "$last_robj"; then - eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\" - fi - delfiles="$delfiles $output" - - else - output= - fi - - if ${skipped_export-false}; then - func_verbose "generating symbol list for \`$libname.la'" - export_symbols="$output_objdir/$libname.exp" - $opt_dry_run || $RM $export_symbols - libobjs=$output - # Append the command to create the export file. - test -z "$concat_cmds" || concat_cmds=$concat_cmds~ - eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" - if test -n "$last_robj"; then - eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" - fi - fi - - test -n "$save_libobjs" && - func_verbose "creating a temporary reloadable object file: $output" - - # Loop through the commands generated above and execute them. - save_ifs="$IFS"; IFS='~' - for cmd in $concat_cmds; do - IFS="$save_ifs" - $opt_silent || { - func_quote_for_expand "$cmd" - eval "func_echo $func_quote_for_expand_result" - } - $opt_dry_run || eval "$cmd" || { - lt_exit=$? - - # Restore the uninstalled library and exit - if test "$mode" = relink; then - ( cd "$output_objdir" && \ - $RM "${realname}T" && \ - $MV "${realname}U" "$realname" ) - fi - - exit $lt_exit - } - done - IFS="$save_ifs" - - if test -n "$export_symbols_regex" && ${skipped_export-false}; then - func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' - func_show_eval '$MV "${export_symbols}T" "$export_symbols"' - fi - fi - - if ${skipped_export-false}; then - if test -n "$export_symbols" && test -n "$include_expsyms"; then - tmp_export_symbols="$export_symbols" - test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" - $opt_dry_run || eval '$ECHO "X$include_expsyms" | $Xsed | $SP2NL >> "$tmp_export_symbols"' - fi - - if test -n "$orig_export_symbols"; then - # The given exports_symbols file has to be filtered, so filter it. - func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" - # FIXME: $output_objdir/$libname.filter potentially contains lots of - # 's' commands which not all seds can handle. GNU sed should be fine - # though. Also, the filter scales superlinearly with the number of - # global variables. join(1) would be nice here, but unfortunately - # isn't a blessed tool. - $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter - delfiles="$delfiles $export_symbols $output_objdir/$libname.filter" - export_symbols=$output_objdir/$libname.def - $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols - fi - fi - - libobjs=$output - # Restore the value of output. - output=$save_output - - if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then - eval libobjs=\"\$libobjs $whole_archive_flag_spec\" - test "X$libobjs" = "X " && libobjs= - fi - # Expand the library linking commands again to reset the - # value of $libobjs for piecewise linking. - - # Do each of the archive commands. - if test "$module" = yes && test -n "$module_cmds" ; then - if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then - cmds=$module_expsym_cmds - else - cmds=$module_cmds - fi - else - if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then - cmds=$archive_expsym_cmds - else - cmds=$archive_cmds - fi - fi - fi - - if test -n "$delfiles"; then - # Append the command to remove temporary files to $cmds. - eval cmds=\"\$cmds~\$RM $delfiles\" - fi - - # Add any objects from preloaded convenience libraries - if test -n "$dlprefiles"; then - gentop="$output_objdir/${outputname}x" - generated="$generated $gentop" - - func_extract_archives $gentop $dlprefiles - libobjs="$libobjs $func_extract_archives_result" - test "X$libobjs" = "X " && libobjs= - fi - - save_ifs="$IFS"; IFS='~' - for cmd in $cmds; do - IFS="$save_ifs" - eval cmd=\"$cmd\" - $opt_silent || { - func_quote_for_expand "$cmd" - eval "func_echo $func_quote_for_expand_result" - } - $opt_dry_run || eval "$cmd" || { - lt_exit=$? - - # Restore the uninstalled library and exit - if test "$mode" = relink; then - ( cd "$output_objdir" && \ - $RM "${realname}T" && \ - $MV "${realname}U" "$realname" ) - fi - - exit $lt_exit - } - done - IFS="$save_ifs" - - # Restore the uninstalled library and exit - if test "$mode" = relink; then - $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? - - if test -n "$convenience"; then - if test -z "$whole_archive_flag_spec"; then - func_show_eval '${RM}r "$gentop"' - fi - fi - - exit $EXIT_SUCCESS - fi - - # Create links to the real library. - for linkname in $linknames; do - if test "$realname" != "$linkname"; then - func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' - fi - done - - # If -module or -export-dynamic was specified, set the dlname. - if test "$module" = yes || test "$export_dynamic" = yes; then - # On all known operating systems, these are identical. - dlname="$soname" - fi - fi - ;; - - obj) - if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then - func_warning "\`-dlopen' is ignored for objects" - fi - - case " $deplibs" in - *\ -l* | *\ -L*) - func_warning "\`-l' and \`-L' are ignored for objects" ;; - esac - - test -n "$rpath" && \ - func_warning "\`-rpath' is ignored for objects" - - test -n "$xrpath" && \ - func_warning "\`-R' is ignored for objects" - - test -n "$vinfo" && \ - func_warning "\`-version-info' is ignored for objects" - - test -n "$release" && \ - func_warning "\`-release' is ignored for objects" - - case $output in - *.lo) - test -n "$objs$old_deplibs" && \ - func_fatal_error "cannot build library object \`$output' from non-libtool objects" - - libobj=$output - func_lo2o "$libobj" - obj=$func_lo2o_result - ;; - *) - libobj= - obj="$output" - ;; - esac - - # Delete the old objects. - $opt_dry_run || $RM $obj $libobj - - # Objects from convenience libraries. This assumes - # single-version convenience libraries. Whenever we create - # different ones for PIC/non-PIC, this we'll have to duplicate - # the extraction. - reload_conv_objs= - gentop= - # reload_cmds runs $LD directly, so let us get rid of - # -Wl from whole_archive_flag_spec and hope we can get by with - # turning comma into space.. - wl= - - if test -n "$convenience"; then - if test -n "$whole_archive_flag_spec"; then - eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" - reload_conv_objs=$reload_objs\ `$ECHO "X$tmp_whole_archive_flags" | $Xsed -e 's|,| |g'` - else - gentop="$output_objdir/${obj}x" - generated="$generated $gentop" - - func_extract_archives $gentop $convenience - reload_conv_objs="$reload_objs $func_extract_archives_result" - fi - fi - - # Create the old-style object. - reload_objs="$objs$old_deplibs "`$ECHO "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test - - output="$obj" - func_execute_cmds "$reload_cmds" 'exit $?' - - # Exit if we aren't doing a library object file. - if test -z "$libobj"; then - if test -n "$gentop"; then - func_show_eval '${RM}r "$gentop"' - fi - - exit $EXIT_SUCCESS - fi - - if test "$build_libtool_libs" != yes; then - if test -n "$gentop"; then - func_show_eval '${RM}r "$gentop"' - fi - - # Create an invalid libtool object if no PIC, so that we don't - # accidentally link it into a program. - # $show "echo timestamp > $libobj" - # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? - exit $EXIT_SUCCESS - fi - - if test -n "$pic_flag" || test "$pic_mode" != default; then - # Only do commands if we really have different PIC objects. - reload_objs="$libobjs $reload_conv_objs" - output="$libobj" - func_execute_cmds "$reload_cmds" 'exit $?' - fi - - if test -n "$gentop"; then - func_show_eval '${RM}r "$gentop"' - fi - - exit $EXIT_SUCCESS - ;; - - prog) - case $host in - *cygwin*) func_stripname '' '.exe' "$output" - output=$func_stripname_result.exe;; - esac - test -n "$vinfo" && \ - func_warning "\`-version-info' is ignored for programs" - - test -n "$release" && \ - func_warning "\`-release' is ignored for programs" - - test "$preload" = yes \ - && test "$dlopen_support" = unknown \ - && test "$dlopen_self" = unknown \ - && test "$dlopen_self_static" = unknown && \ - func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support." - - case $host in - *-*-rhapsody* | *-*-darwin1.[012]) - # On Rhapsody replace the C library is the System framework - compile_deplibs=`$ECHO "X $compile_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'` - finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'` - ;; - esac - - case $host in - *-*-darwin*) - # Don't allow lazy linking, it breaks C++ global constructors - # But is supposedly fixed on 10.4 or later (yay!). - if test "$tagname" = CXX ; then - case ${MACOSX_DEPLOYMENT_TARGET-10.0} in - 10.[0123]) - compile_command="$compile_command ${wl}-bind_at_load" - finalize_command="$finalize_command ${wl}-bind_at_load" - ;; - esac - fi - # Time to change all our "foo.ltframework" stuff back to "-framework foo" - compile_deplibs=`$ECHO "X $compile_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` - finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` - ;; - esac - - - # move library search paths that coincide with paths to not yet - # installed libraries to the beginning of the library search list - new_libs= - for path in $notinst_path; do - case " $new_libs " in - *" -L$path/$objdir "*) ;; - *) - case " $compile_deplibs " in - *" -L$path/$objdir "*) - new_libs="$new_libs -L$path/$objdir" ;; - esac - ;; - esac - done - for deplib in $compile_deplibs; do - case $deplib in - -L*) - case " $new_libs " in - *" $deplib "*) ;; - *) new_libs="$new_libs $deplib" ;; - esac - ;; - *) new_libs="$new_libs $deplib" ;; - esac - done - compile_deplibs="$new_libs" - - - compile_command="$compile_command $compile_deplibs" - finalize_command="$finalize_command $finalize_deplibs" - - if test -n "$rpath$xrpath"; then - # If the user specified any rpath flags, then add them. - for libdir in $rpath $xrpath; do - # This is the magic to use -rpath. - case "$finalize_rpath " in - *" $libdir "*) ;; - *) finalize_rpath="$finalize_rpath $libdir" ;; - esac - done - fi - - # Now hardcode the library paths - rpath= - hardcode_libdirs= - for libdir in $compile_rpath $finalize_rpath; do - if test -n "$hardcode_libdir_flag_spec"; then - if test -n "$hardcode_libdir_separator"; then - if test -z "$hardcode_libdirs"; then - hardcode_libdirs="$libdir" - else - # Just accumulate the unique libdirs. - case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in - *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) - ;; - *) - hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" - ;; - esac - fi - else - eval flag=\"$hardcode_libdir_flag_spec\" - rpath="$rpath $flag" - fi - elif test -n "$runpath_var"; then - case "$perm_rpath " in - *" $libdir "*) ;; - *) perm_rpath="$perm_rpath $libdir" ;; - esac - fi - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) - testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'` - case :$dllsearchpath: in - *":$libdir:"*) ;; - ::) dllsearchpath=$libdir;; - *) dllsearchpath="$dllsearchpath:$libdir";; - esac - case :$dllsearchpath: in - *":$testbindir:"*) ;; - ::) dllsearchpath=$testbindir;; - *) dllsearchpath="$dllsearchpath:$testbindir";; - esac - ;; - esac - done - # Substitute the hardcoded libdirs into the rpath. - if test -n "$hardcode_libdir_separator" && - test -n "$hardcode_libdirs"; then - libdir="$hardcode_libdirs" - eval rpath=\" $hardcode_libdir_flag_spec\" - fi - compile_rpath="$rpath" - - rpath= - hardcode_libdirs= - for libdir in $finalize_rpath; do - if test -n "$hardcode_libdir_flag_spec"; then - if test -n "$hardcode_libdir_separator"; then - if test -z "$hardcode_libdirs"; then - hardcode_libdirs="$libdir" - else - # Just accumulate the unique libdirs. - case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in - *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) - ;; - *) - hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" - ;; - esac - fi - else - eval flag=\"$hardcode_libdir_flag_spec\" - rpath="$rpath $flag" - fi - elif test -n "$runpath_var"; then - case "$finalize_perm_rpath " in - *" $libdir "*) ;; - *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;; - esac - fi - done - # Substitute the hardcoded libdirs into the rpath. - if test -n "$hardcode_libdir_separator" && - test -n "$hardcode_libdirs"; then - libdir="$hardcode_libdirs" - eval rpath=\" $hardcode_libdir_flag_spec\" - fi - finalize_rpath="$rpath" - - if test -n "$libobjs" && test "$build_old_libs" = yes; then - # Transform all the library objects into standard objects. - compile_command=`$ECHO "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` - finalize_command=`$ECHO "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` - fi - - func_generate_dlsyms "$outputname" "@PROGRAM@" "no" - - # template prelinking step - if test -n "$prelink_cmds"; then - func_execute_cmds "$prelink_cmds" 'exit $?' - fi - - wrappers_required=yes - case $host in - *cygwin* | *mingw* ) - if test "$build_libtool_libs" != yes; then - wrappers_required=no - fi - ;; - *cegcc) - # Disable wrappers for cegcc, we are cross compiling anyway. - wrappers_required=no - ;; - *) - if test "$need_relink" = no || test "$build_libtool_libs" != yes; then - wrappers_required=no - fi - ;; - esac - if test "$wrappers_required" = no; then - # Replace the output file specification. - compile_command=`$ECHO "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` - link_command="$compile_command$compile_rpath" - - # We have no uninstalled library dependencies, so finalize right now. - exit_status=0 - func_show_eval "$link_command" 'exit_status=$?' - - # Delete the generated files. - if test -f "$output_objdir/${outputname}S.${objext}"; then - func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"' - fi - - exit $exit_status - fi - - if test -n "$compile_shlibpath$finalize_shlibpath"; then - compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" - fi - if test -n "$finalize_shlibpath"; then - finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" - fi - - compile_var= - finalize_var= - if test -n "$runpath_var"; then - if test -n "$perm_rpath"; then - # We should set the runpath_var. - rpath= - for dir in $perm_rpath; do - rpath="$rpath$dir:" - done - compile_var="$runpath_var=\"$rpath\$$runpath_var\" " - fi - if test -n "$finalize_perm_rpath"; then - # We should set the runpath_var. - rpath= - for dir in $finalize_perm_rpath; do - rpath="$rpath$dir:" - done - finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " - fi - fi - - if test "$no_install" = yes; then - # We don't need to create a wrapper script. - link_command="$compile_var$compile_command$compile_rpath" - # Replace the output file specification. - link_command=`$ECHO "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` - # Delete the old output file. - $opt_dry_run || $RM $output - # Link the executable and exit - func_show_eval "$link_command" 'exit $?' - exit $EXIT_SUCCESS - fi - - if test "$hardcode_action" = relink; then - # Fast installation is not supported - link_command="$compile_var$compile_command$compile_rpath" - relink_command="$finalize_var$finalize_command$finalize_rpath" - - func_warning "this platform does not like uninstalled shared libraries" - func_warning "\`$output' will be relinked during installation" - else - if test "$fast_install" != no; then - link_command="$finalize_var$compile_command$finalize_rpath" - if test "$fast_install" = yes; then - relink_command=`$ECHO "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'` - else - # fast_install is set to needless - relink_command= - fi - else - link_command="$compile_var$compile_command$compile_rpath" - relink_command="$finalize_var$finalize_command$finalize_rpath" - fi - fi - - # Replace the output file specification. - link_command=`$ECHO "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` - - # Delete the old output files. - $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname - - func_show_eval "$link_command" 'exit $?' - - # Now create the wrapper script. - func_verbose "creating $output" - - # Quote the relink command for shipping. - if test -n "$relink_command"; then - # Preserve any variables that may affect compiler behavior - for var in $variables_saved_for_relink; do - if eval test -z \"\${$var+set}\"; then - relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" - elif eval var_value=\$$var; test -z "$var_value"; then - relink_command="$var=; export $var; $relink_command" - else - func_quote_for_eval "$var_value" - relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" - fi - done - relink_command="(cd `pwd`; $relink_command)" - relink_command=`$ECHO "X$relink_command" | $Xsed -e "$sed_quote_subst"` - fi - - # Quote $ECHO for shipping. - if test "X$ECHO" = "X$SHELL $progpath --fallback-echo"; then - case $progpath in - [\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $progpath --fallback-echo";; - *) qecho="$SHELL `pwd`/$progpath --fallback-echo";; - esac - qecho=`$ECHO "X$qecho" | $Xsed -e "$sed_quote_subst"` - else - qecho=`$ECHO "X$ECHO" | $Xsed -e "$sed_quote_subst"` - fi - - # Only actually do things if not in dry run mode. - $opt_dry_run || { - # win32 will think the script is a binary if it has - # a .exe suffix, so we strip it off here. - case $output in - *.exe) func_stripname '' '.exe' "$output" - output=$func_stripname_result ;; - esac - # test for cygwin because mv fails w/o .exe extensions - case $host in - *cygwin*) - exeext=.exe - func_stripname '' '.exe' "$outputname" - outputname=$func_stripname_result ;; - *) exeext= ;; - esac - case $host in - *cygwin* | *mingw* ) - func_dirname_and_basename "$output" "" "." - output_name=$func_basename_result - output_path=$func_dirname_result - cwrappersource="$output_path/$objdir/lt-$output_name.c" - cwrapper="$output_path/$output_name.exe" - $RM $cwrappersource $cwrapper - trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 - - func_emit_cwrapperexe_src > $cwrappersource - - # The wrapper executable is built using the $host compiler, - # because it contains $host paths and files. If cross- - # compiling, it, like the target executable, must be - # executed on the $host or under an emulation environment. - $opt_dry_run || { - $LTCC $LTCFLAGS -o $cwrapper $cwrappersource - $STRIP $cwrapper - } - - # Now, create the wrapper script for func_source use: - func_ltwrapper_scriptname $cwrapper - $RM $func_ltwrapper_scriptname_result - trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 - $opt_dry_run || { - # note: this script will not be executed, so do not chmod. - if test "x$build" = "x$host" ; then - $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result - else - func_emit_wrapper no > $func_ltwrapper_scriptname_result - fi - } - ;; - * ) - $RM $output - trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 - - func_emit_wrapper no > $output - chmod +x $output - ;; - esac - } - exit $EXIT_SUCCESS - ;; - esac - - # See if we need to build an old-fashioned archive. - for oldlib in $oldlibs; do - - if test "$build_libtool_libs" = convenience; then - oldobjs="$libobjs_save $symfileobj" - addlibs="$convenience" - build_libtool_libs=no - else - if test "$build_libtool_libs" = module; then - oldobjs="$libobjs_save" - build_libtool_libs=no - else - oldobjs="$old_deplibs $non_pic_objects" - if test "$preload" = yes && test -f "$symfileobj"; then - oldobjs="$oldobjs $symfileobj" - fi - fi - addlibs="$old_convenience" - fi - - if test -n "$addlibs"; then - gentop="$output_objdir/${outputname}x" - generated="$generated $gentop" - - func_extract_archives $gentop $addlibs - oldobjs="$oldobjs $func_extract_archives_result" - fi - - # Do each command in the archive commands. - if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then - cmds=$old_archive_from_new_cmds - else - - # Add any objects from preloaded convenience libraries - if test -n "$dlprefiles"; then - gentop="$output_objdir/${outputname}x" - generated="$generated $gentop" - - func_extract_archives $gentop $dlprefiles - oldobjs="$oldobjs $func_extract_archives_result" - fi - - # POSIX demands no paths to be encoded in archives. We have - # to avoid creating archives with duplicate basenames if we - # might have to extract them afterwards, e.g., when creating a - # static archive out of a convenience library, or when linking - # the entirety of a libtool archive into another (currently - # not supported by libtool). - if (for obj in $oldobjs - do - func_basename "$obj" - $ECHO "$func_basename_result" - done | sort | sort -uc >/dev/null 2>&1); then - : - else - $ECHO "copying selected object files to avoid basename conflicts..." - gentop="$output_objdir/${outputname}x" - generated="$generated $gentop" - func_mkdir_p "$gentop" - save_oldobjs=$oldobjs - oldobjs= - counter=1 - for obj in $save_oldobjs - do - func_basename "$obj" - objbase="$func_basename_result" - case " $oldobjs " in - " ") oldobjs=$obj ;; - *[\ /]"$objbase "*) - while :; do - # Make sure we don't pick an alternate name that also - # overlaps. - newobj=lt$counter-$objbase - func_arith $counter + 1 - counter=$func_arith_result - case " $oldobjs " in - *[\ /]"$newobj "*) ;; - *) if test ! -f "$gentop/$newobj"; then break; fi ;; - esac - done - func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" - oldobjs="$oldobjs $gentop/$newobj" - ;; - *) oldobjs="$oldobjs $obj" ;; - esac - done - fi - eval cmds=\"$old_archive_cmds\" - - func_len " $cmds" - len=$func_len_result - if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then - cmds=$old_archive_cmds - else - # the command line is too long to link in one step, link in parts - func_verbose "using piecewise archive linking..." - save_RANLIB=$RANLIB - RANLIB=: - objlist= - concat_cmds= - save_oldobjs=$oldobjs - oldobjs= - # Is there a better way of finding the last object in the list? - for obj in $save_oldobjs - do - last_oldobj=$obj - done - eval test_cmds=\"$old_archive_cmds\" - func_len " $test_cmds" - len0=$func_len_result - len=$len0 - for obj in $save_oldobjs - do - func_len " $obj" - func_arith $len + $func_len_result - len=$func_arith_result - func_append objlist " $obj" - if test "$len" -lt "$max_cmd_len"; then - : - else - # the above command should be used before it gets too long - oldobjs=$objlist - if test "$obj" = "$last_oldobj" ; then - RANLIB=$save_RANLIB - fi - test -z "$concat_cmds" || concat_cmds=$concat_cmds~ - eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" - objlist= - len=$len0 - fi - done - RANLIB=$save_RANLIB - oldobjs=$objlist - if test "X$oldobjs" = "X" ; then - eval cmds=\"\$concat_cmds\" - else - eval cmds=\"\$concat_cmds~\$old_archive_cmds\" - fi - fi - fi - func_execute_cmds "$cmds" 'exit $?' - done - - test -n "$generated" && \ - func_show_eval "${RM}r$generated" - - # Now create the libtool archive. - case $output in - *.la) - old_library= - test "$build_old_libs" = yes && old_library="$libname.$libext" - func_verbose "creating $output" - - # Preserve any variables that may affect compiler behavior - for var in $variables_saved_for_relink; do - if eval test -z \"\${$var+set}\"; then - relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" - elif eval var_value=\$$var; test -z "$var_value"; then - relink_command="$var=; export $var; $relink_command" - else - func_quote_for_eval "$var_value" - relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" - fi - done - # Quote the link command for shipping. - relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" - relink_command=`$ECHO "X$relink_command" | $Xsed -e "$sed_quote_subst"` - if test "$hardcode_automatic" = yes ; then - relink_command= - fi - - # Only create the output if not a dry run. - $opt_dry_run || { - for installed in no yes; do - if test "$installed" = yes; then - if test -z "$install_libdir"; then - break - fi - output="$output_objdir/$outputname"i - # Replace all uninstalled libtool libraries with the installed ones - newdependency_libs= - for deplib in $dependency_libs; do - case $deplib in - *.la) - func_basename "$deplib" - name="$func_basename_result" - eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` - test -z "$libdir" && \ - func_fatal_error "\`$deplib' is not a valid libtool archive" - newdependency_libs="$newdependency_libs $libdir/$name" - ;; - *) newdependency_libs="$newdependency_libs $deplib" ;; - esac - done - dependency_libs="$newdependency_libs" - newdlfiles= - - for lib in $dlfiles; do - case $lib in - *.la) - func_basename "$lib" - name="$func_basename_result" - eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` - test -z "$libdir" && \ - func_fatal_error "\`$lib' is not a valid libtool archive" - newdlfiles="$newdlfiles $libdir/$name" - ;; - *) newdlfiles="$newdlfiles $lib" ;; - esac - done - dlfiles="$newdlfiles" - newdlprefiles= - for lib in $dlprefiles; do - case $lib in - *.la) - # Only pass preopened files to the pseudo-archive (for - # eventual linking with the app. that links it) if we - # didn't already link the preopened objects directly into - # the library: - func_basename "$lib" - name="$func_basename_result" - eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` - test -z "$libdir" && \ - func_fatal_error "\`$lib' is not a valid libtool archive" - newdlprefiles="$newdlprefiles $libdir/$name" - ;; - esac - done - dlprefiles="$newdlprefiles" - else - newdlfiles= - for lib in $dlfiles; do - case $lib in - [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; - *) abs=`pwd`"/$lib" ;; - esac - newdlfiles="$newdlfiles $abs" - done - dlfiles="$newdlfiles" - newdlprefiles= - for lib in $dlprefiles; do - case $lib in - [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; - *) abs=`pwd`"/$lib" ;; - esac - newdlprefiles="$newdlprefiles $abs" - done - dlprefiles="$newdlprefiles" - fi - $RM $output - # place dlname in correct position for cygwin - tdlname=$dlname - case $host,$output,$installed,$module,$dlname in - *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;; - esac - $ECHO > $output "\ -# $outputname - a libtool library file -# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION -# -# Please DO NOT delete this file! -# It is necessary for linking the library. - -# The name that we can dlopen(3). -dlname='$tdlname' - -# Names of this library. -library_names='$library_names' - -# The name of the static archive. -old_library='$old_library' - -# Linker flags that can not go in dependency_libs. -inherited_linker_flags='$new_inherited_linker_flags' - -# Libraries that this one depends upon. -dependency_libs='$dependency_libs' - -# Names of additional weak libraries provided by this library -weak_library_names='$weak_libs' - -# Version information for $libname. -current=$current -age=$age -revision=$revision - -# Is this an already installed library? -installed=$installed - -# Should we warn about portability when linking against -modules? -shouldnotlink=$module - -# Files to dlopen/dlpreopen -dlopen='$dlfiles' -dlpreopen='$dlprefiles' - -# Directory that this library needs to be installed in: -libdir='$install_libdir'" - if test "$installed" = no && test "$need_relink" = yes; then - $ECHO >> $output "\ -relink_command=\"$relink_command\"" - fi - done - } - - # Do a symbolic link so that the libtool archive can be found in - # LD_LIBRARY_PATH before the program is installed. - func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' - ;; - esac - exit $EXIT_SUCCESS -} - -{ test "$mode" = link || test "$mode" = relink; } && - func_mode_link ${1+"$@"} - - -# func_mode_uninstall arg... -func_mode_uninstall () -{ - $opt_debug - RM="$nonopt" - files= - rmforce= - exit_status=0 - - # This variable tells wrapper scripts just to set variables rather - # than running their programs. - libtool_install_magic="$magic" - - for arg - do - case $arg in - -f) RM="$RM $arg"; rmforce=yes ;; - -*) RM="$RM $arg" ;; - *) files="$files $arg" ;; - esac - done - - test -z "$RM" && \ - func_fatal_help "you must specify an RM program" - - rmdirs= - - origobjdir="$objdir" - for file in $files; do - func_dirname "$file" "" "." - dir="$func_dirname_result" - if test "X$dir" = X.; then - objdir="$origobjdir" - else - objdir="$dir/$origobjdir" - fi - func_basename "$file" - name="$func_basename_result" - test "$mode" = uninstall && objdir="$dir" - - # Remember objdir for removal later, being careful to avoid duplicates - if test "$mode" = clean; then - case " $rmdirs " in - *" $objdir "*) ;; - *) rmdirs="$rmdirs $objdir" ;; - esac - fi - - # Don't error if the file doesn't exist and rm -f was used. - if { test -L "$file"; } >/dev/null 2>&1 || - { test -h "$file"; } >/dev/null 2>&1 || - test -f "$file"; then - : - elif test -d "$file"; then - exit_status=1 - continue - elif test "$rmforce" = yes; then - continue - fi - - rmfiles="$file" - - case $name in - *.la) - # Possibly a libtool archive, so verify it. - if func_lalib_p "$file"; then - func_source $dir/$name - - # Delete the libtool libraries and symlinks. - for n in $library_names; do - rmfiles="$rmfiles $objdir/$n" - done - test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library" - - case "$mode" in - clean) - case " $library_names " in - # " " in the beginning catches empty $dlname - *" $dlname "*) ;; - *) rmfiles="$rmfiles $objdir/$dlname" ;; - esac - test -n "$libdir" && rmfiles="$rmfiles $objdir/$name $objdir/${name}i" - ;; - uninstall) - if test -n "$library_names"; then - # Do each command in the postuninstall commands. - func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' - fi - - if test -n "$old_library"; then - # Do each command in the old_postuninstall commands. - func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' - fi - # FIXME: should reinstall the best remaining shared library. - ;; - esac - fi - ;; - - *.lo) - # Possibly a libtool object, so verify it. - if func_lalib_p "$file"; then - - # Read the .lo file - func_source $dir/$name - - # Add PIC object to the list of files to remove. - if test -n "$pic_object" && - test "$pic_object" != none; then - rmfiles="$rmfiles $dir/$pic_object" - fi - - # Add non-PIC object to the list of files to remove. - if test -n "$non_pic_object" && - test "$non_pic_object" != none; then - rmfiles="$rmfiles $dir/$non_pic_object" - fi - fi - ;; - - *) - if test "$mode" = clean ; then - noexename=$name - case $file in - *.exe) - func_stripname '' '.exe' "$file" - file=$func_stripname_result - func_stripname '' '.exe' "$name" - noexename=$func_stripname_result - # $file with .exe has already been added to rmfiles, - # add $file without .exe - rmfiles="$rmfiles $file" - ;; - esac - # Do a test to see if this is a libtool program. - if func_ltwrapper_p "$file"; then - if func_ltwrapper_executable_p "$file"; then - func_ltwrapper_scriptname "$file" - relink_command= - func_source $func_ltwrapper_scriptname_result - rmfiles="$rmfiles $func_ltwrapper_scriptname_result" - else - relink_command= - func_source $dir/$noexename - fi - - # note $name still contains .exe if it was in $file originally - # as does the version of $file that was added into $rmfiles - rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}" - if test "$fast_install" = yes && test -n "$relink_command"; then - rmfiles="$rmfiles $objdir/lt-$name" - fi - if test "X$noexename" != "X$name" ; then - rmfiles="$rmfiles $objdir/lt-${noexename}.c" - fi - fi - fi - ;; - esac - func_show_eval "$RM $rmfiles" 'exit_status=1' - done - objdir="$origobjdir" - - # Try to remove the ${objdir}s in the directories where we deleted files - for dir in $rmdirs; do - if test -d "$dir"; then - func_show_eval "rmdir $dir >/dev/null 2>&1" - fi - done - - exit $exit_status -} - -{ test "$mode" = uninstall || test "$mode" = clean; } && - func_mode_uninstall ${1+"$@"} - -test -z "$mode" && { - help="$generic_help" - func_fatal_help "you must specify a MODE" -} - -test -z "$exec_cmd" && \ - func_fatal_help "invalid operation mode \`$mode'" - -if test -n "$exec_cmd"; then - eval exec "$exec_cmd" - exit $EXIT_FAILURE -fi - -exit $exit_status - - -# The TAGs below are defined such that we never get into a situation -# in which we disable both kinds of libraries. Given conflicting -# choices, we go for a static library, that is the most portable, -# since we can't tell whether shared libraries were disabled because -# the user asked for that or because the platform doesn't support -# them. This is particularly important on AIX, because we don't -# support having both static and shared libraries enabled at the same -# time on that platform, so we default to a shared-only configuration. -# If a disable-shared tag is given, we'll fallback to a static-only -# configuration. But we'll never go from static-only to shared-only. - -# ### BEGIN LIBTOOL TAG CONFIG: disable-shared -build_libtool_libs=no -build_old_libs=yes -# ### END LIBTOOL TAG CONFIG: disable-shared - -# ### BEGIN LIBTOOL TAG CONFIG: disable-static -build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` -# ### END LIBTOOL TAG CONFIG: disable-static - -# Local Variables: -# mode:shell-script -# sh-indentation:2 -# End: -# vi:sw=2 - diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/man/Makefile b/openair3/PMIPv6/freeradius-client-1.1.6/man/Makefile deleted file mode 100644 index 51e180ace7..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/man/Makefile +++ /dev/null @@ -1,371 +0,0 @@ -# Makefile.in generated by automake 1.11.1 from Makefile.am. -# man/Makefile. Generated from Makefile.in by configure. - -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, -# Inc. -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - - - -# -# $Id: Makefile.am,v 1.1.1.1 2003/12/02 10:39:22 sobomax Exp $ -# -# Copyright (C) 1995 Lars Fenneberg -# -# See the file COPYRIGHT for the respective terms and conditions. -# If the file is missing contact me at lf@elemental.net -# and I'll send you a copy. -# - -pkgdatadir = $(datadir)/radiusclient -pkgincludedir = $(includedir)/radiusclient -pkglibdir = $(libdir)/radiusclient -pkglibexecdir = $(libexecdir)/radiusclient -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = i686-pc-linux-gnu -host_triplet = i686-pc-linux-gnu -target_triplet = i686-pc-linux-gnu -subdir = man -DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/configure.in -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs -CONFIG_HEADER = $(top_builddir)/config.h -CONFIG_CLEAN_FILES = -CONFIG_CLEAN_VPATH_FILES = -SOURCES = -DIST_SOURCES = -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = ${SHELL} /usr/local/src/freeradius-client-1.1.6/missing --run aclocal-1.11 -ALLOCA = -AMTAR = ${SHELL} /usr/local/src/freeradius-client-1.1.6/missing --run tar -AR = /usr/bin/ar -AUTOCONF = ${SHELL} /usr/local/src/freeradius-client-1.1.6/missing --run autoconf -AUTOHEADER = ${SHELL} /usr/local/src/freeradius-client-1.1.6/missing --run autoheader -AUTOMAKE = ${SHELL} /usr/local/src/freeradius-client-1.1.6/missing --run automake-1.11 -AWK = gawk -CC = gcc -CCDEPMODE = depmode=gcc3 -CFLAGS = -g -O2 -CPP = gcc -E -CPPFLAGS = -CYGPATH_W = echo -DEFS = -DHAVE_CONFIG_H -DEPDIR = .deps -DSYMUTIL = -DUMPBIN = -ECHO_C = -ECHO_N = -n -ECHO_T = -EGREP = /bin/grep -E -EXEEXT = -FGREP = /bin/grep -F -GREP = /bin/grep -INSTALL = /usr/bin/install -c -INSTALL_DATA = ${INSTALL} -m 644 -INSTALL_PROGRAM = ${INSTALL} -INSTALL_SCRIPT = ${INSTALL} -INSTALL_STRIP_PROGRAM = $(install_sh) -c -s -LD = /usr/bin/ld -LDFLAGS = -LIBOBJS = -LIBS = -lcrypt -lnsl -LIBTOOL = $(SHELL) $(top_builddir)/libtool -LIBVERSION = 2:0:0 -LIPO = -LN_S = ln -s -LTLIBOBJS = -MAINT = # -MAKEINFO = ${SHELL} /usr/local/src/freeradius-client-1.1.6/missing --run makeinfo -MKDIR_P = /bin/mkdir -p -NM = /usr/bin/nm -B -NMEDIT = -OBJDUMP = objdump -OBJEXT = o -OTOOL = -OTOOL64 = -PACKAGE = radiusclient -PACKAGE_BUGREPORT = -PACKAGE_NAME = -PACKAGE_STRING = -PACKAGE_TARNAME = -PACKAGE_URL = -PACKAGE_VERSION = -PATH_SEPARATOR = : -RANLIB = ranlib -RC_LOG_FACILITY = LOG_DAEMON -RC_SECURE_PATH = /bin:/usr/bin:/usr/local/bin -SED = /bin/sed -SET_MAKE = -SHELL = /bin/bash -STRIP = strip -VERSION = 1.1.6 -abs_builddir = /usr/local/src/freeradius-client-1.1.6/man -abs_srcdir = /usr/local/src/freeradius-client-1.1.6/man -abs_top_builddir = /usr/local/src/freeradius-client-1.1.6 -abs_top_srcdir = /usr/local/src/freeradius-client-1.1.6 -ac_ct_CC = gcc -ac_ct_DUMPBIN = -am__include = include -am__leading_dot = . -am__quote = -am__tar = ${AMTAR} chof - "$$tardir" -am__untar = ${AMTAR} xf - -bindir = ${exec_prefix}/bin -build = i686-pc-linux-gnu -build_alias = -build_cpu = i686 -build_os = linux-gnu -build_vendor = pc -builddir = . -datadir = ${datarootdir} -datarootdir = ${prefix}/share -docdir = ${datarootdir}/doc/${PACKAGE} -dvidir = ${docdir} -exec_prefix = ${prefix} -host = i686-pc-linux-gnu -host_alias = -host_cpu = i686 -host_os = linux-gnu -host_vendor = pc -htmldir = ${docdir} -includedir = ${prefix}/include -infodir = ${datarootdir}/info -install_sh = ${SHELL} /usr/local/src/freeradius-client-1.1.6/install-sh -libdir = ${exec_prefix}/lib -libexecdir = ${exec_prefix}/libexec -localedir = ${datarootdir}/locale -localstatedir = ${prefix}/var -lt_ECHO = echo -mandir = ${datarootdir}/man -mkdir_p = /bin/mkdir -p -oldincludedir = /usr/include -pdfdir = ${docdir} -pkgsysconfdir = ${prefix}/etc/radiusclient -prefix = /usr/local -program_transform_name = s,x,x, -psdir = ${docdir} -sbindir = ${exec_prefix}/sbin -sharedstatedir = ${prefix}/com -srcdir = . -sysconfdir = ${prefix}/etc -target = i686-pc-linux-gnu -target_alias = -target_cpu = i686 -target_os = linux-gnu -target_vendor = pc -top_build_prefix = ../ -top_builddir = .. -top_srcdir = .. -AUTOMAKE_OPTIONS = foreign -CLEANFILES = *~ -all: all-am - -.SUFFIXES: -$(srcdir)/Makefile.in: # $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ - && { if test -f $@; then exit 0; else break; fi; }; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign man/Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --foreign man/Makefile -.PRECIOUS: Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: # $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): # $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(am__aclocal_m4_deps): - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs -tags: TAGS -TAGS: - -ctags: CTAGS -CTAGS: - - -distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - list='$(DISTFILES)'; \ - dist_files=`for file in $$list; do echo $$file; done | \ - sed -e "s|^$$srcdirstrip/||;t" \ - -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ - case $$dist_files in \ - */*) $(MKDIR_P) `echo "$$dist_files" | \ - sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ - sort -u` ;; \ - esac; \ - for file in $$dist_files; do \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - if test -d $$d/$$file; then \ - dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test -d "$(distdir)/$$file"; then \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ - else \ - test -f "$(distdir)/$$file" \ - || cp -p $$d/$$file "$(distdir)/$$file" \ - || exit 1; \ - fi; \ - done -check-am: all-am -check: check-am -all-am: Makefile -installdirs: -install: install-am -install-exec: install-exec-am -install-data: install-data-am -uninstall: uninstall-am - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-am -install-strip: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install -mostlyclean-generic: - -clean-generic: - -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." -clean: clean-am - -clean-am: clean-generic clean-libtool mostlyclean-am - -distclean: distclean-am - -rm -f Makefile -distclean-am: clean-am distclean-generic - -dvi: dvi-am - -dvi-am: - -html: html-am - -html-am: - -info: info-am - -info-am: - -install-data-am: - -install-dvi: install-dvi-am - -install-dvi-am: - -install-exec-am: - -install-html: install-html-am - -install-html-am: - -install-info: install-info-am - -install-info-am: - -install-man: - -install-pdf: install-pdf-am - -install-pdf-am: - -install-ps: install-ps-am - -install-ps-am: - -installcheck-am: - -maintainer-clean: maintainer-clean-am - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-am - -mostlyclean-am: mostlyclean-generic mostlyclean-libtool - -pdf: pdf-am - -pdf-am: - -ps: ps-am - -ps-am: - -uninstall-am: - -.MAKE: install-am install-strip - -.PHONY: all all-am check check-am clean clean-generic clean-libtool \ - distclean distclean-generic distclean-libtool distdir dvi \ - dvi-am html html-am info info-am install install-am \ - install-data install-data-am install-dvi install-dvi-am \ - install-exec install-exec-am install-html install-html-am \ - install-info install-info-am install-man install-pdf \ - install-pdf-am install-ps install-ps-am install-strip \ - installcheck installcheck-am installdirs maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-generic \ - mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am - - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/man/Makefile.am b/openair3/PMIPv6/freeradius-client-1.1.6/man/Makefile.am deleted file mode 100644 index 87858f655e..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/man/Makefile.am +++ /dev/null @@ -1,13 +0,0 @@ -# -# $Id: Makefile.am,v 1.1.1.1 2003/12/02 10:39:22 sobomax Exp $ -# -# Copyright (C) 1995 Lars Fenneberg -# -# See the file COPYRIGHT for the respective terms and conditions. -# If the file is missing contact me at lf@elemental.net -# and I'll send you a copy. -# - -AUTOMAKE_OPTIONS = foreign - -CLEANFILES = *~ diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/man/Makefile.in b/openair3/PMIPv6/freeradius-client-1.1.6/man/Makefile.in deleted file mode 100644 index 5d224ffc29..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/man/Makefile.in +++ /dev/null @@ -1,371 +0,0 @@ -# Makefile.in generated by automake 1.11.1 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, -# Inc. -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -@SET_MAKE@ - -# -# $Id: Makefile.am,v 1.1.1.1 2003/12/02 10:39:22 sobomax Exp $ -# -# Copyright (C) 1995 Lars Fenneberg -# -# See the file COPYRIGHT for the respective terms and conditions. -# If the file is missing contact me at lf@elemental.net -# and I'll send you a copy. -# -VPATH = @srcdir@ -pkgdatadir = $(datadir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ -pkglibexecdir = $(libexecdir)/@PACKAGE@ -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = @build@ -host_triplet = @host@ -target_triplet = @target@ -subdir = man -DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/configure.in -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs -CONFIG_HEADER = $(top_builddir)/config.h -CONFIG_CLEAN_FILES = -CONFIG_CLEAN_VPATH_FILES = -SOURCES = -DIST_SOURCES = -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = @ACLOCAL@ -ALLOCA = @ALLOCA@ -AMTAR = @AMTAR@ -AR = @AR@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -CC = @CC@ -CCDEPMODE = @CCDEPMODE@ -CFLAGS = @CFLAGS@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CYGPATH_W = @CYGPATH_W@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -DSYMUTIL = @DSYMUTIL@ -DUMPBIN = @DUMPBIN@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -EXEEXT = @EXEEXT@ -FGREP = @FGREP@ -GREP = @GREP@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -LD = @LD@ -LDFLAGS = @LDFLAGS@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LIBTOOL = @LIBTOOL@ -LIBVERSION = @LIBVERSION@ -LIPO = @LIPO@ -LN_S = @LN_S@ -LTLIBOBJS = @LTLIBOBJS@ -MAINT = @MAINT@ -MAKEINFO = @MAKEINFO@ -MKDIR_P = @MKDIR_P@ -NM = @NM@ -NMEDIT = @NMEDIT@ -OBJDUMP = @OBJDUMP@ -OBJEXT = @OBJEXT@ -OTOOL = @OTOOL@ -OTOOL64 = @OTOOL64@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_URL = @PACKAGE_URL@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -RANLIB = @RANLIB@ -RC_LOG_FACILITY = @RC_LOG_FACILITY@ -RC_SECURE_PATH = @RC_SECURE_PATH@ -SED = @SED@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -STRIP = @STRIP@ -VERSION = @VERSION@ -abs_builddir = @abs_builddir@ -abs_srcdir = @abs_srcdir@ -abs_top_builddir = @abs_top_builddir@ -abs_top_srcdir = @abs_top_srcdir@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ -am__include = @am__include@ -am__leading_dot = @am__leading_dot@ -am__quote = @am__quote@ -am__tar = @am__tar@ -am__untar = @am__untar@ -bindir = @bindir@ -build = @build@ -build_alias = @build_alias@ -build_cpu = @build_cpu@ -build_os = @build_os@ -build_vendor = @build_vendor@ -builddir = @builddir@ -datadir = @datadir@ -datarootdir = @datarootdir@ -docdir = @docdir@ -dvidir = @dvidir@ -exec_prefix = @exec_prefix@ -host = @host@ -host_alias = @host_alias@ -host_cpu = @host_cpu@ -host_os = @host_os@ -host_vendor = @host_vendor@ -htmldir = @htmldir@ -includedir = @includedir@ -infodir = @infodir@ -install_sh = @install_sh@ -libdir = @libdir@ -libexecdir = @libexecdir@ -localedir = @localedir@ -localstatedir = @localstatedir@ -lt_ECHO = @lt_ECHO@ -mandir = @mandir@ -mkdir_p = @mkdir_p@ -oldincludedir = @oldincludedir@ -pdfdir = @pdfdir@ -pkgsysconfdir = @pkgsysconfdir@ -prefix = @prefix@ -program_transform_name = @program_transform_name@ -psdir = @psdir@ -sbindir = @sbindir@ -sharedstatedir = @sharedstatedir@ -srcdir = @srcdir@ -sysconfdir = @sysconfdir@ -target = @target@ -target_alias = @target_alias@ -target_cpu = @target_cpu@ -target_os = @target_os@ -target_vendor = @target_vendor@ -top_build_prefix = @top_build_prefix@ -top_builddir = @top_builddir@ -top_srcdir = @top_srcdir@ -AUTOMAKE_OPTIONS = foreign -CLEANFILES = *~ -all: all-am - -.SUFFIXES: -$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ - && { if test -f $@; then exit 0; else break; fi; }; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign man/Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --foreign man/Makefile -.PRECIOUS: Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(am__aclocal_m4_deps): - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs -tags: TAGS -TAGS: - -ctags: CTAGS -CTAGS: - - -distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - list='$(DISTFILES)'; \ - dist_files=`for file in $$list; do echo $$file; done | \ - sed -e "s|^$$srcdirstrip/||;t" \ - -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ - case $$dist_files in \ - */*) $(MKDIR_P) `echo "$$dist_files" | \ - sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ - sort -u` ;; \ - esac; \ - for file in $$dist_files; do \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - if test -d $$d/$$file; then \ - dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test -d "$(distdir)/$$file"; then \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ - else \ - test -f "$(distdir)/$$file" \ - || cp -p $$d/$$file "$(distdir)/$$file" \ - || exit 1; \ - fi; \ - done -check-am: all-am -check: check-am -all-am: Makefile -installdirs: -install: install-am -install-exec: install-exec-am -install-data: install-data-am -uninstall: uninstall-am - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-am -install-strip: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install -mostlyclean-generic: - -clean-generic: - -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." -clean: clean-am - -clean-am: clean-generic clean-libtool mostlyclean-am - -distclean: distclean-am - -rm -f Makefile -distclean-am: clean-am distclean-generic - -dvi: dvi-am - -dvi-am: - -html: html-am - -html-am: - -info: info-am - -info-am: - -install-data-am: - -install-dvi: install-dvi-am - -install-dvi-am: - -install-exec-am: - -install-html: install-html-am - -install-html-am: - -install-info: install-info-am - -install-info-am: - -install-man: - -install-pdf: install-pdf-am - -install-pdf-am: - -install-ps: install-ps-am - -install-ps-am: - -installcheck-am: - -maintainer-clean: maintainer-clean-am - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-am - -mostlyclean-am: mostlyclean-generic mostlyclean-libtool - -pdf: pdf-am - -pdf-am: - -ps: ps-am - -ps-am: - -uninstall-am: - -.MAKE: install-am install-strip - -.PHONY: all all-am check check-am clean clean-generic clean-libtool \ - distclean distclean-generic distclean-libtool distdir dvi \ - dvi-am html html-am info info-am install install-am \ - install-data install-data-am install-dvi install-dvi-am \ - install-exec install-exec-am install-html install-html-am \ - install-info install-info-am install-man install-pdf \ - install-pdf-am install-ps install-ps-am install-strip \ - installcheck installcheck-am installdirs maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-generic \ - mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am - - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/missing b/openair3/PMIPv6/freeradius-client-1.1.6/missing deleted file mode 100755 index 0a7fb5a2ac..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/missing +++ /dev/null @@ -1,283 +0,0 @@ -#! /bin/sh -# Common stub for a few missing GNU programs while installing. -# Copyright 1996, 1997, 1999, 2000 Free Software Foundation, Inc. -# Originally by Fran,cois Pinard , 1996. - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA -# 02111-1307, USA. - -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - -if test $# -eq 0; then - echo 1>&2 "Try \`$0 --help' for more information" - exit 1 -fi - -run=: - -# In the cases where this matters, `missing' is being run in the -# srcdir already. -if test -f configure.ac; then - configure_ac=configure.ac -else - configure_ac=configure.in -fi - -case "$1" in ---run) - # Try to run requested program, and just exit if it succeeds. - run= - shift - "$@" && exit 0 - ;; -esac - -# If it does not exist, or fails to run (possibly an outdated version), -# try to emulate it. -case "$1" in - - -h|--h|--he|--hel|--help) - echo "\ -$0 [OPTION]... PROGRAM [ARGUMENT]... - -Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an -error status if there is no known handling for PROGRAM. - -Options: - -h, --help display this help and exit - -v, --version output version information and exit - --run try to run the given command, and emulate it if it fails - -Supported PROGRAM values: - aclocal touch file \`aclocal.m4' - autoconf touch file \`configure' - autoheader touch file \`config.h.in' - automake touch all \`Makefile.in' files - bison create \`y.tab.[ch]', if possible, from existing .[ch] - flex create \`lex.yy.c', if possible, from existing .c - help2man touch the output file - lex create \`lex.yy.c', if possible, from existing .c - makeinfo touch the output file - tar try tar, gnutar, gtar, then tar without non-portable flags - yacc create \`y.tab.[ch]', if possible, from existing .[ch]" - ;; - - -v|--v|--ve|--ver|--vers|--versi|--versio|--version) - echo "missing 0.3 - GNU automake" - ;; - - -*) - echo 1>&2 "$0: Unknown \`$1' option" - echo 1>&2 "Try \`$0 --help' for more information" - exit 1 - ;; - - aclocal) - echo 1>&2 "\ -WARNING: \`$1' is missing on your system. You should only need it if - you modified \`acinclude.m4' or \`${configure_ac}'. You might want - to install the \`Automake' and \`Perl' packages. Grab them from - any GNU archive site." - touch aclocal.m4 - ;; - - autoconf) - echo 1>&2 "\ -WARNING: \`$1' is missing on your system. You should only need it if - you modified \`${configure_ac}'. You might want to install the - \`Autoconf' and \`GNU m4' packages. Grab them from any GNU - archive site." - touch configure - ;; - - autoheader) - echo 1>&2 "\ -WARNING: \`$1' is missing on your system. You should only need it if - you modified \`acconfig.h' or \`${configure_ac}'. You might want - to install the \`Autoconf' and \`GNU m4' packages. Grab them - from any GNU archive site." - files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` - test -z "$files" && files="config.h" - touch_files= - for f in $files; do - case "$f" in - *:*) touch_files="$touch_files "`echo "$f" | - sed -e 's/^[^:]*://' -e 's/:.*//'`;; - *) touch_files="$touch_files $f.in";; - esac - done - touch $touch_files - ;; - - automake) - echo 1>&2 "\ -WARNING: \`$1' is missing on your system. You should only need it if - you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. - You might want to install the \`Automake' and \`Perl' packages. - Grab them from any GNU archive site." - find . -type f -name Makefile.am -print | - sed 's/\.am$/.in/' | - while read f; do touch "$f"; done - ;; - - bison|yacc) - echo 1>&2 "\ -WARNING: \`$1' is missing on your system. You should only need it if - you modified a \`.y' file. You may need the \`Bison' package - in order for those modifications to take effect. You can get - \`Bison' from any GNU archive site." - rm -f y.tab.c y.tab.h - if [ $# -ne 1 ]; then - eval LASTARG="\${$#}" - case "$LASTARG" in - *.y) - SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` - if [ -f "$SRCFILE" ]; then - cp "$SRCFILE" y.tab.c - fi - SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` - if [ -f "$SRCFILE" ]; then - cp "$SRCFILE" y.tab.h - fi - ;; - esac - fi - if [ ! -f y.tab.h ]; then - echo >y.tab.h - fi - if [ ! -f y.tab.c ]; then - echo 'main() { return 0; }' >y.tab.c - fi - ;; - - lex|flex) - echo 1>&2 "\ -WARNING: \`$1' is missing on your system. You should only need it if - you modified a \`.l' file. You may need the \`Flex' package - in order for those modifications to take effect. You can get - \`Flex' from any GNU archive site." - rm -f lex.yy.c - if [ $# -ne 1 ]; then - eval LASTARG="\${$#}" - case "$LASTARG" in - *.l) - SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` - if [ -f "$SRCFILE" ]; then - cp "$SRCFILE" lex.yy.c - fi - ;; - esac - fi - if [ ! -f lex.yy.c ]; then - echo 'main() { return 0; }' >lex.yy.c - fi - ;; - - help2man) - echo 1>&2 "\ -WARNING: \`$1' is missing on your system. You should only need it if - you modified a dependency of a manual page. You may need the - \`Help2man' package in order for those modifications to take - effect. You can get \`Help2man' from any GNU archive site." - - file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` - if test -z "$file"; then - file=`echo "$*" | sed -n 's/.*--output=\([^ ]*\).*/\1/p'` - fi - if [ -f "$file" ]; then - touch $file - else - test -z "$file" || exec >$file - echo ".ab help2man is required to generate this page" - exit 1 - fi - ;; - - makeinfo) - if test -z "$run" && (makeinfo --version) > /dev/null 2>&1; then - # We have makeinfo, but it failed. - exit 1 - fi - - echo 1>&2 "\ -WARNING: \`$1' is missing on your system. You should only need it if - you modified a \`.texi' or \`.texinfo' file, or any other file - indirectly affecting the aspect of the manual. The spurious - call might also be the consequence of using a buggy \`make' (AIX, - DU, IRIX). You might want to install the \`Texinfo' package or - the \`GNU make' package. Grab either from any GNU archive site." - file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` - if test -z "$file"; then - file=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` - file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $file` - fi - touch $file - ;; - - tar) - shift - if test -n "$run"; then - echo 1>&2 "ERROR: \`tar' requires --run" - exit 1 - fi - - # We have already tried tar in the generic part. - # Look for gnutar/gtar before invocation to avoid ugly error - # messages. - if (gnutar --version > /dev/null 2>&1); then - gnutar ${1+"$@"} && exit 0 - fi - if (gtar --version > /dev/null 2>&1); then - gtar ${1+"$@"} && exit 0 - fi - firstarg="$1" - if shift; then - case "$firstarg" in - *o*) - firstarg=`echo "$firstarg" | sed s/o//` - tar "$firstarg" ${1+"$@"} && exit 0 - ;; - esac - case "$firstarg" in - *h*) - firstarg=`echo "$firstarg" | sed s/h//` - tar "$firstarg" ${1+"$@"} && exit 0 - ;; - esac - fi - - echo 1>&2 "\ -WARNING: I can't seem to be able to run \`tar' with the given arguments. - You may want to install GNU tar or Free paxutils, or check the - command line arguments." - exit 1 - ;; - - *) - echo 1>&2 "\ -WARNING: \`$1' is needed, and you do not seem to have it handy on your - system. You might have modified some files without having the - proper tools for further handling them. Check the \`README' file, - it often tells you about the needed prerequirements for installing - this package. You may also peek at any GNU archive site, in case - some other package would contain this missing \`$1' program." - exit 1 - ;; -esac - -exit 0 diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/mkinstalldirs b/openair3/PMIPv6/freeradius-client-1.1.6/mkinstalldirs deleted file mode 100755 index 6783ed9243..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/mkinstalldirs +++ /dev/null @@ -1,40 +0,0 @@ -#! /bin/sh -# mkinstalldirs --- make directory hierarchy -# Author: Noah Friedman -# Created: 1993-05-16 -# Public domain - -# $Id: mkinstalldirs,v 1.2 2003/12/02 14:34:15 sobomax Exp $ - -errstatus=0 - -for file -do - set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'` - shift - - pathcomp= - for d - do - pathcomp="$pathcomp$d" - case "$pathcomp" in - -* ) pathcomp=./$pathcomp ;; - esac - - if test ! -d "$pathcomp"; then - echo "mkdir $pathcomp" - - mkdir "$pathcomp" || lasterr=$? - - if test ! -d "$pathcomp"; then - errstatus=$lasterr - fi - fi - - pathcomp="$pathcomp/" - done -done - -exit $errstatus - -# mkinstalldirs ends here diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/patches/Makefile b/openair3/PMIPv6/freeradius-client-1.1.6/patches/Makefile deleted file mode 100644 index 2fd806c069..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/patches/Makefile +++ /dev/null @@ -1,374 +0,0 @@ -# Makefile.in generated by automake 1.11.1 from Makefile.am. -# patches/Makefile. Generated from Makefile.in by configure. - -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, -# Inc. -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - - - -# -# $Id: Makefile.am,v 1.1.1.1 2003/12/02 10:39:23 sobomax Exp $ -# -# Copyright (C) 1997 Lars Fenneberg -# -# See the file COPYRIGHT for the respective terms and conditions. -# If the file is missing contact me at lf@elemental.net -# and I'll send you a copy. -# - -pkgdatadir = $(datadir)/radiusclient -pkgincludedir = $(includedir)/radiusclient -pkglibdir = $(libdir)/radiusclient -pkglibexecdir = $(libexecdir)/radiusclient -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = i686-pc-linux-gnu -host_triplet = i686-pc-linux-gnu -target_triplet = i686-pc-linux-gnu -subdir = patches -DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/configure.in -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs -CONFIG_HEADER = $(top_builddir)/config.h -CONFIG_CLEAN_FILES = -CONFIG_CLEAN_VPATH_FILES = -SOURCES = -DIST_SOURCES = -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = ${SHELL} /usr/local/src/freeradius-client-1.1.6/missing --run aclocal-1.11 -ALLOCA = -AMTAR = ${SHELL} /usr/local/src/freeradius-client-1.1.6/missing --run tar -AR = /usr/bin/ar -AUTOCONF = ${SHELL} /usr/local/src/freeradius-client-1.1.6/missing --run autoconf -AUTOHEADER = ${SHELL} /usr/local/src/freeradius-client-1.1.6/missing --run autoheader -AUTOMAKE = ${SHELL} /usr/local/src/freeradius-client-1.1.6/missing --run automake-1.11 -AWK = gawk -CC = gcc -CCDEPMODE = depmode=gcc3 -CFLAGS = -g -O2 -CPP = gcc -E -CPPFLAGS = -CYGPATH_W = echo -DEFS = -DHAVE_CONFIG_H -DEPDIR = .deps -DSYMUTIL = -DUMPBIN = -ECHO_C = -ECHO_N = -n -ECHO_T = -EGREP = /bin/grep -E -EXEEXT = -FGREP = /bin/grep -F -GREP = /bin/grep -INSTALL = /usr/bin/install -c -INSTALL_DATA = ${INSTALL} -m 644 -INSTALL_PROGRAM = ${INSTALL} -INSTALL_SCRIPT = ${INSTALL} -INSTALL_STRIP_PROGRAM = $(install_sh) -c -s -LD = /usr/bin/ld -LDFLAGS = -LIBOBJS = -LIBS = -lcrypt -lnsl -LIBTOOL = $(SHELL) $(top_builddir)/libtool -LIBVERSION = 2:0:0 -LIPO = -LN_S = ln -s -LTLIBOBJS = -MAINT = # -MAKEINFO = ${SHELL} /usr/local/src/freeradius-client-1.1.6/missing --run makeinfo -MKDIR_P = /bin/mkdir -p -NM = /usr/bin/nm -B -NMEDIT = -OBJDUMP = objdump -OBJEXT = o -OTOOL = -OTOOL64 = -PACKAGE = radiusclient -PACKAGE_BUGREPORT = -PACKAGE_NAME = -PACKAGE_STRING = -PACKAGE_TARNAME = -PACKAGE_URL = -PACKAGE_VERSION = -PATH_SEPARATOR = : -RANLIB = ranlib -RC_LOG_FACILITY = LOG_DAEMON -RC_SECURE_PATH = /bin:/usr/bin:/usr/local/bin -SED = /bin/sed -SET_MAKE = -SHELL = /bin/bash -STRIP = strip -VERSION = 1.1.6 -abs_builddir = /usr/local/src/freeradius-client-1.1.6/patches -abs_srcdir = /usr/local/src/freeradius-client-1.1.6/patches -abs_top_builddir = /usr/local/src/freeradius-client-1.1.6 -abs_top_srcdir = /usr/local/src/freeradius-client-1.1.6 -ac_ct_CC = gcc -ac_ct_DUMPBIN = -am__include = include -am__leading_dot = . -am__quote = -am__tar = ${AMTAR} chof - "$$tardir" -am__untar = ${AMTAR} xf - -bindir = ${exec_prefix}/bin -build = i686-pc-linux-gnu -build_alias = -build_cpu = i686 -build_os = linux-gnu -build_vendor = pc -builddir = . -datadir = ${datarootdir} -datarootdir = ${prefix}/share -docdir = ${datarootdir}/doc/${PACKAGE} -dvidir = ${docdir} -exec_prefix = ${prefix} -host = i686-pc-linux-gnu -host_alias = -host_cpu = i686 -host_os = linux-gnu -host_vendor = pc -htmldir = ${docdir} -includedir = ${prefix}/include -infodir = ${datarootdir}/info -install_sh = ${SHELL} /usr/local/src/freeradius-client-1.1.6/install-sh -libdir = ${exec_prefix}/lib -libexecdir = ${exec_prefix}/libexec -localedir = ${datarootdir}/locale -localstatedir = ${prefix}/var -lt_ECHO = echo -mandir = ${datarootdir}/man -mkdir_p = /bin/mkdir -p -oldincludedir = /usr/include -pdfdir = ${docdir} -pkgsysconfdir = ${prefix}/etc/radiusclient -prefix = /usr/local -program_transform_name = s,x,x, -psdir = ${docdir} -sbindir = ${exec_prefix}/sbin -sharedstatedir = ${prefix}/com -srcdir = . -sysconfdir = ${prefix}/etc -target = i686-pc-linux-gnu -target_alias = -target_cpu = i686 -target_os = linux-gnu -target_vendor = pc -top_build_prefix = ../ -top_builddir = .. -top_srcdir = .. -AUTOMAKE_OPTIONS = foreign -CLEANFILES = *~ -EXTRA_DIST = README merit-2.4.21-CHAP.diff radiusd-1.16.shadow.diff \ - radiusd-1.16.accounting.diff - -all: all-am - -.SUFFIXES: -$(srcdir)/Makefile.in: # $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ - && { if test -f $@; then exit 0; else break; fi; }; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign patches/Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --foreign patches/Makefile -.PRECIOUS: Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: # $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): # $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(am__aclocal_m4_deps): - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs -tags: TAGS -TAGS: - -ctags: CTAGS -CTAGS: - - -distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - list='$(DISTFILES)'; \ - dist_files=`for file in $$list; do echo $$file; done | \ - sed -e "s|^$$srcdirstrip/||;t" \ - -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ - case $$dist_files in \ - */*) $(MKDIR_P) `echo "$$dist_files" | \ - sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ - sort -u` ;; \ - esac; \ - for file in $$dist_files; do \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - if test -d $$d/$$file; then \ - dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test -d "$(distdir)/$$file"; then \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ - else \ - test -f "$(distdir)/$$file" \ - || cp -p $$d/$$file "$(distdir)/$$file" \ - || exit 1; \ - fi; \ - done -check-am: all-am -check: check-am -all-am: Makefile -installdirs: -install: install-am -install-exec: install-exec-am -install-data: install-data-am -uninstall: uninstall-am - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-am -install-strip: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install -mostlyclean-generic: - -clean-generic: - -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." -clean: clean-am - -clean-am: clean-generic clean-libtool mostlyclean-am - -distclean: distclean-am - -rm -f Makefile -distclean-am: clean-am distclean-generic - -dvi: dvi-am - -dvi-am: - -html: html-am - -html-am: - -info: info-am - -info-am: - -install-data-am: - -install-dvi: install-dvi-am - -install-dvi-am: - -install-exec-am: - -install-html: install-html-am - -install-html-am: - -install-info: install-info-am - -install-info-am: - -install-man: - -install-pdf: install-pdf-am - -install-pdf-am: - -install-ps: install-ps-am - -install-ps-am: - -installcheck-am: - -maintainer-clean: maintainer-clean-am - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-am - -mostlyclean-am: mostlyclean-generic mostlyclean-libtool - -pdf: pdf-am - -pdf-am: - -ps: ps-am - -ps-am: - -uninstall-am: - -.MAKE: install-am install-strip - -.PHONY: all all-am check check-am clean clean-generic clean-libtool \ - distclean distclean-generic distclean-libtool distdir dvi \ - dvi-am html html-am info info-am install install-am \ - install-data install-data-am install-dvi install-dvi-am \ - install-exec install-exec-am install-html install-html-am \ - install-info install-info-am install-man install-pdf \ - install-pdf-am install-ps install-ps-am install-strip \ - installcheck installcheck-am installdirs maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-generic \ - mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am - - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/patches/Makefile.am b/openair3/PMIPv6/freeradius-client-1.1.6/patches/Makefile.am deleted file mode 100644 index 1ffab10778..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/patches/Makefile.am +++ /dev/null @@ -1,16 +0,0 @@ -# -# $Id: Makefile.am,v 1.1.1.1 2003/12/02 10:39:23 sobomax Exp $ -# -# Copyright (C) 1997 Lars Fenneberg -# -# See the file COPYRIGHT for the respective terms and conditions. -# If the file is missing contact me at lf@elemental.net -# and I'll send you a copy. -# - -AUTOMAKE_OPTIONS = foreign - -CLEANFILES = *~ - -EXTRA_DIST = README merit-2.4.21-CHAP.diff radiusd-1.16.shadow.diff \ - radiusd-1.16.accounting.diff diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/patches/Makefile.in b/openair3/PMIPv6/freeradius-client-1.1.6/patches/Makefile.in deleted file mode 100644 index b6be7c5959..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/patches/Makefile.in +++ /dev/null @@ -1,374 +0,0 @@ -# Makefile.in generated by automake 1.11.1 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, -# Inc. -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -@SET_MAKE@ - -# -# $Id: Makefile.am,v 1.1.1.1 2003/12/02 10:39:23 sobomax Exp $ -# -# Copyright (C) 1997 Lars Fenneberg -# -# See the file COPYRIGHT for the respective terms and conditions. -# If the file is missing contact me at lf@elemental.net -# and I'll send you a copy. -# -VPATH = @srcdir@ -pkgdatadir = $(datadir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ -pkglibexecdir = $(libexecdir)/@PACKAGE@ -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = @build@ -host_triplet = @host@ -target_triplet = @target@ -subdir = patches -DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/configure.in -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs -CONFIG_HEADER = $(top_builddir)/config.h -CONFIG_CLEAN_FILES = -CONFIG_CLEAN_VPATH_FILES = -SOURCES = -DIST_SOURCES = -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = @ACLOCAL@ -ALLOCA = @ALLOCA@ -AMTAR = @AMTAR@ -AR = @AR@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -CC = @CC@ -CCDEPMODE = @CCDEPMODE@ -CFLAGS = @CFLAGS@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CYGPATH_W = @CYGPATH_W@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -DSYMUTIL = @DSYMUTIL@ -DUMPBIN = @DUMPBIN@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -EXEEXT = @EXEEXT@ -FGREP = @FGREP@ -GREP = @GREP@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -LD = @LD@ -LDFLAGS = @LDFLAGS@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LIBTOOL = @LIBTOOL@ -LIBVERSION = @LIBVERSION@ -LIPO = @LIPO@ -LN_S = @LN_S@ -LTLIBOBJS = @LTLIBOBJS@ -MAINT = @MAINT@ -MAKEINFO = @MAKEINFO@ -MKDIR_P = @MKDIR_P@ -NM = @NM@ -NMEDIT = @NMEDIT@ -OBJDUMP = @OBJDUMP@ -OBJEXT = @OBJEXT@ -OTOOL = @OTOOL@ -OTOOL64 = @OTOOL64@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_URL = @PACKAGE_URL@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -RANLIB = @RANLIB@ -RC_LOG_FACILITY = @RC_LOG_FACILITY@ -RC_SECURE_PATH = @RC_SECURE_PATH@ -SED = @SED@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -STRIP = @STRIP@ -VERSION = @VERSION@ -abs_builddir = @abs_builddir@ -abs_srcdir = @abs_srcdir@ -abs_top_builddir = @abs_top_builddir@ -abs_top_srcdir = @abs_top_srcdir@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ -am__include = @am__include@ -am__leading_dot = @am__leading_dot@ -am__quote = @am__quote@ -am__tar = @am__tar@ -am__untar = @am__untar@ -bindir = @bindir@ -build = @build@ -build_alias = @build_alias@ -build_cpu = @build_cpu@ -build_os = @build_os@ -build_vendor = @build_vendor@ -builddir = @builddir@ -datadir = @datadir@ -datarootdir = @datarootdir@ -docdir = @docdir@ -dvidir = @dvidir@ -exec_prefix = @exec_prefix@ -host = @host@ -host_alias = @host_alias@ -host_cpu = @host_cpu@ -host_os = @host_os@ -host_vendor = @host_vendor@ -htmldir = @htmldir@ -includedir = @includedir@ -infodir = @infodir@ -install_sh = @install_sh@ -libdir = @libdir@ -libexecdir = @libexecdir@ -localedir = @localedir@ -localstatedir = @localstatedir@ -lt_ECHO = @lt_ECHO@ -mandir = @mandir@ -mkdir_p = @mkdir_p@ -oldincludedir = @oldincludedir@ -pdfdir = @pdfdir@ -pkgsysconfdir = @pkgsysconfdir@ -prefix = @prefix@ -program_transform_name = @program_transform_name@ -psdir = @psdir@ -sbindir = @sbindir@ -sharedstatedir = @sharedstatedir@ -srcdir = @srcdir@ -sysconfdir = @sysconfdir@ -target = @target@ -target_alias = @target_alias@ -target_cpu = @target_cpu@ -target_os = @target_os@ -target_vendor = @target_vendor@ -top_build_prefix = @top_build_prefix@ -top_builddir = @top_builddir@ -top_srcdir = @top_srcdir@ -AUTOMAKE_OPTIONS = foreign -CLEANFILES = *~ -EXTRA_DIST = README merit-2.4.21-CHAP.diff radiusd-1.16.shadow.diff \ - radiusd-1.16.accounting.diff - -all: all-am - -.SUFFIXES: -$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ - && { if test -f $@; then exit 0; else break; fi; }; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign patches/Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --foreign patches/Makefile -.PRECIOUS: Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(am__aclocal_m4_deps): - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs -tags: TAGS -TAGS: - -ctags: CTAGS -CTAGS: - - -distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - list='$(DISTFILES)'; \ - dist_files=`for file in $$list; do echo $$file; done | \ - sed -e "s|^$$srcdirstrip/||;t" \ - -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ - case $$dist_files in \ - */*) $(MKDIR_P) `echo "$$dist_files" | \ - sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ - sort -u` ;; \ - esac; \ - for file in $$dist_files; do \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - if test -d $$d/$$file; then \ - dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test -d "$(distdir)/$$file"; then \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ - else \ - test -f "$(distdir)/$$file" \ - || cp -p $$d/$$file "$(distdir)/$$file" \ - || exit 1; \ - fi; \ - done -check-am: all-am -check: check-am -all-am: Makefile -installdirs: -install: install-am -install-exec: install-exec-am -install-data: install-data-am -uninstall: uninstall-am - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-am -install-strip: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install -mostlyclean-generic: - -clean-generic: - -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." -clean: clean-am - -clean-am: clean-generic clean-libtool mostlyclean-am - -distclean: distclean-am - -rm -f Makefile -distclean-am: clean-am distclean-generic - -dvi: dvi-am - -dvi-am: - -html: html-am - -html-am: - -info: info-am - -info-am: - -install-data-am: - -install-dvi: install-dvi-am - -install-dvi-am: - -install-exec-am: - -install-html: install-html-am - -install-html-am: - -install-info: install-info-am - -install-info-am: - -install-man: - -install-pdf: install-pdf-am - -install-pdf-am: - -install-ps: install-ps-am - -install-ps-am: - -installcheck-am: - -maintainer-clean: maintainer-clean-am - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-am - -mostlyclean-am: mostlyclean-generic mostlyclean-libtool - -pdf: pdf-am - -pdf-am: - -ps: ps-am - -ps-am: - -uninstall-am: - -.MAKE: install-am install-strip - -.PHONY: all all-am check check-am clean clean-generic clean-libtool \ - distclean distclean-generic distclean-libtool distdir dvi \ - dvi-am html html-am info info-am install install-am \ - install-data install-data-am install-dvi install-dvi-am \ - install-exec install-exec-am install-html install-html-am \ - install-info install-info-am install-man install-pdf \ - install-pdf-am install-ps install-ps-am install-strip \ - installcheck installcheck-am installdirs maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-generic \ - mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am - - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/patches/README b/openair3/PMIPv6/freeradius-client-1.1.6/patches/README deleted file mode 100644 index 8049e0ca41..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/patches/README +++ /dev/null @@ -1,40 +0,0 @@ -$Id: README,v 1.2 2004/11/17 14:48:15 janakj Exp $ - -ppp-2.2.0f-radclient.diff - - NOW LONGER INCLUDED. For pppd patches see: - - http://www.gams.net/~mla/radius.html - http://www.iphil.net/~map/radius/ - http://linux.slovenija.net/radius/ - -merit-2.4.21-CHAP.diff - - Patch to the Merit radiusd 2.4.21 to support the CHAP-Challenge - attribute. Doesn't work with earlier version of Merit radiusd. I sent - this patch to Merit, so hopefully it'll be included in the next release. - Apply this patch from the "src" directory of the radiusd sources. - -radiusd-1.16.shadow.diff - - Patch to the original radiusd by Livingston to recognize "*" - as a special password to look for shadow passwords. - Apply this patch from the "src" directory of the radiusd sources. - - -radiusd-1.16.accounting.diff - - The patch for Livingston's (now Lucent's) radiusd 1.16 fixes the - accounting reply digest bug. When you've applied this patch to your - RADIUS server you no longer need to compile radiusclient with - --enable-radius-116. This patch was contributed by Tilman - Mueller-Gerbes . Thanks, Tilman! - -rename.patch - - The patch renames the library to radiusclient-ng (that means - radiusclient.h will be renamed to radiusclient-ng.h, libradiusclient.so - to libradiusclient-ng.so and so on). This is useful if you want the - original radiusclient library coexist on the same system with this - version. - Jan Janak diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/patches/merit-2.4.21-CHAP.diff b/openair3/PMIPv6/freeradius-client-1.1.6/patches/merit-2.4.21-CHAP.diff deleted file mode 100644 index f6562a3cd0..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/patches/merit-2.4.21-CHAP.diff +++ /dev/null @@ -1,41 +0,0 @@ ---- funcs.c.dist Mon May 13 00:37:37 1996 -+++ funcs.c Mon May 13 00:58:33 1996 -@@ -830,11 +830,12 @@ - /* reply.*/ - - { -- VALUE_PAIR *item; -+ VALUE_PAIR *item, *chall; - u_char buffer[AUTH_PASS_LEN + AUTH_VECTOR_LEN + 1]; - int i; - int secretlen; - int result; -+ int chall_len; - u_char digest[CHAP_VALUE_LENGTH]; - u_char *ptr; - char *crypt (); -@@ -896,10 +897,21 @@ - - secretlen = strlen ((char *) ptr); - ptr += secretlen; -- memcpy ((char *) ptr, (char *) authreq->vector, -- AUTH_VECTOR_LEN); -+ -+ /* this uses CHAP-Challenge as the challenge if it exists */ -+ /* lf, 5/13/96 */ -+ if ((chall = get_vp (authreq->request, PW_CHAP_CHALLENGE)) -+ != (VALUE_PAIR *) NULL) { -+ memcpy ((char *) ptr, chall->strvalue, chall->lvalue); -+ chall_len = chall->lvalue; -+ } else { -+ memcpy ((char *) ptr, (char *) authreq->vector, -+ AUTH_VECTOR_LEN); -+ chall_len = AUTH_VECTOR_LEN; -+ } -+ - md5_calc (digest, buffer, -- 1 + CHAP_VALUE_LENGTH + secretlen); -+ 1 + chall_len + secretlen); - /* Compare them */ - if ((result = memcmp ((char *) digest, item->strvalue + 1, - CHAP_VALUE_LENGTH)) != 0) diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/patches/radiusd-1.16.accounting.diff b/openair3/PMIPv6/freeradius-client-1.1.6/patches/radiusd-1.16.accounting.diff deleted file mode 100644 index feda35c677..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/patches/radiusd-1.16.accounting.diff +++ /dev/null @@ -1,82 +0,0 @@ -Message-ID: <19980211151522.51612@Galerkin.fs100.suse.de> -Date: Wed, 11 Feb 1998 15:15:22 +0100 -From: Tilman Mueller-Gerbes -To: Lars Fenneberg -Subject: Re: Radiusclient-0.3-alpha - -Hi! - -Das mit der spec-Datei dauert noch ein bisschen, allerdings habe -ich einen Bug-Fix fuer den Radiusd, d.h. dein Problem mit -den Radius-Accounting-Requests geloest: - -Es ist so, dass bei Radius-Accounting Requests im Response-MD5-Digest -der radiusd 1.16 schlicht und einfach das secret nicht mit -einrechnet. Das secret wird mehr oder weniger zufaellig gesetzt -(d.h. gar nicht erst initialisiert :(. - -Ich habe einen Patch fuer den Radiusd 1.16.1 (unten angehaengt). - -Der Radiusd Berechnet die Digests bei Accounting Requests nicht - -ob das so i.O. ist sei mal dahingestellt, andere Implementationen -werden es wohl auch nicht tun. - - -**** - ---- src/Makefile -+++ src/Makefile 1998/02/11 14:09:51 -@@ -14,7 +14,7 @@ - # unixware: add -Dunixware to CFLAGS, use LIBS= -lucb -lnsl -lsocket - # - SRCDIR=. --CFLAGS= -O -DNOSHADOW -+CFLAGS= -O -DFIX_ACCOUNTING_BUG - LDFLAGS= - CC= cc - LIBS= ---- src/acct.c -+++ src/acct.c 1998/02/11 14:09:10 -@@ -70,6 +70,31 @@ - char buffer[512]; - VALUE_PAIR *pair; - long curtime; -+ char pw_digest[16]; -+ /* -+ * fix accounting bug: when receiving an accounting request -+ * the digest is not checked at all and a wrong -+ * reply digest is calculated, as authreq->secret is not -+ * initialized -+ * this fix should not break any existing code, as the -+ * reply digest was random anyway (and may be never checked -+ * by anyone) -tmg@suse.de- -+ */ -+#if defined(FIX_ACCOUNTING_BUG) -+ /* Verify the client and Calculate the MD5 Password Digest */ -+ if(calc_digest(pw_digest, authreq) != 0) { -+ char msg[512]; -+ /* We dont respond when this fails */ -+ sprintf(msg, "Authenticate: from %s - Security Breach Accounting\n", -+ ip_hostname(authreq->ipaddr)); -+ msg[127] = '\0'; -+ log_err(msg); -+ pairfree(authreq->request); -+ memset(authreq, 0, sizeof(AUTH_REQ)); -+ free(authreq); -+ return; -+ } -+#endif - - strncpy(clientname, ip_hostname(authreq->ipaddr), 128); - clientname[127] = '\0'; - - - - --- - Tilman Mueller-Gerbes, S.u.S.E. GmbH, Gebhardtstr. 2, 90762 Fuerth, Germany - Tel: +49-911-7405330, Fax: +49-911-7417755, Email: tmg@suse.de -+-------------------------------------------------------------------------+ -| S.u.S.E. auf der CeBIT '98! -- Besuchen Sie uns in Halle 5, Stand A61 | -+-------------------------------------------------------------------------+ - diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/patches/radiusd-1.16.shadow.diff b/openair3/PMIPv6/freeradius-client-1.1.6/patches/radiusd-1.16.shadow.diff deleted file mode 100644 index ff2c162313..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/patches/radiusd-1.16.shadow.diff +++ /dev/null @@ -1,12 +0,0 @@ ---- radiusd.c~ Fri Jan 6 22:58:16 1995 -+++ radiusd.c Thu Apr 4 22:43:31 1996 -@@ -1426,7 +1426,8 @@ - encrypted_pass = pwd->pw_passwd; - - #if !defined(NOSHADOW) -- if(strcmp(pwd->pw_passwd, "x") == 0) { -+ if ((strcmp(pwd->pw_passwd, "x") == 0) || -+ (strcmp(pwd->pw_passwd, "*") == 0)) { - if((spwd = getspnam(name)) == NULL) { - return(-1); - } diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/rpm/Makefile b/openair3/PMIPv6/freeradius-client-1.1.6/rpm/Makefile deleted file mode 100644 index f0e6583a54..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/rpm/Makefile +++ /dev/null @@ -1,371 +0,0 @@ -# Makefile.in generated by automake 1.11.1 from Makefile.am. -# rpm/Makefile. Generated from Makefile.in by configure. - -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, -# Inc. -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - - - -# -# $Id: Makefile.am,v 1.1 2004/11/17 13:13:42 janakj Exp $ -# -# Copyright (C) 1997 Lars Fenneberg -# -# See the file COPYRIGHT for the respective terms and conditions. -# If the file is missing contact me at lf@elemental.net -# and I'll send you a copy. -# -# - -pkgdatadir = $(datadir)/radiusclient -pkgincludedir = $(includedir)/radiusclient -pkglibdir = $(libdir)/radiusclient -pkglibexecdir = $(libexecdir)/radiusclient -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = i686-pc-linux-gnu -host_triplet = i686-pc-linux-gnu -target_triplet = i686-pc-linux-gnu -subdir = rpm -DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/configure.in -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs -CONFIG_HEADER = $(top_builddir)/config.h -CONFIG_CLEAN_FILES = -CONFIG_CLEAN_VPATH_FILES = -SOURCES = -DIST_SOURCES = -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = ${SHELL} /usr/local/src/freeradius-client-1.1.6/missing --run aclocal-1.11 -ALLOCA = -AMTAR = ${SHELL} /usr/local/src/freeradius-client-1.1.6/missing --run tar -AR = /usr/bin/ar -AUTOCONF = ${SHELL} /usr/local/src/freeradius-client-1.1.6/missing --run autoconf -AUTOHEADER = ${SHELL} /usr/local/src/freeradius-client-1.1.6/missing --run autoheader -AUTOMAKE = ${SHELL} /usr/local/src/freeradius-client-1.1.6/missing --run automake-1.11 -AWK = gawk -CC = gcc -CCDEPMODE = depmode=gcc3 -CFLAGS = -g -O2 -CPP = gcc -E -CPPFLAGS = -CYGPATH_W = echo -DEFS = -DHAVE_CONFIG_H -DEPDIR = .deps -DSYMUTIL = -DUMPBIN = -ECHO_C = -ECHO_N = -n -ECHO_T = -EGREP = /bin/grep -E -EXEEXT = -FGREP = /bin/grep -F -GREP = /bin/grep -INSTALL = /usr/bin/install -c -INSTALL_DATA = ${INSTALL} -m 644 -INSTALL_PROGRAM = ${INSTALL} -INSTALL_SCRIPT = ${INSTALL} -INSTALL_STRIP_PROGRAM = $(install_sh) -c -s -LD = /usr/bin/ld -LDFLAGS = -LIBOBJS = -LIBS = -lcrypt -lnsl -LIBTOOL = $(SHELL) $(top_builddir)/libtool -LIBVERSION = 2:0:0 -LIPO = -LN_S = ln -s -LTLIBOBJS = -MAINT = # -MAKEINFO = ${SHELL} /usr/local/src/freeradius-client-1.1.6/missing --run makeinfo -MKDIR_P = /bin/mkdir -p -NM = /usr/bin/nm -B -NMEDIT = -OBJDUMP = objdump -OBJEXT = o -OTOOL = -OTOOL64 = -PACKAGE = radiusclient -PACKAGE_BUGREPORT = -PACKAGE_NAME = -PACKAGE_STRING = -PACKAGE_TARNAME = -PACKAGE_URL = -PACKAGE_VERSION = -PATH_SEPARATOR = : -RANLIB = ranlib -RC_LOG_FACILITY = LOG_DAEMON -RC_SECURE_PATH = /bin:/usr/bin:/usr/local/bin -SED = /bin/sed -SET_MAKE = -SHELL = /bin/bash -STRIP = strip -VERSION = 1.1.6 -abs_builddir = /usr/local/src/freeradius-client-1.1.6/rpm -abs_srcdir = /usr/local/src/freeradius-client-1.1.6/rpm -abs_top_builddir = /usr/local/src/freeradius-client-1.1.6 -abs_top_srcdir = /usr/local/src/freeradius-client-1.1.6 -ac_ct_CC = gcc -ac_ct_DUMPBIN = -am__include = include -am__leading_dot = . -am__quote = -am__tar = ${AMTAR} chof - "$$tardir" -am__untar = ${AMTAR} xf - -bindir = ${exec_prefix}/bin -build = i686-pc-linux-gnu -build_alias = -build_cpu = i686 -build_os = linux-gnu -build_vendor = pc -builddir = . -datadir = ${datarootdir} -datarootdir = ${prefix}/share -docdir = ${datarootdir}/doc/${PACKAGE} -dvidir = ${docdir} -exec_prefix = ${prefix} -host = i686-pc-linux-gnu -host_alias = -host_cpu = i686 -host_os = linux-gnu -host_vendor = pc -htmldir = ${docdir} -includedir = ${prefix}/include -infodir = ${datarootdir}/info -install_sh = ${SHELL} /usr/local/src/freeradius-client-1.1.6/install-sh -libdir = ${exec_prefix}/lib -libexecdir = ${exec_prefix}/libexec -localedir = ${datarootdir}/locale -localstatedir = ${prefix}/var -lt_ECHO = echo -mandir = ${datarootdir}/man -mkdir_p = /bin/mkdir -p -oldincludedir = /usr/include -pdfdir = ${docdir} -pkgsysconfdir = ${prefix}/etc/radiusclient -prefix = /usr/local -program_transform_name = s,x,x, -psdir = ${docdir} -sbindir = ${exec_prefix}/sbin -sharedstatedir = ${prefix}/com -srcdir = . -sysconfdir = ${prefix}/etc -target = i686-pc-linux-gnu -target_alias = -target_cpu = i686 -target_os = linux-gnu -target_vendor = pc -top_build_prefix = ../ -top_builddir = .. -top_srcdir = .. -AUTOMAKE_OPTIONS = foreign -EXTRA_DIST = radiusclient-ng.spec -all: all-am - -.SUFFIXES: -$(srcdir)/Makefile.in: # $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ - && { if test -f $@; then exit 0; else break; fi; }; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign rpm/Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --foreign rpm/Makefile -.PRECIOUS: Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: # $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): # $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(am__aclocal_m4_deps): - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs -tags: TAGS -TAGS: - -ctags: CTAGS -CTAGS: - - -distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - list='$(DISTFILES)'; \ - dist_files=`for file in $$list; do echo $$file; done | \ - sed -e "s|^$$srcdirstrip/||;t" \ - -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ - case $$dist_files in \ - */*) $(MKDIR_P) `echo "$$dist_files" | \ - sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ - sort -u` ;; \ - esac; \ - for file in $$dist_files; do \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - if test -d $$d/$$file; then \ - dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test -d "$(distdir)/$$file"; then \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ - else \ - test -f "$(distdir)/$$file" \ - || cp -p $$d/$$file "$(distdir)/$$file" \ - || exit 1; \ - fi; \ - done -check-am: all-am -check: check-am -all-am: Makefile -installdirs: -install: install-am -install-exec: install-exec-am -install-data: install-data-am -uninstall: uninstall-am - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-am -install-strip: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install -mostlyclean-generic: - -clean-generic: - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." -clean: clean-am - -clean-am: clean-generic clean-libtool mostlyclean-am - -distclean: distclean-am - -rm -f Makefile -distclean-am: clean-am distclean-generic - -dvi: dvi-am - -dvi-am: - -html: html-am - -html-am: - -info: info-am - -info-am: - -install-data-am: - -install-dvi: install-dvi-am - -install-dvi-am: - -install-exec-am: - -install-html: install-html-am - -install-html-am: - -install-info: install-info-am - -install-info-am: - -install-man: - -install-pdf: install-pdf-am - -install-pdf-am: - -install-ps: install-ps-am - -install-ps-am: - -installcheck-am: - -maintainer-clean: maintainer-clean-am - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-am - -mostlyclean-am: mostlyclean-generic mostlyclean-libtool - -pdf: pdf-am - -pdf-am: - -ps: ps-am - -ps-am: - -uninstall-am: - -.MAKE: install-am install-strip - -.PHONY: all all-am check check-am clean clean-generic clean-libtool \ - distclean distclean-generic distclean-libtool distdir dvi \ - dvi-am html html-am info info-am install install-am \ - install-data install-data-am install-dvi install-dvi-am \ - install-exec install-exec-am install-html install-html-am \ - install-info install-info-am install-man install-pdf \ - install-pdf-am install-ps install-ps-am install-strip \ - installcheck installcheck-am installdirs maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-generic \ - mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am - - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/rpm/Makefile.am b/openair3/PMIPv6/freeradius-client-1.1.6/rpm/Makefile.am deleted file mode 100644 index d6e2944411..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/rpm/Makefile.am +++ /dev/null @@ -1,14 +0,0 @@ -# -# $Id: Makefile.am,v 1.1 2004/11/17 13:13:42 janakj Exp $ -# -# Copyright (C) 1997 Lars Fenneberg -# -# See the file COPYRIGHT for the respective terms and conditions. -# If the file is missing contact me at lf@elemental.net -# and I'll send you a copy. -# -# - -AUTOMAKE_OPTIONS = foreign - -EXTRA_DIST = radiusclient-ng.spec diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/rpm/Makefile.in b/openair3/PMIPv6/freeradius-client-1.1.6/rpm/Makefile.in deleted file mode 100644 index b242cd6b4a..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/rpm/Makefile.in +++ /dev/null @@ -1,371 +0,0 @@ -# Makefile.in generated by automake 1.11.1 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, -# Inc. -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -@SET_MAKE@ - -# -# $Id: Makefile.am,v 1.1 2004/11/17 13:13:42 janakj Exp $ -# -# Copyright (C) 1997 Lars Fenneberg -# -# See the file COPYRIGHT for the respective terms and conditions. -# If the file is missing contact me at lf@elemental.net -# and I'll send you a copy. -# -# -VPATH = @srcdir@ -pkgdatadir = $(datadir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ -pkglibexecdir = $(libexecdir)/@PACKAGE@ -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = @build@ -host_triplet = @host@ -target_triplet = @target@ -subdir = rpm -DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/configure.in -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs -CONFIG_HEADER = $(top_builddir)/config.h -CONFIG_CLEAN_FILES = -CONFIG_CLEAN_VPATH_FILES = -SOURCES = -DIST_SOURCES = -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = @ACLOCAL@ -ALLOCA = @ALLOCA@ -AMTAR = @AMTAR@ -AR = @AR@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -CC = @CC@ -CCDEPMODE = @CCDEPMODE@ -CFLAGS = @CFLAGS@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CYGPATH_W = @CYGPATH_W@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -DSYMUTIL = @DSYMUTIL@ -DUMPBIN = @DUMPBIN@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -EXEEXT = @EXEEXT@ -FGREP = @FGREP@ -GREP = @GREP@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -LD = @LD@ -LDFLAGS = @LDFLAGS@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LIBTOOL = @LIBTOOL@ -LIBVERSION = @LIBVERSION@ -LIPO = @LIPO@ -LN_S = @LN_S@ -LTLIBOBJS = @LTLIBOBJS@ -MAINT = @MAINT@ -MAKEINFO = @MAKEINFO@ -MKDIR_P = @MKDIR_P@ -NM = @NM@ -NMEDIT = @NMEDIT@ -OBJDUMP = @OBJDUMP@ -OBJEXT = @OBJEXT@ -OTOOL = @OTOOL@ -OTOOL64 = @OTOOL64@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_URL = @PACKAGE_URL@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -RANLIB = @RANLIB@ -RC_LOG_FACILITY = @RC_LOG_FACILITY@ -RC_SECURE_PATH = @RC_SECURE_PATH@ -SED = @SED@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -STRIP = @STRIP@ -VERSION = @VERSION@ -abs_builddir = @abs_builddir@ -abs_srcdir = @abs_srcdir@ -abs_top_builddir = @abs_top_builddir@ -abs_top_srcdir = @abs_top_srcdir@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ -am__include = @am__include@ -am__leading_dot = @am__leading_dot@ -am__quote = @am__quote@ -am__tar = @am__tar@ -am__untar = @am__untar@ -bindir = @bindir@ -build = @build@ -build_alias = @build_alias@ -build_cpu = @build_cpu@ -build_os = @build_os@ -build_vendor = @build_vendor@ -builddir = @builddir@ -datadir = @datadir@ -datarootdir = @datarootdir@ -docdir = @docdir@ -dvidir = @dvidir@ -exec_prefix = @exec_prefix@ -host = @host@ -host_alias = @host_alias@ -host_cpu = @host_cpu@ -host_os = @host_os@ -host_vendor = @host_vendor@ -htmldir = @htmldir@ -includedir = @includedir@ -infodir = @infodir@ -install_sh = @install_sh@ -libdir = @libdir@ -libexecdir = @libexecdir@ -localedir = @localedir@ -localstatedir = @localstatedir@ -lt_ECHO = @lt_ECHO@ -mandir = @mandir@ -mkdir_p = @mkdir_p@ -oldincludedir = @oldincludedir@ -pdfdir = @pdfdir@ -pkgsysconfdir = @pkgsysconfdir@ -prefix = @prefix@ -program_transform_name = @program_transform_name@ -psdir = @psdir@ -sbindir = @sbindir@ -sharedstatedir = @sharedstatedir@ -srcdir = @srcdir@ -sysconfdir = @sysconfdir@ -target = @target@ -target_alias = @target_alias@ -target_cpu = @target_cpu@ -target_os = @target_os@ -target_vendor = @target_vendor@ -top_build_prefix = @top_build_prefix@ -top_builddir = @top_builddir@ -top_srcdir = @top_srcdir@ -AUTOMAKE_OPTIONS = foreign -EXTRA_DIST = radiusclient-ng.spec -all: all-am - -.SUFFIXES: -$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ - && { if test -f $@; then exit 0; else break; fi; }; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign rpm/Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --foreign rpm/Makefile -.PRECIOUS: Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(am__aclocal_m4_deps): - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs -tags: TAGS -TAGS: - -ctags: CTAGS -CTAGS: - - -distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - list='$(DISTFILES)'; \ - dist_files=`for file in $$list; do echo $$file; done | \ - sed -e "s|^$$srcdirstrip/||;t" \ - -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ - case $$dist_files in \ - */*) $(MKDIR_P) `echo "$$dist_files" | \ - sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ - sort -u` ;; \ - esac; \ - for file in $$dist_files; do \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - if test -d $$d/$$file; then \ - dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test -d "$(distdir)/$$file"; then \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ - else \ - test -f "$(distdir)/$$file" \ - || cp -p $$d/$$file "$(distdir)/$$file" \ - || exit 1; \ - fi; \ - done -check-am: all-am -check: check-am -all-am: Makefile -installdirs: -install: install-am -install-exec: install-exec-am -install-data: install-data-am -uninstall: uninstall-am - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-am -install-strip: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install -mostlyclean-generic: - -clean-generic: - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." -clean: clean-am - -clean-am: clean-generic clean-libtool mostlyclean-am - -distclean: distclean-am - -rm -f Makefile -distclean-am: clean-am distclean-generic - -dvi: dvi-am - -dvi-am: - -html: html-am - -html-am: - -info: info-am - -info-am: - -install-data-am: - -install-dvi: install-dvi-am - -install-dvi-am: - -install-exec-am: - -install-html: install-html-am - -install-html-am: - -install-info: install-info-am - -install-info-am: - -install-man: - -install-pdf: install-pdf-am - -install-pdf-am: - -install-ps: install-ps-am - -install-ps-am: - -installcheck-am: - -maintainer-clean: maintainer-clean-am - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-am - -mostlyclean-am: mostlyclean-generic mostlyclean-libtool - -pdf: pdf-am - -pdf-am: - -ps: ps-am - -ps-am: - -uninstall-am: - -.MAKE: install-am install-strip - -.PHONY: all all-am check check-am clean clean-generic clean-libtool \ - distclean distclean-generic distclean-libtool distdir dvi \ - dvi-am html html-am info info-am install install-am \ - install-data install-data-am install-dvi install-dvi-am \ - install-exec install-exec-am install-html install-html-am \ - install-info install-info-am install-man install-pdf \ - install-pdf-am install-ps install-ps-am install-strip \ - installcheck installcheck-am installdirs maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-generic \ - mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am - - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/rpm/radiusclient.spec b/openair3/PMIPv6/freeradius-client-1.1.6/rpm/radiusclient.spec deleted file mode 100644 index da14219956..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/rpm/radiusclient.spec +++ /dev/null @@ -1,153 +0,0 @@ -Summary: FreeRADIUS Client Software -Name: freeradius-client-snapshot -Version: 1.1.6 -Release: 0 -Obsoletes: radiusc radiusclient radiusclient-ng -Group: Productivity/Networking/Radius/Clients -License: Artistic License -Packager: Peter Nixon -URL: http://www.freeradius.org/ -Source0: %{name}-%{version}.tar.bz2 -BuildRoot: %{_tmppath}/%{name}-%{version}-build -Prefix: %{_prefix} -Requires: %{name}-libs = %{version}-%{release} - -%description -A portable, easy-to-use and standard compliant library suitable for developing free and commercial software that need support for a RADIUS protocol (RFCs 2128 and 2139). - -%package libs -Summary: A portable, easy-to-use and standard compliant library for RADIUS protocol (RFCs 2128 and 2139). -Group: Development/Libraries - -%description libs -The package contains the shared library of FreeRADIUS Client - -%package devel -Summary: Header files, libraries and development documentation for %{name}. -Group: Development/Libraries -Requires: %{name}-libs = %{version}-%{release} - -%description devel -This package contains the header files, static libraries and development -documentation for %{name}. You need to install %{name}-devel if you want to develop applications using %{name}. - -%if 0%{?suse_version} > 930 -%debug_package -%endif - -%prep -%setup -q - -%build -%define localstatedir /var/lib -rm missing -%if 0%{?suse_version} > 900 -%{suse_update_config -f} -%endif -libtoolize --force -aclocal -automake -ac -autoconf -CFLAGS="$RPM_OPT_FLAGS -Wall" \ -CXXFLAGS="$RPM_OPT_FLAGS -Wall -fmessage-length=0" \ - %configure \ - --localstatedir=%{localstatedir} \ - --enable-shadow \ - --with-secure-path - -make - -%install -[ "%{buildroot}" != "/" ] && rm -rf %{buildroot} -make "DESTDIR=$RPM_BUILD_ROOT" install -rm -f $RPM_BUILD_ROOT/%{_sbindir}/login.radius -rm -f login.radius/Makefile* -rm -f login.radius/migs/Makefile* - -rm -f %{buildroot}%{_libdir}/*.la - -%post -%{run_ldconfig} - -%postun -%{run_ldconfig} - -%clean -[ "%{buildroot}" != "/" ] && rm -rf %{buildroot} - -%files -%defattr(-, root, root) -%doc doc/* BUGS COPYRIGHT README README.radexample -%dir %{_sysconfdir}/radiusclient -%{_sysconfdir}/radiusclient/dictionary -%{_sysconfdir}/radiusclient/dictionary.* -%config(noreplace) %{_sysconfdir}/radiusclient/radiusclient.conf -%config(noreplace) %{_sysconfdir}/radiusclient/issue -%config(noreplace) %{_sysconfdir}/radiusclient/port-id-map -%config(noreplace) %{_sysconfdir}/radiusclient/servers -%{_sbindir}/* - -%files libs -%defattr(-, root, root) -%{_libdir}/*.so.* -%{_libdir}/*.so - -%files devel -%defattr(-, root, root) -%{_libdir}/*.a -%{_includedir}/*.h - -%changelog -* Sun Jan 06 2008 Peter Nixon -- Update to match upcoming freeradius-client release -* Sun Nov 19 2006 Peter Nixon -- Converted spec from radiusclient package to work with FreeRADIUS Client -- Split out separate -devel and -libs packages -* Wed Jan 25 2006 - mls@suse.de -- converted neededforbuild to BuildRequires -* Thu Nov 18 2004 - ro@suse.de -- fixed file list -* Sat Jan 10 2004 - adrian@suse.de -- add %%defattr -* Thu Jul 31 2003 - mjancar@suse.cz -- use %%run_ldconfig -* Thu May 29 2003 - mjancar@suse.cz -- remove Makefiles from documentation -* Wed May 28 2003 - mjancar@suse.cz -- update to 0.3.2 -- move localstatedir to /var/lib -- remove unpackaged files from buildroot -* Wed Apr 02 2003 - ro@suse.de -- fixed patch radiusclient-0.3.1-fix.dif -* Tue Apr 02 2002 - postadal@suse.cz -- fixed to compile with autoconf-2.53 -* Wed Mar 20 2002 - postadal@suse.cz -- secfix (VU#589523 -buffer overflow in the function that calculates message digests) -- fixed login.expamle, README.SuSE -* Thu Jan 10 2002 - cihlar@suse.cz -- use %%{_libdir} -* Tue Nov 06 2001 - cihlar@suse.cz -- fixed to compile with automake 1.5 -* Wed Jun 06 2001 - cihlar@suse.cz -- fixed to compile with new libtool -* Mon Mar 26 2001 - cihlar@suse.cz -- moved whole files from dif -- fixed to compile -* Wed Nov 29 2000 - smid@suse.cz -- renamed: raduisc => radiusclient -* Wed May 24 2000 - cihlar@suse.cz -- fixed to compile -- added BuildRoot -* Sun Apr 09 2000 - bk@suse.de -- added suse update config macro -* Mon Sep 13 1999 - bs@suse.de -- ran old prepare_spec on spec file to switch to new prepare_spec. -* Thu Jun 10 1999 - kukuk@suse.de -- Remove %%dir for doc tree -* Sun Mar 01 1998 - tmg@suse.de -- README.SuSE again -* Tue Feb 10 1998 - tmg@suse.de -- initial spec file -- fixed paths in radiusclient.conf -- login.example - simplistic example login.radius script -- README.SuSE diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/src/.deps/local.Po b/openair3/PMIPv6/freeradius-client-1.1.6/src/.deps/local.Po deleted file mode 100644 index e7790da390..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/src/.deps/local.Po +++ /dev/null @@ -1,263 +0,0 @@ -local.o: local.c ../config.h ../include/includes.h \ - /usr/include/sys/types.h /usr/include/features.h \ - /usr/include/bits/predefs.h /usr/include/sys/cdefs.h \ - /usr/include/bits/wordsize.h /usr/include/gnu/stubs.h \ - /usr/include/gnu/stubs-32.h /usr/include/bits/types.h \ - /usr/include/bits/typesizes.h /usr/include/time.h \ - /usr/lib/gcc/i486-linux-gnu/4.4.3/include/stddef.h /usr/include/endian.h \ - /usr/include/bits/endian.h /usr/include/bits/byteswap.h \ - /usr/include/sys/select.h /usr/include/bits/select.h \ - /usr/include/bits/sigset.h /usr/include/bits/time.h \ - /usr/include/sys/sysmacros.h /usr/include/bits/pthreadtypes.h \ - /usr/include/ctype.h /usr/include/xlocale.h /usr/include/stdio.h \ - /usr/include/libio.h /usr/include/_G_config.h /usr/include/wchar.h \ - /usr/lib/gcc/i486-linux-gnu/4.4.3/include/stdarg.h \ - /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h \ - /usr/include/bits/stdio.h /usr/include/bits/stdio2.h \ - /usr/include/errno.h /usr/include/bits/errno.h \ - /usr/include/linux/errno.h /usr/include/asm/errno.h \ - /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ - /usr/include/netdb.h /usr/include/netinet/in.h /usr/include/stdint.h \ - /usr/include/bits/wchar.h /usr/include/sys/socket.h \ - /usr/include/sys/uio.h /usr/include/bits/uio.h \ - /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ - /usr/include/asm/socket.h /usr/include/asm-generic/socket.h \ - /usr/include/asm/sockios.h /usr/include/asm-generic/sockios.h \ - /usr/include/bits/socket2.h /usr/include/bits/in.h \ - /usr/include/rpc/netdb.h /usr/include/bits/netdb.h /usr/include/syslog.h \ - /usr/include/sys/syslog.h /usr/include/bits/syslog-path.h \ - /usr/include/bits/syslog.h /usr/include/stdlib.h /usr/include/alloca.h \ - /usr/include/bits/stdlib.h /usr/include/string.h \ - /usr/include/bits/string.h /usr/include/bits/string2.h \ - /usr/include/bits/string3.h /usr/include/unistd.h \ - /usr/include/bits/posix_opt.h /usr/include/bits/confname.h \ - /usr/include/getopt.h /usr/include/bits/unistd.h /usr/include/fcntl.h \ - /usr/include/bits/fcntl.h /usr/include/bits/fcntl2.h \ - /usr/include/sys/fcntl.h /usr/include/sys/file.h /usr/include/sys/stat.h \ - /usr/include/bits/stat.h /usr/include/sys/utsname.h \ - /usr/include/bits/utsname.h /usr/include/sys/ioctl.h \ - /usr/include/bits/ioctls.h /usr/include/asm/ioctls.h \ - /usr/include/asm-generic/ioctls.h /usr/include/linux/ioctl.h \ - /usr/include/asm/ioctl.h /usr/include/asm-generic/ioctl.h \ - /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ - /usr/include/crypt.h /usr/include/termios.h /usr/include/bits/termios.h \ - /usr/include/pwd.h /usr/include/arpa/inet.h /usr/include/signal.h \ - /usr/include/bits/signum.h /usr/include/bits/siginfo.h \ - /usr/include/bits/sigaction.h /usr/include/bits/sigcontext.h \ - /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ - /usr/include/sys/signal.h /usr/include/sys/time.h \ - ../include/freeradius-client.h ../include/messages.h radlogin.h - -../config.h: - -../include/includes.h: - -/usr/include/sys/types.h: - -/usr/include/features.h: - -/usr/include/bits/predefs.h: - -/usr/include/sys/cdefs.h: - -/usr/include/bits/wordsize.h: - -/usr/include/gnu/stubs.h: - -/usr/include/gnu/stubs-32.h: - -/usr/include/bits/types.h: - -/usr/include/bits/typesizes.h: - -/usr/include/time.h: - -/usr/lib/gcc/i486-linux-gnu/4.4.3/include/stddef.h: - -/usr/include/endian.h: - -/usr/include/bits/endian.h: - -/usr/include/bits/byteswap.h: - -/usr/include/sys/select.h: - -/usr/include/bits/select.h: - -/usr/include/bits/sigset.h: - -/usr/include/bits/time.h: - -/usr/include/sys/sysmacros.h: - -/usr/include/bits/pthreadtypes.h: - -/usr/include/ctype.h: - -/usr/include/xlocale.h: - -/usr/include/stdio.h: - -/usr/include/libio.h: - -/usr/include/_G_config.h: - -/usr/include/wchar.h: - -/usr/lib/gcc/i486-linux-gnu/4.4.3/include/stdarg.h: - -/usr/include/bits/stdio_lim.h: - -/usr/include/bits/sys_errlist.h: - -/usr/include/bits/stdio.h: - -/usr/include/bits/stdio2.h: - -/usr/include/errno.h: - -/usr/include/bits/errno.h: - -/usr/include/linux/errno.h: - -/usr/include/asm/errno.h: - -/usr/include/asm-generic/errno.h: - -/usr/include/asm-generic/errno-base.h: - -/usr/include/netdb.h: - -/usr/include/netinet/in.h: - -/usr/include/stdint.h: - -/usr/include/bits/wchar.h: - -/usr/include/sys/socket.h: - -/usr/include/sys/uio.h: - -/usr/include/bits/uio.h: - -/usr/include/bits/socket.h: - -/usr/include/bits/sockaddr.h: - -/usr/include/asm/socket.h: - -/usr/include/asm-generic/socket.h: - -/usr/include/asm/sockios.h: - -/usr/include/asm-generic/sockios.h: - -/usr/include/bits/socket2.h: - -/usr/include/bits/in.h: - -/usr/include/rpc/netdb.h: - -/usr/include/bits/netdb.h: - -/usr/include/syslog.h: - -/usr/include/sys/syslog.h: - -/usr/include/bits/syslog-path.h: - -/usr/include/bits/syslog.h: - -/usr/include/stdlib.h: - -/usr/include/alloca.h: - -/usr/include/bits/stdlib.h: - -/usr/include/string.h: - -/usr/include/bits/string.h: - -/usr/include/bits/string2.h: - -/usr/include/bits/string3.h: - -/usr/include/unistd.h: - -/usr/include/bits/posix_opt.h: - -/usr/include/bits/confname.h: - -/usr/include/getopt.h: - -/usr/include/bits/unistd.h: - -/usr/include/fcntl.h: - -/usr/include/bits/fcntl.h: - -/usr/include/bits/fcntl2.h: - -/usr/include/sys/fcntl.h: - -/usr/include/sys/file.h: - -/usr/include/sys/stat.h: - -/usr/include/bits/stat.h: - -/usr/include/sys/utsname.h: - -/usr/include/bits/utsname.h: - -/usr/include/sys/ioctl.h: - -/usr/include/bits/ioctls.h: - -/usr/include/asm/ioctls.h: - -/usr/include/asm-generic/ioctls.h: - -/usr/include/linux/ioctl.h: - -/usr/include/asm/ioctl.h: - -/usr/include/asm-generic/ioctl.h: - -/usr/include/bits/ioctl-types.h: - -/usr/include/sys/ttydefaults.h: - -/usr/include/crypt.h: - -/usr/include/termios.h: - -/usr/include/bits/termios.h: - -/usr/include/pwd.h: - -/usr/include/arpa/inet.h: - -/usr/include/signal.h: - -/usr/include/bits/signum.h: - -/usr/include/bits/siginfo.h: - -/usr/include/bits/sigaction.h: - -/usr/include/bits/sigcontext.h: - -/usr/include/bits/sigstack.h: - -/usr/include/bits/sigthread.h: - -/usr/include/sys/signal.h: - -/usr/include/sys/time.h: - -../include/freeradius-client.h: - -../include/messages.h: - -radlogin.h: diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/src/.deps/radacct.Po b/openair3/PMIPv6/freeradius-client-1.1.6/src/.deps/radacct.Po deleted file mode 100644 index 5a6f8796a8..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/src/.deps/radacct.Po +++ /dev/null @@ -1,264 +0,0 @@ -radacct.o: radacct.c ../config.h ../include/includes.h \ - /usr/include/sys/types.h /usr/include/features.h \ - /usr/include/bits/predefs.h /usr/include/sys/cdefs.h \ - /usr/include/bits/wordsize.h /usr/include/gnu/stubs.h \ - /usr/include/gnu/stubs-32.h /usr/include/bits/types.h \ - /usr/include/bits/typesizes.h /usr/include/time.h \ - /usr/lib/gcc/i486-linux-gnu/4.4.3/include/stddef.h /usr/include/endian.h \ - /usr/include/bits/endian.h /usr/include/bits/byteswap.h \ - /usr/include/sys/select.h /usr/include/bits/select.h \ - /usr/include/bits/sigset.h /usr/include/bits/time.h \ - /usr/include/sys/sysmacros.h /usr/include/bits/pthreadtypes.h \ - /usr/include/ctype.h /usr/include/xlocale.h /usr/include/stdio.h \ - /usr/include/libio.h /usr/include/_G_config.h /usr/include/wchar.h \ - /usr/lib/gcc/i486-linux-gnu/4.4.3/include/stdarg.h \ - /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h \ - /usr/include/bits/stdio.h /usr/include/bits/stdio2.h \ - /usr/include/errno.h /usr/include/bits/errno.h \ - /usr/include/linux/errno.h /usr/include/asm/errno.h \ - /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ - /usr/include/netdb.h /usr/include/netinet/in.h /usr/include/stdint.h \ - /usr/include/bits/wchar.h /usr/include/sys/socket.h \ - /usr/include/sys/uio.h /usr/include/bits/uio.h \ - /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ - /usr/include/asm/socket.h /usr/include/asm-generic/socket.h \ - /usr/include/asm/sockios.h /usr/include/asm-generic/sockios.h \ - /usr/include/bits/socket2.h /usr/include/bits/in.h \ - /usr/include/rpc/netdb.h /usr/include/bits/netdb.h /usr/include/syslog.h \ - /usr/include/sys/syslog.h /usr/include/bits/syslog-path.h \ - /usr/include/bits/syslog.h /usr/include/stdlib.h /usr/include/alloca.h \ - /usr/include/bits/stdlib.h /usr/include/string.h \ - /usr/include/bits/string.h /usr/include/bits/string2.h \ - /usr/include/bits/string3.h /usr/include/unistd.h \ - /usr/include/bits/posix_opt.h /usr/include/bits/confname.h \ - /usr/include/getopt.h /usr/include/bits/unistd.h /usr/include/fcntl.h \ - /usr/include/bits/fcntl.h /usr/include/bits/fcntl2.h \ - /usr/include/sys/fcntl.h /usr/include/sys/file.h /usr/include/sys/stat.h \ - /usr/include/bits/stat.h /usr/include/sys/utsname.h \ - /usr/include/bits/utsname.h /usr/include/sys/ioctl.h \ - /usr/include/bits/ioctls.h /usr/include/asm/ioctls.h \ - /usr/include/asm-generic/ioctls.h /usr/include/linux/ioctl.h \ - /usr/include/asm/ioctl.h /usr/include/asm-generic/ioctl.h \ - /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ - /usr/include/crypt.h /usr/include/termios.h /usr/include/bits/termios.h \ - /usr/include/pwd.h /usr/include/arpa/inet.h /usr/include/signal.h \ - /usr/include/bits/signum.h /usr/include/bits/siginfo.h \ - /usr/include/bits/sigaction.h /usr/include/bits/sigcontext.h \ - /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ - /usr/include/sys/signal.h /usr/include/sys/time.h \ - ../include/freeradius-client.h ../include/messages.h \ - ../include/pathnames.h - -../config.h: - -../include/includes.h: - -/usr/include/sys/types.h: - -/usr/include/features.h: - -/usr/include/bits/predefs.h: - -/usr/include/sys/cdefs.h: - -/usr/include/bits/wordsize.h: - -/usr/include/gnu/stubs.h: - -/usr/include/gnu/stubs-32.h: - -/usr/include/bits/types.h: - -/usr/include/bits/typesizes.h: - -/usr/include/time.h: - -/usr/lib/gcc/i486-linux-gnu/4.4.3/include/stddef.h: - -/usr/include/endian.h: - -/usr/include/bits/endian.h: - -/usr/include/bits/byteswap.h: - -/usr/include/sys/select.h: - -/usr/include/bits/select.h: - -/usr/include/bits/sigset.h: - -/usr/include/bits/time.h: - -/usr/include/sys/sysmacros.h: - -/usr/include/bits/pthreadtypes.h: - -/usr/include/ctype.h: - -/usr/include/xlocale.h: - -/usr/include/stdio.h: - -/usr/include/libio.h: - -/usr/include/_G_config.h: - -/usr/include/wchar.h: - -/usr/lib/gcc/i486-linux-gnu/4.4.3/include/stdarg.h: - -/usr/include/bits/stdio_lim.h: - -/usr/include/bits/sys_errlist.h: - -/usr/include/bits/stdio.h: - -/usr/include/bits/stdio2.h: - -/usr/include/errno.h: - -/usr/include/bits/errno.h: - -/usr/include/linux/errno.h: - -/usr/include/asm/errno.h: - -/usr/include/asm-generic/errno.h: - -/usr/include/asm-generic/errno-base.h: - -/usr/include/netdb.h: - -/usr/include/netinet/in.h: - -/usr/include/stdint.h: - -/usr/include/bits/wchar.h: - -/usr/include/sys/socket.h: - -/usr/include/sys/uio.h: - -/usr/include/bits/uio.h: - -/usr/include/bits/socket.h: - -/usr/include/bits/sockaddr.h: - -/usr/include/asm/socket.h: - -/usr/include/asm-generic/socket.h: - -/usr/include/asm/sockios.h: - -/usr/include/asm-generic/sockios.h: - -/usr/include/bits/socket2.h: - -/usr/include/bits/in.h: - -/usr/include/rpc/netdb.h: - -/usr/include/bits/netdb.h: - -/usr/include/syslog.h: - -/usr/include/sys/syslog.h: - -/usr/include/bits/syslog-path.h: - -/usr/include/bits/syslog.h: - -/usr/include/stdlib.h: - -/usr/include/alloca.h: - -/usr/include/bits/stdlib.h: - -/usr/include/string.h: - -/usr/include/bits/string.h: - -/usr/include/bits/string2.h: - -/usr/include/bits/string3.h: - -/usr/include/unistd.h: - -/usr/include/bits/posix_opt.h: - -/usr/include/bits/confname.h: - -/usr/include/getopt.h: - -/usr/include/bits/unistd.h: - -/usr/include/fcntl.h: - -/usr/include/bits/fcntl.h: - -/usr/include/bits/fcntl2.h: - -/usr/include/sys/fcntl.h: - -/usr/include/sys/file.h: - -/usr/include/sys/stat.h: - -/usr/include/bits/stat.h: - -/usr/include/sys/utsname.h: - -/usr/include/bits/utsname.h: - -/usr/include/sys/ioctl.h: - -/usr/include/bits/ioctls.h: - -/usr/include/asm/ioctls.h: - -/usr/include/asm-generic/ioctls.h: - -/usr/include/linux/ioctl.h: - -/usr/include/asm/ioctl.h: - -/usr/include/asm-generic/ioctl.h: - -/usr/include/bits/ioctl-types.h: - -/usr/include/sys/ttydefaults.h: - -/usr/include/crypt.h: - -/usr/include/termios.h: - -/usr/include/bits/termios.h: - -/usr/include/pwd.h: - -/usr/include/arpa/inet.h: - -/usr/include/signal.h: - -/usr/include/bits/signum.h: - -/usr/include/bits/siginfo.h: - -/usr/include/bits/sigaction.h: - -/usr/include/bits/sigcontext.h: - -/usr/include/bits/sigstack.h: - -/usr/include/bits/sigthread.h: - -/usr/include/sys/signal.h: - -/usr/include/sys/time.h: - -../include/freeradius-client.h: - -../include/messages.h: - -../include/pathnames.h: diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/src/.deps/radembedded.Po b/openair3/PMIPv6/freeradius-client-1.1.6/src/.deps/radembedded.Po deleted file mode 100644 index f72077b726..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/src/.deps/radembedded.Po +++ /dev/null @@ -1,140 +0,0 @@ -radembedded.o: radembedded.c /usr/include/stdlib.h \ - /usr/include/features.h /usr/include/bits/predefs.h \ - /usr/include/sys/cdefs.h /usr/include/bits/wordsize.h \ - /usr/include/gnu/stubs.h /usr/include/gnu/stubs-32.h \ - /usr/lib/gcc/i486-linux-gnu/4.4.3/include/stddef.h \ - /usr/include/sys/types.h /usr/include/bits/types.h \ - /usr/include/bits/typesizes.h /usr/include/time.h /usr/include/endian.h \ - /usr/include/bits/endian.h /usr/include/bits/byteswap.h \ - /usr/include/sys/select.h /usr/include/bits/select.h \ - /usr/include/bits/sigset.h /usr/include/bits/time.h \ - /usr/include/sys/sysmacros.h /usr/include/bits/pthreadtypes.h \ - /usr/include/alloca.h /usr/include/bits/stdlib.h /usr/include/syslog.h \ - /usr/include/sys/syslog.h \ - /usr/lib/gcc/i486-linux-gnu/4.4.3/include/stdarg.h \ - /usr/include/bits/syslog-path.h /usr/include/bits/syslog.h \ - ../include/freeradius-client.h /usr/include/stdint.h \ - /usr/include/bits/wchar.h /usr/include/stdio.h /usr/include/libio.h \ - /usr/include/_G_config.h /usr/include/wchar.h \ - /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h \ - /usr/include/bits/stdio.h /usr/include/bits/stdio2.h \ - /usr/include/xlocale.h /usr/include/netinet/in.h \ - /usr/include/sys/socket.h /usr/include/sys/uio.h /usr/include/bits/uio.h \ - /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ - /usr/include/asm/socket.h /usr/include/asm-generic/socket.h \ - /usr/include/asm/sockios.h /usr/include/asm-generic/sockios.h \ - /usr/include/bits/socket2.h /usr/include/bits/in.h \ - /usr/include/arpa/inet.h /usr/include/netdb.h /usr/include/rpc/netdb.h \ - /usr/include/bits/netdb.h - -/usr/include/stdlib.h: - -/usr/include/features.h: - -/usr/include/bits/predefs.h: - -/usr/include/sys/cdefs.h: - -/usr/include/bits/wordsize.h: - -/usr/include/gnu/stubs.h: - -/usr/include/gnu/stubs-32.h: - -/usr/lib/gcc/i486-linux-gnu/4.4.3/include/stddef.h: - -/usr/include/sys/types.h: - -/usr/include/bits/types.h: - -/usr/include/bits/typesizes.h: - -/usr/include/time.h: - -/usr/include/endian.h: - -/usr/include/bits/endian.h: - -/usr/include/bits/byteswap.h: - -/usr/include/sys/select.h: - -/usr/include/bits/select.h: - -/usr/include/bits/sigset.h: - -/usr/include/bits/time.h: - -/usr/include/sys/sysmacros.h: - -/usr/include/bits/pthreadtypes.h: - -/usr/include/alloca.h: - -/usr/include/bits/stdlib.h: - -/usr/include/syslog.h: - -/usr/include/sys/syslog.h: - -/usr/lib/gcc/i486-linux-gnu/4.4.3/include/stdarg.h: - -/usr/include/bits/syslog-path.h: - -/usr/include/bits/syslog.h: - -../include/freeradius-client.h: - -/usr/include/stdint.h: - -/usr/include/bits/wchar.h: - -/usr/include/stdio.h: - -/usr/include/libio.h: - -/usr/include/_G_config.h: - -/usr/include/wchar.h: - -/usr/include/bits/stdio_lim.h: - -/usr/include/bits/sys_errlist.h: - -/usr/include/bits/stdio.h: - -/usr/include/bits/stdio2.h: - -/usr/include/xlocale.h: - -/usr/include/netinet/in.h: - -/usr/include/sys/socket.h: - -/usr/include/sys/uio.h: - -/usr/include/bits/uio.h: - -/usr/include/bits/socket.h: - -/usr/include/bits/sockaddr.h: - -/usr/include/asm/socket.h: - -/usr/include/asm-generic/socket.h: - -/usr/include/asm/sockios.h: - -/usr/include/asm-generic/sockios.h: - -/usr/include/bits/socket2.h: - -/usr/include/bits/in.h: - -/usr/include/arpa/inet.h: - -/usr/include/netdb.h: - -/usr/include/rpc/netdb.h: - -/usr/include/bits/netdb.h: diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/src/.deps/radexample.Po b/openair3/PMIPv6/freeradius-client-1.1.6/src/.deps/radexample.Po deleted file mode 100644 index 41c9d5079e..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/src/.deps/radexample.Po +++ /dev/null @@ -1,261 +0,0 @@ -radexample.o: radexample.c ../config.h ../include/includes.h \ - /usr/include/sys/types.h /usr/include/features.h \ - /usr/include/bits/predefs.h /usr/include/sys/cdefs.h \ - /usr/include/bits/wordsize.h /usr/include/gnu/stubs.h \ - /usr/include/gnu/stubs-32.h /usr/include/bits/types.h \ - /usr/include/bits/typesizes.h /usr/include/time.h \ - /usr/lib/gcc/i486-linux-gnu/4.4.3/include/stddef.h /usr/include/endian.h \ - /usr/include/bits/endian.h /usr/include/bits/byteswap.h \ - /usr/include/sys/select.h /usr/include/bits/select.h \ - /usr/include/bits/sigset.h /usr/include/bits/time.h \ - /usr/include/sys/sysmacros.h /usr/include/bits/pthreadtypes.h \ - /usr/include/ctype.h /usr/include/xlocale.h /usr/include/stdio.h \ - /usr/include/libio.h /usr/include/_G_config.h /usr/include/wchar.h \ - /usr/lib/gcc/i486-linux-gnu/4.4.3/include/stdarg.h \ - /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h \ - /usr/include/bits/stdio.h /usr/include/bits/stdio2.h \ - /usr/include/errno.h /usr/include/bits/errno.h \ - /usr/include/linux/errno.h /usr/include/asm/errno.h \ - /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ - /usr/include/netdb.h /usr/include/netinet/in.h /usr/include/stdint.h \ - /usr/include/bits/wchar.h /usr/include/sys/socket.h \ - /usr/include/sys/uio.h /usr/include/bits/uio.h \ - /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ - /usr/include/asm/socket.h /usr/include/asm-generic/socket.h \ - /usr/include/asm/sockios.h /usr/include/asm-generic/sockios.h \ - /usr/include/bits/socket2.h /usr/include/bits/in.h \ - /usr/include/rpc/netdb.h /usr/include/bits/netdb.h /usr/include/syslog.h \ - /usr/include/sys/syslog.h /usr/include/bits/syslog-path.h \ - /usr/include/bits/syslog.h /usr/include/stdlib.h /usr/include/alloca.h \ - /usr/include/bits/stdlib.h /usr/include/string.h \ - /usr/include/bits/string.h /usr/include/bits/string2.h \ - /usr/include/bits/string3.h /usr/include/unistd.h \ - /usr/include/bits/posix_opt.h /usr/include/bits/confname.h \ - /usr/include/getopt.h /usr/include/bits/unistd.h /usr/include/fcntl.h \ - /usr/include/bits/fcntl.h /usr/include/bits/fcntl2.h \ - /usr/include/sys/fcntl.h /usr/include/sys/file.h /usr/include/sys/stat.h \ - /usr/include/bits/stat.h /usr/include/sys/utsname.h \ - /usr/include/bits/utsname.h /usr/include/sys/ioctl.h \ - /usr/include/bits/ioctls.h /usr/include/asm/ioctls.h \ - /usr/include/asm-generic/ioctls.h /usr/include/linux/ioctl.h \ - /usr/include/asm/ioctl.h /usr/include/asm-generic/ioctl.h \ - /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ - /usr/include/crypt.h /usr/include/termios.h /usr/include/bits/termios.h \ - /usr/include/pwd.h /usr/include/arpa/inet.h /usr/include/signal.h \ - /usr/include/bits/signum.h /usr/include/bits/siginfo.h \ - /usr/include/bits/sigaction.h /usr/include/bits/sigcontext.h \ - /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ - /usr/include/sys/signal.h /usr/include/sys/time.h \ - ../include/freeradius-client.h ../include/pathnames.h - -../config.h: - -../include/includes.h: - -/usr/include/sys/types.h: - -/usr/include/features.h: - -/usr/include/bits/predefs.h: - -/usr/include/sys/cdefs.h: - -/usr/include/bits/wordsize.h: - -/usr/include/gnu/stubs.h: - -/usr/include/gnu/stubs-32.h: - -/usr/include/bits/types.h: - -/usr/include/bits/typesizes.h: - -/usr/include/time.h: - -/usr/lib/gcc/i486-linux-gnu/4.4.3/include/stddef.h: - -/usr/include/endian.h: - -/usr/include/bits/endian.h: - -/usr/include/bits/byteswap.h: - -/usr/include/sys/select.h: - -/usr/include/bits/select.h: - -/usr/include/bits/sigset.h: - -/usr/include/bits/time.h: - -/usr/include/sys/sysmacros.h: - -/usr/include/bits/pthreadtypes.h: - -/usr/include/ctype.h: - -/usr/include/xlocale.h: - -/usr/include/stdio.h: - -/usr/include/libio.h: - -/usr/include/_G_config.h: - -/usr/include/wchar.h: - -/usr/lib/gcc/i486-linux-gnu/4.4.3/include/stdarg.h: - -/usr/include/bits/stdio_lim.h: - -/usr/include/bits/sys_errlist.h: - -/usr/include/bits/stdio.h: - -/usr/include/bits/stdio2.h: - -/usr/include/errno.h: - -/usr/include/bits/errno.h: - -/usr/include/linux/errno.h: - -/usr/include/asm/errno.h: - -/usr/include/asm-generic/errno.h: - -/usr/include/asm-generic/errno-base.h: - -/usr/include/netdb.h: - -/usr/include/netinet/in.h: - -/usr/include/stdint.h: - -/usr/include/bits/wchar.h: - -/usr/include/sys/socket.h: - -/usr/include/sys/uio.h: - -/usr/include/bits/uio.h: - -/usr/include/bits/socket.h: - -/usr/include/bits/sockaddr.h: - -/usr/include/asm/socket.h: - -/usr/include/asm-generic/socket.h: - -/usr/include/asm/sockios.h: - -/usr/include/asm-generic/sockios.h: - -/usr/include/bits/socket2.h: - -/usr/include/bits/in.h: - -/usr/include/rpc/netdb.h: - -/usr/include/bits/netdb.h: - -/usr/include/syslog.h: - -/usr/include/sys/syslog.h: - -/usr/include/bits/syslog-path.h: - -/usr/include/bits/syslog.h: - -/usr/include/stdlib.h: - -/usr/include/alloca.h: - -/usr/include/bits/stdlib.h: - -/usr/include/string.h: - -/usr/include/bits/string.h: - -/usr/include/bits/string2.h: - -/usr/include/bits/string3.h: - -/usr/include/unistd.h: - -/usr/include/bits/posix_opt.h: - -/usr/include/bits/confname.h: - -/usr/include/getopt.h: - -/usr/include/bits/unistd.h: - -/usr/include/fcntl.h: - -/usr/include/bits/fcntl.h: - -/usr/include/bits/fcntl2.h: - -/usr/include/sys/fcntl.h: - -/usr/include/sys/file.h: - -/usr/include/sys/stat.h: - -/usr/include/bits/stat.h: - -/usr/include/sys/utsname.h: - -/usr/include/bits/utsname.h: - -/usr/include/sys/ioctl.h: - -/usr/include/bits/ioctls.h: - -/usr/include/asm/ioctls.h: - -/usr/include/asm-generic/ioctls.h: - -/usr/include/linux/ioctl.h: - -/usr/include/asm/ioctl.h: - -/usr/include/asm-generic/ioctl.h: - -/usr/include/bits/ioctl-types.h: - -/usr/include/sys/ttydefaults.h: - -/usr/include/crypt.h: - -/usr/include/termios.h: - -/usr/include/bits/termios.h: - -/usr/include/pwd.h: - -/usr/include/arpa/inet.h: - -/usr/include/signal.h: - -/usr/include/bits/signum.h: - -/usr/include/bits/siginfo.h: - -/usr/include/bits/sigaction.h: - -/usr/include/bits/sigcontext.h: - -/usr/include/bits/sigstack.h: - -/usr/include/bits/sigthread.h: - -/usr/include/sys/signal.h: - -/usr/include/sys/time.h: - -../include/freeradius-client.h: - -../include/pathnames.h: diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/src/.deps/radius.Po b/openair3/PMIPv6/freeradius-client-1.1.6/src/.deps/radius.Po deleted file mode 100644 index 84399c26dd..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/src/.deps/radius.Po +++ /dev/null @@ -1,263 +0,0 @@ -radius.o: radius.c ../config.h ../include/includes.h \ - /usr/include/sys/types.h /usr/include/features.h \ - /usr/include/bits/predefs.h /usr/include/sys/cdefs.h \ - /usr/include/bits/wordsize.h /usr/include/gnu/stubs.h \ - /usr/include/gnu/stubs-32.h /usr/include/bits/types.h \ - /usr/include/bits/typesizes.h /usr/include/time.h \ - /usr/lib/gcc/i486-linux-gnu/4.4.3/include/stddef.h /usr/include/endian.h \ - /usr/include/bits/endian.h /usr/include/bits/byteswap.h \ - /usr/include/sys/select.h /usr/include/bits/select.h \ - /usr/include/bits/sigset.h /usr/include/bits/time.h \ - /usr/include/sys/sysmacros.h /usr/include/bits/pthreadtypes.h \ - /usr/include/ctype.h /usr/include/xlocale.h /usr/include/stdio.h \ - /usr/include/libio.h /usr/include/_G_config.h /usr/include/wchar.h \ - /usr/lib/gcc/i486-linux-gnu/4.4.3/include/stdarg.h \ - /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h \ - /usr/include/bits/stdio.h /usr/include/bits/stdio2.h \ - /usr/include/errno.h /usr/include/bits/errno.h \ - /usr/include/linux/errno.h /usr/include/asm/errno.h \ - /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ - /usr/include/netdb.h /usr/include/netinet/in.h /usr/include/stdint.h \ - /usr/include/bits/wchar.h /usr/include/sys/socket.h \ - /usr/include/sys/uio.h /usr/include/bits/uio.h \ - /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ - /usr/include/asm/socket.h /usr/include/asm-generic/socket.h \ - /usr/include/asm/sockios.h /usr/include/asm-generic/sockios.h \ - /usr/include/bits/socket2.h /usr/include/bits/in.h \ - /usr/include/rpc/netdb.h /usr/include/bits/netdb.h /usr/include/syslog.h \ - /usr/include/sys/syslog.h /usr/include/bits/syslog-path.h \ - /usr/include/bits/syslog.h /usr/include/stdlib.h /usr/include/alloca.h \ - /usr/include/bits/stdlib.h /usr/include/string.h \ - /usr/include/bits/string.h /usr/include/bits/string2.h \ - /usr/include/bits/string3.h /usr/include/unistd.h \ - /usr/include/bits/posix_opt.h /usr/include/bits/confname.h \ - /usr/include/getopt.h /usr/include/bits/unistd.h /usr/include/fcntl.h \ - /usr/include/bits/fcntl.h /usr/include/bits/fcntl2.h \ - /usr/include/sys/fcntl.h /usr/include/sys/file.h /usr/include/sys/stat.h \ - /usr/include/bits/stat.h /usr/include/sys/utsname.h \ - /usr/include/bits/utsname.h /usr/include/sys/ioctl.h \ - /usr/include/bits/ioctls.h /usr/include/asm/ioctls.h \ - /usr/include/asm-generic/ioctls.h /usr/include/linux/ioctl.h \ - /usr/include/asm/ioctl.h /usr/include/asm-generic/ioctl.h \ - /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ - /usr/include/crypt.h /usr/include/termios.h /usr/include/bits/termios.h \ - /usr/include/pwd.h /usr/include/arpa/inet.h /usr/include/signal.h \ - /usr/include/bits/signum.h /usr/include/bits/siginfo.h \ - /usr/include/bits/sigaction.h /usr/include/bits/sigcontext.h \ - /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ - /usr/include/sys/signal.h /usr/include/sys/time.h \ - ../include/freeradius-client.h ../include/messages.h radlogin.h - -../config.h: - -../include/includes.h: - -/usr/include/sys/types.h: - -/usr/include/features.h: - -/usr/include/bits/predefs.h: - -/usr/include/sys/cdefs.h: - -/usr/include/bits/wordsize.h: - -/usr/include/gnu/stubs.h: - -/usr/include/gnu/stubs-32.h: - -/usr/include/bits/types.h: - -/usr/include/bits/typesizes.h: - -/usr/include/time.h: - -/usr/lib/gcc/i486-linux-gnu/4.4.3/include/stddef.h: - -/usr/include/endian.h: - -/usr/include/bits/endian.h: - -/usr/include/bits/byteswap.h: - -/usr/include/sys/select.h: - -/usr/include/bits/select.h: - -/usr/include/bits/sigset.h: - -/usr/include/bits/time.h: - -/usr/include/sys/sysmacros.h: - -/usr/include/bits/pthreadtypes.h: - -/usr/include/ctype.h: - -/usr/include/xlocale.h: - -/usr/include/stdio.h: - -/usr/include/libio.h: - -/usr/include/_G_config.h: - -/usr/include/wchar.h: - -/usr/lib/gcc/i486-linux-gnu/4.4.3/include/stdarg.h: - -/usr/include/bits/stdio_lim.h: - -/usr/include/bits/sys_errlist.h: - -/usr/include/bits/stdio.h: - -/usr/include/bits/stdio2.h: - -/usr/include/errno.h: - -/usr/include/bits/errno.h: - -/usr/include/linux/errno.h: - -/usr/include/asm/errno.h: - -/usr/include/asm-generic/errno.h: - -/usr/include/asm-generic/errno-base.h: - -/usr/include/netdb.h: - -/usr/include/netinet/in.h: - -/usr/include/stdint.h: - -/usr/include/bits/wchar.h: - -/usr/include/sys/socket.h: - -/usr/include/sys/uio.h: - -/usr/include/bits/uio.h: - -/usr/include/bits/socket.h: - -/usr/include/bits/sockaddr.h: - -/usr/include/asm/socket.h: - -/usr/include/asm-generic/socket.h: - -/usr/include/asm/sockios.h: - -/usr/include/asm-generic/sockios.h: - -/usr/include/bits/socket2.h: - -/usr/include/bits/in.h: - -/usr/include/rpc/netdb.h: - -/usr/include/bits/netdb.h: - -/usr/include/syslog.h: - -/usr/include/sys/syslog.h: - -/usr/include/bits/syslog-path.h: - -/usr/include/bits/syslog.h: - -/usr/include/stdlib.h: - -/usr/include/alloca.h: - -/usr/include/bits/stdlib.h: - -/usr/include/string.h: - -/usr/include/bits/string.h: - -/usr/include/bits/string2.h: - -/usr/include/bits/string3.h: - -/usr/include/unistd.h: - -/usr/include/bits/posix_opt.h: - -/usr/include/bits/confname.h: - -/usr/include/getopt.h: - -/usr/include/bits/unistd.h: - -/usr/include/fcntl.h: - -/usr/include/bits/fcntl.h: - -/usr/include/bits/fcntl2.h: - -/usr/include/sys/fcntl.h: - -/usr/include/sys/file.h: - -/usr/include/sys/stat.h: - -/usr/include/bits/stat.h: - -/usr/include/sys/utsname.h: - -/usr/include/bits/utsname.h: - -/usr/include/sys/ioctl.h: - -/usr/include/bits/ioctls.h: - -/usr/include/asm/ioctls.h: - -/usr/include/asm-generic/ioctls.h: - -/usr/include/linux/ioctl.h: - -/usr/include/asm/ioctl.h: - -/usr/include/asm-generic/ioctl.h: - -/usr/include/bits/ioctl-types.h: - -/usr/include/sys/ttydefaults.h: - -/usr/include/crypt.h: - -/usr/include/termios.h: - -/usr/include/bits/termios.h: - -/usr/include/pwd.h: - -/usr/include/arpa/inet.h: - -/usr/include/signal.h: - -/usr/include/bits/signum.h: - -/usr/include/bits/siginfo.h: - -/usr/include/bits/sigaction.h: - -/usr/include/bits/sigcontext.h: - -/usr/include/bits/sigstack.h: - -/usr/include/bits/sigthread.h: - -/usr/include/sys/signal.h: - -/usr/include/sys/time.h: - -../include/freeradius-client.h: - -../include/messages.h: - -radlogin.h: diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/src/.deps/radiusclient.Po b/openair3/PMIPv6/freeradius-client-1.1.6/src/.deps/radiusclient.Po deleted file mode 100644 index 5b34f9421d..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/src/.deps/radiusclient.Po +++ /dev/null @@ -1,154 +0,0 @@ -radiusclient.o: radiusclient.c /usr/include/ctype.h \ - /usr/include/features.h /usr/include/bits/predefs.h \ - /usr/include/sys/cdefs.h /usr/include/bits/wordsize.h \ - /usr/include/gnu/stubs.h /usr/include/gnu/stubs-32.h \ - /usr/include/bits/types.h /usr/include/bits/typesizes.h \ - /usr/include/endian.h /usr/include/bits/endian.h \ - /usr/include/bits/byteswap.h /usr/include/xlocale.h /usr/include/stdio.h \ - /usr/lib/gcc/i486-linux-gnu/4.4.3/include/stddef.h /usr/include/libio.h \ - /usr/include/_G_config.h /usr/include/wchar.h \ - /usr/lib/gcc/i486-linux-gnu/4.4.3/include/stdarg.h \ - /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h \ - /usr/include/bits/stdio.h /usr/include/bits/stdio2.h \ - /usr/include/stdlib.h /usr/include/sys/types.h /usr/include/time.h \ - /usr/include/sys/select.h /usr/include/bits/select.h \ - /usr/include/bits/sigset.h /usr/include/bits/time.h \ - /usr/include/sys/sysmacros.h /usr/include/bits/pthreadtypes.h \ - /usr/include/alloca.h /usr/include/bits/stdlib.h /usr/include/string.h \ - /usr/include/bits/string.h /usr/include/bits/string2.h \ - /usr/include/bits/string3.h /usr/include/unistd.h \ - /usr/include/bits/posix_opt.h /usr/include/bits/confname.h \ - /usr/include/getopt.h /usr/include/bits/unistd.h \ - ../include/freeradius-client.h /usr/include/stdint.h \ - /usr/include/bits/wchar.h /usr/include/netinet/in.h \ - /usr/include/sys/socket.h /usr/include/sys/uio.h /usr/include/bits/uio.h \ - /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ - /usr/include/asm/socket.h /usr/include/asm-generic/socket.h \ - /usr/include/asm/sockios.h /usr/include/asm-generic/sockios.h \ - /usr/include/bits/socket2.h /usr/include/bits/in.h \ - /usr/include/arpa/inet.h /usr/include/netdb.h /usr/include/rpc/netdb.h \ - /usr/include/bits/netdb.h - -/usr/include/ctype.h: - -/usr/include/features.h: - -/usr/include/bits/predefs.h: - -/usr/include/sys/cdefs.h: - -/usr/include/bits/wordsize.h: - -/usr/include/gnu/stubs.h: - -/usr/include/gnu/stubs-32.h: - -/usr/include/bits/types.h: - -/usr/include/bits/typesizes.h: - -/usr/include/endian.h: - -/usr/include/bits/endian.h: - -/usr/include/bits/byteswap.h: - -/usr/include/xlocale.h: - -/usr/include/stdio.h: - -/usr/lib/gcc/i486-linux-gnu/4.4.3/include/stddef.h: - -/usr/include/libio.h: - -/usr/include/_G_config.h: - -/usr/include/wchar.h: - -/usr/lib/gcc/i486-linux-gnu/4.4.3/include/stdarg.h: - -/usr/include/bits/stdio_lim.h: - -/usr/include/bits/sys_errlist.h: - -/usr/include/bits/stdio.h: - -/usr/include/bits/stdio2.h: - -/usr/include/stdlib.h: - -/usr/include/sys/types.h: - -/usr/include/time.h: - -/usr/include/sys/select.h: - -/usr/include/bits/select.h: - -/usr/include/bits/sigset.h: - -/usr/include/bits/time.h: - -/usr/include/sys/sysmacros.h: - -/usr/include/bits/pthreadtypes.h: - -/usr/include/alloca.h: - -/usr/include/bits/stdlib.h: - -/usr/include/string.h: - -/usr/include/bits/string.h: - -/usr/include/bits/string2.h: - -/usr/include/bits/string3.h: - -/usr/include/unistd.h: - -/usr/include/bits/posix_opt.h: - -/usr/include/bits/confname.h: - -/usr/include/getopt.h: - -/usr/include/bits/unistd.h: - -../include/freeradius-client.h: - -/usr/include/stdint.h: - -/usr/include/bits/wchar.h: - -/usr/include/netinet/in.h: - -/usr/include/sys/socket.h: - -/usr/include/sys/uio.h: - -/usr/include/bits/uio.h: - -/usr/include/bits/socket.h: - -/usr/include/bits/sockaddr.h: - -/usr/include/asm/socket.h: - -/usr/include/asm-generic/socket.h: - -/usr/include/asm/sockios.h: - -/usr/include/asm-generic/sockios.h: - -/usr/include/bits/socket2.h: - -/usr/include/bits/in.h: - -/usr/include/arpa/inet.h: - -/usr/include/netdb.h: - -/usr/include/rpc/netdb.h: - -/usr/include/bits/netdb.h: diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/src/.deps/radlogin.Po b/openair3/PMIPv6/freeradius-client-1.1.6/src/.deps/radlogin.Po deleted file mode 100644 index 1ba42d4591..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/src/.deps/radlogin.Po +++ /dev/null @@ -1,266 +0,0 @@ -radlogin.o: radlogin.c ../config.h ../include/includes.h \ - /usr/include/sys/types.h /usr/include/features.h \ - /usr/include/bits/predefs.h /usr/include/sys/cdefs.h \ - /usr/include/bits/wordsize.h /usr/include/gnu/stubs.h \ - /usr/include/gnu/stubs-32.h /usr/include/bits/types.h \ - /usr/include/bits/typesizes.h /usr/include/time.h \ - /usr/lib/gcc/i486-linux-gnu/4.4.3/include/stddef.h /usr/include/endian.h \ - /usr/include/bits/endian.h /usr/include/bits/byteswap.h \ - /usr/include/sys/select.h /usr/include/bits/select.h \ - /usr/include/bits/sigset.h /usr/include/bits/time.h \ - /usr/include/sys/sysmacros.h /usr/include/bits/pthreadtypes.h \ - /usr/include/ctype.h /usr/include/xlocale.h /usr/include/stdio.h \ - /usr/include/libio.h /usr/include/_G_config.h /usr/include/wchar.h \ - /usr/lib/gcc/i486-linux-gnu/4.4.3/include/stdarg.h \ - /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h \ - /usr/include/bits/stdio.h /usr/include/bits/stdio2.h \ - /usr/include/errno.h /usr/include/bits/errno.h \ - /usr/include/linux/errno.h /usr/include/asm/errno.h \ - /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ - /usr/include/netdb.h /usr/include/netinet/in.h /usr/include/stdint.h \ - /usr/include/bits/wchar.h /usr/include/sys/socket.h \ - /usr/include/sys/uio.h /usr/include/bits/uio.h \ - /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ - /usr/include/asm/socket.h /usr/include/asm-generic/socket.h \ - /usr/include/asm/sockios.h /usr/include/asm-generic/sockios.h \ - /usr/include/bits/socket2.h /usr/include/bits/in.h \ - /usr/include/rpc/netdb.h /usr/include/bits/netdb.h /usr/include/syslog.h \ - /usr/include/sys/syslog.h /usr/include/bits/syslog-path.h \ - /usr/include/bits/syslog.h /usr/include/stdlib.h /usr/include/alloca.h \ - /usr/include/bits/stdlib.h /usr/include/string.h \ - /usr/include/bits/string.h /usr/include/bits/string2.h \ - /usr/include/bits/string3.h /usr/include/unistd.h \ - /usr/include/bits/posix_opt.h /usr/include/bits/confname.h \ - /usr/include/getopt.h /usr/include/bits/unistd.h /usr/include/fcntl.h \ - /usr/include/bits/fcntl.h /usr/include/bits/fcntl2.h \ - /usr/include/sys/fcntl.h /usr/include/sys/file.h /usr/include/sys/stat.h \ - /usr/include/bits/stat.h /usr/include/sys/utsname.h \ - /usr/include/bits/utsname.h /usr/include/sys/ioctl.h \ - /usr/include/bits/ioctls.h /usr/include/asm/ioctls.h \ - /usr/include/asm-generic/ioctls.h /usr/include/linux/ioctl.h \ - /usr/include/asm/ioctl.h /usr/include/asm-generic/ioctl.h \ - /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ - /usr/include/crypt.h /usr/include/termios.h /usr/include/bits/termios.h \ - /usr/include/pwd.h /usr/include/arpa/inet.h /usr/include/signal.h \ - /usr/include/bits/signum.h /usr/include/bits/siginfo.h \ - /usr/include/bits/sigaction.h /usr/include/bits/sigcontext.h \ - /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ - /usr/include/sys/signal.h /usr/include/sys/time.h \ - ../include/freeradius-client.h ../include/messages.h \ - ../include/pathnames.h radlogin.h - -../config.h: - -../include/includes.h: - -/usr/include/sys/types.h: - -/usr/include/features.h: - -/usr/include/bits/predefs.h: - -/usr/include/sys/cdefs.h: - -/usr/include/bits/wordsize.h: - -/usr/include/gnu/stubs.h: - -/usr/include/gnu/stubs-32.h: - -/usr/include/bits/types.h: - -/usr/include/bits/typesizes.h: - -/usr/include/time.h: - -/usr/lib/gcc/i486-linux-gnu/4.4.3/include/stddef.h: - -/usr/include/endian.h: - -/usr/include/bits/endian.h: - -/usr/include/bits/byteswap.h: - -/usr/include/sys/select.h: - -/usr/include/bits/select.h: - -/usr/include/bits/sigset.h: - -/usr/include/bits/time.h: - -/usr/include/sys/sysmacros.h: - -/usr/include/bits/pthreadtypes.h: - -/usr/include/ctype.h: - -/usr/include/xlocale.h: - -/usr/include/stdio.h: - -/usr/include/libio.h: - -/usr/include/_G_config.h: - -/usr/include/wchar.h: - -/usr/lib/gcc/i486-linux-gnu/4.4.3/include/stdarg.h: - -/usr/include/bits/stdio_lim.h: - -/usr/include/bits/sys_errlist.h: - -/usr/include/bits/stdio.h: - -/usr/include/bits/stdio2.h: - -/usr/include/errno.h: - -/usr/include/bits/errno.h: - -/usr/include/linux/errno.h: - -/usr/include/asm/errno.h: - -/usr/include/asm-generic/errno.h: - -/usr/include/asm-generic/errno-base.h: - -/usr/include/netdb.h: - -/usr/include/netinet/in.h: - -/usr/include/stdint.h: - -/usr/include/bits/wchar.h: - -/usr/include/sys/socket.h: - -/usr/include/sys/uio.h: - -/usr/include/bits/uio.h: - -/usr/include/bits/socket.h: - -/usr/include/bits/sockaddr.h: - -/usr/include/asm/socket.h: - -/usr/include/asm-generic/socket.h: - -/usr/include/asm/sockios.h: - -/usr/include/asm-generic/sockios.h: - -/usr/include/bits/socket2.h: - -/usr/include/bits/in.h: - -/usr/include/rpc/netdb.h: - -/usr/include/bits/netdb.h: - -/usr/include/syslog.h: - -/usr/include/sys/syslog.h: - -/usr/include/bits/syslog-path.h: - -/usr/include/bits/syslog.h: - -/usr/include/stdlib.h: - -/usr/include/alloca.h: - -/usr/include/bits/stdlib.h: - -/usr/include/string.h: - -/usr/include/bits/string.h: - -/usr/include/bits/string2.h: - -/usr/include/bits/string3.h: - -/usr/include/unistd.h: - -/usr/include/bits/posix_opt.h: - -/usr/include/bits/confname.h: - -/usr/include/getopt.h: - -/usr/include/bits/unistd.h: - -/usr/include/fcntl.h: - -/usr/include/bits/fcntl.h: - -/usr/include/bits/fcntl2.h: - -/usr/include/sys/fcntl.h: - -/usr/include/sys/file.h: - -/usr/include/sys/stat.h: - -/usr/include/bits/stat.h: - -/usr/include/sys/utsname.h: - -/usr/include/bits/utsname.h: - -/usr/include/sys/ioctl.h: - -/usr/include/bits/ioctls.h: - -/usr/include/asm/ioctls.h: - -/usr/include/asm-generic/ioctls.h: - -/usr/include/linux/ioctl.h: - -/usr/include/asm/ioctl.h: - -/usr/include/asm-generic/ioctl.h: - -/usr/include/bits/ioctl-types.h: - -/usr/include/sys/ttydefaults.h: - -/usr/include/crypt.h: - -/usr/include/termios.h: - -/usr/include/bits/termios.h: - -/usr/include/pwd.h: - -/usr/include/arpa/inet.h: - -/usr/include/signal.h: - -/usr/include/bits/signum.h: - -/usr/include/bits/siginfo.h: - -/usr/include/bits/sigaction.h: - -/usr/include/bits/sigcontext.h: - -/usr/include/bits/sigstack.h: - -/usr/include/bits/sigthread.h: - -/usr/include/sys/signal.h: - -/usr/include/sys/time.h: - -../include/freeradius-client.h: - -../include/messages.h: - -../include/pathnames.h: - -radlogin.h: diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/src/.deps/radstatus.Po b/openair3/PMIPv6/freeradius-client-1.1.6/src/.deps/radstatus.Po deleted file mode 100644 index 66c81e39da..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/src/.deps/radstatus.Po +++ /dev/null @@ -1,264 +0,0 @@ -radstatus.o: radstatus.c ../config.h ../include/includes.h \ - /usr/include/sys/types.h /usr/include/features.h \ - /usr/include/bits/predefs.h /usr/include/sys/cdefs.h \ - /usr/include/bits/wordsize.h /usr/include/gnu/stubs.h \ - /usr/include/gnu/stubs-32.h /usr/include/bits/types.h \ - /usr/include/bits/typesizes.h /usr/include/time.h \ - /usr/lib/gcc/i486-linux-gnu/4.4.3/include/stddef.h /usr/include/endian.h \ - /usr/include/bits/endian.h /usr/include/bits/byteswap.h \ - /usr/include/sys/select.h /usr/include/bits/select.h \ - /usr/include/bits/sigset.h /usr/include/bits/time.h \ - /usr/include/sys/sysmacros.h /usr/include/bits/pthreadtypes.h \ - /usr/include/ctype.h /usr/include/xlocale.h /usr/include/stdio.h \ - /usr/include/libio.h /usr/include/_G_config.h /usr/include/wchar.h \ - /usr/lib/gcc/i486-linux-gnu/4.4.3/include/stdarg.h \ - /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h \ - /usr/include/bits/stdio.h /usr/include/bits/stdio2.h \ - /usr/include/errno.h /usr/include/bits/errno.h \ - /usr/include/linux/errno.h /usr/include/asm/errno.h \ - /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ - /usr/include/netdb.h /usr/include/netinet/in.h /usr/include/stdint.h \ - /usr/include/bits/wchar.h /usr/include/sys/socket.h \ - /usr/include/sys/uio.h /usr/include/bits/uio.h \ - /usr/include/bits/socket.h /usr/include/bits/sockaddr.h \ - /usr/include/asm/socket.h /usr/include/asm-generic/socket.h \ - /usr/include/asm/sockios.h /usr/include/asm-generic/sockios.h \ - /usr/include/bits/socket2.h /usr/include/bits/in.h \ - /usr/include/rpc/netdb.h /usr/include/bits/netdb.h /usr/include/syslog.h \ - /usr/include/sys/syslog.h /usr/include/bits/syslog-path.h \ - /usr/include/bits/syslog.h /usr/include/stdlib.h /usr/include/alloca.h \ - /usr/include/bits/stdlib.h /usr/include/string.h \ - /usr/include/bits/string.h /usr/include/bits/string2.h \ - /usr/include/bits/string3.h /usr/include/unistd.h \ - /usr/include/bits/posix_opt.h /usr/include/bits/confname.h \ - /usr/include/getopt.h /usr/include/bits/unistd.h /usr/include/fcntl.h \ - /usr/include/bits/fcntl.h /usr/include/bits/fcntl2.h \ - /usr/include/sys/fcntl.h /usr/include/sys/file.h /usr/include/sys/stat.h \ - /usr/include/bits/stat.h /usr/include/sys/utsname.h \ - /usr/include/bits/utsname.h /usr/include/sys/ioctl.h \ - /usr/include/bits/ioctls.h /usr/include/asm/ioctls.h \ - /usr/include/asm-generic/ioctls.h /usr/include/linux/ioctl.h \ - /usr/include/asm/ioctl.h /usr/include/asm-generic/ioctl.h \ - /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \ - /usr/include/crypt.h /usr/include/termios.h /usr/include/bits/termios.h \ - /usr/include/pwd.h /usr/include/arpa/inet.h /usr/include/signal.h \ - /usr/include/bits/signum.h /usr/include/bits/siginfo.h \ - /usr/include/bits/sigaction.h /usr/include/bits/sigcontext.h \ - /usr/include/bits/sigstack.h /usr/include/bits/sigthread.h \ - /usr/include/sys/signal.h /usr/include/sys/time.h \ - ../include/freeradius-client.h ../include/pathnames.h \ - ../include/messages.h - -../config.h: - -../include/includes.h: - -/usr/include/sys/types.h: - -/usr/include/features.h: - -/usr/include/bits/predefs.h: - -/usr/include/sys/cdefs.h: - -/usr/include/bits/wordsize.h: - -/usr/include/gnu/stubs.h: - -/usr/include/gnu/stubs-32.h: - -/usr/include/bits/types.h: - -/usr/include/bits/typesizes.h: - -/usr/include/time.h: - -/usr/lib/gcc/i486-linux-gnu/4.4.3/include/stddef.h: - -/usr/include/endian.h: - -/usr/include/bits/endian.h: - -/usr/include/bits/byteswap.h: - -/usr/include/sys/select.h: - -/usr/include/bits/select.h: - -/usr/include/bits/sigset.h: - -/usr/include/bits/time.h: - -/usr/include/sys/sysmacros.h: - -/usr/include/bits/pthreadtypes.h: - -/usr/include/ctype.h: - -/usr/include/xlocale.h: - -/usr/include/stdio.h: - -/usr/include/libio.h: - -/usr/include/_G_config.h: - -/usr/include/wchar.h: - -/usr/lib/gcc/i486-linux-gnu/4.4.3/include/stdarg.h: - -/usr/include/bits/stdio_lim.h: - -/usr/include/bits/sys_errlist.h: - -/usr/include/bits/stdio.h: - -/usr/include/bits/stdio2.h: - -/usr/include/errno.h: - -/usr/include/bits/errno.h: - -/usr/include/linux/errno.h: - -/usr/include/asm/errno.h: - -/usr/include/asm-generic/errno.h: - -/usr/include/asm-generic/errno-base.h: - -/usr/include/netdb.h: - -/usr/include/netinet/in.h: - -/usr/include/stdint.h: - -/usr/include/bits/wchar.h: - -/usr/include/sys/socket.h: - -/usr/include/sys/uio.h: - -/usr/include/bits/uio.h: - -/usr/include/bits/socket.h: - -/usr/include/bits/sockaddr.h: - -/usr/include/asm/socket.h: - -/usr/include/asm-generic/socket.h: - -/usr/include/asm/sockios.h: - -/usr/include/asm-generic/sockios.h: - -/usr/include/bits/socket2.h: - -/usr/include/bits/in.h: - -/usr/include/rpc/netdb.h: - -/usr/include/bits/netdb.h: - -/usr/include/syslog.h: - -/usr/include/sys/syslog.h: - -/usr/include/bits/syslog-path.h: - -/usr/include/bits/syslog.h: - -/usr/include/stdlib.h: - -/usr/include/alloca.h: - -/usr/include/bits/stdlib.h: - -/usr/include/string.h: - -/usr/include/bits/string.h: - -/usr/include/bits/string2.h: - -/usr/include/bits/string3.h: - -/usr/include/unistd.h: - -/usr/include/bits/posix_opt.h: - -/usr/include/bits/confname.h: - -/usr/include/getopt.h: - -/usr/include/bits/unistd.h: - -/usr/include/fcntl.h: - -/usr/include/bits/fcntl.h: - -/usr/include/bits/fcntl2.h: - -/usr/include/sys/fcntl.h: - -/usr/include/sys/file.h: - -/usr/include/sys/stat.h: - -/usr/include/bits/stat.h: - -/usr/include/sys/utsname.h: - -/usr/include/bits/utsname.h: - -/usr/include/sys/ioctl.h: - -/usr/include/bits/ioctls.h: - -/usr/include/asm/ioctls.h: - -/usr/include/asm-generic/ioctls.h: - -/usr/include/linux/ioctl.h: - -/usr/include/asm/ioctl.h: - -/usr/include/asm-generic/ioctl.h: - -/usr/include/bits/ioctl-types.h: - -/usr/include/sys/ttydefaults.h: - -/usr/include/crypt.h: - -/usr/include/termios.h: - -/usr/include/bits/termios.h: - -/usr/include/pwd.h: - -/usr/include/arpa/inet.h: - -/usr/include/signal.h: - -/usr/include/bits/signum.h: - -/usr/include/bits/siginfo.h: - -/usr/include/bits/sigaction.h: - -/usr/include/bits/sigcontext.h: - -/usr/include/bits/sigstack.h: - -/usr/include/bits/sigthread.h: - -/usr/include/sys/signal.h: - -/usr/include/sys/time.h: - -../include/freeradius-client.h: - -../include/pathnames.h: - -../include/messages.h: diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/src/.libs/radacct b/openair3/PMIPv6/freeradius-client-1.1.6/src/.libs/radacct deleted file mode 100644 index 5bdf7ab307..0000000000 Binary files a/openair3/PMIPv6/freeradius-client-1.1.6/src/.libs/radacct and /dev/null differ diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/src/.libs/radembedded b/openair3/PMIPv6/freeradius-client-1.1.6/src/.libs/radembedded deleted file mode 100644 index 915bde5d3a..0000000000 Binary files a/openair3/PMIPv6/freeradius-client-1.1.6/src/.libs/radembedded and /dev/null differ diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/src/.libs/radexample b/openair3/PMIPv6/freeradius-client-1.1.6/src/.libs/radexample deleted file mode 100644 index 37e9999587..0000000000 Binary files a/openair3/PMIPv6/freeradius-client-1.1.6/src/.libs/radexample and /dev/null differ diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/src/.libs/radiusclient b/openair3/PMIPv6/freeradius-client-1.1.6/src/.libs/radiusclient deleted file mode 100644 index 0ac8da9a33..0000000000 Binary files a/openair3/PMIPv6/freeradius-client-1.1.6/src/.libs/radiusclient and /dev/null differ diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/src/.libs/radlogin b/openair3/PMIPv6/freeradius-client-1.1.6/src/.libs/radlogin deleted file mode 100644 index c7463ae381..0000000000 Binary files a/openair3/PMIPv6/freeradius-client-1.1.6/src/.libs/radlogin and /dev/null differ diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/src/.libs/radstatus b/openair3/PMIPv6/freeradius-client-1.1.6/src/.libs/radstatus deleted file mode 100644 index ae4e88f2d1..0000000000 Binary files a/openair3/PMIPv6/freeradius-client-1.1.6/src/.libs/radstatus and /dev/null differ diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/src/Makefile b/openair3/PMIPv6/freeradius-client-1.1.6/src/Makefile deleted file mode 100644 index 64086efbbf..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/src/Makefile +++ /dev/null @@ -1,587 +0,0 @@ -# Makefile.in generated by automake 1.11.1 from Makefile.am. -# src/Makefile. Generated from Makefile.in by configure. - -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, -# Inc. -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - - - -# -# $Id: Makefile.am,v 1.7 2007/03/01 17:50:38 cparker Exp $ -# -# Copyright (C) 1995,1997,1998 Lars Fenneberg -# -# See the file COPYRIGHT for the respective terms and conditions. -# - - - -pkgdatadir = $(datadir)/radiusclient -pkgincludedir = $(includedir)/radiusclient -pkglibdir = $(libdir)/radiusclient -pkglibexecdir = $(libexecdir)/radiusclient -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = i686-pc-linux-gnu -host_triplet = i686-pc-linux-gnu -target_triplet = i686-pc-linux-gnu -sbin_PROGRAMS = radlogin$(EXEEXT) radstatus$(EXEEXT) radacct$(EXEEXT) \ - radexample$(EXEEXT) radiusclient$(EXEEXT) radembedded$(EXEEXT) -subdir = src -DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \ - $(srcdir)/Makefile.in -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/configure.in -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs -CONFIG_HEADER = $(top_builddir)/config.h -CONFIG_CLEAN_FILES = -CONFIG_CLEAN_VPATH_FILES = -am__installdirs = "$(DESTDIR)$(sbindir)" -PROGRAMS = $(sbin_PROGRAMS) -am_radacct_OBJECTS = radacct.$(OBJEXT) -radacct_OBJECTS = $(am_radacct_OBJECTS) -radacct_LDADD = $(LDADD) -radacct_DEPENDENCIES = ../lib/libfreeradius-client.la -am_radembedded_OBJECTS = radembedded.$(OBJEXT) -radembedded_OBJECTS = $(am_radembedded_OBJECTS) -radembedded_LDADD = $(LDADD) -radembedded_DEPENDENCIES = ../lib/libfreeradius-client.la -am_radexample_OBJECTS = radexample.$(OBJEXT) -radexample_OBJECTS = $(am_radexample_OBJECTS) -radexample_LDADD = $(LDADD) -radexample_DEPENDENCIES = ../lib/libfreeradius-client.la -am_radiusclient_OBJECTS = radiusclient.$(OBJEXT) -radiusclient_OBJECTS = $(am_radiusclient_OBJECTS) -radiusclient_LDADD = $(LDADD) -radiusclient_DEPENDENCIES = ../lib/libfreeradius-client.la -am_radlogin_OBJECTS = radlogin.$(OBJEXT) radius.$(OBJEXT) \ - local.$(OBJEXT) -radlogin_OBJECTS = $(am_radlogin_OBJECTS) -radlogin_LDADD = $(LDADD) -radlogin_DEPENDENCIES = ../lib/libfreeradius-client.la -am_radstatus_OBJECTS = radstatus.$(OBJEXT) -radstatus_OBJECTS = $(am_radstatus_OBJECTS) -radstatus_LDADD = $(LDADD) -radstatus_DEPENDENCIES = ../lib/libfreeradius-client.la -DEFAULT_INCLUDES = -I. -I$(top_builddir) -depcomp = $(SHELL) $(top_srcdir)/depcomp -am__depfiles_maybe = depfiles -am__mv = mv -f -COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ - $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ - --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ - $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -CCLD = $(CC) -LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ - --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ - $(LDFLAGS) -o $@ -SOURCES = $(radacct_SOURCES) $(radembedded_SOURCES) \ - $(radexample_SOURCES) $(radiusclient_SOURCES) \ - $(radlogin_SOURCES) $(radstatus_SOURCES) -DIST_SOURCES = $(radacct_SOURCES) $(radembedded_SOURCES) \ - $(radexample_SOURCES) $(radiusclient_SOURCES) \ - $(radlogin_SOURCES) $(radstatus_SOURCES) -HEADERS = $(noinst_HEADERS) -ETAGS = etags -CTAGS = ctags -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = ${SHELL} /usr/local/src/freeradius-client-1.1.6/missing --run aclocal-1.11 -ALLOCA = -AMTAR = ${SHELL} /usr/local/src/freeradius-client-1.1.6/missing --run tar -AR = /usr/bin/ar -AUTOCONF = ${SHELL} /usr/local/src/freeradius-client-1.1.6/missing --run autoconf -AUTOHEADER = ${SHELL} /usr/local/src/freeradius-client-1.1.6/missing --run autoheader -AUTOMAKE = ${SHELL} /usr/local/src/freeradius-client-1.1.6/missing --run automake-1.11 -AWK = gawk -CC = gcc -CCDEPMODE = depmode=gcc3 -CFLAGS = -g -O2 -CPP = gcc -E -CPPFLAGS = -CYGPATH_W = echo -DEFS = -DHAVE_CONFIG_H -DRC_CONFIG_FILE=\"${pkgsysconfdir}/radiusclient.conf\" \ - -DRC_SECURE_PATH=\"/bin:/usr/bin:/usr/local/bin\" - -DEPDIR = .deps -DSYMUTIL = -DUMPBIN = -ECHO_C = -ECHO_N = -n -ECHO_T = -EGREP = /bin/grep -E -EXEEXT = -FGREP = /bin/grep -F -GREP = /bin/grep -INSTALL = /usr/bin/install -c -INSTALL_DATA = ${INSTALL} -m 644 -INSTALL_PROGRAM = ${INSTALL} -INSTALL_SCRIPT = ${INSTALL} -INSTALL_STRIP_PROGRAM = $(install_sh) -c -s -LD = /usr/bin/ld -LDFLAGS = -LIBOBJS = -LIBS = -lcrypt -lnsl -LIBTOOL = $(SHELL) $(top_builddir)/libtool -LIBVERSION = 2:0:0 -LIPO = -LN_S = ln -s -LTLIBOBJS = -MAINT = # -MAKEINFO = ${SHELL} /usr/local/src/freeradius-client-1.1.6/missing --run makeinfo -MKDIR_P = /bin/mkdir -p -NM = /usr/bin/nm -B -NMEDIT = -OBJDUMP = objdump -OBJEXT = o -OTOOL = -OTOOL64 = -PACKAGE = radiusclient -PACKAGE_BUGREPORT = -PACKAGE_NAME = -PACKAGE_STRING = -PACKAGE_TARNAME = -PACKAGE_URL = -PACKAGE_VERSION = -PATH_SEPARATOR = : -RANLIB = ranlib -RC_LOG_FACILITY = LOG_DAEMON -RC_SECURE_PATH = /bin:/usr/bin:/usr/local/bin -SED = /bin/sed -SET_MAKE = -SHELL = /bin/bash -STRIP = strip -VERSION = 1.1.6 -abs_builddir = /usr/local/src/freeradius-client-1.1.6/src -abs_srcdir = /usr/local/src/freeradius-client-1.1.6/src -abs_top_builddir = /usr/local/src/freeradius-client-1.1.6 -abs_top_srcdir = /usr/local/src/freeradius-client-1.1.6 -ac_ct_CC = gcc -ac_ct_DUMPBIN = -am__include = include -am__leading_dot = . -am__quote = -am__tar = ${AMTAR} chof - "$$tardir" -am__untar = ${AMTAR} xf - -bindir = ${exec_prefix}/bin -build = i686-pc-linux-gnu -build_alias = -build_cpu = i686 -build_os = linux-gnu -build_vendor = pc -builddir = . -datadir = ${datarootdir} -datarootdir = ${prefix}/share -docdir = ${datarootdir}/doc/${PACKAGE} -dvidir = ${docdir} -exec_prefix = ${prefix} -host = i686-pc-linux-gnu -host_alias = -host_cpu = i686 -host_os = linux-gnu -host_vendor = pc -htmldir = ${docdir} -includedir = ${prefix}/include -infodir = ${datarootdir}/info -install_sh = ${SHELL} /usr/local/src/freeradius-client-1.1.6/install-sh -libdir = ${exec_prefix}/lib -libexecdir = ${exec_prefix}/libexec -localedir = ${datarootdir}/locale -localstatedir = ${prefix}/var -lt_ECHO = echo -mandir = ${datarootdir}/man -mkdir_p = /bin/mkdir -p -oldincludedir = /usr/include -pdfdir = ${docdir} -pkgsysconfdir = ${prefix}/etc/radiusclient -prefix = /usr/local -program_transform_name = s,x,x, -psdir = ${docdir} -sbindir = ${exec_prefix}/sbin -sharedstatedir = ${prefix}/com -srcdir = . -sysconfdir = ${prefix}/etc -target = i686-pc-linux-gnu -target_alias = -target_cpu = i686 -target_os = linux-gnu -target_vendor = pc -top_build_prefix = ../ -top_builddir = .. -top_srcdir = .. -AUTOMAKE_OPTIONS = foreign -INCLUDES = -I$(srcdir) -I$(top_srcdir)/include -I$(top_builddir) -LDADD = ../lib/libfreeradius-client.la -CLEANFILES = *~ -noinst_HEADERS = radlogin.h -radlogin_SOURCES = radlogin.c radius.c local.c -radacct_SOURCES = radacct.c -radstatus_SOURCES = radstatus.c -radexample_SOURCES = radexample.c -radiusclient_SOURCES = radiusclient.c -radembedded_SOURCES = radembedded.c -all: all-am - -.SUFFIXES: -.SUFFIXES: .c .lo .o .obj -$(srcdir)/Makefile.in: # $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ - && { if test -f $@; then exit 0; else break; fi; }; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --foreign src/Makefile -.PRECIOUS: Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: # $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): # $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(am__aclocal_m4_deps): -install-sbinPROGRAMS: $(sbin_PROGRAMS) - @$(NORMAL_INSTALL) - test -z "$(sbindir)" || $(MKDIR_P) "$(DESTDIR)$(sbindir)" - @list='$(sbin_PROGRAMS)'; test -n "$(sbindir)" || list=; \ - for p in $$list; do echo "$$p $$p"; done | \ - sed 's/$(EXEEXT)$$//' | \ - while read p p1; do if test -f $$p || test -f $$p1; \ - then echo "$$p"; echo "$$p"; else :; fi; \ - done | \ - sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ - -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ - sed 'N;N;N;s,\n, ,g' | \ - $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ - { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ - if ($$2 == $$4) files[d] = files[d] " " $$1; \ - else { print "f", $$3 "/" $$4, $$1; } } \ - END { for (d in files) print "f", d, files[d] }' | \ - while read type dir files; do \ - if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ - test -z "$$files" || { \ - echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(sbindir)$$dir'"; \ - $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(sbindir)$$dir" || exit $$?; \ - } \ - ; done - -uninstall-sbinPROGRAMS: - @$(NORMAL_UNINSTALL) - @list='$(sbin_PROGRAMS)'; test -n "$(sbindir)" || list=; \ - files=`for p in $$list; do echo "$$p"; done | \ - sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ - -e 's/$$/$(EXEEXT)/' `; \ - test -n "$$list" || exit 0; \ - echo " ( cd '$(DESTDIR)$(sbindir)' && rm -f" $$files ")"; \ - cd "$(DESTDIR)$(sbindir)" && rm -f $$files - -clean-sbinPROGRAMS: - @list='$(sbin_PROGRAMS)'; test -n "$$list" || exit 0; \ - echo " rm -f" $$list; \ - rm -f $$list || exit $$?; \ - test -n "$(EXEEXT)" || exit 0; \ - list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ - echo " rm -f" $$list; \ - rm -f $$list -radacct$(EXEEXT): $(radacct_OBJECTS) $(radacct_DEPENDENCIES) - @rm -f radacct$(EXEEXT) - $(LINK) $(radacct_OBJECTS) $(radacct_LDADD) $(LIBS) -radembedded$(EXEEXT): $(radembedded_OBJECTS) $(radembedded_DEPENDENCIES) - @rm -f radembedded$(EXEEXT) - $(LINK) $(radembedded_OBJECTS) $(radembedded_LDADD) $(LIBS) -radexample$(EXEEXT): $(radexample_OBJECTS) $(radexample_DEPENDENCIES) - @rm -f radexample$(EXEEXT) - $(LINK) $(radexample_OBJECTS) $(radexample_LDADD) $(LIBS) -radiusclient$(EXEEXT): $(radiusclient_OBJECTS) $(radiusclient_DEPENDENCIES) - @rm -f radiusclient$(EXEEXT) - $(LINK) $(radiusclient_OBJECTS) $(radiusclient_LDADD) $(LIBS) -radlogin$(EXEEXT): $(radlogin_OBJECTS) $(radlogin_DEPENDENCIES) - @rm -f radlogin$(EXEEXT) - $(LINK) $(radlogin_OBJECTS) $(radlogin_LDADD) $(LIBS) -radstatus$(EXEEXT): $(radstatus_OBJECTS) $(radstatus_DEPENDENCIES) - @rm -f radstatus$(EXEEXT) - $(LINK) $(radstatus_OBJECTS) $(radstatus_LDADD) $(LIBS) - -mostlyclean-compile: - -rm -f *.$(OBJEXT) - -distclean-compile: - -rm -f *.tab.c - -include ./$(DEPDIR)/local.Po -include ./$(DEPDIR)/radacct.Po -include ./$(DEPDIR)/radembedded.Po -include ./$(DEPDIR)/radexample.Po -include ./$(DEPDIR)/radius.Po -include ./$(DEPDIR)/radiusclient.Po -include ./$(DEPDIR)/radlogin.Po -include ./$(DEPDIR)/radstatus.Po - -.c.o: - $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< - $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po -# source='$<' object='$@' libtool=no \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(COMPILE) -c $< - -.c.obj: - $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` - $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po -# source='$<' object='$@' libtool=no \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(COMPILE) -c `$(CYGPATH_W) '$<'` - -.c.lo: - $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< - $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo -# source='$<' object='$@' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(LTCOMPILE) -c -o $@ $< - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs - -ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - mkid -fID $$unique -tags: TAGS - -TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - set x; \ - here=`pwd`; \ - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - shift; \ - if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ - test -n "$$unique" || unique=$$empty_fix; \ - if test $$# -gt 0; then \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - "$$@" $$unique; \ - else \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$unique; \ - fi; \ - fi -ctags: CTAGS -CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - test -z "$(CTAGS_ARGS)$$unique" \ - || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$unique - -GTAGS: - here=`$(am__cd) $(top_builddir) && pwd` \ - && $(am__cd) $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) "$$here" - -distclean-tags: - -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - -distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - list='$(DISTFILES)'; \ - dist_files=`for file in $$list; do echo $$file; done | \ - sed -e "s|^$$srcdirstrip/||;t" \ - -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ - case $$dist_files in \ - */*) $(MKDIR_P) `echo "$$dist_files" | \ - sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ - sort -u` ;; \ - esac; \ - for file in $$dist_files; do \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - if test -d $$d/$$file; then \ - dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test -d "$(distdir)/$$file"; then \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ - else \ - test -f "$(distdir)/$$file" \ - || cp -p $$d/$$file "$(distdir)/$$file" \ - || exit 1; \ - fi; \ - done -check-am: all-am -check: check-am -all-am: Makefile $(PROGRAMS) $(HEADERS) -installdirs: - for dir in "$(DESTDIR)$(sbindir)"; do \ - test -z "$$dir" || $(MKDIR_P) "$$dir"; \ - done -install: install-am -install-exec: install-exec-am -install-data: install-data-am -uninstall: uninstall-am - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-am -install-strip: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install -mostlyclean-generic: - -clean-generic: - -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." -clean: clean-am - -clean-am: clean-generic clean-libtool clean-sbinPROGRAMS \ - mostlyclean-am - -distclean: distclean-am - -rm -rf ./$(DEPDIR) - -rm -f Makefile -distclean-am: clean-am distclean-compile distclean-generic \ - distclean-tags - -dvi: dvi-am - -dvi-am: - -html: html-am - -html-am: - -info: info-am - -info-am: - -install-data-am: - -install-dvi: install-dvi-am - -install-dvi-am: - -install-exec-am: install-sbinPROGRAMS - -install-html: install-html-am - -install-html-am: - -install-info: install-info-am - -install-info-am: - -install-man: - -install-pdf: install-pdf-am - -install-pdf-am: - -install-ps: install-ps-am - -install-ps-am: - -installcheck-am: - -maintainer-clean: maintainer-clean-am - -rm -rf ./$(DEPDIR) - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-am - -mostlyclean-am: mostlyclean-compile mostlyclean-generic \ - mostlyclean-libtool - -pdf: pdf-am - -pdf-am: - -ps: ps-am - -ps-am: - -uninstall-am: uninstall-sbinPROGRAMS - -.MAKE: install-am install-strip - -.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ - clean-libtool clean-sbinPROGRAMS ctags distclean \ - distclean-compile distclean-generic distclean-libtool \ - distclean-tags distdir dvi dvi-am html html-am info info-am \ - install install-am install-data install-data-am install-dvi \ - install-dvi-am install-exec install-exec-am install-html \ - install-html-am install-info install-info-am install-man \ - install-pdf install-pdf-am install-ps install-ps-am \ - install-sbinPROGRAMS install-strip installcheck \ - installcheck-am installdirs maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-compile \ - mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ - tags uninstall uninstall-am uninstall-sbinPROGRAMS - - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/src/Makefile.am b/openair3/PMIPv6/freeradius-client-1.1.6/src/Makefile.am deleted file mode 100644 index f0c9e2160d..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/src/Makefile.am +++ /dev/null @@ -1,28 +0,0 @@ -# -# $Id: Makefile.am,v 1.7 2007/03/01 17:50:38 cparker Exp $ -# -# Copyright (C) 1995,1997,1998 Lars Fenneberg -# -# See the file COPYRIGHT for the respective terms and conditions. -# - -AUTOMAKE_OPTIONS = foreign - -pkgsysconfdir=@pkgsysconfdir@ - -DEFS = @DEFS@ -DRC_CONFIG_FILE=\"${pkgsysconfdir}/radiusclient.conf\" \ - -DRC_SECURE_PATH=\"@RC_SECURE_PATH@\" -INCLUDES = -I$(srcdir) -I$(top_srcdir)/include -I$(top_builddir) -LDADD = ../lib/libfreeradius-client.la - -CLEANFILES = *~ - -noinst_HEADERS = radlogin.h - -sbin_PROGRAMS = radlogin radstatus radacct radexample radiusclient radembedded -radlogin_SOURCES = radlogin.c radius.c local.c -radacct_SOURCES = radacct.c -radstatus_SOURCES = radstatus.c -radexample_SOURCES = radexample.c -radiusclient_SOURCES = radiusclient.c -radembedded_SOURCES = radembedded.c diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/src/Makefile.in b/openair3/PMIPv6/freeradius-client-1.1.6/src/Makefile.in deleted file mode 100644 index 5ed5217be1..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/src/Makefile.in +++ /dev/null @@ -1,587 +0,0 @@ -# Makefile.in generated by automake 1.11.1 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, -# Inc. -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -@SET_MAKE@ - -# -# $Id: Makefile.am,v 1.7 2007/03/01 17:50:38 cparker Exp $ -# -# Copyright (C) 1995,1997,1998 Lars Fenneberg -# -# See the file COPYRIGHT for the respective terms and conditions. -# - - -VPATH = @srcdir@ -pkgdatadir = $(datadir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ -pkglibexecdir = $(libexecdir)/@PACKAGE@ -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = @build@ -host_triplet = @host@ -target_triplet = @target@ -sbin_PROGRAMS = radlogin$(EXEEXT) radstatus$(EXEEXT) radacct$(EXEEXT) \ - radexample$(EXEEXT) radiusclient$(EXEEXT) radembedded$(EXEEXT) -subdir = src -DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \ - $(srcdir)/Makefile.in -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/configure.in -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs -CONFIG_HEADER = $(top_builddir)/config.h -CONFIG_CLEAN_FILES = -CONFIG_CLEAN_VPATH_FILES = -am__installdirs = "$(DESTDIR)$(sbindir)" -PROGRAMS = $(sbin_PROGRAMS) -am_radacct_OBJECTS = radacct.$(OBJEXT) -radacct_OBJECTS = $(am_radacct_OBJECTS) -radacct_LDADD = $(LDADD) -radacct_DEPENDENCIES = ../lib/libfreeradius-client.la -am_radembedded_OBJECTS = radembedded.$(OBJEXT) -radembedded_OBJECTS = $(am_radembedded_OBJECTS) -radembedded_LDADD = $(LDADD) -radembedded_DEPENDENCIES = ../lib/libfreeradius-client.la -am_radexample_OBJECTS = radexample.$(OBJEXT) -radexample_OBJECTS = $(am_radexample_OBJECTS) -radexample_LDADD = $(LDADD) -radexample_DEPENDENCIES = ../lib/libfreeradius-client.la -am_radiusclient_OBJECTS = radiusclient.$(OBJEXT) -radiusclient_OBJECTS = $(am_radiusclient_OBJECTS) -radiusclient_LDADD = $(LDADD) -radiusclient_DEPENDENCIES = ../lib/libfreeradius-client.la -am_radlogin_OBJECTS = radlogin.$(OBJEXT) radius.$(OBJEXT) \ - local.$(OBJEXT) -radlogin_OBJECTS = $(am_radlogin_OBJECTS) -radlogin_LDADD = $(LDADD) -radlogin_DEPENDENCIES = ../lib/libfreeradius-client.la -am_radstatus_OBJECTS = radstatus.$(OBJEXT) -radstatus_OBJECTS = $(am_radstatus_OBJECTS) -radstatus_LDADD = $(LDADD) -radstatus_DEPENDENCIES = ../lib/libfreeradius-client.la -DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) -depcomp = $(SHELL) $(top_srcdir)/depcomp -am__depfiles_maybe = depfiles -am__mv = mv -f -COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ - $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ - --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ - $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -CCLD = $(CC) -LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ - --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ - $(LDFLAGS) -o $@ -SOURCES = $(radacct_SOURCES) $(radembedded_SOURCES) \ - $(radexample_SOURCES) $(radiusclient_SOURCES) \ - $(radlogin_SOURCES) $(radstatus_SOURCES) -DIST_SOURCES = $(radacct_SOURCES) $(radembedded_SOURCES) \ - $(radexample_SOURCES) $(radiusclient_SOURCES) \ - $(radlogin_SOURCES) $(radstatus_SOURCES) -HEADERS = $(noinst_HEADERS) -ETAGS = etags -CTAGS = ctags -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = @ACLOCAL@ -ALLOCA = @ALLOCA@ -AMTAR = @AMTAR@ -AR = @AR@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -CC = @CC@ -CCDEPMODE = @CCDEPMODE@ -CFLAGS = @CFLAGS@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CYGPATH_W = @CYGPATH_W@ -DEFS = @DEFS@ -DRC_CONFIG_FILE=\"${pkgsysconfdir}/radiusclient.conf\" \ - -DRC_SECURE_PATH=\"@RC_SECURE_PATH@\" - -DEPDIR = @DEPDIR@ -DSYMUTIL = @DSYMUTIL@ -DUMPBIN = @DUMPBIN@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -EXEEXT = @EXEEXT@ -FGREP = @FGREP@ -GREP = @GREP@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -LD = @LD@ -LDFLAGS = @LDFLAGS@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LIBTOOL = @LIBTOOL@ -LIBVERSION = @LIBVERSION@ -LIPO = @LIPO@ -LN_S = @LN_S@ -LTLIBOBJS = @LTLIBOBJS@ -MAINT = @MAINT@ -MAKEINFO = @MAKEINFO@ -MKDIR_P = @MKDIR_P@ -NM = @NM@ -NMEDIT = @NMEDIT@ -OBJDUMP = @OBJDUMP@ -OBJEXT = @OBJEXT@ -OTOOL = @OTOOL@ -OTOOL64 = @OTOOL64@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_URL = @PACKAGE_URL@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -RANLIB = @RANLIB@ -RC_LOG_FACILITY = @RC_LOG_FACILITY@ -RC_SECURE_PATH = @RC_SECURE_PATH@ -SED = @SED@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -STRIP = @STRIP@ -VERSION = @VERSION@ -abs_builddir = @abs_builddir@ -abs_srcdir = @abs_srcdir@ -abs_top_builddir = @abs_top_builddir@ -abs_top_srcdir = @abs_top_srcdir@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ -am__include = @am__include@ -am__leading_dot = @am__leading_dot@ -am__quote = @am__quote@ -am__tar = @am__tar@ -am__untar = @am__untar@ -bindir = @bindir@ -build = @build@ -build_alias = @build_alias@ -build_cpu = @build_cpu@ -build_os = @build_os@ -build_vendor = @build_vendor@ -builddir = @builddir@ -datadir = @datadir@ -datarootdir = @datarootdir@ -docdir = @docdir@ -dvidir = @dvidir@ -exec_prefix = @exec_prefix@ -host = @host@ -host_alias = @host_alias@ -host_cpu = @host_cpu@ -host_os = @host_os@ -host_vendor = @host_vendor@ -htmldir = @htmldir@ -includedir = @includedir@ -infodir = @infodir@ -install_sh = @install_sh@ -libdir = @libdir@ -libexecdir = @libexecdir@ -localedir = @localedir@ -localstatedir = @localstatedir@ -lt_ECHO = @lt_ECHO@ -mandir = @mandir@ -mkdir_p = @mkdir_p@ -oldincludedir = @oldincludedir@ -pdfdir = @pdfdir@ -pkgsysconfdir = @pkgsysconfdir@ -prefix = @prefix@ -program_transform_name = @program_transform_name@ -psdir = @psdir@ -sbindir = @sbindir@ -sharedstatedir = @sharedstatedir@ -srcdir = @srcdir@ -sysconfdir = @sysconfdir@ -target = @target@ -target_alias = @target_alias@ -target_cpu = @target_cpu@ -target_os = @target_os@ -target_vendor = @target_vendor@ -top_build_prefix = @top_build_prefix@ -top_builddir = @top_builddir@ -top_srcdir = @top_srcdir@ -AUTOMAKE_OPTIONS = foreign -INCLUDES = -I$(srcdir) -I$(top_srcdir)/include -I$(top_builddir) -LDADD = ../lib/libfreeradius-client.la -CLEANFILES = *~ -noinst_HEADERS = radlogin.h -radlogin_SOURCES = radlogin.c radius.c local.c -radacct_SOURCES = radacct.c -radstatus_SOURCES = radstatus.c -radexample_SOURCES = radexample.c -radiusclient_SOURCES = radiusclient.c -radembedded_SOURCES = radembedded.c -all: all-am - -.SUFFIXES: -.SUFFIXES: .c .lo .o .obj -$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ - && { if test -f $@; then exit 0; else break; fi; }; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --foreign src/Makefile -.PRECIOUS: Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(am__aclocal_m4_deps): -install-sbinPROGRAMS: $(sbin_PROGRAMS) - @$(NORMAL_INSTALL) - test -z "$(sbindir)" || $(MKDIR_P) "$(DESTDIR)$(sbindir)" - @list='$(sbin_PROGRAMS)'; test -n "$(sbindir)" || list=; \ - for p in $$list; do echo "$$p $$p"; done | \ - sed 's/$(EXEEXT)$$//' | \ - while read p p1; do if test -f $$p || test -f $$p1; \ - then echo "$$p"; echo "$$p"; else :; fi; \ - done | \ - sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ - -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ - sed 'N;N;N;s,\n, ,g' | \ - $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ - { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ - if ($$2 == $$4) files[d] = files[d] " " $$1; \ - else { print "f", $$3 "/" $$4, $$1; } } \ - END { for (d in files) print "f", d, files[d] }' | \ - while read type dir files; do \ - if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ - test -z "$$files" || { \ - echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(sbindir)$$dir'"; \ - $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(sbindir)$$dir" || exit $$?; \ - } \ - ; done - -uninstall-sbinPROGRAMS: - @$(NORMAL_UNINSTALL) - @list='$(sbin_PROGRAMS)'; test -n "$(sbindir)" || list=; \ - files=`for p in $$list; do echo "$$p"; done | \ - sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ - -e 's/$$/$(EXEEXT)/' `; \ - test -n "$$list" || exit 0; \ - echo " ( cd '$(DESTDIR)$(sbindir)' && rm -f" $$files ")"; \ - cd "$(DESTDIR)$(sbindir)" && rm -f $$files - -clean-sbinPROGRAMS: - @list='$(sbin_PROGRAMS)'; test -n "$$list" || exit 0; \ - echo " rm -f" $$list; \ - rm -f $$list || exit $$?; \ - test -n "$(EXEEXT)" || exit 0; \ - list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ - echo " rm -f" $$list; \ - rm -f $$list -radacct$(EXEEXT): $(radacct_OBJECTS) $(radacct_DEPENDENCIES) - @rm -f radacct$(EXEEXT) - $(LINK) $(radacct_OBJECTS) $(radacct_LDADD) $(LIBS) -radembedded$(EXEEXT): $(radembedded_OBJECTS) $(radembedded_DEPENDENCIES) - @rm -f radembedded$(EXEEXT) - $(LINK) $(radembedded_OBJECTS) $(radembedded_LDADD) $(LIBS) -radexample$(EXEEXT): $(radexample_OBJECTS) $(radexample_DEPENDENCIES) - @rm -f radexample$(EXEEXT) - $(LINK) $(radexample_OBJECTS) $(radexample_LDADD) $(LIBS) -radiusclient$(EXEEXT): $(radiusclient_OBJECTS) $(radiusclient_DEPENDENCIES) - @rm -f radiusclient$(EXEEXT) - $(LINK) $(radiusclient_OBJECTS) $(radiusclient_LDADD) $(LIBS) -radlogin$(EXEEXT): $(radlogin_OBJECTS) $(radlogin_DEPENDENCIES) - @rm -f radlogin$(EXEEXT) - $(LINK) $(radlogin_OBJECTS) $(radlogin_LDADD) $(LIBS) -radstatus$(EXEEXT): $(radstatus_OBJECTS) $(radstatus_DEPENDENCIES) - @rm -f radstatus$(EXEEXT) - $(LINK) $(radstatus_OBJECTS) $(radstatus_LDADD) $(LIBS) - -mostlyclean-compile: - -rm -f *.$(OBJEXT) - -distclean-compile: - -rm -f *.tab.c - -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/local.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/radacct.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/radembedded.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/radexample.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/radius.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/radiusclient.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/radlogin.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/radstatus.Po@am__quote@ - -.c.o: -@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(COMPILE) -c $< - -.c.obj: -@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` - -.c.lo: -@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs - -ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - mkid -fID $$unique -tags: TAGS - -TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - set x; \ - here=`pwd`; \ - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - shift; \ - if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ - test -n "$$unique" || unique=$$empty_fix; \ - if test $$# -gt 0; then \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - "$$@" $$unique; \ - else \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$unique; \ - fi; \ - fi -ctags: CTAGS -CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - test -z "$(CTAGS_ARGS)$$unique" \ - || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$unique - -GTAGS: - here=`$(am__cd) $(top_builddir) && pwd` \ - && $(am__cd) $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) "$$here" - -distclean-tags: - -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - -distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - list='$(DISTFILES)'; \ - dist_files=`for file in $$list; do echo $$file; done | \ - sed -e "s|^$$srcdirstrip/||;t" \ - -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ - case $$dist_files in \ - */*) $(MKDIR_P) `echo "$$dist_files" | \ - sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ - sort -u` ;; \ - esac; \ - for file in $$dist_files; do \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - if test -d $$d/$$file; then \ - dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test -d "$(distdir)/$$file"; then \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ - else \ - test -f "$(distdir)/$$file" \ - || cp -p $$d/$$file "$(distdir)/$$file" \ - || exit 1; \ - fi; \ - done -check-am: all-am -check: check-am -all-am: Makefile $(PROGRAMS) $(HEADERS) -installdirs: - for dir in "$(DESTDIR)$(sbindir)"; do \ - test -z "$$dir" || $(MKDIR_P) "$$dir"; \ - done -install: install-am -install-exec: install-exec-am -install-data: install-data-am -uninstall: uninstall-am - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-am -install-strip: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install -mostlyclean-generic: - -clean-generic: - -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." -clean: clean-am - -clean-am: clean-generic clean-libtool clean-sbinPROGRAMS \ - mostlyclean-am - -distclean: distclean-am - -rm -rf ./$(DEPDIR) - -rm -f Makefile -distclean-am: clean-am distclean-compile distclean-generic \ - distclean-tags - -dvi: dvi-am - -dvi-am: - -html: html-am - -html-am: - -info: info-am - -info-am: - -install-data-am: - -install-dvi: install-dvi-am - -install-dvi-am: - -install-exec-am: install-sbinPROGRAMS - -install-html: install-html-am - -install-html-am: - -install-info: install-info-am - -install-info-am: - -install-man: - -install-pdf: install-pdf-am - -install-pdf-am: - -install-ps: install-ps-am - -install-ps-am: - -installcheck-am: - -maintainer-clean: maintainer-clean-am - -rm -rf ./$(DEPDIR) - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-am - -mostlyclean-am: mostlyclean-compile mostlyclean-generic \ - mostlyclean-libtool - -pdf: pdf-am - -pdf-am: - -ps: ps-am - -ps-am: - -uninstall-am: uninstall-sbinPROGRAMS - -.MAKE: install-am install-strip - -.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ - clean-libtool clean-sbinPROGRAMS ctags distclean \ - distclean-compile distclean-generic distclean-libtool \ - distclean-tags distdir dvi dvi-am html html-am info info-am \ - install install-am install-data install-data-am install-dvi \ - install-dvi-am install-exec install-exec-am install-html \ - install-html-am install-info install-info-am install-man \ - install-pdf install-pdf-am install-ps install-ps-am \ - install-sbinPROGRAMS install-strip installcheck \ - installcheck-am installdirs maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-compile \ - mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ - tags uninstall uninstall-am uninstall-sbinPROGRAMS - - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/src/local.c b/openair3/PMIPv6/freeradius-client-1.1.6/src/local.c deleted file mode 100644 index aa8763ad0d..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/src/local.c +++ /dev/null @@ -1,86 +0,0 @@ -/* - * $Id: local.c,v 1.5 2007/01/06 20:15:35 pnixon Exp $ - * - * Copyright (C) 1996 Lars Fenneberg - * - * See the file COPYRIGHT for the respective terms and conditions. - * If the file is missing contact me at lf@elemental.net - * and I'll send you a copy. - * - */ - -#include -#include -#include -#include -#include - -extern ENV *env; - -LFUNC auth_local(char *username, char *passwd) -{ - struct passwd *pw; - char *xpasswd; -#ifdef SHADOW_PASSWORD - struct spwd *spw; -#endif - - if ((pw = getpwnam(username)) == NULL) { - endpwent(); - rc_log(LOG_NOTICE, "authentication FAILED, type local, username %s", username); - printf(SC_LOCAL_FAILED); - return NULL; - } - - endpwent(); - -#ifdef SHADOW_PASSWORD - - if((spw = getspnam(pw->pw_name)) == NULL) { - endspent(); - rc_log(LOG_NOTICE, "authentication FAILED, type local, username %s", username); - printf(SC_LOCAL_FAILED); - return NULL; - } else { - pw->pw_passwd = spw->sp_pwdp; - } - - endspent(); -#endif /* SHADOW_PASSWORD */ - - xpasswd = crypt(passwd, pw->pw_passwd); - - if (*pw->pw_passwd == '\0' || strcmp(xpasswd, pw->pw_passwd)) { - rc_log(LOG_NOTICE, "authentication FAILED, type local, username %s", username); - printf(SC_LOCAL_FAILED); - return NULL; - } - - rc_log(LOG_NOTICE, "authentication OK, type local, username %s", username); - printf(SC_LOCAL_OK); - - return local_login; -} - -void -local_login(rc_handle *rh, char *username) -{ - char *login_local = rc_conf_str(rh, "login_local"); - - /* login should spot this... but who knows what old /bin/logins - * may be still around - */ - if (*username == '-') { - rc_log(LOG_WARNING, "username can't start with a dash"); - exit(ERROR_RC); - } - - /* the new shadow login seems to require either a -r or a -h - * flag for -f to work (so source code, lmain.c) so we supply - * it here. shouldn't hurt on other systems, -lf, 03/13/96 - */ - execle(login_local, login_local, "-h", "localhost", "-f", username, NULL, env->env); - rc_log(LOG_ERR, "couldn't execute %s: %s", login_local, strerror(errno)); - sleep(1); /* give the user time to read */ - exit(ERROR_RC); -} diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/src/radacct b/openair3/PMIPv6/freeradius-client-1.1.6/src/radacct deleted file mode 100755 index 5cd92c0303..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/src/radacct +++ /dev/null @@ -1,148 +0,0 @@ -#! /bin/bash - -# radacct - temporary wrapper script for .libs/radacct -# Generated by ltmain.sh (GNU libtool) 2.2.6b Debian-2.2.6b-2ubuntu1 -# -# The radacct program cannot be directly executed until all the libtool -# libraries that it depends on are installed. -# -# This wrapper script should never be moved out of the build directory. -# If it is, it will not operate correctly. - -# Sed substitution that helps us do robust quoting. It backslashifies -# metacharacters that are still active within double-quoted strings. -Xsed='/bin/sed -e 1s/^X//' -sed_quote_subst='s/\([`"$\\]\)/\\\1/g' - -# Be Bourne compatible -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then - emulate sh - NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac -fi -BIN_SH=xpg4; export BIN_SH # for Tru64 -DUALCASE=1; export DUALCASE # for MKS sh - -# The HP-UX ksh and POSIX shell print the target directory to stdout -# if CDPATH is set. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -relink_command="(cd /usr/local/src/freeradius-client-1.1.6/src; { test -z \"\${LIBRARY_PATH+set}\" || unset LIBRARY_PATH || { LIBRARY_PATH=; export LIBRARY_PATH; }; }; { test -z \"\${COMPILER_PATH+set}\" || unset COMPILER_PATH || { COMPILER_PATH=; export COMPILER_PATH; }; }; { test -z \"\${GCC_EXEC_PREFIX+set}\" || unset GCC_EXEC_PREFIX || { GCC_EXEC_PREFIX=; export GCC_EXEC_PREFIX; }; }; { test -z \"\${LD_RUN_PATH+set}\" || unset LD_RUN_PATH || { LD_RUN_PATH=; export LD_RUN_PATH; }; }; { test -z \"\${LD_LIBRARY_PATH+set}\" || unset LD_LIBRARY_PATH || { LD_LIBRARY_PATH=; export LD_LIBRARY_PATH; }; }; PATH=/usr/realtime/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games; export PATH; gcc -g -O2 -o \$progdir/\$file radacct.o ../lib/.libs/libfreeradius-client.so -lcrypt -lnsl -Wl,-rpath -Wl,/usr/local/src/freeradius-client-1.1.6/lib/.libs)" - -# This environment variable determines our operation mode. -if test "$libtool_install_magic" = "%%%MAGIC variable%%%"; then - # install mode needs the following variables: - generated_by_libtool_version='2.2.6b' - notinst_deplibs=' ../lib/libfreeradius-client.la' -else - # When we are sourced in execute mode, $file and $ECHO are already set. - if test "$libtool_execute_magic" != "%%%MAGIC variable%%%"; then - ECHO="echo" - file="$0" - # Make sure echo works. - if test "X$1" = X--no-reexec; then - # Discard the --no-reexec flag, and continue. - shift - elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t'; then - # Yippee, $ECHO works! - : - else - # Restart under the correct shell, and then maybe $ECHO will work. - exec /bin/bash "$0" --no-reexec ${1+"$@"} - fi - fi - - # Find the directory that this script lives in. - thisdir=`$ECHO "X$file" | $Xsed -e 's%/[^/]*$%%'` - test "x$thisdir" = "x$file" && thisdir=. - - # Follow symbolic links until we get to the real thisdir. - file=`ls -ld "$file" | /bin/sed -n 's/.*-> //p'` - while test -n "$file"; do - destdir=`$ECHO "X$file" | $Xsed -e 's%/[^/]*$%%'` - - # If there was a directory component, then change thisdir. - if test "x$destdir" != "x$file"; then - case "$destdir" in - [\\/]* | [A-Za-z]:[\\/]*) thisdir="$destdir" ;; - *) thisdir="$thisdir/$destdir" ;; - esac - fi - - file=`$ECHO "X$file" | $Xsed -e 's%^.*/%%'` - file=`ls -ld "$thisdir/$file" | /bin/sed -n 's/.*-> //p'` - done - - - # Usually 'no', except on cygwin/mingw when embedded into - # the cwrapper. - WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=no - if test "$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR" = "yes"; then - # special case for '.' - if test "$thisdir" = "."; then - thisdir=`pwd` - fi - # remove .libs from thisdir - case "$thisdir" in - *[\\/].libs ) thisdir=`$ECHO "X$thisdir" | $Xsed -e 's%[\\/][^\\/]*$%%'` ;; - .libs ) thisdir=. ;; - esac - fi - - # Try to get the absolute directory name. - absdir=`cd "$thisdir" && pwd` - test -n "$absdir" && thisdir="$absdir" - - program=lt-'radacct' - progdir="$thisdir/.libs" - - if test ! -f "$progdir/$program" || - { file=`ls -1dt "$progdir/$program" "$progdir/../$program" 2>/dev/null | /bin/sed 1q`; \ - test "X$file" != "X$progdir/$program"; }; then - - file="$$-$program" - - if test ! -d "$progdir"; then - mkdir "$progdir" - else - rm -f "$progdir/$file" - fi - - # relink executable if necessary - if test -n "$relink_command"; then - if relink_command_output=`eval $relink_command 2>&1`; then : - else - echo "$relink_command_output" >&2 - rm -f "$progdir/$file" - exit 1 - fi - fi - - mv -f "$progdir/$file" "$progdir/$program" 2>/dev/null || - { rm -f "$progdir/$program"; - mv -f "$progdir/$file" "$progdir/$program"; } - rm -f "$progdir/$file" - fi - - if test -f "$progdir/$program"; then - if test "$libtool_execute_magic" != "%%%MAGIC variable%%%"; then - # Run the actual program with our arguments. - - exec "$progdir/$program" ${1+"$@"} - - $ECHO "$0: cannot exec $program $*" 1>&2 - exit 1 - fi - else - # The program doesn't exist. - $ECHO "$0: error: \`$progdir/$program' does not exist" 1>&2 - $ECHO "This script is just a wrapper for $program." 1>&2 - echo "See the libtool documentation for more information." 1>&2 - exit 1 - fi -fi diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/src/radacct.c b/openair3/PMIPv6/freeradius-client-1.1.6/src/radacct.c deleted file mode 100644 index e53bb8142b..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/src/radacct.c +++ /dev/null @@ -1,145 +0,0 @@ -/* - * $Id: radacct.c,v 1.6 2007/07/11 17:29:30 cparker Exp $ - * - * Copyright (C) 1995,1996 Lars Fenneberg - * - * See the file COPYRIGHT for the respective terms and conditions. - * If the file is missing contact me at lf@elemental.net - * and I'll send you a copy. - * - */ - -static char rcsid[] = - "$Id: radacct.c,v 1.6 2007/07/11 17:29:30 cparker Exp $"; - -#include -#include -#include -#include -#include - -static char *pname; - -void usage(void) -{ - fprintf(stderr,"Usage: %s [-Vh] [-f ] [-i ]\n\n", pname); - fprintf(stderr," -V output version information\n"); - fprintf(stderr," -h output this text\n"); - fprintf(stderr," -f filename of alternate config file\n"); - fprintf(stderr," -i ttyname to send to the server\n"); - exit(ERROR_RC); -} - -void version(void) -{ - fprintf(stderr,"%s: %s\n", pname ,rcsid); - exit(ERROR_RC); -} - -int -main (int argc, char **argv) -{ - int result = ERROR_RC; - VALUE_PAIR *send = NULL; - uint32_t client_port; - int c; - VALUE_PAIR *vp; - DICT_VALUE *dval; - char *username, *service, *fproto, *type; - char *path_radiusclient_conf = RC_CONFIG_FILE; - char *ttyn = NULL; - rc_handle *rh; - - extern char *optarg; - - pname = (pname = strrchr(argv[0],'/'))?pname+1:argv[0]; - - rc_openlog(pname); - - while ((c = getopt(argc,argv,"f:i:hV")) > 0) { - switch(c) { - case 'f': - path_radiusclient_conf = optarg; - break; - - case 'i': - ttyn = optarg; - break; - - case 'V': - version(); - break; - - case 'h': - usage(); - break; - - default: - exit(ERROR_RC); - break; - } - } - - if ((rh = rc_read_config(path_radiusclient_conf)) == NULL) - exit(ERROR_RC); - - if (rc_read_dictionary(rh, rc_conf_str(rh, "dictionary")) != 0) - exit (ERROR_RC); - - if (rc_read_mapfile(rh, rc_conf_str(rh, "mapfile")) != 0) - exit (ERROR_RC); - - if (ttyn != NULL) { - client_port = rc_map2id(rh, ttyn); - } else { - /* we take stdout here, because stdin is usually connected - * to our input file - */ - if ((ttyn = ttyname(1)) != NULL) { - client_port = rc_map2id(rh, ttyn); - } else { - client_port = 0; - } - } - - if ((send = rc_avpair_readin(rh, stdin))) { - - username = service = type = "(unknown)"; - fproto = NULL; - - if ((vp = rc_avpair_get(send, PW_ACCT_STATUS_TYPE, 0)) != NULL) - if ((dval = rc_dict_getval(rh, vp->lvalue, vp->name)) != NULL) { - type = dval->name; - } - - if ((vp = rc_avpair_get(send, PW_USER_NAME, 0)) != NULL) - username = vp->strvalue; - - if ((vp = rc_avpair_get(send, PW_SERVICE_TYPE, 0)) != NULL) - if ((dval = rc_dict_getval(rh, vp->lvalue, vp->name)) != NULL) { - service = dval->name; - } - - if (vp && (vp->lvalue == PW_FRAMED) && - ((vp = rc_avpair_get(send, PW_FRAMED_PROTOCOL, 0)) != NULL)) - if ((dval = rc_dict_getval(rh, vp->lvalue, vp->name)) != NULL) { - fproto = dval->name; - } - - result = rc_acct(rh, client_port, send); - - if (result == OK_RC) { - fprintf(stderr, SC_ACCT_OK); - rc_log(LOG_NOTICE, "accounting OK, type %s, username %s, service %s%s%s", - type, username, service,(fproto)?"/":"", (fproto)?fproto:""); - } else { - fprintf(stderr, SC_ACCT_FAILED, result); - rc_log(LOG_NOTICE, "accounting FAILED, type %s, username %s, service %s%s%s", - type, username, service,(fproto)?"/":"", (fproto)?fproto:""); - } - - rc_avpair_free(send); - } - - exit (result); -} diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/src/radembedded b/openair3/PMIPv6/freeradius-client-1.1.6/src/radembedded deleted file mode 100755 index 5e6c177ed9..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/src/radembedded +++ /dev/null @@ -1,148 +0,0 @@ -#! /bin/bash - -# radembedded - temporary wrapper script for .libs/radembedded -# Generated by ltmain.sh (GNU libtool) 2.2.6b Debian-2.2.6b-2ubuntu1 -# -# The radembedded program cannot be directly executed until all the libtool -# libraries that it depends on are installed. -# -# This wrapper script should never be moved out of the build directory. -# If it is, it will not operate correctly. - -# Sed substitution that helps us do robust quoting. It backslashifies -# metacharacters that are still active within double-quoted strings. -Xsed='/bin/sed -e 1s/^X//' -sed_quote_subst='s/\([`"$\\]\)/\\\1/g' - -# Be Bourne compatible -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then - emulate sh - NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac -fi -BIN_SH=xpg4; export BIN_SH # for Tru64 -DUALCASE=1; export DUALCASE # for MKS sh - -# The HP-UX ksh and POSIX shell print the target directory to stdout -# if CDPATH is set. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -relink_command="(cd /usr/local/src/freeradius-client-1.1.6/src; { test -z \"\${LIBRARY_PATH+set}\" || unset LIBRARY_PATH || { LIBRARY_PATH=; export LIBRARY_PATH; }; }; { test -z \"\${COMPILER_PATH+set}\" || unset COMPILER_PATH || { COMPILER_PATH=; export COMPILER_PATH; }; }; { test -z \"\${GCC_EXEC_PREFIX+set}\" || unset GCC_EXEC_PREFIX || { GCC_EXEC_PREFIX=; export GCC_EXEC_PREFIX; }; }; { test -z \"\${LD_RUN_PATH+set}\" || unset LD_RUN_PATH || { LD_RUN_PATH=; export LD_RUN_PATH; }; }; { test -z \"\${LD_LIBRARY_PATH+set}\" || unset LD_LIBRARY_PATH || { LD_LIBRARY_PATH=; export LD_LIBRARY_PATH; }; }; PATH=/usr/realtime/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games; export PATH; gcc -g -O2 -o \$progdir/\$file radembedded.o ../lib/.libs/libfreeradius-client.so -lcrypt -lnsl -Wl,-rpath -Wl,/usr/local/src/freeradius-client-1.1.6/lib/.libs)" - -# This environment variable determines our operation mode. -if test "$libtool_install_magic" = "%%%MAGIC variable%%%"; then - # install mode needs the following variables: - generated_by_libtool_version='2.2.6b' - notinst_deplibs=' ../lib/libfreeradius-client.la' -else - # When we are sourced in execute mode, $file and $ECHO are already set. - if test "$libtool_execute_magic" != "%%%MAGIC variable%%%"; then - ECHO="echo" - file="$0" - # Make sure echo works. - if test "X$1" = X--no-reexec; then - # Discard the --no-reexec flag, and continue. - shift - elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t'; then - # Yippee, $ECHO works! - : - else - # Restart under the correct shell, and then maybe $ECHO will work. - exec /bin/bash "$0" --no-reexec ${1+"$@"} - fi - fi - - # Find the directory that this script lives in. - thisdir=`$ECHO "X$file" | $Xsed -e 's%/[^/]*$%%'` - test "x$thisdir" = "x$file" && thisdir=. - - # Follow symbolic links until we get to the real thisdir. - file=`ls -ld "$file" | /bin/sed -n 's/.*-> //p'` - while test -n "$file"; do - destdir=`$ECHO "X$file" | $Xsed -e 's%/[^/]*$%%'` - - # If there was a directory component, then change thisdir. - if test "x$destdir" != "x$file"; then - case "$destdir" in - [\\/]* | [A-Za-z]:[\\/]*) thisdir="$destdir" ;; - *) thisdir="$thisdir/$destdir" ;; - esac - fi - - file=`$ECHO "X$file" | $Xsed -e 's%^.*/%%'` - file=`ls -ld "$thisdir/$file" | /bin/sed -n 's/.*-> //p'` - done - - - # Usually 'no', except on cygwin/mingw when embedded into - # the cwrapper. - WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=no - if test "$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR" = "yes"; then - # special case for '.' - if test "$thisdir" = "."; then - thisdir=`pwd` - fi - # remove .libs from thisdir - case "$thisdir" in - *[\\/].libs ) thisdir=`$ECHO "X$thisdir" | $Xsed -e 's%[\\/][^\\/]*$%%'` ;; - .libs ) thisdir=. ;; - esac - fi - - # Try to get the absolute directory name. - absdir=`cd "$thisdir" && pwd` - test -n "$absdir" && thisdir="$absdir" - - program=lt-'radembedded' - progdir="$thisdir/.libs" - - if test ! -f "$progdir/$program" || - { file=`ls -1dt "$progdir/$program" "$progdir/../$program" 2>/dev/null | /bin/sed 1q`; \ - test "X$file" != "X$progdir/$program"; }; then - - file="$$-$program" - - if test ! -d "$progdir"; then - mkdir "$progdir" - else - rm -f "$progdir/$file" - fi - - # relink executable if necessary - if test -n "$relink_command"; then - if relink_command_output=`eval $relink_command 2>&1`; then : - else - echo "$relink_command_output" >&2 - rm -f "$progdir/$file" - exit 1 - fi - fi - - mv -f "$progdir/$file" "$progdir/$program" 2>/dev/null || - { rm -f "$progdir/$program"; - mv -f "$progdir/$file" "$progdir/$program"; } - rm -f "$progdir/$file" - fi - - if test -f "$progdir/$program"; then - if test "$libtool_execute_magic" != "%%%MAGIC variable%%%"; then - # Run the actual program with our arguments. - - exec "$progdir/$program" ${1+"$@"} - - $ECHO "$0: cannot exec $program $*" 1>&2 - exit 1 - fi - else - # The program doesn't exist. - $ECHO "$0: error: \`$progdir/$program' does not exist" 1>&2 - $ECHO "This script is just a wrapper for $program." 1>&2 - echo "See the libtool documentation for more information." 1>&2 - exit 1 - fi -fi diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/src/radembedded.c b/openair3/PMIPv6/freeradius-client-1.1.6/src/radembedded.c deleted file mode 100644 index e5844c77ed..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/src/radembedded.c +++ /dev/null @@ -1,155 +0,0 @@ -/* - * radembedded.c - a sample c program showing how to embed the configuration of a radius - * client, using the FreeRADIUS Client Library without an external configuration file. - */ - - -#include -#include -#include -#include - - -int -main (int argc, char **argv) -{ - int retval = 0; - rc_handle *rh = NULL; - - uint32_t client_port = 0; - uint32_t status_type = PW_STATUS_STOP; - VALUE_PAIR *send = NULL; - /* - VALUE_PAIR *vp = NULL; - DICT_VALUE *dval = NULL; - */ - char username[255] = "bob@somedomain.here"; - char callfrom[255] = "8475551212"; - char callto[255] = "8479630116"; - char myuuid[255] = "981743-asdf-90834klj234"; - - /* Initialize the 'rh' structure */ - - rh = rc_new(); - - if (rh == NULL) { - printf("ERROR: Failed to allocate initial structure\n"); - exit(1); - } - - /* Initialize the config structure */ - - rh = rc_config_init(rh); - - if (rh == NULL) { - printf("ERROR: Failed to initialze configuration\n"); - exit(1); - } - - /* - * Set the required options for configuration - */ - - /* set auth_order to be radius only */ - - if (rc_add_config(rh, "auth_order", "radius", "config", 0) != 0) { - printf("ERROR: Unable to set auth_order.\n"); - rc_destroy(rh); - exit(1); - } - - if (rc_add_config(rh, "login_tries", "4", "config", 0) != 0) { - printf("ERROR: Unable to set login_tries.\n"); - rc_destroy(rh); - exit(1); - } - - if (rc_add_config(rh, "dictionary", "/usr/local/radius/dictionary", "config", 0) != 0) { - printf("ERROR: Unable to set dictionary.\n"); - rc_destroy(rh); - exit(1); - } - - if (rc_add_config(rh, "seqfile", "/var/run/radius.seq", "config", 0) != 0) { - printf("ERROR: Unable to set seq file.\n"); - rc_destroy(rh); - exit(1); - } - - if (rc_add_config(rh, "radius_retries", "3", "config", 0) != 0) { - printf("ERROR: Unable to set radius_retries.\n"); - rc_destroy(rh); - exit(1); - } - - if (rc_add_config(rh, "radius_timeout", "5", "config", 0) != 0) { - printf("ERROR: Unable to set radius_timeout.\n"); - rc_destroy(rh); - exit(1); - } - - /* auth/acct servers are added in the form: host[:port[:secret]] - * If you don't set the secret via the add_config option, you must set a 'servers' - * entry to specify the location of the 'servers' file which stores the secrets to - * be used. - */ - - if (rc_add_config(rh, "authserver", "localhost::testing123", "config", 0) != 0) { - printf("ERROR: Unable to set authserver.\n"); - rc_destroy(rh); - exit(1); - } - - if (rc_add_config(rh, "acctserver", "localhost:1813:testing123", "config", 0) != 0) { - printf("ERROR: Unable to set acctserver.\n"); - rc_destroy(rh); - exit(1); - } - - /* Done setting configuration items */ - - /* Read in the dictionary file(s) */ - - if (rc_read_dictionary(rh, rc_conf_str(rh, "dictionary")) != 0) { - printf("ERROR: Failed to initialize radius dictionary\n"); - exit(1); - } - - if (rc_avpair_add(rh, &send, PW_ACCT_STATUS_TYPE, &status_type, -1, 0) == NULL) { - printf("ERROR: Failed adding Acct-Status-Type: to %d\n", status_type); - exit(1); - } - - if (rc_avpair_add(rh, &send, PW_ACCT_SESSION_ID, myuuid, -1, 0) == NULL) { - printf("ERROR: Failed adding Acct-Session-ID: to %s\n", myuuid); - exit(1); - } - - if (rc_avpair_add(rh, &send, PW_USER_NAME, username, -1, 0) == NULL) { - printf("ERROR: Failed adding User-Name: to %s\n", username); - exit(1); - } - - if (rc_avpair_add(rh, &send, PW_CALLED_STATION_ID, callto, -1, 0) == NULL) { - printf("ERROR: Failed adding Called-Station-ID: to %s\n", callto); - exit(1); - } - - if (rc_avpair_add(rh, &send, PW_CALLING_STATION_ID, callfrom, -1, 0) == NULL) { - printf("ERROR: Failed adding Calling-Station-ID: to %s\n", callfrom); - exit(1); - } - - if(rc_acct(rh, client_port, send) == OK_RC) { - printf("INFO: Accounting OK: %s\n", username); - retval = 0; - } else { - printf("INFO: Accounting Failed: %s\n", username); - retval = -1; - } - - rc_destroy(rh); - rc_avpair_free(send); - - exit(retval); -} diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/src/radexample b/openair3/PMIPv6/freeradius-client-1.1.6/src/radexample deleted file mode 100755 index 0a5dfeca4a..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/src/radexample +++ /dev/null @@ -1,148 +0,0 @@ -#! /bin/bash - -# radexample - temporary wrapper script for .libs/radexample -# Generated by ltmain.sh (GNU libtool) 2.2.6b Debian-2.2.6b-2ubuntu1 -# -# The radexample program cannot be directly executed until all the libtool -# libraries that it depends on are installed. -# -# This wrapper script should never be moved out of the build directory. -# If it is, it will not operate correctly. - -# Sed substitution that helps us do robust quoting. It backslashifies -# metacharacters that are still active within double-quoted strings. -Xsed='/bin/sed -e 1s/^X//' -sed_quote_subst='s/\([`"$\\]\)/\\\1/g' - -# Be Bourne compatible -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then - emulate sh - NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac -fi -BIN_SH=xpg4; export BIN_SH # for Tru64 -DUALCASE=1; export DUALCASE # for MKS sh - -# The HP-UX ksh and POSIX shell print the target directory to stdout -# if CDPATH is set. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -relink_command="(cd /usr/local/src/freeradius-client-1.1.6/src; { test -z \"\${LIBRARY_PATH+set}\" || unset LIBRARY_PATH || { LIBRARY_PATH=; export LIBRARY_PATH; }; }; { test -z \"\${COMPILER_PATH+set}\" || unset COMPILER_PATH || { COMPILER_PATH=; export COMPILER_PATH; }; }; { test -z \"\${GCC_EXEC_PREFIX+set}\" || unset GCC_EXEC_PREFIX || { GCC_EXEC_PREFIX=; export GCC_EXEC_PREFIX; }; }; { test -z \"\${LD_RUN_PATH+set}\" || unset LD_RUN_PATH || { LD_RUN_PATH=; export LD_RUN_PATH; }; }; { test -z \"\${LD_LIBRARY_PATH+set}\" || unset LD_LIBRARY_PATH || { LD_LIBRARY_PATH=; export LD_LIBRARY_PATH; }; }; PATH=/usr/realtime/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games; export PATH; gcc -g -O2 -o \$progdir/\$file radexample.o ../lib/.libs/libfreeradius-client.so -lcrypt -lnsl -Wl,-rpath -Wl,/usr/local/src/freeradius-client-1.1.6/lib/.libs)" - -# This environment variable determines our operation mode. -if test "$libtool_install_magic" = "%%%MAGIC variable%%%"; then - # install mode needs the following variables: - generated_by_libtool_version='2.2.6b' - notinst_deplibs=' ../lib/libfreeradius-client.la' -else - # When we are sourced in execute mode, $file and $ECHO are already set. - if test "$libtool_execute_magic" != "%%%MAGIC variable%%%"; then - ECHO="echo" - file="$0" - # Make sure echo works. - if test "X$1" = X--no-reexec; then - # Discard the --no-reexec flag, and continue. - shift - elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t'; then - # Yippee, $ECHO works! - : - else - # Restart under the correct shell, and then maybe $ECHO will work. - exec /bin/bash "$0" --no-reexec ${1+"$@"} - fi - fi - - # Find the directory that this script lives in. - thisdir=`$ECHO "X$file" | $Xsed -e 's%/[^/]*$%%'` - test "x$thisdir" = "x$file" && thisdir=. - - # Follow symbolic links until we get to the real thisdir. - file=`ls -ld "$file" | /bin/sed -n 's/.*-> //p'` - while test -n "$file"; do - destdir=`$ECHO "X$file" | $Xsed -e 's%/[^/]*$%%'` - - # If there was a directory component, then change thisdir. - if test "x$destdir" != "x$file"; then - case "$destdir" in - [\\/]* | [A-Za-z]:[\\/]*) thisdir="$destdir" ;; - *) thisdir="$thisdir/$destdir" ;; - esac - fi - - file=`$ECHO "X$file" | $Xsed -e 's%^.*/%%'` - file=`ls -ld "$thisdir/$file" | /bin/sed -n 's/.*-> //p'` - done - - - # Usually 'no', except on cygwin/mingw when embedded into - # the cwrapper. - WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=no - if test "$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR" = "yes"; then - # special case for '.' - if test "$thisdir" = "."; then - thisdir=`pwd` - fi - # remove .libs from thisdir - case "$thisdir" in - *[\\/].libs ) thisdir=`$ECHO "X$thisdir" | $Xsed -e 's%[\\/][^\\/]*$%%'` ;; - .libs ) thisdir=. ;; - esac - fi - - # Try to get the absolute directory name. - absdir=`cd "$thisdir" && pwd` - test -n "$absdir" && thisdir="$absdir" - - program=lt-'radexample' - progdir="$thisdir/.libs" - - if test ! -f "$progdir/$program" || - { file=`ls -1dt "$progdir/$program" "$progdir/../$program" 2>/dev/null | /bin/sed 1q`; \ - test "X$file" != "X$progdir/$program"; }; then - - file="$$-$program" - - if test ! -d "$progdir"; then - mkdir "$progdir" - else - rm -f "$progdir/$file" - fi - - # relink executable if necessary - if test -n "$relink_command"; then - if relink_command_output=`eval $relink_command 2>&1`; then : - else - echo "$relink_command_output" >&2 - rm -f "$progdir/$file" - exit 1 - fi - fi - - mv -f "$progdir/$file" "$progdir/$program" 2>/dev/null || - { rm -f "$progdir/$program"; - mv -f "$progdir/$file" "$progdir/$program"; } - rm -f "$progdir/$file" - fi - - if test -f "$progdir/$program"; then - if test "$libtool_execute_magic" != "%%%MAGIC variable%%%"; then - # Run the actual program with our arguments. - - exec "$progdir/$program" ${1+"$@"} - - $ECHO "$0: cannot exec $program $*" 1>&2 - exit 1 - fi - else - # The program doesn't exist. - $ECHO "$0: error: \`$progdir/$program' does not exist" 1>&2 - $ECHO "This script is just a wrapper for $program." 1>&2 - echo "See the libtool documentation for more information." 1>&2 - exit 1 - fi -fi diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/src/radexample.c b/openair3/PMIPv6/freeradius-client-1.1.6/src/radexample.c deleted file mode 100644 index ab9e14722f..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/src/radexample.c +++ /dev/null @@ -1,93 +0,0 @@ -/* - * $Id: radexample.c,v 1.8 2007/07/11 17:29:30 cparker Exp $ - * - * Copyright (C) 1995,1996,1997 Lars Fenneberg - * - * See the file COPYRIGHT for the respective terms and conditions. - * If the file is missing contact me at lf@elemental.net - * and I'll send you a copy. - * - */ - - -static char rcsid[] = - "$Id: radexample.c,v 1.8 2007/07/11 17:29:30 cparker Exp $"; - -#include -#include -#include -#include - -static char *pname = NULL; - -int -main (int argc, char **argv) -{ - int result; - char username[128]; - char passwd[AUTH_PASS_LEN + 1]; - VALUE_PAIR *send, *received; - uint32_t service; - char msg[4096], username_realm[256]; - char *default_realm; - rc_handle *rh; - - pname = (pname = strrchr(argv[0],'/'))?pname+1:argv[0]; - - rc_openlog(pname); - - if ((rh = rc_read_config(RC_CONFIG_FILE)) == NULL) - return ERROR_RC; - - if (rc_read_dictionary(rh, rc_conf_str(rh, "dictionary")) != 0) - return ERROR_RC; - - default_realm = rc_conf_str(rh, "default_realm"); - - strncpy(username, rc_getstr (rh, "login: ",1), sizeof(username)); - strncpy (passwd, rc_getstr(rh, "Password: ",0), sizeof (passwd)); - - send = NULL; - - /* - * Fill in User-Name - */ - - strncpy(username_realm, username, sizeof(username_realm)); - - /* Append default realm */ - if ((strchr(username_realm, '@') == NULL) && default_realm && - (*default_realm != '\0')) { - strncat(username_realm, "@", sizeof(username_realm)-strlen(username_realm)-1); - strncat(username_realm, default_realm, sizeof(username_realm)-strlen(username_realm)-1); - } - - if (rc_avpair_add(rh, &send, PW_USER_NAME, username_realm, -1, 0) == NULL) - return ERROR_RC; - - /* - * Fill in User-Password - */ - - if (rc_avpair_add(rh, &send, PW_USER_PASSWORD, passwd, -1, 0) == NULL) - return ERROR_RC; - - /* - * Fill in Service-Type - */ - - service = PW_AUTHENTICATE_ONLY; - - if (rc_avpair_add(rh, &send, PW_SERVICE_TYPE, &service, -1, 0) == NULL) - return ERROR_RC; - - result = rc_auth(rh, 0, send, &received, msg); - - if (result == OK_RC) { - fprintf(stderr, "\"%s\" RADIUS Authentication OK\n", username); - } else { - fprintf(stderr, "\"%s\" RADIUS Authentication failure (RC=%i)\n", username, result); - } - - return result; -} diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/src/radius.c b/openair3/PMIPv6/freeradius-client-1.1.6/src/radius.c deleted file mode 100644 index 9d30f5eb67..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/src/radius.c +++ /dev/null @@ -1,229 +0,0 @@ -/* - * $Id: radius.c,v 1.9 2007/07/11 17:29:30 cparker Exp $ - * - * Copyright (C) 1996 Lars Fenneberg - * - * See the file COPYRIGHT for the respective terms and conditions. - * If the file is missing contact me at lf@elemental.net - * and I'll send you a copy. - * - */ - -#include -#include -#include -#include -#include - -extern ENV *env; - -LFUNC auth_radius(rc_handle *rh, uint32_t client_port, char *username, char *passwd) -{ - - VALUE_PAIR *send, *received, *vp, *service_vp; - uint32_t service, ftype, ctype; - char msg[4096], *p, username_realm[256]; - char name[2048], value[2048]; /* more than enough */ - int result; - char *default_realm, *service_str, *ftype_str; - DICT_VALUE *dval; - - send = received = NULL; - - /* - * Determine and fill in Service-Type - */ - -#ifdef SCP - /* determine based on the username what kind of service is requested. - this allows you to use one password for all accounts, but the - Merit radiusd supplies you just with the right information you - need for the specified service type -lf, 03/15/96 */ - - switch (*username) { - case 'S': - service = PW_FRAMED; - ftype = PW_SLIP; - ctype = 0; - username++; - break; - - case 'C': - service = PW_FRAMED; - ftype = PW_SLIP; - ctype = PW_VAN_JACOBSON_TCP_IP; - username++; - break; - - case 'P': - service = PW_FRAMED; - ftype = PW_PPP; - ctype = 0; - username++; - break; - - default: - service = PW_LOGIN; - ftype = 0; - ctype = 0; - break; - } - -#else - service = PW_LOGIN; - ftype = 0; - ctype = 0; -#endif - - if (rc_avpair_add(rh, &send, PW_SERVICE_TYPE, &service, -1, 0) == NULL) - return NULL; - - /* Fill in Framed-Protocol, if neccessary */ - - if (ftype != 0) { - if (rc_avpair_add(rh, &send, PW_FRAMED_PROTOCOL, &ftype, -1, 0) == NULL) - return NULL; - } - - /* Fill in Framed-Compression, if neccessary */ - - if (ctype != 0) { - if (rc_avpair_add(rh, &send, PW_FRAMED_COMPRESSION, &ctype, -1, 0) == NULL) - return NULL; - } - - /* - * Fill in User-Name - */ - - strncpy(username_realm, username, sizeof(username_realm)); - - /* Append default realm */ - default_realm = rc_conf_str(rh, "default_realm"); - - if ((strchr(username_realm, '@') == NULL) && default_realm && - ((*default_realm) != '\0')) { - strncat(username_realm, "@", sizeof(username_realm)-strlen(username_realm)-1); - strncat(username_realm, default_realm, sizeof(username_realm)-strlen(username_realm)-1); - } - - if (rc_avpair_add(rh, &send, PW_USER_NAME, username_realm, -1, 0) == NULL) - return NULL; - - /* - * Fill in User-Password - */ - - if (rc_avpair_add(rh, &send, PW_USER_PASSWORD, passwd, -1, 0) == NULL) - return NULL; - - result = rc_auth(rh, client_port, send, &received, msg); - - if (result == OK_RC) { - /* Set up a running count of attributes saved. */ - int acount[256], attr; - - memset(acount, 0, sizeof(acount)); - - rc_add_env(env, "RADIUS_USER_NAME", username); - - vp = received; - - /* map-- keep track of the attributes so that we know - when to add the delimiters. Note that we can only - handle attributes < 256, which is the standard anyway. */ - - while (vp) { - strcpy(name, "RADIUS_"); - - if (rc_avpair_tostr(rh, vp, name+7, sizeof(name)-7, value, sizeof(value)) < 0) { - rc_avpair_free(send); - rc_avpair_free(received); - return NULL; - } - - /* Translate "-" => "_" and uppercase*/ - for(p = name; *p; p++) { - *p = toupper(*p); - - if (*p == '-') *p = '_'; - } - - /* Add to the attribute count and append the var - if necessary. */ - if ((attr = vp->attribute) < 256) { - int count; - - if ((count = acount[attr]++) > 0) { - char buf[10]; - sprintf(buf, "_%d", count); - strcat(name,buf); - } - } - - if (rc_add_env(env, name, value) < 0) { - rc_avpair_free(send); - rc_avpair_free(received); - return NULL; - } - - vp = vp->next; - } - - service_str = "(unknown)"; - ftype_str = NULL; - - if ((service_vp = rc_avpair_get(received, PW_SERVICE_TYPE, 0)) != NULL) - if ((dval = rc_dict_getval(rh, service_vp->lvalue, service_vp->name)) != NULL) { - service_str = dval->name; - } - - if (service_vp && (service_vp->lvalue == PW_FRAMED) && - ((vp = rc_avpair_get(received, PW_FRAMED_PROTOCOL, 0)) != NULL)) - if ((dval = rc_dict_getval(rh, vp->lvalue, vp->name)) != NULL) { - ftype_str = dval->name; - } - - rc_log(LOG_NOTICE, "authentication OK, username %s, service %s%s%s", - username, service_str,(ftype_str)?"/":"", (ftype_str)?ftype_str:""); - - if (msg && (*msg != '\0')) - printf(SC_SERVER_REPLY, msg); - else - printf(SC_RADIUS_OK); - - rc_avpair_free(send); - rc_avpair_free(received); - - return radius_login; - } else { - rc_log(LOG_NOTICE, "authentication FAILED, type RADIUS, username %s", - username_realm); - - if (msg && (*msg != '\0')) - printf(SC_SERVER_REPLY, msg); - else - printf(SC_RADIUS_FAILED); - } - - rc_avpair_free(send); - - if (received) - rc_avpair_free(received); - - return NULL; -} - -void -radius_login(rc_handle *rh, char *username) -{ - char *login_radius = rc_conf_str(rh, "login_radius"); - - execle(login_radius, login_radius, NULL, env->env); - - rc_log(LOG_ERR, "couldn't execute %s: %s", login_radius, strerror(errno)); - fprintf(stderr, "couldn't execute %s: %s", login_radius, strerror(errno)); - - sleep(1); /* give the user time to read */ - exit(ERROR_RC); -} diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/src/radiusclient b/openair3/PMIPv6/freeradius-client-1.1.6/src/radiusclient deleted file mode 100755 index 2cd639e90f..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/src/radiusclient +++ /dev/null @@ -1,148 +0,0 @@ -#! /bin/bash - -# radiusclient - temporary wrapper script for .libs/radiusclient -# Generated by ltmain.sh (GNU libtool) 2.2.6b Debian-2.2.6b-2ubuntu1 -# -# The radiusclient program cannot be directly executed until all the libtool -# libraries that it depends on are installed. -# -# This wrapper script should never be moved out of the build directory. -# If it is, it will not operate correctly. - -# Sed substitution that helps us do robust quoting. It backslashifies -# metacharacters that are still active within double-quoted strings. -Xsed='/bin/sed -e 1s/^X//' -sed_quote_subst='s/\([`"$\\]\)/\\\1/g' - -# Be Bourne compatible -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then - emulate sh - NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac -fi -BIN_SH=xpg4; export BIN_SH # for Tru64 -DUALCASE=1; export DUALCASE # for MKS sh - -# The HP-UX ksh and POSIX shell print the target directory to stdout -# if CDPATH is set. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -relink_command="(cd /usr/local/src/freeradius-client-1.1.6/src; { test -z \"\${LIBRARY_PATH+set}\" || unset LIBRARY_PATH || { LIBRARY_PATH=; export LIBRARY_PATH; }; }; { test -z \"\${COMPILER_PATH+set}\" || unset COMPILER_PATH || { COMPILER_PATH=; export COMPILER_PATH; }; }; { test -z \"\${GCC_EXEC_PREFIX+set}\" || unset GCC_EXEC_PREFIX || { GCC_EXEC_PREFIX=; export GCC_EXEC_PREFIX; }; }; { test -z \"\${LD_RUN_PATH+set}\" || unset LD_RUN_PATH || { LD_RUN_PATH=; export LD_RUN_PATH; }; }; { test -z \"\${LD_LIBRARY_PATH+set}\" || unset LD_LIBRARY_PATH || { LD_LIBRARY_PATH=; export LD_LIBRARY_PATH; }; }; PATH=/usr/realtime/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games; export PATH; gcc -g -O2 -o \$progdir/\$file radiusclient.o ../lib/.libs/libfreeradius-client.so -lcrypt -lnsl -Wl,-rpath -Wl,/usr/local/src/freeradius-client-1.1.6/lib/.libs)" - -# This environment variable determines our operation mode. -if test "$libtool_install_magic" = "%%%MAGIC variable%%%"; then - # install mode needs the following variables: - generated_by_libtool_version='2.2.6b' - notinst_deplibs=' ../lib/libfreeradius-client.la' -else - # When we are sourced in execute mode, $file and $ECHO are already set. - if test "$libtool_execute_magic" != "%%%MAGIC variable%%%"; then - ECHO="echo" - file="$0" - # Make sure echo works. - if test "X$1" = X--no-reexec; then - # Discard the --no-reexec flag, and continue. - shift - elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t'; then - # Yippee, $ECHO works! - : - else - # Restart under the correct shell, and then maybe $ECHO will work. - exec /bin/bash "$0" --no-reexec ${1+"$@"} - fi - fi - - # Find the directory that this script lives in. - thisdir=`$ECHO "X$file" | $Xsed -e 's%/[^/]*$%%'` - test "x$thisdir" = "x$file" && thisdir=. - - # Follow symbolic links until we get to the real thisdir. - file=`ls -ld "$file" | /bin/sed -n 's/.*-> //p'` - while test -n "$file"; do - destdir=`$ECHO "X$file" | $Xsed -e 's%/[^/]*$%%'` - - # If there was a directory component, then change thisdir. - if test "x$destdir" != "x$file"; then - case "$destdir" in - [\\/]* | [A-Za-z]:[\\/]*) thisdir="$destdir" ;; - *) thisdir="$thisdir/$destdir" ;; - esac - fi - - file=`$ECHO "X$file" | $Xsed -e 's%^.*/%%'` - file=`ls -ld "$thisdir/$file" | /bin/sed -n 's/.*-> //p'` - done - - - # Usually 'no', except on cygwin/mingw when embedded into - # the cwrapper. - WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=no - if test "$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR" = "yes"; then - # special case for '.' - if test "$thisdir" = "."; then - thisdir=`pwd` - fi - # remove .libs from thisdir - case "$thisdir" in - *[\\/].libs ) thisdir=`$ECHO "X$thisdir" | $Xsed -e 's%[\\/][^\\/]*$%%'` ;; - .libs ) thisdir=. ;; - esac - fi - - # Try to get the absolute directory name. - absdir=`cd "$thisdir" && pwd` - test -n "$absdir" && thisdir="$absdir" - - program=lt-'radiusclient' - progdir="$thisdir/.libs" - - if test ! -f "$progdir/$program" || - { file=`ls -1dt "$progdir/$program" "$progdir/../$program" 2>/dev/null | /bin/sed 1q`; \ - test "X$file" != "X$progdir/$program"; }; then - - file="$$-$program" - - if test ! -d "$progdir"; then - mkdir "$progdir" - else - rm -f "$progdir/$file" - fi - - # relink executable if necessary - if test -n "$relink_command"; then - if relink_command_output=`eval $relink_command 2>&1`; then : - else - echo "$relink_command_output" >&2 - rm -f "$progdir/$file" - exit 1 - fi - fi - - mv -f "$progdir/$file" "$progdir/$program" 2>/dev/null || - { rm -f "$progdir/$program"; - mv -f "$progdir/$file" "$progdir/$program"; } - rm -f "$progdir/$file" - fi - - if test -f "$progdir/$program"; then - if test "$libtool_execute_magic" != "%%%MAGIC variable%%%"; then - # Run the actual program with our arguments. - - exec "$progdir/$program" ${1+"$@"} - - $ECHO "$0: cannot exec $program $*" 1>&2 - exit 1 - fi - else - # The program doesn't exist. - $ECHO "$0: error: \`$progdir/$program' does not exist" 1>&2 - $ECHO "This script is just a wrapper for $program." 1>&2 - echo "See the libtool documentation for more information." 1>&2 - exit 1 - fi -fi diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/src/radiusclient.c b/openair3/PMIPv6/freeradius-client-1.1.6/src/radiusclient.c deleted file mode 100644 index 1584e0c6d0..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/src/radiusclient.c +++ /dev/null @@ -1,199 +0,0 @@ -/* - * Copyright (c) 2004 Maxim Sobolev - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * $Id: radiusclient.c,v 1.7 2007/01/06 20:15:36 pnixon Exp $ - */ - -#include -#include -#include -#include -#include - -#include - -int process(void *, VALUE_PAIR *, int, int); - -static void -usage(void) -{ - - fprintf(stderr, "usage: radiusclient [-f config_file] [-p nas_port] [-s | [-a] a1=v1 [a2=v2[...[aN=vN]...]]]\n"); - exit(1); -} - -int -main(int argc, char **argv) -{ - int i, nas_port, ch, acct, server, ecount, firstline, theend; - void *rh; - size_t len; - VALUE_PAIR *send, **vp; - char *rc_conf, *cp; - char lbuf[4096]; - - rc_conf = RC_CONFIG_FILE; - nas_port = 5060; - - acct = 0; - server = 0; - - while ((ch = getopt(argc, argv, "af:p:s")) != -1) { - switch (ch) { - case 'f': - rc_conf = optarg; - break; - - case 'p': - nas_port = atoi(optarg); - break; - - case 'a': - acct = 1; - break; - - case 's': - server = 1; - break; - - default: - usage(); - } - } - - argc -= optind; - argv += optind; - - if ((argc == 0 && server == 0) || (argc != 0 && server != 0)) - usage(); - - if ((rh = rc_read_config(rc_conf)) == NULL) { - fprintf(stderr, "error opening radius configuration file\n"); - exit(1); - } - - if (rc_read_dictionary(rh, rc_conf_str(rh, "dictionary")) != 0) { - fprintf(stderr, "error reading radius dictionary\n"); - exit(2); - } - - if (server == 0) { - send = NULL; - vp = &send; - - for (i = 0; i < argc; i++) { - if (rc_avpair_parse(rh, argv[i], vp) < 0) { - fprintf(stderr, "%s: can't parse AV pair\n", argv[i]); - exit(3); - } - - vp = &send->next; - } - - exit(process(rh, send, acct, nas_port)); - } - - while (1 == 1) { - send = NULL; - vp = &send; - ecount = 0; - firstline = 1; - acct = 0; - - do { - len = 0; - cp = rc_fgetln(stdin, &len); - theend = 1; - - if (cp != NULL && len > 0) { - if (firstline != 0) { - if (len >= 4 && memcmp(cp, "ACCT", 4) == 0) - acct = 1; - - firstline = 0; - theend = 0; - continue; - } - - for (i = 0; i < len; i++) { - if (!isspace(cp[i])) { - theend = 0; - break; - } - } - - if (theend == 0) { - memcpy(lbuf, cp, len); - lbuf[len] = '\0'; - - if (rc_avpair_parse(rh, lbuf, vp) < 0) { - fprintf(stderr, "%s: can't parse AV pair\n", lbuf); - ecount++; - } else { - vp = &send->next; - } - } - } - } while (theend == 0); - - if (send != NULL && ecount == 0) - printf("%d\n\n", process(rh, send, acct, nas_port)); - else - printf("%d\n\n", -1); - - fflush(stdout); - - if (send != NULL) - rc_avpair_free(send); - - if (cp == NULL || len <= 0) - break; - } - - exit(0); -} - -int -process(void *rh, VALUE_PAIR *send, int acct, int nas_port) -{ - VALUE_PAIR *received; - char msg[4096]; - int i; - - received = NULL; - - if (acct == 0) { - i = rc_auth(rh, nas_port, send, &received, msg); - - if (received != NULL) { - printf("%s", rc_avpair_log(rh, received)); - rc_avpair_free(received); - } - } else { - i = rc_acct(rh, nas_port, send); - } - - return (i == OK_RC) ? 0 : 1; -} diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/src/radlogin b/openair3/PMIPv6/freeradius-client-1.1.6/src/radlogin deleted file mode 100755 index 4ca43c2ea3..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/src/radlogin +++ /dev/null @@ -1,148 +0,0 @@ -#! /bin/bash - -# radlogin - temporary wrapper script for .libs/radlogin -# Generated by ltmain.sh (GNU libtool) 2.2.6b Debian-2.2.6b-2ubuntu1 -# -# The radlogin program cannot be directly executed until all the libtool -# libraries that it depends on are installed. -# -# This wrapper script should never be moved out of the build directory. -# If it is, it will not operate correctly. - -# Sed substitution that helps us do robust quoting. It backslashifies -# metacharacters that are still active within double-quoted strings. -Xsed='/bin/sed -e 1s/^X//' -sed_quote_subst='s/\([`"$\\]\)/\\\1/g' - -# Be Bourne compatible -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then - emulate sh - NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac -fi -BIN_SH=xpg4; export BIN_SH # for Tru64 -DUALCASE=1; export DUALCASE # for MKS sh - -# The HP-UX ksh and POSIX shell print the target directory to stdout -# if CDPATH is set. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -relink_command="(cd /usr/local/src/freeradius-client-1.1.6/src; { test -z \"\${LIBRARY_PATH+set}\" || unset LIBRARY_PATH || { LIBRARY_PATH=; export LIBRARY_PATH; }; }; { test -z \"\${COMPILER_PATH+set}\" || unset COMPILER_PATH || { COMPILER_PATH=; export COMPILER_PATH; }; }; { test -z \"\${GCC_EXEC_PREFIX+set}\" || unset GCC_EXEC_PREFIX || { GCC_EXEC_PREFIX=; export GCC_EXEC_PREFIX; }; }; { test -z \"\${LD_RUN_PATH+set}\" || unset LD_RUN_PATH || { LD_RUN_PATH=; export LD_RUN_PATH; }; }; { test -z \"\${LD_LIBRARY_PATH+set}\" || unset LD_LIBRARY_PATH || { LD_LIBRARY_PATH=; export LD_LIBRARY_PATH; }; }; PATH=/usr/realtime/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games; export PATH; gcc -g -O2 -o \$progdir/\$file radlogin.o radius.o local.o ../lib/.libs/libfreeradius-client.so -lcrypt -lnsl -Wl,-rpath -Wl,/usr/local/src/freeradius-client-1.1.6/lib/.libs)" - -# This environment variable determines our operation mode. -if test "$libtool_install_magic" = "%%%MAGIC variable%%%"; then - # install mode needs the following variables: - generated_by_libtool_version='2.2.6b' - notinst_deplibs=' ../lib/libfreeradius-client.la' -else - # When we are sourced in execute mode, $file and $ECHO are already set. - if test "$libtool_execute_magic" != "%%%MAGIC variable%%%"; then - ECHO="echo" - file="$0" - # Make sure echo works. - if test "X$1" = X--no-reexec; then - # Discard the --no-reexec flag, and continue. - shift - elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t'; then - # Yippee, $ECHO works! - : - else - # Restart under the correct shell, and then maybe $ECHO will work. - exec /bin/bash "$0" --no-reexec ${1+"$@"} - fi - fi - - # Find the directory that this script lives in. - thisdir=`$ECHO "X$file" | $Xsed -e 's%/[^/]*$%%'` - test "x$thisdir" = "x$file" && thisdir=. - - # Follow symbolic links until we get to the real thisdir. - file=`ls -ld "$file" | /bin/sed -n 's/.*-> //p'` - while test -n "$file"; do - destdir=`$ECHO "X$file" | $Xsed -e 's%/[^/]*$%%'` - - # If there was a directory component, then change thisdir. - if test "x$destdir" != "x$file"; then - case "$destdir" in - [\\/]* | [A-Za-z]:[\\/]*) thisdir="$destdir" ;; - *) thisdir="$thisdir/$destdir" ;; - esac - fi - - file=`$ECHO "X$file" | $Xsed -e 's%^.*/%%'` - file=`ls -ld "$thisdir/$file" | /bin/sed -n 's/.*-> //p'` - done - - - # Usually 'no', except on cygwin/mingw when embedded into - # the cwrapper. - WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=no - if test "$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR" = "yes"; then - # special case for '.' - if test "$thisdir" = "."; then - thisdir=`pwd` - fi - # remove .libs from thisdir - case "$thisdir" in - *[\\/].libs ) thisdir=`$ECHO "X$thisdir" | $Xsed -e 's%[\\/][^\\/]*$%%'` ;; - .libs ) thisdir=. ;; - esac - fi - - # Try to get the absolute directory name. - absdir=`cd "$thisdir" && pwd` - test -n "$absdir" && thisdir="$absdir" - - program=lt-'radlogin' - progdir="$thisdir/.libs" - - if test ! -f "$progdir/$program" || - { file=`ls -1dt "$progdir/$program" "$progdir/../$program" 2>/dev/null | /bin/sed 1q`; \ - test "X$file" != "X$progdir/$program"; }; then - - file="$$-$program" - - if test ! -d "$progdir"; then - mkdir "$progdir" - else - rm -f "$progdir/$file" - fi - - # relink executable if necessary - if test -n "$relink_command"; then - if relink_command_output=`eval $relink_command 2>&1`; then : - else - echo "$relink_command_output" >&2 - rm -f "$progdir/$file" - exit 1 - fi - fi - - mv -f "$progdir/$file" "$progdir/$program" 2>/dev/null || - { rm -f "$progdir/$program"; - mv -f "$progdir/$file" "$progdir/$program"; } - rm -f "$progdir/$file" - fi - - if test -f "$progdir/$program"; then - if test "$libtool_execute_magic" != "%%%MAGIC variable%%%"; then - # Run the actual program with our arguments. - - exec "$progdir/$program" ${1+"$@"} - - $ECHO "$0: cannot exec $program $*" 1>&2 - exit 1 - fi - else - # The program doesn't exist. - $ECHO "$0: error: \`$progdir/$program' does not exist" 1>&2 - $ECHO "This script is just a wrapper for $program." 1>&2 - echo "See the libtool documentation for more information." 1>&2 - exit 1 - fi -fi diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/src/radlogin.c b/openair3/PMIPv6/freeradius-client-1.1.6/src/radlogin.c deleted file mode 100644 index 88ffb00638..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/src/radlogin.c +++ /dev/null @@ -1,403 +0,0 @@ -/* - * radlogin.c RADIUS based /bin/login replacement - * - * Version: $Id: radlogin.c,v 1.9 2008/01/09 07:04:18 sobomax Exp $ - * - * Copyright (C) 1995,1996 Lars Fenneberg - * Copyright (C) 2007 The FreeRADIUS Project - * - * See the file COPYRIGHT for the respective terms and conditions. - * - */ - -static char rcsid[] = - "$Id: radlogin.c,v 1.9 2008/01/09 07:04:18 sobomax Exp $"; - -#include -#include -#include -#include -#include -#include - -ENV *env = NULL; -static char *pname = NULL; -static rc_handle *rh = NULL; - -static RETSIGTYPE -alarm_handler(int sn) -{ - fprintf(stderr, SC_TIMEOUT, rc_conf_int(rh, "login_timeout")); - sleep(1); - exit(ERROR_RC); -} - -static int -login_allowed(char *tty) -{ - FILE *fp; - char fname[PATH_MAX]; - int c; - - strcpy(fname, rc_conf_str(rh, "nologin")); - - if (access(fname, F_OK) < 0) { - if (tty) { - sprintf(fname, "%s.%s", rc_conf_str(rh, "nologin"), tty); - - if (access(fname, F_OK) < 0) - return 1; - } else { - return 1; - } - } - - if ((fp = fopen(fname, "r")) != NULL) { - while ((c = fgetc(fp)) != EOF) { - if (c == '\n') - fputc('\r', stdout); - - fputc(c, stdout); - } - - fflush(stdout); - fclose(fp); - } else { - printf(SC_NOLOGIN); - } - - return 0; -} - -static char * -subst_placeholders(char *str, char *tty) -{ - char *p,*q; - static char buf[4096]; -#if defined(HAVE_UNAME) - struct utsname uts; -#endif -#if !defined(HAVE_STRUCT_UTSNAME_DOMAINNAME) && defined(HAVE_GETDOMAINNAME) - char domainname[256]; -#endif - -#if defined(HAVE_UNAME) - uname(&uts); -#endif - - p = str; - q = buf; - - while (*p != '\0') { - switch (*p) { - case '\\': - if (*(p+1) == '\0') - break; - - p++; - - switch (*p) { - case 'I': - strcpy(q, rcsid); - q += strlen(rcsid); - break; - - case 'L': - case 'P': - strcpy(q, tty); - q += strlen(tty); - break; -#if defined(HAVE_UNAME) - - case 'S': - strcpy(q, uts.sysname); - q += strlen(uts.sysname); - break; - - case 'N': - strcpy(q, uts.nodename); - q += strlen(uts.nodename); - break; - - case 'R': - strcpy(q, uts.release); - q += strlen(uts.release); - break; - - case 'V': - strcpy(q, uts.version); - q += strlen(uts.version); - break; - - case 'M': - strcpy(q, uts.machine); - q += strlen(uts.machine); - break; -#endif - - case 'D': -#if defined(HAVE_STRUCT_UTSNAME_DOMAINNAME) - strcpy(q, uts.domainname); - q += strlen(uts.domainname); -#elif defined(HAVE_GETDOMAINNAME) - getdomainname(domainname, sizeof(domainname)); - strcpy(q, domainname); - q += strlen(domainname); -#endif - break; - - case '\\': - *q = '\\'; - q++; - break; - } - - break; -#if defined(HAVE_UNAME) - - case '@': - strcpy(q, uts.nodename); - q += strlen(uts.nodename); - break; -#endif - - case '\n': - strcpy(q,"\r\n"); - q += 2; - break; - - default: - *q = *p; - q++; - break; - } - - p++; - } - - *q = '\0'; - - return buf; -} - -static void -usage(void) -{ - fprintf(stderr,"Usage: %s [-Vhnd] [-f ] [-i ] [-m ]\n\n", pname); - fprintf(stderr," -V output version information\n"); - fprintf(stderr," -h output this text\n"); - fprintf(stderr," -n don't display issue file\n"); - fprintf(stderr," -f filename of alternate config file\n"); - fprintf(stderr," -i ttyname to send to the server\n"); - fprintf(stderr," -m maximum login tries (overrides value in config file)\n"); - exit(ERROR_RC); -} - -static void -version(void) -{ - fprintf(stderr,"%s: %s\n", pname ,rcsid); - exit(ERROR_RC); -} - -int -main (int argc, char **argv) -{ - char username[128]; - char passwd[AUTH_PASS_LEN + 1]; - int tries, remaining, c; - uint32_t client_port; - void (*login_func)(rc_handle *, char *); - FILE *fp; - char buf[4096]; - char tty[1024], *p; - int noissue = 0; - int maxtries = 0; - char *ttyn = NULL; - char *path_radiusclient_conf = RC_CONFIG_FILE; - - extern char *optarg; - extern int optind; - - pname = (pname = strrchr(argv[0],'/'))?pname+1:argv[0]; - - rc_openlog(pname); - - while ((c = getopt(argc,argv,"f:m:i:nhV")) > 0) { - switch(c) { - case 'f': - path_radiusclient_conf = optarg; - break; - - case 'i': - ttyn = optarg; - break; - - case 'n': - noissue = 1; - break; - - case 'm': - maxtries = atoi(optarg); - break; - - case 'V': - version(); - break; - - case 'h': - usage(); - break; - - default: - exit(ERROR_RC); - break; - } - } - - if ((rh = rc_read_config(path_radiusclient_conf)) == NULL) - exit(ERROR_RC); - - if (rc_read_dictionary(rh, rc_conf_str(rh, "dictionary")) != 0) - exit (ERROR_RC); - - if (rc_read_mapfile(rh, rc_conf_str(rh, "mapfile")) != 0) - exit (ERROR_RC); - - if (ttyn != NULL) { - client_port = rc_map2id(rh, ttyn); - - if ((p = strrchr(ttyn, '/')) == NULL) - strncpy(tty, ttyn, sizeof(tty)); - else - strncpy(tty, p+1, sizeof(tty)); - } else { - ttyn = ttyname(0); - - if (ttyn) { - if ((p = strrchr(ttyn, '/')) == NULL) - strncpy(tty, ttyn, sizeof(tty)); - else - strncpy(tty, p+1, sizeof(tty)); - - client_port = rc_map2id(rh, ttyn); - } else { - *tty = '\0'; - client_port = 0; - } - } - -#ifdef SETVBUF_REVERSED - setvbuf(stdout, _IONBF, NULL, 0); -#else - setvbuf(stdout, NULL, _IONBF, 0); -#endif - - if ((argc - optind) == 1) { - strncpy(username,argv[optind], sizeof(username)); - } else { - *username = '\0'; - - if (!noissue) { - if (rc_conf_str(rh, "issue") && ((fp = fopen(rc_conf_str(rh, "issue"), "r")) != NULL)) { - while (fgets(buf, sizeof(buf), fp) != NULL) - fputs(subst_placeholders(buf, tty), stdout); - - fflush(stdout); - fclose(fp); - } else { - fputs(subst_placeholders(SC_DEFAULT_ISSUE, tty), stdout); - fflush(stdout); - } - } - } - - if ((env = rc_new_env(ENV_SIZE)) == NULL) { - rc_log(LOG_CRIT, "rc_new_env: FATAL: out of memory"); - abort(); - } - -#ifdef SECURITY_DISABLED - - if (rc_import_env(env,environ) < 0) { - rc_log(LOG_CRIT, "rc_import_env: FATAL: not enough space for environment (increase ENV_SIZE)"); - abort(); - } - -#else - rc_add_env(env, "IFS", " "); - rc_add_env(env, "PATH", RC_SECURE_PATH); -#endif - - signal(SIGALRM, alarm_handler); - - remaining = rc_conf_int(rh, "login_timeout"); - - if (!maxtries) - maxtries = rc_conf_int(rh, "login_tries"); - - tries = 1; - - while (tries <= maxtries) { - alarm(remaining); - - while (!*username) { - p = rc_getstr (rh, SC_LOGIN, 1); - - if (p) - strncpy(username, p, sizeof(username)); - else - exit (ERROR_RC); - } - - p = rc_getstr(rh, SC_PASSWORD,0); - - if (p) - strncpy (passwd, p, sizeof (passwd)); - else - exit (ERROR_RC); - - remaining = alarm(0); - - login_func = NULL; - - if (rc_conf_int(rh, "auth_order") & AUTH_LOCAL_FST) { - login_func = auth_local(username, passwd); - - if (!login_func) - if (rc_conf_int(rh, "auth_order") & AUTH_RADIUS_SND) - login_func = auth_radius(rh, client_port, username, passwd); - } else { - login_func = auth_radius(rh, client_port, username, passwd); - - if (!login_func) - if (rc_conf_int(rh, "auth_order") & AUTH_LOCAL_SND) - login_func = auth_local(username, passwd); - } - - memset(passwd, '\0', sizeof(passwd)); - - if (login_func != NULL) { - if (login_allowed(tty)) { - (*login_func)(rh, username); - } else { - sleep(1); - exit (ERROR_RC); - } - } - - *username = '\0'; - - if ((++tries) <= maxtries) { - alarm(remaining); - sleep(tries * 2); - remaining = alarm(0); - } - - } - - fprintf(stderr, SC_EXCEEDED); - sleep(1); - - exit (ERROR_RC); -} diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/src/radlogin.h b/openair3/PMIPv6/freeradius-client-1.1.6/src/radlogin.h deleted file mode 100644 index 1d1271f49e..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/src/radlogin.h +++ /dev/null @@ -1,25 +0,0 @@ -/* - * $Id: radlogin.h,v 1.4 2007/07/11 17:29:31 cparker Exp $ - * - * Copyright (C) 1996 Lars Fenneberg - * - * See the file COPYRIGHT for the respective terms and conditions. - * If the file is missing contact me at lf@elemental.net - * and I'll send you a copy. - * - */ - -#ifndef RADLOGIN_H -#define RADLOGIN_H - -typedef void (*LFUNC)(rc_handle *, char *); - -/* radius.c */ -LFUNC auth_radius(rc_handle *, uint32_t, char *, char *); -void radius_login(rc_handle *, char *); - -/* local.c */ -LFUNC auth_local(char *, char *); -void local_login(rc_handle *, char *); - -#endif /* RADLOGIN_H */ diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/src/radstatus b/openair3/PMIPv6/freeradius-client-1.1.6/src/radstatus deleted file mode 100755 index 14e5b74f2d..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/src/radstatus +++ /dev/null @@ -1,148 +0,0 @@ -#! /bin/bash - -# radstatus - temporary wrapper script for .libs/radstatus -# Generated by ltmain.sh (GNU libtool) 2.2.6b Debian-2.2.6b-2ubuntu1 -# -# The radstatus program cannot be directly executed until all the libtool -# libraries that it depends on are installed. -# -# This wrapper script should never be moved out of the build directory. -# If it is, it will not operate correctly. - -# Sed substitution that helps us do robust quoting. It backslashifies -# metacharacters that are still active within double-quoted strings. -Xsed='/bin/sed -e 1s/^X//' -sed_quote_subst='s/\([`"$\\]\)/\\\1/g' - -# Be Bourne compatible -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then - emulate sh - NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac -fi -BIN_SH=xpg4; export BIN_SH # for Tru64 -DUALCASE=1; export DUALCASE # for MKS sh - -# The HP-UX ksh and POSIX shell print the target directory to stdout -# if CDPATH is set. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -relink_command="(cd /usr/local/src/freeradius-client-1.1.6/src; { test -z \"\${LIBRARY_PATH+set}\" || unset LIBRARY_PATH || { LIBRARY_PATH=; export LIBRARY_PATH; }; }; { test -z \"\${COMPILER_PATH+set}\" || unset COMPILER_PATH || { COMPILER_PATH=; export COMPILER_PATH; }; }; { test -z \"\${GCC_EXEC_PREFIX+set}\" || unset GCC_EXEC_PREFIX || { GCC_EXEC_PREFIX=; export GCC_EXEC_PREFIX; }; }; { test -z \"\${LD_RUN_PATH+set}\" || unset LD_RUN_PATH || { LD_RUN_PATH=; export LD_RUN_PATH; }; }; { test -z \"\${LD_LIBRARY_PATH+set}\" || unset LD_LIBRARY_PATH || { LD_LIBRARY_PATH=; export LD_LIBRARY_PATH; }; }; PATH=/usr/realtime/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games; export PATH; gcc -g -O2 -o \$progdir/\$file radstatus.o ../lib/.libs/libfreeradius-client.so -lcrypt -lnsl -Wl,-rpath -Wl,/usr/local/src/freeradius-client-1.1.6/lib/.libs)" - -# This environment variable determines our operation mode. -if test "$libtool_install_magic" = "%%%MAGIC variable%%%"; then - # install mode needs the following variables: - generated_by_libtool_version='2.2.6b' - notinst_deplibs=' ../lib/libfreeradius-client.la' -else - # When we are sourced in execute mode, $file and $ECHO are already set. - if test "$libtool_execute_magic" != "%%%MAGIC variable%%%"; then - ECHO="echo" - file="$0" - # Make sure echo works. - if test "X$1" = X--no-reexec; then - # Discard the --no-reexec flag, and continue. - shift - elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t'; then - # Yippee, $ECHO works! - : - else - # Restart under the correct shell, and then maybe $ECHO will work. - exec /bin/bash "$0" --no-reexec ${1+"$@"} - fi - fi - - # Find the directory that this script lives in. - thisdir=`$ECHO "X$file" | $Xsed -e 's%/[^/]*$%%'` - test "x$thisdir" = "x$file" && thisdir=. - - # Follow symbolic links until we get to the real thisdir. - file=`ls -ld "$file" | /bin/sed -n 's/.*-> //p'` - while test -n "$file"; do - destdir=`$ECHO "X$file" | $Xsed -e 's%/[^/]*$%%'` - - # If there was a directory component, then change thisdir. - if test "x$destdir" != "x$file"; then - case "$destdir" in - [\\/]* | [A-Za-z]:[\\/]*) thisdir="$destdir" ;; - *) thisdir="$thisdir/$destdir" ;; - esac - fi - - file=`$ECHO "X$file" | $Xsed -e 's%^.*/%%'` - file=`ls -ld "$thisdir/$file" | /bin/sed -n 's/.*-> //p'` - done - - - # Usually 'no', except on cygwin/mingw when embedded into - # the cwrapper. - WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=no - if test "$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR" = "yes"; then - # special case for '.' - if test "$thisdir" = "."; then - thisdir=`pwd` - fi - # remove .libs from thisdir - case "$thisdir" in - *[\\/].libs ) thisdir=`$ECHO "X$thisdir" | $Xsed -e 's%[\\/][^\\/]*$%%'` ;; - .libs ) thisdir=. ;; - esac - fi - - # Try to get the absolute directory name. - absdir=`cd "$thisdir" && pwd` - test -n "$absdir" && thisdir="$absdir" - - program=lt-'radstatus' - progdir="$thisdir/.libs" - - if test ! -f "$progdir/$program" || - { file=`ls -1dt "$progdir/$program" "$progdir/../$program" 2>/dev/null | /bin/sed 1q`; \ - test "X$file" != "X$progdir/$program"; }; then - - file="$$-$program" - - if test ! -d "$progdir"; then - mkdir "$progdir" - else - rm -f "$progdir/$file" - fi - - # relink executable if necessary - if test -n "$relink_command"; then - if relink_command_output=`eval $relink_command 2>&1`; then : - else - echo "$relink_command_output" >&2 - rm -f "$progdir/$file" - exit 1 - fi - fi - - mv -f "$progdir/$file" "$progdir/$program" 2>/dev/null || - { rm -f "$progdir/$program"; - mv -f "$progdir/$file" "$progdir/$program"; } - rm -f "$progdir/$file" - fi - - if test -f "$progdir/$program"; then - if test "$libtool_execute_magic" != "%%%MAGIC variable%%%"; then - # Run the actual program with our arguments. - - exec "$progdir/$program" ${1+"$@"} - - $ECHO "$0: cannot exec $program $*" 1>&2 - exit 1 - fi - else - # The program doesn't exist. - $ECHO "$0: error: \`$progdir/$program' does not exist" 1>&2 - $ECHO "This script is just a wrapper for $program." 1>&2 - echo "See the libtool documentation for more information." 1>&2 - exit 1 - fi -fi diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/src/radstatus.c b/openair3/PMIPv6/freeradius-client-1.1.6/src/radstatus.c deleted file mode 100644 index 6ced24fcd3..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/src/radstatus.c +++ /dev/null @@ -1,127 +0,0 @@ -/* - * $Id: radstatus.c,v 1.8 2007/04/13 14:20:44 pnixon Exp $ - * - * Copyright (C) 1995,1996 Lars Fenneberg - * - * See the file COPYRIGHT for the respective terms and conditions. - * If the file is missing contact me at lf@elemental.net - * and I'll send you a copy. - * - */ - -/* FIX ME FIX ME FIX ME - * This is broken, now that send_server requires the secret to be passed - * It will need to be collected as an additional argument on command line - */ - -#define FIX_ME_SECRET "fixme" - -static char rcsid[] = - "$Id: radstatus.c,v 1.8 2007/04/13 14:20:44 pnixon Exp $"; - -#include -#include -#include -#include -#include - -static char *pname; - - -void usage(void) -{ - fprintf(stderr,"Usage: %s [-Vh] [-f ] [server[:port[:secret]] ...\n\n", pname); - fprintf(stderr," -V output version information\n"); - fprintf(stderr," -h output this text\n"); - fprintf(stderr," -f filename of alternate config file\n"); - exit(ERROR_RC); -} - -void version(void) -{ - fprintf(stderr,"%s: %s\n", pname ,rcsid); - exit(ERROR_RC); -} - -int main (int argc, char **argv) -{ - int result = ERROR_RC; - int c,i; - char *p, msg[4096]; - SERVER *srv; - char *path_radiusclient_conf = RC_CONFIG_FILE; - rc_handle *rh; - - extern int optind; - - pname = (pname = strrchr(argv[0],'/'))?pname+1:argv[0]; - - rc_openlog(pname); - - while ((c = getopt(argc,argv,"hVf:")) > 0) { - switch(c) { - case 'f': - path_radiusclient_conf = optarg; - break; - - case 'V': - version(); - break; - - case 'h': - usage(); - break; - - default: - exit(ERROR_RC); - break; - } - } - - argc -= optind; - argv += optind; - - if ((rh = rc_read_config(path_radiusclient_conf)) == NULL) - exit(ERROR_RC); - - if (rc_read_dictionary(rh, rc_conf_str(rh, "dictionary")) != 0) - exit (ERROR_RC); - - if (argc > 0) { - for (i = 0; i < argc; i++) { - if ((p = strchr(argv[i], ':')) == NULL) { - result = rc_check(rh, argv[i],FIX_ME_SECRET,rc_getport(AUTH), msg); - } else if (!strcmp(p+1, "auth")) { - *p = '\0'; - result = rc_check(rh, argv[i],FIX_ME_SECRET,rc_getport(AUTH), msg); - } else if (!strcmp(p+1, "acct")) { - *p = '\0'; - result = rc_check(rh, argv[i],FIX_ME_SECRET,rc_getport(ACCT), msg); - } else { - *p = '\0'; - result = rc_check(rh, argv[i],FIX_ME_SECRET,atoi(p+1), msg); - } - - if (result == OK_RC) - fputs(msg, stdout); - else - printf(SC_STATUS_FAILED); - } - } else { - srv = rc_conf_srv(rh, "authserver"); - - for(i=0; imax ; i++) { - result = rc_check(rh, srv->name[i], srv->secret[i], srv->port[i], msg); - fputs(msg, stdout); - } - - srv = rc_conf_srv(rh, "acctserver"); - - for(i=0; imax ; i++) { - result = rc_check(rh, srv->name[i], srv->secret[i], srv->port[i], msg); - fputs(msg, stdout); - } - } - - return 0; -} diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/stamp-h b/openair3/PMIPv6/freeradius-client-1.1.6/stamp-h deleted file mode 100644 index 9788f70238..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/stamp-h +++ /dev/null @@ -1 +0,0 @@ -timestamp diff --git a/openair3/PMIPv6/freeradius-client-1.1.6/stamp-h1 b/openair3/PMIPv6/freeradius-client-1.1.6/stamp-h1 deleted file mode 100644 index 4547fe1b5e..0000000000 --- a/openair3/PMIPv6/freeradius-client-1.1.6/stamp-h1 +++ /dev/null @@ -1 +0,0 @@ -timestamp for config.h diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/AUTHORS b/openair3/PMIPv6/pmipv6-daemon-umip/AUTHORS deleted file mode 100755 index c1c65a199b..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/AUTHORS +++ /dev/null @@ -1,19 +0,0 @@ -Mobile IPv6 for Linux core implementation team is Ville Nuorvala - and Antti J. Tuominen . - -The core team has in the past included Jaakko Laine and Henrik -Petander. Code has been contributed by several individuals. See -THANKS for listing. See libnetlink/README for information regarding -libnetlink. - -The NEMO Basic support code is developed by Ville Nuorvala - in co-operation with the Nautilus6/WIDE -project (http://www.nautilus6.org). - -The NEMO Basic Support code has been ported to UMIP by Romain KUNTZ - and received contributions from the -following people: -- Sebastien DECUGIS (Nautilus6): IPsec support for NEMO -- Arnaud EBALARD (EADS): fixes for Big Endian architectures, - improvements of the NEMO debug messages, improvements in the - IPsec support code for NEMO. diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/BUGS b/openair3/PMIPv6/pmipv6-daemon-umip/BUGS deleted file mode 100755 index e458945aa5..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/BUGS +++ /dev/null @@ -1,27 +0,0 @@ -Known issues in MIPL 2.0.2 ------------------------- - -If you run into any of the issues below, don't bother reporting them -unless you can provide a fix, as we are already aware of them. - -General issues --------------- - -* There are some limitations to the use of IPsec together with MIPv6 - due to the design of the Linux IPsec implementation. Read - README.IPsec for more information. - -Mobile Node issues ------------------- - -* Multihoming support hasn't been very thoroughly tested and should - therefore be considered developmental code. However, it is a lot - more stable than in the Release Candidates. - -NEMO issues ------------ - -* The Mobile Router's home address may only be on the egress interface. - -* Dynamic routing protocols between the Home Agent and Mobile Router - are not yet supported. diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/COPYING b/openair3/PMIPv6/pmipv6-daemon-umip/COPYING deleted file mode 100755 index 0d72637cee..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/COPYING +++ /dev/null @@ -1,281 +0,0 @@ - - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Library General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/COPYING.NEMO b/openair3/PMIPv6/pmipv6-daemon-umip/COPYING.NEMO deleted file mode 100755 index 12ebb3342e..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/COPYING.NEMO +++ /dev/null @@ -1,13 +0,0 @@ -Cisco and Nokia have both published IPR notices regarding RFC 3963 -"Network Mobility (NEMO) Basic Support Protocol." - -Cisco has agreed not to assert its patents against any party agreeing with the -terms in its IPR notice. - -Likewise, Nokia has agreed not to assert its patents against Open Source -implementations of the specification. - -For further information, please read -licenses/cisco-ipr-draft-ietf-nemo-basic-support-03.txt and -licenses/nokia-ipr-draft-ietf-nemo-basic-support.txt. - diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/INSTALL b/openair3/PMIPv6/pmipv6-daemon-umip/INSTALL deleted file mode 100755 index 2935bb5294..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/INSTALL +++ /dev/null @@ -1,64 +0,0 @@ -1. Make sure you are running a kernel configured and compiled with - Mobile IPv6 support enabled. See INSTALL.kernel for more - information. - -2. Run './configure' in the main directory. You may give any - additional parameters (e.g. --prefix=/usr, defaults to /usr/local) - to configure. See './configure --help' for complete listing. - - * Debug messages - - By default, debug message printing is included in the compiled - program. To disable debugging messages use --disable-debug with - configure, otherwise debug messages will be compiled in. - - * Virtual debug terminal - - To enable virtual terminal for trouble shooting, use --enable-vt - with configure. It allows access to some of mip6d state at - runtime. Telnet to port 7777 on the localhost. You should get - a prompt "mip6d> ". If needed, the port can be changed with - daemon option --vt-service=PORT. Use 'help' to display - available commands. Virtual terminal should be disabled, unless - you are running a test environment. - - * Built-in crypto functions - - By default, OpenSSL is used to provide crypto functions. If the - library is not found, MIPL will be compiled to use its own built - in cryptographic functions. The default behavior may also be - overidden using the --with-builtin-crypto option with configure. - - Kernel headers are assumed to be found in /usr/include/linux. If - these are not the headers from your current kernel, please specify - alternative include path, e.g.: - - CPPFLAGS='-isystem /usr/src/linux/include' ./configure - - Note that you may need to specify additional include path, for - example on x86 architecture such as - '-isystem /usr/src/linux/arch/x86/include'. - -3. Run 'make'. If everything went ok, you should now have mip6d - compiled. - -4. Run 'make install'. Executables should now be installed and you - are ready to configure the node for Mobile IPv6. - - Please refer to configuration file manual page mip6d.conf(5) for - further information on how to configure your node. Also take a - look at the example configuration files in the extras directory. - - For comments about NEMO check README.NEMO. - - For comments about IPsec support check README.IPsec. - -5. A startup script - - To automatically start the Mobile IPv6 subsystem, you need to have - a startup script. Many distributions have their own style of - startup scripts. We try to provide some scripts in the extras - directory, but we cannot hope to support all possible variations. - See if your favorite distribution is supported. If not, you can - always write your own. We will be happy to accept contributed - startup scripts to be included in subsequent releases. diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/INSTALL.kernel b/openair3/PMIPv6/pmipv6-daemon-umip/INSTALL.kernel deleted file mode 100755 index 68a5e0aad4..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/INSTALL.kernel +++ /dev/null @@ -1,128 +0,0 @@ -Until Mobile IPv6 extensions are integrated in the mainline kernel, -you may have to replace your kernel with one that has Mobile IPv6 -support. This involves downloading kernel source and the -modifications to support Mobile IPv6, and patching, configuring, -compiling and last installing the new kernel in your system. - -If you have never patched or compiled a Linux kernel, you should take -a look at the Kernel HOWTO or Kernel Rebuild Guide available through -the Linux Documentation Project's site (http://www.tldp.org/). Be -careful, you can render your system unbootable quite easily. - -Kernel patches usually only work for the exact kernel version they -were made for. Therefore, you should not try to use mismatching -kernel and patch versions (unless you know what you are doing, and are -prepared to fix possible conflicts). - -All that said, here follows the instructions. - - -1. Check if your current kernel supports Mobile IPv6 extensions. To - do this we have provided a shell script to check it for you. Just - run: - - ./chkconf_kernel.sh - - This depends on /proc/config.gz to be available. It may tell you - one of three things: 1) your kernel does not support - /proc/config.gz, 2) your current running kernel does not support - MIPv6 extensions, or 3) your current kernel supports everything we - need. If the answer was three, you are very lucky and can just - skip rest of this document. Otherwise, proceed to the next step. - -2. Check if your current kernel sources support Mobile IPv6 - extensions. Again, you can use the same tool as in the previous - section. Now you just have to locate your kernel sources (usually - in /usr/src/linux) and supply that path to the script: - - ./chkconf_kernel.sh /usr/src/linux - - Now the script will tell you: 1) if support for Mobile IPv6 is - present or not, and 2) if it has been properly configured. If - support is there and it has been configured (and you know these - settings where used for your running kernel), again you are lucky - and may skip rest of this document. If the support was found, but - not configured, skip to step 5. For most of us, just continue on. - -3. Get the latest Mobile IPv6 kernel patch. Download the latest patch - from http://www.mobile-ipv6.org/. The patch will have a version - number that tells which kernel version it was built for. As said - before, you really should use that kernel version only. - - Next you should get a fresh kernel source tree. Usually, you - should not use the kernel tree that came with your distribution, - since distributors often apply their own patches to the tree, which - might make it incompatible with the Mobile IPv6 patch. Safest way - is to get your kernel source from kernel.org or some other reliable - source. Grab a source tree that has matching version number with - the Mobile IPv6 patch. - -4. Unpack kernel source tree and patch the kernel tree. Once you've - unpacked the source tree, change to the source tree's root - directory (e.g. /usr/src/linux). Apply the Mobile IPv6 patch - (replace mipv6-patch.gz with the actual path of the patch file you - downloaded earlier): - - zcat mipv6-patch.gz | patch -p1 - - You should get information about the patching process, but no error - messages. If no errors appeared, you are all done here and can - proceed to the next step. - -5. Now your kernel tree is ready for configuration. You may want to - copy your old .config from an old kernel source tree (or even - /proc/config.gz, if supported) to keep other configuration options - the same as before. Run your favorite 'make *config' (e.g. make - menuconfig). Make sure you have at least the following options - set: - - CONFIG_EXPERIMENTAL=y - CONFIG_SYSVIPC=y - CONFIG_PROC_FS=y - CONFIG_NET=y - CONFIG_INET=y - CONFIG_IPV6=y - CONFIG_IPV6_MIP6=y - CONFIG_XFRM=y - CONFIG_XFRM_USER=y - CONFIG_XFRM_SUB_POLICY=y - CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION=y - - The Home Agent and Mobile Node also need: - - CONFIG_IPV6_TUNNEL=y - CONFIG_IPV6_ADVANCED_ROUTER=y - CONFIG_IPV6_MULTIPLE_TABLES=y - - The Mobile Node also needs: - - CONFIG_IPV6_SUBTREES=y - - For some additional movement indicators on the Mobile Node you may set: - - CONFIG_ARPD=y - - For IPsec support you need at least: - - CONFIG_INET6_ESP=y - - If you plan to use IPsec tunnel mode you need: - - CONFIG_NET_KEY=y - CONFIG_NET_KEY_MIGRATE=y - - Do not turn CONFIG_IPV6_MIP6_DEBUG on, unless you are specifically - debugging the Mobile IPv6 extensions in the kernel. This options - will degrade system performance and swamp you with too many debug - messages. - - If you are unsure you got everything right, you can check your - configuration with the tool used in steps 1 and 2. - - ./chkconf_kernel.sh /usr/src/linux - - Fix any warnings and proceed to the next step. - -6. Compile and install the kernel. Proceed with the user space - installation described in INSTALL. Be sure to reboot to your new - kernel before trying to run the user space daemon. diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/Makefile.am b/openair3/PMIPv6/pmipv6-daemon-umip/Makefile.am deleted file mode 100755 index a96bf19ae7..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/Makefile.am +++ /dev/null @@ -1,16 +0,0 @@ -## $Id: Makefile.am 1.12 06/05/07 17:37:11+03:00 anttit@tcs.hut.fi $ -## Process this file with automake to produce Makefile.in - -AUTOMAKE_OPTIONS = gnu -EXTRA_DIST = BUGS INSTALL.kernel README.IPsec chkconf_kernel.sh \ - extras/example-cn.conf extras/example-ha.conf \ - extras/example-mn.conf licenses - -MAINTAINERCLEANFILES = aclocal.m4 config.guess config.sub \ - configure config.h.in \ - ylwrap Makefile.in $(DIST_ARCHIVES) - -if MISSING -LIBMISSING = libmissing -endif -SUBDIRS = $(LIBMISSING) libnetlink src man diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/NEWS b/openair3/PMIPv6/pmipv6-daemon-umip/NEWS deleted file mode 100755 index 983d846e53..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/NEWS +++ /dev/null @@ -1,36 +0,0 @@ -Changes since 2.0.1: - -* Fixed netlink message buffer overflow problem on machines with 64 - bit alignment. - -* Minor improvements to configure build checks. - -* The kernel version for the MIPv6 patch has been updated to 2.6.16. - -* Fixed hang some users reported on mip6d shutdown. - -* Fixed problem some users had with mip6d not receiving notification - about new CoAs. - -* Added new OptimisticHandoff option for MN. - -* Fixed problems with TAHI MN conformance tests when DHAAD is enabled. - -* Integrated IPSec reqid support (see README.IPsec) patch from USAGI. - -* Merged most of other smaller USAGI patches. - -* Let the kernel handle the MN Neighbor Unreachability Detection - probes to old routers. - -Main changes since 2.0: - -* Fixed broken virtual terminal support. - -* Fix memory leak that caused HA to run out of memory after a couple - of hundred BUs. - -* Use built in cryptographic functions if openssl crypto library isn't - available. - -* The kernel version for the MIPv6 patch has been updated to 2.6.15. diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/README b/openair3/PMIPv6/pmipv6-daemon-umip/README deleted file mode 100755 index a8f7bb813c..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/README +++ /dev/null @@ -1,38 +0,0 @@ -MIPL Mobile IPv6 for Linux - - MIPL Mobile IPv6 for Linux is an implementation of the Mobility - Support in IP version 6 (RFC 3775). - - It also supports Network Mobility with the NEMO Basic Support - implementation (RFC 3963). - - This user space part works together with Mobile IPv6 enabled Linux - kernels. See INSTALL and any other documents referred there for - installation instructions and required kernel compile options. - - MIPL Mobile IPv6 for Linux has been developed in the GO-Core Project - at the Helsinki University of Technology. See AUTHORS for core - development team and THANKS for complete listing of contributors. - The software is released under the GNU General Public License (see - COPYING for full license text). - -Official Site - - Official distribution site is mobile-ipv6.org. Main web site is - http://www.mobile-ipv6.org/, where you can find the latest news on - the project. Software can be downloaded using HTTP from the web - site. - -Mailing Lists - - Users may subscribe to mipl mailing list to discuss issues on using - the MIPL software. Developers interested in contributing to the - project should subscribe to mipl-devel mailing list. People who - just want the latest news on MIPL (announcements on new releases, - etc.) can subscribe to read-only mailing list called mipl-news. - - All mailing lists can be subscribed by sending "subscribe" as - subject to [listname]-request@mobile-ipv6.org (where [listname] is - mipl, mipl-devel or mipl-news) or with the web interface at - http://www.mobile-ipv6.org/cgi-bin/mailman/listinfo. List archives - are also available at the same location. diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/README.IPsec b/openair3/PMIPv6/pmipv6-daemon-umip/README.IPsec deleted file mode 100755 index e78c1e528a..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/README.IPsec +++ /dev/null @@ -1,259 +0,0 @@ -IPsec README for MIPL 2.0 - -Contents -======== - - 1. Introduction - 2. Limitation/Requirements - 3. How to Make IPsec Configuration - 3.1 HomeRegBinding - 3.2 MobPfxDisc - 3.3 TunnelHomeTesting - 3.4 TunnelMh - 3.5 TunnelPayload - 4. Manual Operation - 4.1. HA Operation - 4.2. MN Operation - 5. Automated Operation - - -1. Introduction -=============== - -Mobile IPv6 uses IPsec to protect mobility signaling messages that are -exchanged between MN and HA. - -In MIPL 2.0, mip6d manages the Security Policy (SP) entries required -for Mobile IPv6 operation by itself, while the Security Association -(SA) entries have to be provided by either (a) manual operation or (b) -automated operation (i.e., IKE). By automated operation, resiliency -against replay attack becomes stronger. - -Following is a summary of IPsec usage in MIPv6 operation specified in -RFC 3775. In MIPL 2.0, configuration of IPsec is specified in -configuration file of mip6d. - - +-------------------------------------------------+ - | Type | IPsec protocol/mode | Requirements | - |=================================================| - | BU/BA | ESP/Transport | Mandatory | - |----------+---------------------+----------------| - | MPS/MPA | ESP/Transport | Recommended | - |----------+---------------------+----------------| - | HoTI/HoT | ESP/Tunnel | Recommended | - |----------+---------------------+----------------| - | Payload | ESP/Tunnel | Optional | - +-------------------------------------------------+ - -A tunnel mode IPsec SA established between the MN and HA should hold -the end-point addresses of the tunnel, namely the care-of address -(CoA) of the MN and the HA's address as shown in the figure below. - - HA's - +----+ CoA address +----+ - | MN |=========(IPsec tunnel)=========| HA | - +----+ +----+ - -When the MN is at a foreign link and successfully makes the home -registration to its HA, the IPsec tunnel end-point address should be -set as the MN's CoA. On the other hand, when the MN is at home, the -end-point address (MN side) should be initialized with its home -address (HoA). - - -2. Limitation/Requirements -========================== - -The following are limitations of MIPL 2.0 when IPsec is enabled. - -Request ID (reqid) setting -- When there are several IPsec -transport/tunnel mode SPs configured between the MN and HA, (e.g. SP -entries for BU/BA and MPS/MPA) you need to add an identifier called -reqid to both the policies and SAs to make sure that the IPsec stack -can properly maintain association between SP and SA entries. - -IPsec tunnel mode and Route Optimization -- When the SP is set in a -way that any payload packet (protocol unspecified) is to be protected -by an IPsec tunnel, route optimization cannot be performed between the -MN and its peer. - - -3. How to Make the IPsec Configuration -====================================== - -First of all, in order to activate IPsec the following line should be -included in the configuration file. - - UseMnHaIPsec enabled; - -Next, IPsecPolicySet clause needs to be properly configured. The -following is an example of IPsecPolicySet. Note that you need to -specify IP addresses according to your home network configuration. -Each IPsecPolicy option enables protection of particular Mobility -Header (MH) messages. The following is the list of options for -IPsecPolicy: - - HomeRegBinding - MobPfxDisc - TunnelHomeTesting - TunnelMh - TunnelPayload - -Note that in order to enable IPsec tunnel for protecting MH messages, -any one of TunnelHomeTesting, TunnelMh, and TunnelPayload must be -specified. - -Each IPsecPolicySet clause can be defined if several HA addresses are -used. - - IPsecPolicySet { - HomeAgentAddress 3ffe:501:ffff:100::feed; - HomeAddress 3ffe:501:ffff:100::beef/64; - - IPsecPolicy HomeRegBinding UseESP 1 2; # BU/BA - IPsecPolicy MobPfxDisc UseESP 3 4; # MPS/MPA - IPsecPolicy TunnelHomeTesting UseESP 5 6; # HoTI/HoT - } - - -3.1 HomeRegBinding -================== - -This option enables protection of BU and BA messages in ESP transport -mode. When this option is specified along with MobPfxDisc option, a -pair of unique reqid should be specified ("1" and "2" in the example -below). - - IPsecPolicy HomeRegBinding UseESP 1 2; # BU/BA - -3.2 MobPfxDisc -============== - -This option enables protection of MPS and MPA messages in ESP -transport mode. When this option is specified along with -HomeRegBinding option, a pair of unique reqid should be specified ("3" -and "4" in the example below). - - IPsecPolicy MobPfxDisc UseESP 3 4; # MPS/MPA - -3.3 TunnelHomeTesting -===================== - -This options enables protection of HoTI and HoT messages in ESP tunnel -mode. Note that this configuration conforms to RFC 4877 in the sense -that MH type is specified in the traffic selector of SP entries. It -is recommended to enable this option for protecting HoTI and HoT -messages. When this option is specified along with the HomeRegBinding -option and/or the MobPfxDisc option, a pair of unique reqid should be -specified ("5" and "6" in the example below). - - IPsecPolicy TunnelHomeTesting UseESP 5 6; # HoTI/HoT - -3.4 TunnelMh -============ - -This option is EXPERIMENTAL. This option enables protection of HoTI -and HoT messages in ESP tunnel mode as similar to TunnelHomeTesting. -The difference is that MH type is not specified in the traffic -selector of SP entries. It should be noted that with this option, the -MN may fail to receive some MH messages sent from its peer to the home -address. More specifically, the MN would not be able to receive MH -messages that are sent in a route optimized manner. When this option -is specified along with the HomeRegBinding option and/or the -MobPfxDisc option, a pair of unique reqid should be specified ("5" and -"6" in the example below). - - IPsecPolicy TunnelMh UseESP 5 6; - -3.5 TunnelPayload -================= - -This option is EXPERIMENTAL. This option enables protection of all -the user traffic including MH messages. It should be noted that the -MN may fail to receive some MH messages sent from its peer to the home -address. There are also some other potential issues. When this -option is specified along with the HomeRegBinding option and/or the -MobPfxDisc option, a pair of unique reqid should be specified ("5" and -"6" in the example below). - - IPsecPolicy TunnelPayload UseESP 5 6; - - -4. Manual Operation -=================== - -After you make the IPsec configuration of the MIPL 2.0 daemon, you -should prepare scripts to manually configure the SAs on both the MN -and HA. Below is an example of an input file for setkey to manually -configure the SAs. The input file can be passed to setkey by "setkey --f sa.conf" with super-user privileges. For detailed information of -SA configuration, see the ipsec-tools documentation. - -sa.conf example: ----------------- -# 3ffe:501:ffff:100::beef is home address of MN -# and 3ffe:501:ffff:100::feed is address of HA - -# MN -> HA transport SA for BU -add 3ffe:501:ffff:100::beef 3ffe:501:ffff:100::feed esp 2000 - -u 1 - -m transport - -E des-cbc "TAHITEST" - -A hmac-sha1 "this is the test key" ; - -# HA -> MN transport SA for BA -add 3ffe:501:ffff:100::feed 3ffe:501:ffff:100::beef esp 2001 - -u 2 - -m transport - -E des-cbc "TAHITEST" - -A hmac-sha1 "this is the test key" ; - -# MN -> HA transport SA for MPS -add 3ffe:501:ffff:100::beef 3ffe:501:ffff:100::feed esp 2002 - -u 3 - -m transport - -E des-cbc "TAHITEST" - -A hmac-sha1 "this is the test key" ; - -# HA -> MN transport SA for MPA -add 3ffe:501:ffff:100::feed 3ffe:501:ffff:100::beef esp 2003 - -u 3 - -m transport - -E des-cbc "TAHITEST" - -A hmac-sha1 "this is the test key" ; - -# MN -> HA tunnel SA for HoTI -add 3ffe:501:ffff:100::beef 3ffe:501:ffff:100::feed esp 2004 - -m tunnel - -E des-cbc "TAHITEST" - -A hmac-sha1 "this is the test key" ; - -# HA -> MN tunnel SA for HoT -add 3ffe:501:ffff:100::feed 3ffe:501:ffff:100::beef esp 2005 - -m tunnel - -E des-cbc "TAHITEST" - -A hmac-sha1 "this is the test key" ; - -4.1. HA Operation -================= - -(1) make sure that you made the IPsec configuration in mip6d.conf properly -(2) manually configure SA with setkey -(3) run mip6d - -4.2. MN Operation -================= - -(1) make sure that you made the IPsec configuration in mip6d.conf properly -(2) manually configure SA with setkey -(3) run mip6d - - -5. Automated Operation -====================== - -In automated operation, SAs are automatically managed by an Internet Key -Exchange (IKE) daemon. With regard to the mip6d operation, there is -nothing special to be done in automated operation. - -However, there is no MIPv6-aware-IKE daemon publicly available yet. diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/README.NEMO b/openair3/PMIPv6/pmipv6-daemon-umip/README.NEMO deleted file mode 100755 index 7a91ab5e7c..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/README.NEMO +++ /dev/null @@ -1,18 +0,0 @@ -README for NEMO Basic Support ------------------------------ - -Here are a few things you need to keep in mind when setting up Network -Mobility: - -The MR is a router so you need to set -/proc/sys/net/ipv6/conf/all/forwarding to 1 to make sure it will forward -packets between its ingress and egress interfaces. - -With static routing the HA and other routers on the home link might need some -additional boot-strapping. If the MR has a physical home link that it may be -attached to, the other routers must be pre-configured with routes to the MR's -Mobile Network Prefixes via the MR's home address. This ensures packets will -be forwarded correctly also when the MR is at home. - -To be able to support NEMO DHAAD the HA needs to have AdvHomeAgentInfo and -AdvMobRtrSupportFlag turned on in radvd.conf. diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/THANKS b/openair3/PMIPv6/pmipv6-daemon-umip/THANKS deleted file mode 100755 index 3f88692816..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/THANKS +++ /dev/null @@ -1,23 +0,0 @@ -MIPL Mobile IPv6 for Linux has received a lot of support from the -research and open source communities. We would like to thank everyone -for the support and your contributions. The following list of -contributors is probably not even close to complete, and if you think -you should be on it and are not, just drop us a line. - - * Masahide Nakamura - * Noriaki Takamiya - * Masafumi Aramoto - * Hideaki Yoshifuji - * Shinta Sugimoto - * Gabor Fekete - * Venkata Jagana - * Krishna Kumar - * Romain Kuntz - * Benjamin Thery - * Sebastien Decugis - * Tushar Gohad - * Mark Huth - -Also, thanks to other original (1999-2000) MIPL Mobile IPv6 for Linux -team members, who are no longer involved with MIPL, Sami Kivisaari, -Toni Nykanen, Niklas Kampe, and Juha Mynttinen. diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/chkconf_kernel.sh b/openair3/PMIPv6/pmipv6-daemon-umip/chkconf_kernel.sh deleted file mode 100755 index 174333629f..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/chkconf_kernel.sh +++ /dev/null @@ -1,89 +0,0 @@ -#!/bin/sh - -# Simple shell script to check kernel configuration sanity -# for use with MIPL Mobile IPv6 -# -# Author: Antti Tuominen -# -# $Id: chkconf_kernel.sh 1.3 05/05/16 12:15:16+03:00 vnuorval@tcs.hut.fi $ -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version -# 2 of the License, or (at your option) any later version. - - -# Default settings for kernel -EXPERIMENTAL=y -SYSVIPC=y -PROC_FS=y -NET=y -NET_KEY=y -NET_KEY_MIGRATE=y -INET=y -IPV6=y -INET6_ESP=y -IPV6_TUNNEL=y -IPV6_MULTIPLE_TABLES=y -IPV6_SUBTREES=y -IPV6_MIP6=y -XFRM=y -XFRM_USER=y -XFRM_SUB_POLICY=y -INET6_XFRM_MODE_ROUTEOPTIMIZATION=y - -COMMON="EXPERIMENTAL SYSVIPC PROC_FS NET INET IPV6 IPV6_MIP6 \ - XFRM XFRM_USER XFRM_SUB_POLICY INET6_XFRM_MODE_ROUTEOPTIMIZATION" - -MNHA="IPV6_TUNNEL IPV6_MULTIPLE_TABLES" - -MN="IPV6_SUBTREES" - -IPSEC="INET6_ESP" - -PFKEY="NET_KEY NET_KEY_MIGRATE" - -TAGS="$COMMON $MNHA $MN $IPSEC $PFKEY" - -if [ "$1" = "" ] ; then - KERNELCONFIG="/proc/config.gz" - CAT=zcat -else - LINUX=$1 - KERNELCONFIG="$LINUX/.config" - CAT=cat -fi - -if [ ! -f $KERNELCONFIG ] ; then - echo "$KERNELCONFIG does not exist." - exit 1 -fi - -WARN=0; - -echo -echo "Checking kernel configuration..." -echo "Using $KERNELCONFIG"; - -for TAG in $TAGS ; do - VAL=`$CAT $KERNELCONFIG | sed -ne "/$TAG[= ]/s/^CONFIG_$TAG[= ]//gp"`; - eval "DFLT=\$$TAG"; - if [ "$VAL" != "$DFLT" ] ; then - if [ -z "$VAL" ] ; then - VERDICT="not supported"; - else - VERDICT="$VAL"; - fi - echo " Warning: CONFIG_$TAG should be set to $DFLT ($VERDICT)"; - let WARN=$WARN+1; - fi -done - -echo -if [ $WARN -eq 0 ] ; then - echo "All kernel options are as they should."; -else - echo "Above $WARN options may conflict with MIPL."; - echo "If you are not sure, use the recommended setting."; -fi -echo diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/configure.ac b/openair3/PMIPv6/pmipv6-daemon-umip/configure.ac deleted file mode 100755 index 7892533936..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/configure.ac +++ /dev/null @@ -1,269 +0,0 @@ -dnl $Id: configure.ac 1.45 06/05/07 17:37:11+03:00 anttit@tcs.hut.fi $ -dnl Process this file with autoconf to produce a configure script. - -AC_PREREQ(2.57) -AC_INIT([MIPL Mobile IPv6 for Linux], [2.0.2-umip-0.4], - [URL:http://www.mobile-ipv6.org/bugs/], mipv6) -AC_DEFINE_UNQUOTED([PACKAGE_COPYRIGHT], - ["Copyright (C) 2003-2006 Helsinki University of Technology, and others"], - [Define to the copyright statement]) - -AC_CONFIG_SRCDIR([src/main.c]) -AM_INIT_AUTOMAKE -AM_CONFIG_HEADER(config.h) - -AC_REVISION($Revision: 1.45 $) -AC_CANONICAL_HOST -AC_GNU_SOURCE -AC_PROG_CC -AC_PROG_RANLIB -AC_PROG_GCC_TRADITIONAL -AC_PROG_EGREP -AC_PROG_LEX -if test x$LEX = xflex; then - old_flex=`$LEX --version | $EGREP '2\.[[0-5]]\.[[0-4]]a?$'` - if test -n "$old_flex"; then - AC_MSG_WARN([ -*** scan.l requires newer version of flex. If you need to generate -*** scan.c, upgrade to the latest flex (>=2.5.31) version. -]) - fi -fi -AC_PROG_YACC -AC_PROG_AWK -AC_PROG_INSTALL -AC_PROG_LN_S -AC_PROG_MAKE_SET -AC_CHECK_PROG([SED], [sed], [sed]) -if test -z "$SED"; then - AC_MSG_ERROR([sed required but not found - -*** sed not found in the system. Install sed to proceed. -]) -fi -AC_CHECK_PROG([INDENT], [indent], [indent]) -if test -z "$INDENT"; then - AC_MSG_WARN([ -*** indent not found in the system. If you need to generate pmgr.c and -*** pmgr.h you need to install indent. -]) -fi - -dnl Checks for typedefs, structures, and compiler characteristics. -AC_C_CONST -AC_C_INLINE -AC_C_RESTRICT -AC_C_VOLATILE -AC_C_BIGENDIAN -AC_TYPE_PID_T -AC_TYPE_SIZE_T -AC_HEADER_TIME -AC_HEADER_STDBOOL - -AC_HEADER_STDC -AC_HEADER_SYS_WAIT -AC_CHECK_HEADERS([arpa/inet.h fcntl.h sys/ioctl.h sys/param.h time.h syslog.h]) - -dnl Checks for library functions. -AC_FUNC_FORK -AC_FUNC_SELECT_ARGTYPES -AC_TYPE_SIGNAL -AC_FUNC_VPRINTF -AC_FUNC_WAIT3 -AC_CHECK_FUNCS([memset select socket strdup strerror]) - -AC_MSG_NOTICE([*** checking for additional external libraries]) -AC_CHECK_FUNC([clock_gettime]) -if test $ac_cv_func_clock_gettime = no; then - AC_CHECK_LIB(rt, clock_gettime,, - [AC_MSG_ERROR([librt required but not found])]) -fi - -AC_CHECK_FUNC([dlopen]) -if test $ac_cv_func_dlopen = no; then - AC_CHECK_LIB(dl, dlopen,, - [AC_MSG_ERROR([libdl required but not found])]) -fi - -AC_CHECK_LIB(pthread, pthread_create, [], [ - AC_MSG_ERROR([POSIX thread library required but not found.]) -]) - -AC_CHECK_LIB(pcap, pcap_compile, [], [ - AC_MSG_ERROR([PCAP library required but not found.]) -]) -AC_CHECK_LIB(pcap, pcap_open_live, [], [ - AC_MSG_ERROR([PCAP library required but not found.]) -]) -AC_CHECK_LIB(pcap, pcap_lookupnet, [], [ - AC_MSG_ERROR([PCAP library required but not found.]) -]) -AC_CHECK_LIB(pcap, pcap_setfilter, [], [ - AC_MSG_ERROR([PCAP library required but not found.]) -]) -AC_CHECK_LIB(pcap, pcap_next, [], [ - AC_MSG_ERROR([PCAP library required but not found.]) -]) - -AC_ARG_WITH(pmip-use-radius, - AC_HELP_STRING([--with-pmip-use-radius],[use radius auth]), - [ac_cv_pmip_use_radius=$withval], [ac_cv_pmip_use_radius=no]) -if test x$ac_cv_pmip_use_radius = xyes; then - AC_CHECK_LIB(freeradius-client, rc_read_config, [], [ - AC_MSG_ERROR([freeradius-client library required but not found.]) - ]) - AC_CHECK_LIB(freeradius-client, rc_read_dictionary, [], [ - AC_MSG_ERROR([freeradius-client library required but not found.]) - ]) - AC_CHECK_LIB(freeradius-client, rc_avpair_add, [], [ - AC_MSG_ERROR([freeradius-client library required but not found.]) - ]) - AC_CHECK_LIB(freeradius-client, rc_avpair_get, [], [ - AC_MSG_ERROR([freeradius-client library required but not found.]) - ]) - AC_CHECK_LIB(freeradius-client, rc_avpair_free, [], [ - AC_MSG_ERROR([freeradius-client library required but not found.]) - ]) -fi - - - - -AC_CHECK_LIB(netlink, rtnl_talk) -AM_CONDITIONAL(LOCAL_NETLINK, test x$ac_cv_lib_netlink_rtnl_talk = xno) - -AC_ARG_WITH(builtin-crypto, - AC_HELP_STRING([--with-builtin-crypto],[use builtin crypto code]), - [ac_cv_use_builtin_crypto=$withval], [ac_cv_use_builtin_crypto=no]) -if test x$ac_cv_use_builtin_crypto = xyes; then - ac_cv_lib_crypto_HMAC_Init=no -else - AC_CHECK_LIB(crypto, HMAC_Init) - if test x$ac_cv_lib_crypto_HMAC_Init = xno; then - ac_cv_use_builtin_crypto=yes - fi -fi - -AC_MSG_NOTICE([*** checking for optional features]) -AC_CACHE_CHECK([whether to use builtin crypto], - [ac_cv_use_builtin_crypto], [ac_cv_use_builtin_crypto=no]) -AM_CONDITIONAL(BUILTIN_CRYPTO, test x$ac_cv_lib_crypto_HMAC_Init = xno) - -if test ac_cv_pmip_use_radius = xyes; then - AC_DEFINE([USE_RADIUS], [1], [USE RADIUS AUTH]) -fi -AC_CACHE_CHECK([whether to use RADIUS client library], - [ac_cv_pmip_use_radius], [ac_cv_pmip_use_radius=no]) -AM_CONDITIONAL(USE_RADIUS, test x$ac_cv_pmip_use_radius = xyes) - -dnl Option --disable-debug -AC_ARG_ENABLE(debug, - AC_HELP_STRING([--disable-debug],[disable debug messages and asserts]), - [ac_cv_enable_debug=$enableval], [ac_cv_enable_debug=yes]) -if test x$ac_cv_enable_debug = xno; then - AC_DEFINE([MIP6_NDEBUG], [1], [Disable debugging]) -fi -AC_CACHE_CHECK([whether to enable debug messages], - [ac_cv_enable_debug], [ac_cv_enable_debug=no]) - -dnl Option --enable-vt -AC_ARG_ENABLE(vt, - AC_HELP_STRING([--enable-vt],[enable virtual terminal for debugging]), - [ac_cv_enable_vt=$enableval], [ac_cv_enable_vt=no]) -if test x$ac_cv_enable_vt = xyes; then - AC_DEFINE([ENABLE_VT], [1], [Enable VT]) -fi -AC_CACHE_CHECK([whether to enable debug virtual terminal], - [ac_cv_enable_vt], [ac_cv_enable_vt=no]) -AM_CONDITIONAL(ENABLE_VT, test x$enable_vt = xyes) - -dnl Check Advanced IPv6 Socket API destination options header function availability -AC_MSG_NOTICE([*** checking inet6_opt for RFC3542: Advanced IPv6 Socket API support]) -AC_REPLACE_FUNCS(inet6_opt_find) - -dnl Check Advanced IPv6 Socket API routing header function availability -AC_MSG_NOTICE([*** checking inet6_rth for RFC3542: Advanced IPv6 Socket API support]) -dnl Check Extension to Socket API for MIPv6 availability -AC_MSG_NOTICE([*** checking RH2 for RFC4584: Extension to Socket API for MIPv6]) -AC_CHECK_DECLS([IPV6_RTHDR_TYPE_2], - [AC_REPLACE_FUNCS(inet6_rth_space) - AC_REPLACE_FUNCS(inet6_rth_init) - AC_REPLACE_FUNCS(inet6_rth_add) - AC_REPLACE_FUNCS(inet6_rth_getaddr) - AC_REPLACE_FUNCS(inet6_rth_gettype)], - [AC_LIBOBJ(inet6_rth_space) - AC_LIBOBJ(inet6_rth_init) - AC_LIBOBJ(inet6_rth_add) - AC_LIBOBJ(inet6_rth_getaddr) - AC_LIBOBJ(inet6_rth_gettype)],) - -dnl Check some functions are really missing so we don't build empty libmissing -AM_CONDITIONAL(MISSING, - test x$ac_cv_func_inet6_opt_find != xyes -o \ - x$ac_cv_func_inet6_rth_space != xyes -o \ - x$ac_cv_func_inet6_rth_init != xyes -o \ - x$ac_cv_func_inet6_rth_add != xyes -o \ - x$ac_cv_func_inet6_rth_getaddr != xyes -o \ - x$ac_cv_func_inet6_rth_gettype != xyes) - -AC_MSG_NOTICE([*** checking for Mobile IPv6 support in kernel headers]) -AC_CHECK_DECLS([IFA_F_HOMEADDRESS],, - [AC_MSG_ERROR([kernel headers do not support MIPv6. - -*** If working Linux kernel headers are not in the default include path, -*** please use CPPFLAGS variable to specify where they can be found -*** (e.g. CPPFLAGS="-isystem /usr/src/linux/include") -])], [#include -#include ]) - -AC_MSG_NOTICE([*** checking for Mobile IPv6 extensions in system headers]) -AC_CHECK_HEADERS([netinet/in.h netinet/ip6.h netinet/icmp6.h netinet/ip6mh.h]) -AC_CHECK_MEMBER(struct ip6_ext.ip6e_nxt, AC_DEFINE([HAVE_STRUCT_IP6_EXT],, - [Define to 1 if struct ip6_ext is in .]),, - [#include ]) -AC_CHECK_MEMBER(struct ip6_opt_home_address.ip6oha_type, - AC_DEFINE([HAVE_STRUCT_IP6_OPT_HOME_ADDRESS],, - [Define to 1 if struct ip6_opt_home_address is in .]),, - [#include ]) -AC_CHECK_MEMBER(struct ip6_rthdr2.ip6r2_nxt, - AC_DEFINE([HAVE_STRUCT_IP6_RTHDR2],, - [Define to 1 if struct ip6_rthdr2 is in .]),, - [#include ]) - -AC_CHECK_MEMBER(struct mip_dhaad_req.mip_dhreq_hdr, - AC_DEFINE([HAVE_STRUCT_MIP_DHAAD_REQ],, - [Define to 1 if RFC3775 compatible.]),, - [#include ]) -AC_CHECK_MEMBER(struct mip_dhaad_rep.mip_dhrep_hdr, - AC_DEFINE([HAVE_STRUCT_MIP_DHAAD_REP],, - [Define to 1 if RFC3775 compatible.]),, - [#include ]) -AC_CHECK_MEMBER(struct mip_prefix_solicit.mip_ps_hdr, - AC_DEFINE([HAVE_STRUCT_MIP_PREFIX_SOLICIT],, - [Define to 1 if RFC3775 compatible.]),, - [#include ]) -AC_CHECK_MEMBER(struct mip_prefix_advert.mip_pa_hdr, - AC_DEFINE([HAVE_STRUCT_MIP_PREFIX_ADVERT],, - [Define to 1 if RFC3775 compatible.]),, - [#include ]) -AC_CHECK_MEMBER(struct nd_opt_homeagent_info.nd_opt_hai_type, - AC_DEFINE([HAVE_STRUCT_ND_OPT_HOMEAGENT_INFO],, - [Define to 1 if RFC3775 compatible.]),, - [#include ]) - -AC_CONFIG_FILES([Makefile libnetlink/Makefile libmissing/Makefile src/Makefile man/Makefile]) -AC_OUTPUT - -AC_MSG_NOTICE([settings - -AC_PACKAGE_NAME version AC_PACKAGE_VERSION - - Use built-in crypto: ............ $ac_cv_use_builtin_crypto - Use OpenSSL crypto library: ..... $ac_cv_lib_crypto_HMAC_Init - Use RADIUS client library: ...... $ac_cv_pmip_use_radius - Enable debugging mode: .......... $ac_cv_enable_debug - Enable virtual debug terminal: .. $ac_cv_enable_vt - - Build target: $host - CPPFLAGS: $CPPFLAGS -]) diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/depcomp b/openair3/PMIPv6/pmipv6-daemon-umip/depcomp deleted file mode 100755 index 04701da536..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/depcomp +++ /dev/null @@ -1,530 +0,0 @@ -#! /bin/sh -# depcomp - compile a program generating dependencies as side-effects - -scriptversion=2005-07-09.11 - -# Copyright (C) 1999, 2000, 2003, 2004, 2005 Free Software Foundation, Inc. - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301, USA. - -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - -# Originally written by Alexandre Oliva . - -case $1 in - '') - echo "$0: No command. Try \`$0 --help' for more information." 1>&2 - exit 1; - ;; - -h | --h*) - cat <<\EOF -Usage: depcomp [--help] [--version] PROGRAM [ARGS] - -Run PROGRAMS ARGS to compile a file, generating dependencies -as side-effects. - -Environment variables: - depmode Dependency tracking mode. - source Source file read by `PROGRAMS ARGS'. - object Object file output by `PROGRAMS ARGS'. - DEPDIR directory where to store dependencies. - depfile Dependency file to output. - tmpdepfile Temporary file to use when outputing dependencies. - libtool Whether libtool is used (yes/no). - -Report bugs to . -EOF - exit $? - ;; - -v | --v*) - echo "depcomp $scriptversion" - exit $? - ;; -esac - -if test -z "$depmode" || test -z "$source" || test -z "$object"; then - echo "depcomp: Variables source, object and depmode must be set" 1>&2 - exit 1 -fi - -# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. -depfile=${depfile-`echo "$object" | - sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} -tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} - -rm -f "$tmpdepfile" - -# Some modes work just like other modes, but use different flags. We -# parameterize here, but still list the modes in the big case below, -# to make depend.m4 easier to write. Note that we *cannot* use a case -# here, because this file can only contain one case statement. -if test "$depmode" = hp; then - # HP compiler uses -M and no extra arg. - gccflag=-M - depmode=gcc -fi - -if test "$depmode" = dashXmstdout; then - # This is just like dashmstdout with a different argument. - dashmflag=-xM - depmode=dashmstdout -fi - -case "$depmode" in -gcc3) -## gcc 3 implements dependency tracking that does exactly what -## we want. Yay! Note: for some reason libtool 1.4 doesn't like -## it if -MD -MP comes after the -MF stuff. Hmm. - "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" - stat=$? - if test $stat -eq 0; then : - else - rm -f "$tmpdepfile" - exit $stat - fi - mv "$tmpdepfile" "$depfile" - ;; - -gcc) -## There are various ways to get dependency output from gcc. Here's -## why we pick this rather obscure method: -## - Don't want to use -MD because we'd like the dependencies to end -## up in a subdir. Having to rename by hand is ugly. -## (We might end up doing this anyway to support other compilers.) -## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like -## -MM, not -M (despite what the docs say). -## - Using -M directly means running the compiler twice (even worse -## than renaming). - if test -z "$gccflag"; then - gccflag=-MD, - fi - "$@" -Wp,"$gccflag$tmpdepfile" - stat=$? - if test $stat -eq 0; then : - else - rm -f "$tmpdepfile" - exit $stat - fi - rm -f "$depfile" - echo "$object : \\" > "$depfile" - alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz -## The second -e expression handles DOS-style file names with drive letters. - sed -e 's/^[^:]*: / /' \ - -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" -## This next piece of magic avoids the `deleted header file' problem. -## The problem is that when a header file which appears in a .P file -## is deleted, the dependency causes make to die (because there is -## typically no way to rebuild the header). We avoid this by adding -## dummy dependencies for each header file. Too bad gcc doesn't do -## this for us directly. - tr ' ' ' -' < "$tmpdepfile" | -## Some versions of gcc put a space before the `:'. On the theory -## that the space means something, we add a space to the output as -## well. -## Some versions of the HPUX 10.20 sed can't process this invocation -## correctly. Breaking it into two sed invocations is a workaround. - sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" - rm -f "$tmpdepfile" - ;; - -hp) - # This case exists only to let depend.m4 do its work. It works by - # looking at the text of this script. This case will never be run, - # since it is checked for above. - exit 1 - ;; - -sgi) - if test "$libtool" = yes; then - "$@" "-Wp,-MDupdate,$tmpdepfile" - else - "$@" -MDupdate "$tmpdepfile" - fi - stat=$? - if test $stat -eq 0; then : - else - rm -f "$tmpdepfile" - exit $stat - fi - rm -f "$depfile" - - if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files - echo "$object : \\" > "$depfile" - - # Clip off the initial element (the dependent). Don't try to be - # clever and replace this with sed code, as IRIX sed won't handle - # lines with more than a fixed number of characters (4096 in - # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; - # the IRIX cc adds comments like `#:fec' to the end of the - # dependency line. - tr ' ' ' -' < "$tmpdepfile" \ - | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ - tr ' -' ' ' >> $depfile - echo >> $depfile - - # The second pass generates a dummy entry for each header file. - tr ' ' ' -' < "$tmpdepfile" \ - | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ - >> $depfile - else - # The sourcefile does not contain any dependencies, so just - # store a dummy comment line, to avoid errors with the Makefile - # "include basename.Plo" scheme. - echo "#dummy" > "$depfile" - fi - rm -f "$tmpdepfile" - ;; - -aix) - # The C for AIX Compiler uses -M and outputs the dependencies - # in a .u file. In older versions, this file always lives in the - # current directory. Also, the AIX compiler puts `$object:' at the - # start of each line; $object doesn't have directory information. - # Version 6 uses the directory in both cases. - stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'` - tmpdepfile="$stripped.u" - if test "$libtool" = yes; then - "$@" -Wc,-M - else - "$@" -M - fi - stat=$? - - if test -f "$tmpdepfile"; then : - else - stripped=`echo "$stripped" | sed 's,^.*/,,'` - tmpdepfile="$stripped.u" - fi - - if test $stat -eq 0; then : - else - rm -f "$tmpdepfile" - exit $stat - fi - - if test -f "$tmpdepfile"; then - outname="$stripped.o" - # Each line is of the form `foo.o: dependent.h'. - # Do two passes, one to just change these to - # `$object: dependent.h' and one to simply `dependent.h:'. - sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile" - sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile" - else - # The sourcefile does not contain any dependencies, so just - # store a dummy comment line, to avoid errors with the Makefile - # "include basename.Plo" scheme. - echo "#dummy" > "$depfile" - fi - rm -f "$tmpdepfile" - ;; - -icc) - # Intel's C compiler understands `-MD -MF file'. However on - # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c - # ICC 7.0 will fill foo.d with something like - # foo.o: sub/foo.c - # foo.o: sub/foo.h - # which is wrong. We want: - # sub/foo.o: sub/foo.c - # sub/foo.o: sub/foo.h - # sub/foo.c: - # sub/foo.h: - # ICC 7.1 will output - # foo.o: sub/foo.c sub/foo.h - # and will wrap long lines using \ : - # foo.o: sub/foo.c ... \ - # sub/foo.h ... \ - # ... - - "$@" -MD -MF "$tmpdepfile" - stat=$? - if test $stat -eq 0; then : - else - rm -f "$tmpdepfile" - exit $stat - fi - rm -f "$depfile" - # Each line is of the form `foo.o: dependent.h', - # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. - # Do two passes, one to just change these to - # `$object: dependent.h' and one to simply `dependent.h:'. - sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" - # Some versions of the HPUX 10.20 sed can't process this invocation - # correctly. Breaking it into two sed invocations is a workaround. - sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | - sed -e 's/$/ :/' >> "$depfile" - rm -f "$tmpdepfile" - ;; - -tru64) - # The Tru64 compiler uses -MD to generate dependencies as a side - # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. - # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put - # dependencies in `foo.d' instead, so we check for that too. - # Subdirectories are respected. - dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` - test "x$dir" = "x$object" && dir= - base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` - - if test "$libtool" = yes; then - # With Tru64 cc, shared objects can also be used to make a - # static library. This mecanism is used in libtool 1.4 series to - # handle both shared and static libraries in a single compilation. - # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. - # - # With libtool 1.5 this exception was removed, and libtool now - # generates 2 separate objects for the 2 libraries. These two - # compilations output dependencies in in $dir.libs/$base.o.d and - # in $dir$base.o.d. We have to check for both files, because - # one of the two compilations can be disabled. We should prefer - # $dir$base.o.d over $dir.libs/$base.o.d because the latter is - # automatically cleaned when .libs/ is deleted, while ignoring - # the former would cause a distcleancheck panic. - tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 - tmpdepfile2=$dir$base.o.d # libtool 1.5 - tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 - tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 - "$@" -Wc,-MD - else - tmpdepfile1=$dir$base.o.d - tmpdepfile2=$dir$base.d - tmpdepfile3=$dir$base.d - tmpdepfile4=$dir$base.d - "$@" -MD - fi - - stat=$? - if test $stat -eq 0; then : - else - rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" - exit $stat - fi - - for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" - do - test -f "$tmpdepfile" && break - done - if test -f "$tmpdepfile"; then - sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" - # That's a tab and a space in the []. - sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" - else - echo "#dummy" > "$depfile" - fi - rm -f "$tmpdepfile" - ;; - -#nosideeffect) - # This comment above is used by automake to tell side-effect - # dependency tracking mechanisms from slower ones. - -dashmstdout) - # Important note: in order to support this mode, a compiler *must* - # always write the preprocessed file to stdout, regardless of -o. - "$@" || exit $? - - # Remove the call to Libtool. - if test "$libtool" = yes; then - while test $1 != '--mode=compile'; do - shift - done - shift - fi - - # Remove `-o $object'. - IFS=" " - for arg - do - case $arg in - -o) - shift - ;; - $object) - shift - ;; - *) - set fnord "$@" "$arg" - shift # fnord - shift # $arg - ;; - esac - done - - test -z "$dashmflag" && dashmflag=-M - # Require at least two characters before searching for `:' - # in the target name. This is to cope with DOS-style filenames: - # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. - "$@" $dashmflag | - sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" - rm -f "$depfile" - cat < "$tmpdepfile" > "$depfile" - tr ' ' ' -' < "$tmpdepfile" | \ -## Some versions of the HPUX 10.20 sed can't process this invocation -## correctly. Breaking it into two sed invocations is a workaround. - sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" - rm -f "$tmpdepfile" - ;; - -dashXmstdout) - # This case only exists to satisfy depend.m4. It is never actually - # run, as this mode is specially recognized in the preamble. - exit 1 - ;; - -makedepend) - "$@" || exit $? - # Remove any Libtool call - if test "$libtool" = yes; then - while test $1 != '--mode=compile'; do - shift - done - shift - fi - # X makedepend - shift - cleared=no - for arg in "$@"; do - case $cleared in - no) - set ""; shift - cleared=yes ;; - esac - case "$arg" in - -D*|-I*) - set fnord "$@" "$arg"; shift ;; - # Strip any option that makedepend may not understand. Remove - # the object too, otherwise makedepend will parse it as a source file. - -*|$object) - ;; - *) - set fnord "$@" "$arg"; shift ;; - esac - done - obj_suffix="`echo $object | sed 's/^.*\././'`" - touch "$tmpdepfile" - ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" - rm -f "$depfile" - cat < "$tmpdepfile" > "$depfile" - sed '1,2d' "$tmpdepfile" | tr ' ' ' -' | \ -## Some versions of the HPUX 10.20 sed can't process this invocation -## correctly. Breaking it into two sed invocations is a workaround. - sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" - rm -f "$tmpdepfile" "$tmpdepfile".bak - ;; - -cpp) - # Important note: in order to support this mode, a compiler *must* - # always write the preprocessed file to stdout. - "$@" || exit $? - - # Remove the call to Libtool. - if test "$libtool" = yes; then - while test $1 != '--mode=compile'; do - shift - done - shift - fi - - # Remove `-o $object'. - IFS=" " - for arg - do - case $arg in - -o) - shift - ;; - $object) - shift - ;; - *) - set fnord "$@" "$arg" - shift # fnord - shift # $arg - ;; - esac - done - - "$@" -E | - sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ - -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | - sed '$ s: \\$::' > "$tmpdepfile" - rm -f "$depfile" - echo "$object : \\" > "$depfile" - cat < "$tmpdepfile" >> "$depfile" - sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" - rm -f "$tmpdepfile" - ;; - -msvisualcpp) - # Important note: in order to support this mode, a compiler *must* - # always write the preprocessed file to stdout, regardless of -o, - # because we must use -o when running libtool. - "$@" || exit $? - IFS=" " - for arg - do - case "$arg" in - "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") - set fnord "$@" - shift - shift - ;; - *) - set fnord "$@" "$arg" - shift - shift - ;; - esac - done - "$@" -E | - sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile" - rm -f "$depfile" - echo "$object : \\" > "$depfile" - . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" - echo " " >> "$depfile" - . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile" - rm -f "$tmpdepfile" - ;; - -none) - exec "$@" - ;; - -*) - echo "Unknown depmode $depmode" 1>&2 - exit 1 - ;; -esac - -exit 0 - -# Local Variables: -# mode: shell-script -# sh-indentation: 2 -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "scriptversion=" -# time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-end: "$" -# End: diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/extras/PMIPv6_schema_example_1LMA_2MRs.jpg b/openair3/PMIPv6/pmipv6-daemon-umip/extras/PMIPv6_schema_example_1LMA_2MRs.jpg deleted file mode 100755 index 449f65f936..0000000000 Binary files a/openair3/PMIPv6/pmipv6-daemon-umip/extras/PMIPv6_schema_example_1LMA_2MRs.jpg and /dev/null differ diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/extras/UMIP0.4_ALL_UBUNTU_GEN_SEQ_DIAGRAM.10.04.sh b/openair3/PMIPv6/pmipv6-daemon-umip/extras/UMIP0.4_ALL_UBUNTU_GEN_SEQ_DIAGRAM.10.04.sh deleted file mode 100755 index 1c08fbadf3..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/extras/UMIP0.4_ALL_UBUNTU_GEN_SEQ_DIAGRAM.10.04.sh +++ /dev/null @@ -1,207 +0,0 @@ -#!/bin/bash -#################################################################################### -# This script starts automatically configures a PMIP demonstration. To run this -# script the target machines will need to have installed: -# - ssh (apt-get install ssh) -# * After installing the ssh, if there is no no public key spread, you are -# using different users per machine or even the users are not nis users, -# new public/private key pair should be created (ssh-keygen -t dsa) and -# this key pair copied over the target machines. This process should be -# done just once to enable the script to log in the other machines without -# demanding the password. -# (a@A:~> cat .ssh/id_rsa.pub | ssh b@B 'cat >> .ssh/authorized_keys' -# b@B's password:) -# -# * Pay attention to change the apropriate configuration fields in the top of -# this script and in the top of the clean_script.sh -# -# * The script is prepared to run as root in all the machines, this can also be -# changed through changing the USER variable, however, pay attention because -# the user will need to be suduer because some of the scripts needs to start -# root priviledged commands. The user should be sudoer in all the target -# machines. -# -# * The only option of the script is if one wants it to perform the version -# control or not. If you do not need/want to save the previous configuration -# you can pass the "no_copy" option to the script. In this way the script -# will neither change the configuration deploied in the machines nor save it. -# -# * This script is prepared to run for a 3 nodes setup (one LMA and two MRDs), -# however, appart from the last steps, the routing, to add a new PMIP machine is -# just a mater of adding new lines to the initial vectors (machine, LOG_FILE, -# OPEN_AIR_DIR, CONFIG_DIR, CONFIG_DIR_LOCAL, OPEN_AIR_CONF, PLATFORM_LOG_FILE) with the -# appropriate values. The routing, on the other hand, should be carefully -# made for the scenario at hand. -# -#################################################################################### - -########################### -# Configuration Variables -########################### -export PMIP_SRC_DIR=$( cd "$( dirname "$0" )/.." && pwd ) -export USER=root - -export LMA_Ind=0 -export MAG1_Ind=1 -export MAG2_Ind=2 - -export LMA=192.168.12.128 -export MAG1=192.168.12.126 -export MAG2=192.168.12.167 - -export NET_ROOT=192.168.12.0 - -export DEFAULT_ROUTER=192.168.12.100 - -export ALL_MULTICAST=ff00::0/8 - -# Accessible ssh addresses for the machines -machine[$LMA_Ind]=$LMA -machine[$MAG1_Ind]=$MAG1 -machine[$MAG2_Ind]=$MAG2 - -echo "######### Version Control ##########" -export run_version=`cat $PMIP_SRC_DIR/logs/.last_version.count` -let "run_version=$run_version+1" -echo $run_version>$PMIP_SRC_DIR/logs/.last_version.count - - -PMIP_SCRIPT[$LMA_Ind]="python $PMIP_SRC_DIR/extras/UMIP0.4_LMA_UBUNTU.10.04.py --pcap=yes --runversion=$run_version --pmipdir=$PMIP_SRC_DIR" -PMIP_SCRIPT[$MAG1_Ind]="python $PMIP_SRC_DIR/extras/UMIP0.4_MAG1_UBUNTU.10.04.py --pcap=yes --runversion=$run_version --pmipdir=$PMIP_SRC_DIR" -PMIP_SCRIPT[$MAG2_Ind]="python $PMIP_SRC_DIR/extras/UMIP0.4_MAG2_UBUNTU.10.04.py --pcap=yes --runversion=$run_version --pmipdir=$PMIP_SRC_DIR" - -PMIP_LOG[$LMA_Ind]=$PMIP_SRC_DIR/logs/LMA_PMIP.$run_version.log -PMIP_LOG[$MAG1_Ind]=$PMIP_SRC_DIR/logs/MAG1_PMIP.$run_version.log -PMIP_LOG[$MAG2_Ind]=$PMIP_SRC_DIR/logs/MAG2_PMIP.$run_version.log - -PCAP_FIRST_FILE_LOG[$LMA_Ind]=$PMIP_SRC_DIR/logs/lma2mags.$run_version.pcap -PCAP_FIRST_FILE_LOG[$MAG1_Ind]=$PMIP_SRC_DIR/logs/mag12ap.$run_version.pcap -PCAP_FIRST_FILE_LOG[$MAG2_Ind]=$PMIP_SRC_DIR/logs/mag22ap.$run_version.pcap - -PCAP_SECOND_FILE_LOG[$LMA_Ind]=$PMIP_SRC_DIR/logs/lma2cn.$run_version.pcap -PCAP_SECOND_FILE_LOG[$MAG1_Ind]=$PMIP_SRC_DIR/logs/mag12lma.$run_version.pcap -PCAP_SECOND_FILE_LOG[$MAG2_Ind]=$PMIP_SRC_DIR/logs/mag22lma.$run_version.pcap - -RADIUS_LOG=$PMIP_SRC_DIR/logs/RADIUS_PMIP.$run_version.log - -echo "" -echo "######### Clean config ##########" -index=0 -element_count=${#machine[@]} -while [ "$index" -lt "$element_count" ] -do - - #echo "ssh $USER@${machine[$index]} ip route add $DEFAULT_ROUTER dev eth0" - #ssh $USER@${machine[$index]} "ip route add $DEFAULT_ROUTER dev eth0" - #echo "$USER@${machine[$index]} ip route add default via $DEFAULT_ROUTER dev eth0" - #ssh $USER@${machine[$index]} "ip route add default via $DEFAULT_ROUTER dev eth0" - echo "ssh $USER@${machine[$index]} pkill -9 pmip6d" - ssh $USER@${machine[$index]} "pkill -9 pmip6d" - echo "ssh $USER@${machine[$index]} pkill -9 radiusd" - ssh $USER@${machine[$index]} "pkill -9 radiusd" - echo "ssh $USER@${machine[$index]} pkill -15 wireshark" - ssh $USER@${machine[$index]} "pkill -15 wireshark" - - let "index = $index + 1" -done - -echo "" -echo "############# Machines Setup ############# " -index=0 -element_count=3 -while [ "$index" -lt "$element_count" ] -do - - echo "ssh $USER@${machine[$index]} sudo echo 1 > /proc/sys/net/ipv4/ip_forward" - ssh $USER@${machine[$index]} "sudo echo 1 > /proc/sys/net/ipv4/ip_forward" - - echo "ssh $USER@${machine[$index]} sudo echo 0 > /proc/sys/net/ipv4/conf/all/rp_filter" - ssh $USER@${machine[$index]} "sudo echo 0 > /proc/sys/net/ipv4/conf/all/rp_filter" - - echo "ssh $USER@${machine[$index]} sudo echo 0 > /proc/sys/net/ipv4/conf/eth0/rp_filter" - ssh $USER@${machine[$index]} "sudo echo 0 > /proc/sys/net/ipv4/conf/eth0/rp_filter" - - echo "ssh $USER@${machine[$index]} sudo echo 0 > /proc/sys/net/ipv4/conf/eth1/rp_filter" - ssh $USER@${machine[$index]} "sudo echo 0 > /proc/sys/net/ipv4/conf/eth1/rp_filter" - - let "index = $index + 1" -done - - - echo "#############################################" - echo "# LAUCHING PMIP PROCESS ON ALL NODES" - echo "#############################################" - - index=0 - element_count=${#machine[@]} - while [ "$index" -lt "$element_count" ] - do - #if [ `ifconfig | grep ${machine[$index]} | wc -m` -eq 0 ]; then - echo "ssh $USER@${machine[$index]} ${PMIP_SCRIPT[$index]} > ${PMIP_LOG[$index]} 2>&1 &" - ssh $USER@${machine[$index]} "${PMIP_SCRIPT[$index]} > ${PMIP_LOG[$index]} 2>&1" & - if [ $index -eq $LMA_Ind ]; then - echo "ssh $USER@${machine[$LMA_Ind]} radiusd -X > $RADIUS_LOG 2>&1 &" - ssh -X $USER@${machine[$LMA_Ind]} "radiusd -X > $RADIUS_LOG 2>&1"& - #sleep 2 - fi - #else - # echo "${PMIP_SCRIPT[$index]} > ${PMIP_LOG[$index]} 2>&1 &" - # ${PMIP_SCRIPT[$index]} > ${PMIP_LOG[$index]} 2>&1 & - # sleep 1 - # #bash xterm -e tail -f ${PMIP_LOG[$index]} & - # if [ $index -eq $LMA_Ind ]; then - # echo "radiusd -X > $RADIUS_LOG 2>&1 &" - # radiusd -X > $RADIUS_LOG 2>&1 & - # sleep 2 - # fi - #fi - #sleep 1 - - let "index = $index + 1" - done - echo "" - - - read -p "Press any key to stop... " -n1 -s - echo "######### Clean config ##########" - index=0 - element_count=${#machine[@]} - while [ "$index" -lt "$element_count" ] - do - - echo "ssh $USER@${machine[$index]} pkill -15 pmip6d" - ssh $USER@${machine[$index]} "pkill -15 pmip6d" - echo "ssh $USER@${machine[$index]} pkill -9 pmip6d" - ssh $USER@${machine[$index]} "pkill -9 pmip6d" - echo "ssh $USER@${machine[$index]} pkill -15 radiusd" - ssh $USER@${machine[$index]} "pkill -15 radiusd" - echo "ssh $USER@${machine[$index]} pkill -9 radiusd" - ssh $USER@${machine[$index]} "pkill -9 radiusd" - echo "ssh $USER@${machine[$index]} pkill -15 wireshark" - ssh $USER@${machine[$index]} "pkill -15 wireshark" - - let "index = $index + 1" - done - - index=0 - element_count=3 - while [ "$index" -lt "$element_count" ] - do - echo " ${machine[$index]} - > $index" - - if [ `ifconfig | grep ${machine[$index]} | wc -m` -eq 0 ]; then - echo "scp -p $USER@${machine[$index]}:$PMIP_SRC_DIR/logs/*.pcap $PMIP_SRC_DIR/logs/" - scp -p $USER@${machine[$index]}:$PMIP_SRC_DIR/logs/*.pcap $PMIP_SRC_DIR/logs/ - echo "scp -p $USER@${machine[$index]}:$PMIP_SRC_DIR/logs/*.log $PMIP_SRC_DIR/logs/" - scp -p $USER@${machine[$index]}:$PMIP_SRC_DIR/logs/*.log $PMIP_SRC_DIR/logs/ - fi - let "index = $index + 1" - done - - $PMIP_SRC_DIR/extras/output-process/pmip_mscgen.sh $PMIP_SRC_DIR - - - - - - diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/extras/UMIP0.4_LMA_UBUNTU.10.04.py b/openair3/PMIPv6/pmipv6-daemon-umip/extras/UMIP0.4_LMA_UBUNTU.10.04.py deleted file mode 100755 index 79e4705246..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/extras/UMIP0.4_LMA_UBUNTU.10.04.py +++ /dev/null @@ -1,174 +0,0 @@ -#!/usr/bin/python -# -*- coding: utf-8 -*- - -import sys -import os -import subprocess -import getopt - -from subprocess import * -from netaddr import * - -g_path = os.getcwd() -g_path = os.path.dirname(sys.argv[0]) + "/.." -g_path = os.path.abspath(g_path) - -try: - opts, args = getopt.getopt(sys.argv[1:], "prd", ["pcap=", "runversion=", "pmipdir=", "cfile="]) -except getopt.GetoptError, err: - # print help information and exit: - print str(err) # will print something like "option -a not recognized" - sys.exit(2) - -g_pcap = "no" -g_run_version = "1" -g_config_file = "example-ha-lma.conf" - -for o,p in opts: - if o in ('-p','--pcap'): - g_pcap = p - elif o in ['-r','--runversion']: - g_run_version = str(p) - elif o in ['-d','--pmipdir']: - g_path = p - elif o in ['-c','--cfile']: - g_config_file = p - -############################################################################################ -g_file_config=g_path+"/extras/"+g_config_file -############################################################################################ - -print "Config file is : " + g_file_config - -g_RFC5213FixedMAGLinkLocalAddressOnAllAccessLinks = IPAddress('0::0') -g_RFC5213FixedMAGLinkLayerAddressOnAllAccessLinks = " " -g_LmaAddress = IPAddress('0::0') -g_LmaPmipNetworkDevice = "" -g_LmaCoreNetworkAddress = IPAddress('0::0') -g_LmaCoreNetworkDevice = "" -g_MagAddressIngress = [] -g_MagAddressEgress = [] -g_num_mags = 0 - -g_fhandle = open(g_file_config, 'r') -g_fcontent = g_fhandle.read() -g_fhandle.close() - -lines = g_fcontent.splitlines() -for line in lines: - line = line.rstrip().lstrip() - line = line.rstrip(';') - split = line.split(' ') - element = split[-1] - element = element.strip('"') - if line.startswith("#"): - continue - if 'RFC5213FixedMAGLinkLocalAddressOnAllAccessLinks' in line: - print line - g_RFC5213FixedMAGLinkLocalAddressOnAllAccessLinks = IPAddress(element) - - elif 'RFC5213FixedMAGLinkLayerAddressOnAllAccessLinks' in line: - print line - g_RFC5213FixedMAGLinkLayerAddressOnAllAccessLinks = element - elif 'LmaPmipNetworkAddress' in line: - print line - g_LmaAddress = IPAddress(element) - elif 'LmaPmipNetworkDevice' in line: - print line - g_LmaPmipNetworkDevice = element - elif 'LmaCoreNetworkAddress' in line: - print line - g_LmaCoreNetworkAddress = IPAddress(element) - elif 'LmaCoreNetworkDevice' in line: - print line - g_LmaCoreNetworkDevice = element - elif 'MagAddressIngress' in line: - print line - g_MagAddressIngress.append(IPAddress(element)) - elif 'MagAddressEgress' in line: - print line - g_MagAddressEgress.append(IPAddress(element)) - -for ip in g_MagAddressIngress: - if ip.format() != IPAddress('0::0').format(): - command = "ip -6 route del " + ip.format() + "/64" - print command - os.system(command) - g_num_mags = g_num_mags + 1 - - -for i in range (1 , 255): - command = "ip -6 tunnel del ip6tnl" + str(i) + " >/dev/null 2>&1" - os.system(command) - -command = "ip -6 addr del " + g_LmaAddress.format() + "/64 dev " + g_LmaPmipNetworkDevice -print command -os.system(command) - -command = "rmmod ip6_tunnel" -print command -os.system(command) -command = "rmmod tunnel6" -print command -os.system(command) - - - -command = "echo \"0\" > /proc/sys/net/ipv6/conf/all/accept_ra" -print command -os.system(command) -command = "echo \"0\" > /proc/sys/net/ipv6/conf/" + g_LmaPmipNetworkDevice + "/accept_ra" -print command -os.system(command) -command = "echo \"0\" > /proc/sys/net/ipv6/conf/" + g_LmaCoreNetworkDevice + "/accept_ra" -print command -os.system(command) -command = "echo \"1\" > /proc/sys/net/ipv6/conf/all/forwarding" -print command -os.system(command) - - - -command = "ip -6 addr add " + g_LmaAddress.format() + "/64 dev " + g_LmaPmipNetworkDevice -print command -os.system(command) -command = "ip -6 addr add " + g_LmaCoreNetworkAddress.format()+"/64 dev "+ g_LmaCoreNetworkDevice -print command -os.system(command) - -index = 0 -for ip_ingress in g_MagAddressIngress: - ip_egress = g_MagAddressEgress[index] - if ip_ingress.format() != IPAddress('0::0').format() and ip_egress.format() != IPAddress('0::0').format(): - command = "ip -6 route add " + ip_ingress.format() + "/64 via " + ip_egress.format() + " dev " + g_LmaPmipNetworkDevice - print command - os.system(command) - index += 1 - - -command = "modprobe ip6_tunnel" -print command -os.system(command) -command = "modprobe tunnel6" -print command -os.system(command) - -command = "pkill -9 mip6d" -print command -os.system(command) - -if g_pcap == "yes": - command = "xhost + ; export DISPLAY=:0.0 ; sync; wireshark -i "+g_LmaPmipNetworkDevice+" -k -n -w "+ g_path + "/logs/lma2mags."+g_run_version+".pcap &" - value = os.system(command) - print value - - command = "xhost + ; export DISPLAY=:0.0 ; sync; wireshark -i "+g_LmaCoreNetworkDevice+" -k -n -w "+ g_path + "/logs/lma2cn."+g_run_version+".pcap &" - value = os.system(command) - print value - - -# LD_LIBRARY_PATH for freeradius libs -command = 'export LD_LIBRARY_PATH=/usr/local/lib;/usr/local/sbin/mip6d -c ' + g_file_config -print command -subprocess.call(command, shell=True) - diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/extras/UMIP0.4_MAG_UBUNTU.10.04.py b/openair3/PMIPv6/pmipv6-daemon-umip/extras/UMIP0.4_MAG_UBUNTU.10.04.py deleted file mode 100755 index ad2ef0c817..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/extras/UMIP0.4_MAG_UBUNTU.10.04.py +++ /dev/null @@ -1,173 +0,0 @@ -#!/usr/bin/python -# -*- coding: utf-8 -*- - -import sys -import os -import subprocess -import getopt - -from subprocess import * -from netaddr import * - -g_path = os.getcwd() -g_path = os.path.dirname(sys.argv[0]) + "/.." -g_path = os.path.abspath(g_path) - -try: - opts, args = getopt.getopt(sys.argv[1:], "prdc", ["pcap=", "runversion=", "pmipdir=", "cfile="]) -except getopt.GetoptError, err: - # print help information and exit: - print str(err) # will print something like "option -a not recognized" - sys.exit(2) - -g_pcap = "no" -g_run_version = "1" -g_config_file = "" - -for o,p in opts: - if o in ('-p','--pcap'): - g_pcap = p - elif o in ['-r','--runversion']: - g_run_version = str(p) - elif o in ['-d','--pmipdir']: - g_path = p - elif o in ['-c','--cfile']: - g_config_file = str(p) - -############################################################################################ -g_file_config=g_path+"/extras/"+g_config_file -############################################################################################ - -print "Config file is : " + g_file_config - - -g_RFC5213FixedMAGLinkLocalAddressOnAllAccessLinks = IPAddress('0::0') -g_RFC5213FixedMAGLinkLayerAddressOnAllAccessLinks = " " -g_LmaAddress = IPAddress('0::0') -g_MagAddressIngress = IPAddress('0::0') -g_MagAddressEgress = IPAddress('0::0') -g_MagDeviceIngress = " " -g_MagDeviceEgress = " " - - -g_fhandle = open(g_file_config, 'r') -g_fcontent = g_fhandle.read() -g_fhandle.close() - -lines = g_fcontent.splitlines() -for line in lines: - line = line.rstrip().lstrip() - line = line.rstrip(';') - split = line.split(' ') - element = split[-1] - element = element.strip('"') - if 'RFC5213FixedMAGLinkLocalAddressOnAllAccessLinks' in line: - print line - g_RFC5213FixedMAGLinkLocalAddressOnAllAccessLinks = IPAddress(element) - - elif 'RFC5213FixedMAGLinkLayerAddressOnAllAccessLinks' in line: - print line - g_RFC5213FixedMAGLinkLayerAddressOnAllAccessLinks = element - elif 'LmaPmipNetworkAddress' in line: - print line - g_LmaAddress = IPAddress(element) - elif 'MagAddressIngress' in line: - print line - g_MagAddressIngress = IPAddress(element) - elif 'MagAddressEgress' in line: - print line - g_MagAddressEgress = IPAddress(element) - elif 'MagDeviceIngress' in line: - print line - g_MagDeviceIngress = element - elif 'MagDeviceEgress' in line: - print line - g_MagDeviceEgress = element - -command = "ifconfig " + g_MagDeviceIngress + " down" -print command -os.system(command) - -command = "macchanger -m " + g_RFC5213FixedMAGLinkLayerAddressOnAllAccessLinks + " " + g_MagDeviceIngress -print command -os.system(command) - -command = "ifconfig " + g_MagDeviceIngress + " up" -print command -os.system(command) - -command = "ip -6 addr del " + g_MagAddressEgress.format() + "/64 dev " + g_MagDeviceEgress + " > /dev/null 2>&1" -print command -os.system(command) - -command = "ip -6 addr del " + g_MagAddressIngress.format() + "/64 dev " + g_MagDeviceIngress + " > /dev/null 2>&1" -print command -os.system(command) - - -for i in range (1 , 255): - command = "ip -6 tunnel del ip6tnl" + str(i) + " >/dev/null 2>&1" - os.system(command) - -command = "rmmod ip6_tunnel > /dev/null 2>&1" -print command -os.system(command) -command = "rmmod tunnel6 > /dev/null 2>&1" -print command -os.system(command) - -command = "ip -6 addr add " + g_MagAddressEgress.format() + "/64 dev " + g_MagDeviceEgress -print command -os.system(command) - -command = "ip -6 addr add " + g_MagAddressIngress.format() + "/64 dev " + g_MagDeviceIngress -print command -os.system(command) - -command = "echo \"0\" > /proc/sys/net/ipv6/conf/all/accept_ra" -print command -os.system(command) -command = "echo \"0\" > /proc/sys/net/ipv6/conf/"+g_MagDeviceIngress+"/accept_ra" -print command -os.system(command) -command = "echo \"0\" > /proc/sys/net/ipv6/conf/"+g_MagDeviceEgress+"/accept_ra" -print command -os.system(command) -command = "echo \"1\" > /proc/sys/net/ipv6/conf/all/forwarding" -print command -os.system(command) - -command = "ip -6 route add to default via " + g_LmaAddress.format() + " dev " + g_MagDeviceEgress -print command -os.system(command) - -# just to resolve, avoid ping6 since it is used for sync -#command = "ssh -6 root@[" + g_LmaAddress.format() + "] \"ls /root\"" -#print command -#os.system(command) - - -command = "modprobe ip6_tunnel" -print command -os.system(command) -command = "modprobe tunnel6" -print command -os.system(command) - -command = "pkill -9 mip6d > /dev/null 2>&1" -print command -os.system(command) - -if g_pcap == "yes": - command = "xhost +; export DISPLAY=:0.0; sync; wireshark -i "+g_MagDeviceEgress+" -k -n -w "+ g_path + "/logs/mag12lma."+g_run_version+".pcap &" - value = os.system(command) - print value - - command = "xhost +; export DISPLAY=:0.0; sync; wireshark -i "+g_MagDeviceIngress+" -k -n -w "+ g_path + "/logs/mag12ap."+g_run_version+".pcap &" - value = os.system(command) - print value - -# LD_LIBRARY_PATH for freeradius libs -command = 'export LD_LIBRARY_PATH=/usr/local/lib;/usr/local/sbin/mip6d -c ' + g_file_config -subprocess.call(command, shell=True) - diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/extras/VIRTUAL_BOX/lma_guest_setup.bash b/openair3/PMIPv6/pmipv6-daemon-umip/extras/VIRTUAL_BOX/lma_guest_setup.bash deleted file mode 100755 index c0bfd555c0..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/extras/VIRTUAL_BOX/lma_guest_setup.bash +++ /dev/null @@ -1,222 +0,0 @@ -#!/bin/bash - - -GATEWAY=`cat /mnt/if_lma | grep gateway | sed 's/^.*gateway//' | sed 's/[\t ]//g;;/^$/d'` -NAMESERVER=`cat /mnt/if_lma | grep nameserver | sed 's/^.*nameserver//' | sed 's/[\t ]//g;;/^$/d'` - -MAC=`cat /mnt/if_lma | grep BRIDGED_MAC_ADDRESS | sed 's/^.*ADDRESS//' | sed 's/[\t ]//g;;/^$/d'` -MAC2=`expr substr $MAC 1 2`:`expr substr $MAC 3 2`:`expr substr $MAC 5 2`:`expr substr $MAC 7 2`:`expr substr $MAC 9 2`:`expr substr $MAC 11 2` -BRIDGE_IF_NAME=`cat /etc/udev/rules.d/70-persistent-net.rules | grep -i $MAC2 | sed 's/^.*NAME=//' | tr -d "\""` - -MAC=`cat /mnt/if_lma | grep PMIP_NETWORK_MAC_ADDRESS | sed 's/^.*ADDRESS//' | sed 's/[\t ]//g;;/^$/d'` -MAC2=`expr substr $MAC 1 2`:`expr substr $MAC 3 2`:`expr substr $MAC 5 2`:`expr substr $MAC 7 2`:`expr substr $MAC 9 2`:`expr substr $MAC 11 2` -PMIP_IF_NAME=`cat /etc/udev/rules.d/70-persistent-net.rules | grep -i $MAC2 | sed 's/^.*NAME=//' | tr -d "\""` - -cp -f /mnt/if_lma /etc/network/interfaces -sed -i "s/BRIDGED_IF_TO_FIND/"$BRIDGE_IF_NAME"/" /etc/network/interfaces -sed -i "s/PMIP_IF_TO_FIND/"$PMIP_IF_NAME"/" /etc/network/interfaces -# delete default route -ip r d `ip r s | grep default` -# delete old routes for the current ip address (routed to wrong interface) -ip r d `ip r s | grep eth0` -ip r d `ip r s | grep eth1` -ip r d `ip r s | grep eth2` -ip r d `ip r s | grep eth3` - - -cp /etc/resolv.conf /etc/resolv.conf.save -/etc/init.d/networking restart -ip r a default via $GATEWAY dev $BRIDGE_IF_NAME -echo "nameserver $NAMESERVER" >> /etc/resolv.conf -sync - -################################################# -# RETRIEVE PACKAGES FOR COMPILATION AND RUNNING # -################################################# -apt-get update -apt-get install -y subversion make gcc g++ indent openssl libssl-dev autoconf libpcap-dev bison byacc libtool flex - - -apt-get install -y libblas-dev libxml2 libxml2-dev libforms-bin libforms-dev libatlas-base-dev libatlas-dev -apt-get install -y libpcap-dev iproute-dev libc6-dev macchanger python-netaddr ndisc6 tshark - -cd /usr/local/src -cp -rupv /mnt/trunk.tar.bz2 . -sync -tar -xjf trunk.tar.bz2 -sync -########################################### -## FREE RADIUS SERVER INSTALLATION FOR LMA -########################################### -cd /usr/local/src -wget ftp://ftp.freeradius.org/pub/freeradius/freeradius-server-2.1.12.tar.bz2 -tar xjf freeradius-server-2.1.12.tar.bz2 -cd freeradius-server-2.1.12 -./configure -make -make install - -##################### -# ASN1C INSTALLATION -##################### -cd /usr/local/src/trunk/openair2/RRC/LITE/MESSAGES/asn1c -cp /mnt/asn1c* . -tar -xjf asn1c* -cd asn1c -./configure -make -make install - -######################################### -# GENERATE RRC MESSAGE STRUCTS FROM ASN1 -######################################### -cd /usr/local/src/trunk/openair2/RRC/LITE/MESSAGES -asn1c -gen-PER -fcompound-names -fnative-types -fskeletons-copy /usr/local/src/trunk/openair2/RRC/LITE/MESSAGES/asn1c/ASN1_files/EUTRA-RRC-Definitions-86.asn - - -######################################### -# INSTALL MODIFIED (IPV6) FREERADIUS CLIENT LIBRARY -######################################### -cd /usr/local/src/trunk/openair3/PMIPv6/freeradius-client-1.1.6/ -./configure -make -make install - -######################################### -# INSTALL PMIP DAEMON -######################################### -cd /usr/local/src/trunk/openair3/PMIPv6/pmipv6-daemon-umip/ -autoreconf -i -# --with-pmip-use-radius -./configure --enable-vt -make -make install - -######################################### -# BUIL PMIP KERNEL -######################################### -apt-get install -y linux-source -cd /usr/src/linux-source-* -tar xjf linux-source-* - -cd linux-source-* -make oldconfig && make prepare - -# NOW SET DEFAULT SETTING FOR KERNEL -KERNEL_CONFIG_FILE=.config - -# Default settings for kernel -EXPERIMENTAL=y -SYSVIPC=y -PROC_FS=y -NET=y -NET_KEY=y -NET_KEY_MIGRATE=y -INET=y -IPV6=y -INET6_ESP=y -IPV6_TUNNEL=y -IPV6_MULTIPLE_TABLES=y -IPV6_SUBTREES=y -IPV6_MIP6=y -XFRM=y -XFRM_USER=y -XFRM_SUB_POLICY=y -INET6_XFRM_MODE_ROUTEOPTIMIZATION=y - -COMMON="EXPERIMENTAL SYSVIPC PROC_FS NET INET IPV6 IPV6_MIP6 \ - XFRM XFRM_USER XFRM_SUB_POLICY INET6_XFRM_MODE_ROUTEOPTIMIZATION" - -MNHA="IPV6_TUNNEL IPV6_MULTIPLE_TABLES" - -MN="IPV6_SUBTREES" - -IPSEC="INET6_ESP" - -PFKEY="NET_KEY NET_KEY_MIGRATE" - -TAGS="$COMMON $MNHA $MN $IPSEC $PFKEY" - -if [ "$KERNEL_CONFIG_FILE" = "" ] ; then - echo "Please provide a path to the config file of the kernel source tree..." - exit -1 -fi - -if [ ! -f $KERNEL_CONFIG_FILE ] ; then - echo "The config file of the kernel source tree does not exist." - exit 1 -fi - -WARN=0; - -echo -echo "Checking kernel configuration..." -echo "Using $KERNEL_CONFIG_FILE"; - -for TAG in $TAGS ; do - CONFIG_TAG="CONFIG_"$TAG - #echo "CONFIG_TAG="$CONFIG_TAG "=" "${!TAG}" - sed -i "s/.*"$CONFIG_TAG" is not set.*/"$CONFIG_TAG"="${!TAG}"/" $KERNEL_CONFIG_FILE - sed -i "s/.*"$CONFIG_TAG"=.*/"$CONFIG_TAG"="${!TAG}"/" $KERNEL_CONFIG_FILE -done - -echo -echo "Checking kernel configuration..." -echo "Using $KERNEL_CONFIG_FILE"; - -for TAG in $TAGS ; do - VAL=`cat $KERNEL_CONFIG_FILE | sed -ne "/$TAG[= ]/s/^CONFIG_$TAG[= ]//gp"`; - eval "DFLT=\$$TAG"; - if [ "$VAL" != "$DFLT" ] ; then - if [ -z "$VAL" ] ; then - VERDICT="not supported"; - else - VERDICT="$VAL"; - fi - echo " Warning: CONFIG_$TAG should be set to $DFLT ($VERDICT)"; - let WARN=$WARN+1; - fi -done - -echo -if [ $WARN -eq 0 ] ; then - echo "All kernel options are as they should."; -else - echo "Above $WARN options may conflict with MIPL."; - echo "If you are not sure, use the recommended setting."; -fi -echo - -####################################### -# COMPILE AND INSTALL THE PMIP KERNEL -make -make modules_install -make install - -# no need to run grub-install - -####################################### -# update default entry in /boot/grub/grub.cfg - -#FIND EXACT VERSION OF KERNEL SOURCE CODE -LINE==`cat .config | grep Kernel\ Configuration | sed 's/\ Kernel.*//'` -export LINUX_SOURCE_VERSION=`echo ${LINE##* }` - -#FIND THE INDEX OF THE CORRESPONDING LINUX ENTRY IN grub.cfg... -ENTRY_INDEX=`cat /boot/grub/grub.cfg | grep menuentry | sed -e "/"$LINUX_SOURCE_VERSION"/,+10d" | wc -l` -echo $ENTRY_INDEX - -#...AND MAKE IT THE DEFAULT ENTRY -sed -i "s/set default=\"0\"/set default=\""$ENTRY_INDEX"\"/" /boot/grub/grub.cfg - -####################################### -# REBOOT ON PMIP KERNEL -####################################### -shutdown -P now - - - - - - - diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/extras/VIRTUAL_BOX/lma_vm_setup.bash b/openair3/PMIPv6/pmipv6-daemon-umip/extras/VIRTUAL_BOX/lma_vm_setup.bash deleted file mode 100755 index ca5bfc8740..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/extras/VIRTUAL_BOX/lma_vm_setup.bash +++ /dev/null @@ -1,372 +0,0 @@ -#!/bin/bash - -export VM_NAME='LMA-UBUNTU-12.04.2-server-i386' -export OS_INSTALL_IMAGE="/home/yang/Downloads/ubuntu-12.04.2-server-i386.iso" -export OS_TYPE="Ubuntu" - -export HOST_BRIDGED_IF_NAME="eth1" -export NAMESERVER="192.168.12.100" -export INTERNET_GATEWAY_FOR_GUESTS="192.168.14.145" -export DEFAULT_VIRTUAL_BOX_VM_PATH=$HOME/'VirtualBox VMs' -#export SVN_USERNAME=gauthier -export SVN_USERNAME= - -########################################### -# PMIP CONFIG FILES # -########################################### - -LMA_CONFIG_FILE=extras/example-lma-ovs.conf - -# -# +-----------+-----------------------------------------+---------------------+ -# | COMPUTER 1| +------+ | Physical | towards -# +-----------+ (nic1) |eth? +-----------------+ Network +----> -# | +-+------+--+ | Adapter | INTERNET_GATEWAY_FOR_GUESTS -# | | LMA | |HOST_BRIDGED_IF_NAME | -# | | (VM) | +---------------------+ -# | | | | -# | | | | -# | +--+------+-+ | -# | (nic2) |eth? | | -# | +--+---+ | -# | | | -# | | | -# | | "pmip_egress" | -# | +-----------+ | +-----------+ | -# | | MAG 1 +------+ | +------+ MAG 2 | | -# | | (VM) |eth? +------+-----------+eth? | (VM) | | -# | | +------+ internal +------+ | | -# | | PMIP | network | PMIP | | -# | | + | 192.168.33/24 | + | | -# | | LTE eNB 1 | | LTE eNB 2 | | -# | | LTE UEs | | LTE UEs | | -# | +-----------+ +-----------+ | -# | |oai0 / eth?| |oai0 / eth?| | -# | +------+----+ +------+----+ | -# | | "pmip_ingress1" "pmip_ingress2"| | -# | +---+--+ +---+--+ | -# | |oai0 | |oai0 | | -# | +-----------+ +-----------+ | -# | | UE1 | | UE2 | | -# | | (VM) | | (VM) | | -# | +-----------+ +-----------+ | -# | | -# | | -# +---------------------------------------------------------------------------+ -# - - - - -black='\E[30m' -red='\E[31m' -green='\E[32m' -yellow='\E[33m' -blue='\E[34m' -magenta='\E[35m' -cyan='\E[36m' -white='\E[37m' - -ROOT_UID=0 -E_NOTROOT=67 - -trim () -{ - echo "$1" | sed -n '1h;1!H;${;g;s/^[ \t]*//g;s/[ \t]*$//g;p;}' -} - - -cecho() # Color-echo -# arg1 = message -# arg2 = color -{ - local default_msg="No Message." - message=${1:-$default_msg} - color=${2:-$black} - echo -e "$color" - echo -n "$message" - tput sgr0 - return -} - -echo_error() { - local my_string="" - until [ -z "$1" ] - do - my_string="$my_string$1" - shift - done - cecho "$my_string" $red -} - -echo_warning() { - local my_string="" - until [ -z "$1" ] - do - my_string="$my_string$1" - shift - done - cecho "$my_string" $yellow -} - -echo_success() { - local my_string="" - until [ -z "$1" ] - do - my_string="$my_string$1" - shift - done - cecho "$my_string" $green -} - -bash_exec() { - output=$($1 2>&1) - result=$? - if [ $result -eq 0 ] - then - echo_success "$1" - else - echo_error "$1: $output" - fi -} - -set_openair() { - path=`pwd` - declare -i length_path - declare -i index - length_path=${#path} - - index=`echo $path | grep -b -o 'targets' | cut -d: -f1` - #echo ${path%$token*} - if [[ $index -lt $length_path && index -gt 0 ]] - then - declare -x OPENAIR_DIR - index=`expr $index - 1` - openair_path=`echo $path | cut -c1-$index` - #openair_path=`echo ${path:0:$index}` - export OPENAIR_DIR=$openair_path - export OPENAIR1_DIR=$openair_path/openair1 - export OPENAIR2_DIR=$openair_path/openair2 - export OPENAIR3_DIR=$openair_path/openair3 - export OPENAIR_TARGETS=$openair_path/targets - return 0 - fi - index=`echo $path | grep -b -o 'openair3' | cut -d: -f1` - if [[ $index -lt $length_path && index -gt 0 ]] - then - declare -x OPENAIR_DIR - index=`expr $index - 1` - openair_path=`echo $path | cut -c1-$index` - #openair_path=`echo ${path:0:$index}` - export OPENAIR_DIR=$openair_path - export OPENAIR1_DIR=$openair_path/openair1 - export OPENAIR2_DIR=$openair_path/openair2 - export OPENAIR3_DIR=$openair_path/openair3 - export OPENAIR_TARGETS=$openair_path/targets - return 0 - fi - return -1 -} - -set_openair -cecho "OPENAIR_DIR = $OPENAIR_DIR" $green -cecho "OPENAIR1_DIR = $OPENAIR1_DIR" $green -cecho "OPENAIR2_DIR = $OPENAIR2_DIR" $green -cecho "OPENAIR3_DIR = $OPENAIR3_DIR" $green -cecho "OPENAIR_TARGETS = $OPENAIR_TARGETS" $green - -if [ $OS_TYPE ]; then - echo_success "OS_TYPE: $OS_TYPE" -else - echo_error "OS_TYPE bash variable must be set to any of the following values (The type of OS you want to install on your VM): `VBoxManage list ostypes | grep ID | cut -d: -f2 | tr -d ' ' | sed -n -e 'H;${x;s/\n/,/g;s/^,//;p;}'`" - exit -1 -fi - -if [ $VM_NAME ]; then - echo_success "VM_NAME: $VM_NAME" -else - echo_error "VM_NAME bash variable must be set" - exit -1 -fi - -if [ $OS_INSTALL_IMAGE ]; then - if [[ ! -e $OS_INSTALL_IMAGE ]] ; then - echo_error "$OS_INSTALL_IMAGE: File not found" - exit -1 - else - echo_success "OS_INSTALL_IMAGE: $OS_INSTALL_IMAGE" - fi -else - echo_error "OS_INSTALL_IMAGE bash variable must be set to a valid ISO OS installation file" - exit -1 -fi - - - - -#cd /tmp -#wget http://download.virtualbox.org/virtualbox/4.1.12/Oracle_VM_VirtualBox_Extension_Pack-4.1.12.vbox-extpack -#sudo VBoxManage extpack install Oracle_VM_VirtualBox_Extension_Pack-4.1.12.vbox-extpack - -bash_exec "VBoxManage unregistervm $VM_NAME --delete" - -bash_exec "VBoxManage createvm --name $VM_NAME --register" - -UUID=`VBoxManage showvminfo $VM_NAME | grep Hardware\ UUID | cut -d: -f2 | tr -d ' '` - -echo UUID=$UUID - - -bash_exec "VBoxManage modifyvm $UUID --ostype $OS_TYPE --memory 512 --vram 12 --cpus 1 \ - --rtcuseutc on --cpuhotplug off --cpuexecutioncap 100 --pae on --hpet on \ - --hwvirtex on --nestedpaging on \ - --firmware bios --biosbootmenu messageandmenu --boot1 dvd --boot2 disk \ - --nic1 bridged --nic2 intnet --nic3 intnet --nic4 null \ - --nictype1 82545EM --nictype2 82545EM --nictype3 82545EM --nictype4 82545EM \ - --cableconnected1 on --cableconnected2 on --cableconnected3 on --cableconnected4 off \ - --bridgeadapter1 $HOST_BRIDGED_IF_NAME --intnet2 pmip_egress --intnet3 pmip_ingress \ - --audio none \ - --usb off --usbehci off" - - -BRIDGED_MAC_ADDRESS=`vboxmanage showvminfo $UUID | grep Bridged\ Interface | sed 's/^.*MAC:\ //' | cut --delimiter=',' -f 1` -PMIP_MAC_ADDRESS=`vboxmanage showvminfo $UUID | grep pmip_egress | sed 's/^.*MAC:\ //' | cut --delimiter=',' -f 1` - -mkdir "$DEFAULT_VIRTUAL_BOX_VM_PATH"/"$VM_NAME"/MKISO -rm -Rf "$DEFAULT_VIRTUAL_BOX_VM_PATH"/"$VM_NAME"/MKISO/* -cp lma_guest_setup.bash "$DEFAULT_VIRTUAL_BOX_VM_PATH"/"$VM_NAME"/MKISO/lma_guest_setup.bash - -################################## -# PARSE LMA CONFIGURATION FILE # -################################## -rm -f /tmp/source.txt -cat $OPENAIR3_DIR/PMIPv6/pmipv6-daemon-umip/$LMA_CONFIG_FILE | grep \; | tr -d ';' | sed -e 's/ */ /gp;' | sed -e "s/^ *//;s/ *$//;s/ \{1,\}/ /g" | tr ' ' '=' > /tmp/source.txt -source /tmp/source.txt - -IPV4_BYTE=1 - -echo "# This file describes the network interfaces available on your system" > "$DEFAULT_VIRTUAL_BOX_VM_PATH"/"$VM_NAME"/MKISO/if_lma -echo "# and how to activate them. For more information, see interfaces(5)." >> "$DEFAULT_VIRTUAL_BOX_VM_PATH"/"$VM_NAME"/MKISO/if_lma -echo " " >> "$DEFAULT_VIRTUAL_BOX_VM_PATH"/"$VM_NAME"/MKISO/if_lma -echo "# The loopback network interface" >> "$DEFAULT_VIRTUAL_BOX_VM_PATH"/"$VM_NAME"/MKISO/if_lma -echo "auto lo" >> "$DEFAULT_VIRTUAL_BOX_VM_PATH"/"$VM_NAME"/MKISO/if_lma -echo "iface lo inet loopback" >> "$DEFAULT_VIRTUAL_BOX_VM_PATH"/"$VM_NAME"/MKISO/if_lma -echo " " >> "$DEFAULT_VIRTUAL_BOX_VM_PATH"/"$VM_NAME"/MKISO/if_lma -echo "# BRIDGED_MAC_ADDRESS $BRIDGED_MAC_ADDRESS" >> "$DEFAULT_VIRTUAL_BOX_VM_PATH"/"$VM_NAME"/MKISO/if_lma -echo "auto BRIDGED_IF_TO_FIND" >> "$DEFAULT_VIRTUAL_BOX_VM_PATH"/"$VM_NAME"/MKISO/if_lma -echo "iface BRIDGED_IF_TO_FIND inet static" >> "$DEFAULT_VIRTUAL_BOX_VM_PATH"/"$VM_NAME"/MKISO/if_lma -echo "address 192.168.14.19" >> "$DEFAULT_VIRTUAL_BOX_VM_PATH"/"$VM_NAME"/MKISO/if_lma -echo "netmask 255.255.255.0" >> "$DEFAULT_VIRTUAL_BOX_VM_PATH"/"$VM_NAME"/MKISO/if_lma -echo "broadcast 192.168.14.255" >> "$DEFAULT_VIRTUAL_BOX_VM_PATH"/"$VM_NAME"/MKISO/if_lma -echo "gateway $INTERNET_GATEWAY_FOR_GUESTS" >> "$DEFAULT_VIRTUAL_BOX_VM_PATH"/"$VM_NAME"/MKISO/if_lma -echo "nameserver $NAMESERVER" >> "$DEFAULT_VIRTUAL_BOX_VM_PATH"/"$VM_NAME"/MKISO/if_lma -echo " " >> "$DEFAULT_VIRTUAL_BOX_VM_PATH"/"$VM_NAME"/MKISO/if_lma -echo "# PMIP_NETWORK_MAC_ADDRESS $PMIP_MAC_ADDRESS" >> "$DEFAULT_VIRTUAL_BOX_VM_PATH"/"$VM_NAME"/MKISO/if_lma -echo "auto PMIP_IF_TO_FIND" >> "$DEFAULT_VIRTUAL_BOX_VM_PATH"/"$VM_NAME"/MKISO/if_lma -echo "iface PMIP_IF_TO_FIND inet static" >> "$DEFAULT_VIRTUAL_BOX_VM_PATH"/"$VM_NAME"/MKISO/if_lma -echo "address 192.168.33.$IPV4_BYTE" >> "$DEFAULT_VIRTUAL_BOX_VM_PATH"/"$VM_NAME"/MKISO/if_lma -echo "netmask 255.255.255.0" >> "$DEFAULT_VIRTUAL_BOX_VM_PATH"/"$VM_NAME"/MKISO/if_lma -echo "broadcast 192.168.33.255" >> "$DEFAULT_VIRTUAL_BOX_VM_PATH"/"$VM_NAME"/MKISO/if_lma - -rm -f /tmp/source.txt -################################### -# GET OPENAIR CODE -################################### -cd "$DEFAULT_VIRTUAL_BOX_VM_PATH"/"$VM_NAME"/MKISO -if [[ "$SVN_USERNAME"x == "x" ]]; then - # svn read only - svn co http://svn.eurecom.fr/openair4G/trunk -else - # svn read/write - svn co http://svn.eurecom.fr/openairsvn/openair4G/trunk --username $SVN_USERNAME -fi - -tar -cjf trunk.tar.bz2 trunk -rm -Rf trunk -##################### -# GET ASN1C CODE -##################### -svn co https://asn1c.svn.sourceforge.net/svnroot/asn1c/trunk asn1c -tar -cjf asn1c.tar.bz2 asn1c -rm -Rf asn1c - - -chmod -Rf 777 "$DEFAULT_VIRTUAL_BOX_VM_PATH"/"$VM_NAME"/MKISO -mkisofs -max-iso9660-filenames -untranslated-filenames -no-iso-translate -o "$DEFAULT_VIRTUAL_BOX_VM_PATH"/"$VM_NAME"/cd_guest_setup.iso "$DEFAULT_VIRTUAL_BOX_VM_PATH"/"$VM_NAME"/MKISO/ - - - - - -VBoxManage createhd --filename "$DEFAULT_VIRTUAL_BOX_VM_PATH"/"$VM_NAME"/"$VM_NAME".vdi --size 16384 --format VDI - -VBoxManage storagectl $UUID --name "IDE Controller" --add ide --controller PIIX4 --hostiocache on --bootable on -VBoxManage storageattach $UUID --storagectl "IDE Controller" --type dvddrive --passthrough off --port 1 --device 0 --medium $OS_INSTALL_IMAGE - - - -VBoxManage storageattach $UUID --storagectl "IDE Controller" --type dvddrive --passthrough off --port 1 --device 1 --medium "$DEFAULT_VIRTUAL_BOX_VM_PATH"/"$VM_NAME"/cd_guest_setup.iso - -VBoxManage storagectl $UUID --name "SATA Controller" --add sata --controller IntelAhci --sataportcount 4 --hostiocache off --bootable on -VBoxManage storageattach $UUID --storagectl "SATA Controller" --type hdd --port 0 --device 0 --medium "$DEFAULT_VIRTUAL_BOX_VM_PATH"/"$VM_NAME"/"$VM_NAME".vdi - -echo_success '+---------------------------------------------------------------------------+' -echo_success '| LMA VIRTUAL MACHINE CREATED |' -echo_success '| NOW BOOT YOUR VIRTUAL MACHINE AND PROCEED TO OS INSTALLATION |' -echo_success '| YOU CAN CONFIGURE THE BRIDGED INTERFACE DURING THE INSTALLATION PROCESS |' -echo_success '| - SELECT "Configure network manually" WHEN PROMPED. |' -echo_success '| THEN THE NETWORK MAY NOT WORK, CINCE YOUR CONFIGURED NIC 1 INTERFACE |' -echo_success '| DOES NOT CORRESPOND TO ETH0, AND SO ON FOR NIC 2, NIC #... |' -echo_success '| BUT A LATER SRIPT WILL HANDLE THESE CASES AND WILL RECOVER FROM UDEV NET |' -echo_success '| RULES. |' -echo_success '| - Select keyboard: ... |' -echo_success '| - Primary network interface: |' -echo_success '| SELECT "eth0" |' -echo_success '| - Network configuration method: |' -echo_success '| SELECT "Configure network manually" |' -echo_success '| - IP address: An address valid on the network where your host bridged |' -echo_success '| interface is plugged. |' -echo_success '| - Gateway: A valid IP address of the internet gateway |' -echo_success '| - Nameserver adresses: DNS addresses (192.168.12.100 for EUR exp network) |' -echo_success '| - Hostname: lma |' -echo_success '| - Domainname: Leave the input field blank |' -echo_success '| - Full name for the new user: pmip |' -echo_success '| - User name for your account: pmip |' -echo_success '| - Choose a password for the new user: (whatever, linux by default) |' -echo_success '| - Encrypt your home directory: |' -echo_success '| SELECT "No" |' -echo_success '| - Partitionning method: SELECT "Guided - use entire disk" |' -echo_success '| - HTTP proxy information: LEAVE THE INPUT FIELD BLANK |' -echo_success '| - How do you want to manage upgrades on this system: |' -echo_success '| SELECT "No automatic updates" |' -echo_success '| - Choose software to install: |' -echo_success '| SELECT "OpenSSH server" |' -echo_success '| - Install the GRUB boot loader to the master boot record: |' -echo_success '| SELECT "Yes" |' -echo_success '|---------------------------------------------------------------------------|' -echo_warning '| AFTER THE BOOT OF THE O.S.: |' -echo_warning '| Login with the user account created during the installation process: |' -echo_success '| #lma login: pmip |' -echo_success '| #Password: |' -echo_success '| #pmip@lma:~$ sudo passwd |' -echo_success '| #[sudo] password for pmip: |' -echo_success '| #Enter new UNIX password: |' -echo_success '| #Retype new UNIX password: |' -echo_success '| #passwd: password updated successfully |' -echo_success '| #pmip@lma:~$ exit |' -echo_warning '| Loggin as root, |' -echo_success '| #lma login: root |' -echo_success '| #Password: |' -echo_warning '| Execute the bash script to install the PMIP environment and software: |' -echo_success '| #root@lma:~# mount -t iso9660 /dev/dvd /mnt |' -echo_success '| #mount: block device /dev/sr1 is write-protected, mounting read-only |' -echo_success '| #root@lma:~# /mnt/lma_guest_setup.bash |' -echo_success '| For kernel configuration prompted options, select the default or whatever.| -echo_warning '| Shutdown this VM: |' -echo_success '| #root@lma:~# shutdown -P now |' -echo_success '|---------------------------------------------------------------------------|' -echo_success '| THEN THIS VIRTUAL MACHINE WILL BE DUPLICATED FOR MAGS WITH THE SCRIPT |' -echo_success '| mag_vm_setup.bash |' -echo_success '+---------------------------------------------------------------------------+' - - diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/extras/VIRTUAL_BOX/mag_guest_setup.bash b/openair3/PMIPv6/pmipv6-daemon-umip/extras/VIRTUAL_BOX/mag_guest_setup.bash deleted file mode 100755 index 6b9dc0816a..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/extras/VIRTUAL_BOX/mag_guest_setup.bash +++ /dev/null @@ -1,51 +0,0 @@ -#!/bin/bash - - -GATEWAY=`cat /mnt/if_mag | grep gateway | sed 's/^.*gateway//' | sed 's/[\t ]//g;;/^$/d'` -NAMESERVER=`cat /mnt/if_mag | grep nameserver | sed 's/^.*nameserver//' | sed 's/[\t ]//g;;/^$/d'` - -# GET MAC ADDRESS IN FILE -MAC=`cat /mnt/if_mag | grep INGRESS_MAC_ADDRESS | sed 's/^.*ADDRESS//' | sed 's/[\t ]//g;;/^$/d'` -# BUILD MAC ADDRESS WITH ":" SEPARATOR -MAC2=`expr substr $MAC 1 2`:`expr substr $MAC 3 2`:`expr substr $MAC 5 2`:`expr substr $MAC 7 2`:`expr substr $MAC 9 2`:`expr substr $MAC 11 2` -# FIND THE CORRESPONDING INTERFACE NAME TO THE MAC ADDRESS -PMIP_INGRESS_IF_NAME=`cat /etc/udev/rules.d/70-persistent-net.rules | grep -i $MAC2 | sed 's/^.*NAME=//' | tr -d "\""` -echo "ADDRESS MAC INGRESS IF " $PMIP_INGRESS_IF_NAME "="$MAC2 - -# GET MAC ADDRESS IN FILE -MAC=`cat /mnt/if_mag | grep EGRESS_MAC_ADDRESS | sed 's/^.*ADDRESS//' | sed 's/[\t ]//g;;/^$/d'` -# BUILD MAC ADDRESS WITH ":" SEPARATOR -MAC2=`expr substr $MAC 1 2`:`expr substr $MAC 3 2`:`expr substr $MAC 5 2`:`expr substr $MAC 7 2`:`expr substr $MAC 9 2`:`expr substr $MAC 11 2` -# FIND THE CORRESPONDING INTERFACE NAME TO THE MAC ADDRESS -PMIP_EGRESS_IF_NAME=`cat /etc/udev/rules.d/70-persistent-net.rules | grep -i $MAC2 | sed 's/^.*NAME=//' | tr -d "\""` -echo "ADDRESS MAC EGRESS IF " $PMIP_EGRESS_IF_NAME "="$MAC2 - -cp -f /mnt/if_mag /etc/network/interfaces -sed -i "s/PMIP_INGRESS_IF_TO_FIND/"$PMIP_INGRESS_IF_NAME"/" /etc/network/interfaces -sed -i "s/PMIP_EGRESS_IF_TO_FIND/"$PMIP_EGRESS_IF_NAME"/" /etc/network/interfaces -# delete default route -ip r d `ip r s | grep default` -# delete old routes for the current ip address (routed to wrong interface) -ip r d `ip r s | grep eth0` -ip r d `ip r s | grep eth1` -ip r d `ip r s | grep eth2` -ip r d `ip r s | grep eth3` -ip r d `ip r s | grep eth4` -ip r d `ip r s | grep eth5` -ip r d `ip r s | grep eth6` -ip r d `ip r s | grep eth7` -ip r d `ip r s | grep eth8` - - -cp /etc/resolv.conf /etc/resolv.conf.save - -echo mag > /etc/hostname - - -/etc/init.d/networking restart -ip r a default via $GATEWAY dev $PMIP_EGRESS_IF_NAME -echo "nameserver $NAMESERVER" >> /etc/resolv.conf -sync - - - diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/extras/VIRTUAL_BOX/mag_vm_setup.bash b/openair3/PMIPv6/pmipv6-daemon-umip/extras/VIRTUAL_BOX/mag_vm_setup.bash deleted file mode 100755 index db1d363c2b..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/extras/VIRTUAL_BOX/mag_vm_setup.bash +++ /dev/null @@ -1,234 +0,0 @@ -#!/bin/bash - -############################################################### -export LMA_VM_NAME='LMA-UBUNTU-12.04.2-server-i386' -export MAG_VM_BASENAME='MAG-UBUNTU-12.04.2-server-i386' -MAG_CONFIG_FILES=( extras/example-mag1.conf extras/example-mag2.conf ) -export NAMESERVER="192.168.12.100" -############################################################### - -export DEFAULT_VIRTUAL_BOX_VM_PATH=$HOME/'VirtualBox VMs' - -black='\E[30m' -red='\E[31m' -green='\E[32m' -yellow='\E[33m' -blue='\E[34m' -magenta='\E[35m' -cyan='\E[36m' -white='\E[37m' - -ROOT_UID=0 -E_NOTROOT=67 - -trim () -{ - echo "$1" | sed -n '1h;1!H;${;g;s/^[ \t]*//g;s/[ \t]*$//g;p;}' -} - - -cecho() # Color-echo -# arg1 = message -# arg2 = color -{ - local default_msg="No Message." - message=${1:-$default_msg} - color=${2:-$black} - echo -e "$color" - echo -n "$message" - tput sgr0 - return -} - -echo_error() { - local my_string="" - until [ -z "$1" ] - do - my_string="$my_string$1" - shift - done - cecho "$my_string" $red -} - -echo_warning() { - local my_string="" - until [ -z "$1" ] - do - my_string="$my_string$1" - shift - done - cecho "$my_string" $yellow -} - -echo_success() { - local my_string="" - until [ -z "$1" ] - do - my_string="$my_string$1" - shift - done - cecho "$my_string" $green -} - -bash_exec() { - output=$($1 2>&1) - result=$? - if [ $result -eq 0 ] - then - echo_success "$1" - else - echo_error "$1: $output" - fi -} - -set_openair() { - path=`pwd` - declare -i length_path - declare -i index - length_path=${#path} - - index=`echo $path | grep -b -o 'targets' | cut -d: -f1` - #echo ${path%$token*} - if [[ $index -lt $length_path && index -gt 0 ]] - then - declare -x OPENAIR_DIR - index=`expr $index - 1` - openair_path=`echo $path | cut -c1-$index` - #openair_path=`echo ${path:0:$index}` - export OPENAIR_DIR=$openair_path - export OPENAIR1_DIR=$openair_path/openair1 - export OPENAIR2_DIR=$openair_path/openair2 - export OPENAIR3_DIR=$openair_path/openair3 - export OPENAIR_TARGETS=$openair_path/targets - return 0 - fi - index=`echo $path | grep -b -o 'openair3' | cut -d: -f1` - if [[ $index -lt $length_path && index -gt 0 ]] - then - declare -x OPENAIR_DIR - index=`expr $index - 1` - openair_path=`echo $path | cut -c1-$index` - #openair_path=`echo ${path:0:$index}` - export OPENAIR_DIR=$openair_path - export OPENAIR1_DIR=$openair_path/openair1 - export OPENAIR2_DIR=$openair_path/openair2 - export OPENAIR3_DIR=$openair_path/openair3 - export OPENAIR_TARGETS=$openair_path/targets - return 0 - fi - return -1 -} - -set_openair -cecho "OPENAIR_DIR = $OPENAIR_DIR" $green -cecho "OPENAIR1_DIR = $OPENAIR1_DIR" $green -cecho "OPENAIR2_DIR = $OPENAIR2_DIR" $green -cecho "OPENAIR3_DIR = $OPENAIR3_DIR" $green -cecho "OPENAIR_TARGETS = $OPENAIR_TARGETS" $green - -########################################################## -# BEFORE CLONING LMA VM, REMOVE ATTACHED DVD/CD MEDIUM -########################################################## - -LMA_UUID=`VBoxManage showvminfo $LMA_VM_NAME | grep Hardware\ UUID | cut -d: -f2 | tr -d ' '` -echo LMA_UUID=$LMA_UUID -ISO_UUID=`vboxmanage showvminfo $LMA_UUID | grep IDE\ Controller\ \(1\,\ 0\) | grep UUID | sed 's/^.*UUID:\ //' | sed 's/[\t() ]//g;;/^$/d'` -if [ "$ISO_UUID"x != x ]; then - bash_exec "vboxmanage closemedium dvd $ISO_UUID --delete" -fi -ISO_UUID=`vboxmanage showvminfo $LMA_UUID | grep IDE\ Controller\ \(1\,\ 1\) | grep UUID | sed 's/^.*UUID:\ //' | sed 's/[\t() ]//g;;/^$/d'` -if [ "$ISO_UUID"x != x ]; then - bash_exec "vboxmanage closemedium dvd $ISO_UUID --delete" -fi - - - -IPV4_BYTE=1 - -################################## -# PARSE MAG CONFIGURATION FILES # -################################## -for (( i = 0 ; i < ${#MAG_CONFIG_FILES[@]} ; i++ )) -do - MAG_VM_NAME=`echo $MAG_VM_BASENAME | sed "s/MAG/MAG"$i"/"` - echo "MAG_VM_NAME="$MAG_VM_NAME - ########################################################## - # CLONE LMA VM - ########################################################## - echo_success "Removing old MAG VM if any..." - bash_exec "VBoxManage unregistervm $MAG_VM_NAME --delete" - rm -Rf "$DEFAULT_VIRTUAL_BOX_VM_PATH"/"$MAG_VM_NAME"/* - - echo_success "Cloning LMA VM..." - bash_exec "VBoxManage clonevm $LMA_VM_NAME --mode machine --name $MAG_VM_NAME --register" - - MAG_UUID=`VBoxManage showvminfo $MAG_VM_NAME | grep Hardware\ UUID | cut -d: -f2 | tr -d ' '` - echo MAG_UUID=$MAG_UUID - - echo_success "Modifying MAG VM..." - bash_exec "VBoxManage modifyvm $MAG_UUID --nic1 intnet --nic2 intnet --nic3 null --nic4 null \ - --nictype1 82545EM --nictype2 82545EM --nictype3 82545EM --nictype4 82545EM \ - --cableconnected1 on --cableconnected2 on --cableconnected3 off --cableconnected4 off \ - --intnet1 pmip_egress --intnet2 pmip_ingress$i \ - --macaddress1 00123456789$i --macaddress2 001122334455 \ - --nictrace1 on --nictrace2 on \ - --nictracefile1 mag_egress$i --nictracefile1 mag_ingress$i " - - - PMIP_EGRESS_MAC_ADDRESS=` vboxmanage showvminfo $MAG_UUID | grep pmip_egress | sed 's/^.*MAC:\ //' | cut --delimiter=',' -f 1` - PMIP_INGRESS_MAC_ADDRESS=`vboxmanage showvminfo $MAG_UUID | grep pmip_ingress | sed 's/^.*MAC:\ //' | cut --delimiter=',' -f 1` - - mkdir "$DEFAULT_VIRTUAL_BOX_VM_PATH"/"$MAG_VM_NAME"/MKISO - rm -Rf "$DEFAULT_VIRTUAL_BOX_VM_PATH"/"$MAG_VM_NAME"/MKISO/* - cp mag_guest_setup.bash "$DEFAULT_VIRTUAL_BOX_VM_PATH"/"$MAG_VM_NAME"/MKISO/mag_guest_setup.bash - - - - let "IPV4_BYTE=IPV4_BYTE+1" - rm -f /tmp/source.txt - cat $OPENAIR3_DIR/PMIPv6/pmipv6-daemon-umip/${MAG_CONFIG_FILES[$i]} | grep \; | tr -d ';' | sed -e 's/ */ /gp;' | sed -e "s/^ *//;s/ *$//;s/ \{1,\}/ /g" | tr ' ' '=' > /tmp/source.txt - source /tmp/source.txt - - echo_success "Generating /etc/network/interface file..." - echo "# This file describes the network interfaces available on your system" > "$DEFAULT_VIRTUAL_BOX_VM_PATH"/"$MAG_VM_NAME"/MKISO/if_mag - echo "# and how to activate them. For more information, see interfaces(5)." >> "$DEFAULT_VIRTUAL_BOX_VM_PATH"/"$MAG_VM_NAME"/MKISO/if_mag - echo " " >> "$DEFAULT_VIRTUAL_BOX_VM_PATH"/"$MAG_VM_NAME"/MKISO/if_mag - echo "# The loopback network interface" >> "$DEFAULT_VIRTUAL_BOX_VM_PATH"/"$MAG_VM_NAME"/MKISO/if_mag - echo "auto lo" >> "$DEFAULT_VIRTUAL_BOX_VM_PATH"/"$MAG_VM_NAME"/MKISO/if_mag - echo "iface lo inet loopback" >> "$DEFAULT_VIRTUAL_BOX_VM_PATH"/"$MAG_VM_NAME"/MKISO/if_mag - echo " " >> "$DEFAULT_VIRTUAL_BOX_VM_PATH"/"$MAG_VM_NAME"/MKISO/if_mag - echo "# EGRESS_MAC_ADDRESS $PMIP_EGRESS_MAC_ADDRESS" >> "$DEFAULT_VIRTUAL_BOX_VM_PATH"/"$MAG_VM_NAME"/MKISO/if_mag - echo "auto PMIP_INGRESS_IF_TO_FIND" >> "$DEFAULT_VIRTUAL_BOX_VM_PATH"/"$MAG_VM_NAME"/MKISO/if_mag - echo "iface PMIP_INGRESS_IF_TO_FIND inet static" >> "$DEFAULT_VIRTUAL_BOX_VM_PATH"/"$MAG_VM_NAME"/MKISO/if_mag - echo "address 192.168.11.1" >> "$DEFAULT_VIRTUAL_BOX_VM_PATH"/"$MAG_VM_NAME"/MKISO/if_mag - echo "netmask 255.255.255.0" >> "$DEFAULT_VIRTUAL_BOX_VM_PATH"/"$MAG_VM_NAME"/MKISO/if_mag - echo "broadcast 192.168.11.255" >> "$DEFAULT_VIRTUAL_BOX_VM_PATH"/"$MAG_VM_NAME"/MKISO/if_mag - echo "gateway 192.168.33.1" >> "$DEFAULT_VIRTUAL_BOX_VM_PATH"/"$MAG_VM_NAME"/MKISO/if_mag - echo "nameserver $NAMESERVER" >> "$DEFAULT_VIRTUAL_BOX_VM_PATH"/"$MAG_VM_NAME"/MKISO/if_mag - echo " " >> "$DEFAULT_VIRTUAL_BOX_VM_PATH"/"$MAG_VM_NAME"/MKISO/if_mag - echo "# INGRESS_MAC_ADDRESS $PMIP_INGRESS_MAC_ADDRESS" >> "$DEFAULT_VIRTUAL_BOX_VM_PATH"/"$MAG_VM_NAME"/MKISO/if_mag - echo "auto PMIP_EGRESS_IF_TO_FIND" >> "$DEFAULT_VIRTUAL_BOX_VM_PATH"/"$MAG_VM_NAME"/MKISO/if_mag - echo "iface PMIP_EGRESS_IF_TO_FIND inet static" >> "$DEFAULT_VIRTUAL_BOX_VM_PATH"/"$MAG_VM_NAME"/MKISO/if_mag - echo "address 192.168.33.$IPV4_BYTE" >> "$DEFAULT_VIRTUAL_BOX_VM_PATH"/"$MAG_VM_NAME"/MKISO/if_mag - echo "netmask 255.255.255.0" >> "$DEFAULT_VIRTUAL_BOX_VM_PATH"/"$MAG_VM_NAME"/MKISO/if_mag - echo "broadcast 192.168.33.255" >> "$DEFAULT_VIRTUAL_BOX_VM_PATH"/"$MAG_VM_NAME"/MKISO/if_mag - rm -f /tmp/source.txt - - chmod -Rf 777 "$DEFAULT_VIRTUAL_BOX_VM_PATH"/"$MAG_VM_NAME"/MKISO - echo_success "Creating ISO file..." - mkisofs -max-iso9660-filenames -untranslated-filenames -no-iso-translate -o "$DEFAULT_VIRTUAL_BOX_VM_PATH"/"$MAG_VM_NAME"/cd_mag_guest_setup.iso "$DEFAULT_VIRTUAL_BOX_VM_PATH"/"$MAG_VM_NAME"/MKISO/ - - echo_success "Attaching ISO file as a DVD to VM..." - VBoxManage storageattach $MAG_UUID --storagectl "IDE Controller" --type dvddrive --passthrough off --port 1 --device 0 --medium "$DEFAULT_VIRTUAL_BOX_VM_PATH"/"$MAG_VM_NAME"/cd_mag_guest_setup.iso - -done - - -echo_success '+---------------------------------------------------------------------------+' -echo_warning '| AFTER THE BOOT OF THE O.S.: |' -echo_warning '| Login with the root account |' -echo_warning '| Execute the bash script to install the PMIP environment and software: |' -echo_success '| #root@lma:~# mount -t iso9660 /dev/dvd1 /mnt |' -echo_success '| #mount: block device /dev/sr0 is write-protected, mounting read-only |' -echo_success '| #root@lma:~# /mnt/mag_guest_setup.bash |' -echo_success '+---------------------------------------------------------------------------+' diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/extras/VIRTUAL_BOX/mn_guest_setup.bash b/openair3/PMIPv6/pmipv6-daemon-umip/extras/VIRTUAL_BOX/mn_guest_setup.bash deleted file mode 100755 index a44c0ced1e..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/extras/VIRTUAL_BOX/mn_guest_setup.bash +++ /dev/null @@ -1,56 +0,0 @@ -#!/bin/bash - - -GATEWAY=`cat /mnt/if_mn | grep gateway | sed 's/^.*gateway//' | sed 's/[\t ]//g;;/^$/d'` -NAMESERVER=`cat /mnt/if_mn | grep nameserver | sed 's/^.*nameserver//' | sed 's/[\t ]//g;;/^$/d'` - -# GET MAC ADDRESS IN FILE -MAC=`cat /mnt/if_mn | grep NIC1_MAC_ADDRESS | sed 's/^.*ADDRESS//' | sed 's/[\t ]//g;;/^$/d'` -# BUILD MAC ADDRESS WITH ":" SEPARATOR -MAC2=`expr substr $MAC 1 2`:`expr substr $MAC 3 2`:`expr substr $MAC 5 2`:`expr substr $MAC 7 2`:`expr substr $MAC 9 2`:`expr substr $MAC 11 2` -# FIND THE CORRESPONDING INTERFACE NAME TO THE MAC ADDRESS -NIC1_NAME=`cat /etc/udev/rules.d/70-persistent-net.rules | grep -i $MAC2 | sed 's/^.*NAME=//' | tr -d "\""` -echo "ADDRESS NIC1 " $NIC1_NAME "="$MAC2 - -# GET MAC ADDRESS IN FILE -MAC=`cat /mnt/if_mn | grep NIC2_MAC_ADDRESS | sed 's/^.*ADDRESS//' | sed 's/[\t ]//g;;/^$/d'` -# BUILD MAC ADDRESS WITH ":" SEPARATOR -MAC2=`expr substr $MAC 1 2`:`expr substr $MAC 3 2`:`expr substr $MAC 5 2`:`expr substr $MAC 7 2`:`expr substr $MAC 9 2`:`expr substr $MAC 11 2` -# FIND THE CORRESPONDING INTERFACE NAME TO THE MAC ADDRESS -NIC2_NAME=`cat /etc/udev/rules.d/70-persistent-net.rules | grep -i $MAC2 | sed 's/^.*NAME=//' | tr -d "\""` -echo "ADDRESS NIC2 " $NIC2_NAME "="$MAC2 - - - -cp -f /mnt/if_mn /etc/network/interfaces -sed -i "s/IF1_TO_FIND/"$NIC1_NAME"/" /etc/network/interfaces -sed -i "s/IF2_TO_FIND/"$NIC2_NAME"/" /etc/network/interfaces - - -# delete default route -ip r d `ip r s | grep default` -# delete old routes for the current ip address (routed to wrong interface) -ip r d `ip r s | grep eth0` > /dev/null 2>&1 -ip r d `ip r s | grep eth1` > /dev/null 2>&1 -ip r d `ip r s | grep eth2` > /dev/null 2>&1 -ip r d `ip r s | grep eth3` > /dev/null 2>&1 -ip r d `ip r s | grep eth4` > /dev/null 2>&1 -ip r d `ip r s | grep eth5` > /dev/null 2>&1 -ip r d `ip r s | grep eth6` > /dev/null 2>&1 -ip r d `ip r s | grep eth7` > /dev/null 2>&1 -ip r d `ip r s | grep eth8` > /dev/null 2>&1 -ip r d `ip r s | grep eth9` > /dev/null 2>&1 -ip r d `ip r s | grep eth10` > /dev/null 2>&1 - - -cp /etc/resolv.conf /etc/resolv.conf.save - -echo mn > /etc/hostname - - -/etc/init.d/networking restart -echo "nameserver $NAMESERVER" >> /etc/resolv.conf -sync - - - diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/extras/VIRTUAL_BOX/mn_vm_setup.bash b/openair3/PMIPv6/pmipv6-daemon-umip/extras/VIRTUAL_BOX/mn_vm_setup.bash deleted file mode 100755 index 8dd0561c0e..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/extras/VIRTUAL_BOX/mn_vm_setup.bash +++ /dev/null @@ -1,180 +0,0 @@ -#!/bin/bash - -############################################################### -export LMA_VM_NAME='LMA-UBUNTU-12.04.2-server-i386' -export MN_VM_NAME='MN-UBUNTU-12.04.2-server-i386' -export NAMESERVER="192.168.12.100" -############################################################### - -export DEFAULT_VIRTUAL_BOX_VM_PATH=$HOME/'VirtualBox VMs' - -black='\E[30m' -red='\E[31m' -green='\E[32m' -yellow='\E[33m' -blue='\E[34m' -magenta='\E[35m' -cyan='\E[36m' -white='\E[37m' - -ROOT_UID=0 -E_NOTROOT=67 - -trim () -{ - echo "$1" | sed -n '1h;1!H;${;g;s/^[ \t]*//g;s/[ \t]*$//g;p;}' -} - - -cecho() # Color-echo -# arg1 = message -# arg2 = color -{ - local default_msg="No Message." - message=${1:-$default_msg} - color=${2:-$black} - echo -e "$color" - echo -n "$message" - tput sgr0 - return -} - -echo_error() { - local my_string="" - until [ -z "$1" ] - do - my_string="$my_string$1" - shift - done - cecho "$my_string" $red -} - -echo_warning() { - local my_string="" - until [ -z "$1" ] - do - my_string="$my_string$1" - shift - done - cecho "$my_string" $yellow -} - -echo_success() { - local my_string="" - until [ -z "$1" ] - do - my_string="$my_string$1" - shift - done - cecho "$my_string" $green -} - -bash_exec() { - output=$($1 2>&1) - result=$? - if [ $result -eq 0 ] - then - echo_success "$1" - else - echo_error "$1: $output" - fi -} - -########################################################## -# BEFORE CLONING LMA VM, REMOVE ATTACHED DVD/CD MEDIUM -########################################################## - -LMA_UUID=`VBoxManage showvminfo $LMA_VM_NAME | grep Hardware\ UUID | cut -d: -f2 | tr -d ' '` -echo LMA_UUID=$LMA_UUID -ISO_UUID=`vboxmanage showvminfo $LMA_UUID | grep IDE\ Controller\ \(1\,\ 0\) | grep UUID | sed 's/^.*UUID:\ //' | sed 's/[\t() ]//g;;/^$/d'` -if [ "$ISO_UUID"x != x ]; then - bash_exec "vboxmanage closemedium dvd $ISO_UUID --delete" -fi -ISO_UUID=`vboxmanage showvminfo $LMA_UUID | grep IDE\ Controller\ \(1\,\ 1\) | grep UUID | sed 's/^.*UUID:\ //' | sed 's/[\t() ]//g;;/^$/d'` -if [ "$ISO_UUID"x != x ]; then - bash_exec "vboxmanage closemedium dvd $ISO_UUID --delete" -fi - - - -IPV4_BYTE=1 - - -########################################################## -# CLONE LMA VM -########################################################## -echo_success "Removing old MN VM if any..." -bash_exec "VBoxManage unregistervm $MN_VM_NAME --delete" -rm -Rf "$DEFAULT_VIRTUAL_BOX_VM_PATH"/"$MN_VM_NAME"/* - -echo_success "Cloning LMA VM..." -bash_exec "VBoxManage clonevm $LMA_VM_NAME --mode machine --name $MN_VM_NAME --register" - -MN_UUID=`VBoxManage showvminfo $MN_VM_NAME | grep Hardware\ UUID | cut -d: -f2 | tr -d ' '` -echo MN_UUID=$MN_UUID - -echo_success "Modifying MAG VM..." -bash_exec "VBoxManage modifyvm $MN_UUID --nic1 intnet --nic2 intnet \ - --nictype1 82545EM --nictype2 82545EM \ - --cableconnected1 on --cableconnected2 on \ - --intnet1 pmip_ingress0 --intnet2 pmip_ingress1 \ - --macaddress1 001122330011 --macaddress2 001122330022 \ - --nictrace1 on --nictrace2 on \ - --nictracefile1 mn_ingress0 --nictracefile2 mn_ingress1" - - - NIC1_MAC_ADDRESS=`vboxmanage showvminfo $MN_UUID | grep NIC\ 1 | sed 's/^.*MAC:\ //' | cut --delimiter=',' -f 1` - NIC2_MAC_ADDRESS=`vboxmanage showvminfo $MN_UUID | grep NIC\ 2 | sed 's/^.*MAC:\ //' | cut --delimiter=',' -f 1` - - - mkdir "$DEFAULT_VIRTUAL_BOX_VM_PATH"/"$MN_VM_NAME"/MKISO - rm -Rf "$DEFAULT_VIRTUAL_BOX_VM_PATH"/"$MN_VM_NAME"/MKISO/* - cp mn_guest_setup.bash "$DEFAULT_VIRTUAL_BOX_VM_PATH"/"$MN_VM_NAME"/MKISO/mn_guest_setup.bash - - - - let "IPV4_BYTE=IPV4_BYTE+1" - - echo_success "Generating /etc/network/interface file..." - echo "# This file describes the network interfaces available on your system" > "$DEFAULT_VIRTUAL_BOX_VM_PATH"/"$MN_VM_NAME"/MKISO/if_mn - echo "# and how to activate them. For more information, see interfaces(5)." >> "$DEFAULT_VIRTUAL_BOX_VM_PATH"/"$MN_VM_NAME"/MKISO/if_mn - echo " " >> "$DEFAULT_VIRTUAL_BOX_VM_PATH"/"$MN_VM_NAME"/MKISO/if_mn - echo "# The loopback network interface" >> "$DEFAULT_VIRTUAL_BOX_VM_PATH"/"$MN_VM_NAME"/MKISO/if_mn - echo "auto lo" >> "$DEFAULT_VIRTUAL_BOX_VM_PATH"/"$MN_VM_NAME"/MKISO/if_mn - echo "iface lo inet loopback" >> "$DEFAULT_VIRTUAL_BOX_VM_PATH"/"$MN_VM_NAME"/MKISO/if_mn - echo " " >> "$DEFAULT_VIRTUAL_BOX_VM_PATH"/"$MN_VM_NAME"/MKISO/if_mn - echo "# NIC1_MAC_ADDRESS $NIC1_MAC_ADDRESS" >> "$DEFAULT_VIRTUAL_BOX_VM_PATH"/"$MN_VM_NAME"/MKISO/if_mn - echo "auto IF1_TO_FIND" >> "$DEFAULT_VIRTUAL_BOX_VM_PATH"/"$MN_VM_NAME"/MKISO/if_mn - echo "iface IF1_TO_FIND inet static" >> "$DEFAULT_VIRTUAL_BOX_VM_PATH"/"$MN_VM_NAME"/MKISO/if_mn - echo "address 192.168.11.$IPV4_BYTE" >> "$DEFAULT_VIRTUAL_BOX_VM_PATH"/"$MN_VM_NAME"/MKISO/if_mn - echo "netmask 255.255.255.0" >> "$DEFAULT_VIRTUAL_BOX_VM_PATH"/"$MN_VM_NAME"/MKISO/if_mn - echo "broadcast 192.168.11.255" >> "$DEFAULT_VIRTUAL_BOX_VM_PATH"/"$MN_VM_NAME"/MKISO/if_mn - echo "gateway 192.168.11.1" >> "$DEFAULT_VIRTUAL_BOX_VM_PATH"/"$MN_VM_NAME"/MKISO/if_mn - echo "nameserver $NAMESERVER" >> "$DEFAULT_VIRTUAL_BOX_VM_PATH"/"$MN_VM_NAME"/MKISO/if_mn - echo " " >> "$DEFAULT_VIRTUAL_BOX_VM_PATH"/"$MN_VM_NAME"/MKISO/if_mn - let "IPV4_BYTE=IPV4_BYTE+1" - echo "# NIC2_MAC_ADDRESS $NIC2_MAC_ADDRESS" >> "$DEFAULT_VIRTUAL_BOX_VM_PATH"/"$MN_VM_NAME"/MKISO/if_mn - echo "auto IF2_TO_FIND" >> "$DEFAULT_VIRTUAL_BOX_VM_PATH"/"$MN_VM_NAME"/MKISO/if_mn - echo "iface IF2_TO_FIND inet static" >> "$DEFAULT_VIRTUAL_BOX_VM_PATH"/"$MN_VM_NAME"/MKISO/if_mn - echo "address 192.168.11.$IPV4_BYTE" >> "$DEFAULT_VIRTUAL_BOX_VM_PATH"/"$MN_VM_NAME"/MKISO/if_mn - echo "netmask 255.255.255.0" >> "$DEFAULT_VIRTUAL_BOX_VM_PATH"/"$MN_VM_NAME"/MKISO/if_mn - echo "broadcast 192.168.11.255" >> "$DEFAULT_VIRTUAL_BOX_VM_PATH"/"$MN_VM_NAME"/MKISO/if_mn - echo " " >> "$DEFAULT_VIRTUAL_BOX_VM_PATH"/"$MN_VM_NAME"/MKISO/if_mn - - - chmod -Rf 777 "$DEFAULT_VIRTUAL_BOX_VM_PATH"/"$MN_VM_NAME"/MKISO - echo_success "Creating ISO file..." - mkisofs -max-iso9660-filenames -untranslated-filenames -no-iso-translate -o "$DEFAULT_VIRTUAL_BOX_VM_PATH"/"$MN_VM_NAME"/cd_mn_guest_setup.iso "$DEFAULT_VIRTUAL_BOX_VM_PATH"/"$MN_VM_NAME"/MKISO/ - - echo_success "Attaching ISO file as a DVD to VM..." - VBoxManage storageattach $MN_UUID --storagectl "IDE Controller" --type dvddrive --passthrough off --port 1 --device 0 --medium "$DEFAULT_VIRTUAL_BOX_VM_PATH"/"$MN_VM_NAME"/cd_mn_guest_setup.iso - - -echo_success '+---------------------------------------------------------------------------+' -echo_warning '| AFTER THE BOOT OF THE O.S.: |' -echo_warning '| Login with the root account |' -echo_warning '| Execute the bash script to install the PMIP environment and software: |' -echo_success '| #root@lma:~# mount -t iso9660 /dev/dvd1 /mnt |' -echo_success '| #mount: block device /dev/sr0 is write-protected, mounting read-only |' -echo_success '| #root@lma:~# /mnt/mn_guest_setup.bash |' -echo_success '+---------------------------------------------------------------------------+' diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/extras/example-cn.conf b/openair3/PMIPv6/pmipv6-daemon-umip/extras/example-cn.conf deleted file mode 100755 index 50ebcf88c8..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/extras/example-cn.conf +++ /dev/null @@ -1,9 +0,0 @@ -# This is an example of mip6d Correspondent Node configuration file - -NodeConfig CN; - -## If set to > 0, will not detach from tty -DebugLevel 10; - -## Support route optimization with MNs -DoRouteOptimizationCN enabled; diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/extras/example-ha-lma.conf b/openair3/PMIPv6/pmipv6-daemon-umip/extras/example-ha-lma.conf deleted file mode 100755 index ff2f0961eb..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/extras/example-ha-lma.conf +++ /dev/null @@ -1,91 +0,0 @@ -# This is an example of mip6d Local Mobility Anchor configuration file - - -NodeConfig HA; - -## If set to > 0, will not detach from tty -DebugLevel 10; - -## List of interfaces where we serve as Home Agent -Interface "eth1"; -#Interface "eth0"; - -## -## IPsec configuration -## - -UseMnHaIPsec enabled; - -## Key Management Mobility Capability -#KeyMngMobCapability disabled; - -IPsecPolicySet { - HomeAgentAddress 3ffe:2620:6:1::1; - - HomeAddress 3ffe:2620:6:1::1234/64; - HomeAddress 3ffe:2620:6:1::1235/64; - - IPsecPolicy Mh UseESP; - IPsecPolicy TunnelMh UseESP; - -# IPsecPolicy Mh UseESP 1 2; -# IPsecPolicy ICMP UseESP 5; -# IPsecPolicy TunnelMh UseESP 3 4; -} - - - - - -## If set to > 0, will not detach from tty - -DoRouteOptimizationCN disabled; -DoRouteOptimizationMN disabled; -UseMnHaIPsec disabled; -KeyMngMobCapability disabled; - - -ProxyMipLma "LMA testbed n1" { - RFC5213TimestampBasedApproachInUse enabled; - RFC5213MobileNodeGeneratedTimestampInUse disabled; - RFC5213FixedMAGLinkLocalAddressOnAllAccessLinks fe80::211:22ff:fe33:4455; - RFC5213FixedMAGLinkLayerAddressOnAllAccessLinks 00:11:22:33:44:55; - -## Value in milliseconds - RFC5213MinDelayBeforeBCEDelete 10000; - -## Value in milliseconds - RFC5213MaxDelayBeforeNewBCEAssign 1500; - -## Value in milliseconds - RFC5213TimestampValidityWindow 300; - - LmaPmipNetworkAddress 2001:100::1; - LmaPmipNetworkDevice "eth0"; - LmaCoreNetworkAddress 2001:2::1; - LmaCoreNetworkDevice "eth1"; -## Value in milliseconds - RetransmissionTimeOut 500; - MaxMessageRetransmissions 5; - TunnelingEnabled enabled; -## DynamicTunnelingEnabled enabled; - DynamicTunnelingEnabled disabled; - MaxDelayBeforeDynamicTunnelingDelete 60000; - -## MAG 1 (warning line defining MagAddressIngress must be before line defining MagAddressEgress) - MagAddressIngress 2001:1::1; - MagAddressEgress 2001:100::2; - -## MAG 2 (warning line defining MagAddressIngress must be before line defining MagAddressEgress) - MagAddressIngress 2001:1::2; - MagAddressEgress 2001:100::3; - -## MAG 3 (warning line defining MagAddressIngress must be before line defining MagAddressEgress) -## MAG address must end this the last records containing 0::0 addresses - - MagAddressIngress 0::0; - MagAddressEgress 0::0; - - # MAG ... up to PMIP_MAX_MAGS = 64 - -} diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/extras/example-ha.conf b/openair3/PMIPv6/pmipv6-daemon-umip/extras/example-ha.conf deleted file mode 100755 index 2634924f6a..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/extras/example-ha.conf +++ /dev/null @@ -1,76 +0,0 @@ -# This is an example of mip6d Home Agent configuration file - -NodeConfig HA; - -## If set to > 0, will not detach from tty -DebugLevel 10; - -## List of interfaces where we serve as Home Agent -Interface "eth0"; -#Interface "eth1"; - -## -## IPsec configuration -## - -UseMnHaIPsec enabled; - -## Key Management Mobility Capability -#KeyMngMobCapability disabled; - -IPsecPolicySet { - HomeAgentAddress 3ffe:2620:6:1::1; - - HomeAddress 3ffe:2620:6:1::1234/64; - HomeAddress 3ffe:2620:6:1::1235/64; - - IPsecPolicy Mh UseESP; - IPsecPolicy TunnelMh UseESP; - -# IPsecPolicy Mh UseESP 1 2; -# IPsecPolicy ICMP UseESP 5; -# IPsecPolicy TunnelMh UseESP 3 4; -} - -## -## It is possible to specify multiple IPsecPolicySet in order to configure -## different value for such address. -#IPsecPolicySet { -# -## One HA is for one IPsecPolicySet. -# HomeAgentAddress 3ffe:2620:6:1::1; -# -## It is possible to specify multiple home addresses when they use -## the same configuration. -# HomeAddress 3ffe:2620:6:1::1236/64; -# HomeAddress 3ffe:2620:6:1::1237/64; -# -## IPsec protocol syntax: IPsecPolicy TYPE IPSEC_PROTO [ REQID_SET ] [ ACTION ] -## TYPE (for transport) := Mh | HomeRegBinding | ICMP | MobPfxDisc | any -## TYPE (for tunnel) := TunnelMh | TunnelHomeTesting | TunnelPayload -## IPSEC_PROTO := UseESP (UseAH and UseIPCOMP aren't currently supported) -## REQID_SET := REQID(both-dir) | REQID(to-HA-dir) REQID(to-MN-dir) -## -## REQID is a number. "to-HA-dir" is for packet from MN to HA e.g. -## BU, MPS, or HoTI (it depends on TYPE). -## REQID should be used when more than one configuration for transport -## and tunnel respectively. The default value is zero. -# -## Transport MH protection -# IPsecPolicy Mh UseESP 1 2; -# ## To protect only BU/BA exactly in MH, use below instead. -# #IPsecPolicy HomeRegBinding UseESP 1 2; -# -## Transport ICMP protection -# IPsecPolicy ICMP UseESP 5 6; -# ## To protect only MPD exactly in ICMP, use below instead. -# #IPsecPolicy MobPfxDisc UseESP 5 6; -# -## Tunnel HoTI/HoT protection -# IPsecPolicy TunnelMh UseESP 3 4; -# ## To protect only HoTI/HoT exactly in MH, use below instead. -# #IPsecPolicy TunnelHomeTesting UseESP 3 4; -# -## Tunnel payload protection -# #IPsecPolicy TunnelPayload UseESP 7 8; -#} diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/extras/example-lma.conf b/openair3/PMIPv6/pmipv6-daemon-umip/extras/example-lma.conf deleted file mode 100755 index 1f294329c1..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/extras/example-lma.conf +++ /dev/null @@ -1,55 +0,0 @@ -# This is an example of mip6d Local Mobility Anchor configuration file - -NodeConfig LMA; - -## If set to > 0, will not detach from tty -DebugLevel 10; - -DoRouteOptimizationCN disabled; -DoRouteOptimizationMN disabled; -UseMnHaIPsec disabled; -KeyMngMobCapability disabled; - - -ProxyMipLma "LMA testbed n1" { - RFC5213TimestampBasedApproachInUse enabled; - RFC5213MobileNodeGeneratedTimestampInUse disabled; - RFC5213FixedMAGLinkLocalAddressOnAllAccessLinks fe80::211:22ff:fe33:4455; - RFC5213FixedMAGLinkLayerAddressOnAllAccessLinks 00:11:22:33:44:55; - -## Value in milliseconds - RFC5213MinDelayBeforeBCEDelete 10000; - -## Value in milliseconds - RFC5213MaxDelayBeforeNewBCEAssign 1500; - -## Value in milliseconds - RFC5213TimestampValidityWindow 300; - - LmaPmipNetworkAddress 2001:100::1; - LmaPmipNetworkDevice "eth0"; - LmaCoreNetworkAddress 2001:2::1; - LmaCoreNetworkDevice "eth1"; -## Value in milliseconds - RetransmissionTimeOut 500; - MaxMessageRetransmissions 5; - TunnelingEnabled enabled; -## DynamicTunnelingEnabled enabled; - DynamicTunnelingEnabled disabled; - MaxDelayBeforeDynamicTunnelingDelete 60000; - -## MAG 1 (warning line defining MagAddressIngress must be before line defining MagAddressEgress) - MagAddressIngress 2001:1::1; - MagAddressEgress 2001:100::2; - -## MAG 2 (warning line defining MagAddressIngress must be before line defining MagAddressEgress) - MagAddressIngress 2001:1::2; - MagAddressEgress 2001:100::3; - -## MAG 3 (warning line defining MagAddressIngress must be before line defining MagAddressEgress) - MagAddressIngress 0::0; - MagAddressEgress 0::0; - - # MAG ... up to PMIP_MAX_MAGS = 64 - -} diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/extras/example-mag1.conf b/openair3/PMIPv6/pmipv6-daemon-umip/extras/example-mag1.conf deleted file mode 100755 index f6a52d486c..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/extras/example-mag1.conf +++ /dev/null @@ -1,40 +0,0 @@ -# This is an example of mip6d Mobile Access Gateway configuration file - -NodeConfig MAG; - -## If set to > 0, will not detach from tty -DebugLevel 10; - -DoRouteOptimizationCN disabled; -DoRouteOptimizationMN disabled; -UseMnHaIPsec disabled; -KeyMngMobCapability disabled; - - -ProxyMipMag "MAG1 testbed n1"{ - RFC5213TimestampBasedApproachInUse enabled; - RFC5213MobileNodeGeneratedTimestampInUse disabled; - RFC5213FixedMAGLinkLocalAddressOnAllAccessLinks fe80::211:22ff:fe33:4455; - RFC5213FixedMAGLinkLayerAddressOnAllAccessLinks 00:11:22:33:44:55; - RFC5213EnableMAGLocalRouting enabled; - LmaPmipNetworkAddress 2001:100::1; - MagAddressIngress 2001:1::1; - MagAddressEgress 2001:100::2; - MagDeviceIngress "eth1"; - MagDeviceEgress "eth0"; -## Value in milliseconds - PBULifeTime 40000; -## Value in milliseconds - RetransmissionTimeOut 500; - MaxMessageRetransmissions 5; - TunnelingEnabled enabled; -## DynamicTunnelingEnabled enabled; - DynamicTunnelingEnabled disabled; - MaxDelayBeforeDynamicTunnelingDelete 60000; - RadiusClientConfigFile "/usr/local/etc/radiusclient/radiusclient.conf"; - RadiusPassword "linux"; - PcapSyslogAssociationGrepString "A wireless client is associated - "; - PcapSyslogDeAssociationGrepString "A wireless client is deauthenticated - "; -} - - diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/extras/example-mag2.conf b/openair3/PMIPv6/pmipv6-daemon-umip/extras/example-mag2.conf deleted file mode 100755 index eac3d8be66..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/extras/example-mag2.conf +++ /dev/null @@ -1,40 +0,0 @@ -# This is an example of mip6d Mobile Access Gateway configuration file - -NodeConfig MAG; - -## If set to > 0, will not detach from tty -DebugLevel 10; - -DoRouteOptimizationCN disabled; -DoRouteOptimizationMN disabled; -UseMnHaIPsec disabled; -KeyMngMobCapability disabled; - - -ProxyMipMag "MAG2 testbed n1"{ - RFC5213TimestampBasedApproachInUse enabled; - RFC5213MobileNodeGeneratedTimestampInUse disabled; - RFC5213FixedMAGLinkLocalAddressOnAllAccessLinks fe80::211:22ff:fe33:4455; - RFC5213FixedMAGLinkLayerAddressOnAllAccessLinks 00:11:22:33:44:55; - RFC5213EnableMAGLocalRouting enabled; - LmaPmipNetworkAddress 2001:100::1; - MagAddressIngress 2001:1::2; - MagAddressEgress 2001:100::3; - MagDeviceIngress "eth1"; - MagDeviceEgress "eth0"; -## Value in milliseconds - PBULifeTime 40000; -## Value in milliseconds - RetransmissionTimeOut 500; - MaxMessageRetransmissions 5; - TunnelingEnabled enabled; -## DynamicTunnelingEnabled enabled; - DynamicTunnelingEnabled disabled; - MaxDelayBeforeDynamicTunnelingDelete 60000; - RadiusClientConfigFile "/usr/local/etc/radiusclient/radiusclient.conf"; - RadiusPassword "linux"; - PcapSyslogAssociationGrepString "[Wireless]ReAssociation Success:STA "; - PcapSyslogDeAssociationGrepString "[Wireless]Received Deauth:STA "; -} - - diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/extras/example-mn.conf b/openair3/PMIPv6/pmipv6-daemon-umip/extras/example-mn.conf deleted file mode 100755 index 34ee3a9915..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/extras/example-mn.conf +++ /dev/null @@ -1,54 +0,0 @@ -# This is an example of mip6d Mobile Node configuration file - -NodeConfig MN; - -## If set to > 0, will not detach from tty -DebugLevel 10; - -## Support route optimization with other MNs -DoRouteOptimizationCN enabled; - -## Use route optimization with CNs -DoRouteOptimizationMN enabled; - -UseCnBuAck disabled; - -MnDiscardHaParamProb enabled; - -Interface "eth0"; - -#Interface "eth1" { -# MnIfPreference 2; -#} - -MnRouterProbes 1; - -MnHomeLink "eth0" { - HomeAgentAddress 3ffe:2620:6:1::1; - HomeAddress 3ffe:2620:6:1::1234/64; - - # address opt. - #MnRoPolicy 3ffe:2060:6:1::3 enabled; - #MnRoPolicy disabled; -} - -## -## IPsec configuration -## - -UseMnHaIPsec enabled; - -## Key Management Mobility Capability -KeyMngMobCapability disabled; - -IPsecPolicySet { - HomeAgentAddress 3ffe:2620:6:1::1; - HomeAddress 3ffe:2620:6:1::1234/64; - - IPsecPolicy Mh UseESP; - IPsecPolicy TunnelMh UseESP; - -# IPsecPolicy Mh UseESP 1 2; -# IPsecPolicy ICMP UseESP 5; -# IPsecPolicy TunnelMh UseESP 3 4; -} diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/extras/example-nemo-ha.conf b/openair3/PMIPv6/pmipv6-daemon-umip/extras/example-nemo-ha.conf deleted file mode 100755 index 5195a99740..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/extras/example-nemo-ha.conf +++ /dev/null @@ -1,86 +0,0 @@ -# This is an example of NEMO-enabled Home Agent configuration file - -NodeConfig HA; - -## If set to > 0, will not detach from tty -DebugLevel 10; - -## List of interfaces where we serve as Home Agent -Interface "eth0"; -#Interface "eth1"; - -HaAcceptMobRtr enabled; - -HaServedPrefix 3ffe:2620:6::/48; - -DefaultBindingAclPolicy deny; - -BindingAclPolicy 3ffe:2620:6:1::1234 (3ffe:2620:6:2::/64, 3ffe:2620:6:3::/64) allow; -BindingAclPolicy 3ffe:2620:6:1::1235 allow; - - -## -## IPsec configuration -## - -UseMnHaIPsec enabled; - -## Key Management Mobility Capability -#KeyMngMobCapability disabled; - -IPsecPolicySet { - HomeAgentAddress 3ffe:2620:6:1::1; - - HomeAddress 3ffe:2620:6:1::1234/64; - HomeAddress 3ffe:2620:6:1::1235/64; - - IPsecPolicy Mh UseESP; - IPsecPolicy TunnelMh UseESP; - -# IPsecPolicy Mh UseESP 1 2; -# IPsecPolicy ICMP UseESP 5; -# IPsecPolicy TunnelMh UseESP 3 4; -} - -## -## It is possible to specify multiple IPsecPolicySet in order to configure -## different value for such address. -#IPsecPolicySet { -# -## One HA is for one IPsecPolicySet. -# HomeAgentAddress 3ffe:2620:6:1::1; -# -## It is possible to specify multiple home addresses when they use -## the same configuration. -# HomeAddress 3ffe:2620:6:1::1236/64; -# HomeAddress 3ffe:2620:6:1::1237/64; -# -## IPsec protocol syntax: IPsecPolicy TYPE IPSEC_PROTO [ REQID_SET ] [ ACTION ] -## TYPE (for transport) := Mh | HomeRegBinding | ICMP | MobPfxDisc | any -## TYPE (for tunnel) := TunnelMh | TunnelHomeTesting | TunnelPayload -## IPSEC_PROTO := UseESP (UseAH and UseIPCOMP aren't currently supported) -## REQID_SET := REQID(both-dir) | REQID(to-HA-dir) REQID(to-MN-dir) -## -## REQID is a number. "to-HA-dir" is for packet from MN to HA e.g. -## BU, MPS, or HoTI (it depends on TYPE). -## REQID should be used when more than one configuration for transport -## and tunnel respectively. The default value is zero. -# -## Transport MH protection -# IPsecPolicy Mh UseESP 1 2; -# ## To protect only BU/BA exactly in MH, use below instead. -# #IPsecPolicy HomeRegBinding UseESP 1 2; -# -## Transport ICMP protection -# IPsecPolicy ICMP UseESP 5 6; -# ## To protect only MPD exactly in ICMP, use below instead. -# #IPsecPolicy MobPfxDisc UseESP 5 6; -# -## Tunnel HoTI/HoT protection -# IPsecPolicy TunnelMh UseESP 3 4; -# ## To protect only HoTI/HoT exactly in MH, use below instead. -# #IPsecPolicy TunnelHomeTesting UseESP 3 4; -# -## Tunnel payload protection -# #IPsecPolicy TunnelPayload UseESP 7 8; -#} diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/extras/example-nemo-mn.conf b/openair3/PMIPv6/pmipv6-daemon-umip/extras/example-nemo-mn.conf deleted file mode 100755 index e6d484db39..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/extras/example-nemo-mn.conf +++ /dev/null @@ -1,51 +0,0 @@ -# This is an example of NEMO Mobile Router configuration file - -NodeConfig MN; - -## If set to > 0, will not detach from tty -DebugLevel 10; - -## Support route optimization with other MNs -DoRouteOptimizationCN enabled; - -## Use route optimization with CNs -DoRouteOptimizationMN enabled; - -UseCnBuAck disabled; - -MnDiscardHaParamProb enabled; - -Interface "eth0"; - -#Interface "eth1" { -# MnIfPreference 2; -#} - -MnRouterProbes 1; - -MnHomeLink "eth0" { - IsMobRtr enabled; - HomeAgentAddress 3ffe:2620:6:1::1; - HomeAddress 3ffe:2620:6:1::1234/64 (3ffe:2620:6:2::/64, 3ffe:2620:6:3::/64); -} - -## -## IPsec configuration -## - -UseMnHaIPsec enabled; - -## Key Management Mobility Capability -KeyMngMobCapability disabled; - -IPsecPolicySet { - HomeAgentAddress 3ffe:2620:6:1::1; - HomeAddress 3ffe:2620:6:1::1234/64; - - IPsecPolicy Mh UseESP; - IPsecPolicy TunnelMh UseESP; - -# IPsecPolicy Mh UseESP 1 2; -# IPsecPolicy ICMP UseESP 5; -# IPsecPolicy TunnelMh UseESP 3 4; -} diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/extras/mac-mapping.auth b/openair3/PMIPv6/pmipv6-daemon-umip/extras/mac-mapping.auth deleted file mode 100755 index 77206ee347..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/extras/mac-mapping.auth +++ /dev/null @@ -1,12 +0,0 @@ -# This file is a configuration file for authorizing mobile nodes -# to register to the PMIP testbed in case RADIUS is not configured -# The format of an authorization for a mobile node is the following: -# [IPv6 network address assigned to the mobile node (32 chars in hex formats)][one space character][16 chars in hex format for the mobile node MAC address] - -# MAPPING FOR DELL LAPTOP OLYMPIE -20010100000450000000000000000000 0000d4bed91f6e59 - - - - - diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/extras/output-process/pcap2msc b/openair3/PMIPv6/pmipv6-daemon-umip/extras/output-process/pcap2msc deleted file mode 100755 index 14edc9bd7e..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/extras/output-process/pcap2msc +++ /dev/null @@ -1,866 +0,0 @@ -#!/usr/bin/python -# -*- coding: utf-8 -*- - -import sys -import subprocess -import re -import socket -import datetime -# remove mdns because of info string with '"'s -DISPLAY_FILTER = 'ip.version==6 || (ip.proto==0x11 && udp.dstport!=5353)' -INITIAL_ADJUST_TIME_INTER_NODE = 50 -#ADJUST_TIME_INTER_NODE = 550 - -# list of messages displayed by tshark -g_messages_by_entity = {} -g_messages = {} -g_sync_messages_by_entity = {} - -LMA_STR = 'LMA' -MAG_STR = 'MAG' -MAG1_STR = 'MAG1' -MAG2_STR = 'MAG2' -MN_STR = 'MN' -CN_STR = 'CN' -AP1_STR = 'AP1' -AP2_STR = 'AP2' - -RADIUS_PROTOCOL_COLOR = '\"#00ff00\"' -NDP_PROTOCOL_COLOR = '\"#0000ff\"' -PMIP_PROTOCOL_COLOR = '\"#ff0000\"' -DEFAULT_COLOR = '\"#000000\"' - - -LMA_CN_ETH_ADDR = '00:0a:5e:40:60:6f' -LMA_MAGS_ETH_ADDR = '00:17:31:84:d9:f7' -MAG1_LMA_ETH_ADDR = '00:17:31:84:45:74' -MAG2_LMA_ETH_ADDR = '00:17:31:84:45:cc' -MAG_MN_ETH_ADDR = '00:11:22:33:44:55' -MN_ETH_ADDR = '00:1f:3c:57:78:1d' -CN_ETH_ADDR = '00:18:8b:b0:50:aa' -AP1_ETH_ADDR = '5c:d9:98:6c:e2:14' -AP2_ETH_ADDR = '34:08:04:99:e5:10' -MULTICAST_ETH_ADDR = '33:33' -MULTICAST_IPV4_ETH_ADDR = '01:00:5e' -BROADCAST_IPV4_ETH_ADDR = 'ff:ff:ff:ff:ff:ff' - - -#TIME ALIGNEMENT VARIABLES -g_lma_mag1_diff_time = datetime.datetime(2000, 1, 1, 1, 1, 1, 1) - datetime.datetime(2000, 1, 1, 0, 0, 0, 0) -g_lma_mag2_diff_time = datetime.datetime(2000, 1, 1, 1, 1, 1, 1) - datetime.datetime(2000, 1, 1, 0, 0, 0, 0) - -NULL_TIME_DELTA = datetime.datetime(2000, 1, 1, 1, 1, 1, 1) - datetime.datetime(2000, 1, 1, 1, 1, 1, 1) -ADJUST_TIME_INTER_NODE_MICRO_TIME_DELTA = datetime.datetime(2000, 1, 1, 1, 1, 1, INITIAL_ADJUST_TIME_INTER_NODE) - datetime.datetime(2000, 1, 1, 1, 1, 1, 0) - -g_time_shift_messages = {} - -g_messages_by_entity[LMA_STR] = {} -g_messages_by_entity[MAG1_STR] = {} -g_messages_by_entity[MAG2_STR] = {} -#g_messages_by_entity[MN_STR] = {} -#g_messages_by_entity[CN_STR] = {} -#g_messages_by_entity[AP1_STR] = {} -#g_messages_by_entity[AP2_STR] = {} - -g_sync_messages_by_entity[LMA_STR] = {} -g_sync_messages_by_entity[MAG1_STR] = {} -g_sync_messages_by_entity[MAG2_STR] = {} -#g_sync_messages_by_entity[MN_STR] = {} -#g_sync_messages_by_entity[CN_STR] = {} -#g_sync_messages_by_entity[AP1_STR] = {} -#g_sync_messages_by_entity[AP2_STR] = {} -################################################################################ -def eth2entity(mac_address, entity='UNKNOWN ENTITY'): -################################################################################ - if mac_address.startswith(LMA_CN_ETH_ADDR) == True: - return LMA_STR - elif mac_address.startswith(LMA_MAGS_ETH_ADDR) == True: - return LMA_STR - elif mac_address.startswith(MAG_MN_ETH_ADDR) == True: - if entity.startswith(MAG1_STR) == True: - return MAG1_STR - elif entity.startswith(MAG2_STR) == True: - return MAG2_STR - return UNKNOWN_MAG_ENTITY - if mac_address.startswith(MAG1_LMA_ETH_ADDR) == True: - return MAG1_STR - elif mac_address.startswith(MAG2_LMA_ETH_ADDR) == True: - return MAG2_STR - elif mac_address.startswith(MN_ETH_ADDR) == True: - return MN_STR - elif mac_address.startswith(CN_ETH_ADDR) == True: - return CN_STR - elif mac_address.startswith(MULTICAST_ETH_ADDR) == True: - return entity - elif mac_address.startswith(AP1_ETH_ADDR) == True: - return AP1_STR - elif mac_address.startswith(AP2_ETH_ADDR) == True: - return AP2_STR - elif mac_address.startswith(MULTICAST_IPV4_ETH_ADDR) == True: - return entity - elif mac_address.startswith(BROADCAST_IPV4_ETH_ADDR) == True: - return '*' - print >>sys.stderr, 'UNKNOWN ENTITY eth@= %s' % mac_address - return 'UNKNOWN' - - -################################################################################ -def check_ipv6(n): -################################################################################ - try: - socket.inet_pton(socket.AF_INET6, n) - return True - except socket.error: - return False - - -################################################################################ -def usage(): -################################################################################ - print >>sys.stderr, '%s: [tshark additional options] "wireshark display filter"' % sys.argv[0] - sys.exit(1) - - -################################################################################ -def load_messages(entity_str, pcap_file): -################################################################################ - global g_messages_by_entity - messages = {} - ################################################################# - # FIRST PASS TO GET INTERPRETED PROTOCOL INFO BY TSHARK BUILT-INS - ################################################################# - - tshark_cmd = ['tshark','-n','-t','a'] - tshark_cmd.extend(sys.argv[7:-1]) - tshark_cmd.append('-r') - tshark_cmd.append(pcap_file) - tshark_cmd.append(DISPLAY_FILTER) - #print >>sys.stderr, 'tshark cmd= %s' % tshark_cmd - # start tshark subprocess and prepare a pipe to which it will write stdout - shark = subprocess.Popen(tshark_cmd, stdout=subprocess.PIPE) - sharkout = shark.stdout - regex = re.compile('^ *(\d+) +(\d+\:\d+\:\d+\.\d+) +(\S*) -> (\S*) (.*?)$') - while True: - line = sharkout.readline() - # eof encountered - if len(line) == 0: - break - #print >>sys.stderr, "line='%s'" % line - - ret = regex.match(line) - if ret != None: - msg = {} - msg['num'] = ret.group(1) - msg['date'] = ret.group(2) - msg['src'] = ret.group(3) - msg['dst'] = ret.group(4) - msg['msg'] = ret.group(5).strip() - if msg['msg'].count('MIPv6 Binding') > 0: - msg['colors'] = 'linecolour='+PMIP_PROTOCOL_COLOR+' , textcolour='+PMIP_PROTOCOL_COLOR - elif msg['msg'].count('RADIUS') > 0: - msg['colors'] = 'linecolour='+RADIUS_PROTOCOL_COLOR+' , textcolour='+RADIUS_PROTOCOL_COLOR - elif msg['msg'].count('ICMPv6 Neighbor') > 0: - msg['colors'] = 'linecolour='+NDP_PROTOCOL_COLOR+' , textcolour='+NDP_PROTOCOL_COLOR - elif msg['msg'].count('ICMPv6 Router') > 0: - msg['colors'] = 'linecolour='+NDP_PROTOCOL_COLOR+' , textcolour='+NDP_PROTOCOL_COLOR - else: - msg['colors'] = 'linecolour='+DEFAULT_COLOR+' , textcolour='+DEFAULT_COLOR - - if msg['msg'].count('Syslog') > 0: - msg['msg'] = msg['msg'][59:] - - messages[msg['date']] = msg - #print >>sys.stderr, "msg key=%s : %s handled by regex" % (msg['date'], msg) - else: - print >>sys.stderr, "line '%s' not handled by regex !" % line - #break - # synchronously wait for tshark termination - shark.wait() - if shark.returncode != 0: - print >>sys.stderr, "tshark returned error code %d" % shark.returncode - sys.exit(1) - ################################################################# - # SECOND PASS TO GET ETHERNET ADDRESS and other custom fields - ################################################################# - tshark_cmd = ['tshark','-n','-t','a','-T','fields','-e','frame.number','-e','frame.time','-e','eth.src','-e','eth.dst','-e','frame.protocols'] - tshark_cmd.extend(sys.argv[7:-1]) - tshark_cmd.append('-r') - tshark_cmd.append(pcap_file) - tshark_cmd.append(DISPLAY_FILTER) - #print >>sys.stderr, 'tshark cmd= %s' % tshark_cmd - # start tshark subprocess and prepare a pipe to which it will write stdout - shark = subprocess.Popen(tshark_cmd, stdout=subprocess.PIPE) - sharkout = shark.stdout - regex = re.compile('^ *(\d+)\\t(\S*) +(\d+\,\ \d+) +(\d+\:\d+\:\d+\.\d+)\\t(\S*)\\t(\S*)\\t(\S*) *') - while True: - line = sharkout.readline() - # eof encountered - if len(line) == 0: - break - #print >>sys.stderr, "line='%s'" % line - - ret = regex.match(line) - if ret != None: - msg_2nd_pass = {} - msg_2nd_pass['num'] = ret.group(1) - msg_2nd_pass['date'] = ret.group(4)[0:-3] - msg_2nd_pass['eth_src'] = ret.group(5) - msg_2nd_pass['eth_dst'] = ret.group(6) - msg_2nd_pass['protocols'] = ret.group(7) - msg_1st_pass = messages[msg_2nd_pass['date']] - msg_1st_pass['eth_src'] = msg_2nd_pass['eth_src'] - msg_1st_pass['eth_dst'] = msg_2nd_pass['eth_dst'] - msg_1st_pass['protocols'] = msg_2nd_pass['protocols'] - entity_src = eth2entity(msg_1st_pass['eth_src'], entity_str) - msg_1st_pass['entity_src'] = entity_src - entity_dst = eth2entity(msg_1st_pass['eth_dst'], entity_str) - msg_1st_pass['entity_dst'] = entity_dst - - - # approximation but I cannot find a very simple way to get the 1st ipv6 header when they are 2! - protocols = msg_2nd_pass['protocols'].split(':'); - num_ipv6 = 0 - for protocol in protocols: - if protocol == 'ipv6': - num_ipv6 = num_ipv6 + 1 - if num_ipv6 > 1: - if msg_1st_pass['msg'].count('ICMPv6 Echo') > 0: - msg_1st_pass['tunnel'] = True - else: - msg_1st_pass['tunnel'] = False - else: - msg_1st_pass['tunnel'] = False - - messages[msg_2nd_pass['date']] = msg_1st_pass - #print >>sys.stderr, entity_str, "Final msg= '%s'" % messages[msg_2nd_pass['date']] - else: - print >>sys.stderr, "line '%s' not handled by regex !" % line - #break - # synchronously wait for tshark termination - shark.wait() - if shark.returncode != 0: - print >>sys.stderr, "tshark returned error code %d" % shark.returncode - sys.exit(1) - - ################################################################# - # Third PASS TO GET RAW DATA - ################################################################# - tshark_cmd = ['tshark','-n','-t','a','-T','text','-x'] - tshark_cmd.extend(sys.argv[7:-1]) - tshark_cmd.append('-r') - tshark_cmd.append(pcap_file) - tshark_cmd.append(DISPLAY_FILTER) - #print >>sys.stderr, 'tshark cmd= %s' % tshark_cmd - # start tshark subprocess and prepare a pipe to which it will write stdout - shark = subprocess.Popen(tshark_cmd, stdout=subprocess.PIPE) - sharkout = shark.stdout - regex = re.compile('^ *(\d+) +(\d+\:\d+\:\d+\.\d+) +(\S*) -> (\S*) (.*?)$') - regex_raw = re.compile('^ *(\S*) +(\S*) +(\S*) +(\S*) +(\S*) +(\S*) +(\S*) +(\S*) +(\S*) +(\S*) +(\S*) +(\S*) +(\S*) +(\S*) +(\S*) +(\S*) +(\S*) (.*?)$') - msg_3rd_pass = {} - msg_data = [] - msg_1st_pass = {} - while True: - line = sharkout.readline() - # eof encountered - if len(line) == 0: - break - #print >>sys.stderr, "line='%s'" % line - - ret = regex.match(line) - if ret != None: - msg_3rd_pass = {} - msg_data = [] - waited_index = 0 - msg_3rd_pass['num'] = ret.group(1) - msg_3rd_pass['date'] = ret.group(2) - msg_1st_pass = messages[msg_3rd_pass['date']] - line = sharkout.readline() - else: - ret = regex_raw.match(line) - if ret != None: - if waited_index != int(ret.group(1),16): - print >>sys.stderr, 'error waited index= %d index is %d' % (waited_index, int(ret.group(1), 16)) - sys.exit(1) - - waited_index = waited_index + 16 - - for i in range(2, min(18, ret.lastindex)): - msg_data.append(ret.group(i)) - - - else: - # we assume that it means the end the display of raw data - if msg_1st_pass['msg'].count('ICMPv6 Echo') > 0: - if msg_1st_pass['tunnel'] == False: - msg_1st_pass['msg'] = msg_1st_pass['msg']+' seq ' + str(int(msg_data[60], 16)*256 + int(msg_data[61], 16)) - else: - msg_1st_pass['msg'] = msg_1st_pass['msg']+' seq ' + str(int(msg_data[100], 16)*256 + int(msg_data[101], 16)) - messages[msg_3rd_pass['date']] = msg_1st_pass - - - # synchronously wait for tshark termination - shark.wait() - if shark.returncode != 0: - print >>sys.stderr, "tshark returned error code %d" % shark.returncode - sys.exit(1) - - - regex_date = re.compile('(\d+)\:(\d+)\:(\d+)\.(\d+)') - #now merge messages in global dictionnary - for time_key in messages.iterkeys(): - message = messages[time_key] - - ret = regex_date.match(message['date']) - if ret == None: - print >>sys.stderr, "Date '%s' not handled by regex !" % message['date'] - sys.exit(1) - else: - dtime = datetime.datetime(2000, 1, 1, int(ret.group(1)), int(ret.group(2)), int(ret.group(3)), int(ret.group(4))) - - while (dtime in g_messages_by_entity[entity_str]): - # add 1 micro second - dtime = dtime + (datetime.datetime(2000, 1, 1, 1, 1, 1, 1) - datetime.datetime(2000, 1, 1, 1, 1, 1, 0)) - print >>sys.stderr, "Warning Incrementing time by 1 microsecond for entity %s Message %s" % (str(dtime), message['msg']) - #test only, to remove - sys.exit(1) - g_messages_by_entity[entity_str][dtime] = message - #print >>sys.stderr, "\n\n", g_messages_by_entity, ":\n", g_messages_by_entity - -################################################################################ -def load_time_sync_message(entity_str, pcap_file, message_shift_filter_string, message_drift_filter_string): -################################################################################ - global g_time_shift_messages - global g_sync_messages_by_entity - - g_time_shift_messages[entity_str] = {} - msg_count = 0; - ################################################################# - # FIRST PASS TO GET INTERPRETED PROTOCOL INFO BY TSHARK BUILT-INS - ################################################################# - - tshark_cmd = ['tshark','-n','-t','a'] - tshark_cmd.extend(sys.argv[7:-1]) - tshark_cmd.append('-r') - tshark_cmd.append(pcap_file) - tshark_cmd.append(DISPLAY_FILTER) - #print >>sys.stderr, 'tshark cmd= %s' % tshark_cmd - # start tshark subprocess and prepare a pipe to which it will write stdout - shark = subprocess.Popen(tshark_cmd, stdout=subprocess.PIPE) - sharkout = shark.stdout - regex = re.compile('^ *(\d+) +(\d+\:\d+\:\d+\.\d+) +(\S*) -> (\S*) (.*?)$') - regex_date = re.compile('(\d+)\:(\d+)\:(\d+)\.(\d+)') - - while True: - line = sharkout.readline() - # eof encountered - if len(line) == 0: - break - #print >>sys.stderr, "line='%s'" % line - ret = regex.match(line) - if ret != None: - msg = {} - msg['num'] = ret.group(1) - msg['date'] = ret.group(2) - msg['src'] = ret.group(3) - msg['dst'] = ret.group(4) - msg['msg'] = ret.group(5).strip() - - ret = regex_date.match(msg['date']) - if ret == None: - print >>sys.stderr, "Date '%s' not handled by regex !" % msg['date'] - sys.exit(1) - else: - dtime = datetime.datetime(2000, 1, 1, int(ret.group(1)), int(ret.group(2)), int(ret.group(3)), int(ret.group(4))) - if msg['msg'].count(message_shift_filter_string) > 0: - if msg_count == 0: - g_time_shift_messages[entity_str] = {} - g_time_shift_messages[entity_str][dtime] = msg - msg_count = msg_count + 1 - - if msg['msg'].count(message_drift_filter_string) > 0: - msg['datetime'] = dtime - g_sync_messages_by_entity[entity_str][msg['date']] = msg - - - else: - print >>sys.stderr, "line '%s' not handled by regex !" % line - #break - # synchronously wait for tshark termination - shark.wait() - if shark.returncode != 0: - print >>sys.stderr, "tshark returned error code %d" % shark.returncode - sys.exit(1) - - if msg_count == 0: - print >>sys.stderr, "Could not find message for computing time shift for entity %s" % entity_str - sys.exit(1) - - - ################################################################# - # SECOND PASS TO GET ETHERNET ADDRESS and other custom fields - ################################################################# - tshark_cmd = ['tshark','-n','-t','a','-T','fields','-e','frame.number','-e','frame.time','-e','eth.src','-e','eth.dst','-e','frame.protocols'] - tshark_cmd.extend(sys.argv[7:-1]) - tshark_cmd.append('-r') - tshark_cmd.append(pcap_file) - tshark_cmd.append(DISPLAY_FILTER) - #print >>sys.stderr, 'tshark cmd= %s' % tshark_cmd - # start tshark subprocess and prepare a pipe to which it will write stdout - shark = subprocess.Popen(tshark_cmd, stdout=subprocess.PIPE) - sharkout = shark.stdout - regex = re.compile('^ *(\d+)\\t(\S*) +(\d+\,\ \d+) +(\d+\:\d+\:\d+\.\d+)\\t(\S*)\\t(\S*)\\t(\S*) *') - while True: - line = sharkout.readline() - # eof encountered - if len(line) == 0: - break - #print >>sys.stderr, "line='%s'" % line - - ret = regex.match(line) - if ret != None: - msg_2nd_pass = {} - msg_2nd_pass['num'] = ret.group(1) - msg_2nd_pass['date'] = ret.group(4)[0:-3] - if msg_2nd_pass['date'] in g_sync_messages_by_entity[entity_str]: - msg_2nd_pass['eth_src'] = ret.group(5) - msg_2nd_pass['eth_dst'] = ret.group(6) - msg_2nd_pass['protocols'] = ret.group(7) - msg_1st_pass = g_sync_messages_by_entity[entity_str][msg_2nd_pass['date']] - msg_1st_pass['eth_src'] = msg_2nd_pass['eth_src'] - msg_1st_pass['eth_dst'] = msg_2nd_pass['eth_dst'] - msg_1st_pass['protocols'] = msg_2nd_pass['protocols'] - entity_src = eth2entity(msg_1st_pass['eth_src'], entity_str) - msg_1st_pass['entity_src'] = entity_src - entity_dst = eth2entity(msg_1st_pass['eth_dst'], entity_str) - msg_1st_pass['entity_dst'] = entity_dst - - - # approximation but I cannot find a very simple way to get the 1st ipv6 header when they are 2! - protocols = msg_2nd_pass['protocols'].split(':'); - num_ipv6 = 0 - for protocol in protocols: - if protocol == 'ipv6': - num_ipv6 = num_ipv6 + 1 - if num_ipv6 > 1: - if msg_1st_pass['msg'].count('ICMPv6 Echo') > 0: - msg_1st_pass['tunnel'] = True - else: - msg_1st_pass['tunnel'] = False - else: - msg_1st_pass['tunnel'] = False - - g_sync_messages_by_entity[entity_str][msg_2nd_pass['date']] = msg_1st_pass - #print >>sys.stderr, entity_str, "Final msg= '%s'" % messages[msg_2nd_pass['date']] - else: - print >>sys.stderr, "line '%s' not handled by regex !" % line - #break - # synchronously wait for tshark termination - shark.wait() - if shark.returncode != 0: - print >>sys.stderr, "tshark returned error code %d" % shark.returncode - sys.exit(1) - - ################################################################# - # Third PASS TO GET RAW DATA - ################################################################# - tshark_cmd = ['tshark','-n','-t','a','-T','text','-x'] - tshark_cmd.extend(sys.argv[7:-1]) - tshark_cmd.append('-r') - tshark_cmd.append(pcap_file) - tshark_cmd.append(DISPLAY_FILTER) - #print >>sys.stderr, 'tshark cmd= %s' % tshark_cmd - # start tshark subprocess and prepare a pipe to which it will write stdout - shark = subprocess.Popen(tshark_cmd, stdout=subprocess.PIPE) - sharkout = shark.stdout - regex = re.compile('^ *(\d+) +(\d+\:\d+\:\d+\.\d+) +(\S*) -> (\S*) (.*?)$') - regex_raw = re.compile('^ *(\S*) +(\S*) +(\S*) +(\S*) +(\S*) +(\S*) +(\S*) +(\S*) +(\S*) +(\S*) +(\S*) +(\S*) +(\S*) +(\S*) +(\S*) +(\S*) +(\S*) (.*?)$') - msg_3rd_pass = {} - msg_data = [] - msg_1st_pass = {} - - in_sync = False - - while True: - line = sharkout.readline() - # eof encountered - if len(line) == 0: - break - #print >>sys.stderr, "line='%s'" % line - - ret = regex.match(line) - if ret != None: - msg_3rd_pass = {} - msg_data = [] - waited_index = 0 - msg_3rd_pass['num'] = ret.group(1) - msg_3rd_pass['date'] = ret.group(2) - if msg_3rd_pass['date'] in g_sync_messages_by_entity[entity_str]: - msg_1st_pass = g_sync_messages_by_entity[entity_str][msg_3rd_pass['date']] - line = sharkout.readline() - in_sync = True - else: - in_sync = False - else: - ret = regex_raw.match(line) - if ret != None: - if waited_index != int(ret.group(1),16): - print >>sys.stderr, 'error waited index= %d index is %d' % (waited_index, int(ret.group(1), 16)) - sys.exit(1) - - waited_index = waited_index + 16 - - for i in range(2, min(18, ret.lastindex)): - msg_data.append(ret.group(i)) - - - else: - if in_sync == True: - # we assume that it means the end the display of raw data - if msg_1st_pass['msg'].count('ICMPv6 Echo') > 0: - if msg_1st_pass['tunnel'] == False: - msg_1st_pass['msg'] = msg_1st_pass['msg']+' seq ' + str(int(msg_data[60], 16)*256 + int(msg_data[61], 16)) - else: - msg_1st_pass['msg'] = msg_1st_pass['msg']+' seq ' + str(int(msg_data[100], 16)*256 + int(msg_data[101], 16)) - print >>sys.stderr, 'Deleting g_sync_messages_by_entity[%s][%s] = \n%s' % (entity_str, msg_3rd_pass['date'], msg_3rd_pass) - del g_sync_messages_by_entity[entity_str][msg_3rd_pass['date']] - print >>sys.stderr, 'Replaced by g_sync_messages_by_entity[%s][%s] = \n%s' % (entity_str, msg_1st_pass['datetime'], msg_1st_pass) - g_sync_messages_by_entity[entity_str][msg_1st_pass['datetime']] = msg_1st_pass - - # synchronously wait for tshark termination - shark.wait() - if shark.returncode != 0: - print >>sys.stderr, "tshark returned error code %d" % shark.returncode - sys.exit(1) - - - - - #print >>sys.stderr, "\n\n", entity_str, ":\n", g_sync_messages_by_entity[entity_str] - - -################################################################################ -def compute_initial_clock_diff_between_entities(): -################################################################################ - global g_time_shift_messages - global g_lma_mag1_diff_time - global g_lma_mag2_diff_time - - if (g_time_shift_messages.has_key(LMA_STR) == True) and (g_time_shift_messages.has_key(MAG1_STR) == True) and (g_time_shift_messages.has_key(MAG2_STR) == True): - print >>sys.stderr, "OK we can compute clock shifts" - mag1_msg = {} - mag2_msg = {} - - # MAG1 - for key1 in sorted(g_time_shift_messages[MAG1_STR].iterkeys()): - mag1_msg = g_time_shift_messages[MAG1_STR][key1] - mag1_time = key1 - break - # MAG2 - for key2 in sorted(g_time_shift_messages[MAG2_STR].iterkeys()): - mag2_msg = g_time_shift_messages[MAG2_STR][key2] - mag2_time = key2 - break - # LMA - lma_mag1 = False - lma_mag2 = False - - for key in sorted(g_time_shift_messages[LMA_STR].iterkeys()): - message = g_time_shift_messages[LMA_STR][key] - if (lma_mag1==False)and(message['src']==mag1_msg['src'])and(message['dst']==mag1_msg['dst'])and(message['msg']==mag1_msg['msg']): - #print >>sys.stderr, "Message Mag1 LMA %s" % message - g_lma_mag1_diff_time = key - mag1_time - print >>sys.stderr, "diff LMA -> MAG1 " , g_lma_mag1_diff_time - lma_mag1 = True - elif (lma_mag2 == False)and(message['src']==mag2_msg['src'])and(message['dst']==mag2_msg['dst'])and(message['msg']==mag2_msg['msg']): - #print >>sys.stderr, "Message Mag2 LMA %s" % message - g_lma_mag2_diff_time = key - mag2_time - print >>sys.stderr, "diff LMA -> MAG2 " , g_lma_mag2_diff_time - lma_mag2 = True - if (lma_mag1 == True) and (lma_mag2 == True): - break - else: - print >>sys.stderr, "ERROR could not compute clock shifts" - sys.exit(1) - - -################################################################################ -def merge_messages_and_apply_time_shift(message_drift_adjust): -################################################################################ - global g_sync_messages_by_entity - global g_messages_by_entity - global g_lma_mag1_diff_time - global g_lma_mag2_diff_time - global g_messages - - #regex = re.compile('^ *(\d+)\:(\d+)\:(\d+)\.(\d+):*') - - messages_by_entity = {} - messages_by_entity[LMA_STR] = {} - messages_by_entity[MAG1_STR] = {} - messages_by_entity[MAG2_STR] = {} - - sync_messages_by_entity = {} - sync_messages_by_entity[MAG1_STR] = {} - sync_messages_by_entity[MAG2_STR] = {} - - #-------------------------------------------------------------------------------------- - messages_by_entity[LMA_STR].update(g_messages_by_entity[LMA_STR]) - g_messages_by_entity[LMA_STR] = {} - #-------------------------------------------------------------------------------------- - print >>sys.stderr, "Applying initial diff time to MAG1 Messages", g_lma_mag1_diff_time - #print >>sys.stderr, g_messages_by_entity[MAG1_STR] - for key in g_messages_by_entity[MAG1_STR].iterkeys(): - message = g_messages_by_entity[MAG1_STR][key] - message_time = key + g_lma_mag1_diff_time - while (message_time in g_messages): - # add 1 micro second - message_time = message_time + (datetime.datetime(2000, 1, 1, 1, 1, 1, 1) - datetime.datetime(2000, 1, 1, 1, 1, 1, 0)) - print >>sys.stderr, "[MAG1] Warning Incrementing time by 1 microsecond for '%s'" % message['msg'] - #if message['msg'].count(message_drift_adjust) > 0: - # if message['msg'] not in g_sync_messages_by_entity[LMA_STR]: - # g_sync_messages_by_entity[MAG1_STR][message['msg']] = message_time - messages_by_entity[MAG1_STR][message_time] = message - g_messages_by_entity[MAG1_STR] = {} - - #-------------------------------------------------------------------------------------- - print >>sys.stderr, "Applying initial diff time to MAG1 Sync Messages", g_lma_mag1_diff_time - for key in g_sync_messages_by_entity[MAG1_STR].iterkeys(): - message = g_sync_messages_by_entity[MAG1_STR][key] - message_time = key + g_lma_mag1_diff_time - sync_messages_by_entity[MAG1_STR][message['msg']] = message_time - g_sync_messages_by_entity[MAG1_STR] = {} - - - #-------------------------------------------------------------------------------------- - print >>sys.stderr, "Applying initial diff time to MAG2 Messages", g_lma_mag2_diff_time - #print >>sys.stderr, g_messages_by_entity[MAG2_STR] - for key in g_messages_by_entity[MAG2_STR].iterkeys(): - message = g_messages_by_entity[MAG2_STR][key] - message_time = key + g_lma_mag2_diff_time - while (message_time in g_messages): - # add 1 micro second - message_time = message_time + (datetime.datetime(2000, 1, 1, 1, 1, 1, 1) - datetime.datetime(2000, 1, 1, 1, 1, 1, 0)) - print >>sys.stderr, "[MAG2] Warning Incrementing time by 1 microsecond for '%s'" % message['msg'] - #if message['msg'].count(message_drift_adjust) > 0: - # if message['msg'] not in g_sync_messages_by_entity[LMA_STR]: - # g_sync_messages_by_entity[MAG2_STR][message['msg']] = message_time - messages_by_entity[MAG2_STR][message_time] = message - g_messages_by_entity[MAG2_STR] = {} - - #-------------------------------------------------------------------------------------- - print >>sys.stderr, "Applying initial diff time to MAG2 Sync Messages", g_lma_mag2_diff_time - for key in g_sync_messages_by_entity[MAG2_STR].iterkeys(): - message = g_sync_messages_by_entity[MAG2_STR][key] - message_time = key + g_lma_mag2_diff_time - sync_messages_by_entity[MAG2_STR][message['msg']] = message_time - g_sync_messages_by_entity[MAG2_STR] = {} - - #-------------------------------------------------------------------------------------- - # NOW while merging messages try to detect errors due to clocks drifts between entities - # assuming that there is now no initial clock shifts - # We may assume that clock drift is linear, but ... let's go with a neanderthal algorithm - time_drift_mag1 = NULL_TIME_DELTA - time_drift_mag2 = NULL_TIME_DELTA - - #print >>sys.stderr, "\n\n", MAG1_STR, ":\n", sync_messages_by_entity[MAG1_STR] - #print >>sys.stderr, "\n\n", MAG2_STR, ":\n", sync_messages_by_entity[MAG2_STR] - lma_time_key = datetime.datetime(2000, 1, 1, 0, 0, 0, 0) - mag1_time_key = datetime.datetime(2000, 1, 1, 0, 0, 0, 1) - mag2_time_key = datetime.datetime(2000, 1, 1, 0, 0, 0, 2) - keys_to_add_mag1 = {} - keys_to_add_mag2 = {} - - - for lma_time_key in sorted(messages_by_entity[LMA_STR].iterkeys()): - message_lma = messages_by_entity[LMA_STR][lma_time_key ] - - g_messages[lma_time_key] = message_lma - - if lma_time_key in g_sync_messages_by_entity[LMA_STR]: - if message_lma['msg'] in sync_messages_by_entity[MAG1_STR]: - mag1_time_key = sync_messages_by_entity[MAG1_STR][message_lma['msg']] - if (message_lma['entity_src'] == LMA_STR) and (message_lma['entity_dst'] == MAG1_STR): - if (mag1_time_key + time_drift_mag1) <= lma_time_key: - time_drift_mag1 = lma_time_key - mag1_time_key + ADJUST_TIME_INTER_NODE_MICRO_TIME_DELTA - print >>sys.stderr, "Found LMA-MAG1 drift for ", message_lma['msg'], " ", time_drift_mag1, "\tTime MAG 1:", mag1_time_key, "/Time LMA:", lma_time_key - #else: - # # null drift - # if time_drift_mag1 != NULL_TIME_DELTA: - # print >>sys.stderr, "Reseting LMA-MAG1 drift to 0 for ", message_lma['msg'] - # time_drift_mag1 = NULL_TIME_DELTA - elif (message_lma['entity_src'] == MAG1_STR) and (message_lma['entity_dst'] == LMA_STR): - if (mag1_time_key + time_drift_mag1) >= lma_time_key: - time_drift_mag1 = lma_time_key - mag1_time_key - ADJUST_TIME_INTER_NODE_MICRO_TIME_DELTA - print >>sys.stderr, "Found MAG1-LMA drift for ", message_lma['msg'], " ", time_drift_mag1 - #else: - # null drift - # if time_drift_mag1 != NULL_TIME_DELTA: - # print >>sys.stderr, "Reseting MAG1-LMA drift to 0 for ", message_lma['msg'] - # time_drift_mag1 = NULL_TIME_DELTA - - if message_lma['msg'] in sync_messages_by_entity[MAG2_STR]: - mag2_time_key = sync_messages_by_entity[MAG2_STR][message_lma['msg']] - if (message_lma['entity_src'] == LMA_STR) and (message_lma['entity_dst'] == MAG2_STR): - if (mag2_time_key + time_drift_mag1) <= lma_time_key: - time_drift_mag2 = lma_time_key - mag2_time_key + ADJUST_TIME_INTER_NODE_MICRO_TIME_DELTA - print >>sys.stderr, "Found LMA-MAG2 drift for ", message_lma['msg'], " ", time_drift_mag2 - #else: - # # null drift - # if time_drift_mag2 != NULL_TIME_DELTA: - # print >>sys.stderr, "Reseting LMA-MAG2 drift to 0 for ", message_lma['msg'] - # time_drift_mag2 = NULL_TIME_DELTA - elif (message_lma['entity_src'] == MAG2_STR) and (message_lma['entity_dst'] == LMA_STR): - if (mag2_time_key + time_drift_mag1) >= lma_time_key: - time_drift_mag2 = lma_time_key - mag2_time_key - ADJUST_TIME_INTER_NODE_MICRO_TIME_DELTA - print >>sys.stderr, "Found LMA-MAG2 drift for ", message_lma['msg'], " ", time_drift_mag2 - #else: - # null drift - # if time_drift_mag2 != NULL_TIME_DELTA: - # print >>sys.stderr, "Reseting LMA-MAG2 drift to 0 for ", message_lma['msg'] - # time_drift_mag2 = NULL_TIME_DELTA - - if time_drift_mag1 != NULL_TIME_DELTA: - for mag_key in sorted(keys_to_add_mag1.iterkeys()): - if mag_key < mag1_time_key: - g_messages[mag_key] = keys_to_add_mag1[mag_key] - else: - print >>sys.stderr, "Retro-Applying MAG1 drift %s for %s\t%s -> %s\tTime %s -> %s" % (str(time_drift_mag1), keys_to_add_mag1[mag_key]['msg'], keys_to_add_mag1[mag_key]['entity_src'], keys_to_add_mag1[mag_key]['entity_dst'], str(mag_key), str(mag_key + time_drift_mag1) ) - g_messages[mag_key + time_drift_mag1] = keys_to_add_mag1[mag_key] - keys_to_add_mag1 = {} - - if time_drift_mag2 != NULL_TIME_DELTA: - for mag_key in sorted(keys_to_add_mag2.iterkeys()): - if mag_key < mag2_time_key: - g_messages[mag_key] = keys_to_add_mag2[mag_key] - else: - print >>sys.stderr, "Retro-Applying MAG2 drift %s for %s\t%s -> %s\tTime %s -> %s" % (str(time_drift_mag2), keys_to_add_mag2[mag_key]['msg'], keys_to_add_mag2[mag_key]['entity_src'], keys_to_add_mag2[mag_key]['entity_dst'], str(mag_key), str(mag_key + time_drift_mag2) ) - g_messages[mag_key + time_drift_mag2] = keys_to_add_mag2[mag_key] - keys_to_add_mag2 = {} - - - keys_to_delete = [] - keys_to_add = {} - for mag1_key in sorted(messages_by_entity[MAG1_STR].iterkeys()): - if (mag1_key + time_drift_mag1) <= lma_time_key: - message_mag1 = messages_by_entity[MAG1_STR][mag1_key] - print >>sys.stderr, "Applying MAG1 drift %s for %s\t%s -> %s\tTime %s -> %s" % (str(time_drift_mag1), message_mag1['msg'], message_mag1['entity_src'], message_mag1['entity_dst'], str(mag1_key), str(mag1_key + time_drift_mag1) ) - new_key = mag1_key + time_drift_mag1 - keys_to_add_mag1[new_key] = message_mag1 - keys_to_delete.append(mag1_key) - else: - new_key = mag1_key + time_drift_mag1 - keys_to_add[new_key] = messages_by_entity[MAG1_STR][mag1_key] - keys_to_delete.append(mag1_key) - #break - for a_key_to_del in keys_to_delete: - del messages_by_entity[MAG1_STR][a_key_to_del] - for key in sync_messages_by_entity[MAG1_STR].iterkeys(): - message_time = sync_messages_by_entity[MAG1_STR][key] - message_time = message_time + time_drift_mag1 - sync_messages_by_entity[MAG1_STR][key] = message_time - messages_by_entity[MAG1_STR].update(keys_to_add) - time_drift_mag1 = NULL_TIME_DELTA - - keys_to_delete = [] - keys_to_add = {} - for mag2_key in sorted(messages_by_entity[MAG2_STR].iterkeys()): - if (mag2_key + time_drift_mag2) <= lma_time_key: - message_mag2 = messages_by_entity[MAG2_STR][mag2_key] - print >>sys.stderr, "Applying MAG2 drift %s for %s\t%s -> %s\tTime %s -> %s" % (str(time_drift_mag2), message_mag2['msg'], message_mag2['entity_src'], message_mag2['entity_dst'], str(mag2_key), str(mag2_key + time_drift_mag2) ) - new_key = mag2_key + time_drift_mag2 - keys_to_add_mag2[new_key] = message_mag2 - del messages_by_entity[MAG2_STR][mag2_key] - else: - new_key = mag2_key + time_drift_mag2 - keys_to_add[new_key] = messages_by_entity[MAG2_STR][mag2_key] - keys_to_delete.append(mag2_key) - #break - for a_key_to_del in keys_to_delete: - del messages_by_entity[MAG2_STR][a_key_to_del] - for key in sync_messages_by_entity[MAG2_STR].iterkeys(): - message_time = sync_messages_by_entity[MAG2_STR][key] - message_time = message_time + time_drift_mag2 - sync_messages_by_entity[MAG2_STR][key] = message_time - - messages_by_entity[MAG2_STR].update(keys_to_add) - time_drift_mag2 = NULL_TIME_DELTA - - #finally, flush remaining messages - for mag1_key in sorted(messages_by_entity[MAG1_STR].iterkeys()): - message_mag1 = messages_by_entity[MAG1_STR][mag1_key] - print >>sys.stderr, "Applying MAG1 drift %s for %s\t%s -> %s\tTime %s -> %s" % (str(time_drift_mag1), message_mag1['msg'], message_mag1['entity_src'], message_mag1['dst'], str(mag1_key), str(mag1_key + time_drift_mag1) ) - new_key = mag1_key + time_drift_mag1 - g_messages[new_key] = message_mag1 - - for mag2_key in sorted(messages_by_entity[MAG2_STR].iterkeys()): - message_mag2 = messages_by_entity[MAG2_STR][mag2_key] - print >>sys.stderr, "Applying MAG2 drift %s for %s\t%s -> %s\tTime %s -> %s" % (str(time_drift_mag2), message_mag2['msg'], message_mag2['entity_src'], message_mag2['dst'], str(mag2_key), str(mag2_key + time_drift_mag2) ) - new_key = mag2_key + time_drift_mag2 - g_messages[new_key] = message_mag2 - - messages_by_entity[LMA_STR] = {} - messages_by_entity[MAG1_STR] = {} - messages_by_entity[MAG2_STR] = {} - - -n = len(sys.argv) -if n < 7: - usage() - - -dfilter = sys.argv[-1] - - -print >>sys.stderr, "Loading LMA messages '%s'" % sys.argv[1] -load_messages(LMA_STR, sys.argv[1]) - -print >>sys.stderr, "Loading again LMA messages '%s' for time shift computation" % sys.argv[1] -load_time_sync_message(LMA_STR, sys.argv[1], 'RADIUS Access-Request', 'ICMPv6 Echo') - -print >>sys.stderr, "Loading LMA messages '%s'" % sys.argv[2] -load_messages(LMA_STR, sys.argv[2]) - -print >>sys.stderr, "Loading MAG1 messages '%s'" % sys.argv[3] -load_messages(MAG1_STR, sys.argv[3]) - -print >>sys.stderr, "Loading MAG1 messages '%s' for time shift computation" % sys.argv[4] -load_time_sync_message(MAG1_STR, sys.argv[4], 'RADIUS Access-Request', 'ICMPv6 Echo') - - -print >>sys.stderr, "Loading MAG2 messages '%s'" % sys.argv[5] -load_messages(MAG2_STR, sys.argv[5]) - -print >>sys.stderr, "Loading MAG2 messages '%s' for time shift computation" % sys.argv[6] -load_time_sync_message(MAG2_STR, sys.argv[6], 'RADIUS Access-Request', 'ICMPv6 Echo') - -print >>sys.stderr, "Compting time shift between LMA/MAG1/MAG2" -compute_initial_clock_diff_between_entities() - -merge_messages_and_apply_time_shift('ICMPv6 Echo') - - -# print msc generated file on stdout -print("msc {") -print("width = \"2048\";") -print(" %s, %s, %s, %s, %s, %s, %s;" % (MN_STR, MAG1_STR, MAG2_STR, LMA_STR, CN_STR, AP1_STR, AP2_STR)) -print(" %s rbox %s [label=\"%s\"], " % (MN_STR, MN_STR, MN_STR)) -print(" %s rbox %s [label=\"%s\"], " % (MAG1_STR, MAG1_STR, MAG1_STR)) -print(" %s rbox %s [label=\"%s\"], " % (MAG2_STR, MAG2_STR, MAG2_STR)) -print(" %s rbox %s [label=\"%s\"], " % (LMA_STR, LMA_STR, LMA_STR)) -print(" %s rbox %s [label=\"%s\"], " % (CN_STR, CN_STR, CN_STR)) -print(" %s rbox %s [label=\"%s\"], " % (AP1_STR, AP1_STR, AP1_STR)) -print(" %s rbox %s [label=\"%s\"]; " % (AP2_STR, AP2_STR, AP2_STR)) - -G_lma_mag1_tunnel = False -G_lma_mag2_tunnel = False - -for key in sorted(g_messages.iterkeys()): - message = g_messages[key] - - - #print >>sys.stderr, "key '%s'" % key - if message['entity_src'] == 'UNKNOWN' or message['entity_dst'] == 'UNKNOWN': - print(" # %s=>%s [ label = \"[%s] %s\", %s ] ;" % (message['entity_src'], message['entity_dst'], str(key)[11:], message['msg'], message['colors'])) - else : - print(" %s=>%s [ label = \"[%s] %s\", %s ] ;" % (message['entity_src'], message['entity_dst'], str(key)[11:], message['msg'], message['colors'])) -print("}") diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/extras/output-process/pcap2msc_check.py b/openair3/PMIPv6/pmipv6-daemon-umip/extras/output-process/pcap2msc_check.py deleted file mode 100755 index f950f86b48..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/extras/output-process/pcap2msc_check.py +++ /dev/null @@ -1,41 +0,0 @@ -#!/usr/bin/python -# -*- coding: utf-8 -*- -# Program pcap2msc_check.py - -import sys -import re -import datetime - -g_echo_reply_last_seq = -1 -g_echo_request_last_seq = -1 -g_line_number = 0 - -fhandle = open(sys.argv[1], 'r') -fcontent = fhandle.read() -fhandle.close() -# split file content in lines -lines = fcontent.splitlines() -for line in lines: - g_line_number = g_line_number + 1 - if 'ICMPv6 Echo reply seq ' in line: - message_string = line.split('\"')[1] - g_echo_reply_last_seq = int(message_string.split(' ')[-1]) - #sys.stdout.write("g_echo_reply_last_seq = %d\n" % (g_echo_reply_last_seq)) - if g_echo_reply_last_seq > g_echo_request_last_seq: - sys.stdout.write("Line %d: %s\n" % (g_line_number, line)) - sys.stdout.write("ERROR found ECHO REPLY SEQ %d AFTER ECHO REQUEST SEQ %d\n" % (g_echo_reply_last_seq, g_echo_request_last_seq)) - s = raw_input('Press any key to exit...') - sys.exit(-1) - if 'ICMPv6 Echo request seq ' in line: - message_string = line.split('\"')[1] - g_echo_request_last_seq = int(message_string.split(' ')[-1]) - #sys.stdout.write("g_echo_request_last_seq = %d\n" % (g_echo_request_last_seq)) - if g_echo_reply_last_seq >= g_echo_request_last_seq: - sys.stdout.write("Line %d: %s\n" % (g_line_number, line)) - sys.stdout.write("ERROR found ECHO REQUEST SEQ %d AFTER ECHO REPLY SEQ %d\n" % (g_echo_request_last_seq, g_echo_reply_last_seq)) - s = raw_input('Press any key to exit...') - sys.exit(-1) - -sys.stdout.write("File %s is OK\n" % sys.argv[1]) - - diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/extras/output-process/pcap2msc_filter.py b/openair3/PMIPv6/pmipv6-daemon-umip/extras/output-process/pcap2msc_filter.py deleted file mode 100755 index 8eed79eb42..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/extras/output-process/pcap2msc_filter.py +++ /dev/null @@ -1,103 +0,0 @@ -#!/usr/bin/python -# -*- coding: utf-8 -*- - -import sys -import re -import datetime - -g_echo_reply_last_seq = -2 -g_echo_request_last_seq = -2 - -g_buffer = [] - -g_icmp_buffer = {} -g_icmp_buffer_count = {} -#g_icmp_buffer_first_seq = -2 - -def filter_write(lines): - global g_fwhandle - for line in lines: - g_fwhandle.write(line+'\n') - - -def flush_icmp_buffer(): - global g_icmp_buffer - global g_icmp_buffer_count - global g_fwhandle - - print >>sys.stderr, "g_icmp_buffer: " , g_icmp_buffer - print >>sys.stderr, "g_icmp_buffer_count: " , g_icmp_buffer_count - last_written_seq = -2 - item_index = 0 - num_keys = len(g_icmp_buffer) - for key_seq in sorted(g_icmp_buffer.iterkeys()): - item_index = item_index + 1 - lines = g_icmp_buffer[key_seq] - icmp_count = g_icmp_buffer_count[key_seq] - if last_written_seq < 0: - last_written_seq = key_seq - filter_write(lines) - elif item_index == num_keys: - last_written_seq = key_seq - filter_write(lines) - elif icmp_count != 0: - last_written_seq = key_seq - filter_write(lines) - else: - if (last_written_seq + 1) == key_seq: - g_fwhandle.write(' --- [ label = "ICMP echo traffic"];\n') - g_icmp_buffer = {} - g_icmp_buffer_count = {} - - -g_fwhandle = open(sys.argv[1]+'.icmp_filtered', 'w') -g_fhandle = open(sys.argv[1], 'r') -g_fcontent = g_fhandle.read() -g_fhandle.close() -# split file content in lines -lines = g_fcontent.splitlines() -for line in lines: - if 'ICMPv6 Echo reply seq ' in line: - message_string = line.split('\"')[1] - g_echo_reply_last_seq = int(message_string.split(' ')[-1]) - sys.stdout.write("g_echo_reply_last_seq = %d\n" % (g_echo_reply_last_seq)) - - # buffer line - if g_echo_reply_last_seq not in g_icmp_buffer: - g_icmp_buffer[g_echo_reply_last_seq] = [] - g_icmp_buffer[g_echo_reply_last_seq].append(line) - - # count num echo req, num echo reply - if g_echo_reply_last_seq not in g_icmp_buffer_count: - g_icmp_buffer_count[g_echo_reply_last_seq] = -1 - flush_icmp_buffer() - else: - g_icmp_buffer_count[g_echo_reply_last_seq] = g_icmp_buffer_count[g_echo_reply_last_seq] - 1 - - - if g_echo_reply_last_seq > g_echo_request_last_seq: - flush_icmp_buffer() - - elif 'ICMPv6 Echo request seq ' in line: - message_string = line.split('\"')[1] - g_echo_request_last_seq = int(message_string.split(' ')[-1]) - sys.stdout.write("g_echo_request_last_seq = %d\n" % (g_echo_request_last_seq)) - - if g_echo_request_last_seq not in g_icmp_buffer: - g_icmp_buffer[g_echo_request_last_seq] = [] - g_icmp_buffer[g_echo_request_last_seq].append(line) - - # count num echo req, num echo reply - if g_echo_request_last_seq not in g_icmp_buffer_count: - g_icmp_buffer_count[g_echo_request_last_seq] = 1 - else: - g_icmp_buffer_count[g_echo_request_last_seq] = g_icmp_buffer_count[g_echo_request_last_seq] + 1 - - - if g_echo_reply_last_seq >= g_echo_request_last_seq: - flush_icmp_buffer() - else: - flush_icmp_buffer() - g_fwhandle.write(line+'\n') - -g_fwhandle.close() diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/extras/output-process/pmip_mscgen.sh b/openair3/PMIPv6/pmipv6-daemon-umip/extras/output-process/pmip_mscgen.sh deleted file mode 100755 index 2b521e6128..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/extras/output-process/pmip_mscgen.sh +++ /dev/null @@ -1,20 +0,0 @@ -#!/bin/sh -rm -f $1/logs/pcap2msc.output ; - -python $1/extras/output-process/pcap2msc $1/logs/lma2mags.$run_version.pcap \ - $1/logs/lma2cn.$run_version.pcap \ - $1/logs/mag12ap.$run_version.pcap \ - $1/logs/mag12lma.$run_version.pcap \ - $1/logs/mag22ap.$run_version.pcap \ - $1/logs/mag22lma.$run_version.pcap > $1/logs/pcap2msc.$run_version.output ; -sync; - -python $1/extras/output-process/pcap2msc_check.py $1/logs/pcap2msc.$run_version.output - -python $1/extras/output-process/pcap2msc_filter.py $1/logs/pcap2msc.$run_version.output - - -cat $1/logs/pcap2msc.$run_version.output.icmp_filtered | mscgen -T png -o $1/logs/pmip_icmp_filtered.$run_version.png - - -eog $1/logs/pmip_icmp_filtered.$run_version.png & diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/include/libnetlink.h b/openair3/PMIPv6/pmipv6-daemon-umip/include/libnetlink.h deleted file mode 100755 index e25336fba2..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/include/libnetlink.h +++ /dev/null @@ -1,87 +0,0 @@ -#ifndef __LIBNETLINK_H__ -#define __LIBNETLINK_H__ 1 - -#include -#include -#include -#include -#include -#include - -struct rtnl_handle { - int fd; - struct sockaddr_nl local; - struct sockaddr_nl peer; - __u32 seq; - __u32 dump; -}; - -extern int rtnl_open(struct rtnl_handle *rth, unsigned subscriptions); -extern int rtnl_open_byproto(struct rtnl_handle *rth, unsigned subscriptions, int protocol); -extern void rtnl_close(struct rtnl_handle *rth); -extern int rtnl_wilddump_request(struct rtnl_handle *rth, int fam, int type); -extern int rtnl_dump_request(struct rtnl_handle *rth, int type, void *req, int len); - -typedef int (*rtnl_filter_t)(const struct sockaddr_nl *, - struct nlmsghdr *n, void *); -extern int rtnl_dump_filter(struct rtnl_handle *rth, rtnl_filter_t filter, - void *arg1, - rtnl_filter_t junk, - void *arg2); -extern int rtnl_talk(struct rtnl_handle *rtnl, struct nlmsghdr *n, pid_t peer, - unsigned groups, struct nlmsghdr *answer, - rtnl_filter_t junk, - void *jarg); - -extern int addattr32(struct nlmsghdr *n, int maxlen, int type, __u32 data); -extern int addattr_l(struct nlmsghdr *n, int maxlen, int type, const void *data, int alen); -extern int addraw_l(struct nlmsghdr *n, int maxlen, const void *data, int len); -extern int rta_addattr32(struct rtattr *rta, int maxlen, int type, __u32 data); -extern int rta_addattr_l(struct rtattr *rta, int maxlen, int type, const void *data, int alen); - -extern int parse_rtattr(struct rtattr *tb[], int max, struct rtattr *rta, int len); -extern int parse_rtattr_byindex(struct rtattr *tb[], int max, struct rtattr *rta, int len); - -#define parse_rtattr_nested(tb, max, rta) \ - (parse_rtattr((tb), (max), RTA_DATA(rta), RTA_PAYLOAD(rta))) - -extern int rtnl_listen(struct rtnl_handle *, rtnl_filter_t handler, - void *jarg); - -#define NLMSG_TAIL(nmsg) \ - ((struct rtattr *) (((void *) (nmsg)) + NLMSG_ALIGN((nmsg)->nlmsg_len))) - -#ifndef IFA_RTA -#define IFA_RTA(r) \ - ((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct ifaddrmsg)))) -#endif -#ifndef IFA_PAYLOAD -#define IFA_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct ifaddrmsg)) -#endif - -#ifndef IFLA_RTA -#define IFLA_RTA(r) \ - ((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct ifinfomsg)))) -#endif -#ifndef IFLA_PAYLOAD -#define IFLA_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct ifinfomsg)) -#endif - -#ifndef NDA_RTA -#define NDA_RTA(r) \ - ((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct ndmsg)))) -#endif -#ifndef NDA_PAYLOAD -#define NDA_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct ndmsg)) -#endif - -#ifndef NDTA_RTA -#define NDTA_RTA(r) \ - ((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct ndtmsg)))) -#endif -#ifndef NDTA_PAYLOAD -#define NDTA_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct ndtmsg)) -#endif - -#endif /* __LIBNETLINK_H__ */ - diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/include/linux/xfrm.h b/openair3/PMIPv6/pmipv6-daemon-umip/include/linux/xfrm.h deleted file mode 100755 index 4f7c10c265..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/include/linux/xfrm.h +++ /dev/null @@ -1,490 +0,0 @@ -#ifndef _LINUX_XFRM_H -#define _LINUX_XFRM_H - -#include - -/* All of the structures in this file may not change size as they are - * passed into the kernel from userspace via netlink sockets. - */ - -/* Structure to encapsulate addresses. I do not want to use - * "standard" structure. My apologies. - */ -typedef union { - __be32 a4; - __be32 a6[4]; -} xfrm_address_t; - -/* Ident of a specific xfrm_state. It is used on input to lookup - * the state by (spi,daddr,ah/esp) or to store information about - * spi, protocol and tunnel address on output. - */ -struct xfrm_id { - xfrm_address_t daddr; - __be32 spi; - __u8 proto; -}; - -struct xfrm_sec_ctx { - __u8 ctx_doi; - __u8 ctx_alg; - __u16 ctx_len; - __u32 ctx_sid; - char ctx_str[0]; -}; - -/* Security Context Domains of Interpretation */ -#define XFRM_SC_DOI_RESERVED 0 -#define XFRM_SC_DOI_LSM 1 - -/* Security Context Algorithms */ -#define XFRM_SC_ALG_RESERVED 0 -#define XFRM_SC_ALG_SELINUX 1 - -/* Selector, used as selector both on policy rules (SPD) and SAs. */ - -struct xfrm_selector { - xfrm_address_t daddr; - xfrm_address_t saddr; - __be16 dport; - __be16 dport_mask; - __be16 sport; - __be16 sport_mask; - __u16 family; - __u8 prefixlen_d; - __u8 prefixlen_s; - __u8 proto; - int ifindex; - __kernel_uid32_t user; -}; - -#define XFRM_INF (~(__u64)0) - -struct xfrm_lifetime_cfg { - __u64 soft_byte_limit; - __u64 hard_byte_limit; - __u64 soft_packet_limit; - __u64 hard_packet_limit; - __u64 soft_add_expires_seconds; - __u64 hard_add_expires_seconds; - __u64 soft_use_expires_seconds; - __u64 hard_use_expires_seconds; -}; - -struct xfrm_lifetime_cur { - __u64 bytes; - __u64 packets; - __u64 add_time; - __u64 use_time; -}; - -struct xfrm_replay_state { - __u32 oseq; - __u32 seq; - __u32 bitmap; -}; - -struct xfrm_algo { - char alg_name[64]; - unsigned int alg_key_len; /* in bits */ - char alg_key[0]; -}; - -struct xfrm_algo_auth { - char alg_name[64]; - unsigned int alg_key_len; /* in bits */ - unsigned int alg_trunc_len; /* in bits */ - char alg_key[0]; -}; - -struct xfrm_algo_aead { - char alg_name[64]; - unsigned int alg_key_len; /* in bits */ - unsigned int alg_icv_len; /* in bits */ - char alg_key[0]; -}; - -struct xfrm_stats { - __u32 replay_window; - __u32 replay; - __u32 integrity_failed; -}; - -enum { - XFRM_POLICY_TYPE_MAIN = 0, - XFRM_POLICY_TYPE_SUB = 1, - XFRM_POLICY_TYPE_MAX = 2, - XFRM_POLICY_TYPE_ANY = 255 -}; - -enum { - XFRM_POLICY_IN = 0, - XFRM_POLICY_OUT = 1, - XFRM_POLICY_FWD = 2, - XFRM_POLICY_MASK = 3, - XFRM_POLICY_MAX = 3 -}; - -enum { - XFRM_SHARE_ANY, /* No limitations */ - XFRM_SHARE_SESSION, /* For this session only */ - XFRM_SHARE_USER, /* For this user only */ - XFRM_SHARE_UNIQUE /* Use once */ -}; - -#define XFRM_MODE_TRANSPORT 0 -#define XFRM_MODE_TUNNEL 1 -#define XFRM_MODE_ROUTEOPTIMIZATION 2 -#define XFRM_MODE_IN_TRIGGER 3 -#define XFRM_MODE_BEET 4 -#define XFRM_MODE_MAX 5 - -/* Netlink configuration messages. */ -enum { - XFRM_MSG_BASE = 0x10, - - XFRM_MSG_NEWSA = 0x10, -#define XFRM_MSG_NEWSA XFRM_MSG_NEWSA - XFRM_MSG_DELSA, -#define XFRM_MSG_DELSA XFRM_MSG_DELSA - XFRM_MSG_GETSA, -#define XFRM_MSG_GETSA XFRM_MSG_GETSA - - XFRM_MSG_NEWPOLICY, -#define XFRM_MSG_NEWPOLICY XFRM_MSG_NEWPOLICY - XFRM_MSG_DELPOLICY, -#define XFRM_MSG_DELPOLICY XFRM_MSG_DELPOLICY - XFRM_MSG_GETPOLICY, -#define XFRM_MSG_GETPOLICY XFRM_MSG_GETPOLICY - - XFRM_MSG_ALLOCSPI, -#define XFRM_MSG_ALLOCSPI XFRM_MSG_ALLOCSPI - XFRM_MSG_ACQUIRE, -#define XFRM_MSG_ACQUIRE XFRM_MSG_ACQUIRE - XFRM_MSG_EXPIRE, -#define XFRM_MSG_EXPIRE XFRM_MSG_EXPIRE - - XFRM_MSG_UPDPOLICY, -#define XFRM_MSG_UPDPOLICY XFRM_MSG_UPDPOLICY - XFRM_MSG_UPDSA, -#define XFRM_MSG_UPDSA XFRM_MSG_UPDSA - - XFRM_MSG_POLEXPIRE, -#define XFRM_MSG_POLEXPIRE XFRM_MSG_POLEXPIRE - - XFRM_MSG_FLUSHSA, -#define XFRM_MSG_FLUSHSA XFRM_MSG_FLUSHSA - XFRM_MSG_FLUSHPOLICY, -#define XFRM_MSG_FLUSHPOLICY XFRM_MSG_FLUSHPOLICY - - XFRM_MSG_NEWAE, -#define XFRM_MSG_NEWAE XFRM_MSG_NEWAE - XFRM_MSG_GETAE, -#define XFRM_MSG_GETAE XFRM_MSG_GETAE - - XFRM_MSG_REPORT, -#define XFRM_MSG_REPORT XFRM_MSG_REPORT - - XFRM_MSG_MIGRATE, -#define XFRM_MSG_MIGRATE XFRM_MSG_MIGRATE - - XFRM_MSG_NEWSADINFO, -#define XFRM_MSG_NEWSADINFO XFRM_MSG_NEWSADINFO - XFRM_MSG_GETSADINFO, -#define XFRM_MSG_GETSADINFO XFRM_MSG_GETSADINFO - - XFRM_MSG_NEWSPDINFO, -#define XFRM_MSG_NEWSPDINFO XFRM_MSG_NEWSPDINFO - XFRM_MSG_GETSPDINFO, -#define XFRM_MSG_GETSPDINFO XFRM_MSG_GETSPDINFO - - XFRM_MSG_MAPPING, -#define XFRM_MSG_MAPPING XFRM_MSG_MAPPING - __XFRM_MSG_MAX -}; -#define XFRM_MSG_MAX (__XFRM_MSG_MAX - 1) - -#define XFRM_NR_MSGTYPES (XFRM_MSG_MAX + 1 - XFRM_MSG_BASE) - -/* - * Generic LSM security context for comunicating to user space - * NOTE: Same format as sadb_x_sec_ctx - */ -struct xfrm_user_sec_ctx { - __u16 len; - __u16 exttype; - __u8 ctx_alg; /* LSMs: e.g., selinux == 1 */ - __u8 ctx_doi; - __u16 ctx_len; -}; - -struct xfrm_user_tmpl { - struct xfrm_id id; - __u16 family; - xfrm_address_t saddr; - __u32 reqid; - __u8 mode; - __u8 share; - __u8 optional; - __u32 aalgos; - __u32 ealgos; - __u32 calgos; -}; - -struct xfrm_encap_tmpl { - __u16 encap_type; - __be16 encap_sport; - __be16 encap_dport; - xfrm_address_t encap_oa; -}; - -/* AEVENT flags */ -enum xfrm_ae_ftype_t { - XFRM_AE_UNSPEC, - XFRM_AE_RTHR=1, /* replay threshold*/ - XFRM_AE_RVAL=2, /* replay value */ - XFRM_AE_LVAL=4, /* lifetime value */ - XFRM_AE_ETHR=8, /* expiry timer threshold */ - XFRM_AE_CR=16, /* Event cause is replay update */ - XFRM_AE_CE=32, /* Event cause is timer expiry */ - XFRM_AE_CU=64, /* Event cause is policy update */ - __XFRM_AE_MAX - -#define XFRM_AE_MAX (__XFRM_AE_MAX - 1) -}; - -struct xfrm_userpolicy_type { - __u8 type; - __u16 reserved1; - __u8 reserved2; -}; - -/* Netlink message attributes. */ -enum xfrm_attr_type_t { - XFRMA_UNSPEC, - XFRMA_ALG_AUTH, /* struct xfrm_algo */ - XFRMA_ALG_CRYPT, /* struct xfrm_algo */ - XFRMA_ALG_COMP, /* struct xfrm_algo */ - XFRMA_ENCAP, /* struct xfrm_algo + struct xfrm_encap_tmpl */ - XFRMA_TMPL, /* 1 or more struct xfrm_user_tmpl */ - XFRMA_SA, /* struct xfrm_usersa_info */ - XFRMA_POLICY, /*struct xfrm_userpolicy_info */ - XFRMA_SEC_CTX, /* struct xfrm_sec_ctx */ - XFRMA_LTIME_VAL, - XFRMA_REPLAY_VAL, - XFRMA_REPLAY_THRESH, - XFRMA_ETIMER_THRESH, - XFRMA_SRCADDR, /* xfrm_address_t */ - XFRMA_COADDR, /* xfrm_address_t */ - XFRMA_LASTUSED, /* unsigned long */ - XFRMA_POLICY_TYPE, /* struct xfrm_userpolicy_type */ - XFRMA_MIGRATE, - XFRMA_ALG_AEAD, /* struct xfrm_algo_aead */ - XFRMA_KMADDRESS, /* struct xfrm_user_kmaddress */ - XFRMA_ALG_AUTH_TRUNC, /* struct xfrm_algo_auth */ - XFRMA_MARK, /* struct xfrm_mark */ - __XFRMA_MAX - -#define XFRMA_MAX (__XFRMA_MAX - 1) -}; - -struct xfrm_mark { - __u32 v; /* value */ - __u32 m; /* mask */ -}; - -enum xfrm_sadattr_type_t { - XFRMA_SAD_UNSPEC, - XFRMA_SAD_CNT, - XFRMA_SAD_HINFO, - __XFRMA_SAD_MAX - -#define XFRMA_SAD_MAX (__XFRMA_SAD_MAX - 1) -}; - -struct xfrmu_sadhinfo { - __u32 sadhcnt; /* current hash bkts */ - __u32 sadhmcnt; /* max allowed hash bkts */ -}; - -enum xfrm_spdattr_type_t { - XFRMA_SPD_UNSPEC, - XFRMA_SPD_INFO, - XFRMA_SPD_HINFO, - __XFRMA_SPD_MAX - -#define XFRMA_SPD_MAX (__XFRMA_SPD_MAX - 1) -}; - -struct xfrmu_spdinfo { - __u32 incnt; - __u32 outcnt; - __u32 fwdcnt; - __u32 inscnt; - __u32 outscnt; - __u32 fwdscnt; -}; - -struct xfrmu_spdhinfo { - __u32 spdhcnt; - __u32 spdhmcnt; -}; - -struct xfrm_usersa_info { - struct xfrm_selector sel; - struct xfrm_id id; - xfrm_address_t saddr; - struct xfrm_lifetime_cfg lft; - struct xfrm_lifetime_cur curlft; - struct xfrm_stats stats; - __u32 seq; - __u32 reqid; - __u16 family; - __u8 mode; /* XFRM_MODE_xxx */ - __u8 replay_window; - __u8 flags; -#define XFRM_STATE_NOECN 1 -#define XFRM_STATE_DECAP_DSCP 2 -#define XFRM_STATE_NOPMTUDISC 4 -#define XFRM_STATE_WILDRECV 8 -#define XFRM_STATE_ICMP 16 -#define XFRM_STATE_AF_UNSPEC 32 -}; - -struct xfrm_usersa_id { - xfrm_address_t daddr; - __be32 spi; - __u16 family; - __u8 proto; -}; - -struct xfrm_aevent_id { - struct xfrm_usersa_id sa_id; - xfrm_address_t saddr; - __u32 flags; - __u32 reqid; -}; - -struct xfrm_userspi_info { - struct xfrm_usersa_info info; - __u32 min; - __u32 max; -}; - -struct xfrm_userpolicy_info { - struct xfrm_selector sel; - struct xfrm_lifetime_cfg lft; - struct xfrm_lifetime_cur curlft; - __u32 priority; - __u32 index; - __u8 dir; - __u8 action; -#define XFRM_POLICY_ALLOW 0 -#define XFRM_POLICY_BLOCK 1 - __u8 flags; -#define XFRM_POLICY_LOCALOK 1 /* Allow user to override global policy */ - /* Automatically expand selector to include matching ICMP payloads. */ -#define XFRM_POLICY_ICMP 2 - __u8 share; -}; - -struct xfrm_userpolicy_id { - struct xfrm_selector sel; - __u32 index; - __u8 dir; -}; - -struct xfrm_user_acquire { - struct xfrm_id id; - xfrm_address_t saddr; - struct xfrm_selector sel; - struct xfrm_userpolicy_info policy; - __u32 aalgos; - __u32 ealgos; - __u32 calgos; - __u32 seq; -}; - -struct xfrm_user_expire { - struct xfrm_usersa_info state; - __u8 hard; -}; - -struct xfrm_user_polexpire { - struct xfrm_userpolicy_info pol; - __u8 hard; -}; - -struct xfrm_usersa_flush { - __u8 proto; -}; - -struct xfrm_user_report { - __u8 proto; - struct xfrm_selector sel; -}; - -/* Used by MIGRATE to pass addresses IKE should use to perform - * SA negotiation with the peer */ -struct xfrm_user_kmaddress { - xfrm_address_t local; - xfrm_address_t remote; - __u32 reserved; - __u16 family; -}; - -struct xfrm_user_migrate { - xfrm_address_t old_daddr; - xfrm_address_t old_saddr; - xfrm_address_t new_daddr; - xfrm_address_t new_saddr; - __u8 proto; - __u8 mode; - __u16 reserved; - __u32 reqid; - __u16 old_family; - __u16 new_family; -}; - -struct xfrm_user_mapping { - struct xfrm_usersa_id id; - __u32 reqid; - xfrm_address_t old_saddr; - xfrm_address_t new_saddr; - __be16 old_sport; - __be16 new_sport; -}; - -#ifndef __KERNEL__ -/* backwards compatibility for userspace */ -#define XFRMGRP_ACQUIRE 1 -#define XFRMGRP_EXPIRE 2 -#define XFRMGRP_SA 4 -#define XFRMGRP_POLICY 8 -#define XFRMGRP_REPORT 0x20 -#endif - -enum xfrm_nlgroups { - XFRMNLGRP_NONE, -#define XFRMNLGRP_NONE XFRMNLGRP_NONE - XFRMNLGRP_ACQUIRE, -#define XFRMNLGRP_ACQUIRE XFRMNLGRP_ACQUIRE - XFRMNLGRP_EXPIRE, -#define XFRMNLGRP_EXPIRE XFRMNLGRP_EXPIRE - XFRMNLGRP_SA, -#define XFRMNLGRP_SA XFRMNLGRP_SA - XFRMNLGRP_POLICY, -#define XFRMNLGRP_POLICY XFRMNLGRP_POLICY - XFRMNLGRP_AEVENTS, -#define XFRMNLGRP_AEVENTS XFRMNLGRP_AEVENTS - XFRMNLGRP_REPORT, -#define XFRMNLGRP_REPORT XFRMNLGRP_REPORT - XFRMNLGRP_MIGRATE, -#define XFRMNLGRP_MIGRATE XFRMNLGRP_MIGRATE - XFRMNLGRP_MAPPING, -#define XFRMNLGRP_MAPPING XFRMNLGRP_MAPPING - __XFRMNLGRP_MAX -}; -#define XFRMNLGRP_MAX (__XFRMNLGRP_MAX - 1) - -#endif /* _LINUX_XFRM_H */ diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/include/netinet/icmp6.h b/openair3/PMIPv6/pmipv6-daemon-umip/include/netinet/icmp6.h deleted file mode 100755 index 2ef20db3e8..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/include/netinet/icmp6.h +++ /dev/null @@ -1,461 +0,0 @@ -/* - * This file is basically the icmp6.h header file provided by the GNU - * C Library (see associated copyright header below), but with three - * main changes: - * - * - inclusion of config.h at the beginning of the file - * - explicit packing of struct nd_opt_hdr to avoid sanity checks - * using sizeof to fail on architectures like ARM, as reported - * on the list (http://www.linux-ipv6.org/ml/usagi-users/msg04078.html) - * - definition of additional values and structures at the end of - * the file. - * - * Note that the module defines _NETINET_ICMP6_H, just like the usual - * to avoid its inclusion. --arno - */ - -/* Copyright (C) 1991-1997,2000,2006,2009 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#ifndef _NETINET_ICMP6_H -#define _NETINET_ICMP6_H 1 - -#include -#include -#include -#include -#include - -#define ICMP6_FILTER 1 - -#define ICMP6_FILTER_BLOCK 1 -#define ICMP6_FILTER_PASS 2 -#define ICMP6_FILTER_BLOCKOTHERS 3 -#define ICMP6_FILTER_PASSONLY 4 - -struct icmp6_filter { - uint32_t icmp6_filt[8]; -}; - -struct icmp6_hdr { - uint8_t icmp6_type; /* type field */ - uint8_t icmp6_code; /* code field */ - uint16_t icmp6_cksum; /* checksum field */ - union { - uint32_t icmp6_un_data32[1]; /* type-specific field */ - uint16_t icmp6_un_data16[2]; /* type-specific field */ - uint8_t icmp6_un_data8[4]; /* type-specific field */ - } icmp6_dataun; -}; - -#define icmp6_data32 icmp6_dataun.icmp6_un_data32 -#define icmp6_data16 icmp6_dataun.icmp6_un_data16 -#define icmp6_data8 icmp6_dataun.icmp6_un_data8 -#define icmp6_pptr icmp6_data32[0] /* parameter prob */ -#define icmp6_mtu icmp6_data32[0] /* packet too big */ -#define icmp6_id icmp6_data16[0] /* echo request/reply */ -#define icmp6_seq icmp6_data16[1] /* echo request/reply */ -#define icmp6_maxdelay icmp6_data16[0] /* mcast group membership */ - -#define ICMP6_DST_UNREACH 1 -#define ICMP6_PACKET_TOO_BIG 2 -#define ICMP6_TIME_EXCEEDED 3 -#define ICMP6_PARAM_PROB 4 - -#define ICMP6_INFOMSG_MASK 0x80 /* all informational messages */ - -#define ICMP6_ECHO_REQUEST 128 -#define ICMP6_ECHO_REPLY 129 -#define MLD_LISTENER_QUERY 130 -#define MLD_LISTENER_REPORT 131 -#define MLD_LISTENER_REDUCTION 132 - -#define ICMP6_DST_UNREACH_NOROUTE 0 /* no route to destination */ -#define ICMP6_DST_UNREACH_ADMIN 1 /* communication with destination */ -/* administratively prohibited */ -#define ICMP6_DST_UNREACH_BEYONDSCOPE 2 /* beyond scope of source address */ -#define ICMP6_DST_UNREACH_ADDR 3 /* address unreachable */ -#define ICMP6_DST_UNREACH_NOPORT 4 /* bad port */ - -#define ICMP6_TIME_EXCEED_TRANSIT 0 /* Hop Limit == 0 in transit */ -#define ICMP6_TIME_EXCEED_REASSEMBLY 1 /* Reassembly time out */ - -#define ICMP6_PARAMPROB_HEADER 0 /* erroneous header field */ -#define ICMP6_PARAMPROB_NEXTHEADER 1 /* unrecognized Next Header */ -#define ICMP6_PARAMPROB_OPTION 2 /* unrecognized IPv6 option */ - -#define ICMP6_FILTER_WILLPASS(type, filterp) \ - ((((filterp)->icmp6_filt[(type) >> 5]) & (1 << ((type) & 31))) == 0) - -#define ICMP6_FILTER_WILLBLOCK(type, filterp) \ - ((((filterp)->icmp6_filt[(type) >> 5]) & (1 << ((type) & 31))) != 0) - -#define ICMP6_FILTER_SETPASS(type, filterp) \ - ((((filterp)->icmp6_filt[(type) >> 5]) &= ~(1 << ((type) & 31)))) - -#define ICMP6_FILTER_SETBLOCK(type, filterp) \ - ((((filterp)->icmp6_filt[(type) >> 5]) |= (1 << ((type) & 31)))) - -#define ICMP6_FILTER_SETPASSALL(filterp) \ - memset (filterp, 0, sizeof (struct icmp6_filter)); - -#define ICMP6_FILTER_SETBLOCKALL(filterp) \ - memset (filterp, 0xFF, sizeof (struct icmp6_filter)); - -#define ND_ROUTER_SOLICIT 133 -#define ND_ROUTER_ADVERT 134 -#define ND_NEIGHBOR_SOLICIT 135 -#define ND_NEIGHBOR_ADVERT 136 -#define ND_REDIRECT 137 - -struct nd_router_solicit { /* router solicitation */ - struct icmp6_hdr nd_rs_hdr; - /* could be followed by options */ -}; - -#define nd_rs_type nd_rs_hdr.icmp6_type -#define nd_rs_code nd_rs_hdr.icmp6_code -#define nd_rs_cksum nd_rs_hdr.icmp6_cksum -#define nd_rs_reserved nd_rs_hdr.icmp6_data32[0] - -struct nd_router_advert { /* router advertisement */ - struct icmp6_hdr nd_ra_hdr; - uint32_t nd_ra_reachable; /* reachable time */ - uint32_t nd_ra_retransmit; /* retransmit timer */ - /* could be followed by options */ -}; - -#define nd_ra_type nd_ra_hdr.icmp6_type -#define nd_ra_code nd_ra_hdr.icmp6_code -#define nd_ra_cksum nd_ra_hdr.icmp6_cksum -#define nd_ra_curhoplimit nd_ra_hdr.icmp6_data8[0] -#define nd_ra_flags_reserved nd_ra_hdr.icmp6_data8[1] -#define ND_RA_FLAG_MANAGED 0x80 -#define ND_RA_FLAG_OTHER 0x40 -#define ND_RA_FLAG_HOME_AGENT 0x20 -#define nd_ra_router_lifetime nd_ra_hdr.icmp6_data16[1] - -struct nd_neighbor_solicit { /* neighbor solicitation */ - struct icmp6_hdr nd_ns_hdr; - struct in6_addr nd_ns_target; /* target address */ - /* could be followed by options */ -}; - -#define nd_ns_type nd_ns_hdr.icmp6_type -#define nd_ns_code nd_ns_hdr.icmp6_code -#define nd_ns_cksum nd_ns_hdr.icmp6_cksum -#define nd_ns_reserved nd_ns_hdr.icmp6_data32[0] - -struct nd_neighbor_advert { /* neighbor advertisement */ - struct icmp6_hdr nd_na_hdr; - struct in6_addr nd_na_target; /* target address */ - /* could be followed by options */ -}; - -#define nd_na_type nd_na_hdr.icmp6_type -#define nd_na_code nd_na_hdr.icmp6_code -#define nd_na_cksum nd_na_hdr.icmp6_cksum -#define nd_na_flags_reserved nd_na_hdr.icmp6_data32[0] -#if BYTE_ORDER == BIG_ENDIAN -#define ND_NA_FLAG_ROUTER 0x80000000 -#define ND_NA_FLAG_SOLICITED 0x40000000 -#define ND_NA_FLAG_OVERRIDE 0x20000000 -#else /* BYTE_ORDER == LITTLE_ENDIAN */ -#define ND_NA_FLAG_ROUTER 0x00000080 -#define ND_NA_FLAG_SOLICITED 0x00000040 -#define ND_NA_FLAG_OVERRIDE 0x00000020 -#endif - -struct nd_redirect { /* redirect */ - struct icmp6_hdr nd_rd_hdr; - struct in6_addr nd_rd_target; /* target address */ - struct in6_addr nd_rd_dst; /* destination address */ - /* could be followed by options */ -}; - -#define nd_rd_type nd_rd_hdr.icmp6_type -#define nd_rd_code nd_rd_hdr.icmp6_code -#define nd_rd_cksum nd_rd_hdr.icmp6_cksum -#define nd_rd_reserved nd_rd_hdr.icmp6_data32[0] - -struct nd_opt_hdr { /* Neighbor discovery option header */ - uint8_t nd_opt_type; - uint8_t nd_opt_len; /* in units of 8 octets */ - /* followed by option specific data */ -} __attribute__ ((packed)); - -#define ND_OPT_SOURCE_LINKADDR 1 -#define ND_OPT_TARGET_LINKADDR 2 -#define ND_OPT_PREFIX_INFORMATION 3 -#define ND_OPT_REDIRECTED_HEADER 4 -#define ND_OPT_MTU 5 -#define ND_OPT_RTR_ADV_INTERVAL 7 -#define ND_OPT_HOME_AGENT_INFO 8 - -struct nd_opt_prefix_info { /* prefix information */ - uint8_t nd_opt_pi_type; - uint8_t nd_opt_pi_len; - uint8_t nd_opt_pi_prefix_len; - uint8_t nd_opt_pi_flags_reserved; - uint32_t nd_opt_pi_valid_time; - uint32_t nd_opt_pi_preferred_time; - uint32_t nd_opt_pi_reserved2; - struct in6_addr nd_opt_pi_prefix; -}; - -#define ND_OPT_PI_FLAG_ONLINK 0x80 -#define ND_OPT_PI_FLAG_AUTO 0x40 -#define ND_OPT_PI_FLAG_RADDR 0x20 - -struct nd_opt_rd_hdr { /* redirected header */ - uint8_t nd_opt_rh_type; - uint8_t nd_opt_rh_len; - uint16_t nd_opt_rh_reserved1; - uint32_t nd_opt_rh_reserved2; - /* followed by IP header and data */ -}; - -struct nd_opt_mtu { /* MTU option */ - uint8_t nd_opt_mtu_type; - uint8_t nd_opt_mtu_len; - uint16_t nd_opt_mtu_reserved; - uint32_t nd_opt_mtu_mtu; -}; - -struct mld_hdr { - struct icmp6_hdr mld_icmp6_hdr; - struct in6_addr mld_addr; /* multicast address */ -}; - -#define mld_type mld_icmp6_hdr.icmp6_type -#define mld_code mld_icmp6_hdr.icmp6_code -#define mld_cksum mld_icmp6_hdr.icmp6_cksum -#define mld_maxdelay mld_icmp6_hdr.icmp6_data16[0] -#define mld_reserved mld_icmp6_hdr.icmp6_data16[1] - -#define ICMP6_ROUTER_RENUMBERING 138 - -struct icmp6_router_renum { /* router renumbering header */ - struct icmp6_hdr rr_hdr; - uint8_t rr_segnum; - uint8_t rr_flags; - uint16_t rr_maxdelay; - uint32_t rr_reserved; -}; - -#define rr_type rr_hdr.icmp6_type -#define rr_code rr_hdr.icmp6_code -#define rr_cksum rr_hdr.icmp6_cksum -#define rr_seqnum rr_hdr.icmp6_data32[0] - -/* Router renumbering flags */ -#define ICMP6_RR_FLAGS_TEST 0x80 -#define ICMP6_RR_FLAGS_REQRESULT 0x40 -#define ICMP6_RR_FLAGS_FORCEAPPLY 0x20 -#define ICMP6_RR_FLAGS_SPECSITE 0x10 -#define ICMP6_RR_FLAGS_PREVDONE 0x08 - -struct rr_pco_match { /* match prefix part */ - uint8_t rpm_code; - uint8_t rpm_len; - uint8_t rpm_ordinal; - uint8_t rpm_matchlen; - uint8_t rpm_minlen; - uint8_t rpm_maxlen; - uint16_t rpm_reserved; - struct in6_addr rpm_prefix; -}; - -/* PCO code values */ -#define RPM_PCO_ADD 1 -#define RPM_PCO_CHANGE 2 -#define RPM_PCO_SETGLOBAL 3 - -struct rr_pco_use { /* use prefix part */ - uint8_t rpu_uselen; - uint8_t rpu_keeplen; - uint8_t rpu_ramask; - uint8_t rpu_raflags; - uint32_t rpu_vltime; - uint32_t rpu_pltime; - uint32_t rpu_flags; - struct in6_addr rpu_prefix; -}; - -#define ICMP6_RR_PCOUSE_RAFLAGS_ONLINK 0x20 -#define ICMP6_RR_PCOUSE_RAFLAGS_AUTO 0x10 - -#if BYTE_ORDER == BIG_ENDIAN -# define ICMP6_RR_PCOUSE_FLAGS_DECRVLTIME 0x80000000 -# define ICMP6_RR_PCOUSE_FLAGS_DECRPLTIME 0x40000000 -#elif BYTE_ORDER == LITTLE_ENDIAN -# define ICMP6_RR_PCOUSE_FLAGS_DECRVLTIME 0x80 -# define ICMP6_RR_PCOUSE_FLAGS_DECRPLTIME 0x40 -#endif - -struct rr_result { /* router renumbering result message */ - uint16_t rrr_flags; - uint8_t rrr_ordinal; - uint8_t rrr_matchedlen; - uint32_t rrr_ifid; - struct in6_addr rrr_prefix; -}; - -#if BYTE_ORDER == BIG_ENDIAN -# define ICMP6_RR_RESULT_FLAGS_OOB 0x0002 -# define ICMP6_RR_RESULT_FLAGS_FORBIDDEN 0x0001 -#elif BYTE_ORDER == LITTLE_ENDIAN -# define ICMP6_RR_RESULT_FLAGS_OOB 0x0200 -# define ICMP6_RR_RESULT_FLAGS_FORBIDDEN 0x0100 -#endif - -/* Mobile IPv6 extension: Advertisement Interval. */ -struct nd_opt_adv_interval { - uint8_t nd_opt_adv_interval_type; - uint8_t nd_opt_adv_interval_len; - uint16_t nd_opt_adv_interval_reserved; - uint32_t nd_opt_adv_interval_ival; -}; - -/* Mobile IPv6 extension: Home Agent Info. */ -struct nd_opt_home_agent_info { - uint8_t nd_opt_home_agent_info_type; - uint8_t nd_opt_home_agent_info_len; - uint16_t nd_opt_home_agent_info_reserved; - uint16_t nd_opt_home_agent_info_preference; - uint16_t nd_opt_home_agent_info_lifetime; -}; - - -/* Elements below are structures and constants used by UMIP which are - * not present in glibc's netinet/icmp6.h */ - -/* - * ICMP message types and definitions for Mobile IPv6 are defined in - * - */ -#define MIP_HA_DISCOVERY_REQUEST 144 -#define MIP_HA_DISCOVERY_REPLY 145 -#define MIP_PREFIX_SOLICIT 146 -#define MIP_PREFIX_ADVERT 147 - -/* - * The following data structures can be used for the ICMP message - * types discussed in section 6.5 through 6.8 in the base Mobile - * IPv6 [2] specification. - */ -#ifndef HAVE_STRUCT_MIP_DHAAD_REQ -struct mip_dhaad_req { /* Dynamic HA Address Discovery */ - struct icmp6_hdr mip_dhreq_hdr; -}; - -#define mip_dhreq_type mip_dhreq_hdr.icmp6_type -#define mip_dhreq_code mip_dhreq_hdr.icmp6_code -#define mip_dhreq_cksum mip_dhreq_hdr.icmp6_cksum -#define mip_dhreq_id mip_dhreq_hdr.icmp6_data16[0] -#define mip_dhreq_flags_reserved mip_dhreq_hdr.icmp6_data16[1] - -#if BYTE_ORDER == BIG_ENDIAN -#define MIP_DHREQ_FLAG_SUPPORT_MR 0x8000 -#else /* BYTE_ORDER == LITTLE_ENDIAN */ -#define MIP_DHREQ_FLAG_SUPPORT_MR 0x0080 -#endif -#endif - -#ifndef HAVE_STRUCT_MIP_DHAAD_REP -struct mip_dhaad_rep { /* HA Address Discovery Reply */ - struct icmp6_hdr mip_dhrep_hdr; - /* Followed by Home Agent IPv6 addresses */ -}; - -#define mip_dhrep_type mip_dhrep_hdr.icmp6_type -#define mip_dhrep_code mip_dhrep_hdr.icmp6_code -#define mip_dhrep_cksum mip_dhrep_hdr.icmp6_cksum -#define mip_dhrep_id mip_dhrep_hdr.icmp6_data16[0] -#define mip_dhrep_flags_reserved mip_dhrep_hdr.icmp6_data16[1] - -#if BYTE_ORDER == BIG_ENDIAN -#define MIP_DHREP_FLAG_SUPPORT_MR 0x8000 -#else /* BYTE_ORDER == LITTLE_ENDIAN */ -#define MIP_DHREP_FLAG_SUPPORT_MR 0x0080 -#endif -#endif - -#ifndef HAVE_STRUCT_MIP_PREFIX_SOLICIT -struct mip_prefix_solicit { /* Mobile Prefix Solicitation */ - struct icmp6_hdr mip_ps_hdr; -}; - -#define mip_ps_type mip_ps_hdr.icmp6_type -#define mip_ps_code mip_ps_hdr.icmp6_code -#define mip_ps_cksum mip_ps_hdr.icmp6_cksum -#define mip_ps_id mip_ps_hdr.icmp6_data16[0] -#define mip_ps_reserved mip_ps_hdr.icmp6_data16[1] -#endif - -#ifndef HAVE_STRUCT_MIP_PREFIX_ADVERT -struct mip_prefix_advert { /* Mobile Prefix Adverisements */ - struct icmp6_hdr mip_pa_hdr; - /* Followed by one or more PI options */ -}; - -#define mip_pa_type mip_pa_hdr.icmp6_type -#define mip_pa_code mip_pa_hdr.icmp6_code -#define mip_pa_cksum mip_pa_hdr.icmp6_cksum -#define mip_pa_id mip_pa_hdr.icmp6_data16[0] -#define mip_pa_flags_reserved mip_pa_hdr.icmp6_data16[1] - -#if BYTE_ORDER == BIG_ENDIAN -#define MIP_PA_FLAG_MANAGED 0x8000 -#define MIP_PA_FLAG_OTHER 0x4000 -#else /* BYTE_ORDER == LITTLE_ENDIAN */ -#define MIP_PA_FLAG_MANAGED 0x0080 -#define MIP_PA_FLAG_OTHER 0x0040 -#endif - -#endif - -#define nd_opt_ai_type nd_opt_adv_interval_type -#define nd_opt_ai_len nd_opt_adv_interval_len -#define nd_opt_ai_reserved nd_opt_adv_interval_reserved -#define nd_opt_ai_interval nd_opt_adv_interval_ival - -#define ND_OPT_ADV_INTERVAL 7 /* Adv Interval Option */ -#define ND_OPT_HA_INFORMATION 8 /* HA Information option */ - -#ifndef HAVE_STRUCT_ND_OPT_HOMEAGENT_INFO -struct nd_opt_homeagent_info { /* Home Agent information */ - uint8_t nd_opt_hai_type; - uint8_t nd_opt_hai_len; - uint16_t nd_opt_hai_flags_reserved; - uint16_t nd_opt_hai_preference; - uint16_t nd_opt_hai_lifetime; -}; -#endif - -#define nd_opt_hai_reserved nd_opt_hai_flags_reserved - -#ifndef ND_OPT_HAI_FLAG_SUPPORT_MR -#if BYTE_ORDER == BIG_ENDIAN -#define ND_OPT_HAI_FLAG_SUPPORT_MR 0x8000 -#else /* BYTE_ORDER == LITTLE_ENDIAN */ -#define ND_OPT_HAI_FLAG_SUPPORT_MR 0x0080 -#endif -#endif - -#endif /* netinet/icmp6.h */ diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/include/netinet/in.h b/openair3/PMIPv6/pmipv6-daemon-umip/include/netinet/in.h deleted file mode 100755 index 74737fabac..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/include/netinet/in.h +++ /dev/null @@ -1,77 +0,0 @@ -#ifndef _NETINET__IN_H -#define _NETINET__IN_H 1 - -#include_next - -#ifndef IPPROTO_MH -#define IPPROTO_MH 135 /* IPv6 Mobility Header */ -#endif - -/* This section is to provide limited Advanced Socket API for IPv6 - * support in non-RFC3542-compliant environments. Any missing - * functions will be compiled in libmissing/libmissing.a. */ -#ifndef HAVE_INET6_OPT_FIND -extern -int inet6_opt_find(void *, socklen_t, int, uint8_t, socklen_t *, void **); -#endif -#ifndef HAVE_INET6_RTH_SPACE -extern socklen_t inet6_rth_space(int, int); -#endif -#ifndef HAVE_INET6_RTH_INIT -extern void *inet6_rth_init(void *, socklen_t, int, int); -#endif -#ifndef HAVE_INET6_RTH_ADD -extern int inet6_rth_add(void *, const struct in6_addr *); -#endif -#ifndef HAVE_INET6_RTH_GETADDR -extern struct in6_addr *inet6_rth_getaddr(const void *, int); -#endif -#ifndef HAVE_INET6_RTH_GETTYPE -extern int inet6_rth_gettype(const void *); -#endif - -#ifndef IPV6_RTHDR_TYPE_2 -#define IPV6_RTHDR_TYPE_2 2 -#endif - -#ifndef IPV6_JOIN_ANYCAST -#define IPV6_JOIN_ANYCAST 27 -#endif - -/* Software only works on >=2.6.14 kernels, so RFC3542 values for - * socket options must be used. This is not supposed to be complete. - * Only options that are actually used are here. */ - -#ifndef IPV6_RECVPKTINFO -#define IPV6_RECVPKTINFO 49 -#ifdef IPV6_PKTINFO -#undef IPV6_PKTINFO -#define IPV6_PKTINFO 50 -#endif -#endif - -#ifndef IPV6_RECVHOPLIMIT -#define IPV6_RECVHOPLIMIT 51 -#ifdef IPV6_HOPLIMIT -#undef IPV6_HOPLIMIT -#define IPV6_HOPLIMIT 52 -#endif -#endif - -#ifndef IPV6_RECVRTHDR -#define IPV6_RECVRTHDR 56 -#ifdef IPV6_RTHDR -#undef IPV6_RTHDR -#define IPV6_RTHDR 57 -#endif -#endif - -#ifndef IPV6_RECVDSTOPTS -#define IPV6_RECVDSTOPTS 58 -#ifdef IPV6_DSTOPTS -#undef IPV6_DSTOPTS -#define IPV6_DSTOPTS 59 -#endif -#endif - -#endif /* netinet/in.h */ diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/include/netinet/ip6.h b/openair3/PMIPv6/pmipv6-daemon-umip/include/netinet/ip6.h deleted file mode 100755 index 84a3c1c90b..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/include/netinet/ip6.h +++ /dev/null @@ -1,47 +0,0 @@ -#ifndef _NETINET__IP6_H -#define _NETINET__IP6_H 1 - -#include_next - -#include - -#ifndef HAVE_STRUCT_IP6_EXT -/* Generic extension header. */ -struct ip6_ext { - uint8_t ip6e_nxt; /* next header. */ - uint8_t ip6e_len; /* length in units of 8 octets. */ -}; -#endif - -/* Home Address Destination Option */ -#ifndef HAVE_STRUCT_IP6_OPT_HOME_ADDRESS -struct ip6_opt_home_address { - uint8_t ip6oha_type; - uint8_t ip6oha_len; - uint8_t ip6oha_addr[16];/* Home Address */ -} __attribute((packed)); -#endif - -#ifndef IP6OPT_PAD0 -#define IP6OPT_PAD0 0x0 -#endif -#ifndef IP6OPT_PADN -#define IP6OPT_PADN 0x1 -#endif -#ifndef IP6OPT_HOME_ADDRESS -#define IP6OPT_HOME_ADDRESS 0xc9 /* 11 0 01001 */ -#endif - -/* Type 2 Routing header for Mobile IPv6 */ -#ifndef HAVE_STRUCT_IP6_RTHDR2 -struct ip6_rthdr2 { - uint8_t ip6r2_nxt; /* next header */ - uint8_t ip6r2_len; /* length : always 2 */ - uint8_t ip6r2_type; /* always 2 */ - uint8_t ip6r2_segleft; /* segments left: always 1 */ - uint32_t ip6r2_reserved; /* reserved field */ - struct in6_addr ip6r2_homeaddr; /* Home Address */ -} __attribute((packed)); -#endif - -#endif /* netinet/ip6.h */ diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/include/netinet/ip6mh.h b/openair3/PMIPv6/pmipv6-daemon-umip/include/netinet/ip6mh.h deleted file mode 100755 index 4606075e9f..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/include/netinet/ip6mh.h +++ /dev/null @@ -1,202 +0,0 @@ -#ifdef HAVE_NETINET_IP6MH_H -#include_next -#endif - -#ifndef _NETINET_IP6MH_H -#define _NETINET_IP6MH_H 1 - -#include -#include - -struct ip6_mh { - uint8_t ip6mh_proto; /* NO_NXTHDR by default */ - uint8_t ip6mh_hdrlen; /* Header Len in unit of 8 Octets - excluding the first 8 Octets */ - uint8_t ip6mh_type; /* Type of Mobility Header */ - uint8_t ip6mh_reserved; /* Reserved */ - uint16_t ip6mh_cksum; /* Mobility Header Checksum */ - /* Followed by type specific messages */ -} __attribute__ ((packed)); - -struct ip6_mh_binding_request { - struct ip6_mh ip6mhbr_hdr; - uint16_t ip6mhbr_reserved; - /* Followed by optional Mobility Options */ -} __attribute__ ((packed)); - -struct ip6_mh_home_test_init { - struct ip6_mh ip6mhhti_hdr; - uint16_t ip6mhhti_reserved; - uint32_t ip6mhhti_cookie[2]; /* 64 bit Cookie by MN */ - /* Followed by optional Mobility Options */ -} __attribute__ ((packed)); - -struct ip6_mh_careof_test_init { - struct ip6_mh ip6mhcti_hdr; - uint16_t ip6mhcti_reserved; - uint32_t ip6mhcti_cookie[2]; /* 64 bit Cookie by MN */ - /* Followed by optional Mobility Options */ -} __attribute__ ((packed)); - -struct ip6_mh_home_test { - struct ip6_mh ip6mhht_hdr; - uint16_t ip6mhht_nonce_index; - uint32_t ip6mhht_cookie[2]; /* Cookie from HOTI msg */ - uint32_t ip6mhht_keygen[2]; /* 64 Bit Key by CN */ - /* Followed by optional Mobility Options */ -} __attribute__ ((packed)); - -struct ip6_mh_careof_test { - struct ip6_mh ip6mhct_hdr; - uint16_t ip6mhct_nonce_index; - uint32_t ip6mhct_cookie[2]; /* Cookie from COTI message */ - uint32_t ip6mhct_keygen[2]; /* 64bit key by CN */ - /* Followed by optional Mobility Options */ -} __attribute__ ((packed)); - -struct ip6_mh_binding_update { - struct ip6_mh ip6mhbu_hdr; - uint16_t ip6mhbu_seqno; /* Sequence Number */ - uint16_t ip6mhbu_flags; - uint16_t ip6mhbu_lifetime; /* Time in unit of 4 sec */ - /* Followed by optional Mobility Options */ -} __attribute__ ((packed)); - -/* ip6mhbu_flags */ -#if BYTE_ORDER == BIG_ENDIAN -#define IP6_MH_BU_ACK 0x8000 /* Request a binding ack */ -#define IP6_MH_BU_HOME 0x4000 /* Home Registration */ -#define IP6_MH_BU_LLOCAL 0x2000 /* Link-local compatibility */ -#define IP6_MH_BU_KEYM 0x1000 /* Key management mobility */ -#define IP6_MH_BU_MAP 0x0800 /* HMIPv6 MAP Registration */ -#define IP6_MH_BU_MR 0x0400 /* NEMO MR Registration */ -#define IP6_MH_BU_PR 0x0200 /* Proxy Registration */ -#else /* BYTE_ORDER == LITTLE_ENDIAN */ -#define IP6_MH_BU_ACK 0x0080 /* Request a binding ack */ -#define IP6_MH_BU_HOME 0x0040 /* Home Registration */ -#define IP6_MH_BU_LLOCAL 0x0020 /* Link-local compatibility */ -#define IP6_MH_BU_KEYM 0x0010 /* Key management mobility */ -#define IP6_MH_BU_MAP 0x0008 /* HMIPv6 MAP Registration */ -#define IP6_MH_BU_MR 0x0004 /* NEMO MR Registration */ -#define IP6_MH_BU_PR 0x0002 /* Proxy Registration */ -#endif - -struct ip6_mh_binding_ack { - struct ip6_mh ip6mhba_hdr; - uint8_t ip6mhba_status; /* Status code */ - uint8_t ip6mhba_flags; - uint16_t ip6mhba_seqno; - uint16_t ip6mhba_lifetime; - /* Followed by optional Mobility Options */ -} __attribute__ ((packed)); - -/* ip6mhba_flags */ -#define IP6_MH_BA_KEYM 0x80 /* Key management mobility */ -#define IP6_MH_BA_MR 0x40 /* NEMO MR registration */ - -struct ip6_mh_binding_error { - struct ip6_mh ip6mhbe_hdr; - uint8_t ip6mhbe_status; /* Error Status */ - uint8_t ip6mhbe_reserved; - struct in6_addr ip6mhbe_homeaddr; - /* Followed by optional Mobility Options */ -} __attribute__ ((packed)); - -/* - * Mobility Option TLV data structure - */ -struct ip6_mh_opt { - uint8_t ip6mhopt_type; /* Option Type */ - uint8_t ip6mhopt_len; /* Option Length */ - /* Followed by variable length Option Data in bytes */ -} __attribute__ ((packed)); - -/* - * Mobility Option Data Structures - */ -struct ip6_mh_opt_refresh_advice { - uint8_t ip6mora_type; - uint8_t ip6mora_len; - uint16_t ip6mora_interval; /* Refresh interval in 4 sec */ -} __attribute__ ((packed)); - -struct ip6_mh_opt_altcoa { - uint8_t ip6moa_type; - uint8_t ip6moa_len; - struct in6_addr ip6moa_addr; /* Alternate Care-of Address */ -} __attribute__ ((packed)); - -struct ip6_mh_opt_nonce_index { - uint8_t ip6moni_type; - uint8_t ip6moni_len; - uint16_t ip6moni_home_nonce; - uint16_t ip6moni_coa_nonce; -} __attribute__ ((packed)); - -struct ip6_mh_opt_auth_data { - uint8_t ip6moad_type; - uint8_t ip6moad_len; - uint8_t ip6moad_data[12]; /* 96 bit Authenticator */ -} __attribute__ ((packed)); - -struct ip6_mh_opt_mob_net_prefix { - uint8_t ip6mnp_type; - uint8_t ip6mnp_len; - uint8_t ip6mnp_reserved; - uint8_t ip6mnp_prefix_len; - struct in6_addr ip6mnp_prefix; -} __attribute__ ((packed)); - -/* - * Mobility Header Message Types - */ -#define IP6_MH_TYPE_BRR 0 /* Binding Refresh Request */ -#define IP6_MH_TYPE_HOTI 1 /* HOTI Message */ -#define IP6_MH_TYPE_COTI 2 /* COTI Message */ -#define IP6_MH_TYPE_HOT 3 /* HOT Message */ -#define IP6_MH_TYPE_COT 4 /* COT Message */ -#define IP6_MH_TYPE_BU 5 /* Binding Update */ -#define IP6_MH_TYPE_BACK 6 /* Binding ACK */ -#define IP6_MH_TYPE_BERROR 7 /* Binding Error */ - -/* - * Mobility Header Message Option Types - */ -#define IP6_MHOPT_PAD1 0x00 /* PAD1 */ -#define IP6_MHOPT_PADN 0x01 /* PADN */ -#define IP6_MHOPT_BREFRESH 0x02 /* Binding Refresh */ -#define IP6_MHOPT_ALTCOA 0x03 /* Alternate COA */ -#define IP6_MHOPT_NONCEID 0x04 /* Nonce Index */ -#define IP6_MHOPT_BAUTH 0x05 /* Binding Auth Data */ -#define IP6_MHOPT_MOB_NET_PRFX 0x06 /* Mobile Network Prefix */ - -/* - * Status values accompanied with Mobility Binding Acknowledgement - */ -#define IP6_MH_BAS_ACCEPTED 0 /* BU accepted */ -#define IP6_MH_BAS_PRFX_DISCOV 1 /* Accepted, but prefix discovery - required */ -#define IP6_MH_BAS_UNSPECIFIED 128 /* Reason unspecified */ -#define IP6_MH_BAS_PROHIBIT 129 /* Administratively prohibited */ -#define IP6_MH_BAS_INSUFFICIENT 130 /* Insufficient resources */ -#define IP6_MH_BAS_HA_NOT_SUPPORTED 131 /* HA registration not supported */ -#define IP6_MH_BAS_NOT_HOME_SUBNET 132 /* Not Home subnet */ -#define IP6_MH_BAS_NOT_HA 133 /* Not HA for this mobile node */ -#define IP6_MH_BAS_DAD_FAILED 134 /* DAD failed */ -#define IP6_MH_BAS_SEQNO_BAD 135 /* Sequence number out of range */ -#define IP6_MH_BAS_HOME_NI_EXPIRED 136 /* Expired Home nonce index */ -#define IP6_MH_BAS_COA_NI_EXPIRED 137 /* Expired Care-of nonce index */ -#define IP6_MH_BAS_NI_EXPIRED 138 /* Expired Nonce Indices */ -#define IP6_MH_BAS_REG_NOT_ALLOWED 139 /* Registration type change - disallowed */ -#define IP6_MH_BAS_MR_OP_NOT_PERMITTED 140 /* MR Operation not permitted */ -#define IP6_MH_BAS_INVAL_PRFX 141 /* Invalid Prefix */ -#define IP6_MH_BAS_NOT_AUTH_FOR_PRFX 142 /* Not Authorized for Prefix */ -#define IP6_MH_BAS_FWDING_FAILED 143 /* Forwarding Setup failed */ -/* - * Status values for the Binding Error mobility messages - */ -#define IP6_MH_BES_UNKNOWN_HAO 1 /* Unknown binding for HOA */ -#define IP6_MH_BES_UNKNOWN_MH 2 /* Unknown MH Type */ - -#endif /* netinet/ip6mh.h */ diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/install-sh b/openair3/PMIPv6/pmipv6-daemon-umip/install-sh deleted file mode 100755 index 4d4a9519ea..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/install-sh +++ /dev/null @@ -1,323 +0,0 @@ -#!/bin/sh -# install - install a program, script, or datafile - -scriptversion=2005-05-14.22 - -# This originates from X11R5 (mit/util/scripts/install.sh), which was -# later released in X11R6 (xc/config/util/install.sh) with the -# following copyright and license. -# -# Copyright (C) 1994 X Consortium -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to -# deal in the Software without restriction, including without limitation the -# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -# sell copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- -# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -# -# Except as contained in this notice, the name of the X Consortium shall not -# be used in advertising or otherwise to promote the sale, use or other deal- -# ings in this Software without prior written authorization from the X Consor- -# tium. -# -# -# FSF changes to this file are in the public domain. -# -# Calling this script install-sh is preferred over install.sh, to prevent -# `make' implicit rules from creating a file called install from it -# when there is no Makefile. -# -# This script is compatible with the BSD install script, but was written -# from scratch. It can only install one file at a time, a restriction -# shared with many OS's install programs. - -# set DOITPROG to echo to test this script - -# Don't use :- since 4.3BSD and earlier shells don't like it. -doit="${DOITPROG-}" - -# put in absolute paths if you don't have them in your path; or use env. vars. - -mvprog="${MVPROG-mv}" -cpprog="${CPPROG-cp}" -chmodprog="${CHMODPROG-chmod}" -chownprog="${CHOWNPROG-chown}" -chgrpprog="${CHGRPPROG-chgrp}" -stripprog="${STRIPPROG-strip}" -rmprog="${RMPROG-rm}" -mkdirprog="${MKDIRPROG-mkdir}" - -chmodcmd="$chmodprog 0755" -chowncmd= -chgrpcmd= -stripcmd= -rmcmd="$rmprog -f" -mvcmd="$mvprog" -src= -dst= -dir_arg= -dstarg= -no_target_directory= - -usage="Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE - or: $0 [OPTION]... SRCFILES... DIRECTORY - or: $0 [OPTION]... -t DIRECTORY SRCFILES... - or: $0 [OPTION]... -d DIRECTORIES... - -In the 1st form, copy SRCFILE to DSTFILE. -In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. -In the 4th, create DIRECTORIES. - -Options: --c (ignored) --d create directories instead of installing files. --g GROUP $chgrpprog installed files to GROUP. --m MODE $chmodprog installed files to MODE. --o USER $chownprog installed files to USER. --s $stripprog installed files. --t DIRECTORY install into DIRECTORY. --T report an error if DSTFILE is a directory. ---help display this help and exit. ---version display version info and exit. - -Environment variables override the default commands: - CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG -" - -while test -n "$1"; do - case $1 in - -c) shift - continue;; - - -d) dir_arg=true - shift - continue;; - - -g) chgrpcmd="$chgrpprog $2" - shift - shift - continue;; - - --help) echo "$usage"; exit $?;; - - -m) chmodcmd="$chmodprog $2" - shift - shift - continue;; - - -o) chowncmd="$chownprog $2" - shift - shift - continue;; - - -s) stripcmd=$stripprog - shift - continue;; - - -t) dstarg=$2 - shift - shift - continue;; - - -T) no_target_directory=true - shift - continue;; - - --version) echo "$0 $scriptversion"; exit $?;; - - *) # When -d is used, all remaining arguments are directories to create. - # When -t is used, the destination is already specified. - test -n "$dir_arg$dstarg" && break - # Otherwise, the last argument is the destination. Remove it from $@. - for arg - do - if test -n "$dstarg"; then - # $@ is not empty: it contains at least $arg. - set fnord "$@" "$dstarg" - shift # fnord - fi - shift # arg - dstarg=$arg - done - break;; - esac -done - -if test -z "$1"; then - if test -z "$dir_arg"; then - echo "$0: no input file specified." >&2 - exit 1 - fi - # It's OK to call `install-sh -d' without argument. - # This can happen when creating conditional directories. - exit 0 -fi - -for src -do - # Protect names starting with `-'. - case $src in - -*) src=./$src ;; - esac - - if test -n "$dir_arg"; then - dst=$src - src= - - if test -d "$dst"; then - mkdircmd=: - chmodcmd= - else - mkdircmd=$mkdirprog - fi - else - # Waiting for this to be detected by the "$cpprog $src $dsttmp" command - # might cause directories to be created, which would be especially bad - # if $src (and thus $dsttmp) contains '*'. - if test ! -f "$src" && test ! -d "$src"; then - echo "$0: $src does not exist." >&2 - exit 1 - fi - - if test -z "$dstarg"; then - echo "$0: no destination specified." >&2 - exit 1 - fi - - dst=$dstarg - # Protect names starting with `-'. - case $dst in - -*) dst=./$dst ;; - esac - - # If destination is a directory, append the input filename; won't work - # if double slashes aren't ignored. - if test -d "$dst"; then - if test -n "$no_target_directory"; then - echo "$0: $dstarg: Is a directory" >&2 - exit 1 - fi - dst=$dst/`basename "$src"` - fi - fi - - # This sed command emulates the dirname command. - dstdir=`echo "$dst" | sed -e 's,/*$,,;s,[^/]*$,,;s,/*$,,;s,^$,.,'` - - # Make sure that the destination directory exists. - - # Skip lots of stat calls in the usual case. - if test ! -d "$dstdir"; then - defaultIFS=' - ' - IFS="${IFS-$defaultIFS}" - - oIFS=$IFS - # Some sh's can't handle IFS=/ for some reason. - IFS='%' - set x `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'` - shift - IFS=$oIFS - - pathcomp= - - while test $# -ne 0 ; do - pathcomp=$pathcomp$1 - shift - if test ! -d "$pathcomp"; then - $mkdirprog "$pathcomp" - # mkdir can fail with a `File exist' error in case several - # install-sh are creating the directory concurrently. This - # is OK. - test -d "$pathcomp" || exit - fi - pathcomp=$pathcomp/ - done - fi - - if test -n "$dir_arg"; then - $doit $mkdircmd "$dst" \ - && { test -z "$chowncmd" || $doit $chowncmd "$dst"; } \ - && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } \ - && { test -z "$stripcmd" || $doit $stripcmd "$dst"; } \ - && { test -z "$chmodcmd" || $doit $chmodcmd "$dst"; } - - else - dstfile=`basename "$dst"` - - # Make a couple of temp file names in the proper directory. - dsttmp=$dstdir/_inst.$$_ - rmtmp=$dstdir/_rm.$$_ - - # Trap to clean up those temp files at exit. - trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 - trap '(exit $?); exit' 1 2 13 15 - - # Copy the file name to the temp name. - $doit $cpprog "$src" "$dsttmp" && - - # and set any options; do chmod last to preserve setuid bits. - # - # If any of these fail, we abort the whole thing. If we want to - # ignore errors from any of these, just make sure not to ignore - # errors from the above "$doit $cpprog $src $dsttmp" command. - # - { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } \ - && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } \ - && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } \ - && { test -z "$chmodcmd" || $doit $chmodcmd "$dsttmp"; } && - - # Now rename the file to the real destination. - { $doit $mvcmd -f "$dsttmp" "$dstdir/$dstfile" 2>/dev/null \ - || { - # The rename failed, perhaps because mv can't rename something else - # to itself, or perhaps because mv is so ancient that it does not - # support -f. - - # Now remove or move aside any old file at destination location. - # We try this two ways since rm can't unlink itself on some - # systems and the destination file might be busy for other - # reasons. In this case, the final cleanup might fail but the new - # file should still install successfully. - { - if test -f "$dstdir/$dstfile"; then - $doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null \ - || $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null \ - || { - echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2 - (exit 1); exit 1 - } - else - : - fi - } && - - # Now rename the file to the real destination. - $doit $mvcmd "$dsttmp" "$dstdir/$dstfile" - } - } - fi || { (exit 1); exit 1; } -done - -# The final little trick to "correctly" pass the exit status to the exit trap. -{ - (exit 0); exit 0 -} - -# Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "scriptversion=" -# time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-end: "$" -# End: diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/libmissing/Makefile.am b/openair3/PMIPv6/pmipv6-daemon-umip/libmissing/Makefile.am deleted file mode 100755 index a49814d3dc..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/libmissing/Makefile.am +++ /dev/null @@ -1,10 +0,0 @@ -## $Id: Makefile.am 1.1 03/12/03 18:22:31+02:00 anttit@tcs.hut.fi $ -## Process this file with automake to produce Makefile.in - -AM_CFLAGS = -Wall - -MAINTAINERCLEANFILES = Makefile.in - -noinst_LIBRARIES = libmissing.a -libmissing_a_SOURCES = -libmissing_a_LIBADD = $(LIBOBJS) diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/libmissing/inet6_opt_find.c b/openair3/PMIPv6/pmipv6-daemon-umip/libmissing/inet6_opt_find.c deleted file mode 100755 index 0f49d50b1f..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/libmissing/inet6_opt_find.c +++ /dev/null @@ -1,46 +0,0 @@ -/* $Id: inet6_opt_find.c 1.4 04/02/23 18:46:18+02:00 vnuorval@dsl-hkigw1c53.dial.inet.fi $ */ - -/* This is a substitute for a missing inet6_opt_find(). */ - -#include -#include - -#ifndef IP6OPT_PAD1 -#define IP6OPT_PAD1 0 -#endif - -int inet6_opt_find(void *extbuf, socklen_t extlen, int offset, - uint8_t type, socklen_t *lenp, - void **databufp) -{ - uint8_t *optp, *tailp; - - optp = (uint8_t *)extbuf; - - if (extlen < 2 || extlen <= offset || extlen < ((optp[1] + 1) << 3)) - return -1; - - tailp = optp + extlen; - optp += (2 + offset); - - while (optp <= tailp) { - if (optp[0] == IP6OPT_PAD1) { - optp++; - continue; - } - - if (optp + optp[1] + 2 > tailp) - return -1; - - if (optp[0] == type) { - *databufp = optp + 2; - *lenp = optp[1]; - return *lenp + (uint8_t *)optp - (uint8_t *)extbuf; - } - - optp += (2 + optp[1]); - } - - *databufp = NULL; - return -1; -} diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/libmissing/inet6_rth_add.c b/openair3/PMIPv6/pmipv6-daemon-umip/libmissing/inet6_rth_add.c deleted file mode 100755 index 2ee1cf751e..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/libmissing/inet6_rth_add.c +++ /dev/null @@ -1,21 +0,0 @@ -/* $Id: inet6_rth_add.c 1.3 05/03/07 16:49:46+02:00 anttit@tcs.hut.fi $ */ - -/* This is a substitute for a missing inet6_rth_add(). */ - -#include -#include -#include - -int inet6_rth_add(void *bp, const struct in6_addr *addr) -{ - struct ip6_rthdr *rth; - - rth = (struct ip6_rthdr *)bp; - - memcpy((uint8_t *)bp + 8 + rth->ip6r_segleft * sizeof(struct in6_addr), - addr, sizeof(struct in6_addr)); - - rth->ip6r_segleft += 1; - - return 0; -} diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/libmissing/inet6_rth_getaddr.c b/openair3/PMIPv6/pmipv6-daemon-umip/libmissing/inet6_rth_getaddr.c deleted file mode 100755 index 61e6d6d1aa..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/libmissing/inet6_rth_getaddr.c +++ /dev/null @@ -1,21 +0,0 @@ -/* $Id: inet6_rth_getaddr.c 1.2 04/02/12 16:16:54+02:00 henkku@mart10.hut.mediapoli.com $ */ - -/* This is a substitute for a missing inet6_rth_getaddr(). */ - -#include -#include - -struct in6_addr *inet6_rth_getaddr(const void *bp, int index) -{ - uint8_t *rthp = (uint8_t *)bp; - struct in6_addr *addr = NULL; - - if (rthp[1] & 1) return NULL; - - if (index < 0 || index > rthp[3]) return NULL; - - addr = (struct in6_addr *) - (rthp + 8 + index * sizeof(struct in6_addr)); - - return addr; -} diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/libmissing/inet6_rth_gettype.c b/openair3/PMIPv6/pmipv6-daemon-umip/libmissing/inet6_rth_gettype.c deleted file mode 100755 index 2025cc19c4..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/libmissing/inet6_rth_gettype.c +++ /dev/null @@ -1,12 +0,0 @@ -/* $Id: inet6_rth_gettype.c 1.1 05/03/10 11:32:50+02:00 anttit@tcs.hut.fi $ */ - -/* This is a substitute for a missing inet6_rth_getaddr(). */ - -#include - -int inet6_rth_gettype(void *bp) -{ - uint8_t *rthp = (uint8_t *)bp; - - return rthp[2]; -} diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/libmissing/inet6_rth_init.c b/openair3/PMIPv6/pmipv6-daemon-umip/libmissing/inet6_rth_init.c deleted file mode 100755 index 89d150aeda..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/libmissing/inet6_rth_init.c +++ /dev/null @@ -1,38 +0,0 @@ -/* $Id: inet6_rth_init.c 1.1 03/12/09 09:57:45+02:00 anttit@tcs.hut.fi $ */ - -/* This is a substitute for a missing inet6_rth_init(). */ - -#include -#include -#include -#include - -#ifndef IPV6_RTHDR_TYPE_2 -#define IPV6_RTHDR_TYPE_2 2 -#endif - -void *inet6_rth_init(void *bp, socklen_t bplen, int type, - int segments) -{ - struct ip6_rthdr *rth = (struct ip6_rthdr *)bp; - uint8_t type_len = 0; - - if (type == IPV6_RTHDR_TYPE_0) { - type_len = 8; - *(uint32_t *)(rth+1) = 0; - } else if (type == IPV6_RTHDR_TYPE_2) { - type_len = 8; - *(uint32_t *)(rth+1) = 0; - } else - return NULL; - - if (bplen < type_len + segments * sizeof(struct in6_addr)) - return NULL; - - rth->ip6r_nxt = 0; - rth->ip6r_len = segments << 1; - rth->ip6r_type = type; - rth->ip6r_segleft = 0; - - return bp; -} diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/libmissing/inet6_rth_space.c b/openair3/PMIPv6/pmipv6-daemon-umip/libmissing/inet6_rth_space.c deleted file mode 100755 index 48d17f6bf5..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/libmissing/inet6_rth_space.c +++ /dev/null @@ -1,26 +0,0 @@ -/* $Id: inet6_rth_space.c 1.1 03/12/09 09:57:37+02:00 anttit@tcs.hut.fi $ */ - -/* This is a substitute for a missing inet6_rth_space(). */ - -#include - -#ifndef IPV6_RTHDR_TYPE_2 -#define IPV6_RTHDR_TYPE_2 2 -#endif - -socklen_t inet6_rth_space(int type, int segments) -{ - if (type == IPV6_RTHDR_TYPE_0) { - if (segments > 128) - return 0; - - return 8 + segments * sizeof(struct in6_addr); - } else if (type == IPV6_RTHDR_TYPE_2) { - if (segments != 1) - return 0; - - return 8 + sizeof(struct in6_addr); - } - - return 0; -} diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/libnetlink/Makefile.am b/openair3/PMIPv6/pmipv6-daemon-umip/libnetlink/Makefile.am deleted file mode 100755 index 695431a04d..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/libnetlink/Makefile.am +++ /dev/null @@ -1,11 +0,0 @@ -## $Id$ -## Process this file with automake to produce Makefile.in - -MAINTAINERCLEANFILES = Makefile.in - -AM_CFLAGS = -Wstrict-prototypes -Wall -AM_CPPFLAGS = -I$(top_srcdir)/include - -noinst_LIBRARIES = libnetlink.a - -libnetlink_a_SOURCES = libnetlink.c $(top_srcdir)/include/libnetlink.h diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/libnetlink/README b/openair3/PMIPv6/pmipv6-daemon-umip/libnetlink/README deleted file mode 100755 index f9ad06393a..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/libnetlink/README +++ /dev/null @@ -1,6 +0,0 @@ -libnetlink is written by Alexey Kuznetsov . It -is distributed under the GNU General Public License. - -A modified version of libnetlink is distributed with MIPL Mobile IPv6 -for Linux package. This version does not include all the -functionality of libnetlink package, but only those used by MIPL. diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/libnetlink/libnetlink.c b/openair3/PMIPv6/pmipv6-daemon-umip/libnetlink/libnetlink.c deleted file mode 100755 index 34f656beb8..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/libnetlink/libnetlink.c +++ /dev/null @@ -1,627 +0,0 @@ -/* - * libnetlink.c RTnetlink service routines. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version - * 2 of the License, or (at your option) any later version. - * - * Authors: Alexey Kuznetsov, - * - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "libnetlink.h" - -#define SO_SNDBUF_SIZE 32768 -#define SO_RCVBUF_SIZE 32768 -#define NL_DUMP_SIZE 16384 -#define NL_TALK_SIZE 16384 -#define NL_LISTEN_SIZE 8192 - -#undef DEBUG - -#ifdef DEBUG -#define NLDBG(format, arg...) fprintf(stderr, format, ##arg) -#define NLDBG_SYS(message) perror(message) -#else -#define NLDBG(format, arg...) -#define NLDBG_SYS(message) -#endif - -void rtnl_close(struct rtnl_handle *rth) -{ - if (rth->fd >= 0) { - close(rth->fd); - rth->fd = -1; - } -} - -int rtnl_open_byproto(struct rtnl_handle *rth, unsigned subscriptions, - int protocol) -{ - socklen_t addr_len; - int sndbuf = SO_SNDBUF_SIZE; - int rcvbuf = SO_RCVBUF_SIZE; - - memset(rth, 0, sizeof(rth)); - - rth->fd = socket(AF_NETLINK, SOCK_RAW, protocol); - - if (rth->fd < 0) { - NLDBG_SYS("Cannot open netlink socket"); - return -1; - } - - if (setsockopt(rth->fd,SOL_SOCKET,SO_SNDBUF,&sndbuf,sizeof(sndbuf)) < 0) { - NLDBG_SYS("SO_SNDBUF"); - return -1; - } - - if (setsockopt(rth->fd,SOL_SOCKET,SO_RCVBUF,&rcvbuf,sizeof(rcvbuf)) < 0) { - NLDBG_SYS("SO_RCVBUF"); - return -1; - } - - memset(&rth->local, 0, sizeof(rth->local)); - rth->local.nl_family = AF_NETLINK; - rth->local.nl_groups = subscriptions; - - if (bind(rth->fd, (struct sockaddr*)&rth->local, sizeof(rth->local)) < 0) { - NLDBG_SYS("Cannot bind netlink socket"); - return -1; - } - - addr_len = sizeof(rth->local); - - if (getsockname(rth->fd, (struct sockaddr*)&rth->local, &addr_len) < 0) { - NLDBG_SYS("Cannot getsockname"); - return -1; - } - - if (addr_len != sizeof(rth->local)) { - NLDBG("Wrong address length %d\n", addr_len); - return -1; - } - - if (rth->local.nl_family != AF_NETLINK) { - NLDBG("Wrong address family %d\n", rth->local.nl_family); - return -1; - } - - rth->seq = time(NULL); - return 0; -} - -int rtnl_open(struct rtnl_handle *rth, unsigned subscriptions) -{ - return rtnl_open_byproto(rth, subscriptions, NETLINK_ROUTE); -} - -int rtnl_wilddump_request(struct rtnl_handle *rth, int family, int type) -{ - struct { - struct nlmsghdr nlh; - struct rtgenmsg g; - } req; - struct sockaddr_nl nladdr; - - memset(&nladdr, 0, sizeof(nladdr)); - nladdr.nl_family = AF_NETLINK; - - memset(&req, 0, sizeof(req)); - req.nlh.nlmsg_len = sizeof(req); - req.nlh.nlmsg_type = type; - req.nlh.nlmsg_flags = NLM_F_ROOT|NLM_F_MATCH|NLM_F_REQUEST; - req.nlh.nlmsg_pid = 0; - req.nlh.nlmsg_seq = rth->dump = ++rth->seq; - req.g.rtgen_family = family; - - return sendto(rth->fd, (void*)&req, sizeof(req), 0, - (struct sockaddr*)&nladdr, sizeof(nladdr)); -} - -int rtnl_dump_request(struct rtnl_handle *rth, int type, void *req, int len) -{ - struct nlmsghdr nlh; - struct sockaddr_nl nladdr; - struct iovec iov[2] = { - { .iov_base = &nlh, .iov_len = sizeof(nlh) }, - { .iov_base = req, .iov_len = len } - }; - struct msghdr msg = { - .msg_name = &nladdr, - .msg_namelen = sizeof(nladdr), - .msg_iov = iov, - .msg_iovlen = 2, - }; - - memset(&nladdr, 0, sizeof(nladdr)); - nladdr.nl_family = AF_NETLINK; - - nlh.nlmsg_len = NLMSG_LENGTH(len); - nlh.nlmsg_type = type; - nlh.nlmsg_flags = NLM_F_ROOT|NLM_F_MATCH|NLM_F_REQUEST; - nlh.nlmsg_pid = 0; - nlh.nlmsg_seq = rth->dump = ++rth->seq; - - return sendmsg(rth->fd, &msg, 0); -} - -int rtnl_dump_filter(struct rtnl_handle *rth, - rtnl_filter_t filter, - void *arg1, - rtnl_filter_t junk, - void *arg2) -{ - struct sockaddr_nl nladdr; - struct iovec iov; - struct msghdr msg = { - .msg_name = &nladdr, - .msg_namelen = sizeof(nladdr), - .msg_iov = &iov, - .msg_iovlen = 1, - }; - char buf[NL_DUMP_SIZE]; - - iov.iov_base = buf; - - while (1) { - int status; - struct nlmsghdr *h; - - iov.iov_len = sizeof(buf); - status = recvmsg(rth->fd, &msg, 0); - - if (status < 0) { - if (errno == EINTR) - continue; - - NLDBG_SYS("OVERRUN"); - continue; - } - - /* Everyone can send empty messages which will led to - * status == 0. Before checking if status == 0, check - * the origin. Here, we only allow messages from kernel. - * --arno */ - if (nladdr.nl_pid != 0) { - NLDBG("Dropping non-kernel Netlink message.\n"); - continue; - } - - if (status == 0) { - NLDBG("EOF on netlink\n"); - return -1; - } - - h = (struct nlmsghdr*)buf; - - while (status > 0 && NLMSG_OK(h, (size_t)status)) { - int err; - - if (nladdr.nl_pid != 0 || - h->nlmsg_pid != rth->local.nl_pid || - h->nlmsg_seq != rth->dump) { - if (junk) { - err = junk(&nladdr, h, arg2); - - if (err < 0) - return err; - } - - goto skip_it; - } - - if (h->nlmsg_type == NLMSG_DONE) - return 0; - - if (h->nlmsg_type == NLMSG_ERROR) { - struct nlmsgerr *err = (struct nlmsgerr*)NLMSG_DATA(h); - - if (h->nlmsg_len < NLMSG_LENGTH(sizeof(struct nlmsgerr))) { - NLDBG("ERROR truncated\n"); - } else { - errno = -err->error; - NLDBG_SYS("RTNETLINK answers"); - } - - return -1; - } - - err = filter(&nladdr, h, arg1); - - if (err < 0) - return err; - -skip_it: - h = NLMSG_NEXT(h, status); - } - - if (msg.msg_flags & MSG_TRUNC) { - NLDBG("Message truncated\n"); - continue; - } - - if (status) { - NLDBG("!!!Remnant of size %d\n", status); - return -2; - } - } -} - -int rtnl_talk(struct rtnl_handle *rtnl, struct nlmsghdr *n, pid_t peer, - unsigned groups, struct nlmsghdr *answer, - rtnl_filter_t junk, - void *jarg) -{ - int status; - unsigned seq; - struct nlmsghdr *h; - struct sockaddr_nl nladdr; - struct iovec iov = { - .iov_base = (void*) n, - .iov_len = n->nlmsg_len - }; - struct msghdr msg = { - .msg_name = &nladdr, - .msg_namelen = sizeof(nladdr), - .msg_iov = &iov, - .msg_iovlen = 1, - }; - char buf[NL_TALK_SIZE]; - - memset(&nladdr, 0, sizeof(nladdr)); - nladdr.nl_family = AF_NETLINK; - nladdr.nl_pid = peer; - nladdr.nl_groups = groups; - - n->nlmsg_seq = seq = ++rtnl->seq; - - if (answer == NULL) - n->nlmsg_flags |= NLM_F_ACK; - - status = sendmsg(rtnl->fd, &msg, 0); - - if (status < 0) { - NLDBG_SYS("Cannot talk to rtnetlink"); - return -1; - } - - memset(buf,0,sizeof(buf)); - - iov.iov_base = buf; - - while (1) { - iov.iov_len = sizeof(buf); - status = recvmsg(rtnl->fd, &msg, 0); - - if (status < 0) { - if (errno == EINTR) - continue; - - NLDBG_SYS("OVERRUN"); - continue; - } - - if (msg.msg_namelen != sizeof(nladdr)) { - NLDBG("sender address length == %d\n", msg.msg_namelen); - return -2; - } - - /* Everyone can send empty messages which will led to - * status == 0. Before checking if status == 0, check - * the origin. --arno */ - if (nladdr.nl_pid != (__u32)peer) { - NLDBG("Received Netlink message from unknown peer.\n"); - continue; - } - - if (status == 0) { - NLDBG("EOF on netlink\n"); - return -1; - } - - for (h = (struct nlmsghdr*)buf; - status > 0 && (size_t)status >= sizeof(*h); ) { - int err; - int len = h->nlmsg_len; - int l = len - sizeof(*h); - - if (l<0 || len>status) { - if (msg.msg_flags & MSG_TRUNC) { - NLDBG("Truncated message\n"); - return -1; - } - - NLDBG("!!!malformed message: len=%d\n", len); - return -2; - } - - if (nladdr.nl_pid != (__u32)peer || - h->nlmsg_pid != rtnl->local.nl_pid || - h->nlmsg_seq != seq) { - if (junk) { - err = junk(&nladdr, h, jarg); - - if (err < 0) - return err; - } - - /* Don't forget to skip that message. */ - status -= NLMSG_ALIGN(len); - h = (struct nlmsghdr*)((char*)h + NLMSG_ALIGN(len)); - continue; - } - - if (h->nlmsg_type == NLMSG_ERROR) { - struct nlmsgerr *err = (struct nlmsgerr*)NLMSG_DATA(h); - - if ((size_t)l < sizeof(struct nlmsgerr)) { - NLDBG("ERROR truncated\n"); - } else { - errno = -err->error; - - if (errno == 0) { - if (answer) - memcpy(answer, h, h->nlmsg_len); - - return 0; - } - - NLDBG_SYS("RTNETLINK answers"); - } - - return -1; - } - - if (answer) { - memcpy(answer, h, h->nlmsg_len); - return 0; - } - - NLDBG("Unexpected reply!!!\n"); - - status -= NLMSG_ALIGN(len); - h = (struct nlmsghdr*)((char*)h + NLMSG_ALIGN(len)); - } - - if (msg.msg_flags & MSG_TRUNC) { - NLDBG("Message truncated\n"); - continue; - } - - if (status) { - NLDBG("!!!Remnant of size %d\n", status); - return -2; - } - } -} - -int rtnl_listen(struct rtnl_handle *rtnl, - rtnl_filter_t handler, - void *jarg) -{ - int status; - struct nlmsghdr *h; - struct sockaddr_nl nladdr; - struct iovec iov; - struct msghdr msg = { - .msg_name = &nladdr, - .msg_namelen = sizeof(nladdr), - .msg_iov = &iov, - .msg_iovlen = 1, - }; - char buf[NL_LISTEN_SIZE]; - - memset(&nladdr, 0, sizeof(nladdr)); - nladdr.nl_family = AF_NETLINK; - nladdr.nl_pid = 0; - nladdr.nl_groups = 0; - - iov.iov_base = buf; - - while (1) { - iov.iov_len = sizeof(buf); - status = recvmsg(rtnl->fd, &msg, 0); - - if (status < 0) { - if (errno == EINTR) - continue; - - NLDBG_SYS("OVERRUN"); - continue; - } - - if (msg.msg_namelen != sizeof(nladdr)) { - NLDBG("Sender address length == %d\n", msg.msg_namelen); - return -2; - } - - /* Everyone can send empty messages which will led to - * status == 0. Before checking if status == 0, check - * the origin. Here, we only allow messages from kernel. - * --arno */ - if (nladdr.nl_pid != 0) { - NLDBG("Dropping non-kernel Netlink message.\n"); - continue; - } - - if (status == 0) { - NLDBG("EOF on netlink\n"); - return -1; - } - - for (h = (struct nlmsghdr*)buf; - status > 0 && (size_t)status >= sizeof(*h); ) { - int err; - int len = h->nlmsg_len; - int l = len - sizeof(*h); - - if (l<0 || len>status) { - if (msg.msg_flags & MSG_TRUNC) { - NLDBG("Truncated message\n"); - return -1; - } - - NLDBG("!!!malformed message: len=%d\n", len); - return -2; - } - - err = handler(&nladdr, h, jarg); - - if (err < 0) - return err; - - status -= NLMSG_ALIGN(len); - h = (struct nlmsghdr*)((char*)h + NLMSG_ALIGN(len)); - } - - if (msg.msg_flags & MSG_TRUNC) { - NLDBG("Message truncated\n"); - continue; - } - - if (status) { - NLDBG("!!!Remnant of size %d\n", status); - return -2; - } - } -} - -int addattr32(struct nlmsghdr *n, int maxlen, int type, __u32 data) -{ - int len = RTA_LENGTH(4); - struct rtattr *rta; - - if (NLMSG_ALIGN(n->nlmsg_len) + len > (unsigned int)maxlen) { - NLDBG("addattr32: Error! max allowed bound %d exceeded\n",maxlen); - return -1; - } - - rta = NLMSG_TAIL(n); - rta->rta_type = type; - rta->rta_len = len; - memcpy(RTA_DATA(rta), &data, 4); - n->nlmsg_len = NLMSG_ALIGN(n->nlmsg_len) + len; - return 0; -} - -int addattr_l(struct nlmsghdr *n, int maxlen, int type, const void *data, - int alen) -{ - int len = RTA_LENGTH(alen); - struct rtattr *rta; - - if (NLMSG_ALIGN(n->nlmsg_len) + RTA_ALIGN(len) > (unsigned int)maxlen) { - NLDBG("addattr_l ERROR: message exceeded bound of %d\n",maxlen); - return -1; - } - - rta = NLMSG_TAIL(n); - rta->rta_type = type; - rta->rta_len = len; - memcpy(RTA_DATA(rta), data, alen); - n->nlmsg_len = NLMSG_ALIGN(n->nlmsg_len) + RTA_ALIGN(len); - return 0; -} - -int addraw_l(struct nlmsghdr *n, int maxlen, const void *data, int len) -{ - if (NLMSG_ALIGN(n->nlmsg_len) + NLMSG_ALIGN(len) > (unsigned int)maxlen) { - NLDBG("addraw_l ERROR: message exceeded bound of %d\n",maxlen); - return -1; - } - - memcpy(NLMSG_TAIL(n), data, len); - memset((void *) NLMSG_TAIL(n) + len, 0, NLMSG_ALIGN(len) - len); - n->nlmsg_len = NLMSG_ALIGN(n->nlmsg_len) + NLMSG_ALIGN(len); - return 0; -} - -int rta_addattr32(struct rtattr *rta, int maxlen, int type, __u32 data) -{ - int len = RTA_LENGTH(4); - struct rtattr *subrta; - - if (RTA_ALIGN(rta->rta_len) + len > maxlen) { - NLDBG("rta_addattr32: Error! max allowed bound %d exceeded\n",maxlen); - return -1; - } - - subrta = (struct rtattr*)(((char*)rta) + RTA_ALIGN(rta->rta_len)); - subrta->rta_type = type; - subrta->rta_len = len; - memcpy(RTA_DATA(subrta), &data, 4); - rta->rta_len = NLMSG_ALIGN(rta->rta_len) + len; - return 0; -} - -int rta_addattr_l(struct rtattr *rta, int maxlen, int type, - const void *data, int alen) -{ - struct rtattr *subrta; - int len = RTA_LENGTH(alen); - - if (RTA_ALIGN(rta->rta_len) + RTA_ALIGN(len) > maxlen) { - NLDBG("rta_addattr_l: Error! max allowed bound %d exceeded\n",maxlen); - return -1; - } - - subrta = (struct rtattr*)(((char*)rta) + RTA_ALIGN(rta->rta_len)); - subrta->rta_type = type; - subrta->rta_len = len; - memcpy(RTA_DATA(subrta), data, alen); - rta->rta_len = NLMSG_ALIGN(rta->rta_len) + RTA_ALIGN(len); - return 0; -} - -int parse_rtattr(struct rtattr *tb[], int max, struct rtattr *rta, int len) -{ - memset(tb, 0, sizeof(struct rtattr *) * (max + 1)); - - while (RTA_OK(rta, len)) { - if (rta->rta_type <= max) - tb[rta->rta_type] = rta; - - rta = RTA_NEXT(rta,len); - } - - if (len) { - NLDBG("!!!Deficit %d, rta_len=%d\n", len, rta->rta_len); - } - - return 0; -} - -int parse_rtattr_byindex(struct rtattr *tb[], int max, struct rtattr *rta, int len) -{ - int i = 0; - - memset(tb, 0, sizeof(struct rtattr *) * max); - - while (RTA_OK(rta, len)) { - if (rta->rta_type <= max && i < max) - tb[i++] = rta; - - rta = RTA_NEXT(rta,len); - } - - if (len) { - NLDBG("!!!Deficit %d, rta_len=%d\n", len, rta->rta_len); - } - - return i; -} diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/licenses/cisco-ipr-draft-ietf-nemo-basic-support-03.txt b/openair3/PMIPv6/pmipv6-daemon-umip/licenses/cisco-ipr-draft-ietf-nemo-basic-support-03.txt deleted file mode 100755 index 99e5241b1f..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/licenses/cisco-ipr-draft-ietf-nemo-basic-support-03.txt +++ /dev/null @@ -1,41 +0,0 @@ -Title: Cisco Systems' Updated Statement about IPR claimed in - draft-ietf-nemo-basic-support-03.txt -Received 25 October 2004 -From: Robert Barr - -This statement updates the IPR statement filed by Cisco on June 20, 2003 for -draft-ietf-nemo-basic-support-00.txt. - -Cisco is the owner of US Patent No. 6,636,498 and at least one pending -patent application -relating to the subject matter of draft-ietf-nemo-basic-support-03.txt -"Network Mobility (NEMO) Basic Support Protocol" . -If a standard relating to this subject matter is adopted by IETF and any -claims -of any issued Cisco patents are necessary for practicing this standard, any -party will be able to obtain a license from Cisco to use any such patent -claims under openly specified, reasonable, non-discriminatory terms, with -reciprocity, to implement and fully comply with the standard. - -The reasonable non-discriminatory terms are: - -If this standard is adopted, Cisco will not assert any patents owned or -controlled by Cisco against any party for making, using, selling, importing -or offering for sale a product that implements the standard, provided, -however that Cisco retains the right to assert its patents (including the -right to claim past royalties) against any party that asserts a patent it -owns or controls (either directly or indirectly) against Cisco or any of -Cisco's affiliates or successors in title; and Cisco retains the right to -assert its patents against any product or portion thereof that is not -necessary for compliance with the standard. - -Royalty-bearing licenses will be available to anyone who prefers that -option. - -For information contact: - -Robert Barr -Worldwide Patent Counsel -Cisco Systems -408-525-9706 -rbarr@cisco.com diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/licenses/nokia-ipr-draft-ietf-nemo-basic-support.txt b/openair3/PMIPv6/pmipv6-daemon-umip/licenses/nokia-ipr-draft-ietf-nemo-basic-support.txt deleted file mode 100755 index f475bd26f9..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/licenses/nokia-ipr-draft-ietf-nemo-basic-support.txt +++ /dev/null @@ -1,26 +0,0 @@ -Title: Nokia Corporation's statement about IPR claimed in draft-ietf-nemo-basic-support -Received: July 1, 2003 -From: Heikki Huttunen - -This is to advise the IETF that Nokia believes the Nokia patent application "Mobile Router -Support for IPv6", US10/295014, WO03/043226 may be relevant to Nemo Basic Support Protocol -. - -Regarding internet draft "draft-ietf-nemo-basic-support", to the extent this draft is -included into final IETF standard specification, Nokia agrees not to assert those claims -in Nokia patents that apply to this draft and that are technically necessary to implement -the IETF standard specification against any other party in respect of its implementation of -the specification, if only practiced under any software distributed under the present terms -of GNU GENERAL PUBLIC LICENSE (http://www.fsf.org/copyleft/gpl.html) or under license terms -that conform to the present open source definition (http://www.opensource.org/osd.html) and -provided that the party relying on this commitment does not assert its patents against Nokia. - -Otherwise general Nokia Statement on Patent Licensing (http://www.ietf.org/ietf/IPR/NOKIA) -applies to this submission. - - -Heikki Huttunen -Director, Licensing -Nokia Corporation -P.O Box 86, FIN-24101 Salo, Finland -Phone: +358 (0) 7180 41202, Fax: +358 (0) 7180 44275 diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/man/Makefile.am b/openair3/PMIPv6/pmipv6-daemon-umip/man/Makefile.am deleted file mode 100755 index ecd0b2fffb..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/man/Makefile.am +++ /dev/null @@ -1,15 +0,0 @@ -## $Id: Makefile.am 1.3 03/12/12 14:03:21+02:00 anttit@tcs.hut.fi $ -## Process this file with automake to produce Makefile.in - -dist_man1_MANS = mip6d.man -dist_man5_MANS = mip6d.conf.man -dist_man7_MANS = mipv6.man -BUILT_SOURCES = $(dist_man1_MANS) $(dist_man5_MANS) $(dist_man7_MANS) -CLEANFILES = $(dist_man1_MANS) $(dist_man5_MANS) $(dist_man7_MANS) -EXTRA_DIST = mip6d.tmpl mip6d.conf.tmpl mipv6.tmpl -MAINTAINERCLEANFILES = Makefile.in - -%.man: %.tmpl - $(SED) -e 's#%DATE%#@PACKAGE_DATE@#' \ - -e 's#%VERSION%#@PACKAGE_VERSION@#' \ - -e 's#%etc%#@sysconfdir@#' $< > $@ diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/man/mip6d.conf.tmpl b/openair3/PMIPv6/pmipv6-daemon-umip/man/mip6d.conf.tmpl deleted file mode 100755 index b33c2bd81f..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/man/mip6d.conf.tmpl +++ /dev/null @@ -1,975 +0,0 @@ -.\" $Id: mip6d.conf.tmpl 1.33 06/05/12 11:48:36+03:00 vnuorval@tcs.hut.fi $ -.TH mip6d.conf 5 "January 31, 2006" "" "Mobile IPv6 and Proxy MIP and NEMO Daemon Configuration" -.SH NAME -mip6d.conf \- MIPL Mobile IPv6 and Proxy MIP and NEMO Configuration file -.SH SYNOPSIS -.B %etc%/mip6d.conf -.sp -.SH DESCRIPTION -MIPL Mobile IPv6 and Proxy MIP and NEMO daemon's configuration file -.P -Below is a list of currently supported configuration options. All -configuration lines are terminated with a semicolon. Sub-sections are -enclosed in '{' and '}'. Strings are quoted with double quotes. - -.SH COMMON OPTIONS - -The file contains the following common definitions: -.TP -.BR "include " """""" - -Includes content from other files based on provided pattern. Usual shell -wildcards are supported ('?', '*', '['). See man (7) glob for details. The -number of included files is virtually unlimited but only five levels of -recursion are authorized to prevent loops. Note that if given pattern -does not match any file, a simple warning is issued but parsing continues. -Unlike most configuration statements, no ';' is expected after the pattern. - -Example: include "/etc/mip6d.conf.d/*.conf" - - -.TP -.BR "NodeConfig " "CN | HA | MN | MAG" ";" - -Indicates if the daemon should run in Correspondent Node, Home Agent or -Mobile Node mode. - -Default: CN - -.TP -.BR "DebugLevel " number ";" - -Indicates the debug level of the daemon. If the value is greater than -zero, the daemon will not detach from tty (i.e. debug messages will be -printed on the controlling tty). - -Default: 0 - -.TP -.BR "DoRouteOptimizationCN " "boolean" ";" - -Indicates if a node should participate in route optimization with a -Mobile Node. - -Default: enabled - -.TP -.BR "NonVolatileBindingCache " "boolean" ";" - -This option is currently ignored. Binding cache is always stored in -volatile memory, and is not retained between shutdown and startup. - -.SH OPTIONS COMMON TO HOME AGENT AND MOBILE NODE - -.TP -These options are used both in the Home Agent and Mobile Node: -.TP -.BR "Interface " "name" ";" -.TP -.nf -.BR "Interface " "name" " {" -.BR " MnIfPreference " "number" ";" -.BR " IfType " "CN | HA | MN | MAG" ";" -.BR " Tunnel " "boolean" ";" -.B } -.fi - -Specifies an interface and options associated with it. If no options -are present, -.B Interface -can be terminated with semi-colon. This is used for home agent to -specify which interfaces are used for HA operation. For the home -agent to function properly, a Router Advertisement daemon (e.g. radvd) -must broadcast advertisements with the Home Agent bit and Home Agent -Information Option set on these interfaces. This option is also -used by multihomed Mobile Nodes to define which interfaces are used by -it. For MN and CN, it is posible to provide interfaces that are not -already available when the daemon is started. Those will be used when -available. - -.B MnIfPreference -sets the interface preference value for an interface in a multi-homed -Mobile Node. The most preferred interfaces have preference 1, the -second most preferred have 2, etc. Values between 0 and 10 are allowed. -A preference of zero means the interface will not be used. - -The interface preference has a direct impact on the metric of default -routes configured by the daemon from RA information. Note that if two -interfaces with associated default routes have the same preference value, -the routes will end up having the same metric, except if different default -router preference (RFC 4191) values are provided in RA. In a sense, -MnIfPreference value value is the primary selector for interface and -default route selection and default router preference value provided -in RA can then be used to break a tie. - -Default: 10 - -.B IfType -overrides the default node behavior for this interface. If a MN doesn't -wish to use this interface for mobility, or a node doesn't act as HA on -this interface, the interface type should be set to CN. - -Default: same as -.B NodeConfig - -.B Tunnel - -When enabled, this flag explicitly marks the interface as a tunnel -interface and modify the behavior of UMIP regarding the router -discovery, address configuration and route addition steps for the -interface. Those are expected to be done externally (manually or by -another automatic process (for instance when using a Teredo interface). -Note that the handling of routing via the interface is still partly -handled by UMIP but leaves some latitude to the user or the automatic -process that setup the interface. UMIP looks for default routes in the -main table that use the interface as output device and replaces them by -a default route with a proper preference. If a gateway was present for -the route (there is one for 6to4, but none when miredo is used), it is -kept in the new route. Other routes that are defined for the device -(including other default routes in other tables) are left untouched. - -Limitations and details: - -1) Tunnel interfaces are only allowed for MN and CN (not HA). - -2) They are never considered as home link (i.e. you will never be at -home on a tunnel). - -3) Unlike for physical interfaces, link detection is not reliable for -tunnel interfaces. If the tunnel interface state is directly dependent -of some physical interface link status, that status must be -monitored externally (i.e. not by UMIP) and reflected by having either -the interface being set down/up or address being removed/added for -UMIP to detect the change in interface configuration. - -4) An address must be configured on the interface for it to be -selected. If no adress is available, UMIP will simply not consider the -interface at all (even if it provides a default route). - -5) Routes that include specific sources are not considered by UMIP. - -Example: - -When using a teredo interface, the default route through the teredo -device is found and its preference changed. Link local routes are kept -unchanged. Address configuration is kept unmodified. - -When using a 6to4 tunnel interface, a default route through the 6to4 -device exists. It uses the 6to4 relay address (::192.88.99.1 anycast -address or another specific one) as gateway. UMIP finds this default -route and install a new default one with the same gateway but an -updated metric. - -Default: disabled - -.TP -.BR "UseMnHaIPsec " "boolean" ";" - -Indicates if the MN-HA MIPv6 signalling should be protected with IPsec. - -Default: enabled - -.TP -.BR "KeyMngMobCapability " "boolean" ";" - -If dynamic keying with MIPv6-aware IKE is used, this options should be -enabled. It turns on the K-bit for binding updates and binding -acknowledgements. - -Default: disabled - -.TP -.nf -.BR "IPsecPolicySet {" -.BR " HomeAgentAddress " "address" ";" -.BR " HomeAddress " "address/length" ";" -.BR " IPsecPolicy ..." -.BR " ... -.BR "}" -.fi - -.B IPsecPolicySet -is a set of policies to apply for matching packets. A policy set can -contain multiple -.B HomeAddress -options, but only one -.B HomeAgentAddress -option. For home agent, home agent address field contains its own -address, and home address fields may contain any number of mobile -nodes for which the same policy applies. - -.B IPsecPolicy -has the following format: - -.TP -.BR "IPsecPolicy " "type " "UseESP" "number number" ";" - -Field -.B type -can be one of HomeRegBinding, Mh, MobPfxDisc, ICMP, any, TunnelMh, -TunnelHomeTesting, or TunnelPayload. The any option protects all -transport mode communication between the MN and HA. Currently only -the ESP IPsec protocol is supported, but in the future AH and IPComp -might also be available. The two remaining numeric fields are the -IPsec reqid values, the first one used for MN - HA, the second one for -HA - MN communication. If just one value is defined, the same reqid -will be used in both directions. If no reqid is given, reqid will not -be used. - -If more that one IPsec transport mode or tunnel mode policy is defined -between the MN and HA in each direction, reqid can be used to provide -an unambiguous one-to-one mapping between IPsec policies and SAs. -Otherwise the policies will just share a common SA. - -.SH LOCAL MOBILITY ANCHOR SPECIFIC OPTIONS - -The following definitions are ignored unless the node is configured as a LMA: - -.TP -.nf -.BR "ProxyMipLma " "configuration name " "{" -.BR " RFC5213TimestampBasedApproachInUse " "enabled" ";" -.BR " RFC5213MobileNodeGeneratedTimestampInUse " "disabled" ";" -.BR " RFC5213FixedMAGLinkLocalAddressOnAllAccessLinks " "address" ";" -.BR " RFC5213FixedMAGLinkLayerAddressOnAllAccessLinks " "MAC address" ";" -.BR " RFC5213MinDelayBeforeBCEDelete " "decimal" ";" -.BR " RFC5213MaxDelayBeforeNewBCEAssign " "decimal" ";" -.BR " RFC5213TimestampValidityWindow " "decimal" ";" -.BR " LmaAddress " "address" ";" -.BR " LmaPmipNetworkDevice " "network device" ";" -.BR " LmaCoreNetworkAddress " "address" ";" -.BR " LmaCoreNetworkDevice " "network device" ";" -.BR " RetransmissionTimeOut " "decimal" ";" -.BR " MaxMessageRetransmissions " "decimal" ";" -.BR " TunnelingEnabled " "enabled | disabled" ";" -.BR " DynamicTunnelingEnabled " "enabled | disabled" ";" - These 2 lines repeated for each declared MAG -.BR " MagAddressIngress " "address" ";" -.BR " MagAddressEgress " "address" ";" -.BR "}" -.fi - - -Each -.B ProxyMipLma -definition has a name. This is the name (enclosed in double quotes) -of the configuration used for the LMA, this will be used in future -releases, but it has to be filled. All the ProxyMipLma specific -definitions are detailed below: - - -.TP -.BR "RFC5213TimestampBasedApproachInUse " "enabled" ";" - -This flag indicates whether or not the timestamp-based approach -for message ordering is in use in that Proxy Mobile IPv6 domain. -When the value for this flag is set to enabled, all the mobile -access gateways in that Proxy Mobile IPv6 domain MUST apply the -timestamp-based considerations listed in Section 5.5 of RFC5213. -When the value of this flag is set to disabled (NOT IMPLEMENTED), -sequence-number-based considerations listed in Section 5.5 of -RFC5213MUST be applied. The default value for this flag is set -to value of enabled, indicating that the timestamp-based mechanism - is in use in that Proxy Mobile IPv6 domain. - - -.TP -.BR "RFC5213MobileNodeGeneratedTimestampInUse " "disabled" ";" - -This flag indicates whether or not the mobile-node-generated -timestamp approach is in use in that Proxy Mobile IPv6 domain. -When the value for this flag is set to enabled (NOT IMPLEMENTED), -the local mobility anchors and mobile access gateways in that -Proxy Mobile IPv6 domain MUST apply the mobile node generated -timestamp considerations as specified in Section 5.5 of RFC5213. - -This flag is relevant only when timestamp-based approach is in -use. The value for this flag MUST NOT be set to value of enabled, -if the value of the TimestampBasedApproachInUse flag is set to -disabled. - -.TP -.BR "RFC5213FixedMAGLinkLocalAddressOnAllAccessLinks " "address" ";" - -This variable indicates the link-local address value that all the -mobile access gateways SHOULD use on any of the access links -shared with any of the mobile nodes in that Proxy Mobile IPv6 -domain. If this variable is initialized to ALL_ZERO value, it -implies the use of fixed link-local address mode is not enabled -for that Proxy Mobile IPv6 domain. - -.TP -.BR "RFC5213FixedMAGLinkLayerAddressOnAllAccessLinks " "MAC address" ";" - -This variable indicates the link-layer address value that all the -mobile access gateways SHOULD use on any of the access links -shared with any of the mobile nodes in that Proxy Mobile IPv6 -domain. For access technologies where there is no link-layer -address, this variable MUST be initialized to ALL_ZERO value. - -.TP -.BR "RFC5213MinDelayBeforeBCEDelete " "decimal" ";" - -This variable specifies the amount of time in milliseconds the -local mobility anchor MUST wait before it deletes a Binding Cache -entry of a mobile node, upon receiving a Proxy Binding Update -message from a mobile access gateway with a lifetime value of 0. -During this wait time, if the local mobility anchor receives a -Proxy Binding Update for the same mobility binding, with a -lifetime value greater than 0, then it must update the binding -cache entry with the accepted binding values. By the end of this -wait-time, if the local mobility anchor did not receive any valid -Proxy Binding Update message for that mobility binding, it MUST -delete the Binding Cache entry. This delay essentially ensures a -mobile node's Binding Cache entry is not deleted too quickly and -allows some time for the new mobile access gateway to complete the -signaling for the mobile node. - -The default value for this variable is 10000 milliseconds. - -.TP -.BR "LmaCoreNetworkDevice " "network device" ";" - -Device name of the network interface on LMA host connected to core network domain. - -.TP -.BR "RFC5213MaxDelayBeforeNewBCEAssign " "decimal" ";" - -This variable specifies the amount of time in milliseconds the -local mobility anchor MUST wait for the de-registration message -for an existing mobility session before it decides to create a new -mobility session. - -The default value for this variable is 1500 milliseconds. - -Note that there is a dependency between this value and the values -used in the retransmission algorithm for Proxy Binding Updates. -The retransmissions need to happen before -MaxDelayBeforeNewBCEAssign runs out, as otherwise there are -situations where a de-registration from a previous mobile access -gateway may be lost, and the local mobility anchor creates, -needlessly, a new mobility session and new prefixes for the mobile -node. However, this affects situations where there is no -information from the lower layers about the type of a handoff or -other parameters that can be used for identifying the mobility -session. - -.TP -.BR "RFC5213TimestampValidityWindow " "decimal" ";" - -This variable specifies the maximum amount of time difference in -milliseconds between the timestamp in the received Proxy Binding -Update message and the current time of day on the local mobility -anchor, that is allowed by the local mobility anchor for the -received message to be considered valid. - -The default value for this variable is 300 milliseconds. This -variable must be adjusted to suit the deployments. - -.TP -.BR "LmaAddress " "address" ";" - -Address is an IPv6 address, it is the address of the interface -connected to the same link where are connected MAGs egress interfaces. - -.TP -.BR "LmaPmipNetworkDevice " "network device" ";" - -Device name of the network interface on LMA host connected to PMIP -domain (MAG1, ... MAGn). - -.TP -.BR "LmaCoreNetworkAddress " "address" ";" - -Address is an IPv6 address, it is the address of the interface -connected to the core network. - -.TP -.BR "LmaCoreNetworkDevice " "network device" ";" - -Device name of the network interface on LMA host connected to -core network domain. - -.TP -.BR "RetransmissionTimeOut " "decimal" ";" - -While waiting for a message response, indicates the number of milli-seconds -the initial request will be delayed for retransmission - -.TP -.BR "MaxMessageRetransmissions " "decimal" ";" - -While waiting for a message response, indicates the number of times -the initial request will be transmitted. - -.TP -.BR "TunnelingEnabled " "enabled | disabled" ";" - -Must be set to "enabled". - -.TP -.BR "DynamicTunnelingEnabled " "enabled | disabled" ";" - -If enabled, then the creation (and deletion) of tunnel(s) between MAG(s) and LMA is on demand. - -.TP -.BR "MagAddressIngress " "address" ";" - -Address is an IPv6 address, it is the address of the interface -connected to the mobile network of a MAG. - -.TP -.BR "MagAddressEgress " "address" ";" - -Address is an IPv6 address, it is the address of the interface -connected to the PMIP network of a MAG. - - - - -.SH MOBILE ACCESS GATEWAY SPECIFIC OPTIONS - -The following definitions are ignored unless the node is configured as a MAG: - -.TP -.nf -.BR "ProxyMipMag " "configuration name " "{" -.BR " RFC5213TimestampBasedApproachInUse " "enabled" ";" -.BR " RFC5213MobileNodeGeneratedTimestampInUse " "disabled" ";" -.BR " RFC5213FixedMAGLinkLocalAddressOnAllAccessLinks " "address" ";" -.BR " RFC5213FixedMAGLinkLayerAddressOnAllAccessLinks " "MAC address" ";" -.BR " RFC5213EnableMAGLocalRouting " "disabled" ";" -.BR " LmaAddress " "address" ";" -.BR " MagAddressIngress " "address" ";" -.BR " MagAddressEgress " "address" ";" -.BR " MagDeviceIngress " "network device" ";" -.BR " MagDeviceEgress " "network device" ";" -.BR " PBULifeTime " "decimal" ";" -.BR " RetransmissionTimeOut " "decimal" ";" -.BR " MaxMessageRetransmissions " "decimal" ";" -.BR " TunnelingEnabled " "enabled | disabled" ";" -.BR " DynamicTunnelingEnabled " "enabled | disabled" ";" -.BR " RadiusClientConfigFile " "path" ";" -.BR " RadiusPassword " "password" ";" -.BR " PcapSyslogAssociationGrepString " "string" ";" -.BR " PcapSyslogDeAssociationGrepString " "string" ";" -.BR "}" -.fi - -Each -.B ProxyMipMag -definition has a name. This is the name (enclosed in double quotes) -of the configuration used for the MAG, this will be used in future -releases, but it has to be filled. All the ProxyMipMag specific -definitions are detailed below: - -.TP -.BR "RFC5213TimestampBasedApproachInUse " "enabled" ";" - -This flag indicates whether or not the timestamp-based approach -for message ordering is in use in that Proxy Mobile IPv6 domain. -When the value for this flag is set to enabled, all the mobile -access gateways in that Proxy Mobile IPv6 domain MUST apply the -timestamp-based considerations listed in Section 5.5 of RFC5213. -When the value of this flag is set to disabled (NOT IMPLEMENTED), -sequence-number-based considerations listed in Section 5.5 of -RFC5213MUST be applied. The default value for this flag is set -to value of enabled, indicating that the timestamp-based mechanism - is in use in that Proxy Mobile IPv6 domain. - - -.TP -.BR "RFC5213MobileNodeGeneratedTimestampInUse " "disabled" ";" - -This flag indicates whether or not the mobile-node-generated -timestamp approach is in use in that Proxy Mobile IPv6 domain. -When the value for this flag is set to enabled (NOT IMPLEMENTED), -the local mobility anchors and mobile access gateways in that -Proxy Mobile IPv6 domain MUST apply the mobile node generated -timestamp considerations as specified in Section 5.5 of RFC5213. - -This flag is relevant only when timestamp-based approach is in -use. The value for this flag MUST NOT be set to value of enabled, -if the value of the TimestampBasedApproachInUse flag is set to -disabled. - -.TP -.BR "RFC5213FixedMAGLinkLocalAddressOnAllAccessLinks " "address" ";" - -This variable indicates the link-local address value that all the -mobile access gateways SHOULD use on any of the access links -shared with any of the mobile nodes in that Proxy Mobile IPv6 -domain. If this variable is initialized to ALL_ZERO value, it -implies the use of fixed link-local address mode is not enabled -for that Proxy Mobile IPv6 domain. - -.TP -.BR "RFC5213FixedMAGLinkLayerAddressOnAllAccessLinks " "MAC address" ";" - -This variable indicates the link-layer address value that all the -mobile access gateways SHOULD use on any of the access links -shared with any of the mobile nodes in that Proxy Mobile IPv6 -domain. For access technologies where there is no link-layer -address, this variable MUST be initialized to ALL_ZERO value. - -.TP -.BR "RFC5213EnableMAGLocalRouting " "disabled" ";" - -This flag indicates whether or not the mobile access gateway is -allowed to enable local routing of the traffic exchanged between a -visiting mobile node and a correspondent node that is locally -connected to one of the interfaces of the mobile access gateway. -The correspondent node can be another visiting mobile node as -well, or a local fixed node. -The default value for this flag is set to a value of disabled, -indicating that the mobile access gateway MUST reverse tunnel all - the traffic to the mobile node's local mobility anchor. - -When the value of this flag is set to a value of enabled, the -mobile access gateway MUST route the traffic locally. - -This aspect of local routing MAY be defined as policy on a per -mobile basis and when present will take precedence over this flag. - - -.TP -.BR "LmaAddress " "address" ";" - -Address is an IPv6 address, it is the address of the interface -connected to the same link where are connected MAGs egress interfaces. - -.TP -.BR "MagAddressIngress " "address" ";" - -Address is an IPv6 address, it is the address of the MAG egress interface. -(Connected to the mobile network side). This option must be included -in a ProxyMipMag definition. - -.TP -.BR "MagAddressEgress " "address" ";" - -Address is an IPv6 address, it is the address of the interface -connected to the PMIP network. - -.TP -.BR "MagDeviceIngress " "network device" ";" - -Device name (for example eth1) of the ingress network interface. - -.TP -.BR "MagDeviceEgress " "network device" ";" - -Device name (for example eth0) of the Egress network interface. - -.TP -.BR "PBULifeTime " "decimal" ";" - -Indicates to LMA how many milli-seconds the Binding is valid, it will -have to be refreshed before the expiration of this value, otherwise -the Binding will be deleted. - -.TP -.BR "RetransmissionTimeOut " "decimal" ";" - -While waiting for a message response, indicates the number of milli-seconds -the initial request will be delayed for retransmission. - -.TP -.BR "MaxMessageRetransmissions " "decimal" ";" - -While waiting for a message response, indicates the number of times -the initial request will be transmitted. - -.TP -.BR "TunnelingEnabled " "enabled | disabled" ";" - -Must be set to "enabled". - -.TP -.BR "DynamicTunnelingEnabled " "enabled | disabled" ";" - -Must be set to "disabled", dynamic tunneling will be fully implemented soon. - -.TP -.BR "RadiusClientConfigFile " "path" ";" - -The path to the radius client config file. - -.TP -.BR "RadiusPassword " "password" ";" - -Radius password for authenticating on the radius server. - -.TP -.BR "PcapSyslogAssociationGrepString " "string" ";" - -String that should match the syslog message coming from an access point saying -a mobile node has associated with the access point. The grep string should end -just before the first MAC address string (for example 00:11:22:33:44:55). - -.TP -.BR "PcapSyslogDeAssociationGrepString " "string" ";" - -String that should match the syslog message coming from an access point saying -a mobile node has de-associated with the access point. The grep string should -end just before the first MAC address string (for example 00:11:22:33:44:55). - - -.SH HOME AGENT SPECIFIC OPTIONS - -The following definitions are ignored unless the node is configured as a HA: - -.TP -.BR "HaMaxBindingLife " "number" ";" - -Limits the maximum lifetime (in seconds) for Mobile Node home registrations. - -Default: 262140 - -.TP -.BR "SendMobPfxAdvs " "boolean" ";" - -Controls whether home agent sends Mobile Prefix Advertisements to -mobile nodes in foreign networks. - -.TP -.BR "SendUnsolMobPfxAdvs " "boolean" ";" - -Controls whether home agent send unsolicited Mobile Prefix -Advertisements to mobile nodes in foreign networks. - -.TP -.BR "MinMobPfxAdvInterval " "number" ";" - -Sets a minimum interval (in seconds) for Mobile Prefix Advertisements. - -Default: 600 - -.TP -.BR "MaxMobPfxAdvInterval " "number" ";" - -Sets a maximum interval (in seconds) for Mobile Prefix Advertisements. - -Default: 86400 - -.TP -.BR "HaAcceptMobRtr " "enabled | disabled" ";" - -Indicates if the HA accepts Mobile Router bindings. - -Default: disabled; - -.TP -.BR "HaServedPrefix " "prefix/length" ";" - -Prefix is an IPv6 prefix and length is the prefix length. Defines the whole -aggregated or extended prefix the HA serves. This option is only used for MR -bindings and is only needed if the MRs derive their Home Addresses from their -Mobile Network Prefixes, instead of one of the home link prefixes. - -.TP -.BR "BindingAclPolicy " "address " "MNP-list " "allow | deny" ";" - -Defines if a MN is allowed to register with the HA or not. The home address -of the MN is given in the address field. The mobile network prefixes -belonging a NEMO Mobile Router are listed in the MNP list. The list can either -be an empty string or a comma separated list of network prefixes -enclosed in braces, for example: -.B "(3ffe:2620:6:3::/64, 3ffe:2620:6:4::/64)" - -.TP -.BR "DefaultBindingAclPolicy " "allow | deny" ";" - -Defines the default policy if no matching BindingAclPolicy entry is found for -a MN. - -Default: allow - -.SH MOBILE NODE SPECIFIC OPTIONS - -The following definitions are ignored unless the node is configured as a MN: - -.TP -.BR "MnMaxHaBindingLife " "number" ";" - -Limits the maximum lifetime (in seconds) for Mobile Node home registrations. - -Default: 262140 - -.TP -.BR "MnMaxCnBindingLife " "number" ";" - -Limits the maximum lifetime (in seconds) for Mobile Node Correspondent -Node registrations. - -Default: 420 - -.TP -.BR "MnDiscardHaParamProb " "boolean" ";" - -Toggles if the Mobile Node should discard ICMPv6 Parameter Problem messages -from its Home Agent. As the ICMPv6 error messages won't normally be protected -by IPsec, a malicious third party can quite easily impersonate the HA to the -MN. Having the MN accept these messages therefore leaves it open to Denial -of Service attacks, even though its home registration signalling is protected -by IPsec. - -Default: disabled - -.TP -.BR "SendMobPfxSols " "boolean" ";" - -Controls whether mobile node sends Mobile Prefix Solicitations to the -home network. - -.TP -.BR "DoRouteOptimizationMN " "boolean" ";" - -Indicates if the Mobile Node should initialize route optimization with -Corresponent Nodes. - -Default: enabled - -.TP -.BR "MnUseAllInterfaces " "enabled | disabled" ";" - -Indicates if all interfaces should be used for mobility. The preference -of these interfaces is always 1. Unless you use dynamically created and -named network interfaces you should normally disable this option and use -.B Interface -options to explicitly list the used interfaces. - -Default: disabled - -.TP -.BR "MobRtrUseExplicitMode " "enabled | disabled" ";" - -Toggles between explicit or implicit mode home registrations in the MR. - -Default: enabled - -.TP -.BR "UseCnBuAck " "boolean" ";" - -Indicates if the Acknowledge bit should be set in Binding Updates sent to -Corresponent Nodes. - -Default: disabled - -.TP -.BR "MnRouterProbes " "number" ";" - -Indicates how many times the MN should send Neighbor Unreachability -Detection (NUD) probes to its old router after receiving a Router -Advertisement (RA) from a new one. If the option is set to zero or -the new router advertises a strictly higher default preference value -than the old one (as defined in RFC 4191), the MN will move to the new -router straight away. - -Default: 0 - -.TP -.BR "MnRouterProbeTimeout " "decimal" ";" - -Indicates how long (in seconds) the MN should wait for a reply during -a access router Neighbor Unreachability Detection probe. If set, it -overrides any default Neighbor Solicitation Retransmit Timer value -greater than MnRouterProbeTimeout. For example, if the interface -Retransmit Timer is 1 second, but MnRouterProbeTimeout is just 0.2 -seconds, the MN will only wait 0.2 seconds for a Neighbor Advertisement -before proceeding with the handoff. - -Default: 0 - -.TP -.BR "OptimisticHandoff " "enabled | disabled" ";" - -When a Mobile Node sends a Binding Update to the Home Agent, no Route -Optimized or reverse tunneled traffic is sent until a Binding -Acknowledgement is received. When enabled, this option allows the -Mobile Node to assume that the binding was successful right after the -BU has been sent, and does not wait for a positive acknowledgement -before using RO or reverse tunneling. - -Default: disabled; - -.TP -.nf -.BR "MnHomeLink " "name " "{" -.BR " HomeAddress " "address/length MNP list" ";" -.BR " HomeAgentAddress " "address" ";" -.BR " MnRoPolicy ..." -.BR " ..." -.BR "}" -.fi - -Each -.B MnHomeLink -definition has a name. This is the name (enclosed in double quotes) -of the interface used for connecting to the physical home link. To -set up multiple Home Addresses on the Mobile Node, you need to define -multiple -.B MnHomeLink -structures. The interface names don't have to be unique in these -definitions. All the home link specific definitions are detailed below: - -.TP -.BR "HomeAddress " "address/length MNP list" ";" - -Address is an IPv6 address, and length the prefix length of the -address, usually 64. The MNP list contains the mobile network prefixes -belonging to that particular NEMO Mobile Router. The MNP list is of the -same format as in -.B "BindingAclPolicy." -This option must be included in a home link definition. - -.TP -.BR "HomeAgentAddress " "address" ";" - -Address is the IPv6 address of the Mobile Node's Home Agent. DHAAD is used -if it is the unspecified address ::. - -Default: :: - -.TP -.BR "IsMobRtr " "enabled | disabled" ";" - -Defines if the MN is a NEMO MR. - -Default: disabled - -.TP -The route optimization policies are of the form: - -.TP -.BR "MnRoPolicy " "address boolean" ";" - -Any number of these policies may be defined. If no policies are defined default -behavior depends on the -.B DoRouteOptimizationMN -option. - -The fields for a route optimization policy entry are as follows: -.B address -defines the Correspondent Node this policy applies to, if left -undefined the uspecified address is used as a wildcard value -.B boolean -sets route optimization either enabled or disabled for packets -matching this entry. - -.SH EXAMPLES - -.TP -.BR "A NEMO Home Agent example:" - -.nf -NodeConfig HA; - -Interface "eth0"; - -HaAcceptMobRtr enabled; - -HaServedPrefix 3ffe:2620:6::/48; - -DefaultBindingAclPolicy deny; -BindingAclPolicy 3ffe:2620:6:1::1234 (3ffe:2620:6:2::/64, 3ffe:2620:6:3::/64) allow; -BindingAclPolicy 3ffe:2620:6:1::1235 allow; - -UseMnHaIPsec disabled; -.fi - -.TP -.BR "A NEMO Mobile Router example:" - -.nf -NodeConfig MN; - -DoRouteOptimizationCN disabled; -DoRouteOptimizationMN disabled; - -Interface "eth0"; - -MnRouterProbes 1; - -MobRtrUseExplicitMode enabled; - -MnHomeLink "eth0" { - IsMobRtr enabled; - HomeAgentAddress 3ffe:2620:6:1::1; - HomeAddress 3ffe:2620:6:1::1234/64 (3ffe:2620:6:2::/64, 3ffe:2620:6:3::/64); -} - -UseMnHaIPsec disabled; -.fi - -.TP -.BR "A Correspondent Node example:" - -.nf -NodeConfig CN; - -DoRouteOptimizationCN enabled; -.fi - -.TP -.BR "A Home Agent example:" - -.nf -NodeConfig HA; - -Interface "eth0"; -Interface "eth1"; - -UseMnHaIPsec enabled; - -IPsecPolicySet { - HomeAgentAddress 3ffe:2620:6:1::1; - - HomeAddress 3ffe:2620:6:1::1234/64; - HomeAddress 3ffe:2620:6:1::1235/64; - - IPsecPolicy HomeRegBinding UseESP; - IPsecPolicy TunnelMh UseESP; -} -.fi - -.TP -.BR "A Mobile Node example:" - -.nf -NodeConfig MN; - -DoRouteOptimizationCN enabled; - -DoRouteOptimizationMN enabled; - -UseCnBuAck enabled; - -MnHomeLink "eth0" { - HomeAgentAddress 3ffe:2620:6:1::1; - HomeAddress 3ffe:2620:6:1::1234/64; - - # address opt. - #MnRoPolicy 3ffe:2060:6:1::3 enabled; - #MnRoPolicy disabled; -} - -UseMnHaIPsec enabled; - -IPsecPolicySet { - HomeAgentAddress 3ffe:2620:6:1::1; - HomeAddress 3ffe:2620:6:1::1234/64; - - IPsecPolicy HomeRegBinding UseESP; - IPsecPolicy TunnelMh UseESP; -} -.fi - -.SH SEE ALSO -.BR mip6d (1), -.BR mipv6 (7), -.PP -RFC3775: Mobility Support in IPv6, -.PP -RFC3776: Using IPsec to Protect Mobile IPv6 Signaling Between Mobile -Nodes and Home Agents diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/man/mip6d.tmpl b/openair3/PMIPv6/pmipv6-daemon-umip/man/mip6d.tmpl deleted file mode 100755 index 6a12b50a97..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/man/mip6d.tmpl +++ /dev/null @@ -1,47 +0,0 @@ -.\" $Id: mip6d.tmpl 1.4 05/05/16 13:13:41+03:00 anttit@tcs.hut.fi $ -.TH mip6d 1 "May 16, 2005" "" "Mobile IPv6 and Proxy MIP and NEMO Daemon" -.SH NAME -mip6d \- MIPL Mobile IPv6 and Proxy MIP and NEMO Basic Support protocol implementation -.SH SYNOPSIS -.B mip6d [options] -.sp -.SH DESCRIPTION - -Mobile IPv6 and Proxy MIP and NEMO Basic Support implementation - -.SH OPTIONS -.IP "\fB\-V, \-\-version\fP" -Display version information and copyright -.IP "\fB\-?, \-h, \-\-help\fP" -Display this help text -.IP "\fB\-c \fP" -Read configuration from . If option is not present, default -path (%etc%/mip6d.conf) is used. - -.PP -These options override values read from config file: -.IP "\fB\-d \fP" -Set debug level (0-10) -.IP "\fB\-C, \-\-correspondent-node\fP" -Node is CN -.IP "\fB\-H, \-\-home-agent\fP" -Node is HA -.IP "\fB\-M, \-\-mobile-node\fP" -Node is MN - -.SH FILES - -%etc%/mip6d.conf - -.SH SEE ALSO -.BR mip6d.conf (5), -.BR mipv6 (7), -.PP -RFC3775: Mobility Support in IPv6, -.PP -RFC3776: Using IPsec to Protect Mobile IPv6 Signaling Between Mobile -Nodes and Home Agents -.PP -RFC3963: Network Mobility (NEMO) Basic Support Protocol -.PP -RFC5213: Proxy Mobile IPv6. diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/man/mipv6.tmpl b/openair3/PMIPv6/pmipv6-daemon-umip/man/mipv6.tmpl deleted file mode 100755 index 27545709e6..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/man/mipv6.tmpl +++ /dev/null @@ -1,17 +0,0 @@ -.\" $Id: mipv6.tmpl 1.1 03/11/24 11:32:14+02:00 anttit@tcs.hut.fi $ -.TH MIPV6 7 2003-12-24 "Linux Man Page" "Linux Programmer's Manual" -.SH NAME -mipv6 \- Linux Mobile IPv6 protocol extensions -.SH SYNOPSIS -.B #include -.br -.B #include -.br -.B #include -.br -.B #include -.sp -.SH DESCRIPTION -Linux 2.6 optionally implements extensions for Mobile IPv6 protocol in -the IPv6 stack. This man page describes extensions to the IPv6 API, -proposed in draft-chakrabarti-mobileip-mipext-advapi-02. diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/missing b/openair3/PMIPv6/pmipv6-daemon-umip/missing deleted file mode 100755 index 894e786e16..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/missing +++ /dev/null @@ -1,360 +0,0 @@ -#! /bin/sh -# Common stub for a few missing GNU programs while installing. - -scriptversion=2005-06-08.21 - -# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005 -# Free Software Foundation, Inc. -# Originally by Fran,cois Pinard , 1996. - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301, USA. - -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - -if test $# -eq 0; then - echo 1>&2 "Try \`$0 --help' for more information" - exit 1 -fi - -run=: - -# In the cases where this matters, `missing' is being run in the -# srcdir already. -if test -f configure.ac; then - configure_ac=configure.ac -else - configure_ac=configure.in -fi - -msg="missing on your system" - -case "$1" in ---run) - # Try to run requested program, and just exit if it succeeds. - run= - shift - "$@" && exit 0 - # Exit code 63 means version mismatch. This often happens - # when the user try to use an ancient version of a tool on - # a file that requires a minimum version. In this case we - # we should proceed has if the program had been absent, or - # if --run hadn't been passed. - if test $? = 63; then - run=: - msg="probably too old" - fi - ;; - - -h|--h|--he|--hel|--help) - echo "\ -$0 [OPTION]... PROGRAM [ARGUMENT]... - -Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an -error status if there is no known handling for PROGRAM. - -Options: - -h, --help display this help and exit - -v, --version output version information and exit - --run try to run the given command, and emulate it if it fails - -Supported PROGRAM values: - aclocal touch file \`aclocal.m4' - autoconf touch file \`configure' - autoheader touch file \`config.h.in' - automake touch all \`Makefile.in' files - bison create \`y.tab.[ch]', if possible, from existing .[ch] - flex create \`lex.yy.c', if possible, from existing .c - help2man touch the output file - lex create \`lex.yy.c', if possible, from existing .c - makeinfo touch the output file - tar try tar, gnutar, gtar, then tar without non-portable flags - yacc create \`y.tab.[ch]', if possible, from existing .[ch] - -Send bug reports to ." - exit $? - ;; - - -v|--v|--ve|--ver|--vers|--versi|--versio|--version) - echo "missing $scriptversion (GNU Automake)" - exit $? - ;; - - -*) - echo 1>&2 "$0: Unknown \`$1' option" - echo 1>&2 "Try \`$0 --help' for more information" - exit 1 - ;; - -esac - -# Now exit if we have it, but it failed. Also exit now if we -# don't have it and --version was passed (most likely to detect -# the program). -case "$1" in - lex|yacc) - # Not GNU programs, they don't have --version. - ;; - - tar) - if test -n "$run"; then - echo 1>&2 "ERROR: \`tar' requires --run" - exit 1 - elif test "x$2" = "x--version" || test "x$2" = "x--help"; then - exit 1 - fi - ;; - - *) - if test -z "$run" && ($1 --version) > /dev/null 2>&1; then - # We have it, but it failed. - exit 1 - elif test "x$2" = "x--version" || test "x$2" = "x--help"; then - # Could not run --version or --help. This is probably someone - # running `$TOOL --version' or `$TOOL --help' to check whether - # $TOOL exists and not knowing $TOOL uses missing. - exit 1 - fi - ;; -esac - -# If it does not exist, or fails to run (possibly an outdated version), -# try to emulate it. -case "$1" in - aclocal*) - echo 1>&2 "\ -WARNING: \`$1' is $msg. You should only need it if - you modified \`acinclude.m4' or \`${configure_ac}'. You might want - to install the \`Automake' and \`Perl' packages. Grab them from - any GNU archive site." - touch aclocal.m4 - ;; - - autoconf) - echo 1>&2 "\ -WARNING: \`$1' is $msg. You should only need it if - you modified \`${configure_ac}'. You might want to install the - \`Autoconf' and \`GNU m4' packages. Grab them from any GNU - archive site." - touch configure - ;; - - autoheader) - echo 1>&2 "\ -WARNING: \`$1' is $msg. You should only need it if - you modified \`acconfig.h' or \`${configure_ac}'. You might want - to install the \`Autoconf' and \`GNU m4' packages. Grab them - from any GNU archive site." - files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` - test -z "$files" && files="config.h" - touch_files= - for f in $files; do - case "$f" in - *:*) touch_files="$touch_files "`echo "$f" | - sed -e 's/^[^:]*://' -e 's/:.*//'`;; - *) touch_files="$touch_files $f.in";; - esac - done - touch $touch_files - ;; - - automake*) - echo 1>&2 "\ -WARNING: \`$1' is $msg. You should only need it if - you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. - You might want to install the \`Automake' and \`Perl' packages. - Grab them from any GNU archive site." - find . -type f -name Makefile.am -print | - sed 's/\.am$/.in/' | - while read f; do touch "$f"; done - ;; - - autom4te) - echo 1>&2 "\ -WARNING: \`$1' is needed, but is $msg. - You might have modified some files without having the - proper tools for further handling them. - You can get \`$1' as part of \`Autoconf' from any GNU - archive site." - - file=`echo "$*" | sed -n 's/.*--output[ =]*\([^ ]*\).*/\1/p'` - test -z "$file" && file=`echo "$*" | sed -n 's/.*-o[ ]*\([^ ]*\).*/\1/p'` - if test -f "$file"; then - touch $file - else - test -z "$file" || exec >$file - echo "#! /bin/sh" - echo "# Created by GNU Automake missing as a replacement of" - echo "# $ $@" - echo "exit 0" - chmod +x $file - exit 1 - fi - ;; - - bison|yacc) - echo 1>&2 "\ -WARNING: \`$1' $msg. You should only need it if - you modified a \`.y' file. You may need the \`Bison' package - in order for those modifications to take effect. You can get - \`Bison' from any GNU archive site." - rm -f y.tab.c y.tab.h - if [ $# -ne 1 ]; then - eval LASTARG="\${$#}" - case "$LASTARG" in - *.y) - SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` - if [ -f "$SRCFILE" ]; then - cp "$SRCFILE" y.tab.c - fi - SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` - if [ -f "$SRCFILE" ]; then - cp "$SRCFILE" y.tab.h - fi - ;; - esac - fi - if [ ! -f y.tab.h ]; then - echo >y.tab.h - fi - if [ ! -f y.tab.c ]; then - echo 'main() { return 0; }' >y.tab.c - fi - ;; - - lex|flex) - echo 1>&2 "\ -WARNING: \`$1' is $msg. You should only need it if - you modified a \`.l' file. You may need the \`Flex' package - in order for those modifications to take effect. You can get - \`Flex' from any GNU archive site." - rm -f lex.yy.c - if [ $# -ne 1 ]; then - eval LASTARG="\${$#}" - case "$LASTARG" in - *.l) - SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` - if [ -f "$SRCFILE" ]; then - cp "$SRCFILE" lex.yy.c - fi - ;; - esac - fi - if [ ! -f lex.yy.c ]; then - echo 'main() { return 0; }' >lex.yy.c - fi - ;; - - help2man) - echo 1>&2 "\ -WARNING: \`$1' is $msg. You should only need it if - you modified a dependency of a manual page. You may need the - \`Help2man' package in order for those modifications to take - effect. You can get \`Help2man' from any GNU archive site." - - file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` - if test -z "$file"; then - file=`echo "$*" | sed -n 's/.*--output=\([^ ]*\).*/\1/p'` - fi - if [ -f "$file" ]; then - touch $file - else - test -z "$file" || exec >$file - echo ".ab help2man is required to generate this page" - exit 1 - fi - ;; - - makeinfo) - echo 1>&2 "\ -WARNING: \`$1' is $msg. You should only need it if - you modified a \`.texi' or \`.texinfo' file, or any other file - indirectly affecting the aspect of the manual. The spurious - call might also be the consequence of using a buggy \`make' (AIX, - DU, IRIX). You might want to install the \`Texinfo' package or - the \`GNU make' package. Grab either from any GNU archive site." - # The file to touch is that specified with -o ... - file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` - if test -z "$file"; then - # ... or it is the one specified with @setfilename ... - infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` - file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $infile` - # ... or it is derived from the source name (dir/f.texi becomes f.info) - test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info - fi - # If the file does not exist, the user really needs makeinfo; - # let's fail without touching anything. - test -f $file || exit 1 - touch $file - ;; - - tar) - shift - - # We have already tried tar in the generic part. - # Look for gnutar/gtar before invocation to avoid ugly error - # messages. - if (gnutar --version > /dev/null 2>&1); then - gnutar "$@" && exit 0 - fi - if (gtar --version > /dev/null 2>&1); then - gtar "$@" && exit 0 - fi - firstarg="$1" - if shift; then - case "$firstarg" in - *o*) - firstarg=`echo "$firstarg" | sed s/o//` - tar "$firstarg" "$@" && exit 0 - ;; - esac - case "$firstarg" in - *h*) - firstarg=`echo "$firstarg" | sed s/h//` - tar "$firstarg" "$@" && exit 0 - ;; - esac - fi - - echo 1>&2 "\ -WARNING: I can't seem to be able to run \`tar' with the given arguments. - You may want to install GNU tar or Free paxutils, or check the - command line arguments." - exit 1 - ;; - - *) - echo 1>&2 "\ -WARNING: \`$1' is needed, and is $msg. - You might have modified some files without having the - proper tools for further handling them. Check the \`README' file, - it often tells you about the needed prerequisites for installing - this package. You may also peek at any GNU archive site, in case - some other package would contain this missing \`$1' program." - exit 1 - ;; -esac - -exit 0 - -# Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "scriptversion=" -# time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-end: "$" -# End: diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/src/Makefile.am b/openair3/PMIPv6/pmipv6-daemon-umip/src/Makefile.am deleted file mode 100755 index 73b67176ae..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/src/Makefile.am +++ /dev/null @@ -1,111 +0,0 @@ -## $Id: Makefile.am 1.55 06/05/07 17:37:11+03:00 anttit@tcs.hut.fi $ -## Process this file with automake to produce Makefile.in - -AM_CFLAGS = -Wall -Wextra -Wpointer-arith -Wreturn-type -pedantic -std=gnu99 -AM_CPPFLAGS = -isystem $(top_srcdir)/include -I../src -I./pmip -I/usr/local/include -AM_YFLAGS = -d - -defpath.h: $(top_builddir)/config.h - echo "#define DEFAULT_CONFIG_FILE \"$(sysconfdir)/mip6d.conf\"" > $@ - -pmgr.c: mk-pmgr_c.sh pmgr.c.in policy.h - sh mk-pmgr_c.sh - -pmgr.h: mk-pmgr_h.sh pmgr.h.in policy.h - sh mk-pmgr_h.sh - -BUILT_SOURCES = defpath.h pmgr.c pmgr.h -EXTRA_DIST = mk-pmgr_c.sh mk-pmgr_h.sh pmgr.c.in pmgr.h.in - -sbin_PROGRAMS = mip6d - -mip6d_SOURCES = pmgr.c pmgr.h defpath.h \ - main.c vars.c mipv6.h \ - conf.c conf.h \ - gram.y scan.l \ - tqueue.c tqueue.h \ - icmp6.c icmp6.h \ - list.h util.c util.h \ - hash.c hash.h \ - debug.c debug.h \ - dhaad_ha.c dhaad_ha.h \ - dhaad_mn.c dhaad_mn.h \ - ndisc.c ndisc.h \ - mh.c mh.h \ - mn.c mn.h \ - bul.c bul.h \ - bcache.c bcache.h \ - retrout.c retrout.h \ - mpdisc_ha.c mpdisc_ha.h \ - mpdisc_mn.c mpdisc_mn.h \ - tunnelctl.c tunnelctl.h \ - rtnl.c rtnl.h \ - ha.c ha.h \ - cn.c cn.h \ - keygen.c keygen.h \ - movement.c movement.h \ - policy.c policy.h \ - xfrm.c xfrm.h \ - proc_sys.c proc_sys.h \ - prefix.c prefix.h \ - ipsec.c ipsec.h \ - statistics.h \ - ./pmip/pmip.h \ - ./pmip/pmip_cache.c \ - ./pmip/pmip_cache.h \ - ./pmip/pmip_config.h \ - ./pmip/pmip_consts.h \ - ./pmip/pmip_fsm.c \ - ./pmip/pmip_fsm.h \ - ./pmip/pmip_handler.c \ - ./pmip/pmip_handler.h \ - ./pmip/pmip_hnp_cache.c \ - ./pmip/pmip_hnp_cache.h \ - ./pmip/pmip_init.c \ - ./pmip/pmip_init.h \ - ./pmip/pmip_lma_proc.c \ - ./pmip/pmip_lma_proc.h \ - ./pmip/pmip_mag_proc.c \ - ./pmip/pmip_mag_proc.h \ - ./pmip/pmip_msgs.c \ - ./pmip/pmip_msgs.h \ - ./pmip/pmip_pcap.c \ - ./pmip/pmip_pcap.h \ - ./pmip/pmip_tunnel.c \ - ./pmip/pmip_tunnel.h \ - ./pmip/pmip_types.h - -if ENABLE_VT -mip6d_SOURCES += vt.c vt.h -endif - -if BUILTIN_CRYPTO -mip6d_SOURCES += crypto.c crypto.h -endif - -mip6d_LDADD = -lpcap -if USE_RADIUS -mip6d_LDADD += -lfreeradius-client -AM_CFLAGS += -DUSE_RADIUS -endif - -if MISSING -mip6d_LDADD += -L$(top_builddir)/libmissing -lmissing -endif - -if LOCAL_NETLINK -mip6d_LDADD += -L$(top_builddir)/libnetlink -lnetlink -endif - -noinst_HEADERS = $(top_srcdir)/include/netinet/icmp6.h \ - $(top_srcdir)/include/netinet/in.h \ - $(top_srcdir)/include/netinet/ip6.h \ - $(top_srcdir)/include/netinet/ip6mh.h \ - $(top_srcdir)/include/linux/xfrm.h - -CLEANFILES = gram.c gram.h \ - pmgr.c pmgr.h \ - scan.c - -DISTCLEANFILES = $(BUILT_SOURCES) -MAINTAINERCLEANFILES = Makefile.in diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/src/bcache.c b/openair3/PMIPv6/pmipv6-daemon-umip/src/bcache.c deleted file mode 100755 index cfa3d4c3b8..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/src/bcache.c +++ /dev/null @@ -1,473 +0,0 @@ -/* - * $Id: bcache.c 1.99 06/05/07 21:53:32+03:00 anttit@tcs.hut.fi $ - * - * This file is part of the MIPL Mobile IPv6 for Linux. - * - * Author: Henrik Petander - * - * Copyright 2003-2005 Go-Core Project - * Copyright 2003-2006 Helsinki University of Technology - * - * MIPL Mobile IPv6 for Linux is free software; you can redistribute - * it and/or modify it under the terms of the GNU General Public - * License as published by the Free Software Foundation; version 2 of - * the License. - * - * MIPL Mobile IPv6 for Linux is distributed in the hope that it will - * be useful, but WITHOUT ANY WARRANTY; without even the implied - * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with MIPL Mobile IPv6 for Linux; if not, write to the Free - * Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - * 02111-1307 USA. - */ - -#ifdef HAVE_CONFIG_H -#include -#endif -#include -#include - -#include "debug.h" -#include "bcache.h" -#include "xfrm.h" -#include "util.h" -#include "tunnelctl.h" -#include "keygen.h" -#include "mh.h" -#include "cn.h" -#include "vt.h" -#include "prefix.h" - -#define BCACHE_BUCKETS 32 - -static struct hash bc_hash; - -pthread_rwlock_t bc_lock; /* Protects binding cache */ - -void dump_bce(void *bce, void *os) -{ - struct bcentry *e = (struct bcentry *)bce; - FILE *out = (FILE *)os; - - fprintf(out, " == Binding Cache entry "); - - switch(e->type) { - case BCE_NONCE_BLOCK: - fprintf(out, "(NONCE_BLOCK)\n"); - break; - - case BCE_CACHED: - fprintf(out, "(CACHED)\n"); - break; - - case BCE_HOMEREG: - fprintf(out, "(HOMEREG)\n"); - break; - - default: - fprintf(out, "(Unknown)\n"); - } - - fprintf(out, " Care-of address %x:%x:%x:%x:%x:%x:%x:%x\n", - NIP6ADDR(&e->coa)); - fprintf(out, " Home address %x:%x:%x:%x:%x:%x:%x:%x\n", - NIP6ADDR(&e->peer_addr)); - fprintf(out, " Local address %x:%x:%x:%x:%x:%x:%x:%x\n", - NIP6ADDR(&e->our_addr)); - fprintf(out, " lifetime %ld\n ", e->lifetime.tv_sec); - fprintf(out, " seqno %d\n", e->seqno); - - if (e->flags & IP6_MH_BA_MR) { - struct list_head *list; - int mnpcount = 0; - - /* MR registration type */ - fprintf(out, "MR Registration type: "); - - switch(e->nemo_type) { - case BCE_NEMO_EXPLICIT: - fprintf(out, "explicit.\n"); - break; - - case BCE_NEMO_IMPLICIT: - fprintf(out, "implicit.\n"); - break; - - default: - fprintf(out, "unknown.\n"); - } - - /* Mobile Network prefixes */ - fprintf(out, "MR Mobile network prefixes: "); - list_for_each(list, &e->mob_net_prefixes) { - struct prefix_list_entry *p; - p = list_entry(list, struct prefix_list_entry, list); - - if (mnpcount) - fprintf(out, " "); - - fprintf(out, "%x:%x:%x:%x:%x:%x:%x:%x/%d\n", - NIP6ADDR(&p->ple_prefix), p->ple_plen); - mnpcount++; - } - - if (!mnpcount) - fprintf(out, " none registered.\n"); - } - - fflush(out); -} - -static void bce_delete(struct bcentry *bce, int flush); - -/** - * _expire - expire binding cache entry - **/ -static void _expire(struct tq_elem *tqe) -{ - pthread_rwlock_wrlock(&bc_lock); - - if (!task_interrupted()) { - struct bcentry *e = tq_data(tqe, struct bcentry, tqe); - pthread_rwlock_wrlock(&e->lock); - - if (e->type == BCE_CACHED) { - /* To do: MN needs to reverse tunnel this */ - mh_send_brr(&e->peer_addr, &e->our_addr); - e->type = BCE_CACHE_DYING; - add_task_rel(&CN_BRR_BEFORE_EXPIRY_TS, - &e->tqe, _expire); - pthread_rwlock_unlock(&e->lock); - pthread_rwlock_unlock(&bc_lock); - return; - } - - pthread_rwlock_unlock(&e->lock); - bce_delete(e, 0); - } - - pthread_rwlock_unlock(&bc_lock); -} - -/** - * bcache_alloc - allocate binding cache entry - * @type: type of entry - * - * Allocates a new binding cache entry. @type may be %BCE_HOMEREG or - * %BCE_CACHED. Returns allocated space for an entry or NULL if none - * available. - **/ -struct bcentry *bcache_alloc(__attribute__ ((unused)) int type) -{ - struct bcentry *tmp; - /* This function should really return space from a - * pre-allocated pool. If pool is empty, but type is - * BCE_HOMEREG, already existing BCE_CACHED entry may be - * replaced. */ - tmp = malloc(sizeof(struct bcentry)); - - if (tmp == NULL) - return NULL; - - memset(tmp, 0, sizeof(*tmp)); - - if (pthread_rwlock_init(&tmp->lock, NULL)) { - free(tmp); - return NULL; - } - - INIT_LIST_HEAD(&tmp->tqe.list); - INIT_LIST_HEAD(&tmp->mob_net_prefixes); - return tmp; -} - -/** - * bcache_free - release allocated memory - * @bce: BC entry to free - * - * Release allocated memory back to unused pool. - **/ -void bcache_free(struct bcentry *bce) -{ - /* This function should really return allocated space to free - * pool. */ - pthread_rwlock_destroy(&bce->lock); - prefix_list_free(&bce->mob_net_prefixes); - free(bce); -} - -/** - * bcache_get - returns a binding cache entry - * @our_addr: our IPv6 address - * @peer_addr: peer's IPv6 address - * - * Returns reference to non-null entry on success and null on failure. - * If caller adjusts lifetime of entry, caller must call - * bcache_update_expire() for BC entry to reschedule. Caller must - * call bcache_release_entry() after entry is not used anymore. - **/ -struct bcentry *bcache_get(const struct in6_addr *our_addr, - const struct in6_addr *peer_addr) -{ - struct bcentry *bce; - - assert(peer_addr && our_addr); - - pthread_rwlock_rdlock(&bc_lock); - - bce = hash_get(&bc_hash, our_addr, peer_addr); - - if (bce) - pthread_rwlock_wrlock(&bce->lock); - else - pthread_rwlock_unlock(&bc_lock); - - return bce; -} - -/** - * bcache_release_entry - unlocks a binding cache entry - **/ -void bcache_release_entry(struct bcentry *bce) -{ - assert(bce); - pthread_rwlock_unlock(&bce->lock); - pthread_rwlock_unlock(&bc_lock); -} - -/** - * bce_type - get type of binding cache entry - * @our_addr: our IPv6 address - * @peer_addr: peer's IPv6 address - * - * Looks up entry from binding cache and returns its type. If not - * found, returns -%ENOENT. - **/ -int bce_type(const struct in6_addr *our_addr, const struct in6_addr *peer_addr) -{ - struct bcentry *bce; - int type; - - bce = bcache_get(our_addr, peer_addr); - - if (bce == NULL) - return -ENOENT; - - type = bce->type; - bcache_release_entry(bce); - - return type; -} - -static int __bcache_insert(struct bcentry *bce) -{ - int ret; - - ret = hash_add(&bc_hash, bce, &bce->our_addr, &bce->peer_addr); - - if (ret) - return ret; - - return 0; -} - -static int __bcache_start(struct bcentry *bce) -{ - struct timespec expires, tmp; - - tssub(bce->lifetime, CN_BRR_BEFORE_EXPIRY_TS, tmp); - clock_gettime(CLOCK_REALTIME, &bce->add_time); - tsadd(bce->add_time, - bce->type == BCE_HOMEREG ? bce->lifetime : tmp, - expires); - add_task_abs(&expires, &bce->tqe, _expire); - xfrm_add_bce(&bce->our_addr, &bce->peer_addr, &bce->coa, 0); - return 0; -} - -/* Adds bce entry and adds a timer for expiry / resend. Caller must - fill all non-private fields of bce */ -int bcache_add(struct bcentry *bce) -{ - int ret = 0; - - assert(bce); - - bce->unreach = 0; - pthread_rwlock_wrlock(&bc_lock); - - if ((ret = __bcache_insert(bce)) != 0) { - pthread_rwlock_unlock(&bc_lock); - return ret; - } - - __bcache_start(bce); - - pthread_rwlock_unlock(&bc_lock); - - return 0; -} - -int bcache_add_homereg(struct bcentry *bce) -{ - int ret = 0; - - assert(bce); - assert(bce->type == BCE_DAD); - - bce->unreach = 0; - pthread_rwlock_wrlock(&bc_lock); - - ret = __bcache_insert(bce); - - pthread_rwlock_unlock(&bc_lock); - - return ret; -} - -int bcache_complete_homereg(struct bcentry *bce) -{ - assert(bce); - - /* XXX: This function has no lock for BCE because - * bcache_update_expire() doesn't. Why? - */ - __bcache_start(bce); - - return 0; -} - -int bcache_update_expire(struct bcentry *bce) -{ - struct timespec expires; - - clock_gettime(CLOCK_REALTIME, &bce->add_time); - - if (bce->type == BCE_HOMEREG) - expires = bce->lifetime; - else { - bce->type = BCE_CACHED; - tssub(bce->lifetime, CN_BRR_BEFORE_EXPIRY_TS, expires); - } - - tsadd(expires, bce->add_time, expires); - add_task_abs(&expires, &bce->tqe, _expire); - xfrm_add_bce(&bce->our_addr, &bce->peer_addr, &bce->coa, 1); - - return 0; -} - -/** - * bcache_delete - deletes a bul entry - **/ -void bcache_delete(const struct in6_addr *our_addr, - const struct in6_addr *peer_addr) -{ - struct bcentry *bce; - pthread_rwlock_wrlock(&bc_lock); - bce = hash_get(&bc_hash, our_addr, peer_addr); - - if (bce) - bce_delete(bce, 0); - - pthread_rwlock_unlock(&bc_lock); -} - -/** - * bcache_init - initializes binding cache - **/ -int bcache_init(void) -{ - int ret; - - if (pthread_rwlock_init(&bc_lock, NULL)) - return -1; - - pthread_rwlock_wrlock(&bc_lock); - ret = hash_init(&bc_hash, DOUBLE_ADDR, BCACHE_BUCKETS); - pthread_rwlock_unlock(&bc_lock); - -#ifdef ENABLE_VT - - if (ret < 0) - return ret; - - ret = vt_bc_init(); -#endif - - return ret; -} - -static void bce_delete(struct bcentry *bce, int flush) -{ - pthread_rwlock_wrlock(&bce->lock); - - if (bce->type != BCE_DAD) { - del_task(&bce->tqe); - - if (bce->type != BCE_NONCE_BLOCK) - xfrm_del_bce(&bce->our_addr, &bce->peer_addr); - } - - if (bce->cleanup) - bce->cleanup(bce); - - if (!flush && - (bce->type == BCE_CACHED || bce->type == BCE_CACHE_DYING)) { - struct timespec minlft; - - if (!rr_cn_nonce_lft(bce->nonce_hoa, &minlft)) { - bce->type = BCE_NONCE_BLOCK; - add_task_abs(&minlft, &bce->tqe, _expire); - pthread_rwlock_unlock(&bce->lock); - return; - } - } - - hash_delete(&bc_hash, &bce->our_addr, &bce->peer_addr); - pthread_rwlock_unlock(&bce->lock); - bcache_free(bce); -} - -/** - * bce_cleanup - cleans up a bcentry - **/ -static int bce_cleanup(void *data, __attribute__ ((unused)) void *arg) -{ - bce_delete(data, 1); - return 0; -} - -void bcache_flush(void) -{ - pthread_rwlock_wrlock(&bc_lock); - hash_iterate(&bc_hash, bce_cleanup, NULL); - pthread_rwlock_unlock(&bc_lock); -} - -void bcache_cleanup(void) -{ - pthread_rwlock_wrlock(&bc_lock); - hash_cleanup(&bc_hash); - pthread_rwlock_unlock(&bc_lock); -} -/** - * bcache_iterate - apply function to every BC entry - * @func: function to apply - * @arg: extra data for @func - * - * Iterates through binding cache, calling @func for each entry. - * Extra data may be passed to @func in @arg. @func takes a bcentry - * as its first argument and @arg as second argument. - **/ -int bcache_iterate(int (* func)(void *, void *), void *arg) -{ - int err; - pthread_rwlock_rdlock(&bc_lock); - err = hash_iterate(&bc_hash, func, arg); - pthread_rwlock_unlock(&bc_lock); - return err; -} diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/src/bcache.h b/openair3/PMIPv6/pmipv6-daemon-umip/src/bcache.h deleted file mode 100755 index b3a8b43eea..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/src/bcache.h +++ /dev/null @@ -1,89 +0,0 @@ -/* $Id: bcache.h 1.38 06/01/30 18:29:16+02:00 anttit@tcs.hut.fi $ */ - -#ifndef __BCACHE_H__ -#define __BCACHE_H__ 1 - -#include "tqueue.h" -#include "hash.h" - -struct bcentry { - struct in6_addr our_addr; /* Address to which we got BU */ - struct in6_addr peer_addr; /* MN home address */ - struct in6_addr old_coa; /* Previous care-of address */ - struct in6_addr coa; /* MN care-of address */ - struct timespec add_time; /* When was the binding added or modified */ - struct timespec lifetime; /* lifetime sent in this BU, in seconds */ - uint16_t seqno; /* sequence number of the latest BU */ - uint16_t flags; /* BU flags */ - - uint16_t nonce_coa; - uint16_t nonce_hoa; - uint16_t type; /* Entry type */ - uint16_t nemo_type; /* NEMO registration type */ - int unreach; /* ICMP dest unreach count */ - int tunnel; /* Tunnel interface index */ - int link; /* Home link interface index */ - - int id; /* For testing */ - - /* Following fields are for internal use only */ - struct timespec br_lastsent; /* BR ratelimit */ - int br_count; /* BR ratelimit */ - - pthread_rwlock_t lock; /* Protects the entry */ - struct tq_elem tqe; /* Timer queue entry for expire */ - - void (*cleanup)(struct bcentry *bce); /* Clean up bce data */ - - struct list_head mob_net_prefixes; -}; - -#define BCE_NONCE_BLOCK 0 -#define BCE_HOMEREG 1 -#define BCE_CACHED 2 -#define BCE_CACHE_DYING 3 -#define BCE_DAD 4 - -#define BCE_NEMO_EXPLICIT 1 -#define BCE_NEMO_IMPLICIT 2 -#define BCE_NEMO_DYNAMIC 3 - -struct bcentry *bcache_alloc(int type); - -void bcache_free(struct bcentry *bce); - -struct bcentry *bcache_get(const struct in6_addr *our_addr, - const struct in6_addr *peer_addr); - -int bcache_add(struct bcentry *bce); - -int bcache_add_homereg(struct bcentry *bce); -int bcache_complete_homereg(struct bcentry *bce); - -int bcache_update_expire(struct bcentry *bce); - -void bcache_delete(const struct in6_addr *our_addr, - const struct in6_addr *peer_addr); - -int bcache_init(void); -void bcache_flush(void); -void bcache_cleanup(void); - -int bcache_iterate(int (* func)(void *, void *), void *arg); - -void bcache_release_entry(struct bcentry *bce); - -int bce_type(const struct in6_addr *our_addr, - const struct in6_addr *peer_addr); - -static inline int bce_exists(const struct in6_addr *our_addr, - const struct in6_addr *peer_addr) -{ - return bce_type(our_addr, peer_addr) >= BCE_NONCE_BLOCK; -} - -void dump_bce(void *bce, void *os); - -extern pthread_rwlock_t bc_lock; /* Protects binding cache */ - -#endif diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/src/bul.c b/openair3/PMIPv6/pmipv6-daemon-umip/src/bul.c deleted file mode 100755 index 70cf8c396c..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/src/bul.c +++ /dev/null @@ -1,337 +0,0 @@ -/* - * $Id: bul.c 1.114 06/05/15 13:45:42+03:00 vnuorval@tcs.hut.fi $ - * - * This file is part of the MIPL Mobile IPv6 for Linux. - * - * Author: Henrik Petander - * - * Copyright 2003-2005 Go-Core Project - * Copyright 2003-2006 Helsinki University of Technology - * - * MIPL Mobile IPv6 for Linux is free software; you can redistribute - * it and/or modify it under the terms of the GNU General Public - * License as published by the Free Software Foundation; version 2 of - * the License. - * - * MIPL Mobile IPv6 for Linux is distributed in the hope that it will - * be useful, but WITHOUT ANY WARRANTY; without even the implied - * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with MIPL Mobile IPv6 for Linux; if not, write to the Free - * Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - * 02111-1307 USA. - */ - -#ifdef HAVE_CONFIG_H -#include -#endif -#include -#include -#include -#include - -#include "bul.h" -#include "mn.h" -#include "util.h" -#include "xfrm.h" -#include "debug.h" -#include "retrout.h" -#ifdef ENABLE_VT -#include "vt.h" -#endif - -#define BUL_DEBUG_LEVEL 1 - -#if BUL_DEBUG_LEVEL >= 1 -#define BDBG dbg -#else -#define BDBG(...) -#endif - -#define BUL_BUCKETS 32 - -static struct hash bul_hash; - -struct bulentry *create_bule(const struct in6_addr *hoa, - const struct in6_addr *cn_addr) -{ - struct bulentry *bule; - - if ((bule = malloc(sizeof(*bule))) != NULL) { - memset(bule, 0, sizeof(*bule)); - bule->hoa = *hoa; - bule->last_coa = *hoa; - bule->peer_addr = *cn_addr; - INIT_LIST_HEAD(&bule->tqe.list); - bule->seq = random(); - } - - return bule; -} - -void free_bule(struct bulentry *bule) -{ - assert(bule != NULL); - free(bule); -} - -void dump_bule(void *bule, void *os) -{ - struct bulentry *e = (struct bulentry *)bule; - FILE *out = (FILE *)os; - - if (e->type == BUL_ENTRY) - fprintf(out, "== BUL_ENTRY ==\n"); - else if (e->type == NON_MIP_CN_ENTRY) - fprintf(out, "== NON_MIP_CN_ENTRY ==\n"); - else if (e->type == UNREACH_ENTRY) - fprintf(out, "== UNREACH_ENTRY ==\n"); - else - fprintf(out, "== Unknown BUL entry ==\n"); - - fprintf(out, "Home address %x:%x:%x:%x:%x:%x:%x:%x\n", - NIP6ADDR(&e->hoa)); - fprintf(out, "Care-of address %x:%x:%x:%x:%x:%x:%x:%x\n", - NIP6ADDR(&e->coa)); - fprintf(out, "CN address %x:%x:%x:%x:%x:%x:%x:%x\n", - NIP6ADDR(&e->peer_addr)); - fprintf(out, " lifetime = %ld, ", e->lifetime.tv_sec); - fprintf(out, " delay = %ld\n", tstomsec(e->delay)); - fprintf(out, " flags: "); - - if (e->flags & IP6_MH_BU_HOME) - fprintf(out, "IP6_MH_BU_HOME "); - - if (e->flags & IP6_MH_BU_ACK) - fprintf(out, "IP6_MH_BU_ACK "); - - if (e->flags & IP6_MH_BU_LLOCAL) - fprintf(out, "IP6_MH_BU_LLOCAL "); - - if (e->flags & IP6_MH_BU_KEYM) - fprintf(out, "IP6_MH_BU_KEYM "); - - if (e->flags & IP6_MH_BU_MR) - fprintf(out, "IP6_MH_BU_MR"); - - fprintf(out, "\n"); - fflush(out); -} - -/** - * bul_get - returns a binding update list entry - * @hinfo: home address info, optional if our_addr is present - * @our_addr: local address (home address) - * @peer_addr: address of CN - * - * Returns non-null entry on success and null on failure. Caller must - * call del_task and add_task, if lifetime of the entry is changed. - **/ -struct bulentry *bul_get(struct home_addr_info *hinfo, - const struct in6_addr *our_addr, - const struct in6_addr *peer_addr) -{ - struct bulentry *bule; - - assert(hinfo || our_addr); - - if (hinfo) - bule = hash_get(&hinfo->bul, NULL, peer_addr); - else bule = hash_get(&bul_hash, our_addr, peer_addr); - - return bule; -} - -/* - * need to be separated into two phase: - * phase 1: before sending BU - * add policy/state for BU - * phase 2: after sending BU - * add policy/state for RO - */ -void bul_update_timer(struct bulentry *bule) -{ - struct timespec timer_expire; - tsadd(bule->delay, bule->lastsent, timer_expire); - dbg("Updating timer\n"); - dbg_func(bule, dump_bule); - add_task_abs(&timer_expire, &bule->tqe, bule->callback); -} - -void bul_update_expire(struct bulentry *bule) -{ - - if (bule->type != BUL_ENTRY) - bule->expires = bule->lastsent; - else if (tsisset(bule->lifetime)) - tsadd(bule->lastsent, bule->lifetime, bule->expires); - else { - /* Deregistration entry, expires after 420 seconds...*/ - tsadd(DEREG_BU_LIFETIME_TS, bule->lastsent, bule->expires); - } -} - -/* Adds bul entry to both hashes and adds a timer for expiry / resend. - Caller must fill all non-private fields of bule */ -int bul_add(struct bulentry *bule) -{ - int ret = 0; - struct timespec timer_expire; - struct home_addr_info *hai = bule->home; - - assert(bule && tsisset(bule->lifetime) && hai); - - if ((ret = hash_add(&bul_hash, bule, &bule->hoa, &bule->peer_addr)) < 0) - return ret; - - if ((ret = hash_add(&hai->bul, bule, NULL, &bule->peer_addr)) < 0) - goto bul_free; - - clock_gettime(CLOCK_REALTIME, &bule->lastsent); - - if (bule->type == BUL_ENTRY) { - if ((ret = pre_bu_bul_update(bule)) < 0) - goto home_bul_free; - } else if (bule->type == NON_MIP_CN_ENTRY) { - if (bule->flags & IP6_MH_BU_HOME) { - if (xfrm_block_hoa(hai) < 0 || - (hai->mob_rtr && xfrm_block_ra(hai) < 0)) - goto home_bul_free; - } - } - - tsadd(bule->delay, bule->lastsent, timer_expire); - dbg("Adding bule\n"); - dbg_func(bule, dump_bule); - add_task_abs(&timer_expire, &bule->tqe, bule->callback); - return 0; -home_bul_free: - hash_delete(&hai->bul, &bule->hoa, &bule->peer_addr); -bul_free: - hash_delete(&bul_hash, &bule->hoa, &bule->peer_addr); - return ret; -} - -/* bul_delete - deletes a bul entry */ -void bul_delete(struct bulentry *bule) -{ - struct home_addr_info *hai = bule->home; - - del_task(&bule->tqe); - hash_delete(&bul_hash, &bule->hoa, &bule->peer_addr); - hash_delete(&hai->bul, NULL, &bule->peer_addr); - - if (!IN6_ARE_ADDR_EQUAL(&bule->hoa, &bule->coa)) { - bule->last_coa = bule->coa; - bule->coa = bule->hoa; - bule->coa_changed = 1; - } - - if (bule->type == BUL_ENTRY) { - xfrm_del_bule(bule); - - if (!(bule->flags & IP6_MH_BU_HOME)) - mn_rr_delete_bule(bule); - } - - if (bule->flags & IP6_MH_BU_HOME) { - if (bule->type == UNREACH_ENTRY) { - pthread_mutex_lock(&hai->ha_list.c_lock); - - if (IN6_ARE_ADDR_EQUAL(&bule->peer_addr, - &hai->ha_list.last_ha)) - hai->ha_list.last_ha = in6addr_any; - - pthread_mutex_unlock(&hai->ha_list.c_lock); - } else { - if (hai->home_block & HOME_LINK_BLOCK) - xfrm_unblock_link(hai); - - if (hai->home_block & HOME_ADDR_BLOCK) - xfrm_unblock_hoa(hai); - - if (hai->home_block & NEMO_RA_BLOCK) - xfrm_unblock_ra(hai); - - if (hai->home_block & NEMO_FWD_BLOCK) - xfrm_unblock_fwd(hai); - } - } - - while (bule->ext_cleanup) - bule->ext_cleanup(bule); - - dbg("Deleting bule\n"); - dbg_func(bule, dump_bule); - free_bule(bule); -} - -/* bul_init - initializes global bul */ -int bul_init(void) -{ - int ret; - - ret = hash_init(&bul_hash, DOUBLE_ADDR, BUL_BUCKETS); - -#ifdef ENABLE_VT - - if (ret < 0) - return ret; - - ret = vt_bul_init(); -#endif - - return ret; -} - -/* bul_home_init - initializes a bul */ -int bul_home_init(struct home_addr_info *home) -{ - return hash_init(&home->bul, SINGLE_ADDR, BUL_BUCKETS); -} - -/* bule_cleanup - cleans up a bulentry */ -static int bule_cleanup(void *vbule, void *vbul) -{ - if (vbul == NULL) - BUG("bul_hash should be empty!\n"); - - bul_delete(vbule); - return 0; -} - -/* bul_home_cleanup - cleans up a bul - * @bul: binding update list to clean up - */ -void bul_home_cleanup(struct hash *bul) -{ - hash_iterate(bul, bule_cleanup, bul); - hash_cleanup(bul); -} - -void bul_flush(void) -{ - hash_iterate(&bul_hash, bule_cleanup, NULL); -} - -/* bul_cleanup - cleans up global bul */ -void bul_cleanup(void) -{ - hash_cleanup(&bul_hash); -} - -/* bul_iterate - iterates through binding update list calling func for - * every entry. - * @func: function to be called for every entry, @func - * takes a void cast bulentry as its first argument and @arg as its - * second. - * @arg: second argument with which @func is called for every - * bul entry - */ -int bul_iterate(struct hash *h, int (* func)(void *, void *), void *arg) -{ - struct hash *tmp = h ? h : &bul_hash; - return hash_iterate(tmp, func, arg); -} diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/src/bul.h b/openair3/PMIPv6/pmipv6-daemon-umip/src/bul.h deleted file mode 100755 index b4288861c4..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/src/bul.h +++ /dev/null @@ -1,108 +0,0 @@ -/* $Id: bul.h 1.64 06/05/15 13:41:12+03:00 vnuorval@tcs.hut.fi $ */ - -#ifndef __BUL_H__ -#define __BUL_H__ 1 - -#include - -#include "mipv6.h" -#include "tqueue.h" -#include "hash.h" -#include "list.h" - -struct home_addr_info; - -struct retrout_info { - int state; - uint16_t co_ni; - uint16_t ho_ni; -}; - -struct addr_holder { - struct list_head list; - struct in6_addr addr; -}; - -struct bulentry { - struct home_addr_info *home; /* Pointer to home_address structure */ - /* to which this entry belongs to */ - struct tq_elem tqe; /* Timer queue entry */ - struct in6_addr peer_addr; /* CN / HA address */ - struct in6_addr hoa; - struct in6_addr coa; /* care-of address of the sent BU */ - int if_coa; - int type; /* BUL / NON_MIP_CN / UNREACH */ - uint16_t seq; /* sequence number of the latest BU */ - uint16_t flags; /* BU send flags */ - struct in6_addr last_coa; /* Last good coa */ - struct timespec lastsent; - struct timespec lifetime; /* lifetime sent in this BU */ - struct timespec delay; /* call back time in ms*/ - struct timespec expires; /* Absolute time for timer expire */ - struct timespec hard_expire; /* Absolute bulentry expiry time */ - int consecutive_resends; /* Number of consecutive BU's resent */ - int8_t coa_changed; - uint8_t wait_ack; /* WAIT / READY */ - uint8_t xfrm_state; - uint8_t use_alt_coa; /* Whether to use alt. CoA option */ - uint8_t dereg; /* for calculating BSA key */ - uint8_t do_send_bu; /* send bu / not send bu */ - - /* Information for return routability */ - struct retrout_info rr; - uint8_t Kbm[HMAC_SHA1_KEY_SIZE]; - - void (* callback)(struct tq_elem *); - void (*ext_cleanup)(struct bulentry *); -}; - - - - - -/* Types for bulentry */ -enum { - BUL_ENTRY, - NON_MIP_CN_ENTRY, - UNREACH_ENTRY, -}; - -/* RR states */ -enum { - RR_READY, - RR_STARTED, - RR_NOT_STARTED, - RR_H_EXPIRED, - RR_C_EXPIRED, - RR_EXPIRED, - RR_NON_MIP_CN -}; - -/* Types of xfrm_states */ -#define BUL_XFRM_STATE_SIG 0x1 -#define BUL_XFRM_STATE_DATA 0x2 - -struct bulentry *bul_get(struct home_addr_info *hinfo, - const struct in6_addr *our_addr, - const struct in6_addr *peer_addr); - -int bul_add(struct bulentry *bule); - -void bul_update(struct bulentry *bule); -void bul_delete(struct bulentry *bule); -void bul_update_timer(struct bulentry *bule); -void bul_update_expire(struct bulentry *bule); - -int bul_iterate(struct hash *h, int (* func)(void *bule, void *arg), void *arg); - -int bul_init(void); -int bul_home_init(struct home_addr_info *home); -void bul_home_cleanup(struct hash *bul); -void bul_flush(void); -void bul_cleanup(void); -void dump_bule(void *bule, void *os); -struct bulentry *create_bule(const struct in6_addr *hoa, - const struct in6_addr *cn_addr); -void free_bule(struct bulentry *bule); - -#endif diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/src/cn.c b/openair3/PMIPv6/pmipv6-daemon-umip/src/cn.c deleted file mode 100755 index 82de8d4675..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/src/cn.c +++ /dev/null @@ -1,417 +0,0 @@ -/* - * $Id: cn.c 1.84 06/05/07 21:52:42+03:00 anttit@tcs.hut.fi $ - * - * This file is part of the MIPL Mobile IPv6 for Linux. - * - * Authors: Ville Nuorvala - * Antti Tuominen - * - * Copyright 2003-2005 Go-Core Project - * Copyright 2003-2006 Helsinki University of Technology - * - * MIPL Mobile IPv6 for Linux is free software; you can redistribute - * it and/or modify it under the terms of the GNU General Public - * License as published by the Free Software Foundation; version 2 of - * the License. - * - * MIPL Mobile IPv6 for Linux is distributed in the hope that it will - * be useful, but WITHOUT ANY WARRANTY; without even the implied - * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with MIPL Mobile IPv6 for Linux; if not, write to the Free - * Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - * 02111-1307 USA. - */ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include -#include - -#include -#include -#include - -#include "mipv6.h" -#include "debug.h" -#include "icmp6.h" -#include "mh.h" -#include "util.h" -#include "bcache.h" -#include "keygen.h" -#include "retrout.h" -#include "cn.h" -#include "conf.h" -#include "statistics.h" - -#define MH_DEBUG_LEVEL 1 - -#if MH_DEBUG_LEVEL >= 1 -#define MDBG dbg -#else -#define MDBG(x...) -#endif - -#define ICMP_ERROR_PERSISTENT_THRESHOLD 3 - -const struct timespec cn_brr_before_expiry_ts = -{ CN_BRR_BEFORE_EXPIRY, 0 }; - -static void cn_recv_dst_unreach(const struct icmp6_hdr *ih, ssize_t len, - __attribute__ ((unused)) const struct in6_addr *src, - __attribute__ ((unused)) const struct in6_addr *dst, - __attribute__ ((unused)) int iif, - __attribute__ ((unused)) int hoplimit) -{ - struct ip6_hdr *ip6h = (struct ip6_hdr *)(ih + 1); - int optlen = len - sizeof(struct icmp6_hdr); - struct in6_addr *laddr = &ip6h->ip6_src; - struct in6_addr *raddr = &ip6h->ip6_dst; - struct bcentry *bce = NULL; - - /* check if data was truncated */ - if (icmp6_parse_data(ip6h, optlen, &laddr, &raddr) < 0) - return; - - bce = bcache_get(laddr, raddr); - - if (bce == NULL) - return; - - bce->unreach++; - - if (bce->unreach > ICMP_ERROR_PERSISTENT_THRESHOLD && - bce->type != BCE_HOMEREG) { - bcache_release_entry(bce); - bcache_delete(laddr, raddr); - dbg("BCE for %x:%x:%x:%x:%x:%x:%x:%x deleted " - "due to receipt of ICMPv6 destination unreach\n", - NIP6ADDR(raddr)); - } else { - bcache_release_entry(bce); - } -} - -static struct icmp6_handler cn_dst_unreach_handler = { - .recv = cn_recv_dst_unreach, -}; - -static void cn_recv_hoti(const struct ip6_mh *mh, ssize_t len, - const struct in6_addr_bundle *in, int iif) -{ - struct ip6_mh_home_test_init *hoti; - struct ip6_mh_home_test *hot; - struct in6_addr_bundle out; - struct iovec iov; - uint8_t keygen_token[8]; - - statistics_inc(&mipl_stat, MIPL_STATISTICS_IN_HOTI); - - if (len < 0 || (size_t)len < sizeof(struct ip6_mh_home_test_init) || - in->remote_coa) - return; - - out.src = in->dst; - out.dst = in->src; - out.remote_coa = NULL; - out.local_coa = NULL; - - hoti = (struct ip6_mh_home_test_init *)mh; - hot = mh_create(&iov, IP6_MH_TYPE_HOT); - hot->ip6mhht_nonce_index = - htons(rr_cn_keygen_token(in->src, 0, keygen_token)); - cookiecpy(hot->ip6mhht_cookie, hoti->ip6mhhti_cookie); - memcpy(hot->ip6mhht_keygen, keygen_token, 8); - mh_send(&out, &iov, 1, NULL, iif); - free_iov_data(&iov, 1); - statistics_inc(&mipl_stat, MIPL_STATISTICS_OUT_HOT); -} - -static struct mh_handler cn_hoti_handler = { - .recv = cn_recv_hoti, -}; - -static void cn_recv_coti(const struct ip6_mh *mh, ssize_t len, - const struct in6_addr_bundle *in, int iif) -{ - struct ip6_mh_careof_test_init *coti; - struct ip6_mh_careof_test *cot; - struct in6_addr_bundle out; - struct iovec iov; - uint8_t keygen_token[8]; - - statistics_inc(&mipl_stat, MIPL_STATISTICS_IN_COTI); - - if (len < 0 || (size_t)len < sizeof(struct ip6_mh_careof_test_init) || - in->remote_coa) - return; - - out.src = in->dst; - out.dst = in->src; - out.remote_coa = NULL; - out.local_coa = NULL; - - coti = (struct ip6_mh_careof_test_init *)mh; - cot = mh_create(&iov, IP6_MH_TYPE_COT); - cot->ip6mhct_nonce_index = - htons(rr_cn_keygen_token(in->src, 1, keygen_token)); - cookiecpy(cot->ip6mhct_cookie, coti->ip6mhcti_cookie); - memcpy(cot->ip6mhct_keygen, keygen_token, 8); - mh_send(&out, &iov, 1, NULL, iif); - free_iov_data(&iov, 1); - statistics_inc(&mipl_stat, MIPL_STATISTICS_OUT_COT); -} - -static struct mh_handler cn_coti_handler = { - .recv = cn_recv_coti, -}; - -/* After parsing, perform CN-specific checks (flags and auth + nonce) on BU. - * -1 is returned if the BU needs to be silently dropped. Otherwise, a BA - * status code is returned. If it is an error code, the BU should be dropped */ -static int cn_bu_check(struct ip6_mh_binding_update *bu, ssize_t len, - struct mh_options *mh_opts, - struct in6_addr *peer_addr, - struct in6_addr *our_addr, - struct in6_addr *bind_coa, - struct timespec *lifetime, uint8_t *key) -{ - struct ip6_mh_opt_nonce_index *non_ind; - struct ip6_mh_opt_auth_data *bauth; - int ret; - - non_ind = mh_opt(&bu->ip6mhbu_hdr, mh_opts, IP6_MHOPT_NONCEID); - - if (bu->ip6mhbu_flags & IP6_MH_BU_HOME) { - if (non_ind) { - /* BU w/ Nonce and H bit set. It is simply invalid. - * Drop it. This matches behavior expectedin TAHI - * CN tests: 5-3-4, 5-3-5, 5-3-6 */ - return -1; - } - - /* Now, as a CN, we are receiving a BU intended for a HA. - * We will send a BA to report the error. If the peer is - * already registered: registration type change is not - * allowed (TAHI CN tests 5-3-2, 5-3-3). If peer is unknown - * to us, just warn we are not a HA (TAHI CN Test 5-3-1) */ - if (bce_exists(our_addr, peer_addr)) - return IP6_MH_BAS_REG_NOT_ALLOWED; - else - return IP6_MH_BAS_HA_NOT_SUPPORTED; - } - - if (!non_ind) - return -1; - - /* We could also test if BU has R flag set (NEMO) and drop - * it in that case. We just act as expected by RFC 3775, i.e. - * just don't consider the value of the flag --arno */ - - MDBG("src %x:%x:%x:%x:%x:%x:%x:%x\n", NIP6ADDR(peer_addr)); - MDBG("coa %x:%x:%x:%x:%x:%x:%x:%x\n", NIP6ADDR(bind_coa)); - - if (tsisset(*lifetime)) - ret = rr_cn_calc_Kbm(ntohs(non_ind->ip6moni_home_nonce), - ntohs(non_ind->ip6moni_coa_nonce), - peer_addr, bind_coa, key); - else /* Only use home nonce and address for dereg. */ - ret = rr_cn_calc_Kbm(ntohs(non_ind->ip6moni_home_nonce), 0, - peer_addr, NULL, key); - - if (ret) - return ret; - - bauth = mh_opt(&bu->ip6mhbu_hdr, mh_opts, IP6_MHOPT_BAUTH); - - if (!bauth) - return -1; - - /* Authenticator is calculated with MH checksum set to 0 */ - bu->ip6mhbu_hdr.ip6mh_cksum = 0; - - if (mh_verify_auth_data(bu, len, bauth, bind_coa, our_addr, key) < 0) - return -1; - - return IP6_MH_BAS_ACCEPTED; -} - -void cn_recv_bu(const struct ip6_mh *mh, ssize_t len, - const struct in6_addr_bundle *in, int iif) -{ - struct mh_options mh_opts; - struct in6_addr_bundle out; - struct ip6_mh_binding_update *bu; - struct ip6_mh_opt_nonce_index *non_ind; - struct bcentry *bce = NULL; - struct timespec lft; - int status, new = 0; - uint16_t bu_flags, seqno; - uint8_t key[HMAC_SHA1_KEY_SIZE]; - uint8_t *pkey = NULL; - - statistics_inc(&mipl_stat, MIPL_STATISTICS_IN_BU); - - bu = (struct ip6_mh_binding_update *)mh; - - if (mh_bu_parse(bu, len, in, &out, &mh_opts, &lft) < 0) - return; - - if ((status = cn_bu_check(bu, len, &mh_opts, out.dst, out.src, - out.bind_coa, &lft, key)) < 0) - return; - - seqno = ntohs(bu->ip6mhbu_seqno); - - if (status >= IP6_MH_BAS_UNSPECIFIED) - goto send_nack; - - bu_flags = bu->ip6mhbu_flags; - non_ind = mh_opt(&bu->ip6mhbu_hdr, &mh_opts, IP6_MHOPT_NONCEID); - bce = bcache_get(out.src, out.dst); - - if (bce) { - if (!MIP6_SEQ_GT(seqno, bce->seqno)) { - uint16_t nonce_hoa; - - if (bce->type != BCE_NONCE_BLOCK) { - /* sequence number expired */ - seqno = bce->seqno; - bcache_release_entry(bce); - bce = NULL; - status = IP6_MH_BAS_SEQNO_BAD; - pkey = key; - goto send_nack; - } - - /* Don't accept the same home key generation token - * after deregistration with sequence numbers that - * have been used before with the same home address. - * This is more strict than the draft, but otherwise - * we would need to store all non-expired home kgen - * tokens mn had used before deregistration. */ - nonce_hoa = ntohs(non_ind->ip6moni_home_nonce); - - if (bce->nonce_hoa == nonce_hoa) { - bcache_release_entry(bce); - bce = NULL; - status = IP6_MH_BAS_NI_EXPIRED; - goto send_nack; - } - } - - if (bce->type == BCE_NONCE_BLOCK) { - bcache_release_entry(bce); - bce = NULL; - - /* don't let MN deregister BCE_NONCE_BLOCK entry */ - if (!tsisset(lft)) { - status = IP6_MH_BAS_UNSPECIFIED; - goto send_nack; - } - - /* else get rid of it */ - bcache_delete(out.src, out.dst); - } - } - - status = conf.pmgr.discard_binding(out.dst, out.bind_coa, - out.src, bu, len); - - if (status >= IP6_MH_BAS_UNSPECIFIED) { - pkey = key; - goto send_nack; - } - - if (tsisset(lft)) { - pkey = key; - - if (!bce) { - bce = bcache_alloc(BCE_CACHED); - - if (!bce) { - /* new entry, bc full */ - status = IP6_MH_BAS_INSUFFICIENT; - goto send_nack; - } - - new = 1; - bce->our_addr = *out.src; - bce->peer_addr = *out.dst; - } - - if (tsbefore(lft, MAX_RR_BINDING_LIFETIME_TS)) - lft = MAX_RR_BINDING_LIFETIME_TS; - - bce->coa = *out.bind_coa; - bce->seqno = seqno; - bce->flags = bu_flags; - bce->unreach = 0; - bce->type = BCE_CACHED; - bce->nonce_coa = ntohs(non_ind->ip6moni_coa_nonce); - bce->nonce_hoa = ntohs(non_ind->ip6moni_home_nonce); - bce->lifetime = lft; - - if (new) { - /* new entry, success */ - if (bcache_add(bce) < 0) { - free(bce); - bce = NULL; - status = IP6_MH_BAS_INSUFFICIENT; - goto send_nack; - } - } else { - /* update entry, success */ - bcache_update_expire(bce); - bcache_release_entry(bce); - } - } else { - if (!bce) { - status = IP6_MH_BAS_UNSPECIFIED; - goto send_nack; - } - - /* dereg, success */ - bcache_release_entry(bce); - bcache_delete(out.src, out.dst); - status = IP6_MH_BAS_ACCEPTED; - } - - if (bu_flags & IP6_MH_BU_ACK) - mh_send_ba(&out, status, 0, seqno, &lft, key, iif); - - return; -send_nack: - - if (bce) { - bcache_release_entry(bce); - bcache_delete(out.src, out.dst); - } - - mh_send_ba_err(&out, status, 0, seqno, pkey, iif); -} - -static struct mh_handler cn_bu_handler = { - .recv = cn_recv_bu, -}; - -void cn_init(void) -{ - icmp6_handler_reg(ICMP6_DST_UNREACH, &cn_dst_unreach_handler); - mh_handler_reg(IP6_MH_TYPE_HOTI, &cn_hoti_handler); - mh_handler_reg(IP6_MH_TYPE_COTI, &cn_coti_handler); - mh_handler_reg(IP6_MH_TYPE_BU, &cn_bu_handler); -} - -void cn_cleanup(void) -{ - mh_handler_dereg(IP6_MH_TYPE_BU, &cn_bu_handler); - mh_handler_dereg(IP6_MH_TYPE_COTI, &cn_coti_handler); - mh_handler_dereg(IP6_MH_TYPE_HOTI, &cn_hoti_handler); - icmp6_handler_dereg(ICMP6_DST_UNREACH, &cn_dst_unreach_handler); - bcache_flush(); -} diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/src/cn.h b/openair3/PMIPv6/pmipv6-daemon-umip/src/cn.h deleted file mode 100755 index 4d62e820b3..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/src/cn.h +++ /dev/null @@ -1,20 +0,0 @@ -/* $Id: cn.h 1.19 06/05/07 21:52:42+03:00 anttit@tcs.hut.fi $ */ - -#ifndef __CN_H__ -#define __CN_H__ 1 - -/* How long before binding expiry do we send a BRR */ -#define CN_BRR_BEFORE_EXPIRY 2 -extern const struct timespec cn_brr_before_expiry_ts; -#define CN_BRR_BEFORE_EXPIRY_TS cn_brr_before_expiry_ts - -struct ip6_mh; -struct in6_addr_bundle; - -extern void cn_recv_bu(const struct ip6_mh *mh, ssize_t len, - const struct in6_addr_bundle *in, int iif); - -extern void cn_init(void); -extern void cn_cleanup(void); - -#endif diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/src/conf.c b/openair3/PMIPv6/pmipv6-daemon-umip/src/conf.c deleted file mode 100755 index df155ae7d5..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/src/conf.c +++ /dev/null @@ -1,461 +0,0 @@ -/* - * $Id: conf.c 1.50 06/05/12 11:48:36+03:00 vnuorval@tcs.hut.fi $ - * - * This file is part of the MIPL Mobile IPv6 for Linux. - * - * Authors: Antti Tuominen - * Ville Nuorvala - * - * Copyright 2003-2005 Go-Core Project - * Copyright 2003-2006 Helsinki University of Technology - * - * MIPL Mobile IPv6 for Linux is free software; you can redistribute - * it and/or modify it under the terms of the GNU General Public - * License as published by the Free Software Foundation; version 2 of - * the License. - * - * MIPL Mobile IPv6 for Linux is distributed in the hope that it will - * be useful, but WITHOUT ANY WARRANTY; without even the implied - * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with MIPL Mobile IPv6 for Linux; if not, write to the Free - * Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - * 02111-1307 USA. - */ - -#ifdef HAVE_CONFIG_H -#include -#endif -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include "defpath.h" -#include "conf.h" -#include "debug.h" -#include "util.h" -#include "mipv6.h" -#ifdef ENABLE_VT -#include "vt.h" -#endif - -static void conf_usage(char *exec_name) -{ - fprintf(stderr, - "Usage: %s [options]\nOptions:\n" - " -V, --version Display version information and copyright\n" - " -?, -h, --help Display this help text\n" - " -c Read configuration from \n" -#ifdef ENABLE_VT - " --vt-service Set VT service (default=" VT_DEFAULT_SERVICE ")\n" -#endif - "\n These options override values read from config file:\n" - " -d Set debug level (0-10)\n" - " -l Write debug log to instead of stderr\n" - " -C, --correspondent-node Node is CN\n" - " -H, --home-agent Node is HA\n" - " -M, --mobile-node Node is MN\n\n" - "For bug reporting, see %s.\n", - exec_name, PACKAGE_BUGREPORT); -} - -static void conf_version(void) -{ - fprintf(stderr, - "%s (%s) %s\n" - "%s\n" - "This is free software; see the source for copying conditions. There is NO\n" - "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n", - PACKAGE, PACKAGE_NAME, PACKAGE_VERSION, PACKAGE_COPYRIGHT); -} - -static int conf_alt_file(char *filename, int argc, char **argv) -{ - int args_left = argc; - char **cur_arg = argv; - - while (args_left--) { - if (strcmp(*cur_arg, "-c") == 0 && args_left > 0) { - cur_arg++; - - if (**cur_arg == '-') - return -EINVAL; - - if (strlen(*cur_arg) >= MAXPATHLEN) - return -ENAMETOOLONG; - - strcpy(filename, *cur_arg); - return 0; - } - - cur_arg++; - } - - return 1; -} - -static int conf_file(struct mip6_config *c, char *filename) -{ - extern FILE *yyin; - int ret; - - yyin = fopen(filename, "r"); - - if (yyin == NULL) - return -ENOENT; - - c->config_file = malloc(strlen(filename) + 1); - - if (c->config_file == NULL) - return -ENOMEM; - - strcpy(c->config_file, filename); - - ret = yyparse(); - - fclose(yyin); - - if (ret) return -EINVAL; - - return 0; -} - -static int conf_cmdline(struct mip6_config *cfg, int argc, char **argv) -{ - static struct option long_opts[] = { - {"version", 0, 0, 'V'}, - {"help", 0, 0, 'h'}, - {"correspondent-node", 0, 0, 'C'}, - {"home-agent", 0, 0, 'H'}, - {"mobile-node", 0, 0, 'M'}, - {"show-config", 0, 0, 0}, -#ifdef ENABLE_VT - {"vt-service", 1, 0, 0 }, -#endif - {0, 0, 0, 0} - }; - - /* parse all other cmd line parameters than -c */ - while (1) { - int idx, c; - c = getopt_long(argc, argv, "c:d:l:Vh?CMH", long_opts, &idx); - - if (c == -1) break; - - switch (c) { - case 0: -#ifdef ENABLE_VT - if (strcmp(long_opts[idx].name, "vt-service") == 0) { - cfg->vt_service = optarg; - break; - } - -#endif - - if (idx == 5) - conf_show(cfg); - - return -1; - - case 'V': - conf_version(); - return -1; - - case '?': - case 'h': - conf_usage(basename(argv[0])); - return -1; - - case 'd': - cfg->debug_level = atoi(optarg); - break; - - case 'l': - cfg->debug_log_file = optarg; - break; - - case 'C': - cfg->mip6_entity = MIP6_ENTITY_CN; - break; - - case 'H': - cfg->mip6_entity = MIP6_ENTITY_HA; - break; - - case 'M': - cfg->mip6_entity = MIP6_ENTITY_MN; - break; - - default: - break; - }; - } - - return 0; -} - -static void conf_default(struct mip6_config *c) -{ - int i; - memset(c, 0, sizeof(*c)); - - /* Common options */ -#ifdef ENABLE_VT - c->vt_hostname = VT_DEFAULT_HOSTNAME; - c->vt_service = VT_DEFAULT_SERVICE; -#endif - c->mip6_entity = MIP6_ENTITY_CN; - pmgr_init(NULL, &conf.pmgr); - INIT_LIST_HEAD(&c->net_ifaces); - INIT_LIST_HEAD(&c->bind_acl); - c->DefaultBindingAclPolicy = IP6_MH_BAS_ACCEPTED; - - /* IPsec options */ - c->UseMnHaIPsec = 1; - INIT_LIST_HEAD(&c->ipsec_policies); - - /* MN options */ - c->MnMaxHaBindingLife = MAX_BINDING_LIFETIME; - c->MnMaxCnBindingLife = MAX_RR_BINDING_LIFETIME; - tssetdsec(c->InitialBindackTimeoutFirstReg_ts, 1.5);/*seconds*/ - tssetsec(c->InitialBindackTimeoutReReg_ts, INITIAL_BINDACK_TIMEOUT);/*seconds*/ - INIT_LIST_HEAD(&c->home_addrs); - c->MoveModulePath = NULL; /* internal */ - c->DoRouteOptimizationMN = 1; - c->MobRtrUseExplicitMode = 1; - c->SendMobPfxSols = 1; - c->OptimisticHandoff = 0; - - /* HA options */ - c->SendMobPfxAdvs = 1; - c->SendUnsolMobPfxAdvs = 1; - c->MaxMobPfxAdvInterval = 86400; /* seconds */ - c->MinMobPfxAdvInterval = 600; /* seconds */ - c->HaMaxBindingLife = MAX_BINDING_LIFETIME; - INIT_LIST_HEAD(&c->nemo_ha_served_prefixes); - - - /* PMIP global options */ - c->RFC5213TimestampBasedApproachInUse = 1; - c->RFC5213MobileNodeGeneratedTimestampInUse = 1; - c->RFC5213FixedMAGLinkLocalAddressOnAllAccessLinks = in6addr_any; - c->RFC5213FixedMAGLinkLayerAddressOnAllAccessLinks = in6addr_any; - struct timespec lifetime_tunnels; - lifetime_tunnels.tv_sec = 60; - lifetime_tunnels.tv_nsec = 0; - c->MaxDelayBeforeDynamicTunnelingDelete = lifetime_tunnels; // 60000 milliseconds - - /* PMIP LMA options */ - struct timespec lifetime1; - lifetime1.tv_sec = 10; - lifetime1.tv_nsec = 0; - c->RFC5213MinDelayBeforeBCEDelete = lifetime1; // 10000 milliseconds - struct timespec lifetime2; - lifetime2.tv_sec = 1; - lifetime2.tv_nsec = 500000000; - c->RFC5213MaxDelayBeforeNewBCEAssign = lifetime2; // 1500 milliseconds - struct timespec lifetime3; - lifetime3.tv_sec = 0; - lifetime3.tv_nsec = 300000000; - c->RFC5213TimestampValidityWindow = lifetime3; // 300 milliseconds - - - /* CN bindings */ - c->DoRouteOptimizationCN = 1; - - /* PMIP MAG options */ - c->RFC5213EnableMAGLocalRouting = 0; - c->HomeNetworkPrefix = in6addr_any; - c->NumMags = 0; - - for (i = 0; i < PMIP_MAX_MAGS; i++) { - c->MagAddressIngress[i] = in6addr_loopback; - c->MagAddressEgress[i] = in6addr_loopback; - } - - c->MagDeviceIngress = ""; - c->MagDeviceEgress = ""; - c->LmaAddress = in6addr_loopback; - c->OurAddress = in6addr_loopback; - //Lifetime for PB entry - struct timespec lifetime4; - lifetime4.tv_sec = 40; - lifetime4.tv_nsec = 0; - c->PBULifeTime = lifetime4; - struct timespec lifetime5; - lifetime5.tv_sec = 40; - lifetime5.tv_nsec = 0; - c->PBALifeTime = lifetime5; - //Time for N_Retransmissions - struct timespec lifetime6; - lifetime6.tv_sec = 1; - lifetime6.tv_nsec = 0; - c->RetransmissionTimeOut = lifetime6; - //Define the maximum # of message retransmissions. - int Max_rets = 5; - c->MaxMessageRetransmissions = Max_rets; - c->TunnelingEnabled = 0; - c->DynamicTunnelingEnabled = 0; - c->RadiusClientConfigFile = ""; - c->RadiusPassword = ""; - -} - -int conf_parse(struct mip6_config *c, int argc, char **argv) -{ - char cfile[MAXPATHLEN]; - int ret; - - /* set config defaults */ - conf_default(c); - - if ((ret = conf_alt_file(cfile, argc, argv)) != 0) { - if (ret == -EINVAL) { - fprintf(stderr, - "%s: option requires an argument -- c\n", - argv[0]); - conf_usage(basename(argv[0])); - return -1; - } else if (ret == -ENAMETOOLONG) { - fprintf(stderr, - "%s: argument too long -- c \n", - argv[0]); - return -1; - } - - strcpy(cfile, DEFAULT_CONFIG_FILE); - } - - if (conf_file(c, cfile) < 0 && ret == 0) - return -1; - - if (conf_cmdline(c, argc, argv) < 0) - return -1; - - return 0; -} - -#define CONF_BOOL_STR(x) ((x) ? "enabled" : "disabled") - -void conf_show(struct mip6_config *c) -{ - int i; - /* Common options */ - dbg("config_file = %s\n", c->config_file); -#ifdef ENABLE_VT - dbg("vt_hostname = %s\n", c->vt_hostname); - dbg("vt_service = %s\n", c->vt_service); -#endif - dbg("mip6_entity = %u\n", c->mip6_entity); - dbg("debug_level = %u\n", c->debug_level); - dbg("debug_log_file = %s\n", (c->debug_log_file ? c->debug_log_file : - "stderr")); - - if (c->pmgr.so_path) - dbg("PolicyModulePath = %s\n", c->pmgr.so_path); - - dbg("DefaultBindingAclPolicy = %u\n", c->DefaultBindingAclPolicy); - dbg("NonVolatileBindingCache = %s\n", - CONF_BOOL_STR(c->NonVolatileBindingCache)); - - /* IPsec options */ - dbg("KeyMngMobCapability = %s\n", - CONF_BOOL_STR(c->KeyMngMobCapability)); - dbg("UseMnHaIPsec = %s\n", CONF_BOOL_STR(c->UseMnHaIPsec)); - - /* MN options */ - dbg("MnMaxHaBindingLife = %u\n", c->MnMaxHaBindingLife); - dbg("MnMaxCnBindingLife = %u\n", c->MnMaxCnBindingLife); - dbg("MnRouterProbes = %u\n", c->MnRouterProbes); - dbg("MnRouterProbeTimeout = %f\n", - tstodsec(c->MnRouterProbeTimeout_ts)); - dbg("InitialBindackTimeoutFirstReg = %f\n", - tstodsec(c->InitialBindackTimeoutFirstReg_ts)); - dbg("InitialBindackTimeoutReReg = %f\n", - tstodsec(c->InitialBindackTimeoutReReg_ts)); - - if (c->MoveModulePath) - dbg("MoveModulePath = %s\n", c->MoveModulePath); - - dbg("UseCnBuAck = %s\n", CONF_BOOL_STR(c->CnBuAck)); - dbg("DoRouteOptimizationMN = %s\n", - CONF_BOOL_STR(c->DoRouteOptimizationMN)); - dbg("MnUseAllInterfaces = %s\n", CONF_BOOL_STR(c->MnUseAllInterfaces)); - dbg("MnDiscardHaParamProb = %s\n", - CONF_BOOL_STR(c->MnDiscardHaParamProb)); - dbg("SendMobPfxSols = %s\n", CONF_BOOL_STR(c->SendMobPfxSols)); - dbg("OptimisticHandoff = %s\n", CONF_BOOL_STR(c->OptimisticHandoff)); - dbg("MobRtrUseExplicitMode = %s\n", - CONF_BOOL_STR(c->MobRtrUseExplicitMode)); - - /* HA options */ - dbg("SendMobPfxAdvs = %s\n", CONF_BOOL_STR(c->SendMobPfxAdvs)); - dbg("SendUnsolMobPfxAdvs = %s\n", - CONF_BOOL_STR(c->SendUnsolMobPfxAdvs)); - dbg("MaxMobPfxAdvInterval = %u\n", c->MaxMobPfxAdvInterval); - dbg("MinMobPfxAdvInterval = %u\n", c->MinMobPfxAdvInterval); - dbg("HaMaxBindingLife = %u\n", c->HaMaxBindingLife); - dbg("HaAcceptMobRtr = %s\n", CONF_BOOL_STR(c->HaAcceptMobRtr)); - - /* CN options */ - dbg("DoRouteOptimizationCN = %s\n", - CONF_BOOL_STR(c->DoRouteOptimizationCN)); - - /* PMIP options */ - dbg("RFC5213TimestampBasedApproachInUse = %s\n",CONF_BOOL_STR(c->RFC5213TimestampBasedApproachInUse)); - dbg("RFC5213MobileNodeGeneratedTimestampInUse = %s\n",CONF_BOOL_STR(c->RFC5213MobileNodeGeneratedTimestampInUse)); - dbg("RFC5213FixedMAGLinkLocalAddressOnAllAccessLinks = %x:%x:%x:%x:%x:%x:%x:%x\n", NIP6ADDR(&c->RFC5213FixedMAGLinkLocalAddressOnAllAccessLinks)); - dbg("RFC5213FixedMAGLinkLayerAddressOnAllAccessLinks = %x:%x:%x:%x:%x:%x:%x:%x\n", NIP6ADDR(&c->RFC5213FixedMAGLinkLayerAddressOnAllAccessLinks)); - - /* PMIP LMA options */ - dbg("RFC5213MinDelayBeforeBCEDelete = %u.%9u seconds\n",c->RFC5213MinDelayBeforeBCEDelete.tv_sec,c->RFC5213MinDelayBeforeBCEDelete.tv_nsec); - dbg("RFC5213MaxDelayBeforeNewBCEAssign = %u.%9u seconds\n",c->RFC5213MaxDelayBeforeNewBCEAssign.tv_sec,c->RFC5213MaxDelayBeforeNewBCEAssign.tv_nsec); - dbg("RFC5213TimestampValidityWindow = %u.%9u seconds\n",c->RFC5213TimestampValidityWindow.tv_sec,c->RFC5213TimestampValidityWindow.tv_nsec); - - /* PMIP MAG options */ - dbg("RFC5213EnableMAGLocalRouting = %s\n", CONF_BOOL_STR(c->RFC5213EnableMAGLocalRouting)); - - dbg("AllLmaMulticastAddress = %x:%x:%x:%x:%x:%x:%x:%x\n", NIP6ADDR(&c->AllLmaMulticastAddress)); - dbg("LmaAddress = %x:%x:%x:%x:%x:%x:%x:%x\n", NIP6ADDR(&c->LmaAddress)); - - if (is_ha()) { - for (i = 0; i < c->NumMags; i++) { - dbg("MAG %d: \n", i); - dbg(" MagAddressIngress = %x:%x:%x:%x:%x:%x:%x:%x\n", NIP6ADDR(&c->MagAddressIngress[i])); - dbg(" MagAddressEgress = %x:%x:%x:%x:%x:%x:%x:%x\n", NIP6ADDR(&c->MagAddressEgress[i])); - } - } - - if (is_mag()) { - dbg("MagAddressIngress = %x:%x:%x:%x:%x:%x:%x:%x\n", NIP6ADDR(&c->MagAddressIngress[0])); - dbg("MagAddressEgress = %x:%x:%x:%x:%x:%x:%x:%x\n", NIP6ADDR(&c->MagAddressEgress[0])); - dbg("MagDeviceIngress = %s\n", (c->MagDeviceIngress ? c->MagDeviceIngress : "No device")); - dbg("MagDeviceEgress = %s\n", (c->MagDeviceEgress ? c->MagDeviceEgress : "No device")); - dbg("PBULifeTime = %u.%9u seconds\n",c->PBULifeTime.tv_sec,c->PBULifeTime.tv_nsec); - dbg("RetransmissionTimeOut = %u.%9u seconds\n",c->RetransmissionTimeOut.tv_sec,c->RetransmissionTimeOut.tv_nsec); - dbg("RadiusClientConfigFile = %s\n", (c->RadiusClientConfigFile ? c->RadiusClientConfigFile : "No Config file")); - dbg("RadiusPassword = %s\n", (c->RadiusPassword ? c->RadiusPassword : "No password")); - dbg("PcapSyslogAssociationGrepString = %s\n", (c->PcapSyslogAssociationGrepString ? c->PcapSyslogAssociationGrepString : "No syslog association grep string")); - dbg("PcapSyslogDeAssociationGrepString = %s\n", (c->PcapSyslogDeAssociationGrepString ? c->PcapSyslogDeAssociationGrepString : "No syslog de-association grep string")); - } - - dbg("OurAddress = %x:%x:%x:%x:%x:%x:%x:%x\n", NIP6ADDR(&c->OurAddress)); - dbg("HomeNetworkPrefix = %x:%x:%x:%x:%x:%x:%x:%x\n", NIP6ADDR(&c->HomeNetworkPrefix)); - - dbg("MaxMessageRetransmissions = %u\n", c->MaxMessageRetransmissions); - dbg("TunnelingEnabled = %s\n", CONF_BOOL_STR(c->TunnelingEnabled)); - dbg("DynamicTunnelingEnabled = %s\n", CONF_BOOL_STR(c->DynamicTunnelingEnabled)); - dbg("MaxDelayBeforeDynamicTunnelingDelete = %u.%9u seconds\n",c->MaxDelayBeforeDynamicTunnelingDelete.tv_sec,c->MaxDelayBeforeDynamicTunnelingDelete.tv_nsec); -} diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/src/conf.h b/openair3/PMIPv6/pmipv6-daemon-umip/src/conf.h deleted file mode 100755 index b2d06278bf..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/src/conf.h +++ /dev/null @@ -1,179 +0,0 @@ -/* $Id: conf.h 1.39 06/05/12 11:48:36+03:00 vnuorval@tcs.hut.fi $ */ - -#ifndef __CONF_H__ -#define __CONF_H__ 1 - -#include -#include -#include "list.h" -#include "pmgr.h" - -struct mip6_config { - /* Common options */ - char *config_file; -#ifdef ENABLE_VT - char *vt_hostname; - char *vt_service; -#endif - unsigned int mip6_entity; - unsigned int debug_level; - char *debug_log_file; - struct pmgr_cb pmgr; - struct list_head net_ifaces; - struct list_head bind_acl; - uint8_t DefaultBindingAclPolicy; - char NonVolatileBindingCache; - - /* IPsec options */ - char KeyMngMobCapability; - char UseMnHaIPsec; - struct list_head ipsec_policies; - - /* MN options */ - unsigned int MnMaxHaBindingLife; - unsigned int MnMaxCnBindingLife; - unsigned int MnRouterProbes; - struct timespec MnRouterProbeTimeout_ts; - struct timespec InitialBindackTimeoutFirstReg_ts; - struct timespec InitialBindackTimeoutReReg_ts; - struct list_head home_addrs; - char *MoveModulePath; - uint16_t CnBuAck; - char MobRtrUseExplicitMode; - char DoRouteOptimizationMN; - char MnUseAllInterfaces; - char MnDiscardHaParamProb; - char SendMobPfxSols; - char OptimisticHandoff; - - /* HA options */ - char HaAcceptMobRtr; - char SendMobPfxAdvs; - char SendUnsolMobPfxAdvs; - unsigned int MaxMobPfxAdvInterval; - unsigned int MinMobPfxAdvInterval; - unsigned int HaMaxBindingLife; - struct list_head nemo_ha_served_prefixes; - - /* CN options */ - char DoRouteOptimizationCN; - - /* PMIP global options */ - unsigned int RFC5213TimestampBasedApproachInUse; - unsigned int RFC5213MobileNodeGeneratedTimestampInUse; - struct in6_addr RFC5213FixedMAGLinkLocalAddressOnAllAccessLinks; - struct in6_addr RFC5213FixedMAGLinkLayerAddressOnAllAccessLinks; - - /* PMIP LMA options */ - struct timespec RFC5213MinDelayBeforeBCEDelete; - struct timespec RFC5213MaxDelayBeforeNewBCEAssign; - struct timespec RFC5213TimestampValidityWindow; - - /* PMIP MAG options */ - unsigned int RFC5213EnableMAGLocalRouting; - struct in6_addr AllLmaMulticastAddress; // All-LMA Multicast Address (Eurecom' Extension for SPMIPv6). - struct in6_addr LmaAddress; // address of LMA, PMIP network side. - char* LmaPmipNetworkDevice; // PMIP LMA device, PMIP network side. - struct in6_addr LmaCoreNetworkAddress; // address of LMA, core network side. - char* LmaCoreNetworkDevice; // PMIP LMA device, core network side. - unsigned int NumMags; -#define PMIP_MAX_MAGS 64 - struct in6_addr MagAddressIngress[PMIP_MAX_MAGS]; // ingress address of MAG. - struct in6_addr MagAddressEgress[PMIP_MAX_MAGS]; // egress address of MAG. - char* MagDeviceIngress; // ingress device. - char* MagDeviceEgress; // egress device. - struct in6_addr OurAddress; - struct in6_addr HomeNetworkPrefix; // home network address common for domain! - struct timespec PBULifeTime; // Life time of Proxy Binding Update. - struct timespec PBALifeTime; // Life time MR side. - struct timespec RetransmissionTimeOut; // Time-out before retransmission of a message. - int MaxMessageRetransmissions; //indicates the maximum number of message retransmissions - char TunnelingEnabled; - char DynamicTunnelingEnabled; - struct timespec MaxDelayBeforeDynamicTunnelingDelete; - char* RadiusClientConfigFile; - char* RadiusPassword; - char* PcapSyslogAssociationGrepString; - char* PcapSyslogDeAssociationGrepString; -}; - -struct net_iface { - struct list_head list; - char name[IF_NAMESIZE]; - int ifindex; - int is_rtr; - int mip6_if_entity; - int mn_if_preference; - int is_tunnel; -}; - -extern struct mip6_config conf; - -#define MIP6_ENTITY_NO -1 -#define MIP6_ENTITY_CN 0 -#define MIP6_ENTITY_MN 1 -#define MIP6_ENTITY_HA 2 -#define MIP6_ENTITY_MAG 3 - -static inline int is_cn(void) -{ - return conf.mip6_entity == MIP6_ENTITY_CN; -} - -static inline int is_mn(void) -{ - return conf.mip6_entity == MIP6_ENTITY_MN; -} - -static inline int is_ha(void) -{ - return conf.mip6_entity == MIP6_ENTITY_HA; -} - -static inline int is_mag(void) -{ - return conf.mip6_entity == MIP6_ENTITY_MAG; -} - - -static inline int is_if_entity_set(struct net_iface *i) -{ - return i->mip6_if_entity != MIP6_ENTITY_NO; - -} - -static inline int is_if_cn(struct net_iface *i) -{ - return (is_cn() && - (!is_if_entity_set(i) || i->mip6_if_entity == MIP6_ENTITY_CN)); - -} - -static inline int is_if_mn(struct net_iface *i) -{ - return (is_mn() && - (!is_if_entity_set(i) || i->mip6_if_entity == MIP6_ENTITY_MN)); -} - -static inline int is_if_ha(struct net_iface *i) -{ - return (is_ha() && - (!is_if_entity_set(i) || i->mip6_if_entity == MIP6_ENTITY_HA)); -} - - -static inline int is_if_mag(struct net_iface *i) -{ - return (is_mag() && - (!is_if_entity_set(i) || i->mip6_if_entity == MIP6_ENTITY_MAG)); -} - -int conf_parse(struct mip6_config *c, int argc, char **argv); - -void conf_show(struct mip6_config *c); - -int yyparse(void); - -int yylex(void); - -#endif diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/src/crypto.c b/openair3/PMIPv6/pmipv6-daemon-umip/src/crypto.c deleted file mode 100755 index b245dd40d1..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/src/crypto.c +++ /dev/null @@ -1,439 +0,0 @@ -/* - * $Id: crypto.c 1.2 06/05/05 12:16:34+03:00 anttit@tcs.hut.fi $ - * - * This file is part of the MIPL Mobile IPv6 for Linux. - * - * Copyright 2006 Helsinki University of Technology - * - * MIPL Mobile IPv6 for Linux is free software; you can redistribute - * it and/or modify it under the terms of the GNU General Public - * License as published by the Free Software Foundation; version 2 of - * the License. - * - * MIPL Mobile IPv6 for Linux is distributed in the hope that it will - * be useful, but WITHOUT ANY WARRANTY; without even the implied - * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with MIPL Mobile IPv6 for Linux; if not, write to the Free - * Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - * 02111-1307 USA. - */ - -/* - * Copyright (C) 1998, 2001, 2002, 2003 Free Software Foundation, Inc. - * - * This file contains parts of sha1.c, bithelp.h, g10lib.h, and misc.c - * from the Libgcrypt software library package. It has been modified - * to provide standalone SHA-1 functionality. Libgcrypt is licensed - * under the LGPL. See Libgcrypt home page for more information and - * complete library: http://directory.fsf.org/security/libgcrypt.html - * - * HMAC-SHA1 functionality has been added. This is a modified version - * of HMAC-MD5 example in RFC2104 (code not from libgcrypt), and has - * been tested with HMAC-SHA1 test cases as described in RFC2202. - * Also, random_bytes() function was added. These random bytes should - * be good enough for MIPv6 use (no guarantees though). Use Libgcrypt - * or OpenSSL, if you need better. - */ - -/* SHA-1 Test vectors: - * - * "abc" - * A999 3E36 4706 816A BA3E 2571 7850 C26C 9CD0 D89D - * - * "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" - * 8498 3E44 1C3B D26E BAAE 4AA1 F951 29E5 E546 70F1 - */ - -#include - -#include -#include -#include -#include - -#include "crypto.h" - -/**************** - * Rotate the 32 bit unsigned integer X by N bits left/right - */ -#if defined(__GNUC__) && defined(__i386__) -static inline uint32_t rol(uint32_t x, int n) -{ - __asm__("roll %%cl,%0" - :"=r" (x) - :"0" (x),"c" (n)); - return x; -} -#else -#define rol(x,n) ( ((x) << (n)) | ((x) >> (32-(n))) ) -#endif - -#if defined(__GNUC__) && defined(__i386__) -static inline uint32_t ror(uint32_t x, int n) -{ - __asm__("rorl %%cl,%0" - :"=r" (x) - :"0" (x),"c" (n)); - return x; -} -#else -#define ror(x,n) ( ((x) >> (n)) | ((x) << (32-(n))) ) -#endif - -/* To avoid that a compiler optimizes certain memset calls away, these - macros may be used instead. */ -#define wipememory2(_ptr,_set,_len) do { \ - volatile char *_vptr=(volatile char *)(_ptr); \ - size_t _vlen=(_len); \ - while(_vlen) { *_vptr=(_set); _vptr++; _vlen--; } \ - } while(0) -#define wipememory(_ptr,_len) wipememory2(_ptr,0,_len) - - -static void _gcry_burn_stack(int bytes) -{ - char buf[64]; - - wipememory(buf, sizeof buf); - bytes -= sizeof buf; - - if (bytes > 0) - _gcry_burn_stack(bytes); -} - -void SHA1_init(SHA1_CTX *ctx) -{ - ctx->h0 = 0x67452301; - ctx->h1 = 0xefcdab89; - ctx->h2 = 0x98badcfe; - ctx->h3 = 0x10325476; - ctx->h4 = 0xc3d2e1f0; - ctx->nblocks = 0; - ctx->count = 0; -} - -/**************** - * Transform the message X which consists of 16 32-bit-words - */ -static void transform(SHA1_CTX *hd, const uint8_t *data) -{ - register uint32_t a,b,c,d,e,tm; - uint32_t x[16]; - - /* Get values from the chaining vars. */ - a = hd->h0; - b = hd->h1; - c = hd->h2; - d = hd->h3; - e = hd->h4; - -#ifdef WORDS_BIGENDIAN - memcpy(x, data, 64); -#else - { - int i; - uint8_t *p2; - - for (i = 0, p2 = (uint8_t *)x; i < 16; i++, p2 += 4) { - p2[3] = *data++; - p2[2] = *data++; - p2[1] = *data++; - p2[0] = *data++; - } - } -#endif - -#define K1 0x5A827999L -#define K2 0x6ED9EBA1L -#define K3 0x8F1BBCDCL -#define K4 0xCA62C1D6L -#define F1(x,y,z) ( z ^ ( x & ( y ^ z ) ) ) -#define F2(x,y,z) ( x ^ y ^ z ) -#define F3(x,y,z) ( ( x & y ) | ( z & ( x | y ) ) ) -#define F4(x,y,z) ( x ^ y ^ z ) - - -#define M(i) ( tm = x[i&0x0f] ^ x[(i-14)&0x0f] \ - ^ x[(i-8)&0x0f] ^ x[(i-3)&0x0f] \ - , (x[i&0x0f] = rol(tm, 1)) ) - -#define R(a,b,c,d,e,f,k,m) do { e += rol( a, 5 ) \ - + f( b, c, d ) \ - + k \ - + m; \ - b = rol( b, 30 ); \ - } while(0) - R( a, b, c, d, e, F1, K1, x[ 0] ); - R( e, a, b, c, d, F1, K1, x[ 1] ); - R( d, e, a, b, c, F1, K1, x[ 2] ); - R( c, d, e, a, b, F1, K1, x[ 3] ); - R( b, c, d, e, a, F1, K1, x[ 4] ); - R( a, b, c, d, e, F1, K1, x[ 5] ); - R( e, a, b, c, d, F1, K1, x[ 6] ); - R( d, e, a, b, c, F1, K1, x[ 7] ); - R( c, d, e, a, b, F1, K1, x[ 8] ); - R( b, c, d, e, a, F1, K1, x[ 9] ); - R( a, b, c, d, e, F1, K1, x[10] ); - R( e, a, b, c, d, F1, K1, x[11] ); - R( d, e, a, b, c, F1, K1, x[12] ); - R( c, d, e, a, b, F1, K1, x[13] ); - R( b, c, d, e, a, F1, K1, x[14] ); - R( a, b, c, d, e, F1, K1, x[15] ); - R( e, a, b, c, d, F1, K1, M(16) ); - R( d, e, a, b, c, F1, K1, M(17) ); - R( c, d, e, a, b, F1, K1, M(18) ); - R( b, c, d, e, a, F1, K1, M(19) ); - R( a, b, c, d, e, F2, K2, M(20) ); - R( e, a, b, c, d, F2, K2, M(21) ); - R( d, e, a, b, c, F2, K2, M(22) ); - R( c, d, e, a, b, F2, K2, M(23) ); - R( b, c, d, e, a, F2, K2, M(24) ); - R( a, b, c, d, e, F2, K2, M(25) ); - R( e, a, b, c, d, F2, K2, M(26) ); - R( d, e, a, b, c, F2, K2, M(27) ); - R( c, d, e, a, b, F2, K2, M(28) ); - R( b, c, d, e, a, F2, K2, M(29) ); - R( a, b, c, d, e, F2, K2, M(30) ); - R( e, a, b, c, d, F2, K2, M(31) ); - R( d, e, a, b, c, F2, K2, M(32) ); - R( c, d, e, a, b, F2, K2, M(33) ); - R( b, c, d, e, a, F2, K2, M(34) ); - R( a, b, c, d, e, F2, K2, M(35) ); - R( e, a, b, c, d, F2, K2, M(36) ); - R( d, e, a, b, c, F2, K2, M(37) ); - R( c, d, e, a, b, F2, K2, M(38) ); - R( b, c, d, e, a, F2, K2, M(39) ); - R( a, b, c, d, e, F3, K3, M(40) ); - R( e, a, b, c, d, F3, K3, M(41) ); - R( d, e, a, b, c, F3, K3, M(42) ); - R( c, d, e, a, b, F3, K3, M(43) ); - R( b, c, d, e, a, F3, K3, M(44) ); - R( a, b, c, d, e, F3, K3, M(45) ); - R( e, a, b, c, d, F3, K3, M(46) ); - R( d, e, a, b, c, F3, K3, M(47) ); - R( c, d, e, a, b, F3, K3, M(48) ); - R( b, c, d, e, a, F3, K3, M(49) ); - R( a, b, c, d, e, F3, K3, M(50) ); - R( e, a, b, c, d, F3, K3, M(51) ); - R( d, e, a, b, c, F3, K3, M(52) ); - R( c, d, e, a, b, F3, K3, M(53) ); - R( b, c, d, e, a, F3, K3, M(54) ); - R( a, b, c, d, e, F3, K3, M(55) ); - R( e, a, b, c, d, F3, K3, M(56) ); - R( d, e, a, b, c, F3, K3, M(57) ); - R( c, d, e, a, b, F3, K3, M(58) ); - R( b, c, d, e, a, F3, K3, M(59) ); - R( a, b, c, d, e, F4, K4, M(60) ); - R( e, a, b, c, d, F4, K4, M(61) ); - R( d, e, a, b, c, F4, K4, M(62) ); - R( c, d, e, a, b, F4, K4, M(63) ); - R( b, c, d, e, a, F4, K4, M(64) ); - R( a, b, c, d, e, F4, K4, M(65) ); - R( e, a, b, c, d, F4, K4, M(66) ); - R( d, e, a, b, c, F4, K4, M(67) ); - R( c, d, e, a, b, F4, K4, M(68) ); - R( b, c, d, e, a, F4, K4, M(69) ); - R( a, b, c, d, e, F4, K4, M(70) ); - R( e, a, b, c, d, F4, K4, M(71) ); - R( d, e, a, b, c, F4, K4, M(72) ); - R( c, d, e, a, b, F4, K4, M(73) ); - R( b, c, d, e, a, F4, K4, M(74) ); - R( a, b, c, d, e, F4, K4, M(75) ); - R( e, a, b, c, d, F4, K4, M(76) ); - R( d, e, a, b, c, F4, K4, M(77) ); - R( c, d, e, a, b, F4, K4, M(78) ); - R( b, c, d, e, a, F4, K4, M(79) ); - - /* Update chaining vars. */ - hd->h0 += a; - hd->h1 += b; - hd->h2 += c; - hd->h3 += d; - hd->h4 += e; -} - - -/* Update the message digest with the contents of BUF with length LEN. - */ -void SHA1_update(SHA1_CTX *ctx, const uint8_t *buf, size_t len) -{ - if (ctx->count == 64) { /* flush the buffer */ - transform(ctx, ctx->buf); - _gcry_burn_stack(88 + 4 * sizeof(void *)); - ctx->count = 0; - ctx->nblocks++; - } - - if (!buf) - return; - - if (ctx->count) { - for (; len && ctx->count < 64; len--) - ctx->buf[ctx->count++] = *buf++; - - SHA1_update(ctx, NULL, 0); - - if (!len) - return; - } - - while (len >= 64) { - transform(ctx, buf); - ctx->count = 0; - ctx->nblocks++; - len -= 64; - buf += 64; - } - - _gcry_burn_stack(88 + 4 * sizeof(void *)); - - for (; len && ctx->count < 64; len--) - ctx->buf[ctx->count++] = *buf++; -} - -/* The routine final terminates the computation and returns the - * digest. The handle is prepared for a new cycle, but adding bytes - * to the handle will the destroy the returned buffer. Returns: 20 - * bytes representing the digest. - */ -void SHA1_final(SHA1_CTX *ctx, uint8_t *digest) -{ - uint32_t t, msb, lsb; - uint8_t *p; - - SHA1_update(ctx, NULL, 0); /* flush */; - - t = ctx->nblocks; - /* multiply by 64 to make a byte count */ - lsb = t << 6; - msb = t >> 26; - /* add the count */ - t = lsb; - - if ((lsb += ctx->count) < t) - msb++; - - /* multiply by 8 to make a bit count */ - t = lsb; - lsb <<= 3; - msb <<= 3; - msb |= t >> 29; - - if (ctx->count < 56) { /* enough room */ - ctx->buf[ctx->count++] = 0x80; /* pad */ - - while (ctx->count < 56) - ctx->buf[ctx->count++] = 0; /* pad */ - } else { /* need one extra block */ - ctx->buf[ctx->count++] = 0x80; /* pad character */ - - while (ctx->count < 64) - ctx->buf[ctx->count++] = 0; - - SHA1_update(ctx, NULL, 0); /* flush */; - memset(ctx->buf, 0, 56 ); /* fill next block with zeroes */ - } - - /* append the 64 bit count */ - ctx->buf[56] = msb >> 24; - ctx->buf[57] = msb >> 16; - ctx->buf[58] = msb >> 8; - ctx->buf[59] = msb; - ctx->buf[60] = lsb >> 24; - ctx->buf[61] = lsb >> 16; - ctx->buf[62] = lsb >> 8; - ctx->buf[63] = lsb; - transform(ctx, ctx->buf ); - _gcry_burn_stack(88 + 4 * sizeof(void *)); - - p = ctx->buf; -#ifdef WORDS_BIGENDIAN -#define X(a) do { *(uint32_t *)p = ctx->h##a ; p += 4; } while(0) -#else /* little endian */ -#define X(a) do { *p++ = ctx->h##a >> 24; *p++ = ctx->h##a >> 16; \ - *p++ = ctx->h##a >> 8; *p++ = ctx->h##a; } while(0) -#endif - X(0); - X(1); - X(2); - X(3); - X(4); -#undef X - - memcpy(digest, ctx->buf, SHA_DIGESTSIZE); -} - -void HMAC_SHA1_init(HMAC_SHA1_CTX *ctx, const uint8_t *key, size_t keylen) -{ - SHA1_CTX *ictx; - uint8_t tkey[SHA_DIGESTSIZE]; - uint8_t pad[SHA_BLOCKSIZE]; - int i; - - ictx = &ctx->ictx; - - memcpy(tkey, key, keylen); - - if (keylen > SHA_BLOCKSIZE) { - SHA1_CTX tctx; - - SHA1_init(&tctx); - SHA1_update(&tctx, key, keylen); - SHA1_final(&tctx, tkey); - keylen = SHA_DIGESTSIZE; - } - - SHA1_init(ictx); - - memset(pad, 0x36, SHA_BLOCKSIZE); - memset(ctx->pad, 0x5C, SHA_BLOCKSIZE); - - for (i = 0; i < keylen; i++) { - pad[i] ^= tkey[i]; - ctx->pad[i] ^= tkey[i]; - } - - SHA1_update(ictx, pad, SHA_BLOCKSIZE); -} - -void HMAC_SHA1_update(HMAC_SHA1_CTX *ctx, const uint8_t *buf, size_t len) -{ - SHA1_update(&ctx->ictx, buf, len); -} - -void HMAC_SHA1_final(HMAC_SHA1_CTX *ctx, uint8_t *digest) -{ - SHA1_CTX octx; - uint8_t idigest[20]; - - SHA1_final(&ctx->ictx, idigest); - - SHA1_init(&octx); - SHA1_update(&octx, ctx->pad, SHA_BLOCKSIZE); - SHA1_update(&octx, idigest, SHA_DIGESTSIZE); - SHA1_final(&octx, digest); -} - -/* This function provides maximum of 20 random bytes. Bytes are - * calculated as follows: HMAC-SHA1(key=random(), msg=random()). - */ -int random_bytes(uint8_t *buffer, int num) -{ - long int key, msg; - uint8_t bytes[20]; - HMAC_SHA1_CTX ctx; - - if (num < 1) return -1; - - key = random(); - msg = random(); - HMAC_SHA1_init(&ctx, (uint8_t *)&key, sizeof(key)); - HMAC_SHA1_update(&ctx, (uint8_t *)&msg, sizeof(msg)); - HMAC_SHA1_final(&ctx, bytes); - memcpy(buffer, bytes, num > 20 ? 20 : num); - - return 0; -} diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/src/crypto.h b/openair3/PMIPv6/pmipv6-daemon-umip/src/crypto.h deleted file mode 100755 index 1e0b04731c..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/src/crypto.h +++ /dev/null @@ -1,35 +0,0 @@ -/* $Id: crypto.h 1.1 06/02/23 17:26:41+02:00 anttit@tcs.hut.fi $ */ - -#ifndef __CRYPTO_H__ -#define __CRYPTO_H__ 1 - -#define SHA_DIGESTSIZE 20 -#define SHA_BLOCKSIZE 64 - -typedef struct { - uint32_t h0,h1,h2,h3,h4; - uint32_t nblocks; - uint8_t buf[SHA_BLOCKSIZE]; - int count; -} SHA1_CTX; - -typedef struct { - SHA1_CTX ictx; - uint8_t pad[SHA_BLOCKSIZE]; -} HMAC_SHA1_CTX; - -void SHA1_init(SHA1_CTX *ctx); - -void SHA1_update(SHA1_CTX *ctx, const uint8_t *buf, size_t len); - -void SHA1_final(SHA1_CTX *ctx, uint8_t *digest); - -void HMAC_SHA1_init(HMAC_SHA1_CTX *ctx, const uint8_t *key, size_t keylen); - -void HMAC_SHA1_update(HMAC_SHA1_CTX *ctx, const uint8_t *buf, size_t len); - -void HMAC_SHA1_final(HMAC_SHA1_CTX *ctx, uint8_t *digest); - -int random_bytes(uint8_t *buffer, int num); - -#endif diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/src/debug.c b/openair3/PMIPv6/pmipv6-daemon-umip/src/debug.c deleted file mode 100755 index 2f2ab147bf..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/src/debug.c +++ /dev/null @@ -1,146 +0,0 @@ -/* - * $Id: debug.c 1.23 06/05/07 21:52:42+03:00 anttit@tcs.hut.fi $ - * - * This file is part of the MIPL Mobile IPv6 for Linux. - * - * Author: Antti Tuominen - * - * Copyright 2003-2005 Go-Core Project - * Copyright 2003-2006 Helsinki University of Technology - * - * MIPL Mobile IPv6 for Linux is free software; you can redistribute - * it and/or modify it under the terms of the GNU General Public - * License as published by the Free Software Foundation; version 2 of - * the License. - * - * MIPL Mobile IPv6 for Linux is distributed in the hope that it will - * be useful, but WITHOUT ANY WARRANTY; without even the implied - * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with MIPL Mobile IPv6 for Linux; if not, write to the Free - * Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - * 02111-1307 USA - */ - -#include -#include -#include -#include -#include -#include -#include - -#include "debug.h" - -static FILE *sdbg; - -static const char *dbg_strdate(char *str) -{ - struct timespec ts; - time_t t; - int ret; - - memset(&ts, 0, sizeof(ts)); - - ret = clock_gettime(CLOCK_REALTIME, &ts); - - if (ret != 0) - sprintf(str, "(clock_gettime error=%d)", errno); - else { - t = (time_t)ts.tv_sec; /* XXX: fix it! */ - - if (t == 0) { - strcpy(str, "(undefined)"); - } else { - char buf[1024]; - sprintf(str, "%.19s", - (ctime_r(&t, buf) ? buf : "(ctime_r error)")); - } - } - - return str; -} - -void dbgprint(const char *fname, const char *fmt, ...) -{ - char s[1024]; - char stime[1024]; - va_list args; - - va_start(args, fmt); - vsprintf(s, fmt, args); - va_end(args); - - memset(stime, '\0', sizeof(stime)); - fprintf(sdbg, "%s ", dbg_strdate(stime)); - - if (fname) - fprintf(sdbg, "%s: ", fname); - - fprintf(sdbg, "%s", s); - fflush(sdbg); -} - -void debug_print_buffer(const void *data, int len, const char *fname, - const char *fmt, ...) -{ - int i; - char s[1024]; - va_list args; - - va_start(args, fmt); - vsprintf(s, fmt, args); - fprintf(sdbg, "%s: %s", fname, s); - va_end(args); - - for (i = 0; i < len; i++) { - if (i % 16 == 0) fprintf(sdbg, "\n%04x: ", i); - - fprintf(sdbg, "%02x ", ((unsigned char *)data)[i]); - } - - fprintf(sdbg, "\n\n"); - fflush(sdbg); -} - -void debug_print_func(void *arg, void (*func)(void *arg, void *stream)) -{ - func(arg, sdbg); - fflush(sdbg); -} - -int debug_open(const char *path) -{ - FILE *fp; - - if (!path) - return -EINVAL; - - if (sdbg && sdbg != stderr) - return -EALREADY; - - fp = fopen(path, "a"); - - if (!fp) - return -errno; - - sdbg = fp; - - return 0; -} - -void debug_close(void) -{ - if (sdbg && sdbg != stderr) - fclose(sdbg); - - debug_init(); -} - -void debug_init(void) -{ - sdbg = stderr; -} - diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/src/debug.h b/openair3/PMIPv6/pmipv6-daemon-umip/src/debug.h deleted file mode 100755 index 605c738df3..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/src/debug.h +++ /dev/null @@ -1,129 +0,0 @@ -/* $Id: debug.h 1.12 06/05/07 21:52:42+03:00 anttit@tcs.hut.fi $ */ - -#ifndef __DEBUG_H__ -#define __DEBUG_H__ 1 - -#include - -#ifdef MIP6_NDEBUG -#define NDEBUG 1 -#define dbg(...) -#define cdbg(...) -#define dbg_buf(...) -#define dbg_func(arg, func) -#define BUG(x) -#define pthread_dbg(x) -#define TRACE -static inline int debug_open(const char *path) -{ - return 0; -} -static inline void debug_close(void) {} -static inline void debug_init(void) {} -#else -#define dbg(...) dbgprint(__FUNCTION__, __VA_ARGS__) -#define cdbg(...) dbgprint(NULL, __VA_ARGS__) -#define dbg_buf(data, len, ...) \ - debug_print_buffer(data, len, __FUNCTION__, __VA_ARGS__) -#define dbg_func(arg, func) debug_print_func(arg, func) - -#define BUG(x) dbgprint("BUG", "%s %d %s\n", __FUNCTION__, __LINE__, x) -#define TRACE dbgprint(__FUNCTION__, "%d\n", __LINE__) - -void dbgprint(const char *fname, const char *fmt, ...); - -void debug_print_buffer(const void *data, int len, const char *fname, - const char *fmt, ...); -void debug_print_func(void *arg, void (*func)(void *arg, void *stream)); - -int debug_open(const char *path); -void debug_close(void); -void debug_init(void); - -#ifndef DEBUG_LOCKING - -#define pthread_dbg(x) - -#else - -#define pthread_dbg(x) dbgprint(__FUNCTION__, "[%x] %s\n", pthread_self(), x) - -#define pthread_mutex_lock(x)\ -do {\ - dbg("[%x] pthread_mutex_lock(" #x ")\n", pthread_self());\ - pthread_mutex_lock(x);\ -} while(0) - -#define pthread_mutex_unlock(x)\ -do {\ - pthread_mutex_unlock(x);\ - dbg("[%x] pthread_mutex_unlock(" #x ")\n", pthread_self());\ -} while(0) - -#define pthread_rwlock_rdlock(x)\ -do {\ - dbg("[%x] pthread_rwlock_rdlock(" #x ")\n", pthread_self());\ - pthread_rwlock_rdlock(x);\ -} while(0) - -#define pthread_rwlock_wrlock(x)\ -do {\ - dbg("[%x] pthread_rwlock_wrlock(" #x ")\n", pthread_self());\ - pthread_rwlock_wrlock(x);\ -} while(0) - -#define pthread_rwlock_unlock(x)\ -do {\ - pthread_rwlock_unlock(x);\ - dbg("[%x] pthread_rwlock_unlock(" #x ")\n", pthread_self());\ -} while(0) - -#define pthread_join(x, y)\ -do {\ - dbg("[%x] pthread_join([%x], " #y ")\n", pthread_self(), x);\ - pthread_join(x, y);\ -} while(0) - -#define pthread_cancel(x)\ -do {\ - dbg("[%x] pthread_cancel([%x])\n", pthread_self(), x);\ - pthread_cancel(x);\ -} while(0) - -#define pthread_cond_signal(x)\ -do {\ - dbg("[%x] pthread_cond_signal(" #x ")\n", pthread_self());\ - pthread_cond_signal(x);\ -} while(0) - -#define pthread_cond_wait(x, y)\ -do {\ - dbg("[%x] entering pthread_cond_wait(" #x ", " #y ")\n",\ - pthread_self());\ - pthread_cond_wait(x, y);\ - dbg("[%x] exiting pthread_cond_wait(" #x ", " #y ")\n",\ - pthread_self());\ -} while(0) - -#define pthread_cond_timedwait(x, y, z)\ -do {\ - dbg("[%x] entering pthread_cond_timedwait(" #x ", " #y ", " #z ")\n",\ - pthread_self());\ - pthread_cond_timedwait(x, y, z);\ - dbg("[%x] exiting pthread_cond_timedwait(" #x ", " #y ", " #z ")\n",\ - pthread_self());\ -} while(0) - -#define pthread_exit(x)\ -do {\ - dbg("[%x] pthread_exit(" #x ")\n", pthread_self());\ - pthread_exit(x);\ -} while(0) - -#endif /* DEBUG_LOCKING */ - -#endif /* MIP6_DEBUG */ - -#include - -#endif /* __DEBUG_H__ */ diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/src/dhaad_ha.c b/openair3/PMIPv6/pmipv6-daemon-umip/src/dhaad_ha.c deleted file mode 100755 index 14f3a58b39..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/src/dhaad_ha.c +++ /dev/null @@ -1,228 +0,0 @@ -/* - * $Id: dhaad_ha.c 1.14 06/05/07 21:52:42+03:00 anttit@tcs.hut.fi $ - * - * This file is part of the MIPL Mobile IPv6 for Linux. - * - * Authors: Antti Tuominen - * Ville Nuorvala - * - * Copyright 2003-2005 Go-Core Project - * Copyright 2003-2006 Helsinki University of Technology - * - * MIPL Mobile IPv6 for Linux is free software; you can redistribute - * it and/or modify it under the terms of the GNU General Public - * License as published by the Free Software Foundation; version 2 of - * the License. - * - * MIPL Mobile IPv6 for Linux is distributed in the hope that it will - * be useful, but WITHOUT ANY WARRANTY; without even the implied - * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with MIPL Mobile IPv6 for Linux; if not, write to the Free - * Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - * 02111-1307 USA. - */ - -#ifdef HAVE_CONFIG_H -#include -#endif -#include -#include -#include -#include -#include - -#include "icmp6.h" -#include "dhaad_ha.h" -#include "ha.h" -#include "debug.h" -#include "statistics.h" - -static pthread_rwlock_t ha_lock; - -/********************************************************* - * Home Agent functions - *********************************************************/ - -#ifdef ENABLE_VT -/** - * dhaad_halist_iterate - apply function to every home agent list entry - * @func: function to apply - * @arg: extra data for @func - **/ -void dhaad_halist_iterate(struct ha_interface *iface, - int (* func)(int, void *, void *), void *arg) -{ - struct list_head *lp; - - list_for_each(lp, &iface->ha_list) { - struct home_agent *h; - int ret; - - h = list_entry(lp, struct home_agent, list); - - pthread_rwlock_rdlock(&ha_lock); - ret = func(iface->ifindex, h, arg); - pthread_rwlock_unlock(&ha_lock); - - if (ret) - break; - } -} -#endif - -static void dhaad_expire_halist(struct tq_elem *tqe) -{ - pthread_rwlock_wrlock(&ha_lock); - - if (!task_interrupted()) { - struct home_agent *ha = tq_data(tqe, struct home_agent, tqe); - list_del(&ha->list); - free(ha); - } - - pthread_rwlock_unlock(&ha_lock); -} - -void dhaad_insert_halist(struct ha_interface *i, uint16_t key, - uint16_t life_sec, uint16_t flags, - struct nd_opt_prefix_info *pinfo) -{ - struct home_agent *ha = NULL, *tmp; - struct list_head *lp; - struct in6_addr *addr = &pinfo->nd_opt_pi_prefix; - - pthread_rwlock_wrlock(&ha_lock); - - list_for_each(lp, &i->ha_list) { - tmp = list_entry(lp, struct home_agent, list); - - if (!IN6_ARE_ADDR_EQUAL(&tmp->addr, addr)) - continue; - - ha = tmp; - list_del(&ha->list); - break; - } - - if (ha == NULL) { - /* allocate new HAL entry */ - ha = malloc(sizeof(*ha)); - - if (ha == NULL) { - pthread_rwlock_unlock(&ha_lock); - return; - } - - memset(ha, 0, sizeof(*ha)); - ha->flags = flags; - ha->iface = i; - ha->addr = *addr; - INIT_LIST_HEAD(&ha->tqe.list); - } - - ha->preference = key; - tssetsec(ha->lifetime, life_sec); - - /* insert ha entry to the HAL */ - list_for_each(lp, &i->ha_list) { - tmp = list_entry(lp, struct home_agent, list); - - if (key >= tmp->preference) { - list_add_tail(&ha->list, &tmp->list); - add_task_rel(&ha->lifetime, &ha->tqe, - dhaad_expire_halist); - pthread_rwlock_unlock(&ha_lock); - return; - } - } - list_add_tail(&ha->list, &i->ha_list); - add_task_rel(&ha->lifetime, &ha->tqe, dhaad_expire_halist); - - pthread_rwlock_unlock(&ha_lock); - return; -} - -static int dhaad_get_halist(struct ha_interface *i, uint16_t flags, - int max, struct iovec *iov) -{ - struct list_head *lp; - int n = 0; - list_for_each(lp, &i->ha_list) { - struct home_agent *h; - h = list_entry(lp, struct home_agent, list); - - if (!(flags & MIP_DHREQ_FLAG_SUPPORT_MR) || - h->flags & ND_OPT_HAI_FLAG_SUPPORT_MR) { - n++; - iov[n].iov_len = sizeof(struct in6_addr); - iov[n].iov_base = &h->addr; - - if (n >= max) - break; - } - } - return n; -} - -static void dhaad_recv_req(const struct icmp6_hdr *ih, ssize_t len, - const struct in6_addr *src, - const struct in6_addr *dst, - __attribute__ ((unused)) int iif, - __attribute__ ((unused)) int hoplimit) -{ - struct mip_dhaad_req *rqh = (struct mip_dhaad_req *)ih; - struct mip_dhaad_rep *rph; - struct iovec iov[MAX_HOME_AGENTS + 1]; - int iovlen; - struct ha_interface *i; - struct in6_addr *ha_addr = NULL; - - statistics_inc(&mipl_stat, MIPL_STATISTICS_IN_DHAAD_REQ); - - /* validity check */ - if (len < 0 || (size_t)len < sizeof(struct mip_dhaad_req)) - return; - - if ((i = ha_get_if_by_anycast(dst, &ha_addr)) == NULL) { - dbg("no halist for anycast address %x:%x:%x:%x:%x:%x:%x:%x\n", - NIP6ADDR(dst)); - return; - } - - if ((rph = icmp6_create(iov, MIP_HA_DISCOVERY_REPLY, 0)) == NULL) - return; - - rph->mip_dhrep_id = rqh->mip_dhreq_id; - - if (rqh->mip_dhreq_flags_reserved & MIP_DHREQ_FLAG_SUPPORT_MR) - rph->mip_dhrep_flags_reserved = MIP_DHREP_FLAG_SUPPORT_MR; - - pthread_rwlock_rdlock(&ha_lock); - iovlen = dhaad_get_halist(i, rqh->mip_dhreq_flags_reserved, - MAX_HOME_AGENTS, iov); - icmp6_send(i->ifindex, 64, ha_addr, src, iov, iovlen + 1); - pthread_rwlock_unlock(&ha_lock); - free_iov_data(&iov[0], 1); - statistics_inc(&mipl_stat, MIPL_STATISTICS_OUT_DHAAD_REP); -} - -static struct icmp6_handler dhaad_req_handler = { - .recv = dhaad_recv_req, -}; - -int dhaad_ha_init(void) -{ - if (pthread_rwlock_init(&ha_lock, NULL)) - return -1; - - icmp6_handler_reg(MIP_HA_DISCOVERY_REQUEST, &dhaad_req_handler); - return 0; -} - -void dhaad_ha_cleanup(void) -{ - icmp6_handler_dereg(MIP_HA_DISCOVERY_REQUEST, &dhaad_req_handler); -} diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/src/dhaad_ha.h b/openair3/PMIPv6/pmipv6-daemon-umip/src/dhaad_ha.h deleted file mode 100755 index b2a0aadd7e..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/src/dhaad_ha.h +++ /dev/null @@ -1,27 +0,0 @@ -/* $Id: dhaad_ha.h 1.3 05/12/08 19:42:43+02:00 vnuorval@tcs.hut.fi $ */ - -#ifndef __DHAAD_HA_H__ -#define __DHAAD_HA_H__ 1 - -#define MAX_HOME_AGENTS 77 - -struct icmp6_hdr; - -/* Home Agent functions */ - -struct ha_interface; -struct nd_opt_prefix_info; - -#ifdef ENABLE_VT -void dhaad_halist_iterate(struct ha_interface *iface, - int (* func)(int, void *, void *), void *arg); -#endif - -void dhaad_insert_halist(struct ha_interface *i, uint16_t key, - uint16_t life_sec, uint16_t flags, - struct nd_opt_prefix_info *pinfo); - -int dhaad_ha_init(void); -void dhaad_ha_cleanup(void); - -#endif diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/src/dhaad_mn.c b/openair3/PMIPv6/pmipv6-daemon-umip/src/dhaad_mn.c deleted file mode 100755 index e88f2bcd06..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/src/dhaad_mn.c +++ /dev/null @@ -1,323 +0,0 @@ -/* - * $Id: dhaad_mn.c 1.21 06/05/15 12:03:38+03:00 vnuorval@tcs.hut.fi $ - * - * This file is part of the MIPL Mobile IPv6 for Linux. - * - * Authors: Ville Nuorvala , - * Antti Tuominen - * - * Copyright 2003-2005 Go-Core Project - * Copyright 2003-2006 Helsinki University of Technology - * - * MIPL Mobile IPv6 for Linux is free software; you can redistribute - * it and/or modify it under the terms of the GNU General Public - * License as published by the Free Software Foundation; version 2 of - * the License. - * - * MIPL Mobile IPv6 for Linux is distributed in the hope that it will - * be useful, but WITHOUT ANY WARRANTY; without even the implied - * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with MIPL Mobile IPv6 for Linux; if not, write to the Free - * Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - * 02111-1307 USA. - */ - -#ifdef HAVE_CONFIG_H -#include -#endif -#include -#include -#include -#include -#include - -#include "mipv6.h" -#include "icmp6.h" -#include "dhaad_mn.h" -#include "movement.h" -#include "mn.h" -#include "debug.h" -#include "xfrm.h" -#include "statistics.h" - -/********************************************************* - * Mobile Node functions - *********************************************************/ - -static volatile uint16_t dhaad_id; - -static int dhaad_flush_candidates(struct ha_candidate_list *t) -{ - - struct list_head *l, *n; - - pthread_mutex_lock(&t->c_lock); - - /* DHAAD Reply received, flush old candidates */ - /* Delete all entries from lh */ - - list_for_each_safe(l, n, &t->home_agents) { - list_del(l); - free(list_entry(l, struct ha_candidate, list)); - } - pthread_mutex_unlock(&t->c_lock); - return 0; -} - -static int dhaad_append_candidate(struct ha_candidate_list *t, - struct in6_addr *ha) -{ - - struct ha_candidate *new; - new = malloc(sizeof(struct ha_candidate)); - - if (new == NULL) - return -ENOMEM; - - new->retry = 0; - new->addr = *ha; - - /* Append new candidate from a DHAAD Reply */ - pthread_mutex_lock(&t->c_lock); - list_add_tail(&new->list, &t->home_agents); - pthread_mutex_unlock(&t->c_lock); - - return 0; -} - -static int dhaad_send_request(int oif, struct in6_addr *src, - struct in6_addr *pfx, int plen, - uint16_t flags) -{ - struct mip_dhaad_req *ih; - struct iovec iov; - struct in6_addr dst; - uint16_t id; - - /* Send DHAAD Request */ - if ((ih = icmp6_create(&iov, MIP_HA_DISCOVERY_REQUEST, 0)) == NULL) - return -1; - - id = dhaad_id++; - ih->mip_dhreq_id = htons(id); - ih->mip_dhreq_flags_reserved = flags; - dhaad_gen_ha_anycast(&dst, pfx, plen); - icmp6_send(oif, 0, src, &dst, &iov, 1); - free_iov_data(&iov, 1); - statistics_inc(&mipl_stat, MIPL_STATISTICS_OUT_DHAAD_REQ); - return id; -} - -static void dhaad_resend(struct tq_elem *tqe) -{ - pthread_rwlock_rdlock(&mn_lock); - - if (!task_interrupted()) { - struct home_addr_info *hai; - struct ha_candidate_list *t; - hai = tq_data(tqe, struct home_addr_info, ha_list.tqe); - t = &hai->ha_list; - pthread_mutex_lock(&t->c_lock); - - if (t->dhaad_resends == DHAAD_RETRIES) { - pthread_mutex_unlock(&t->c_lock); - pthread_rwlock_unlock(&mn_lock); - return; - } - - t->dhaad_id = dhaad_send_request(hai->primary_coa.iif, - &hai->primary_coa.addr, - &hai->home_prefix, - hai->home_plen, - hai->mob_rtr? - MIP_DHREQ_FLAG_SUPPORT_MR:0); - t->dhaad_resends++; - tsadd(t->dhaad_delay, t->dhaad_delay, t->dhaad_delay); - add_task_rel(&t->dhaad_delay, &t->tqe, dhaad_resend); - pthread_mutex_unlock(&t->c_lock); - } - - pthread_rwlock_unlock(&mn_lock); -} - -static void _dhaad_start(struct home_addr_info *hai, int force) -{ - struct ha_candidate_list *t = &hai->ha_list; - - if (force || - (movement_ho_verdict(hai->verdict) && - (!tsisset(t->dhaad_delay) || - t->dhaad_resends == DHAAD_RETRIES))) { - if (!(hai->home_block & HOME_ADDR_BLOCK)) - xfrm_block_hoa(hai); - - if (hai->mob_rtr && !(hai->home_block & NEMO_RA_BLOCK)) - xfrm_block_ra(hai); - - t->dhaad_resends = 0; - t->dhaad_id = dhaad_send_request(hai->primary_coa.iif, - &hai->primary_coa.addr, - &hai->home_prefix, - hai->home_plen, - hai->mob_rtr? - MIP_DHREQ_FLAG_SUPPORT_MR:0); - t->dhaad_delay = INITIAL_DHAAD_TIMEOUT_TS; - add_task_rel(&t->dhaad_delay, &t->tqe, dhaad_resend); - } -} - -void dhaad_start(struct home_addr_info *hai) -{ - struct ha_candidate_list *t = &hai->ha_list; - pthread_mutex_lock(&t->c_lock); - _dhaad_start(hai, 0); - pthread_mutex_unlock(&t->c_lock); -} - -static void _dhaad_stop(struct home_addr_info *hai) -{ - struct ha_candidate_list *t = &hai->ha_list; - t->dhaad_id = -1; - t->dhaad_resends = 0; - tsclear(t->dhaad_delay); - - if (hai->home_block & HOME_ADDR_BLOCK) - xfrm_unblock_hoa(hai); - - if (hai->home_block & NEMO_RA_BLOCK) - xfrm_unblock_ra(hai); -} - -void dhaad_stop(struct home_addr_info *hai) -{ - struct ha_candidate_list *t = &hai->ha_list; - pthread_mutex_lock(&t->c_lock); - - if (tsisset(t->dhaad_delay)) { - del_task(&t->tqe); - _dhaad_stop(hai); - } - - t->last_ha = in6addr_any; - pthread_mutex_unlock(&t->c_lock); -} - -static int _dhaad_next_candidate(struct home_addr_info *hai, - struct ha_candidate_list *t) -{ - struct list_head *l, *n; - list_for_each_safe(l, n, &t->home_agents) { - struct ha_candidate *c; - c = list_entry(l, struct ha_candidate, list); - hai->ha_addr = c->addr; - list_del(&c->list); - free(c); - - if (IN6_IS_ADDR_UNSPECIFIED(&t->last_ha) || - !IN6_ARE_ADDR_EQUAL(&t->last_ha, &hai->ha_addr)) - return 0; - } - hai->ha_addr = in6addr_any; - return -ENOENT; -} - -int dhaad_next_candidate(struct home_addr_info *hai) -{ - int err; - struct ha_candidate_list *t = &hai->ha_list; - pthread_mutex_lock(&t->c_lock); - err = _dhaad_next_candidate(hai, t); - pthread_mutex_unlock(&t->c_lock); - return err; -} - -int dhaad_home_reg_failed(struct home_addr_info *hai) -{ - struct ha_candidate_list *t = &hai->ha_list; - int err; - pthread_mutex_lock(&t->c_lock); - t->last_ha = hai->ha_addr; - - if ((err = _dhaad_next_candidate(hai, t)) < 0) { - _dhaad_start(hai, 1); - err = -EAGAIN; - } - - pthread_mutex_unlock(&t->c_lock); - return err; -} - -static void dhaad_recv_rep(const struct icmp6_hdr *ih, ssize_t len, - __attribute__ ((unused)) const struct in6_addr *src, - __attribute__ ((unused)) const struct in6_addr *dst, - int iif, - __attribute__ ((unused)) int hoplimit) -{ - struct mip_dhaad_rep *rph = (struct mip_dhaad_rep *)ih; - int i; - struct in6_addr *ha; - struct home_addr_info *hai; - int ulen = len - sizeof(struct icmp6_hdr); - int n_addr = ulen >> 4; - uint16_t id; - - statistics_inc(&mipl_stat, MIPL_STATISTICS_IN_DHAAD_REP); - - /* Check packet validity */ - if (ulen % sizeof(struct in6_addr) || rph->mip_dhrep_code) - return; - - id = ntohs(rph->mip_dhrep_id); - - pthread_rwlock_wrlock(&mn_lock); - - if ((hai = mn_get_home_addr_by_dhaadid(id)) == NULL) { - dbg("No matching request for dhaad reply\n"); - pthread_rwlock_unlock(&mn_lock); - return; - } - - if (hai->mob_rtr && - !(rph->mip_dhrep_flags_reserved & MIP_DHREP_FLAG_SUPPORT_MR)) { - dbg("HA doesn't support MR\n"); - pthread_rwlock_unlock(&mn_lock); - return; - } - - ha = (struct in6_addr *)(ih + 1); - - dhaad_flush_candidates(&hai->ha_list); - - for (i = 0; i < n_addr; i++) { - dhaad_append_candidate(&hai->ha_list, ha); - ha++; - } - - if (dhaad_next_candidate(hai) < 0) { - dbg("No valid HAs\n"); - pthread_rwlock_unlock(&mn_lock); - return; - } - - pthread_rwlock_unlock(&mn_lock); - /* Trigger BU in MN if DHAAD reply contained any HAs */ - md_trigger_movement_event(ME_DHAAD, id, iif); - return; -} - -static struct icmp6_handler dhaad_rep_handler = { - .recv = dhaad_recv_rep, -}; - -void dhaad_mn_init(void) -{ - icmp6_handler_reg(MIP_HA_DISCOVERY_REPLY, &dhaad_rep_handler); -} - -void dhaad_mn_cleanup(void) -{ - icmp6_handler_dereg(MIP_HA_DISCOVERY_REPLY, &dhaad_rep_handler); -} diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/src/dhaad_mn.h b/openair3/PMIPv6/pmipv6-daemon-umip/src/dhaad_mn.h deleted file mode 100755 index 92970813a9..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/src/dhaad_mn.h +++ /dev/null @@ -1,29 +0,0 @@ -/* $Id: dhaad_mn.h 1.5 06/05/15 12:03:38+03:00 vnuorval@tcs.hut.fi $ */ - -#ifndef __DHAAD_MN_H__ -#define __DHAAD_MN_H__ 1 - -#include "list.h" - -struct ha_candidate { - struct list_head list; - struct in6_addr addr; - int retry; -}; - -struct icmp6_hdr; - -/* Mobile Node functions */ -struct home_addr_info; - -void dhaad_start(struct home_addr_info *hai); -void dhaad_stop(struct home_addr_info *hai); - -int dhaad_next_candidate(struct home_addr_info *hai); - -int dhaad_home_reg_failed(struct home_addr_info *hai); - -void dhaad_mn_init(void); -void dhaad_mn_cleanup(void); - -#endif diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/src/gram.y b/openair3/PMIPv6/pmipv6-daemon-umip/src/gram.y deleted file mode 100755 index aeb3592e85..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/src/gram.y +++ /dev/null @@ -1,1072 +0,0 @@ -/* - * $Id: gram.y 1.88 06/05/12 11:48:36+03:00 vnuorval@tcs.hut.fi $ - * - * This file is part of the MIPL Mobile IPv6 for Linux. - * - * Authors: Antti Tuominen - * Ville Nuorvala - * - * Copyright 2003-2005 Go-Core Project - * Copyright 2003-2006 Helsinki University of Technology - * - * MIPL Mobile IPv6 for Linux is free software; you can redistribute - * it and/or modify it under the terms of the GNU General Public - * License as published by the Free Software Foundation; version 2 of - * the License. - * - * MIPL Mobile IPv6 for Linux is distributed in the hope that it will - * be useful, but WITHOUT ANY WARRANTY; without even the implied - * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with MIPL Mobile IPv6 for Linux; if not, write to the Free - * Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - * 02111-1307 USA - */ - -%{ - -#ifdef HAVE_CONFIG_H -#include -#endif -#include -#include -#include -#include -#include -#include -#include -#include "mipv6.h" -#include "ha.h" -#include "mn.h" -#include "conf.h" -#include "policy.h" -#include "xfrm.h" -#include "prefix.h" -#include "util.h" -#include "ipsec.h" -#include "rtnl.h" - -struct net_iface ni = { - .mip6_if_entity = MIP6_ENTITY_NO, - .mn_if_preference = POL_MN_IF_DEF_PREFERENCE, - .is_tunnel = 0, -}; - -struct home_addr_info hai = { - .ro_policies = LIST_HEAD_INIT(hai.ro_policies), - .mob_net_prefixes = LIST_HEAD_INIT(hai.mob_net_prefixes) -}; - -LIST_HEAD(prefixes); - -int mv_prefixes(struct list_head *list) -{ - struct list_head *l, *n; - int res = 0; - list_for_each_safe(l, n, &prefixes) { - list_del(l); - list_add_tail(l, list); - res++; - } - return res; -} - -struct policy_bind_acl_entry *bae = NULL; - -struct ipsec_policy_set { - struct in6_addr ha; - struct list_head hoa_list; -}; - -struct ipsec_policy_set ipsec_ps = { - .hoa_list = LIST_HEAD_INIT(ipsec_ps.hoa_list) -}; - -extern int lineno; -extern char *yytext; -extern char *incl_file; /* If not NULL, name of included file being parsed. - * If NULL, we are in main configuration file */ - -static void yyerror(char *s) { - fprintf(stderr, "Error in configuration file %s ", - incl_file ? incl_file : conf.config_file); - fprintf(stderr, "at line %d: %s at '%s'\n", lineno, s, yytext); -} - -static void uerror(const char *fmt, ...) { - char s[1024]; - va_list args; - - fprintf(stderr, "Error in configuration file %s ", - incl_file ? incl_file : conf.config_file); - va_start(args, fmt); - vsprintf(s, fmt, args); - fprintf(stderr, "at line %d: %s\n", lineno, s); - va_end(args); -} - -%} - -%union { - char *string; - struct in6_addr addr; - struct in6_addr macaddr; - char bool; - unsigned int num; - unsigned int numpair[2]; - double dec; -} - -%token QSTRING -%token ADDR -%token MACADDR -%token BOOL -%token NUMBER -%token DECIMAL -%token NUMPAIR; - -%token MIP6ENTITY -%token DEBUGLEVEL -%token DEBUGLOGFILE -%token DOROUTEOPTIMIZATIONCN -%token DOROUTEOPTIMIZATIONMN -%token HOMEADDRESS -%token HOMEAGENTADDRESS -%token INITIALBINDACKTIMEOUTFIRSTREG -%token INITIALBINDACKTIMEOUTREREG -%token LINKNAME -%token HAMAXBINDINGLIFE -%token MNMAXHABINDINGLIFE -%token MNMAXCNBINDINGLIFE -%token MAXMOBPFXADVINTERVAL -%token MINMOBPFXADVINTERVAL -%token MNHOMELINK -%token HAHOMELINK -%token NONVOLATILEBINDINGCACHE -%token SENDMOBPFXSOLS -%token SENDUNSOLMOBPFXADVS -%token SENDMOBPFXADVS -%token IPSECPOLICYSET -%token IPSECPOLICY -%token IPSECTYPE -%token USEALTCOA -%token USEESP -%token USEAH -%token USEIPCOMP -%token BLOCK -%token USEMNHAIPSEC -%token KEYMNGMOBCAPABILITY -%token HOMEREGBINDING -%token MH -%token MOBPFXDISC -%token TUNNELHOMETESTING -%token TUNNELMH -%token TUNNELPAYLOAD -%token USEMOVEMENTMODULE -%token USEPOLICYMODULE -%token MIP6CN -%token MIP6MN -%token MIP6HA -%token INTERNAL -%token MNROPOLICY -%token ICMP -%token ANY -%token DOROUTEOPT -%token DEFAULTBINDINGACLPOLICY -%token BINDINGACLPOLICY -%token MNADDRESS -%token USECNBUACK -%token INTERFACE -%token IFNAME -%token IFTYPE -%token MNIFPREFERENCE -%token ISTUNNEL -%token MNUSEALLINTERFACES -%token MNROUTERPROBES -%token MNROUTERPROBETIMEOUT -%token MNDISCARDHAPARAMPROB -%token OPTIMISTICHANDOFF -%token HOMEPREFIX -%token HAACCEPTMOBRTR -%token ISMOBRTR -%token HASERVEDPREFIX -%token MOBRTRUSEEXPLICITMODE -/* PMIP CONF ELEMENTS */ -%token RFC5213TIMESTAMPBASEDAPPROACHINUSE; -%token RFC5213MOBILENODEGENERATEDTIMESTAMPINUSE; -%token RFC5213FIXEDMAGLINKLOCALADDRESSONALLACCESSLINKS; -%token RFC5213FIXEDMAGLINKLAYERADDRESSONALLACCESSLINKS; -%token RFC5213MINDELAYBEFOREBCEDELETE; -%token RFC5213MAXDELAYBEFORENEWBCEASSIGN; -%token RFC5213TIMESTAMPVALIDITYWINDOW; -%token RFC5213ENABLEMAGLOCALROUTING -%token MIP6LMA -%token MIP6MAG -%token PROXYMIPLMA -%token PROXYMIPMAG -%token ALLLMAMULTICASTADDRESS -%token LMAPMIPNETWORKADDRESS -%token LMAPMIPNETWORKDEVICE -%token LMACORENETWORKADDRESS -%token LMACORENETWORKDEVICE -%token MAGADDRESSINGRESS -%token MAGADDRESSEGRESS -%token MAGDEVICEINGRESS -%token MAGDEVICEEGRESS -%token OURADDRESS -%token HOMENETWORKPREFIX -%token PBULIFETIME -%token PBALIFETIME -%token RETRANSMISSIONTIMEOUT -%token MAXMESSAGERETRANSMISSIONS -%token TUNNELINGENABLED -%token DYNAMICTUNNELINGENABLED -%token MAXDELAYBEFOREDYNAMICTUNNELINGDELETE -%token RADIUSPASSWORD -%token RADIUSCLIENTCONFIGFILE -%token PCAPSYSLOGASSOCIATIONGREPSTRING -%token PCAPSYSLOGDEASSOCIATIONGREPSTRING - -%token INV_TOKEN - -%type ipsectype -%type ipsectypeval -%type ipsecproto -%type ipsecprotos -%type ipsecreqid - -%type mnropolicyaddr -%type dorouteopt -%type bindaclpolval -%type prefixlen -%type mip6entity -%type xfrmaction - -%% - -grammar : topdef - | grammar topdef - ; - -topdef : MIP6ENTITY mip6entity ';' - { - conf.mip6_entity = $2; - } - | DEBUGLEVEL NUMBER ';' - { - conf.debug_level = $2; - } - | DEBUGLOGFILE QSTRING ';' - { - conf.debug_log_file = $2; - } - | NONVOLATILEBINDINGCACHE BOOL ';' - { - conf.NonVolatileBindingCache = $2; - } - | INTERFACE ifacedef - | SENDMOBPFXSOLS BOOL ';' - { - conf.SendMobPfxSols = $2; - } - | SENDUNSOLMOBPFXADVS BOOL ';' - { - conf.SendUnsolMobPfxAdvs = $2; - } - | SENDMOBPFXADVS BOOL ';' - { - conf.SendMobPfxAdvs = $2; - } - | MAXMOBPFXADVINTERVAL NUMBER ';' - { - conf.MaxMobPfxAdvInterval = $2; - } - | MINMOBPFXADVINTERVAL NUMBER ';' - { - conf.MinMobPfxAdvInterval = $2; - } - | DOROUTEOPTIMIZATIONCN BOOL ';' - { - conf.DoRouteOptimizationCN = $2; - } - | DOROUTEOPTIMIZATIONMN BOOL ';' - { - conf.DoRouteOptimizationMN = $2; - } - | HAMAXBINDINGLIFE NUMBER ';' - { - if ($2 > MAX_BINDING_LIFETIME) { - uerror("max allowed binding lifetime is %d", - MAX_BINDING_LIFETIME); - return -1; - } - conf.HaMaxBindingLife = $2; - } - | MNMAXHABINDINGLIFE NUMBER ';' - { - if ($2 > MAX_BINDING_LIFETIME) { - uerror("max allowed binding lifetime is %d", - MAX_BINDING_LIFETIME); - return -1; - } - conf.MnMaxHaBindingLife = $2; - } - | MNMAXCNBINDINGLIFE NUMBER ';' - { - if ($2 > MAX_RR_BINDING_LIFETIME) { - uerror("max allowed binding lifetime is %d", - MAX_RR_BINDING_LIFETIME); - return -1; - } - conf.MnMaxCnBindingLife = $2; - } - | INITIALBINDACKTIMEOUTFIRSTREG DECIMAL ';' - { - tssetdsec(conf.InitialBindackTimeoutFirstReg_ts, $2); - } - | INITIALBINDACKTIMEOUTREREG DECIMAL ';' - { - tssetdsec(conf.InitialBindackTimeoutReReg_ts, $2); - } - | MNHOMELINK linksub - | USEMNHAIPSEC BOOL ';' - { - conf.UseMnHaIPsec = $2; - } - | KEYMNGMOBCAPABILITY BOOL ';' - { - conf.KeyMngMobCapability = $2; - } - | USEMOVEMENTMODULE movemodule ';' - | USEPOLICYMODULE policymodule ';' - | DEFAULTBINDINGACLPOLICY bindaclpolval ';' - { - conf.DefaultBindingAclPolicy = $2; - } - | HAACCEPTMOBRTR BOOL ';' - { - conf.HaAcceptMobRtr = $2; - } - | HASERVEDPREFIX prefixlistentry ';' - { - list_splice(&prefixes, - conf.nemo_ha_served_prefixes.prev); - } - | MOBRTRUSEEXPLICITMODE BOOL ';' - { - conf.MobRtrUseExplicitMode = $2; - } - | BINDINGACLPOLICY bindaclpolicy ';' - { - bae = NULL; - } - | USECNBUACK BOOL ';' - { - conf.CnBuAck = $2 ? IP6_MH_BU_ACK : 0; - } - | IPSECPOLICYSET '{' ipsecpolicyset '}' - | MNUSEALLINTERFACES BOOL ';' - { - conf.MnUseAllInterfaces = $2 ? POL_MN_IF_DEF_PREFERENCE : 0; - } - | MNROUTERPROBES NUMBER ';' - { - conf.MnRouterProbes = $2; - } - | MNROUTERPROBETIMEOUT DECIMAL ';' - { - if ($2 > 0) - tssetdsec(conf.MnRouterProbeTimeout_ts, $2); - } - | MNDISCARDHAPARAMPROB BOOL ';' - { - conf.MnDiscardHaParamProb = $2; - } - | OPTIMISTICHANDOFF BOOL ';' - { - conf.OptimisticHandoff = $2; - } - | PROXYMIPLMA proxymiplmadef - | PROXYMIPMAG proxymipmagdef - ; - -mip6entity : MIP6CN { $$ = MIP6_ENTITY_CN; } - | MIP6MN { $$ = MIP6_ENTITY_MN; } - | MIP6HA { $$ = MIP6_ENTITY_HA; } - | MIP6MAG { $$ = MIP6_ENTITY_MAG; } - ; - -ifacedef : QSTRING ifacesub - { - struct net_iface *nni; - strncpy(ni.name, $1, IF_NAMESIZE - 1); - ni.ifindex = if_nametoindex($1); - - if (is_if_ha(&ni) && ni.is_tunnel) { - /* We do not allow tunnel interfaces - for HA, only for MN and CN */ - uerror("Use of tunnel interface is not" - " possible for HA yet"); - free($1); - return -1; - } - if (ni.ifindex <= 0) { - if (is_if_ha(&ni)) { - /* We do not allow unavailable - ifaces for HA ... */ - uerror("HA interface %s " - "unavailable", $1); - free($1); - return -1; - } - /* ... but allow them for CN and MN */ - } - free($1); - - nni = malloc(sizeof(struct net_iface)); - if (nni == NULL) { - uerror("out of memory"); - return -1; - } - memcpy(nni, &ni, sizeof(struct net_iface)); - list_add_tail(&nni->list, &conf.net_ifaces); - if (is_if_ha(nni)) - homeagent_if_init(nni->ifindex); - - memset(&ni, 0, sizeof(struct net_iface)); - ni.mip6_if_entity = MIP6_ENTITY_NO; - ni.mn_if_preference = POL_MN_IF_DEF_PREFERENCE; - } - ; - -ifacesub : '{' ifaceopts '}' - | ';' - ; - -ifaceopts : ifaceopt - | ifaceopts ifaceopt - ; - -ifaceopt : IFTYPE mip6entity ';' - { - ni.mip6_if_entity = $2; - } - | MNIFPREFERENCE NUMBER ';' - { - int pref = $2; - if ((pref > POL_MN_IF_MIN_PREFERENCE) || (pref < 0)) { - uerror("Found bad interface preference value " - "(%d). Valid range is [0,%d].\n", pref, - POL_MN_IF_MIN_PREFERENCE); - return -1; - } - ni.mn_if_preference = pref; - } - | ISTUNNEL BOOL ';' - { - ni.is_tunnel = $2; - } - ; - -linksub : QSTRING '{' linkdefs '}' - { - struct home_addr_info *nhai; - if (IN6_IS_ADDR_UNSPECIFIED(&hai.hoa.addr)) { - uerror("No home addresses defined" - "for homelink %d", hai.if_home); - return -1; - } - strncpy(hai.name, $1, IF_NAMESIZE - 1); - hai.if_home = if_nametoindex($1); - free($1); - if (hai.if_home <= 0) { - uerror("invalid interface"); - return -1; - } - nhai = malloc(sizeof(struct home_addr_info)); - if (nhai == NULL) { - uerror("out of memory"); - return -1; - } - if (hai.plen == 64) { - struct in6_addr lladdr; - ipv6_addr_llocal(&hai.hoa.addr, &lladdr); - if (!addr_do(&lladdr, 64, - hai.if_home, NULL, NULL)) - hai.lladdr_comp = IP6_MH_BU_LLOCAL; - } - if (IN6_IS_ADDR_UNSPECIFIED(&hai.home_prefix)) { - ipv6_addr_prefix(&hai.home_prefix, - &hai.hoa.addr, hai.plen); - hai.home_plen = hai.plen; - } - memcpy(nhai, &hai, sizeof(struct home_addr_info)); - INIT_LIST_HEAD(&nhai->ro_policies); - INIT_LIST_HEAD(&nhai->ha_list.home_agents); - INIT_LIST_HEAD(&nhai->mob_net_prefixes); - nhai->ha_list.dhaad_id = -1; - list_splice(&hai.ro_policies, &nhai->ro_policies); - list_splice(&hai.mob_net_prefixes, - &nhai->mob_net_prefixes); - list_add_tail(&nhai->list, &conf.home_addrs); - - memset(&hai, 0, sizeof(struct home_addr_info)); - INIT_LIST_HEAD(&hai.ro_policies); - INIT_LIST_HEAD(&hai.mob_net_prefixes); - } - ; - -linkdefs : linkdef - | linkdefs linkdef - ; - -linkdef : HOMEAGENTADDRESS ADDR ';' - { - memcpy(&hai.ha_addr, &$2, sizeof(struct in6_addr)); - } - | HOMEADDRESS homeaddress ';' - | USEALTCOA BOOL ';' - { - hai.altcoa = $2; - } - | MNROPOLICY mnropolicy ';' - | ISMOBRTR BOOL ';' - { - if ($2) - hai.mob_rtr = IP6_MH_BU_MR; - } - | HOMEPREFIX ADDR '/' prefixlen ';' - { - ipv6_addr_prefix(&hai.home_prefix, &$2, $4); - hai.home_plen = $4; - } - ; - -homeaddress : homeaddrdef prefixlistsub - { - hai.mnp_count = mv_prefixes(&hai.mob_net_prefixes); - } - ; - -homeaddrdef : ADDR '/' prefixlen - { - hai.hoa.addr = $1; - hai.plen = $3; - } - ; - -ipsecpolicyset : ipsechaaddrdef ipsecmnaddrdefs ipsecpolicydefs - { - if (!list_empty(&ipsec_ps.hoa_list)) { - struct list_head *lp, *tmp; - - /* free each hoa entry */ - list_for_each_safe(lp, tmp, - &ipsec_ps.hoa_list) { - struct home_addr_info *hoa; - - list_del(lp); - hoa = list_entry(lp, - struct home_addr_info, - list); - - free(hoa); - } - } - memset(&ipsec_ps, 0, sizeof(ipsec_ps)); - INIT_LIST_HEAD(&ipsec_ps.hoa_list); - } - ; - -ipsechaaddrdef : HOMEAGENTADDRESS ADDR ';' - { - ipsec_ps.ha = $2; - } - ; - -ipsecmnaddrdefs : ipsecmnaddrdef - | ipsecmnaddrdefs ipsecmnaddrdef - ; - -ipsecmnaddrdef : HOMEADDRESS ipsecmnaddr ';' - ; - -ipsecmnaddr : ADDR '/' prefixlen - { - struct home_addr_info *hai; - - hai = malloc(sizeof(struct home_addr_info)); - if (hai == NULL) { - uerror("out of memory"); - return -1; - } - memset(hai, 0, sizeof(struct home_addr_info)); - hai->hoa.addr = $1; - hai->plen = $3; - list_add_tail(&hai->list, &ipsec_ps.hoa_list); - } - ; - -ipsecpolicydefs : ipsecpolicydef - | ipsecpolicydefs ipsecpolicydef - ; - -ipsecpolicydef : ipsectype ipsecprotos ipsecreqid xfrmaction ';' - { - struct list_head *lp; - - if (IN6_IS_ADDR_UNSPECIFIED(&ipsec_ps.ha)) { - uerror("HomeAgentAddress missing for IPsecPolicy"); - return -1; - } - if (list_empty(&ipsec_ps.hoa_list)) { - uerror("HomeAddress missing for IPsecPolicy"); - return -1; - } - - list_for_each(lp, &ipsec_ps.hoa_list) { - struct home_addr_info *hai; - struct ipsec_policy_entry *e; - - hai = list_entry(lp, struct home_addr_info, - list); - - e = malloc(sizeof(*e)); - if (e == NULL) { - uerror("out of memory"); - return -1; - } - memset(e, 0, sizeof(*e)); - e->ha_addr = ipsec_ps.ha; - e->mn_addr = hai->hoa.addr; - e->type = $1; -#ifndef XFRM_MSG_MIGRATE - switch (e->type) { - case IPSEC_POLICY_TYPE_TUNNELHOMETESTING: - case IPSEC_POLICY_TYPE_TUNNELMH: - case IPSEC_POLICY_TYPE_TUNNELPAYLOAD: - uerror("cannot use IPsec tunnel because it is not built with MIGRATE"); - return -1; - default: - break; - } -#endif -#ifndef MULTIPROTO_MIGRATE - if ($2 != IPSEC_PROTO_ESP) { - uerror("only UseESP is allowed"); - return -1; - } -#endif - e->ipsec_protos = $2; - e->reqid_toha = $3[0]; - e->reqid_tomn = $3[1]; - e->action = $4; - - if (ipsec_policy_entry_check(&e->ha_addr, - &e->mn_addr, - e->type)) { - uerror("overlapping IPsec policies " - "found for " - "HA %x:%x:%x:%x:%x:%x:%x:%x " - "MN %x:%x:%x:%x:%x:%x:%x:%x " - "pair\n", - NIP6ADDR(&e->ha_addr), - NIP6ADDR(&e->mn_addr)); - return -1; - } - list_add_tail(&e->list, &conf.ipsec_policies); - } - } - ; - -ipsectype : IPSECPOLICY ipsectypeval { $$ = $2; } - ; - -ipsectypeval : HOMEREGBINDING { $$ = IPSEC_POLICY_TYPE_HOMEREGBINDING; } - | MH { $$ = IPSEC_POLICY_TYPE_MH; } - | MOBPFXDISC { $$ = IPSEC_POLICY_TYPE_MOBPFXDISC; } - | TUNNELHOMETESTING { $$ = IPSEC_POLICY_TYPE_TUNNELHOMETESTING; } - | TUNNELMH { $$ = IPSEC_POLICY_TYPE_TUNNELMH; } - | TUNNELPAYLOAD { $$ = IPSEC_POLICY_TYPE_TUNNELPAYLOAD; } - | ICMP { $$ = IPSEC_POLICY_TYPE_ICMP; } - | ANY { $$ = IPSEC_POLICY_TYPE_ANY; } - ; - -ipsecprotos : - { - uerror("IPsecPolicy must set at least one protocol"); - return -1; - } - | ipsecproto { $$ = $1; } - | ipsecproto ipsecproto { $$ = $1 | $2; } - | ipsecproto ipsecproto ipsecproto { $$ = $1 | $2 | $3; } - ; - -ipsecproto : USEESP { $$ = IPSEC_PROTO_ESP; } - | USEAH { $$ = IPSEC_PROTO_AH; } - | USEIPCOMP { $$ = IPSEC_PROTO_IPCOMP; } - ; - -ipsecreqid : { $$[0] = $$[1] = 0; } - | NUMBER { $$[0] = $$[1] = $1; } - | NUMBER NUMBER { $$[0] = $1; $$[1] = $2; } - ; - -xfrmaction : { $$ = XFRM_POLICY_ALLOW; } - | BOOL { $$ = $1 ? XFRM_POLICY_ALLOW : XFRM_POLICY_BLOCK; } - ; - -mnropolicy : mnropolicyaddr dorouteopt - { - struct xfrm_ro_pol *rp; - rp = malloc(sizeof(struct xfrm_ro_pol)); - if (rp == NULL) { - uerror("out of memory"); - return -1; - } - memset(rp, 0, sizeof(struct xfrm_ro_pol)); - rp->cn_addr = $1; - rp->do_ro = $2; - list_add_tail(&rp->list, &hai.ro_policies); - } - ; - -mnropolicyaddr : { $$ = in6addr_any; } - | ADDR { $$ = $1; } - ; - -dorouteopt : BOOL { $$ = $1; } - ; - -movemodule : INTERNAL - { - conf.MoveModulePath = NULL; - } - | QSTRING - { - conf.MoveModulePath = NULL; - } - ; - -policymodule : QSTRING - { - if (pmgr_init($1, &conf.pmgr) < 0) { - uerror("error loading shared object %s", $1); - return -1; - } - } - ; - -bindaclpolval : BOOL - { - if ($1) - $$ = IP6_MH_BAS_ACCEPTED; - else - $$ = IP6_MH_BAS_PROHIBIT; - } - | NUMBER { $$ = $1; } - ; - -bindaclpolicy : ADDR prefixlistsub bindaclpolval - { - bae = malloc(sizeof(struct policy_bind_acl_entry)); - if (bae == NULL) { - uerror("out of memory"); - return -1; - } - memset(bae, 0, sizeof(struct policy_bind_acl_entry)); - bae->hoa = $1; - bae->plen = 128; - INIT_LIST_HEAD(&bae->mob_net_prefixes); - bae->mnp_count = mv_prefixes(&bae->mob_net_prefixes); - bae->bind_policy = $3; - list_add_tail(&bae->list, &conf.bind_acl); - } - ; - -prefixlen : NUMBER - { - if ($1 > 128) { - uerror("invalid prefix length %d", $1); - return -1; - } - $$ = $1; - } - ; - -prefixlistsub : - | '(' prefixlist ')' - ; - -prefixlist : prefixlistentry - | prefixlist ',' prefixlistentry - ; - -prefixlistentry : ADDR '/' prefixlen - { - struct prefix_list_entry *p; - p = malloc(sizeof(struct prefix_list_entry)); - if (p == NULL) { - fprintf(stderr, - "%s: out of memory\n", __FUNCTION__); - return -1; - } - memset(p, 0, sizeof(struct prefix_list_entry)); - p->ple_prefix = $1; - p->ple_plen = $3; - list_add_tail(&p->list, &prefixes); - } - ; - -proxymiplmadef : QSTRING proxymiplmasub - { - conf.HomeNetworkPrefix = in6addr_any; - conf.OurAddress = in6addr_loopback; - } - ; - -proxymiplmasub : '{' proxymiplmaopts '}' - | ';' - ; - -proxymiplmaopts : proxymiplmaopt - | proxymiplmaopts proxymiplmaopt - ; - -proxymiplmaopt : LMAPMIPNETWORKADDRESS ADDR ';' - { - memcpy(&conf.LmaAddress, &$2, sizeof(struct in6_addr)); - } - | LMAPMIPNETWORKDEVICE QSTRING ';' - { - conf.LmaPmipNetworkDevice = $2; - } - | LMACORENETWORKADDRESS ADDR ';' - { - memcpy(&conf.LmaCoreNetworkAddress, &$2, sizeof(struct in6_addr)); - } - | LMACORENETWORKDEVICE QSTRING ';' - { - conf.LmaCoreNetworkDevice = $2; - } - | RFC5213TIMESTAMPBASEDAPPROACHINUSE BOOL ';' - { - conf.RFC5213TimestampBasedApproachInUse = $2; - } - | RFC5213MOBILENODEGENERATEDTIMESTAMPINUSE BOOL ';' - { - conf.RFC5213MobileNodeGeneratedTimestampInUse = $2; - } - | RFC5213FIXEDMAGLINKLOCALADDRESSONALLACCESSLINKS ADDR ';' - { - memcpy(&conf.RFC5213FixedMAGLinkLocalAddressOnAllAccessLinks, &$2, sizeof(struct in6_addr)); - } - | RFC5213FIXEDMAGLINKLAYERADDRESSONALLACCESSLINKS MACADDR ';' - { - memcpy(&conf.RFC5213FixedMAGLinkLayerAddressOnAllAccessLinks, &$2, sizeof(struct in6_addr)); - } - | RFC5213MINDELAYBEFOREBCEDELETE NUMBER ';' - { - struct timespec lifetime; - lifetime.tv_sec = $2/1000; - lifetime.tv_nsec = ($2 % 1000)*1000000; - conf.RFC5213MinDelayBeforeBCEDelete = lifetime; - } - | RFC5213MAXDELAYBEFORENEWBCEASSIGN NUMBER ';' - { - struct timespec lifetime; - lifetime.tv_sec = $2/1000; - lifetime.tv_nsec = ($2 % 1000)*1000000; - conf.RFC5213MaxDelayBeforeNewBCEAssign = lifetime; - } - | RFC5213TIMESTAMPVALIDITYWINDOW NUMBER ';' - { - struct timespec lifetime; - lifetime.tv_sec = $2/1000; - lifetime.tv_nsec = ($2 % 1000)*1000000; - conf.RFC5213TimestampValidityWindow = lifetime; - } - | OURADDRESS ADDR ';' - { - memcpy(&conf.OurAddress, &$2, sizeof(struct in6_addr)); - } - | HOMENETWORKPREFIX ADDR ';' - { - memcpy(&conf.HomeNetworkPrefix, &$2, sizeof(struct in6_addr)); - } - | TUNNELINGENABLED BOOL ';' - { - conf.TunnelingEnabled = $2; - } - | DYNAMICTUNNELINGENABLED BOOL ';' - { - conf.DynamicTunnelingEnabled = $2; - } - | MAXDELAYBEFOREDYNAMICTUNNELINGDELETE NUMBER ';' - { - struct timespec lifetime; - lifetime.tv_sec = $2/1000; - lifetime.tv_nsec = ($2 % 1000)*1000000; - conf.MaxDelayBeforeDynamicTunnelingDelete = lifetime; - } - | PBULIFETIME NUMBER ';' - { - struct timespec lifetime; - lifetime.tv_sec = $2/1000; - lifetime.tv_nsec = ($2 % 1000)*1000000; - conf.PBULifeTime = lifetime; - } - | PBALIFETIME NUMBER ';' - { - struct timespec lifetime; - lifetime.tv_sec = $2/1000; - lifetime.tv_nsec = ($2 % 1000)*1000000; - conf.PBALifeTime = lifetime; - } - | RETRANSMISSIONTIMEOUT NUMBER ';' - { - struct timespec lifetime; - lifetime.tv_sec = $2/1000; - lifetime.tv_nsec = ($2 % 1000)*1000000; - conf.RetransmissionTimeOut = lifetime; - } - | MAXMESSAGERETRANSMISSIONS NUMBER ';' - { - conf.MaxMessageRetransmissions = $2; - } - | MAGADDRESSINGRESS ADDR ';' - { - memcpy(&conf.MagAddressIngress[conf.NumMags], &$2, sizeof(struct in6_addr)); - } - | MAGADDRESSEGRESS ADDR ';' - { - memcpy(&conf.MagAddressEgress[conf.NumMags], &$2, sizeof(struct in6_addr)); - if (! IN6_IS_ADDR_UNSPECIFIED(&conf.MagAddressEgress[conf.NumMags])) { - conf.NumMags = conf.NumMags + 1; - } - } - ; - -proxymipmagdef : QSTRING proxymipmagsub - { - conf.HomeNetworkPrefix = in6addr_any; - conf.OurAddress = in6addr_loopback; - } - ; - -proxymipmagsub : '{' proxymipmagopts '}' - | ';' - ; - -proxymipmagopts : proxymipmagopt - | proxymipmagopts proxymipmagopt - ; - -proxymipmagopt : LMAPMIPNETWORKADDRESS ADDR ';' - { - memcpy(&conf.LmaAddress, &$2, sizeof(struct in6_addr)); - } - | RFC5213TIMESTAMPBASEDAPPROACHINUSE BOOL ';' - { - conf.RFC5213TimestampBasedApproachInUse = $2; - } - | RFC5213MOBILENODEGENERATEDTIMESTAMPINUSE BOOL ';' - { - conf.RFC5213MobileNodeGeneratedTimestampInUse = $2; - } - | RFC5213FIXEDMAGLINKLOCALADDRESSONALLACCESSLINKS ADDR ';' - { - memcpy(&conf.RFC5213FixedMAGLinkLocalAddressOnAllAccessLinks, &$2, sizeof(struct in6_addr)); - } - | RFC5213FIXEDMAGLINKLAYERADDRESSONALLACCESSLINKS MACADDR ';' - { - memcpy(&conf.RFC5213FixedMAGLinkLayerAddressOnAllAccessLinks, &$2, sizeof(struct in6_addr)); - } - | RFC5213ENABLEMAGLOCALROUTING BOOL ';' - { - conf.RFC5213EnableMAGLocalRouting = $2; - } - | OURADDRESS ADDR ';' - { - memcpy(&conf.OurAddress, &$2, sizeof(struct in6_addr)); - } - | MAGADDRESSINGRESS ADDR ';' - { - memcpy(&conf.MagAddressIngress[0], &$2, sizeof(struct in6_addr)); - } - | MAGADDRESSEGRESS ADDR ';' - { - memcpy(&conf.MagAddressEgress[0], &$2, sizeof(struct in6_addr)); - } - | MAGDEVICEINGRESS QSTRING ';' - { - conf.MagDeviceIngress = $2; - } - | MAGDEVICEEGRESS QSTRING ';' - { - conf.MagDeviceEgress = $2; - } - | HOMENETWORKPREFIX ADDR ';' - { - memcpy(&conf.HomeNetworkPrefix, &$2, sizeof(struct in6_addr)); - } - | TUNNELINGENABLED BOOL ';' - { - conf.TunnelingEnabled = $2; - } - | DYNAMICTUNNELINGENABLED BOOL ';' - { - conf.DynamicTunnelingEnabled = $2; - } - | MAXDELAYBEFOREDYNAMICTUNNELINGDELETE NUMBER ';' - { - struct timespec lifetime; - lifetime.tv_sec = $2/1000; - lifetime.tv_nsec = ($2 % 1000)*1000000; - conf.MaxDelayBeforeDynamicTunnelingDelete = lifetime; - } - | PBULIFETIME NUMBER ';' - { - struct timespec lifetime; - lifetime.tv_sec = $2/1000; - lifetime.tv_nsec = ($2 % 1000)*1000000; - conf.PBULifeTime = lifetime; - } - | PBALIFETIME NUMBER ';' - { - struct timespec lifetime; - lifetime.tv_sec = $2/1000; - lifetime.tv_nsec = ($2 % 1000)*1000000; - conf.PBALifeTime = lifetime; - } - | RETRANSMISSIONTIMEOUT NUMBER ';' - { - struct timespec lifetime; - lifetime.tv_sec = $2/1000; - lifetime.tv_nsec = ($2 % 1000)*1000000; - conf.RetransmissionTimeOut = lifetime; - } - | MAXMESSAGERETRANSMISSIONS NUMBER ';' - { - conf.MaxMessageRetransmissions = $2; - } - | RADIUSPASSWORD QSTRING ';' - { - conf.RadiusPassword = $2; - } - | RADIUSCLIENTCONFIGFILE QSTRING ';' - { - conf.RadiusClientConfigFile = $2; - } - | PCAPSYSLOGASSOCIATIONGREPSTRING QSTRING ';' - { - conf.PcapSyslogAssociationGrepString = $2; - } - | PCAPSYSLOGDEASSOCIATIONGREPSTRING QSTRING ';' - { - conf.PcapSyslogDeAssociationGrepString = $2; - } - ; -%% diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/src/ha.c b/openair3/PMIPv6/pmipv6-daemon-umip/src/ha.c deleted file mode 100755 index b5ba279fbd..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/src/ha.c +++ /dev/null @@ -1,1423 +0,0 @@ -/* - * $Id: ha.c 1.126 06/05/07 21:52:42+03:00 anttit@tcs.hut.fi $ - * - * This file is part of the MIPL Mobile IPv6 for Linux. - * - * Authors: Ville Nuorvala - * Antti Tuominen - * - * Copyright 2003-2005 Go-Core Project - * Copyright 2003-2006 Helsinki University of Technology - * - * MIPL Mobile IPv6 for Linux is free software; you can redistribute - * it and/or modify it under the terms of the GNU General Public - * License as published by the Free Software Foundation; version 2 of - * the License. - * - * MIPL Mobile IPv6 for Linux is distributed in the hope that it will - * be useful, but WITHOUT ANY WARRANTY; without even the implied - * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with MIPL Mobile IPv6 for Linux; if not, write to the Free - * Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - * 02111-1307 USA. - */ - -#ifdef HAVE_CONFIG_H -#include -#endif -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "debug.h" -#include "icmp6.h" -#include "mpdisc_ha.h" -#include "mh.h" -#include "tqueue.h" -#include "bcache.h" -#include "util.h" -#include "cn.h" -#include "retrout.h" -#include "tunnelctl.h" -#include "rtnl.h" -#include "ha.h" -#include "dhaad_ha.h" -#include "conf.h" -#ifdef ENABLE_VT -#include "vt.h" -#endif -#include "ipsec.h" -#include "xfrm.h" -#include "ndisc.h" -#include "prefix.h" -#include "statistics.h" - -#include "pmip_init.h" -#include "pmip_handler.h" - -static pthread_mutex_t bu_worker_mutex; -static volatile unsigned long bu_worker_count = 0; -static pthread_cond_t cond; - -LIST_HEAD(bu_worker_list); -LIST_HEAD(ha_interfaces); - -static void ha_recv_ra(const struct icmp6_hdr *ih, ssize_t len, - const struct in6_addr *src, - const struct in6_addr *dst, int iif, int hoplimit) -{ - struct nd_router_advert *ra = (struct nd_router_advert *)ih; - int optlen = len - sizeof(struct nd_router_advert); - uint8_t *opt; - struct nd_opt_prefix_info *pinfo[MAX_HOME_AGENTS]; - int i, num_pinfo = 0; - struct ha_interface *iface; - uint16_t pref = 0; - uint16_t life = 0; - uint16_t flags = 0; - - /* validity checks */ - if (hoplimit < 255 || !IN6_IS_ADDR_LINKLOCAL(src) || - ih->icmp6_code != 0 || len < 0 || - (size_t)len < sizeof(struct nd_router_advert) || - !conf.pmgr.accept_ra(iif, src, dst, ra)) - return; - - if ((iface = ha_get_if(iif)) == NULL) - return; - - opt = (uint8_t *)(ra + 1); - - mpd_handle_mpa_flags(iface, ra->nd_ra_flags_reserved); - - if (ra->nd_ra_flags_reserved & ND_RA_FLAG_HOME_AGENT) { - life = ntohs(ra->nd_ra_router_lifetime); - } - - while (optlen > 1 && num_pinfo < MAX_HOME_AGENTS) { - unsigned int olen = opt[1] << 3; - - if (olen > (size_t)optlen || olen == 0) - return; - - if (opt[0] == ND_OPT_PREFIX_INFORMATION) { - struct nd_opt_prefix_info *p; - p = (struct nd_opt_prefix_info *)opt; - - if (olen < sizeof(*p) || p->nd_opt_pi_prefix_len > 128) - return; - - p->nd_opt_pi_valid_time = - ntohl(p->nd_opt_pi_valid_time); - p->nd_opt_pi_preferred_time = - ntohl(p->nd_opt_pi_preferred_time); - - if (ra->nd_ra_flags_reserved & ND_RA_FLAG_HOME_AGENT) - mpd_handle_pinfo(iface, p); - - pinfo[num_pinfo++] = p; - } else if (opt[0] == ND_OPT_HOME_AGENT_INFO && - ra->nd_ra_flags_reserved & ND_RA_FLAG_HOME_AGENT) { - struct nd_opt_homeagent_info *hainfo; - hainfo = (struct nd_opt_homeagent_info *)opt; - - if (olen < sizeof(*hainfo)) - return; - - pref = ntohs(hainfo->nd_opt_hai_preference); - life = ntohs(hainfo->nd_opt_hai_lifetime); - flags = hainfo->nd_opt_hai_flags_reserved; - } - - optlen -= olen; - opt += olen; - } - - for (i = 0; i < num_pinfo; i++) { - /* if the router is running as HA, add it, else delete it */ - if (pinfo[i]->nd_opt_pi_flags_reserved & - ND_OPT_PI_FLAG_RADDR) { - dhaad_insert_halist(iface, pref, life, - flags, pinfo[i]); - } - } - - mpd_del_expired_pinfos(iface); -} - -struct icmp6_handler ha_ra_handler = { - .recv = ha_recv_ra, -}; - -struct ha_interface *ha_get_if(int ifindex) -{ - struct list_head *lp; - - list_for_each(lp, &ha_interfaces) { - struct ha_interface *iface; - - iface = list_entry(lp, struct ha_interface, iflist); - - if (iface->ifindex == ifindex) - return iface; - } - return NULL; -} - -struct ha_interface *ha_get_if_by_addr(const struct in6_addr *addr) -{ - struct list_head *li; - - list_for_each(li, &ha_interfaces) { - struct ha_interface *iface; - struct list_head *la; - - iface = list_entry(li, struct ha_interface, iflist); - - list_for_each(la, &iface->addr_list) { - struct ha_addr_holder *addrs; - addrs = list_entry(la, struct ha_addr_holder, list); - - if (IN6_ARE_ADDR_EQUAL(&addrs->ha_addr, addr)) - return iface; - } - } - return NULL; -} - -struct ha_interface *ha_get_if_by_anycast(const struct in6_addr *anycast, - struct in6_addr **addrp) -{ - struct list_head *li; - - list_for_each(li, &ha_interfaces) { - struct ha_interface *iface; - struct list_head *la; - - iface = list_entry(li, struct ha_interface, iflist); - - list_for_each(la, &iface->addr_list) { - struct ha_addr_holder *addrs; - addrs = list_entry(la, struct ha_addr_holder, list); - - if (IN6_ARE_ADDR_EQUAL(&addrs->anycast_addr, - anycast)) { - if (addrp) - *addrp = &addrs->ha_addr; - - return iface; - } - } - } - return NULL; -} - -static int ha_if_addr_setup(__attribute__ ((unused)) const struct sockaddr_nl *who, - struct nlmsghdr *n, - void *arg) -{ - struct ifaddrmsg *ifa = NLMSG_DATA(n); - struct ha_interface *i = (struct ha_interface *)arg; - struct ha_addr_holder *addr; - struct rtattr * rta_tb[IFA_MAX+1]; - - if (n->nlmsg_len < NLMSG_LENGTH(sizeof(*ifa))) - return -1; - - if (n->nlmsg_type != RTM_NEWADDR) - return 0; - - if (i->ifindex < 0 || ifa->ifa_index != (uint32_t)i->ifindex) - return 0; - - if (ifa->ifa_scope != RT_SCOPE_UNIVERSE) - return 0; - - memset(rta_tb, 0, sizeof(rta_tb)); - parse_rtattr(rta_tb, IFA_MAX, IFA_RTA(ifa), - n->nlmsg_len - NLMSG_LENGTH(sizeof(*ifa))); - - if (!rta_tb[IFA_ADDRESS]) - return 0; - - addr = malloc(sizeof(*addr)); - - if (addr != NULL) { - struct in6_addr *ha_addr = RTA_DATA(rta_tb[IFA_ADDRESS]); - - addr->ha_addr = *ha_addr; - - dhaad_gen_ha_anycast(&addr->anycast_addr, - ha_addr, ifa->ifa_prefixlen); - - if (if_mc_group(ICMP6_MAIN_SOCK, i->ifindex, - &addr->anycast_addr, IPV6_JOIN_ANYCAST) < 0) - return -1; - - dbg("Joined anycast group " - "%x:%x:%x:%x:%x:%x:%x:%x on iface %d\n", - NIP6ADDR(&addr->anycast_addr), i->ifindex); - list_add_tail(&addr->list, &i->addr_list); - } - - return 0; -} - -static int ha_addr_setup(void) -{ - struct list_head *lp; - list_for_each(lp, &ha_interfaces) { - struct ha_interface *i; - i = list_entry(lp, struct ha_interface, iflist); - - if (addrs_iterate(ha_if_addr_setup, i) < 0) - return -1; - - if (if_mc_group(ICMP6_MAIN_SOCK, i->ifindex, - &in6addr_all_nodes_mc, IPV6_JOIN_GROUP) < 0) - return -1; - } - return 0; -} - -static int ha_insert_if(int newifindex) -{ - struct ha_interface *newif; - struct list_head *lp; - - list_for_each(lp, &ha_interfaces) { - struct ha_interface *i; - i = list_entry(lp, struct ha_interface, iflist); - - if (i->ifindex == newifindex) - return 0; /* No need to bother: iface already there. */ - } - - newif = malloc(sizeof(*newif)); - - if (newif == NULL) - return -ENOMEM; - - memset(newif, 0, sizeof(*newif)); - newif->ifindex = newifindex; - INIT_LIST_HEAD(&newif->ha_list); - INIT_LIST_HEAD(&newif->addr_list); - INIT_LIST_HEAD(&newif->prefix_list); - list_add_tail(&newif->iflist, &ha_interfaces); - return 0; -} - -int homeagent_if_init(int ifindex) -{ - if (ifindex == 0) - return -1; - - ha_insert_if(ifindex); - return 0; -} - -int homeagents_ifall_init(void) -{ - struct if_nameindex *ifs, *i; - - if (!list_empty(&ha_interfaces)) return 0; - - ifs = if_nameindex(); - - for (i = ifs; i->if_index != 0; i++) { - if (i->if_index != 1) { - ha_insert_if(i->if_index); - } - } - - if_freenameindex(ifs); - - return 0; -} - -void ha_discover_routers(void) -{ - struct list_head *lp; - list_for_each(lp, &ha_interfaces) { - struct ha_interface *i; - i = list_entry(lp, struct ha_interface, iflist); - ndisc_send_rs(i->ifindex, &in6addr_all_routers_mc, NULL, 0); - } -} - -static void ha_proxy_nd_init(void) -{ - struct list_head *lp; - list_for_each(lp, &ha_interfaces) { - struct ha_interface *i; - i = list_entry(lp, struct ha_interface, iflist); - proxy_nd_iface_init(i->ifindex); - } -} - -static void ha_proxy_nd_cleanup(void) -{ - struct list_head *lp; - list_for_each(lp, &ha_interfaces) { - struct ha_interface *i; - i = list_entry(lp, struct ha_interface, iflist); - proxy_nd_iface_cleanup(i->ifindex); - } -} - -#ifdef ENABLE_VT -struct ha_vt_arg { - const struct vt_handle *vh; -}; - -static int ha_halist_vt_dump(int ifindex, void *data, void *arg) -{ - struct home_agent *h = (struct home_agent *)data; - struct ha_vt_arg *hva = (struct ha_vt_arg *)arg; - const struct vt_handle *vh = hva->vh; - char buf[IF_NAMESIZE + 1]; - char *dev; - - if (!h) - return 0; - - dev = if_indextoname(ifindex, buf); - - if (!dev || strlen(dev) == 0) - fprintf(vh->vh_stream, "(%d)", h->iface->ifindex); - else - fprintf(vh->vh_stream, "%s", dev); - - fprintf(vh->vh_stream, " "); - - fprintf_bl(vh, "%x:%x:%x:%x:%x:%x:%x:%x", NIP6ADDR(&h->addr)); - - fprintf(vh->vh_stream, "\n"); - - fprintf(vh->vh_stream, " preference %d", h->preference); - - fprintf(vh->vh_stream, " lifetime %lu", h->lifetime.tv_sec); - - fprintf(vh->vh_stream, "\n"); - - return 0; -} - -/** - * ha_halist_iterate - apply function to every home agent list entry - * @func: function to apply - * @arg: extra data for @func - **/ -static void ha_halist_iterate(int (* func)(int, void *, void *), void *arg) -{ - struct list_head *lp; - - list_for_each(lp, &ha_interfaces) { - struct ha_interface *iface; - - iface = list_entry(lp, struct ha_interface, iflist); - - dhaad_halist_iterate(iface, func, arg); - } -} - -static int ha_plist_vt_dump(int ifindex, void *data, void *arg) -{ - struct prefix_list_entry *ple = (struct prefix_list_entry *)data; - struct ha_vt_arg *hva = (struct ha_vt_arg *)arg; - const struct vt_handle *vh = hva->vh; - char buf[IF_NAMESIZE + 1]; - char *dev; - struct timespec ts_now; - - if (!ple) - return 0; - - dev = if_indextoname(ifindex, buf); - - if (!dev || strlen(dev) == 0) - fprintf(vh->vh_stream, "(%d)", ifindex); - else - fprintf(vh->vh_stream, "%s", dev); - - fprintf(vh->vh_stream, " "); - - fprintf_bl(vh, "%x:%x:%x:%x:%x:%x:%x:%x/%u", - NIP6ADDR(&ple->ple_prefix), ple->ple_plen); - - fprintf(vh->vh_stream, "\n"); - - fprintf(vh->vh_stream, " valid "); - - if (clock_gettime(CLOCK_REALTIME, &ts_now) != 0) - fprintf(vh->vh_stream, "(error)"); - else { - if (tsafter(ts_now, ple->timestamp)) - fprintf(vh->vh_stream, "(broken)"); - else { - struct timespec ts; - uint32_t diff; - - tssub(ts_now, ple->timestamp, ts); - diff = ts.tv_sec; - - if (ple->ple_valid_time < diff) { - fprintf(vh->vh_stream, "-%u", - diff - ple->ple_valid_time); - } else { - fprintf(vh->vh_stream, "%u", - ple->ple_valid_time - diff); - } - } - } - - fprintf(vh->vh_stream, " / %u", ple->ple_valid_time); - - fprintf(vh->vh_stream, " preferred %u", ple->ple_prefd_time); - - fprintf(vh->vh_stream, " flags %c%c%c", - ((ple->ple_flags & ND_OPT_PI_FLAG_ONLINK) ? 'O' : '-'), - ((ple->ple_flags & ND_OPT_PI_FLAG_AUTO) ? 'A' : '-'), - ((ple->ple_flags & ND_OPT_PI_FLAG_RADDR) ? 'R' : '-')); - - fprintf(vh->vh_stream, "\n"); - - return 0; -} - -/** - * ha_plist_iterate - apply function to every prefix list entry - * @func: function to apply - * @arg: extra data for @func - **/ -static void ha_plist_iterate(int (* func)(int, void *, void *), void *arg) -{ - struct list_head *lp; - - list_for_each(lp, &ha_interfaces) { - struct ha_interface *iface; - - iface = list_entry(lp, struct ha_interface, iflist); - - mpd_plist_iterate(iface, func, arg); - } -} - -static int ha_thread_vt_cmd(const struct vt_handle *vh, const char *str) -{ - if (strlen(str) > 0) { - fprintf(vh->vh_stream, "unknown args\n"); - return 0; - } - - pthread_mutex_lock(&bu_worker_mutex); - fprintf(vh->vh_stream, "bu: %lu\n", bu_worker_count); - pthread_mutex_unlock(&bu_worker_mutex); - return 0; -} - -static int ha_halist_vt_cmd(const struct vt_handle *vh, const char *str) -{ - struct ha_vt_arg hva; - hva.vh = vh; - - if (strlen(str) > 0) { - fprintf(vh->vh_stream, "unknown args\n"); - return 0; - } - - ha_halist_iterate(ha_halist_vt_dump, &hva); - return 0; -} - -static int ha_plist_vt_cmd(const struct vt_handle *vh, const char *str) -{ - struct ha_vt_arg hva; - hva.vh = vh; - - if (strlen(str) > 0) { - fprintf(vh->vh_stream, "unknown args\n"); - return 0; - } - - ha_plist_iterate(ha_plist_vt_dump, &hva); - return 0; -} - -static struct vt_cmd_entry vt_cmd_thread = { - .cmd = "thread", - .parser = ha_thread_vt_cmd, -}; - -static struct vt_cmd_entry vt_cmd_hal = { - .cmd = "hal", - .parser = ha_halist_vt_cmd, -}; - -static struct vt_cmd_entry vt_cmd_pl = { - .cmd = "pl", - .parser = ha_plist_vt_cmd, -}; - -static int ha_vt_init(void) -{ - int ret; - ret = vt_cmd_add_root(&vt_cmd_thread); - - if (ret < 0) - return ret; - - ret = vt_cmd_add_root(&vt_cmd_hal); - - if (ret < 0) - return ret; - - ret = vt_cmd_add_root(&vt_cmd_pl); - return ret; -} -#endif - - -static void nemo_ha_del_mnp_routes(struct list_head *old_mnps, - struct list_head *new_mnps, - int ifindex, int all) -{ - struct list_head *list; - list_for_each(list, old_mnps) { - struct prefix_list_entry *p; - p = list_entry(list, struct prefix_list_entry, list); - - if (!all && - prefix_list_find(new_mnps, &p->ple_prefix, p->ple_plen)) - continue; - - route_del(ifindex, RT6_TABLE_MIP6, IP6_RT_PRIO_MIP6_FWD, - NULL, 0, &p->ple_prefix, p->ple_plen, NULL); - } -} - -static int nemo_ha_add_mnp_routes(struct list_head *old_mnps, - struct list_head *new_mnps, - int ifindex, int all) -{ - struct list_head *list; - list_for_each(list, new_mnps) { - struct prefix_list_entry *p; - p = list_entry(list, struct prefix_list_entry, list); - - if (!all && - prefix_list_find(old_mnps, &p->ple_prefix, p->ple_plen)) - continue; - - if (route_add(ifindex, RT6_TABLE_MIP6, RTPROT_MIP, - 0, IP6_RT_PRIO_MIP6_FWD, - NULL, 0, &p->ple_prefix, p->ple_plen, NULL) < 0) - return -1; - } - return 0; -} - -struct home_tnl_ops_parm { - struct bcentry *bce; - int ba_status; - struct list_head mob_net_prefixes; -}; - -static int home_tnl_del(int old_if, int new_if, struct home_tnl_ops_parm *p) -{ - const struct in6_addr *our_addr, *peer_addr, *coa, *old_coa; - struct list_head *mnp; - - assert(old_if); - - our_addr = &p->bce->our_addr; - peer_addr = &p->bce->peer_addr; - coa = &p->bce->peer_addr; - old_coa = &p->bce->coa; - mnp = &p->bce->mob_net_prefixes; - - if (conf.UseMnHaIPsec) { - /* migrate */ - ha_ipsec_tnl_update(our_addr, peer_addr, - coa, old_coa, p->bce->tunnel, mnp); - /* delete SP entry */ - ha_ipsec_tnl_pol_del(our_addr, peer_addr, p->bce->tunnel, mnp); - } - - /* delete HoA route */ - route_del(old_if, RT6_TABLE_MAIN, - IP6_RT_PRIO_MIP6_FWD, NULL, 0, peer_addr, 128, NULL); - - /* delete MNP routes */ - nemo_ha_del_mnp_routes(&p->bce->mob_net_prefixes, - &p->mob_net_prefixes, old_if, 1); - /* update tunnel interface */ - p->bce->tunnel = new_if; - - return 0; -} - -static int home_tnl_add(int old_if, int new_if, struct home_tnl_ops_parm *p) -{ - const struct in6_addr *our_addr, *peer_addr, *coa, *old_coa; - struct list_head *mnp; - - assert(new_if); - - our_addr = &p->bce->our_addr; - peer_addr = &p->bce->peer_addr; - coa = &p->bce->coa; - old_coa = IN6_ARE_ADDR_EQUAL(&p->bce->old_coa, &in6addr_any) ? - &p->bce->peer_addr : &p->bce->old_coa; - mnp = &p->mob_net_prefixes; - - /* update tunnel interface */ - p->bce->tunnel = new_if; - - /* add MNP routes */ - if (nemo_ha_add_mnp_routes(&p->bce->mob_net_prefixes, - &p->mob_net_prefixes, new_if, 1) < 0) { - if (p->bce->nemo_type == BCE_NEMO_EXPLICIT) - p->ba_status = IP6_MH_BAS_INVAL_PRFX; - else - p->ba_status = IP6_MH_BAS_FWDING_FAILED; - - goto err; - } - - /* add HoA route */ - if (route_add(new_if, RT6_TABLE_MAIN, - RTPROT_MIP, 0, IP6_RT_PRIO_MIP6_FWD, - NULL, 0, peer_addr, 128, NULL) < 0) { - p->ba_status = IP6_MH_BAS_INSUFFICIENT; - goto err; - } - - /* add SP entry */ - if (conf.UseMnHaIPsec) { - if (ha_ipsec_tnl_pol_add(our_addr, peer_addr, - p->bce->tunnel, mnp) < 0) { - p->ba_status = IP6_MH_BAS_INSUFFICIENT; - goto err; - } - - /* Always update transport mode (for signaling) */ - if (ha_ipsec_trns_update(our_addr, peer_addr, coa, old_coa, - p->bce->tunnel) < 0) { - p->ba_status = IP6_MH_BAS_INSUFFICIENT; - goto err; - } - - /* migrate */ - if (ha_ipsec_tnl_update(our_addr, peer_addr, coa, old_coa, - p->bce->tunnel, mnp) < 0) { - p->ba_status = IP6_MH_BAS_INSUFFICIENT; - goto err; - } - } - - return 0; -err: - home_tnl_del(new_if, old_if, p); - return -1; -} - -static int home_tnl_chg(int old_if, int new_if, struct home_tnl_ops_parm *p) -{ - assert(old_if && new_if); - - if (old_if == new_if) { - const struct in6_addr *our_addr, *peer_addr, *coa, *old_coa; - struct list_head *mnp; - - our_addr = &p->bce->our_addr; - peer_addr = &p->bce->peer_addr; - coa = &p->bce->coa; - old_coa = &p->bce->old_coa; - mnp = &p->mob_net_prefixes; - - /* if interface hasn't changed, at least check if the - MR's MNPs have changed */ - if (!prefix_list_cmp(&p->bce->mob_net_prefixes, - &p->mob_net_prefixes)) { - - /* Remove old policies and install new ones */ - if (conf.UseMnHaIPsec) { - ha_ipsec_mnp_pol_del(our_addr, peer_addr, - &p->bce->mob_net_prefixes, - &p->mob_net_prefixes, - p->bce->tunnel); - ha_ipsec_mnp_pol_add(our_addr, peer_addr, - &p->bce->mob_net_prefixes, - &p->mob_net_prefixes, - p->bce->tunnel); - } - - /* Do the same for routes */ - nemo_ha_del_mnp_routes(&p->bce->mob_net_prefixes, - &p->mob_net_prefixes, - old_if, 0); - - if (nemo_ha_add_mnp_routes(&p->bce->mob_net_prefixes, - &p->mob_net_prefixes, - new_if, 0) < 0) { - if (p->bce->nemo_type == BCE_NEMO_EXPLICIT) - p->ba_status = IP6_MH_BAS_INVAL_PRFX; - else - p->ba_status = IP6_MH_BAS_FWDING_FAILED; - - return -1; - } - } - - /* migrate */ - if (conf.UseMnHaIPsec && - !IN6_ARE_ADDR_EQUAL(old_coa, coa)) { - if (ha_ipsec_trns_update(our_addr, peer_addr, - coa, old_coa, - p->bce->tunnel) < 0) - return -1; - - if (ha_ipsec_tnl_update(our_addr, peer_addr, - coa, old_coa, - p->bce->tunnel, mnp) < 0) - return -1; - } - } else { - home_tnl_del(old_if, new_if, p); - - if (home_tnl_add(old_if, new_if, p) < 0) - return -1; - } - - return 0; -} - -static int home_tnl_ops(int request, int old_if, int new_if, void *data) -{ - struct home_tnl_ops_parm *p = data; - int res = -1; - - if (request == SIOCADDTUNNEL) - res = home_tnl_add(old_if, new_if, p); - else if (request == SIOCCHGTUNNEL) - res = home_tnl_chg(old_if, new_if, p); - else if (request == SIOCDELTUNNEL) - res = home_tnl_del(old_if, new_if, p); - - return res; -} - -static void home_cleanup(struct bcentry *bce) -{ - mpd_cancel_mpa(&bce->our_addr, &bce->peer_addr); - - if (bce->link > 0) { - route_del(bce->link, RT6_TABLE_MIP6, IP6_RT_PRIO_MIP6_OUT, - &bce->our_addr, 128, &bce->peer_addr, 128, NULL); - proxy_nd_stop(bce->link, &bce->peer_addr, bce->flags); - } - - if (bce->tunnel > 0) { - struct home_tnl_ops_parm p = { - .bce = bce, - .ba_status = IP6_MH_BAS_ACCEPTED - }; - tunnel_del(bce->tunnel, home_tnl_ops, &p); - } - - if (conf.UseMnHaIPsec) { - ha_mn_ipsec_pol_mod(&bce->our_addr, &bce->peer_addr); - } -} - - -static int ha_extract_mnps(const struct ip6_mh_binding_update *bu, - const struct mh_options *opts, - struct list_head *mob_net_prefixes) -{ - struct ip6_mh_opt_mob_net_prefix *op; - int prefix_count = 0; - - for (op = mh_opt(&bu->ip6mhbu_hdr, opts, IP6_MHOPT_MOB_NET_PRFX); - op != NULL; - op = mh_opt_next(&bu->ip6mhbu_hdr, opts, op)) { - struct prefix_list_entry *p; - p = malloc(sizeof(struct prefix_list_entry)); - - if (p == NULL) { - prefix_list_free(mob_net_prefixes); - return -1; - } - - memset(p, 0, sizeof(struct prefix_list_entry)); - p->ple_plen = op->ip6mnp_prefix_len; - p->ple_prefix = op->ip6mnp_prefix; - list_add_tail(&p->list, mob_net_prefixes); - prefix_count++; - } - - return prefix_count; -} - -static int ha_get_mnps(const struct in6_addr *hoa, - struct list_head *mob_net_prefixes) -{ - struct nd_opt_prefix_info *mnps; - int mnp_count = conf.pmgr.get_mnp_count(hoa); - int i; - - if (mnp_count <= 0) - return mnp_count; - - mnps = calloc(mnp_count, sizeof(struct nd_opt_prefix_info)); - - if (mnps == NULL) - return -1; - - mnp_count = conf.pmgr.get_mnps(hoa, mnp_count, mnps); - - for (i = 0; i < mnp_count; i++) { - struct prefix_list_entry *p; - p = malloc(sizeof(struct prefix_list_entry)); - - if (p == NULL) { - prefix_list_free(mob_net_prefixes); - free(mnps); - return -1; - } - - p->pinfo = *(mnps + i); - list_add_tail(&p->list, mob_net_prefixes); - } - - free(mnps); - return mnp_count; -} - -struct ha_recv_bu_args { - struct list_head list; - struct in6_addr src; - struct in6_addr dst; - struct in6_addr remote_coa; - struct in6_addr bind_coa; - struct ip6_mh_binding_update *bu; - ssize_t len; - struct mh_options mh_opts; - struct timespec lft; - int iif; - int flags; /* HA_BU_F_XXX */ - int *statusp; /* 0 or more than 0 is BA status, otherwise error */ -}; - -static void *ha_recv_bu_worker(void *varg) -{ - struct ha_recv_bu_args *arg = varg; - struct in6_addr_bundle out; - struct bcentry *bce; - struct timespec lft, tmp; - int iif, status, new, home_ifindex; - uint16_t bu_flags, seqno; - uint8_t ba_flags; - struct home_tnl_ops_parm p; - - pthread_dbg("thread started"); -restart: - home_ifindex = 0; - new = 0; - ba_flags = 0; - lft = arg->lft; - iif = arg->iif; - bu_flags = arg->bu->ip6mhbu_flags; - seqno = ntohs(arg->bu->ip6mhbu_seqno); - out.src = &arg->src; - out.dst = &arg->dst; - - if (!IN6_IS_ADDR_UNSPECIFIED(&arg->remote_coa)) - out.remote_coa = &arg->remote_coa; - else - out.remote_coa = NULL; - - if (!IN6_IS_ADDR_UNSPECIFIED(&arg->bind_coa)) - out.bind_coa = &arg->bind_coa; - else - out.bind_coa = NULL; - - out.local_coa = NULL; - - bce = bcache_get(out.src, out.dst); - - if (bce) { - if (bce->type != BCE_NONCE_BLOCK) { - /* H-bit or R-bit mismatch, flags changed */ - if ((bce->flags ^ bu_flags) & - (IP6_MH_BU_HOME | IP6_MH_BU_MR)) { - bcache_release_entry(bce); - bce = NULL; - status = IP6_MH_BAS_REG_NOT_ALLOWED; - goto send_nack; - } - - if (bce->type == BCE_DAD) { - /* DAD is ongoing, so we already received - * a BU. There is no need to do anything - * for that reemission. */ - bcache_release_entry(bce); - status = -EBUSY; - goto out; - } - - if (!MIP6_SEQ_GT(seqno, bce->seqno)) { - if (arg->flags & HA_BU_F_PASSIVE_SEQ) { - /* always use valid sequence */ - seqno = bce->seqno + 1; - } else { - /* sequence number expired */ - status = IP6_MH_BAS_SEQNO_BAD; - seqno = bce->seqno; - bcache_release_entry(bce); - bce = NULL; - goto send_nack; - } - } - } else { - bcache_release_entry(bce); - bce = NULL; - - /* don't let MN deregister BCE_NONCE_BLOCK entry */ - if (!tsisset(lft)) { - status = IP6_MH_BAS_UNSPECIFIED; - goto send_nack; - } - - /* else get rid of it */ - bcache_delete(out.src, out.dst); - } - } else if (!tsisset(lft)) { - status = IP6_MH_BAS_NOT_HA; - goto send_nack; - } - - if ((status = mpd_prefix_check(out.src, out.dst, - &lft, &home_ifindex, new)) < 0) { - if (!(bu_flags & IP6_MH_BU_MR) || - home_ifindex == 0 || - !prefix_list_find(&conf.nemo_ha_served_prefixes, - out.dst, 0)) { - /* not home agent for this subnet */ - status = IP6_MH_BAS_NOT_HOME_SUBNET; - goto send_nack; - } - - status = IP6_MH_BAS_ACCEPTED; - } - - status = conf.pmgr.discard_binding(out.dst, out.bind_coa, - out.src, arg->bu, arg->len); - - if (status >= IP6_MH_BAS_UNSPECIFIED) - goto send_nack; - - /* lifetime may be further decreased by local policy */ - if (conf.pmgr.max_binding_life(out.dst, out.bind_coa, out.src, - arg->bu, arg->len, &lft, &tmp)) { - if (tsbefore(lft, tmp)) - lft = tmp; - } - - mpd_sanitize_lft(&lft); - - if (!bce) { - bce = bcache_alloc(BCE_HOMEREG); - - if (!bce) { - status = IP6_MH_BAS_INSUFFICIENT; - goto send_nack; - } - - bce->our_addr = *out.src; - bce->peer_addr = *out.dst; - bce->coa = *out.bind_coa; - bce->seqno = seqno; - bce->flags = bu_flags; - bce->type = BCE_DAD; - bce->cleanup = NULL; - bce->link = home_ifindex; - - if (bcache_add_homereg(bce) < 0) { - free(bce); - bce = NULL; - status = IP6_MH_BAS_INSUFFICIENT; - goto send_nack; - } - - if (!(arg->flags & HA_BU_F_SKIP_DAD)) { - /* Do DAD for home address */ - if (ndisc_do_dad(home_ifindex, out.dst, - bu_flags & IP6_MH_BU_LLOCAL) < 0) { - bcache_delete(out.src, out.dst); - bce = NULL; - status = IP6_MH_BAS_DAD_FAILED; - goto send_nack; - } - } - - bce = bcache_get(out.src, out.dst); - - if (!bce) { - BUG("BCE deleted before DAD completed!"); - status = IP6_MH_BAS_UNSPECIFIED; - goto send_nack; - } - - new = 1; - } - - INIT_LIST_HEAD(&p.mob_net_prefixes); - - if (bu_flags & IP6_MH_BU_MR && tsisset(lft)) { - if (mh_opt(&arg->bu->ip6mhbu_hdr, - &arg->mh_opts, IP6_MHOPT_MOB_NET_PRFX) != NULL) { - if (ha_extract_mnps(arg->bu, - &arg->mh_opts, - &p.mob_net_prefixes) < 0) { - status = IP6_MH_BAS_INVAL_PRFX; - goto send_nack; - } - - bce->nemo_type = BCE_NEMO_EXPLICIT; - } else if (ha_get_mnps(out.dst, &p.mob_net_prefixes) > 0) { - bce->nemo_type = BCE_NEMO_IMPLICIT; - } else { - /* Todo: dynamic routing */ - status = IP6_MH_BAS_FWDING_FAILED; - goto send_nack; - } - } - - p.bce = bce; - p.ba_status = status; - bce->seqno = seqno; - bce->flags = bu_flags; - bce->lifetime = lft; - - if (new) { - if (tunnel_add(out.src, out.bind_coa, 0, - home_tnl_ops, &p) < 0) { - if (p.ba_status >= IP6_MH_BAS_UNSPECIFIED) - status = p.ba_status; - else - status = IP6_MH_BAS_INSUFFICIENT; - - goto send_nack; - } - - /* Now save the MNP list in the BCE */ - list_splice(&p.mob_net_prefixes, &bce->mob_net_prefixes); - - bce->cleanup = home_cleanup; - - if (route_add(bce->link, RT6_TABLE_MIP6, - RTPROT_MIP, 0, IP6_RT_PRIO_MIP6_OUT, - &bce->our_addr, 128, &bce->peer_addr, 128, - NULL) < 0) { - status = IP6_MH_BAS_INSUFFICIENT; - goto send_nack; - } - - if (proxy_nd_start(bce->link, out.dst, out.src, - bu_flags) < 0) { - status = IP6_MH_BAS_INSUFFICIENT; - goto send_nack; - } - - bce->type = BCE_HOMEREG; - bcache_complete_homereg(bce); - } else { - bce->old_coa = bce->coa; - bce->coa = *out.bind_coa; - - if (tunnel_mod(bce->tunnel, out.src, out.bind_coa, 0, - home_tnl_ops, &p) < 0) { - if (p.ba_status >= IP6_MH_BAS_UNSPECIFIED) - status = p.ba_status; - else - status = IP6_MH_BAS_INSUFFICIENT; - - goto send_nack; - } - - /* Now update the MNP list in the BCE */ - prefix_list_free(&bce->mob_net_prefixes); - list_splice(&p.mob_net_prefixes, &bce->mob_net_prefixes); - - bcache_update_expire(bce); - } - - /* bce is always valid here */ - bcache_release_entry(bce); - - if (!tsisset(lft)) - bcache_delete(out.src, out.dst); - - if (conf.pmgr.use_keymgm(out.dst, out.src)) { - if (bu_flags & IP6_MH_BU_KEYM) { - ba_flags |= IP6_MH_BA_KEYM; - } else { - /* The remote MN does not support session mvt, - so we remove from the bce. */ - bce->flags &= ~IP6_MH_BU_KEYM; - cdbg( - "MN (%x:%x:%x:%x:%x:%x:%x:%x) does not support IKE session movement.\n", - NIP6ADDR(out.src)); - } - } else { - if (bu_flags & IP6_MH_BU_KEYM) { - /* Local policy does not allow using IKE movement */ - bce->flags &= ~IP6_MH_BU_KEYM; - cdbg( - "MN (%x:%x:%x:%x:%x:%x:%x:%x) would support IKE session movement," - " but local policy denies it.\n", - NIP6ADDR(out.src)); - } - } - - if (ba_flags & IP6_MH_BA_KEYM) { - /* FUTURE */ - /* Move the peer endpoint of the key management - * protocol connection, if any, to the new care-of - * address. For an IKE phase 1 connection, this means - * that any IKE packets sent to the peer are sent to - * this address, and packets from this address with - * the original ISAKMP cookies are accepted. */ - } else { - /* FUTURE */ - /* Discard key management connections, if any, to the - * old care-of address. If the mobile node did not - * have a binding before sending this Binding Update, - * discard the connections to the home address. */ - } - - if (status < IP6_MH_BAS_UNSPECIFIED && bu_flags & IP6_MH_BU_MR) - ba_flags |= IP6_MH_BA_MR; - - if (!(arg->flags & HA_BU_F_SKIP_BA)) - mh_send_ba(&out, status, ba_flags, seqno, &lft, NULL, iif); - - if (new && tsisset(lft)) - mpd_start_mpa(&bce->our_addr, &bce->peer_addr); - -out: - pthread_mutex_lock(&bu_worker_mutex); - - if (!list_empty(&bu_worker_list)) { - struct list_head *l = bu_worker_list.next; - list_del(l); - free(arg); - arg = list_entry(l, struct ha_recv_bu_args, list); - pthread_mutex_unlock(&bu_worker_mutex); - goto restart; - } - - if (--bu_worker_count == 0) - pthread_cond_signal(&cond); - - if (arg->flags & HA_BU_F_THREAD_JOIN) - *(arg->statusp) = status; - - free(arg); - pthread_mutex_unlock(&bu_worker_mutex); - pthread_exit(NULL); -send_nack: - - if (bce) { - bcache_release_entry(bce); - bcache_delete(out.src, out.dst); - } - - if (!(arg->flags & HA_BU_F_SKIP_BA)) - mh_send_ba_err(&out, status, 0, seqno, NULL, iif); - - goto out; -} - -/* After parsing, perform HA-specific checks on *home* bu */ -static inline int ha_home_bu_check(struct ip6_mh_binding_update *bu, - struct mh_options *mh_opts) -{ - if (!(bu->ip6mhbu_flags & IP6_MH_BU_HOME) || - mh_opt(&bu->ip6mhbu_hdr, mh_opts, IP6_MHOPT_NONCEID) != NULL || - mh_opt(&bu->ip6mhbu_hdr, mh_opts, IP6_MHOPT_BAUTH) != NULL) - return -1; - - return IP6_MH_BAS_ACCEPTED; -} - -/* Handle *Home* BU on HA (dispatch for received BU is done in BU handler) */ -int ha_recv_home_bu(const struct ip6_mh *mh, ssize_t len, - const struct in6_addr_bundle *in, int iif, - uint32_t flags) -{ - struct mh_options mh_opts; - struct in6_addr_bundle out; - struct ha_recv_bu_args *arg; - struct ip6_mh_binding_update *bu; - struct timespec lft; - int status; - pthread_t worker; - - statistics_inc(&mipl_stat, MIPL_STATISTICS_IN_BU); - - bu = (struct ip6_mh_binding_update *)mh; - - if (mh_bu_parse(bu, len, in, &out, &mh_opts, &lft) < 0) - return -EINVAL; - - if ((status = ha_home_bu_check(bu, &mh_opts)) < 0) - return -EINVAL; - - arg = malloc(sizeof(struct ha_recv_bu_args) + len); - - if (!arg) { - if (bce_exists(out.src, out.dst)) - bcache_delete(out.src, out.dst); - - if (!(arg->flags & HA_BU_F_SKIP_BA)) - mh_send_ba_err(&out, IP6_MH_BAS_INSUFFICIENT, 0, - ntohs(bu->ip6mhbu_seqno), NULL, iif); - - return -ENOMEM; - } - - arg->src = *out.src; - arg->dst = *out.dst; - - if (out.remote_coa) - arg->remote_coa = *out.remote_coa; - else - arg->remote_coa = in6addr_any; - - if (out.bind_coa) - arg->bind_coa = *out.bind_coa; - else - arg->bind_coa = in6addr_any; - - arg->bu = (struct ip6_mh_binding_update *)(arg + 1); - arg->len = len; - arg->mh_opts = mh_opts; - arg->lft = lft; - arg->iif = iif; - memcpy(arg->bu, bu, len); - arg->flags = flags; - arg->statusp = &status; - - pthread_mutex_lock(&bu_worker_mutex); - bu_worker_count++; - - if (pthread_create(&worker, NULL, ha_recv_bu_worker, arg)) { - free(arg); - - if (--bu_worker_count == 0) - pthread_cond_signal(&cond); - } else { - if (!(arg->flags & HA_BU_F_THREAD_JOIN)) - pthread_detach(worker); - } - - pthread_mutex_unlock(&bu_worker_mutex); - - if (arg->flags & HA_BU_F_THREAD_JOIN) { - pthread_join(worker, NULL); - return status; - } - - return 0; -} - -static void ha_recv_bu(const struct ip6_mh *mh, ssize_t len, - const struct in6_addr_bundle *in, int iif) -{ - struct ip6_mh_binding_update *bu = (struct ip6_mh_binding_update *)mh; - - if (bu->ip6mhbu_flags & IP6_MH_BU_PR) - pmip_lma_recv_pbu(mh, len, in, iif); - else if (bu->ip6mhbu_flags & IP6_MH_BU_HOME) - (void)ha_recv_home_bu(mh, len, in, iif, 0); - else - (void)cn_recv_bu(mh, len, in, iif); -} - -static struct mh_handler ha_bu_handler = { - .recv = ha_recv_bu, -}; - -int ha_init(void) -{ - pthread_mutexattr_t mattrs; - pthread_mutexattr_init(&mattrs); - pthread_mutexattr_settype(&mattrs, PTHREAD_MUTEX_FAST_NP); - - if (pthread_mutex_init(&bu_worker_mutex, &mattrs) || - pthread_cond_init(&cond, NULL)) - return -1; - -#ifdef ENABLE_VT - - if (ha_vt_init() < 0) - return -1; - -#endif - - if (homeagents_ifall_init() < 0) - return -1; - - if (ha_addr_setup() < 0) - return -1; - - if (dhaad_ha_init() < 0) - return -1; - - if (mpd_ha_init() < 0) - return -1; - - if (rule_add(NULL, RT6_TABLE_MIP6, - IP6_RULE_PRIO_MIP6_FWD, RTN_UNICAST, - &in6addr_any, 0, &in6addr_any, 0, 0) < 0) - return -1; - - icmp6_handler_reg(ND_ROUTER_ADVERT, &ha_ra_handler); - ha_discover_routers(); /* Let's gather RA */ - ha_proxy_nd_init(); - mh_handler_reg(IP6_MH_TYPE_BU, &ha_bu_handler); - pmip_lma_init(); - return 0; -} - -void ha_cleanup(void) -{ - pmip_cleanup(); - mh_handler_dereg(IP6_MH_TYPE_BU, &ha_bu_handler); - ha_proxy_nd_cleanup(); - icmp6_handler_dereg(ND_ROUTER_ADVERT, &ha_ra_handler); - pthread_mutex_lock(&bu_worker_mutex); - - if (bu_worker_count) - pthread_cond_wait(&cond, &bu_worker_mutex); - - pthread_mutex_unlock(&bu_worker_mutex); - bcache_flush(); - rule_del(NULL, RT6_TABLE_MIP6, - IP6_RULE_PRIO_MIP6_FWD, RTN_UNICAST, - &in6addr_any, 0, &in6addr_any, 0, 0); - mpd_ha_cleanup(); - dhaad_ha_cleanup(); -} diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/src/ha.h b/openair3/PMIPv6/pmipv6-daemon-umip/src/ha.h deleted file mode 100755 index 59f40e8d72..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/src/ha.h +++ /dev/null @@ -1,55 +0,0 @@ -/* $Id: ha.h 1.12 06/05/07 21:52:43+03:00 anttit@tcs.hut.fi $ */ - -#ifndef __HA_H__ -#define __HA_H__ 1 - -extern struct in6_addr ha_myaddr; -extern struct in6_addr ha_mnaddr; - -#include "tqueue.h" -#include "mh.h" - -struct ha_interface { - int ifindex; - struct list_head addr_list; - struct list_head ha_list; /* protected by ha_lock */ - uint16_t mpa_flags; /* protected by mpa_lock */ - struct list_head prefix_list; /* protected by mpa_lock */ - int prefix_count; /* protected by mpa_lock */ - struct list_head iflist; -}; - -struct home_agent { - struct list_head list; - struct in6_addr addr; - uint16_t preference; - uint16_t flags; - struct timespec lifetime; - struct ha_interface *iface; - struct tq_elem tqe; -}; - -struct ha_addr_holder { - struct list_head list; - struct in6_addr ha_addr; - struct in6_addr anycast_addr; -}; - - -int homeagents_ifall_init(void); -int homeagent_if_init(int ifindex); -struct ha_interface *ha_get_if(int ifindex); -struct ha_interface *ha_get_if_by_addr(const struct in6_addr *addr); -struct ha_interface *ha_get_if_by_anycast(const struct in6_addr *anycast, - struct in6_addr **addr); -int ha_recv_home_bu(const struct ip6_mh *mh, ssize_t len, - const struct in6_addr_bundle *in, int iif, uint32_t flags); -#define HA_BU_F_THREAD_JOIN 0x01 -#define HA_BU_F_PASSIVE_SEQ 0x02 -#define HA_BU_F_SKIP_DAD 0x04 -#define HA_BU_F_SKIP_BA 0x08 - -int ha_init(void); -void ha_cleanup(void); - -#endif /* __HA_H__ */ diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/src/hash.c b/openair3/PMIPv6/pmipv6-daemon-umip/src/hash.c deleted file mode 100755 index 1e6fcfdb8a..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/src/hash.c +++ /dev/null @@ -1,294 +0,0 @@ -/* - * $Id: hash.c 1.22 06/04/25 13:24:14+03:00 anttit@tcs.hut.fi $ - * - * This file is part of the MIPL Mobile IPv6 for Linux. - * - * Author: Henrik Petander - * - * Copyright 2003-2005 Go-Core Project - * Copyright 2003-2006 Helsinki University of Technology - * - * MIPL Mobile IPv6 for Linux is free software; you can redistribute - * it and/or modify it under the terms of the GNU General Public - * License as published by the Free Software Foundation; version 2 of - * the License. - * - * MIPL Mobile IPv6 for Linux is distributed in the hope that it will - * be useful, but WITHOUT ANY WARRANTY; without even the implied - * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with MIPL Mobile IPv6 for Linux; if not, write to the Free - * Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - * 02111-1307 USA - */ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include -#include -#include -#include -#include -#include -#include - -#include - -#include "debug.h" -#include "hash.h" -#include "util.h" - -/* Hash entry */ - -struct hash_entry { - struct in6_addr *our_addr; /* pointer to our_addr in data */ - struct in6_addr *peer_addr; /* pointer to peer_addr in data */ - struct hash_entry *next; - void *data; -}; - -static uint32_t calc_hash2(int s, const struct in6_addr *our_addr, - const struct in6_addr *peer_addr) -{ - assert(our_addr); - - return (our_addr->s6_addr32[0] ^ - our_addr->s6_addr32[1] ^ - our_addr->s6_addr32[2] ^ - our_addr->s6_addr32[3] ^ - peer_addr->s6_addr32[0] ^ - peer_addr->s6_addr32[1] ^ - peer_addr->s6_addr32[2] ^ - peer_addr->s6_addr32[3]) % s; - -} - -static uint32_t calc_hash1(int s, - __attribute__ ((unused)) const struct in6_addr *dummy, - const struct in6_addr *peer_addr) -{ - return (peer_addr->s6_addr32[0] ^ - peer_addr->s6_addr32[1] ^ - peer_addr->s6_addr32[2] ^ - peer_addr->s6_addr32[3]) % s; - -} - -static int match2(struct hash_entry *h, const struct in6_addr *our_addr, - const struct in6_addr *peer_addr) -{ - assert(h); - assert(our_addr && h->our_addr); - assert(peer_addr && h->peer_addr); -#ifdef DEBUG - char s[INET6_ADDRSTRLEN]; - printf("match 2: peer %s\n", inet_ntop(AF_INET6, peer_addr, s, sizeof(s))); - printf("h->peer %s\n", inet_ntop(AF_INET6, h->peer_addr, s, sizeof(s))); - printf("our_addr %s\n", inet_ntop(AF_INET6, our_addr, s, sizeof(s))); - printf("h->our_addr %s\n", inet_ntop(AF_INET6, h->our_addr, s, sizeof(s))); -#endif - - if (IN6_ARE_ADDR_EQUAL(h->peer_addr, peer_addr) && - IN6_ARE_ADDR_EQUAL(h->our_addr, our_addr)) { - return 1; - } - - return 0; - -} - -static int match1(struct hash_entry *h, - __attribute__ ((unused)) const struct in6_addr *dummy, - const struct in6_addr *peer_addr) -{ - assert(h); - assert(h->peer_addr && peer_addr); -#ifdef DEBUG - char s[INET6_ADDRSTRLEN]; - printf("match1: peer %s\n", inet_ntop(AF_INET6, peer_addr, s, sizeof(s))); - printf("h->peer %s\n", inet_ntop(AF_INET6, h->peer_addr, s, sizeof(s))); -#endif - - if (!IN6_ARE_ADDR_EQUAL(h->peer_addr, peer_addr)) - return 0; - - return 1; -} - -/* Caller must have reserved the memory for the hash */ -int hash_init(struct hash *h, int type, int buckets) -{ - assert(h); - assert(type == DOUBLE_ADDR || type == SINGLE_ADDR); - assert(buckets); - h->hash_buckets = (struct hash_entry **)malloc(buckets * sizeof(struct hash_entry *)); - - if (!h->hash_buckets) - return -ENOMEM; - - memset(h->hash_buckets, 0, buckets * sizeof(struct hash_entry *)); - h->type = type; - h->buckets = buckets; - - if (h->type == DOUBLE_ADDR) { - h->calc_hash = calc_hash2; - h->match = match2; - } else if (h->type == SINGLE_ADDR) { - h->calc_hash = calc_hash1; - h->match = match1; - } - - return 0; -} - -void hash_cleanup(struct hash *h) -{ - struct hash_entry *he, *tmp; - int i; - assert(h); - - for(i=0; i < h->buckets; i++) { - he = h->hash_buckets[i]; - - while(he) { - tmp = he; - he = he->next; - free(tmp); - } - } - - free(h->hash_buckets); -} - -void *hash_get(const struct hash *h, - const struct in6_addr *our_addr, - const struct in6_addr *peer_addr) -{ - struct hash_entry *hptr = NULL; - - assert(h); - assert(peer_addr); - - hptr = h->hash_buckets[h->calc_hash(h->buckets, our_addr , peer_addr)]; - - while(hptr) { - if (h->match(hptr, our_addr, peer_addr)) - return hptr->data; - - hptr = hptr->next; - } - - return NULL; -} - -int hash_add(const struct hash *h, void *data, - struct in6_addr *our_addr, struct in6_addr *peer_addr) -{ - struct hash_entry *hptr = NULL, *new; - uint32_t hash_ind; - - assert(h); - - if (h->type == DOUBLE_ADDR) - assert(our_addr); - - assert(peer_addr); - - if ((new = (struct hash_entry *)malloc(sizeof(struct hash_entry))) == NULL) { - dbg("out of memory\n"); - return -ENOMEM; - } - - new->our_addr = our_addr; - new->peer_addr = peer_addr; - new->data = data; - hash_ind = h->calc_hash(h->buckets, our_addr, peer_addr); - hptr = h->hash_buckets[hash_ind]; - - if (hptr) { - while (hptr->next) { - if (h->match(hptr, our_addr, peer_addr)) { - free(new); - return -EEXIST; - } - - hptr = hptr->next; - } - - hptr->next = new; - } else { - h->hash_buckets[hash_ind] = new; - } - - new->next = NULL; - return 0; -} - -int hash_iterate(const struct hash *h, int (*func)(void *, void *), void *arg) -{ - int err = 0; - int i; - struct hash_entry *hptr, *nptr; - - assert(func); - - for (i=0; i < h->buckets; i++) { - if((hptr = h->hash_buckets[i]) != NULL) { - while(hptr) { - nptr = hptr->next; - - if ((err = func(hptr->data, arg))) - return err; - - hptr = nptr; - } - } - } - - return 0; -} - -void hash_delete(const struct hash *h, - const struct in6_addr *our_addr, - const struct in6_addr *peer_addr) -{ - struct hash_entry *hptr, *pptr, *head; - int hash_ind; - - assert(h); - - if (h->type == DOUBLE_ADDR) assert(our_addr); - - assert(peer_addr); - - hash_ind = h->calc_hash(h->buckets, our_addr, peer_addr); - head = h->hash_buckets[hash_ind]; - - pptr = hptr = head; - - while (hptr) { - if (h->match(hptr, our_addr, peer_addr)) { - if (hptr != head) - pptr->next = hptr->next; - else { - /* First entry */ - h->hash_buckets[hash_ind] = hptr->next; - } - - hptr->data = NULL; - free(hptr); - hptr = NULL; - return; - } - - pptr = hptr; - hptr = hptr->next; - } - - /* Not found */ - return; -} diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/src/hash.h b/openair3/PMIPv6/pmipv6-daemon-umip/src/hash.h deleted file mode 100755 index 2c439add79..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/src/hash.h +++ /dev/null @@ -1,62 +0,0 @@ -/* $Id: hash.h 1.9 05/12/08 18:25:09+02:00 vnuorval@tcs.hut.fi $ */ - -#ifndef __HASH_H__ -#define __HASH_H__ 1 - -/* Types for hash */ -#define DOUBLE_ADDR 0 -#define SINGLE_ADDR 1 - -struct hash_entry; -struct in6_addr; - -/** Hash structure - * @buckets : number of buckets in hash - * @calc_hash: internal data - * @match: internal data - * @hash: array of hashbuckets - */ -struct hash { - int buckets; - int type; - uint32_t (*calc_hash)(int, const struct in6_addr *, const struct in6_addr *); - int (*match)(struct hash_entry *, const struct in6_addr *, const struct in6_addr *); - struct hash_entry **hash_buckets; -}; - -/** hash_init - initializes hash - * - * @h: uninitialized memory with enough space for hash - * @type: either double address, or single address - * @buckets: number of hashbuckets in hash - */ -int hash_init(struct hash *h, int type, int buckets); - -/** hash_cleanup - cleans up hash and all its entries - * - */ -void hash_cleanup(struct hash *h); -/* - * Get data stored in a hash entry based on one or two addresses, depending on type of hash - */ -void *hash_get(const struct hash *h, - const struct in6_addr *our_addr, - const struct in6_addr *peer_addr) ; - -/* Iterate through the hash and call func for every entry */ - -int hash_iterate(const struct hash *h, int (*func)(void *data, void *arg), void *arg); - -/* Add a hash entry to hash */ -int hash_add(const struct hash *h, void *data, - struct in6_addr *our_addr, struct in6_addr *peer_addr); - -/* - *Delete entry from hash - */ - -void hash_delete(const struct hash *h, - const struct in6_addr *our_addr, - const struct in6_addr *peer_addr); - -#endif /* _HASH_H */ diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/src/icmp6.c b/openair3/PMIPv6/pmipv6-daemon-umip/src/icmp6.c deleted file mode 100755 index 6f8f9fd5cd..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/src/icmp6.c +++ /dev/null @@ -1,534 +0,0 @@ -/* - * $Id: icmp6.c 1.42 06/05/06 15:15:47+03:00 anttit@tcs.hut.fi $ - * - * This file is part of the MIPL Mobile IPv6 for Linux. - * - * Authors: Antti Tuominen - * Ville Nuorvala - * - * Copyright 2003-2005 Go-Core Project - * Copyright 2003-2006 Helsinki University of Technology - * - * MIPL Mobile IPv6 for Linux is free software; you can redistribute - * it and/or modify it under the terms of the GNU General Public - * License as published by the Free Software Foundation; version 2 of - * the License. - * - * MIPL Mobile IPv6 for Linux is distributed in the hope that it will - * be useful, but WITHOUT ANY WARRANTY; without even the implied - * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with MIPL Mobile IPv6 for Linux; if not, write to the Free - * Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - * 02111-1307 USA. - */ -#ifdef HAVE_CONFIG_H -#include -#endif -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "icmp6.h" -#include "util.h" -#include "debug.h" -#include "conf.h" - -enum { - ICMP6_DU = 0, - ICMP6_PP = 1, - ICMP6_RA = 3, - ICMP6_NA = 4, - ICMP6_DRQ = 5, - ICMP6_DRP = 6, - ICMP6_MPS = 7, - ICMP6_MPA = 8, - ICMP6_NS = 9, - ICMP6_RS = 10, - __ICMP6_SENTINEL = 11 -}; - - -struct sock { - pthread_mutex_t send_mutex; - int fd; -}; - -static pthread_rwlock_t handler_lock; -static struct icmp6_handler *handlers[__ICMP6_SENTINEL + 1]; - -struct sock icmp6_sock; -static pthread_t icmp6_listener; - -static inline int icmp6_type_map(uint8_t type) -{ - switch (type) { - case ICMP6_DST_UNREACH: - return ICMP6_DU; - - case ICMP6_PARAM_PROB: - return ICMP6_PP; - - case ND_ROUTER_ADVERT: - return ICMP6_RA; - - case ND_NEIGHBOR_ADVERT: - return ICMP6_NA; - - case MIP_HA_DISCOVERY_REQUEST: - return ICMP6_DRQ; - - case MIP_HA_DISCOVERY_REPLY: - return ICMP6_DRP; - - case MIP_PREFIX_SOLICIT: - return ICMP6_MPS; - - case MIP_PREFIX_ADVERT: - return ICMP6_MPA; - - case ND_NEIGHBOR_SOLICIT: - return ICMP6_NS; - - case ND_ROUTER_SOLICIT: - return ICMP6_RS; - - default: - return __ICMP6_SENTINEL; - } -} - -static inline struct icmp6_handler *icmp6_handler_get(uint8_t type) -{ - return handlers[icmp6_type_map(type)]; -} - -void icmp6_handler_reg(uint8_t type, struct icmp6_handler *handler) -{ - int i = icmp6_type_map(type); - - assert(handler->next == NULL); - - pthread_rwlock_wrlock(&handler_lock); - handler->next = handlers[i]; - handlers[i] = handler; - pthread_rwlock_unlock(&handler_lock); -} - -void icmp6_handler_dereg(uint8_t type, struct icmp6_handler *handler) -{ - struct icmp6_handler **h; - int i = icmp6_type_map(type); - pthread_rwlock_wrlock(&handler_lock); - h = &handlers[i]; - - while (*h) { - if (*h == handler) { - *h = handler->next; - handler->next = NULL; - break; - } - - h = &(*h)->next; - } - - pthread_rwlock_unlock(&handler_lock); -} - -/** - * if_mc_group - join or leave multicast group - * @sock: socket - * @ifindex: interface to join/leave - * @mc_addr: multicast address - * @cmd: join/leave command - * - * Join/leave multicast group on interface. cmd must be either - * IPV6_JOIN_GROUP or IPV6_LEAVE_GROUP. Also turns off local - * multicast loopback. - **/ -int if_mc_group(int sock, int ifindex, const struct in6_addr *mc_addr, int cmd) -{ - unsigned int val = 0; - struct ipv6_mreq mreq; - int ret = 0; - - if (sock == ICMP6_MAIN_SOCK) - sock = icmp6_sock.fd; - - memset(&mreq, 0, sizeof(mreq)); - mreq.ipv6mr_interface = ifindex; - mreq.ipv6mr_multiaddr = *mc_addr; - - ret = setsockopt(sock, IPPROTO_IPV6, IPV6_MULTICAST_LOOP, - &val, sizeof(int)); - - if (ret < 0) return ret; - - return setsockopt(sock, IPPROTO_IPV6, cmd, &mreq, sizeof(mreq)); -} - -static void *icmp6_listen(__attribute__ ((unused)) void *arg) -{ - uint8_t msg[MAX_PKT_LEN]; - struct sockaddr_in6 addr; - struct in6_addr *saddr, *daddr; - struct in6_pktinfo pkt_info; - struct icmp6_hdr *ih; - int iif, hoplimit; - ssize_t len; - struct icmp6_handler *h; - - pthread_dbg("thread started"); - - while (1) { - pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL); - len = icmp6_recv(icmp6_sock.fd, msg, sizeof(msg), - &addr, &pkt_info, &hoplimit); - - /* check if socket has closed */ - if (len == -EBADF) - break; - - /* common validity check */ - if (len < 0 || (size_t)len < sizeof(struct icmp6_hdr)) - continue; - - saddr = &addr.sin6_addr; - daddr = &pkt_info.ipi6_addr; - iif = pkt_info.ipi6_ifindex; - - ih = (struct icmp6_hdr *)msg; - /* multiplex to right handler */ - pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, NULL); - pthread_rwlock_rdlock(&handler_lock); - - if ((h = icmp6_handler_get(ih->icmp6_type)) != NULL) - h->recv(ih, len, saddr, daddr, iif, hoplimit); - - pthread_rwlock_unlock(&handler_lock); - } - - pthread_exit(NULL); -} - -int icmp6_init(void) -{ - struct icmp6_filter filter; - pthread_mutexattr_t mattrs; - int val; - - icmp6_sock.fd = socket(AF_INET6, SOCK_RAW, IPPROTO_ICMPV6); - - if (icmp6_sock.fd < 0) { - syslog(LOG_ERR, - "Unable to open ICMPv6 socket! " - "Do you have root permissions?"); - return icmp6_sock.fd; - } - - val = 1; - - if (setsockopt(icmp6_sock.fd, IPPROTO_IPV6, IPV6_RECVPKTINFO, - &val, sizeof(val)) < 0) - return -1; - - if (setsockopt(icmp6_sock.fd, IPPROTO_IPV6, IPV6_RECVHOPLIMIT, - &val, sizeof(val)) < 0) - return -1; - - ICMP6_FILTER_SETBLOCKALL(&filter); - ICMP6_FILTER_SETPASS(ICMP6_DST_UNREACH, &filter); - - if (is_ha()) { - ICMP6_FILTER_SETPASS(MIP_PREFIX_SOLICIT, &filter); - ICMP6_FILTER_SETPASS(MIP_HA_DISCOVERY_REQUEST, &filter); - ICMP6_FILTER_SETPASS(ND_ROUTER_ADVERT, &filter); - } - - if (is_mn()) { - ICMP6_FILTER_SETPASS(ND_ROUTER_ADVERT, &filter); - ICMP6_FILTER_SETPASS(ND_NEIGHBOR_ADVERT, &filter); - ICMP6_FILTER_SETPASS(MIP_PREFIX_ADVERT, &filter); - ICMP6_FILTER_SETPASS(MIP_HA_DISCOVERY_REPLY, &filter); - ICMP6_FILTER_SETPASS(ICMP6_PARAM_PROB, &filter); - } - - if (is_mag()) { - ICMP6_FILTER_SETPASS(ND_NEIGHBOR_SOLICIT, &filter); - ICMP6_FILTER_SETPASS(ND_NEIGHBOR_ADVERT, &filter); - ICMP6_FILTER_SETPASS(ND_ROUTER_SOLICIT, &filter); - } - - if (setsockopt(icmp6_sock.fd, IPPROTO_ICMPV6, ICMP6_FILTER, - &filter, sizeof(struct icmp6_filter)) < 0) - return -1; - - val = 2; - - if (setsockopt(icmp6_sock.fd, IPPROTO_RAW, IPV6_CHECKSUM, - &val, sizeof(val)) < 0) - return -1; - - /* create ICMP listener thread */ - pthread_mutexattr_init(&mattrs); - pthread_mutexattr_settype(&mattrs, PTHREAD_MUTEX_FAST_NP); - - if (pthread_mutex_init(&icmp6_sock.send_mutex, &mattrs) || - pthread_rwlock_init(&handler_lock, NULL) || - pthread_create(&icmp6_listener, NULL, icmp6_listen, NULL)) - return -1; - - return 0; -} - -void *icmp6_create(struct iovec *iov, uint8_t type, uint8_t code) -{ - struct icmp6_hdr *hdr; - int msglen; - - switch (type) { - case ICMP6_DST_UNREACH: - case ICMP6_PACKET_TOO_BIG: - case ICMP6_TIME_EXCEEDED: - case ICMP6_PARAM_PROB: - msglen = sizeof(struct icmp6_hdr); - break; - - case ND_ROUTER_SOLICIT: - msglen = sizeof(struct nd_router_solicit); - break; - - case ND_ROUTER_ADVERT: - msglen = sizeof(struct nd_router_advert); - break; - - case ND_NEIGHBOR_SOLICIT: - msglen = sizeof(struct nd_neighbor_solicit); - break; - - case ND_NEIGHBOR_ADVERT: - msglen = sizeof(struct nd_neighbor_advert); - break; - - case ND_REDIRECT: - msglen = sizeof(struct nd_redirect); - break; - - default: - msglen = sizeof(struct icmp6_hdr); - } - - hdr = malloc(msglen); - - if (hdr == NULL) - return NULL; - - memset(hdr, 0, msglen); - hdr->icmp6_type = type; - hdr->icmp6_code = code; - iov->iov_base = hdr; - iov->iov_len = msglen; - - return hdr; -} - -int icmp6_send(int oif, uint8_t hoplimit, - const struct in6_addr *src, const struct in6_addr *dst, - struct iovec *datav, size_t iovlen) -{ - struct sockaddr_in6 daddr; - struct msghdr msg; - struct cmsghdr *cmsg; - struct in6_pktinfo pinfo; - int cmsglen, ret = 0, on = 1, hops; - - hops = (hoplimit == 0) ? 64 : hoplimit; - - memset(&daddr, 0, sizeof(struct sockaddr_in6)); - daddr.sin6_family = AF_INET6; - daddr.sin6_addr = *dst; - daddr.sin6_port = htons(IPPROTO_ICMPV6); - - memset(&pinfo, 0, sizeof(pinfo)); - pinfo.ipi6_addr = *src; - - if (oif > 0) - pinfo.ipi6_ifindex = oif; - - cmsglen = CMSG_SPACE(sizeof(pinfo)); - cmsg = malloc(cmsglen); - - if (cmsg == NULL) { - dbg("out of memory\n"); - return -ENOMEM; - } - - cmsg->cmsg_len = CMSG_LEN(sizeof(pinfo)); - cmsg->cmsg_level = IPPROTO_IPV6; - cmsg->cmsg_type = IPV6_PKTINFO; - memcpy(CMSG_DATA(cmsg), &pinfo, sizeof(pinfo)); - - msg.msg_control = cmsg; - msg.msg_controllen = cmsglen; - msg.msg_iov = datav; - msg.msg_iovlen = iovlen; - msg.msg_name = (void *)&daddr; - msg.msg_namelen = CMSG_SPACE(sizeof(struct in6_pktinfo)); - - pthread_mutex_lock(&icmp6_sock.send_mutex); - setsockopt(icmp6_sock.fd, IPPROTO_IPV6, IPV6_PKTINFO, - &on, sizeof(int)); - setsockopt(icmp6_sock.fd, IPPROTO_IPV6, IPV6_UNICAST_HOPS, - &hops, sizeof(hops)); - setsockopt(icmp6_sock.fd, IPPROTO_IPV6, IPV6_MULTICAST_HOPS, - &hops, sizeof(hops)); - - ret = sendmsg(icmp6_sock.fd, &msg, 0); - - if (ret < 0) - dbg("sendmsg: %s\n", strerror(errno)); - - pthread_mutex_unlock(&icmp6_sock.send_mutex); - - free(cmsg); - - return ret; -} - -#define CMSG_BUF_LEN 128 - -ssize_t icmp6_recv(int sockfd, unsigned char *msg, size_t msglen, - struct sockaddr_in6 *addr, struct in6_pktinfo *pkt_info, - int *hoplimit) -{ - struct msghdr mhdr; - struct cmsghdr *cmsg; - struct iovec iov; - static unsigned char chdr[CMSG_BUF_LEN]; - ssize_t len; - - iov.iov_len = msglen; - iov.iov_base = (unsigned char *) msg; - - mhdr.msg_name = (void *)addr; - mhdr.msg_namelen = sizeof(struct sockaddr_in6); - mhdr.msg_iov = &iov; - mhdr.msg_iovlen = 1; - mhdr.msg_control = (void *)chdr; - mhdr.msg_controllen = CMSG_BUF_LEN; - - if ((len = recvmsg(sockfd, &mhdr, 0)) < 0) - return -errno; - - for (cmsg = CMSG_FIRSTHDR(&mhdr); cmsg; - cmsg = CMSG_NXTHDR(&mhdr, cmsg)) { - if (cmsg->cmsg_level != IPPROTO_IPV6) - continue; - - switch(cmsg->cmsg_type) { - case IPV6_HOPLIMIT: - memcpy(hoplimit, CMSG_DATA(cmsg), sizeof(*hoplimit)); - break; - - case IPV6_PKTINFO: - memcpy(pkt_info, CMSG_DATA(cmsg), sizeof(*pkt_info)); - break; - } - } - - return len; -} - -struct ip6_subopt_hdr { - u_int8_t opttype; - u_int8_t optlen; -}; - -int icmp6_parse_data(struct ip6_hdr *ip6h, unsigned int len, - struct in6_addr **lhoa, struct in6_addr **rhoa) -{ - uint8_t *data = (uint8_t *)ip6h; - unsigned int hoff = sizeof(struct ip6_hdr); - uint8_t htype; - - if (len < hoff) - return -1; - - htype = ip6h->ip6_nxt; - - /* The minumum length of an extension header is eight octets, - so check that we at least have room for that */ - while (hoff + 8 < len) { - struct ip6_ext *h = (struct ip6_ext *) (data + hoff); - unsigned int hlen = (h->ip6e_len + 1) << 3; - - if (htype != IPPROTO_DSTOPTS && - htype != IPPROTO_ROUTING && - htype != IPPROTO_HOPOPTS) - return 0; - - if (len < hoff + hlen) - return -1; - - if (htype == IPPROTO_DSTOPTS) { - uint8_t *odata = (uint8_t *) h; - uint32_t ooff = 2; - - while (ooff < hlen) { - struct ip6_subopt_hdr *o; - o = (struct ip6_subopt_hdr *) (odata + ooff); - - if (o->opttype == IP6OPT_PAD0) { - ooff++; - continue; - } - - /* invalid TLV option length */ - if (hlen < ooff + 2 || - hlen < ooff + 2 + o->optlen) - break; - - if (o->opttype == IP6OPT_HOME_ADDRESS && - o->optlen == sizeof(struct in6_addr)) { - *lhoa = (struct in6_addr *) (o + 1); - dbg("HAO %x:%x:%x:%x:%x:%x:%x:%x\n", - NIP6ADDR(*lhoa)); - break; - } - - ooff += 2 + o->optlen; - } - } else if (htype == IPPROTO_ROUTING) { - struct ip6_rthdr2 *rth = (struct ip6_rthdr2 *) h; - - if (rth->ip6r2_type == 2 && - rth->ip6r2_len == 2 && rth->ip6r2_segleft == 1) - *rhoa = &rth->ip6r2_homeaddr; - - dbg("RTH2 %x:%x:%x:%x:%x:%x:%x:%x\n", NIP6ADDR(*rhoa)); - } else if (htype != IPPROTO_HOPOPTS) { - return 0; - } - - hoff += hlen; - htype = h->ip6e_nxt; - } - - return 0; -} - -void icmp6_cleanup(void) -{ - close(icmp6_sock.fd); - pthread_cancel(icmp6_listener); - pthread_join(icmp6_listener, NULL); -} diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/src/icmp6.h b/openair3/PMIPv6/pmipv6-daemon-umip/src/icmp6.h deleted file mode 100755 index aebd570406..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/src/icmp6.h +++ /dev/null @@ -1,43 +0,0 @@ -/* $Id: icmp6.h 1.17 06/05/07 21:52:43+03:00 anttit@tcs.hut.fi $ */ - -#ifndef __ICMP6_H__ -#define __ICMP6_H__ 1 - -#include - -struct icmp6_handler { - struct icmp6_handler *next; - void (* recv)(const struct icmp6_hdr *ih, - ssize_t len, - const struct in6_addr *src, - const struct in6_addr *dst, - int iif, - int hoplimit); -}; - -#define ICMP6_MAIN_SOCK -1 - -int if_mc_group(int sock, int ifindex, const struct in6_addr *mc_addr, - int cmd); - -void icmp6_handler_reg(uint8_t type, struct icmp6_handler *handler); -void icmp6_handler_dereg(uint8_t type, struct icmp6_handler *handler); - -int icmp6_init(void); -void icmp6_cleanup(void); - -int icmp6_send(int oif, uint8_t hoplimit, const struct in6_addr *src, - const struct in6_addr *dst, struct iovec *datav, size_t iovlen); - -ssize_t icmp6_recv(int sock, unsigned char *msg, size_t msglen, - struct sockaddr_in6 *addr, struct in6_pktinfo *pkt_info, - int *hoplimit); - -void *icmp6_create(struct iovec *iov, uint8_t type, uint8_t code); - -struct ip6_hdr; - -int icmp6_parse_data(struct ip6_hdr *ip6h, unsigned int len, - struct in6_addr **lhoa, struct in6_addr **rhoa); - -#endif diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/src/ipsec.c b/openair3/PMIPv6/pmipv6-daemon-umip/src/ipsec.c deleted file mode 100755 index b9b78c4e02..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/src/ipsec.c +++ /dev/null @@ -1,1487 +0,0 @@ -/* - * $Id: ipsec.c 1.52 06/05/15 18:34:56+03:00 vnuorval@tcs.hut.fi $ - * - * This file is part of the MIPL Mobile IPv6 for Linux. - * - * Authors: - * Shinta Sugimoto - * - * Copyright 2004-2005 USAGI/WIDE Project - * - * MIPL Mobile IPv6 for Linux is free software; you can redistribute - * it and/or modify it under the terms of the GNU General Public - * License as published by the Free Software Foundation; version 2 of - * the License. - * - * MIPL Mobile IPv6 for Linux is distributed in the hope that it will - * be useful, but WITHOUT ANY WARRANTY; without even the implied - * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with MIPL Mobile IPv6 for Linux; if not, write to the Free - * Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - * 02111-1307 USA. - */ - -/* - * Special thanks to Francis Dupont who initially had the idea of making - * PF_KEY extension as an interface between Mobile IPv6 and IPsec/IKE - */ - -#ifdef HAVE_CONFIG_H -#include -#endif -#include -#include -#include -#include -#include - -#include -#include -#include - -#include -#include -#include - -#include "ipsec.h" -#include "xfrm.h" -#include "conf.h" -#include "bul.h" -#include "util.h" -#include "mn.h" -#include "rtnl.h" -#include "debug.h" - -static void _set_tmpl(struct xfrm_user_tmpl *tmpl, - uint16_t family, - uint8_t proto, - uint8_t mode, - const struct in6_addr *tdst, - const struct in6_addr *tsrc, - uint32_t reqid) -{ - memset(tmpl, 0, sizeof(*tmpl)); - tmpl->family = family; - tmpl->ealgos = ~(uint32_t)0; - tmpl->aalgos = ~(uint32_t)0; - tmpl->id.proto = proto; - tmpl->optional = 0; - tmpl->mode = mode; - tmpl->reqid = reqid; - - if (mode == XFRM_MODE_TUNNEL && tdst) - memcpy(&tmpl->id.daddr, tdst, sizeof(tmpl->id.daddr)); - - if (mode == XFRM_MODE_TUNNEL && tsrc) - memcpy(&tmpl->saddr, tsrc, sizeof(tmpl->saddr)); -} - -static void _set_sp(struct xfrm_userpolicy_info *sp, - struct ipsec_policy_entry *e, - int dir, - const struct in6_addr *in6_dst, - int dst_len, - const struct in6_addr *in6_src, - int src_len, - __attribute__ ((unused)) int ifindex, - int nodetype) -{ - assert(sp); - assert(e); - assert(in6_dst); - assert(in6_src); - - memset(sp, 0, sizeof(*sp)); - - sp->sel.family = AF_INET6; - sp->dir = dir; - sp->action = e->action; - memcpy(&sp->sel.saddr.a6, in6_src, sizeof(sp->sel.saddr.a6)); - memcpy(&sp->sel.daddr.a6, in6_dst, sizeof(sp->sel.daddr.a6)); - sp->sel.prefixlen_s = src_len; - - if (!src_len && (!IN6_ARE_ADDR_EQUAL(in6_src, &in6addr_any))) - sp->sel.prefixlen_s = 128; - - sp->sel.prefixlen_d = dst_len; - - if (!dst_len && (!IN6_ARE_ADDR_EQUAL(in6_dst, &in6addr_any))) - sp->sel.prefixlen_d = 128; - - sp->sel.ifindex = 0; - - switch (e->type) { - /* Tunnel */ - case IPSEC_POLICY_TYPE_TUNNELHOMETESTING: - if (dir == XFRM_POLICY_IN || dir == XFRM_POLICY_FWD) { - if (nodetype == MIP6_ENTITY_MN) { - sp->sel.sport = htons(IP6_MH_TYPE_HOT); - sp->sel.sport_mask = ~((__u16)0); - } else if (nodetype == MIP6_ENTITY_HA) { - sp->sel.sport = htons(IP6_MH_TYPE_HOTI); - sp->sel.sport_mask = ~((__u16)0); - } else - sp->sel.sport = 0; - } else if (dir == XFRM_POLICY_OUT) { - if (nodetype == MIP6_ENTITY_MN) { - sp->sel.sport = htons(IP6_MH_TYPE_HOTI); - sp->sel.sport_mask = ~((__u16)0); - } else if (nodetype == MIP6_ENTITY_HA) { - sp->sel.sport = htons(IP6_MH_TYPE_HOT); - sp->sel.sport_mask = ~((__u16)0); - } else - sp->sel.sport = 0; - } else { - sp->sel.sport = 0; - } - - sp->sel.proto = IPPROTO_MH; - sp->priority = MIP6_PRIO_RO_SIG_RR; - break; - - case IPSEC_POLICY_TYPE_TUNNELMH: - sp->sel.proto = IPPROTO_MH; - sp->priority = MIP6_PRIO_RO_SIG_RR; - break; - - case IPSEC_POLICY_TYPE_TUNNELPAYLOAD: - sp->priority = MIP6_PRIO_RO_SIG_RR; - break; - - /* Transport */ - case IPSEC_POLICY_TYPE_HOMEREGBINDING: - if (dir == XFRM_POLICY_IN) { - if (nodetype == MIP6_ENTITY_MN) { - sp->sel.sport = htons(IP6_MH_TYPE_BACK); - sp->sel.sport_mask = ~((__u16)0); - } else if (nodetype == MIP6_ENTITY_HA) { - sp->sel.sport = htons(IP6_MH_TYPE_BU); - sp->sel.sport_mask = ~((__u16)0); - } else - sp->sel.sport = 0; - } else if (dir == XFRM_POLICY_OUT) { - if (nodetype == MIP6_ENTITY_MN) { - sp->sel.sport = htons(IP6_MH_TYPE_BU); - sp->sel.sport_mask = ~((__u16)0); - } else if (nodetype == MIP6_ENTITY_HA) { - sp->sel.sport = htons(IP6_MH_TYPE_BACK); - sp->sel.sport_mask = ~((__u16)0); - } else - sp->sel.sport = 0; - } else { - sp->sel.sport = 0; - } - - case IPSEC_POLICY_TYPE_MH: - sp->sel.proto = IPPROTO_MH; - sp->priority = MIP6_PRIO_HOME_SIG; - break; - - case IPSEC_POLICY_TYPE_BERROR: - sp->sel.proto = IPPROTO_MH; - sp->priority = MIP6_PRIO_HOME_SIG; - break; - - case IPSEC_POLICY_TYPE_MOBPFXDISC: - if (dir == XFRM_POLICY_IN) { - if (nodetype == MIP6_ENTITY_MN) { - sp->sel.sport = htons(MIP_PREFIX_ADVERT); - sp->sel.sport_mask = ~((__u16)0); - } else if (nodetype == MIP6_ENTITY_HA) { - sp->sel.sport = htons(MIP_PREFIX_SOLICIT); - sp->sel.sport_mask = ~((__u16)0); - } else - sp->sel.sport = 0; - } else if (dir == XFRM_POLICY_OUT) { - if (nodetype == MIP6_ENTITY_MN) { - sp->sel.sport = htons(MIP_PREFIX_SOLICIT); - sp->sel.sport_mask = ~((__u16)0); - } else if (nodetype == MIP6_ENTITY_HA) { - sp->sel.sport = htons(MIP_PREFIX_ADVERT); - sp->sel.sport_mask = ~((__u16)0); - } else - sp->sel.sport = 0; - } else { - sp->sel.sport = 0; - } - - sp->sel.proto = IPPROTO_ICMPV6; - sp->priority = MIP6_PRIO_HOME_DATA_IPSEC; - break; - - case IPSEC_POLICY_TYPE_NDISC: /* XXX Makes sense ? --arno */ - if (dir == XFRM_POLICY_IN) { - if (nodetype == MIP6_ENTITY_MN) { - sp->sel.sport = htons(ND_NEIGHBOR_SOLICIT); - sp->sel.sport_mask = ~((__u16)0); - } else if (nodetype == MIP6_ENTITY_HA) { - sp->sel.sport = htons(ND_NEIGHBOR_ADVERT); - sp->sel.sport_mask = ~((__u16)0); - } else - sp->sel.sport = 0; - } else if (dir == XFRM_POLICY_OUT) { - if (nodetype == MIP6_ENTITY_MN) { - sp->sel.sport = htons(ND_NEIGHBOR_ADVERT); - sp->sel.sport_mask = ~((__u16)0); - } else if (nodetype == MIP6_ENTITY_HA) { - sp->sel.sport = htons(MIP_PREFIX_SOLICIT); - sp->sel.sport_mask = ~((__u16)0); - } else - sp->sel.sport = 0; - } else { - sp->sel.sport = 0; - } - - sp->sel.proto = IPPROTO_ICMPV6; - sp->priority = MIP6_PRIO_HOME_SIG; - break; - - case IPSEC_POLICY_TYPE_ICMP: - sp->sel.proto = IPPROTO_ICMPV6; - sp->priority = MIP6_PRIO_HOME_DATA_IPSEC; - break; - - case IPSEC_POLICY_TYPE_ANY: - sp->priority = MIP6_PRIO_HOME_DATA_IPSEC; - break; - - default: - /* not tunnel IPsec type */ - break; - } - - return; -} - -#ifdef XFRM_MSG_MIGRATE -/* - * xfrm_sendmigrate -- send MIGRATE message to the kernel - * - * @sp: security policy - * @tmpl: template which includes key information {proto, mode, reqid, - * old_dst, old_src} for MIGRATE message - * @ndst: new destination address - * @nsrc: new source address - * - * return value: - * success: 0 - * failure: -1 - */ -static int xfrm_sendmigrate(struct xfrm_userpolicy_info *sp, - const struct xfrm_user_tmpl *tmpl, - const struct in6_addr *ndst, - const struct in6_addr *nsrc) -{ - struct { - struct nlmsghdr n; - struct xfrm_userpolicy_id xpid; - char buf[256]; - } req; - struct xfrm_user_migrate um; - struct xfrm_user_kmaddress kma; - int err = 0; - - memset(&req, 0, sizeof(req)); - memset(&um, 0, sizeof(um)); - - req.n.nlmsg_len = NLMSG_LENGTH(sizeof(req.xpid)); - req.n.nlmsg_flags = NLM_F_REQUEST; - req.n.nlmsg_type = XFRM_MSG_MIGRATE; - - /* policy information */ - memset(&req.xpid, 0, sizeof(req.xpid)); - memcpy(&req.xpid.sel, &sp->sel, sizeof(req.xpid.sel)); - req.xpid.index = 0; - req.xpid.dir = sp->dir; - - /* migrate */ - um.old_family = AF_INET6; - um.new_family = AF_INET6; - um.proto = tmpl->id.proto; - um.mode = tmpl->mode; - um.reqid = tmpl->reqid; - - memcpy(&um.old_daddr, &tmpl->id.daddr, sizeof(um.old_daddr)); - memcpy(&um.old_saddr, &tmpl->saddr, sizeof(um.old_saddr)); - memcpy(&um.new_daddr, ndst, sizeof(um.new_daddr)); - memcpy(&um.new_saddr, nsrc, sizeof(um.new_saddr)); - - addattr_l(&req.n, sizeof(req), XFRMA_MIGRATE, - (void *)&um, sizeof(struct xfrm_user_migrate)); - - /* kmaddress */ - kma.family = AF_INET6; - kma.reserved = 0; - - if (sp->dir == XFRM_POLICY_OUT) { - memcpy(&kma.local, nsrc, sizeof(kma.local)); - memcpy(&kma.remote, ndst, sizeof(kma.remote)); - } else { - memcpy(&kma.local, ndst, sizeof(kma.local)); - memcpy(&kma.remote, nsrc, sizeof(kma.remote)); - } - - - addattr_l(&req.n, sizeof(req), XFRMA_KMADDRESS, - (void *)&kma, sizeof(struct xfrm_user_kmaddress)); - -#if 0 - dbg("sel.family = %d\n", xpid.sel.family); - dbg("sel.saddr = %x:%x:%x:%x:%x:%x:%x:%x\n", - NIP6ADDR((struct in6_addr *)&xpid.sel.saddr)); - dbg("sel.prefixlen_s = %d\n", xpid.sel.prefixlen_s); - dbg("sel.sport = %d\n", xpid.sel.sport); - dbg("sel.sport_mask = %d\n", xpid.sel.sport_mask); - dbg("sel.daddr = %x:%x:%x:%x:%x:%x:%x:%x\n", - NIP6ADDR((struct in6_addr *)&xpid.sel.daddr)); - dbg("sel.prefixlen_d = %d\n", xpid.sel.prefixlen_d); - dbg("sel.dport = %d\n", xpid.sel.dport); - dbg("sel.dport_mask = %d\n", xpid.sel.dport_mask); - dbg("sel.proto = %d\n", xpid.sel.proto); - dbg("sel.ifindex = %d\n", xpid.sel.ifindex); - dbg("sel.user = %d\n", xpid.sel.user); -#endif - - err = rtnl_xfrm_do(&req.n, NULL); - - if (err < 0) - dbg("err = %d (%s)\n", err, strerror(-err)); - - return ((err == 0 || err == -ENOENT) ? 0 : -1); -} -#else -static int xfrm_sendmigrate(struct xfrm_userpolicy_info *sp, - const struct xfrm_user_tmpl *tmpl, - const struct in6_addr *ndst, - const struct in6_addr *nsrc) -{ - dbg("Error because it is built without XFRM_MSG_MIGRATE\n"); - return -1; -} -#endif - -int ipsec_policy_apply(const struct in6_addr *haaddr, - const struct in6_addr *hoa, - int (* func)(const struct in6_addr *haaddr, - const struct in6_addr *hoa, - struct ipsec_policy_entry *e, void *arg), - void *arg) -{ - struct list_head *lp; - int ret = 0; - - list_for_each(lp, &conf.ipsec_policies) { - struct ipsec_policy_entry *e; - - e = list_entry(lp, struct ipsec_policy_entry, list); - - if (haaddr && !IN6_ARE_ADDR_EQUAL(haaddr, &e->ha_addr)) - continue; - - if (hoa && !IN6_ARE_ADDR_EQUAL(hoa, &e->mn_addr)) - continue; - - ret = func(&e->ha_addr, &e->mn_addr, e, arg); - - if (ret) - break; - } - return ret; -} - -int ipsec_policy_dump_config(const struct in6_addr *haaddr, - const struct in6_addr *hoa, - struct ipsec_policy_entry *e, - __attribute__ ((unused)) void *arg) -{ - dbg("IPsec: HA address = %x:%x:%x:%x:%x:%x:%x:%x\n", NIP6ADDR(haaddr)); - dbg("IPsec: Home address = %x:%x:%x:%x:%x:%x:%x:%x\n", NIP6ADDR(hoa)); - - dbg("IPsec: IPsec type = %s\n", - (e->type == IPSEC_POLICY_TYPE_HOMEREGBINDING) ? "HomeRegBinding" : - (e->type == IPSEC_POLICY_TYPE_MH) ? "Mh" : - (e->type == IPSEC_POLICY_TYPE_MOBPFXDISC) ? "MobPfxDisc" : - (e->type == IPSEC_POLICY_TYPE_ICMP) ? "ICMP" : - (e->type == IPSEC_POLICY_TYPE_ANY) ? "any" : - (e->type == IPSEC_POLICY_TYPE_TUNNELHOMETESTING) ? "TunnelHomeTesting" : - (e->type == IPSEC_POLICY_TYPE_TUNNELMH) ? "TunnelMh" : - (e->type == IPSEC_POLICY_TYPE_TUNNELPAYLOAD) ? "TunnelPayload" : "?"); - dbg("IPsec: IPsec templates = %s%s%s\n", - ipsec_use_esp(e) ? "ESP " : "", - ipsec_use_ah(e) ? "AH " : "", - ipsec_use_ipcomp(e) ? "IPComp " : ""); - dbg("IPsec: IPsec reqid to-HA, to-MN = %u, %u\n", e->reqid_toha, e->reqid_tomn); - dbg("IPsec: IPsec action = %s\n", - e->action == XFRM_POLICY_ALLOW ? "allow" : "block"); - dbg("IPsec: ---\n"); - - return 0; -} - -static void dump_migrate(int ifindex, - u_int8_t ipsec_proto, - const struct in6_addr *hoa, - const struct in6_addr *haaddr, - const struct in6_addr *oldcoa, - const struct in6_addr *newcoa) -{ - dbg("ifindex\t%d\n", ifindex); - dbg("hoa\t%x:%x:%x:%x:%x:%x:%x:%x\n", NIP6ADDR(hoa)); - dbg("ha\t%x:%x:%x:%x:%x:%x:%x:%x\n", NIP6ADDR(haaddr)); - - if (oldcoa) - dbg("ocoa\t%x:%x:%x:%x:%x:%x:%x:%x\n", NIP6ADDR(oldcoa)); - - if (newcoa) - dbg("ncoa\t%x:%x:%x:%x:%x:%x:%x:%x\n", NIP6ADDR(newcoa)); - - dbg("ipsec\t%s\n", - (ipsec_proto == IPPROTO_ESP) ? "ESP" : - (ipsec_proto == IPPROTO_AH) ? "AH" : - (ipsec_proto == IPPROTO_COMP) ? "IPComp" : "?"); - - return; -} - -int ipsec_policy_walk(int (* func)(const struct in6_addr *haaddr, - const struct in6_addr *hoa, - struct ipsec_policy_entry *e, void *arg), - void *arg) -{ - return ipsec_policy_apply(NULL, NULL, func, arg); -} - -int ipsec_policy_entry_check(const struct in6_addr *haaddr, - const struct in6_addr *hoa, - int type) -{ - struct list_head *lp; - int ret = 0; - - list_for_each(lp, &conf.ipsec_policies) { - struct ipsec_policy_entry *e; - - e = list_entry(lp, struct ipsec_policy_entry, list); - - if ((haaddr && !IN6_ARE_ADDR_EQUAL(haaddr, &e->ha_addr)) || - (hoa && !IN6_ARE_ADDR_EQUAL(hoa, &e->mn_addr))) - continue; - - if (e->type & type) { - ret = e->ipsec_protos; - break; - } - } - return ret; -} - -struct ha_ipsec_tnl_update { - int tunnel; - struct in6_addr coa; - struct in6_addr old_coa; - struct list_head *mnp; -}; - -/* - * Tunnel Update (for HA) - * - * NOTE: - * - This is a hook routine to ipsec_policy_apply() - */ -static int _ha_tnl_update(const struct in6_addr *haaddr, - const struct in6_addr *hoa, - struct ipsec_policy_entry *e, - void *arg) -{ - int err = 0; - struct ha_ipsec_tnl_update *info = (struct ha_ipsec_tnl_update *)arg; - int ifindex; - const struct in6_addr *oldcoa, *newcoa; - const struct in6_addr *peer_addr = hoa; - struct list_head *mnp; - u_int8_t ipsec_proto; - struct xfrm_user_tmpl tmpl; - struct xfrm_userpolicy_info sp; - - assert(haaddr); - assert(hoa); - assert(e); - assert(arg); - - switch (e->type) { - case IPSEC_POLICY_TYPE_TUNNELHOMETESTING: - case IPSEC_POLICY_TYPE_TUNNELMH: - case IPSEC_POLICY_TYPE_TUNNELPAYLOAD: - break; - - default: - goto end; - } - - /* XXX Limitation: Single IPsec proto can only be applied */ - if (ipsec_use_esp(e)) - ipsec_proto = IPPROTO_ESP; - else if (ipsec_use_ah(e)) - ipsec_proto = IPPROTO_AH; - else if (ipsec_use_ipcomp(e)) - ipsec_proto = IPPROTO_COMP; - else { - dbg("invalid ipsec proto\n"); - goto end; - } - - ifindex = info->tunnel; - oldcoa = IN6_ARE_ADDR_EQUAL(&info->old_coa, &in6addr_any) ? - peer_addr : &info->old_coa; - newcoa = &info->coa; - mnp = info->mnp; - - dump_migrate(ifindex, ipsec_proto, hoa, haaddr, oldcoa, newcoa); - - /* inbound */ - _set_tmpl(&tmpl, 0, ipsec_proto, XFRM_MODE_TUNNEL, - haaddr, oldcoa, e->reqid_toha); - _set_sp(&sp, e, XFRM_POLICY_IN, &in6addr_any, 0, hoa, 0, - ifindex, MIP6_ENTITY_HA); - - if ((err = xfrm_sendmigrate(&sp, &tmpl, haaddr, newcoa)) < 0) { - dbg("migrate for INBOUND policy failed\n"); - goto end; - } - - /* forward */ - _set_tmpl(&tmpl, 0, ipsec_proto, XFRM_MODE_TUNNEL, - haaddr, oldcoa, e->reqid_toha); - _set_sp(&sp, e, XFRM_POLICY_FWD, &in6addr_any, 0, hoa, 0, - ifindex, MIP6_ENTITY_HA); - - if ((err = xfrm_sendmigrate(&sp, &tmpl, haaddr, newcoa)) < 0) { - dbg("migrate for FORWARD policy failed\n"); - goto end; - } - - /* outbound */ - _set_tmpl(&tmpl, 0, ipsec_proto, XFRM_MODE_TUNNEL, - oldcoa, haaddr, e->reqid_tomn); - _set_sp(&sp, e, XFRM_POLICY_OUT, hoa, 0, &in6addr_any, 0, - ifindex, MIP6_ENTITY_HA); - - if ((err = xfrm_sendmigrate(&sp, &tmpl, newcoa, haaddr)) < 0) { - dbg("migrate for OUTBOUND policy failed\n"); - goto end; - } - - /* Mobile router case */ - if ( (e->type == IPSEC_POLICY_TYPE_TUNNELPAYLOAD) && mnp) { - struct list_head *list; - - /* We have to modify rules to protect traffic to and from MNP's, the same way as HoA */ - list_for_each(list, mnp) { - struct prefix_list_entry *p; - p = list_entry(list, struct prefix_list_entry, list); - - /* inbound */ - _set_tmpl(&tmpl, 0, ipsec_proto, XFRM_MODE_TUNNEL, - haaddr, oldcoa, e->reqid_toha); - _set_sp(&sp, e, XFRM_POLICY_IN, &in6addr_any, 0, &p->ple_prefix, p->ple_plen, - ifindex, MIP6_ENTITY_HA); - - if ((err = xfrm_sendmigrate(&sp, &tmpl, haaddr, newcoa)) < 0) { - dbg("migrate for INBOUND policy failed\n"); - goto end; - } - - /* forward */ - _set_tmpl(&tmpl, 0, ipsec_proto, XFRM_MODE_TUNNEL, - haaddr, oldcoa, e->reqid_toha); - _set_sp(&sp, e, XFRM_POLICY_FWD, &in6addr_any, 0, &p->ple_prefix, p->ple_plen, - ifindex, MIP6_ENTITY_HA); - - if ((err = xfrm_sendmigrate(&sp, &tmpl, haaddr, newcoa)) < 0) { - dbg("migrate for FORWARD policy failed\n"); - goto end; - } - - /* outbound */ - _set_tmpl(&tmpl, 0, ipsec_proto, XFRM_MODE_TUNNEL, - oldcoa, haaddr, e->reqid_tomn); - _set_sp(&sp, e, XFRM_POLICY_OUT, &p->ple_prefix, p->ple_plen, &in6addr_any, 0, - ifindex, MIP6_ENTITY_HA); - - if ((err = xfrm_sendmigrate(&sp, &tmpl, newcoa, haaddr)) < 0) { - dbg("migrate for OUTBOUND policy failed\n"); - goto end; - } - } - } - -end: - return err; -} - -int ha_ipsec_tnl_update(const struct in6_addr *haaddr, - const struct in6_addr *hoa, - const struct in6_addr *coa, - const struct in6_addr *old_coa, - int tunnel, - struct list_head *mnp) -{ - struct ha_ipsec_tnl_update b; - b.coa = *coa; - b.old_coa = *old_coa; - b.tunnel = tunnel; - b.mnp = mnp; - return ipsec_policy_apply(haaddr, hoa, _ha_tnl_update, &b); -} - -struct ha_ipsec_mnp_update { - int tunnel; - struct list_head *old_mnps; - struct list_head *new_mnps; -}; - -/* - * Add/Delete MNP IPsec Security Policy - */ -static int _ha_mnp_pol_mod(const struct in6_addr *haaddr, - const struct in6_addr *hoa, - struct ipsec_policy_entry *e, - void *arg, - int add) -{ - int err = 0; - struct ha_ipsec_mnp_update *parms = (struct ha_ipsec_mnp_update *)arg; - struct xfrm_userpolicy_info sp; - struct xfrm_user_tmpl tmpl; - u_int16_t ipsec_proto; - struct list_head *list, *old_mnps, *new_mnps, *main_mnps, *ref_mnps; - int ifindex; - - assert(haaddr); - assert(hoa); - assert(e); - assert(arg); - - ifindex = parms->tunnel; - old_mnps = parms->old_mnps; - new_mnps = parms->new_mnps; - - if (e->type != IPSEC_POLICY_TYPE_TUNNELPAYLOAD) - goto end; - - /* XXX Limitation: Single IPsec proto can only be applied */ - if (ipsec_use_esp(e)) - ipsec_proto = IPPROTO_ESP; - else if (ipsec_use_ah(e)) - ipsec_proto = IPPROTO_AH; - else if (ipsec_use_ipcomp(e)) - ipsec_proto = IPPROTO_COMP; - else { - dbg("invalid ipsec proto\n"); - goto end; - } - - /* Reverse the search logic on lists based on expected - * action (add/del) */ - main_mnps = add ? new_mnps : old_mnps; - ref_mnps = add ? old_mnps : new_mnps; - - if (main_mnps == NULL) - goto end; - - /* We have to add/delete rules to protect traffic to - and from MNP's, the same way as HoA */ - list_for_each(list, main_mnps) { - struct prefix_list_entry *p; - p = list_entry(list, struct prefix_list_entry, list); - - if (ref_mnps && - prefix_list_find(ref_mnps, &p->ple_prefix, p->ple_plen)) - continue; - - /* inbound */ - _set_sp(&sp, e, XFRM_POLICY_IN, &in6addr_any, 0, &p->ple_prefix, p->ple_plen, - ifindex, MIP6_ENTITY_HA); - _set_tmpl(&tmpl, AF_INET6, ipsec_proto, XFRM_MODE_TUNNEL, - haaddr, hoa, e->reqid_toha); - - if (xfrm_ipsec_policy_mod(&sp, &tmpl, 1, add) < 0) { - dbg("modifying INBOUND policy failed\n"); - err = -1; - goto end; - } - - /* forward */ - _set_sp(&sp, e, XFRM_POLICY_FWD, &in6addr_any, 0, &p->ple_prefix, p->ple_plen, - ifindex, MIP6_ENTITY_HA); - _set_tmpl(&tmpl, AF_INET6, ipsec_proto, XFRM_MODE_TUNNEL, - haaddr, hoa, e->reqid_toha); - - if (xfrm_ipsec_policy_mod(&sp, &tmpl, 1, add) < 0) { - dbg("modifying FORWARD policy failed\n"); - err = -1; - goto end; - } - - /* outbound */ - _set_sp(&sp, e, XFRM_POLICY_OUT, &p->ple_prefix, p->ple_plen, &in6addr_any, 0, - ifindex, MIP6_ENTITY_HA); - _set_tmpl(&tmpl, AF_INET6, ipsec_proto, XFRM_MODE_TUNNEL, - hoa, haaddr, e->reqid_tomn); - - if (xfrm_ipsec_policy_mod(&sp, &tmpl, 1, add) < 0) { - dbg("modifying OUTBOUND policy failed\n"); - err = -1; - goto end; - } - } - -end: - return err; -} - - -/* - * Add SP entry (for MNP on HA) - * - * NOTE: - * - This is a hook routine to ipsec_policy_apply() - */ -static int _ha_mnp_pol_add(const struct in6_addr *haaddr, - const struct in6_addr *hoa, - struct ipsec_policy_entry *e, - void *arg) -{ - return _ha_mnp_pol_mod(haaddr, hoa, e, arg, 1); -} - -int ha_ipsec_mnp_pol_add(const struct in6_addr *our_addr, - const struct in6_addr *peer_addr, - struct list_head *old_mnps, - struct list_head *new_mnps, - int tunnel) -{ - struct ha_ipsec_mnp_update b; - b.tunnel = tunnel; - b.old_mnps = old_mnps; - b.new_mnps = new_mnps; - - return ipsec_policy_apply(our_addr, peer_addr, _ha_mnp_pol_add, &b); -} - -/* - * Delete SP entry (for MNP on HA) - * - * NOTE: - * - This is a hook routine to ipsec_policy_apply() - */ -static int _ha_mnp_pol_del(const struct in6_addr *haaddr, - const struct in6_addr *hoa, - struct ipsec_policy_entry *e, - void *arg) -{ - return _ha_mnp_pol_mod(haaddr, hoa, e, arg, 0); -} - -int ha_ipsec_mnp_pol_del(const struct in6_addr *our_addr, - const struct in6_addr *peer_addr, - struct list_head *old_mnps, - struct list_head *new_mnps, - int tunnel) -{ - struct ha_ipsec_mnp_update b; - b.tunnel = tunnel; - b.old_mnps = old_mnps; - b.new_mnps = new_mnps; - - return ipsec_policy_apply(our_addr, peer_addr, - _ha_mnp_pol_del, &b); -} - - -struct ha_ipsec_trns_update { - int tunnel; - struct in6_addr coa; - struct in6_addr old_coa; -}; - -/* - * Transport Update (for HA) - * - * NOTE: - * - This is a hook routine to ipsec_policy_apply() - */ -static int _ha_trns_update(const struct in6_addr *haaddr, - const struct in6_addr *hoa, - struct ipsec_policy_entry *e, - void *arg) -{ - int err = 0; - struct ha_ipsec_trns_update *info = (struct ha_ipsec_trns_update *)arg; - int ifindex; - const struct in6_addr *oldcoa, *newcoa; - const struct in6_addr *peer_addr = hoa; - u_int8_t ipsec_proto; - struct xfrm_user_tmpl tmpl; - struct xfrm_userpolicy_info sp; - - assert(haaddr); - assert(hoa); - assert(e); - assert(arg); - - switch (e->type) { - case IPSEC_POLICY_TYPE_HOMEREGBINDING: - case IPSEC_POLICY_TYPE_BERROR: - case IPSEC_POLICY_TYPE_MH: - case IPSEC_POLICY_TYPE_MOBPFXDISC: - case IPSEC_POLICY_TYPE_NDISC: - case IPSEC_POLICY_TYPE_ICMP: - case IPSEC_POLICY_TYPE_ANY: - break; - - default: - goto end; - } - - /* XXX Limitation: Single IPsec proto can only be applied */ - if (ipsec_use_esp(e)) - ipsec_proto = IPPROTO_ESP; - else if (ipsec_use_ah(e)) - ipsec_proto = IPPROTO_AH; - else if (ipsec_use_ipcomp(e)) - ipsec_proto = IPPROTO_COMP; - else { - dbg("invalid ipsec proto\n"); - goto end; - } - - ifindex = info->tunnel; - oldcoa = IN6_ARE_ADDR_EQUAL(&info->old_coa, &in6addr_any) ? - peer_addr : &info->old_coa; - newcoa = &info->coa; - - dump_migrate(ifindex, ipsec_proto, hoa, haaddr, oldcoa, newcoa); - - /* inbound */ - _set_tmpl(&tmpl, 0, ipsec_proto, XFRM_MODE_TRANSPORT, - haaddr, oldcoa, e->reqid_toha); - _set_sp(&sp, e, XFRM_POLICY_IN, haaddr, 128, - hoa, 128, ifindex, MIP6_ENTITY_HA); - - if ((err = xfrm_sendmigrate(&sp, &tmpl, haaddr, newcoa)) < 0) { - dbg("migrate for INBOUND policy failed\n"); - goto end; - } - - /* outbound */ - _set_tmpl(&tmpl, 0, ipsec_proto, XFRM_MODE_TRANSPORT, - oldcoa, haaddr, e->reqid_tomn); - _set_sp(&sp, e, XFRM_POLICY_OUT, hoa, 128, - haaddr, 128, ifindex, MIP6_ENTITY_HA); - - if ((err = xfrm_sendmigrate(&sp, &tmpl, newcoa, haaddr)) < 0) { - dbg("migrate for OUTBOUND policy failed\n"); - goto end; - } - -end: - return err; -} - -int ha_ipsec_trns_update(const struct in6_addr *haaddr, - const struct in6_addr *hoa, - const struct in6_addr *coa, - const struct in6_addr *old_coa, - int tunnel) -{ - struct ha_ipsec_trns_update b; - b.tunnel = tunnel; - b.coa = *coa; - b.old_coa = *old_coa; - return ipsec_policy_apply(haaddr, hoa, _ha_trns_update, &b); -} - - - - -/* - * Add/Delete IPsec Security Policy - */ -static int _ha_tnl_pol_mod(const struct in6_addr *haaddr, - const struct in6_addr *hoa, - struct ipsec_policy_entry *e, - void *arg, - int add) -{ - int err = 0; - struct ha_ipsec_tnl_update *parms = (struct ha_ipsec_tnl_update *)arg; - int ifindex; - struct list_head *mnp; - struct xfrm_userpolicy_info sp; - struct xfrm_user_tmpl tmpl; - u_int16_t ipsec_proto; - - assert(haaddr); - assert(hoa); - assert(e); - assert(arg); - - ifindex = parms->tunnel; - mnp = parms->mnp; - - switch (e->type) { - case IPSEC_POLICY_TYPE_TUNNELHOMETESTING: - case IPSEC_POLICY_TYPE_TUNNELMH: - case IPSEC_POLICY_TYPE_TUNNELPAYLOAD: - break; - - default: - goto end; - } - - /* XXX Limitation: Single IPsec proto can only be applied */ - if (ipsec_use_esp(e)) - ipsec_proto = IPPROTO_ESP; - else if (ipsec_use_ah(e)) - ipsec_proto = IPPROTO_AH; - else if (ipsec_use_ipcomp(e)) - ipsec_proto = IPPROTO_COMP; - else { - dbg("invalid ipsec proto\n"); - goto end; - } - - dump_migrate(ifindex, ipsec_proto, hoa, haaddr, NULL, NULL); - - /* inbound */ - _set_sp(&sp, e, XFRM_POLICY_IN, &in6addr_any, 0, hoa, 0, - ifindex, MIP6_ENTITY_HA); - _set_tmpl(&tmpl, AF_INET6, ipsec_proto, XFRM_MODE_TUNNEL, - haaddr, hoa, e->reqid_toha); - - if (xfrm_ipsec_policy_mod(&sp, &tmpl, 1, add) < 0) { - dbg("modifying INBOUND policy failed\n"); - err = -1; - goto end; - } - - /* forward */ - _set_sp(&sp, e, XFRM_POLICY_FWD, &in6addr_any, 0, hoa, 0, - ifindex, MIP6_ENTITY_HA); - _set_tmpl(&tmpl, AF_INET6, ipsec_proto, XFRM_MODE_TUNNEL, - haaddr, hoa, e->reqid_toha); - - if (xfrm_ipsec_policy_mod(&sp, &tmpl, 1, add) < 0) { - dbg("modifying FORWARD policy failed\n"); - err = -1; - goto end; - } - - /* outbound */ - _set_sp(&sp, e, XFRM_POLICY_OUT, hoa, 0, &in6addr_any, 0, - ifindex, MIP6_ENTITY_HA); - _set_tmpl(&tmpl, AF_INET6, ipsec_proto, XFRM_MODE_TUNNEL, - hoa, haaddr, e->reqid_tomn); - - if (xfrm_ipsec_policy_mod(&sp, &tmpl, 1, add) < 0) { - dbg("modifying OUTBOUND policy failed\n"); - err = -1; - goto end; - } - - /* Mobile Router case */ - if ((e->type == IPSEC_POLICY_TYPE_TUNNELPAYLOAD) && mnp) { - struct ha_ipsec_mnp_update b; - - b.tunnel = ifindex; - b.old_mnps = add ? NULL : mnp; - b.new_mnps = add ? mnp : NULL; - - err = _ha_mnp_pol_mod(haaddr, hoa, e, (void *)&b, add); - } - -end: - return err; -} - -/* - * Add SP entry (for HA) - * - * NOTE: - * - This is a hook routine to ipsec_policy_apply() - */ -static int _ha_tnl_pol_add(const struct in6_addr *haaddr, - const struct in6_addr *hoa, - struct ipsec_policy_entry *e, - void *arg) -{ - return _ha_tnl_pol_mod(haaddr, hoa, e, arg, 1); -} - -int ha_ipsec_tnl_pol_add(const struct in6_addr *our_addr, - const struct in6_addr *peer_addr, - int tunnel, - struct list_head *mnp) -{ - struct ha_ipsec_tnl_update b; - b.tunnel = tunnel; - b.mnp = mnp; - - return ipsec_policy_apply(our_addr, peer_addr, _ha_tnl_pol_add, &b); -} - -/* - * Delete SP entry (for HA) - * - * NOTE: - * - This is a hook routine to ipsec_policy_apply() - */ -static int _ha_tnl_pol_del(const struct in6_addr *haaddr, - const struct in6_addr *hoa, - struct ipsec_policy_entry *e, - void *arg) -{ - return _ha_tnl_pol_mod(haaddr, hoa, e, arg, 0); -} - -int ha_ipsec_tnl_pol_del(const struct in6_addr *our_addr, - const struct in6_addr *peer_addr, - int tunnel, - struct list_head *mnp) -{ - struct ha_ipsec_tnl_update b; - b.tunnel = tunnel; - b.mnp = mnp; - - return ipsec_policy_apply(our_addr, peer_addr, - _ha_tnl_pol_del, &b); -} - -/* - * Tunnel Update (for MN) - * - * NOTE: - * - This is a hook routine to ipsec_policy_apply() - */ -static int _mn_tnl_update(const struct in6_addr *haaddr, - const struct in6_addr *hoa, - struct ipsec_policy_entry *e, - void *arg) -{ - int err = 0; - struct bulentry *bule; - int ifindex; - struct in6_addr *oldcoa, *newcoa; - u_int8_t ipsec_proto; - struct xfrm_user_tmpl tmpl; - struct xfrm_userpolicy_info sp; - - assert(haaddr); - assert(hoa); - assert(e); - assert(arg); - - switch (e->type) { - case IPSEC_POLICY_TYPE_TUNNELHOMETESTING: - case IPSEC_POLICY_TYPE_TUNNELMH: - case IPSEC_POLICY_TYPE_TUNNELPAYLOAD: - break; - - default: - goto end; - } - - /* XXX Limitation: Single IPsec proto can only be applied */ - if (ipsec_use_esp(e)) - ipsec_proto = IPPROTO_ESP; - else if (ipsec_use_ah(e)) - ipsec_proto = IPPROTO_AH; - else if (ipsec_use_ipcomp(e)) - ipsec_proto = IPPROTO_COMP; - else { - dbg("invalid ipsec proto\n"); - goto end; - } - - bule = (struct bulentry *)arg; - ifindex = bule->home->if_tunnel; - oldcoa = &bule->last_coa; - newcoa = &bule->coa; - - dump_migrate(ifindex, ipsec_proto, hoa, haaddr, oldcoa, newcoa); - - /* outbound */ - _set_tmpl(&tmpl, 0, ipsec_proto, XFRM_MODE_TUNNEL, - haaddr, oldcoa, e->reqid_toha); - _set_sp(&sp, e, XFRM_POLICY_OUT, &in6addr_any, 0, hoa, 0, - ifindex, MIP6_ENTITY_MN); - - if ((err = xfrm_sendmigrate(&sp, &tmpl, haaddr, newcoa)) < 0) { - dbg("migrate for OUTBOUND policy failed\n"); - goto end; - } - - /* inbound */ - _set_tmpl(&tmpl, 0, ipsec_proto, XFRM_MODE_TUNNEL, - oldcoa, haaddr, e->reqid_tomn); - _set_sp(&sp, e, XFRM_POLICY_IN, hoa, 0, &in6addr_any, 0, - ifindex, MIP6_ENTITY_MN); - - if ((err = xfrm_sendmigrate(&sp, &tmpl, newcoa, haaddr)) < 0) { - dbg("migrate for INBOUND policy (1) failed\n"); - goto end; - } - - /* - * Additionally, we need to update endpoint address stored in the - * policy entry for processing BU from peer MN. Note that incoming - * BU is normally IPsec-tunneled by the HA. - */ - if (e->type == IPSEC_POLICY_TYPE_TUNNELMH) { - /* template */ - _set_tmpl(&tmpl, 0, ipsec_proto, XFRM_MODE_TUNNEL, - oldcoa, haaddr, e->reqid_tomn); - _set_sp(&sp, e, XFRM_POLICY_IN, hoa, 0, &in6addr_any, 0, - ifindex, MIP6_ENTITY_MN); - /* additional settings */ - sp.priority = MIP6_PRIO_RO_SIG_IPSEC; - sp.sel.sport = htons(IP6_MH_TYPE_BU); - sp.sel.sport_mask = ~((__u16)0); - - if ((err = xfrm_sendmigrate(&sp, &tmpl, newcoa, haaddr)) < 0) { - dbg("migrate for INBOUND policy (2) failed\n"); - goto end; - } - } - - /* - * If we are a Mobile Router, we also need to migrate IN/FWD/OUT rules - * for forwarded traffic in case we have TUNNELPAYLOAD protection. - */ - if ((e->type == IPSEC_POLICY_TYPE_TUNNELPAYLOAD) && (bule->home->mob_rtr)) { - struct list_head *mnp; - - list_for_each(mnp, &bule->home->mob_net_prefixes) { - struct prefix_list_entry *p; - p = list_entry(mnp, struct prefix_list_entry, list); - - /* outbound */ - _set_tmpl(&tmpl, 0, ipsec_proto, XFRM_MODE_TUNNEL, - haaddr, oldcoa, e->reqid_toha); - _set_sp(&sp, e, XFRM_POLICY_OUT, &in6addr_any, 0, &p->ple_prefix, p->ple_plen, - ifindex, MIP6_ENTITY_MN); - - if ((err = xfrm_sendmigrate(&sp, &tmpl, haaddr, newcoa)) < 0) { - dbg("migrate for OUTBOUND policy failed\n"); - goto end; - } - - /* forwarded */ - _set_tmpl(&tmpl, 0, ipsec_proto, XFRM_MODE_TUNNEL, - oldcoa, haaddr, e->reqid_tomn); - _set_sp(&sp, e, XFRM_POLICY_IN, &p->ple_prefix, p->ple_plen, &in6addr_any, 0, - ifindex, MIP6_ENTITY_MN); - - if ((err = xfrm_sendmigrate(&sp, &tmpl, newcoa, haaddr)) < 0) { - dbg("migrate for INBOUND policy (1) failed\n"); - goto end; - } - - /* inbound */ - _set_tmpl(&tmpl, 0, ipsec_proto, XFRM_MODE_TUNNEL, - oldcoa, haaddr, e->reqid_tomn); - _set_sp(&sp, e, XFRM_POLICY_IN, &p->ple_prefix, p->ple_plen, &in6addr_any, 0, - ifindex, MIP6_ENTITY_MN); - - if ((err = xfrm_sendmigrate(&sp, &tmpl, newcoa, haaddr)) < 0) { - dbg("migrate for INBOUND policy (1) failed\n"); - goto end; - } - - } - } - -end: - return err; -} - -/* - * Transport mode Update (for MN) - * - * NOTE: - * - This is a hook routine to ipsec_policy_apply() - * - It might be beneficial to merge it with tunnel version --arno - */ -static int _mn_trns_update(const struct in6_addr *haaddr, - const struct in6_addr *hoa, - struct ipsec_policy_entry *e, - void *arg) -{ - int err = 0; - struct bulentry *bule; - int ifindex; - struct in6_addr *oldcoa, *newcoa; - u_int8_t ipsec_proto; - struct xfrm_user_tmpl tmpl; - struct xfrm_userpolicy_info sp; - - assert(haaddr); - assert(hoa); - assert(e); - assert(arg); - - switch (e->type) { - case IPSEC_POLICY_TYPE_HOMEREGBINDING: - case IPSEC_POLICY_TYPE_BERROR: - case IPSEC_POLICY_TYPE_MH: - case IPSEC_POLICY_TYPE_MOBPFXDISC: - case IPSEC_POLICY_TYPE_NDISC: - case IPSEC_POLICY_TYPE_ICMP: - case IPSEC_POLICY_TYPE_ANY: - break; - - default: - goto end; - } - - /* XXX Limitation: Single IPsec proto can only be applied */ - if (ipsec_use_esp(e)) - ipsec_proto = IPPROTO_ESP; - else if (ipsec_use_ah(e)) - ipsec_proto = IPPROTO_AH; - else if (ipsec_use_ipcomp(e)) - ipsec_proto = IPPROTO_COMP; - else { - dbg("invalid ipsec proto\n"); - goto end; - } - - bule = (struct bulentry *)arg; - ifindex = bule->home->if_tunnel; - oldcoa = &bule->last_coa; - newcoa = &bule->coa; - - dump_migrate(ifindex, ipsec_proto, hoa, haaddr, oldcoa, newcoa); - - /* outbound */ - _set_tmpl(&tmpl, 0, ipsec_proto, XFRM_MODE_TRANSPORT, - haaddr, oldcoa, e->reqid_toha); - _set_sp(&sp, e, XFRM_POLICY_OUT, haaddr, 128, - hoa, 128, ifindex, MIP6_ENTITY_MN); - - if ((err = xfrm_sendmigrate(&sp, &tmpl, haaddr, newcoa)) < 0) { - dbg("migrate for OUTBOUND policy failed\n"); - goto end; - } - - /* inbound */ - _set_tmpl(&tmpl, 0, ipsec_proto, XFRM_MODE_TRANSPORT, - oldcoa, haaddr, e->reqid_tomn); - _set_sp(&sp, e, XFRM_POLICY_IN, hoa, 128, - haaddr, 128, ifindex, MIP6_ENTITY_MN); - - if ((err = xfrm_sendmigrate(&sp, &tmpl, newcoa, haaddr)) < 0) { - dbg("migrate for INBOUND policy (1) failed\n"); - goto end; - } - - /* XXX We should probably add something for MN-MN and MN-CN transport - * XXX mode entries. --arno */ -end: - return err; -} - -int mn_ipsec_trns_update(const struct in6_addr *haaddr, - const struct in6_addr *hoa, - void *arg) -{ - return ipsec_policy_apply(haaddr, hoa, _mn_trns_update, arg); -} - -int mn_ipsec_tnl_update(const struct in6_addr *haaddr, - const struct in6_addr *hoa, - void *arg) -{ - return ipsec_policy_apply(haaddr, hoa, _mn_tnl_update, arg); -} - -static int _mn_tnl_pol_mod(const struct in6_addr *haaddr, - const struct in6_addr *hoa, - struct ipsec_policy_entry *e, - void *arg, - int add) -{ - int err = 0; - struct bulentry *bule = (struct bulentry *)arg; - int ifindex; - struct xfrm_userpolicy_info sp; - struct xfrm_user_tmpl tmpl; - u_int16_t ipsec_proto; - - assert(haaddr); - assert(hoa); - assert(e); - assert(arg); - - switch (e->type) { - case IPSEC_POLICY_TYPE_TUNNELHOMETESTING: - case IPSEC_POLICY_TYPE_TUNNELMH: - case IPSEC_POLICY_TYPE_TUNNELPAYLOAD: - break; - - default: - goto end; - } - - /* XXX Limitation: Single IPsec proto can only be applied */ - if (ipsec_use_esp(e)) - ipsec_proto = IPPROTO_ESP; - else if (ipsec_use_ah(e)) - ipsec_proto = IPPROTO_AH; - else if (ipsec_use_ipcomp(e)) - ipsec_proto = IPPROTO_COMP; - else { - dbg("invalid ipsec proto\n"); - goto end; - } - - ifindex = bule->home->if_tunnel; - - dump_migrate(ifindex, ipsec_proto, hoa, haaddr, NULL, NULL); - - /* inbound */ - _set_sp(&sp, e, XFRM_POLICY_IN, hoa, 0, &in6addr_any, 0, - ifindex, MIP6_ENTITY_MN); - _set_tmpl(&tmpl, AF_INET6, ipsec_proto, XFRM_MODE_TUNNEL, - hoa, haaddr, e->reqid_tomn); - - if (xfrm_ipsec_policy_mod(&sp, &tmpl, 1, add) < 0) { - dbg("modifying INBOUND policy failed.\n"); - err = -1; - goto end; - } - - /* outbound */ - _set_sp(&sp, e, XFRM_POLICY_OUT, &in6addr_any, 0, hoa, 0, - ifindex, MIP6_ENTITY_MN); - _set_tmpl(&tmpl, AF_INET6, ipsec_proto, XFRM_MODE_TUNNEL, - haaddr, hoa, e->reqid_toha); - - if (xfrm_ipsec_policy_mod(&sp, &tmpl, 1, add) < 0) { - dbg("modifying OUTBOUND policy failed.\n"); - err = -1; - goto end; - } - - /* - * Additionally, we need to create SPD entry to process incoming BU - * from peer MN. Note that BU is normally IPsec-tunneled by the HA. - */ - if (e->type == IPSEC_POLICY_TYPE_TUNNELMH) { - if (add) { - /* flush wildrecv SPD entry for processing BU */ - cn_wildrecv_bu_pol_del(); - err = mn_ipsec_recv_bu_tnl_pol_add(bule, ifindex, e); - } else { - mn_ipsec_recv_bu_tnl_pol_del(bule, ifindex); - /* restore wildrecv SPD entry for processing BU */ - err = cn_wildrecv_bu_pol_add(); - } - } - - /* - * If we are a Mobile Router, we also need to create IN/FWD/OUT rules - * for forwarded traffic in case we have TUNNELPAYLOAD protection. - */ - if ((e->type == IPSEC_POLICY_TYPE_TUNNELPAYLOAD) && (bule->home->mob_rtr)) { - struct list_head *mnp; - - list_for_each(mnp, &bule->home->mob_net_prefixes) { - struct prefix_list_entry *p; - p = list_entry(mnp, struct prefix_list_entry, list); - - /* inbound */ - _set_sp(&sp, e, XFRM_POLICY_IN, &p->ple_prefix, p->ple_plen, &in6addr_any, 0, - ifindex, MIP6_ENTITY_MN); - _set_tmpl(&tmpl, AF_INET6, ipsec_proto, XFRM_MODE_TUNNEL, - hoa, haaddr, e->reqid_tomn); - - if (xfrm_ipsec_policy_mod(&sp, &tmpl, 1, add) < 0) { - dbg("modifying INBOUND policy failed.\n"); - err = -1; - goto end; - } - - /* forward */ - _set_sp(&sp, e, XFRM_POLICY_FWD, &p->ple_prefix, p->ple_plen, &in6addr_any, 0, - ifindex, MIP6_ENTITY_MN); - _set_tmpl(&tmpl, AF_INET6, ipsec_proto, XFRM_MODE_TUNNEL, - hoa, haaddr, e->reqid_tomn); - - if (xfrm_ipsec_policy_mod(&sp, &tmpl, 1, add) < 0) { - dbg("modifying INBOUND policy failed.\n"); - err = -1; - goto end; - } - - /* outbound */ - _set_sp(&sp, e, XFRM_POLICY_OUT, &in6addr_any, 0, &p->ple_prefix, p->ple_plen, - ifindex, MIP6_ENTITY_MN); - _set_tmpl(&tmpl, AF_INET6, ipsec_proto, XFRM_MODE_TUNNEL, - haaddr, hoa, e->reqid_toha); - - if (xfrm_ipsec_policy_mod(&sp, &tmpl, 1, add) < 0) { - dbg("modifying OUTBOUND policy failed.\n"); - err = -1; - goto end; - } - } - } - -end: - return err; -} - -/* - * Add SP entry (for MN) - * - * NOTE: - * - This is a hook routine to ipsec_policy_apply() - */ -static int _mn_tnl_pol_add(const struct in6_addr *haaddr, - const struct in6_addr *hoa, - struct ipsec_policy_entry *e, - void *arg) -{ - return _mn_tnl_pol_mod(haaddr, hoa, e, arg, 1); -} - -int mn_ipsec_tnl_pol_add(const struct in6_addr *haaddr, - const struct in6_addr *hoa, void *arg) -{ - return ipsec_policy_apply(haaddr, hoa, _mn_tnl_pol_add, arg); -} - -/* - * Delete SP entry - * - * NOTE: - * - This is a hook routine to ipsec_policy_apply() - */ -static int _mn_tnl_pol_del(const struct in6_addr *haaddr, - const struct in6_addr *hoa, - struct ipsec_policy_entry *e, - void *arg) -{ - return _mn_tnl_pol_mod(haaddr, hoa, e, arg, 0); -} - -int mn_ipsec_tnl_pol_del(const struct in6_addr *haaddr, - const struct in6_addr *hoa, void *arg) -{ - return ipsec_policy_apply(haaddr, hoa, _mn_tnl_pol_del, arg); -} diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/src/ipsec.h b/openair3/PMIPv6/pmipv6-daemon-umip/src/ipsec.h deleted file mode 100755 index 4e5933ca9a..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/src/ipsec.h +++ /dev/null @@ -1,136 +0,0 @@ -/* $Id: ipsec.h 1.27 06/04/22 02:11:18+03:00 vnuorval@tcs.hut.fi $ */ - -#ifndef __IPSEC_H__ -#define __IPSEC_H__ -#include -#include "list.h" - -#define IPSEC_F_MH_BUBA 0x001 -#define IPSEC_F_MH_BERR 0x002 -#define IPSEC_F_MH 0x004 -#define IPSEC_F_ICMP_MPD 0x008 -#define IPSEC_F_ICMP_ND 0x010 -#define IPSEC_F_ICMP 0x020 -#define IPSEC_F_ANY 0x040 - -#define IPSEC_F_TNL_MH_RR 0x100 -#define IPSEC_F_TNL_MH 0x200 -#define IPSEC_F_TNL_ANY 0x400 - -#define IPSEC_POLICY_TYPE_HOMEREGBINDING IPSEC_F_MH_BUBA -#define IPSEC_POLICY_TYPE_BERROR IPSEC_F_MH_BERR -#define IPSEC_POLICY_TYPE_MH (IPSEC_F_MH_BUBA|IPSEC_F_MH_BERR|IPSEC_F_MH) -#define IPSEC_POLICY_TYPE_MOBPFXDISC IPSEC_F_ICMP_MPD -#define IPSEC_POLICY_TYPE_NDISC IPSEC_F_ICMP_ND -#define IPSEC_POLICY_TYPE_ICMP (IPSEC_F_ICMP_MPD|IPSEC_F_ICMP_ND|IPSEC_F_ICMP) -#define IPSEC_POLICY_TYPE_ANY (IPSEC_F_MH_BUBA|IPSEC_F_MH_BERR|IPSEC_F_MH|IPSEC_F_ICMP_MPD|IPSEC_F_ICMP_ND|IPSEC_F_ICMP|IPSEC_F_ANY) - -#define IPSEC_POLICY_TYPE_TUNNELHOMETESTING IPSEC_F_TNL_MH_RR -#define IPSEC_POLICY_TYPE_TUNNELMH (IPSEC_F_TNL_MH_RR|IPSEC_F_TNL_MH) -#define IPSEC_POLICY_TYPE_TUNNELPAYLOAD (IPSEC_F_TNL_MH_RR|IPSEC_F_TNL_MH|IPSEC_F_TNL_ANY) - -struct ipsec_policy_entry { - struct list_head list; - struct in6_addr ha_addr; - struct in6_addr mn_addr; - int type; - int ipsec_protos; - int action; - uint32_t reqid_toha; - uint32_t reqid_tomn; -}; - -#define IPSEC_PROTO_ESP 0x1 -#ifndef MULTIPROTO_MIGRATE -#define IPSEC_PROTO_AH 0 -#define IPSEC_PROTO_IPCOMP 0 -#else -#define IPSEC_PROTO_AH 0x2 -#define IPSEC_PROTO_IPCOMP 0x4 -#endif - -static inline int ipsec_use_esp(struct ipsec_policy_entry *e) -{ - return e->ipsec_protos & IPSEC_PROTO_ESP; -} - -static inline int ipsec_use_ah(struct ipsec_policy_entry *e) -{ - return e->ipsec_protos & IPSEC_PROTO_AH; -} - -static inline int ipsec_use_ipcomp(struct ipsec_policy_entry *e) -{ - return e->ipsec_protos & IPSEC_PROTO_IPCOMP; -} - -int ipsec_policy_apply(const struct in6_addr *haaddr, - const struct in6_addr *hoa, - int (* func)(const struct in6_addr *haaddr, - const struct in6_addr *hoa, - struct ipsec_policy_entry *e, void *arg), - void *arg); -int ipsec_policy_walk(int (* func)(const struct in6_addr *haaddr, - const struct in6_addr *hoa, - struct ipsec_policy_entry *e, void *arg), - void *arg); -int ipsec_policy_entry_check(const struct in6_addr *haaddr, - const struct in6_addr *hoa, - int type); - -int ha_ipsec_tnl_update(const struct in6_addr *haaddr, - const struct in6_addr *hoa, - const struct in6_addr *coa, - const struct in6_addr *old_coa, - int tunnel, - struct list_head *mnp); - -int ha_ipsec_mnp_pol_del(const struct in6_addr *our_addr, - const struct in6_addr *peer_addr, - struct list_head *old_mnps, - struct list_head *new_mnps, - int tunnel); - -int ha_ipsec_mnp_pol_add(const struct in6_addr *our_addr, - const struct in6_addr *peer_addr, - struct list_head *old_mnps, - struct list_head *new_mnps, - int tunnel); - -int ha_ipsec_trns_update(const struct in6_addr *haaddr, - const struct in6_addr *hoa, - const struct in6_addr *coa, - const struct in6_addr *old_coa, - int tunnel); - -int ha_ipsec_tnl_pol_add(const struct in6_addr *our_addr, - const struct in6_addr *peer_addr, - int tunnel, - struct list_head *mnp); - -int ha_ipsec_tnl_pol_del(const struct in6_addr *our_addr, - const struct in6_addr *peer_addr, - int tunnel, - struct list_head *mnp); - -int mn_ipsec_tnl_update(const struct in6_addr *haaddr, - const struct in6_addr *hoa, - void *arg); - -int mn_ipsec_trns_update(const struct in6_addr *haaddr, - const struct in6_addr *hoa, - void *arg); - -int mn_ipsec_tnl_pol_add(const struct in6_addr *haaddr, - const struct in6_addr *hoa, - void *arg); - -int mn_ipsec_tnl_pol_del(const struct in6_addr *haaddr, - const struct in6_addr *hoa, - void *arg); - -extern int ipsec_policy_dump_config(const struct in6_addr *haaddr, - const struct in6_addr *hoa, - struct ipsec_policy_entry *e, void *arg); - -#endif /* __IPSEC_H__ */ diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/src/keygen.c b/openair3/PMIPv6/pmipv6-daemon-umip/src/keygen.c deleted file mode 100755 index 1bad263665..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/src/keygen.c +++ /dev/null @@ -1,350 +0,0 @@ -/* - * $Id: keygen.c 1.15 06/05/05 19:40:57+03:00 anttit@tcs.hut.fi $ - * - * This file is part of the MIPL Mobile IPv6 for Linux. - * - * Author: Antti Tuominen - * - * Copyright 2003-2005 Go-Core Project - * Copyright 2003-2006 Helsinki University of Technology - * - * MIPL Mobile IPv6 for Linux is free software; you can redistribute - * it and/or modify it under the terms of the GNU General Public - * License as published by the Free Software Foundation; version 2 of - * the License. - * - * MIPL Mobile IPv6 for Linux is distributed in the hope that it will - * be useful, but WITHOUT ANY WARRANTY; without even the implied - * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with MIPL Mobile IPv6 for Linux; if not, write to the Free - * Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - * 02111-1307 USA. - */ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include -#include -#ifdef HAVE_LIBCRYPTO -#include -#include -#include -#include -#else -#include "crypto.h" -#endif - -#include -#include - -#include "mipv6.h" -#include "tqueue.h" -#include "keygen.h" - -/* MAX_NONCES controls how many nonces we circulate. It must be a - * power of two */ -#define MAX_NONCES 16 - -static uint8_t key_cn[HMAC_SHA1_KEY_SIZE]; - -struct nonce_holder { - struct tq_elem tqe; - uint16_t nonce_index; - uint8_t nonce[NONCE_LENGTH]; - struct timespec valid_until; -}; - -static struct nonce_holder nonces[MAX_NONCES]; -static pthread_rwlock_t nonce_lock; - -static struct nonce_count { - uint16_t max_nce; - uint16_t min_nce; -} count; - - -static void nonce_regen(struct tq_elem *tqe) -{ - struct nonce_holder *n = tq_data(tqe, struct nonce_holder, tqe); - pthread_rwlock_wrlock(&nonce_lock); - count.max_nce++; - count.min_nce++; - n->nonce_index += MAX_NONCES; - tsclear(n->valid_until); -#ifdef HAVE_LIBCRYPTO - RAND_bytes(n->nonce, NONCE_LENGTH); -#else - random_bytes(n->nonce, NONCE_LENGTH); -#endif - pthread_rwlock_unlock(&nonce_lock); -} - -static int nonce_init(void) -{ - int i; - - if (pthread_rwlock_init(&nonce_lock, NULL)) - return -1; - - for (i = 1; i <= MAX_NONCES; i++) { - struct nonce_holder *n; - n = &nonces[i & (MAX_NONCES - 1)]; -#ifdef HAVE_LIBCRYPTO - - if (!RAND_bytes(n->nonce, NONCE_LENGTH)) - return -1; - -#else - random_bytes(n->nonce, NONCE_LENGTH); -#endif - tsclear(n->valid_until); - n->nonce_index = i; - } - - count.min_nce = 1; - count.max_nce = MAX_NONCES; - return 0; -} - -/* called with held nonce_lock */ -static struct nonce_holder *_get_nonce(uint16_t idx) -{ - struct nonce_holder *n; - - n = &nonces[idx & (MAX_NONCES - 1)]; - - if (n->nonce_index == idx) - return n; - - return NULL; -} - -/* called with held nonce_lock */ -static struct nonce_holder *_get_valid_nonce(void) -{ - struct nonce_holder *n = NULL; - struct timespec now, remain; - uint16_t c, min, max; - - min = count.min_nce; - max = count.max_nce; - - clock_gettime(CLOCK_REALTIME, &now); - - for (c = min; c <= max; c++) { - n = _get_nonce(c); - - if (!tsisset(n->valid_until)) { - tsadd(now, MAX_NONCE_LIFETIME_TS, n->valid_until); - add_task_abs(&n->valid_until, &n->tqe, nonce_regen); - } - - tssub(n->valid_until, now, remain); - - if (remain.tv_sec >= MAX_TOKEN_LIFETIME) - break; - else - n = NULL; - } - - return n; -} - -/* called with held nonce_lock */ -static struct nonce_holder *_validate_nonce(uint16_t nidx) -{ - struct nonce_holder *n; - struct timespec now, remain; - - n = _get_nonce(nidx); - - if (n == NULL) - return NULL; - - clock_gettime(CLOCK_REALTIME, &now); - - tssub(n->valid_until, now, remain); - - if (remain.tv_sec < 0) - return NULL; - - return n; -} - -static void build_kgen_token(struct in6_addr *addr, uint8_t *nonce, - uint8_t id, uint8_t *buf) -{ - uint8_t tmp[20]; -#ifdef HAVE_LIBCRYPTO - unsigned int len = 20; - HMAC_CTX ctx; - - HMAC_CTX_init(&ctx); - HMAC_Init_ex(&ctx, key_cn, sizeof(key_cn), EVP_sha1(), NULL); - HMAC_Update(&ctx, (unsigned char *)addr, sizeof(*addr)); - HMAC_Update(&ctx, nonce, NONCE_LENGTH); - HMAC_Update(&ctx, &id, sizeof(id)); - HMAC_Final(&ctx, tmp, &len); - HMAC_CTX_cleanup(&ctx); -#else - HMAC_SHA1_CTX ctx; - - HMAC_SHA1_init(&ctx, key_cn, sizeof(key_cn)); - HMAC_SHA1_update(&ctx, (unsigned char *)addr, sizeof(*addr)); - HMAC_SHA1_update(&ctx, nonce, NONCE_LENGTH); - HMAC_SHA1_update(&ctx, &id, sizeof(id)); - HMAC_SHA1_final(&ctx, tmp); -#endif - memcpy(buf, tmp, 8); -} - -/** - * rr_cn_keygen_token - create keygen tokens - * @addr: node address - * @bit: 0 for home keygen token, 1 for care-of keygen token - * @kgt: buffer to store token in - * - * Creates home or care-of keygen token. Token is stored in kgt. - * Returns the index of the nonce used for calculation. - **/ -uint16_t rr_cn_keygen_token(struct in6_addr *addr, uint8_t bit, uint8_t *kgt) -{ - struct nonce_holder *n; - uint16_t ret; - pthread_rwlock_rdlock(&nonce_lock); - n = _get_valid_nonce(); - build_kgen_token(addr, n->nonce, bit, kgt); - ret = n->nonce_index; - pthread_rwlock_unlock(&nonce_lock); - return ret; -} - -/** - * rr_cn_nonce_lft - get lifetime of a nonce - * @index: nonce index - * @lft: timespec to store lifetime in - * - * Retrieves lifetime of nonce specified by @index. Returns 0 and sets @lft - * if nonce has a valid lifetime, else returns -1. - **/ -int rr_cn_nonce_lft(uint16_t index, struct timespec *lft) -{ - struct nonce_holder *n; - int ret = -1; - pthread_rwlock_rdlock(&nonce_lock); - n = _get_nonce(index); - - if (n != NULL) { - *lft = n->valid_until; - ret = 0; - } - - pthread_rwlock_unlock(&nonce_lock); - return ret; -} - -/** - * rr_mn_calc_Kbm - calculates the binding authorization key - * @keygen_hoa: home address of MN - * @keygen_coa: care-of address of MN - * @kbm: buffer for storing the key, must be at least 20 bytes - * - * Calculates BU authorization key. Use NULL value for keygen_coa, - * when deregistering at home. - **/ -void rr_mn_calc_Kbm(uint8_t *keygen_hoa, uint8_t *keygen_coa, uint8_t *kbm) -{ -#ifdef HAVE_LIBCRYPTO - SHA_CTX ctx; - - SHA1_Init(&ctx); - SHA1_Update(&ctx, keygen_hoa, NONCE_LENGTH); - - if (keygen_coa) - SHA1_Update(&ctx, keygen_coa, NONCE_LENGTH); - - SHA1_Final(kbm, &ctx); -#else - SHA1_CTX ctx; - - SHA1_init(&ctx); - SHA1_update(&ctx, keygen_hoa, NONCE_LENGTH); - - if (keygen_coa) - SHA1_update(&ctx, keygen_coa, NONCE_LENGTH); - - SHA1_final(&ctx, kbm); -#endif -} - -/** - * rr_cn_calc_Kbm - calculates the binding authorization key - * @home_nonce_ind: home nonce index - * @coa_nonce_ind: care-of nonce index - * @hoa: home address of MN - * @coa: care-of address of MN - * @kbm: buffer for storing the bu_key, must be at least 20 bytes - * - * Returns 0 on success and BA error code on error - **/ -int rr_cn_calc_Kbm(uint16_t home_nonce_ind, uint16_t coa_nonce_ind, - struct in6_addr *hoa, struct in6_addr *coa, uint8_t *kbm) -{ - struct nonce_holder *home_nce = NULL, *careof_nce = NULL; - uint8_t home_token[20], careof_token[20]; - int ret = 0; - - pthread_rwlock_rdlock(&nonce_lock); - - if ((home_nce = _validate_nonce(home_nonce_ind)) == NULL) - ret = IP6_MH_BAS_HOME_NI_EXPIRED; - - if (coa && ((careof_nce = _validate_nonce(coa_nonce_ind)) == NULL)) { - if (ret) - ret = IP6_MH_BAS_NI_EXPIRED; - else - ret = IP6_MH_BAS_COA_NI_EXPIRED; - } - - if (ret) { - pthread_rwlock_unlock(&nonce_lock); - return ret; - } - - build_kgen_token(hoa, home_nce->nonce, 0, home_token); - - if (coa) { - build_kgen_token(coa, careof_nce->nonce, 1, careof_token); - rr_mn_calc_Kbm(home_token, careof_token, kbm); - } else { - rr_mn_calc_Kbm(home_token, NULL, kbm); - } - - pthread_rwlock_unlock(&nonce_lock); - return 0; -} - -/** - * rr_cn_init - initialize key_cn - * - * Initializes key_cn with a random value, and creates a buffer of - * nonces. - **/ -int rr_cn_init(void) -{ -#ifdef HAVE_LIBCRYPTO - - if (!RAND_bytes(key_cn, HMAC_SHA1_KEY_SIZE)) - return -1; - -#else - random_bytes(key_cn, HMAC_SHA1_KEY_SIZE); -#endif - - return nonce_init(); -} diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/src/keygen.h b/openair3/PMIPv6/pmipv6-daemon-umip/src/keygen.h deleted file mode 100755 index e4cc9561c5..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/src/keygen.h +++ /dev/null @@ -1,22 +0,0 @@ -/* $Id: keygen.h 1.3 05/12/09 17:41:52+02:00 vnuorval@tcs.hut.fi $ */ - -#ifndef __KEYGEN_H__ -#define __KEYGEN_H__ 1 - -int rr_cn_calc_Kbm(uint16_t home_nonce_ind, uint16_t coa_nonce_ind, - struct in6_addr *hoa, struct in6_addr *coa, uint8_t *kbm); - -void rr_mn_calc_Kbm(uint8_t *nonce_hoa, uint8_t *nonce_coa, uint8_t *kbm); - -uint16_t rr_cn_keygen_token(struct in6_addr *addr, uint8_t bit, uint8_t *kgt); - -int rr_cn_nonce_lft(uint16_t index, struct timespec *lft); - -static inline void cookiecpy(void *cookie_a, const void *cookie_b) -{ - memcpy(cookie_a, cookie_b, 8); -} - -int rr_cn_init(void); - -#endif diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/src/list.h b/openair3/PMIPv6/pmipv6-daemon-umip/src/list.h deleted file mode 100755 index f5086e40b4..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/src/list.h +++ /dev/null @@ -1,190 +0,0 @@ -/* $Id: list.h 1.8 06/05/05 12:14:34+03:00 anttit@tcs.hut.fi $ */ - -#ifndef __LIST_H__ -#define __LIST_H__ 1 - -#include - -#define container_of(ptr, type, member) \ - (type *)( (char *)ptr - offsetof(type, member) ) - -/* - * List manipulation macros are from include/linux/list.h - */ - -struct list_head { - struct list_head *next, *prev; -}; - -#define LIST_HEAD_INIT(name) { &(name), &(name) } - -#define LIST_HEAD(name) \ - struct list_head name = LIST_HEAD_INIT(name) - -#define INIT_LIST_HEAD(ptr) do { \ - (ptr)->next = (ptr); (ptr)->prev = (ptr); \ -} while (0) - -/* - * Insert a new entry between two known consecutive entries. - * - * This is only for internal list manipulation where we know - * the prev/next entries already! - */ -static inline void __list_add(struct list_head *new, - struct list_head *prev, - struct list_head *next) -{ - next->prev = new; - new->next = next; - new->prev = prev; - prev->next = new; -} - -/** - * list_add - add a new entry - * @new: new entry to be added - * @head: list head to add it after - * - * Insert a new entry after the specified head. - * This is good for implementing stacks. - */ -static inline void list_add(struct list_head *new, struct list_head *head) -{ - __list_add(new, head, head->next); -} - -/** - * list_add_tail - add a new entry - * @new: new entry to be added - * @head: list head to add it before - * - * Insert a new entry before the specified head. - * This is useful for implementing queues. - */ -static inline void list_add_tail(struct list_head *new, struct list_head *head) -{ - __list_add(new, head->prev, head); -} - -/* - * Delete a list entry by making the prev/next entries - * point to each other. - * - * This is only for internal list manipulation where we know - * the prev/next entries already! - */ -static inline void __list_del(struct list_head * prev, struct list_head * next) -{ - next->prev = prev; - prev->next = next; -} - -/** - * list_del - deletes entry from list. - * @entry: the element to delete from the list. - * Note: list_empty on entry does not return true after this, the entry is - * in an undefined state. - */ -static inline void list_del(struct list_head *entry) -{ - __list_del(entry->prev, entry->next); - INIT_LIST_HEAD(entry); -} - -/** - * list_move - delete from one list and add as another's head - * @list: the entry to move - * @head: the head that will precede our entry - */ -static inline void list_move(struct list_head *list, struct list_head *head) -{ - __list_del(list->prev, list->next); - list_add(list, head); -} - -/** - * list_move_tail - delete from one list and add as another's tail - * @list: the entry to move - * @head: the head that will follow our entry - */ -static inline void list_move_tail(struct list_head *list, - struct list_head *head) -{ - __list_del(list->prev, list->next); - list_add_tail(list, head); -} - -/** - * list_empty - tests whether a list is empty - * @head: the list to test. - */ -static inline int list_empty(const struct list_head *head) -{ - return head->next == head; -} - -static inline void __list_splice(struct list_head *list, - struct list_head *head) -{ - struct list_head *first = list->next; - struct list_head *last = list->prev; - struct list_head *at = head->next; - - first->prev = head; - head->next = first; - - last->next = at; - at->prev = last; -} - -/** - * list_splice - join two lists - * @list: the new list to add. - * @head: the place to add it in the first list. - */ -static inline void list_splice(struct list_head *list, struct list_head *head) -{ - if (!list_empty(list)) { - __list_splice(list, head); - INIT_LIST_HEAD(list); - } -} - -/** - * list_entry - get the struct for this entry - * @ptr: the &struct list_head pointer. - * @type: the type of the struct this is embedded in. - * @member: the name of the list_struct within the struct. - */ -#define list_entry(ptr, type, member) \ - container_of(ptr, type, member) - -/** - * list_for_each - iterate over a list - * @pos: the &struct list_head to use as a loop counter. - * @head: the head for your list. - */ -#define list_for_each(pos, head) \ - for (pos = (head)->next; pos != (head); pos = pos->next) - -/** - * list_for_each_prev - iterate over a list backwards - * @pos: the &struct list_head to use as a loop counter. - * @head: the head for your list. - */ -#define list_for_each_prev(pos, head) \ - for (pos = (head)->prev; pos != (head); pos = pos->prev) - -/** - * list_for_each_safe - iterate over a list safe against removal of list entry - * @pos: the &struct list_head to use as a loop counter. - * @n: another &struct list_head to use as temporary storage - * @head: the head for your list. - */ -#define list_for_each_safe(pos, n, head) \ - for (pos = (head)->next, n = pos->next; pos != (head); \ - pos = n, n = pos->next) - - -#endif diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/src/main.c b/openair3/PMIPv6/pmipv6-daemon-umip/src/main.c deleted file mode 100755 index 74a81853d3..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/src/main.c +++ /dev/null @@ -1,342 +0,0 @@ -/* - * $Id: main.c 1.67 06/05/05 19:40:57+03:00 anttit@tcs.hut.fi $ - * - * This file is part of the MIPL Mobile IPv6 for Linux. - * - * Authors: Antti Tuominen - * Ville Nuorvala - * - * Copyright 2003-2005 Go-Core Project - * Copyright 2003-2006 Helsinki University of Technology - * - * MIPL Mobile IPv6 for Linux is free software; you can redistribute - * it and/or modify it under the terms of the GNU General Public - * License as published by the Free Software Foundation; version 2 of - * the License. - * - * MIPL Mobile IPv6 for Linux is distributed in the hope that it will - * be useful, but WITHOUT ANY WARRANTY; without even the implied - * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with MIPL Mobile IPv6 for Linux; if not, write to the Free - * Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - * 02111-1307 USA - */ - -#ifdef HAVE_CONFIG_H -#include -#endif -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "conf.h" -#include "cn.h" -#include "ha.h" -#include "mn.h" -#include "mh.h" -#include "keygen.h" -#include "debug.h" -#include "bcache.h" -#include "policy.h" -#include "xfrm.h" -#include "icmp6.h" -#ifdef ENABLE_VT -#include "vt.h" -#endif -#include "tunnelctl.h" -#include "statistics.h" -#include "pmip.h" - -static void sig_child(__attribute__ ((unused)) int unused) -{ - int pid, status; - - while ((pid = waitpid(0, &status, WNOHANG)) > 0); -} - -static void reinit(void) -{ - /* got SIGHUP, reread configuration and reinitialize */ - dbg("got SIGHUP, reinitilize\n"); - return; -} - - -struct mip6_config conf; -struct mip6_stat mipl_stat; - -static void terminate(void) -{ - /* got SIGINT, cleanup and exit */ - syslog(LOG_INFO, "terminated (SIGINT)"); - dbg("got SIGINT, exiting\n"); - pmip_cleanup(); - debug_close(); - pthread_exit(NULL); -} - -/* - * Detach from any tty. - */ -static void daemon_start(int ignsigcld) -{ - register int childpid, fd; - - if (getppid() == 1) goto out; - -#ifdef SIGTTOU - signal(SIGTTOU, SIG_IGN); -#endif -#ifdef SIGTTIN - signal(SIGTTIN, SIG_IGN); -#endif -#ifdef SIGTSTP - signal(SIGTSTP, SIG_IGN); -#endif - - if ((childpid = fork()) < 0) - fprintf(stderr, "can't fork first child\n"); - else if (childpid > 0) - exit(0); - - if (setpgrp() == -1) - fprintf(stderr, "can't change process group\n"); - - if ((fd = open("/dev/tty", O_RDWR)) >= 0) { - ioctl(fd, TIOCNOTTY, (char *)NULL); - close(fd); - } - -out: - - for (fd = 0; fd < NOFILE; fd++) close(fd); - - errno = 0; - - chdir("/tmp"); - umask(0); - - if (ignsigcld) { -#ifdef SIGTSTP - signal(SIGCLD, sig_child); -#else - signal(SIGCLD, SIG_IGN); -#endif - } -} - -static void *sigh(__attribute__ ((unused)) void *arg) -{ - int signum; - sigset_t sigcatch; - - pthread_dbg("thread started"); - - sigemptyset(&sigcatch); - sigaddset(&sigcatch, SIGHUP); - sigaddset(&sigcatch, SIGINT); - sigaddset(&sigcatch, SIGTERM); -#ifdef ENABLE_VT - sigaddset(&sigcatch, SIGPIPE); -#endif - - for ( ;; ) { - sigwait(&sigcatch, &signum); - - switch (signum) { - case SIGHUP: - reinit(); - break; - - case SIGINT: - case SIGTERM: -#ifdef ENABLE_VT - case SIGPIPE: -#endif - terminate(); - - default: - break; - } - } - - pthread_exit(NULL); -} - -const char *entity_string[4] = { - "Correspondent Node", - "Mobile Node", - "Home Agent-Local Mobility Anchor", - "Mobile Access Gateway" -}; - -int main(int argc, char **argv) -{ - pthread_t sigth; - sigset_t sigblock; - int logflags = 0; - int ret = 1; - - debug_init(); - - sigemptyset(&sigblock); - sigaddset(&sigblock, SIGHUP); - sigaddset(&sigblock, SIGINT); - sigaddset(&sigblock, SIGTERM); -#ifdef ENABLE_VT - sigaddset(&sigblock, SIGPIPE); -#endif - pthread_sigmask(SIG_BLOCK, &sigblock, NULL); - - if (conf_parse(&conf, argc, argv)) - return 1; - - if (conf.debug_level > 0) - logflags = LOG_PERROR; - - openlog(basename(argv[0]), LOG_PID|logflags, LOG_DAEMON); - - syslog(LOG_INFO, "%s v%s started (%s)", PACKAGE_NAME, PACKAGE_VERSION, - entity_string[conf.mip6_entity]); -#ifdef ENABLE_VT - - if (vt_init() < 0) - goto vt_failed; - -#endif - - /* if not debugging, detach from tty */ - if (conf.debug_level == 0) - daemon_start(1); - else { - /* if debugging with debug log file, detach from tty */ - if (conf.debug_log_file) { - daemon_start(1); - - ret = debug_open(conf.debug_log_file); - - if (ret < 0) { - fprintf(stderr, "can't init debug log:%s\n", - strerror(-ret)); - goto debug_failed; - } - - dbg("%s started in debug mode\n", PACKAGE_NAME); - } else { - dbg("%s started in debug mode, not detaching from terminal\n", - PACKAGE_NAME); - } - - conf_show(&conf); - } - - srandom(time(NULL)); - - if (rr_cn_init() < 0) - goto rr_cn_failed; - - if (policy_init() < 0) - goto policy_failed; - - if (taskqueue_init() < 0) - goto taskqueue_failed; - - if (bcache_init() < 0) - goto bcache_failed; - - if (mh_init() < 0) - goto mh_failed; - - if (icmp6_init() < 0) - goto icmp6_failed; - - if (!(is_ha()) && !(is_mag())) - if (xfrm_init() < 0) - goto xfrm_failed; - - cn_init(); - - if ((is_ha() || is_mn() || is_mag()) && tunnelctl_init() < 0) - goto tunnelctl_failed; - - if (is_ha() && ha_init() < 0) - goto pmip_failed; - - //goto ha_failed; - if (is_mn() && mn_init() < 0) - goto mn_failed; - - if (is_mag() && pmip_mag_init() < 0) - goto pmip_failed; - -#ifdef ENABLE_VT - - if (vt_start(conf.vt_hostname, conf.vt_service) < 0) - goto vt_start_failed; - -#endif - - if (pthread_create(&sigth, NULL, sigh, NULL)) - goto sigth_failed; - - pthread_join(sigth, NULL); - ret = 0; -sigth_failed: -#ifdef ENABLE_VT - vt_fini(); -vt_start_failed: -#endif - - if (is_mn()) - mn_cleanup(); - -pmip_failed: - pmip_cleanup(); -mn_failed: - - if (is_ha()) - ha_cleanup(); - -ha_failed: - - if (is_ha() || is_mn()) - tunnelctl_cleanup(); - -tunnelctl_failed: - cn_cleanup(); - xfrm_cleanup(); -xfrm_failed: - icmp6_cleanup(); -icmp6_failed: - mh_cleanup(); -mh_failed: - bcache_cleanup(); -bcache_failed: - taskqueue_destroy(); -taskqueue_failed: - policy_cleanup(); -policy_failed: -rr_cn_failed: - debug_close(); -debug_failed: -#ifdef ENABLE_VT -vt_failed: -#endif - syslog(LOG_INFO, "%s v%s stopped (%s)", PACKAGE_NAME, PACKAGE_VERSION, - entity_string[conf.mip6_entity]); - closelog(); - return ret; -} diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/src/mh.c b/openair3/PMIPv6/pmipv6-daemon-umip/src/mh.c deleted file mode 100755 index 6eb0e8867d..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/src/mh.c +++ /dev/null @@ -1,1268 +0,0 @@ -/* - * $Id: mh.c 1.103 06/05/07 21:52:43+03:00 anttit@tcs.hut.fi $ - * - * This file is part of the MIPL Mobile IPv6 for Linux. - * - * Authors: Antti Tuominen - * Ville Nuorvala - * - * Copyright 2003-2005 Go-Core Project - * Copyright 2003-2006 Helsinki University of Technology - * - * MIPL Mobile IPv6 for Linux is free software; you can redistribute - * it and/or modify it under the terms of the GNU General Public - * License as published by the Free Software Foundation; version 2 of - * the License. - * - * MIPL Mobile IPv6 for Linux is distributed in the hope that it will - * be useful, but WITHOUT ANY WARRANTY; without even the implied - * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with MIPL Mobile IPv6 for Linux; if not, write to the Free - * Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - * 02111-1307 USA. - */ - -#ifdef HAVE_CONFIG_H -#include -#endif -#include -#include -#include -#include -#include -#include -#include -#include -#ifdef HAVE_LIBCRYPTO -#include -#include -#else -#include "crypto.h" -#endif - -#include "mipv6.h" -#include "xfrm.h" -#include "mh.h" -#include "util.h" -#include "debug.h" -#include "conf.h" -#include "bcache.h" -#include "keygen.h" -#include "prefix.h" -#include "statistics.h" -#include "pmip_types.h" - -#define MH_DEBUG_LEVEL 1 - -#if MH_DEBUG_LEVEL >= 1 -#define MDBG dbg -#else -#define MDBG(x...) -#endif - -struct sock mh_sock; - -/* Are duplicate options allowed */ -int mh_opts_dup_ok[] = { - 1, /* PAD1 */ - 1, /* PADN */ - 0, /* BRR */ - 0, /* Alternate CoA */ - 0, /* Nonce Index */ - 0, /* Binding Auth Data */ - 1, /* Mobile Network Prefix */ -}; - -#define __MH_SENTINEL (IP6_MH_TYPE_MAX + 1) - -static pthread_rwlock_t handler_lock; -static struct mh_handler *handlers[__MH_SENTINEL + 1]; - -static pthread_t mh_listener; - -static inline int mh_type_map(uint8_t type) -{ - return type < __MH_SENTINEL ? type : __MH_SENTINEL; -} - -static inline struct mh_handler *mh_handler_get(uint8_t type) -{ - return handlers[mh_type_map(type)]; -} - -void mh_handler_reg(uint8_t type, struct mh_handler *handler) -{ - int i = mh_type_map(type); - - assert(handler->next == NULL); - - pthread_rwlock_wrlock(&handler_lock); - handler->next = handlers[i]; - handlers[i] = handler; - pthread_rwlock_unlock(&handler_lock); -} - -void mh_handler_dereg(uint8_t type, struct mh_handler *handler) -{ - struct mh_handler **h; - int i = mh_type_map(type); - pthread_rwlock_wrlock(&handler_lock); - h = &handlers[i]; - - while (*h) { - if (*h == handler) { - *h = handler->next; - handler->next = NULL; - break; - } - - h = &(*h)->next; - } - - pthread_rwlock_unlock(&handler_lock); -} - -static void *mh_listen(__attribute__ ((unused)) void *arg) -{ - uint8_t msg[MAX_PKT_LEN]; - struct in6_pktinfo pktinfo; - struct in6_addr haoa, rta; - struct sockaddr_in6 addr; - struct ip6_mh *mh; - struct in6_addr_bundle addrs; - ssize_t len; - struct mh_handler *h; - - pthread_dbg("thread started"); - - while (1) { - pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL); - len = mh_recv(msg, sizeof(msg), &addr, &pktinfo, &haoa, &rta); - - /* check if socket has closed */ - if (len == -EBADF) - break; - - /* common validity check */ - if (len < 0 || (size_t)len < sizeof(struct ip6_mh)) - continue; - - addrs.src = &addr.sin6_addr; - addrs.dst = &pktinfo.ipi6_addr; - - if (!IN6_IS_ADDR_UNSPECIFIED(&haoa)) { - addrs.remote_coa = &haoa; - } else { - addrs.remote_coa = NULL; - } - - if (!IN6_IS_ADDR_UNSPECIFIED(&rta)) { - addrs.local_coa = &rta; - } else { - addrs.local_coa = NULL; - } - - addrs.bind_coa = NULL; - mh = (struct ip6_mh *) msg; - pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, NULL); - pthread_rwlock_rdlock(&handler_lock); - h = mh_handler_get(mh->ip6mh_type); - - if (h) - h->recv(mh, len, &addrs, pktinfo.ipi6_ifindex); - - pthread_rwlock_unlock(&handler_lock); - } - - pthread_exit(NULL); -} - -int mh_init(void) -{ - pthread_mutexattr_t mattrs; - int val; - - mh_sock.fd = socket(AF_INET6, SOCK_RAW, IPPROTO_MH); - - if (mh_sock.fd < 0) { - syslog(LOG_ERR, - "Unable to open MH socket! " - "Do you have root permissions?"); - return mh_sock.fd; - } - - val = 1; - - if (setsockopt(mh_sock.fd, IPPROTO_IPV6, IPV6_RECVPKTINFO, - &val, sizeof(val)) < 0) - return -1; - - if (setsockopt(mh_sock.fd, IPPROTO_IPV6, IPV6_RECVDSTOPTS, - &val, sizeof(val)) < 0) - return -1; - - if (setsockopt(mh_sock.fd, IPPROTO_IPV6, IPV6_RECVRTHDR, - &val, sizeof(val)) < 0) - return -1; - - val = 4; - - if (setsockopt(mh_sock.fd, IPPROTO_RAW, IPV6_CHECKSUM, - &val, sizeof(val)) < 0) - return -1; - - pthread_mutexattr_init(&mattrs); - pthread_mutexattr_settype(&mattrs, PTHREAD_MUTEX_FAST_NP); - - if (pthread_mutex_init(&mh_sock.send_mutex, &mattrs) || - pthread_rwlock_init(&handler_lock, NULL) || - pthread_create(&mh_listener, NULL, mh_listen, NULL)) - return -1; - - return 0; -} - -static const size_t _mh_len[] = { - sizeof(struct ip6_mh_binding_request), - sizeof(struct ip6_mh_home_test_init), - sizeof(struct ip6_mh_careof_test_init), - sizeof(struct ip6_mh_home_test), - sizeof(struct ip6_mh_careof_test), - sizeof(struct ip6_mh_binding_update), - sizeof(struct ip6_mh_binding_ack), - sizeof(struct ip6_mh_binding_error) -}; - -/** - * mh_create - create a mobility header - * @iov: vector - * @type: mobility header type - * - * Initializes a new mobility header of type @type. Stores pointer - * and length in iovec vector @iov. Returns pointer to newly created - * header or NULL on error. - **/ -void *mh_create(struct iovec *iov, uint8_t type) -{ - struct ip6_mh *mh; - - if (type > IP6_MH_TYPE_MAX) - return NULL; - - iov->iov_base = malloc(_mh_len[type]); - - if (iov->iov_base == NULL) - return NULL; - - memset(iov->iov_base, 0, _mh_len[type]); - - mh = (struct ip6_mh *)iov->iov_base; - mh->ip6mh_proto = IPPROTO_NONE; - mh->ip6mh_hdrlen = 0; /* calculated after padding */ - mh->ip6mh_type = type; - mh->ip6mh_reserved = 0; - mh->ip6mh_cksum = 0; /* kernel does this for us */ - - iov->iov_len = _mh_len[type]; - - return mh; -} - -/** - * mh_create_opt_refresh_advice - create refresh advice option - * @iov: vector - * @interval: refresh interval - * - * Creates binding refresh advice option with @interval value. Stores - * pointer and length in iovec vector @iov. Returns zero on success, - * otherwise negative error value. - **/ -int mh_create_opt_refresh_advice(struct iovec *iov, uint16_t interval) -{ - struct ip6_mh_opt_refresh_advice *opt; - size_t optlen = sizeof(struct ip6_mh_opt_refresh_advice); - - iov->iov_base = malloc(optlen); - iov->iov_len = optlen; - - if (iov->iov_base == NULL) - return -ENOMEM; - - opt = (struct ip6_mh_opt_refresh_advice *)iov->iov_base; - - opt->ip6mora_type = IP6_MHOPT_BREFRESH; - opt->ip6mora_len = 2; - opt->ip6mora_interval = interval; - - return 0; -} - -/** - * mh_create_opt_altcoa - create alternate care-of address option - * @iov: vector - * @addr: alternate care-of address - * - * Creates an alternate care-of address option. Stores pointer and - * length in iovec vector @iov. Returns zero on success, otherwise - * negative error value. - **/ -int mh_create_opt_altcoa(struct iovec *iov, struct in6_addr *addr) -{ - struct ip6_mh_opt_altcoa *opt; - size_t optlen = sizeof(struct ip6_mh_opt_altcoa); - - iov->iov_base = malloc(optlen); - iov->iov_len = optlen; - - if (iov->iov_base == NULL) - return -ENOMEM; - - opt = (struct ip6_mh_opt_altcoa *)iov->iov_base; - - opt->ip6moa_type = IP6_MHOPT_ALTCOA; - opt->ip6moa_len = 16; - opt->ip6moa_addr = *addr; - - return 0; -} - -/** - * mh_create_opt_nonce_index - create nonce index option - * @iov: vector - * @home_nonce: home nonce value - * @coa_nonce: coa nonce value - * - * Creates a nonce index option with @home_nonce and @coa_nonce - * indices. Stores pointer and length in iovec vector @iov. Returns - * zero on success, otherwise negative error value. - **/ -int mh_create_opt_nonce_index(struct iovec *iov, uint16_t home_nonce, - uint16_t coa_nonce) -{ - struct ip6_mh_opt_nonce_index *opt; - size_t optlen = sizeof(struct ip6_mh_opt_nonce_index); - - iov->iov_base = malloc(optlen); - iov->iov_len = optlen; - - if (iov->iov_base == NULL) - return -ENOMEM; - - opt = (struct ip6_mh_opt_nonce_index *)iov->iov_base; - - opt->ip6moni_type = IP6_MHOPT_NONCEID; - opt->ip6moni_len = 4; - opt->ip6moni_home_nonce = htons(home_nonce); - opt->ip6moni_coa_nonce = htons(coa_nonce); - - return 0; -} - -/** - * mh_create_opt_auth_data - create binding authorization data option - * @iov: vector - * - * Creates a binding authorization data option with data set to zero. - * Real data will be calculated after padding. Stores pointer and - * length in iovec vector @iov. Returns zero on success, otherwise - * negative error value. - **/ -int mh_create_opt_auth_data(struct iovec *iov) -{ - struct ip6_mh_opt_auth_data *opt; - size_t optlen = sizeof(struct ip6_mh_opt_auth_data); - - iov->iov_base = malloc(optlen); - iov->iov_len = optlen; - - if (iov->iov_base == NULL) - return -ENOMEM; - - memset(iov->iov_base, 0, iov->iov_len); - opt = (struct ip6_mh_opt_auth_data *)iov->iov_base; - opt->ip6moad_type = IP6_MHOPT_BAUTH; - opt->ip6moad_len = MIPV6_DIGEST_LEN; - - return 0; -} - -/* We can use these safely, since they are only read and never change */ -static const uint8_t _pad1[1] = { 0x00 }; -static const uint8_t _pad2[2] = { 0x01, 0x00 }; -static const uint8_t _pad3[3] = { 0x01, 0x01, 0x00 }; -static const uint8_t _pad4[4] = { 0x01, 0x02, 0x00, 0x00 }; -static const uint8_t _pad5[5] = { 0x01, 0x03, 0x00, 0x00, 0x00 }; -static const uint8_t _pad6[6] = { 0x01, 0x04, 0x00, 0x00, 0x00, 0x00 }; -static const uint8_t _pad7[7] = { 0x01, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00 }; - -static int create_opt_pad(struct iovec *iov, int pad) -{ - if (pad == 2) - iov->iov_base = (void *)_pad2; - else if (pad == 4) - iov->iov_base = (void *)_pad4; - else if (pad == 6) - iov->iov_base = (void *)_pad6; - /* Odd pads do not occur with current spec, so test them last */ - else if (pad == 1) - iov->iov_base = (void *)_pad1; - else if (pad == 3) - iov->iov_base = (void *)_pad3; - else if (pad == 5) - iov->iov_base = (void *)_pad5; - else if (pad == 7) - iov->iov_base = (void *)_pad7; - - iov->iov_len = pad; - - return 0; -} - -int mh_create_opt_mob_net_prefix(struct iovec *iov, int mnp_count, - struct list_head *mnps) -{ - int optlen = (mnp_count * sizeof(struct ip6_mh_opt_mob_net_prefix) + - (mnp_count - 1) * sizeof(_pad4)); - struct list_head *l; - int i = 0; - uint8_t *data; - iov->iov_base = malloc(optlen); - iov->iov_len = optlen; - - if (iov->iov_base == NULL) - return -ENOMEM; - - memset(iov->iov_base, 0, iov->iov_len); - data = (uint8_t *)iov->iov_base; - - list_for_each(l, mnps) { - struct prefix_list_entry *p; - struct ip6_mh_opt_mob_net_prefix *mnp; - - p = list_entry(l, struct prefix_list_entry, list); - mnp = (struct ip6_mh_opt_mob_net_prefix *)data; - - mnp->ip6mnp_type = IP6_MHOPT_MOB_NET_PRFX; - mnp->ip6mnp_len = 18; - mnp->ip6mnp_prefix_len = p->ple_plen; - mnp->ip6mnp_prefix = p->ple_prefix; - - data += sizeof(struct ip6_mh_opt_mob_net_prefix); - - /* do internal padding here, so one iovec for MNPs is enough */ - if (++i < mnp_count) { - memcpy(data, _pad4, sizeof(_pad4)); - data += sizeof(_pad4); - } - } - return 0; -} - -static size_t mh_length(struct iovec *vec, int count) -{ - size_t len = 0; - int i; - - for (i = 0; i < count; i++) { - len += vec[i].iov_len; - } - - return len; -} - -static inline int optpad(int xn, int y, int offset) -{ - return ((y - offset) & (xn - 1)); -} - -static int mh_try_pad(const struct iovec *in, struct iovec *out, int count) -{ - size_t len = 0; - int m, n = 1, pad = 0; - struct ip6_mh_opt *opt; - - out[0].iov_len = in[0].iov_len; - out[0].iov_base = in[0].iov_base; - len += in[0].iov_len; - - for (m = 1; m < count; m++) { - opt = (struct ip6_mh_opt *)in[m].iov_base; - - switch (opt->ip6mhopt_type) { - case IP6_MHOPT_BREFRESH: - pad = optpad(2, 0, len); /* 2n */ - break; - - case IP6_MHOPT_ALTCOA: - pad = optpad(8, 6, len); /* 8n+6 */ - break; - - case IP6_MHOPT_NONCEID: - pad = optpad(2, 0, len); /* 2n */ - break; - - case IP6_MHOPT_BAUTH: - pad = optpad(8, 2, len); /* 8n+2 */ - break; - - case IP6_MHOPT_MOB_NET_PRFX: - pad = optpad(8, 4, len); /* 8n+4 */ - break; - } - - if (pad > 0) { - create_opt_pad(&out[n++], pad); - len += pad; - } - - len += in[m].iov_len; - out[n].iov_len = in[m].iov_len; - out[n].iov_base = in[m].iov_base; - n++; - } - - if (count == 1) { - pad = optpad(8, 0, len); - create_opt_pad(&out[n++], pad); - } - - return n; -} - -static int calculate_auth_data(const struct iovec *iov, int iovlen, - const struct in6_addr *coa, - const struct in6_addr *cn, - const uint8_t *key, uint8_t *digest) -{ - uint8_t buf[HMAC_SHA1_HASH_LEN]; - int i; - -#ifdef HAVE_LIBCRYPTO - unsigned int len = HMAC_SHA1_HASH_LEN; - HMAC_CTX ctx; - const EVP_MD *evp_md = EVP_sha1(); - - HMAC_CTX_init(&ctx); - HMAC_Init_ex(&ctx, key, HMAC_SHA1_KEY_SIZE, evp_md, NULL); - - HMAC_Update(&ctx, (uint8_t *)coa, sizeof(*coa)); - HMAC_Update(&ctx, (uint8_t *)cn, sizeof(*coa)); - - for (i = 0; i < iovlen; i++) { - HMAC_Update(&ctx, (uint8_t *)iov[i].iov_base, iov[i].iov_len); - } - - HMAC_Final(&ctx, buf, &len); - HMAC_CTX_cleanup(&ctx); -#else - HMAC_SHA1_CTX ctx; - - HMAC_SHA1_init(&ctx, key, HMAC_SHA1_KEY_SIZE); - HMAC_SHA1_update(&ctx, (uint8_t *)coa, sizeof(*coa)); - HMAC_SHA1_update(&ctx, (uint8_t *)cn, sizeof(*coa)); - - for (i = 0; i < iovlen; i++) { - HMAC_SHA1_update(&ctx, (uint8_t *)iov[i].iov_base, - iov[i].iov_len); - } - - HMAC_SHA1_final(&ctx, buf); -#endif - memcpy(digest, buf, MIPV6_DIGEST_LEN); - return 0; -} - -int mh_verify_auth_data(const void *msg, int len, const void *opt, - const struct in6_addr *coa, - const struct in6_addr *cn, - const uint8_t *key) -{ - struct ip6_mh_opt_auth_data *bauth; - struct iovec iov; - uint8_t adata[MIPV6_DIGEST_LEN]; - - bauth = (struct ip6_mh_opt_auth_data *)opt; - iov.iov_base = (void *)msg; - iov.iov_len = len - bauth->ip6moad_len; - calculate_auth_data(&iov, 1, coa, cn, key, adata); - - if (memcmp(adata, bauth->ip6moad_data, bauth->ip6moad_len)) { - /* binding auth data error */ - return -1; - } - - return 0; -} - -/** - * mh_send - send mobility header message - * @addrs: bundle of addresses - * @mh_vec: scatter/gather array - * @iovlen: array block count - * @bind_key: key for calculating binding auth. data - * - * Sends a mobility header message to @dst with @src source address. - * Mobility header is created from the @mh_vec vector array created by - * the caller and initialized with mh_create() and mh_create_opt_*() - * calls. Padding is done automatically and mobility header length is - * set. Binding authorization data is calculated if present. Returns - * number of bytes sent on success, otherwise negative error value. - **/ -int mh_send(const struct in6_addr_bundle *addrs, const struct iovec *mh_vec, - int iovlen, const uint8_t *bind_key, int oif) -{ - struct ip6_mh_opt_auth_data lbad; - struct sockaddr_in6 daddr; - - struct iovec iov[2*(IP6_MHOPT_MAX+1)]; - struct msghdr msg; - struct cmsghdr *cmsg; - int cmsglen; - struct in6_pktinfo pinfo; - int ret = 0, on = 1; - struct ip6_mh *mh; - int iov_count; - socklen_t rthlen = 0; - - iov_count = mh_try_pad(mh_vec, iov, iovlen); - mh = (struct ip6_mh *)iov[0].iov_base; - mh->ip6mh_hdrlen = (mh_length(iov, iov_count) >> 3) - 1; - - /* - * We use MH out policy for all address. Then we should update it - * to refresh its bundle in kernel to be used with correct - * route, IPsec SA and neighbor cache entry for the destination. - * IKE daemon does the same thing for rekeying process. - */ - if (xfrm_cn_policy_mh_out_touch(1) < 0) { - MDBG("MH out policy touch failed: BA for " - "%x:%x:%x:%x:%x:%x:%x:%x\n", NIP6ADDR(addrs->dst)); - } - - MDBG("sending MH type %d\n" - "from %x:%x:%x:%x:%x:%x:%x:%x\n" - "to %x:%x:%x:%x:%x:%x:%x:%x\n", - mh->ip6mh_type, NIP6ADDR(addrs->src), NIP6ADDR(addrs->dst)); - - if (addrs->local_coa) - MDBG("local CoA %x:%x:%x:%x:%x:%x:%x:%x\n", - NIP6ADDR(addrs->local_coa)); - - if (addrs->remote_coa) - MDBG("remote CoA %x:%x:%x:%x:%x:%x:%x:%x\n", - NIP6ADDR(addrs->remote_coa)); - - if (bind_key) { - assert(iov_count > 1); - struct ip6_mh_opt_auth_data *bauth; - struct iovec *biov; - struct in6_addr *cn = NULL; - MDBG("Adding bind auth data\n"); - - if (mh->ip6mh_type == IP6_MH_TYPE_BU) - cn = addrs->dst; - else - cn = addrs->src; - - assert(addrs->bind_coa != NULL && cn != NULL); - biov = &iov[iov_count - 1]; - bauth = (struct ip6_mh_opt_auth_data *)biov->iov_base; - - if (bauth->ip6moad_type == IP6_MHOPT_BAUTH) { - size_t orig_len = biov->iov_len; - - MDBG("Adding auth_data\n"); - memcpy(&lbad, bauth, sizeof(lbad)); - - /* temporarily set iov_len to option header - * length for auth data calculation */ - biov->iov_len -= MIPV6_DIGEST_LEN; - biov->iov_base = &lbad; - calculate_auth_data(iov, iov_count, addrs->bind_coa, - cn, bind_key, lbad.ip6moad_data); - biov->iov_len = orig_len; - } - } - - memset(&daddr, 0, sizeof(struct sockaddr_in6)); - daddr.sin6_family = AF_INET6; - daddr.sin6_addr = *addrs->dst; - daddr.sin6_port = htons(IPPROTO_MH); - - memset(&pinfo, 0, sizeof(pinfo)); - pinfo.ipi6_addr = *addrs->src; - pinfo.ipi6_ifindex = oif; - - cmsglen = CMSG_SPACE(sizeof(pinfo)); - - if (addrs->remote_coa != NULL) { - rthlen = inet6_rth_space(IPV6_RTHDR_TYPE_2, 1); - - if (!rthlen) { - MDBG("inet6_rth_space error\n"); - return -1; - } - - cmsglen += CMSG_SPACE(rthlen); - } - - cmsg = malloc(cmsglen); - - if (cmsg == NULL) { - MDBG("malloc failed\n"); - return -ENOMEM; - } - - memset(cmsg, 0, cmsglen); - memset(&msg, 0, sizeof(msg)); - - msg.msg_control = cmsg; - msg.msg_controllen = cmsglen; - msg.msg_iov = iov; - msg.msg_iovlen = iov_count; - msg.msg_name = (void *)&daddr; - msg.msg_namelen = sizeof(daddr); - - cmsg = CMSG_FIRSTHDR(&msg); - cmsg->cmsg_len = CMSG_LEN(sizeof(pinfo)); - cmsg->cmsg_level = IPPROTO_IPV6; - cmsg->cmsg_type = IPV6_PKTINFO; - memcpy(CMSG_DATA(cmsg), &pinfo, sizeof(pinfo)); - - if (addrs->remote_coa != NULL) { - void *rthp; - - cmsg = CMSG_NXTHDR(&msg, cmsg); - - if (cmsg == NULL) { - free(msg.msg_control); - MDBG("internal error\n"); - return -2; - } - - cmsg->cmsg_len = CMSG_LEN(rthlen); - cmsg->cmsg_level = IPPROTO_IPV6; - cmsg->cmsg_type = IPV6_RTHDR; - rthp = CMSG_DATA(cmsg); - rthp = inet6_rth_init(rthp, rthlen, IPV6_RTHDR_TYPE_2, 1); - - if (rthp == NULL) { - free(msg.msg_control); - MDBG("inet6_rth_init error\n"); - return -3; - } - - inet6_rth_add(rthp, addrs->remote_coa); - rthp = NULL; - } - - pthread_mutex_lock(&mh_sock.send_mutex); - setsockopt(mh_sock.fd, IPPROTO_IPV6, IPV6_PKTINFO, - &on, sizeof(int)); - ret = sendmsg(mh_sock.fd, &msg, 0); - - if (ret < 0) - dbg("sendmsg: %s\n", strerror(errno)); - - pthread_mutex_unlock(&mh_sock.send_mutex); - - free(msg.msg_control); - - statistics_inc(&mipl_stat, MIPL_STATISTICS_OUT_MH); - return ret; -} - -static int mh_opt_len_chk(uint8_t type, int len) -{ - switch (type) { - case IP6_MHOPT_BREFRESH: - return len != sizeof(struct ip6_mh_opt_refresh_advice); - - case IP6_MHOPT_ALTCOA: - return len != sizeof(struct ip6_mh_opt_altcoa); - - case IP6_MHOPT_NONCEID: - return len != sizeof(struct ip6_mh_opt_nonce_index); - - case IP6_MHOPT_BAUTH: - return len != sizeof(struct ip6_mh_opt_auth_data); - - case IP6_MHOPT_MOB_NET_PRFX: - return len != sizeof(struct ip6_mh_opt_mob_net_prefix); - - case IP6_MHOPT_PADN: - default: - return 0; - } -} - - -/** - * mh_opt_parse - parse mobility options - * @mh_opts: pointer to mh_options structure - * @opts: pointer to beginning of options - * @optlen: total length of options in bytes - * - * Parses mobility options from a buffer @opts. Allocates an array of - * ip6_mh_opt pointers pointing to beginnings of mobility options. Array - * is indexed with ip6mhopt_type values. %IP6_MHOPT_PAD1 and - * %IP6_MHOPT_PADN are ignored. Returns number of options parsed - * (excluding pad) on success, otherwise negative error value. - **/ -int mh_opt_parse(const struct ip6_mh *mh, ssize_t len, ssize_t offset, - struct mh_options *mh_opts) -{ - const uint8_t *opts = (uint8_t *) mh; - ssize_t left = len - offset; - ssize_t i = offset; - int ret = 0; - int bauth = 0; - - memset(mh_opts, 0, sizeof(*mh_opts)); - - while (left > 0) { - struct ip6_mh_opt *op = (struct ip6_mh_opt *)&opts[i]; - - /* make sure the binding authorization data is last */ - if (bauth) - return -EINVAL; - - if (op->ip6mhopt_type == IP6_MHOPT_PAD1) { - left--; - i++; - continue; - } - - if ((size_t)left < sizeof(struct ip6_mh_opt) || - mh_opt_len_chk(op->ip6mhopt_type, op->ip6mhopt_len + 2)) { - syslog(LOG_ERR, - "Kernel failed to catch malformed Mobility" - "Option type %d. Update kernel!", - op->ip6mhopt_type); - return -EINVAL; - } - - if (op->ip6mhopt_type == IP6_MHOPT_PADN) { - left -= op->ip6mhopt_len + 2; - i += op->ip6mhopt_len + 2; - continue; - } - - if (op->ip6mhopt_type <= IP6_MHOPT_MAX) { - if (op->ip6mhopt_type == IP6_MHOPT_BAUTH) - bauth = 1; - - if (!mh_opts->opts[op->ip6mhopt_type]) - mh_opts->opts[op->ip6mhopt_type] = i; - else if (mh_opts_dup_ok[op->ip6mhopt_type]) - mh_opts->opts_end[op->ip6mhopt_type] = i; - else - return -EINVAL; - - ret++; - } - - left -= op->ip6mhopt_len + 2; - i += op->ip6mhopt_len + 2; - } - - return ret; -} - -#define CMSG_BUF_LEN 128 - -/** - * mh_recv - receive mobility header signaling message - * @msg: buffer to store message in - * @addr: packet source address - * @pkt_info: packet destination and interface - * @haoaddr: address in home address option (if any) - * @rtaddr: address in routing header type 2 (if any) - * - * Waits for a packet from mobility header @mh_sock.fd socket. - * Stores information about the packet to @addr, @pkt_info, @hoa, and - * @rtaddr. Packet data (i.e. mobility header) is stored in @msg. - * Returns length of packet data received, or negative error value on - * failure. - **/ -ssize_t mh_recv(unsigned char *msg, size_t msglen, - struct sockaddr_in6 *addr, struct in6_pktinfo *pkt_info, - struct in6_addr *haoaddr, struct in6_addr *rtaddr) -{ - struct ip6_mh *mh; - struct msghdr mhdr; - struct cmsghdr *cmsg; - struct iovec iov; - static unsigned char chdr[CMSG_BUF_LEN]; - void *databufp = NULL; - int sockfd = mh_sock.fd; - socklen_t hao_len; - ssize_t len; - - iov.iov_len = msglen; - iov.iov_base = (unsigned char *)msg; - - mhdr.msg_name = (void *)addr; - mhdr.msg_namelen = sizeof(struct sockaddr_in6); - mhdr.msg_iov = &iov; - mhdr.msg_iovlen = 1; - mhdr.msg_control = (void *)&chdr; - mhdr.msg_controllen = CMSG_BUF_LEN; - - if ((len = recvmsg(sockfd, &mhdr, 0)) < 0) - return -errno; - - memset(haoaddr, 0, sizeof(*haoaddr)); - memset(rtaddr, 0, sizeof(*rtaddr)); - - statistics_inc(&mipl_stat, MIPL_STATISTICS_IN_MH); - - for (cmsg = CMSG_FIRSTHDR(&mhdr); cmsg; - cmsg = CMSG_NXTHDR(&mhdr, cmsg)) { - int ret = 0; - - if (cmsg->cmsg_level != IPPROTO_IPV6) - continue; - - switch (cmsg->cmsg_type) { - case IPV6_PKTINFO: - memcpy(pkt_info, CMSG_DATA(cmsg), sizeof(*pkt_info)); - break; - - case IPV6_DSTOPTS: - ret = inet6_opt_find(CMSG_DATA(cmsg), cmsg->cmsg_len, - 0, IP6OPT_HOME_ADDRESS, - &hao_len, &databufp); - - if (ret >= 0 && databufp != NULL && - hao_len == sizeof(struct in6_addr)) { - *haoaddr = *(struct in6_addr *) databufp; - } - - break; - - case IPV6_RTHDR: - if (inet6_rth_gettype(CMSG_DATA(cmsg)) == - IPV6_RTHDR_TYPE_2) { - struct in6_addr *seg = NULL; - /* Kernel already processed routing - * header type 2 for us */ - seg = inet6_rth_getaddr(CMSG_DATA(cmsg), 0); - - if (!seg) - MDBG("Invalid rth\n"); - else - *rtaddr = *seg; - - statistics_inc(&mipl_stat, MIPL_STATISTICS_IN_RH2); - } - - break; - } - } - - mh = (struct ip6_mh *)msg; - - if (mh->ip6mh_type > IP6_MH_TYPE_MAX) { - struct in6_addr *src, *dst, *hoa; - - if (!IN6_IS_ADDR_UNSPECIFIED(rtaddr)) - src = rtaddr; - else - src = &pkt_info->ipi6_addr; - - if (!IN6_IS_ADDR_UNSPECIFIED(haoaddr)) { - hoa = &addr->sin6_addr; - dst = haoaddr; - } else { - hoa = NULL; - dst = &addr->sin6_addr; - } - - mh_send_be(dst, hoa, src, IP6_MH_BES_UNKNOWN_MH, - pkt_info->ipi6_ifindex); - return -EINVAL; - } - - /* No need to perform any other validity checks, since kernel - * does this for us. */ - - statistics_inc(&mipl_stat, MIPL_STATISTICS_IN_MH); - return len; -} - -void mh_send_be(struct in6_addr *dst, struct in6_addr *hoa, - struct in6_addr *src, uint8_t status, int iif) -{ - struct ip6_mh_binding_error *be; - struct iovec iov; - struct in6_addr_bundle out; - - if (IN6_IS_ADDR_UNSPECIFIED(dst) || - IN6_IS_ADDR_LOOPBACK(dst) || - IN6_IS_ADDR_MULTICAST(dst)) { - MDBG("Omit BE for non-unicast " - "%x:%x:%x:%x:%x:%x:%x:%x\n", NIP6ADDR(dst)); - return; - } - - out.remote_coa = NULL; - out.local_coa = NULL; - be = mh_create(&iov, IP6_MH_TYPE_BERROR); - - if (!be) - return; - - be->ip6mhbe_status = status; - out.src = src; - out.dst = dst; - - if (hoa) - be->ip6mhbe_homeaddr = *hoa; - - mh_send(&out, &iov, 1, NULL, iif); - free_iov_data(&iov, 1); - statistics_inc(&mipl_stat, MIPL_STATISTICS_OUT_BE); -} - -/* Check if binding has been used recently and send a binding refresh - * request to get a new BU - */ -void mh_send_brr(struct in6_addr *mn_addr, struct in6_addr *local) -{ - struct iovec mh_vec; - struct in6_addr_bundle addrs; - struct timespec now; - long last_used; - - clock_gettime(CLOCK_REALTIME, &now); - - last_used = xfrm_last_used(mn_addr, local, IPPROTO_ROUTING, &now); - - if (last_used < 0) - return; - - if (last_used > CN_BRR_TIME_THRESH) { - dbg("Binding is about to expire, no need to send a BRR\n"); - return; - } - - /* Should we check for a BUL entry here? */ - dbg("Binding is about to expire, sending a BRR\n"); - addrs.src = local; - addrs.dst = mn_addr; - addrs.remote_coa = NULL; - addrs.local_coa = NULL; - - if (!mh_create(&mh_vec, IP6_MH_TYPE_BRR)) - return; - - mh_send(&addrs, &mh_vec, 1, NULL, 0); - free_iov_data(&mh_vec, 1); - statistics_inc(&mipl_stat, MIPL_STATISTICS_OUT_BRR); -} - -void mh_send_ba(const struct in6_addr_bundle *addrs, uint8_t status, - uint8_t flags, uint16_t sequence, - const struct timespec *lifetime, const uint8_t *key, int iif) -{ - int iovlen = 1; - struct ip6_mh_binding_ack *ba; - struct iovec mh_vec[2]; - - MDBG("status %d\n", status); - - ba = mh_create(mh_vec, IP6_MH_TYPE_BACK); - - if (!ba) - return; - - ba->ip6mhba_status = status; - ba->ip6mhba_flags = flags; - ba->ip6mhba_seqno = htons(sequence); - ba->ip6mhba_lifetime = htons(lifetime->tv_sec >> 2); - - if (status < IP6_MH_BAS_UNSPECIFIED && !conf.NonVolatileBindingCache) { - struct timespec refresh; - tsclear(refresh); - - if (conf.pmgr.use_bradv(addrs->dst, addrs->bind_coa, - addrs->src, lifetime, &refresh) && - tsbefore(*lifetime, refresh)) - mh_create_opt_refresh_advice(&mh_vec[iovlen++], - refresh.tv_sec); - } - - if (key) - mh_create_opt_auth_data(&mh_vec[iovlen++]); - - mh_send(addrs, mh_vec, iovlen, key, iif); - free_iov_data(mh_vec, iovlen); - statistics_inc(&mipl_stat, MIPL_STATISTICS_OUT_BA); -} - -/* Main BU parser, used by both HA (H flag set) and CN (H flag not set). - * Additional specific checks are performed for HA and CN via two - * specific helpers: ha_bu_check() (ha.c) and cn_bu_check() (cn.c). */ -int mh_bu_parse(struct ip6_mh_binding_update *bu, ssize_t len, - const struct in6_addr_bundle *in_addrs, - struct in6_addr_bundle *out_addrs, - struct mh_options *mh_opts, - struct timespec *lifetime) -{ - struct in6_addr *our_addr, *peer_addr, *remote_coa; - struct ip6_mh_opt_altcoa *alt_coa; - - MDBG("Binding Update Received\n"); - - if (len < 0 || (size_t)len < sizeof(struct ip6_mh_binding_update) || - mh_opt_parse(&bu->ip6mhbu_hdr, len, - sizeof(struct ip6_mh_binding_update), mh_opts) < 0) - return -1; - - peer_addr = in_addrs->src; - - if (!in6_is_addr_routable_unicast(peer_addr)) - return -1; - - remote_coa = in_addrs->remote_coa; - - if (remote_coa && !IN6_ARE_ADDR_EQUAL(remote_coa, peer_addr)) - out_addrs->remote_coa = remote_coa; - else - out_addrs->remote_coa = NULL; - - alt_coa = mh_opt(&bu->ip6mhbu_hdr, mh_opts, IP6_MHOPT_ALTCOA); - - if (alt_coa) - out_addrs->bind_coa = &alt_coa->ip6moa_addr; - else - out_addrs->bind_coa = in_addrs->remote_coa; - - our_addr = in_addrs->dst; - tsclear(*lifetime); - - if (out_addrs->bind_coa) { - if (!in6_is_addr_routable_unicast(out_addrs->bind_coa)) - return -1; - - if (!IN6_ARE_ADDR_EQUAL(out_addrs->bind_coa, peer_addr)) { - /* check that there is no circular reference */ - if (bce_exists(our_addr, out_addrs->bind_coa)) - return -1; - - tssetsec(*lifetime, ntohs(bu->ip6mhbu_lifetime) << 2); - } - } - - /* Use Home address of MN for calculating BU and BA auth data - * for deregs. */ - if (!out_addrs->bind_coa) - out_addrs->bind_coa = in_addrs->src; - - out_addrs->src = in_addrs->dst; - out_addrs->dst = in_addrs->src; - out_addrs->local_coa = NULL; - - return 0; -} - -void mh_cleanup(void) -{ - close(mh_sock.fd); - pthread_cancel(mh_listener); - pthread_join(mh_listener, NULL); -} - -/* based on http://www.iana.org/assignments/mobility-parameters (last - * updated 2008-10-10 version), but only for protocols we support, i.e. - * MIPv6 and NEMO. Think about updating MAX_BA_STATUS_STR_LEN in header - * file if needed. */ -void mh_ba_status_to_str(int status, char *err_str) -{ - char *s; - - switch (status) { - case IP6_MH_BAS_ACCEPTED: - s = "Binding Update accepted"; - break; - - case IP6_MH_BAS_PRFX_DISCOV: - s = "Accepted but prefix discovery necessary" ; - break; - - case IP6_MH_BAS_UNSPECIFIED: - s = "Reason unspecified"; - break; - - case IP6_MH_BAS_PROHIBIT: - s = "Administratively prohibited"; - break; - - case IP6_MH_BAS_INSUFFICIENT: - s = "Insufficient resources"; - break; - - case IP6_MH_BAS_HA_NOT_SUPPORTED: - s = "Home registration not supported"; - break; - - case IP6_MH_BAS_NOT_HOME_SUBNET: - s = "Not home subnet"; - break; - - case IP6_MH_BAS_NOT_HA: - s = "Not home agent for this mobile node"; - break; - - case IP6_MH_BAS_DAD_FAILED: - s = "Duplicate Address Detection failed"; - break; - - case IP6_MH_BAS_SEQNO_BAD: - s = "Sequence number out of window"; - break; - - case IP6_MH_BAS_HOME_NI_EXPIRED: - s = "Expired home nonce index"; - break; - - case IP6_MH_BAS_COA_NI_EXPIRED: - s = "Expired care-of nonce index"; - break; - - case IP6_MH_BAS_NI_EXPIRED: - s = "Expired nonces"; - break; - - case IP6_MH_BAS_REG_NOT_ALLOWED: - s = "Registration type change disallowed"; - break; - - case IP6_MH_BAS_MR_OP_NOT_PERMITTED: - s = "Mobile Router Operation not permitted"; - break; - - case IP6_MH_BAS_INVAL_PRFX: - s = "Invalid Prefix"; - break; - - case IP6_MH_BAS_NOT_AUTH_FOR_PRFX: - s = "Not Authorized for Prefix"; - break; - - case IP6_MH_BAS_FWDING_FAILED: - s = "Forwarding Setup failed"; - break; - - default: - s = "unknown by UMIP"; - break; - } - - memset(err_str, 0, MAX_BA_STATUS_STR_LEN); - sprintf(err_str, "%s (%d)", s, status); -} diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/src/mh.h b/openair3/PMIPv6/pmipv6-daemon-umip/src/mh.h deleted file mode 100755 index 79fae7ad18..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/src/mh.h +++ /dev/null @@ -1,148 +0,0 @@ -/* $Id: mh.h 1.43 06/05/07 21:52:43+03:00 anttit@tcs.hut.fi $ */ - -#ifndef __MH_H__ -#define __MH_H__ 1 - -#include -#include -#include "pmip_consts.h" - - -#define MIP6_SEQ_GT(x,y) ((short int)(((uint16_t)(x)) - ((uint16_t)(y))) > 0) - -/* If new types or options appear, these should be updated. */ -//For PMIP -#define IP6_MH_TYPE_MAX IP6_MH_TYPE_PBRES -#define IP6_MHOPT_MAX IP6_MHOPT_PMIP_MAX - -struct sock { - pthread_mutex_t send_mutex; - int fd; -}; - -struct in6_addr_bundle { - struct in6_addr *src; - struct in6_addr *dst; - struct in6_addr *local_coa; - struct in6_addr *remote_coa; - struct in6_addr *bind_coa; -}; - -struct mh_options { - ssize_t opts[IP6_MHOPT_MAX + 1]; - ssize_t opts_end[IP6_MHOPT_MAX + 1]; -}; - -struct mh_handler { - struct mh_handler *next; - void (* recv)(const struct ip6_mh *mh, ssize_t len, - const struct in6_addr_bundle *in_addrs, int iif); -}; - -int mh_init(void); -void mh_cleanup(void); - -int mh_send(const struct in6_addr_bundle *addrs, - const struct iovec *mh_vec, int iovlen, - const uint8_t *bind_key, int oif); - -void mh_send_brr(struct in6_addr *mn_addr, struct in6_addr *local); - -void mh_send_ba(const struct in6_addr_bundle *addrs, uint8_t status, - uint8_t flags, uint16_t sequence, - const struct timespec *lifetime, - const uint8_t *key, int iif); - -static inline void mh_send_ba_err(const struct in6_addr_bundle *addrs, - uint8_t status, uint8_t flags, - uint16_t seqno, const uint8_t *key, int iif) -{ - struct timespec zero = { 0, 0 }; - mh_send_ba(addrs, status, flags, seqno, &zero, key, iif); -} - -void mh_send_be(struct in6_addr *dst, - struct in6_addr *hoa, - struct in6_addr *src, - uint8_t status, int iif); - -ssize_t mh_recv(unsigned char *msg, size_t msglen, - struct sockaddr_in6 *addr, struct in6_pktinfo *pkt_info, - struct in6_addr *hoa, struct in6_addr *rtaddr); - -/* Mobility header and option creation functions */ -void *mh_create(struct iovec *iov, uint8_t type); - -int mh_create_opt_refresh_advice(struct iovec *iov, uint16_t interval); - -int mh_create_opt_altcoa(struct iovec *iov, struct in6_addr *addr); - -int mh_create_opt_nonce_index(struct iovec *iov, uint16_t home_nonce, - uint16_t coa_nonce); - -int mh_create_opt_auth_data(struct iovec *iov); - -struct list_head; - -int mh_create_opt_mob_net_prefix(struct iovec *iov, int mnp_count, - struct list_head *mnps); - -static inline void *mh_opt(const struct ip6_mh *mh, - const struct mh_options *mh_opts, uint8_t type) -{ - if (mh_opts->opts[type]) { - uint8_t *data = (uint8_t *)mh; - return &data[mh_opts->opts[type]]; - } - - return NULL; -} - -static inline void *mh_opt_next(const struct ip6_mh *mh, - const struct mh_options *mh_opts, - const void *vopt) -{ - uint8_t *data = (uint8_t *)mh; - uint8_t *opt = (uint8_t *)vopt; - - if (opt) { - ssize_t last = mh_opts->opts_end[opt[0]]; - ssize_t i = opt - data; - - while (i < last) { - if (data[i] == IP6_MHOPT_PAD1) - i++; - else - i += data[i + 1] + 2; - - if (i <= last && data[i] == opt[0]) - return &data[i]; - } - } - - return NULL; -} - -/* Mobility option parse functions */ -int mh_opt_parse(const struct ip6_mh *mh, ssize_t len, ssize_t offset, - struct mh_options *mh_opts); - -int mh_verify_auth_data(const void *msg, int len, const void *opt, - const struct in6_addr *coa, - const struct in6_addr *cn, - const uint8_t *key); - -int mh_bu_parse(struct ip6_mh_binding_update *bu, ssize_t len, - const struct in6_addr_bundle *in_addrs, - struct in6_addr_bundle *out_addrs, - struct mh_options *mh_opts, - struct timespec *lifetime); - -void mh_handler_reg(uint8_t type, struct mh_handler *handler); -void mh_handler_dereg(uint8_t type, struct mh_handler *handler); - -/* Some debug helper for BA status */ -#define MAX_BA_STATUS_STR_LEN 64 -void mh_ba_status_to_str(int status, char *err_str); - -#endif diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/src/mipv6.h b/openair3/PMIPv6/pmipv6-daemon-umip/src/mipv6.h deleted file mode 100755 index 7ca56b0074..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/src/mipv6.h +++ /dev/null @@ -1,61 +0,0 @@ -/* $Id: mipv6.h 1.8 06/02/28 18:36:44+02:00 anttit@tcs.hut.fi $ */ - -/* Put all constants defined in MIPv6 spec in this file */ - -#ifndef __MIPV6_H__ -#define __MIPV6_H__ 1 - -#include - -/* 12. Protocol Constants */ -#define DHAAD_RETRIES 4 /* retransmissions */ -#define INITIAL_BINDACK_TIMEOUT 1 /* second */ -#define INITIAL_DHAAD_TIMEOUT 3 /* seconds */ -#define INITIAL_SOLICIT_TIMER 3 /* seconds */ -#define MAX_BINDACK_TIMEOUT 32 /* seconds */ -#define MAX_NONCE_LIFETIME 240 /* seconds */ -#define MAX_TOKEN_LIFETIME 210 /* seconds */ -#define MAX_RR_BINDING_LIFETIME 420 /* seconds */ -#define MAX_CONSECUTIVE_RESENDS 5 /* retransmissions */ -#define PREFIX_ADV_RETRIES 3 /* retransmissions */ -#define PREFIX_ADV_TIMEOUT 3 /* seconds */ - -/* Constants below have no explicit names in the spec. */ - -#define MAX_BINDING_LIFETIME (0xffff << 2) /* seconds */ - -/* Maximum time for a binding to be unused for CN to still send a BRR - * before the binding expires */ -#define CN_BRR_TIME_THRESH 60 - -/* 5.2.2: 64 bits (recommended) */ -#define NONCE_LENGTH 8 - -/* 5.2.5 */ -#define HMAC_SHA1_HASH_LEN 20 - -/* 5.2.1 */ -#define HMAC_SHA1_KEY_SIZE 20 - -/* 6.2.7: 96 bits */ -#define MIPV6_DIGEST_LEN 12 - -extern const struct timespec initial_bindack_timeout_ts; -extern const struct timespec initial_dhaad_timeout_ts; -extern const struct timespec initial_solicit_timer_ts; -extern const struct timespec max_bindack_timeout_ts; -extern const struct timespec max_nonce_lifetime_ts; -extern const struct timespec max_token_lifetime_ts; -extern const struct timespec max_rr_binding_lifetime_ts; -extern const struct timespec prefix_adv_timeout_ts; - -#define INITIAL_BINDACK_TIMEOUT_TS initial_bindack_timeout_ts -#define INITIAL_DHAAD_TIMEOUT_TS initial_dhaad_timeout_ts -#define INITIAL_SOLICIT_TIMER_TS initial_solicit_timer_ts -#define MAX_BINDACK_TIMEOUT_TS max_bindack_timeout_ts -#define MAX_NONCE_LIFETIME_TS max_nonce_lifetime_ts -#define MAX_TOKEN_LIFETIME_TS max_token_lifetime_ts -#define MAX_RR_BINDING_LIFETIME_TS max_rr_binding_lifetime_ts -#define PREFIX_ADV_TIMEOUT_TS prefix_adv_timeout_ts - -#endif diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/src/mk-pmgr_c.sh b/openair3/PMIPv6/pmipv6-daemon-umip/src/mk-pmgr_c.sh deleted file mode 100755 index 76651da4ad..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/src/mk-pmgr_c.sh +++ /dev/null @@ -1,21 +0,0 @@ -#!/bin/bash -# $Id: mk-pmgr_c.sh 1.1 05/02/21 14:45:42+02:00 anttit@tcs.hut.fi $ - -DEFAULTS=policy.h -INFILE=pmgr.c.in -OUTFILE=pmgr.c -TMP=tmp.$$ - -cat < $TMP -/* Do not edit. This file is automatically created during make. */ -EOF - -sed -ne '1,/##INSERT_DEFAULTS##/{p}' $INFILE | grep -v '^/\* ##' > $TMP -sed -ne '/int default_/{s/int default_\([^(]*\).*/lb->\1 = default_\1;/;p}' $DEFAULTS >> $TMP -sed -ne '/##INSERT_DEFAULTS##/,/##INSERT_ENTRYPOINTS##/{p}' \ - $INFILE | grep -v '^/\* ##' >> $TMP -sed -ne '/int default_/{s/int default_\([^(]*\).*/func.v = dlsym(h, "\1");\nif (dlerror() == NULL)\nep->\1 = func.i;/;p}' $DEFAULTS >> $TMP -sed -ne '/##INSERT_ENTRYPOINTS##/,//{p}' $INFILE | grep -v '^/\* ##' >> $TMP - -indent -kr -ncs -i8 $TMP -o $OUTFILE -rm -f $TMP diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/src/mk-pmgr_h.sh b/openair3/PMIPv6/pmipv6-daemon-umip/src/mk-pmgr_h.sh deleted file mode 100755 index 1a573dc4a8..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/src/mk-pmgr_h.sh +++ /dev/null @@ -1,23 +0,0 @@ -#!/bin/bash -# $Id: mk-pmgr_h.sh 1.1 05/02/21 14:45:42+02:00 anttit@tcs.hut.fi $ - -DEFAULTS=policy.h -INFILE=pmgr.h.in -OUTFILE=pmgr.h -TMP=tmp.$$ - -cat < $TMP -/* Do not edit. This file is automatically created during make. */ -EOF - -sed -ne '1,/##INSERT_FUNCTIONPOINTERS##/{p}' \ - $INFILE | grep -v '^/\* ##' >> $TMP -sed -ne '/int default_[^;]*$/,/);/{s/int default_\([^(]*\)/int (*\1)/;p}' \ - $DEFAULTS >> $TMP -sed -ne '/int default_[^;]*;$/{s/int default_\([^(]*\)/int (*\1)/;p}' \ - $DEFAULTS >> $TMP -sed -ne '/##INSERT_FUNCTIONPOINTERS##/,//{p}' \ - $INFILE | grep -v '^/\* ##' >> $TMP - -indent -kr -i8 $TMP -o $OUTFILE -rm -f $TMP diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/src/mn.c b/openair3/PMIPv6/pmipv6-daemon-umip/src/mn.c deleted file mode 100755 index 39ebf94d6c..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/src/mn.c +++ /dev/null @@ -1,2900 +0,0 @@ -/* - * $Id: mn.c 1.380 06/05/15 18:34:56+03:00 vnuorval@tcs.hut.fi $ - * - * This file is part of the MIPL Mobile IPv6 for Linux. - * - * Authors: - * Ville Nuorvala - * Antti Tuominen - * Henrik Petander - * - * Copyright 2003-2005 Go-Core Project - * Copyright 2003-2006 Helsinki University of Technology - * - * MIPL Mobile IPv6 for Linux is free software; you can redistribute - * it and/or modify it under the terms of the GNU General Public - * License as published by the Free Software Foundation; version 2 of - * the License. - * - * MIPL Mobile IPv6 for Linux is distributed in the hope that it will - * be useful, but WITHOUT ANY WARRANTY; without even the implied - * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with MIPL Mobile IPv6 for Linux; if not, write to the Free - * Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - * 02111-1307 USA. - */ - -#ifdef HAVE_CONFIG_H -#include -#endif -#include -#include -#include -#include -#include - -#include -#include -#include -#include - -#include - -#include "debug.h" -#include "mipv6.h" -#include "icmp6.h" -#include "ndisc.h" -#include "mpdisc_mn.h" -#include "mh.h" -#include "mn.h" -#include "cn.h" -#include "movement.h" -#include "util.h" -#include "list.h" -#include "bul.h" -#include "xfrm.h" -#include "tunnelctl.h" -#include "rtnl.h" -#include "conf.h" -#include "prefix.h" -#include "retrout.h" -#include "keygen.h" -#include "dhaad_mn.h" -#include "ipsec.h" -#include "statistics.h" - -#define MN_DEBUG_LEVEL 1 - -#if MN_DEBUG_LEVEL >= 1 -#define MDBG dbg -#else -#define MDBG(...) -#endif - -#if MN_DEBUG_LEVEL >= 2 -#define MDBG2 dbg -#else -#define MDBG2(...) -#endif - -#ifndef FIB_RULE_FIND_SADDR -#define FIB_RULE_FIND_SADDR 0 -#endif - -LIST_HEAD(home_addr_list); - -pthread_rwlock_t mn_lock; - -const struct timespec dereg_bu_lifetime_ts = -{ DEREG_BU_LIFETIME, 0 }; -const struct timespec non_mip_cn_ltime_ts = -{ NON_MIP_CN_LTIME, 0 }; -const struct timespec min_valid_bu_lifetime_ts = -{ MIN_VALID_BU_LIFETIME, 0 }; - -static int pending_bas = 0; - -static void mn_send_home_bu(struct home_addr_info *hai); -static int mn_ext_tunnel_ops(int request, int old_if, int new_if, void *data); - -static int mn_block_rule_del(struct home_addr_info *hai) -{ - int ret = -1; - - if (!(hai->home_block & HOME_ADDR_RULE_BLOCK)) { - MDBG("blackhole is not set.\n"); - return ret; - } - - if ((ret = rule_del(NULL, 0, IP6_RULE_PRIO_MIP6_BLOCK, RTN_BLACKHOLE, - &hai->hoa.addr, 128, &in6addr_any, 0, - FIB_RULE_FIND_SADDR)) < 0) - MDBG("failed to delete blackhole rule.\n"); - else - hai->home_block &= ~HOME_ADDR_RULE_BLOCK; - - return ret; -} - -static int mn_block_rule_add(struct home_addr_info *hai) -{ - int ret = -1; - - if (hai->home_block & HOME_ADDR_RULE_BLOCK) { - MDBG("blackhole is already set.\n"); - return ret; - } - - if ((ret = rule_add(NULL, 0, IP6_RULE_PRIO_MIP6_BLOCK, RTN_BLACKHOLE, - &hai->hoa.addr, 128, &in6addr_any, 0, - FIB_RULE_FIND_SADDR)) < 0) - MDBG("failed to add blackhole rule.\n"); - else - hai->home_block |= HOME_ADDR_RULE_BLOCK; - - return ret; -} - -static void bul_expire(struct tq_elem *tqe) -{ - pthread_rwlock_wrlock(&mn_lock); - - if (!task_interrupted()) { - struct bulentry *bule = tq_data(tqe, struct bulentry, tqe); - /* Set lifetime to 0 to help bul_delete */ - tsclear(bule->lifetime); - MDBG("Bul expire type %d", bule->type); - bul_delete(bule); - } - - pthread_rwlock_unlock(&mn_lock); -} - -static void bule_invalidate(struct bulentry *e, - struct timespec *timestamp, - int block) -{ - struct home_addr_info *hai = e->home; - struct in6_addr hoa, peer_addr; - int type = e->type; - uint16_t flags = e->flags; - - if (type != BUL_ENTRY) - return; - - MDBG("%s unable to handle binding, changing BUL entry to %s\n", - (e->flags & IP6_MH_BU_HOME ? "HA" : "CN"), - (block ? "NON_MIP_CN_ENTRY" : "UNREACH_ENTRY")); - - hoa = e->hoa; - peer_addr = e->peer_addr; - - bul_delete(e); - - if (hai->at_home) - return; - - e = create_bule(&hoa, &peer_addr); - - if (e == NULL) - return; - - e->type = block ? NON_MIP_CN_ENTRY : UNREACH_ENTRY; - e->flags = flags; - e->home = hai; - e->lastsent = *timestamp; - e->lifetime = NON_MIP_CN_LTIME_TS; - e->delay = NON_MIP_CN_LTIME_TS; - e->callback = bul_expire; - - if (bul_add(e) < 0) - bul_delete(e); -} - -static void mn_reset_ro_bule(struct bulentry *e) -{ - e->callback = bul_expire; - e->lifetime = MAX_TOKEN_LIFETIME_TS; - e->delay = MAX_TOKEN_LIFETIME_TS; - e->do_send_bu = 1; -} - -static void mn_rr_check_entry(struct tq_elem *tqe) -{ - struct bulentry *bule; - struct timespec now; - long last_used; - - pthread_rwlock_wrlock(&mn_lock); - - if (task_interrupted()) { - pthread_rwlock_unlock(&mn_lock); - return; - } - - bule = tq_data(tqe, struct bulentry, tqe); - - clock_gettime(CLOCK_REALTIME, &now); - - last_used = mn_bule_xfrm_last_used(&bule->peer_addr, &bule->hoa, &now); - - if (last_used >= 0 && last_used < MN_RO_RESTART_THRESHOLD) { - bule->lastsent = now; - mn_reset_ro_bule(bule); - pre_bu_bul_update(bule); - mn_rr_refresh(bule); - - if (bule->rr.state == RR_READY) - mn_send_cn_bu(bule); - else { - bul_update_expire(bule); - bul_update_timer(bule); - } - - pthread_rwlock_unlock(&mn_lock); - return; - } - - bul_delete(bule); - pthread_rwlock_unlock(&mn_lock); -} - -static void mn_recv_param_prob(const struct icmp6_hdr *ih, ssize_t len, - __attribute__ ((unused)) const struct in6_addr *src, - const struct in6_addr *dst, - __attribute__ ((unused)) int iif, - __attribute__ ((unused)) int hoplimit) -{ - struct ip6_hdr *ip6h = (struct ip6_hdr *)(ih + 1); - int optlen = len - sizeof(struct icmp6_hdr); - uint32_t errptr; - uint8_t *off_octet; - struct bulentry *e = NULL; - struct in6_addr *laddr = &ip6h->ip6_src; - struct in6_addr *raddr = &ip6h->ip6_dst; - struct in6_addr addr; - - /* We only handle code 1 & 2 messages. */ - if (ih->icmp6_code != ICMP6_PARAMPROB_NEXTHEADER && - ih->icmp6_code != ICMP6_PARAMPROB_OPTION) - return; - - /* Find offending octet in the original packet. */ - errptr = ntohl(ih->icmp6_pptr); - - /* Validity checks */ - if (len < 0 || - (uint32_t)len <= errptr || !IN6_ARE_ADDR_EQUAL(laddr, dst) || - icmp6_parse_data(ip6h, optlen, &laddr, &raddr) < 0) - return; - - off_octet = ((uint8_t *) ip6h + errptr); - MDBG("Parameter problem: offending octet %d [0x%2x]\n", - errptr, *off_octet); - - /* If CN did not understand Mobility Header, set BUL entry to - * ACK_ERROR so no further BUs are sumbitted to this CN. */ - if (ih->icmp6_code == ICMP6_PARAMPROB_NEXTHEADER && - *off_octet == IPPROTO_MH) { - MDBG("CN doesn't implement MH handling.\n"); - statistics_inc(&mipl_stat, MIPL_STATISTICS_IN_X_MH_PARAM); - } else if (ih->icmp6_code == ICMP6_PARAMPROB_OPTION && - *off_octet == IP6OPT_HOME_ADDRESS) { - MDBG("CN doesn't implement Home Address Option processing\n"); - statistics_inc(&mipl_stat, MIPL_STATISTICS_IN_X_HAO_PARAM); - } else { - MDBG("Got ICMPv6 paramprob not resulting from HAO or MH\n"); - return; - } - - pthread_rwlock_wrlock(&mn_lock); - - if (mn_rr_error_check(laddr, raddr, &addr)) - laddr = &addr; - - e = bul_get(NULL, laddr, raddr); - - if (e != NULL) { - if (e->flags & IP6_MH_BU_HOME) { - if (!conf.UseMnHaIPsec && - !conf.MnDiscardHaParamProb) { - clock_gettime(CLOCK_REALTIME, &e->lastsent); - bule_invalidate(e, &e->lastsent, 1); - } - } else if (ih->icmp6_code == ICMP6_PARAMPROB_OPTION) { - syslog(LOG_ERR, - "CN participated in RO but can't handle HAO\n"); - } else { - clock_gettime(CLOCK_REALTIME, &e->lastsent); - bule_invalidate(e, &e->lastsent, 1); - } - } - - pthread_rwlock_unlock(&mn_lock); -} - -static struct icmp6_handler mn_param_prob_handler = { - .recv = mn_recv_param_prob, -}; - -static int mn_send_bu_msg(struct bulentry *bule) -{ - struct ip6_mh_binding_update *bu; - - struct iovec iov[IP6_MHOPT_MAX+1]; - int iov_ind = 0; - int ret = -ENOMEM; - uint8_t *bind_key = NULL; - struct in6_addr_bundle addrs; - - memset(iov, 0, IP6_MHOPT_MAX+1); - bu = mh_create(&iov[iov_ind++], IP6_MH_TYPE_BU); - - if (!bu) - return -ENOMEM; - - bu->ip6mhbu_seqno = htons(bule->seq); - bu->ip6mhbu_flags = bule->flags; - bu->ip6mhbu_lifetime = htons(bule->lifetime.tv_sec >> 2); - - if (bule->use_alt_coa && - mh_create_opt_altcoa(&iov[iov_ind++], &bule->coa)) { - free_iov_data(iov, iov_ind); - return -ENOMEM; - } - - if (bule->flags & IP6_MH_BU_HOME) { - struct home_addr_info *hai = bule->home; - - if (bule->flags & IP6_MH_BU_MR && bu->ip6mhbu_lifetime && - bule->home->mnp_count > 0 && conf.MobRtrUseExplicitMode && - mh_create_opt_mob_net_prefix(&iov[iov_ind++], - hai->mnp_count, - &hai->mob_net_prefixes) < 0) { - free_iov_data(iov, iov_ind); - return -ENOMEM; - } - } else { - if (mh_create_opt_nonce_index(&iov[iov_ind++], bule->rr.ho_ni, - bule->rr.co_ni) || - mh_create_opt_auth_data(&iov[iov_ind++])) { - free_iov_data(iov, iov_ind); - return -ENOMEM; - } - - bind_key = bule->Kbm; - } - - if (bule->flags & IP6_MH_BU_ACK) - bule->wait_ack = 1; - - addrs.src = &bule->hoa; - addrs.dst = &bule->peer_addr; - addrs.local_coa = &bule->coa; - addrs.remote_coa = NULL; - addrs.bind_coa = &bule->coa; - - ret = mh_send(&addrs, iov, iov_ind, bind_key, bule->if_coa); - - if (ret <= 0) - MDBG("mh_send failed ret: %d\n", ret); - - free_iov_data(iov, iov_ind); - statistics_inc(&mipl_stat, MIPL_STATISTICS_OUT_BU); - - return ret; -} - -static int mn_get_home_lifetime(struct home_addr_info *hai, - struct timespec *lifetime, int dereg) -{ - if (!hai->at_home && !dereg) { - struct mn_addr *coa = &hai->primary_coa; - struct timespec now; - unsigned long coa_lft; - unsigned long hoa_lft; - - clock_gettime(CLOCK_REALTIME, &now); - - coa_lft = mpd_curr_lft(&now, &coa->timestamp, - coa->valid_time.tv_sec); - hoa_lft = mpd_curr_lft(&now, &hai->hoa.timestamp, - hai->hoa.valid_time.tv_sec); - - tssetsec(*lifetime, umin(umin(coa_lft, hoa_lft), - conf.MnMaxHaBindingLife)); - - mpd_sanitize_lft(lifetime); - - MDBG("CoA lifetime %u s, HoA lifetime %u s, BU lifetime %u s\n", - coa_lft, hoa_lft, lifetime->tv_sec); - - return 0; - } else { - tsclear(*lifetime); - MDBG("BU lifetime %u s\n", lifetime->tv_sec); - return 1; - } -} - -static int mn_get_ro_lifetime(struct home_addr_info *hai, - struct timespec *lifetime, int dereg) -{ - tsclear(*lifetime); - - if (!hai->at_home && !dereg) { - struct bulentry *e; - - e = bul_get(hai, NULL, &hai->ha_addr); - - if (e == NULL || !(e->flags & IP6_MH_BU_HOME)) { - MDBG("No valid home registration"); - } else { - struct timespec now; - struct mn_addr *coa = &hai->primary_coa; - unsigned long coa_lft; - unsigned long home_lft; - - clock_gettime(CLOCK_REALTIME, &now); - - coa_lft = mpd_curr_lft(&now, &coa->timestamp, - coa->valid_time.tv_sec); - - home_lft = mpd_curr_lft(&now, &e->lastsent, - e->lifetime.tv_sec); - - tssetsec(*lifetime, umin(umin(coa_lft, home_lft), - conf.MnMaxCnBindingLife)); - - mpd_sanitize_lft(lifetime); - } - - return 0; - } - - MDBG("BU lifetime %u s\n", lifetime->tv_sec); - return 1; -} - -static int mn_dereg(void *vbule, __attribute__ ((unused)) void *arg) -{ - struct bulentry *bule = vbule; - - if (bule->type == BUL_ENTRY) { - if (!(bule->flags & IP6_MH_BU_HOME)) { - bule->dereg = 1; - mn_rr_refresh(bule); - - if (bule->rr.state != RR_READY) - return 0; - } - - bule->seq++; - tsclear(bule->lifetime); - mn_send_bu_msg(bule); - } - - bul_delete(bule); - return 0; -} - -#define FLUSH_ALL 0 -#define FLUSH_VALID 1 -#define FLUSH_FAILED 2 - -static int _bul_flush(void *vbule, void *arg) -{ - struct bulentry *bule = vbule; - int *type = arg; - - if (*type == FLUSH_ALL || - (*type == FLUSH_VALID && bule->type == BUL_ENTRY) || - (*type == FLUSH_FAILED && bule->type != BUL_ENTRY)) - bul_delete(bule); - - return 0; -} - -static void mn_change_ha(struct home_addr_info *hai) -{ - int dhaad = dhaad_home_reg_failed(hai); - int type = FLUSH_VALID; - - if (hai->home_reg_status != HOME_REG_NONE) - bul_iterate(&hai->bul, _bul_flush, &type); - - syslog(LOG_ERR, - "Home registration failed with HA, trying next one\n"); - - if (!dhaad && !hai->at_home) - mn_send_home_bu(hai); -} - -static int bu_lft_check(struct bulentry *bule) -{ - if (!tsisset(bule->lifetime)) - return 0; - - int dereg; - - if (bule->flags & IP6_MH_BU_HOME) - dereg = mn_get_home_lifetime(bule->home, &bule->lifetime, 0); - else - dereg = mn_get_ro_lifetime(bule->home, &bule->lifetime, - bule->dereg); - - return !dereg && !tsisset(bule->lifetime); -} - -/* - * bu_resend - resend a binding update - */ -static void bu_resend(struct tq_elem *tqe) -{ - pthread_rwlock_wrlock(&mn_lock); - - if (!task_interrupted()) { - struct bulentry *bule = tq_data(tqe, struct bulentry, tqe); - struct home_addr_info *hai = bule->home; - int expired; - - MDBG("Bul resend [%p] type %d\n", bule, bule->type); - - clock_gettime(CLOCK_REALTIME, &bule->lastsent); - tsadd(bule->delay, bule->delay, bule->delay); - bule->delay = tsmin(bule->delay, MAX_BINDACK_TIMEOUT_TS); - bule->consecutive_resends++; - - expired = bu_lft_check(bule); - - bule->seq++; - - if (bule->flags & IP6_MH_BU_HOME && - hai->use_dhaad && - bule->consecutive_resends > MAX_CONSECUTIVE_RESENDS) { - struct timespec now; - clock_gettime(CLOCK_REALTIME, &now); - bule_invalidate(bule, &now, 0); - mn_change_ha(hai); - pthread_rwlock_unlock(&mn_lock); - return; - } - - mn_send_bu_msg(bule); - - if (expired) - bul_delete(bule); - else { - bul_update_expire(bule); - bul_update_timer(bule); - } - } - - pthread_rwlock_unlock(&mn_lock); -} - -static void bu_refresh(struct tq_elem *tqe) -{ - pthread_rwlock_wrlock(&mn_lock); - - if (!task_interrupted()) { - struct bulentry *bule = tq_data(tqe, struct bulentry, tqe); - int expired; - MDBG("Bul refresh type: %d\n", bule->type); - - clock_gettime(CLOCK_REALTIME, &bule->lastsent); - - bule->delay = conf.InitialBindackTimeoutReReg_ts; - - expired = bu_lft_check(bule); - - bule->seq++; - bule->callback = bu_resend; - pre_bu_bul_update(bule); - mn_send_bu_msg(bule); - - if (expired) - bul_delete(bule); - else { - bul_update_expire(bule); - bul_update_timer(bule); - - if (conf.OptimisticHandoff) - post_ba_bul_update(bule); - } - } - - pthread_rwlock_unlock(&mn_lock); -} - -static void mn_update_hoa_lifetime(struct mn_addr *mn_hoa, - struct timespec *timestamp, - uint32_t valid_time, - uint32_t preferred_time) -{ - mn_hoa->timestamp = *timestamp; - tssetsec(mn_hoa->valid_time, valid_time); - tssetsec(mn_hoa->preferred_time, preferred_time); - MDBG2("updated HoA lifetimes: preferred %u s and valid %u s\n", - mn_hoa->preferred_time.tv_sec, mn_hoa->valid_time.tv_sec); -} - -struct mv_hoa_args { - struct home_addr_info *target; - int if_next; -}; - -/* - * Move home address between - */ -static int mv_hoa(struct ifaddrmsg *ifa, struct rtattr *rta_tb[], void *arg) -{ - struct mv_hoa_args *mha = arg; - struct home_addr_info *hai = mha->target; - struct mn_addr *hoa = &hai->hoa; - int err; - struct timespec now; - uint32_t preferred = PREFIX_LIFETIME_INFINITE; - uint32_t valid = PREFIX_LIFETIME_INFINITE; - int plen = (mha->if_next == hai->if_tunnel ? 128 : hai->plen); - - clock_gettime(CLOCK_REALTIME, &now); - - if (hai->lladdr_comp && rta_tb[IFA_CACHEINFO] != NULL) { - struct ifa_cacheinfo *ci = RTA_DATA(rta_tb[IFA_CACHEINFO]); - mn_update_hoa_lifetime(hoa, &now, - ci->ifa_valid, ci->ifa_prefered); - valid = ci->ifa_valid; - preferred = ci->ifa_prefered; - } - - if (mha->if_next >= 0 && (unsigned int)mha->if_next == ifa->ifa_index) - return 0; - - MDBG("move HoA %x:%x:%x:%x:%x:%x:%x:%x/%d from iface %d to %d\n", - NIP6ADDR(&hoa->addr), plen, ifa->ifa_index, mha->if_next); - - err = addr_add(&hoa->addr, plen, - ifa->ifa_flags|IFA_F_HOMEADDRESS_NODAD, - ifa->ifa_scope, mha->if_next, preferred, valid); - - if (err < 0) - return err; - - hoa->iif = mha->if_next; - addr_del(&hoa->addr, ifa->ifa_prefixlen, ifa->ifa_index); - return 0; -} - -int nemo_mr_tnl_routes_add(struct home_addr_info *hai, int ifindex) -{ - struct list_head *l; - struct prefix_list_entry *pe; - list_for_each(l, &hai->mob_net_prefixes) { - struct prefix_list_entry *p; - p = list_entry(l, struct prefix_list_entry, list); - - if (route_add(ifindex, RT6_TABLE_MIP6, RTPROT_MIP, - 0, IP6_RT_PRIO_MIP6_FWD, - &p->ple_prefix, p->ple_plen, - &in6addr_any, 0, NULL) < 0) { - pe = p; - goto undo; - } - } - return 0; -undo: - list_for_each(l, &hai->mob_net_prefixes) { - struct prefix_list_entry *p; - p = list_entry(l, struct prefix_list_entry, list); - route_del(ifindex, RT6_TABLE_MIP6, IP6_RT_PRIO_MIP6_FWD, - &p->ple_prefix, p->ple_plen, &in6addr_any, 0, NULL); - - if (p == pe) - break; - } - return -1; -} - -static int mn_tnl_state_add(struct home_addr_info *hai, int ifindex, int all) -{ - int err = 0; - - if (hai->home_reg_status != HOME_REG_NONE) { - if ((err = mn_ro_pol_add(hai, ifindex, all)) < 0) - return err; - - if ((err = route_add(ifindex, RT6_TABLE_MIP6, RTPROT_MIP, 0, - IP6_RT_PRIO_MIP6_OUT, &in6addr_any, 0, - &in6addr_any, 0, NULL)) < 0) { - mn_ro_pol_del(hai, ifindex, all); - } - } - - if (hai->mob_rtr && - (err = nemo_mr_tnl_routes_add(hai, ifindex)) < 0) { - route_del(ifindex, RT6_TABLE_MIP6, IP6_RT_PRIO_MIP6_OUT, - &hai->hoa.addr, 128, &in6addr_any, 0, NULL); - mn_ro_pol_del(hai, ifindex, all); - } - - return err; -} - -static void nemo_mr_tnl_routes_del(struct home_addr_info *hai, int ifindex) -{ - struct list_head *l; - list_for_each(l, &hai->mob_net_prefixes) { - struct prefix_list_entry *p; - p = list_entry(l, struct prefix_list_entry, list); - route_del(ifindex, RT6_TABLE_MIP6, IP6_RT_PRIO_MIP6_FWD, - &p->ple_prefix, p->ple_plen, &in6addr_any, 0, NULL); - } -} - -static void mn_tnl_state_del(struct home_addr_info *hai, int ifindex, int all) -{ - if (hai->home_reg_status != HOME_REG_NONE) { - if (hai->mob_rtr) - nemo_mr_tnl_routes_del(hai, ifindex); - - route_del(ifindex, RT6_TABLE_MIP6, IP6_RT_PRIO_MIP6_OUT, - &hai->hoa.addr, 128, &in6addr_any, 0, NULL); - mn_ro_pol_del(hai, ifindex, all); - } -} - - -static void mn_home_ext_cleanup(struct bulentry *bule) -{ - struct home_addr_info *hai = bule->home; - - hai->home_reg_status = HOME_REG_NONE; - - if (hai->pend_ba) { - hai->pend_ba = 0; - pending_bas--; - } - - bule->ext_cleanup = NULL; -} - -/* Clean up policy route for HoA when bulentry is deleted. */ -static void mn_pol_ext_cleanup(struct bulentry *bule) -{ - MDBG("\n"); - mpd_cancel_mps(&bule->hoa, &bule->peer_addr); - mn_tnl_state_del(bule->home, bule->home->if_tunnel, 0); - - if (conf.UseMnHaIPsec) { - mn_ipsec_tnl_update(&bule->peer_addr, &bule->hoa, bule); - mn_ipsec_tnl_pol_del(&bule->peer_addr, &bule->hoa, bule); - } - - bule->ext_cleanup = mn_home_ext_cleanup; -} - -static int process_first_home_bu(struct bulentry *bule, - struct home_addr_info *hai, - struct timespec *lifetime) -{ - int err = 0; - bule->type = BUL_ENTRY; - bule->flags = (IP6_MH_BU_HOME | IP6_MH_BU_ACK | - hai->lladdr_comp | hai->mob_rtr); - - if (conf.UseMnHaIPsec && conf.KeyMngMobCapability) - bule->flags |= IP6_MH_BU_KEYM; - - bule->coa_changed = -1; - bule->coa = hai->primary_coa.addr; - bule->if_coa = hai->primary_coa.iif; - bule->lifetime = *lifetime; - bule->delay = conf.InitialBindackTimeoutFirstReg_ts; - bule->callback = bu_resend; - /* Use alt. coa with IPsec */ - bule->use_alt_coa = 1; - bule->ext_cleanup = mn_pol_ext_cleanup; - bule->home = hai; - bule->consecutive_resends = 0; - - hai->home_reg_status = HOME_REG_UNCERTAIN; - - if ((err = mn_tnl_state_add(hai, hai->if_tunnel, 0)) < 0) - MDBG("Failed to initialize new bule for HA\n"); - else - MDBG("New bule for HA\n"); - - return err; -} - -static int mn_do_dad(struct home_addr_info *hai, int dereg); -static void mn_send_home_na(struct home_addr_info *hai); - -static int mn_bu_ratelimit(struct bulentry *e) -{ - if (IN6_ARE_ADDR_EQUAL(&e->coa, &e->last_coa)) { - if (e->wait_ack) { - MDBG("Rate limit BU\n"); - return 1; - } - } else { - e->wait_ack = 0; - e->consecutive_resends = 0; - e->coa_changed = 1; - } - - return 0; -} - -static void mn_send_home_bu(struct home_addr_info *hai) -{ - struct bulentry *bule = NULL; - struct timespec lifetime; - int homereg_expired = 0; - movement_t type_movement = MIP6_TYPE_MOVEMENT_UNKNOWN; - - TRACE; - - if (IN6_IS_ADDR_UNSPECIFIED(&hai->ha_addr)) { - MDBG("HA not set for home link\n"); - return; - } - - mn_get_home_lifetime(hai, &lifetime, 0); - - if ((bule = bul_get(hai, NULL, &hai->ha_addr)) == NULL) { - assert(!hai->at_home); - - /* Create new bul entry for HA */ - if (!tsisset(lifetime)) { - dbg("HoA or CoA expired, unable to create binding.\n"); - return; - } - - if (conf.UseMnHaIPsec && - !ipsec_policy_entry_check(&hai->ha_addr, &hai->hoa.addr, - IPSEC_F_MH_BUBA)) { - syslog(LOG_ERR, - "MN lacks the necessary IPsec policies for " - "protecting the home registration to HA " - "%x:%x:%x:%x:%x:%x:%x:%x\n", - NIP6ADDR(&hai->ha_addr)); - - if (hai->use_dhaad) - mn_change_ha(hai); - - return; - } - - bule = create_bule(&hai->hoa.addr, &hai->ha_addr); - - if (bule == NULL) - return; - - if (process_first_home_bu(bule, hai, &lifetime) < 0 || - bul_add(bule) < 0) { - bul_delete(bule); - return; - } - - type_movement = MIP6_TYPE_MOVEMENT_HL2FL; - MDBG("New bule for HA\n"); - } else if (bule->type == BUL_ENTRY) { - /* Update bule */ - clock_gettime(CLOCK_REALTIME, &bule->lastsent); - - if (IN6_ARE_ADDR_EQUAL(&bule->hoa, &bule->coa)) { - if (process_first_home_bu(bule, - hai, &lifetime) < 0) { - bul_delete(bule); - return; - } - - type_movement = MIP6_TYPE_MOVEMENT_HL2FL; - } else { - bule->coa = hai->primary_coa.addr; - bule->if_coa = hai->primary_coa.iif; - - /* Rate limiting home registration binding updates - is necessary for multihomed MNs */ - if (mn_bu_ratelimit(bule)) - return; - - if (!hai->at_home) { - MDBG("Moved to foreign network\n"); - bule->lifetime = lifetime; - type_movement = MIP6_TYPE_MOVEMENT_FL2FL; - bul_iterate(&hai->bul, mn_bule_ro_pol_del, NULL); - } else { - MDBG("Moved to home network\n"); - type_movement = MIP6_TYPE_MOVEMENT_FL2HL; - tsclear(bule->lifetime); - mn_pol_ext_cleanup(bule); - } - - bule->delay = conf.InitialBindackTimeoutReReg_ts; - bule->callback = bu_resend; - } - - bule->seq++; - pre_bu_bul_update(bule); - MDBG("Bule for HA exists. Updating it.\n"); - } else { - MDBG("HA doesn't accept BU\n"); - return; - } - - if (type_movement == MIP6_TYPE_MOVEMENT_FL2HL) { - if (tsisset(bule->hard_expire) && - tsafter(bule->hard_expire, bule->lastsent)) { - /* If MN returns to home link after the expiration of - * home registration, MN does not send de-reg BU to HA - */ - homereg_expired = 1; - } - } - - if (conf.UseMnHaIPsec) { - /* create SP entry for protecting RR signals */ - if (type_movement == MIP6_TYPE_MOVEMENT_HL2FL) { - mn_ipsec_tnl_pol_add(&bule->home->ha_addr, - &bule->hoa, bule); - } - - /* migrate tunnel endpoint and update transport mode SA */ - if (bule->coa_changed) { - /* Always update transport mode (for signaling) */ - mn_ipsec_trns_update(&bule->home->ha_addr, - &bule->hoa, bule); - - /* No need to update tunnel when back home */ - if (type_movement != MIP6_TYPE_MOVEMENT_FL2HL) - mn_ipsec_tnl_update(&bule->home->ha_addr, - &bule->hoa, bule); - } - } - - if (!homereg_expired) { - bule->do_send_bu = 1; - mn_send_bu_msg(bule); - bul_update_timer(bule); - - if (conf.OptimisticHandoff) - post_ba_bul_update(bule); - } - - /* Before bul_iterate, tunnel modification should be done. */ - tunnel_mod(hai->if_tunnel, &hai->primary_coa.addr, &hai->ha_addr, - hai->primary_coa.iif, mn_ext_tunnel_ops, hai); - - bule->last_coa = bule->coa; - bule->coa_changed = 0; - - if (homereg_expired) { - bul_delete(bule); - mn_do_dad(hai, 1); - } -} - -void mn_send_cn_bu(struct bulentry *bule) -{ - /* Rate limiting CN registration binding updates - is necessary for multihomed MNs */ - if (mn_bu_ratelimit(bule)) - return; - - mn_get_ro_lifetime(bule->home, &bule->lifetime, bule->dereg); - - bule->seq++; - - clock_gettime(CLOCK_REALTIME, &bule->lastsent); - pre_bu_bul_update(bule); - mn_send_bu_msg(bule); - bule->last_coa = bule->coa; - bule->coa_changed = 0; - - if (bule->flags & IP6_MH_BU_ACK) { - bule->callback = bu_resend; - bule->delay = conf.InitialBindackTimeoutReReg_ts; - } else { - if (bule->dereg) { - bul_delete(bule); - return; - } - - bule->callback = mn_rr_check_entry; - bule->delay = bule->lifetime; - tsadd(bule->lastsent, bule->lifetime, bule->hard_expire); - bule->do_send_bu = 0; - post_ba_bul_update(bule); - } - - bul_update_expire(bule); - bul_update_timer(bule); -} - -/* Sets lifetime and expire of bulentry based on lifetime of received BA - * @bule: corresponding bul entry - * @ba_lifetime: lifetime from BA - * @bu_resend: refresh in seconds - */ -static inline int set_bule_lifetime(struct bulentry *bule, - struct timespec *ba_lifetime, - struct timespec *br_advice) -{ - assert(bule->type == BUL_ENTRY); - - bule->lifetime = tsmin(bule->lifetime, *ba_lifetime); - - if (bule->flags & IP6_MH_BU_HOME) { - tssetsec(bule->delay, bule->lifetime.tv_sec * BU_REFRESH_DELAY); - - if (tsbefore(bule->delay, *br_advice)) - bule->delay = *br_advice; - } else { - tssetsec(bule->delay, max(ba_lifetime->tv_sec, 0)); - } - - dbg("Set bule lifetime to %ld (s) and resend to bule->delay %d (s)\n", - bule->lifetime.tv_sec, bule->delay.tv_sec); - - return 0; -} - -static void mn_send_home_na(struct home_addr_info *hai) -{ - uint32_t na_flags = ND_NA_FLAG_OVERRIDE; - - ndisc_send_na(hai->hoa.iif, &hai->hoa.addr, - &in6addr_all_nodes_mc, &hai->hoa.addr, na_flags); - - if (hai->lladdr_comp && hai->home_reg_status != HOME_REG_NONE) { - struct in6_addr lladdr; - - ipv6_addr_llocal(&hai->hoa.addr, &lladdr); - ndisc_send_na(hai->hoa.iif, &lladdr, - &in6addr_all_nodes_mc, - &lladdr, na_flags); - } -} - -/* Returns number of pending BAs, when it is 0, MN can start registering the - addresses on the link as CoAs -*/ -static int mn_dereg_home(struct home_addr_info *hai) -{ - if (hai->pend_ba) { - hai->pend_ba = 0; - pending_bas--; - - if (hai->at_home) - mn_send_home_na(hai); - } - - return 0; -} - -static int mn_chk_bauth(struct ip6_mh_binding_ack *ba, ssize_t len, - const struct mh_options *mh_opts, - struct bulentry *e) -{ - struct ip6_mh_opt_auth_data *bauth; - uint8_t status = ba->ip6mhba_status; - - if ((bauth = mh_opt(&ba->ip6mhba_hdr, mh_opts, IP6_MHOPT_BAUTH))) { - /* Authenticator is calculated with MH checksum set to 0 */ - ba->ip6mhba_hdr.ip6mh_cksum = 0; - return mh_verify_auth_data(ba, len, bauth, - &e->coa, &e->peer_addr, e->Kbm); - } - - if (e->seq == ntohs(ba->ip6mhba_seqno)) { - if (status == IP6_MH_BAS_HOME_NI_EXPIRED) { - /* resend Hoti */ - e->rr.state = RR_H_EXPIRED; - } else if (status == IP6_MH_BAS_COA_NI_EXPIRED) { - /* resend CoTi */ - e->rr.state = RR_C_EXPIRED; - } else if (status == IP6_MH_BAS_NI_EXPIRED) { - e->rr.state = RR_EXPIRED; - } - - mn_rr_force_refresh(e); - mn_reset_ro_bule(e); - pre_bu_bul_update(e); - } - - return -1; -} - -static void mn_recv_ba(const struct ip6_mh *mh, ssize_t len, - const struct in6_addr_bundle *in, - __attribute__ ((unused)) int iif) -{ - struct ip6_mh_binding_ack *ba; - struct mh_options mh_opts; - struct bulentry *bule; - struct timespec now, ba_lifetime, br_adv, mps_delay; - uint16_t seqno; - - TRACE; - - statistics_inc(&mipl_stat, MIPL_STATISTICS_IN_BA); - - if (len < 0 || (size_t)len < sizeof(struct ip6_mh_binding_ack) || - mh_opt_parse(mh, len, - sizeof(struct ip6_mh_binding_ack), &mh_opts) < 0) - return; - - ba = (struct ip6_mh_binding_ack *)mh; - - pthread_rwlock_wrlock(&mn_lock); - bule = bul_get(NULL, in->dst, in->src); - - if (!bule || bule->type != BUL_ENTRY) { - MDBG("Got BA without corresponding BUL entry " - "from %x:%x:%x:%x:%x:%x:%x:%x " - "to home address %x:%x:%x:%x:%x:%x:%x:%x " - "with coa %x:%x:%x:%x:%x:%x:%x:%x\n", - NIP6ADDR(in->src), - NIP6ADDR(in->dst), - NIP6ADDR(in->local_coa != NULL ? - in->local_coa : &in6addr_any)); - pthread_rwlock_unlock(&mn_lock); - return; - } - - dbg("Got BA from %x:%x:%x:%x:%x:%x:%x:%x " - "to home address %x:%x:%x:%x:%x:%x:%x:%x " - "with coa %x:%x:%x:%x:%x:%x:%x:%x and status %d\n", - NIP6ADDR(in->src), NIP6ADDR(in->dst), - NIP6ADDR(in->local_coa != NULL ? in->local_coa : &in6addr_any), - ba->ip6mhba_status); - dbg("Dumping corresponding BULE\n"); - dbg_func(bule, dump_bule); - - /* First check authenticator */ - if (!(bule->flags & IP6_MH_BU_HOME) && - mn_chk_bauth(ba, len, &mh_opts, bule)) { - pthread_rwlock_unlock(&mn_lock); - return; - } - - /* Then sequence number */ - seqno = ntohs(ba->ip6mhba_seqno); - - if (bule->seq != seqno) { - if (ba->ip6mhba_status != IP6_MH_BAS_SEQNO_BAD) { - /* - * In this case, ignore BA and resends BU. - */ - MDBG("Got BA with incorrect sequence number %d, " - "the one sent in BU was %d\n", seqno, bule->seq); - pthread_rwlock_unlock(&mn_lock); - return; - } - } - - bule->do_send_bu = 0; - bule->consecutive_resends = 0; - clock_gettime(CLOCK_REALTIME, &now); - - if (ba->ip6mhba_status >= IP6_MH_BAS_UNSPECIFIED) { - if (ba->ip6mhba_status == IP6_MH_BAS_SEQNO_BAD) { - MDBG("out of sync seq nr\n"); - clock_gettime(CLOCK_REALTIME, &bule->lastsent); - bule->seq = seqno + 1; - - if (bule->flags & IP6_MH_BU_HOME) - mn_get_home_lifetime(bule->home, - &bule->lifetime, 0); - else - mn_get_ro_lifetime(bule->home, - &bule->lifetime, 0); - - bule->callback = bu_resend; - pre_bu_bul_update(bule); - mn_send_bu_msg(bule); - bule->delay = conf.InitialBindackTimeoutReReg_ts; - bul_update_timer(bule); - - if (bule->flags & IP6_MH_BU_HOME && - conf.OptimisticHandoff) { - post_ba_bul_update(bule); - } - - pthread_rwlock_unlock(&mn_lock); - return; - } - - if (bule->flags & IP6_MH_BU_HOME) { - struct home_addr_info *hai = bule->home; - char err_str[MAX_BA_STATUS_STR_LEN]; - - if (hai->at_home) { - bul_delete(bule); - mn_do_dad(hai, 1); - pthread_rwlock_unlock(&mn_lock); - return; - } - - mh_ba_status_to_str(ba->ip6mhba_status, err_str); - syslog(LOG_ERR, "Received BA with error status %s. " - "Unable to register with HA. Deleting entry\n", - err_str); - - if (hai->use_dhaad) { - bule_invalidate(bule, &now, 0); - mn_change_ha(hai); - } else { - bule_invalidate(bule, &now, 1); - } - - pthread_rwlock_unlock(&mn_lock); - return; - } else { - /* Don't resend BUs to this CN */ - bule_invalidate(bule, &now, 1); - pthread_rwlock_unlock(&mn_lock); - return; - } - } - - if (bule->wait_ack) - bule->wait_ack = 0; - else { - MDBG("unexpected BA, ignoring\n"); - pthread_rwlock_unlock(&mn_lock); - return; - } - - tssetsec(ba_lifetime, ntohs(ba->ip6mhba_lifetime) << 2); - br_adv = ba_lifetime; - tsadd(bule->lastsent, ba_lifetime, bule->hard_expire); - - if (!(bule->flags & IP6_MH_BU_HOME) || !conf.OptimisticHandoff) - post_ba_bul_update(bule); - - if (bule->flags & IP6_MH_BU_HOME) { - struct home_addr_info *hai = bule->home; - struct ip6_mh_opt_refresh_advice *bra; - - if (bule->flags & IP6_MH_BU_MR && - !(ba->ip6mhba_flags & IP6_MH_BA_MR)) { - if (hai->use_dhaad) { - mn_change_ha(hai); - } else { - int one = 1; - bul_iterate(&hai->bul, mn_dereg, &one); - } - - pthread_rwlock_unlock(&mn_lock); - return; - } - - if (!tsisset(ba_lifetime)) { - int type = FLUSH_FAILED; - mn_dereg_home(hai); - bul_delete(bule); - /* If BA was for home registration & succesful - * Send RO BUs to CNs for this home address. - */ - bul_iterate(&hai->bul, _bul_flush, &type); - bul_iterate(&hai->bul, mn_rr_start_handoff, NULL); - pthread_rwlock_unlock(&mn_lock); - mn_movement_event(NULL); - mn_block_rule_del(hai); - return; - } - - /* If status of BA is 0 or 1, Binding Update is accepted. */ - if (ba->ip6mhba_status == IP6_MH_BAS_PRFX_DISCOV) { - mpd_trigger_mps(&bule->hoa, &bule->peer_addr); - } else if( hai->home_reg_status == HOME_REG_UNCERTAIN && tsisset(ba_lifetime)) { - if(tsisset(hai->hoa.timestamp)) { - mps_delay = tsmin(hai->hoa.valid_time, ba_lifetime); - mpd_schedule_first_mps(&bule->hoa, &bule->peer_addr, &mps_delay); - } else - mpd_trigger_mps(&bule->hoa, &bule->peer_addr); - } - - /* If BA was for home registration & succesful - * Send RO BUs to CNs for this home address. - */ - hai->home_reg_status = HOME_REG_VALID; - bul_iterate(&hai->bul, mn_rr_start_handoff, NULL); - - /* IP6_MH_BA_KEYM */ - if (bule->flags & IP6_MH_BU_KEYM) { - if (ba->ip6mhba_flags & IP6_MH_BA_KEYM) { - /* Inform IKE to send readdress msg */ - - } else { - /* Inform IKE to renegotiate SAs */ - - /* Remove the flag from this bule */ - bule->flags &= ~IP6_MH_BU_KEYM; - - /* Issue a warning */ - syslog(LOG_ERR, - "HA does not support IKE session surviving, " - "traffic may be interrupted after movements.\n" - ); - } - } - - bra = mh_opt(&ba->ip6mhba_hdr, &mh_opts, IP6_MHOPT_BREFRESH); - - if (bra) - tssetsec(br_adv, ntohs(bra->ip6mora_interval) << 2); - } - - if (!tsisset(ba_lifetime)) { - dbg("Deleting bul entry\n"); - bul_delete(bule); - } else { - set_bule_lifetime(bule, &ba_lifetime, &br_adv); - - if (bule->flags & IP6_MH_BU_HOME) { - dbg("Callback to bu_refresh after %d seconds\n", - bule->delay.tv_sec); - bule->callback = bu_refresh; - } else { - dbg("Callback to mn_rr_check_entry after %d seconds\n", - bule->delay.tv_sec); - bule->callback = mn_rr_check_entry; - } - - bul_update_expire(bule); - bul_update_timer(bule); - } - - pthread_rwlock_unlock(&mn_lock); -} - -static struct mh_handler mn_ba_handler = { - .recv = mn_recv_ba, -}; - -static int do_handoff(struct home_addr_info *hai) -{ - if (!IN6_IS_ADDR_UNSPECIFIED(&hai->ha_addr)) { - if (hai->pend_ba) - mn_send_home_bu(hai); - else if (!pending_bas) { - if (!hai->at_home || - hai->home_reg_status != HOME_REG_NONE) - mn_send_home_bu(hai); - - bul_iterate(&hai->bul, mn_rr_start_handoff, NULL); - hai->verdict = MN_HO_NONE; - } - } else if (!pending_bas) { - if (hai->at_home) - dhaad_stop(hai); - else - dhaad_start(hai); - - } - - return 0; -} - -struct home_addr_info *mn_get_home_addr(const struct in6_addr *hoa) -{ - struct list_head *l; - list_for_each(l, &home_addr_list) { - struct home_addr_info *hai; - hai = list_entry(l, struct home_addr_info, list); - - if (IN6_ARE_ADDR_EQUAL(hoa, &hai->hoa.addr)) - return hai; - } - return NULL; -} - -struct home_addr_info *mn_get_home_addr_by_dhaadid(uint16_t dhaad_id) -{ - struct list_head *lh; - - list_for_each(lh, &home_addr_list) { - struct home_addr_info *hai; - hai = list_entry(lh, struct home_addr_info, list); - pthread_mutex_lock(&hai->ha_list.c_lock); - - if (hai->ha_list.dhaad_id == dhaad_id) { - pthread_mutex_unlock(&hai->ha_list.c_lock); - return hai; - } - - pthread_mutex_unlock(&hai->ha_list.c_lock); - } - return NULL; -} - -struct flag_hoa_args { - struct home_addr_info *target; - int flag; -}; - -static int flag_hoa(struct ifaddrmsg *ifa, struct rtattr *rta_tb[], void *arg) -{ - /* - * To do: also call this function for addresses learned through MPD - */ - - struct flag_hoa_args *fhoa = arg; - struct home_addr_info *hai = fhoa->target; - struct mn_addr *hoa = &hai->hoa; - struct in6_addr *addr = RTA_DATA(rta_tb[IFA_ADDRESS]); - struct timespec now; - uint32_t preferred; - uint32_t valid; - int err, plen; - - if (hai->if_tunnel >= 0 && ifa->ifa_index == (uint32_t)hai->if_tunnel) - plen = 128; - else - plen = hai->plen; - - clock_gettime(CLOCK_REALTIME, &now); - - if (rta_tb[IFA_CACHEINFO] != NULL) { - struct ifa_cacheinfo *ci = RTA_DATA(rta_tb[IFA_CACHEINFO]); - mn_update_hoa_lifetime(hoa, &now, - ci->ifa_valid, ci->ifa_prefered); - valid = ci->ifa_valid; - preferred = ci->ifa_prefered; - } else { - preferred = mpd_curr_lft(&now, - &hoa->timestamp, - hoa->preferred_time.tv_sec); - valid = mpd_curr_lft(&now, - &hoa->timestamp, - hoa->valid_time.tv_sec); - } - - if (fhoa->flag) - ifa->ifa_flags |= IFA_F_HOMEADDRESS_NODAD; - else - ifa->ifa_flags &= ~IFA_F_HOMEADDRESS_NODAD; - - MDBG("set HoA %x:%x:%x:%x:%x:%x:%x:%x/%d iif %d flags %x preferred_time %u valid_time %u\n", - NIP6ADDR(addr), plen, ifa->ifa_index, ifa->ifa_flags, preferred, valid); - - if ((err = addr_add(addr, plen, - ifa->ifa_flags, ifa->ifa_scope, ifa->ifa_index, - preferred, valid)) < 0) { - MDBG("failed with %d\n", err); - return err; - } - - hoa->iif = ifa->ifa_index; - return 0; -} - -static void nemo_mr_rules_del(struct home_addr_info *hinfo) -{ - struct list_head *l; - - list_for_each(l, &hinfo->mob_net_prefixes) { - struct prefix_list_entry *p = NULL; - p = list_entry(l, struct prefix_list_entry, list); - rule_del(NULL, RT6_TABLE_MIP6, - IP6_RULE_PRIO_MIP6_FWD, RTN_UNICAST, - &p->ple_prefix, p->ple_plen, &in6addr_any, 0, 0); - rule_del(NULL, RT6_TABLE_MAIN, - IP6_RULE_PRIO_MIP6_MNP_IN, RTN_UNICAST, - &in6addr_any, 0, &p->ple_prefix, p->ple_plen, 0); - } -} - -static int nemo_mr_rules_add(struct home_addr_info *hinfo) -{ - struct prefix_list_entry *pe = NULL; - struct list_head *l; - - list_for_each(l, &hinfo->mob_net_prefixes) { - struct prefix_list_entry *p = NULL; - p = list_entry(l, struct prefix_list_entry, list); - - if (rule_add(NULL, RT6_TABLE_MAIN, - IP6_RULE_PRIO_MIP6_MNP_IN, RTN_UNICAST, - &in6addr_any, 0, - &p->ple_prefix, p->ple_plen, 0) < 0) { - pe = p; - goto undo; - } - - if (rule_add(NULL, RT6_TABLE_MIP6, - IP6_RULE_PRIO_MIP6_FWD, RTN_UNICAST, - &p->ple_prefix, p->ple_plen, - &in6addr_any, 0, 0) < 0) { - rule_del(NULL, RT6_TABLE_MAIN, - IP6_RULE_PRIO_MIP6_MNP_IN, RTN_UNICAST, - &in6addr_any, 0, &p->ple_prefix, p->ple_plen, 0); - pe = p; - goto undo; - } - } - return 0; -undo: - list_for_each(l, &hinfo->mob_net_prefixes) { - struct prefix_list_entry *p = NULL; - p = list_entry(l, struct prefix_list_entry, list); - rule_del(NULL, RT6_TABLE_MIP6, - IP6_RULE_PRIO_MIP6_FWD, RTN_UNICAST, - &p->ple_prefix, p->ple_plen, &in6addr_any, 0, 0); - rule_del(NULL, RT6_TABLE_MAIN, - IP6_RULE_PRIO_MIP6_MNP_IN, RTN_UNICAST, - &in6addr_any, 0, &p->ple_prefix, p->ple_plen, 0); - - if (p == pe) - break; - } - return -1; -} - -static void clean_home_addr_info(struct home_addr_info *hai) -{ - struct flag_hoa_args arg; - int plen = (hai->hoa.iif == hai->if_tunnel ? 128 : hai->plen); - - list_del(&hai->list); - - if (hai->mob_rtr) - nemo_mr_rules_del(hai); - - arg.target = hai; - arg.flag = 0; - addr_do(&hai->hoa.addr, plen, - hai->hoa.iif, &arg, flag_hoa); - bul_iterate(&hai->bul, mn_dereg, NULL); - bul_home_cleanup(&hai->bul); - - mn_block_rule_del(hai); - - rule_del(NULL, RT6_TABLE_MIP6, - IP6_RULE_PRIO_MIP6_HOA_OUT, RTN_UNICAST, - &hai->hoa.addr, 128, &in6addr_any, 0, FIB_RULE_FIND_SADDR); - tunnel_del(hai->if_tunnel, NULL, NULL); - dhaad_stop(hai); - free(hai); -} - -static int rpl_copy(const struct list_head *rpl1, struct list_head *rpl2) -{ - struct list_head *l, *n; - struct xfrm_ro_pol *rp1, *rp2; - - list_for_each(l, rpl1) { - rp1 = list_entry(l, struct xfrm_ro_pol, list); - rp2 = malloc(sizeof(struct xfrm_ro_pol)); - - if (rp2 == NULL) - goto undo; - - memcpy(rp2, rp1, sizeof(struct xfrm_ro_pol)); - list_add_tail(&rp2->list, rpl2); - } - return 0; -undo: - list_for_each_safe(l, n, rpl2) { - list_del(l); - rp2 = list_entry(l, struct xfrm_ro_pol, list); - free(rp2); - } - return -1; -} - -static struct home_addr_info *hai_copy(struct home_addr_info *conf_hai) -{ - struct home_addr_info *hai = malloc(sizeof(struct home_addr_info)); - - if (hai != NULL) { - pthread_mutexattr_t mattrs; - pthread_mutexattr_init(&mattrs); - pthread_mutexattr_settype(&mattrs, PTHREAD_MUTEX_FAST_NP); - - memcpy(hai, conf_hai, sizeof(struct home_addr_info)); - - if (pthread_mutex_init(&hai->ha_list.c_lock, NULL)) - goto undo; - - INIT_LIST_HEAD(&hai->mob_net_prefixes); - - if (hai->mob_rtr && - prefix_list_copy(&conf_hai->mob_net_prefixes, - &hai->mob_net_prefixes) < 0) - goto mutex_undo; - - INIT_LIST_HEAD(&hai->ro_policies); - - if (rpl_copy(&conf_hai->ro_policies, &hai->ro_policies) < 0) - goto mnp_undo; - - INIT_LIST_HEAD(&hai->ha_list.tqe.list); - INIT_LIST_HEAD(&hai->ha_list.home_agents); - } - - return hai; -mnp_undo: - prefix_list_free(&hai->mob_net_prefixes); -mutex_undo: - pthread_mutex_destroy(&hai->ha_list.c_lock); -undo: - free(hai); - return NULL; -} - -static int conf_home_addr_info(struct home_addr_info *conf_hai) -{ - struct list_head *list, *n; - struct timespec init = { 0, 0 }; - struct flag_hoa_args arg; - struct home_addr_info *hai; - - MDBG("HoA address %x:%x:%x:%x:%x:%x:%x:%x\n", - NIP6ADDR(&conf_hai->hoa.addr)); - - if ((hai = hai_copy(conf_hai)) == NULL) - goto err; - - if (hai->mob_rtr) { - MDBG("is Mobile Router\n"); - list_for_each(list, &hai->mob_net_prefixes) { - struct prefix_list_entry *p; - p = list_entry(list, struct prefix_list_entry, list); - MDBG("Mobile Network Prefix %x:%x:%x:%x:%x:%x:%x:%x/%d\n", - NIP6ADDR(&p->ple_prefix), p->ple_plen); - } - } - - if (IN6_IS_ADDR_UNSPECIFIED(&hai->ha_addr)) { - hai->use_dhaad = 1; - } else { - MDBG("HA address %x:%x:%x:%x:%x:%x:%x:%x\n", - NIP6ADDR(&hai->ha_addr)); - } - - hai->if_tunnel = tunnel_add(&hai->hoa.addr, &hai->ha_addr, - hai->if_home, NULL, NULL); - - if (hai->if_tunnel <= 0) { - MDBG("failed to create MN-HA tunnel\n"); - goto clean_err; - } - - if (rule_add(NULL, RT6_TABLE_MIP6, - IP6_RULE_PRIO_MIP6_HOA_OUT, RTN_UNICAST, - &hai->hoa.addr, 128, &in6addr_any, 0, FIB_RULE_FIND_SADDR) < 0) { - goto clean_err; - } - - if (mn_block_rule_add(hai) < 0) - goto clean_err; - - if(bul_home_init(hai)) { - goto clean_err; - } - - MDBG("Home address %x:%x:%x:%x:%x:%x:%x:%x\n", - NIP6ADDR(&hai->hoa.addr)); - - hai->home_reg_status = HOME_REG_NONE; - hai->verdict = MN_HO_NONE; - - mn_update_hoa_lifetime(&hai->hoa, &init, - PREFIX_LIFETIME_INFINITE, - PREFIX_LIFETIME_INFINITE); - - arg.target = hai; - arg.flag = 1; - - if (addr_do(&hai->hoa.addr, 128, - hai->if_tunnel, &arg, flag_hoa) < 0) { - goto clean_err; - } - - if (hai->mob_rtr && nemo_mr_rules_add(hai) < 0) { - goto clean_err; - } - - hai->at_home = hai->hoa.iif == hai->if_home; - pthread_rwlock_wrlock(&mn_lock); - list_add(&hai->list, &home_addr_list); - pthread_rwlock_unlock(&mn_lock); - - MDBG("Added new home_addr_info successfully\n"); - - return 0; -clean_err: - clean_home_addr_info(hai); -err: - list_for_each_safe(list, n, &home_addr_list) { - hai = list_entry(list, struct home_addr_info, list); - clean_home_addr_info(hai); - } - return -1; -} - -static int mn_home_reg_addr_expires(struct bulentry *e, struct mn_addr *addr) -{ - struct timespec next_bu, addr_expires; - - if (prefix_lft_infinite(addr->valid_time.tv_sec)) - return 0; - - tsadd(e->lastsent, e->delay, next_bu); - tsadd(addr->timestamp, addr->valid_time, addr_expires); - - if (!tsbefore(next_bu, addr_expires)) - return 0; - - e->consecutive_resends = 0; - return 1; -} - -static int update_hoa(struct ifaddrmsg *ifa, - __attribute__ ((unused)) struct rtattr *rta_tb[], - void *arg) -{ - struct home_addr_info *hai = arg; - - return addr_add(&hai->hoa.addr, 128, ifa->ifa_flags, - ifa->ifa_scope, hai->hoa.iif, - hai->hoa.preferred_time.tv_sec, - hai->hoa.valid_time.tv_sec); -} - -int mn_update_home_prefix(struct home_addr_info *hai, - const struct timespec *timestamp, - const struct nd_opt_prefix_info *pinfo) -{ - struct timespec now; - struct nd_opt_prefix_info p; - uint32_t valid_time; - - if (hai->plen != pinfo->nd_opt_pi_prefix_len || - ipv6_pfx_cmp(&pinfo->nd_opt_pi_prefix, &hai->hoa.addr, hai->plen)) - return 0; - - clock_gettime(CLOCK_REALTIME, &now); - - memcpy(&p, pinfo, sizeof(struct nd_opt_prefix_info)); - - p.nd_opt_pi_valid_time = mpd_curr_lft(&now, - timestamp, - p.nd_opt_pi_valid_time); - - p.nd_opt_pi_preferred_time = mpd_curr_lft(&now, - timestamp, - p.nd_opt_pi_preferred_time); - /* todo: also add new HoAs */ - - MDBG2("preferred_life %u valid_life %u\n", - p.nd_opt_pi_preferred_time, p.nd_opt_pi_valid_time); - - - valid_time = mpd_curr_lft(&now, &hai->hoa.timestamp, - hai->hoa.valid_time.tv_sec); - - mn_update_hoa_lifetime(&hai->hoa, &now, p.nd_opt_pi_valid_time, - p.nd_opt_pi_preferred_time); - - if (hai->home_reg_status == HOME_REG_NONE) { - int plen = (hai->hoa.iif == hai->if_tunnel ? 128 : hai->plen); - - /* check if HoA has expired and reinsert it */ - if (valid_time == 0 && hai->hoa.valid_time.tv_sec) { - struct flag_hoa_args arg; - arg.target = hai; - arg.flag = 1; - addr_do(&hai->hoa.addr, plen, - hai->hoa.iif, &arg, flag_hoa); - } - } else if (hai->home_reg_status != HOME_REG_VALID) { - if (hai->hoa.valid_time.tv_sec) { - addr_do(&hai->hoa.addr, 128, hai->hoa.iif, - hai, update_hoa); - } else - addr_del(&hai->hoa.addr, 128, hai->hoa.iif); - } - - if (!hai->at_home) { - struct bulentry *e; - - e = bul_get(hai, NULL, &hai->ha_addr); - - if (e == NULL || !(e->flags & IP6_MH_BU_HOME)) - return -ENOENT; - - /* check if new HoA lifetime is smaller than current - home registration lifetime */ - MDBG2("preferred_time %u valid_life %u\n", - p.nd_opt_pi_preferred_time, p.nd_opt_pi_valid_time); - - if (mn_home_reg_addr_expires(e, &hai->hoa)) { - MDBG("HoA expires before next BU, do_handoff()\n"); - do_handoff(hai); - } else - hai->verdict = MN_HO_NONE; - - if (p.nd_opt_pi_valid_time && - !prefix_lft_infinite(p.nd_opt_pi_valid_time)) - mpd_schedule_first_mps(&e->hoa, &e->peer_addr, - &hai->hoa.valid_time); - } - - return 0; -} - -/* Decide which CoA should be used for RO. Policy Manager is asked - * first. If it does not provide a hint, primary CoA is used. The - * function returns the ifindex of the interface the CoA is associated - * with and copies the CoA to 'coa'. - */ -static int mn_get_ro_coa(const struct in6_addr *cn, - const struct home_addr_info *hai, - struct in6_addr *coa) -{ - int ret = conf.pmgr.best_ro_coa(&hai->hoa.addr, cn, coa); - - if (ret <= 0) { /* Policy manager remained silent, let's use hai */ - *coa = hai->primary_coa.addr; - ret = hai->primary_coa.iif; - } - - return ret; -} - -static struct in6_addr linklocal_prefix = { { { 0xfe,0x80,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } } }; - -static inline void linklocal_rt_rules_del(void) -{ - rule_del(NULL, RT6_TABLE_MAIN, - IP6_RULE_PRIO_MIP6_COA_OUT, RTN_UNICAST, - &linklocal_prefix, 64, &in6addr_any, 0, 0); -} - -static inline int linklocal_rt_rules_add(void) -{ - return rule_add(NULL, RT6_TABLE_MAIN, - IP6_RULE_PRIO_MIP6_COA_OUT, RTN_UNICAST, - &linklocal_prefix, 64, &in6addr_any, 0, 0); -} - -static int mn_ext_tunnel_ops(__attribute__ ((unused)) int request, - int old_if, int new_if, void *data) -{ - struct home_addr_info *hai = data; - struct mv_hoa_args mha; - - if (old_if == new_if) - return 0; - - mha.if_next = new_if; - mha.target = hai; - - if (hai->hoa.iif == old_if && - (mn_tnl_state_add(hai, new_if, 1) || - addr_do(&hai->hoa.addr, 128, old_if, &mha, mv_hoa) < 0)) - goto undo; - - mn_tnl_state_del(hai, old_if, 1); - hai->if_tunnel = new_if; - return 0; -undo: - mha.if_next = old_if; - - if (hai->hoa.iif == new_if) - addr_do(&hai->hoa.addr, 128, new_if, &mha, mv_hoa); - - mn_tnl_state_del(hai, new_if, 1); - return -1; -} - -static int mn_move(struct home_addr_info *hai) -{ - struct mv_hoa_args mha; - - mha.target = hai; - - TRACE; - - if (hai->at_home) { - int plen = (hai->hoa.iif == hai->if_tunnel ? 128 : hai->plen); - struct bulentry *e; - MDBG("in home net\n"); - - if (hai->home_reg_status == HOME_REG_NONE && - (e = bul_get(hai, NULL, &hai->ha_addr)) != NULL && - e->flags & IP6_MH_BU_HOME && e->type != BUL_ENTRY) - bul_delete(e); - - if (hai->hoa.iif != hai->primary_coa.iif) { - mha.if_next = hai->primary_coa.iif; - addr_do(&hai->hoa.addr, plen, - hai->hoa.iif, &mha, mv_hoa); - - if (hai->home_reg_status == HOME_REG_NONE) { - mn_send_home_na(hai); - do_handoff(hai); - return 0; - } - } - - if (hai->home_reg_status != HOME_REG_NONE && !hai->pend_ba) { - pending_bas++; - hai->pend_ba = 1; - do_handoff(hai); - } - } else { - MDBG("in foreign net\n"); - mn_block_rule_add(hai); - - if (hai->pend_ba) { - hai->pend_ba = 0; - pending_bas--; - } - - if (hai->hoa.iif != hai->if_tunnel) { - mha.if_next = hai->if_tunnel; - addr_do(&hai->hoa.addr, hai->plen, - hai->hoa.iif, &mha, mv_hoa); - } - - do_handoff(hai); - } - - return 0; -} - -static int mn_recv_na(int fd, struct home_addr_info *hai, - struct in6_addr *addr, int ifindex, int has_home_reg) -{ - unsigned char msg[MAX_PKT_LEN]; - struct sockaddr_in6 saddr; - struct in6_addr *daddr; - struct in6_pktinfo pkt_info; - int len, iif, hoplimit; - struct nd_neighbor_advert *na; - uint8_t hwa[L2ADDR_MAX_SIZE]; - int ret, hwalen = 0; - int iface_type; - - len = icmp6_recv(fd, msg, sizeof(msg), &saddr, &pkt_info, &hoplimit); - - if (len < 0) - return 0; - - daddr = &pkt_info.ipi6_addr; - iif = pkt_info.ipi6_ifindex; - na = (struct nd_neighbor_advert *)msg; - - if (iif != ifindex || hoplimit < 255 || (size_t)len < sizeof(*na) || - na->nd_na_code != 0 || IN6_IS_ADDR_MULTICAST(&na->nd_na_target) || - (na->nd_na_flags_reserved & ND_NA_FLAG_SOLICITED && - IN6_IS_ADDR_MULTICAST(daddr)) || - (!IN6_ARE_ADDR_EQUAL(addr, &na->nd_na_target))) - return 0; - - if (!has_home_reg) - return 1; - - /* No need to look for HA L2 @ if no hai was provided or - * if interface type does not have L2 address */ - if (hai != NULL && - ((iface_type = nd_get_iface_type(iif)) >= 0) && - ndisc_get_l2addr_len(iface_type) > 0) { - int optlen = len - sizeof(struct nd_neighbor_advert); - uint8_t *opt = (uint8_t *)(na + 1); - - while (optlen > 1) { - int olen = opt[1] << 3; - - if (olen > optlen || olen == 0) - return 1; - - switch (opt[0]) { - case ND_OPT_TARGET_LINKADDR: - hwalen = ndisc_l2addr_from_opt(iface_type, - hwa, &opt[2], - olen - 2); - - if (hwalen < 0) - return 1; - - break; - } - - optlen -= olen; - opt += olen; - } - } - - if (hwalen) { - ret = neigh_add(iif, NUD_STALE, NTF_ROUTER, - &hai->ha_addr, hwa, hwalen, 1); - dbg("ret %d\n", ret); - } - - return 1; -} - -int mn_lladdr_dad(struct ifaddrmsg *ifa, struct rtattr *rta_tb[], - __attribute__ ((unused)) void *arg) -{ - struct in6_addr *lladdr = RTA_DATA(rta_tb[IFA_ADDRESS]); - addr_del(lladdr, ifa->ifa_prefixlen, ifa->ifa_index); - return addr_add(lladdr, ifa->ifa_prefixlen, ifa->ifa_flags, - ifa->ifa_scope, ifa->ifa_index, 0, 0); -} - -static int mn_dad_probe(struct in6_addr *addr, int plen, int ifindex) -{ - int deleted; - - if (IN6_IS_ADDR_LINKLOCAL(addr)) - return addr_do(addr, plen, ifindex, NULL, mn_lladdr_dad); - - /* make sure address isn't configured on interface before - DAD probe or MN will receive reply from itself */ - deleted = !addr_del(addr, plen, ifindex); - ndisc_send_ns(ifindex, addr); - return deleted; -} - -static int mn_hoa_add(struct home_addr_info *hai, - struct in6_addr *addr, int plen, int ifindex) -{ - int scope; - int flag; - uint32_t preferred; - uint32_t valid; - - if (hai == NULL) { - scope = RT_SCOPE_LINK; - preferred = 0; - valid = 0; - flag = 0; - } else { - struct mn_addr *hoa = &hai->hoa; - struct timespec now; - - scope = RT_SCOPE_UNIVERSE; - - clock_gettime(CLOCK_REALTIME, &now); - - preferred = mpd_curr_lft(&now, &hoa->timestamp, - hoa->preferred_time.tv_sec); - - valid = mpd_curr_lft(&now, &hoa->timestamp, - hoa->valid_time.tv_sec); - - flag = IFA_F_HOMEADDRESS_NODAD; - } - - return addr_add(addr, plen, flag, scope, ifindex, preferred, valid); -} - -static int mn_addr_do_dad(int fd, struct home_addr_info *hai, - struct in6_addr *addr, int plen, - int ifindex, int has_home_reg) -{ - fd_set rset; - struct timeval tv; - int add = (mn_dad_probe(addr, plen, ifindex) || hai == NULL); - - FD_ZERO(&rset); - FD_SET(fd, &rset); - tv.tv_sec = DAD_TIMEOUT; - tv.tv_usec = 0; - - - for (;;) { - int ret; - /* Note on portability: we assume that tv is modified to show - the time left which is AFAIK true only in Linux - timeout - */ - ret = select(fd+1, &rset, NULL, NULL, &tv); - - if (ret < 0) - return -1; - - if (ret == 0) { - if (add) - mn_hoa_add(hai, addr, plen, ifindex); - - if (has_home_reg) { - MDBG("HA didn't answer DAD probe!\n"); - return -1; - } else { - MDBG("DAD succeeded!\n"); - MDBG("address = %x:%x:%x:%x:%x:%x:%x:%x\n", - NIP6ADDR(addr)); - - if (!IN6_IS_ADDR_LINKLOCAL(addr) && hai) - mn_block_rule_del(hai); - - return 0; - } - } else { - if (!mn_recv_na(fd, hai, addr, ifindex, has_home_reg)) - continue; - - if (has_home_reg) { - MDBG("HA answered DAD probe!\n"); - - if (add) - mn_hoa_add(hai, addr, plen, ifindex); - - return 0; - } else { - MDBG("DAD failed!\n"); - return -1; - } - } - } -} - -static int mn_do_dad(struct home_addr_info *hai, int dereg) -{ - int sock, ret = -1, val = 1; - struct icmp6_filter filter; - struct in6_addr solicit; - int type = FLUSH_ALL; - - if ((sock = socket(AF_INET6, SOCK_RAW, IPPROTO_ICMPV6)) < 0) - return ret; - - ICMP6_FILTER_SETBLOCKALL(&filter); - ICMP6_FILTER_SETPASS(ND_NEIGHBOR_ADVERT, &filter); - - setsockopt(sock, IPPROTO_IPV6, IPV6_RECVPKTINFO, &val, sizeof(val)); - setsockopt(sock, IPPROTO_IPV6, IPV6_RECVHOPLIMIT, &val, sizeof(val)); - setsockopt(sock, IPPROTO_ICMPV6, ICMP6_FILTER, &filter, - sizeof(struct icmp6_filter)); - - ipv6_addr_solict_mult(&hai->hoa.addr, &solicit); - if_mc_group(sock, hai->primary_coa.iif, &in6addr_all_nodes_mc, - IPV6_JOIN_GROUP); - if_mc_group(sock, hai->primary_coa.iif, &solicit, IPV6_JOIN_GROUP); - - if (hai->home_reg_status == HOME_REG_NONE) { - if (hai->lladdr_comp) { - struct in6_addr lladdr; - ipv6_addr_llocal(&hai->hoa.addr, &lladdr); - - if (mn_addr_do_dad(sock, NULL, &lladdr, 64, - hai->primary_coa.iif, 0) < 0) { - MDBG("Link-local DAD failed!\n"); - goto err; - } - } - - if (mn_addr_do_dad(sock, hai, &hai->hoa.addr, hai->plen, - hai->primary_coa.iif, 0) < 0) { - MDBG("HoA DAD failed!\n"); - goto err; - } - - if (dereg) - mn_send_home_na(hai); - - ret = mn_move(hai); - } else if (!mn_addr_do_dad(sock, hai, &hai->hoa.addr, - hai->plen, hai->primary_coa.iif, 1)) { - ret = mn_move(hai); - } - -out: - close(sock); - return ret; -err: - bul_iterate(&hai->bul, _bul_flush, &type); - goto out; -} - -static inline void mn_update_coa_lifetime(struct mn_addr *mn_coa, - struct md_coa *md_coa) -{ - mn_coa->timestamp = md_coa->timestamp; - mn_coa->valid_time = md_coa->valid_time; - mn_coa->preferred_time = md_coa->preferred_time; - MDBG2("updated CoA lifetimes: preferred %u s and valid %u s\n", - mn_coa->preferred_time.tv_sec, mn_coa->valid_time.tv_sec); -} - -static void mn_coa_updated(struct home_addr_info *hai) -{ - if (!hai->at_home) { - struct bulentry *e; - struct mn_addr *coa; - - e = bul_get(hai, NULL, &hai->ha_addr); - - if (e == NULL || !(e->flags & IP6_MH_BU_HOME)) - return; - - coa = &hai->primary_coa; - - MDBG2("preferred_time %u valid_life %u\n", - coa->preferred_time.tv_sec, - coa->valid_time.tv_sec); - - /* check if new CoA lifetime is smaller than current - home registration lifetime */ - if (mn_home_reg_addr_expires(e, coa)) { - MDBG("CoA expires before next BU, do_handoff()\n"); - do_handoff(hai); - } else - hai->verdict = MN_HO_NONE; - } -} - -static int mn_home_rtr_chk(struct home_addr_info *hai, struct md_router *rtr) -{ - int at_home; - struct list_head *lrp; - - if (hai->verdict != MN_HO_RETURN_HOME) { - hai->at_home = 0; - return 0; - } - - at_home = hai->at_home; - hai->at_home = 1; - list_for_each(lrp, &rtr->prefixes) { - struct prefix_list_entry *p; - p = list_entry(lrp, struct prefix_list_entry, list); - mn_update_home_prefix(hai, &p->timestamp, &p->pinfo); - } - return !at_home; -} - - -static inline int mn_verify_iface(const struct md_inet6_iface *iface) -{ - /* Tunnel interfaces do not have a default router - (route is via the device itself) */ - return (!list_empty(&iface->coas) && - (iface->is_tunnel || !list_empty(&iface->default_rtr))); -} - -static struct md_inet6_iface *mn_get_iface(const struct home_addr_info *hai, - int pref_iif, - struct list_head *iface_list) -{ - int iif; - struct md_inet6_iface *best_iface; - struct list_head *l; - - if ((iif = conf.pmgr.best_iface(&hai->hoa.addr, - &hai->ha_addr, pref_iif)) > 0 && - (best_iface = md_get_inet6_iface(iface_list, iif)) != NULL && - mn_verify_iface(best_iface)) - return best_iface; - - best_iface = NULL; - list_for_each(l, iface_list) { - struct md_inet6_iface *iface; - iface = list_entry(l, struct md_inet6_iface, list); - - if (mn_verify_iface(iface) && - (best_iface == NULL || - (best_iface)->preference > iface->preference || - (best_iface->preference == iface->preference && - iface->ifindex == pref_iif))) { - best_iface = iface; - } - } - return best_iface; -} - -static struct md_coa *mn_get_coa(const struct home_addr_info *hai, int iif, - const struct in6_addr *pref_coa, - struct list_head *coa_list) -{ - struct in6_addr coa = in6addr_any; - int coa_iif; - struct md_coa *best_coa; - struct list_head *l; - - coa_iif = conf.pmgr.best_coa(&hai->hoa.addr, &hai->ha_addr, - iif, pref_coa, &coa); - - if (coa_iif == iif && - (best_coa = md_get_coa(coa_list, &coa)) != NULL && - tsisset(best_coa->valid_time)) - return best_coa; - - if ((best_coa = md_get_coa(coa_list, pref_coa)) != NULL) { - if (!tsisset(best_coa->valid_time)) - best_coa = NULL; - else if (tsisset(best_coa->preferred_time)) - return best_coa; - } - - list_for_each(l, coa_list) { - struct md_coa *test_coa = list_entry(l, struct md_coa, list); - - if (tsisset(test_coa->valid_time)) { - if (tsisset(test_coa->preferred_time)) - return test_coa; - - if (best_coa == NULL) - best_coa = test_coa; - } - } - return best_coa; -} - -static int mn_make_ho_verdict(const struct movement_event *me, - const struct home_addr_info *hai, - struct md_router **next_rtr, - struct md_coa **next_coa) -{ - struct md_inet6_iface *old_iface = NULL, *new_iface = NULL; - struct md_router *rtr; - struct md_coa *coa = NULL; - int pref_iif = hai->primary_coa.iif; /* prefer current CoA interface */ - int force = 0; - - if (me->iface != NULL && - (!me->iface->is_tunnel) && - (rtr = md_get_first_router(&me->iface->default_rtr)) != NULL && - mn_is_at_home(&rtr->prefixes, &hai->home_prefix, hai->home_plen)) { - *next_rtr = rtr; - *next_coa = NULL; - return MN_HO_RETURN_HOME; - } - - if (pref_iif > 0) { - old_iface = md_get_inet6_iface(me->iface_list, pref_iif); - - if (old_iface == NULL) - pref_iif = 0; - } - - switch (me->event_type) { - case ME_DHAAD: - force = 1; - break; - - case ME_IFACE_DOWN: - case ME_LINK_DOWN: - case ME_RTR_EXPIRED: - assert(me->iface != NULL); - - if (old_iface != NULL && old_iface != me->iface) - return MN_HO_IGNORE; - - break; - - case ME_RTR_NEW: - assert(!list_empty(&me->iface->default_rtr)); - - case ME_LINK_UP: - assert(me->iface != NULL); - break; - - case ME_RTR_BACK: - case ME_RTR_UPDATED: - assert(me->iface != NULL); - assert(!list_empty(&me->iface->default_rtr)); - - if (old_iface == NULL) - break; - - if (old_iface != me->iface) - return MN_HO_IGNORE; - - *next_coa = md_get_coa(&old_iface->coas, - &hai->primary_coa.addr); - - if (*next_coa == NULL) - break; - - *next_rtr = md_get_first_router(&old_iface->default_rtr); - return MN_HO_REESTABLISH; - - case ME_COA_NEW: - assert(me->iface != NULL); - assert(me->coa != NULL); - assert(me->iface->ifindex == me->coa->ifindex); - break; - - case ME_COA_EXPIRED: - assert(me->iface != NULL); - assert(me->coa != NULL); - assert(me->iface->ifindex == me->coa->ifindex); - - if (old_iface == NULL || - (old_iface == me->iface && - IN6_ARE_ADDR_EQUAL(&hai->primary_coa.addr, - &me->coa->addr))) - break; - - return MN_HO_IGNORE; - - case ME_COA_LFT_DEC: - case ME_COA_LFT_INC: - assert(me->iface != NULL); - assert(me->coa != NULL); - assert(me->iface->ifindex == me->coa->ifindex); - - if (old_iface == NULL) - break; - - if (old_iface != me->iface || - !IN6_ARE_ADDR_EQUAL(&hai->primary_coa.addr, - &me->coa->addr)) - return MN_HO_IGNORE; - - *next_coa = me->coa; - return MN_HO_CHECK_LIFETIME; - - default: - return MN_HO_IGNORE; - } - - new_iface = mn_get_iface(hai, pref_iif, me->iface_list); - - if (new_iface == NULL) - return MN_HO_INVALIDATE; - - coa = mn_get_coa(hai, new_iface->ifindex, - &hai->primary_coa.addr, &new_iface->coas); - - if (coa == NULL) - return MN_HO_INVALIDATE; - - if (!force && new_iface == old_iface && - IN6_ARE_ADDR_EQUAL(&coa->addr, &hai->primary_coa.addr)) - return MN_HO_IGNORE; - - if (!new_iface->is_tunnel) { - if (list_empty(&new_iface->default_rtr)) - return MN_HO_IGNORE; - - *next_rtr = md_get_first_router(&new_iface->default_rtr); - } - - *next_coa = coa; - return MN_HO_PROCEED; -} - -static void mn_chk_ho_verdict(struct home_addr_info *hai, - const struct movement_event *event) -{ - struct md_router *rtr = NULL; - struct md_coa *coa = NULL; - int move_home = 0; - - if (event->event_type == ME_COA_EXPIRED && - IN6_ARE_ADDR_EQUAL(&event->coa->addr, &hai->hoa.addr)) - return; - - hai->verdict = mn_make_ho_verdict(event, hai, &rtr, &coa); - - if (hai->verdict == MN_HO_IGNORE) - return; - - if (hai->verdict == MN_HO_INVALIDATE) { - hai->primary_coa.iif = 0; - return; - } - - if (rtr != NULL) - move_home = mn_home_rtr_chk(hai, rtr); - - if (hai->verdict == MN_HO_CHECK_LIFETIME) { - mn_update_coa_lifetime(&hai->primary_coa, coa); - mn_coa_updated(hai); - } else if (hai->verdict == MN_HO_REESTABLISH) { - hai->primary_coa.iif = coa->ifindex; - mn_update_coa_lifetime(&hai->primary_coa, coa); - mn_coa_updated(hai); - } else { - switch (hai->verdict) { - case MN_HO_PROCEED: - hai->primary_coa.iif = coa->ifindex; - hai->primary_coa.addr = coa->addr; - mn_update_coa_lifetime(&hai->primary_coa, coa); - break; - - case MN_HO_RETURN_HOME: - hai->primary_coa.iif = rtr->ifindex; - hai->primary_coa.addr = hai->hoa.addr; - break; - - default: - return; - } - - if (hai->at_home && !hai->pend_ba) { - /* check if router is HA */ - if (hai->home_reg_status != HOME_REG_NONE && - rtr_addr_chk(rtr, &hai->ha_addr)) { - mn_move(hai); - } else if (hai->home_reg_status != HOME_REG_NONE || - move_home) { - int type = FLUSH_FAILED; - mn_do_dad(hai, 0); - - if (hai->home_reg_status == HOME_REG_NONE) - bul_iterate(&hai->bul, - _bul_flush, &type); - } - } - } -} - -int mn_movement_event(struct movement_event *event) -{ - struct list_head *lh; - struct home_addr_info *hai; - - /* First de-registration */ - - pthread_rwlock_wrlock(&mn_lock); - - if (event != NULL) { - if (event->event_type == ME_DHAAD) { - hai = mn_get_home_addr_by_dhaadid(event->data); - - if (hai == NULL) { - pthread_rwlock_unlock(&mn_lock); - return 0; - } - - dhaad_stop(hai); - mn_chk_ho_verdict(hai, event); - } else { - if (event->event_type == ME_COA_EXPIRED) - mn_rr_delete_co(&event->coa->addr); - - list_for_each(lh, &home_addr_list) { - hai = list_entry(lh, - struct home_addr_info, list); - mn_chk_ho_verdict(hai, event); - } - } - } - - /* Then registration if we are not at home, - otherwise we need to wait for BA to avoid forwarding loops */ - if (!pending_bas) { - list_for_each(lh, &home_addr_list) { - hai = list_entry(lh, struct home_addr_info, list); - - if (!hai->at_home && - positive_ho_verdict(hai->verdict)) { - mn_move(hai); - } - } - } - - pthread_rwlock_unlock(&mn_lock); - return 0; -} - -/** - * mn_rr_start_handoff - start RR procedure after changing CoA - * vbule: bulentry - * - * Triggers RR with CN if necessary, else sends BU to CN. - **/ - -int mn_rr_start_handoff(void *vbule, __attribute__ ((unused)) void *dummy) -{ - struct bulentry *bule = vbule; - - if (bule->type != BUL_ENTRY || bule->flags & IP6_MH_BU_HOME) - return 0; - - if (bule->home->at_home) { - MDBG("Returning home, no need for Care-of keygen token\n"); - bule->dereg = 1; - tsclear(bule->lifetime); - } - - bule->if_coa = mn_get_ro_coa(&bule->peer_addr, bule->home, &bule->coa); - - if (bule->if_coa < 0) - goto delete_entry; - - bule->do_send_bu = 1; - mn_rr_refresh(bule); - - if (bule->rr.state == RR_READY) - mn_send_cn_bu(bule); - - return 0; -delete_entry: - bul_delete(bule); - return 0; -} - -/* mn_start_ro - start RO, triggered by tunneled packet */ -void mn_start_ro(struct in6_addr *cn, struct in6_addr *hoa) -{ - struct bulentry *bule; - struct home_addr_info *hai; - struct in6_addr coa; - int if_coa; - - pthread_rwlock_wrlock(&mn_lock); - - hai = mn_get_home_addr(hoa); - - if (!hai || hai->at_home) { - pthread_rwlock_unlock(&mn_lock); - return; - } - - if_coa = mn_get_ro_coa(cn, hai, &coa); - - if (if_coa > 0) { - MDBG("MN: Start RO to %x:%x:%x:%x:%x:%x:%x:%x, " - "from %x:%x:%x:%x:%x:%x:%x:%x\n", - NIP6ADDR(cn), NIP6ADDR(hoa)); - - bule = bul_get(NULL, hoa, cn); - - if (bule) { - /* If BUL entry exists, RR is done or in progress */ - pthread_rwlock_unlock(&mn_lock); - return; - } - - bule = create_bule(hoa, cn); - - if (!bule) { - MDBG("Malloc failed at starting of RO\n"); - pthread_rwlock_unlock(&mn_lock); - return; - } - - bule->type = BUL_ENTRY; - bule->flags = conf.CnBuAck; - bule->coa = coa; - bule->if_coa = if_coa; - bule->coa_changed = -1; - bule->home = hai; - bule->rr.state = RR_NOT_STARTED; - - mn_reset_ro_bule(bule); - - if (bul_add(bule) < 0) { - bul_delete(bule); - pthread_rwlock_unlock(&mn_lock); - return; - } - - mn_rr_refresh(bule); - - if (bule->rr.state == RR_NOT_STARTED) - bul_delete(bule); - } - - pthread_rwlock_unlock(&mn_lock); -} - -static void mn_recv_brr(__attribute__ ((unused)) const struct ip6_mh *mh, - ssize_t len, const struct in6_addr_bundle *in, - __attribute__ ((unused)) int iif) - -{ - struct bulentry *e; - struct in6_addr *cn, *hoa; - struct timespec now; - long last_used; - - statistics_inc(&mipl_stat, MIPL_STATISTICS_IN_BRR); - - if (len < 0 || (size_t)len < sizeof(struct ip6_mh_binding_request)) - return; - - cn = in->src; - hoa = in->dst; - pthread_rwlock_wrlock(&mn_lock); - - /* Do we have BUL entry for cn? If not, drop. */ - if ((e = bul_get(NULL, hoa, cn)) == NULL) { - pthread_rwlock_unlock(&mn_lock); - return; - } - - dbg("Received BRR\n"); - dbg_func(e, dump_bule); - clock_gettime(CLOCK_REALTIME, &now); - - /* Do we need a binding? */ - last_used = xfrm_last_used(cn, hoa, IPPROTO_DSTOPTS, &now); - - if (last_used >= 0 && last_used < MN_RO_RESTART_THRESHOLD) - mn_rr_start_handoff(e, NULL); - - pthread_rwlock_unlock(&mn_lock); -} - -static struct mh_handler mn_brr_handler = { - .recv = mn_recv_brr, -}; - -static void mn_recv_be(const struct ip6_mh *mh, ssize_t len, - const struct in6_addr_bundle *in, - __attribute__ ((unused)) int iif) -{ - struct ip6_mh_binding_error *berr; - struct bulentry *e; - struct in6_addr *cn, *hoa; - struct timespec now; - struct in6_addr addr; - - statistics_inc(&mipl_stat, MIPL_STATISTICS_IN_BE); - - if (len < 0 || (size_t)len < sizeof(struct ip6_mh_binding_error)) - return; - - berr = (struct ip6_mh_binding_error *)mh; - - cn = in->src; - - pthread_rwlock_wrlock(&mn_lock); - - if (!IN6_IS_ADDR_UNSPECIFIED(&berr->ip6mhbe_homeaddr)) - hoa = &berr->ip6mhbe_homeaddr; - else if (mn_rr_error_check(in->dst, in->src, &addr)) - hoa = &addr; - else - hoa = in->dst; - - /* Do we have BUL entry for cn? If not, drop. */ - if ((e = bul_get(NULL, hoa, cn)) == NULL || e->type != BUL_ENTRY) - goto out; - - clock_gettime(CLOCK_REALTIME, &now); - - /* Invalidate old entry, if it is not home entry */ - if (e->flags & IP6_MH_BU_HOME) { - MDBG("Got BE from HA, it does not understand us ?\n"); - bule_invalidate(e, &now, 1); - goto out; - } - - if (berr->ip6mhbe_status == IP6_MH_BES_UNKNOWN_HAO) { - bul_delete(e); - } else if (berr->ip6mhbe_status == IP6_MH_BES_UNKNOWN_MH) { - /* if no ack expected, ignore */ - /* if extension in use, stop using it */ - /* if no extensions, stop route optimization */ - - if (!e->do_send_bu) - goto out; - - if (hoa == &berr->ip6mhbe_homeaddr && e->rr.state != RR_READY) - goto out; - - if (e->rr.state != RR_READY || e->wait_ack) - bule_invalidate(e, &now, 1); - } - -out: - pthread_rwlock_unlock(&mn_lock); -} - -static struct mh_handler mn_be_handler = { - .recv = mn_recv_be, -}; - -int mn_init(void) -{ - struct list_head *l, *n; - - if (conf.DoRouteOptimizationMN && - ipsec_policy_entry_check(NULL, NULL, IPSEC_F_TNL_ANY)) { - syslog(LOG_ERR, - "MN can't use both DoRouteOptimizationMN and TunnelPayload IPsecPolicy"); - return -1; - } - - if (pthread_rwlock_init(&mn_lock, NULL)) - return -1; - - if (md_init() < 0) - return -1; - - if (bul_init() < 0) - goto err_bul; - - dhaad_mn_init(); - - if (mpd_mn_init() < 0) - goto err_mpd; - - if (rr_init() < 0) - goto err_rr; - - list_for_each(l, &conf.home_addrs) { - struct home_addr_info *hai; - hai = list_entry(l, struct home_addr_info, list); - - if (conf_home_addr_info(hai) < 0) - goto err_hoa; - } - if_mc_group(ICMP6_MAIN_SOCK, 0, &in6addr_all_nodes_mc, - IPV6_JOIN_GROUP); - - if (linklocal_rt_rules_add() < 0) - goto err_rule; - - icmp6_handler_reg(ICMP6_PARAM_PROB, &mn_param_prob_handler); - mh_handler_reg(IP6_MH_TYPE_BERROR, &mn_be_handler); - mh_handler_reg(IP6_MH_TYPE_BACK, &mn_ba_handler); - mh_handler_reg(IP6_MH_TYPE_BRR, &mn_brr_handler); - - if (md_start() < 0) - goto err_md; - - return 0; -err_md: - mh_handler_dereg(IP6_MH_TYPE_BRR, &mn_brr_handler); - mh_handler_dereg(IP6_MH_TYPE_BACK, &mn_ba_handler); - mh_handler_dereg(IP6_MH_TYPE_BERROR, &mn_be_handler); - icmp6_handler_dereg(ICMP6_PARAM_PROB, &mn_param_prob_handler); - linklocal_rt_rules_del(); -err_rule: - pthread_rwlock_wrlock(&mn_lock); - list_for_each_safe(l, n, &home_addr_list) { - struct home_addr_info *hai; - hai = list_entry(l, struct home_addr_info, list); - clean_home_addr_info(hai); - } - pthread_rwlock_unlock(&mn_lock); -err_hoa: - pthread_rwlock_wrlock(&mn_lock); - bul_flush(); - pthread_rwlock_unlock(&mn_lock); - rr_cleanup(); -err_rr: - mpd_mn_cleanup(); -err_mpd: - dhaad_mn_cleanup(); - bul_cleanup(); -err_bul: - md_cleanup(); - return -1; -} - -void mn_cleanup() -{ - struct list_head *l, *n; - md_stop(); - mh_handler_dereg(IP6_MH_TYPE_BRR, &mn_brr_handler); - mh_handler_dereg(IP6_MH_TYPE_BACK, &mn_ba_handler); - mh_handler_dereg(IP6_MH_TYPE_BERROR, &mn_be_handler); - icmp6_handler_dereg(ICMP6_PARAM_PROB, &mn_param_prob_handler); - linklocal_rt_rules_del(); - pthread_rwlock_wrlock(&mn_lock); - list_for_each_safe(l, n, &home_addr_list) { - struct home_addr_info *hai; - hai = list_entry(l, struct home_addr_info, list); - clean_home_addr_info(hai); - } - bul_flush(); - pthread_rwlock_unlock(&mn_lock); - rr_cleanup(); - mpd_mn_cleanup(); - dhaad_mn_cleanup(); - bul_cleanup(); - md_cleanup(); -} - diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/src/mn.h b/openair3/PMIPv6/pmipv6-daemon-umip/src/mn.h deleted file mode 100755 index 0b0081ce8e..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/src/mn.h +++ /dev/null @@ -1,167 +0,0 @@ -/* $Id: mn.h 1.85 06/05/15 13:45:42+03:00 vnuorval@tcs.hut.fi $ */ - -#ifndef __MN_H__ -#define __MN_H__ 1 - -#include -#include -#include "list.h" -#include "hash.h" -#include "prefix.h" -#include "tqueue.h" - -#define DEREG_BU_LIFETIME 420 -extern const struct timespec dereg_bu_lifetime_ts; -#define DEREG_BU_LIFETIME_TS dereg_bu_lifetime_ts - -#define BU_REFRESH_DELAY 95/100 -#define MPS_REFRESH_DELAY 9/10 -#define MN_RR_BEFORE_EXPIRE 1 /* second */ -#define MN_TEST_INIT_DELAY 5 /* XXX: second */ - -#define IFA_F_HOMEADDRESS_NODAD (IFA_F_HOMEADDRESS | IFA_F_NODAD) - -#define NON_MIP_CN_LTIME 420 /* s */ -extern const struct timespec non_mip_cn_ltime_ts; -#define NON_MIP_CN_LTIME_TS non_mip_cn_ltime_ts - -#define MN_BE_TIME_THRESHOLD 10 /* last use of binding at - * which we still delete a - * bule in response to BE, - * in seconds */ -#define MN_RO_RESTART_THRESHOLD 10 /* s */ -#define MIN_VALID_BU_LIFETIME 4 /* seconds */ -extern const struct timespec min_valid_bu_lifetime_ts; -#define MIN_VALID_BU_LIFETIME_TS min_valid_bu_lifetime_ts - -struct ha_candidate_list { - struct list_head home_agents; - struct tq_elem tqe; - struct timespec dhaad_delay; - struct in6_addr last_ha; - int dhaad_resends; - int dhaad_id; - int if_block; - pthread_mutex_t c_lock; -}; - -#define HOME_LINK_BLOCK 0x01 -#define HOME_ADDR_BLOCK 0x02 -#define HOME_ADDR_RULE_BLOCK 0x04 -#define NEMO_RA_BLOCK 0x08 -#define NEMO_FWD_BLOCK 0x10 - -struct mn_addr { - struct in6_addr addr; - int iif; - struct timespec timestamp; - struct timespec valid_time; - struct timespec preferred_time; -}; - -#define HOME_REG_NONE 0 -#define HOME_REG_UNCERTAIN 1 -#define HOME_REG_VALID 2 - -struct home_addr_info { - struct list_head list; - struct mn_addr hoa; /* Home address */ - uint8_t plen; - uint8_t home_reg_status; - uint8_t home_block; - uint8_t use_dhaad; - uint16_t lladdr_comp; - uint8_t at_home; - uint8_t home_plen; - struct in6_addr home_prefix; - struct hash bul; /* Binding Update List */ - struct mn_addr primary_coa; - struct list_head ro_policies; - struct ha_candidate_list ha_list; - struct in6_addr ha_addr; - int pend_ba; - int verdict; - int if_tunnel; - int if_home; - int if_block; - uint8_t altcoa; - uint16_t mob_rtr; - char name[IF_NAMESIZE]; - int mnp_count; - struct list_head mob_net_prefixes; -}; - -enum { - MN_HO_NONE, - MN_HO_INVALIDATE, - MN_HO_IGNORE, - MN_HO_PROCEED, - MN_HO_REESTABLISH, - MN_HO_CHECK_LIFETIME, - MN_HO_RETURN_HOME -}; - -static inline int movement_ho_verdict(int verdict) -{ - return verdict == MN_HO_PROCEED; -} - -static inline int positive_ho_verdict(int verdict) -{ - switch (verdict) { - case MN_HO_PROCEED: - case MN_HO_REESTABLISH: - case MN_HO_CHECK_LIFETIME: - case MN_HO_RETURN_HOME: - return 1; - } - - return 0; -} - -int mn_init(void); -void mn_cleanup(void); - -/* Protects both bul and homelink structures in mn */ -extern pthread_rwlock_t mn_lock; - -struct home_addr_info *mn_get_home_addr(const struct in6_addr *haddr); -/* Interface to configuration system */ - -struct bulentry; - -void mn_send_cn_bu(struct bulentry *bule); - -struct home_addr_info *mn_get_home_addr_by_dhaadid(uint16_t dhaad_id); - -struct movement_event; - -/* Interface to movement detection */ -int mn_movement_event(struct movement_event *event); - -struct nd_opt_prefix_info; -int mn_update_home_prefix(struct home_addr_info *hai, - const struct timespec *mps_sent, - const struct nd_opt_prefix_info *p); - -struct ifaddrmsg; -struct rtattr; -int mn_addr_changed(int add, struct ifaddrmsg *ifa, struct rtattr **rta_tb); - -int mn_lladdr_dad(struct ifaddrmsg *ifa, struct rtattr *rta_tb[], void *arg); - -int mn_rr_start_handoff(void *vbule, void *vcoa); - -int mn_rr_post_home_handoff(void *bule, void *vcoa); - -void mn_start_ro(struct in6_addr *cn_addr, struct in6_addr *home_addr); - -static inline int mn_is_at_home(struct list_head *prefixes, - const struct in6_addr *home_prefix, - int home_plen) -{ - return prefix_list_find(prefixes, home_prefix, home_plen); -} - - -#endif /* __MN_H__ */ diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/src/movement.c b/openair3/PMIPv6/pmipv6-daemon-umip/src/movement.c deleted file mode 100755 index c40f83bab5..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/src/movement.c +++ /dev/null @@ -1,2249 +0,0 @@ -/* - * $Id: movement.c 1.172 06/05/19 01:51:45+03:00 vnuorval@tcs.hut.fi $ - * - * This file is part of the MIPL Mobile IPv6 for Linux. - * - * Author: Ville Nuorvala - * - * Copyright 2003-2005 Go-Core Project - * Copyright 2003-2006 Helsinki University of Technology - * - * MIPL Mobile IPv6 for Linux is free software; you can redistribute - * it and/or modify it under the terms of the GNU General Public - * License as published by the Free Software Foundation; version 2 of - * the License. - * - * MIPL Mobile IPv6 for Linux is distributed in the hope that it will - * be useful, but WITHOUT ANY WARRANTY; without even the implied - * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with MIPL Mobile IPv6 for Linux; if not, write to the Free - * Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - * 02111-1307 USA. - */ - -#ifdef HAVE_CONFIG_H -#include -#endif -#include -#include -#include -#include -#include -#include -#include - -#include "debug.h" -#include "icmp6.h" -#include "util.h" -#include "tqueue.h" -#include "list.h" -#include "movement.h" -#include "mn.h" -#include "rtnl.h" -#include "ndisc.h" -#include "proc_sys.h" -#include "prefix.h" -#include "conf.h" - -#define MD_DEBUG_LEVEL 1 - -#if MD_DEBUG_LEVEL >= 1 -#define MDBG dbg -#else -#define MDBG(...) -#endif /* MDBG */ - -#if MD_DEBUG_LEVEL >= 2 -#define MDBG2 dbg -#else -#define MDBG2(...) -#endif /* MDBG2 */ - -#if MD_DEBUG_LEVEL >= 3 -#define MDBG3 dbg -#else -#define MDBG3(...) -#endif /* MDBG3 */ - -static LIST_HEAD(ifaces); -static pthread_mutex_t iface_lock; - -static pthread_t md_listener; - -static int conf_default_autoconf = 1; -static int conf_default_ra = 1; -static int conf_default_ra_defrtr = 1; -static int conf_default_rs = 3; -static int conf_default_rs_ival = 4; - -static int conf_forwarding = 0; -static int conf_autoconf = 0; -static int conf_ra = 0; -static int conf_ra_defrtr = 0; -static int conf_rs = 0; - -static unsigned int adv_ivals_md_trigger = 1; -static unsigned int adv_ivals_dad_limit = 3; - -static int nud_expire_rtr = 1; - -static void __md_trigger_movement_event(int event_type, int data, - struct md_inet6_iface *iface, - struct md_coa *coa) -{ - struct movement_event e; - - memset(&e, 0, sizeof(struct movement_event)); - e.md_strategy = (conf.MnRouterProbes > 0 ? - MD_STRATEGY_LAZY : MD_STRATEGY_EAGER); - e.event_type = event_type; - e.data = data; - e.iface_list = &ifaces; - e.iface = iface; - e.coa = coa; - - MDBG2("strategy %d type %d iface %s (%d) " - "CoA %x:%x:%x:%x:%x:%x:%x:%x\n", - e.md_strategy, e.event_type, - e.iface->name, e.iface->ifindex, - NIP6ADDR(e.coa ? &e.coa->addr : &in6addr_any)); - - mn_movement_event(&e); -} - -void md_trigger_movement_event(int event_type, int data, int ifindex) -{ - pthread_mutex_lock(&iface_lock); - - if (!list_empty(&ifaces)) { - struct md_inet6_iface *iface; - iface = md_get_inet6_iface(&ifaces, ifindex); - __md_trigger_movement_event(event_type, data, iface, NULL); - } - - pthread_mutex_unlock(&iface_lock); -} - -static inline void md_free_coa(struct md_coa *coa) -{ - MDBG3("freeing CoA %x:%x:%x:%x:%x:%x:%x:%x on iface %d\n", - NIP6ADDR(&coa->addr), coa->ifindex); - list_del(&coa->list); - free(coa); -} - -static void md_flush_coa(struct md_coa *coa) -{ - /* For tunnels, addresses are not managed by us so - we don't remove them from the interface */ - if (!(coa->flags&IFA_F_HOMEADDRESS_NODAD) && - !(coa->if_is_tunnel)) { - MDBG2("deleting CoA " - "%x:%x:%x:%x:%x:%x:%x:%x on iface %d\n", - NIP6ADDR(&coa->addr), coa->ifindex); - addr_del(&coa->addr, coa->plen, coa->ifindex); - } - - md_free_coa(coa); -} - -static void md_flush_coa_list(struct list_head *coas) -{ - struct list_head *list, *n; - list_for_each_safe(list, n, coas) { - struct md_coa *coa; - coa = list_entry(list, struct md_coa, list); - md_flush_coa(coa); - } -} - -static inline void md_free_router_prefix(struct prefix_list_entry *p) -{ - MDBG3("freeing prefix %x:%x:%x:%x:%x:%x:%x:%x/%d\n", - NIP6ADDR(&p->ple_prefix), p->ple_plen); - list_del(&p->list); - free(p); -} - -static void md_prefix_rule_del(struct prefix_list_entry *p) -{ - struct in6_addr prefix; - ipv6_addr_prefix(&prefix, &p->ple_prefix, p->ple_plen); - rule_del(NULL, RT6_TABLE_MAIN, IP6_RULE_PRIO_MIP6_COA_OUT, - RTN_UNICAST, &prefix, p->ple_plen, - &in6addr_any, 0, 0); -} - -static void __md_free_router(struct md_router *rtr) -{ - struct list_head *l, *n; - - if (rtr->used) { - MDBG2("deleting default route via %x:%x:%x:%x:%x:%x:%x:%x\n", - NIP6ADDR(&rtr->lladdr)); - - route_del(rtr->ifindex, RT_TABLE_MAIN, 0, - &in6addr_any, 0, &in6addr_any, 0, &rtr->lladdr); - } - - list_for_each_safe(l, n, &rtr->prefixes) { - struct prefix_list_entry *p; - p = list_entry(l, struct prefix_list_entry, list); - - if (rtr->used) { - md_prefix_rule_del(p); - MDBG2("deleting prefix route " - "%x:%x:%x:%x:%x:%x:%x:%x/%d\n", - NIP6ADDR(&p->ple_prefix), p->ple_plen); - route_del(rtr->ifindex, RT_TABLE_MAIN, 0, &in6addr_any, - 0, &p->ple_prefix, p->ple_plen, NULL); - } - - md_free_router_prefix(p); - } - list_del(&rtr->list); - MDBG3("freeing router %x:%x:%x:%x:%x:%x:%x:%x\n", - NIP6ADDR(&rtr->lladdr)); - free(rtr); -} - -static inline void md_free_router(struct md_router *rtr) -{ - assert(!tsisset(rtr->lifetime)); - __md_free_router(rtr); -} - -static void md_flush_router_list(struct list_head *routers) -{ - struct list_head *list, *n; - list_for_each_safe(list, n, routers) { - struct md_router *rtr; - rtr = list_entry(list, struct md_router, list); - md_free_router(rtr); - } -} - -static void md_free_inet6_iface(struct md_inet6_iface *iface) -{ - MDBG3("freeing iface %s (%d)\n", iface->name, iface->ifindex); - - if (!iface->is_tunnel) { - /* tunnel interfaces have no router information */ - assert(list_empty(&iface->default_rtr)); - md_flush_router_list(&iface->expired_rtrs); - } - - assert(list_empty(&iface->coas)); - md_flush_coa_list(&iface->expired_coas); - free(iface); -} - -static void md_expire_coa(struct md_inet6_iface *iface, struct md_coa *coa) -{ - list_del(&coa->list); - MDBG2("expiring CoA %x:%x:%x:%x:%x:%x:%x:%x on iface %s (%d)\n", - NIP6ADDR(&coa->addr), iface->name, iface->ifindex); - list_add_tail(&coa->list, &iface->expired_coas); -} - -static void md_reset_egress_forward(void) -{ - struct list_head *l; - int forward = 0;; - - if (list_empty(&ifaces)) - return; - - list_for_each(l, &ifaces) { - struct md_inet6_iface *i; - i = list_entry(l, struct md_inet6_iface, list); - forward |= i->home_link; - } - list_for_each(l, &ifaces) { - struct md_inet6_iface *i; - i = list_entry(l, struct md_inet6_iface, list); - set_iface_proc_entry(PROC_SYS_IP6_FORWARDING, - i->name, forward); - } -} - -static void md_reset_home_link(struct md_inet6_iface *i) -{ - if (i->home_link) - md_reset_egress_forward(); - - i->home_link = 0; - i->ll_dad_unsafe = 0; -} - -static void md_expire_router(struct md_inet6_iface *iface, - struct md_router *old, struct md_router *new) -{ - struct list_head *plist, *pn; - - assert(old != NULL); - - del_task(&old->tqe); - - tsclear(old->lifetime); - list_del(&old->list); - - MDBG("expiring router %x:%x:%x:%x:%x:%x:%x:%x on iface %s (%d)\n", - NIP6ADDR(&old->lladdr), iface->name, iface->ifindex); - - if (old->used) { - list_for_each_safe(plist, pn, &old->prefixes) { - struct prefix_list_entry *p; - struct list_head *clist, *cn; - p = list_entry(plist, struct prefix_list_entry, list); - - /* don't expire prefixes also advertised by the - new router */ - if (new && prefix_list_find(&new->prefixes, - &p->ple_prefix, - p->ple_plen)) { - md_free_router_prefix(p); - continue; - } - - list_for_each_safe(clist, cn, &iface->coas) { - struct md_coa *coa; - coa = list_entry(clist, struct md_coa, list); - - if (!ipv6_pfx_cmp(&p->ple_prefix, - &coa->addr, coa->plen)) - md_expire_coa(iface, coa); - } - } - - if (new == NULL) - md_reset_home_link(iface); - } - - list_add_tail(&old->list, &iface->expired_rtrs); -} - -static void md_block_rule_del(struct md_inet6_iface *iface) -{ - rule_del(NULL, 0, IP6_RULE_PRIO_MIP6_BLOCK_HOA, RTN_BLACKHOLE, - &in6addr_any, 0, &in6addr_any, 0, 0); - rule_del(NULL, RT6_TABLE_MAIN, IP6_RULE_PRIO_MIP6_COA_OUT, RTN_UNICAST, - &in6addr_any, 128, &in6addr_any, 0, 0); - iface->iface_flags &= ~MD_BLOCK_TRAFFIC; -} - -static void md_flush_inet6_iface(struct md_inet6_iface *iface) -{ - struct md_router *rtr; - struct list_head *l, *n; - del_task(&iface->tqe); - - /* We do not maintain router related - information for tunnel interfaces */ - if (!iface->is_tunnel) { - iface->router_solicits = 0; - list_for_each_safe(l, n, &iface->backup_rtrs) { - rtr = list_entry(l, struct md_router, list); - md_expire_router(iface, rtr, NULL); - } - - if ((rtr = md_get_first_router(&iface->default_rtr)) != NULL) { - md_expire_router(iface, rtr, NULL); - } - - md_flush_router_list(&iface->expired_rtrs); - } - - list_for_each_safe(l, n, &iface->coas) { - struct md_coa *coa = list_entry(l, struct md_coa, list); - md_expire_coa(iface, coa); - } - md_flush_coa_list(&iface->expired_coas); -} - -static void md_expire_inet6_iface(struct md_inet6_iface *iface) -{ - MDBG2("expiring iface %s (%d)\n", iface->name, iface->ifindex); - md_flush_inet6_iface(iface); - - if (iface->iface_flags & MD_BLOCK_TRAFFIC) - md_block_rule_del(iface); - - list_del(&iface->list); - __md_trigger_movement_event(ME_IFACE_DOWN, 0, iface, NULL); -} - -static void md_link_down(struct md_inet6_iface *iface) -{ - MDBG2("link down on iface %s (%d)\n", iface->name, iface->ifindex); - md_flush_inet6_iface(iface); - __md_trigger_movement_event(ME_LINK_DOWN, 0, iface, NULL); -} - -static void -md_init_coa(struct md_coa *coa, struct ifaddrmsg *ifa, struct rtattr **rta_tb, - int if_is_tunnel) -{ - memset(coa, 0, sizeof(struct md_coa)); - INIT_LIST_HEAD(&coa->list); - coa->flags = ifa->ifa_flags; - coa->plen = ifa->ifa_prefixlen; - coa->scope = ifa->ifa_scope; - coa->ifindex = ifa->ifa_index; - /* For tunnel interfaces, mark the CoA - to avoid removing the address from - the interface when flushing it. */ - coa->if_is_tunnel = if_is_tunnel; - coa->addr = *(struct in6_addr *) RTA_DATA(rta_tb[IFA_ADDRESS]); -} - -static struct md_coa *md_create_coa(struct md_inet6_iface *iface, - struct ifaddrmsg *ifa, - struct rtattr **rta_tb) -{ - struct md_coa *coa = malloc(sizeof(struct md_coa)); - - if (coa != NULL) { - struct ifa_cacheinfo *ci; - md_init_coa(coa, ifa, rta_tb, iface->is_tunnel); - ci = RTA_DATA(rta_tb[IFA_CACHEINFO]); - clock_gettime(CLOCK_REALTIME, &coa->timestamp); - tssetsec(coa->valid_time, ci->ifa_valid); - tssetsec(coa->preferred_time, ci->ifa_prefered); - MDBG3("creating CoA %x:%x:%x:%x:%x:%x:%x:%x on " - "iface %s (%d)\n", - NIP6ADDR(&coa->addr), iface->name, iface->ifindex); - } - - return coa; -} - -static int update_coa(struct md_inet6_iface *iface, - struct ifaddrmsg *ifa, struct rtattr **rta_tb) -{ - struct md_coa *new, *old; - struct in6_addr *addr; - - addr = RTA_DATA(rta_tb[IFA_ADDRESS]); - - if (!in6_is_addr_routable_unicast(addr)) - return 0; - - if ((new = md_create_coa(iface, ifa, rta_tb)) == NULL) - return -ENOMEM; - - if ((old = md_get_coa(&iface->coas, addr)) == NULL) { - list_add(&new->list, &iface->coas); - MDBG2("adding CoA %x:%x:%x:%x:%x:%x:%x:%x on iface %s (%d)\n", - NIP6ADDR(&new->addr), iface->name, iface->ifindex); - - if (!(iface->iface_flags & MD_LINK_LOCAL_DAD)) { - __md_trigger_movement_event(ME_COA_NEW, 0, iface, new); - - if (iface->iface_flags & MD_BLOCK_TRAFFIC) - md_block_rule_del(iface); - } - } else { - struct timespec oexp, nexp; - - tsadd(old->valid_time, old->timestamp, oexp); - tsadd(new->valid_time, new->timestamp, nexp); - - MDBG3("updating CoA " - "%x:%x:%x:%x:%x:%x:%x:%x on iface %s (%d)\n", - NIP6ADDR(&old->addr), iface->name, iface->ifindex); - - old->flags = new->flags; - old->plen = new->plen; - old->timestamp = new->timestamp; - old->valid_time = new->valid_time; - old->preferred_time = new->preferred_time; - - free(new); - - /* check if lifetime of CoA changed */ - if (tsbefore(oexp, nexp)) - __md_trigger_movement_event(ME_COA_LFT_DEC, 0, - iface, old); - else if (tsafter(oexp, nexp)) - __md_trigger_movement_event(ME_COA_LFT_INC, 0, - iface, old); - } - - return 0; -} - -static int process_new_addr(struct ifaddrmsg *ifa, struct rtattr **rta_tb) -{ - struct md_inet6_iface *iface; - int res = 0; - - MDBG3("new address %x:%x:%x:%x:%x:%x:%x:%x on iface %d\n", - NIP6ADDR((struct in6_addr *)RTA_DATA(rta_tb[IFA_ADDRESS])), - ifa->ifa_index); - - pthread_mutex_lock(&iface_lock); - - if ((iface = md_get_inet6_iface(&ifaces, ifa->ifa_index)) != NULL) { - if (ifa->ifa_scope == RT_SCOPE_LINK) { - iface->iface_flags &= ~MD_LINK_LOCAL_DAD; - __md_trigger_movement_event(ME_LINK_UP, 0, - iface, NULL); - - if (iface->iface_flags & MD_BLOCK_TRAFFIC) - md_block_rule_del(iface); - } else if (ifa->ifa_scope == RT_SCOPE_UNIVERSE) { - res = update_coa(iface, ifa, rta_tb); - } - } - - pthread_mutex_unlock(&iface_lock); - return res; -} - -static void md_inet6_iface_init(struct md_inet6_iface *i, int ifindex) -{ - struct list_head *list; - - memset(i, 0, sizeof(struct md_inet6_iface)); - i->ifindex = ifindex; - - /* Mark interface as tunnel if set in the conf */ - list_for_each(list, &conf.net_ifaces) { - struct net_iface *nif; - nif = list_entry(list, struct net_iface, list); - - if (nif->ifindex == ifindex) - i->is_tunnel = nif->is_tunnel; - } - - INIT_LIST_HEAD(&i->list); - INIT_LIST_HEAD(&i->default_rtr); - INIT_LIST_HEAD(&i->backup_rtrs); - INIT_LIST_HEAD(&i->expired_rtrs); - INIT_LIST_HEAD(&i->coas); - INIT_LIST_HEAD(&i->expired_coas); - INIT_LIST_HEAD(&i->tqe.list); -} - -static int process_del_addr(struct ifaddrmsg *ifa, struct rtattr **rta_tb) -{ - struct in6_addr *addr = RTA_DATA(rta_tb[IFA_ADDRESS]); - struct md_inet6_iface *iface; - struct md_coa *coa; - struct md_inet6_iface iface_h; - struct md_coa coa_h; - - int res = 0; - - MDBG3("deleted address %x:%x:%x:%x:%x:%x:%x:%x on iface %d\n", - NIP6ADDR(addr), ifa->ifa_index); - - if (ifa->ifa_scope != RT_SCOPE_UNIVERSE || - !in6_is_addr_routable_unicast(addr)) - return 0; - - pthread_mutex_lock(&iface_lock); - - if ((iface = md_get_inet6_iface(&ifaces, ifa->ifa_index)) != NULL) { - coa = md_get_coa(&iface->coas, addr); - - if (coa != NULL) - md_expire_coa(iface, coa); - else - coa = md_get_coa(&iface->expired_coas, addr); - } else { - md_inet6_iface_init(&iface_h, ifa->ifa_index); - iface = &iface_h; - coa = NULL; - } - - if (coa == NULL) { - md_init_coa(&coa_h, ifa, rta_tb, iface->is_tunnel); - coa = &coa_h; - } - - __md_trigger_movement_event(ME_COA_EXPIRED, 0, iface, coa); - - if (coa != &coa_h) - md_free_coa(coa); - - pthread_mutex_unlock(&iface_lock); - return res; -} - -static int process_addr(struct nlmsghdr *n) -{ - struct ifaddrmsg *ifa; - struct rtattr *rta_tb[IFA_MAX+1]; - - if (n->nlmsg_len < NLMSG_LENGTH(sizeof(*ifa))) - return -1; - - ifa = NLMSG_DATA(n); - - memset(rta_tb, 0, sizeof(rta_tb)); - parse_rtattr(rta_tb, IFA_MAX, IFA_RTA(ifa), - n->nlmsg_len - NLMSG_LENGTH(sizeof(*ifa))); - - if (!rta_tb[IFA_ADDRESS] || !rta_tb[IFA_CACHEINFO]) - return -1; - - if (n->nlmsg_type == RTM_NEWADDR) - process_new_addr(ifa, rta_tb); - else if (n->nlmsg_type == RTM_DELADDR) - process_del_addr(ifa, rta_tb); - - return 0; -} - -static void md_discover_router(struct tq_elem *tqe); - -static void __md_discover_router(struct md_inet6_iface *iface) -{ - MDBG("discover link on iface %s (%d)\n", iface->name, iface->ifindex); - - if (md_is_link_up(iface) && - iface->router_solicits++ <= iface->devconf[DEVCONF_RTR_SOLICITS]) { - struct timespec exp_in; - ndisc_send_rs(iface->ifindex, &in6addr_all_routers_mc, NULL, 0); - tssetsec(exp_in, iface->devconf[DEVCONF_RTR_SOLICIT_INTERVAL]); - add_task_rel(&exp_in, &iface->tqe, md_discover_router); - } -} - -static void md_discover_router(struct tq_elem *tqe) -{ - pthread_mutex_lock(&iface_lock); - - if (!task_interrupted()) { - struct md_inet6_iface *iface; - iface = tq_data(tqe, struct md_inet6_iface, tqe); - __md_discover_router(iface); - } - - pthread_mutex_unlock(&iface_lock); -} - -static void md_check_expired_coas(struct md_inet6_iface *iface, - struct md_router *rtr); - -/* Called on netlink retrieved information for an address - in order to update list of coa on that iface (function - follows rtnl_filter_t prototype). */ -static int apply_update_tunnel_coa(__attribute__ ((unused)) const struct sockaddr_nl *who, - struct nlmsghdr *n, void *arg) -{ - struct md_inet6_iface *iface = (struct md_inet6_iface *)arg; - int ifindex = iface->ifindex; - struct ifaddrmsg *ifa = NLMSG_DATA(n); - struct rtattr *rta_tb[RTA_MAX+1]; - - if (n->nlmsg_type == NLMSG_DONE || - n->nlmsg_type == NLMSG_ERROR) - return 0; - - if (n->nlmsg_type != RTM_NEWADDR || - n->nlmsg_len < NLMSG_LENGTH(sizeof(*ifa)) || - ifa->ifa_family != AF_INET6) - return -EINVAL; - - if (ifa->ifa_flags & IFA_F_TENTATIVE) - return 0; - - memset(rta_tb, 0, sizeof(rta_tb)); - parse_rtattr(rta_tb, IFA_MAX, IFA_RTA(ifa), - n->nlmsg_len - NLMSG_LENGTH(sizeof(*ifa))); - - if (!rta_tb[IFA_ADDRESS]) - return 0; - - if (ifindex < 0 || ifa->ifa_index != (uint32_t)ifindex) - return 0; - - update_coa(iface, ifa, rta_tb); - return 0; -} - -/* Grab the list of addresses configured on a provided - tunnel interface and add usable ones to CoA list */ -static int __md_update_tunnel_iface_coa_list(struct md_inet6_iface *iface) -{ - struct ifaddrmsg ifa; - int len, res = 0; - struct rtnl_handle rth; - - /* Open socket */ - if (rtnl_open_byproto(&rth, 0, NETLINK_ROUTE) < 0) - return -1; - - /* Fill ifaddrmsg (will serve as request) */ - memset(&ifa, 0, sizeof(ifa)); - ifa.ifa_family = AF_INET6; - ifa.ifa_prefixlen = 0; - ifa.ifa_flags = IFA_F_PERMANENT; - ifa.ifa_scope = RT_SCOPE_UNIVERSE; - ifa.ifa_index = iface->ifindex; - len = NLMSG_LENGTH(sizeof(struct ifaddrmsg)); - - /* Dump address information for previous request and work on - * every part of the result */ - if (rtnl_dump_request(&rth, RTM_GETADDR, &ifa, len) < 0 || - rtnl_dump_filter(&rth, apply_update_tunnel_coa, - (void *)iface, NULL, NULL) < 0) - res = -1; - - rtnl_close(&rth); - return res; -} - -static uint32_t md_router_compute_def_route_metric(uint16_t iface_pref, - uint8_t rtr_pref); - -/* called on all routes find by __md_update_tunnel_iface_routes */ -static int apply_update_tunnel_route(__attribute__ ((unused)) const struct sockaddr_nl *who, - struct nlmsghdr *n, void *arg) -{ - struct md_inet6_iface *iface = (struct md_inet6_iface *)arg; - uint32_t old_metric=0, new_metric; - int ifindex = iface->ifindex; - struct rtmsg *r = NLMSG_DATA(n); - struct rtattr *rta_tb[RTA_MAX+1]; - struct rtattr *rta; - int len = n->nlmsg_len; - struct in6_addr *gateway = NULL; - - if (n->nlmsg_type == NLMSG_DONE || - n->nlmsg_type == NLMSG_ERROR) - return 0; - - if (n->nlmsg_type != RTM_NEWROUTE|| - len < 0 || (size_t)len < NLMSG_LENGTH(sizeof(*r)) || - r->rtm_family != AF_INET6) { - return -EINVAL; - } - - len -= NLMSG_LENGTH(sizeof(*r)); - - if (len < 0) - return -1; - - parse_rtattr(rta_tb, RTA_MAX, RTM_RTA(r), len); - - rta = rta_tb[RTA_OIF]; /* Main filter is ifindex */ - - if (rta == NULL || *(int*)RTA_DATA(rta) != ifindex) { - return 0; - } - - /* Man page is explicit enough, we only deal with the default - route in main table by removing it and installing a new one - through the device with a modified metric. Gateway is kept - if present (for 6to4 mainly). We just skip other routes. */ - if (r->rtm_dst_len != 0 || - r->rtm_src_len != 0 || - r->rtm_table != RT_TABLE_MAIN || - r->rtm_scope != RT_SCOPE_UNIVERSE || - r->rtm_type != RTN_UNICAST || - rta_tb[RTA_DST] != NULL || - rta_tb[RTA_SRC] != NULL) - return 0; - - if (rta_tb[RTA_GATEWAY]) { - gateway = RTA_DATA(rta_tb[RTA_GATEWAY]); - } - - if (rta_tb[RTA_PRIORITY]) - old_metric = *(uint32_t*)RTA_DATA(rta_tb[RTA_PRIORITY]); - - /* Compute new metric */ - new_metric = md_router_compute_def_route_metric(iface->preference, 0); - - /* No change needed */ - if (old_metric == new_metric) - return 0; - - /* Different metrics, start by adding the new route and then remove - * the old one. Having done some tests, I cannot manage to do that - * reliably in a single operation (i.e. change the metric). --arno */ - route_add(ifindex, RT_TABLE_MAIN, RTPROT_STATIC, r->rtm_flags, - new_metric, &in6addr_any, 0, &in6addr_any, 0, gateway); - route_del(ifindex, RT_TABLE_MAIN, old_metric, - &in6addr_any, 0, &in6addr_any, 0, gateway); - - return 0; -} - -/* Grab routes that use provided interface, keep link local ones, - * modify metric of default one(s ?) and remove others. */ -static int __md_update_tunnel_iface_routes(struct md_inet6_iface *iface) -{ - struct rtmsg r; - struct rtnl_handle rth; - int len, res = 0; - - if (rtnl_open_byproto(&rth, 0, NETLINK_ROUTE) < 0) - return -1; - - /* Fill rtmsg (will serve as request) */ - memset(&r, 0, sizeof(r)); - r.rtm_family = AF_INET6; - r.rtm_table = RT_TABLE_MAIN; - r.rtm_scope = RT_SCOPE_UNIVERSE; - r.rtm_protocol = RTPROT_UNSPEC; - r.rtm_type = RTN_UNICAST; - len = NLMSG_LENGTH(sizeof(r)); - - /* Dump route information for previous request and work on - * every part of the result */ - if (rtnl_dump_request(&rth, RTM_GETROUTE, &r, len) < 0 || - rtnl_dump_filter(&rth, apply_update_tunnel_route, - (void *)iface, NULL, NULL) < 0) - res = -1; - - rtnl_close(&rth); - return res; -} - -static void md_link_up(struct md_inet6_iface *iface) -{ - MDBG2("link up on iface %s (%d)\n", iface->name, iface->ifindex); - - if (iface->is_tunnel) { - /* When interface is a tunnel, we do not deal with router - * discovery and interface configuration. We only: - * - grab and update the list of CoAs for the interface. - * - updates routes (i.e. change metric) */ - __md_update_tunnel_iface_coa_list(iface); - __md_update_tunnel_iface_routes(iface); - } else - __md_discover_router(iface); -} - -static void __md_new_link(struct md_inet6_iface *iface, int link_changed) -{ - MDBG2("new link on iface %s (%d)\n", iface->name, iface->ifindex); - - del_task(&iface->tqe); - - /* Skip router related updates for autoconfigured tunnel iface*/ - if (!iface->is_tunnel) { - assert(!list_empty(&iface->default_rtr)); - iface->router_solicits = 0; - - if (link_changed) { - struct list_head *l, *n; - - if (!iface->ll_dad_unsafe) { - iface->iface_flags |= MD_LINK_LOCAL_DAD; - addr_do(&iface->lladdr, 64, iface->ifindex, - NULL, mn_lladdr_dad); - } - - list_for_each_safe(l, n, &iface->backup_rtrs) { - struct md_router *rtr; - rtr = list_entry(l, struct md_router, list); - md_expire_router(iface, rtr, NULL); - } - } - - md_flush_router_list(&iface->expired_rtrs); - } - - md_flush_coa_list(&iface->expired_coas); -} - - -static struct md_inet6_iface * -md_create_inet6_iface(struct ifinfomsg *ifi, struct rtattr **rta_tb) -{ - struct md_inet6_iface *iface; - int hwalen; - - /* Note: steps performed below are ok even for tunnel interfaces */ - if ((iface = malloc(sizeof(struct md_inet6_iface))) != NULL) { - md_inet6_iface_init(iface, ifi->ifi_index); - - if (rta_tb[IFLA_IFNAME]) - strncpy(iface->name, RTA_DATA(rta_tb[IFLA_IFNAME]), - IF_NAMESIZE - 1); - - iface->link_flags = ifi->ifi_flags; - iface->type = ifi->ifi_type; - - /* For interfaces w/ meaningful L2 addresses, if the address - * is available and ok, we derive a link-local address */ - if (rta_tb[IFLA_ADDRESS] != NULL && - (hwalen = ndisc_get_l2addr_len(ifi->ifi_type)) > 0 && - rta_tb[IFLA_ADDRESS]->rta_len == RTA_LENGTH(hwalen)) { - ndisc_set_linklocal(&iface->lladdr, - RTA_DATA(rta_tb[IFLA_ADDRESS]), - iface->type); - } - - if (rta_tb[IFLA_PROTINFO]) { - struct rtattr *inet6_tb[IFLA_INET6_MAX+1]; - - memset(inet6_tb, 0, sizeof(inet6_tb)); - - parse_rtattr(inet6_tb, IFLA_INET6_MAX, - RTA_DATA(rta_tb[IFLA_PROTINFO]), - rta_tb[IFLA_PROTINFO]->rta_len); - - if (inet6_tb[IFLA_INET6_CONF]) { - memcpy(iface->devconf, - RTA_DATA(inet6_tb[IFLA_INET6_CONF]), - sizeof(iface->devconf)); - } - } - - if (iface->devconf[DEVCONF_RTR_SOLICITS] <= 0) - iface->devconf[DEVCONF_RTR_SOLICITS] = conf_default_rs; - - if (iface->devconf[DEVCONF_RTR_SOLICIT_INTERVAL] <= 0) - iface->devconf[DEVCONF_RTR_SOLICIT_INTERVAL] = conf_default_rs_ival; - - MDBG3("creating iface %s (%d)\n", iface->name, iface->ifindex); - } - - return iface; -} - -static void iface_proc_entries_init(struct md_inet6_iface *iface) -{ - set_iface_proc_entry(PROC_SYS_IP6_FORWARDING, iface->name, - conf_forwarding); - set_iface_proc_entry(PROC_SYS_IP6_AUTOCONF, iface->name, - conf_autoconf); - set_iface_proc_entry(PROC_SYS_IP6_ACCEPT_RA, iface->name, - conf_ra); - set_iface_proc_entry(PROC_SYS_IP6_ACCEPT_RA_DEFRTR, iface->name, - conf_ra_defrtr); - set_iface_proc_entry(PROC_SYS_IP6_RTR_SOLICITS, iface->name, - conf_rs); - tssetmsec(iface->reachable, DEFAULT_REACHABLE_TIME); - tssetmsec(iface->retransmit, DEFAULT_RETRANSMIT_TIMER); -} - -static inline int link_flags_changed(unsigned int nf, unsigned int of) -{ - return (nf & (IFF_UP|IFF_RUNNING)) != (of & (IFF_UP|IFF_RUNNING)); -} - -/* Look for interface by name (if any) in the list of interfaces - * referenced in the configuration and update its ifindex as the - * interface is now available (dongle/adapter was plugged) */ -static void iface_ifindex_update(int ifindex) -{ - char ifname[IF_NAMESIZE]; - struct list_head *list; - - /* We need the name of the interface to find it and - * update its ifindex */ - if (if_indextoname(ifindex, ifname) == NULL) - return; - - list_for_each(list, &conf.net_ifaces) { - struct net_iface *nif; - nif = list_entry(list, struct net_iface, list); - - if (strncmp(ifname, nif->name, IF_NAMESIZE-1) == 0) { - nif->ifindex = ifindex; - break; - } - } -} - -/* Look for interface by ifindex in the list of interfaces referenced - * by configuration and invalidate its ifindex as the interface was - * removed */ -static void iface_ifindex_invalidate(int ifindex) -{ - struct list_head *list; - - /* Invalidate ifindex for that interface */ - list_for_each(list, &conf.net_ifaces) { - struct net_iface *nif; - nif = list_entry(list, struct net_iface, list); - - if (nif->ifindex == ifindex) { - nif->ifindex = 0; - break; - } - } -} - -static int process_new_inet6_iface(struct ifinfomsg *ifi, - struct rtattr **rta_tb) -{ - struct md_inet6_iface *iface; - - if ((iface = md_get_inet6_iface(&ifaces, ifi->ifi_index)) == NULL) { - unsigned int pref; - - iface_ifindex_update(ifi->ifi_index); - - if ((pref = conf.pmgr.accept_inet6_iface(ifi->ifi_index)) && - (iface = md_create_inet6_iface(ifi, rta_tb)) != NULL) { - MDBG2("adding iface %s (%d)\n", - iface->name, iface->ifindex); - iface->preference = pref; - list_add_tail(&iface->list, &ifaces); - - if (!iface->is_tunnel) - iface_proc_entries_init(iface); - - if (md_is_link_up(iface)) - md_link_up(iface); - } - } else if (link_flags_changed(ifi->ifi_flags, iface->link_flags)) { - iface->link_flags = ifi->ifi_flags; - - if (md_is_link_up(iface)) - md_link_up(iface); - else - md_link_down(iface); - } - - return 0; -} - -static int -process_del_inet6_iface(struct ifinfomsg *ifi) -{ - struct md_inet6_iface *iface; - - if ((iface = md_get_inet6_iface(&ifaces, ifi->ifi_index)) != NULL) { - MDBG2("deleting iface %s (%d)\n", iface->name, iface->ifindex); - md_expire_inet6_iface(iface); - md_free_inet6_iface(iface); - iface_ifindex_invalidate(ifi->ifi_index); - } - - return 0; -} - -static int process_link(struct nlmsghdr *n) -{ - struct ifinfomsg *ifi; - struct rtattr *rta_tb[IFLA_MAX+1]; - - if (n->nlmsg_len < NLMSG_LENGTH(sizeof(*ifi))) - return -1; - - ifi = NLMSG_DATA(n); - - if (ifi->ifi_family != AF_UNSPEC && ifi->ifi_family != AF_INET6) - return 0; - - memset(rta_tb, 0, sizeof(rta_tb)); - parse_rtattr(rta_tb, IFLA_MAX, IFLA_RTA(ifi), - n->nlmsg_len - NLMSG_LENGTH(sizeof(*ifi))); - - /* Check if interface type is supported, i.e. if we have - * internal logic to perform minimal L2 operations. We do - * that by checking we do know HW address length. */ - if (ndisc_get_l2addr_len(ifi->ifi_type) < 0) { - syslog(LOG_WARNING, - "Interface %d (%s):type %d unsupported", - ifi->ifi_index, - (char *) RTA_DATA(rta_tb[IFLA_IFNAME]), - ifi->ifi_type); - return 0; - } - - pthread_mutex_lock(&iface_lock); - - if (n->nlmsg_type == RTM_NEWLINK) - process_new_inet6_iface(ifi, rta_tb); - else if (n->nlmsg_type == RTM_DELLINK) - process_del_inet6_iface(ifi); - - pthread_mutex_unlock(&iface_lock); - - return 0; -} - -static void md_router_timeout(struct md_router *rtr); - -static int process_fail_neigh(struct ndmsg *ndm, struct rtattr **rta_tb) -{ - struct md_inet6_iface *iface; - struct md_router *rtr; - struct in6_addr *addr; - - if (!nud_expire_rtr) - return 0; - - iface = md_get_inet6_iface(&ifaces, ndm->ndm_ifindex); - - if (iface == NULL || iface->is_tunnel) - return 0; - - rtr = md_get_first_router(&iface->default_rtr); - - if (rtr == NULL) - return 0; - - addr = RTA_DATA(rta_tb[NDA_DST]); - - if (rtr_addr_chk(rtr,addr) || IN6_ARE_ADDR_EQUAL(&rtr->lladdr,addr)) - md_router_timeout(rtr); - - return 0; -} - -static int process_neigh(struct nlmsghdr *n) -{ - struct ndmsg *ndm; - struct rtattr *rta_tb[NDA_MAX+1]; - - if (n->nlmsg_len < NLMSG_LENGTH(sizeof(*ndm))) - return -1; - - ndm = NLMSG_DATA(n); - - if (ndm->ndm_family != AF_INET6 || !(ndm->ndm_state & NUD_FAILED)) - return 0; - - memset(rta_tb, 0, sizeof(rta_tb)); - parse_rtattr(rta_tb, NDA_MAX, NDA_RTA(ndm), - n->nlmsg_len - NLMSG_LENGTH(sizeof(*ndm))); - - pthread_mutex_lock(&iface_lock); - process_fail_neigh(ndm, rta_tb); - pthread_mutex_unlock(&iface_lock); - - return 0; -} - -static int process_nlmsg(__attribute__ ((unused)) const struct sockaddr_nl *who, - struct nlmsghdr *n, - __attribute__ ((unused)) void *arg) -{ - pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, NULL); - - switch (n->nlmsg_type) { - case RTM_NEWLINK: - case RTM_DELLINK: - /* interface or link, up or down */ - process_link(n); - break; - - case RTM_NEWNEIGH: - /* changes in reachability state of default router */ - process_neigh(n); - break; - - case RTM_NEWADDR: - case RTM_DELADDR: - /* new or deleted CoAs */ - process_addr(n); - break; - - default: - /* To do: listen to changes in default and prefix routes(?) */ - break; - } - - pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL); - return 0; -} - -static struct prefix_list_entry * -md_create_router_prefix(struct md_router *rtr, - struct nd_opt_prefix_info *pinfo) -{ - struct prefix_list_entry *p; - - if (!(p = malloc(sizeof(struct prefix_list_entry)))) - return NULL; - - p->timestamp = rtr->timestamp; - memcpy(&p->pinfo, pinfo, sizeof(struct nd_opt_prefix_info)); - - if (p->ple_flags & ND_OPT_PI_FLAG_RADDR) - rtr->raddr_cnt++; - - rtr->prefix_cnt++; - - MDBG3("creating new prefix %x:%x:%x:%x:%x:%x:%x:%x/%d\n", - NIP6ADDR(&p->ple_prefix), p->ple_plen); - - return p; -} - -static void md_check_home_link(struct md_inet6_iface *i, struct md_router *rtr) -{ - struct list_head *l; - int home_link = 0; - int ll_dad_unsafe = 0; - - /* Don't bother checking: MN can't be at home on a tunnel iface */ - if (!i->is_tunnel) { - list_for_each(l, &conf.home_addrs) { - struct home_addr_info *hai; - hai = list_entry(l, struct home_addr_info, list); - - if (mn_is_at_home(&rtr->prefixes, - &hai->home_prefix, - hai->home_plen)) { - home_link = 1; - ll_dad_unsafe |= hai->lladdr_comp; - } - } - } - - if (i->home_link != home_link) - md_reset_egress_forward(); - - i->home_link = home_link; - i->ll_dad_unsafe = ll_dad_unsafe; -} - -static struct md_router *md_create_router(struct md_inet6_iface *iface, - const struct in6_addr *saddr, - struct nd_router_advert *ra, int len) -{ - struct md_router *new; - int optlen = len - sizeof(struct nd_router_advert); - uint8_t *opt = (uint8_t *)(ra + 1); - - if (!(new = malloc(sizeof(struct md_router)))) - return NULL; - - memset(new, 0, sizeof(struct md_router)); - clock_gettime(CLOCK_REALTIME, &new->timestamp); - INIT_LIST_HEAD(&new->prefixes); - INIT_LIST_HEAD(&new->list); - INIT_LIST_HEAD(&new->tqe.list); - - while (optlen > 1) { - uint16_t olen = opt[1] << 3; - - if (olen > (unsigned int)optlen || olen == 0) - goto free_rtr; - - switch (opt[0]) { - struct nd_opt_prefix_info *pinfo; - struct prefix_list_entry *p; - struct nd_opt_mtu *mtu; - struct nd_opt_adv_interval *r; - - case ND_OPT_SOURCE_LINKADDR: - new->hwalen = ndisc_l2addr_from_opt(iface->type, - new->hwa, - &opt[2], olen-2); - - if (new->hwalen < 0) - goto free_rtr; - - break; - - case ND_OPT_PREFIX_INFORMATION: - if (olen < sizeof(struct nd_opt_prefix_info)) - goto free_rtr; - - pinfo = (struct nd_opt_prefix_info *)opt; - /* internal representation host byte order */ - pinfo->nd_opt_pi_valid_time = - ntohl(pinfo->nd_opt_pi_valid_time); - pinfo->nd_opt_pi_preferred_time = - ntohl(pinfo->nd_opt_pi_preferred_time); - - if (pinfo->nd_opt_pi_prefix_len > 128 || - !(p = md_create_router_prefix(new, pinfo))) - goto free_rtr; - - list_add_tail(&p->list, &new->prefixes); - break; - - case ND_OPT_MTU: - if (olen < sizeof(struct nd_opt_mtu)) - goto free_rtr; - - mtu = (struct nd_opt_mtu *)opt; - new->mtu = ntohl(mtu->nd_opt_mtu_mtu); - break; - - case ND_OPT_RTR_ADV_INTERVAL: - if (olen < sizeof(struct nd_opt_adv_interval)) - goto free_rtr; - - r = (struct nd_opt_adv_interval *) opt; - tssetmsec(new->adv_ival, - ntohl(r->nd_opt_adv_interval_ival)); - break; - } - - optlen -= olen; - opt += olen; - } - - if (new->prefix_cnt == 0) - goto free_rtr; - - new->iface = iface; - new->hoplimit = ra->nd_ra_curhoplimit; - new->ra_flags = ra->nd_ra_flags_reserved; - tssetsec(new->rtr_lifetime, ntohs(ra->nd_ra_router_lifetime)); - tssetmsec(new->reachable, ntohl(ra->nd_ra_reachable)); - tssetmsec(new->retransmit, ntohl(ra->nd_ra_retransmit)); - - if (tsisset(new->adv_ival)) { - struct timespec tmp; - tssetmsec(tmp, tstomsec(new->adv_ival) * adv_ivals_md_trigger); - new->lifetime = tsmin(tmp, new->rtr_lifetime); - } else - new->lifetime = new->rtr_lifetime; - - new->lladdr = *saddr; - new->ifindex = iface->ifindex; - - MDBG3("creating new router " - "%x:%x:%x:%x:%x:%x:%x:%x on interface %s (%d)\n", - NIP6ADDR(saddr), iface->name, iface->ifindex); - - return new; -free_rtr: - __md_free_router(new); - return NULL; -} - -int rtr_addr_chk(struct md_router *rtr, struct in6_addr *rtr_addr) -{ - if (rtr->raddr_cnt > 0) { - struct list_head *lp; - list_for_each(lp, &rtr->prefixes) { - struct prefix_list_entry *p; - p = list_entry(lp, struct prefix_list_entry, list); - - if (p->ple_flags & ND_OPT_PI_FLAG_RADDR && - IN6_ARE_ADDR_EQUAL(&p->ple_prefix, rtr_addr)) - return 1; - } - } - - return 0; -} - -static int rtr_addr_match(struct md_router *r1, struct md_router *r2) -{ - struct list_head *l1; - - list_for_each(l1, &r1->prefixes) { - struct prefix_list_entry *p1; - struct list_head *l2; - - p1 = list_entry(l1, struct prefix_list_entry, list); - - if (!(p1->ple_flags & ND_OPT_PI_FLAG_RADDR)) - continue; - - list_for_each(l2, &r2->prefixes) { - struct prefix_list_entry *p2; - - p2 = list_entry(l2, struct prefix_list_entry, list); - - if (p2->ple_flags & ND_OPT_PI_FLAG_RADDR && - p1->ple_plen == p2->ple_plen && - !IN6_ARE_ADDR_EQUAL(&p1->ple_prefix, - &p2->ple_prefix)) - return 0; - - } - } - return 1; -} - -static int md_router_cmp(struct md_router *new, struct md_router *old) -{ - /* Neither router nor link-local addresses match; different nodes */ - if (IN6_ARE_ADDR_EQUAL(&new->lladdr, &old->lladdr)) { - if (new->raddr_cnt > 0 || old->raddr_cnt > 0) - return !rtr_addr_match(new, old); - - return 0; - } - - return -1; -} - -static struct in6_addr *md_get_rtr_addr(struct md_router *rtr) -{ - if (rtr->raddr_cnt > 0) { - struct list_head *list; - list_for_each(list, &rtr->prefixes) { - struct prefix_list_entry *p; - p = list_entry(list, struct prefix_list_entry, list); - - if (p->ple_flags & ND_OPT_PI_FLAG_RADDR) - return &p->ple_prefix; - } - - } - - return &rtr->lladdr; -} - -static void md_router_timeout_probe(struct tq_elem *tqe); - -static void md_probe_router(struct md_router *rtr) -{ - if (md_is_link_up(rtr->iface)) { - struct in6_addr *rtr_addr = md_get_rtr_addr(rtr); - struct timespec expires; - - MDBG2("preform NUD for router " - "%x:%x:%x:%x:%x:%x:%x:%x on interface %s (%d)\n", - NIP6ADDR(&rtr->lladdr), rtr->iface->name, - rtr->iface->ifindex); - - rtr->probed = 1; - rtr->solicited_addr = *rtr_addr; - - neigh_add(rtr->ifindex, NUD_PROBE, NTF_ROUTER, - rtr_addr, rtr->hwalen > 0 ? rtr->hwa : NULL, - rtr->hwalen, 1); - - clock_gettime(CLOCK_REALTIME, &rtr->timestamp); - tssetmsec(rtr->lifetime, - tstomsec(rtr->iface->retransmit) * - conf.MnRouterProbes); - - if (tsisset(conf.MnRouterProbeTimeout_ts) && - tsbefore(rtr->lifetime, conf.MnRouterProbeTimeout_ts)) - rtr->lifetime = conf.MnRouterProbeTimeout_ts; - - tsadd(rtr->lifetime, rtr->timestamp, expires); - add_task_abs(&expires, &rtr->tqe, md_router_timeout_probe); - } -} - -static void md_update_backup_router_stats(struct md_router *rtr, - struct timespec *now, - struct timespec *tstamp) -{ - struct list_head *l; - list_for_each(l, &rtr->prefixes) { - struct prefix_list_entry *p; - p = list_entry(l, struct prefix_list_entry, list); - p->ple_valid_time = mpd_curr_lft(now, tstamp, - p->ple_valid_time); - p->ple_prefd_time = mpd_curr_lft(now, tstamp, - p->ple_prefd_time);; - } -} - -static void md_change_default_router(struct md_inet6_iface *iface, - struct md_router *new, - struct md_router *old); - -static int md_change_to_backup_router(struct md_inet6_iface *iface, - struct md_router *old) -{ - struct list_head *l, *n; - - list_for_each_safe(l, n, &iface->backup_rtrs) { - struct md_router *new = list_entry(l, struct md_router, list); - struct timespec expires; - - tsadd(new->timestamp, new->lifetime, expires); - - if (tsafter(old->timestamp, expires)) { - del_task(&new->tqe); - list_del(&new->list); - md_update_backup_router_stats(new, - &old->timestamp, - &new->timestamp); - md_change_default_router(iface, new, old); - return 0; - } - } - return -1; -} - -static void md_router_timeout(struct md_router *rtr) -{ - struct md_inet6_iface *iface = rtr->iface; - - MDBG2("expire router %x:%x:%x:%x:%x:%x:%x:%x " - "without NUD on interface %s (%d)\n", - NIP6ADDR(&rtr->lladdr), iface->name, - iface->ifindex); - - clock_gettime(CLOCK_REALTIME, &rtr->timestamp); - - if (rtr->probed) - neigh_del(rtr->ifindex, &rtr->solicited_addr); - - if (rtr->used) { - if (list_empty(&iface->backup_rtrs) || - md_change_to_backup_router(iface, rtr)) { - md_expire_router(iface, rtr, NULL); - __md_discover_router(rtr->iface); - __md_trigger_movement_event(ME_RTR_EXPIRED, 0, - rtr->iface, NULL); - } - } else - md_expire_router(iface, rtr, NULL); -} - -static void md_router_timeout_probe(struct tq_elem *tqe) -{ - pthread_mutex_lock(&iface_lock); - - if (!task_interrupted()) { - struct md_router *rtr = tq_data(tqe, struct md_router, tqe); - - if (rtr->probed) - md_router_timeout(rtr); - else - md_probe_router(rtr); - } - - pthread_mutex_unlock(&iface_lock); -} - -/* Some notes on route metric, interface preferences and router preferences: - * - * Below, we deal with the metric associated with default routes. As a - * remainder, on Linux, the higher the metric value on the route, the - * lower the priority of the route. Usual IPv6 routes installed by kernel - * from RA are given a priority of 1024. - * - * In UMIP, the *basis* we use for the default metric we use is 1023 - * (DEFAULT_ROUTE_METRIC as defined below). This value is not used - * directly for the route metric. Keep reading. - * - * In UMIP, interfaces are given preference values, used by the policy - * manager for the selection of interfaces. Preference values are - * in the range [1, POL_MN_IF_MIN_PREFERENCE] (i.e. 10). The higher the - * value, the lower the preference. Note that 0 means the interface - * will not be used. The preference value for a given interface is also - * used in the computation of the metric m for the default route associated - * with the interface: - * - * m = DEFAULT_ROUTE_METRIC - 3*(POL_MN_IF_MIN_PREFERENCE - ifpref) - * - * And because multiple routers may be available on a subnet associated - * with a given interface and may report specific router preference - * values, i.e. 'low' (3), 'medium' (0) or 'high' (1) (see Section 2.1 of - * RFC 4191), the router preference advertised by a router is also used - * in the computation of the *final* metric (hence the 3 above) for the - * default route via a given router: - * - * rtrpref is 'low' (-1) => m = m-1 - * rtrpref is 'high' (1) => m = m+1 - * rtrpref is sth else => m is untouched - */ - -#define DEFAULT_ROUTE_METRIC 1023 - -/* Return 1 if new router has a strictly lower default router preference - * value than old one. */ -static int md_router_prefer_old(struct md_router *old, struct md_router *new) -{ - uint8_t old_prf_flag = (old->ra_flags >> 3) & 0x03; - uint8_t new_prf_flag = (new->ra_flags >> 3) & 0x03; - int old_prf_val, new_prf_val; - - /* Map flags (low, medium, high) to -1, 0, 1. Reserved val (0b00) - * is mapped to medium, i.e. 0. */ - old_prf_val = ((old_prf_flag >> 1) ? -1 : 1) * (old_prf_flag & 0x1); - new_prf_val = ((new_prf_flag >> 1) ? -1 : 1) * (new_prf_flag & 0x1); - - return (new_prf_val < old_prf_val); -} - -/* Given the interface preference between 1 and POL_MN_IF_MIN_PREFERENCE - * and a router preference value (0 if none), the function returns a metric - * to use for the default route using that interface via that router. */ -static uint32_t md_router_compute_def_route_metric(uint16_t iface_pref, - uint8_t rtr_pref) -{ - uint32_t metric = DEFAULT_ROUTE_METRIC; - metric -= 3*(POL_MN_IF_MIN_PREFERENCE - iface_pref); - - if (iface_pref > POL_MN_IF_MIN_PREFERENCE || - iface_pref == 0) /* 0 should not be met */ - iface_pref = POL_MN_IF_MIN_PREFERENCE; - - /* "sub-modulate" with possible def rtr pref from RA. We - * simply consider it as a two-bit signed integer here */ - metric -= (((rtr_pref & 0x3) >> 1) ? -1 : 1) * (rtr_pref & 0x1); - - return metric; -} - -static void md_update_router_stats(struct md_router *rtr) -{ - struct list_head *list; - struct in6_addr coa; - uint8_t rtr_pref = (rtr->ra_flags >> 3) & 0x03; - uint32_t metric; - uint16_t iface_pref = POL_MN_IF_MIN_PREFERENCE; - struct md_inet6_iface *iface; - - neigh_add(rtr->ifindex, NUD_STALE, NTF_ROUTER, - &rtr->lladdr, rtr->hwa, rtr->hwalen, 1); - - /* Deal with interface preference as set by user ... */ - if ((iface = md_get_inet6_iface(&ifaces, rtr->ifindex)) == NULL) - MDBG2("Router we are inserting a route for is " - "reachable via an unknown interface (%d)\n", - rtr->ifindex); - else - iface_pref = iface->preference; - - metric = md_router_compute_def_route_metric(iface_pref, rtr_pref); - - MDBG2("adding default route via %x:%x:%x:%x:%x:%x:%x:%x with metric" - " %d\n", NIP6ADDR(&rtr->lladdr), metric); - - route_add(rtr->ifindex, RT_TABLE_MAIN, RTPROT_RA, - RTF_DEFAULT|RTF_ADDRCONF, metric, - &in6addr_any, 0, &in6addr_any, 0, &rtr->lladdr); - - list_for_each(list, &rtr->prefixes) { - struct prefix_list_entry *p; - p = list_entry(list, struct prefix_list_entry, list); - - /* pass prefix to kernel if it was included in the latest RA */ - if (!tsbefore(rtr->timestamp, p->timestamp) && - p->ple_prefd_time <= p->ple_valid_time) { - ipv6_addr_set(&coa, - (&p->ple_prefix)->s6_addr32[0], - (&p->ple_prefix)->s6_addr32[1], - (&(rtr->iface)->lladdr)->s6_addr32[2], - (&(rtr->iface)->lladdr)->s6_addr32[3]); - - MDBG("Adding CoA %x:%x:%x:%x:%x:%x:%x:%x on interface" - " (%d)\n", NIP6ADDR(&coa),rtr->ifindex); - - addr_add(&coa, p->ple_plen, 0, RT_SCOPE_UNIVERSE, - rtr->ifindex, p->ple_prefd_time, - p->ple_valid_time); - - if (p->ple_flags & ND_OPT_PI_FLAG_RADDR) - neigh_add(rtr->ifindex, NUD_STALE, - NTF_ROUTER, &p->ple_prefix, - rtr->hwa, rtr->hwalen, 1); - } - } - - if (rtr->hoplimit != 0) { - set_iface_proc_entry(PROC_SYS_IP6_CURHLIM, - rtr->iface->name, rtr->hoplimit); - } else { - set_iface_proc_entry(PROC_SYS_IP6_CURHLIM, - rtr->iface->name, DEFAULT_HOP_LIMIT); - } - - if (rtr->mtu >= IP6_MIN_MTU) - set_iface_proc_entry(PROC_SYS_IP6_LINKMTU, - rtr->iface->name, rtr->mtu); - - if (tsisset(rtr->reachable)) { - set_iface_proc_entry(PROC_SYS_IP6_BASEREACHTIME_MS, - rtr->iface->name, - tstomsec(rtr->reachable)); - rtr->iface->reachable = rtr->reachable; - } else { - set_iface_proc_entry(PROC_SYS_IP6_BASEREACHTIME_MS, - rtr->iface->name, - DEFAULT_REACHABLE_TIME); - tssetmsec(rtr->iface->reachable, DEFAULT_REACHABLE_TIME); - } - - if (tsisset(rtr->retransmit)) { - set_iface_proc_entry(PROC_SYS_IP6_RETRANSTIMER_MS, - rtr->iface->name, - tstomsec(rtr->retransmit)); - rtr->iface->retransmit = rtr->retransmit; - } else { - set_iface_proc_entry(PROC_SYS_IP6_RETRANSTIMER_MS, - rtr->iface->name, - DEFAULT_RETRANSMIT_TIMER); - tssetmsec(rtr->iface->retransmit, DEFAULT_RETRANSMIT_TIMER); - } -} - -static void md_prefix_rule_add(struct prefix_list_entry *p) -{ - struct in6_addr prefix; - ipv6_addr_prefix(&prefix, &p->ple_prefix, p->ple_plen); - rule_add(NULL, RT6_TABLE_MAIN, IP6_RULE_PRIO_MIP6_COA_OUT, - RTN_UNICAST, &prefix, p->ple_plen, - &in6addr_any, 0, 0); -} - -static void md_update_router(struct md_router *new, struct md_router *old) -{ - struct list_head *lnew, *n; - - MDBG2("updating router %x:%x:%x:%x:%x:%x:%x:%x on iface %s (%d)\n", - NIP6ADDR(&old->lladdr), old->iface->name, old->iface->ifindex); - - if (tsisset(old->lifetime)) - del_task(&old->tqe); - - old->timestamp = new->timestamp; - old->adv_ival = new->adv_ival; - old->rtr_lifetime = new->rtr_lifetime; - old->hoplimit = new->hoplimit; - old->ra_flags = new->ra_flags; - old->reachable = new->reachable; - old->retransmit = new->retransmit; - old->mtu = new->mtu; - old->lifetime = new->lifetime; - - list_for_each_safe(lnew, n, &new->prefixes) { - struct prefix_list_entry *pnew, *pold; - - pnew = list_entry(lnew, struct prefix_list_entry, list); - - if ((pold = prefix_list_get(&old->prefixes, - &pnew->ple_prefix, - pnew->ple_plen)) != NULL) { - pold->timestamp = pnew->timestamp; - pold->ple_flags = pnew->ple_flags; - pold->ple_valid_time = pnew->ple_valid_time; - pold->ple_prefd_time = pnew->ple_prefd_time; - } else { - if (old->used) - md_prefix_rule_add(pnew); - - list_del(lnew); - list_add_tail(lnew, &old->prefixes); - old->prefix_cnt++; - - if (pnew->ple_flags & ND_OPT_PI_FLAG_RADDR) - old->raddr_cnt++; - } - } - __md_free_router(new); - - if (old->used) - md_update_router_stats(old); - - if (tsisset(old->lifetime)) { - struct timespec expires; - tsadd(old->lifetime, old->timestamp, expires); - add_task_abs(&expires, &old->tqe, md_router_timeout_probe); - } -} - -static int md_block_rule_add(struct md_inet6_iface *iface) -{ - iface->iface_flags |= MD_BLOCK_TRAFFIC; - /* Allow DAD probes and RS messages */ - rule_add(NULL, RT6_TABLE_MAIN, - IP6_RULE_PRIO_MIP6_COA_OUT, RTN_UNICAST, - &in6addr_any, 128, &in6addr_any, 0, 0); - /* drop outgoing global traffic until DAD has been performed - on CoA to make routing and tunnel end-point updates atomic - during handoff */ - return rule_add(NULL, 0, - IP6_RULE_PRIO_MIP6_BLOCK_HOA, RTN_BLACKHOLE, - &in6addr_any, 0, &in6addr_any, 0, 0); -} - -static void md_add_default_router(struct md_inet6_iface *iface, - struct md_router *rtr) -{ - assert(list_empty(&iface->default_rtr)); - assert(rtr->used); - list_add(&rtr->list, &iface->default_rtr); - md_check_home_link(iface, rtr); -} - -static void md_change_default_router(struct md_inet6_iface *iface, - struct md_router *new, - struct md_router *old) -{ - struct timespec expires; - struct list_head *l; - int link_changed = 1; - - if (!tsisset(new->lifetime)) { - __md_free_router(new); - return; - } - - MDBG("add new router %x:%x:%x:%x:%x:%x:%x:%x on interface %s (%d)\n", - NIP6ADDR(&new->lladdr), new->iface->name, new->iface->ifindex); - - list_for_each(l, &new->prefixes) { - struct prefix_list_entry *p; - - p = list_entry(l, struct prefix_list_entry, list); - - if (old && prefix_list_find(&old->prefixes, - &p->ple_prefix, - p->ple_plen)) - link_changed = 0; - else - md_prefix_rule_add(p); - } - - if (old) - md_expire_router(iface, old, new); - - if (list_empty(&iface->coas) && - !(iface->iface_flags & MD_BLOCK_TRAFFIC)) { - md_block_rule_add(iface); - } - - new->used = 1; - md_add_default_router(iface, new); - __md_new_link(iface, link_changed); - - md_update_router_stats(new); - tsadd(new->lifetime, new->timestamp, expires); - add_task_abs(&expires, &new->tqe, md_router_timeout_probe); - - if (!list_empty(&iface->coas) && - !(iface->iface_flags & MD_LINK_LOCAL_DAD)) - __md_trigger_movement_event(ME_RTR_NEW, 0, iface, NULL); -} - -static void -md_check_expired_coas(struct md_inet6_iface *iface, struct md_router *rtr) -{ - struct list_head *clist, *n; - struct list_head *plist; - - list_for_each(plist, &rtr->prefixes) { - struct prefix_list_entry *p; - p = list_entry(plist, struct prefix_list_entry, list); - list_for_each_safe(clist, n, &iface->expired_coas) { - struct md_coa *coa; - coa = list_entry(clist, struct md_coa, list); - - if (ipv6_pfx_cmp(&p->ple_prefix, - &coa->addr, coa->plen)) - continue; - - MDBG2("CoA %x:%x:%x:%x:%x:%x:%x:%x still usable\n", - NIP6ADDR(&coa->addr)); - - list_del(&coa->list); - list_add_tail(&coa->list, &iface->coas); - } - } -} - - -static int -md_check_expired_routers(struct md_inet6_iface *iface, struct md_router *new) -{ - struct list_head *list, *n; - - list_for_each_safe(list, n, &iface->expired_rtrs) { - struct md_router *old; - old = list_entry(list, struct md_router, list); - - if (!md_router_cmp(new, old)) { - struct timespec diff; - long passed_ms, valid_ms; - - /* don't used previously unused expired md_routers - since they might contain outdated information */ - if (!old->used) - return 0; - - tssub(new->timestamp, old->timestamp, diff); - passed_ms = tstomsec(diff); - valid_ms = adv_ivals_dad_limit * - tstomsec(old->adv_ival); - - if (passed_ms >= valid_ms) - break; - - MDBG2("router %x:%x:%x:%x:%x:%x:%x:%x still usable\n", - NIP6ADDR(&old->lladdr)); - - md_update_router(new, old); - list_del(&old->list); - md_add_default_router(iface, old); - md_check_expired_coas(iface, old); - __md_new_link(iface, 0); - - if (!list_empty(&iface->coas) && - !(iface->iface_flags & MD_LINK_LOCAL_DAD)) - __md_trigger_movement_event(ME_RTR_BACK, 0, - iface, NULL); - - return 1; - } - - } - return 0; -} - -static int -md_check_backup_routers(struct md_inet6_iface *iface, struct md_router *new) -{ - struct list_head *list, *n; - - list_for_each_safe(list, n, &iface->backup_rtrs) { - struct md_router *old; - old = list_entry(list, struct md_router, list); - - if (!md_router_cmp(new, old)) { - md_update_router(new, old); - - if (!tsisset(old->lifetime)) { - md_expire_router(iface, old, NULL); - } - - return 1; - } - } - return 0; -} - -static void md_add_backup_router(struct md_inet6_iface *iface, - struct md_router *new) -{ - struct timespec expires; - - if (!tsisset(new->lifetime)) { - __md_free_router(new); - return; - } - - MDBG("add new backup router %x:%x:%x:%x:%x:%x:%x:%x on interface %s (%d)\n", - NIP6ADDR(&new->lladdr), new->iface->name, new->iface->ifindex); - - list_add(&new->list, &iface->backup_rtrs); - - tsadd(new->lifetime, new->timestamp, expires); - add_task_abs(&expires, &new->tqe, md_router_timeout_probe); -} - -static void -md_check_default_router(struct md_inet6_iface *iface, struct md_router *new) -{ - struct md_router *old; - - MDBG2("looking for existing routers on iface %s (%d)\n", - iface->name, iface->ifindex); - - if ((old = md_get_first_router(&iface->default_rtr)) == NULL) - goto change_def_rtr; - - /* We had a default router referenced on that interface (old). - * Now check if new one and old one are in fact the same. */ - if (md_router_cmp(new, old)) - goto new_router_found; - - md_update_router(new, old); /* new: freed in update */ - - if (!tsisset(old->lifetime)) { - md_expire_router(iface, old, NULL); - __md_discover_router(iface); - __md_trigger_movement_event(ME_RTR_EXPIRED, 0, iface, NULL); - } else { - __md_new_link(iface, 0); - __md_trigger_movement_event(ME_RTR_UPDATED, 0, iface, NULL); - } - - return; - -new_router_found: - - /* There are some cases for which we want to perform NUD against - * old router instead of directly switching to new: - * - if new has lower default router preference value - * - if asked by configuration to perform NUD before switching - * In that case, the new router becomes a backup router */ - if (md_router_prefer_old(old, new) || conf.MnRouterProbes > 0) { - md_probe_router(old); - md_add_backup_router(iface, new); - return; - } - -change_def_rtr: - md_change_default_router(iface, new, old); -} - -static void md_recv_na(const struct icmp6_hdr *ih, ssize_t len, - __attribute__ ((unused)) const struct in6_addr *saddr, - const struct in6_addr *daddr, int iif, int hoplimit) -{ - struct nd_neighbor_advert *na = (struct nd_neighbor_advert *)ih; - int optlen; - struct md_inet6_iface *iface; - struct md_router *rtr; - uint8_t *opt; - uint8_t hwa[L2ADDR_MAX_SIZE]; - int hwalen = 0; - - if (hoplimit < 255 || ih->icmp6_code != 0 || - len < 0 || (size_t)len < sizeof(struct nd_neighbor_advert) || - IN6_IS_ADDR_MULTICAST(&na->nd_na_target) || - (na->nd_na_flags_reserved & ND_NA_FLAG_SOLICITED && - IN6_IS_ADDR_MULTICAST(daddr))) - return; - - pthread_mutex_lock(&iface_lock); - - if ((iface = md_get_inet6_iface(&ifaces, iif)) == NULL || - (rtr = md_get_first_router(&iface->default_rtr)) == NULL || - rtr->probed == 0 || rtr->hwalen < 0 || - !IN6_ARE_ADDR_EQUAL(&rtr->solicited_addr, &na->nd_na_target)) { - goto out; - } - - optlen = len - sizeof(struct nd_neighbor_advert); - opt = (uint8_t *)(na + 1); - - MDBG2("received NA from %x:%x:%x:%x:%x:%x:%x:%x on iface %s (%d)\n", - NIP6ADDR(&rtr->lladdr), iface->name, iface->ifindex); - - - while (optlen > 1) { - int olen = opt[1] << 3; - - if (olen > optlen || olen == 0) - goto out; - - switch (opt[0]) { - case ND_OPT_TARGET_LINKADDR: - hwalen = ndisc_l2addr_from_opt(iface->type, hwa, - &opt[2], olen - 2); - - if (hwalen < 0 || hwalen != rtr->hwalen) - goto out; - - break; - } - - optlen -= olen; - opt += olen; - } - - if (na->nd_na_flags_reserved & ND_NA_FLAG_ROUTER && - (hwalen || !memcmp(hwa, &rtr->hwa, rtr->hwalen))) { - struct timespec expires; - clock_gettime(CLOCK_REALTIME, &rtr->timestamp); - - if (tsisset(rtr->lifetime)) - del_task(&rtr->tqe); - - rtr->lifetime = rtr->iface->reachable; - rtr->solicited_addr = in6addr_any; - rtr->probed = 0; - tsadd(rtr->lifetime, rtr->timestamp, expires); - add_task_abs(&expires, &rtr->tqe, md_router_timeout_probe); - - if (!list_empty(&iface->coas) && - !(iface->iface_flags & MD_LINK_LOCAL_DAD)) - __md_trigger_movement_event(ME_RTR_BACK, 0, - iface, NULL); - } else { - if (tsisset(rtr->lifetime)) - del_task(&rtr->tqe); - - md_router_timeout(rtr); - } - -out: - pthread_mutex_unlock(&iface_lock); -} - -static struct icmp6_handler md_na_handler = { - .recv = md_recv_na, -}; - -static void md_recv_ra(const struct icmp6_hdr *ih, ssize_t len, - const struct in6_addr *saddr, - const struct in6_addr *daddr, int iif, int hoplimit) -{ - struct nd_router_advert *ra = (struct nd_router_advert *)ih; - struct md_inet6_iface *iface; - struct md_router *new; - - /* validity checks */ - if (hoplimit < 255 || !IN6_IS_ADDR_LINKLOCAL(saddr) || - ih->icmp6_code != 0 || len < 0 || - (size_t)len < sizeof(struct nd_router_advert) || - !conf.pmgr.accept_ra(iif, saddr, daddr, ra)) - return; - - MDBG2("received RA from %x:%x:%x:%x:%x:%x:%x:%x on iface %d\n", - NIP6ADDR(saddr), iif); - - pthread_mutex_lock(&iface_lock); - - if ((iface = md_get_inet6_iface(&ifaces, iif)) != NULL && - (!iface->is_tunnel) && - (new = md_create_router(iface, saddr, ra, len)) != NULL) { - if (!md_check_expired_routers(iface, new) && - !md_check_backup_routers(iface, new)) - md_check_default_router(iface, new); - } - - pthread_mutex_unlock(&iface_lock); -} - -static struct icmp6_handler md_ra_handler = { - .recv = md_recv_ra, -}; - -struct rtnl_handle md_rth; - -static void *md_nl_listen(__attribute__ ((unused)) void *arg) -{ - pthread_dbg("thread started"); - rtnl_listen(&md_rth, process_nlmsg, NULL); - pthread_exit(NULL); -} - -static void iface_default_proc_entries_init(void) -{ - get_iface_proc_entry(PROC_SYS_IP6_AUTOCONF, - "default", &conf_default_autoconf); - get_iface_proc_entry(PROC_SYS_IP6_ACCEPT_RA, - "default", &conf_default_ra); - get_iface_proc_entry(PROC_SYS_IP6_ACCEPT_RA_DEFRTR, - "default", &conf_default_ra_defrtr); - get_iface_proc_entry(PROC_SYS_IP6_RTR_SOLICITS, - "default", &conf_default_rs); - get_iface_proc_entry(PROC_SYS_IP6_RTR_SOLICIT_INTERVAL, - "default", &conf_default_rs_ival); - - set_iface_proc_entry(PROC_SYS_IP6_AUTOCONF, - "default", conf_autoconf); - set_iface_proc_entry(PROC_SYS_IP6_ACCEPT_RA, - "default", conf_ra); - set_iface_proc_entry(PROC_SYS_IP6_ACCEPT_RA_DEFRTR, - "default", conf_ra_defrtr); - set_iface_proc_entry(PROC_SYS_IP6_RTR_SOLICITS, - "default", conf_rs); -} - -int md_init(void) -{ - int err; - pthread_mutexattr_t mattrs; - int val; - - pthread_mutexattr_init(&mattrs); - pthread_mutexattr_settype(&mattrs, PTHREAD_MUTEX_FAST_NP); - - if (pthread_mutex_init(&iface_lock, &mattrs)) - return -1; - - if ((err = rtnl_route_open(&md_rth, 0)) < 0) - return err; - - val = RTNLGRP_LINK; - - if (setsockopt(md_rth.fd, SOL_NETLINK, - NETLINK_ADD_MEMBERSHIP, &val, sizeof(val)) < 0) { - dbg("%d %s\n", __LINE__, strerror(errno)); - return -1; - } - - val = RTNLGRP_NEIGH; - - if (setsockopt(md_rth.fd, SOL_NETLINK, - NETLINK_ADD_MEMBERSHIP, &val, sizeof(val)) < 0) { - dbg("%d %s\n", __LINE__, strerror(errno)); - return -1; - } - - val = RTNLGRP_IPV6_IFADDR; - - if (setsockopt(md_rth.fd, SOL_NETLINK, - NETLINK_ADD_MEMBERSHIP, &val, sizeof(val)) < 0) { - dbg("%d %s\n", __LINE__, strerror(errno)); - return -1; - } - - val = RTNLGRP_IPV6_IFINFO; - - if (setsockopt(md_rth.fd, SOL_NETLINK, - NETLINK_ADD_MEMBERSHIP, &val, sizeof(val)) < 0) { - dbg("%d %s\n", __LINE__, strerror(errno)); - return -1; - } - - iface_default_proc_entries_init(); - return 0; -} - -int md_start(void) -{ - icmp6_handler_reg(ND_NEIGHBOR_ADVERT, &md_na_handler); - icmp6_handler_reg(ND_ROUTER_ADVERT, &md_ra_handler); - - if (pthread_create(&md_listener, NULL, md_nl_listen, NULL)) - return -1; - - inet6_ifaces_iterate(process_nlmsg, NULL); - return 0; -} - -void md_stop(void) -{ - rtnl_close(&md_rth); - icmp6_handler_dereg(ND_ROUTER_ADVERT, &md_ra_handler); - icmp6_handler_dereg(ND_NEIGHBOR_ADVERT, &md_na_handler); - pthread_cancel(md_listener); - pthread_join(md_listener, NULL); -} - -static void iface_default_proc_entries_cleanup(void) -{ - set_iface_proc_entry(PROC_SYS_IP6_AUTOCONF, - "default", conf_default_autoconf); - set_iface_proc_entry(PROC_SYS_IP6_ACCEPT_RA, - "default", conf_default_ra); - set_iface_proc_entry(PROC_SYS_IP6_ACCEPT_RA_DEFRTR, - "default", conf_default_ra_defrtr); - set_iface_proc_entry(PROC_SYS_IP6_RTR_SOLICITS, - "default", conf_default_rs); -} - -static void iface_proc_entries_cleanup(struct md_inet6_iface *iface) -{ - set_iface_proc_entry(PROC_SYS_IP6_FORWARDING, iface->name, - iface->devconf[DEVCONF_FORWARDING]); - set_iface_proc_entry(PROC_SYS_IP6_AUTOCONF, iface->name, - iface->devconf[DEVCONF_AUTOCONF]); - set_iface_proc_entry(PROC_SYS_IP6_ACCEPT_RA, iface->name, - iface->devconf[DEVCONF_ACCEPT_RA]); - set_iface_proc_entry(PROC_SYS_IP6_ACCEPT_RA_DEFRTR, iface->name, - iface->devconf[DEVCONF_ACCEPT_RA_DEFRTR]); - set_iface_proc_entry(PROC_SYS_IP6_RTR_SOLICITS, iface->name, - iface->devconf[DEVCONF_RTR_SOLICITS]); -} - -void md_cleanup(void) -{ - struct list_head *l, *n; - - pthread_mutex_lock(&iface_lock); - iface_default_proc_entries_cleanup(); - list_for_each_safe(l, n, &ifaces) { - struct md_inet6_iface *iface; - iface = list_entry(l, struct md_inet6_iface, list); - md_expire_inet6_iface(iface); - iface_proc_entries_cleanup(iface); - - if (!iface->is_tunnel) - ndisc_send_rs(iface->ifindex, &in6addr_all_routers_mc, - NULL, 0); - - md_free_inet6_iface(iface); - } - pthread_mutex_unlock(&iface_lock); - return; -} diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/src/movement.h b/openair3/PMIPv6/pmipv6-daemon-umip/src/movement.h deleted file mode 100755 index 0d9ca405f2..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/src/movement.h +++ /dev/null @@ -1,205 +0,0 @@ -/* $Id: movement.h 1.49 06/05/19 01:51:45+03:00 vnuorval@tcs.hut.fi $ */ - -#ifndef __MOVEMENT_H__ -#define __MOVEMENT_H__ 1 - -#include -#include - -#include "list.h" -#include "tqueue.h" -#include "ndisc.h" /* for L2ADDR_MAX_SIZE*/ - -#define IP6_MIN_MTU 1280 - -#define DEFAULT_HOP_LIMIT 64 - -#define DEFAULT_RETRANSMIT_TIMER 1 * TIME_SEC_MSEC -#define DEFAULT_REACHABLE_TIME 30 * TIME_SEC_MSEC - -struct md_router { - struct list_head list; - struct in6_addr lladdr; - struct timespec rtr_lifetime; - struct timespec reachable; - struct timespec retransmit; - struct timespec adv_ival; - struct timespec lifetime; - struct md_inet6_iface *iface; - int used; - uint8_t hoplimit; - uint8_t ra_flags; - short hwalen; - uint8_t hwa[L2ADDR_MAX_SIZE]; - uint32_t mtu; - int ifindex; - int prefix_cnt; - int raddr_cnt; - int probed; - struct in6_addr solicited_addr; - struct timespec timestamp; - struct tq_elem tqe; - struct list_head prefixes; -}; - -struct md_coa { - struct list_head list; - uint8_t flags; - uint8_t plen; - uint8_t scope; - int ifindex; - int if_is_tunnel; - struct in6_addr addr; - struct timespec timestamp; - struct timespec valid_time; - struct timespec preferred_time; -}; - -/* index values for the variables in ipv6_devconf */ - -/* - This is stupid! - To do: have these enums moved somewhere else than -*/ - -enum { - DEVCONF_FORWARDING = 0, - DEVCONF_HOPLIMIT, - DEVCONF_MTU6, - DEVCONF_ACCEPT_RA, - DEVCONF_ACCEPT_RA_DEFRTR, - DEVCONF_ACCEPT_RA_PINFO, - DEVCONF_ACCEPT_REDIRECTS, - DEVCONF_AUTOCONF, - DEVCONF_DAD_TRANSMITS, - DEVCONF_RTR_SOLICITS, - DEVCONF_RTR_SOLICIT_INTERVAL, - DEVCONF_RTR_SOLICIT_DELAY, - DEVCONF_USE_TEMPADDR, - DEVCONF_TEMP_VALID_LFT, - DEVCONF_TEMP_PREFERED_LFT, - DEVCONF_REGEN_MAX_RETRY, - DEVCONF_MAX_DESYNC_FACTOR, - DEVCONF_MAX_ADDRESSES, - DEVCONF_FORCE_MLD_VERSION, - DEVCONF_MAX -}; - -#define MD_LINK_LOCAL_DAD 0x1 -#define MD_BLOCK_TRAFFIC 0x2 - -struct md_inet6_iface { - struct list_head list; - int ifindex; - char name[IF_NAMESIZE]; - unsigned int preference; - unsigned int link_flags; - int home_link; - int ll_dad_unsafe; - int is_tunnel; - unsigned short type; - short hwalen; - uint8_t hwa[16]; - int32_t devconf[DEVCONF_MAX]; - int32_t app_solicit; - struct timespec reachable; - struct timespec retransmit; - int router_solicits; - struct in6_addr lladdr; - unsigned int iface_flags; - struct list_head default_rtr; - struct list_head backup_rtrs; - struct list_head expired_rtrs; - struct list_head coas; - struct list_head expired_coas; - struct tq_elem tqe; -}; - -enum { - MD_STRATEGY_EAGER, - MD_STRATEGY_LAZY -}; - -enum { - ME_DHAAD, - ME_IFACE_UP, - ME_IFACE_DOWN, - ME_LINK_UP, - ME_LINK_DOWN, - ME_RTR_NEW, - ME_RTR_EXPIRED, - ME_RTR_BACK, - ME_RTR_UPDATED, - ME_COA_NEW, - ME_COA_EXPIRED, - ME_COA_LFT_DEC, - ME_COA_LFT_INC, -}; - - -struct movement_event { - int md_strategy; - int event_type; - int data; - struct list_head *iface_list; - struct md_inet6_iface *iface; - struct md_coa *coa; -}; - - -static inline struct md_inet6_iface * -md_get_inet6_iface(struct list_head *iface_list, int ifindex) -{ - struct list_head *list; - list_for_each(list, iface_list) { - struct md_inet6_iface *iface; - iface = list_entry(list, struct md_inet6_iface, list); - - if (iface->ifindex == ifindex) - return iface; - } - return NULL; -} - -static inline struct md_router *md_get_first_router(struct list_head *rtr_list) -{ - if (!list_empty(rtr_list)) - return list_entry(rtr_list->next, struct md_router, list); - - return NULL; -} - -static inline struct md_coa *md_get_coa(struct list_head *coa_list, - const struct in6_addr *coaddr) -{ - struct list_head *list; - struct md_coa *coa = NULL; - - list_for_each(list, coa_list) { - coa = list_entry(list, struct md_coa, list); - - if (coaddr == NULL || IN6_ARE_ADDR_EQUAL(&coa->addr, coaddr)) - return coa; - } - return NULL; -} - -int md_init(void); -void md_cleanup(void); - -int md_start(void); -void md_stop(void); - -void md_trigger_movement_event(int event_type, int data, int ifindex); - -struct icmp6_hdr; - -static inline int md_is_link_up(struct md_inet6_iface *iface) -{ - return (iface->link_flags & IFF_UP && - iface->link_flags & IFF_RUNNING); -} - -int rtr_addr_chk(struct md_router *rtr, struct in6_addr *rtr_addr); - -#endif diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/src/mpdisc_ha.c b/openair3/PMIPv6/pmipv6-daemon-umip/src/mpdisc_ha.c deleted file mode 100755 index 1fe0dd3c2e..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/src/mpdisc_ha.c +++ /dev/null @@ -1,623 +0,0 @@ -/* - * $Id: mpdisc_ha.c 1.21 06/05/07 21:52:43+03:00 anttit@tcs.hut.fi $ - * - * This file is part of the MIPL Mobile IPv6 for Linux. - * - * Authors: - * Ville Nuorvala , - * Jaakko Laine - * - * Copyright 2003-2005 Go-Core Project - * Copyright 2003-2006 Helsinki University of Technology - * - * MIPL Mobile IPv6 for Linux is free software; you can redistribute - * it and/or modify it under the terms of the GNU General Public - * License as published by the Free Software Foundation; version 2 of - * the License. - * - * MIPL Mobile IPv6 for Linux is distributed in the hope that it will - * be useful, but WITHOUT ANY WARRANTY; without even the implied - * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with MIPL Mobile IPv6 for Linux; if not, write to the Free - * Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - * 02111-1307 USA. - */ - -#ifdef HAVE_CONFIG_H -#include -#endif -#include -#include -#include -#include -#include -#include - -#include "debug.h" -#include "mipv6.h" -#include "util.h" -#include "icmp6.h" -#include "mpdisc_ha.h" -#include "list.h" -#include "conf.h" -#include "prefix.h" -#include "ha.h" -#include "ndisc.h" -#include "hash.h" -#include "statistics.h" - -struct mpa_entry { - struct in6_addr ha; - struct in6_addr hoa; - struct timespec delay; - struct timespec lastsent; - struct tq_elem tqe; - int retries; -}; - -#define MPA_BUCKETS 32 -static struct hash mpa_hash; -static pthread_mutex_t mpa_lock; - -static pthread_rwlock_t prefix_lock; -static volatile uint16_t mpa_id; - -static inline struct mpa_entry *mpa_get(const struct in6_addr *ha, - const struct in6_addr *hoa) - -{ - return hash_get(&mpa_hash, ha, hoa); -} - -/* HA functions */ - -#ifdef ENABLE_VT - -int mpd_poll_mpa(const struct in6_addr *ha, - const struct in6_addr *hoa, - struct timespec *delay, - struct timespec *lastsent) -{ - struct mpa_entry *e; - int ret = -ENOENT; - pthread_mutex_lock(&mpa_lock); - e = mpa_get(ha, hoa); - - if (e != NULL) { - *delay = e->delay; - *lastsent = e->lastsent; - ret = e->retries; - } - - pthread_mutex_unlock(&mpa_lock); - return ret; -} - -/** - * mpd_plist_iterate - apply function to every prefix list entry - * @func: function to apply - * @arg: extra data for @func - **/ - -void mpd_plist_iterate(struct ha_interface *iface, - int (* func)(int, void *, void *), void *arg) -{ - struct list_head *lp; - - list_for_each(lp, &iface->prefix_list) { - struct prefix_list_entry *ple; - int ret; - - ple = list_entry(lp, struct prefix_list_entry, list); - - pthread_rwlock_rdlock(&prefix_lock); - ret = func(iface->ifindex, ple, arg); - pthread_rwlock_unlock(&prefix_lock); - - if (ret) - break; - } -} -#endif - -static int mpd_get_mpa_prefixes(struct ha_interface *iface, struct iovec *iov) -{ - struct list_head *pos; - struct timespec now; - int buf_size; - struct nd_opt_prefix_info *p; - int n; - int expired = -1; - - clock_gettime(CLOCK_REALTIME, &now); - - pthread_rwlock_rdlock(&prefix_lock); - - buf_size = iface->prefix_count * sizeof(struct nd_opt_prefix_info); - - p = malloc(buf_size); - - if (p == NULL) - goto out; - - n = 0; - expired = 0; - list_for_each(pos, &iface->prefix_list) { - struct prefix_list_entry *entry; - - entry = list_entry(pos, struct prefix_list_entry, list); - - memcpy(&p[n], &entry->pinfo, - sizeof(struct nd_opt_prefix_info)); - - p[n].nd_opt_pi_valid_time = - htonl(mpd_curr_lft(&now, &entry->timestamp, - entry->ple_valid_time)); - - if (!p[n].nd_opt_pi_valid_time) - expired++; - - p[n].nd_opt_pi_preferred_time = - htonl(mpd_curr_lft(&now, &entry->timestamp, - entry->ple_prefd_time)); - n++; - } - iov[1].iov_base = p; - iov[1].iov_len = buf_size; -out: - pthread_rwlock_unlock(&prefix_lock); - return expired; -} - -static void mpd_send_mpa(struct mpa_entry *e, uint16_t id) -{ - struct timespec now; - struct ha_interface *iface; - struct mip_prefix_advert *mpa; - struct iovec iov[2]; - int expired; - - clock_gettime(CLOCK_REALTIME, &now); - - if (tsisset(e->lastsent)) { - struct timespec diff; - /* rate limit */ - tssub(now, e->lastsent, diff); - - if (diff.tv_sec == 0) - return; - } - - iface = ha_get_if_by_addr(&e->ha); - - if (iface == NULL) - return; - - mpa = icmp6_create(iov, MIP_PREFIX_ADVERT, 0); - - if (mpa == NULL) - return; - - mpa->mip_pa_id = id; - mpa->mip_pa_flags_reserved = iface->mpa_flags; - - if ((expired = mpd_get_mpa_prefixes(iface, iov)) > 0) - mpd_del_expired_pinfos(iface); - else if (expired < 0) { - free_iov_data(iov, 1); - return; - } - - icmp6_send(iface->ifindex, 0, &e->ha, &e->hoa, iov, 2); - free_iov_data(iov, 2); - e->lastsent = now; - statistics_inc(&mipl_stat, MIPL_STATISTICS_OUT_MPA); -} - -void mpd_cancel_mpa(const struct in6_addr *ha, const struct in6_addr *hoa) -{ - struct mpa_entry *e; - pthread_mutex_lock(&mpa_lock); - e = mpa_get(ha, hoa); - - if (e != NULL) { - hash_delete(&mpa_hash, &e->ha, &e->hoa); - - if (tsisset(e->delay)) - del_task(&e->tqe); - - free(e); - } - - pthread_mutex_unlock(&mpa_lock); -} - -int mpd_start_mpa(const struct in6_addr *ha, const struct in6_addr *hoa) -{ - struct mpa_entry *e; - int err = -ENOMEM; - - if (!conf.SendUnsolMobPfxAdvs) - return 0; - - pthread_mutex_lock(&mpa_lock); - e = mpa_get(ha, hoa); - - if (e == NULL) { - e = malloc(sizeof(struct mpa_entry)); - - if (e == NULL) - goto out; - - memset(e, 0, sizeof(struct mpa_entry)); - e->ha = *ha; - e->hoa = *hoa; - - if (hash_add(&mpa_hash, e, &e->ha, &e->hoa)) { - free(e); - goto out; - } - - INIT_LIST_HEAD(&e->tqe.list); - } - - err = 0; -out: - pthread_mutex_unlock(&mpa_lock); - return err; - -} - -static void mpd_recv_mps(const struct icmp6_hdr *ih, - __attribute__ ((unused)) ssize_t len, - const struct in6_addr *src, - const struct in6_addr *dst, - __attribute__ ((unused)) int iif, - __attribute__ ((unused)) int hoplimit) -{ - struct mpa_entry *e; - - if (!conf.SendMobPfxAdvs) - return; - - pthread_mutex_lock(&mpa_lock); - e = mpa_get(dst, src); - - if (e != NULL) { - if (tsisset(e->delay)) - del_task(&e->tqe); - - mpd_send_mpa(e, ih->icmp6_id); - } - - pthread_mutex_unlock(&mpa_lock); -} - -static struct icmp6_handler mpd_mps_handler = { - .recv = mpd_recv_mps, -}; - -int mpd_prefix_check(struct in6_addr *dst, - struct in6_addr *src, - struct timespec *lft, - int *ifindex, - int dad) -{ - struct ha_interface *i; - struct prefix_list_entry *p; - int res = -ENODEV; - - i = ha_get_if_by_addr(dst); - - if (i != NULL) { - int expired = 0; - res = -ENOENT; - pthread_rwlock_rdlock(&prefix_lock); - p = prefix_list_get(&i->prefix_list, src, 0); - - if (p != NULL) { - unsigned long valid, preferred; - struct timespec now; - clock_gettime(CLOCK_REALTIME, &now); - valid = umin(mpd_curr_lft(&now, &p->timestamp, - p->ple_valid_time), - MAX_BINDING_LIFETIME + 1); - preferred = umin(mpd_curr_lft(&now, &p->timestamp, - p->ple_prefd_time), - MAX_BINDING_LIFETIME + 1); - - if (!valid) - expired = 1; - else if (dad) { - /* decrease DAD timeout */ - valid -= DAD_TIMEOUT; - } - - if (preferred <= (unsigned long)lft->tv_sec) - res = IP6_MH_BAS_PRFX_DISCOV; - else - res = IP6_MH_BAS_ACCEPTED; - - if (valid < (unsigned long)lft->tv_sec) - tssetsec(*lft, - umin(valid, MAX_BINDING_LIFETIME)); - - *ifindex = i->ifindex; - } - - pthread_rwlock_unlock(&prefix_lock); - - if (expired) - mpd_del_expired_pinfos(i); - } - - return res; -} - -static void mpd_resend_unsol_mpa(struct tq_elem *tqe) -{ - pthread_mutex_lock(&mpa_lock); - - if (!task_interrupted()) { - struct mpa_entry *e = tq_data(tqe, struct mpa_entry, tqe); - mpd_send_mpa(e, mpa_id++); - - if (++e->retries < PREFIX_ADV_RETRIES) { - struct timespec expires; - tsadd(e->delay, e->delay, e->delay); - tsadd(e->lastsent,e->delay, expires); - add_task_abs(&expires, &e->tqe, mpd_resend_unsol_mpa); - } else { - tsclear(e->delay); - e->retries = 0; - } - } - - pthread_mutex_unlock(&mpa_lock); -} - -static inline void mpd_rand_adv_delay(struct timespec *delay, - uint32_t preferred_time) -{ - unsigned long max_schedule_delay; - unsigned long rand_adv_delay; - - max_schedule_delay = min(conf.MaxMobPfxAdvInterval, preferred_time); - rand_adv_delay = conf.MinMobPfxAdvInterval; - - if (max_schedule_delay != conf.MinMobPfxAdvInterval) - rand_adv_delay += random() % - labs((long)max_schedule_delay - - (long)conf.MinMobPfxAdvInterval); - - tssetsec(*delay, rand_adv_delay); -} - -static void mpd_send_unsol_mpa(struct tq_elem *tqe) -{ - pthread_mutex_lock(&mpa_lock); - - if (!task_interrupted()) { - struct mpa_entry *e = tq_data(tqe, struct mpa_entry, tqe); - struct timespec expires; - mpd_send_mpa(e, mpa_id++); - e->delay = PREFIX_ADV_TIMEOUT_TS; - tsadd(e->lastsent, e->delay, expires); - add_task_abs(&expires, &e->tqe, mpd_resend_unsol_mpa); - } - - pthread_mutex_unlock(&mpa_lock); -} - -static void mpd_schedule_unsol_mpa_send(struct mpa_entry *e, - struct prefix_list_entry *ple) -{ - struct timespec tmp; - - if (!conf.SendUnsolMobPfxAdvs) - return; - - if (ipv6_pfx_cmp(&e->hoa, &ple->ple_prefix, ple->ple_plen) && - tsisset(e->lastsent)) { - struct timespec diff; - tssub(ple->timestamp, e->lastsent, diff); - - if ((unsigned long)diff.tv_sec < conf.MaxMobPfxAdvInterval) - return; - } - - mpd_rand_adv_delay(&tmp, ple->ple_prefd_time); - - if (!tsisset(e->delay) || tsbefore(e->delay, tmp)) - e->delay = tmp; - - tsadd(ple->timestamp, e->delay, tmp); - add_task_abs(&tmp, &e->tqe, mpd_send_unsol_mpa); -} - -static int mpd_prefix_changed(void *ve, void *vple) -{ - struct mpa_entry *e = ve; - struct prefix_list_entry *ple = vple; - mpd_schedule_unsol_mpa_send(e, ple); - return 0; -} - -void mpd_handle_mpa_flags(struct ha_interface *iface, uint8_t ra_flags) -{ - pthread_rwlock_wrlock(&prefix_lock); - iface->mpa_flags = ((ra_flags & ND_RA_FLAG_MANAGED ? - MIP_PA_FLAG_MANAGED : 0) | - (ra_flags & ND_RA_FLAG_OTHER ? - MIP_PA_FLAG_OTHER : 0)); - pthread_rwlock_unlock(&prefix_lock); - -} - -static int mpa_iterate(int (* func)(void *, void *), void *arg) -{ - int err; - pthread_mutex_lock(&mpa_lock); - err = hash_iterate(&mpa_hash, func, arg); - pthread_mutex_unlock(&mpa_lock); - return err; -} - - -#define MPD_NO_CHANGE 0 -#define MPD_PREFIX_MODIFIED 1 -#define MPD_NEW_PREFIX 2 - -int mpd_handle_pinfo(struct ha_interface *iface, struct nd_opt_prefix_info *p) -{ - int status = MPD_NEW_PREFIX; - struct prefix_list_entry *e, tmp; - struct timespec now; - - - clock_gettime(CLOCK_REALTIME, &now); - - pthread_rwlock_wrlock(&prefix_lock); - - /* ignore the router address in the prefix */ - e = prefix_list_get(&iface->prefix_list, - &p->nd_opt_pi_prefix, - p->nd_opt_pi_prefix_len); - - if (e != NULL) { - struct timespec tmp; - unsigned long diff; - uint8_t cf; - int cv; - int cp; - int expired = 0; - - status = MPD_NO_CHANGE; - - /* check prefix flags, ignore R bit */ - cf = ((p->nd_opt_pi_flags_reserved ^e->ple_flags) & - (ND_OPT_PI_FLAG_ONLINK|ND_OPT_PI_FLAG_AUTO)); - - /* the lifetime decreases real time in the MN, so the - HA needs to renew the prefix also when the advertised - lifetime stays unchanged */ - - /* if RA interval is in milliseconds, don't update entry - before a noticeable change has occurred in the prefix */ - - /* todo(?): allow some clock drift */ - - tssub(now, e->timestamp, tmp); - diff = tmp.tv_sec; - - if (e->ple_valid_time == 0 && p->nd_opt_pi_valid_time == 0) { - expired = 1; - } - - /* check valid and preferred lifetimes, also take infinite - lifetimes into account */ - - cv = ((!prefix_lft_infinite(p->nd_opt_pi_valid_time) || - !prefix_lft_infinite(e->ple_valid_time)) && - p->nd_opt_pi_valid_time + diff != e->ple_valid_time); - - cp = ((!prefix_lft_infinite(p->nd_opt_pi_preferred_time) || - !prefix_lft_infinite(e->ple_prefd_time)) && - p->nd_opt_pi_preferred_time + diff != e->ple_prefd_time); - - if (cf || cv || cp) { - e->timestamp = now; - memcpy(&e->pinfo, p, - sizeof(struct nd_opt_prefix_info)); - - if (!expired) - status = MPD_PREFIX_MODIFIED; - } - } else { - e = malloc(sizeof(struct prefix_list_entry)); - - if (!e) { - pthread_rwlock_unlock(&prefix_lock); - return -1; - } - - memcpy(&e->pinfo, p, sizeof(struct nd_opt_prefix_info)); - list_add(&e->list, &iface->prefix_list); - iface->prefix_count++; - e->timestamp = now; - } - - memcpy(&tmp, e, sizeof(struct prefix_list_entry)); - pthread_rwlock_unlock(&prefix_lock); - - if (status != MPD_NO_CHANGE) { - mpa_iterate(mpd_prefix_changed, &tmp); - } - - return 0; -} - -void mpd_del_expired_pinfos(struct ha_interface *i) -{ - struct list_head *l, *n; - struct timespec now; - - pthread_rwlock_wrlock(&prefix_lock); - - clock_gettime(CLOCK_REALTIME, &now); - - list_for_each_safe(l, n, &i->prefix_list) { - struct prefix_list_entry *e; - struct timespec tmp; - unsigned long diff; - - e = list_entry(l, struct prefix_list_entry, list); - - tssub(now, e->timestamp, tmp); - diff = tmp.tv_sec; - - if (e->ple_valid_time == 0) { - if (diff > 2 * conf.MaxMobPfxAdvInterval) { - /* All the MNs should have received a MPA, - so it's probably safe to remove this - entry. */ - list_del(&e->list); - free(e); - i->prefix_count--; - } - } else if(!prefix_lft_infinite(e->ple_valid_time) && - diff >= e->ple_valid_time) { - /* time to expire this entry */ - tsinc(e->timestamp, e->ple_valid_time, 0); - e->ple_valid_time = 0; - e->ple_prefd_time = 0; - } - } - pthread_rwlock_unlock(&prefix_lock); -} - -int mpd_ha_init(void) -{ - pthread_mutexattr_t mattrs; - pthread_mutexattr_init(&mattrs); - pthread_mutexattr_settype(&mattrs, PTHREAD_MUTEX_FAST_NP); - - if (pthread_mutex_init(&mpa_lock, &mattrs) || - pthread_rwlock_init(&prefix_lock, NULL) || - hash_init(&mpa_hash, DOUBLE_ADDR, MPA_BUCKETS) < 0) - return -1; - - icmp6_handler_reg(MIP_PREFIX_SOLICIT, &mpd_mps_handler); - return 0; -} - -void mpd_ha_cleanup(void) -{ - icmp6_handler_dereg(MIP_PREFIX_SOLICIT, &mpd_mps_handler); - pthread_mutex_lock(&mpa_lock); - hash_cleanup(&mpa_hash); - pthread_mutex_unlock(&mpa_lock); -} diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/src/mpdisc_ha.h b/openair3/PMIPv6/pmipv6-daemon-umip/src/mpdisc_ha.h deleted file mode 100755 index d48a85e9ec..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/src/mpdisc_ha.h +++ /dev/null @@ -1,39 +0,0 @@ -/* $Id: mpdisc_ha.h 1.5 06/03/06 20:43:55+02:00 vnuorval@tcs.hut.fi $ */ - -#ifndef __MPDISC_HA_H__ -#define __MPDISC_HA_H__ 1 - -#include - -struct ha_interface; - -#ifdef ENABLE_VT -int mpd_poll_mpa(const struct in6_addr *ha, - const struct in6_addr *hoa, - struct timespec *delay, - struct timespec *lastsent); - -void mpd_plist_iterate(struct ha_interface *iface, - int (* func)(int, void *, void *), void *arg); -#endif - -int mpd_prefix_check(struct in6_addr *dst, - struct in6_addr *src, - struct timespec *lft, - int *ifindex, - int dad); - -void mpd_handle_mpa_flags(struct ha_interface *iface, uint8_t ra_flags); - -int mpd_handle_pinfo(struct ha_interface *iface, - struct nd_opt_prefix_info *pinfo); - -void mpd_del_expired_pinfos(struct ha_interface *i); - -void mpd_cancel_mpa(const struct in6_addr *ha, const struct in6_addr *hoa); -int mpd_start_mpa(const struct in6_addr *ha, const struct in6_addr *hoa); - -int mpd_ha_init(void); -void mpd_ha_cleanup(void); - -#endif diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/src/mpdisc_mn.c b/openair3/PMIPv6/pmipv6-daemon-umip/src/mpdisc_mn.c deleted file mode 100755 index 55bae7399b..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/src/mpdisc_mn.c +++ /dev/null @@ -1,312 +0,0 @@ -/* - * $Id: mpdisc_mn.c 1.20 06/05/07 21:52:43+03:00 anttit@tcs.hut.fi $ - * - * This file is part of the MIPL Mobile IPv6 for Linux. - * - * Authors: - * Ville Nuorvala , - * Jaakko Laine - * - * Copyright 2003-2005 Go-Core Project - * Copyright 2003-2006 Helsinki University of Technology - * - * MIPL Mobile IPv6 for Linux is free software; you can redistribute - * it and/or modify it under the terms of the GNU General Public - * License as published by the Free Software Foundation; version 2 of - * the License. - * - * MIPL Mobile IPv6 for Linux is distributed in the hope that it will - * be useful, but WITHOUT ANY WARRANTY; without even the implied - * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with MIPL Mobile IPv6 for Linux; if not, write to the Free - * Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - * 02111-1307 USA. - */ - -#ifdef HAVE_CONFIG_H -#include -#endif -#include -#include -#include -#include -#include -#include -#include - -#include "debug.h" -#include "mipv6.h" -#include "util.h" -#include "icmp6.h" -#include "mpdisc_mn.h" -#include "list.h" -#include "conf.h" -#include "prefix.h" -#include "mn.h" -#include "hash.h" -#include "statistics.h" - -struct mps_entry { - struct in6_addr hoa; - struct in6_addr ha; - struct timespec delay; - struct timespec lastsent; - struct tq_elem tqe; - uint16_t id; -}; - - -#define MPS_BUCKETS 32 -static struct hash mps_hash; -static pthread_mutex_t mps_lock; - -static inline struct mps_entry *mps_get(const struct in6_addr *hoa, - const struct in6_addr *ha) -{ - return hash_get(&mps_hash, hoa, ha); -} - -#ifdef ENABLE_VT -int mpd_poll_mps(const struct in6_addr *hoa, - const struct in6_addr *ha, - struct timespec *delay, - struct timespec *lastsent) -{ - struct mps_entry *e; - int err = -ENOENT; - pthread_mutex_lock(&mps_lock); - e = mps_get(hoa, ha); - - if (e != NULL) { - *delay = e->delay; - *lastsent = e->lastsent; - err = 0; - } - - pthread_mutex_unlock(&mps_lock); - return err; -} -#endif -/* MN functions */ - -static int mpd_send_mps(struct mps_entry *e) -{ - struct iovec iov; - struct mip_prefix_solicit *ih; - - ih = icmp6_create(&iov, MIP_PREFIX_SOLICIT, 0); - - if (ih == NULL) - return -ENOMEM; - - /* no need to worry about network byte order since - mip_ps_id only serves as an identifier */ - ih->mip_ps_id = e->id; - clock_gettime(CLOCK_REALTIME, &e->lastsent); - icmp6_send(0, 0, &e->hoa, &e->ha, &iov, 1); - free_iov_data(&iov, 1); - statistics_inc(&mipl_stat, MIPL_STATISTICS_OUT_MPS); - return 0; -} - -void mpd_cancel_mps(const struct in6_addr *hoa, - const struct in6_addr *ha) -{ - struct mps_entry *e; - pthread_mutex_lock(&mps_lock); - e = mps_get(hoa, ha); - - if (e != NULL) { - dbg("canceling MPS\n"); - hash_delete(&mps_hash, &e->hoa, &e->ha); - - if (tsisset(e->delay)) - del_task(&e->tqe); - - free(e); - } - - pthread_mutex_unlock(&mps_lock); -} - -static void mpd_resend_mps(struct tq_elem *tqe) -{ - pthread_mutex_lock(&mps_lock); - - if (!task_interrupted()) { - struct mps_entry *e = tq_data(tqe, struct mps_entry, tqe); - - if (tsbefore(MAX_BINDACK_TIMEOUT_TS, e->delay)) { - mpd_send_mps(e); - tsadd(e->delay, e->delay, e->delay); - e->delay = tsmin(e->delay, MAX_BINDACK_TIMEOUT_TS); - add_task_rel(&e->delay, &e->tqe, mpd_resend_mps); - } else - tsclear(e->delay); - } - - pthread_mutex_unlock(&mps_lock); -} - -static void mpd_send_first_mps(struct tq_elem *tqe) -{ - pthread_mutex_lock(&mps_lock); - - if (!task_interrupted()) { - struct mps_entry *e = tq_data(tqe, struct mps_entry, tqe); - e->id = random(); - mpd_send_mps(e); - e->delay = INITIAL_SOLICIT_TIMER_TS; - add_task_rel(&e->delay, &e->tqe, mpd_resend_mps); - } - - pthread_mutex_unlock(&mps_lock); - -} - -#define PREFIX_LIFETIME_MAX_FINITE 0x7FFFFFFF - -int mpd_schedule_first_mps(const struct in6_addr *hoa, - const struct in6_addr *ha, - const struct timespec *valid_time) -{ - struct mps_entry *e; - int err = -ENOMEM; - uint32_t delay; - - if (!conf.SendMobPfxSols) - return 0; - - pthread_mutex_lock(&mps_lock); - e = mps_get(hoa, ha); - - if (e == NULL) { - e = malloc(sizeof(struct mps_entry)); - - if (e == NULL) - goto out; - - memset(e, 0, sizeof(struct mps_entry)); - e->hoa = *hoa; - e->ha = *ha; - - if (hash_add(&mps_hash, e, &e->hoa, &e->ha)) { - free(e); - goto out; - } - - INIT_LIST_HEAD(&e->tqe.list); - } - - err = 0; - delay = umin(valid_time->tv_sec, PREFIX_LIFETIME_MAX_FINITE); - tssetsec(e->delay, delay * MPS_REFRESH_DELAY); - add_task_rel(&e->delay, &e->tqe, mpd_send_first_mps); - dbg("schedule MPS in %u s\n", e->delay.tv_sec); -out: - pthread_mutex_unlock(&mps_lock); - return err; -} - -static void mpd_recv_mpa(const struct icmp6_hdr *ih, ssize_t len, - const struct in6_addr *src, - const struct in6_addr *dst, - __attribute__ ((unused)) int iif, - __attribute__ ((unused)) int hoplimit) -{ - uint8_t *opt = (uint8_t *)(ih + 1); - struct mps_entry *e; - struct home_addr_info *hai; - struct timespec lastsent; - - pthread_mutex_lock(&mps_lock); - e = mps_get(dst, src); - - if (e == NULL) { - pthread_mutex_unlock(&mps_lock); - return; - } - - if (e->id != ih->icmp6_id) { - pthread_mutex_unlock(&mps_lock); - mpd_trigger_mps(dst, src); - return; - } - - del_task(&e->tqe); - tsclear(e->delay); - lastsent = e->lastsent; - pthread_mutex_unlock(&mps_lock); - - /* todo: do something about the MO flags */ - - pthread_rwlock_wrlock(&mn_lock); - hai = mn_get_home_addr(dst); - - if (hai != NULL) { - int optlen = len - sizeof(struct icmp6_hdr); - - while (optlen > 1) { - uint16_t olen = opt[1] << 3; - - if (olen > (unsigned int)optlen || olen == 0) - break; - - if (opt[0] == ND_OPT_PREFIX_INFORMATION) { - struct nd_opt_prefix_info *pinfo; - - if (olen < sizeof(*pinfo)) - continue; - - pinfo = (struct nd_opt_prefix_info *) opt; - /* internal representation host byte order */ - pinfo->nd_opt_pi_valid_time = - ntohl(pinfo->nd_opt_pi_valid_time); - pinfo->nd_opt_pi_preferred_time = - ntohl(pinfo->nd_opt_pi_preferred_time); - - if (pinfo->nd_opt_pi_valid_time < - pinfo->nd_opt_pi_preferred_time) - continue; - - mn_update_home_prefix(hai, &lastsent, pinfo); - } - - optlen -= olen; - opt += olen; - } - } - - pthread_rwlock_unlock(&mn_lock); -} - -static struct icmp6_handler mpd_mpa_handler = { - .recv = mpd_recv_mpa, -}; - -int mpd_mn_init(void) -{ - pthread_mutexattr_t mattrs; - pthread_mutexattr_init(&mattrs); - pthread_mutexattr_settype(&mattrs, PTHREAD_MUTEX_FAST_NP); - - if (pthread_mutex_init(&mps_lock, &mattrs)) - return -1; - - if (hash_init(&mps_hash, DOUBLE_ADDR, MPS_BUCKETS) < 0) - return -1; - - icmp6_handler_reg(MIP_PREFIX_ADVERT, &mpd_mpa_handler); - return 0; -} - -void mpd_mn_cleanup(void) -{ - icmp6_handler_dereg(MIP_PREFIX_ADVERT, &mpd_mpa_handler); - pthread_mutex_lock(&mps_lock); - hash_cleanup(&mps_hash); - pthread_mutex_unlock(&mps_lock); -} diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/src/mpdisc_mn.h b/openair3/PMIPv6/pmipv6-daemon-umip/src/mpdisc_mn.h deleted file mode 100755 index 711f32dbea..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/src/mpdisc_mn.h +++ /dev/null @@ -1,32 +0,0 @@ -/* $Id: mpdisc_mn.h 1.5 06/01/31 02:48:21+02:00 vnuorval@tcs.hut.fi $ */ - -#ifndef __MPDISC_MN_H__ -#define __MPDISC_MN_H__ 1 - -#include - -#ifdef ENABLE_VT -int mpd_poll_mps(const struct in6_addr *hoa, - const struct in6_addr *ha, - struct timespec *delay, - struct timespec *lastsent); -#endif - -int mpd_schedule_first_mps(const struct in6_addr *hoa, - const struct in6_addr *ha, - const struct timespec *preferred_time); - -static inline int mpd_trigger_mps(const struct in6_addr *hoa, - const struct in6_addr *ha) -{ - struct timespec zero = { 0, 0 }; - return mpd_schedule_first_mps(hoa, ha, &zero); -} - -void mpd_cancel_mps(const struct in6_addr *hoa, - const struct in6_addr *ha); - -int mpd_mn_init(void); -void mpd_mn_cleanup(void); - -#endif diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/src/ndisc.c b/openair3/PMIPv6/pmipv6-daemon-umip/src/ndisc.c deleted file mode 100755 index 525a6eaa5a..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/src/ndisc.c +++ /dev/null @@ -1,703 +0,0 @@ -/* - * $Id: ndisc.c 1.56 06/05/06 15:15:47+03:00 anttit@tcs.hut.fi $ - * - * This file is part of the MIPL Mobile IPv6 for Linux. - * - * Authors: Antti Tuominen - * Ville Nuorvala - * - * Copyright 2003-2005 Go-Core Project - * Copyright 2003-2006 Helsinki University of Technology - * - * MIPL Mobile IPv6 for Linux is free software; you can redistribute - * it and/or modify it under the terms of the GNU General Public - * License as published by the Free Software Foundation; version 2 of - * the License. - * - * MIPL Mobile IPv6 for Linux is distributed in the hope that it will - * be useful, but WITHOUT ANY WARRANTY; without even the implied - * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with MIPL Mobile IPv6 for Linux; if not, write to the Free - * Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - * 02111-1307 USA. - */ - -#ifdef HAVE_CONFIG_H -#include -#endif -#include -#include -#include -#include -#include -#include -#ifndef ARPHRD_PHONET_PIPE /* e.g. gprs0 iface on Nokia N900 */ -#define ARPHRD_PHONET_PIPE 821 -#endif -#include -#include -#include - -#include "debug.h" -#include "icmp6.h" -#include "tqueue.h" -#include "util.h" -#include "ndisc.h" -#include "rtnl.h" -#include "proc_sys.h" -#include "statistics.h" - -static int neigh_mod(int nl_flags, int cmd, int ifindex, - uint16_t state, uint8_t flags, struct in6_addr *dst, - uint8_t *hwa, int hwalen) -{ - uint8_t buf[256]; - struct nlmsghdr *n; - struct ndmsg *ndm; - - memset(buf, 0, sizeof(buf)); - n = (struct nlmsghdr *)buf; - n->nlmsg_len = NLMSG_LENGTH(sizeof(struct ndmsg)); - n->nlmsg_flags = NLM_F_REQUEST|nl_flags; - n->nlmsg_type = cmd; - - ndm = NLMSG_DATA(n); - ndm->ndm_family = AF_INET6; - ndm->ndm_ifindex = ifindex; - ndm->ndm_state = state; - ndm->ndm_flags = flags; - ndm->ndm_type = (IN6_IS_ADDR_MULTICAST(dst) ? - RTN_MULTICAST : RTN_UNICAST); - - addattr_l(n, sizeof(buf), NDA_DST, dst, sizeof(*dst)); - - if (hwa) - addattr_l(n, sizeof(buf), NDA_LLADDR, hwa, hwalen); - - return rtnl_route_do(n, NULL); -} - -int neigh_add(int ifindex, uint16_t state, uint8_t flags, - struct in6_addr *dst, uint8_t *hwa, int hwalen, - int override) -{ - return neigh_mod(NLM_F_CREATE | (override ? NLM_F_REPLACE : 0), - RTM_NEWNEIGH, ifindex, state, flags,dst, hwa, hwalen); -} - -int neigh_del(int ifindex, struct in6_addr *dst) -{ - return neigh_mod(0, RTM_DELNEIGH, ifindex, 0, 0, dst, NULL, 0); -} - -int pneigh_add(int ifindex, uint8_t flags, struct in6_addr *dst) -{ - return neigh_mod(NLM_F_CREATE | NLM_F_REPLACE, RTM_NEWNEIGH, - ifindex, NUD_PERMANENT, flags|NTF_PROXY, dst, - NULL, 0); -} - -int pneigh_del(int ifindex, struct in6_addr *dst) -{ - return neigh_mod(0, RTM_DELNEIGH, ifindex, 0, NTF_PROXY, dst, NULL, 0); -} - -static inline void proxy_nd_iface_set(int ifindex, int val) -{ - char ifname[IF_NAMESIZE]; - - if (if_indextoname(ifindex, ifname) != NULL) - set_iface_proc_entry(PROC_SYS_IP6_PROXY_NDP, ifname, val); -} - -void proxy_nd_iface_init(int ifindex) -{ - proxy_nd_iface_set(ifindex, 1); -} - -void proxy_nd_iface_cleanup(int ifindex) -{ - proxy_nd_iface_set(ifindex, 0); -} - -int proxy_nd_start(int ifindex, struct in6_addr *target, - struct in6_addr *src, int bu_flags) -{ - struct in6_addr lladdr; - int err; - int nd_flags = bu_flags&IP6_MH_BU_MR ? NTF_ROUTER : 0; - - err = pneigh_add(ifindex, nd_flags, target); - - if (!err && bu_flags & IP6_MH_BU_LLOCAL) { - ipv6_addr_llocal(target, &lladdr); - err = pneigh_add(ifindex, nd_flags, &lladdr); - - if (err) - pneigh_del(ifindex, target); - } - - if (!err) { - uint32_t na_flags = (ND_NA_FLAG_OVERRIDE | - nd_flags ? ND_NA_FLAG_ROUTER : 0); - - ndisc_send_na(ifindex, src, &in6addr_all_nodes_mc, - target, na_flags); - - if (bu_flags & IP6_MH_BU_LLOCAL) - ndisc_send_na(ifindex, src, &in6addr_all_nodes_mc, - &lladdr, na_flags); - } - - return err; -} - -void proxy_nd_stop(int ifindex, struct in6_addr *target, int bu_flags) -{ - if (bu_flags & IP6_MH_BU_LLOCAL) { - struct in6_addr lladdr; - ipv6_addr_llocal(target, &lladdr); - pneigh_del(ifindex, &lladdr); - neigh_del(ifindex, &lladdr); - } - - pneigh_del(ifindex, target); - neigh_del(ifindex, target); -} - -static struct nd_opt_hdr *nd_opt_create(struct iovec *iov, uint8_t type, - uint16_t len, uint8_t *value) -{ - struct nd_opt_hdr *opt; - int hlen = sizeof(struct nd_opt_hdr); - - /* len must be lenght(value) in bytes */ - opt = malloc(len + hlen); - - if (opt == NULL) - return NULL; - - opt->nd_opt_type = type; - opt->nd_opt_len = (len + hlen) >> 3; - memcpy(opt + 1, value, len); - iov->iov_base = opt; - iov->iov_len = len + hlen; - - return opt; -} - -/* Implementing support for a new interface type (ARPHRD_* from - * net/if_arp.h) basically requires adding the missing bits in - * the following 4 functions below: - * - * ndisc_get_l2addr_len() : provides L2 address length from interface type - * ndisc_set_linklocal() : constructs link-local address using L2 address - * for a given interface type. - * ndisc_l2addr_from_opt() : extracts L2 address from ND Src/Tgt link-layer - * address option. - * ndisc_l2addr_to_opt() : construct mapping of L2 address for ND Src/Tgt - * link-layer address option. - * - * and also L2ADDR_MAX_SIZE and MAP_L2ADDR_MAX_SIZE (in ndisc.h) - */ - -/* Returns the L2 address length for given interface type or -1 on error. */ -short ndisc_get_l2addr_len(unsigned short iface_type) -{ - switch (iface_type) { - /* supported physical devices */ - case ARPHRD_ETHER: - case ARPHRD_IEEE802: - case ARPHRD_IEEE802_TR: - case ARPHRD_IEEE80211: - case ARPHRD_FDDI: - return 6; - - /* supported virtual devices */ - case ARPHRD_SIT: - case ARPHRD_TUNNEL6: - case ARPHRD_PPP: - case ARPHRD_IPGRE: - case ARPHRD_NONE: /* for tun devices (teredo) */ - case ARPHRD_PHONET_PIPE: /* e.g. gprs0 iface on Nokia N900 */ - return 0; - - /* unsupported */ - default: - return -1; - } -} - -/* Based on iface type (iface_type) and associated link-layer - * address (hwa), the function generates the modified eui-64 - * and fills lladdr with link-local address. - * - * The function returns 0 on success, -EINVAL on error. */ -int ndisc_set_linklocal(struct in6_addr *lladdr, uint8_t *hwa, - unsigned short iface_type) -{ - memset(lladdr, 0, sizeof(struct in6_addr)); - uint8_t *eui = lladdr->s6_addr + 8; - - switch (iface_type) { - case ARPHRD_ETHER: - case ARPHRD_IEEE802: - case ARPHRD_IEEE802_TR: - case ARPHRD_IEEE80211: - case ARPHRD_FDDI: - memcpy(eui, hwa, 3); - memcpy(eui + 5, hwa + 3, 3); - eui[0] ^= 2; - eui[3] = 0xff; - eui[4] = 0xfe; - break; - - default: - return -EINVAL; - } - - lladdr->s6_addr[0] = 0xfe; - lladdr->s6_addr[1] = 0x80; - - return 0; -} - -/* Read content of address field (mapped_addr) of given length - * (mapped_addr_len) from Source/target link layer address option - * and reverses the mapping to get a suitable link layer address - * (copied in hwa, expected to be at least L2ADDR_MAX_SIZE) for - * the given interface type (iface_type). - * - * The length (>0) of copied link-layer address is returned on - * success. Otherwise, -EINVAL is returned on error (including - * for interface types that do not have link-layer addresses). - */ -int ndisc_l2addr_from_opt(unsigned short iface_type, uint8_t *hwa, - uint8_t *mapped_addr, int mapped_addr_len) -{ - int res = 0; - - switch (iface_type) { - case ARPHRD_ETHER: - case ARPHRD_IEEE802: - case ARPHRD_IEEE802_TR: - case ARPHRD_IEEE80211: - case ARPHRD_FDDI: - res = 6; - - if (mapped_addr_len != res) - return -EINVAL; - - memcpy(hwa, mapped_addr, res); - break; - - default: - res = -EINVAL; - } - - return res; -} - -/* Grab the L2 address of provided interface (ifindex) and write the - * mapped address suitable for use in Source/Target Link-Layer Address - * Option of various ND packets in 'addr'. 'addr' is expected to be at - * least MAP_L2ADDR_MAX_SIZE. - * - * The length (>0) of constructed address copied to addr is returned - * on success. -1 is returned on error. 0 is return if the interface - * is expected not to have a L2 address - * - * Note: For ethernet, fddi and some other iface types, the mapping - * is direct, i.e. L2 address are used directly. For other - * protocols with different L2 address length (firewire, - * ...) specific mapping are required and documented in specific - * RFC documents. */ -int ndisc_l2addr_to_opt(int ifindex, uint8_t *addr) -{ - struct ifreq ifr; - int fd, res; - - if ((fd = socket(PF_PACKET, SOCK_DGRAM, 0)) < 0) - return -1; - - memset(&ifr, 0, sizeof(ifr)); - - if (if_indextoname(ifindex, ifr.ifr_name) == NULL || - ioctl(fd, SIOCGIFHWADDR, &ifr) < 0) { - res = -1; - goto out; - } - - switch (ifr.ifr_hwaddr.sa_family) { - /* supported physical devices */ - case ARPHRD_ETHER: - case ARPHRD_IEEE802: - case ARPHRD_IEEE802_TR: - case ARPHRD_IEEE80211: - case ARPHRD_FDDI: - res = 6; - memcpy(addr, ifr.ifr_hwaddr.sa_data, res); - break; - - /* supported virtual devices */ - case ARPHRD_SIT: - case ARPHRD_TUNNEL6: - case ARPHRD_PPP: - case ARPHRD_IPGRE: - case ARPHRD_NONE: /* for tun devices (teredo) */ - case ARPHRD_PHONET_PIPE: /* e.g. gprs0 iface on Nokia N900 */ - res = 0; - break; - - default: - /* unsupported */ - res = -1; - break; - } - -out: - close(fd); - return res; -} - -/* Returns the interface type for given ifindex. -1 is - * returned on error */ -int nd_get_iface_type(int ifindex) -{ - struct ifreq ifr; - int fd; - - if ((fd = socket(PF_PACKET, SOCK_DGRAM, 0)) < 0) - return -1; - - memset(&ifr, 0, sizeof(ifr)); - - if (if_indextoname(ifindex, ifr.ifr_name) == NULL || - ioctl(fd, SIOCGIFHWADDR, &ifr) < 0) - return -1; - - return ifr.ifr_hwaddr.sa_family; -} - -/* Linearize 'iov' of 'iovlen' elements in 'dst' buffer of available size - * 'dstlen'. The number of bytes written to dst is returned in 'written' - * if everything went ok. 0 is returned on success, -1 on error. */ -static int iov_linearize(uint8_t *dst, int dstlen, struct iovec *iov, - size_t iovlen, int *written) -{ - unsigned int i = 0, l; - unsigned int rem = dstlen; - uint8_t *data = dst; - struct iovec cur; - - if (iov == NULL || iovlen == 0) - return 0; - - cur = iov[i]; - - while ((i < iovlen) && ((l = cur.iov_len) <= rem)) { - if (cur.iov_base == NULL) - return -1; - - memcpy(data, cur.iov_base, l); - cur = iov[++i]; - rem -= l; - data += l; - } - - if (i != iovlen) { /* Someone left behind? */ - dbg("Not enough space to linearize iov\n"); - return -1; - } - - *written = dstlen - rem; - - return 0; -} - -static int ndisc_send_unspec(int oif, const struct in6_addr *dest, - uint8_t *hdr, int hdrlen, struct iovec *optv, - size_t optvlen) -{ - struct { - struct ip6_hdr ip; - struct icmp6_hdr icmp; - uint8_t data[1500]; - } frame; - - struct msghdr msgh; - struct cmsghdr *cmsg; - struct in6_pktinfo *pinfo; - struct sockaddr_in6 dst; - char cbuf[CMSG_SPACE(sizeof(*pinfo))]; - struct iovec iov; - uint8_t *data = (uint8_t *)(&frame.icmp); - int type, fd, ret, remlen, datalen = 0, written = 0, v = 1; - - if (hdr == NULL || hdrlen < 0 || - (size_t)hdrlen < sizeof(struct icmp6_hdr) || - (size_t)hdrlen > (sizeof(frame) - sizeof(struct ip6_hdr))) - return -EINVAL; - - if ((fd = socket(AF_INET6, SOCK_RAW, IPPROTO_RAW)) < 0) - return -1; - - if (setsockopt(fd, IPPROTO_IPV6, IP_HDRINCL, &v, sizeof(v)) < 0) { - dbg("cannot set IP_HDRINCL: %s\n", strerror(errno)); - close(fd); - return -errno; - } - - memset(&frame, 0, sizeof(frame)); - memset(&dst, 0, sizeof(dst)); - - dst.sin6_addr = *dest; - - /* Copy ICMPv6 header and update various length values */ - memcpy(data, hdr, hdrlen); - data += hdrlen; - datalen += hdrlen; - remlen = sizeof(frame) - sizeof(struct ip6_hdr) - hdrlen; - - /* Prepare for csum: write trailing options by linearizing iov */ - if ((iov_linearize(data, remlen, optv, optvlen, &written) != 0) || - (written & 0x1)) /* Ensure length is even for csum() */ - return -1; - - datalen += written; - - /* Fill in the IPv6 header */ - frame.ip.ip6_vfc = 0x60; - frame.ip.ip6_plen = htons(datalen); - frame.ip.ip6_nxt = IPPROTO_ICMPV6; - frame.ip.ip6_hlim = 255; - frame.ip.ip6_dst = *dest; - /* all other fields are already set to zero */ - - //frame.icmp.icmp6_cksum = in6_cksum(&in6addr_any, dest, &frame.icmp, - // datalen, IPPROTO_ICMPV6); - frame.icmp.icmp6_cksum = csum_ipv6_magic(&in6addr_any, dest, datalen, - IPPROTO_ICMPV6, - csum_partial(&frame.icmp, datalen, 0)); - - iov.iov_base = &frame; - iov.iov_len = sizeof(frame.ip) + datalen; - - dst.sin6_family = AF_INET6; - msgh.msg_name = &dst; - msgh.msg_namelen = sizeof(dst); - msgh.msg_iov = &iov; - msgh.msg_iovlen = 1; - msgh.msg_flags = 0; - - memset(cbuf, 0, CMSG_SPACE(sizeof(*pinfo))); - cmsg = (struct cmsghdr *)cbuf; - pinfo = (struct in6_pktinfo *)CMSG_DATA(cmsg); - pinfo->ipi6_ifindex = oif; - - cmsg->cmsg_len = CMSG_LEN(sizeof(*pinfo)); - cmsg->cmsg_level = IPPROTO_IPV6; - cmsg->cmsg_type = IPV6_PKTINFO; - msgh.msg_control = cmsg; - msgh.msg_controllen = cmsg->cmsg_len; - - ret = sendmsg(fd, &msgh, 0); - - if (ret < 0) - dbg("sendmsg: if index %u dest %x:%x:%x:%x:%x:%x:%x:%x: %s\n", - oif, - NIP6ADDR(dest), - strerror(errno)); - - close(fd); - type = hdr[0]; - - if (type == ND_NEIGHBOR_SOLICIT) { - statistics_inc(&mipl_stat, MIPL_STATISTICS_OUT_NS_UNSPEC); - } else if (type == ND_ROUTER_SOLICIT) { - statistics_inc(&mipl_stat, MIPL_STATISTICS_OUT_RS_UNSPEC); - } - - return ret; -} - -int ndisc_send_rs(int ifindex, const struct in6_addr *dst, - struct iovec *opts, size_t optslen) -{ - struct nd_router_solicit rs; - uint8_t *hdr = (uint8_t *)&rs; - int hdrlen = sizeof(rs); - - memset(hdr, 0, hdrlen); - rs.nd_rs_type = ND_ROUTER_SOLICIT; - - return ndisc_send_unspec(ifindex, dst, hdr, hdrlen, opts, optslen); -} - -int ndisc_send_ns(int ifindex, const struct in6_addr *target) -{ - struct nd_neighbor_solicit ns; - uint8_t *hdr = (uint8_t *)&ns; - int hdrlen = sizeof(ns); - struct in6_addr dest; - - memset(hdr, 0, hdrlen); - ns.nd_ns_type = ND_NEIGHBOR_SOLICIT; - ns.nd_ns_target = *target; - ipv6_addr_solict_mult(target, &dest); - - return ndisc_send_unspec(ifindex, &dest, hdr, hdrlen, NULL, 0); -} - -int ndisc_send_na(int ifindex, const struct in6_addr *src, - const struct in6_addr *dst, - const struct in6_addr *target, uint32_t flags) -{ - struct nd_neighbor_advert *na; - struct iovec iov[2]; - uint8_t l2addr[L2ADDR_MAX_SIZE]; - int len, iovlen = 0; - - memset(iov, 0, sizeof(iov)); - - if ((len = ndisc_l2addr_to_opt(ifindex, l2addr)) < 0) - return -EINVAL; - - na = icmp6_create(iov, ND_NEIGHBOR_ADVERT, iovlen++); - - if (na == NULL) - return -ENOMEM; - - if (len > 0) { - if (nd_opt_create(&iov[iovlen], ND_OPT_TARGET_LINKADDR, - len, l2addr) == NULL) { - free_iov_data(iov, iovlen); - return -ENOMEM; - } - - iovlen++; - } - - na->nd_na_target = *target; - na->nd_na_flags_reserved = flags; - - icmp6_send(ifindex, 255, src, dst, iov, iovlen); - free_iov_data(iov, iovlen); - statistics_inc(&mipl_stat, MIPL_STATISTICS_OUT_NA); - return 0; -} - -int ndisc_do_dad(int ifi, struct in6_addr *addr, int do_ll) -{ - struct in6_pktinfo pinfo; - struct sockaddr_in6 saddr; - struct nd_neighbor_advert *hdr; - struct icmp6_filter filter; - struct in6_addr solicit, ll; - unsigned char msg[MAX_PKT_LEN]; - int hoplimit, sock = -1, ret, val = 1, err = -1; - fd_set rset; - struct timeval tv; - - ICMP6_FILTER_SETBLOCKALL(&filter); - ICMP6_FILTER_SETPASS(ND_NEIGHBOR_ADVERT, &filter); - - sock = socket(AF_INET6, SOCK_RAW, IPPROTO_ICMPV6); - - if (sock < 0) { - dbg("socket: %s\n", strerror(errno)); - goto end; - } - - if (setsockopt(sock, IPPROTO_IPV6, IPV6_RECVPKTINFO, - &val, sizeof(val)) < 0) { - dbg("cannot set IPV6_RECVPKTINFO: %s\n", strerror(errno)); - goto end; - } - - if (setsockopt(sock, IPPROTO_IPV6, IPV6_RECVHOPLIMIT, - &val, sizeof(val)) < 0) { - dbg("cannot set IPV6_RECVHOPLIMIT: %s\n", strerror(errno)); - goto end; - } - - if (setsockopt(sock, IPPROTO_ICMPV6, ICMP6_FILTER, &filter, - sizeof(struct icmp6_filter)) < 0) { - dbg("cannot set ICMPV6_FILTER: %s\n", strerror(errno)); - goto end; - } - - ipv6_addr_solict_mult(addr, &solicit); - - if (if_mc_group(sock, ifi, &in6addr_all_nodes_mc, IPV6_JOIN_GROUP)) { - dbg("cannot join all node mc\n"); - goto end; - } - - if (if_mc_group(sock, ifi, &solicit, IPV6_JOIN_GROUP)) { - dbg("cannot joing slicit node mc\n"); - goto end; - } - - if (ndisc_send_ns(ifi, addr) <= 0) { - dbg("Error at sending NS\n"); - goto end; - } - - if (do_ll) { - ipv6_addr_llocal(addr, &ll); - - if (ndisc_send_ns(ifi, &ll) <= 0) { - dbg("Error at sending NS (link-local target)\n"); - goto end; - } - } - - FD_ZERO(&rset); - FD_SET(sock, &rset); - tv.tv_sec = DAD_TIMEOUT; - tv.tv_usec = 0; - - for (;;) { - /* Note on portability: we assume that tv is modified to show - the time left which is AFAIK true only in Linux - timeout - */ - if (select(sock+1, &rset, NULL, NULL, &tv) == 0) { - dbg("Dad success\n"); - err = 0; - break; - } - - if (!FD_ISSET(sock, &rset)) - continue; - - /* We got an ICMPv6 packet */ - ret = icmp6_recv(sock, msg, sizeof(msg), &saddr, - &pinfo, &hoplimit); - - if (ret < 0) - continue; - - hdr = (struct nd_neighbor_advert *)msg; - - if (hdr->nd_na_code != 0) - continue; - - if (IN6_ARE_ADDR_EQUAL(addr, &hdr->nd_na_target) || - (do_ll && IN6_ARE_ADDR_EQUAL(&ll, &hdr->nd_na_target))) { - dbg("Failure\n"); - break; - } - } - -end: - - if (sock >= 0) - close(sock); - - return err; -} diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/src/ndisc.h b/openair3/PMIPv6/pmipv6-daemon-umip/src/ndisc.h deleted file mode 100755 index 6e0caae7dd..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/src/ndisc.h +++ /dev/null @@ -1,56 +0,0 @@ -/* $Id: ndisc.h 1.13 04/09/20 12:47:39+03:00 vnuorval@tcs.hut.fi $ */ - -#ifndef __NDISC_H__ -#define __NDISC_H__ 1 - -#include - -#define DAD_TIMEOUT 1 /* one second */ -#define L2ADDR_MAX_SIZE 6 /* Max required size for supported L2 @ */ -#define MAP_L2ADDR_MAX_SIZE 6 /* Max required size for mapped @ format used - * in ND Src/Tgt Link-Layer Address option */ - -short ndisc_get_l2addr_len(unsigned short iface_type); - -int ndisc_set_linklocal(struct in6_addr *lladdr, uint8_t *hwa, - unsigned short iface_type); - -int ndisc_l2addr_from_opt(unsigned short iface_type, uint8_t *hwa, - uint8_t *mapped_addr, int mapped_addr_len); - -int ndisc_l2addr_to_opt(int ifindex, uint8_t *addr); - -int nd_get_iface_type(int ifindex); - -int ndisc_do_dad(int ifi, struct in6_addr *addr, int ll); - -int ndisc_send_rs(int ifindex, const struct in6_addr *dst, - struct iovec *opts, size_t optslen); - -int ndisc_send_ns(int ifindex, const struct in6_addr *target); - -int ndisc_send_na(int ifindex, const struct in6_addr *src, - const struct in6_addr *dst, - const struct in6_addr *target, uint32_t flags); - -void proxy_nd_iface_init(int ifindex); - -void proxy_nd_iface_cleanup(int ifindex); - -int proxy_nd_start(int ifindex, struct in6_addr *target, - struct in6_addr *src, int bu_flags); - -void proxy_nd_stop(int ifindex, struct in6_addr *target, int bu_flags); - -int neigh_add(int ifindex, uint16_t state, uint8_t flags, - struct in6_addr *dst, uint8_t *hwa, int hwalen, - int override); - -int neigh_del(int ifindex, struct in6_addr *dst); - -int pneigh_add(int ifindex, uint8_t flags, struct in6_addr *dst); - -int pneigh_del(int ifindex, struct in6_addr *dst); - - -#endif diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/src/pmgr.c.in b/openair3/PMIPv6/pmipv6-daemon-umip/src/pmgr.c.in deleted file mode 100755 index 6dbcf306b3..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/src/pmgr.c.in +++ /dev/null @@ -1,102 +0,0 @@ -/* - * $Id: pmgr.c.in 1.3 06/02/08 00:53:40+02:00 vnuorval@tcs.hut.fi $ - * - * This file is part of the MIPL Mobile IPv6 for Linux. - * - * Author: Antti Tuominen - * - * Copyright 2005 GO-Core Project - * Copyright 2005,2006 Helsinki University of Technology - * - * MIPL Mobile IPv6 for Linux is free software; you can redistribute - * it and/or modify it under the terms of the GNU General Public - * License as published by the Free Software Foundation; version 2 of - * the License. - * - * MIPL Mobile IPv6 for Linux is distributed in the hope that it will - * be useful, but WITHOUT ANY WARRANTY; without even the implied - * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with MIPL Mobile IPv6 for Linux; if not, write to the Free - * Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - * 02111-1307 USA. - */ -/* ## Do not change this file, unless you know what you are doing. */ - -#ifdef HAVE_CONFIG_H -#include -#endif -#include -#include -#include -#include -#include -#include "policy.h" -#include "pmgr.h" - -static void pmgr_init_defaults(struct pmgr_cb *lb) -{ - memset(lb, 0, sizeof(struct pmgr_cb)); - strcpy(lb->so_path, "[internal]"); - -/* ##INSERT_DEFAULTS## */ -} - -static void pmgr_init_entrypoints(struct pmgr_cb *ep, void *h) -{ - /* To keep -fstrict-aliasing happy */ - union f_un { - int (*i)(); - void *v; - } func; - -/* ##INSERT_ENTRYPOINTS## */ -} - -int pmgr_init(char *libpath, struct pmgr_cb *lb) -{ - struct pmgr_cb *old; - void *h; - - if (libpath == NULL) { - pmgr_init_defaults(lb); - return 0; - } - - h = dlopen(libpath, RTLD_LAZY); - - if (dlerror()) return -ENOENT; - - old = (struct pmgr_cb *)malloc(sizeof(*old)); - if (old == NULL) - return -ENOMEM; - - memcpy(old, lb, sizeof(*old)); - lb->old = old; - - strncpy(lb->so_path, libpath, _POSIX_PATH_MAX); - pmgr_init_entrypoints(lb, h); - lb->handle = h; - - return 0; -} - -int pmgr_close(struct pmgr_cb *lb) -{ - void *h = lb->handle; - struct pmgr_cb *t; - - if (lb->old) { - t = lb->old; - lb->old = lb->old->old; - memcpy(lb, t, sizeof(*lb)); - free(t); - } - - if (h != NULL) - return dlclose(h); - - return 0; -} diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/src/pmgr.h.in b/openair3/PMIPv6/pmipv6-daemon-umip/src/pmgr.h.in deleted file mode 100755 index aa7fed0f16..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/src/pmgr.h.in +++ /dev/null @@ -1,23 +0,0 @@ -/* $Id: pmgr.h.in 1.1 05/02/21 14:45:42+02:00 anttit@tcs.hut.fi $ */ - -#ifndef __PMGR_H__ -#define __PMGR_H__ 1 - -#ifdef HAVE_CONFIG_H -#include -#endif -#include -#include "policy.h" - -struct pmgr_cb { -/* ##INSERT_FUNCTIONPOINTERS## */ - char so_path[_POSIX_PATH_MAX + 1]; - void *handle; - struct pmgr_cb *old; -}; - -int pmgr_init(char *libpath, struct pmgr_cb *lb); - -int pmgr_close(struct pmgr_cb *lb); - -#endif diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/src/pmip/docs/Doxyfile b/openair3/PMIPv6/pmipv6-daemon-umip/src/pmip/docs/Doxyfile deleted file mode 100755 index 7adff2d61f..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/src/pmip/docs/Doxyfile +++ /dev/null @@ -1,1554 +0,0 @@ -# Doxyfile 1.6.3 - -# This file describes the settings to be used by the documentation system -# doxygen (www.doxygen.org) for a project -# -# All text after a hash (#) is considered a comment and will be ignored -# The format is: -# TAG = value [value, ...] -# For lists items can also be appended using: -# TAG += value [value, ...] -# Values that contain spaces should be placed between quotes (" ") - -#--------------------------------------------------------------------------- -# Project related configuration options -#--------------------------------------------------------------------------- - -# This tag specifies the encoding used for all characters in the config file -# that follow. The default is UTF-8 which is also the encoding used for all -# text before the first occurrence of this tag. Doxygen uses libiconv (or the -# iconv built into libc) for the transcoding. See -# http://www.gnu.org/software/libiconv for the list of possible encodings. - -DOXYFILE_ENCODING = UTF-8 - -# The PROJECT_NAME tag is a single word (or a sequence of words surrounded -# by quotes) that should identify the project. - -PROJECT_NAME = OpenAirInterface-PMIP6D - -# The PROJECT_NUMBER tag can be used to enter a project or revision number. -# This could be handy for archiving the generated documentation or -# if some version control system is used. - -PROJECT_NUMBER = V0.4.1 - -# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) -# base path where the generated documentation will be put. -# If a relative path is entered, it will be relative to the location -# where doxygen was started. If left blank the current directory will be used. - -OUTPUT_DIRECTORY = ./html - -# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create -# 4096 sub-directories (in 2 levels) under the output directory of each output -# format and will distribute the generated files over these directories. -# Enabling this option can be useful when feeding doxygen a huge amount of -# source files, where putting all generated files in the same directory would -# otherwise cause performance problems for the file system. - -CREATE_SUBDIRS = NO - -# The OUTPUT_LANGUAGE tag is used to specify the language in which all -# documentation generated by doxygen is written. Doxygen will use this -# information to generate all constant output in the proper language. -# The default language is English, other supported languages are: -# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, -# Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German, -# Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English -# messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, -# Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, -# Slovene, Spanish, Swedish, Ukrainian, and Vietnamese. - -OUTPUT_LANGUAGE = English - -# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will -# include brief member descriptions after the members that are listed in -# the file and class documentation (similar to JavaDoc). -# Set to NO to disable this. - -BRIEF_MEMBER_DESC = YES - -# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend -# the brief description of a member or function before the detailed description. -# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the -# brief descriptions will be completely suppressed. - -REPEAT_BRIEF = YES - -# This tag implements a quasi-intelligent brief description abbreviator -# that is used to form the text in various listings. Each string -# in this list, if found as the leading text of the brief description, will be -# stripped from the text and the result after processing the whole list, is -# used as the annotated text. Otherwise, the brief description is used as-is. -# If left blank, the following values are used ("$name" is automatically -# replaced with the name of the entity): "The $name class" "The $name widget" -# "The $name file" "is" "provides" "specifies" "contains" -# "represents" "a" "an" "the" - -ABBREVIATE_BRIEF = - -# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then -# Doxygen will generate a detailed section even if there is only a brief -# description. - -ALWAYS_DETAILED_SEC = NO - -# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all -# inherited members of a class in the documentation of that class as if those -# members were ordinary class members. Constructors, destructors and assignment -# operators of the base classes will not be shown. - -INLINE_INHERITED_MEMB = NO - -# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full -# path before files name in the file list and in the header files. If set -# to NO the shortest path that makes the file name unique will be used. - -FULL_PATH_NAMES = NO - -# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag -# can be used to strip a user-defined part of the path. Stripping is -# only done if one of the specified strings matches the left-hand part of -# the path. The tag can be used to show relative paths in the file list. -# If left blank the directory from which doxygen is run is used as the -# path to strip. - -STRIP_FROM_PATH = - -# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of -# the path mentioned in the documentation of a class, which tells -# the reader which header file to include in order to use a class. -# If left blank only the name of the header file containing the class -# definition is used. Otherwise one should specify the include paths that -# are normally passed to the compiler using the -I flag. - -STRIP_FROM_INC_PATH = - -# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter -# (but less readable) file names. This can be useful is your file systems -# doesn't support long names like on DOS, Mac, or CD-ROM. - -SHORT_NAMES = NO - -# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen -# will interpret the first line (until the first dot) of a JavaDoc-style -# comment as the brief description. If set to NO, the JavaDoc -# comments will behave just like regular Qt-style comments -# (thus requiring an explicit @brief command for a brief description.) - -JAVADOC_AUTOBRIEF = NO - -# If the QT_AUTOBRIEF tag is set to YES then Doxygen will -# interpret the first line (until the first dot) of a Qt-style -# comment as the brief description. If set to NO, the comments -# will behave just like regular Qt-style comments (thus requiring -# an explicit \brief command for a brief description.) - -QT_AUTOBRIEF = NO - -# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen -# treat a multi-line C++ special comment block (i.e. a block of //! or /// -# comments) as a brief description. This used to be the default behaviour. -# The new default is to treat a multi-line C++ comment block as a detailed -# description. Set this tag to YES if you prefer the old behaviour instead. - -MULTILINE_CPP_IS_BRIEF = NO - -# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented -# member inherits the documentation from any documented member that it -# re-implements. - -INHERIT_DOCS = YES - -# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce -# a new page for each member. If set to NO, the documentation of a member will -# be part of the file/class/namespace that contains it. - -SEPARATE_MEMBER_PAGES = NO - -# The TAB_SIZE tag can be used to set the number of spaces in a tab. -# Doxygen uses this value to replace tabs by spaces in code fragments. - -TAB_SIZE = 8 - -# This tag can be used to specify a number of aliases that acts -# as commands in the documentation. An alias has the form "name=value". -# For example adding "sideeffect=\par Side Effects:\n" will allow you to -# put the command \sideeffect (or @sideeffect) in the documentation, which -# will result in a user-defined paragraph with heading "Side Effects:". -# You can put \n's in the value part of an alias to insert newlines. - -ALIASES = - -# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C -# sources only. Doxygen will then generate output that is more tailored for C. -# For instance, some of the names that are used will be different. The list -# of all members will be omitted, etc. - -OPTIMIZE_OUTPUT_FOR_C = YES - -# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java -# sources only. Doxygen will then generate output that is more tailored for -# Java. For instance, namespaces will be presented as packages, qualified -# scopes will look different, etc. - -OPTIMIZE_OUTPUT_JAVA = NO - -# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran -# sources only. Doxygen will then generate output that is more tailored for -# Fortran. - -OPTIMIZE_FOR_FORTRAN = NO - -# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL -# sources. Doxygen will then generate output that is tailored for -# VHDL. - -OPTIMIZE_OUTPUT_VHDL = NO - -# Doxygen selects the parser to use depending on the extension of the files it parses. -# With this tag you can assign which parser to use for a given extension. -# Doxygen has a built-in mapping, but you can override or extend it using this tag. -# The format is ext=language, where ext is a file extension, and language is one of -# the parsers supported by doxygen: IDL, Java, Javascript, C#, C, C++, D, PHP, -# Objective-C, Python, Fortran, VHDL, C, C++. For instance to make doxygen treat -# .inc files as Fortran files (default is PHP), and .f files as C (default is Fortran), -# use: inc=Fortran f=C. Note that for custom extensions you also need to set FILE_PATTERNS otherwise the files are not read by doxygen. - -EXTENSION_MAPPING = - -# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want -# to include (a tag file for) the STL sources as input, then you should -# set this tag to YES in order to let doxygen match functions declarations and -# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. -# func(std::string) {}). This also make the inheritance and collaboration -# diagrams that involve STL classes more complete and accurate. - -BUILTIN_STL_SUPPORT = NO - -# If you use Microsoft's C++/CLI language, you should set this option to YES to -# enable parsing support. - -CPP_CLI_SUPPORT = NO - -# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. -# Doxygen will parse them like normal C++ but will assume all classes use public -# instead of private inheritance when no explicit protection keyword is present. - -SIP_SUPPORT = NO - -# For Microsoft's IDL there are propget and propput attributes to indicate getter -# and setter methods for a property. Setting this option to YES (the default) -# will make doxygen to replace the get and set methods by a property in the -# documentation. This will only work if the methods are indeed getting or -# setting a simple type. If this is not the case, or you want to show the -# methods anyway, you should set this option to NO. - -IDL_PROPERTY_SUPPORT = YES - -# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC -# tag is set to YES, then doxygen will reuse the documentation of the first -# member in the group (if any) for the other members of the group. By default -# all members of a group must be documented explicitly. - -DISTRIBUTE_GROUP_DOC = NO - -# Set the SUBGROUPING tag to YES (the default) to allow class member groups of -# the same type (for instance a group of public functions) to be put as a -# subgroup of that type (e.g. under the Public Functions section). Set it to -# NO to prevent subgrouping. Alternatively, this can be done per class using -# the \nosubgrouping command. - -SUBGROUPING = YES - -# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum -# is documented as struct, union, or enum with the name of the typedef. So -# typedef struct TypeS {} TypeT, will appear in the documentation as a struct -# with name TypeT. When disabled the typedef will appear as a member of a file, -# namespace, or class. And the struct will be named TypeS. This can typically -# be useful for C code in case the coding convention dictates that all compound -# types are typedef'ed and only the typedef is referenced, never the tag name. - -TYPEDEF_HIDES_STRUCT = NO - -# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to -# determine which symbols to keep in memory and which to flush to disk. -# When the cache is full, less often used symbols will be written to disk. -# For small to medium size projects (<1000 input files) the default value is -# probably good enough. For larger projects a too small cache size can cause -# doxygen to be busy swapping symbols to and from disk most of the time -# causing a significant performance penality. -# If the system has enough physical memory increasing the cache will improve the -# performance by keeping more symbols in memory. Note that the value works on -# a logarithmic scale so increasing the size by one will rougly double the -# memory usage. The cache size is given by this formula: -# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, -# corresponding to a cache size of 2^16 = 65536 symbols - -SYMBOL_CACHE_SIZE = 0 - -#--------------------------------------------------------------------------- -# Build related configuration options -#--------------------------------------------------------------------------- - -# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in -# documentation are documented, even if no documentation was available. -# Private class members and static file members will be hidden unless -# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES - -EXTRACT_ALL = NO - -# If the EXTRACT_PRIVATE tag is set to YES all private members of a class -# will be included in the documentation. - -EXTRACT_PRIVATE = NO - -# If the EXTRACT_STATIC tag is set to YES all static members of a file -# will be included in the documentation. - -EXTRACT_STATIC = NO - -# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) -# defined locally in source files will be included in the documentation. -# If set to NO only classes defined in header files are included. - -EXTRACT_LOCAL_CLASSES = YES - -# This flag is only useful for Objective-C code. When set to YES local -# methods, which are defined in the implementation section but not in -# the interface are included in the documentation. -# If set to NO (the default) only methods in the interface are included. - -EXTRACT_LOCAL_METHODS = NO - -# If this flag is set to YES, the members of anonymous namespaces will be -# extracted and appear in the documentation as a namespace called -# 'anonymous_namespace{file}', where file will be replaced with the base -# name of the file that contains the anonymous namespace. By default -# anonymous namespace are hidden. - -EXTRACT_ANON_NSPACES = NO - -# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all -# undocumented members of documented classes, files or namespaces. -# If set to NO (the default) these members will be included in the -# various overviews, but no documentation section is generated. -# This option has no effect if EXTRACT_ALL is enabled. - -HIDE_UNDOC_MEMBERS = NO - -# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all -# undocumented classes that are normally visible in the class hierarchy. -# If set to NO (the default) these classes will be included in the various -# overviews. This option has no effect if EXTRACT_ALL is enabled. - -HIDE_UNDOC_CLASSES = NO - -# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all -# friend (class|struct|union) declarations. -# If set to NO (the default) these declarations will be included in the -# documentation. - -HIDE_FRIEND_COMPOUNDS = NO - -# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any -# documentation blocks found inside the body of a function. -# If set to NO (the default) these blocks will be appended to the -# function's detailed documentation block. - -HIDE_IN_BODY_DOCS = NO - -# The INTERNAL_DOCS tag determines if documentation -# that is typed after a \internal command is included. If the tag is set -# to NO (the default) then the documentation will be excluded. -# Set it to YES to include the internal documentation. - -INTERNAL_DOCS = NO - -# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate -# file names in lower-case letters. If set to YES upper-case letters are also -# allowed. This is useful if you have classes or files whose names only differ -# in case and if your file system supports case sensitive file names. Windows -# and Mac users are advised to set this option to NO. - -CASE_SENSE_NAMES = YES - -# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen -# will show members with their full class and namespace scopes in the -# documentation. If set to YES the scope will be hidden. - -HIDE_SCOPE_NAMES = NO - -# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen -# will put a list of the files that are included by a file in the documentation -# of that file. - -SHOW_INCLUDE_FILES = YES - -# If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen -# will list include files with double quotes in the documentation -# rather than with sharp brackets. - -FORCE_LOCAL_INCLUDES = NO - -# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] -# is inserted in the documentation for inline members. - -INLINE_INFO = YES - -# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen -# will sort the (detailed) documentation of file and class members -# alphabetically by member name. If set to NO the members will appear in -# declaration order. - -SORT_MEMBER_DOCS = YES - -# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the -# brief documentation of file, namespace and class members alphabetically -# by member name. If set to NO (the default) the members will appear in -# declaration order. - -SORT_BRIEF_DOCS = NO - -# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the (brief and detailed) documentation of class members so that constructors and destructors are listed first. If set to NO (the default) the constructors will appear in the respective orders defined by SORT_MEMBER_DOCS and SORT_BRIEF_DOCS. This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO. - -SORT_MEMBERS_CTORS_1ST = NO - -# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the -# hierarchy of group names into alphabetical order. If set to NO (the default) -# the group names will appear in their defined order. - -SORT_GROUP_NAMES = NO - -# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be -# sorted by fully-qualified names, including namespaces. If set to -# NO (the default), the class list will be sorted only by class name, -# not including the namespace part. -# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. -# Note: This option applies only to the class list, not to the -# alphabetical list. - -SORT_BY_SCOPE_NAME = NO - -# The GENERATE_TODOLIST tag can be used to enable (YES) or -# disable (NO) the todo list. This list is created by putting \todo -# commands in the documentation. - -GENERATE_TODOLIST = YES - -# The GENERATE_TESTLIST tag can be used to enable (YES) or -# disable (NO) the test list. This list is created by putting \test -# commands in the documentation. - -GENERATE_TESTLIST = YES - -# The GENERATE_BUGLIST tag can be used to enable (YES) or -# disable (NO) the bug list. This list is created by putting \bug -# commands in the documentation. - -GENERATE_BUGLIST = YES - -# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or -# disable (NO) the deprecated list. This list is created by putting -# \deprecated commands in the documentation. - -GENERATE_DEPRECATEDLIST= YES - -# The ENABLED_SECTIONS tag can be used to enable conditional -# documentation sections, marked by \if sectionname ... \endif. - -ENABLED_SECTIONS = - -# The MAX_INITIALIZER_LINES tag determines the maximum number of lines -# the initial value of a variable or define consists of for it to appear in -# the documentation. If the initializer consists of more lines than specified -# here it will be hidden. Use a value of 0 to hide initializers completely. -# The appearance of the initializer of individual variables and defines in the -# documentation can be controlled using \showinitializer or \hideinitializer -# command in the documentation regardless of this setting. - -MAX_INITIALIZER_LINES = 30 - -# Set the SHOW_USED_FILES tag to NO to disable the list of files generated -# at the bottom of the documentation of classes and structs. If set to YES the -# list will mention the files that were used to generate the documentation. - -SHOW_USED_FILES = YES - -# If the sources in your project are distributed over multiple directories -# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy -# in the documentation. The default is NO. - -SHOW_DIRECTORIES = NO - -# Set the SHOW_FILES tag to NO to disable the generation of the Files page. -# This will remove the Files entry from the Quick Index and from the -# Folder Tree View (if specified). The default is YES. - -SHOW_FILES = YES - -# Set the SHOW_NAMESPACES tag to NO to disable the generation of the -# Namespaces page. -# This will remove the Namespaces entry from the Quick Index -# and from the Folder Tree View (if specified). The default is YES. - -SHOW_NAMESPACES = YES - -# The FILE_VERSION_FILTER tag can be used to specify a program or script that -# doxygen should invoke to get the current version for each file (typically from -# the version control system). Doxygen will invoke the program by executing (via -# popen()) the command , where is the value of -# the FILE_VERSION_FILTER tag, and is the name of an input file -# provided by doxygen. Whatever the program writes to standard output -# is used as the file version. See the manual for examples. - -FILE_VERSION_FILTER = - -# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by -# doxygen. The layout file controls the global structure of the generated output files -# in an output format independent way. The create the layout file that represents -# doxygen's defaults, run doxygen with the -l option. You can optionally specify a -# file name after the option, if omitted DoxygenLayout.xml will be used as the name -# of the layout file. - -LAYOUT_FILE = - -#--------------------------------------------------------------------------- -# configuration options related to warning and progress messages -#--------------------------------------------------------------------------- - -# The QUIET tag can be used to turn on/off the messages that are generated -# by doxygen. Possible values are YES and NO. If left blank NO is used. - -QUIET = NO - -# The WARNINGS tag can be used to turn on/off the warning messages that are -# generated by doxygen. Possible values are YES and NO. If left blank -# NO is used. - -WARNINGS = YES - -# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings -# for undocumented members. If EXTRACT_ALL is set to YES then this flag will -# automatically be disabled. - -WARN_IF_UNDOCUMENTED = YES - -# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for -# potential errors in the documentation, such as not documenting some -# parameters in a documented function, or documenting parameters that -# don't exist or using markup commands wrongly. - -WARN_IF_DOC_ERROR = YES - -# This WARN_NO_PARAMDOC option can be abled to get warnings for -# functions that are documented, but have no documentation for their parameters -# or return value. If set to NO (the default) doxygen will only warn about -# wrong or incomplete parameter documentation, but not about the absence of -# documentation. - -WARN_NO_PARAMDOC = NO - -# The WARN_FORMAT tag determines the format of the warning messages that -# doxygen can produce. The string should contain the $file, $line, and $text -# tags, which will be replaced by the file and line number from which the -# warning originated and the warning text. Optionally the format may contain -# $version, which will be replaced by the version of the file (if it could -# be obtained via FILE_VERSION_FILTER) - -WARN_FORMAT = "$file:$line: $text" - -# The WARN_LOGFILE tag can be used to specify a file to which warning -# and error messages should be written. If left blank the output is written -# to stderr. - -WARN_LOGFILE = - -#--------------------------------------------------------------------------- -# configuration options related to the input files -#--------------------------------------------------------------------------- - -# The INPUT tag can be used to specify the files and/or directories that contain -# documented source files. You may enter file names like "myfile.cpp" or -# directories like "/usr/src/myproject". Separate the files or directories -# with spaces. - -INPUT = ./.. - -# This tag can be used to specify the character encoding of the source files -# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is -# also the default input encoding. Doxygen uses libiconv (or the iconv built -# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for -# the list of possible encodings. - -INPUT_ENCODING = UTF-8 - -# If the value of the INPUT tag contains directories, you can use the -# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank the following patterns are tested: -# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx -# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90 - -FILE_PATTERNS = *.h \ - RECURSIVE \ - = \ - NO - -# The RECURSIVE tag can be used to turn specify whether or not subdirectories -# should be searched for input files as well. Possible values are YES and NO. -# If left blank NO is used. - -RECURSIVE = NO - -# The EXCLUDE tag can be used to specify files and/or directories that should -# excluded from the INPUT source files. This way you can easily exclude a -# subdirectory from a directory tree whose root is specified with the INPUT tag. - -EXCLUDE = - -# The EXCLUDE_SYMLINKS tag can be used select whether or not files or -# directories that are symbolic links (a Unix filesystem feature) are excluded -# from the input. - -EXCLUDE_SYMLINKS = NO - -# If the value of the INPUT tag contains directories, you can use the -# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude -# certain files from those directories. Note that the wildcards are matched -# against the file with absolute path, so to exclude all test directories -# for example use the pattern */test/* - -EXCLUDE_PATTERNS = - -# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names -# (namespaces, classes, functions, etc.) that should be excluded from the -# output. The symbol name can be a fully qualified name, a word, or if the -# wildcard * is used, a substring. Examples: ANamespace, AClass, -# AClass::ANamespace, ANamespace::*Test - -EXCLUDE_SYMBOLS = - -# The EXAMPLE_PATH tag can be used to specify one or more files or -# directories that contain example code fragments that are included (see -# the \include command). - -EXAMPLE_PATH = - -# If the value of the EXAMPLE_PATH tag contains directories, you can use the -# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank all files are included. - -EXAMPLE_PATTERNS = - -# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be -# searched for input files to be used with the \include or \dontinclude -# commands irrespective of the value of the RECURSIVE tag. -# Possible values are YES and NO. If left blank NO is used. - -EXAMPLE_RECURSIVE = NO - -# The IMAGE_PATH tag can be used to specify one or more files or -# directories that contain image that are included in the documentation (see -# the \image command). - -IMAGE_PATH = images/ - -# The INPUT_FILTER tag can be used to specify a program that doxygen should -# invoke to filter for each input file. Doxygen will invoke the filter program -# by executing (via popen()) the command , where -# is the value of the INPUT_FILTER tag, and is the name of an -# input file. Doxygen will then use the output that the filter program writes -# to standard output. -# If FILTER_PATTERNS is specified, this tag will be -# ignored. - -INPUT_FILTER = - -# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern -# basis. -# Doxygen will compare the file name with each pattern and apply the -# filter if there is a match. -# The filters are a list of the form: -# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further -# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER -# is applied to all files. - -FILTER_PATTERNS = - -# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using -# INPUT_FILTER) will be used to filter the input files when producing source -# files to browse (i.e. when SOURCE_BROWSER is set to YES). - -FILTER_SOURCE_FILES = NO - -#--------------------------------------------------------------------------- -# configuration options related to source browsing -#--------------------------------------------------------------------------- - -# If the SOURCE_BROWSER tag is set to YES then a list of source files will -# be generated. Documented entities will be cross-referenced with these sources. -# Note: To get rid of all source code in the generated output, make sure also -# VERBATIM_HEADERS is set to NO. - -SOURCE_BROWSER = NO - -# Setting the INLINE_SOURCES tag to YES will include the body -# of functions and classes directly in the documentation. - -INLINE_SOURCES = NO - -# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct -# doxygen to hide any special comment blocks from generated source code -# fragments. Normal C and C++ comments will always remain visible. - -STRIP_CODE_COMMENTS = YES - -# If the REFERENCED_BY_RELATION tag is set to YES -# then for each documented function all documented -# functions referencing it will be listed. - -REFERENCED_BY_RELATION = YES - -# If the REFERENCES_RELATION tag is set to YES -# then for each documented function all documented entities -# called/used by that function will be listed. - -REFERENCES_RELATION = YES - -# If the REFERENCES_LINK_SOURCE tag is set to YES (the default) -# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from -# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will -# link to the source code. -# Otherwise they will link to the documentation. - -REFERENCES_LINK_SOURCE = YES - -# If the USE_HTAGS tag is set to YES then the references to source code -# will point to the HTML generated by the htags(1) tool instead of doxygen -# built-in source browser. The htags tool is part of GNU's global source -# tagging system (see http://www.gnu.org/software/global/global.html). You -# will need version 4.8.6 or higher. - -USE_HTAGS = NO - -# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen -# will generate a verbatim copy of the header file for each class for -# which an include is specified. Set to NO to disable this. - -VERBATIM_HEADERS = YES - -#--------------------------------------------------------------------------- -# configuration options related to the alphabetical class index -#--------------------------------------------------------------------------- - -# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index -# of all compounds will be generated. Enable this if the project -# contains a lot of classes, structs, unions or interfaces. - -ALPHABETICAL_INDEX = NO - -# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then -# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns -# in which this list will be split (can be a number in the range [1..20]) - -COLS_IN_ALPHA_INDEX = 5 - -# In case all classes in a project start with a common prefix, all -# classes will be put under the same header in the alphabetical index. -# The IGNORE_PREFIX tag can be used to specify one or more prefixes that -# should be ignored while generating the index headers. - -IGNORE_PREFIX = - -#--------------------------------------------------------------------------- -# configuration options related to the HTML output -#--------------------------------------------------------------------------- - -# If the GENERATE_HTML tag is set to YES (the default) Doxygen will -# generate HTML output. - -GENERATE_HTML = YES - -# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `html' will be used as the default path. - -HTML_OUTPUT = html - -# The HTML_FILE_EXTENSION tag can be used to specify the file extension for -# each generated HTML page (for example: .htm,.php,.asp). If it is left blank -# doxygen will generate files with .html extension. - -HTML_FILE_EXTENSION = .html - -# The HTML_HEADER tag can be used to specify a personal HTML header for -# each generated HTML page. If it is left blank doxygen will generate a -# standard header. - -HTML_HEADER = - -# The HTML_FOOTER tag can be used to specify a personal HTML footer for -# each generated HTML page. If it is left blank doxygen will generate a -# standard footer. - -HTML_FOOTER = footer.html - -# The HTML_STYLESHEET tag can be used to specify a user-defined cascading -# style sheet that is used by each HTML page. It can be used to -# fine-tune the look of the HTML output. If the tag is left blank doxygen -# will generate a default style sheet. Note that doxygen will try to copy -# the style sheet file to the HTML output directory, so don't put your own -# stylesheet in the HTML output directory as well, or it will be erased! - -HTML_STYLESHEET = - -# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML -# page will contain the date and time when the page was generated. Setting -# this to NO can help when comparing the output of multiple runs. - -HTML_TIMESTAMP = YES - -# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, -# files or namespaces will be aligned in HTML using tables. If set to -# NO a bullet list will be used. - -HTML_ALIGN_MEMBERS = YES - -# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML -# documentation will contain sections that can be hidden and shown after the -# page has loaded. For this to work a browser that supports -# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox -# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari). - -HTML_DYNAMIC_SECTIONS = NO - -# If the GENERATE_DOCSET tag is set to YES, additional index files -# will be generated that can be used as input for Apple's Xcode 3 -# integrated development environment, introduced with OSX 10.5 (Leopard). -# To create a documentation set, doxygen will generate a Makefile in the -# HTML output directory. Running make will produce the docset in that -# directory and running "make install" will install the docset in -# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find -# it at startup. -# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information. - -GENERATE_DOCSET = NO - -# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the -# feed. A documentation feed provides an umbrella under which multiple -# documentation sets from a single provider (such as a company or product suite) -# can be grouped. - -DOCSET_FEEDNAME = "Doxygen generated docs" - -# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that -# should uniquely identify the documentation set bundle. This should be a -# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen -# will append .docset to the name. - -DOCSET_BUNDLE_ID = org.doxygen.Project - -# If the GENERATE_HTMLHELP tag is set to YES, additional index files -# will be generated that can be used as input for tools like the -# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) -# of the generated HTML documentation. - -GENERATE_HTMLHELP = NO - -# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can -# be used to specify the file name of the resulting .chm file. You -# can add a path in front of the file if the result should not be -# written to the html output directory. - -CHM_FILE = - -# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can -# be used to specify the location (absolute path including file name) of -# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run -# the HTML help compiler on the generated index.hhp. - -HHC_LOCATION = - -# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag -# controls if a separate .chi index file is generated (YES) or that -# it should be included in the master .chm file (NO). - -GENERATE_CHI = NO - -# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING -# is used to encode HtmlHelp index (hhk), content (hhc) and project file -# content. - -CHM_INDEX_ENCODING = - -# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag -# controls whether a binary table of contents is generated (YES) or a -# normal table of contents (NO) in the .chm file. - -BINARY_TOC = NO - -# The TOC_EXPAND flag can be set to YES to add extra items for group members -# to the contents of the HTML help documentation and to the tree view. - -TOC_EXPAND = NO - -# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER -# are set, an additional index file will be generated that can be used as input for -# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated -# HTML documentation. - -GENERATE_QHP = NO - -# If the QHG_LOCATION tag is specified, the QCH_FILE tag can -# be used to specify the file name of the resulting .qch file. -# The path specified is relative to the HTML output folder. - -QCH_FILE = - -# The QHP_NAMESPACE tag specifies the namespace to use when generating -# Qt Help Project output. For more information please see -# http://doc.trolltech.com/qthelpproject.html#namespace - -QHP_NAMESPACE = org.doxygen.Project - -# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating -# Qt Help Project output. For more information please see -# http://doc.trolltech.com/qthelpproject.html#virtual-folders - -QHP_VIRTUAL_FOLDER = doc - -# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to add. -# For more information please see -# http://doc.trolltech.com/qthelpproject.html#custom-filters - -QHP_CUST_FILTER_NAME = - -# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the custom filter to add.For more information please see -# Qt Help Project / Custom Filters. - -QHP_CUST_FILTER_ATTRS = - -# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this project's -# filter section matches. -# Qt Help Project / Filter Attributes. - -QHP_SECT_FILTER_ATTRS = - -# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can -# be used to specify the location of Qt's qhelpgenerator. -# If non-empty doxygen will try to run qhelpgenerator on the generated -# .qhp file. - -QHG_LOCATION = - -# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files -# will be generated, which together with the HTML files, form an Eclipse help -# plugin. To install this plugin and make it available under the help contents -# menu in Eclipse, the contents of the directory containing the HTML and XML -# files needs to be copied into the plugins directory of eclipse. The name of -# the directory within the plugins directory should be the same as -# the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before the help appears. - -GENERATE_ECLIPSEHELP = NO - -# A unique identifier for the eclipse help plugin. When installing the plugin -# the directory name containing the HTML and XML files should also have -# this name. - -ECLIPSE_DOC_ID = org.doxygen.Project - -# The DISABLE_INDEX tag can be used to turn on/off the condensed index at -# top of each HTML page. The value NO (the default) enables the index and -# the value YES disables it. - -DISABLE_INDEX = NO - -# This tag can be used to set the number of enum values (range [1..20]) -# that doxygen will group on one line in the generated HTML documentation. - -ENUM_VALUES_PER_LINE = 4 - -# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index -# structure should be generated to display hierarchical information. -# If the tag value is set to YES, a side panel will be generated -# containing a tree-like index structure (just like the one that -# is generated for HTML Help). For this to work a browser that supports -# JavaScript, DHTML, CSS and frames is required (i.e. any modern browser). -# Windows users are probably better off using the HTML help feature. - -GENERATE_TREEVIEW = YES - -# By enabling USE_INLINE_TREES, doxygen will generate the Groups, Directories, -# and Class Hierarchy pages using a tree view instead of an ordered list. - -USE_INLINE_TREES = NO - -# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be -# used to set the initial width (in pixels) of the frame in which the tree -# is shown. - -TREEVIEW_WIDTH = 250 - -# Use this tag to change the font size of Latex formulas included -# as images in the HTML documentation. The default is 10. Note that -# when you change the font size after a successful doxygen run you need -# to manually remove any form_*.png images from the HTML output directory -# to force them to be regenerated. - -FORMULA_FONTSIZE = 10 - -# When the SEARCHENGINE tag is enabled doxygen will generate a search box for the HTML output. The underlying search engine uses javascript -# and DHTML and should work on any modern browser. Note that when using HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) there is already a search function so this one should -# typically be disabled. For large projects the javascript based search engine -# can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution. - -SEARCHENGINE = NO - -# When the SERVER_BASED_SEARCH tag is enabled the search engine will be implemented using a PHP enabled web server instead of at the web client using Javascript. Doxygen will generate the search PHP script and index -# file to put on the web server. The advantage of the server based approach is that it scales better to large projects and allows full text search. The disadvances is that it is more difficult to setup -# and does not have live searching capabilities. - -SERVER_BASED_SEARCH = NO - -#--------------------------------------------------------------------------- -# configuration options related to the LaTeX output -#--------------------------------------------------------------------------- - -# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will -# generate Latex output. - -GENERATE_LATEX = NO - -# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `latex' will be used as the default path. - -LATEX_OUTPUT = latex - -# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be -# invoked. If left blank `latex' will be used as the default command name. -# Note that when enabling USE_PDFLATEX this option is only used for -# generating bitmaps for formulas in the HTML output, but not in the -# Makefile that is written to the output directory. - -LATEX_CMD_NAME = latex - -# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to -# generate index for LaTeX. If left blank `makeindex' will be used as the -# default command name. - -MAKEINDEX_CMD_NAME = makeindex - -# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact -# LaTeX documents. This may be useful for small projects and may help to -# save some trees in general. - -COMPACT_LATEX = NO - -# The PAPER_TYPE tag can be used to set the paper type that is used -# by the printer. Possible values are: a4, a4wide, letter, legal and -# executive. If left blank a4wide will be used. - -PAPER_TYPE = a4wide - -# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX -# packages that should be included in the LaTeX output. - -EXTRA_PACKAGES = - -# The LATEX_HEADER tag can be used to specify a personal LaTeX header for -# the generated latex document. The header should contain everything until -# the first chapter. If it is left blank doxygen will generate a -# standard header. Notice: only use this tag if you know what you are doing! - -LATEX_HEADER = - -# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated -# is prepared for conversion to pdf (using ps2pdf). The pdf file will -# contain links (just like the HTML output) instead of page references -# This makes the output suitable for online browsing using a pdf viewer. - -PDF_HYPERLINKS = NO - -# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of -# plain latex in the generated Makefile. Set this option to YES to get a -# higher quality PDF documentation. - -USE_PDFLATEX = NO - -# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. -# command to the generated LaTeX files. This will instruct LaTeX to keep -# running if errors occur, instead of asking the user for help. -# This option is also used when generating formulas in HTML. - -LATEX_BATCHMODE = NO - -# If LATEX_HIDE_INDICES is set to YES then doxygen will not -# include the index chapters (such as File Index, Compound Index, etc.) -# in the output. - -LATEX_HIDE_INDICES = NO - -# If LATEX_SOURCE_CODE is set to YES then doxygen will include source code with syntax highlighting in the LaTeX output. Note that which sources are shown also depends on other settings such as SOURCE_BROWSER. - -LATEX_SOURCE_CODE = NO - -#--------------------------------------------------------------------------- -# configuration options related to the RTF output -#--------------------------------------------------------------------------- - -# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output -# The RTF output is optimized for Word 97 and may not look very pretty with -# other RTF readers or editors. - -GENERATE_RTF = NO - -# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `rtf' will be used as the default path. - -RTF_OUTPUT = rtf - -# If the COMPACT_RTF tag is set to YES Doxygen generates more compact -# RTF documents. This may be useful for small projects and may help to -# save some trees in general. - -COMPACT_RTF = NO - -# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated -# will contain hyperlink fields. The RTF file will -# contain links (just like the HTML output) instead of page references. -# This makes the output suitable for online browsing using WORD or other -# programs which support those fields. -# Note: wordpad (write) and others do not support links. - -RTF_HYPERLINKS = NO - -# Load stylesheet definitions from file. Syntax is similar to doxygen's -# config file, i.e. a series of assignments. You only have to provide -# replacements, missing definitions are set to their default value. - -RTF_STYLESHEET_FILE = - -# Set optional variables used in the generation of an rtf document. -# Syntax is similar to doxygen's config file. - -RTF_EXTENSIONS_FILE = - -#--------------------------------------------------------------------------- -# configuration options related to the man page output -#--------------------------------------------------------------------------- - -# If the GENERATE_MAN tag is set to YES (the default) Doxygen will -# generate man pages - -GENERATE_MAN = NO - -# The MAN_OUTPUT tag is used to specify where the man pages will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `man' will be used as the default path. - -MAN_OUTPUT = man - -# The MAN_EXTENSION tag determines the extension that is added to -# the generated man pages (default is the subroutine's section .3) - -MAN_EXTENSION = .3 - -# If the MAN_LINKS tag is set to YES and Doxygen generates man output, -# then it will generate one additional man file for each entity -# documented in the real man page(s). These additional files -# only source the real man page, but without them the man command -# would be unable to find the correct page. The default is NO. - -MAN_LINKS = NO - -#--------------------------------------------------------------------------- -# configuration options related to the XML output -#--------------------------------------------------------------------------- - -# If the GENERATE_XML tag is set to YES Doxygen will -# generate an XML file that captures the structure of -# the code including all documentation. - -GENERATE_XML = NO - -# The XML_OUTPUT tag is used to specify where the XML pages will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `xml' will be used as the default path. - -XML_OUTPUT = xml - -# The XML_SCHEMA tag can be used to specify an XML schema, -# which can be used by a validating XML parser to check the -# syntax of the XML files. - -XML_SCHEMA = - -# The XML_DTD tag can be used to specify an XML DTD, -# which can be used by a validating XML parser to check the -# syntax of the XML files. - -XML_DTD = - -# If the XML_PROGRAMLISTING tag is set to YES Doxygen will -# dump the program listings (including syntax highlighting -# and cross-referencing information) to the XML output. Note that -# enabling this will significantly increase the size of the XML output. - -XML_PROGRAMLISTING = YES - -#--------------------------------------------------------------------------- -# configuration options for the AutoGen Definitions output -#--------------------------------------------------------------------------- - -# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will -# generate an AutoGen Definitions (see autogen.sf.net) file -# that captures the structure of the code including all -# documentation. Note that this feature is still experimental -# and incomplete at the moment. - -GENERATE_AUTOGEN_DEF = NO - -#--------------------------------------------------------------------------- -# configuration options related to the Perl module output -#--------------------------------------------------------------------------- - -# If the GENERATE_PERLMOD tag is set to YES Doxygen will -# generate a Perl module file that captures the structure of -# the code including all documentation. Note that this -# feature is still experimental and incomplete at the -# moment. - -GENERATE_PERLMOD = NO - -# If the PERLMOD_LATEX tag is set to YES Doxygen will generate -# the necessary Makefile rules, Perl scripts and LaTeX code to be able -# to generate PDF and DVI output from the Perl module output. - -PERLMOD_LATEX = NO - -# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be -# nicely formatted so it can be parsed by a human reader. -# This is useful -# if you want to understand what is going on. -# On the other hand, if this -# tag is set to NO the size of the Perl module output will be much smaller -# and Perl will parse it just the same. - -PERLMOD_PRETTY = YES - -# The names of the make variables in the generated doxyrules.make file -# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. -# This is useful so different doxyrules.make files included by the same -# Makefile don't overwrite each other's variables. - -PERLMOD_MAKEVAR_PREFIX = - -#--------------------------------------------------------------------------- -# Configuration options related to the preprocessor -#--------------------------------------------------------------------------- - -# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will -# evaluate all C-preprocessor directives found in the sources and include -# files. - -ENABLE_PREPROCESSING = YES - -# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro -# names in the source code. If set to NO (the default) only conditional -# compilation will be performed. Macro expansion can be done in a controlled -# way by setting EXPAND_ONLY_PREDEF to YES. -#LG WAS NO -MACRO_EXPANSION = YES - -# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES -# then the macro expansion is limited to the macros specified with the -# PREDEFINED and EXPAND_AS_DEFINED tags. -#LG WAS NO -EXPAND_ONLY_PREDEF = YES - -# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files -# in the INCLUDE_PATH (see below) will be search if a #include is found. - -SEARCH_INCLUDES = YES - -# The INCLUDE_PATH tag can be used to specify one or more directories that -# contain include files that are not input files but should be processed by -# the preprocessor. - -INCLUDE_PATH = .. - -# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard -# patterns (like *.h and *.hpp) to filter out the header-files in the -# directories. If left blank, the patterns specified with FILE_PATTERNS will -# be used. - -INCLUDE_FILE_PATTERNS = - -# The PREDEFINED tag can be used to specify one or more macro names that -# are defined before the preprocessor is started (similar to the -D option of -# gcc). The argument of the tag is a list of macros of the form: name -# or name=definition (no spaces). If the definition and the = are -# omitted =1 is assumed. To prevent a macro definition from being -# undefined via #undef or recursively expanded use the := operator -# instead of the = operator. - -PREDEFINED = PMIP=1 PMIP_CACHE_C=1 PMIP_FSM_C=1 PMIP_HANDLER_C=1 PMIP_HNP_CACHE_C=1 PMIP_INIT_C=1 PMIP_LMA_PROC_C=1 PMIP_MAG_PROC_C=1 PMIP_MSGS_C=1 PMIP_PCAP_C=1 PMIP_TUNNEL_C=1 - -# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then -# this tag can be used to specify a list of macro names that should be expanded. -# The macro definition that is found in the sources will be used. -# Use the PREDEFINED tag if you want to use a different macro definition. - -EXPAND_AS_DEFINED = private_pmip_cache protected_pmip_cache public_pmip_cache private_pmip_fsm protected_pmip_fsm public_pmip_fsm private_pmip_handler protected_pmip_handler public_pmip_handler private_pmip_hnp_cache protected_pmip_hnp_cache public_pmip_hnp_cache private_pmip_init protected_pmip_init public_pmip_init private_pmip_lma_proc protected_pmip_lma_proc public_pmip_lma_proc private_pmip_mag_proc protected_pmip_mag_proc public_pmip_mag_proc private_pmip_msgs protected_pmip_msgs public_pmip_msgs private_pmip_pcap protected_pmip_pcap public_pmip_pcap private_pmip_tunnel protected_pmip_tunnel public_pmip_tunnel - -# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then -# doxygen's preprocessor will remove all function-like macros that are alone -# on a line, have an all uppercase name, and do not end with a semicolon. Such -# function macros are typically used for boiler-plate code, and will confuse -# the parser if not removed. - -SKIP_FUNCTION_MACROS = YES - -#--------------------------------------------------------------------------- -# Configuration::additions related to external references -#--------------------------------------------------------------------------- - -# The TAGFILES option can be used to specify one or more tagfiles. -# Optionally an initial location of the external documentation -# can be added for each tagfile. The format of a tag file without -# this location is as follows: -# -# TAGFILES = file1 file2 ... -# Adding location for the tag files is done as follows: -# -# TAGFILES = file1=loc1 "file2 = loc2" ... -# where "loc1" and "loc2" can be relative or absolute paths or -# URLs. If a location is present for each tag, the installdox tool -# does not have to be run to correct the links. -# Note that each tag file must have a unique name -# (where the name does NOT include the path) -# If a tag file is not located in the directory in which doxygen -# is run, you must also specify the path to the tagfile here. - -TAGFILES = - -# When a file name is specified after GENERATE_TAGFILE, doxygen will create -# a tag file that is based on the input files it reads. - -GENERATE_TAGFILE = - -# If the ALLEXTERNALS tag is set to YES all external classes will be listed -# in the class index. If set to NO only the inherited external classes -# will be listed. - -ALLEXTERNALS = NO - -# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed -# in the modules index. If set to NO, only the current project's groups will -# be listed. - -EXTERNAL_GROUPS = YES - -# The PERL_PATH should be the absolute path and name of the perl script -# interpreter (i.e. the result of `which perl'). - -PERL_PATH = /usr/bin/perl - -#--------------------------------------------------------------------------- -# Configuration options related to the dot tool -#--------------------------------------------------------------------------- - -# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will -# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base -# or super classes. Setting the tag to NO turns the diagrams off. Note that -# this option is superseded by the HAVE_DOT option below. This is only a -# fallback. It is recommended to install and use dot, since it yields more -# powerful graphs. - -CLASS_DIAGRAMS = YES - -# You can define message sequence charts within doxygen comments using the \msc -# command. Doxygen will then run the mscgen tool (see -# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the -# documentation. The MSCGEN_PATH tag allows you to specify the directory where -# the mscgen tool resides. If left empty the tool is assumed to be found in the -# default search path. - -MSCGEN_PATH = - -# If set to YES, the inheritance and collaboration graphs will hide -# inheritance and usage relations if the target is undocumented -# or is not a class. - -HIDE_UNDOC_RELATIONS = YES - -# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is -# available from the path. This tool is part of Graphviz, a graph visualization -# toolkit from AT&T and Lucent Bell Labs. The other options in this section -# have no effect if this option is set to NO (the default) - -HAVE_DOT = NO - -# By default doxygen will write a font called FreeSans.ttf to the output -# directory and reference it in all dot files that doxygen generates. This -# font does not include all possible unicode characters however, so when you need -# these (or just want a differently looking font) you can specify the font name -# using DOT_FONTNAME. You need need to make sure dot is able to find the font, -# which can be done by putting it in a standard location or by setting the -# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory -# containing the font. - -DOT_FONTNAME = FreeSans - -# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. -# The default size is 10pt. - -DOT_FONTSIZE = 10 - -# By default doxygen will tell dot to use the output directory to look for the -# FreeSans.ttf font (which doxygen will put there itself). If you specify a -# different font using DOT_FONTNAME you can set the path where dot -# can find it using this tag. - -DOT_FONTPATH = - -# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for each documented class showing the direct and -# indirect inheritance relations. Setting this tag to YES will force the -# the CLASS_DIAGRAMS tag to NO. - -CLASS_GRAPH = YES - -# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for each documented class showing the direct and -# indirect implementation dependencies (inheritance, containment, and -# class references variables) of the class with other documented classes. - -COLLABORATION_GRAPH = YES - -# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for groups, showing the direct groups dependencies - -GROUP_GRAPHS = YES - -# If the UML_LOOK tag is set to YES doxygen will generate inheritance and -# collaboration diagrams in a style similar to the OMG's Unified Modeling -# Language. - -UML_LOOK = NO - -# If set to YES, the inheritance and collaboration graphs will show the -# relations between templates and their instances. - -TEMPLATE_RELATIONS = NO - -# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT -# tags are set to YES then doxygen will generate a graph for each documented -# file showing the direct and indirect include dependencies of the file with -# other documented files. - -INCLUDE_GRAPH = YES - -# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and -# HAVE_DOT tags are set to YES then doxygen will generate a graph for each -# documented header file showing the documented files that directly or -# indirectly include this file. - -INCLUDED_BY_GRAPH = YES - -# If the CALL_GRAPH and HAVE_DOT options are set to YES then -# doxygen will generate a call dependency graph for every global function -# or class method. Note that enabling this option will significantly increase -# the time of a run. So in most cases it will be better to enable call graphs -# for selected functions only using the \callgraph command. - -CALL_GRAPH = NO - -# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then -# doxygen will generate a caller dependency graph for every global function -# or class method. Note that enabling this option will significantly increase -# the time of a run. So in most cases it will be better to enable caller -# graphs for selected functions only using the \callergraph command. - -CALLER_GRAPH = NO - -# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen -# will graphical hierarchy of all classes instead of a textual one. - -GRAPHICAL_HIERARCHY = YES - -# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES -# then doxygen will show the dependencies a directory has on other directories -# in a graphical way. The dependency relations are determined by the #include -# relations between the files in the directories. - -DIRECTORY_GRAPH = YES - -# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images -# generated by dot. Possible values are png, jpg, or gif -# If left blank png will be used. - -DOT_IMAGE_FORMAT = png - -# The tag DOT_PATH can be used to specify the path where the dot tool can be -# found. If left blank, it is assumed the dot tool can be found in the path. - -DOT_PATH = /usr/bin/dot - -# The DOTFILE_DIRS tag can be used to specify one or more directories that -# contain dot files that are included in the documentation (see the -# \dotfile command). - -DOTFILE_DIRS = - -# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of -# nodes that will be shown in the graph. If the number of nodes in a graph -# becomes larger than this value, doxygen will truncate the graph, which is -# visualized by representing a node as a red box. Note that doxygen if the -# number of direct children of the root node in a graph is already larger than -# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note -# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. - -DOT_GRAPH_MAX_NODES = 50 - -# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the -# graphs generated by dot. A depth value of 3 means that only nodes reachable -# from the root by following a path via at most 3 edges will be shown. Nodes -# that lay further from the root node will be omitted. Note that setting this -# option to 1 or 2 may greatly reduce the computation time needed for large -# code bases. Also note that the size of a graph can be further restricted by -# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. - -MAX_DOT_GRAPH_DEPTH = 0 - -# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent -# background. This is disabled by default, because dot on Windows does not -# seem to support this out of the box. Warning: Depending on the platform used, -# enabling this option may lead to badly anti-aliased labels on the edges of -# a graph (i.e. they become hard to read). - -DOT_TRANSPARENT = NO - -# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output -# files in one run (i.e. multiple -o and -T options on the command line). This -# makes dot run faster, but since only newer versions of dot (>1.8.10) -# support this, this feature is disabled by default. - -DOT_MULTI_TARGETS = NO - -# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will -# generate a legend page explaining the meaning of the various boxes and -# arrows in the dot generated graphs. - -GENERATE_LEGEND = YES - -# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will -# remove the intermediate dot files that are used to generate -# the various graphs. - -DOT_CLEANUP = YES diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/src/pmip/docs/footer.html b/openair3/PMIPv6/pmipv6-daemon-umip/src/pmip/docs/footer.html deleted file mode 100755 index b5b833a2dd..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/src/pmip/docs/footer.html +++ /dev/null @@ -1,16 +0,0 @@ - - -  -  -
-EURECOM - PMIP6D -
- - - diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/src/pmip/pmip.h b/openair3/PMIPv6/pmipv6-daemon-umip/src/pmip/pmip.h deleted file mode 100755 index 6187e93aec..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/src/pmip/pmip.h +++ /dev/null @@ -1,95 +0,0 @@ -/** @file pmip.h -* @brief Proxy Mobile IPv6 implementation - EURECOM -*/ - -/** @defgroup PMIP6D ProxyMobileIPv6 - * Proxy Mobile IPv6 EURECOM Implementation - * @{ - */ - -/** @mainpage Proxy MobileIPv6 Daemon - OpenAirInterface -* -* @authors OpenAir3 - EURECOM -* -* @section tablecontent Table of contents -* -* 1. Introduction \n -* 2. PMIPv6 Architecture \n -* 3. PMIPv6 Message flow scheme \n -* 4. PMIPv6 Software architecture\n -* 5. Details of our real PMIPv6 testbed \n -* -* @section intro1 1.) Introduction -* -* Proxy Mobile IPv6 (PMIPv6) is a network-based mobility management protocol for localized domains, which has been actively standardized by the IETF NETLMM Working Group. PMIPv6 is starting to attract much attention among telecommunication and internet communities due to its salient features and it is expected to expedite the real deployment of IP-based mobility management. -* -* PMIPv6 has been chosen by 3GPP and LTE and does not require any IPv6 stack modification in the Mobile Node (MN). Its main idea is to have a unique Home Network Prefix per MN. -* Moreover, the whole mobility support is managed by Local Mobility Anchor (LMA) and Mobile Access Gateway (MAG) and not from the MN. -* -* @section intro2 2.) PMIPv6 Architecture -*\image html PMIP6D.domain.jpg "Overview of PMIPv6 architecure" -* In the PMIPv6 architecture, there are two main core functionnal entities : -* - Local Mobility Anchor (LMA): it is similar to HA in MIPv6. LMA is responsible for maintaining the MN's reachability state and it is the topological anchor point for the MN's Home Network Prefix (HNP). LMA includes a binding cache entry for each currently registered MN with MN-Identifier, the MN's HNP, a flag indicating the proxy registration and the interface identifier of the bidirectional tunnel between the LMA and MAG. -* -* - Mobile Access Gateway (MAG): it is the entity that performs the mobility management on behalf of the MN and it resides on the access link where the MN is anchored. The MAG is responsible for detecting the MN's movements to and from the access link and for initiating binding registrations to the MN's LMA. Moreover, the MAG establishes a tunnel with the LMA for enabling the MN to use an address from its HNP and emulates the MN's home network on the access network for each MN. -* -* -* @section intro3 3.) PMIPv6 Message flow scheme -* The execution of the message flow of the overall operations in PMIPv6 is show in the figure below\n -*\image html message_flow.jpg "Message flow in PMIPv6" -* The main steps in the PMIPv6 mobility management scheme are achieved as follows : -* - MN attachment: once a MN enters a PMIPv6 domain and attaches to an access link, the MAG on that access link performs the access authentication procedure with a policy server using the MN's profile, which contains MN-Identifier, LMA address and other related configuration parameters; -* - Proxy Binding exchange: the MAG sends to the LMA a Proxy Binding Update (PBU) message on behalf of the MN including the MN-Identifier. Upon accepting the message, the LMA replies with a Proxy Binding Acknowledgment (PBA) message including the MN's HNP. With this procedure the LMA creates a Binding Cache Entry (BCE) for the MN and a bi-directional tunnel between the LMA and the MAG is set up; -* - Address Configuration procedure: at this point the MAG has all the required information for emulating the MN's home link. It sends Router Advertisement message to the MN on the access link advertising the MN's HNP as the hosted on-link-prefix. On receiving this message, the MN configures its interface either using stateful or stateless address configuration modes. Finally the MN ends up with an address from its HNP that it can use while moving in the PMIPv6 domain. -* -* @section intro4 4.) PMIP6D Software Architecture -* Here is an overview of the PMIP6D Software overview. -*\image html MIPL.jpg "PMIP6D Software architecture" -* -* All the basic bricks of MIPL are reused in an efficient way. In MIPL v2.0, Mobile IPv6 is implemented using multi threads: one for handling the ICMPv6 messages, one for handling Mobility Header messages, and another one for handling tasks and time events. -To support Proxy Mobile IPv6, we extend these elements and implement handlers for all necessary messages and events. All ICMPv6 messages or Mobility Header messages are parsed as inputs to the finite state machine, which is the heart of the system. This finite state machine makes appropriate decisions and controls all other elements to provide a correct predefined protocol behavior. The PMIPv6 binding cache stores all information about MNs' points of attachment and it is kept up-to-date with the mobility of MNs. As Proxy Mobile IPv6 implementation is built on top of MIPL version 2.0, it could be, in the future, easily integrated in MIPL, growing in line with the standards as well as with MIPL source code -* -* - -* @section intro5 5.) Details of our real PMIPv6 testbed -*\image html PMIP_realtestbed.jpg "Our real PMIPv6 testbed details" -* -* It is totally based on IPv6. The functionalities developed for LMA and MAGs under MIPL v2.0.2 are used for creating the important entities in the PMIPv6 domain. An unmodified MN, which does not have any specific software for mobility, uses its Netgear wireless card to attach to one of the two Cisco Aironet 1100 series Access Points (APs), which support IEEE 802.11a/g specifications. Each AP is directly connected with a MAG. The implementation of MAG functionalities contains additional features and modifications of MIPL to handle PBU and PBA messages and mobility options, and a modified Router Advertisement daemon (RADVD), which unicasts RAs with a specific HNP per MN. Each MAG is connected to the LMA. The LMA is configured as a modified HA in MIPL which stores the HNP in the BCE for each MN and it is able to handle PBU and PBA messages. Finally, an unmodified CN is connected to the LMA. All the network entities in the test-bed are running Ubuntu with generic Linux kernel. -* -*
-* @section requirements requirements -* @verbinclude requirements Each Access Point in your testbed should have a SYSLOG client feature and MAC address masquerading feature. -*
-* -*/ -#ifndef __PMIP_H__ -# define __PMIP_H__ -//----------------------------------------------------------------------------- -# include // for NULL definition -# include -//----------------------------------------------------------------------------- -# include -# include -# include -# include -//----------------------------------------------------------------------------- -# include "mh.h" -//----------------------------------------------------------------------------- -# include "pmip_cache.h" -# include "pmip_consts.h" -# include "pmip_fsm.h" -# include "pmip_handler.h" -# include "pmip_hnp_cache.h" -# include "pmip_init.h" -# include "pmip_lma_proc.h" -# include "pmip_mag_proc.h" -# include "pmip_msgs.h" -# include "pmip_pcap.h" -# include "pmip_tunnel.h" -# include "pmip_types.h" -# ifdef ENABLE_VT -# include "vt.h" -# endif -# include "conf.h" -#endif -/*@}*/ diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/src/pmip/pmip_cache.c b/openair3/PMIPv6/pmipv6-daemon-umip/src/pmip/pmip_cache.c deleted file mode 100755 index 78ee572b48..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/src/pmip/pmip_cache.c +++ /dev/null @@ -1,378 +0,0 @@ -/* - * This file is part of the PMIP, Proxy Mobile IPv6 for Linux. - * - * Authors: OPENAIR3 - * - * Copyright 2010-2011 EURECOM (Sophia-Antipolis, FRANCE) - * - * Proxy Mobile IPv6 (or PMIPv6, or PMIP) is a network-based mobility - * management protocol standardized by IETF. It is a protocol for building - * a common and access technology independent of mobile core networks, - * accommodating various access technologies such as WiMAX, 3GPP, 3GPP2 - * and WLAN based access architectures. Proxy Mobile IPv6 is the only - * network-based mobility management protocol standardized by IETF. - * - * PMIP Proxy Mobile IPv6 for Linux has been built above MIPL free software; - * which it involves that it is under the same terms of GNU General Public - * License version 2. See MIPL terms condition if you need more details. - */ -/*! \file pmip_cache.c -* \brief PMIP binding cache functions -* \author OpenAir3 Group -* \date 12th of October 2010 -* \version 1.0 -* \company Eurecom -* \project OpenAirInterface -* \email: openair_tech@eurecom.fr -*/ - -#define PMIP -#define PMIP_CACHE_C -#ifdef HAVE_CONFIG_H -# include -#endif -//--------------------------------------------------------------------------------------------------------------------- -#include "pmip_cache.h" -#include "pmip_handler.h" -//--------------------------------------------------------------------------------------------------------------------- -#ifdef ENABLE_VT -# include "vt.h" -#endif -#include "debug.h" -#include "conf.h" -//--------------------------------------------------------------------------------------------------------------------- -static struct hash g_pmip_hash; -static int g_pmip_cache_count = 0; -//--------------------------------------------------------------------------------------------------------------------- -int get_pmip_cache_count(int type) -{ - if (type == BCE_PMIP || type == BCE_TEMP) { - return g_pmip_cache_count; - } - - return 0; -} -//--------------------------------------------------------------------------------------------------------------------- -void dump_pbce(void *bce, void *os) -{ - pmip_entry_t *e = (pmip_entry_t *) bce; - FILE *out = (FILE *) os; - fprintf(out, " == Proxy Binding Cache entry "); - - switch (e->type) { - case BCE_PMIP: - fprintf(out, "(BCE_PMIP)\n"); - break; - - case BCE_TEMP: - fprintf(out, "(BCE_TEMP)\n"); - break; - - default: - fprintf(out, "(Unknown)\n"); - } - - fprintf(out, " MN IID: %x:%x:%x:%x:%x:%x:%x:%x\n", NIP6ADDR(&e->mn_suffix)); - fprintf(out, " MN HW Address: %x:%x:%x:%x:%x:%x:%x:%x\n", NIP6ADDR(&e->mn_hw_address)); - fprintf(out, " MN Serving MAG Address: %x:%x:%x:%x:%x:%x:%x:%x\n", NIP6ADDR(&e->mn_serv_mag_addr)); - fprintf(out, " MN Serving LMA Address: %x:%x:%x:%x:%x:%x:%x:%x\n", NIP6ADDR(&e->mn_serv_lma_addr)); - fprintf(out, " lifetime %ld\n ", e->lifetime.tv_sec); - fprintf(out, " seqno %d\n", e->seqno_out); - fflush(out); -} -//--------------------------------------------------------------------------------------------------------------------- -int pmip_cache_init(void) -{ - int ret; - int mutex_return_code; - - if (pthread_rwlock_init(&pmip_lock, NULL)) { - return -1; - } - - mutex_return_code = pthread_rwlock_wrlock(&pmip_lock); - - if (mutex_return_code != 0) { - dbg("pthread_rwlock_wrlock(&pmip_lock) %s\n", strerror(mutex_return_code)); - } - - ret = hash_init(&g_pmip_hash, DOUBLE_ADDR, PMIP_CACHE_BUCKETS); - - mutex_return_code = pthread_rwlock_unlock(&pmip_lock); - - if (mutex_return_code != 0) { - dbg("pthread_rwlock_unlock(&pmip_lock) %s\n", strerror(mutex_return_code)); - } - -#ifdef ENABLE_VT - - if (ret < 0) - return ret; - - ret = vt_pbc_init(); -#endif - return ret; -} -//--------------------------------------------------------------------------------------------------------------------- -void init_iface_ra() -{ - router_ad_iface.AdvSendAdvert = DFLT_AdvSendAdv; - router_ad_iface.MaxRtrAdvInterval = DFLT_MaxRtrAdvInterval; - router_ad_iface.MinRtrAdvInterval = 1; //changed from -1 - router_ad_iface.AdvIntervalOpt = DFLT_AdvIntervalOpt; - router_ad_iface.AdvCurHopLimit = DFLT_AdvCurHopLimit; - router_ad_iface.AdvHomeAgentFlag = DFLT_AdvHomeAgentFlag; - router_ad_iface.AdvHomeAgentInfo = DFLT_AdvHomeAgentInfo; - router_ad_iface.HomeAgentPreference = DFLT_HomeAgentPreference; - router_ad_iface.HomeAgentLifetime = 10000; //changed from -1 - router_ad_iface.AdvReachableTime = DFLT_AdvReachableTime; - router_ad_iface.AdvRetransTimer = DFLT_AdvRetransTimer; - router_ad_iface.AdvDefaultLifetime = 6000; - router_ad_iface.AdvManagedFlag = 0; - router_ad_iface.AdvOtherConfigFlag = 0; - // default values for Prefix. - router_ad_iface.Adv_Prefix.AdvOnLinkFlag = DFLT_AdvOnLinkFlag; - router_ad_iface.Adv_Prefix.AdvAutonomousFlag = DFLT_AdvAutonomousFlag; - router_ad_iface.Adv_Prefix.AdvRouterAddr = DFLT_AdvRouterAddr; - router_ad_iface.Adv_Prefix.PrefixLen = 64; - router_ad_iface.Adv_Prefix.AdvValidLifetime = DFLT_AdvValidLifetime; - router_ad_iface.Adv_Prefix.AdvPreferredLifetime = DFLT_AdvPreferredLifetime; -} -//--------------------------------------------------------------------------------------------------------------------- -pmip_entry_t *pmip_cache_alloc(int type) -{ - pmip_entry_t *tmp; - tmp = malloc(sizeof(pmip_entry_t)); - - if (tmp == NULL) { - dbg("NO memory allocated for PMIP cache entry..\n"); - return NULL; - } - - memset(tmp, 0, sizeof(*tmp)); - - if (pthread_rwlock_init(&tmp->lock, NULL)) { - free(tmp); - return NULL; - } - - INIT_LIST_HEAD(&tmp->tqe.list); - tmp->type = type; - dbg("PMIP cache entry is allocated..\n"); - return tmp; -} -//--------------------------------------------------------------------------------------------------------------------- -static int __pmipcache_insert(pmip_entry_t * bce) -{ - int ret; - ret = hash_add(&g_pmip_hash, bce, &bce->our_addr, &bce->mn_hw_address); - - if (ret) { - return ret; - } - - g_pmip_cache_count++; - dbg("PMIP cache entry is inserted for: %x:%x:%x:%x:%x:%x:%x:%x <-> %x:%x:%x:%x:%x:%x:%x:%x\n", NIP6ADDR(&bce->our_addr), NIP6ADDR(&bce->mn_hw_address)); - return 0; -} -//--------------------------------------------------------------------------------------------------------------------- -int pmip_cache_start(pmip_entry_t * bce) -{ - dbg("PMIP cache start is initialized add task pmip_timer_bce_expired_handler in %d seconds\n", bce->lifetime.tv_sec); - struct timespec expires; - clock_gettime(CLOCK_REALTIME, &bce->add_time); - tsadd(bce->add_time, bce->lifetime, expires); - - add_task_abs(&expires, &bce->tqe, pmip_timer_bce_expired_handler); - return 0; -} -//--------------------------------------------------------------------------------------------------------------------- -pmip_entry_t *pmip_cache_add(pmip_entry_t * bce) -{ - int ret = 1; - int mutex_return_code; - assert(bce); - bce->unreach = 0; - mutex_return_code = pthread_rwlock_wrlock(&pmip_lock); - - if (mutex_return_code != 0) { - dbg("pthread_rwlock_wrlock(&pmip_lock) %s\n", strerror(mutex_return_code)); - } - - if ((ret = __pmipcache_insert(bce)) != 0) { - pthread_rwlock_unlock(&pmip_lock); - dbg("WARNING: PMIP ENTRY NOT INSERTED..\n"); - return NULL; - } - - dbg("Making Entry\n"); - dbg("PMIP cache entry for: %x:%x:%x:%x:%x:%x:%x:%x with type %d is added\n", NIP6ADDR(&bce->mn_hw_address), bce->type); - bce->n_rets_counter = conf.MaxMessageRetransmissions; - dbg("Retransmissions counter intialized: %d\n", bce->n_rets_counter); - - if (bce->type == BCE_PMIP) { - pmip_cache_start(bce); - } - - mutex_return_code = pthread_rwlock_unlock(&pmip_lock); - - if (mutex_return_code != 0) { - dbg("pthread_rwlock_unlock(&pmip_lock) %s\n", strerror(mutex_return_code)); - } - - return bce; -} -//--------------------------------------------------------------------------------------------------------------------- -pmip_entry_t *pmip_cache_get(const struct in6_addr * our_addr, const struct in6_addr * peer_addr) -{ - pmip_entry_t *bce; - int mutex_return_code; - - assert(peer_addr && our_addr); - mutex_return_code = pthread_rwlock_rdlock(&pmip_lock); - - if (mutex_return_code != 0) { - dbg("pthread_rwlock_rdlock(&pmip_lock) %s\n", strerror(mutex_return_code)); - } - - bce = hash_get(&g_pmip_hash, our_addr, peer_addr); - - if (bce) { - mutex_return_code = pthread_rwlock_wrlock(&bce->lock); - - if (mutex_return_code != 0) { - dbg("pthread_rwlock_wrlock(&bce->lock) %s\n", strerror(mutex_return_code)); - } - - dbg("PMIP cache entry is found for: %x:%x:%x:%x:%x:%x:%x:%x with type %d\n", NIP6ADDR(&bce->mn_hw_address), (bce->type)); - } else { - mutex_return_code = pthread_rwlock_unlock(&pmip_lock); - - if (mutex_return_code != 0) { - dbg("pthread_rwlock_unlock(&pmip_lock) %s\n", strerror(mutex_return_code)); - } - - dbg("PMIP cache entry is NOT found for %x:%x:%x:%x:%x:%x:%x:%x <-> %x:%x:%x:%x:%x:%x:%x:%x\n", NIP6ADDR(our_addr), NIP6ADDR(peer_addr)); - } - - return bce; -} -//--------------------------------------------------------------------------------------------------------------------- -void pmipcache_release_entry(pmip_entry_t * bce) -{ - int mutex_return_code; - assert(bce); - mutex_return_code = pthread_rwlock_unlock(&bce->lock); - - if (mutex_return_code != 0) { - dbg("pthread_rwlock_unlock(&bce->lock) %s\n", strerror(mutex_return_code)); - } - - mutex_return_code = pthread_rwlock_unlock(&pmip_lock); - - if (mutex_return_code != 0) { - dbg("pthread_rwlock_unlock(&pmip_lock) %s\n", strerror(mutex_return_code)); - } -} -//--------------------------------------------------------------------------------------------------------------------- -int pmip_cache_exists(const struct in6_addr *our_addr, const struct in6_addr *peer_addr) -{ - pmip_entry_t *bce; - int type; - bce = pmip_cache_get(our_addr, peer_addr); - - if (bce == NULL) { - return -1; - } - - dbg("PMIP cache entry does exist with type: %d\n", (bce->type)); - type = bce->type; - pmipcache_release_entry(bce); - return type; -} -//--------------------------------------------------------------------------------------------------------------------- -void pmipcache_free(pmip_entry_t * bce) -{ - /* This function should really return allocated space to free - * pool. */ - int mutex_return_code; - mutex_return_code = pthread_rwlock_destroy(&bce->lock); - - if (mutex_return_code != 0) { - dbg("pthread_rwlock_destroy(&bce->lock) %s\n", strerror(mutex_return_code)); - } - - free(bce); - dbg("PMIP cache entry is free\n"); -} -//--------------------------------------------------------------------------------------------------------------------- -void pmip_bce_delete(pmip_entry_t * bce) -{ - int mutex_return_code; - - mutex_return_code = pthread_rwlock_wrlock(&bce->lock); - - if (mutex_return_code != 0) { - dbg("pthread_rwlock_wrlock(&bce->lock) %s\n", strerror(mutex_return_code)); - } - - del_task(&bce->tqe); - - if (bce->cleanup) { - bce->cleanup(bce); - } - - g_pmip_cache_count--; - hash_delete(&g_pmip_hash, &bce->our_addr, &bce->mn_hw_address); - mutex_return_code = pthread_rwlock_unlock(&bce->lock); - - if (mutex_return_code != 0) { - dbg("pthread_rwlock_unlock(&bce->lock) %s\n", strerror(mutex_return_code)); - } - - pmipcache_free(bce); - dbg("PMIP cache entry is deleted!\n"); -} -//--------------------------------------------------------------------------------------------------------------------- -void pmip_cache_delete(const struct in6_addr *our_addr, const struct in6_addr *peer_addr) -{ - int mutex_return_code; - pmip_entry_t *bce; - mutex_return_code = pthread_rwlock_wrlock(&pmip_lock); - - if (mutex_return_code != 0) { - dbg("pthread_rwlock_wrlock(&pmip_lock) %s\n", strerror(mutex_return_code)); - } - - bce = hash_get(&g_pmip_hash, our_addr, peer_addr); - - if (bce) { - pmip_bce_delete(bce); - } - - mutex_return_code = pthread_rwlock_unlock(&pmip_lock); - - if (mutex_return_code != 0) { - dbg("pthread_rwlock_unlock(&pmip_lock) %s\n", strerror(mutex_return_code)); - } -} -//--------------------------------------------------------------------------------------------------------------------- -int pmip_cache_iterate(int (*func) (void *, void *), void *arg) -{ - int err; - int mutex_return_code; - mutex_return_code = pthread_rwlock_rdlock(&pmip_lock); - - if (mutex_return_code != 0) { - dbg("pthread_rwlock_rdlock(&pmip_lock) %s\n", strerror(mutex_return_code)); - } - - err = hash_iterate(&g_pmip_hash, func, arg); - mutex_return_code = pthread_rwlock_unlock(&pmip_lock); - - if (mutex_return_code != 0) { - dbg("pthread_rwlock_unlock(&pmip_lock) %s\n", strerror(mutex_return_code)); - } - - return err; -} diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/src/pmip/pmip_cache.h b/openair3/PMIPv6/pmipv6-daemon-umip/src/pmip/pmip_cache.h deleted file mode 100755 index 807ceb499f..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/src/pmip/pmip_cache.h +++ /dev/null @@ -1,315 +0,0 @@ -/* - * This file is part of the PMIP, Proxy Mobile IPv6 for Linux. - * - * Authors: OPENAIR3 - * - * Copyright 2010-2011 EURECOM (Sophia-Antipolis, FRANCE) - * - * Proxy Mobile IPv6 (or PMIPv6, or PMIP) is a network-based mobility - * management protocol standardized by IETF. It is a protocol for building - * a common and access technology independent of mobile core networks, - * accommodating various access technologies such as WiMAX, 3GPP, 3GPP2 - * and WLAN based access architectures. Proxy Mobile IPv6 is the only - * network-based mobility management protocol standardized by IETF. - * - * PMIP Proxy Mobile IPv6 for Linux has been built above MIPL free software; - * which it involves that it is under the same terms of GNU General Public - * License version 2. See MIPL terms condition if you need more details. - */ -/*! \file pmip_cache.h -* \brief -* \author OpenAir3 Group -* \date 12th of October 2010 -* \version 1.0 -* \company Eurecom -* \project OpenAirInterface -* \email: openair_tech@eurecom.fr -*/ - -/** \defgroup CACHE BINDING CACHE - * \ingroup PMIP6D - * PMIP CACHE - * @{ - */ - -#ifndef __PMIP_CACHE_H__ -# define __PMIP_CACHE_H__ -//----------------------------------------------------------------------------- -# ifdef PMIP_CACHE_C -# define private_pmip_cache(x) x -# define protected_pmip_cache(x) x -# define public_pmip_cache(x) x -# else -# ifdef PMIP -# define private_pmip_cache(x) -# define protected_pmip_cache(x) extern x -# define public_pmip_cache(x) extern x -# else -# define private_pmip_cache(x) -# define protected_pmip_cache(x) -# define public_pmip_cache(x) extern x -# endif -# endif -//----------------------------------------------------------------------------- -# include -# include -# include -//----------------------------------------------------------------------------- -# include "tqueue.h" -# include "util.h" -# include "hash.h" -//----------------------------------------------------------------------------- -# include "pmip_types.h" - - -/*! \def PMIP_CACHE_BUCKETS -* \brief A macro that defines the number of buckets in the hashtable "binding cache entry". -*/ -# define PMIP_CACHE_BUCKETS 128 - -# ifndef ND_OPT_PI_FLAG_RADDR -# define ND_OPT_PI_FLAG_RADDR 0x20 -# endif -# define DFLT_AdvValidLifetime 86400 /* seconds */ -# define DFLT_AdvOnLinkFlag 1 -# define DFLT_AdvPreferredLifetime 14400 /* seconds */ -# define DFLT_AdvAutonomousFlag 1 -# ifndef ND_OPT_HAI_FLAG_SUPPORT_MR -# if BYTE_ORDER== BIG_ENDIAN -# define ND_OPT_HAI_FLAG_SUPPORT_MR 0x8000 -# else -# define ND_OPT_HAI_FLAG_SUPPORT_MR 0x0080 -# endif -# endif -# define DFLT_AdvSendAdv 1 -# define DFLT_MaxRtrAdvInterval 1.5 -# define DFLT_MinRtrAdvInterval 1 //(iface) (0.33 * (iface)->MaxRtrAdvInterval) -# define DFLT_AdvCurHopLimit 64 /* as per RFC 1700 or the next incarnation of it :) */ -# define DFLT_AdvReachableTime 0 -# define DFLT_AdvRetransTimer 0 -# define DFLT_HomeAgentPreference 20 -# define DFLT_AdvHomeAgentFlag 1 -# define DFLT_AdvIntervalOpt 1 -# define DFLT_AdvHomeAgentInfo 1 -# define DFLT_AdvRouterAddr 1 -# define MSG_SIZE 4096 - -/*! \struct adv_prefix_t -* \brief Data structure to store router advertisment informations. -*/ -typedef struct AdvPrefix_t { - struct in6_addr Prefix; /*!< \brief The IPv6 prefix */ - uint8_t PrefixLen; /*!< \brief The len of the IPv6 prefix */ - int - AdvOnLinkFlag; /*!< \brief When set, indicates that this prefix can be used for on-link determination. When not set the advertisement makes no statement about on-link or off-link properties of the prefix. For instance, the prefix might be used for address configuration with some of the addresses belonging to the prefix being on-link and others being off-link.*/ - int AdvAutonomousFlag; /*!< \brief When set, indicates that this prefix can be used for autonomous address configuration as specified in RFC 2462.*/ - uint32_t AdvValidLifetime; /*!< \brief The length of time in seconds (relative to the time the packet is sent) that the prefix is valid for the purpose of on-link determination.*/ - uint32_t - AdvPreferredLifetime; /*!< \brief The length of time in seconds (relative to the time the packet is sent) that addresses generated from the prefix via stateless address autoconfiguration remain preferred.*/ - /* Mobile IPv6 extensions */ - int - AdvRouterAddr; /*!< \brief When set, indicates that the address of interface is sent instead of network prefix, as is required by Mobile IPv6. When set, minimum limits specified by Mobile IPv6 are used for MinRtrAdvInterval and MaxRtrAdvInterval.*/ -} adv_prefix_t; - - -/*! \struct home_agent_info_t -* \brief Data structure to store home agent informations. Used for building a Router Advertisement message. -*/ -typedef struct HomeAgentInfo_t { - uint8_t type; /*!< \brief Always set to ND_OPT_HOME_AGENT_INFO */ - uint8_t length; - uint16_t flags_reserved; - uint16_t - preference; /*!< \brief The preference for the Home Agent sending this Router Advertisement. Values greater than 0 indicate more preferable Home Agent, values less than 0 indicate less preferable Home Agent. This option is ignored, if AdvHomeAgentInfo is not set.*/ - uint16_t - lifetime; /*!< \brief The length of time in seconds (relative to the time the packet is sent) that the router is offering Mobile IPv6 Home Agent services. A value 0 must not be used. The maximum lifetime is 65520 seconds (18.2 hours). This option is ignored, if AdvHomeAgentInfo is not set.*/ -} home_agent_info_t; - - -/*! \struct router_ad_iface_t -* \brief Data structure to router advertisement informations. Used for building a Router Advertisement message. -*/ -typedef struct ra_iface_t { - int AdvSendAdvert; /*!< \brief A flag indicating whether or not the router sends periodic router advertisements and responds to router solicitations. This option no longer has to be specified first, but it needs to be on to enable advertisement on this interface */ - double - MaxRtrAdvInterval; /*!< \brief The maximum time allowed between sending unsolicited multicast router advertisements from the interface, in seconds. Must be no less than 4 seconds and no greater than 1800 seconds. Minimum when using Mobile IPv6 extensions: 0.07.*/ - double - MinRtrAdvInterval; /*!< \brief The minimum time allowed between sending unsolicited multicast router advertisements from the interface, in seconds. Must be no less than 3 seconds and no greater than 0.75 * MaxRtrAdvInterval. Minimum when using Mobile IPv6 extensions: 0.03.*/ - uint32_t - AdvReachableTime; /*!< \brief The time, in milliseconds, that a node assumes a neighbor is reachable after having received a reachability confirmation. Used by the Neighbor Unreachability Detection algorithm (see Section 7.3 of RFC 2461). A value of zero means unspecified (by this router) */ - uint32_t - AdvRetransTimer; /*!< \brief The time, in milliseconds, between retransmitted Neighbor Solicitation messages. Used by address resolution and the Neighbor Unreachability Detection algorithm (see Sections 7.2 and 7.3 of RFC 2461). A value of zero means unspecified (by this router). */ - int32_t - AdvDefaultLifetime; /*!< \brief The lifetime associated with the default router in units of seconds. The maximum value corresponds to 18.2 hours. A lifetime of 0 indicates that the router is not a default router and should not appear on the default router list. The router lifetime applies only to the router's usefulness as a default router; it does not apply to information contained in other message fields or options. Options that need time limits for their information include their own lifetime fields. */ - int AdvMobRtrSupportFlag; /*!< \brief When set, the Home Agent signals it supports Mobile Router registrations (specified by NEMO Basic). AdvHomeAgentInfo must also be set when using this option.*/ - uint8_t - AdvCurHopLimit; /*!< \brief The default value that should be placed in the Hop Count field of the IP header for outgoing (unicast) IP packets. The value should be set to the current diameter of the Internet. The value zero means unspecified (by this router).*/ - /* Mobile IPv6 extensions */ - int AdvIntervalOpt; /*!< \brief When set, Advertisement Interval Option (specified by Mobile IPv6) is included in Router Advertisements. When set, minimum limits specified by Mobile IPv6 are used for MinRtrAdvInterval and MaxRtrAdvInterval. */ - int AdvHomeAgentInfo; /*!< \brief When set, Home Agent Information Option (specified by Mobile IPv6) is included in Router Advertisements. AdvHomeAgentFlag must also be set when using this option. */ - int AdvHomeAgentFlag; /*!< \brief When set, indicates that sending router is able to serve as Mobile IPv6 Home Agent. When set, minimum limits specified by Mobile IPv6 are used for MinRtrAdvInterval and MaxRtrAdvInterval. */ - uint16_t - HomeAgentPreference; /*!< \brief The preference for the Home Agent sending this Router Advertisement. Values greater than 0 indicate more preferable Home Agent, values less than 0 indicate less preferable Home Agent. This option is ignored, if AdvHomeAgentInfo is not set. */ - int32_t - HomeAgentLifetime; /*!< \brief The length of time in seconds (relative to the time the packet is sent) that the router is offering Mobile IPv6 Home Agent services. A value 0 must not be used. The maximum lifetime is 65520 seconds (18.2 hours). This option is ignored, if AdvHomeAgentInfo is not set. */ - int AdvManagedFlag; /*!< \brief When set, hosts use the administered (stateful) protocol for address autoconfiguration in addition to any addresses autoconfigured using stateless address autoconfiguration. The use of this flag is described in RFC 2462. */ - int AdvOtherConfigFlag; /*!< \brief When set, hosts use the administered (stateful) protocol for autoconfiguration of other (non-address) information. The use of this flag is described in RFC 2462. */ - adv_prefix_t Adv_Prefix; /*!< \brief see adv_prefix_t*/ -} router_ad_iface_t; - - -/*! \struct pmip_entry_t -* \brief Data structure "binding cache entry", to store all binding informations relative to a mobile node. -*/ -typedef struct pmip_entry_t { - struct in6_addr mn_prefix; /*!< \brief Network Address Prefix for MN */ - struct in6_addr our_addr; /*!< \brief Address to which we got BU */ - struct in6_addr mn_suffix; /*!< \brief MN IID */ - struct in6_addr mn_hw_address; /*!< \brief MAC ADDR */ - struct in6_addr mn_addr; /*!< \brief Full MN Address */ - struct in6_addr mn_serv_mag_addr; /*!< \brief Serving MAG Address */ - struct in6_addr mn_serv_lma_addr; /*!< \brief Serving LMA Address (attribute filled only on MAGs)*/ - struct in6_addr mn_link_local_addr; /*!< \brief Link Local Address for MN */ - struct timespec add_time; /*!< \brief When was the binding added or modified */ - struct timespec lifetime; /*!< \brief Lifetime sent in the Binding Update, in seconds */ - uint16_t seqno_in; /*!< \brief Sequence number for response messages */ - uint16_t seqno_out; /*!< \brief Sequence number for created messages */ - uint16_t PBU_flags; /*!< \brief PBU flags */ - uint8_t PBA_flags; /*!< \brief PBA flags */ - int type; /*!< \brief Entry type */ - int unreach; /*!< \brief ICMP dest unreach count */ - int tunnel; /*!< \brief Tunnel interface index */ - int link; /*!< \brief Home link interface index */ - /* PBU/PBRR message for retransmissions */ - struct iovec mh_vec[2 * (IP6_MHOPT_MAX + 1)]; /* was 7 */ - int iovlen; - /* info_block status flags */ - uint8_t status; /*!< \brief Info_block status flag*/ - ip6ts_t timestamp; /*!< \brief Info_block status timestamp*/ - uint32_t msg_event; /*!< \brief Info_block status msg_event*/ - - struct timespec br_lastsent; /*!< \brief BR ratelimit, for internal use only*/ - int br_count; /*!< \brief BR ratelimit, for internal use only*/ - int n_rets_counter; /*!< \brief Counter for N retransmissions before deleting the entry, for internal use only*/ - pthread_rwlock_t lock; /*!< \brief Protects the entry, for internal use only*/ - struct tq_elem tqe; /*!< \brief Timer queue entry for expire, for internal use only*/ - void (*cleanup) (struct pmip_entry_t * bce);/*!< \brief Clean up bce data, for internal use only*/ -} pmip_entry_t; - - -//Dedicated to PMIP cache -/*! \def BCE_NO_ENTRY -\brief A macro that defines the state of a binding cache entry, the state here is "unknown entry". -*/ -# define BCE_NO_ENTRY (-1) -/*! \def BCE_PMIP -\brief A macro that defines the state of a binding cache entry, the state here is "registered pmip entry". -*/ -# define BCE_PMIP 5 -/*! \def BCE_TEMP -\brief A macro that defines the state of a binding cache entry, the state here is "binding cache entry waiting for registration". -* \note This state is possible only on MAG entities, not LMA. -*/ -# define BCE_TEMP 6 - - -//-GLOBAL VARIABLES---------------------------------------------------------------------------- -/*! \var pthread_rwlock_t pmip_lock -\brief Global var mutex on the binding cache -*/ -protected_pmip_cache(pthread_rwlock_t pmip_lock;) -/*! \var router_ad_iface_t router_ad_iface -\brief Router advertisement structure containing all information that will be sent in the router advertisement message by MAGs. -*/ -protected_pmip_cache(router_ad_iface_t router_ad_iface;) - - -//-PROTOTYPES---------------------------------------------------------------------------- -/*! \fn int get_pmip_cache_count(int type) -* \brief -* \param[in] type The type of binding cache entry -* \return The number of binding cache entries in the cache. -*/ -private_pmip_cache(int get_pmip_cache_count(int type);) -/*! \fn void dump_pbce(void *bce, void *os) -* \brief Dump in an output stream, the content of a binding cache entry. -* \param[in] bce A binding cache entry. -* \param[in] os An output stream. -*/ -private_pmip_cache(void dump_pbce(void *bce, void *os);) -/*! \fn int pmip_cache_init(void) -* \brief Initialize the pmip cache -* \return The status of the initialization. -*/ -protected_pmip_cache(int pmip_cache_init(void);) -/*! \fn void init_iface_ra(void) -* \brief Set once the router advertisement parameters -*/ -protected_pmip_cache(void init_iface_ra(void);) -/*! \fn pmip_entry_t * pmip_cache_alloc(int type) -* \brief Allocates a new binding cache entry. Returns allocated space (pmip_entry_t*) for an entry or NULL if errors. -* \param[in] type The type of binding cache entry -* \return The allocated binding cache entry or NULL if memory space available or if initialization of the binding cache entry failled. -*/ -protected_pmip_cache(pmip_entry_t * pmip_cache_alloc(int type);) -/*! \fn int pmip_cache_start(pmip_entry_t *bce) -* \brief Start a timer on a binding cache entry. -* \param[in] bce a binding cache entry -* \return Always 0. -* \note A task queue element (see tqueue.c) is created and managed by a timed thread -*/ -protected_pmip_cache(int pmip_cache_start(pmip_entry_t * bce);) -/*! \fn pmip_entry_t * pmip_cache_add(pmip_entry_t *bce) -* \brief Add an entry in the binding cache. -* \param[in] bce a binding cache entry -* \return The binding cache entry if success, else NULL. -* \note If the binding cache entry type is BCE_PMIP, then a timer is started by a call to pmip_cache_start. -*/ -protected_pmip_cache(pmip_entry_t * pmip_cache_add(pmip_entry_t * bce);) -/*! \fn pmip_entry_t * pmip_cache_get(const struct in6_addr *our_addr, const struct in6_addr *peer_addr) -* \brief Add an entry in the binding cache. -* \param[in] our_addr the IPv6 fixed address of the PMIP entity -* \param[in] peer_addr peer hardware address (link-layer address) -* \return The corresponding cache entry, else NULL. -* \note If a binding cache entry is returned, its mutex is write locked, pmip mutex "pmip_lock" is also read-write locked. -*/ -protected_pmip_cache(pmip_entry_t * pmip_cache_get(const struct in6_addr *our_addr, const struct in6_addr *peer_addr);) -/*! \fn void pmipcache_release_entry(pmip_entry_t *bce) -* \brief Unlocks a binding cache entry. -* \param[in] bce a binding cache entry -* \note "pmip_lock" mutex is also unlocked. -*/ -protected_pmip_cache(void pmipcache_release_entry(pmip_entry_t * bce);) -/*! \fn int pmip_cache_exists(const struct in6_addr*, const struct in6_addr*) -* \brief Check the existence of a binding cache entry for a tuple of addresses in the binding cache. -* \param[in] our_addr the IPv6 fixed address of the PMIP entity -* \param[in] peer_addr peer hardware address (link-layer address) -* \return The type of the binding cache entry if found, -1 if entry not found. -* \note If a binding cache entry is found, its mutex is unlocked. -*/ -protected_pmip_cache(int pmip_cache_exists(const struct in6_addr *our_addr, const struct in6_addr *peer_addr);) -/*! \fn void pmipcache_free(pmip_entry_t *bce) -* \brief Free the allocated memory of a binding cache entry. -* \param[in] bce a binding cache entry -*/ -private_pmip_cache(void pmipcache_free(pmip_entry_t * bce);) -/*! \fn void pmip_bce_delete(pmip_entry_t*) -* \brief Remove a binding cache entry from the binding cache and free it. -* \param[in] bce a binding cache entry -*/ -protected_pmip_cache(void pmip_bce_delete(pmip_entry_t * bce);) -/*! \fn void pmip_cache_delete(const struct in6_addr*, const struct in6_addr*) -* \brief Search a binding cache entry in the binding cache corresponding to a tupple of addresses and remove this binding cache entry from the binding cache and free it. -* \param[in] our_addr the IPv6 fixed address of the PMIP entity -* \param[in] peer_addr peer hardware address (link-layer address) -*/ -protected_pmip_cache(void pmip_cache_delete(const struct in6_addr *our_addr, const struct in6_addr *peer_addr);) -/*! \fn int pmip_cache_iterate(int (*func) (void *, void *), void *arg) -* \brief Apply function to every BC entry. Iterates through proxy binding cache, calling \a func for each entry. Extra data may be passed to \a func in \a arg.\a func takes a bcentry as its first argument and \a arg as second argument. -* \param[in] func the int (*func) (void *, void *) function pointer to apply to every binding cache entry. -* \param[in] arg extra data for func -* \return The iterate status. -*/ -public_pmip_cache(int pmip_cache_iterate(int (*func) (void *, void *), void *arg);) -#endif -/** @}*/ diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/src/pmip/pmip_consts.h b/openair3/PMIPv6/pmipv6-daemon-umip/src/pmip/pmip_consts.h deleted file mode 100755 index ce9f18185b..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/src/pmip/pmip_consts.h +++ /dev/null @@ -1,95 +0,0 @@ -/* - * This file is part of the PMIP, Proxy Mobile IPv6 for Linux. - * - * Authors: OPENAIR3 - * - * Copyright 2010-2011 EURECOM (Sophia-Antipolis, FRANCE) - * - * Proxy Mobile IPv6 (or PMIPv6, or PMIP) is a network-based mobility - * management protocol standardized by IETF. It is a protocol for building - * a common and access technology independent of mobile core networks, - * accommodating various access technologies such as WiMAX, 3GPP, 3GPP2 - * and WLAN based access architectures. Proxy Mobile IPv6 is the only - * network-based mobility management protocol standardized by IETF. - * - * PMIP Proxy Mobile IPv6 for Linux has been built above MIPL free software; - * which it involves that it is under the same terms of GNU General Public - * License version 2. See MIPL terms condition if you need more details. - */ -/*! \file pmip_consts.h -* \brief Describe all constants for pmip -* \author OpenAir3 Group -* \date 12th of October 2010 -* \version 1.0 -* \company Eurecom -* \project OpenAirInterface -* \email: openair_tech@eurecom.fr -*/ - -/** \defgroup CONSTANTS CONSTANTS - * \ingroup PMIP6D - * PMIP CONSTANTS - * @{ - */ - -#ifndef __pmip_consts_h -# define __pmip_consts_h -# include -# include "conf.h" - -# define MAX_MOBILES 64 - -/* -* Mobility Header Message Option Types -* new mobility header options types defined -*/ -# define IP6_MHOPT_MOBILE_NODE_IDENTIFIER 0x08 /* Mobile Node Identifier Option */ -/* -* Mobility Header Message Option Types -*/ -# define IP6_MHOPT_DST_MN_ADDR 0x0B /* Source Mobile Node address */ -# define IP6_MHOPT_SERV_MAG_ADDR 0x0C /* Serving MAG address */ -# define IP6_MHOPT_SERV_LMA_ADDR 0x0D /* Source Mobile Node address */ -# define IP6_MHOPT_SRC_MN_ADDR 0x0E /* Source Mobile Node address */ -# define IP6_MHOPT_SRC_MAG_ADDR 0x0F /* Serving MAG address */ -# define IP6_MHOPT_HOME_NETWORK_PREFIX 0x16 /* Home Network Prefix */ -# define IP6_MHOPT_HANDOFF_INDICATOR 0x17 /* Handoff Indicator Option */ -# define IP6_MHOPT_ACCESS_TECHNOLOGY_TYPE 0x18 /* Access Technology Type Option */ -# define IP6_MHOPT_MOBILE_NODE_LINK_LAYER_IDENTIFIER 0x19 /* Mobile Node Link Local Identifier Option */ -# define IP6_MHOPT_LINK_LOCAL_ADDRESS 0x1A /* link local address */ -# define IP6_MHOPT_TIME_STAMP 0x1B /* Timestamp */ -# define IP6_MHOPT_PMIP_MAX IP6_MHOPT_TIME_STAMP - - -# define IP6_MHOPT_HI_RESERVED 0 -# define IP6_MHOPT_HI_ATTACHMENT_OVER_NEW_INTERFACE 1 -# define IP6_MHOPT_HI_HANDOFF_BETWEEN_2_DIFF_INTERFACES_OF_SAME_MOBILE_NODE 2 -# define IP6_MHOPT_HI_HANDOFF_BETWEEN_MAGS_FOR_SAME_INTERFACE 3 -# define IP6_MHOPT_HI_HANDOFF_STATE_UNKNOWN 4 -# define IP6_MHOPT_HI_HANDOFF_STATE_NOT_CHANGED 5 - -# define IP6_MHOPT_ATT_RESERVED 0 -# define IP6_MHOPT_ATT_VIRTUAL 1 -# define IP6_MHOPT_ATT_PPP 2 -# define IP6_MHOPT_ATT_IEEE802_3 3 -# define IP6_MHOPT_ATT_IEEE802_11ABG 4 -# define IP6_MHOPT_ATT_IEEE802_16E 5 - -# define IP6_MH_TYPE_PBREQ 8 /* Proxy Binding Request */ -# define IP6_MH_TYPE_PBRES 9 /* Proxy Binding Response */ - - -//Define STATUS FLAGS for FSM. -# define hasDEREG 0x00000050 /* Has a DEREG */ -/*!< \brief WLCCP message originating from access point, captured on MAG, message informing about wireless association of a mobile node with the access point */ -# define hasWLCCP 0x00000040 /* Has a WLCCP CISCO protocol */ -# define hasRS 0x00000030 /* Has a RS */ -# define hasNA 0x00000020 /* Has a NA */ -# define hasNS 0x00000010 /* Has a NS */ -# define hasPBU 0x00000008 /* Has a PBU */ -# define hasPBA 0x00000004 /* Has a PBA */ -# define hasPBREQ 0x00000002 /* Has a PBRR */ -# define hasPBRES 0x00000001 /* Has a PBRE */ -# define PREFIX_LENGTH 64 -#endif -/** @}*/ diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/src/pmip/pmip_fsm.c b/openair3/PMIPv6/pmipv6-daemon-umip/src/pmip/pmip_fsm.c deleted file mode 100755 index 163fd47a4d..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/src/pmip/pmip_fsm.c +++ /dev/null @@ -1,331 +0,0 @@ -/* - * This file is part of the PMIP, Proxy Mobile IPv6 for Linux. - * - * Authors: OPENAIR3 - * - * Copyright 2010-2011 EURECOM (Sophia-Antipolis, FRANCE) - * - * Proxy Mobile IPv6 (or PMIPv6, or PMIP) is a network-based mobility - * management protocol standardized by IETF. It is a protocol for building - * a common and access technology independent of mobile core networks, - * accommodating various access technologies such as WiMAX, 3GPP, 3GPP2 - * and WLAN based access architectures. Proxy Mobile IPv6 is the only - * network-based mobility management protocol standardized by IETF. - * - * PMIP Proxy Mobile IPv6 for Linux has been built above MIPL free software; - * which it involves that it is under the same terms of GNU General Public - * License version 2. See MIPL terms condition if you need more details. - */ -/*! \file pmip_fsm.c - * \brief - * \author OpenAir3 Group - * \date 12th of October 2010 - * \version 1.0 - * \company Eurecom - * \project OpenAirInterface - * \email: openair_tech@eurecom.fr - */ -#define PMIP -#define PMIP_FSM_C -#ifdef HAVE_CONFIG_H -#include -#endif -//--------------------------------------------------------------------------------------------------------------------- -#include "pmip_fsm.h" -#include "pmip_hnp_cache.h" -#include "pmip_lma_proc.h" -#include "pmip_mag_proc.h" -#include "pmip_handler.h" -//--------------------------------------------------------------------------------------------------------------------- -#ifdef ENABLE_VT -# include "vt.h" -#endif -#include "debug.h" -#include "conf.h" -//--------------------------------------------------------------------------------------------------------------------- -int mag_init_fsm(void) -{ - if (pthread_rwlock_init(&fsm_lock, NULL)) - return -1; - else - return 0; -} -//--------------------------------------------------------------------------------------------------------------------- -int mag_fsm(msg_info_t * info) -{ - int result = 0; - int aaa_result = 0; - pmip_entry_t *bce; - struct in6_addr prefix; - struct in6_addr hw_address = EUI64_to_EUI48(info->mn_iid); - int type = pmip_cache_exists(&conf.OurAddress, &hw_address); - int mutex_return_code; - - - mutex_return_code = pthread_rwlock_wrlock(&fsm_lock); - - if (mutex_return_code != 0) { - dbg("pthread_rwlock_wrlock(&fsm_lock) %s\n", strerror(mutex_return_code)); - } - - switch (type) { - //-------------------------------------- - case BCE_NO_ENTRY: - dbg("BCE_NO_ENTRY\n"); - - if (info->iif == g_ingress_iif) { - if (info->msg_event == hasRS) { - dbg("New MN is found sending RS, start new registration ...\n\n"); - bce = pmip_cache_alloc(BCE_TEMP); - prefix = mnid_hnp_map(hw_address, &aaa_result); - - if (aaa_result >= 0) { - bce->mn_prefix = prefix; - bce->mn_suffix = info->mn_iid; - bce->mn_hw_address = EUI64_to_EUI48(info->mn_iid); - info->mn_prefix = prefix; - result = mag_pmip_md(info, bce); - dbg("Movement detection is finished, now going to add an entry into the cache\n\n"); - pmip_cache_add(bce); - dbg("pmip_cache_add is done \n\n"); - } else { - dbg("Authentication failed\n"); - } - - //yet to process - } else if (info->msg_event == hasWLCCP) { - dbg("Incoming MN is detected by Wireless Access Point, start new registration ...\n\n"); - bce = pmip_cache_alloc(BCE_TEMP); - prefix = mnid_hnp_map(hw_address, &aaa_result); - - if (aaa_result >= 0) { - bce->mn_prefix = prefix; - bce->mn_suffix = info->mn_iid; - bce->mn_hw_address = hw_address; - info->mn_prefix = prefix; - result = mag_pmip_md(info, bce); - dbg("Movement detection is finished, now going to add an entry into the cache\n\n"); - pmip_cache_add(bce); - dbg("pmip_cache_add is done \n\n"); - } else { - dbg("Authentication failed\n"); - } - - //yet to process - } else if (info->msg_event == hasDEREG) { - dbg("Received DEREG message\n"); - dbg("No action for this event (%d) at current state (%d) !\n", info->msg_event, type); - } - } else { - dbg("Received Message on wrong interface index (%d instead of %d), ignoring this message\n\n", info->iif, g_ingress_iif); - } - - break; - - //-------------------------------------- - case BCE_TEMP: - dbg("BCE_TEMP\n"); - - if (info->msg_event == hasPBA) { - bce = pmip_cache_get(&conf.OurAddress, &hw_address); - - if (is_pba_is_response_to_last_pbu_sent(info, bce)) { - dbg("Handling PBA. Moving from BCE_TEMP to BCE_PMIP\n"); - dbg("Finish Location Registration\n"); - //Modify the entry with additional info. - del_task(&bce->tqe); //Delete timer retransmission PBU (if any) - bce->PBA_flags = info->PBA_flags; - - // trick not to let LMA break the tunnel a few milli-seconds before MAG send a new PBU -> loss of traffic - if (info->lifetime.tv_sec > 10) { - bce->lifetime.tv_sec = info->lifetime.tv_sec - 8; - dbg("Set BCE lifetime to PBA lifetime (%d seconds) - 8 second = %d seconds\n", info->lifetime.tv_sec, bce->lifetime.tv_sec); - } else if (info->lifetime.tv_sec > 5) { - bce->lifetime.tv_sec = info->lifetime.tv_sec - 3; - dbg("Set BCE lifetime to PBA lifetime (%d seconds) - 3 second = %d seconds\n", info->lifetime.tv_sec, bce->lifetime.tv_sec); - } else if (info->lifetime.tv_sec > 1) { - bce->lifetime.tv_sec = info->lifetime.tv_sec - 1; - dbg("Set BCE lifetime to PBA lifetime (%d seconds) - 1 second = %d seconds\n", info->lifetime.tv_sec, bce->lifetime.tv_sec); - } else { - bce->lifetime.tv_sec = info->lifetime.tv_sec; - dbg("Set BCE lifetime to PBA lifetime (%d seconds) = %d seconds\n", info->lifetime.tv_sec, bce->lifetime.tv_sec); - } - - dbg("Prefix before ending registration : %x:%x:%x:%x:%x:%x:%x:%x \n", NIP6ADDR(&bce->mn_prefix)); - // LG COMMENT GOT PREFIX BY RADIUS - bce->mn_prefix = info->mn_prefix; //adding the hn prefix value receive in PBA to MAG cache - mag_end_registration(bce, info->iif); - } - - pmipcache_release_entry(bce); - } - - break; - - //-------------------------------------- - case BCE_PMIP: - dbg("BCE_PMIP\n"); - - if (info->msg_event == hasRS) { - dbg("Router solicitation received for existing MN\n"); - bce = pmip_cache_get(&conf.OurAddress, &hw_address); - dbg("prefix before entering kickoff_ra : %x:%x:%x:%x:%x:%x:%x:%x \n", NIP6ADDR(&bce->mn_prefix)); - mag_kickoff_ra(bce); - pmipcache_release_entry(bce); - dbg("RA sent after router solicitation ...\n"); - } else if (info->msg_event == hasPBA) { - bce = pmip_cache_get(&conf.OurAddress, &hw_address); - - if (is_pba_is_response_to_last_pbu_sent(info, bce)) { - dbg("Finish Location Registration\n"); - //Modify the entry with additional info. - del_task(&bce->tqe); //Delete timer retransmission PBU (if any) - bce->PBA_flags = info->PBA_flags; - // trick not to let LMA break the tunnel a few milli-seconds before MAG send a new PBU -> loss of traffic - bce->lifetime.tv_nsec = 0; - - if (info->lifetime.tv_sec > 10) { - bce->lifetime.tv_sec = info->lifetime.tv_sec - 8; - dbg("Set BCE lifetime to PBA lifetime (%d seconds) - 8 second = %d seconds\n", info->lifetime.tv_sec, bce->lifetime.tv_sec); - } else if (info->lifetime.tv_sec > 5) { - bce->lifetime.tv_sec = info->lifetime.tv_sec - 3; - dbg("Set BCE lifetime to PBA lifetime (%d seconds) - 3 second = %d seconds\n", info->lifetime.tv_sec, bce->lifetime.tv_sec); - } else if (info->lifetime.tv_sec > 1) { - bce->lifetime.tv_sec = info->lifetime.tv_sec - 1; - dbg("Set BCE lifetime to PBA lifetime (%d seconds) - 1 second = %d seconds\n", info->lifetime.tv_sec, bce->lifetime.tv_sec); - } else { - bce->lifetime.tv_sec = info->lifetime.tv_sec; - dbg("Set BCE lifetime to PBA lifetime (%d seconds) = %d seconds\n", info->lifetime.tv_sec, bce->lifetime.tv_sec); - } - - dbg("Prefix before ending registration : %x:%x:%x:%x:%x:%x:%x:%x \n", NIP6ADDR(&bce->mn_prefix)); - // LG COMMENT GOT PREFIX BY RADIUS - bce->mn_prefix = info->mn_prefix; //adding the hn prefix value receive in PBA to MAG cache - mag_end_registration_no_new_tunnel(bce, info->iif); - } - - pmipcache_release_entry(bce); - } else if (info->msg_event == hasWLCCP) { - dbg("Incomming MN is detected by Wireless Access Point, existing MN\n"); - bce = pmip_cache_get(&conf.OurAddress, &hw_address); - dbg("Prefix before entering kickoff_ra : %x:%x:%x:%x:%x:%x:%x:%x \n", NIP6ADDR(&bce->mn_prefix)); - mag_kickoff_ra(bce); - // Some case where the access point did not detect the departure of the mobile node - // so we have to register again to the LMA - mag_force_update_registration(bce, info->iif); - pmipcache_release_entry(bce); - dbg("RA sent after MN AP detection ...\n"); - } else if (info->msg_event == hasDEREG) { - dbg("Deregistration procedure detected by Wireless Access Point for a registered MN\n"); - dbg("Start Location Deregistration\n"); - bce = pmip_cache_get(&conf.OurAddress, &hw_address); - mag_dereg(bce, 1); - pmipcache_release_entry(bce); - pmip_bce_delete(bce); - } else if (info->msg_event == hasNA) { - //Reset counter, Delete task for entry deletion & Add a new task for NS expiry. - bce = pmip_cache_get(&conf.OurAddress, &hw_address); - bce->n_rets_counter = conf.MaxMessageRetransmissions; //Reset the Retransmissions Counter. - dbg("Reset the Reachability Counter = %d for %x:%x:%x:%x:%x:%x:%x:%x\n", bce->n_rets_counter, NIP6ADDR(&info->mn_iid)); - del_task(&bce->tqe); - mag_force_update_registration(bce, info->iif); - //pmip_cache_start(bce); - pmipcache_release_entry(bce); - } - - break; - - default: - dbg("No action for this event (%d) at current state (%d) !\n", info->msg_event, type); - } - - mutex_return_code = pthread_rwlock_unlock(&fsm_lock); - - if (mutex_return_code != 0) { - dbg("pthread_rwlock_unlock(&fsm_lock) %s\n", strerror(mutex_return_code)); - } - - return result; -} -//--------------------------------------------------------------------------------------------------------------------- -int lma_fsm(msg_info_t * info) -{ - struct in6_addr r_tmp1; - int result = 0; - pmip_entry_t *bce = NULL; - struct in6_addr hw_address = EUI64_to_EUI48(info->mn_iid); - int type = pmip_cache_exists(&conf.OurAddress, &hw_address); - - switch (type) { - //-------------------------------------- - case BCE_NO_ENTRY: - dbg("No PMIP entry found for %x:%x:%x:%x:%x:%x:%x:%x ... \n", NIP6ADDR(&info->mn_iid)); - - if (info->msg_event == hasPBU && (info->lifetime.tv_sec > 0)) { - //Create New Proxy Binding Entry storing information - dbg("PBU for a new MN ... Location Registration starting now...\n"); - bce = pmip_cache_alloc(BCE_PMIP); - - if (bce != NULL) { - pmip_insert_into_hnp_cache(hw_address, info->mn_prefix); - lma_update_binding_entry(bce, info); //Save information into bce - lma_reg(bce); - pmip_cache_add(bce); - } - } else if ((info->msg_event == hasPBU) && (info->lifetime.tv_sec == 0) && (info->lifetime.tv_nsec == 0)) { - dbg("PBU with Lifetime = 0 for a not-registered MN... \n"); - // LG Comment lma_dereg(bce, info, 0); - // LG Comment pmipcache_release_entry(bce); - } - - break; - - //-------------------------------------- - case BCE_PMIP: - if ((info->msg_event == hasPBU) && (info->lifetime.tv_sec > 0)) { - dbg("PBU for an existing MN ... update serving MAG\n"); - bce = pmip_cache_get(&conf.OurAddress, &hw_address); - memset(&r_tmp1, 0, sizeof(struct in6_addr)); - - if (IN6_ARE_ADDR_EQUAL(&r_tmp1, &bce->mn_serv_mag_addr)) { //Received PBU from serving MAG - lma_update_binding_entry(bce, info); - lma_reg(bce); - } - - if (IN6_ARE_ADDR_EQUAL(&info->src, &bce->mn_serv_mag_addr) ) { //Received PBU from serving MAG - lma_update_binding_entry(bce, info); - lma_reg_no_new_tunnel (bce); - } else { //Received PBU from an already unregistered MAG - dbg("Deregistration for previously registered MAG\n"); - lma_dereg(bce, info, 0); - bce->type = BCE_PMIP; - lma_update_binding_entry(bce, info); - lma_reg(bce); - } - - pmipcache_release_entry(bce); - } else if (info->msg_event == hasPBU && info->lifetime.tv_sec == 0 && info->lifetime.tv_nsec == 0) { - dbg("PBU with Lifetime = 0... start Location Deregistration\n"); - bce = pmip_cache_get(&conf.OurAddress, &hw_address); - - if (IN6_ARE_ADDR_EQUAL(&info->src, &bce->mn_serv_mag_addr)) { //Received PBU from serving MAG - dbg("Deregistration case...\n"); - lma_dereg(bce, info, 1); - pmipcache_release_entry(bce); - pmip_bce_delete(bce); - } else { //Received PBU from an already unregistered MAG - dbg("Deregistration for not registered MAG, doing nothing\n"); - //lma_dereg(bce, info, 0); - pmipcache_release_entry(bce); - } - } - - // update bce->mn_addr attribute for vt display - get_mn_addr(bce); - break; - - //-------------------------------------- - default: - dbg("No action for this event (%d) at current state (%d) !\n", info->msg_event, type); - } - - return result; -} diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/src/pmip/pmip_fsm.h b/openair3/PMIPv6/pmipv6-daemon-umip/src/pmip/pmip_fsm.h deleted file mode 100755 index df0c1b8c47..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/src/pmip/pmip_fsm.h +++ /dev/null @@ -1,81 +0,0 @@ -/* - * This file is part of the PMIP, Proxy Mobile IPv6 for Linux. - * - * Authors: OPENAIR3 - * - * Copyright 2010-2011 EURECOM (Sophia-Antipolis, FRANCE) - * - * Proxy Mobile IPv6 (or PMIPv6, or PMIP) is a network-based mobility - * management protocol standardized by IETF. It is a protocol for building - * a common and access technology independent of mobile core networks, - * accommodating various access technologies such as WiMAX, 3GPP, 3GPP2 - * and WLAN based access architectures. Proxy Mobile IPv6 is the only - * network-based mobility management protocol standardized by IETF. - * - * PMIP Proxy Mobile IPv6 for Linux has been built above MIPL free software; - * which it involves that it is under the same terms of GNU General Public - * License version 2. See MIPL terms condition if you need more details. - */ -/*! \file pmip_fsm.h -* \brief -* \author OpenAir3 Group -* \date 12th of October 2010 -* \version 1.0 -* \company Eurecom -* \project OpenAirInterface -* \email: openair_tech@eurecom.fr -*/ - -/** @defgroup FINITE_STATE_MACHINE FINITE STATE MACHINE - * @ingroup PMIP6D - * PMIP Finite State Machine (FSM) - * @{ - */ - -#ifndef __PMIP_FSM_H__ -# define __PMIP_FSM_H__ -//----------------------------------------------------------------------------- -# ifdef PMIP_FSM_C -# define private_pmip_fsm(x) x -# define protected_pmip_fsm(x) x -# define public_pmip_fsm(x) x -# else -# ifdef PMIP -# define private_pmip_fsm(x) -# define protected_pmip_fsm(x) extern x -# define public_pmip_fsm(x) extern x -# else -# define private_pmip_fsm(x) -# define protected_pmip_fsm(x) -# define public_pmip_fsm(x) extern x -# endif -# endif -//----------------------------------------------------------------------------- -# include -# include "pmip_msgs.h" -//----------------------------------------------------------------------------- -/*! \fn int mag_init_fsm(void) -* \brief Initialization of the Finite state machine of the MAG. -* \return The status of the initialization, 0 for success, else -1. -* \note Initialization of the mutex only. -*/ -protected_pmip_fsm(int mag_init_fsm(void);) - -/*! \fn int mag_fsm(msg_info_t *info) -* \brief Finite state machine of the MAG. -* \param[in] info All informations about the event received. -* \return 0 for success and -1 if error -*/ -protected_pmip_fsm(int mag_fsm(msg_info_t *info);) -/*! \fn int lma_fsm(msg_info_t *info) -* \brief Finite state machine of the LMA. -* \param[in] info All informations about the event received. -* \return 0 for success and -1 if error -*/ -protected_pmip_fsm(int lma_fsm(msg_info_t *info);) -/*! \var pthread_rwlock_t fsm_lock -\brief Global var mutex on the MAG finite state machine. -*/ -private_pmip_fsm(pthread_rwlock_t fsm_lock;) -#endif -/** @}*/ diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/src/pmip/pmip_handler.c b/openair3/PMIPv6/pmipv6-daemon-umip/src/pmip/pmip_handler.c deleted file mode 100755 index 222ed049e4..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/src/pmip/pmip_handler.c +++ /dev/null @@ -1,413 +0,0 @@ -/* - * This file is part of the PMIP, Proxy Mobile IPv6 for Linux. - * - * Authors: OPENAIR3 - * - * Copyright 2010-2011 EURECOM (Sophia-Antipolis, FRANCE) - * - * Proxy Mobile IPv6 (or PMIPv6, or PMIP) is a network-based mobility - * management protocol standardized by IETF. It is a protocol for building - * a common and access technology independent of mobile core networks, - * accommodating various access technologies such as WiMAX, 3GPP, 3GPP2 - * and WLAN based access architectures. Proxy Mobile IPv6 is the only - * network-based mobility management protocol standardized by IETF. - * - * PMIP Proxy Mobile IPv6 for Linux has been built above MIPL free software; - * which it involves that it is under the same terms of GNU General Public - * License version 2. See MIPL terms condition if you need more details. - */ -/*! \file pmip_handler.c - * \brief - * \author OpenAir3 Group - * \date 12th of October 2010 - * \version 1.0 - * \company Eurecom - * \project OpenAirInterface - * \email: openair_tech@eurecom.fr - */ -#define PMIP -#define PMIP_HANDLER_C -#ifdef HAVE_CONFIG_H -#include -#endif -//--------------------------------------------------------------------------------------------------------------------- -#include "pmip_fsm.h" -#include "pmip_handler.h" -#include "pmip_lma_proc.h" -#include "pmip_mag_proc.h" -#include "pmip_msgs.h" -//--------------------------------------------------------------------------------------------------------------------- -#include "tunnelctl.h" -#include "ndisc.h" -#ifdef ENABLE_VT -# include "vt.h" -#endif -#include "debug.h" -#include "conf.h" -//--------------------------------------------------------------------------------------------------------------------- -struct in6_addr *link_local_addr(struct in6_addr *id) -{ - static struct in6_addr ADDR; - ADDR = in6addr_any; - ADDR.s6_addr32[0] = htonl(0xfe800000); - //copy the MN_ID. - memcpy(&ADDR.s6_addr32[2], &id->s6_addr32[2], sizeof(ip6mnid_t)); - return &ADDR; -} -//--------------------------------------------------------------------------------------------------------------------- -struct in6_addr *CONVERT_ID2ADDR(struct in6_addr *result, struct in6_addr *prefix, struct in6_addr *id) -{ - *result = in6addr_any; - memcpy(&result->s6_addr32[0], &prefix->s6_addr32[0], sizeof(ip6mnid_t)); - memcpy(&result->s6_addr32[2], &id->s6_addr32[2], sizeof(ip6mnid_t)); - return result; -} -//--------------------------------------------------------------------------------------------------------------------- -struct in6_addr *get_mn_addr(pmip_entry_t * bce) -{ - CONVERT_ID2ADDR(&bce->mn_addr, &bce->mn_prefix, &bce->mn_suffix); - return &bce->mn_addr; -} -//--------------------------------------------------------------------------------------------------------------------- -struct in6_addr *solicited_mcast(struct in6_addr *id) -{ - //NUD_ADDR converts an ID into a Multicast Address for NS Unreachability! - static struct in6_addr ADDR2; - ADDR2 = in6addr_any; - ADDR2.s6_addr32[0] = htonl(0xff020000); - ADDR2.s6_addr32[1] = htonl(0x00000000); - ADDR2.s6_addr32[2] = htonl(0x00000001); - ADDR2.s6_addr[12] = 0xff; - //copy the least 24 bits from the MN_ID. - memcpy(&ADDR2.s6_addr[13], &id->s6_addr[13], 3 * sizeof(ADDR2.s6_addr[0])); - return &ADDR2; -} -//--------------------------------------------------------------------------------------------------------------------- -void pmip_timer_retrans_pbu_handler(struct tq_elem *tqe) -{ - int mutex_return_code; - - mutex_return_code = pthread_rwlock_wrlock(&pmip_lock); - - if (mutex_return_code != 0) { - dbg("pthread_rwlock_wrlock(&pmip_lock) %s\n", strerror(mutex_return_code)); - } - - printf("-------------------------------------\n"); - - if (!task_interrupted()) { - pmip_entry_t *e = tq_data(tqe, pmip_entry_t, tqe); - mutex_return_code = pthread_rwlock_wrlock(&e->lock); - - if (mutex_return_code != 0) { - dbg("pthread_rwlock_wrlock(&e->lock) %s\n", strerror(mutex_return_code)); - } - - dbg("Retransmissions counter : %d\n", e->n_rets_counter); - - if (e->n_rets_counter == 0) { - free_iov_data((struct iovec *) &e->mh_vec, e->iovlen); - dbg("No PBA received from LMA....\n"); - dbg("Abort Trasmitting the PBU....\n"); - mutex_return_code = pthread_rwlock_unlock(&e->lock); - - if (mutex_return_code != 0) { - dbg("pthread_rwlock_unlock(&e->lock) %s\n", strerror(mutex_return_code)); - } - - pmip_bce_delete(e); - } else { - //Decrement the N trasnmissions counter. - e->n_rets_counter--; - struct in6_addr_bundle addrs; - addrs.src = &conf.OurAddress; - addrs.dst = &conf.LmaAddress; - //sends a PBU - dbg("Send PBU again....\n"); - - // INCREMENT SEQ NUMBER OF PBU - e->seqno_out = get_new_pbu_sequence_number(); - ((struct ip6_mh_binding_update *)(e->mh_vec[0].iov_base))->ip6mhbu_seqno = htons(e->seqno_out); - - pmip_mh_send(&addrs, e->mh_vec, e->iovlen, e->link); - //add a new task for PBU retransmission. - struct timespec expires; - clock_gettime(CLOCK_REALTIME, &e->add_time); - tsadd(e->add_time, conf.RetransmissionTimeOut, expires); - add_task_abs(&expires, &e->tqe, pmip_timer_retrans_pbu_handler); - dbg("PBU Retransmissions timer is triggered again....\n"); - mutex_return_code = pthread_rwlock_unlock(&e->lock); - - if (mutex_return_code != 0) { - dbg("pthread_rwlock_unlock(&e->lock) %s\n", strerror(mutex_return_code)); - } - } - } - - mutex_return_code = pthread_rwlock_unlock(&pmip_lock); - - if (mutex_return_code != 0) { - dbg("pthread_rwlock_unlock(&pmip_lock) %s\n", strerror(mutex_return_code)); - } -} -//--------------------------------------------------------------------------------------------------------------------- -void pmip_timer_bce_expired_handler(struct tq_elem *tqe) -{ - int mutex_return_code; - mutex_return_code = pthread_rwlock_wrlock(&pmip_lock); - - if (mutex_return_code != 0) { - dbg("pthread_rwlock_wrlock(&pmip_lock) %s\n", strerror(mutex_return_code)); - } - - printf("-------------------------------------\n"); - - if (!task_interrupted()) { - pmip_entry_t *e = tq_data(tqe, pmip_entry_t, tqe); - mutex_return_code = pthread_rwlock_wrlock(&e->lock); - - if (mutex_return_code != 0) { - dbg("pthread_rwlock_wrlock(&e->lock) %s\n", strerror(mutex_return_code)); - } - - dbg("Retransmissions counter : %d\n", e->n_rets_counter); - - if (e->n_rets_counter == 0) { - dbg("Retransmissions counter expired\n"); - free_iov_data((struct iovec *) &e->mh_vec, e->iovlen); - - if (is_mag()) { - //++e->seqno_out; - dbg("Calling deregistration\n"); - mag_dereg(e, 1); - pmipcache_release_entry(e); - pmip_bce_delete(e); - return; - } - - //Delete existing route for the deleted MN - if (is_ha()) { - lma_dereg(e, 0, 0); - pmipcache_release_entry(e); - pmip_bce_delete(e); - return; - } - - mutex_return_code = pthread_rwlock_unlock(&pmip_lock); - - if (mutex_return_code != 0) { - dbg("pthread_rwlock_unlock(&pmip_lock) %s\n", strerror(mutex_return_code)); - } - - return; - } - - if (is_mag()) { - dbg("Send NS for Neighbour Reachability for:%x:%x:%x:%x:%x:%x:%x:%x iif=%d\n", NIP6ADDR(&e->mn_hw_address), e->link); - //Create NS for Reachability test! - //ndisc_send_ns(e->link, &conf.MagAddressIngress[0], solicited_mcast(&e->mn_suffix), get_mn_addr(e)); - ndisc_send_ns(e->link, get_mn_addr(e)); - - - struct timespec expires; - clock_gettime(CLOCK_REALTIME, &e->add_time); - tsadd(e->add_time, conf.RetransmissionTimeOut, expires); - // Add a new task for deletion of entry if No Na is received. - add_task_abs(&expires, &e->tqe, pmip_timer_bce_expired_handler); - dbg("Start the Timer for Retransmission/Deletion ....\n"); - //Decrements the Retransmissions counter. - e->n_rets_counter--; - mutex_return_code = pthread_rwlock_unlock(&e->lock); - - if (mutex_return_code != 0) { - dbg("pthread_rwlock_unlock(&e->lock) %s\n", strerror(mutex_return_code)); - } - } - - if (is_ha()) { - lma_dereg(e, 0, 0); - pmipcache_release_entry(e); - pmip_bce_delete(e); - return; - } - } - - mutex_return_code = pthread_rwlock_unlock(&pmip_lock); - - if (mutex_return_code != 0) { - dbg("pthread_rwlock_unlock(&pmip_lock) %s\n", strerror(mutex_return_code)); - } -} -//--------------------------------------------------------------------------------------------------------------------- -void pmip_timer_tunnel_expired_handler(struct tq_elem *tqe) -{ - int mutex_return_code; - int res; - - mutex_return_code = pthread_rwlock_wrlock(&pmip_lock); - - if (mutex_return_code != 0) { - dbg("pthread_rwlock_wrlock(&pmip_lock) %s\n", strerror(mutex_return_code)); - } - - printf("-------------------------------------\n"); - printf("-pmip_timer_tunnel_expired_handler()-\n"); - printf("-------------------------------------\n"); - - if (!task_interrupted()) { - tunnel_timer_t *tt = container_of(tqe, tunnel_timer_t, tqe); - res = tunnel_del(tt->tunnel, 0, 0); - tt->lifetime.tv_nsec = 0; - tt->lifetime.tv_sec = 0; - } - - mutex_return_code = pthread_rwlock_unlock(&pmip_lock); - - if (mutex_return_code != 0) { - dbg("pthread_rwlock_unlock(&pmip_lock) %s\n", strerror(mutex_return_code)); - } -} - - -/** - * Handlers defined for MH and ICMP messages. - **/ - -/*! - * check if address is solicited multicast - * \param addr - * \return value <> 0 if true - */ -static inline int ipv6_addr_is_solicited_mcast(const struct in6_addr *addr) -{ - return (addr->s6_addr32[0] == htonl(0xff020000) - && addr->s6_addr32[1] == htonl(0x00000000) - && addr->s6_addr32[2] == htonl(0x00000001) - && addr->s6_addr[12] == 0xff); -} - -/*! - * check if address is multicast - * \param addr - * \return value <> 0 if true - */ -static inline int ipv6_addr_is_multicast(const struct in6_addr *addr) -{ - return (addr->s6_addr32[0] & htonl(0xFF000000)) == htonl(0xFF000000); -} - -/*! - * check if address is linklocal - * \param addr - * \return value <> 0 if true - */ -static inline int ipv6_addr_is_linklocal(const struct in6_addr *addr) -{ - return IN6_IS_ADDR_LINKLOCAL(addr); -} - - -/*! - * handler called when receiving a router solicitation - */ -//hip -static void pmip_mag_recv_rs(const struct icmp6_hdr *ih, __attribute__ ((unused)) ssize_t len, const struct in6_addr *saddr, const struct in6_addr *daddr, int iif, int hoplimit) -{ - dbg("\n"); - dbg("Router Solicitation received \n"); - printf("-------------------------------------\n"); - dbg("Router Solicitation (RS) Received iif %d\n", iif); - dbg("Received RS Src Addr: %x:%x:%x:%x:%x:%x:%x:%x\n", NIP6ADDR(saddr)); - dbg("Received RS Dst addr: %x:%x:%x:%x:%x:%x:%x:%x\n", NIP6ADDR(daddr)); - msg_info_t rs_info; - bzero(&rs_info, sizeof(rs_info)); - icmp_rs_parse(&rs_info, (struct nd_router_solicit *) ih, saddr, daddr, iif, hoplimit); - mag_fsm(&rs_info); -} - -/*! - * handler called when receiving a proxy binding acknowledgment - */ -static void pmip_mag_recv_pba(const struct ip6_mh *mh, ssize_t len, const struct in6_addr_bundle *in_addrs, int iif) -{ - printf("=====================================\n"); - dbg("Proxy Binding Acknowledgement (PBA) Received\n"); - dbg("Received PBA Src Addr: %x:%x:%x:%x:%x:%x:%x:%x\n", NIP6ADDR(in_addrs->src)); - dbg("Received PBA Dst addr: %x:%x:%x:%x:%x:%x:%x:%x\n", NIP6ADDR(in_addrs->dst)); - //define the values for calling the parsing function - //call the parsing function - struct ip6_mh_binding_ack *pba; - //call the fsm function. - msg_info_t info; - pba = (struct ip6_mh_binding_ack *) ((void *) mh); - mh_pba_parse(&info, pba, len, in_addrs, iif); - mag_fsm(&info); -} - - -/*! - * handler called when receiving a proxy binding update - */ -void pmip_lma_recv_pbu(const struct ip6_mh *mh, ssize_t len, const struct in6_addr_bundle *in_addrs, int iif) -{ - printf("=====================================\n"); - dbg("Proxy Binding Update (PBU) Received\n"); - dbg("Received PBU Src Addr: %x:%x:%x:%x:%x:%x:%x:%x\n", NIP6ADDR(in_addrs->src)); - dbg("Received PBU Dst addr: %x:%x:%x:%x:%x:%x:%x:%x\n", NIP6ADDR(in_addrs->dst)); - //define the values for the parsing function - //call the parsing function - struct ip6_mh_binding_update *pbu = (struct ip6_mh_binding_update *) mh; - //call the fsm function. - msg_info_t info; - bzero(&info, sizeof(info)); - mh_pbu_parse(&info, pbu, len, in_addrs, iif); - lma_fsm(&info); -} - -/*! - * handler called when MAG receive a neighbor advertisement - */ -static void pmip_mag_recv_na(const struct icmp6_hdr *ih, ssize_t len, const struct in6_addr *saddr, const struct in6_addr *daddr, int iif, int hoplimit) -{ - // define the MN identifier - //struct in6_addr id = in6addr_any; - struct nd_neighbor_advert *msg = (struct nd_neighbor_advert *) ih; - - //Check target is not link local address. - if (ipv6_addr_is_linklocal(&msg->nd_na_target)) { - return; - } - - //Check target is not multicast. - if (ipv6_addr_is_multicast(&msg->nd_na_target)) { - return; - } - - if (len - sizeof(struct nd_neighbor_advert) > 0) { - printf("-------------------------------------\n"); - dbg("Neighbor Advertisement (NA) Received\n"); - dbg("Received NA Src Addr: %x:%x:%x:%x:%x:%x:%x:%x\n", NIP6ADDR(saddr)); - dbg("Received NA Dst addr: %x:%x:%x:%x:%x:%x:%x:%x\n", NIP6ADDR(daddr)); - msg_info_t na_info; - bzero(&na_info, sizeof(na_info)); - icmp_na_parse(&na_info, (struct nd_neighbor_advert *) ih, saddr, daddr, iif, hoplimit); - mag_fsm(&na_info); - } - - return; -} - - -struct icmp6_handler pmip_mag_rs_handler = { - .recv = pmip_mag_recv_rs -}; - -struct mh_handler pmip_mag_pba_handler = { - .recv = pmip_mag_recv_pba -}; -struct mh_handler pmip_lma_pbu_handler = { - .recv = pmip_lma_recv_pbu -}; -struct icmp6_handler pmip_mag_recv_na_handler = { - .recv = pmip_mag_recv_na -}; diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/src/pmip/pmip_handler.h b/openair3/PMIPv6/pmipv6-daemon-umip/src/pmip/pmip_handler.h deleted file mode 100755 index 874f32f750..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/src/pmip/pmip_handler.h +++ /dev/null @@ -1,116 +0,0 @@ -/* - * This file is part of the PMIP, Proxy Mobile IPv6 for Linux. - * - * Authors: OPENAIR3 - * - * Copyright 2010-2011 EURECOM (Sophia-Antipolis, FRANCE) - * - * Proxy Mobile IPv6 (or PMIPv6, or PMIP) is a network-based mobility - * management protocol standardized by IETF. It is a protocol for building - * a common and access technology independent of mobile core networks, - * accommodating various access technologies such as WiMAX, 3GPP, 3GPP2 - * and WLAN based access architectures. Proxy Mobile IPv6 is the only - * network-based mobility management protocol standardized by IETF. - * - * PMIP Proxy Mobile IPv6 for Linux has been built above MIPL free software; - * which it involves that it is under the same terms of GNU General Public - * License version 2. See MIPL terms condition if you need more details. - */ -/*! \file pmip_handler.h -* \brief -* \author OpenAir3 Group -* \date 12th of October 2010 -* \version 1.0 -* \company Eurecom -* \project OpenAirInterface -* \email: openair_tech@eurecom.fr -*/ - -/** \defgroup HANDLER MESSAGE HANDLER - * \ingroup PMIP6D - * PMIP Handler - * @{ - */ - -#ifndef __PMIP_HANDLER_H__ -# define __PMIP_HANDLER_H__ -//----------------------------------------------------------------------------- -# ifdef PMIP_HANDLER_C -# define private_pmip_handler(x) x -# define protected_pmip_handler(x) x -# define public_pmip_handler(x) x -# else -# ifdef PMIP -# define private_pmip_handler(x) -# define protected_pmip_handler(x) extern x -# define public_pmip_handler(x) extern x -# else -# define private_pmip_handler(x) -# define protected_pmip_handler(x) -# define public_pmip_handler(x) extern x -# endif -# endif -//----------------------------------------------------------------------------- -# include -# include "pmip_cache.h" -# include "pmip_tunnel.h" -//----------------------------------------------------------------------------- -protected_pmip_handler(struct icmp6_handler pmip_mag_rs_handler;) -protected_pmip_handler(struct mh_handler pmip_mag_pba_handler;) -protected_pmip_handler(struct mh_handler pmip_lma_pbu_handler;) -protected_pmip_handler(struct icmp6_handler pmip_mag_recv_na_handler;) -//-PROTOTYPES---------------------------------------------------------------------------- -/*! \fn struct in6_addr *link_local_addr(struct in6_addr *id) -* \brief -* \param[in] id The "ethernet type" address. -* \return The link local address corresponding to the supplied ethernet address. -*/ -protected_pmip_handler(struct in6_addr *link_local_addr(struct in6_addr *id);) -/*! \fn struct in6_addr *CONVERT_ID2ADDR(struct in6_addr *result, struct in6_addr *prefix, struct in6_addr *id) -* \brief Converts an ID & a prefix into an address. -* \param[out] result The final address. -* \param[in] prefix The prefix of the address. -* \param[in] id The "ethernet type" address. -* \return The final address. -*/ -protected_pmip_handler(struct in6_addr *CONVERT_ID2ADDR(struct in6_addr *result, struct in6_addr *prefix, struct in6_addr *id);) -/*! \fn struct in6_addr *get_mn_addr(pmip_entry_t * bce) -* \brief Computes the address of the mobile node corresponding to the supplied binding cache entry, store it in the binding cache entry and return it. -* \param[in] bce A binding cache entry -* \return The address of the mobile node. -* \note The returned address is returned using CONVERT_ID2ADDR function. -*/ -protected_pmip_handler(struct in6_addr *get_mn_addr(pmip_entry_t * bce);) -/*! \fn struct in6_addr *solicited_mcast(struct in6_addr *id) -* \brief Converts an ethernet address into a Multicast Address for NS Unreachability -* \param[in] id The "ethernet type" address of a mobile node. -* \return The corresponding multicast address. -*/ -protected_pmip_handler(struct in6_addr *solicited_mcast(struct in6_addr *id);) -/*! \fn void pmip_timer_retrans_pbu_handler(struct tq_elem *tqe) -* \brief Handler triggered by add_task_abs for entry expiry and deletion, retransmit PBU -* \param[in] tqe A task queue element -*/ -private_pmip_handler( void pmip_timer_retrans_pbu_handler(struct tq_elem *tqe);) -/*! \fn void pmip_timer_bce_expired_handler(struct tq_elem *tqe) -* \brief Handler triggered by add_task_abs for entry expiry and deletion, expire PMIP binding cache entry and NS on MAG -* \param[in] tqe A task queue element -*/ -protected_pmip_handler(void pmip_timer_bce_expired_handler(struct tq_elem *tqe);) -/*! \fn void pmip_timer_tunnel_expired_handler(struct tq_elem *tqe) -* \brief Handler triggered by add_task_abs for tunnel expiry and deletion -* \param[in] tqe A task queue element -*/ -protected_pmip_handler(void pmip_timer_tunnel_expired_handler(struct tq_elem *tqe);) - -/*! \fn void pmip_lma_recv_pbu(const struct ip6_mh *mh, ssize_t len, const struct in6_addr_bundle *in_addrs, int iif) - * \brief Handler triggered by the reception of a PBU with P flag set - * \param[in] mh Mobility header - * \param[in] len size of message - * \param[in] in_addrs Bundle of address (src and dst) - * \param[in] iif Interface id - */ -public_pmip_handler(void pmip_lma_recv_pbu(const struct ip6_mh *mh, ssize_t len, const struct in6_addr_bundle *in_addrs, int iif);) - -#endif -/** @}*/ diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/src/pmip/pmip_hnp_cache.c b/openair3/PMIPv6/pmipv6-daemon-umip/src/pmip/pmip_hnp_cache.c deleted file mode 100755 index 0377cb9409..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/src/pmip/pmip_hnp_cache.c +++ /dev/null @@ -1,412 +0,0 @@ -/* - * This file is part of the PMIP, Proxy Mobile IPv6 for Linux. - * - * Authors: OPENAIR3 - * - * Copyright 2010-2011 EURECOM (Sophia-Antipolis, FRANCE) - * - * Proxy Mobile IPv6 (or PMIPv6, or PMIP) is a network-based mobility - * management protocol standardized by IETF. It is a protocol for building - * a common and access technology independent of mobile core networks, - * accommodating various access technologies such as WiMAX, 3GPP, 3GPP2 - * and WLAN based access architectures. Proxy Mobile IPv6 is the only - * network-based mobility management protocol standardized by IETF. - * - * PMIP Proxy Mobile IPv6 for Linux has been built above MIPL free software; - * which it involves that it is under the same terms of GNU General Public - * License version 2. See MIPL terms condition if you need more details. - */ -/*! \file pmip_hnp_cache.c -* \brief PMIP binding cache functions -* \author OpenAir3 Group -* \date 12th of October 2010 -* \version 1.0 -* \company Eurecom -* \project OpenAirInterface -* \email: openair_tech@eurecom.fr -*/ -#define PMIP -#define PMIP_HNP_CACHE_C -#ifdef HAVE_CONFIG_H -#include -#endif -#include -//--------------------------------------------------------------------------------------------------------------------- -#include "pmip_hnp_cache.h" -#include "pmip_consts.h" -//--------------------------------------------------------------------------------------------------------------------- -#ifdef USE_RADIUS -# include "freeradius-client.h" -#else -# include -#endif -#include "util.h" -#ifdef ENABLE_VT -# include "vt.h" -#endif -#include "debug.h" -#include "conf.h" -//--------------------------------------------------------------------------------------------------------------------- -/*! \var mnid_hnp_t g_mn_hn_map[MAX_MOBILES] -\brief Global array containing all "network prefix/interface id" known for a MAG. -*/ -static mnid_hnp_t g_mn_hn_map[MAX_MOBILES]; -/*! \var int g_mn_count -\brief Number of elements in g_mn_hn_map. -*/ -static int g_mn_count = 0; -#ifdef USE_RADIUS -# define CACHE_RADIUS -# define RADIUS_MSG_MAX_SIZE 4096 -# define RADIUS_USERNAME_MAX_SIZE 256 -/*! \var rc_handle* g_rh -\brief Handle on free radius client. -*/ -static rc_handle* g_rh = NULL; -static char* g_default_realm = NULL; -/*! \var char msg[RADIUS_MSG_MAX_SIZE] -\brief Array of bytes potentialy containing a message received from radius server. -*/ -static char msg[RADIUS_MSG_MAX_SIZE]; -/*! \var char g_username[RADIUS_USERNAME_MAX_SIZE] -\brief String containing the username for authenticating on the radius server. -*/ -static char g_username[RADIUS_USERNAME_MAX_SIZE]; -/*! \var char g_username_realm[RADIUS_USERNAME_MAX_SIZE] -\brief String containing the username realm for authenticating on the radius server. -*/ -static char g_username_realm[RADIUS_USERNAME_MAX_SIZE]; -/*! \var char g_passwd[AUTH_PASS_LEN + 1] -\brief String containing the password for authenticating on the radius server. -*/ -static char g_passwd[AUTH_PASS_LEN + 1]; -#endif -//----------------------------------------------------------------------------- -struct in6_addr EUI64_to_EUI48(struct in6_addr iid) -{ - struct in6_addr macaddr; - macaddr.s6_addr[0] = 0; - macaddr.s6_addr[1] = 0; - macaddr.s6_addr[2] = 0; - macaddr.s6_addr[3] = 0; - macaddr.s6_addr[4] = 0; - macaddr.s6_addr[5] = 0; - macaddr.s6_addr[6] = 0; - macaddr.s6_addr[7] = 0; - macaddr.s6_addr[8] = 0; - macaddr.s6_addr[9] = 0; - macaddr.s6_addr[10] = iid.s6_addr[8] ^ 0x02; - macaddr.s6_addr[11] = iid.s6_addr[9]; - macaddr.s6_addr[12] = iid.s6_addr[10]; - macaddr.s6_addr[13] = iid.s6_addr[13]; - macaddr.s6_addr[14] = iid.s6_addr[14]; - macaddr.s6_addr[15] = iid.s6_addr[15]; - return macaddr; -} -//----------------------------------------------------------------------------- -struct in6_addr EUI48_to_EUI64(struct in6_addr macaddr) -{ - struct in6_addr iid; - iid.s6_addr[0] = 0; - iid.s6_addr[1] = 0; - iid.s6_addr[2] = 0; - iid.s6_addr[3] = 0; - iid.s6_addr[4] = 0; - iid.s6_addr[5] = 0; - iid.s6_addr[6] = 0; - iid.s6_addr[7] = 0; - iid.s6_addr[8] = macaddr.s6_addr[10] ^ 0x02; - iid.s6_addr[9] = macaddr.s6_addr[11]; - iid.s6_addr[10] = macaddr.s6_addr[12]; - iid.s6_addr[11] = 0xFF; - iid.s6_addr[12] = 0xFE; - iid.s6_addr[13] = macaddr.s6_addr[13]; - iid.s6_addr[14] = macaddr.s6_addr[14]; - iid.s6_addr[15] = macaddr.s6_addr[15]; - return iid; -} -//----------------------------------------------------------------------------- -void pmip_insert_into_hnp_cache(struct in6_addr mn_iid, struct in6_addr addr) -{ - int j = 0; - - while (j < g_mn_count) { - if (IN6_ARE_ADDR_EQUAL(&g_mn_hn_map[j].mn_iid, &mn_iid)) { - dbg("mnid %x:%x:%x:%x:%x:%x:%x:%x already in cache, updating addr %x:%x:%x:%x:%x:%x:%x:%x -> %x:%x:%x:%x:%x:%x:%x:%x\n", NIP6ADDR(&g_mn_hn_map[j].mn_iid), NIP6ADDR(&g_mn_hn_map[j].mn_prefix), - NIP6ADDR(&addr)); - g_mn_hn_map[j].mn_prefix = addr; - return; - } - - j++; - } - - if (g_mn_count < MAX_MOBILES) { - g_mn_hn_map[g_mn_count].mn_prefix = addr; - g_mn_hn_map[g_mn_count].mn_iid = mn_iid; - dbg("new entry in cache %x:%x:%x:%x:%x:%x:%x:%x -> %x:%x:%x:%x:%x:%x:%x:%x\n", NIP6ADDR(&g_mn_hn_map[g_mn_count].mn_prefix), NIP6ADDR(&g_mn_hn_map[g_mn_count].mn_iid)); - g_mn_count = g_mn_count + 1; - } else { - dbg("ERROR COULD NOT PUT NEW ENTRY IN CACHE %x:%x:%x:%x:%x:%x:%x:%x -> %x:%x:%x:%x:%x:%x:%x:%x MAX ENTRIES REACHED\n", NIP6ADDR(&addr), NIP6ADDR(&mn_iid)); - } -} -//----------------------------------------------------------------------------- -void pmip_lma_mn_to_hnp_cache_init(void) -{ - memset((void*)g_mn_hn_map, 0, sizeof(mnid_hnp_t) * MAX_MOBILES); -} -//----------------------------------------------------------------------------- -struct in6_addr lma_mnid_hnp_map(struct in6_addr mnid, int *result) -{ - int j = 0; - dbg("Entering the address match . . "); - dbg("Searching for MNID %x:%x:%x:%x:%x:%x:%x:%x \n", NIP6ADDR(&mnid)); - - while (j < g_mn_count) { - dbg("Comparing with MNID %x:%x:%x:%x:%x:%x:%x:%x \n", NIP6ADDR(&g_mn_hn_map[j].mn_iid)); - - if (IN6_ARE_ADDR_EQUAL(&g_mn_hn_map[j].mn_iid, &mnid)) { - *result = 1; - dbg("%x:%x:%x:%x:%x:%x:%x:%x found the prefix \n", NIP6ADDR(&g_mn_hn_map[j].mn_prefix)); - return (g_mn_hn_map[j].mn_prefix); - } - - j++; - } - - dbg("mnid not found "); - - struct in6_addr tmp; - memset(&tmp, 0, sizeof(struct in6_addr)); - *result = -1; - return tmp; -} -//----------------------------------------------------------------------------- - -#ifdef USE_RADIUS -int pmip_mn_to_hnp_cache_init(void) -{ - dbg ("\n"); - memset(g_mn_hn_map, 0, sizeof(mnid_hnp_t) * MAX_MOBILES); - rc_openlog("pmip_radius_client"); - - if ((g_rh = rc_read_config(conf.RadiusClientConfigFile)) == NULL) { - dbg ("ERROR INIT CLIENT RADIUS\n"); - return ERROR_RC; - } else { - dbg ("RADIUS client radius read config file OK\n"); - } - - if (rc_read_dictionary(g_rh, rc_conf_str(g_rh, "dictionary")) != 0) { - dbg ("ERROR INIT CLIENT RADIUS DICTIONNARY\n"); - return ERROR_RC; - } else { - dbg ("client radius read dictionnary file OK\n"); - } - - g_default_realm = rc_conf_str(g_rh, "default_realm"); - return 0; -} -#else -static void trim(char * s) -{ - char * p = s; - int l = strlen(p); - - while(isspace(p[l - 1])) p[--l] = 0; - - while(* p && isspace(* p)) ++p, --l; - - memmove(s, p, l + 1); -} - -int pmip_mn_to_hnp_cache_init (void) -{ - FILE *fp; - - char line [256]; - char str_addr[40], str_addr_iid[40]; - - struct in6_addr addr, addr1; - - unsigned int ap, ap1; - - int i, j; - - memset(g_mn_hn_map, 0, sizeof(mnid_hnp_t) * MAX_MOBILES); - j = 0; - - if ((fp = fopen ("/etc/pmip/mac-mapping.auth", "r")) == NULL) { - printf ("can't open %s:", "/etc/pmip/mac-mapping.auth"); - exit (0); - } - - while ( fgets ( line, sizeof line, fp ) != NULL ) { - trim(line); - - // if line is not a comment - if (strncmp("#", line, 1) != 0) { - //while ((fscanf (fp, "%32s %16s\n", str_addr, str_addr_iid) != EOF) && (j < MAX_MOBILES)) { - if ((sscanf (line, "%32s %16s\n", str_addr, str_addr_iid) != EOF) && (j < MAX_MOBILES)) { - for (i = 0; i < 16; i++) { - sscanf (str_addr + i * 2, "%02x", &ap); - addr.s6_addr[i] = (unsigned char) ap; - g_mn_hn_map[j].mn_prefix = addr; - - addr1.s6_addr[i] = 0; - } - - for (i = 0; i < 8; i++) { - sscanf (str_addr_iid + i * 2, "%02x", &ap1); - addr1.s6_addr[i+8] = (unsigned char) ap1; - g_mn_hn_map[j].mn_iid = addr1; - } - - dbg ("%x:%x:%x:%x:%x:%x:%x:%x\t<->\t%x:%x:%x:%x:%x:%x:%x:%x\n", NIP6ADDR (&g_mn_hn_map[j].mn_prefix), NIP6ADDR (&g_mn_hn_map[j].mn_iid)); - j++; - g_mn_count = g_mn_count + 1; - } - } - } - - fclose (fp); - - if (j >= MAX_MOBILES) { - dbg ("ERROR TOO MANY MAPPINGS DEFINED IN CONFIG FILE\n"); - exit (0); - } - - return 0; -} -#endif -//----------------------------------------------------------------------------- - -/*! -* Search if the mobile node id is already associated with a prefix in the hnp map -* \param mnid Mobile node ID -* \return a valid prefix if the mobile node id is already associated with a prefix in the hnp map -*/ -struct in6_addr mnid_hnp_map(struct in6_addr mnid, int *aaa_result) -{ - int l_flag = 0; -#if !defined (USE_RADIUS) || defined(CACHE_RADIUS) - int j = 0; - dbg("Entering the address match . . \n"); - dbg("Searching for MNID %x:%x:%x:%x:%x:%x:%x:%x \n", NIP6ADDR(&mnid)); - - while (j < g_mn_count) { - dbg("Comparing with MNID %x:%x:%x:%x:%x:%x:%x:%x \n", NIP6ADDR(&g_mn_hn_map[j].mn_iid)); - - if (IN6_ARE_ADDR_EQUAL(&g_mn_hn_map[j].mn_iid, &mnid)) { - l_flag = 1; - dbg("%x:%x:%x:%x:%x:%x:%x:%x found the prefix \n", NIP6ADDR(&g_mn_hn_map[j].mn_prefix)); - *aaa_result = 10; - return (g_mn_hn_map[j].mn_prefix); - } - - j++; - } - -#ifdef CACHE_RADIUS - dbg("MNID not in cache %x:%x:%x:%x:%x:%x:%x:%x \n", NIP6ADDR(&mnid)); -#endif -#endif - -#if defined (USE_RADIUS) - - VALUE_PAIR *send, *received; - VALUE_PAIR *vp; - struct in6_addr prefix; - uint32_t service; - - *aaa_result = 0; - send = NULL; - - sprintf(g_username, "%04x%04x%04x%04x", ntohs(mnid.s6_addr16[4]), ntohs(mnid.s6_addr16[5]), ntohs(mnid.s6_addr16[6]), ntohs(mnid.s6_addr16[7])); - g_username[16] = 0; - memset(g_passwd, '\0', AUTH_PASS_LEN + 1); - strncpy(g_passwd, conf.RadiusPassword, strlen(conf.RadiusPassword)); - g_passwd[strlen(conf.RadiusPassword)] = '\0'; - // Fill in User-Name - - strncpy(g_username_realm, g_username, sizeof(g_username_realm)); - - // Append default realm - if ((strchr(g_username_realm, '@') == NULL) && g_default_realm && (*g_default_realm != '\0')) { - strncat(g_username_realm, "@", sizeof(g_username_realm) - strlen(g_username_realm) - 1); - strncat(g_username_realm, g_default_realm, sizeof(g_username_realm) - strlen(g_username_realm) - 1); - } - - dbg("RADIUS USER NAME %s\n", g_username_realm); - dbg("RADIUS PASSWORD %s\n", g_passwd); - - if (rc_avpair_add(g_rh, &send, PW_USER_NAME, g_username_realm, -1, 0) == NULL) { - fprintf(stderr, "[RADIUS] ERROR rc_avpair_add PW_USER_NAME\n"); - } else { - // - // Fill in User-Password - - if (rc_avpair_add(g_rh, &send, PW_USER_PASSWORD, g_passwd, -1, 0) == NULL) { - fprintf(stderr, "[RADIUS] ERROR rc_avpair_add PW_USER_PASSWORD\n"); - } else { - - // Fill in Service-Type - - service = PW_AUTHENTICATE_ONLY; - - if (rc_avpair_add(g_rh, &send, PW_SERVICE_TYPE, &service, -1, 0) == NULL) { - fprintf(stderr, "[RADIUS] ERROR rc_avpair_add PW_SERVICE_TYPE\n"); - } else { - // result = RESULT always < 0 !!! - rc_auth(g_rh, 0, send, &received, msg); - { - *aaa_result = 0; - - if (received != NULL) { - if ((vp = rc_avpair_get(received, PW_FRAMED_IPV6_PREFIX, 0)) != NULL) { - *aaa_result += 1; - int netmask = vp->strvalue[1]; - int num_bytes = netmask / 8; - int i; - - for (i = 0; i < num_bytes; i++) { - prefix.s6_addr[i] = vp->strvalue[2 + i]; - } - - for (i = num_bytes; i < 16; i++) { - prefix.s6_addr[i] = 0; - } - } - - if ((vp = rc_avpair_get(received, PW_FRAMED_INTERFACE_ID, 0)) != NULL) { - *aaa_result += 1; - int i; - - for (i = 0; i < 8; i++) { - prefix.s6_addr[8 + i] = prefix.s6_addr[8 + i] | vp->strvalue[i]; - } - } - - rc_avpair_free(received); - } - - if (*aaa_result >= 2) { - l_flag = 1; - dbg("[RADIUS] Assigned IPv6 @ for MN UID %x:%x:%x:%x:%x:%x:%x:%x <=> %x:%x:%x:%x:%x:%x:%x:%x\n", NIP6ADDR(&mnid), NIP6ADDR(&prefix)); - dbg("[RADIUS] \"%s\" Authentication OK\n", g_username); - pmip_insert_into_hnp_cache(mnid, prefix); - return prefix; - } - } - } - } - } - -#endif - dbg("mnid not found\n"); - struct in6_addr tmp; - memset(&tmp, 0, sizeof(struct in6_addr)); - *aaa_result = -1; - return tmp; -} - diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/src/pmip/pmip_hnp_cache.h b/openair3/PMIPv6/pmipv6-daemon-umip/src/pmip/pmip_hnp_cache.h deleted file mode 100755 index 20f2c3f9be..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/src/pmip/pmip_hnp_cache.h +++ /dev/null @@ -1,108 +0,0 @@ -/* - * This file is part of the PMIP, Proxy Mobile IPv6 for Linux. - * - * Authors: OPENAIR3 - * - * Copyright 2010-2011 EURECOM (Sophia-Antipolis, FRANCE) - * - * Proxy Mobile IPv6 (or PMIPv6, or PMIP) is a network-based mobility - * management protocol standardized by IETF. It is a protocol for building - * a common and access technology independent of mobile core networks, - * accommodating various access technologies such as WiMAX, 3GPP, 3GPP2 - * and WLAN based access architectures. Proxy Mobile IPv6 is the only - * network-based mobility management protocol standardized by IETF. - * - * PMIP Proxy Mobile IPv6 for Linux has been built above MIPL free software; - * which it involves that it is under the same terms of GNU General Public - * License version 2. See MIPL terms condition if you need more details. - */ -/*! \file pmip_hnp_cache.h -* \brief -* \author OpenAir3 Group -* \date 12th of October 2010 -* \version 1.0 -* \company Eurecom -* \project OpenAirInterface -* \email: openair_tech@eurecom.fr -*/ - -/** - * \ingroup PMIP6D - * \defgroup HNP_CACHE HOME NETWORK PREFIX CACHE - * PMIP HNP Cache - * @{ - */ - -#ifndef __PMIP_HNP_CACHE_H__ -# define __PMIP_HNP_CACHE_H__ -//----------------------------------------------------------------------------- -# ifdef PMIP_HNP_CACHE_C -# define private_pmip_hnp_cache(x) x -# define protected_pmip_hnp_cache(x) x -# define public_pmip_hnp_cache(x) x -# else -# ifdef PMIP -# define private_pmip_hnp_cache(x) -# define protected_pmip_hnp_cache(x) extern x -# define public_pmip_hnp_cache(x) extern x -# else -# define private_pmip_hnp_cache(x) -# define protected_pmip_hnp_cache(x) -# define public_pmip_hnp_cache(x) extern x -# endif -# endif -//----------------------------------------------------------------------------- -#include -//----------------------------------------------------------------------------- -/*! \struct mnid_hnp_t -* \brief Data structure to store the association of a network prefix and a mobile interface identifier. -*/typedef struct mnid_hnp_t { - struct in6_addr mn_prefix; /*!< \brief Network Address Prefix for mobile node */ - struct in6_addr mn_iid; /*!< \brief Mobile node MAC address (IID) */ -} mnid_hnp_t; -//-PROTOTYPES---------------------------------------------------------------------------- -/*! \fn struct in6_addr EUI64_to_EUI48(struct in6_addr ) -* \brief Translate an interface id (ipv6 suffix of 8 bytes) into a MAC address (6 bytes) -* \param[in] iid A IPV6 interface id -* \return The computed MAC address. -*/ -protected_pmip_hnp_cache(struct in6_addr EUI64_to_EUI48(struct in6_addr iid);) -/*! \fn struct in6_addr EUI48_to_EUI64(struct in6_addr ) -* \brief Translate a MAC address (6 bytes) into an interface id (ipv6 suffix of 8 bytes). -* \param[in] macaddr A MAC address. -* \return The IPV6 interface id. -*/ -protected_pmip_hnp_cache(struct in6_addr EUI48_to_EUI64(struct in6_addr macaddr);) -/*! \fn void pmip_insert_into_hnp_cache(struct in6_addr mn_iid, struct in6_addr addr) -* \brief Insert into the cache, the mapping between the mobile node iid and the assigned ipv6 address. -* \param[in] mn_iid Mobile node interface identifier (MAC address). -* \param[in] addr Network Address Prefix for the mobile node -* \note This function check for duplicates -*/ -protected_pmip_hnp_cache(void pmip_insert_into_hnp_cache(struct in6_addr mn_iid, struct in6_addr addr);) -/*! \fn void pmip_lma_mn_to_hnp_cache_init(void) -* \brief Initialize the home network prefix cache in the LMA. -*/ -protected_pmip_hnp_cache(void pmip_lma_mn_to_hnp_cache_init(void);) -/*! \fn struct in6_addr lma_mnid_hnp_map(struct in6_addr mnid, int *result) -* \brief Search if the mobile node id is already associated with a prefix in the hnp map. -* \param[in] mn_iid Mobile node interface identifier (MAC address). -* \param[in] result Status of the search, 0 if success, else -1 -* \return A valid prefix if the mobile node id is already associated with a prefix in the hnp map. -*/ -protected_pmip_hnp_cache(struct in6_addr lma_mnid_hnp_map(struct in6_addr mnid, int *aaa_result);) -/*! \fn int pmip_mn_to_hnp_cache_init(void) -* \brief Initialize the home network prefix cache, if RADIUS is not configured the matching between MAC addresse and prefixes is read from a FILE "match". -* \return Zero if success, else other values. -*/ -protected_pmip_hnp_cache(int pmip_mn_to_hnp_cache_init(void);) -/*! \fn struct in6_addr mnid_hnp_map(struct in6_addr mnid, int *aaa_result) -* \brief Search if the mobile node id is already associated with a prefix in the hnp map. -* \param[in] mn_iid Mobile node interface identifier (MAC address). -* \param[in] aaa_result Status of the search, greater than, or equal to zero if success, else -1. -* \return A valid prefix if the mobile node id is already associated with a prefix in the hnp map. -* \note Called in MAG only. If the association is not found in the map, then the radius server is queried for a network prefix, once the response has been received, if successful, the association is stored in the cach, so the radius server will not be queried for this mobile node on this MAG, even if the mobile node leaves the geographical area covered by the MAG and re-enter again. -*/ -protected_pmip_hnp_cache(struct in6_addr mnid_hnp_map(struct in6_addr mnid, int *aaa_result);) -#endif -/** @}*/ diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/src/pmip/pmip_init.c b/openair3/PMIPv6/pmipv6-daemon-umip/src/pmip/pmip_init.c deleted file mode 100755 index 91a90f68eb..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/src/pmip/pmip_init.c +++ /dev/null @@ -1,266 +0,0 @@ -/* - * This file is part of the PMIP, Proxy Mobile IPv6 for Linux. - * - * Authors: OPENAIR3 - * - * Copyright 2010-2011 EURECOM (Sophia-Antipolis, FRANCE) - * - * Proxy Mobile IPv6 (or PMIPv6, or PMIP) is a network-based mobility - * management protocol standardized by IETF. It is a protocol for building - * a common and access technology independent of mobile core networks, - * accommodating various access technologies such as WiMAX, 3GPP, 3GPP2 - * and WLAN based access architectures. Proxy Mobile IPv6 is the only - * network-based mobility management protocol standardized by IETF. - * - * PMIP Proxy Mobile IPv6 for Linux has been built above MIPL free software; - * which it involves that it is under the same terms of GNU General Public - * License version 2. See MIPL terms condition if you need more details. - */ -/*! \file pmip6d.c -* \brief The main PMIP6D file -* \author OpenAir3 Group -* \date 12th of October 2010 -* \version 1.0 -* \company Eurecom -* \project OpenAirInterface -* \email: openair_tech@eurecom.fr -*/ -#define PMIP -#define PMIP_INIT_C -//--------------------------------------------------------------------------------------------------------------------- -#ifdef HAVE_CONFIG_H -#include -#endif -#include -//--------------------------------------------------------------------------------------------------------------------- -#include "pmip_cache.h" -#include "pmip_fsm.h" -#include "pmip_handler.h" -#include "pmip_hnp_cache.h" -#include "pmip_init.h" -#include "pmip_lma_proc.h" -#include "pmip_mag_proc.h" -#include "pmip_msgs.h" -#include "pmip_pcap.h" -#include "pmip_tunnel.h" -#include "pmip_types.h" -//--------------------------------------------------------------------------------------------------------------------- -#include "rtnl.h" -#include "tunnelctl.h" -#ifdef ENABLE_VT -# include "vt.h" -#endif -#include "debug.h" -#include "conf.h" - -#define IPV6_ALL_SOLICITED_MCAST_ADDR 68 -//--------------------------------------------------------------------------------------------------------------------- -extern struct sock icmp6_sock; -//--------------------------------------------------------------------------------------------------------------------- -void init_mag_icmp_sock(void) -//--------------------------------------------------------------------------------------------------------------------- -{ - if (0) { - int on = 1; - dbg("Set SOLRAW, IPV6_ALL_SOLICTED_MCAST_ADDR = %d\n", IPV6_ALL_SOLICITED_MCAST_ADDR); - - if (setsockopt(icmp6_sock.fd, SOL_RAW, IPV6_ALL_SOLICITED_MCAST_ADDR, &on, sizeof(on)) < 0) { - perror("allow all solicited mcast address\n"); - } - } -} -//--------------------------------------------------------------------------------------------------------------------- -static int pmip_cache_delete_each(void *data, __attribute__ ((unused)) void *arg) -//--------------------------------------------------------------------------------------------------------------------- -{ - pmip_entry_t *bce = (pmip_entry_t *) data; - - if (is_mag()) { - //Delete existing route & rule for the deleted MN - mag_remove_route(&bce->mn_addr, bce->link); - int usercount = tunnel_getusers(bce->tunnel); - dbg("# of binding entries %d \n", usercount); - - if (usercount == 1) { - route_del(bce->tunnel, RT6_TABLE_PMIP, IP6_RT_PRIO_MIP6_FWD, &in6addr_any, 0, &in6addr_any, 0, NULL); - } - - //decrement users of old tunnel. - pmip_tunnel_del(bce->tunnel); - } - - //Delete existing route for the deleted MN - if (is_ha()) { - lma_remove_route(&bce->mn_addr, bce->tunnel); - //decrement users of old tunnel. - pmip_tunnel_del(bce->tunnel); - } - - //Delete the Entry. - free_iov_data((struct iovec *) &bce->mh_vec, bce->iovlen); - pmip_bce_delete(bce); - return 0; -} -//--------------------------------------------------------------------------------------------------------------------- -void pmip_cleanup(void) -//--------------------------------------------------------------------------------------------------------------------- -{ - //Release the pmip cache ==> deletes the routes and rules and "default route on PMIP" and tunnels created. - dbg("Release all occupied resources...\n"); - //delete the default rule. - dbg("Remove default rule...\n"); - rule_del(NULL, RT6_TABLE_MIP6, IP6_RULE_PRIO_MIP6_FWD, RTN_UNICAST, &in6addr_any, 0, &in6addr_any, 0, 0); - - dbg("Release pmip_cache...\n"); - pmip_cache_iterate(pmip_cache_delete_each, NULL); - - if (is_mag()) { - pmip_pcap_loop_stop(); - } - - dbg("pmip_cleanup end\n"); -} - -//--------------------------------------------------------------------------------------------------------------------- -int pmip_common_init(void) -//--------------------------------------------------------------------------------------------------------------------- -{ - /** - * Probe for the local address - **/ - int probe_fd = socket(AF_INET6, SOCK_DGRAM, 0); - - if (probe_fd < 0) { - perror("socket"); - exit(2); - } - - unsigned int alen; - struct sockaddr_in6 host; - struct sockaddr_in6 firsthop; - - memset(&firsthop, 0, sizeof(firsthop)); - firsthop.sin6_port = htons(1025); - firsthop.sin6_family = AF_INET6; - - if (connect(probe_fd, (struct sockaddr *) &firsthop, sizeof(firsthop)) == -1) { - perror("connect"); - return -1;; - } - - alen = sizeof(host); - - if (getsockname(probe_fd, (struct sockaddr *) &host, &alen) == -1) { - perror("probe getsockname"); - return -1;; - } - - close(probe_fd); - - - /** - * Initializes PMIP cache. - **/ - if (pmip_cache_init() < 0) { - dbg("PMIP Binding Cache initialization failed! \n"); - return -1; - } else { - dbg("PMIP Binding Cache is initialized!\n"); - } - - return 0; -} -//--------------------------------------------------------------------------------------------------------------------- -int pmip_mag_init(void) -//--------------------------------------------------------------------------------------------------------------------- -{ - pmip_common_init(); - /** - * Adds a default rule for RT6_TABLE_MIP6. - */ - dbg("Add default rule for RT6_TABLE_MIP6\n"); - - if (rule_add(NULL, RT6_TABLE_MIP6, IP6_RULE_PRIO_MIP6_FWD, RTN_UNICAST, &in6addr_any, 0, &in6addr_any, 0, 0) < 0) { - dbg("Add default rule for RT6_TABLE_MIP6 failed, insufficient privilege/kernel options missing!\n"); - return -1; - } - - /** - * Initialize timers of tunnels (tunnels between LMA and MAGs). - */ - if (pmip_tunnels_init() < 0) { - dbg("PMIP Tunnels initialization failed! \n"); - return -1; - } else { - dbg("PMIP Tunnels are initialized!\n"); - } - - /** - * Get iif of MN messages - */ - mag_get_ingress_info(&g_ingress_iif, NULL); - - conf.OurAddress = conf.MagAddressEgress[0]; - conf.HomeNetworkPrefix = get_node_prefix(&conf.MagAddressIngress[0]); //copy Home network prefix. - dbg("Running as MAG entity\n"); - dbg("Entity Egress Address: %x:%x:%x:%x:%x:%x:%x:%x\n", NIP6ADDR(&conf.OurAddress)); - dbg("Entity Ingress Address: %x:%x:%x:%x:%x:%x:%x:%x\n", NIP6ADDR(&conf.MagAddressIngress[0])); - dbg("Home Network Prefix Address: %x:%x:%x:%x:%x:%x:%x:%x\n", NIP6ADDR(&conf.HomeNetworkPrefix)); - - if (mag_init_fsm() < 0) { - dbg("Initialization of FSM failed...exit\n"); - exit(-1); - } - - init_pbu_sequence_number(); - - init_iface_ra(); - init_mag_icmp_sock(); - dbg("Initializing the NA handler\n"); - // to capture NA message - icmp6_handler_reg(ND_NEIGHBOR_ADVERT, &pmip_mag_recv_na_handler); - dbg("Initializing the RS handler\n"); - // to capture RS message - icmp6_handler_reg(ND_ROUTER_SOLICIT, &pmip_mag_rs_handler); - dbg("Initializing the PBA handler\n"); - //To capture PBA message. - mh_handler_reg(IP6_MH_TYPE_BACK, &pmip_mag_pba_handler); - - /** - * Deletes the default route for MN prefix so routing is per unicast MN address! - **/ - //route_del((int) NULL, RT6_TABLE_MAIN, IP6_RT_PRIO_ADDRCONF, &in6addr_any, 0, &conf.HomeNetworkPrefix, 64, NULL); - dbg("Initializing the HNP cache\n"); - - if (pmip_mn_to_hnp_cache_init() < 0) { - exit (-1); - } - - dbg("Starting capturing AP messages for incoming MNs detection\n"); - pmip_pcap_loop_start(); - return 0; -} -//--------------------------------------------------------------------------------------------------------------------- -int pmip_lma_init(void) -//--------------------------------------------------------------------------------------------------------------------- -{ - if (pmip_common_init() < 0) return -1; - - /** - * Initialize timers of tunnels (tunnels between LMA and MAGs). - */ - if (pmip_tunnels_init() < 0) { - dbg("PMIP Tunnels initialization failed! \n"); - return -1; - } else { - dbg("PMIP Tunnels are initialized!\n"); - } - - pmip_lma_mn_to_hnp_cache_init(); - conf.OurAddress = conf.LmaAddress; - dbg("Entity Address: %x:%x:%x:%x:%x:%x:%x:%x\n", NIP6ADDR(&conf.OurAddress)); - dbg("Initializing the PBU handler\n"); - //To capture PBU message. - //mh_handler_reg(IP6_MH_TYPE_BU, &pmip_lma_pbu_handler); - return 0; -} diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/src/pmip/pmip_init.h b/openair3/PMIPv6/pmipv6-daemon-umip/src/pmip/pmip_init.h deleted file mode 100755 index 0d9a664e57..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/src/pmip/pmip_init.h +++ /dev/null @@ -1,69 +0,0 @@ -/* - * This file is part of the PMIP, Proxy Mobile IPv6 for Linux. - * - * Authors: OPENAIR3 - * - * Copyright 2010-2011 EURECOM (Sophia-Antipolis, FRANCE) - * - * Proxy Mobile IPv6 (or PMIPv6, or PMIP) is a network-based mobility - * management protocol standardized by IETF. It is a protocol for building - * a common and access technology independent of mobile core networks, - * accommodating various access technologies such as WiMAX, 3GPP, 3GPP2 - * and WLAN based access architectures. Proxy Mobile IPv6 is the only - * network-based mobility management protocol standardized by IETF. - * - * PMIP Proxy Mobile IPv6 for Linux has been built above MIPL free software; - * which it involves that it is under the same terms of GNU General Public - * License version 2. See MIPL terms condition if you need more details. - */ -#ifndef __PMIP_INIT_H__ -# define __PMIP_INIT_H__ -//----------------------------------------------------------------------------- -# ifdef PMIP_C -# define private_pmip_init(x) x -# define protected_pmip_init(x) x -# define public_pmip_init(x) x -# else -# ifdef PMIP -# define private_pmip_init(x) -# define protected_pmip_init(x) extern x -# define public_pmip_init(x) extern x -# else -# define private_pmip_init(x) -# define protected_pmip_init(x) -# define public_pmip_init(x) extern x -# endif -# endif -//----------------------------------------------------------------------------- -//-PROTOTYPES---------------------------------------------------------------------------- -/*! \fn void init_mag_icmp_sock(void) -* \brief Set necessary option on the icmpv6 socket. -* @ingroup PMIP6D -*/ -private_pmip_init(void init_mag_icmp_sock(void);) -/*! \fn void pmip_cleanup (void) -* \brief Release all resources handled by the LMA or MAG entity. -* @ingroup PMIP6D -*/ -public_pmip_init( void pmip_cleanup (void);) -/*! \fn int pmip_common_init (void) -* \brief Initialization common to LMA and MAGs. -* \return Status of the initialization, zero if success, else -1. -* @ingroup PMIP6D -*/ -private_pmip_init(int pmip_common_init (void);) -/*! \fn int pmip_mag_init (void) -* \brief Initialization of the MAG. -* \return Status of the initialization, zero if success, else -1. -* \note This function has to be called after pmip_common_init(). -* @ingroup PMIP6D -*/ -public_pmip_init( int pmip_mag_init (void);) -/*! \fn int pmip_lma_init (void) -* \brief Initialization of the LMA. -* \return Status of the initialization, zero if success, else -1. -* \note This function has to be called after pmip_common_init(). -* @ingroup PMIP6D -*/ -public_pmip_init( int pmip_lma_init (void);) -#endif diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/src/pmip/pmip_lma_proc.c b/openair3/PMIPv6/pmipv6-daemon-umip/src/pmip/pmip_lma_proc.c deleted file mode 100755 index f71d2469a8..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/src/pmip/pmip_lma_proc.c +++ /dev/null @@ -1,221 +0,0 @@ -/* - * This file is part of the PMIP, Proxy Mobile IPv6 for Linux. - * - * Authors: OPENAIR3 - * - * Copyright 2010-2011 EURECOM (Sophia-Antipolis, FRANCE) - * - * Proxy Mobile IPv6 (or PMIPv6, or PMIP) is a network-based mobility - * management protocol standardized by IETF. It is a protocol for building - * a common and access technology independent of mobile core networks, - * accommodating various access technologies such as WiMAX, 3GPP, 3GPP2 - * and WLAN based access architectures. Proxy Mobile IPv6 is the only - * network-based mobility management protocol standardized by IETF. - * - * PMIP Proxy Mobile IPv6 for Linux has been built above MIPL free software; - * which it involves that it is under the same terms of GNU General Public - * License version 2. See MIPL terms condition if you need more details. - */ -/*! \file pmip_lma_proc.c -* \brief -* \author OpenAir3 Group -* \date 12th of October 2010 -* \version 1.0 -* \company Eurecom -* \project OpenAirInterface -* \email: openair_tech@eurecom.fr -*/ -#define PMIP -#define PMIP_LMA_PROC_C -#ifdef HAVE_CONFIG_H -# include -#endif -//--------------------------------------------------------------------------------------------------------------------- -#include "pmip_handler.h" -#include "pmip_hnp_cache.h" -#include "pmip_lma_proc.h" -#include "pmip_tunnel.h" -//--------------------------------------------------------------------------------------------------------------------- -#include "rtnl.h" -#ifdef ENABLE_VT -# include "vt.h" -#endif -#include "debug.h" -#include "conf.h" -//--------------------------------------------------------------------------------------------------------------------- -int lma_setup_route(struct in6_addr *pmip6_addr, int tunnel) -{ - int res = 0; - - if (conf.TunnelingEnabled) { - dbg("Forward: Add new route for %x:%x:%x:%x:%x:%x:%x:%x in table %d\n", NIP6ADDR(pmip6_addr), RT6_TABLE_MIP6); - res = route_add(tunnel, RT6_TABLE_MIP6, RTPROT_MIP, 0, IP6_RT_PRIO_MIP6_FWD, &in6addr_any, 0, pmip6_addr, 128, NULL); - } - - return res; -} -//--------------------------------------------------------------------------------------------------------------------- -int lma_remove_route(struct in6_addr *pmip6_addr, int tunnel) -{ - int res = 0; - - if (conf.TunnelingEnabled) { - //Delete existing rule for the deleted MN - dbg("Delete old route for: %x:%x:%x:%x:%x:%x:%x:%x from table %d\n", NIP6ADDR(pmip6_addr), RT6_TABLE_MIP6); - res = route_del(tunnel, RT6_TABLE_MIP6, IP6_RT_PRIO_MIP6_FWD, &in6addr_any, 0, pmip6_addr, 128, NULL); - } - - return res; -} -//--------------------------------------------------------------------------------------------------------------------- -int lma_reg(pmip_entry_t * bce) -{ - if (bce != NULL) { - //create a tunnel between MAG and LMA && add a route for peer address. - bce->tunnel = pmip_tunnel_add(&conf.OurAddress, &bce->mn_serv_mag_addr, bce->link); - lma_setup_route(get_mn_addr(bce), bce->tunnel); - bce->status = 0; //PBU was Accepted! - //Add task for entry expiry. - pmip_cache_start(bce); - //Send a PBA to ack new serving MAG - dbg("Create PBA to new Serving MAG...\n"); - struct in6_addr_bundle addrs; - addrs.src = &conf.OurAddress; - addrs.dst = &bce->mn_serv_mag_addr; - mh_send_pba(&addrs, bce, &bce->lifetime, 0); - return 0; - } else { - dbg("WARNING parameter pmip_entry_t * bce is NULL\n"); - return -1; - } -} -//--------------------------------------------------------------------------------------------------------------------- -int lma_reg_no_new_tunnel(pmip_entry_t * bce) -{ - if (bce != NULL) { - bce->status = 0; //PBU was Accepted! - //Add task for entry expiry. - pmip_cache_start(bce); - //Send a PBA to ack new serving MAG - dbg("Create PBA to new Serving MAG...\n"); - struct in6_addr_bundle addrs; - addrs.src = &conf.OurAddress; - addrs.dst = &bce->mn_serv_mag_addr; - mh_send_pba(&addrs, bce, &bce->lifetime, 0); - return 0; - } else { - dbg("WARNING parameter pmip_entry_t * bce is NULL\n"); - return -1; - } -} -//--------------------------------------------------------------------------------------------------------------------- -int lma_dereg(pmip_entry_t * bce, msg_info_t * info, int propagate) -{ - if (bce != NULL) { - //Delete the Task - del_task(&bce->tqe); - //delete old route to old tunnel. - lma_remove_route(get_mn_addr(bce), bce->tunnel); - //decrement users of old tunnel. - pmip_tunnel_del(bce->tunnel); - - if (propagate) { - dbg("Create PBA for deregistration for MAG (%x:%x:%x:%x:%x:%x:%x:%x)\n", NIP6ADDR(&bce->mn_serv_mag_addr)); - struct in6_addr_bundle addrs; - struct timespec lifetime = { 0, 0 }; - addrs.src = &conf.LmaAddress; - addrs.dst = &bce->mn_serv_mag_addr; - bce->seqno_in = info->seqno; - mh_send_pba(&addrs, bce, &lifetime, 0); - } else { - dbg("Doing nothing....\n"); - } - - bce->type = BCE_NO_ENTRY; - } else { - dbg("WARNING parameter pmip_entry_t * bce is NULL\n"); - return -1; - } - - return 0; -} -//--------------------------------------------------------------------------------------------------------------------- -int lma_update_binding_entry(pmip_entry_t * bce, msg_info_t * info) -{ - int result = 0; - - if (bce != NULL) { - if (info != NULL) { - int result; - struct in6_addr r_tmp, r_tmp1; - memset(&r_tmp1, 0, sizeof(struct in6_addr)); - dbg("Store Binding Entry\n"); - bce->our_addr = conf.OurAddress; - bce->mn_suffix = info->mn_iid; - bce->mn_hw_address = EUI64_to_EUI48(info->mn_iid); - dbg("searching for the prefix for a new BCE entry...\n"); - r_tmp = lma_mnid_hnp_map(bce->mn_hw_address, &result); - - if (result >= 0) { - if (IN6_ARE_ADDR_EQUAL(&r_tmp, &info->mn_prefix)) { - bce->mn_prefix = r_tmp; - dbg("found the prefix %x:%x:%x:%x:%x:%x:%x:%x in lma_update_binding entry \n", NIP6ADDR(&bce->mn_prefix)); - - if (IN6_ARE_ADDR_EQUAL(&bce->mn_serv_mag_addr, &r_tmp1)) { - dbg("First new serving MAG: %x:%x:%x:%x:%x:%x:%x:%x \n", NIP6ADDR(&info->src)); - result = 1; - } else if (!(IN6_ARE_ADDR_EQUAL(&bce->mn_serv_mag_addr, &info->src))) { - dbg("New serving MAG: %x:%x:%x:%x:%x:%x:%x:%x (Old MAG: %x:%x:%x:%x:%x:%x:%x:%x)\n", NIP6ADDR(&info->src), NIP6ADDR(&bce->mn_serv_mag_addr)); - //delete old route to old tunnel. - lma_remove_route(get_mn_addr(bce), bce->tunnel); - //decrement users of old tunnel. - dbg("Deleting the old tunnel \n"); - pmip_tunnel_del(bce->tunnel); - result = 1; - } else { - dbg("Same serving MAG: %x:%x:%x:%x:%x:%x:%x:%x, No need to delete tunnel\n", NIP6ADDR(&info->src)); - // to do here in future: cancel possible delete timer on this tunnel - result = 0; - } - } else { - dbg("Mobine node prefix changed, delete route, tunnel\n"); - //delete old route to old tunnel. - lma_remove_route(get_mn_addr(bce), bce->tunnel); - //decrement users of old tunnel. - pmip_tunnel_del(bce->tunnel); - dbg("Deleting the old tunnel \n"); - result = 1; - } - - - } - - bce->timestamp.first = info->timestamp.first; - bce->timestamp.second = info->timestamp.second; - bce->mn_prefix = info->mn_prefix; - //bce->mn_addr = info->mn_addr; - bce->mn_link_local_addr = info->mn_link_local_addr; - bce->mn_serv_mag_addr = info->src; - bce->lifetime.tv_sec = info->lifetime.tv_sec; - bce->lifetime.tv_nsec = 0; - bce->n_rets_counter = conf.MaxMessageRetransmissions; - bce->seqno_in = info->seqno; - - // update bce->mn_addr with bce->mn_prefix and bce->mn_suffix - get_mn_addr(bce); - - dbg("bce->link %d => %d\n", bce->link, info->iif); - bce->link = info->iif; - dbg("Finished updating the binding cache\n"); - return result; - } else { - dbg("WARNING parameter msg_info_t* info is NULL\n"); - result = -1; - return result; - } - } else { - dbg("WARNING parameter pmip_entry_t * bce is NULL\n"); - result = -1; - return result; - } -} diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/src/pmip/pmip_lma_proc.h b/openair3/PMIPv6/pmipv6-daemon-umip/src/pmip/pmip_lma_proc.h deleted file mode 100755 index aca64e4411..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/src/pmip/pmip_lma_proc.h +++ /dev/null @@ -1,101 +0,0 @@ -/* - * This file is part of the PMIP, Proxy Mobile IPv6 for Linux. - * - * Authors: OPENAIR3 - * - * Copyright 2010-2011 EURECOM (Sophia-Antipolis, FRANCE) - * - * Proxy Mobile IPv6 (or PMIPv6, or PMIP) is a network-based mobility - * management protocol standardized by IETF. It is a protocol for building - * a common and access technology independent of mobile core networks, - * accommodating various access technologies such as WiMAX, 3GPP, 3GPP2 - * and WLAN based access architectures. Proxy Mobile IPv6 is the only - * network-based mobility management protocol standardized by IETF. - * - * PMIP Proxy Mobile IPv6 for Linux has been built above MIPL free software; - * which it involves that it is under the same terms of GNU General Public - * License version 2. See MIPL terms condition if you need more details. - */ -/*! \file pmip_lma_proc.h -* \brief -* \author OpenAir3 Group -* \date 12th of October 2010 -* \version 1.0 -* \company Eurecom -* \project OpenAirInterface -* \email: openair_tech@eurecom.fr -*/ - -/** \defgroup LMA_Processing LMA_Processing - * \ingroup PMIP6D - * PMIP Processing for LMA - * @{ - */ - -#ifndef __PMIP_LMA_PROC_H__ -# define __PMIP_LMA_PROC_H__ -//----------------------------------------------------------------------------- -# ifdef PMIP_LMA_PROC_C -# define private_pmip_lma_proc(x) x -# define protected_pmip_lma_proc(x) x -# define public_pmip_lma_proc(x) x -# else -# ifdef PMIP -# define private_pmip_lma_proc(x) -# define protected_pmip_lma_proc(x) extern x -# define public_pmip_lma_proc(x) extern x -# else -# define private_pmip_lma_proc(x) -# define protected_pmip_lma_proc(x) -# define public_pmip_lma_proc(x) extern x -# endif -# endif -//----------------------------------------------------------------------------- -# include -# include "pmip_cache.h" -# include "pmip_msgs.h" -//-PROTOTYPES---------------------------------------------------------------------------- -/*! \fn int lma_setup_route(struct in6_addr *, int ) -* \brief Set a route by establishing a tunnel. -* \param[in] pmip6_addr Destination address -* \param[in] tunnel Tunnel identifier -* \return Returns zero on success, negative otherwise. -*/ -private_pmip_lma_proc(int lma_setup_route(struct in6_addr *pmip6_addr, int tunnel);) -/*! \fn int lma_remove_route(struct in6_addr *pmip6_addr, int tunnel) -* \brief Remove a route established by a tunnel -* \param[in] pmip6_addr Destination address -* \param[in] tunnel Tunnel identifier -* \return Returns zero on success, negative otherwise. -*/ -protected_pmip_lma_proc(int lma_remove_route(struct in6_addr *pmip6_addr, int tunnel);) -/*! \fn int lma_reg(pmip_entry_t * bce) -* \brief Register a binding cache entry, then create a tunnel between LMA and MAG (LMA->MAG) for this mobile node and add a route for peer address. -* \param[in] bce A binding cache entry -* \return Zero if bce is not NULL, else -1 -*/ -protected_pmip_lma_proc(int lma_reg(pmip_entry_t * bce);) -/*! \fn int lma_reg_no_new_tunnel(pmip_entry_t * bce) -* \brief Register a binding cache entry. -* \param[in] bce A binding cache entry -* \return Zero if bce is not NULL, else -1 -*/ -protected_pmip_lma_proc(int lma_reg_no_new_tunnel(pmip_entry_t * bce);) -/*! \fn int lma_dereg(pmip_entry_t * bce, msg_info_t * info, int propagate) -* \brief Deregister a binding cache entry -* \param[in] bce A binding cache entry -* \param[in] info Informations contained in the message received -* \param[in] propagate Deregistration to MAG -* \return the number of binding cache entries in the cache. -*/ -protected_pmip_lma_proc(int lma_dereg(pmip_entry_t * bce, msg_info_t * info, int propagate);) -/*! \fn int lma_update_binding_entry(pmip_entry_t * bce, msg_info_t * info) -* \brief Update a binding cache entry with received message informations -* \param[in] bce A binding cache entry -* \param[in] info Informations contained in the message received -* \return 1 if a new tunnel must br created, else 0, if error in parameters return -1. -*/ -protected_pmip_lma_proc(int lma_update_binding_entry(pmip_entry_t * bce, msg_info_t * info);) -#endif -/** @}*/ - diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/src/pmip/pmip_mag_proc.c b/openair3/PMIPv6/pmipv6-daemon-umip/src/pmip/pmip_mag_proc.c deleted file mode 100755 index b91fd3e5fe..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/src/pmip/pmip_mag_proc.c +++ /dev/null @@ -1,545 +0,0 @@ -/* - * This file is part of the PMIP, Proxy Mobile IPv6 for Linux. - * - * Authors: OPENAIR3 - * - * Copyright 2010-2011 EURECOM (Sophia-Antipolis, FRANCE) - * - * Proxy Mobile IPv6 (or PMIPv6, or PMIP) is a network-based mobility - * management protocol standardized by IETF. It is a protocol for building - * a common and access technology independent of mobile core networks, - * accommodating various access technologies such as WiMAX, 3GPP, 3GPP2 - * and WLAN based access architectures. Proxy Mobile IPv6 is the only - * network-based mobility management protocol standardized by IETF. - * - * PMIP Proxy Mobile IPv6 for Linux has been built above MIPL free software; - * which it involves that it is under the same terms of GNU General Public - * License version 2. See MIPL terms condition if you need more details. - */ -/*! \file pmip_mag_proc.c -* \brief -* \author OpenAir3 Group -* \date 12th of October 2010 -* \version 1.0 -* \company Eurecom -* \project OpenAirInterface -* \email: openair_tech@eurecom.fr -*/ -#define PMIP -#define PMIP_MAG_PROC_C -#ifdef HAVE_CONFIG_H -# include -#endif -#include -//--------------------------------------------------------------------------------------------------------------------- -#include "pmip_mag_proc.h" -#include "pmip_handler.h" -#include "pmip_hnp_cache.h" -#include "pmip_tunnel.h" -//--------------------------------------------------------------------------------------------------------------------- -#include "rtnl.h" -#include "tunnelctl.h" -#ifdef ENABLE_VT -# include "vt.h" -#endif -#include "debug.h" -#include "conf.h" -//--------------------------------------------------------------------------------------------------------------------- -void pmip_timer_retrans_pbu_handler(struct tq_elem *tqe); -//--------------------------------------------------------------------------------------------------------------------- -int mag_setup_route(struct in6_addr *pmip6_addr, int downlink) -{ - int res = 0; - dbg("Downlink(MAG local traffic also): Add new rule for dest=%x:%x:%x:%x:%x:%x:%x:%x\n", NIP6ADDR(pmip6_addr)); - res = rule_add(NULL, RT6_TABLE_MIP6, IP6_RULE_PRIO_PMIP6_FWD-1, RTN_UNICAST, &in6addr_any, 0, pmip6_addr, 128, 0); - - if (res < 0) { - dbg("ERROR Add new rule for downlink, MAG local traffic also"); - } - - if (conf.TunnelingEnabled) { - //add a rule for MN for uplink traffic from MN must query the TABLE for PMIP --> tunneled - dbg("Uplink: Add new rule for tunneling src=%x:%x:%x:%x:%x:%x:%x:%x\n", NIP6ADDR(pmip6_addr)); - res = rule_add(NULL, RT6_TABLE_PMIP, IP6_RULE_PRIO_PMIP6_FWD, RTN_UNICAST, pmip6_addr, 128, &in6addr_any, 0, 0); - - if (res < 0) { - dbg("ERROR Add new rule for tunneling"); - } - } else { - dbg("WARNING CANNOT ADD new rule for tunneling src=%x:%x:%x:%x:%x:%x:%x:%x SINCE TUNNELING DISABLED IN CONFIG\n", NIP6ADDR(pmip6_addr)); - } - - //add a route for downlink traffic through LMA (any src) ==> MN - dbg("Downlink: Add new route for %x:%x:%x:%x:%x:%x:%x:%x in table %d\n", NIP6ADDR(pmip6_addr), RT6_TABLE_MIP6); - res |= route_add(downlink, RT6_TABLE_MIP6, RTPROT_MIP, 0, IP6_RT_PRIO_MIP6_FWD, &in6addr_any, 0, pmip6_addr, 128, NULL); - - if (res < 0) { - dbg("ERROR Add new rule for tunneling"); - } - - return res; -} -//--------------------------------------------------------------------------------------------------------------------- -int mag_remove_route(struct in6_addr *pmip6_addr, int downlink) -{ - int res = 0; - //Delete existing rule for the deleted MN - dbg("Downlink(MAG local traffic also): Delete new rule for dest=%x:%x:%x:%x:%x:%x:%x:%x\n", NIP6ADDR(pmip6_addr)); - res = rule_del(NULL, RT6_TABLE_MIP6, IP6_RULE_PRIO_PMIP6_FWD-1, RTN_UNICAST, &in6addr_any, 0, pmip6_addr, 128, 0); - - if (res < 0) { - dbg("ERROR Del old rule for downlink, MAG local traffic also"); - } - - if (conf.TunnelingEnabled) { - dbg("Uplink: Delete old rule for tunneling src=%x:%x:%x:%x:%x:%x:%x:%x\n", NIP6ADDR(pmip6_addr)); - res = rule_del(NULL, RT6_TABLE_PMIP, IP6_RULE_PRIO_PMIP6_FWD, RTN_UNICAST, pmip6_addr, 128, &in6addr_any, 0, 0); - - if (res < 0) { - dbg("ERROR Del old rule for tunneling "); - } - } else { - dbg("WARNING CANNOT DELETE old rule for tunneling src=%x:%x:%x:%x:%x:%x:%x:%x SINCE TUNNELING DISABLED IN CONFIG\n", NIP6ADDR(pmip6_addr)); - } - - //Delete existing route for the deleted MN - dbg("Downlink: Delete old routes for: %x:%x:%x:%x:%x:%x:%x:%x from table %d\n", NIP6ADDR(pmip6_addr), RT6_TABLE_MIP6); - res |= route_del(downlink, RT6_TABLE_MIP6, IP6_RT_PRIO_MIP6_FWD, &in6addr_any, 0, pmip6_addr, 128, NULL); - - if (res < 0) { - dbg("ERROR Del old rule for tunneling "); - } - - return res; -} -//--------------------------------------------------------------------------------------------------------------------- -int mag_dereg(pmip_entry_t * bce, int propagate) -{ - //Delete existing route & rule for the deleted MN - int res = 0; - bce->type = BCE_NO_ENTRY; - res = mag_remove_route(get_mn_addr(bce), bce->link); - int usercount = tunnel_getusers(bce->tunnel); - dbg("# of binding entries %d \n", usercount); - - if (usercount == 1) { - route_del(bce->tunnel, RT6_TABLE_PMIP, IP6_RT_PRIO_MIP6_FWD, &in6addr_any, 0, &in6addr_any, 0, NULL); - } - - //decrement users of old tunnel. - pmip_tunnel_del(bce->tunnel); - - if (propagate) { - dbg("Propagate the deregistration... \n"); - struct in6_addr_bundle addrs; - addrs.src = &conf.OurAddress; - addrs.dst = &conf.LmaAddress; - struct timespec Lifetime = { 0, 0 }; - dbg("Create PBU for LMA for deregistration....\n"); - mh_send_pbu(&addrs, bce, &Lifetime, 0); - } - - //Delete PBU cache entry - dbg("Delete PBU entry....\n"); - return res; -} -//--------------------------------------------------------------------------------------------------------------------- -int mag_start_registration(pmip_entry_t * bce) -{ - //Create PBU and send to the LMA - struct in6_addr_bundle addrs; - addrs.src = &conf.MagAddressEgress[0]; - addrs.dst = &conf.LmaAddress; - - // min 4 seconds, because lifetime is sent over the network in PBU divided by 4 - struct timespec lifetime = { 10, 0 }; - mh_send_pbu(&addrs, bce, &lifetime, 0); - //mh_send_pbu(&addrs, bce, &conf.PBULifeTime, 0); - //add a new task for PBU retransmission. - struct timespec expires; - clock_gettime(CLOCK_REALTIME, &bce->add_time); - tsadd(bce->add_time, conf.RetransmissionTimeOut, expires); - add_task_abs(&expires, &bce->tqe, pmip_timer_retrans_pbu_handler); - dbg("PBU Retransmissions Timer is registered....\n"); - return 0; -} -//--------------------------------------------------------------------------------------------------------------------- -int mag_end_registration(pmip_entry_t * bce, int iif) -{ - //Change the BCE type. - bce->type = BCE_PMIP; - dbg("New PMIP cache entry type: %d\n", bce->type); - //Reset the Retransmissions counter. - bce->n_rets_counter = conf.MaxMessageRetransmissions; - //Add task for entry expiry. - dbg("Timer for Expiry is initialized: %d(s)!\n", bce->lifetime.tv_sec); - pmip_cache_start(bce); - //create a tunnel between MAG and LMA. - bce->tunnel = pmip_tunnel_add(&conf.OurAddress, &conf.LmaAddress, iif); - int usercount = tunnel_getusers(bce->tunnel); - dbg("# of binding entries %d\n", usercount); - - if (usercount == 1) { - dbg("Add routing entry for uplink traffic\n"); - route_add(bce->tunnel, RT6_TABLE_PMIP, RTPROT_MIP, 0, IP6_RT_PRIO_MIP6_FWD, &in6addr_any, 0, &in6addr_any, 0, NULL); - } - - mag_kickoff_ra(bce); - dbg("Adding route for : %x:%x:%x:%x:%x:%x:%x:%x\n", NIP6ADDR(get_mn_addr(bce))); - mag_setup_route(get_mn_addr(bce), bce->link); - dbg("Out of setup route\n"); - return 0; -} -//--------------------------------------------------------------------------------------------------------------------- -int mag_end_registration_no_new_tunnel(pmip_entry_t * bce, __attribute__ ((unused)) int iif) -{ - //Force the BCE type. - bce->type = BCE_PMIP; - dbg("PMIP cache entry type: %d\n", bce->type); - //Reset the Retransmissions counter. - bce->n_rets_counter = conf.MaxMessageRetransmissions; - //Add task for entry expiry. - dbg("Timer for Expiry is initialized: %d(s)!\n", bce->lifetime.tv_sec); - pmip_cache_start(bce); - mag_kickoff_ra(bce); - //dbg("Adding route for : %x:%x:%x:%x:%x:%x:%x:%x\n", NIP6ADDR(get_mn_addr(bce))); - //mag_setup_route(get_mn_addr(bce), bce->link); - //dbg("Out of setup route\n"); - return 0; -} -//--------------------------------------------------------------------------------------------------------------------- -int mag_force_update_registration(pmip_entry_t * bce, __attribute__ ((unused)) int iif) -{ - //int mutex_return_code; - - // first delete current task - /*mutex_return_code = pthread_rwlock_wrlock(&bce->lock); - if (mutex_return_code != 0) { - dbg("pthread_rwlock_wrlock(&bce->lock) %s\n", strerror(mutex_return_code)); - }*/ - if (bce->tqe.task != NULL) { - dbg("Deleting current BCE task\n"); - del_task(&bce->tqe); - } - - /*mutex_return_code = pthread_rwlock_unlock(&bce->lock); - if (mutex_return_code != 0) { - dbg("pthread_rwlock_unlock(&bce->lock) %s\n", strerror(mutex_return_code)); - }*/ - - //Create PBU and send to the LMA - struct in6_addr_bundle addrs; - addrs.src = &conf.MagAddressEgress[0]; - addrs.dst = &conf.LmaAddress; - - //struct timespec lifetime = { 3, 0 }; - mh_send_pbu(&addrs, bce, &conf.PBULifeTime, 0); - //add a new task for PBU retransmission. - struct timespec expires; - clock_gettime(CLOCK_REALTIME, &bce->add_time); - tsadd(bce->add_time, conf.RetransmissionTimeOut, expires); - add_task_abs(&expires, &bce->tqe, pmip_timer_retrans_pbu_handler); - dbg("PBU Retransmissions Timer is registered....\n"); - return 0; -} -//--------------------------------------------------------------------------------------------------------------------- -int mag_kickoff_ra(pmip_entry_t * bce) -{ - struct in6_addr *src; - src = malloc(sizeof(struct in6_addr)); - memset(src, 0, sizeof(struct in6_addr)); - struct iovec iov; - struct nd_router_advert *radvert; - adv_prefix_t prefix; - unsigned char buff[MSG_SIZE]; - size_t len = 0; - memset(&buff, 0, sizeof(buff)); - radvert = (struct nd_router_advert *) buff; - radvert->nd_ra_type = ND_ROUTER_ADVERT; - radvert->nd_ra_code = 0; - radvert->nd_ra_cksum = 0; - radvert->nd_ra_curhoplimit = router_ad_iface.AdvCurHopLimit; - radvert->nd_ra_flags_reserved = (router_ad_iface.AdvManagedFlag) ? ND_RA_FLAG_MANAGED : 0; - radvert->nd_ra_flags_reserved |= (router_ad_iface.AdvOtherConfigFlag) ? ND_RA_FLAG_OTHER : 0; - /* Mobile IPv6 ext */ - radvert->nd_ra_flags_reserved |= (router_ad_iface.AdvHomeAgentFlag) ? ND_RA_FLAG_HOME_AGENT : 0; - /* if forwarding is disabled, send zero router lifetime */ - radvert->nd_ra_router_lifetime = !check_ip6_forwarding()? htons(router_ad_iface.AdvDefaultLifetime) : 0; - radvert->nd_ra_reachable = htonl(router_ad_iface.AdvReachableTime); //ask giuliana - radvert->nd_ra_retransmit = htonl(router_ad_iface.AdvRetransTimer); // ask giuliana - len = sizeof(struct nd_router_advert); - prefix = router_ad_iface.Adv_Prefix; - /* - * add prefix options - */ - struct nd_opt_prefix_info *pinfo; - pinfo = (struct nd_opt_prefix_info *) (buff + len); - pinfo->nd_opt_pi_type = ND_OPT_PREFIX_INFORMATION; - pinfo->nd_opt_pi_len = 4; - pinfo->nd_opt_pi_prefix_len = prefix.PrefixLen; - pinfo->nd_opt_pi_flags_reserved = (prefix.AdvOnLinkFlag) ? ND_OPT_PI_FLAG_ONLINK : 0; - pinfo->nd_opt_pi_flags_reserved |= (prefix.AdvAutonomousFlag) ? ND_OPT_PI_FLAG_AUTO : 0; - /* Mobile IPv6 ext */ - pinfo->nd_opt_pi_flags_reserved |= (prefix.AdvRouterAddr) ? ND_OPT_PI_FLAG_RADDR : 0; - pinfo->nd_opt_pi_valid_time = htonl(prefix.AdvValidLifetime); - pinfo->nd_opt_pi_preferred_time = htonl(prefix.AdvPreferredLifetime); - pinfo->nd_opt_pi_reserved2 = 0; - memcpy(&pinfo->nd_opt_pi_prefix, &bce->mn_prefix, sizeof(struct in6_addr)); - len += sizeof(*pinfo); - - //mobile ip extension - if (router_ad_iface.AdvHomeAgentInfo - && (router_ad_iface.AdvMobRtrSupportFlag || router_ad_iface.HomeAgentPreference != 0 || router_ad_iface.HomeAgentLifetime != router_ad_iface.AdvDefaultLifetime)) { - home_agent_info_t ha_info; - ha_info.type = ND_OPT_HOME_AGENT_INFO; - ha_info.length = 1; - ha_info.flags_reserved = (router_ad_iface.AdvMobRtrSupportFlag) ? ND_OPT_HAI_FLAG_SUPPORT_MR : 0; - ha_info.preference = htons(router_ad_iface.HomeAgentPreference); - ha_info.lifetime = htons(router_ad_iface.HomeAgentLifetime); - memcpy(buff + len, &ha_info, sizeof(ha_info)); - len += sizeof(ha_info); - } - - iov.iov_len = len; - iov.iov_base = (caddr_t) buff; - int err; - err = icmp6_send(bce->link, 255, src, &bce->mn_link_local_addr, &iov, 1); - - if (err < 0) { - dbg("Error: couldn't send a RA message ...\n"); - } else { - dbg("RA LL ADDRESS sent on bce link %d\n", bce->link); - } - - return err; -} -//--------------------------------------------------------------------------------------------------------------------- -int check_ip6_forwarding(void) -{ - int forw_sysctl[] = { SYSCTL_IP6_FORWARDING }; - int value; - int rc; - size_t size = sizeof(value); - FILE *fp = NULL; -#ifdef __linux__ - fp = fopen(PROC_SYS_IP6_FORWARDING, "r"); - - if (fp) { - rc = fscanf(fp, "%d", &value); - fclose(fp); - - if (rc <= 0) { - dbg("ERROR reading %s" ,PROC_SYS_IP6_FORWARDING); - } - } else - dbg("Correct IPv6 forwarding procfs entry not found, " "perhaps the procfs is disabled, " "or the kernel interface has changed?"); - -#endif /* __linux__ */ - - if (!fp && sysctl(forw_sysctl, sizeof(forw_sysctl) / sizeof(forw_sysctl[0]), &value, &size, NULL, 0) < 0) { - dbg("Correct IPv6 forwarding sysctl branch not found, " "perhaps the kernel interface has changed?"); - return (0); /* this is of advisory value only */ - } - - if (value != 1) { - dbg("IPv6 forwarding setting is: %u, should be 1", value); - return (-1); - } - - return (0); -} -//--------------------------------------------------------------------------------------------------------------------- -int mag_get_ingress_info(int *if_index, char *dev_name_mn_link) -{ - FILE *fp; - char str_addr[INET6_ADDRSTRLEN]; - unsigned int plen, scope, dad_status, if_idx; - struct in6_addr addr; - unsigned int ap; - int i; - - char devname[32]; - - if ((fp = fopen("/proc/net/if_inet6", "r")) == NULL) { - dbg("you don't have root previleges, please logon as root, can't open %s:", "/proc/net/if_inet6"); - return -1; - } - - // first find the device name - while (fscanf(fp, "%32s %x %02x %02x %02x %15s\n", str_addr, &if_idx, &plen, &scope, &dad_status, devname) != EOF) { - for (i = 0; i < 16; i++) { - sscanf(str_addr + i * 2, "%02x", &ap); - addr.s6_addr[i] = (unsigned char) ap; - } - - if (memcmp(&conf.MagAddressIngress[0], &addr, sizeof(struct in6_addr)) == 0) { - if (dev_name_mn_link != NULL) { - strncpy(dev_name_mn_link, devname, 32); - dbg("The interface name of the device that is used for communicate with MNs is %s\n", dev_name_mn_link); - } - - if ( if_index != NULL) { - *if_index = if_idx; - dbg("The interface index of the device that is used for communicate with MNs is %d\n", *if_index); - } - - fclose(fp); - return 1; - } - } - - fclose(fp); - dbg("No interface name of the device that is used for communicate with MNs found"); - return -1; -} -//--------------------------------------------------------------------------------------------------------------------- -int mag_get_egress_info(int *if_index, char *dev_name_mn_link) -{ - FILE *fp; - char str_addr[INET6_ADDRSTRLEN]; - unsigned int plen, scope, dad_status, if_idx; - struct in6_addr addr; - unsigned int ap; - int i; - - char devname[32]; - - if ((fp = fopen("/proc/net/if_inet6", "r")) == NULL) { - dbg("you don't have root previleges, please logon as root, can't open %s:", "/proc/net/if_inet6"); - return -1; - } - - // first find the device name - while (fscanf(fp, "%32s %x %02x %02x %02x %15s\n", str_addr, &if_idx, &plen, &scope, &dad_status, devname) != EOF) { - for (i = 0; i < 16; i++) { - sscanf(str_addr + i * 2, "%02x", &ap); - addr.s6_addr[i] = (unsigned char) ap; - } - - if (memcmp(&conf.MagAddressEgress[0], &addr, sizeof(struct in6_addr)) == 0) { - if (dev_name_mn_link != NULL) { - strncpy(dev_name_mn_link, devname, 32); - dbg("The interface name of the device that is used for communicate with LMA is %s\n", dev_name_mn_link); - } - - if ( if_index != NULL) { - *if_index = if_idx; - dbg("The interface index of the device that is used for communicate with LMA is %d\n", *if_index); - } - - fclose(fp); - return 1; - } - } - - fclose(fp); - dbg("No interface name of the device that is used for communicate with LMA found"); - return -1; -} -//--------------------------------------------------------------------------------------------------------------------- -int setup_linklocal_addr(struct in6_addr *src) -{ - FILE *fp; - char str_addr[INET6_ADDRSTRLEN]; - unsigned int plen, scope, dad_status, if_idx; - struct in6_addr addr; - unsigned int ap; - int i; - int flagy = 0; - char devname[32]; - char dev_name_mn_link[32]; - - if ((fp = fopen("/proc/net/if_inet6", "r")) == NULL) { - dbg("you don't have root previleges, please logon as root, can't open %s:", "/proc/net/if_inet6"); - return -1; - } - - // first find the device name - while (fscanf(fp, "%32s %x %02x %02x %02x %15s\n", str_addr, &if_idx, &plen, &scope, &dad_status, devname) != EOF) { - for (i = 0; i < 16; i++) { - sscanf(str_addr + i * 2, "%02x", &ap); - addr.s6_addr[i] = (unsigned char) ap; - } - - if (memcmp(&conf.MagAddressIngress[0], &addr, sizeof(struct in6_addr)) == 0) { - strncpy(dev_name_mn_link, devname, 32); - flagy = 1; - dbg("The interface name of the device that is used for communicate with MNs is %s\n", dev_name_mn_link); - break; - } - } - - fclose(fp); - - if ((fp = fopen("/proc/net/if_inet6", "r")) == NULL) { - dbg("can't open %s:", "/proc/net/if_inet6"); - return -1; - } - - while (fscanf(fp, "%32s %x %02x %02x %02x %15s\n", str_addr, &if_idx, &plen, &scope, &dad_status, devname) != EOF) { - if (scope == IPV6_ADDR_LINKLOCAL && strcmp(devname, dev_name_mn_link) == 0) { //we have to store the interface name from which we get the router solicitation - dbg("entered the if to get %s iface ll address ", dev_name_mn_link); - flagy = 1; - - for (i = 0; i < 16; i++) { - sscanf(str_addr + i * 2, "%02x", &ap); - addr.s6_addr[i] = (unsigned char) ap; - } - - dbg("PMIP cache entry is found for: %x:%x:%x:%x:%x:%x:%x:%x \n", NIP6ADDR(&addr)); - *src = addr; - } - } - - if (flagy == 0) { - dbg("no link local address configured "); - fclose(fp); - return -1; - } else { - fclose(fp); - return 1; - } -} -//--------------------------------------------------------------------------------------------------------------------- -int mag_update_binding_entry(pmip_entry_t * bce, msg_info_t * info) -{ - dbg("Update binding entry\n"); - bce->our_addr = conf.OurAddress; - bce->mn_suffix = info->mn_iid; - bce->mn_hw_address = EUI64_to_EUI48(info->mn_iid); - bce->mn_prefix = info->mn_prefix; - bce->mn_addr = info->mn_addr; - bce->mn_link_local_addr = info->mn_link_local_addr; - bce->mn_serv_mag_addr = info->src; - bce->lifetime = info->lifetime; - bce->n_rets_counter = conf.MaxMessageRetransmissions; - bce->seqno_in = info->seqno; - bce->link = info->iif; - return 0; -} -//--------------------------------------------------------------------------------------------------------------------- -int mag_pmip_md(msg_info_t * info, pmip_entry_t * bce) -{ - if (bce != NULL) { - bce->our_addr = conf.OurAddress; - bce->mn_suffix = info->mn_iid; - bce->mn_prefix = info->mn_prefix; - bce->mn_serv_mag_addr = conf.OurAddress; - bce->mn_serv_lma_addr = conf.LmaAddress; - bce->seqno_out = 0; - bce->PBU_flags = IP6_MH_BU_ACK | IP6_MH_BU_PR; - bce->link = info->iif; - struct in6_addr *link_local = link_local_addr(&bce->mn_suffix); - bce->mn_link_local_addr = *link_local; // link local address of MN - bce->type = BCE_TEMP; - dbg("Making BCE entry in MAG with HN prefix %x:%x:%x:%x:%x:%x:%x:%x\n", NIP6ADDR(&bce->mn_prefix)); - dbg(" Suffix %x:%x:%x:%x:%x:%x:%x:%x\n", NIP6ADDR(&bce->mn_suffix)); - dbg(" Link local addr %x:%x:%x:%x:%x:%x:%x:%x\n", NIP6ADDR(&bce->mn_link_local_addr)); - dbg(" Serv mag addr %x:%x:%x:%x:%x:%x:%x:%x\n", NIP6ADDR(&bce->mn_serv_mag_addr)); - dbg(" Serv lma addr %x:%x:%x:%x:%x:%x:%x:%x\n", NIP6ADDR(&bce->mn_serv_lma_addr)); - dbg("New attachment detected! Start Location Registration procedure...\n"); - mag_start_registration(bce); - } - - return 0; -} diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/src/pmip/pmip_mag_proc.h b/openair3/PMIPv6/pmipv6-daemon-umip/src/pmip/pmip_mag_proc.h deleted file mode 100755 index 863841faf2..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/src/pmip/pmip_mag_proc.h +++ /dev/null @@ -1,179 +0,0 @@ -/* - * This file is part of the PMIP, Proxy Mobile IPv6 for Linux. - * - * Authors: OPENAIR3 - * - * Copyright 2010-2011 EURECOM (Sophia-Antipolis, FRANCE) - * - * Proxy Mobile IPv6 (or PMIPv6, or PMIP) is a network-based mobility - * management protocol standardized by IETF. It is a protocol for building - * a common and access technology independent of mobile core networks, - * accommodating various access technologies such as WiMAX, 3GPP, 3GPP2 - * and WLAN based access architectures. Proxy Mobile IPv6 is the only - * network-based mobility management protocol standardized by IETF. - * - * PMIP Proxy Mobile IPv6 for Linux has been built above MIPL free software; - * which it involves that it is under the same terms of GNU General Public - * License version 2. See MIPL terms condition if you need more details. - */ -/*! \file pmip_mag_proc.h -* \brief -* \author OpenAir3 Group -* \date 12th of October 2010 -* \version 1.0 -* \company Eurecom -* \project OpenAirInterface -* \email: openair_tech@eurecom.fr -*/ - -/** \defgroup MAG_Processing MAG_Processing - * \ingroup PMIP6D - * PMIP PROCessing for MAG - * @{ - */ - -#ifndef __PMIP_MAG_PROC_H__ -# define __PMIP_MAG_PROC_H__ -//----------------------------------------------------------------------------- -# ifdef PMIP_MAG_PROC_C -# define private_pmip_mag_proc(x) x -# define protected_pmip_mag_proc(x) x -# define public_pmip_mag_proc(x) x -# else -# ifdef PMIP -# define private_pmip_mag_proc(x) -# define protected_pmip_mag_proc(x) extern x -# define public_pmip_mag_proc(x) extern x -# else -# define private_pmip_mag_proc(x) -# define protected_pmip_mag_proc(x) -# define public_pmip_mag_proc(x) extern x -# endif -# endif -//----------------------------------------------------------------------------- -# define SYSCTL_IP6_FORWARDING CTL_NET, NET_IPV6, NET_IPV6_CONF, NET_PROTO_CONF_ALL, NET_IPV6_FORWARDING -# define PROC_SYS_IP6_FORWARDING "/proc/sys/net/ipv6/conf/all/forwarding" -# define PROC_SYS_IP6_LINKMTU "/proc/sys/net/ipv6/conf/%s/mtu" -# define PROC_SYS_IP6_CURHLIM "/proc/sys/net/ipv6/conf/%s/hop_limit" -# define PROC_SYS_IP6_BASEREACHTIME_MS "/proc/sys/net/ipv6/neigh/%s/base_reachable_time_ms" -# define PROC_SYS_IP6_BASEREACHTIME "/proc/sys/net/ipv6/neigh/%s/base_reachable_time" -# define PROC_SYS_IP6_RETRANSTIMER_MS "/proc/sys/net/ipv6/neigh/%s/retrans_time_ms" -# define PROC_SYS_IP6_RETRANSTIMER "/proc/sys/net/ipv6/neigh/%s/retrans_time" - -# ifndef IPV6_ADDR_LINKLOCAL -# define IPV6_ADDR_LINKLOCAL 0x0020U -# endif -//----------------------------------------------------------------------------- -# include -# include "pmip_cache.h" -# include "pmip_msgs.h" - -//-VARS---------------------------------------------------------------------------- -/*! \var int g_ingress_iif -\brief Ingress interface index that is delivered by kernel in /proc/net/if_inet6 . -*/ -protected_pmip_mag_proc(int g_ingress_iif;) -//-PROTOTYPES---------------------------------------------------------------------------- -/*! \fn int mag_setup_route(struct in6_addr *pmip6_addr, int downlink) -* \brief Set a route on a MAG for reaching a mobile node. -* \param[in] pmip6_addr Mobile node destination address -* \param[in] downlink Outgoing downlink interface id -* \return Returns zero on success, negative otherwise. -*/ -private_pmip_mag_proc(int mag_setup_route(struct in6_addr *pmip6_addr, int downlink);) -/*! \fn int mag_remove_route(struct in6_addr *, int ) -* \brief Remove a route on a MAG -* \param[in] pmip6_addr Mobile node destination address -* \param[in] downlink Outgoing downlink interface id -* \return Returns zero on success, negative otherwise. -*/ -protected_pmip_mag_proc(int mag_remove_route(struct in6_addr *pmip6_addr, int downlink);) -/*! \fn int mag_dereg(pmip_entry_t * bce, int propagate) -* \brief Deregister a binding cache entry and its associated network configuration. -* \param[in] bce A binding cache entry -* \param[in] propagate Propagate deregistration to LMA -* \return Returns zero on success, negative otherwise. -*/ -protected_pmip_mag_proc(int mag_dereg(pmip_entry_t * bce, int propagate);) -/*! \fn int mag_start_registration(pmip_entry_t *) -* \brief Start the Location Registration Procedure for a mobile node by sending a PBU to the LMA. -* \param[in] bce A binding cache entry -* \return Always Zero. -*/ -protected_pmip_mag_proc(int mag_start_registration(pmip_entry_t * bce);) -/*! \fn int mag_end_registration(pmip_entry_t * bce, int ) -* \brief End the Location Registration Procedure -* \param[in] bce A binding cache entry -* \param[in] iif Interface id used to communicate with the LMA -* \return Always Zero. -* \note Creates a tunnel between MAG and LMA, set a route for uplink traffic towards LMA if the route does not exist, send a router advertisement to the mobile node, and finally set the route to reach the mobile node. -*/ -protected_pmip_mag_proc(int mag_end_registration(pmip_entry_t * bce, int iif);) -/*! \fn int mag_end_registration_no_new_tunnel(pmip_entry_t * bce, int ) -* \brief End the Location Registration Procedure -* \param[in] bce A binding cache entry -* \param[in] iif Interface id used to communicate with the LMA -* \return Always Zero. -* \note Does not create a tunnel between MAG and LMA, does not set a route for uplink traffic towards LMA, send a router advertisement to the mobile node, and finally set the route to reach the mobile node. -*/ -protected_pmip_mag_proc(int mag_end_registration_no_new_tunnel(pmip_entry_t * bce, __attribute__ ((unused)) int iif);) -/*! \fn int mag_force_update_registration(pmip_entry_t * bce, int ) -* \brief Start the Location Registration Procedure for a mobile node by sending a PBU to the LMA. -* \param[in] bce A binding cache entry -* \param[in] iif Interface id used to communicate with the LMA -* \return Always Zero. -* \note Sometimes appear the case where the access point did not detect the departure of the mobile node, -* so when the mobile come back again, we have to register again to the LMA, in order to let LMA build -* a tunnel between LMA and this MAG. -*/ -protected_pmip_mag_proc(int mag_force_update_registration(pmip_entry_t * bce, __attribute__ ((unused)) int iif);) -/*! \fn int mag_kickoff_ra(pmip_entry_t * bce) -* \brief Start sendind router advertisements to a mobile node. -* \param[in] bce A binding cache entry -* \return Returns zero on success, negative otherwise. -*/ -protected_pmip_mag_proc(int mag_kickoff_ra(pmip_entry_t * bce);) -/*! \fn int check_ip6_forwarding(void) -* \brief Check if IPv6 forwarding is set in the kernel -* \return Zero if forwarding is set, else -1. -*/ -private_pmip_mag_proc(int check_ip6_forwarding(void);) -/*! \fn int mag_get_ingress_info(int *, char *) -* \brief Retrieve the link local address of the MAG interface accessible to mobile nodes. -* \param[out] if_index The interface identifier -* \param[out] dev_name_mn_link The name of the interface -* \return 1 if success, else -1. -* \note The informations are retrieved by comparing /proc/net/if_inet6 with the configuration variable MagAddressIngress. -*/ -protected_pmip_mag_proc(int mag_get_ingress_info(int *if_index, char *dev_name_mn_link);) -/*! \fn int mag_get_egress_info(int *, char *) -* \brief Retrieve the link local address of the MAG interface connected to LMA. -* \param[out] if_index The interface identifier -* \param[out] dev_name_mn_link The name of the interface -* \return 1 if success, else -1. -* \note The informations are retrieved by comparing /proc/net/if_inet6 with the configuration variable MagAddressEgress. -*/ -protected_pmip_mag_proc(int mag_get_egress_info(int *if_index, char *dev_name_mn_link);) -/*! \fn int setup_linklocal_addr(struct in6_addr *) -* \brief Retrieve the link local address of the MAG interface accessible to mobile nodes. -* \param[out] src The link local address. -* \return 1 if success, else -1. -*/ -protected_pmip_mag_proc(int setup_linklocal_addr(struct in6_addr *src);) -/*! \fn int mag_update_binding_entry(pmip_entry_t * bce, msg_info_t * info) -* \brief Update a binding cache entry with received message informations. -* \param[in] bce A binding cache entry -* \param[in] info Informations contained in the message received -* \return Always Zero. -*/ -private_pmip_mag_proc(int mag_update_binding_entry(pmip_entry_t * bce, msg_info_t * info);) -/*! \fn int mag_pmip_md(msg_info_t * info, pmip_entry_t * bce) -* \brief Start movement detection for a mobile node. -* \param[in] info Informations contained in the message received -* \param[in] bce A binding cache entry -* \return Always Zero. -* \note Initiate registration (send PBU) to the LMA. -*/ -protected_pmip_mag_proc(int mag_pmip_md(msg_info_t * info, pmip_entry_t * bce);) -#endif -/** @}*/ diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/src/pmip/pmip_msgs.c b/openair3/PMIPv6/pmipv6-daemon-umip/src/pmip/pmip_msgs.c deleted file mode 100755 index e11322f54c..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/src/pmip/pmip_msgs.c +++ /dev/null @@ -1,1230 +0,0 @@ -/* - * This file is part of the PMIP, Proxy Mobile IPv6 for Linux. - * - * Authors: OPENAIR3 - * - * Copyright 2010-2011 EURECOM (Sophia-Antipolis, FRANCE) - * - * Proxy Mobile IPv6 (or PMIPv6, or PMIP) is a network-based mobility - * management protocol standardized by IETF. It is a protocol for building - * a common and access technology independent of mobile core networks, - * accommodating various access technologies such as WiMAX, 3GPP, 3GPP2 - * and WLAN based access architectures. Proxy Mobile IPv6 is the only - * network-based mobility management protocol standardized by IETF. - * - * PMIP Proxy Mobile IPv6 for Linux has been built above MIPL free software; - * which it involves that it is under the same terms of GNU General Public - * License version 2. See MIPL terms condition if you need more details. - */ -/*! \file pmip_msgs.c - * \brief creates new options and sends and parses PBU/PBA - * \author OpenAir3 Group - * \date 12th of October 2010 - * \version 1.0 - * \company Eurecom - * \project OpenAirInterface - * \email: openair_tech@eurecom.fr - */ -#define PMIP -#define PMIP_MSGS_C -#ifdef HAVE_CONFIG_H -#include -#endif -#include -#include -#include -//--------------------------------------------------------------------------------------------------------------------- -#include "pmip_msgs.h" -//--------------------------------------------------------------------------------------------------------------------- -#ifdef ENABLE_VT -# include "vt.h" -#endif -#include "debug.h" -#include "conf.h" -//--------------------------------------------------------------------------------------------------------------------- -/*! \var struct sock mh_sock -\brief Global var declared in mipl component - */ -extern struct sock mh_sock; -/* We can use these safely, since they are only read and never change */ -static const uint8_t _pad1[1] = { 0x00 }; -static const uint8_t _pad2[2] = { 0x01, 0x00 }; -static const uint8_t _pad3[3] = { 0x01, 0x01, 0x00 }; -static const uint8_t _pad4[4] = { 0x01, 0x02, 0x00, 0x00 }; -static const uint8_t _pad5[5] = { 0x01, 0x03, 0x00, 0x00, 0x00 }; -static const uint8_t _pad6[6] = { 0x01, 0x04, 0x00, 0x00, 0x00, 0x00 }; -static const uint8_t _pad7[7] = { 0x01, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00 }; -//--------------------------------------------------------------------------------------------------------------------- -static int create_opt_pad(struct iovec *iov, int pad) -{ - if (pad == 2) { - //iov->iov_base = (void *) _pad2; - iov->iov_base = malloc(sizeof(_pad2)); - memcpy(iov->iov_base, _pad2, sizeof(_pad2)); - } else if (pad == 4) { - //iov->iov_base = (void *) _pad4; - iov->iov_base = malloc(sizeof(_pad4)); - memcpy(iov->iov_base, _pad4, sizeof(_pad4)); - } else if (pad == 6) { - //iov->iov_base = (void *) _pad6; - iov->iov_base = malloc(sizeof(_pad6)); - memcpy(iov->iov_base, _pad6, sizeof(_pad6)); - } - /* Odd pads do not occur with current spec, so test them last */ - else if (pad == 1) { - iov->iov_base = (void *) _pad1; - iov->iov_base = malloc(sizeof(_pad1)); - memcpy(iov->iov_base, _pad1, sizeof(_pad1)); - } else if (pad == 3) { - //iov->iov_base = (void *) _pad3; - iov->iov_base = malloc(sizeof(_pad3)); - memcpy(iov->iov_base, _pad3, sizeof(_pad3)); - } else if (pad == 5) { - //iov->iov_base = (void *) _pad5; - iov->iov_base = malloc(sizeof(_pad5)); - memcpy(iov->iov_base, _pad5, sizeof(_pad5)); - } else if (pad == 7) { - //iov->iov_base = (void *) _pad7; - iov->iov_base = malloc(sizeof(_pad7)); - memcpy(iov->iov_base, _pad7, sizeof(_pad7)); - } - - iov->iov_len = pad; - return 0; -} -//--------------------------------------------------------------------------------------------------------------------- -static inline int optpad(int xn, int y, int offset) -{ - return ((y - offset) & (xn - 1)); -} -//--------------------------------------------------------------------------------------------------------------------- -static int mh_try_pad(const struct iovec *in, struct iovec *out, int count) -{ - size_t len = 0; - int m, n = 1, pad = 0; - struct ip6_mh_opt *opt; - out[0].iov_len = in[0].iov_len; - out[0].iov_base = in[0].iov_base; - len += in[0].iov_len; - - for (m = 1; m < count; m++) { - opt = (struct ip6_mh_opt *) in[m].iov_base; - - switch (opt->ip6mhopt_type) { - case IP6_MHOPT_BREFRESH: - pad = optpad(2, 0, len); /* 2n */ - break; - - case IP6_MHOPT_ALTCOA: - pad = optpad(8, 6, len); /* 8n+6 */ - break; - - case IP6_MHOPT_NONCEID: - pad = optpad(2, 0, len); /* 2n */ - break; - - case IP6_MHOPT_BAUTH: - pad = optpad(8, 2, len); /* 8n+2 */ - break; - - case IP6_MHOPT_MOBILE_NODE_IDENTIFIER: - pad = 0; /* This option does not have any alignment requirements. */ - break; - - case IP6_MHOPT_HOME_NETWORK_PREFIX: - pad = optpad(8, 4, len); /* 8n+4 */ - break; - - case IP6_MHOPT_HANDOFF_INDICATOR: - pad = 0; /* The Handoff Indicator option has no alignment requirement. */ - break; - - case IP6_MHOPT_ACCESS_TECHNOLOGY_TYPE: - pad = 0; /* The Access Technology Type Option has no alignment requirement. */ - break; - - case IP6_MHOPT_MOBILE_NODE_LINK_LAYER_IDENTIFIER: - pad = optpad(8, 0, len); /* 8n */ - break; - - case IP6_MHOPT_LINK_LOCAL_ADDRESS: - pad = optpad(8, 6, len); /* 8n+6 */ - break; - - case IP6_MHOPT_TIME_STAMP: - pad = optpad(8, 2, len); /* 8n+2 */ - break; - - - } - - if (pad > 0) { - create_opt_pad(&out[n++], pad); - len += pad; - } - - len += in[m].iov_len; - out[n].iov_len = in[m].iov_len; - out[n].iov_base = in[m].iov_base; - n++; - } - - if (count == 1) { - pad = optpad(8, 0, len); - create_opt_pad(&out[n++], pad); - } - - return n; -} -//--------------------------------------------------------------------------------------------------------------------- -static size_t mh_length(struct iovec *vec, int count) -{ - size_t len = 0; - int i; - - for (i = 0; i < count; i++) { - len += vec[i].iov_len; - } - - return len; -} -//--------------------------------------------------------------------------------------------------------------------- -void init_pbu_sequence_number(void) -{ - g_mag_sequence_number = 0; -} -//--------------------------------------------------------------------------------------------------------------------- -int get_new_pbu_sequence_number(void) -{ - // TO DO: should be thread protected - int seq = g_mag_sequence_number; - g_mag_sequence_number = g_mag_sequence_number + 1; - return seq; -} -//--------------------------------------------------------------------------------------------------------------------- -int is_pba_is_response_to_last_pbu_sent(msg_info_t * pba_info, pmip_entry_t *bce) -{ - if ( pba_info->seqno == bce->seqno_out) { - if ((pba_info->timestamp.first == bce->timestamp.first) && (pba_info->timestamp.second == bce->timestamp.second)) { - if (IN6_ARE_ADDR_EQUAL(&pba_info->mn_prefix, &bce->mn_prefix)) { - if (IN6_ARE_ADDR_EQUAL(&pba_info->mn_iid, &bce->mn_suffix)) { - return 1; - } else { - dbg("Not identical Mobile Node Link-layer Identifier Option: PBU:%x:%x:%x:%x:%x:%x:%x:%x PBA:%x:%x:%x:%x:%x:%x:%x:%x\n", NIP6ADDR(&bce->mn_suffix), NIP6ADDR(&pba_info->mn_iid)); - } - } else { - dbg("Not identical Home Network Prefix option: PBU:%x:%x:%x:%x:%x:%x:%x:%x PBA:%x:%x:%x:%x:%x:%x:%x:%x\n", NIP6ADDR(&bce->mn_prefix), NIP6ADDR(&pba_info->mn_prefix)); - } - } else { - dbg("Not identical Timestamp option: PBU:%08X%08X PBA:%08X%08X\n", bce->timestamp.first, bce->timestamp.second, pba_info->timestamp.first, pba_info->timestamp.second); - } - } else { - dbg("Not identical Sequence Number: PBU:%d PBA:%d\n", bce->seqno_out, pba_info->seqno); - } - - return 0; -} -//--------------------------------------------------------------------------------------------------------------------- -struct in6_addr get_node_id(struct in6_addr *mn_addr) -{ - struct in6_addr result; - result = in6addr_any; - memcpy(&result.s6_addr32[2], &mn_addr->s6_addr32[2], sizeof(ip6mnid_t)); - return result; -} -//--------------------------------------------------------------------------------------------------------------------- -struct in6_addr get_node_prefix(struct in6_addr *mn_addr) -{ - struct in6_addr result; - result = in6addr_any; - memcpy(&result.s6_addr32[0], &mn_addr->s6_addr32[0], PREFIX_LENGTH / 8); - return result; -} -//--------------------------------------------------------------------------------------------------------------------- -int mh_create_opt_home_net_prefix(struct iovec *iov, struct in6_addr *Home_Network_Prefix) -{ - /* From RFC 5213 - * 8.3. Home Network Prefix Option - - - A new option, Home Network Prefix option is defined for use with the - Proxy Binding Update and Proxy Binding Acknowledgement messages - exchanged between a local mobility anchor and a mobile access - gateway. This option is used for exchanging the mobile node's home - network prefix information. There can be multiple Home Network - Prefix options present in the message. - - The Home Network Prefix Option has an alignment requirement of 8n+4. - Its format is as follows: - - 0 1 2 3 - 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | Type | Length | Reserved | Prefix Length | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | | - + + - | | - + Home Network Prefix + - | | - + + - | | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - - Type - 22 - - Length - - 8-bit unsigned integer indicating the length of the option - in octets, excluding the type and length fields. This field - MUST be set to 18. - - Reserved (R) - - This 8-bit field is unused for now. The value MUST be - initialized to 0 by the sender and MUST be ignored by the - receiver. - - Prefix Length - - 8-bit unsigned integer indicating the prefix length of the - IPv6 prefix contained in the option. - - Home Network Prefix - - A sixteen-byte field containing the mobile node's IPv6 Home - Network Prefix. - */ - ip6_mh_opt_home_net_prefix_t *opt; - size_t optlen = sizeof(ip6_mh_opt_home_net_prefix_t); - iov->iov_base = malloc(optlen); - iov->iov_len = optlen; - - if (iov->iov_base == NULL) - return -ENOMEM; - - opt = (ip6_mh_opt_home_net_prefix_t *) iov->iov_base; - opt->ip6hnp_type = IP6_MHOPT_HOME_NETWORK_PREFIX; - opt->ip6hnp_len = 18; - opt->ip6hnp_reserved = 0; - opt->ip6hnp_prefix_len = 128; //128 bits - opt->ip6hnp_prefix = *Home_Network_Prefix; - return 0; -} -//--------------------------------------------------------------------------------------------------------------------- -int mh_create_opt_handoff_indicator(struct iovec *iov, int handoff_indicator) -{ - /* From RFC 5213 - 8.4. Handoff Indicator Option - - - A new option, Handoff Indicator option is defined for use with the - Proxy Binding Update and Proxy Binding Acknowledgement messages - exchanged between a local mobility anchor and a mobile access - gateway. This option is used for exchanging the mobile node's - handoff-related hints. - - The Handoff Indicator option has no alignment requirement. Its - format is as follows: - - 0 1 2 3 - 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | Type | Length | Reserved (R) | HI | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - - Type - 23 - - Length - - 8-bit unsigned integer indicating the length of the option - in octets, excluding the type and length fields. This field - MUST be set to 2. - - Reserved (R) - - This 8-bit field is unused for now. The value MUST be - initialized to 0 by the sender and MUST be ignored by the - receiver. - - Handoff Indicator (HI) - - An 8-bit field that specifies the type of handoff. The values - (0 - 255) will be allocated and managed by IANA. The following - values are currently defined. - - 0: Reserved - 1: Attachment over a new interface - 2: Handoff between two different interfaces of the mobile node - 3: Handoff between mobile access gateways for the same interface - 4: Handoff state unknown - 5: Handoff state not changed (Re-registration) - - */ - ip6_mh_opt_handoff_indicator_t *opt; - size_t optlen = sizeof(ip6_mh_opt_handoff_indicator_t); - iov->iov_base = malloc(optlen); - iov->iov_len = optlen; - - if (iov->iov_base == NULL) - return -ENOMEM; - - opt = (ip6_mh_opt_handoff_indicator_t *) iov->iov_base; - opt->ip6hi_type = IP6_MHOPT_HANDOFF_INDICATOR; - opt->ip6hi_len = 2; //set to 2 bytes - opt->ip6hi_reserved = 0; - opt->ip6hi_hi = (__u8)handoff_indicator; - return 0; -} -//--------------------------------------------------------------------------------------------------------------------- -int mh_create_opt_access_technology_type(struct iovec *iov, int att) -{ - /* From RFC 5213 - 8.5. Access Technology Type Option - - - A new option, Access Technology Type option is defined for use with - the Proxy Binding Update and Proxy Binding Acknowledgement messages - exchanged between a local mobility anchor and a mobile access - gateway. This option is used for exchanging the type of the access - technology by which the mobile node is currently attached to the - mobile access gateway. - - - The Access Technology Type Option has no alignment requirement. Its - format is as follows: - - 0 1 2 3 - 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | Type | Length | Reserved (R) | ATT | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - - Type - 24 - - Length - - 8-bit unsigned integer indicating the length of the option - in octets, excluding the type and length fields. This field - MUST be set to 2. - - Reserved (R) - - This 8-bit field is unused for now. The value MUST be - initialized to 0 by the sender and MUST be ignored by the - receiver. - - Access Technology Type (ATT) - - An 8-bit field that specifies the access technology through - which the mobile node is connected to the access link on the - mobile access gateway. - - The values (0 - 255) will be allocated and managed by IANA. The - following values are currently reserved for the below specified - access technology types. - - 0: Reserved ("Reserved") - 1: Virtual ("Logical Network Interface") - 2: PPP ("Point-to-Point Protocol") - 3: IEEE 802.3 ("Ethernet") - 4: IEEE 802.11a/b/g ("Wireless LAN") - 5: IEEE 802.16e ("WIMAX") - */ - ip6_mh_opt_access_technology_type_t *opt; - size_t optlen = sizeof(ip6_mh_opt_access_technology_type_t); - iov->iov_base = malloc(optlen); - iov->iov_len = optlen; - - if (iov->iov_base == NULL) - return -ENOMEM; - - opt = (ip6_mh_opt_access_technology_type_t *) iov->iov_base; - opt->ip6att_type = IP6_MHOPT_ACCESS_TECHNOLOGY_TYPE; - opt->ip6att_len = 2; //set to 2 bytes - opt->ip6att_reserved = 0; - opt->ip6att_att = (__u8)att; - return 0; -} -//--------------------------------------------------------------------------------------------------------------------- -int mh_create_opt_mobile_node_identifier(struct iovec *iov, int subtype, ip6mnid_t * MN_ID) -{ - /* From RFC 4283 - 3. Mobile Node Identifier Option - - - The Mobile Node Identifier option is a new optional data field that - is carried in the Mobile IPv6-defined messages that includes the - Mobility header. Various forms of identifiers can be used to - identify a Mobile Node (MN). Two examples are a Network Access - Identifier (NAI) [RFC4282] and an opaque identifier applicable to a - particular application. The Subtype field in the option defines the - specific type of identifier. - - This option can be used in mobility messages containing a mobility - header. The subtype field in the option is used to interpret the - specific type of identifier. - - 0 1 2 3 - 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | Option Type | Option Length | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | Subtype | Identifier ... - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - - Option Type: - MN-ID-OPTION-TYPE has been assigned value 8 by the IANA. It is - an 8-bit identifier of the type mobility option. - - Option Length: - 8-bit unsigned integer, representing the length in octets of - the Subtype and Identifier fields. - - Subtype: - Subtype field defines the specific type of identifier included - in the Identifier field. - - Identifier: - A variable length identifier of type, as specified by the - Subtype field of this option. - - - This option does not have any alignment requirements. - - */ - ip6_mh_opt_mobile_node_identifier_t *opt; - size_t optlen = sizeof(ip6_mh_opt_mobile_node_identifier_t); - iov->iov_base = malloc(optlen); - iov->iov_len = optlen; - - if (iov->iov_base == NULL) - return -ENOMEM; - - opt = (ip6_mh_opt_mobile_node_identifier_t *) iov->iov_base; - opt->ip6mnid_type = IP6_MHOPT_MOBILE_NODE_IDENTIFIER; - opt->ip6mnid_len = 9; //set to 9 bytes. - opt->ip6mnid_subtype = subtype; - opt->ip6mnid_id = *MN_ID; - return 0; -} -//--------------------------------------------------------------------------------------------------------------------- -int mh_create_opt_mobile_node_link_layer_identifier(struct iovec *iov, ip6mnid_t * mnlli) -{ - /* From RFC 5213 - * 8.6. Mobile Node Link-layer Identifier Option - - - A new option, Mobile Node Link-layer Identifier option is defined for - use with the Proxy Binding Update and Proxy Binding Acknowledgement - messages exchanged between a local mobility anchor and a mobile - access gateway. This option is used for exchanging the mobile node's - link-layer identifier. - - The format of the Link-layer Identifier option is shown below. Based - on the size of the identifier, the option MUST be aligned - appropriately, as per mobility option alignment requirements - specified in [RFC3775]. - - 0 1 2 3 - 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | Type | Length | Reserved | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | | - + Link-layer Identifier + - . ... . - | | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - - Type - 25 - - Length - 8-bit unsigned integer indicating the length of the option - in octets, excluding the type and length fields. - - Reserved - - This field is unused for now. The value MUST be initialized to - 0 by the sender and MUST be ignored by the receiver. - - Link-layer Identifier - - A variable length field containing the mobile node's link-layer - identifier. - - The content and format of this field (including byte and bit - ordering) is as specified in Section 4.6 of [RFC4861] for - carrying link-layer addresses. On certain access links, where - the link-layer address is not used or cannot be determined, - this option cannot be used. - - - */ - ip6_mh_opt_mobile_node_link_layer_identifier_t *opt; - size_t optlen = sizeof(ip6_mh_opt_mobile_node_link_layer_identifier_t); - iov->iov_base = malloc(optlen); - iov->iov_len = optlen; - - if (iov->iov_base == NULL) - return -ENOMEM; - - opt = (ip6_mh_opt_mobile_node_link_layer_identifier_t *) iov->iov_base; - opt->ip6mnllid_type = IP6_MHOPT_MOBILE_NODE_LINK_LAYER_IDENTIFIER; - opt->ip6mnllid_len = 10; //set to 10 bytes. - opt->ip6mnllid_reserved = 0; - opt->ip6mnllid_lli = *mnlli; - return 0; -} -//--------------------------------------------------------------------------------------------------------------------- -int mh_create_opt_time_stamp(struct iovec *iov, ip6ts_t * Timestamp) -{ - /* From RFC 5213 - 8.8. Timestamp Option - - - A new option, Timestamp option is defined for use in the Proxy - Binding Update and Proxy Binding Acknowledgement messages. - - The Timestamp option has an alignment requirement of 8n+2. Its - format is as follows: - - 0 1 2 3 - 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | Type | Length | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | | - + Timestamp + - | | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - - Type - 27 - - Length - - 8-bit unsigned integer indicating the length in octets of - the option, excluding the type and length fields. The value - for this field MUST be set to 8. - - Timestamp - - A 64-bit unsigned integer field containing a timestamp. The - value indicates the number of seconds since January 1, 1970, - 00:00 UTC, by using a fixed point format. In this format, the - integer number of seconds is contained in the first 48 bits of - the field, and the remaining 16 bits indicate the number of - 1/65536 fractions of a second. - */ - ip6_mh_opt_time_stamp_t *opt; - size_t optlen = sizeof(ip6_mh_opt_time_stamp_t); - iov->iov_base = malloc(optlen); - iov->iov_len = optlen; - - if (iov->iov_base == NULL) - return -ENOMEM; - - opt = (ip6_mh_opt_time_stamp_t *) iov->iov_base; - opt->ip6mots_type = IP6_MHOPT_TIME_STAMP; - opt->ip6mots_len = 8; // set to 8 bytes. - opt->time_stamp = *Timestamp; - return 0; -} -//--------------------------------------------------------------------------------------------------------------------- -int mh_create_opt_link_local_address(struct iovec *iov, struct in6_addr *lla) -{ - /* From RFC 5213 - 8.7. Link-local Address Option - - - A new option, Link-local Address option is defined for use with the - Proxy Binding Update and Proxy Binding Acknowledgement messages - exchanged between a local mobility anchor and a mobile access - gateway. This option is used for exchanging the link-local address - of the mobile access gateway. - - The Link-local Address option has an alignment requirement of 8n+6. - Its format is as follows: - - 0 1 2 3 - 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | Type | Length | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | | - + + - | | - + Link-local Address + - | | - + + - | | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - - Type - 26 - - Length - - 8-bit unsigned integer indicating the length of the option - in octets, excluding the type and length fields. This field - MUST be set to 16. - - Link-local Address - - A sixteen-byte field containing the link-local address. - */ - ip6_mh_opt_link_local_address_t *opt; - size_t optlen = sizeof(ip6_mh_opt_link_local_address_t); - iov->iov_base = malloc(optlen); - iov->iov_len = optlen; - - if (iov->iov_base == NULL) - return -ENOMEM; - - opt = (ip6_mh_opt_link_local_address_t *) iov->iov_base; - opt->ip6link_type = IP6_MHOPT_LINK_LOCAL_ADDRESS; - opt->ip6link_len = 16; //set to 16 bytes - opt->ip6link_addr = *lla; - return 0; -} -//--------------------------------------------------------------------------------------------------------------------- -int mh_create_opt_dst_mn_addr(struct iovec *iov, struct in6_addr *dst_mn_addr) -{ - ip6_mh_opt_dst_mn_addr_t *opt; - size_t optlen = sizeof(ip6_mh_opt_dst_mn_addr_t); - iov->iov_base = malloc(optlen); - iov->iov_len = optlen; - - if (iov->iov_base == NULL) - return -ENOMEM; - - opt = (ip6_mh_opt_dst_mn_addr_t *) iov->iov_base; - opt->ip6dma_type = IP6_MHOPT_DST_MN_ADDR; - opt->ip6dma_len = 16; - opt->dst_mn_addr = *dst_mn_addr; - return 0; -} -//--------------------------------------------------------------------------------------------------------------------- -int mh_create_opt_serv_mag_addr(struct iovec *iov, struct in6_addr *Serv_MAG_addr) -{ - ip6_mh_opt_serv_mag_addr_t *opt; - size_t optlen = sizeof(ip6_mh_opt_serv_mag_addr_t); - iov->iov_base = malloc(optlen); - iov->iov_len = optlen; - - if (iov->iov_base == NULL) - return -ENOMEM; - - opt = (ip6_mh_opt_serv_mag_addr_t *) iov->iov_base; - opt->ip6sma_type = IP6_MHOPT_SERV_MAG_ADDR; - opt->ip6sma_len = 16; //16 bytes - opt->serv_mag_addr = *Serv_MAG_addr; - return 0; -} -//--------------------------------------------------------------------------------------------------------------------- -int mh_create_opt_serv_lma_addr(struct iovec *iov, struct in6_addr *serv_lma_addr) -{ - ip6_mh_opt_serv_lma_addr_t *opt; - size_t optlen = sizeof(ip6_mh_opt_serv_lma_addr_t); - iov->iov_base = malloc(optlen); - iov->iov_len = optlen; - - if (iov->iov_base == NULL) - return -ENOMEM; - - opt = (ip6_mh_opt_serv_lma_addr_t *) iov->iov_base; - opt->ip6sla_type = IP6_MHOPT_SERV_LMA_ADDR; - opt->ip6sla_len = 16; //16 bytes - opt->serv_lma_addr = *serv_lma_addr; - return 0; -} -//--------------------------------------------------------------------------------------------------------------------- -int mh_create_opt_src_mn_addr(struct iovec *iov, struct in6_addr *src_mn_addr) -{ - struct ip6_mh_opt_src_mn_addr *opt; - size_t optlen = sizeof(struct ip6_mh_opt_src_mn_addr); - iov->iov_base = malloc(optlen); - iov->iov_len = optlen; - - if (iov->iov_base == NULL) - return -ENOMEM; - - opt = (struct ip6_mh_opt_src_mn_addr *) iov->iov_base; - opt->ip6sma_type = IP6_MHOPT_SRC_MN_ADDR; - opt->ip6sma_len = 16; //16 bytes - opt->src_mn_addr = *src_mn_addr; - return 0; -} -//--------------------------------------------------------------------------------------------------------------------- -int mh_create_opt_src_mag_addr(struct iovec *iov, struct in6_addr *src_mag_addr) -{ - ip6_mh_opt_src_mag_addr_t *opt; - size_t optlen = sizeof(ip6_mh_opt_src_mag_addr_t); - iov->iov_base = malloc(optlen); - iov->iov_len = optlen; - - if (iov->iov_base == NULL) - return -ENOMEM; - - opt = (ip6_mh_opt_src_mag_addr_t *) iov->iov_base; - opt->ip6sma_type = IP6_MHOPT_SRC_MAG_ADDR; - opt->ip6sma_len = 16; //16 bytes - opt->src_mag_addr = *src_mag_addr; - return 0; -} -//--------------------------------------------------------------------------------------------------------------------- -int mh_pbu_parse(msg_info_t * info, struct ip6_mh_binding_update *pbu, ssize_t len, const struct in6_addr_bundle *in_addrs, int iif) -{ - static struct mh_options mh_opts; - ip6_mh_opt_home_net_prefix_t *home_net_prefix_opt; - ip6_mh_opt_mobile_node_identifier_t *mobile_node_identifier_opt; - ip6_mh_opt_mobile_node_link_layer_identifier_t *mobile_node_link_layer_identifier_opt; - ip6_mh_opt_time_stamp_t *time_stamp_opt; - ip6_mh_opt_handoff_indicator_t *handoff_indicator_opt; - ip6_mh_opt_access_technology_type_t *access_technology_type_opt; - struct in6_addr mn_identifier; - int return_code; - bzero(&mh_opts, sizeof(mh_opts)); - info->src = *in_addrs->src; - info->dst = *in_addrs->dst; - info->iif = iif; - info->addrs.src = &info->src; - info->addrs.dst = &info->dst; - - if (len < (ssize_t)sizeof(struct ip6_mh_binding_update)) { - dbg("Bad len of PBU mobility header : %d versus sizeof(struct ip6_mh_binding_update)= %d\n", len, sizeof(struct ip6_mh_binding_update)); - return 0; - } - - if ((return_code = mh_opt_parse(&pbu->ip6mhbu_hdr, len, sizeof(struct ip6_mh_binding_update), &mh_opts)) < 0) { - dbg("Error %d in parsing PBU options\n", return_code); - return 0; - } - - info->PBU_flags = ntohs(pbu->ip6mhbu_flags); - info->lifetime.tv_sec = (ntohs(pbu->ip6mhbu_lifetime) << 2); - info->seqno = ntohs(pbu->ip6mhbu_seqno); - dbg("Serving MAG Address: %x:%x:%x:%x:%x:%x:%x:%x\n", NIP6ADDR(&info->src)); - dbg("Our Address : %x:%x:%x:%x:%x:%x:%x:%x\n", NIP6ADDR(&info->dst)); - dbg("PBU FLAGS : %04X\n", info->PBU_flags); - dbg("PBU Lifetime : %d (%d seconds)\n", pbu->ip6mhbu_lifetime, info->lifetime.tv_sec); - dbg("PBU Sequence No : %d\n", info->seqno); - - mobile_node_identifier_opt = mh_opt(&pbu->ip6mhbu_hdr, &mh_opts, IP6_MHOPT_MOBILE_NODE_IDENTIFIER); - - if (mobile_node_identifier_opt) { - //copy - mn_identifier = in6addr_any; - memcpy(&mn_identifier.s6_addr32[2], &mobile_node_identifier_opt->ip6mnid_id, sizeof(ip6mnid_t)); - dbg("Mobile Node Identifier Option: %x:%x:%x:%x:%x:%x:%x:%x\n", NIP6ADDR(&mn_identifier)); - } - - home_net_prefix_opt = mh_opt(&pbu->ip6mhbu_hdr, &mh_opts, IP6_MHOPT_HOME_NETWORK_PREFIX); - - if (home_net_prefix_opt) { - //copy - info->mn_prefix = home_net_prefix_opt->ip6hnp_prefix; - dbg("Mobile Node Home Network Prefix option: %x:%x:%x:%x:%x:%x:%x:%x\n", NIP6ADDR(&info->mn_prefix)); - } - - mobile_node_link_layer_identifier_opt = mh_opt(&pbu->ip6mhbu_hdr, &mh_opts, IP6_MHOPT_MOBILE_NODE_LINK_LAYER_IDENTIFIER); - - if (mobile_node_link_layer_identifier_opt) { - //copy - info->mn_iid = in6addr_any; - memcpy(&info->mn_iid.s6_addr32[2], &mobile_node_link_layer_identifier_opt->ip6mnllid_lli, sizeof(ip6mnid_t)); - dbg("Mobile Node Link-layer Identifier Option: %x:%x:%x:%x:%x:%x:%x:%x\n", NIP6ADDR(&info->mn_iid)); - } - - time_stamp_opt = mh_opt(&pbu->ip6mhbu_hdr, &mh_opts, IP6_MHOPT_TIME_STAMP); - - if (time_stamp_opt) { - //copy - info->timestamp.first = time_stamp_opt->time_stamp.first; - info->timestamp.second = time_stamp_opt->time_stamp.second; - unsigned long long int seconds = info->timestamp.first << 16; - seconds = seconds | ((info->timestamp.second & 0xFFFF0000) >> 16); - unsigned int useconds = (info->timestamp.second & 0x0000FFFF) * 1000000 / 65536; - dbg("Timestamp option: %ld sec %d usec\n", seconds, useconds); - } - - handoff_indicator_opt = mh_opt(&pbu->ip6mhbu_hdr, &mh_opts, IP6_MHOPT_HANDOFF_INDICATOR); - - if (handoff_indicator_opt) { - dbg("Handoff Indicator option: %d\n", handoff_indicator_opt->ip6hi_hi); - } - - access_technology_type_opt = mh_opt(&pbu->ip6mhbu_hdr, &mh_opts, IP6_MHOPT_ACCESS_TECHNOLOGY_TYPE); - - if (access_technology_type_opt) { - dbg("Access Technology Type option: %d\n", access_technology_type_opt->ip6att_att); - } - - info->msg_event = hasPBU; - dbg("FSM Message Event: %d\n", info->msg_event); - return 0; -} -//--------------------------------------------------------------------------------------------------------------------- -int mh_pba_parse(msg_info_t * info, struct ip6_mh_binding_ack *pba, ssize_t len, const struct in6_addr_bundle *in_addrs, int iif) -{ - static struct mh_options mh_opts; - ip6_mh_opt_home_net_prefix_t *home_net_prefix_opt; - ip6_mh_opt_mobile_node_identifier_t *mobile_node_identifier_opt; - ip6_mh_opt_mobile_node_link_layer_identifier_t *mobile_node_link_layer_identifier_opt; - ip6_mh_opt_time_stamp_t *time_stamp_opt; - ip6_mh_opt_handoff_indicator_t *handoff_indicator_opt; - ip6_mh_opt_access_technology_type_t *access_technology_type_opt; - struct in6_addr mn_identifier; - - bzero(&mh_opts, sizeof(mh_opts)); - info->src = *in_addrs->src; - info->dst = *in_addrs->dst; - info->iif = iif; - info->addrs.src = &info->src; - info->addrs.dst = &info->dst; - - mobile_node_identifier_opt = mh_opt(&pba->ip6mhba_hdr, &mh_opts, IP6_MHOPT_MOBILE_NODE_IDENTIFIER); - - if (mobile_node_identifier_opt) { - //copy - mn_identifier = in6addr_any; - memcpy(&mn_identifier.s6_addr32[2], &mobile_node_identifier_opt->ip6mnid_id, sizeof(ip6mnid_t)); - dbg("Mobile Node Identifier Option: %x:%x:%x:%x:%x:%x:%x:%x\n", NIP6ADDR(&mn_identifier)); - } - - if ((len < (ssize_t)sizeof(struct ip6_mh_binding_ack) - || mh_opt_parse(&pba->ip6mhba_hdr, len, sizeof(struct ip6_mh_binding_ack), &mh_opts) < 0)) { - return 0; - } - - home_net_prefix_opt = mh_opt(&pba->ip6mhba_hdr, &mh_opts, IP6_MHOPT_HOME_NETWORK_PREFIX); - - if (home_net_prefix_opt) { - info->mn_prefix = home_net_prefix_opt->ip6hnp_prefix; - dbg("Mobile Node Home Network Prefix option: %x:%x:%x:%x:%x:%x:%x:%x\n", NIP6ADDR(&info->mn_prefix)); - } - - mobile_node_link_layer_identifier_opt = mh_opt(&pba->ip6mhba_hdr, &mh_opts, IP6_MHOPT_MOBILE_NODE_LINK_LAYER_IDENTIFIER); - - if (mobile_node_link_layer_identifier_opt) { - //copy - info->mn_iid = in6addr_any; - memcpy(&info->mn_iid.s6_addr32[2], &mobile_node_link_layer_identifier_opt->ip6mnllid_lli, sizeof(ip6mnid_t)); - dbg("Mobile Node Link-layer Identifier Option: %x:%x:%x:%x:%x:%x:%x:%x\n", NIP6ADDR(&info->mn_iid)); - } - - time_stamp_opt = mh_opt(&pba->ip6mhba_hdr, &mh_opts, IP6_MHOPT_TIME_STAMP); - - if (time_stamp_opt) { - //copy - info->timestamp.first = time_stamp_opt->time_stamp.first; - info->timestamp.second = time_stamp_opt->time_stamp.second; - unsigned long long int seconds = info->timestamp.first << 16; - seconds = seconds | ((info->timestamp.second & 0xFFFF0000) >> 16); - unsigned int useconds = (info->timestamp.second & 0x0000FFFF) * 1000000 / 65536; - dbg("Timestamp option: %ld sec %d usec\n", seconds, useconds); - } - - handoff_indicator_opt = mh_opt(&pba->ip6mhba_hdr, &mh_opts, IP6_MHOPT_HANDOFF_INDICATOR); - - if (handoff_indicator_opt) { - dbg("Handoff Indicator option: %d\n", handoff_indicator_opt->ip6hi_hi); - } - - access_technology_type_opt = mh_opt(&pba->ip6mhba_hdr, &mh_opts, IP6_MHOPT_ACCESS_TECHNOLOGY_TYPE); - - if (access_technology_type_opt) { - dbg("Access Technology Type option: %d\n", access_technology_type_opt->ip6att_att); - } - - info->seqno = ntohs(pba->ip6mhba_seqno); - info->PBA_flags = ntohs(pba->ip6mhba_flags); - info->lifetime.tv_sec = ntohs(pba->ip6mhba_lifetime) << 2; - dbg("PBA FLAGS : %04X\n", info->PBA_flags); - dbg("PBA Lifetime : %d (%d seconds)\n", pba->ip6mhba_lifetime, info->lifetime.tv_sec); - dbg("PBA Sequence No: %d\n", info->seqno); - info->msg_event = hasPBA; - dbg("FSM Message Event: %d\n", info->msg_event); - return 0; -} -//--------------------------------------------------------------------------------------------------------------------- -int icmp_rs_parse(msg_info_t * info, __attribute__ ((unused)) struct nd_router_solicit *rs, const struct in6_addr *saddr, const struct in6_addr *daddr, int iif, int hoplimit) -{ - bzero(info, sizeof(msg_info_t)); - //info->ns_target = ns->nd_ns_target; - info->hoplimit = hoplimit; - info->msg_event = hasRS; - info->src = *saddr; - info->dst = *daddr; - info->iif = iif; - info->addrs.src = &info->src; - info->addrs.dst = &info->dst; - //Calculated fields - info->mn_iid = get_node_id(&info->src); - dbg("MN IID: %x:%x:%x:%x:%x:%x:%x:%x\n", NIP6ADDR(&info->mn_iid)); - return 0; -} -//--------------------------------------------------------------------------------------------------------------------- -int icmp_na_parse(msg_info_t * info, struct nd_neighbor_advert *na, const struct in6_addr *saddr, const struct in6_addr *daddr, int iif, int hoplimit) -{ - bzero(info, sizeof(msg_info_t)); - info->na_target = na->nd_na_target; - info->hoplimit = hoplimit; - info->msg_event = hasNA; - info->src = *saddr; - info->dst = *daddr; - info->iif = iif; - info->addrs.src = &info->src; - info->addrs.dst = &info->dst; - //Calculated fields - info->mn_iid = get_node_id(&info->na_target); - info->mn_addr = info->na_target; - info->mn_prefix = get_node_prefix(&info->na_target); - dbg("NA Target: %x:%x:%x:%x:%x:%x:%x:%x\n", NIP6ADDR(&na->nd_na_target)); - return 0; -} -//--------------------------------------------------------------------------------------------------------------------- -int pmip_mh_send(const struct in6_addr_bundle *addrs, const struct iovec *mh_vec, int iovlen, int oif) -{ - struct sockaddr_in6 daddr; - struct iovec iov[2 * (IP6_MHOPT_MAX + 1)]; - struct msghdr msg; - struct cmsghdr *cmsg; - int cmsglen; - struct in6_pktinfo pinfo; - int ret = 0, on = 1; - struct ip6_mh *mh; - int iov_count; - - iov_count = mh_try_pad(mh_vec, iov, iovlen); - - mh = (struct ip6_mh *) iov[0].iov_base; - mh->ip6mh_hdrlen = (mh_length(iov, iov_count) >> 3) - 1; - dbg("Sending MH type %d\n" "from %x:%x:%x:%x:%x:%x:%x:%x\n" "to %x:%x:%x:%x:%x:%x:%x:%x\n", mh->ip6mh_type, NIP6ADDR(addrs->src), NIP6ADDR(addrs->dst)); - - memset(&daddr, 0, sizeof(struct sockaddr_in6)); - daddr.sin6_family = AF_INET6; - daddr.sin6_addr = *addrs->dst; - daddr.sin6_port = htons(IPPROTO_MH); - - memset(&pinfo, 0, sizeof(pinfo)); - pinfo.ipi6_addr = *addrs->src; - pinfo.ipi6_ifindex = oif; - - cmsglen = CMSG_SPACE(sizeof(pinfo)); - cmsg = malloc(cmsglen); - - if (cmsg == NULL) { - dbg("malloc failed\n"); - return -ENOMEM; - } - - memset(cmsg, 0, cmsglen); - memset(&msg, 0, sizeof(msg)); - msg.msg_control = cmsg; - msg.msg_controllen = cmsglen; - msg.msg_iov = iov; - msg.msg_iovlen = iov_count; - msg.msg_name = (void *) &daddr; - msg.msg_namelen = sizeof(daddr); - - cmsg = CMSG_FIRSTHDR(&msg); - cmsg->cmsg_len = CMSG_LEN(sizeof(pinfo)); - cmsg->cmsg_level = IPPROTO_IPV6; - cmsg->cmsg_type = IPV6_PKTINFO; - memcpy(CMSG_DATA(cmsg), &pinfo, sizeof(pinfo)); - - pthread_mutex_lock(&mh_sock.send_mutex); - setsockopt(mh_sock.fd, IPPROTO_IPV6, IPV6_PKTINFO, &on, sizeof(int)); - ret = sendmsg(mh_sock.fd, &msg, 0); - - if (ret < 0) { - dbg("sendmsg: %s\n", strerror(errno)); - } - - pthread_mutex_unlock(&mh_sock.send_mutex); - free(msg.msg_control); - dbg("MH is sent....\n"); - return ret; -} -//--------------------------------------------------------------------------------------------------------------------- -int mh_send_pbu(const struct in6_addr_bundle *addrs, pmip_entry_t * bce, struct timespec *lifetime, int oif) -{ - /* FROM RFC 5213 - * - * 6.9.1.5. Constructing the Proxy Binding Update Message - - o The mobile access gateway, when sending the Proxy Binding Update - message to the local mobility anchor, MUST construct the message - as specified below. - - IPv6 header (src=Proxy-CoA, dst=LMAA) - Mobility header - - BU P & A flags MUST be set to value 1 - Mobility Options - - Mobile Node Identifier option (mandatory) - - Home Network Prefix option(s) (mandatory) - - Handoff Indicator option (mandatory) - - Access Technology Type option (mandatory) - - Timestamp option (optional) - - Mobile Node Link-layer Identifier option (optional) - - Link-local Address option (optional) - - Figure 12: Proxy Binding Update Message Format - - - o The Source Address field in the IPv6 header of the message MUST be - set to the global address configured on the egress interface of - the mobile access gateway. When there is no Alternate Care-of - Address option present in the request, this address will be - considered as the Proxy-CoA for this Proxy Binding Update message. - However, when there is an Alternate Care-of Address option present - in the request, this address will be not be considered as the - Proxy-CoA, but the address in the Alternate Care-of Address option - will be considered as the Proxy-CoA. - - o The Destination Address field in the IPv6 header of the message - MUST be set to the local mobility anchor address. - - o The Mobile Node Identifier option [RFC4283] MUST be present. - - o At least one Home Network Prefix option MUST be present. - - o The Handoff Indicator option MUST be present. - - o The Access Technology Type option MUST be present. - - o The Timestamp option MAY be present. - - o The Mobile Node Link-layer Identifier option MAY be present. - - o The Link-local Address option MAY be present. - - o If IPsec is used for protecting the signaling messages, the - message MUST be protected, using the security association existing - between the local mobility anchor and the mobile access gateway. - - o Unlike in Mobile IPv6 [RFC3775], the Home Address option [RFC3775] - MUST NOT be present in the IPv6 Destination Options extension - header of the Proxy Binding Update message. - */ - - int iovlen = 1; - struct ip6_mh_binding_update *pbu; - static struct iovec mh_vec[2 * (IP6_MHOPT_MAX + 1)]; - static struct iovec dummy_mh_vec[2 * (IP6_MHOPT_MAX + 1)]; - struct timeval tv; - struct timezone tz; - ip6mnid_t mn_id; - ip6mnid_t mn_hardware_address; - uint16_t p_flag = 1; - int iov_count; - - memset((void*)mh_vec , 0, (2 * (IP6_MHOPT_MAX + 1))*sizeof(struct iovec)); - memset((void*)dummy_mh_vec , 0, (2 * (IP6_MHOPT_MAX + 1))*sizeof(struct iovec)); - - pbu = mh_create(&mh_vec[0], IP6_MH_TYPE_BU); - - if (!pbu) { - dbg("mh_create(&mh_vec[0], IP6_MH_TYPE_BU) failed\n"); - return -ENOMEM; - } - - bce->seqno_out = get_new_pbu_sequence_number(); - pbu->ip6mhbu_seqno = htons(bce->seqno_out); - pbu->ip6mhbu_flags = bce->PBU_flags; // no htons since endianess already taken in account in ip6mh.h - pbu->ip6mhbu_lifetime = htons(lifetime->tv_sec >> 2); - dbg("Create PBU with lifetime = %d seconds (config = %d seconds)\n", lifetime->tv_sec, conf.PBULifeTime); - memcpy(&mn_id, &bce->mn_suffix.s6_addr32[2], sizeof(ip6mnid_t)); - memcpy(&mn_hardware_address, &bce->mn_hw_address.s6_addr32[2], sizeof(ip6mnid_t)); - - dbg("Create PBU options...\n"); - mh_create_opt_mobile_node_identifier(&mh_vec[iovlen++], p_flag, &mn_hardware_address); - mh_create_opt_home_net_prefix(&mh_vec[iovlen++], &bce->mn_prefix); - mh_create_opt_handoff_indicator(&mh_vec[iovlen++], IP6_MHOPT_HI_HANDOFF_BETWEEN_MAGS_FOR_SAME_INTERFACE); - mh_create_opt_access_technology_type(&mh_vec[iovlen++], IP6_MHOPT_ATT_IEEE802_11ABG); - mh_create_opt_mobile_node_link_layer_identifier(&mh_vec[iovlen++], &mn_id); - - tz.tz_minuteswest = 0; /* minutes west of Greenwich */ - tz.tz_dsttime = 3; //DST_WET; /* type of DST correction */ - - if (gettimeofday(&tv, &tz) == 0) { - bce->timestamp.first = tv.tv_sec >> 16; - bce->timestamp.second = (tv.tv_sec & 0x0000FFFF) << 16; - bce->timestamp.second += (((tv.tv_usec * 65536)/1000000) & 0x0000FFFF); - mh_create_opt_time_stamp(&mh_vec[iovlen++], &bce->timestamp); - } else { - bce->timestamp.first = 0; - bce->timestamp.second = 0; - dbg("Timestamp option failed to get time, discard option\n"); - } - - iov_count = mh_try_pad(mh_vec, dummy_mh_vec, iovlen); - - - //calculate the length of the message. - pbu->ip6mhbu_hdr.ip6mh_hdrlen = mh_length(dummy_mh_vec, iov_count); - - dbg("Send PBU....\n"); - pmip_mh_send(addrs, dummy_mh_vec, iov_count, oif); - - dbg("Copy PBU message into TEMP PMIP entry iovec....\n"); - //copy the PBU message into the mh_vector for the entry for future retransmissions. - memcpy((void*)(bce->mh_vec), (void*)mh_vec, 2 * (IP6_MHOPT_MAX + 1)* sizeof(struct iovec)); - bce->iovlen = iovlen; - //do not free, keep for retransmission free_iov_data(dummy_mh_vec, iov_count); - return 0; -} -//--------------------------------------------------------------------------------------------------------------------- -int mh_send_pba(const struct in6_addr_bundle *addrs, pmip_entry_t * bce, struct timespec *lifetime, int oif) -{ - static struct iovec mh_vec[2 * (IP6_MHOPT_MAX + 1)]; - static struct iovec dummy_mh_vec[2 * (IP6_MHOPT_MAX + 1)]; - volatile int iovlen = 1; - struct ip6_mh_binding_ack *pba; - uint16_t p_flag = 1; - ip6mnid_t mn_id; - ip6mnid_t mn_hardware_address; - int iov_count; - - //bzero(mh_vec, sizeof(mh_vec)); - memset((void*)mh_vec , 0, (2 * (IP6_MHOPT_MAX + 1))*sizeof(struct iovec)); - memset((void*)dummy_mh_vec , 0, (2 * (IP6_MHOPT_MAX + 1))*sizeof(struct iovec)); - - pba = mh_create(&mh_vec[0], IP6_MH_TYPE_BACK); - - if (!pba) { - dbg("mh_create() failed\n"); - return -ENOMEM; - } - - dbg("Create PBA with lifetime = %d seconds\n", lifetime->tv_sec); - pba->ip6mhba_status = bce->status; - pba->ip6mhba_flags = bce->PBA_flags; - pba->ip6mhba_seqno = htons(bce->seqno_in); - - bce->seqno_out = bce->seqno_in; - - pba->ip6mhba_lifetime = htons(lifetime->tv_sec >> 2); - dbg("Create PBA options....\n"); - memcpy(&mn_id, &bce->mn_suffix.s6_addr32[2], sizeof(ip6mnid_t)); - memcpy(&mn_hardware_address, &bce->mn_hw_address.s6_addr32[2], sizeof(ip6mnid_t)); - mh_create_opt_mobile_node_identifier(&mh_vec[iovlen++], p_flag, &mn_hardware_address); - mh_create_opt_home_net_prefix(&mh_vec[iovlen++], &bce->mn_prefix); - mh_create_opt_mobile_node_link_layer_identifier(&mh_vec[iovlen++], &mn_id); - mh_create_opt_time_stamp(&mh_vec[iovlen++], &bce->timestamp); - - iov_count = mh_try_pad(mh_vec, dummy_mh_vec, iovlen); - - //calculate the length of the message. - pba->ip6mhba_hdr.ip6mh_hdrlen = mh_length(dummy_mh_vec, iov_count); - dbg("Send PBA...\n"); - pmip_mh_send(addrs, dummy_mh_vec, iov_count, oif); - free_iov_data(dummy_mh_vec, iov_count); - return 0; -} diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/src/pmip/pmip_msgs.h b/openair3/PMIPv6/pmipv6-daemon-umip/src/pmip/pmip_msgs.h deleted file mode 100755 index ac7280ccf7..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/src/pmip/pmip_msgs.h +++ /dev/null @@ -1,249 +0,0 @@ -/* - * This file is part of the PMIP, Proxy Mobile IPv6 for Linux. - * - * Authors: OPENAIR3 - * - * Copyright 2010-2011 EURECOM (Sophia-Antipolis, FRANCE) - * - * Proxy Mobile IPv6 (or PMIPv6, or PMIP) is a network-based mobility - * management protocol standardized by IETF. It is a protocol for building - * a common and access technology independent of mobile core networks, - * accommodating various access technologies such as WiMAX, 3GPP, 3GPP2 - * and WLAN based access architectures. Proxy Mobile IPv6 is the only - * network-based mobility management protocol standardized by IETF. - * - * PMIP Proxy Mobile IPv6 for Linux has been built above MIPL free software; - * which it involves that it is under the same terms of GNU General Public - * License version 2. See MIPL terms condition if you need more details. - */ -/*! \file pmip_msgs.h -* \brief -* \author OpenAir3 Group -* \date 12th of October 2010 -* \version 1.0 -* \company Eurecom -* \project OpenAirInterface -* \email: openair_tech@eurecom.fr -*/ - -/** \defgroup MESSAGES MESSAGES - * \ingroup PMIP6D - * PMIP Messages (MSGs) - * @{ - */ - -#ifndef __PMIP_MSGS_H__ -# define __PMIP_MSGS_H__ -//----------------------------------------------------------------------------- -# ifdef PMIP_MSGS_C -# define private_pmip_msgs(x) x -# define protected_pmip_msgs(x) x -# define public_pmip_msgs(x) x -# else -# ifdef PMIP -# define private_pmip_msgs(x) -# define protected_pmip_msgs(x) extern x -# define public_pmip_msgs(x) extern x -# else -# define private_pmip_msgs(x) -# define protected_pmip_msgs(x) -# define public_pmip_msgs(x) extern x -# endif -# endif -//----------------------------------------------------------------------------- -#include -#include "icmp6.h" -#include "mh.h" -//----------------------------------------------------------------------------- -#include "pmip_cache.h" -//-GLOBAL VARIABLES---------------------------------------------------------------------------- -/*! \var int g_mag_sequence_number -\brief Sequence number to be used for constructing PBU messages on a MAG. -*/ -private_pmip_msgs(int g_mag_sequence_number;) - -//-PROTOTYPES---------------------------------------------------------------------------- -/*! \fn void init_pbu_sequence_number(void) -* \brief Initialize the sequence number generator for PBU messages. -*/ -protected_pmip_msgs(void init_pbu_sequence_number(void);) - -/*! \fn int get_new_pbu_sequence_number(void) -* \brief Return a valid sequence number to be used for constructing PBU messages on a MAG. -* \return A valid sequence number. -*/ -protected_pmip_msgs(int get_new_pbu_sequence_number(void);) - -/*! \fn int is_pba_is_response_to_last_pbu_sent(msg_info_t * , pmip_entry_t *) -* \brief Check if a PBA response is the response to the last sent PBU, this function can be called only on a MAG. -* \param[in] pba_info The message information structure -* \param[in] bce The binding cache entry -* \return 1 if true, 0 if false. -*/ -protected_pmip_msgs(int is_pba_is_response_to_last_pbu_sent(msg_info_t * pba_info, pmip_entry_t *bce);) - -/*! \fn struct in6_addr get_node_id(struct in6_addr *) -* \brief Translate a IPv6 address into a mobile interface identifier -* \param[in] mn_addr The mobile address -* \return The mobile interface identifier in a struct in6_addr. -*/ -private_pmip_msgs(struct in6_addr get_node_id(struct in6_addr *mn_addr);) -/*! \fn struct in6_addr get_node_prefix(struct in6_addr *) -* \brief Retrieve the prefix of a IPv6 address -* \param[in] mn_addr A mobile IPv6 address -* \return The prefix. -* \note The prefix len is 64 bits -*/ -protected_pmip_msgs(struct in6_addr get_node_prefix(struct in6_addr *mn_addr);) -/*! \fn int mh_create_opt_home_net_prefix(struct iovec *, struct in6_addr *) -* \brief Creates the Home Network Prefix option. -* \param[in,out] iov Storage -* \param[in] Home_Network_Prefix Option home network prefix value -* \return Zero if success, negative value otherwise. -*/ -private_pmip_msgs(int mh_create_opt_home_net_prefix(struct iovec *iov, struct in6_addr *Home_Network_Prefix);) - -/*! \fn int mh_create_opt_handoff_indicator(struct iovec *, int handoff_indicator) -* \brief Creates the Home Network Prefix option. -* \param[in,out] iov Storage -* \param[in] handoff_indicator Type of handoff -* \return Zero if success, negative value otherwise. -*/ -private_pmip_msgs(int mh_create_opt_handoff_indicator(struct iovec *iov, int handoff_indicator);) - -/*! \fn int mh_create_opt_access_technology_type(struct iovec *iov, int att)) -* \brief Creates the Access Technology Type option. -* \param[in,out] iov Storage -* \param[in] att Access technology through which the mobile node is connected to the access link on the mobile access gateway -* \return Zero if success, negative value otherwise. -*/ -private_pmip_msgs(int mh_create_opt_access_technology_type(struct iovec *iov, int att);) - -/*! \fn int mh_create_opt_mobile_node_link_layer_identifier(struct iovec *, int, ip6mnid_t *) -* \brief Creates the mobile interface identifier option. -* \param[in-out] iov Storage -* \param[in] mnlli Option mobile node link layer identifier value -* \return Zero if success, negative value otherwise. -*/ -private_pmip_msgs(int mh_create_opt_mobile_node_link_layer_identifier(struct iovec *iov, ip6mnid_t * mnlli);) -/*! \fn int mh_create_opt_time_stamp(struct iovec *iov, ip6ts_t *) -* \brief Creates the timestamp option. -* \param[in-out] iov Storage -* \param[in] Timestamp Option timestamp value -* \return Zero if success, negative value otherwise. -*/ -private_pmip_msgs(int mh_create_opt_time_stamp(struct iovec *iov, ip6ts_t * Timestamp);) -/*! \fn int mh_create_opt_link_local_address(struct iovec *, struct in6_addr *) -* \brief Creates the link local address option. -* \param[in-out] iov Storage -* \param[in] LinkLocal Option link local address value -* \return Zero if success, negative value otherwise. -*/ -private_pmip_msgs(int mh_create_opt_link_local_address(struct iovec *iov, struct in6_addr *LinkLocal);) -/*! \fn int mh_create_opt_dst_mn_addr(struct iovec *, struct in6_addr *) -* \brief Creates the Destination MN address option. -* \param[in-out] iov Storage -* \param[in] dst_mn_addr Destinantion mobile node address option value -* \return Zero if success, negative value otherwise. -*/ -private_pmip_msgs(int mh_create_opt_dst_mn_addr(struct iovec *iov, struct in6_addr *dst_mn_addr);) - -/*! \fn int mh_create_opt_serv_mag_addr(struct iovec *, struct in6_addr *) -* \brief Creates the Serving MAG address option. -* \param[in-out] iov Storage -* \param[in] serv_MAG_addr Serving MAG address option value -* \return Zero if success, negative value otherwise. -*/ -private_pmip_msgs(int mh_create_opt_serv_mag_addr(struct iovec *iov, struct in6_addr *serv_MAG_addr);) -/*! \fn int mh_create_opt_serv_lma_addr(struct iovec *iov, struct in6_addr *) -* \brief Creates the Serving LMA address option. -* \param[in-out] iov Storage -* \param[in] serv_lma_addr Serving LMA address option value. -* \return Zero if success, negative value otherwise. -*/ -private_pmip_msgs(int mh_create_opt_serv_lma_addr(struct iovec *iov, struct in6_addr *serv_lma_addr);) -/*! \fn int mh_create_opt_src_mn_addr(struct iovec *, struct in6_addr *) -* \brief Creates the source mobile node address option. -* \param[in-out] iov Storage -* \param[in] src_mn_addr Source mobile node address option value. -* \return Zero if success, negative value otherwise. -*/ -private_pmip_msgs(int mh_create_opt_src_mn_addr(struct iovec *iov, struct in6_addr *src_mn_addr);) -/*! \fn int mh_create_opt_src_mag_addr(struct iovec *, struct in6_addr *) -* \brief Creates the mobile interface identifier option. -* \param[in-out] iov Storage -* \param[in] src_mag_addr Source MAG address option value. -* \return Zero if success, negative value otherwise. -*/ -private_pmip_msgs(int mh_create_opt_src_mag_addr(struct iovec *iov, struct in6_addr *src_mag_addr);) -/*! \fn int mh_pbu_parse(msg_info_t * info, struct ip6_mh_binding_update *pbu, ssize_t len, const struct in6_addr_bundle *in_addrs, int iif) -* \brief Parse PBU message. -* \param[in-out] info Storage containing all necessary informations about the message received. -* \param[in] pbu Mobility header "Binding Update". -* \param[in] len Length of pbu. -* \param[in] in_addrs Source and Destination address of PBU message. -* \param[in] iif Interface identifier. -* \return Zero. -*/ -protected_pmip_msgs(int mh_pbu_parse(msg_info_t * info, struct ip6_mh_binding_update *pbu, ssize_t len, const struct in6_addr_bundle *in_addrs, int iif);) -/*! \fn int mh_pba_parse(msg_info_t * , struct ip6_mh_binding_ack *, ssize_t , const struct in6_addr_bundle *, int) -* \brief Parse PBA message. -* \param[in-out] info Storage containing all necessary informations about the message received. -* \param[in] pba Mobility header "Binding Acknowledgment". -* \param[in] len Length of pbu. -* \param[in] in_addrs Source and Destination address of PBU message. -* \param[in] iif Interface identifier. -* \return Zero. -*/ -protected_pmip_msgs(int mh_pba_parse(msg_info_t * info, struct ip6_mh_binding_ack *pba, ssize_t len, const struct in6_addr_bundle *in_addrs, int iif);) -/*! \fn int icmp_rs_parse(msg_info_t * , struct nd_router_solicit *, const struct in6_addr *, const struct in6_addr *, int , int ) -* \brief Parse ICMPv6 RS message. -* \param[in-out] info Storage containing all necessary informations about the message received. -* \param[in] rs Router sollicitation infos. -* \param[in] saddr Source address of the message. -* \param[in] daddr Destination address of the message. -* \param[in] iif Interface identifier. -* \param[in] hoplimit Hop limit value found in RS message. -* \return Zero. -*/ -protected_pmip_msgs(int icmp_rs_parse(msg_info_t * info, __attribute__ ((unused)) struct nd_router_solicit *rs, const struct in6_addr *saddr, const struct in6_addr *daddr, int iif, int hoplimit);) -/*! \fn int icmp_na_parse(msg_info_t *, struct nd_neighbor_advert *, const struct in6_addr *, const struct in6_addr *, int , int ) -* \brief Parse ICMPv6 NA message. -* \param[in-out] info Storage containing all necessary informations about the message received. -* \param[in] na Neighbour advertisement infos. -* \param[in] saddr Source address of the message. -* \param[in] daddr Destination address of the message. -* \param[in] iif Interface identifier. -* \param[in] hoplimit Hop limit value found in NA message. -* \return Zero. -*/ -protected_pmip_msgs(int icmp_na_parse(msg_info_t * info, struct nd_neighbor_advert *na, const struct in6_addr *saddr, const struct in6_addr *daddr, int iif, int hoplimit);) -/*! \fn int pmip_mh_send(const struct in6_addr_bundle *, const struct iovec *, int , int ) -* \brief Send MH message. -* \param[in] addrs Source and destination address of the message. -* \param[in] mh_vec Storage of the message. -* \param[in] iovlen Len of the storage. -* \param[in] oif Outgoing interface identifier. -* \return Zero if success, negative value otherwise. -*/ -protected_pmip_msgs(int pmip_mh_send(const struct in6_addr_bundle *addrs, const struct iovec *mh_vec, int iovlen, int oif);) -/*! \fn int mh_send_pbu(const struct in6_addr_bundle *, pmip_entry_t *, struct timespec *lifetime, int oif) -* \brief Send PBU message. -* \param[in] addrs Source and destination address of the message. -* \param[in] bce Binding cache entry corresponding to the binding. -* \param[in] lifetime Lifetime of the binding. -* \param[in] oif Outgoing interface identifier. -* \return Zero if success, negative value otherwise. -*/ -protected_pmip_msgs(int mh_send_pbu(const struct in6_addr_bundle *addrs, pmip_entry_t * bce, struct timespec *lifetime, int oif);) -/*! \fn int mh_send_pba(const struct in6_addr_bundle *, pmip_entry_t *, struct timespec *, int) -* \brief Send PBA message. -* \param[in] addrs Source and destination address of the message. -* \param[in] bce Binding cache entry corresponding to the binding. -* \param[in] lifetime Lifetime of the binding. -* \param[in] oif Outgoing interface identifier. -* \return Zero if success, negative value otherwise. -*/ -protected_pmip_msgs(int mh_send_pba(const struct in6_addr_bundle *addrs, pmip_entry_t * bce, struct timespec *lifetime, int oif);) -#endif -/** @}*/ diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/src/pmip/pmip_pcap.c b/openair3/PMIPv6/pmipv6-daemon-umip/src/pmip/pmip_pcap.c deleted file mode 100755 index 39b84aa609..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/src/pmip/pmip_pcap.c +++ /dev/null @@ -1,343 +0,0 @@ -/* - * This file is part of the PMIP, Proxy Mobile IPv6 for Linux. - * - * Authors: OPENAIR3 - * - * Copyright 2010-2011 EURECOM (Sophia-Antipolis, FRANCE) - * - * Proxy Mobile IPv6 (or PMIPv6, or PMIP) is a network-based mobility - * management protocol standardized by IETF. It is a protocol for building - * a common and access technology independent of mobile core networks, - * accommodating various access technologies such as WiMAX, 3GPP, 3GPP2 - * and WLAN based access architectures. Proxy Mobile IPv6 is the only - * network-based mobility management protocol standardized by IETF. - * - * PMIP Proxy Mobile IPv6 for Linux has been built above MIPL free software; - * which it involves that it is under the same terms of GNU General Public - * License version 2. See MIPL terms condition if you need more details. - */ -/*! \file pmip_pcap.c -* \brief Analyse of captured packets -* \author OpenAir3 Group -* \date 12th of October 2010 -* \version 1.0 -* \company Eurecom -* \project OpenAirInterface -* \email: openair_tech@eurecom.fr -*/ -#define PMIP -#define PMIP_PCAP_C -#ifdef HAVE_CONFIG_H -# include -#endif -#include -#include -//--------------------------------------------------------------------------------------------------------------------- -#include "pmip_fsm.h" -#include "pmip_hnp_cache.h" -#include "pmip_pcap.h" -#include "pmip_msgs.h" -#include "pmip_mag_proc.h" -//--------------------------------------------------------------------------------------------------------------------- -#ifdef ENABLE_VT -# include "vt.h" -#endif -#include "debug.h" -#include "conf.h" - -static pthread_t pcap_listener; - -//--------------------------------------------------------------------------------------------------------------------- -/* - * print data in rows of 16 bytes: offset hex ascii - * - * 00000 47 45 54 20 2f 20 48 54 54 50 2f 31 2e 31 0d 0a GET / HTTP/1.1.. - */ -void -pmip_pcap_print_hex_ascii_line(const u_char *payload, int len, int offset) -{ - - int i; - int gap; - const u_char *ch; - - /* offset */ - printf("%05d ", offset); - - /* hex */ - ch = payload; - - for(i = 0; i < len; i++) { - printf("%02x ", *ch); - ch++; - - /* print extra space after 8th byte for visual aid */ - if (i == 7) - printf(" "); - } - - /* print space to handle line less than 8 bytes */ - if (len < 8) - printf(" "); - - /* fill hex gap with spaces if not full line */ - if (len < 16) { - gap = 16 - len; - - for (i = 0; i < gap; i++) { - printf(" "); - } - } - - printf(" "); - - /* ascii (if printable) */ - ch = payload; - - for(i = 0; i < len; i++) { - if (isprint(*ch)) - printf("%c", *ch); - else - printf("."); - - ch++; - } - - printf("\n"); -} -//--------------------------------------------------------------------------------------------------------------------- -/* - * print packet payload data (avoid printing binary data) - */ -void -pmip_pcap_print_payload(const u_char *payload, int len) -{ - - int len_rem = len; - int line_width = 16; /* number of bytes per line */ - int line_len; - int offset = 0; /* zero-based offset counter */ - const u_char *ch = payload; - - if (len <= 0) - return; - - /* data fits on one line */ - if (len <= line_width) { - pmip_pcap_print_hex_ascii_line(ch, len, offset); - return; - } - - /* data spans multiple lines */ - for ( ;; ) { - /* compute current line length */ - line_len = line_width % len_rem; - /* print line */ - pmip_pcap_print_hex_ascii_line(ch, line_len, offset); - /* compute total remaining */ - len_rem = len_rem - line_len; - /* shift pointer to remaining bytes to print */ - ch = ch + line_len; - /* add offset */ - offset = offset + line_width; - - /* check if we have line width chars or less */ - if (len_rem <= line_width) { - /* print last line and get out */ - pmip_pcap_print_hex_ascii_line(ch, len_rem, offset); - break; - } - } -} -//--------------------------------------------------------------------------------------------------------------------- - -/*! -* Construct message event and send it to the MAG FSM -* \param -*/ -void pmip_pcap_msg_handler_associate(struct in6_addr mn_iidP, int iifP) -{ - dbg("pmip_pcap_msg_handler_associate()\n"); - msg_info_t msg; - memset(&msg, 0, sizeof(msg_info_t)); - msg.mn_iid = EUI48_to_EUI64(mn_iidP); - msg.iif = iifP; - msg.msg_event = hasWLCCP; - mag_fsm(&msg); -} -//--------------------------------------------------------------------------------------------------------------------- -void pmip_pcap_msg_handler_deassociate(struct in6_addr mn_iidP, int iifP) -{ - dbg("pmip_pcap_msg_handler_desassociate()\n"); - msg_info_t msg; - memset(&msg, 0, sizeof(msg_info_t)); - msg.mn_iid = EUI48_to_EUI64(mn_iidP); - msg.iif = iifP; - msg.msg_event = hasDEREG; - mag_fsm(&msg); -} -//--------------------------------------------------------------------------------------------------------------------- -int pmip_pcap_loop_start(void) -{ - dbg("Getting ingress informations\n"); - mag_get_ingress_info(&g_pcap_iif, g_pcap_devname); - - if (pthread_create(&pcap_listener, NULL, pmip_pcap_loop, NULL)) - return -1; - - return 0; -} -//--------------------------------------------------------------------------------------------------------------------- -void pmip_pcap_loop_stop(void) -{ -#undef HAVE_PCAP_BREAKLOOP - //#define HAVE_PCAP_BREAKLOOP -#ifdef HAVE_PCAP_BREAKLOOP - /* - * We have "pcap_breakloop()"; use it, so that we do as little - * as possible in the signal handler (it's probably not safe - * to do anything with standard I/O streams in a signal handler - - * the ANSI C standard doesn't say it is). - */ - pcap_breakloop(pcap_descr); -#endif - - pthread_cancel(pcap_listener); - pthread_join(pcap_listener, NULL); -} -//--------------------------------------------------------------------------------------------------------------------- -void* pmip_pcap_loop(__attribute__ ((unused)) void *arg) -{ - bpf_u_int32 netaddr = 0, mask = 0; // To store network address and netmask - struct bpf_program filter; // Place to store the BPF filter program - char errbuf[PCAP_ERRBUF_SIZE]; // Error buffer - struct pcap_pkthdr pkthdr; // Packet information (timestamp, size...) - const unsigned char *packet = NULL; // Received raw data - struct in6_addr mn_iid; - char filter_string[] = "udp port 514 or ip6 proto 58"; - char addrmac[16]; - char addrmacByte[16]; - char *p; - int b, j, count; - - dbg("[PCAP] Device is %s and iif is %d\n", g_pcap_devname, g_pcap_iif); - - pcap_descr = NULL; - memset(errbuf, 0, PCAP_ERRBUF_SIZE); - memset(&mn_iid, 0, sizeof(struct in6_addr)); - pcap_descr = pcap_open_live(g_pcap_devname, PCAPMAXBYTES2CAPTURE, 0, PCAPTIMEDELAYKERNEL2USERSPACE, errbuf); - - if (pcap_descr == NULL) - dbg("Error %s", errbuf); - else if (*errbuf) - dbg("Warning %s\n", errbuf); - - // Look up info from the capture device - if (pcap_lookupnet(g_pcap_devname, &netaddr, &mask, errbuf) == -1) { - dbg("Can't get netmask for device %s\n", g_pcap_devname); - netaddr = 0; - mask = 0; - } - - // Compiles the filter expression into a BPF filter program - if (pcap_compile(pcap_descr, &filter, filter_string, 0, mask) == -1) { - dbg("Couldn't parse filter : %s\n", pcap_geterr(pcap_descr)); - } - - // Load the filter program into the packet capture device - if (pcap_setfilter(pcap_descr, &filter) == -1) { - dbg("Couldn't install filter: %s\n", pcap_geterr(pcap_descr)); - } - - pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL); - - while (1) { - packet = pcap_next(pcap_descr, &pkthdr); // Get one packet - - if ( ( pkthdr.len > 0 ) && ( packet != NULL ) ) { - //pmip_pcap_print_payload(packet, pkthdr.len); - if (packet[54] == 0x85) { // case ROUTER SOLICITATION WITH ETHERNET HEADER - dbg("[PCAP] RECEIVED PACKET SIZE: %d bytes caplen %d bytes\n", pkthdr.len, pkthdr.caplen); - memset(&mn_iid, 0, sizeof(struct in6_addr)); - - for (b=0; b< 8; b++) { - mn_iid.s6_addr[b+8] = packet[b+30]; - } - - mn_iid = EUI64_to_EUI48(mn_iid); - dbg("[PCAP] RECEIVED ROUTER SOLLICITATION OVER ETHERNET MAC ADDR %x:%x:%x:%x:%x:%x:%x:%x dev %s iif %d\n", NIP6ADDR(&mn_iid), g_pcap_devname, g_pcap_iif); - pmip_pcap_msg_handler_associate(mn_iid, g_pcap_iif); - } else if (packet[56] == 0x85) {// case ROUTER SOLICITATION WITHOUT ETHERNET HEADER - dbg("[PCAP] RECEIVED PACKET SIZE: %d bytes caplen %d bytes\n", pkthdr.len, pkthdr.caplen); - memset(&mn_iid, 0, sizeof(struct in6_addr)); - - for (b=0; b< 8; b++) { - mn_iid.s6_addr[b+8] = packet[b+32]; - } - - mn_iid = EUI64_to_EUI48(mn_iid); - dbg("[PCAP] RECEIVED ROUTER SOLLICITATION OVER LTE MAC ADDR %x:%x:%x:%x:%x:%x:%x:%x dev %s iif %d\n", NIP6ADDR(&mn_iid), g_pcap_devname, g_pcap_iif); - pmip_pcap_msg_handler_associate(mn_iid, g_pcap_iif); - // approx 50 bytes for MAC + IP + UDP headers - } else if ((p = strstr((const char *)(&packet[PCAP_CAPTURE_SYSLOG_MESSAGE_FRAME_OFFSET]), conf.PcapSyslogAssociationGrepString)) != NULL) { - dbg("[PCAP] RECEIVED SYSLOG PACKET SIZE: %d bytes caplen %d bytes\n", pkthdr.len, pkthdr.caplen); - p = p + strlen(conf.PcapSyslogAssociationGrepString); - count = 0; - j = 0; - - while ((count < 12) && (j < 32)) { - if (isxdigit(p[j])) { - addrmac[count++] = p[j] ; - } - - j++; - } - - addrmac[count] = '\0'; - dbg ("Before conversion : %s \n", addrmac); - - // convert ascii hex string to bin - for (b = 0 ; b < 6; b++) { - strncpy(addrmacByte, addrmac+2*b, 2); - addrmacByte[2] = '\0'; - // we can do (unsigned int*) because x86 processors are little-endian - // (done for suppressing a warning) - sscanf ((const char*)addrmacByte, "%02x", (unsigned int*)&mn_iid.s6_addr[10 + b]); - } - - pmip_pcap_msg_handler_associate(mn_iid, g_pcap_iif); - - } else if ((p = strstr((const char *)(&packet[PCAP_CAPTURE_SYSLOG_MESSAGE_FRAME_OFFSET]), conf.PcapSyslogDeAssociationGrepString)) != NULL) { - dbg("[PCAP] RECEIVED PACKET SIZE: %d bytes caplen %d bytes\n", pkthdr.len, pkthdr.caplen); - p = p + strlen(conf.PcapSyslogDeAssociationGrepString); - count = 0; - j = 0; - - while ((count < 12) && (j < 32)) { - if (isxdigit(p[j])) { - addrmac[count++] = p[j] ; - } - - j++; - } - - addrmac[count] = '\0'; - dbg ("Before conversion : %s \n", addrmac); - - // convert ascii hex string to bin - for (b = 0 ; b < 6; b++) { - strncpy(addrmacByte, addrmac+2*b, 2); - addrmacByte[2] = '\0'; - // we can do (unsigned int*) because x86 processors are little-endian - // (done for suppressing a warning) - sscanf ((const char*)addrmacByte, "%02x", (unsigned int*)&mn_iid.s6_addr[10 + b]); - } - - pmip_pcap_msg_handler_deassociate(mn_iid, g_pcap_iif); - } - } - } - - pthread_exit(NULL); -} - diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/src/pmip/pmip_pcap.h b/openair3/PMIPv6/pmipv6-daemon-umip/src/pmip/pmip_pcap.h deleted file mode 100755 index fe0cd42a53..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/src/pmip/pmip_pcap.h +++ /dev/null @@ -1,104 +0,0 @@ -/* - * This file is part of the PMIP, Proxy Mobile IPv6 for Linux. - * - * Authors: OPENAIR3 - * - * Copyright 2010-2011 EURECOM (Sophia-Antipolis, FRANCE) - * - * Proxy Mobile IPv6 (or PMIPv6, or PMIP) is a network-based mobility - * management protocol standardized by IETF. It is a protocol for building - * a common and access technology independent of mobile core networks, - * accommodating various access technologies such as WiMAX, 3GPP, 3GPP2 - * and WLAN based access architectures. Proxy Mobile IPv6 is the only - * network-based mobility management protocol standardized by IETF. - * - * PMIP Proxy Mobile IPv6 for Linux has been built above MIPL free software; - * which it involves that it is under the same terms of GNU General Public - * License version 2. See MIPL terms condition if you need more details. - */ -/*! \file pmip_pcap.h -* \brief -* \author OpenAir3 Group -* \date 12th of October 2010 -* \version 1.0 -* \company Eurecom -* \project OpenAirInterface -* \email: openair_tech@eurecom.fr -*/ - -/** \defgroup PACKET_CAPTURE PACKET CAPTURE - * \ingroup PMIP6D - * PMIP PACKet CAPture (PCAP) - * @{ - */ - -#ifndef __PMIP_PCAP_H__ -# define __PMIP_PCAP_H__ -//----------------------------------------------------------------------------- -# ifdef PMIP_PCAP_C -# define private_pmip_pcap(x) x -# define protected_pmip_pcap(x) x -# define public_pmip_pcap(x) x -# else -# ifdef PMIP -# define private_pmip_pcap(x) -# define protected_pmip_pcap(x) extern x -# define public_pmip_pcap(x) extern x -# else -# define private_pmip_pcap(x) -# define protected_pmip_pcap(x) -# define public_pmip_pcap(x) extern x -# endif -# endif -//----------------------------------------------------------------------------- -# include -# include -//----------------------------------------------------------------------------- -# define PCAPMAXBYTES2CAPTURE 65535 -# define PCAPTIMEDELAYKERNEL2USERSPACE 1000 -# define PCAP_CAPTURE_SYSLOG_MESSAGE_FRAME_OFFSET 42 -//-VARS---------------------------------------------------------------------------- -/*! \var pcap_t * pcap_descr -\brief PCAP descriptor for capturing packets on MAG ingress interface. -*/ -public_pmip_pcap(pcap_t * pcap_descr); -/*! \var char* g_pcap_devname -\brief PCAP device name on which the capture of packets is done. -*/ -public_pmip_pcap(char g_pcap_devname[32]); -/*! \var int g_pcap_iif -\brief PCAP device interface index on which the capture of packets is done. -*/ -public_pmip_pcap(int g_pcap_iif); -//-PROTOTYPES---------------------------------------------------------------------------- -/*! \fn int pmip_pcap_loop_start(void) -* \brief Start the PCAP listener thread. -* \return 0 on success. -*/ -public_pmip_pcap(int pmip_pcap_loop_start(void);) -/*! \fn void pmip_pcap_loop_stop(void) -* \brief Stop the PCAP listener thread. -*/ -public_pmip_pcap(void pmip_pcap_loop_stop(void);) -/*! \fn void* pmip_pcap_loop(void*) -* \brief -* \param[in] devname The name of the device (ex "eth1") that will be listened for capturing packets. -* \param[in] iif The interface identifier that will be listened for capturing packets. -*/ -public_pmip_pcap(void* pmip_pcap_loop(void*);) -/*! \fn void pmip_pcap_msg_handler_associate(struct in6_addr , int ) -* \brief Construct amessage event telling that a mobile node is associated with the radio technology of the MAG, and send it to the MAG FSM. -* \param[in] mn_iidP The MAC address of the mobile node. -* \param[in] iifP The interface identifier that is listened for capturing packets. -*/ -private_pmip_pcap(void pmip_pcap_msg_handler_associate(struct in6_addr mn_iidP, int iifP);) -/*! \fn void pmip_pcap_msg_handler_deassociate(struct in6_addr , int ) -* \brief Construct amessage event telling that a mobile node is de-associated with the radio technology of the MAG, and send it to the MAG FSM. -* \param[in] mn_iidP The MAC address of the mobile node. -* \param[in] iifP The interface identifier that is listened for capturing packets. -*/ -private_pmip_pcap(void pmip_pcap_msg_handler_deassociate(struct in6_addr mn_iidP, int iifP);) -#endif -/** @}*/ - - diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/src/pmip/pmip_tunnel.c b/openair3/PMIPv6/pmipv6-daemon-umip/src/pmip/pmip_tunnel.c deleted file mode 100755 index 85c7b07f58..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/src/pmip/pmip_tunnel.c +++ /dev/null @@ -1,211 +0,0 @@ -/* - * This file is part of the PMIP, Proxy Mobile IPv6 for Linux. - * - * Authors: OPENAIR3 - * - * Copyright 2010-2011 EURECOM (Sophia-Antipolis, FRANCE) - * - * Proxy Mobile IPv6 (or PMIPv6, or PMIP) is a network-based mobility - * management protocol standardized by IETF. It is a protocol for building - * a common and access technology independent of mobile core networks, - * accommodating various access technologies such as WiMAX, 3GPP, 3GPP2 - * and WLAN based access architectures. Proxy Mobile IPv6 is the only - * network-based mobility management protocol standardized by IETF. - * - * PMIP Proxy Mobile IPv6 for Linux has been built above MIPL free software; - * which it involves that it is under the same terms of GNU General Public - * License version 2. See MIPL terms condition if you need more details. - */ -/*! \file pmip_tunnel.c -* \brief -* \author OpenAir3 Group -* \date 12th of October 2010 -* \version 1.0 -* \company Eurecom -* \project OpenAirInterface -* \email: openair_tech@eurecom.fr -*/ -#define PMIP -#define PMIP_TUNNEL_C -#ifdef HAVE_CONFIG_H -#include -#endif -//--------------------------------------------------------------------------------------------------------------------- -#include "pmip_tunnel.h" -#include "pmip_handler.h" -//--------------------------------------------------------------------------------------------------------------------- -#include "tunnelctl.h" -#include "util.h" -#ifdef ENABLE_VT -# include "vt.h" -#endif -#include "debug.h" -#include "conf.h" -//----------------------------------------------------------------------------- -int pmip_tunnel_get_timer_index(struct in6_addr *remoteP) -{ - int mag; - int first_no_mag = -1; - - for (mag = 0 ; mag < PMIP_MAX_MAGS; mag++) { - if (IN6_ARE_ADDR_EQUAL(&g_tunnel_timer_table[mag].remote, remoteP)) { - return mag; - } else if ((IN6_IS_ADDR_UNSPECIFIED(&g_tunnel_timer_table[mag].remote)) && (first_no_mag == -1)) { - first_no_mag = mag; - } - } - - return first_no_mag; -} -//----------------------------------------------------------------------------- -int pmip_tunnels_init(void) -{ - unsigned int mag; - unsigned int link; - - memset((void*)g_tunnel_timer_table, 0, sizeof(tunnel_timer_t) * PMIP_MAX_MAGS); - - for (mag = 0 ; mag < PMIP_MAX_MAGS; mag++) { - INIT_LIST_HEAD(&g_tunnel_timer_table[mag].tqe.list); - } - - // create static tunnels if requested - if (conf.TunnelingEnabled) { - if (conf.DynamicTunnelingEnabled == 0) { - dbg("DynamicTunnelingEnabled is False\n"); - - if (is_ha()) { - for (mag = 0 ; mag < conf.NumMags; mag++) { - link = if_nametoindex(conf.LmaPmipNetworkDevice); - pmip_tunnel_add(&conf.LmaAddress, &conf.MagAddressEgress[mag], link); - } - } else if (is_mag()) { - link = if_nametoindex(conf.MagDeviceEgress); - pmip_tunnel_add(&conf.MagAddressEgress[0], &conf.LmaAddress, link); - } - } else { - dbg("DynamicTunnelingEnabled is True\n"); - } - } - - return 0; -} -//--------------------------------------------------------------------------------------------------------------------- -int pmip_tunnel_set_timer(struct in6_addr *remoteP, int tunnelP, struct timespec time_outP) -{ - struct timespec now_time; - struct timespec delay_before_delete_time; - struct timespec expires; - int mag_index; - - tscpy(delay_before_delete_time, time_outP); - - clock_gettime(CLOCK_REALTIME, &now_time); - - tsadd(now_time, delay_before_delete_time, expires); - - mag_index = pmip_tunnel_get_timer_index(remoteP); - dbg("Found mag index %d for mag@ %x:%x:%x:%x:%x:%x:%x:%x\n", mag_index, NIP6ADDR(remoteP)); - - // No timer lauched for this link - if ((g_tunnel_timer_table[mag_index].lifetime.tv_nsec == 0) && (g_tunnel_timer_table[mag_index].lifetime.tv_sec == 0)) { - - dbg("PMIP add task pmip_timer_tunnel_expired_handler in %d seconds for tunel %d\n", time_outP.tv_sec, tunnelP); - tscpy(g_tunnel_timer_table[mag_index].lifetime, expires); - add_task_abs(&expires, &g_tunnel_timer_table[mag_index].tqe, pmip_timer_tunnel_expired_handler); - - } else if (tsafter(g_tunnel_timer_table[mag_index].lifetime, expires)) { - - dbg("PMIP del old task pmip_timer_tunnel_expired_handler\n"); - del_task(&g_tunnel_timer_table[mag_index].tqe); - dbg("PMIP add new task pmip_timer_tunnel_expired_handler in %d seconds for tunnel %d\n", time_outP.tv_sec, tunnelP); - tscpy(g_tunnel_timer_table[mag_index].lifetime, expires); - add_task_abs(&expires, &g_tunnel_timer_table[mag_index].tqe, pmip_timer_tunnel_expired_handler); - - } else { - dbg("No new timer set for tunnel since a timer is currently running with higher time-out %d\n"); - } - - return 0; -} -//--------------------------------------------------------------------------------------------------------------------- -int pmip_tunnel_add(struct in6_addr *localP, struct in6_addr *remoteP, int linkP) -{ - int mag_index; - - if (conf.TunnelingEnabled) { - // Time-out timer on this tunnel does not exist - mag_index = pmip_tunnel_get_timer_index(remoteP); - dbg("Found mag index %d for mag@ %x:%x:%x:%x:%x:%x:%x:%x\n", mag_index, NIP6ADDR(remoteP)); - - if (conf.DynamicTunnelingEnabled) { - if ((g_tunnel_timer_table[mag_index].lifetime.tv_nsec == 0) && (g_tunnel_timer_table[mag_index].lifetime.tv_sec == 0)) { - int tunnel = tunnel_add(localP, remoteP, linkP, 0, 0); // -1 if error - g_tunnel_timer_table[mag_index].tunnel = tunnel; - g_tunnel_timer_table[mag_index].remote = *remoteP; - dbg("Creating dynamic IP-in-IP tunnel %d link %d from %x:%x:%x:%x:%x:%x:%x:%x to %x:%x:%x:%x:%x:%x:%x:%x...\n", tunnel, linkP, NIP6ADDR(localP), NIP6ADDR(remoteP)); - return tunnel; - } else { - dbg("PMIP del old task pmip_timer_tunnel_expired_handler\n"); - del_task(&g_tunnel_timer_table[mag_index].tqe); - int usercount = tunnel_getusers(g_tunnel_timer_table[mag_index].tunnel); - dbg("Keeping IP-in-IP tunnel %d link %d usercount %d\n", g_tunnel_timer_table[mag_index].tunnel, linkP, usercount); - return g_tunnel_timer_table[mag_index].tunnel; - } - } else { - if (IN6_ARE_ADDR_EQUAL(&g_tunnel_timer_table[mag_index].remote, remoteP)) { - dbg("Static IP-in-IP tunnel %d link %d from %x:%x:%x:%x:%x:%x:%x:%x to %x:%x:%x:%x:%x:%x:%x:%x...\n", g_tunnel_timer_table[mag_index].tunnel, linkP, NIP6ADDR(localP), NIP6ADDR(remoteP)); - return g_tunnel_timer_table[mag_index].tunnel; - } else if (IN6_IS_ADDR_UNSPECIFIED(&g_tunnel_timer_table[mag_index].remote)) { - int tunnel = tunnel_add(localP, remoteP, linkP, 0, 0); // -1 if error - g_tunnel_timer_table[mag_index].tunnel = tunnel; - g_tunnel_timer_table[mag_index].remote = *remoteP; - dbg("Creating static IP-in-IP tunnel %d link %d from %x:%x:%x:%x:%x:%x:%x:%x to %x:%x:%x:%x:%x:%x:%x:%x...\n", tunnel, linkP, NIP6ADDR(localP), NIP6ADDR(remoteP)); - return tunnel; - } else { - return -1; - } - } - } else { - dbg("IP-in-IP tunneling is disabled, no tunnel is created\n"); - return 0; - } -} -//--------------------------------------------------------------------------------------------------------------------- -int pmip_tunnel_del(int tunnelP) -{ - int res = 0; - int mag_index; - - dbg(" tunnel %d\n", tunnelP); - - if (conf.TunnelingEnabled) { - if (tunnelP > 0) { - if (conf.DynamicTunnelingEnabled) { - int usercount = tunnel_getusers(tunnelP); - - if (usercount == 1) { - // search if_index - for (mag_index = 0 ; mag_index < PMIP_MAX_MAGS; mag_index++) { - if (g_tunnel_timer_table[mag_index].tunnel == tunnelP) break; - } - - assert(mag_index < PMIP_MAX_MAGS); - // Do not delete before MaxDelayBeforeDynamicTunnelingDelete - pmip_tunnel_set_timer(&g_tunnel_timer_table[mag_index].remote, tunnelP, conf.MaxDelayBeforeDynamicTunnelingDelete); - } else { - // this will only decrease the number of users for this tunnel - res = tunnel_del(tunnelP, 0, 0); - } - } else { - dbg("Static Tunneling, tunnel %d is not deleted\n", tunnelP); - } - } else { - res = -1; - } - } else { - dbg("IP-in-IP tunneling is disabled, no tunnel is deleted\n"); - } - - return res; -} diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/src/pmip/pmip_tunnel.h b/openair3/PMIPv6/pmipv6-daemon-umip/src/pmip/pmip_tunnel.h deleted file mode 100755 index 5f85db6b2a..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/src/pmip/pmip_tunnel.h +++ /dev/null @@ -1,109 +0,0 @@ -/* - * This file is part of the PMIP, Proxy Mobile IPv6 for Linux. - * - * Authors: OPENAIR3 - * - * Copyright 2010-2011 EURECOM (Sophia-Antipolis, FRANCE) - * - * Proxy Mobile IPv6 (or PMIPv6, or PMIP) is a network-based mobility - * management protocol standardized by IETF. It is a protocol for building - * a common and access technology independent of mobile core networks, - * accommodating various access technologies such as WiMAX, 3GPP, 3GPP2 - * and WLAN based access architectures. Proxy Mobile IPv6 is the only - * network-based mobility management protocol standardized by IETF. - * - * PMIP Proxy Mobile IPv6 for Linux has been built above MIPL free software; - * which it involves that it is under the same terms of GNU General Public - * License version 2. See MIPL terms condition if you need more details. - */ -/*! \file pmip_tunnel.h -* \brief -* \author OpenAir3 Group -* \date 12th of October 2010 -* \version 1.0 -* \company Eurecom -* \project OpenAirInterface -* \email: openair_tech@eurecom.fr -*/ - -/** \defgroup TUNNEL_Management TUNNELING - * \ingroup PMIP6D - * PMIP Tunnel management (Creation/Deletion) - * @{ - */ - -#ifndef __PMIP_TUNNEL_H__ -# define __PMIP_TUNNEL_H__ -//----------------------------------------------------------------------------- -# ifdef PMIP_TUNNEL_C -# define private_pmip_tunnel(x) x -# define protected_pmip_tunnel(x) x -# define public_pmip_tunnel(x) x -# else -# ifdef PMIP -# define private_pmip_tunnel(x) -# define protected_pmip_tunnel(x) extern x -# define public_pmip_tunnel(x) extern x -# else -# define private_pmip_tunnel(x) -# define protected_pmip_tunnel(x) -# define public_pmip_tunnel(x) extern x -# endif -# endif -//----------------------------------------------------------------------------- -# include "tqueue.h" -# include "pmip_consts.h" -//----------------------------------------------------------------------------- -# include -//----------------------------------------------------------------------------- -/*! \struct mnid_hnp_t -* \brief Data structure to store the association of a network prefix and a mobile interface identifier. -*/typedef struct tunnel_timer { - struct timespec lifetime; /*!< \brief Delay for the tunnel before being deleted */ - struct tq_elem tqe; /*!< \brief Timer queue entry for expire*/ - int tunnel; /*!< \brief Tunnel id*/ - struct in6_addr remote; /*!< \brief Remote Address of the tunnel*/ -} __attribute__((__packed__))tunnel_timer_t; -//----------------------------------------------------------------------------- -/*! \var tunnel_timer_t g_tunnel_timer_table -\brief Table of timers managing the deletion of tunnels. -*/ -protected_pmip_tunnel(tunnel_timer_t g_tunnel_timer_table[PMIP_MAX_MAGS];) - -//-PROTOTYPES---------------------------------------------------------------------------- - -/*! \fn int pmip_tunnel_get_timer_index(struct in6_addr *remoteP) -* \brief Return the index pointing the tunnel_timer_t struct in g_tunnel_timer_table which have the corresponding *remoteP struct in6_addr. -* \param[in] remoteP Remote tunnel address. -* \return index found, else return the first free area in g_tunnel_timer_table. -*/ -protected_pmip_tunnel(int pmip_tunnel_get_timer_index(struct in6_addr *remoteP);) -/*! \fn void pmip_tunnels_init(void) -* \brief Initialize PMIP tunnels, and PMIP tunnels timers. -* \return Zero if success, else other values. -*/ -protected_pmip_tunnel(int pmip_tunnels_init(void);) -/*! \fn int pmip_tunnel_set_timer(struct in6_addr *remoteP, struct timespec time_outP) -* \brief Set a timer for deleting the tunnel associated with link. -* \param[in] remoteP Remote tunnel address. -* \param[in] tunnelP Tunnel id. -* \param[in] time_outP time-out init value for the timer. -* \return Zero if success, else other values. -*/ -protected_pmip_tunnel(int pmip_tunnel_set_timer(struct in6_addr *remoteP, int tunnelP, struct timespec time_outP);) -/*! \fn int pmip_tunnel_add(struct in6_addr *local, struct in6_addr *remote, int link) -* \brief Create an IP6-IP6 tunnel between \a local and \a remote. -* \param[in] local Local tunnel address. -* \param[in] remote Remote tunnel address. -* \param[in] linkP Interface id. -* \return Returns interface index of the newly created tunnel, or negative on error. -*/ -protected_pmip_tunnel(int pmip_tunnel_add(struct in6_addr *local, struct in6_addr *remote, int link);) -/*! \fn int pmip_tunnel_del(int ifindex) -* \brief Deletes a tunnel identified by ifindex. -* \param[in] tunnelP Tunnel id -* \return Returns negative if tunnel does not exist, otherwise zero. -*/ -protected_pmip_tunnel(int pmip_tunnel_del(int tunnelP);) -#endif -/** @}*/ diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/src/pmip/pmip_types.h b/openair3/PMIPv6/pmipv6-daemon-umip/src/pmip/pmip_types.h deleted file mode 100755 index a07e718831..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/src/pmip/pmip_types.h +++ /dev/null @@ -1,219 +0,0 @@ -/* - * This file is part of the PMIP, Proxy Mobile IPv6 for Linux. - * - * Authors: OPENAIR3 - * - * Copyright 2010-2011 EURECOM (Sophia-Antipolis, FRANCE) - * - * Proxy Mobile IPv6 (or PMIPv6, or PMIP) is a network-based mobility - * management protocol standardized by IETF. It is a protocol for building - * a common and access technology independent of mobile core networks, - * accommodating various access technologies such as WiMAX, 3GPP, 3GPP2 - * and WLAN based access architectures. Proxy Mobile IPv6 is the only - * network-based mobility management protocol standardized by IETF. - * - * PMIP Proxy Mobile IPv6 for Linux has been built above MIPL free software; - * which it involves that it is under the same terms of GNU General Public - * License version 2. See MIPL terms condition if you need more details. - */ -/*! \file pmip_types.h -* \brief Describe all types for pmip -* \author OpenAir3 Group -* \date 12th of October 2010 -* \version 1.0 -* \company Eurecom -* \project OpenAirInterface -* \email: openair_tech@eurecom.fr -*/ - -/** @defgroup PACKETS TYPES - * @ingroup PMIP6D - * PMIP Types - * @{ - */ - -#ifndef __PMIP_TYPES_H__ -# define __PMIP_TYPES_H__ -//--------------------------------------------------------------------------------------------------------------------- -# include -# include -//--------------------------------------------------------------------------------------------------------------------- -# include "mh.h" -//--------------------------------------------------------------------------------------------------------------------- - -/* -* Mobility Option TLV data structure -*New options defined for Proxy BU & BA -*/ -/*! \struct ip6_mh_opt_home_net_prefix_t -* \brief Mobility Option TLV data structure: Home Network Prefix Option. -*/ -struct ip6_mh_opt_home_net_prefix_t { /*Home netowork prefix option */ - __u8 ip6hnp_type; /*!< \brief Type is "Home Network Prefix Option" value.*/ - __u8 ip6hnp_len; /*!< \brief 8-bit unsigned integer indicating the length of the option in octets, excluding the type and length fields. This field MUST be set to 18.*/ - __u8 ip6hnp_reserved; /*!< \brief This 8-bit field is unused for now. The value MUST be initialized to 0 by the sender and MUST be ignored by the receiver.*/ - __u8 ip6hnp_prefix_len; /*!< \brief 8-bit unsigned integer indicating the prefix length of the IPv6 prefix contained in the option.*/ - struct in6_addr ip6hnp_prefix; /*!< \brief A sixteen-byte field containing the mobile node's IPv6 Home Network Prefix.*/ -} __attribute__ ((__packed__)); - -typedef struct ip6_mh_opt_home_net_prefix_t ip6_mh_opt_home_net_prefix_t; - - -/*! \struct ip6mnid_t -* \brief Contain a mobile node identifier. -*/ -typedef struct { - __u32 first; - __u32 second; -} ip6mnid_t; - - -/*! \struct ip6ts_t -* \brief Timestamp structure. -*/ -typedef struct { - __u32 first; - __u32 second; -} ip6ts_t; - - -/*! \struct ip6_mh_opt_mobile_node_identifier_t -* \brief Mobility Option TLV data structure: Mobile Node Identifier Option (RFC4283). -*/ -struct ip6_mh_opt_mobile_node_identifier_t { - __u8 ip6mnid_type; /*!< \brief MN-ID-OPTION-TYPE has been assigned value 8 by the IANA. It is an 8-bit identifier of the type mobility option.*/ - __u8 ip6mnid_len; /*!< \brief 8-bit unsigned integer, representing the length in octets of the Subtype and Identifier fields.*/ - __u8 ip6mnid_subtype;/*!< \brief Mobile interface identifier subtype .*/ - ip6mnid_t ip6mnid_id; /*!< \brief Mobile interface identifier (NOT RFC4283).*/ -} __attribute__ ((__packed__)); -typedef struct ip6_mh_opt_mobile_node_identifier_t ip6_mh_opt_mobile_node_identifier_t; - - - -/*! \struct ip6_mh_opt_mobile_node_link_layer_identifier_t -* \brief Mobility Option TLV data structure: Mobile Node Link-Layer Identifier Option (RFC5213). -*/ -struct ip6_mh_opt_mobile_node_link_layer_identifier_t { - __u8 ip6mnllid_type; /*!< \brief MN-ID-OPTION-TYPE has been assigned value 8 by the IANA. It is an 8-bit identifier of the type mobility option.*/ - __u8 ip6mnllid_len; /*!< \brief 8-bit unsigned integer, representing the length in octets of the Subtype and Identifier fields.*/ - __u16 ip6mnllid_reserved; /*!< \brief 16 bits reserved.*/ - ip6mnid_t ip6mnllid_lli; /*!< \brief Mobile node link-layer identifier.*/ -} __attribute__ ((__packed__)); -typedef struct ip6_mh_opt_mobile_node_link_layer_identifier_t ip6_mh_opt_mobile_node_link_layer_identifier_t; - - -/*! \struct ip6_mh_opt_time_stamp_t -* \brief Mobility Option TLV data structure: Timestamp Option (RFC5213). -*/ -struct ip6_mh_opt_time_stamp_t { - __u8 ip6mots_type; /*!< \brief Option type, value is 27.*/ - __u8 ip6mots_len; /*!< \brief 8-bit unsigned integer indicating the length in octets of the option, excluding the type and length fields. The value for this field MUST be set to 8.*/ - ip6ts_t - time_stamp; /*!< \brief A 64-bit unsigned integer field containing a timestamp. The value indicates the number of seconds since January 1, 1970, 00:00 UTC, by using a fixed point format. In this format, the integer number of seconds is contained in the first 48 bits of the field, and the remaining 16 bits indicate the number of 1/65536 fractions of a second.*/ -} __attribute__ ((__packed__)); -typedef struct ip6_mh_opt_time_stamp_t ip6_mh_opt_time_stamp_t; - - -/*! \struct ip6_mh_link_local_add_t -* \brief Mobility Option TLV data structure: Link-local Address Option (RFC5213). -*/ -struct ip6_mh_opt_link_local_address_t { - __u8 ip6link_type; /*!< \brief Option type, value is 26.*/ - __u8 ip6link_len; /*!< \brief 8-bit unsigned integer indicating the length of the option in octets, excluding the type and length fields. This field MUST be set to 16.*/ - struct in6_addr ip6link_addr; /*!< \brief A sixteen-byte field containing the link-local address.*/ -} __attribute__ ((__packed__)); -typedef struct ip6_mh_opt_link_local_address_t ip6_mh_opt_link_local_address_t; - -/*! \struct ip6_mh_handoff_indicator_t -* \brief Mobility Option TLV data structure: Handoff Indicator Option (RFC5213). -*/ -struct ip6_mh_opt_handoff_indicator_t { - __u8 ip6hi_type; /*!< \brief Option type, value is 23.*/ - __u8 ip6hi_len; /*!< \brief 8-bit unsigned integer indicating the length of the option in octets, excluding the type and length fields. This field MUST be set to 2.*/ - __u8 ip6hi_reserved; /*!< \brief Field unused for now (RFC5213), must be set to 0.*/ - __u8 ip6hi_hi; /*!< \brief A 8-bit field containing the handoff indicator.*/ -} __attribute__ ((__packed__)); -typedef struct ip6_mh_opt_handoff_indicator_t ip6_mh_opt_handoff_indicator_t; - -/*! \struct ip6_mh_handoff_indicator_t -* \brief Mobility Option TLV data structure: Handoff Indicator Option (RFC5213). -*/ -struct ip6_mh_opt_access_technology_type_t { - __u8 ip6att_type; /*!< \brief Option type, value is 23.*/ - __u8 ip6att_len; /*!< \brief 8-bit unsigned integer indicating the length of the option in octets, excluding the type and length fields. This field MUST be set to 2.*/ - __u8 ip6att_reserved; /*!< \brief Field unused for now (RFC5213), must be set to 0.*/ - __u8 ip6att_att; /*!< \brief A 8-bit field containing the access technology type.*/ -} __attribute__ ((__packed__)); -typedef struct ip6_mh_opt_access_technology_type_t ip6_mh_opt_access_technology_type_t; - - -// ******** Extended options for cluster based architecture & Route optimiztion *********** -struct ip6_mh_opt_dst_mn_addr_t { - __u8 ip6dma_type; - __u8 ip6dma_len; - struct in6_addr dst_mn_addr; /* Destination MN Address */ -} __attribute__ ((__packed__)); -typedef struct ip6_mh_opt_dst_mn_addr_t ip6_mh_opt_dst_mn_addr_t; - - -struct ip6_mh_opt_serv_mag_addr_t { - __u8 ip6sma_type; - __u8 ip6sma_len; - struct in6_addr serv_mag_addr; /* Serving MAG Address of the destination */ -} __attribute__ ((__packed__)); -typedef struct ip6_mh_opt_serv_mag_addr_t ip6_mh_opt_serv_mag_addr_t; - - -struct ip6_mh_opt_serv_lma_addr_t { - __u8 ip6sla_type; - __u8 ip6sla_len; - struct in6_addr serv_lma_addr; /* Serving LMA Address of the destination */ -} __attribute__ ((__packed__)); -typedef struct ip6_mh_opt_serv_lma_addr_t ip6_mh_opt_serv_lma_addr_t; - - -struct ip6_mh_opt_src_mn_addr { - __u8 ip6sma_type; - __u8 ip6sma_len; - struct in6_addr src_mn_addr; /* Source MN Address */ -} __attribute__ ((__packed__)); -typedef struct ip6_mh_opt_src_mn_addr_t ip6_mh_opt_src_mn_addr_t; - - -struct ip6_mh_opt_src_mag_addr_t { - __u8 ip6sma_type; - __u8 ip6sma_len; - struct in6_addr src_mag_addr; /* Source MAG Address */ -} __attribute__ ((__packed__)); -typedef struct ip6_mh_opt_src_mag_addr_t ip6_mh_opt_src_mag_addr_t; - -/*! \struct msg_info_t -* \brief Meta structure that can store all usefull information of any PMIP message. -*/ -typedef struct msg_info_t { - struct in6_addr src; /*!< \brief Source address of the message.*/ - struct in6_addr dst; /*!< \brief Destination address of the message.*/ - struct in6_addr_bundle addrs; /*!< \brief Tuple composed of src and dst address.*/ - int iif; /*!< \brief Interface identifier.*/ - uint32_t msg_event; /*!< \brief Type of event received: hasDEREG hasWLCCP hasRS hasNA hasNS hasPBU hasPBA hasPBREQ hasPBRES */ - struct in6_addr mn_iid; /*!< \brief Mobile node IID.*/ - struct in6_addr mn_addr; /*!< \brief Full mobile node address */ - struct in6_addr mn_prefix; /*!< \brief Network Address Prefix for MN */ - struct in6_addr mn_serv_mag_addr; /*!< \brief Serving MAG Address */ - struct in6_addr mn_serv_lma_addr; /*!< \brief Serving LMA Address */ - struct in6_addr mn_link_local_addr; /*!< \brief Link Local Address for mobile node */ - struct timespec addtime; /*!< \brief When was the binding added or modified */ - struct timespec lifetime; /*!< \brief Lifetime sent in this BU, in seconds */ - uint16_t seqno; /*!< \brief Sequence number of the message */ - uint16_t PBU_flags; /*!< \brief PBU flags */ - uint8_t PBA_flags; /*!< \brief PBA flags */ - ip6ts_t timestamp; /*!< \brief Timestamp */ - struct in6_addr src_mag_addr; /*!< \brief Route optimization or flow control: Source MAG Address */ - struct in6_addr src_mn_addr; /*!< \brief Route optimization or flow control: Source MN Address */ - struct in6_addr na_target; /*!< \brief Route optimization or flow control: Neighbour advertisement target*/ - struct in6_addr ns_target; /*!< \brief Route optimization or flow control: Neighbour solicitation target*/ - int is_dad; /*!< \brief Route optimization or flow control: is NS used for DAD process?*/ - int hoplimit; /*!< \brief Route optimization or flow control: Hop limit*/ -} msg_info_t; -#endif -/*@}*/ diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/src/policy.c b/openair3/PMIPv6/pmipv6-daemon-umip/src/policy.c deleted file mode 100755 index e88f608693..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/src/policy.c +++ /dev/null @@ -1,378 +0,0 @@ -/* - * $Id: policy.c 1.100 06/05/07 21:52:43+03:00 anttit@tcs.hut.fi $ - * - * This file is part of the MIPL Mobile IPv6 for Linux. - * - * Authors: Ville Nuorvala , - * Henrik Petander - * - * - * Copyright 2003-2005 Go-Core Project - * Copyright 2003-2006 Helsinki University of Technology - * - * MIPL Mobile IPv6 for Linux is free software; you can redistribute - * it and/or modify it under the terms of the GNU General Public - * License as published by the Free Software Foundation; version 2 of - * the License. - * - * MIPL Mobile IPv6 for Linux is distributed in the hope that it will - * be useful, but WITHOUT ANY WARRANTY; without even the implied - * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with MIPL Mobile IPv6 for Linux; if not, write to the Free - * Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - * 02111-1307 USA. - */ - -#ifdef HAVE_CONFIG_H -#include -#endif -#include -#include -#include - -#include "debug.h" -#include "mh.h" -#include "mn.h" -#include "movement.h" -#include "util.h" -#include "conf.h" -#include "policy.h" -#include "hash.h" - -#define POLICY_ACL_HASHSIZE 32 - -pthread_rwlock_t policy_lock; -struct hash policy_bind_acl_hash; -int def_bind_policy = IP6_MH_BAS_PROHIBIT; - -/** - * default_best_iface - select best interface during handoff - * @hoa: MN's home address - * @ha: HA's address - * @pref_interface: preferred interface - * - * Return interface index of preferred interface. - **/ -int default_best_iface(__attribute__ ((unused)) const struct in6_addr *hoa, - __attribute__ ((unused)) const struct in6_addr *ha, - __attribute__ ((unused)) int pref_iface) -{ - return 0; -} - -/** - * default_best_coa - select best CoA duning handoff - * @hoa: MN's home address - * @ha: HA's address - * @iif: required interface - * @pref_coa: preferred CoA - * @coa: suggested CoA - * - * Return iif if a CoA is available and store the address in @coa - **/ -int default_best_coa(__attribute__ ((unused)) const struct in6_addr *hoa, - __attribute__ ((unused)) const struct in6_addr *ha, - __attribute__ ((unused)) int iif, - __attribute__ ((unused)) const struct in6_addr *pref_coa, - __attribute__ ((unused)) struct in6_addr *coa) -{ - return 0; -} - -/** - * default_max_binding_life - binding lifetime policy - * @remote_hoa: remote MN's home address - * @remote_coa: remote MN's care-of address - * @local_addr: local address - * @bu: Binding Update message - * @suggested: suggested lifetime - * @lifetime: granted lifetime - * - * Stores configurable maximum lifetime for a binding in @lifetime. - * Returns 1 if successful, otherwise 0. - **/ -int default_max_binding_life(__attribute__ ((unused)) const struct in6_addr *remote_hoa, - __attribute__ ((unused)) const struct in6_addr *remote_coa, - __attribute__ ((unused)) const struct in6_addr *local_addr, - const struct ip6_mh_binding_update *bu, - __attribute__ ((unused)) ssize_t len, - __attribute__ ((unused)) const struct timespec *suggested, - struct timespec *lifetime) -{ - if (bu->ip6mhbu_flags & IP6_MH_BU_HOME) { - tssetsec(*lifetime, conf.HaMaxBindingLife); - return 1; - } - - return 0; -} - -static inline int -policy_check_mob_net_prefix(const struct policy_bind_acl_entry *acl, - const struct ip6_mh_binding_update *bu, - const struct mh_options *opts) -{ - struct ip6_mh_opt_mob_net_prefix *op; - - for (op = mh_opt(&bu->ip6mhbu_hdr, opts, IP6_MHOPT_MOB_NET_PRFX); - op != NULL; - op = mh_opt_next(&bu->ip6mhbu_hdr, opts, op)) { - if (!prefix_list_get(&acl->mob_net_prefixes, - &op->ip6mnp_prefix, - op->ip6mnp_prefix_len)) - return IP6_MH_BAS_NOT_AUTH_FOR_PRFX; - } - - return IP6_MH_BAS_ACCEPTED; -} - -/** - * default_discard_binding - check for discard policy - * @remote_hoa: remote MN's home address - * @remote_coa: remote MN's care-of address - * @local_addr: local address - * @bu: binding update - * - * Checks if there is a policy to discard this BU. Valid return - * values are %IP6_MH_BAS_ACCEPTED, %IP6_MH_BAS_UNSPECIFIED, and - * %IP6_MH_BAS_PROHIBIT. - **/ -int default_discard_binding(const struct in6_addr *remote_hoa, - __attribute__ ((unused)) const struct in6_addr *remote_coa, - __attribute__ ((unused)) const struct in6_addr *local_addr, - const struct ip6_mh_binding_update *bu, - ssize_t len) -{ - int ret = def_bind_policy; - struct policy_bind_acl_entry *acl; - - if (bu->ip6mhbu_flags & IP6_MH_BU_MR && !conf.HaAcceptMobRtr) - return IP6_MH_BAS_MR_OP_NOT_PERMITTED; - - pthread_rwlock_rdlock(&policy_lock); - acl = hash_get(&policy_bind_acl_hash, NULL, remote_hoa); - - if (acl != NULL) { - ret = acl->bind_policy; - - if (ret < IP6_MH_BAS_UNSPECIFIED && - bu->ip6mhbu_flags & IP6_MH_BU_MR) { - struct mh_options opts; - mh_opt_parse(&bu->ip6mhbu_hdr, len, - sizeof(*bu), &opts); - ret = policy_check_mob_net_prefix(acl, bu, &opts); - } - } - - pthread_rwlock_unlock(&policy_lock); - return ret; -} - -/** - * policy_use_bravd - use Binding refresh advice - * @remote_hoa: remote MN's home address - * @remote_coa: remote MN's care-of address - * @local_addr: local address - * @lft: lifetime of binding - * @refersh: used for storing refresh interval returned by policy - * - * Checks if a Binding Refresh Advice should be inserted in a Binding - * Ack. Returns 0 if BRA should not be used. Stores proposed refresh - * advice in @refresh, - **/ -int default_use_bradv(__attribute__ ((unused)) const struct in6_addr *remote_hoa, - __attribute__ ((unused)) const struct in6_addr *remote_coa, - __attribute__ ((unused)) const struct in6_addr *local_addr, - __attribute__ ((unused)) const struct timespec *lft, - __attribute__ ((unused)) struct timespec *refresh) -{ - return 0; -} - -/** - * default_use_keymgm - use K-bit - * @remote_addr: address of remote node - * @local_addr: address of local node - * - * Determine whether to use the Key Management Mobility Capability bit - * for giver addresses. - **/ -int default_use_keymgm(__attribute__ ((unused)) const struct in6_addr *remote_addr, - __attribute__ ((unused)) const struct in6_addr *local_addr) -{ - return conf.KeyMngMobCapability; -} - -/** - * policy_accept_inet6_iface - use interface for MIPv6 - * @iif: interface index - * - * Determine whether to allow movement events from interface @ifindex or not. - * Return 0, if unacceptable, otherwise a positive preference value, - * 1 being the most preferrable. - **/ -int default_accept_inet6_iface(int iif) -{ - struct list_head *list; - list_for_each(list, &conf.net_ifaces) { - struct net_iface *nif; - nif = list_entry(list, struct net_iface, list); - - if (nif->ifindex == iif) { - if (is_if_mn(nif)) - return nif->mn_if_preference; - - return 0; - } - } - return conf.MnUseAllInterfaces; -} - - -/** - * default_accept_ra - check if RA is acceptable - * @iif: the incoming interface index - * @saddr: the source of the RA - * @daddr: the destination of the RA - * @ra: the RA message - * - * Determine whether to accept RA or not - **/ - -int default_accept_ra(__attribute__ ((unused)) int iif, - __attribute__ ((unused)) const struct in6_addr *saddr, - __attribute__ ((unused)) const struct in6_addr *daddr, - __attribute__ ((unused)) const struct nd_router_advert *ra) -{ - return 1; -} - -/** - * default_best_ro_coa - get a suitable care-of address for RO - * @hoa: own home address - * @cn: CN address - * @coa: care-of address - * - * Returns ifindex of the CoA, or <= 0 if no CoA is available, - **/ -int default_best_ro_coa(__attribute__ ((unused)) const struct in6_addr *hoa, - __attribute__ ((unused)) const struct in6_addr *cn, - __attribute__ ((unused)) struct in6_addr *coa) -{ - return 0; -} - -int default_get_mnp_count(const struct in6_addr *hoa) -{ - int ret = 0; - struct policy_bind_acl_entry *acl; - pthread_rwlock_rdlock(&policy_lock); - acl = hash_get(&policy_bind_acl_hash, NULL, hoa); - - if (acl != NULL) - ret = acl->mnp_count; - - pthread_rwlock_unlock(&policy_lock); - return ret; - -} - -int default_get_mnps(const struct in6_addr *hoa, - const int mnp_count, - struct nd_opt_prefix_info *mnps) -{ - int i = 0; - struct policy_bind_acl_entry *acl; - - pthread_rwlock_rdlock(&policy_lock); - acl = hash_get(&policy_bind_acl_hash, NULL, hoa); - - if (acl != NULL) { - struct list_head *l; - list_for_each(l, &acl->mob_net_prefixes) { - struct prefix_list_entry *e; - - if (i >= mnp_count) - break; - - e = list_entry(l, struct prefix_list_entry, list); - mnps[i++] = e->pinfo; - } - } - - pthread_rwlock_unlock(&policy_lock); - return i; -} - -static int policy_bind_acle_cleanup(void *data, - __attribute__ ((unused)) void *arg) -{ - struct policy_bind_acl_entry *acl = data; - free(acl); - return 0; -} - -static void policy_bind_acl_cleanup(void) -{ - def_bind_policy = IP6_MH_BAS_PROHIBIT; - hash_iterate(&policy_bind_acl_hash, policy_bind_acle_cleanup, NULL); - hash_cleanup(&policy_bind_acl_hash); -} - -void policy_cleanup(void) -{ - pthread_rwlock_wrlock(&policy_lock); - policy_bind_acl_cleanup(); - pthread_rwlock_unlock(&policy_lock); -} - -static int policy_bind_acl_add(struct policy_bind_acl_entry *acl) -{ - int err; - err = hash_add(&policy_bind_acl_hash, acl, NULL, &acl->hoa); - - if (!err) { - list_del(&acl->list); - } - - return err; -} - -static int policy_bind_acl_config(void) -{ - struct list_head *list, *n; - int err; - - pthread_rwlock_wrlock(&policy_lock); - - if ((err = hash_init(&policy_bind_acl_hash, SINGLE_ADDR, - POLICY_ACL_HASHSIZE)) < 0) - goto out; - - def_bind_policy = conf.DefaultBindingAclPolicy; - - list_for_each_safe(list, n, &conf.bind_acl) { - struct policy_bind_acl_entry *acl; - acl = list_entry(list, struct policy_bind_acl_entry, list); - - if ((err = policy_bind_acl_add(acl)) < 0) { - policy_bind_acl_cleanup(); - break; - } - } -out: - pthread_rwlock_unlock(&policy_lock); - return err; -} - -int policy_init(void) -{ - if (pthread_rwlock_init(&policy_lock, NULL)) - return -1; - - return policy_bind_acl_config(); -} - diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/src/policy.h b/openair3/PMIPv6/pmipv6-daemon-umip/src/policy.h deleted file mode 100755 index e961a2a222..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/src/policy.h +++ /dev/null @@ -1,164 +0,0 @@ -/* $Id: policy.h 1.57 06/05/07 21:52:43+03:00 anttit@tcs.hut.fi $ */ - -#ifndef __POLICY_H__ -#define __POLICY_H__ 1 - -#include -#include "list.h" - -#define POL_MN_IF_MIN_PREFERENCE 10 -#define POL_MN_IF_DEF_PREFERENCE POL_MN_IF_MIN_PREFERENCE - -struct ip6_mh_binding_update; -struct nd_router_advert; -struct nd_opt_prefix_info; - -struct policy_bind_acl_entry { - struct list_head list; - struct in6_addr hoa; - int plen; - int bind_policy; - int mnp_count; - struct list_head mob_net_prefixes; -}; - -/** - * default_best_iface - select best interface during handoff - * @hoa: MN's home address - * @ha: HA's address - * @pref_interface: preferred interface - * - * Return interface index of preferred interface. - **/ -int default_best_iface(const struct in6_addr *hoa, - const struct in6_addr *ha, - int pref_iface); - -/** - * default_best_coa - select best CoA duning handoff - * @hoa: MN's home address - * @ha: HA's address - * @iif: required interface - * @pref_coa: preferred CoA - * @coa: suggested CoA - * - * Return iif if a CoA is available and store the address in @coa - **/ -int default_best_coa(const struct in6_addr *hoa, - const struct in6_addr *ha, int iif, - const struct in6_addr *pref_coa, - struct in6_addr *coa); - -/** - * default_max_binding_life - binding lifetime policy - * @remote_hoa: remote MN's home address - * @remote_coa: remote MN's care-of address - * @local_addr: local address - * @bu: Binding Update message - * @suggested: suggested lifetime - * @lifetime: granted lifetime - * - * Stores configurable maximum lifetime for a binding in @lifetime. - * Returns 1 if successful, otherwise 0. - **/ -int default_max_binding_life(const struct in6_addr *remote_hoa, - const struct in6_addr *remote_coa, - const struct in6_addr *local_addr, - const struct ip6_mh_binding_update *bu, - ssize_t len, - const struct timespec *suggested, - struct timespec *lifetime); - -/** - * default_discard_binding - check for discard policy - * @remote_hoa: remote MN's home address - * @remote_coa: remote MN's care-of address - * @local_addr: local address - * @bu: binding update - * - * Checks if there is a policy to discard this BU. Valid return - * values are %IP6_MH_BAS_ACCEPTED, %IP6_MH_BAS_UNSPECIFIED, and - * %IP6_MH_BAS_PROHIBIT. - **/ -int default_discard_binding(const struct in6_addr *remote_hoa, - const struct in6_addr *remote_coa, - const struct in6_addr *local_addr, - const struct ip6_mh_binding_update *bu, - ssize_t len); - -/** - * policy_use_bravd - use Binding refresh advice - * @remote_hoa: remote MN's home address - * @remote_coa: remote MN's care-of address - * @local_addr: local address - * @lft: lifetime of binding - * @refersh: used for storing refresh interval returned by policy - * - * Checks if a Binding Refresh Advice should be inserted in a Binding - * Ack. Returns 0 if BRA should not be used. Stores proposed refresh - * advice in @refresh, - **/ -int default_use_bradv(const struct in6_addr *remote_hoa, - const struct in6_addr *remote_coa, - const struct in6_addr *local_addr, - const struct timespec *lft, - struct timespec *refresh); - -/** - * default_use_keymgm - use K-bit - * @remote_addr: address of remote node - * @local_addr: address of local node - * - * Determine whetherm to use the Key Management Mobility Capability bit - * for giver addresses. - **/ -int default_use_keymgm(const struct in6_addr *remote_addr, - const struct in6_addr *local_addr); - -/** - * policy_accept_inet6_iface - use interface for MIPv6 - * @iif: interface index - * - * Determine whether to allow movement events from interface @ifindex or not. - * Return 0, if unacceptable, otherwise a positive preference value, - * 1 being the most preferrable. - **/ -int default_accept_inet6_iface(int iif); - -/** - * default_accept_ra - check if RA is acceptable - * @iif: the incoming interface index - * @saddr: the source of the RA - * @daddr: the destination of the RA - * @ra: the RA message - * - * Determine whether to accept RA or not - **/ -int default_accept_ra(int iif, - const struct in6_addr *saddr, - const struct in6_addr *daddr, - const struct nd_router_advert *ra); - -/** - * default_best_ro_coa - get a suitable care-of address for RO - * @hoa: own home address - * @cn: CN address - * @coa: care-of address - * - * Returns ifindex of the CoA, or <= 0 if no CoA is available, - **/ -int default_best_ro_coa(const struct in6_addr *hoa, - const struct in6_addr *cn, - struct in6_addr *coa); - -int default_get_mnp_count(const struct in6_addr *hoa); - -int default_get_mnps(const struct in6_addr *hoa, - const int mnp_count, - struct nd_opt_prefix_info *mnps); - -void policy_cleanup(void); - -int policy_init(void); - -#endif diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/src/prefix.c b/openair3/PMIPv6/pmipv6-daemon-umip/src/prefix.c deleted file mode 100755 index 73acd8acf8..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/src/prefix.c +++ /dev/null @@ -1,152 +0,0 @@ -/* - * $Id: prefix.c 1.9 06/05/07 21:52:43+03:00 anttit@tcs.hut.fi $ - * - * This file is part of the MIPL Mobile IPv6 for Linux. - * - * Author: Ville Nuorvala - * - * Copyright 2003-2005 Go-Core Project - * Copyright 2003-2006 Helsinki University of Technology - * - * MIPL Mobile IPv6 for Linux is free software; you can redistribute - * it and/or modify it under the terms of the GNU General Public - * License as published by the Free Software Foundation; version 2 of - * the License. - * - * MIPL Mobile IPv6 for Linux is distributed in the hope that it will - * be useful, but WITHOUT ANY WARRANTY; without even the implied - * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with MIPL Mobile IPv6 for Linux; if not, write to the Free - * Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - * 02111-1307 USA. - */ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include "prefix.h" -#include "util.h" - -struct prefix_list_entry *prefix_list_get(const struct list_head *pl, - const struct in6_addr *addr, - int plen) -{ - struct list_head *l; - struct prefix_list_entry *p1 = NULL; - list_for_each(l, pl) { - struct prefix_list_entry *p2; - p2 = list_entry(l, struct prefix_list_entry, list); - - if (!ipv6_pfx_cmp(&p2->ple_prefix, addr, p2->ple_plen)) { - if (plen > 0) { - if (p2->ple_plen == plen) { - p1 = p2; - break; - } - } else if (p1 == NULL || p1->ple_plen < p2->ple_plen) - /* get the longest matching prefix */ - p1 = p2; - } - } - return p1; -} - -static inline int prefix_list_len(const struct list_head *pl) -{ - struct list_head *l; - int res = 0; - list_for_each(l, pl) - res++; - return res; -} - -int prefix_list_cmp(const struct list_head *pl1, const struct list_head *pl2) -{ - struct list_head *l1, *l2; - - /* If lists lengths differ, no need to go further */ - if (prefix_list_len(pl1) != prefix_list_len(pl2)) - return 0; - - list_for_each(l1, pl1) { - int match = 0; - struct prefix_list_entry *p1; - p1 = list_entry(l1, struct prefix_list_entry, list); - - list_for_each(l2, pl2) { - struct prefix_list_entry *p2; - p2 = list_entry(l2, struct prefix_list_entry, list); - - if (p1->ple_plen != p2->ple_plen || - ipv6_pfx_cmp(&p1->ple_prefix, - &p2->ple_prefix, p1->ple_plen)) - continue; - - match = 1; - break; - } - - if (!match) - return 0; - } - return 1; -} - -int prefix_list_copy(const struct list_head *pl1, struct list_head *pl2) -{ - struct list_head *l; - int res = 0; - list_for_each(l, pl1) { - struct prefix_list_entry *p1, *p2; - p1 = list_entry(l, struct prefix_list_entry, list); - p2 = malloc(sizeof(struct prefix_list_entry)); - - if (p2 == NULL) { - prefix_list_free(pl2); - return -1; - } - - memcpy(p2, p1, sizeof(struct prefix_list_entry)); - list_add_tail(&p2->list, pl2); - res++; - } - return res; -} - -unsigned long mpd_curr_lft(const struct timespec *now, - const struct timespec *tstamp, - unsigned long lft) -{ - struct timespec tmp; - unsigned long diff; - - if (prefix_lft_infinite(lft)) - return lft; - - tssub(*now, *tstamp, tmp); - diff = tmp.tv_sec; - - if (tmp.tv_nsec > 0) - diff++; - - if (lft > diff) - return lft - diff; - - return 0; -} - -static const struct in6_addr dhaad_gen_suffix = { { { 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe } } }; -static const struct in6_addr dhaad_eui64_suffix = { { { 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, 0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0xfe } } }; - -void dhaad_gen_ha_anycast(struct in6_addr *anycast, - const struct in6_addr *pfx, int plen) -{ - ipv6_addr_create(anycast, - pfx, - plen == 64 ? &dhaad_eui64_suffix : &dhaad_gen_suffix, - plen); -} diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/src/prefix.h b/openair3/PMIPv6/pmipv6-daemon-umip/src/prefix.h deleted file mode 100755 index 6949f65fa2..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/src/prefix.h +++ /dev/null @@ -1,136 +0,0 @@ -/* $Id: prefix.h 1.10 06/05/07 21:52:43+03:00 anttit@tcs.hut.fi $ */ - -#ifndef __PREFIX_H__ -#define __PREFIX_H__ 1 - -#include -#include - -#include -#include - -#include "list.h" -#include "mipv6.h" -#include "util.h" - -#define PREFIX_LIFETIME_INFINITE 0xFFFFFFFF - -static inline int prefix_lft_infinite(uint32_t lft) -{ - return lft == PREFIX_LIFETIME_INFINITE; -} - -struct prefix_list_entry { - struct list_head list; - struct timespec timestamp; - struct nd_opt_prefix_info pinfo; -#define ple_plen pinfo.nd_opt_pi_prefix_len -#define ple_flags pinfo.nd_opt_pi_flags_reserved -#define ple_valid_time pinfo.nd_opt_pi_valid_time -#define ple_prefd_time pinfo.nd_opt_pi_preferred_time -#define ple_prefix pinfo.nd_opt_pi_prefix -}; - -static inline void ipv6_addr_prefix(struct in6_addr *pfx, - const struct in6_addr *addr, - int plen) -{ - int o, b; - - if (plen < 0) plen = 0; - else if (plen > 128) plen = 128; - - o = plen >> 3; - b = plen & 0x7; - - memcpy(pfx->s6_addr, addr, o); - - if (b != 0) { - pfx->s6_addr[o] = addr->s6_addr[o] & (0xff00 >> b); - o++; - } - - memset(pfx->s6_addr + o, 0, 16 - o); -} - -static inline void ipv6_addr_create(struct in6_addr *addr, - const struct in6_addr *pfx, - const struct in6_addr *sfx, int plen) -{ - int o, b; - - plen = (plen > 128 || plen < 0) ? 0 : plen; - o = plen >> 3; - b = plen & 0x7; - - memcpy(addr->s6_addr, pfx->s6_addr, o); - - if (b != 0) { - addr->s6_addr[o] = ((pfx->s6_addr[o] & (0xff00 >> b)) | - (sfx->s6_addr[o] & (0x00ff >> b))); - o++; - } - - memcpy(addr->s6_addr + o, sfx->s6_addr + o, 16 - o); -} - -/** - * ipv6_pfx_cmp - Compare two IPv6 prefixes - * @p1: IPv6 address - * @p2: IPv6 address - * @plen: number of bits to compare - * - * Perform prefix comparison bitwise for the @plen first bits. - * Returns zero if the prefixes are the same, otherwise 1. - **/ -static inline int ipv6_pfx_cmp(const struct in6_addr *p1, - const struct in6_addr *p2, - int plen) -{ - int o = plen >> 3, b = plen & 0x7; - int res; - - if ((res = memcmp(p1->s6_addr, p2->s6_addr, o)) != 0 || b == 0) - return res; - - return (p1->s6_addr[o] ^ p2->s6_addr[o]) & (0xff00 >> b); - -} - -static inline void prefix_list_free(struct list_head *pl) -{ - struct list_head *l, *n; - list_for_each_safe(l, n, pl) { - list_del(l); - free(list_entry(l, struct prefix_list_entry, list)); - } -} - -struct prefix_list_entry * -prefix_list_get(const struct list_head *, const struct in6_addr *, int); -int prefix_list_cmp(const struct list_head *, const struct list_head *); -int prefix_list_copy(const struct list_head *, struct list_head *); - -static inline int prefix_list_find(const struct list_head *pl, - const struct in6_addr *addr, int plen) -{ - return prefix_list_get(pl, addr, plen) != NULL; -} - -unsigned long mpd_curr_lft(const struct timespec *now, - const struct timespec *tstamp, - unsigned long lft); - -void dhaad_gen_ha_anycast(struct in6_addr *anycast, - const struct in6_addr *pfx, int plen); - -static inline void mpd_sanitize_lft(struct timespec *lft) -{ - /* make sure the lifetime doesn't exceed 0x3fffc (0xffff << 2) - seconds and is given in four second time units */ - lft->tv_sec = (umin(lft->tv_sec, MAX_BINDING_LIFETIME) & - MAX_BINDING_LIFETIME); - lft->tv_nsec = 0; -} - -#endif diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/src/proc_sys.c b/openair3/PMIPv6/pmipv6-daemon-umip/src/proc_sys.c deleted file mode 100755 index f83fb4bb29..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/src/proc_sys.c +++ /dev/null @@ -1,66 +0,0 @@ -/* - * $Id: proc_sys.c 1.9 06/04/25 13:24:14+03:00 anttit@tcs.hut.fi $ - * - * This file is part of the MIPL Mobile IPv6 for Linux. - * - * Author: Ville Nuorvala - * - * Copyright 2003-2005 Go-Core Project - * Copyright 2003-2006 Helsinki University of Technology - * - * MIPL Mobile IPv6 for Linux is free software; you can redistribute - * it and/or modify it under the terms of the GNU General Public - * License as published by the Free Software Foundation; version 2 of - * the License. - * - * MIPL Mobile IPv6 for Linux is distributed in the hope that it will - * be useful, but WITHOUT ANY WARRANTY; without even the implied - * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with MIPL Mobile IPv6 for Linux; if not, write to the Free - * Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - * 02111-1307 USA. - */ - -#include -#include - -#include - -#include "proc_sys.h" - -int set_iface_proc_entry(const char *tmpl, const char *if_name, int val) -{ - FILE *fp; - char path[64+IF_NAMESIZE]; - int ret = -1; - - sprintf(path, tmpl, if_name); - fp = fopen(path, "w"); - - if (!fp) - return ret; - - ret = fprintf(fp, "%d", val); - fclose(fp); - return ret; -} - -int get_iface_proc_entry(const char *tmpl, const char *if_name, int *val) -{ - FILE *fp; - char path[64+IF_NAMESIZE]; - int ret = -1; - - sprintf(path, tmpl, if_name); - fp = fopen(path, "r"); - - if (!fp) - return ret; - - ret = fscanf(fp, "%d", val); - fclose(fp); - return ret; -} diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/src/proc_sys.h b/openair3/PMIPv6/pmipv6-daemon-umip/src/proc_sys.h deleted file mode 100755 index c2f316aa07..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/src/proc_sys.h +++ /dev/null @@ -1,24 +0,0 @@ -/* $Id: proc_sys.h 1.3 06/01/03 19:42:47+02:00 vnuorval@tcs.hut.fi $ */ - -#ifndef __PROC_SYS_H__ -#define __PROC_SYS_H__ 1 - -#define PROC_SYS_IP6_AUTOCONF "/proc/sys/net/ipv6/conf/%s/autoconf" -#define PROC_SYS_IP6_ACCEPT_RA "/proc/sys/net/ipv6/conf/%s/accept_ra" -#define PROC_SYS_IP6_ACCEPT_RA_DEFRTR "/proc/sys/net/ipv6/conf/%s/accept_ra_defrtr" -#define PROC_SYS_IP6_ACCEPT_RA_PINFO "/proc/sys/net/ipv6/conf/%s/accept_ra_pinfo" -#define PROC_SYS_IP6_RTR_SOLICITS "/proc/sys/net/ipv6/conf/%s/router_solicitations" -#define PROC_SYS_IP6_RTR_SOLICIT_INTERVAL "/proc/sys/net/ipv6/conf/%s/router_solicitation_interval" -#define PROC_SYS_IP6_LINKMTU "/proc/sys/net/ipv6/conf/%s/mtu" -#define PROC_SYS_IP6_CURHLIM "/proc/sys/net/ipv6/conf/%s/hop_limit" -#define PROC_SYS_IP6_APP_SOLICIT "/proc/sys/net/ipv6/neigh/%s/app_solicit" -#define PROC_SYS_IP6_BASEREACHTIME_MS "/proc/sys/net/ipv6/neigh/%s/base_reachable_time_ms" -#define PROC_SYS_IP6_RETRANSTIMER_MS "/proc/sys/net/ipv6/neigh/%s/retrans_time_ms" -#define PROC_SYS_IP6_FORWARDING "/proc/sys/net/ipv6/conf/%s/forwarding" -#define PROC_SYS_IP6_PROXY_NDP "/proc/sys/net/ipv6/conf/%s/proxy_ndp" - -int set_iface_proc_entry(const char *tmpl, const char *if_name, int val); - -int get_iface_proc_entry(const char *tmpl, const char *if_name, int *val); - -#endif diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/src/retrout.c b/openair3/PMIPv6/pmipv6-daemon-umip/src/retrout.c deleted file mode 100755 index 0e908c3658..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/src/retrout.c +++ /dev/null @@ -1,895 +0,0 @@ -/* - * $Id: retrout.c 1.141 06/05/07 21:52:43+03:00 anttit@tcs.hut.fi $ - * - * This file is part of the MIPL Mobile IPv6 for Linux. - * - * Authors: - * Henrik Petander - * Antti Tuominen - * Ville Nuorvala - * - * Copyright 2003-2005 Go-Core Project - * Copyright 2003-2006 Helsinki University of Technology - * - * MIPL Mobile IPv6 for Linux is free software; you can redistribute - * it and/or modify it under the terms of the GNU General Public - * License as published by the Free Software Foundation; version 2 of - * the License. - * - * MIPL Mobile IPv6 for Linux is distributed in the hope that it will - * be useful, but WITHOUT ANY WARRANTY; without even the implied - * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with MIPL Mobile IPv6 for Linux; if not, write to the Free - * Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - * 02111-1307 USA. - */ - -#ifdef HAVE_CONFIG_H -#include -#endif -#include -#include -#include -#include -#ifdef HAVE_LIBCRYPTO -#include -#else -#include "crypto.h" -#endif - -#include "debug.h" -#include "mipv6.h" -#include "util.h" -#include "bul.h" -#include "mh.h" -#include "xfrm.h" -#include "mn.h" -#include "keygen.h" -#include "retrout.h" -#include "conf.h" -#include "statistics.h" - -#define RR_DEBUG_LEVEL 1 - -#if RR_DEBUG_LEVEL >= 1 -#define RRDBG dbg -#else -#define RRDBG(...) -#endif /* RRDBG */ - -struct rrlentry { - struct tq_elem tqe; /* Timer queue entry */ - struct in6_addr peer; /* CN address */ - struct in6_addr own1; - struct in6_addr own2; - int iif; - - struct timespec lastsent; - struct timespec expires; - struct timespec delay; /* call back time */ - - int resend_count; /* Number of consecutive [HC]oTI's sent */ - - void (*callback)(struct tq_elem *); - - uint8_t type; /* HOT entry / COT entry */ - uint8_t wait; - uint16_t index; - uint8_t cookie[8]; - uint8_t kgen_token[8]; - - struct list_head home_addrs; /* List of HoAs for CoT entry */ -}; - -enum { - COT_ENTRY, - HOT_ENTRY -}; - -struct hash rrl_hash; - -const struct timespec mn_test_init_delay_ts = { MN_TEST_INIT_DELAY, 0 }; -#define MN_TEST_INIT_DELAY_TS mn_test_init_delay_ts - -static void ti_resend(struct tq_elem *tqe); - -static int rrl_init(void) -{ - return hash_init(&rrl_hash, DOUBLE_ADDR, 32); -} - -static int rre_co_add_hoa(struct rrlentry *cote, struct in6_addr *addr) -{ - struct list_head *list; - struct addr_holder *addr_c; - - list_for_each(list, &cote->home_addrs) { - addr_c = list_entry(list, struct addr_holder, list); - - if (IN6_ARE_ADDR_EQUAL(addr, &addr_c->addr)) - return 1; - } - addr_c = malloc(sizeof(*addr_c)); - - if (!addr_c) - return -1; - - addr_c->addr = *addr; - list_add(&addr_c->list, &cote->home_addrs); - - return 0; -} -static void rrl_delete(struct rrlentry *rre); - -static struct rrlentry *rre_create(int type, struct in6_addr *own1, int iif, - struct in6_addr *peer, - struct in6_addr *own2) -{ - struct rrlentry *rre; - - dbg("%x:%x:%x:%x:%x:%x:%x:%x\n", NIP6ADDR(own1)); - dbg("%x:%x:%x:%x:%x:%x:%x:%x\n", NIP6ADDR(peer)); - - rre = malloc(sizeof(*rre)); - - if (!rre) { - RRDBG("Malloc failed\n"); - return NULL; - } - - memset(rre, 0, sizeof(*rre)); - INIT_LIST_HEAD(&rre->tqe.list); - INIT_LIST_HEAD(&rre->home_addrs); - - if (type == COT_ENTRY) { - if (rre_co_add_hoa(rre, own2) < 0) { - free(rre); - return NULL; - } - } - - rre->type = type; - rre->own1 = *own1; - rre->peer = *peer; - rre->own2 = *own2; - rre->iif = iif; - - if (hash_add(&rrl_hash, rre, &rre->own1, &rre->peer) < 0) { - rrl_delete(rre); - return NULL; - } - - return rre; -} - -static struct rrlentry *rrl_get(int type, const struct in6_addr *our_addr, - const struct in6_addr *peer_addr) -{ - struct rrlentry *rre; - - dbg("%x:%x:%x:%x:%x:%x:%x:%x\n", NIP6ADDR(our_addr)); - dbg("%x:%x:%x:%x:%x:%x:%x:%x\n", NIP6ADDR(peer_addr)); - - assert(our_addr); - - rre = (struct rrlentry *)hash_get(&rrl_hash, our_addr, peer_addr); - - if (rre != NULL && rre->type != type) - return NULL; - - return rre; -} - -static int rrl_iterate(int (* func)(void *, void *), void *arg) -{ - return hash_iterate(&rrl_hash, func, arg); -} - -static void rrl_delete(struct rrlentry *rre) -{ - assert(rre); - - TRACE; - - del_task(&rre->tqe); - hash_delete(&rrl_hash, &rre->own1, &rre->peer); - - if (rre->type == COT_ENTRY) { - struct list_head *list, *n; - - list_for_each_safe(list, n, &rre->home_addrs) { - list_del(list); - free(list_entry(list, struct addr_holder, list)); - } - } - - free(rre); -} - -static void rrl_delete_co_hoa(const struct in6_addr *coa, - const struct in6_addr *peer, - const struct in6_addr *hoa) -{ - struct rrlentry *rre = rrl_get(COT_ENTRY, coa, peer); - - TRACE; - - if (rre != NULL) { - struct list_head *l, *n; - list_for_each_safe(l, n, &rre->home_addrs) { - struct addr_holder *ah; - ah = list_entry(l, struct addr_holder, list); - - if (!IN6_ARE_ADDR_EQUAL(hoa, &ah->addr)) - continue; - - list_del(l); - free(ah); - } - - if (list_empty(&rre->home_addrs)) - rrl_delete(rre); - } -} - -static void rrl_update_timer(struct rrlentry *rre) -{ - struct timespec timer_expire; - - tsadd(rre->delay, rre->lastsent, timer_expire); - add_task_abs(&timer_expire, &rre->tqe, rre->callback); -} - -static int rre_dump(void *entry, void *os) -{ - struct rrlentry *e = (struct rrlentry *)entry; - FILE *out = (FILE *)os; - char buf[IF_NAMESIZE + 1]; - char *dev = if_indextoname(e->iif, buf); - struct timespec ts, ts_now; - - fprintf(out, "== Return Routability Entry (%s) == \n", - e->type == COT_ENTRY ? "COT_ENTRY" : "HOT_ENTRY"); - - fprintf(out, " %s %x:%x:%x:%x:%x:%x:%x:%x\n", - (e->type == COT_ENTRY) ? "CoA" : "HoA", - NIP6ADDR(&e->own1)); - - fprintf(out, " CN %x:%x:%x:%x:%x:%x:%x:%x\n", NIP6ADDR(&e->peer)); - - if (e->type == COT_ENTRY) { - struct list_head *l; - list_for_each(l, &e->home_addrs) { - struct addr_holder *a; - a = list_entry(l, struct addr_holder, list); - fprintf(out, " HoA %x:%x:%x:%x:%x:%x:%x:%x\n", - NIP6ADDR(&a->addr)); - } - } else { - fprintf(out, " CoA %x:%x:%x:%x:%x:%x:%x:%x\n", - NIP6ADDR(&e->own2)); - } - - if (!dev || strlen(dev) == 0) - fprintf(out, " Interface (%d)\n", e->iif); - else - fprintf(out, " Interface %s\n", dev); - - clock_gettime(CLOCK_REALTIME, &ts_now); - - fprintf(out, " resend %d", e->resend_count); - fprintf(out, " delay %ld (after %ld seconds)", e->delay.tv_sec, - e->lastsent.tv_sec + e->delay.tv_sec - ts_now.tv_sec); - - tssub(e->expires, ts_now, ts); - fprintf(out, " expires in %ld seconds\n", ts.tv_sec); - - fflush(out); - - return 0; -} - -void rrl_dump(FILE *os) -{ - rrl_iterate(rre_dump, os); -} - -static inline int cookiecmp(const uint8_t *cookie_a, const uint8_t *cookie_b) -{ - return memcmp(cookie_a, cookie_b, 8); -} - -static void mn_send_hoti(struct in6_addr *hoa, struct in6_addr *peer, - uint8_t *cookie, int oif) -{ - struct iovec iov; - struct ip6_mh_home_test_init *hti; - struct in6_addr_bundle out; - - out.src = hoa; - out.dst = peer; - out.local_coa = NULL; - out.remote_coa = NULL; - - hti = mh_create(&iov, IP6_MH_TYPE_HOTI); - - if (!hti) - return; - -#ifdef HAVE_LIBCRYPTO - RAND_pseudo_bytes((uint8_t *)hti->ip6mhhti_cookie, 8); -#else - random_bytes((uint8_t *)hti->ip6mhhti_cookie, 8); -#endif - cookiecpy(cookie, hti->ip6mhhti_cookie); - - mh_send(&out, &iov, 1, NULL, oif); - free(iov.iov_base); - statistics_inc(&mipl_stat, MIPL_STATISTICS_OUT_HOTI); -} - -static void mn_send_coti(struct in6_addr *coa, struct in6_addr *peer, - uint8_t *cookie, int oif) -{ - struct iovec iov; - struct ip6_mh_careof_test_init *cti; - struct in6_addr_bundle out; - - out.src = coa; - out.dst = peer; - out.local_coa = NULL; - out.remote_coa = NULL; - - cti = mh_create(&iov, IP6_MH_TYPE_COTI); - - if (!cti) - return; - -#ifdef HAVE_LIBCRYPTO - RAND_pseudo_bytes((uint8_t *)cti->ip6mhcti_cookie, 8); -#else - random_bytes((uint8_t *)cti->ip6mhcti_cookie, 8); -#endif - cookiecpy(cookie, cti->ip6mhcti_cookie); - - mh_send(&out, &iov, 1, NULL, oif); - free(iov.iov_base); - statistics_inc(&mipl_stat, MIPL_STATISTICS_OUT_COTI); -} - -/* Resend HoTI or CoTI, if we haven't got HoT or CoT */ -static void ti_resend(struct tq_elem *tqe) -{ - struct rrlentry *rre; - - pthread_rwlock_wrlock(&mn_lock); - - if (task_interrupted()) { - pthread_rwlock_unlock(&mn_lock); - return; - } - - rre = tq_data(tqe, struct rrlentry, tqe); - - clock_gettime(CLOCK_REALTIME, &rre->lastsent); - - if (rre->type == COT_ENTRY) - mn_send_coti(&rre->own1, &rre->peer, rre->cookie, rre->iif); - else - mn_send_hoti(&rre->own1, &rre->peer, rre->cookie, rre->iif); - - /* exponential backoff */ - tsadd(rre->delay, rre->delay, rre->delay); /* 2 * rre->delay */ - rre->delay = tsmin(rre->delay, MAX_BINDACK_TIMEOUT_TS); - rre->resend_count++; - rrl_update_timer(rre); - - pthread_rwlock_unlock(&mn_lock); -} - -static void rre_reset(struct rrlentry *rre, struct timespec *now) -{ - rre->lastsent = *now; - rre->wait = 1; - rre->resend_count = 0; - rre->delay = MN_TEST_INIT_DELAY_TS; - rre->callback = ti_resend; - rre->expires = rre->lastsent; -} - -/* Renew HoTI before home keygen token expires to optimize handoff - * performance, if kernel bule has been recently used - */ -static void mn_rr_homekgt_refresh(struct tq_elem *tqe) -{ - struct rrlentry *rre_ho; - struct timespec now; - long last_used; - - pthread_rwlock_wrlock(&mn_lock); - - if (task_interrupted()) { - pthread_rwlock_unlock(&mn_lock); - return; - } - - rre_ho = tq_data(tqe, struct rrlentry, tqe); - - clock_gettime(CLOCK_REALTIME, &now); - - last_used = mn_bule_xfrm_last_used(&rre_ho->peer, &rre_ho->own1, &now); - - if (last_used >= 0 && last_used < MN_RO_RESTART_THRESHOLD) { - rre_reset(rre_ho, &now); - mn_send_hoti(&rre_ho->own1, &rre_ho->peer, - rre_ho->cookie, rre_ho->iif); - rrl_update_timer(rre_ho); - } else - rrl_delete(rre_ho); - - pthread_rwlock_unlock(&mn_lock); -} - -/* Renew CoTI before home keygen token expires to optimize handoff - * performance, if kernel bule has been recently used - */ -static void mn_rr_careofkgt_refresh(struct tq_elem *tqe) -{ - struct rrlentry *rre_co; - struct timespec now; - struct list_head *l; - int refresh = 0; - pthread_rwlock_wrlock(&mn_lock); - - if (task_interrupted()) { - pthread_rwlock_unlock(&mn_lock); - return; - } - - rre_co = tq_data(tqe, struct rrlentry, tqe); - - clock_gettime(CLOCK_REALTIME, &now); - - list_for_each(l, &rre_co->home_addrs) { - struct addr_holder *ah; - long last_used; - - ah = list_entry(l, struct addr_holder, list); - - last_used = xfrm_last_used(&rre_co->peer, &ah->addr, - IPPROTO_DSTOPTS, &now); - - if (last_used >= 0 && last_used < MN_RO_RESTART_THRESHOLD) { - rre_reset(rre_co, &now); - mn_send_coti(&rre_co->own1, &rre_co->peer, - rre_co->cookie, rre_co->iif); - rrl_update_timer(rre_co); - refresh = 1; - break; - } - } - - if (!refresh) - rrl_delete(rre_co); - - pthread_rwlock_unlock(&mn_lock); -} - -/* Checks if COT/HOT token is valid */ -static inline int mn_rr_token_valid(struct rrlentry *rre, struct timespec *now) -{ - if (!rre->wait && tsbefore(rre->expires, *now)) - return 1; - - return 0; -} - -/** - * mn_rr_cond_start_hot - send HoTI, if it is necessary - * bule: bul entry for RO binding created in start_ro - * uncond: set this to override all freshness checks and send HoTI in any case - */ -static int mn_rr_cond_start_hot(struct bulentry *bule, int uncond) -{ - struct rrlentry *rre; - struct timespec now; - - assert(bule->type == BUL_ENTRY); - - rre = rrl_get(HOT_ENTRY, &bule->hoa, &bule->peer_addr); - - clock_gettime(CLOCK_REALTIME, &now); - - if (rre != NULL) { - rre->own2 = bule->coa; - - if (!uncond && mn_rr_token_valid(rre, &now)) { - RRDBG("Home keygen token valid, no HoTI\n"); - return 0; - } - - if (rre->wait) { - RRDBG("HoTI already sent\n"); - return 2; - } - } else { - rre = rre_create(HOT_ENTRY, &bule->hoa, bule->home->hoa.iif, - &bule->peer_addr, &bule->coa); - - if (rre == NULL) - return 0; - } - - RRDBG("Home keygen token not valid, send HoTI\n"); - rre_reset(rre, &now); - mn_send_hoti(&rre->own1, &rre->peer, rre->cookie, bule->home->hoa.iif); - rrl_update_timer(rre); - return 1; -} - -/** - * mn_rr_cond_start_cot - send CoTI, if necessary - * @bule: RO bul entry - * @coa: Care-of address for CoT - * @ifindex: interface index for CoA - * @uncond: send CoT even if current kgen token is fresh - * - * Function manages sending of CoTI in a handoff and also changes the - * CoA in RO bul entry. - **/ -static int mn_rr_cond_start_cot(struct bulentry *bule, int uncond) -{ - struct rrlentry *rre; - struct timespec now; - - assert(bule->type == BUL_ENTRY); - - rre = rrl_get(COT_ENTRY, &bule->coa, &bule->peer_addr); - - clock_gettime(CLOCK_REALTIME, &now); - - if (rre != NULL) { - if (!uncond && mn_rr_token_valid(rre, &now)) { - RRDBG("Care-of keygen token valid, no CoTI\n"); - return 0; - } - - if (rre->wait) { - RRDBG("CoTI already sent\n"); - return 2; - } - } else { - rre = rre_create(COT_ENTRY, &bule->coa, bule->if_coa, - &bule->peer_addr, &bule->hoa); - - if (rre == NULL) - return 0; - } - - if (rre_co_add_hoa(rre, &bule->hoa) < 0) { - RRDBG("Failed to add HoA to CoT entry\n"); - return 0; - } - - RRDBG("Care-of keygen token not valid, send CoTI\n"); - rre_reset(rre, &now); - mn_send_coti(&rre->own1, &rre->peer, rre->cookie, rre->iif); - rrl_update_timer(rre); - return 1; -} - -void mn_rr_force_refresh(struct bulentry *bule) -{ - if (bule->rr.state == RR_H_EXPIRED || bule->rr.state == RR_EXPIRED) - mn_rr_cond_start_hot(bule, 1); - - if (bule->rr.state == RR_C_EXPIRED || bule->rr.state == RR_EXPIRED) - mn_rr_cond_start_cot(bule, 1); - - bule->rr.state = RR_STARTED; -} - -void mn_rr_refresh(struct bulentry *bule) -{ - struct rrlentry *rre_ho, *rre_co; - - if (bule->coa_changed > 0) - rrl_delete_co_hoa(&bule->last_coa, - &bule->peer_addr, &bule->hoa); - - if (mn_rr_cond_start_hot(bule, 0)) - bule->rr.state = RR_STARTED; - - if (!bule->dereg && mn_rr_cond_start_cot(bule, 0)) - bule->rr.state = RR_STARTED; - - if (bule->rr.state == RR_STARTED || bule->rr.state == RR_NOT_STARTED) - return; - - rre_ho = rrl_get(HOT_ENTRY, &bule->hoa, &bule->peer_addr); - - if (bule->dereg) { - rr_mn_calc_Kbm(rre_ho->kgen_token, NULL, bule->Kbm); - bule->rr.state = RR_READY; - bule->rr.co_ni = 0; - return; - } - - rre_co = rrl_get(COT_ENTRY, &bule->coa, &bule->peer_addr); - - rr_mn_calc_Kbm(rre_ho->kgen_token, rre_co->kgen_token, bule->Kbm); - - bule->rr.state = RR_READY; -} - -static int _mn_rr_delete_co(void *vrre, void *vcoa) -{ - struct rrlentry *rre = vrre; - struct in6_addr *coa = vcoa; - - if (rre->type == COT_ENTRY && IN6_ARE_ADDR_EQUAL(&rre->own1, coa)) - rrl_delete(rre); - - return 0; -} - -void mn_rr_delete_co(struct in6_addr *coa) -{ - rrl_iterate(_mn_rr_delete_co, coa); -} - -void mn_rr_delete_bule(struct bulentry *e) -{ - struct rrlentry *rre_ho; - - if (e->coa_changed > 0) - rrl_delete_co_hoa(&e->last_coa, &e->peer_addr, &e->hoa); - - rre_ho = rrl_get(HOT_ENTRY, &e->hoa, &e->peer_addr); - - if (rre_ho != NULL) - rrl_delete(rre_ho); -} - -int mn_rr_error_check(const struct in6_addr *own, - const struct in6_addr *peer, - struct in6_addr *hoa) -{ - struct rrlentry *rre = hash_get(&rrl_hash, own, peer); - - if (rre == NULL || !rre->wait) - return 0; - - if (rre->type == HOT_ENTRY) { - *hoa = rre->own1; - return 1; - } else if (!list_empty(&rre->home_addrs)) { - /* just return the first available HoA */ - struct addr_holder *ah; - ah = list_entry(rre->home_addrs.next, - struct addr_holder, list); - *hoa = ah->addr; - return 1; - } - - return 0; -} - -static void mn_recv_cot(const struct ip6_mh *mh, ssize_t len, - const struct in6_addr_bundle *in, - __attribute__ ((unused)) int iif) -{ - struct in6_addr *cn_addr = in->src; - struct in6_addr *co_addr = in->dst; - uint8_t *cookie; - uint8_t *keygen; - uint16_t index; - struct rrlentry *rre_ho; - struct rrlentry *rre_co; - struct ip6_mh_careof_test *ct; - struct list_head *list, *n; - - statistics_inc(&mipl_stat, MIPL_STATISTICS_IN_COT); - - if (len < 0 || (size_t)len < sizeof(struct ip6_mh_careof_test) || - in->remote_coa) - return; - - ct = (struct ip6_mh_careof_test *)mh; - cookie = (uint8_t *)ct->ip6mhct_cookie; - keygen = (uint8_t *)ct->ip6mhct_keygen; - index = ntohs(ct->ip6mhct_nonce_index); - - pthread_rwlock_wrlock(&mn_lock); - rre_co = rrl_get(COT_ENTRY, co_addr, cn_addr); - - if (rre_co == NULL || cookiecmp(rre_co->cookie, cookie)) { - RRDBG("Got CoT, but no corresponding RR entry\n"); - pthread_rwlock_unlock(&mn_lock); - return; - } - - if (!rre_co->wait) { - RRDBG("Got unexpected CoT\n"); - pthread_rwlock_unlock(&mn_lock); - return; - } - - rre_co->wait = 0; - rre_co->resend_count = 0; - memcpy(rre_co->kgen_token, keygen, sizeof(rre_co->kgen_token)); - rre_co->index = index; - /* Send BU to CN for every home address waiting for the CoT */ - list_for_each_safe(list, n, &rre_co->home_addrs) { - struct bulentry *bule = NULL; - struct addr_holder *ah; - - ah = list_entry(list, struct addr_holder, list); - bule = bul_get(NULL, &ah->addr, cn_addr); - - if (bule == NULL || bule->type != BUL_ENTRY || - !IN6_ARE_ADDR_EQUAL(&rre_co->own1, &bule->coa)) { - list_del(list); - free(ah); - continue; - } - - bule->rr.co_ni = index; - - if (!bule->do_send_bu) { - /* This happens when we automatically refresh home - * keygen token while binding still in use */ - continue; - } - - rre_ho = rrl_get(HOT_ENTRY, &ah->addr, cn_addr); - - if (rre_ho == NULL || rre_ho->wait) { - RRDBG("Still waiting for HoT, not sending BU\n"); - continue; - } - - RRDBG("Got CoT and found RR entry for home address\n"); - bule->rr.state = RR_READY; - bule->rr.ho_ni = rre_ho->index; - rr_mn_calc_Kbm(rre_ho->kgen_token, keygen, bule->Kbm); - mn_send_cn_bu(bule); - } - - if (list_empty(&rre_co->home_addrs)) - rrl_delete(rre_co); - else { - rre_co->callback = mn_rr_careofkgt_refresh; - rre_co->delay = MAX_TOKEN_LIFETIME_TS; - tsadd(rre_co->delay, rre_co->lastsent, rre_co->expires); - rrl_update_timer(rre_co); - } - - pthread_rwlock_unlock(&mn_lock); -} - -static struct mh_handler mn_cot_handler = { - .recv = mn_recv_cot, -}; - -/* mh_hot_recv - handles MH HoT msg */ -static void mn_recv_hot(const struct ip6_mh *mh, ssize_t len, - const struct in6_addr_bundle *in, - __attribute__ ((unused)) int iif) -{ - struct in6_addr *cn_addr = in->src; - struct in6_addr *home_addr = in->dst; - uint8_t *cookie; - uint8_t *keygen; - uint16_t index; - struct rrlentry *rre_ho; - struct rrlentry *rre_co = NULL; - struct bulentry *bule = NULL; - struct ip6_mh_home_test *ht; - - statistics_inc(&mipl_stat, MIPL_STATISTICS_IN_HOT); - - if (len < 0 || (size_t)len < sizeof(struct ip6_mh_home_test) || - in->remote_coa) - return; - - ht = (struct ip6_mh_home_test *)mh; - cookie = (uint8_t *)ht->ip6mhht_cookie; - keygen = (uint8_t *)ht->ip6mhht_keygen; - index = ntohs(ht->ip6mhht_nonce_index); - - pthread_rwlock_wrlock(&mn_lock); - - rre_ho = rrl_get(HOT_ENTRY, home_addr, cn_addr); - - if (rre_ho == NULL || cookiecmp(rre_ho->cookie, cookie)) { - RRDBG("Got HoT, but no corresponding RR entry\n"); - pthread_rwlock_unlock(&mn_lock); - return; - } - - if (!rre_ho->wait) { - RRDBG("Got unexpected HoT\n"); - pthread_rwlock_unlock(&mn_lock); - return; - } - - bule = bul_get(NULL, home_addr, cn_addr); - - if (bule == NULL || bule->type != BUL_ENTRY) { - rrl_delete(rre_ho); - pthread_rwlock_unlock(&mn_lock); - return; - } - - rre_ho->wait = 0; - rre_ho->resend_count = 0; - memcpy(rre_ho->kgen_token, keygen, sizeof(rre_ho->kgen_token)); - rre_ho->index = index; - bule->rr.ho_ni = index; - - if (bule->dereg) { - /* Dereg BUL entry waiting for RR_READY */ - RRDBG("Got HoT\n"); - - if (bule->do_send_bu) { - bule->rr.state = RR_READY; - bule->rr.co_ni = 0; - rr_mn_calc_Kbm(keygen, NULL, bule->Kbm); - mn_send_cn_bu(bule); - } - } else { - rre_co = rrl_get(COT_ENTRY, &rre_ho->own2, cn_addr); - - if (rre_co == NULL || rre_co->wait) - RRDBG("Still waiting for CoT, not sending BU\n"); - else if (bule->do_send_bu) { - RRDBG("Got HoT and found RR entry for care-of address\n"); - /* Foreign Reg BU case */ - bule->rr.state = RR_READY; - bule->rr.co_ni = rre_co->index; - rr_mn_calc_Kbm(keygen, rre_co->kgen_token, bule->Kbm); - mn_send_cn_bu(bule); - } - } - - rre_ho->callback = mn_rr_homekgt_refresh; - rre_ho->delay = MAX_TOKEN_LIFETIME_TS; - tsadd(rre_ho->delay, rre_ho->lastsent, rre_ho->expires); - rrl_update_timer(rre_ho); - pthread_rwlock_unlock(&mn_lock); -} - -static struct mh_handler mn_hot_handler = { - .recv = mn_recv_hot, -}; - -int rr_init(void) -{ - if (rrl_init() < 0) - return -1; - - mh_handler_reg(IP6_MH_TYPE_COT, &mn_cot_handler); - mh_handler_reg(IP6_MH_TYPE_HOT, &mn_hot_handler); - return 0; -} - -static int rre_cleanup(void *vbule, __attribute__ ((unused)) void *dummy) -{ - BUG("rrl_hash should be empty"); - rrl_delete(vbule); - return 0; -} - -void rr_cleanup(void) -{ - mh_handler_dereg(IP6_MH_TYPE_HOT, &mn_hot_handler); - mh_handler_dereg(IP6_MH_TYPE_COT, &mn_cot_handler); - pthread_rwlock_wrlock(&mn_lock); - rrl_iterate(rre_cleanup, NULL); - pthread_rwlock_unlock(&mn_lock); - hash_cleanup(&rrl_hash); -} diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/src/retrout.h b/openair3/PMIPv6/pmipv6-daemon-umip/src/retrout.h deleted file mode 100755 index 0ed8c22039..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/src/retrout.h +++ /dev/null @@ -1,27 +0,0 @@ -/* $Id: retrout.h 1.46 06/01/31 23:48:23+02:00 vnuorval@tcs.hut.fi $ */ - -#ifndef __RETROUT_H__ -#define __RETROUT_H__ 1 - -#include - -struct bulentry; - -void mn_rr_refresh(struct bulentry *bule); - -void mn_rr_force_refresh(struct bulentry *bule); - -int rr_init(void); - -void mn_rr_delete_co(struct in6_addr *coa); -void mn_rr_delete_bule(struct bulentry *bule); - -int mn_rr_error_check(const struct in6_addr *peer, - const struct in6_addr *own, - struct in6_addr *hoa); - -void rrl_dump(FILE *os); - -void rr_cleanup(void); - -#endif diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/src/rtnl.c b/openair3/PMIPv6/pmipv6-daemon-umip/src/rtnl.c deleted file mode 100755 index adcd6dd4c1..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/src/rtnl.c +++ /dev/null @@ -1,420 +0,0 @@ -/* - * $Id: rtnl.c 1.56 06/05/15 19:50:13+03:00 vnuorval@tcs.hut.fi $ - * - * This file is part of the MIPL Mobile IPv6 for Linux. - * - * Authors: - * Ville Nuorvala , - * Antti Tuominen - * - * Copyright 2003-2005 Go-Core Project - * Copyright 2003-2006 Helsinki University of Technology - * - * MIPL Mobile IPv6 for Linux is free software; you can redistribute - * it and/or modify it under the terms of the GNU General Public - * License as published by the Free Software Foundation; version 2 of - * the License. - * - * MIPL Mobile IPv6 for Linux is distributed in the hope that it will - * be useful, but WITHOUT ANY WARRANTY; without even the implied - * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with MIPL Mobile IPv6 for Linux; if not, write to the Free - * Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - * 02111-1307 USA. - */ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include -#include -#include -#include -#include -#include -#include -#include - -#include "debug.h" -#include "rtnl.h" - -#define RT_DEBUG_LEVEL 0 - -#if RT_DEBUG_LEVEL >= 1 -#define RTDBG dbg -#else -#define RTDBG(...) -#endif /* RTDBG */ - -int rtnl_do(int proto, struct nlmsghdr *sn, struct nlmsghdr *rn) -{ - struct rtnl_handle rth; - int err; - - if (rtnl_open_byproto(&rth, 0, proto) < 0) { - dbg("huh?\n"); - return -1; - } - - err = rtnl_talk(&rth, sn, 0, 0, rn, NULL, NULL); - rtnl_close(&rth); - return err; -} - -int addr_do(const struct in6_addr *addr, int plen, int ifindex, void *arg, - int (*do_callback)(struct ifaddrmsg *ifa, - struct rtattr *rta_tb[], void *arg)) -{ - uint8_t sbuf[256]; - uint8_t rbuf[256]; - struct nlmsghdr *sn, *rn; - struct ifaddrmsg *ifa; - int err; - struct rtattr *rta_tb[IFA_MAX+1]; - - memset(sbuf, 0, sizeof(sbuf)); - sn = (struct nlmsghdr *)sbuf; - sn->nlmsg_len = NLMSG_LENGTH(sizeof(struct ifaddrmsg)); - sn->nlmsg_flags = NLM_F_REQUEST; - sn->nlmsg_type = RTM_GETADDR; - - ifa = NLMSG_DATA(sn); - ifa->ifa_family = AF_INET6; - ifa->ifa_prefixlen = plen; - ifa->ifa_scope = RT_SCOPE_UNIVERSE; - ifa->ifa_index = ifindex; - - addattr_l(sn, sizeof(sbuf), IFA_LOCAL, addr, sizeof(*addr)); - - memset(rbuf, 0, sizeof(rbuf)); - rn = (struct nlmsghdr *)rbuf; - err = rtnl_route_do(sn, rn); - - if (err < 0) { - rn = sn; - ifa = NLMSG_DATA(rn); - } else { - ifa = NLMSG_DATA(rn); - - if (rn->nlmsg_type != RTM_NEWADDR || - rn->nlmsg_len < NLMSG_LENGTH(sizeof(*ifa)) || - ifa->ifa_family != AF_INET6) { - return -EINVAL; - } - } - - memset(rta_tb, 0, sizeof(rta_tb)); - parse_rtattr(rta_tb, IFA_MAX, IFA_RTA(ifa), - rn->nlmsg_len - NLMSG_LENGTH(sizeof(*ifa))); - - if (!rta_tb[IFA_ADDRESS]) - rta_tb[IFA_ADDRESS] = rta_tb[IFA_LOCAL]; - - if (!rta_tb[IFA_ADDRESS] || - !IN6_ARE_ADDR_EQUAL(RTA_DATA(rta_tb[IFA_ADDRESS]), addr)) { - return -EINVAL; - } - - if (do_callback) - err = do_callback(ifa, rta_tb, arg); - - return err; - -} - -static int addr_mod(int cmd, uint16_t nlmsg_flags, - const struct in6_addr *addr, uint8_t plen, - uint8_t flags, uint8_t scope, int ifindex, - uint32_t prefered, uint32_t valid) - -{ - uint8_t buf[256]; - struct nlmsghdr *n; - struct ifaddrmsg *ifa; - - memset(buf, 0, sizeof(buf)); - n = (struct nlmsghdr *)buf; - n->nlmsg_len = NLMSG_LENGTH(sizeof(struct ifaddrmsg)); - n->nlmsg_flags = NLM_F_REQUEST | nlmsg_flags; - n->nlmsg_type = cmd; - - ifa = NLMSG_DATA(n); - ifa->ifa_family = AF_INET6; - ifa->ifa_prefixlen = plen; - ifa->ifa_flags = flags; - ifa->ifa_scope = scope; - ifa->ifa_index = ifindex; - - addattr_l(n, sizeof(buf), IFA_LOCAL, addr, sizeof(*addr)); - - if (prefered || valid) { - struct ifa_cacheinfo ci; - ci.ifa_prefered = prefered; - ci.ifa_valid = valid; - ci.cstamp = 0; - ci.tstamp = 0; - addattr_l(n, sizeof(buf), IFA_CACHEINFO, &ci, sizeof(ci)); - } - - return rtnl_route_do(n, NULL); -} - -int addr_add(const struct in6_addr *addr, uint8_t plen, - uint8_t flags, uint8_t scope, int ifindex, - uint32_t prefered, uint32_t valid) -{ - return addr_mod(RTM_NEWADDR, NLM_F_CREATE|NLM_F_REPLACE, - addr, plen, flags, scope, ifindex, prefered, valid); -} - - -int addr_del(const struct in6_addr *addr, uint8_t plen, int ifindex) -{ - return addr_mod(RTM_DELADDR, 0, addr, plen, 0, 0, ifindex, 0, 0); -} - -int prefix_add(int ifindex, const struct nd_opt_prefix_info *pinfo) -{ - uint8_t buf[128]; - struct nlmsghdr *n; - struct prefixmsg *pfxm; - struct prefix_cacheinfo ci; - - memset(buf, 0, sizeof(buf)); - n = (struct nlmsghdr *)buf; - n->nlmsg_len = NLMSG_LENGTH(sizeof(struct prefixmsg)); - n->nlmsg_flags = NLM_F_REQUEST|NLM_F_CREATE|NLM_F_REPLACE; - n->nlmsg_type = RTM_NEWPREFIX; - - pfxm = NLMSG_DATA(n); - pfxm->prefix_family = AF_INET6; - pfxm->prefix_ifindex = ifindex; - pfxm->prefix_type = pinfo->nd_opt_pi_type; - pfxm->prefix_len = pinfo->nd_opt_pi_prefix_len; - pfxm->prefix_flags = pinfo->nd_opt_pi_flags_reserved; - - addattr_l(n, sizeof(buf), PREFIX_ADDRESS, &pinfo->nd_opt_pi_prefix, - sizeof(struct in6_addr)); - memset(&ci, 0, sizeof(ci)); - /* pinfo lifetimes stored locally in host byte order */ - ci.valid_time = htonl(pinfo->nd_opt_pi_valid_time); - ci.preferred_time = htonl(pinfo->nd_opt_pi_preferred_time); - addattr_l(n, sizeof(buf), PREFIX_CACHEINFO, &ci, sizeof(ci)); - - return rtnl_route_do(n, NULL); -} - -static int route_mod(int cmd, int oif, uint8_t table, uint8_t proto, - unsigned flags, uint32_t priority, - const struct in6_addr *src, int src_plen, - const struct in6_addr *dst, int dst_plen, - const struct in6_addr *gateway) -{ - uint8_t buf[512]; - struct nlmsghdr *n; - struct rtmsg *rtm; - - if (cmd == RTM_NEWROUTE && oif == 0) - return -1; - - memset(buf, 0, sizeof(buf)); - n = (struct nlmsghdr *)buf; - - n->nlmsg_len = NLMSG_LENGTH(sizeof(struct rtmsg)); - n->nlmsg_flags = NLM_F_REQUEST; - - if (cmd == RTM_NEWROUTE) { - n->nlmsg_flags |= NLM_F_CREATE|NLM_F_EXCL; - } - - n->nlmsg_type = cmd; - - rtm = NLMSG_DATA(n); - rtm->rtm_family = AF_INET6; - rtm->rtm_dst_len = dst_plen; - rtm->rtm_src_len = src_plen; - rtm->rtm_table = table; - rtm->rtm_protocol = proto; - rtm->rtm_scope = RT_SCOPE_UNIVERSE; - rtm->rtm_type = RTN_UNICAST; - rtm->rtm_flags = flags; - - addattr_l(n, sizeof(buf), RTA_DST, dst, sizeof(*dst)); - - if (src) - addattr_l(n, sizeof(buf), RTA_SRC, src, sizeof(*src)); - - addattr32(n, sizeof(buf), RTA_OIF, oif); - - if (gateway) - addattr_l(n, sizeof(buf), - RTA_GATEWAY, gateway, sizeof(*gateway)); - - if (priority) - addattr32(n, sizeof(buf), RTA_PRIORITY, priority); - - return rtnl_route_do(n, NULL); -} - - -/** - * route_add - add route to kernel routing table - * @oif: outgoing interface - * @table: routing table number - * @metric: route preference - * @src: source prefix - * @src_plen: source prefix length - * @dst: destination prefix - * @dst_plen: destination prefix length - * @gateway: possible gateway - * - * Adds a new route through interface @oif, with source - * @src/@src_plen, to destinations specified by @dst/@dst_plen. Route - * will be added to routing table number @table. Returns zero on - * success, negative otherwise. - **/ -int route_add(int oif, uint8_t table, uint8_t proto, - unsigned flags, uint32_t metric, - const struct in6_addr *src, int src_plen, - const struct in6_addr *dst, int dst_plen, - const struct in6_addr *gateway) -{ - return route_mod(RTM_NEWROUTE, oif, table, proto, flags, - metric, src, src_plen, dst, dst_plen, gateway); -} - -/** - * route_del - delete route from kernel routing table - * @oif: outgoing interface - * @table: routing table number - * @metric: route preference - * @src: source prefix - * @src_plen: source prefix length - * @dst: destination prefix - * @dst_plen: destination prefix length - * @gateway: possible gateway - * - * Deletes an entry with @src/@src_plen as source and @dst/@dst_plen - * as destination, through interface @oif, from the routing table - * number @table. - **/ -int route_del(int oif, uint8_t table, uint32_t metric, - const struct in6_addr *src, int src_plen, - const struct in6_addr *dst, int dst_plen, - const struct in6_addr *gateway) -{ - return route_mod(RTM_DELROUTE, oif, table, RTPROT_UNSPEC, - 0, metric, src, src_plen, dst, dst_plen, gateway); -} - -static int rule_mod(const char *iface, int cmd, uint8_t table, - uint32_t priority, uint8_t action, - const struct in6_addr *src, int src_plen, - const struct in6_addr *dst, int dst_plen, int flags) -{ - uint8_t buf[512]; - struct nlmsghdr *n; - struct rtmsg *rtm; - - memset(buf, 0, sizeof(buf)); - n = (struct nlmsghdr *)buf; - - n->nlmsg_len = NLMSG_LENGTH(sizeof(struct rtmsg)); - n->nlmsg_flags = NLM_F_REQUEST; - - if (cmd == RTM_NEWRULE) { - n->nlmsg_flags |= NLM_F_CREATE; - } - - n->nlmsg_type = cmd; - - rtm = NLMSG_DATA(n); - rtm->rtm_family = AF_INET6; - rtm->rtm_dst_len = dst_plen; - rtm->rtm_src_len = src_plen; - rtm->rtm_table = table; - rtm->rtm_scope = RT_SCOPE_UNIVERSE; - rtm->rtm_type = action; - rtm->rtm_flags = flags; - - addattr_l(n, sizeof(buf), RTA_DST, dst, sizeof(*dst)); - - if (src) - addattr_l(n, sizeof(buf), RTA_SRC, src, sizeof(*src)); - - if (priority) - addattr32(n, sizeof(buf), RTA_PRIORITY, priority); - - if (iface) - addattr_l(n, sizeof(buf), RTA_IIF, iface, strlen(iface) + 1); - - return rtnl_route_do(n, NULL); -} - -/** - * rule_add - add rule for routes - * @src: source prefix - * @src_plen: source prefix length - * @dst: destination prefix - * @dst_plen: destination prefix length - * - * Add routing rule for routes with @src/@src_plen source and - * @dst/@dst_plen destination. Returns table number on success, - * negative otherwise. - **/ -int rule_add(const char *iface, uint8_t table, - uint32_t priority, uint8_t action, - const struct in6_addr *src, int src_plen, - const struct in6_addr *dst, int dst_plen, int flags) -{ - return rule_mod(iface, RTM_NEWRULE, table, - priority, action, - src, src_plen, dst, dst_plen, flags); -} - -/** - * rule_del - delete rule for routes - * @src: source prefix - * @src_plen: source prefix length - * @dst: destination prefix - * @dst_plen: destination prefix length - * - * Deletes routing rule for routes with @src/@src_plen source and - * @dst/@dst_plen destination. Returns zero on success, negative - * otherwise. - **/ -int rule_del(const char *iface, uint8_t table, - uint32_t priority, uint8_t action, - const struct in6_addr *src, int src_plen, - const struct in6_addr *dst, int dst_plen, int flags) -{ - return rule_mod(iface, RTM_DELRULE, table, - priority, action, - src, src_plen, dst, dst_plen, flags); -} - -int rtnl_iterate(int proto, int type, rtnl_filter_t func, void *extarg) -{ - struct rtnl_handle rth; - - if (rtnl_open_byproto(&rth, 0, proto) < 0) - return -1; - - if (rtnl_wilddump_request(&rth, AF_INET6, type) < 0) { - rtnl_close(&rth); - return -1; - } - - if (rtnl_dump_filter(&rth, func, extarg, NULL, NULL) < 0) { - rtnl_close(&rth); - return -1; - } - - rtnl_close(&rth); - - return 0; -} diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/src/rtnl.h b/openair3/PMIPv6/pmipv6-daemon-umip/src/rtnl.h deleted file mode 100755 index 18db92ba4c..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/src/rtnl.h +++ /dev/null @@ -1,133 +0,0 @@ -/* $Id: rtnl.h 1.25 06/01/25 04:46:24+02:00 vnuorval@tcs.hut.fi $ */ - -#ifndef __RTNL_H__ -#define __RTNL_H__ 1 - -#include - -#ifndef SOL_NETLINK -#define SOL_NETLINK 270 -#endif - -#define RT6_TABLE_MIP6 252 -#define RT6_TABLE_MAIN 254 - -// Defined for Proxy MIPv6////////////////// -#define RT6_TABLE_PMIP 200 -#define IP6_RULE_PRIO_PMIP6_FWD 1000 -/////////////////////////////////////////// - -#define IP6_RT_PRIO_MIP6_OUT 128 -#define IP6_RT_PRIO_MIP6_FWD 192 -#define IP6_RT_PRIO_ADDRCONF 256 - -#define IP6_RULE_PRIO_MIP6_MNP_IN 1000 -#define IP6_RULE_PRIO_MIP6_HOA_OUT 1001 -#define IP6_RULE_PRIO_MIP6_COA_OUT 1002 -#define IP6_RULE_PRIO_MIP6_BLOCK 1003 -#define IP6_RULE_PRIO_MIP6_BLOCK_HOA 1004 -#define IP6_RULE_PRIO_MIP6_FWD 1005 - -static inline int rtnl_route_open(struct rtnl_handle *rth, - unsigned subscriptions) -{ - return rtnl_open_byproto(rth, subscriptions, NETLINK_ROUTE); -} - -static inline int rtnl_xfrm_open(struct rtnl_handle *rth, - unsigned subscriptions) -{ - return rtnl_open_byproto(rth, subscriptions, NETLINK_XFRM); -} - -int rtnl_do(int proto, struct nlmsghdr *sn, struct nlmsghdr *rn); - -static inline int rtnl_route_do(struct nlmsghdr *sn, struct nlmsghdr *rn) -{ - return rtnl_do(NETLINK_ROUTE, sn, rn); -} - -static inline int rtnl_xfrm_do(struct nlmsghdr *sn, struct nlmsghdr *rn) -{ - return rtnl_do(NETLINK_XFRM, sn, rn); -} - -int addr_do(const struct in6_addr *addr, int plen, int ifindex, void *arg, - int (*do_callback)(struct ifaddrmsg *ifa, - struct rtattr *rta_tb[], void *arg)); - -int addr_del(const struct in6_addr *addr, uint8_t plen, int ifindex); - -int addr_add(const struct in6_addr *addr, uint8_t plen, - uint8_t flags, uint8_t scope, int ifindex, - uint32_t prefered, uint32_t valid); - -struct nd_opt_prefix_info; - -int prefix_add(int ifindex, const struct nd_opt_prefix_info *pinfo); - -int route_add(int oif, uint8_t table, uint8_t proto, - unsigned flags, uint32_t metric, - const struct in6_addr *src, int src_plen, - const struct in6_addr *dst, int dst_plen, - const struct in6_addr *gateway); - - -int route_del(int oif, uint8_t table, uint32_t metric, - const struct in6_addr *src, int src_plen, - const struct in6_addr *dst, int dst_plen, - const struct in6_addr *gateway); - -int rule_add(const char *iface, uint8_t table, - uint32_t priority, uint8_t action, - const struct in6_addr *src, int src_plen, - const struct in6_addr *dst, int dst_plen, int flags); - -int rule_del(const char *iface, uint8_t table, - uint32_t priority, uint8_t action, - const struct in6_addr *src, int src_plen, - const struct in6_addr *dst, int dst_plen,int flags); - -int rtnl_iterate(int proto, int type, rtnl_filter_t func, void *extarg); - -/** - * routes_iterate - apply something to all routes - * @func: pointer to function to apply - * @extarg: extra arguments for iterator - * - * Retrieves all routes assigned to the node and applies function - * @func to all of them. Returns zero on success, negative otherwise. - **/ - -static inline int routes_iterate(rtnl_filter_t func, void *extarg) -{ - return rtnl_iterate(NETLINK_ROUTE, RTM_GETROUTE, func, extarg); -} - -/** - * addrs_iterate - apply something to all addresses - * @func: pointer to function to apply - * @extarg: extra arguments for iterator - * - * Retrieves all addresses assigned to the node and applies function - * @func to all of them. Returns zero on success, negative otherwise. - **/ -static inline int addrs_iterate(rtnl_filter_t func, void *extarg) -{ - return rtnl_iterate(NETLINK_ROUTE, RTM_GETADDR, func, extarg); -} - -/** - * inet6_ifaces_iterate - apply something to all IPv6 capable interfaces - * @func: pointer to function to apply - * @extarg: extra arguments for iterator - * - * Retrieves all IPv6 capable interfaces to the node and applies function - * @func to all of them. Returns zero on success, negative otherwise. - **/ -static inline int inet6_ifaces_iterate(rtnl_filter_t func, void *extarg) -{ - return rtnl_iterate(NETLINK_ROUTE, RTM_GETLINK, func, extarg); -} - -#endif diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/src/scan.l b/openair3/PMIPv6/pmipv6-daemon-umip/src/scan.l deleted file mode 100755 index b1142242ce..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/src/scan.l +++ /dev/null @@ -1,394 +0,0 @@ -/* - * $Id: scan.l 1.44 06/05/12 11:48:36+03:00 vnuorval@tcs.hut.fi $ - * - * This file is part of the MIPL Mobile IPv6 for Linux. - * - * Authors: Antti Tuominen - * Ville Nuorvala - * - * Copyright 2003-2005 Go-Core Project - * Copyright 2003-2006 Helsinki University of Technology - * - * MIPL Mobile IPv6 for Linux is free software; you can redistribute - * it and/or modify it under the terms of the GNU General Public - * License as published by the Free Software Foundation; version 2 of - * the License. - * - * MIPL Mobile IPv6 for Linux is distributed in the hope that it will - * be useful, but WITHOUT ANY WARRANTY; without even the implied - * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with MIPL Mobile IPv6 for Linux; if not, write to the Free - * Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - * 02111-1307 USA - */ - -%top{ -#ifdef HAVE_CONFIG_H -#include -#endif -} - -%{ -#include -#include -#include -#include -#include "gram.h" - -#define YY_NO_INPUT 1 - -int lineno = 1; - -static int yywrap(void) { return 1; } -void yyerror(char *s); - - -int incl_level = 0; /* Current inclusion level */ -#define MAX_INCLUDE_DEPTH 5 /* Max inclusion level */ - -/* Stack of parsing states for include directive */ -struct incl_states_t { - YY_BUFFER_STATE parent_state; /* Remaining buffer from parent file */ - char *parent_incl_file; /* Name of parent file */ - int parent_lineno; /* lineno in parent file before include*/ - glob_t files; /* List of files to be included */ - int cur_file; /* Current position in previous list */ -} incl_states[MAX_INCLUDE_DEPTH]; - -/* incl_file points to current included file to allow meaningful debug - * statements to be generated from gram.y. It is kept NULL when in - * main config file */ -char *incl_file = NULL; - -int glob_err_cb(const char *epath, int eerrno) -{ - fprintf(stderr, "Failed to scan %s: %s\n", epath, strerror(eerrno)); - return 1; -} - - -%} - -%option nounput -%option noyyget_lineno noyyset_lineno -%option noyyget_in noyyset_in -%option noyyget_out noyyset_out -%option noyyget_debug noyyset_debug -%option noyyget_leng -%option noyyget_text - -%x in_include - -ws [ \t]+ -comment #.* -nl \n -qstring \"[^\"\n]*[\"\n] -digit [0-9] -number ({digit})+ -decimal ({number}"."{number}) -hexdec ([a-f]|[A-F]|[0-9]) -addr1 {hexdec}{1,4}":"({hexdec}{1,4}":")*(":"{hexdec}{1,4})+ -addr2 {hexdec}{1,4}(":"{hexdec}{1,4}){0,6}"::" -addr3 ({hexdec}{1,4}":"){7}{hexdec}{1,4} -addr ({addr1}|{addr2}|{addr3}|"::") -macaddr1 ({hexdec}{1,2}":"){5}{hexdec}{1,2} -macaddr2 ({hexdec}{1,2}":"{hexdec}{1,2}":"{hexdec}{1,2}":"{hexdec}{1,2}":"{hexdec}{1,2}":"{hexdec}{1,2}) -macaddr ({macaddr1}|{macaddr2}) -true (enabled|allow|true) -false (disabled|deny|block|false) -%% - -include BEGIN(in_include); -{ -{ws} ; /* skip whitespaces */ -{qstring} { /* Name of the file to include; directly passed to glob. */ - int globerror=0; - struct incl_states_t *state; - char *buf = strdup(yytext+1); - - if (buf == NULL) { - fprintf(stderr, "Not enough memory to parse" - " include directive.\n"); - return INV_TOKEN; - } - if (buf[yyleng-2] != '"') { - fprintf(stderr, "Missing \" after file name to" - " include: %s\n", yytext); - return INV_TOKEN; - } - buf[yyleng-2] = '\0'; - - if (incl_level >= MAX_INCLUDE_DEPTH) { - fprintf(stderr, "Reached %d inclusion levels" - " in configuration files. Giving up\n", - MAX_INCLUDE_DEPTH); - return INV_TOKEN; - } - state = &incl_states[incl_level]; - - /* glob provided include pattern */ - globerror = glob(buf, GLOB_ERR, glob_err_cb, - &state->files); - free(buf); - - if (globerror == GLOB_NOSPACE) { - fprintf(stderr, "Not enough memory to parse" - " include directive.\n"); - return INV_TOKEN; - } - if (globerror == GLOB_ABORTED) { - fprintf(stderr, "An error was encountered in" - " include directive.\n"); - return INV_TOKEN; - } - if (globerror == GLOB_NOMATCH) { - fprintf(stderr, "WARNING: No match found for" - " provided include pattern %s\n", - yytext); - globfree(&state->files); - goto nomatch; - } - if (globerror) { - fprintf(stderr, "Unexpected error in glob" - " (%d).\n", globerror); - return INV_TOKEN; - } - - /* We now have a list of files to include. */ - - /* Parsing of current buffer will continue after - * parsing of new buffer. Stack old one for now. */ - state->parent_state = YY_CURRENT_BUFFER; - state->parent_lineno = lineno; - state->parent_incl_file = incl_file; - lineno = 1; - - /* Start with first match */ - state->cur_file = 0; - yyin = fopen(state->files.gl_pathv[0], "r"); - if (!yyin) { - fprintf(stderr, "Unable to open included file" - " %s.", state->files.gl_pathv[0]); - return INV_TOKEN; - } - - yy_switch_to_buffer(yy_create_buffer(yyin, YY_BUF_SIZE)); - incl_file = state->files.gl_pathv[0]; - incl_level++; - -nomatch: - BEGIN(INITIAL); - } -} -<> { - struct incl_states_t *state; - - if (incl_level == 0) { /* End of parsing */ - incl_file = NULL; - yyterminate(); - } - - yy_delete_buffer(YY_CURRENT_BUFFER); - - /* Go to next file, if any */ - state = &incl_states[incl_level-1]; - state->cur_file++; - if (state->files.gl_pathv[state->cur_file] == NULL) { - /* We are over with this list of includes, - * let's continue parsing of parent file */ - globfree(&state->files); - lineno = state->parent_lineno; - incl_file = state->parent_incl_file; - yy_switch_to_buffer(state->parent_state); - --incl_level; - } else { - /* Proceed to next included file */ - incl_file = state->files.gl_pathv[state->cur_file]; - yyin = fopen(incl_file, "r"); - if (!yyin) { - fprintf(stderr, "Unable to open included" - " file %s.", incl_file); - return INV_TOKEN; - } - yy_switch_to_buffer(yy_create_buffer(yyin, YY_BUF_SIZE)); - lineno = 1; - } - } - -{ws} ; -{comment} ; -{nl} { lineno++; } -{qstring} { - yylval.string = strdup(yytext+1); - if (yylval.string[yyleng-2] != '"') - fprintf(stderr, "Unterminated string\n"); - else - yylval.string[yyleng-2] = '\0'; - return QSTRING; - } - -NodeConfig { return MIP6ENTITY; } -HA { return MIP6HA; } -CN { return MIP6CN; } -MN { return MIP6MN; } -LMA { return MIP6LMA; } -MAG { return MIP6MAG; } -DebugLevel { return DEBUGLEVEL; } -DebugLogFile { return DEBUGLOGFILE; } -DoRouteOptimizationCN { return DOROUTEOPTIMIZATIONCN; } -DoRouteOptimizationMN { return DOROUTEOPTIMIZATIONMN; } -HomeAddress { return HOMEADDRESS; } -HomeAgentAddress { return HOMEAGENTADDRESS; } -InitialBindackTimeoutFirstReg { return INITIALBINDACKTIMEOUTFIRSTREG; } -InitialBindackTimeoutReReg { return INITIALBINDACKTIMEOUTREREG; } -LinkName { return LINKNAME; } -HaMaxBindingLife { return HAMAXBINDINGLIFE; } -MnMaxHaBindingLife { return MNMAXHABINDINGLIFE; } -MnMaxCnBindingLife { return MNMAXCNBINDINGLIFE; } -MaxMobPfxAdvInterval { return MAXMOBPFXADVINTERVAL; } -MinMobPfxAdvInterval { return MINMOBPFXADVINTERVAL; } -MnHomeLink { return MNHOMELINK; } -NonVolatileBindingCache { return NONVOLATILEBINDINGCACHE; } -SendMobPfxSols { return SENDMOBPFXSOLS; } -SendUnsolMobPfxAdvs { return SENDUNSOLMOBPFXADVS; } -SendMobPfxAdvs { return SENDMOBPFXADVS; } -UseMovementModule { return USEMOVEMENTMODULE; } -UsePolicyModule { return USEPOLICYMODULE; } -IPsecPolicySet { return IPSECPOLICYSET; } -IPsecPolicy { return IPSECPOLICY; } -IPsecType { return IPSECTYPE; } -UseAltCoa { return USEALTCOA; } -UseESP { return USEESP; } -UseAH { return USEAH; } -UseIPComp { return USEIPCOMP; } -UseMnHaIPsec { return USEMNHAIPSEC; } -KeyMngMobCapability { return KEYMNGMOBCAPABILITY; } -HomeRegBinding { return HOMEREGBINDING; } -Mh { return MH; } -MobPfxDisc { return MOBPFXDISC; } -TunnelHomeTesting { return TUNNELHOMETESTING; } -TunnelMh { return TUNNELMH; } -TunnelPayload { return TUNNELPAYLOAD; } -MnRoPolicy { return MNROPOLICY; } -ICMP { return ICMP; } -any { return ANY; } -DoRouteOptimization { return DOROUTEOPT; } -DefaultBindingAclPolicy { return DEFAULTBINDINGACLPOLICY; } -BindingAclPolicy { return BINDINGACLPOLICY; } -UseCnBuAck { return USECNBUACK; } -Interface { return INTERFACE; } -IfName { return IFNAME; } -IfType { return IFTYPE; } -MnIfPreference { return MNIFPREFERENCE; } -Tunnel { return ISTUNNEL; } -MnUseAllInterfaces { return MNUSEALLINTERFACES; } -MnRouterProbes { return MNROUTERPROBES; } -MnRouterProbeTimeout { return MNROUTERPROBETIMEOUT; } -MnDiscardHaParamProb { return MNDISCARDHAPARAMPROB; } -OptimisticHandoff { return OPTIMISTICHANDOFF; } -HaAcceptMobRtr { return HAACCEPTMOBRTR; } -IsMobRtr { return ISMOBRTR; } -HaServedPrefix { return HASERVEDPREFIX; } -HomePrefix { return HOMEPREFIX; } -MobRtrUseExplicitMode { return MOBRTRUSEEXPLICITMODE; } -RFC5213TimestampBasedApproachInUse { return RFC5213TIMESTAMPBASEDAPPROACHINUSE; } -RFC5213MobileNodeGeneratedTimestampInUse { return RFC5213MOBILENODEGENERATEDTIMESTAMPINUSE; } -RFC5213FixedMAGLinkLocalAddressOnAllAccessLinks { return RFC5213FIXEDMAGLINKLOCALADDRESSONALLACCESSLINKS; } -RFC5213FixedMAGLinkLayerAddressOnAllAccessLinks { return RFC5213FIXEDMAGLINKLAYERADDRESSONALLACCESSLINKS; } -RFC5213MinDelayBeforeBCEDelete { return RFC5213MINDELAYBEFOREBCEDELETE; } -RFC5213MaxDelayBeforeNewBCEAssign { return RFC5213MAXDELAYBEFORENEWBCEASSIGN; } -RFC5213TimestampValidityWindow { return RFC5213TIMESTAMPVALIDITYWINDOW; } -RFC5213EnableMAGLocalRouting { return RFC5213ENABLEMAGLOCALROUTING; } -LmaPmipNetworkAddress { return LMAPMIPNETWORKADDRESS; } -LmaPmipNetworkDevice { return LMAPMIPNETWORKDEVICE; } -LmaCoreNetworkAddress { return LMACORENETWORKADDRESS; } -LmaCoreNetworkDevice { return LMACORENETWORKDEVICE; } -MagAddressIngress { return MAGADDRESSINGRESS; } -MagAddressEgress { return MAGADDRESSEGRESS; } -MagDeviceIngress { return MAGDEVICEINGRESS; } -MagDeviceEgress { return MAGDEVICEEGRESS; } -OurAddress { return OURADDRESS; } -HomeNetworkPrefix { return HOMENETWORKPREFIX; } -PBULifeTime { return PBULIFETIME; } -PBALifeTime { return PBALIFETIME; } -RetransmissionTimeOut { return RETRANSMISSIONTIMEOUT; } -MaxMessageRetransmissions { return MAXMESSAGERETRANSMISSIONS; } -TunnelingEnabled { return TUNNELINGENABLED; } -DynamicTunnelingEnabled { return DYNAMICTUNNELINGENABLED; } -MaxDelayBeforeDynamicTunnelingDelete { return MAXDELAYBEFOREDYNAMICTUNNELINGDELETE; } -ProxyMipLma { return PROXYMIPLMA; } -ProxyMipMag { return PROXYMIPMAG; } -RadiusPassword { return RADIUSPASSWORD; } -RadiusClientConfigFile { return RADIUSCLIENTCONFIGFILE; } -PcapSyslogAssociationGrepString { return PCAPSYSLOGASSOCIATIONGREPSTRING; } -PcapSyslogDeAssociationGrepString { return PCAPSYSLOGDEASSOCIATIONGREPSTRING; } -internal { return INTERNAL; } - -{addr} { - int i; - - i = inet_pton(AF_INET6, yytext, &yylval.addr); - - if (i < 1) { - return INV_TOKEN; - } - return ADDR; - } - -{macaddr} { - unsigned int i; - char hex_digits [3]; - hex_digits[2] = 0; - yylval.macaddr.s6_addr[0] = 0; - yylval.macaddr.s6_addr[1] = 0; - yylval.macaddr.s6_addr[2] = 0; - yylval.macaddr.s6_addr[3] = 0; - yylval.macaddr.s6_addr[4] = 0; - yylval.macaddr.s6_addr[5] = 0; - yylval.macaddr.s6_addr[6] = 0; - yylval.macaddr.s6_addr[7] = 0; - yylval.macaddr.s6_addr[8] = 0; - yylval.macaddr.s6_addr[9] = 0; - hex_digits[0] = yytext[0]; - hex_digits[1] = yytext[1]; - sscanf(hex_digits, "%02x", &i); - yylval.macaddr.s6_addr[10] = i & 0x000000FF; - hex_digits[0] = yytext[3]; - hex_digits[1] = yytext[4]; - sscanf(hex_digits, "%02x", &i); - yylval.macaddr.s6_addr[11] = i & 0x000000FF; - hex_digits[0] = yytext[6]; - hex_digits[1] = yytext[7]; - sscanf(hex_digits, "%02x", &i); - yylval.macaddr.s6_addr[12] = i & 0x000000FF; - hex_digits[0] = yytext[9]; - hex_digits[1] = yytext[10]; - sscanf(hex_digits, "%02x", &i); - yylval.macaddr.s6_addr[13] = i & 0x000000FF; - hex_digits[0] = yytext[12]; - hex_digits[1] = yytext[13]; - sscanf(hex_digits, "%02x", &i); - yylval.macaddr.s6_addr[14] = i & 0x000000FF; - hex_digits[0] = yytext[15]; - hex_digits[1] = yytext[16]; - sscanf(hex_digits, "%02x", &i); - yylval.macaddr.s6_addr[15] = i & 0x000000FF; - printf("scan.l: %02x:%02x:%02x:%02x:%02x:%02x\n", yylval.macaddr.s6_addr[10], yylval.macaddr.s6_addr[11],yylval.macaddr.s6_addr[12],yylval.macaddr.s6_addr[13],yylval.macaddr.s6_addr[14],yylval.macaddr.s6_addr[15]); - return MACADDR; - } - -{number} { yylval.num = atoi(yytext); return NUMBER; } - -{decimal} { yylval.dec = atof(yytext); return DECIMAL; } - -{true} { yylval.bool = 1; return BOOL; } - -{false} { yylval.bool = 0; return BOOL; } - -"{"|"}"|";"|"/"|"="|"("|")"|"," { return *yytext; } - -. { return INV_TOKEN; } -%% diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/src/statistics.h b/openair3/PMIPv6/pmipv6-daemon-umip/src/statistics.h deleted file mode 100755 index c3383e166b..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/src/statistics.h +++ /dev/null @@ -1,92 +0,0 @@ -/* @(#)statistics.h - - Copyright 2006 Jean Lorchat - -Author: lorchat@sfc.wide.ad.jp - -Created : 21 Aug 2006 - -*/ - -#ifndef __STATISTICS_H__ -#define __STATISTICS_H__ - -#include - -#define MIPL_STATISTICS_IN_MH 0 -#define MIPL_STATISTICS_IN_HOTI 1 -#define MIPL_STATISTICS_IN_COTI 2 -#define MIPL_STATISTICS_IN_HOT 3 -#define MIPL_STATISTICS_IN_COT 4 -#define MIPL_STATISTICS_IN_BU 5 -#define MIPL_STATISTICS_IN_BA 6 -#define MIPL_STATISTICS_IN_BRR 7 -#define MIPL_STATISTICS_IN_BE 8 -#define MIPL_STATISTICS_IN_DHAAD_REQ 9 -#define MIPL_STATISTICS_IN_DHAAD_REP 10 -#define MIPL_STATISTICS_IN_HAO 11 -#define MIPL_STATISTICS_IN_X_HAO 12 -#define MIPL_STATISTICS_IN_RH2 13 -#define MIPL_STATISTICS_IN_RTUN 14 -#define MIPL_STATISTICS_IN_X_MH_CHK 15 -#define MIPL_STATISTICS_IN_X_PAYLOAD 16 -#define MIPL_STATISTICS_IN_UNKNOWN_MH 17 -#define MIPL_STATISTICS_IN_NOT_HOA 18 -#define MIPL_STATISTICS_IN_NO_BU 19 -#define MIPL_STATISTICS_IN_X_H_COOKIE 20 -#define MIPL_STATISTICS_IN_X_C_COOKIE 21 -#define MIPL_STATISTICS_IN_UNSAFEBU 22 -#define MIPL_STATISTICS_IN_X_BU_HAO 23 -#define MIPL_STATISTICS_IN_RR_FAIL 24 -#define MIPL_STATISTICS_IN_X_SEQ 25 -#define MIPL_STATISTICS_IN_X_HAO_PARAM 26 -#define MIPL_STATISTICS_IN_X_MH_PARAM 27 -#define MIPL_STATISTICS_IN_X_COA 28 -#define MIPL_STATISTICS_IN_X_MOBOPT 29 - -#define MIPL_STATISTICS_IN_END 64 - - -#define MIPL_STATISTICS_OUT_MH MIPL_STATISTICS_IN_END -#define MIPL_STATISTICS_OUT_HOTI MIPL_STATISTICS_IN_END + 1 -#define MIPL_STATISTICS_OUT_COTI MIPL_STATISTICS_IN_END + 2 -#define MIPL_STATISTICS_OUT_HOT MIPL_STATISTICS_IN_END + 3 -#define MIPL_STATISTICS_OUT_COT MIPL_STATISTICS_IN_END + 4 -#define MIPL_STATISTICS_OUT_BU MIPL_STATISTICS_IN_END + 5 -#define MIPL_STATISTICS_OUT_BA MIPL_STATISTICS_IN_END + 6 -#define MIPL_STATISTICS_OUT_BRR MIPL_STATISTICS_IN_END + 7 -#define MIPL_STATISTICS_OUT_BE MIPL_STATISTICS_IN_END + 8 -#define MIPL_STATISTICS_OUT_DHAAD_REQ MIPL_STATISTICS_IN_END + 9 -#define MIPL_STATISTICS_OUT_DHAAD_REP MIPL_STATISTICS_IN_END + 10 -#define MIPL_STATISTICS_OUT_MPA MIPL_STATISTICS_IN_END + 11 -#define MIPL_STATISTICS_OUT_MPS MIPL_STATISTICS_IN_END + 12 -#define MIPL_STATISTICS_OUT_HAO MIPL_STATISTICS_IN_END + 13 -#define MIPL_STATISTICS_OUT_RH2 MIPL_STATISTICS_IN_END + 14 -#define MIPL_STATISTICS_OUT_RTUN MIPL_STATISTICS_IN_END + 15 -#define MIPL_STATISTICS_OUT_RS MIPL_STATISTICS_IN_END + 16 -#define MIPL_STATISTICS_OUT_NS MIPL_STATISTICS_IN_END + 17 -#define MIPL_STATISTICS_OUT_NA MIPL_STATISTICS_IN_END + 18 -#define MIPL_STATISTICS_OUT_RS_UNSPEC MIPL_STATISTICS_IN_END + 19 -#define MIPL_STATISTICS_OUT_NS_UNSPEC MIPL_STATISTICS_IN_END + 20 - -#define MIPL_STATISTICS_OUT_END MIPL_STATISTICS_IN_END + 21 - -#define MIPL_STATISTICS_SIZE MIPL_STATISTICS_OUT_END - -struct mip6_stat { - pthread_mutex_t lock; - - unsigned long int values[MIPL_STATISTICS_OUT_END]; -}; - -extern struct mip6_stat mipl_stat; - -static inline void -statistics_inc(struct mip6_stat *mipl_stat, int index) -{ - pthread_mutex_lock(&mipl_stat->lock); - mipl_stat->values[index]++; - pthread_mutex_unlock(&mipl_stat->lock); -} - -#endif /* __STATISTICS_H__ */ diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/src/tqueue.c b/openair3/PMIPv6/pmipv6-daemon-umip/src/tqueue.c deleted file mode 100755 index fdb8e1315b..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/src/tqueue.c +++ /dev/null @@ -1,233 +0,0 @@ -/* - * $Id: tqueue.c 1.49 06/02/28 18:57:32+02:00 anttit@tcs.hut.fi $ - * - * This file is part of the MIPL Mobile IPv6 for Linux. - * - * Authors: - * Antti Tuominen - * Ville Nuorvala - * - * Copyright 2001-2005 GO-Core Project - * Copyright 2003-2006 Helsinki University of Technology - * - * MIPL Mobile IPv6 for Linux is free software; you can redistribute - * it and/or modify it under the terms of the GNU General Public - * License as published by the Free Software Foundation; version 2 of - * the License. - * - * MIPL Mobile IPv6 for Linux is distributed in the hope that it will - * be useful, but WITHOUT ANY WARRANTY; without even the implied - * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with MIPL Mobile IPv6 for Linux; if not, write to the Free - * Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - * 02111-1307 USA. - */ - -#ifdef HAVE_CONFIG_H -#include -#endif -#include -#include -#include -#include -#include - -#include "debug.h" -#include "util.h" -#include "tqueue.h" - -LIST_HEAD(tq_list); - -static volatile int killed = 0; -static pthread_mutex_t mutex; -static pthread_cond_t cond; -static pthread_t tq_runner; - -static volatile struct tq_elem *curr = NULL; - -static inline int is_first_task(struct tq_elem *tqe) -{ - return (tq_list.next == &tqe->list); -} - -static void *runner(void *arg); - -/** - * taskqueue_init - initialize task queue - * @h_runner: thread handle - * - * Initializes task queue and creates a task runner thread. - **/ -int taskqueue_init(void) -{ - pthread_mutexattr_t mattrs; - pthread_mutexattr_init(&mattrs); - pthread_mutexattr_settype(&mattrs, PTHREAD_MUTEX_FAST_NP); - - if (pthread_mutex_init(&mutex, &mattrs) || - pthread_cond_init(&cond, NULL) || - pthread_create(&tq_runner, NULL, runner, NULL)) - return -1; - - return 0; -} - -/** - * taskqueue_destroy - destroy task queue - * @h_runner: task runner thread handle - * - * Destroys task queue and deletes all entries. Task runner will - * complete pending task, if taskqueue_destroy() is called mid task. - **/ -void taskqueue_destroy(void) -{ - struct list_head *l, *n; - pthread_mutex_lock(&mutex); - list_for_each_safe(l, n, &tq_list) { - struct tq_elem *tqe; - list_del(l); - tqe = list_entry(l, struct tq_elem, list); - tsclear(tqe->expires); - } - killed = 1; - pthread_cond_signal(&cond); - pthread_mutex_unlock(&mutex); - pthread_join(tq_runner, NULL); -} - -/** - * sorted_insert - insert queue item sorted by expiration time - * @tqi: task queue entry to insert - * - * Inserts @tqi to task queue sorted by expiration time. - **/ -static inline void sorted_insert(struct tq_elem *tqi) -{ - struct list_head *l; - - list_for_each(l, &tq_list) { - struct tq_elem *cur = list_entry(l, struct tq_elem, list); - - if (tsbefore(cur->expires, tqi->expires)) { - list_add_tail(&tqi->list, &cur->list); - return; - } - } - list_add_tail(&tqi->list, &tq_list); -} - -/** - * del_task - delete task from list - * @elem: task queue element to remove - * - * Deletes task queue element @elem. Element is removed from the list - * (not freed), and expire time is set to zero. Returns 0 on success, - * otherwise negative error code. - **/ -int del_task(struct tq_elem *elem) -{ - assert(elem != NULL); - - pthread_mutex_lock(&mutex); - list_del(&elem->list); - tsclear(elem->expires); - - if (elem == curr) - curr = NULL; - - pthread_mutex_unlock(&mutex); - - return 0; -} - -/** - * add_task_abs - add new task with task to task queue - * @expires: absolute expiry time - * @tqi: task entry - * @task: task to execute on expiry - * - * Adds @task to task queue. Task will expire in @ms milliseconds. - * Task @data is stored with the entry. @tqi points to a buffer which - * hold the actual task queue entry. - **/ -int add_task_abs(const struct timespec *expires, - struct tq_elem *tqi, void (*task)(struct tq_elem *)) -{ - pthread_mutex_lock(&mutex); - - if (tsisset(tqi->expires)) { - list_del(&tqi->list); - } - - if (tqi == curr) - curr = NULL; - - tqi->expires = *expires; - tqi->task = task; - tqi->thread = pthread_self(); - sorted_insert(tqi); - - if (is_first_task(tqi)) - pthread_cond_signal(&cond); - - pthread_mutex_unlock(&mutex); - - return 0; -} - -int task_interrupted(void) -{ - int ret; - pthread_mutex_lock(&mutex); - ret = (curr == NULL); - pthread_mutex_unlock(&mutex); - return ret; -} - -/** - * runner - run expiring tasks - * @arg: NULL - * - **/ -static void *runner(__attribute__ ((unused)) void *arg) -{ - pthread_dbg("thread started"); - pthread_mutex_lock(&mutex); - - for (;;) { - struct timespec now; - - if (killed) - break; - - if (list_empty(&tq_list)) - pthread_cond_wait(&cond, &mutex); - - clock_gettime(CLOCK_REALTIME, &now); - - while (!list_empty(&tq_list)) { - struct tq_elem *first; - first = list_entry(tq_list.next, struct tq_elem, list); - - if (tsbefore(first->expires, now)) { - pthread_cond_timedwait(&cond, &mutex, - &first->expires); - break; - } - - list_del(&first->list); - tsclear(first->expires); - curr = first; - pthread_mutex_unlock(&mutex); - first->task(first); - pthread_mutex_lock(&mutex); - curr = NULL; - } - } - - pthread_mutex_unlock(&mutex); - pthread_exit(NULL); -} diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/src/tqueue.h b/openair3/PMIPv6/pmipv6-daemon-umip/src/tqueue.h deleted file mode 100755 index 769aa4c2fc..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/src/tqueue.h +++ /dev/null @@ -1,55 +0,0 @@ -/* $Id: tqueue.h 1.21 06/05/05 12:14:34+03:00 anttit@tcs.hut.fi $ */ - -#ifndef __TQUEUE_H__ -#define __TQUEUE_H__ 1 - -#include -#include - -#include "list.h" -#include "util.h" - -struct tq_elem { - struct list_head list; - struct timespec expires; /* expire time for task */ - pthread_t thread; /* who queued this task */ - void (*task)(struct tq_elem *); /* pointer to task */ -}; - -#define tq_data(ptr, type, member) \ - container_of(ptr, type, member) - -/* - * Initialize task queue. Must be done before using anything else. - */ -int taskqueue_init(void); - -/* - * Remove all pending tasks and destroy queue. - */ -void taskqueue_destroy(void); - -/* check if task has been interruped while waiting for a lock */ -int task_interrupted(void); - -/* Add task task(tqi) to be triggered at expires */ -int add_task_abs(const struct timespec *expires, - struct tq_elem *tqi, void (*task)(struct tq_elem *)); - -/* Add task to be triggered after expires_in */ -static inline int add_task_rel(const struct timespec *expires_in, - struct tq_elem *tqi, - void (*task)(struct tq_elem *)) -{ - struct timespec expire; - - clock_gettime(CLOCK_REALTIME, &expire); - tsadd(expire, *expires_in, expire); - - return add_task_abs(&expire, tqi, task); -} - -/* Delete task from list */ -int del_task(struct tq_elem *tqi); - -#endif /* __TQUEUE_H__ */ diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/src/tunnelctl.c b/openair3/PMIPv6/pmipv6-daemon-umip/src/tunnelctl.c deleted file mode 100755 index 078e0d6772..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/src/tunnelctl.c +++ /dev/null @@ -1,501 +0,0 @@ -/* - * $Id: tunnelctl.c 1.44 06/04/25 13:24:14+03:00 anttit@tcs.hut.fi $ - * - * This file is part of the MIPL Mobile IPv6 for Linux. - * - * Author: Ville Nuorvala - * - * Copyright 2003-2005 Go-Core Project - * Copyright 2003-2006 Helsinki University of Technology - * - * MIPL Mobile IPv6 for Linux is free software; you can redistribute - * it and/or modify it under the terms of the GNU General Public - * License as published by the Free Software Foundation; version 2 of - * the License. - * - * MIPL Mobile IPv6 for Linux is distributed in the hope that it will - * be useful, but WITHOUT ANY WARRANTY; without even the implied - * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with MIPL Mobile IPv6 for Linux; if not, write to the Free - * Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - * 02111-1307 USA. - */ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include -#include -#include -#include - -#include -#include -#include - -#include -#include -#include -#include -#include -#include - -#include "debug.h" -#include "hash.h" -#include "list.h" -#include "util.h" -#include "tunnelctl.h" - -#define TUNNEL_DEBUG_LEVEL 1 - -#if TUNNEL_DEBUG_LEVEL >= 1 -#define TDBG dbg -#else -#define TDBG(x...) -#endif - -const char basedev[] = "ip6tnl0"; - -static pthread_mutex_t tnl_lock; - -static int tnl_fd; - -struct mip6_tnl { - struct list_head list; - struct ip6_tnl_parm parm; - int ifindex; - int users; -}; - -static inline void tnl_dump(struct mip6_tnl *tnl) -{ - TDBG("name: %s\n" - "link: %d\n" - "proto: %d\n" - "encap_limit: %d\n" - "hop_limit: %d\n" - "flowinfo: %d\n" - "flags: %x\n" - "laddr: %x:%x:%x:%x:%x:%x:%x:%x\n" - "raddr: %x:%x:%x:%x:%x:%x:%x:%x\n" - "ifindex: %d\n" - "users: %d\n", - tnl->parm.name, - tnl->parm.link, - tnl->parm.proto, - tnl->parm.encap_limit, - tnl->parm.hop_limit, - tnl->parm.flowinfo, - tnl->parm.flags, - NIP6ADDR(&tnl->parm.laddr), - NIP6ADDR(&tnl->parm.raddr), - tnl->ifindex, - tnl->users); -} - -static inline void tnl_parm_dump(struct ip6_tnl_parm *parm) -{ - TDBG("name: %s\n" - "link: %d\n" - "proto: %d\n" - "encap_limit: %d\n" - "hop_limit: %d\n" - "flowinfo: %d\n" - "flags: %x\n" - "laddr: %x:%x:%x:%x:%x:%x:%x:%x\n" - "raddr: %x:%x:%x:%x:%x:%x:%x:%x\n" - "ifindex: %d\n" - "users: %d\n", - parm->name, - parm->link, - parm->proto, - parm->encap_limit, - parm->hop_limit, - parm->flowinfo, - parm->flags, - NIP6ADDR(&parm->laddr), - NIP6ADDR(&parm->raddr)); -} - -#define TNL_BUCKETS 32 - -static struct hash tnl_hash; - -LIST_HEAD(tnl_list); - -static inline struct mip6_tnl *get_tnl(int ifindex) -{ - struct mip6_tnl *tnl = NULL; - struct list_head *list; - list_for_each(list, &tnl_list) { - struct mip6_tnl *tmp; - tmp = list_entry(list, struct mip6_tnl, list); - - if (tmp->ifindex == ifindex) { - tnl = tmp; - break; - } - } - return tnl; -} - -static int __tunnel_del(struct mip6_tnl *tnl) -{ - int res = 0; - - tnl->users--; - - TDBG("tunnel %s (%d) from %x:%x:%x:%x:%x:%x:%x:%x " - "to %x:%x:%x:%x:%x:%x:%x:%x user count decreased to %d\n", - tnl->parm.name, tnl->ifindex, - NIP6ADDR(&tnl->parm.laddr), NIP6ADDR(&tnl->parm.raddr), - tnl->users); - - if (tnl->users == 0) { - struct ifreq ifr; - list_del(&tnl->list); - hash_delete(&tnl_hash, &tnl->parm.laddr, &tnl->parm.raddr); - strcpy(ifr.ifr_name, tnl->parm.name); - - if ((res = ioctl(tnl_fd, SIOCDELTUNNEL, &ifr)) < 0) { - TDBG("SIOCDELTUNNEL failed status %d %s\n", - errno, strerror(errno)); - res = -1; - } else - TDBG("tunnel deleted\n"); - - free(tnl); - } - - return res; -} - -/** - * tunnel_del - delete tunnel - * @ifindex: tunnel interface index - * - * Deletes a tunnel identified by @ifindex. Returns negative if - * tunnel does not exist, otherwise zero. - **/ -int tunnel_del(int ifindex, - int (*ext_tunnel_ops)(int request, - int old_if, - int new_if, - void *data), - void *data) -{ - struct mip6_tnl *tnl; - int res; - - pthread_mutex_lock(&tnl_lock); - - if ((tnl = get_tnl(ifindex)) == NULL) { - TDBG("tunnel %d doesn't exist\n", ifindex); - res = -1; - } else { - if (ext_tunnel_ops && - ext_tunnel_ops(SIOCDELTUNNEL, tnl->ifindex, 0, data) < 0) - TDBG("ext_tunnel_ops failed\n"); - - if ((res = __tunnel_del(tnl)) < 0) - TDBG("tunnel %d deletion failed\n", ifindex); - } - - pthread_mutex_unlock(&tnl_lock); - return res; -} - -static struct mip6_tnl *__tunnel_add(struct in6_addr *local, - struct in6_addr *remote, - int link) -{ - struct mip6_tnl *tnl = NULL; - struct ifreq ifr; - - if ((tnl = malloc(sizeof(struct mip6_tnl))) == NULL) - return NULL; - - memset(tnl, 0, sizeof(struct mip6_tnl)); - tnl->users = 1; - tnl->parm.proto = IPPROTO_IPV6; - tnl->parm.flags = IP6_TNL_F_MIP6_DEV|IP6_TNL_F_IGN_ENCAP_LIMIT; - tnl->parm.hop_limit = 64; - tnl->parm.laddr = *local; - tnl->parm.raddr = *remote; - tnl->parm.link = link; - - strcpy(ifr.ifr_name, basedev); - ifr.ifr_ifru.ifru_data = (void *)&tnl->parm; - - if (ioctl(tnl_fd, SIOCADDTUNNEL, &ifr) < 0) { - TDBG("SIOCADDTUNNEL failed status %d %s\n", - errno, strerror(errno)); - goto err; - } - - if (!(tnl->parm.flags & IP6_TNL_F_MIP6_DEV)) { - TDBG("tunnel exists,but isn't used for MIPv6\n"); - goto err; - } - - strcpy(ifr.ifr_name, tnl->parm.name); - - if (ioctl(tnl_fd, SIOCGIFFLAGS, &ifr) < 0) { - TDBG("SIOCGIFFLAGS failed status %d %s\n", - errno, strerror(errno)); - goto err; - } - - ifr.ifr_flags |= IFF_UP | IFF_RUNNING; - - if (ioctl(tnl_fd, SIOCSIFFLAGS, &ifr) < 0) { - TDBG("SIOCSIFFLAGS failed status %d %s\n", - errno, strerror(errno)); - goto err; - } - - if (!(tnl->ifindex = if_nametoindex(tnl->parm.name))) { - TDBG("no device called %s\n", tnl->parm.name); - goto err; - } - - if (hash_add(&tnl_hash, tnl, &tnl->parm.laddr, &tnl->parm.raddr) < 0) - goto err; - - list_add_tail(&tnl->list, &tnl_list); - - TDBG("created tunnel %s (%d) from %x:%x:%x:%x:%x:%x:%x:%x " - "to %x:%x:%x:%x:%x:%x:%x:%x user count %d\n", - tnl->parm.name, tnl->ifindex, - NIP6ADDR(&tnl->parm.laddr), NIP6ADDR(&tnl->parm.raddr), - tnl->users); - - return tnl; -err: - free(tnl); - return NULL; -} - -/** - * tunnel_add - add a tunnel - * @local: local tunnel address - * @remote: remote tunnel address - * - * Create an IP6-IP6 tunnel between @local and @remote. Returns - * interface index of the newly created tunnel, or negative on error. - **/ -int tunnel_add(struct in6_addr *local, - struct in6_addr *remote, - int link, - int (*ext_tunnel_ops)(int request, - int old_if, - int new_if, - void *data), - void *data) -{ - struct mip6_tnl *tnl; - int res; - - pthread_mutex_lock(&tnl_lock); - - if ((tnl = hash_get(&tnl_hash, local, remote)) != NULL) { - tnl->users++; - TDBG("tunnel %s (%d) from %x:%x:%x:%x:%x:%x:%x:%x " - "to %x:%x:%x:%x:%x:%x:%x:%x user count increased to %d\n", - tnl->parm.name, tnl->ifindex, - NIP6ADDR(local), NIP6ADDR(remote), tnl->users); - } else { - if ((tnl = __tunnel_add(local, remote, link)) == NULL) { - TDBG("failed to create tunnel " - "from %x:%x:%x:%x:%x:%x:%x:%x " - "to %x:%x:%x:%x:%x:%x:%x:%x\n", - NIP6ADDR(local), NIP6ADDR(remote)); - pthread_mutex_unlock(&tnl_lock); - return -1; - } - } - - if (ext_tunnel_ops && - ext_tunnel_ops(SIOCADDTUNNEL, 0, tnl->ifindex, data) < 0) { - TDBG("ext_tunnel_ops failed\n"); - __tunnel_del(tnl); - pthread_mutex_unlock(&tnl_lock); - return -1; - } - - res = tnl->ifindex; - pthread_mutex_unlock(&tnl_lock); - return res; -} - -static int __tunnel_mod(struct mip6_tnl *tnl, - struct in6_addr *local, - struct in6_addr *remote, - int link) -{ - struct ip6_tnl_parm parm; - struct ifreq ifr; - - memset(&parm, 0, sizeof(struct ip6_tnl_parm)); - parm.proto = IPPROTO_IPV6; - parm.flags = IP6_TNL_F_MIP6_DEV|IP6_TNL_F_IGN_ENCAP_LIMIT; - parm.hop_limit = 64; - parm.laddr = *local; - parm.raddr = *remote; - parm.link = link; - - strcpy(ifr.ifr_name, tnl->parm.name); - ifr.ifr_ifru.ifru_data = (void *)&parm; - - if(ioctl(tnl_fd, SIOCCHGTUNNEL, &ifr) < 0) { - TDBG("SIOCCHGTUNNEL failed status %d %s\n", - errno, strerror(errno)); - return -1; - } - - hash_delete(&tnl_hash, &tnl->parm.laddr, &tnl->parm.raddr); - memcpy(&tnl->parm, &parm, sizeof(struct ip6_tnl_parm)); - - if (hash_add(&tnl_hash, tnl, &tnl->parm.laddr, &tnl->parm.raddr) < 0) { - free(tnl); - return -1; - } - - TDBG("modified tunnel iface %s (%d)" - "from %x:%x:%x:%x:%x:%x:%x:%x " - "to %x:%x:%x:%x:%x:%x:%x:%x\n", - tnl->parm.name, tnl->ifindex, NIP6ADDR(&tnl->parm.laddr), - NIP6ADDR(&tnl->parm.raddr)); - return tnl->ifindex; - -} - - -/** - * tunnel_mod - modify tunnel - * @ifindex: tunnel interface index - * @local: new local address - * @remote: new remote address - * - * Modifies tunnel end-points. Returns negative if error, zero on - * success. - **/ -int tunnel_mod(int ifindex, - struct in6_addr *local, - struct in6_addr *remote, - int link, - int (*ext_tunnel_ops)(int request, - int old_if, - int new_if, - void *data), - void *data) -{ - struct mip6_tnl *old, *new; - int res = -1; - - pthread_mutex_lock(&tnl_lock); - - TDBG("modifying tunnel %d end points with " - "from %x:%x:%x:%x:%x:%x:%x:%x " - "to %x:%x:%x:%x:%x:%x:%x:%x\n", - ifindex, NIP6ADDR(local), NIP6ADDR(remote)); - - old = get_tnl(ifindex); - assert(old != NULL); - - if ((new = hash_get(&tnl_hash, local, remote)) != NULL) { - if (new != old) { - new->users++; - TDBG("tunnel %s (%d) from %x:%x:%x:%x:%x:%x:%x:%x " - "to %x:%x:%x:%x:%x:%x:%x:%x user count " - "increased to %d\n", - new->parm.name, new->ifindex, - NIP6ADDR(local), NIP6ADDR(remote), new->users); - } - } else { - new = old; - - if (old->users == 1 && - (res = __tunnel_mod(old, local, remote, link)) < 0 && - (new = __tunnel_add(local, remote, link)) == NULL) { - pthread_mutex_unlock(&tnl_lock); - return -1; - } - } - - if (ext_tunnel_ops && - ext_tunnel_ops(SIOCCHGTUNNEL, - old->ifindex, new->ifindex, data) < 0) { - TDBG("ext_tunnel_ops failed\n"); - - if (old != new) - __tunnel_del(new); - - pthread_mutex_unlock(&tnl_lock); - return -1; - } - - if (old != new) - __tunnel_del(old); - - res = new->ifindex; - pthread_mutex_unlock(&tnl_lock); - return res; - -} - -int tunnelctl_init(void) -{ - int res = 0; - pthread_mutexattr_t mattrs; - - if ((tnl_fd = socket(AF_INET6, SOCK_DGRAM, 0)) < 0) - return -1; - - pthread_mutexattr_init(&mattrs); - pthread_mutexattr_settype(&mattrs, PTHREAD_MUTEX_FAST_NP); - - if (pthread_mutex_init(&tnl_lock, &mattrs)) - return -1; - - pthread_mutex_lock(&tnl_lock); - res = hash_init(&tnl_hash, DOUBLE_ADDR, TNL_BUCKETS); - pthread_mutex_unlock(&tnl_lock); - return res; -} - - -static int tnl_cleanup(void *data, __attribute__ ((unused)) void *arg) -{ - struct mip6_tnl *tnl = (struct mip6_tnl *) data; - list_del(&tnl->list); - hash_delete(&tnl_hash, &tnl->parm.laddr, &tnl->parm.raddr); - free(tnl); - return 0; -} - -void tunnelctl_cleanup(void) -{ - pthread_mutex_lock(&tnl_lock); - hash_iterate(&tnl_hash, tnl_cleanup, NULL); - hash_cleanup(&tnl_hash); - pthread_mutex_unlock(&tnl_lock); - close(tnl_fd); -} - -int tunnel_getusers(int tun_index) -{ - struct mip6_tnl *tnl; - int usercount = -1; - pthread_mutex_lock(&tnl_lock); - - if ((tnl = get_tnl(tun_index)) != NULL) usercount = tnl->users; - - pthread_mutex_unlock(&tnl_lock); - return usercount; -} - diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/src/tunnelctl.h b/openair3/PMIPv6/pmipv6-daemon-umip/src/tunnelctl.h deleted file mode 100755 index 31f0eea7b2..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/src/tunnelctl.h +++ /dev/null @@ -1,37 +0,0 @@ -/* $Id: tunnelctl.h 1.5 06/01/11 10:16:53+02:00 vnuorval@tcs.hut.fi $ */ -#ifndef __TUNNELCTL_H__ -#define __TUNNELCTL_H__ 1 - -int tunnel_add(struct in6_addr *local, - struct in6_addr *remote, - int link, - int (*ext_tunnel_ops)(int request, - int old_if, - int new_if, - void *data), - void *data); - -int tunnel_mod(int ifindex, - struct in6_addr *local, - struct in6_addr *remote, - int link, - int (*ext_tunnel_ops)(int request, - int old_if, - int new_if, - void *data), - void *data); - -int tunnel_del(int ifindex, - int (*ext_tunnel_ops)(int request, - int old_if, - int new_if, - void *data), - void *data); - - -int tunnelctl_init(void); - -void tunnelctl_cleanup(void); - -int tunnel_getusers(int tun_index); -#endif diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/src/util.c b/openair3/PMIPv6/pmipv6-daemon-umip/src/util.c deleted file mode 100755 index add8ff31d4..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/src/util.c +++ /dev/null @@ -1,159 +0,0 @@ -/* - * $Id: icmp6.c 1.42 06/05/06 15:15:47+03:00 anttit@tcs.hut.fi $ - * - * This file is part of the MIPL Mobile IPv6 for Linux. - * - * Authors: Antti Tuominen - * Ville Nuorvala - * - * Copyright 2003-2005 Go-Core Project - * Copyright 2003-2006 Helsinki University of Technology - * - * MIPL Mobile IPv6 for Linux is free software; you can redistribute - * it and/or modify it under the terms of the GNU General Public - * License as published by the Free Software Foundation; version 2 of - * the License. - * - * MIPL Mobile IPv6 for Linux is distributed in the hope that it will - * be useful, but WITHOUT ANY WARRANTY; without even the implied - * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with MIPL Mobile IPv6 for Linux; if not, write to the Free - * Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - * 02111-1307 USA. - */ - -#include "util.h" - -/* Adapted from RFC 1071 "C" Implementation Example */ -uint16_t in6_cksum(const struct in6_addr *src, const struct in6_addr *dst, - const void *data, socklen_t datalen, uint8_t nh) -{ - struct _phdr { - struct in6_addr src; - struct in6_addr dst; - uint32_t plen; - uint8_t reserved[3]; - uint8_t nxt; - } phdr; - - register unsigned long sum = 0; - socklen_t count; - uint16_t *addr; - int i; - - /* Prepare pseudo header for csum */ - memset(&phdr, 0, sizeof(phdr)); - phdr.src = *src; - phdr.dst = *dst; - phdr.plen = htonl(datalen); - phdr.nxt = nh; - - /* caller must make sure datalen is even */ - addr = (uint16_t *)&phdr; - - for (i = 0; i < 20; i++) - sum += *addr++; - - count = datalen; - addr = (uint16_t *)data; - - while (count > 1) { - sum += *(addr++); - count -= 2; - } - - while (sum >> 16) - sum = (sum & 0xffff) + (sum >> 16); - - return (uint16_t)~sum; -} - -unsigned int csum_partial(const void *data, socklen_t datalen, unsigned int sumP) -{ - register unsigned long sum = sumP; - uint16_t *addr; - socklen_t count; - int i; - - count = datalen; - addr = (uint16_t *)data; - - while (count > 1) { - sum += *(addr++); - count -= 2; - } - - /*while (sum >> 16) - sum = (sum & 0xffff) + (sum >> 16); - - return (uint16_t)~sum;*/ - return sum; -} - -uint16_t csum_fold(uint32_t csum) -{ - uint32_t sum = (uint32_t)csum; - sum = (sum & 0xffff) + (sum >> 16); - sum = (sum & 0xffff) + (sum >> 16); - return (uint16_t)~sum; -} - - -uint16_t csum_ipv6_magic(const struct in6_addr *saddr, - const struct in6_addr *daddr, - uint32_t len, unsigned short proto, - uint32_t csum) -{ - - int carry; - uint32_t ulen; - uint32_t uproto; - uint32_t sum = (uint32_t)csum; - - sum += (uint32_t)saddr->s6_addr32[0]; - carry = (sum < (uint32_t)saddr->s6_addr32[0]); - sum += carry; - - sum += (uint32_t)saddr->s6_addr32[1]; - carry = (sum < (uint32_t)saddr->s6_addr32[1]); - sum += carry; - - sum += (uint32_t)saddr->s6_addr32[2]; - carry = (sum < (uint32_t)saddr->s6_addr32[2]); - sum += carry; - - sum += (uint32_t)saddr->s6_addr32[3]; - carry = (sum < (uint32_t)saddr->s6_addr32[3]); - sum += carry; - - sum += (uint32_t)daddr->s6_addr32[0]; - carry = (sum < (uint32_t)daddr->s6_addr32[0]); - sum += carry; - - sum += (uint32_t)daddr->s6_addr32[1]; - carry = (sum < (uint32_t)daddr->s6_addr32[1]); - sum += carry; - - sum += (uint32_t)daddr->s6_addr32[2]; - carry = (sum < (uint32_t)daddr->s6_addr32[2]); - sum += carry; - - sum += (uint32_t)daddr->s6_addr32[3]; - carry = (sum < (uint32_t)daddr->s6_addr32[3]); - sum += carry; - - ulen = (uint32_t)htonl((uint32_t) len); - sum += ulen; - carry = (sum < ulen); - sum += carry; - - uproto = (uint32_t)htonl(proto); - sum += uproto; - carry = (sum < uproto); - sum += carry; - - return csum_fold((uint32_t)sum); -} diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/src/util.h b/openair3/PMIPv6/pmipv6-daemon-umip/src/util.h deleted file mode 100755 index 9d914d6aa8..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/src/util.h +++ /dev/null @@ -1,228 +0,0 @@ -/* $Id: util.h 1.54 06/02/22 16:21:55+02:00 anttit@tcs.hut.fi $ */ - -#ifndef __UTIL_H__ -#define __UTIL_H__ 1 - -#define MAX_PKT_LEN 1540 - -#define TIME_SEC_MSEC 1000 -#define TIME_SEC_NSEC 1000000000 -#define TIME_MSEC_NSEC 1000000 - -#include -#include -#include -#include - -#define tstomsec(tv) \ - ((tv).tv_sec * TIME_SEC_MSEC + (tv).tv_nsec / TIME_MSEC_NSEC) - -#define tstodsec(tv) \ - ((double)(tv).tv_sec + (double)(tv).tv_nsec / TIME_SEC_NSEC) - -#define tsisset(tv) ((tv).tv_sec || (tv).tv_nsec) -#define tsclear(tv) ((tv).tv_sec = (tv).tv_nsec = 0) - -#define tscmp(a, b, CMP) \ -(((a).tv_sec == (b).tv_sec) ? \ - ((a).tv_nsec CMP (b).tv_nsec) : \ - ((a).tv_sec CMP (b).tv_sec)) - -#define tsadd(a, b, result) \ -do { \ - (result).tv_sec = (a).tv_sec + (b).tv_sec; \ - (result).tv_nsec = (a).tv_nsec + (b).tv_nsec; \ - if ((result).tv_nsec >= TIME_SEC_NSEC) { \ - ++(result).tv_sec; \ - (result).tv_nsec -= TIME_SEC_NSEC; \ - } \ -} while (0) - -#define tssub(a, b, result) \ -do { \ - (result).tv_sec = (a).tv_sec - (b).tv_sec; \ - (result).tv_nsec = (a).tv_nsec - (b).tv_nsec; \ - if ((result).tv_nsec < 0) { \ - --(result).tv_sec; \ - (result).tv_nsec += TIME_SEC_NSEC; \ - } \ -} while (0) - -#define tsafter(a, b) tscmp(a,b,<) -#define tsbefore(a, b) tscmp(a,b,>) - -#define tscpy(to, from) \ -do { \ - (to).tv_sec = (from).tv_sec; \ - (to).tv_nsec = (from).tv_nsec; \ -} while (0) - -#define tsset(tv, sec, nsec) \ -do { \ - (tv).tv_sec = (sec); \ - (tv).tv_nsec = (nsec); \ -} while (0) - -#define tssetsec(tv, sec) \ -do { \ - (tv).tv_sec = (sec); \ - (tv).tv_nsec = 0; \ -} while (0) - -#define tssetmsec(tv, msec) \ -do { \ - (tv).tv_sec = (msec) / TIME_SEC_MSEC; \ - (tv).tv_nsec = ((msec) % TIME_SEC_MSEC) * TIME_MSEC_NSEC; \ -} while (0) - -#define tssetdsec(tv, sec) \ -do { \ - (tv).tv_sec = (long)(sec); \ - (tv).tv_nsec = (long)(((sec)-(tv).tv_sec) * TIME_SEC_NSEC); \ -} while (0) - - -#define tsinc(tv, sec, nsec) \ -do { \ - (tv).tv_sec += (sec); \ - (tv).tv_nsec += (nsec); \ - if ((tv).tv_nsec >= TIME_SEC_NSEC) { \ - ++(tv).tv_sec; \ - (tv).tv_nsec -= TIME_SEC_NSEC; \ - } \ -} while (0) - -#define tsincmsec(tv, msec) \ -do { \ - (tv).tv_sec += (msec) / TIME_SEC_MSEC; \ - (tv).tv_nsec += ((msec) % TIME_SEC_MSEC) * TIME_MSEC_NSEC; \ - if ((tv).tv_nsec >= TIME_SEC_NSEC) { \ - ++(tv).tv_sec; \ - (tv).tv_nsec -= TIME_SEC_NSEC; \ - } \ -} while (0) - -#define tsdec(tv, sec, nsec) \ -do { \ - (tv).tv_sec -= sec; \ - (tv).tv_nsec -= nsec; \ - if ((tv).tv_nsec < 0) { \ - --(tv).tv_sec; \ - (tv).tv_nsec += TIME_SEC_NSEC; \ - } \ -} while (0) - -#define tsdecmsec(tv, msec) \ -do { \ - (tv).tv_sec -= (msec) / TIME_SEC_MSEC; \ - (tv).tv_nsec -= ((msec) % TIME_SEC_MSEC) * TIME_MSEC_NSEC; \ - if ((tv).tv_nsec < 0) { \ - --(tv).tv_sec; \ - (tv).tv_nsec += TIME_SEC_NSEC; \ - } \ -} while (0) - -#define tsmin(a, b) tsbefore((a), (b)) ? (b) : (a) - -#define tsmax(a, b) tsafter((a), (b)) ? (b) : (a) - -extern const char loopback_dev_name[]; - -extern const struct in6_addr in6addr_all_nodes_mc; /* ff02::1 */ -extern const struct in6_addr in6addr_all_routers_mc; /* ff02::2 */ - -/* Following 4 routines are taken from include/net/ipv6.h */ - -static inline void ipv6_addr_set(struct in6_addr *addr, - uint32_t w1, uint32_t w2, - uint32_t w3, uint32_t w4) -{ - addr->s6_addr32[0] = w1; - addr->s6_addr32[1] = w2; - addr->s6_addr32[2] = w3; - addr->s6_addr32[3] = w4; -} - -static inline void ipv6_addr_solict_mult(const struct in6_addr *addr, - struct in6_addr *solicited) -{ - ipv6_addr_set(solicited, htonl(0xFF020000), 0, htonl(0x1), - htonl(0xFF000000) | addr->s6_addr32[3]); -} - -static inline void ipv6_addr_llocal(const struct in6_addr *addr, - struct in6_addr *llocal) -{ - ipv6_addr_set(llocal, htonl(0xFE800000), 0, - addr->s6_addr32[2], addr->s6_addr32[3]); -} - -static inline int in6_is_addr_routable_unicast(const struct in6_addr *a) -{ - return ((!IN6_IS_ADDR_UNSPECIFIED(a) && - !IN6_IS_ADDR_LOOPBACK(a) && - !IN6_IS_ADDR_MULTICAST(a) && - !IN6_IS_ADDR_LINKLOCAL(a))); -} - -#define NIP6ADDR(addr) \ - ntohs((addr)->s6_addr16[0]), \ - ntohs((addr)->s6_addr16[1]), \ - ntohs((addr)->s6_addr16[2]), \ - ntohs((addr)->s6_addr16[3]), \ - ntohs((addr)->s6_addr16[4]), \ - ntohs((addr)->s6_addr16[5]), \ - ntohs((addr)->s6_addr16[6]), \ - ntohs((addr)->s6_addr16[7]) - -/** - * free_iov_data - free vector data - * @iov: vector array - * @count: number of elements in array - * - * Frees an array of iovec data, specified by @iov with @count - * elements. Does not free actual array, only iov_base. - **/ -static inline void free_iov_data(struct iovec *iov, int count) -{ - if (iov == NULL) return; - - while (count--) { - if (iov[count].iov_base) - free(iov[count].iov_base); - } -} - -static inline unsigned long umin(unsigned long a, unsigned long b) -{ - return (a < b) ? a : b; -} - -static inline long min(long a, long b) -{ - return (a < b) ? a : b; -} - -static inline long max(long a, long b) -{ - return (a > b) ? a : b; -} - -uint16_t in6_cksum(const struct in6_addr *src, const struct in6_addr *dst, - const void *data, socklen_t datalen, uint8_t nh); - -unsigned int csum_partial(const void *data, socklen_t datalen, unsigned int sum); - -uint16_t csum_ipv6_magic(const struct in6_addr *saddr, - const struct in6_addr *daddr, - uint32_t len, unsigned short proto, - uint32_t csum); -/* - * XXX: These may be missing on kernel header because either kernel is not - * ready or should be removed since kernel will never support it. - */ -#ifndef RTPROT_MIP -#define RTPROT_MIP 16 -#endif - -#endif /* __UTIL_H__ */ diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/src/vars.c b/openair3/PMIPv6/pmipv6-daemon-umip/src/vars.c deleted file mode 100755 index 7a23a2af9c..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/src/vars.c +++ /dev/null @@ -1,35 +0,0 @@ -/* $Id: vars.c 1.2 06/02/28 18:36:44+02:00 anttit@tcs.hut.fi $ */ -#ifdef HAVE_CONFIG_H -#include -#endif - -#include -#include -#include "mipv6.h" - -const struct timespec initial_bindack_timeout_ts = -{ INITIAL_BINDACK_TIMEOUT, 0 }; -const struct timespec initial_dhaad_timeout_ts = -{ INITIAL_DHAAD_TIMEOUT, 0 }; -const struct timespec initial_solicit_timer_ts = -{ INITIAL_SOLICIT_TIMER, 0 }; -const struct timespec max_bindack_timeout_ts = -{ MAX_BINDACK_TIMEOUT, 0 }; -const struct timespec max_nonce_lifetime_ts = -{ MAX_NONCE_LIFETIME, 0 }; -const struct timespec max_token_lifetime_ts = -{ MAX_TOKEN_LIFETIME, 0 }; -const struct timespec max_rr_binding_lifetime_ts = -{ MAX_RR_BINDING_LIFETIME, 0 }; -const struct timespec prefix_adv_timeout_ts = -{ PREFIX_ADV_TIMEOUT, 0 }; - -const char loopback_dev_name[] = "lo"; - -#define IN6ADDR_ALL_NODES_MC_INIT \ - { { { 0xff,0x02,0,0,0,0,0,0,0,0,0,0,0,0,0,0x1 } } } -#define IN6ADDR_ALL_ROUTERS_MC_INIT \ - { { { 0xff,0x02,0,0,0,0,0,0,0,0,0,0,0,0,0,0x2 } } } - -const struct in6_addr in6addr_all_nodes_mc = IN6ADDR_ALL_NODES_MC_INIT; -const struct in6_addr in6addr_all_routers_mc = IN6ADDR_ALL_ROUTERS_MC_INIT; diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/src/vt.c b/openair3/PMIPv6/pmipv6-daemon-umip/src/vt.c deleted file mode 100755 index 3263b15ae7..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/src/vt.c +++ /dev/null @@ -1,2077 +0,0 @@ -/* - * Copyright (C)2004,2005 USAGI/WIDE Project - * Copyright (C)2005 Go-Core Project - * Copyright (C)2005,2006 Helsinki University of Technology - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ -/* - * Authors: - * Noriaki TAKAMIYA @USAGI - * Masahide NAKAMURA @USAGI - * Ville Nuorvala @HUT - */ - -/* - * VT server performs select(2) and only one client access is allowed. - * To be accept multiple connect, fix "vt_connect_handle". - */ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "list.h" -#include "util.h" -#include "debug.h" -#include "conf.h" -#include "vt.h" -#include "mh.h" -#include "bul.h" -#include "retrout.h" -#include "bcache.h" -#include "prefix.h" -#include "ha.h" -#include "cn.h" -#include "mn.h" -#include "mpdisc_mn.h" -#include "mpdisc_ha.h" -#include "statistics.h" -#include "pmip_cache.h" - -#define VT_PKT_BUFLEN (8192) -#define VT_REPLY_BUFLEN (LINE_MAX) -#define VT_SERVER_BACKLOG (1) -#define VT_CMD_PROMPT ("mip6d> ") -#define VT_CMD_HELP_STR ("help") -#define VT_CMD_HELP_LINE_MAX (60) - -struct vt_server_entry { - struct list_head list; - int vse_sock; - union { - struct sockaddr sa; - struct sockaddr_storage ss; - } vse_sockaddr; - socklen_t vse_sockaddrlen; - -#define vse_sa vse_sockaddr.sa -#define vse_salen vse_sockaddrlen -}; - -static pthread_rwlock_t vt_lock; -static pthread_t vt_listener; - -static struct vt_cmd_entry vt_cmd_root; - -static LIST_HEAD(vt_server_list); -static struct vt_handle *vt_connect_handle = NULL; - -static int vt_server_fini(void); -static int vt_connect_close(struct vt_handle *vh); - -/* Find a handle which is able to be modified */ -static struct vt_handle *vt_handle_get(void) -{ - return vt_connect_handle; -} - -static int vt_handle_full(void) -{ - if (vt_connect_handle != NULL) - return 1; - else - return 0; -} - -static int vt_handle_add(struct vt_handle *vh) -{ - if (vt_connect_handle != NULL) { - return -EINVAL; - } - - vt_connect_handle = vh; - return 0; -} - -#define VTDECOR_B_START vh->vh_opt.fancy == VT_BOOL_TRUE ? "\033[1m" : "" -#define VTDECOR_BU_START vh->vh_opt.fancy == VT_BOOL_TRUE ? "\033[1;4m" : "" -#define VTDECOR_END vh->vh_opt.fancy == VT_BOOL_TRUE ? "\033[0m" : "" - -ssize_t fprintf_decor(int decor, const struct vt_handle *vh, - const char *fmt, ...) -{ - char buf[VT_REPLY_BUFLEN]; - va_list ap; - - va_start(ap, fmt); - vsprintf(buf, fmt, ap); - va_end(ap); - - return fprintf(vh->vh_stream, "%s%s%s", - decor == VTDECOR_B ? VTDECOR_B_START :VTDECOR_BU_START, - buf, VTDECOR_END); -} - -static const char *yes = "yes"; -static const char *no = "no"; - -static const char *bool_str(vt_bool_t b) -{ - return b == VT_BOOL_TRUE ? yes : no; -} - -static int vt_cmd_sys_fancy_off(const struct vt_handle *vh, - __attribute__ ((unused)) const char *str) -{ - struct vt_handle *sysvh = vt_handle_get(); - sysvh->vh_opt.fancy = VT_BOOL_FALSE; - fprintf(vh->vh_stream, "%s\n", bool_str(sysvh->vh_opt.fancy)); - return 0; -} - -static int vt_cmd_sys_fancy_on(const struct vt_handle *vh, - __attribute__ ((unused)) const char *str) -{ - struct vt_handle *sysvh = vt_handle_get(); - sysvh->vh_opt.fancy = VT_BOOL_TRUE; - fprintf(vh->vh_stream, "%s\n", bool_str(sysvh->vh_opt.fancy)); - return 0; -} - -static int vt_cmd_sys_fancy(const struct vt_handle *vh, - __attribute__ ((unused)) const char *str) -{ - struct vt_handle *sysvh = vt_handle_get(); - fprintf(vh->vh_stream, "%s\n", bool_str(sysvh->vh_opt.fancy)); - return 0; -} - -static int vt_cmd_sys_verbose_off(const struct vt_handle *vh, - __attribute__ ((unused)) const char *str) -{ - struct vt_handle *sysvh = vt_handle_get(); - sysvh->vh_opt.verbose = VT_BOOL_FALSE; - fprintf(vh->vh_stream, "%s\n", bool_str(sysvh->vh_opt.verbose)); - return 0; -} - -static int vt_cmd_sys_verbose_on(const struct vt_handle *vh, - __attribute__ ((unused)) const char *str) -{ - struct vt_handle *sysvh = vt_handle_get(); - sysvh->vh_opt.verbose = VT_BOOL_TRUE; - fprintf(vh->vh_stream, "%s\n", bool_str(sysvh->vh_opt.verbose)); - return 0; -} - -static int vt_cmd_sys_verbose(const struct vt_handle *vh, - __attribute__ ((unused)) const char *str) -{ - struct vt_handle *sysvh = vt_handle_get(); - fprintf(vh->vh_stream, "%s\n", bool_str(sysvh->vh_opt.verbose)); - return 0; -} - -static int vt_cmd_sys_prompt_off(const struct vt_handle *vh, - __attribute__ ((unused)) const char *str) -{ - struct vt_handle *sysvh = vt_handle_get(); - sysvh->vh_opt.prompt = VT_BOOL_FALSE; - fprintf(vh->vh_stream, "%s\n", bool_str(sysvh->vh_opt.prompt)); - return 0; -} - -static int vt_cmd_sys_prompt_on(const struct vt_handle *vh, - __attribute__ ((unused)) const char *str) -{ - struct vt_handle *sysvh = vt_handle_get(); - sysvh->vh_opt.prompt = VT_BOOL_TRUE; - fprintf(vh->vh_stream, "%s\n", bool_str(sysvh->vh_opt.prompt)); - return 0; -} - -static int vt_cmd_sys_prompt(const struct vt_handle *vh, - __attribute__ ((unused)) const char *str) -{ - struct vt_handle *sysvh = vt_handle_get(); - fprintf(vh->vh_stream, "%s\n", bool_str(sysvh->vh_opt.prompt)); - return 0; -} - -static int vt_cmd_showstats(const struct vt_handle *vh, __attribute__ ((unused)) const char *str) -{ - pthread_mutex_lock(&mipl_stat.lock); - fprintf(vh->vh_stream, "Input Statistics:\n"); - fprintf(vh->vh_stream, " %lu Mobility Headers\n", - mipl_stat.values[MIPL_STATISTICS_IN_MH]); - fprintf(vh->vh_stream, " %lu HoTI messages\n", - mipl_stat.values[MIPL_STATISTICS_IN_HOTI]); - fprintf(vh->vh_stream, " %lu CoTI messages\n", - mipl_stat.values[MIPL_STATISTICS_IN_COTI]); - fprintf(vh->vh_stream, " %lu HoT messages\n", - mipl_stat.values[MIPL_STATISTICS_IN_HOT]); - fprintf(vh->vh_stream, " %lu CoT messages\n", - mipl_stat.values[MIPL_STATISTICS_IN_COT]); - fprintf(vh->vh_stream, " %lu BU messages\n", - mipl_stat.values[MIPL_STATISTICS_IN_BU]); - fprintf(vh->vh_stream, " %lu BA messages\n", - mipl_stat.values[MIPL_STATISTICS_IN_BA]); - fprintf(vh->vh_stream, " %lu BR messages\n", - mipl_stat.values[MIPL_STATISTICS_IN_BRR]); - fprintf(vh->vh_stream, " %lu BE messages\n", - mipl_stat.values[MIPL_STATISTICS_IN_BE]); - - fprintf(vh->vh_stream, " %lu DHAAD request\n", - mipl_stat.values[MIPL_STATISTICS_IN_DHAAD_REQ]); - fprintf(vh->vh_stream, " %lu DHAAD reply\n", - mipl_stat.values[MIPL_STATISTICS_IN_DHAAD_REP]); - fprintf(vh->vh_stream, " %lu MPA\n", 0L); - fprintf(vh->vh_stream, " %lu MPS\n", 0L); - fprintf(vh->vh_stream, " %lu Home Address Option\n", - mipl_stat.values[MIPL_STATISTICS_IN_HAO]); - fprintf(vh->vh_stream, " %lu unverified Home Address Option\n", - mipl_stat.values[MIPL_STATISTICS_IN_X_HAO]); - fprintf(vh->vh_stream, " %lu Routing Header type 2\n", - mipl_stat.values[MIPL_STATISTICS_IN_RH2]); - - fprintf(vh->vh_stream, " %lu reverse tunnel input\n", - mipl_stat.values[MIPL_STATISTICS_IN_RTUN]); - fprintf(vh->vh_stream, " %lu bad MH checksum\n", - mipl_stat.values[MIPL_STATISTICS_IN_X_MH_CHK]); - fprintf(vh->vh_stream, " %lu bad payload protocol\n", - mipl_stat.values[MIPL_STATISTICS_IN_X_PAYLOAD]); - fprintf(vh->vh_stream, " %lu unknown MH type\n", - mipl_stat.values[MIPL_STATISTICS_IN_UNKNOWN_MH]); - fprintf(vh->vh_stream, " %lu not my home address\n", - mipl_stat.values[MIPL_STATISTICS_IN_NOT_HOA]); - fprintf(vh->vh_stream, " %lu no related binding update entry\n", - mipl_stat.values[MIPL_STATISTICS_IN_NO_BU]); - fprintf(vh->vh_stream, " %lu home init cookie mismatch\n", - mipl_stat.values[MIPL_STATISTICS_IN_X_H_COOKIE]); - fprintf(vh->vh_stream, " %lu careof init cookie mismatch\n", - mipl_stat.values[MIPL_STATISTICS_IN_X_C_COOKIE]); - fprintf(vh->vh_stream, " %lu unprotected binding signaling packets\n", - mipl_stat.values[MIPL_STATISTICS_IN_UNSAFEBU]); - fprintf(vh->vh_stream, " %lu BUs discarded due to bad HAO\n", - mipl_stat.values[MIPL_STATISTICS_IN_X_BU_HAO]); - fprintf(vh->vh_stream, " %lu RR authentication failed\n", - mipl_stat.values[MIPL_STATISTICS_IN_RR_FAIL]); - fprintf(vh->vh_stream, " %lu seqno mismatch\n", - mipl_stat.values[MIPL_STATISTICS_IN_X_SEQ]); - fprintf(vh->vh_stream, " %lu parameter problem for HAO\n", - mipl_stat.values[MIPL_STATISTICS_IN_X_HAO_PARAM]); - fprintf(vh->vh_stream, " %lu parameter problem for MH\n", - mipl_stat.values[MIPL_STATISTICS_IN_X_MH_PARAM]); - fprintf(vh->vh_stream, " %lu Invalid Care-of address\n", - mipl_stat.values[MIPL_STATISTICS_IN_X_COA]); - fprintf(vh->vh_stream, " %lu Invalid mobility options\n", - mipl_stat.values[MIPL_STATISTICS_IN_X_MOBOPT]); - - fprintf(vh->vh_stream, "Output Statistics:\n"); - - fprintf(vh->vh_stream, " %lu Mobility Headers\n", - mipl_stat.values[MIPL_STATISTICS_OUT_MH]); - fprintf(vh->vh_stream, " %lu HoTI messages\n", - mipl_stat.values[MIPL_STATISTICS_OUT_HOTI]); - fprintf(vh->vh_stream, " %lu CoTI messages\n", - mipl_stat.values[MIPL_STATISTICS_OUT_COTI]); - fprintf(vh->vh_stream, " %lu HoT messages\n", - mipl_stat.values[MIPL_STATISTICS_OUT_HOT]); - fprintf(vh->vh_stream, " %lu CoT messages\n", - mipl_stat.values[MIPL_STATISTICS_OUT_COT]); - fprintf(vh->vh_stream, " %lu BU messages\n", - mipl_stat.values[MIPL_STATISTICS_OUT_BU]); - fprintf(vh->vh_stream, " %lu BA messages\n", - mipl_stat.values[MIPL_STATISTICS_OUT_BA]); - fprintf(vh->vh_stream, " %lu BR messages\n", - mipl_stat.values[MIPL_STATISTICS_OUT_BRR]); - fprintf(vh->vh_stream, " %lu BE messages\n", - mipl_stat.values[MIPL_STATISTICS_OUT_BE]); - - fprintf(vh->vh_stream, " %lu DHAAD request\n", - mipl_stat.values[MIPL_STATISTICS_OUT_DHAAD_REQ]); - fprintf(vh->vh_stream, " %lu DHAAD reply\n", - mipl_stat.values[MIPL_STATISTICS_OUT_DHAAD_REP]); - fprintf(vh->vh_stream, " %lu MPA\n", - mipl_stat.values[MIPL_STATISTICS_OUT_MPA]); - fprintf(vh->vh_stream, " %lu MPS\n", - mipl_stat.values[MIPL_STATISTICS_OUT_MPS]); - fprintf(vh->vh_stream, " %lu Home Address Option\n", - mipl_stat.values[MIPL_STATISTICS_OUT_HAO]); - fprintf(vh->vh_stream, " %lu Routing Header type 2\n", - mipl_stat.values[MIPL_STATISTICS_OUT_RH2]); - fprintf(vh->vh_stream, " %lu reverse tunneled input\n", - mipl_stat.values[MIPL_STATISTICS_OUT_RTUN]); - - pthread_mutex_unlock(&mipl_stat.lock); - - return 0; -} - -static int vt_cmd_sys_quit(const struct vt_handle *vh, - __attribute__ ((unused)) const char *str) -{ - struct vt_handle *sysvh = vt_handle_get(); - - if (strlen(str) > 0) { - int ret = fprintf(vh->vh_stream, "unknown args\n"); - - if (ret < 0) - return ret; - - return 0; - } - - vt_connect_close(sysvh); - return 0; -} - -static struct vt_cmd_entry vt_cmd_quit = { - .cmd = "quit", - .cmd_alias = "exit", - .parser = vt_cmd_sys_quit, -}; - -static struct vt_cmd_entry vt_cmd_prompt = { - .cmd = "prompt", - .parser = vt_cmd_sys_prompt, -}; - -static struct vt_cmd_entry vt_cmd_prompt_on = { - .cmd = "yes", - .cmd_alias = "y", - .parser = vt_cmd_sys_prompt_on, -}; - -static struct vt_cmd_entry vt_cmd_prompt_off = { - .cmd = "no", - .cmd_alias = "n", - .parser = vt_cmd_sys_prompt_off, -}; - -static struct vt_cmd_entry vt_cmd_verbose = { - .cmd = "verbose", - .parser = vt_cmd_sys_verbose, -}; - -static struct vt_cmd_entry vt_cmd_verbose_on = { - .cmd = "yes", - .cmd_alias = "y", - .parser = vt_cmd_sys_verbose_on, -}; - -static struct vt_cmd_entry vt_cmd_verbose_off = { - .cmd = "no", - .cmd_alias = "n", - .parser = vt_cmd_sys_verbose_off, -}; - -static struct vt_cmd_entry vt_cmd_fancy = { - .cmd = "fancy", - .parser = vt_cmd_sys_fancy, -}; - -static struct vt_cmd_entry vt_cmd_fancy_on = { - .cmd = "yes", - .cmd_alias = "y", - .parser = vt_cmd_sys_fancy_on, -}; - -static struct vt_cmd_entry vt_cmd_fancy_off = { - .cmd = "no", - .cmd_alias = "n", - .parser = vt_cmd_sys_fancy_off, -}; - -static struct vt_cmd_entry vt_cmd_stats = { - .cmd = "stats", - .parser = vt_cmd_showstats, -}; - -static int vt_cmd_sys_init(void) -{ - int ret; - - INIT_LIST_HEAD(&vt_cmd_root.list); - vt_cmd_root.parent = NULL; - INIT_LIST_HEAD(&vt_cmd_root.child_list); - - ret = vt_cmd_add_root(&vt_cmd_quit); - - if (ret < 0) - return ret; - - ret = vt_cmd_add_root(&vt_cmd_prompt); - - if (ret < 0) - return ret; - - ret = vt_cmd_add(&vt_cmd_prompt, &vt_cmd_prompt_on); - - if (ret < 0) - return ret; - - ret = vt_cmd_add(&vt_cmd_prompt, &vt_cmd_prompt_off); - - if (ret < 0) - return ret; - - ret = vt_cmd_add_root(&vt_cmd_verbose); - - if (ret < 0) - return ret; - - ret = vt_cmd_add(&vt_cmd_verbose, &vt_cmd_verbose_on); - - if (ret < 0) - return ret; - - ret = vt_cmd_add(&vt_cmd_verbose, &vt_cmd_verbose_off); - - if (ret < 0) - return ret; - - ret = vt_cmd_add_root(&vt_cmd_fancy); - - if (ret < 0) - return ret; - - ret = vt_cmd_add(&vt_cmd_fancy, &vt_cmd_fancy_on); - - if (ret < 0) - return ret; - - ret = vt_cmd_add(&vt_cmd_fancy, &vt_cmd_fancy_off); - - if (ret < 0) - return ret; - - ret = vt_cmd_add_root(&vt_cmd_stats); - - if (ret < 0) - return ret; - - return 0; -} - -static int vt_cmd_dump_candidates(const struct vt_handle *vh, - const struct vt_cmd_entry *ent, int line_max) -{ - const char sep[] = " "; - const int seplen = strlen(sep); - int llen = 0; - int n = 0; - int ret; - struct list_head *lp; - - list_for_each (lp, &ent->child_list) { - const struct vt_cmd_entry *e; - int cmdlen; - - e = list_entry(lp, const struct vt_cmd_entry, list); - - if (!e->cmd) - continue; - - cmdlen = strlen(e->cmd); - - /* check whether new-line is needed or not */ - if (n > 0) { - if (llen + seplen + cmdlen >= line_max) { - ret = fprintf(vh->vh_stream, "\n"); - llen = 0; - } else { - /* add a separator */ - ret = fprintf(vh->vh_stream, sep); - llen += seplen; - } - - if (ret < 0) - return ret; - } - - llen += cmdlen; - - ret = fprintf(vh->vh_stream, e->cmd); - - if (ret < 0) - return ret; - - n++; - } - - ret = fprintf(vh->vh_stream, "\n"); - - if (ret < 0) - return ret; - - return 0; -} - - -struct bul_vt_arg { - const struct vt_handle *vh; -}; - -static int bul_vt_dump(void *data, void *arg) -{ - struct bulentry *bule = (struct bulentry *)data; - struct bul_vt_arg *bva = (struct bul_vt_arg *)arg; - const struct vt_handle *vh = bva->vh; - struct timespec ts_now; - int ts_now_broken = 0; - - dump_bule(data, vh->vh_stream); - - fprintf(vh->vh_stream, " ack %s", (bule->wait_ack) ? "wait" : "ready"); - - if (!(bule->flags & IP6_MH_BU_HOME)) { - fprintf(vh->vh_stream, " RR state %s", - (bule->rr.state == RR_READY) ? "ready" : - (bule->rr.state == RR_STARTED) ? "started" : - (bule->rr.state == RR_H_EXPIRED) ? - "home nonce expired" : - (bule->rr.state == RR_C_EXPIRED) ? - "care-of nonce expired" : - (bule->rr.state == RR_C_EXPIRED) ? - "care-of nonce expired" : - (bule->rr.state == RR_C_EXPIRED) ? "expired" : - (bule->rr.state == RR_C_EXPIRED) ? "none" : "?"); - } - - fprintf(vh->vh_stream, "\n"); - - if (vh->vh_opt.verbose == VT_BOOL_TRUE) { - char buf[IF_NAMESIZE + 1]; - char *dev = if_indextoname(bule->if_coa, buf); - - fprintf(vh->vh_stream, " dev "); - - if (!dev || strlen(dev) == 0) - fprintf(vh->vh_stream, "(%d)", bule->if_coa); - else - fprintf(vh->vh_stream, "%s", dev); - - fprintf(vh->vh_stream, " last_coa %x:%x:%x:%x:%x:%x:%x:%x", - NIP6ADDR(&bule->last_coa)); - - fprintf(vh->vh_stream, "\n"); - - if (!(bule->flags & IP6_MH_BU_HOME)) { - fprintf(vh->vh_stream, "care-of nonce index %u", - bule->rr.co_ni); - - fprintf(vh->vh_stream, "home nonce index %u", - bule->rr.ho_ni); - - fprintf(vh->vh_stream, "\n"); - } - } - - if (clock_gettime(CLOCK_REALTIME, &ts_now) != 0) - ts_now_broken = 1; - - fprintf(vh->vh_stream, " lifetime "); - - if (!ts_now_broken) { - if (tsafter(ts_now, bule->lastsent)) - fprintf(vh->vh_stream, "(broken)"); - else { - struct timespec ts; - - tssub(ts_now, bule->lastsent, ts); - tssub(bule->lifetime, ts, ts); - fprintf(vh->vh_stream, "%ld", ts.tv_sec); - } - } else - fprintf(vh->vh_stream, "(error)"); - - fprintf(vh->vh_stream, " / %ld", bule->lifetime.tv_sec); - - fprintf(vh->vh_stream, " seq %u", bule->seq); - - fprintf(vh->vh_stream, " resend %d", bule->consecutive_resends); - fprintf(vh->vh_stream, " delay %ld(after %lds)", bule->delay.tv_sec, - bule->lastsent.tv_sec + - bule->delay.tv_sec - ts_now.tv_sec); - - if (vh->vh_opt.verbose == VT_BOOL_TRUE) { - fprintf(vh->vh_stream, " expires "); - - if (tsisset(bule->expires)) { - if (!ts_now_broken) { - struct timespec ts; - tssub(bule->expires, ts_now, ts); - fprintf(vh->vh_stream, "%ld", ts.tv_sec); - } else - fprintf(vh->vh_stream, "(error)"); - } else - fprintf(vh->vh_stream, "-"); - } - - fprintf(vh->vh_stream, "\n"); - - if ((bule->flags & IP6_MH_BU_HOME) && !ts_now_broken) { - struct timespec delay, lastsent; - - if (!mpd_poll_mps(&bule->hoa, - &bule->peer_addr, &delay, &lastsent)) { - fprintf(vh->vh_stream, " mps "); - - if (tsafter(ts_now, lastsent)) - fprintf(vh->vh_stream, "(broken)"); - else { - struct timespec ts; - tssub(ts_now, lastsent, ts); - tssub(delay, ts, ts); - fprintf(vh->vh_stream, "%ld", ts.tv_sec); - } - - fprintf(vh->vh_stream, " / %ld", delay.tv_sec); - } - } - - fprintf(vh->vh_stream, "\n"); - fflush(vh->vh_stream); - - return 0; -} - -static int bul_vt_cmd_bul(const struct vt_handle *vh, const char *str) -{ - struct bul_vt_arg bva; - bva.vh = vh; - - if (strlen(str) > 0) { - fprintf(vh->vh_stream, "unknown args\n"); - return 0; - } - - pthread_rwlock_rdlock(&mn_lock); - bul_iterate(NULL, bul_vt_dump, &bva); - pthread_rwlock_unlock(&mn_lock); - return 0; -} - -static int bul_vt_cmd_rr(const struct vt_handle *vh, const char *str) -{ - if (strlen(str) > 0) { - fprintf(vh->vh_stream, "unknown args\n"); - return 0; - } - - pthread_rwlock_rdlock(&mn_lock); - rrl_dump(vh->vh_stream); - pthread_rwlock_unlock(&mn_lock); - return 0; -} - -static struct vt_cmd_entry vt_cmd_bul = { - .cmd = "bul", - .parser = bul_vt_cmd_bul, -}; - -static struct vt_cmd_entry vt_cmd_rr = { - .cmd = "rr", - .parser = bul_vt_cmd_rr, -}; - -struct bcache_vt_arg { - const struct vt_handle *vh; - int is_nb; -}; - -static int bcache_vt_dump(void *data, void *arg) -{ - struct bcentry *bce = (struct bcentry *)data; - struct bcache_vt_arg *bva = (struct bcache_vt_arg *)arg; - const struct vt_handle *vh = bva->vh; - int is_nb = bva->is_nb; - struct timespec ts_now; - - if (is_nb) { - if (bce->type != BCE_NONCE_BLOCK) - return 0; - } else { - if (bce->type == BCE_NONCE_BLOCK) - return 0; - } - - tsclear(ts_now); - - fprintf_bl(vh, "hoa %x:%x:%x:%x:%x:%x:%x:%x", - NIP6ADDR(&bce->peer_addr)); - - if (vh->vh_opt.verbose == VT_BOOL_TRUE) - fprintf(vh->vh_stream, " nonce %u", bce->nonce_hoa); - - fprintf_b(vh, " status %s", - (bce->type == BCE_HOMEREG) ? "registered" : - (bce->type == BCE_CACHED) ? "cached" : - (bce->type == BCE_NONCE_BLOCK) ? "nonce-block" : - (bce->type == BCE_CACHE_DYING) ? "dying" : - (bce->type == BCE_DAD) ? "dad" : - "(unknown)"); - - fprintf(vh->vh_stream, "\n"); - - fprintf(vh->vh_stream, " coa %x:%x:%x:%x:%x:%x:%x:%x", - NIP6ADDR(&bce->coa)); - - if (vh->vh_opt.verbose == VT_BOOL_TRUE) - fprintf(vh->vh_stream, " nonce %u", bce->nonce_coa); - - fprintf(vh->vh_stream, " flags %c%c%c%c", - ((bce->flags & IP6_MH_BU_ACK) ? 'A' : '-'), - ((bce->flags & IP6_MH_BU_HOME) ? 'H' : '-'), - ((bce->flags & IP6_MH_BU_LLOCAL) ? 'L' : '-'), - ((bce->flags & IP6_MH_BU_KEYM) ? 'K' : '-')); - - fprintf(vh->vh_stream, "\n"); - - fprintf(vh->vh_stream, " local %x:%x:%x:%x:%x:%x:%x:%x", - NIP6ADDR(&bce->our_addr)); - - if (vh->vh_opt.verbose == VT_BOOL_TRUE) { - char buf[IF_NAMESIZE + 1]; - char *dev; - - if (bce->tunnel) { - fprintf(vh->vh_stream, " tunnel "); - - dev = if_indextoname(bce->tunnel, buf); - - if (!dev || strlen(dev) == 0) - fprintf(vh->vh_stream, "(%d)", bce->tunnel); - else - fprintf(vh->vh_stream, "%s", dev); - } - - if (bce->link) { - fprintf(vh->vh_stream, " link "); - - dev = if_indextoname(bce->link, buf); - - if (!dev || strlen(dev) == 0) - fprintf(vh->vh_stream, "(%d)", bce->link); - else - fprintf(vh->vh_stream, "%s", dev); - } - } - - fprintf(vh->vh_stream, "\n"); - - fprintf(vh->vh_stream, " lifetime "); - - if (bce->type == BCE_DAD) - fprintf(vh->vh_stream, "-"); - else if (clock_gettime(CLOCK_REALTIME, &ts_now) != 0) - fprintf(vh->vh_stream, "(error)"); - else { - if (tsafter(ts_now, bce->add_time)) - fprintf(vh->vh_stream, "(broken)"); - else { - struct timespec ts; - - tssub(ts_now, bce->add_time, ts); - - /* "ts" is now time how log it alives */ - if (tsafter(bce->lifetime, ts)) { - tssub(ts, bce->lifetime, ts); - fprintf(vh->vh_stream, "-%ld", ts.tv_sec); - } else { - tssub(bce->lifetime, ts, ts); - fprintf(vh->vh_stream, "%ld", ts.tv_sec); - } - } - } - - fprintf(vh->vh_stream, " / %ld", bce->lifetime.tv_sec); - - fprintf(vh->vh_stream, " seq %u", bce->seqno); - - fprintf(vh->vh_stream, " unreach %d", bce->unreach); - - if ((bce->flags & IP6_MH_BU_HOME) && tsisset(ts_now)) { - struct timespec delay, lastsent; - int retries = mpd_poll_mpa(&bce->our_addr, &bce->peer_addr, - &delay, &lastsent); - - if (retries >= 0) { - fprintf(vh->vh_stream, " mpa "); - - if (!tsisset(lastsent)) - fprintf(vh->vh_stream, "-"); - else if (tsafter(ts_now, lastsent)) - fprintf(vh->vh_stream, "(broken)"); - else { - struct timespec ts; - - tssub(ts_now, lastsent, ts); - - /* "ts" is now time how log it alives */ - if (tsafter(delay, ts)) { - tssub(ts, delay, ts); - fprintf(vh->vh_stream, "-%ld", ts.tv_sec); - } else { - tssub(delay, ts, ts); - fprintf(vh->vh_stream, "%ld", ts.tv_sec); - } - } - } - - fprintf(vh->vh_stream, " / %ld", delay.tv_sec); - fprintf(vh->vh_stream, " retry %d", retries); - } - - fprintf(vh->vh_stream, "\n"); - - /* Dump the registered MNP */ - { - struct list_head *l; - list_for_each(l, &bce->mob_net_prefixes) { - struct prefix_list_entry *p; - p = list_entry(l, struct prefix_list_entry, list); - fprintf(vh->vh_stream, " MNP: %x:%x:%x:%x:%x:%x:%x:%x/%d\n", - NIP6ADDR(&p->ple_prefix), p->ple_plen); - } - } - - return 0; -} - -////////////////////////////////////////////////// -//Defined for PMIP/////////////////////////////// -///////////////////////////////////////////////// -struct pmip_cache_vt_arg { - const struct vt_handle *vh; -}; - -static int pmip_cache_vt_dump(void *data, void *arg) -{ - pmip_entry_t *bce = (pmip_entry_t *)data; - struct pmip_cache_vt_arg *bva = (struct pmip_cache_vt_arg *)arg; - const struct vt_handle *vh = bva->vh; - struct timespec ts_now; - - tsclear(ts_now); - - fprintf_bl(vh, "peer_addr %x:%x:%x:%x:%x:%x:%x:%x", - NIP6ADDR(&bce->mn_addr)); - //NIP6ADDR(&bce->mn_suffix)); - - - fprintf_b(vh, " status %s", - (bce->type == BCE_PMIP) ? "PMIP" : - (bce->type == BCE_TEMP) ? "TEMP" : - (bce->type == BCE_NO_ENTRY) ? "EMPTY" : - "(unknown)"); - - fprintf(vh->vh_stream, "\n"); - - if (is_ha()) { - fprintf(vh->vh_stream, " Serv_MAG_addr %x:%x:%x:%x:%x:%x:%x:%x", - NIP6ADDR(&bce->mn_serv_mag_addr)); - } - - if (is_mag()) { - fprintf(vh->vh_stream, " LMA_addr %x:%x:%x:%x:%x:%x:%x:%x", - NIP6ADDR(&bce->mn_serv_lma_addr)); - } - - fprintf(vh->vh_stream, " local %x:%x:%x:%x:%x:%x:%x:%x", - NIP6ADDR(&bce->our_addr)); - - if (vh->vh_opt.verbose == VT_BOOL_TRUE) { - char buf[IF_NAMESIZE + 1]; - char *dev; - - if (bce->tunnel) { - fprintf(vh->vh_stream, " tunnel %d ",bce->tunnel); - - dev = if_indextoname(bce->tunnel, buf); - - if (!dev || strlen(dev) == 0) - fprintf(vh->vh_stream, "(%d)", bce->tunnel); - else - fprintf(vh->vh_stream, "%s", dev); - } - - if (bce->link) { - fprintf(vh->vh_stream, " link "); - - dev = if_indextoname(bce->link, buf); - - if (!dev || strlen(dev) == 0) - fprintf(vh->vh_stream, "(%d)", bce->link); - else - fprintf(vh->vh_stream, "%s", dev); - } - } - - fprintf(vh->vh_stream, "\n"); - - fprintf(vh->vh_stream, " lifetime "); - - if (clock_gettime(CLOCK_REALTIME, &ts_now) != 0) - fprintf(vh->vh_stream, "(error)"); - else { - if (tsafter(ts_now, bce->add_time)) - fprintf(vh->vh_stream, "(broken)"); - else { - struct timespec ts; - - tssub(ts_now, bce->add_time, ts); - - /* "ts" is now time how log it alives */ - if (tsafter(bce->lifetime, ts)) { - tssub(ts, bce->lifetime, ts); - fprintf(vh->vh_stream, "-%ld", ts.tv_sec); - } else { - tssub(bce->lifetime, ts, ts); - fprintf(vh->vh_stream, "%ld", ts.tv_sec); - } - } - } - - fprintf(vh->vh_stream, " / %ld", bce->lifetime.tv_sec); - - fprintf(vh->vh_stream, " seq %u", bce->seqno_out); - - fprintf(vh->vh_stream, "\n"); - - return 0; -} - -static int pmip_cache_vt_cmd_pbc(const struct vt_handle *vh, const char *str) -{ - struct pmip_cache_vt_arg bva; - bva.vh = vh; - - if (strlen(str) > 0) { - fprintf(vh->vh_stream, "unknown args\n"); - return 0; - } - - pmip_cache_iterate(pmip_cache_vt_dump, &bva); - return 0; -} - -static struct vt_cmd_entry vt_cmd_pbc = { - .cmd = "pmip", - .parser = pmip_cache_vt_cmd_pbc, -}; -//////////////////////////////////////////////////////////// - - -static int vt_str_to_uint32(const struct vt_handle *vh, const char *str, - uint32_t *val) -{ - unsigned long int v; - char *ptr = NULL; - - v = strtoul(str, &ptr, 0); - - if (!ptr || ptr == str || ptr[0] != '\0') { - fprintf(vh->vh_stream, "invalid integer:%s\n", str); - return -EINVAL; - } - - if (v == ULONG_MAX) { - fprintf(vh->vh_stream, "overflow:%s\n", str); - return -ERANGE; - } - - *val = (uint32_t)v; - return 0; -} - -/* get the first address with given string */ -static int vt_str_to_addr6(const struct vt_handle *vh, const char *str, - struct in6_addr *addr) -{ - struct addrinfo hints; - struct addrinfo *res = NULL; - struct sockaddr_in6 *sin6; - int err; - - memset(&hints, 0, sizeof(hints)); - hints.ai_socktype = SOCK_RAW; - hints.ai_family = AF_INET6; - hints.ai_flags = AI_PASSIVE; - - err = getaddrinfo(str, NULL, &hints, &res); - - if (err != 0) { - fprintf(vh->vh_stream, - "getaddrinfo: \"%s\" :%s\n", str, gai_strerror(err)); - goto end; - } - - if (res->ai_addrlen < sizeof(*sin6)) { - fprintf(vh->vh_stream, - "getaddrinfo: \"%s\" : sockaddr too short:%d\n", - str, res->ai_addrlen); - err = -ENOBUFS; - goto end; - } - - if (res->ai_family != AF_INET6) { - fprintf(vh->vh_stream, - "getaddrinfo: \"%s\" : family is not AF_INET6:%u\n", - str, res->ai_family); - err = -EINVAL; - goto end; - } - - sin6 = (struct sockaddr_in6 *)res->ai_addr; - memcpy(addr, &sin6->sin6_addr, sizeof(*addr)); - -end: - - if (res) - freeaddrinfo(res); - - return err; -} - -static const char *vt_str_space_skip(const char *str); -static char *vt_str_space_chop(const char *str, char *buf, int bufsize); - -static int bcache_vt_cmd_bc_mod(const struct vt_handle *vh, const char *str, - int add) -{ - struct in6_addr hoa; - struct in6_addr coa; - struct in6_addr local; - uint16_t bce_flags; - struct timespec lft; - uint16_t sequence; - int flags = (HA_BU_F_THREAD_JOIN | HA_BU_F_PASSIVE_SEQ | - HA_BU_F_SKIP_BA); - const char *p = str; - const char *hoap = NULL; - const char *coap = NULL; - const char *localp = NULL; - int err; - - memset(&hoa, 0, sizeof(hoa)); - memset(&coa, 0, sizeof(coa)); - memset(&local, 0, sizeof(local)); - bce_flags = 0; - tsclear(lft); - sequence = 0; - - while (1) { - char name[LINE_MAX]; - char val[LINE_MAX]; - - memset(name, '\0', sizeof(name)); - memset(val, '\0', sizeof(val)); - - p = vt_str_space_skip(p); - - if (strlen(p) == 0) - break; - - if (!vt_str_space_chop(p, name, sizeof(name))) - goto usage; - - p += strlen(name); - p = vt_str_space_skip(p); - - if (!vt_str_space_chop(p, val, sizeof(val))) - goto usage; - - if (strcmp("hoa", name) == 0) { - hoap = p; - - if (vt_str_to_addr6(vh, val, &hoa)) - goto end; - } else if (strcmp("coa", name) == 0) { - coap = p; - - if (vt_str_to_addr6(vh, val, &coa)) - goto end; - } else if (strcmp("local", name) == 0) { - localp = p; - - if (vt_str_to_addr6(vh, val, &local)) - goto end; - } else if (strcmp("flags", name) == 0) { - int len = strlen(val); - int i; - - for (i = 0; i < len; i++) { - switch (val[i]) { - case 'A': - bce_flags |= IP6_MH_BU_ACK; - break; - - case 'H': - bce_flags |= IP6_MH_BU_HOME; - break; - - case 'L': - bce_flags |= IP6_MH_BU_LLOCAL; - break; - - case 'K': - bce_flags |= IP6_MH_BU_KEYM; - break; - - case '-': - break; - - default: - fprintf(vh->vh_stream, - "invalid flag:%c\n", val[i]); - goto end; - } - } - } else if (strcmp("lifetime", name) == 0) { - uint32_t v; - - if (vt_str_to_uint32(vh, val, &v)) - goto end; - - tssetsec(lft, v); - } else if (strcmp("seq", name) == 0) { - if (strcmp("auto", val) != 0) { - uint32_t v; - - if (vt_str_to_uint32(vh, val, &v)) - goto end; - - if (v >= USHRT_MAX) { - fprintf(vh->vh_stream, - "sequence overflow\n"); - goto end; - } - - sequence = (uint16_t)v; - flags &= ~HA_BU_F_PASSIVE_SEQ; - } - } else if (strcmp("dad", name) == 0) { - if (strcmp("want", val) == 0) { - flags &= ~HA_BU_F_SKIP_DAD; - } else if (strcmp("never", val) == 0) { - flags |= HA_BU_F_SKIP_DAD; - } else { - fprintf(vh->vh_stream, - "either \"want\" or \"never\" is allowed for dad\n"); - goto end; - } - } else { - fprintf(vh->vh_stream, "invalid command:%s\n", name); - goto usage; - } - - p += strlen(val); - } - - if (!hoap) { - fprintf(vh->vh_stream, "missing hoa\n"); - goto end; - } - - if (!coap) { - if (add) { - fprintf(vh->vh_stream, "missing coa; required for adding\n"); - goto end; - } - } - - if (!localp) { - fprintf(vh->vh_stream, "missing local\n"); - goto end; - } - - if (tsisset(lft)) { - if (!add) { - fprintf(vh->vh_stream, "lifetime is not zero\n"); - goto end; - } - } else { - if (add) { - fprintf(vh->vh_stream, "lifetime is zero\n"); - goto end; - } - } - - { - struct ip6_mh_binding_update bu; - struct in6_addr_bundle ab; - struct ip6_mh *mh = (struct ip6_mh *)&bu; - int len = sizeof(bu); - - memset(&bu, 0, sizeof(bu)); - bu.ip6mhbu_flags = bce_flags; - bu.ip6mhbu_lifetime = htons(lft.tv_sec >> 2); - bu.ip6mhbu_seqno = htons(sequence); - ab.src = &hoa; - ab.dst = &local; - ab.local_coa = NULL; - - if (coap) - ab.remote_coa = &coa; - else - ab.remote_coa = NULL; - - ab.bind_coa = NULL; - - if (bu.ip6mhbu_flags & IP6_MH_BU_HOME) - err = ha_recv_home_bu(mh, len, &ab, 0, flags); - else { - cn_recv_bu(mh, len, &ab, 0); - err = 0; - } - } - - if (err < 0) - fprintf(vh->vh_stream, "bc error=%d(%s)\n", - -err, strerror(-err)); - else - fprintf(vh->vh_stream, "bc status=%d\n", err); - -end: - return 0; - -usage: - fprintf(vh->vh_stream, - "hoa ADDR [coa ADDR] local ADDR flags [A]H[LK] [lifetime SECOND]\n" - " [seq auto|NUMBER] [dad want|never]\n"); - return 0; -} - -static int bcache_vt_cmd_bc_add(const struct vt_handle *vh, const char *str) -{ - return bcache_vt_cmd_bc_mod(vh, str, 1); -} - -static int bcache_vt_cmd_bc_del(const struct vt_handle *vh, const char *str) -{ - return bcache_vt_cmd_bc_mod(vh, str, 0); -} - -static int bcache_vt_cmd_bc(const struct vt_handle *vh, const char *str) -{ - struct bcache_vt_arg bva; - bva.vh = vh; - bva.is_nb = 0; - - if (strlen(str) > 0) { - fprintf(vh->vh_stream, "unknown args\n"); - return 0; - } - - bcache_iterate(bcache_vt_dump, &bva); - return 0; -} - -static int bcache_vt_cmd_nonce(const struct vt_handle *vh, const char *str) -{ - struct bcache_vt_arg bva; - bva.vh = vh; - bva.is_nb = 1; - - if (strlen(str) > 0) { - fprintf(vh->vh_stream, "unknown args\n"); - return 0; - } - - bcache_iterate(bcache_vt_dump, &bva); - return 0; -} - -static struct vt_cmd_entry vt_cmd_bc = { - .cmd = "bc", - .parser = bcache_vt_cmd_bc, -}; - -static struct vt_cmd_entry vt_cmd_bc_add = { - .cmd = "add", - .parser = bcache_vt_cmd_bc_add, -}; - -static struct vt_cmd_entry vt_cmd_bc_del = { - .cmd = "del", - .parser = bcache_vt_cmd_bc_del, -}; - -static struct vt_cmd_entry vt_cmd_nonce = { - .cmd = "nonce", - .parser = bcache_vt_cmd_nonce, -}; - -int vt_cmd_add(struct vt_cmd_entry *parent, struct vt_cmd_entry *e) -{ - int err = 0; - struct list_head *lp; - - INIT_LIST_HEAD(&e->list); - e->parent = NULL; - INIT_LIST_HEAD(&e->child_list); - - pthread_rwlock_wrlock(&vt_lock); - - if (!parent || !e) { - err = -EINVAL; - goto fin; - } - - if (e == &vt_cmd_root) { - err = -EINVAL; - goto fin; - } - - if (parent != &vt_cmd_root && parent->parent == NULL) { - err = -EINVAL; - goto fin; - } - - if (e->parent != NULL) { - err = -EINVAL; - goto fin; - } - - /* insert the entry to the list */ - /* XXX: TODO: it should be checked infinite loop */ - list_for_each (lp, &parent->child_list) { - struct vt_cmd_entry *ce; - ce = list_entry(lp, struct vt_cmd_entry, list); - - if (strcmp(ce->cmd, e->cmd) > 0) { - list_add_tail(&e->list, lp); - goto inserted; - } - } - - list_add_tail(&e->list, &parent->child_list); - -inserted: - e->parent = parent; - -fin: - pthread_rwlock_unlock(&vt_lock); - - return err; -} - -int vt_cmd_add_root(struct vt_cmd_entry *e) -{ - return vt_cmd_add(&vt_cmd_root, e); -} - -static int vt_cmd_has_child(struct vt_cmd_entry *e) -{ - return !list_empty(&e->child_list); -} - -static const char *vt_str_space_skip(const char *str) -{ - int len = strlen(str); - int i = 0; - - for (i = 0; i < len; i++) { - if (isspace(str[i]) == 0) - break; - } - - return &str[i]; -} - -static char *vt_str_space_chop(const char *str, char *buf, int bufsize) -{ - int len = strlen(str); - int i = 0; - - if (len > bufsize - 1) - len = bufsize - 1; - - for (i = 0; i < len; i++) { - if (isspace(str[i]) == 0) - continue; - - strncpy(buf, str, i); - buf[i] = '\0'; - return buf; - } - - return NULL; -} - -static int vt_str_match(const char *def, const char *str) -{ - int def_len = strlen(def); - int len = strlen(str); - - if (def_len == len) { - if (strncmp(def, str, def_len) == 0) - return 1; - } else if (def_len < len) { - if (strncmp(def, str, def_len) == 0 && - isspace(str[def_len]) != 0) - return 1; - } - - return 0; -} - -static int vt_cmd_match(struct vt_cmd_entry *e, const char *cmd) -{ - return (vt_str_match(e->cmd, cmd) || - (e->cmd_alias && vt_str_match(e->cmd_alias, cmd))); -} - -/* - * It is only used the parser which is the final level away from root. - */ -static int vt_cmd_input(const struct vt_handle *vh, char *line) -{ - struct vt_cmd_entry *ce = &vt_cmd_root; - const char *p; - int ret; - - pthread_rwlock_rdlock(&vt_lock); - - p = line; - - while (1) { - const char *p_next = NULL; - struct vt_cmd_entry *e = NULL; - struct list_head *lp; - - p = vt_str_space_skip(p); - - /* command has no character */ - if (strlen(p) == 0) - goto fin; - - list_for_each (lp, &ce->child_list) { - e = list_entry(lp, struct vt_cmd_entry, list); - - if (vt_cmd_match(e, p) == 0) - continue; - - p_next = p + strlen(e->cmd); - p_next = vt_str_space_skip(p_next); - - if (strlen(p_next) > 0 && vt_cmd_has_child(e)) - break; - - if (!e->parser) { - fprintf(vh->vh_stream, "do nothing\n"); - goto fin; - } - - pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, NULL); - ret = e->parser(vh, p_next); - pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL); - - if (ret != 0) { - fprintf(vh->vh_stream, "command parse failed\n"); - } - - goto fin; - } - - if (p_next) { - p = p_next; - ce = e; - } else if (vt_str_match(VT_CMD_HELP_STR, p)) { - /* try to show help message when no matching command */ - vt_cmd_dump_candidates(vh, ce, VT_CMD_HELP_LINE_MAX); - goto fin; - } else { - char buf[VT_PKT_BUFLEN]; - fprintf(vh->vh_stream, "unknown command: \"%s\"\n", - vt_str_space_chop(p, buf, sizeof(buf))); - goto fin; - } - } - -fin: - - if (vh->vh_sock < 0) { - /* socket is closed during paring (normal operation) */ - goto closed; - } - - if (vh->vh_opt.prompt == VT_BOOL_TRUE) { - /* send prompt */ - fprintf(vh->vh_stream, VT_CMD_PROMPT); - } - - fprintf(vh->vh_stream, "%c", 0); - fflush(vh->vh_stream); - - pthread_rwlock_unlock(&vt_lock); - - return 0; - -closed: - pthread_rwlock_unlock(&vt_lock); - - return 1; - -} - -static int vt_connect_input(struct vt_handle *vh, void *data, ssize_t len) -{ - char *line = NULL; - int ret; - - line = (char *)malloc(len); - - if (!line) { - ret = -errno; - goto fin; - } - - memcpy(line, data, len); - line[len - 1] = 0; - - ret = vt_cmd_input(vh, line); - - if (ret != 0) - goto fin; - - free(line); - - return 0; - -fin: - - if (line) - free(line); - - vt_connect_close(vh); - return ret; -} - -static int vt_connect_recv(struct vt_handle *vh) -{ - while (1) { - char buf[VT_PKT_BUFLEN]; - struct msghdr msg; - struct iovec iov = { buf, sizeof(buf) }; - ssize_t len; - int ret; - - memset(buf, 0, sizeof(buf)); - memset(&msg, 0, sizeof(msg)); - - msg.msg_iov = &iov; - msg.msg_iovlen = 1; - msg.msg_control = NULL; - msg.msg_controllen = 0; - msg.msg_flags = 0; - - if (vh->vh_sock < 0) - return -EBADFD; - - ret = recvmsg(vh->vh_sock, &msg, 0); - - if (ret < 0) { - if (errno == EINTR) - continue; - - return -1; - } else if (ret == 0) { - goto disconnect; - } - - len = ret; - - ret = vt_connect_input(vh, buf, len); - - if (ret != 0) - goto disconnect; - - if (msg.msg_flags & MSG_TRUNC) - continue; - - if (msg.msg_flags & MSG_CTRUNC) - continue; - - break; - } - - return 0; - -disconnect: - vt_connect_close(vh); - return 1; -} - -static int vt_connect_close(struct vt_handle *vh) -{ - if (vh->vh_sock < 0) - return 0; - - close(vh->vh_sock); - - vh->vh_sock = -1; - - return 0; -} - -static int vt_connect_fini(struct vt_handle *vh) -{ - if (vh->vh_sock >= 0) - vt_connect_close(vh); - - memset(vh, 0, sizeof(*vh)); /* for fail-safe */ - vh->vh_sock = -1; - - free(vh); - - vt_connect_handle = NULL; /* XXX: remove from global pointer */ - - return 0; -} - -static int vt_connect_init(const struct vt_server_entry *vse) -{ - int sock; - FILE *stream; - struct vt_handle *vh = NULL; - int ret; - - sock = accept(vse->vse_sock, NULL, NULL); - - if (sock < 0) - goto error; - - stream = fdopen(sock, "w"); - - if (vt_handle_full()) { - /* send error message */ - ret = fprintf(stream, "Too many connections\n"); - - if (ret < 0) { - /* ignore error here*/ - } - - close(sock); - goto error; - } - - vh = (struct vt_handle *)malloc(sizeof(*vh)); - - if (vh == NULL) { - ret = -errno; - - /* send error message */ - if (fprintf(stream, "Server cannot make connection\n") < 0) { - /* ignore error here*/ - } - - close(sock); - fclose(stream); - goto error; - } - - memset(vh, 0, sizeof(*vh)); - vh->vh_sock = sock; - vh->vh_stream = stream; - - /* Apply default values to option per server */ - switch (vse->vse_sa.sa_family) { - case AF_LOCAL: - vh->vh_opt.prompt = VT_BOOL_FALSE; - vh->vh_opt.verbose = VT_BOOL_FALSE; - vh->vh_opt.fancy = VT_BOOL_FALSE; - break; - - default: - vh->vh_opt.prompt = VT_BOOL_TRUE; - vh->vh_opt.verbose = VT_BOOL_FALSE; - vh->vh_opt.fancy = VT_BOOL_TRUE; - break; - } - - ret = vt_handle_add(vh); - - if (ret != 0) { - goto error; - } - - if (vh->vh_opt.prompt == VT_BOOL_TRUE) { - /* send prompt */ - ret = fprintf(vh->vh_stream, VT_CMD_PROMPT); - - if (ret < 0) - goto error; - - fflush(vh->vh_stream); - } - - return 0; - -error: - - if (vh) - vt_connect_fini(vh); - - return 0; /* ignore error here */ -} - -static void *vt_server_recv(__attribute__ ((unused)) void *arg) -{ - pthread_dbg("thread started"); - - while (1) { - int ret; - int sock_max = 0; - fd_set fds; - struct list_head *lp; - - FD_ZERO(&fds); - list_for_each (lp, &vt_server_list) { - struct vt_server_entry *e; - e = list_entry(lp, struct vt_server_entry, list); - FD_SET(e->vse_sock, &fds); - - if (sock_max < e->vse_sock) - sock_max = e->vse_sock; - } - - if (sock_max == 0) - break; - - if (vt_connect_handle != NULL && - vt_connect_handle->vh_sock >= 0) { - FD_SET(vt_connect_handle->vh_sock, &fds); - - if (sock_max < vt_connect_handle->vh_sock) - sock_max = vt_connect_handle->vh_sock; - } - - ret = select(sock_max+1, &fds, NULL, NULL, NULL); - - if (ret < 0) { - if (errno == EINTR) - continue; - - break; - } - - ret = 0; - list_for_each (lp, &vt_server_list) { - struct vt_server_entry *e; - e = list_entry(lp, struct vt_server_entry, list); - - if (FD_ISSET(e->vse_sock, &fds)) { - ret = vt_connect_init(e); - - if (ret != 0) - break; - } - } - - if (ret != 0) - break; - - if (vt_connect_handle != NULL && - vt_connect_handle->vh_sock >= 0) { - if (FD_ISSET(vt_connect_handle->vh_sock, &fds)) { - ret = vt_connect_recv(vt_connect_handle); - - if (ret != 0) - vt_connect_fini(vt_connect_handle); - } - } - } - - if (vt_connect_handle != NULL) - vt_connect_fini(vt_connect_handle); - - vt_server_fini(); - - pthread_exit(NULL); -} - -static int vt_server_clean(const struct sockaddr *sa, int salen) -{ - if (sa->sa_family == AF_LOCAL) { - const struct sockaddr_un *sun; - - if (salen >= 0 && (size_t)salen >= sizeof(*sun)) { - sun = (const struct sockaddr_un *)sa; - - if (unlink(sun->sun_path)) - errno = 0; /* ignore error here */ - } - } - - return 0; -} - -static void vt_server_close(struct vt_server_entry *e) -{ - if (e->vse_sock) { - close(e->vse_sock); - e->vse_sock = -1; - } -} - - -static int vt_server_fini(void) -{ - struct list_head *lp, *tmp; - - list_for_each_safe (lp, tmp, &vt_server_list) { - struct vt_server_entry *e; - - list_del(lp); - e = list_entry(lp, struct vt_server_entry, list); - - if (e->vse_sock >= 0) - vt_server_clean(&e->vse_sa, e->vse_salen); - - vt_server_close(e); - memset(e, 0, sizeof(*e)); /* for fail-safe */ - free(e); - } - - return 0; -} - -static int vt_server_setsockopt(int sock, struct addrinfo *ai) -{ - int ret; - - ret = vt_server_clean(ai->ai_addr, ai->ai_addrlen); - - if (ret != 0) - return ret; - - if (ai->ai_protocol == IPPROTO_TCP) { - const int on = 1; - - ret = setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, - &on, sizeof(on)); - - if (ret != 0) - return ret; - } - - return 0; -} - -static int vt_server_init(const char *node, const char *service, - struct addrinfo *hints) -{ - struct addrinfo *res = NULL; - struct addrinfo *ai; - int ret; - int n = 0; - - ret = getaddrinfo(node, service, hints, &res); - - if (ret != 0) - goto error; - - errno = 0; - - for (ai = res; ai != NULL; ai = ai->ai_next) { - int sock; - struct vt_server_entry *e; - - sock = socket(ai->ai_family, ai->ai_socktype, ai->ai_protocol); - - if (sock < 0) - continue; - - ret = vt_server_setsockopt(sock, ai); - - if (ret != 0) { - close(sock); - continue; - } - - ret = bind(sock, ai->ai_addr, ai->ai_addrlen); - - if (ret != 0) { - close(sock); - continue; - } - - ret = listen(sock, VT_SERVER_BACKLOG); - - if (ret != 0) { - close(sock); - continue; - } - - e = (struct vt_server_entry *)malloc(sizeof(*e)); - - if (e == NULL) { - ret = -errno; - close(sock); - goto error; - } - - memset(e, 0, sizeof(*e)); - e->vse_sock = sock; - memcpy(&e->vse_sa, ai->ai_addr, ai->ai_addrlen); - e->vse_salen = ai->ai_addrlen; - - list_add(&e->list, &vt_server_list); - - n ++; - } - - if (n == 0) { - ret = -1; - goto error; - } - - errno = 0; - - if (res != NULL) - freeaddrinfo(res); - - return 0; -error: - - if (res != NULL) - freeaddrinfo(res); - - vt_server_fini(); - return ret; -} - -int vt_start(const char *vthost, const char *vtservice) -{ - struct addrinfo hints; - - INIT_LIST_HEAD(&vt_server_list); - - memset(&hints, 0, sizeof(hints)); - hints.ai_family = AF_UNSPEC; - hints.ai_socktype = SOCK_STREAM; - hints.ai_flags = AI_PASSIVE; - - if (vt_server_init(vthost, vtservice, &hints) != 0) - return -1; - - if (pthread_create(&vt_listener, NULL, vt_server_recv, NULL)) - return -1; - - return 0; -} - -int vt_bul_init(void) -{ - int ret; - - ret = vt_cmd_add_root(&vt_cmd_bul); - - if (ret < 0) - return ret; - - ret = vt_cmd_add_root(&vt_cmd_rr); - - if (ret < 0) - return ret; - - return 0; -} - -int vt_bc_init(void) -{ - int ret; - - ret = vt_cmd_add_root(&vt_cmd_bc); - - if (ret < 0) - return ret; - - if (is_ha()) { - ret = vt_cmd_add(&vt_cmd_bc, &vt_cmd_bc_add); - - if (ret < 0) - return ret; - - ret = vt_cmd_add(&vt_cmd_bc, &vt_cmd_bc_del); - - if (ret < 0) - return ret; - } - - ret = vt_cmd_add_root(&vt_cmd_nonce); - - if (ret < 0) - return ret; - - return 0; -} - -//Defined for PMIP//////////////// -int vt_pbc_init(void) -{ - int ret; - ret = vt_cmd_add_root(&vt_cmd_pbc); - - if (ret < 0) - return ret; - - return 0; -} -////////////////////////////////// - -int vt_init(void) -{ - if (pthread_rwlock_init(&vt_lock, NULL)) - return -1; - - return vt_cmd_sys_init(); -} - -void vt_fini(void) -{ - struct list_head *lp; - - list_for_each(lp, &vt_server_list) { - struct vt_server_entry *e; - e = list_entry(lp, struct vt_server_entry, list); - vt_server_close(e); - } - pthread_cancel(vt_listener); - pthread_join(vt_listener, NULL); - - vt_server_fini(); -} diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/src/vt.h b/openair3/PMIPv6/pmipv6-daemon-umip/src/vt.h deleted file mode 100755 index b603248203..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/src/vt.h +++ /dev/null @@ -1,85 +0,0 @@ -/* - * Copyright (C)2004,2005 USAGI/WIDE Project - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ -/* - * Authors: - * Noriaki TAKAMIYA @USAGI - * Masahide NAKAMURA @USAGI - */ -#ifndef __VT_H -#define __VT_H 1 - -#include "list.h" -#include - -#define VT_DEFAULT_HOSTNAME "localhost" -#define VT_DEFAULT_SERVICE "7777" /* string */ - -typedef enum { - VT_BOOL_TRUE = 0, - VT_BOOL_FALSE, -} vt_bool_t; - -struct vt_opt { - vt_bool_t prompt; - vt_bool_t verbose; - vt_bool_t fancy; -}; - -struct vt_info { - struct vt_opt opt; -}; - -struct vt_handle { - struct vt_opt vh_opt; - int vh_sock; - FILE *vh_stream; -}; - -struct vt_cmd_entry { - char *cmd; - char *cmd_alias; - int (*parser)(const struct vt_handle *vh, const char *str); - struct list_head list; - struct vt_cmd_entry *parent; - struct list_head child_list; -}; - -#define VTDECOR_B 1 -#define VTDECOR_BU 2 - -#define fprintf_bl(...) fprintf_decor(VTDECOR_BU,__VA_ARGS__) -#define fprintf_b(...) fprintf_decor(VTDECOR_B,__VA_ARGS__) - -ssize_t fprintf_decor(int decor, const struct vt_handle *vh, - const char *fmt, ...); - -const struct vt_info *vt_info_get(void); -int vt_cmd_add(struct vt_cmd_entry *parent, struct vt_cmd_entry *e); -int vt_cmd_add_root(struct vt_cmd_entry *e); -int vt_start(const char *vthost, const char *vtservice); - -int vt_bul_init(void); - -int vt_bc_init(void); - -int vt_pbc_init(void); - -int vt_init(void); -void vt_fini(void); - -#endif diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/src/xfrm.c b/openair3/PMIPv6/pmipv6-daemon-umip/src/xfrm.c deleted file mode 100755 index d8e04b2dc0..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/src/xfrm.c +++ /dev/null @@ -1,2512 +0,0 @@ -/* - * $Id: xfrm.c 1.250 06/05/15 18:34:56+03:00 vnuorval@tcs.hut.fi $ - * - * This file is part of the MIPL Mobile IPv6 for Linux. - * - * Authors: - * USAGI Team - * Ville Nuorvala - * Henrik Petander - * - * Copyright 2003 USAGI/WIDE Project - * Copyright 2003-2005 Go-Core Project - * Copyright 2003-2006 Helsinki University of Technology - * - * MIPL Mobile IPv6 for Linux is free software; you can redistribute - * it and/or modify it under the terms of the GNU General Public - * License as published by the Free Software Foundation; version 2 of - * the License. - * - * MIPL Mobile IPv6 for Linux is distributed in the hope that it will - * be useful, but WITHOUT ANY WARRANTY; without even the implied - * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with MIPL Mobile IPv6 for Linux; if not, write to the Free - * Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - * 02111-1307 USA. - */ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -#include "debug.h" -#include "mn.h" /* For mn_lock */ -#include "xfrm.h" -#include "util.h" -#include "retrout.h" -#include "bul.h" -#include "bcache.h" -#include "mh.h" -#include "rtnl.h" -#include "conf.h" -#include "ipsec.h" - -#define XFRM_DEBUG_LEVEL 1 - -#if XFRM_DEBUG_LEVEL >= 1 -#define XDBG dbg -#else -#define XDBG(...) -#endif - -#if XFRM_DEBUG_LEVEL >= 2 -#define XDBG2 dbg -#else -#define XDBG2(...) -#endif - -#define MIPV6_MAX_TMPLS 3 /* AH, ESP, IPCOMP */ - -static pthread_t xfrm_listener; - -static void xfrm_sel_dump(const struct xfrm_selector *sel) -{ - cdbg("sel.daddr %x:%x:%x:%x:%x:%x:%x:%x\n" - "sel.saddr %x:%x:%x:%x:%x:%x:%x:%x\n" - "sel.dport %x\n" - "sel.dport_mask %x\n" - "sel.sport %x\n" - "sel.sport_mask %x\n" - "sel.prefixlen_d %d\n" - "sel.prefixlen_s %d\n" - "sel.proto %d\n" - "sel.ifindex %d\n", - NIP6ADDR((struct in6_addr *)&sel->daddr), - NIP6ADDR((struct in6_addr *)&sel->saddr), - ntohs(sel->dport), - ntohs(sel->dport_mask), - ntohs(sel->sport), - ntohs(sel->sport_mask), - sel->prefixlen_d, - sel->prefixlen_s, - sel->proto, - sel->ifindex); -} - -static void nlmsg_dump(int nlmsg_flags, int nlmsg_type) -{ - cdbg("nlmsg_flags %x\n" - "nlmsg_type %d\n", - nlmsg_flags, - nlmsg_type); -} - -static void xfrm_tmpl_dump(const struct xfrm_user_tmpl *tmpl) -{ - cdbg("xfrma_tmpl.id.daddr %x:%x:%x:%x:%x:%x:%x:%x\n" - "xfrma_tmpl.id.spi %x\n" - "xfrma_tmpl.id.proto %d\n" - "xfrma_tmpl.saddr %x:%x:%x:%x:%x:%x:%x:%x\n" - "xfrma_tmpl.reqid %d\n" - "xfrma_tmpl.mode %d\n" - "xfmra_tmpl.optional %d\n" - "xfrma_tmpl.aalgos %x\n" - "xfrma_tmpl.ealgos %d\n" - "xfrma_tmpl.calgos %d\n", - NIP6ADDR((struct in6_addr *)&tmpl->id.daddr), - tmpl->id.spi, - tmpl->id.proto, - NIP6ADDR((struct in6_addr *)&tmpl->saddr), - tmpl->reqid, - tmpl->mode, - tmpl->aalgos, - tmpl->ealgos, - tmpl->calgos); -} - -static void xfrm_policy_dump(const char *msg, int nlmsg_flags, int nlmsg_type, - const struct xfrm_userpolicy_info *sp, - const struct xfrm_userpolicy_type *ptype, - struct xfrm_user_tmpl *tmpls, int num_tmpl) -{ - int i; - char ptype_buf[64]; - sprintf(ptype_buf, "%u", ptype->type); - - cdbg(msg); - nlmsg_dump(nlmsg_flags, nlmsg_type); - xfrm_sel_dump(&sp->sel); - cdbg("priority %d\n" - "dir %d\n" - "action %d\n" - "type %s\n", - sp->priority, - sp->dir, - sp->action, - ptype_buf); - - for (i = 0; i < num_tmpl; i++) - xfrm_tmpl_dump(&tmpls[i]); -} - -static void xfrm_policy_id_dump(const char *msg, - const struct xfrm_userpolicy_id *sp_id, - const struct xfrm_userpolicy_type *ptype) -{ - char ptype_buf[64]; - sprintf(ptype_buf, "%u", ptype->type); - cdbg(msg); - xfrm_sel_dump(&sp_id->sel); - cdbg("dir %d\n" - "type %s\n", - sp_id->dir, - ptype_buf); -} - -static void xfrm_state_dump(const char *msg, int nlmsg_flags, int nlmsg_type, - const struct xfrm_usersa_info *sa, - const struct in6_addr *coa) -{ - cdbg(msg); - nlmsg_dump(nlmsg_flags, nlmsg_type); - xfrm_sel_dump(&sa->sel); - cdbg("id.daddr %x:%x:%x:%x:%x:%x:%x:%x\n" - "id.spi %x\n" - "id.proto %d\n" - "saddr %x:%x:%x:%x:%x:%x:%x:%x\n" - "reqid %d\n" - "mode %d\n" - "flags %x\n" - "xfrma_addr %x:%x:%x:%x:%x:%x:%x:%x\n", - NIP6ADDR((struct in6_addr *)&sa->id.daddr), - sa->id.spi, - sa->id.proto, - NIP6ADDR((struct in6_addr *)&sa->saddr), - sa->reqid, - sa->mode, - sa->flags, - NIP6ADDR(coa)); -} - -static void xfrm_state_id_dump(const char *msg, - const struct xfrm_usersa_id *sa_id, - const xfrm_address_t *saddr) -{ - cdbg(msg); - cdbg("daddr %x:%x:%x:%x:%x:%x:%x:%x\n" - "spi %x\n" - "proto %d\n" - "saddr %x:%x:%x:%x:%x:%x:%x:%x\n", - NIP6ADDR((struct in6_addr *)&sa_id->daddr), - sa_id->spi, - sa_id->proto, - NIP6ADDR((struct in6_addr *)saddr)); -} - -/* Set xfrm_selector fields for MIPv6 and IPsec policies and MIPv6 - * states */ -static void set_selector(const struct in6_addr *daddr, - const struct in6_addr *saddr, - int proto, int type, int code, - __attribute__ ((unused)) int ifindex, - struct xfrm_selector *sel) -{ - memset(sel, 0, sizeof(*sel)); - - sel->family = AF_INET6; - sel->user = getuid(); - sel->ifindex = 0; - sel->proto = proto; - - switch (proto) { - case 0: /* Any */ - break; - - case IPPROTO_ICMPV6: - sel->sport = htons(type); - - if (type) - sel->sport_mask = ~((__u16)0); - - sel->dport = htons(code); - - if (code) - sel->dport_mask = ~((__u16)0); - - break; - - case IPPROTO_MH: - sel->sport = htons(type); - - if (type) - sel->sport_mask = ~((__u16)0); - - sel->dport = code; - - if (code) - sel->dport_mask = code; - - break; - - default: - sel->sport = htons(type); - - if (type) - sel->sport_mask = ~((__u16)0); - - sel->dport = code; - - if (code) - sel->dport_mask = ~((__u16)0); - - } - - memcpy(&sel->saddr.a6, saddr, sizeof(*saddr)); - memcpy(&sel->daddr.a6, daddr, sizeof(*daddr)); - - if (!IN6_ARE_ADDR_EQUAL(daddr, &in6addr_any)) - sel->prefixlen_d = 128; - - if (!IN6_ARE_ADDR_EQUAL(saddr, &in6addr_any)) - sel->prefixlen_s = 128; -} - -/* NEMO specific version of set_selector(): set xfrm_selector - * fields for IPsec policies and states. If NULL is passed as - * src or dst prefix, any is used, i.e. ::/0 */ -static void mr_set_selector(const struct prefix_list_entry *src, - const struct prefix_list_entry *dst, - uid_t uid, struct xfrm_selector *sel) -{ - memset(sel, 0, sizeof(*sel)); - sel->family = AF_INET6; - sel->user = uid; - - if (src != NULL) { - memcpy(&sel->saddr.a6, &src->ple_prefix, - sizeof(sel->saddr.a6)); - sel->prefixlen_s = src->ple_plen; - } - - if (dst != NULL) { - memcpy(&sel->daddr.a6, &dst->ple_prefix, - sizeof(sel->daddr.a6)); - sel->prefixlen_d = dst->ple_plen; - } -} - -/** - * xfrm_last_used - when was a binding last used - * @daddr: destination address (home address) - * @saddr: source address (home address) - * @proto: protocol. Either IPPROTO_ROUTING or IPPROTO_DSTOPTS - **/ -long xfrm_last_used(const struct in6_addr *daddr, - const struct in6_addr *saddr, int proto, - const struct timespec *now) -{ - uint8_t sbuf[NLMSG_SPACE(sizeof(struct xfrm_usersa_id)) + - RTA_SPACE(sizeof(xfrm_address_t))]; - uint8_t rbuf[1024]; - struct nlmsghdr *sn, *rn; - struct xfrm_usersa_id *sa_id; - struct xfrm_usersa_info *sa; - int err; - uint64_t lastused; - long time_used; - - memset(sbuf, 0, sizeof(sbuf)); - sn = (struct nlmsghdr *)sbuf; - sn->nlmsg_len = NLMSG_LENGTH(sizeof(struct xfrm_usersa_id)); - sn->nlmsg_flags = NLM_F_REQUEST; - sn->nlmsg_type = XFRM_MSG_GETSA; - - sa_id = NLMSG_DATA(sn); - memcpy(&sa_id->daddr.a6, daddr, sizeof(sa_id->daddr.a6)); - sa_id->family = AF_INET6; - sa_id->proto = proto; - - addattr_l(sn, sizeof(sbuf), XFRMA_SRCADDR, saddr, - sizeof(xfrm_address_t)); - - memset(rbuf, 0, sizeof(rbuf)); - rn = (struct nlmsghdr *)rbuf; - - err = rtnl_xfrm_do(sn, rn); - - if (err < 0) - return -1; - - sa = NLMSG_DATA(rn); - - { -#define XFRMS_RTA(x) ((struct rtattr*)(((char*)(x)) + NLMSG_ALIGN(sizeof(struct xfrm_usersa_info)))) - struct rtattr *rta_tb[XFRMA_MAX+1]; - memset(rta_tb, 0, sizeof(rta_tb)); - parse_rtattr(rta_tb, XFRMA_MAX, XFRMS_RTA(sa), - rn->nlmsg_len - NLMSG_LENGTH(sizeof(*sa))); - - if (!rta_tb[XFRMA_LASTUSED]) - return -1; - - lastused = *(uint64_t *)RTA_DATA(rta_tb[XFRMA_LASTUSED]); - } - - if (!lastused) { - XDBG("binding was unused\n"); - return -1; - } - - time_used = now->tv_sec - (long)lastused; - XDBG("last use of binding was %ld seconds ago\n", time_used); - return time_used; -} - -long mn_bule_xfrm_last_used(const struct in6_addr *peer, - const struct in6_addr *hoa, - const struct timespec *now) -{ - long dst_used, rh_used, min_used, max_used; - dst_used = xfrm_last_used(peer, hoa, IPPROTO_DSTOPTS, now); - rh_used = xfrm_last_used(hoa, peer, IPPROTO_ROUTING, now); - min_used = min(dst_used, rh_used); - max_used = max(dst_used, rh_used); - - if (min_used < 0) - return max_used; - - return min_used; -} - -static inline void xfrm_lft(struct xfrm_lifetime_cfg *lft) -{ - lft->soft_byte_limit = XFRM_INF; - lft->soft_packet_limit = XFRM_INF; - lft->hard_byte_limit = XFRM_INF; - lft->hard_packet_limit = XFRM_INF; -} - -static int xfrm_policy_add(uint8_t type, const struct xfrm_selector *sel, - int update, int dir, int action, int priority, - struct xfrm_user_tmpl *tmpls, int num_tmpl) -{ - uint8_t buf[NLMSG_SPACE(sizeof(struct xfrm_userpolicy_info)) + - RTA_SPACE(sizeof(struct xfrm_userpolicy_type)) + - RTA_SPACE(sizeof(struct xfrm_user_tmpl) * num_tmpl)]; - struct nlmsghdr *n; - struct xfrm_userpolicy_info *pol; - struct xfrm_userpolicy_type ptype; - - int err; - memset(buf, 0, sizeof(buf)); - n = (struct nlmsghdr *)buf; - n->nlmsg_len = NLMSG_LENGTH(sizeof(struct xfrm_userpolicy_info)); - - if (update) { - n->nlmsg_flags = NLM_F_REQUEST | NLM_F_REPLACE; - n->nlmsg_type = XFRM_MSG_UPDPOLICY; - } else { - n->nlmsg_flags = NLM_F_REQUEST | NLM_F_CREATE; - n->nlmsg_type = XFRM_MSG_NEWPOLICY; - } - - pol = NLMSG_DATA(n); - memcpy(&pol->sel, sel, sizeof(struct xfrm_selector)); - xfrm_lft(&pol->lft); - pol->priority = priority; - pol->dir = dir; - pol->action = action; - pol->share = XFRM_SHARE_ANY; - - memset(&ptype, 0, sizeof(ptype)); - ptype.type = type; - addattr_l(n, sizeof(buf), XFRMA_POLICY_TYPE, &ptype, sizeof(ptype)); - - if(num_tmpl > 0) - addattr_l(n, sizeof(buf), XFRMA_TMPL, - tmpls, sizeof(struct xfrm_user_tmpl) * num_tmpl); - - if ((err = rtnl_xfrm_do(n, NULL)) < 0) - xfrm_policy_dump("Failed to add policy:\n", - n->nlmsg_flags, n->nlmsg_type, - pol, &ptype, tmpls, num_tmpl); - - return err; -} - -static int xfrm_ipsec_policy_add(const struct xfrm_selector *sel, - int update, int dir, int action, int priority, - struct xfrm_user_tmpl *tmpls, int num_tmpl) -{ - return xfrm_policy_add(XFRM_POLICY_TYPE_MAIN, sel, update, dir, - action, priority, tmpls, num_tmpl); -} - -static int xfrm_mip_policy_add(const struct xfrm_selector *sel, - int update, int dir, int action, int priority, - struct xfrm_user_tmpl *tmpls, int num_tmpl) -{ - return xfrm_policy_add(XFRM_POLICY_TYPE_SUB, sel, update, dir, - action, priority, tmpls, num_tmpl); -} - -static int xfrm_policy_del(uint8_t type, const struct xfrm_selector *sel, int dir) -{ - uint8_t buf[NLMSG_SPACE(sizeof(struct xfrm_userpolicy_id)) - + RTA_SPACE(sizeof(struct xfrm_userpolicy_type))]; - struct nlmsghdr *n; - struct xfrm_userpolicy_id *pol_id; - struct xfrm_userpolicy_type ptype; - int err; - - memset(buf, 0, sizeof(buf)); - n = (struct nlmsghdr *)buf; - n->nlmsg_len = NLMSG_LENGTH(sizeof(struct xfrm_userpolicy_id)); - n->nlmsg_flags = NLM_F_REQUEST; - n->nlmsg_type = XFRM_MSG_DELPOLICY; - - pol_id = NLMSG_DATA(n); - memcpy(&pol_id->sel, sel, sizeof(struct xfrm_selector)); - pol_id->dir = dir; - - memset(&ptype, 0, sizeof(ptype)); - ptype.type = type; - addattr_l(n, sizeof(buf), XFRMA_POLICY_TYPE, &ptype, sizeof(ptype)); - - if ((err = rtnl_xfrm_do(n, NULL)) < 0) - xfrm_policy_id_dump("Failed to del policy:\n", pol_id, &ptype); - - return err; -} - -static int xfrm_ipsec_policy_del(const struct xfrm_selector *sel, int dir) -{ - return xfrm_policy_del(XFRM_POLICY_TYPE_MAIN, sel, dir); -} - -static int xfrm_mip_policy_del(const struct xfrm_selector *sel, int dir) -{ - return xfrm_policy_del(XFRM_POLICY_TYPE_SUB, sel, dir); -} - -static int xfrm_state_add(const struct xfrm_selector *sel, - int proto, const struct in6_addr *coa, - int update, uint8_t flags) -{ - uint8_t buf[NLMSG_SPACE(sizeof(struct xfrm_usersa_info)) - + RTA_SPACE(sizeof(struct in6_addr))]; - struct nlmsghdr *n; - struct xfrm_usersa_info *sa; - int err; - - memset(buf, 0, sizeof(buf)); - n = (struct nlmsghdr *)buf; - n->nlmsg_len = NLMSG_LENGTH(sizeof(struct xfrm_usersa_info)); - - if (update) { - n->nlmsg_flags = NLM_F_REQUEST | NLM_F_REPLACE; - n->nlmsg_type = XFRM_MSG_UPDSA; - } else { - n->nlmsg_flags = NLM_F_REQUEST | NLM_F_CREATE; - n->nlmsg_type = XFRM_MSG_NEWSA; - } - - sa = NLMSG_DATA(n); - memcpy(&sa->sel, sel, sizeof(struct xfrm_selector)); - /* State src and dst addresses */ - memcpy(sa->id.daddr.a6, sel->daddr.a6, sizeof(sel->daddr.a6)); - sa->id.proto = proto; - memcpy(sa->saddr.a6, sel->saddr.a6, sizeof(sel->saddr.a6)); - xfrm_lft(&sa->lft); - sa->family = AF_INET6; - sa->mode = XFRM_MODE_ROUTEOPTIMIZATION; - sa->flags = flags; - - addattr_l(n, sizeof(buf), XFRMA_COADDR, coa, sizeof(struct in6_addr)); - - if ((err = rtnl_xfrm_do(n, NULL)) < 0) - xfrm_state_dump("Failed to add state:\n", - n->nlmsg_flags, n->nlmsg_type, sa, coa); - - return err; -} - -static int xfrm_state_del(int proto, const struct xfrm_selector *sel) -{ - uint8_t buf[NLMSG_SPACE(sizeof(struct xfrm_usersa_id)) + - RTA_SPACE(sizeof(xfrm_address_t))]; - struct nlmsghdr *n; - struct xfrm_usersa_id *sa_id; - int err; - - memset(buf, 0, sizeof(buf)); - n = (struct nlmsghdr *)buf; - n->nlmsg_len = NLMSG_LENGTH(sizeof(struct xfrm_usersa_id)); - n->nlmsg_flags = NLM_F_REQUEST; - n->nlmsg_type = XFRM_MSG_DELSA; - - sa_id = NLMSG_DATA(n); - /* State src and dst addresses */ - memcpy(sa_id->daddr.a6, sel->daddr.a6, sizeof(sel->daddr.a6)); - sa_id->family = AF_INET6; - sa_id->proto = proto; - - addattr_l(n, sizeof(buf), XFRMA_SRCADDR, &sel->saddr, - sizeof(sel->saddr)); - - if ((err = rtnl_xfrm_do(n, NULL)) < 0) - xfrm_state_id_dump("Failed to del state:\n", sa_id, &sel->saddr); - - return err; -} - -static void _create_dstopt_tmpl(struct xfrm_user_tmpl *tmpl, - const struct in6_addr *dst, - const struct in6_addr *src, - int mode) -{ - memset(tmpl, 0, sizeof(*tmpl)); - tmpl->family = AF_INET6; - tmpl->id.proto = IPPROTO_DSTOPTS; - tmpl->mode = mode; - tmpl->optional = 1; - tmpl->reqid = 0; - - if (dst) - memcpy(&tmpl->id.daddr, dst, sizeof(tmpl->id.daddr)); - - if (src) - memcpy(&tmpl->saddr, src, sizeof(tmpl->saddr)); -} - -static inline void create_dstopt_tmpl(struct xfrm_user_tmpl *tmpl, - const struct in6_addr *dst, - const struct in6_addr *src) -{ - _create_dstopt_tmpl(tmpl, dst, src, XFRM_MODE_ROUTEOPTIMIZATION); -} - -static inline void create_trig_dstopt_tmpl(struct xfrm_user_tmpl *tmpl, - const struct in6_addr *dst, - const struct in6_addr *src) -{ - _create_dstopt_tmpl(tmpl, dst, src, - XFRM_MODE_IN_TRIGGER); -} - -static void _create_rh_tmpl(struct xfrm_user_tmpl *tmpl, int mode) -{ - memset(tmpl, 0, sizeof(*tmpl)); - tmpl->family = AF_INET6; - tmpl->id.proto = IPPROTO_ROUTING; - tmpl->mode = mode; - tmpl->optional = 1; - tmpl->reqid = 0; -} -static void create_rh_tmpl(struct xfrm_user_tmpl *tmpl) -{ - _create_rh_tmpl(tmpl, XFRM_MODE_ROUTEOPTIMIZATION); -} - -static void create_trig_rh_tmpl(struct xfrm_user_tmpl *tmpl) -{ - _create_rh_tmpl(tmpl, XFRM_MODE_IN_TRIGGER); -} - -/* Creates a ESP/AH/IPComp policy for protecting signaling bewteen MN - * and HA */ -static void create_ipsec_tmpl(struct xfrm_user_tmpl *tmpl, uint8_t proto, - int tunnel, - const struct in6_addr *tdst, - const struct in6_addr *tsrc, - uint32_t reqid) -{ - memset(tmpl, 0, sizeof(*tmpl)); - tmpl->family = AF_INET6; - tmpl->ealgos = ~(uint32_t)0; - tmpl->aalgos = ~(uint32_t)0; - tmpl->id.proto = proto; - tmpl->optional = 0; - tmpl->mode = tunnel; - tmpl->reqid = reqid; - - if (tunnel) { - memcpy(&tmpl->id.daddr, tdst, sizeof(struct in6_addr)); - memcpy(&tmpl->saddr, tsrc, sizeof(struct in6_addr)); - } -} - -static int _mn_ha_ipsec_init(const struct in6_addr *haaddr, - const struct in6_addr *hoa, - struct ipsec_policy_entry *e, - __attribute__ ((unused)) void *arg) -{ - struct xfrm_user_tmpl tmpls[MIPV6_MAX_TMPLS]; - struct xfrm_selector sel; - int ti; - int ulp = 0; - int type_in = 0, type_out = 0; - int prio = MIP6_PRIO_HOME_DATA_IPSEC; - int dir; - - switch (e->type) { - case IPSEC_POLICY_TYPE_NDISC: - type_in = ND_NEIGHBOR_SOLICIT; - type_out = ND_NEIGHBOR_ADVERT; - ulp = IPPROTO_ICMPV6; - prio = MIP6_PRIO_HOME_SIG; - break; - - case IPSEC_POLICY_TYPE_MOBPFXDISC: - type_in = MIP_PREFIX_ADVERT; - type_out = MIP_PREFIX_SOLICIT; - - case IPSEC_POLICY_TYPE_ICMP: - ulp = IPPROTO_ICMPV6; - break; - - case IPSEC_POLICY_TYPE_HOMEREGBINDING: - type_in = IP6_MH_TYPE_BACK; - type_out = IP6_MH_TYPE_BU; - - case IPSEC_POLICY_TYPE_MH: - ulp = IPPROTO_MH; - prio = MIP6_PRIO_HOME_SIG; - break; - - case IPSEC_POLICY_TYPE_ANY: - break; - - default: - return 0; - } - - /* inbound */ - set_selector(hoa, haaddr, ulp, type_in, 0, 0, &sel); - dir = XFRM_POLICY_IN; - ti = 0; - - if (ipsec_use_ipcomp(e)) - create_ipsec_tmpl(&tmpls[ti++], IPPROTO_COMP, 0, - NULL, NULL, e->reqid_tomn); - - if (ipsec_use_esp(e)) - create_ipsec_tmpl(&tmpls[ti++], IPPROTO_ESP, 0, - NULL, NULL, e->reqid_tomn); - - if (ipsec_use_ah(e)) - create_ipsec_tmpl(&tmpls[ti++], IPPROTO_AH, 0, - NULL, NULL, e->reqid_tomn); - - if (xfrm_ipsec_policy_add(&sel, 0, dir, e->action, prio, tmpls, ti)) - return -1; - - /* outbound */ - set_selector(haaddr, hoa, ulp, type_out, 0, 0, &sel); - dir = XFRM_POLICY_OUT; - ti = 0; - - if (ipsec_use_ipcomp(e)) - create_ipsec_tmpl(&tmpls[ti++], IPPROTO_COMP, 0, - NULL, NULL, e->reqid_toha); - - if (ipsec_use_esp(e)) - create_ipsec_tmpl(&tmpls[ti++], IPPROTO_ESP, 0, - NULL, NULL, e->reqid_toha); - - /* AH template must be placed as the last one for outbound SP */ - if (ipsec_use_ah(e)) - create_ipsec_tmpl(&tmpls[ti++], IPPROTO_AH, 0, - NULL, NULL, e->reqid_toha); - - return xfrm_ipsec_policy_add(&sel, 0, dir, e->action, prio, &tmpls[0], ti); -} - -static int _mn_ha_ipsec_bypass_init(__attribute__ ((unused)) const struct in6_addr *haaddr, - const struct in6_addr *hoa, - struct ipsec_policy_entry *e, - __attribute__ ((unused)) void *arg) -{ - struct xfrm_selector sel; - int prio = MIP6_PRIO_BYPASS_BU; - int err = 0; - - /* set bypass policy for allowing MN to send BU over RO path to - its CN. */ - switch (e->type) { - case IPSEC_POLICY_TYPE_MH: - set_selector(&in6addr_any, hoa, IPPROTO_MH, - IP6_MH_TYPE_BU, 0, 0, &sel); - err = xfrm_ipsec_policy_add(&sel, 0, XFRM_POLICY_OUT, - XFRM_POLICY_ALLOW, prio, - NULL, 0); - break; - - default: - break; - } - - return err; -} - -static int mr_ipsec_bypass_init(void) -{ - struct list_head *home; - struct list_head *mnps; - int prio = MIP6_PRIO_MR_LOCAL_DATA_BYPASS; - int err=0; - - /* Loop for each HomeAddress info */ - list_for_each(home, &conf.home_addrs) { - struct home_addr_info *hai; - hai = list_entry(home, struct home_addr_info, list); - - if (!hai->mob_rtr) - continue; - - /* Mobile Router for this link so loop for each MNP to - * add bypass policies to *and* from the MNP link */ - list_for_each(mnps, &hai->mob_net_prefixes) { - struct prefix_list_entry * mnp; - struct xfrm_selector sel; - uid_t uid = getuid(); - - mnp = list_entry(mnps, struct prefix_list_entry, list); - - /* IN, src = MNP , dst = any */ - mr_set_selector(mnp, NULL, uid, &sel); - err = xfrm_ipsec_policy_add(&sel, 0, XFRM_POLICY_IN, - XFRM_POLICY_ALLOW, prio, - NULL, 0); - - /* FWD, src = MNP , dst = any */ - err = xfrm_ipsec_policy_add(&sel, 0, XFRM_POLICY_FWD, - XFRM_POLICY_ALLOW, prio, - NULL, 0); - - /* OUT, src = any , dst = MNP */ - mr_set_selector(NULL, mnp, uid, &sel); - err = xfrm_ipsec_policy_add(&sel, 0, XFRM_POLICY_OUT, - XFRM_POLICY_ALLOW, prio, - NULL, 0); - } - } - - return err; -} - -static inline int mn_ha_ipsec_init(void) -{ - /* insert bypass policy */ - if (ipsec_policy_walk(_mn_ha_ipsec_bypass_init, NULL)) - return -1; - - /* insert NEMO-related bypass */ - if (mr_ipsec_bypass_init()) - return -1; - - if (ipsec_policy_walk(_mn_ha_ipsec_init, NULL)) - return -1; - - return 0; -} - -/* Create a state and policy for receiving routing header type 2 to - * any home address from any CN / HA */ -static int xfrm_mn_init(void) -{ - struct xfrm_selector sel; - struct xfrm_user_tmpl tmpl; - - XDBG("Adding policies and states for MN\n"); - - if (conf.UseMnHaIPsec && mn_ha_ipsec_init() < 0) - return -1; - - /* policy for sending BE */ - /* The priolity is higher than the block policy so that MN can send BE during registration */ - set_selector(&in6addr_any, &in6addr_any, - IPPROTO_MH, IP6_MH_TYPE_BERROR, 0, 0, &sel); - - if (xfrm_mip_policy_add(&sel, 0, XFRM_POLICY_OUT, XFRM_POLICY_ALLOW, - MIP6_PRIO_HOME_SIG_ANY, NULL, 0) < 0) - return -1; - - XDBG2("Adding RTHdr type 2 handling 2 state for MN\n"); - set_selector(&in6addr_any, &in6addr_any, 0, 0, 0, 0, &sel); - create_rh_tmpl(&tmpl); - - if (xfrm_mip_policy_add(&sel, 0, XFRM_POLICY_IN, XFRM_POLICY_ALLOW, - MIP6_PRIO_RO_DATA_ANY, &tmpl, 1)) - return -1; - - return xfrm_state_add(&sel, IPPROTO_ROUTING, &in6addr_any, 0, - XFRM_STATE_WILDRECV); -} - -static int _mn_ha_ipsec_cleanup(const struct in6_addr *haaddr, - const struct in6_addr *hoa, - struct ipsec_policy_entry *e, - __attribute__ ((unused)) void *arg) -{ - struct xfrm_selector sel; - int ulp = 0; - int type_in = 0, type_out = 0; - int prio = MIP6_PRIO_HOME_DATA_IPSEC; - - switch (e->type) { - case IPSEC_POLICY_TYPE_NDISC: - type_in = ND_NEIGHBOR_SOLICIT; - type_out = ND_NEIGHBOR_ADVERT; - ulp = IPPROTO_ICMPV6; - prio = MIP6_PRIO_HOME_SIG; - break; - - case IPSEC_POLICY_TYPE_MOBPFXDISC: - type_in = MIP_PREFIX_ADVERT; - type_out = MIP_PREFIX_SOLICIT; - - case IPSEC_POLICY_TYPE_ICMP: - ulp = IPPROTO_ICMPV6; - break; - - case IPSEC_POLICY_TYPE_HOMEREGBINDING: - type_in = IP6_MH_TYPE_BACK; - type_out = IP6_MH_TYPE_BU; - - case IPSEC_POLICY_TYPE_MH: - ulp = IPPROTO_MH; - prio = MIP6_PRIO_HOME_SIG; - break; - - case IPSEC_POLICY_TYPE_ANY: - break; - - default: - return 0; - } - - /* inbound */ - set_selector(hoa, haaddr, ulp, type_in, 0, 0, &sel); - xfrm_ipsec_policy_del(&sel, XFRM_POLICY_IN); - /* outbound */ - set_selector(haaddr, hoa, ulp, type_out, 0, 0, &sel); - xfrm_ipsec_policy_del(&sel, XFRM_POLICY_OUT); - return 0; -} - -static int _mn_ha_ipsec_bypass_cleanup(__attribute__ ((unused)) const struct in6_addr *haaddr, - const struct in6_addr *hoa, - struct ipsec_policy_entry *e, - __attribute__ ((unused)) void *arg) -{ - struct xfrm_selector sel; - int err = 0; - - switch (e->type) { - case IPSEC_POLICY_TYPE_MH: - set_selector(&in6addr_any, hoa, IPPROTO_MH, - IP6_MH_TYPE_BU, 0, 0, &sel); - err = xfrm_ipsec_policy_del(&sel, XFRM_POLICY_OUT); - break; - - default: - break; - } - - return err; -} - -static int mr_ipsec_bypass_cleanup(void) -{ - struct list_head *home; - struct list_head *mnps; - int err=0; - - /* Loop for each HomeAddress info */ - list_for_each(home, &conf.home_addrs) { - struct home_addr_info *hai; - hai = list_entry(home, struct home_addr_info, list); - - if (!hai->mob_rtr) - continue; - - /* Mobile Router for this link so loop for each MNP to - * delete bypass policies to *and* from the MNP link */ - list_for_each(mnps, &hai->mob_net_prefixes) { - struct prefix_list_entry * mnp; - struct xfrm_selector sel; - uid_t uid = getuid(); - - mnp = list_entry(mnps, struct prefix_list_entry, list); - - /* IN, src = MNP , dst = any */ - mr_set_selector(mnp, NULL, uid, &sel); - err = xfrm_ipsec_policy_del(&sel, XFRM_POLICY_IN); - - /* FWD, src = MNP , dst = any */ - err = xfrm_ipsec_policy_del(&sel, XFRM_POLICY_FWD); - - /* OUT, src = any , dst = MNP */ - mr_set_selector(NULL, mnp, uid, &sel); - err = xfrm_ipsec_policy_del(&sel, XFRM_POLICY_OUT); - } - } - - return err; -} - - -static inline void mn_ha_ipsec_cleanup(void) -{ - ipsec_policy_walk(_mn_ha_ipsec_bypass_cleanup, NULL); - - (void)mr_ipsec_bypass_cleanup(); - - ipsec_policy_walk(_mn_ha_ipsec_cleanup, NULL); -} - -static void xfrm_mn_cleanup(void) -{ - struct xfrm_selector sel; - - /* the policy for sending BE */ - set_selector(&in6addr_any, &in6addr_any, - IPPROTO_MH, IP6_MH_TYPE_BERROR, 0, 0, &sel); - xfrm_mip_policy_del(&sel, XFRM_POLICY_OUT); - - - XDBG("Deleting policies and states for MN\n"); - XDBG2("Deleting RTHdr type 2 handling 2 state for MN\n"); - set_selector(&in6addr_any, &in6addr_any, 0, 0, 0, 0, &sel); - xfrm_state_del(IPPROTO_ROUTING, &sel); - xfrm_mip_policy_del(&sel, XFRM_POLICY_IN); - - if (conf.UseMnHaIPsec) - mn_ha_ipsec_cleanup(); - -} - -static int _ha_mn_ipsec_init(const struct in6_addr *haaddr, - const struct in6_addr *hoa, - struct ipsec_policy_entry *e, - __attribute__ ((unused)) void *arg) -{ - struct xfrm_user_tmpl tmpls[MIPV6_MAX_TMPLS]; - struct xfrm_selector sel; - int ti; - int ulp = 0; - int type_in = 0, type_out = 0; - int prio = MIP6_PRIO_HOME_DATA_IPSEC; - int use_dst = 0; - int dir; - - switch (e->type) { - case IPSEC_POLICY_TYPE_NDISC: - type_in = ND_NEIGHBOR_ADVERT; - type_out = ND_NEIGHBOR_SOLICIT; - ulp = IPPROTO_ICMPV6; - prio = MIP6_PRIO_HOME_SIG; - break; - - case IPSEC_POLICY_TYPE_MOBPFXDISC: - type_in = MIP_PREFIX_SOLICIT; - type_out = MIP_PREFIX_ADVERT; - - case IPSEC_POLICY_TYPE_ICMP: - ulp = IPPROTO_ICMPV6; - break; - - case IPSEC_POLICY_TYPE_HOMEREGBINDING: - type_in = IP6_MH_TYPE_BU; - type_out = IP6_MH_TYPE_BACK; - - case IPSEC_POLICY_TYPE_MH: - ulp = IPPROTO_MH; - use_dst = 1; - prio = MIP6_PRIO_HOME_SIG; - break; - - case IPSEC_POLICY_TYPE_BERROR: - type_in = -1; - type_out = IP6_MH_TYPE_BERROR; - ulp = IPPROTO_MH; - prio = MIP6_PRIO_HOME_ERROR; - break; - - case IPSEC_POLICY_TYPE_ANY: - break; - - default: - return 0; - } - - if (type_in >= 0) { - /* inbound */ - set_selector(haaddr, hoa, ulp, type_in, 0, 0, &sel); - dir = XFRM_POLICY_IN; - ti = 0; - - if (ipsec_use_ipcomp(e)) - create_ipsec_tmpl(&tmpls[ti++], IPPROTO_COMP, 0, - NULL, NULL, e->reqid_toha); - - if (ipsec_use_esp(e)) - create_ipsec_tmpl(&tmpls[ti++], IPPROTO_ESP, 0, - NULL, NULL, e->reqid_toha); - - if (ipsec_use_ah(e)) - create_ipsec_tmpl(&tmpls[ti++], IPPROTO_AH, 0, - NULL, NULL, e->reqid_toha); - - if (xfrm_ipsec_policy_add(&sel, 0, dir, e->action, prio, - tmpls, ti)) - return -1; - } - - /* outbound */ - set_selector(hoa, haaddr, ulp, type_out, 0, 0, &sel); - dir = XFRM_POLICY_OUT; - ti = 0; - - if (ipsec_use_ipcomp(e)) - create_ipsec_tmpl(&tmpls[ti++], IPPROTO_COMP, 0, - NULL, NULL, e->reqid_tomn); - - if (ipsec_use_esp(e)) - create_ipsec_tmpl(&tmpls[ti++], IPPROTO_ESP, 0, - NULL, NULL, e->reqid_tomn); - - /* AH template must be placed as the last one for outbound SP */ - if (ipsec_use_ah(e)) - create_ipsec_tmpl(&tmpls[ti++], IPPROTO_AH, 0, - NULL, NULL, e->reqid_tomn); - - return xfrm_ipsec_policy_add(&sel, 0, dir, e->action, prio, &tmpls[0], ti); -} - -static inline int ha_mn_ipsec_init(void) -{ - XDBG("Adding IPsec policies and states for HA\n"); - return ipsec_policy_walk(_ha_mn_ipsec_init, NULL); -} - -static int xfrm_ha_init(void) -{ - XDBG("Adding policies and states for HA\n"); - - if (conf.UseMnHaIPsec && ha_mn_ipsec_init() < 0) - return -1; - - return 0; -} - -static int _ha_mn_ipsec_cleanup(const struct in6_addr *haaddr, - const struct in6_addr *hoa, - struct ipsec_policy_entry *e, - __attribute__ ((unused)) void *arg) -{ - struct xfrm_selector sel; - int ulp = 0; - int type_in = 0, type_out = 0; - int prio = MIP6_PRIO_HOME_DATA_IPSEC; - - switch (e->type) { - case IPSEC_POLICY_TYPE_NDISC: - type_in = ND_NEIGHBOR_ADVERT; - type_out = ND_NEIGHBOR_SOLICIT; - ulp = IPPROTO_ICMPV6; - prio = MIP6_PRIO_HOME_SIG; - break; - - case IPSEC_POLICY_TYPE_MOBPFXDISC: - type_in = MIP_PREFIX_SOLICIT; - type_out = MIP_PREFIX_ADVERT; - - case IPSEC_POLICY_TYPE_ICMP: - ulp = IPPROTO_ICMPV6; - break; - - case IPSEC_POLICY_TYPE_HOMEREGBINDING: - type_in = IP6_MH_TYPE_BU; - type_out = IP6_MH_TYPE_BACK; - - case IPSEC_POLICY_TYPE_MH: - ulp = IPPROTO_MH; - prio = MIP6_PRIO_HOME_SIG; - break; - - case IPSEC_POLICY_TYPE_BERROR: - type_in = -1; - type_out = IP6_MH_TYPE_BERROR; - ulp = IPPROTO_MH; - prio = MIP6_PRIO_HOME_ERROR; - break; - - case IPSEC_POLICY_TYPE_ANY: - break; - - default: - return 0; - } - - if (type_in >= 0) { - /* inbound */ - set_selector(haaddr, hoa, ulp, type_in, 0, 0, &sel); - xfrm_ipsec_policy_del(&sel, XFRM_POLICY_IN); - } - - /* outbound */ - set_selector(hoa, haaddr, ulp, type_out, 0, 0, &sel); - xfrm_ipsec_policy_del(&sel, XFRM_POLICY_OUT); - return 0; -} - -static inline void ha_mn_ipsec_cleanup(void) -{ - ipsec_policy_walk(_ha_mn_ipsec_cleanup, NULL); -} - -static void xfrm_ha_cleanup(void) -{ - XDBG("Deleting policies and states for HA\n"); - - if (conf.UseMnHaIPsec) - ha_mn_ipsec_cleanup(); -} - -int xfrm_cn_policy_mh_out_touch(int update) -{ - struct xfrm_selector sel; - - /* policy to not add rth type 2 to MH msgs */ - set_selector(&in6addr_any, &in6addr_any, IPPROTO_MH, 0, 0, 0, &sel); - - if (xfrm_mip_policy_add(&sel, update, XFRM_POLICY_OUT, - XFRM_POLICY_ALLOW, MIP6_PRIO_NO_RO_SIG_ANY, - NULL, 0) < 0) - return -1; - - return 0; -} - -/* Create or clean up initial xfrm policies and states for CN */ -static int xfrm_cn_init(void) -{ - struct xfrm_selector sel; - - XDBG("Adding policies and states for CN\n"); - - /* Create policy for all BUs with home flag NOT set to - use home address option */ - if (cn_wildrecv_bu_pol_add()) - return -1; - - set_selector(&in6addr_any, &in6addr_any, 0, 0, 0, 0, &sel); - - if (xfrm_state_add(&sel, IPPROTO_DSTOPTS, - &in6addr_any, 0, XFRM_STATE_WILDRECV) < 0) - return -1; - - if (xfrm_cn_policy_mh_out_touch(0) < 0) - return -1; - - /* Let Neighbor Solicitation messages bypass bindings */ - set_selector(&in6addr_any, &in6addr_any, - IPPROTO_ICMPV6, ND_NEIGHBOR_SOLICIT, 0, 0, &sel); - - if (xfrm_mip_policy_add(&sel, 0, XFRM_POLICY_OUT, XFRM_POLICY_ALLOW, - MIP6_PRIO_NO_RO_SIG_ANY, NULL, 0) < 0) - return -1; - - /* - * Let Neighbor Advertisement messages bypass bindings - * This policy is high priority(priory 3) not to block - * by the BlockPolicy during registration. - */ - set_selector(&in6addr_any, &in6addr_any, - IPPROTO_ICMPV6, ND_NEIGHBOR_ADVERT, 0, 0, &sel); - - if (xfrm_mip_policy_add(&sel, 0, XFRM_POLICY_OUT, XFRM_POLICY_ALLOW, - MIP6_PRIO_HOME_SIG_ANY, NULL, 0) < 0) - return -1; - - /* Let ICMPv6 error messages bypass bindings */ - set_selector(&in6addr_any, &in6addr_any, - IPPROTO_ICMPV6, 0, 0, 0, &sel); - sel.sport_mask = htons(0x80); - return xfrm_mip_policy_add(&sel, 0, XFRM_POLICY_OUT, XFRM_POLICY_ALLOW, - MIP6_PRIO_NO_RO_SIG_ANY, NULL, 0); -} - -static void xfrm_cn_cleanup(void) -{ - struct xfrm_selector sel; - - XDBG("Deleting policies and states for CN\n"); - - cn_wildrecv_bu_pol_del(); - - set_selector(&in6addr_any, &in6addr_any, 0, 0, 0, 0, &sel); - xfrm_state_del(IPPROTO_DSTOPTS, &sel); - - set_selector(&in6addr_any, &in6addr_any, IPPROTO_MH, 0, 0, 0, &sel); - xfrm_mip_policy_del(&sel, XFRM_POLICY_OUT); - - set_selector(&in6addr_any, &in6addr_any, - IPPROTO_ICMPV6, ND_NEIGHBOR_SOLICIT, 0, 0, &sel); - xfrm_mip_policy_del(&sel, XFRM_POLICY_OUT); - - set_selector(&in6addr_any, &in6addr_any, - IPPROTO_ICMPV6, ND_NEIGHBOR_ADVERT, 0, 0, &sel); - xfrm_mip_policy_del(&sel, XFRM_POLICY_OUT); - - set_selector(&in6addr_any, &in6addr_any, - IPPROTO_ICMPV6, 0, 0, 0, &sel); - sel.sport_mask = htons(0x80); - xfrm_mip_policy_del(&sel, XFRM_POLICY_OUT); -} - -static int mn_ro_pol_chk(const struct home_addr_info *hai, - const struct in6_addr *cn) -{ - struct list_head *l; - int res = MIP6_PRIO_RO_TRIG_ANY; - - if (!conf.DoRouteOptimizationMN) - return -1; - - list_for_each(l, &hai->ro_policies) { - struct xfrm_ro_pol *pol; - pol = list_entry(l, struct xfrm_ro_pol, list); - - if (IN6_ARE_ADDR_EQUAL(cn, &pol->cn_addr)) - return pol->do_ro ? MIP6_PRIO_RO_TRIG : -1; - - if (IN6_IS_ADDR_UNSPECIFIED(&pol->cn_addr) && !pol->do_ro) - res = -1; - } - return res; -} - -static inline int mn_has_cn_ro_pol(struct bulentry *e) -{ - return mn_ro_pol_chk(e->home, &e->peer_addr) == MIP6_PRIO_RO_TRIG; -} - -static int _mn_bule_ro_pol_add(struct bulentry *e, int iif, int replace) -{ - struct xfrm_selector sel; - int action; - int prio; - - if (e->flags & IP6_MH_BU_HOME) { - /* block payload data to HA until binding is complete */ - action = XFRM_POLICY_BLOCK; - prio = MIP6_PRIO_HOME_BLOCK; - } else { - /* reverse tunnel payload traffic until binding is complete */ - action = XFRM_POLICY_ALLOW; - prio = MIP6_PRIO_NO_RO_DATA; - replace |= mn_has_cn_ro_pol(e); - } - - set_selector(&e->peer_addr, &e->hoa, 0, 0, 0, iif, &sel); - return xfrm_mip_policy_add(&sel, replace, XFRM_POLICY_OUT, - action, prio, NULL, 0); -} - -static int mn_bule_ro_pol_add(void *vbule, void *viif) -{ - struct bulentry *e = vbule; - int *iif = viif; - - if (e->type != BUL_ENTRY) - return 0; - - return _mn_bule_ro_pol_add(e, *iif, 0); -} - - -static int _mn_bce_ro_pol_add(const struct in6_addr *our_addr, - const struct in6_addr *peer_addr) -{ - struct xfrm_user_tmpl tmpls[2]; - struct xfrm_selector sel; - create_rh_tmpl(&tmpls[0]); - create_trig_dstopt_tmpl(&tmpls[1], peer_addr, our_addr); - set_selector(peer_addr, our_addr, 0, 0, 0, 0, &sel); - - if (xfrm_mip_policy_add(&sel, 1, XFRM_POLICY_OUT, XFRM_POLICY_ALLOW, - MIP6_PRIO_RO_BCE_DATA, tmpls, 2)) - return -1; - - create_dstopt_tmpl(&tmpls[0], our_addr, peer_addr); - create_trig_rh_tmpl(&tmpls[1]); - set_selector(our_addr, peer_addr, 0, 0, 0, 0, &sel); - return xfrm_mip_policy_add(&sel, 1, XFRM_POLICY_IN, XFRM_POLICY_ALLOW, - MIP6_PRIO_RO_BCE_DATA, tmpls, 2); - -} - -static int mn_bce_ro_pol_add(void *vbce, void *vhai) -{ - struct bcentry *e = vbce; - struct home_addr_info *hai = vhai; - int err = 0; - pthread_rwlock_rdlock(&e->lock); - - if (e->type > BCE_NONCE_BLOCK && - e->type != BCE_HOMEREG && e->type != BCE_DAD && - mn_ro_pol_chk(hai, &e->peer_addr)) - err = _mn_bce_ro_pol_add(&e->our_addr, &e->peer_addr); - - pthread_rwlock_unlock(&e->lock); - return err; -} - -/** mn_ro_pol_add - adds xfrm policies related to RO in MN - * @hai HoA info - * @ifindex tunnel iface index - * - * Create IPsec policies for protection of RR signaling in MN and adds - * user configurable policies for triggering RO. - */ - -int mn_ro_pol_add(struct home_addr_info *hai, int ifindex, int changed) -{ - int wildcard = 0; - struct xfrm_selector sel; - struct xfrm_user_tmpl otmpl, itmpl; - struct list_head *list; - - assert(hai && hai->home_reg_status != HOME_REG_NONE); - - if (!conf.DoRouteOptimizationMN) - return 0; - - if (changed) - bul_iterate(&hai->bul, mn_bule_ro_pol_add, &ifindex); - else - bcache_iterate(mn_bce_ro_pol_add, hai); - - create_trig_rh_tmpl(&itmpl); - - /* RO triggering policy */ - list_for_each(list, &hai->ro_policies) { - struct xfrm_ro_pol *pol; - int ntmpl = 0; - int prio = MIP6_PRIO_RO_TRIG; - - pol = list_entry(list, struct xfrm_ro_pol, list); - - if (IN6_IS_ADDR_UNSPECIFIED(&pol->cn_addr)) { - prio = MIP6_PRIO_RO_TRIG_ANY; - wildcard = 1; - } - - if (pol->do_ro) { - ntmpl = 1; - create_trig_dstopt_tmpl(&otmpl, &pol->cn_addr, - &hai->hoa.addr); - } - - XDBG("Adding %sRO policies for %x:%x:%x:%x:%x:%x:%x:%x\n", - pol->do_ro ? "": "no-", NIP6ADDR(&pol->cn_addr)); - set_selector(&pol->cn_addr, &hai->hoa.addr, - 0, 0, 0, ifindex, &sel); - - if (xfrm_mip_policy_add(&sel, 0, XFRM_POLICY_OUT, - XFRM_POLICY_ALLOW, prio, &otmpl, ntmpl)) - return -1; - - set_selector(&hai->hoa.addr, &pol->cn_addr, - 0, 0, 0, ifindex, &sel); - - if (xfrm_mip_policy_add(&sel, 0, XFRM_POLICY_IN, - XFRM_POLICY_ALLOW, prio, &itmpl, ntmpl)) - return -1; - } - - if (!wildcard) { - XDBG("Adding default RO triggering policies for all Correspondent Nodes\n"); - create_trig_dstopt_tmpl(&otmpl, &in6addr_any, &hai->hoa.addr); - set_selector(&in6addr_any, &hai->hoa.addr, 0, - 0, 0, 0, &sel); - - if (xfrm_mip_policy_add(&sel, 0, XFRM_POLICY_OUT, - XFRM_POLICY_ALLOW, - MIP6_PRIO_RO_TRIG_ANY, &otmpl, 1)) - return -1; - -#if 0 // Disable inboud trigger because of ifindex problem - set_selector(&hai->hoa.addr, &in6addr_any, - 0, 0, 0, 0, &sel); - - if (xfrm_mip_policy_add(&sel, 0, XFRM_POLICY_IN, - XFRM_POLICY_ALLOW, - MIP6_PRIO_RO_TRIG_ANY, &itmpl, 1)) - return -1; - -#endif - } - - return 0; -} - -static void _mn_bule_ro_pol_del(struct bulentry *e) -{ - struct xfrm_selector sel; - set_selector(&e->peer_addr, &e->hoa, 0, 0, 0, 0, &sel); - xfrm_mip_policy_del(&sel, XFRM_POLICY_OUT); - - /* - * XXX: inbound is missed??? - */ - set_selector(&e->hoa, &e->peer_addr, 0, 0, 0, 0, &sel); - xfrm_mip_policy_del(&sel, XFRM_POLICY_IN); -} - -static int _xfrm_bce_reset(struct bulentry *bule); -int mn_bule_ro_pol_del(void *vbule, __attribute__ ((unused)) void *viif) -{ - struct bulentry *e = vbule; - - if (e->type == BUL_ENTRY) - _mn_bule_ro_pol_del(e); - - if (!(e->flags & IP6_MH_BU_HOME) ) - _xfrm_bce_reset(e); - - return 0; -} - -/** mn_ro_pol_del - deletes xfrm policies related to RO in MN - * @hai HoA info - * @ifindex tunnel iface index - * - * Removes IPsec policies for protection of RR signaling in MN and deletes - * user configurable policies for triggering RO. - */ - -void mn_ro_pol_del(struct home_addr_info *hai, int ifindex, int changed) -{ - int wildcard = 0; - struct xfrm_selector sel; - struct list_head *list; - - assert(hai && hai->home_reg_status != HOME_REG_NONE); - - if (!conf.DoRouteOptimizationMN) - return; - - if (changed) - bul_iterate(&hai->bul, mn_bule_ro_pol_del, &ifindex); - - list_for_each(list, &hai->ro_policies) { - struct xfrm_ro_pol *pol; - pol = list_entry(list, struct xfrm_ro_pol, list); - - if (IN6_IS_ADDR_UNSPECIFIED(&pol->cn_addr)) - wildcard = 1; - - set_selector(&pol->cn_addr, &hai->hoa.addr, - 0, 0, 0, ifindex, &sel); - xfrm_mip_policy_del(&sel, XFRM_POLICY_OUT); - set_selector(&hai->hoa.addr, &pol->cn_addr, - 0, 0, 0, ifindex, &sel); - xfrm_mip_policy_del(&sel, XFRM_POLICY_IN); - } - - if (!wildcard) { - XDBG("Deleting default RO triggering policies for all Correspondent Nodes\n"); - set_selector(&in6addr_any, &hai->hoa.addr, 0, - 0, 0, 0, &sel); - xfrm_mip_policy_del(&sel, XFRM_POLICY_OUT); -#if 0 // Disable inboud trigger because of ifindex problem - set_selector(&hai->hoa.addr, &in6addr_any, - 0, 0, 0, 0, &sel); - xfrm_mip_policy_del(&sel, XFRM_POLICY_IN); -#endif - } -} - -/* XXX TENTATIVE */ -int xfrm_ipsec_policy_mod(struct xfrm_userpolicy_info *sp, - struct xfrm_user_tmpl *tmpl, - int num_tmpl, - int cmd) -{ - if (cmd == 0) { /* delete */ - return (xfrm_ipsec_policy_del(&sp->sel, sp->dir)); - } else if (cmd == 1) { /* add */ - return (xfrm_ipsec_policy_add(&sp->sel, 0, sp->dir, sp->action, - sp->priority, tmpl, num_tmpl)); - } else - return -1; -} - -/** - * _ha_mn_ipsec_pol_mod - modifies wildcard and ICMP policies between HA and MN - * @haaddr: HA's address - * @hoa: Home address - * @e: pointer to the ipsec_policy_entry - * @arg: registration - * - * Adds xfrm_policies into kernel that are needed for home reg/dereg. - */ -static int _ha_mn_ipsec_pol_mod(const struct in6_addr *haaddr, - const struct in6_addr *hoa, - struct ipsec_policy_entry *e, - __attribute__ ((unused)) void *arg) -{ - struct xfrm_user_tmpl tmpls[MIPV6_MAX_TMPLS]; - int ti = 0; - struct xfrm_selector sel; - int type_in = 0, type_out = 0; - int ulp = 0; - - switch (e->type) { - case IPSEC_POLICY_TYPE_MOBPFXDISC: - type_in = MIP_PREFIX_SOLICIT; - type_out = MIP_PREFIX_ADVERT; - - case IPSEC_POLICY_TYPE_ICMP: - ulp = IPPROTO_ICMPV6; - - case IPSEC_POLICY_TYPE_ANY: - break; - - default: - return 0; - } - - /* outbound */ - if (ipsec_use_ipcomp(e)) - create_ipsec_tmpl(&tmpls[ti++], IPPROTO_COMP, 0, - NULL, NULL, e->reqid_tomn); - - if (ipsec_use_esp(e)) - create_ipsec_tmpl(&tmpls[ti++], IPPROTO_ESP, 0, - NULL, NULL, e->reqid_tomn); - - /* AH template must be placed as the last one for outbound SP */ - if (ipsec_use_ah(e)) - create_ipsec_tmpl(&tmpls[ti++], IPPROTO_AH, 0, - NULL, NULL, e->reqid_tomn); - - set_selector(hoa, haaddr, ulp, type_out, 0, 0, &sel); - - if (xfrm_ipsec_policy_add(&sel, 1, - XFRM_POLICY_OUT, e->action, - MIP6_PRIO_HOME_DATA_IPSEC, &tmpls[0], ti)) - return -1; - - /* inbound */ - ti = 0; - - if (ipsec_use_ipcomp(e)) - create_ipsec_tmpl(&tmpls[ti++], IPPROTO_COMP, 0, - NULL, NULL, e->reqid_toha); - - if (ipsec_use_esp(e)) - create_ipsec_tmpl(&tmpls[ti++], IPPROTO_ESP, 0, - NULL, NULL, e->reqid_toha); - - if (ipsec_use_ah(e)) - create_ipsec_tmpl(&tmpls[ti++], IPPROTO_AH, 0, - NULL, NULL, e->reqid_toha); - - set_selector(haaddr, hoa, ulp, type_in, 0, 0, &sel); - - if (xfrm_ipsec_policy_add(&sel, 1, - XFRM_POLICY_IN, e->action, - MIP6_PRIO_HOME_DATA_IPSEC, &tmpls[0], ti)) - return -1; - - return 0; -} - -int ha_mn_ipsec_pol_mod(struct in6_addr *haaddr, struct in6_addr *hoa) -{ - return ipsec_policy_apply(haaddr, hoa, _ha_mn_ipsec_pol_mod, NULL); -} - -static int _xfrm_add_bce(const struct in6_addr *our_addr, - const struct in6_addr *peer_addr, - int replace) -{ - struct xfrm_user_tmpl tmpl; - struct xfrm_selector sel; - - /* MN - CN case data out & in */ - create_rh_tmpl(&tmpl); - set_selector(peer_addr, our_addr, 0, 0, 0, 0, &sel); - - if (xfrm_mip_policy_add(&sel, replace, XFRM_POLICY_OUT, XFRM_POLICY_ALLOW, - MIP6_PRIO_RO_BCE_DATA, &tmpl, 1)) - return -1; - - create_dstopt_tmpl(&tmpl, our_addr, peer_addr); - set_selector(our_addr, peer_addr, 0, 0, 0, 0, &sel); - return xfrm_mip_policy_add(&sel, replace, XFRM_POLICY_IN, - XFRM_POLICY_ALLOW, MIP6_PRIO_RO_BCE_DATA, - &tmpl, 1); -} - -static int _xfrm_add_bule_bce(const struct in6_addr *our_addr, - const struct in6_addr *peer_addr, - int replace) -{ - struct xfrm_user_tmpl tmpls[2]; - struct xfrm_selector sel; - replace = 1; - create_rh_tmpl(&tmpls[0]); - create_dstopt_tmpl(&tmpls[1], peer_addr, our_addr); - set_selector(peer_addr, our_addr, 0, 0, 0, 0, &sel); - - if (xfrm_mip_policy_add(&sel, replace, XFRM_POLICY_OUT, XFRM_POLICY_ALLOW, - MIP6_PRIO_RO_BULE_BCE_DATA, tmpls, 2)) - return -1; - - create_dstopt_tmpl(&tmpls[0], our_addr, peer_addr); - create_rh_tmpl(&tmpls[1]); - set_selector(our_addr, peer_addr, 0, 0, 0, 0, &sel); - return xfrm_mip_policy_add(&sel, replace, XFRM_POLICY_IN, - XFRM_POLICY_ALLOW, - MIP6_PRIO_RO_BULE_BCE_DATA, tmpls, 2); -} - -static int xfrm_bule_bce_update(const struct in6_addr *our_addr, - const struct in6_addr *peer_addr, - int replace) -{ - struct home_addr_info *hai; - struct bulentry *e; - int res = -1; - pthread_rwlock_rdlock(&mn_lock); - - if ((hai = mn_get_home_addr(our_addr)) != NULL) { - if ((e = bul_get(hai, NULL, peer_addr)) != NULL) { - if (e->type == BUL_ENTRY && - !_xfrm_add_bule_bce(our_addr, peer_addr, replace)) - res = 0; - } else if (mn_ro_pol_chk(hai, peer_addr) >= 0 && - !_mn_bce_ro_pol_add(our_addr, peer_addr)) - res = 0; - } - - pthread_rwlock_unlock(&mn_lock); - return res; -} - -/** - * xfrm_add_bce - add xfrm_states and xfrm_policies for a BC entry - * @our_addr: our IPv6 address - * @peer_addr: peer's IPv6 address - * @coa: care-of address - * @replace: udpate or new entry - * - * Adds binding cache entry to kernel for route optimization and also - * IPsec policies for protecting MH signaling between MN and HA. Merges - * existing xfrm_policy in case of MN-MN communication withe the one resulting - * from binding update list entry. - */ -int xfrm_add_bce(const struct in6_addr *our_addr, - const struct in6_addr *peer_addr, - const struct in6_addr *coa, - int replace) -{ - struct xfrm_selector sel; - - /* Create policy for outbound RO data traffic */ - set_selector(peer_addr, our_addr, 0, 0, 0, 0, &sel); - - if (xfrm_state_add(&sel, IPPROTO_ROUTING, coa, replace, 0)) { - /* - * WORKAROUND - * In some cases, MN fail to add it because of the state - * inserted by kernel when notifying aquire. So,update it. - */ - if (xfrm_state_add(&sel, IPPROTO_ROUTING, coa, 1, 0)) - return -1; - } - - set_selector(our_addr, peer_addr, 0, 0, 0, 0, &sel); - - if (xfrm_state_add(&sel, IPPROTO_DSTOPTS, coa, replace, 0)) { - /* - * WORKAROUND - * In some cases, MN fail to add it because of the state - * inserted by kernel when notifying aquire. So,update it. - */ - if (xfrm_state_add(&sel, IPPROTO_DSTOPTS, coa, 1, 0)) - return -1; - } - - if (is_mn() && !xfrm_bule_bce_update(our_addr, peer_addr, replace)) - return 0; - - if (is_ha() && conf.UseMnHaIPsec) { - if (ipsec_policy_apply(our_addr, peer_addr, - _ha_mn_ipsec_pol_mod, NULL) < 0) - return -1; - } - - _xfrm_add_bce(our_addr, peer_addr, replace); - return 0; -} - -/** - * xfrm_del_bce - remove xfrm_states and xfrm_policies for a BC entry - * @our_addr: our IPv6 address - * @peer_addr: peer's IPv6 address - * - * Deletes binding cache entry from kernel and also IPsec - * policies. - */ -void xfrm_del_bce(const struct in6_addr *our_addr, - const struct in6_addr *peer_addr) -{ - struct xfrm_selector sel; - set_selector(peer_addr, our_addr, 0, 0, 0, 0, &sel); - xfrm_mip_policy_del(&sel, XFRM_POLICY_OUT); - xfrm_state_del(IPPROTO_ROUTING, &sel); - set_selector(our_addr, peer_addr, 0, 0, 0, 0, &sel); - xfrm_mip_policy_del(&sel, XFRM_POLICY_IN); - xfrm_state_del(IPPROTO_DSTOPTS, &sel); - - if (is_mn()) { - struct home_addr_info *hai; - struct bulentry *e; - /* for MN-MN communications, checking BUL to insert RO policy */ - pthread_rwlock_rdlock(&mn_lock); - - if ((hai = mn_get_home_addr(our_addr)) != NULL) { - if ((e = bul_get(hai, NULL, peer_addr)) != NULL) { - if (e->type == BUL_ENTRY) - _xfrm_add_bule_bce(our_addr, peer_addr, 0); - } - } - - pthread_rwlock_unlock(&mn_lock); - } -} - -/** - * _mn_ha_ipsec_pol_mod - modifies XFRM policy - * @haaddr: HA's address - * @hoa: Home address - * @e: pointer to the ipsec_policy_entry - * - * Adds xfrm_policies into kernel that are needed for home reg/dereg. - */ -static int _mn_ha_ipsec_pol_mod(const struct in6_addr *haaddr, - const struct in6_addr *hoa, - struct ipsec_policy_entry *e, - __attribute__ ((unused)) void *arg) -{ - struct xfrm_user_tmpl tmpls[MIPV6_MAX_TMPLS]; - struct xfrm_selector sel; - int ti; - int ulp = 0; - int type_in = 0, type_out = 0; - int prio = MIP6_PRIO_HOME_DATA_IPSEC; - int dir; - - switch (e->type) { - case IPSEC_POLICY_TYPE_MOBPFXDISC: - type_in = MIP_PREFIX_ADVERT; - type_out = MIP_PREFIX_SOLICIT; - - case IPSEC_POLICY_TYPE_ICMP: - ulp = IPPROTO_ICMPV6; - break; - - case IPSEC_POLICY_TYPE_HOMEREGBINDING: - type_in = IP6_MH_TYPE_BACK; - type_out = IP6_MH_TYPE_BU; - - case IPSEC_POLICY_TYPE_MH: - ulp = IPPROTO_MH; - prio = MIP6_PRIO_HOME_SIG; - break; - - case IPSEC_POLICY_TYPE_ANY: - break; - - default: - return 0; - } - - /* inbound */ - set_selector(hoa, haaddr, ulp, type_in, 0, 0, &sel); - dir = XFRM_POLICY_IN; - ti = 0; - - if (ipsec_use_ipcomp(e)) - create_ipsec_tmpl(&tmpls[ti++], IPPROTO_COMP, 0, - NULL, NULL, e->reqid_tomn); - - if (ipsec_use_esp(e)) - create_ipsec_tmpl(&tmpls[ti++], IPPROTO_ESP, 0, - NULL, NULL, e->reqid_tomn); - - if (ipsec_use_ah(e)) - create_ipsec_tmpl(&tmpls[ti++], IPPROTO_AH, 0, - NULL, NULL, e->reqid_tomn); - - if (xfrm_ipsec_policy_add(&sel, 1, dir, e->action, prio, tmpls, ti)) - return -1; - - /* outbound */ - set_selector(haaddr, hoa, ulp, type_out, 0, 0, &sel); - dir = XFRM_POLICY_OUT; - ti = 0; - - if (ipsec_use_ipcomp(e)) - create_ipsec_tmpl(&tmpls[ti++], IPPROTO_COMP, 0, - NULL, NULL, e->reqid_toha); - - if (ipsec_use_esp(e)) - create_ipsec_tmpl(&tmpls[ti++], IPPROTO_ESP, 0, - NULL, NULL, e->reqid_toha); - - /* AH template must be placed as the last one for outbound SP */ - if (ipsec_use_ah(e)) - create_ipsec_tmpl(&tmpls[ti++], IPPROTO_AH, 0, - NULL, NULL, e->reqid_toha); - - if (xfrm_ipsec_policy_add(&sel, 1, dir, e->action, prio, &tmpls[0], ti)) - return -1; - - return 0; -} - -static inline int mn_ha_ipsec_pol_mod(struct in6_addr *ha_addr, - struct in6_addr *hoa) -{ - return ipsec_policy_apply(ha_addr, hoa, _mn_ha_ipsec_pol_mod, NULL); -} - -static int _xfrm_bce_reset(struct bulentry *bule) -{ - /* for MN - MN communication */ - struct bcentry *bce = bcache_get(&bule->hoa, &bule->peer_addr); - int res = 0; - - if (!bce) - return 0; - - if (bce->type > BCE_NONCE_BLOCK) { - if (bule->home->at_home) - res = _xfrm_add_bce(&bule->hoa, &bule->peer_addr, 1); - else if (mn_ro_pol_chk(bule->home, &bule->peer_addr) >= 0) - res =_mn_bce_ro_pol_add(&bule->hoa, &bule->peer_addr); - } - - bcache_release_entry(bce); - return res; -} - -static int _xfrm_del_bule_data(struct bulentry *bule) -{ - struct xfrm_selector sel; - int prio; - - set_selector(&bule->peer_addr, &bule->hoa, 0, 0, 0, 0, &sel); - xfrm_state_del(IPPROTO_DSTOPTS, &sel); - - if (bule->home->home_reg_status != HOME_REG_NONE && - mn_has_cn_ro_pol(bule)) { - struct xfrm_user_tmpl tmpl; - create_trig_dstopt_tmpl(&tmpl, &bule->peer_addr, &bule->hoa); - set_selector(&bule->peer_addr, &bule->hoa, - 0, 0, 0, bule->home->if_tunnel, &sel); - xfrm_mip_policy_add(&sel, 1, XFRM_POLICY_OUT, - XFRM_POLICY_ALLOW, MIP6_PRIO_RO_TRIG, &tmpl, 1); - } else - _mn_bule_ro_pol_del(bule); - - if (!(bule->flags & IP6_MH_BU_HOME)) - _xfrm_bce_reset(bule); - - if (bule->flags & IP6_MH_BU_HOME && conf.UseMnHaIPsec) { - ipsec_policy_apply(&bule->home->ha_addr, &bule->hoa, - _mn_ha_ipsec_pol_mod, NULL); - } - - /* MN - CN/HA case, BU out */ - prio = (bule->flags & IP6_MH_BU_HOME ? - MIP6_PRIO_HOME_SIG : MIP6_PRIO_RO_SIG); - - if (bule->flags & IP6_MH_BU_ACK) { - set_selector(&bule->hoa, &bule->peer_addr, IPPROTO_MH, - IP6_MH_TYPE_BACK, 0, 0, &sel); - - if (xfrm_mip_policy_add(&sel, 1, XFRM_POLICY_IN, - XFRM_POLICY_ALLOW, prio, NULL, 0)) - return -1; - } - - set_selector(&bule->peer_addr, &bule->hoa, IPPROTO_MH, - IP6_MH_TYPE_BU, 0, 0, &sel); - - if (xfrm_mip_policy_add(&sel, 1, XFRM_POLICY_OUT, - XFRM_POLICY_ALLOW, prio, NULL, 0)) - return -1; - - bule->xfrm_state &= ~BUL_XFRM_STATE_DATA; - return 0; -} - -static void _xfrm_del_bule_sig(struct bulentry *bule) -{ - if (bule->xfrm_state & BUL_XFRM_STATE_SIG) { - struct xfrm_selector sel; - set_selector(&bule->peer_addr, &bule->hoa, IPPROTO_MH, - IP6_MH_TYPE_BU, 0, 0, &sel); - xfrm_mip_policy_del(&sel, XFRM_POLICY_OUT); - - if (bule->flags & IP6_MH_BU_ACK) { - set_selector(&bule->hoa, &bule->peer_addr, - IPPROTO_MH, IP6_MH_TYPE_BACK, - 0, 0, &sel); - xfrm_mip_policy_del(&sel, XFRM_POLICY_IN); - } - } - - bule->xfrm_state = 0; -} - -void xfrm_del_bule(struct bulentry *bule) -{ - if (bule->xfrm_state & BUL_XFRM_STATE_DATA) - _xfrm_del_bule_data(bule); - - _xfrm_del_bule_sig(bule); -} - -/* before sending BU, MN should insert policy/state only for BU/BA */ -int xfrm_pre_bu_add_bule(struct bulentry *bule) -{ - struct xfrm_selector sel; - struct xfrm_user_tmpl tmpl; - int rsig = bule->xfrm_state & BUL_XFRM_STATE_SIG; - int rdata = bule->xfrm_state & BUL_XFRM_STATE_DATA; - int prio; - int exist = 0; - - if (bule->flags & IP6_MH_BU_HOME) { - struct home_addr_info *hai = bule->home; - - if (hai->home_block & HOME_LINK_BLOCK) - xfrm_unblock_link(hai); - - xfrm_block_link(hai); - - if (hai->mob_rtr && !(hai->home_block & NEMO_FWD_BLOCK)) - xfrm_block_fwd(hai); - } - - if (IN6_ARE_ADDR_EQUAL(&bule->hoa, &bule->coa)) { - if (rdata) - return _xfrm_del_bule_data(bule); - - return 0; - } - - bule->xfrm_state = BUL_XFRM_STATE_SIG|BUL_XFRM_STATE_DATA; - - if (bule->flags & IP6_MH_BU_HOME && conf.UseMnHaIPsec) { - if (mn_ha_ipsec_pol_mod(&bule->peer_addr, &bule->hoa)) - return -1; - } - - /* MN - CN/HA case, BU out */ - prio = (bule->flags & IP6_MH_BU_HOME ? - MIP6_PRIO_HOME_SIG : MIP6_PRIO_RO_SIG); - - if (bule->flags & IP6_MH_BU_ACK) { - create_rh_tmpl(&tmpl); - set_selector(&bule->hoa, &bule->peer_addr, IPPROTO_MH, - IP6_MH_TYPE_BACK, 0, 0, &sel); - - if (xfrm_mip_policy_add(&sel, rsig, XFRM_POLICY_IN, - XFRM_POLICY_ALLOW, prio, &tmpl, 1)) - return -1; - } - - create_dstopt_tmpl(&tmpl, &bule->peer_addr, &bule->hoa); - set_selector(&bule->peer_addr, &bule->hoa, IPPROTO_MH, - IP6_MH_TYPE_BU, 0, 0, &sel); - - if (xfrm_mip_policy_add(&sel, rsig, XFRM_POLICY_OUT, - XFRM_POLICY_ALLOW, prio, &tmpl, 1)) - return -1; - - if (!(bule->flags & IP6_MH_BU_HOME)) { - struct bcentry *bce = bcache_get(&bule->hoa, &bule->peer_addr); - - if (bce) { - if (bce->type > BCE_NONCE_BLOCK && - _xfrm_add_bce(&bule->hoa, &bule->peer_addr, 1)) { - bcache_release_entry(bce); - return -1; - } - - bcache_release_entry(bce); - exist = 1; - } - } - - if(!exist &&_mn_bule_ro_pol_add(bule, bule->home->if_tunnel, rdata)) - return -1; - - set_selector(&bule->peer_addr, &bule->hoa, 0, 0, 0, 0, &sel); - - /* XXX: acquired state is already inserted */ - if (!(bule->flags & IP6_MH_BU_HOME)) { - XDBG2("%s: original rdata = %d\n", __FUNCTION__, rdata); - rdata = 1; - } - - return xfrm_state_add(&sel, IPPROTO_DSTOPTS, &bule->coa, rdata, 0); -} - -/* After receiving BA, MN should update MIP policies for data traffic */ -int xfrm_post_ba_mod_bule(struct bulentry *bule) -{ - struct xfrm_selector sel; - struct xfrm_user_tmpl tmpls[2]; - int prio; - int ret = 0; - - if (bule->flags & IP6_MH_BU_HOME) { - struct home_addr_info *hai = bule->home; - - if (hai->home_block & HOME_LINK_BLOCK) - xfrm_unblock_link(hai); - - if (hai->home_block & NEMO_FWD_BLOCK) - xfrm_unblock_fwd(hai); - } - - /* check if XFRM policies and states have already been cleaned up */ - if (IN6_ARE_ADDR_EQUAL(&bule->hoa, &bule->coa)) - return 0; - - if (!(bule->flags & IP6_MH_BU_HOME)) { - struct bcentry *bce = bcache_get(&bule->hoa, &bule->peer_addr); - - if (bce) { - if (bce->type > BCE_NONCE_BLOCK && - _xfrm_add_bule_bce(&bule->hoa, - &bule->peer_addr, 1)) { - bcache_release_entry(bce); - return -1; - } - - bcache_release_entry(bce); - /* return 0: not to overwrite policy (for MN-MN communication) */ - return 0; - } - } - - prio = (bule->flags & IP6_MH_BU_HOME ? - MIP6_PRIO_HOME_DATA : MIP6_PRIO_RO_BULE_DATA); - set_selector(&bule->peer_addr, &bule->hoa, 0, 0, 0, - bule->home->if_tunnel, &sel); - create_dstopt_tmpl(&tmpls[0], &bule->peer_addr, &bule->hoa); - ret = xfrm_mip_policy_add(&sel, 1, XFRM_POLICY_OUT, - XFRM_POLICY_ALLOW, prio, tmpls, 1); - - if (ret) - XDBG("failed to insert outbound policy\n"); - - /* XXX: inbound is missed??? */ - create_rh_tmpl(&tmpls[0]); - set_selector(&bule->hoa, &bule->peer_addr, 0, 0, 0, - 0, &sel); - ret = xfrm_mip_policy_add(&sel, 1, XFRM_POLICY_IN, - XFRM_POLICY_ALLOW, prio, tmpls, 1); - - if (ret) - XDBG("failed to insert inbound policy\n"); - - return ret; -} - -static void parse_acquire(struct nlmsghdr *msg) -{ - struct xfrm_user_acquire *acq; - int do_ro = 0; - struct in6_addr *hoa = NULL, *cn = NULL; - xfrm_address_t *daddr, *saddr; - - if (msg->nlmsg_len < NLMSG_LENGTH(sizeof(*acq))) { - XDBG("Too short nlmsg"); - return; - } - - acq = NLMSG_DATA(msg); - daddr = &acq->sel.daddr; - saddr = &acq->sel.saddr; - - /* First mandatory checks */ - if (acq->sel.proto == IPPROTO_MH || - (acq->sel.proto == IPPROTO_ICMPV6 && - ntohs(acq->sel.sport) < 128) || - !in6_is_addr_routable_unicast((struct in6_addr *)daddr) || - !in6_is_addr_routable_unicast((struct in6_addr *)saddr)) - return; - - if (acq->policy.dir == XFRM_POLICY_OUT) { - XDBG2("xfrm_policy_out\n"); - - if (acq->id.proto == IPPROTO_DSTOPTS) { - hoa = (struct in6_addr *)acq->sel.saddr.a6; - cn = (struct in6_addr *)acq->sel.daddr.a6; - do_ro = 1; - } else { - XDBG("Unknown protocol %d in acquire", acq->id.proto); - } - } else if (acq->policy.dir == XFRM_POLICY_IN) { - XDBG2("xfrm_policy_in\n"); - - if (acq->id.proto == IPPROTO_ROUTING) { - hoa = (struct in6_addr *)acq->sel.daddr.a6; - cn = (struct in6_addr *)acq->sel.saddr.a6; - do_ro = 1; - } else { - XDBG("Unknown protocol %d in acquire", acq->id.proto); - } - } else { - XDBG2("xfrm parse acquire: ignoring forwarded packets"); - } - - XDBG2("Acquire daddr %x:%x:%x:%x:%x:%x:%x:%x\n", - NIP6ADDR((struct in6_addr *)&acq->sel.daddr.a6)); - XDBG2("Acquire saddr %x:%x:%x:%x:%x:%x:%x:%x\n", - NIP6ADDR((struct in6_addr *)&acq->sel.saddr.a6)); - XDBG2("ifindex %d\n", acq->sel.ifindex); - - if (do_ro) - mn_start_ro(cn, hoa); -} - -#define XFRMRPT_RTA(x) ((struct rtattr*)(((char*)(x)) + NLMSG_ALIGN(sizeof(struct xfrm_user_report)))) - -static int parse_report(struct nlmsghdr *msg) -{ - struct xfrm_user_report *rpt; - struct rtattr *rta_tb[XFRMA_MAX+1]; - uint8_t status = IP6_MH_BES_UNKNOWN_HAO; - xfrm_address_t *hoaddr = NULL; - xfrm_address_t *cnaddr = NULL; - xfrm_address_t *coaddr; - - if (msg->nlmsg_len < NLMSG_LENGTH(sizeof(*rpt))) { - XDBG("Too short nlmsg"); - return -1; - } - - rpt = NLMSG_DATA(msg); - - if (rpt->proto != IPPROTO_DSTOPTS || - rpt->sel.family != AF_INET6) - return 0; - - memset(rta_tb, 0, sizeof(rta_tb)); - parse_rtattr(rta_tb, XFRMA_MAX, XFRMRPT_RTA(rpt), - msg->nlmsg_len - NLMSG_LENGTH(sizeof(*rpt))); - - if (!rta_tb[XFRMA_COADDR]) - return -1; - - coaddr = (xfrm_address_t *) RTA_DATA(rta_tb[XFRMA_COADDR]); - - if (rpt->sel.proto == IPPROTO_MH && - ntohs(rpt->sel.sport) > IP6_MH_TYPE_MAX) - status = IP6_MH_BES_UNKNOWN_MH; - - hoaddr = &rpt->sel.saddr; - cnaddr = &rpt->sel.daddr; - - XDBG("flow proto = %u\n", rpt->sel.proto); - XDBG("hoaddr %x:%x:%x:%x:%x:%x:%x:%x\n", - NIP6ADDR((struct in6_addr *)hoaddr)); - XDBG("coaddr %x:%x:%x:%x:%x:%x:%x:%x\n", - NIP6ADDR((struct in6_addr *)coaddr)); - XDBG("cnaddr %x:%x:%x:%x:%x:%x:%x:%x\n", - NIP6ADDR((struct in6_addr *)cnaddr)); - XDBG("ifindex %d\n", rpt->sel.ifindex); - XDBG("sending BE status = %u\n", status); - - /* ignore if CoA/HoA of original packet is invalid */ - if (!in6_is_addr_routable_unicast((struct in6_addr *) coaddr) || - !in6_is_addr_routable_unicast((struct in6_addr *) hoaddr)) { - XDBG("Invalid CoA/HoA appeared in original packet\n"); - return 0; - } - - mh_send_be((struct in6_addr *)coaddr, (struct in6_addr *)hoaddr, - (struct in6_addr *)cnaddr, status, rpt->sel.ifindex); - - return 0; -} - -static int xfrm_rcv(__attribute__ ((unused)) const struct sockaddr_nl *who, - struct nlmsghdr *n, __attribute__ ((unused)) void *arg) -{ - pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, NULL); - - switch (n->nlmsg_type) { - case XFRM_MSG_ACQUIRE: - - /* Start RO or send BRR */ - if (is_mn()) - parse_acquire(n); - - break; - - case XFRM_MSG_REPORT: - parse_report(n); - break; - } - - pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL); - return 0; -} - -struct rtnl_handle xfrm_rth; - -static void *xfrm_listen(__attribute__ ((unused)) void *dummy) -{ - pthread_dbg("thread started"); - rtnl_listen(&xfrm_rth, xfrm_rcv, NULL); - pthread_exit(NULL); -} - -int xfrm_init(void) -{ - int val; - - if (xfrm_cn_init() < 0 || - (is_ha() && xfrm_ha_init() < 0) || - (is_mn() && xfrm_mn_init() < 0) || - rtnl_xfrm_open(&xfrm_rth, 0) < 0) - goto error; - - val = XFRMNLGRP_REPORT; - - if (setsockopt(xfrm_rth.fd, SOL_NETLINK, - NETLINK_ADD_MEMBERSHIP, &val, sizeof(val)) < 0) - goto error; - - if (is_mn()) { - val = XFRMNLGRP_ACQUIRE; - - if (setsockopt(xfrm_rth.fd, SOL_NETLINK, - NETLINK_ADD_MEMBERSHIP, &val, sizeof(val)) < 0) - goto error; - } - - /* create netlink listener thread */ - if (pthread_create(&xfrm_listener, NULL, xfrm_listen, NULL)) - goto error; - - return 0; -error: - - if (is_mn()) - xfrm_mn_cleanup(); - - if (is_ha()) - xfrm_ha_cleanup(); - - xfrm_cn_cleanup(); - return -1; -} - -void xfrm_cleanup(void) -{ - rtnl_close(&xfrm_rth); - pthread_cancel(xfrm_listener); - pthread_join(xfrm_listener, NULL); - - if (is_mn()) - xfrm_mn_cleanup(); - - if (is_ha()) - xfrm_ha_cleanup(); - - xfrm_cn_cleanup(); -} - -/* blocking all payload packets from MN */ -int xfrm_block_link(struct home_addr_info *hai) -{ - int ret = 0; - struct xfrm_selector sel; - hai->home_block |= HOME_LINK_BLOCK; - hai->if_block = hai->hoa.iif; - - /* block any packets from HoA to the CN */ - set_selector(&in6addr_any, &in6addr_any, 0, 0, 0, hai->if_block, &sel); - - if ((ret = xfrm_mip_policy_add(&sel, 0, XFRM_POLICY_OUT, - XFRM_POLICY_BLOCK, - MIP6_PRIO_HOME_BLOCK, NULL, 0))) - return ret; - - return ret; -} - -void xfrm_unblock_link(struct home_addr_info *hai) -{ - struct xfrm_selector sel; - set_selector(&in6addr_any, &in6addr_any, 0, 0, 0, hai->if_block, &sel); - xfrm_mip_policy_del(&sel, XFRM_POLICY_OUT); - - hai->if_block = 0; - hai->home_block &= ~HOME_LINK_BLOCK; -} -/* - * while searching HA, MN should not use HoA - */ -int xfrm_block_hoa(struct home_addr_info *hai) -{ - struct xfrm_selector sel; - hai->home_block |= HOME_ADDR_BLOCK; - hai->ha_list.if_block = hai->hoa.iif; - set_selector(&in6addr_any, &hai->hoa.addr, - 0, 0, 0, hai->ha_list.if_block, &sel); - - if (xfrm_mip_policy_add(&sel, 0, XFRM_POLICY_OUT, - XFRM_POLICY_BLOCK, MIP6_PRIO_HOME_ERROR, NULL, 0)) - return -1; - - return 0; -} - -void xfrm_unblock_hoa(struct home_addr_info *hai) -{ - struct xfrm_selector sel; - set_selector(&in6addr_any, &hai->hoa.addr, - 0, 0, 0, hai->ha_list.if_block, &sel); - xfrm_mip_policy_del(&sel, XFRM_POLICY_OUT); - hai->ha_list.if_block = 0; - hai->home_block &= ~HOME_ADDR_BLOCK; -} - -/* block all RA messages sent by MR */ -int xfrm_block_ra(struct home_addr_info *hai) -{ - int ret = 0; - struct xfrm_selector sel; - hai->home_block |= NEMO_RA_BLOCK; - set_selector(&in6addr_any, &in6addr_any, IPPROTO_ICMPV6, - ND_ROUTER_ADVERT, 0, 0, &sel); - - if ((ret = xfrm_mip_policy_add(&sel, 0, XFRM_POLICY_OUT, XFRM_POLICY_BLOCK, - MIP6_PRIO_HOME_BLOCK, NULL, 0))) - return ret; - - return ret; -} - -void xfrm_unblock_ra(struct home_addr_info *hai) -{ - struct xfrm_selector sel; - set_selector(&in6addr_any, &in6addr_any, IPPROTO_ICMPV6, - ND_ROUTER_ADVERT, 0, 0, &sel); - xfrm_mip_policy_del(&sel, XFRM_POLICY_OUT); - hai->home_block &= ~NEMO_RA_BLOCK; -} - -/* block all forwarded packets */ -int xfrm_block_fwd(struct home_addr_info *hai) -{ - int ret = 0; - struct xfrm_selector sel; - hai->home_block |= NEMO_FWD_BLOCK; - set_selector(&in6addr_any, &in6addr_any, 0, 0, 0, 0, &sel); - - if ((ret = xfrm_mip_policy_add(&sel, 0, XFRM_POLICY_FWD, XFRM_POLICY_BLOCK, - MIP6_PRIO_HOME_BLOCK, NULL, 0))) - return ret; - - return ret; -} - -void xfrm_unblock_fwd(struct home_addr_info *hai) -{ - struct xfrm_selector sel; - set_selector(&in6addr_any, &in6addr_any, 0, 0, 0, 0, &sel); - xfrm_mip_policy_del(&sel, XFRM_POLICY_FWD); - hai->home_block &= ~NEMO_FWD_BLOCK; -} - -int mn_ipsec_recv_bu_tnl_pol_add(struct bulentry *bule, int ifindex, - struct ipsec_policy_entry *e) -{ - struct xfrm_selector sel; - struct xfrm_user_tmpl tmpls[MIPV6_MAX_TMPLS]; - int ti = 0; - - set_selector(&bule->hoa, &in6addr_any, IPPROTO_MH, - IP6_MH_TYPE_BU, 0, ifindex, &sel); - - if (ipsec_use_ipcomp(e)) - create_ipsec_tmpl(&tmpls[ti++], IPPROTO_COMP, XFRM_MODE_TUNNEL, - &bule->hoa, &bule->home->ha_addr, - e->reqid_tomn); - - if (ipsec_use_esp(e)) - create_ipsec_tmpl(&tmpls[ti++], IPPROTO_ESP, XFRM_MODE_TUNNEL, - &bule->hoa, &bule->home->ha_addr, - e->reqid_tomn); - - if (ipsec_use_ah(e)) - create_ipsec_tmpl(&tmpls[ti++], IPPROTO_AH, XFRM_MODE_TUNNEL, - &bule->hoa, &bule->home->ha_addr, - e->reqid_tomn); - - return xfrm_ipsec_policy_add(&sel, 1, XFRM_POLICY_IN, e->action, - MIP6_PRIO_RO_SIG_IPSEC, tmpls, ti); -} - -void mn_ipsec_recv_bu_tnl_pol_del(struct bulentry *bule, int ifindex) -{ - struct xfrm_selector sel; - memset(&sel, 0, sizeof(sel)); - set_selector(&bule->hoa, &in6addr_any, IPPROTO_MH, - IP6_MH_TYPE_BU, 0, ifindex, &sel); - xfrm_ipsec_policy_del(&sel, XFRM_POLICY_IN); -} - -int cn_wildrecv_bu_pol_add(void) -{ - struct xfrm_selector sel; - struct xfrm_user_tmpl tmpl; - set_selector(&in6addr_any, &in6addr_any, IPPROTO_MH, - IP6_MH_TYPE_BU, 0, 0, &sel); - create_dstopt_tmpl(&tmpl, &in6addr_any, &in6addr_any); - - return xfrm_mip_policy_add(&sel, 0, XFRM_POLICY_IN, XFRM_POLICY_ALLOW, - MIP6_PRIO_RO_SIG_ANY, &tmpl, 1); -} - -void cn_wildrecv_bu_pol_del(void) -{ - struct xfrm_selector sel; - set_selector(&in6addr_any, &in6addr_any, IPPROTO_MH, - IP6_MH_TYPE_BU, 0, 0, &sel); - xfrm_mip_policy_del(&sel, XFRM_POLICY_IN); -} diff --git a/openair3/PMIPv6/pmipv6-daemon-umip/src/xfrm.h b/openair3/PMIPv6/pmipv6-daemon-umip/src/xfrm.h deleted file mode 100755 index b4d2e6282e..0000000000 --- a/openair3/PMIPv6/pmipv6-daemon-umip/src/xfrm.h +++ /dev/null @@ -1,115 +0,0 @@ -/* $Id: xfrm.h 1.75 06/05/15 17:36:48+03:00 vnuorval@tcs.hut.fi $ */ -#ifndef __XFRM_H__ -#define __XFRM_H__ - -#include -#include "list.h" - -#define MIP6_PRIO_HOME_ERROR 1 -#define MIP6_PRIO_HOME_SIG 2 -#define MIP6_PRIO_HOME_SIG_ANY 3 -#define MIP6_PRIO_HOME_BLOCK 4 -#define MIP6_PRIO_BYPASS_BU 4 /* XXX: BU towards CN */ -#define MIP6_PRIO_HOME_DATA_IPSEC 5 -#define MIP6_PRIO_HOME_DATA 6 -#define MIP6_PRIO_RO_SIG_IPSEC 7 /* XXX: BU between MN-MN with IPsec */ -#define MIP6_PRIO_RO_SIG 8 /* XXX: BU between MN-CN */ -#define MIP6_PRIO_RO_SIG_ANY 9 -#define MIP6_PRIO_MR_LOCAL_DATA_BYPASS 9 /* Bypass rule for local traffic in mobile network */ -#define MIP6_PRIO_RO_SIG_RR 10 /* XXX: MH(or HoTI/HoT) between MN-CN */ -#define MIP6_PRIO_RO_BLOCK 11 -#define MIP6_PRIO_NO_RO_SIG_ANY 12 -#define MIP6_PRIO_NO_RO_DATA 13 -#define MIP6_PRIO_RO_BULE_BCE_DATA 14 -#define MIP6_PRIO_RO_BULE_DATA 15 -#define MIP6_PRIO_RO_BCE_DATA 16 -#define MIP6_PRIO_RO_TRIG 17 -#define MIP6_PRIO_RO_TRIG_ANY 18 -#define MIP6_PRIO_RO_DATA_ANY 19 - -typedef enum { - MIP6_TYPE_MOVEMENT_UNKNOWN = 0, - MIP6_TYPE_MOVEMENT_HL2FL, /* Home to Foreign */ - MIP6_TYPE_MOVEMENT_FL2FL, /* Foreign to Foreign */ - MIP6_TYPE_MOVEMENT_FL2HL, /* Foreign to Home */ -} movement_t; - -struct xfrm_ro_pol { - struct list_head list; - struct in6_addr cn_addr; - int do_ro; /* 1 for RO, 0 for reverse tunnel */ -}; - -int xfrm_init(void); -void xfrm_cleanup(void); - -struct in6_addr; -struct bulentry; -struct ipsec_policy_entry; -struct home_addr_info; - -int xfrm_add_bce(const struct in6_addr *our_addr, - const struct in6_addr *peer_addr, - const struct in6_addr *coa, - int replace); - -void xfrm_del_bce(const struct in6_addr *our_addr, - const struct in6_addr *peer_addr); - -int xfrm_pre_bu_add_bule(struct bulentry *bule); -int xfrm_post_ba_mod_bule(struct bulentry *bule); -void xfrm_del_bule(struct bulentry *bule); - -long xfrm_last_used(const struct in6_addr *daddr, - const struct in6_addr *saddr, - int proto, - const struct timespec *now); - -long mn_bule_xfrm_last_used(const struct in6_addr *peer, - const struct in6_addr *hoa, - const struct timespec *now); - -int mn_ro_pol_add(struct home_addr_info *hai, int ifindex, int changed); -void mn_ro_pol_del(struct home_addr_info *hai, int ifindex, int changed); -int mn_bule_ro_pol_del(void *vbule, void *viif); - -int mn_ipsec_recv_bu_tnl_pol_add(struct bulentry *bule, int ifindex, - struct ipsec_policy_entry *e); -void mn_ipsec_recv_bu_tnl_pol_del(struct bulentry *bule, int ifindex); - -int xfrm_cn_policy_mh_out_touch(int update); - -int cn_wildrecv_bu_pol_add(void); -void cn_wildrecv_bu_pol_del(void); - -int xfrm_block_link(struct home_addr_info *hai); -void xfrm_unblock_link(struct home_addr_info *hai); - -int xfrm_block_hoa(struct home_addr_info *hai); -void xfrm_unblock_hoa(struct home_addr_info *hai); - -int xfrm_block_ra(struct home_addr_info *hai); -void xfrm_unblock_ra(struct home_addr_info *hai); - -int xfrm_block_fwd(struct home_addr_info *hai); -void xfrm_unblock_fwd(struct home_addr_info *hai); - -int ha_mn_ipsec_pol_mod(struct in6_addr *haaddr, - struct in6_addr *hoa); - -int xfrm_ipsec_policy_mod(struct xfrm_userpolicy_info *sp, - struct xfrm_user_tmpl *tmpl, - int num_tmpl, - int cmd); - -static inline int pre_bu_bul_update(struct bulentry *bule) -{ - return xfrm_pre_bu_add_bule(bule); -} - -static inline int post_ba_bul_update(struct bulentry *bule) -{ - return xfrm_post_ba_mod_bule(bule); -} - -#endif /* __XFRM_H__ */ diff --git a/openair3/RAL-LTE/COPYING b/openair3/RAL-LTE/COPYING deleted file mode 100644 index 94a9ed024d..0000000000 --- a/openair3/RAL-LTE/COPYING +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. diff --git a/openair3/RAL-LTE/INTERFACE-802.21/C/MIH_C.c b/openair3/RAL-LTE/INTERFACE-802.21/C/MIH_C.c deleted file mode 100755 index 6be73f0864..0000000000 --- a/openair3/RAL-LTE/INTERFACE-802.21/C/MIH_C.c +++ /dev/null @@ -1,42 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ - -#define MIH_C_INTERFACE -#define MIH_C_C -#include "MIH_C.h" -//----------------------------------------------------------------------------- -void MIH_C_init(void) -{ - //----------------------------------------------------------------------------- -} -//----------------------------------------------------------------------------- -void MIH_C_exit(void) -{ - //----------------------------------------------------------------------------- -} diff --git a/openair3/RAL-LTE/INTERFACE-802.21/C/MIH_C_F13_data_types_for_information_elements_codec.c b/openair3/RAL-LTE/INTERFACE-802.21/C/MIH_C_F13_data_types_for_information_elements_codec.c deleted file mode 100755 index e43a7e98a6..0000000000 --- a/openair3/RAL-LTE/INTERFACE-802.21/C/MIH_C_F13_data_types_for_information_elements_codec.c +++ /dev/null @@ -1,34 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ - -#define MIH_C_INTERFACE -#define MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS_C -#include "MIH_C_F13_data_types_for_information_elements_codec.h" - - diff --git a/openair3/RAL-LTE/INTERFACE-802.21/C/MIH_C_F1_basic_data_types_codec.c b/openair3/RAL-LTE/INTERFACE-802.21/C/MIH_C_F1_basic_data_types_codec.c deleted file mode 100755 index 4987733e25..0000000000 --- a/openair3/RAL-LTE/INTERFACE-802.21/C/MIH_C_F1_basic_data_types_codec.c +++ /dev/null @@ -1,392 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ - -#define MIH_C_INTERFACE -#define MIH_C_F1_BASIC_DATA_TYPES_CODEC_C -#include "MIH_C_F1_basic_data_types_codec.h" -#include - -//----------------------------------------------------------------------------- -unsigned int MIH_C_BITMAP82String(MIH_C_BITMAP8_T* dataP, char* bufP) -{ - //----------------------------------------------------------------------------- - return sprintf(bufP, "0x%02X", *dataP); -} -//----------------------------------------------------------------------------- -void MIH_C_BITMAP8_encode(Bit_Buffer_t* bbP, MIH_C_BITMAP8_T* dataP) -{ - printf("[MIH_C] %s: %02X\n", __FUNCTION__, *dataP); - BitBuffer_write8(bbP, *dataP); -} -//----------------------------------------------------------------------------- -void MIH_C_BITMAP16_encode(Bit_Buffer_t* bbP, MIH_C_BITMAP16_T* dataP) -{ - printf("[MIH_C] %s: %04X\n", __FUNCTION__, *dataP); - BitBuffer_write16(bbP, *dataP); -} -//----------------------------------------------------------------------------- -unsigned int MIH_C_BITMAP162String(MIH_C_BITMAP16_T* dataP, char* bufP) -{ - //----------------------------------------------------------------------------- - return sprintf(bufP, "0x%04X", *dataP); -} -//----------------------------------------------------------------------------- -void MIH_C_BITMAP24_encode(Bit_Buffer_t* bbP, MIH_C_BITMAP24_T* dataP) -{ - //----------------------------------------------------------------------------- - printf("[MIH_C] %s: %02X%02X%02X\n", __FUNCTION__, dataP->val[0],dataP->val[1], dataP->val[2]); - MIH_C_BITMAP8_encode(bbP, &dataP->val[0]); - MIH_C_BITMAP8_encode(bbP, &dataP->val[1]); - MIH_C_BITMAP8_encode(bbP, &dataP->val[2]); -} -//----------------------------------------------------------------------------- -unsigned int MIH_C_BITMAP242String(MIH_C_BITMAP24_T* dataP, char* bufP) -{ - //----------------------------------------------------------------------------- - return sprintf(bufP, "0x%02X%02X%02X", dataP->val[0], dataP->val[1], dataP->val[2]); -} -//----------------------------------------------------------------------------- -void MIH_C_BITMAP32_encode(Bit_Buffer_t* bbP, MIH_C_BITMAP32_T* dataP) -{ - printf("[MIH_C] %s: %08X\n", __FUNCTION__, *dataP); - BitBuffer_write32(bbP, *dataP); -} -//----------------------------------------------------------------------------- -void MIH_C_BITMAP64_encode(Bit_Buffer_t* bbP, MIH_C_BITMAP64_T* dataP) -{ - //----------------------------------------------------------------------------- - printf("[MIH_C] %s: %16"PRIX64"\n", __FUNCTION__, *dataP); - BitBuffer_write32(bbP, (MIH_C_UNSIGNED_INT4_T)(*dataP>>32)); - BitBuffer_write32(bbP, (MIH_C_UNSIGNED_INT4_T)*dataP); -} -//----------------------------------------------------------------------------- -void MIH_C_BITMAP128_encode(Bit_Buffer_t* bbP, MIH_C_BITMAP128_T* dataP) -{ - //----------------------------------------------------------------------------- - printf("[MIH_C] %s: %16"PRIX64"%16"PRIX64"\n", __FUNCTION__, dataP->val[0], dataP->val[1]); - MIH_C_BITMAP64_encode(bbP, &dataP->val[0]); - MIH_C_BITMAP64_encode(bbP, &dataP->val[1]); -} -//----------------------------------------------------------------------------- -void MIH_C_BITMAP256_encode(Bit_Buffer_t* bbP, MIH_C_BITMAP256_T* dataP) -{ - //----------------------------------------------------------------------------- - printf("[MIH_C] %s: %16"PRIX64"%16"PRIX64"%16"PRIX64"%16"PRIX64"\n", __FUNCTION__, dataP->val[0], dataP->val[1], dataP->val[2], dataP->val[3]); - MIH_C_BITMAP64_encode(bbP, &dataP->val[0]); - MIH_C_BITMAP64_encode(bbP, &dataP->val[1]); - MIH_C_BITMAP64_encode(bbP, &dataP->val[2]); - MIH_C_BITMAP64_encode(bbP, &dataP->val[3]); -} -//----------------------------------------------------------------------------- -void MIH_C_CHOICE_encode(Bit_Buffer_t* bbP, MIH_C_CHOICE_T* dataP) -{ - //----------------------------------------------------------------------------- - BitBuffer_write8(bbP, *dataP); -} -//----------------------------------------------------------------------------- -void MIH_C_INTEGER1_encode(Bit_Buffer_t* bbP, MIH_C_INTEGER1_T* dataP) -{ - //----------------------------------------------------------------------------- - BitBuffer_write8(bbP, *dataP); -} -//----------------------------------------------------------------------------- -void MIH_C_INTEGER2_encode(Bit_Buffer_t* bbP, MIH_C_INTEGER2_T* dataP) -{ - //----------------------------------------------------------------------------- - BitBuffer_write16(bbP, *dataP); -} -//----------------------------------------------------------------------------- -void MIH_C_INTEGER4_encode(Bit_Buffer_t* bbP, MIH_C_INTEGER4_T* dataP) -{ - //----------------------------------------------------------------------------- - BitBuffer_write32(bbP, *dataP); -} -//----------------------------------------------------------------------------- -void MIH_C_INTEGER8_encode(Bit_Buffer_t* bbP, MIH_C_INTEGER8_T* dataP) -{ - //----------------------------------------------------------------------------- - BitBuffer_write32(bbP, (MIH_C_UNSIGNED_INT4_T)(*dataP>>32)); - BitBuffer_write32(bbP, (MIH_C_UNSIGNED_INT4_T)*dataP); -} -//----------------------------------------------------------------------------- -void MIH_C_NULL_encode(Bit_Buffer_t* bbP, MIH_C_NULL_T* dataP) -{ - ; -} -//----------------------------------------------------------------------------- -void MIH_C_OCTET_encode(Bit_Buffer_t* bbP, MIH_C_F1_Generic_Octet_t *dataP, int lengthP) -{ - //----------------------------------------------------------------------------- - BitBuffer_writeMem(bbP, dataP->val, lengthP); -} -//----------------------------------------------------------------------------- -void MIH_C_UNSIGNED_INT1_encode(Bit_Buffer_t* bbP, MIH_C_UNSIGNED_INT1_T* dataP) -{ - printf("[MIH_C] %s: %02X\n", __FUNCTION__, *dataP); - BitBuffer_write8(bbP, *dataP); -} -//----------------------------------------------------------------------------- -unsigned int MIH_C_UNSIGNED_INT12String(MIH_C_UNSIGNED_INT1_T* dataP, char* bufP) -{ - //----------------------------------------------------------------------------- - return sprintf(bufP, "0x%02X", *dataP); -} -//----------------------------------------------------------------------------- -void MIH_C_UNSIGNED_INT2_encode(Bit_Buffer_t* bbP, MIH_C_UNSIGNED_INT2_T* dataP) -{ - //----------------------------------------------------------------------------- - BitBuffer_write16(bbP, *dataP); -} -//----------------------------------------------------------------------------- -unsigned int MIH_C_UNSIGNED_INT22String(MIH_C_UNSIGNED_INT2_T* dataP, char* bufP) -{ - //----------------------------------------------------------------------------- - return sprintf(bufP, "0x%04X", *dataP); -} -//----------------------------------------------------------------------------- -void MIH_C_UNSIGNED_INT4_encode(Bit_Buffer_t* bbP, MIH_C_UNSIGNED_INT4_T* dataP) -{ - //----------------------------------------------------------------------------- - BitBuffer_write32(bbP, *dataP); -} -//----------------------------------------------------------------------------- -unsigned int MIH_C_UNSIGNED_INT42String(MIH_C_UNSIGNED_INT4_T* dataP, char* bufP) -{ - //----------------------------------------------------------------------------- - return sprintf(bufP, "0x%08X", *dataP); -} -//----------------------------------------------------------------------------- -void MIH_C_UNSIGNED_INT8_encode(Bit_Buffer_t* bbP, MIH_C_UNSIGNED_INT8_T* dataP) -{ - //----------------------------------------------------------------------------- - BitBuffer_write32(bbP, (MIH_C_UNSIGNED_INT4_T)(*dataP>>32)); - BitBuffer_write32(bbP, (MIH_C_UNSIGNED_INT4_T)*dataP); -} -//----------------------------------------------------------------------------- -unsigned int MIH_C_UNSIGNED_INT82String(MIH_C_UNSIGNED_INT8_T* dataP, char* bufP) -{ - //----------------------------------------------------------------------------- - unsigned int buffer_index = 0; - buffer_index = sprintf(bufP, "0x%08x", (MIH_C_UNSIGNED_INT4_T)(*dataP>>32)); - buffer_index = sprintf(&bufP[buffer_index], "%08x", (MIH_C_UNSIGNED_INT4_T)(*dataP)); - return buffer_index; - \ -} -//----------------------------------------------------------------------------- -void MIH_C_BITMAP8_decode(Bit_Buffer_t* bbP, MIH_C_BITMAP8_T* dataP) -{ - *dataP = BitBuffer_read(bbP, 8); -} -//----------------------------------------------------------------------------- -void MIH_C_BITMAP16_decode(Bit_Buffer_t* bbP, MIH_C_BITMAP16_T* dataP) -{ - *dataP = BitBuffer_read(bbP, 16); -} -//----------------------------------------------------------------------------- -void MIH_C_BITMAP24_decode(Bit_Buffer_t* bbP, MIH_C_BITMAP24_T* dataP) -{ - //----------------------------------------------------------------------------- - MIH_C_BITMAP8_decode(bbP, &dataP->val[0]); - MIH_C_BITMAP8_decode(bbP, &dataP->val[1]); - MIH_C_BITMAP8_decode(bbP, &dataP->val[2]); -} -//----------------------------------------------------------------------------- -void MIH_C_BITMAP32_decode(Bit_Buffer_t* bbP, MIH_C_BITMAP32_T* dataP) -{ - *dataP = BitBuffer_read(bbP, 32); -} -//----------------------------------------------------------------------------- -void MIH_C_BITMAP64_decode(Bit_Buffer_t* bbP, MIH_C_BITMAP64_T* dataP) -{ - //----------------------------------------------------------------------------- - *dataP = BitBuffer_read(bbP, 32); - *dataP = *dataP << 32; - *dataP = *dataP | BitBuffer_read(bbP, 32); -} -//----------------------------------------------------------------------------- -void MIH_C_BITMAP128_decode(Bit_Buffer_t* bbP, MIH_C_BITMAP128_T* dataP) -{ - //----------------------------------------------------------------------------- - MIH_C_BITMAP64_decode(bbP, &dataP->val[0]); - MIH_C_BITMAP64_decode(bbP, &dataP->val[1]); -} -//----------------------------------------------------------------------------- -void MIH_C_BITMAP256_decode(Bit_Buffer_t* bbP, MIH_C_BITMAP256_T* dataP) -{ - //----------------------------------------------------------------------------- - MIH_C_BITMAP64_decode(bbP, &dataP->val[0]); - MIH_C_BITMAP64_decode(bbP, &dataP->val[1]); - MIH_C_BITMAP64_decode(bbP, &dataP->val[2]); - MIH_C_BITMAP64_decode(bbP, &dataP->val[3]); -} -//----------------------------------------------------------------------------- -void MIH_C_CHOICE_decode(Bit_Buffer_t* bbP, MIH_C_CHOICE_T* dataP) -{ - *dataP = BitBuffer_read(bbP, sizeof(MIH_C_CHOICE_T)*8); -} -//----------------------------------------------------------------------------- -void MIH_C_INTEGER1_decode(Bit_Buffer_t* bbP, MIH_C_INTEGER1_T* dataP) -{ - *dataP = BitBuffer_read(bbP, sizeof(MIH_C_INTEGER1_T)*8); -} -//----------------------------------------------------------------------------- -void MIH_C_INTEGER2_decode(Bit_Buffer_t* bbP, MIH_C_INTEGER2_T* dataP) -{ - *dataP = BitBuffer_read(bbP, sizeof(MIH_C_INTEGER2_T)*8); -} -//----------------------------------------------------------------------------- -void MIH_C_INTEGER4_decode(Bit_Buffer_t* bbP, MIH_C_INTEGER4_T* dataP) -{ - *dataP = BitBuffer_read(bbP, sizeof(MIH_C_INTEGER4_T)*8); -} -//----------------------------------------------------------------------------- -void MIH_C_INTEGER8_decode(Bit_Buffer_t* bbP, MIH_C_INTEGER8_T* dataP) -{ - //----------------------------------------------------------------------------- - *dataP = BitBuffer_read(bbP, sizeof(MIH_C_INTEGER4_T)*8); - *dataP = *dataP << (sizeof(MIH_C_INTEGER4_T)*8); - *dataP = *dataP | BitBuffer_read(bbP, sizeof(MIH_C_INTEGER4_T)*8); -} -//----------------------------------------------------------------------------- -void MIH_C_NULL_decode(Bit_Buffer_t* bbP) -{ - ; -} -//----------------------------------------------------------------------------- -void MIH_C_OCTET_decode(Bit_Buffer_t* bbP, MIH_C_F1_Generic_Octet_t *dataP, int lengthP) -{ - //----------------------------------------------------------------------------- - BitBuffer_readMem(bbP, dataP->val, lengthP); -} -//----------------------------------------------------------------------------- -void MIH_C_UNSIGNED_INT1_decode(Bit_Buffer_t* bbP, MIH_C_UNSIGNED_INT1_T* dataP) -{ - *dataP = BitBuffer_read(bbP, sizeof(MIH_C_UNSIGNED_INT1_T)*8); -} -//----------------------------------------------------------------------------- -void MIH_C_UNSIGNED_INT2_decode(Bit_Buffer_t* bbP, MIH_C_UNSIGNED_INT2_T* dataP) -{ - *dataP = BitBuffer_read(bbP, sizeof(MIH_C_UNSIGNED_INT2_T)*8); -} -//----------------------------------------------------------------------------- -void MIH_C_UNSIGNED_INT4_decode(Bit_Buffer_t* bbP, MIH_C_UNSIGNED_INT4_T* dataP) -{ - *dataP = BitBuffer_read(bbP, sizeof(MIH_C_UNSIGNED_INT4_T)*8); -} -//----------------------------------------------------------------------------- -void MIH_C_UNSIGNED_INT8_decode(Bit_Buffer_t* bbP, MIH_C_UNSIGNED_INT8_T* dataP) -{ - //----------------------------------------------------------------------------- - *dataP = BitBuffer_read(bbP, sizeof(MIH_C_UNSIGNED_INT4_T)*8); - *dataP = *dataP << 32; - *dataP = *dataP | BitBuffer_read(bbP, sizeof(MIH_C_UNSIGNED_INT4_T)*8); -} -//----------------------------------------------------------------------------- -void MIH_C_LIST_LENGTH_encode(Bit_Buffer_t* bbP, u_int16_t lengthP) -{ - //----------------------------------------------------------------------------- - unsigned int num_more_bytes; - int length; - - if (lengthP <= 128) { -#ifdef DEBUG_TRACE_DETAILS - printf("[MIH_C] %s: Length %02X\n", __FUNCTION__, lengthP); -#endif - BitBuffer_write8(bbP, (MIH_C_UNSIGNED_INT1_T)lengthP); - } else { - num_more_bytes = (lengthP - 128) / 255; - - if (((lengthP - 128) % 255) != 0) { - num_more_bytes += 1; - } - - printf("[MIH_C] %s: Length %02X on %d more bytes\n", __FUNCTION__, lengthP, num_more_bytes); - BitBuffer_write8(bbP, (MIH_C_UNSIGNED_INT1_T)(128 + num_more_bytes)); - length = lengthP - 128; - - while (length > 0) { - if (length >= 255) { - BitBuffer_write8(bbP, (MIH_C_UNSIGNED_INT1_T)(255)); - length = length - 255; - } else { - BitBuffer_write8(bbP, (MIH_C_UNSIGNED_INT1_T)(length)); - length = 0; - } - } - } -} -//----------------------------------------------------------------------------- -u_int16_t MIH_C_LIST_LENGTH_get_encode_num_bytes(u_int16_t lengthP) -{ - //----------------------------------------------------------------------------- - unsigned int num_more_bytes; - - if (lengthP <= 128) { - return sizeof (MIH_C_UNSIGNED_INT1_T); - } else { - num_more_bytes = (lengthP - 128) / 255; - - if (((lengthP - 128) % 255) != 0) { - num_more_bytes += 1; - } - - printf("[MIH_C] %s: Length %02X on %d more bytes\n", __FUNCTION__, lengthP, num_more_bytes); - return num_more_bytes + sizeof (MIH_C_UNSIGNED_INT1_T); - } -} -//----------------------------------------------------------------------------- -void MIH_C_LIST_LENGTH_decode(Bit_Buffer_t* bbP, u_int16_t *lengthP) -{ - //----------------------------------------------------------------------------- - unsigned int num_more_bytes; - MIH_C_UNSIGNED_INT1_T byte1; - - byte1 = BitBuffer_read(bbP, sizeof(MIH_C_UNSIGNED_INT1_T)*8); - - if (byte1 >= 128) { - num_more_bytes = byte1 - 128; - *lengthP = 128; - - while (num_more_bytes > 0) { - *lengthP = *lengthP + BitBuffer_read(bbP, sizeof(MIH_C_UNSIGNED_INT1_T)*8); - num_more_bytes = num_more_bytes - 1; - } - -#ifdef DEBUG_TRACE_DETAILS - printf("[MIH_C] %s: Length %d \n", __FUNCTION__, *lengthP); -#endif - } else { - *lengthP = byte1; -#ifdef DEBUG_TRACE_DETAILS - printf("[MIH_C] %s: Length %d \n", __FUNCTION__, *lengthP); -#endif - } -} - - diff --git a/openair3/RAL-LTE/INTERFACE-802.21/C/MIH_C_F2_general_data_types_codec.c b/openair3/RAL-LTE/INTERFACE-802.21/C/MIH_C_F2_general_data_types_codec.c deleted file mode 100755 index b4b534f6e8..0000000000 --- a/openair3/RAL-LTE/INTERFACE-802.21/C/MIH_C_F2_general_data_types_codec.c +++ /dev/null @@ -1,80 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ - -#define MIH_C_INTERFACE -#define MIH_C_F2_GENERAL_DATA_TYPES_CODEC_C -#include "MIH_C_F2_general_data_types_codec.h" -//----------------------------------------------------------------------------- -unsigned int MIH_C_BOOLEAN2String(MIH_C_BOOLEAN_T* dataP, char* bufP) -{ - //----------------------------------------------------------------------------- - unsigned int buffer_index = 0; - - if (*dataP != MIH_C_BOOLEAN_FALSE) { - buffer_index += sprintf(&bufP[buffer_index], "TRUE"); - } else { - buffer_index += sprintf(&bufP[buffer_index], "FALSE"); - } - - return buffer_index; -} -//----------------------------------------------------------------------------- -unsigned int MIH_C_STATUS2String(MIH_C_STATUS_T *statusP, char* bufP) -{ - //----------------------------------------------------------------------------- - unsigned int buffer_index = 0; - - switch (*statusP) { - case MIH_C_STATUS_SUCCESS: - buffer_index += sprintf(&bufP[buffer_index], "STATUS_SUCCESS"); - break; - - case MIH_C_STATUS_UNSPECIFIED_FAILURE: - buffer_index += sprintf(&bufP[buffer_index], "STATUS_UNSPECIFIED_FAILURE"); - break; - - case MIH_C_STATUS_REJECTED: - buffer_index += sprintf(&bufP[buffer_index], "STATUS_REJECTED"); - break; - - case MIH_C_STATUS_AUTHORIZATION_FAILURE: - buffer_index += sprintf(&bufP[buffer_index], "STATUS_AUTHORIZATION_FAILURE"); - break; - - case MIH_C_STATUS_NETWORK_ERROR: - buffer_index += sprintf(&bufP[buffer_index], "STATUS_NETWORK_ERROR"); - break; - - default: - buffer_index += sprintf(&bufP[buffer_index], "UNKNOWN_STATUS"); - } - - return buffer_index; -} - diff --git a/openair3/RAL-LTE/INTERFACE-802.21/C/MIH_C_F3_data_types_for_address_codec.c b/openair3/RAL-LTE/INTERFACE-802.21/C/MIH_C_F3_data_types_for_address_codec.c deleted file mode 100755 index 1af1b55592..0000000000 --- a/openair3/RAL-LTE/INTERFACE-802.21/C/MIH_C_F3_data_types_for_address_codec.c +++ /dev/null @@ -1,202 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ - -#define MIH_C_INTERFACE -#define MIH_C_F3_DATA_TYPES_FOR_ADDRESS_CODEC_C -#include "MIH_C_F3_data_types_for_address_codec.h" - -//----------------------------------------------------------------------------- -unsigned int MIH_C_3GPP_2G_CELL_ID2String(MIH_C_3GPP_2G_CELL_ID_T *dataP, char* bufP) -{ - //----------------------------------------------------------------------------- - unsigned int buffer_index = 0; - buffer_index += sprintf(&bufP[buffer_index], "PLMN_ID = "); - buffer_index += MIH_C_PLMN_ID2String(&dataP->plmn_id, &bufP[buffer_index]); - buffer_index += sprintf(&bufP[buffer_index], "LAC = "); - buffer_index += MIH_C_LAC2String(&dataP->lac, &bufP[buffer_index]); - buffer_index += sprintf(&bufP[buffer_index], "CI = "); - buffer_index += MIH_C_CI2String(&dataP->ci, &bufP[buffer_index]); - return buffer_index; -} -//----------------------------------------------------------------------------- -void MIH_C_3GPP_2G_CELL_ID_encode(Bit_Buffer_t* bbP, MIH_C_3GPP_2G_CELL_ID_T *dataP) -{ - //----------------------------------------------------------------------------- - MIH_C_PLMN_ID_encode(bbP, &dataP->plmn_id); - MIH_C_LAC_encode(bbP, &dataP->lac); - MIH_C_CI_encode(bbP, &dataP->ci); -} -//----------------------------------------------------------------------------- -void MIH_C_3GPP_2G_CELL_ID_decode(Bit_Buffer_t* bbP, MIH_C_3GPP_2G_CELL_ID_T *dataP) -{ - //----------------------------------------------------------------------------- - MIH_C_PLMN_ID_decode(bbP, &dataP->plmn_id); - MIH_C_LAC_decode(bbP, &dataP->lac); - MIH_C_CI_decode(bbP, &dataP->ci); -} -//----------------------------------------------------------------------------- -unsigned int MIH_C_3GPP_3G_CELL_ID2String(MIH_C_3GPP_3G_CELL_ID_T *dataP, char* bufP) -{ - //----------------------------------------------------------------------------- - unsigned int buffer_index = 0; - buffer_index += MIH_C_PLMN_ID2String(&dataP->plmn_id, &bufP[buffer_index]); - buffer_index += MIH_C_CELL_ID2String(&dataP->cell_id, &bufP[buffer_index]); - return buffer_index; -} -//----------------------------------------------------------------------------- -void MIH_C_3GPP_3G_CELL_ID_encode(Bit_Buffer_t* bbP, MIH_C_3GPP_3G_CELL_ID_T *dataP) -{ - //----------------------------------------------------------------------------- - MIH_C_PLMN_ID_encode(bbP, &dataP->plmn_id); - MIH_C_CELL_ID_encode(bbP, &dataP->cell_id); -} -//----------------------------------------------------------------------------- -void MIH_C_3GPP_3G_CELL_ID_decode(Bit_Buffer_t* bbP, MIH_C_3GPP_3G_CELL_ID_T *dataP) -{ - //----------------------------------------------------------------------------- - MIH_C_PLMN_ID_decode(bbP, &dataP->plmn_id); - MIH_C_CELL_ID_decode(bbP, &dataP->cell_id); -} -//----------------------------------------------------------------------------- -unsigned int MIH_C_LINK_ADDR2String(MIH_C_LINK_ADDR_T *dataP, char* bufP) -{ - //----------------------------------------------------------------------------- - unsigned int buffer_index = 0; - - switch (dataP->choice) { - case MIH_C_CHOICE_MAC_ADDR: - buffer_index += sprintf(&bufP[buffer_index], "MAC_ADDR = "); - buffer_index += MIH_C_MAC_ADDR2String(&dataP->_union.mac_addr, &bufP[buffer_index]); - break; - - case MIH_C_CHOICE_3GPP_3G_CELL_ID: - buffer_index += sprintf(&bufP[buffer_index], "3GPP_3G_CELL_ID = "); - buffer_index = MIH_C_3GPP_3G_CELL_ID2String(&dataP->_union._3gpp_3g_cell_id, &bufP[buffer_index]); - break; - - case MIH_C_CHOICE_3GPP_2G_CELL_ID: - buffer_index += sprintf(&bufP[buffer_index], "3GPP_2G_CELL_ID = "); - buffer_index = MIH_C_3GPP_2G_CELL_ID2String(&dataP->_union._3gpp_2g_cell_id, &bufP[buffer_index]); - break; - - case MIH_C_CHOICE_3GPP_ADDR: - buffer_index += sprintf(&bufP[buffer_index], "3GPP_ADDR = "); - buffer_index = MIH_C_3GPP_ADDR2String(&dataP->_union._3gpp_addr, &bufP[buffer_index]); - break; - - case MIH_C_CHOICE_3GPP2_ADDR: - buffer_index += sprintf(&bufP[buffer_index], "3GPP2_ADDR = "); - buffer_index = MIH_C_3GPP2_ADDR2String(&dataP->_union._3gpp2_addr, &bufP[buffer_index]); - break; - - case MIH_C_CHOICE_OTHER_L2_ADDR: - buffer_index += sprintf(&bufP[buffer_index], "OTHER_L2_ADDR = "); - buffer_index = MIH_C_OTHER_L2_ADDR2String(&dataP->_union.other_l2_addr, &bufP[buffer_index]); - break; - - default: - buffer_index = sprintf(&bufP[buffer_index], "UNINITIALIZED ADDR"); - } - - return buffer_index; -} -//----------------------------------------------------------------------------- -void MIH_C_LINK_ADDR_encode(Bit_Buffer_t* bbP, MIH_C_LINK_ADDR_T *dataP) -{ - //----------------------------------------------------------------------------- - MIH_C_CHOICE_encode(bbP, &dataP->choice); - - switch (dataP->choice) { - case MIH_C_CHOICE_MAC_ADDR: - MIH_C_MAC_ADDR_encode(bbP, &dataP->_union.mac_addr); - break; - - case MIH_C_CHOICE_3GPP_3G_CELL_ID: - MIH_C_3GPP_3G_CELL_ID_encode(bbP, &dataP->_union._3gpp_3g_cell_id); - break; - - case MIH_C_CHOICE_3GPP_2G_CELL_ID: - MIH_C_3GPP_2G_CELL_ID_encode(bbP, &dataP->_union._3gpp_2g_cell_id); - break; - - case MIH_C_CHOICE_3GPP_ADDR: - MIH_C_3GPP_ADDR_encode(bbP, &dataP->_union._3gpp_addr); - break; - - case MIH_C_CHOICE_3GPP2_ADDR: - MIH_C_3GPP2_ADDR_encode(bbP, &dataP->_union._3gpp2_addr); - break; - - case MIH_C_CHOICE_OTHER_L2_ADDR: - MIH_C_OTHER_L2_ADDR_encode(bbP, &dataP->_union.other_l2_addr); - break; - - default: - printf("[MIH_C] ERROR NO KNOWN VALUE FOR ENCODING CHOICE OF MIH_C_LINK_ADDR_T %d\n", dataP->choice); - } -} -//----------------------------------------------------------------------------- -void MIH_C_LINK_ADDR_decode(Bit_Buffer_t* bbP, MIH_C_LINK_ADDR_T *dataP) -{ - //----------------------------------------------------------------------------- - MIH_C_CHOICE_decode(bbP, &dataP->choice); - - switch (dataP->choice) { - case MIH_C_CHOICE_MAC_ADDR: - MIH_C_MAC_ADDR_decode(bbP, &dataP->_union.mac_addr); - break; - - case MIH_C_CHOICE_3GPP_3G_CELL_ID: - MIH_C_3GPP_3G_CELL_ID_decode(bbP, &dataP->_union._3gpp_3g_cell_id); - break; - - case MIH_C_CHOICE_3GPP_2G_CELL_ID: - MIH_C_3GPP_2G_CELL_ID_decode(bbP, &dataP->_union._3gpp_2g_cell_id); - break; - - case MIH_C_CHOICE_3GPP_ADDR: - MIH_C_3GPP_ADDR_decode(bbP, &dataP->_union._3gpp_addr); - break; - - case MIH_C_CHOICE_3GPP2_ADDR: - MIH_C_3GPP2_ADDR_decode(bbP, &dataP->_union._3gpp2_addr); - break; - - case MIH_C_CHOICE_OTHER_L2_ADDR: - MIH_C_OTHER_L2_ADDR_decode(bbP, &dataP->_union.other_l2_addr); - break; - - default: - printf("[MIH_C] ERROR NO KNOWN VALUE FOR DECODING CHOICE OF MIH_C_LINK_ADDR_T %d\n", dataP->choice); - } -} - - - - diff --git a/openair3/RAL-LTE/INTERFACE-802.21/C/MIH_C_F4_data_types_for_links_codec.c b/openair3/RAL-LTE/INTERFACE-802.21/C/MIH_C_F4_data_types_for_links_codec.c deleted file mode 100755 index 4d63c244c8..0000000000 --- a/openair3/RAL-LTE/INTERFACE-802.21/C/MIH_C_F4_data_types_for_links_codec.c +++ /dev/null @@ -1,1351 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ - -#define MIH_C_INTERFACE -#define MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC_C -#include "MIH_C_F4_data_types_for_links_codec.h" - - -#define MIH_C_OPMODE_NORMAL_MODE 0 -#define MIH_C_OPMODE_POWER_SAVING_MODE 1 -#define MIH_C_OPMODE_POWERED_DOWN 2 -//----------------------------------------------------------------------------- -unsigned int MIH_C_OPMODE2String2(MIH_C_OPMODE_T *dataP, char* bufP) -{ - //----------------------------------------------------------------------------- - unsigned int buffer_index = 0; - - switch (*dataP) { - case MIH_C_OPMODE_NORMAL_MODE: - buffer_index+= sprintf(&bufP[buffer_index], "OPMODE_NORMAL_MODE"); - break; - - case MIH_C_OPMODE_POWER_SAVING_MODE: - buffer_index+= sprintf(&bufP[buffer_index], "POWER_SAVING_MODE"); - break; - - case MIH_C_OPMODE_POWERED_DOWN: - buffer_index+= sprintf(&bufP[buffer_index], "POWERED_DOWN"); - break; - - default: - buffer_index+= sprintf(&bufP[buffer_index], "UNKNOWN"); - } - - return buffer_index; -} -//----------------------------------------------------------------------------- -void MIH_C_DEV_STATE_RSP_encode(Bit_Buffer_t* bbP, MIH_C_DEV_STATE_RSP_T *dataP) -{ - //----------------------------------------------------------------------------- - MIH_C_CHOICE_encode(bbP, &dataP->choice); - - switch (dataP->choice) { - case 0: - MIH_C_DEVICE_INFO_encode(bbP, &dataP->_union.device_info); - break; - - case 1: - MIH_C_BATT_LEVEL_encode(bbP, &dataP->_union.batt_level); - break; - - default: - printf("[MIH_C] ERROR NO KNOWN VALUE FOR ENCODING CHOICE OF MIH_C_DEV_STATE_RSP_T %d\n", dataP->choice); - } -} -//----------------------------------------------------------------------------- -void MIH_C_DEV_STATE_RSP_decode(Bit_Buffer_t* bbP, MIH_C_DEV_STATE_RSP_T *dataP) -{ - //----------------------------------------------------------------------------- - MIH_C_CHOICE_decode(bbP, &dataP->choice); - - switch (dataP->choice) { - case 0: - MIH_C_DEVICE_INFO_decode(bbP, &dataP->_union.device_info); - break; - - case 1: - MIH_C_BATT_LEVEL_decode(bbP, &dataP->_union.batt_level); - break; - - default: - printf("[MIH_C] ERROR NO KNOWN VALUE FOR DECODING CHOICE OF MIH_C_DEV_STATE_RSP_T %d\n", dataP->choice); - } -} -//----------------------------------------------------------------------------- -unsigned int MIH_C_LINK_EVENT_LIST2String2(MIH_C_LINK_EVENT_LIST_T *dataP, char* bufP) -{ - //----------------------------------------------------------------------------- - unsigned int buffer_index = 0; - - if (*dataP & MIH_C_BIT_LINK_DETECTED) buffer_index+= sprintf(&bufP[buffer_index], "LK_DETECTED,"); - - if (*dataP & MIH_C_BIT_LINK_UP) buffer_index+= sprintf(&bufP[buffer_index], "LK_UP,"); - - if (*dataP & MIH_C_BIT_LINK_DOWN) buffer_index+= sprintf(&bufP[buffer_index], "LK_DOWN,"); - - if (*dataP & MIH_C_BIT_LINK_PARAMETERS_REPORT) buffer_index+= sprintf(&bufP[buffer_index], "LK_PARAMETERS_REPORT,"); - - if (*dataP & MIH_C_BIT_LINK_GOING_DOWN) buffer_index+= sprintf(&bufP[buffer_index], "LK_GOING_DOWN,"); - - if (*dataP & MIH_C_BIT_LINK_HANDOVER_IMMINENT) buffer_index+= sprintf(&bufP[buffer_index], "LK_HANDOVER_IMMINENT,"); - - if (*dataP & MIH_C_BIT_LINK_HANDOVER_COMPLETE) buffer_index+= sprintf(&bufP[buffer_index], "LK_HANDOVER_COMPLETE,"); - - if (*dataP & MIH_C_BIT_LINK_PDU_TRANSMIT_STATUS) buffer_index+= sprintf(&bufP[buffer_index], "LK_PDU_TRANSMIT_STATUS"); - - if (*dataP == 0) buffer_index+= sprintf(&bufP[buffer_index], "NULL"); - - return buffer_index; -} -//----------------------------------------------------------------------------- -unsigned int MIH_C_LINK_CMD_LIST2String2(MIH_C_LINK_CMD_LIST_T *dataP, char* bufP) -{ - //----------------------------------------------------------------------------- - unsigned int buffer_index = 0; - - if (*dataP & MIH_C_BIT_LINK_EVENT_SUBSCRIBE) buffer_index+= sprintf(&bufP[buffer_index], "LK_EVT_SUBSCRIBE,"); - - if (*dataP & MIH_C_BIT_LINK_EVENT_UNSUBSCRIBE) buffer_index+= sprintf(&bufP[buffer_index], "LK_EVT_UNSUBSCRIBE,"); - - if (*dataP & MIH_C_BIT_LINK_GET_PARAMETERS) buffer_index+= sprintf(&bufP[buffer_index], "LK_GET_PARAMETERS,"); - - if (*dataP & MIH_C_BIT_LINK_CONFIGURE_THRESHOLDS) buffer_index+= sprintf(&bufP[buffer_index], "LK_CONFIGURE_THRESHOLDS,"); - - if (*dataP & MIH_C_BIT_LINK_ACTION) buffer_index+= sprintf(&bufP[buffer_index], "LK_ACTION"); - - if (*dataP == 0) buffer_index+= sprintf(&bufP[buffer_index], "NULL"); - - return buffer_index; -} -//----------------------------------------------------------------------------- -unsigned int MIH_C_LINK_TYPE2String2(MIH_C_LINK_TYPE_T *dataP, char* bufP) -{ - //----------------------------------------------------------------------------- - unsigned int buffer_index = 0; - - switch (*dataP) { - case MIH_C_WIRELESS_GSM: - buffer_index += sprintf(&bufP[buffer_index], "WIRELESS_GSM"); - break; - - case MIH_C_WIRELESS_GPRS: - buffer_index += sprintf(&bufP[buffer_index], "WIRELESS_GPRS"); - break; - - case MIH_C_WIRELESS_EDGE: - buffer_index += sprintf(&bufP[buffer_index], "WIRELESS_EDGE"); - break; - - case MIH_C_ETHERNET: - buffer_index += sprintf(&bufP[buffer_index], "ETHERNET"); - break; - - case MIH_C_WIRELESS_OTHER: - buffer_index += sprintf(&bufP[buffer_index], "WIRELESS_OTHER"); - break; - - case MIH_C_WIRELESS_IEEE802_11: - buffer_index += sprintf(&bufP[buffer_index], "WIRELESS_IEEE802_11"); - break; - - case MIH_C_WIRELESS_CDMA_2000: - buffer_index += sprintf(&bufP[buffer_index], "WIRELESS_CDMA_2000"); - break; - - case MIH_C_WIRELESS_UMTS: - buffer_index += sprintf(&bufP[buffer_index], "WIRELESS_UMTS"); - break; - - case MIH_C_WIRELESS_CDMA_2000_HRPD: - buffer_index += sprintf(&bufP[buffer_index], "WIRELESS_CDMA_2000_HRPD"); - break; - - case MIH_C_WIRELESS_IEEE802_16: - buffer_index += sprintf(&bufP[buffer_index], "WIRELESS_IEEE802_16"); - break; - - case MIH_C_WIRELESS_IEEE802_20: - buffer_index += sprintf(&bufP[buffer_index], "WIRELESS_IEEE802_20"); - break; - - case MIH_C_WIRELESS_IEEE802_22: - buffer_index += sprintf(&bufP[buffer_index], "WIRELESS_IEEE802_22"); - break; - - default: - buffer_index += sprintf(&bufP[buffer_index], "WIRELESS_IEEE802_22"); - } - - return buffer_index; -} -//----------------------------------------------------------------------------- -unsigned int MIH_C_LINK_ID2String(MIH_C_LINK_ID_T *dataP, char* bufP) -{ - //----------------------------------------------------------------------------- - unsigned int buffer_index = 0; - - buffer_index += sprintf(&bufP[buffer_index], "LINK_TYPE = "); - buffer_index += MIH_C_LINK_TYPE2String2(&dataP->link_type, &bufP[buffer_index]); - buffer_index += sprintf(&bufP[buffer_index], ", LINK_ADDR = "); - buffer_index += MIH_C_LINK_ADDR2String(&dataP->link_addr, &bufP[buffer_index]); - return buffer_index; -} -//----------------------------------------------------------------------------- -void MIH_C_LINK_ID_encode(Bit_Buffer_t* bbP, MIH_C_LINK_ID_T *dataP) -{ - //----------------------------------------------------------------------------- - MIH_C_LINK_TYPE_encode(bbP, &dataP->link_type); - MIH_C_LINK_ADDR_encode(bbP, &dataP->link_addr); -} -//----------------------------------------------------------------------------- -void MIH_C_LINK_ID_decode(Bit_Buffer_t* bbP, MIH_C_LINK_ID_T *dataP) -{ - //----------------------------------------------------------------------------- - MIH_C_LINK_TYPE_decode(bbP, &dataP->link_type); - MIH_C_LINK_ADDR_decode(bbP, &dataP->link_addr); -} -//----------------------------------------------------------------------------- -unsigned int MIH_C_LINK_AC_ATTR2String2(MIH_C_LINK_AC_ATTR_T *dataP, char* bufP) -{ - //----------------------------------------------------------------------------- - unsigned int buffer_index = 0; - - if (*dataP & MIH_C_BIT_LINK_AC_ATTR_LINK_SCAN) buffer_index+= sprintf(&bufP[buffer_index], "AC_ATTR_LINK_SCAN"); - - if (*dataP & MIH_C_BIT_LINK_AC_ATTR_LINK_RES_RETAIN) buffer_index+= sprintf(&bufP[buffer_index], ",AC_ATTR_LINK_RES_RETAIN"); - - if (*dataP & MIH_C_BIT_LINK_AC_ATTR_DATA_FWD_REQ) buffer_index+= sprintf(&bufP[buffer_index], ",AC_ATTR_DATA_FWD_REQ"); - - if (*dataP == 0) buffer_index+= sprintf(&bufP[buffer_index], "NULL"); - - return buffer_index; -} -//----------------------------------------------------------------------------- -unsigned int MIH_C_LINK_ACTION2String(MIH_C_LINK_ACTION_T *dataP, char* bufP) -{ - //----------------------------------------------------------------------------- - unsigned int buffer_index = 0; - - buffer_index += sprintf(&bufP[buffer_index], "LINK_AC_TYPE = "); - buffer_index += MIH_C_LINK_AC_TYPE2String2(&dataP->link_ac_type, &bufP[buffer_index]); - buffer_index += sprintf(&bufP[buffer_index], ", LINK_AC_ATTR = "); - buffer_index += MIH_C_LINK_AC_ATTR2String2(&dataP->link_ac_attr, &bufP[buffer_index]); -#ifdef MIH_C_MEDIEVAL_EXTENSIONS - buffer_index += sprintf(&bufP[buffer_index], ", LINK_AC_PARAM = "); - buffer_index += MIH_C_LINK_AC_PARAM2String(&dataP->link_ac_param, &bufP[buffer_index]); -#endif - return buffer_index; -} -//----------------------------------------------------------------------------- -unsigned int MIH_C_LINK_AC_TYPE2String2(MIH_C_LINK_AC_TYPE_T *dataP, char* bufP) -{ - //----------------------------------------------------------------------------- - unsigned int buffer_index = 0; - - switch (*dataP) { - case MIH_C_LINK_AC_TYPE_NONE: - buffer_index += sprintf(&bufP[buffer_index], "NONE"); - break; - - case MIH_C_LINK_AC_TYPE_LINK_DISCONNECT: - buffer_index += sprintf(&bufP[buffer_index], "LINK_DISCONNECT"); - break; - - case MIH_C_LINK_AC_TYPE_LINK_LOW_POWER: - buffer_index += sprintf(&bufP[buffer_index], "LINK_LOW_POWER"); - break; - - case MIH_C_LINK_AC_TYPE_LINK_POWER_DOWN: - buffer_index += sprintf(&bufP[buffer_index], "POWER_DOWN"); - break; - - case MIH_C_LINK_AC_TYPE_LINK_POWER_UP: - buffer_index += sprintf(&bufP[buffer_index], "POWER_UP"); - break; -#ifdef MIH_C_MEDIEVAL_EXTENSIONS - - case MIH_C_LINK_AC_TYPE_LINK_FLOW_ATTR: - buffer_index += sprintf(&bufP[buffer_index], "FLOW_ATTR"); - break; - - case MIH_C_LINK_AC_TYPE_LINK_ACTIVATE_RESOURCES: - buffer_index += sprintf(&bufP[buffer_index], "ACTIVATE_RESOURCES"); - break; - - case MIH_C_LINK_AC_TYPE_LINK_DEACTIVATE_RESOURCES: - buffer_index += sprintf(&bufP[buffer_index], "DEACTIVATE_RESOURCES"); - break; -#endif - - default: - buffer_index += sprintf(&bufP[buffer_index], "UNKNOWN"); - } - - return buffer_index; -} -//----------------------------------------------------------------------------- -void MIH_C_LINK_ACTION_encode(Bit_Buffer_t* bbP, MIH_C_LINK_ACTION_T *dataP) -{ - //----------------------------------------------------------------------------- - MIH_C_LINK_AC_TYPE_encode(bbP, &dataP->link_ac_type); - MIH_C_LINK_AC_ATTR_encode(bbP, &dataP->link_ac_attr); -#ifdef MIH_C_MEDIEVAL_EXTENSIONS - MIH_C_LINK_AC_PARAM_encode(bbP, &dataP->link_ac_param); -#endif -} -//----------------------------------------------------------------------------- -void MIH_C_LINK_ACTION_decode(Bit_Buffer_t* bbP, MIH_C_LINK_ACTION_T *dataP) -{ - //----------------------------------------------------------------------------- - MIH_C_LINK_AC_TYPE_decode(bbP, &dataP->link_ac_type); - MIH_C_LINK_AC_ATTR_decode(bbP, &dataP->link_ac_attr); -#ifdef MIH_C_MEDIEVAL_EXTENSIONS - MIH_C_LINK_AC_PARAM_decode(bbP, &dataP->link_ac_param); -#endif -} - -//----------------------------------------------------------------------------- -// MW Function to bypass ODTONE problem -void MIH_C_LINK_ACTION_short_decode(Bit_Buffer_t* bbP, MIH_C_LINK_ACTION_T *dataP) -{ - //----------------------------------------------------------------------------- - MIH_C_LINK_AC_TYPE_decode(bbP, &dataP->link_ac_type); - MIH_C_LINK_AC_ATTR_decode(bbP, &dataP->link_ac_attr); - //#ifdef MIH_C_MEDIEVAL_EXTENSIONS - //MIH_C_LINK_AC_PARAM_decode(bbP, &dataP->link_ac_param); - //#endif -} - -//----------------------------------------------------------------------------- -void MIH_C_LINK_ACTION_REQ_encode(Bit_Buffer_t* bbP, MIH_C_LINK_ACTION_REQ_T *dataP) -{ - //----------------------------------------------------------------------------- - MIH_C_LINK_ID_encode(bbP, &dataP->link_id); - MIH_C_CHOICE_encode(bbP, &dataP->choice); - - switch (dataP->choice) { - case 0: - break; - - case 1: - MIH_C_LINK_ADDR_encode(bbP, &dataP->_union.link_addr); - break; - - default: - printf("[MIH_C] ERROR NO KNOWN VALUE FOR ENCODING CHOICE OF MIH_C_LINK_ACTION_REQ_T %d\n", dataP->choice); - } - - MIH_C_LINK_ACTION_encode(bbP, &dataP->link_action); - MIH_C_LINK_AC_EX_TIME_encode(bbP, &dataP->link_action_ex_time); -} -//----------------------------------------------------------------------------- -void MIH_C_LINK_ACTION_REQ_decode(Bit_Buffer_t* bbP, MIH_C_LINK_ACTION_REQ_T *dataP) -{ - //----------------------------------------------------------------------------- - MIH_C_LINK_ID_decode(bbP, &dataP->link_id); - MIH_C_CHOICE_decode(bbP, &dataP->choice); - - switch (dataP->choice) { - case 0: - break; - - case 1: - MIH_C_LINK_ADDR_decode(bbP, &dataP->_union.link_addr); - break; - - default: - printf("[MIH_C] ERROR NO KNOWN VALUE FOR DECODING CHOICE OF MIH_C_LINK_ACTION_REQ_T %d\n", dataP->choice); - } - - MIH_C_LINK_ACTION_decode(bbP, &dataP->link_action); - MIH_C_LINK_AC_EX_TIME_decode(bbP, &dataP->link_action_ex_time); -} -//----------------------------------------------------------------------------- -unsigned int MIH_C_SIG_STRENGTH2String(MIH_C_SIG_STRENGTH_T *dataP, char* bufP) -{ - //----------------------------------------------------------------------------- - unsigned int buffer_index = 0; - - switch (dataP->choice) { - case 0: - buffer_index += sprintf(&bufP[buffer_index], "%d dBm",dataP->_union.dbm ); - break; - - case 1: - buffer_index += sprintf(&bufP[buffer_index], "%d/100",dataP->_union.percentage ); - break; - - default: - buffer_index += sprintf(&bufP[buffer_index], "UNINITIALIZED STRENGTH"); - } - - return buffer_index; -} -//----------------------------------------------------------------------------- -void MIH_C_SIG_STRENGTH_encode(Bit_Buffer_t* bbP, MIH_C_SIG_STRENGTH_T *dataP) -{ - //----------------------------------------------------------------------------- - MIH_C_CHOICE_encode(bbP, &dataP->choice); - - switch (dataP->choice) { - case 0: - MIH_C_INTEGER1_encode(bbP, &dataP->_union.dbm); - break; - - case 1: - MIH_C_PERCENTAGE_encode(bbP, &dataP->_union.percentage); - break; - - default: - printf("[MIH_C] ERROR NO KNOWN VALUE FOR ENCODING CHOICE OF MIH_C_SIG_STRENGTH_T %d\n", dataP->choice); - } -} -//----------------------------------------------------------------------------- -void MIH_C_SIG_STRENGTH_decode(Bit_Buffer_t* bbP, MIH_C_SIG_STRENGTH_T *dataP) -{ - //----------------------------------------------------------------------------- - MIH_C_CHOICE_decode(bbP, &dataP->choice); - - switch (dataP->choice) { - case 0: - MIH_C_INTEGER1_decode(bbP, &dataP->_union.dbm); - break; - - case 1: - MIH_C_PERCENTAGE_decode(bbP, &dataP->_union.percentage); - break; - - default: - printf("[MIH_C] ERROR NO KNOWN VALUE FOR DECODING CHOICE OF MIH_C_SIG_STRENGTH_T %d\n", dataP->choice); - } -} -//----------------------------------------------------------------------------- -unsigned int MIH_C_LINK_SCAN_RSP2String(MIH_C_LINK_SCAN_RSP_T *dataP, char* bufP) -{ - //----------------------------------------------------------------------------- - unsigned int buffer_index = 0; - - buffer_index += sprintf(&bufP[buffer_index], "LINK_ADDR="); - buffer_index += MIH_C_LINK_ADDR2String(&dataP->link_addr, &bufP[buffer_index]); - buffer_index += sprintf(&bufP[buffer_index], ", NETWORK_ID="); - buffer_index += MIH_C_NETWORK_ID2String(&dataP->network_id, &bufP[buffer_index]); - buffer_index += sprintf(&bufP[buffer_index], ", SIG_STRENGTH="); - buffer_index += MIH_C_SIG_STRENGTH2String(&dataP->sig_strength, &bufP[buffer_index]); - return buffer_index; -} -//----------------------------------------------------------------------------- -void MIH_C_LINK_SCAN_RSP_encode(Bit_Buffer_t* bbP, MIH_C_LINK_SCAN_RSP_T *dataP) -{ - //----------------------------------------------------------------------------- - MIH_C_LINK_ADDR_encode(bbP, &dataP->link_addr); - MIH_C_NETWORK_ID_encode(bbP, &dataP->network_id); - MIH_C_SIG_STRENGTH_encode(bbP, &dataP->sig_strength); -} -//----------------------------------------------------------------------------- -void MIH_C_LINK_SCAN_RSP_decode(Bit_Buffer_t* bbP, MIH_C_LINK_SCAN_RSP_T *dataP) -{ - //----------------------------------------------------------------------------- - MIH_C_LINK_ADDR_decode(bbP, &dataP->link_addr); - MIH_C_NETWORK_ID_decode(bbP, &dataP->network_id); - MIH_C_SIG_STRENGTH_decode(bbP, &dataP->sig_strength); -} - -//----------------------------------------------------------------------------- -void MIH_C_LINK_ACTION_RSP_encode(Bit_Buffer_t* bbP, MIH_C_LINK_ACTION_RSP_T *dataP) -{ - //----------------------------------------------------------------------------- - MIH_C_LINK_ID_encode(bbP, &dataP->link_id); - MIH_C_LINK_AC_RESULT_encode(bbP, &dataP->link_ac_result); - MIH_C_CHOICE_encode(bbP, &dataP->choice); - - switch (dataP->choice) { - case 0: - break; - - case 1: - MIH_C_LINK_SCAN_RSP_LIST_encode(bbP, &dataP->_union.link_scan_rsp_list); - break; - - default: - printf("[MIH_C] ERROR NO KNOWN VALUE FOR ENCODING CHOICE OF MIH_C_LINK_ACTION_RSP_T %d\n", dataP->choice); - } -} -//----------------------------------------------------------------------------- -void MIH_C_LINK_ACTION_RSP_decode(Bit_Buffer_t* bbP, MIH_C_LINK_ACTION_RSP_T *dataP) -{ - //----------------------------------------------------------------------------- - MIH_C_LINK_ID_decode(bbP, &dataP->link_id); - MIH_C_LINK_AC_RESULT_decode(bbP, &dataP->link_ac_result); - MIH_C_CHOICE_decode(bbP, &dataP->choice); - - switch (dataP->choice) { - case 0: - break; - - case 1: - MIH_C_LINK_SCAN_RSP_LIST_decode(bbP, &dataP->_union.link_scan_rsp_list); - break; - - default: - printf("[MIH_C] ERROR NO KNOWN VALUE FOR DECODING CHOICE OF MIH_C_LINK_ACTION_RSP_T %d\n", dataP->choice); - } -} -//----------------------------------------------------------------------------- -unsigned int MIH_C_THRESHOLD2String(MIH_C_THRESHOLD_T *dataP, char* bufP) -{ - //----------------------------------------------------------------------------- - unsigned int buffer_index = 0; - buffer_index += sprintf(&bufP[buffer_index], "THRESHOLD_VAL="); - buffer_index += MIH_C_THRESHOLD_VAL2String(&dataP->threshold_val, &bufP[buffer_index]); - buffer_index += sprintf(&bufP[buffer_index], ", THRESHOLD_XDIR="); - buffer_index += MIH_C_THRESHOLD_XDIR2String2(&dataP->threshold_xdir, &bufP[buffer_index]); - return buffer_index; -} -//----------------------------------------------------------------------------- -void MIH_C_THRESHOLD_encode(Bit_Buffer_t* bbP, MIH_C_THRESHOLD_T *dataP) -{ - //----------------------------------------------------------------------------- - MIH_C_THRESHOLD_VAL_encode(bbP, &dataP->threshold_val); - MIH_C_THRESHOLD_XDIR_encode(bbP, &dataP->threshold_xdir); -} -//----------------------------------------------------------------------------- -void MIH_C_THRESHOLD_decode(Bit_Buffer_t* bbP, MIH_C_THRESHOLD_T *dataP) -{ - //----------------------------------------------------------------------------- - MIH_C_THRESHOLD_VAL_decode(bbP, &dataP->threshold_val); - MIH_C_THRESHOLD_XDIR_decode(bbP, &dataP->threshold_xdir); -} -//----------------------------------------------------------------------------- -unsigned int MIH_C_LINK_PARAM_TYPE2String( MIH_C_LINK_PARAM_TYPE_T *dataP, char* bufP) -{ - //----------------------------------------------------------------------------- - unsigned int buffer_index = 0; - - switch (dataP->choice) { - case 0: - buffer_index += sprintf(&bufP[buffer_index], "GENERIC PARAMETER: "); - buffer_index += MIH_C_LINK_PARAM_GEN2String2(&dataP->_union.link_param_gen, &bufP[buffer_index]); - break; - - case 1: - buffer_index += sprintf(&bufP[buffer_index], "QOS PARAMETER: "); - break; - - case 2: - buffer_index += sprintf(&bufP[buffer_index], "GG PARAMETER: "); - break; - - case 3: - buffer_index += sprintf(&bufP[buffer_index], "EDGE PARAMETER: "); - break; - - case 4: - buffer_index += sprintf(&bufP[buffer_index], "ETH PARAMETER: "); - break; - - case 5: - buffer_index += sprintf(&bufP[buffer_index], "802_11 PARAMETER: "); - break; - - case 6: - buffer_index += sprintf(&bufP[buffer_index], "C2K PARAMETER: "); - break; - - case 7: - buffer_index += sprintf(&bufP[buffer_index], "FDD PARAMETER: "); - break; - - case 8: - buffer_index += sprintf(&bufP[buffer_index], "HRPD PARAMETER: "); - break; - - case 9: - buffer_index += sprintf(&bufP[buffer_index], "802_16 PARAMETER: "); - break; - - case 10: - buffer_index += sprintf(&bufP[buffer_index], "802_20 PARAMETER: "); - break; - - case 11: - buffer_index += sprintf(&bufP[buffer_index], "802_22 PARAMETER: "); - break; - - case 12: - buffer_index += sprintf(&bufP[buffer_index], "LTE PARAMETER: "); - break; - - default: - buffer_index += sprintf(&bufP[buffer_index], "UNINITIALIZED LINK TYPE"); - } - - return buffer_index; -} -//----------------------------------------------------------------------------- -void MIH_C_LINK_PARAM_TYPE_encode(Bit_Buffer_t* bbP, MIH_C_LINK_PARAM_TYPE_T *dataP) -{ - //----------------------------------------------------------------------------- - MIH_C_CHOICE_encode(bbP, &dataP->choice); - - switch (dataP->choice) { - case 0: - MIH_C_LINK_PARAM_GEN_encode(bbP, &dataP->_union.link_param_gen); - break; - - case 1: - MIH_C_LINK_PARAM_QOS_encode(bbP, &dataP->_union.link_param_qos); - break; - - case 2: - MIH_C_LINK_PARAM_GG_encode(bbP, &dataP->_union.link_param_gg); - break; - - case 3: - MIH_C_LINK_PARAM_EDGE_encode(bbP, &dataP->_union.link_param_edge); - break; - - case 4: - MIH_C_LINK_PARAM_ETH_encode(bbP, &dataP->_union.link_param_eth); - break; - - case 5: - MIH_C_LINK_PARAM_802_11_encode(bbP, &dataP->_union.link_param_802_11); - break; - - case 6: - MIH_C_LINK_PARAM_C2K_encode(bbP, &dataP->_union.link_param_c2k); - break; - - case 7: - MIH_C_LINK_PARAM_FDD_encode(bbP, &dataP->_union.link_param_fdd); - break; - - case 8: - MIH_C_LINK_PARAM_HRPD_encode(bbP, &dataP->_union.link_param_hrpd); - break; - - case 9: - MIH_C_LINK_PARAM_802_16_encode(bbP, &dataP->_union.link_param_802_16); - break; - - case 10: - MIH_C_LINK_PARAM_802_20_encode(bbP, &dataP->_union.link_param_802_20); - break; - - case 11: - MIH_C_LINK_PARAM_802_22_encode(bbP, &dataP->_union.link_param_802_22); - break; - - case 12: - MIH_C_LINK_PARAM_LTE_encode(bbP, &dataP->_union.link_param_lte); - break; - - default: - printf("[MIH_C] ERROR NO KNOWN VALUE FOR ENCODING CHOICE OF MIH_C_LINK_PARAM_TYPE_T %d\n", dataP->choice); - } -} -//----------------------------------------------------------------------------- -void MIH_C_LINK_PARAM_TYPE_decode(Bit_Buffer_t* bbP, MIH_C_LINK_PARAM_TYPE_T *dataP) -{ - //----------------------------------------------------------------------------- - MIH_C_CHOICE_decode(bbP, &dataP->choice); - - switch (dataP->choice) { - case 0: - MIH_C_LINK_PARAM_GEN_decode(bbP, &dataP->_union.link_param_gen); - break; - - case 1: - MIH_C_LINK_PARAM_QOS_decode(bbP, &dataP->_union.link_param_qos); - break; - - case 2: - MIH_C_LINK_PARAM_GG_decode(bbP, &dataP->_union.link_param_gg); - break; - - case 3: - MIH_C_LINK_PARAM_EDGE_decode(bbP, &dataP->_union.link_param_edge); - break; - - case 4: - MIH_C_LINK_PARAM_ETH_decode(bbP, &dataP->_union.link_param_eth); - break; - - case 5: - MIH_C_LINK_PARAM_802_11_decode(bbP, &dataP->_union.link_param_802_11); - break; - - case 6: - MIH_C_LINK_PARAM_C2K_decode(bbP, &dataP->_union.link_param_c2k); - break; - - case 7: - MIH_C_LINK_PARAM_FDD_decode(bbP, &dataP->_union.link_param_fdd); - break; - - case 8: - MIH_C_LINK_PARAM_HRPD_decode(bbP, &dataP->_union.link_param_hrpd); - break; - - case 9: - MIH_C_LINK_PARAM_802_16_decode(bbP, &dataP->_union.link_param_802_16); - break; - - case 10: - MIH_C_LINK_PARAM_802_20_decode(bbP, &dataP->_union.link_param_802_20); - break; - - case 11: - MIH_C_LINK_PARAM_802_22_decode(bbP, &dataP->_union.link_param_802_22); - break; - - case 12: - MIH_C_LINK_PARAM_LTE_decode(bbP, &dataP->_union.link_param_802_22); - break; - - default: - printf("[MIH_C] ERROR NO KNOWN VALUE FOR DECODING CHOICE OF MIH_C_LINK_PARAM_TYPE_T %d\n", dataP->choice); - } -} -//----------------------------------------------------------------------------- -unsigned int MIH_C_LINK_CFG_PARAM2String(MIH_C_LINK_CFG_PARAM_T *dataP, char* bufP) -{ - //----------------------------------------------------------------------------- - unsigned int buffer_index = 0; - buffer_index += sprintf(&bufP[buffer_index], "LINK_PARAM_TYPE="); - buffer_index += MIH_C_LINK_PARAM_TYPE2String(&dataP->link_param_type, &bufP[buffer_index]); - - switch (dataP->choice) { - case 0: - buffer_index += sprintf(&bufP[buffer_index], ", CHOICE NULL"); - break; - - case 1: - buffer_index += sprintf(&bufP[buffer_index], ", TIMER_INTERVAL="); - buffer_index += MIH_C_TIMER_INTERVAL2String(&dataP->_union.timer_interval, &bufP[buffer_index]); - break; -#ifdef RAL_SAME_AS_MEDIEVAL_PROJECT_BUT_I_THINK_THIS_IS_AN_ERROR - - case 2: - buffer_index += sprintf(&bufP[buffer_index], ", LINK_SCAN_RSP_LIST="); - buffer_index += MIH_C_LINK_SCAN_RSP_LIST2String(&dataP->_union.link_scan_rsp_list, &bufP[buffer_index]); - break; -#endif - - default: - buffer_index += sprintf(&bufP[buffer_index], ", CHOICE UNINITIALIZED"); - } - - buffer_index += sprintf(&bufP[buffer_index], ", TH_ACTION="); - buffer_index += MIH_C_TH_ACTION2String2(&dataP->th_action, &bufP[buffer_index]); - buffer_index += sprintf(&bufP[buffer_index], ", THRESHOLD_LIST={"); - buffer_index += MIH_C_THRESHOLD_LIST2String(&dataP->threshold_list, &bufP[buffer_index]); - buffer_index += sprintf(&bufP[buffer_index], "}"); - return buffer_index; -} -//----------------------------------------------------------------------------- -void MIH_C_LINK_CFG_PARAM_encode(Bit_Buffer_t* bbP, MIH_C_LINK_CFG_PARAM_T *dataP) -{ - //----------------------------------------------------------------------------- - MIH_C_LINK_PARAM_TYPE_encode(bbP, &dataP->link_param_type); - MIH_C_CHOICE_encode(bbP, &dataP->choice); - - switch (dataP->choice) { - case 0: - break; - - case 1: - MIH_C_TIMER_INTERVAL_encode(bbP, &dataP->_union.timer_interval); - break; -#ifdef RAL_SAME_AS_MEDIEVAL_PROJECT_BUT_I_THINK_THIS_IS_AN_ERROR - - case 2: - MIH_C_LINK_SCAN_RSP_LIST_encode(bbP, &dataP->_union.link_scan_rsp_list); - break; -#endif - - default: - printf("[MIH_C] ERROR NO KNOWN VALUE FOR ENCODING CHOICE OF MIH_C_LINK_CFG_PARAM_T %d\n", dataP->choice); - } - - MIH_C_TH_ACTION_encode(bbP, &dataP->th_action); - MIH_C_THRESHOLD_LIST_encode(bbP, &dataP->threshold_list); -} -//----------------------------------------------------------------------------- -void MIH_C_LINK_CFG_PARAM_decode(Bit_Buffer_t* bbP, MIH_C_LINK_CFG_PARAM_T *dataP) -{ - //----------------------------------------------------------------------------- - MIH_C_LINK_PARAM_TYPE_decode(bbP, &dataP->link_param_type); - MIH_C_CHOICE_decode(bbP, &dataP->choice); - - switch (dataP->choice) { - case 0: - break; - - case 1: - MIH_C_TIMER_INTERVAL_decode(bbP, &dataP->_union.timer_interval); - break; -#ifdef RAL_SAME_AS_MEDIEVAL_PROJECT_BUT_I_THINK_THIS_IS_AN_ERROR - - case 2: - MIH_C_LINK_SCAN_RSP_LIST_decode(bbP, &dataP->_union.link_scan_rsp_list); - break; -#endif - - default: - printf("[MIH_C] ERROR NO KNOWN VALUE FOR DECODING CHOICE OF MIH_C_LINK_CFG_PARAM_T %d\n", dataP->choice); - } - - MIH_C_TH_ACTION_decode(bbP, &dataP->th_action); - MIH_C_THRESHOLD_LIST_decode(bbP, &dataP->threshold_list); -} -//----------------------------------------------------------------------------- -unsigned int MIH_C_LINK_CFG_STATUS2String(MIH_C_LINK_CFG_STATUS_T *dataP, char* bufP) -{ - //----------------------------------------------------------------------------- - unsigned int buffer_index = 0; - buffer_index += sprintf(&bufP[buffer_index], "LINK_PARAM_TYPE="); - buffer_index += MIH_C_LINK_PARAM_TYPE2String(&dataP->link_param_type, &bufP[buffer_index]); - - buffer_index += sprintf(&bufP[buffer_index], ", THRESHOLD="); - buffer_index += MIH_C_THRESHOLD2String(&dataP->threshold, &bufP[buffer_index]); - - buffer_index += sprintf(&bufP[buffer_index], ", CONFIG_STATUS="); - buffer_index += MIH_C_CONFIG_STATUS2String(&dataP->config_status, &bufP[buffer_index]); - return buffer_index; -} -//----------------------------------------------------------------------------- -void MIH_C_LINK_CFG_STATUS_encode(Bit_Buffer_t* bbP, MIH_C_LINK_CFG_STATUS_T *dataP) -{ - //----------------------------------------------------------------------------- - MIH_C_LINK_PARAM_TYPE_encode(bbP, &dataP->link_param_type); - MIH_C_THRESHOLD_encode(bbP, &dataP->threshold); - MIH_C_CONFIG_STATUS_encode(bbP, &dataP->config_status); -} -//----------------------------------------------------------------------------- -void MIH_C_LINK_CFG_STATUS_decode(Bit_Buffer_t* bbP, MIH_C_LINK_CFG_STATUS_T *dataP) -{ - //----------------------------------------------------------------------------- - MIH_C_LINK_PARAM_TYPE_decode(bbP, &dataP->link_param_type); - MIH_C_THRESHOLD_decode(bbP, &dataP->threshold); - MIH_C_CONFIG_STATUS_decode(bbP, &dataP->config_status); -} -//----------------------------------------------------------------------------- -unsigned int MIH_C_LINK_DESC_RSP2String(MIH_C_LINK_DESC_RSP_T *dataP, char* bufP) -{ - //----------------------------------------------------------------------------- - unsigned int buffer_index = 0; - - switch (dataP->choice) { - case 0: - buffer_index += sprintf(&bufP[buffer_index], "NUM_COS="); - buffer_index += MIH_C_NUM_COS2String(&dataP->_union.num_cos, &bufP[buffer_index]); - break; - - case 1: - buffer_index += sprintf(&bufP[buffer_index], "NUM_QUEUE="); - buffer_index += MIH_C_NUM_QUEUE2String(&dataP->_union.num_queue, &bufP[buffer_index]); - break; - - default: - buffer_index += sprintf(&bufP[buffer_index], "LINK_DESC_RSP UNITIALIZED"); - } - - return buffer_index; -} -//----------------------------------------------------------------------------- -void MIH_C_LINK_DESC_RSP_encode(Bit_Buffer_t* bbP, MIH_C_LINK_DESC_RSP_T *dataP) -{ - //----------------------------------------------------------------------------- - MIH_C_CHOICE_encode(bbP, &dataP->choice); - - switch (dataP->choice) { - case 0: - MIH_C_NUM_COS_encode(bbP, &dataP->_union.num_cos); - break; - - case 1: - MIH_C_NUM_QUEUE_encode(bbP, &dataP->_union.num_queue); - break; - - default: - printf("[MIH_C] ERROR NO KNOWN VALUE FOR ENCODING CHOICE OF MIH_C_LINK_DESC_RSP_T %d\n", dataP->choice); - } -} -//----------------------------------------------------------------------------- -void MIH_C_LINK_DESC_RSP_decode(Bit_Buffer_t* bbP, MIH_C_LINK_DESC_RSP_T *dataP) -{ - //----------------------------------------------------------------------------- - MIH_C_CHOICE_decode(bbP, &dataP->choice); - - switch (dataP->choice) { - case 0: - MIH_C_NUM_COS_decode(bbP, &dataP->_union.num_cos); - break; - - case 1: - MIH_C_NUM_QUEUE_decode(bbP, &dataP->_union.num_queue); - break; - - default: - printf("[MIH_C] ERROR NO KNOWN VALUE FOR DECODING CHOICE OF MIH_C_LINK_DESC_RSP_T %d\n", dataP->choice); - } -} -//----------------------------------------------------------------------------- -unsigned int MIH_C_LINK_PARAM2String(MIH_C_LINK_PARAM_T *dataP, char* bufP) -{ - //----------------------------------------------------------------------------- - unsigned int buffer_index = 0; - buffer_index += sprintf(&bufP[buffer_index], "LINK_PARAM_TYPE="); - buffer_index += MIH_C_LINK_PARAM_TYPE2String(&dataP->link_param_type, &bufP[buffer_index]); - - switch (dataP->choice) { - case 0: - buffer_index += sprintf(&bufP[buffer_index], ", LINK_PARAM_VAL="); - buffer_index += MIH_C_LINK_PARAM_VAL2String(&dataP->_union.link_param_val, &bufP[buffer_index]); - break; - - case 1: - buffer_index += sprintf(&bufP[buffer_index], ", QOS_PARAM_VAL="); - buffer_index += MIH_C_QOS_PARAM_VAL2String(&dataP->_union.qos_param_val, &bufP[buffer_index]); - break; - - default: - buffer_index += sprintf(&bufP[buffer_index], "LINK_PARAM UNITIALIZED"); - } - - return buffer_index; -} -//----------------------------------------------------------------------------- -void MIH_C_LINK_PARAM_encode(Bit_Buffer_t* bbP, MIH_C_LINK_PARAM_T *dataP) -{ - //----------------------------------------------------------------------------- - MIH_C_LINK_PARAM_TYPE_encode(bbP, &dataP->link_param_type); - MIH_C_CHOICE_encode(bbP, &dataP->choice); - - switch (dataP->choice) { - case 0: - MIH_C_LINK_PARAM_VAL_encode(bbP, &dataP->_union.link_param_val); - break; - - case 1: - MIH_C_QOS_PARAM_VAL_encode(bbP, &dataP->_union.qos_param_val); - break; - - default: - printf("[MIH_C] ERROR NO KNOWN VALUE FOR ENCODING CHOICE OF MIH_C_LINK_PARAM_T %d\n", dataP->choice); - } -} -//----------------------------------------------------------------------------- -void MIH_C_LINK_PARAM_decode(Bit_Buffer_t* bbP, MIH_C_LINK_PARAM_T *dataP) -{ - //----------------------------------------------------------------------------- - MIH_C_LINK_PARAM_TYPE_decode(bbP, &dataP->link_param_type); - MIH_C_CHOICE_decode(bbP, &dataP->choice); - - switch (dataP->choice) { - case 0: - MIH_C_LINK_PARAM_VAL_decode(bbP, &dataP->_union.link_param_val); - break; - - case 1: - MIH_C_QOS_PARAM_VAL_decode(bbP, &dataP->_union.qos_param_val); - break; - - default: - printf("[MIH_C] ERROR NO KNOWN VALUE FOR DECODING CHOICE OF MIH_C_LINK_PARAM_T %d\n", dataP->choice); - } -} -//----------------------------------------------------------------------------- -unsigned int MIH_C_LINK_PARAM_RPT2String(MIH_C_LINK_PARAM_RPT_T *dataP, char* bufP) -{ - //----------------------------------------------------------------------------- - unsigned int buffer_index = 0; - buffer_index += sprintf(&bufP[buffer_index], "LINK_PARAM="); - buffer_index += MIH_C_LINK_PARAM2String(&dataP->link_param, &bufP[buffer_index]); - - switch (dataP->choice) { - case 0: - //buffer_index += sprintf(&bufP[buffer_index], ", CHOICE NULL"); - break; - - case 1: - buffer_index += sprintf(&bufP[buffer_index], ", THRESHOLD="); - buffer_index += MIH_C_THRESHOLD2String(&dataP->_union.threshold, &bufP[buffer_index]); - break; - - default: - buffer_index += sprintf(&bufP[buffer_index], ", LINK_PARAM_RPT UNITIALIZED"); - } - - return buffer_index; -} -//----------------------------------------------------------------------------- -void MIH_C_LINK_PARAM_RPT_encode(Bit_Buffer_t* bbP, MIH_C_LINK_PARAM_RPT_T *dataP) -{ - //----------------------------------------------------------------------------- - MIH_C_LINK_PARAM_encode(bbP, &dataP->link_param); - MIH_C_CHOICE_encode(bbP, &dataP->choice); - - switch (dataP->choice) { - case 0: - break; - - case 1: - MIH_C_THRESHOLD_encode(bbP, &dataP->_union.threshold); - break; - - default: - printf("[MIH_C] ERROR NO KNOWN VALUE FOR ENCODING CHOICE OF MIH_C_LINK_PARAM_RPT_T %d\n", dataP->choice); - } -} -//----------------------------------------------------------------------------- -void MIH_C_LINK_PARAM_RPT_decode(Bit_Buffer_t* bbP, MIH_C_LINK_PARAM_RPT_T *dataP) -{ - //----------------------------------------------------------------------------- - MIH_C_LINK_PARAM_decode(bbP, &dataP->link_param); - MIH_C_CHOICE_decode(bbP, &dataP->choice); - - switch (dataP->choice) { - case 0: - break; - - case 1: - MIH_C_THRESHOLD_decode(bbP, &dataP->_union.threshold); - break; - - default: - printf("[MIH_C] ERROR NO KNOWN VALUE FOR DECODING CHOICE OF MIH_C_LINK_PARAM_RPT_T %d\n", dataP->choice); - } -} -//----------------------------------------------------------------------------- -void MIH_C_LINK_POA_LIST_encode(Bit_Buffer_t* bbP, MIH_C_LINK_POA_LIST_T *dataP) -{ - //----------------------------------------------------------------------------- - MIH_C_LINK_ID_encode(bbP, &dataP->link_id); - MIH_C_LINK_ADDR_LIST_encode(bbP, &dataP->link_addr_list); -} -//----------------------------------------------------------------------------- -void MIH_C_LINK_POA_LIST_decode(Bit_Buffer_t* bbP, MIH_C_LINK_POA_LIST_T *dataP) -{ - //----------------------------------------------------------------------------- - MIH_C_LINK_ID_decode(bbP, &dataP->link_id); - MIH_C_LINK_ADDR_LIST_decode(bbP, &dataP->link_addr_list); -} -//----------------------------------------------------------------------------- -unsigned int MIH_C_LINK_STATES_RSP2String(MIH_C_LINK_STATES_RSP_T *dataP, char* bufP) -{ - //----------------------------------------------------------------------------- - unsigned int buffer_index = 0; - - switch (dataP->choice) { - case 0: - buffer_index += sprintf(&bufP[buffer_index], "OPMODE="); - buffer_index += MIH_C_OPMODE2String2(&dataP->_union.op_mode, &bufP[buffer_index]); - break; - - case 1: - buffer_index += sprintf(&bufP[buffer_index], "CHANNEL ID="); - buffer_index += MIH_C_CHANNEL_ID2String(&dataP->_union.channel_id, &bufP[buffer_index]); - break; - - default: - buffer_index += sprintf(&bufP[buffer_index], "LINK_STATES_RSP UNITIALIZED"); - } - - return buffer_index; -} -//----------------------------------------------------------------------------- -void MIH_C_LINK_STATES_RSP_encode(Bit_Buffer_t* bbP, MIH_C_LINK_STATES_RSP_T *dataP) -{ - //----------------------------------------------------------------------------- - MIH_C_CHOICE_encode(bbP, &dataP->choice); - - switch (dataP->choice) { - case 0: - MIH_C_OPMODE_encode(bbP, &dataP->_union.op_mode); - break; - - case 1: - MIH_C_CHANNEL_ID_encode(bbP, &dataP->_union.channel_id); - break; - - default: - printf("[MIH_C] ERROR NO KNOWN VALUE FOR ENCODING CHOICE OF MIH_C_LINK_STATES_RSP_T %d\n", dataP->choice); - } -} -//----------------------------------------------------------------------------- -void MIH_C_LINK_STATES_RSP_decode(Bit_Buffer_t* bbP, MIH_C_LINK_STATES_RSP_T *dataP) -{ - //----------------------------------------------------------------------------- - MIH_C_CHOICE_decode(bbP, &dataP->choice); - - switch (dataP->choice) { - case 0: - MIH_C_OPMODE_decode(bbP, &dataP->_union.op_mode); - break; - - case 1: - MIH_C_CHANNEL_ID_decode(bbP, &dataP->_union.channel_id); - break; - - default: - printf("[MIH_C] ERROR NO KNOWN VALUE FOR DECODING CHOICE OF MIH_C_LINK_STATES_RSP_T %d\n", dataP->choice); - } -} -//----------------------------------------------------------------------------- -unsigned int MIH_C_LINK_STATES_REQ2String2(MIH_C_LINK_STATES_REQ_T *dataP, char* bufP) -{ - //----------------------------------------------------------------------------- - unsigned int buffer_index = 0; - - if (*dataP & MIH_C_BIT_LINK_STATES_REQ_OP_MODE) buffer_index += sprintf(&bufP[buffer_index], "OPMODE"); - - if (*dataP & MIH_C_BIT_LINK_STATES_REQ_CHANNEL_ID) buffer_index += sprintf(&bufP[buffer_index], " CHANNEL_ID"); - - return buffer_index; -} -//----------------------------------------------------------------------------- -unsigned int MIH_C_LINK_DESC_REQ2String2(MIH_C_LINK_DESC_REQ_T *dataP, char* bufP) -{ - //----------------------------------------------------------------------------- - unsigned int buffer_index = 0; - - if (*dataP & MIH_C_BIT_NUMBER_OF_CLASSES_OF_SERVICE_SUPPORTED) buffer_index += sprintf(&bufP[buffer_index], "NUM_OF_COS_SUPPORTED"); - - if (*dataP & MIH_C_BIT_NUMBER_OF_QUEUES_SUPPORTED) buffer_index += sprintf(&bufP[buffer_index], " NUM_OF_QUEUES_SUPPORTED"); - - return buffer_index; -} -//----------------------------------------------------------------------------- -void MIH_C_LINK_STATUS_REQ_encode(Bit_Buffer_t* bbP, MIH_C_LINK_STATUS_REQ_T *dataP) -{ - //----------------------------------------------------------------------------- - MIH_C_LINK_STATES_REQ_encode(bbP, &dataP->link_states_req); - MIH_C_LINK_PARAM_TYPE_LIST_encode(bbP, &dataP->link_param_type_list); - MIH_C_LINK_DESC_RSP_encode(bbP, &dataP->link_desc_rsp); -} -//----------------------------------------------------------------------------- -void MIH_C_LINK_STATUS_REQ_decode(Bit_Buffer_t* bbP, MIH_C_LINK_STATUS_REQ_T *dataP) -{ - //----------------------------------------------------------------------------- - MIH_C_LINK_STATES_REQ_decode(bbP, &dataP->link_states_req); - MIH_C_LINK_PARAM_TYPE_LIST_decode(bbP, &dataP->link_param_type_list); - MIH_C_LINK_DESC_RSP_decode(bbP, &dataP->link_desc_rsp); -} -//----------------------------------------------------------------------------- -void MIH_C_LINK_STATUS_RSP_encode(Bit_Buffer_t* bbP, MIH_C_LINK_STATUS_RSP_T *dataP) -{ - //----------------------------------------------------------------------------- - MIH_C_LINK_STATES_RSP_LIST_encode(bbP, &dataP->link_states_rsp_list); - MIH_C_LINK_PARAM_LIST_encode(bbP, &dataP->link_param_list); - MIH_C_LINK_DESC_RSP_LIST_encode(bbP, &dataP->link_desc_rsp_list); -} -//----------------------------------------------------------------------------- -void MIH_C_LINK_STATUS_RSP_decode(Bit_Buffer_t* bbP, MIH_C_LINK_STATUS_RSP_T *dataP) -{ - //----------------------------------------------------------------------------- - MIH_C_LINK_STATES_RSP_LIST_decode(bbP, &dataP->link_states_rsp_list); - MIH_C_LINK_PARAM_LIST_decode(bbP, &dataP->link_param_list); - MIH_C_LINK_DESC_RSP_LIST_decode(bbP, &dataP->link_desc_rsp_list); -} -//----------------------------------------------------------------------------- -void MIH_C_LINK_TUPLE_ID_encode(Bit_Buffer_t* bbP, MIH_C_LINK_TUPLE_ID_T *dataP) -{ - //----------------------------------------------------------------------------- - MIH_C_LINK_ID_encode(bbP, &dataP->link_id); - MIH_C_CHOICE_encode(bbP, &dataP->choice); - - switch (dataP->choice) { - case MIH_C_LINK_TUPLE_ID_CHOICE_NULL: - break; - - case MIH_C_LINK_TUPLE_ID_CHOICE_LINK_ADDR: - MIH_C_LINK_ADDR_encode(bbP, &dataP->_union.link_addr); - break; - - default: - printf("[MIH_C] ERROR NO KNOWN VALUE FOR ENCODING CHOICE OF MIH_C_LINK_TUPLE_ID_T %d\n", dataP->choice); - } -} -//----------------------------------------------------------------------------- -void MIH_C_LINK_TUPLE_ID_decode(Bit_Buffer_t* bbP, MIH_C_LINK_TUPLE_ID_T *dataP) -{ - //----------------------------------------------------------------------------- - MIH_C_LINK_ID_decode(bbP, &dataP->link_id); - MIH_C_CHOICE_decode(bbP, &dataP->choice); - - switch (dataP->choice) { - case MIH_C_LINK_TUPLE_ID_CHOICE_NULL: - break; - - case MIH_C_LINK_TUPLE_ID_CHOICE_LINK_ADDR: - MIH_C_LINK_ADDR_decode(bbP, &dataP->_union.link_addr); - break; - - default: - printf("[MIH_C] ERROR NO KNOWN VALUE FOR DECODING CHOICE OF MIH_C_LINK_TUPLE_ID_T %d\n", dataP->choice); - } -} -//----------------------------------------------------------------------------- -void MIH_C_LINK_DET_INFO_encode(Bit_Buffer_t* bbP, MIH_C_LINK_DET_INFO_T *dataP) -{ - //----------------------------------------------------------------------------- - MIH_C_LINK_TUPLE_ID_encode(bbP, &dataP->link_tuple_id); - MIH_C_NETWORK_ID_encode(bbP, &dataP->network_id); - MIH_C_NET_AUX_ID_encode(bbP, &dataP->net_aux_id); - MIH_C_SIG_STRENGTH_encode(bbP, &dataP->sig_strength); - MIH_C_UNSIGNED_INT2_encode(bbP, &dataP->sinr); - MIH_C_LINK_DATA_RATE_encode(bbP, &dataP->link_data_rate); - MIH_C_LINK_MIHCAP_FLAG_encode(bbP, &dataP->link_mihcap_flag); - MIH_C_NET_CAPS_encode(bbP, &dataP->net_caps); - -} -//----------------------------------------------------------------------------- -void MIH_C_LINK_DET_INFO_decode(Bit_Buffer_t* bbP, MIH_C_LINK_DET_INFO_T *dataP) -{ - //----------------------------------------------------------------------------- - MIH_C_LINK_TUPLE_ID_decode(bbP, &dataP->link_tuple_id); - MIH_C_NETWORK_ID_decode(bbP, &dataP->network_id); - MIH_C_NET_AUX_ID_decode(bbP, &dataP->net_aux_id); - MIH_C_SIG_STRENGTH_decode(bbP, &dataP->sig_strength); - MIH_C_UNSIGNED_INT2_decode(bbP, &dataP->sinr); - MIH_C_LINK_DATA_RATE_decode(bbP, &dataP->link_data_rate); - MIH_C_LINK_MIHCAP_FLAG_decode(bbP, &dataP->link_mihcap_flag); - MIH_C_NET_CAPS_decode(bbP, &dataP->net_caps); -} -//----------------------------------------------------------------------------- -unsigned int MIH_C_TH_ACTION2String2(MIH_C_TH_ACTION_T *actionP, char* bufP) -{ - //----------------------------------------------------------------------------- - unsigned int buffer_index = 0; - - switch (*actionP) { - case MIH_C_SET_NORMAL_THRESHOLD: - buffer_index += sprintf(&bufP[buffer_index], "SET_NORMAL_THRESHOLD"); - break; - - case MIH_C_SET_ONE_SHOT_THRESHOLD: - buffer_index += sprintf(&bufP[buffer_index], "SET_ONE_SHOT_THRESHOLD"); - break; - - case MIH_C_CANCEL_THRESHOLD: - buffer_index += sprintf(&bufP[buffer_index], "CANCEL_THRESHOLD"); - break; - - default: - buffer_index += sprintf(&bufP[buffer_index], "UNKNOWN"); - } - - return buffer_index; -} -//----------------------------------------------------------------------------- -unsigned int MIH_C_THRESHOLD_XDIR2String2(MIH_C_THRESHOLD_XDIR_T *valP, char* bufP) -{ - //----------------------------------------------------------------------------- - unsigned int buffer_index = 0; - - switch(*valP) { - case MIH_C_ABOVE_THRESHOLD: - buffer_index += sprintf(&bufP[buffer_index], "ABOVE_THRESHOLD"); - break; - - case MIH_C_BELOW_THRESHOLD: - buffer_index += sprintf(&bufP[buffer_index], "BELOW_THRESHOLD"); - break; - - default: - buffer_index += sprintf(&bufP[buffer_index], "UNKNOWN"); - } - - return buffer_index; -} -//----------------------------------------------------------------------------- -unsigned int MIH_C_LINK_PARAM_GEN2String2(MIH_C_LINK_PARAM_GEN_T *valP, char* bufP) -{ - //----------------------------------------------------------------------------- - unsigned int buffer_index = 0; - - switch(*valP) { - case MIH_C_LINK_PARAM_GEN_DATA_RATE: - buffer_index += sprintf(&bufP[buffer_index], "DATA_RATE"); - break; - - case MIH_C_LINK_PARAM_GEN_SIGNAL_STRENGTH: - buffer_index += sprintf(&bufP[buffer_index], "SIGNAL_STRENGTH"); - break; - - case MIH_C_LINK_PARAM_GEN_SINR: - buffer_index += sprintf(&bufP[buffer_index], "SINR"); - break; - - case MIH_C_LINK_PARAM_GEN_THROUGHPUT: - buffer_index += sprintf(&bufP[buffer_index], "THROUGHPUT"); - break; - - case MIH_C_LINK_PARAM_GEN_PACKET_ERROR_RATE: - buffer_index += sprintf(&bufP[buffer_index], "PACKET_ERROR_RATE"); - break; - - default: - buffer_index += sprintf(&bufP[buffer_index], "UNKNOWN"); - } - - return buffer_index; -} -//----------------------------------------------------------------------------- -unsigned int MIH_C_LINK_AC_RESULT2String2(MIH_C_LINK_AC_RESULT_T *dataP, char* bufP) -{ - //----------------------------------------------------------------------------- - unsigned int buffer_index = 0; - - switch (*dataP) { - case MIH_C_LINK_AC_RESULT_SUCCESS: - buffer_index += sprintf(&bufP[buffer_index], "SUCCESS"); - break; - - case MIH_C_LINK_AC_RESULT_FAILURE: - buffer_index += sprintf(&bufP[buffer_index], "FAILURE"); - break; - - case MIH_C_LINK_AC_RESULT_REFUSED: - buffer_index += sprintf(&bufP[buffer_index], "REFUSED"); - break; - - case MIH_C_LINK_AC_RESULT_INCAPABLE: - buffer_index += sprintf(&bufP[buffer_index], "INCAPABLE"); - break; - - default: - buffer_index += sprintf(&bufP[buffer_index], "UNKNOWN"); - } - - return buffer_index; -} diff --git a/openair3/RAL-LTE/INTERFACE-802.21/C/MIH_C_F9_data_types_for_qos_codec.c b/openair3/RAL-LTE/INTERFACE-802.21/C/MIH_C_F9_data_types_for_qos_codec.c deleted file mode 100755 index 95647bb24f..0000000000 --- a/openair3/RAL-LTE/INTERFACE-802.21/C/MIH_C_F9_data_types_for_qos_codec.c +++ /dev/null @@ -1,274 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ - -#define MIH_C_INTERFACE -#define MIH_C_F9_DATA_TYPES_FOR_QOS_CODEC_C -#include "MIH_C_F9_data_types_for_qos_codec.h" - -//----------------------------------------------------------------------------- -unsigned int MIH_C_MIN_PK_TX_DELAY2String(MIH_C_MIN_PK_TX_DELAY_T *dataP, char* bufP) -{ - //----------------------------------------------------------------------------- - unsigned int buffer_index = 0; - buffer_index += sprintf(&bufP[buffer_index], "COS = "); - buffer_index += MIH_C_COS_ID2String(&dataP->cos_id, &bufP[buffer_index]); - buffer_index += sprintf(&bufP[buffer_index], "VAL = "); - buffer_index += MIH_C_UNSIGNED_INT22String(&dataP->value, &bufP[buffer_index]); - return buffer_index; -} -//----------------------------------------------------------------------------- -void MIH_C_MIN_PK_TX_DELAY_encode(Bit_Buffer_t* bbP, MIH_C_MIN_PK_TX_DELAY_T *dataP) -{ - //----------------------------------------------------------------------------- - MIH_C_COS_ID_encode(bbP, &dataP->cos_id); - MIH_C_UNSIGNED_INT2_encode(bbP, &dataP->value); -} -//----------------------------------------------------------------------------- -void MIH_C_MIN_PK_TX_DELAY_decode(Bit_Buffer_t* bbP, MIH_C_MIN_PK_TX_DELAY_T *dataP) -{ - //----------------------------------------------------------------------------- - MIH_C_COS_ID_decode(bbP, &dataP->cos_id); - MIH_C_UNSIGNED_INT2_decode(bbP, &dataP->value); -} -//----------------------------------------------------------------------------- -unsigned int MIH_C_AVG_PK_TX_DELAY2String(MIH_C_AVG_PK_TX_DELAY_T *dataP, char* bufP) -{ - //----------------------------------------------------------------------------- - unsigned int buffer_index = 0; - buffer_index += sprintf(&bufP[buffer_index], "COS = "); - buffer_index += MIH_C_COS_ID2String(&dataP->cos_id, &bufP[buffer_index]); - buffer_index += sprintf(&bufP[buffer_index], "VAL = "); - buffer_index += MIH_C_UNSIGNED_INT22String(&dataP->value, &bufP[buffer_index]); - return buffer_index; -} -//----------------------------------------------------------------------------- -void MIH_C_AVG_PK_TX_DELAY_encode(Bit_Buffer_t* bbP, MIH_C_AVG_PK_TX_DELAY_T *dataP) -{ - //----------------------------------------------------------------------------- - MIH_C_COS_ID_encode(bbP, &dataP->cos_id); - MIH_C_UNSIGNED_INT2_encode(bbP, &dataP->value); -} -//----------------------------------------------------------------------------- -void MIH_C_AVG_PK_TX_DELAY_decode(Bit_Buffer_t* bbP, MIH_C_AVG_PK_TX_DELAY_T *dataP) -{ - //----------------------------------------------------------------------------- - MIH_C_COS_ID_decode(bbP, &dataP->cos_id); - MIH_C_UNSIGNED_INT2_decode(bbP, &dataP->value); -} -//----------------------------------------------------------------------------- -unsigned int MIH_C_MAX_PK_TX_DELAY2String(MIH_C_MAX_PK_TX_DELAY_T *dataP, char* bufP) -{ - //----------------------------------------------------------------------------- - unsigned int buffer_index = 0; - buffer_index += sprintf(&bufP[buffer_index], "COS = "); - buffer_index += MIH_C_COS_ID2String(&dataP->cos_id, &bufP[buffer_index]); - buffer_index += sprintf(&bufP[buffer_index], "VAL = "); - buffer_index += MIH_C_UNSIGNED_INT22String(&dataP->value, &bufP[buffer_index]); - return buffer_index; -} -//----------------------------------------------------------------------------- -void MIH_C_MAX_PK_TX_DELAY_encode(Bit_Buffer_t* bbP, MIH_C_MAX_PK_TX_DELAY_T *dataP) -{ - //----------------------------------------------------------------------------- - MIH_C_COS_ID_encode(bbP, &dataP->cos_id); - MIH_C_UNSIGNED_INT2_encode(bbP, &dataP->value); -} -//----------------------------------------------------------------------------- -void MIH_C_MAX_PK_TX_DELAY_decode(Bit_Buffer_t* bbP, MIH_C_MAX_PK_TX_DELAY_T *dataP) -{ - //----------------------------------------------------------------------------- - MIH_C_COS_ID_decode(bbP, &dataP->cos_id); - MIH_C_UNSIGNED_INT2_decode(bbP, &dataP->value); -} -//----------------------------------------------------------------------------- -unsigned int MIH_C_PK_DELAY_JITTER2String(MIH_C_PK_DELAY_JITTER_T *dataP, char* bufP) -{ - //----------------------------------------------------------------------------- - unsigned int buffer_index = 0; - buffer_index += sprintf(&bufP[buffer_index], "COS = "); - buffer_index += MIH_C_COS_ID2String(&dataP->cos_id, &bufP[buffer_index]); - buffer_index += sprintf(&bufP[buffer_index], "VAL = "); - buffer_index += MIH_C_UNSIGNED_INT22String(&dataP->value, &bufP[buffer_index]); - return buffer_index; -} -//----------------------------------------------------------------------------- -void MIH_C_PK_DELAY_JITTER_encode(Bit_Buffer_t* bbP, MIH_C_PK_DELAY_JITTER_T *dataP) -{ - //----------------------------------------------------------------------------- - MIH_C_COS_ID_encode(bbP, &dataP->cos_id); - MIH_C_UNSIGNED_INT2_encode(bbP, &dataP->value); -} -//----------------------------------------------------------------------------- -void MIH_C_PK_DELAY_JITTER_decode(Bit_Buffer_t* bbP, MIH_C_PK_DELAY_JITTER_T *dataP) -{ - //----------------------------------------------------------------------------- - MIH_C_COS_ID_decode(bbP, &dataP->cos_id); - MIH_C_UNSIGNED_INT2_decode(bbP, &dataP->value); -} -//----------------------------------------------------------------------------- -unsigned int MIH_C_PK_LOSS_RATE2String(MIH_C_PK_LOSS_RATE_T *dataP, char* bufP) -{ - //----------------------------------------------------------------------------- - unsigned int buffer_index = 0; - buffer_index += sprintf(&bufP[buffer_index], "COS = "); - buffer_index += MIH_C_COS_ID2String(&dataP->cos_id, &bufP[buffer_index]); - buffer_index += sprintf(&bufP[buffer_index], "VAL = "); - buffer_index += MIH_C_UNSIGNED_INT22String(&dataP->value, &bufP[buffer_index]); - return buffer_index; -} -//----------------------------------------------------------------------------- -void MIH_C_PK_LOSS_RATE_encode(Bit_Buffer_t* bbP, MIH_C_PK_LOSS_RATE_T *dataP) -{ - //----------------------------------------------------------------------------- - MIH_C_COS_ID_encode(bbP, &dataP->cos_id); - MIH_C_UNSIGNED_INT2_encode(bbP, &dataP->value); -} -//----------------------------------------------------------------------------- -void MIH_C_PK_LOSS_RATE_decode(Bit_Buffer_t* bbP, MIH_C_PK_LOSS_RATE_T *dataP) -{ - //----------------------------------------------------------------------------- - MIH_C_COS_ID_decode(bbP, &dataP->cos_id); - MIH_C_UNSIGNED_INT2_decode(bbP, &dataP->value); -} -//----------------------------------------------------------------------------- -unsigned int MIH_C_QOS_PARAM_VAL2String(MIH_C_QOS_PARAM_VAL_T *dataP, char* bufP) -{ - //----------------------------------------------------------------------------- - unsigned int buffer_index = 0; - - switch (dataP->choice) { - case 0: - buffer_index += sprintf(&bufP[buffer_index], "NUM_QOS_TYPES = "); - buffer_index += MIH_C_NUM_COS_TYPES2String(&dataP->_union.num_qos_types, &bufP[buffer_index]); - break; - - case 1: - buffer_index += sprintf(&bufP[buffer_index], "MIN_PK_TX_DELAY_LIST = "); - buffer_index += MIH_C_MIN_PK_TX_DELAY_LIST2String(&dataP->_union.min_pk_tx_delay_list, &bufP[buffer_index]); - break; - - case 2: - buffer_index += sprintf(&bufP[buffer_index], "AVG_PK_TX_DELAY_LIST = "); - buffer_index += MIH_C_AVG_PK_TX_DELAY_LIST2String(&dataP->_union.avg_pk_tx_delay_list, &bufP[buffer_index]); - break; - - case 3: - buffer_index += sprintf(&bufP[buffer_index], "MAX_PK_TX_DELAY_LIST = "); - buffer_index += MIH_C_MAX_PK_TX_DELAY_LIST2String(&dataP->_union.max_pk_tx_delay_list, &bufP[buffer_index]); - break; - - case 4: - buffer_index += sprintf(&bufP[buffer_index], "PK_DELAY_JITTER_LIST = "); - buffer_index += MIH_C_PK_DELAY_JITTER_LIST2String(&dataP->_union.pk_delay_jitter_list, &bufP[buffer_index]); - break; - - case 5: - buffer_index += sprintf(&bufP[buffer_index], "PK_LOSS_RATE_LIST = "); - buffer_index += MIH_C_PK_LOSS_RATE_LIST2String(&dataP->_union.pk_loss_rate_list, &bufP[buffer_index]); - break; - - default: - buffer_index += sprintf(&bufP[buffer_index], "QOS_PARAM_VAL UNITIALIZED"); - } - - return buffer_index; -} -//----------------------------------------------------------------------------- -void MIH_C_QOS_PARAM_VAL_encode(Bit_Buffer_t* bbP, MIH_C_QOS_PARAM_VAL_T *dataP) -{ - //----------------------------------------------------------------------------- - MIH_C_CHOICE_encode(bbP, &dataP->choice); - - switch (dataP->choice) { - case 0: - MIH_C_NUM_COS_TYPES_encode(bbP, &dataP->_union.num_qos_types); - break; - - case 1: - MIH_C_MIN_PK_TX_DELAY_LIST_encode(bbP, &dataP->_union.min_pk_tx_delay_list); - break; - - case 2: - MIH_C_AVG_PK_TX_DELAY_LIST_encode(bbP, &dataP->_union.avg_pk_tx_delay_list); - break; - - case 3: - MIH_C_MAX_PK_TX_DELAY_LIST_encode(bbP, &dataP->_union.max_pk_tx_delay_list); - break; - - case 4: - MIH_C_PK_DELAY_JITTER_LIST_encode(bbP, &dataP->_union.pk_delay_jitter_list); - break; - - case 5: - MIH_C_PK_LOSS_RATE_LIST_encode(bbP, &dataP->_union.pk_loss_rate_list); - break; - - default: - printf("[MIH_C] ERROR NO KNOWN VALUE FOR ENCODING CHOICE OF MIH_C_QOS_PARAM_VAL_T %d\n", dataP->choice); - } -} -//----------------------------------------------------------------------------- -void MIH_C_QOS_PARAM_VAL_decode(Bit_Buffer_t* bbP, MIH_C_QOS_PARAM_VAL_T *dataP) -{ - //----------------------------------------------------------------------------- - MIH_C_CHOICE_decode(bbP, &dataP->choice); - - switch (dataP->choice) { - case 0: - MIH_C_NUM_COS_TYPES_encode(bbP, &dataP->_union.num_qos_types); - break; - - case 1: - MIH_C_MIN_PK_TX_DELAY_LIST_encode(bbP, &dataP->_union.min_pk_tx_delay_list); - break; - - case 2: - MIH_C_AVG_PK_TX_DELAY_LIST_decode(bbP, &dataP->_union.avg_pk_tx_delay_list); - break; - - case 3: - MIH_C_MAX_PK_TX_DELAY_LIST_decode(bbP, &dataP->_union.max_pk_tx_delay_list); - break; - - case 4: - MIH_C_PK_DELAY_JITTER_LIST_decode(bbP, &dataP->_union.pk_delay_jitter_list); - break; - - case 5: - MIH_C_PK_LOSS_RATE_LIST_decode(bbP, &dataP->_union.pk_loss_rate_list); - break; - - default: - printf("[MIH_C] ERROR NO KNOWN VALUE FOR DECODING CHOICE OF MIH_C_QOS_PARAM_VAL_T %d\n", dataP->choice); - } -} - - - diff --git a/openair3/RAL-LTE/INTERFACE-802.21/C/MIH_C_L2_type_values_for_tlv_encoding.c b/openair3/RAL-LTE/INTERFACE-802.21/C/MIH_C_L2_type_values_for_tlv_encoding.c deleted file mode 100755 index b4e21ae575..0000000000 --- a/openair3/RAL-LTE/INTERFACE-802.21/C/MIH_C_L2_type_values_for_tlv_encoding.c +++ /dev/null @@ -1,356 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ - -#define MIH_C_INTERFACE -#define MIH_C_L2_TYPE_VALUES_FOR_TLV_ENCODING_C -#include "MIH_C_L2_type_values_for_tlv_encoding.h" - -//----------------------------------------------------------------------------- -unsigned int MIH_C_TLV2String(MIH_C_TLV_TYPE_T *typeP, char* bufP) -{ - //----------------------------------------------------------------------------- - unsigned int buffer_index = 0; - - switch(*typeP) { - case MIH_C_TLV_SOURCE_MIHF_ID: - buffer_index += sprintf(&bufP[buffer_index], "TLV_SOURCE_MIHF_ID"); - break; - - case MIH_C_TLV_DESTINATION_MIHF_ID: - buffer_index += sprintf(&bufP[buffer_index], "TLV_DESTINATION_MIHF_ID"); - break; - - case MIH_C_TLV_STATUS: - buffer_index += sprintf(&bufP[buffer_index], "TLV_STATUS"); - break; - - case MIH_C_TLV_LINK_TYPE: - buffer_index += sprintf(&bufP[buffer_index], "TLV_LINK_TYPE"); - break; - - case MIH_C_TLV_MIH_EVENT_LIST: - buffer_index += sprintf(&bufP[buffer_index], "TLV_MIH_EVENT_LIST"); - break; - - case MIH_C_TLV_MIH_COMMAND_LIST: - buffer_index += sprintf(&bufP[buffer_index], "TLV_MIH_COMMAND_LIST"); - break; - - case MIH_C_TLV_MIIS_QUERY_TYPE_LIST: - buffer_index += sprintf(&bufP[buffer_index], "TLV_MIIS_QUERY_TYPE_LIST"); - break; - - case MIH_C_TLV_TRANSPORT_OPTION_LIST: - buffer_index += sprintf(&bufP[buffer_index], "TLV_TRANSPORT_OPTION_LIST"); - break; - - case MIH_C_TLV_LINK_ADDRESS_LIST: - buffer_index += sprintf(&bufP[buffer_index], "TLV_LINK_ADDRESS_LIST"); - break; - - case MIH_C_TLV_MBB_HANDOVER_SUPPORT: - buffer_index += sprintf(&bufP[buffer_index], "TLV_MBB_HANDOVER_SUPPORT"); - break; - - case MIH_C_TLV_REGISTER_REQUEST_CODE: - buffer_index += sprintf(&bufP[buffer_index], "TLV_REGISTER_REQUEST_CODE"); - break; - - case MIH_C_TLV_VALID_TIME_INTERVAL: - buffer_index += sprintf(&bufP[buffer_index], "TLV_VALID_TIME_INTERVAL"); - break; - - case MIH_C_TLV_LINK_IDENTIFIER: - buffer_index += sprintf(&bufP[buffer_index], "TLV_LINK_IDENTIFIER"); - break; - - case MIH_C_TLV_NEW_LINK_IDENTIFIER: - buffer_index += sprintf(&bufP[buffer_index], "TLV_NEW_LINK_IDENTIFIER"); - break; - - case MIH_C_TLV_OLD_ACCESS_ROUTER: - buffer_index += sprintf(&bufP[buffer_index], "TLV_OLD_ACCESS_ROUTER"); - break; - - case MIH_C_TLV_NEW_ACCESS_ROUTER: - buffer_index += sprintf(&bufP[buffer_index], "TLV_NEW_ACCESS_ROUTER"); - break; - - case MIH_C_TLV_IP_RENEWAL_FLAG: - buffer_index += sprintf(&bufP[buffer_index], "TLV_IP_RENEWAL_FLAG"); - break; - - case MIH_C_TLV_MOBILITY_MANAGEMENT_SUPPORT: - buffer_index += sprintf(&bufP[buffer_index], "TLV_MOBILITY_MANAGEMENT_SUPPORT"); - break; - - case MIH_C_TLV_IP_ADDRESS_CONFIGURATION_METHODS: - buffer_index += sprintf(&bufP[buffer_index], "TLV_IP_ADDRESS_CONFIGURATION_METHODS"); - break; - - case MIH_C_TLV_LINK_DOWN_REASON_CODE: - buffer_index += sprintf(&bufP[buffer_index], "TLV_LINK_DOWN_REASON_CODE"); - break; - - case MIH_C_TLV_LINK_TIME_INTERVAL: - buffer_index += sprintf(&bufP[buffer_index], "TLV_LINK_TIME_INTERVAL"); - break; - - case MIH_C_TLV_LINK_GOING_DOWN_REASON_CODE: - buffer_index += sprintf(&bufP[buffer_index], "TLV_LINK_GOING_DOWN_REASON_CODE"); - break; - - case MIH_C_TLV_LINK_PARAMETER_REPORT_LIST: - buffer_index += sprintf(&bufP[buffer_index], "TLV_LINK_PARAMETER_REPORT_LIST"); - break; - - case MIH_C_TLV_DEVICE_STATES_REQUEST: - buffer_index += sprintf(&bufP[buffer_index], "TLV_DEVICE_STATES_REQUEST"); - break; - - case MIH_C_TLV_LINK_IDENTIFIER_LIST: - buffer_index += sprintf(&bufP[buffer_index], "TLV_LINK_IDENTIFIER_LIST"); - break; - - case MIH_C_TLV_DEVICE_STATES_RESPONSE_LIST: - buffer_index += sprintf(&bufP[buffer_index], "TLV_DEVICE_STATES_RESPONSE_LIST"); - break; - - case MIH_C_TLV_GET_STATUS_REQUEST_SET: - buffer_index += sprintf(&bufP[buffer_index], "TLV_GET_STATUS_REQUEST_SET"); - break; - - case MIH_C_TLV_GET_STATUS_RESPONSE_LIST: - buffer_index += sprintf(&bufP[buffer_index], "TLV_GET_STATUS_RESPONSE_LIST"); - break; - - case MIH_C_TLV_CONFIGURE_REQUEST_LIST: - buffer_index += sprintf(&bufP[buffer_index], "TLV_CONFIGURE_REQUEST_LIST"); - break; - - case MIH_C_TLV_CONFIGURE_RESPONSE_LIST: - buffer_index += sprintf(&bufP[buffer_index], "TLV_CONFIGURE_RESPONSE_LIST"); - break; - - case MIH_C_TLV_LIST_OF_LINK_POA_LIST: - buffer_index += sprintf(&bufP[buffer_index], "TLV_LIST_OF_LINK_POA_LIST"); - break; - - case MIH_C_TLV_PREFERRED_LINK_LIST: - buffer_index += sprintf(&bufP[buffer_index], "TLV_PREFERRED_LINK_LIST"); - break; - - case MIH_C_TLV_HANDOVER_RESOURCE_QUERY_LIST: - buffer_index += sprintf(&bufP[buffer_index], "TLV_HANDOVER_RESOURCE_QUERY_LIST"); - break; - - case MIH_C_TLV_HANDOVER_STATUS: - buffer_index += sprintf(&bufP[buffer_index], "TLV_HANDOVER_STATUS"); - break; - - case MIH_C_TLV_ACCESS_ROUTER_ADDRESS: - buffer_index += sprintf(&bufP[buffer_index], "TLV_ACCESS_ROUTER_ADDRESS"); - break; - - case MIH_C_TLV_DHCP_SERVER_ADDRESS: - buffer_index += sprintf(&bufP[buffer_index], "TLV_DHCP_SERVER_ADDRESS"); - break; - - case MIH_C_TLV_FA_ADDRESS: - buffer_index += sprintf(&bufP[buffer_index], "TLV_FA_ADDRESS"); - break; - - case MIH_C_TLV_LINK_ACTIONS_LIST: - buffer_index += sprintf(&bufP[buffer_index], "TLV_LINK_ACTIONS_LIST"); - break; - - case MIH_C_TLV_LINK_ACTIONS_RESULT_LIST: - buffer_index += sprintf(&bufP[buffer_index], "TLV_LINK_ACTIONS_RESULT_LIST"); - break; - - case MIH_C_TLV_HANDOVER_RESULT: - buffer_index += sprintf(&bufP[buffer_index], "TLV_HANDOVER_RESULT"); - break; - - case MIH_C_TLV_RESOURCE_STATUS: - buffer_index += sprintf(&bufP[buffer_index], "TLV_RESOURCE_STATUS"); - break; - - case MIH_C_TLV_RESOURCE_RETENTION_STATUS: - buffer_index += sprintf(&bufP[buffer_index], "TLV_RESOURCE_RETENTION_STATUS"); - break; - - case MIH_C_TLV_INFO_QUERY_BINARY_DATA_LIST: - buffer_index += sprintf(&bufP[buffer_index], "TLV_INFO_QUERY_BINARY_DATA_LIST"); - break; - - case MIH_C_TLV_INFO_QUERY_RDF_DATA_LIST: - buffer_index += sprintf(&bufP[buffer_index], "TLV_INFO_QUERY_RDF_DATA_LIST"); - break; - - case MIH_C_TLV_INFO_QUERY_RDF_SCHEMA_URL: - buffer_index += sprintf(&bufP[buffer_index], "TLV_INFO_QUERY_RDF_SCHEMA_URL"); - break; - - case MIH_C_TLV_INFO_QUERY_RDF_SCHEMA_LIST: - buffer_index += sprintf(&bufP[buffer_index], "TLV_INFO_QUERY_RDF_SCHEMA_LIST"); - break; - - case MIH_C_TLV_MAX_RESPONSE_SIZE: - buffer_index += sprintf(&bufP[buffer_index], "TLV_MAX_RESPONSE_SIZE"); - break; - - case MIH_C_TLV_INFO_RESPONSE_BINARY_DATA_LIST: - buffer_index += sprintf(&bufP[buffer_index], "TLV_INFO_RESPONSE_BINARY_DATA_LIST"); - break; - - case MIH_C_TLV_INFO_RESPONSE_RDF_DATA_LIST: - buffer_index += sprintf(&bufP[buffer_index], "TLV_INFO_RESPONSE_RDF_DATA_LIST"); - break; - - case MIH_C_TLV_INFO_RESPONSE_RDF_SCHEMA_URL_LIST: - buffer_index += sprintf(&bufP[buffer_index], "TLV_INFO_RESPONSE_RDF_SCHEMA_URL_LIST"); - break; - - case MIH_C_TLV_INFO_RESPONSE_RDF_SCHEMA_LIST: - buffer_index += sprintf(&bufP[buffer_index], "TLV_INFO_RESPONSE_RDF_SCHEMA_LIST"); - break; - - case MIH_C_TLV_MOBILE_NODE_MIHF_ID: - buffer_index += sprintf(&bufP[buffer_index], "TLV_MOBILE_NODE_MIHF_ID"); - break; - - case MIH_C_TLV_QUERY_RESOURCE_REPORT_FLAG: - buffer_index += sprintf(&bufP[buffer_index], "TLV_QUERY_RESOURCE_REPORT_FLAG"); - break; - - case MIH_C_TLV_EVENT_CONFIGURATION_INFO_LIST: - buffer_index += sprintf(&bufP[buffer_index], "TLV_EVENT_CONFIGURATION_INFO_LIST"); - break; - - case MIH_C_TLV_TARGET_NETWORK_INFO: - buffer_index += sprintf(&bufP[buffer_index], "TLV_TARGET_NETWORK_INFO"); - break; - - case MIH_C_TLV_LIST_OF_TARGET_NETWORK_INFO: - buffer_index += sprintf(&bufP[buffer_index], "TLV_LIST_OF_TARGET_NETWORK_INFO"); - break; - - case MIH_C_TLV_ASSIGNED_RESOURCE_SET: - buffer_index += sprintf(&bufP[buffer_index], "TLV_ASSIGNED_RESOURCE_SET"); - break; - - case MIH_C_TLV_LINK_DETECTED_INFO_LIST: - buffer_index += sprintf(&bufP[buffer_index], "TLV_LINK_DETECTED_INFO_LIST"); - break; - - case MIH_C_TLV_MN_LINK_ID: - buffer_index += sprintf(&bufP[buffer_index], "TLV_MN_LINK_ID"); - break; - - case MIH_C_TLV_POA: - buffer_index += sprintf(&bufP[buffer_index], "TLV_POA"); - break; - - case MIH_C_TLV_UNAUTHENTICATED_INFORMATION_REQUEST: - buffer_index += sprintf(&bufP[buffer_index], "TLV_UNAUTHENTICATED_INFORMATION_REQUEST"); - break; - - case MIH_C_TLV_NETWORK_TYPE: - buffer_index += sprintf(&bufP[buffer_index], "TLV_NETWORK_TYPE"); - break; - - case MIH_C_TLV_REQUESTED_RESOURCE_SET: - buffer_index += sprintf(&bufP[buffer_index], "TLV_REQUESTED_RESOURCE_SET"); - break; -#ifdef MIH_C_MEDIEVAL_EXTENSIONS - - case MIH_C_TLV_LINK_EVENT_LIST: - buffer_index += sprintf(&bufP[buffer_index], "TLV_LINK_EVENT_LIST"); - break; - - case MIH_C_TLV_LINK_CMD_LIST: - buffer_index += sprintf(&bufP[buffer_index], "TLV_LINK_CMD_LIST"); - break; - - case MIH_C_TLV_LINK_PARAM_TYPE_LIST: - buffer_index += sprintf(&bufP[buffer_index], "TLV_LINK_PARAM_TYPE_LIST"); - break; - - case MIH_C_TLV_LINK_PARAMETERS_STATUS_LIST: - buffer_index += sprintf(&bufP[buffer_index], "TLV_LINK_PARAMETERS_STATUS_LIST"); - break; - - case MIH_C_TLV_LINK_STATES_REQ: - buffer_index += sprintf(&bufP[buffer_index], "TLV_LINK_STATES_REQ"); - break; - - case MIH_C_TLV_LINK_STATES_RSP_LIST: - buffer_index += sprintf(&bufP[buffer_index], "TLV_LINK_STATES_RSP_LIST"); - break; - - case MIH_C_TLV_LINK_DESC_REQ: - buffer_index += sprintf(&bufP[buffer_index], "TLV_LINK_DESC_REQ"); - break; - - case MIH_C_TLV_LINK_DESC_RSP_LIST: - buffer_index += sprintf(&bufP[buffer_index], "TLV_LINK_DESC_RSP_LIST"); - break; - - case MIH_C_TLV_LINK_ACTION: - buffer_index += sprintf(&bufP[buffer_index], "TLV_LINK_ACTION"); - break; - - case MIH_C_TLV_LINK_AC_RESULT: - buffer_index += sprintf(&bufP[buffer_index], "TLV_LINK_AC_RESULT"); - break; - - case MIH_C_TLV_LINK_SCAN_RSP_LIST: - buffer_index += sprintf(&bufP[buffer_index], "TLV_LINK_SCAN_RSP_LIST"); - break; - - case MIH_C_TLV_LINK_DET_INFO: - buffer_index += sprintf(&bufP[buffer_index], "TLV_LINK_DET_INFO"); - break; - - case MIH_C_TLV_LINK_INTERFACE_TYPE_ADDR: - buffer_index += sprintf(&bufP[buffer_index], "TLV_LINK_INTERFACE_TYPE_ADDR"); - break; - - case MIH_C_TLV_MOS_DSCV: - buffer_index += sprintf(&bufP[buffer_index], "TLV_MOS_DSCV"); - break; -#endif - - default: - buffer_index += sprintf(&bufP[buffer_index], "UNKNOWN TLV"); - } - - return buffer_index; -} diff --git a/openair3/RAL-LTE/INTERFACE-802.21/C/MIH_C_Medieval_extensions.c b/openair3/RAL-LTE/INTERFACE-802.21/C/MIH_C_Medieval_extensions.c deleted file mode 100755 index 079c80f890..0000000000 --- a/openair3/RAL-LTE/INTERFACE-802.21/C/MIH_C_Medieval_extensions.c +++ /dev/null @@ -1,671 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ - -#ifdef MIH_C_MEDIEVAL_EXTENSIONS -#define MIH_C_INTERFACE -#define MIH_C_MEDIEVAL_EXTENSIONS_C -#include "MIH_C_Medieval_extensions.h" - -//----------------------------------------------------------------------------- -unsigned int MIH_C_PROTO2String(MIH_C_PROTO_T *protoP, char* bufP) -{ - //----------------------------------------------------------------------------- - unsigned int buffer_index = 0; - - switch (*protoP) { - case MIH_C_PROTO_TCP: - buffer_index += sprintf(&bufP[buffer_index], "TCP"); - break; - - case MIH_C_PROTO_UDP: - buffer_index += sprintf(&bufP[buffer_index], "UDP"); - break; - - default: - buffer_index += sprintf(&bufP[buffer_index], "UNKNOWN_PROTO"); - } - - return buffer_index; -} -//----------------------------------------------------------------------------- -unsigned int MIH_C_IP_TUPLE2String(MIH_C_IP_TUPLE_T *dataP, char* bufP) -{ - //----------------------------------------------------------------------------- - unsigned int buffer_index = 0; - - buffer_index += sprintf(&bufP[buffer_index], "IP_ADDR = "); - buffer_index += MIH_C_IP_ADDR2String(&dataP->ip_addr, &bufP[buffer_index]); - - buffer_index += sprintf(&bufP[buffer_index], "\nPORT = "); - buffer_index += MIH_C_PORT2String(&dataP->port, &bufP[buffer_index]); - - return buffer_index; -} -//----------------------------------------------------------------------------- -void MIH_C_IP_TUPLE_encode(Bit_Buffer_t* bbP, MIH_C_IP_TUPLE_T *dataP) -{ - //----------------------------------------------------------------------------- - MIH_C_IP_ADDR_encode(bbP, &dataP->ip_addr); - MIH_C_PORT_encode(bbP, &dataP->port); -} -//----------------------------------------------------------------------------- -void MIH_C_IP_TUPLE_decode(Bit_Buffer_t* bbP, MIH_C_IP_TUPLE_T *dataP) -{ - //----------------------------------------------------------------------------- - MIH_C_IP_ADDR_decode(bbP, &dataP->ip_addr); - MIH_C_PORT_decode(bbP, &dataP->port); -} -/*//----------------------------------------------------------------------------- -unsigned int MIH_C_FLOW_ID2String(MIH_C_FLOW_ID_T *dataP, char* bufP) { -//----------------------------------------------------------------------------- - unsigned int buffer_index = 0; - - buffer_index += sprintf(&bufP[buffer_index], "IP_TUPLE SRC = "); - buffer_index += MIH_C_IP_TUPLE2String(&dataP->source_addr, &bufP[buffer_index]); - - buffer_index += sprintf(&bufP[buffer_index], "\nIP_TUPLE DEST = "); - buffer_index += MIH_C_IP_TUPLE2String(&dataP->dest_addr, &bufP[buffer_index]); - - buffer_index += sprintf(&bufP[buffer_index], "\nPROTO = "); - buffer_index += MIH_C_PROTO2String(&dataP->transport_protocol, &bufP[buffer_index]); - return buffer_index; -} -//----------------------------------------------------------------------------- -inline void MIH_C_FLOW_ID_encode(Bit_Buffer_t* bbP, MIH_C_FLOW_ID_T *dataP) { -//----------------------------------------------------------------------------- - MIH_C_IP_TUPLE_encode(bbP, &dataP->source_addr); - MIH_C_IP_TUPLE_encode(bbP, &dataP->dest_addr); - MIH_C_PROTO_encode(bbP, &dataP->transport_protocol); -} -//----------------------------------------------------------------------------- -inline void MIH_C_FLOW_ID_decode(Bit_Buffer_t* bbP, MIH_C_FLOW_ID_T *dataP) { -//----------------------------------------------------------------------------- - MIH_C_IP_TUPLE_decode(bbP, &dataP->source_addr); - MIH_C_IP_TUPLE_decode(bbP, &dataP->dest_addr); - MIH_C_PROTO_decode(bbP, &dataP->transport_protocol); -}*/ -//----------------------------------------------------------------------------- -unsigned int MIH_C_MARK2String(MIH_C_MARK_T *dataP, char* bufP) -{ - //----------------------------------------------------------------------------- - unsigned int buffer_index = 0; - - switch (dataP->choice) { - case 0: - buffer_index += sprintf(&bufP[buffer_index], "DSCP MASK = "); - buffer_index += MIH_C_BITMAP82String(&dataP->_union.dscp_mask, &bufP[buffer_index]); - break; - - case 1: - buffer_index += sprintf(&bufP[buffer_index], "FLOW LABEL = "); - buffer_index += MIH_C_BITMAP242String(&dataP->_union.flow_label_mask, &bufP[buffer_index]); - break; - - default: - buffer_index += sprintf(&bufP[buffer_index], "MARK UNINITIALIZED "); - } - - return buffer_index; -} -//----------------------------------------------------------------------------- -void MIH_C_MARK_encode(Bit_Buffer_t* bbP, MIH_C_MARK_T *dataP) -{ - //----------------------------------------------------------------------------- - MIH_C_CHOICE_encode(bbP, &dataP->choice); - - switch (dataP->choice) { - case 0: - MIH_C_BITMAP8_encode(bbP, &dataP->_union.dscp_mask); - break; - - case 1: - MIH_C_BITMAP24_encode(bbP, &dataP->_union.flow_label_mask); - break; - - default: - printf("[MIH_C] ERROR NO KNOWN VALUE FOR ENCODING CHOICE OF MIH_C_MARK_T %d\n", dataP->choice); - } -} -//----------------------------------------------------------------------------- -void MIH_C_MARK_decode(Bit_Buffer_t* bbP, MIH_C_MARK_T *dataP) -{ - //----------------------------------------------------------------------------- - MIH_C_CHOICE_decode(bbP, &dataP->choice); - - switch (dataP->choice) { - case 0: - MIH_C_BITMAP8_decode(bbP, &dataP->_union.dscp_mask); - break; - - case 1: - MIH_C_BITMAP24_decode(bbP, &dataP->_union.flow_label_mask); - break; - - default: - printf("[MIH_C] ERROR NO KNOWN VALUE FOR DECODING CHOICE OF MIH_C_MARK_T %d\n", dataP->choice); - } -} -//----------------------------------------------------------------------------- -unsigned int MIH_C_QOS2String(MIH_C_QOS_T *dataP, char* bufP) -{ - //----------------------------------------------------------------------------- - unsigned int buffer_index = 0; - - switch (dataP->choice) { - case 0: - buffer_index += sprintf(&bufP[buffer_index], "MAX_DELAY = "); - buffer_index += MIH_C_MAX_DELAY2String(&dataP->_union.mark_qos.max_delay, &bufP[buffer_index]); - - buffer_index += sprintf(&bufP[buffer_index], "BITRATE = "); - buffer_index += MIH_C_BITRATE2String(&dataP->_union.mark_qos.bitrate, &bufP[buffer_index]); - - buffer_index += sprintf(&bufP[buffer_index], "JITTER = "); - buffer_index += MIH_C_JITTER2String(&dataP->_union.mark_qos.jitter, &bufP[buffer_index]); - - buffer_index += sprintf(&bufP[buffer_index], "PKT_LOSS_RATE = "); - buffer_index += MIH_C_PKT_LOSS_RATE2String(&dataP->_union.mark_qos.pkt_loss, &bufP[buffer_index]); - break; - - case 1: - buffer_index += sprintf(&bufP[buffer_index], "COS = "); - buffer_index += MIH_C_COS2String(&dataP->_union.cos, &bufP[buffer_index]); - break; - - default: - buffer_index += sprintf(&bufP[buffer_index], "QOS UNINITIALIZED "); - } - - return buffer_index; -} -//----------------------------------------------------------------------------- -void MIH_C_QOS_encode(Bit_Buffer_t* bbP, MIH_C_QOS_T *dataP) -{ - //----------------------------------------------------------------------------- - MIH_C_CHOICE_encode(bbP, &dataP->choice); - - switch (dataP->choice) { - case 0: - MIH_C_MAX_DELAY_encode(bbP, &dataP->_union.mark_qos.max_delay); - MIH_C_BITRATE_encode(bbP, &dataP->_union.mark_qos.bitrate); - MIH_C_JITTER_encode(bbP, &dataP->_union.mark_qos.jitter); - MIH_C_PKT_LOSS_RATE_encode(bbP, &dataP->_union.mark_qos.pkt_loss); - break; - - case 1: - MIH_C_COS_encode(bbP, &dataP->_union.cos); - break; - - default: - printf("[MIH_C] ERROR NO KNOWN VALUE FOR ENCODING CHOICE OF MIH_C_QOS_T %d\n", dataP->choice); - } -} -//----------------------------------------------------------------------------- -void MIH_C_QOS_decode(Bit_Buffer_t* bbP, MIH_C_QOS_T *dataP) -{ - //----------------------------------------------------------------------------- - MIH_C_CHOICE_decode(bbP, &dataP->choice); - - switch (dataP->choice) { - case 0: - MIH_C_MAX_DELAY_decode(bbP, &dataP->_union.mark_qos.max_delay); - MIH_C_BITRATE_decode(bbP, &dataP->_union.mark_qos.bitrate); - MIH_C_JITTER_decode(bbP, &dataP->_union.mark_qos.jitter); - MIH_C_PKT_LOSS_RATE_decode(bbP, &dataP->_union.mark_qos.pkt_loss); - break; - - case 1: - MIH_C_COS_decode(bbP, &dataP->_union.cos); - break; - - default: - printf("[MIH_C] ERROR NO KNOWN VALUE FOR DECODING CHOICE OF MIH_C_QOS_T %d\n", dataP->choice); - } -} -//----------------------------------------------------------------------------- -unsigned int MIH_C_RESOURCE_DESC2String(MIH_C_RESOURCE_DESC_T *dataP, char* bufP) -{ - //----------------------------------------------------------------------------- - unsigned int buffer_index = 0; - - buffer_index += sprintf(&bufP[buffer_index], "LINK_ID = "); - buffer_index += MIH_C_LINK_ID2String(&dataP->link_id, &bufP[buffer_index]); - buffer_index += sprintf(&bufP[buffer_index], "\nFLOW_ID = "); - buffer_index += MIH_C_FLOW_ID2String(&dataP->flow_id, &bufP[buffer_index]); - - switch (dataP->choice_link_data_rate) { - case 0: - buffer_index += sprintf(&bufP[buffer_index], "\nLINK_DATA_RATE = NULL"); - break; - - case 1: - buffer_index += sprintf(&bufP[buffer_index], "\nLINK_DATA_RATE = "); - buffer_index += MIH_C_LINK_DATA_RATE2String(&dataP->_union_link_data_rate.link_data_rate, &bufP[buffer_index]); - break; - - default: - buffer_index += sprintf(&bufP[buffer_index], "\nLINK_DATA_RATE UNINITIALIZED "); - } - - switch (dataP->choice_qos) { - case 0: - buffer_index += sprintf(&bufP[buffer_index], "\nQOS = NULL"); - break; - - case 1: - buffer_index += sprintf(&bufP[buffer_index], "\nQOS = "); - buffer_index += MIH_C_QOS2String(&dataP->_union_qos.qos, &bufP[buffer_index]); - break; - - default: - buffer_index += sprintf(&bufP[buffer_index], "\nQOS UNINITIALIZED "); - } - - switch (dataP->choice_jumbo_enable) { - case 0: - buffer_index += sprintf(&bufP[buffer_index], "\nJUMBO_ENABLE = NULL"); - break; - - case 1: - buffer_index += sprintf(&bufP[buffer_index], "\nJUMBO_ENABLE = "); - buffer_index += MIH_C_JUMBO_ENABLE2String(&dataP->_union_jumbo_enable.jumbo_enable, &bufP[buffer_index]); - break; - - default: - buffer_index += sprintf(&bufP[buffer_index], "\nJUMBO_ENABLE UNINITIALIZED "); - } - - switch (dataP->choice_multicast_enable) { - case 0: - buffer_index += sprintf(&bufP[buffer_index], "\nMULTICAST_ENABLE = NULL"); - break; - - case 1: - buffer_index += sprintf(&bufP[buffer_index], "\nMULTICAST_ENABLE = "); - buffer_index += MIH_C_MULTICAST_ENABLE2String(&dataP->_union_multicast_enable.multicast_enable, &bufP[buffer_index]); - break; - - default: - buffer_index += sprintf(&bufP[buffer_index], "\nMULTICAST_ENABLE UNINITIALIZED "); - } - - return buffer_index; -} -//----------------------------------------------------------------------------- -void MIH_C_RESOURCE_DESC_encode(Bit_Buffer_t* bbP, MIH_C_RESOURCE_DESC_T *dataP) -{ - //----------------------------------------------------------------------------- - MIH_C_LINK_ID_encode(bbP, &dataP->link_id); - MIH_C_FLOW_ID_encode(bbP, &dataP->flow_id); - - MIH_C_CHOICE_encode(bbP, &dataP->choice_link_data_rate); - - switch (dataP->choice_link_data_rate) { - case 0: - break; - - case 1: - MIH_C_LINK_DATA_RATE_encode(bbP, &dataP->_union_link_data_rate.link_data_rate); - break; - - default: - printf("[MIH_C] ERROR NO KNOWN VALUE FOR ENCODING CHOICE choice_link_data_rate OF MIH_C_RESOURCE_DESC_T %d\n", dataP->choice_link_data_rate); - } - - MIH_C_CHOICE_encode(bbP, &dataP->choice_qos); - - switch (dataP->choice_qos) { - case 0: - break; - - case 1: - MIH_C_QOS_encode(bbP, &dataP->_union_qos.qos); - break; - - default: - printf("[MIH_C] ERROR NO KNOWN VALUE FOR ENCODING CHOICE choice_qos OF MIH_C_RESOURCE_DESC_T %d\n", dataP->choice_qos); - } - - MIH_C_CHOICE_encode(bbP, &dataP->choice_jumbo_enable); - - switch (dataP->choice_jumbo_enable) { - case 0: - break; - - case 1: - MIH_C_JUMBO_ENABLE_encode(bbP, &dataP->_union_jumbo_enable.jumbo_enable); - break; - - default: - printf("[MIH_C] ERROR NO KNOWN VALUE FOR ENCODING CHOICE choice_jumbo_enable OF MIH_C_RESOURCE_DESC_T %d\n", dataP->choice_jumbo_enable); - } - - MIH_C_CHOICE_encode(bbP, &dataP->choice_multicast_enable); - - switch (dataP->choice_multicast_enable) { - case 0: - break; - - case 1: - MIH_C_MULTICAST_ENABLE_encode(bbP, &dataP->_union_multicast_enable.multicast_enable); - break; - - default: - printf("[MIH_C] ERROR NO KNOWN VALUE FOR ENCODING CHOICE choice_multicast_enable OF MIH_C_RESOURCE_DESC_T %d\n", dataP->choice_multicast_enable); - } -} -//----------------------------------------------------------------------------- -void MIH_C_RESOURCE_DESC_decode(Bit_Buffer_t* bbP, MIH_C_RESOURCE_DESC_T *dataP) -{ - //----------------------------------------------------------------------------- - MIH_C_LINK_ID_decode(bbP, &dataP->link_id); - MIH_C_FLOW_ID_decode(bbP, &dataP->flow_id); - - MIH_C_CHOICE_decode(bbP, &dataP->choice_link_data_rate); - - switch (dataP->choice_link_data_rate) { - case 0: - break; - - case 1: - MIH_C_LINK_DATA_RATE_decode(bbP, &dataP->_union_link_data_rate.link_data_rate); - break; - - default: - printf("[MIH_C] ERROR NO KNOWN VALUE FOR DECODING CHOICE choice_link_data_rate OF MIH_C_RESOURCE_DESC_T %d\n", dataP->choice_link_data_rate); - } - - MIH_C_CHOICE_decode(bbP, &dataP->choice_qos); - - switch (dataP->choice_qos) { - case 0: - break; - - case 1: - MIH_C_QOS_decode(bbP, &dataP->_union_qos.qos); - break; - - default: - printf("[MIH_C] ERROR NO KNOWN VALUE FOR DECODING CHOICE choice_qos OF MIH_C_RESOURCE_DESC_T %d\n", dataP->choice_qos); - } - - MIH_C_CHOICE_decode(bbP, &dataP->choice_jumbo_enable); - - switch (dataP->choice_jumbo_enable) { - case 0: - break; - - case 1: - MIH_C_JUMBO_ENABLE_decode(bbP, &dataP->_union_jumbo_enable.jumbo_enable); - break; - - default: - printf("[MIH_C] ERROR NO KNOWN VALUE FOR DECODING CHOICE choice_jumbo_enable OF MIH_C_RESOURCE_DESC_T %d\n", dataP->choice_jumbo_enable); - } - - MIH_C_CHOICE_decode(bbP, &dataP->choice_multicast_enable); - - switch (dataP->choice_multicast_enable) { - case 0: - break; - - case 1: - MIH_C_MULTICAST_ENABLE_decode(bbP, &dataP->_union_multicast_enable.multicast_enable); - break; - - default: - printf("[MIH_C] ERROR NO KNOWN VALUE FOR DECODING CHOICE choice_multicast_enable OF MIH_C_RESOURCE_DESC_T %d\n", dataP->choice_multicast_enable); - } -} -//----------------------------------------------------------------------------- -unsigned int MIH_C_FLOW_ATTRIBUTE2String(MIH_C_FLOW_ATTRIBUTE_T *dataP, char* bufP) -{ - //----------------------------------------------------------------------------- - unsigned int buffer_index = 0; - - switch (dataP->choice_multicast_enable) { - case 0: - buffer_index += sprintf(&bufP[buffer_index], "MULTICAST_ENABLE = NULL"); - break; - - case 1: - buffer_index += sprintf(&bufP[buffer_index], "MULTICAST_ENABLE = "); - buffer_index += MIH_C_MULTICAST_ENABLE2String(&dataP->_union_multicast_enable.multicast_enable, &bufP[buffer_index]); - break; - - default: - buffer_index += sprintf(&bufP[buffer_index], "MULTICAST_ENABLE UNINITIALIZED "); - } - - switch (dataP->choice_mark_qos) { - case 0: - buffer_index += sprintf(&bufP[buffer_index], "\nMARK_QOS = NULL"); - break; - - case 1: - buffer_index += sprintf(&bufP[buffer_index], "\nMARK = "); - buffer_index += MIH_C_MARK2String(&dataP->_union_mark_qos.mark_qos.mark, &bufP[buffer_index]); - buffer_index += sprintf(&bufP[buffer_index], "\nQOS = "); - buffer_index += MIH_C_QOS2String(&dataP->_union_mark_qos.mark_qos.qos, &bufP[buffer_index]); - break; - - default: - buffer_index += sprintf(&bufP[buffer_index], "\nMARK_QOS UNINITIALIZED "); - } - - switch (dataP->choice_mark_drop_eligibility) { - case 0: - buffer_index += sprintf(&bufP[buffer_index], "\nMARK_DROP_ELIGIBILITY = NULL"); - break; - - case 1: - buffer_index += sprintf(&bufP[buffer_index], "\nMARK = "); - buffer_index += MIH_C_MARK2String(&dataP->_union_mark_drop_eligibility.mark_drop_eligibility.mark, &bufP[buffer_index]); - buffer_index += sprintf(&bufP[buffer_index], "\nDROP_ELIGIBILITY = "); - buffer_index += MIH_C_DROP_ELIGIBILITY2String(&dataP->_union_mark_drop_eligibility.mark_drop_eligibility.drop_eligibility, &bufP[buffer_index]); - break; - - default: - buffer_index += sprintf(&bufP[buffer_index], "\nMARK_DROP_ELIGIBILITY UNINITIALIZED "); - } - - return buffer_index; -} -//----------------------------------------------------------------------------- -void MIH_C_FLOW_ATTRIBUTE_encode(Bit_Buffer_t* bbP, MIH_C_FLOW_ATTRIBUTE_T *dataP) -{ - //----------------------------------------------------------------------------- - MIH_C_FLOW_ID_encode(bbP, &dataP->flow_id); - - MIH_C_CHOICE_encode(bbP, &dataP->choice_multicast_enable); - - switch (dataP->choice_multicast_enable) { - case 0: - break; - - case 1: - MIH_C_MULTICAST_ENABLE_encode(bbP, &dataP->_union_multicast_enable.multicast_enable); - break; - - default: - printf("[MIH_C] ERROR NO KNOWN VALUE FOR ENCODING CHOICE choice_multicast_enable OF MIH_C_FLOW_ATTRIBUTE_T %d\n", dataP->choice_multicast_enable); - } - - MIH_C_CHOICE_encode(bbP, &dataP->choice_mark_qos); - - switch (dataP->choice_mark_qos) { - case 0: - break; - - case 1: - MIH_C_MARK_encode(bbP, &dataP->_union_mark_qos.mark_qos.mark); - MIH_C_QOS_encode(bbP, &dataP->_union_mark_qos.mark_qos.qos); - break; - - default: - printf("[MIH_C] ERROR NO KNOWN VALUE FOR ENCODING CHOICE choice_mark_qos OF MIH_C_FLOW_ATTRIBUTE_T %d\n", dataP->choice_mark_qos); - } - - MIH_C_CHOICE_encode(bbP, &dataP->choice_mark_drop_eligibility); - - switch (dataP->choice_mark_drop_eligibility) { - case 0: - break; - - case 1: - MIH_C_MARK_encode(bbP, &dataP->_union_mark_drop_eligibility.mark_drop_eligibility.mark); - MIH_C_DROP_ELIGIBILITY_encode(bbP, &dataP->_union_mark_drop_eligibility.mark_drop_eligibility.drop_eligibility); - break; - - default: - printf("[MIH_C] ERROR NO KNOWN VALUE FOR ENCODING CHOICE choice_mark_drop_eligibility OF MIH_C_FLOW_ATTRIBUTE_T %d\n", dataP->choice_mark_drop_eligibility); - } -} -//----------------------------------------------------------------------------- -void MIH_C_FLOW_ATTRIBUTE_decode(Bit_Buffer_t* bbP, MIH_C_FLOW_ATTRIBUTE_T *dataP) -{ - //----------------------------------------------------------------------------- - MIH_C_FLOW_ID_decode(bbP, &dataP->flow_id); - - MIH_C_CHOICE_decode(bbP, &dataP->choice_multicast_enable); - - switch (dataP->choice_multicast_enable) { - case 0: - break; - - case 1: - MIH_C_MULTICAST_ENABLE_decode(bbP, &dataP->_union_multicast_enable.multicast_enable); - break; - - default: - printf("[MIH_C] ERROR NO KNOWN VALUE FOR DECODING CHOICE choice_multicast_enable OF MIH_C_FLOW_ATTRIBUTE_T %d\n", dataP->choice_multicast_enable); - } - - MIH_C_CHOICE_decode(bbP, &dataP->choice_mark_qos); - - switch (dataP->choice_mark_qos) { - case 0: - break; - - case 1: - MIH_C_MARK_decode(bbP, &dataP->_union_mark_qos.mark_qos.mark); - MIH_C_QOS_decode(bbP, &dataP->_union_mark_qos.mark_qos.qos); - break; - - default: - printf("[MIH_C] ERROR NO KNOWN VALUE FOR DECODING CHOICE choice_mark_qos OF MIH_C_FLOW_ATTRIBUTE_T %d\n", dataP->choice_mark_qos); - } - - MIH_C_CHOICE_decode(bbP, &dataP->choice_mark_drop_eligibility); - - switch (dataP->choice_mark_drop_eligibility) { - case 0: - break; - - case 1: - MIH_C_MARK_decode(bbP, &dataP->_union_mark_drop_eligibility.mark_drop_eligibility.mark); - MIH_C_DROP_ELIGIBILITY_decode(bbP, &dataP->_union_mark_drop_eligibility.mark_drop_eligibility.drop_eligibility); - break; - - default: - printf("[MIH_C] ERROR NO KNOWN VALUE FOR DECODING CHOICE choice_mark_drop_eligibility OF MIH_C_FLOW_ATTRIBUTE_T %d\n", dataP->choice_mark_drop_eligibility); - } -} -//----------------------------------------------------------------------------- -unsigned int MIH_C_LINK_AC_PARAM2String(MIH_C_LINK_AC_PARAM_T *dataP, char* bufP) -{ - //----------------------------------------------------------------------------- - unsigned int buffer_index = 0; - - switch (dataP->choice) { - case 0: - buffer_index += sprintf(&bufP[buffer_index], "NULL"); - break; - - case 1: - buffer_index += sprintf(&bufP[buffer_index], "FLOW_ATTRIBUTE="); - buffer_index += MIH_C_FLOW_ATTRIBUTE2String(&dataP->_union.flow_attribute, &bufP[buffer_index]); - break; - - case 2: - buffer_index += sprintf(&bufP[buffer_index], "RESOURCE_DESC="); - buffer_index += MIH_C_RESOURCE_DESC2String(&dataP->_union.resource_desc, &bufP[buffer_index]); - break; - - default: - buffer_index += sprintf(&bufP[buffer_index], "UNINITIALIZED "); - } - - return buffer_index; -} -//----------------------------------------------------------------------------- -void MIH_C_LINK_AC_PARAM_encode(Bit_Buffer_t* bbP, MIH_C_LINK_AC_PARAM_T *dataP) -{ - //----------------------------------------------------------------------------- - MIH_C_CHOICE_encode(bbP, &dataP->choice); - - switch (dataP->choice) { - case 0: - break; - - case 1: - MIH_C_FLOW_ATTRIBUTE_encode(bbP, &dataP->_union.flow_attribute); - break; - - case 2: - MIH_C_RESOURCE_DESC_encode(bbP, &dataP->_union.resource_desc); - break; - - default: - printf("[MIH_C] ERROR NO KNOWN VALUE FOR ENCODING CHOICE OF MIH_C_LINK_AC_PARAM_T %d\n", dataP->choice); - } -} -//----------------------------------------------------------------------------- -void MIH_C_LINK_AC_PARAM_decode(Bit_Buffer_t* bbP, MIH_C_LINK_AC_PARAM_T *dataP) -{ - //----------------------------------------------------------------------------- - MIH_C_CHOICE_decode(bbP, &dataP->choice); - - switch (dataP->choice) { - case 0: - break; - - case 1: - MIH_C_FLOW_ATTRIBUTE_decode(bbP, &dataP->_union.flow_attribute); - break; - - case 2: - MIH_C_RESOURCE_DESC_decode(bbP, &dataP->_union.resource_desc); - break; - - default: - printf("[MIH_C] ERROR NO KNOWN VALUE FOR DECODING CHOICE OF MIH_C_LINK_AC_PARAM_T %d\n", dataP->choice); - } -} - -#endif diff --git a/openair3/RAL-LTE/INTERFACE-802.21/C/MIH_C_bit_buffer.c b/openair3/RAL-LTE/INTERFACE-802.21/C/MIH_C_bit_buffer.c deleted file mode 100755 index 1c91e0d429..0000000000 --- a/openair3/RAL-LTE/INTERFACE-802.21/C/MIH_C_bit_buffer.c +++ /dev/null @@ -1,528 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ - -#define MIH_C_INTERFACE -#define MRALLTEINT_BIT_BUFFER_C -//----------------------------------------------------------------------------- -#include -#include -#include -#include -#include -//----------------------------------------------------------------------------- -#include "MIH_C_bit_buffer.h" -//----------------------------------------------------------------------------- -Bit_Buffer_t* new_BitBuffer_0(void) -//----------------------------------------------------------------------------- -{ - Bit_Buffer_t* bb = malloc(sizeof(Bit_Buffer_t)); - bb->m_buffer_allocated_by_this = BIT_BUFFER_FALSE; - bb->m_buffer = 0; - bb->m_byte_position = 0; - bb->m_bit_mod_8_position = 0; - bb->m_capacity = 0; - bb->m_limit = 0; - return bb; -} -//----------------------------------------------------------------------------- -Bit_Buffer_t* new_BitBuffer_1(unsigned int capacityP) -//----------------------------------------------------------------------------- -{ - Bit_Buffer_t* bb = malloc(sizeof(Bit_Buffer_t)); - - bb->m_buffer_allocated_by_this = BIT_BUFFER_TRUE; - bb->m_buffer = malloc(capacityP); - memset(bb->m_buffer, 0, capacityP); - bb->m_byte_position = 0; - bb->m_bit_mod_8_position = 0; - bb->m_capacity = capacityP; - bb->m_limit = 0; - return bb; -} - -//----------------------------------------------------------------------------- -Bit_Buffer_t* new_BitBuffer_2(unsigned char* bufferP, unsigned int capacityP) -//----------------------------------------------------------------------------- -{ - Bit_Buffer_t* bb = malloc(sizeof(Bit_Buffer_t)); - bb->m_buffer_allocated_by_this = BIT_BUFFER_FALSE; - bb->m_buffer = bufferP; - bb->m_byte_position = 0; - bb->m_bit_mod_8_position = 0; - bb->m_limit = 0; - bb->m_capacity = capacityP; - return bb; -} - -//----------------------------------------------------------------------------- -void BitBuffer_wrap(Bit_Buffer_t* bbP, unsigned char* bufferP, unsigned int capacityP) -//----------------------------------------------------------------------------- -{ - if ((bbP->m_buffer != 0) && (bbP->m_buffer != bufferP)) { - free(bbP->m_buffer); - } - - bbP->m_buffer_allocated_by_this = BIT_BUFFER_FALSE; - bbP->m_buffer = bufferP; - bbP->m_byte_position = 0; - bbP->m_bit_mod_8_position = 0; - bbP->m_limit = capacityP; - bbP->m_capacity = capacityP; -} -//----------------------------------------------------------------------------- -u_int32_t BitBuffer_read32(Bit_Buffer_t* bbP) -//----------------------------------------------------------------------------- -{ - return (u_int32_t)(BitBuffer_read(bbP, 32)); -} -//----------------------------------------------------------------------------- -u_int32_t BitBuffer_read32littleendian(Bit_Buffer_t* bbP) -//----------------------------------------------------------------------------- -{ - return (u_int32_t)(ntohl(BitBuffer_read(bbP,32))); -} -//----------------------------------------------------------------------------- -u_int16_t BitBuffer_read16(Bit_Buffer_t* bbP) -//----------------------------------------------------------------------------- -{ - return (u_int16_t)(BitBuffer_read(bbP,16)); -} -//----------------------------------------------------------------------------- -u_int16_t BitBuffer_read16littleendian(Bit_Buffer_t* bbP) -//----------------------------------------------------------------------------- -{ - return (u_int16_t)(ntohs((u_int16_t)(BitBuffer_read(bbP, 16)))); -} -//----------------------------------------------------------------------------- -unsigned char BitBuffer_read8(Bit_Buffer_t* bbP) -//----------------------------------------------------------------------------- -{ - - return (u_int8_t)(BitBuffer_read(bbP,8)); -} -//----------------------------------------------------------------------------- -u_int8_t BitBuffer_readBool(Bit_Buffer_t* bbP) -//----------------------------------------------------------------------------- -{ - return (u_int8_t)(BitBuffer_read(bbP,1)); -} -//----------------------------------------------------------------------------- -u_int32_t BitBuffer_read(Bit_Buffer_t* bbP, const unsigned int nb_bitsP) -//----------------------------------------------------------------------------- -{ - u_int64_t data_l = 0; - u_int32_t mask = 0xFFFFFFFFL; - u_int32_t bit_index_l = bbP->m_bit_mod_8_position; - int32_t bit_length_l = nb_bitsP; - u_int32_t byte_index_l = bbP->m_byte_position; - u_int32_t rotate_l = 0; - - //cout << dec << "BitBuffer_read(" << nb_bitsP << ")"<< endl; - if (BitBuffer_isCheckReadOverflowOK(bbP, nb_bitsP)) { - if (nb_bitsP > (sizeof(unsigned long)*8)) { - printf("[MIH_C] ERROR BitBuffer_read nb bits too large - must be <= sizeof(long int)*8"); - } else { - do { - data_l = data_l << 8; - data_l = data_l | (unsigned long long int)(bbP->m_buffer[byte_index_l++]); - //cout << hex << "data_l= " << data_l << endl; - bit_length_l -= (8- bit_index_l); - bit_index_l = 0; - rotate_l += 8; - } while (bit_length_l > 0); - - //cout << dec << "data_l rotated >> by " << rotate_l - bbP->m_bit_mod_8_position - nb_bitsP << " bits " << endl; - //cout << hex << "data_l masked >> by " << (mask >> (sizeof(unsigned long)*8 - nb_bitsP)) << endl; - data_l = (data_l >> (rotate_l - bbP->m_bit_mod_8_position - nb_bitsP)) & - (mask >> (sizeof(unsigned long)*8 - nb_bitsP)); - bbP->m_bit_mod_8_position = (bbP->m_bit_mod_8_position + nb_bitsP) % 8; - - if (bbP->m_bit_mod_8_position == 0) { - bbP->m_byte_position = byte_index_l; - } else { - bbP->m_byte_position = byte_index_l - 1; - } - } - - return (u_int32_t)(data_l); - } - - return (u_int32_t)(data_l); -} -//----------------------------------------------------------------------------- -u_int32_t BitBuffer_readlittleendian(Bit_Buffer_t* bbP, const unsigned int nb_bitsP) -//----------------------------------------------------------------------------- -{ - if (nb_bitsP > 24) { - return ntohl(BitBuffer_read(bbP,nb_bitsP)); - } else if (nb_bitsP > 16) { - return ntohl(BitBuffer_read(bbP,nb_bitsP) << 8); - } else if (nb_bitsP > 8) { - return ntohl(BitBuffer_read(bbP,nb_bitsP) << 16); - } else { - return ntohl(BitBuffer_read(bbP,nb_bitsP) << 24); - } -} -//----------------------------------------------------------------------------- -void BitBuffer_readMem(Bit_Buffer_t* bbP, u_int8_t* destP, unsigned int nb_bytesP) -//----------------------------------------------------------------------------- -{ - assert (bbP->m_bit_mod_8_position == 0); // TO DO - - if (BitBuffer_isCheckReadOverflowOK(bbP,nb_bytesP *8)) { - memcpy(destP, &bbP->m_buffer[bbP->m_byte_position], nb_bytesP); - bbP->m_byte_position += nb_bytesP; - } -} - -//----------------------------------------------------------------------------- -void BitBuffer_write32(Bit_Buffer_t* bbP, u_int32_t valueP) -//----------------------------------------------------------------------------- -{ - if (BitBuffer_isCheckWriteOverflowOK(bbP, sizeof(u_int32_t)*8)) { - BitBuffer_write8(bbP,(u_int8_t)(valueP >> 24)); - BitBuffer_write8(bbP,(u_int8_t)(valueP >> 16)); - BitBuffer_write8(bbP,(u_int8_t)(valueP >> 8)); - BitBuffer_write8(bbP,(u_int8_t)(valueP)); - } -} -//----------------------------------------------------------------------------- -void BitBuffer_write32littleendian(Bit_Buffer_t* bbP, u_int32_t valueP) -//----------------------------------------------------------------------------- -{ - if (BitBuffer_isCheckWriteOverflowOK(bbP,sizeof(u_int32_t)*8)) { - BitBuffer_write8(bbP,(u_int8_t)(valueP)); - BitBuffer_write8(bbP,(u_int8_t)(valueP >> 8)); - BitBuffer_write8(bbP,(u_int8_t)(valueP >> 16)); - BitBuffer_write8(bbP,(u_int8_t)(valueP >> 24)); - } -} -//----------------------------------------------------------------------------- -void BitBuffer_write16littleendian(Bit_Buffer_t* bbP, u_int16_t valueP) -//----------------------------------------------------------------------------- -{ - if (BitBuffer_isCheckWriteOverflowOK(bbP,sizeof(u_int16_t)*8)) { - BitBuffer_write8(bbP,(u_int8_t)(valueP)); - BitBuffer_write8(bbP,(u_int8_t)(valueP >> 8)); - } -} -//----------------------------------------------------------------------------- -void BitBuffer_write16(Bit_Buffer_t* bbP, u_int16_t valueP) -//----------------------------------------------------------------------------- -{ - if (BitBuffer_isCheckWriteOverflowOK(bbP,sizeof(u_int16_t)*8)) { - BitBuffer_write8(bbP,(u_int8_t)(valueP >> 8)); - BitBuffer_write8(bbP,(u_int8_t)(valueP)); - } -} -//----------------------------------------------------------------------------- -void BitBuffer_write8(Bit_Buffer_t* bbP, u_int8_t valueP) -//----------------------------------------------------------------------------- -{ - if (BitBuffer_isCheckWriteOverflowOK(bbP,sizeof(u_int8_t)*8)) { - if (bbP->m_bit_mod_8_position == 0) { - bbP->m_buffer[bbP->m_byte_position++] = valueP; - } else { - bbP->m_buffer[bbP->m_byte_position] = (valueP >> bbP->m_bit_mod_8_position) | bbP->m_buffer[bbP->m_byte_position]; - bbP->m_byte_position++; - bbP->m_buffer[bbP->m_byte_position] = valueP << (8 - bbP->m_bit_mod_8_position); - } - } -} -//----------------------------------------------------------------------------- -void BitBuffer_writeBool(Bit_Buffer_t* bbP, u_int8_t valueP) -//----------------------------------------------------------------------------- -{ - if (BitBuffer_isCheckWriteOverflowOK(bbP,1)) { - if (valueP) { - BitBuffer_write8b(bbP,(u_int8_t)(0x01), 1); - } else { - BitBuffer_write8b(bbP,(u_int8_t)(0x00), 1); - } - } -} -//----------------------------------------------------------------------------- -void BitBuffer_writeMem(Bit_Buffer_t* bbP, u_int8_t* startP, unsigned int nb_bytesP) -//----------------------------------------------------------------------------- -{ - assert (bbP->m_bit_mod_8_position == 0); // TO DO - - if (BitBuffer_isCheckWriteOverflowOK(bbP,nb_bytesP *8)) { - memcpy(&bbP->m_buffer[bbP->m_byte_position], startP, nb_bytesP); - bbP->m_byte_position += nb_bytesP; - } -} -//----------------------------------------------------------------------------- -void BitBuffer_write8b(Bit_Buffer_t* bbP, u_int8_t valueP, unsigned int nb_bitsP) -//----------------------------------------------------------------------------- -{ - assert(nb_bitsP <= 8); - - if (nb_bitsP == 0) return; - - if (BitBuffer_isCheckWriteOverflowOK(bbP,nb_bitsP)) { - valueP = valueP & ((u_int8_t)(0xFF) >> (8 - nb_bitsP)); - - //std::cout << "BitBuffer_write char " << (u_int32_t)(valueP) << " " << nb_bitsP << " bits" << std::endl; - if (nb_bitsP > (sizeof(unsigned char)*8)) { - printf("[MIH_C] ERROR BitBuffer_write nb bits too large - must be <= sizeof(char)*8"); - } else { - if (bbP->m_bit_mod_8_position == 0) { - if (nb_bitsP == (sizeof(unsigned char)*8)) { - BitBuffer_write8(bbP, valueP); - } else { - bbP->m_buffer[bbP->m_byte_position] = valueP << (8 - nb_bitsP); - bbP->m_bit_mod_8_position += nb_bitsP; - } - } else { - bbP->m_buffer[bbP->m_byte_position] = ((valueP << (8 - nb_bitsP)) >> bbP->m_bit_mod_8_position) | bbP->m_buffer[bbP->m_byte_position]; - - if ((bbP->m_bit_mod_8_position + nb_bitsP)>= (sizeof(unsigned char)*8)) { - bbP->m_byte_position++; - bbP->m_buffer[bbP->m_byte_position] = valueP << (16 - bbP->m_bit_mod_8_position - nb_bitsP); - } - - bbP->m_bit_mod_8_position = (nb_bitsP + bbP->m_bit_mod_8_position) % (sizeof(unsigned char)*8); - } - } - } -} -//----------------------------------------------------------------------------- -void BitBuffer_writelittleendian(Bit_Buffer_t* bbP, u_int8_t valueP, unsigned int nb_bitsP) -//----------------------------------------------------------------------------- -{ - BitBuffer_write8b(bbP,valueP, nb_bitsP); -} -//----------------------------------------------------------------------------- -void BitBuffer_write16b(Bit_Buffer_t* bbP, u_int16_t valueP, unsigned int nb_bitsP) -//----------------------------------------------------------------------------- -{ - assert(nb_bitsP <= 16); - - if (BitBuffer_isCheckWriteOverflowOK(bbP,nb_bitsP)) { - valueP = valueP & ((u_int16_t)(0xFFFF) >> (16 - nb_bitsP)); - - if (nb_bitsP > (sizeof (u_int16_t)*8)) { - printf("[MIH_C] ERROR BitBuffer_write nb bits too large - must be <= sizeof (short)*8"); - } else { - if (nb_bitsP > 8) { - //BitBuffer_write8b(bbP,(u_int8_t)(valueP >> (8 - (16-nb_bitsP))), nb_bitsP - 8); - BitBuffer_write8b(bbP,(u_int8_t)(valueP >> 8), nb_bitsP - 8); - BitBuffer_write8(bbP,(u_int8_t)(valueP)); - } else if (nb_bitsP > 0) { - BitBuffer_write8b(bbP,(u_int8_t)(valueP), nb_bitsP); - } - } - } -} -//----------------------------------------------------------------------------- -void BitBuffer_writelittleendian16b(Bit_Buffer_t* bbP, u_int16_t valueP, unsigned int nb_bitsP) -//----------------------------------------------------------------------------- -{ - assert(nb_bitsP <= 16); - - if (BitBuffer_isCheckWriteOverflowOK(bbP,nb_bitsP)) { - valueP = valueP & ((u_int16_t)(0xFFFF) >> (16 - nb_bitsP)); - - if (nb_bitsP > (sizeof (u_int16_t)*8)) { - printf("[MIH_C] ERROR BitBuffer_write nb bits too large - must be <= sizeof (short)*8"); - } else { - if (nb_bitsP > 8) { - BitBuffer_write8(bbP,(u_int8_t)(valueP)); - //BitBuffer_write8b(bbP,(u_int8_t)(valueP >> (8 - (16-nb_bitsP))), nb_bitsP - 8); - BitBuffer_write8b(bbP,(u_int8_t)(valueP >> 8), nb_bitsP - 8); - } else if (nb_bitsP > 0) { - BitBuffer_write8b(bbP,(u_int8_t)(valueP), nb_bitsP); - } - } - } -} -//----------------------------------------------------------------------------- -void BitBuffer_write32b(Bit_Buffer_t* bbP, u_int32_t valueP, unsigned int nb_bitsP) -//----------------------------------------------------------------------------- -{ - assert(nb_bitsP <= 32); - - if (BitBuffer_isCheckWriteOverflowOK(bbP,nb_bitsP)) { - valueP = valueP & ((u_int32_t)(0xFFFFFFFF) >> (32 - nb_bitsP)); - - if (nb_bitsP > (sizeof (u_int32_t)*8)) { - printf("[MIH_C] ERROR BitBuffer_write nb bits too large - must be <= sizeof (int)*8"); - } else { - if (nb_bitsP > 24) { - //BitBuffer_write8b(bbP,(u_int8_t)(valueP >> (24 - (32-nb_bitsP))), nb_bitsP - 24); - BitBuffer_write8b(bbP,(u_int8_t)(valueP >> 24), nb_bitsP - 24); - BitBuffer_write8(bbP,(u_int8_t)(valueP >> 16)); - BitBuffer_write8(bbP,(u_int8_t)(valueP >> 8)); - BitBuffer_write8(bbP,(u_int8_t)(valueP)); - } else if (nb_bitsP > 16) { - //BitBuffer_write8b(bbP,(u_int8_t)(valueP >> (16 - (24-nb_bitsP))), nb_bitsP - 16); - BitBuffer_write8b(bbP,(u_int8_t)(valueP >> 16), nb_bitsP - 16); - BitBuffer_write8(bbP,(u_int8_t)(valueP >> 8)); - BitBuffer_write8(bbP,(u_int8_t)(valueP)); - } else if (nb_bitsP > 8) { - //BitBuffer_write8b(bbP,(u_int8_t)(valueP >> (8 - (16-nb_bitsP))), nb_bitsP - 8); - BitBuffer_write8b(bbP,(u_int8_t)(valueP >> 8), nb_bitsP - 8); - BitBuffer_write8(bbP,(u_int8_t)(valueP)); - } else if (nb_bitsP > 0) { - BitBuffer_write8b(bbP,(u_int8_t)(valueP), nb_bitsP); - } - } - } -} -//----------------------------------------------------------------------------- -void BitBuffer_writelittleendian32b(Bit_Buffer_t* bbP, u_int32_t valueP, unsigned int nb_bitsP) -//----------------------------------------------------------------------------- -{ - assert(nb_bitsP <= 32); - - if (BitBuffer_isCheckWriteOverflowOK(bbP,nb_bitsP)) { - valueP = valueP & ((u_int32_t)(0xFFFFFFFF) >> (32 - nb_bitsP)); - - if (nb_bitsP > (sizeof (u_int32_t)*8)) { - printf("[MIH_C] ERROR BitBuffer_write nb bits too large - must be <= sizeof (int)*8"); - } else { - if (nb_bitsP > 24) { - BitBuffer_write8(bbP,(u_int8_t)(valueP)); - BitBuffer_write8(bbP,(u_int8_t)(valueP >> 8)); - BitBuffer_write8(bbP,(u_int8_t)(valueP >> 16)); - BitBuffer_write8b(bbP,(u_int8_t)(valueP >> 24), nb_bitsP - 24); - //BitBuffer_write8b(bbP,(u_int8_t)(valueP >> (24 - (32-nb_bitsP))), nb_bitsP - 24); - } else if (nb_bitsP > 16) { - BitBuffer_write8(bbP,(u_int8_t)(valueP)); - BitBuffer_write8(bbP,(u_int8_t)(valueP >> 8)); - BitBuffer_write8b(bbP,(u_int8_t)(valueP >> 16), nb_bitsP - 16); - //BitBuffer_write8b(bbP,(u_int8_t)(valueP >> (16 - (24-nb_bitsP))), nb_bitsP - 16); - } else if (nb_bitsP > 8) { - BitBuffer_write8(bbP,(u_int8_t)(valueP)); - BitBuffer_write8b(bbP,(u_int8_t)(valueP >> 8), nb_bitsP - 8); - //BitBuffer_write8b(bbP,(u_int8_t)(valueP >> (8 - (16-nb_bitsP))), nb_bitsP - 8); - } else if (nb_bitsP > 0) { - BitBuffer_write8b(bbP,(u_int8_t)(valueP), nb_bitsP); - } - } - } -} -//----------------------------------------------------------------------------- -void BitBuffer_rewind(Bit_Buffer_t* bbP) -//----------------------------------------------------------------------------- -{ - bbP->m_byte_position = 0; - bbP->m_bit_mod_8_position = 0; -} -//----------------------------------------------------------------------------- -void BitBuffer_rewind_to(Bit_Buffer_t* bbP, unsigned int byte_positionP) -//----------------------------------------------------------------------------- -{ - bbP->m_byte_position = byte_positionP; - bbP->m_bit_mod_8_position = 0; -} -//----------------------------------------------------------------------------- -void BitBuffer_write_shift_last_n_bytes_right(Bit_Buffer_t* bbP, unsigned int nb_bytes_to_shiftP, unsigned int hole_sizeP) -//----------------------------------------------------------------------------- -{ - unsigned int index = 0; - - if (nb_bytes_to_shiftP >= bbP->m_byte_position) return; - - if ((bbP->m_byte_position + hole_sizeP) > bbP->m_capacity) return; - - while (index < nb_bytes_to_shiftP) { - bbP->m_buffer[bbP->m_byte_position -1 - index + hole_sizeP] = bbP->m_buffer[bbP->m_byte_position -1 - index]; - index += 1; - } -} -//----------------------------------------------------------------------------- -void BitBuffer_reset(Bit_Buffer_t* bbP) -//----------------------------------------------------------------------------- -{ - BitBuffer_rewind(bbP); - bbP->m_limit = 0; - - if (bbP->m_buffer != 0) { - memset(bbP->m_buffer, 0, bbP->m_capacity); - } -} -//----------------------------------------------------------------------------- -unsigned char* BitBuffer_getNextFreePosition(Bit_Buffer_t* bbP) -//----------------------------------------------------------------------------- -{ - return &(bbP->m_buffer[bbP->m_byte_position]); -} -//----------------------------------------------------------------------------- -unsigned int BitBuffer_getPosition(Bit_Buffer_t* bbP) -//----------------------------------------------------------------------------- -{ - return (bbP->m_byte_position + (bbP->m_bit_mod_8_position +7)/8); -} -//----------------------------------------------------------------------------- -void BitBuffer_addLimitOffset(Bit_Buffer_t* bbP, unsigned int offsetP) -//----------------------------------------------------------------------------- -{ - bbP->m_limit += offsetP; -} -//----------------------------------------------------------------------------- -unsigned int BitBuffer_getNumFreeBytes(Bit_Buffer_t* bbP) -//----------------------------------------------------------------------------- -{ - return bbP->m_capacity - (bbP->m_byte_position + (bbP->m_bit_mod_8_position +7)/8); -} -//----------------------------------------------------------------------------- -u_int8_t BitBuffer_isCheckWriteOverflowOK(Bit_Buffer_t* bbP, unsigned int nb_bitsP) -//----------------------------------------------------------------------------- -{ - if ((bbP->m_byte_position + (bbP->m_bit_mod_8_position + nb_bitsP+7)/8) < bbP->m_capacity) { - return BIT_BUFFER_TRUE; - } else { - //throw std::out_of_range("Exception in class BitBuffer cannot write more, no more space available"); - return BIT_BUFFER_FALSE; - } -} -//----------------------------------------------------------------------------- -u_int8_t BitBuffer_isCheckReadOverflowOK(Bit_Buffer_t* bbP, unsigned int nb_bitsP) -//----------------------------------------------------------------------------- -{ - if ((bbP->m_byte_position + (bbP->m_bit_mod_8_position + nb_bitsP)/8) <= bbP->m_limit) { - return BIT_BUFFER_TRUE; - } else { - //throw std::out_of_range("Exception in class BitBuffer cannot read more - end of buffer reached"); - return BIT_BUFFER_FALSE; - } -} -//----------------------------------------------------------------------------- -void free_BitBuffer(Bit_Buffer_t* bbP) -//----------------------------------------------------------------------------- -{ - //std::cout << "~BitBuffer()" << std::endl; - if (bbP->m_buffer_allocated_by_this == BIT_BUFFER_TRUE) { - free(bbP->m_buffer); - } - - free(bbP); -} diff --git a/openair3/RAL-LTE/INTERFACE-802.21/C/MIH_C_header_codec.c b/openair3/RAL-LTE/INTERFACE-802.21/C/MIH_C_header_codec.c deleted file mode 100755 index 58f94b474b..0000000000 --- a/openair3/RAL-LTE/INTERFACE-802.21/C/MIH_C_header_codec.c +++ /dev/null @@ -1,163 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ - -#define MIH_C_INTERFACE -#define MIH_C_HEADER_CODEC_C -#include "MIH_C_header_codec.h" -//----------------------------------------------------------------------------- -int MIH_C_HEADER2String(MIH_C_HEADER_T* headerP, char* bufP) -{ - //----------------------------------------------------------------------------- - unsigned int buffer_index = 0; - buffer_index += sprintf(&bufP[buffer_index], "HEADER.version: "); - buffer_index += MIH_C_VERSION2String(&headerP->version, &bufP[buffer_index]); - buffer_index += sprintf(&bufP[buffer_index], "\nHEADER.ack_req: "); - buffer_index += MIH_C_ACK_REQ2String(&headerP->ack_req, &bufP[buffer_index]); - buffer_index += sprintf(&bufP[buffer_index], "\nHEADER.ack_rsp: "); - buffer_index += MIH_C_ACK_RSP2String(&headerP->ack_rsp, &bufP[buffer_index]); - buffer_index += sprintf(&bufP[buffer_index], "\nHEADER.uir: "); - buffer_index += MIH_C_UIR2String(&headerP->uir, &bufP[buffer_index]); - buffer_index += sprintf(&bufP[buffer_index], "\nHEADER.more_fragment: "); - buffer_index += MIH_C_M2String(&headerP->more_fragment, &bufP[buffer_index]); - buffer_index += sprintf(&bufP[buffer_index], "\nHEADER.fragment_number: "); - buffer_index += MIH_C_FN2String(&headerP->more_fragment, &bufP[buffer_index]); - buffer_index += sprintf(&bufP[buffer_index], "\nHEADER.service_identifier: "); - buffer_index += MIH_C_SID2String(&headerP->service_identifier, &bufP[buffer_index]); - buffer_index += sprintf(&bufP[buffer_index], "\nHEADER.operation_code: "); - buffer_index += MIH_C_OPCODE2String(&headerP->operation_code, &bufP[buffer_index]); - buffer_index += sprintf(&bufP[buffer_index], "\nHEADER.action_identifier: "); - buffer_index += MIH_C_AID2String(&headerP->action_identifier, &bufP[buffer_index]); - buffer_index += sprintf(&bufP[buffer_index], "\nHEADER.transaction_id: "); - buffer_index += MIH_C_TRANSACTION_ID2String(&headerP->transaction_id, &bufP[buffer_index]); - buffer_index += sprintf(&bufP[buffer_index], "\nHEADER.payload_length: "); - buffer_index += MIH_C_VARIABLE_PAYLOAD_LENGTH2String(&headerP->payload_length, &bufP[buffer_index]); - buffer_index += sprintf(&bufP[buffer_index], "\n"); - return buffer_index; -} -//----------------------------------------------------------------------------- -int MIH_C_Link_Header_Encode(Bit_Buffer_t* bbP, MIH_C_HEADER_T* headerP) -{ - //----------------------------------------------------------------------------- - u_int8_t reserved = 0; - int status ; - - if ((bbP != NULL) && (headerP != NULL)) { - status = MIH_HEADER_ENCODE_OK; - BitBuffer_write8b (bbP, headerP->version, 4); - BitBuffer_writeBool (bbP, headerP->ack_req); - BitBuffer_writeBool (bbP, headerP->ack_rsp); - BitBuffer_writeBool (bbP, headerP->uir); - BitBuffer_writeBool (bbP, headerP->more_fragment); - BitBuffer_write8b (bbP, headerP->fragment_number, 7); - BitBuffer_writeBool (bbP, reserved); - BitBuffer_write8b (bbP, headerP->service_identifier, 4); - BitBuffer_write8b (bbP, headerP->operation_code, 2); - BitBuffer_write16b (bbP, headerP->action_identifier, 10); - BitBuffer_write8b (bbP, reserved, 4); - BitBuffer_write16b (bbP, headerP->transaction_id, 12); - BitBuffer_write16 (bbP, headerP->payload_length); - /*DEBUG_ENCODE("%s: version 0x%02X\n", __FUNCTION__, headerP->version); - DEBUG_ENCODE("%s: ack_req 0x%02X\n", __FUNCTION__, headerP->ack_req); - DEBUG_ENCODE("%s: ack_rsp 0x%02X\n", __FUNCTION__, headerP->ack_rsp); - DEBUG_ENCODE("%s: uir 0x%02X\n", __FUNCTION__, headerP->uir); - DEBUG_ENCODE("%s: more_fragment 0x%02X\n", __FUNCTION__, headerP->more_fragment); - DEBUG_ENCODE("%s: reserved 0x%02X\n", __FUNCTION__, reserved); - DEBUG_ENCODE("%s: service_identifier 0x%02X\n", __FUNCTION__, headerP->service_identifier); - DEBUG_ENCODE("%s: operation_code 0x%02X\n", __FUNCTION__, headerP->operation_code); - DEBUG_ENCODE("%s: action_identifier 0x%04X\n", __FUNCTION__, headerP->action_identifier); - DEBUG_ENCODE("%s: reserved 0x%02X\n", __FUNCTION__, reserved); - DEBUG_ENCODE("%s: transaction_id 0x%04X\n", __FUNCTION__, headerP->transaction_id); - DEBUG_ENCODE("%s: payload_length 0x%02X\n", __FUNCTION__, headerP->payload_length);*/ - - // may be check for validity of header field -> set MIH_HEADER_DECODE_FAILURE - if (BitBuffer_isCheckWriteOverflowOK(bbP, 0) == BIT_BUFFER_FALSE) { - memset(headerP, 0, sizeof(MIH_C_HEADER_T)); - return MIH_HEADER_ENCODE_TOO_SHORT; - } else if (status == MIH_HEADER_ENCODE_FAILURE) { - memset(headerP, 0, sizeof(MIH_C_HEADER_T)); - return MIH_HEADER_ENCODE_FAILURE; - } else { - return MIH_HEADER_ENCODE_OK; - } - } else { - memset(headerP, 0, sizeof(MIH_C_HEADER_T)); - return MIH_HEADER_ENCODE_BAD_PARAMETER; - } -} -//----------------------------------------------------------------------------- -int MIH_C_Link_Header_Decode(Bit_Buffer_t* bbP, MIH_C_HEADER_T* headerP) -{ - //----------------------------------------------------------------------------- - u_int8_t reserved ; - int status ; - - if ((bbP != NULL) && (headerP != NULL)) { - status = MIH_HEADER_DECODE_OK; - headerP->version = (MIH_C_VERSION_T)BitBuffer_read(bbP, 4); - headerP->ack_req = (MIH_C_ACK_REQ_T)BitBuffer_readBool(bbP); - headerP->ack_rsp = (MIH_C_ACK_RSP_T)BitBuffer_readBool(bbP); - headerP->uir = (MIH_C_UIR_T)BitBuffer_readBool(bbP); - headerP->more_fragment = (MIH_C_M_T)BitBuffer_readBool(bbP); - headerP->fragment_number = (MIH_C_FN_T)BitBuffer_read(bbP, 7); - reserved = BitBuffer_readBool(bbP); - headerP->service_identifier = (MIH_C_SID_T) BitBuffer_read(bbP, 4); - headerP->operation_code = (MIH_C_OPCODE_T) BitBuffer_read(bbP, 2); - headerP->action_identifier = (MIH_C_AID_T) BitBuffer_read(bbP, 10); - reserved = BitBuffer_read(bbP, 4); - headerP->transaction_id = (MIH_C_TRANSACTION_ID_T) BitBuffer_read(bbP, 12); - headerP->payload_length = (MIH_C_VARIABLE_PAYLOAD_LENGTH_T)BitBuffer_read16(bbP); - - /*DEBUG_DECODE("%s: version 0x%02X\n", __FUNCTION__, headerP->version); - DEBUG_DECODE("%s: ack_req 0x%02X\n", __FUNCTION__, headerP->ack_req); - DEBUG_DECODE("%s: ack_rsp 0x%02X\n", __FUNCTION__, headerP->ack_rsp); - DEBUG_DECODE("%s: uir 0x%02X\n", __FUNCTION__, headerP->uir); - DEBUG_DECODE("%s: more_fragment 0x%02X\n", __FUNCTION__, headerP->more_fragment); - DEBUG_DECODE("%s: reserved 0x%02X\n", __FUNCTION__, reserved); - DEBUG_DECODE("%s: service_identifier 0x%02X\n", __FUNCTION__, headerP->service_identifier); - DEBUG_DECODE("%s: operation_code 0x%02X\n", __FUNCTION__, headerP->operation_code); - DEBUG_DECODE("%s: action_identifier 0x%04X\n", __FUNCTION__, headerP->action_identifier); - DEBUG_DECODE("%s: reserved 0x%02X\n", __FUNCTION__, reserved); - DEBUG_DECODE("%s: transaction_id 0x%04X\n", __FUNCTION__, headerP->transaction_id); - DEBUG_DECODE("%s: payload_length 0x%02X\n", __FUNCTION__, headerP->payload_length);*/ - // may be check for validity of header field -> set MIH_HEADER_DECODE_FAILURE - - if (BitBuffer_isCheckReadOverflowOK(bbP, 0) == BIT_BUFFER_FALSE) { - memset(headerP, 0, sizeof(MIH_C_HEADER_T)); - return MIH_HEADER_DECODE_TOO_SHORT; - } else if (status == MIH_HEADER_DECODE_FAILURE) { - memset(headerP, 0, sizeof(MIH_C_HEADER_T)); - return MIH_HEADER_DECODE_FAILURE; - } else { - return MIH_HEADER_DECODE_OK; - } - } else { - memset(headerP, 0, sizeof(MIH_C_HEADER_T)); - return MIH_HEADER_DECODE_BAD_PARAMETER; - } -} diff --git a/openair3/RAL-LTE/INTERFACE-802.21/C/MIH_C_log.c b/openair3/RAL-LTE/INTERFACE-802.21/C/MIH_C_log.c deleted file mode 100755 index 3720d306c2..0000000000 --- a/openair3/RAL-LTE/INTERFACE-802.21/C/MIH_C_log.c +++ /dev/null @@ -1,190 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ - -#define MIH_C_INTERFACE -#define MIH_C_LOG_C -/* -//----------------------------------------------------------------------------- -#include "MIH_C_log.h" -//----------------------------------------------------------------------------- -#define LOG_BUFF_SIZE 2048 -static char g_log_buffer_time[24]; -static char g_log_buffer[LOG_BUFF_SIZE]; -static int g_bypass_header; -//----------------------------------------------------------------------------- -char* getTimeStamp4Log() -//----------------------------------------------------------------------------- -{ - int len; - struct timespec time_spec; - unsigned int time_now_micros; - unsigned int time_now_s; - clock_gettime (CLOCK_REALTIME, &time_spec); - time_now_s = (unsigned int) time_spec.tv_sec % 3600; - time_now_micros = (unsigned int) time_spec.tv_nsec/1000; - //len=snprintf(g_log_buffer_time,24, "%06d:%06d", time_now_s, time_now_micros); - len=snprintf(g_log_buffer_time,24, "%03d:%03d", time_now_s, time_now_micros); - return g_log_buffer_time; -} -//----------------------------------------------------------------------------- -int is_newline( char *str, int size){ -//----------------------------------------------------------------------------- - int i; - for ( i = 0; i < size; i++ ) { - if ( str[i] == '\n' ) - return 1; - } - // if we get all the way to here, there must not have been a newline! - return 0; -} - -// Initialize logging system -int MIH_C_log_init(unsigned int log_outputP) { -//----------------------------------------------------------------------------- - g_mih_c_log_output = log_outputP; - - - g_log_level2string[LOG_EMERG] = "EMERG"; - g_log_level2string[LOG_ALERT] = "ALERT"; - g_log_level2string[LOG_CRIT] = "CRIT "; - g_log_level2string[LOG_ERR] = "ERR "; - g_log_level2string[LOG_WARNING] = "WARN "; - g_log_level2string[LOG_NOTICE] = "NOTCE"; - g_log_level2string[LOG_INFO] = "INFO "; - g_log_level2string[LOG_DEBUG] = "DEBUG"; - - g_bypass_header = 0; - - switch (g_mih_c_log_output){ - case LOG_TO_CONSOLE: - printf("***** mRAL V%s logging \n\n",MIH_C_VERSION); - break; - case LOG_TO_FILE: - g_mih_c_log_file = fopen(MIH_C_LOGFILE_NAME,"w"); //start over new file - if (g_mih_c_log_file == NULL){ - perror ("MIH_C_log_init - error opening file"); - exit(1); - } - fprintf(g_mih_c_log_file, "***** V%s starting logging \n\n",MIH_C_VERSION); - fflush(g_mih_c_log_file); - break; - case LOG_TO_SYSTEM: - openlog(MIH_C_SYSLOG_NAME, LOG_PID, LOG_LOCAL7); - syslog(LOG_NOTICE, "***** V%s starting logging \n\n",MIH_C_VERSION); - break; - default: - printf("MIH_C_log_init: log_outputP error %d", log_outputP); - } - return 0; -} - -//----------------------------------------------------------------------------- -// Log messages according to user settings -int MIH_C_log_record(int levelP, const char * log_msgP, ...) { -//----------------------------------------------------------------------------- - struct timespec time_spec; - unsigned int time_now_micros; - unsigned int time_now_s; - va_list log_ap; - int len; - - - switch (g_mih_c_log_output){ - case LOG_TO_CONSOLE: - va_start(log_ap, log_msgP); - len = vsnprintf(g_log_buffer, LOG_BUFF_SIZE-1, log_msgP, log_ap); - va_end(log_ap); - if (g_bypass_header == 0) { - clock_gettime (CLOCK_REALTIME, &time_spec); - time_now_s = (unsigned int) time_spec.tv_sec; - time_now_micros = (unsigned int) time_spec.tv_nsec/1000; - printf("[%06d:%06d][%s][%s] ", time_now_s, time_now_micros, MIH_C_SYSLOG_NAME, g_log_level2string[levelP]); - } - printf("%s",g_log_buffer); - fflush(stdout); - fflush(stderr); - if (is_newline(g_log_buffer,len) == 0 ){ - g_bypass_header = 1; - } else { - g_bypass_header = 0; - } - break; - case LOG_TO_FILE: - va_start(log_ap, log_msgP); - len = vsnprintf(g_log_buffer, LOG_BUFF_SIZE-1, log_msgP, log_ap); - va_end(log_ap); - if (g_bypass_header == 0) { - clock_gettime (CLOCK_REALTIME, &time_spec); - time_now_s = (unsigned int) time_spec.tv_sec; - time_now_micros = (unsigned int) time_spec.tv_nsec/1000; - fprintf(g_mih_c_log_file, "[%06d:%06d][%s][%s] ", time_now_s, time_now_micros, MIH_C_SYSLOG_NAME, g_log_level2string[levelP]); - } - fprintf(g_mih_c_log_file, "%s", g_log_buffer); - fflush(g_mih_c_log_file); - if (is_newline(g_log_buffer,len) == 0 ){ - g_bypass_header = 1; - } else { - g_bypass_header = 0; - } - break; - case LOG_TO_SYSTEM: - va_start(log_ap, log_msgP); - syslog(levelP, log_msgP, log_ap); - va_end(log_ap); - return 0; - break; - default: - printf("MIH_C_log_record: level error %d", levelP); - } - return 0; -} -//----------------------------------------------------------------------------- -// Close logging system -int MIH_C_log_exit(void) { -//----------------------------------------------------------------------------- - switch (g_mih_c_log_output){ - case LOG_TO_CONSOLE: - printf("***** stopping logging \n\n"); - break; - case LOG_TO_FILE: - fprintf(g_mih_c_log_file, "***** stopping logging \n\n"); - fflush(g_mih_c_log_file); - fclose(g_mih_c_log_file); - break; - case LOG_TO_SYSTEM: - syslog(LOG_NOTICE, "***** stopping logging \n\n"); - closelog(); - break; - default: - printf("MIH_C_log_exit: output unrecognized error %d", g_mih_c_log_output); - } - return 0; -} -*/ - diff --git a/openair3/RAL-LTE/INTERFACE-802.21/C/MIH_C_msg_codec.c b/openair3/RAL-LTE/INTERFACE-802.21/C/MIH_C_msg_codec.c deleted file mode 100755 index 27597d6a49..0000000000 --- a/openair3/RAL-LTE/INTERFACE-802.21/C/MIH_C_msg_codec.c +++ /dev/null @@ -1,1201 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ - -#define MIH_C_INTERFACE -#define MIH_C_MSG_CODEC_C -#include "MIH_C_msg_codec.h" - -//----------------------------------------------------------------------------- -MIH_C_TRANSACTION_ID_T MIH_C_get_new_transaction_id(void) -{ - //----------------------------------------------------------------------------- - // no need now for mutex - g_transaction_id_generator += 1; - return g_transaction_id_generator; -} -//----------------------------------------------------------------------------- -int MIH_C_Link_Message_Decode_Link_Capability_Discover_request(Bit_Buffer_t* bbP, MIH_C_Message_Link_Capability_Discover_request_t *messageP) -{ - //----------------------------------------------------------------------------- - int status; - MIH_C_TLV_TYPE_T tlv; - u_int16_t length; - - // SOURCE - MIH_C_TLV_TYPE_decode(bbP, &tlv); - MIH_C_LIST_LENGTH_decode(bbP, &length); - - if (tlv == MIH_C_TLV_SOURCE_MIHF_ID) { - MIH_C_MIHF_ID_decode(bbP, &messageP->source); - } else { - printf("[MIH_C] ERROR %s() -> MIH_MESSAGE_DECODE_FAILURE @ MIH_C_TLV_SOURCE_MIHF_ID\n", __FUNCTION__); - return MIH_MESSAGE_DECODE_FAILURE; - } - - // DESTINATION - MIH_C_TLV_TYPE_decode(bbP, &tlv); - MIH_C_LIST_LENGTH_decode(bbP, &length); - - if (tlv == MIH_C_TLV_DESTINATION_MIHF_ID) { - MIH_C_MIHF_ID_decode(bbP, &messageP->destination); - } else { - printf("[MIH_C] ERROR %s() -> MIH_MESSAGE_DECODE_FAILURE @ MIH_C_TLV_DESTINATION_MIHF_ID\n", __FUNCTION__); - return MIH_MESSAGE_DECODE_FAILURE; - } - - status = MIH_C_Link_Primitive_Decode_Link_Capability_Discover_request(bbP, &messageP->primitive); - - if (status == MIH_PRIMITIVE_DECODE_OK) { - printf("[MIH_C] %s() -> MIH_MESSAGE_DECODE_OK \n", __FUNCTION__); - return MIH_MESSAGE_DECODE_OK; - } - - if (status == MIH_PRIMITIVE_DECODE_TOO_SHORT) { - printf("[MIH_C] ERROR %s() -> MIH_MESSAGE_DECODE_TOO_SHORT \n", __FUNCTION__); - return MIH_MESSAGE_DECODE_TOO_SHORT; - } - - if (status == MIH_PRIMITIVE_DECODE_FAILURE) { - printf("[MIH_C] ERROR %s() -> MIH_MESSAGE_DECODE_FAILURE \n", __FUNCTION__); - return MIH_MESSAGE_DECODE_FAILURE; - } - - if (status == MIH_PRIMITIVE_DECODE_BAD_PARAMETER) { - printf("[MIH_C] ERROR %s() -> MIH_MESSAGE_DECODE_BAD_PARAMETER \n", __FUNCTION__); - return MIH_MESSAGE_DECODE_BAD_PARAMETER; - } - - return status; -} -//----------------------------------------------------------------------------- -int MIH_C_Link_Message_Link_Capability_Discover_request2String(MIH_C_Message_Link_Capability_Discover_request_t *messageP, char* bufP) -{ - //----------------------------------------------------------------------------- - - unsigned int buffer_index = 0; - buffer_index += sprintf(&bufP[buffer_index], "\n--------------------------------------------------------------------------------------\n"); - buffer_index += sprintf(&bufP[buffer_index], "- MESSAGE Link_Capability_Discover.request -\n"); - buffer_index += sprintf(&bufP[buffer_index], "--------------------------------------------------------------------------------------\n"); - buffer_index += MIH_C_HEADER2String(&messageP->header, &bufP[buffer_index]); - buffer_index += sprintf(&bufP[buffer_index], "-------------------------------\n"); - buffer_index += sprintf(&bufP[buffer_index], "SOURCE: "); - buffer_index += MIH_C_MIHF_ID2String(&messageP->source, &bufP[buffer_index]); - buffer_index += sprintf(&bufP[buffer_index], "\nDESTINATION: "); - buffer_index += MIH_C_MIHF_ID2String(&messageP->destination, &bufP[buffer_index]); - buffer_index += sprintf(&bufP[buffer_index], "\n"); - buffer_index += MIH_C_Link_Primitive_Link_Capability_Discover_request2String(&messageP->primitive, &bufP[buffer_index]); - buffer_index += sprintf(&bufP[buffer_index], "--------------------------------------------------------------------------------------\n"); - return buffer_index; -} -//----------------------------------------------------------------------------- -int MIH_C_Link_Message_Decode_Link_Event_Subscribe_request(Bit_Buffer_t* bbP, MIH_C_Message_Link_Event_Subscribe_request_t *messageP) -{ - //----------------------------------------------------------------------------- - int status; - MIH_C_TLV_TYPE_T tlv; - u_int16_t length; - - MIH_C_TLV_TYPE_decode(bbP, &tlv); - MIH_C_LIST_LENGTH_decode(bbP, &length); - - if (tlv == MIH_C_TLV_SOURCE_MIHF_ID) { - MIH_C_MIHF_ID_decode(bbP, &messageP->source); - } else { - printf("[MIH_C] ERROR %s() -> MIH_MESSAGE_DECODE_FAILURE @ MIH_C_TLV_SOURCE_MIHF_ID\n", __FUNCTION__); - return MIH_MESSAGE_DECODE_FAILURE; - } - - - MIH_C_TLV_TYPE_decode(bbP, &tlv); - MIH_C_LIST_LENGTH_decode(bbP, &length); - - if (tlv == MIH_C_TLV_DESTINATION_MIHF_ID) { - MIH_C_MIHF_ID_decode(bbP, &messageP->destination); - } else { - printf("[MIH_C] ERROR %s() -> MIH_MESSAGE_DECODE_FAILURE @ MIH_C_TLV_DESTINATION_MIHF_ID\n", __FUNCTION__); - return MIH_MESSAGE_DECODE_FAILURE; - } - - status = MIH_C_Link_Primitive_Decode_Link_Event_Subscribe_request(bbP, &messageP->primitive); - - if (status == MIH_PRIMITIVE_DECODE_OK) { - printf("[MIH_C] %s() -> MIH_MESSAGE_DECODE_OK \n", __FUNCTION__); - return MIH_MESSAGE_DECODE_OK; - } - - if (status == MIH_PRIMITIVE_DECODE_TOO_SHORT) { - printf("[MIH_C] ERROR %s() -> MIH_MESSAGE_DECODE_TOO_SHORT \n", __FUNCTION__); - return MIH_MESSAGE_DECODE_TOO_SHORT; - } - - if (status == MIH_PRIMITIVE_DECODE_FAILURE) { - printf("[MIH_C] ERROR %s() -> MIH_MESSAGE_DECODE_FAILURE \n", __FUNCTION__); - return MIH_MESSAGE_DECODE_FAILURE; - } - - if (status == MIH_PRIMITIVE_DECODE_BAD_PARAMETER) { - printf("[MIH_C] ERROR %s() -> MIH_MESSAGE_DECODE_BAD_PARAMETER \n", __FUNCTION__); - return MIH_MESSAGE_DECODE_BAD_PARAMETER; - } - - return status; -} -//----------------------------------------------------------------------------- -int MIH_C_Link_Message_Link_Event_Subscribe_request2String(MIH_C_Message_Link_Event_Subscribe_request_t *messageP, char* bufP) -{ - //----------------------------------------------------------------------------- - - unsigned int buffer_index = 0; - buffer_index += sprintf(&bufP[buffer_index], "\n--------------------------------------------------------------------------------------\n"); - buffer_index += sprintf(&bufP[buffer_index], "- MESSAGE Link_Event_Subscribe.request -\n"); - buffer_index += sprintf(&bufP[buffer_index], "--------------------------------------------------------------------------------------\n"); - buffer_index += MIH_C_HEADER2String(&messageP->header, &bufP[buffer_index]); - buffer_index += sprintf(&bufP[buffer_index], "-------------------------------\n"); - buffer_index += sprintf(&bufP[buffer_index], "SOURCE: "); - buffer_index += MIH_C_MIHF_ID2String(&messageP->source, &bufP[buffer_index]); - buffer_index += sprintf(&bufP[buffer_index], "\nDESTINATION: "); - buffer_index += MIH_C_MIHF_ID2String(&messageP->destination, &bufP[buffer_index]); - buffer_index += sprintf(&bufP[buffer_index], "\n"); - buffer_index += MIH_C_Link_Primitive_Link_Event_Subscribe_request2String(&messageP->primitive, &bufP[buffer_index]); - buffer_index += sprintf(&bufP[buffer_index], "--------------------------------------------------------------------------------------\n"); - return buffer_index; -} -//----------------------------------------------------------------------------- -int MIH_C_Link_Message_Decode_Link_Event_Unsubscribe_request(Bit_Buffer_t* bbP, MIH_C_Message_Link_Event_Unsubscribe_request_t *messageP) -{ - //----------------------------------------------------------------------------- - int status; - MIH_C_TLV_TYPE_T tlv; - u_int16_t length; - - MIH_C_TLV_TYPE_decode(bbP, &tlv); - MIH_C_LIST_LENGTH_decode(bbP, &length); - - if (tlv == MIH_C_TLV_SOURCE_MIHF_ID) { - MIH_C_MIHF_ID_decode(bbP, &messageP->source); - } else { - printf("[MIH_C] ERROR %s() -> MIH_MESSAGE_DECODE_FAILURE @ MIH_C_TLV_SOURCE_MIHF_ID\n", __FUNCTION__); - return MIH_PRIMITIVE_DECODE_FAILURE; - } - - - MIH_C_TLV_TYPE_decode(bbP, &tlv); - MIH_C_LIST_LENGTH_decode(bbP, &length); - - if (tlv == MIH_C_TLV_DESTINATION_MIHF_ID) { - MIH_C_MIHF_ID_decode(bbP, &messageP->destination); - } else { - printf("[MIH_C] ERROR %s() -> MIH_MESSAGE_DECODE_FAILURE @ MIH_C_TLV_DESTINATION_MIHF_ID\n", __FUNCTION__); - return MIH_PRIMITIVE_DECODE_FAILURE; - } - - status = MIH_C_Link_Primitive_Decode_Link_Event_Unsubscribe_request(bbP, &messageP->primitive); - - if (status == MIH_PRIMITIVE_DECODE_OK) { - printf("[MIH_C] %s() -> MIH_MESSAGE_DECODE_OK \n", __FUNCTION__); - return MIH_MESSAGE_DECODE_OK; - } - - if (status == MIH_PRIMITIVE_DECODE_TOO_SHORT) { - printf("[MIH_C] ERROR %s() -> MIH_MESSAGE_DECODE_TOO_SHORT \n", __FUNCTION__); - return MIH_MESSAGE_DECODE_TOO_SHORT; - } - - if (status == MIH_PRIMITIVE_DECODE_FAILURE) { - printf("[MIH_C] ERROR %s() -> MIH_MESSAGE_DECODE_FAILURE \n", __FUNCTION__); - return MIH_MESSAGE_DECODE_FAILURE; - } - - if (status == MIH_PRIMITIVE_DECODE_BAD_PARAMETER) { - printf("[MIH_C] ERROR %s() -> MIH_MESSAGE_DECODE_BAD_PARAMETER \n", __FUNCTION__); - return MIH_MESSAGE_DECODE_BAD_PARAMETER; - } - - return status; -} -//----------------------------------------------------------------------------- -int MIH_C_Link_Message_Link_Event_Unsubscribe_request2String(MIH_C_Message_Link_Event_Unsubscribe_request_t *messageP, char* bufP) -{ - //----------------------------------------------------------------------------- - - unsigned int buffer_index = 0; - buffer_index += sprintf(&bufP[buffer_index], "\n--------------------------------------------------------------------------------------\n"); - buffer_index += sprintf(&bufP[buffer_index], "- MESSAGE Link_Event_Unsubscribe.request -\n"); - buffer_index += sprintf(&bufP[buffer_index], "--------------------------------------------------------------------------------------\n"); - buffer_index += MIH_C_HEADER2String(&messageP->header, &bufP[buffer_index]); - buffer_index += sprintf(&bufP[buffer_index], "-------------------------------\n"); - buffer_index += sprintf(&bufP[buffer_index], "SOURCE: "); - buffer_index += MIH_C_MIHF_ID2String(&messageP->source, &bufP[buffer_index]); - buffer_index += sprintf(&bufP[buffer_index], "\nDESTINATION: "); - buffer_index += MIH_C_MIHF_ID2String(&messageP->destination, &bufP[buffer_index]); - buffer_index += sprintf(&bufP[buffer_index], "\n"); - buffer_index += MIH_C_Link_Primitive_Link_Event_Unsubscribe_request2String(&messageP->primitive, &bufP[buffer_index]); - buffer_index += sprintf(&bufP[buffer_index], "--------------------------------------------------------------------------------------\n"); - return buffer_index; -} -//----------------------------------------------------------------------------- -int MIH_C_Link_Message_Decode_Link_Get_Parameters_request(Bit_Buffer_t* bbP, MIH_C_Message_Link_Get_Parameters_request_t *messageP) -{ - //----------------------------------------------------------------------------- - int status; - MIH_C_TLV_TYPE_T tlv; - u_int16_t length; - - MIH_C_TLV_TYPE_decode(bbP, &tlv); - MIH_C_LIST_LENGTH_decode(bbP, &length); - - if (tlv == MIH_C_TLV_SOURCE_MIHF_ID) { - MIH_C_MIHF_ID_decode(bbP, &messageP->source); - } else { - return MIH_PRIMITIVE_DECODE_FAILURE; - } - - - MIH_C_TLV_TYPE_decode(bbP, &tlv); - MIH_C_LIST_LENGTH_decode(bbP, &length); - - if (tlv == MIH_C_TLV_DESTINATION_MIHF_ID) { - MIH_C_MIHF_ID_decode(bbP, &messageP->destination); - } else { - return MIH_PRIMITIVE_DECODE_FAILURE; - } - - status = MIH_C_Link_Primitive_Decode_Link_Get_Parameters_request(bbP, &messageP->primitive); - - if (status == MIH_PRIMITIVE_DECODE_OK) { - return MIH_MESSAGE_DECODE_OK; - } - - if (status == MIH_PRIMITIVE_DECODE_TOO_SHORT) { - return MIH_MESSAGE_DECODE_TOO_SHORT; - } - - if (status == MIH_PRIMITIVE_DECODE_FAILURE) { - return MIH_MESSAGE_DECODE_FAILURE; - } - - if (status == MIH_PRIMITIVE_DECODE_BAD_PARAMETER) { - return MIH_MESSAGE_DECODE_BAD_PARAMETER; - } - - return status; -} -//----------------------------------------------------------------------------- -int MIH_C_Link_Message_Link_Get_Parameters_request2String(MIH_C_Message_Link_Get_Parameters_request_t *messageP, char* bufP) -{ - //----------------------------------------------------------------------------- - - unsigned int buffer_index = 0; - buffer_index += sprintf(&bufP[buffer_index], "\n--------------------------------------------------------------------------------------\n"); - buffer_index += sprintf(&bufP[buffer_index], "- MESSAGE Link_Get_Parameters.request -\n"); - buffer_index += sprintf(&bufP[buffer_index], "--------------------------------------------------------------------------------------\n"); - buffer_index += MIH_C_HEADER2String(&messageP->header, &bufP[buffer_index]); - buffer_index += sprintf(&bufP[buffer_index], "-------------------------------\n"); - buffer_index += sprintf(&bufP[buffer_index], "SOURCE: "); - buffer_index += MIH_C_MIHF_ID2String(&messageP->source, &bufP[buffer_index]); - buffer_index += sprintf(&bufP[buffer_index], "\nDESTINATION: "); - buffer_index += MIH_C_MIHF_ID2String(&messageP->destination, &bufP[buffer_index]); - buffer_index += sprintf(&bufP[buffer_index], "\n"); - buffer_index += MIH_C_Link_Primitive_Link_Get_Parameters_request2String(&messageP->primitive, &bufP[buffer_index]); - buffer_index += sprintf(&bufP[buffer_index], "--------------------------------------------------------------------------------------\n"); - return buffer_index; -} -//----------------------------------------------------------------------------- -int MIH_C_Link_Message_Decode_Link_Configure_Thresholds_request(Bit_Buffer_t* bbP, MIH_C_Message_Link_Configure_Thresholds_request_t *messageP) -{ - //----------------------------------------------------------------------------- - int status; - MIH_C_TLV_TYPE_T tlv; - u_int16_t length; - - MIH_C_TLV_TYPE_decode(bbP, &tlv); - MIH_C_LIST_LENGTH_decode(bbP, &length); - - if (tlv == MIH_C_TLV_SOURCE_MIHF_ID) { - MIH_C_MIHF_ID_decode(bbP, &messageP->source); - } else { - return MIH_PRIMITIVE_DECODE_FAILURE; - } - - - MIH_C_TLV_TYPE_decode(bbP, &tlv); - MIH_C_LIST_LENGTH_decode(bbP, &length); - - if (tlv == MIH_C_TLV_DESTINATION_MIHF_ID) { - MIH_C_MIHF_ID_decode(bbP, &messageP->destination); - } else { - return MIH_PRIMITIVE_DECODE_FAILURE; - } - - status = MIH_C_Link_Primitive_Decode_Link_Configure_Thresholds_request(bbP, &messageP->primitive); - - if (status == MIH_PRIMITIVE_DECODE_OK) { - return MIH_MESSAGE_DECODE_OK; - } - - if (status == MIH_PRIMITIVE_DECODE_TOO_SHORT) { - return MIH_MESSAGE_DECODE_TOO_SHORT; - } - - if (status == MIH_PRIMITIVE_DECODE_FAILURE) { - return MIH_MESSAGE_DECODE_FAILURE; - } - - if (status == MIH_PRIMITIVE_DECODE_BAD_PARAMETER) { - return MIH_MESSAGE_DECODE_BAD_PARAMETER; - } - - return status; -} -//----------------------------------------------------------------------------- -int MIH_C_Link_Message_Link_Configure_Thresholds_request2String(MIH_C_Message_Link_Configure_Thresholds_request_t *messageP, char* bufP) -{ - //----------------------------------------------------------------------------- - - unsigned int buffer_index = 0; - buffer_index += sprintf(&bufP[buffer_index], "\n--------------------------------------------------------------------------------------\n"); - buffer_index += sprintf(&bufP[buffer_index], "- MESSAGE Link_Configure_Threshold.request -\n"); - buffer_index += sprintf(&bufP[buffer_index], "--------------------------------------------------------------------------------------\n"); - buffer_index += MIH_C_HEADER2String(&messageP->header, &bufP[buffer_index]); - buffer_index += sprintf(&bufP[buffer_index], "-------------------------------\n"); - buffer_index += sprintf(&bufP[buffer_index], "SOURCE: "); - buffer_index += MIH_C_MIHF_ID2String(&messageP->source, &bufP[buffer_index]); - buffer_index += sprintf(&bufP[buffer_index], "\nDESTINATION: "); - buffer_index += MIH_C_MIHF_ID2String(&messageP->destination, &bufP[buffer_index]); - buffer_index += sprintf(&bufP[buffer_index], "\n"); - buffer_index += MIH_C_Link_Primitive_Link_Configure_Thresholds_request2String(&messageP->primitive, &bufP[buffer_index]); - buffer_index += sprintf(&bufP[buffer_index], "--------------------------------------------------------------------------------------\n"); - return buffer_index; -} -//----------------------------------------------------------------------------- -int MIH_C_Link_Message_Decode_Link_Action_request(Bit_Buffer_t* bbP, MIH_C_Message_Link_Action_request_t *messageP) -{ - //----------------------------------------------------------------------------- - int status; - MIH_C_TLV_TYPE_T tlv; - u_int16_t length; - - MIH_C_TLV_TYPE_decode(bbP, &tlv); - MIH_C_LIST_LENGTH_decode(bbP, &length); - - if (tlv == MIH_C_TLV_SOURCE_MIHF_ID) { - MIH_C_MIHF_ID_decode(bbP, &messageP->source); - } else { - return MIH_PRIMITIVE_DECODE_FAILURE; - } - - - MIH_C_TLV_TYPE_decode(bbP, &tlv); - MIH_C_LIST_LENGTH_decode(bbP, &length); - - if (tlv == MIH_C_TLV_DESTINATION_MIHF_ID) { - MIH_C_MIHF_ID_decode(bbP, &messageP->destination); - } else { - return MIH_PRIMITIVE_DECODE_FAILURE; - } - - status = MIH_C_Link_Primitive_Decode_Link_Action_request(bbP, &messageP->primitive); - - if (status == MIH_PRIMITIVE_DECODE_OK) { - return MIH_MESSAGE_DECODE_OK; - } - - if (status == MIH_PRIMITIVE_DECODE_TOO_SHORT) { - return MIH_MESSAGE_DECODE_TOO_SHORT; - } - - if (status == MIH_PRIMITIVE_DECODE_FAILURE) { - return MIH_MESSAGE_DECODE_FAILURE; - } - - if (status == MIH_PRIMITIVE_DECODE_BAD_PARAMETER) { - return MIH_MESSAGE_DECODE_BAD_PARAMETER; - } - - return status; -} -//----------------------------------------------------------------------------- -int MIH_C_Link_Message_Link_Action_request2String(MIH_C_Message_Link_Action_request_t *messageP, char* bufP) -{ - //----------------------------------------------------------------------------- - - unsigned int buffer_index = 0; - buffer_index += sprintf(&bufP[buffer_index], "\n--------------------------------------------------------------------------------------\n"); - buffer_index += sprintf(&bufP[buffer_index], "- MESSAGE Link_Action.request -\n"); - buffer_index += sprintf(&bufP[buffer_index], "--------------------------------------------------------------------------------------\n"); - buffer_index += MIH_C_HEADER2String(&messageP->header, &bufP[buffer_index]); - buffer_index += sprintf(&bufP[buffer_index], "-------------------------------\n"); - buffer_index += sprintf(&bufP[buffer_index], "SOURCE: "); - buffer_index += MIH_C_MIHF_ID2String(&messageP->source, &bufP[buffer_index]); - buffer_index += sprintf(&bufP[buffer_index], "\nDESTINATION: "); - buffer_index += MIH_C_MIHF_ID2String(&messageP->destination, &bufP[buffer_index]); - buffer_index += sprintf(&bufP[buffer_index], "\n"); - buffer_index += MIH_C_Link_Primitive_Link_Action_request2String(&messageP->primitive, &bufP[buffer_index]); - buffer_index += sprintf(&bufP[buffer_index], "--------------------------------------------------------------------------------------\n"); - return buffer_index; -} -#ifdef MIH_C_MEDIEVAL_EXTENSIONS -//----------------------------------------------------------------------------- -int MIH_C_Link_Message_Encode_Link_Register_indication(Bit_Buffer_t* bbP, MIH_C_Message_Link_Register_indication_t *messageP) -{ - //----------------------------------------------------------------------------- - unsigned int saved_byte_position; - unsigned int end_byte_position; - unsigned int hole_size; - MIH_C_TLV_TYPE_T tlv; - u_int16_t encode_length; - - BitBuffer_rewind(bbP); - bbP->m_byte_position = MSG_MIH_HEADER_SIZE_IN_BYTES; - - // TYPE - tlv = MIH_C_TLV_SOURCE_MIHF_ID; - MIH_C_TLV_TYPE_encode(bbP, &tlv); - - // VALUE - saved_byte_position = BitBuffer_getPosition(bbP); - MIH_C_MIHF_ID_encode(bbP, &messageP->source); - end_byte_position = BitBuffer_getPosition(bbP); - - // LENGTH - encode_length = end_byte_position - saved_byte_position; - hole_size = MIH_C_LIST_LENGTH_get_encode_num_bytes(encode_length); - BitBuffer_write_shift_last_n_bytes_right(bbP, encode_length, hole_size); - BitBuffer_rewind_to(bbP, saved_byte_position); - MIH_C_LIST_LENGTH_encode(bbP, encode_length); - BitBuffer_rewind_to(bbP, end_byte_position + hole_size); - - - // TYPE - tlv = MIH_C_TLV_DESTINATION_MIHF_ID; - MIH_C_TLV_TYPE_encode(bbP, &tlv); - - // VALUE - saved_byte_position = BitBuffer_getPosition(bbP); - MIH_C_MIHF_ID_encode(bbP, &messageP->destination); - end_byte_position = BitBuffer_getPosition(bbP); - - // LENGTH - encode_length = end_byte_position - saved_byte_position; - hole_size = MIH_C_LIST_LENGTH_get_encode_num_bytes(encode_length); - BitBuffer_write_shift_last_n_bytes_right(bbP, encode_length, hole_size); - BitBuffer_rewind_to(bbP, saved_byte_position); - MIH_C_LIST_LENGTH_encode(bbP, encode_length); - BitBuffer_rewind_to(bbP, end_byte_position + hole_size); - - MIH_C_Link_Primitive_Encode_Link_Register_indication(bbP, &messageP->primitive); - - saved_byte_position = BitBuffer_getPosition(bbP); - bbP->m_byte_position = 0; - messageP->header.payload_length = saved_byte_position - MSG_MIH_HEADER_SIZE_IN_BYTES; - - - MIH_C_Link_Header_Encode(bbP, &messageP->header); - - bbP->m_byte_position = saved_byte_position; - - return saved_byte_position; -} -#endif -//----------------------------------------------------------------------------- -int MIH_C_Link_Message_Encode_Link_Detected_indication(Bit_Buffer_t* bbP, MIH_C_Message_Link_Detected_indication_t *messageP) -{ - //----------------------------------------------------------------------------- - unsigned int saved_byte_position; - unsigned int end_byte_position; - unsigned int hole_size; - MIH_C_TLV_TYPE_T tlv; - u_int16_t encode_length; - - BitBuffer_rewind(bbP); - bbP->m_byte_position = MSG_MIH_HEADER_SIZE_IN_BYTES; - - // TYPE - tlv = MIH_C_TLV_SOURCE_MIHF_ID; - MIH_C_TLV_TYPE_encode(bbP, &tlv); - - // VALUE - saved_byte_position = BitBuffer_getPosition(bbP); - MIH_C_MIHF_ID_encode(bbP, &messageP->source); - end_byte_position = BitBuffer_getPosition(bbP); - - // LENGTH - encode_length = end_byte_position - saved_byte_position; - hole_size = MIH_C_LIST_LENGTH_get_encode_num_bytes(encode_length); - BitBuffer_write_shift_last_n_bytes_right(bbP, encode_length, hole_size); - BitBuffer_rewind_to(bbP, saved_byte_position); - MIH_C_LIST_LENGTH_encode(bbP, encode_length); - BitBuffer_rewind_to(bbP, end_byte_position + hole_size); - - - // TYPE - tlv = MIH_C_TLV_DESTINATION_MIHF_ID; - MIH_C_TLV_TYPE_encode(bbP, &tlv); - - // VALUE - saved_byte_position = BitBuffer_getPosition(bbP); - MIH_C_MIHF_ID_encode(bbP, &messageP->destination); - end_byte_position = BitBuffer_getPosition(bbP); - - // LENGTH - encode_length = end_byte_position - saved_byte_position; - hole_size = MIH_C_LIST_LENGTH_get_encode_num_bytes(encode_length); - BitBuffer_write_shift_last_n_bytes_right(bbP, encode_length, hole_size); - BitBuffer_rewind_to(bbP, saved_byte_position); - MIH_C_LIST_LENGTH_encode(bbP, encode_length); - BitBuffer_rewind_to(bbP, end_byte_position + hole_size); - - MIH_C_Link_Primitive_Encode_Link_Detected_indication(bbP, &messageP->primitive); - - saved_byte_position = BitBuffer_getPosition(bbP); - bbP->m_byte_position = 0; - messageP->header.payload_length = saved_byte_position - MSG_MIH_HEADER_SIZE_IN_BYTES; - - - MIH_C_Link_Header_Encode(bbP, &messageP->header); - - bbP->m_byte_position = saved_byte_position; - - return saved_byte_position; -} -//----------------------------------------------------------------------------- -int MIH_C_Link_Message_Encode_Link_Up_indication(Bit_Buffer_t* bbP, MIH_C_Message_Link_Up_indication_t *messageP) -{ - //----------------------------------------------------------------------------- - unsigned int saved_byte_position; - unsigned int end_byte_position; - unsigned int hole_size; - MIH_C_TLV_TYPE_T tlv; - u_int16_t encode_length; - - BitBuffer_rewind(bbP); - bbP->m_byte_position = MSG_MIH_HEADER_SIZE_IN_BYTES; - - // TYPE - tlv = MIH_C_TLV_SOURCE_MIHF_ID; - MIH_C_TLV_TYPE_encode(bbP, &tlv); - - // VALUE - saved_byte_position = BitBuffer_getPosition(bbP); - MIH_C_MIHF_ID_encode(bbP, &messageP->source); - end_byte_position = BitBuffer_getPosition(bbP); - - // LENGTH - encode_length = end_byte_position - saved_byte_position; - hole_size = MIH_C_LIST_LENGTH_get_encode_num_bytes(encode_length); - BitBuffer_write_shift_last_n_bytes_right(bbP, encode_length, hole_size); - BitBuffer_rewind_to(bbP, saved_byte_position); - MIH_C_LIST_LENGTH_encode(bbP, encode_length); - BitBuffer_rewind_to(bbP, end_byte_position + hole_size); - - - // TYPE - tlv = MIH_C_TLV_DESTINATION_MIHF_ID; - MIH_C_TLV_TYPE_encode(bbP, &tlv); - - // VALUE - saved_byte_position = BitBuffer_getPosition(bbP); - MIH_C_MIHF_ID_encode(bbP, &messageP->destination); - end_byte_position = BitBuffer_getPosition(bbP); - - // LENGTH - encode_length = end_byte_position - saved_byte_position; - hole_size = MIH_C_LIST_LENGTH_get_encode_num_bytes(encode_length); - BitBuffer_write_shift_last_n_bytes_right(bbP, encode_length, hole_size); - BitBuffer_rewind_to(bbP, saved_byte_position); - MIH_C_LIST_LENGTH_encode(bbP, encode_length); - BitBuffer_rewind_to(bbP, end_byte_position + hole_size); - - MIH_C_Link_Primitive_Encode_Link_Up_indication(bbP, &messageP->primitive); - - saved_byte_position = BitBuffer_getPosition(bbP); - bbP->m_byte_position = 0; - messageP->header.payload_length = saved_byte_position - MSG_MIH_HEADER_SIZE_IN_BYTES; - - - MIH_C_Link_Header_Encode(bbP, &messageP->header); - - bbP->m_byte_position = saved_byte_position; - - return saved_byte_position; -} -//----------------------------------------------------------------------------- -int MIH_C_Link_Message_Encode_Link_Parameters_Report_indication(Bit_Buffer_t* bbP, MIH_C_Message_Link_Parameters_Report_indication_t *messageP) -{ - //----------------------------------------------------------------------------- - unsigned int saved_byte_position; - unsigned int end_byte_position; - unsigned int hole_size; - MIH_C_TLV_TYPE_T tlv; - u_int16_t encode_length; - - BitBuffer_rewind(bbP); - bbP->m_byte_position = MSG_MIH_HEADER_SIZE_IN_BYTES; - - // TYPE - tlv = MIH_C_TLV_SOURCE_MIHF_ID; - MIH_C_TLV_TYPE_encode(bbP, &tlv); - - // VALUE - saved_byte_position = BitBuffer_getPosition(bbP); - MIH_C_MIHF_ID_encode(bbP, &messageP->source); - end_byte_position = BitBuffer_getPosition(bbP); - - // LENGTH - encode_length = end_byte_position - saved_byte_position; - hole_size = MIH_C_LIST_LENGTH_get_encode_num_bytes(encode_length); - BitBuffer_write_shift_last_n_bytes_right(bbP, encode_length, hole_size); - BitBuffer_rewind_to(bbP, saved_byte_position); - MIH_C_LIST_LENGTH_encode(bbP, encode_length); - BitBuffer_rewind_to(bbP, end_byte_position + hole_size); - - - // TYPE - tlv = MIH_C_TLV_DESTINATION_MIHF_ID; - MIH_C_TLV_TYPE_encode(bbP, &tlv); - - // VALUE - saved_byte_position = BitBuffer_getPosition(bbP); - MIH_C_MIHF_ID_encode(bbP, &messageP->destination); - end_byte_position = BitBuffer_getPosition(bbP); - - // LENGTH - encode_length = end_byte_position - saved_byte_position; - hole_size = MIH_C_LIST_LENGTH_get_encode_num_bytes(encode_length); - BitBuffer_write_shift_last_n_bytes_right(bbP, encode_length, hole_size); - BitBuffer_rewind_to(bbP, saved_byte_position); - MIH_C_LIST_LENGTH_encode(bbP, encode_length); - BitBuffer_rewind_to(bbP, end_byte_position + hole_size); - - MIH_C_Link_Primitive_Encode_Link_Parameters_Report_indication(bbP, &messageP->primitive); - - saved_byte_position = BitBuffer_getPosition(bbP); - bbP->m_byte_position = 0; - messageP->header.payload_length = saved_byte_position - MSG_MIH_HEADER_SIZE_IN_BYTES; - - - MIH_C_Link_Header_Encode(bbP, &messageP->header); - - bbP->m_byte_position = saved_byte_position; - - return saved_byte_position; -} -//----------------------------------------------------------------------------- -int MIH_C_Link_Message_Encode_Link_Going_Down_indication(Bit_Buffer_t* bbP, MIH_C_Message_Link_Going_Down_indication_t *messageP) -{ - //----------------------------------------------------------------------------- - unsigned int saved_byte_position; - unsigned int end_byte_position; - unsigned int hole_size; - MIH_C_TLV_TYPE_T tlv; - u_int16_t encode_length; - - BitBuffer_rewind(bbP); - bbP->m_byte_position = MSG_MIH_HEADER_SIZE_IN_BYTES; - - // TYPE - tlv = MIH_C_TLV_SOURCE_MIHF_ID; - MIH_C_TLV_TYPE_encode(bbP, &tlv); - - // VALUE - saved_byte_position = BitBuffer_getPosition(bbP); - MIH_C_MIHF_ID_encode(bbP, &messageP->source); - end_byte_position = BitBuffer_getPosition(bbP); - - // LENGTH - encode_length = end_byte_position - saved_byte_position; - hole_size = MIH_C_LIST_LENGTH_get_encode_num_bytes(encode_length); - BitBuffer_write_shift_last_n_bytes_right(bbP, encode_length, hole_size); - BitBuffer_rewind_to(bbP, saved_byte_position); - MIH_C_LIST_LENGTH_encode(bbP, encode_length); - BitBuffer_rewind_to(bbP, end_byte_position + hole_size); - - - // TYPE - tlv = MIH_C_TLV_DESTINATION_MIHF_ID; - MIH_C_TLV_TYPE_encode(bbP, &tlv); - - // VALUE - saved_byte_position = BitBuffer_getPosition(bbP); - MIH_C_MIHF_ID_encode(bbP, &messageP->destination); - end_byte_position = BitBuffer_getPosition(bbP); - - // LENGTH - encode_length = end_byte_position - saved_byte_position; - hole_size = MIH_C_LIST_LENGTH_get_encode_num_bytes(encode_length); - BitBuffer_write_shift_last_n_bytes_right(bbP, encode_length, hole_size); - BitBuffer_rewind_to(bbP, saved_byte_position); - MIH_C_LIST_LENGTH_encode(bbP, encode_length); - BitBuffer_rewind_to(bbP, end_byte_position + hole_size); - - MIH_C_Link_Primitive_Encode_Link_Going_Down_indication(bbP, &messageP->primitive); - - saved_byte_position = BitBuffer_getPosition(bbP); - bbP->m_byte_position = 0; - messageP->header.payload_length = saved_byte_position - MSG_MIH_HEADER_SIZE_IN_BYTES; - - - MIH_C_Link_Header_Encode(bbP, &messageP->header); - - bbP->m_byte_position = saved_byte_position; - - return saved_byte_position; -} -//----------------------------------------------------------------------------- -int MIH_C_Link_Message_Encode_Link_Down_indication(Bit_Buffer_t* bbP, MIH_C_Message_Link_Down_indication_t *messageP) -{ - //----------------------------------------------------------------------------- - unsigned int saved_byte_position; - unsigned int end_byte_position; - unsigned int hole_size; - MIH_C_TLV_TYPE_T tlv; - u_int16_t encode_length; - - BitBuffer_rewind(bbP); - bbP->m_byte_position = MSG_MIH_HEADER_SIZE_IN_BYTES; - - // TYPE - tlv = MIH_C_TLV_SOURCE_MIHF_ID; - MIH_C_TLV_TYPE_encode(bbP, &tlv); - - // VALUE - saved_byte_position = BitBuffer_getPosition(bbP); - MIH_C_MIHF_ID_encode(bbP, &messageP->source); - end_byte_position = BitBuffer_getPosition(bbP); - - // LENGTH - encode_length = end_byte_position - saved_byte_position; - hole_size = MIH_C_LIST_LENGTH_get_encode_num_bytes(encode_length); - BitBuffer_write_shift_last_n_bytes_right(bbP, encode_length, hole_size); - BitBuffer_rewind_to(bbP, saved_byte_position); - MIH_C_LIST_LENGTH_encode(bbP, encode_length); - BitBuffer_rewind_to(bbP, end_byte_position + hole_size); - - - // TYPE - tlv = MIH_C_TLV_DESTINATION_MIHF_ID; - MIH_C_TLV_TYPE_encode(bbP, &tlv); - - // VALUE - saved_byte_position = BitBuffer_getPosition(bbP); - MIH_C_MIHF_ID_encode(bbP, &messageP->destination); - end_byte_position = BitBuffer_getPosition(bbP); - - // LENGTH - encode_length = end_byte_position - saved_byte_position; - hole_size = MIH_C_LIST_LENGTH_get_encode_num_bytes(encode_length); - BitBuffer_write_shift_last_n_bytes_right(bbP, encode_length, hole_size); - BitBuffer_rewind_to(bbP, saved_byte_position); - MIH_C_LIST_LENGTH_encode(bbP, encode_length); - BitBuffer_rewind_to(bbP, end_byte_position + hole_size); - - MIH_C_Link_Primitive_Encode_Link_Down_indication(bbP, &messageP->primitive); - - saved_byte_position = BitBuffer_getPosition(bbP); - bbP->m_byte_position = 0; - messageP->header.payload_length = saved_byte_position - MSG_MIH_HEADER_SIZE_IN_BYTES; - - - MIH_C_Link_Header_Encode(bbP, &messageP->header); - - bbP->m_byte_position = saved_byte_position; - - return saved_byte_position; -} -//----------------------------------------------------------------------------- -int MIH_C_Link_Message_Encode_Link_Action_confirm(Bit_Buffer_t* bbP, MIH_C_Message_Link_Action_confirm_t *messageP) -{ - //----------------------------------------------------------------------------- - unsigned int saved_byte_position; - unsigned int end_byte_position; - unsigned int hole_size; - MIH_C_TLV_TYPE_T tlv; - u_int16_t encode_length; - - BitBuffer_rewind(bbP); - bbP->m_byte_position = MSG_MIH_HEADER_SIZE_IN_BYTES; - - // TYPE - tlv = MIH_C_TLV_SOURCE_MIHF_ID; - MIH_C_TLV_TYPE_encode(bbP, &tlv); - - // VALUE - saved_byte_position = BitBuffer_getPosition(bbP); - MIH_C_MIHF_ID_encode(bbP, &messageP->source); - end_byte_position = BitBuffer_getPosition(bbP); - - // LENGTH - encode_length = end_byte_position - saved_byte_position; - hole_size = MIH_C_LIST_LENGTH_get_encode_num_bytes(encode_length); - BitBuffer_write_shift_last_n_bytes_right(bbP, encode_length, hole_size); - BitBuffer_rewind_to(bbP, saved_byte_position); - MIH_C_LIST_LENGTH_encode(bbP, encode_length); - BitBuffer_rewind_to(bbP, end_byte_position + hole_size); - - - // TYPE - tlv = MIH_C_TLV_DESTINATION_MIHF_ID; - MIH_C_TLV_TYPE_encode(bbP, &tlv); - - // VALUE - saved_byte_position = BitBuffer_getPosition(bbP); - MIH_C_MIHF_ID_encode(bbP, &messageP->destination); - end_byte_position = BitBuffer_getPosition(bbP); - - // LENGTH - encode_length = end_byte_position - saved_byte_position; - hole_size = MIH_C_LIST_LENGTH_get_encode_num_bytes(encode_length); - BitBuffer_write_shift_last_n_bytes_right(bbP, encode_length, hole_size); - BitBuffer_rewind_to(bbP, saved_byte_position); - MIH_C_LIST_LENGTH_encode(bbP, encode_length); - BitBuffer_rewind_to(bbP, end_byte_position + hole_size); - - MIH_C_Link_Primitive_Encode_Link_Action_confirm(bbP, &messageP->primitive); - - saved_byte_position = BitBuffer_getPosition(bbP); - bbP->m_byte_position = 0; - messageP->header.payload_length = saved_byte_position - MSG_MIH_HEADER_SIZE_IN_BYTES; - - - MIH_C_Link_Header_Encode(bbP, &messageP->header); - - bbP->m_byte_position = saved_byte_position; - - return saved_byte_position; -} -//----------------------------------------------------------------------------- -int MIH_C_Link_Message_Encode_Capability_Discover_confirm(Bit_Buffer_t* bbP, MIH_C_Message_Link_Capability_Discover_confirm_t *messageP) -{ - //----------------------------------------------------------------------------- - unsigned int saved_byte_position; - unsigned int end_byte_position; - unsigned int hole_size; - MIH_C_TLV_TYPE_T tlv; - u_int16_t encode_length; - - BitBuffer_rewind(bbP); - bbP->m_byte_position = MSG_MIH_HEADER_SIZE_IN_BYTES; - - // TYPE - tlv = MIH_C_TLV_SOURCE_MIHF_ID; - MIH_C_TLV_TYPE_encode(bbP, &tlv); - - // VALUE - saved_byte_position = BitBuffer_getPosition(bbP); - MIH_C_MIHF_ID_encode(bbP, &messageP->source); - end_byte_position = BitBuffer_getPosition(bbP); - - // LENGTH - encode_length = end_byte_position - saved_byte_position; - hole_size = MIH_C_LIST_LENGTH_get_encode_num_bytes(encode_length); - BitBuffer_write_shift_last_n_bytes_right(bbP, encode_length, hole_size); - BitBuffer_rewind_to(bbP, saved_byte_position); - MIH_C_LIST_LENGTH_encode(bbP, encode_length); - BitBuffer_rewind_to(bbP, end_byte_position + hole_size); - - - // TYPE - tlv = MIH_C_TLV_DESTINATION_MIHF_ID; - MIH_C_TLV_TYPE_encode(bbP, &tlv); - - // VALUE - saved_byte_position = BitBuffer_getPosition(bbP); - MIH_C_MIHF_ID_encode(bbP, &messageP->destination); - end_byte_position = BitBuffer_getPosition(bbP); - - // LENGTH - encode_length = end_byte_position - saved_byte_position; - hole_size = MIH_C_LIST_LENGTH_get_encode_num_bytes(encode_length); - BitBuffer_write_shift_last_n_bytes_right(bbP, encode_length, hole_size); - BitBuffer_rewind_to(bbP, saved_byte_position); - MIH_C_LIST_LENGTH_encode(bbP, encode_length); - BitBuffer_rewind_to(bbP, end_byte_position + hole_size); - - //-------------------------------------------------------------------------- - MIH_C_Link_Primitive_Encode_Link_Capability_Discover_confirm(bbP, &messageP->primitive); - - saved_byte_position = BitBuffer_getPosition(bbP); - bbP->m_byte_position = 0; - messageP->header.payload_length = saved_byte_position - MSG_MIH_HEADER_SIZE_IN_BYTES; - - - MIH_C_Link_Header_Encode(bbP, &messageP->header); - - bbP->m_byte_position = saved_byte_position; - - return saved_byte_position; -} -//----------------------------------------------------------------------------- -int MIH_C_Link_Message_Encode_Event_Subscribe_confirm(Bit_Buffer_t* bbP, MIH_C_Message_Link_Event_Subscribe_confirm_t *messageP) -{ - //----------------------------------------------------------------------------- - unsigned int saved_byte_position; - unsigned int end_byte_position; - unsigned int hole_size; - MIH_C_TLV_TYPE_T tlv; - u_int16_t encode_length; - - BitBuffer_rewind(bbP); - bbP->m_byte_position = MSG_MIH_HEADER_SIZE_IN_BYTES; - - // TYPE - tlv = MIH_C_TLV_SOURCE_MIHF_ID; - MIH_C_TLV_TYPE_encode(bbP, &tlv); - - // VALUE - saved_byte_position = BitBuffer_getPosition(bbP); - MIH_C_MIHF_ID_encode(bbP, &messageP->source); - end_byte_position = BitBuffer_getPosition(bbP); - - // LENGTH - encode_length = end_byte_position - saved_byte_position; - hole_size = MIH_C_LIST_LENGTH_get_encode_num_bytes(encode_length); - BitBuffer_write_shift_last_n_bytes_right(bbP, encode_length, hole_size); - BitBuffer_rewind_to(bbP, saved_byte_position); - MIH_C_LIST_LENGTH_encode(bbP, encode_length); - BitBuffer_rewind_to(bbP, end_byte_position + hole_size); - - - // TYPE - tlv = MIH_C_TLV_DESTINATION_MIHF_ID; - MIH_C_TLV_TYPE_encode(bbP, &tlv); - - // VALUE - saved_byte_position = BitBuffer_getPosition(bbP); - MIH_C_MIHF_ID_encode(bbP, &messageP->destination); - end_byte_position = BitBuffer_getPosition(bbP); - - // LENGTH - encode_length = end_byte_position - saved_byte_position; - hole_size = MIH_C_LIST_LENGTH_get_encode_num_bytes(encode_length); - BitBuffer_write_shift_last_n_bytes_right(bbP, encode_length, hole_size); - BitBuffer_rewind_to(bbP, saved_byte_position); - MIH_C_LIST_LENGTH_encode(bbP, encode_length); - BitBuffer_rewind_to(bbP, end_byte_position + hole_size); - - //-------------------------------------------------------------------------- - MIH_C_Link_Primitive_Encode_Link_Event_Subscribe_confirm(bbP, &messageP->primitive); - - saved_byte_position = BitBuffer_getPosition(bbP); - bbP->m_byte_position = 0; - messageP->header.payload_length = saved_byte_position - MSG_MIH_HEADER_SIZE_IN_BYTES; - - - MIH_C_Link_Header_Encode(bbP, &messageP->header); - - bbP->m_byte_position = saved_byte_position; - - return saved_byte_position; -} -//----------------------------------------------------------------------------- -int MIH_C_Link_Message_Encode_Event_Unsubscribe_confirm(Bit_Buffer_t* bbP, MIH_C_Message_Link_Event_Unsubscribe_confirm_t *messageP) -{ - //----------------------------------------------------------------------------- - unsigned int saved_byte_position; - unsigned int end_byte_position; - unsigned int hole_size; - MIH_C_TLV_TYPE_T tlv; - u_int16_t encode_length; - - BitBuffer_rewind(bbP); - bbP->m_byte_position = MSG_MIH_HEADER_SIZE_IN_BYTES; - - // TYPE - tlv = MIH_C_TLV_SOURCE_MIHF_ID; - MIH_C_TLV_TYPE_encode(bbP, &tlv); - - // VALUE - saved_byte_position = BitBuffer_getPosition(bbP); - MIH_C_MIHF_ID_encode(bbP, &messageP->source); - end_byte_position = BitBuffer_getPosition(bbP); - - // LENGTH - encode_length = end_byte_position - saved_byte_position; - hole_size = MIH_C_LIST_LENGTH_get_encode_num_bytes(encode_length); - BitBuffer_write_shift_last_n_bytes_right(bbP, encode_length, hole_size); - BitBuffer_rewind_to(bbP, saved_byte_position); - MIH_C_LIST_LENGTH_encode(bbP, encode_length); - BitBuffer_rewind_to(bbP, end_byte_position + hole_size); - - - // TYPE - tlv = MIH_C_TLV_DESTINATION_MIHF_ID; - MIH_C_TLV_TYPE_encode(bbP, &tlv); - - // VALUE - saved_byte_position = BitBuffer_getPosition(bbP); - MIH_C_MIHF_ID_encode(bbP, &messageP->destination); - end_byte_position = BitBuffer_getPosition(bbP); - - // LENGTH - encode_length = end_byte_position - saved_byte_position; - hole_size = MIH_C_LIST_LENGTH_get_encode_num_bytes(encode_length); - BitBuffer_write_shift_last_n_bytes_right(bbP, encode_length, hole_size); - BitBuffer_rewind_to(bbP, saved_byte_position); - MIH_C_LIST_LENGTH_encode(bbP, encode_length); - BitBuffer_rewind_to(bbP, end_byte_position + hole_size); - - //-------------------------------------------------------------------------- - MIH_C_Link_Primitive_Encode_Link_Event_Unsubscribe_confirm(bbP, &messageP->primitive); - - saved_byte_position = BitBuffer_getPosition(bbP); - bbP->m_byte_position = 0; - messageP->header.payload_length = saved_byte_position - MSG_MIH_HEADER_SIZE_IN_BYTES; - - - MIH_C_Link_Header_Encode(bbP, &messageP->header); - - bbP->m_byte_position = saved_byte_position; - - return saved_byte_position; -} -//----------------------------------------------------------------------------- -int MIH_C_Link_Message_Encode_Configure_Thresholds_confirm(Bit_Buffer_t* bbP, MIH_C_Message_Link_Configure_Thresholds_confirm_t *messageP) -{ - //----------------------------------------------------------------------------- - unsigned int saved_byte_position; - unsigned int end_byte_position; - unsigned int hole_size; - MIH_C_TLV_TYPE_T tlv; - u_int16_t encode_length; - - BitBuffer_rewind(bbP); - bbP->m_byte_position = MSG_MIH_HEADER_SIZE_IN_BYTES; - - // TYPE - tlv = MIH_C_TLV_SOURCE_MIHF_ID; - MIH_C_TLV_TYPE_encode(bbP, &tlv); - - // VALUE - saved_byte_position = BitBuffer_getPosition(bbP); - MIH_C_MIHF_ID_encode(bbP, &messageP->source); - end_byte_position = BitBuffer_getPosition(bbP); - - // LENGTH - encode_length = end_byte_position - saved_byte_position; - hole_size = MIH_C_LIST_LENGTH_get_encode_num_bytes(encode_length); - BitBuffer_write_shift_last_n_bytes_right(bbP, encode_length, hole_size); - BitBuffer_rewind_to(bbP, saved_byte_position); - MIH_C_LIST_LENGTH_encode(bbP, encode_length); - BitBuffer_rewind_to(bbP, end_byte_position + hole_size); - - - // TYPE - tlv = MIH_C_TLV_DESTINATION_MIHF_ID; - MIH_C_TLV_TYPE_encode(bbP, &tlv); - - // VALUE - saved_byte_position = BitBuffer_getPosition(bbP); - MIH_C_MIHF_ID_encode(bbP, &messageP->destination); - end_byte_position = BitBuffer_getPosition(bbP); - - // LENGTH - encode_length = end_byte_position - saved_byte_position; - hole_size = MIH_C_LIST_LENGTH_get_encode_num_bytes(encode_length); - BitBuffer_write_shift_last_n_bytes_right(bbP, encode_length, hole_size); - BitBuffer_rewind_to(bbP, saved_byte_position); - MIH_C_LIST_LENGTH_encode(bbP, encode_length); - BitBuffer_rewind_to(bbP, end_byte_position + hole_size); - - //-------------------------------------------------------------------------- - MIH_C_Link_Primitive_Encode_Link_Configure_Thresholds_confirm(bbP, &messageP->primitive); - - saved_byte_position = BitBuffer_getPosition(bbP); - bbP->m_byte_position = 0; - messageP->header.payload_length = saved_byte_position - MSG_MIH_HEADER_SIZE_IN_BYTES; - - - MIH_C_Link_Header_Encode(bbP, &messageP->header); - - bbP->m_byte_position = saved_byte_position; - - return saved_byte_position; -} -//----------------------------------------------------------------------------- -int MIH_C_Link_Message_Encode_Get_Parameters_confirm(Bit_Buffer_t* bbP, MIH_C_Message_Link_Get_Parameters_confirm_t *messageP) -{ - //----------------------------------------------------------------------------- - unsigned int saved_byte_position; - unsigned int end_byte_position; - unsigned int hole_size; - MIH_C_TLV_TYPE_T tlv; - u_int16_t encode_length; - - BitBuffer_rewind(bbP); - bbP->m_byte_position = MSG_MIH_HEADER_SIZE_IN_BYTES; - - // TYPE - tlv = MIH_C_TLV_SOURCE_MIHF_ID; - MIH_C_TLV_TYPE_encode(bbP, &tlv); - - // VALUE - saved_byte_position = BitBuffer_getPosition(bbP); - MIH_C_MIHF_ID_encode(bbP, &messageP->source); - end_byte_position = BitBuffer_getPosition(bbP); - - // LENGTH - encode_length = end_byte_position - saved_byte_position; - hole_size = MIH_C_LIST_LENGTH_get_encode_num_bytes(encode_length); - BitBuffer_write_shift_last_n_bytes_right(bbP, encode_length, hole_size); - BitBuffer_rewind_to(bbP, saved_byte_position); - MIH_C_LIST_LENGTH_encode(bbP, encode_length); - BitBuffer_rewind_to(bbP, end_byte_position + hole_size); - - - // TYPE - tlv = MIH_C_TLV_DESTINATION_MIHF_ID; - MIH_C_TLV_TYPE_encode(bbP, &tlv); - - // VALUE - saved_byte_position = BitBuffer_getPosition(bbP); - MIH_C_MIHF_ID_encode(bbP, &messageP->destination); - end_byte_position = BitBuffer_getPosition(bbP); - - // LENGTH - encode_length = end_byte_position - saved_byte_position; - hole_size = MIH_C_LIST_LENGTH_get_encode_num_bytes(encode_length); - BitBuffer_write_shift_last_n_bytes_right(bbP, encode_length, hole_size); - BitBuffer_rewind_to(bbP, saved_byte_position); - MIH_C_LIST_LENGTH_encode(bbP, encode_length); - BitBuffer_rewind_to(bbP, end_byte_position + hole_size); - - //-------------------------------------------------------------------------- - MIH_C_Link_Primitive_Encode_Link_Get_Parameters_confirm(bbP, &messageP->primitive); - - saved_byte_position = BitBuffer_getPosition(bbP); - bbP->m_byte_position = 0; - messageP->header.payload_length = saved_byte_position - MSG_MIH_HEADER_SIZE_IN_BYTES; - - - MIH_C_Link_Header_Encode(bbP, &messageP->header); - - bbP->m_byte_position = saved_byte_position; - - return saved_byte_position; -} diff --git a/openair3/RAL-LTE/INTERFACE-802.21/C/MIH_C_primitive_codec.c b/openair3/RAL-LTE/INTERFACE-802.21/C/MIH_C_primitive_codec.c deleted file mode 100755 index 9ab37228c5..0000000000 --- a/openair3/RAL-LTE/INTERFACE-802.21/C/MIH_C_primitive_codec.c +++ /dev/null @@ -1,892 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ - -#define MIH_C_INTERFACE -#define MIH_C_PRIMITIVE_CODEC_C -#include -#include "MIH_C_primitive_codec.h" - -//----------------------------------------------------------------------------- -int MIH_C_Link_Primitive_Decode_Link_Capability_Discover_request(Bit_Buffer_t* bbP, MIH_C_Link_Capability_Discover_request_t *primitiveP) -{ - //----------------------------------------------------------------------------- - return MIH_PRIMITIVE_DECODE_OK; -} -//----------------------------------------------------------------------------- -int MIH_C_Link_Primitive_Link_Capability_Discover_request2String(MIH_C_Link_Capability_Discover_request_t *primitiveP, char* bufP) -{ - //----------------------------------------------------------------------------- - return 0; -} -//----------------------------------------------------------------------------- -int MIH_C_Link_Primitive_Decode_Link_Event_Subscribe_request(Bit_Buffer_t* bbP, MIH_C_Link_Event_Subscribe_request_t *primitiveP) -{ - //----------------------------------------------------------------------------- - - MIH_C_TLV_TYPE_T tlv; - u_int16_t length; - - MIH_C_TLV_TYPE_decode(bbP, &tlv); - MIH_C_LIST_LENGTH_decode(bbP, &length); - MIH_C_LINK_EVENT_LIST_decode(bbP, &primitiveP->RequestedLinkEventList); - -#if MIH_C_DEBUG_DESERIALIZATION - - if (primitiveP->RequestedLinkEventList & MIH_C_BIT_LINK_DETECTED) printf("SUBSCRIBE_REQUEST LINK_DETECTED\n"); - - if (primitiveP->RequestedLinkEventList & MIH_C_BIT_LINK_UP) printf("SUBSCRIBE_REQUEST LINK_UP\n"); - - if (primitiveP->RequestedLinkEventList & MIH_C_BIT_LINK_DOWN) printf("SUBSCRIBE_REQUEST LINK_DOWN\n"); - - if (primitiveP->RequestedLinkEventList & MIH_C_BIT_LINK_PARAMETERS_REPORT) printf("SUBSCRIBE_REQUEST LINK_PARAMETERS_REPORT\n"); - - if (primitiveP->RequestedLinkEventList & MIH_C_BIT_LINK_GOING_DOWN) printf("SUBSCRIBE_REQUEST LINK_GOING_DOWN\n"); - - if (primitiveP->RequestedLinkEventList & MIH_C_BIT_LINK_HANDOVER_IMMINENT) printf("SUBSCRIBE_REQUEST LINK_HANDOVER_IMMINENT\n"); - - if (primitiveP->RequestedLinkEventList & MIH_C_BIT_LINK_HANDOVER_COMPLETE) printf("SUBSCRIBE_REQUEST LINK_HANDOVER_COMPLETE\n"); - - if (primitiveP->RequestedLinkEventList & MIH_C_BIT_LINK_PDU_TRANSMIT_STATUS) printf("SUBSCRIBE_REQUEST LINK_PDU_TRANSMIT_STATUS\n"); - -#endif - - if (BitBuffer_isCheckReadOverflowOK(bbP, 0) == BIT_BUFFER_TRUE) { - return MIH_PRIMITIVE_DECODE_OK; - } else { - return MIH_PRIMITIVE_DECODE_TOO_SHORT; - } -} -//----------------------------------------------------------------------------- -int MIH_C_Link_Primitive_Link_Event_Subscribe_request2String(MIH_C_Link_Event_Subscribe_request_t *primitiveP, char* bufP) -{ - //----------------------------------------------------------------------------- - - unsigned int buffer_index = 0; - buffer_index += sprintf(&bufP[buffer_index], "--------------------------------------------------\n"); - buffer_index += sprintf(&bufP[buffer_index], "- PRIMITIVE Link_Event_Subscribe.request -\n"); - buffer_index += sprintf(&bufP[buffer_index], "--------------------------------------------------\n"); - buffer_index += MIH_C_LINK_EVENT_LIST2String(&primitiveP->RequestedLinkEventList, &bufP[buffer_index]); - buffer_index += sprintf(&bufP[buffer_index], "\n"); - return buffer_index; -} -//----------------------------------------------------------------------------- -int MIH_C_Link_Primitive_Decode_Link_Event_Unsubscribe_request(Bit_Buffer_t* bbP, MIH_C_Link_Event_Unsubscribe_request_t *primitiveP) -{ - //----------------------------------------------------------------------------- - MIH_C_LINK_EVENT_LIST_decode(bbP, &primitiveP->RequestedLinkEventList); - - if (BitBuffer_isCheckReadOverflowOK(bbP, 0) == BIT_BUFFER_TRUE) { - return MIH_PRIMITIVE_DECODE_OK; - } else { - return MIH_PRIMITIVE_DECODE_TOO_SHORT; - } -} -//----------------------------------------------------------------------------- -int MIH_C_Link_Primitive_Link_Event_Unsubscribe_request2String(MIH_C_Link_Event_Unsubscribe_request_t *primitiveP, char* bufP) -{ - //----------------------------------------------------------------------------- - - unsigned int buffer_index = 0; - buffer_index += sprintf(&bufP[buffer_index], "--------------------------------------------------\n"); - buffer_index += sprintf(&bufP[buffer_index], "- PRIMITIVE Link_Event_Unsubscribe.request -\n"); - buffer_index += sprintf(&bufP[buffer_index], "--------------------------------------------------\n"); - buffer_index += MIH_C_LINK_EVENT_LIST2String(&primitiveP->RequestedLinkEventList, &bufP[buffer_index]); - buffer_index += sprintf(&bufP[buffer_index], "\n"); - return buffer_index; -} -//----------------------------------------------------------------------------- -int MIH_C_Link_Primitive_Decode_Link_Get_Parameters_request(Bit_Buffer_t* bbP, MIH_C_Link_Get_Parameters_request_t *primitiveP) -{ - //----------------------------------------------------------------------------- - MIH_C_TLV_TYPE_T tlv; - u_int16_t length; - - MIH_C_TLV_TYPE_decode(bbP, &tlv); - assert(tlv == MIH_C_TLV_LINK_PARAM_TYPE_LIST); - MIH_C_LIST_LENGTH_decode(bbP, &length); - MIH_C_LINK_PARAM_TYPE_LIST_decode(bbP, &primitiveP->LinkParametersRequest_list); - - MIH_C_TLV_TYPE_decode(bbP, &tlv); - assert(tlv == MIH_C_TLV_LINK_STATES_REQ); - MIH_C_LIST_LENGTH_decode(bbP, &length); - MIH_C_LINK_STATES_REQ_decode(bbP, &primitiveP->LinkStatesRequest); - - - MIH_C_TLV_TYPE_decode(bbP, &tlv); - assert(tlv == MIH_C_TLV_LINK_DESC_REQ); - MIH_C_LIST_LENGTH_decode(bbP, &length); - MIH_C_LINK_DESC_REQ_decode(bbP, &primitiveP->LinkDescriptorsRequest); - - if (BitBuffer_isCheckReadOverflowOK(bbP, 0) == BIT_BUFFER_TRUE) { - return MIH_PRIMITIVE_DECODE_OK; - } else { - return MIH_PRIMITIVE_DECODE_TOO_SHORT; - } -} -//----------------------------------------------------------------------------- -int MIH_C_Link_Primitive_Link_Get_Parameters_request2String(MIH_C_Link_Get_Parameters_request_t *primitiveP, char* bufP) -{ - //----------------------------------------------------------------------------- - - unsigned int buffer_index = 0; - buffer_index += sprintf(&bufP[buffer_index], "--------------------------------------------------\n"); - buffer_index += sprintf(&bufP[buffer_index], "- PRIMITIVE Link_Get_Parameters.request -\n"); - buffer_index += sprintf(&bufP[buffer_index], "--------------------------------------------------\n"); - buffer_index += sprintf(&bufP[buffer_index], "LINK_PARAM_TYPE_LIST = "); - buffer_index += MIH_C_LINK_PARAM_TYPE_LIST2String(&primitiveP->LinkParametersRequest_list, &bufP[buffer_index]); - buffer_index += sprintf(&bufP[buffer_index], "\nLINK_STATES_REQ = "); - buffer_index += MIH_C_LINK_STATES_REQ2String(&primitiveP->LinkStatesRequest, &bufP[buffer_index]); - buffer_index += sprintf(&bufP[buffer_index], "\nLINK_DESC_REQ = "); - buffer_index += MIH_C_LINK_DESC_REQ2String(&primitiveP->LinkDescriptorsRequest, &bufP[buffer_index]); - buffer_index += sprintf(&bufP[buffer_index], "\n"); - return buffer_index; -} - -//----------------------------------------------------------------------------- -int MIH_C_Link_Primitive_Decode_Link_Configure_Thresholds_request(Bit_Buffer_t* bbP, MIH_C_Link_Configure_Thresholds_request_t *primitiveP) -{ - //----------------------------------------------------------------------------- - MIH_C_TLV_TYPE_T tlv; - u_int16_t length; - - MIH_C_TLV_TYPE_decode(bbP, &tlv); - MIH_C_LIST_LENGTH_decode(bbP, &length); - - MIH_C_LINK_CFG_PARAM_LIST_decode(bbP, &primitiveP->LinkConfigureParameterList_list); - - if (BitBuffer_isCheckReadOverflowOK(bbP, 0) == BIT_BUFFER_TRUE) { - return MIH_PRIMITIVE_DECODE_OK; - } else { - return MIH_PRIMITIVE_DECODE_TOO_SHORT; - } -} -//----------------------------------------------------------------------------- -int MIH_C_Link_Primitive_Link_Configure_Thresholds_request2String(MIH_C_Link_Configure_Thresholds_request_t *primitiveP, char* bufP) -{ - //----------------------------------------------------------------------------- - - unsigned int buffer_index = 0; - buffer_index += sprintf(&bufP[buffer_index], "--------------------------------------------------\n"); - buffer_index += sprintf(&bufP[buffer_index], "- PRIMITIVE Link_Configure_Threshold.request -\n"); - buffer_index += sprintf(&bufP[buffer_index], "--------------------------------------------------\n"); - buffer_index += MIH_C_LINK_CFG_PARAM_LIST2String(&primitiveP->LinkConfigureParameterList_list, &bufP[buffer_index]); - buffer_index += sprintf(&bufP[buffer_index], "\n"); - return buffer_index; -} -//----------------------------------------------------------------------------- -int MIH_C_Link_Primitive_Decode_Link_Action_request(Bit_Buffer_t* bbP, MIH_C_Link_Action_request_t *primitiveP) -{ - //----------------------------------------------------------------------------- - MIH_C_LINK_ADDR_T *PoALinkAddress = NULL; - MIH_C_TLV_TYPE_T tlv; - u_int16_t length; - - MIH_C_TLV_TYPE_decode(bbP, &tlv); - assert(tlv == MIH_C_TLV_LINK_ACTION); - MIH_C_LIST_LENGTH_decode(bbP, &length); - - // Patch MW 03/05/2013 - if (length >2) { - MIH_C_LINK_ACTION_decode(bbP, &primitiveP->LinkAction); - } else { - MIH_C_LINK_ACTION_short_decode(bbP, &primitiveP->LinkAction) ; - } - - MIH_C_TLV_TYPE_decode(bbP, &tlv); - assert(tlv == MIH_C_TLV_LINK_TIME_INTERVAL); - MIH_C_LIST_LENGTH_decode(bbP, &length); - MIH_C_UNSIGNED_INT2_decode(bbP, &primitiveP->ExecutionDelay); - - if (BitBuffer_isCheckReadOverflowOK(bbP, 0) == BIT_BUFFER_FALSE) { - return MIH_PRIMITIVE_DECODE_TOO_SHORT; - } - - MIH_C_TLV_TYPE_decode(bbP, &tlv); - - if (tlv == MIH_C_TLV_POA) { - PoALinkAddress = malloc(sizeof(MIH_C_LINK_ADDR_T)); - MIH_C_LINK_ADDR_decode(bbP, PoALinkAddress); - primitiveP->PoALinkAddress = PoALinkAddress; - } else { - primitiveP->PoALinkAddress = NULL; - } - - if (BitBuffer_isCheckReadOverflowOK(bbP, 0) == BIT_BUFFER_FALSE) { - free(PoALinkAddress); - return MIH_PRIMITIVE_DECODE_TOO_SHORT; - } - - return MIH_PRIMITIVE_DECODE_OK; -} -//----------------------------------------------------------------------------- -int MIH_C_Link_Primitive_Link_Action_request2String(MIH_C_Link_Action_request_t *primitiveP, char* bufP) -{ - //----------------------------------------------------------------------------- - - unsigned int buffer_index = 0; - buffer_index += sprintf(&bufP[buffer_index], "--------------------------------------------------\n"); - buffer_index += sprintf(&bufP[buffer_index], "- PRIMITIVE Link_Action.request -\n"); - buffer_index += sprintf(&bufP[buffer_index], "--------------------------------------------------\n"); - buffer_index += MIH_C_LINK_ACTION2String(&primitiveP->LinkAction, &bufP[buffer_index]); - buffer_index += MIH_C_UNSIGNED_INT22String(&primitiveP->ExecutionDelay, &bufP[buffer_index]); - - if (primitiveP->PoALinkAddress != NULL) { - buffer_index += MIH_C_LINK_ADDR2String(primitiveP->PoALinkAddress, &bufP[buffer_index]); - } - - buffer_index += sprintf(&bufP[buffer_index], "\n"); - return buffer_index; -} -#ifdef MIH_C_MEDIEVAL_EXTENSIONS -//----------------------------------------------------------------------------- -int MIH_C_Link_Primitive_Encode_Link_Register_indication(Bit_Buffer_t* bbP, MIH_C_Link_Register_indication_t *primitiveP) -{ - //----------------------------------------------------------------------------- - MIH_C_TLV_TYPE_T tlv; - unsigned int saved_byte_position; - unsigned int end_byte_position; - unsigned int hole_size; - u_int16_t encode_length; - - // TYPE - tlv = MIH_C_TLV_LINK_INTERFACE_TYPE_ADDR; - MIH_C_TLV_TYPE_encode(bbP, &tlv); - - // VALUE - saved_byte_position = BitBuffer_getPosition(bbP); - MIH_C_LINK_ID_encode(bbP, &primitiveP->Link_Id); - end_byte_position = BitBuffer_getPosition(bbP); - - // LENGTH - encode_length = end_byte_position - saved_byte_position; - hole_size = MIH_C_LIST_LENGTH_get_encode_num_bytes(encode_length); - BitBuffer_write_shift_last_n_bytes_right(bbP, encode_length, hole_size); - BitBuffer_rewind_to(bbP, saved_byte_position); - MIH_C_LIST_LENGTH_encode(bbP, encode_length); - BitBuffer_rewind_to(bbP, end_byte_position + hole_size); - - return MIH_PRIMITIVE_ENCODE_OK; -} -#endif -//----------------------------------------------------------------------------- -int MIH_C_Link_Primitive_Link_Register_indication2String(MIH_C_Link_Register_indication_t *primitiveP, char* bufP) -{ - //----------------------------------------------------------------------------- - - unsigned int buffer_index = 0; - buffer_index += sprintf(&bufP[buffer_index], "--------------------------------------------------\n"); - buffer_index += sprintf(&bufP[buffer_index], "- PRIMITIVE Link_Register.indication -\n"); - buffer_index += sprintf(&bufP[buffer_index], "--------------------------------------------------\n"); - buffer_index += MIH_C_LINK_ID2String(&primitiveP->Link_Id, &bufP[buffer_index]); - buffer_index += sprintf(&bufP[buffer_index], "\n"); - return buffer_index; -} -//----------------------------------------------------------------------------- -int MIH_C_Link_Primitive_Encode_Link_Detected_indication(Bit_Buffer_t* bbP, MIH_C_Link_Detected_indication_t *primitiveP) -{ - //----------------------------------------------------------------------------- - MIH_C_TLV_TYPE_T tlv; - unsigned int saved_byte_position; - unsigned int end_byte_position; - unsigned int hole_size; - u_int16_t encode_length; - - // TYPE - tlv = MIH_C_TLV_LINK_DET_INFO; - MIH_C_TLV_TYPE_encode(bbP, &tlv); - - // VALUE - saved_byte_position = BitBuffer_getPosition(bbP); - MIH_C_LINK_DET_INFO_encode(bbP, &primitiveP->LinkDetectedInfo); - end_byte_position = BitBuffer_getPosition(bbP); - - // LENGTH - encode_length = end_byte_position - saved_byte_position; - hole_size = MIH_C_LIST_LENGTH_get_encode_num_bytes(encode_length); - BitBuffer_write_shift_last_n_bytes_right(bbP, encode_length, hole_size); - BitBuffer_rewind_to(bbP, saved_byte_position); - MIH_C_LIST_LENGTH_encode(bbP, encode_length); - BitBuffer_rewind_to(bbP, end_byte_position + hole_size); - - return MIH_PRIMITIVE_ENCODE_OK; -} -//----------------------------------------------------------------------------- -int MIH_C_Link_Primitive_Encode_Link_Up_indication(Bit_Buffer_t* bbP, MIH_C_Link_Up_indication_t *primitiveP) -{ - //----------------------------------------------------------------------------- - MIH_C_TLV_TYPE_T tlv; - unsigned int saved_byte_position; - unsigned int end_byte_position; - unsigned int hole_size; - u_int16_t encode_length; - - // TYPE - tlv = MIH_C_TLV_LINK_IDENTIFIER; - MIH_C_TLV_TYPE_encode(bbP, &tlv); - - // VALUE - saved_byte_position = BitBuffer_getPosition(bbP); - MIH_C_LINK_TUPLE_ID_encode(bbP, &primitiveP->LinkIdentifier); - end_byte_position = BitBuffer_getPosition(bbP); - - // LENGTH - encode_length = end_byte_position - saved_byte_position; - hole_size = MIH_C_LIST_LENGTH_get_encode_num_bytes(encode_length); - BitBuffer_write_shift_last_n_bytes_right(bbP, encode_length, hole_size); - BitBuffer_rewind_to(bbP, saved_byte_position); - MIH_C_LIST_LENGTH_encode(bbP, encode_length); - BitBuffer_rewind_to(bbP, end_byte_position + hole_size); - - if (primitiveP->OldAccessRouter) { - // TYPE - tlv = MIH_C_TLV_OLD_ACCESS_ROUTER; - MIH_C_TLV_TYPE_encode(bbP, &tlv); - - // VALUE - saved_byte_position = BitBuffer_getPosition(bbP); - MIH_C_LINK_ADDR_encode(bbP, primitiveP->OldAccessRouter); - end_byte_position = BitBuffer_getPosition(bbP); - - // LENGTH - encode_length = end_byte_position - saved_byte_position; - hole_size = MIH_C_LIST_LENGTH_get_encode_num_bytes(encode_length); - BitBuffer_write_shift_last_n_bytes_right(bbP, encode_length, hole_size); - BitBuffer_rewind_to(bbP, saved_byte_position); - MIH_C_LIST_LENGTH_encode(bbP, encode_length); - BitBuffer_rewind_to(bbP, end_byte_position + hole_size); - } - - if (primitiveP->NewAccessRouter) { - // TYPE - tlv = MIH_C_TLV_NEW_ACCESS_ROUTER; - MIH_C_TLV_TYPE_encode(bbP, &tlv); - - // VALUE - saved_byte_position = BitBuffer_getPosition(bbP); - MIH_C_LINK_ADDR_encode(bbP, primitiveP->NewAccessRouter); - end_byte_position = BitBuffer_getPosition(bbP); - - // LENGTH - encode_length = end_byte_position - saved_byte_position; - hole_size = MIH_C_LIST_LENGTH_get_encode_num_bytes(encode_length); - BitBuffer_write_shift_last_n_bytes_right(bbP, encode_length, hole_size); - BitBuffer_rewind_to(bbP, saved_byte_position); - MIH_C_LIST_LENGTH_encode(bbP, encode_length); - BitBuffer_rewind_to(bbP, end_byte_position + hole_size); - } - - if (primitiveP->IPRenewalFlag) { - // TYPE - tlv = MIH_C_TLV_IP_RENEWAL_FLAG; - MIH_C_TLV_TYPE_encode(bbP, &tlv); - - // VALUE - saved_byte_position = BitBuffer_getPosition(bbP); - MIH_C_IP_RENEWAL_FLAG_encode(bbP, primitiveP->IPRenewalFlag); - end_byte_position = BitBuffer_getPosition(bbP); - - // LENGTH - encode_length = end_byte_position - saved_byte_position; - hole_size = MIH_C_LIST_LENGTH_get_encode_num_bytes(encode_length); - BitBuffer_write_shift_last_n_bytes_right(bbP, encode_length, hole_size); - BitBuffer_rewind_to(bbP, saved_byte_position); - MIH_C_LIST_LENGTH_encode(bbP, encode_length); - BitBuffer_rewind_to(bbP, end_byte_position + hole_size); - } - - if (primitiveP->MobilityManagementSupport) { - // TYPE - tlv = MIH_C_TLV_MOBILITY_MANAGEMENT_SUPPORT; - MIH_C_TLV_TYPE_encode(bbP, &tlv); - - // VALUE - saved_byte_position = BitBuffer_getPosition(bbP); - MIH_C_IP_MOB_MGMT_encode(bbP, primitiveP->MobilityManagementSupport); - end_byte_position = BitBuffer_getPosition(bbP); - - // LENGTH - encode_length = end_byte_position - saved_byte_position; - hole_size = MIH_C_LIST_LENGTH_get_encode_num_bytes(encode_length); - BitBuffer_write_shift_last_n_bytes_right(bbP, encode_length, hole_size); - BitBuffer_rewind_to(bbP, saved_byte_position); - MIH_C_LIST_LENGTH_encode(bbP, encode_length); - BitBuffer_rewind_to(bbP, end_byte_position + hole_size); - } - - return MIH_PRIMITIVE_ENCODE_OK; -} -//----------------------------------------------------------------------------- -int MIH_C_Link_Primitive_Encode_Link_Parameters_Report_indication(Bit_Buffer_t* bbP, MIH_C_Link_Parameters_Report_indication_t *primitiveP) -{ - //----------------------------------------------------------------------------- - MIH_C_TLV_TYPE_T tlv; - unsigned int saved_byte_position; - unsigned int end_byte_position; - unsigned int hole_size; - u_int16_t encode_length; - - - // ------- LinkIdentifier-------- - // TYPE - tlv = MIH_C_TLV_LINK_IDENTIFIER; - MIH_C_TLV_TYPE_encode(bbP, &tlv); - - // VALUE - saved_byte_position = BitBuffer_getPosition(bbP); - MIH_C_LINK_TUPLE_ID_encode(bbP, &primitiveP->LinkIdentifier); - end_byte_position = BitBuffer_getPosition(bbP); - - // LENGTH - encode_length = end_byte_position - saved_byte_position; - hole_size = MIH_C_LIST_LENGTH_get_encode_num_bytes(encode_length); - BitBuffer_write_shift_last_n_bytes_right(bbP, encode_length, hole_size); - BitBuffer_rewind_to(bbP, saved_byte_position); - MIH_C_LIST_LENGTH_encode(bbP, encode_length); - BitBuffer_rewind_to(bbP, end_byte_position + hole_size); - - // ------- LinkParametersReportList_list-------- - // TYPE - tlv = MIH_C_TLV_LINK_PARAMETER_REPORT_LIST; - MIH_C_TLV_TYPE_encode(bbP, &tlv); - - // VALUE - saved_byte_position = BitBuffer_getPosition(bbP); - MIH_C_LINK_PARAM_RPT_LIST_encode(bbP, &primitiveP->LinkParametersReportList_list); - end_byte_position = BitBuffer_getPosition(bbP); - - // LENGTH - encode_length = end_byte_position - saved_byte_position; - hole_size = MIH_C_LIST_LENGTH_get_encode_num_bytes(encode_length); - BitBuffer_write_shift_last_n_bytes_right(bbP, encode_length, hole_size); - BitBuffer_rewind_to(bbP, saved_byte_position); - MIH_C_LIST_LENGTH_encode(bbP, encode_length); - BitBuffer_rewind_to(bbP, end_byte_position + hole_size); - - return MIH_PRIMITIVE_ENCODE_OK; -} -//----------------------------------------------------------------------------- -int MIH_C_Link_Primitive_Encode_Link_Going_Down_indication(Bit_Buffer_t* bbP, MIH_C_Link_Going_Down_indication_t *primitiveP) -{ - //----------------------------------------------------------------------------- - MIH_C_TLV_TYPE_T tlv; - unsigned int saved_byte_position; - unsigned int end_byte_position; - unsigned int hole_size; - u_int16_t encode_length; - - // ------- LinkIdentifier-------- - // TYPE - tlv = MIH_C_TLV_LINK_IDENTIFIER; - MIH_C_TLV_TYPE_encode(bbP, &tlv); - - // VALUE - saved_byte_position = BitBuffer_getPosition(bbP); - MIH_C_LINK_TUPLE_ID_encode(bbP, &primitiveP->LinkIdentifier); - end_byte_position = BitBuffer_getPosition(bbP); - - // LENGTH - encode_length = end_byte_position - saved_byte_position; - hole_size = MIH_C_LIST_LENGTH_get_encode_num_bytes(encode_length); - BitBuffer_write_shift_last_n_bytes_right(bbP, encode_length, hole_size); - BitBuffer_rewind_to(bbP, saved_byte_position); - MIH_C_LIST_LENGTH_encode(bbP, encode_length); - BitBuffer_rewind_to(bbP, end_byte_position + hole_size); - - // ------- TimeInterval-------- - // TYPE - tlv = MIH_C_TLV_LINK_TIME_INTERVAL; - MIH_C_TLV_TYPE_encode(bbP, &tlv); - - MIH_C_LIST_LENGTH_encode(bbP, sizeof(MIH_C_UNSIGNED_INT2_T)); - // VALUE - MIH_C_UNSIGNED_INT2_encode(bbP, &primitiveP->TimeInterval); - - // ------- LinkGoingDownReason-------- - // TYPE - tlv = MIH_C_TLV_LINK_GOING_DOWN_REASON_CODE; - MIH_C_TLV_TYPE_encode(bbP, &tlv); - - MIH_C_LIST_LENGTH_encode(bbP, sizeof(MIH_C_LINK_GD_REASON_T)); - // VALUE - MIH_C_LINK_GD_REASON_encode(bbP, &primitiveP->LinkGoingDownReason); - - return MIH_PRIMITIVE_ENCODE_OK; -} -//----------------------------------------------------------------------------- -int MIH_C_Link_Primitive_Encode_Link_Down_indication(Bit_Buffer_t* bbP, MIH_C_Link_Down_indication_t *primitiveP) -{ - //----------------------------------------------------------------------------- - MIH_C_TLV_TYPE_T tlv; - unsigned int saved_byte_position; - unsigned int end_byte_position; - unsigned int hole_size; - u_int16_t encode_length; - - // ------- LinkIdentifier-------- - // TYPE - tlv = MIH_C_TLV_LINK_IDENTIFIER; - MIH_C_TLV_TYPE_encode(bbP, &tlv); - - // VALUE - saved_byte_position = BitBuffer_getPosition(bbP); - MIH_C_LINK_TUPLE_ID_encode(bbP, &primitiveP->LinkIdentifier); - end_byte_position = BitBuffer_getPosition(bbP); - - // LENGTH - encode_length = end_byte_position - saved_byte_position; - hole_size = MIH_C_LIST_LENGTH_get_encode_num_bytes(encode_length); - BitBuffer_write_shift_last_n_bytes_right(bbP, encode_length, hole_size); - BitBuffer_rewind_to(bbP, saved_byte_position); - MIH_C_LIST_LENGTH_encode(bbP, encode_length); - BitBuffer_rewind_to(bbP, end_byte_position + hole_size); - - // ------- OldAccessRouter-------- - if (primitiveP->OldAccessRouter != NULL) { - // TYPE - tlv = MIH_C_TLV_OLD_ACCESS_ROUTER; - MIH_C_TLV_TYPE_encode(bbP, &tlv); - - // VALUE - saved_byte_position = BitBuffer_getPosition(bbP); - MIH_C_LINK_ADDR_encode(bbP, primitiveP->OldAccessRouter); - end_byte_position = BitBuffer_getPosition(bbP); - - // LENGTH - encode_length = end_byte_position - saved_byte_position; - hole_size = MIH_C_LIST_LENGTH_get_encode_num_bytes(encode_length); - BitBuffer_write_shift_last_n_bytes_right(bbP, encode_length, hole_size); - BitBuffer_rewind_to(bbP, saved_byte_position); - MIH_C_LIST_LENGTH_encode(bbP, encode_length); - BitBuffer_rewind_to(bbP, end_byte_position + hole_size); - } - - // ------- ReasonCode-------- - // TYPE - tlv = MIH_C_TLV_LINK_DOWN_REASON_CODE; - MIH_C_TLV_TYPE_encode(bbP, &tlv); - - MIH_C_LIST_LENGTH_encode(bbP, sizeof(MIH_C_LINK_DN_REASON_T)); - // VALUE - MIH_C_LINK_DN_REASON_encode(bbP, &primitiveP->ReasonCode); - - return MIH_PRIMITIVE_ENCODE_OK; -} -//----------------------------------------------------------------------------- -int MIH_C_Link_Primitive_Encode_Link_Capability_Discover_confirm(Bit_Buffer_t* bbP, MIH_C_Link_Capability_Discover_confirm_t *primitiveP) -{ - //----------------------------------------------------------------------------- - MIH_C_TLV_TYPE_T tlv; - u_int16_t encode_length; - - //--------- Status ------------ - // TYPE - tlv = MIH_C_TLV_STATUS; - MIH_C_TLV_TYPE_encode(bbP, &tlv); - // LENGTH - encode_length = sizeof(MIH_C_STATUS_T); - MIH_C_LIST_LENGTH_encode(bbP, encode_length); - // VALUE - MIH_C_STATUS_encode(bbP, &primitiveP->Status); - - - //--------- SupportedLinkEventList ------------ - if (primitiveP->SupportedLinkEventList != NULL) { - // TYPE - tlv = MIH_C_TLV_LINK_EVENT_LIST; - MIH_C_TLV_TYPE_encode(bbP, &tlv); - // LENGTH - encode_length = sizeof(MIH_C_LINK_EVENT_LIST_T); - MIH_C_LIST_LENGTH_encode(bbP, encode_length); - // VALUE - MIH_C_LINK_EVENT_LIST_encode(bbP, primitiveP->SupportedLinkEventList); - } - - - //--------- SupportedLinkCommandList ------------ - if (primitiveP->SupportedLinkCommandList != NULL) { - // TYPE - tlv = MIH_C_TLV_LINK_CMD_LIST; - MIH_C_TLV_TYPE_encode(bbP, &tlv); - // LENGTH - encode_length = sizeof(MIH_C_LINK_CMD_LIST_T); - MIH_C_LIST_LENGTH_encode(bbP, encode_length); - // VALUE - MIH_C_LINK_CMD_LIST_encode(bbP, primitiveP->SupportedLinkCommandList); - } - - return MIH_PRIMITIVE_ENCODE_OK; -} -//----------------------------------------------------------------------------- -int MIH_C_Link_Primitive_Link_Capability_Discover_confirm2String(MIH_C_Link_Capability_Discover_confirm_t *primitiveP, char* bufP) -{ - //----------------------------------------------------------------------------- - - unsigned int buffer_index = 0; - buffer_index += sprintf(&bufP[buffer_index], "--------------------------------------------------\n"); - buffer_index += sprintf(&bufP[buffer_index], "- PRIMITIVE Capability_Discover.confirm -\n"); - buffer_index += sprintf(&bufP[buffer_index], "--------------------------------------------------\n"); - buffer_index += sprintf(&bufP[buffer_index], "STATUS = "); - buffer_index += MIH_C_STATUS2String(&primitiveP->Status, &bufP[buffer_index]); - buffer_index += sprintf(&bufP[buffer_index], "\nLINK_EVENT_LIST = "); - buffer_index += MIH_C_LINK_EVENT_LIST2String(primitiveP->SupportedLinkEventList, &bufP[buffer_index]); - buffer_index += sprintf(&bufP[buffer_index], "\nLINK_CMD_LIST = "); - buffer_index += MIH_C_LINK_CMD_LIST2String(primitiveP->SupportedLinkEventList, &bufP[buffer_index]); - buffer_index += sprintf(&bufP[buffer_index], "\n"); - return buffer_index; -} -//----------------------------------------------------------------------------- -int MIH_C_Link_Primitive_Encode_Link_Event_Subscribe_confirm(Bit_Buffer_t* bbP, MIH_C_Link_Event_Subscribe_confirm_t *primitiveP) -{ - //----------------------------------------------------------------------------- - MIH_C_TLV_TYPE_T tlv; - u_int16_t encode_length; - - //--------- Status ------------ - // TYPE - tlv = MIH_C_TLV_STATUS; - MIH_C_TLV_TYPE_encode(bbP, &tlv); - // LENGTH - encode_length = sizeof(MIH_C_STATUS_T); - MIH_C_LIST_LENGTH_encode(bbP, encode_length); - // VALUE - MIH_C_STATUS_encode(bbP, &primitiveP->Status); - - - //--------- SupportedLinkEventList ------------ - if (primitiveP->ResponseLinkEventList != NULL) { - // TYPE - tlv = MIH_C_TLV_LINK_EVENT_LIST; - MIH_C_TLV_TYPE_encode(bbP, &tlv); - // LENGTH - // Bitmap - encode_length = sizeof(MIH_C_LINK_EVENT_LIST_T); - MIH_C_LIST_LENGTH_encode(bbP, encode_length); - // VALUE - MIH_C_LINK_EVENT_LIST_encode(bbP, primitiveP->ResponseLinkEventList); - } - - return MIH_PRIMITIVE_ENCODE_OK; -} -//----------------------------------------------------------------------------- -int MIH_C_Link_Primitive_Encode_Link_Event_Unsubscribe_confirm(Bit_Buffer_t* bbP, MIH_C_Link_Event_Unsubscribe_confirm_t *primitiveP) -{ - //----------------------------------------------------------------------------- - MIH_C_TLV_TYPE_T tlv; - u_int16_t encode_length; - - //--------- Status ------------ - // TYPE - tlv = MIH_C_TLV_STATUS; - MIH_C_TLV_TYPE_encode(bbP, &tlv); - // LENGTH - encode_length = sizeof(MIH_C_STATUS_T); - MIH_C_LIST_LENGTH_encode(bbP, encode_length); - // VALUE - MIH_C_STATUS_encode(bbP, &primitiveP->Status); - - - //--------- SupportedLinkEventList ------------ - if (primitiveP->ResponseLinkEventList != NULL) { - // TYPE - tlv = MIH_C_TLV_LINK_EVENT_LIST; - MIH_C_TLV_TYPE_encode(bbP, &tlv); - // LENGTH - // Bitmap - encode_length = sizeof(MIH_C_LINK_EVENT_LIST_T); - MIH_C_LIST_LENGTH_encode(bbP, encode_length); - // VALUE - MIH_C_LINK_EVENT_LIST_encode(bbP, primitiveP->ResponseLinkEventList); - } - - return MIH_PRIMITIVE_ENCODE_OK; -} -//----------------------------------------------------------------------------- -int MIH_C_Link_Primitive_Encode_Link_Configure_Thresholds_confirm(Bit_Buffer_t* bbP, MIH_C_Link_Configure_Thresholds_confirm_t *primitiveP) -{ - //----------------------------------------------------------------------------- - MIH_C_TLV_TYPE_T tlv; - u_int16_t encode_length; - - //--------- Status ------------ - // TYPE - tlv = MIH_C_TLV_STATUS; - MIH_C_TLV_TYPE_encode(bbP, &tlv); - // LENGTH - encode_length = sizeof(MIH_C_STATUS_T); - MIH_C_LIST_LENGTH_encode(bbP, encode_length); - // VALUE - MIH_C_STATUS_encode(bbP, &primitiveP->Status); - - - //--------- SupportedLinkEventList ------------ - if (primitiveP->LinkConfigureStatusList_list != NULL) { - // TYPE - tlv = MIH_C_TLV_CONFIGURE_RESPONSE_LIST; - MIH_C_TLV_TYPE_encode(bbP, &tlv); - // LENGTH - encode_length = sizeof(MIH_C_LINK_CFG_STATUS_T) * primitiveP->LinkConfigureStatusList_list->length; - MIH_C_LIST_LENGTH_encode(bbP, encode_length); - // VALUE - MIH_C_LINK_CFG_STATUS_LIST_encode(bbP, primitiveP->LinkConfigureStatusList_list); - } - - return MIH_PRIMITIVE_ENCODE_OK; -} -//----------------------------------------------------------------------------- -int MIH_C_Link_Primitive_Encode_Link_Get_Parameters_confirm(Bit_Buffer_t* bbP, MIH_C_Link_Get_Parameters_confirm_t *primitiveP) -{ - //----------------------------------------------------------------------------- - MIH_C_TLV_TYPE_T tlv; - unsigned int saved_byte_position; - unsigned int end_byte_position; - unsigned int hole_size; - u_int16_t encode_length; - - //--------- Status ------------ - // TYPE - tlv = MIH_C_TLV_STATUS; - MIH_C_TLV_TYPE_encode(bbP, &tlv); - // LENGTH - encode_length = sizeof(MIH_C_STATUS_T); - MIH_C_LIST_LENGTH_encode(bbP, encode_length); - // VALUE - MIH_C_STATUS_encode(bbP, &primitiveP->Status); - - //--------- LinkParametersStatusList_list ------------ - // TYPE - tlv = MIH_C_TLV_LINK_PARAMETERS_STATUS_LIST; - MIH_C_TLV_TYPE_encode(bbP, &tlv); - // VALUE - saved_byte_position = BitBuffer_getPosition(bbP); - MIH_C_LINK_PARAM_LIST_encode(bbP, primitiveP->LinkParametersStatusList_list); - end_byte_position = BitBuffer_getPosition(bbP); - - // LENGTH (BECAUSE LinkParametersStatusList_list contains a list) - encode_length = end_byte_position - saved_byte_position; - hole_size = MIH_C_LIST_LENGTH_get_encode_num_bytes(encode_length); - BitBuffer_write_shift_last_n_bytes_right(bbP, encode_length, hole_size); - BitBuffer_rewind_to(bbP, saved_byte_position); - MIH_C_LIST_LENGTH_encode(bbP, encode_length); - BitBuffer_rewind_to(bbP, end_byte_position + hole_size); - - //--------- LinkStatesResponse_list ------------ - // TYPE - tlv = MIH_C_TLV_LINK_STATES_RSP_LIST; - MIH_C_TLV_TYPE_encode(bbP, &tlv); - // VALUE - saved_byte_position = BitBuffer_getPosition(bbP); - MIH_C_LINK_STATES_RSP_LIST_encode(bbP, primitiveP->LinkStatesResponse_list); - end_byte_position = BitBuffer_getPosition(bbP); - // LENGTH (DONE AFTER BECAUSE CONTAINS CHOICES OF NOT EQUAL SIZES) - encode_length = end_byte_position - saved_byte_position; - hole_size = MIH_C_LIST_LENGTH_get_encode_num_bytes(encode_length); - BitBuffer_write_shift_last_n_bytes_right(bbP, encode_length, hole_size); - BitBuffer_rewind_to(bbP, saved_byte_position); - MIH_C_LIST_LENGTH_encode(bbP, encode_length); - BitBuffer_rewind_to(bbP, end_byte_position + hole_size); - - //--------- LinkDescriptorsResponse_list ------------ - // TYPE - tlv = MIH_C_TLV_LINK_DESC_RSP_LIST; - MIH_C_TLV_TYPE_encode(bbP, &tlv); - // VALUE - saved_byte_position = BitBuffer_getPosition(bbP); - MIH_C_LINK_DESC_RSP_LIST_encode(bbP, primitiveP->LinkDescriptorsResponse_list); - end_byte_position = BitBuffer_getPosition(bbP); - // LENGTH - encode_length = end_byte_position - saved_byte_position; - hole_size = MIH_C_LIST_LENGTH_get_encode_num_bytes(encode_length); - BitBuffer_write_shift_last_n_bytes_right(bbP, encode_length, hole_size); - BitBuffer_rewind_to(bbP, saved_byte_position); - MIH_C_LIST_LENGTH_encode(bbP, encode_length); - BitBuffer_rewind_to(bbP, end_byte_position + hole_size); - - - return MIH_PRIMITIVE_ENCODE_OK; -} -//----------------------------------------------------------------------------- -int MIH_C_Link_Primitive_Encode_Link_Action_confirm(Bit_Buffer_t* bbP, MIH_C_Link_Action_confirm_t *primitiveP) -{ - //----------------------------------------------------------------------------- - MIH_C_TLV_TYPE_T tlv; - unsigned int saved_byte_position; - unsigned int end_byte_position; - unsigned int hole_size; - u_int16_t encode_length; - - //--------- Status ------------ - // TYPE - tlv = MIH_C_TLV_STATUS; - MIH_C_TLV_TYPE_encode(bbP, &tlv); - // LENGTH - encode_length = sizeof(MIH_C_STATUS_T); - MIH_C_LIST_LENGTH_encode(bbP, encode_length); - // VALUE - MIH_C_STATUS_encode(bbP, &primitiveP->Status); - - if (primitiveP->Status == MIH_C_STATUS_SUCCESS) { - if (primitiveP->ScanResponseSet_list != NULL) { - //--------- ScanResponseSet_list ------------ - // TYPE - tlv = MIH_C_TLV_LINK_SCAN_RSP_LIST; - MIH_C_TLV_TYPE_encode(bbP, &tlv); - // VALUE - saved_byte_position = BitBuffer_getPosition(bbP); - MIH_C_LINK_SCAN_RSP_LIST_encode(bbP, primitiveP->ScanResponseSet_list); - end_byte_position = BitBuffer_getPosition(bbP); - - // LENGTH - encode_length = end_byte_position - saved_byte_position; - hole_size = MIH_C_LIST_LENGTH_get_encode_num_bytes(encode_length); - BitBuffer_write_shift_last_n_bytes_right(bbP, encode_length, hole_size); - BitBuffer_rewind_to(bbP, saved_byte_position); - MIH_C_LIST_LENGTH_encode(bbP, encode_length); - BitBuffer_rewind_to(bbP, end_byte_position + hole_size); - } - - //--------- LinkActionResult ------------ - // TYPE - tlv = MIH_C_TLV_LINK_AC_RESULT; - MIH_C_TLV_TYPE_encode(bbP, &tlv); - // VALUE - saved_byte_position = BitBuffer_getPosition(bbP); - MIH_C_LINK_AC_RESULT_encode(bbP, primitiveP->LinkActionResult); - end_byte_position = BitBuffer_getPosition(bbP); - - // LENGTH - encode_length = end_byte_position - saved_byte_position; - hole_size = MIH_C_LIST_LENGTH_get_encode_num_bytes(encode_length); - BitBuffer_write_shift_last_n_bytes_right(bbP, encode_length, hole_size); - BitBuffer_rewind_to(bbP, saved_byte_position); - MIH_C_LIST_LENGTH_encode(bbP, encode_length); - BitBuffer_rewind_to(bbP, end_byte_position + hole_size); - } - - return MIH_PRIMITIVE_ENCODE_OK; -} diff --git a/openair3/RAL-LTE/INTERFACE-802.21/DOXYGEN/Doxyfile b/openair3/RAL-LTE/INTERFACE-802.21/DOXYGEN/Doxyfile deleted file mode 100755 index 65e2c92f34..0000000000 --- a/openair3/RAL-LTE/INTERFACE-802.21/DOXYGEN/Doxyfile +++ /dev/null @@ -1,1554 +0,0 @@ -# Doxyfile 1.6.3 - -# This file describes the settings to be used by the documentation system -# doxygen (www.doxygen.org) for a project -# -# All text after a hash (#) is considered a comment and will be ignored -# The format is: -# TAG = value [value, ...] -# For lists items can also be appended using: -# TAG += value [value, ...] -# Values that contain spaces should be placed between quotes (" ") - -#--------------------------------------------------------------------------- -# Project related configuration options -#--------------------------------------------------------------------------- - -# This tag specifies the encoding used for all characters in the config file -# that follow. The default is UTF-8 which is also the encoding used for all -# text before the first occurrence of this tag. Doxygen uses libiconv (or the -# iconv built into libc) for the transcoding. See -# http://www.gnu.org/software/libiconv for the list of possible encodings. - -DOXYFILE_ENCODING = UTF-8 - -# The PROJECT_NAME tag is a single word (or a sequence of words surrounded -# by quotes) that should identify the project. - -PROJECT_NAME = MIH-C - -# The PROJECT_NUMBER tag can be used to enter a project or revision number. -# This could be handy for archiving the generated documentation or -# if some version control system is used. - -PROJECT_NUMBER = V0.1 - -# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) -# base path where the generated documentation will be put. -# If a relative path is entered, it will be relative to the location -# where doxygen was started. If left blank the current directory will be used. - -OUTPUT_DIRECTORY = ./html - -# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create -# 4096 sub-directories (in 2 levels) under the output directory of each output -# format and will distribute the generated files over these directories. -# Enabling this option can be useful when feeding doxygen a huge amount of -# source files, where putting all generated files in the same directory would -# otherwise cause performance problems for the file system. - -CREATE_SUBDIRS = NO - -# The OUTPUT_LANGUAGE tag is used to specify the language in which all -# documentation generated by doxygen is written. Doxygen will use this -# information to generate all constant output in the proper language. -# The default language is English, other supported languages are: -# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, -# Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German, -# Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English -# messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, -# Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, -# Slovene, Spanish, Swedish, Ukrainian, and Vietnamese. - -OUTPUT_LANGUAGE = English - -# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will -# include brief member descriptions after the members that are listed in -# the file and class documentation (similar to JavaDoc). -# Set to NO to disable this. - -BRIEF_MEMBER_DESC = YES - -# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend -# the brief description of a member or function before the detailed description. -# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the -# brief descriptions will be completely suppressed. - -REPEAT_BRIEF = YES - -# This tag implements a quasi-intelligent brief description abbreviator -# that is used to form the text in various listings. Each string -# in this list, if found as the leading text of the brief description, will be -# stripped from the text and the result after processing the whole list, is -# used as the annotated text. Otherwise, the brief description is used as-is. -# If left blank, the following values are used ("$name" is automatically -# replaced with the name of the entity): "The $name class" "The $name widget" -# "The $name file" "is" "provides" "specifies" "contains" -# "represents" "a" "an" "the" - -ABBREVIATE_BRIEF = - -# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then -# Doxygen will generate a detailed section even if there is only a brief -# description. - -ALWAYS_DETAILED_SEC = NO - -# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all -# inherited members of a class in the documentation of that class as if those -# members were ordinary class members. Constructors, destructors and assignment -# operators of the base classes will not be shown. - -INLINE_INHERITED_MEMB = NO - -# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full -# path before files name in the file list and in the header files. If set -# to NO the shortest path that makes the file name unique will be used. - -FULL_PATH_NAMES = NO - -# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag -# can be used to strip a user-defined part of the path. Stripping is -# only done if one of the specified strings matches the left-hand part of -# the path. The tag can be used to show relative paths in the file list. -# If left blank the directory from which doxygen is run is used as the -# path to strip. - -STRIP_FROM_PATH = - -# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of -# the path mentioned in the documentation of a class, which tells -# the reader which header file to include in order to use a class. -# If left blank only the name of the header file containing the class -# definition is used. Otherwise one should specify the include paths that -# are normally passed to the compiler using the -I flag. - -STRIP_FROM_INC_PATH = - -# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter -# (but less readable) file names. This can be useful is your file systems -# doesn't support long names like on DOS, Mac, or CD-ROM. - -SHORT_NAMES = NO - -# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen -# will interpret the first line (until the first dot) of a JavaDoc-style -# comment as the brief description. If set to NO, the JavaDoc -# comments will behave just like regular Qt-style comments -# (thus requiring an explicit @brief command for a brief description.) - -JAVADOC_AUTOBRIEF = NO - -# If the QT_AUTOBRIEF tag is set to YES then Doxygen will -# interpret the first line (until the first dot) of a Qt-style -# comment as the brief description. If set to NO, the comments -# will behave just like regular Qt-style comments (thus requiring -# an explicit \brief command for a brief description.) - -QT_AUTOBRIEF = NO - -# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen -# treat a multi-line C++ special comment block (i.e. a block of //! or /// -# comments) as a brief description. This used to be the default behaviour. -# The new default is to treat a multi-line C++ comment block as a detailed -# description. Set this tag to YES if you prefer the old behaviour instead. - -MULTILINE_CPP_IS_BRIEF = NO - -# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented -# member inherits the documentation from any documented member that it -# re-implements. - -INHERIT_DOCS = YES - -# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce -# a new page for each member. If set to NO, the documentation of a member will -# be part of the file/class/namespace that contains it. - -SEPARATE_MEMBER_PAGES = NO - -# The TAB_SIZE tag can be used to set the number of spaces in a tab. -# Doxygen uses this value to replace tabs by spaces in code fragments. - -TAB_SIZE = 8 - -# This tag can be used to specify a number of aliases that acts -# as commands in the documentation. An alias has the form "name=value". -# For example adding "sideeffect=\par Side Effects:\n" will allow you to -# put the command \sideeffect (or @sideeffect) in the documentation, which -# will result in a user-defined paragraph with heading "Side Effects:". -# You can put \n's in the value part of an alias to insert newlines. - -ALIASES = - -# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C -# sources only. Doxygen will then generate output that is more tailored for C. -# For instance, some of the names that are used will be different. The list -# of all members will be omitted, etc. - -OPTIMIZE_OUTPUT_FOR_C = YES - -# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java -# sources only. Doxygen will then generate output that is more tailored for -# Java. For instance, namespaces will be presented as packages, qualified -# scopes will look different, etc. - -OPTIMIZE_OUTPUT_JAVA = NO - -# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran -# sources only. Doxygen will then generate output that is more tailored for -# Fortran. - -OPTIMIZE_FOR_FORTRAN = NO - -# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL -# sources. Doxygen will then generate output that is tailored for -# VHDL. - -OPTIMIZE_OUTPUT_VHDL = NO - -# Doxygen selects the parser to use depending on the extension of the files it parses. -# With this tag you can assign which parser to use for a given extension. -# Doxygen has a built-in mapping, but you can override or extend it using this tag. -# The format is ext=language, where ext is a file extension, and language is one of -# the parsers supported by doxygen: IDL, Java, Javascript, C#, C, C++, D, PHP, -# Objective-C, Python, Fortran, VHDL, C, C++. For instance to make doxygen treat -# .inc files as Fortran files (default is PHP), and .f files as C (default is Fortran), -# use: inc=Fortran f=C. Note that for custom extensions you also need to set FILE_PATTERNS otherwise the files are not read by doxygen. - -EXTENSION_MAPPING = - -# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want -# to include (a tag file for) the STL sources as input, then you should -# set this tag to YES in order to let doxygen match functions declarations and -# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. -# func(std::string) {}). This also make the inheritance and collaboration -# diagrams that involve STL classes more complete and accurate. - -BUILTIN_STL_SUPPORT = NO - -# If you use Microsoft's C++/CLI language, you should set this option to YES to -# enable parsing support. - -CPP_CLI_SUPPORT = NO - -# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. -# Doxygen will parse them like normal C++ but will assume all classes use public -# instead of private inheritance when no explicit protection keyword is present. - -SIP_SUPPORT = NO - -# For Microsoft's IDL there are propget and propput attributes to indicate getter -# and setter methods for a property. Setting this option to YES (the default) -# will make doxygen to replace the get and set methods by a property in the -# documentation. This will only work if the methods are indeed getting or -# setting a simple type. If this is not the case, or you want to show the -# methods anyway, you should set this option to NO. - -IDL_PROPERTY_SUPPORT = YES - -# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC -# tag is set to YES, then doxygen will reuse the documentation of the first -# member in the group (if any) for the other members of the group. By default -# all members of a group must be documented explicitly. - -DISTRIBUTE_GROUP_DOC = NO - -# Set the SUBGROUPING tag to YES (the default) to allow class member groups of -# the same type (for instance a group of public functions) to be put as a -# subgroup of that type (e.g. under the Public Functions section). Set it to -# NO to prevent subgrouping. Alternatively, this can be done per class using -# the \nosubgrouping command. - -SUBGROUPING = YES - -# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum -# is documented as struct, union, or enum with the name of the typedef. So -# typedef struct TypeS {} TypeT, will appear in the documentation as a struct -# with name TypeT. When disabled the typedef will appear as a member of a file, -# namespace, or class. And the struct will be named TypeS. This can typically -# be useful for C code in case the coding convention dictates that all compound -# types are typedef'ed and only the typedef is referenced, never the tag name. - -TYPEDEF_HIDES_STRUCT = NO - -# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to -# determine which symbols to keep in memory and which to flush to disk. -# When the cache is full, less often used symbols will be written to disk. -# For small to medium size projects (<1000 input files) the default value is -# probably good enough. For larger projects a too small cache size can cause -# doxygen to be busy swapping symbols to and from disk most of the time -# causing a significant performance penality. -# If the system has enough physical memory increasing the cache will improve the -# performance by keeping more symbols in memory. Note that the value works on -# a logarithmic scale so increasing the size by one will rougly double the -# memory usage. The cache size is given by this formula: -# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, -# corresponding to a cache size of 2^16 = 65536 symbols - -SYMBOL_CACHE_SIZE = 0 - -#--------------------------------------------------------------------------- -# Build related configuration options -#--------------------------------------------------------------------------- - -# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in -# documentation are documented, even if no documentation was available. -# Private class members and static file members will be hidden unless -# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES - -EXTRACT_ALL = NO - -# If the EXTRACT_PRIVATE tag is set to YES all private members of a class -# will be included in the documentation. - -EXTRACT_PRIVATE = NO - -# If the EXTRACT_STATIC tag is set to YES all static members of a file -# will be included in the documentation. - -EXTRACT_STATIC = NO - -# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) -# defined locally in source files will be included in the documentation. -# If set to NO only classes defined in header files are included. - -EXTRACT_LOCAL_CLASSES = YES - -# This flag is only useful for Objective-C code. When set to YES local -# methods, which are defined in the implementation section but not in -# the interface are included in the documentation. -# If set to NO (the default) only methods in the interface are included. - -EXTRACT_LOCAL_METHODS = NO - -# If this flag is set to YES, the members of anonymous namespaces will be -# extracted and appear in the documentation as a namespace called -# 'anonymous_namespace{file}', where file will be replaced with the base -# name of the file that contains the anonymous namespace. By default -# anonymous namespace are hidden. - -EXTRACT_ANON_NSPACES = NO - -# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all -# undocumented members of documented classes, files or namespaces. -# If set to NO (the default) these members will be included in the -# various overviews, but no documentation section is generated. -# This option has no effect if EXTRACT_ALL is enabled. - -HIDE_UNDOC_MEMBERS = NO - -# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all -# undocumented classes that are normally visible in the class hierarchy. -# If set to NO (the default) these classes will be included in the various -# overviews. This option has no effect if EXTRACT_ALL is enabled. - -HIDE_UNDOC_CLASSES = NO - -# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all -# friend (class|struct|union) declarations. -# If set to NO (the default) these declarations will be included in the -# documentation. - -HIDE_FRIEND_COMPOUNDS = NO - -# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any -# documentation blocks found inside the body of a function. -# If set to NO (the default) these blocks will be appended to the -# function's detailed documentation block. - -HIDE_IN_BODY_DOCS = NO - -# The INTERNAL_DOCS tag determines if documentation -# that is typed after a \internal command is included. If the tag is set -# to NO (the default) then the documentation will be excluded. -# Set it to YES to include the internal documentation. - -INTERNAL_DOCS = NO - -# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate -# file names in lower-case letters. If set to YES upper-case letters are also -# allowed. This is useful if you have classes or files whose names only differ -# in case and if your file system supports case sensitive file names. Windows -# and Mac users are advised to set this option to NO. - -CASE_SENSE_NAMES = YES - -# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen -# will show members with their full class and namespace scopes in the -# documentation. If set to YES the scope will be hidden. - -HIDE_SCOPE_NAMES = NO - -# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen -# will put a list of the files that are included by a file in the documentation -# of that file. - -SHOW_INCLUDE_FILES = YES - -# If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen -# will list include files with double quotes in the documentation -# rather than with sharp brackets. - -FORCE_LOCAL_INCLUDES = NO - -# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] -# is inserted in the documentation for inline members. - -INLINE_INFO = YES - -# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen -# will sort the (detailed) documentation of file and class members -# alphabetically by member name. If set to NO the members will appear in -# declaration order. - -SORT_MEMBER_DOCS = YES - -# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the -# brief documentation of file, namespace and class members alphabetically -# by member name. If set to NO (the default) the members will appear in -# declaration order. - -SORT_BRIEF_DOCS = NO - -# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the (brief and detailed) documentation of class members so that constructors and destructors are listed first. If set to NO (the default) the constructors will appear in the respective orders defined by SORT_MEMBER_DOCS and SORT_BRIEF_DOCS. This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO. - -SORT_MEMBERS_CTORS_1ST = NO - -# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the -# hierarchy of group names into alphabetical order. If set to NO (the default) -# the group names will appear in their defined order. - -SORT_GROUP_NAMES = NO - -# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be -# sorted by fully-qualified names, including namespaces. If set to -# NO (the default), the class list will be sorted only by class name, -# not including the namespace part. -# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. -# Note: This option applies only to the class list, not to the -# alphabetical list. - -SORT_BY_SCOPE_NAME = NO - -# The GENERATE_TODOLIST tag can be used to enable (YES) or -# disable (NO) the todo list. This list is created by putting \todo -# commands in the documentation. - -GENERATE_TODOLIST = YES - -# The GENERATE_TESTLIST tag can be used to enable (YES) or -# disable (NO) the test list. This list is created by putting \test -# commands in the documentation. - -GENERATE_TESTLIST = YES - -# The GENERATE_BUGLIST tag can be used to enable (YES) or -# disable (NO) the bug list. This list is created by putting \bug -# commands in the documentation. - -GENERATE_BUGLIST = YES - -# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or -# disable (NO) the deprecated list. This list is created by putting -# \deprecated commands in the documentation. - -GENERATE_DEPRECATEDLIST= YES - -# The ENABLED_SECTIONS tag can be used to enable conditional -# documentation sections, marked by \if sectionname ... \endif. - -ENABLED_SECTIONS = - -# The MAX_INITIALIZER_LINES tag determines the maximum number of lines -# the initial value of a variable or define consists of for it to appear in -# the documentation. If the initializer consists of more lines than specified -# here it will be hidden. Use a value of 0 to hide initializers completely. -# The appearance of the initializer of individual variables and defines in the -# documentation can be controlled using \showinitializer or \hideinitializer -# command in the documentation regardless of this setting. - -MAX_INITIALIZER_LINES = 30 - -# Set the SHOW_USED_FILES tag to NO to disable the list of files generated -# at the bottom of the documentation of classes and structs. If set to YES the -# list will mention the files that were used to generate the documentation. - -SHOW_USED_FILES = YES - -# If the sources in your project are distributed over multiple directories -# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy -# in the documentation. The default is NO. - -SHOW_DIRECTORIES = NO - -# Set the SHOW_FILES tag to NO to disable the generation of the Files page. -# This will remove the Files entry from the Quick Index and from the -# Folder Tree View (if specified). The default is YES. - -SHOW_FILES = YES - -# Set the SHOW_NAMESPACES tag to NO to disable the generation of the -# Namespaces page. -# This will remove the Namespaces entry from the Quick Index -# and from the Folder Tree View (if specified). The default is YES. - -SHOW_NAMESPACES = YES - -# The FILE_VERSION_FILTER tag can be used to specify a program or script that -# doxygen should invoke to get the current version for each file (typically from -# the version control system). Doxygen will invoke the program by executing (via -# popen()) the command , where is the value of -# the FILE_VERSION_FILTER tag, and is the name of an input file -# provided by doxygen. Whatever the program writes to standard output -# is used as the file version. See the manual for examples. - -FILE_VERSION_FILTER = - -# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by -# doxygen. The layout file controls the global structure of the generated output files -# in an output format independent way. The create the layout file that represents -# doxygen's defaults, run doxygen with the -l option. You can optionally specify a -# file name after the option, if omitted DoxygenLayout.xml will be used as the name -# of the layout file. - -LAYOUT_FILE = - -#--------------------------------------------------------------------------- -# configuration options related to warning and progress messages -#--------------------------------------------------------------------------- - -# The QUIET tag can be used to turn on/off the messages that are generated -# by doxygen. Possible values are YES and NO. If left blank NO is used. - -QUIET = NO - -# The WARNINGS tag can be used to turn on/off the warning messages that are -# generated by doxygen. Possible values are YES and NO. If left blank -# NO is used. - -WARNINGS = YES - -# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings -# for undocumented members. If EXTRACT_ALL is set to YES then this flag will -# automatically be disabled. - -WARN_IF_UNDOCUMENTED = YES - -# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for -# potential errors in the documentation, such as not documenting some -# parameters in a documented function, or documenting parameters that -# don't exist or using markup commands wrongly. - -WARN_IF_DOC_ERROR = YES - -# This WARN_NO_PARAMDOC option can be abled to get warnings for -# functions that are documented, but have no documentation for their parameters -# or return value. If set to NO (the default) doxygen will only warn about -# wrong or incomplete parameter documentation, but not about the absence of -# documentation. - -WARN_NO_PARAMDOC = NO - -# The WARN_FORMAT tag determines the format of the warning messages that -# doxygen can produce. The string should contain the $file, $line, and $text -# tags, which will be replaced by the file and line number from which the -# warning originated and the warning text. Optionally the format may contain -# $version, which will be replaced by the version of the file (if it could -# be obtained via FILE_VERSION_FILTER) - -WARN_FORMAT = "$file:$line: $text" - -# The WARN_LOGFILE tag can be used to specify a file to which warning -# and error messages should be written. If left blank the output is written -# to stderr. - -WARN_LOGFILE = - -#--------------------------------------------------------------------------- -# configuration options related to the input files -#--------------------------------------------------------------------------- - -# The INPUT tag can be used to specify the files and/or directories that contain -# documented source files. You may enter file names like "myfile.cpp" or -# directories like "/usr/src/myproject". Separate the files or directories -# with spaces. - -INPUT = ./.. - -# This tag can be used to specify the character encoding of the source files -# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is -# also the default input encoding. Doxygen uses libiconv (or the iconv built -# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for -# the list of possible encodings. - -INPUT_ENCODING = UTF-8 - -# If the value of the INPUT tag contains directories, you can use the -# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank the following patterns are tested: -# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx -# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90 - -FILE_PATTERNS = *.h \ - RECURSIVE \ - = \ - NO - -# The RECURSIVE tag can be used to turn specify whether or not subdirectories -# should be searched for input files as well. Possible values are YES and NO. -# If left blank NO is used. - -RECURSIVE = NO - -# The EXCLUDE tag can be used to specify files and/or directories that should -# excluded from the INPUT source files. This way you can easily exclude a -# subdirectory from a directory tree whose root is specified with the INPUT tag. - -EXCLUDE = - -# The EXCLUDE_SYMLINKS tag can be used select whether or not files or -# directories that are symbolic links (a Unix filesystem feature) are excluded -# from the input. - -EXCLUDE_SYMLINKS = NO - -# If the value of the INPUT tag contains directories, you can use the -# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude -# certain files from those directories. Note that the wildcards are matched -# against the file with absolute path, so to exclude all test directories -# for example use the pattern */test/* - -EXCLUDE_PATTERNS = - -# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names -# (namespaces, classes, functions, etc.) that should be excluded from the -# output. The symbol name can be a fully qualified name, a word, or if the -# wildcard * is used, a substring. Examples: ANamespace, AClass, -# AClass::ANamespace, ANamespace::*Test - -EXCLUDE_SYMBOLS = - -# The EXAMPLE_PATH tag can be used to specify one or more files or -# directories that contain example code fragments that are included (see -# the \include command). - -EXAMPLE_PATH = - -# If the value of the EXAMPLE_PATH tag contains directories, you can use the -# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank all files are included. - -EXAMPLE_PATTERNS = - -# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be -# searched for input files to be used with the \include or \dontinclude -# commands irrespective of the value of the RECURSIVE tag. -# Possible values are YES and NO. If left blank NO is used. - -EXAMPLE_RECURSIVE = NO - -# The IMAGE_PATH tag can be used to specify one or more files or -# directories that contain image that are included in the documentation (see -# the \image command). - -IMAGE_PATH = images/ - -# The INPUT_FILTER tag can be used to specify a program that doxygen should -# invoke to filter for each input file. Doxygen will invoke the filter program -# by executing (via popen()) the command , where -# is the value of the INPUT_FILTER tag, and is the name of an -# input file. Doxygen will then use the output that the filter program writes -# to standard output. -# If FILTER_PATTERNS is specified, this tag will be -# ignored. - -INPUT_FILTER = - -# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern -# basis. -# Doxygen will compare the file name with each pattern and apply the -# filter if there is a match. -# The filters are a list of the form: -# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further -# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER -# is applied to all files. - -FILTER_PATTERNS = - -# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using -# INPUT_FILTER) will be used to filter the input files when producing source -# files to browse (i.e. when SOURCE_BROWSER is set to YES). - -FILTER_SOURCE_FILES = NO - -#--------------------------------------------------------------------------- -# configuration options related to source browsing -#--------------------------------------------------------------------------- - -# If the SOURCE_BROWSER tag is set to YES then a list of source files will -# be generated. Documented entities will be cross-referenced with these sources. -# Note: To get rid of all source code in the generated output, make sure also -# VERBATIM_HEADERS is set to NO. - -SOURCE_BROWSER = NO - -# Setting the INLINE_SOURCES tag to YES will include the body -# of functions and classes directly in the documentation. - -INLINE_SOURCES = NO - -# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct -# doxygen to hide any special comment blocks from generated source code -# fragments. Normal C and C++ comments will always remain visible. - -STRIP_CODE_COMMENTS = YES - -# If the REFERENCED_BY_RELATION tag is set to YES -# then for each documented function all documented -# functions referencing it will be listed. - -REFERENCED_BY_RELATION = YES - -# If the REFERENCES_RELATION tag is set to YES -# then for each documented function all documented entities -# called/used by that function will be listed. - -REFERENCES_RELATION = YES - -# If the REFERENCES_LINK_SOURCE tag is set to YES (the default) -# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from -# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will -# link to the source code. -# Otherwise they will link to the documentation. - -REFERENCES_LINK_SOURCE = YES - -# If the USE_HTAGS tag is set to YES then the references to source code -# will point to the HTML generated by the htags(1) tool instead of doxygen -# built-in source browser. The htags tool is part of GNU's global source -# tagging system (see http://www.gnu.org/software/global/global.html). You -# will need version 4.8.6 or higher. - -USE_HTAGS = NO - -# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen -# will generate a verbatim copy of the header file for each class for -# which an include is specified. Set to NO to disable this. - -VERBATIM_HEADERS = YES - -#--------------------------------------------------------------------------- -# configuration options related to the alphabetical class index -#--------------------------------------------------------------------------- - -# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index -# of all compounds will be generated. Enable this if the project -# contains a lot of classes, structs, unions or interfaces. - -ALPHABETICAL_INDEX = NO - -# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then -# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns -# in which this list will be split (can be a number in the range [1..20]) - -COLS_IN_ALPHA_INDEX = 5 - -# In case all classes in a project start with a common prefix, all -# classes will be put under the same header in the alphabetical index. -# The IGNORE_PREFIX tag can be used to specify one or more prefixes that -# should be ignored while generating the index headers. - -IGNORE_PREFIX = - -#--------------------------------------------------------------------------- -# configuration options related to the HTML output -#--------------------------------------------------------------------------- - -# If the GENERATE_HTML tag is set to YES (the default) Doxygen will -# generate HTML output. - -GENERATE_HTML = YES - -# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `html' will be used as the default path. - -HTML_OUTPUT = html - -# The HTML_FILE_EXTENSION tag can be used to specify the file extension for -# each generated HTML page (for example: .htm,.php,.asp). If it is left blank -# doxygen will generate files with .html extension. - -HTML_FILE_EXTENSION = .html - -# The HTML_HEADER tag can be used to specify a personal HTML header for -# each generated HTML page. If it is left blank doxygen will generate a -# standard header. - -HTML_HEADER = - -# The HTML_FOOTER tag can be used to specify a personal HTML footer for -# each generated HTML page. If it is left blank doxygen will generate a -# standard footer. - -HTML_FOOTER = footer.html - -# The HTML_STYLESHEET tag can be used to specify a user-defined cascading -# style sheet that is used by each HTML page. It can be used to -# fine-tune the look of the HTML output. If the tag is left blank doxygen -# will generate a default style sheet. Note that doxygen will try to copy -# the style sheet file to the HTML output directory, so don't put your own -# stylesheet in the HTML output directory as well, or it will be erased! - -HTML_STYLESHEET = - -# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML -# page will contain the date and time when the page was generated. Setting -# this to NO can help when comparing the output of multiple runs. - -HTML_TIMESTAMP = YES - -# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, -# files or namespaces will be aligned in HTML using tables. If set to -# NO a bullet list will be used. - -HTML_ALIGN_MEMBERS = YES - -# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML -# documentation will contain sections that can be hidden and shown after the -# page has loaded. For this to work a browser that supports -# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox -# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari). - -HTML_DYNAMIC_SECTIONS = NO - -# If the GENERATE_DOCSET tag is set to YES, additional index files -# will be generated that can be used as input for Apple's Xcode 3 -# integrated development environment, introduced with OSX 10.5 (Leopard). -# To create a documentation set, doxygen will generate a Makefile in the -# HTML output directory. Running make will produce the docset in that -# directory and running "make install" will install the docset in -# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find -# it at startup. -# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information. - -GENERATE_DOCSET = NO - -# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the -# feed. A documentation feed provides an umbrella under which multiple -# documentation sets from a single provider (such as a company or product suite) -# can be grouped. - -DOCSET_FEEDNAME = "Doxygen generated docs" - -# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that -# should uniquely identify the documentation set bundle. This should be a -# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen -# will append .docset to the name. - -DOCSET_BUNDLE_ID = org.doxygen.Project - -# If the GENERATE_HTMLHELP tag is set to YES, additional index files -# will be generated that can be used as input for tools like the -# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) -# of the generated HTML documentation. - -GENERATE_HTMLHELP = NO - -# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can -# be used to specify the file name of the resulting .chm file. You -# can add a path in front of the file if the result should not be -# written to the html output directory. - -CHM_FILE = - -# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can -# be used to specify the location (absolute path including file name) of -# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run -# the HTML help compiler on the generated index.hhp. - -HHC_LOCATION = - -# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag -# controls if a separate .chi index file is generated (YES) or that -# it should be included in the master .chm file (NO). - -GENERATE_CHI = NO - -# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING -# is used to encode HtmlHelp index (hhk), content (hhc) and project file -# content. - -CHM_INDEX_ENCODING = - -# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag -# controls whether a binary table of contents is generated (YES) or a -# normal table of contents (NO) in the .chm file. - -BINARY_TOC = NO - -# The TOC_EXPAND flag can be set to YES to add extra items for group members -# to the contents of the HTML help documentation and to the tree view. - -TOC_EXPAND = NO - -# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER -# are set, an additional index file will be generated that can be used as input for -# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated -# HTML documentation. - -GENERATE_QHP = NO - -# If the QHG_LOCATION tag is specified, the QCH_FILE tag can -# be used to specify the file name of the resulting .qch file. -# The path specified is relative to the HTML output folder. - -QCH_FILE = - -# The QHP_NAMESPACE tag specifies the namespace to use when generating -# Qt Help Project output. For more information please see -# http://doc.trolltech.com/qthelpproject.html#namespace - -QHP_NAMESPACE = org.doxygen.Project - -# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating -# Qt Help Project output. For more information please see -# http://doc.trolltech.com/qthelpproject.html#virtual-folders - -QHP_VIRTUAL_FOLDER = doc - -# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to add. -# For more information please see -# http://doc.trolltech.com/qthelpproject.html#custom-filters - -QHP_CUST_FILTER_NAME = - -# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the custom filter to add.For more information please see -# Qt Help Project / Custom Filters. - -QHP_CUST_FILTER_ATTRS = - -# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this project's -# filter section matches. -# Qt Help Project / Filter Attributes. - -QHP_SECT_FILTER_ATTRS = - -# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can -# be used to specify the location of Qt's qhelpgenerator. -# If non-empty doxygen will try to run qhelpgenerator on the generated -# .qhp file. - -QHG_LOCATION = - -# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files -# will be generated, which together with the HTML files, form an Eclipse help -# plugin. To install this plugin and make it available under the help contents -# menu in Eclipse, the contents of the directory containing the HTML and XML -# files needs to be copied into the plugins directory of eclipse. The name of -# the directory within the plugins directory should be the same as -# the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before the help appears. - -GENERATE_ECLIPSEHELP = NO - -# A unique identifier for the eclipse help plugin. When installing the plugin -# the directory name containing the HTML and XML files should also have -# this name. - -ECLIPSE_DOC_ID = org.doxygen.Project - -# The DISABLE_INDEX tag can be used to turn on/off the condensed index at -# top of each HTML page. The value NO (the default) enables the index and -# the value YES disables it. - -DISABLE_INDEX = NO - -# This tag can be used to set the number of enum values (range [1..20]) -# that doxygen will group on one line in the generated HTML documentation. - -ENUM_VALUES_PER_LINE = 4 - -# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index -# structure should be generated to display hierarchical information. -# If the tag value is set to YES, a side panel will be generated -# containing a tree-like index structure (just like the one that -# is generated for HTML Help). For this to work a browser that supports -# JavaScript, DHTML, CSS and frames is required (i.e. any modern browser). -# Windows users are probably better off using the HTML help feature. - -GENERATE_TREEVIEW = YES - -# By enabling USE_INLINE_TREES, doxygen will generate the Groups, Directories, -# and Class Hierarchy pages using a tree view instead of an ordered list. - -USE_INLINE_TREES = NO - -# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be -# used to set the initial width (in pixels) of the frame in which the tree -# is shown. - -TREEVIEW_WIDTH = 250 - -# Use this tag to change the font size of Latex formulas included -# as images in the HTML documentation. The default is 10. Note that -# when you change the font size after a successful doxygen run you need -# to manually remove any form_*.png images from the HTML output directory -# to force them to be regenerated. - -FORMULA_FONTSIZE = 10 - -# When the SEARCHENGINE tag is enabled doxygen will generate a search box for the HTML output. The underlying search engine uses javascript -# and DHTML and should work on any modern browser. Note that when using HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) there is already a search function so this one should -# typically be disabled. For large projects the javascript based search engine -# can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution. - -SEARCHENGINE = NO - -# When the SERVER_BASED_SEARCH tag is enabled the search engine will be implemented using a PHP enabled web server instead of at the web client using Javascript. Doxygen will generate the search PHP script and index -# file to put on the web server. The advantage of the server based approach is that it scales better to large projects and allows full text search. The disadvances is that it is more difficult to setup -# and does not have live searching capabilities. - -SERVER_BASED_SEARCH = NO - -#--------------------------------------------------------------------------- -# configuration options related to the LaTeX output -#--------------------------------------------------------------------------- - -# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will -# generate Latex output. - -GENERATE_LATEX = NO - -# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `latex' will be used as the default path. - -LATEX_OUTPUT = latex - -# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be -# invoked. If left blank `latex' will be used as the default command name. -# Note that when enabling USE_PDFLATEX this option is only used for -# generating bitmaps for formulas in the HTML output, but not in the -# Makefile that is written to the output directory. - -LATEX_CMD_NAME = latex - -# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to -# generate index for LaTeX. If left blank `makeindex' will be used as the -# default command name. - -MAKEINDEX_CMD_NAME = makeindex - -# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact -# LaTeX documents. This may be useful for small projects and may help to -# save some trees in general. - -COMPACT_LATEX = NO - -# The PAPER_TYPE tag can be used to set the paper type that is used -# by the printer. Possible values are: a4, a4wide, letter, legal and -# executive. If left blank a4wide will be used. - -PAPER_TYPE = a4wide - -# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX -# packages that should be included in the LaTeX output. - -EXTRA_PACKAGES = - -# The LATEX_HEADER tag can be used to specify a personal LaTeX header for -# the generated latex document. The header should contain everything until -# the first chapter. If it is left blank doxygen will generate a -# standard header. Notice: only use this tag if you know what you are doing! - -LATEX_HEADER = - -# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated -# is prepared for conversion to pdf (using ps2pdf). The pdf file will -# contain links (just like the HTML output) instead of page references -# This makes the output suitable for online browsing using a pdf viewer. - -PDF_HYPERLINKS = NO - -# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of -# plain latex in the generated Makefile. Set this option to YES to get a -# higher quality PDF documentation. - -USE_PDFLATEX = NO - -# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. -# command to the generated LaTeX files. This will instruct LaTeX to keep -# running if errors occur, instead of asking the user for help. -# This option is also used when generating formulas in HTML. - -LATEX_BATCHMODE = NO - -# If LATEX_HIDE_INDICES is set to YES then doxygen will not -# include the index chapters (such as File Index, Compound Index, etc.) -# in the output. - -LATEX_HIDE_INDICES = NO - -# If LATEX_SOURCE_CODE is set to YES then doxygen will include source code with syntax highlighting in the LaTeX output. Note that which sources are shown also depends on other settings such as SOURCE_BROWSER. - -LATEX_SOURCE_CODE = NO - -#--------------------------------------------------------------------------- -# configuration options related to the RTF output -#--------------------------------------------------------------------------- - -# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output -# The RTF output is optimized for Word 97 and may not look very pretty with -# other RTF readers or editors. - -GENERATE_RTF = NO - -# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `rtf' will be used as the default path. - -RTF_OUTPUT = rtf - -# If the COMPACT_RTF tag is set to YES Doxygen generates more compact -# RTF documents. This may be useful for small projects and may help to -# save some trees in general. - -COMPACT_RTF = NO - -# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated -# will contain hyperlink fields. The RTF file will -# contain links (just like the HTML output) instead of page references. -# This makes the output suitable for online browsing using WORD or other -# programs which support those fields. -# Note: wordpad (write) and others do not support links. - -RTF_HYPERLINKS = NO - -# Load stylesheet definitions from file. Syntax is similar to doxygen's -# config file, i.e. a series of assignments. You only have to provide -# replacements, missing definitions are set to their default value. - -RTF_STYLESHEET_FILE = - -# Set optional variables used in the generation of an rtf document. -# Syntax is similar to doxygen's config file. - -RTF_EXTENSIONS_FILE = - -#--------------------------------------------------------------------------- -# configuration options related to the man page output -#--------------------------------------------------------------------------- - -# If the GENERATE_MAN tag is set to YES (the default) Doxygen will -# generate man pages - -GENERATE_MAN = NO - -# The MAN_OUTPUT tag is used to specify where the man pages will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `man' will be used as the default path. - -MAN_OUTPUT = man - -# The MAN_EXTENSION tag determines the extension that is added to -# the generated man pages (default is the subroutine's section .3) - -MAN_EXTENSION = .3 - -# If the MAN_LINKS tag is set to YES and Doxygen generates man output, -# then it will generate one additional man file for each entity -# documented in the real man page(s). These additional files -# only source the real man page, but without them the man command -# would be unable to find the correct page. The default is NO. - -MAN_LINKS = NO - -#--------------------------------------------------------------------------- -# configuration options related to the XML output -#--------------------------------------------------------------------------- - -# If the GENERATE_XML tag is set to YES Doxygen will -# generate an XML file that captures the structure of -# the code including all documentation. - -GENERATE_XML = NO - -# The XML_OUTPUT tag is used to specify where the XML pages will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `xml' will be used as the default path. - -XML_OUTPUT = xml - -# The XML_SCHEMA tag can be used to specify an XML schema, -# which can be used by a validating XML parser to check the -# syntax of the XML files. - -XML_SCHEMA = - -# The XML_DTD tag can be used to specify an XML DTD, -# which can be used by a validating XML parser to check the -# syntax of the XML files. - -XML_DTD = - -# If the XML_PROGRAMLISTING tag is set to YES Doxygen will -# dump the program listings (including syntax highlighting -# and cross-referencing information) to the XML output. Note that -# enabling this will significantly increase the size of the XML output. - -XML_PROGRAMLISTING = YES - -#--------------------------------------------------------------------------- -# configuration options for the AutoGen Definitions output -#--------------------------------------------------------------------------- - -# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will -# generate an AutoGen Definitions (see autogen.sf.net) file -# that captures the structure of the code including all -# documentation. Note that this feature is still experimental -# and incomplete at the moment. - -GENERATE_AUTOGEN_DEF = NO - -#--------------------------------------------------------------------------- -# configuration options related to the Perl module output -#--------------------------------------------------------------------------- - -# If the GENERATE_PERLMOD tag is set to YES Doxygen will -# generate a Perl module file that captures the structure of -# the code including all documentation. Note that this -# feature is still experimental and incomplete at the -# moment. - -GENERATE_PERLMOD = NO - -# If the PERLMOD_LATEX tag is set to YES Doxygen will generate -# the necessary Makefile rules, Perl scripts and LaTeX code to be able -# to generate PDF and DVI output from the Perl module output. - -PERLMOD_LATEX = NO - -# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be -# nicely formatted so it can be parsed by a human reader. -# This is useful -# if you want to understand what is going on. -# On the other hand, if this -# tag is set to NO the size of the Perl module output will be much smaller -# and Perl will parse it just the same. - -PERLMOD_PRETTY = YES - -# The names of the make variables in the generated doxyrules.make file -# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. -# This is useful so different doxyrules.make files included by the same -# Makefile don't overwrite each other's variables. - -PERLMOD_MAKEVAR_PREFIX = - -#--------------------------------------------------------------------------- -# Configuration options related to the preprocessor -#--------------------------------------------------------------------------- - -# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will -# evaluate all C-preprocessor directives found in the sources and include -# files. - -ENABLE_PREPROCESSING = YES - -# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro -# names in the source code. If set to NO (the default) only conditional -# compilation will be performed. Macro expansion can be done in a controlled -# way by setting EXPAND_ONLY_PREDEF to YES. -#LG WAS NO -MACRO_EXPANSION = YES - -# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES -# then the macro expansion is limited to the macros specified with the -# PREDEFINED and EXPAND_AS_DEFINED tags. -#LG WAS NO -EXPAND_ONLY_PREDEF = YES - -# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files -# in the INCLUDE_PATH (see below) will be search if a #include is found. - -SEARCH_INCLUDES = YES - -# The INCLUDE_PATH tag can be used to specify one or more directories that -# contain include files that are not input files but should be processed by -# the preprocessor. - -INCLUDE_PATH = .. - -# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard -# patterns (like *.h and *.hpp) to filter out the header-files in the -# directories. If left blank, the patterns specified with FILE_PATTERNS will -# be used. - -INCLUDE_FILE_PATTERNS = - -# The PREDEFINED tag can be used to specify one or more macro names that -# are defined before the preprocessor is started (similar to the -D option of -# gcc). The argument of the tag is a list of macros of the form: name -# or name=definition (no spaces). If the definition and the = are -# omitted =1 is assumed. To prevent a macro definition from being -# undefined via #undef or recursively expanded use the := operator -# instead of the = operator. - -PREDEFINED = MIH_C_MEDIEVAL_EXTENSIONS=1 MIH_C_F1_BASIC_DATA_TYPES_CODEC_C=1 MIH_C_F2_GENERAL_DATA_TYPES_CODEC_C=1 MIH_C_F3_DATA_TYPES_FOR_ADDRESS_CODEC_C=1 MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC_C=1 MIH_C_F9_DATA_TYPES_FOR_QOS_CODEC_C=1 MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS_C=1 - -# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then -# this tag can be used to specify a list of macro names that should be expanded. -# The macro definition that is found in the sources will be used. -# Use the PREDEFINED tag if you want to use a different macro definition. - -EXPAND_AS_DEFINED = private_F1_codec protected_F1_codec public_F1_codec private_F2_codec protected_F2_codec public_F2_codec private_F3_codec protected_F3_codec public_F3_codec private_F4_codec protected_F4_codec public_F4_codec private_F9_codec protected_F9_codec public_F9_codec public_L2_codec protected_L2_codec private_L2_codec private_Medieval_extensions protected_Medieval_extensions public_Medieval_extensions private_bit_buffer protected_bit_buffer public_bit_buffer private_header_codec protected_header_codec public_header_codec private_mih_c_log protected_mih_c_log public_mih_c_log private_mih_c_msg_codec protected_mih_c_msg_codec public_mih_c_msg_codec private_mih_c_primitive_codec protected_mih_c_primitive_codec public_mih_c_primitive_codec - -# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then -# doxygen's preprocessor will remove all function-like macros that are alone -# on a line, have an all uppercase name, and do not end with a semicolon. Such -# function macros are typically used for boiler-plate code, and will confuse -# the parser if not removed. - -SKIP_FUNCTION_MACROS = YES - -#--------------------------------------------------------------------------- -# Configuration::additions related to external references -#--------------------------------------------------------------------------- - -# The TAGFILES option can be used to specify one or more tagfiles. -# Optionally an initial location of the external documentation -# can be added for each tagfile. The format of a tag file without -# this location is as follows: -# -# TAGFILES = file1 file2 ... -# Adding location for the tag files is done as follows: -# -# TAGFILES = file1=loc1 "file2 = loc2" ... -# where "loc1" and "loc2" can be relative or absolute paths or -# URLs. If a location is present for each tag, the installdox tool -# does not have to be run to correct the links. -# Note that each tag file must have a unique name -# (where the name does NOT include the path) -# If a tag file is not located in the directory in which doxygen -# is run, you must also specify the path to the tagfile here. - -TAGFILES = - -# When a file name is specified after GENERATE_TAGFILE, doxygen will create -# a tag file that is based on the input files it reads. - -GENERATE_TAGFILE = - -# If the ALLEXTERNALS tag is set to YES all external classes will be listed -# in the class index. If set to NO only the inherited external classes -# will be listed. - -ALLEXTERNALS = NO - -# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed -# in the modules index. If set to NO, only the current project's groups will -# be listed. - -EXTERNAL_GROUPS = YES - -# The PERL_PATH should be the absolute path and name of the perl script -# interpreter (i.e. the result of `which perl'). - -PERL_PATH = /usr/bin/perl - -#--------------------------------------------------------------------------- -# Configuration options related to the dot tool -#--------------------------------------------------------------------------- - -# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will -# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base -# or super classes. Setting the tag to NO turns the diagrams off. Note that -# this option is superseded by the HAVE_DOT option below. This is only a -# fallback. It is recommended to install and use dot, since it yields more -# powerful graphs. - -CLASS_DIAGRAMS = YES - -# You can define message sequence charts within doxygen comments using the \msc -# command. Doxygen will then run the mscgen tool (see -# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the -# documentation. The MSCGEN_PATH tag allows you to specify the directory where -# the mscgen tool resides. If left empty the tool is assumed to be found in the -# default search path. - -MSCGEN_PATH = - -# If set to YES, the inheritance and collaboration graphs will hide -# inheritance and usage relations if the target is undocumented -# or is not a class. - -HIDE_UNDOC_RELATIONS = YES - -# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is -# available from the path. This tool is part of Graphviz, a graph visualization -# toolkit from AT&T and Lucent Bell Labs. The other options in this section -# have no effect if this option is set to NO (the default) - -HAVE_DOT = NO - -# By default doxygen will write a font called FreeSans.ttf to the output -# directory and reference it in all dot files that doxygen generates. This -# font does not include all possible unicode characters however, so when you need -# these (or just want a differently looking font) you can specify the font name -# using DOT_FONTNAME. You need need to make sure dot is able to find the font, -# which can be done by putting it in a standard location or by setting the -# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory -# containing the font. - -DOT_FONTNAME = FreeSans - -# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. -# The default size is 10pt. - -DOT_FONTSIZE = 10 - -# By default doxygen will tell dot to use the output directory to look for the -# FreeSans.ttf font (which doxygen will put there itself). If you specify a -# different font using DOT_FONTNAME you can set the path where dot -# can find it using this tag. - -DOT_FONTPATH = - -# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for each documented class showing the direct and -# indirect inheritance relations. Setting this tag to YES will force the -# the CLASS_DIAGRAMS tag to NO. - -CLASS_GRAPH = YES - -# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for each documented class showing the direct and -# indirect implementation dependencies (inheritance, containment, and -# class references variables) of the class with other documented classes. - -COLLABORATION_GRAPH = YES - -# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for groups, showing the direct groups dependencies - -GROUP_GRAPHS = YES - -# If the UML_LOOK tag is set to YES doxygen will generate inheritance and -# collaboration diagrams in a style similar to the OMG's Unified Modeling -# Language. - -UML_LOOK = NO - -# If set to YES, the inheritance and collaboration graphs will show the -# relations between templates and their instances. - -TEMPLATE_RELATIONS = NO - -# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT -# tags are set to YES then doxygen will generate a graph for each documented -# file showing the direct and indirect include dependencies of the file with -# other documented files. - -INCLUDE_GRAPH = YES - -# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and -# HAVE_DOT tags are set to YES then doxygen will generate a graph for each -# documented header file showing the documented files that directly or -# indirectly include this file. - -INCLUDED_BY_GRAPH = YES - -# If the CALL_GRAPH and HAVE_DOT options are set to YES then -# doxygen will generate a call dependency graph for every global function -# or class method. Note that enabling this option will significantly increase -# the time of a run. So in most cases it will be better to enable call graphs -# for selected functions only using the \callgraph command. - -CALL_GRAPH = NO - -# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then -# doxygen will generate a caller dependency graph for every global function -# or class method. Note that enabling this option will significantly increase -# the time of a run. So in most cases it will be better to enable caller -# graphs for selected functions only using the \callergraph command. - -CALLER_GRAPH = NO - -# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen -# will graphical hierarchy of all classes instead of a textual one. - -GRAPHICAL_HIERARCHY = YES - -# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES -# then doxygen will show the dependencies a directory has on other directories -# in a graphical way. The dependency relations are determined by the #include -# relations between the files in the directories. - -DIRECTORY_GRAPH = YES - -# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images -# generated by dot. Possible values are png, jpg, or gif -# If left blank png will be used. - -DOT_IMAGE_FORMAT = png - -# The tag DOT_PATH can be used to specify the path where the dot tool can be -# found. If left blank, it is assumed the dot tool can be found in the path. - -DOT_PATH = /usr/bin/dot - -# The DOTFILE_DIRS tag can be used to specify one or more directories that -# contain dot files that are included in the documentation (see the -# \dotfile command). - -DOTFILE_DIRS = - -# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of -# nodes that will be shown in the graph. If the number of nodes in a graph -# becomes larger than this value, doxygen will truncate the graph, which is -# visualized by representing a node as a red box. Note that doxygen if the -# number of direct children of the root node in a graph is already larger than -# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note -# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. - -DOT_GRAPH_MAX_NODES = 50 - -# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the -# graphs generated by dot. A depth value of 3 means that only nodes reachable -# from the root by following a path via at most 3 edges will be shown. Nodes -# that lay further from the root node will be omitted. Note that setting this -# option to 1 or 2 may greatly reduce the computation time needed for large -# code bases. Also note that the size of a graph can be further restricted by -# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. - -MAX_DOT_GRAPH_DEPTH = 0 - -# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent -# background. This is disabled by default, because dot on Windows does not -# seem to support this out of the box. Warning: Depending on the platform used, -# enabling this option may lead to badly anti-aliased labels on the edges of -# a graph (i.e. they become hard to read). - -DOT_TRANSPARENT = NO - -# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output -# files in one run (i.e. multiple -o and -T options on the command line). This -# makes dot run faster, but since only newer versions of dot (>1.8.10) -# support this, this feature is disabled by default. - -DOT_MULTI_TARGETS = NO - -# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will -# generate a legend page explaining the meaning of the various boxes and -# arrows in the dot generated graphs. - -GENERATE_LEGEND = YES - -# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will -# remove the intermediate dot files that are used to generate -# the various graphs. - -DOT_CLEANUP = YES diff --git a/openair3/RAL-LTE/INTERFACE-802.21/DOXYGEN/footer.html b/openair3/RAL-LTE/INTERFACE-802.21/DOXYGEN/footer.html deleted file mode 100755 index b5b833a2dd..0000000000 --- a/openair3/RAL-LTE/INTERFACE-802.21/DOXYGEN/footer.html +++ /dev/null @@ -1,16 +0,0 @@ - - -  -  -
-EURECOM - PMIP6D -
- - - diff --git a/openair3/RAL-LTE/INTERFACE-802.21/INCLUDE/MIH_C.h b/openair3/RAL-LTE/INTERFACE-802.21/INCLUDE/MIH_C.h deleted file mode 100755 index cc0a036016..0000000000 --- a/openair3/RAL-LTE/INTERFACE-802.21/INCLUDE/MIH_C.h +++ /dev/null @@ -1,63 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ -/*! \file MIH_C.h - * \brief This file must be the only file to be included in code dealing with the MIH_C interface. - * \author BRIZZOLA Davide, GAUTHIER Lionel, MAUREL Frederic, WETTERWALD Michelle - * \date 2012 - * \version - * \note - * \bug - * \warning - */ - -#ifndef __MIH_C_H__ -# define __MIH_C_H__ -#include "MIH_C_bit_buffer.h" -#include "UTIL/LOG/log.h" -#include "MIH_C_Link_Constants.h" -#include "MIH_C_Types.h" -#include "MIH_C_header_codec.h" -#include "MIH_C_F1_basic_data_types_codec.h" -#include "MIH_C_F2_general_data_types_codec.h" -#include "MIH_C_F3_data_types_for_address_codec.h" -#include "MIH_C_F4_data_types_for_links_codec.h" -#include "MIH_C_F9_data_types_for_qos_codec.h" -#include "MIH_C_F13_data_types_for_information_elements_codec.h" -#include "MIH_C_L2_type_values_for_tlv_encoding.h" -#include "MIH_C_Medieval_extensions.h" -#include "MIH_C_Link_Primitives.h" -#include "MIH_C_Link_Messages.h" -#include "MIH_C_primitive_codec.h" -#include "MIH_C_msg_codec.h" - -void MIH_C_init(void); -void MIH_C_exit(void); - -#define DEBUG_TRACE_DETAILS -#endif diff --git a/openair3/RAL-LTE/INTERFACE-802.21/INCLUDE/MIH_C_F13_data_types_for_information_elements_codec.h b/openair3/RAL-LTE/INTERFACE-802.21/INCLUDE/MIH_C_F13_data_types_for_information_elements_codec.h deleted file mode 100755 index a0e4ba8772..0000000000 --- a/openair3/RAL-LTE/INTERFACE-802.21/INCLUDE/MIH_C_F13_data_types_for_information_elements_codec.h +++ /dev/null @@ -1,75 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ -/*! \file MIH_C_F13_data_types_for_information_elements_codec.h - * \brief This file defines the prototypes of the functions for coding and decoding Data type for information elements defined in Std 802.21-2008 Table F13. - * \author BRIZZOLA Davide, GAUTHIER Lionel, MAUREL Frederic, WETTERWALD Michelle - * \date 2012 - * \version - * \note - * \bug - * \warning - */ -/** \defgroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS F13 Data types for information elements - * \ingroup MIH_C_INTERFACE - * - * @{ - */ - -#ifndef __MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS_H__ -# define __MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS_H__ -//----------------------------------------------------------------------------- -# ifdef MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS_C -# define private_F13_codec(x) x -# define protected_F13_codec(x) x -# define public_F13_codec(x) x -# else -# ifdef MIH_C_INTERFACE -# define private_F13_codec(x) -# define protected_F13_codec(x) extern x -# define public_F13_codec(x) extern x -# else -# define private_F13_codec(x) -# define protected_F13_codec(x) -# define public_F13_codec(x) extern x -# endif -# endif -//----------------------------------------------------------------------------- -#include -#include -#include -#include -#include -#include -#include -//----------------------------------------------------------------------------- -#include "MIH_C.h" -//----------------------------------------------------------------------------- - -#endif -/** @}*/ diff --git a/openair3/RAL-LTE/INTERFACE-802.21/INCLUDE/MIH_C_F1_basic_data_types_codec.h b/openair3/RAL-LTE/INTERFACE-802.21/INCLUDE/MIH_C_F1_basic_data_types_codec.h deleted file mode 100755 index 6b6dfdb4b6..0000000000 --- a/openair3/RAL-LTE/INTERFACE-802.21/INCLUDE/MIH_C_F1_basic_data_types_codec.h +++ /dev/null @@ -1,133 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ -/*! \file MIH_C_F1_basic_data_types_codec.h - * \brief This file defines the prototypes of the functions for coding and decoding basic data types defined in Std 802.21-2008 Table F1. - * \author BRIZZOLA Davide, GAUTHIER Lionel, MAUREL Frederic, WETTERWALD Michelle - * \date 2012 - * \version - * \note - * \bug - * \warning - */ -/** \defgroup MIH_C_F1_BASIC_DATA_TYPES F1 Basic data types codec - * \ingroup MIH_C_INTERFACE - * - * @{ - */ - -#ifndef __MIH_C_F1_BASIC_DATA_TYPES_CODEC_H__ -# define __MIH_C_F1_BASIC_DATA_TYPES_CODEC_H__ -//----------------------------------------------------------------------------- -# ifdef MIH_C_F1_BASIC_DATA_TYPES_CODEC_C -# define private_F1_codec(x) x -# define protected_F1_codec(x) x -# define public_F1_codec(x) x -# else -# ifdef MIH_C_INTERFACE -# define private_F1_codec(x) -# define protected_F1_codec(x) extern x -# define public_F1_codec(x) extern x -# else -# define private_F1_codec(x) -# define protected_F1_codec(x) -# define public_F1_codec(x) extern x -# endif -# endif -//----------------------------------------------------------------------------- -#include -#include -#include -#include -#include -#include -#include -//----------------------------------------------------------------------------- -#include "MIH_C.h" -//----------------------------------------------------------------------------- -typedef struct MIH_C_F1_Generic_List { - u_int16_t length; - u_int8_t val[2]; -} MIH_C_F1_Generic_List_t; -//----------------------------------------------------------------------------- -typedef struct MIH_C_F1_Generic_Octet { - u_int8_t val[2]; -} MIH_C_F1_Generic_Octet_t; -//----------------------------------------------------------------------------- -public_F1_codec( void MIH_C_BITMAP8_encode (Bit_Buffer_t* bbP, MIH_C_BITMAP8_T* dataP);) -public_F1_codec( void MIH_C_BITMAP16_encode (Bit_Buffer_t* bbP, MIH_C_BITMAP16_T* dataP);) -public_F1_codec( void MIH_C_BITMAP24_encode (Bit_Buffer_t* bbP, MIH_C_BITMAP24_T* dataP);) -public_F1_codec( void MIH_C_BITMAP32_encode (Bit_Buffer_t* bbP, MIH_C_BITMAP32_T* dataP);) -public_F1_codec( void MIH_C_BITMAP64_encode (Bit_Buffer_t* bbP, MIH_C_BITMAP64_T* dataP);) -public_F1_codec( void MIH_C_BITMAP128_encode (Bit_Buffer_t* bbP, MIH_C_BITMAP128_T* dataP);) -public_F1_codec( void MIH_C_BITMAP256_encode (Bit_Buffer_t* bbP, MIH_C_BITMAP256_T* dataP);) -public_F1_codec( void MIH_C_CHOICE_encode (Bit_Buffer_t* bbP, MIH_C_CHOICE_T* dataP);) -public_F1_codec( void MIH_C_INTEGER1_encode (Bit_Buffer_t* bbP, MIH_C_INTEGER1_T* dataP);) -public_F1_codec( void MIH_C_INTEGER2_encode (Bit_Buffer_t* bbP, MIH_C_INTEGER2_T* dataP);) -public_F1_codec( void MIH_C_INTEGER4_encode (Bit_Buffer_t* bbP, MIH_C_INTEGER4_T* dataP);) -public_F1_codec( void MIH_C_INTEGER8_encode (Bit_Buffer_t* bbP, MIH_C_INTEGER8_T* dataP);) -public_F1_codec( void MIH_C_NULL_encode (Bit_Buffer_t* bbP, MIH_C_NULL_T* dataP);) -public_F1_codec( void MIH_C_OCTET_encode (Bit_Buffer_t* bbP, MIH_C_F1_Generic_Octet_t *dataP, int lengthP);) -public_F1_codec( void MIH_C_UNSIGNED_INT1_encode(Bit_Buffer_t* bbP, MIH_C_UNSIGNED_INT1_T* dataP);) -public_F1_codec( void MIH_C_UNSIGNED_INT2_encode(Bit_Buffer_t* bbP, MIH_C_UNSIGNED_INT2_T* dataP);) -public_F1_codec( void MIH_C_UNSIGNED_INT4_encode(Bit_Buffer_t* bbP, MIH_C_UNSIGNED_INT4_T* dataP);) -public_F1_codec( void MIH_C_UNSIGNED_INT8_encode(Bit_Buffer_t* bbP, MIH_C_UNSIGNED_INT8_T* dataP);) -public_F1_codec( void MIH_C_LIST_LENGTH_encode (Bit_Buffer_t* bbP, u_int16_t lengthP);) -//----------------------------------------------------------------------------- -public_F1_codec( void MIH_C_BITMAP8_decode (Bit_Buffer_t* bbP, MIH_C_BITMAP8_T* dataP);) -public_F1_codec( void MIH_C_BITMAP16_decode (Bit_Buffer_t* bbP, MIH_C_BITMAP16_T* dataP);) -public_F1_codec( void MIH_C_BITMAP24_decode (Bit_Buffer_t* bbP, MIH_C_BITMAP24_T* dataP);) -public_F1_codec( void MIH_C_BITMAP32_decode (Bit_Buffer_t* bbP, MIH_C_BITMAP32_T* dataP);) -public_F1_codec( void MIH_C_BITMAP64_decode (Bit_Buffer_t* bbP, MIH_C_BITMAP64_T* dataP);) -public_F1_codec( void MIH_C_BITMAP128_decode (Bit_Buffer_t* bbP, MIH_C_BITMAP128_T* dataP);) -public_F1_codec( void MIH_C_BITMAP256_decode (Bit_Buffer_t* bbP, MIH_C_BITMAP256_T* dataP);) -public_F1_codec( void MIH_C_CHOICE_decode (Bit_Buffer_t* bbP, MIH_C_CHOICE_T* dataP);) -public_F1_codec( void MIH_C_INTEGER1_decode (Bit_Buffer_t* bbP, MIH_C_INTEGER1_T* dataP);) -public_F1_codec( void MIH_C_INTEGER2_decode (Bit_Buffer_t* bbP, MIH_C_INTEGER2_T* dataP);) -public_F1_codec( void MIH_C_INTEGER4_decode (Bit_Buffer_t* bbP, MIH_C_INTEGER4_T* dataP);) -public_F1_codec( void MIH_C_INTEGER8_decode (Bit_Buffer_t* bbP, MIH_C_INTEGER8_T* dataP);) -public_F1_codec( void MIH_C_NULL_decode (Bit_Buffer_t* bbP);) -public_F1_codec( void MIH_C_OCTET_decode (Bit_Buffer_t* bbP, MIH_C_F1_Generic_Octet_t *dataP, int lengthP);) -public_F1_codec( void MIH_C_UNSIGNED_INT1_decode (Bit_Buffer_t* bbP, MIH_C_UNSIGNED_INT1_T* dataP);) -public_F1_codec( void MIH_C_UNSIGNED_INT2_decode (Bit_Buffer_t* bbP, MIH_C_UNSIGNED_INT2_T* dataP);) -public_F1_codec( void MIH_C_UNSIGNED_INT4_decode (Bit_Buffer_t* bbP, MIH_C_UNSIGNED_INT4_T* dataP);) -public_F1_codec( void MIH_C_UNSIGNED_INT8_decode (Bit_Buffer_t* bbP, MIH_C_UNSIGNED_INT8_T* dataP);) -public_F1_codec( void MIH_C_LIST_LENGTH_decode (Bit_Buffer_t* bbP, u_int16_t *lengthP);) -//----------------------------------------------------------------------------- -public_F1_codec( unsigned int MIH_C_BITMAP82String(MIH_C_BITMAP8_T* dataP, char* bufP);) -public_F1_codec( unsigned int MIH_C_BITMAP162String(MIH_C_BITMAP16_T* dataP, char* bufP);) -public_F1_codec( unsigned int MIH_C_BITMAP242String(MIH_C_BITMAP24_T* dataP, char* bufP);) -public_F1_codec( unsigned int MIH_C_UNSIGNED_INT12String(MIH_C_UNSIGNED_INT1_T* dataP, char* bufP);) -public_F1_codec( unsigned int MIH_C_UNSIGNED_INT22String(MIH_C_UNSIGNED_INT2_T* dataP, char* bufP);) -public_F1_codec( unsigned int MIH_C_UNSIGNED_INT42String(MIH_C_UNSIGNED_INT4_T* dataP, char* bufP);) -public_F1_codec( unsigned int MIH_C_UNSIGNED_INT82String(MIH_C_UNSIGNED_INT8_T* dataP, char* bufP);) -//----------------------------------------------------------------------------- -public_F1_codec(u_int16_t MIH_C_LIST_LENGTH_get_encode_num_bytes(u_int16_t lengthP);) - -#endif -/** @}*/ diff --git a/openair3/RAL-LTE/INTERFACE-802.21/INCLUDE/MIH_C_F2_general_data_types_codec.h b/openair3/RAL-LTE/INTERFACE-802.21/INCLUDE/MIH_C_F2_general_data_types_codec.h deleted file mode 100755 index 1f9a6504f5..0000000000 --- a/openair3/RAL-LTE/INTERFACE-802.21/INCLUDE/MIH_C_F2_general_data_types_codec.h +++ /dev/null @@ -1,77 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ -/*! \file MIH_C_F2_general_data_types_codec.h - * \brief This file defines the prototypes of the functions for coding and decoding general data types defined in Std 802.21-2008 Table F2. - * \author BRIZZOLA Davide, GAUTHIER Lionel, MAUREL Frederic, WETTERWALD Michelle - * \date 2012 - * \version - * \note - * \bug - * \warning - */ -/** \defgroup MIH_C_F2_GENERAL_DATA_TYPES_CODEC F2 General data types codec - * \ingroup MIH_C_INTERFACE - * - * @{ - */ - -#ifndef __MIH_C_F2_GENERAL_DATA_TYPES_CODEC_H__ -# define __MIH_C_F2_GENERAL_DATA_TYPES_CODEC_H__ -//----------------------------------------------------------------------------- -# ifdef MIH_C_F2_GENERAL_DATA_TYPES_CODEC_C -# define private_F2_codec(x) x -# define protected_F2_codec(x) x -# define public_F2_codec(x) x -# else -# ifdef MIH_C_INTERFACE -# define private_F2_codec(x) -# define protected_F2_codec(x) extern x -# define public_F2_codec(x) extern x -# else -# define private_F2_codec(x) -# define protected_F2_codec(x) -# define public_F2_codec(x) extern x -# endif -# endif -//----------------------------------------------------------------------------- -#include -#include -#include -#include -#include -#include -#include -//----------------------------------------------------------------------------- -#include "MIH_C.h" -//----------------------------------------------------------------------------- -public_F2_codec( unsigned int MIH_C_BOOLEAN2String(MIH_C_BOOLEAN_T* dataP, char* bufP);) -public_F2_codec( unsigned int MIH_C_STATUS2String(MIH_C_STATUS_T *statusP, char* bufP);) - -#endif -/** @}*/ diff --git a/openair3/RAL-LTE/INTERFACE-802.21/INCLUDE/MIH_C_F3_data_types_for_address_codec.h b/openair3/RAL-LTE/INTERFACE-802.21/INCLUDE/MIH_C_F3_data_types_for_address_codec.h deleted file mode 100755 index 1e8749e670..0000000000 --- a/openair3/RAL-LTE/INTERFACE-802.21/INCLUDE/MIH_C_F3_data_types_for_address_codec.h +++ /dev/null @@ -1,83 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ -/*! \file MIH_C_F3_data_types_for_address_codec.h - * \brief This file defines the prototypes of the functions for coding and decoding data types for addresses defined in Std 802.21-2008 Table F3. - * \author BRIZZOLA Davide, GAUTHIER Lionel, MAUREL Frederic, WETTERWALD Michelle - * \date 2012 - * \version - * \note - * \bug - * \warning - */ -/** \defgroup MIH_C_F3_DATA_TYPES_FOR_ADDRESS_CODEC F3 Data types for address codec - * \ingroup MIH_C_INTERFACE - * - * @{ - */ - -#ifndef __MIH_C_F3_DATA_TYPES_FOR_ADDRESS_CODEC_H__ -# define __MIH_C_F3_DATA_TYPES_FOR_ADDRESS_CODEC_H__ -//----------------------------------------------------------------------------- -# ifdef MIH_C_F3_DATA_TYPES_FOR_ADDRESS_CODEC_C -# define private_F3_codec(x) x -# define protected_F3_codec(x) x -# define public_F3_codec(x) x -# else -# ifdef MIH_C_INTERFACE -# define private_F3_codec(x) -# define protected_F3_codec(x) extern x -# define public_F3_codec(x) extern x -# else -# define private_F3_codec(x) -# define protected_F3_codec(x) -# define public_F3_codec(x) extern x -# endif -# endif -//----------------------------------------------------------------------------- -#include -#include -#include -#include -#include -#include -#include -//----------------------------------------------------------------------------- -#include "MIH_C.h" -//----------------------------------------------------------------------------- -public_F3_codec(unsigned int MIH_C_3GPP_2G_CELL_ID2String(MIH_C_3GPP_2G_CELL_ID_T *dataP, char* bufP);) -public_F3_codec(void MIH_C_3GPP_2G_CELL_ID_encode (Bit_Buffer_t* bbP, MIH_C_3GPP_2G_CELL_ID_T *dataP);) -public_F3_codec(void MIH_C_3GPP_2G_CELL_ID_decode (Bit_Buffer_t* bbP, MIH_C_3GPP_2G_CELL_ID_T *dataP);) -public_F3_codec(unsigned int MIH_C_3GPP_3G_CELL_ID2String(MIH_C_3GPP_3G_CELL_ID_T *dataP, char* bufP);) -public_F3_codec(void MIH_C_3GPP_3G_CELL_ID_encode (Bit_Buffer_t* bbP, MIH_C_3GPP_3G_CELL_ID_T *dataP);) -public_F3_codec(void MIH_C_3GPP_3G_CELL_ID_decode (Bit_Buffer_t* bbP, MIH_C_3GPP_3G_CELL_ID_T *dataP);) -public_F3_codec(unsigned int MIH_C_LINK_ADDR2String(MIH_C_LINK_ADDR_T *dataP, char* bufP);) -public_F3_codec(void MIH_C_LINK_ADDR_encode (Bit_Buffer_t* bbP, MIH_C_LINK_ADDR_T *dataP);) -public_F3_codec(void MIH_C_LINK_ADDR_decode (Bit_Buffer_t* bbP, MIH_C_LINK_ADDR_T *dataP);) -#endif -/** @}*/ diff --git a/openair3/RAL-LTE/INTERFACE-802.21/INCLUDE/MIH_C_F4_data_types_for_links_codec.h b/openair3/RAL-LTE/INTERFACE-802.21/INCLUDE/MIH_C_F4_data_types_for_links_codec.h deleted file mode 100755 index 4bf840d818..0000000000 --- a/openair3/RAL-LTE/INTERFACE-802.21/INCLUDE/MIH_C_F4_data_types_for_links_codec.h +++ /dev/null @@ -1,137 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ -/*! \file MIH_C_F4_data_types_for_links_codec.h - * \brief This file defines the prototypes of the functions for coding and decoding data types for links defined in Std 802.21-2008 Table F4. - * \author BRIZZOLA Davide, GAUTHIER Lionel, MAUREL Frederic, WETTERWALD Michelle - * \date 2012 - * \version - * \note - * \bug - * \warning - */ -/** \defgroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC F4 Data types for links codec - * \ingroup MIH_C_INTERFACE - * - * @{ - */ - -#ifndef __MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC_H__ -# define __MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC_H__ -//----------------------------------------------------------------------------- -# ifdef MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC_C -# define private_F4_codec(x) x -# define protected_F4_codec(x) x -# define public_F4_codec(x) x -# else -# ifdef MIH_C_INTERFACE -# define private_F4_codec(x) -# define protected_F4_codec(x) extern x -# define public_F4_codec(x) extern x -# else -# define private_F4_codec(x) -# define protected_F4_codec(x) -# define public_F4_codec(x) extern x -# endif -# endif -//----------------------------------------------------------------------------- -#include -#include -#include -#include -#include -#include -#include -//----------------------------------------------------------------------------- -#include "MIH_C.h" -//----------------------------------------------------------------------------- -public_F4_codec(unsigned int MIH_C_OPMODE2String2(MIH_C_OPMODE_T *dataP, char* bufP);) -public_F4_codec(void MIH_C_DEV_STATE_RSP_encode(Bit_Buffer_t* bbP, MIH_C_DEV_STATE_RSP_T *dataP);) -public_F4_codec(void MIH_C_DEV_STATE_RSP_decode(Bit_Buffer_t* bbP, MIH_C_DEV_STATE_RSP_T *dataP);) -public_F4_codec(unsigned int MIH_C_LINK_EVENT_LIST2String2(MIH_C_LINK_EVENT_LIST_T *dataP, char* bufP);) -public_F4_codec(unsigned int MIH_C_LINK_CMD_LIST2String2(MIH_C_LINK_CMD_LIST_T *dataP, char* bufP);) -public_F4_codec(unsigned int MIH_C_LINK_TYPE2String2(MIH_C_LINK_TYPE_T *dataP, char* bufP);) -public_F4_codec(unsigned int MIH_C_LINK_ID2String(MIH_C_LINK_ID_T *dataP, char* bufP);) -public_F4_codec(void MIH_C_LINK_ID_encode(Bit_Buffer_t* bbP, MIH_C_LINK_ID_T *dataP);) -public_F4_codec(void MIH_C_LINK_ID_decode(Bit_Buffer_t* bbP, MIH_C_LINK_ID_T *dataP);) -public_F4_codec(void MIH_C_LINK_ACTION_REQ_encode(Bit_Buffer_t* bbP, MIH_C_LINK_ACTION_REQ_T *dataP);) -public_F4_codec(void MIH_C_LINK_ACTION_REQ_decode(Bit_Buffer_t* bbP, MIH_C_LINK_ACTION_REQ_T *dataP);) -public_F4_codec(unsigned int MIH_C_SIG_STRENGTH2String(MIH_C_SIG_STRENGTH_T *dataP, char* bufP);) -public_F4_codec(void MIH_C_SIG_STRENGTH_encode(Bit_Buffer_t* bbP, MIH_C_SIG_STRENGTH_T *dataP);) -public_F4_codec(void MIH_C_SIG_STRENGTH_decode(Bit_Buffer_t* bbP, MIH_C_SIG_STRENGTH_T *dataP);) -public_F4_codec(unsigned int MIH_C_LINK_SCAN_RSP2String(MIH_C_LINK_SCAN_RSP_T *dataP, char* bufP);) -public_F4_codec(void MIH_C_LINK_SCAN_RSP_encode(Bit_Buffer_t* bbP, MIH_C_LINK_SCAN_RSP_T *dataP);) -public_F4_codec(void MIH_C_LINK_SCAN_RSP_decode(Bit_Buffer_t* bbP, MIH_C_LINK_SCAN_RSP_T *dataP);) -public_F4_codec(void MIH_C_LINK_ACTION_RSP_encode(Bit_Buffer_t* bbP, MIH_C_LINK_ACTION_RSP_T *dataP);) -public_F4_codec(void MIH_C_LINK_ACTION_RSP_decode(Bit_Buffer_t* bbP, MIH_C_LINK_ACTION_RSP_T *dataP);) -public_F4_codec(unsigned int MIH_C_THRESHOLD2String(MIH_C_THRESHOLD_T *dataP, char* bufP);) -public_F4_codec(void MIH_C_THRESHOLD_encode(Bit_Buffer_t* bbP, MIH_C_THRESHOLD_T *dataP);) -public_F4_codec(void MIH_C_THRESHOLD_decode(Bit_Buffer_t* bbP, MIH_C_THRESHOLD_T *dataP);) -public_F4_codec(unsigned int MIH_C_LINK_PARAM_TYPE2String( MIH_C_LINK_PARAM_TYPE_T *dataP, char* bufP);) -public_F4_codec(void MIH_C_LINK_PARAM_TYPE_encode(Bit_Buffer_t* bbP, MIH_C_LINK_PARAM_TYPE_T *dataP);) -public_F4_codec(void MIH_C_LINK_PARAM_TYPE_decode(Bit_Buffer_t* bbP, MIH_C_LINK_PARAM_TYPE_T *dataP);) -public_F4_codec(unsigned int MIH_C_LINK_CFG_PARAM2String(MIH_C_LINK_CFG_PARAM_T *dataP, char* bufP);) -public_F4_codec(void MIH_C_LINK_CFG_PARAM_encode(Bit_Buffer_t* bbP, MIH_C_LINK_CFG_PARAM_T *dataP);) -public_F4_codec(void MIH_C_LINK_CFG_PARAM_decode(Bit_Buffer_t* bbP, MIH_C_LINK_CFG_PARAM_T *dataP);) -public_F4_codec(unsigned int MIH_C_LINK_CFG_STATUS2String(MIH_C_LINK_CFG_STATUS_T *dataP, char* bufP);) -public_F4_codec(void MIH_C_LINK_CFG_STATUS_encode(Bit_Buffer_t* bbP, MIH_C_LINK_CFG_STATUS_T *dataP);) -public_F4_codec(void MIH_C_LINK_CFG_STATUS_decode(Bit_Buffer_t* bbP, MIH_C_LINK_CFG_STATUS_T *dataP);) -public_F4_codec(unsigned int MIH_C_LINK_DESC_RSP2String(MIH_C_LINK_DESC_RSP_T *dataP, char* bufP);) -public_F4_codec(void MIH_C_LINK_DESC_RSP_encode(Bit_Buffer_t* bbP, MIH_C_LINK_DESC_RSP_T *dataP);) -public_F4_codec(void MIH_C_LINK_DESC_RSP_decode(Bit_Buffer_t* bbP, MIH_C_LINK_DESC_RSP_T *dataP);) -public_F4_codec(unsigned int MIH_C_LINK_PARAM2String(MIH_C_LINK_PARAM_T *dataP, char* bufP);) -public_F4_codec(void MIH_C_LINK_PARAM_encode(Bit_Buffer_t* bbP, MIH_C_LINK_PARAM_T *dataP);) -public_F4_codec(void MIH_C_LINK_PARAM_decode(Bit_Buffer_t* bbP, MIH_C_LINK_PARAM_T *dataP);) -public_F4_codec(unsigned int MIH_C_LINK_PARAM_RPT2String(MIH_C_LINK_PARAM_RPT_T *dataP, char* bufP);) -public_F4_codec(void MIH_C_LINK_PARAM_RPT_encode(Bit_Buffer_t* bbP, MIH_C_LINK_PARAM_RPT_T *dataP);) -public_F4_codec(void MIH_C_LINK_PARAM_RPT_decode(Bit_Buffer_t* bbP, MIH_C_LINK_PARAM_RPT_T *dataP);) -public_F4_codec(void MIH_C_LINK_POA_LIST_encode(Bit_Buffer_t* bbP, MIH_C_LINK_POA_LIST_T *dataP);) -public_F4_codec(void MIH_C_LINK_POA_LIST_decode(Bit_Buffer_t* bbP, MIH_C_LINK_POA_LIST_T *dataP);) -public_F4_codec(unsigned int MIH_C_LINK_STATES_RSP2String(MIH_C_LINK_STATES_RSP_T *dataP, char* bufP);) -public_F4_codec(void MIH_C_LINK_STATES_RSP_encode(Bit_Buffer_t* bbP, MIH_C_LINK_STATES_RSP_T *dataP);) -public_F4_codec(void MIH_C_LINK_STATES_RSP_decode(Bit_Buffer_t* bbP, MIH_C_LINK_STATES_RSP_T *dataP);) -public_F4_codec(void MIH_C_LINK_STATUS_REQ_encode(Bit_Buffer_t* bbP, MIH_C_LINK_STATUS_REQ_T *dataP);) -public_F4_codec(void MIH_C_LINK_STATUS_REQ_decode(Bit_Buffer_t* bbP, MIH_C_LINK_STATUS_REQ_T *dataP);) -public_F4_codec(void MIH_C_LINK_STATUS_RSP_encode(Bit_Buffer_t* bbP, MIH_C_LINK_STATUS_RSP_T *dataP);) -public_F4_codec(void MIH_C_LINK_STATUS_RSP_decode(Bit_Buffer_t* bbP, MIH_C_LINK_STATUS_RSP_T *dataP);) -public_F4_codec(unsigned int MIH_C_LINK_STATES_REQ2String2(MIH_C_LINK_STATES_REQ_T *dataP, char* bufP);) -public_F4_codec(unsigned int MIH_C_LINK_DESC_REQ2String2(MIH_C_LINK_DESC_REQ_T *dataP, char* bufP);) -public_F4_codec(void MIH_C_LINK_TUPLE_ID_encode(Bit_Buffer_t* bbP, MIH_C_LINK_TUPLE_ID_T *dataP);) -public_F4_codec(void MIH_C_LINK_TUPLE_ID_decode(Bit_Buffer_t* bbP, MIH_C_LINK_TUPLE_ID_T *dataP);) -public_F4_codec(void MIH_C_LINK_DET_INFO_encode(Bit_Buffer_t* bbP, MIH_C_LINK_DET_INFO_T *dataP);) -public_F4_codec(void MIH_C_LINK_DET_INFO_decode(Bit_Buffer_t* bbP, MIH_C_LINK_DET_INFO_T *dataP);) -public_F4_codec(unsigned int MIH_C_LINK_AC_ATTR2String2(MIH_C_LINK_AC_ATTR_T *dataP, char* bufP);) -public_F4_codec(unsigned int MIH_C_TH_ACTION2String2(MIH_C_TH_ACTION_T *actionP, char* bufP);) -public_F4_codec(unsigned int MIH_C_LINK_AC_TYPE2String2(MIH_C_LINK_AC_TYPE_T *dataP, char* bufP);) -public_F4_codec(unsigned int MIH_C_THRESHOLD_XDIR2String2(MIH_C_THRESHOLD_XDIR_T *valP, char* bufP);) -public_F4_codec(unsigned int MIH_C_LINK_PARAM_GEN2String2(MIH_C_LINK_PARAM_GEN_T *valP, char* bufP);) -public_F4_codec(unsigned int MIH_C_LINK_AC_RESULT2String2(MIH_C_LINK_AC_RESULT_T *dataP, char* bufP);) - -#endif -/** @}*/ - diff --git a/openair3/RAL-LTE/INTERFACE-802.21/INCLUDE/MIH_C_F9_data_types_for_qos_codec.h b/openair3/RAL-LTE/INTERFACE-802.21/INCLUDE/MIH_C_F9_data_types_for_qos_codec.h deleted file mode 100755 index 28d126140a..0000000000 --- a/openair3/RAL-LTE/INTERFACE-802.21/INCLUDE/MIH_C_F9_data_types_for_qos_codec.h +++ /dev/null @@ -1,98 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ -/*! \file MIH_C_F9_data_types_for_qos_codec.h - * \brief This file defines the prototypes of the functions for coding and decoding Data type for QOS defined in Std 802.21-2008 Table F9. - * \author BRIZZOLA Davide, GAUTHIER Lionel, MAUREL Frederic, WETTERWALD Michelle - * \date 2012 - * \version - * \note - * \bug - * \warning - */ -/** \defgroup MIH_C_F9_DATA_TYPES_FOR_QOS F9 Data types for QOS - * \ingroup MIH_C_INTERFACE - * - * @{ - */ - -#ifndef __MIH_C_F9_DATA_TYPES_FOR_QOS_CODEC_H__ -# define __MIH_C_F9_DATA_TYPES_FOR_QOS_CODEC_H__ -//----------------------------------------------------------------------------- -# ifdef MIH_C_F9_DATA_TYPES_FOR_QOS_CODEC_C -# define private_F9_codec(x) x -# define protected_F9_codec(x) x -# define public_F9_codec(x) x -# else -# ifdef MIH_C_INTERFACE -# define private_F9_codec(x) -# define protected_F9_codec(x) extern x -# define public_F9_codec(x) extern x -# else -# define private_F9_codec(x) -# define protected_F9_codec(x) -# define public_F9_codec(x) extern x -# endif -# endif -//----------------------------------------------------------------------------- -#include -#include -#include -#include -#include -#include -#include -//----------------------------------------------------------------------------- -#include "MIH_C.h" -//----------------------------------------------------------------------------- -public_F9_codec(unsigned int MIH_C_MIN_PK_TX_DELAY2String(MIH_C_MIN_PK_TX_DELAY_T *dataP, char* bufP);) -public_F9_codec(void MIH_C_MIN_PK_TX_DELAY_encode(Bit_Buffer_t* bbP, MIH_C_MIN_PK_TX_DELAY_T *dataP);) -public_F9_codec(void MIH_C_MIN_PK_TX_DELAY_decode(Bit_Buffer_t* bbP, MIH_C_MIN_PK_TX_DELAY_T *dataP);) - -public_F9_codec(unsigned int MIH_C_AVG_PK_TX_DELAY2String(MIH_C_AVG_PK_TX_DELAY_T *dataP, char* bufP);) -public_F9_codec(void MIH_C_AVG_PK_TX_DELAY_encode(Bit_Buffer_t* bbP, MIH_C_AVG_PK_TX_DELAY_T *dataP);) -public_F9_codec(void MIH_C_AVG_PK_TX_DELAY_decode(Bit_Buffer_t* bbP, MIH_C_AVG_PK_TX_DELAY_T *dataP);) - -public_F9_codec(unsigned int MIH_C_MAX_PK_TX_DELAY2String(MIH_C_MAX_PK_TX_DELAY_T *dataP, char* bufP);) -public_F9_codec(void MIH_C_MAX_PK_TX_DELAY_encode(Bit_Buffer_t* bbP, MIH_C_MAX_PK_TX_DELAY_T *dataP);) -public_F9_codec(void MIH_C_MAX_PK_TX_DELAY_decode(Bit_Buffer_t* bbP, MIH_C_MAX_PK_TX_DELAY_T *dataP);) - -public_F9_codec(unsigned int MIH_C_PK_DELAY_JITTER2String(MIH_C_PK_DELAY_JITTER_T *dataP, char* bufP);) -public_F9_codec(void MIH_C_PK_DELAY_JITTER_encode(Bit_Buffer_t* bbP, MIH_C_PK_DELAY_JITTER_T *dataP);) -public_F9_codec(void MIH_C_PK_DELAY_JITTER_decode(Bit_Buffer_t* bbP, MIH_C_PK_DELAY_JITTER_T *dataP);) - -public_F9_codec(unsigned int MIH_C_PK_LOSS_RATE2String(MIH_C_PK_LOSS_RATE_T *dataP, char* bufP);) -public_F9_codec(void MIH_C_PK_LOSS_RATE_encode(Bit_Buffer_t* bbP, MIH_C_PK_LOSS_RATE_T *dataP);) -public_F9_codec(void MIH_C_PK_LOSS_RATE_decode(Bit_Buffer_t* bbP, MIH_C_PK_LOSS_RATE_T *dataP);) - -public_F9_codec(unsigned int MIH_C_QOS_PARAM_VAL2String(MIH_C_QOS_PARAM_VAL_T *dataP, char* bufP);) -public_F9_codec(void MIH_C_QOS_PARAM_VAL_encode(Bit_Buffer_t* bbP, MIH_C_QOS_PARAM_VAL_T *dataP);) -public_F9_codec(void MIH_C_QOS_PARAM_VAL_decode(Bit_Buffer_t* bbP, MIH_C_QOS_PARAM_VAL_T *dataP);) - -#endif -/** @}*/ diff --git a/openair3/RAL-LTE/INTERFACE-802.21/INCLUDE/MIH_C_L2_type_values_for_tlv_encoding.h b/openair3/RAL-LTE/INTERFACE-802.21/INCLUDE/MIH_C_L2_type_values_for_tlv_encoding.h deleted file mode 100755 index faf84fac6e..0000000000 --- a/openair3/RAL-LTE/INTERFACE-802.21/INCLUDE/MIH_C_L2_type_values_for_tlv_encoding.h +++ /dev/null @@ -1,76 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ -/*! \file MIH_C_L2_type_values_for_tlv_encoding.h - * \brief This file defines the prototypes of the functions for coding and decoding Data type for MIHF identification defined in Std 802.21-2008 Table L2. - * \author BRIZZOLA Davide, GAUTHIER Lionel, MAUREL Frederic, WETTERWALD Michelle - * \date 2012 - * \version - * \note - * \bug - * \warning - */ -/** \defgroup MIH_C_L2_TYPE_VALUES_FOR_TLV_ENCODING L2 Type values for TLV encoding. - * \ingroup MIH_C_INTERFACE - * - * @{ - */ - -#ifndef __MIH_C_L2_TYPE_VALUES_FOR_TLV_ENCODING_H__ -# define __MIH_C_L2_TYPE_VALUES_FOR_TLV_ENCODING_H__ -//----------------------------------------------------------------------------- -# ifdef MIH_C_L2_TYPE_VALUES_FOR_TLV_ENCODING_C -# define private_L2_codec(x) x -# define protected_L2_codec(x) x -# define public_L2_codec(x) x -# else -# ifdef MIH_C_INTERFACE -# define private_L2_codec(x) -# define protected_L2_codec(x) extern x -# define public_L2_codec(x) extern x -# else -# define private_L2_codec(x) -# define protected_L2_codec(x) -# define public_L2_codec(x) extern x -# endif -# endif -//----------------------------------------------------------------------------- -#include -#include -#include -#include -#include -#include -#include -//----------------------------------------------------------------------------- -#include "MIH_C.h" -//----------------------------------------------------------------------------- - -public_L2_codec(unsigned int MIH_C_TLV2String(MIH_C_TLV_TYPE_T *typeP, char* bufP);) -/** @}*/ -#endif diff --git a/openair3/RAL-LTE/INTERFACE-802.21/INCLUDE/MIH_C_Link_Constants.h b/openair3/RAL-LTE/INTERFACE-802.21/INCLUDE/MIH_C_Link_Constants.h deleted file mode 100755 index 4c7873111b..0000000000 --- a/openair3/RAL-LTE/INTERFACE-802.21/INCLUDE/MIH_C_Link_Constants.h +++ /dev/null @@ -1,110 +0,0 @@ - -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ - -/*! \file MIH_C_Link_Constants.h - * \brief This file defines constants, for the MIH Link SAP. - * \author BRIZZOLARA Davide, GAUTHIER Lionel, WETTERWALD Michelle - * \date 2012 - * \version - * \note - * \bug - * \warning - */ - -#ifndef __MIH_C_LINK_CONSTANTS_H__ -#define __MIH_C_LINK_CONSTANTS_H__ - -#define MIH_C_BIT_0_VALUE 0x01 -#define MIH_C_BIT_1_VALUE 0x02 -#define MIH_C_BIT_2_VALUE 0x04 -#define MIH_C_BIT_3_VALUE 0x08 -#define MIH_C_BIT_4_VALUE 0x10 -#define MIH_C_BIT_5_VALUE 0x20 -#define MIH_C_BIT_6_VALUE 0x40 -#define MIH_C_BIT_7_VALUE 0x80 -#define MIH_C_BIT_8_VALUE 0x100 -#define MIH_C_BIT_9_VALUE 0x200 -#define MIH_C_BIT_10_VALUE 0x400 -#define MIH_C_BIT_11_VALUE 0x800 -#define MIH_C_BIT_12_VALUE 0x1000 -#define MIH_C_BIT_13_VALUE 0x2000 -#define MIH_C_BIT_14_VALUE 0x4000 -#define MIH_C_BIT_15_VALUE 0x8000 -#define MIH_C_BIT_16_VALUE 0x10000 -#define MIH_C_BIT_17_VALUE 0x20000 -#define MIH_C_BIT_18_VALUE 0x40000 -#define MIH_C_BIT_19_VALUE 0x80000 -#define MIH_C_BIT_20_VALUE 0x100000 -#define MIH_C_BIT_21_VALUE 0x200000 -#define MIH_C_BIT_22_VALUE 0x400000 -#define MIH_C_BIT_23_VALUE 0x800000 -#define MIH_C_BIT_24_VALUE 0x1000000 -#define MIH_C_BIT_25_VALUE 0x2000000 -#define MIH_C_BIT_26_VALUE 0x4000000 -#define MIH_C_BIT_27_VALUE 0x8000000 -#define MIH_C_BIT_28_VALUE 0x10000000 -#define MIH_C_BIT_29_VALUE 0x20000000 -#define MIH_C_BIT_30_VALUE 0x40000000 -#define MIH_C_BIT_31_VALUE 0x80000000 - -#define MIH_C_3GPP_ADDR_LENGTH 16 -#define MIH_C_3GPP2_ADDR_LENGTH 8 -#define MIH_C_OTHER_L2_ADDR_LENGTH 64 -#define MIH_C_LINK_SCAN_RSP_LENGTH 8 -#define MIH_C_THRESHOLD_LIST_LENGTH 8 -#define MIH_C_LINK_ADDR_LIST_LENGTH 8 -#define MIH_C_QOS_LIST_LENGTH 255 -#define MIH_C_LINK_STATUS_REQ_LIST_LENGTH 32 -#define MIH_C_LINK_CFG_PARAM_LIST_LENGTH 16 - - -#endif - -#ifndef __MIH_C_IANA_CONSTANTS_H__ -#define __MIH_C_IANA_CONSTANTS_H__ -#define IANA_ADDR_FAMILY_RESERVED 0 -#define IANA_ADDR_FAMILY_IP 1 -#define IANA_ADDR_FAMILY_IP6 2 -#define IANA_ADDR_FAMILY_NSAP 3 -#define IANA_ADDR_FAMILY_HDLC 4 -#define IANA_ADDR_FAMILY_BBN_1822 5 -#define IANA_ADDR_FAMILY_802 6 -#define IANA_ADDR_FAMILY_E_163 7 -#define IANA_ADDR_FAMILY_E_164 8 -#define IANA_ADDR_FAMILY_F_69 9 -#define IANA_ADDR_FAMILY_X_121 10 -#define IANA_ADDR_FAMILY_IPX 11 -#define IANA_ADDR_FAMILY_Appletalk 12 -#define IANA_ADDR_FAMILY_Decnet_IV 13 -#define IANA_ADDR_FAMILY_Banyan_Vines 14 -#define IANA_ADDR_FAMILY_E_164_with_NSAP 15 -#define IANA_ADDR_FAMILY_DNS 16 -// More defined values, see http://www.iana.org/assignments/address-family-numbers/address-family-numbers.xml -#endif diff --git a/openair3/RAL-LTE/INTERFACE-802.21/INCLUDE/MIH_C_Link_Messages.h b/openair3/RAL-LTE/INTERFACE-802.21/INCLUDE/MIH_C_Link_Messages.h deleted file mode 100755 index e92ae89c7b..0000000000 --- a/openair3/RAL-LTE/INTERFACE-802.21/INCLUDE/MIH_C_Link_Messages.h +++ /dev/null @@ -1,315 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ - -/*! \file MIH_C_Link_Messages.h - * \brief This file defines the messages of the MIH Link SAP. - * \author BRIZZOLARA Davide, GAUTHIER Lionel, WETTERWALD Michelle - * \date 2012 - * \version - * \note - * \bug - * \warning - */ -/** \defgroup MIH_C_LINK_MESSAGES 802.21 Link Messages - * \ingroup MIH_C_INTERFACE - * - * @{ - */ - -#ifndef __MIH_C_LINK_MESSAGES_H__ -#define __MIH_C_LINK_MESSAGES_H__ -#include -//----------------------------------------------------------------------------- -#include "MIH_C.h" -//----------------------------------------------------------------------------- -#define MIH_C_PROTOCOL_VERSION 1 -#define MIH_C_MESSAGE_ID(SID, OC, AID) ((u_int16_t)SID << 12) | ((u_int16_t)OC << 10) | ((u_int16_t)AID) -#ifdef MIH_C_MEDIEVAL_EXTENSIONS -#define MIH_C_MESSAGE_LINK_REGISTER_INDICATION_ID MIH_C_MESSAGE_ID(1, 3, 6) -#endif -#define MIH_C_MESSAGE_LINK_DETECTED_INDICATION_ID MIH_C_MESSAGE_ID(2, 3, 1) -#define MIH_C_MESSAGE_LINK_UP_INDICATION_ID MIH_C_MESSAGE_ID(2, 3, 2) -#define MIH_C_MESSAGE_LINK_DOWN_INDICATION_ID MIH_C_MESSAGE_ID(2, 3, 3) -#define MIH_C_MESSAGE_LINK_PARAMETERS_REPORT_INDICATION_ID MIH_C_MESSAGE_ID(2, 3, 5) -#define MIH_C_MESSAGE_LINK_GOING_DOWN_INDICATION_ID MIH_C_MESSAGE_ID(2, 3, 6) -#define MIH_C_MESSAGE_LINK_HANDOVER_IMMINENT_INDICATION_ID MIH_C_MESSAGE_ID(2, 3, 7) -#define MIH_C_MESSAGE_LINK_HANDOVER_COMPLETE_INDICATION_ID MIH_C_MESSAGE_ID(2, 3, 8) -#define MIH_C_MESSAGE_LINK_PDU_TRANSMIT_STATUS_INDICATION_ID MIH_C_MESSAGE_ID(2, 3, 9) -#define MIH_C_MESSAGE_LINK_CAPABILITY_DISCOVER_REQUEST_ID MIH_C_MESSAGE_ID(1, 1, 1) -#define MIH_C_MESSAGE_LINK_CAPABILITY_DISCOVER_CONFIRM_ID MIH_C_MESSAGE_ID(1, 0, 1) -#define MIH_C_MESSAGE_LINK_EVENT_SUBSCRIBE_REQUEST_ID MIH_C_MESSAGE_ID(1, 1, 4) -#define MIH_C_MESSAGE_LINK_EVENT_SUBSCRIBE_CONFIRM_ID MIH_C_MESSAGE_ID(1, 0, 4) -#define MIH_C_MESSAGE_LINK_EVENT_UNSUBSCRIBE_REQUEST_ID MIH_C_MESSAGE_ID(1, 1, 5) -#define MIH_C_MESSAGE_LINK_EVENT_UNSUBSCRIBE_CONFIRM_ID MIH_C_MESSAGE_ID(1, 0, 5) -#define MIH_C_MESSAGE_LINK_GET_PARAMETERS_REQUEST_ID MIH_C_MESSAGE_ID(3, 1, 1) -#define MIH_C_MESSAGE_LINK_GET_PARAMETERS_CONFIRM_ID MIH_C_MESSAGE_ID(3, 0, 1) -#define MIH_C_MESSAGE_LINK_CONFIGURE_THRESHOLDS_REQUEST_ID MIH_C_MESSAGE_ID(3, 1, 2) -#define MIH_C_MESSAGE_LINK_CONFIGURE_THRESHOLDS_CONFIRM_ID MIH_C_MESSAGE_ID(3, 0, 2) -#define MIH_C_MESSAGE_LINK_ACTION_REQUEST_ID MIH_C_MESSAGE_ID(3, 1, 3) -#define MIH_C_MESSAGE_LINK_ACTION_CONFIRM_ID MIH_C_MESSAGE_ID(3, 0, 3) -//----------------------------------------------------------------------------- - - -#ifdef MIH_C_MEDIEVAL_EXTENSIONS -/*! \struct MIH_C_Message_Link_Register_indication -* \brief Structure defining the message Link_Register.indication, ODTONE specific. -*/ -typedef struct MIH_C_Message_Link_Register_indication { - MIH_C_HEADER_T header; /*!< \brief Header of the message. */ - MIH_C_MIHF_ID_T source; /*!< \brief Source of the message. */ - MIH_C_MIHF_ID_T destination; /*!< \brief Destination of the message. */ - MIH_C_Link_Register_indication_t primitive; /*!< \brief Primitive. */ -} __attribute__((__packed__))MIH_C_Message_Link_Register_indication_t; - -#endif - -/*! \struct MIH_C_Message_Link_Detected_indication -* \brief Structure defining the message Link_Detected.indication -*/ -typedef struct MIH_C_Message_Link_Detected_indication { - MIH_C_HEADER_T header; /*!< \brief Header of the message. */ - MIH_C_MIHF_ID_T source; /*!< \brief Source of the message. */ - MIH_C_MIHF_ID_T destination; /*!< \brief Destination of the message. */ - MIH_C_Link_Detected_indication_t primitive; /*!< \brief Primitive. */ -} __attribute__((__packed__))MIH_C_Message_Link_Detected_indication_t; - - -/*! \struct MIH_C_Message_Link_Up_indication -* \brief Structure defining the message Link_Up.indication. -*/ -typedef struct MIH_C_Message_Link_Up_indication { - MIH_C_HEADER_T header; /*!< \brief Header of the message. */ - MIH_C_MIHF_ID_T source; /*!< \brief Source of the message. */ - MIH_C_MIHF_ID_T destination; /*!< \brief Destination of the message. */ - MIH_C_Link_Up_indication_t primitive; /*!< \brief Primitive. */ -} __attribute__((__packed__))MIH_C_Message_Link_Up_indication_t; - - - -/*! \struct MIH_C_Message_Link_Down_indication -* \brief Structure defining the message Link_Down.indication. -*/ -typedef struct MIH_C_Message_Link_Down_indication { - MIH_C_HEADER_T header; /*!< \brief Header of the message. */ - MIH_C_MIHF_ID_T source; /*!< \brief Source of the message. */ - MIH_C_MIHF_ID_T destination; /*!< \brief Destination of the message. */ - MIH_C_Link_Down_indication_t primitive; /*!< \brief Primitive. */ -} __attribute__((__packed__))MIH_C_Message_Link_Down_indication_t; - - -/*! \struct MIH_C_Message_Link_Parameters_Report_indication -* \brief Structure defining the message Link_Parameters_Report.indication. -*/ -typedef struct MIH_C_Message_Link_Parameters_Report_indication { - MIH_C_HEADER_T header; /*!< \brief Header of the message. */ - MIH_C_MIHF_ID_T source; /*!< \brief Source of the message. */ - MIH_C_MIHF_ID_T destination; /*!< \brief Destination of the message. */ - MIH_C_Link_Parameters_Report_indication_t primitive; /*!< \brief Primitive. */ -} __attribute__((__packed__))MIH_C_Message_Link_Parameters_Report_indication_t; - - -/*! \struct MIH_C_Message_Link_Going_Down_indication -* \brief Structure defining the message Link_Going_Down.indication. -*/ -typedef struct MIH_C_Message_Link_Going_Down_indication { - MIH_C_HEADER_T header; /*!< \brief Header of the message. */ - MIH_C_MIHF_ID_T source; /*!< \brief Source of the message. */ - MIH_C_MIHF_ID_T destination; /*!< \brief Destination of the message. */ - MIH_C_Link_Going_Down_indication_t primitive; /*!< \brief Primitive. */ -} __attribute__((__packed__))MIH_C_Message_Link_Going_Down_indication_t; - - - -/*! \struct MIH_C_Message_Link_Handover_Imminent_indication -* \brief Structure defining the message Link_Handover_Imminent.indication. -*/ -typedef struct MIH_C_Message_Link_Handover_Imminent_indication { - MIH_C_HEADER_T header; /*!< \brief Header of the message. */ - MIH_C_MIHF_ID_T source; /*!< \brief Source of the message. */ - MIH_C_MIHF_ID_T destination; /*!< \brief Destination of the message. */ - MIH_C_Link_Handover_Imminent_indication_t primitive; /*!< \brief Primitive. */ -} __attribute__((__packed__))MIH_C_Message_Link_Handover_Imminent_indication_t; - - -/*! \struct MIH_C_Message_Link_Handover_Complete_indication -* \brief Structure defining the message Link_Handover_Complete.indication. -*/ -typedef struct MIH_C_Message_Link_Handover_Complete_indication { - MIH_C_HEADER_T header; /*!< \brief Header of the message. */ - MIH_C_MIHF_ID_T source; /*!< \brief Source of the message. */ - MIH_C_MIHF_ID_T destination; /*!< \brief Destination of the message. */ - MIH_C_Link_Handover_Complete_indication_t primitive; /*!< \brief Primitive. */ -} __attribute__((__packed__))MIH_C_Message_Link_Handover_Complete_indication_t; - - -/*! \struct MIH_C_Message_Link_PDU_Transmit_Status_indication -* \brief Structure defining the message Link_PDU_Transmit_Status.indication. -*/ -typedef struct MIH_C_Message_Link_PDU_Transmit_Status_indication { - MIH_C_HEADER_T header; /*!< \brief Header of the message. */ - MIH_C_MIHF_ID_T source; /*!< \brief Source of the message. */ - MIH_C_MIHF_ID_T destination; /*!< \brief Destination of the message. */ - MIH_C_Link_PDU_Transmit_Status_indication_t primitive; /*!< \brief Primitive. */ -} __attribute__((__packed__))MIH_C_Message_Link_PDU_Transmit_Status_indication_t; - - -/*! \struct MIH_C_Message_Link_Capability_Discover_request -* \brief Structure defining the message Link_Capability_Discover.request. -*/ -typedef struct MIH_C_Message_Link_Capability_Discover_request { - MIH_C_HEADER_T header; /*!< \brief Header of the message. */ - MIH_C_MIHF_ID_T source; /*!< \brief Source of the message. */ - MIH_C_MIHF_ID_T destination; /*!< \brief Destination of the message. */ - MIH_C_Link_Capability_Discover_request_t primitive; /*!< \brief Primitive. */ -} __attribute__((__packed__))MIH_C_Message_Link_Capability_Discover_request_t; - - -/*! \struct MIH_C_Message_Link_Capability_Discover_confirm -* \brief Structure defining the message Link_Capability_Discover.confirm. -*/ -typedef struct MIH_C_Message_Link_Capability_Discover_confirm { - MIH_C_HEADER_T header; /*!< \brief Header of the message. */ - MIH_C_MIHF_ID_T source; /*!< \brief Source of the message. */ - MIH_C_MIHF_ID_T destination; /*!< \brief Destination of the message. */ - MIH_C_Link_Capability_Discover_confirm_t primitive; /*!< \brief Primitive. */ -} __attribute__((__packed__))MIH_C_Message_Link_Capability_Discover_confirm_t; - - -/*! \struct MIH_C_Message_Link_Event_Subscribe_request -* \brief Structure defining the message Link_Event_Subscribe.request. -*/ -typedef struct MIH_C_Message_Link_Event_Subscribe_request { - MIH_C_HEADER_T header; /*!< \brief Header of the message. */ - MIH_C_MIHF_ID_T source; /*!< \brief Source of the message. */ - MIH_C_MIHF_ID_T destination; /*!< \brief Destination of the message. */ - MIH_C_Link_Event_Subscribe_request_t primitive; /*!< \brief Primitive. */ -} __attribute__((__packed__))MIH_C_Message_Link_Event_Subscribe_request_t; - - -/*! \struct MIH_C_Message_Link_Event_Subscribe_confirm -* \brief Structure defining the message Link_Event_Subscribe.confirm. -*/ -typedef struct MIH_C_Message_Link_Event_Subscribe_confirm { - MIH_C_HEADER_T header; /*!< \brief Header of the message. */ - MIH_C_MIHF_ID_T source; /*!< \brief Source of the message. */ - MIH_C_MIHF_ID_T destination; /*!< \brief Destination of the message. */ - MIH_C_Link_Event_Subscribe_confirm_t primitive; /*!< \brief Primitive. */ -} __attribute__((__packed__))MIH_C_Message_Link_Event_Subscribe_confirm_t; - - -/*! \struct MIH_C_Message_Link_Event_Unsubscribe_request -* \brief Structure defining the message Link_Event_Unsubscribe.request. -*/ -typedef struct MIH_C_Message_Link_Event_Unsubscribe_request { - MIH_C_HEADER_T header; /*!< \brief Header of the message. */ - MIH_C_MIHF_ID_T source; /*!< \brief Source of the message. */ - MIH_C_MIHF_ID_T destination; /*!< \brief Destination of the message. */ - MIH_C_Link_Event_Unsubscribe_request_t primitive; /*!< \brief Primitive. */ -} __attribute__((__packed__))MIH_C_Message_Link_Event_Unsubscribe_request_t; - - -/*! \struct MIH_C_Message_Link_Event_Unsubscribe_confirm -* \brief Structure defining the message Link_Event_Unsubscribe.confirm. -*/ -typedef struct MIH_C_Message_Link_Event_Unsubscribe_confirm { - MIH_C_HEADER_T header; /*!< \brief Header of the message. */ - MIH_C_MIHF_ID_T source; /*!< \brief Source of the message. */ - MIH_C_MIHF_ID_T destination; /*!< \brief Destination of the message. */ - MIH_C_Link_Event_Unsubscribe_confirm_t primitive; /*!< \brief Primitive. */ -} __attribute__((__packed__))MIH_C_Message_Link_Event_Unsubscribe_confirm_t; - - -/*! \struct MIH_C_Message_Link_Get_Parameters_request -* \brief Structure defining the message Link_Get_Parameters.request. -*/ -typedef struct MIH_C_Message_Link_Get_Parameters_request { - MIH_C_HEADER_T header; /*!< \brief Header of the message. */ - MIH_C_MIHF_ID_T source; /*!< \brief Source of the message. */ - MIH_C_MIHF_ID_T destination; /*!< \brief Destination of the message. */ - MIH_C_Link_Get_Parameters_request_t primitive; /*!< \brief Primitive. */ -} __attribute__((__packed__))MIH_C_Message_Link_Get_Parameters_request_t; - - -/*! \struct MIH_C_Message_Link_Get_Parameters_confirm -* \brief Structure defining the message Link_Get_Parameters.confirm. -*/ -typedef struct MIH_C_Message_Link_Get_Parameters_confirm { - MIH_C_HEADER_T header; /*!< \brief Header of the message. */ - MIH_C_MIHF_ID_T source; /*!< \brief Source of the message. */ - MIH_C_MIHF_ID_T destination; /*!< \brief Destination of the message. */ - MIH_C_Link_Get_Parameters_confirm_t primitive; /*!< \brief Primitive. */ -} __attribute__((__packed__))MIH_C_Message_Link_Get_Parameters_confirm_t; - - -/*! \struct MIH_C_Message_Link_Configure_Thresholds_request -* \brief Structure defining the message Link_Configure_Thresholds.request. -*/ -typedef struct MIH_C_Message_Link_Configure_Thresholds_request { - MIH_C_HEADER_T header; /*!< \brief Header of the message. */ - MIH_C_MIHF_ID_T source; /*!< \brief Source of the message. */ - MIH_C_MIHF_ID_T destination; /*!< \brief Destination of the message. */ - MIH_C_Link_Configure_Thresholds_request_t primitive; /*!< \brief Primitive. */ -} __attribute__((__packed__))MIH_C_Message_Link_Configure_Thresholds_request_t; - - -/*! \struct MIH_C_Message_Link_Configure_Thresholds_confirm -* \brief Structure defining the message Link_Configure_Thresholds.confirm. -*/ -typedef struct MIH_C_Message_Link_Configure_Thresholds_confirm { - MIH_C_HEADER_T header; /*!< \brief Header of the message. */ - MIH_C_MIHF_ID_T source; /*!< \brief Source of the message. */ - MIH_C_MIHF_ID_T destination; /*!< \brief Destination of the message. */ - MIH_C_Link_Configure_Thresholds_confirm_t primitive; /*!< \brief Primitive. */ -} __attribute__((__packed__))MIH_C_Message_Link_Configure_Thresholds_confirm_t; - - -/*! \struct MIH_C_Message_Link_Action_request -* \brief Structure defining the message Link_Action.request. -*/ -typedef struct MIH_C_Message_Link_Action_request { - MIH_C_HEADER_T header; /*!< \brief Header of the message. */ - MIH_C_MIHF_ID_T source; /*!< \brief Source of the message. */ - MIH_C_MIHF_ID_T destination; /*!< \brief Destination of the message. */ - MIH_C_Link_Action_request_t primitive; /*!< \brief Primitive. */ -} __attribute__((__packed__))MIH_C_Message_Link_Action_request_t; - - -/*! \struct MIH_C_Message_Link_Action_confirm -* \brief Structure defining the message Link_Action.confirm. -*/ -typedef struct MIH_C_Message_Link_Action_confirm { - MIH_C_HEADER_T header; /*!< \brief Header of the message. */ - MIH_C_MIHF_ID_T source; /*!< \brief Source of the message. */ - MIH_C_MIHF_ID_T destination; /*!< \brief Destination of the message. */ - MIH_C_Link_Action_confirm_t primitive; /*!< \brief Primitive. */ -} __attribute__((__packed__))MIH_C_Message_Link_Action_confirm_t; - - -#endif -/** @}*/ diff --git a/openair3/RAL-LTE/INTERFACE-802.21/INCLUDE/MIH_C_Link_Primitives.h b/openair3/RAL-LTE/INTERFACE-802.21/INCLUDE/MIH_C_Link_Primitives.h deleted file mode 100755 index 083b59a615..0000000000 --- a/openair3/RAL-LTE/INTERFACE-802.21/INCLUDE/MIH_C_Link_Primitives.h +++ /dev/null @@ -1,231 +0,0 @@ -/*************************************************************************** - MIH_C_Link_Primitives.h - description - ------------------- - copyright : (C) 2012 by Eurecom - email : davide.brizzolara@eurecom.fr; michelle.wetterwald@eurecom.fr -*************************************************************************** -Type definition and structure for ODTONE interface -***************************************************************************/ - -/** \defgroup MIH_C_LINK_PRIMITIVES 802.21 Link Primitives - * \ingroup MIH_C_INTERFACE - * - * @{ - */ - -#ifndef __MIH_C_LINK_PRIMITIVES_H__ -#define __MIH_C_LINK_PRIMITIVES_H__ -#include -//----------------------------------------------------------------------------- -#include "MIH_C_Types.h" -//----------------------------------------------------------------------------- -/*! \struct MIH_C_Link_Detected_indication -* \brief Structure defining the Link_Detected.indication MIH_LINK_SAP primitive (see IEEE Std 802.21-2008 7.3.1 Link_Detected.indication) -*/ -typedef struct MIH_C_Link_Detected_indication { - MIH_C_LINK_DET_INFO_T LinkDetectedInfo; /*!< \brief Information of a detected link. */ -} __attribute__((__packed__))MIH_C_Link_Detected_indication_t; - -//----------------------------------------------------------------------------- -/*! \struct MIH_C_Link_Up_indication -* \brief Structure defining the Link_Up.indication MIH_LINK_SAP primitive (see IEEE Std 802.21-2008 7.3.2 Link_Up.indication) -*/ -typedef struct MIH_C_Link_Up_indication { - MIH_C_LINK_TUPLE_ID_T LinkIdentifier; /*!< \brief Identifier of the link associated with the event. */ - MIH_C_LINK_ADDR_T *OldAccessRouter; /*!< \brief (Optional) Old Access Router link address.*/ - MIH_C_LINK_ADDR_T *NewAccessRouter; /*!< \brief (Optional) New Access Router link address. */ - MIH_C_IP_RENEWAL_FLAG_T *IPRenewalFlag; /*!< \brief (Optional) Indicates whether the MN needs to changeIP Address in the new PoA. */ - MIH_C_IP_MOB_MGMT_T *MobilityManagementSupport;/*!< \brief (Optional) Indicates the type of Mobility Management Protocol supported by the new PoA. */ -} __attribute__((__packed__))MIH_C_Link_Up_indication_t; - - - -/*! \struct MIH_C_Link_Down_indication -* \brief Structure defining the Link_Down.indication MIH_LINK_SAP primitive (see IEEE Std 802.21-2008 7.3.3 Link_Down.indication) -*/ -typedef struct MIH_C_Link_Down_indication { - MIH_C_LINK_TUPLE_ID_T LinkIdentifier; /*!< \brief Identifier of the link associated with the event. */ - MIH_C_LINK_ADDR_T *OldAccessRouter; /*!< \brief (Optional) Old Access Router link address.*/ - MIH_C_LINK_DN_REASON_T ReasonCode; /*!< \brief Reason why the link went down. */ -} __attribute__((__packed__))MIH_C_Link_Down_indication_t; - -TYPEDEF_LIST(MIH_C_LINK_PARAM_RPT, 16); -/*! \struct MIH_C_Link_Parameters_Report_indication -* \brief Structure defining the Link_Parameters_Report.indication MIH_LINK_SAP primitive (see IEEE Std 802.21-2008 7.3.4 Link_Parameters_Report.indication) -*/ -typedef struct MIH_C_Link_Parameters_Report_indication { - MIH_C_LINK_TUPLE_ID_T LinkIdentifier; /*!< \brief Identifier of the link associated with the event. */ - LIST(MIH_C_LINK_PARAM_RPT, LinkParametersReportList) /*!< \brief A list of Link Parameter Report.*/ -} __attribute__((__packed__))MIH_C_Link_Parameters_Report_indication_t; - - -/*! \struct MIH_C_Link_Going_Down_indication -* \brief Structure defining the Link_Going_Down.indication MIH_LINK_SAP primitive (see IEEE Std 802.21-2008 7.3.5 Link_Going_Down.indication) -*/ -typedef struct MIH_C_Link_Going_Down_indication { - MIH_C_LINK_TUPLE_ID_T LinkIdentifier; /*!< \brief Identifier of the link associated with the event. */ - UNSIGNED_INT2( - TimeInterval) /*!< \brief Time Interval (in milliseconds) specifies the time interval at which the link is expected to go down. A value of "0" is specified if the time interval is unknown.*/ - MIH_C_LINK_GD_REASON_T LinkGoingDownReason; /*!< \brief The reason why the link is going to be down. */ - -} __attribute__((__packed__))MIH_C_Link_Going_Down_indication_t; - - - -/*! \struct MIH_C_Link_Handover_Imminent_indication -* \brief Structure defining the Link_Handover_Imminent.indication MIH_LINK_SAP primitive (see IEEE Std 802.21-2008 7.3.6 Link_Handover_Imminent.indication) -*/ -typedef struct MIH_C_Link_Handover_Imminent_indication { - MIH_C_LINK_TUPLE_ID_T OldLinkIdentifier; /*!< \brief Identifier of the old link. */ - MIH_C_LINK_TUPLE_ID_T NewLinkIdentifier; /*!< \brief Identifier of the new link. */ - MIH_C_LINK_ADDR_T *OldAccessRouter; /*!< \brief (Optional) Link address of old Access Router.*/ - MIH_C_LINK_ADDR_T *NewAccessRouter; /*!< \brief (Optional) Link address of new Access Router.*/ -} __attribute__((__packed__))MIH_C_Link_Handover_Imminent_indication_t; - - -/*! \struct MIH_C_Link_Handover_Complete_indication -* \brief Structure defining the Link_Handover_Complete.indication MIH_LINK_SAP primitive (see IEEE Std 802.21-2008 7.3.7 Link_Handover_Complete.indication) -*/ -typedef struct MIH_C_Link_Handover_Complete_indication { - MIH_C_LINK_TUPLE_ID_T OldLinkIdentifier; /*!< \brief Identifier of the old link. */ - MIH_C_LINK_TUPLE_ID_T NewLinkIdentifier; /*!< \brief Identifier of the new link. */ - MIH_C_LINK_ADDR_T *OldAccessRouter; /*!< \brief (Optional) Link address of old Access Router.*/ - MIH_C_LINK_ADDR_T *NewAccessRouter; /*!< \brief (Optional) Link address of new Access Router.*/ - MIH_C_STATUS_T LinkHandoverStatus; /*!< \brief Status of the link handover.*/ -} __attribute__((__packed__))MIH_C_Link_Handover_Complete_indication_t; - - -/*! \struct MIH_C_Link_PDU_Transmit_Status_indication -* \brief Structure defining the Link_PDU_Transmit_Status.indication MIH_LINK_SAP primitive (see IEEE Std 802.21-2008 7.3.8 Link_PDU_Transmit_Status.indication) -*/ -typedef struct MIH_C_Link_PDU_Transmit_Status_indication { - MIH_C_LINK_TUPLE_ID_T LinkIdentifier; /*!< \brief Identifier of the link associated with the event. */ - UNSIGNED_INT2(PacketIdentifier) /*!< \brief Identifier for higher layer PDU on which this notification is generated. */ - BOOLEAN(TransmissionStatus) /*!< \brief Status of the transmitted packet. True: Success, False: Failure*/ -} __attribute__((__packed__))MIH_C_Link_PDU_Transmit_Status_indication_t; - - -/*! \struct MIH_C_Link_Capability_Discover_request -* \brief Structure defining the Link_Capability_Discover.request MIH_LINK_SAP primitive (see IEEE Std 802.21-2008 7.3.9.1 Link_Capability_Discover.request) -*/ -typedef struct MIH_C_Link_Capability_Discover_request { -} __attribute__((__packed__))MIH_C_Link_Capability_Discover_request_t; - - -/*! \struct MIH_C_Link_Capability_Discover_confirm -* \brief Structure defining the Link_Capability_Discover.confirm MIH_LINK_SAP primitive (see IEEE Std 802.21-2008 7.3.9.2 Link_Capability_Discover.confirm) -*/ -typedef struct MIH_C_Link_Capability_Discover_confirm { - MIH_C_STATUS_T Status; /*!< \brief Status of operation. Code 3 (Authorization Failure) is not applicable.*/ - MIH_C_LINK_EVENT_LIST_T - *SupportedLinkEventList; /*!< \brief List of link-layer events supported by the link layer. This parameter is not included if Status does not indicate “Success.� */ - MIH_C_LINK_CMD_LIST_T - *SupportedLinkCommandList; /*!< \brief List of link-layer commands supported by the link layer. This parameter is not included if Status does not indicate “Success.� */ -} __attribute__((__packed__))MIH_C_Link_Capability_Discover_confirm_t; - - -/*! \struct MIH_C_Link_Event_Subscribe_request -* \brief Structure defining the Link_Event_Subscribe.request MIH_LINK_SAP primitive (see IEEE Std 802.21-2008 7.3.10.1 Link_Event_Subscribe.request) -*/ -typedef struct MIH_C_Link_Event_Subscribe_request { - MIH_C_LINK_EVENT_LIST_T RequestedLinkEventList; /*!< \brief List of link-layer events that for which the subscriber would like to receive indications. */ -} __attribute__((__packed__))MIH_C_Link_Event_Subscribe_request_t; - - -/*! \struct MIH_C_Link_Event_Subscribe_confirm -* \brief Structure defining the Link_Event_Subscribe.confirm MIH_LINK_SAP primitive (see IEEE Std 802.21-2008 7.3.10.2 Link_Event_Subscribe.confirm) -*/ -typedef struct MIH_C_Link_Event_Subscribe_confirm { - MIH_C_STATUS_T Status; /*!< \brief Status of operation. Code 3 (Authorization Failure) is not applicable.*/ - MIH_C_LINK_EVENT_LIST_T *ResponseLinkEventList; /*!< \brief List of successfully subscribed link events. This parameter is not included if Status does not indicate "Success".*/ -} __attribute__((__packed__))MIH_C_Link_Event_Subscribe_confirm_t; - - -/*! \struct MIH_C_Link_Event_Unsubscribe_request -* \brief Structure defining the Link_Event_Unsubscribe.request MIH_LINK_SAP primitive (see IEEE Std 802.21-2008 7.3.11.1 Link_Event_Unsubscribe.request) -*/ -typedef struct MIH_C_Link_Event_Unsubscribe_request { - MIH_C_LINK_EVENT_LIST_T RequestedLinkEventList; /*!< \brief List of link-layer events for which indications need to be unsubscribed from the Event Source.*/ -} __attribute__((__packed__))MIH_C_Link_Event_Unsubscribe_request_t; - - -/*! \struct MIH_C_Link_Event_Unsubscribe_confirm -* \brief Structure defining the Link_Event_Unsubscribe.confirm MIH_LINK_SAP primitive (see IEEE Std 802.21-2008 7.3.11.2 Link_Event_Unsubscribe.confirm) -*/ -typedef struct MIH_C_Link_Event_Unsubscribe_confirm { - MIH_C_STATUS_T Status; /*!< \brief Status of operation. Code 3 (Authorization Failure) is not applicable.*/ - MIH_C_LINK_EVENT_LIST_T *ResponseLinkEventList; /*!< \brief List of successfully unsubscribed link events. This parameter is not included if Status does not indicate “Success.� */ -} __attribute__((__packed__))MIH_C_Link_Event_Unsubscribe_confirm_t; - - -/*! \struct MIH_C_Link_Get_Parameters_request -* \brief Structure defining the Link_Get_Parameters.request MIH_LINK_SAP primitive (see IEEE Std 802.21-2008 7.3.12.1 Link_Get_Parameters.request) -*/ -typedef struct MIH_C_Link_Get_Parameters_request { - LIST(MIH_C_LINK_PARAM_TYPE, LinkParametersRequest) /*!< \brief A list of link parameters for which status is requested.*/ - MIH_C_LINK_STATES_REQ_T LinkStatesRequest; /*!< \brief The link states to be requested.*/ - MIH_C_LINK_DESC_REQ_T LinkDescriptorsRequest; /*!< \brief The link descriptors to be requested. */ -} __attribute__((__packed__))MIH_C_Link_Get_Parameters_request_t; - - -/*! \struct MIH_C_Link_Get_Parameters_confirm -* \brief Structure defining the Link_Get_Parameters.confirm MIH_LINK_SAP primitive (see IEEE Std 802.21-2008 7.3.12.1 Link_Get_Parameters.confirm) -*/ -typedef struct MIH_C_Link_Get_Parameters_confirm { - MIH_C_STATUS_T Status; /*!< \brief Status of operation. Code 3 (Authorization Failure) is not applicable.*/ - LIST(MIH_C_LINK_PARAM, *LinkParametersStatusList) /*!< \brief A list of measurable link parameters and their current values.*/ - LIST(MIH_C_LINK_STATES_RSP, *LinkStatesResponse) /*!< \brief The current link state information.*/ - LIST(MIH_C_LINK_DESC_RSP, *LinkDescriptorsResponse) /*!< \brief The descriptors of a link.*/ -} __attribute__((__packed__))MIH_C_Link_Get_Parameters_confirm_t; - -TYPEDEF_LIST(MIH_C_LINK_CFG_PARAM, MIH_C_LINK_CFG_PARAM_LIST_LENGTH); -/*! \struct MIH_C_Link_Configure_Thresholds_request -* \brief Structure defining the Link_Configure_Thresholds.request MIH_LINK_SAP primitive (see IEEE Std 802.21-2008 7.3.13.1 Link_Configure_Thresholds.request) -*/ -typedef struct MIH_C_Link_Configure_Thresholds_request { - LIST(MIH_C_LINK_CFG_PARAM, LinkConfigureParameterList) /*!< \brief A list of link threshold parameters.*/ -} __attribute__((__packed__))MIH_C_Link_Configure_Thresholds_request_t; - -#define MIH_C_LINK_CFG_STATUS_LIST_LENGTH 16 -TYPEDEF_LIST(MIH_C_LINK_CFG_STATUS, MIH_C_LINK_CFG_STATUS_LIST_LENGTH); -/*! \struct MIH_C_Link_Configure_Thresholds_confirm -* \brief Structure defining the Link_Configure_Thresholds.confirm MIH_LINK_SAP primitive (see IEEE Std 802.21-2008 7.3.13.2 Link_Configure_Thresholds.confirm) -*/ -typedef struct MIH_C_Link_Configure_Thresholds_confirm { - MIH_C_STATUS_T Status; /*!< \brief Status of operation. Code 3 (Authorization Failure) is not applicable.*/ - LIST(MIH_C_LINK_CFG_STATUS, *LinkConfigureStatusList) /*!< \brief A list of Link Configure Status. This parameter is not included if Status does not indicate “Success.�*/ -} __attribute__((__packed__))MIH_C_Link_Configure_Thresholds_confirm_t; - - -/*! \struct MIH_C_Link_Action_request -* \brief Structure defining the Link_Action.request MIH_LINK_SAP primitive (see IEEE Std 802.21-2008 7.3.14.1 Link_Action.request) -*/ -typedef struct MIH_C_Link_Action_request { - // MIH_C_LINK_ACTION_REQ_T - MIH_C_LINK_ACTION_T LinkAction; /*!< \brief Specifies the action to perform. */ - UNSIGNED_INT2( - ExecutionDelay) /*!< \brief Time (in ms) to elapse before the action needs to be taken. A value of 0 indicates that the action is taken immediately. Time elapsed is calculated from the instance the request arrives until the time when the execution of the action is carried out. */ - MIH_C_LINK_ADDR_T *PoALinkAddress; /*!< \brief (Optional) The PoA link address to forward data to. This parameter is used when DATA_FWD_REQ action is requested. */ -} __attribute__((__packed__))MIH_C_Link_Action_request_t; - - -/*! \struct MIH_C_Link_Action_confirm -* \brief Structure defining the Link_Action.confirm MIH_LINK_SAP primitive (see IEEE Std 802.21-2008 7.3.14.2 Link_Action.confirm) -*/ -typedef struct MIH_C_Link_Action_confirm { - MIH_C_STATUS_T Status; /*!< \brief Status of operation. Code 3 (Authorization Failure) is not applicable.*/ - LIST(MIH_C_LINK_SCAN_RSP, - *ScanResponseSet) /*!< \brief (Optional) A list of discovered links and related information. This parameter is not included if Status does not indicate “Success.� */ - MIH_C_LINK_AC_RESULT_T *LinkActionResult; /*!< \brief Specifies whether the link action was successful. This parameter is not included if Status does not indicate “Success.� */ -} __attribute__((__packed__))MIH_C_Link_Action_confirm_t; - -/*! \struct MIH_C_Link_Register_indication -* \brief Structure defining the MIH_C_Link_Register.indication MIH_LINK_SAP primitive (ODTONE specific Link_Register - 101) -*/ -typedef struct { - MIH_C_LINK_ID_T Link_Id; -} __attribute__((__packed__))MIH_C_Link_Register_indication_t; - - -#endif -/** @}*/ diff --git a/openair3/RAL-LTE/INTERFACE-802.21/INCLUDE/MIH_C_Medieval_extensions.h b/openair3/RAL-LTE/INTERFACE-802.21/INCLUDE/MIH_C_Medieval_extensions.h deleted file mode 100755 index 91f907a478..0000000000 --- a/openair3/RAL-LTE/INTERFACE-802.21/INCLUDE/MIH_C_Medieval_extensions.h +++ /dev/null @@ -1,104 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ -/*! \file MIH_C_Medieval_extensions.h - * \brief This file defines the prototypes of the functions for coding and decoding data types defined by the Medieval project. - * \author BRIZZOLA Davide, GAUTHIER Lionel, MAUREL Frederic, WETTERWALD Michelle - * \date 2012 - * \version - * \note - * \bug - * \warning - */ -/** \defgroup MIH_C_MEDIEVAL_EXTENSIONS Extensions to 802.21 defined by MEDIVAL IST Project. - * \ingroup MIH_C_INTERFACE - * - * @{ - */ -#ifndef __MIH_C_MEDIEVAL_EXTENSIONS_H__ -# define __MIH_C_MEDIEVAL_EXTENSIONS_H__ -//----------------------------------------------------------------------------- -# ifdef MIH_C_MEDIEVAL_EXTENSIONS_C -# define private_Medieval_extensions(x) x -# define protected_Medieval_extensions(x) x -# define public_Medieval_extensions(x) x -# else -# ifdef MIH_C_INTERFACE -# define private_Medieval_extensions(x) -# define protected_Medieval_extensions(x) extern x -# define public_Medieval_extensions(x) extern x -# else -# define private_Medieval_extensions(x) -# define protected_Medieval_extensions(x) -# define public_Medieval_extensions(x) extern x -# endif -# endif -//----------------------------------------------------------------------------- -#include -#include -#include -#include -#include -#include -#include -//----------------------------------------------------------------------------- -#include "MIH_C.h" -//----------------------------------------------------------------------------- -#ifdef MIH_C_MEDIEVAL_EXTENSIONS -public_Medieval_extensions(unsigned int MIH_C_PROTO2String (MIH_C_PROTO_T *protoP,char* bufP);) -public_Medieval_extensions(unsigned int MIH_C_IP_TUPLE2String(MIH_C_IP_TUPLE_T *dataP, char* bufP);) -public_Medieval_extensions(void MIH_C_IP_TUPLE_encode(Bit_Buffer_t* bbP, MIH_C_IP_TUPLE_T *dataP);) -public_Medieval_extensions(void MIH_C_IP_TUPLE_decode(Bit_Buffer_t* bbP, MIH_C_IP_TUPLE_T *dataP);) -public_Medieval_extensions(unsigned int MIH_C_FLOW_ID2String(MIH_C_FLOW_ID_T *dataP, char* bufP);) -public_Medieval_extensions(void MIH_C_FLOW_ID_encode(Bit_Buffer_t* bbP, MIH_C_FLOW_ID_T *dataP);) -public_Medieval_extensions(void MIH_C_FLOW_ID_decode(Bit_Buffer_t* bbP, MIH_C_FLOW_ID_T *dataP);) -public_Medieval_extensions(unsigned int MIH_C_MARK2String(MIH_C_MARK_T *dataP, char* bufP);) -public_Medieval_extensions(void MIH_C_MARK_encode(Bit_Buffer_t* bbP, MIH_C_MARK_T *dataP);) -public_Medieval_extensions(void MIH_C_MARK_decode(Bit_Buffer_t* bbP, MIH_C_MARK_T *dataP);) -public_Medieval_extensions(unsigned int MIH_C_QOS2String(MIH_C_QOS_T *dataP, char* bufP);) -public_Medieval_extensions(void MIH_C_QOS_encode(Bit_Buffer_t* bbP, MIH_C_QOS_T *dataP);) -public_Medieval_extensions(void MIH_C_QOS_decode(Bit_Buffer_t* bbP, MIH_C_QOS_T *dataP);) -public_Medieval_extensions(unsigned int MIH_C_RESOURCE_DESC2String(MIH_C_RESOURCE_DESC_T *dataP, char* bufP);) -public_Medieval_extensions(void MIH_C_RESOURCE_DESC_encode(Bit_Buffer_t* bbP, MIH_C_RESOURCE_DESC_T *dataP);) -public_Medieval_extensions(void MIH_C_RESOURCE_DESC_decode(Bit_Buffer_t* bbP, MIH_C_RESOURCE_DESC_T *dataP);) -public_Medieval_extensions(unsigned int MIH_C_FLOW_ATTRIBUTE2String(MIH_C_FLOW_ATTRIBUTE_T *dataP, char* bufP);) -public_Medieval_extensions(void MIH_C_FLOW_ATTRIBUTE_encode(Bit_Buffer_t* bbP, MIH_C_FLOW_ATTRIBUTE_T *dataP);) -public_Medieval_extensions(void MIH_C_FLOW_ATTRIBUTE_decode(Bit_Buffer_t* bbP, MIH_C_FLOW_ATTRIBUTE_T *dataP);) -public_Medieval_extensions(unsigned int MIH_C_LINK_AC_PARAM2String(MIH_C_LINK_AC_PARAM_T *dataP, char* bufP);) -public_Medieval_extensions(void MIH_C_LINK_AC_PARAM_encode(Bit_Buffer_t* bbP, MIH_C_LINK_AC_PARAM_T *dataP);) -public_Medieval_extensions(void MIH_C_LINK_AC_PARAM_decode(Bit_Buffer_t* bbP, MIH_C_LINK_AC_PARAM_T *dataP);) -public_Medieval_extensions(unsigned int MIH_C_LINK_ACTION2String(MIH_C_LINK_ACTION_T *dataP, char* bufP);) -public_Medieval_extensions(void MIH_C_LINK_ACTION_encode(Bit_Buffer_t* bbP, MIH_C_LINK_ACTION_T *dataP);) -public_Medieval_extensions(void MIH_C_LINK_ACTION_decode(Bit_Buffer_t* bbP, MIH_C_LINK_ACTION_T *dataP);) -public_Medieval_extensions(void MIH_C_LINK_ACTION_short_decode(Bit_Buffer_t* bbP, MIH_C_LINK_ACTION_T *dataP);) - -#endif -#endif -/** @}*/ - - diff --git a/openair3/RAL-LTE/INTERFACE-802.21/INCLUDE/MIH_C_Types.h b/openair3/RAL-LTE/INTERFACE-802.21/INCLUDE/MIH_C_Types.h deleted file mode 100755 index 1ac42be1e9..0000000000 --- a/openair3/RAL-LTE/INTERFACE-802.21/INCLUDE/MIH_C_Types.h +++ /dev/null @@ -1,3070 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ -/*! \file MIH_C_Types.h - * \brief This file defines the 802.21 types or constants defined in Std 802.21-2008 Table F1, F2, F3, - * F4, F5, F6, F7, F8, F9, F12, F13, F19, F20, F22, L2. Some tables may be not implemented at all. - * \author BRIZZOLA Davide, GAUTHIER Lionel, MAUREL Frederic, WETTERWALD Michelle - * \date 2012 - * \version - * \note - * \bug - * \warning - */ -#ifndef __MIH_C_LINK_TYPES_H__ -#define __MIH_C_LINK_TYPES_H__ -#include -#include - -#ifndef USER_MODE -# define USER_MODE -# warning "Hack USER_MODE" -#endif -//----------------------------------------------------------------------------- -#include "MIH_C_Link_Constants.h" -#include "MIH_C_bit_buffer.h" -//----------------------------------------------------------------------------- -#define MIH_C_DEBUG_SERIALIZATION 1 -#define MIH_C_DEBUG_DESERIALIZATION 1 -//----------------------------------------------------------------------------- -#define STR(x) #x - -/** \defgroup MIH_C_INTERFACE 802.21 interface - * - */ - - -//----------------------------------------------------------------------------- -// STD 802.21-2008 Table F.1 Basic data types -//----------------------------------------------------------------------------- - - -//----------------------- BITMAP(size) ---------------------------------------- -/*! \var typedef u_int8_t MIH_C_BITMAP8_T; - * \ingroup MIH_C_F1_BASIC_DATA_TYPES - * \brief A type definition for u_int8_t. - */ -typedef u_int8_t MIH_C_BITMAP8_T; -/*! \var typedef u_int16_t MIH_C_BITMAP16_T; - * \ingroup MIH_C_F1_BASIC_DATA_TYPES - * \brief A type definition for u_int16_t. - */ -typedef u_int16_t MIH_C_BITMAP16_T; -/*! \struct MIH_C_BITMAP24_T - * \ingroup MIH_C_F1_BASIC_DATA_TYPES - */ -typedef struct MIH_C_BITMAP24 {u_int8_t val[3];}__attribute__((__packed__)) MIH_C_BITMAP24_T; -/*! \var typedef u_int32_t MIH_C_BITMAP32_T; - * \ingroup MIH_C_F1_BASIC_DATA_TYPES - * \brief A type definition for u_int32_t. - */ -typedef u_int32_t MIH_C_BITMAP32_T; -/*! \var typedef u_int64_t MIH_C_BITMAP64_T; - * \brief A type definition for u_int64_t. - */ -typedef u_int64_t MIH_C_BITMAP64_T; -/*! \struct MIH_C_BITMAP128_T - * \ingroup MIH_C_F1_BASIC_DATA_TYPES - */ -typedef struct MIH_C_BITMAP128 {u_int64_t val[2];}__attribute__((__packed__)) MIH_C_BITMAP128_T; -/*! \struct MIH_C_BITMAP256_T - * \ingroup MIH_C_F1_BASIC_DATA_TYPES - */ -typedef struct MIH_C_BITMAP256 {u_int64_t val[4];}__attribute__((__packed__)) MIH_C_BITMAP256_T; - -#ifdef MIH_C_F1_BASIC_DATA_TYPES_CODEC_C - /*! \def TYPEDEF_BITMAP6(DATA_TYPE_NAME) - * \ingroup MIH_C_F1_BASIC_DATA_TYPES - * \brief Defines DATA_TYPE_NAME as a MIH_C_BITMAP8_T. - */ - #define TYPEDEF_BITMAP6(DATA_TYPE_NAME) typedef MIH_C_BITMAP8_T DATA_TYPE_NAME ## _T;\ - void MIH_C_BITMAP8_encode(Bit_Buffer_t* bbP, MIH_C_BITMAP8_T* dataP);\ - void MIH_C_BITMAP8_decode(Bit_Buffer_t* bbP, MIH_C_BITMAP8_T* dataP);\ - inline unsigned int DATA_TYPE_NAME ## 2String(DATA_TYPE_NAME ## _T *bitmapP, char* buffP) {\ - return sprintf(buffP, "0x%02X", *bitmapP);\ - };\ - void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *bitmapP) {\ - MIH_C_BITMAP8_encode(bbP, bitmapP);};\ - void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *bitmapP) {MIH_C_BITMAP8_decode(bbP, bitmapP);}; - - /*! \def TYPEDEF_BITMAP8(DATA_TYPE_NAME) - * \ingroup MIH_C_F1_BASIC_DATA_TYPES - * \brief Defines DATA_TYPE_NAME as a MIH_C_BITMAP8_T. - */ - #define TYPEDEF_BITMAP8(DATA_TYPE_NAME) typedef MIH_C_BITMAP8_T DATA_TYPE_NAME ## _T;\ - void MIH_C_BITMAP8_encode(Bit_Buffer_t* bbP, MIH_C_BITMAP8_T* dataP);\ - void MIH_C_BITMAP8_decode(Bit_Buffer_t* bbP, MIH_C_BITMAP8_T* dataP);\ - unsigned int DATA_TYPE_NAME ## 2String(DATA_TYPE_NAME ## _T *bitmapP, char* buffP) {\ - return sprintf(buffP, "0x%02X", *bitmapP);\ - };\ - void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *bitmapP) {\ - MIH_C_BITMAP8_encode(bbP, bitmapP);};\ - void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *bitmapP) {MIH_C_BITMAP8_decode(bbP, bitmapP);}; - - /*! \def TYPEDEF_BITMAP16(DATA_TYPE_NAME) - * \ingroup MIH_C_F1_BASIC_DATA_TYPES - * \brief Defines DATA_TYPE_NAME as a MIH_C_BITMAP16_T. - */ - #define TYPEDEF_BITMAP16(DATA_TYPE_NAME) typedef MIH_C_BITMAP16_T DATA_TYPE_NAME ## _T;\ - void MIH_C_BITMAP16_encode(Bit_Buffer_t* bbP, MIH_C_BITMAP16_T* dataP);\ - void MIH_C_BITMAP16_decode(Bit_Buffer_t* bbP, MIH_C_BITMAP16_T* dataP);\ - unsigned int DATA_TYPE_NAME ## 2String(DATA_TYPE_NAME ## _T *bitmapP, char* buffP) {\ - return sprintf(buffP, "0x%04X", *bitmapP);\ - };\ - void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *bitmapP) {\ - MIH_C_BITMAP16_encode(bbP, bitmapP);};\ - void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *bitmapP) {MIH_C_BITMAP16_decode(bbP, bitmapP);}; - - /*! \def TYPEDEF_BITMAP20(DATA_TYPE_NAME) - * \ingroup MIH_C_F1_BASIC_DATA_TYPES - * \brief Defines DATA_TYPE_NAME as a MIH_C_BITMAP24_T. - */ - #define TYPEDEF_BITMAP20(DATA_TYPE_NAME) typedef MIH_C_BITMAP24_T DATA_TYPE_NAME ## _T;\ - void MIH_C_BITMAP24_encode(Bit_Buffer_t* bbP, MIH_C_BITMAP24_T* dataP);\ - void MIH_C_BITMAP24_decode(Bit_Buffer_t* bbP, MIH_C_BITMAP24_T* dataP);\ - unsigned int DATA_TYPE_NAME ## 2String(DATA_TYPE_NAME ## _T *bitmapP, char* buffP) {\ - return sprintf(buffP, "0x%02X%02X%02X", bitmapP->val[0], bitmapP->val[1], bitmapP->val[2]);\ - };\ - void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *bitmapP) {\ - MIH_C_BITMAP24_encode(bbP, bitmapP);};\ - void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *bitmapP) {MIH_C_BITMAP24_decode(bbP, bitmapP);}; - - /*! \def TYPEDEF_BITMAP32(DATA_TYPE_NAME) - * \ingroup MIH_C_F1_BASIC_DATA_TYPES - * \brief Defines DATA_TYPE_NAME as a MIH_C_BITMAP32_T. - */ - #define TYPEDEF_BITMAP32(DATA_TYPE_NAME) typedef MIH_C_BITMAP32_T DATA_TYPE_NAME ## _T;\ - void MIH_C_BITMAP32_encode(Bit_Buffer_t* bbP, MIH_C_BITMAP32_T* dataP);\ - void MIH_C_BITMAP32_decode(Bit_Buffer_t* bbP, MIH_C_BITMAP32_T* dataP);\ - unsigned int DATA_TYPE_NAME ## 2String(DATA_TYPE_NAME ## _T *bitmapP, char* buffP) {\ - return sprintf(buffP, "0x%08X", *bitmapP);\ - };\ - void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *bitmapP) {\ - MIH_C_BITMAP32_encode(bbP, bitmapP);};\ - void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *bitmapP) {MIH_C_BITMAP32_decode(bbP, bitmapP);}; - - /*! \def TYPEDEF_BITMAP64(DATA_TYPE_NAME) - * \ingroup MIH_C_F1_BASIC_DATA_TYPES - * \brief Defines DATA_TYPE_NAME as a MIH_C_BITMAP64_T. - */ - #define TYPEDEF_BITMAP64(DATA_TYPE_NAME) typedef MIH_C_BITMAP64_T DATA_TYPE_NAME ## _T;\ - void MIH_C_BITMAP64_encode(Bit_Buffer_t* bbP, MIH_C_BITMAP64_T* dataP);\ - void MIH_C_BITMAP64_decode(Bit_Buffer_t* bbP, MIH_C_BITMAP64_T* dataP);\ - unsigned int DATA_TYPE_NAME ## 2String(DATA_TYPE_NAME ## _T *bitmapP, char* buffP) {\ - unsigned int buffer_index = 0;\ - buffer_index = sprintf(buffP, "0x%08x", (MIH_C_UNSIGNED_INT4_T)(*bitmapP>>32));\ - buffer_index = sprintf(&buffP[buffer_index], "%08x", (MIH_C_UNSIGNED_INT4_T)(*bitmapP));\ - return buffer_index;\ - };\ - void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *bitmapP) {\ - MIH_C_BITMAP64_encode(bbP, bitmapP);};\ - void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *bitmapP) {MIH_C_BITMAP64_decode(bbP, bitmapP);}; - - /*! \def TYPEDEF_BITMAP128(DATA_TYPE_NAME) - * \ingroup MIH_C_F1_BASIC_DATA_TYPES - * \brief Defines DATA_TYPE_NAME as a MIH_C_BITMAP128_T. - */ - #define TYPEDEF_BITMAP128(DATA_TYPE_NAME) typedef MIH_C_BITMAP128_T DATA_TYPE_NAME ## _T;\ - void MIH_C_BITMAP128_encode(Bit_Buffer_t* bbP, MIH_C_BITMAP128_T* dataP);\ - void MIH_C_BITMAP128_decode(Bit_Buffer_t* bbP, MIH_C_BITMAP128_T* dataP);\ - void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *bitmapP) {MIH_C_BITMAP128_encode(bbP, bitmapP);};\ - void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *bitmapP) {MIH_C_BITMAP128_decode(bbP, bitmapP);}; - - /*! \def TYPEDEF_BITMAP256(DATA_TYPE_NAME) - * \ingroup MIH_C_F1_BASIC_DATA_TYPES - * \brief Defines DATA_TYPE_NAME as a MIH_C_BITMAP256_T. - */ - #define TYPEDEF_BITMAP256(DATA_TYPE_NAME) typedef MIH_C_BITMAP256_T DATA_TYPE_NAME ## _T;\ - void MIH_C_BITMAP256_encode(Bit_Buffer_t* bbP, MIH_C_BITMAP256_T* dataP);\ - void MIH_C_BITMAP256_decode(Bit_Buffer_t* bbP, MIH_C_BITMAP256_T* dataP);\ - void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *bitmapP) {MIH_C_BITMAP256_encode(bbP, bitmapP);};\ - void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *bitmapP) {MIH_C_BITMAP256_decode(bbP, bitmapP);}; - -#else - #define TYPEDEF_BITMAP6(DATA_TYPE_NAME) typedef MIH_C_BITMAP8_T DATA_TYPE_NAME ## _T;\ - extern unsigned int DATA_TYPE_NAME ## 2String(DATA_TYPE_NAME ## _T *bitmapP, char* buffP);\ - void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T* bitmapP);\ - void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T* bitmapP); - - #define TYPEDEF_BITMAP8(DATA_TYPE_NAME) typedef MIH_C_BITMAP8_T DATA_TYPE_NAME ## _T;\ - extern unsigned int DATA_TYPE_NAME ## 2String(DATA_TYPE_NAME ## _T *bitmapP, char* buffP);\ - void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T* bitmapP);\ - void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T* bitmapP); - - #define TYPEDEF_BITMAP16(DATA_TYPE_NAME) typedef MIH_C_BITMAP16_T DATA_TYPE_NAME ## _T;\ - extern unsigned int DATA_TYPE_NAME ## 2String(DATA_TYPE_NAME ## _T *bitmapP, char* buffP);\ - void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T* bitmapP);\ - void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T* bitmapP); - - #define TYPEDEF_BITMAP20(DATA_TYPE_NAME) typedef MIH_C_BITMAP24_T DATA_TYPE_NAME ## _T;\ - extern unsigned int DATA_TYPE_NAME ## 2String(DATA_TYPE_NAME ## _T *bitmapP, char* buffP);\ - void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T* bitmapP);\ - void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T* bitmapP); - - #define TYPEDEF_BITMAP32(DATA_TYPE_NAME) typedef MIH_C_BITMAP32_T DATA_TYPE_NAME ## _T;\ - extern unsigned int DATA_TYPE_NAME ## 2String(DATA_TYPE_NAME ## _T *bitmapP, char* buffP);\ - void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T* bitmapP);\ - void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T* bitmapP); - - #define TYPEDEF_BITMAP64(DATA_TYPE_NAME) typedef MIH_C_BITMAP64_T DATA_TYPE_NAME ## _T;\ - extern unsigned int DATA_TYPE_NAME ## 2String(DATA_TYPE_NAME ## _T *bitmapP, char* buffP);\ - void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T* bitmapP);\ - void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T* bitmapP); - - #define TYPEDEF_BITMAP128(DATA_TYPE_NAME) typedef MIH_C_BITMAP128_T DATA_TYPE_NAME ## _T;\ - void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T* bitmapP);\ - void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T* bitmapP); - - #define TYPEDEF_BITMAP256(DATA_TYPE_NAME) typedef MIH_C_BITMAP256_T DATA_TYPE_NAME ## _T;\ - void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T* bitmapP);\ - void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T* bitmapP); -#endif - -#define BITMAP6(VAR_NAME) MIH_C_BITMAP8_T VAR_NAME; -#define BITMAP8(VAR_NAME) MIH_C_BITMAP8_T VAR_NAME; -#define BITMAP16(VAR_NAME) MIH_C_BITMAP16_T VAR_NAME; -#define BITMAP20(VAR_NAME) MIH_C_BITMAP24_T VAR_NAME; -#define BITMAP24(VAR_NAME) MIH_C_BITMAP24_T VAR_NAME; -#define BITMAP32(VAR_NAME) MIH_C_BITMAP32_T VAR_NAME; -#define BITMAP64(VAR_NAME) MIH_C_BITMAP64_T VAR_NAME; -#define BITMAP128(VAR_NAME) MIH_C_BITMAP128_T VAR_NAME; -#define BITMAP256(VAR_NAME) MIH_C_BITMAP256_T VAR_NAME; - -//----------------------- CHOICE(DATATYPE1, DATATYPE2[,...]) ------------------ -/*! \var typedef u_int8_t MIH_C_CHOICE_T; - * \ingroup MIH_C_F1_BASIC_DATA_TYPES - * \brief A type definition for u_int8_t. - */ -typedef u_int8_t MIH_C_CHOICE_T; - -//----------------------- INTEGER(size) --------------------------------------- -/*! \var typedef int8_t MIH_C_INTEGER1_T; - * \ingroup MIH_C_F1_BASIC_DATA_TYPES - * \brief A type definition for int8_t. - */ -typedef int8_t MIH_C_INTEGER1_T; -/*! \var typedef int16_t MIH_C_INTEGER2_T; - * \ingroup MIH_C_F1_BASIC_DATA_TYPES - * \brief A type definition for int16_t. - */ -typedef int16_t MIH_C_INTEGER2_T; -/*! \var typedef int32_t MIH_C_INTEGER4_T; - * \ingroup MIH_C_F1_BASIC_DATA_TYPES - * \brief A type definition for int32_t. - */ -typedef int32_t MIH_C_INTEGER4_T; -/*! \var typedef int64_t MIH_C_INTEGER8_T; - * \ingroup MIH_C_F1_BASIC_DATA_TYPES - * \brief A type definition for int64_t. - */ -typedef int64_t MIH_C_INTEGER8_T; - -#ifdef MIH_C_F1_BASIC_DATA_TYPES_CODEC_C - /*! \def TYPEDEF_INTEGER1(DATA_TYPE_NAME) - * \ingroup MIH_C_F1_BASIC_DATA_TYPES - * \brief Defines DATA_TYPE_NAME as a MIH_C_INTEGER1_T. - */ - #define TYPEDEF_INTEGER1(DATA_TYPE_NAME) typedef MIH_C_INTEGER1_T DATA_TYPE_NAME ## _T;\ - void MIH_C_INTEGER1_encode(Bit_Buffer_t* bbP, MIH_C_INTEGER1_T* dataP);\ - void MIH_C_INTEGER1_decode(Bit_Buffer_t* bbP, MIH_C_INTEGER1_T* dataP);\ - unsigned int DATA_TYPE_NAME ## 2String(DATA_TYPE_NAME ## _T *dataP, char* buffP) {\ - return sprintf(buffP, "0x%02X", *dataP);\ - };\ - void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP) {\ - MIH_C_INTEGER1_encode(bbP, (MIH_C_INTEGER1_T*)dataP);};\ - void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP) {\ - MIH_C_INTEGER1_decode(bbP, (MIH_C_INTEGER1_T*)dataP);\ - }; - - /*! \def TYPEDEF_INTEGER2(DATA_TYPE_NAME) - * \ingroup MIH_C_F1_BASIC_DATA_TYPES - * \brief Defines DATA_TYPE_NAME as a MIH_C_INTEGER2_T. - */ - #define TYPEDEF_INTEGER2(DATA_TYPE_NAME) typedef MIH_C_INTEGER2_T DATA_TYPE_NAME ## _T;\ - void MIH_C_INTEGER2_encode(Bit_Buffer_t* bbP, MIH_C_INTEGER2_T* dataP);\ - void MIH_C_INTEGER2_decode(Bit_Buffer_t* bbP, MIH_C_INTEGER2_T* dataP);\ - unsigned int DATA_TYPE_NAME ## 2String(DATA_TYPE_NAME ## _T *dataP, char* buffP) {\ - return sprintf(buffP, "0x%04X", *dataP);\ - };\ - void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP) {\ - MIH_C_INTEGER2_encode(bbP, (MIH_C_INTEGER2_T*)dataP);};\ - void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP) {\ - MIH_C_INTEGER2_decode(bbP, (MIH_C_INTEGER2_T*)dataP);\ - }; - - /*! \def TYPEDEF_INTEGER4(DATA_TYPE_NAME) - * \ingroup MIH_C_F1_BASIC_DATA_TYPES - * \brief Defines DATA_TYPE_NAME as a MIH_C_INTEGER4_T. - */ - #define TYPEDEF_INTEGER4(DATA_TYPE_NAME) typedef MIH_C_INTEGER4_T DATA_TYPE_NAME ## _T;\ - void MIH_C_INTEGER4_encode(Bit_Buffer_t* bbP, MIH_C_INTEGER4_T* dataP);\ - void MIH_C_INTEGER4_decode(Bit_Buffer_t* bbP, MIH_C_INTEGER4_T* dataP);\ - unsigned int DATA_TYPE_NAME ## 2String(DATA_TYPE_NAME ## _T *dataP, char* buffP) {\ - return sprintf(buffP, "0x%08X", (MIH_C_INTEGER4_T)*dataP);\ - };\ - void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP) {\ - MIH_C_INTEGER4_encode(bbP, (MIH_C_INTEGER4_T*)dataP);};\ - void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP) {\ - MIH_C_INTEGER4_decode(bbP, (MIH_C_INTEGER4_T*)dataP);\ - }; - - /*! \def TYPEDEF_INTEGER8(DATA_TYPE_NAME) - * \ingroup MIH_C_F1_BASIC_DATA_TYPES - * \brief Defines DATA_TYPE_NAME as a MIH_C_INTEGER48T. - */ - #define TYPEDEF_INTEGER8(DATA_TYPE_NAME) typedef MIH_C_INTEGER8_T DATA_TYPE_NAME ## _T;\ - void MIH_C_INTEGER8_encode(Bit_Buffer_t* bbP, MIH_C_INTEGER8_T* dataP);\ - void MIH_C_INTEGER8_decode(Bit_Buffer_t* bbP, MIH_C_INTEGER8_T* dataP);\ - unsigned int DATA_TYPE_NAME ## 2String(DATA_TYPE_NAME ## _T *dataP, char* buffP) {\ - unsigned int buffer_index = 0;\ - buffer_index = sprintf(buffP, "0x%08x", (MIH_C_UNSIGNED_INT4_T)(*dataP>>32));\ - buffer_index = sprintf(&buffP[buffer_index], "%08x", (MIH_C_UNSIGNED_INT4_T)(*dataP));\ - return buffer_index;\ - };\ - void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP) {\ - MIH_C_INTEGER8_encode(bbP, (MIH_C_INTEGER8_T*)dataP);};\ - void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP) {\ - MIH_C_INTEGER8_decode(bbP, (MIH_C_INTEGER8_T*)dataP);\ - }; -#else - #define TYPEDEF_INTEGER1(DATA_TYPE_NAME) typedef MIH_C_INTEGER1_T DATA_TYPE_NAME ## _T;\ - extern unsigned int DATA_TYPE_NAME ## 2String(DATA_TYPE_NAME ## _T *dataP, char* buffP);\ - void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP);\ - void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP); - - #define TYPEDEF_INTEGER2(DATA_TYPE_NAME) typedef MIH_C_INTEGER2_T DATA_TYPE_NAME ## _T;\ - extern unsigned int DATA_TYPE_NAME ## 2String(DATA_TYPE_NAME ## _T *dataP, char* buffP);\ - void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP);\ - void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP); - - #define TYPEDEF_INTEGER4(DATA_TYPE_NAME) typedef MIH_C_INTEGER4_T DATA_TYPE_NAME ## _T;\ - extern unsigned int DATA_TYPE_NAME ## 2String(DATA_TYPE_NAME ## _T *dataP, char* buffP);\ - void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP);\ - void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP); - - #define TYPEDEF_INTEGER8(DATA_TYPE_NAME) typedef MIH_C_INTEGER8_T DATA_TYPE_NAME ## _T;\ - extern unsigned int DATA_TYPE_NAME ## 2String(DATA_TYPE_NAME ## _T *dataP, char* buffP);\ - void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP);\ - void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP); -#endif - -/*! \def INTEGER1(VAR_NAME) - * \ingroup MIH_C_F1_BASIC_DATA_TYPES - * \brief A variable declaration of type MIH_C_INTEGER1_T. - */ -#define INTEGER1(VAR_NAME) MIH_C_INTEGER1_T VAR_NAME; -/*! \def INTEGER2(VAR_NAME) - * \ingroup MIH_C_F1_BASIC_DATA_TYPES - * \brief A variable declaration of type MIH_C_INTEGER2_T. - */ -#define INTEGER2(VAR_NAME) MIH_C_INTEGER2_T VAR_NAME; -/*! \def INTEGER4(VAR_NAME) - * \ingroup MIH_C_F1_BASIC_DATA_TYPES - * \brief A variable declaration of type MIH_C_INTEGER4_T. - */ -#define INTEGER4(VAR_NAME) MIH_C_INTEGER4_T VAR_NAME; -/*! \def INTEGER8(VAR_NAME) - * \ingroup MIH_C_F1_BASIC_DATA_TYPES - * \brief A variable declaration of type MIH_C_INTEGER8_T. - */ -#define INTEGER8(VAR_NAME) MIH_C_INTEGER8_T VAR_NAME; - - -//----------------------- UNSIGNED_INT(size) ---------------------------------- -/*! \var typedef int8_t MIH_C_UNSIGNED_INT1_T; - * \brief A type definition for int8_t. - */ -typedef u_int8_t MIH_C_UNSIGNED_INT1_T; -/*! \var u_int16_t MIH_C_UNSIGNED_INT2_T - * \brief A type definition for u_int16_t. - */ -typedef u_int16_t MIH_C_UNSIGNED_INT2_T; -/*! \var typedef u_int32_t MIH_C_UNSIGNED_INT4_T; - * \brief A type definition for u_int32_t. - */ -typedef u_int32_t MIH_C_UNSIGNED_INT4_T; -/*! \var u_int64_t MIH_C_UNSIGNED_INT8_T; - * \brief A type definition for u_int64_t. - */ -typedef u_int64_t MIH_C_UNSIGNED_INT8_T; - -#ifdef MIH_C_F1_BASIC_DATA_TYPES_CODEC_C - /*! \def TYPEDEF_UNSIGNED_INT1(DATA_TYPE_NAME) - * \ingroup MIH_C_F1_BASIC_DATA_TYPES - * \brief Defines DATA_TYPE_NAME as a MIH_C_UNSIGNED_INT1_T. - */ - #define TYPEDEF_UNSIGNED_INT1(DATA_TYPE_NAME) typedef MIH_C_UNSIGNED_INT1_T DATA_TYPE_NAME ## _T;\ - void MIH_C_UNSIGNED_INT1_encode(Bit_Buffer_t* bbP, MIH_C_UNSIGNED_INT1_T* dataP);\ - void MIH_C_UNSIGNED_INT1_decode(Bit_Buffer_t* bbP, MIH_C_UNSIGNED_INT1_T* dataP);\ - unsigned int DATA_TYPE_NAME ## 2String(DATA_TYPE_NAME ## _T *dataP, char* buffP) {\ - return sprintf(buffP, "0x%02X", *dataP);\ - };\ - void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP) {\ - MIH_C_UNSIGNED_INT1_encode(bbP, dataP);};\ - void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP) {\ - MIH_C_UNSIGNED_INT1_decode(bbP, dataP);\ - }; - - /*! \def TYPEDEF_UNSIGNED_INT2(DATA_TYPE_NAME) - * \ingroup MIH_C_F1_BASIC_DATA_TYPES - * \brief Defines DATA_TYPE_NAME as a MIH_C_UNSIGNED_INT2_T. - */ - #define TYPEDEF_UNSIGNED_INT2(DATA_TYPE_NAME) typedef MIH_C_UNSIGNED_INT2_T DATA_TYPE_NAME ## _T;\ - void MIH_C_UNSIGNED_INT2_encode(Bit_Buffer_t* bbP, MIH_C_UNSIGNED_INT2_T* dataP);\ - void MIH_C_UNSIGNED_INT2_decode(Bit_Buffer_t* bbP, MIH_C_UNSIGNED_INT2_T* dataP);\ - unsigned int DATA_TYPE_NAME ## 2String(DATA_TYPE_NAME ## _T *dataP, char* buffP) {\ - return sprintf(buffP, "0x%04X", *dataP);\ - };\ - void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP) {\ - MIH_C_UNSIGNED_INT2_encode(bbP, dataP);};\ - void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP) {\ - MIH_C_UNSIGNED_INT2_decode(bbP, dataP);\ - }; - - /*! \def TYPEDEF_UNSIGNED_INT4(DATA_TYPE_NAME) - * \ingroup MIH_C_F1_BASIC_DATA_TYPES - * \brief Defines DATA_TYPE_NAME as a MIH_C_UNSIGNED_INT4_T. - */ - #define TYPEDEF_UNSIGNED_INT4(DATA_TYPE_NAME) typedef MIH_C_UNSIGNED_INT4_T DATA_TYPE_NAME ## _T;\ - void MIH_C_UNSIGNED_INT4_encode(Bit_Buffer_t* bbP, MIH_C_UNSIGNED_INT4_T* dataP);\ - void MIH_C_UNSIGNED_INT4_decode(Bit_Buffer_t* bbP, MIH_C_UNSIGNED_INT4_T* dataP);\ - unsigned int DATA_TYPE_NAME ## 2String(DATA_TYPE_NAME ## _T *dataP, char* buffP) {\ - return sprintf(buffP, "0x%08X", *dataP);\ - };\ - void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP) {\ - MIH_C_UNSIGNED_INT4_encode(bbP, dataP);};\ - void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP) {\ - MIH_C_UNSIGNED_INT4_decode(bbP, dataP);\ - }; - - /*! \def TYPEDEF_UNSIGNED_INT8(DATA_TYPE_NAME) - * \ingroup MIH_C_F1_BASIC_DATA_TYPES - * \brief Defines DATA_TYPE_NAME as a MIH_C_UNSIGNED_INT8_T. - */ - #define TYPEDEF_UNSIGNED_INT8(DATA_TYPE_NAME) typedef MIH_C_UNSIGNED_INT8_T DATA_TYPE_NAME ## _T;\ - void MIH_C_UNSIGNED_INT8_encode(Bit_Buffer_t* bbP, MIH_C_UNSIGNED_INT8_T* dataP);\ - void MIH_C_UNSIGNED_INT8_decode(Bit_Buffer_t* bbP, MIH_C_UNSIGNED_INT8_T* dataP);\ - unsigned int DATA_TYPE_NAME ## 2String(DATA_TYPE_NAME ## _T *dataP, char* buffP) {\ - return sprintf(buffP, "0x%16X", *dataP);\ - };\ - void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP) {\ - MIH_C_UNSIGNED_INT8_encode(bbP, dataP);};\ - void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP) {\ - MIH_C_UNSIGNED_INT8_decode(bbP, dataP);\ - }; -#else - #define TYPEDEF_UNSIGNED_INT1(DATA_TYPE_NAME) typedef MIH_C_UNSIGNED_INT1_T DATA_TYPE_NAME ## _T;\ - extern unsigned int DATA_TYPE_NAME ## 2String(DATA_TYPE_NAME ## _T *dataP, char* buffP);\ - void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP);\ - void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP); - - #define TYPEDEF_UNSIGNED_INT2(DATA_TYPE_NAME) typedef MIH_C_UNSIGNED_INT2_T DATA_TYPE_NAME ## _T;\ - extern unsigned int DATA_TYPE_NAME ## 2String(DATA_TYPE_NAME ## _T *dataP, char* buffP);\ - void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP);\ - void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP); - - #define TYPEDEF_UNSIGNED_INT4(DATA_TYPE_NAME) typedef MIH_C_UNSIGNED_INT4_T DATA_TYPE_NAME ## _T;\ - extern unsigned int DATA_TYPE_NAME ## 2String(DATA_TYPE_NAME ## _T *dataP, char* buffP);\ - void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP);\ - void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP); - - #define TYPEDEF_UNSIGNED_INT8(DATA_TYPE_NAME) typedef MIH_C_UNSIGNED_INT8_T DATA_TYPE_NAME ## _T;\ - extern unsigned int DATA_TYPE_NAME ## 2String(DATA_TYPE_NAME ## _T *dataP, char* buffP);\ - void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP);\ - void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP); -#endif - -/*! \def UNSIGNED_INT1(VAR_NAME) - * \ingroup MIH_C_F1_BASIC_DATA_TYPES - * \brief A variable declaration of type MIH_C_UNSIGNED_INT1_T. - */ -#define UNSIGNED_INT1(VAR_NAME) MIH_C_UNSIGNED_INT1_T VAR_NAME; -/*! \def UNSIGNED_INT2(VAR_NAME) - * \ingroup MIH_C_F1_BASIC_DATA_TYPES - * \brief A variable declaration of type MIH_C_UNSIGNED_INT2_T. - */ -#define UNSIGNED_INT2(VAR_NAME) MIH_C_UNSIGNED_INT2_T VAR_NAME; -/*! \def UNSIGNED_INT4(VAR_NAME) - * \ingroup MIH_C_F1_BASIC_DATA_TYPES - * \brief A variable declaration of type MIH_C_UNSIGNED_INT4_T. - */ -#define UNSIGNED_INT4(VAR_NAME) MIH_C_UNSIGNED_INT4_T VAR_NAME; -/*! \def UNSIGNED_INT8(VAR_NAME) - * \ingroup MIH_C_F1_BASIC_DATA_TYPES - * \brief A variable declaration of type MIH_C_UNSIGNED_INT8_T. - */ -#define UNSIGNED_INT8(VAR_NAME) MIH_C_UNSIGNED_INT8_T VAR_NAME; - -//----------------------- LIST(DATATYPE) -------------------------------------- -void MIH_C_LIST_LENGTH_encode(Bit_Buffer_t *bbP, u_int16_t lengthP); -void MIH_C_LIST_LENGTH_decode(Bit_Buffer_t *bbP, u_int16_t *lengthP); -u_int16_t MIH_C_LIST_LENGTH_get_encode_length(u_int16_t lengthP); - -#ifdef MIH_C_F1_BASIC_DATA_TYPES_CODEC_C - /*! \def TYPEDEF_LIST(DATA_TYPE_NAME, MAX_LENGTH) - * \ingroup MIH_C_F1_BASIC_DATA_TYPES - * \brief Defines DATA_TYPE_NAME as a LIST of MAX_LENGTH elements of DATA_TYPE_NAME type, and its functions for de/serializing this type. - */ -#define TYPEDEF_LIST(DATA_TYPE_NAME, MAX_LENGTH) typedef struct DATA_TYPE_NAME ## _LIST { u_int16_t length; DATA_TYPE_NAME ## _T val[MAX_LENGTH];} DATA_TYPE_NAME ## _LIST_T;\ - extern void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *val);\ - extern void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *val);\ - extern unsigned int DATA_TYPE_NAME ## 2String(DATA_TYPE_NAME ## _T *val, char* bufP);\ - unsigned int DATA_TYPE_NAME ## _LIST2String(DATA_TYPE_NAME ## _LIST_T *listP, char* bufP) {\ - int index = 0;\ - unsigned int buffer_index = 0;\ - while ((index < listP->length) && (index < MAX_LENGTH)){\ - buffer_index += sprintf(&bufP[buffer_index], "%s (%d) = ", STR(DATA_TYPE_NAME) , index);\ - buffer_index += DATA_TYPE_NAME ## 2String(&listP->val[index], &bufP[buffer_index]);\ - buffer_index += sprintf(&bufP[buffer_index], " ");\ - index = index + 1;\ - }\ - return buffer_index;\ - };\ - void DATA_TYPE_NAME ## _LIST_decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _LIST_T *listP) {\ - int index = 0;\ - MIH_C_LIST_LENGTH_decode(bbP, &listP->length);\ - if (listP->length > MAX_LENGTH) {printf("[MIH_C] ERROR DATA_TYPE_NAME ## _LIST_decode num elements in list out of bounds: %d, max is %d\n", listP->length, MAX_LENGTH);\ - } else {\ - while ((index < listP->length) && (index < MAX_LENGTH)){\ - DATA_TYPE_NAME ## _decode(bbP, &listP->val[index++]);\ - }\ - }\ - };\ - void DATA_TYPE_NAME ## _LIST_encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _LIST_T *listP) {\ - int index = 0;\ - if (listP->length > MAX_LENGTH) {\ - printf("[MIH_C] ERROR DATA_TYPE_NAME ## _LIST_encode num elements in list out of bounds: %d, max is %d\n", listP->length, MAX_LENGTH);\ - } else {\ - MIH_C_LIST_LENGTH_encode(bbP, listP->length);\ - while (index < listP->length) {\ - DATA_TYPE_NAME ## _encode(bbP, &listP->val[index++]);\ - }\ - }\ - };\ - void DATA_TYPE_NAME ## _LIST_init(DATA_TYPE_NAME ## _LIST_T *listP) {\ - listP->length = 0;\ - memset(listP->val, 0, MAX_LENGTH*sizeof(DATA_TYPE_NAME ## _T));\ - }; - -#else -#define TYPEDEF_LIST(DATA_TYPE_NAME, MAX_LENGTH) typedef struct DATA_TYPE_NAME ## _LIST { u_int16_t length; DATA_TYPE_NAME ## _T val[MAX_LENGTH];} DATA_TYPE_NAME ## _LIST_T;\ - extern unsigned int DATA_TYPE_NAME ## _LIST2String(DATA_TYPE_NAME ## _LIST_T *listP, char* bufP);\ - extern void DATA_TYPE_NAME ## _LIST_decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _LIST_T *listP);\ - extern void DATA_TYPE_NAME ## _LIST_encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _LIST_T *listP);\ - extern void DATA_TYPE_NAME ## _LIST_init(DATA_TYPE_NAME ## _LIST_T *listP); -#endif -#define LIST(DATA_TYPE_NAME, VAR_NAME) DATA_TYPE_NAME ## _LIST_T VAR_NAME ## _list; - - - -//----------------------- NULL ------------------------------------------------ -#define MIH_C_NULL_T u_int8_t - -//----------------------- OCTET(size) ----------------------------------------- -#ifdef MIH_C_F1_BASIC_DATA_TYPES_CODEC_C - /*! \def TYPEDEF_OCTET(DATA_TYPE_NAME, MAX_LENGTH) - * \ingroup MIH_C_F1_BASIC_DATA_TYPES - * \brief Defines DATA_TYPE_NAME as a LIST of MAX_LENGTH octet elements, and its functions for de/serializing this type. - */ -#define TYPEDEF_OCTET(DATA_TYPE_NAME, LENGTH) typedef struct DATA_TYPE_NAME {u_int8_t val[LENGTH];} DATA_TYPE_NAME ## _T;\ - unsigned int DATA_TYPE_NAME ## 2String(DATA_TYPE_NAME ## _T *dataP, char* bufP) {\ - int index = 0;\ - unsigned int buffer_index = 0;\ - while ( index < LENGTH ){\ - buffer_index += sprintf(&bufP[buffer_index], "%02X", dataP->val[index]);\ - index = index + 1;\ - }\ - return buffer_index;\ - };\ - void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP) { BitBuffer_readMem(bbP, &dataP->val[0], LENGTH);};\ - void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP) { BitBuffer_writeMem(bbP, &dataP->val[0], LENGTH);}; -#else -#define TYPEDEF_OCTET(DATA_TYPE_NAME, LENGTH) typedef struct DATA_TYPE_NAME {u_int8_t val[LENGTH];} DATA_TYPE_NAME ## _T;\ - extern unsigned int DATA_TYPE_NAME ## 2String(DATA_TYPE_NAME ## _T *dataP, char* bufP);\ - extern void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP);\ - extern void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP); -#endif - -//----------------------- SEQUENCE(DATATYPE1, DATATYPE2[,...]) : NO MACRO ----- - -//----------------------------------------------------------------------------- -// STD 802.21-2008 Table F.2 General data types -//----------------------------------------------------------------------------- - -//----------------------- ENUMERATED ------------------------------------------ -TYPEDEF_UNSIGNED_INT1(MIH_C_ENUMERATED) - -#ifdef MIH_C_F2_GENERAL_DATA_TYPES_CODEC_C - /*! \def TYPEDEF_ENUMERATED(DATA_TYPE_NAME) - * \ingroup MIH_C_F1_BASIC_DATA_TYPES - * \brief Defines DATA_TYPE_NAME as MIH_C_ENUMERATED_T, and its functions for de/serializing this type. - */ - #define TYPEDEF_ENUMERATED(DATA_TYPE_NAME) typedef MIH_C_ENUMERATED_T DATA_TYPE_NAME ## _T;\ - void MIH_C_ENUMERATED_encode(Bit_Buffer_t* bbP, MIH_C_ENUMERATED_T* dataP);\ - void MIH_C_ENUMERATED_decode(Bit_Buffer_t* bbP, MIH_C_ENUMERATED_T* dataP);\ - void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP) {\ - MIH_C_ENUMERATED_encode(bbP, dataP);};\ - void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP) {MIH_C_ENUMERATED_decode(bbP, dataP);}; -#else - #define TYPEDEF_ENUMERATED(DATA_TYPE_NAME) typedef MIH_C_ENUMERATED_T DATA_TYPE_NAME ## _T;\ - void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP);\ - void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP); -#endif - -/*! \def ENUMERATED(VAR_NAME) - * \ingroup MIH_C_F1_BASIC_DATA_TYPES - * \brief A variable declaration of type MIH_C_ENUMERATED_T. - */ -#define ENUMERATED(VAR_NAME) MIH_C_ENUMERATED_T VAR_NAME; - - -//----------------------- BOOLEAN --------------------------------------------- -TYPEDEF_ENUMERATED(MIH_C_BOOLEAN) - -#define MIH_C_BOOLEAN_TRUE (MIH_C_ENUMERATED_T)1 -#define MIH_C_BOOLEAN_FALSE (MIH_C_ENUMERATED_T)0 -#ifdef MIH_C_F2_GENERAL_DATA_TYPES_CODEC_C - /*! \def TYPEDEF_BOOLEAN(DATA_TYPE_NAME) - * \ingroup MIH_C_F1_BASIC_DATA_TYPES - * \brief Defines DATA_TYPE_NAME as MIH_C_BOOLEAN_T, and its functions for de/serializing this type. - */ - #define TYPEDEF_BOOLEAN(DATA_TYPE_NAME) typedef MIH_C_BOOLEAN_T DATA_TYPE_NAME ## _T;\ - void MIH_C_BOOLEAN_encode(Bit_Buffer_t* bbP, MIH_C_BOOLEAN_T* dataP);\ - void MIH_C_BOOLEAN_decode(Bit_Buffer_t* bbP, MIH_C_BOOLEAN_T* dataP);\ - unsigned int DATA_TYPE_NAME ## 2String(DATA_TYPE_NAME ## _T *dataP, char* bufP) {\ - unsigned int buffer_index = 0;\ - if (*dataP != MIH_C_BOOLEAN_FALSE) {\ - buffer_index += sprintf(&bufP[buffer_index], "TRUE");\ - } else {\ - buffer_index += sprintf(&bufP[buffer_index], "FALSE");\ - }\ - return buffer_index;\ - };\ - void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP) {\ - MIH_C_BOOLEAN_encode(bbP, dataP);};\ - void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP) {MIH_C_ENUMERATED_decode(bbP, dataP);}; -#else - #define TYPEDEF_BOOLEAN(DATA_TYPE_NAME) typedef MIH_C_BOOLEAN_T DATA_TYPE_NAME ## _T;\ - extern unsigned int DATA_TYPE_NAME ## 2String(DATA_TYPE_NAME ## _T *dataP, char* bufP);\ - void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP);\ - void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP); -#endif - -/*! \def BOOLEAN(VAR_NAME) - * \ingroup MIH_C_F1_BASIC_DATA_TYPES - * \brief A variable declaration of type MIH_C_BOOLEAN_T. - */ -#define BOOLEAN(VAR_NAME) MIH_C_BOOLEAN_T VAR_NAME; - - -//----------------------- OCTET_STRING ---------------------------------------- -#ifdef MIH_C_F2_GENERAL_DATA_TYPES_CODEC_C - /*! \def TYPEDEF_OCTET_STRING(DATA_TYPE_NAME, MAX_LENGTH) - * \ingroup MIH_C_F1_BASIC_DATA_TYPES - * \brief Defines DATA_TYPE_NAME as a LIST of MAX_LENGTH char elements, and its functions for de/serializing this type. - */ -#define TYPEDEF_OCTET_STRING(DATA_TYPE_NAME, MAX_LENGTH) typedef struct DATA_TYPE_NAME { u_int16_t length; u_int8_t val[MAX_LENGTH];} DATA_TYPE_NAME ## _T;\ - unsigned int DATA_TYPE_NAME ## 2String(DATA_TYPE_NAME ## _T *listP, char* bufP) {\ - memcpy(bufP, listP->val, listP->length);\ - bufP[listP->length] = 0;\ - return listP->length;\ - };\ - void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *listP) {\ - MIH_C_LIST_LENGTH_decode(bbP, &listP->length);\ - if (listP->length > MAX_LENGTH) {printf("[MIH_C] ERROR DATA_TYPE_NAME ## _decode String length out of bounds: %d, max is %d\n", listP->length, MAX_LENGTH);\ - } else {\ - BitBuffer_readMem(bbP, listP->val, listP->length);\ - }\ - };\ - void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *listP) {\ - if (listP->length > MAX_LENGTH) {\ - printf("[MIH_C] ERROR DATA_TYPE_NAME ## _encode String length out of bounds: %d, max is %d\n", listP->length, MAX_LENGTH);\ - } else {\ - MIH_C_LIST_LENGTH_encode(bbP, listP->length);\ - BitBuffer_writeMem(bbP, listP->val, listP->length);\ - }\ - };\ - void DATA_TYPE_NAME ## _set(DATA_TYPE_NAME ## _T *octet_strP, u_int8_t* strP, u_int16_t lengthP) {\ - if (lengthP > MAX_LENGTH) {\ - printf("[MIH_C] ERROR DATA_TYPE_NAME ## _set String length out of bounds\n");\ - octet_strP->length = 0;\ - } else {\ - octet_strP->length = lengthP;\ - if (strP != NULL) {\ - memcpy((char *)octet_strP->val, (char *)strP, lengthP);\ - } else {\ - memset((char *)octet_strP->val, 0, lengthP);\ - }\ - }\ - }; -#else -#define TYPEDEF_OCTET_STRING(DATA_TYPE_NAME, MAX_LENGTH) typedef struct DATA_TYPE_NAME { u_int16_t length; u_int8_t val[MAX_LENGTH];} DATA_TYPE_NAME ## _T;\ - extern unsigned int DATA_TYPE_NAME ## 2String(DATA_TYPE_NAME ## _T *listP, char* bufP);\ - extern void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *listP);\ - extern void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *listP);\ - extern void DATA_TYPE_NAME ## _set(DATA_TYPE_NAME ## _T *octet_strP, u_int8_t* strP, u_int16_t lengthP); -#endif - - -//----------------------- PERCENTAGE ------------------------------------------ -TYPEDEF_UNSIGNED_INT1(MIH_C_PERCENTAGE); -/*! \var PERCENTAGE(VAR_NAME) - * \ingroup MIH_C_F1_BASIC_DATA_TYPES - * \brief Defines VAR_NAME as MIH_C_PERCENTAGE_T. - */ -#define PERCENTAGE(VAR_NAME) MIH_C_PERCENTAGE_T VAR_NAME; - -//----------------------- STATUS ---------------------------------------------- -TYPEDEF_ENUMERATED(MIH_C_STATUS); -#define MIH_C_STATUS_SUCCESS (MIH_C_STATUS_T)0 -#define MIH_C_STATUS_UNSPECIFIED_FAILURE (MIH_C_STATUS_T)1 -#define MIH_C_STATUS_REJECTED (MIH_C_STATUS_T)2 -#define MIH_C_STATUS_AUTHORIZATION_FAILURE (MIH_C_STATUS_T)3 -#define MIH_C_STATUS_NETWORK_ERROR (MIH_C_STATUS_T)4 - -//----------------------------------------------------------------------------- -// STD 802.21-2008 Table F.3 Data types for addresses -//----------------------------------------------------------------------------- -/*! \var MIH_C_UNSIGNED_INT4_T MIH_C_CELL_ID_T -* \ingroup MIH_C_F3_DATA_TYPES_FOR_ADDRESS_CODEC -* \brief This data type identifies a cell uniquely within 3GPP UTRAN and -* consists of radio network controller (RNC)-ID and C-ID as defined in -* 3GPP TS 25.401. -* Valid Range: 0..268435455. -*/ -TYPEDEF_UNSIGNED_INT4(MIH_C_CELL_ID) -//------------------------------------------- -/*! -* \ingroup MIH_C_F3_DATA_TYPES_FOR_ADDRESS_CODEC -* \brief The BSS and cell within the BSS are identified by Cell Identity (CI). -* See 3GPP TS 23.003. -*/ -TYPEDEF_OCTET(MIH_C_CI, 2) -//------------------------------------------- -/*! -* \ingroup MIH_C_F3_DATA_TYPES_FOR_ADDRESS_CODEC -* \brief The public land mobile network (PLMN) unique identifier. -* PLMN_ID consists of Mobile Country Code (MCC) and Mobile Network Code (MNC). -* This is to represent the access network identifier. -* Coding of PLMN_ID is defined in 3GPP TS 25.413. -*/ -TYPEDEF_OCTET(MIH_C_PLMN_ID, 3) -//------------------------------------------- -/*! -* \ingroup MIH_C_F3_DATA_TYPES_FOR_ADDRESS_CODEC -* \brief Location Area Code (LAC) is a fixed length code (of 2 octets) -* identifying a location area within a public landmobile network (PLMN). -* See 3GPP TS 23.003. -*/ -TYPEDEF_OCTET(MIH_C_LAC, 2) -//------------------------------------------- -/*! \struct MIH_C_3GPP_2G_CELL_ID -* \ingroup MIH_C_F3_DATA_TYPES_FOR_ADDRESS_CODEC -* \brief A data type to represent a 3GPP 2G cell identifier. -*/ -typedef struct MIH_C_3GPP_2G_CELL_ID { - MIH_C_PLMN_ID_T plmn_id; - MIH_C_LAC_T lac; - MIH_C_CI_T ci; -} MIH_C_3GPP_2G_CELL_ID_T; - -//------------------------------------------- -/*! \struct MIH_C_3GPP_3G_CELL_ID -* \ingroup MIH_C_F3_DATA_TYPES_FOR_ADDRESS_CODEC -* \brief A data type to represent a 3GPP 3G cell identifier. -*/ -typedef struct MIH_C_3GPP_3G_CELL_ID { - MIH_C_PLMN_ID_T plmn_id; - MIH_C_CELL_ID_T cell_id; -} MIH_C_3GPP_3G_CELL_ID_T; -//------------------------------------------- -/*! \struct MIH_C_3GPP_ADDR -* \ingroup MIH_C_F3_DATA_TYPES_FOR_ADDRESS_CODEC -* \brief A data type to represent a 3GPP transport address. -*/ -TYPEDEF_OCTET_STRING(MIH_C_3GPP_ADDR, MIH_C_3GPP_ADDR_LENGTH) -//------------------------------------------- -/*! \struct MIH_C_3GPP2_ADDR -* \ingroup MIH_C_F3_DATA_TYPES_FOR_ADDRESS_CODEC -* \brief A data type to represent a 3GPP2 transport address. -*/ -TYPEDEF_OCTET_STRING(MIH_C_3GPP2_ADDR, MIH_C_3GPP2_ADDR_LENGTH) -//------------------------------------------- -/*! \var MIH_C_IANA_ADDR_T -* \ingroup MIH_C_F3_DATA_TYPES_FOR_ADDRESS_CODEC -* \brief Is the address family type of a transport address. -*/ -TYPEDEF_UNSIGNED_INT2(MIH_C_IANA_ADDR) -//------------------------------------------- -/*! \struct MIH_C_TRANSPORT_ADDR_T -* \ingroup MIH_C_F3_DATA_TYPES_FOR_ADDRESS_CODEC -* \brief A type to represent a transport address. The -* UNSIGNED_INT(2) is the address type defined in -* http://www.iana.org/assignments/address-family-numbers. -*/ -TYPEDEF_OCTET_STRING(MIH_C_TRANSPORT_ADDR_VALUE, 128) -//------------------------------------------- -#ifdef MIH_C_F3_DATA_TYPES_FOR_ADDRESS_CODEC_C -#define TYPEDEF_TRANSPORT_ADDR(DATA_TYPE_NAME) typedef struct DATA_TYPE_NAME {\ - MIH_C_IANA_ADDR_T address_family;\ - MIH_C_TRANSPORT_ADDR_VALUE_T address;\ - } DATA_TYPE_NAME ## _T;\ - unsigned int DATA_TYPE_NAME ## 2String(DATA_TYPE_NAME ## _T *dataP, char* bufP) {\ - unsigned int buffer_index = 0;\ - buffer_index += sprintf(&bufP[buffer_index], "IANA = ");\ - buffer_index += MIH_C_IANA_ADDR2String(&dataP->address_family, &bufP[buffer_index]);\ - buffer_index += sprintf(&bufP[buffer_index], "TRANSPORT_ADDR = ");\ - buffer_index += MIH_C_TRANSPORT_ADDR_VALUE2String(&dataP->address, &bufP[buffer_index]);\ - return buffer_index;\ - };\ - void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP) {\ - MIH_C_IANA_ADDR_decode(bbP, &dataP->address_family);\ - MIH_C_TRANSPORT_ADDR_VALUE_decode(bbP, &dataP->address);\ - };\ - void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP) {\ - MIH_C_IANA_ADDR_encode(bbP, &dataP->address_family);\ - MIH_C_TRANSPORT_ADDR_VALUE_encode(bbP, &dataP->address);\ - }; -#else -#define TYPEDEF_TRANSPORT_ADDR(DATA_TYPE_NAME) typedef struct DATA_TYPE_NAME {\ - MIH_C_IANA_ADDR_T address_family;\ - MIH_C_TRANSPORT_ADDR_VALUE_T address;\ - } DATA_TYPE_NAME ## _T;\ - extern unsigned int DATA_TYPE_NAME ## 2String(DATA_TYPE_NAME ## _T *dataP, char* bufP);\ - extern void DATA_TYPE_NAME ## _decode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP);\ - extern void DATA_TYPE_NAME ## _encode(Bit_Buffer_t *bbP, DATA_TYPE_NAME ## _T *dataP); -#endif -//------------------------------------------- -/*! \struct MIH_C_IP_ADDR_T -* \ingroup MIH_C_F3_DATA_TYPES_FOR_ADDRESS_CODEC -* \brief Represents an IP address. The Address Type is either 1 (IPv4) or 2 (IPv6). -*/ -//typedef MIH_C_TRANSPORT_ADDR_T MIH_C_IP_ADDR_T; -TYPEDEF_TRANSPORT_ADDR(MIH_C_IP_ADDR) -//------------------------------------------- -/*! \struct MIH_C_MAC_ADDR_T -* \ingroup MIH_C_F3_DATA_TYPES_FOR_ADDRESS_CODEC -* \brief Represents a MAC address. The Address Type contains the one used for a specific link layer. -*/ -//typedef MIH_C_TRANSPORT_ADDR_T MIH_C_MAC_ADDR_T; -TYPEDEF_TRANSPORT_ADDR(MIH_C_MAC_ADDR) -//------------------------------------------- -/*! \struct MIH_C_OTHER_L2_ADDR_T -* \ingroup MIH_C_F3_DATA_TYPES_FOR_ADDRESS_CODEC -* \brief A data type to represent a link-layer address other than the address already defined. -* For example, SSID. -*/ -TYPEDEF_OCTET_STRING(MIH_C_OTHER_L2_ADDR, MIH_C_OTHER_L2_ADDR_LENGTH) -//------------------------------------------- - -typedef enum { - MIH_C_CHOICE_MAC_ADDR = 0, - MIH_C_CHOICE_3GPP_3G_CELL_ID, - MIH_C_CHOICE_3GPP_2G_CELL_ID, - MIH_C_CHOICE_3GPP_ADDR, - MIH_C_CHOICE_3GPP2_ADDR, - MIH_C_CHOICE_OTHER_L2_ADDR - } MIH_C_LINK_ADDR_CHOICE_ENUM_T; -//------------------------------------------- -/*! \struct MIH_C_LINK_ADDR -* \ingroup MIH_C_F3_DATA_TYPES_FOR_ADDRESS_CODEC -* \brief A data type to represent an address of any link layer. -*/ -typedef struct MIH_C_LINK_ADDR { - MIH_C_CHOICE_T choice; - union { - MIH_C_MAC_ADDR_T mac_addr; - MIH_C_3GPP_3G_CELL_ID_T _3gpp_3g_cell_id; - MIH_C_3GPP_2G_CELL_ID_T _3gpp_2g_cell_id; - MIH_C_3GPP_ADDR_T _3gpp_addr; - MIH_C_3GPP2_ADDR_T _3gpp2_addr; - MIH_C_OTHER_L2_ADDR_T other_l2_addr; - } _union; -} MIH_C_LINK_ADDR_T; - - - - -//----------------------------------------------------------------------------- -// STD 802.21-2008 Table F.4 Data types for links (MAINLY because of precedence definition) -//----------------------------------------------------------------------------- -/*! -* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC -* \brief Represents percentage of battery charge remaining. - -*/ -TYPEDEF_INTEGER1(MIH_C_BATT_LEVEL) -//------------------------------------------- -/*! -* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC -* \brief Channel identifier as defined in the specific link technology (e.g., standards -* development organization (SDO)). -* Valid Range: 0..65535 -*/ -TYPEDEF_UNSIGNED_INT2(MIH_C_CHANNEL_ID) -//------------------------------------------- -#define MIH_C_CONFIG_STATUS_SUCCESS MIH_C_BOOLEAN_TRUE -#define MIH_C_CONFIG_STATUS_ERROR MIH_C_BOOLEAN_FALSE -/*! \var MIH_C_CONFIG_STATUS_T -* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC -* \brief The status of link parameter configuration. -* TRUE: Success -* FALSE: Error -*/ -TYPEDEF_BOOLEAN(MIH_C_CONFIG_STATUS) -//------------------------------------------- -/*! \var MIH_C_DEVICE_INFO_T -* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC -* \brief A non-NULL terminated string whose length shall not exceed 253 octets, representing -* information on manufacturer, model number, revision number of the software/firmware -* and serial number in displayable text. -*/ -TYPEDEF_OCTET_STRING(MIH_C_DEVICE_INFO, 253) -//------------------------------------------- -#define MIH_C_BIT_DEVICE_INFO MIH_C_BIT_0_VALUE -#define MIH_C_BIT_BATT_LEVEL MIH_C_BIT_1_VALUE -/*! -* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC -* \brief A list of device status request. -* Bitmap Values: -* Bit 0: DEVICE_INFO -* Bit 1: BATT_LEVEL -* Bit 2–15: (Reserved) -*/ -TYPEDEF_BITMAP16(MIH_C_DEV_STATES_REQ) -//------------------------------------------- -/*! \struct MIH_C_DEV_STATE_RSP_T -* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC -* \brief Represents a device status. -*/ -typedef struct MIH_C_DEV_STATE_RSP { - MIH_C_CHOICE_T choice; - union { - MIH_C_DEVICE_INFO_T device_info; - MIH_C_BATT_LEVEL_T batt_level; - } _union; -} MIH_C_DEV_STATE_RSP_T; -//------------------------------------------- -/*! -* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC -* \brief Time (in ms) to elapse before an action needs to be taken. A value of 0 indicates -* that the action will be taken immediately. Time elapsed will be calculated from the -* instance the command arrives until the time when the execution of the action is carried out. -* Valid Range: 0..65535 -*/ -TYPEDEF_UNSIGNED_INT2(MIH_C_LINK_AC_EX_TIME) -//------------------------------------------- -/*! -* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC -* \brief Link action result. -* 0: Success -* 1: Failure -* 2: Refused -* 3: Incapable -*/ -TYPEDEF_ENUMERATED(MIH_C_LINK_AC_RESULT) -#define MIH_C_LINK_AC_RESULT_SUCCESS (MIH_C_LINK_AC_RESULT_T)0 -#define MIH_C_LINK_AC_RESULT_FAILURE (MIH_C_LINK_AC_RESULT_T)1 -#define MIH_C_LINK_AC_RESULT_REFUSED (MIH_C_LINK_AC_RESULT_T)2 -#define MIH_C_LINK_AC_RESULT_INCAPABLE (MIH_C_LINK_AC_RESULT_T)3 -//------------------------------------------- -#define MIH_C_BIT_LINK_AC_ATTR_LINK_SCAN MIH_C_BIT_0_VALUE -#define MIH_C_BIT_LINK_AC_ATTR_LINK_RES_RETAIN MIH_C_BIT_1_VALUE -#define MIH_C_BIT_LINK_AC_ATTR_DATA_FWD_REQ MIH_C_BIT_2_VALUE -/*! -* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC -* \brief Link action attribute that can be executed along with a valid link action. -* Detail description of each attribute is in Table F.6. -* Bitmap Values: -* Bit 0: LINK_SCAN -* Bit 1: LINK_RES_RETAIN -* Bit 2: DATA_FWD_REQ -* Bit 3–7: (Reserved) -*/ -TYPEDEF_BITMAP8(MIH_C_LINK_AC_ATTR) -//------------------------------------------- -/*! -* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC -* \brief An action for a link. The meaning of each link action is defined in Table F.5. -* 0: NONE -* 1: LINK_DISCONNECT -* 2: LINK_LOW_POWER -* 3: LINK_POWER_DOWN -* 4: LINK_POWER_UP -* 5–255: (Reserved) -*/ -TYPEDEF_UNSIGNED_INT1(MIH_C_LINK_AC_TYPE) -#define MIH_C_LINK_AC_TYPE_NONE (MIH_C_LINK_AC_TYPE_T)0 -#define MIH_C_LINK_AC_TYPE_LINK_DISCONNECT (MIH_C_LINK_AC_TYPE_T)1 -#define MIH_C_LINK_AC_TYPE_LINK_LOW_POWER (MIH_C_LINK_AC_TYPE_T)2 -#define MIH_C_LINK_AC_TYPE_LINK_POWER_DOWN (MIH_C_LINK_AC_TYPE_T)3 -#define MIH_C_LINK_AC_TYPE_LINK_POWER_UP (MIH_C_LINK_AC_TYPE_T)4 -#ifdef MIH_C_MEDIEVAL_EXTENSIONS -#define MIH_C_LINK_AC_TYPE_LINK_FLOW_ATTR (MIH_C_LINK_AC_TYPE_T)5 -#define MIH_C_LINK_AC_TYPE_LINK_ACTIVATE_RESOURCES (MIH_C_LINK_AC_TYPE_T)6 -#define MIH_C_LINK_AC_TYPE_LINK_DEACTIVATE_RESOURCES (MIH_C_LINK_AC_TYPE_T)7 -#endif -//------------------------------------------- -/*! -* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC -* \brief Represents the link type.a -* Number assignments: -* 0: Reserved -* 1: Wireless - GSM -* 2: Wireless - GPRS -* 3: Wireless - EDGE -* 15: Ethernet -* 18: Wireless - Other -* 19: Wireless - IEEE 802.11 -* 22: Wireless - CDMA2000 -* 23: Wireless - UMTS -* 24: Wireless - cdma2000-HRPD -* 25: Wireless - LTE (MEDIEVAL) -* 27: Wireless - IEEE 802.16 -* 28: Wireless - IEEE 802.20 -* 29: Wireless - IEEE 802.22 -*/ -TYPEDEF_UNSIGNED_INT1(MIH_C_LINK_TYPE) -#define MIH_C_WIRELESS_GSM (MIH_C_LINK_TYPE_T)1 -#define MIH_C_WIRELESS_GPRS (MIH_C_LINK_TYPE_T)2 -#define MIH_C_WIRELESS_EDGE (MIH_C_LINK_TYPE_T)3 -#define MIH_C_ETHERNET (MIH_C_LINK_TYPE_T)15 -#define MIH_C_WIRELESS_OTHER (MIH_C_LINK_TYPE_T)18 -#define MIH_C_WIRELESS_IEEE802_11 (MIH_C_LINK_TYPE_T)19 -#define MIH_C_WIRELESS_CDMA_2000 (MIH_C_LINK_TYPE_T)22 -//#define MIH_C_WIRELESS_UMTS (MIH_C_LINK_TYPE_T)23 -// Temp - MW modified to test LTE for MEDIEVAL -#define MIH_C_WIRELESS_UMTS (MIH_C_LINK_TYPE_T)25 -#define MIH_C_WIRELESS_CDMA_2000_HRPD (MIH_C_LINK_TYPE_T)24 -#define MIH_C_WIRELESS_LTE (MIH_C_LINK_TYPE_T)25 -#define MIH_C_WIRELESS_IEEE802_16 (MIH_C_LINK_TYPE_T)27 -#define MIH_C_WIRELESS_IEEE802_20 (MIH_C_LINK_TYPE_T)28 -#define MIH_C_WIRELESS_IEEE802_22 (MIH_C_LINK_TYPE_T)29 -//------------------------------------------- -/*! \struct MIH_C_LINK_ID_T -* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC -* \brief The identifier of a link that is not associated with the peer node. -* The LINK_ADDR contains the address of this link. -*/ -typedef struct MIH_C_LINK_ID { - MIH_C_LINK_TYPE_T link_type; - MIH_C_LINK_ADDR_T link_addr; -} MIH_C_LINK_ID_T; -//------------------------------------------- -#ifdef MIH_C_MEDIEVAL_EXTENSIONS -/*! \var MIH_C_PORT_T -* \ingroup MIH_C_MEDIEVAL_EXTENSIONS -* \brief 2 octets defining the port used by the transport protocol -*/ -TYPEDEF_OCTET(MIH_C_PORT, 2) -//------------------------------------------- -/*! \struct MIH_C_IP_TUPLE_T -* \ingroup MIH_C_MEDIEVAL_EXTENSIONS -* \brief Tuple consisting on an IP address and the port -*/ -typedef struct MIH_C_IP_TUPLE { - MIH_C_IP_ADDR_T ip_addr; - MIH_C_PORT_T port; -} MIH_C_IP_TUPLE_T; -//------------------------------------------- -/*! \var MIH_C_PROTO_T -* \ingroup MIH_C_MEDIEVAL_EXTENSIONS -* \brief The transport protocol used: -* 0: TCP -* 1: UDP -*/ -TYPEDEF_ENUMERATED(MIH_C_PROTO) -#define MIH_C_PROTO_TCP (MIH_C_PROTO_T)0 -#define MIH_C_PROTO_UDP (MIH_C_PROTO_T)1 -//------------------------------------------- -/*! \struct MIH_C_FLOW_ID_T -* \ingroup MIH_C_MEDIEVAL_EXTENSIONS -* \brief Five tuple, consisting on the source and destination address -* and ports plus the transport protocol used. -*/ -/*typedef struct MIH_C_FLOW_ID { - MIH_C_IP_TUPLE_T source_addr; - MIH_C_IP_TUPLE_T dest_addr; - MIH_C_PROTO_T transport_protocol; -} MIH_C_FLOW_ID_T;*/ -TYPEDEF_UNSIGNED_INT4(MIH_C_FLOW_ID) -//------------------------------------------- -/*! \struct MIH_C_MARK_T -* \ingroup MIH_C_MEDIEVAL_EXTENSIONS -* \brief 6 Bits (IPv4) or 20 Bits (IPv6) mask to be applied to the DSCP -* or Flow Label field of IPv4/v6 header. -*/ -typedef struct MIH_C_MARK { - MIH_C_CHOICE_T choice; - union { - BITMAP6(dscp_mask); - BITMAP20(flow_label_mask); - } _union; -} MIH_C_MARK_T; -//------------------------------------------- -/*! \var MIH_C_MAX_DELAY_T -* \ingroup MIH_C_MEDIEVAL_EXTENSIONS -* \brief Maximum delay supported by the flow in ms. -*/ -TYPEDEF_UNSIGNED_INT2(MIH_C_MAX_DELAY) -//------------------------------------------- -/*! \var MIH_C_BITRATE_T -* \ingroup MIH_C_MEDIEVAL_EXTENSIONS -* \brief A type to represent the maximum data rate in kb/s. -* Valid Range: 0 –– 2^32 – 1 - -*/ -TYPEDEF_UNSIGNED_INT4(MIH_C_BITRATE) -//------------------------------------------- -/*! \var MIH_C_JITTER_T -* \ingroup MIH_C_MEDIEVAL_EXTENSIONS -* \brief A type to represent the packet transfer delay jitter in ms. -*/ -TYPEDEF_UNSIGNED_INT2(MIH_C_JITTER) -//------------------------------------------- -/*! \var MIH_C_PKT_LOSS_RATE_T -* \ingroup MIH_C_MEDIEVAL_EXTENSIONS -* \brief A type to represent the packet loss rate. The loss rate is equal -* to the integer part of the result of multiplying --100 times the -* log10 of the ratio between the number of packets lost and the -* total number of packets transmitted. -*/ -TYPEDEF_UNSIGNED_INT2(MIH_C_PKT_LOSS_RATE) -//------------------------------------------- -/*! \var MIH_C_COS_T -* \ingroup MIH_C_MEDIEVAL_EXTENSIONS -* \brief COS Class to be used for queuing. -* To be filled for LTE and WLAN -*/ -TYPEDEF_UNSIGNED_INT2(MIH_C_COS) -//------------------------------------------- -/*! \var MIH_C_DROP_ELIGIBILITY_T -* \ingroup MIH_C_MEDIEVAL_EXTENSIONS -* \brief 0 means the frames are not eligible to discarding. -* 1 means frames are eligible for discarding. -*/ -TYPEDEF_BOOLEAN(MIH_C_DROP_ELIGIBILITY) -//------------------------------------------- -/*! \var MIH_C_MULTICAST_ENABLE_T -* \ingroup MIH_C_MEDIEVAL_EXTENSIONS -* \brief Identifies if a flow is multicast. -* 0: is not multicast -* 1: is multicast -*/ -TYPEDEF_BOOLEAN(MIH_C_MULTICAST_ENABLE) -//------------------------------------------- -/*! \var MIH_C_JUMBO_ENABLE_T -* \ingroup MIH_C_MEDIEVAL_EXTENSIONS -* \brief Identifies if JUMBO must be activated -* 0: Deactivate Jumbo -* 1: Activate Jumbo -*/ -TYPEDEF_BOOLEAN(MIH_C_JUMBO_ENABLE) -#endif -//------------------------------------------- -/*! \var MIH_C_LINK_DATA_RATE_T -* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC -* \brief A type to represent the maximum data rate in kb/s. -* Valid Range: 0 – 232–1 -*/ -TYPEDEF_UNSIGNED_INT4(MIH_C_LINK_DATA_RATE) -//------------------------------------------- -#ifdef MIH_C_MEDIEVAL_EXTENSIONS -/*! \struct MIH_C_QOS_T -* \ingroup MIH_C_MEDIEVAL_EXTENSIONS -* \brief The choice of delay and bitrate corresponds to a new flow being -* signalled through the MIH_SAP, the COS parameter is used after being processed by the WP3 AQM. -*/ -typedef struct MIH_C_QOS { - MIH_C_CHOICE_T choice; - union { - struct { - MIH_C_MAX_DELAY_T max_delay; - MIH_C_BITRATE_T bitrate; - MIH_C_JITTER_T jitter; - MIH_C_PKT_LOSS_RATE_T pkt_loss; - } mark_qos; - MIH_C_COS_T cos; - } _union; -} MIH_C_QOS_T; -//------------------------------------------- -/*! \struct MIH_C_RESOURCE_DESC_T -* \ingroup MIH_C_MEDIEVAL_EXTENSIONS -* \brief The choice of RESOURCE_DESC is used when the LINK_ACTIVATE_RESOURCES -* or DEACTIVATE action is selected in order to identify and -* configure the flow subject to action -*/ -typedef struct MIH_C_RESOURCE_DESC { - MIH_C_LINK_ID_T link_id; - MIH_C_FLOW_ID_T flow_id; - MIH_C_CHOICE_T choice_link_data_rate; - union { - MIH_C_NULL_T null_attr; - MIH_C_LINK_DATA_RATE_T link_data_rate; - } _union_link_data_rate; - MIH_C_CHOICE_T choice_qos; - union { - MIH_C_NULL_T null_attr; - MIH_C_QOS_T qos; - } _union_qos; - MIH_C_CHOICE_T choice_jumbo_enable; - union { - MIH_C_NULL_T null_attr; - MIH_C_JUMBO_ENABLE_T jumbo_enable; - } _union_jumbo_enable; - MIH_C_CHOICE_T choice_multicast_enable; - union { - MIH_C_NULL_T null_attr; - MIH_C_MULTICAST_ENABLE_T multicast_enable; - } _union_multicast_enable; -} MIH_C_RESOURCE_DESC_T; -//------------------------------------------- -/*! \struct MIH_C_FLOW_ATTRIBUTE_T -* \ingroup MIH_C_MEDIEVAL_EXTENSIONS -* \brief The choice of FLOW_ATTRIBUTE is used when the FLOW_ATTR action is -* selected in order to provide the mark and multicast configuration -* to be set up for the flow. -*/ -typedef struct MIH_C_FLOW_ATTRIBUTE { - MIH_C_FLOW_ID_T flow_id; - MIH_C_CHOICE_T choice_multicast_enable; - union { - MIH_C_NULL_T null_attr; - MIH_C_MULTICAST_ENABLE_T multicast_enable; - } _union_multicast_enable; - MIH_C_CHOICE_T choice_mark_qos; - union { - MIH_C_NULL_T null_attr; - struct { - MIH_C_MARK_T mark; - MIH_C_QOS_T qos; - } mark_qos; - } _union_mark_qos; - MIH_C_CHOICE_T choice_mark_drop_eligibility; - union { - MIH_C_NULL_T null_attr; - struct { - MIH_C_MARK_T mark; - MIH_C_DROP_ELIGIBILITY_T drop_eligibility; - } mark_drop_eligibility; - } _union_mark_drop_eligibility; - -} MIH_C_FLOW_ATTRIBUTE_T; -//------------------------------------------- -/*! \struct MIH_C_LINK_AC_PARAM_T -* \ingroup MIH_C_MEDIEVAL_EXTENSIONS -* \brief The choice of FLOW_ATTRIBUTE is used when the FLOW_ATTR action is selected -* in order to provide the mark and multicast configuration to be set up for the flow. -* The choice of RESOURCE_DESC is used when LINK_ACTIVATE_RESOURCES or -* LINK_DEACTIVATE_RESOURCES actions are used. -*/ -typedef struct MIH_C_LINK_AC_PARAM { - MIH_C_CHOICE_T choice; - union { - MIH_C_NULL_T null_attr; - MIH_C_FLOW_ATTRIBUTE_T flow_attribute; - MIH_C_RESOURCE_DESC_T resource_desc; - } _union; -} MIH_C_LINK_AC_PARAM_T; -#endif -//------------------------------------------- -/*! \struct MIH_C_LINK_ACTION_T -* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC -* \brief Link action. -*/ -typedef struct MIH_C_LINK_ACTION { - MIH_C_LINK_AC_TYPE_T link_ac_type; - MIH_C_LINK_AC_ATTR_T link_ac_attr; -#ifdef MIH_C_MEDIEVAL_EXTENSIONS - MIH_C_LINK_AC_PARAM_T link_ac_param; /*!< \brief extension of MEDIEVAL PROJECT */ -#endif -} MIH_C_LINK_ACTION_T; -//------------------------------------------- -/*! \struct MIH_C_LINK_ACTION_REQ_T -* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC -* \brief A set of handover action request parameters. The choice of LINK_ADDR is to -* provide PoA address information when the LINK_ACTION contains the attribute for DATA_FWD_REQ. -*/ -typedef struct MIH_C_LINK_ACTION_REQ { - MIH_C_LINK_ID_T link_id; - MIH_C_CHOICE_T choice; - union { - MIH_C_NULL_T null_attr; - MIH_C_LINK_ADDR_T link_addr; - } _union; - - MIH_C_LINK_ACTION_T link_action; - MIH_C_LINK_AC_EX_TIME_T link_action_ex_time; -} MIH_C_LINK_ACTION_REQ_T; -//------------------------------------------- -/*! \struct MIH_C_SIG_STRENGTH_T -* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC -* \brief Represents the signal strength in dBm unit or its relative value in an arbitrary percentage scale. -*/ -typedef struct MIH_C_SIG_STRENGTH { - MIH_C_CHOICE_T choice; - union { - INTEGER1(dbm) - PERCENTAGE(percentage) - } _union; -} MIH_C_SIG_STRENGTH_T; -#define MIH_C_SIG_STRENGTH_CHOICE_DBM (MIH_C_CHOICE_T)0 -#define MIH_C_SIG_STRENGTH_CHOICE_PERCENTAGE (MIH_C_CHOICE_T)1 -//------------------------------------------- -/*! \var MIH_C_NETWORK_ID_T -* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS -* \brief A type to represent a network identifier. -* A non-NULL terminated string whose length shall not exceed 253 octets. -*/ -TYPEDEF_OCTET_STRING(MIH_C_NETWORK_ID, 253) -//------------------------------------------- -/*! \struct MIH_C_LINK_SCAN_RSP_T -* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC -* \brief Represents a scan response. The LINK_ADDR contains the PoA link address. -* The PoA belongs to the NETWORK_ID with the given SIG_STRENGTH. -*/ -typedef struct MIH_C_LINK_SCAN_RSP { - MIH_C_LINK_ADDR_T link_addr; - MIH_C_NETWORK_ID_T network_id; - MIH_C_SIG_STRENGTH_T sig_strength; -} MIH_C_LINK_SCAN_RSP_T; -//------------------------------------------- -/*! \var MIH_C_LINK_SCAN_RSP_T -* \brief -*/ -TYPEDEF_LIST(MIH_C_LINK_SCAN_RSP, MIH_C_LINK_SCAN_RSP_LENGTH) -//------------------------------------------- -/*! \struct MIH_C_LINK_ACTION_RSP_T -* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC -* \brief A set of link action returned results. -*/ -typedef struct MIH_C_LINK_ACTION_RSP { - MIH_C_LINK_ID_T link_id; - MIH_C_LINK_AC_RESULT_T link_ac_result; - MIH_C_CHOICE_T choice; - union { - MIH_C_NULL_T null_attr; - LIST(MIH_C_LINK_SCAN_RSP, link_scan_rsp) - } _union; -} MIH_C_LINK_ACTION_RSP_T; -//------------------------------------------- -#define MIH_C_BIT_LINK_EVENT_SUBSCRIBE MIH_C_BIT_1_VALUE -#define MIH_C_BIT_LINK_EVENT_UNSUBSCRIBE MIH_C_BIT_2_VALUE -#define MIH_C_BIT_LINK_GET_PARAMETERS MIH_C_BIT_3_VALUE -#define MIH_C_BIT_LINK_CONFIGURE_THRESHOLDS MIH_C_BIT_4_VALUE -#define MIH_C_BIT_LINK_ACTION MIH_C_BIT_5_VALUE -/*! \var MIH_C_LINK_CMD_LIST_T -* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC -* \brief A list of link commands. -* Bitmap Values: -* Bit 0: Reserved -* Bit 1: Link_Event_Subscribe -* Bit 2: Link_Event_Unsubscribe -* Bit 3: Link_Get_Parameters -* Bit 4: Link_Configure_Thresholds -* Bit 5: Link_Action -* Bit 6-31: (Reserved) -*/ -TYPEDEF_BITMAP32(MIH_C_LINK_CMD_LIST) -//------------------------------------------- -/*! \var MIH_C_TH_ACTION_T -* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC -* \brief -* 0: Set normal threshold -* 1: Set one-shot threshold -* 2: Cancel threshold -*/ -TYPEDEF_ENUMERATED(MIH_C_TH_ACTION) -#define MIH_C_SET_NORMAL_THRESHOLD (MIH_C_TH_ACTION_T)0 -#define MIH_C_SET_ONE_SHOT_THRESHOLD (MIH_C_TH_ACTION_T)1 -#define MIH_C_CANCEL_THRESHOLD (MIH_C_TH_ACTION_T)2 -//------------------------------------------- -/*! \var MIH_C_THRESHOLD_VAL_T -* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC -* \brief Threshold value. The format of the media-dependent value is defined in the -* respective media specification standard and the equivalent number of bits (i.e., -* first bits) of this data type is used. In case that there are remaining unused bits -* in the data type, these are marked as all-zeros (‘0’). -* Valid Range: 0..65535 -*/ -TYPEDEF_UNSIGNED_INT2(MIH_C_THRESHOLD_VAL) - -//------------------------------------------- -/*! \var MIH_C_THRESHOLD_XDIR_T -* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC -* \brief The direction the threshold is to be crossed. -* 0: ABOVE_THRESHOLD -* 1: BELOW_THRESHOLD -* 2–255: (Reserved) -*/ -TYPEDEF_UNSIGNED_INT1(MIH_C_THRESHOLD_XDIR) -#define MIH_C_ABOVE_THRESHOLD (MIH_C_THRESHOLD_XDIR_T)0 -#define MIH_C_BELOW_THRESHOLD (MIH_C_THRESHOLD_XDIR_T)1 -//------------------------------------------- -/*! \struct MIH_C_THRESHOLD_T -* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC -* \brief A link threshold. The threshold is considered crossed when the value of the -* link parameter passes the threshold in the specified direction. -*/ -typedef struct MIH_C_THRESHOLD { - MIH_C_THRESHOLD_VAL_T threshold_val; - MIH_C_THRESHOLD_XDIR_T threshold_xdir; -} MIH_C_THRESHOLD_T; -//------------------------------------------- -/*! \var MIH_C_TIMER_INTERVAL_T -* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC -* \brief This timer value (ms) is used to set the interval between periodic reports. -* Valid Range: 0..65535 -*/ -TYPEDEF_UNSIGNED_INT2(MIH_C_TIMER_INTERVAL) -//------------------------------------------- -/*! \var MIH_C_LINK_PARAM_GEN_T -* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC -* \brief A type to represent a generic link parameter that is applicable to any link type. -* 0: Data Rate—the parameter value is represented as a DATA_RATE. -* 1: Signal Strength—the parameter value is represented as a SIG_STRENGTH. -* 2: Signal over interference plus noise ratio (SINR)—the parameter value is -* represented as an UNSIGNED_INT(2). -* 3:Throughput (the number of bits successfully received divided by the time it -* took to transmit them over the medium)—the parameter value is represented as -* an UNSIGNED_INT(2). -* 4: Packet Error Rate (representing the ratio between the number of frames received -* in error and the total number of frames transmitted in a link population of interest) -* the parameter value is represented as a PERCENTAGE. -* 5–255: (Reserved) -*/ -TYPEDEF_UNSIGNED_INT1(MIH_C_LINK_PARAM_GEN) -#define MIH_C_LINK_PARAM_GEN_DATA_RATE (MIH_C_LINK_PARAM_GEN_T)0 -#define MIH_C_LINK_PARAM_GEN_SIGNAL_STRENGTH (MIH_C_LINK_PARAM_GEN_T)1 -#define MIH_C_LINK_PARAM_GEN_SINR (MIH_C_LINK_PARAM_GEN_T)2 -#define MIH_C_LINK_PARAM_GEN_THROUGHPUT (MIH_C_LINK_PARAM_GEN_T)3 -#define MIH_C_LINK_PARAM_GEN_PACKET_ERROR_RATE (MIH_C_LINK_PARAM_GEN_T)4 -//------------------------------------------- -/*! \var MIH_C_LINK_PARAM_QOS_T -* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC -* \brief A type to represent QOS_LIST parameters. -* 0: Maximum number of differentiable classes of service supported. -* 1: Minimum packet transfer delay for all CoS, the minimum delay over a class -* population of interest. -* 2: Average packet transfer delay for all CoS, the arithmetic mean of the delay -* over a class population of interest. (See B.3.4) -* 3: Maximum packet transfer delay for all CoS, the maximum delay over a class -* population of interest. -* 4: Packet transfer delay jitter for all CoS, the standard deviation of the delay -* over a class population of interest. (See B.3.5.) -* 5: Packet loss rate for all CoS, the ratio between the number of frames that are -* transmitted but not received and the total number of frames transmitted over -* a class population of interest. (See B.3.2.) -* 6–255: (Reserved) -*/ -TYPEDEF_UNSIGNED_INT1(MIH_C_LINK_PARAM_QOS) -#define MIH_C_LINK_PARAM_QOS_MAX_NUM_DIF_COS_SUPPORTED (MIH_C_LINK_PARAM_QOS_T)0 -#define MIH_C_LINK_PARAM_QOS_MIN_PACKET_TRANSFER_DELAY_ALL_COS (MIH_C_LINK_PARAM_QOS_T)1 -#define MIH_C_LINK_PARAM_QOS_AVG_PACKET_TRANSFER_DELAY_ALL_COS (MIH_C_LINK_PARAM_QOS_T)2 -#define MIH_C_LINK_PARAM_QOS_MAX_PACKET_TRANSFER_DELAY_ALL_COS (MIH_C_LINK_PARAM_QOS_T)3 -#define MIH_C_LINK_PARAM_QOS_STD_DEVIATION_PACKET_TRANSFER_DELAY (MIH_C_LINK_PARAM_QOS_T)4 -#define MIH_C_LINK_PARAM_QOS_PACKET_LOSS_RATE_ALL_COS_FRAME_RATIO (MIH_C_LINK_PARAM_QOS_T)5 -//------------------------------------------- -/*! \var MIH_C_LINK_PARAM_GG_T -* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC -* \brief A type to represent a link parameter for GSM and GPRS. See 3GPP TS 25.008. -* 0: RxQual -* 1: RsLev -* 2: Mean BEP -* 3: StDev BEP -* 4-255: (Reserved) -*/ -TYPEDEF_UNSIGNED_INT1(MIH_C_LINK_PARAM_GG) -//------------------------------------------- -/*! \var MIH_C_LINK_PARAM_EDGE_T -* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC -* \brief A type to represent a link parameter for EDGE. -* 0-255: (Reserved) -*/ -TYPEDEF_UNSIGNED_INT1(MIH_C_LINK_PARAM_EDGE) -//------------------------------------------- -/*! \var MIH_C_LINK_PARAM_ETH_T -* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC -* \brief A type to represent a link parameter for Ethernet. -* 0-255: (Reserved) -*/ -TYPEDEF_UNSIGNED_INT1(MIH_C_LINK_PARAM_ETH) -//------------------------------------------- -/*! \var MIH_C_LINK_PARAM_802_11_T -* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC -* \brief A type to represent a link parameter for IEEE 802.11. -* 0: RSSI of the beacon channel, as defined in IEEE Std 802.11-2007. -* (This is applicable only for an MN.) -* 1: No QoS resource available. The corresponding LINK_PARAM_VAL is BOOLEAN set to TRUE when -* no QoS resources available. (This applicable when the traffic stream to be transmitted -* is on an access category configured for mandatory admission control and the request for -* bandwidth was denied by the available APs in the access network). -* 2: Multicast packet loss rate. -* 3–255: (Reserved) -* Medieval extensions: -* 3: System Load. Percentage of usage load present at the system. -* 4:Number registered users. -* 5:Number active users. -* 6:Congestion window of users. Ordered list of the CW used by the clients, ordered according to -* highest value of MAC address. -* 7:Transmission rate of users. Ordered list of the transmission rate used by the clients, ordered -* according to highest value of MAC address. -* 8-255: (Reserved) -*/ -TYPEDEF_UNSIGNED_INT1(MIH_C_LINK_PARAM_802_11) -//------------------------------------------- -/*! \var MIH_C_LINK_PARAM_C2K_T -* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC -* \brief A type to represent a link parameter for CDMA2000. -* 0: PILOT_STRENGTH -* 1–255: (Reserved) -*/ -TYPEDEF_UNSIGNED_INT1(MIH_C_LINK_PARAM_C2K) -//------------------------------------------- -/*! \var MIH_C_LINK_PARAM_FDD_T -* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC -* \brief A type to represent a link parameter for UMTS. See 3GPP TS 25.215. -* 0: CPICH RSCP -* 1: PCCPCH RSCP -* 2: UTRA carrier RSSI -* 3: GSM carrier RSSI -* 4: CPICH Ec/No -* 5: Transport channel BLER -* 6: user equipment (UE) transmitted power -* 7–255: (Reserved) -*/ -TYPEDEF_UNSIGNED_INT1(MIH_C_LINK_PARAM_FDD) -#define MIH_C_LINK_PARAM_FDD_CPICH_RSCP (MIH_C_LINK_PARAM_FDD_T)0 -#define MIH_C_LINK_PARAM_FDD_PCCPCH_RSCP (MIH_C_LINK_PARAM_FDD_T)1 -#define MIH_C_LINK_PARAM_FDD_UTRA_CARRIER_RSSI (MIH_C_LINK_PARAM_FDD_T)2 -#define MIH_C_LINK_PARAM_FDD_GSM_CARRIER_RSSI (MIH_C_LINK_PARAM_FDD_T)3 -#define MIH_C_LINK_PARAM_FDD_CPICH_EC_NO (MIH_C_LINK_PARAM_FDD_T)4 -#define MIH_C_LINK_PARAM_FDD_TRANSPORT_CHANNEL_BLER (MIH_C_LINK_PARAM_FDD_T)5 -#define MIH_C_LINK_PARAM_FDD_UE_TRANMITTED_POWER (MIH_C_LINK_PARAM_FDD_T)6 -//------------------------------------------- -/*! \var MIH_C_LINK_PARAM_HRPD_T -* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC -* \brief A type to represent a link parameter for CDMA2000 HRPD. -* 0: PILOT_STRENGTH -* 1–255: (Reserved) -*/ -TYPEDEF_UNSIGNED_INT1(MIH_C_LINK_PARAM_HRPD) -//------------------------------------------- -/*! \var MIH_C_LINK_PARAM_802_16_T -* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC -* \brief A type to represent a link parameter for IEEE 802.16. -* 0–255: (Reserved) -*/ -TYPEDEF_UNSIGNED_INT1(MIH_C_LINK_PARAM_802_16) -//------------------------------------------- -/*! \var MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC_T -* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC -* \brief A type to represent a link parameter for IEEE 802.20. -* 0–255: (Reserved) -*/ -TYPEDEF_UNSIGNED_INT1(MIH_C_LINK_PARAM_802_20) -//------------------------------------------- -/*! \var MIH_C_LINK_PARAM_802_22_T -* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC -* \brief A type to represent a link parameter for IEEE 802.22. -* 0–255: (Reserved) -*/ -TYPEDEF_UNSIGNED_INT1(MIH_C_LINK_PARAM_802_22) -//------------------------------------------- -/*! \var MIH_C_LINK_PARAM_LTE_T -* \ingroup MIH_C_MEDIEVAL_EXTENSIONS -* \brief A type to represent a link parameter for LTE. -* -*/ -TYPEDEF_UNSIGNED_INT1(MIH_C_LINK_PARAM_LTE) -#define MIH_C_LINK_PARAM_LTE_UE_RSRP 0 -#define MIH_C_LINK_PARAM_LTE_UE_RSRQ 1 -#define MIH_C_LINK_PARAM_LTE_UE_CQI 2 -#define MIH_C_LINK_PARAM_LTE_AVAILABLE_BW 3 -#define MIH_C_LINK_PARAM_LTE_PACKET_DELAY 4 -#define MIH_C_LINK_PARAM_LTE_PACKET_LOSS_RATE 5 -#define MIH_C_LINK_PARAM_LTE_L2_BUFFER_STATUS 6 -#define MIH_C_LINK_PARAM_LTE_MOBILE_NODE_CAPABILITIES 7 -#define MIH_C_LINK_PARAM_LTE_EMBMS_CAPABILITY 8 -#define MIH_C_LINK_PARAM_LTE_JUMBO_FEASIBILITY 9 -#define MIH_C_LINK_PARAM_LTE_JUMBO_SETUP_STATUS 10 -#define MIH_C_LINK_PARAM_LTE_NUM_ACTIVE_EMBMS_RECEIVERS_PER_FLOW 11 - -//------------------------------------------- -/*! \struct MIH_C_LINK_PARAM_TYPE_T -* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC -* \brief Measurable link parameter for which thresholds are being set. -*/ -#define MIH_C_LINK_PARAM_TYPE_CHOICE_GEN (MIH_C_CHOICE_T)0 -#define MIH_C_LINK_PARAM_TYPE_CHOICE_QOS (MIH_C_CHOICE_T)1 -#define MIH_C_LINK_PARAM_TYPE_CHOICE_GG (MIH_C_CHOICE_T)2 -#define MIH_C_LINK_PARAM_TYPE_CHOICE_EDGE (MIH_C_CHOICE_T)3 -#define MIH_C_LINK_PARAM_TYPE_CHOICE_ETH (MIH_C_CHOICE_T)4 -#define MIH_C_LINK_PARAM_TYPE_CHOICE_802_11 (MIH_C_CHOICE_T)5 -#define MIH_C_LINK_PARAM_TYPE_CHOICE_C2K (MIH_C_CHOICE_T)6 -#define MIH_C_LINK_PARAM_TYPE_CHOICE_FDD (MIH_C_CHOICE_T)7 -#define MIH_C_LINK_PARAM_TYPE_CHOICE_HRPD (MIH_C_CHOICE_T)8 -#define MIH_C_LINK_PARAM_TYPE_CHOICE_802_16 (MIH_C_CHOICE_T)9 -#define MIH_C_LINK_PARAM_TYPE_CHOICE_802_20 (MIH_C_CHOICE_T)10 -#define MIH_C_LINK_PARAM_TYPE_CHOICE_802_22 (MIH_C_CHOICE_T)11 -#define MIH_C_LINK_PARAM_TYPE_CHOICE_LTE (MIH_C_CHOICE_T)12 - -typedef struct MIH_C_LINK_PARAM_TYPE { - MIH_C_CHOICE_T choice; - union { - MIH_C_LINK_PARAM_GEN_T link_param_gen; - MIH_C_LINK_PARAM_QOS_T link_param_qos; - MIH_C_LINK_PARAM_GG_T link_param_gg; - MIH_C_LINK_PARAM_EDGE_T link_param_edge; - MIH_C_LINK_PARAM_ETH_T link_param_eth; - MIH_C_LINK_PARAM_802_11_T link_param_802_11; - MIH_C_LINK_PARAM_C2K_T link_param_c2k; - MIH_C_LINK_PARAM_FDD_T link_param_fdd; - MIH_C_LINK_PARAM_HRPD_T link_param_hrpd; - MIH_C_LINK_PARAM_802_16_T link_param_802_16; - MIH_C_LINK_PARAM_802_20_T link_param_802_20; - MIH_C_LINK_PARAM_802_22_T link_param_802_22; - MIH_C_LINK_PARAM_LTE_T link_param_lte; - } _union; -} MIH_C_LINK_PARAM_TYPE_T; -//------------------------------------------- -/*! \var MIH_C_THRESHOLD_LIST_T -* \brief -*/ -TYPEDEF_LIST(MIH_C_THRESHOLD, MIH_C_THRESHOLD_LIST_LENGTH) -/*! \struct MIH_C_LINK_CFG_PARAM_T -* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC -* \brief A link configuration parameter. -* TH_ACTION indicates what action to apply to the listed thresholds. -* When “Cancel threshold� is selected and no thresholds are specified, then all -* currently configured thresholds for the given LINK_PARAM_TYPE are cancelled. -* When “Cancel threshold� is selected and thresholds are specified only those -* configured thresholds for the given LINK_PARAM_TYPE and whose threshold value -* match what was specified are cancelled. -* With “Set one-shot threshold� the listed thresholds are first set and then each of -* the threshold is cancelled as soon as it is crossed for the first time. -*/ -typedef struct MIH_C_LINK_CFG_PARAM { - MIH_C_LINK_PARAM_TYPE_T link_param_type; - MIH_C_CHOICE_T choice; - union { - MIH_C_NULL_T null_attr; - MIH_C_TIMER_INTERVAL_T timer_interval; -#ifdef RAL_SAME_AS_MEDIEVAL_PROJECT_BUT_I_THINK_THIS_IS_AN_ERROR - LIST(MIH_C_LINK_SCAN_RSP, link_scan_rsp) -#endif - } _union; - MIH_C_TH_ACTION_T th_action; - LIST(MIH_C_THRESHOLD, threshold) -} MIH_C_LINK_CFG_PARAM_T; -//------------------------------------------- -/*! \struct MIH_C_LINK_CFG_STATUS_T -* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC -* \brief The status of link parameter configuration for each threshold specified in the THRESHOLD. -*/ -typedef struct MIH_C_LINK_CFG_STATUS { - MIH_C_LINK_PARAM_TYPE_T link_param_type; - MIH_C_THRESHOLD_T threshold; - MIH_C_CONFIG_STATUS_T config_status; -} MIH_C_LINK_CFG_STATUS_T; -//------------------------------------------- -#define MIH_C_BIT_NUMBER_OF_CLASSES_OF_SERVICE_SUPPORTED MIH_C_BIT_0_VALUE -#define MIH_C_BIT_NUMBER_OF_QUEUES_SUPPORTED MIH_C_BIT_1_VALUE -/*! \var MIH_C_LINK_DESC_REQ_T -* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC -* \brief A set of link descriptors. -* Bitmap Values: -* Bit 0: Number of Classes of Service Supported -* Bit 1: Number of Queues Supported -* Bits 2–15: (Reserved) -*/ -TYPEDEF_BITMAP16(MIH_C_LINK_DESC_REQ) -//------------------------------------------- -/*! \var MIH_C_NUM_COS_T -* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC -* \brief The maximum number of differentiable classes of service supported. -* Valid Range: 0..255 -*/ -TYPEDEF_UNSIGNED_INT1(MIH_C_NUM_COS) -//------------------------------------------- -/*! \var MIH_C_NUM_QUEUE_T -* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC -* \brief The number of transmit queues supported. -* Valid Range: 0..255 -*/ -TYPEDEF_UNSIGNED_INT1(MIH_C_NUM_QUEUE) -//------------------------------------------- -/*! \struct MIH_C_LINK_DESC_RSP_T -* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC -* \brief Descriptors of a link. -*/ -typedef struct MIH_C_LINK_DESC_RSP { - MIH_C_CHOICE_T choice; - union { - MIH_C_NUM_COS_T num_cos; - MIH_C_NUM_QUEUE_T num_queue; - } _union; -} MIH_C_LINK_DESC_RSP_T; -//------------------------------------------- -/*! \var MIH_C_LINK_DN_REASON_T -* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC -* \brief Represents the reason of a link down event. -* See Table F.7 for the enumeration values. -*/ -TYPEDEF_UNSIGNED_INT1(MIH_C_LINK_DN_REASON) -//------------------------------------------- -#define MIH_C_BIT_LINK_DETECTED MIH_C_BIT_0_VALUE -#define MIH_C_BIT_LINK_UP MIH_C_BIT_1_VALUE -#define MIH_C_BIT_LINK_DOWN MIH_C_BIT_2_VALUE -#define MIH_C_BIT_LINK_PARAMETERS_REPORT MIH_C_BIT_3_VALUE -#define MIH_C_BIT_LINK_GOING_DOWN MIH_C_BIT_4_VALUE -#define MIH_C_BIT_LINK_HANDOVER_IMMINENT MIH_C_BIT_5_VALUE -#define MIH_C_BIT_LINK_HANDOVER_COMPLETE MIH_C_BIT_6_VALUE -#define MIH_C_BIT_LINK_PDU_TRANSMIT_STATUS MIH_C_BIT_7_VALUE -/*! \var MIH_C_LINK_EVENT_LIST_T -* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC -* \brief A list of link events. The specified event is selected if the corresponding bit is set to 1. -* Bitmap values: -* Bit 0: Link_Detected -* Bit 1: Link_Up -* Bit 2: Link_Down -* Bit 3: Link_Parameters_Report -* Bit 4: Link_Going_Down -* Bit 5: Link_Handover_Imminent -* Bit 6: Link_Handover_Complete -* Bit 7: Link_PDU_Transmit_Status -* Bit 8–31: (Reserved) -*/ -TYPEDEF_BITMAP32(MIH_C_LINK_EVENT_LIST) -//------------------------------------------- -/*! \var MIH_C_LINK_GD_REASON_T -* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC -* \brief Represents the reason of a link going down. See Table F.8 for the enumeration values. -*/ -TYPEDEF_UNSIGNED_INT1(MIH_C_LINK_GD_REASON) -//------------------------------------------- -#define MIH_C_BIT_EVENT_SERVICE_SUPPORTED MIH_C_BIT_1_VALUE -#define MIH_C_BIT_COMMAND_SERVICE_SUPPORTED MIH_C_BIT_2_VALUE -#define MIH_C_BIT_INFORMATION_SERVICE_SUPPORTED MIH_C_BIT_3_VALUE -/*! \var MIH_C_LINK_MIHCAP_FLAG_T -* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC -* \brief Represents if MIH capability is supported or not. If the bit is set, it indicates -* that the capability is supported. -* Bitmap values: -* Bit 1: event service (ES) supported -* Bit 2: command service (CS) supported -* Bit 3: information service (IS) supported -* Bit 0, 4–7: (Reserved) -*/ -TYPEDEF_BITMAP8(MIH_C_LINK_MIHCAP_FLAG) -//------------------------------------------- -/*! \var MIH_C_LINK_PARAM_VAL_T -* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC -* \brief The current value of the parameter. The format of the media-dependent value is defined in -* the respective media specification standard and the equivalent number of bits (i.e., first -* bits) of this data type is used. In case that there are remaining unused bits in the data -* type, these are marked as all-zeros (‘0’). -* Valid Range: 0..65535 -*/ -TYPEDEF_UNSIGNED_INT2(MIH_C_LINK_PARAM_VAL) - - - - - -//----------------------------------------------------------------------------- -// STD 802.21-2008 Table F.9 Data types for QOS (MAINLY because of precedence definition) -//----------------------------------------------------------------------------- -//------------------------------------------- -/*! \var MIH_C_COS_ID_T -* \ingroup MIH_C_F9_DATA_TYPES_FOR_QOS -* \brief Defines MIH_C_COS_ID_T as a MIH_C_UNSIGNED_INT1_T. -* Valid Range: 0–255 -*/ -TYPEDEF_UNSIGNED_INT1(MIH_C_COS_ID) -//------------------------------------------- -/*! \struct MIH_C_MIN_PK_TX_DELAY_T -* \ingroup MIH_C_F9_DATA_TYPES_FOR_QOS -* \brief A type to represent the minimum packet transfer delay in ms for the specific CoS specified by the COS_ID. -*/ -typedef struct MIH_C_MIN_PK_TX_DELAY { - MIH_C_COS_ID_T cos_id; - UNSIGNED_INT2(value) -} MIH_C_MIN_PK_TX_DELAY_T; -//------------------------------------------- -/*! \struct MIH_C_AVG_PK_TX_DELAY_T -* \ingroup MIH_C_F9_DATA_TYPES_FOR_QOS -* \brief A type to represent the average packet transfer delay in ms for the specific CoS specified by the COS_ID. -*/ -typedef struct MIH_C_AVG_PK_TX_DELAY { - MIH_C_COS_ID_T cos_id; - UNSIGNED_INT2(value) -} MIH_C_AVG_PK_TX_DELAY_T; -//------------------------------------------- -/*! \struct MIH_C_MAX_PK_TX_DELAY_T -* \ingroup MIH_C_F9_DATA_TYPES_FOR_QOS -* \brief A type to represent the maximum packet transfer delay in ms for the specific CoS specified by the COS_ID. -*/ -typedef struct MIH_C_MAX_PK_TX_DELAY { - MIH_C_COS_ID_T cos_id; - UNSIGNED_INT2(value) -} MIH_C_MAX_PK_TX_DELAY_T; -//------------------------------------------- -/*! \struct MIH_C_PK_DELAY_JITTER_T -* \ingroup MIH_C_F9_DATA_TYPES_FOR_QOS -* \brief A type to represent the packet transfer delay jitter in ms for the specific CoS specified by the COS_ID. -*/ -typedef struct MIH_C_PK_DELAY_JITTER { - MIH_C_COS_ID_T cos_id; - UNSIGNED_INT2(value) -} MIH_C_PK_DELAY_JITTER_T; -//------------------------------------------- -/*! \struct MIH_C_PK_LOSS_RATE_T -* \ingroup MIH_C_F9_DATA_TYPES_FOR_QOS -* \brief A type to represent the packet loss rate for the specific CoS specified by the COS_ID. The loss rate is -* equal to the integer part of the result of multiplying –100 times the log10 of the ratio between the num- -* ber of packets lost and the total number of packets transmitted in the class population of interest. -*/ -typedef struct MIH_C_PK_LOSS_RATE { - MIH_C_COS_ID_T cos_id; - UNSIGNED_INT2(value) -} MIH_C_PK_LOSS_RATE_T; -//------------------------------------------- -/*! \var MIH_C_MIN_PK_TX_DELAY_LIST_T -* \brief -*/ -TYPEDEF_LIST(MIH_C_MIN_PK_TX_DELAY, MIH_C_QOS_LIST_LENGTH) -/*! \var MIH_C_AVG_PK_TX_DELAY_LIST_T -* \brief -*/ -TYPEDEF_LIST(MIH_C_AVG_PK_TX_DELAY, MIH_C_QOS_LIST_LENGTH) -/*! \var MIH_C_MAX_PK_TX_DELAY_LIST_T -* \brief -*/ -TYPEDEF_LIST(MIH_C_MAX_PK_TX_DELAY, MIH_C_QOS_LIST_LENGTH) -/*! \var MIH_C_PK_DELAY_JITTER_LIST_T -* \brief -*/ -TYPEDEF_LIST(MIH_C_PK_DELAY_JITTER, MIH_C_QOS_LIST_LENGTH) -/*! \var MIH_C_PK_LOSS_RATE_LIST_T -* \brief -*/ -TYPEDEF_LIST(MIH_C_PK_LOSS_RATE, MIH_C_QOS_LIST_LENGTH) - -//------------------------------------------- -/*! \var MIH_C_NUM_COS_TYPES_T -* \ingroup MIH_C_F9_DATA_TYPES_FOR_QOS -* \brief -*/ -TYPEDEF_UNSIGNED_INT1(MIH_C_NUM_COS_TYPES) - -/*! \struct MIH_C_QOS_PARAM_VAL_T -* \ingroup MIH_C_F9_DATA_TYPES_FOR_QOS -* \brief A choice of Class of Service (CoS) parameters. -*/ -typedef struct MIH_C_QOS_PARAM_VAL { - MIH_C_CHOICE_T choice; - union { - MIH_C_NUM_COS_TYPES_T num_qos_types; - LIST(MIH_C_MIN_PK_TX_DELAY, min_pk_tx_delay) - LIST(MIH_C_AVG_PK_TX_DELAY, avg_pk_tx_delay) - LIST(MIH_C_MAX_PK_TX_DELAY, max_pk_tx_delay) - LIST(MIH_C_PK_DELAY_JITTER, pk_delay_jitter) - LIST(MIH_C_PK_LOSS_RATE, pk_loss_rate) - } _union; -} MIH_C_QOS_PARAM_VAL_T; -#define MIH_C_QOS_PARAM_VAL_CHOICE_NUM_QOS_TYPES (MIH_C_CHOICE_T)0 -#define MIH_C_QOS_PARAM_VAL_CHOICE_MIN_PK_TX_DELAY (MIH_C_CHOICE_T)1 -#define MIH_C_QOS_PARAM_VAL_CHOICE_AVG_PK_TX_DELAY (MIH_C_CHOICE_T)2 -#define MIH_C_QOS_PARAM_VAL_CHOICE_MAX_PK_TX_DELAY (MIH_C_CHOICE_T)3 -#define MIH_C_QOS_PARAM_VAL_CHOICE_PK_DELAY_JITTER (MIH_C_CHOICE_T)4 -#define MIH_C_QOS_PARAM_VAL_CHOICE_PK_LOSS_RATE (MIH_C_CHOICE_T)5 - -//------------------------------------------- -/*! \struct MIH_C_QOS_LIST_T -* \ingroup MIH_C_F9_DATA_TYPES_FOR_QOS -* \brief A list of Class of Service (CoS) parameters. -*/ -typedef struct MIH_C_QOS_LIST { - MIH_C_NUM_COS_TYPES_T num_qos_types; - LIST(MIH_C_MIN_PK_TX_DELAY, min_pk_tx_delay) - LIST(MIH_C_AVG_PK_TX_DELAY, avg_pk_tx_delay) - LIST(MIH_C_MAX_PK_TX_DELAY, max_pk_tx_delay) - LIST(MIH_C_PK_DELAY_JITTER, pk_delay_jitter) - LIST(MIH_C_PK_LOSS_RATE, pk_loss_rate) -} MIH_C_QOS_LIST_T; - - - -//------------------------------------------- -/*! \struct MIH_C_LINK_PARAM_T -* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC -* \brief Represents a link parameter type and value pair. -*/ -typedef struct MIH_C_LINK_PARAM { - MIH_C_LINK_PARAM_TYPE_T link_param_type; - MIH_C_CHOICE_T choice; - union { - MIH_C_LINK_PARAM_VAL_T link_param_val; - MIH_C_QOS_PARAM_VAL_T qos_param_val; - } _union; -} MIH_C_LINK_PARAM_T; -#define MIH_C_LINK_PARAM_CHOICE_LINK_PARAM_VAL (MIH_C_CHOICE_T)0 -#define MIH_C_LINK_PARAM_CHOICE_QOS_PARAM_VAL (MIH_C_CHOICE_T)1 -//------------------------------------------- -/*! \struct MIH_C_LINK_PARAM_RPT_T -* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC -* \brief Represents a link parameter report. -* Includes an option of the THRESHOLD that was crossed. -* If no THRESHOLD is included, then this is a periodic report. -*/ -typedef struct MIH_C_LINK_PARAM_RPT { - MIH_C_LINK_PARAM_T link_param; - MIH_C_CHOICE_T choice; - union { - MIH_C_NULL_T null_attr; - MIH_C_THRESHOLD_T threshold; - } _union; -} MIH_C_LINK_PARAM_RPT_T; -#define MIH_C_LINK_PARAM_RPT_CHOICE_NULL 0 -#define MIH_C_LINK_PARAM_RPT_CHOICE_THRESHOLD 1 -//------------------------------------------- -/*! \var MIH_C_LINK_ADDR_LIST_T -* \brief -*/ -TYPEDEF_LIST(MIH_C_LINK_ADDR, MIH_C_LINK_ADDR_LIST_LENGTH) -/*! \struct MIH_C_LINK_POA_LIST_T -* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC -* \brief A list of PoAs for a particular link. The LIST(LINK_ADDR) is a list of PoA -* link addresses and is sorted from most preferred first to least preferred last. -*/ -typedef struct MIH_C_LINK_POA_LIST { - MIH_C_LINK_ID_T link_id; - LIST(MIH_C_LINK_ADDR, link_addr) -} MIH_C_LINK_POA_LIST_T; -//------------------------------------------- -#define MIH_C_LINK_RES_STATUS_AVAILABLE MIH_C_MIH_C_BOOLEAN_TRUE -#define MIH_C_LINK_RES_STATUS_NOT_AVAILABLE MIH_C_BOOLEAN_FALSE -/*! \var MIH_C_LINK_RES_STATUS_T -* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC -* \brief Indicates if a resource is available or not. -* TRUE: Available -* FALSE: Not available. -*/ -TYPEDEF_BOOLEAN(MIH_C_LINK_RES_STATUS) -//------------------------------------------- -#define MIH_C_BIT_LINK_STATES_REQ_OP_MODE MIH_C_BIT_0_VALUE -#define MIH_C_BIT_LINK_STATES_REQ_CHANNEL_ID MIH_C_BIT_1_VALUE -/*! \var MIH_C_LINK_STATES_REQ_T -* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC -* \brief Link states to be requested. -* Bit 0: OP_MODE -* Bit 1: CHANNEL_ID -* Bit 2–15: (Reserved) -*/ -TYPEDEF_BITMAP16(MIH_C_LINK_STATES_REQ) -//------------------------------------------- -#define MIH_C_OPMODE_NORMAL_MODE 0 -#define MIH_C_OPMODE_POWER_SAVING_MODE 1 -#define MIH_C_OPMODE_POWERED_DOWN 2 -/*! \var MIH_C_OPMODE_T -* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC -* \brief The link power mode. -* 0: Normal Mode -* 1: Power Saving Mode -* 2: Powered Down -* 3–255: (Reserved) -*/ -TYPEDEF_UNSIGNED_INT1(MIH_C_OPMODE) -//------------------------------------------- -/*! \struct MIH_C_LINK_STATES_RSP_T -* \brief The operation mode or the channel ID of the link. -*/ -typedef struct MIH_C_LINK_STATES_RSP { - MIH_C_CHOICE_T choice; - union { - MIH_C_OPMODE_T op_mode; - MIH_C_CHANNEL_ID_T channel_id; - } _union; -} MIH_C_LINK_STATES_RSP_T; -//------------------------------------------- -/*! \var MIH_C_LINK_PARAM_TYPE_LIST_T -* \brief -*/ -TYPEDEF_LIST(MIH_C_LINK_PARAM_TYPE, MIH_C_LINK_STATUS_REQ_LIST_LENGTH) -/*! \struct MIH_C_LINK_STATUS_REQ_T -* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC -* \brief Represents the possible information to request from a link. -*/ -typedef struct MIH_C_LINK_STATUS_REQ { - MIH_C_LINK_STATES_REQ_T link_states_req; - LIST(MIH_C_LINK_PARAM_TYPE, link_param_type) - MIH_C_LINK_DESC_RSP_T link_desc_rsp; -} MIH_C_LINK_STATUS_REQ_T; -//------------------------------------------- -/*! \var MIH_C_LINK_STATES_RSP_LIST_T -* \brief -*/ -TYPEDEF_LIST(MIH_C_LINK_STATES_RSP, MIH_C_LINK_STATUS_REQ_LIST_LENGTH) -/*! \var MIH_C_LINK_PARAM_LIST_T -* \brief -*/ -TYPEDEF_LIST(MIH_C_LINK_PARAM, MIH_C_LINK_STATUS_REQ_LIST_LENGTH) -/*! \var MIH_C_LINK_DESC_RSP_LIST_T -* \brief -*/ -TYPEDEF_LIST(MIH_C_LINK_DESC_RSP, MIH_C_LINK_STATUS_REQ_LIST_LENGTH) -/*! \struct MIH_C_LINK_STATUS_RSP_T -* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC -* \brief A set of link status parameter values correspond to the LINK_STATUS_REQ. -*/ -typedef struct MIH_C_LINK_STATUS_RSP { - LIST(MIH_C_LINK_STATES_RSP, link_states_rsp) - LIST(MIH_C_LINK_PARAM, link_param) - LIST(MIH_C_LINK_DESC_RSP, link_desc_rsp) -} MIH_C_LINK_STATUS_RSP_T; -//------------------------------------------- -/*! \struct MIH_C_LINK_TUPLE_ID_T -* \ingroup MIH_C_F4_DATA_TYPES_FOR_LINKS_CODEC -* \brief The identifier of a link that is associated with a PoA. The LINK_ID contains the MN LINK_ADDR. -* The optional LINK_ADDR contains a link address of PoA. -*/ -typedef struct MIH_C_LINK_TUPLE_ID { - MIH_C_LINK_ID_T link_id; - MIH_C_CHOICE_T choice; - union { - MIH_C_NULL_T null_attr; - MIH_C_LINK_ADDR_T link_addr; - } _union; -} MIH_C_LINK_TUPLE_ID_T; -#define MIH_C_LINK_TUPLE_ID_CHOICE_NULL 0 -#define MIH_C_LINK_TUPLE_ID_CHOICE_LINK_ADDR 1 -//------------------------------------------- - - - - -//----------------------------------------------------------------------------- -// STD 802.21-2008 Table F.5 Link actions -//----------------------------------------------------------------------------- -#define MIH_C_LINK_ACTION_LINK_NONE 0 -#define MIH_C_LINK_ACTION_LINK_LINK_DISCONNECT 1 /* Disconnect the link connection directly.*/ -#define MIH_C_LINK_ACTION_LINK_LOW_POWER 2 /* Cause the link to adjust its battery power level to be low power consumption. */ -#define MIH_C_LINK_ACTION_LINK_POWER_DOWN 3 /* Cause the link to power down and turn off the radio.*/ -#define MIH_C_LINK_ACTION_LINK_POWER_UP 4 /* Cause the link to power up and establish L2 connectivity. For UMTS link type, power up lower layers and establish PDP context. */ - - - - -//----------------------------------------------------------------------------- -// STD 802.21-2008 Table F.6 Link action attibutes -//----------------------------------------------------------------------------- -#define MIH_C_LINK_ACTION_ATTRIBUTE_DATA_FWD_REQ 0 /* This indication requires the buffered data at the old serving PoA entity to be forwarded - * to the new target PoA entity in order to avoid data loss. This action can be taken imme- - * diately after the old serving PoS receives MIH_N2N_HO_Commit response message from the new - * target PoS, or the old serving PoS receives MIH_Net_HO_Commit response message from the MN. - * This is not valid on UMTS link type.*/ -#define MIH_C_LINK_ACTION_ATTRIBUTE_LINK_RES_RETAIN 1 /* The link will be disconnected but the resource for the link connection still remains so - * reestablishing the link connection later can be more efficient.*/ -#define MIH_C_LINK_ACTION_ATTRIBUTE_LINK_SCAN 2 /* Cause the link to perform a scan.*/ - - - - -//----------------------------------------------------------------------------- -// STD 802.21-2008 Table F.7 Link down reason code -//----------------------------------------------------------------------------- -#define MIH_C_LINK_DOWN_REASON_EXPLICIT_DISCONNECT 0 /* The link is down because of explicit disconnect procedures initiated either by MN or network.*/ -#define MIH_C_LINK_DOWN_REASON_PACKET_TIMEOUT 1 /* The link is down because no acknowledgements were received for transmitted packets within the - * specified time limit.*/ -#define MIH_C_LINK_DOWN_REASON_NO_RESOURCE 2 /* The link is down because there were no resources to maintain the connection.*/ -#define MIH_C_LINK_DOWN_REASON_NO_BROADCAST 3 /* The link is down because broadcast messages (such as beacons in IEEE 802.11 management frames) - * could not be received by MN. */ -#define MIH_C_LINK_DOWN_REASON_AUTHENTICATION_FAILURE 4 /* Authentication failure.*/ -#define MIH_C_LINK_DOWN_REASON_BILLING_FAILURE 5 /* Billing failure.*/ - - - - -//----------------------------------------------------------------------------- -// STD 802.21-2008 Table F.8 Link going down reason code -//----------------------------------------------------------------------------- -#define MIH_C_LINK_GOING_DOWN_REASON_EXPLICIT_DISCONNECT 0 /* The link is going to be down because explicit disconnect procedures will be - * initiated either by MN or network. For example, when a BS has decided to - * shutdown for administrative reasons or an operator of the terminal has - * decided to execute a handover manually, a Link_Going_Down trigger is sent - * to the MIHF. - */ -#define MIH_C_LINK_GOING_DOWN_REASON_LINK_PARAMETER_DEGRADING 1 /* The link is going to be down because broadcast messages (such as beacons in - * IEEE 802.11 management frames) could not be received by MN. - */ -#define MIH_C_LINK_GOING_DOWN_REASON_LOW_POWER 2 /* The link is going to be down because the power level of the terminal is low - * and the current link will not be maintained in such a low power level. Mobile - * terminals usually have limited battery supply, and when the battery level of - * the terminal is low, a terminal can choose a link that has lower power con- - * sumption for handover according to the received Link_Going_Down triggers - * with this reason code. This will lengthen the usable time for the terminal. - */ -#define MIH_C_LINK_GOING_DOWN_REASON_NO_RESOURCE 3 /* The link is going to be down because there will be no resources to maintain - * the current connection. For example, a BS that has too many users can send - * Link_Going_Down indications to terminals when the links with them can not - * be kept because of insufficient resources. Another example is that users with - * higher priority can preempt the ones with lower priority when no more - * resources can be allocated in 3GPP, and this can also cause a - * Link_Going_Down indication with this reason code. - */ - - -//----------------------------------------------------------------------------- -// STD 802.21-2008 Table F.10 Not implemented -//----------------------------------------------------------------------------- -// STD 802.21-2008 Table F.11 Not implemented -//----------------------------------------------------------------------------- - - -//----------------------------------------------------------------------------- -// STD 802.21-2008 Table F.12 Data types for IP configuration -//----------------------------------------------------------------------------- -#define MIH_C_BIT_IP_CFG_MTHDS_IPV4_STATIC_CONFIGURATION MIH_C_BIT_0_VALUE -#define MIH_C_BIT_IP_CFG_MTHDS_IPV4_DYNAMIC_CONFIGURATION MIH_C_BIT_1_VALUE -#define MIH_C_BIT_IP_CFG_MTHDS_MOBILE_IPV4_WITH_FA_COA MIH_C_BIT_2_VALUE -#define MIH_C_BIT_IP_CFG_MTHDS_MOBILE_IPV4_WITHOUT_FA MIH_C_BIT_3_VALUE -#define MIH_C_BIT_IP_CFG_MTHDS_IPV6_STATELESS_ADDRESS_CONFIGURATION MIH_C_BIT_11_VALUE -#define MIH_C_BIT_IP_CFG_MTHDS_IPV6_STATEFULL_ADDRESS_CONFIGURATION MIH_C_BIT_12_VALUE -#define MIH_C_BIT_IP_CFG_MTHDS_IPV6_MANUAL_ADDRESS_CONFIGURATION MIH_C_BIT_13_VALUE -/*! \var MIH_C_IP_CFG_MTHDS_T -* \brief A set of IP configuration methods. -* Bit 0: IPv4 static configuration -* Bit 1: IPv4 dynamic configuration (DHCPv4) -* Bit 2: Mobile IPv4 with foreign agent (FA) care-of address (CoA) (FA-CoA) -* Bit 3: Mobile IPv4 without FA (Co-located CoA) -* Bits 4–10: reserved for IPv4 address configurations -* Bit 11: IPv6 stateless address configuration -* Bit 12: IPv6 stateful address configuration (DHCPv6) -* Bit 13: IPv6 manual configuration -* Bits 14–31: (Reserved) -*/ -TYPEDEF_BITMAP32(MIH_C_IP_CFG_MTHDS) -//------------------------------------------- -#define MIH_C_BIT_IP_MOB_MGMT_MOBILE_IPV4 MIH_C_BIT_0_VALUE -#define MIH_C_BIT_IP_MOB_MGMT_MOBILE_IPV4_REGIONAL_REGISTRATION MIH_C_BIT_1_VALUE -#define MIH_C_BIT_IP_MOB_MGMT_MOBILE_IPV6 MIH_C_BIT_2_VALUE -#define MIH_C_BIT_IP_MOB_MGMT_HIERARCHICAL_MOBILE_IPV6 MIH_C_BIT_3_VALUE -#define MIH_C_BIT_IP_MOB_MGMT_LOW_LATENCY_HANDOFFS MIH_C_BIT_4_VALUE -#define MIH_C_BIT_IP_MOB_MGMT_MOBILE_IPV6_FAST_HANDOVERS MIH_C_BIT_5_VALUE -#define MIH_C_BIT_IP_MOB_MGMT_IKEV2_MOBILITY_AND_MULTIHOMING_PROTOCOL MIH_C_BIT_6_VALUE -/*! \var MIH_C_IP_MOB_MGMT_T -* \brief Indicates the supported mobility management protocols. -* Bit 0: Mobile IPv4 (IETF RFC 3344) -* Bit 1: Mobile IPv4 Regional Registration (IETF RFC 4857) -* Bit 2: Mobile IPv6 (IETF RFC 3775) -* Bit 3: Hierarchical Mobile IPv6 (IETF RFC 4140) -* Bit 4: Low Latency Handoffs (IETF RFC 4881) -* Bit 5: Mobile IPv6 Fast Handovers (IETF RFC 5268) -* Bit 6: IKEv2 Mobility and Multihoming Protocol (IETF RFC 4555) -* Bit 7–15: (Reserved) -*/ -TYPEDEF_BITMAP16(MIH_C_IP_MOB_MGMT) -//------------------------------------------- -/*! \var MIH_C_IP_PREFIX_LEN_T -* \brief The length of an IP subnet prefix. -* Valid Range: -* 0..32 for IPv4 subnet. -* 0..64, 65..127 for IPv6 subnet. (IETF RFC 4291 [B25]) -*/ -TYPEDEF_UNSIGNED_INT1(MIH_C_IP_PREFIX_LEN) -//------------------------------------------- -/*! \var MIH_C_IP_RENEWAL_FLAG_T -* \brief Indicates whether MN’s IP address needs to be changed or not. -* TRUE: Change required. -* FALSE: Change not required. -*/ -TYPEDEF_BOOLEAN(MIH_C_IP_RENEWAL_FLAG) -//------------------------------------------- -/*! \struct MIH_C_IP_SUBNET_INFO_T -* \brief Represent an IP subnet. The IP_PREFIX_LEN contains the bit -* length of the prefix of the subnet to which the IP_ADDR -* belongs. -*/ -typedef struct MIH_C_IP_SUBNET_INFO { - MIH_C_IP_PREFIX_LEN_T ip_prefix_len; - MIH_C_IP_ADDR_T ip_addr; -} MIH_C_IP_SUBNET_INFO_T; - - - - -//----------------------------------------------------------------------------- -// STD 802.21-2008 Table F.13 Data types for information elements -//----------------------------------------------------------------------------- -/*! \var MIH_C_NET_AUX_ID_T -* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS -* \brief A type to represent an auxiliary access network -* identifier. This is HESSID if network type is -* IEEE 802.11. -*/ -TYPEDEF_OCTET_STRING(MIH_C_NET_AUX_ID, 253) - -// already defined in other section TYPEDEF_OCTET_STRING(MIH_C_NETWORK_ID, 253) -/*! \var MIH_C_BAND_CLASS_T -* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS -* \brief CDMA band class. -*/ -TYPEDEF_UNSIGNED_INT1(MIH_C_BAND_CLASS) -/*! \var MIH_C_BANDWIDTH_T -* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS -* \brief Channel bandwidth in kb/s. -*/ -TYPEDEF_UNSIGNED_INT2(MIH_C_BANDWIDTH) -/*! \var MIH_C_BASE_ID_T -* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS -* \brief Base station identifier. -*/ -TYPEDEF_UNSIGNED_INT2(MIH_C_BASE_ID) -/*! \var MIH_C_DOWN_BP_T -* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS -* \brief A List of FEC Code Type for Downlink burst. -* Refer to 11.4.1 in IEEE 802.16Rev2/D5.0. -*/ -TYPEDEF_BITMAP256(MIH_C_DOWN_BP) -/*! \var MIH_C_TYPE_EXT_T -* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS -* \brief A generic type extension contained indicating a flexible length and format field. The content is to be -* defined and filled by the appropriate SDO or service provider consortium, etc. -* The value is a non-NULL terminated string whose length shall not exceed 253 octets. -*/ -TYPEDEF_OCTET_STRING(MIH_C_TYPE_EXT, 253) -/*! \var MIH_C_UP_BP_T -* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS -* \brief A List of FEC Code Type for Uplink burst. -* Refer to 11.3.1 in IEEE 802.16Rev2/D5.0 -*/ -TYPEDEF_BITMAP256(MIH_C_UP_BP) -//------------------------------------------- -/*! \struct MIH_C_BURST_PROF_T -* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS -* \brief Burst profile. -*/ -typedef struct MIH_C_BURST_PROF { - MIH_C_DOWN_BP_T down_bp; - MIH_C_UP_BP_T up_bp; -} MIH_C_BURST_PROF_T; -//------------------------------------------- -/*! \struct MIH_C_CH_RANGE_T -* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS -* \brief A type that contains two numbers. The first unsigned -* integer is the low range. The second unsigned integer -* is the high range. Both values are in kHz. -* The first unsigned integer value should always be less -* than or equal to the second unsigned integer. -*/ -typedef struct MIH_C_CH_RANGE { - UNSIGNED_INT4(low_range); - UNSIGNED_INT4(high_range); -} MIH_C_CH_RANGE_T; -//------------------------------------------- -#define MIH_C_COST_UNIT_SECOND 0 -#define MIH_C_COST_UNIT_MINUTE 1 -#define MIH_C_COST_UNIT_HOURS 2 -#define MIH_C_COST_UNIT_DAY 3 -#define MIH_C_COST_UNIT_WEEK 4 -#define MIH_C_COST_UNIT_MONTH 5 -#define MIH_C_COST_UNIT_YEAR 6 -#define MIH_C_COST_UNIT_FREE 7 -#define MIH_C_COST_UNIT_FLAT_RATE 8 -/*! \var MIH_C_COST_UNIT_T -* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS -* \brief A type to represent the unit of a cost. -* 0: second -* 1: minute -* 2: hours -* 3: day -* 4: week -* 5: month -* 6: year -* 7: free -* 8: flat rate -* 9–255: (Reserved) -*/ -TYPEDEF_UNSIGNED_INT1(MIH_C_COST_UNIT) -//------------------------------------------- -/*! \struct MIH_C_COST_VALUE_T -* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS -* \brief A type to represent the value of a cost. -* The first 4-octet contains the integer part of the cost. -* The last 2-octet contains the fraction part where it rep- -* resents a 3-digit fraction. -* Therefore, the value range of the fraction part is -* [0,999]. -* For example, for a value of ““0.5”�, the integer part is -* zero and the fraction part is 500. -*/ -typedef struct MIH_C_COST_VALUE { - UNSIGNED_INT4(cost_integer_part); - UNSIGNED_INT2(cost_fraction_part); -} MIH_C_COST_VALUE_T; -//------------------------------------------- -/*! \var MIH_C_COST_CURR_T -* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS -* \brief A type to represent the currency of a cost. -* A three-letter currency code (e.g., “USD�) specified -* by ISO 4217. -*/ -TYPEDEF_OCTET_STRING(MIH_C_COST_CURR, 3) -//------------------------------------------- -/*! \struct MIH_C_COST_T -* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS -* \brief A type to represent a cost. -*/ -typedef struct MIH_C_COST { - MIH_C_COST_UNIT_T cost_unit; - MIH_C_COST_VALUE_T cost_value; - MIH_C_COST_CURR_T cost_curr; -} MIH_C_COST_T; -//------------------------------------------- -/*! \var MIH_C_CNTRY_CODE_T -* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS -* \brief Country code, represented as two letter ISO 3166-1 country code in capital ASCII letters. -*/ -TYPEDEF_OCTET(MIH_C_CNTRY_CODE, 2) -//------------------------------------------- -/*! \var MIH_C_DATA_RATE_T -* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS -* \brief -*/ -TYPEDEF_UNSIGNED_INT4(MIH_C_DATA_RATE) -//------------------------------------------- -/*! \var MIH_C_DU_CTR_FREQ_T -* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS -* \brief Downlink/Uplink center frequency in kHz. -*/ -TYPEDEF_INTEGER8(MIH_C_DU_CTR_FREQ) -//------------------------------------------- -/*! \var MIH_C_EIRP_T -* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS -* \brief BS’s effective isotropic radiated power level. Signed in units of 1 dBm. -*/ -TYPEDEF_INTEGER4(MIH_C_EIRP) -//------------------------------------------- -/*! \struct MIH_C_GAP_T -* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS -* \brief This gap is an integer number of physical slot durations and starts on a -* physical slot boundary. Used on TDD systems only. -* The UNSIGNED_INT(2) is used for the TTG - transmit/receive transition gap. -* The UNSIGNED_INT(1) is used for the RTG - receive/transmit transition gap. -*/ -typedef struct MIH_C_GAP - { - UNSIGNED_INT2(ttg); - UNSIGNED_INT1(rtg); -} MIH_C_GAP_T; -//------------------------------------------- -/*! \var MIH_C_HO_CODE_T -* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS -* \brief HANDOVER_RANGING_CODE. -* Refer to 11.3.1 in IEEE 802.16Rev2/D5.0. -*/ -TYPEDEF_INTEGER1(MIH_C_HO_CODE) -//------------------------------------------- -/*! \var MIH_C_INIT_CODE_T -* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS -* \brief INITIAL_RANGING_CODE. -* Refer to 11.3.1 in IEEE 802.16Rev2/D5.0. -*/ -TYPEDEF_INTEGER1(MIH_C_INIT_CODE) -//------------------------------------------- -/*! \struct MIH_C_CDMA_CODES_T -* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS -* \brief A set of CDMA ranging codes. -*/ -typedef struct MIH_C_CDMA_CODES { - MIH_C_INIT_CODE_T init_code; - MIH_C_HO_CODE_T ho_code; -} MIH_C_CDMA_CODES_T; -//------------------------------------------- -/*! \struct MIH_C_DCD_UCD_T -* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS -* \brief A type to represent the downlink channel descriptor and the uplink channel descriptor. -*/ -typedef struct MIH_C_DCD_UCD { - MIH_C_BASE_ID_T base_id; - MIH_C_BANDWIDTH_T bandwidth; - MIH_C_DU_CTR_FREQ_T du_ctr_freq; - MIH_C_EIRP_T eirp; - MIH_C_GAP_T gap; - MIH_C_BURST_PROF_T burst_prof; - MIH_C_CDMA_CODES_T cdma_codes; -} MIH_C_DCD_UCD_T; -//------------------------------------------- -/*! \var MIH_C_FQDN_T -* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS -* \brief The fully qualified domain name of a host as described in IETF RFC 2181. -*/ -TYPEDEF_OCTET_STRING(MIH_C_FQDN, 253) -//------------------------------------------- -// TBD FREQ_BANDS -/*! \var MIH_C_FREQ_ID_T -* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS -* \brief Identifier of the carrier frequency. Valid Range: 0..65535 -*/ -TYPEDEF_INTEGER2(MIH_C_FREQ_ID) -//------------------------------------------- -/*! \var MIH_C_FQ_CODE_NUM_T -* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS -* \brief UMTS scrambling code, cdma2000 Walsh code. -* Valid Range: 0..65535 -*/ -TYPEDEF_INTEGER2(MIH_C_FQ_CODE_NUM) -//------------------------------------------- -/*! \var MIH_C_IP4_ADDR_T -* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS -* \brief An IPv4 address as described in IETF RFC 791 -*/ -TYPEDEF_OCTET(MIH_C_IP4_ADDR, 4) -/*! \var MIH_C_IP6_ADDR_T -* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS -* \brief An IPv6 address as described in IETF RFC 4291 -*/ -TYPEDEF_OCTET(MIH_C_IP6_ADDR, 16) - -/*! \var MIH_C_DHCP_SERV_T -* \ingroup MIH_C_F22_DATA_TYPE_FOR_HANDOVER_OPERATION -* \brief IP address of candidate DHCP Server. It is only -* included when dynamic address configuration is supported. -*/ -typedef MIH_C_IP_ADDR_T MIH_C_DHCP_SERV_T; -/*! \var MIH_C_FN_AGNT_T -* \ingroup MIH_C_F22_DATA_TYPE_FOR_HANDOVER_OPERATION -* \brief IP address of candidate Foreign Agent. It is only included when Mobile IPv4 is supported. -*/ -typedef MIH_C_IP_ADDR_T MIH_C_FN_AGNT_T; -/*! \var MIH_C_ACC_RTR_T -* \ingroup MIH_C_F22_DATA_TYPE_FOR_HANDOVER_OPERATION -* \brief IP address of candidate Access Router. It is only -* included when IPv6 Stateless configuration is supported. -*/ -typedef MIH_C_IP_ADDR_T MIH_C_ACC_RTR_T; -//------------------------------------------- -/*! \struct MIH_C_IP_CONFIG_T -* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS -* \brief IP Configuration Methods supported by the access network. -*/ -typedef struct MIH_C_IP_CONFIG - { - MIH_C_IP_CFG_MTHDS_T ip_cfg_mthds; - MIH_C_CHOICE_T choice_dhcp_serv; - union { - MIH_C_NULL_T null_attr; - MIH_C_DHCP_SERV_T dhcp_serv; - } _union_dhcp_serv; - MIH_C_CHOICE_T choice_fn_agnt; - union { - MIH_C_NULL_T null_attr; - MIH_C_FN_AGNT_T fn_agnt; - } _union_fn_agnt; - MIH_C_CHOICE_T choice_acc_rtr; - union { - MIH_C_NULL_T null_attr; - MIH_C_ACC_RTR_T acc_rtr; - } _union_acc_rtr; -} MIH_C_IP_CONFIG_T; -//------------------------------------------- -#define MIH_C_BIT_NET_CAPS_SECURITY MIH_C_BIT_0_VALUE -#define MIH_C_BIT_NET_CAPS_QOS_CLASS0 MIH_C_BIT_1_VALUE -#define MIH_C_BIT_NET_CAPS_QOS_CLASS1 MIH_C_BIT_2_VALUE -#define MIH_C_BIT_NET_CAPS_QOS_CLASS2 MIH_C_BIT_3_VALUE -#define MIH_C_BIT_NET_CAPS_QOS_CLASS3 MIH_C_BIT_4_VALUE -#define MIH_C_BIT_NET_CAPS_QOS_CLASS4 MIH_C_BIT_5_VALUE -#define MIH_C_BIT_NET_CAPS_QOS_CLASS5 MIH_C_BIT_6_VALUE -#define MIH_C_BIT_NET_CAPS_INTERNET_ACCESS MIH_C_BIT_7_VALUE -#define MIH_C_BIT_NET_CAPS_EMERGENCY_SERVICES MIH_C_BIT_8_VALUE -#define MIH_C_BIT_NET_CAPS_MIH_CAPABILITY MIH_C_BIT_9_VALUE -/*! \var MIH_C_NET_CAPS_T -* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS -* \brief These bits provide high level capabilities supported on a network. -* Bitmap Values: -* Bit 0: Security – Indicates that some level of security is supported when set. -* Bit 1: QoS Class 0 – Indicates that QoS for class 0 is supported when set. -* Bit 2: QoS Class 1 – Indicates that QoS for class 1 is supported when set. -* Bit 3: QoS Class 2 – Indicates that QoS for class 2 is supported when set; Otherwise, no QoS for class 2 support is available. -* Bit 4: QoS Class 3 – Indicates that QoS for class 3 is supported when set; Otherwise, no QoS for class 3 support is available. -* Bit 5: QoS Class 4 – Indicates that QoS for class 4 is supported when set; Otherwise, no QoS for class 4 support is available. -* Bit 6: QoS Class 5 – Indicates that QoS for class 5 is supported when set; Otherwise, no QoS for class 5 support is available. -* Bit 7: Internet Access – Indicates that Internet access is supported when set; Otherwise, no Internet access support is available. -* Bit 8: Emergency Services – Indicates that some level of emergency services is supported when set; Otherwise, no emergency service support is available. -* Bit 9: MIH Capability – Indicates that MIH is supported when set; Otherwise, no MIH support is available. -* Bit 10–31: (Reserved) -*/ -TYPEDEF_BITMAP32(MIH_C_NET_CAPS) -//------------------------------------------- -/*! \var MIH_C_SUBTYPE_T -* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS -* \brief A network subtype. See Table F.14. -*/ -TYPEDEF_BITMAP64(MIH_C_SUBTYPE) -//------------------------------------------- - -//------------------------------------------- -/*! \struct MIH_C_NETWORK_TYPE_T -* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS -* \brief A type to represent a network type and its subtype. -* See Table F.14 for details. -*/ -typedef struct MIH_C_NETWORK_TYPE - { - MIH_C_CHOICE_T choice_link_type; - union { - MIH_C_NULL_T null_attr; - MIH_C_LINK_TYPE_T link_type; - } _union_link_type; - MIH_C_CHOICE_T choice_subtype; - union { - MIH_C_NULL_T null_attr; - MIH_C_SUBTYPE_T subtype; - } _union_subtype; - MIH_C_CHOICE_T choice_type_ext; - union { - MIH_C_NULL_T null_attr; - MIH_C_TYPE_EXT_T type_ext; - } _union_type_ext; -} MIH_C_NETWORK_TYPE_T; -//------------------------------------------- -/*! \var MIH_C_OP_NAME_T -* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS -* \brief A type to represent an operator name. The value -* uniquely identifies the operator name within the scope -* of the OP_NAMESPACE. -* The value is a non NULL terminated string whose -* length shall not exceed 253 octets. -*/ -TYPEDEF_OCTET_STRING(MIH_C_OP_NAME, 253) -//------------------------------------------- -/*! \var MIH_C_OP_NAMESPACE_T -* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS -* \brief A type to represent a type of operator name. -* 0: GSM/UMTS -* 1: CDMA -* 2: REALM (as defined in [B28]). -* 3: ITU-T/TSB -* 4: General -* 5–255: (Reserved) -*/ -TYPEDEF_UNSIGNED_INT1(MIH_C_OP_NAMESPACE) -//------------------------------------------- -/*! \struct MIH_C_OPERATOR_ID_T -* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS -* \brief A type to represent an operator identifier. -*/ -typedef struct MIH_C_OPERATOR_ID { - MIH_C_OP_NAME_T opname; - MIH_C_OP_NAMESPACE_T opnamespace; -} MIH_C_OPERATOR_ID_T; -//------------------------------------------- -/*! \struct MIH_C_SIB_T -* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS -* \brief A type to represent UMTS system information block (SIB). -*/ -typedef struct MIH_C_SIB { - MIH_C_CELL_ID_T cell_id; - MIH_C_FQ_CODE_NUM_T fq_code_num; -} MIH_C_SIB_T; -//------------------------------------------- -/*! \var MIH_C_PILOT_PN_T -* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS -* \brief Pilot PN sequence offset index. -*/ -TYPEDEF_INTEGER2(MIH_C_PILOT_PN) -//------------------------------------------- -/*! \struct MIH_C_SYS_PARAMS_T -* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS -* \brief CDMA2000 system parameters. -*/ -typedef struct MIH_C_SYS_PARAMS { - MIH_C_BASE_ID_T base_id; - MIH_C_PILOT_PN_T pilot_pn; - MIH_C_FREQ_ID_T freq_id; - MIH_C_BAND_CLASS_T band_class; -} MIH_C_SYS_PARAMS_T; -//------------------------------------------- -/*! \struct MIH_C_MIH_C_PARAMETERS_T -* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS -* \brief A data type to represent system information depending on the network type. -* DCD_UCD: IEEE 802.16 -* SIB: UMTS -* SYS_PARAMS: cdma2000 -*/ -typedef struct MIH_C_PARAMETERS { - MIH_C_CHOICE_T choice; - union { - MIH_C_DCD_UCD_T dcd_ucd; - MIH_C_SIB_T sib; - MIH_C_SYS_PARAMS_T sys_params; - } _union; -} MIH_C_MIH_C_PARAMETERS_T; -//------------------------------------------- -/*! \struct MIH_C_PROXY_ADDR_T -* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS -* \brief L3 address of a proxy server. -*/ -typedef struct MIH_C_PROXY_ADDR { - MIH_C_CHOICE_T choice; - union { - MIH_C_IP4_ADDR_T ip4_addr; - MIH_C_IP6_ADDR_T ip6_addr; - MIH_C_FQDN_T fqdn; - } _union; -} MIH_C_PROXY_ADDR_T; -//------------------------------------------- -// TBD REGU_DOMAIN -// TBD ROAMING_PTNS -/*! \var MIH_C_SP_ID_T -* \ingroup MIH_C_F13_DATA_TYPES_FOR_INFORMATION_ELEMENTS -* \brief A service provider identifier. -* A non-NULL terminated string whose length shall not exceed 253 octets. -*/ -TYPEDEF_OCTET_STRING(MIH_C_SP_ID, 253) -// TBD SUPPORTED_LCP -// TBD SYSTEM_INFO - - - - - -//----------------------------------------------------------------------------- -// STD 802.21-2008 Table F.19 Data type for MIHF identification -//----------------------------------------------------------------------------- -/** \defgroup MIH_C_F19_DATA_TYPE_FOR_MIHF_IDENTIFICATION Data types for MIHF identification - * \ingroup MIH_C_INTERFACE - * - * @{ - */ -/*! \var MIH_C_MIHF_ID_T -* \brief The MIHF Identifier: MIHF_ID is a network access identifier (NAI). -* NAI shall be unique as per IETF RFC 4282. If L3 communication is -* used and MIHF entity resides in the network node, then MIHF_ID is -* the fully qualified domain name or NAI-encoded IP address -* (IP4_ADDR or IP6_ADDR) of the entity that hosts the MIH Services. -* If L2 communication is used then MIHF_ID is the NAI-encoded link- -* layer address (LINK_ADDR) of the entity that hosts the MIH ser- -* vices. In an NAI-encoded IP address or link-layer address, each octet -* of binary-encoded IP4_ADDR, IP6_ADDR and LINK_ADDR data is -* encoded in the username part of the NAI as “\� followed by the octet -* value. A multicast MIHF identifier is defined as an MIHF ID of zero -* length. When an MIH protocol message with multicast MIHF ID is -* transmitted over the L2 data plane, a group MAC address (01-80-C2- -* 00-00-0E) shall be used (see IEEE P802.1aj/D2.2). The maximum -* length is 253 octets. -*/ -TYPEDEF_OCTET_STRING(MIH_C_MIHF_ID, 253) -/** @}*/ - - -//----------------------------------------------------------------------------- -// STD 802.21-2008 Table F.20—Data type for MIH capabilities -//----------------------------------------------------------------------------- -/** \defgroup MIH_C_F19_DATA_TYPE_FOR_MIHF_CAPABILITIES Data type for MIH capabilities - * \ingroup MIH_C_INTERFACE - * - * @{ - */ -/*! \struct MIH_C_LINK_DET_CFG_T -* \brief A data type for configuring link detected event trigger. -*/ -typedef struct MIH_C_LINK_DET_CFG { - MIH_C_CHOICE_T choice_network_id; - union { - MIH_C_NULL_T null_attr; - MIH_C_NETWORK_ID_T network_id; - } _union_network_id; - MIH_C_CHOICE_T choice_sig_strength; - union { - MIH_C_NULL_T null_attr; - MIH_C_SIG_STRENGTH_T sig_strength; - } _union_sig_strength; - MIH_C_CHOICE_T choice_link_data_rate; - union { - MIH_C_NULL_T null_attr; - MIH_C_LINK_DATA_RATE_T link_data_rate; - } _union_link_data_rate; -} MIH_C_LINK_DET_CFG_T; -//------------------------------------------- -/*! \struct MIH_C_EVT_CFG_INFO_T -* \brief Represents additional configuration information -* for event subscription. The list of -* LINK_DET_CFG contains additional filtering -* when subscribing to link detected events. The list -* of LINK_CFG_PARAM contains additional fil- -* tering when subscribing to link parameter report -* events. -*/ -typedef struct MIH_C_EVT_CFG_INFO { - MIH_C_CHOICE_T choice; - union { - MIH_C_LINK_DET_CFG_T link_det_cfg; - MIH_C_LINK_CFG_PARAM_T link_cfg_param; - } _union; -} MIH_C_EVT_CFG_INFO_T; -//------------------------------------------- -/*! \struct MIH_C_LINK_DET_INFO_T -* \brief Information of a detected link. -* LINK_TUPLE_ID is the link detected. -* NETWORK_ID is the access network identifier. -* NET_AUX_ID is an auxiliary access network identifier if applicable. -* SIG_STRENGTH is the signal strength of the detected link. -* UNSIGNED_INT(2) is the SINR value of the link. -* LINK_DATA_RATE is the maximum transmission rate on the detected link. -* LINK_MIHCAP_FLAG indicates which MIH capabilities are supported on the detected link. -* NET_CAPS is the network capability supported by the network link. -*/ -typedef struct MIH_C_LINK_DET_INFO { - MIH_C_LINK_TUPLE_ID_T link_tuple_id; - MIH_C_NETWORK_ID_T network_id; - MIH_C_NET_AUX_ID_T net_aux_id; - MIH_C_SIG_STRENGTH_T sig_strength; - UNSIGNED_INT2(sinr) - MIH_C_LINK_DATA_RATE_T link_data_rate; - MIH_C_LINK_MIHCAP_FLAG_T link_mihcap_flag; - MIH_C_NET_CAPS_T net_caps; -} MIH_C_LINK_DET_INFO_T; -//------------------------------------------- -/*! \struct MIH_C_MBB_HO_SUPP_T -* \brief Indicates if make before break is supported FROM the first network type TO the second network type. -* The BOOLEAN value assignment: -* True: Make before break is supported. -* False: Make before break is not supported. -*/ -typedef struct MIH_C_MBB_HO_SUPP { - MIH_C_NETWORK_TYPE_T from; - MIH_C_NETWORK_TYPE_T to; - BOOLEAN(supported) -} MIH_C_MBB_HO_SUPP_T; -//------------------------------------------- -#define MIH_C_BIT_MIH_CMD_MIH_LINK_GET_PARAMETERS MIH_C_BIT_0_VALUE -#define MIH_C_BIT_MIH_CMD_MIH_LINK_CONFIGURE_THRESHOLDS MIH_C_BIT_1_VALUE -#define MIH_C_BIT_MIH_CMD_MIH_LINK_ACTIONS MIH_C_BIT_2_VALUE -#define MIH_C_BIT_MIH_CMD_MIH_NET_HO_CANDIDATE_QUERY MIH_C_BIT_3_VALUE -#define MIH_C_BIT_MIH_CMD_MIH_NET_HO_COMMIT MIH_C_BIT_3_VALUE -#define MIH_C_BIT_MIH_CMD_MIH_N2N_HO_QUERY_RESOURCES MIH_C_BIT_3_VALUE -#define MIH_C_BIT_MIH_CMD_MIH_N2N_HO_COMMIT MIH_C_BIT_3_VALUE -#define MIH_C_BIT_MIH_CMD_MIH_N2N_HO_COMPLETE MIH_C_BIT_3_VALUE -#define MIH_C_BIT_MIH_CMD_MIH_MN_HO_CANDIDATE_QUERY MIH_C_BIT_4_VALUE -#define MIH_C_BIT_MIH_CMD_MIH_MN_HO_COMMIT MIH_C_BIT_4_VALUE -#define MIH_C_BIT_MIH_CMD_MIH_MN_HO_COMPLETE MIH_C_BIT_4_VALUE - -/*! \var MIH_C_MIH_CMD_LIST_T -* \brief A list of MIH commands. -* Bitmap Values: -* Bit 0: MIH_Link_Get_Parameters -* Bit 1: MIH_Link_Configure_Thresholds -* Bit 2: MIH_Link_Actions -* Bit 3: MIH_Net_HO_Candidate_Query -* MIH_Net_HO_Commit -* MIH_N2N_HO_Query_Resources -* MIH_N2N_HO_Commit -* MIH_N2N_HO_Complete -* Bit 4: MIH_MN_HO_Candidate_Query -* MIH_MN_HO_Commit -* MIH_MN_HO_Complete -* Bit 5–31: (Reserved) - -*/ -TYPEDEF_BITMAP32(MIH_C_MIH_CMD_LIST) - -//------------------------------------------- -#define MIH_C_BIT_MIH_LINK_DETECTED MIH_C_BIT_0_VALUE -#define MIH_C_BIT_MIH_LINK_UP MIH_C_BIT_1_VALUE -#define MIH_C_BIT_MIH_LINK_DOWN MIH_C_BIT_2_VALUE -#define MIH_C_BIT_MIH_LINK_PARAMETERS_REPORT MIH_C_BIT_3_VALUE -#define MIH_C_BIT_MIH_LINK_GOING_DOWN MIH_C_BIT_4_VALUE -#define MIH_C_BIT_MIH_LINK_HANDOVER_IMMINENT MIH_C_BIT_5_VALUE -#define MIH_C_BIT_MIH_LINK_HANDOVER_COMPLETE MIH_C_BIT_6_VALUE -#define MIH_C_BIT_MIH_LINK_PDU_TRANSMIT_STATUS MIH_C_BIT_7_VALUE -/*! \var MIH_C_MIH_EVT_LIST_T -* \brief A list of MIH events. -* Bitmap Values: -* Bit 0: MIH_Link_Detected -* Bit 1: MIH_Link_Up -* Bit 2: MIH_Link_Down -* Bit 3: MIH_Link_Parameters_Report -* Bit 4: MIH_Link_Going_Down -* Bit 5: MIH_Link_Handover_Imminent -* Bit 6: MIH_Link_Handover_Complete -* Bit 7: MIH_Link_PDU_Transmit_Status -* Bit 8–31: (Reserved) -*/ -TYPEDEF_BITMAP32(MIH_C_MIH_EVT_LIST) -//------------------------------------------- -#define MIH_C_BIT_BINARY_DATA MIH_C_BIT_0_VALUE -#define MIH_C_BIT_RDF_DATA MIH_C_BIT_1_VALUE -#define MIH_C_BIT_RDF_SCHEMA_URL MIH_C_BIT_2_VALUE -#define MIH_C_BIT_RDF_SCHEMA MIH_C_BIT_3_VALUE -#define MIH_C_BIT_IE_NETWORK_TYPE MIH_C_BIT_4_VALUE -#define MIH_C_BIT_IE_OPERATOR_ID MIH_C_BIT_5_VALUE -#define MIH_C_BIT_IE_SERVICE_PROVIDER_ID MIH_C_BIT_6_VALUE -#define MIH_C_BIT_IE_COUNTRY_CODE MIH_C_BIT_7_VALUE -#define MIH_C_BIT_IE_NETWORK_ID MIH_C_BIT_8_VALUE -#define MIH_C_BIT_IE_NETWORK_AUX_ID MIH_C_BIT_9_VALUE -#define MIH_C_BIT_IE_ROAMING_PARTNERS MIH_C_BIT_10_VALUE -#define MIH_C_BIT_IE_COST MIH_C_BIT_11_VALUE -#define MIH_C_BIT_IE_NETWORK_QOS MIH_C_BIT_12_VALUE -#define MIH_C_BIT_IE_NETWORK_DATA_RATE MIH_C_BIT_13_VALUE -#define MIH_C_BIT_IE_NET_REGULT_DOMAIN MIH_C_BIT_14_VALUE -#define MIH_C_BIT_IE_NET_FREQUENCY_BANDS MIH_C_BIT_15_VALUE -#define MIH_C_BIT_IE_NET_IP_CFG_METHODS MIH_C_BIT_16_VALUE -#define MIH_C_BIT_IE_NET_CAPABILITIES MIH_C_BIT_17_VALUE -#define MIH_C_BIT_IE_NET_SUPPORTED_LCP MIH_C_BIT_18_VALUE -#define MIH_C_BIT_IE_NET_MOB_MGMT_PROT MIH_C_BIT_19_VALUE -#define MIH_C_BIT_IE_NET_EMSERV_PROXY MIH_C_BIT_20_VALUE -#define MIH_C_BIT_IE_NET_IMS_PROXY_CSCF MIH_C_BIT_21_VALUE -#define MIH_C_BIT_IE_NET_MOBILE_NETWORK MIH_C_BIT_22_VALUE -#define MIH_C_BIT_IE_POA_LINK_ADDR MIH_C_BIT_23_VALUE -#define MIH_C_BIT_IE_POA_LOCATION MIH_C_BIT_24_VALUE -#define MIH_C_BIT_IE_POA_CHANNEL_RANGE MIH_C_BIT_25_VALUE -#define MIH_C_BIT_IE_POA_SYSTEM_INFO MIH_C_BIT_26_VALUE -#define MIH_C_BIT_IE_POA_SUBNET_INFO MIH_C_BIT_27_VALUE -#define MIH_C_BIT_IE_POA_IP_ADDR MIH_C_BIT_28_VALUE -/*! \var MIH_C_MIH_IQ_TYPE_LST_T -* \brief A list of IS query types. -* Bitmap Values: -* Bit 0: Binary data -* Bit 1: RDF data -* Bit 2: RDF schema URL -* Bit 3: RDF schema -* Bit 4: IE_NETWORK_TYPE -* Bit 5: IE_OPERATOR_ID -* Bit 6: IE_SERVICE_PROVIDER_ID -* Bit 7: IE_COUNTRY_CODE -* Bit 8: IE_NETWORK_ID -* Bit 9: IE_NETWORK_AUX_ID -* Bit 10: IE_ROAMING_PARTNERS -* Bit 11: IE_COST -* Bit 12: IE_NETWORK_QOS -* Bit 13: IE_NETWORK_DATA_RATE -* Bit 14: IE_NET_REGULT_DOMAIN -* Bit 15: IE_NET_FREQUENCY_BANDS -* Bit 16: IE_NET_IP_CFG_METHODS -* Bit 17: IE_NET_CAPABILITIES -* Bit 18: IE_NET_SUPPORTED_LCP -* Bit 19: IE_NET_MOB_MGMT_PROT -* Bit 20: IE_NET_EMSERV_PROXY -* Bit 21: IE_NET_IMS_PROXY_CSCF -* Bit 22: IE_NET_MOBILE_NETWORK -* Bit 23: IE_POA_LINK_ADDR -* Bit 24: IE_POA_LOCATION -* Bit 25: IE_POA_CHANNEL_RANGE -* Bit 26: IE_POA_SYSTEM_INFO -* Bit 27: IE_POA_SUBNET_INFO -* Bit 28: IE_POA_IP_ADDR -* Bit 29–63: (Reserved) -*/ -TYPEDEF_BITMAP64(MIH_C_MIH_IQ_TYPE_LST) -//------------------------------------------- -#define MIH_C_BIT_UDP MIH_C_BIT_0_VALUE -#define MIH_C_BIT_TCP MIH_C_BIT_1_VALUE -/*! \var MIH_C_MIH_TRANS_LST_T -* \brief A list of supported transports. -* Bitmap Values: -* Bit 0: UDP -* Bit 1: TCP -* Bit 2–15: (Reserved) -*/ -TYPEDEF_BITMAP16(MIH_C_MIH_TRANS_LST) -//------------------------------------------- -/*! \struct MIH_C_NET_TYPE_ADDR_T -* \brief Represent a link address of a specific network type. -*/ -typedef struct MIH_C_NET_TYPE_ADDR { - MIH_C_NETWORK_TYPE_T network_type; - MIH_C_LINK_ADDR_T link_addr; -} MIH_C_NET_TYPE_ADDR_T; -//------------------------------------------- -/** @}*/ - - -//----------------------------------------------------------------------------- -// STD 802.21-2008 Table F.22—Data types for handover operation -//----------------------------------------------------------------------------- -/** \defgroup MIH_C_F22_DATA_TYPE_FOR_HANDOVER_OPERATION Data type for handover operation - * \ingroup MIH_C_INTERFACE - * - * @{ - */ -//TBD ASGN_RES_SET -/*! \var MIH_C_HO_CAUSE_T -* \brief Represents the reason for performing a handover. -* Same enumeration list as link down reason code. -* See Table F.7 -*/ -TYPEDEF_UNSIGNED_INT1(MIH_C_HO_CAUSE) -//------------------------------------------- -/*! \var MIH_C_HO_RESULT_T -* \brief Handover result. -* 0: Success -* 1: Failure -* 2: Rejected -*/ -TYPEDEF_ENUMERATED(MIH_C_HO_RESULT) -#define MIH_C_HO_RESULT_SUCCESS (MIH_C_HO_RESULT_T)0 -#define MIH_C_HO_RESULT_FAILURE (MIH_C_HO_RESULT_T)1 -#define MIH_C_HO_RESULT_REJECTED (MIH_C_HO_RESULT_T)2 -//------------------------------------------- -/*! \var MIH_C_HO_STATUS_T -* \brief Represents the permission for handover. -* 0: HandoverPermitted -* 1: HandoverDeclined -*/ -TYPEDEF_ENUMERATED(MIH_C_HO_STATUS) -#define MIH_C_HO_STATUS_HANDOVER_PERMITTED (MIH_C_HO_STATUS_T)0 -#define MIH_C_HO_STATUS_HANDOVER_DECLINED (MIH_C_HO_STATUS_T)1 -//------------------------------------------- -/*! \var MIH_C_PREDEF_CFG_ID_T -* \brief Pre-defined configuration identifier. -* 0..255 -*/ -TYPEDEF_INTEGER1(MIH_C_PREDEF_CFG_ID) -//------------------------------------------- -//TBD RQ_RESULT -//TBD REQ_RES_SET -//TBD TGT_NET_INFO -//TBD TSP_CARRIER -//TBD TSP_CONTAINER -/** @}*/ - - -//----------------------------------------------------------------------------- -// STD 802.21-2008 Table F.23—Data type for MIH_NET_SAP primitives -//----------------------------------------------------------------------------- -/** \defgroup MIH_C_F23_DATA_TYPE_FOR_MIH_NET_SAP_PRIMITIVES Data type for MIH NET SAP primitives. - * \ingroup MIH_C_INTERFACE - * - * @{ - */ -/*! \var MIH_C_TRANSPORT_TYPE_T -* \brief The transport type supported: -* 0: L2 -* 1: L3 or higher layer protocols -*/ -TYPEDEF_ENUMERATED(MIH_C_TRANSPORT_TYPE) -#define MIH_C_TRANSPORT_TYPE_L2 (MIH_C_TRANSPORT_TYPE_T)0 -#define MIH_C_TRANSPORT_TYPE_L3_OR_HIGHER_PROTOCOLS (MIH_C_TRANSPORT_TYPE_T)1 - -/** @}*/ - - - - -/** - * \ingroup MIH_C_INTERFACE - * - * @{ - */ - -#define MIH_C_TLV_SOURCE_MIHF_ID (MIH_C_INTEGER1_T)1 -#define MIH_C_TLV_DESTINATION_MIHF_ID (MIH_C_INTEGER1_T)2 -#define MIH_C_TLV_STATUS (MIH_C_INTEGER1_T)3 -#define MIH_C_TLV_LINK_TYPE (MIH_C_INTEGER1_T)4 -#define MIH_C_TLV_MIH_EVENT_LIST (MIH_C_INTEGER1_T)5 -#define MIH_C_TLV_MIH_COMMAND_LIST (MIH_C_INTEGER1_T)6 -#define MIH_C_TLV_MIIS_QUERY_TYPE_LIST (MIH_C_INTEGER1_T)7 -#define MIH_C_TLV_TRANSPORT_OPTION_LIST (MIH_C_INTEGER1_T)8 -#define MIH_C_TLV_LINK_ADDRESS_LIST (MIH_C_INTEGER1_T)9 -#define MIH_C_TLV_MBB_HANDOVER_SUPPORT (MIH_C_INTEGER1_T)10 -#define MIH_C_TLV_REGISTER_REQUEST_CODE (MIH_C_INTEGER1_T)11 -#define MIH_C_TLV_VALID_TIME_INTERVAL (MIH_C_INTEGER1_T)12 -#define MIH_C_TLV_LINK_IDENTIFIER (MIH_C_INTEGER1_T)13 -#define MIH_C_TLV_NEW_LINK_IDENTIFIER (MIH_C_INTEGER1_T)14 -#define MIH_C_TLV_OLD_ACCESS_ROUTER (MIH_C_INTEGER1_T)15 -#define MIH_C_TLV_NEW_ACCESS_ROUTER (MIH_C_INTEGER1_T)16 -#define MIH_C_TLV_IP_RENEWAL_FLAG (MIH_C_INTEGER1_T)17 -#define MIH_C_TLV_MOBILITY_MANAGEMENT_SUPPORT (MIH_C_INTEGER1_T)18 -#define MIH_C_TLV_IP_ADDRESS_CONFIGURATION_METHODS (MIH_C_INTEGER1_T)19 -#define MIH_C_TLV_LINK_DOWN_REASON_CODE (MIH_C_INTEGER1_T)20 -#define MIH_C_TLV_LINK_TIME_INTERVAL (MIH_C_INTEGER1_T)21 -#define MIH_C_TLV_LINK_GOING_DOWN_REASON_CODE (MIH_C_INTEGER1_T)22 -#define MIH_C_TLV_LINK_PARAMETER_REPORT_LIST (MIH_C_INTEGER1_T)23 -#define MIH_C_TLV_DEVICE_STATES_REQUEST (MIH_C_INTEGER1_T)24 -#define MIH_C_TLV_LINK_IDENTIFIER_LIST (MIH_C_INTEGER1_T)25 -#define MIH_C_TLV_DEVICE_STATES_RESPONSE_LIST (MIH_C_INTEGER1_T)26 -#define MIH_C_TLV_GET_STATUS_REQUEST_SET (MIH_C_INTEGER1_T)27 -#define MIH_C_TLV_GET_STATUS_RESPONSE_LIST (MIH_C_INTEGER1_T)28 -#define MIH_C_TLV_CONFIGURE_REQUEST_LIST (MIH_C_INTEGER1_T)29 -#define MIH_C_TLV_CONFIGURE_RESPONSE_LIST (MIH_C_INTEGER1_T)30 -#define MIH_C_TLV_LIST_OF_LINK_POA_LIST (MIH_C_INTEGER1_T)31 -#define MIH_C_TLV_PREFERRED_LINK_LIST (MIH_C_INTEGER1_T)32 -#define MIH_C_TLV_HANDOVER_RESOURCE_QUERY_LIST (MIH_C_INTEGER1_T)33 -#define MIH_C_TLV_HANDOVER_STATUS (MIH_C_INTEGER1_T)34 -#define MIH_C_TLV_ACCESS_ROUTER_ADDRESS (MIH_C_INTEGER1_T)35 -#define MIH_C_TLV_DHCP_SERVER_ADDRESS (MIH_C_INTEGER1_T)36 -#define MIH_C_TLV_FA_ADDRESS (MIH_C_INTEGER1_T)37 -#define MIH_C_TLV_LINK_ACTIONS_LIST (MIH_C_INTEGER1_T)38 -#define MIH_C_TLV_LINK_ACTIONS_RESULT_LIST (MIH_C_INTEGER1_T)39 -#define MIH_C_TLV_HANDOVER_RESULT (MIH_C_INTEGER1_T)40 -#define MIH_C_TLV_RESOURCE_STATUS (MIH_C_INTEGER1_T)41 -#define MIH_C_TLV_RESOURCE_RETENTION_STATUS (MIH_C_INTEGER1_T)42 -#define MIH_C_TLV_INFO_QUERY_BINARY_DATA_LIST (MIH_C_INTEGER1_T)43 -#define MIH_C_TLV_INFO_QUERY_RDF_DATA_LIST (MIH_C_INTEGER1_T)44 -#define MIH_C_TLV_INFO_QUERY_RDF_SCHEMA_URL (MIH_C_INTEGER1_T)45 -#define MIH_C_TLV_INFO_QUERY_RDF_SCHEMA_LIST (MIH_C_INTEGER1_T)46 -#define MIH_C_TLV_MAX_RESPONSE_SIZE (MIH_C_INTEGER1_T)47 -#define MIH_C_TLV_INFO_RESPONSE_BINARY_DATA_LIST (MIH_C_INTEGER1_T)48 -#define MIH_C_TLV_INFO_RESPONSE_RDF_DATA_LIST (MIH_C_INTEGER1_T)49 -#define MIH_C_TLV_INFO_RESPONSE_RDF_SCHEMA_URL_LIST (MIH_C_INTEGER1_T)50 -#define MIH_C_TLV_INFO_RESPONSE_RDF_SCHEMA_LIST (MIH_C_INTEGER1_T)51 -#define MIH_C_TLV_MOBILE_NODE_MIHF_ID (MIH_C_INTEGER1_T)52 -#define MIH_C_TLV_QUERY_RESOURCE_REPORT_FLAG (MIH_C_INTEGER1_T)53 -#define MIH_C_TLV_EVENT_CONFIGURATION_INFO_LIST (MIH_C_INTEGER1_T)54 -#define MIH_C_TLV_TARGET_NETWORK_INFO (MIH_C_INTEGER1_T)55 -#define MIH_C_TLV_LIST_OF_TARGET_NETWORK_INFO (MIH_C_INTEGER1_T)56 -#define MIH_C_TLV_ASSIGNED_RESOURCE_SET (MIH_C_INTEGER1_T)57 -#define MIH_C_TLV_LINK_DETECTED_INFO_LIST (MIH_C_INTEGER1_T)58 -#define MIH_C_TLV_MN_LINK_ID (MIH_C_INTEGER1_T)59 -#define MIH_C_TLV_POA (MIH_C_INTEGER1_T)60 -#define MIH_C_TLV_UNAUTHENTICATED_INFORMATION_REQUEST (MIH_C_INTEGER1_T)61 -#define MIH_C_TLV_NETWORK_TYPE (MIH_C_INTEGER1_T)62 -#define MIH_C_TLV_REQUESTED_RESOURCE_SET (MIH_C_INTEGER1_T)63 - -#ifdef MIH_C_MEDIEVAL_EXTENSIONS -# define MIH_C_TLV_LINK_EVENT_LIST (MIH_C_INTEGER1_T)101 -# define MIH_C_TLV_LINK_CMD_LIST (MIH_C_INTEGER1_T)102 -# define MIH_C_TLV_LINK_PARAM_TYPE_LIST (MIH_C_INTEGER1_T)103 -# define MIH_C_TLV_LINK_PARAMETERS_STATUS_LIST (MIH_C_INTEGER1_T)104 -# define MIH_C_TLV_LINK_STATES_REQ (MIH_C_INTEGER1_T)105 -# define MIH_C_TLV_LINK_STATES_RSP_LIST (MIH_C_INTEGER1_T)106 -# define MIH_C_TLV_LINK_DESC_REQ (MIH_C_INTEGER1_T)107 -# define MIH_C_TLV_LINK_DESC_RSP_LIST (MIH_C_INTEGER1_T)108 -# define MIH_C_TLV_LINK_ACTION (MIH_C_INTEGER1_T)109 -# define MIH_C_TLV_LINK_AC_RESULT (MIH_C_INTEGER1_T)110 -# define MIH_C_TLV_LINK_SCAN_RSP_LIST (MIH_C_INTEGER1_T)111 -# define MIH_C_TLV_LINK_DET_INFO (MIH_C_INTEGER1_T)112 -# define MIH_C_TLV_LINK_INTERFACE_TYPE_ADDR (MIH_C_INTEGER1_T)113 -# define MIH_C_TLV_MOS_DSCV (MIH_C_INTEGER1_T)114 -#endif -/** @}*/ - -//----------------------------------------------------------------------------- -#endif diff --git a/openair3/RAL-LTE/INTERFACE-802.21/INCLUDE/MIH_C_bit_buffer.h b/openair3/RAL-LTE/INTERFACE-802.21/INCLUDE/MIH_C_bit_buffer.h deleted file mode 100755 index efdf84b727..0000000000 --- a/openair3/RAL-LTE/INTERFACE-802.21/INCLUDE/MIH_C_bit_buffer.h +++ /dev/null @@ -1,151 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ -/*! \file MIH_C_bit_buffer.h - * \brief This file defines the prototypes of the functions for coding and decoding of bit fields. - * \author GAUTHIER Lionel - * \date 2012 - * \version - * \note - * \bug - * \warning - */ - -#ifndef __MIH_C_BIT_BUFFER_H__ -# define __MIH_C_BIT_BUFFER_H__ -//----------------------------------------------------------------------------- -# ifdef MIH_C_BIT_BUFFER_C -# define private_bit_buffer(x) x -# define protected_bit_buffer(x) x -# define public_bit_buffer(x) x -# else -# ifdef MIH_C_INTERFACE -# define private_bit_buffer(x) -# define protected_bit_buffer(x) extern x -# define public_bit_buffer(x) extern x -# else -# define private_bit_buffer(x) -# define protected_bit_buffer(x) -# define public_bit_buffer(x) extern x -# endif -# endif -//----------------------------------------------------------------------------- -#include -//----------------------------------------------------------------------------- -#define BIT_BUFFER_FALSE 0 -#define BIT_BUFFER_TRUE 1 -typedef struct BitBuffer { - unsigned int m_buffer_allocated_by_this; - u_int8_t *m_buffer; - // size allocated for buffer - unsigned int m_capacity; - - // amount of bytes written - unsigned int m_limit; - unsigned int m_byte_position; - unsigned int m_bit_mod_8_position; - -} Bit_Buffer_t; - -//----------------------------------------------------------------------------- -public_bit_buffer(Bit_Buffer_t* new_BitBuffer_0(void);) - -public_bit_buffer(Bit_Buffer_t* new_BitBuffer_1(unsigned int capacityP);) - -public_bit_buffer(Bit_Buffer_t* new_BitBuffer_2(unsigned char* bufferP, unsigned int capacityP);) - -public_bit_buffer(void BitBuffer_wrap(Bit_Buffer_t* bbP, unsigned char* bufferP, unsigned int capacityP);) - -public_bit_buffer(u_int32_t BitBuffer_read32(Bit_Buffer_t* bbP);) - -public_bit_buffer(u_int32_t BitBuffer_read32littleendian(Bit_Buffer_t* bbP);) - -public_bit_buffer(u_int16_t BitBuffer_read16(Bit_Buffer_t* bbP);) - -public_bit_buffer(u_int16_t BitBuffer_read16littleendian(Bit_Buffer_t* bbP);) - -public_bit_buffer(u_int8_t BitBuffer_read8(Bit_Buffer_t* bbP);) - -public_bit_buffer(u_int8_t BitBuffer_readBool(Bit_Buffer_t* bbP);) - -public_bit_buffer(u_int32_t BitBuffer_read(Bit_Buffer_t* bbP, const unsigned int nb_bitsP);) - -public_bit_buffer(u_int32_t BitBuffer_readlittleendian(Bit_Buffer_t* bbP, const unsigned int nb_bitsP);) - -public_bit_buffer(void BitBuffer_readMem(Bit_Buffer_t* bbP, u_int8_t* destP, unsigned int nb_bytesP);) - - -public_bit_buffer(void BitBuffer_write32(Bit_Buffer_t* bbP, u_int32_t valueP);) - -public_bit_buffer(void BitBuffer_write32littleendian(Bit_Buffer_t* bbP, u_int32_t valueP);) - -public_bit_buffer(void BitBuffer_write16littleendian(Bit_Buffer_t* bbP, u_int16_t valueP);) - -public_bit_buffer(void BitBuffer_write16(Bit_Buffer_t* bbP, u_int16_t valueP);) - -public_bit_buffer(void BitBuffer_write8(Bit_Buffer_t* bbP, u_int8_t valueP);) - -public_bit_buffer(void BitBuffer_writeBool(Bit_Buffer_t* bbP, u_int8_t valueP);) - -public_bit_buffer(void BitBuffer_writeMem(Bit_Buffer_t* bbP, u_int8_t* startP, unsigned int nb_bytesP);) - -public_bit_buffer(void BitBuffer_write8b(Bit_Buffer_t* bbP, u_int8_t valueP, unsigned int nb_bitsP);) - -public_bit_buffer(void BitBuffer_writelittleendian(Bit_Buffer_t* bbP, u_int8_t valueP, unsigned int nb_bitsP);) - -public_bit_buffer(void BitBuffer_write16b(Bit_Buffer_t* bbP, u_int16_t valueP, unsigned int nb_bitsP);) - -public_bit_buffer(void BitBuffer_writelittleendian16b(Bit_Buffer_t* bbP, u_int16_t valueP, unsigned int nb_bitsP);) - -public_bit_buffer(void BitBuffer_write32b(Bit_Buffer_t* bbP, u_int32_t valueP, unsigned int nb_bitsP);) - -public_bit_buffer(void BitBuffer_writelittleendian32b(Bit_Buffer_t* bbP, u_int32_t valueP, unsigned int nb_bitsP);) - -public_bit_buffer(void BitBuffer_rewind(Bit_Buffer_t* bbP);) - -public_bit_buffer(void BitBuffer_rewind_to(Bit_Buffer_t* bbP, unsigned int byte_positionP);) - -public_bit_buffer(void BitBuffer_write_shift_last_n_bytes_right(Bit_Buffer_t* bbP, unsigned int nb_bytes_to_shiftP, unsigned int hole_sizeP);) - -public_bit_buffer(void BitBuffer_reset(Bit_Buffer_t* bbP);) - -public_bit_buffer(unsigned char* BitBuffer_getNextFreePosition(Bit_Buffer_t* bbP);) - -public_bit_buffer(unsigned int BitBuffer_getPosition(Bit_Buffer_t* bbP);) - -public_bit_buffer(void BitBuffer_addLimitOffset(Bit_Buffer_t* bbP, unsigned int offsetP);) - -public_bit_buffer(unsigned int BitBuffer_getNumFreeBytes(Bit_Buffer_t* bbP);) - -public_bit_buffer(u_int8_t BitBuffer_isCheckWriteOverflowOK(Bit_Buffer_t* bbP, unsigned int nb_bitsP);) - -public_bit_buffer(u_int8_t BitBuffer_isCheckReadOverflowOK(Bit_Buffer_t* bbP, unsigned int nb_bitsP);) - -public_bit_buffer(void free_BitBuffer(Bit_Buffer_t* bbP);) - -#endif diff --git a/openair3/RAL-LTE/INTERFACE-802.21/INCLUDE/MIH_C_header_codec.h b/openair3/RAL-LTE/INTERFACE-802.21/INCLUDE/MIH_C_header_codec.h deleted file mode 100755 index 3b35e202bf..0000000000 --- a/openair3/RAL-LTE/INTERFACE-802.21/INCLUDE/MIH_C_header_codec.h +++ /dev/null @@ -1,121 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ -/*! \file MIH_C_header_codec.h - * \brief This file defines the prototypes of the functions for coding and decoding of MIH header messages. - * \author BRIZZOLA Davide, GAUTHIER Lionel, MAUREL Frederic, WETTERWALD Michelle - * \date 2012 - * \version - * \note - * \bug - * \warning - */ - -#ifndef __MIH_C_HEADER_CODEC_H__ -# define __MIH_C_HEADER_CODEC_H__ -//----------------------------------------------------------------------------- -# ifdef MIH_C_HEADER_CODEC_C -# define private_header_codec(x) x -# define protected_header_codec(x) x -# define public_header_codec(x) x -# else -# ifdef MIH_C_INTERFACE -# define private_header_codec(x) -# define protected_header_codec(x) extern x -# define public_header_codec(x) extern x -# else -# define private_header_codec(x) -# define protected_header_codec(x) -# define public_header_codec(x) extern x -# endif -# endif -//----------------------------------------------------------------------------- -#include -#include -#include -#include -#include -#include -//#include -#include -#include -#include -#include -#include -#include -#include -#include -//----------------------------------------------------------------------------- -#include "MIH_C_bit_buffer.h" -#include "MIH_C_Types.h" -//----------------------------------------------------------------------------- -#define MIH_HEADER_ENCODE_OK 0 -#define MIH_HEADER_DECODE_OK 0 -#define MIH_HEADER_ENCODE_TOO_SHORT -1 -#define MIH_HEADER_DECODE_TOO_SHORT -1 -#define MIH_HEADER_ENCODE_FAILURE -2 -#define MIH_HEADER_DECODE_FAILURE -2 -#define MIH_HEADER_ENCODE_BAD_PARAMETER -3 -#define MIH_HEADER_DECODE_BAD_PARAMETER -3 - -TYPEDEF_INTEGER1(MIH_C_VERSION); -TYPEDEF_INTEGER1(MIH_C_ACK_REQ); -TYPEDEF_INTEGER1(MIH_C_ACK_RSP); -TYPEDEF_INTEGER1(MIH_C_UIR); -TYPEDEF_INTEGER1(MIH_C_M); -TYPEDEF_INTEGER1(MIH_C_FN); -TYPEDEF_INTEGER1(MIH_C_SID); -TYPEDEF_INTEGER1(MIH_C_OPCODE); -TYPEDEF_INTEGER2(MIH_C_AID); -TYPEDEF_INTEGER2(MIH_C_TRANSACTION_ID); -TYPEDEF_INTEGER2(MIH_C_VARIABLE_PAYLOAD_LENGTH); -TYPEDEF_INTEGER1(MIH_C_TLV_TYPE); - - -/*! \struct MIH_C_HEADER -* \brief Structure defining the header of messages exchanged between MIH entities. -*/ -typedef struct MIH_C_HEADER { - MIH_C_VERSION_T version; - MIH_C_ACK_REQ_T ack_req; - MIH_C_ACK_RSP_T ack_rsp; - MIH_C_UIR_T uir; - MIH_C_M_T more_fragment; - MIH_C_FN_T fragment_number; - MIH_C_SID_T service_identifier; - MIH_C_OPCODE_T operation_code; - MIH_C_AID_T action_identifier; - MIH_C_TRANSACTION_ID_T transaction_id; - MIH_C_VARIABLE_PAYLOAD_LENGTH_T payload_length; -} MIH_C_HEADER_T; -//----------------------------------------------------------------------------- -public_header_codec(int MIH_C_HEADER2String(MIH_C_HEADER_T* headerP, char* bufP);) -public_header_codec(int MIH_C_Link_Header_Encode(Bit_Buffer_t* message_serializedP, MIH_C_HEADER_T* headerP);) -public_header_codec(int MIH_C_Link_Header_Decode(Bit_Buffer_t* message_serializedP, MIH_C_HEADER_T* headerP);) -//----------------------------------------------------------------------------- -#endif diff --git a/openair3/RAL-LTE/INTERFACE-802.21/INCLUDE/MIH_C_log.h b/openair3/RAL-LTE/INTERFACE-802.21/INCLUDE/MIH_C_log.h deleted file mode 100755 index aa193d0856..0000000000 --- a/openair3/RAL-LTE/INTERFACE-802.21/INCLUDE/MIH_C_log.h +++ /dev/null @@ -1,128 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ -/*! \file MIH_C_log.h -* \brief This file defines the prototypes of the functions for logging. -* \author BRIZZOLA Davide, GAUTHIER Lionel, MAUREL Frederic, WETTERWALD Michelle -* \date 2012 -* \version -* \note -* \bug -* \warning -*/ -#error "To be removed" -#ifndef __MIH_C_LOG_H__ -# define __MIH_C_LOG_H__ -//----------------------------------------------------------------------------- -# ifdef MIH_C_LOG_C -# define private_mih_c_log(x) x -# define protected_mih_c_log(x) x -# define public_mih_c_log(x) x -# else -# ifdef MIH_C_INTERFACE -# define private_mih_c_log(x) -# define protected_mih_c_log(x) extern x -# define public_mih_c_log(x) extern x -# else -# define private_mih_c_log(x) -# define protected_mih_c_log(x) -# define public_mih_c_log(x) extern x -# endif -# endif -//----------------------------------------------------------------------------- -#include -#include -#include -#include -#include -#include -#include -#include -#include -//----------------------------------------------------------------------------- -#define LOG_CONST 0 -#define LOG_TO_CONSOLE 0 -#define LOG_TO_FILE 1 -#define LOG_TO_SYSTEM 2 -//default value -#define LOG_TO_DEFAULT LOG_TO_CONSOLE - -#define MIH_C_LOGFILE_NAME "/tmp/MIH_C_log.txt" -#define MIH_C_SYSLOG_NAME "LTE" -#define MIH_C_VERSION "1.0" //Release date : see readme - -#define EMERG(args...) MIH_C_log_record( (LOG_EMERG), ##args) -#define ALERT(args...) MIH_C_log_record( (LOG_ALERT), ##args) -#define CRIT(args...) MIH_C_log_record( (LOG_CRIT), ##args) -#define ERR(args...) MIH_C_log_record( (LOG_ERR), ##args) -#define WARNING(args...) MIH_C_log_record( (LOG_WARNING), ##args) -#define NOTICE(args...) MIH_C_log_record( (LOG_NOTICE), ##args) -#define INFO(args...) MIH_C_log_record( (LOG_INFO), ##args) -#define DEBUG(args...) MIH_C_log_record( (LOG_DEBUG), ##args) -//----------------------------------------------------------------------------- - -private_mih_c_log(FILE *g_mih_c_log_file;) - -private_mih_c_log(int g_mih_c_log_output;) - -private_mih_c_log(const char* g_log_level2string[LOG_DEBUG+1];) - -/*! \fn char* getTimeStamp4Log(void) -* \brief Get a formated string of current time. -* \return a char string of current time in seconds and micro seconds. -*/ -public_mih_c_log( char* getTimeStamp4Log(void);) - - -/*! \fn int mih_c_log_init(unsigned int log_outputP) -* \brief Initialize log module. -* \param[in] log_outputP Identifier of output where logs go are sent. -*/ -protected_mih_c_log( int MIH_C_log_init(unsigned int log_outputP);) - -/*! \fn int MIH_C_log_record(unsigned int levelP, char * log_msgP, ...) -* \brief Set log parameters. -* \param[in] levelP Level of log (ERROR, DEBUG). -* \param[in] log_msgP Message to log. -*/ -public_mih_c_log( int MIH_C_log_record(int level, const char * log_msg, ...);) - -/*! \fn int MIH_C_log_exit(void) -* \brief Close, and clean properly the log module. -*/ -protected_mih_c_log( int MIH_C_log_exit(void);) -#endif - - - - - - - - - diff --git a/openair3/RAL-LTE/INTERFACE-802.21/INCLUDE/MIH_C_msg_codec.h b/openair3/RAL-LTE/INTERFACE-802.21/INCLUDE/MIH_C_msg_codec.h deleted file mode 100755 index 0e5390af00..0000000000 --- a/openair3/RAL-LTE/INTERFACE-802.21/INCLUDE/MIH_C_msg_codec.h +++ /dev/null @@ -1,167 +0,0 @@ -/******************************************************************************* - * - * Eurecom OpenAirInterface 3 - * Copyright(c) 2012 Eurecom - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information - * Openair Admin: openair_admin@eurecom.fr - * Openair Tech : openair_tech@eurecom.fr - * Forums : http://forums.eurecom.fsr/openairinterface - * Address : Eurecom, 2229, route des crêtes, 06560 Valbonne Sophia Antipolis, France - * - *******************************************************************************/ -/*! \file MIH_C_msg_codec.h - * \brief This file defines the prototypes of the functions for coding and decoding of MIH Link messages. - * \author BRIZZOLA Davide, GAUTHIER Lionel, MAUREL Frederic, WETTERWALD Michelle - * \date 2012 - * \version - * \note - * \bug - * \warning - */ - -#ifndef __MIH_C_MSG_CODEC_H__ -# define __MIH_C_MSG_CODEC_H__ -//----------------------------------------------------------------------------- -# ifdef MIH_C_MSG_CODEC_C -# define private_mih_c_msg_codec(x) x -# define protected_mih_c_msg_codec(x) x -# define public_mih_c_msg_codec(x) x -# else -# ifdef MIH_C_INTERFACE -# define private_mih_c_msg_codec(x) -# define protected_mih_c_msg_codec(x) extern x -# define public_mih_c_msg_codec(x) extern x -# else -# define private_mih_c_msg_codec(x) -# define protected_mih_c_msg_codec(x) -# define public_mih_c_msg_codec(x) extern x -# endif -# endif -//----------------------------------------------------------------------------- -#include -#include -#include -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ - -#include -#include -#include -#include -#include -#include -//----------------------------------------------------------------------------- -#include "MIH_C.h" -//----------------------------------------------------------------------------- -#define MIH_MESSAGE_DECODE_OK 0 -#define MIH_MESSAGE_DECODE_TOO_SHORT -1 -#define MIH_MESSAGE_DECODE_FAILURE -2 -#define MIH_MESSAGE_DECODE_BAD_PARAMETER -3 -//----------------------------------------------------------------------------- -#define MSG_MIH_HEADER_SIZE_IN_BYTES 8 -//----------------------------------------------------------------------------- -typedef u_int16_t MIH_C_Message_Id_t; - -typedef struct MIH_C_Message_Wrapper { - MIH_C_Message_Id_t message_id; - union { -#ifdef MIH_C_MEDIEVAL_EXTENSIONS - MIH_C_Message_Link_Register_indication_t link_register_indication; -#endif - MIH_C_Message_Link_Detected_indication_t link_detected_indication; - MIH_C_Message_Link_Up_indication_t link_up_indication; - MIH_C_Message_Link_Down_indication_t link_down_indication; - MIH_C_Message_Link_Parameters_Report_indication_t link_parameters_report_indication; - MIH_C_Message_Link_Going_Down_indication_t link_going_down_indication; - MIH_C_Message_Link_Handover_Imminent_indication_t link_handover_imminent_indication; - MIH_C_Message_Link_Handover_Complete_indication_t link_handover_complete_indication; - MIH_C_Message_Link_PDU_Transmit_Status_indication_t link_pdu_transmit_status_indication; - MIH_C_Message_Link_Capability_Discover_request_t link_capability_discover_request; - MIH_C_Message_Link_Capability_Discover_confirm_t link_capability_discover_confirm; - MIH_C_Message_Link_Event_Subscribe_request_t link_event_subscribe_request; - MIH_C_Message_Link_Event_Subscribe_confirm_t link_event_subscribe_confirm; - MIH_C_Message_Link_Event_Unsubscribe_request_t link_event_unsubscribe_request; - MIH_C_Message_Link_Event_Unsubscribe_confirm_t link_event_unsubscribe_confirm; - MIH_C_Message_Link_Get_Parameters_request_t link_get_parameters_request; - MIH_C_Message_Link_Get_Parameters_confirm_t link_get_parameters_confirm; - MIH_C_Message_Link_Configure_Thresholds_request_t link_configure_thresholds_request; - MIH_C_Message_Link_Configure_Thresholds_confirm_t link_configure_thresholds_confirm; - MIH_C_Message_Link_Action_request_t link_action_request; - MIH_C_Message_Link_Action_confirm_t link_action_confirm; - } _union_message; -} MIH_C_Message_Wrapper_t; -//----------------------------------------------------------------------------- -private_mih_c_msg_codec(MIH_C_TRANSACTION_ID_T g_transaction_id_generator;) -//----------------------------------------------------------------------------- -public_mih_c_msg_codec( MIH_C_TRANSACTION_ID_T MIH_C_get_new_transaction_id(void);) -public_mih_c_msg_codec( int MIH_C_Link_Message_Decode_Link_Capability_Discover_request( Bit_Buffer_t* bbP, MIH_C_Message_Link_Capability_Discover_request_t *messageP);) -public_mih_c_msg_codec( int MIH_C_Link_Message_Link_Capability_Discover_request2String( MIH_C_Message_Link_Capability_Discover_request_t *messageP, char* bufP);) -public_mih_c_msg_codec( int MIH_C_Link_Message_Decode_Link_Event_Subscribe_request( Bit_Buffer_t* bbP, MIH_C_Message_Link_Event_Subscribe_request_t *messageP);) -public_mih_c_msg_codec( int MIH_C_Link_Message_Link_Event_Subscribe_request2String( MIH_C_Message_Link_Event_Subscribe_request_t *messageP, char* bufP);) -public_mih_c_msg_codec( int MIH_C_Link_Message_Decode_Link_Event_Unsubscribe_request( Bit_Buffer_t* bbP, MIH_C_Message_Link_Event_Unsubscribe_request_t *messageP);) -public_mih_c_msg_codec( int MIH_C_Link_Message_Link_Event_Unsubscribe_request2String( MIH_C_Message_Link_Event_Unsubscribe_request_t *messageP, char* bufP);) -public_mih_c_msg_codec( int MIH_C_Link_Message_Decode_Link_Get_Parameters_request( Bit_Buffer_t* bbP, MIH_C_Message_Link_Get_Parameters_request_t *messageP);) -public_mih_c_msg_codec( int MIH_C_Link_Message_Link_Get_Parameters_request2String( MIH_C_Message_Link_Get_Parameters_request_t *messageP, char* bufP);) -public_mih_c_msg_codec( int MIH_C_Link_Message_Decode_Link_Configure_Thresholds_request( Bit_Buffer_t* bbP, MIH_C_Message_Link_Configure_Thresholds_request_t *messageP);) -public_mih_c_msg_codec( int MIH_C_Link_Message_Link_Configure_Thresholds_request2String( MIH_C_Message_Link_Configure_Thresholds_request_t *messageP, char* bufP);) -public_mih_c_msg_codec( int MIH_C_Link_Message_Decode_Link_Action_request( Bit_Buffer_t* bbP, MIH_C_Message_Link_Action_request_t *messageP);) -public_mih_c_msg_codec( int MIH_C_Link_Message_Link_Action_request2String( MIH_C_Message_Link_Action_request_t *messageP, char* bufP);) - -#ifdef MIH_C_MEDIEVAL_EXTENSIONS -public_mih_c_msg_codec( int MIH_C_Link_Message_Encode_Link_Register_indication( Bit_Buffer_t* bbP, MIH_C_Message_Link_Register_indication_t *messageP);) -#endif -public_mih_c_msg_codec( int MIH_C_Link_Message_Encode_Link_Detected_indication( Bit_Buffer_t* bbP, MIH_C_Message_Link_Detected_indication_t *messageP);) -public_mih_c_msg_codec( int MIH_C_Link_Message_Encode_Link_Up_indication( Bit_Buffer_t* bbP, MIH_C_Message_Link_Up_indication_t *messageP);) -public_mih_c_msg_codec( int MIH_C_Link_Message_Encode_Link_Parameters_Report_indication( Bit_Buffer_t* bbP, MIH_C_Message_Link_Parameters_Report_indication_t *messageP);) -public_mih_c_msg_codec( int MIH_C_Link_Message_Encode_Link_Going_Down_indication( Bit_Buffer_t* bbP, MIH_C_Message_Link_Going_Down_indication_t *messageP);) -public_mih_c_msg_codec( int MIH_C_Link_Message_Encode_Link_Down_indication( Bit_Buffer_t* bbP, MIH_C_Message_Link_Down_indication_t *messageP);) -public_mih_c_msg_codec( int MIH_C_Link_Message_Encode_Link_Action_confirm( Bit_Buffer_t* bbP, MIH_C_Message_Link_Action_confirm_t *messageP);) -public_mih_c_msg_codec( int MIH_C_Link_Message_Encode_Capability_Discover_confirm( Bit_Buffer_t* bbP, MIH_C_Message_Link_Capability_Discover_confirm_t *messageP);) -public_mih_c_msg_codec( int MIH_C_Link_Message_Encode_Event_Subscribe_confirm( Bit_Buffer_t* bbP, MIH_C_Message_Link_Event_Subscribe_confirm_t *messageP);) -public_mih_c_msg_codec( int MIH_C_Link_Message_Encode_Event_Unsubscribe_confirm( Bit_Buffer_t* bbP, MIH_C_Message_Link_Event_Unsubscribe_confirm_t *messageP);) -public_mih_c_msg_codec( int MIH_C_Link_Message_Encode_Configure_Thresholds_confirm( Bit_Buffer_t* bbP, MIH_C_Message_Link_Configure_Thresholds_confirm_t *messageP);) -public_mih_c_msg_codec( int MIH_C_Link_Message_Encode_Get_Parameters_confirm( Bit_Buffer_t* bbP, MIH_C_Message_Link_Get_Parameters_confirm_t *messageP);) -#endif diff --git a/openair3/RAL-LTE/INTERFACE-802.21/INCLUDE/MIH_C_primitive_codec.h b/openair3/RAL-LTE/INTERFACE-802.21/INCLUDE/MIH_C_primitive_codec.h deleted file mode 100755 index 4b154a228c..0000000000 --- a/openair3/RAL-LTE/INTERFACE-802.21/INCLUDE/MIH_C_primitive_codec.h +++ /dev/null @@ -1,115 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ -/*! \file MIH_C_primitive_codec.h - * \brief This file defines the prototypes of the functions for coding and decoding of MIH Link messages. - * \author BRIZZOLA Davide, GAUTHIER Lionel, MAUREL Frederic, WETTERWALD Michelle - * \date 2012 - * \version - * \note - * \bug - * \warning - */ - -#ifndef __MIH_C_PRIMITIVE_CODEC_H__ -# define __MIH_C_PRIMITIVE_CODEC_H__ -//----------------------------------------------------------------------------- -# ifdef mih_c_primitive_codec_C -# define private_mih_c_primitive_codec(x) x -# define protected_mih_c_primitive_codec(x) x -# define public_mih_c_primitive_codec(x) x -# else -# ifdef MIH_C_INTERFACE -# define private_mih_c_primitive_codec(x) -# define protected_mih_c_primitive_codec(x) extern x -# define public_mih_c_primitive_codec(x) extern x -# else -# define private_mih_c_primitive_codec(x) -# define protected_mih_c_primitive_codec(x) -# define public_mih_c_primitive_codec(x) extern x -# endif -# endif -//----------------------------------------------------------------------------- -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -//----------------------------------------------------------------------------- -#include "MIH_C.h" -//----------------------------------------------------------------------------- -#define MIH_PRIMITIVE_DECODE_OK 0 -#define MIH_PRIMITIVE_DECODE_TOO_SHORT -1 -#define MIH_PRIMITIVE_DECODE_FAILURE -2 -#define MIH_PRIMITIVE_DECODE_BAD_PARAMETER -3 -#define MIH_PRIMITIVE_ENCODE_OK 0 -#define MIH_PRIMITIVE_ENCODE_TOO_SHORT -1 -#define MIH_PRIMITIVE_ENCODE_FAILURE -2 -#define MIH_PRIMITIVE_ENCODE_BAD_PARAMETER -3 -//----------------------------------------------------------------------------- -//----------------------------------------------------------------------------- -protected_mih_c_primitive_codec(int MIH_C_Link_Primitive_Decode_Link_Capability_Discover_request (Bit_Buffer_t* bbP, MIH_C_Link_Capability_Discover_request_t *primitiveP);) -protected_mih_c_primitive_codec(int MIH_C_Link_Primitive_Link_Capability_Discover_request2String (MIH_C_Link_Capability_Discover_request_t *primitiveP, char* bufP);) -protected_mih_c_primitive_codec(int MIH_C_Link_Primitive_Decode_Link_Event_Subscribe_request (Bit_Buffer_t* bbP, MIH_C_Link_Event_Subscribe_request_t *primitiveP);) -protected_mih_c_primitive_codec(int MIH_C_Link_Primitive_Link_Event_Subscribe_request2String (MIH_C_Link_Event_Subscribe_request_t *primitiveP, char* bufP);) -protected_mih_c_primitive_codec(int MIH_C_Link_Primitive_Decode_Link_Event_Unsubscribe_request (Bit_Buffer_t* bbP, MIH_C_Link_Event_Unsubscribe_request_t *primitiveP);) -protected_mih_c_primitive_codec(int MIH_C_Link_Primitive_Link_Event_Unsubscribe_request2String (MIH_C_Link_Event_Unsubscribe_request_t *primitiveP, char* bufP);) -protected_mih_c_primitive_codec(int MIH_C_Link_Primitive_Decode_Link_Get_Parameters_request (Bit_Buffer_t* bbP, MIH_C_Link_Get_Parameters_request_t *primitiveP);) -protected_mih_c_primitive_codec(int MIH_C_Link_Primitive_Link_Get_Parameters_request2String (MIH_C_Link_Get_Parameters_request_t *primitiveP, char* bufP);) -protected_mih_c_primitive_codec(int MIH_C_Link_Primitive_Decode_Link_Configure_Thresholds_request(Bit_Buffer_t* bbP, MIH_C_Link_Configure_Thresholds_request_t *primitiveP);) -protected_mih_c_primitive_codec(int MIH_C_Link_Primitive_Link_Configure_Thresholds_request2String(MIH_C_Link_Configure_Thresholds_request_t *primitiveP, char* bufP);) -protected_mih_c_primitive_codec(int MIH_C_Link_Primitive_Decode_Link_Action_request (Bit_Buffer_t* bbP, MIH_C_Link_Action_request_t *primitiveP);) -protected_mih_c_primitive_codec(int MIH_C_Link_Primitive_Link_Action_request2String (MIH_C_Link_Action_request_t *primitiveP, char* bufP);) - -#ifdef MIH_C_MEDIEVAL_EXTENSIONS -protected_mih_c_primitive_codec(int MIH_C_Link_Primitive_Encode_Link_Register_indication (Bit_Buffer_t* bbP, MIH_C_Link_Register_indication_t *primitiveP);) -#endif -protected_mih_c_primitive_codec(int MIH_C_Link_Primitive_Encode_Link_Detected_indication (Bit_Buffer_t* bbP, MIH_C_Link_Detected_indication_t *primitiveP);) -protected_mih_c_primitive_codec(int MIH_C_Link_Primitive_Encode_Link_Up_indication (Bit_Buffer_t* bbP, MIH_C_Link_Up_indication_t *primitiveP);) -protected_mih_c_primitive_codec(int MIH_C_Link_Primitive_Encode_Link_Parameters_Report_indication(Bit_Buffer_t* bbP, MIH_C_Link_Parameters_Report_indication_t *primitiveP);) -protected_mih_c_primitive_codec(int MIH_C_Link_Primitive_Encode_Link_Going_Down_indication (Bit_Buffer_t* bbP, MIH_C_Link_Going_Down_indication_t *primitiveP);) -protected_mih_c_primitive_codec(int MIH_C_Link_Primitive_Encode_Link_Down_indication (Bit_Buffer_t* bbP, MIH_C_Link_Down_indication_t *primitiveP);) -protected_mih_c_primitive_codec(int MIH_C_Link_Primitive_Link_Register_indication2String (MIH_C_Link_Register_indication_t *primitiveP, char* bufP);) -protected_mih_c_primitive_codec(int MIH_C_Link_Primitive_Encode_Link_Capability_Discover_confirm (Bit_Buffer_t* bbP, MIH_C_Link_Capability_Discover_confirm_t *primitiveP);) -protected_mih_c_primitive_codec(int MIH_C_Link_Primitive_Link_Capability_Discover_confirm2String (MIH_C_Link_Capability_Discover_confirm_t *primitiveP, char* bufP);) -protected_mih_c_primitive_codec(int MIH_C_Link_Primitive_Encode_Link_Event_Subscribe_confirm (Bit_Buffer_t* bbP, MIH_C_Link_Event_Subscribe_confirm_t *primitiveP);) -protected_mih_c_primitive_codec(int MIH_C_Link_Primitive_Encode_Link_Event_Unsubscribe_confirm (Bit_Buffer_t* bbP, MIH_C_Link_Event_Unsubscribe_confirm_t *primitiveP);) -protected_mih_c_primitive_codec(int MIH_C_Link_Primitive_Encode_Link_Configure_Thresholds_confirm(Bit_Buffer_t* bbP, MIH_C_Link_Configure_Thresholds_confirm_t *primitiveP);) -protected_mih_c_primitive_codec(int MIH_C_Link_Primitive_Encode_Link_Get_Parameters_confirm (Bit_Buffer_t* bbP, MIH_C_Link_Get_Parameters_confirm_t *primitiveP);) -protected_mih_c_primitive_codec(int MIH_C_Link_Primitive_Encode_Link_Action_confirm (Bit_Buffer_t* bbP, MIH_C_Link_Action_confirm_t *primitiveP);) -#endif diff --git a/openair3/RAL-LTE/INTERFACE-802.21/Makefile b/openair3/RAL-LTE/INTERFACE-802.21/Makefile deleted file mode 100755 index fbb6428fb0..0000000000 --- a/openair3/RAL-LTE/INTERFACE-802.21/Makefile +++ /dev/null @@ -1,68 +0,0 @@ -# lines starting with the pound sign are comments. -# -# These things are options that you might need -# to tweak. - - -# You can modify the below as well, but probably -# won't need to. -CODE_DIR=C -INCLUDE_DIR=INCLUDE -LIB_DIR=LIB - -CC = gcc - -# include directories -INCLUDES = -I$(INCLUDE_DIR) - -# C compiler flags (-g -O2 -Wall) -CFLAGS = -g -Wall -DMIH_C_MEDIEVAL_EXTENSIONS - - - - -SRC = $(CODE_DIR)/MIH_C_header_codec.c -SRC += $(CODE_DIR)/MIH_C_msg_codec.c -SRC += $(CODE_DIR)/MIH_C_primitive_codec.c -SRC += $(CODE_DIR)/MIH_C_F1_basic_data_types_codec.c -SRC += $(CODE_DIR)/MIH_C_F2_general_data_types_codec.c -SRC += $(CODE_DIR)/MIH_C_F3_data_types_for_address_codec.c -SRC += $(CODE_DIR)/MIH_C_F4_data_types_for_links_codec.c -SRC += $(CODE_DIR)/MIH_C_F9_data_types_for_qos_codec.c -SRC += $(CODE_DIR)/MIH_C_F13_data_types_for_information_elements_codec.c -SRC += $(CODE_DIR)/MIH_C_L2_type_values_for_tlv_encoding.c -SRC += $(CODE_DIR)/MIH_C_Medieval_extensions.c -SRC += $(CODE_DIR)/MIH_C_log.c -SRC += $(CODE_DIR)/MIH_C_bit_buffer.c -SRC += $(CODE_DIR)/MIH_C.c - -OBJ = $(SRC:.c=.o) - -LIBS = -L/usr/local/lib -lrt - -OUT = $(LIB_DIR)/libmih_c-802.21.a - - - -LDFLAGS = -g - -.SUFFIXES: .c - -default: $(OUT) - -.c.o: - $(CC) $(INCLUDES) $(CFLAGS) -c $< -o $@ - -$(OUT): $(OBJ) - ar rcs $(OUT) $(OBJ) - - -clean: - -find . -name "*.o" -delete - -find . -name "*.*~" -delete - -find . -name "*~" -delete - -rm -Rf DOXYGEN/html - -rm -f $(OUT) - - - diff --git a/openair3/RAL-LTE/INTERFACE-802.21/readme.txt b/openair3/RAL-LTE/INTERFACE-802.21/readme.txt deleted file mode 100755 index aa8c754e58..0000000000 --- a/openair3/RAL-LTE/INTERFACE-802.21/readme.txt +++ /dev/null @@ -1,14 +0,0 @@ -Doc updated on 11 June 2012 - -README file for INTERFACE-802.21 Interface - - ****************** - Release dates - - Beta 0 : 06.11.2012 - ****************** - - The mih_c-802.21.a library is compiled in the INTERFACE-802.21 directory . - - This library can be linked with any C module dealing with 802.21 link interface. - diff --git a/openair3/RAL-LTE/LTE_RAL_ENB/INCLUDE/lteRALenb.h b/openair3/RAL-LTE/LTE_RAL_ENB/INCLUDE/lteRALenb.h deleted file mode 100755 index 6ac43bd37e..0000000000 --- a/openair3/RAL-LTE/LTE_RAL_ENB/INCLUDE/lteRALenb.h +++ /dev/null @@ -1,48 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ -#ifndef __LTE_RAL_ENB_H__ -#define __LTE_RAL_ENB_H__ - -#include "MIH_C.h" - -#include "openair_types.h" -#include "platform_constants.h" -#include "platform_types.h" - -#include "lteRALenb_constants.h" -#include "lteRALenb_variables.h" -#include "lteRALenb_action.h" -#include "lteRALenb_main.h" -#include "lteRALenb_mih_msg.h" -#include "lteRALenb_rrc_msg.h" -#include "lteRALenb_parameters.h" -#include "lteRALenb_process.h" -#include "lteRALenb_subscribe.h" -#include "lteRALenb_thresholds.h" -#endif diff --git a/openair3/RAL-LTE/LTE_RAL_ENB/INCLUDE/lteRALenb_action.h b/openair3/RAL-LTE/LTE_RAL_ENB/INCLUDE/lteRALenb_action.h deleted file mode 100755 index 3a654bd2b3..0000000000 --- a/openair3/RAL-LTE/LTE_RAL_ENB/INCLUDE/lteRALenb_action.h +++ /dev/null @@ -1,118 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ -/*! \file lteRALenb_action.h - * \brief - * \author GAUTHIER Lionel, MAUREL Frederic, WETTERWALD Michelle - * \date 2012 - * \version - * \note - * \bug - * \warning - */ - -#ifndef __LTE_RAL_ENB_ACTION_H__ -#define __LTE_RAL_ENB_ACTION_H__ -//----------------------------------------------------------------------------- -# ifdef LTE_RAL_ENB_ACTION_C -# define private_lteralenb_action(x) x -# define protected_lteralenb_action(x) x -# define public_lteralenb_action(x) x -# else -# ifdef LTE_RAL_ENB -# define private_lteralenb_action(x) -# define protected_lteralenb_action(x) extern x -# define public_lteralenb_action(x) extern x -# else -# define private_lteralenb_action(x) -# define protected_lteralenb_action(x) -# define public_lteralenb_action(x) extern x -# endif -# endif -//----------------------------------------------------------------------------- -#include "lteRALenb.h" - -/****************************************************************************/ -/********************* G L O B A L C O N S T A N T S *******************/ -/****************************************************************************/ - -/****************************************************************************/ -/************************ G L O B A L T Y P E S ************************/ -/****************************************************************************/ -#ifdef MIH_C_MEDIEVAL_EXTENSIONS - -/* - * --------------------------------------------------------------------------- - * Flow identifier management: - * Radio Bearer data flows are identified by a source address, a destination - * address and a port number for a particular IP transport protocol (UDP, - * TCP). A private data structure is used to map upper-layer flow identifiers - * to lower-layer RB channel identifiers. It is handled by private functions. - * --------------------------------------------------------------------------- - */ -/* Structure of the destination data flow */ -typedef struct Data_flow { - unsigned char addr[16]; // IP address - unsigned int l2id[2]; // L2 identifier - unsigned int port; // IP port identifier - int proto; // IP protocol - int cnxid; // Data flow identifier -} data_flow_t; - -#define ACTION_MAX_FLOW ((RAL_MAX_MT)*(RAL_MAX_RB)) - -typedef struct eRAL_action_DataFlowList { - int n_flows; - data_flow_t flow [ACTION_MAX_FLOW]; - int flow_id [ACTION_MAX_FLOW]; //added TEMP MW 23/05/13 -} eRAL_action_DataFlowList_t; - -private_lteralenb_action(eRAL_action_DataFlowList_t g_flows = {};) - -#endif // MIH_C_MEDIEVAL_EXTENSIONS -/****************************************************************************/ -/******************** G L O B A L V A R I A B L E S ********************/ -/****************************************************************************/ - -/****************************************************************************/ -/****************** E X P O R T E D F U N C T I O N S ******************/ -/****************************************************************************/ - -protected_lteralenb_action(void eRAL_action_request (ral_enb_instance_t instanceP, MIH_C_Message_Link_Action_request_t* msgP);) -protected_lteralenb_action(int eRAL_action_save_flow_id (ral_enb_instance_t instanceP, MIH_C_FLOW_ID_T* flowId, int cnxid);) -private_lteralenb_action( int eRAL_action_set_channel_id (ral_enb_instance_t instanceP, MIH_C_FLOW_ID_T* flowId, int cnxid);) -private_lteralenb_action( int eRAL_action_get_channel_id (ral_enb_instance_t instanceP, MIH_C_FLOW_ID_T* flowId, int* cnxid);) -private_lteralenb_action( int eRAL_action_del_channel_id (ral_enb_instance_t instanceP, int fix);) -private_lteralenb_action( int eRAL_action_is_in_progress (ral_enb_instance_t instanceP, MIH_C_STATUS_T* status, MIH_C_LINK_AC_RESULT_T* ac_status, MIH_C_LINK_AC_TYPE_T action);) -#ifdef MIH_C_MEDIEVAL_EXTENSIONS -private_lteralenb_action( MIH_C_LINK_AC_RESULT_T eRAL_action_link_flow_attr(ral_enb_instance_t instanceP);) -private_lteralenb_action( MIH_C_LINK_AC_RESULT_T eRAL_action_link_activate_resources(ral_enb_instance_t instanceP);) -private_lteralenb_action( MIH_C_LINK_AC_RESULT_T eRAL_action_link_deactivate_resources(ral_enb_instance_t instanceP);) -#endif // MIH_C_MEDIEVAL_EXTENSIONS - -#endif diff --git a/openair3/RAL-LTE/LTE_RAL_ENB/INCLUDE/lteRALenb_constants.h b/openair3/RAL-LTE/LTE_RAL_ENB/INCLUDE/lteRALenb_constants.h deleted file mode 100755 index 6d791127ea..0000000000 --- a/openair3/RAL-LTE/LTE_RAL_ENB/INCLUDE/lteRALenb_constants.h +++ /dev/null @@ -1,58 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ -#ifndef __LTE_RAL_ENB_CONSTANTS_H__ -#define __LTE_RAL_ENB_CONSTANTS_H__ - -#include - -/****************************************************************************/ -/********************* G L O B A L C O N S T A N T S *******************/ -/****************************************************************************/ - -//----------------------------------------------------------------------------- -#define ENB_DEFAULT_LOCAL_PORT_RAL "1235" -#define ENB_DEFAULT_REMOTE_PORT_MIHF "1025" -#define ENB_DEFAULT_IP_ADDRESS_MIHF "127.0.0.1" -#define ENB_DEFAULT_IP_ADDRESS_RAL "127.0.0.1" -#define ENB_DEFAULT_LINK_ID_RAL "enb_lte_link" -#define ENB_DEFAULT_LINK_ADDRESS_RAL "060080149150" -#define ENB_DEFAULT_MIHF_ID "mihf_enb" -#define ENB_DEFAULT_3GPP_ADDRESS "0000000000000000" - - -//----------------------------------------------------------------------------- -// Constants for scenario -#define PREDEFINED_MIH_NETWORK_ID "eurecom" -#define PREDEFINED_MIH_NETAUX_ID "netaux" - -#define PREDEFINED_CHANNEL_ID 2 -#define PREDEFINED_CLASSES_SERVICE_SUPPORTED 2 -#define PREDEFINED_QUEUES_SUPPORTED 2 - -#endif diff --git a/openair3/RAL-LTE/LTE_RAL_ENB/INCLUDE/lteRALenb_main.h b/openair3/RAL-LTE/LTE_RAL_ENB/INCLUDE/lteRALenb_main.h deleted file mode 100755 index 93a99b8fa7..0000000000 --- a/openair3/RAL-LTE/LTE_RAL_ENB/INCLUDE/lteRALenb_main.h +++ /dev/null @@ -1,218 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ -/*! \file lteRALenb_main.h - * \brief - * \author GAUTHIER Lionel, MAUREL Frederic, WETTERWALD Michelle - * \date 2012 - * \version - * \note - * \bug - * \warning - */ - -#ifndef __LTE_RAL_ENB_MAIN_H__ -#define __LTE_RAL_ENB_MAIN_H__ -//----------------------------------------------------------------------------- -# ifdef LTE_RAL_ENB_MAIN_C -# define private_lteralenb_main(x) x -# define protected_lteralenb_main(x) x -# define public_lteralenb_main(x) x -# else -# ifdef LTE_RAL_ENB -# define private_lteralenb_main(x) -# define protected_lteralenb_main(x) extern x -# define public_lteralenb_main(x) extern x -# else -# define private_lteralenb_main(x) -# define protected_lteralenb_main(x) -# define public_lteralenb_main(x) extern x -# endif -# endif -//----------------------------------------------------------------------------- -#include "lteRALenb.h" -#include "commonDef.h" -#include "hashtable.h" -//#include "collection/hashtable/hashtable.h" - -public_lteralenb_main(char* g_conf_enb_ral_listening_port;) -public_lteralenb_main(char* g_conf_enb_ral_ip_address;) -public_lteralenb_main(char* g_conf_enb_ral_link_id;) -public_lteralenb_main(char* g_conf_enb_ral_link_address;) -public_lteralenb_main(char* g_conf_enb_mihf_remote_port;) -public_lteralenb_main(char* g_conf_enb_mihf_ip_address;) -public_lteralenb_main(char* g_conf_enb_mihf_id;) - -/* - * Radio Bearer data - */ -typedef struct ral_lte_channel { - uint32_t cnx_id; - uint8_t multicast; - // MIHF parameters ix=0 UPLINK, ix=1 DOWNLINK - uint16_t flowId[2]; - uint16_t classId[2]; - float resBitrate[2]; - float meanBitrate[2]; - float bktDepth[2]; - float pkBitrate[2]; - float MTU[2]; - - // #if ! defined(ENABLE_USE_MME) - //IP driver parameters - uint16_t rbId; - uint16_t RadioQoSclass; - uint16_t dscpUL; - uint16_t dscpDL; - uint16_t nas_state; - uint16_t status; - // #endif -} ral_lte_channel_t; - -/* - * Mobile Terminal data - */ -typedef struct ral_lte_mt_s { - /* The identifier of the link that is associated with a PoA */ - MIH_C_LINK_TUPLE_ID_T ltid; - uint8_t ipv6_addr[16]; - uint32_t ipv6_l2id[2]; - uint32_t ue_id; - struct ral_lte_channel radio_channel[RAL_MAX_RB]; - int num_rbs; - int num_class; - int nas_state; - int mt_state; -} ral_lte_mt_t; - - -/* - * Multicast data // TEMP MW A supprimer!!!! - */ -typedef struct ral_lte_mcast_s { - /* The identifier of the multicast link that is associated with a PoA */ - MIH_C_LINK_TUPLE_ID_T ltid; - struct ral_lte_channel radio_channel; - uint8_t mc_group_addr[16]; -} ral_lte_mcast_t; - -/* - * RAL LTE internal data - */ - -typedef struct lte_ral_enb_object { - //------------------------ - // CONFIG PARAMETERS - //------------------------ - char* ral_listening_port; - char* ral_ip_address; - char* ral_link_address; - char* mihf_remote_port; - char* mihf_ip_address; - char* link_id; - char* mihf_id; - MIH_C_LINK_MIHCAP_FLAG_T link_mihcap_flag; // hardcoded parameters - MIH_C_NET_CAPS_T net_caps;// hardcoded parameters - - // provided by RRC with RRC_RAL_SYSTEM_CONFIGURATION_IND message - plmn_t plmn_id; - unsigned int cell_id:28; - - - int num_connected_mts; - - uint8_t pending_req_flag; - uint8_t pending_req_mt_ix; - uint8_t pending_req_ch_ix; - uint8_t pending_req_multicast; - // uint16_t pending_req_transaction_id; - // uint8_t pending_req_status; - MIH_C_FLOW_ID_T pending_req_fid; - - ral_lte_mt_t pending_mt; - int pending_mt_timer; - int pending_mt_flag; - - ral_lte_mt_t mt[RAL_MAX_MT]; - ral_lte_mcast_t mcast; - - // measurements for MEDIEVAL project - //MIH_C_TIMER_INTERVAL_T measurement_timer_interval; // This timer value (ms) is used to set the interval between - // periodic reports. Valid Range: 0..65535 - //long measurement_timer_id; - - //uint16_t num_UEs; - //uint32_t rlcBufferOccupancy[RAL_MAX_MT]; - //uint32_t scheduledPRB[RAL_MAX_MT]; - //uint32_t totalDataVolume[RAL_MAX_MT]; - //uint32_t totalNumPRBs; - - - //int congestion_flag; - //int congestion_threshold; - //int measures_triggered_flag; - //int requested_period; - - // MIH-INTERFACE data - int mih_sock_desc; - MIH_C_LINK_AC_TYPE_LIST_T mih_supported_link_action_list; - MIH_C_LINK_EVENT_LIST_T mih_supported_link_event_list; - MIH_C_LINK_CMD_LIST_T mih_supported_link_command_list; - MIH_C_LINK_EVENT_LIST_T mih_subscribe_req_event_list; - - //LIST(MIH_C_LINK_CFG_PARAM, mih_link_cfg_param_thresholds); - // to tell what are the configured thresholds in mih_link_cfg_param_thresholds_list - //MIH_C_BOOLEAN_T active_mih_link_cfg_param_threshold[MIH_C_LINK_CFG_PARAM_LIST_LENGTH]; - - - MIH_C_LINK_AC_TYPE_T pending_req_action; - MIH_C_STATUS_T pending_req_status; - MIH_C_LINK_AC_RESULT_T pending_req_ac_result; - MIH_C_TRANSACTION_ID_T pending_req_transaction_id; - - - hash_table_t *ue_htbl; - - MIH_C_TRANSACTION_ID_T transaction_id; - - char buffer[800]; -} lte_ral_enb_object_t; - - - -/* RAL LTE internal data */ -protected_lteralenb_main(lte_ral_enb_object_t g_enb_ral_obj[MAX_MODULES];) -private_lteralenb_main(hash_table_t *g_enb_ral_fd2instance;) - -private_lteralenb_main(void eRAL_get_IPv6_addr (const char* if_name);) -public_lteralenb_main( void eRAL_init_default_values (void);) -private_lteralenb_main(int eRAL_initialize (void);) -private_lteralenb_main(void eRAL_process_file_descriptors(struct epoll_event *events, int nb_events);) -public_lteralenb_main( void* eRAL_task (void *args_p);) - -#endif diff --git a/openair3/RAL-LTE/LTE_RAL_ENB/INCLUDE/lteRALenb_mih_msg.h b/openair3/RAL-LTE/LTE_RAL_ENB/INCLUDE/lteRALenb_mih_msg.h deleted file mode 100755 index a6b16249d3..0000000000 --- a/openair3/RAL-LTE/LTE_RAL_ENB/INCLUDE/lteRALenb_mih_msg.h +++ /dev/null @@ -1,202 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ -/*! \file lteRALenb_mih_msg.h - * \brief - * \author GAUTHIER Lionel, MAUREL Frederic, WETTERWALD Michelle - * \date 2012 - * \version - * \note - * \bug - * \warning - */ - -#ifndef __LTE_RAL_ENB_MIH_MSG_H__ -#define __LTE_RAL_ENB_MIH_MSG_H__ -//----------------------------------------------------------------------------- -# ifdef LTE_RAL_ENB_MIH_MSG_C -# define private_lteralenb_mih_msg(x) x -# define protected_lteralenb_mih_msg(x) x -# define public_lteralenb_mih_msg(x) x -# else -# ifdef LTE_RAL_ENB -# define private_lteralenb_mih_msg(x) -# define protected_lteralenb_mih_msg(x) extern x -# define public_lteralenb_mih_msg(x) extern x -# else -# define private_lteralenb_mih_msg(x) -# define protected_lteralenb_mih_msg(x) -# define public_lteralenb_mih_msg(x) extern x -# endif -# endif -//----------------------------------------------------------------------------- -#include "lteRALenb.h" - -#include "MIH_C_Types.h" -#include "MIH_C_header_codec.h" -#include "MIH_C_Link_Primitives.h" - -/****************************************************************************/ -/******************** G L O B A L V A R I A B L E S ********************/ -/****************************************************************************/ - - -/****************************************************************************/ -/****************** E X P O R T E D F U N C T I O N S ******************/ -/****************************************************************************/ -protected_lteralenb_mih_msg(void eRAL_MIH_C_3GPP_ADDR_load_3gpp_str_address(ral_enb_instance_t instanceP, MIH_C_3GPP_ADDR_T* _3gpp_addr_pP, u_int8_t* str_pP)); - -protected_lteralenb_mih_msg(int eRAL_mihf_connect(ral_enb_instance_t instanceP);) - -protected_lteralenb_mih_msg(int eRAL_mih_link_process_message(ral_enb_instance_t instanceP);) -private_lteralenb_mih_msg(void eRAL_print_buffer(const u_int8_t * bufferP, int lenP);) -/* - * -------------------------------------------------------------------------- - * MIH service management messages - * -------------------------------------------------------------------------- - */ - -/* MIH_C_MESSAGE_LINK_REGISTER_INDICATION_ID */ -protected_lteralenb_mih_msg(void eRAL_send_link_register_indication(\ - ral_enb_instance_t instanceP,\ - MIH_C_TRANSACTION_ID_T *transaction_idP);) - -/* MIH_C_MESSAGE_LINK_CAPABILITY_DISCOVER_CONFIRM_ID */ -private_lteralenb_mih_msg(void eRAL_send_capability_discover_confirm(\ - ral_enb_instance_t instanceP,\ - MIH_C_TRANSACTION_ID_T *tidP,\ - MIH_C_STATUS_T *statusP,\ - MIH_C_LINK_EVENT_LIST_T *link_evt_listP,\ - MIH_C_LINK_CMD_LIST_T *link_cmd_listP);) - -/* MIH_C_MESSAGE_LINK_EVENT_SUBSCRIBE_CONFIRM_ID */ -protected_lteralenb_mih_msg(void eRAL_send_event_subscribe_confirm(\ - ral_enb_instance_t instanceP,\ - MIH_C_TRANSACTION_ID_T *transaction_idP,\ - MIH_C_STATUS_T *statusP,\ - MIH_C_LINK_EVENT_LIST_T *link_event_listP);) - -/* MIH_C_MESSAGE_LINK_EVENT_UNSUBSCRIBE_CONFIRM_ID */ -protected_lteralenb_mih_msg(void eRAL_send_event_unsubscribe_confirm(\ - ral_enb_instance_t instanceP,\ - MIH_C_TRANSACTION_ID_T *transaction_idP,\ - MIH_C_STATUS_T *statusP,\ - MIH_C_LINK_EVENT_LIST_T *link_event_listP);) - -/* - * -------------------------------------------------------------------------- - * MIH event messages - * -------------------------------------------------------------------------- - */ - -/* MIH_C_MESSAGE_LINK_DETECTED_INDICATION_ID */ -protected_lteralenb_mih_msg(void eRAL_send_link_detected_indication(\ - ral_enb_instance_t instanceP,\ - MIH_C_TRANSACTION_ID_T *transaction_idP,\ - MIH_C_LINK_DET_INFO_T *link_detected_infoP);) - -/* MIH_C_MESSAGE_LINK_UP_INDICATION_ID */ -protected_lteralenb_mih_msg(void eRAL_send_link_up_indication(\ - ral_enb_instance_t instanceP,\ - MIH_C_TRANSACTION_ID_T *transaction_idP,\ - MIH_C_LINK_TUPLE_ID_T *link_identifierP,\ - MIH_C_LINK_ADDR_T *old_access_routerP,\ - MIH_C_LINK_ADDR_T *new_access_routerP,\ - MIH_C_IP_RENEWAL_FLAG_T *ip_renewal_flagP,\ - MIH_C_IP_MOB_MGMT_T *mobility_mngtP);) - -/* MIH_C_MESSAGE_LINK_DOWN_INDICATION_ID */ -private_lteralenb_mih_msg(void eRAL_send_link_down_indication(\ - ral_enb_instance_t instanceP,\ - MIH_C_TRANSACTION_ID_T *transaction_idP,\ - MIH_C_LINK_TUPLE_ID_T *link_identifierP,\ - MIH_C_LINK_ADDR_T *old_access_routerP,\ - MIH_C_LINK_DN_REASON_T *reason_codeP);) - -/* MIH_C_MESSAGE_LINK_PARAMETERS_REPORT_INDICATION_ID */ -protected_lteralenb_mih_msg(void eRAL_send_link_parameters_report_indication(\ - ral_enb_instance_t instanceP,\ - MIH_C_TRANSACTION_ID_T *transaction_idP,\ - MIH_C_LINK_TUPLE_ID_T *link_identifierP,\ - MIH_C_LINK_PARAM_RPT_LIST_T *link_parameters_report_listP);) - -/* MIH_C_MESSAGE_LINK_GOING_DOWN_INDICATION_ID */ -private_lteralenb_mih_msg(void eRAL_send_link_going_down_indication(\ - ral_enb_instance_t instanceP,\ - MIH_C_TRANSACTION_ID_T *transaction_idP,\ - MIH_C_LINK_TUPLE_ID_T *link_identifierP,\ - MIH_C_UNSIGNED_INT2_T *time_intervalP,\ - MIH_C_LINK_GD_REASON_T *link_going_down_reasonP);) - -/* MIH_C_MESSAGE_LINK_HANDOVER_IMMINENT_INDICATION_ID */ - -/* MIH_C_MESSAGE_LINK_HANDOVER_COMPLETE_INDICATION_ID */ - -/* MIH_C_MESSAGE_LINK_PDU_TRANSMIT_STATUS_INDICATION_ID */ - -/* - * -------------------------------------------------------------------------- - * MIH command messages - * -------------------------------------------------------------------------- - */ - -/* MIH_C_MESSAGE_LINK_GET_PARAMETERS_CONFIRM_ID */ -protected_lteralenb_mih_msg(void eRAL_send_get_parameters_confirm(\ - ral_enb_instance_t instanceP, - MIH_C_TRANSACTION_ID_T *transaction_idP,\ - MIH_C_STATUS_T *statusP,\ - MIH_C_LINK_PARAM_LIST_T *link_parameters_status_listP,\ - MIH_C_LINK_STATES_RSP_LIST_T *link_states_response_listP,\ - MIH_C_LINK_DESC_RSP_LIST_T *link_descriptors_response_listP);) - -/* MIH_C_MESSAGE_LINK_CONFIGURE_THRESHOLDS_CONFIRM_ID */ -protected_lteralenb_mih_msg(void eRAL_send_configure_thresholds_confirm(\ - ral_enb_instance_t instanceP, - MIH_C_TRANSACTION_ID_T *transaction_idP,\ - MIH_C_STATUS_T *statusP,\ - MIH_C_LINK_CFG_STATUS_LIST_T *link_configure_status_listP);) - -/* MIH_C_MESSAGE_LINK_ACTION_CONFIRM_ID */ -protected_lteralenb_mih_msg(void eRAL_send_link_action_confirm(\ - ral_enb_instance_t instanceP, - MIH_C_TRANSACTION_ID_T *transaction_idP,\ - MIH_C_STATUS_T *statusP,\ - MIH_C_LINK_SCAN_RSP_LIST_T *scan_response_setP,\ - MIH_C_LINK_AC_RESULT_T *link_action_resultP);) - -/* - * -------------------------------------------------------------------------- - * MIH information messages - * -------------------------------------------------------------------------- - */ -protected_lteralenb_mih_msg(int eRAL_mihf_connect (ral_enb_instance_t instanceP);) -private_lteralenb_mih_msg( int eRAL_send_to_mih (ral_enb_instance_t instanceP, const u_int8_t *bufferP, int lenP);) -private_lteralenb_mih_msg( int eRAL_mih_link_msg_decode(ral_enb_instance_t instanceP, Bit_Buffer_t* bbP, MIH_C_Message_Wrapper_t *message_wrapperP);) -/****************************************************************************/ - -#endif diff --git a/openair3/RAL-LTE/LTE_RAL_ENB/INCLUDE/lteRALenb_parameters.h b/openair3/RAL-LTE/LTE_RAL_ENB/INCLUDE/lteRALenb_parameters.h deleted file mode 100755 index 10d44c47c6..0000000000 --- a/openair3/RAL-LTE/LTE_RAL_ENB/INCLUDE/lteRALenb_parameters.h +++ /dev/null @@ -1,78 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ -/*! \file lteRALenb_parameters.h - * \brief - * \author GAUTHIER Lionel, MAUREL Frederic, WETTERWALD Michelle - * \date 2012 - * \version - * \note - * \bug - * \warning - */ - -#ifndef __LTE_RAL_ENB_PARAMETERS_H__ -#define __LTE_RAL_ENB_PARAMETERS_H__ -//----------------------------------------------------------------------------- -# ifdef LTE_RAL_ENB_PARAMETERS_C -# define private_lteralenb_parameters(x) x -# define protected_lteralenb_parameters(x) x -# define public_lteralenb_parameters(x) x -# else -# ifdef LTE_RAL_ENB -# define private_lteralenb_parameters(x) -# define protected_lteralenb_parameters(x) extern x -# define public_lteralenb_parameters(x) extern x -# else -# define private_lteralenb_parameters(x) -# define protected_lteralenb_parameters(x) -# define public_lteralenb_parameters(x) extern x -# endif -# endif -//----------------------------------------------------------------------------- -#include "lteRALenb.h" - -/****************************************************************************/ -/********************* G L O B A L C O N S T A N T S *******************/ -/****************************************************************************/ - -/****************************************************************************/ -/************************ G L O B A L T Y P E S ************************/ -/****************************************************************************/ - -/****************************************************************************/ -/******************** G L O B A L V A R I A B L E S ********************/ -/****************************************************************************/ - -/****************************************************************************/ -/****************** E X P O R T E D F U N C T I O N S ******************/ -/****************************************************************************/ - -void eRAL_get_parameters_request(ral_enb_instance_t instanceP, MIH_C_Message_Link_Get_Parameters_request_t* messageP); - -#endif diff --git a/openair3/RAL-LTE/LTE_RAL_ENB/INCLUDE/lteRALenb_process.h b/openair3/RAL-LTE/LTE_RAL_ENB/INCLUDE/lteRALenb_process.h deleted file mode 100755 index 9f5024de0b..0000000000 --- a/openair3/RAL-LTE/LTE_RAL_ENB/INCLUDE/lteRALenb_process.h +++ /dev/null @@ -1,76 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ -/*! \file lteRALenb_process.h - * \brief - * \author GAUTHIER Lionel, MAUREL Frederic, WETTERWALD Michelle - * \date 2012 - * \version - * \note - * \bug - * \warning - */ - -#ifndef __LTE_RAL_ENB_PROCESS_H__ -#define __LTE_RAL_ENB_PROCESS_H__ -//----------------------------------------------------------------------------- -# ifdef LTE_RAL_ENB_PROCESS_C -# define private_lteralenb_process(x) x -# define protected_lteralenb_process(x) x -# define public_lteralenb_process(x) x -# else -# ifdef LTE_RAL_ENB -# define private_lteralenb_process(x) -# define protected_lteralenb_process(x) extern x -# define public_lteralenb_process(x) extern x -# else -# define private_lteralenb_process(x) -# define protected_lteralenb_process(x) -# define public_lteralenb_process(x) extern x -# endif -# endif -//----------------------------------------------------------------------------- -#include "lteRALenb.h" - -protected_lteralenb_process(int eRAL_process_find_channel (ral_enb_instance_t instanceP, unsigned int cnxid, int* mt_ix, int* ch_ix);) -protected_lteralenb_process(int eRAL_process_find_new_channel (ral_enb_instance_t instanceP, int mt_ix);) -private_lteralenb_process( void eRAL_process_clean_channel (struct ral_lte_channel* channel);) -protected_lteralenb_process(char* eRAL_process_mt_addr_to_string (const unsigned char* ip_addr);) -protected_lteralenb_process(void eRAL_process_mt_addr_to_l2id (const unsigned char* mt_addr, unsigned int* l2id);) -private_lteralenb_process( int eRAL_process_cmp_mt_addr (const char* mt_addr, const char* l2id);) -protected_lteralenb_process(int eRAL_process_find_mt_by_addr (ral_enb_instance_t instanceP, const char* mt_addr);) -private_lteralenb_process( void eRAL_process_verify_pending_mt_status(ral_enb_instance_t instanceP);) -protected_lteralenb_process(int eRAL_process_map_qos (ral_enb_instance_t instanceP, int mt_ix, int ch_ix);) -private_lteralenb_process( void eRAL_process_waiting_RB (ral_enb_instance_t instanceP, int mt_ix);) -private_lteralenb_process( void eRAL_process_clean_pending_mt (ral_enb_instance_t instanceP);) -protected_lteralenb_process(void RAL_printInitStatus (ral_enb_instance_t instanceP);) -private_lteralenb_process( void RAL_NAS_measures_polling (ral_enb_instance_t instanceP);) -private_lteralenb_process( void RAL_NAS_report_congestion (ral_enb_instance_t instanceP, int ix);) -private_lteralenb_process( void RAL_NAS_measures_analyze (ral_enb_instance_t instanceP);) -#endif - diff --git a/openair3/RAL-LTE/LTE_RAL_ENB/INCLUDE/lteRALenb_proto.h b/openair3/RAL-LTE/LTE_RAL_ENB/INCLUDE/lteRALenb_proto.h deleted file mode 100755 index cdc270b21c..0000000000 --- a/openair3/RAL-LTE/LTE_RAL_ENB/INCLUDE/lteRALenb_proto.h +++ /dev/null @@ -1,82 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ -/*! \file lteRALenb_proto.h - * \brief This file defines the prototypes of the common functions - * \author WETTERWALD Michelle, GAUTHIER Lionel, MAUREL Frederic - * \date 2013 - * \company EURECOM - * \email: michelle.wetterwald@eurecom.fr, lionel.gauthier@eurecom.fr, frederic.maurel@eurecom.fr - */ -/*******************************************************************************/ -#ifndef __LTE_RAL_ENB_PROTO_H__ -#define __LTE_RAL_ENB_PROTO_H__ - -# error "Remove inclusion" -//#include "lteRALenb_variables.h" -/****************************************************************************/ -/****************** E X P O R T E D F U N C T I O N S ******************/ -/****************************************************************************/ -/* - * Functions defined in eRALlte_NAS.c - */ - -//void eRALlte_NAS_get_MTs_list(void); -//int eRALlte_NAS_update_MTs_list(void); - -//int eRALlte_NAS_process_message(void); -//int eRALlte_NAS_send_rb_establish_request(int mt_ix, int ch_ix); -//int eRALlte_NAS_send_rb_release_request(int mt_ix, int ch_ix); -//int eRALlte_NAS_send_measure_request(void); - -//#ifdef RAL_REALTIME -//int RAL_process_NAS_message(int ioctl_obj, int ioctl_cmd, int mt_ix, int ch_ix); -//#endif - -/* - * Functions defined in eRALlte_process.c - */ -//int eRALlte_process_find_channel(unsigned int cnxid, int* mt_ix, int* ch_ix); -//int eRALlte_process_find_new_channel(int mt_ix); -//void eRALlte_process_clean_channel(struct ral_lte_channel* pchannel); -//void eRALlte_process_verify_pending_mt_status(void); -//char* eRALlte_process_mt_addr_to_string(const unsigned char* mt_addr); -//void eRALlte_process_mt_addr_to_l2id(const unsigned char* mt_addr, unsigned int* l2id); -//int eRALlte_process_cmp_mt_addr(const char* mt_addr, const char* l2id); -//int eRALlte_process_find_mt_by_addr(const char* mt_addr); -//int eRALlte_process_map_qos(int mt_ix, int ch_ix); -// MW Added -//void RAL_printInitStatus(void); -//void RAL_NAS_measures_polling(void); -//void RAL_NAS_measures_analyze(void); -//void RAL_NAS_report_congestion(int ix); - -//void* ral_enb_task(void *args_p); - -#endif - diff --git a/openair3/RAL-LTE/LTE_RAL_ENB/INCLUDE/lteRALenb_rrc_msg.h b/openair3/RAL-LTE/LTE_RAL_ENB/INCLUDE/lteRALenb_rrc_msg.h deleted file mode 100755 index 87f5bda0a1..0000000000 --- a/openair3/RAL-LTE/LTE_RAL_ENB/INCLUDE/lteRALenb_rrc_msg.h +++ /dev/null @@ -1,69 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ -/*! \file lteRALenb_rrc_msg.h - * \brief - * \author GAUTHIER Lionel - * \date 2013 - * \version - * \note - * \bug - * \warning - */ - -#ifndef __LTE_RAL_ENB_RRC_MSG_H__ -#define __LTE_RAL_ENB_RRC_MSG_H__ -//----------------------------------------------------------------------------- -# ifdef LTE_RAL_ENB_RRC_MSG_C -# define private_lteralenb_rrc_msg(x) x -# define protected_lteralenb_rrc_msg(x) x -# define public_lteralenb_rrc_msg(x) x -# else -# ifdef LTE_RAL_ENB -# define private_lteralenb_rrc_msg(x) -# define protected_lteralenb_rrc_msg(x) extern x -# define public_lteralenb_rrc_msg(x) extern x -# else -# define private_lteralenb_rrc_msg(x) -# define protected_lteralenb_rrc_msg(x) -# define public_lteralenb_rrc_msg(x) extern x -# endif -# endif -//----------------------------------------------------------------------------- -#include "lteRALenb.h" -#include "intertask_interface.h" - -protected_lteralenb_rrc_msg(void eRAL_rx_rrc_ral_system_configuration_indication (instance_t instance, MessageDef *msg_p);) -protected_lteralenb_rrc_msg(void eRAL_rx_rrc_ral_connection_establishment_indication (instance_t instance, MessageDef *msg_p);) -protected_lteralenb_rrc_msg(void eRAL_rx_rrc_ral_connection_reestablishment_indication (instance_t instance, MessageDef *msg_p);) -protected_lteralenb_rrc_msg(void eRAL_rx_rrc_ral_connection_reconfiguration_indication (instance_t instance, MessageDef *msg_p);) -protected_lteralenb_rrc_msg(void eRAL_rx_rrc_ral_measurement_report_indication (instance_t instance, MessageDef *msg_p);) -protected_lteralenb_rrc_msg(void eRAL_rx_rrc_ral_connection_release_indication (instance_t instance, MessageDef *msg_p);) - - -#endif diff --git a/openair3/RAL-LTE/LTE_RAL_ENB/INCLUDE/lteRALenb_subscribe.h b/openair3/RAL-LTE/LTE_RAL_ENB/INCLUDE/lteRALenb_subscribe.h deleted file mode 100755 index 8dbf663cbd..0000000000 --- a/openair3/RAL-LTE/LTE_RAL_ENB/INCLUDE/lteRALenb_subscribe.h +++ /dev/null @@ -1,80 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ -/*! \file lteRALenb_subscribe.h - * \brief - * \author GAUTHIER Lionel, MAUREL Frederic, WETTERWALD Michelle - * \date 2012 - * \version - * \note - * \bug - * \warning - */ - -#ifndef __LTE_RAL_ENB_SUBSCRIBE_H__ -#define __LTE_RAL_ENB_SUBSCRIBE_H__ -//----------------------------------------------------------------------------- -# ifdef LTE_RAL_ENB_PROCESS_C -# define private_lteralenb_subscribe(x) x -# define protected_lteralenb_subscribe(x) x -# define public_lteralenb_subscribe(x) x -# else -# ifdef LTE_RAL_ENB -# define private_lteralenb_subscribe(x) -# define protected_lteralenb_subscribe(x) extern x -# define public_lteralenb_subscribe(x) extern x -# else -# define private_lteralenb_subscribe(x) -# define protected_lteralenb_subscribe(x) -# define public_lteralenb_subscribe(x) extern x -# endif -# endif -//----------------------------------------------------------------------------- -#include "lteRALenb.h" - -/****************************************************************************/ -/********************* G L O B A L C O N S T A N T S *******************/ -/****************************************************************************/ - -/****************************************************************************/ -/************************ G L O B A L T Y P E S ************************/ -/****************************************************************************/ - -/****************************************************************************/ -/******************** G L O B A L V A R I A B L E S ********************/ -/****************************************************************************/ - -/****************************************************************************/ -/****************** E X P O R T E D F U N C T I O N S ******************/ -/****************************************************************************/ - -protected_lteralenb_subscribe(void eRAL_subscribe_request(ral_enb_instance_t instanceP, MIH_C_Message_Link_Event_Subscribe_request_t* msgP);) - -protected_lteralenb_subscribe(void eRAL_unsubscribe_request(ral_enb_instance_t instanceP, MIH_C_Message_Link_Event_Unsubscribe_request_t* msgP);) - -#endif diff --git a/openair3/RAL-LTE/LTE_RAL_ENB/INCLUDE/lteRALenb_thresholds.h b/openair3/RAL-LTE/LTE_RAL_ENB/INCLUDE/lteRALenb_thresholds.h deleted file mode 100755 index 7d5e8b5471..0000000000 --- a/openair3/RAL-LTE/LTE_RAL_ENB/INCLUDE/lteRALenb_thresholds.h +++ /dev/null @@ -1,82 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ -/*! \file lteRALenb_thresholds.h - * \brief - * \author GAUTHIER Lionel, MAUREL Frederic, WETTERWALD Michelle - * \date 2012 - * \version - * \note - * \bug - * \warning - */ - -#ifndef __LTE_RAL_ENB_THRESHOLDS_H__ -#define __LTE_RAL_ENB_THRESHOLDS_H__ -//----------------------------------------------------------------------------- -# ifdef LTE_RAL_ENB_PROCESS_C -# define private_lteralenb_thresholds(x) x -# define protected_lteralenb_thresholds(x) x -# define public_lteralenb_thresholds(x) x -# else -# ifdef LTE_RAL_ENB -# define private_lteralenb_thresholds(x) -# define protected_lteralenb_thresholds(x) extern x -# define public_lteralenb_thresholds(x) extern x -# else -# define private_lteralenb_thresholds(x) -# define protected_lteralenb_thresholds(x) -# define public_lteralenb_thresholds(x) extern x -# endif -# endif -//----------------------------------------------------------------------------- -#include "lteRALenb.h" -#include "intertask_interface.h" - -/****************************************************************************/ -/********************* G L O B A L C O N S T A N T S *******************/ -/****************************************************************************/ - -/****************************************************************************/ -/************************ G L O B A L T Y P E S ************************/ -/****************************************************************************/ - -/****************************************************************************/ -/******************** G L O B A L V A R I A B L E S ********************/ -/****************************************************************************/ - -//LIST(MIH_C_LINK_CFG_PARAM, g_link_cfg_param_thresholds); - -/****************************************************************************/ -/****************** E X P O R T E D F U N C T I O N S ******************/ -/****************************************************************************/ - -protected_lteralenb_thresholds(void eRAL_configure_thresholds_request(ral_enb_instance_t instanceP, MIH_C_Message_Link_Configure_Thresholds_request_t* messageP);) -protected_lteralenb_thresholds(void eRAL_rx_rrc_ral_configure_threshold_conf(instance_t instance, MessageDef *msg_p);) - -#endif diff --git a/openair3/RAL-LTE/LTE_RAL_ENB/INCLUDE/lteRALenb_variables.h b/openair3/RAL-LTE/LTE_RAL_ENB/INCLUDE/lteRALenb_variables.h deleted file mode 100755 index 53f9af00eb..0000000000 --- a/openair3/RAL-LTE/LTE_RAL_ENB/INCLUDE/lteRALenb_variables.h +++ /dev/null @@ -1,166 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ -#ifndef __LTE_RAL_ENB_VARIABLES_H__ -#define __LTE_RAL_ENB_VARIABLES_H__ - -// Define working mode : Dummy or Realtime -//#define RAL_DUMMY -#define RAL_REALTIME - -//#define ENABLE_MEDIEVAL_DEMO3 -//#define MUSER_CONTROL // in demo3, for triggering the congestion report manually - -//flag to reduce the logs -#define DEBUG_RAL_DETAILS - - - -/****************************************************************************/ -/********************* G L O B A L C O N S T A N T S *******************/ -/****************************************************************************/ - -#ifdef RAL_REALTIME -/*Arguments ioctl command - */ -//arg[0] -//LG#define IO_OBJ_STATS 0 -//LG#define IO_OBJ_CNX 1 -//LG#define IO_OBJ_RB 2 -//LG#define IO_OBJ_MEAS 3 -//LG#define IO_OBJ_MC 4 // multicast - -//arg[1] -//LG#define IO_CMD_ADD 0 -//LG#define IO_CMD_DEL 1 -//LG#define IO_CMD_LIST 2 - -#define NAS_CONNECTED 1 //same as NAS interface -#define NAS_DISCONNECTED 0 -#endif // RAL_REALTIME - -/* Radio Bearer attachment status; must be the same as NAS interface */ -#define RB_CONNECTED NAS_CONNECTED -#define RB_DISCONNECTED NAS_DISCONNECTED - -#define RAL_TRUE 1 -#define RAL_FALSE 0 - - -/*Access Router configuration - */ -#ifdef RAL_REALTIME -//#define NAS_RG_NETL_MAX_RABS 27 //spec value -#define NAS_RG_NETL_MAX_RABS 5 //test value -#define NAS_RG_NETL_MAX_MEASURE_NB 5 -#define NAS_RG_NETL_MAX_MTs 3 -#endif - -/* Maximum number of supported Radio Bearers */ -#define RAL_MAX_RB NAS_RG_NETL_MAX_RABS -/* Maximum number of supported Mobile Terminals */ -#define RAL_MAX_MT NAS_RG_NETL_MAX_MTs -/* Maximum number of Radio Bearers per User Equipment */ -#define RAL_MAX_RB_PER_UE 32 -/* Default Radio Bearer identifier */ -#define RAL_DEFAULT_MC_RAB_ID 5 -#define RAL_DEFAULT_RAB_ID 6 // RBID 5 => MBMS, 6 => DEFAULTRAB, 7+ => others -/* Default Radio Bearer QoS value */ -#define RAL_DEFAULT_RAB_QoS 2 // RRC_QOS_CONV_64_64 -/* Default current cell identifier */ -#define RAL_DEFAULT_CELL_ID 5 -// Constants for Measures -#define RAL_DEFAULT_MEAS_POLLING_INTERVAL 51 -#define RAL_DEFAULT_CONGESTION_THRESHOLD 80 - -/* Default bit rates */ -#define RAL_BITRATE_32k 32000 -#define RAL_BITRATE_64k 64000 -#define RAL_BITRATE_128k 128000 -#define RAL_BITRATE_256k 256000 -#define RAL_BITRATE_320k 320000 -#define RAL_BITRATE_384k 384000 -#define RAL_BITRATE_440k 440000 - -/* Public Land Mobile Network */ -#define DEFAULT_PLMN_SIZE 3 -#ifdef DEFINE_GLOBAL_CONSTANTS -const u_int8_t DefaultPLMN[DEFAULT_PLMN_SIZE] = {0x20, 0x80, 0x20}; -#else -extern const u_int8_t DefaultPLMN[DEFAULT_PLMN_SIZE]; -#endif - -/*Destination addresses - */ -enum { - ADDR_MT1 = 0, - ADDR_MT2, - ADDR_MBMS, - ADDR_MT3, - ADDR_MAX -}; - -#ifdef DEFINE_GLOBAL_CONSTANTS // Modified MW 23/05/13 -const char DestIpv6Addr[ADDR_MAX][16] = { // DUMMY - // MT1 - 2001:660:382:14:335:600:8014:9150 - {0x20,0x01,0x06,0x60,0x03,0x82,0x00,0x14,0x03,0x35,0x06,0x00,0x80,0x14,0x91,0x50}, - // MT2 - 2001:660:382:14:335:600:8014:9151 - {0x20,0x01,0x06,0x60,0x03,0x82,0x00,0x14,0x03,0x35,0x06,0x00,0x80,0x14,0x91,0x51}, - // Multicast - FF3E:20:2001:DB8::43 - {0xFF,0x3E,0x00,0x20,0x20,0x01,0x0D,0xB8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x43}, - // MT3 - 2001:660:382:14:335:600:8014:9153 - {0x20,0x01,0x06,0x60,0x03,0x82,0x00,0x14,0x03,0x35,0x06,0x00,0x80,0x14,0x91,0x53} -}; -#else -extern const char DestIpv6Addr[ADDR_MAX][16]; -#endif - -typedef int ral_enb_instance_t; - -/****************************************************************************/ -/************************ G L O B A L T Y P E S ************************/ -/****************************************************************************/ - -/* List of link action types */ -TYPEDEF_BITMAP8(MIH_C_LINK_AC_TYPE_LIST); - - - - -/****************************************************************************/ -/******************** G L O B A L V A R I A B L E S ********************/ -/****************************************************************************/ - -//extern struct ral_lte_priv *ralpriv; - -/****************************************************************************/ -/****************** E X P O R T E D F U N C T I O N S ******************/ -/****************************************************************************/ - -#endif - diff --git a/openair3/RAL-LTE/LTE_RAL_ENB/INCLUDE/rrc_d_types.h b/openair3/RAL-LTE/LTE_RAL_ENB/INCLUDE/rrc_d_types.h deleted file mode 100755 index 3324f6237e..0000000000 --- a/openair3/RAL-LTE/LTE_RAL_ENB/INCLUDE/rrc_d_types.h +++ /dev/null @@ -1,38 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ -#ifndef __RRC_DTYPES_H__ -#define __RRC_DTYPES_H__ - -# error "Remove inclusion" -//typedef unsigned char uint8_t; -//typedef unsigned short uint16_t; -//typedef unsigned int uint32_t; - - -#endif diff --git a/openair3/RAL-LTE/LTE_RAL_ENB/MIH-USER/dist/eNB_lte_user.conf b/openair3/RAL-LTE/LTE_RAL_ENB/MIH-USER/dist/eNB_lte_user.conf deleted file mode 100755 index 4e14bcf4a9..0000000000 --- a/openair3/RAL-LTE/LTE_RAL_ENB/MIH-USER/dist/eNB_lte_user.conf +++ /dev/null @@ -1,40 +0,0 @@ -#=============================================================================== -# Brief : MIH-User configuration file -# Authors : Carlos Guimaraes -# Bruno Santos -#------------------------------------------------------------------------------- -# ODTONE - Open Dot Twenty One -# -# Copyright (C) 2009-2012 Universidade Aveiro -# Copyright (C) 2009-2012 Instituto de Telecomunicações - Pólo Aveiro -# -# This software is distributed under a license. The full license -# agreement can be found in the file LICENSE in this distribution. -# This software may not be copied, modified, sold or distributed -# other than expressed in the named license agreement. -# -# This software is distributed without any warranty. -#=============================================================================== - -## -## User id -## -[user] -id = user - -## -## Commands supported by the MIH-User -## -commands = mih_link_get_parameters, mih_link_configure_thresholds, mih_link_actions, mih_net_ho_candidate_query, mih_net_ho_commit, mih_n2n_ho_query_resources, mih_n2n_ho_commit, mih_n2n_ho_complete, mih_mn_ho_candidate_query, mih_mn_ho_commit, mih_mn_ho_complete - -## -## Port used for communication with MIHF -## -[conf] -port = 1234 - -## -## MIHF configuration. For the default demonstration leave as is. -## -[mihf] -local_port = 1025 diff --git a/openair3/RAL-LTE/LTE_RAL_ENB/MIH-USER/dist/link_sap.conf b/openair3/RAL-LTE/LTE_RAL_ENB/MIH-USER/dist/link_sap.conf deleted file mode 100755 index 4ca476fbbe..0000000000 --- a/openair3/RAL-LTE/LTE_RAL_ENB/MIH-USER/dist/link_sap.conf +++ /dev/null @@ -1,47 +0,0 @@ -#=============================================================================== -# Brief : Link SAP configuration file -# Authors : Carlos Guimaraes -# Bruno Santos -#------------------------------------------------------------------------------- -# ODTONE - Open Dot Twenty One -# -# Copyright (C) 2009-2012 Universidade Aveiro -# Copyright (C) 2009-2012 Instituto de Telecomunicações - Pólo Aveiro -# -# This software is distributed under a license. The full license -# agreement can be found in the file LICENSE in this distribution. -# This software may not be copied, modified, sold or distributed -# other than expressed in the named license agreement. -# -# This software is distributed without any warranty. -#=============================================================================== - -[link] -## -## Link SAP identifier -## -id=link1 - -## -## Link SAP listening -## -port = 1235 - -## -## Link SAP interface technology -## -tec = LTE - -## -## Link SAP interface address -## -link_addr = 00:11:22:33:44:55 - -## -## Comma separated list of the Link SAP supported events -## -event_list = link_detected, link_up, link_down, link_parameters_report, link_going_down, link_handover_imminent, link_handover_complete - -[mihf] -ip=127.0.0.1 -local_port=1025 diff --git a/openair3/RAL-LTE/LTE_RAL_ENB/MIH-USER/dist/odtone.conf b/openair3/RAL-LTE/LTE_RAL_ENB/MIH-USER/dist/odtone.conf deleted file mode 100755 index fd3ef9d859..0000000000 --- a/openair3/RAL-LTE/LTE_RAL_ENB/MIH-USER/dist/odtone.conf +++ /dev/null @@ -1,71 +0,0 @@ -#=============================================================================== -# Brief : MIHF configuration file -# Authors : Carlos Guimaraes -#------------------------------------------------------------------------------- -# ODTONE - Open Dot Twenty One -# -# Copyright (C) 2009-2012 Universidade Aveiro -# Copyright (C) 2009-2012 Instituto de Telecomunicações - Pólo Aveiro -# -# This software is distributed under a license. The full license -# agreement can be found in the file LICENSE in this distribution. -# This software may not be copied, modified, sold or distributed -# other than expressed in the named license agreement. -# -# This software is distributed without any warranty. -#=============================================================================== - -[mihf] -## -## This mihf's id -## -## Usage: id = -## -id = mihf1 - -## -## Port on localhost that MIH Users and MIH Link SAPs connect to. -## -## Usage: local_port = -## -local_port = 1025 - -## -## Port to which remote peer MIHF connect to -## -## Usage: remote_port = -## -#remote_port = 4551 - -## -## Comma seperated list of remote MIHF's -## -## If you want to test remote MIHF communication add an entry here -## with the IP address of the remote MIHF. -## -## Usage: peers = , ... -## -#peers = mihf2 0.0.0.0 4552 - -## -## Comma separated list of local MIH User SAPs id's and ports -## -## Usage: users = [ ], ... -## Note: If no command is specified, the MIHF will assume that the MIH-User -## supports all MIH_***_HO_*** commands and the MIH_Get_Information -## Note: If no query is specified, the MIHF will assume that the MIH-User does -## not support the MIH_Get_Information command. -## -users = user 1234 - -## -## Comma separated list of local MIH Link SAPs id's and ports. -## -## Usage: links = [ ], ... -## -#links = wifi 1235 802_11 00:11:22:33:44:55, lte 1234 LTE 00:11:22 5 - -## -## Comma separated list of the MIHF's transport protocol -## -transport = udp diff --git a/openair3/RAL-LTE/LTE_RAL_ENB/MIH-USER/lte_test_user/Jamfile b/openair3/RAL-LTE/LTE_RAL_ENB/MIH-USER/lte_test_user/Jamfile deleted file mode 100755 index ec4608d57a..0000000000 --- a/openair3/RAL-LTE/LTE_RAL_ENB/MIH-USER/lte_test_user/Jamfile +++ /dev/null @@ -1,33 +0,0 @@ -#=============================================================================== -# Brief : MIH-User SAP Application Sample Project Build -# Authors : Carlos Guimaraes -# Bruno Santos -#------------------------------------------------------------------------------- -# ODTONE - Open Dot Twenty One -# -# Copyright (C) 2009-2012 Universidade Aveiro -# Copyright (C) 2009-2012 Instituto de Telecomunicações - Pólo Aveiro -# -# This software is distributed under a license. The full license -# agreement can be found in the file LICENSE in this distribution. -# This software may not be copied, modified, sold or distributed -# other than expressed in the named license agreement. -# -# This software is distributed without any warranty. -#=============================================================================== - -project eNB_lte_user - ; - -exe eNB_lte_user - : rg_mih_usr.cpp - ../../lib/odtone//odtone_base - ../../lib/odtone/mih//odtone_mih - ../../lib/odtone/sap//odtone_sap - ; - -install install - : eNB_lte_user - eNB_lte_user.conf - : ../../dist - ; diff --git a/openair3/RAL-LTE/LTE_RAL_ENB/MIH-USER/lte_test_user/dummy_130606.tgz b/openair3/RAL-LTE/LTE_RAL_ENB/MIH-USER/lte_test_user/dummy_130606.tgz deleted file mode 100644 index 11ef083a92..0000000000 Binary files a/openair3/RAL-LTE/LTE_RAL_ENB/MIH-USER/lte_test_user/dummy_130606.tgz and /dev/null differ diff --git a/openair3/RAL-LTE/LTE_RAL_ENB/MIH-USER/lte_test_user/eNB_lte_user.conf b/openair3/RAL-LTE/LTE_RAL_ENB/MIH-USER/lte_test_user/eNB_lte_user.conf deleted file mode 100755 index 4e14bcf4a9..0000000000 --- a/openair3/RAL-LTE/LTE_RAL_ENB/MIH-USER/lte_test_user/eNB_lte_user.conf +++ /dev/null @@ -1,40 +0,0 @@ -#=============================================================================== -# Brief : MIH-User configuration file -# Authors : Carlos Guimaraes -# Bruno Santos -#------------------------------------------------------------------------------- -# ODTONE - Open Dot Twenty One -# -# Copyright (C) 2009-2012 Universidade Aveiro -# Copyright (C) 2009-2012 Instituto de Telecomunicações - Pólo Aveiro -# -# This software is distributed under a license. The full license -# agreement can be found in the file LICENSE in this distribution. -# This software may not be copied, modified, sold or distributed -# other than expressed in the named license agreement. -# -# This software is distributed without any warranty. -#=============================================================================== - -## -## User id -## -[user] -id = user - -## -## Commands supported by the MIH-User -## -commands = mih_link_get_parameters, mih_link_configure_thresholds, mih_link_actions, mih_net_ho_candidate_query, mih_net_ho_commit, mih_n2n_ho_query_resources, mih_n2n_ho_commit, mih_n2n_ho_complete, mih_mn_ho_candidate_query, mih_mn_ho_commit, mih_mn_ho_complete - -## -## Port used for communication with MIHF -## -[conf] -port = 1234 - -## -## MIHF configuration. For the default demonstration leave as is. -## -[mihf] -local_port = 1025 diff --git a/openair3/RAL-LTE/LTE_RAL_ENB/MIH-USER/lte_test_user/rg_mih_usr.cpp b/openair3/RAL-LTE/LTE_RAL_ENB/MIH-USER/lte_test_user/rg_mih_usr.cpp deleted file mode 100755 index 4084cde793..0000000000 --- a/openair3/RAL-LTE/LTE_RAL_ENB/MIH-USER/lte_test_user/rg_mih_usr.cpp +++ /dev/null @@ -1,1358 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include - -#include -#include -#include - -/////////////////////////////////////////////////////////////////////////////// - -// Definition of the scenario to execute -#define NB_OF_RESOURCES 4 // Should not exceed mih_user::_max_link_action_requests -//#define SCENARIO_1 // Sequentially activate and deactivate each resource -#define SCENARIO_2 // Activate all resources, then deactivate all resources -#define NUM_PARM_REPORT 10 - -/////////////////////////////////////////////////////////////////////////////// -// The scenario coded in this MIH-USER is the following (with eRALlteDummy and NASRGDummy executables) -// +--------+ +-----+ -// |MIH_USER| |MIH-F| -// +---+----+ +--+--+ -// | | _current_link_action_request = 0 -// |---------- User_Register.indication ---------------->| (supported_commands) Handler next msg=user_reg_handler -// | | -// |---------- Capability_Discover.request ------------->| Handler next msg=receive_MIH_Capability_Discover_confirm -// |<--------- Capability_Discover.confirm --------------| (success) -// | | -// |---------- Event_Subscribe.request ----------------->| Handler next msg=receive_MIH_Event_Subscribe_confirm -// |<--------- Event_Subscribe.confirm ------------------| (success) -// | | -// ------------------------------------------------------------------------------------------------------------------------ -// Scenario 1: Sequentially activate and deactivate each resource -// ------------------------------------------------------------------------------------------------------------------------ -// | | -// |---------- Link_Actions.request -------------------->| (activate-resources[_current_link_action_request]) -// | | Handler next msg=receive_MIH_Link_Actions_confirm -// |<--------- Link_Actions.confirm ---------------------| (success) -// |---------- Link_Actions.request -------------------->| (deactivate-resources[_current_link_action_request]) -// | | Handler next msg=receive_MIH_Link_Actions_confirm -// | | _current_link_action_request = _current_link_action_request + 1 -// |<--------- Link_Actions.confirm ---------------------| (success) -// | . | -// | . | -// | . | -// | | -// ------------------------------------------------------------------------------------------------------------------------ -// Scenario 2: Activate all resources, then deactivate all resources -// ------------------------------------------------------------------------------------------------------------------------ -// | | -// |---------- Link_Actions.request -------------------->| (activate-resources[_current_link_action_request]) -// | | Handler next msg=receive_MIH_Link_Actions_confirm -// | | _current_link_action_request = _current_link_action_request + 1 -// |<--------- Link_Actions.confirm ---------------------| (success) -// | . | -// | . | -// | . | _current_link_action_request = 0 -// |---------- Link_Actions.request -------------------->| (deactivate-resources[_current_link_action_request]) -// | | Handler next msg=receive_MIH_Link_Actions_confirm -// | | _current_link_action_request = _current_link_action_request + 1 -// |<--------- Link_Actions.confirm ---------------------| (success) -// | . | -// | . | -// | . | -// | | -// ------------------------------------------------------------------------------------------------------------------------ -// | | -// |---------- Event_Unsubscribe.request --------------->| Handler next msg=receive_MIH_Event_Unsubscribe_confirm -// |<--------- Event_Subscribe.confirm ------------------| (success) -// | | -// | | -/////////////////////////////////////////////////////////////////////////////// - -static const char* const kConf_MIH_Commands = "user.commands"; - -/////////////////////////////////////////////////////////////////////////////// - -namespace po = boost::program_options; - -using odtone::uint; -using odtone::ushort; -using odtone::sint8; - -odtone::logger log_("[mih_usr]", std::cout); - -/////////////////////////////////////////////////////////////////////////////// - -//----------------------------------------------------------------------------- -void __trim(odtone::mih::octet_string &str, const char chr) -//----------------------------------------------------------------------------- -{ - str.erase(std::remove(str.begin(), str.end(), chr), str.end()); -} -//----------------------------------------------------------------------------- -template std::string StringOf(T object) { -//----------------------------------------------------------------------------- - std::ostringstream os; - os << object; - return(os.str()); -} -//----------------------------------------------------------------------------- -std::string getTimeStamp4Log() -//----------------------------------------------------------------------------- -{ - std::stringstream ss (std::stringstream::in | std::stringstream::out); - struct timespec time_spec; - unsigned int time_now_micros; - unsigned int time_now_s; - clock_gettime (CLOCK_REALTIME, &time_spec); - time_now_s = (unsigned int) time_spec.tv_sec % 3600; - time_now_micros = (unsigned int) time_spec.tv_nsec/1000; - ss << time_now_s << ':' << time_now_micros; - return ss.str(); -} -//----------------------------------------------------------------------------- -std::string status2string(odtone::mih::status statusP){ -//----------------------------------------------------------------------------- - switch (statusP.get()) { - case odtone::mih::status_success: return "SUCCESS";break; - case odtone::mih::status_failure: return "UNSPECIFIED_FAILURE";break; - case odtone::mih::status_rejected: return "REJECTED";break; - case odtone::mih::status_authorization_failure: return "AUTHORIZATION_FAILURE";break; - case odtone::mih::status_network_error: return "NETWORK_ERROR";break; - default: return "UNKNOWN"; - } -} -//----------------------------------------------------------------------------- -std::string link_down_reason2string(odtone::mih::link_dn_reason reasonP){ -//----------------------------------------------------------------------------- - switch (reasonP.get()) { - case odtone::mih::link_dn_reason_explicit_disconnect: return "DN_REASON_EXPLICIT_DISCONNECT";break; - case odtone::mih::link_dn_reason_packet_timeout: return "DN_REASON_PACKET_TIMEOUT";break; - case odtone::mih::link_dn_reason_no_resource: return "DN_REASON_NO_RESOURCE";break; - case odtone::mih::link_dn_reason_no_broadcast: return "DN_REASON_NO_BROADCAST";break; - case odtone::mih::link_dn_reason_authentication_failure: return "DN_REASON_AUTHENTICATION_FAILURE";break; - case odtone::mih::link_dn_reason_billing_failure: return "DN_REASON_BILLING_FAILURE";break; - default: return "DN_REASON_UNKNOWN"; - } -} -//----------------------------------------------------------------------------- -std::string link_going_down_reason2string(odtone::mih::link_gd_reason reasonP){ -//----------------------------------------------------------------------------- - switch (reasonP.get()) { - case odtone::mih::link_gd_reason_explicit_disconnect: return "GD_REASON_EXPLICIT_DISCONNECT";break; - case odtone::mih::link_gd_reason_link_parameter_degrading: return "GD_REASON_PARAMETER_DEGRADING";break; - case odtone::mih::link_gd_reason_low_power: return "GD_REASON_LOW_POWER";break; - case odtone::mih::link_gd_reason_no_resource: return "GD_REASON_NO_RESOURCE";break; - default: return "GD_REASON_UNKNOWN"; - } -} -//----------------------------------------------------------------------------- -std::string evt2string(odtone::mih::mih_evt_list evtP){ -//----------------------------------------------------------------------------- - std::string s; - if(evtP.get(odtone::mih::mih_evt_link_detected)) s = std::string("DETECTED "); - if(evtP.get(odtone::mih::mih_evt_link_up)) s += "UP "; - if(evtP.get(odtone::mih::mih_evt_link_down)) s += "DOWN "; - if(evtP.get(odtone::mih::mih_evt_link_parameters_report)) s += "PARAMETERS_REPORT "; - if(evtP.get(odtone::mih::mih_evt_link_going_down)) s += "GOING_DOWN "; - if(evtP.get(odtone::mih::mih_evt_link_handover_imminent)) s += "HANDOVER_IMMINENT "; - if(evtP.get(odtone::mih::mih_evt_link_handover_complete)) s += "HANDOVER_COMPLETE "; - if(evtP.get(odtone::mih::mih_evt_link_pdu_transmit_status)) s += "PDU_TRANSMIT_STATUS "; - return s; -} -//----------------------------------------------------------------------------- -std::string cmd2string(odtone::mih::mih_cmd_list cmdP){ -//----------------------------------------------------------------------------- - std::string s; - if(cmdP.get(odtone::mih::mih_cmd_link_get_parameters)) s = std::string("Link_Get_Parameters "); - if(cmdP.get(odtone::mih::mih_cmd_link_configure_thresholds)) s += "Link_Configure_Thresholds "; - if(cmdP.get(odtone::mih::mih_cmd_link_actions)) s += "Link_Actions "; - if(cmdP.get(odtone::mih::mih_cmd_net_ho_candidate_query)) s += "Net_HO_Candidate_Query "; - if(cmdP.get(odtone::mih::mih_cmd_net_ho_commit)) s += "Net_HO_Commit "; - if(cmdP.get(odtone::mih::mih_cmd_n2n_ho_query_resources)) s += "N2N_HO_Query_Resources "; - if(cmdP.get(odtone::mih::mih_cmd_n2n_ho_commit)) s += "N2N_HO_Commit "; - if(cmdP.get(odtone::mih::mih_cmd_n2n_ho_complete)) s += "N2N_HO_Complete "; - if(cmdP.get(odtone::mih::mih_cmd_mn_ho_candidate_query)) s += "MN_HO_Candidate_Query "; - if(cmdP.get(odtone::mih::mih_cmd_mn_ho_commit)) s += "MN_HO_Commit "; - if(cmdP.get(odtone::mih::mih_cmd_mn_ho_complete)) s += "MN_HO_Complete "; - return s; -} -//----------------------------------------------------------------------------- -std::string link_type2string(const odtone::mih::link_type& lt) -//----------------------------------------------------------------------------- -{ - switch (lt.get()) { - case odtone::mih::link_type_gsm: return "GSM"; break; - case odtone::mih::link_type_gprs: return "GPRS"; break; - case odtone::mih::link_type_edge: return "EDGE"; break; - case odtone::mih::link_type_ethernet: return "Ethernet"; break; - case odtone::mih::link_type_wireless_other: return "Other"; break; - case odtone::mih::link_type_802_11: return "IEEE 802.11"; break; - case odtone::mih::link_type_cdma2000: return "CDMA-2000"; break; - case odtone::mih::link_type_umts: return "UMTS"; break; - case odtone::mih::link_type_cdma2000_hrpd: return "CDMA-2000-HRPD"; break; - case odtone::mih::link_type_lte: return "LTE"; break; - case odtone::mih::link_type_802_16: return "IEEE 802.16"; break; - case odtone::mih::link_type_802_20: return "IEEE 802.20"; break; - case odtone::mih::link_type_802_22: return "IEEE 802.22"; break; - default: break; - } - return "Unknown link type"; -} -//----------------------------------------------------------------------------- -std::string link_addr2string(const odtone::mih::link_addr *addr) -//----------------------------------------------------------------------------- -{ - if (const odtone::mih::mac_addr *la = boost::get(addr)) { - return la->address(); - } - else if (const odtone::mih::l2_3gpp_3g_cell_id *la = boost::get(addr)) { - char plmn[16]; - sprintf(plmn, "%hhx:%hhx:%hhx", la->plmn_id[0], la->plmn_id[1], la->plmn_id[2]); - return str(boost::format("%s %d") % plmn % la->_cell_id); - } - else if (const odtone::mih::l2_3gpp_2g_cell_id *la = boost::get(addr)) { - char plmn[16]; - sprintf(plmn, "%hhx:%hhx:%hhx", la->plmn_id[0], la->plmn_id[1], la->plmn_id[2]); - return str(boost::format("%s %d %d") % plmn % la->_lac % la->_ci); - } - else if (const odtone::mih::l2_3gpp_addr *la = boost::get(addr)) { - return la->value; - } - else if (const odtone::mih::l2_3gpp2_addr *la = boost::get(addr)) { - return la->value; - } - else if (const odtone::mih::other_l2_addr *la = boost::get(addr)) { - return la->value; - } - return "null"; -} -//----------------------------------------------------------------------------- -std::string l2_3gpp_3g_cell_id2string(odtone::mih::l2_3gpp_3g_cell_id& addr) -//----------------------------------------------------------------------------- -{ - char buffer[256]; - int index = 0; - - index += std::sprintf(&buffer[index], "plmn: -%hhx--%hhx--%hhx-\n", addr.plmn_id[0], addr.plmn_id[1], addr.plmn_id[2]); - index += std::sprintf(&buffer[index], "cell_id: %hhx\n", addr._cell_id); - return buffer; -} -//----------------------------------------------------------------------------- -std::string link_id2string(odtone::mih::link_id linkP) -//----------------------------------------------------------------------------- -{ - std::string s; - s = link_type2string(linkP.type.get()) + " " + link_addr2string(&linkP.addr); - return s; -} -//----------------------------------------------------------------------------- -std::string ip_addr2string(odtone::mih::ip_addr ip_addrP) { -//----------------------------------------------------------------------------- - std::string s; - switch (ip_addrP.type()) { - case odtone::mih::ip_addr::ipv4: s = "ipv4 "; break; - case odtone::mih::ip_addr::ipv6: s = "ipv6 "; break; - default: s = "Unkown type "; - } - s += ip_addrP.address(); - return s; -} -//----------------------------------------------------------------------------- -std::string ip_tuple2string(odtone::mih::ip_tuple ip_tupleP) { -//----------------------------------------------------------------------------- - char buffer[128]; - std::snprintf(buffer, 128, "%s/%d", ip_addr2string(ip_tupleP.ip).c_str(), ip_tupleP.port_val); - return buffer; -} -//----------------------------------------------------------------------------- -std::string ip_proto2string(odtone::mih::proto ip_protoP) { -//----------------------------------------------------------------------------- - switch (ip_protoP.get()) { - case odtone::mih::proto_tcp: return "TCP"; - case odtone::mih::proto_udp: return "UDP"; - default: break; - } - return "Unknown IP protocol"; -} -// TEMP : next 2 functions are commented to restore flow_id as a uint32 -// full structure will be updated later -/*//----------------------------------------------------------------------------- -std::string flow_id2string(odtone::mih::flow_id flowP) { -//----------------------------------------------------------------------------- - std::string s; - odtone::mih::ip_tuple ip; - ip = flowP.src; - s = "SRC = " + ip_tuple2string(flowP.src); - s += ", DST = " + ip_tuple2string(flowP.dst); - s += ", PROTO = " + ip_proto2string(flowP.transport); - return s; -} -//----------------------------------------------------------------------------- -std::string flow_id2string(odtone::mih::link_ac_param link_ac_paramP) { -//----------------------------------------------------------------------------- - if (odtone::mih::resource_desc *res = boost::get(&link_ac_paramP.param)) { - return flow_id2string(res->fid); - } - else if (odtone::mih::flow_attribute *flow = boost::get(&link_ac_paramP.param)) { - return flow_id2string(flow->id); - } - return "null"; -}*/ -//----------------------------------------------------------------------------- -std::string link_ac_result2string(odtone::mih::link_ac_result resultP) -//----------------------------------------------------------------------------- -{ - switch (resultP.get()) { - case odtone::mih::link_ac_success: return "SUCCESS"; break; - case odtone::mih::link_ac_failure: return "FAILURE"; break; - case odtone::mih::link_ac_refused: return "REFUSED"; break; - case odtone::mih::link_ac_incapable: return "INCAPABLE"; break; - default: break; - } - return "Unknown action result"; -} -//----------------------------------------------------------------------------- -std::string link_actions_req2string(odtone::mih::link_action_req link_act_reqP) { -//----------------------------------------------------------------------------- - std::string s; - - s = link_id2string(link_act_reqP.id); - - if(link_act_reqP.action.type == odtone::mih::link_ac_type_none) s += ", AC_TYPE_NONE"; - if(link_act_reqP.action.type == odtone::mih::link_ac_type_disconnect) s += ", AC_TYPE_DISCONNECT"; - if(link_act_reqP.action.type == odtone::mih::link_ac_type_low_power) s += ", AC_TYPE_LOW_POWER"; - if(link_act_reqP.action.type == odtone::mih::link_ac_type_power_down) s += ", AC_TYPE_POWER_DOWN"; - if(link_act_reqP.action.type == odtone::mih::link_ac_type_power_up) s += ", AC_TYPE_POWER_UP"; - if(link_act_reqP.action.type == odtone::mih::link_ac_type_flow_attr) s += ", AC_TYPE_FLOW_ATTR"; - if(link_act_reqP.action.type == odtone::mih::link_ac_type_link_activate_resources) s += ", AC_TYPE_ACTIVATE_RESOURCES"; - if(link_act_reqP.action.type == odtone::mih::link_ac_type_link_deactivate_resources) s += ", AC_TYPE_DEACTIVATE_RESOURCES"; - - if(link_act_reqP.action.attr.get(odtone::mih::link_ac_attr_data_fwd_req)) s += ", AC_ATTR_DATA_FWD_REQ"; - if(link_act_reqP.action.attr.get(odtone::mih::link_ac_attr_scan)) s += ", AC_ATTR_SCAN"; - if(link_act_reqP.action.attr.get(odtone::mih::link_ac_attr_res_retain)) s += ", AC_ATTR_RES_RETAIN"; - - s += ", " + StringOf(link_act_reqP.ex_time) + " ms"; - return s; -} -//----------------------------------------------------------------------------- -std::string net_type_addr_list2string(boost::optional ntalP) { -//----------------------------------------------------------------------------- - std::string s; - odtone::mih::link_id link_id; - - for (odtone::mih::net_type_addr_list::iterator i = ntalP->begin(); i != ntalP->end(); i++) - { - link_id.type = boost::get(i->nettype.link); - link_id.addr = i->addr; - if (i != ntalP->begin()) { - s += " / "; - } - s += link_id2string(link_id); - } - - return s; -} - -/** - * Parse supported commands. - * - * @param cfg Configuration options. - * @return An optional list of supported commands. - */ -boost::optional parse_supported_commands(const odtone::mih::config &cfg) -{ - using namespace boost; - - odtone::mih::mih_cmd_list commands; - - std::map enum_map; - enum_map["mih_link_get_parameters"] = odtone::mih::mih_cmd_link_get_parameters; - enum_map["mih_link_configure_thresholds"] = odtone::mih::mih_cmd_link_configure_thresholds; - enum_map["mih_link_actions"] = odtone::mih::mih_cmd_link_actions; - enum_map["mih_net_ho_candidate_query"] = odtone::mih::mih_cmd_net_ho_candidate_query; - enum_map["mih_net_ho_commit"] = odtone::mih::mih_cmd_net_ho_commit; - enum_map["mih_n2n_ho_query_resources"] = odtone::mih::mih_cmd_n2n_ho_query_resources; - enum_map["mih_n2n_ho_commit"] = odtone::mih::mih_cmd_n2n_ho_commit; - enum_map["mih_n2n_ho_complete"] = odtone::mih::mih_cmd_n2n_ho_complete; - enum_map["mih_mn_ho_candidate_query"] = odtone::mih::mih_cmd_mn_ho_candidate_query; - enum_map["mih_mn_ho_commit"] = odtone::mih::mih_cmd_mn_ho_commit; - enum_map["mih_mn_ho_complete"] = odtone::mih::mih_cmd_mn_ho_complete; - - std::string tmp = cfg.get(kConf_MIH_Commands); - __trim(tmp, ' '); - - char_separator sep1(","); - tokenizer< char_separator > list_tokens(tmp, sep1); - - BOOST_FOREACH(std::string str, list_tokens) { - if(enum_map.find(str) != enum_map.end()) { - commands.set((odtone::mih::mih_cmd_list_enum) enum_map[str]); - } - } - - return commands; -} - -/////////////////////////////////////////////////////////////////////////////// -/** - * This class provides an implementation of an IEEE 802.21 MIH-User. - */ -class mih_user : boost::noncopyable { -public: - /** - * Construct the MIH-User. - * - * @param cfg Configuration options. - * @param io The io_service object that the MIH-User will use to - * dispatch handlers for any asynchronous operations performed on the socket. - */ - mih_user(const odtone::mih::config& cfg, boost::asio::io_service& io); - - /** - * Destruct the MIH-User. - */ - ~mih_user(); - -protected: - /** - * User registration handler. - * - * @param cfg Configuration options. - * @param ec Error Code. - */ - void user_reg_handler(const odtone::mih::config& cfg, const boost::system::error_code& ec); - /** - * Default MIH event handler. - * - * @param msg Received event notification. - * @param ec Error code. - */ - void event_handler(odtone::mih::message& msg, const boost::system::error_code& ec); - /** - * MIH receive message handler. - * - * @param msg Received message. - * @param ec Error code. - */ - void receive_handler(odtone::mih::message& msg, const boost::system::error_code& ec); - - void send_MIH_User_Register_indication(const odtone::mih::config& cfg); - - void send_MIH_Capability_Discover_request(void); - void receive_MIH_Capability_Discover_confirm(odtone::mih::message& msg); - - void send_MIH_Event_Subscribe_request(odtone::mih::link_tuple_id& li, odtone::mih::mih_evt_list& evt); - void receive_MIH_Event_Subscribe_confirm(odtone::mih::message& msg); - - void send_MIH_Event_Unsubscribe_request(void); - void send_MIH_Event_Unsubscribe_request(odtone::mih::link_tuple_id& li, odtone::mih::mih_evt_list& evt); - void receive_MIH_Event_Unsubscribe_confirm(odtone::mih::message& msg); - - void send_MIH_Link_Actions_request(const odtone::mih::link_id& link, odtone::mih::link_ac_type type); - void receive_MIH_Link_Actions_confirm(odtone::mih::message& msg); - void receive_MIH_Link_Parameters_Report(odtone::mih::message& msg, const boost::system::error_code& ec); - - void send_MIH_Link_Configure_Thresholds_request(odtone::mih::message& msg, const boost::system::error_code& ec); - void receive_MIH_Link_Configure_Thresholds_confirm(odtone::mih::message& msg, const boost::system::error_code& ec); - -private: - odtone::sap::user _mihf; /**< User SAP helper. */ - odtone::mih::id _mihfid; /**< MIHF destination ID. */ - odtone::mih::id _mihuserid; /**< MIH_USER ID. */ - - odtone::mih::ip_addr _mihf_ip; /**< MIHF IP address */ - odtone::mih::port _mihf_lport; /**< MIHF local port number */ - - odtone::mih::link_id_list _link_id_list; /**< List of network link identifiers */ - odtone::mih::mih_evt_list _subs_evt_list; /**< List of subscribed link events */ - - odtone::mih::link_ac_type _last_link_action_type; - odtone::uint _current_link_action_request, _nb_of_link_action_requests; - odtone::uint link_threshold_request, link_measures_request, link_measures_counter; - odtone::mih::link_id rcv_link_id; - - static const odtone::uint _max_link_action_requests = 4; - - void receive_MIH_Link_Detected_indication(odtone::mih::message& msg); - - void receive_MIH_Link_Up_indication(odtone::mih::message& msg); - - void receive_MIH_Link_Down_indication(odtone::mih::message& msg); - - void receive_MIH_Link_Going_Down_indication(odtone::mih::message& msg); - -}; - -//----------------------------------------------------------------------------- -mih_user::mih_user(const odtone::mih::config& cfg, boost::asio::io_service& io) - : _mihf(cfg, io, boost::bind(&mih_user::event_handler, this, _1, _2)), - _last_link_action_type(odtone::mih::link_ac_type_none), - _current_link_action_request(0), _nb_of_link_action_requests(NB_OF_RESOURCES) -//----------------------------------------------------------------------------- -{ - - odtone::mih::octet_string user_id = cfg.get(odtone::sap::kConf_MIH_SAP_id); - _mihuserid.assign(user_id.c_str()); - - odtone::mih::octet_string dest_id = cfg.get(odtone::sap::kConf_MIH_SAP_dest); - _mihfid.assign(dest_id.c_str()); - - odtone::mih::octet_string src = cfg.get(odtone::sap::kConf_MIHF_Ip); - boost::asio::ip::address ip = boost::asio::ip::address::from_string(src); - if (ip.is_v4()) { - odtone::mih::ip_addr ip_addr(odtone::mih::ip_addr::ipv4, src); - _mihf_ip = ip_addr; - } - else if (ip.is_v6()) { - odtone::mih::ip_addr ip_addr(odtone::mih::ip_addr::ipv6, src); - _mihf_ip = ip_addr; - } - - _mihf_lport = cfg.get(odtone::sap::kConf_MIHF_Local_Port); - - //_nb_of_link_action_requests = NB_OF_RESOURCES; - if (_nb_of_link_action_requests > _max_link_action_requests) { - _nb_of_link_action_requests = _max_link_action_requests; - } - - _link_id_list.clear(); - _subs_evt_list.clear(); - link_threshold_request = 0; - link_measures_request =0; - link_measures_counter =0; - log_(0, "[MSC_NEW]["+getTimeStamp4Log()+"][MIH-USER="+_mihuserid.to_string()+"]\n"); - - // Send MEDIEVAL specific MIH_User_Register.indication message to the MIH-F - mih_user::send_MIH_User_Register_indication(cfg); -} - -//----------------------------------------------------------------------------- -mih_user::~mih_user() -//----------------------------------------------------------------------------- -{ -} - -//----------------------------------------------------------------------------- -void mih_user::user_reg_handler(const odtone::mih::config& cfg, const boost::system::error_code& ec) -//----------------------------------------------------------------------------- -{ - log_(0, "MIH-User register result: ", ec.message(), "\n"); - - // - // Let's fire a capability discover request to get things moving - // - mih_user::send_MIH_Capability_Discover_request(); -} - -//----------------------------------------------------------------------------- -void mih_user::event_handler(odtone::mih::message& msg, const boost::system::error_code& ec) -//----------------------------------------------------------------------------- -{ - if (ec) { - log_(0, __FUNCTION__, " error: ", ec.message()); - return; - } - - switch (msg.mid()) { - case odtone::mih::indication::link_detected: - mih_user::receive_MIH_Link_Detected_indication(msg); - break; - - case odtone::mih::indication::link_up: - mih_user::receive_MIH_Link_Up_indication(msg); - break; - - case odtone::mih::indication::link_down: - mih_user::receive_MIH_Link_Down_indication(msg); - break; - - case odtone::mih::indication::link_going_down: - mih_user::receive_MIH_Link_Going_Down_indication(msg); - break; - - case odtone::mih::indication::link_handover_imminent: - log_(0, "MIH-User has received a local event \"link_handover_imminent\""); - break; - - case odtone::mih::indication::link_handover_complete: - log_(0, "MIH-User has received a local event \"link_handover_complete\""); - break; - - case odtone::mih::indication::link_parameters_report: - //log_(0, "MIH-User has received a local event \"link_parameters_report\""); - mih_user::receive_MIH_Link_Parameters_Report(msg, ec); - if (link_threshold_request == 0){ - mih_user::send_MIH_Link_Configure_Thresholds_request(msg, ec); - link_threshold_request =1; - } else if (link_threshold_request == 1){ - link_measures_counter ++; - // Stop measures after 5 reports - if (link_measures_counter == NUM_PARM_REPORT){ - mih_user::send_MIH_Link_Configure_Thresholds_request(msg, ec); - } - } - break; - - case odtone::mih::indication::link_pdu_transmit_status: - log_(0, "MIH-User has received a local event \"link_pdu_transmit_status\""); - break; - - case odtone::mih::confirm::link_configure_thresholds: - mih_user::receive_MIH_Link_Configure_Thresholds_confirm(msg, ec); - break; - - default: - log_(0, "MIH-User has received UNKNOWN local event"); - break; - } -} - -//----------------------------------------------------------------------------- -void mih_user::receive_handler(odtone::mih::message& msg, const boost::system::error_code& ec) -//----------------------------------------------------------------------------- -{ - if (ec) { - log_(0, __FUNCTION__, " error: ", ec.message()); - return; - } - - switch (msg.mid()) { - - case odtone::mih::confirm::capability_discover: - mih_user::receive_MIH_Capability_Discover_confirm(msg); - break; - - case odtone::mih::confirm::event_subscribe: - mih_user::receive_MIH_Event_Subscribe_confirm(msg); - break; - - case odtone::mih::confirm::event_unsubscribe: - mih_user::receive_MIH_Event_Unsubscribe_confirm(msg); - break; - - case odtone::mih::confirm::link_actions: - mih_user::receive_MIH_Link_Actions_confirm(msg); - - break; - default: - log_(0, "MIH-User has received UNKNOWN message (", msg.mid(), ")\n"); - break; - } -} - -//----------------------------------------------------------------------------- -void mih_user::receive_MIH_Link_Detected_indication(odtone::mih::message& msg) -//----------------------------------------------------------------------------- -{ - log_(0, "MIH_Link_Detected.indication - RECEIVED - Begin\n"); - - odtone::mih::link_det_info_list ldil; - - msg >> odtone::mih::indication() - & odtone::mih::tlv_link_det_info_list(ldil); - - log_(0, "[MSC_MSG]["+getTimeStamp4Log()+"]["+ msg.source().to_string() +"][--- MIH_Link_Detected.indication --->]["+msg.destination().to_string()+"]\n"); - - // Display message parameters - // TODO: for each link_det_info in the list {display LINK_DET_INFO} - - log_(0, "MIH_Link_Detected.indication - End\n"); -} - -//----------------------------------------------------------------------------- -void mih_user::receive_MIH_Link_Up_indication(odtone::mih::message& msg) -//----------------------------------------------------------------------------- -{ - log_(0, "MIH_Link_Up.indication - RECEIVED - Begin\n"); - - odtone::mih::link_tuple_id link; -// odtone::mih::tlv_old_access_router oldAR; - - msg >> odtone::mih::indication() - & odtone::mih::tlv_link_identifier(link); -// & odtone::mih::tlv_old_access_router(oar); - - log_(0, "[MSC_MSG]["+getTimeStamp4Log()+"]["+ msg.source().to_string() +"][--- MIH_Link_Up.indication --->]["+msg.destination().to_string()+"]\n"); - - // Display message parameters - log_(0, " - LINK_ID - Link identifier: ", link_id2string(link).c_str(), "\n"); - - log_(0, "MIH_Link_Up.indication - End\n"); -} - -//----------------------------------------------------------------------------- -void mih_user::receive_MIH_Link_Down_indication(odtone::mih::message& msg) -//----------------------------------------------------------------------------- -{ - log_(0, "MIH_Link_Down.indication - RECEIVED - Begin\n"); - - odtone::mih::link_tuple_id link; - boost::optional addr; - odtone::mih::link_dn_reason ldr; - - msg >> odtone::mih::indication() - & odtone::mih::tlv_link_identifier(link) - & odtone::mih::tlv_old_access_router(addr) - & odtone::mih::tlv_link_dn_reason(ldr); - -// log_(0, "[MSC_MSG]["+getTimeStamp4Log()+"]["+ msg.source().to_string() +"][--- MIH_Link_Down.indication\\n"+link_down_reason2string(ldr).c_str()+" --->]["+msg.destination().to_string()+"]\n"); - - //Display message parameters - log_(0, " - LINK_ID - Link identifier: ", link_id2string(link).c_str(), "\n"); -// log_(0, " - LINK_DN_REASON - Link down reason: ", link_down_reason2string(ldr).c_str(), "\n"); - - log_(0, "MIH_Link_Down.indication - End\n"); -} - -//----------------------------------------------------------------------------- -void mih_user::receive_MIH_Link_Going_Down_indication(odtone::mih::message& msg) -//----------------------------------------------------------------------------- -{ - log_(0, "MIH_Link_Going_Down.indication - RECEIVED - Begin\n"); - - odtone::mih::link_tuple_id link; - odtone::mih::link_gd_reason lgd; - odtone::mih::link_ac_ex_time ex_time; - - msg >> odtone::mih::indication() - & odtone::mih::tlv_link_identifier(link) - & odtone::mih::tlv_time_interval(ex_time) - & odtone::mih::tlv_link_gd_reason(lgd); - - log_(0, "[MSC_MSG]["+getTimeStamp4Log()+"]["+ msg.source().to_string() +"][--- MIH_Link_Going_Down.indication\\n"+link_going_down_reason2string(lgd).c_str()+" --->]["+msg.destination().to_string()+"]\n"); - - // Display message parameters - log_(0, " - LINK_ID - Link identifier: ", link_id2string(link).c_str()); - log_(0, " - Time Interval:", (ex_time/256)); - log_(0, " - LINK_GD_REASON - Link going down reason: ", link_going_down_reason2string(lgd).c_str(), "\n"); - - log_(0, "MIH_Link_Going_Down.indication - End\n"); -} - -//----------------------------------------------------------------------------- -void mih_user::receive_MIH_Link_Parameters_Report(odtone::mih::message& msg, const boost::system::error_code& ec) -//----------------------------------------------------------------------------- -{ - odtone::mih::link_tuple_id link; - odtone::mih::link_param_rpt_list lprl; - - msg >> odtone::mih::indication() - & odtone::mih::tlv_link_identifier(link) - & odtone::mih::tlv_link_param_rpt_list(lprl); - - log_(0, ""); - log_(0, "MIH_Link_Parameters_Report.indication - RECEIVED - Begin"); - log_(0, "[MSC_MSG]["+getTimeStamp4Log()+"]["+ msg.source().to_string() +"][--- MIH_Link_Parameters_Report.indication --->]["+msg.destination().to_string()+"]\n"); - log_(0, " - LINK_TUPLE_ID - Link identifier: ", link_id2string(link).c_str()); - log_(0, "MIH_Link_Parameters_Report.indication - End"); -} - - -//----------------------------------------------------------------------------- -void mih_user::send_MIH_User_Register_indication(const odtone::mih::config& cfg) -//----------------------------------------------------------------------------- -{ - odtone::mih::message m; - boost::optional supp_cmd = parse_supported_commands(cfg); - - m << odtone::mih::indication(odtone::mih::indication::user_register) - & odtone::mih::tlv_command_list(supp_cmd); - m.source(_mihuserid); - m.destination(_mihfid); - - log_(0, "[MSC_MSG]["+getTimeStamp4Log()+"]["+ m.source().to_string() +"][--- MIH_User_Register.indication --->]["+m.destination().to_string()+"]\n"); - - _mihf.async_send(m, boost::bind(&mih_user::user_reg_handler, this, boost::cref(cfg), _2)); - - log_(0, "MIH_User_Register.indication - SENT (towards its local MIHF)\n"); -} - -//----------------------------------------------------------------------------- -void mih_user::send_MIH_Capability_Discover_request(void) -//----------------------------------------------------------------------------- -{ - odtone::mih::message m; - m << odtone::mih::request(odtone::mih::request::capability_discover); - m.source(_mihuserid); - m.destination(_mihfid); - - log_(0, "[MSC_MSG]["+getTimeStamp4Log()+"]["+ m.source().to_string() +"][--- MIH_Capability_Discover.request --->]["+m.destination().to_string()+"]\n"); - - _mihf.async_send(m, boost::bind(&mih_user::receive_handler, this, _1, _2)); - - log_(0, "MIH_Capability_Discover.request - SENT (towards its local MIHF)\n"); -} - -//----------------------------------------------------------------------------- -void mih_user::receive_MIH_Capability_Discover_confirm(odtone::mih::message& msg) -//----------------------------------------------------------------------------- -{ - log_(0, "MIH_Capability_Discover.confirm - RECEIVED - Begin\n"); - - odtone::mih::status st; - boost::optional ntal; - boost::optional evt; - boost::optional cmd; - - msg >> odtone::mih::confirm() - & odtone::mih::tlv_status(st) - & odtone::mih::tlv_net_type_addr_list(ntal) - & odtone::mih::tlv_event_list(evt) - & odtone::mih::tlv_command_list(cmd); - - log_(0, "[MSC_MSG]["+getTimeStamp4Log()+"]["+ msg.source().to_string() +"][--- MIH_Capability_Discover.confirm"+ - "\\nstatus="+status2string(st).c_str()+ - "\\nEvent list="+evt2string(evt.get()).c_str()+ - "\\nNet type addr list=" + net_type_addr_list2string(ntal).c_str()+ - " --->]["+msg.destination().to_string()+"]\n"); - - // Display message parameters - log_(0, " - STATUS: ", status2string(st).c_str(), " (", st.get(), ")"); - if (evt) { - log_(0, " - MIH_EVT_LIST - Event List: ", evt2string(evt.get()).c_str()); - } - if (cmd) { - log_(0, " - MIH_CMD_LIST - Command List: ", cmd2string(cmd.get()).c_str()); - } - if (ntal) { - log_(0, " - LIST(NET_TYPE_ADDR) - Network Types and Link Address: ", net_type_addr_list2string(ntal).c_str()); - //Store link address - for (odtone::mih::net_type_addr_list::iterator i = ntal->begin(); i != ntal->end(); i++) - { - rcv_link_id.addr = i->addr; - rcv_link_id.type = boost::get(i->nettype.link); - } - } - log_(0, ""); - - // - // event subscription - // - // For every interface the MIHF sent in the - // Capability_Discover.response send an Event_Subscribe.request - // for all availabe events - // - if (ntal && evt) { - _subs_evt_list = evt.get(); // save the list of subscribed link events - for (odtone::mih::net_type_addr_list::iterator i = ntal->begin(); i != ntal->end(); i++) { - if (i->nettype.link.which() == 1) - { - odtone::mih::link_tuple_id li; - - li.addr = i->addr; - li.type = boost::get(i->nettype.link); - _link_id_list.push_back(li); // save the link identifier of the network interface - - mih_user::send_MIH_Event_Subscribe_request(li, evt.get()); - } - } - } - - log_(0, "MIH_Capability_Discover.confirm - End\n"); -} - -//----------------------------------------------------------------------------- -void mih_user::send_MIH_Event_Subscribe_request(odtone::mih::link_tuple_id& li, odtone::mih::mih_evt_list& evt) -//----------------------------------------------------------------------------- -{ - odtone::mih::message m; - - m << odtone::mih::request(odtone::mih::request::event_subscribe) - & odtone::mih::tlv_link_identifier(li) - & odtone::mih::tlv_event_list(evt); - m.source(_mihuserid); - m.destination(_mihfid); - - log_(0, "[MSC_MSG]["+getTimeStamp4Log()+"]["+ m.source().to_string() +"][--- MIH_Event_Subscribe.request"+ - "\\nLink="+link_id2string(li).c_str()+ - "\\nEvent list="+evt2string(evt).c_str()+ - " --->]["+m.destination().to_string()+"]\n"); - - _mihf.async_send(m, boost::bind(&mih_user::receive_handler, this, _1, _2)); - - log_(0, "MIH-User has sent Event_Subscribe.request to ", m.destination().to_string()); - log_(0, " - LINK_TUPLE_ID - Link identifier: ", link_id2string(li).c_str()); - log_(0, " - MIH_EVT_LIST - Event List: ", evt2string(evt).c_str(), "\n"); - - log_(0, "MIH_Event_Subscribe.request - SENT\n"); -} - -//----------------------------------------------------------------------------- -void mih_user::receive_MIH_Event_Subscribe_confirm(odtone::mih::message& msg) -//----------------------------------------------------------------------------- -{ - log_(0, "MIH_Event_Subscribe.confirm(", msg.tid(), ") - RECEIVED - Begin\n"); - - odtone::mih::status st; - odtone::mih::link_tuple_id link; - boost::optional evt; - - msg >> odtone::mih::confirm() - & odtone::mih::tlv_status(st) - & odtone::mih::tlv_link_identifier(link) - & odtone::mih::tlv_event_list(evt); - - if (evt) { - log_(0, "[MSC_MSG]["+getTimeStamp4Log()+"]["+ msg.source().to_string() +"][--- MIH_Event_Subscribe.confirm"+ - "\\nstatus="+status2string(st).c_str()+ - "\\nLink="+link_id2string(link).c_str()+ - "\\nEvent list="+evt2string(evt.get()).c_str()+ - " --->]["+msg.destination().to_string()+"]\n"); - } else { - log_(0, "[MSC_MSG]["+getTimeStamp4Log()+"]["+ msg.source().to_string() +"][--- MIH_Event_Subscribe.confirm"+ - "\\nstatus="+status2string(st).c_str()+ - "\\nLink="+link_id2string(link).c_str()+ - " --->]["+msg.destination().to_string()+"]\n"); - } - - // Display message parameters - log_(0, " - STATUS: ", status2string(st).c_str(), " (", st.get(), ")"); - log_(0, " - LINK_TUPLE_ID - Link identifier: ", link_id2string(link).c_str()); - if (evt) { - log_(0, " - MIH_EVT_LIST - Event List: ", evt2string(evt.get()).c_str()); - } - log_(0, ""); - - //mih_user::send_MIH_Link_Actions_request(link, odtone::mih::link_ac_type_link_activate_resources); - log_(0, "TEMP : Resource scenario deactivated\n"); - - log_(0, "MIH_Event_Subscribe.confirm - End\n"); -} - -//----------------------------------------------------------------------------- -void mih_user::send_MIH_Event_Unsubscribe_request(void) -//----------------------------------------------------------------------------- -{ - odtone::mih::link_tuple_id li; - - // For every interface the MIH user received in the - // Capability_Discover.confirm, send an Event_Unsubscribe.request - // for all subscribed events - for (odtone::mih::link_id_list::iterator i = _link_id_list.begin(); i != _link_id_list.end(); i++) { - li.type = i->type; - li.addr = i->addr; - mih_user::send_MIH_Event_Unsubscribe_request(li, _subs_evt_list); - } -} - -//----------------------------------------------------------------------------- -void mih_user::send_MIH_Event_Unsubscribe_request(odtone::mih::link_tuple_id& li, odtone::mih::mih_evt_list& evt) -//----------------------------------------------------------------------------- -{ - odtone::mih::message m; - - m << odtone::mih::request(odtone::mih::request::event_unsubscribe) - & odtone::mih::tlv_link_identifier(li) - & odtone::mih::tlv_event_list(evt); - m.source(_mihuserid); - m.destination(_mihfid); - - log_(0, "[MSC_MSG]["+getTimeStamp4Log()+"]["+ m.source().to_string() +"][--- MIH_Event_Unsubscribe.request"+ - "\\nLink="+link_id2string(li).c_str()+ - "\\nEvent list="+evt2string(evt).c_str()+ - " --->]["+m.destination().to_string()+"]\n"); - - _mihf.async_send(m, boost::bind(&mih_user::receive_handler, this, _1, _2)); - - log_(0, "MIH-User has sent Event_Unsubscribe.request to ", m.destination().to_string()); - log_(0, " - LINK_TUPLE_ID - Link identifier: ", link_id2string(li).c_str()); - log_(0, " - MIH_EVT_LIST - Event List: ", evt2string(evt).c_str(), "\n"); - - log_(0, "MIH_Event_Unsubscribe.request - SENT\n"); -} - -//----------------------------------------------------------------------------- -void mih_user::receive_MIH_Event_Unsubscribe_confirm(odtone::mih::message& msg) -//----------------------------------------------------------------------------- -{ - log_(0, "MIH_Event_Unsubscribe.confirm(", msg.tid(), ") - RECEIVED - Begin\n"); - - odtone::mih::status st; - odtone::mih::link_tuple_id link; - boost::optional evt; - - msg >> odtone::mih::confirm() - & odtone::mih::tlv_status(st) - & odtone::mih::tlv_link_identifier(link) - & odtone::mih::tlv_event_list(evt); - - if (evt) { - log_(0, "[MSC_MSG]["+getTimeStamp4Log()+"]["+ msg.source().to_string() +"][--- MIH_Event_Unsubscribe.confirm"+ - "\\nstatus="+status2string(st).c_str()+ - "\\nLink="+link_id2string(link).c_str()+ - "\\nEvent list="+evt2string(evt.get()).c_str()+ - " --->]["+msg.destination().to_string()+"]\n"); - } else { - log_(0, "[MSC_MSG]["+getTimeStamp4Log()+"]["+ msg.source().to_string() +"][--- MIH_Event_Unsubscribe.confirm"+ - "\\nstatus="+status2string(st).c_str()+ - "\\nLink="+link_id2string(link).c_str()+ - " --->]["+msg.destination().to_string()+"]\n"); - } - - // Display message parameters - log_(0, " - STATUS: ", status2string(st).c_str(), " (", st.get(), ")"); - log_(0, " - LINK_TUPLE_ID - Link identifier: ", link_id2string(link).c_str()); - if (evt) { - log_(0, " - MIH_EVT_LIST - Event List: ", evt2string(evt.get()).c_str()); - } - log_(0, ""); - - log_(0, "MIH_Event_Unsubscribe.confirm - End"); -} - -//----------------------------------------------------------------------------- -void mih_user::send_MIH_Link_Actions_request(const odtone::mih::link_id& link, odtone::mih::link_ac_type type) -//----------------------------------------------------------------------------- -{ - odtone::mih::message m; - odtone::mih::link_action_list lal; - odtone::mih::link_action_req link_act_req; - - link_act_req.id = link; - link_act_req.action.type = type; - - _last_link_action_type = type; - - // Initialize resource parameters - odtone::mih::resource_desc res; - - res.lid = link; // Link identifier - res.data_rate = 128000; // bit rate - res.jumbo = false; // jumbo disable - res.multicast = false; // multicast disable - - odtone::mih::qos qos; // Class Of Service - qos.value = 56; - res.qos_val = qos; - res.fid = 555 + _current_link_action_request; - -// // Flow identifier -// res.fid.src.ip = _mihf_ip; -// res.fid.src.port_val = _mihf_lport; -// -// if (mih_user::_current_link_action_request == 0) { -// res.fid.dst.ip = odtone::mih::ip_addr(odtone::mih::ip_addr::ipv6, -// "2001:0660:0382:0014:0335:0600:8014:9150"); // DUMMY -// } -// else if (mih_user::_current_link_action_request == 1) { -// res.fid.dst.ip = odtone::mih::ip_addr(odtone::mih::ip_addr::ipv6, -// "2001:0660:0382:0014:0335:0600:8014:9151"); // DUMMY -// } -// else if (mih_user::_current_link_action_request == 2) { -// res.fid.dst.ip = odtone::mih::ip_addr(odtone::mih::ip_addr::ipv6, -// "FF3E:0020:2001:0DB8:0000:0000:0000:0043"); // DUMMY -// res.multicast = true; -// } -// else if (mih_user::_current_link_action_request == 3) { -// res.fid.dst.ip = odtone::mih::ip_addr(odtone::mih::ip_addr::ipv6, -// "2001:0660:0382:0014:0335:0600:8014:9153"); // DUMMY -// } -// res.fid.dst.port_val = 1235; // DUMMY -// res.fid.transport = odtone::mih::proto_udp; - - link_act_req.action.param.param = res; - - link_act_req.ex_time = 0; - - lal.push_back(link_act_req); - - m << odtone::mih::request(odtone::mih::request::link_actions) - & odtone::mih::tlv_link_action_list(lal); - m.source(_mihuserid); - m.destination(_mihfid); - - log_(0, "[MSC_MSG]["+getTimeStamp4Log()+"]["+ m.source().to_string() +"][--- MIH_Link_Actions.request\\n"+link_actions_req2string(link_act_req)+" --->]["+m.destination().to_string()+"]\n"); - - _mihf.async_send(m, boost::bind(&mih_user::receive_handler, this, _1, _2)); - - log_(0, "MIH-User has sent Link_Actions.request to ", m.destination().to_string()); - log_(0, " - LINK_ID - Link identifier: ", link_id2string(link).c_str()); - log_(0, " - FLOW_ID - Flow identifier: ", res.fid); -//TEMP log_(0, " - FLOW_ID - Flow identifier: ", flow_id2string(link_act_req.action.param).c_str()); - log_(0, " - LINK_ACTIONS - Link Actions: " + link_actions_req2string(link_act_req) + "\n"); - - log_(0, "MIH_Link_Actions.request - SENT\n"); -} - -//----------------------------------------------------------------------------- -void mih_user::receive_MIH_Link_Actions_confirm(odtone::mih::message& msg) -//----------------------------------------------------------------------------- -{ - log_(0, "MIH_Link_Actions.confirm - RECEIVED - Begin\n"); - - odtone::mih::status st; - boost::optional larl; - - msg >> odtone::mih::confirm() - & odtone::mih::tlv_status(st) - & odtone::mih::tlv_link_action_rsp_list(larl); - - log_(0, "[MSC_MSG]["+getTimeStamp4Log()+"]["+ msg.source().to_string() +"][--- MIH_Link_Actions.confirm"+ - "\\nstatus="+status2string(st).c_str()+ - " --->]["+msg.destination().to_string()+"]\n"); - - // Display message parameters - log_(0, " - STATUS: ", status2string(st).c_str(), " (", st.get(), ")"); - if (larl) { - log_(0, " - LINK ACTION RSP LIST - Length:", larl.get().size()); - for (odtone::mih::link_action_rsp_list::iterator i = larl->begin(); i != larl->end(); i++) - { - log_(0, "\tLINK_ID: ", link_id2string(i->id).c_str(), - ", LINK_AC_RESULT: ", link_ac_result2string(i->result).c_str()); - } - } - log_(0, ""); - - // 1st scenario: Sequentially activate and deactivate each resource -#ifdef SCENARIO_1 - if (larl) { - odtone::mih::link_action_rsp *rsp = &larl->front(); - if (_current_link_action_request < _nb_of_link_action_requests) { - if (_last_link_action_type == odtone::mih::link_ac_type_link_activate_resources) { - if (rsp->result.get() == odtone::mih::link_ac_success) { - mih_user::send_MIH_Link_Actions_request(rsp->id, odtone::mih::link_ac_type_link_deactivate_resources); - _current_link_action_request += 1; - } - } - else if (_last_link_action_type == odtone::mih::link_ac_type_link_deactivate_resources) { - mih_user::send_MIH_Link_Actions_request(rsp->id, odtone::mih::link_ac_type_link_activate_resources); - } - } - else { // Ends the scenario - mih_user::send_MIH_Event_Unsubscribe_request(); - } - } -#endif // SCENARIO_1 - -#ifdef SCENARIO_2 - // 2nd scenario: Activate all resources, then deactivate all resources - if (larl.get().size() > 0) { - odtone::mih::link_action_rsp *rsp = &larl->front(); - if (++_current_link_action_request < _nb_of_link_action_requests) { - if (_last_link_action_type == odtone::mih::link_ac_type_link_activate_resources) { - mih_user::send_MIH_Link_Actions_request(rsp->id, odtone::mih::link_ac_type_link_activate_resources); - } - else if (_last_link_action_type == odtone::mih::link_ac_type_link_deactivate_resources) { - mih_user::send_MIH_Link_Actions_request(rsp->id, odtone::mih::link_ac_type_link_deactivate_resources); - } - } - else if (_last_link_action_type == odtone::mih::link_ac_type_link_activate_resources) { - _current_link_action_request = 0; - mih_user::send_MIH_Link_Actions_request(rsp->id, odtone::mih::link_ac_type_link_deactivate_resources); - } - else { // Ends the scenario - mih_user::send_MIH_Event_Unsubscribe_request(); - } - } -#endif // SCENARIO_2 - - log_(0, "MIH_Link_Actions.confirm - End\n"); -} - -//----------------------------------------------------------------------------- -void mih_user::send_MIH_Link_Configure_Thresholds_request(odtone::mih::message& msg, const boost::system::error_code& ec) -//----------------------------------------------------------------------------- -{ - odtone::mih::message m; - - odtone::mih::threshold th; - std::vector thl; - - odtone::mih::link_tuple_id lti; - odtone::mih::l2_3gpp_addr local_l2_3gpp_addr; - - log_(0,""); - log_(0, "send_MIH_Link_Configure_Thresholds_request - Begin"); - - //link_tuple_id - lti.type = rcv_link_id.type; - lti.addr = rcv_link_id.addr; - - //local_l2_3gpp_addr = boost::get(lti.addr); - - //List of the link threshold parameters - odtone::mih::link_cfg_param_list lcpl; - odtone::mih::link_cfg_param lcp; - odtone::mih::link_param_lte lp; - - //link_param_gen_data_rate = 0, /**< Data rate. */ - //link_param_gen_signal_strength = 1, /**< Signal strength. */ - //link_param_gen_sinr = 2, /**< SINR. */ - //link_param_gen_throughput = 3, /**< Throughput. */ - //link_param_gen_packet_error_rate = 4, /**< Packet error rate. */ - lp = odtone::mih::link_param_lte_bandwidth; - - lcp.type = lp; - - if ( link_measures_request ==0){ - // Set Timer Interval (in ms) - lcp.timer_interval = 3000; - //th_action_normal = 0, /**< Set normal threshold. */ - //th_action_one_shot = 1, /**< Set one-shot threshold. */ - //th_action_cancel = 2 /**< Cancel threshold. */ - lcp.action = odtone::mih::th_action_normal; - link_measures_request = 1; - } else if ( link_measures_request==1){ - // Set Timer Interval (in ms) - lcp.timer_interval = 0; - lcp.action = odtone::mih::th_action_cancel; - link_measures_request = 0; - } - - //above_threshold = 0, /**< Above threshold. */ - //below_threshold = 1, /**< Below threshold. */ - th.threshold_val = 0; - th.threshold_x_dir = odtone::mih::threshold::above_threshold; - - thl.push_back(th); - lcp.threshold_list = thl; - lcpl.push_back(lcp); - - m << odtone::mih::request(odtone::mih::request::link_configure_thresholds) - & odtone::mih::tlv_link_identifier(lti) - & odtone::mih::tlv_link_cfg_param_list(lcpl); - - m.destination(msg.source()); - - log_(0, "[MSC_MSG]["+getTimeStamp4Log()+"]["+ _mihuserid.to_string() +"][--- MIH_Link_Configure_Thresholds.request\\nlink="+ - // link_tupple_id2string(lti).c_str() + - link_id2string(lti).c_str()+ - " --->]["+_mihfid.to_string()+"]\n"); - _mihf.async_send(m, boost::bind(&mih_user::event_handler, this, _1, _2)); - - - log_(0, " - LINK_TUPLE_ID - Link identifier: ", link_id2string(lti).c_str()); - - log_(0, "\t- LINK CFG PARAM LIST - Length: ", lcpl.size()); - - //if(lp == odtone::mih::link_param_gen_data_rate) {log_(0, "\t Generic link parameter DATA RATE ");} - //if(lp == odtone::mih::link_param_gen_signal_strength) {log_(0, "\t Generic link parameter SIGNAL STRENGTH");} - //if(lp == odtone::mih::link_param_gen_sinr) {log_(0, "\t Generic link parameter SINR");} - //if(lp == odtone::mih::link_param_gen_throughput) {log_(0, "\t Generic link parameter THROUGHPUT");} - if(lp == odtone::mih::link_param_lte_bandwidth) {log_(0, "\t LTE link parameter BANDWIDTH");} - - log_(0, "\t- TIMER INTERVAL - Value: ", lcp.timer_interval); - - if(lcp.action == odtone::mih::th_action_normal) {log_(0, "\t Normal Threshold");} - if(lcp.action == odtone::mih::th_action_one_shot) {log_(0, "\t One Shot Threshold");} - if(lcp.action == odtone::mih::th_action_cancel) {log_(0, "\t Threshold to be canceled");} - - log_(0, "\t Threshold value: ", th.threshold_val); - - if(th.threshold_x_dir == odtone::mih::threshold::below_threshold) {log_(0, "\t Threshold direction BELOW");} - if(th.threshold_x_dir == odtone::mih::threshold::above_threshold) {log_(0, "\t Threshold direction ABOVE");} - - log_(0, "send_MIH_Link_Configure_Thresholds_request - End"); -} - -//----------------------------------------------------------------------------- -void mih_user::receive_MIH_Link_Configure_Thresholds_confirm(odtone::mih::message& msg, const boost::system::error_code& ec) -//----------------------------------------------------------------------------- -{ - log_(0, ""); - log_(0, "receive_MIH_Link_Configure_Thresholds_confirm - Begin"); - - // T odtone::uint iter; - // T odtone::mih::status st; - - //boost::optional lcsl; - // Todtone::mih::link_cfg_status_list lcsl; - // Todtone::mih::link_cfg_status lcp; - //odtone::mih::link_param_gen lp; - - // T odtone::mih::link_tuple_id lti; - - //msg >> odtone::mih::confirm() - // & odtone::mih::tlv_status(st) - // & odtone::mih::tlv_link_identifier(lti) - // & odtone::mih::tlv_link_cfg_status_list(lcsl); - - - log_(0, "receive_MIH_Link_Configure_Thresholds_confirm - End"); - log_(0,""); -} - -//----------------------------------------------------------------------------- -int main(int argc, char** argv) -//----------------------------------------------------------------------------- -{ - odtone::setup_crash_handler(); - - try { - boost::asio::io_service ios; - - // declare MIH Usr available options - po::options_description desc(odtone::mih::octet_string("MIH Usr Configuration")); - desc.add_options() - ("help", "Display configuration options") - (odtone::sap::kConf_File, po::value()->default_value("mih_usr.conf"), "Configuration file") - (odtone::sap::kConf_Receive_Buffer_Len, po::value()->default_value(4096), "Receive buffer length") - (odtone::sap::kConf_Port, po::value()->default_value(1234), "Listening port") - (odtone::sap::kConf_MIH_SAP_id, po::value()->default_value("user"), "MIH-User ID") - (kConf_MIH_Commands, po::value()->default_value(""), "MIH-User supported commands") - (odtone::sap::kConf_MIHF_Ip, po::value()->default_value("127.0.0.1"), "Local MIHF IP address") - (odtone::sap::kConf_MIHF_Local_Port, po::value()->default_value(1025), "Local MIHF communication port") - (odtone::sap::kConf_MIH_SAP_dest, po::value()->default_value("mihf1"), "MIHF destination"); - - odtone::mih::config cfg(desc); - cfg.parse(argc, argv, odtone::sap::kConf_File); - - if (cfg.help()) { - std::cerr << desc << std::endl; - return EXIT_SUCCESS; - } - - mih_user usr(cfg, ios); - - ios.run(); - - } catch(std::exception& e) { - log_(0, "exception: ", e.what()); - } -} - -// EOF //////////////////////////////////////////////////////////////////////// - diff --git a/openair3/RAL-LTE/LTE_RAL_ENB/Makefile b/openair3/RAL-LTE/LTE_RAL_ENB/Makefile deleted file mode 100755 index a536f76b20..0000000000 --- a/openair3/RAL-LTE/LTE_RAL_ENB/Makefile +++ /dev/null @@ -1,69 +0,0 @@ -# lines starting with the pound sign are comments. -# -# These things are options that you might need -# to tweak. - - -# You can modify the below as well, but probably -# won't need to. -INTERFACE_DIR=../INTERFACE-802.21 -INCLUDE_DIR=INCLUDE -SRC_DIR=SRC -# external directories for ioctl -RRC_DIR := $(OPENAIR2_DIR)/RRC/CELLULAR -NAS_DIR := $(OPENAIR2_DIR)/NAS/DRIVER/CELLULAR/NASRG - -# SVN version -#SVNREV = -D'SVN_REV="$(shell svnversion -n .)"' -SVNREV = -D'SVN_REV="1"' - -CC = gcc - -#CFLAGS = -Wall -g -I$(SRC_DIR) -I$(INTERFACE_DIR)/INCLUDE -I$(INCLUDE_DIR) \ -# -DMIH_C_MEDIEVAL_EXTENSIONS -DMSCGEN_PYTOOL -DMIH_USER_CONTROL $(SVNREV) - -CFLAGS = -Wall -g -I$(SRC_DIR) -I$(INTERFACE_DIR)/INCLUDE -I$(INCLUDE_DIR) -DMIH_C_MEDIEVAL_EXTENSIONS -DMIH_USER_CONTROL $(SVNREV) -CFLAGS += -I$(NAS_DIR) -I$(RRC_DIR) - -LDFLAGS = -L$(INTERFACE_DIR)/LIB -lmih_c-802.21 -lrt - -ERAL_OBJS += $(SRC_DIR)/lteRALenb_mih_msg.o -ERAL_OBJS += $(SRC_DIR)/lteRALenb_rrc_msg.o -ERAL_OBJS += $(SRC_DIR)/lteRALenb_thresholds.o -ERAL_OBJS += $(SRC_DIR)/lteRALenb_parameters.o -ERAL_OBJS += $(SRC_DIR)/lteRALenb_action.o -ERAL_OBJS += $(SRC_DIR)/lteRALenb_subscribe.o -ERAL_OBJS += $(SRC_DIR)/lteRALenb_process.o -ERAL_OBJS += $(SRC_DIR)/lteRALenb_main.o - -OBJS = $(ERAL_OBJS) - - -E_RAL_EXE = LTE_RAL_ENB - -EXECUTABLE = interface $(E_RAL_EXE) - -# "all" is the default target. Simply make it point to myprogram. - -all: $(EXECUTABLE) - -interface : -# -(cd $(INTERFACE_DIR) && make clean && make) - -(cd $(INTERFACE_DIR) && make) - -cleaninterface : - -(cd $(INTERFACE_DIR) && make clean) - -$(E_RAL_EXE) : $(ERAL_OBJS) - $(CC) -o $@ $^ $(LDFLAGS) - -%.o: %.c Makefile - @echo Compiling $< - @$(CC) -c $(CFLAGS) $(EXTRA_CFLAGS) -o $@ $< - -clean: - -find . -name "*.o" -delete - -find . -name "*.*~" -delete - -find . -name "*~" -delete -# -rm -f $(M_RAL_EXE) $(M_NAS_EXE) -# -rm -f $(E_RAL_EXE) $(E_NAS_EXE) diff --git a/openair3/RAL-LTE/LTE_RAL_ENB/SRC/lteRALenb_action.c b/openair3/RAL-LTE/LTE_RAL_ENB/SRC/lteRALenb_action.c deleted file mode 100755 index 651d5f47b7..0000000000 --- a/openair3/RAL-LTE/LTE_RAL_ENB/SRC/lteRALenb_action.c +++ /dev/null @@ -1,890 +0,0 @@ -/***************************************************************************** - * Eurecom OpenAirInterface 3 - * Copyright(c) 2012 Eurecom - * - * Source eRAL_action.c - * - * Version 0.1 - * - * Date 07/03/2012 - * - * Product MIH RAL LTE - * - * Subsystem MIH link action request messages processing - * - * Authors Michelle Wetterwald, Lionel Gauthier, Frederic Maurel - * - * Description - * - *****************************************************************************/ -#define LTE_RAL_ENB -#define LTE_RAL_ENB_ACTION_C - -#include -#include "lteRALenb.h" - - -/****************************************************************************/ -/******************* G L O C A L D E F I N I T I O N S *****************/ -/****************************************************************************/ - -/****************************************************************************/ -/******************* L O C A L D E F I N I T I O N S *******************/ -/****************************************************************************/ - -static MIH_C_LINK_ACTION_T g_link_action; - -static const char* g_link_action_type_str[] = { - "MIH_C_LINK_AC_TYPE_NONE", - "MIH_C_LINK_AC_TYPE_LINK_DISCONNECT", - "MIH_C_LINK_AC_TYPE_LINK_LOW_POWER", - "MIH_C_LINK_AC_TYPE_LINK_POWER_DOWN", - "MIH_C_LINK_AC_TYPE_LINK_POWER_UP", -#ifdef MIH_C_MEDIEVAL_EXTENSIONS - "MIH_C_LINK_AC_TYPE_LINK_FLOW_ATTR", - "MIH_C_LINK_AC_TYPE_LINK_ACTIVATE_RESOURCES", - "MIH_C_LINK_AC_TYPE_LINK_DEACTIVATE_RESOURCES" -#endif -}; - - -/**************************************************************************** - ** ** - ** Name: eRAL_action_request() ** - ** ** - ** Description: Processes the Link_Action.request message and sends a ** - ** Link_Action.confirm message to the MIHF. ** - ** ** - ** Inputs: msgP: Pointer to the received message ** - ** Others: ralpriv ** - ** ** - ** Outputs: None ** - ** Return: None ** - ** Others: g_link_action ** - ** ** - ***************************************************************************/ -void eRAL_action_request(ral_enb_instance_t instanceP, MIH_C_Message_Link_Action_request_t* msgP) -{ - MIH_C_STATUS_T status; - MIH_C_LINK_AC_TYPE_T link_action_type; - MIH_C_LINK_AC_RESULT_T link_action_result; - int link_action_done = 0; - - - rrc_ral_connection_reconfiguration_req_t connection_reconfiguration_req_t; - MessageDef *message_p = NULL; - - message_p = itti_alloc_new_message (TASK_RAL_ENB, RRC_RAL_CONNECTION_RECONFIGURATION_REQ); - memset(&connection_reconfiguration_req_t, 0, sizeof(rrc_ral_connection_reconfiguration_req_t)); - // copy transaction id - // connection_reconfiguration_req_t.transaction_id = msgP->header.transaction_id; - - - memcpy(&g_link_action, &msgP->primitive.LinkAction, sizeof(MIH_C_LINK_ACTION_T)); - - status = MIH_C_STATUS_SUCCESS; - link_action_type = msgP->primitive.LinkAction.link_ac_type; - link_action_result = MIH_C_LINK_AC_RESULT_SUCCESS; - - /* - * Read link action attributs - * -------------------------- - */ - // if (msgP->primitive.LinkAction.link_ac_attr & MIH_C_BIT_LINK_AC_ATTR_LINK_SCAN) - // { - // /* - // * Link scan operation request - Not supported by the network side: - // * No measurements - // */ - // LOG_D(RAL_ENB, " ACTION ATTRIBUTE MIH_C_BIT_LINK_AC_ATTR_LINK_SCAN: REFUSED\n"); - // link_action_result = MIH_C_LINK_AC_RESULT_REFUSED; - // eRAL_send_link_action_confirm(instanceP, &msgP->header.transaction_id, - // &status, - // NULL, - // &link_action_result); - // } - - // if (msgP->primitive.LinkAction.link_ac_attr & MIH_C_BIT_LINK_AC_ATTR_LINK_RES_RETAIN) - // { - // /* - // * Link resource retain operation request - Not supported by the - // * network side. - // */ - // LOG_D(RAL_ENB, " ACTION ATTRIBUTE MIH_C_BIT_LINK_AC_ATTR_LINK_RES_RETAIN: REFUSED\n"); - // link_action_result = MIH_C_LINK_AC_RESULT_REFUSED; - // eRAL_send_link_action_confirm(instanceP, &msgP->header.transaction_id, - // &status, - // NULL, - // &link_action_result); - // } - - // if (msgP->primitive.LinkAction.link_ac_attr & MIH_C_BIT_LINK_AC_ATTR_DATA_FWD_REQ) - // { - // /* - // * Data forward operation request - Not supported by the network side. - // */ - // LOG_D(RAL_ENB, " ACTION ATTRIBUTE MIH_C_BIT_LINK_AC_ATTR_DATA_FWD_REQ: REFUSED\n"); - // link_action_result = MIH_C_LINK_AC_RESULT_REFUSED; - // eRAL_send_link_action_confirm(instanceP, &msgP->header.transaction_id, - // &status, - // NULL, - // &link_action_result); - // } - - /* - * Read link action request - * ------------------------ - * Requested actions that are not supported or currently in progress - * are refused. - */ - if (eRAL_action_is_in_progress(instanceP, &status, - &link_action_result, - link_action_type)) { - LOG_D(RAL_ENB, " Link action request %s is not supported or currently in progress\n", g_link_action_type_str[link_action_type]); - } else { - LOG_D(RAL_ENB, " %s ACTION REQUESTED: %s\n", __FUNCTION__, g_link_action_type_str[link_action_type]); - - switch (link_action_type) { - case MIH_C_LINK_AC_TYPE_NONE: - LOG_D(RAL_ENB, " %s ACTION REQUESTED: MIH_C_LINK_AC_TYPE_NONE: NO ACTION\n", __FUNCTION__); - break; - -#ifdef MIH_C_MEDIEVAL_EXTENSIONS - - case MIH_C_LINK_AC_TYPE_LINK_FLOW_ATTR: - /* - * Provide the mark and multicast configuration to be set up - * for the data flow - */ - g_enb_ral_obj[instanceP].pending_req_ac_result = eRAL_action_link_flow_attr(instanceP); - link_action_done = 1; - break; - - case MIH_C_LINK_AC_TYPE_LINK_ACTIVATE_RESOURCES: - /* - * Configure and activate a data flow - */ - g_enb_ral_obj[instanceP].pending_req_ac_result = eRAL_action_link_activate_resources(instanceP); - link_action_done = 1; - break; - - case MIH_C_LINK_AC_TYPE_LINK_DEACTIVATE_RESOURCES: - /* - * Deactivate a previously activated data flow - */ - g_enb_ral_obj[instanceP].pending_req_ac_result = eRAL_action_link_deactivate_resources(instanceP); - link_action_done = 1; - break; -#endif // MIH_C_MEDIEVAL_EXTENSIONS - - case MIH_C_LINK_AC_TYPE_LINK_DISCONNECT: - - /* - * Disconnect the link connection directly - */ - case MIH_C_LINK_AC_TYPE_LINK_LOW_POWER: - - /* - * Cause the link to adjust its battery power level to be - * low power consumption - Not supported by the network side - */ - case MIH_C_LINK_AC_TYPE_LINK_POWER_DOWN: - - /* - * Cause the link to power down and turn off the radio - * - Not supported by the network side - */ - case MIH_C_LINK_AC_TYPE_LINK_POWER_UP: - LOG_D(RAL_ENB, "%s ACTION REQUESTED: MIH_C_LINK_AC_TYPE_LINK_POWER_UP\n", __FUNCTION__); - - if (g_enb_ral_obj[instanceP].mih_supported_link_action_list & (1 << MIH_C_LINK_AC_TYPE_LINK_POWER_UP)) { - // Activation requested - check it is not already active - if(g_enb_ral_obj[instanceP].pending_req_action & MIH_C_LINK_AC_TYPE_LINK_POWER_UP) { - // if (g_enb_ral_obj[instanceP].state == CONNECTED) { - // LOG_D(RAL_ENB, "Activation requested, but interface already active ==> NO OP\n"); - // mRAL_send_link_action_confirm(instanceP, &messageP->header.transaction_id, &status, &scan_response_set_list, &link_action_result); - // } else { - g_enb_ral_obj[instanceP].pending_req_action = g_enb_ral_obj[instanceP].pending_req_action | MIH_C_LINK_AC_TYPE_LINK_POWER_UP; - // g_enb_ral_obj[instanceP].cell_id = g_enb_ral_obj[instanceP].meas_cell_id[0]; // Default cell #0 - Next, choose cell with best conditions - LOG_D(RAL_ENB, "Activation requested to NAS interface on cell %d\n", g_enb_ral_obj[instanceP].cell_id); - // RAL_process_NAS_message(IO_OBJ_CNX, IO_CMD_ADD, g_enb_ral_obj[instanceP].cell_id); - // } - } else { - g_enb_ral_obj[instanceP].pending_req_action |= MIH_C_LINK_AC_TYPE_LINK_POWER_UP; - /* g_enb_ral_obj[instanceP].cell_id = g_enb_ral_obj[instanceP].meas_cell_id[0];*/ // Default cell #0 - Next, choose cell with best conditions - message_p = itti_alloc_new_message (TASK_RAL_ENB, RRC_RAL_CONNECTION_RECONFIGURATION_REQ); - memset(&connection_reconfiguration_req_t, 0, sizeof(rrc_ral_connection_reconfiguration_req_t)); - // copy transaction id - connection_reconfiguration_req_t.transaction_id = msgP->header.transaction_id; - - connection_reconfiguration_req_t.link_action.link_ac_type = msgP->primitive.LinkAction.link_ac_type; - connection_reconfiguration_req_t.link_action.link_ac_attr = msgP->primitive.LinkAction.link_ac_attr; - connection_reconfiguration_req_t.link_action.link_ac_param = msgP->primitive.LinkAction.link_ac_param; - - memcpy (&message_p->ittiMsg, (void *) &connection_reconfiguration_req_t, sizeof(rrc_ral_connection_reconfiguration_req_t)); - itti_send_msg_to_task (TASK_RRC_ENB, instanceP, message_p); - - /* LOG_D(RAL_ENB, "Total data volume0 %d\n", (g_enb_ral_obj[instanceP].totalDataVolume[0]/1000)); - LOG_D(RAL_ENB, "Total data volume1 %d\n", (g_enb_ral_obj[instanceP].totalDataVolume[1]/1000)); - LOG_D(RAL_ENB, "RLC Buffer Occupancy 0 %d\n", (g_enb_ral_obj[instanceP].rlcBufferOccupancy[0])); - LOG_D(RAL_ENB, "RLC Buffer Occupancy 1 %d\n", (g_enb_ral_obj[instanceP].rlcBufferOccupancy[1])); - */ - } - } else { - LOG_D(RAL_ENB, "[mRAL]: command POWER UP not available \n\n"); - // link_action_result = MIH_C_LINK_AC_RESULT_INCAPABLE; - // mRAL_send_link_action_confirm(instanceP, &msgP->header.transaction_id, &status, &scan_response_set_list, &link_action_result); - } - - break; - - default: - LOG_E(RAL_ENB, "%s Invalid LinkAction.link_ac_type %d\n", - __FUNCTION__, link_action_type); - status = MIH_C_STATUS_UNSPECIFIED_FAILURE; - } - } - - /* Return link action confirmation to the MIH-F */ - if (link_action_done) { - g_enb_ral_obj[instanceP].pending_req_transaction_id = msgP->header.transaction_id; - g_enb_ral_obj[instanceP].pending_req_status = MIH_C_STATUS_SUCCESS; - eRAL_send_link_action_confirm(instanceP, &g_enb_ral_obj[instanceP].pending_req_transaction_id, - &g_enb_ral_obj[instanceP].pending_req_status, - NULL, - &g_enb_ral_obj[instanceP].pending_req_ac_result); - } else if (status == MIH_C_STATUS_SUCCESS) { - eRAL_send_link_action_confirm(instanceP, &msgP->header.transaction_id, - &status, - NULL, - &link_action_result); - } else { - eRAL_send_link_action_confirm(instanceP, &msgP->header.transaction_id, - &status, - NULL, - NULL); - } - - g_enb_ral_obj[instanceP].pending_req_action = 0; -} - -/**************************************************************************** - ** ** - ** Name: eRAL_action_save_flow_id() ** - ** ** - ** Description: Save connection identifier and data of the specified data ** - ** flow into the list of active data flows. ** - ** ** - ** Inputs: flowId: The data flow identifier ** - ** cnxid: The connection identifier ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: The index of the specified data flow in ** - ** the list of active data flows. ** - ** -1 if the list is full. ** - ** Others: None ** - ** ** - ***************************************************************************/ -int eRAL_action_save_flow_id(ral_enb_instance_t instanceP, MIH_C_FLOW_ID_T* flowId, int cnxid) -{ - return eRAL_action_set_channel_id(instanceP, flowId, cnxid); -} - -/****************************************************************************/ -/********************* L O C A L F U N C T I O N S *********************/ -/****************************************************************************/ - -/**************************************************************************** - ** Name: eRAL_action_set_channel_id() ** - ** ** - ** Description: Set the Connection identifier and store data of the ** - ** specified data flow in the list of active data flows. ** - ** Inputs: flowId: The data flow identifier ** - ** cnxid: The connection identifier ** - ** Outputs: None ** - ** Return: The index of the specified data flow in ** - ** the list of active data flows. ** - ** -1 if the list is full. ** - ***************************************************************************/ -int eRAL_action_set_channel_id (ral_enb_instance_t instanceP, MIH_C_FLOW_ID_T* flowId, int cnxid) -{ - // char addr[128]; - //char port[8]; - int f_ix; - - assert(cnxid != 0); - - for (f_ix = 0; f_ix < ACTION_MAX_FLOW; f_ix++) { - if (g_flows.flow[f_ix].cnxid > 0) continue; - - g_flows.flow[f_ix].cnxid = cnxid; - g_flows.flow_id[f_ix] = (int)flowId; - g_flows.n_flows += 1; - - // Modified Michelle -#warning "TO DO DestIpv6Addr ?" - //memcpy((char*)&(DestIpv6Addr[0][16]), addr, 16); - eRAL_process_mt_addr_to_l2id(&g_flows.flow[f_ix].addr[8], - &g_flows.flow[f_ix].l2id[0]); - - /* MIH_C_TRANSPORT_ADDR_VALUE2String(&flowId->dest_addr.ip_addr.address, addr); - memcpy((char*)&(g_flows.flow[f_ix].addr), addr, 16); - eRAL_process_mt_addr_to_l2id(&g_flows.flow[f_ix].addr[8], - &g_flows.flow[f_ix].l2id[0]); - MIH_C_PORT2String(&flowId->dest_addr.port, port); - g_flows.flow[f_ix].port = strtol(port, (char**) NULL, 16); - g_flows.flow[f_ix].proto = flowId->transport_protocol;*/ - return f_ix; - } - - return (-1); -} - -/**************************************************************************** - ** Name: eRAL_action_get_channel_id() ** - ** ** - ** Description: Returns the Connection identifier of the specified data ** - ** flow. ** - ** Inputs: flowId: The data flow identifier ** - ** Others: None ** - ** Outputs: cnxid: The connection identifier allocated to the ** - ** specified data flow. ** - ** Return: The index of the specified data flow in ** - ** the list of active data flows. ** - ** -1 if no any connection identifier exists ** - ** for the specified data flow. ** - ** Others: None ** - ***************************************************************************/ -int eRAL_action_get_channel_id (ral_enb_instance_t instanceP, MIH_C_FLOW_ID_T* flowId, int* cnxid) -{ - //char addr[128]; - //char port[8]; - //unsigned int dp; - int f_ix; - - // MIH_C_TRANSPORT_ADDR_VALUE2String(&flowId->dest_addr.ip_addr.address, addr); - // MIH_C_PORT2String(&flowId->dest_addr.port, port); - // dp = strtol(port, (char**) NULL, 16); - - for (f_ix = 0; f_ix < ACTION_MAX_FLOW; f_ix++) { - /* if (!eRAL_process_cmp_mt_addr((const char*)addr, (const char*)g_flows.flow[f_ix].l2id)) continue; - if (g_flows.flow[f_ix].port != dp) continue; - if (g_flows.flow[f_ix].proto != flowId->transport_protocol) continue;*/ - if (g_flows.flow_id[f_ix] != *flowId) continue; - - *cnxid = g_flows.flow[f_ix].cnxid; - return f_ix; - } - - return (-1); -} - -/**************************************************************************** - ** ** - ** Name: eRAL_action_del_channel_id() ** - ** ** - ** Description: Remove the data flow stored at the specified index in the ** - ** list of active data flows. ** - ** ** - ** Inputs: fix: Index of the data flow in the list ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: The number of the remaining data flows in ** - ** the list. ** - ** -1 if the specified index is out of the ** - ** boundary of the list. ** - ** Others: None ** - ** ** - ***************************************************************************/ -int eRAL_action_del_channel_id (ral_enb_instance_t instanceP, int fix) -{ - if (fix < ACTION_MAX_FLOW) { - g_flows.n_flows -= 1; - memset (&g_flows.flow[fix], 0, sizeof (struct Data_flow)); - return g_flows.n_flows; - } - - return (-1); -} - -/**************************************************************************** - ** ** - ** Name: eRAL_action_is_in_progress() ** - ** ** - ** Description: Checks if an action request is supported and whether it ** - ** is currently in progress. ** - ** ** - ** Inputs: action: Type of link action ** - ** Others: g_link_action, ralpriv ** - ** ** - ** Outputs: status: MIH request status ** - ** ac_status: Action request status ** - ** Return: 1 if the request is not supported or is ** - ** currently in progress and the resource is ** - ** already in the required state. 0 otherwise.** - ** Others: None ** - ** ** - ***************************************************************************/ -int eRAL_action_is_in_progress(ral_enb_instance_t instanceP, MIH_C_STATUS_T* status, - MIH_C_LINK_AC_RESULT_T* ac_status, - MIH_C_LINK_AC_TYPE_T action) -{ - /* Check whether the action link command is supported */ - if (!(g_enb_ral_obj[instanceP].mih_supported_link_command_list & MIH_C_BIT_LINK_ACTION)) { - *status = MIH_C_STATUS_REJECTED; - LOG_D(RAL_ENB,"THE LINK ACTION is not in the list\n"); - return 1; - } - - *status = MIH_C_STATUS_SUCCESS; - - /* Check whether the action request is supported */ - if (g_enb_ral_obj[instanceP].mih_supported_link_action_list & (1 << action)) { - /* Check whether another action request is currently in progress */ - if ((g_enb_ral_obj[instanceP].pending_req_action) && (g_enb_ral_obj[instanceP].pending_req_action != action)) { - /* Another action request is in progress: - * Do not process new request before completion of this one */ - LOG_D(RAL_ENB,"THE LINK ACTION is pending\n"); - *ac_status = MIH_C_LINK_AC_RESULT_REFUSED; - return 1; - } - - /* The action request is supported and no other request is in progress: - * Go ahead and process the request */ - - LOG_D(RAL_ENB,"THE LINK ACTION is not pending\n"); - return 0; - } - - LOG_D(RAL_ENB,"THE LINK ACTION is not supported\n"); - /* The link action request is not supported */ - *ac_status = MIH_C_LINK_AC_RESULT_INCAPABLE; - return 1; -} - -#ifdef MIH_C_MEDIEVAL_EXTENSIONS -/**************************************************************************** - ** ** - ** Name: eRAL_action_link_flow_attr() ** - ** ** - ** Description: Processes the link flow attribut action request. ** - ** ** - ** Inputs: None ** - ** Others: g_link_action ** - ** ** - ** Outputs: None ** - ** Return: MIH_C_LINK_AC_RESULT_SUCCESS if action has ** - ** been successfully processed. ** - ** Others: ralpriv ** - ** ** - ***************************************************************************/ -MIH_C_LINK_AC_RESULT_T eRAL_action_link_flow_attr(ral_enb_instance_t instanceP) -//TODO -{ - MIH_C_FLOW_ATTRIBUTE_T *flow = &g_link_action.link_ac_param._union.flow_attribute; - int mt_ix, ch_ix, f_ix; - int cnxid; - - /* Get the connection identifier */ - f_ix = eRAL_action_get_channel_id(instanceP, &flow->flow_id, &cnxid); - - if (f_ix < 0) { - LOG_D(RAL_ENB, " No RB allocated for this data flow\n"); - return MIH_C_LINK_AC_RESULT_REFUSED; - } - - /* Get MT and RB channel identifiers */ - if (eRAL_process_find_channel(instanceP, cnxid, &mt_ix, &ch_ix) != 0) { - /* Unicast data flow */ - LOG_D(RAL_ENB, " %s: Unicast MT's address = %s\n", __FUNCTION__, - eRAL_process_mt_addr_to_string(g_enb_ral_obj[instanceP].mt[mt_ix].ipv6_addr)); - } else { - /* Multicast data flow */ - LOG_D(RAL_ENB, " %s: Multicast MT's address = %s\n", __FUNCTION__, - eRAL_process_mt_addr_to_string(g_enb_ral_obj[instanceP].mcast.mc_group_addr)); - } - - if (flow->choice_mark_qos) { - LOG_D(RAL_ENB, " Mark QoS enabled\n"); - //TODO ??? - } - - if (flow->choice_mark_drop_eligibility) { - LOG_D(RAL_ENB, " Mark drop eligibility enabled\n"); - //TODO ??? - } - - /* Link action successfully processed */ - g_enb_ral_obj[instanceP].pending_req_action = MIH_C_LINK_AC_TYPE_LINK_FLOW_ATTR; - return MIH_C_LINK_AC_RESULT_SUCCESS; -} - -/**************************************************************************** - ** ** - ** Name: eRAL_action_link_activate_resources() ** - ** ** - ** Description: Processes the link activate resource action request. ** - ** ** - ** Inputs: None ** - ** Others: g_link_action ** - ** ** - ** Outputs: None ** - ** Return: MIH_C_LINK_AC_RESULT_SUCCESS if action has ** - ** been successfully processed. ** - ** Others: ralpriv ** - ** ** - ***************************************************************************/ -MIH_C_LINK_AC_RESULT_T eRAL_action_link_activate_resources(ral_enb_instance_t instanceP) -{ - //--------------------------------------------------------------------------- - MIH_C_RESOURCE_DESC_T *res = &g_link_action.link_ac_param._union.resource_desc; - MIH_C_COS_T classIdDL = 0; - MIH_C_COS_T classIdUL = 0; - MIH_C_LINK_DATA_RATE_T resBitrateDL = 0; - MIH_C_LINK_DATA_RATE_T resBitrateUL = 0; - MIH_C_BOOLEAN_T multicast = MIH_C_BOOLEAN_FALSE; - - /* TODO: To be initialized downlink/uplink */ - if (res->choice_qos) { - MIH_C_QOS_T *qos = &(res->_union_qos.qos); - - if (qos->choice) { - classIdDL = qos->_union.cos; - classIdUL = qos->_union.cos; - } - } - - if (res->choice_link_data_rate) { - resBitrateDL = res->_union_link_data_rate.link_data_rate; - resBitrateUL = res->_union_link_data_rate.link_data_rate; - } - - /* end TODO */ - - if (res->choice_multicast_enable) { - multicast = res->_union_multicast_enable.multicast_enable; - } - - /* - * Get the Care-of Address (MT address): - * The destination address is contained into the MIH_C_FLOW_ID structure - * within the MIH_C_RESOURCE_DESC parameters of the request. - */ - char mt_addr[128]; - //original code: int len = MIH_C_TRANSPORT_ADDR_VALUE2String(&res->flow_id.dest_addr.ip_addr.address, mt_addr); - - MIH_C_TRANSPORT_ADDR_VALUE_T mihc_transport_addr_value; - MIH_C_TRANSPORT_ADDR_VALUE_set(&mihc_transport_addr_value, (unsigned char*)"2001:660:382:14:335:600:8014:9150", strlen("2001:660:382:14:335:600:8014:9150")); - - int len = MIH_C_TRANSPORT_ADDR_VALUE2String(&mihc_transport_addr_value, mt_addr); - //int len = MIH_C_TRANSPORT_ADDR_VALUE2String(&DestIpv6Addr[0][16], mt_addr); - - if ( (len > 0) && (len < 128)) { - LOG_D(RAL_ENB, " %s: MT's address = %s\n", __FUNCTION__, eRAL_process_mt_addr_to_string((unsigned char*)mt_addr)); - } else { - LOG_E(RAL_ENB, "%s : IP Address is NOT valid (len=%d)\n", __FUNCTION__, len); - return MIH_C_LINK_AC_RESULT_FAILURE; - } - -#if 0 - char mt_addr[128]; - - if (res->link_id.link_addr.choice == MIH_C_CHOICE_3GPP_3G_CELL_ID) { - char link_addr[128]; - int len = MIH_C_LINK_ADDR2String(&res->link_id.link_addr, link_addr); - - if ( (len > 0) && (len <= 128) ) { - int i; - LOG_D(RAL_ENB, " %s : Link address = %s\n", __FUNCTION__, link_addr); - - for (i=0; i < len; i++) { - if (link_addr[i] == '=') break; - } - - strncpy(mt_addr, &link_addr[i+2], 16); - LOG_D(RAL_ENB, " %s : MT address = %s\n", __FUNCTION__, mt_addr); - } else { - LOG_E(RAL_ENB, "%s : Link address is NOT valid (len=%d)\n", __FUNCTION__, len); - return MIH_C_LINK_AC_RESULT_FAILURE; - } - } else { - LOG_E(RAL_ENB, "%s : Link address is NOT valid (type=%d, not 3GPP_3G_CELL_ID)\n", - __FUNCTION__, res->link_id.link_addr.choice); - return MIH_C_LINK_AC_RESULT_FAILURE; - } - -#endif - - /* - * If the resource has already been activated, check whether it is in the - * required state. - */ - struct ral_lte_channel *currChannel; - int mt_ix, ch_ix, f_ix; - int cnxid; - - /* Get the connection identifier */ - f_ix = eRAL_action_get_channel_id(instanceP, &res->flow_id, &cnxid); - - if (f_ix != -1) { - /* Get MT and RB channel identifiers */ - if (eRAL_process_find_channel(instanceP, cnxid, &mt_ix, &ch_ix) != 0) { - /* Unicast data flow */ - currChannel = &(g_enb_ral_obj[instanceP].mt[mt_ix].radio_channel[ch_ix]); - } else { - /* Multicast data flow */ - assert(multicast == MIH_C_BOOLEAN_TRUE); - currChannel = &(g_enb_ral_obj[instanceP].mcast.radio_channel); - } - - if (currChannel->status == RB_CONNECTED) { - //if (currChannel->status == NAS_CONNECTED) { - /* The resource is already in the required state */ - LOG_D(RAL_ENB, " Link action ACTIVATE_RESOURCES requested while link resource is ALREADY activated\n"); - return MIH_C_LINK_AC_RESULT_SUCCESS; - } - - /* The resource is not in the required state: - * Remove the connection identifier from the list of active resources - * and process the action request again. */ - LOG_D(RAL_ENB, " Resource has been activated but is not in the ACTIVE state\n"); - (void) eRAL_action_del_channel_id(instanceP, f_ix); - } - - MIH_C_LINK_TUPLE_ID_T *ltid; - int is_ready_for_rb_establish = 1; - - if (multicast) { - /* - * Multicast data flow: - */ - mt_ix = RAL_MAX_MT; - ch_ix = 0; - currChannel = &(g_enb_ral_obj[instanceP].mcast.radio_channel); - currChannel->cnx_id = (RAL_MAX_RB_PER_UE*mt_ix)+1; - currChannel->rbId = RAL_DEFAULT_RAB_ID; - currChannel->multicast = 1; - memcpy((char*)&(g_enb_ral_obj[instanceP].mcast.mc_group_addr), mt_addr, 16); - ltid = &(g_enb_ral_obj[instanceP].mcast.ltid); - } else { - /* - * Unicast data flow - */ - /* Get the list of MTs waiting for RB establishment */ -#ifdef RAL_REALTIME - // LG RAL_process_NAS_message(IO_OBJ_CNX, IO_CMD_LIST, 0, 0); - // LG RAL_process_NAS_message(IO_OBJ_RB, IO_CMD_LIST, 0, 0); -#endif - /* Check if the MT is in the list */ - mt_ix = eRAL_process_find_mt_by_addr(instanceP, mt_addr); - - if ( (mt_ix < RAL_MAX_MT) && - (g_enb_ral_obj[instanceP].mt[mt_ix].mt_state == RB_CONNECTED)) { - /* The MT is ready for RB establishment */ - ch_ix = eRAL_process_find_new_channel(instanceP, mt_ix); - - if (ch_ix == RAL_MAX_RB) { - LOG_D(RAL_ENB, " No RB available in MT\n"); - return MIH_C_LINK_AC_RESULT_REFUSED; - } - - currChannel = &(g_enb_ral_obj[instanceP].mt[mt_ix].radio_channel[ch_ix]); - currChannel->cnx_id = (RAL_MAX_RB_PER_UE*mt_ix)+ch_ix+1; - currChannel->rbId = RAL_DEFAULT_RAB_ID + ch_ix; - currChannel->multicast = 0; - LOG_D(RAL_ENB, " mt_ix %d, ch_ix %d, cnx_id %d, rbId %d\n", - mt_ix, ch_ix, currChannel->cnx_id, currChannel->rbId); - memcpy((char *)&(g_enb_ral_obj[instanceP].mt[mt_ix].ipv6_addr), mt_addr, 16); - ltid = &(g_enb_ral_obj[instanceP].mt[mt_ix].ltid); - } else { - /* The MT is NOT ready for RB establishment */ - is_ready_for_rb_establish = 0; - int qos_is_valid = 0; - - LOG_D(RAL_ENB, " Mobile Terminal not ready - Storing request data\n"); - - /* Check validity of QoS parameters */ - if ( (classIdDL < 64) && (classIdUL < 64) ) { - if ( (resBitrateDL <= RAL_BITRATE_320k) - && (resBitrateUL <= RAL_BITRATE_320k) ) { - qos_is_valid = 1; - } else if ( (resBitrateDL >= RAL_BITRATE_384k) - && (resBitrateDL <= RAL_BITRATE_440k) - && (resBitrateUL <= RAL_BITRATE_64k) ) { - qos_is_valid = 1; - } - } - - if (qos_is_valid) { - LOG_D(RAL_ENB, " Received QoS parameters are valid\n"); - } else { - LOG_D(RAL_ENB, " Received QoS parameters are NOT valid - Request will be rejected\n"); - return MIH_C_LINK_AC_RESULT_REFUSED; - } - - currChannel = &(g_enb_ral_obj[instanceP].pending_mt.radio_channel[0]); - currChannel->cnx_id = 0; - currChannel->rbId = 0; - currChannel->multicast = 0; - memcpy((char *)&(g_enb_ral_obj[instanceP].pending_mt.ipv6_addr), mt_addr, 16); - - ltid = &(g_enb_ral_obj[instanceP].pending_mt.ltid); - g_enb_ral_obj[instanceP].pending_req_flag = 1; - - } /* end MT not ready */ - - } /* end unicast data flow */ - - /* Save the current data flow identifier into the list of active data flows */ - if (currChannel->cnx_id != 0) { - f_ix = eRAL_action_set_channel_id(instanceP, &res->flow_id, currChannel->cnx_id); - - if (f_ix < 0) { - LOG_D(RAL_ENB, " No RB available\n"); - return MIH_C_LINK_AC_RESULT_REFUSED; - } - } else { - /* The current request is pending waiting for RB establishment */ - f_ix = 0; - g_enb_ral_obj[instanceP].pending_req_fid = res->flow_id; - } - - /* - * Store resource parameters - */ - int i; - - for (i = 0; i < 2; i++) { - //TODO: int dir = p->qos.value[i].direction; - // TODO: To be initialized downlink/uplink - currChannel->flowId[i] = f_ix; - currChannel->classId[i] = classIdDL; // classIdUL - currChannel->resBitrate[i] = resBitrateDL; // resBitrateUL - //currChannel->meanBitrate[i] = p->qos.value[i].tspec.meanBitrate; - //currChannel->bktDepth[i] = p->qos.value[i].tspec.bucketDepth; - //currChannel->pkBitrate[i] = p->qos.value[i].tspec.peakBitrate; - //currChannel->MTU[i] = p->qos.value[i].tspec.maximumTransmissionUnit; - LOG_D(RAL_ENB, " qos value : DIR %d, flowId %d, classId %d, resBitrate %.1f\n", i , currChannel->flowId[i], currChannel->classId[i], currChannel->resBitrate[i]); - } - - /* Store the link identifier */ - ltid->link_id = res->link_id; - ltid->choice = MIH_C_LINK_TUPLE_ID_CHOICE_LINK_ADDR; - ltid->_union.link_addr.choice = MIH_C_CHOICE_3GPP_3G_CELL_ID; // DUMMY - ltid->_union.link_addr._union._3gpp_3g_cell_id.cell_id = RAL_DEFAULT_CELL_ID; // DUMMY - - /* - * Setup Radio Bearer resources - */ - if (is_ready_for_rb_establish) { - /* Map QoS */ - int mapping_result = eRAL_process_map_qos(instanceP, mt_ix, ch_ix); - - if (mapping_result) { - int rc = -1; -#ifdef RAL_DUMMY - rc = eRAL_NAS_send_rb_establish_request(mt_ix, ch_ix); -#endif -#ifdef RAL_REALTIME - // LG rc = RAL_process_NAS_message(IO_OBJ_RB, IO_CMD_ADD, mt_ix, ch_ix); // FIXME why is this commented? -#endif - - if (rc < 0) { - /* Failed to send RB establishment request */ - return MIH_C_LINK_AC_RESULT_FAILURE; - } - } else { - /* QoS mapping is not supported */ - return MIH_C_LINK_AC_RESULT_REFUSED; - } - } else { - /* Wait for MT coming ready; - * re-try to establish RB upon timer expiration */ -#ifdef RAL_DUMMY - g_enb_ral_obj[instanceP].pending_mt_timer = 5; -#endif -#ifdef RAL_REALTIME - g_enb_ral_obj[instanceP].pending_mt_timer = 300; -#endif - } - - /* Link action successfully processed */ - g_enb_ral_obj[instanceP].pending_req_action = MIH_C_LINK_AC_TYPE_LINK_ACTIVATE_RESOURCES; - return MIH_C_LINK_AC_RESULT_SUCCESS; -} - -/**************************************************************************** - ** ** - ** Name: eRAL_action_link_deactivate_resources() ** - ** ** - ** Description: Processes the link deactivate resource action request. ** - ** ** - ** Inputs: None ** - ** Others: g_link_action ** - ** ** - ** Outputs: None ** - ** Return: MIH_C_LINK_AC_RESULT_SUCCESS if action has ** - ** been successfully processed. ** - ** Others: ralpriv ** - ** ** - ***************************************************************************/ -MIH_C_LINK_AC_RESULT_T eRAL_action_link_deactivate_resources(ral_enb_instance_t instanceP) -{ - MIH_C_RESOURCE_DESC_T *res = &g_link_action.link_ac_param._union.resource_desc; - struct ral_lte_channel *currChannel; - int mt_ix, ch_ix, f_ix; - int cnxid; - - /* Get the connection identifier */ - f_ix = eRAL_action_get_channel_id(instanceP, &res->flow_id, &cnxid); - - if (f_ix < 0) { - LOG_D(RAL_ENB, " Link action DEACTIVATE_RESOURCES requested while link resource is NOT activated\n"); - return MIH_C_LINK_AC_RESULT_SUCCESS; - } - - /* Get MT and RB channel identifiers */ - if (eRAL_process_find_channel(instanceP, cnxid, &mt_ix, &ch_ix) != 0) { - /* Unicast data flow */ - currChannel = &(g_enb_ral_obj[instanceP].mt[mt_ix].radio_channel[ch_ix]); - LOG_D(RAL_ENB, " %s: Unicast MT's address = %s\n", __FUNCTION__, - eRAL_process_mt_addr_to_string(g_enb_ral_obj[instanceP].mt[mt_ix].ipv6_addr)); - } else { - /* Multicast data flow */ - currChannel = &(g_enb_ral_obj[instanceP].mcast.radio_channel); - LOG_D(RAL_ENB, " %s: Multicast MT's address = %s\n", __FUNCTION__, - eRAL_process_mt_addr_to_string(g_enb_ral_obj[instanceP].mcast.mc_group_addr)); - } - - if (currChannel->status == NAS_DISCONNECTED) { - /* The resource is already in the required state */ - LOG_D(RAL_ENB, " Link action request DEACTIVATE_RESOURCES is currently in progress\n"); - return MIH_C_LINK_AC_RESULT_SUCCESS; - } - - /* The resource is not in the required state: - * Remove the connection identifier from the list of active resources - * and go ahead in the request processing. */ - (void) eRAL_action_del_channel_id(instanceP, f_ix); - - int rc = -1; -#ifdef RAL_DUMMY - rc = eRAL_NAS_send_rb_release_request(mt_ix, ch_ix); -#endif -#ifdef RAL_REALTIME - // LG rc = RAL_process_NAS_message(IO_OBJ_RB, IO_CMD_DEL, mt_ix, ch_ix); // FIXME why is this commented? -#endif - - if (rc < 0) { - /* Failed to send RB release request */ - return MIH_C_LINK_AC_RESULT_FAILURE; - } - - /* Link action successfully processed */ - g_enb_ral_obj[instanceP].pending_req_action = MIH_C_LINK_AC_TYPE_LINK_DEACTIVATE_RESOURCES; - return MIH_C_LINK_AC_RESULT_SUCCESS; -} - -#endif // MIH_C_MEDIEVAL_EXTENSIONS diff --git a/openair3/RAL-LTE/LTE_RAL_ENB/SRC/lteRALenb_ioctl.c b/openair3/RAL-LTE/LTE_RAL_ENB/SRC/lteRALenb_ioctl.c deleted file mode 100755 index e102b72af9..0000000000 --- a/openair3/RAL-LTE/LTE_RAL_ENB/SRC/lteRALenb_ioctl.c +++ /dev/null @@ -1,725 +0,0 @@ -/*************************************************************************** - lteRALenb_ioctl.c - description - *************************************************************************** - Eurecom OpenAirInterface 3 - Copyright(c) 1999 - 2013 Eurecom - - This program is free software; you can redistribute it and/or modify it - under the terms and conditions of the GNU General Public License, - version 2, as published by the Free Software Foundation. - - This program is distributed in the hope it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - more details. - - You should have received a copy of the GNU General Public License along with - this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - - The full GNU General Public License is included in this distribution in - the file called "COPYING". - - Contact Information - Openair Admin: openair_admin@eurecom.fr - Openair Tech : openair_tech@eurecom.fr - Forums : http://forums.eurecom.fsr/openairinterface - Address : Eurecom, 450 route des Chappes, 06410 Biot Sophia Antipolis, France -*******************************************************************************/ -/*! \file lteRALenb_ioctl.c - * \brief Handling of ioctl for LTE driver in LTE-RAL-ENB - * \author WETTERWALD Michelle, GAUTHIER Lionel, MAUREL Frederic - * \date 2013 - * \company EURECOM - * \email: michelle.wetterwald@eurecom.fr, lionel.gauthier@eurecom.fr, frederic.maurel@eurecom.fr - */ -/******************************************************************************* -#include -#include -#include -#include -#include -//#include -//#include -//#include - -#include - -// -#include "rrc_d_types.h" -//----------------------------------------------------------------------------- -// LTE AS sub-system -//#include "rrc_nas_primitives.h" -//#include "nasrg_constant.h" -//#include "nasrg_iocontrol.h" -//----------------------------------------------------------------------------- -#include "lteRALenb_mih_msg.h" -#include "lteRALenb_constants.h" -#include "lteRALenb_variables.h" -#include "lteRALenb_proto.h" -#include "MIH_C.h" -//#include "MIH_C_Types.h" - -extern struct nas_ioctl gifr; -extern int fd; -extern int s_mgr; //socket with QoS Mgr -extern int init_flag; - -//--------------------------------------------------------------------------- -void print_state(uint8_t state){ -//--------------------------------------------------------------------------- - switch(state){ - case NAS_IDLE:printf("NAS_IDLE\n");return; - case NAS_CX_FACH:printf("NAS_CX_FACH\n");return; - case NAS_CX_DCH:printf("NAS_CX_DCH\n");return; - case NAS_CX_RECEIVED:printf("NAS_CX_RECEIVED\n");return; - case NAS_CX_CONNECTING:printf("NAS_CX_CONNECTING\n");return; - case NAS_CX_RELEASING:printf("NAS_CX_RELEASING\n");return; - case NAS_CX_CONNECTING_FAILURE:printf("NAS_CX_CONNECTING_FAILURE\n");return; - case NAS_CX_RELEASING_FAILURE:printf("NAS_CX_RELEASING_FAILURE\n");return; - case NAS_RB_ESTABLISHING:printf("NAS_RB_ESTABLISHING\n");return; - case NAS_RB_RELEASING:printf("NAS_RB_RELEASING\n");return; - case NAS_RB_ESTABLISHED:printf("NAS_RB_ESTABLISHED\n");return; - - default: printf(" Unknown state\n"); - } -} - -//--------------------------------------------------------------------------- -void RAL_NASinitMTlist(uint8_t *msgrep, int num_mts){ -//--------------------------------------------------------------------------- - int mt_ix, ch_ix; - struct nas_msg_cx_list_reply *list; - - memcpy(g_enb_ral_obj[instanceP].plmn, DefaultPLMN, DEFAULT_PLMN_SIZE); // DUMMY - list=(struct nas_msg_cx_list_reply *)(msgrep+1); - num_mts = msgrep[0]; - for(mt_ix=0; mt_ix=2) - g_enb_ral_obj[instanceP].mt[mt_ix].mt_state= NAS_CONNECTED; - // enter default rb - ch_ix = 0; - g_enb_ral_obj[instanceP].mt[mt_ix].radio_channel[ch_ix].rbId = RAL_DEFAULT_MC_RAB_ID+1; - g_enb_ral_obj[instanceP].mt[mt_ix].radio_channel[ch_ix].RadioQoSclass = 2; - g_enb_ral_obj[instanceP].mt[mt_ix].radio_channel[ch_ix].cnx_id = (RAL_MAX_RB_PER_UE*mt_ix)+ch_ix+1; - g_enb_ral_obj[instanceP].mt[mt_ix].radio_channel[ch_ix].dscpUL = 0; - g_enb_ral_obj[instanceP].mt[mt_ix].radio_channel[ch_ix].dscpDL = 0; - g_enb_ral_obj[instanceP].mt[mt_ix].radio_channel[ch_ix].nas_state = NAS_CX_DCH; - g_enb_ral_obj[instanceP].mt[mt_ix].radio_channel[ch_ix].status = RB_CONNECTED; - g_enb_ral_obj[instanceP].num_connected_mts++; - //RAL_printMobileData(mt_ix); - DEBUG(" MT%d initialized : address %d %d\n", mt_ix, g_enb_ral_obj[instanceP].mt[mt_ix].ipv6_l2id[0], g_enb_ral_obj[instanceP].mt[mt_ix].ipv6_l2id[1]); - } - } -} - -//--------------------------------------------------------------------------- -void RAL_NASupdatetMTlist(uint8_t *msgrep, int num_mts){ -//--------------------------------------------------------------------------- - int mt_ix, ch_ix; - struct nas_msg_cx_list_reply *list; - //MIH_C_LINK_TUPLE_ID_T* ltid; - MIH_C_LINK_ADDR_T new_ar; - MIH_C_LINK_DN_REASON_T reason_code; - MIH_C_TRANSACTION_ID_T transaction_id; - int previous_num_class; - - list=(struct nas_msg_cx_list_reply *)(msgrep+1); - num_mts = msgrep[0]; - for(mt_ix=0; mt_ix=2) - g_enb_ral_obj[instanceP].mt[mt_ix].mt_state= RB_CONNECTED; - //check if state has changed - MT disconnected FFS - if ((g_enb_ral_obj[instanceP].mt[mt_ix].nas_state==NAS_CX_DCH)&&(list[mt_ix].state == NAS_IDLE)){ - DEBUG ("\n\n"); - DEBUG (" MOBILE TERMINAL %d IS NOW IDLE.\n\n",mt_ix); - // TODO Send linkdown - } - //check if state has changed - MT reconnected FFS - if ((g_enb_ral_obj[instanceP].mt[mt_ix].nas_state==NAS_IDLE)&&(list[mt_ix].state == NAS_CX_DCH)){ - DEBUG ("\n\n"); - DEBUG (" MOBILE TERMINAL %d WAS IDLE AND IS NOW CONNECTED.\n\n",mt_ix); - } - //check if MT is completely connected - if ((g_enb_ral_obj[instanceP].mt[mt_ix].num_class - previous_num_class)&&(list[mt_ix].state == NAS_CX_DCH)){ - DEBUG ("\n\n"); - DEBUG (" MOBILE TERMINAL %d IS NOW COMPLETELY CONNECTED.\n\n",mt_ix); - // send linkup: new_ar will contain the address from the MT - new_ar.choice = MIH_C_CHOICE_3GPP_ADDR; - MIH_C_3GPP_ADDR_set(&(new_ar._union._3gpp_addr), (u_int8_t*)&(g_enb_ral_obj[instanceP].mt[mt_ix].ipv6_l2id[0]), strlen(DEFAULT_ADDRESS_3GPP)); - - eRALlte_send_link_up_indication(&g_enb_ral_obj[instanceP].pending_req_transaction_id, &g_enb_ral_obj[instanceP].mt[mt_ix].ltid, NULL, &new_ar, NULL, NULL); - //eRALlte_send_link_up_indication(&g_enb_ral_obj[instanceP].pending_req_transaction_id, &g_enb_ral_obj[instanceP].mt[mt_ix].ltid, NULL, NULL, NULL, NULL); - // if RAL realtime and MEASURES are enabled, start the measuring process in RRC+Driver - #ifdef RAL_REALTIME - #ifdef ENABLE_MEDIEVAL_DEMO3 - RAL_process_NAS_message(IO_OBJ_MEAS, IO_CMD_ADD,0,0); - #endif - #endif - - } - //check enter sleep mode - if ((g_enb_ral_obj[instanceP].mt[mt_ix].nas_state==NAS_CX_DCH)&&(list[mt_ix].state == NAS_CX_RELEASING)){ - DEBUG ("\n\n"); - DEBUG (" MOBILE TERMINAL %d is entering sleep mode. Send LinkDown.\n\n",mt_ix); - // send linkdown: old_ar (represented by new_ar variable) will contain the address from the MT - transaction_id = MIH_C_get_new_transaction_id(); - reason_code = MIH_C_LINK_DOWN_REASON_EXPLICIT_DISCONNECT; - new_ar.choice = MIH_C_CHOICE_3GPP_ADDR; - MIH_C_3GPP_ADDR_set(&(new_ar._union._3gpp_addr), (u_int8_t*)&(g_enb_ral_obj[instanceP].mt[mt_ix].ipv6_l2id[0]), strlen(DEFAULT_ADDRESS_3GPP)); - eRALlte_send_link_down_indication(&transaction_id, &g_enb_ral_obj[instanceP].mt[mt_ix].ltid, &new_ar, &reason_code); - } - // check leave sleep mode - if ((g_enb_ral_obj[instanceP].mt[mt_ix].nas_state==NAS_CX_RELEASING)&&(list[mt_ix].state == NAS_CX_DCH)){ - DEBUG ("\n\n"); - DEBUG (" MOBILE TERMINAL %d WAS IN SLEEP MODE AND IS NOW ACTIVATED.\n\n",mt_ix); - // send linkup: new_ar will contain the address from the MT - new_ar.choice = MIH_C_CHOICE_3GPP_ADDR; - MIH_C_3GPP_ADDR_set(&(new_ar._union._3gpp_addr), (u_int8_t*)&(g_enb_ral_obj[instanceP].mt[mt_ix].ipv6_l2id[0]), strlen(DEFAULT_ADDRESS_3GPP)); - eRALlte_send_link_up_indication(&g_enb_ral_obj[instanceP].pending_req_transaction_id, &g_enb_ral_obj[instanceP].mt[mt_ix].ltid, NULL, &new_ar, NULL, NULL); - } - g_enb_ral_obj[instanceP].mt[mt_ix].nas_state = list[mt_ix].state; - }else{ - // MT unknown or different - if (list[mt_ix].state != NAS_IDLE){ - DEBUG ("\n\n"); - DEBUG (" NEW TERMINAL %d DETECTED.\n\n",mt_ix); - g_enb_ral_obj[instanceP].mt[mt_ix].ue_id = list[mt_ix].lcr; - g_enb_ral_obj[instanceP].mt[mt_ix].ipv6_l2id[0]= list[mt_ix].iid6[0]; - g_enb_ral_obj[instanceP].mt[mt_ix].ipv6_l2id[1]= list[mt_ix].iid6[1]; - g_enb_ral_obj[instanceP].mt[mt_ix].num_rbs = list[mt_ix].num_rb; - g_enb_ral_obj[instanceP].mt[mt_ix].num_class = list[mt_ix].nsclassifier; - // initialize ltid (MIH_C_LINK_TUPLE_ID_T) for that mobile - // first version - //g_enb_ral_obj[instanceP].mt[mt_ix].ltid.link_id.link_type = MIH_C_WIRELESS_UMTS; - //g_enb_ral_obj[instanceP].mt[mt_ix].ltid.link_id.link_addr.choice = MIH_C_CHOICE_3GPP_ADDR; - //MIH_C_3GPP_ADDR_set(&g_enb_ral_obj[instanceP].mt[mt_ix].ltid.link_id.link_addr._union._3gpp_addr, (u_int8_t*)&(g_enb_ral_obj[instanceP].mt[mt_ix].ipv6_l2id[0]), strlen(DEFAULT_ADDRESS_3GPP)); - //g_enb_ral_obj[instanceP].mt[mt_ix].ltid.choice = MIH_C_LINK_TUPLE_ID_CHOICE_LINK_ADDR; - // SECOND Version - g_enb_ral_obj[instanceP].mt[mt_ix].ltid.link_id.link_type = MIH_C_WIRELESS_UMTS; - g_enb_ral_obj[instanceP].mt[mt_ix].ltid.choice = MIH_C_LINK_TUPLE_ID_CHOICE_NULL; - g_enb_ral_obj[instanceP].mt[mt_ix].ltid.link_id.link_addr.choice = MIH_C_CHOICE_3GPP_3G_CELL_ID; - Bit_Buffer_t *plmn = new_BitBuffer_0(); - BitBuffer_wrap(plmn, (unsigned char*) g_enb_ral_obj[instanceP].plmn, DEFAULT_PLMN_SIZE); - MIH_C_PLMN_ID_decode(plmn, &g_enb_ral_obj[instanceP].mt[mt_ix].ltid.link_id.link_addr._union._3gpp_3g_cell_id.plmn_id); - free_BitBuffer(plmn); - g_enb_ral_obj[instanceP].mt[mt_ix].ltid.link_id.link_addr._union._3gpp_3g_cell_id.cell_id = g_enb_ral_obj[instanceP].cell_id; - g_enb_ral_obj[instanceP].mt[mt_ix].ltid.choice = MIH_C_LINK_TUPLE_ID_CHOICE_NULL; - - // check state of the UE connection - g_enb_ral_obj[instanceP].mt[mt_ix].nas_state = list[mt_ix].state; - if (g_enb_ral_obj[instanceP].mt[mt_ix].num_class>=2){ - g_enb_ral_obj[instanceP].mt[mt_ix].mt_state= RB_CONNECTED; - // send linkup - //ltid = &g_enb_ral_obj[instanceP].mt[mt_ix].ltid; - DEBUG (" MOBILE TERMINAL %d IS COMPLETELY CONNECTED.\n\n",mt_ix); - // new_ar will contain the address from the MT - new_ar.choice = MIH_C_CHOICE_3GPP_ADDR; - MIH_C_3GPP_ADDR_set(&(new_ar._union._3gpp_addr), (u_int8_t*)&(g_enb_ral_obj[instanceP].mt[mt_ix].ipv6_l2id[0]), strlen(DEFAULT_ADDRESS_3GPP)); - - eRALlte_send_link_up_indication(&g_enb_ral_obj[instanceP].pending_req_transaction_id, &g_enb_ral_obj[instanceP].mt[mt_ix].ltid, NULL, &new_ar, NULL, NULL); - // if RAL realtime and MEASURES are enabled, start the measuring process in RRC+Driver - #ifdef RAL_REALTIME - #ifdef ENABLE_MEDIEVAL_DEMO3 - RAL_process_NAS_message(IO_OBJ_MEAS, IO_CMD_ADD,0,0); - #endif - #endif - } - // enter default rb - ch_ix = 0; - g_enb_ral_obj[instanceP].mt[mt_ix].radio_channel[ch_ix].rbId = RAL_DEFAULT_MC_RAB_ID+1; - g_enb_ral_obj[instanceP].mt[mt_ix].radio_channel[ch_ix].RadioQoSclass = 2; - g_enb_ral_obj[instanceP].mt[mt_ix].radio_channel[ch_ix].cnx_id = (RAL_MAX_RB_PER_UE*mt_ix)+ch_ix+1; - g_enb_ral_obj[instanceP].mt[mt_ix].radio_channel[ch_ix].dscpUL = 0; - g_enb_ral_obj[instanceP].mt[mt_ix].radio_channel[ch_ix].dscpDL = 0; - g_enb_ral_obj[instanceP].mt[mt_ix].radio_channel[ch_ix].nas_state = NAS_CX_DCH; - g_enb_ral_obj[instanceP].mt[mt_ix].radio_channel[ch_ix].status = RB_CONNECTED; - g_enb_ral_obj[instanceP].num_connected_mts++; - //RAL_printMobileData(mt_ix); - } - } // end if MT unknonwn - } // end for loop -} - -//--------------------------------------------------------------------------- -void RAL_verifyPendingRbStatus(void){ -//--------------------------------------------------------------------------- -// g_enb_ral_obj[instanceP].mcast.radio_channel.status = RB_CONNECTED; - int mt_ix, ch_ix; - MIH_C_LINK_TUPLE_ID_T* ltid; - //int is_unicast; - - mt_ix = g_enb_ral_obj[instanceP].pending_req_mt_ix; - ch_ix = g_enb_ral_obj[instanceP].pending_req_ch_ix; - - if ((g_enb_ral_obj[instanceP].pending_req_flag)%5==0){ - DEBUG("Pending Req Flag %d, Mobile %d, channel %d\n", g_enb_ral_obj[instanceP].pending_req_flag, mt_ix, ch_ix); - if (g_enb_ral_obj[instanceP].pending_req_multicast == RAL_TRUE){ - mt_ix =0; - ch_ix =1; - } - RAL_process_NAS_message(IO_OBJ_RB, IO_CMD_LIST,mt_ix,0); - if ((g_enb_ral_obj[instanceP].mt[mt_ix].radio_channel[ch_ix].status == RB_CONNECTED)||((g_enb_ral_obj[instanceP].pending_req_flag) > 100)){ - DEBUG("RAL_verifyPendingRbStatus -in- mt_ix %d - ch_ix %d \n", mt_ix, ch_ix ); - // send confirmation to upper layer - g_enb_ral_obj[instanceP].pending_req_status = MIH_C_STATUS_SUCCESS; - if ((g_enb_ral_obj[instanceP].pending_req_flag) > 100){ - g_enb_ral_obj[instanceP].pending_req_status = MIH_C_STATUS_REJECTED; - if (mt_ix == RAL_MAX_MT) - eRALlte_process_clean_channel(&(g_enb_ral_obj[instanceP].mcast.radio_channel)); - else - eRALlte_process_clean_channel(&(g_enb_ral_obj[instanceP].mt[mt_ix].radio_channel[ch_ix])); - } - if (mt_ix == RAL_MAX_MT) - ltid = &g_enb_ral_obj[instanceP].mcast.ltid; - else - ltid = &g_enb_ral_obj[instanceP].mt[mt_ix].ltid; - - if (!g_enb_ral_obj[instanceP].pending_mt_flag) - // To be updated and completed - //aRALu_send_link_res_activate_cnf(); - eRALlte_send_link_up_indication(&g_enb_ral_obj[instanceP].pending_req_transaction_id, ltid, NULL, NULL, NULL, NULL); - else - g_enb_ral_obj[instanceP].pending_mt_flag = 0; - g_enb_ral_obj[instanceP].pending_req_flag = 0; - DEBUG("After response, Pending Req Flag = 0 , %d\n", g_enb_ral_obj[instanceP].pending_req_flag); - } - //DEBUG("RAL_verifyPendingRbStatus - 2- \n"); - } -} - -//--------------------------------------------------------------------------- -int RAL_process_NAS_message(int ioctl_obj, int ioctl_cmd, int mt_ix, int ch_ix){ -//--------------------------------------------------------------------------- - int err, rc; -// int mt_ix, ch_ix; - unsigned int cnxid; - -// DEBUG ("\n%d , %d,", mt_ix, ch_ix); - switch (ioctl_obj){ - case IO_OBJ_STATS: - { - DEBUG("Statistics requested -- FFS \n"); - } - break; - case IO_OBJ_CNX: - switch (ioctl_cmd){ - case IO_CMD_LIST: - { - // printf("Usage: gioctl cx list\n"); - uint8_t *msgrep; - uint8_t i; - struct nas_msg_cx_list_reply *list; - uint8_t lcr; - short int num_mts; - - gifr.type=NAS_MSG_CX_LIST_REQUEST; - //gifr.msg=(char *)malloc(NAS_LIST_CX_MAX*sizeof(struct nas_msg_cx_list_reply)+1); - memset (g_enb_ral_obj[instanceP].buffer,0,800); - gifr.msg= &(g_enb_ral_obj[instanceP].buffer[0]); - msgrep=(uint8_t *)(gifr.msg); - // - DEBUG("--\n"); - DEBUG("Connexion list requested\n"); - err=ioctl(fd, NASRG_IOCTL_RAL, &gifr); - if (err<0){ - ERR("IOCTL error, err=%d\n",err); - rc = -1; - } - // Print result - DEBUG("Lcr\t\tCellId\tIID4\tIID6\t\t\tnum_rb\tnsclass\tState\n"); - list=(struct nas_msg_cx_list_reply *)(msgrep+1); - num_mts = msgrep[0]; - for(lcr=0; lcr \n"); - struct nas_msg_rb_establishment_request *msgreq; - struct nas_msg_rb_establishment_reply *msgrep; - struct ral_lte_channel *currChannel; - MIH_C_LINK_TUPLE_ID_T* ltid; - MIH_C_LINK_DN_REASON_T reason_code; - // - gifr.type=NAS_MSG_RB_ESTABLISHMENT_REQUEST; - memset (g_enb_ral_obj[instanceP].buffer,0,800); - gifr.msg= &(g_enb_ral_obj[instanceP].buffer[0]); - msgreq=(struct nas_msg_rb_establishment_request *)(gifr.msg); - msgrep=(struct nas_msg_rb_establishment_reply *)(gifr.msg); - // - if (mt_ix == RAL_MAX_MT){ - // multicast - currChannel = &(g_enb_ral_obj[instanceP].mcast.radio_channel); - msgreq->lcr = mt_ix; - memcpy ((char *)&(msgreq->mcast_group), (char *)&(g_enb_ral_obj[instanceP].mcast.mc_group_addr), 16); - }else{ - // unicast - currChannel = &(g_enb_ral_obj[instanceP].mt[mt_ix].radio_channel[ch_ix]); - msgreq->lcr = g_enb_ral_obj[instanceP].mt[mt_ix].ue_id; - } - msgreq->cnxid = currChannel->cnx_id; - msgreq->rab_id = currChannel->rbId; - msgreq->qos = currChannel->RadioQoSclass; - msgreq->dscp_ul = currChannel->dscpUL; - msgreq->dscp_dl = currChannel->dscpDL; - msgreq->mcast_flag = currChannel->multicast; - cnxid = msgreq->cnxid; - currChannel->status = RB_DISCONNECTED; - // - DEBUG("Radio bearer establishment requested, cnxid %d\n", cnxid); - err=ioctl(fd, NASRG_IOCTL_RAL, &gifr); - if (err<0){ - ERR("IOCTL error, err=%d\n",err); - rc = -1; - } - // check answer from NAS - msgrep->cnxid = cnxid; // Temp - hardcoded - - if ((msgrep->status<0)||(msgrep->cnxid!=cnxid)||(err<0)){ - ERR(" Radio bearer establishment failure: %d\n",msgrep->status); - currChannel->status = RB_DISCONNECTED; - rc = -1; - g_enb_ral_obj[instanceP].pending_req_status = MIH_C_STATUS_REJECTED; - if (g_enb_ral_obj[instanceP].pending_mt_flag){ - reason_code = MIH_C_LINK_DOWN_REASON_NO_RESOURCE; - if (mt_ix == RAL_MAX_MT) - ltid = &g_enb_ral_obj[instanceP].mcast.ltid; - else - ltid = &g_enb_ral_obj[instanceP].mt[mt_ix].ltid; - eRALlte_send_link_down_indication(&g_enb_ral_obj[instanceP].pending_req_transaction_id, ltid, NULL, &reason_code); - // aRALu_send_link_res_activate_cnf(); - } - if (mt_ix == RAL_MAX_MT) - eRALlte_process_clean_channel(&(g_enb_ral_obj[instanceP].mcast.radio_channel)); - else - eRALlte_process_clean_channel(&(g_enb_ral_obj[instanceP].mt[mt_ix].radio_channel[ch_ix])); - }else{ - rc = 0; - g_enb_ral_obj[instanceP].pending_req_flag = 1; - g_enb_ral_obj[instanceP].pending_req_mt_ix = mt_ix; - g_enb_ral_obj[instanceP].pending_req_ch_ix = ch_ix; - g_enb_ral_obj[instanceP].pending_req_multicast = currChannel->multicast; - DEBUG("-1- pending_req_mt_ix %d, pending_req_ch_ix %d\n", g_enb_ral_obj[instanceP].pending_req_mt_ix, g_enb_ral_obj[instanceP].pending_req_ch_ix); - } - } - break; - - case IO_CMD_DEL: - { - // printf("Usage: gioctl rb del \n"); - struct nas_msg_rb_release_request *msgreq; - struct nas_msg_rb_release_reply *msgrep; - struct ral_lte_channel *currChannel; - MIH_C_LINK_TUPLE_ID_T* ltid; - MIH_C_LINK_DN_REASON_T reason_code; - // - gifr.type=NAS_MSG_RB_RELEASE_REQUEST; - memset (g_enb_ral_obj[instanceP].buffer,0,800); - gifr.msg= &(g_enb_ral_obj[instanceP].buffer[0]); - msgreq=(struct nas_msg_rb_release_request *)(gifr.msg); - msgrep=(struct nas_msg_rb_release_reply *)(gifr.msg); - // - if (mt_ix == RAL_MAX_MT){ - currChannel = &(g_enb_ral_obj[instanceP].mcast.radio_channel); - msgreq->lcr = mt_ix; - }else{ - currChannel = &(g_enb_ral_obj[instanceP].mt[mt_ix].radio_channel[ch_ix]); - msgreq->lcr = g_enb_ral_obj[instanceP].mt[mt_ix].ue_id; - } - msgreq->rab_id = currChannel->rbId; - msgreq->cnxid = currChannel->cnx_id; - msgreq->mcast_flag = currChannel->multicast; - cnxid = msgreq->cnxid; - // - DEBUG(" Radio Bearer release requested\n"); - err=ioctl(fd, NASRG_IOCTL_RAL, &gifr); - if (err<0){ - ERR("IOCTL error, err=%d\n",err); - rc = -1; - } - // check answer from NAS - msgrep->cnxid = cnxid; // Temp - hardcoded - if ((msgrep->status<0)||(msgrep->cnxid!=cnxid)||(err<0)){ - ERR(" Radio bearer release failure: status %d\n", msgrep->status); - rc = -1; - g_enb_ral_obj[instanceP].pending_req_status = MIH_C_STATUS_REJECTED; - }else{ - g_enb_ral_obj[instanceP].pending_req_status = MIH_C_STATUS_SUCCESS; - } - if (g_enb_ral_obj[instanceP].pending_mt_flag){ - reason_code = MIH_C_LINK_DOWN_REASON_EXPLICIT_DISCONNECT; - if (mt_ix == RAL_MAX_MT) - ltid = &g_enb_ral_obj[instanceP].mcast.ltid; - else - ltid = &g_enb_ral_obj[instanceP].mt[mt_ix].ltid; - eRALlte_send_link_down_indication(&g_enb_ral_obj[instanceP].pending_req_transaction_id, ltid, NULL, &reason_code); - // aRALu_send_link_res_deactivate_cnf(); - } - - // mark resource as free again anyway - if (mt_ix == RAL_MAX_MT) - eRALlte_process_clean_channel(&(g_enb_ral_obj[instanceP].mcast.radio_channel)); - else - eRALlte_process_clean_channel(&(g_enb_ral_obj[instanceP].mt[mt_ix].radio_channel[ch_ix])); - DEBUG("Channel released : UE %d, channel %d, cnx_id %d \n\n",mt_ix, ch_ix, cnxid); - } - break; - - - case IO_CMD_LIST: - { - // printf("Usage: gioctl rb list \n"); - uint8_t *msgrep; - uint8_t rbi, i; - uint8_t num_rbs; - struct nas_msg_rb_list_reply *list; - struct nas_msg_rb_list_request *msgreq; - gifr.type=NAS_MSG_RB_LIST_REQUEST; - memset (g_enb_ral_obj[instanceP].buffer,0,800); - gifr.msg= &(g_enb_ral_obj[instanceP].buffer[0]); - msgreq=(struct nas_msg_rb_list_request *)(gifr.msg); - msgrep=(uint8_t *)(gifr.msg); - if (mt_ix < RAL_MAX_MT){ - msgreq->lcr = g_enb_ral_obj[instanceP].mt[mt_ix].ue_id; - }else{ - msgreq->lcr = 0; - mt_ix =0; //Temp - } - // - DEBUG(" Radio bearer list requested\n"); - err=ioctl(fd, NASRG_IOCTL_RAL, &gifr); - if (err<0){ - ERR("IOCTL error, err=%d\n",err); - rc = -1; - } - num_rbs = msgrep[0]; - //RAL_print_buffer (msgrep, 50); - DEBUG("number of radio bearers %d \n", num_rbs); - DEBUG("rab_id\tcnxid\tSapi\t\tQoS\t\tState\n"); - list=(struct nas_msg_rb_list_reply *)(msgrep+1); - for(rbi=0; rbicell_id = g_enb_ral_obj[instanceP].cell_id; - // - DEBUG("eNB measures triggered, cell_id %d\n", msgreq->cell_id); - err=ioctl(fd, NASRG_IOCTL_RAL, &gifr); - if (err<0){ - ERR("IOCTL error, err=%d\n",err); - rc = -1; - } - // check answer from NAS - if (msgrep->status != 0){ - ERR(" eNB measures trigger failure: %d\n",msgrep->status); - rc = -1; - }else{ - DEBUG(" eNB measures triggered successfully \n"); - rc = 0; - } - } - break; - case IO_CMD_LIST: - { - struct nas_msg_enb_measure_retrieve *msgrep; - int ix; - // - gifr.type=NAS_MSG_ENB_MEAS_RETRIEVE; - memset (g_enb_ral_obj[instanceP].buffer,0,800); - gifr.msg= &(g_enb_ral_obj[instanceP].buffer[0]); - msgrep=(struct nas_msg_enb_measure_retrieve *)(gifr.msg); - // - DEBUG("Retrieving measure from NAS\n"); - err=ioctl(fd, NASRG_IOCTL_RAL, &gifr); - if (err<0){ - ERR("IOCTL error, err=%d\n",err); - rc = -1; - } - // Store the values received - g_enb_ral_obj[instanceP].num_UEs = msgrep->num_UEs; - for (ix=0; ixmeasures[ix].rlcBufferOccupancy; - g_enb_ral_obj[instanceP].scheduledPRB[ix] = msgrep->measures[ix].scheduledPRB; - g_enb_ral_obj[instanceP].totalDataVolume[ix] = msgrep->measures[ix].totalDataVolume; - } - g_enb_ral_obj[instanceP].totalNumPRBs = msgrep->totalNumPRBs; - #ifdef DEBUG_RAL_DETAILS - DEBUG("Measures received- cell %d, Number of UEs %d, Total number of PRBs %d\n", msgrep->cell_id, msgrep->num_UEs, msgrep->totalNumPRBs); - for (ix=0; ixmeasures[ix].rlcBufferOccupancy, - msgrep->measures[ix].scheduledPRB, msgrep->measures[ix].totalDataVolume); - #endif - RAL_NAS_measures_analyze(); - } - break; - default: - ERR ("RAL_process_NAS_message : invalid ioctl command %d\n",ioctl_cmd); - rc= -1; - } //end switch ioctl_cmd - break; - - case IO_OBJ_MC: - switch (ioctl_cmd){ - case IO_CMD_ADD: - { - struct nas_msg_mt_mcast_join *msgreq; - struct nas_msg_mt_mcast_reply *msgrep; - struct ral_lte_channel *currChannel; - // - gifr.type=NAS_RG_MSG_MT_MCAST_JOIN; - memset (g_enb_ral_obj[instanceP].buffer,0,800); - gifr.msg= &(g_enb_ral_obj[instanceP].buffer[0]); - msgreq=(struct nas_msg_mt_mcast_join *)(gifr.msg); - msgrep=(struct nas_msg_mt_mcast_reply *)(gifr.msg); - // - currChannel = &(g_enb_ral_obj[instanceP].mcast.radio_channel); - msgreq->ue_id = mt_ix; - msgreq->rab_id = currChannel->rbId; - msgreq->cnxid = currChannel->cnx_id; - // - DEBUG("UE multicast join notification requested, ue_id %d\n", mt_ix); - err=ioctl(fd, NASRG_IOCTL_RAL, &gifr); - if (err<0){ - ERR("IOCTL error, err=%d\n",err); - rc = -1; - } - // check answer from NAS - if ((msgrep->result<0)||(msgrep->ue_id!=mt_ix)||(err<0)){ - ERR(" UE multicast join notification failure: %d\n",msgrep->result); - g_enb_ral_obj[instanceP].pending_req_status = MIH_C_STATUS_REJECTED; - rc = -1; - }else{ - DEBUG(" ++ UE multicast join notification transmitted to MT \n"); - g_enb_ral_obj[instanceP].pending_req_status = MIH_C_STATUS_SUCCESS; - rc = 0; - } - // TODO aRALu_send_link_mc_join_cnf(); - } - break; - - case IO_CMD_DEL: - { - struct nas_msg_mt_mcast_leave *msgreq; - struct nas_msg_mt_mcast_reply *msgrep; - struct ral_lte_channel *currChannel; - // - gifr.type=NAS_RG_MSG_MT_MCAST_LEAVE; - memset (g_enb_ral_obj[instanceP].buffer,0,800); - gifr.msg= &(g_enb_ral_obj[instanceP].buffer[0]); - msgreq=(struct nas_msg_mt_mcast_leave *)(gifr.msg); - msgrep=(struct nas_msg_mt_mcast_reply *)(gifr.msg); - // - currChannel = &(g_enb_ral_obj[instanceP].mcast.radio_channel); - msgreq->ue_id = mt_ix; - msgreq->rab_id = currChannel->rbId; - msgreq->cnxid = currChannel->cnx_id; - // - DEBUG("UE multicast leave notification requested, ue_id %d\n", mt_ix); - err=ioctl(fd, NASRG_IOCTL_RAL, &gifr); - if (err<0){ - ERR("IOCTL error, err=%d\n",err); - rc = -1; - } - // check answer from NAS - if ((msgrep->result<0)||(msgrep->ue_id!=mt_ix)||(err<0)){ - ERR(" UE multicast leave notification failure: %d\n",msgrep->result); - g_enb_ral_obj[instanceP].pending_req_status = MIH_C_STATUS_REJECTED; - rc = -1; - }else{ - DEBUG(" ++ UE multicast leave notification transmitted to MT \n" ); - g_enb_ral_obj[instanceP].pending_req_status = MIH_C_STATUS_SUCCESS; - rc = 0; - } - // TODO aRALu_send_link_mc_leave_cnf(); - } - break; - default: - ERR ("RAL_process_NAS_message : invalid ioctl command %d\n",ioctl_cmd); - rc= -1; - } //end switch ioctl_cmd - break; - default: - ERR ("RAL_process_NAS_message : invalid ioctl object %d\n",ioctl_obj); - rc= -1; - } //end switch ioctl_obj - //rc=0; - return rc; -} -*/ - - diff --git a/openair3/RAL-LTE/LTE_RAL_ENB/SRC/lteRALenb_main.c b/openair3/RAL-LTE/LTE_RAL_ENB/SRC/lteRALenb_main.c deleted file mode 100755 index df13c030f3..0000000000 --- a/openair3/RAL-LTE/LTE_RAL_ENB/SRC/lteRALenb_main.c +++ /dev/null @@ -1,340 +0,0 @@ -/***************************************************************************** - * Eurecom OpenAirInterface 3 - * Copyright(c) 2012 Eurecom - * - * Source lteRALenb_main.c - * Version 0.1 - * Date 01/17/2014 - * Product MIH RAL LTE - * Subsystem RAL main process running at the network side - * Authors Michelle Wetterwald, Lionel Gauthier, Frederic Maurel - * Description Implements the Radio Access Link process that interface the - * Media Independent Handover (MIH) Function to the LTE specific - * L2 media-dependent access layer. - * - * The MIH Function provides network information to upper layers - * and requests actions from lower layers to optimize handovers - * between heterogeneous networks. - *****************************************************************************/ -#define LTE_RAL_ENB -#define LTE_RAL_ENB_MAIN_C -//----------------------------------------------------------------------------- -#include -#include -#include -#include -#include -#include -#include -//----------------------------------------------------------------------------- -#include "assertions.h" -#include "lteRALenb.h" -#include "intertask_interface.h" -#include "OCG.h" -//----------------------------------------------------------------------------- - - - -/****************************************************************************/ -/******************* G L O B A L D E F I N I T I O N S *****************/ -/****************************************************************************/ -extern OAI_Emulation oai_emulation; - -/****************************************************************************/ -/******************* L O C A L D E F I N I T I O N S *******************/ -/****************************************************************************/ - -/**************************************************************************** - ** Name: get_IPv6_addr() ** - ** Description: Gets the IPv6 address of the specified network interface. ** - ** Inputs: if_name Interface name ** - ***************************************************************************/ -void eRAL_get_IPv6_addr(const char* if_name) -{ - //----------------------------------------------------------------------------- -#define IPV6_ADDR_LINKLOCAL 0x0020U - - FILE *f; - char devname[20]; - int plen, scope, dad_status, if_idx; - char addr6p[8][5]; - int found = 0; - char my_addr[16]; - char temp_addr[32]; - int i, j; - - LOG_D(RAL_ENB, " %s : network interface %s\n", __FUNCTION__, if_name); - - if ((f = fopen("/proc/net/if_inet6", "r")) != NULL) { - while (fscanf(f, "%4s%4s%4s%4s%4s%4s%4s%4s %02x %02x %02x %02x %20s\n", - addr6p[0], addr6p[1], addr6p[2], addr6p[3], - addr6p[4], addr6p[5], addr6p[6], addr6p[7], - &if_idx, &plen, &scope, &dad_status, devname) != EOF) { - - if (!strcmp(devname, if_name)) { - found = 1; - - // retrieve numerical value - if ((scope == 0) || (scope == IPV6_ADDR_LINKLOCAL)) { - LOG_D(RAL_ENB, " adresse %s:%s:%s:%s:%s:%s:%s:%s", - addr6p[0], addr6p[1], addr6p[2], addr6p[3], - addr6p[4], addr6p[5], addr6p[6], addr6p[7]); - LOG_D(RAL_ENB, " Scope:"); - - switch (scope) { - case 0: - LOG_D(RAL_ENB, " Global\n"); - break; - - case IPV6_ADDR_LINKLOCAL: - LOG_D(RAL_ENB, " Link\n"); - break; - - default: - LOG_D(RAL_ENB, " Unknown\n"); - break; - } - - LOG_D(RAL_ENB, " Numerical value: "); - - for (i = 0; i < 8; i++) { - for (j = 0; j < 4; j++) { - addr6p[i][j]= toupper(addr6p[i][j]); - - if ((addr6p[i][j] >= 'A') && (addr6p[i][j] <= 'F')) { - temp_addr[(4*i)+j] =(unsigned short int)(addr6p[i][j]-'A')+10; - } else if ((addr6p[i][j] >= '0') && (addr6p[i][j] <= '9')) { - temp_addr[(4*i)+j] =(unsigned short int)(addr6p[i][j]-'0'); - } - } - - my_addr[2*i] = (16*temp_addr[(4*i)])+temp_addr[(4*i)+1]; - my_addr[(2*i)+1] = (16*temp_addr[(4*i)+2])+temp_addr[(4*i)+3]; - - } - - for (i = 0; i < 16; i++) { - LOG_D(RAL_ENB, "-%hhx-",my_addr[i]); - } - - LOG_D(RAL_ENB, "\n"); - } - } - } - - fclose(f); - - if (!found) { - LOG_E(RAL_ENB, " %s : interface %s not found\n\n", __FUNCTION__, if_name); - } - } -} - -void eRAL_init_default_values(void) -{ - g_conf_enb_ral_listening_port = ENB_DEFAULT_LOCAL_PORT_RAL; - g_conf_enb_ral_ip_address = ENB_DEFAULT_IP_ADDRESS_RAL; - g_conf_enb_ral_link_id = ENB_DEFAULT_LINK_ID_RAL; - g_conf_enb_ral_link_address = ENB_DEFAULT_LINK_ADDRESS_RAL; - g_conf_enb_mihf_remote_port = ENB_DEFAULT_REMOTE_PORT_MIHF; - g_conf_enb_mihf_ip_address = ENB_DEFAULT_IP_ADDRESS_MIHF; - g_conf_enb_mihf_id = ENB_DEFAULT_MIHF_ID; -} - -/**************************************************************************** - ** Name: eRAL_initialize() ** - ** ** - ** Description: Performs overall RAL LTE initialisations: ** - ** ** - ** Inputs: None ** - ** ** - ***************************************************************************/ -int eRAL_initialize(void) -{ - //----------------------------------------------------------------------------- - ral_enb_instance_t instance = 0; - unsigned int mod_id = 0; - char *char_tmp = NULL; - - MIH_C_init(); - - srand(time(NULL)); - - memset(g_enb_ral_obj, 0, sizeof(lte_ral_enb_object_t)*MAX_MODULES); - - g_enb_ral_fd2instance = hashtable_create (32, NULL, hash_free_int_func); - - for (mod_id = 0; mod_id < oai_emulation.info.nb_enb_local; mod_id++) { - char_tmp = calloc(1, strlen(g_conf_enb_ral_listening_port) + 3); // 2 digits + \0 ->99 instances - instance = mod_id; - - sprintf(char_tmp,"%d", atoi(g_conf_enb_ral_listening_port) + mod_id); - g_enb_ral_obj[mod_id].ral_listening_port = char_tmp; - - g_enb_ral_obj[mod_id].ral_ip_address = strdup(g_conf_enb_ral_ip_address); - g_enb_ral_obj[mod_id].ral_link_address = strdup(g_conf_enb_ral_link_address); - - char_tmp = calloc(1, strlen(g_conf_enb_mihf_remote_port) + 3); // 2 digits + \0 ->99 instances - sprintf(char_tmp, "%d", atoi(g_conf_enb_mihf_remote_port) + instance); - g_enb_ral_obj[mod_id].mihf_remote_port = char_tmp; - - g_enb_ral_obj[mod_id].mihf_ip_address = strdup(g_conf_enb_mihf_ip_address); - - char_tmp = calloc(1, strlen(g_conf_enb_mihf_id) + 3); // 2 digits + \0 ->99 instances - sprintf(char_tmp, "%s%02d",g_conf_enb_mihf_id, instance); - g_enb_ral_obj[mod_id].mihf_id = char_tmp; - - char_tmp = calloc(1, strlen(g_conf_enb_ral_link_id) + 3); // 2 digits + \0 ->99 instances - sprintf(char_tmp, "%s%02d",g_conf_enb_ral_link_id, mod_id); - g_enb_ral_obj[mod_id].link_id = char_tmp; - char_tmp = NULL; - - // excluded MIH_C_LINK_AC_TYPE_NONE - // excluded MIH_C_LINK_AC_TYPE_LINK_DISCONNECT - // excluded MIH_C_LINK_AC_TYPE_LINK_LOW_POWER - // excluded MIH_C_LINK_AC_TYPE_LINK_POWER_DOWN - // excluded MIH_C_LINK_AC_TYPE_LINK_POWER_UP - g_enb_ral_obj[mod_id].mih_supported_link_action_list = (1 << MIH_C_LINK_AC_TYPE_LINK_FLOW_ATTR) | - (1 << MIH_C_LINK_AC_TYPE_LINK_ACTIVATE_RESOURCES) | - (1 << MIH_C_LINK_AC_TYPE_LINK_DEACTIVATE_RESOURCES)| - (1 << MIH_C_LINK_AC_TYPE_LINK_POWER_UP)| - (1 << MIH_C_LINK_AC_TYPE_LINK_DISCONNECT)| - (1 << MIH_C_LINK_AC_TYPE_LINK_POWER_DOWN); - // excluded MIH_C_BIT_LINK_DETECTED - // excluded MIH_C_BIT_LINK_GOING_DOWN - // excluded MIH_C_BIT_LINK_HANDOVER_IMMINENT - // excluded MIH_C_BIT_LINK_HANDOVER_COMPLETE - // excluded MIH_C_BIT_LINK_PDU_TRANSMIT_STATUS - g_enb_ral_obj[mod_id].mih_supported_link_event_list = MIH_C_BIT_LINK_UP | MIH_C_BIT_LINK_DOWN | MIH_C_BIT_LINK_PARAMETERS_REPORT; - // excluded MIH_C_BIT_LINK_GET_PARAMETERS - // excluded MIH_C_BIT_LINK_CONFIGURE_THRESHOLDS - g_enb_ral_obj[mod_id].mih_supported_link_command_list = MIH_C_BIT_LINK_EVENT_SUBSCRIBE | MIH_C_BIT_LINK_CONFIGURE_THRESHOLDS | MIH_C_BIT_LINK_ACTION | - MIH_C_BIT_LINK_EVENT_UNSUBSCRIBE | - MIH_C_BIT_LINK_ACTION; - - g_enb_ral_obj[mod_id].link_mihcap_flag = MIH_C_BIT_EVENT_SERVICE_SUPPORTED | MIH_C_BIT_COMMAND_SERVICE_SUPPORTED | MIH_C_BIT_INFORMATION_SERVICE_SUPPORTED; - - g_enb_ral_obj[mod_id].net_caps = MIH_C_BIT_NET_CAPS_QOS_CLASS5 | MIH_C_BIT_NET_CAPS_INTERNET_ACCESS | MIH_C_BIT_NET_CAPS_MIH_CAPABILITY; - - - g_enb_ral_obj[mod_id].transaction_id = (MIH_C_TRANSACTION_ID_T)rand(); - - - g_enb_ral_obj[mod_id].ue_htbl = hashtable_create(32, NULL, NULL); - - LOG_D(RAL_ENB, " Connect to the MIH-F for module id instance %d...\n", mod_id, instance); - g_enb_ral_obj[mod_id].mih_sock_desc = -1; - AssertFatal(eRAL_mihf_connect(instance) >= 0, " %s : Could not connect to MIH-F...\n", __FUNCTION__); - itti_subscribe_event_fd(TASK_RAL_ENB, g_enb_ral_obj[mod_id].mih_sock_desc); - hashtable_insert(g_enb_ral_fd2instance, g_enb_ral_obj[mod_id].mih_sock_desc, (void*)instance); - - eRAL_send_link_register_indication(instance, &g_enb_ral_obj[mod_id].transaction_id); - g_enb_ral_obj[mod_id].transaction_id += 1; - } - - return 0; -} - -void eRAL_process_file_descriptors(struct epoll_event *events, int nb_events) -{ - int i; - ral_enb_instance_t instance; - hashtable_rc_t rc; - - if (events == NULL) { - return; - } - - for (i = 0; i < nb_events; i++) { - rc = hashtable_get(g_enb_ral_fd2instance, events[i].data.fd, (void**)&instance); - - if (rc == HASH_TABLE_OK) { - eRAL_mih_link_process_message(instance); - } - } -} - -void* eRAL_task(void *args_p) -{ - int nb_events; - struct epoll_event *events; - MessageDef *msg_p = NULL; - const char *msg_name = NULL; - instance_t instance = 0; - - - eRAL_initialize(); - itti_mark_task_ready (TASK_RAL_ENB); - - while(1) { - // Wait for a message - itti_receive_msg (TASK_RAL_ENB, &msg_p); - - if (msg_p != NULL) { - - msg_name = ITTI_MSG_NAME (msg_p); - instance = ITTI_MSG_INSTANCE (msg_p); - - switch (ITTI_MSG_ID(msg_p)) { - case TERMINATE_MESSAGE: - // TO DO - itti_exit_task (); - break; - - case TIMER_HAS_EXPIRED: - LOG_D(RAL_ENB, "Received %s\n", msg_name); - break; - - case RRC_RAL_SYSTEM_CONFIGURATION_IND: - LOG_D(RAL_ENB, "Received %s\n", msg_name); - eRAL_rx_rrc_ral_system_configuration_indication(instance, msg_p); - break; - - case RRC_RAL_CONNECTION_ESTABLISHMENT_IND: - LOG_D(RAL_ENB, "Received %s\n", msg_name); - eRAL_rx_rrc_ral_connection_establishment_indication(instance, msg_p); - break; - - case RRC_RAL_CONNECTION_REESTABLISHMENT_IND: - LOG_D(RAL_ENB, "Received %s\n", msg_name); - eRAL_rx_rrc_ral_connection_reestablishment_indication(instance, msg_p); - break; - - case RRC_RAL_CONNECTION_RECONFIGURATION_IND: - LOG_D(RAL_ENB, "Received %s\n", msg_name); - eRAL_rx_rrc_ral_connection_reconfiguration_indication(instance, msg_p); - break; - - case RRC_RAL_MEASUREMENT_REPORT_IND: - LOG_D(RAL_ENB, "Received %s\n", msg_name); - eRAL_rx_rrc_ral_measurement_report_indication(instance, msg_p); - break; - - case RRC_RAL_CONNECTION_RELEASE_IND: - LOG_D(RAL_ENB, "Received %s\n", msg_name); - eRAL_rx_rrc_ral_connection_release_indication(instance, msg_p); - break; - - case RRC_RAL_CONFIGURE_THRESHOLD_CONF: - LOG_D(RAL_ENB, "Received %s\n", msg_name); - eRAL_rx_rrc_ral_configure_threshold_conf(instance, msg_p); - break; - - default: - LOG_E(RAL_ENB, "Received unexpected message %s\n", msg_name); - break; - } - - itti_free (ITTI_MSG_ORIGIN_ID(msg_p), msg_p); - msg_p = NULL; - } - - nb_events = itti_get_events(TASK_RAL_ENB, &events); - - /* Now handle notifications for other sockets */ - if (nb_events > 0) { - eRAL_process_file_descriptors(events, nb_events); - } - } -} - diff --git a/openair3/RAL-LTE/LTE_RAL_ENB/SRC/lteRALenb_mih_msg.c b/openair3/RAL-LTE/LTE_RAL_ENB/SRC/lteRALenb_mih_msg.c deleted file mode 100755 index 4791dc7c8c..0000000000 --- a/openair3/RAL-LTE/LTE_RAL_ENB/SRC/lteRALenb_mih_msg.c +++ /dev/null @@ -1,1447 +0,0 @@ -/*************************************************************************** - lteRALenb_mih_msg.c - description - *************************************************************************** - Eurecom OpenAirInterface 3 - Copyright(c) 1999 - 2013 Eurecom - - This program is free software; you can redistribute it and/or modify it - under the terms and conditions of the GNU General Public License, - version 2, as published by the Free Software Foundation. - - This program is distributed in the hope it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - more details. - - You should have received a copy of the GNU General Public License along with - this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - - The full GNU General Public License is included in this distribution in - the file called "COPYING". - - Contact Information - Openair Admin: openair_admin@eurecom.fr - Openair Tech : openair_tech@eurecom.fr - Forums : http://forums.eurecom.fsr/openairinterface - Address : Eurecom, 450 route des Chappes, 06410 Biot Sophia Antipolis, France - *******************************************************************************/ -/*! \file lteRALenb_mih_msg.c - * \brief Interface for MIH primitives in LTE-RAL-ENB - * \author WETTERWALD Michelle, GAUTHIER Lionel, MAUREL Frederic - * \date 2013 - * \company EURECOM - * \email: michelle.wetterwald@eurecom.fr, lionel.gauthier@eurecom.fr, frederic.maurel@eurecom.fr - */ -/*******************************************************************************/ -#define LTE_RAL_ENB -#define LTE_RAL_ENB_MIH_MSG_C -#include "lteRALenb.h" - -/****************************************************************************/ -/******************* G L O C A L D E F I N I T I O N S *****************/ -/****************************************************************************/ - -#define MSG_CODEC_RECV_BUFFER_SIZE 16400 -#define MSG_CODEC_SEND_BUFFER_SIZE 16400 - -/****************************************************************************/ -/******************* L O C A L D E F I N I T I O N S *******************/ -/****************************************************************************/ - -static u_int8_t g_msg_codec_recv_buffer[MSG_CODEC_RECV_BUFFER_SIZE] = {}; -static u_int8_t g_msg_codec_send_buffer[MSG_CODEC_SEND_BUFFER_SIZE] = {}; - -static char g_msg_print_buffer[8192] = {}; -static char g_msg_codec_print_buffer[8192] = {}; - - -//----------------------------------------------------------------------------- -void eRAL_MIH_C_3GPP_ADDR_load_3gpp_str_address(ral_enb_instance_t instanceP, MIH_C_3GPP_ADDR_T* _3gpp_addr_pP, u_int8_t* str_pP) -//----------------------------------------------------------------------------- -{ - int i, l; - u_int8_t val_temp; - unsigned char address_3gpp[32]; - unsigned char buf[3]; - u_int8_t _3gpp_byte_address[8]; - module_id_t mod_id = instanceP; - - strcpy((char *)address_3gpp, (char *)str_pP); - - for(l=0; l<8; l++) { - i=l*2; - buf[0]= address_3gpp[i]; - buf[1]= address_3gpp[i+1]; - buf[2]= '\0'; - //sscanf((const char *)buf,"%02x", &val_temp); - sscanf((const char *)buf,"%hhx", &val_temp); - _3gpp_byte_address[l] = val_temp; - } - - _3gpp_byte_address[7] += mod_id; - MIH_C_3GPP_ADDR_set(_3gpp_addr_pP, _3gpp_byte_address, 8); -} - -/****************************************************************************/ -/****************** E X P O R T E D F U N C T I O N S ******************/ -/****************************************************************************/ -/* - * ------------------------------------------------------------------------- - * Functions used to send MIH link service management messages - * ------------------------------------------------------------------------- - */ - -/**************************************************************************** - ** Name: eRAL_send_link_register_indication() ** - ** Description: Sends a Link_Register.indication message to the MIHF. ** - ** This message is ODTONE specific and not defined by the 802.21 ** - ** standard. It allows the Link SAP to send informations to the MIHF ** - ** about which technology it supports and which interface it manages. ** - ** Upon receiving this message the MIHF executes its Link SAPs ** - ** discovery procedure in order to get the full link capabilities. ** - ** Inputs: tid_pP Transaction identifier ** - ** Others: g_enb_ral_obj[instanceP].link_id, g_enb_ral_obj[instanceP].mihf_id, ralpriv ** - ** Outputs: None ** - ** Others: g_msg_codec_send_buffer ** - ***************************************************************************/ -void eRAL_send_link_register_indication(ral_enb_instance_t instanceP, MIH_C_TRANSACTION_ID_T *tid_pP) -{ - MIH_C_Message_Link_Register_indication_t message; - Bit_Buffer_t *bb_p; - int message_total_length; - module_id_t mod_id = instanceP; - - LOG_D(RAL_ENB, " Send MIH_C_MESSAGE_LINK_REGISTER_INDICATION\n"); - - bb_p = new_BitBuffer_0(); - BitBuffer_wrap(bb_p, g_msg_codec_send_buffer, (unsigned int)MSG_CODEC_SEND_BUFFER_SIZE); - - memset(&message, 0, sizeof (MIH_C_Message_Link_Register_indication_t)); - - message.header.version = (MIH_C_VERSION_T)MIH_C_PROTOCOL_VERSION; - //message.header.ack_req = 0; - //message.header.ack_rsp = 0; - //message.header.uir = 0; - //message.header.more_fragment = 0 - //message.header.fragment_number = 0; - message.header.service_identifier = (MIH_C_SID_T)1; - message.header.operation_code = (MIH_C_OPCODE_T)3; - message.header.action_identifier = (MIH_C_AID_T)6; - message.header.transaction_id = *tid_pP; - - MIH_C_MIHF_ID_set(&message.source, (u_int8_t*)g_enb_ral_obj[mod_id].link_id, strlen(g_enb_ral_obj[mod_id].link_id)); - - MIH_C_MIHF_ID_set(&message.destination, (u_int8_t*)g_enb_ral_obj[mod_id].mihf_id, strlen(g_enb_ral_obj[mod_id].mihf_id)); - - message.primitive.Link_Id.link_type = MIH_C_WIRELESS_LTE; //MIH_C_WIRELESS_UMTS; -#ifdef USE_3GPP_ADDR_AS_LINK_ADDR - message.primitive.Link_Id.link_addr.choice = (MIH_C_CHOICE_T)MIH_C_CHOICE_3GPP_ADDR; - eRAL_MIH_C_3GPP_ADDR_load_3gpp_str_address(mod_id, &message.primitive.Link_Id.link_addr._union._3gpp_addr, (u_int8_t*)ENB_DEFAULT_3GPP_ADDRESS); -#else - message.primitive.Link_Id.link_addr.choice = (MIH_C_CHOICE_T)MIH_C_CHOICE_3GPP_3G_CELL_ID; - memcpy(message.primitive.Link_Id.link_addr._union._3gpp_3g_cell_id.plmn_id.val, &g_enb_ral_obj[mod_id].plmn_id, 3); - message.primitive.Link_Id.link_addr._union._3gpp_3g_cell_id.cell_id = g_enb_ral_obj[mod_id].cell_id; - //Bit_Buffer_t *plmn = new_BitBuffer_0(); - //BitBuffer_wrap(plmn, (unsigned char*) &g_enb_ral_obj[instanceP].plmn_id, DEFAULT_PLMN_SIZE); - //MIH_C_PLMN_ID_decode(plmn, &message.primitive.Link_Id.link_addr._union._3gpp_3g_cell_id.plmn_id); - //message.primitive.Link_Id.link_addr._union._3gpp_3g_cell_id.cell_id = g_enb_ral_obj[instanceP].cell_id; - //free_BitBuffer(plmn); -#endif - - message_total_length = MIH_C_Link_Message_Encode_Link_Register_indication(bb_p, &message); - - if (eRAL_send_to_mih( instanceP, bb_p->m_buffer, message_total_length) < 0) { - LOG_E(RAL_ENB, ": Send Link_Register.indication\n"); - } else { - LOG_D(RAL_ENB, ": Sent Link_Register.indication\n"); - } - - free_BitBuffer(bb_p); -} - -/**************************************************************************** - ** ** - ** Name: eRAL_send_capability_discover_confirm() ** - ** ** - ** Description: Sends capability discover service management response to ** - ** the MIH-F. ** - ** ** - ** Inputs: tid_pP Transaction identifier ** - ** statusP: Status of operation ** - ** levt_listP: List of events supported by the link layer ** - ** lcmd_listP: List of commands supported by the link ** - ** layer ** - ** Others: g_enb_ral_obj[instanceP].link_id, g_enb_ral_obj[instanceP].mihf_id ** - ** ** - ** Outputs: None ** - ** Return: None ** - ** Others: g_msg_codec_send_buffer ** - ** ** - ***************************************************************************/ -void eRAL_send_capability_discover_confirm(ral_enb_instance_t instanceP, MIH_C_TRANSACTION_ID_T *tid_pP, - MIH_C_STATUS_T *statusP, - MIH_C_LINK_EVENT_LIST_T *link_evt_listP, - MIH_C_LINK_CMD_LIST_T *link_cmd_listP) -{ - MIH_C_Message_Link_Capability_Discover_confirm_t message; - Bit_Buffer_t *bb_p; - int message_total_length; - - LOG_D(RAL_ENB, " Send MIH_C_MESSAGE_LINK_CAPABILITY_DISCOVER_CONFIRM\n"); - - bb_p = new_BitBuffer_0(); - BitBuffer_wrap(bb_p, g_msg_codec_send_buffer, (unsigned int)MSG_CODEC_SEND_BUFFER_SIZE); - - memset(&message, 0, sizeof (MIH_C_Message_Link_Capability_Discover_confirm_t)); - - message.header.version = (MIH_C_VERSION_T)MIH_C_PROTOCOL_VERSION; - //message.header.ack_req = 0; - //message.header.ack_rsp = 0; - //message.header.uir = 0; - //message.header.more_fragment = 0 - //message.header.fragment_number = 0; - message.header.service_identifier = (MIH_C_SID_T)1; - message.header.operation_code = (MIH_C_OPCODE_T)0; - message.header.action_identifier = (MIH_C_AID_T)1; - message.header.transaction_id = *tid_pP; - - MIH_C_MIHF_ID_set(&message.source, (u_int8_t*)g_enb_ral_obj[instanceP].link_id, strlen(g_enb_ral_obj[instanceP].link_id)); - MIH_C_MIHF_ID_set(&message.destination, (u_int8_t*)g_enb_ral_obj[instanceP].mihf_id, strlen(g_enb_ral_obj[instanceP].mihf_id)); - - message.primitive.Status = *statusP; - message.primitive.SupportedLinkEventList = link_evt_listP; - message.primitive.SupportedLinkCommandList = link_cmd_listP; - - message_total_length = MIH_C_Link_Message_Encode_Capability_Discover_confirm(bb_p, &message); - - if (eRAL_send_to_mih( instanceP, bb_p->m_buffer, message_total_length) < 0) { - LOG_E(RAL_ENB, ": Send Link_Capability_Discover.confirm\n"); - } else { - LOG_D(RAL_ENB, ": Sent Link_Capability_Discover.confirm\n"); - } - - free_BitBuffer(bb_p); -} - -/**************************************************************************** - ** ** - ** Name: eRAL_send_event_subscribe_confirm() ** - ** ** - ** Description: Sends a Link_Event_Subscribe.confirm message to the MIHF. ** - ** ** - ** This primitive is generated in response to a Link_Event_ ** - ** Subscribe.request. ** - ** ** - ** Inputs: tid_pP Transaction identifier ** - ** statusP: Status of operation ** - ** levt_listP: List of successfully subscribed link events** - ** Others: g_enb_ral_obj[instanceP].link_id, g_enb_ral_obj[instanceP].mihf_id ** - ** ** - ** Outputs: None ** - ** Return: None ** - ** Others: g_msg_codec_send_buffer ** - ** ** - ***************************************************************************/ -void eRAL_send_event_subscribe_confirm(ral_enb_instance_t instanceP, MIH_C_TRANSACTION_ID_T *tid_pP, - MIH_C_STATUS_T *statusP, - MIH_C_LINK_EVENT_LIST_T *levt_listP) -{ - MIH_C_Message_Link_Event_Subscribe_confirm_t message; - Bit_Buffer_t *bb_p; - int message_total_length; - - LOG_D(RAL_ENB, " Send MIH_C_MESSAGE_LINK_EVENT_SUBSCRIBE_CONFIRM\n"); - - bb_p = new_BitBuffer_0(); - BitBuffer_wrap(bb_p, g_msg_codec_send_buffer, (unsigned int)MSG_CODEC_SEND_BUFFER_SIZE); - - memset(&message, 0, sizeof (MIH_C_Message_Link_Event_Subscribe_confirm_t)); - - message.header.version = (MIH_C_VERSION_T)MIH_C_PROTOCOL_VERSION; - //message.header.ack_req = 0; - //message.header.ack_rsp = 0; - //message.header.uir = 0; - //message.header.more_fragment = 0 - //message.header.fragment_number = 0; - message.header.service_identifier = (MIH_C_SID_T)1; - message.header.operation_code = (MIH_C_OPCODE_T)0; - message.header.action_identifier = (MIH_C_AID_T)4; - message.header.transaction_id = *tid_pP; - - MIH_C_MIHF_ID_set(&message.source, (u_int8_t*)g_enb_ral_obj[instanceP].link_id, strlen(g_enb_ral_obj[instanceP].link_id)); - - MIH_C_MIHF_ID_set(&message.destination, (u_int8_t*)g_enb_ral_obj[instanceP].mihf_id, strlen(g_enb_ral_obj[instanceP].mihf_id)); - - message.primitive.Status = *statusP; - message.primitive.ResponseLinkEventList = levt_listP; - - message_total_length = MIH_C_Link_Message_Encode_Event_Subscribe_confirm(bb_p, &message); - - if (eRAL_send_to_mih( instanceP, bb_p->m_buffer, message_total_length) < 0) { - LOG_E(RAL_ENB, ": Send Link_Event_Subscribe.confirm\n"); - } else { - LOG_D(RAL_ENB, ": Sent Link_Event_Subscribe.confirm\n"); - } - - free_BitBuffer(bb_p); -} - -/**************************************************************************** - ** ** - ** Name: eRAL_send_event_unsubscribe_confirm() ** - ** ** - ** Description: Sends a Link_Event_Unsubscribe.confirm message to the ** - ** MIHF. ** - ** ** - ** This primitive is generated in response to a Link_Event_ ** - ** Unsubscribe.request. ** - ** ** - ** Inputs: tid_pP Transaction identifier ** - ** statusP: Status of operation ** - ** levt_listP: List of successfully subscribed link events** - ** Others: g_enb_ral_obj[instanceP].link_id, g_enb_ral_obj[instanceP].mihf_id ** - ** ** - ** Outputs: None ** - ** Return: None ** - ** Others: g_msg_codec_send_buffer ** - ** ** - ***************************************************************************/ -void eRAL_send_event_unsubscribe_confirm(ral_enb_instance_t instanceP, MIH_C_TRANSACTION_ID_T *tid_pP, - MIH_C_STATUS_T *statusP, - MIH_C_LINK_EVENT_LIST_T *levt_listP) -{ - MIH_C_Message_Link_Event_Unsubscribe_confirm_t message; - Bit_Buffer_t *bb_p; - int message_total_length; - - LOG_D(RAL_ENB, " Send MIH_C_MESSAGE_LINK_EVENT_UNSUBSCRIBE_CONFIRM\n"); - - bb_p = new_BitBuffer_0(); - BitBuffer_wrap(bb_p, g_msg_codec_send_buffer, (unsigned int)MSG_CODEC_SEND_BUFFER_SIZE); - - memset(&message, 0, sizeof (MIH_C_Message_Link_Event_Unsubscribe_confirm_t)); - - message.header.version = (MIH_C_VERSION_T)MIH_C_PROTOCOL_VERSION; - //message.header.ack_req = 0; - //message.header.ack_rsp = 0; - //message.header.uir = 0; - //message.header.more_fragment = 0 - //message.header.fragment_number = 0; - message.header.service_identifier = (MIH_C_SID_T)1; - message.header.operation_code = (MIH_C_OPCODE_T)0; - message.header.action_identifier = (MIH_C_AID_T)5; - message.header.transaction_id = *tid_pP; - - MIH_C_MIHF_ID_set(&message.source, (u_int8_t*)g_enb_ral_obj[instanceP].link_id, strlen(g_enb_ral_obj[instanceP].link_id)); - - MIH_C_MIHF_ID_set(&message.destination, (u_int8_t*)g_enb_ral_obj[instanceP].mihf_id, strlen(g_enb_ral_obj[instanceP].mihf_id)); - - message.primitive.Status = *statusP; - message.primitive.ResponseLinkEventList = levt_listP; - - message_total_length = MIH_C_Link_Message_Encode_Event_Unsubscribe_confirm(bb_p, &message); - - if (eRAL_send_to_mih( instanceP, bb_p->m_buffer, message_total_length) < 0) { - LOG_E(RAL_ENB, ": Send Link_Event_Unsubscribe.confirm\n"); - } else { - LOG_D(RAL_ENB, ": Sent Link_Event_Unsubscribe.confirm\n"); - } - - free_BitBuffer(bb_p); -} - -/* - * ------------------------------------------------------------------------- - * Functions used to send MIH link event messages - * ------------------------------------------------------------------------- - */ - -/**************************************************************************** - ** ** - ** Name: eRAL_send_link_detected_indication() ** - ** ** - ** Description: Sends a Link_Detected.indication message to the MIHF. ** - ** ** - ** The Link Detected event is generated on the MN when the ** - ** first PoA of an access network is detected. This event is ** - ** not generated when subsequent PoAs of the same access ** - ** network are discovered during the active connection on ** - ** that link. ** - ** ** - ** Inputs: tid_pP Transaction identifier ** - ** linfoP: Information of the detected link ** - ** Others: g_enb_ral_obj[instanceP].link_id, g_enb_ral_obj[instanceP].mihf_id ** - ** ** - ** Outputs: None ** - ** Return: None ** - ** Others: g_msg_codec_send_buffer ** - ** ** - ***************************************************************************/ -void eRAL_send_link_detected_indication(ral_enb_instance_t instanceP, MIH_C_TRANSACTION_ID_T *tid_pP, MIH_C_LINK_DET_INFO_T *linfoP) -{ - MIH_C_Message_Link_Detected_indication_t message; - Bit_Buffer_t *bb_p; - int message_total_length; - - if (!(g_enb_ral_obj[instanceP].mih_supported_link_event_list & MIH_C_BIT_LINK_DETECTED)) { - return; - } - - LOG_D(RAL_ENB, " Send MIH_C_MESSAGE_LINK_DETECTED_INDICATION\n"); - - bb_p = new_BitBuffer_0(); - BitBuffer_wrap(bb_p, g_msg_codec_send_buffer, (unsigned int)MSG_CODEC_SEND_BUFFER_SIZE); - - memset(&message, 0, sizeof (MIH_C_Message_Link_Detected_indication_t)); - - message.header.version = (MIH_C_VERSION_T)MIH_C_PROTOCOL_VERSION; - //message.header.ack_req = 0; - //message.header.ack_rsp = 0; - //message.header.uir = 0; - //message.header.more_fragment = 0 - //message.header.fragment_number = 0; - message.header.service_identifier = (MIH_C_SID_T)2; - message.header.operation_code = (MIH_C_OPCODE_T)3; - message.header.action_identifier = (MIH_C_AID_T)1; - message.header.transaction_id = *tid_pP; - - MIH_C_MIHF_ID_set(&message.source, (u_int8_t*)g_enb_ral_obj[instanceP].link_id, strlen(g_enb_ral_obj[instanceP].link_id)); - - MIH_C_MIHF_ID_set(&message.destination, (u_int8_t*)g_enb_ral_obj[instanceP].mihf_id, strlen(g_enb_ral_obj[instanceP].mihf_id)); - - memcpy(&message.primitive.LinkDetectedInfo, linfoP, - sizeof(MIH_C_LINK_DET_INFO_T)); - - message_total_length = MIH_C_Link_Message_Encode_Link_Detected_indication(bb_p, &message); - - if (eRAL_send_to_mih( instanceP, bb_p->m_buffer, message_total_length) < 0) { - LOG_E(RAL_ENB, ": Send Link_Detected.indication\n"); - } else { - LOG_D(RAL_ENB, ": Sent Link_Detected.indication\n"); - } - - free_BitBuffer(bb_p); -} - -/**************************************************************************** - ** Name: eRAL_send_link_up_indication() ** - ** Description: Sends a Link_Up.indication message to the MIHF. ** - ** ** - ** This notification is generated when a layer 2 connection is ** - ** established for the specified link interface. ** - ** Inputs: tid_pP Transaction identifier ** - ** lid_pP: Link identifier ** - ** old_ar_pP: Old access router link address ** - ** new_arP: New access router link address ** - ** flagP: Indicates whether the MN needs to change IP Address ** - ** in the new PoA ** - ** mobil_mngtP: Indicates the type of Mobility Management ** - ** Protocol supported by the new PoA ** - ***************************************************************************/ -void eRAL_send_link_up_indication(ral_enb_instance_t instanceP, MIH_C_TRANSACTION_ID_T *tid_pP, - MIH_C_LINK_TUPLE_ID_T *lid_pP, - MIH_C_LINK_ADDR_T *old_ar_pP, - MIH_C_LINK_ADDR_T *new_arP, - MIH_C_IP_RENEWAL_FLAG_T *flagP, - MIH_C_IP_MOB_MGMT_T *mobil_mngtP) -{ - MIH_C_Message_Link_Up_indication_t message; - Bit_Buffer_t *bb_p = NULL; - int message_total_length; - module_id_t mod_id = instanceP; - - if (!(g_enb_ral_obj[mod_id].mih_supported_link_event_list & MIH_C_BIT_LINK_UP)) { - return; - } - - LOG_D(RAL_ENB, " Send MIH_C_MESSAGE_LINK_UP_INDICATION\n"); - - bb_p = new_BitBuffer_0(); - BitBuffer_wrap(bb_p, g_msg_codec_send_buffer, (unsigned int)MSG_CODEC_SEND_BUFFER_SIZE); - - memset(&message, 0, sizeof (MIH_C_Message_Link_Up_indication_t)); - - message.header.version = (MIH_C_VERSION_T)MIH_C_PROTOCOL_VERSION; - //message.header.ack_req = 0; - //message.header.ack_rsp = 0; - //message.header.uir = 0; - //message.header.more_fragment = 0 - //message.header.fragment_number = 0; - message.header.service_identifier = (MIH_C_SID_T)2; - message.header.operation_code = (MIH_C_OPCODE_T)3; - message.header.action_identifier = (MIH_C_AID_T)2; - message.header.transaction_id = *tid_pP; - - MIH_C_MIHF_ID_set(&message.source, (u_int8_t*)g_enb_ral_obj[mod_id].link_id, strlen(g_enb_ral_obj[instanceP].link_id)); - - MIH_C_MIHF_ID_set(&message.destination, (u_int8_t*)g_enb_ral_obj[mod_id].mihf_id, strlen(g_enb_ral_obj[instanceP].mihf_id)); - - memcpy(&message.primitive.LinkIdentifier, lid_pP, sizeof(MIH_C_LINK_TUPLE_ID_T)); - - message.primitive.OldAccessRouter = old_ar_pP; - message.primitive.NewAccessRouter = new_arP; - message.primitive.IPRenewalFlag = flagP; - message.primitive.MobilityManagementSupport = mobil_mngtP; - - message_total_length = MIH_C_Link_Message_Encode_Link_Up_indication(bb_p, &message); - - if (eRAL_send_to_mih( instanceP, bb_p->m_buffer, message_total_length) < 0) { - LOG_E(RAL_ENB, ": Send Link_Up.indication\n"); - } else { - LOG_D(RAL_ENB, ": Sent Link_Up.indication\n"); - } - - free_BitBuffer(bb_p); -} - -/**************************************************************************** - ** Name: eRAL_send_link_down_indication() ** - ** Description: Sends a Link_Down.indication message to the MIHF. ** - ** ** - ** This notification is generated when layer 2 connectivity is lost. ** - ** Layer 2 connectivity is lost explicitly in cases where the MN ** - ** initiates detach type procedures. In other cases, the MN can infer ** - ** loss of link connectivity due to successive time-outs for ** - ** acknowledgements of retransmitted packets along with loss of ** - ** reception of broadcast frames. ** - ** Inputs: tid_pP Transaction identifier ** - ** lid_pP: Link identifier ** - ** old_ar_pP: Old access router link address ** - ** reason_codeP: Reason why the link went down ** - ***************************************************************************/ -void eRAL_send_link_down_indication(ral_enb_instance_t instanceP, MIH_C_TRANSACTION_ID_T *tid_pP, - MIH_C_LINK_TUPLE_ID_T *lid_pP, - MIH_C_LINK_ADDR_T *old_ar_pP, - MIH_C_LINK_DN_REASON_T *reason_codeP) -{ - MIH_C_Message_Link_Down_indication_t message; - Bit_Buffer_t *bb_p = NULL; - int message_total_length; - - if (!(g_enb_ral_obj[instanceP].mih_supported_link_event_list & MIH_C_BIT_LINK_DOWN)) { - return; - } - - LOG_D(RAL_ENB, " Send MIH_C_MESSAGE_LINK_DOWN_INDICATION\n"); - - bb_p = new_BitBuffer_0(); - BitBuffer_wrap(bb_p, g_msg_codec_send_buffer, (unsigned int)MSG_CODEC_SEND_BUFFER_SIZE); - - memset(&message, 0, sizeof (MIH_C_Message_Link_Going_Down_indication_t)); - - message.header.version = (MIH_C_VERSION_T)MIH_C_PROTOCOL_VERSION; - message.header.service_identifier = (MIH_C_SID_T)2; - message.header.operation_code = (MIH_C_OPCODE_T)3; - message.header.action_identifier = (MIH_C_AID_T)3; - message.header.transaction_id = *tid_pP; - - MIH_C_MIHF_ID_set(&message.source, (u_int8_t*)g_enb_ral_obj[instanceP].link_id, strlen(g_enb_ral_obj[instanceP].link_id)); - - MIH_C_MIHF_ID_set(&message.destination, (u_int8_t*)g_enb_ral_obj[instanceP].mihf_id, strlen(g_enb_ral_obj[instanceP].mihf_id)); - - memcpy(&message.primitive.LinkIdentifier, lid_pP, sizeof(MIH_C_LINK_TUPLE_ID_T)); - message.primitive.OldAccessRouter = old_ar_pP; - memcpy(&message.primitive.ReasonCode, reason_codeP, sizeof(MIH_C_LINK_DN_REASON_T)); - - message_total_length = MIH_C_Link_Message_Encode_Link_Down_indication(bb_p, &message); - - if (eRAL_send_to_mih( instanceP, bb_p->m_buffer, message_total_length) < 0) { - LOG_E(RAL_ENB, ": Send Link_Down.indication\n"); - } else { - LOG_D(RAL_ENB, ": Sent Link_Down.indication\n"); - } - - free_BitBuffer(bb_p); -} - -/**************************************************************************** - ** ** - ** Name: eRAL_send_link_parameters_report_indication() ** - ** ** - ** Description: Sends a Link_Parameters_Report.indication message to the ** - ** MIHF. ** - ** ** - ** For each specified parameter, this notification is gene- ** - ** rated either at a predefined regular interval determined ** - ** by a user configurable timer or when it crosses a confi- ** - ** gured threshold. ** - ** ** - ** Inputs: tid_pP Transaction identifier ** - ** lid_pP: Link identifier ** - ** lparam_listP: List of link parameter reports ** - ** Others: g_enb_ral_obj[instanceP].link_id, g_enb_ral_obj[instanceP].mihf_id ** - ** ** - ** Outputs: None ** - ** Return: None ** - ** Others: g_msg_codec_send_buffer ** - ** ** - ***************************************************************************/ -void eRAL_send_link_parameters_report_indication(ral_enb_instance_t instanceP, MIH_C_TRANSACTION_ID_T *tid_pP, - MIH_C_LINK_TUPLE_ID_T *lid_pP, - MIH_C_LINK_PARAM_RPT_LIST_T *lparam_listP) -{ - MIH_C_Message_Link_Parameters_Report_indication_t message; - Bit_Buffer_t *bb_p; - int message_total_length; - - if (!(g_enb_ral_obj[instanceP].mih_supported_link_event_list & MIH_C_BIT_LINK_PARAMETERS_REPORT)) { - return; - } - - LOG_D(RAL_ENB, " Send MIH_C_MESSAGE_LINK_PARAMETERS_REPORT_INDICATION\n"); - - bb_p = new_BitBuffer_0(); - BitBuffer_wrap(bb_p, g_msg_codec_send_buffer, (unsigned int)MSG_CODEC_SEND_BUFFER_SIZE); - - memset(&message, 0, sizeof (MIH_C_Message_Link_Parameters_Report_indication_t)); - - message.header.version = (MIH_C_VERSION_T)MIH_C_PROTOCOL_VERSION; - //message.header.ack_req = 0; - //message.header.ack_rsp = 0; - //message.header.uir = 0; - //message.header.more_fragment = 0 - //message.header.fragment_number = 0; - message.header.service_identifier = (MIH_C_SID_T)2; - message.header.operation_code = (MIH_C_OPCODE_T)3; - message.header.action_identifier = (MIH_C_AID_T)5; - message.header.transaction_id = *tid_pP; - - MIH_C_MIHF_ID_set(&message.source, (u_int8_t*)g_enb_ral_obj[instanceP].link_id, strlen(g_enb_ral_obj[instanceP].link_id)); - - MIH_C_MIHF_ID_set(&message.destination, (u_int8_t*)g_enb_ral_obj[instanceP].mihf_id, strlen(g_enb_ral_obj[instanceP].mihf_id)); - - - memcpy(&message.primitive.LinkIdentifier, lid_pP, sizeof(MIH_C_LINK_TUPLE_ID_T)); - memcpy(&message.primitive.LinkParametersReportList_list, lparam_listP, sizeof(MIH_C_LINK_PARAM_RPT_LIST_T)); - - message_total_length = MIH_C_Link_Message_Encode_Link_Parameters_Report_indication(bb_p, &message); - - if (eRAL_send_to_mih( instanceP, bb_p->m_buffer, message_total_length) < 0) { - LOG_E(RAL_ENB, ": Send Link_Parameters_Report.indication\n"); - } else { - LOG_D(RAL_ENB, ": Sent Link_Parameters_Report.indication\n"); - } - - free_BitBuffer(bb_p); -} - -/**************************************************************************** - ** ** - ** Name: eRAL_send_link_going_down_indication() ** - ** ** - ** Description: Sends a Link_Going_Down.indication message to the MIHF. ** - ** ** - ** A Link_Going_Down event implies that a Link_Down is immi- ** - ** nent within a certain time interval. If Link_Down is NOT ** - ** received within specified time interval then actions due ** - ** to previous Link_Going_Down are ignored. ** - ** ** - ** Inputs: tid_pP Transaction identifier ** - ** lid_pP: Link identifier ** - ** timeP: The time interval (ms) at which the link ** - ** is expected to go down (0 if unknown) ** - ** lreasonP: Reason why the link is going to be down ** - ** Others: g_enb_ral_obj[instanceP].link_id, g_enb_ral_obj[instanceP].mihf_id ** - ** ** - ** Outputs: None ** - ** Return: None ** - ** Others: g_msg_codec_send_buffer ** - ** ** - ***************************************************************************/ -void eRAL_send_link_going_down_indication(ral_enb_instance_t instanceP, MIH_C_TRANSACTION_ID_T *tid_pP, - MIH_C_LINK_TUPLE_ID_T *lid_pP, - MIH_C_UNSIGNED_INT2_T *timeP, - MIH_C_LINK_GD_REASON_T *lreasonP) -{ - MIH_C_Message_Link_Going_Down_indication_t message; - Bit_Buffer_t *bb_p; - int message_total_length; - - if (!(g_enb_ral_obj[instanceP].mih_supported_link_event_list & MIH_C_BIT_LINK_GOING_DOWN)) { - return; - } - - LOG_D(RAL_ENB, " Send MIH_C_MESSAGE_LINK_GOING_DOWN_INDICATION\n"); - - bb_p = new_BitBuffer_0(); - BitBuffer_wrap(bb_p, g_msg_codec_send_buffer, (unsigned int)MSG_CODEC_SEND_BUFFER_SIZE); - - memset(&message, 0, sizeof (MIH_C_Message_Link_Going_Down_indication_t)); - - message.header.version = (MIH_C_VERSION_T)MIH_C_PROTOCOL_VERSION; - //message.header.ack_req = 0; - //message.header.ack_rsp = 0; - //message.header.uir = 0; - //message.header.more_fragment = 0 - //message.header.fragment_number = 0; - message.header.service_identifier = (MIH_C_SID_T)2; - message.header.operation_code = (MIH_C_OPCODE_T)3; - message.header.action_identifier = (MIH_C_AID_T)6; - message.header.transaction_id = *tid_pP; - - MIH_C_MIHF_ID_set(&message.source, (u_int8_t*)g_enb_ral_obj[instanceP].link_id, strlen(g_enb_ral_obj[instanceP].link_id)); - - MIH_C_MIHF_ID_set(&message.destination, (u_int8_t*)g_enb_ral_obj[instanceP].mihf_id, strlen(g_enb_ral_obj[instanceP].mihf_id)); - - - memcpy(&message.primitive.LinkIdentifier, lid_pP, sizeof(MIH_C_LINK_TUPLE_ID_T)); - message.primitive.TimeInterval = *timeP; - memcpy(&message.primitive.LinkGoingDownReason, lreasonP, - sizeof(MIH_C_LINK_GD_REASON_T)); - - message_total_length = MIH_C_Link_Message_Encode_Link_Going_Down_indication(bb_p, &message); - - if (eRAL_send_to_mih( instanceP, bb_p->m_buffer, message_total_length) < 0) { - LOG_E(RAL_ENB, ": Send Link_Going_Down.indication\n"); - } else { - LOG_D(RAL_ENB, ": Sent Link_Going_Down.indication\n"); - } - - free_BitBuffer(bb_p); -} - -/* - * ------------------------------------------------------------------------- - * Functions used to send MIH link command messages - * ------------------------------------------------------------------------- - */ - -/**************************************************************************** - ** ** - ** Name: eRAL_send_get_parameters_confirm() ** - ** ** - ** Description: Sends a Link_Get_Parameters.confirm message to the MIHF. ** - ** ** - ** This primitive is generated in response to a Link_Get_ ** - ** Parameters.request. ** - ** ** - ** Inputs: tid_pP Transaction identifier ** - ** statusP: Status of operation ** - ** lparam_listP: List of measurable link parameters and ** - ** their current values ** - ** lstates_listP: List of current link state information ** - ** ldesc_listP: List of link descriptors ** - ** Others: g_enb_ral_obj[instanceP].link_id, g_enb_ral_obj[instanceP].mihf_id ** - ** ** - ** Outputs: None ** - ** Return: None ** - ** Others: g_msg_codec_send_buffer ** - ** ** - ***************************************************************************/ -void eRAL_send_get_parameters_confirm(ral_enb_instance_t instanceP, MIH_C_TRANSACTION_ID_T *tid_pP, - MIH_C_STATUS_T *statusP, - MIH_C_LINK_PARAM_LIST_T *lparam_listP, - MIH_C_LINK_STATES_RSP_LIST_T *lstates_listP, - MIH_C_LINK_DESC_RSP_LIST_T *ldesc_listP) -{ - MIH_C_Message_Link_Get_Parameters_confirm_t message; - Bit_Buffer_t *bb_p; - int message_total_length; - - LOG_D(RAL_ENB, " Send MIH_C_MESSAGE_LINK_GET_PARAMETERS_CONFIRM\n"); - - bb_p = new_BitBuffer_0(); - BitBuffer_wrap(bb_p, g_msg_codec_send_buffer, (unsigned int)MSG_CODEC_SEND_BUFFER_SIZE); - - memset(&message, 0, sizeof (MIH_C_Message_Link_Get_Parameters_confirm_t)); - - message.header.version = (MIH_C_VERSION_T)MIH_C_PROTOCOL_VERSION; - //message.header.ack_req = 0; - //message.header.ack_rsp = 0; - //message.header.uir = 0; - //message.header.more_fragment = 0 - //message.header.fragment_number = 0; - message.header.service_identifier = (MIH_C_SID_T)3; - message.header.operation_code = (MIH_C_OPCODE_T)0; - message.header.action_identifier = (MIH_C_AID_T)1; - message.header.transaction_id = *tid_pP; - - MIH_C_MIHF_ID_set(&message.source, (u_int8_t*)g_enb_ral_obj[instanceP].link_id, strlen(g_enb_ral_obj[instanceP].link_id)); - - MIH_C_MIHF_ID_set(&message.destination, (u_int8_t*)g_enb_ral_obj[instanceP].mihf_id, strlen(g_enb_ral_obj[instanceP].mihf_id)); - - message.primitive.Status = *statusP; - message.primitive.LinkParametersStatusList_list = lparam_listP; - message.primitive.LinkStatesResponse_list = lstates_listP; - message.primitive.LinkDescriptorsResponse_list = ldesc_listP; - - message_total_length = MIH_C_Link_Message_Encode_Get_Parameters_confirm(bb_p, &message); - - if (eRAL_send_to_mih( instanceP, bb_p->m_buffer, message_total_length) < 0) { - LOG_E(RAL_ENB, ": Send Link_Get_Parameters.confirm\n"); - } else { - LOG_D(RAL_ENB, ": Sent Link_Get_Parameters.confirm\n"); - } - - free_BitBuffer(bb_p); -} - -/**************************************************************************** - ** ** - ** Name: eRAL_send_configure_thresholds_confirm() ** - ** ** - ** Description: Sends a Link_Configure_Thresholds.confirm message to the ** - ** MIHF. ** - ** ** - ** This primitive is generated in response to a Link_ ** - ** Configure_Thresholds.request. ** - ** ** - ** Inputs: tid_pP Transaction identifier ** - ** statusP: Status of operation ** - ** lstatus_listP: List of link configure status ** - ** Others: g_enb_ral_obj[instanceP].link_id, g_enb_ral_obj[instanceP].mihf_id ** - ** ** - ** Outputs: None ** - ** Return: None ** - ** Others: g_msg_codec_send_buffer ** - ** ** - ***************************************************************************/ -void eRAL_send_configure_thresholds_confirm(ral_enb_instance_t instanceP, MIH_C_TRANSACTION_ID_T *tid_pP, - MIH_C_STATUS_T *statusP, - MIH_C_LINK_CFG_STATUS_LIST_T *lstatus_listP) -{ - MIH_C_Message_Link_Configure_Thresholds_confirm_t message; - Bit_Buffer_t *bb_p; - int message_total_length; - - LOG_D(RAL_ENB, " Send MIH_C_MESSAGE_LINK_CONFIGURE_THRESHOLDS_CONFIRM\n"); - - bb_p = new_BitBuffer_0(); - BitBuffer_wrap(bb_p, g_msg_codec_send_buffer, (unsigned int)MSG_CODEC_SEND_BUFFER_SIZE); - - memset(&message, 0, sizeof (MIH_C_Message_Link_Configure_Thresholds_confirm_t)); - - message.header.version = (MIH_C_VERSION_T)MIH_C_PROTOCOL_VERSION; - //message.header.ack_req = 0; - //message.header.ack_rsp = 0; - //message.header.uir = 0; - //message.header.more_fragment = 0 - //message.header.fragment_number = 0; - message.header.service_identifier = (MIH_C_SID_T)3; - message.header.operation_code = (MIH_C_OPCODE_T)0; - message.header.action_identifier = (MIH_C_AID_T)2; - message.header.transaction_id = *tid_pP; - - MIH_C_MIHF_ID_set(&message.source, (u_int8_t*)g_enb_ral_obj[instanceP].link_id, strlen(g_enb_ral_obj[instanceP].link_id)); - - MIH_C_MIHF_ID_set(&message.destination, (u_int8_t*)g_enb_ral_obj[instanceP].mihf_id, strlen(g_enb_ral_obj[instanceP].mihf_id)); - - message.primitive.Status = *statusP; - message.primitive.LinkConfigureStatusList_list = lstatus_listP; - - message_total_length = MIH_C_Link_Message_Encode_Configure_Thresholds_confirm(bb_p, &message); - - if (eRAL_send_to_mih( instanceP, bb_p->m_buffer, message_total_length) < 0) { - LOG_E(RAL_ENB, ": Send Link_Configure_Threshold.confirm\n"); - } else { - LOG_D(RAL_ENB, ": Sent Link_Configure_Threshold.confirm\n"); - } - - free_BitBuffer(bb_p); -} - -/**************************************************************************** - ** ** - ** Name: eRAL_send_link_action_confirm() ** - ** ** - ** Description: Sends a Link_Action.confirm message to the MIHF. ** - ** ** - ** This primitive is generated to communicate the result of ** - ** the action executed on the link-layer connection. ** - ** ** - ** Inputs: tid_pP Transaction identifier ** - ** statusP: Status of operation ** - ** response_setP: List of discovered links and related ** - ** information ** - ** action_resultP: Specifies whether the link action was ** - ** successful ** - ** Others: g_enb_ral_obj[instanceP].link_id, g_enb_ral_obj[instanceP].mihf_id ** - ** ** - ** Outputs: None ** - ** Return: None ** - ** Others: g_msg_codec_send_buffer ** - ** ** - ***************************************************************************/ -void eRAL_send_link_action_confirm( - ral_enb_instance_t instanceP, - MIH_C_TRANSACTION_ID_T *tid_pP, - MIH_C_STATUS_T *statusP, - MIH_C_LINK_SCAN_RSP_LIST_T *response_setP, - MIH_C_LINK_AC_RESULT_T *action_resultP) -{ - MIH_C_Message_Link_Action_confirm_t message; - Bit_Buffer_t *bb_p; - int message_total_length; - - LOG_D(RAL_ENB, " Send MIH_C_MESSAGE_LINK_ACTION_CONFIRM\n"); - - bb_p = new_BitBuffer_0(); - BitBuffer_wrap(bb_p, g_msg_codec_send_buffer, (unsigned int)MSG_CODEC_SEND_BUFFER_SIZE); - - memset(&message, 0, sizeof (MIH_C_Message_Link_Action_confirm_t)); - - message.header.version = (MIH_C_VERSION_T)MIH_C_PROTOCOL_VERSION; - //message.header.ack_req = 0; - //message.header.ack_rsp = 0; - //message.header.uir = 0; - //message.header.more_fragment = 0 - //message.header.fragment_number = 0; - message.header.service_identifier = (MIH_C_SID_T)3; - message.header.operation_code = (MIH_C_OPCODE_T)0; - message.header.action_identifier = (MIH_C_AID_T)3; - message.header.transaction_id = *tid_pP; - - MIH_C_MIHF_ID_set(&message.source, (u_int8_t*)g_enb_ral_obj[instanceP].link_id, strlen(g_enb_ral_obj[instanceP].link_id)); - - MIH_C_MIHF_ID_set(&message.destination, (u_int8_t*)g_enb_ral_obj[instanceP].mihf_id, strlen(g_enb_ral_obj[instanceP].mihf_id)); - - message.primitive.Status = *statusP; - message.primitive.ScanResponseSet_list = response_setP; - message.primitive.LinkActionResult = action_resultP; - - message_total_length = MIH_C_Link_Message_Encode_Link_Action_confirm(bb_p, &message); - - if (eRAL_send_to_mih( instanceP, bb_p->m_buffer, message_total_length) < 0) { - LOG_E(RAL_ENB, ": Send Link_Action.confirm\n"); - } else { - LOG_D(RAL_ENB, ": Sent Link_Action.confirm\n"); - } - - free_BitBuffer(bb_p); -} - -/**************************************************************************** - ** ** - ** Name: eRAL_mihf_connect(ral_enb_instance_t instanceP) ** - ** ** - ** Description: Connects the RAL to the remote MIH Function. ** - ** The calling process should exit upon connection failure ** - ** in order to properly close the MIH-F socket file ** - ** descriptor and free the automatically allocated addrinfo ** - ** structure. ** - ** ** - ** Inputs: None ** - ** Others: g_enb_ral_obj[instanceP].mihf_ip_address, g_enb_ral_obj[instanceP].mihf_remote_port ** - ** g_enb_ral_obj[instanceP].ral_ip_address, ** - ** g_enb_ral_obj[instanceP].ral_listening_port ** - ** ** - ** Outputs: None ** - ** Return: 0 on success, -1 on failure ** - ** Others: g_sockd_mihf ** - ** ** - ****************************************************************************/ -int eRAL_mihf_connect(ral_enb_instance_t instanceP) -{ - struct addrinfo info; /* endpoint information */ - struct addrinfo *addr, *rp; /* endpoint address */ - int rc; /* returned error code */ - int optval; /* socket option value */ - - unsigned char buf[sizeof(struct sockaddr_in6)]; - - /* - * Initialize the remote MIH-F endpoint address information - */ - memset(&info, 0, sizeof(struct addrinfo)); - info.ai_family = AF_UNSPEC; /* Allow IPv4 or IPv6 */ - info.ai_socktype = SOCK_DGRAM; /* Datagram socket */ - info.ai_flags = 0; - info.ai_protocol = 0; /* Any protocol */ - - rc = getaddrinfo(g_enb_ral_obj[instanceP].mihf_ip_address, g_enb_ral_obj[instanceP].mihf_remote_port, &info, &addr); - - if (rc != 0) { - LOG_E(RAL_ENB, " getaddrinfo: %s\n", gai_strerror(rc)); - return -1; - } - - /* - * getaddrinfo() returns a linked list of address structures. - * Try each address until we successfully connect(2). If socket(2) - * (or connect(2)) fails, we (close the socket and) try the next address. - */ - for (rp = addr; rp != NULL; rp = rp->ai_next) { - - g_enb_ral_obj[instanceP].mih_sock_desc = socket(rp->ai_family, rp->ai_socktype, rp->ai_protocol); - - if (g_enb_ral_obj[instanceP].mih_sock_desc < 0) { - continue; - } - - optval = 1; - setsockopt(g_enb_ral_obj[instanceP].mih_sock_desc, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof(optval)); - - /* - * Convert the RAL local network address - */ - if (rp->ai_family == AF_INET) { - /* IPv4 network address family */ - struct sockaddr_in *addr4 = NULL; - - LOG_D(RAL_ENB, " %s is an ipv4 address\n", g_enb_ral_obj[instanceP].mihf_ip_address); - addr4 = (struct sockaddr_in *)(&buf[0]); - addr4->sin_port = htons(atoi(g_enb_ral_obj[instanceP].ral_listening_port)); - addr4->sin_family = AF_INET; - rc = inet_pton(AF_INET, g_enb_ral_obj[instanceP].ral_ip_address, &addr4->sin_addr); - } else if (rp->ai_family == AF_INET6) { - /* IPv6 network address family */ - struct sockaddr_in6 *addr6 = NULL; - - LOG_D(RAL_ENB, " %s is an ipv6 address\n", g_enb_ral_obj[instanceP].mihf_ip_address); - addr6 = (struct sockaddr_in6 *)(&buf[0]); - addr6->sin6_port = htons(atoi(g_enb_ral_obj[instanceP].ral_listening_port)); - addr6->sin6_family = AF_INET6; - rc = inet_pton(AF_INET, g_enb_ral_obj[instanceP].ral_ip_address, &addr6->sin6_addr); - } else { - LOG_E(RAL_ENB, " %s is an unknown address format %d\n", - g_enb_ral_obj[instanceP].mihf_ip_address, rp->ai_family); - return -1; - } - - if (rc < 0) { - /* The network address convertion failed */ - LOG_E(RAL_ENB, " inet_pton(RAL IP address %s): %s\n", - g_enb_ral_obj[instanceP].ral_ip_address, strerror(rc)); - return -1; - } else if (rc == 0) { - /* The network address is not valid */ - LOG_E(RAL_ENB, " RAL IP address %s is not valid\n", g_enb_ral_obj[instanceP].ral_ip_address); - return -1; - } - - /* Bind the socket to the local RAL network address */ - rc = bind(g_enb_ral_obj[instanceP].mih_sock_desc, (const struct sockaddr *)buf, - sizeof(struct sockaddr_in)); - - if (rc < 0) { - LOG_E(RAL_ENB, " bind(RAL IP address %s): %s\n", - g_enb_ral_obj[instanceP].ral_ip_address, strerror(errno)); - return -1; - } - - /* Connect the socket to the remote MIH-F network address */ - if (connect(g_enb_ral_obj[instanceP].mih_sock_desc, rp->ai_addr, rp->ai_addrlen) == 0) { - LOG_N(RAL_ENB, " RAL [%s:%s] is now UDP-CONNECTED to MIH-F [%s:%s]\n", - g_enb_ral_obj[instanceP].ral_ip_address, g_enb_ral_obj[instanceP].ral_listening_port, - g_enb_ral_obj[instanceP].mihf_ip_address, g_enb_ral_obj[instanceP].mihf_remote_port); - break; - } - - /* - * We failed to connect: - * Close the socket file descriptor and try to connect to an other - * address. - */ - close(g_enb_ral_obj[instanceP].mih_sock_desc); - } - - /* - * Unable to connect to a network address - */ - if (rp == NULL) { - LOG_E(RAL_ENB, " Could not connect to MIH-F\n"); - return -1; - } - - freeaddrinfo(addr); - - return 0; -} - -/**************************************************************************** - ** Name: eRAL_mih_link_process_message() ** - ** Description: Processes messages received from the MIH-F. ** - ** Others: g_sockd_mihf ** - ** Return: Always return 0 ** - ** Others: g_msg_codec_recv_buffer ** - ***************************************************************************/ -int eRAL_mih_link_process_message(ral_enb_instance_t instanceP) -{ - MIH_C_Message_Wrapper_t message_wrapper; - int nb_bytes_received ; - int nb_bytes_decoded ; - int total_bytes_to_decode ; - int status ; - Bit_Buffer_t *bb_p; - struct sockaddr_in udp_socket; - socklen_t sockaddr_len; - - LOG_D(RAL_ENB,"HEEERRRE process mesage\n"); - - total_bytes_to_decode = 0; - nb_bytes_received = 0; - - bb_p = new_BitBuffer_0(); - - nb_bytes_received = recvfrom(g_enb_ral_obj[instanceP].mih_sock_desc, - (void *)g_msg_codec_recv_buffer, - MSG_CODEC_RECV_BUFFER_SIZE, - 0, - (struct sockaddr *) &udp_socket, - &sockaddr_len); - - if (nb_bytes_received > 0) { - LOG_D(RAL_ENB, " \n"); - LOG_D(RAL_ENB, " %s Received %d bytes\n", __FUNCTION__, nb_bytes_received); - eRAL_print_buffer(g_msg_codec_recv_buffer, nb_bytes_received); - total_bytes_to_decode += nb_bytes_received; - BitBuffer_wrap(bb_p, g_msg_codec_recv_buffer, total_bytes_to_decode); - /* Decode the message received from the MIHF */ - status = eRAL_mih_link_msg_decode(instanceP, bb_p, &message_wrapper); - - if (status == MIH_MESSAGE_DECODE_OK) { - nb_bytes_decoded = BitBuffer_getPosition(bb_p); - - if (nb_bytes_decoded > 0) { - total_bytes_to_decode = total_bytes_to_decode - nb_bytes_decoded; - - // if remaining bytes to decode - if (total_bytes_to_decode > 0) { - //shift left bytes in buffer - memcpy(g_msg_codec_recv_buffer, &g_msg_codec_recv_buffer[nb_bytes_decoded], nb_bytes_decoded); - - //shift left again bytes in buffer - if (total_bytes_to_decode > nb_bytes_decoded) { - memcpy(&g_msg_codec_recv_buffer[nb_bytes_decoded], &g_msg_codec_recv_buffer[nb_bytes_decoded], total_bytes_to_decode - nb_bytes_decoded); - } - - // not necessary - memset(&g_msg_codec_recv_buffer[total_bytes_to_decode], 0 , MSG_CODEC_RECV_BUFFER_SIZE - total_bytes_to_decode); - } - } - - // data could not be decoded - } else if (status == MIH_MESSAGE_DECODE_FAILURE) { - memset(g_msg_codec_recv_buffer, 0, MSG_CODEC_RECV_BUFFER_SIZE); - total_bytes_to_decode = 0; - } else if (status == MIH_MESSAGE_DECODE_TOO_SHORT) { - } else if (status == MIH_MESSAGE_DECODE_BAD_PARAMETER) { - } - } - - free_BitBuffer(bb_p); - return 0; -} - -/****************************************************************************/ -/********************* L O C A L F U N C T I O N S *********************/ -/****************************************************************************/ - -/**************************************************************************** - ** ** - ** Name: eRAL_print_buffer() ** - ** ** - ** Description: Print the content of a buffer in hexadecimal. ** - ** ** - ** Inputs: buffer_pP: Pointer to the buffer to print ** - ** lengthP: Length of the buffer to print ** - ** Others: g_msg_codec_print_buffer ** - ** ** - ** Outputs: None ** - ** Return: None ** - ** Others: None ** - ** ** - ***************************************************************************/ -void eRAL_print_buffer(const u_int8_t * buffer_pP, int lenP) -{ - char c; - unsigned int buffer_index = 0; - unsigned int index; - unsigned int octet_index = 0; - unsigned long char_index = 0; - - if (buffer_pP == NULL) { - return; - } - - buffer_index += sprintf(&g_msg_codec_print_buffer[buffer_index],"\n------+-------------------------------------------------+------------------+\n"); - buffer_index += sprintf(&g_msg_codec_print_buffer[buffer_index], " | 0 1 2 3 4 5 6 7 8 9 a b c d e f | 0123456789abcdef |\n"); - buffer_index += sprintf(&g_msg_codec_print_buffer[buffer_index], "------+-------------------------------------------------+------------------+\n"); - - for (octet_index = 0; octet_index < lenP; octet_index++) { - if ((octet_index % 16) == 0) { - if (octet_index != 0) { - buffer_index += sprintf(&g_msg_codec_print_buffer[buffer_index], " | "); - - for (char_index = octet_index - 16; char_index < octet_index; char_index++) { - c = (char) buffer_pP[char_index] & 0177; - - if (iscntrl(c) || isspace(c)) { - buffer_index += sprintf(&g_msg_codec_print_buffer[buffer_index], " "); - } else { - buffer_index += sprintf(&g_msg_codec_print_buffer[buffer_index], "%c", c); - } - } - - buffer_index += sprintf(&g_msg_codec_print_buffer[buffer_index], " |\n"); - } - - buffer_index += sprintf(&g_msg_codec_print_buffer[buffer_index], " %04d |", octet_index); - } - - /* - * Print every single octet in hexadecimal form - */ - buffer_index += sprintf(&g_msg_codec_print_buffer[buffer_index], " %02x", (u_int8_t)(buffer_pP[octet_index] & 0x00FF)); - } - - /* - * Append enough spaces and put final pipe - */ - if ((lenP % 16) > 0) { - for (index = (octet_index % 16); index < 16; ++index) { - buffer_index += sprintf(&g_msg_codec_print_buffer[buffer_index], " "); - } - } - - buffer_index += sprintf(&g_msg_codec_print_buffer[buffer_index], " | "); - - for (char_index = (octet_index / 16) * 16; char_index < octet_index; char_index++) { - c = (char) buffer_pP[char_index] & 0177; - - if (iscntrl(c) || isspace(c)) { - buffer_index += sprintf(&g_msg_codec_print_buffer[buffer_index], " "); - } else { - buffer_index += sprintf(&g_msg_codec_print_buffer[buffer_index], "%c", c); - } - } - - if ((lenP % 16) > 0) { - for (index = (octet_index % 16); index < 16; ++index) { - buffer_index += sprintf(&g_msg_codec_print_buffer[buffer_index], " "); - } - } - - buffer_index += sprintf(&g_msg_codec_print_buffer[buffer_index], " |\n"); - buffer_index += sprintf(&g_msg_codec_print_buffer[buffer_index], "------+-------------------------------------------------+------------------+\n"); - LOG_D(RAL_ENB, g_msg_codec_print_buffer); -} - -/**************************************************************************** - ** ** - ** Name: eRAL_send_to_mih( instanceP, ) ** - ** ** - ** Description: Sends a buffered message to the MIH-F. ** - ** ** - ** Inputs: buffer_pP: Pointer to the buffered buffer to send ** - ** lenP: Length of the buffered buffer to send ** - ** Others: g_sockd_mihf ** - ** ** - ** Outputs: None ** - ** Return: The number of bytes actually sent ** - ** Others: None ** - ** ** - ***************************************************************************/ -int eRAL_send_to_mih(ral_enb_instance_t instanceP, const u_int8_t *buffer_pP, int lenP) -{ - int result; - eRAL_print_buffer(buffer_pP, lenP); - result = send(g_enb_ral_obj[instanceP].mih_sock_desc, (const void *)buffer_pP, lenP, 0); - - if (result != lenP) { - LOG_E(RAL_ENB, " %s : %d bytes failed, returned %d: %s\n", - __FUNCTION__, lenP, result, strerror(errno)); - } - - return result; -} - -/**************************************************************************** - ** Name: eRAL_mih_link_msg_decode() ** - ** Description: Decode messages received from the MIH-F. ** - ** Inputs: bb_pP: Pointer to the buffer to decode ** - ** Outputs: message_wrapper_pP: ** - ** Pointer to the message wrapper ** - ** Return: < 0 on failure, 0 otherwise ** - ***************************************************************************/ -int eRAL_mih_link_msg_decode(ral_enb_instance_t instanceP, Bit_Buffer_t* bb_pP, MIH_C_Message_Wrapper_t *message_wrapper_pP) -{ - //--------------------------------------------------------------------------- - int status = MIH_MESSAGE_DECODE_FAILURE; - MIH_C_HEADER_T header; - MIH_C_STATUS_T mih_status; - - LOG_D(RAL_ENB,"HEEERRRE decode\n"); - - if ((bb_pP != NULL) && (message_wrapper_pP != NULL)) { - /* - * Decode MIH protocol header - */ - status = MIH_C_Link_Header_Decode(bb_pP, &header); - - if (status == MIH_HEADER_DECODE_TOO_SHORT) { - return MIH_MESSAGE_DECODE_TOO_SHORT; - } else if (status == MIH_HEADER_DECODE_FAILURE) { - return MIH_MESSAGE_DECODE_FAILURE; - } else if (status == MIH_HEADER_DECODE_BAD_PARAMETER) { - return MIH_MESSAGE_DECODE_BAD_PARAMETER; - } - - message_wrapper_pP->message_id = MIH_C_MESSAGE_ID(header.service_identifier, header.operation_code, header.action_identifier); - - /* - * Decode MIH primitives - */ - - switch (message_wrapper_pP->message_id) { - - case MIH_C_MESSAGE_LINK_CAPABILITY_DISCOVER_REQUEST_ID: - /* - * This primitive is generated by the MIHF when it needs to - * receive link-layer event notifications and learn about which - * link-layer commands the lower layer can support. - * The recipient responds immediately with Link_Capability_ - * Discover.confirm primitive. - */ - LOG_D(RAL_ENB, " %s Received MIH_C_MESSAGE_LINK_CAPABILITY_DISCOVER_REQUEST\n", __FUNCTION__); - memcpy(&message_wrapper_pP->_union_message.link_capability_discover_request.header, (const void *)&header, sizeof(MIH_C_HEADER_T)); - - /* Decode Link_Capability_Discover.request */ - status = MIH_C_Link_Message_Decode_Link_Capability_Discover_request(bb_pP, &message_wrapper_pP->_union_message.link_capability_discover_request); - - if (status == MIH_MESSAGE_DECODE_OK) { - - /* Process Link_Capability_Discover.request */ - MIH_C_Link_Message_Link_Capability_Discover_request2String(&message_wrapper_pP->_union_message.link_capability_discover_request, g_msg_print_buffer); - LOG_D(RAL_ENB, " %s", g_msg_print_buffer); - mih_status = MIH_C_STATUS_SUCCESS; - LOG_D(RAL_ENB, "**\n"); - /* Send Link_Capability_Discover.confirm */ - eRAL_send_capability_discover_confirm(instanceP, &message_wrapper_pP->_union_message.link_capability_discover_request.header.transaction_id, - &mih_status, - &g_enb_ral_obj[instanceP].mih_supported_link_event_list, - &g_enb_ral_obj[instanceP].mih_supported_link_command_list); - } else { - } - - break; - - case MIH_C_MESSAGE_LINK_EVENT_SUBSCRIBE_REQUEST_ID: - /* - * This primitive is generated by a subscriber such as the MIHF - * that is seeking to receive event indications from different - * link-layer technologies. - * The recipient responds immediately with Link_Event_Subscribe. - * confirm primitive. - */ - LOG_D(RAL_ENB, " %s Received MIH_C_MESSAGE_LINK_EVENT_SUBSCRIBE_REQUEST\n", __FUNCTION__); - memcpy(&message_wrapper_pP->_union_message.link_event_subscribe_request.header, (const void *)&header, sizeof(MIH_C_HEADER_T)); - - /* Decode Link_Event_Subscribe.request */ - status = MIH_C_Link_Message_Decode_Link_Event_Subscribe_request(bb_pP, &message_wrapper_pP->_union_message.link_event_subscribe_request); - - if (status == MIH_MESSAGE_DECODE_OK) { - /* Process Link_Event_Subscribe.request */ - LOG_D(RAL_ENB, "**\n"); - eRAL_subscribe_request(instanceP, &message_wrapper_pP->_union_message.link_event_subscribe_request); - - } else { - } - - break; - - case MIH_C_MESSAGE_LINK_EVENT_UNSUBSCRIBE_REQUEST_ID: - /* - * This primitive is generated by a subscriber such as the MIHF - * that is seeking to unsubscribe from an already subscribed set - * of events. - * The recipient responds immediately with Link_Event_ - * Unsubscribe.confirm primitive. - */ - LOG_D(RAL_ENB, " %s Received MIH_C_MESSAGE_LINK_EVENT_UNSUBSCRIBE_REQUEST\n", __FUNCTION__); - memcpy(&message_wrapper_pP->_union_message.link_event_unsubscribe_request.header, (const void *)&header, sizeof(MIH_C_HEADER_T)); - - /* Decode Link_Event_Unsubscribe.request */ - status = MIH_C_Link_Message_Decode_Link_Event_Unsubscribe_request(bb_pP, &message_wrapper_pP->_union_message.link_event_unsubscribe_request); - - if (status == MIH_MESSAGE_DECODE_OK) { - LOG_D(RAL_ENB, "**\n"); - /* Process Link_Event_Unsubscribe.request */ - eRAL_unsubscribe_request(instanceP, &message_wrapper_pP->_union_message.link_event_unsubscribe_request); - - } else { - } - - break; - - case MIH_C_MESSAGE_LINK_GET_PARAMETERS_REQUEST_ID: - /* - * This primitive is generated by the MIHF to obtain the current - * value of a set of link parameters from a link. - * The recipient link responds with Link_Get_Parameters.confirm - * primitive. - */ - LOG_D(RAL_ENB, " %s Received MIH_C_MESSAGE_LINK_GET_PARAMETERS_REQUEST\n", __FUNCTION__); - memcpy(&message_wrapper_pP->_union_message.link_get_parameters_request.header, (const void *)&header, sizeof(MIH_C_HEADER_T)); - - /* Decode Link_Get_Parameters.request */ - status = MIH_C_Link_Message_Decode_Link_Get_Parameters_request(bb_pP, &message_wrapper_pP->_union_message.link_get_parameters_request); - - if (status == MIH_MESSAGE_DECODE_OK) { - LOG_D(RAL_ENB, "**\n"); - /* Process Link_Get_Parameters.request */ - eRAL_get_parameters_request(instanceP, &message_wrapper_pP->_union_message.link_get_parameters_request); - } else { - } - - break; - - case MIH_C_MESSAGE_LINK_CONFIGURE_THRESHOLDS_REQUEST_ID: - /* - * This primitive is generated by an MIHF that needs to set - * threshold values for different link parameters. - * The recipient responds immediately with Link_Configure_ - * Thresholds.confirm primitive. - */ - LOG_D(RAL_ENB, " %s Received MIH_C_MESSAGE_LINK_CONFIGURE_THRESHOLDS_REQUEST\n", __FUNCTION__); - memcpy(&message_wrapper_pP->_union_message.link_configure_thresholds_request.header, (const void *)&header, sizeof(MIH_C_HEADER_T)); - - /* Decode Link_Configure_Thresholds.request */ - status = MIH_C_Link_Message_Decode_Link_Configure_Thresholds_request(bb_pP, &message_wrapper_pP->_union_message.link_configure_thresholds_request); - - if (status == MIH_MESSAGE_DECODE_OK) { - LOG_D(RAL_ENB, "**\n"); - /* Process Link_Configure_Thresholds.request */ - eRAL_configure_thresholds_request(instanceP, &message_wrapper_pP->_union_message.link_configure_thresholds_request); - } else { - } - - break; - - case MIH_C_MESSAGE_LINK_ACTION_REQUEST_ID: - /* - * This primitive is used by the MIHF to request an action on a - * link-layer connection to enable optimal handling of link- - * layer resources for the purpose of handovers. - * The MIHF generates this primitive upon request from the MIH - * user to perform an action on a pre-defined link-layer - * connection. - */ - LOG_D(RAL_ENB, " %s Received MIH_C_MESSAGE_LINK_ACTION_REQUEST\n", __FUNCTION__); - memcpy(&message_wrapper_pP->_union_message.link_action_request.header, (const void *)&header, sizeof(MIH_C_HEADER_T)); - - /* Decode Link_Action.request */ - status = MIH_C_Link_Message_Decode_Link_Action_request(bb_pP, &message_wrapper_pP->_union_message.link_action_request); - - if (status == MIH_MESSAGE_DECODE_OK) { - LOG_D(RAL_ENB, "**\n"); - /* Process Link_Action.request */ - eRAL_action_request(instanceP, &message_wrapper_pP->_union_message.link_action_request); - } else { - } - - break; - - default: - LOG_W(RAL_ENB, " UNKNOWN MESSAGE ID SID %d, OP_CODE %d, AID %d\n", header.service_identifier, header.operation_code, header.action_identifier); - status = MIH_MESSAGE_DECODE_FAILURE; - - return status; - } - } else { - status = MIH_MESSAGE_DECODE_BAD_PARAMETER; - } - - return status; -} diff --git a/openair3/RAL-LTE/LTE_RAL_ENB/SRC/lteRALenb_parameters.c b/openair3/RAL-LTE/LTE_RAL_ENB/SRC/lteRALenb_parameters.c deleted file mode 100755 index e123436361..0000000000 --- a/openair3/RAL-LTE/LTE_RAL_ENB/SRC/lteRALenb_parameters.c +++ /dev/null @@ -1,182 +0,0 @@ -/***************************************************************************** - * Eurecom OpenAirInterface 3 - * Copyright(c) 2012 Eurecom - * - * Source eRAL_parameters.c - * - * Version 0.1 - * - * Date 07/03/2012 - * - * Product MIH RAL LTE - * - * Subsystem - * - * Authors Michelle Wetterwald, Lionel Gauthier, Frederic Maurel - * - * Description - * - *****************************************************************************/ -#define LTE_RAL_ENB -#define LTE_RAL_ENB_PARAMETERS_C - -#include "lteRALenb.h" - -/****************************************************************************/ -/****************** E X P O R T E D F U N C T I O N S ******************/ -/****************************************************************************/ - -/**************************************************************************** - ** ** - ** Name: eRAL_get_parameters_request() ** - ** ** - ** Description: Processes the Link_Get_Parameters.request message and ** - ** sends a LinK_Get_Parameters.confirm message to the MIHF. ** - ** ** - ** Inputs: msgP: Pointer to the received message ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: None ** - ** Others: None ** - ** ** - ***************************************************************************/ -void eRAL_get_parameters_request(ral_enb_instance_t instanceP, MIH_C_Message_Link_Get_Parameters_request_t* messageP) -{ - MIH_C_STATUS_T status; - MIH_C_LINK_PARAM_LIST_T link_parameters_status_list; - MIH_C_LINK_STATES_RSP_LIST_T link_states_response_list; - MIH_C_LINK_DESC_RSP_LIST_T link_descriptors_response_list; - unsigned int link_index; - - // SAVE REQUEST - // MAY BE MERGE REQUESTS ? - //memcpy(&g_link_cfg_param_thresholds_list, &messageP->primitive.LinkConfigureParameterList_list, sizeof(MIH_C_LINK_CFG_PARAM_LIST_T)); - - status = MIH_C_STATUS_SUCCESS; - - for (link_index = 0; - link_index < messageP->primitive.LinkParametersRequest_list.length; - link_index++) { - - //------------------------------------------------ - // MIH_C_LINK_PARAM_LIST_T - //------------------------------------------------ - memcpy(&link_parameters_status_list.val[link_index].link_param_type, - &messageP->primitive.LinkParametersRequest_list.val[link_index], - sizeof(MIH_C_LINK_PARAM_TYPE_T)); - - switch (messageP->primitive.LinkParametersRequest_list.val[link_index].choice) { - case MIH_C_LINK_PARAM_TYPE_CHOICE_GEN: - /*#define MIH_C_LINK_PARAM_GEN_DATA_RATE (MIH_C_LINK_PARAM_GEN_T)0 - #define MIH_C_LINK_PARAM_GEN_SIGNAL_STRENGTH (MIH_C_LINK_PARAM_GEN_T)1 - #define MIH_C_LINK_PARAM_GEN_SINR (MIH_C_LINK_PARAM_GEN_T)2 - #define MIH_C_LINK_PARAM_GEN_THROUGHPUT (MIH_C_LINK_PARAM_GEN_T)3 - #define MIH_C_LINK_PARAM_GEN_PACKET_ERROR_RATE (MIH_C_LINK_PARAM_GEN_T)4*/ - link_parameters_status_list.val[link_index].choice = MIH_C_LINK_PARAM_CHOICE_LINK_PARAM_VAL; - link_parameters_status_list.val[link_index]._union.link_param_val = MIH_C_LINK_PARAM_GEN_SIGNAL_STRENGTH; - break; - - case MIH_C_LINK_PARAM_TYPE_CHOICE_QOS: - /* - * \brief A type to represent QOS_LIST parameters. - * 0: Maximum number of differentiable classes of service supported. - * 1: Minimum packet transfer delay for all CoS, the minimum delay over a class - * population of interest. - * 2: Average packet transfer delay for all CoS, the arithmetic mean of the delay - * over a class population of interest. (See B.3.4) - * 3: Maximum packet transfer delay for all CoS, the maximum delay over a class - * population of interest. - * 4: Packet transfer delay jitter for all CoS, the standard deviation of the delay - * over a class population of interest. (See B.3.5.) - * 5: Packet loss rate for all CoS, the ratio between the number of frames that are - * transmitted but not received and the total number of frames transmitted over - * a class population of interest. (See B.3.2.) - * 6–255: (Reserved) - */ - link_parameters_status_list.val[link_index].choice = MIH_C_LINK_PARAM_CHOICE_QOS_PARAM_VAL; - link_parameters_status_list.val[link_index]._union.qos_param_val.choice = MIH_C_QOS_PARAM_VAL_CHOICE_AVG_PK_TX_DELAY; - link_parameters_status_list.val[link_index]._union.qos_param_val._union.avg_pk_tx_delay_list.length = 2; //?? - link_parameters_status_list.val[link_index]._union.qos_param_val._union.avg_pk_tx_delay_list.val[0].cos_id = 2; //?? - link_parameters_status_list.val[link_index]._union.qos_param_val._union.avg_pk_tx_delay_list.val[0].value = 20; //?? - link_parameters_status_list.val[link_index]._union.qos_param_val._union.avg_pk_tx_delay_list.val[1].cos_id = 3; //?? - link_parameters_status_list.val[link_index]._union.qos_param_val._union.avg_pk_tx_delay_list.val[2].value = 50; //?? - break; - - case MIH_C_LINK_PARAM_TYPE_CHOICE_LTE: - - /* - #define MIH_C_LINK_PARAM_LTE_UE_RSRP 0 - #define MIH_C_LINK_PARAM_LTE_UE_RSRQ 1 - #define MIH_C_LINK_PARAM_LTE_UE_CQI 2 - #define MIH_C_LINK_PARAM_LTE_AVAILABLE_BW 3 - #define MIH_C_LINK_PARAM_LTE_PACKET_DELAY 4 - #define MIH_C_LINK_PARAM_LTE_PACKET_LOSS_RATE 5 - #define MIH_C_LINK_PARAM_LTE_L2_BUFFER_STATUS 6 - #define MIH_C_LINK_PARAM_LTE_MOBILE_NODE_CAPABILITIES 7 - #define MIH_C_LINK_PARAM_LTE_EMBMS_CAPABILITY 8 - #define MIH_C_LINK_PARAM_LTE_JUMBO_FEASIBILITY 9 - #define MIH_C_LINK_PARAM_LTE_JUMBO_SETUP_STATUS 10 - #define MIH_C_LINK_PARAM_LTE_NUM_ACTIVE_EMBMS_RECEIVERS_PER_FLOW 11 - */ - case MIH_C_LINK_PARAM_TYPE_CHOICE_GG: - case MIH_C_LINK_PARAM_TYPE_CHOICE_EDGE: - case MIH_C_LINK_PARAM_TYPE_CHOICE_ETH: - case MIH_C_LINK_PARAM_TYPE_CHOICE_802_11: - case MIH_C_LINK_PARAM_TYPE_CHOICE_C2K: - case MIH_C_LINK_PARAM_TYPE_CHOICE_FDD: - case MIH_C_LINK_PARAM_TYPE_CHOICE_HRPD: - case MIH_C_LINK_PARAM_TYPE_CHOICE_802_16: - case MIH_C_LINK_PARAM_TYPE_CHOICE_802_20: - case MIH_C_LINK_PARAM_TYPE_CHOICE_802_22: - default: - LOG_E(RAL_ENB, "%s TO DO CONTINUE PROCESSING LinkParametersRequest_list of \n", __FUNCTION__); - } - - //------------------------------------------------ - // MIH_C_LINK_STATES_RSP_LIST_T - //------------------------------------------------ - if (messageP->primitive.LinkStatesRequest & MIH_C_BIT_LINK_STATES_REQ_OP_MODE) { - link_states_response_list.val[link_index].choice = 0; - link_states_response_list.val[link_index]._union.op_mode = MIH_C_OPMODE_NORMAL_MODE; - } else if (messageP->primitive.LinkStatesRequest & MIH_C_BIT_LINK_STATES_REQ_CHANNEL_ID) { - link_states_response_list.val[link_index].choice = 1; - link_states_response_list.val[link_index]._union.channel_id = PREDEFINED_CHANNEL_ID; - } else { - LOG_E(RAL_ENB, "%s Invalid LinkStatesRequest in MIH_C_Link_Get_Parameters_request\n", __FUNCTION__); - // DEFAULT VALUES - link_states_response_list.val[link_index].choice = 0; - link_states_response_list.val[link_index]._union.op_mode = MIH_C_OPMODE_NORMAL_MODE; - } - - //------------------------------------------------ - // MIH_C_LINK_DESC_RSP_LIST_T - //------------------------------------------------ - if (messageP->primitive.LinkDescriptorsRequest & MIH_C_BIT_NUMBER_OF_CLASSES_OF_SERVICE_SUPPORTED) { - link_descriptors_response_list.val[link_index].choice = 0; - link_descriptors_response_list.val[link_index]._union.num_cos = PREDEFINED_CLASSES_SERVICE_SUPPORTED; - } else if (messageP->primitive.LinkDescriptorsRequest & MIH_C_BIT_NUMBER_OF_QUEUES_SUPPORTED) { - link_descriptors_response_list.val[link_index].choice = 1; - link_descriptors_response_list.val[link_index]._union.num_queue = PREDEFINED_QUEUES_SUPPORTED; - } else { - LOG_E(RAL_ENB, "%s Invalid LinkDescriptorsRequest in MIH_C_Link_Get_Parameters_request\n", __FUNCTION__); - // DEFAULT VALUES - link_descriptors_response_list.val[link_index].choice = 0; - link_descriptors_response_list.val[link_index]._union.num_cos = PREDEFINED_CLASSES_SERVICE_SUPPORTED; - } - } - - link_parameters_status_list.length = messageP->primitive.LinkParametersRequest_list.length; - link_states_response_list.length = messageP->primitive.LinkParametersRequest_list.length; - link_descriptors_response_list.length = messageP->primitive.LinkParametersRequest_list.length; - - /* Get parameters link command is not supported at the network side */ - LOG_D(RAL_ENB, " Get Parameters request is not supported by the network\n"); - eRAL_send_get_parameters_confirm(instanceP, &messageP->header.transaction_id, - &status, NULL, NULL, NULL); -} - -/****************************************************************************/ -/********************* L O C A L F U N C T I O N S *********************/ -/****************************************************************************/ - diff --git a/openair3/RAL-LTE/LTE_RAL_ENB/SRC/lteRALenb_process.c b/openair3/RAL-LTE/LTE_RAL_ENB/SRC/lteRALenb_process.c deleted file mode 100755 index a745f85f3d..0000000000 --- a/openair3/RAL-LTE/LTE_RAL_ENB/SRC/lteRALenb_process.c +++ /dev/null @@ -1,670 +0,0 @@ -/***************************************************************************** - * Eurecom OpenAirInterface 3 - * Copyright(c) 2012 Eurecom - * - * Source eRAL_process.c - * - * Version 0.1 - * - * Date 07/10/2012 - * - * Product MIH RAL LTE - * - * Subsystem - * - * Authors Michelle Wetterwald, Lionel Gauthier, Frederic Maurel - * - * Description - * - *****************************************************************************/ -#define LTE_RAL_ENB -#define LTE_RAL_ENB_PROCESS_C -#include "lteRALenb.h" - - - -/****************************************************************************/ -/****************** E X P O R T E D F U N C T I O N S ******************/ -/****************************************************************************/ - -/**************************************************************************** - ** ** - ** Name: eRAL_process_find_channel() ** - ** ** - ** Description: Returns the Mobile Terminal index and the Radio Bearer ** - ** channel index for the specified Connection identifier. ** - ** ** - ** Inputs: cnxid: Connection identifier ** - ** Others: ralpriv ** - ** ** - ** Outputs: mt_ix: Mobile Terminal index ** - ** ch_ix: Radio Bearer channel index ** - ** Return: 0 if no MT and RB channel indexes exist ** - ** for the specified Connection identifier. ** - ** 1 otherwise. ** - ** Others: None ** - ** ** - ***************************************************************************/ -int eRAL_process_find_channel(ral_enb_instance_t instanceP, unsigned int cnxid, int* mt_ix, int* ch_ix) -{ - int mt, ch; - int found = 0; - - LOG_D(RAL_ENB, " %s : cnxid = %d\n", __FUNCTION__, cnxid); - - for (mt = 0; !found && (mt < RAL_MAX_MT); mt++) { - for (ch = 0; ch < RAL_MAX_RB; ch++) { - if (g_enb_ral_obj[instanceP].mt[mt].radio_channel[ch].cnx_id == cnxid) { - found = 1; - *mt_ix = mt; - *ch_ix = ch; - break; - } - } - } - - if (!found) { - *mt_ix = RAL_MAX_MT; - *ch_ix = 0; - } - - LOG_D(RAL_ENB, " %s : return %d (mt=%d, ch=%d)\n" , __FUNCTION__, found, *mt_ix, *ch_ix); - return found; -} - -/**************************************************************************** - ** ** - ** Name: eRAL_process_find_new_channel() ** - ** ** - ** Description: Returns the index of the first available Radio Bearer ** - ** channel for the specified Mobile Terminal identifier. ** - ** ** - ** Inputs: mt_ix: Mobile Terminal index ** - ** Others: ralpriv ** - ** ** - ** Outputs: None ** - ** Return: The index of the first available RB chan- ** - ** nel; RAL_MAX_RB if no any RB channel is ** - ** available. ** - ** Others: None ** - ** ** - ***************************************************************************/ -int eRAL_process_find_new_channel(ral_enb_instance_t instanceP, int mt_ix) -{ - int ch_ix; - - LOG_D(RAL_ENB, " %s : mt_ix = %d\n", __FUNCTION__, mt_ix); - - for (ch_ix = 0; ch_ix < RAL_MAX_RB; ch_ix++) { - if (g_enb_ral_obj[instanceP].mt[mt_ix].radio_channel[ch_ix].cnx_id == 0) { - break; - } - } - - LOG_D(RAL_ENB, " %s : return %d\n" , __FUNCTION__, ch_ix); - return ch_ix; -} - -/**************************************************************************** - ** ** - ** Name: eRAL_process_clean_channel() ** - ** ** - ** Description: Cleans data of the specified Radio Bearer channel. ** - ** ** - ** Inputs: None ** - ** Others: None ** - ** ** - ** Outputs: channel: Channel data to clean ** - ** Return: None ** - ** Others: None ** - ** ** - ***************************************************************************/ -void eRAL_process_clean_channel(struct ral_lte_channel* channel) -{ - LOG_D(RAL_ENB, " %s : cnx_id = %d, rbId = %d\n", __FUNCTION__, - channel->cnx_id, channel->rbId); - memset(channel, 0, sizeof (struct ral_lte_channel)); -} - -/**************************************************************************** - ** ** - ** Name: eRAL_process_mt_addr_to_string() ** - ** ** - ** Description: Display the specified IPv6 address. ** - ** ** - ** Inputs: ip_addr: The IP address ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: Pointer to the string buffer. ** - ** Others: None ** - ** ** - ***************************************************************************/ -char* eRAL_process_mt_addr_to_string(const unsigned char* ip_addr) -{ - static char buffer[40]; - int i, index = 0; - - for (i = 0; i < 16; i++) { - index += sprintf(&buffer[index], "%.2hhX", ip_addr[i]); - - if (i % 2) buffer[index++] = ':'; - } - - buffer[--index] = '\0'; - return buffer; -} - -/**************************************************************************** - ** ** - ** Name: eRAL_process_mt_addr_to_l2id() ** - ** ** - ** Description: Convert the specified IP address to Layer 2 identifier. ** - ** ** - ** Inputs: mt_addr: MT's IP address ** - ** Others: None ** - ** ** - ** Outputs: l2id Layer 2 identifier ** - ** Return: None ** - ** Others: None ** - ** ** - ***************************************************************************/ -void eRAL_process_mt_addr_to_l2id(const unsigned char* mt_addr, unsigned int* l2id) -{ - if ( !(mt_addr) || !(l2id) ) { - LOG_E(RAL_ENB, " %s : input parameter is NULL\n", __FUNCTION__); - return; - } - - l2id[0] = mt_addr[0]+256 *(mt_addr[1]+256*(mt_addr[2]+256*(mt_addr[3]))); - l2id[1] = mt_addr[4]+256 *(mt_addr[5]+256*(mt_addr[6]+256*(mt_addr[7]))); -} - -/**************************************************************************** - ** ** - ** Name: eRAL_process_cmp_mt_addr() ** - ** ** - ** Description: Compares MT's IP address to the specified L2 identifier. ** - ** ** - ** Inputs: mt_addr: MT's IP address ** - ** l2id Layer 2 identifier ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: 0 if the MT's IP address matches the L2 ** - ** identifier, 1 otherwise. ** - ** Others: None ** - ** ** - ***************************************************************************/ -int eRAL_process_cmp_mt_addr(const char* mt_addr, const char* l2id) -{ - int i; - - for (i = 0; i < 8; i++) { - if ((uint8_t)l2id[i] != (uint8_t)mt_addr[i+8]) { - return 0; - } - } - - return 1; -} - -/**************************************************************************** - ** ** - ** Name: eRAL_process_find_mt_by_addr() ** - ** ** - ** Description: Returns the index of the Mobile Terminal with the ** - ** specified IP address. ** - ** ** - ** Inputs: mt_addr: MT's IP address ** - ** Others: ralpriv ** - ** ** - ** Outputs: None ** - ** Return: The MT's index in the list of MTs; ** - ** RAL_MAX_MT if not found. ** - ** Others: None ** - ** ** - ***************************************************************************/ -int eRAL_process_find_mt_by_addr(ral_enb_instance_t instanceP, const char* mt_addr) -{ - int mt_ix; - - for (mt_ix = 0; mt_ix < RAL_MAX_MT; mt_ix++) { - const char* l2id = (const char*)(&g_enb_ral_obj[instanceP].mt[mt_ix].ipv6_l2id[0]); - int i; - - for (i = 0; i < 8; i++) { - if ((uint8_t)l2id[i] != (uint8_t)mt_addr[i+8]) { - break; - } - } - - if (i == 8) { - break; - } - } - - LOG_D(RAL_ENB, " %s : return %d\n" , __FUNCTION__, mt_ix); - return mt_ix; -} - -/**************************************************************************** - ** ** - ** Name: eRAL_process_verify_pending_mt_status() ** - ** ** - ** Description: Checks the pending MT connection status and simulates RB ** - ** setup if it is ready for Radio Bearer establishment. ** - ** ** - ** Inputs: None ** - ** Others: ralpriv ** - ** ** - ** Outputs: None ** - ** Return: None ** - ** Others: None ** - ** ** - ***************************************************************************/ -void eRAL_process_verify_pending_mt_status(ral_enb_instance_t instanceP) -{ - int mt_ix; - - if (!g_enb_ral_obj[instanceP].pending_mt_timer) { - LOG_D(RAL_ENB, " Pending MT timer expired\n"); -#ifdef RAL_REALTIME - eRAL_process_clean_pending_mt(instanceP); -#endif -#ifdef RAL_DUMMY - LOG_D(RAL_ENB, " SIMULATE MT arrival\n"); - mt_ix = eRAL_NAS_update_MTs_list(); - LOG_D(RAL_ENB, " SIMULATE RB setup\n"); - eRAL_process_waiting_RB(mt_ix); -#endif - } else { -#ifdef RAL_REALTIME - - if (!( g_enb_ral_obj[instanceP].pending_mt_timer % 10)) { - /* Get the list of MTs in the driver waiting for pending - * RB establishment */ - // LG RAL_process_NAS_message(IO_OBJ_CNX, IO_CMD_LIST, 0, 0); - // LG RAL_process_NAS_message(IO_OBJ_RB, IO_CMD_LIST, 0, 0); - /* Check if the pending MT is in the list */ - mt_ix = eRAL_process_find_mt_by_addr(instanceP, (char*)g_enb_ral_obj[instanceP].pending_mt.ipv6_addr); - - if ( (mt_ix < RAL_MAX_MT) && - (g_enb_ral_obj[instanceP].mt[mt_ix].mt_state == RB_CONNECTED)) { - /* The pending MT is ready for RB establishment */ - eRAL_process_waiting_RB(instanceP, mt_ix); - } - } - -#endif - } -} - -/**************************************************************************** - ** ** - ** Name: eRAL_process_map_qos() ** - ** ** - ** Description: Performs mapping of reserved bit rate to Radio QoS class, ** - ** and mapping of traffic class to DCSP. ** - ** ** - ** Inputs: mt_ix: Mobile Terminal index ** - ** ch_ix: Radio Bearer channel index ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: 1 if the requested reserved bit rate and ** - ** traffic class are supported and their ** - ** mapping to Radio Qos class and DSCP ** - ** succeed. 0 otherwise. ** - ** Others: ralpriv ** - ** ** - ***************************************************************************/ -int eRAL_process_map_qos(ral_enb_instance_t instanceP, int mt_ix, int ch_ix) -{ - int resBitrateDL = 0, resBitrateUL = 0; - struct ral_lte_channel *currChannel; - - /* - * Map for multicast flow - */ - if (mt_ix == RAL_MAX_MT) { - currChannel = &(g_enb_ral_obj[instanceP].mcast.radio_channel); - - /* multicast - reserved bit rate */ - resBitrateDL = (int)currChannel->resBitrate[1]; - - if (resBitrateDL <= RAL_BITRATE_128k) { - currChannel->RadioQoSclass = 20; - } else if (resBitrateDL <= RAL_BITRATE_256k) { - currChannel->RadioQoSclass = 21; - } else if (resBitrateDL <= RAL_BITRATE_384k) { - currChannel->RadioQoSclass = 22; - } else { - LOG_E(RAL_ENB, " %s : Invalid requested resBitrate %d - Request will be rejected.\n", __FUNCTION__, resBitrateDL); - return 0; - } - - /* multicast - DSCP */ - if (currChannel->classId[1] < 64) { - currChannel->dscpDL = currChannel->classId[1]; - } else { - LOG_E(RAL_ENB, " %s : DSCP %d > 63 - NOT SUPPORTED - Request will be rejected.\n", __FUNCTION__, currChannel->classId[1]); - return 0; - } - - LOG_D(RAL_ENB, " QoS Mapping : Requested radio QoS class %d, DSCP DL %d\n", - currChannel->RadioQoSclass, - currChannel->dscpDL); - } - - /* - * Map for unicast flow - */ - else { - currChannel = &(g_enb_ral_obj[instanceP].mt[mt_ix].radio_channel[ch_ix]); - - /* unicast - reserved bit rate - CONVERSATIONAL */ - resBitrateDL = (int)currChannel->resBitrate[1]; - resBitrateUL = (int)currChannel->resBitrate[0]; - - if ((resBitrateDL <= RAL_BITRATE_32k) && - (resBitrateUL <= RAL_BITRATE_32k)) { - currChannel->RadioQoSclass = 1; - } else if ((resBitrateDL <= RAL_BITRATE_64k) && - (resBitrateUL <= RAL_BITRATE_64k)) { - currChannel->RadioQoSclass = 2; - } else if ((resBitrateDL <= RAL_BITRATE_128k) && - (resBitrateUL <= RAL_BITRATE_128k)) { - currChannel->RadioQoSclass = 3; - } else if ((resBitrateDL <= RAL_BITRATE_256k) && - (resBitrateUL <= RAL_BITRATE_256k)) { - currChannel->RadioQoSclass = 4; - } else if ((resBitrateDL <= RAL_BITRATE_320k) && - (resBitrateUL <= RAL_BITRATE_320k)) { - currChannel->RadioQoSclass = 5; - } else if ((resBitrateDL >= RAL_BITRATE_384k) && - (resBitrateDL <= RAL_BITRATE_440k) && - (resBitrateUL <= RAL_BITRATE_64k)) { - currChannel->RadioQoSclass = 14; - } else { - LOG_E(RAL_ENB, " %s : Invalid requested resBitrate %d , %d - Request will be rejected\n", __FUNCTION__, resBitrateDL, resBitrateUL); - return 0; - } - - /* unicast - DSCP */ - if ((currChannel->classId[0] < 64) && - (currChannel->classId[1] < 64)) { - currChannel->dscpUL = currChannel->classId[0]; - currChannel->dscpDL = currChannel->classId[1]; - } else { - LOG_E(RAL_ENB, " %s : DSCP > 63 - NOT SUPPORTED - Request will be rejected.\n", __FUNCTION__); - return 0; - } - - LOG_D(RAL_ENB, " QoS Mapping : Requested radio QoS class %d, DSCP UL %d, DSCP DL %d\n", currChannel->RadioQoSclass, currChannel->dscpUL, currChannel->dscpDL); - } - - return 1; -} - -/****************************************************************************/ -/********************* L O C A L F U N C T I O N S *********************/ -/****************************************************************************/ - -/**************************************************************************** - ** ** - ** Name: eRAL_process_waiting_RB() ** - ** ** - ** Description: Allocates a new Radio Bearer parameters to the specified ** - ** Mobile Terminal which was pending for RB establishment, ** - ** and sends RB establishment request to the NAS sublayer. ** - ** ** - ** Inputs: mt_ix: Mobile Terminal index ** - ** Others: ralpriv ** - ** ** - ** Outputs: None ** - ** Return: None ** - ** Others: ralpriv ** - ** ** - ***************************************************************************/ -void eRAL_process_waiting_RB(ral_enb_instance_t instanceP, int mt_ix) -{ - struct ral_lte_channel *currChannel; - struct ral_lte_channel *pendingChannel; - int ch_ix, f_ix; - int dir, mapping_result, rc = -1; - - LOG_D(RAL_ENB, " Establishment of pending RB now starting...\n"); - ch_ix = eRAL_process_find_new_channel(instanceP, mt_ix); - - if (ch_ix == RAL_MAX_RB) { - LOG_D(RAL_ENB, " No RB available in MT - Deleting request data\n"); - eRAL_process_clean_pending_mt(instanceP); - return; - } - - pendingChannel = &(g_enb_ral_obj[instanceP].pending_mt.radio_channel[0]); - currChannel = &(g_enb_ral_obj[instanceP].mt[mt_ix].radio_channel[ch_ix]); - - currChannel->cnx_id = (RAL_MAX_RB_PER_UE*mt_ix)+ch_ix+1; - currChannel->rbId = RAL_DEFAULT_RAB_ID+ch_ix; - currChannel->multicast = 0; - LOG_D(RAL_ENB, " mt_ix %d, ch_ix %d, cnx_id %d, rbId %d\n", - mt_ix, ch_ix, currChannel->cnx_id, currChannel->rbId); - memcpy((char *)&(g_enb_ral_obj[instanceP].mt[mt_ix].ipv6_addr), - (char *)&(g_enb_ral_obj[instanceP].pending_mt.ipv6_addr), 16); - LOG_D(RAL_ENB, " MT's address = %s\n", - eRAL_process_mt_addr_to_string(g_enb_ral_obj[instanceP].mt[mt_ix].ipv6_addr)); - - /* Save the pending data flow identifier into the list of active data flows */ - f_ix = eRAL_action_save_flow_id(instanceP, &g_enb_ral_obj[instanceP].pending_req_fid, currChannel->cnx_id); - - if (f_ix < 0) { - LOG_D(RAL_ENB, " No RB available - Deleting request data\n"); - eRAL_process_clean_pending_mt(instanceP); - return; - } - - /* Store resource parameters of the pending MT */ - for (dir = 0; dir < 2; dir++) { - currChannel->flowId[dir] = f_ix; - currChannel->classId[dir]= pendingChannel->classId[dir] ; - currChannel->resBitrate[dir] = pendingChannel->resBitrate[dir]; - currChannel->meanBitrate[dir] = pendingChannel->meanBitrate[dir]; - currChannel->bktDepth[dir] = pendingChannel->bktDepth[dir]; - currChannel->pkBitrate[dir] = pendingChannel->pkBitrate[dir]; - currChannel->MTU[dir] = pendingChannel->MTU[dir]; - LOG_D(RAL_ENB, " qos value : DIR %d, flowId %d, classId %d, resBitrate %.1f \n", - dir, currChannel->flowId[dir], currChannel->classId[dir], currChannel->resBitrate[dir]); - } - - /* Map Qos */ - mapping_result = eRAL_process_map_qos(instanceP, mt_ix, ch_ix); - - if (mapping_result) { -#ifdef RAL_DUMMY - rc = eRAL_NAS_send_rb_establish_request(mt_ix, ch_ix); -#endif -#ifdef RAL_REALTIME - // LG rc = RAL_process_NAS_message(IO_OBJ_RB, IO_CMD_ADD, mt_ix, ch_ix); -#endif - } - - if (rc < 0) { - /* Failed to send RB establishment request; release new RB data */ - eRAL_process_clean_channel(currChannel); - } else { - /* RB establishment request has been sent; release pending MT data */ - g_enb_ral_obj[instanceP].pending_req_flag = 0; - eRAL_process_clean_pending_mt(instanceP); - } -} - -/**************************************************************************** - ** Name: eRAL_process_clean_pending_mt() ** - ** Description: Deletes previously stored pending MT data. ** - ***************************************************************************/ -void eRAL_process_clean_pending_mt(ral_enb_instance_t instanceP) -{ - memset(g_enb_ral_obj[instanceP].pending_mt.ipv6_addr, 0 , 16); - eRAL_process_clean_channel(&g_enb_ral_obj[instanceP].pending_mt.radio_channel[0]); - - g_enb_ral_obj[instanceP].pending_mt_timer = -1; - LOG_D(RAL_ENB, " Pending MT data deleted\n"); -} - -/**************************************************************************** - ** MW Added ** - ***************************************************************************/ -//--------------------------------------------------------------------------- -void RAL_printInitStatus(ral_enb_instance_t instanceP) -{ - //--------------------------------------------------------------------------- - LOG_D(RAL_ENB, "Network status updated \n"); - LOG_D(RAL_ENB, "Mobile : %d, %d, %d, %d, %d, %d \n", - g_enb_ral_obj[instanceP].cell_id, - g_enb_ral_obj[instanceP].mt[0].ue_id, - g_enb_ral_obj[instanceP].mt[0].ipv6_l2id[0], - g_enb_ral_obj[instanceP].mt[0].ipv6_l2id[1], - g_enb_ral_obj[instanceP].mt[0].num_rbs , - g_enb_ral_obj[instanceP].mt[0].nas_state ); - LOG_D(RAL_ENB, "Default rb : %d, %d, %d, %d, %d, %d, %d \n", - g_enb_ral_obj[instanceP].mt[0].radio_channel[0].rbId , - g_enb_ral_obj[instanceP].mt[0].radio_channel[0].RadioQoSclass , - g_enb_ral_obj[instanceP].mt[0].radio_channel[0].cnx_id , - g_enb_ral_obj[instanceP].mt[0].radio_channel[0].dscpUL , - g_enb_ral_obj[instanceP].mt[0].radio_channel[0].dscpDL , - g_enb_ral_obj[instanceP].mt[0].radio_channel[0].nas_state , - g_enb_ral_obj[instanceP].mt[0].radio_channel[0].status ); - - LOG_D(RAL_ENB, "Number of connected MTs : %d\n\n", g_enb_ral_obj[instanceP].num_connected_mts); -} - -//--------------------------------------------------------------------------- -// poll for measures in NAS -void RAL_NAS_measures_polling(ral_enb_instance_t instanceP) -{ - //--------------------------------------------------------------------------- -#ifdef RAL_REALTIME - // LG RAL_process_NAS_message(IO_OBJ_MEAS, IO_CMD_LIST,0,0); -#endif -#ifdef RAL_DUMMY - eRAL_NAS_send_measure_request(); -#endif -} - -//--------------------------------------------------------------------------- -// Common function to report congestion -void RAL_NAS_report_congestion(ral_enb_instance_t instanceP, int ix) -{ - //--------------------------------------------------------------------------- - MIH_C_TRANSACTION_ID_T transaction_id; - MIH_C_LINK_TUPLE_ID_T link_identifier; - LIST(MIH_C_LINK_PARAM_RPT, LinkParametersReportList); - - LOG_D(RAL_ENB, "Congestion detected for UE%d, sending congestion notification to MIH User \n", ix); - transaction_id = MIH_C_get_new_transaction_id(); - link_identifier.link_id.link_type = MIH_C_WIRELESS_UMTS; - link_identifier.link_id.link_addr.choice = MIH_C_CHOICE_3GPP_3G_CELL_ID; - Bit_Buffer_t *plmn = new_BitBuffer_0(); - BitBuffer_wrap(plmn, (unsigned char*) &g_enb_ral_obj[instanceP].plmn_id, sizeof(g_enb_ral_obj[instanceP].plmn_id)); - MIH_C_PLMN_ID_decode(plmn, &link_identifier.link_id.link_addr._union._3gpp_3g_cell_id.plmn_id); - free_BitBuffer(plmn); - link_identifier.link_id.link_addr._union._3gpp_3g_cell_id.cell_id = g_enb_ral_obj[instanceP].cell_id; - link_identifier.choice = MIH_C_LINK_TUPLE_ID_CHOICE_NULL; - // - LinkParametersReportList_list.val[LinkParametersReportList_list.length].link_param.link_param_type.choice = MIH_C_LINK_PARAM_TYPE_CHOICE_LTE; - LinkParametersReportList_list.val[LinkParametersReportList_list.length].link_param.link_param_type._union.link_param_lte = MIH_C_LINK_PARAM_LTE_L2_BUFFER_STATUS; - // LinkParametersReportList_list.val[LinkParametersReportList_list.length].link_param.link_param_type.choice = MIH_C_LINK_PARAM_TYPE_CHOICE_GEN; - // LinkParametersReportList_list.val[LinkParametersReportList_list.length].link_param.link_param_type._union.link_param_gen = MIH_C_LINK_PARAM_LTE_L2_BUFFER_STATUS; - LinkParametersReportList_list.val[LinkParametersReportList_list.length].link_param.choice = MIH_C_LINK_PARAM_CHOICE_LINK_PARAM_VAL; - // LG obsolete rlcBufferOccupancy LinkParametersReportList_list.val[LinkParametersReportList_list.length].link_param._union.link_param_val = g_enb_ral_obj[instanceP].rlcBufferOccupancy[ix]; - - LinkParametersReportList_list.val[LinkParametersReportList_list.length].choice = MIH_C_LINK_PARAM_RPT_CHOICE_THRESHOLD; -#warning "TO DO" - //LinkParametersReportList_list.val[LinkParametersReportList_list.length]._union.threshold.threshold_val = g_enb_ral_obj[instanceP].congestion_threshold; - LinkParametersReportList_list.val[LinkParametersReportList_list.length]._union.threshold.threshold_xdir = MIH_C_ABOVE_THRESHOLD; - LinkParametersReportList_list.length = LinkParametersReportList_list.length + 1; - - // - eRAL_send_link_parameters_report_indication(instanceP, &transaction_id, &link_identifier, &LinkParametersReportList_list); -#warning "TO DO?" - //g_enb_ral_obj[instanceP].congestion_flag = RAL_TRUE; - -} -//--------------------------------------------------------------------------- -// Temp - Enter hard-coded measures in IAL -/*LGvoid RAL_NAS_measures_analyze(ral_enb_instance_t instanceP){ - //--------------------------------------------------------------------------- - MIH_C_TRANSACTION_ID_T transaction_id; - MIH_C_LINK_TUPLE_ID_T link_identifier; - LIST(MIH_C_LINK_PARAM_RPT, LinkParametersReportList); - int ix; - - LinkParametersReportList_list.length = 0; - - if (g_enb_ral_obj[instanceP].congestion_flag == RAL_FALSE){ - // Check congestion - for (ix=0; ix g_enb_ral_obj[instanceP].congestion_threshold)&& - ((g_enb_ral_obj[instanceP].mih_subscribe_req_event_list && MIH_C_BIT_LINK_PARAMETERS_REPORT )>0)){ - RAL_NAS_report_congestion(instanceP, ix); - break; - } - } - } else if (g_enb_ral_obj[instanceP].measures_triggered_flag == RAL_TRUE){ - // Measures should be reported to MIH user - LOG_D(RAL_ENB, "Sending traffic measures to MIH User \n"); - - transaction_id = MIH_C_get_new_transaction_id(); - link_identifier.link_id.link_type = MIH_C_WIRELESS_UMTS; - link_identifier.link_id.link_addr.choice = MIH_C_CHOICE_3GPP_3G_CELL_ID; - Bit_Buffer_t *plmn = new_BitBuffer_0(); - BitBuffer_wrap(plmn, (unsigned char*) g_enb_ral_obj[instanceP].plmn, DEFAULT_PLMN_SIZE); - MIH_C_PLMN_ID_decode(plmn, &link_identifier.link_id.link_addr._union._3gpp_3g_cell_id.plmn_id); - free_BitBuffer(plmn); - link_identifier.link_id.link_addr._union._3gpp_3g_cell_id.cell_id = g_enb_ral_obj[instanceP].cell_id; - link_identifier.choice = MIH_C_LINK_TUPLE_ID_CHOICE_NULL; - // - // send parameters !!! Value link_param_val must be in 0...65535 range - // UE0 scheduledPRB - LinkParametersReportList_list.val[LinkParametersReportList_list.length].link_param.link_param_type.choice = MIH_C_LINK_PARAM_TYPE_CHOICE_LTE; - LinkParametersReportList_list.val[LinkParametersReportList_list.length].link_param.link_param_type._union.link_param_lte = MIH_C_LINK_PARAM_LTE_AVAILABLE_BW; - LinkParametersReportList_list.val[LinkParametersReportList_list.length].link_param.choice = MIH_C_LINK_PARAM_CHOICE_LINK_PARAM_VAL; - LinkParametersReportList_list.val[LinkParametersReportList_list.length].link_param._union.link_param_val = g_enb_ral_obj[instanceP].scheduledPRB[0]; - LinkParametersReportList_list.val[LinkParametersReportList_list.length].choice = MIH_C_LINK_PARAM_RPT_CHOICE_NULL; - LinkParametersReportList_list.length = LinkParametersReportList_list.length + 1; - // UE0 totalDataVolume - LinkParametersReportList_list.val[LinkParametersReportList_list.length].link_param.link_param_type.choice = MIH_C_LINK_PARAM_TYPE_CHOICE_LTE; - LinkParametersReportList_list.val[LinkParametersReportList_list.length].link_param.link_param_type._union.link_param_lte = MIH_C_LINK_PARAM_LTE_AVAILABLE_BW; - LinkParametersReportList_list.val[LinkParametersReportList_list.length].link_param.choice = MIH_C_LINK_PARAM_CHOICE_LINK_PARAM_VAL; - LinkParametersReportList_list.val[LinkParametersReportList_list.length].link_param._union.link_param_val = (g_enb_ral_obj[instanceP].totalDataVolume[0]/1000); - LinkParametersReportList_list.val[LinkParametersReportList_list.length].choice = MIH_C_LINK_PARAM_RPT_CHOICE_NULL; - LinkParametersReportList_list.length = LinkParametersReportList_list.length + 1; - // UE1 scheduledPRB - LinkParametersReportList_list.val[LinkParametersReportList_list.length].link_param.link_param_type.choice = MIH_C_LINK_PARAM_TYPE_CHOICE_LTE; - LinkParametersReportList_list.val[LinkParametersReportList_list.length].link_param.link_param_type._union.link_param_lte = MIH_C_LINK_PARAM_LTE_AVAILABLE_BW; - LinkParametersReportList_list.val[LinkParametersReportList_list.length].link_param.choice = MIH_C_LINK_PARAM_CHOICE_LINK_PARAM_VAL; - LinkParametersReportList_list.val[LinkParametersReportList_list.length].link_param._union.link_param_val = g_enb_ral_obj[instanceP].scheduledPRB[1]; - LinkParametersReportList_list.val[LinkParametersReportList_list.length].choice = MIH_C_LINK_PARAM_RPT_CHOICE_NULL; - LinkParametersReportList_list.length = LinkParametersReportList_list.length + 1; - // UE1 totalDataVolume - LinkParametersReportList_list.val[LinkParametersReportList_list.length].link_param.link_param_type.choice = MIH_C_LINK_PARAM_TYPE_CHOICE_LTE; - LinkParametersReportList_list.val[LinkParametersReportList_list.length].link_param.link_param_type._union.link_param_lte = MIH_C_LINK_PARAM_LTE_AVAILABLE_BW; - LinkParametersReportList_list.val[LinkParametersReportList_list.length].link_param.choice = MIH_C_LINK_PARAM_CHOICE_LINK_PARAM_VAL; - LinkParametersReportList_list.val[LinkParametersReportList_list.length].link_param._union.link_param_val = (g_enb_ral_obj[instanceP].totalDataVolume[1]/1000); - LinkParametersReportList_list.val[LinkParametersReportList_list.length].choice = MIH_C_LINK_PARAM_RPT_CHOICE_NULL; - LinkParametersReportList_list.length = LinkParametersReportList_list.length + 1; - // totalNumPRBs - LinkParametersReportList_list.val[LinkParametersReportList_list.length].link_param.link_param_type.choice = MIH_C_LINK_PARAM_TYPE_CHOICE_LTE; - LinkParametersReportList_list.val[LinkParametersReportList_list.length].link_param.link_param_type._union.link_param_lte = MIH_C_LINK_PARAM_LTE_AVAILABLE_BW; - LinkParametersReportList_list.val[LinkParametersReportList_list.length].link_param.choice = MIH_C_LINK_PARAM_CHOICE_LINK_PARAM_VAL; - LinkParametersReportList_list.val[LinkParametersReportList_list.length].link_param._union.link_param_val = g_enb_ral_obj[instanceP].totalNumPRBs; - LinkParametersReportList_list.val[LinkParametersReportList_list.length].choice = MIH_C_LINK_PARAM_RPT_CHOICE_NULL; - LinkParametersReportList_list.length = LinkParametersReportList_list.length + 1; - // - eRAL_send_link_parameters_report_indication(instanceP, &transaction_id, &link_identifier, &LinkParametersReportList_list); - - } -} -*/ diff --git a/openair3/RAL-LTE/LTE_RAL_ENB/SRC/lteRALenb_rrc_msg.c b/openair3/RAL-LTE/LTE_RAL_ENB/SRC/lteRALenb_rrc_msg.c deleted file mode 100755 index a0ec08121a..0000000000 --- a/openair3/RAL-LTE/LTE_RAL_ENB/SRC/lteRALenb_rrc_msg.c +++ /dev/null @@ -1,168 +0,0 @@ -/***************************************************************************** - * Eurecom OpenAirInterface 3 - * Copyright(c) 2012 Eurecom - * - * Source eRAL_subscribe.c - * - * Version 0.1 - * - * Date 11/27/2013 - * - * Product MIH RAL LTE - * - * Subsystem - * - * Authors Lionel Gauthier - * - * Description - * - *****************************************************************************/ -#define LTE_RAL_ENB -#define LTE_RAL_ENB_RRC_MSG_C -#include "lteRALenb.h" - -static int ueid2eui48(uint8_t *euiP, uint8_t* ue_idP) -{ - // inspired by linux-source-3.2.0/net/ipv6/addrconf.c - memcpy(euiP, ue_idP, 3); - memcpy(euiP + 5, ue_idP + 3, 3); - euiP[3] = 0xFF; - euiP[4] = 0xFE; - euiP[0] ^= 2; - return 0; -} - -//--------------------------------------------------------------------------------------------------------------------- -void eRAL_rx_rrc_ral_system_configuration_indication(instance_t instanceP, MessageDef *msg_pP) -//--------------------------------------------------------------------------------------------------------------------- -{ - module_id_t mod_id = instanceP; - g_enb_ral_obj[mod_id].plmn_id = RRC_RAL_SYSTEM_CONFIGURATION_IND(msg_pP).plmn_id; - g_enb_ral_obj[mod_id].cell_id = RRC_RAL_SYSTEM_CONFIGURATION_IND(msg_pP).cell_id; -} - -//--------------------------------------------------------------------------------------------------------------------- -void eRAL_rx_rrc_ral_connection_establishment_indication(instance_t instanceP, MessageDef *msg_pP) -//--------------------------------------------------------------------------------------------------------------------- -{ - MIH_C_LINK_TUPLE_ID_T link_tuple_id; -#ifdef USE_3GPP_ADDR_AS_LINK_ADDR - uint8_t ue_id_array[MIH_C_3GPP_ADDR_LENGTH]; - uint8_t mn_link_addr[MIH_C_3GPP_ADDR_LENGTH]; - uint64_t ue_id; //EUI-64 - int i; -#endif - module_id_t mod_id = instanceP; - - // The LINK_ID contains the MN LINK_ADDR - link_tuple_id.choice = MIH_C_LINK_TUPLE_ID_CHOICE_LINK_ADDR; - link_tuple_id.link_id.link_type = MIH_C_WIRELESS_LTE; -#ifdef USE_3GPP_ADDR_AS_LINK_ADDR - link_tuple_id.link_id.link_addr.choice = (MIH_C_CHOICE_T)MIH_C_CHOICE_3GPP_ADDR; - - memset(ue_id_array, 0, MIH_C_3GPP_ADDR_LENGTH); - ue_id = (uint64_t)RRC_RAL_CONNECTION_ESTABLISHMENT_IND(msg_pP).ue_id; - - for (i = 0; i < MIH_C_3GPP_ADDR_LENGTH; i++) { - ue_id_array[MIH_C_3GPP_ADDR_LENGTH-1-i] = (ue_id & 0x00000000000000FF); - ue_id = ue_id >> 8; - } - - ueid2eui48(mn_link_addr, ue_id_array); - MIH_C_3GPP_ADDR_set(&(link_tuple_id.link_id.link_addr._union._3gpp_addr), NULL, 8); - - // The optional LINK_ADDR contains a link address of PoA. - eRAL_MIH_C_3GPP_ADDR_load_3gpp_str_address(mod_id, &link_tuple_id._union.link_addr._union._3gpp_addr, (uint8_t*)ENB_DEFAULT_3GPP_ADDRESS); -#else -#warning TO DO UE ID - // preserve byte order of plmn id - memcpy(link_tuple_id.link_id.link_addr._union._3gpp_3g_cell_id.plmn_id.val, &g_enb_ral_obj[mod_id].plmn_id, 3); - link_tuple_id.link_id.link_addr._union._3gpp_3g_cell_id.cell_id = g_enb_ral_obj[mod_id].cell_id; - - LOG_D(RAL_ENB, "PLMN ID %d.%d.%d\n", - link_tuple_id.link_id.link_addr._union._3gpp_3g_cell_id.plmn_id.val[0], - link_tuple_id.link_id.link_addr._union._3gpp_3g_cell_id.plmn_id.val[1], - link_tuple_id.link_id.link_addr._union._3gpp_3g_cell_id.plmn_id.val[2]); - - LOG_D(RAL_ENB, "CELL ID %d\n", - link_tuple_id.link_id.link_addr._union._3gpp_3g_cell_id.cell_id); -#endif - - - eRAL_send_link_up_indication(instanceP, &g_enb_ral_obj[instanceP].transaction_id, - &link_tuple_id, - NULL, //MIH_C_LINK_ADDR_T *old_arP,(Optional) Old Access Router link address. - NULL, //MIH_C_LINK_ADDR_T *new_arP,(Optional) New Access Router link address. - NULL, //MIH_C_IP_RENEWAL_FLAG_T *flagP, (Optional) Indicates whether the MN needs to change IP Address in the new PoA. - NULL); //MIH_C_IP_MOB_MGMT_T *mobil_mngtP, (Optional) Indicates the type of Mobility Management Protocol supported by the new PoA. - - g_enb_ral_obj[instanceP].transaction_id ++; - -} -//--------------------------------------------------------------------------------------------------------------------- -void eRAL_rx_rrc_ral_connection_reestablishment_indication(instance_t instanceP, MessageDef *msg_pP) -//--------------------------------------------------------------------------------------------------------------------- -{ - // module_id_t mod_id = instanceP; -#warning "TO DO ral_rx_rrc_ral_connection_reestablishment_indication" -} -//--------------------------------------------------------------------------------------------------------------------- -void eRAL_rx_rrc_ral_connection_reconfiguration_indication(instance_t instanceP, MessageDef *msg_pP) -//--------------------------------------------------------------------------------------------------------------------- -{ - MIH_C_LINK_TUPLE_ID_T link_tuple_id; - uint8_t ue_id_array[MIH_C_3GPP_ADDR_LENGTH]; - uint8_t mn_link_addr[MIH_C_3GPP_ADDR_LENGTH]; - uint64_t ue_id; //EUI-64 - int i; - module_id_t mod_id = instanceP; - - // The LINK_ID contains the MN LINK_ADDR - link_tuple_id.link_id.link_type = MIH_C_WIRELESS_LTE; - link_tuple_id.link_id.link_addr.choice = MIH_C_CHOICE_3GPP_ADDR; - memset(ue_id_array, 0, MIH_C_3GPP_ADDR_LENGTH); -#warning "TO DO FIX UE_ID TYPE in rrc_ral_connection_establishment_ind_t" - ue_id = (uint64_t)RRC_RAL_CONNECTION_ESTABLISHMENT_IND(msg_pP).ue_id; - - for (i = 0; i < MIH_C_3GPP_ADDR_LENGTH; i++) { - ue_id_array[MIH_C_3GPP_ADDR_LENGTH-1-i] = (ue_id & 0x00000000000000FF); - ue_id = ue_id >> 8; - } - - ueid2eui48(mn_link_addr, ue_id_array); - MIH_C_3GPP_ADDR_set(&(link_tuple_id.link_id.link_addr._union._3gpp_addr), NULL, 8); - - //The optional LINK_ADDR may contains a link address of PoA. - link_tuple_id.choice = MIH_C_LINK_TUPLE_ID_CHOICE_NULL; - - eRAL_send_link_up_indication(instanceP, &g_enb_ral_obj[instanceP].transaction_id, - &link_tuple_id, - NULL, //MIH_C_LINK_ADDR_T *old_arP,(Optional) Old Access Router link address. - NULL, //MIH_C_LINK_ADDR_T *new_arP,(Optional) New Access Router link address. - NULL, //MIH_C_IP_RENEWAL_FLAG_T *flagP, (Optional) Indicates whether the MN needs to change IP Address in the new PoA. - NULL); //MIH_C_IP_MOB_MGMT_T *mobil_mngtP, (Optional) Indicates the type of Mobility Management Protocol supported by the new PoA. - - g_enb_ral_obj[mod_id].transaction_id ++; - - -} -//--------------------------------------------------------------------------------------------------------------------- -void eRAL_rx_rrc_ral_measurement_report_indication(instance_t instanceP, MessageDef *msg_pP) -//--------------------------------------------------------------------------------------------------------------------- -{ - // module_id_t mod_id = instanceP; - -} -//--------------------------------------------------------------------------------------------------------------------- -void eRAL_rx_rrc_ral_connection_release_indication(instance_t instanceP, MessageDef *msg_pP) -//--------------------------------------------------------------------------------------------------------------------- -{ - // module_id_t mod_id = instanceP; - -} - - - - - - diff --git a/openair3/RAL-LTE/LTE_RAL_ENB/SRC/lteRALenb_subscribe.c b/openair3/RAL-LTE/LTE_RAL_ENB/SRC/lteRALenb_subscribe.c deleted file mode 100755 index 5c06860f7d..0000000000 --- a/openair3/RAL-LTE/LTE_RAL_ENB/SRC/lteRALenb_subscribe.c +++ /dev/null @@ -1,113 +0,0 @@ -/***************************************************************************** - * Eurecom OpenAirInterface 3 - * Copyright(c) 2012 Eurecom - * - * Source lteRALenb_subscribe.c - * - * Version 0.1 - * - * Date 07/02/2012 - * - * Product MIH RAL LTE - * - * Subsystem - * - * Authors Michelle Wetterwald, Lionel Gauthier, Frederic Maurel - * - * Description - * - *****************************************************************************/ -#define LTE_RAL_ENB -#define LTE_RAL_ENB_SUBSCRIBE_C -#include "lteRALenb.h" - -/****************************************************************************/ -/****************** E X P O R T E D F U N C T I O N S ******************/ -/****************************************************************************/ - -/**************************************************************************** - ** ** - ** Name: eRAL_subscribe_request() ** - ** ** - ** Description: Subscribes the MIH-F to receive specified link event ** - ** indications and sends Link Event Subscribe confirmation ** - ** to the MIH-F. ** - ** ** - ** Inputs: msgP: Pointer to the received MIH message ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: None ** - ** Others: ralpriv ** - ** ** - ***************************************************************************/ -void eRAL_subscribe_request(ral_enb_instance_t instanceP, MIH_C_Message_Link_Event_Subscribe_request_t* msgP) -{ - MIH_C_STATUS_T status = MIH_C_STATUS_REJECTED; - - /* Check whether the action request is supported */ - if (g_enb_ral_obj[instanceP].mih_supported_link_command_list & MIH_C_BIT_LINK_EVENT_SUBSCRIBE) { - MIH_C_LINK_EVENT_LIST_T mih_subscribed_req_event_list; - - g_enb_ral_obj[instanceP].mih_subscribe_req_event_list |= (msgP->primitive.RequestedLinkEventList & g_enb_ral_obj[instanceP].mih_supported_link_event_list); - - mih_subscribed_req_event_list = g_enb_ral_obj[instanceP].mih_subscribe_req_event_list & msgP->primitive.RequestedLinkEventList; - - status = MIH_C_STATUS_SUCCESS; - - eRAL_send_event_subscribe_confirm(instanceP, &msgP->header.transaction_id, - &status, - &mih_subscribed_req_event_list); - } else { - eRAL_send_event_subscribe_confirm(instanceP, &msgP->header.transaction_id, - &status, - NULL); - } -} - -/**************************************************************************** - ** ** - ** Name: eRAL_unsubscribe_request() ** - ** ** - ** Description: Unsubscribes the MIH-F to receive specified link event ** - ** indications and sends Link Event Unsubscribe confirmation ** - ** to the MIH-F. ** - ** ** - ** Inputs: msgP: Pointer to the received MIH message ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: None ** - ** Others: ralpriv ** - ** ** - ***************************************************************************/ -void eRAL_unsubscribe_request(ral_enb_instance_t instanceP, MIH_C_Message_Link_Event_Unsubscribe_request_t* msgP) -{ - MIH_C_STATUS_T status = MIH_C_STATUS_REJECTED; - - /* Check whether the action request is supported */ - if (g_enb_ral_obj[instanceP].mih_supported_link_command_list & MIH_C_BIT_LINK_EVENT_UNSUBSCRIBE) { - MIH_C_LINK_EVENT_LIST_T mih_unsubscribed_req_event_list; - MIH_C_LINK_EVENT_LIST_T saved_req_event_list; - - saved_req_event_list = g_enb_ral_obj[instanceP].mih_subscribe_req_event_list; - - g_enb_ral_obj[instanceP].mih_subscribe_req_event_list &= ~(msgP->primitive.RequestedLinkEventList & g_enb_ral_obj[instanceP].mih_supported_link_event_list); - mih_unsubscribed_req_event_list = g_enb_ral_obj[instanceP].mih_subscribe_req_event_list ^ saved_req_event_list; - - status = MIH_C_STATUS_SUCCESS; - - eRAL_send_event_unsubscribe_confirm(instanceP, &msgP->header.transaction_id, - &status, - &mih_unsubscribed_req_event_list); - } else { - eRAL_send_event_unsubscribe_confirm(instanceP, &msgP->header.transaction_id, - &status, - NULL); - } -} - -/****************************************************************************/ -/********************* L O C A L F U N C T I O N S *********************/ -/****************************************************************************/ - diff --git a/openair3/RAL-LTE/LTE_RAL_ENB/SRC/lteRALenb_thresholds.c b/openair3/RAL-LTE/LTE_RAL_ENB/SRC/lteRALenb_thresholds.c deleted file mode 100755 index 60603d039d..0000000000 --- a/openair3/RAL-LTE/LTE_RAL_ENB/SRC/lteRALenb_thresholds.c +++ /dev/null @@ -1,171 +0,0 @@ -/***************************************************************************** - * Eurecom OpenAirInterface 3 - * Copyright(c) 2012 Eurecom - * - * Source eRAL_thresholds.c - * - * Version 0.1 - * - * Date 07/03/2012 - * - * Product MIH RAL LTE - * - * Subsystem - * - * Authors Michelle Wetterwald, Lionel Gauthier, Frederic Maurel - * - * Description - * - *****************************************************************************/ -#define LTE_RAL_ENB -#define LTE_RAL_ENB_THRESHOLDS_C -#include -#include "lteRALenb.h" - - -/****************************************************************************/ -/****************** E X P O R T E D F U N C T I O N S ******************/ -/****************************************************************************/ - -/**************************************************************************** - ** ** - ** Name: eRAL_configure_thresholds_request() ** - ** ** - ** Description: Forwards the Link_Configure_Thresholds.request message ** - ** to the RRC layer. ** - ** ** - ** Inputs: msgP: Pointer to the received message ** - ** Others: ralpriv ** - ** ** - ** Outputs: None ** - ** Return: None ** - ** Others: None ** - ** ** - ***************************************************************************/ -void eRAL_configure_thresholds_request(ral_enb_instance_t instanceP, MIH_C_Message_Link_Configure_Thresholds_request_t* msgP) -{ - unsigned int index; - unsigned int th_index; - rrc_ral_configure_threshold_req_t configure_threshold_req; - MessageDef *message_p; - - message_p = itti_alloc_new_message (TASK_RAL_ENB, RRC_RAL_CONFIGURE_THRESHOLD_REQ); - - memset(&configure_threshold_req, 0, sizeof(rrc_ral_configure_threshold_req_t)); - - // copy transaction id - configure_threshold_req.transaction_id = msgP->header.transaction_id; - - // configure_threshold_req.num_link_cfg_params = 0; // done - for (index = 0; index < msgP->primitive.LinkConfigureParameterList_list.length; index++) { - // copy link_param_type - configure_threshold_req.link_cfg_params[index].link_param_type.choice = msgP->primitive.LinkConfigureParameterList_list.val[index].link_param_type.choice; - - switch (configure_threshold_req.link_cfg_params[index].link_param_type.choice) { - case RAL_LINK_PARAM_TYPE_CHOICE_GEN: - memcpy(&configure_threshold_req.link_cfg_params[index].link_param_type._union.link_param_gen, - &msgP->primitive.LinkConfigureParameterList_list.val[index].link_param_type._union.link_param_gen, - sizeof(ral_link_param_gen_t)); - break; - - case RAL_LINK_PARAM_TYPE_CHOICE_QOS: - memcpy(&configure_threshold_req.link_cfg_params[index].link_param_type._union.link_param_qos, - &msgP->primitive.LinkConfigureParameterList_list.val[index].link_param_type._union.link_param_qos, - sizeof(ral_link_param_qos_t)); - break; - - case RAL_LINK_PARAM_TYPE_CHOICE_LTE: - memcpy(&configure_threshold_req.link_cfg_params[index].link_param_type._union.link_param_lte, - &msgP->primitive.LinkConfigureParameterList_list.val[index].link_param_type._union.link_param_lte, - sizeof(ral_link_param_lte_t)); - break; - - default: - assert(1==0); - } - - configure_threshold_req.num_link_cfg_params += 1; - - // copy choice - configure_threshold_req.link_cfg_params[index].union_choice = msgP->primitive.LinkConfigureParameterList_list.val[index].choice; - - // copy _union - switch (configure_threshold_req.link_cfg_params[index].union_choice) { - case RAL_LINK_CFG_PARAM_CHOICE_TIMER_NULL: - configure_threshold_req.link_cfg_params[index]._union.null_attr = 0; - break; - - case RAL_LINK_CFG_PARAM_CHOICE_TIMER: - configure_threshold_req.link_cfg_params[index]._union.timer_interval = msgP->primitive.LinkConfigureParameterList_list.val[index]._union.timer_interval; - - default: - assert(1==0); - } - - // copy th_action - configure_threshold_req.link_cfg_params[index].th_action = msgP->primitive.LinkConfigureParameterList_list.val[index].th_action; - - // configure_threshold_req.link_cfg_params[index].num_thresholds = 0; // done - for (th_index = 0; th_index < msgP->primitive.LinkConfigureParameterList_list.val[index].threshold_list.length; th_index++) { - configure_threshold_req.link_cfg_params[index].thresholds[th_index].threshold_val = msgP->primitive.LinkConfigureParameterList_list.val[index].threshold_list.val[th_index].threshold_val; - configure_threshold_req.link_cfg_params[index].thresholds[th_index].threshold_xdir = msgP->primitive.LinkConfigureParameterList_list.val[index].threshold_list.val[th_index].threshold_xdir; - configure_threshold_req.link_cfg_params[index].num_thresholds += 1; - } - } - - - memcpy (&message_p->ittiMsg, (void *) &configure_threshold_req, sizeof(rrc_ral_configure_threshold_req_t)); - itti_send_msg_to_task (TASK_RRC_ENB, instanceP, message_p); -} - -//--------------------------------------------------------------------------------------------------------------------- -void eRAL_rx_rrc_ral_configure_threshold_conf(instance_t instance, MessageDef *msg_p) -//--------------------------------------------------------------------------------------------------------------------- -{ - MIH_C_STATUS_T status; - // This parameter is not included if Status does not indicate “Success.� - MIH_C_LINK_CFG_STATUS_LIST_T link_cfg_status_list; - unsigned int i; - - status = RRC_RAL_CONFIGURE_THRESHOLD_CONF(msg_p).status; - - if (status == RAL_STATUS_SUCCESS) { - link_cfg_status_list.length = 0; - - for (i = 0; i < RRC_RAL_CONFIGURE_THRESHOLD_CONF(msg_p).num_link_cfg_params; i++) { - link_cfg_status_list.val[i].link_param_type.choice = RRC_RAL_CONFIGURE_THRESHOLD_CONF(msg_p).cfg_status[i].link_param_type.choice; - - switch (link_cfg_status_list.val[i].link_param_type.choice) { - case RAL_LINK_PARAM_TYPE_CHOICE_GEN: - memcpy(&link_cfg_status_list.val[i].link_param_type._union.link_param_gen, - &RRC_RAL_CONFIGURE_THRESHOLD_CONF(msg_p).cfg_status[i].link_param_type._union.link_param_gen, - sizeof(ral_link_param_gen_t)); - break; - - case RAL_LINK_PARAM_TYPE_CHOICE_QOS: - memcpy(&link_cfg_status_list.val[i].link_param_type._union.link_param_qos, - &RRC_RAL_CONFIGURE_THRESHOLD_CONF(msg_p).cfg_status[i].link_param_type._union.link_param_qos, - sizeof(ral_link_param_qos_t)); - break; - - case RAL_LINK_PARAM_TYPE_CHOICE_LTE: - memcpy(&link_cfg_status_list.val[i].link_param_type._union.link_param_lte, - &RRC_RAL_CONFIGURE_THRESHOLD_CONF(msg_p).cfg_status[i].link_param_type._union.link_param_lte, - sizeof(ral_link_param_lte_t)); - break; - - default: - assert(1==0); - } - - link_cfg_status_list.val[i].threshold.threshold_val = RRC_RAL_CONFIGURE_THRESHOLD_CONF(msg_p).cfg_status[i].threshold.threshold_val; - link_cfg_status_list.val[i].threshold.threshold_xdir = RRC_RAL_CONFIGURE_THRESHOLD_CONF(msg_p).cfg_status[i].threshold.threshold_xdir; - link_cfg_status_list.val[i].config_status = RRC_RAL_CONFIGURE_THRESHOLD_CONF(msg_p).cfg_status[i].config_status; - link_cfg_status_list.length += 1; - } - - eRAL_send_configure_thresholds_confirm(instance, &RRC_RAL_CONFIGURE_THRESHOLD_CONF(msg_p).transaction_id, &status, &link_cfg_status_list); - } else { - eRAL_send_configure_thresholds_confirm(instance, &RRC_RAL_CONFIGURE_THRESHOLD_CONF(msg_p).transaction_id, &status, NULL); - } -} diff --git a/openair3/RAL-LTE/LTE_RAL_UE/INCLUDE/lteRALue.h b/openair3/RAL-LTE/LTE_RAL_UE/INCLUDE/lteRALue.h deleted file mode 100755 index a8b817afcf..0000000000 --- a/openair3/RAL-LTE/LTE_RAL_UE/INCLUDE/lteRALue.h +++ /dev/null @@ -1,48 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ -#ifndef __LTE_RAL_UE_H__ -#define __LTE_RAL_UE_H__ - -#include "MIH_C.h" - -#include "openair_types.h" -#include "platform_constants.h" -#include "platform_types.h" - -#include "lteRALue_constants.h" -#include "lteRALue_variables.h" -#include "lteRALue_main.h" -#include "lteRALue_action.h" -#include "lteRALue_mih_msg.h" -#include "lteRALue_rrc_msg.h" -#include "lteRALue_parameters.h" -//#include "lteRALue_process.h" -#include "lteRALue_subscribe.h" -#include "lteRALue_thresholds.h" -#endif diff --git a/openair3/RAL-LTE/LTE_RAL_UE/INCLUDE/lteRALue_action.h b/openair3/RAL-LTE/LTE_RAL_UE/INCLUDE/lteRALue_action.h deleted file mode 100755 index 21db5afb18..0000000000 --- a/openair3/RAL-LTE/LTE_RAL_UE/INCLUDE/lteRALue_action.h +++ /dev/null @@ -1,81 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ -/*! \file lteralue_action.h - * \brief - * \author GAUTHIER Lionel, MAUREL Frederic, WETTERWALD Michelle - * \date 2012 - * \version - * \note - * \bug - * \warning - */ - -#ifndef __LTE_RAL_UE_ACTION_H__ -#define __LTE_RAL_UE_ACTION_H__ -//----------------------------------------------------------------------------- -# ifdef LTE_RAL_UE_ACTION_C -# define private_lteralue_action(x) x -# define protected_lteralue_action(x) x -# define public_lteralue_action(x) x -# else -# ifdef LTE_RAL_UE -# define private_lteralue_action(x) -# define protected_lteralue_action(x) extern x -# define public_lteralue_action(x) extern x -# else -# define private_lteralue_action(x) -# define protected_lteralue_action(x) -# define public_lteralue_action(x) extern x -# endif -# endif -//----------------------------------------------------------------------------- -#include "lteRALue.h" - -/****************************************************************************/ -/********************* G L O B A L C O N S T A N T S *******************/ -/****************************************************************************/ - -/****************************************************************************/ -/************************ G L O B A L T Y P E S ************************/ -/****************************************************************************/ -#ifdef MIH_C_MEDIEVAL_EXTENSIONS - -#endif // MIH_C_MEDIEVAL_EXTENSIONS -/****************************************************************************/ -/******************** G L O B A L V A R I A B L E S ********************/ -/****************************************************************************/ - -/****************************************************************************/ -/****************** E X P O R T E D F U N C T I O N S ******************/ -/****************************************************************************/ -protected_lteralue_action(void mRAL_action_request(ral_ue_instance_t instanceP, MIH_C_Message_Link_Action_request_t* messageP);) - - - -#endif diff --git a/openair3/RAL-LTE/LTE_RAL_UE/INCLUDE/lteRALue_constants.h b/openair3/RAL-LTE/LTE_RAL_UE/INCLUDE/lteRALue_constants.h deleted file mode 100755 index 556e127fbf..0000000000 --- a/openair3/RAL-LTE/LTE_RAL_UE/INCLUDE/lteRALue_constants.h +++ /dev/null @@ -1,60 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ -/*! \file lteRALue_constants.h - * \brief Constants for LTE-RAL-UE - * \author WETTERWALD Michelle, GAUTHIER Lionel, MAUREL Frederic - * \date 2013 - * \company EURECOM - * \email: michelle.wetterwald@eurecom.fr, lionel.gauthier@eurecom.fr, frederic.maurel@eurecom.fr - */ -/*******************************************************************************/ -#ifndef __LTERALUE_CONSTANTS_H__ -#define __LTERALUE_CONSTANTS_H__ -//----------------------------------------------------------------------------- -#define UE_DEFAULT_LOCAL_PORT_RAL "1234" -#define UE_DEFAULT_REMOTE_PORT_MIHF "1025" -#define UE_DEFAULT_IP_ADDRESS_MIHF "127.0.0.1" -#define UE_DEFAULT_IP_ADDRESS_RAL "127.0.0.1" -#define UE_DEFAULT_LINK_ID_RAL "ue_lte_link" -#define UE_DEFAULT_LINK_ADDRESS_RAL "060080149150" -#define UE_DEFAULT_MIHF_ID "mihf2_ue" -//#define UE_DEFAULT_3GPP_ADDRESS "0335060080149150" -#define UE_DEFAULT_3GPP_ADDRESS "0000000000000000" - -//----------------------------------------------------------------------------- -// Constants for scenario -#define PREDEFINED_MIH_PLMN_ID 503 -#define PREDEFINED_MIH_NETWORK_ID "eurecom" -#define PREDEFINED_MIH_NETAUX_ID "netaux" - -#define PREDEFINED_CHANNEL_ID 2 -#define PREDEFINED_CLASSES_SERVICE_SUPPORTED 2 -#define PREDEFINED_QUEUES_SUPPORTED 2 - -#endif diff --git a/openair3/RAL-LTE/LTE_RAL_UE/INCLUDE/lteRALue_main.h b/openair3/RAL-LTE/LTE_RAL_UE/INCLUDE/lteRALue_main.h deleted file mode 100755 index 5e3a0d90a1..0000000000 --- a/openair3/RAL-LTE/LTE_RAL_UE/INCLUDE/lteRALue_main.h +++ /dev/null @@ -1,187 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ -/*! \file lteRALue_main.h - * \brief This file defines the prototypes of the functions for lteRALue_main.c - * \author WETTERWALD Michelle, GAUTHIER Lionel, MAUREL Frederic - * \date 2013 - * \company EURECOM - * \email: michelle.wetterwald@eurecom.fr, lionel.gauthier@eurecom.fr, frederic.maurel@eurecom.fr - */ -/*******************************************************************************/ -#ifndef __LTERALUE_MAIN_H__ -# define __LTERALUE_MAIN_H__ -//----------------------------------------------------------------------------- -# ifdef LTERALUE_MAIN_C -# define private_mrallte_main(x) x -# define protected_mrallte_main(x) x -# define public_mrallte_main(x) x -# else -# ifdef LTE_RAL_UE -# define private_mrallte_main(x) -# define protected_mrallte_main(x) extern x -# define public_mrallte_main(x) extern x -# else -# define private_mrallte_main(x) -# define protected_mrallte_main(x) -# define public_mrallte_main(x) extern x -# endif -# endif -//----------------------------------------------------------------------------- -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -//----------------------------------------------------------------------------- -#include "lteRALue.h" -#include "commonDef.h" -#include "hashtable.h" -//#include "collection/hashtable/hashtable.h" - -public_mrallte_main(char* g_conf_ue_ral_listening_port;) -public_mrallte_main(char* g_conf_ue_ral_ip_address;) -public_mrallte_main(char* g_conf_ue_ral_link_id;) -public_mrallte_main(char* g_conf_ue_ral_link_address;) -public_mrallte_main(char* g_conf_ue_mihf_remote_port;) -public_mrallte_main(char* g_conf_ue_mihf_ip_address;) -public_mrallte_main(char* g_conf_ue_mihf_id;) - - -typedef int ral_ue_instance_t; - -typedef struct lte_ral_ue_object_s { - //------------------------ - // CONFIG PARAMETERS - //------------------------ - char* ral_listening_port; - char* ral_ip_address; - char* ral_link_address; - char* mihf_remote_port; - char* mihf_ip_address; - char* link_id; - char* mihf_id; - MIH_C_LINK_MIHCAP_FLAG_T link_mihcap_flag; // hardcoded parameters - MIH_C_NET_CAPS_T net_caps;// hardcoded parameters - - - // only to call ralu_verifyPendingConnection - uint8_t pending_req_flag; - - - // network parameters - uint16_t cell_id; - plmn_t plmn_id; - //uint16_t nas_state; - int state; - //uint32_t curr_signal_level; - uint32_t ipv6_l2id[2]; - //measures - uint8_t req_num_bs; - uint16_t req_cell_id[MAX_NUMBER_BS]; - uint32_t req_prov_id[MAX_NUMBER_BS]; - uint16_t req_order_index[MAX_NUMBER_BS]; - int num_measures; - uint16_t meas_cell_id[MAX_NUMBER_BS]; - uint32_t last_meas_level[MAX_NUMBER_BS]; - uint32_t integrated_meas_level[MAX_NUMBER_BS]; - uint32_t prev_integrated_meas_level[MAX_NUMBER_BS]; - uint32_t provider_id[MAX_NUMBER_BS]; - //Radio Bearers - uint16_t num_rb; - int num_class; - uint16_t rbId[RAL_MAX_RB]; - uint16_t QoSclass[RAL_MAX_RB]; - uint16_t dscp[RAL_MAX_RB]; - // statistics - //uint32_t rx_packets; - //uint32_t tx_packets; - //uint32_t rx_bytes; - //uint32_t tx_bytes; - //uint32_t rx_errors; - //uint32_t tx_errors; - //uint32_t rx_dropped; - //uint32_t tx_dropped; - //char buffer[800]; // For ioctl with NAS driver - - // MIH-INTERFACE data - // MIH-INTERFACE data - int mih_sock_desc; - - // Initialised, then read-only, supported actions - MIH_C_LINK_AC_TYPE_T mih_supported_action_list; - // action currently processed - MIH_C_LINK_AC_TYPE_T pending_req_action; - // actions requested by MIH-H - MIH_C_LINK_AC_TYPE_T req_action_list; - //MIH_C_STATUS_T pending_req_status; - MIH_C_LINK_AC_RESULT_T pending_req_ac_result; - //MIH_C_TRANSACTION_ID_T pending_req_transaction_id; - // set unset bits by MIH_C_Message_Link_Event_Subscribe_request MIH_C_Message_Link_Event_Unsubscribe_request - MIH_C_LINK_EVENT_LIST_T mih_subscribe_req_event_list; - // Initialised, then read-only - MIH_C_LINK_EVENT_LIST_T mih_supported_link_event_list; - // Initialised, then read-only - MIH_C_LINK_CMD_LIST_T mih_supported_link_command_list; - LIST(MIH_C_LINK_CFG_PARAM, mih_link_cfg_param_thresholds); - // to tell what are the configured thresholds in mih_link_cfg_param_thresholds_list - MIH_C_BOOLEAN_T active_mih_link_cfg_param_threshold[MIH_C_LINK_CFG_PARAM_LIST_LENGTH]; - MIH_C_BOOLEAN_T link_to_be_detected; - - - MIH_C_TRANSACTION_ID_T transaction_id; - -} lte_ral_ue_object_t; - - -/* RAL LTE internal data */ -protected_mrallte_main(lte_ral_ue_object_t g_ue_ral_obj[MAX_MODULES];) -private_mrallte_main(hash_table_t *g_ue_ral_fd2instance;); - -public_mrallte_main( void mRAL_init_default_values(void);) -public_mrallte_main( int mRAL_initialize(void);) -private_mrallte_main(void mRAL_process_file_descriptors(struct epoll_event *events, int nb_events);) -public_mrallte_main( void* mRAL_task(void *args_p);) - -#endif - - - - - - diff --git a/openair3/RAL-LTE/LTE_RAL_UE/INCLUDE/lteRALue_mih_execute.h b/openair3/RAL-LTE/LTE_RAL_UE/INCLUDE/lteRALue_mih_execute.h deleted file mode 100755 index 4c4e3f78e7..0000000000 --- a/openair3/RAL-LTE/LTE_RAL_UE/INCLUDE/lteRALue_mih_execute.h +++ /dev/null @@ -1,80 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ -/*! \file lteRALue_mih_execute.h - * \brief This file defines the prototypes of the functions for lteRALue_mih_execute.c - * \author WETTERWALD Michelle, GAUTHIER Lionel, MAUREL Frederic - * \date 2013 - * \company EURECOM - * \email: michelle.wetterwald@eurecom.fr, lionel.gauthier@eurecom.fr, frederic.maurel@eurecom.fr - */ -/*******************************************************************************/ -#ifndef __MRALLTE_MIH_EXECUTE_H__ -# define __MRALLTE_MIH_EXECUTE_H__ -//----------------------------------------------------------------------------- -# ifdef MRALLTE_MIH_EXECUTE_C -# define private_mRAL_mih_execute(x) x -# define protected_mRAL_mih_execute(x) x -# define public_mRAL_mih_execute(x) x -# else -# ifdef LTE_RAL_UE -# define private_mRAL_mih_execute(x) -# define protected_mRAL_mih_execute(x) extern x -# define public_mRAL_mih_execute(x) extern x -# else -# define private_mRAL_mih_execute(x) -# define protected_mRAL_mih_execute(x) -# define public_mRAL_mih_execute(x) extern x -# endif -# endif -//----------------------------------------------------------------------------- -#include -#include -#include -#include -#include -#include -#include -//----------------------------------------------------------------------------- -#include "lteRALue.h" - -//----------------------------------------------------------------------------- -protected_mRAL_mih_execute(MIH_C_LINK_ACTION_T g_link_action;) -//----------------------------------------------------------------------------- -protected_mRAL_mih_execute(void mRAL_action_request(MIH_C_Message_Link_Action_request_t* messageP);) -//----------------------------------------------------------------------------- -protected_mRAL_mih_execute(void mRAL_get_parameters_request(MIH_C_Message_Link_Get_Parameters_request_t* messageP);) -//----------------------------------------------------------------------------- -protected_mRAL_mih_execute(void mRAL_subscribe_request (MIH_C_Message_Link_Event_Subscribe_request_t* messageP);) -protected_mRAL_mih_execute(void mRAL_unsubscribe_request(MIH_C_Message_Link_Event_Unsubscribe_request_t* messageP);) -//----------------------------------------------------------------------------- -protected_mRAL_mih_execute(LIST(MIH_C_LINK_CFG_PARAM, g_link_cfg_param_thresholds);) -//----------------------------------------------------------------------------- -protected_mRAL_mih_execute(void mRAL_configure_thresholds_request(MIH_C_Message_Link_Configure_Thresholds_request_t* messageP);) -public_mRAL_mih_execute(void mRAL_check_thresholds_signal_strength(MIH_C_THRESHOLD_VAL_T new_valP, MIH_C_THRESHOLD_VAL_T old_valP);) -#endif diff --git a/openair3/RAL-LTE/LTE_RAL_UE/INCLUDE/lteRALue_mih_msg.h b/openair3/RAL-LTE/LTE_RAL_UE/INCLUDE/lteRALue_mih_msg.h deleted file mode 100755 index efd095823c..0000000000 --- a/openair3/RAL-LTE/LTE_RAL_UE/INCLUDE/lteRALue_mih_msg.h +++ /dev/null @@ -1,153 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ -/*! \file lteRALue_mih_msg.h - * \brief This file defines the prototypes of the functions for lteRALue_mih_msg.c - * \author WETTERWALD Michelle, GAUTHIER Lionel, MAUREL Frederic - * \date 2013 - * \company EURECOM - * \email: michelle.wetterwald@eurecom.fr, lionel.gauthier@eurecom.fr, frederic.maurel@eurecom.fr - */ -/*******************************************************************************/ -#ifndef __LTERALUE_MIH_MSG_H__ -# define __LTERALUE_MIH_MSG_H__ -//----------------------------------------------------------------------------- -# ifdef LTERALUE_MIH_MSG_C -# define private_mRAL_mih_msg(x) x -# define protected_mRAL_mih_msg(x) x -# define public_mRAL_mih_msg(x) x -# else -# ifdef LTE_RAL_UE -# define private_mRAL_mih_msg(x) -# define protected_mRAL_mih_msg(x) extern x -# define public_mRAL_mih_msg(x) extern x -# else -# define private_mRAL_mih_msg(x) -# define protected_mRAL_mih_msg(x) -# define public_mRAL_mih_msg(x) extern x -# endif -# endif -//----------------------------------------------------------------------------- -#include "lteRALue.h" - -#define MSG_CODEC_RECV_BUFFER_SIZE 16400 -#define MSG_CODEC_SEND_BUFFER_SIZE 16400 -//----------------------------------------------------------------------------- -//----------------------------------------------------------------------------- -public_mRAL_mih_msg( int mRAL_send_to_mih(ral_ue_instance_t instanceP, u_int8_t *bufferP, size_t lenP);) - -protected_mRAL_mih_msg( int mRAL_mihf_connect (ral_ue_instance_t instanceP);) - -protected_mRAL_mih_msg( void MIH_C_3GPP_ADDR_load_3gpp_str_address(ral_ue_instance_t instanceP, \ - MIH_C_3GPP_ADDR_T* _3gpp_addrP, \ - u_int8_t* strP);) - -protected_mRAL_mih_msg( void mRAL_send_link_register_indication (\ - ral_ue_instance_t instanceP,\ - MIH_C_TRANSACTION_ID_T *transaction_idP);) - -protected_mRAL_mih_msg( void mRAL_send_link_detected_indication (\ - ral_ue_instance_t instanceP,\ - MIH_C_TRANSACTION_ID_T *transaction_idP,\ - MIH_C_LINK_DET_INFO_T *link_detected_infoP);) - -protected_mRAL_mih_msg( void mRAL_send_link_up_indication(\ - ral_ue_instance_t instanceP,\ - MIH_C_TRANSACTION_ID_T *transaction_idP,\ - MIH_C_LINK_TUPLE_ID_T *link_identifierP,\ - MIH_C_LINK_ADDR_T *old_access_routerP,\ - MIH_C_LINK_ADDR_T *new_access_routerP,\ - MIH_C_IP_RENEWAL_FLAG_T *ip_renewal_flagP,\ - MIH_C_IP_MOB_MGMT_T *mobility_management_supportP);) - -protected_mRAL_mih_msg( void mRAL_send_link_parameters_report_indication(\ - ral_ue_instance_t instanceP,\ - MIH_C_TRANSACTION_ID_T *transaction_idP,\ - MIH_C_LINK_TUPLE_ID_T *link_identifierP,\ - MIH_C_LINK_PARAM_RPT_LIST_T *link_parameters_report_listP);) - -protected_mRAL_mih_msg( void mRAL_send_link_going_down_indication(\ - ral_ue_instance_t instanceP,\ - MIH_C_TRANSACTION_ID_T *transaction_idP,\ - MIH_C_LINK_TUPLE_ID_T *link_identifierP,\ - MIH_C_UNSIGNED_INT2_T *time_intervalP,\ - MIH_C_LINK_GD_REASON_T *link_going_down_reasonP);) - -protected_mRAL_mih_msg( void mRAL_send_link_down_indication(\ - ral_ue_instance_t instanceP,\ - MIH_C_TRANSACTION_ID_T *transaction_idP,\ - MIH_C_LINK_TUPLE_ID_T *link_identifierP,\ - MIH_C_LINK_ADDR_T *old_access_routerP,\ - MIH_C_LINK_DN_REASON_T *reason_codeP);) - -protected_mRAL_mih_msg( void mRAL_send_link_action_confirm(\ - ral_ue_instance_t instanceP,\ - MIH_C_TRANSACTION_ID_T *transaction_idP,\ - MIH_C_STATUS_T *statusP,\ - MIH_C_LINK_SCAN_RSP_LIST_T *scan_response_setP,\ - MIH_C_LINK_AC_RESULT_T *link_action_resultP);) - -protected_mRAL_mih_msg( void mRAL_send_capability_discover_confirm(\ - ral_ue_instance_t instanceP,\ - MIH_C_TRANSACTION_ID_T *transaction_idP,\ - MIH_C_STATUS_T *statusP,\ - MIH_C_LINK_EVENT_LIST_T *supported_link_event_listP,\ - MIH_C_LINK_CMD_LIST_T *supported_link_command_listP);) - -protected_mRAL_mih_msg( void mRAL_send_event_subscribe_confirm (\ - ral_ue_instance_t instanceP,\ - MIH_C_TRANSACTION_ID_T *transaction_idP,\ - MIH_C_STATUS_T *statusP,\ - MIH_C_LINK_EVENT_LIST_T *response_link_event_listP);) - -protected_mRAL_mih_msg( void mRAL_send_event_unsubscribe_confirm (\ - ral_ue_instance_t instanceP,\ - MIH_C_TRANSACTION_ID_T *transaction_idP,\ - MIH_C_STATUS_T *statusP,\ - MIH_C_LINK_EVENT_LIST_T *response_link_event_listP);) - -protected_mRAL_mih_msg( void mRAL_send_configure_thresholds_confirm(\ - ral_ue_instance_t instanceP,\ - MIH_C_TRANSACTION_ID_T *transaction_idP,\ - MIH_C_STATUS_T *statusP,\ - MIH_C_LINK_CFG_STATUS_LIST_T *link_configure_status_listP);) - -protected_mRAL_mih_msg( void mRAL_send_get_parameters_confirm (\ - ral_ue_instance_t instanceP,\ - MIH_C_TRANSACTION_ID_T *transaction_idP,\ - MIH_C_STATUS_T *statusP,\ - MIH_C_LINK_PARAM_LIST_T *link_parameters_status_listP,\ - MIH_C_LINK_STATES_RSP_LIST_T *link_states_response_listP,\ - MIH_C_LINK_DESC_RSP_LIST_T *link_descriptors_response_listP);) - -private_mRAL_mih_msg( int mRAL_mih_link_msg_decode (\ - ral_ue_instance_t instanceP,\ - Bit_Buffer_t* bbP, MIH_C_Message_Wrapper_t *message_wrapperP);) - -protected_mRAL_mih_msg( int mRAL_mih_link_process_message (ral_ue_instance_t instanceP);) -#endif diff --git a/openair3/RAL-LTE/LTE_RAL_UE/INCLUDE/lteRALue_parameters.h b/openair3/RAL-LTE/LTE_RAL_UE/INCLUDE/lteRALue_parameters.h deleted file mode 100755 index e6e02a1b5f..0000000000 --- a/openair3/RAL-LTE/LTE_RAL_UE/INCLUDE/lteRALue_parameters.h +++ /dev/null @@ -1,78 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ -/*! \file lteRALenb_parameters.h - * \brief - * \author GAUTHIER Lionel, MAUREL Frederic, WETTERWALD Michelle - * \date 2012 - * \version - * \note - * \bug - * \warning - */ - -#ifndef __LTE_RAL_UE_PARAMETERS_H__ -#define __LTE_RAL_UE_PARAMETERS_H__ -//----------------------------------------------------------------------------- -# ifdef LTE_RAL_UE_PARAMETERS_C -# define private_lteralue_parameters(x) x -# define protected_lteralue_parameters(x) x -# define public_lteralue_parameters(x) x -# else -# ifdef LTE_RAL_UE -# define private_lteralue_parameters(x) -# define protected_lteralue_parameters(x) extern x -# define public_lteralue_parameters(x) extern x -# else -# define private_lteralue_parameters(x) -# define protected_lteralue_parameters(x) -# define public_lteralue_parameters(x) extern x -# endif -# endif -//----------------------------------------------------------------------------- -#include "lteRALue.h" - -/****************************************************************************/ -/********************* G L O B A L C O N S T A N T S *******************/ -/****************************************************************************/ - -/****************************************************************************/ -/************************ G L O B A L T Y P E S ************************/ -/****************************************************************************/ - -/****************************************************************************/ -/******************** G L O B A L V A R I A B L E S ********************/ -/****************************************************************************/ - -/****************************************************************************/ -/****************** E X P O R T E D F U N C T I O N S ******************/ -/****************************************************************************/ -protected_lteralue_parameters(void mRAL_get_parameters_request(ral_ue_instance_t instanceP, MIH_C_Message_Link_Get_Parameters_request_t* messageP);) - - -#endif diff --git a/openair3/RAL-LTE/LTE_RAL_UE/INCLUDE/lteRALue_proto.h b/openair3/RAL-LTE/LTE_RAL_UE/INCLUDE/lteRALue_proto.h deleted file mode 100755 index d793dcfa52..0000000000 --- a/openair3/RAL-LTE/LTE_RAL_UE/INCLUDE/lteRALue_proto.h +++ /dev/null @@ -1,54 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ -/*! \file lteRALue_proto.h - * \brief This file defines the prototypes of the common functions - * \author WETTERWALD Michelle, GAUTHIER Lionel, MAUREL Frederic - * \date 2013 - * \company EURECOM - * \email: michelle.wetterwald@eurecom.fr, lionel.gauthier@eurecom.fr, frederic.maurel@eurecom.fr - */ -/*******************************************************************************/ -#ifndef __RAL_UE_LTE_PROTO_H__ -#define __RAL_UE_LTE_PROTO_H__ - -//lteRALue_ioctl.c -int RAL_ue_process_NAS_message(int ioctl_obj, int ioctl_cmd, int ioctl_cellid); - -//mRALuD_process.c -void IAL_ue_NAS_measures_init(void); -void IAL_ue_NAS_measures_update(int i); -void IAL_ue_integrate_measure(int measure, int i); -void rallte_ue_NAS_measures_polling(void); -int rallte_ue_NAS_corresponding_cell(int req_index); -void rallte_ue_verifyPendingConnection(void); - -void* ral_ue_task(void *args_p); - -#endif - diff --git a/openair3/RAL-LTE/LTE_RAL_UE/INCLUDE/lteRALue_rrc_msg.h b/openair3/RAL-LTE/LTE_RAL_UE/INCLUDE/lteRALue_rrc_msg.h deleted file mode 100755 index cf0baf9614..0000000000 --- a/openair3/RAL-LTE/LTE_RAL_UE/INCLUDE/lteRALue_rrc_msg.h +++ /dev/null @@ -1,69 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ -/*! \file lteRALenb_rrc_msg.h - * \brief - * \author GAUTHIER Lionel - * \date 2013 - * \version - * \note - * \bug - * \warning - */ - -#ifndef __LTE_RAL_UE_RRC_MSG_H__ -#define __LTE_RAL_UE_RRC_MSG_H__ -//----------------------------------------------------------------------------- -# ifdef LTE_RAL_UE_RRC_MSG_C -# define private_lteralue_rrc_msg(x) x -# define protected_lteralue_rrc_msg(x) x -# define public_lteralue_rrc_msg(x) x -# else -# ifdef LTE_RAL_UE -# define private_lteralue_rrc_msg(x) -# define protected_lteralue_rrc_msg(x) extern x -# define public_lteralue_rrc_msg(x) extern x -# else -# define private_lteralue_rrc_msg(x) -# define protected_lteralue_rrc_msg(x) -# define public_lteralue_rrc_msg(x) extern x -# endif -# endif -//----------------------------------------------------------------------------- -#include "lteRALue.h" -#include "intertask_interface.h" - -protected_lteralue_rrc_msg(void mRAL_rx_rrc_ral_scan_confirm (instance_t instance, MessageDef *msg_p);) -protected_lteralue_rrc_msg(void mRAL_rx_rrc_ral_system_information_indication (instance_t instance, MessageDef *msg_p);) -protected_lteralue_rrc_msg(void mRAL_rx_rrc_ral_connection_establishment_indication (instance_t instance, MessageDef *msg_p);) -protected_lteralue_rrc_msg(void mRAL_rx_rrc_ral_connection_reestablishment_indication (instance_t instance, MessageDef *msg_p);) -protected_lteralue_rrc_msg(void mRAL_rx_rrc_ral_connection_reconfiguration_indication (instance_t instance, MessageDef *msg_p);) -protected_lteralue_rrc_msg(void mRAL_rx_rrc_ral_connection_release_indication (instance_t instance, MessageDef *msg_p);) - - -#endif diff --git a/openair3/RAL-LTE/LTE_RAL_UE/INCLUDE/lteRALue_subscribe.h b/openair3/RAL-LTE/LTE_RAL_UE/INCLUDE/lteRALue_subscribe.h deleted file mode 100755 index 7fd8697eb7..0000000000 --- a/openair3/RAL-LTE/LTE_RAL_UE/INCLUDE/lteRALue_subscribe.h +++ /dev/null @@ -1,79 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ -/*! \file lteRALenb_subscribe.h - * \brief - * \author GAUTHIER Lionel, MAUREL Frederic, WETTERWALD Michelle - * \date 2012 - * \version - * \note - * \bug - * \warning - */ - -#ifndef __LTE_RAL_UE_SUBSCRIBE_H__ -#define __LTE_RAL_UE_SUBSCRIBE_H__ -//----------------------------------------------------------------------------- -# ifdef LTE_RAL_UE_PROCESS_C -# define private_lteralue_subscribe(x) x -# define protected_lteralue_subscribe(x) x -# define public_lteralue_subscribe(x) x -# else -# ifdef LTE_RAL_UE -# define private_lteralue_subscribe(x) -# define protected_lteralue_subscribe(x) extern x -# define public_lteralue_subscribe(x) extern x -# else -# define private_lteralue_subscribe(x) -# define protected_lteralue_subscribe(x) -# define public_lteralue_subscribe(x) extern x -# endif -# endif -//----------------------------------------------------------------------------- -#include "lteRALue.h" - -/****************************************************************************/ -/********************* G L O B A L C O N S T A N T S *******************/ -/****************************************************************************/ - -/****************************************************************************/ -/************************ G L O B A L T Y P E S ************************/ -/****************************************************************************/ - -/****************************************************************************/ -/******************** G L O B A L V A R I A B L E S ********************/ -/****************************************************************************/ - -/****************************************************************************/ -/****************** E X P O R T E D F U N C T I O N S ******************/ -/****************************************************************************/ -protected_lteralue_subscribe(void mRAL_subscribe_request (ral_ue_instance_t instanceP, MIH_C_Message_Link_Event_Subscribe_request_t* msgP);) -protected_lteralue_subscribe(void mRAL_unsubscribe_request(ral_ue_instance_t instanceP, MIH_C_Message_Link_Event_Unsubscribe_request_t* msgP);) - - -#endif diff --git a/openair3/RAL-LTE/LTE_RAL_UE/INCLUDE/lteRALue_thresholds.h b/openair3/RAL-LTE/LTE_RAL_UE/INCLUDE/lteRALue_thresholds.h deleted file mode 100755 index 605558d808..0000000000 --- a/openair3/RAL-LTE/LTE_RAL_UE/INCLUDE/lteRALue_thresholds.h +++ /dev/null @@ -1,83 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ -/*! \file lteRALenb_thresholds.h - * \brief - * \author GAUTHIER Lionel, MAUREL Frederic, WETTERWALD Michelle - * \date 2012 - * \version - * \note - * \bug - * \warning - */ - -#ifndef __LTE_RAL_UE_THRESHOLDS_H__ -#define __LTE_RAL_UE_THRESHOLDS_H__ -//----------------------------------------------------------------------------- -# ifdef LTE_RAL_UE_PROCESS_C -# define private_lteralue_thresholds(x) x -# define protected_lteralue_thresholds(x) x -# define public_lteralue_thresholds(x) x -# else -# ifdef LTE_RAL_UE -# define private_lteralue_thresholds(x) -# define protected_lteralue_thresholds(x) extern x -# define public_lteralue_thresholds(x) extern x -# else -# define private_lteralue_thresholds(x) -# define protected_lteralue_thresholds(x) -# define public_lteralue_thresholds(x) extern x -# endif -# endif -//----------------------------------------------------------------------------- -#include "lteRALue.h" -#include "intertask_interface.h" - -/****************************************************************************/ -/********************* G L O B A L C O N S T A N T S *******************/ -/****************************************************************************/ - -/****************************************************************************/ -/************************ G L O B A L T Y P E S ************************/ -/****************************************************************************/ - -/****************************************************************************/ -/******************** G L O B A L V A R I A B L E S ********************/ -/****************************************************************************/ - -//LIST(MIH_C_LINK_CFG_PARAM, g_link_cfg_param_thresholds); - -/****************************************************************************/ -/****************** E X P O R T E D F U N C T I O N S ******************/ -/****************************************************************************/ - -protected_lteralue_thresholds(void mRAL_configure_thresholds_request (ral_ue_instance_t instanceP, MIH_C_Message_Link_Configure_Thresholds_request_t* messageP);) -protected_lteralue_thresholds(void mRAL_rx_rrc_ral_configure_threshold_conf (ral_ue_instance_t instance, MessageDef *msg_p);) -protected_lteralue_thresholds(void mRAL_rx_rrc_ral_measurement_report_indication (ral_ue_instance_t instance, MessageDef *msg_p);) - -#endif diff --git a/openair3/RAL-LTE/LTE_RAL_UE/INCLUDE/lteRALue_variables.h b/openair3/RAL-LTE/LTE_RAL_UE/INCLUDE/lteRALue_variables.h deleted file mode 100755 index f22dab76c8..0000000000 --- a/openair3/RAL-LTE/LTE_RAL_UE/INCLUDE/lteRALue_variables.h +++ /dev/null @@ -1,83 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ -/*! \file lteRALue_mih_msg.h - * \brief This file defines the data structures and LTE-RAL-UE protocol parameters - * \author WETTERWALD Michelle, GAUTHIER Lionel, MAUREL Frederic - * \date 2013 - * \company EURECOM - * \email: michelle.wetterwald@eurecom.fr, lionel.gauthier@eurecom.fr, frederic.maurel@eurecom.fr - */ -/*******************************************************************************/ -#ifndef __LTERALUE_VARIABLES_H__ -#define __LTERALUE_VARIABLES_H__ -//------------------------------------------------------------------- - -#include "lteRALue.h" - -/*************************************************************************** - CONSTANTS - ***************************************************************************/ -//#define RAL_DUMMY -#define RAL_REALTIME -//#define MRALU_SIMU_LINKDOWN -//#define DEBUG_MRALU_MEASURES -//#define UPDATE - - -#define RALU_MT_EVENT_MAP MIH_EVENT_Link_AdvertisementIndication + MIH_EVENT_Link_Parameters_ReportIndication + MIH_EVENT_Link_UpIndication + MIH_EVENT_Link_DownIndication - -#define MIHLink_MAX_LENGTH 500 -#define MAX_NUMBER_BS 3 /* Max number of base stations */ -#define CONF_UNKNOWN_CELL_ID 0 -#define UMTS_INTF_NAME "graal0" - -//Attachment status -#define UNKNOWN 9 -#define CONNECTED 1 -#define DISCONNECTED 0 -//max number RB supported (27 in Spec) -#define RAL_MAX_RB 5 - -// constant for integrating measures according to the formula -// y[n] = (1-LAMBDA)*u[n-1] + LAMBDA*u[n] -#define LAMBDA 8 -#define MEAS_MAX_RSSI 110 - -/*************************************************************************** - VARIABLES - ***************************************************************************/ -//struct ral_lte_priv { - -//}; - -//----------------------------------------------------------------------------- -//extern struct ral_lte_priv *ralpriv; - -#endif - diff --git a/openair3/RAL-LTE/LTE_RAL_UE/INCLUDE/rrc_d_types.h b/openair3/RAL-LTE/LTE_RAL_UE/INCLUDE/rrc_d_types.h deleted file mode 100755 index 20f896a04a..0000000000 --- a/openair3/RAL-LTE/LTE_RAL_UE/INCLUDE/rrc_d_types.h +++ /dev/null @@ -1,45 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ -/*! \file rrc_d_types.h - * \brief This file defines shortcuts to main unsigned types (part of LTE_RAL_UE - * \author WETTERWALD Michelle, GAUTHIER Lionel, MAUREL Frederic - * \date 2013 - * \company EURECOM - * \email: michelle.wetterwald@eurecom.fr, lionel.gauthier@eurecom.fr, frederic.maurel@eurecom.fr - */ -/*******************************************************************************/ -#ifndef __RRC_DTYPES_H__ -#define __RRC_DTYPES_H__ - -typedef unsigned char uint8_t; -typedef unsigned short uint16_t; -typedef unsigned int uint32_t; - - -#endif diff --git a/openair3/RAL-LTE/LTE_RAL_UE/MIH-USER/dist/link_sap.conf b/openair3/RAL-LTE/LTE_RAL_UE/MIH-USER/dist/link_sap.conf deleted file mode 100755 index 4ca476fbbe..0000000000 --- a/openair3/RAL-LTE/LTE_RAL_UE/MIH-USER/dist/link_sap.conf +++ /dev/null @@ -1,47 +0,0 @@ -#=============================================================================== -# Brief : Link SAP configuration file -# Authors : Carlos Guimaraes -# Bruno Santos -#------------------------------------------------------------------------------- -# ODTONE - Open Dot Twenty One -# -# Copyright (C) 2009-2012 Universidade Aveiro -# Copyright (C) 2009-2012 Instituto de Telecomunicações - Pólo Aveiro -# -# This software is distributed under a license. The full license -# agreement can be found in the file LICENSE in this distribution. -# This software may not be copied, modified, sold or distributed -# other than expressed in the named license agreement. -# -# This software is distributed without any warranty. -#=============================================================================== - -[link] -## -## Link SAP identifier -## -id=link1 - -## -## Link SAP listening -## -port = 1235 - -## -## Link SAP interface technology -## -tec = LTE - -## -## Link SAP interface address -## -link_addr = 00:11:22:33:44:55 - -## -## Comma separated list of the Link SAP supported events -## -event_list = link_detected, link_up, link_down, link_parameters_report, link_going_down, link_handover_imminent, link_handover_complete - -[mihf] -ip=127.0.0.1 -local_port=1025 diff --git a/openair3/RAL-LTE/LTE_RAL_UE/MIH-USER/dist/lte_user.conf b/openair3/RAL-LTE/LTE_RAL_UE/MIH-USER/dist/lte_user.conf deleted file mode 100755 index 4e14bcf4a9..0000000000 --- a/openair3/RAL-LTE/LTE_RAL_UE/MIH-USER/dist/lte_user.conf +++ /dev/null @@ -1,40 +0,0 @@ -#=============================================================================== -# Brief : MIH-User configuration file -# Authors : Carlos Guimaraes -# Bruno Santos -#------------------------------------------------------------------------------- -# ODTONE - Open Dot Twenty One -# -# Copyright (C) 2009-2012 Universidade Aveiro -# Copyright (C) 2009-2012 Instituto de Telecomunicações - Pólo Aveiro -# -# This software is distributed under a license. The full license -# agreement can be found in the file LICENSE in this distribution. -# This software may not be copied, modified, sold or distributed -# other than expressed in the named license agreement. -# -# This software is distributed without any warranty. -#=============================================================================== - -## -## User id -## -[user] -id = user - -## -## Commands supported by the MIH-User -## -commands = mih_link_get_parameters, mih_link_configure_thresholds, mih_link_actions, mih_net_ho_candidate_query, mih_net_ho_commit, mih_n2n_ho_query_resources, mih_n2n_ho_commit, mih_n2n_ho_complete, mih_mn_ho_candidate_query, mih_mn_ho_commit, mih_mn_ho_complete - -## -## Port used for communication with MIHF -## -[conf] -port = 1234 - -## -## MIHF configuration. For the default demonstration leave as is. -## -[mihf] -local_port = 1025 diff --git a/openair3/RAL-LTE/LTE_RAL_UE/MIH-USER/dist/odtone.conf b/openair3/RAL-LTE/LTE_RAL_UE/MIH-USER/dist/odtone.conf deleted file mode 100755 index fd3ef9d859..0000000000 --- a/openair3/RAL-LTE/LTE_RAL_UE/MIH-USER/dist/odtone.conf +++ /dev/null @@ -1,71 +0,0 @@ -#=============================================================================== -# Brief : MIHF configuration file -# Authors : Carlos Guimaraes -#------------------------------------------------------------------------------- -# ODTONE - Open Dot Twenty One -# -# Copyright (C) 2009-2012 Universidade Aveiro -# Copyright (C) 2009-2012 Instituto de Telecomunicações - Pólo Aveiro -# -# This software is distributed under a license. The full license -# agreement can be found in the file LICENSE in this distribution. -# This software may not be copied, modified, sold or distributed -# other than expressed in the named license agreement. -# -# This software is distributed without any warranty. -#=============================================================================== - -[mihf] -## -## This mihf's id -## -## Usage: id = -## -id = mihf1 - -## -## Port on localhost that MIH Users and MIH Link SAPs connect to. -## -## Usage: local_port = -## -local_port = 1025 - -## -## Port to which remote peer MIHF connect to -## -## Usage: remote_port = -## -#remote_port = 4551 - -## -## Comma seperated list of remote MIHF's -## -## If you want to test remote MIHF communication add an entry here -## with the IP address of the remote MIHF. -## -## Usage: peers = , ... -## -#peers = mihf2 0.0.0.0 4552 - -## -## Comma separated list of local MIH User SAPs id's and ports -## -## Usage: users = [ ], ... -## Note: If no command is specified, the MIHF will assume that the MIH-User -## supports all MIH_***_HO_*** commands and the MIH_Get_Information -## Note: If no query is specified, the MIHF will assume that the MIH-User does -## not support the MIH_Get_Information command. -## -users = user 1234 - -## -## Comma separated list of local MIH Link SAPs id's and ports. -## -## Usage: links = [ ], ... -## -#links = wifi 1235 802_11 00:11:22:33:44:55, lte 1234 LTE 00:11:22 5 - -## -## Comma separated list of the MIHF's transport protocol -## -transport = udp diff --git a/openair3/RAL-LTE/LTE_RAL_UE/MIH-USER/lte_test_user/Jamfile b/openair3/RAL-LTE/LTE_RAL_UE/MIH-USER/lte_test_user/Jamfile deleted file mode 100755 index 36011a7356..0000000000 --- a/openair3/RAL-LTE/LTE_RAL_UE/MIH-USER/lte_test_user/Jamfile +++ /dev/null @@ -1,34 +0,0 @@ -#=============================================================================== -# Brief : MIH-User SAP Application Sample Project Build -# Authors : Carlos Guimaraes -# Bruno Santos -#------------------------------------------------------------------------------- -# ODTONE - Open Dot Twenty One -# -# Copyright (C) 2009-2012 Universidade Aveiro -# Copyright (C) 2009-2012 Instituto de Telecomunicações - Pólo Aveiro -# -# This software is distributed under a license. The full license -# agreement can be found in the file LICENSE in this distribution. -# This software may not be copied, modified, sold or distributed -# other than expressed in the named license agreement. -# -# This software is distributed without any warranty. -#=============================================================================== - - -install install - : ue_lte_user - ue_lte_user.conf - : ../../dist - ; - -project ue_lte_user - ; - -exe ue_lte_user - : ue_lte_user.cpp - ../../lib/odtone//odtone - /boost//program_options - ; - diff --git a/openair3/RAL-LTE/LTE_RAL_UE/MIH-USER/lte_test_user/README.txt b/openair3/RAL-LTE/LTE_RAL_UE/MIH-USER/lte_test_user/README.txt deleted file mode 100755 index 2e951b5bec..0000000000 --- a/openair3/RAL-LTE/LTE_RAL_UE/MIH-USER/lte_test_user/README.txt +++ /dev/null @@ -1,11 +0,0 @@ -FILES TO BE USED: -Jamfile -ue_lte_user.conf -ue_lte_user.cpp -README.txt - -FILES OBSOLETES: -lte_user.conf -mih_usr.cpp - - diff --git a/openair3/RAL-LTE/LTE_RAL_UE/MIH-USER/lte_test_user/lte_user.conf b/openair3/RAL-LTE/LTE_RAL_UE/MIH-USER/lte_test_user/lte_user.conf deleted file mode 100755 index ab40db1085..0000000000 --- a/openair3/RAL-LTE/LTE_RAL_UE/MIH-USER/lte_test_user/lte_user.conf +++ /dev/null @@ -1,42 +0,0 @@ -#=============================================================================== -# Brief : MIH-User configuration file -# Authors : Carlos Guimaraes -# Bruno Santos -#------------------------------------------------------------------------------- -# ODTONE - Open Dot Twenty One -# -# Copyright (C) 2009-2012 Universidade Aveiro -# Copyright (C) 2009-2012 Instituto de Telecomunicações - Pólo Aveiro -# -# This software is distributed under a license. The full license -# agreement can be found in the file LICENSE in this distribution. -# This software may not be copied, modified, sold or distributed -# other than expressed in the named license agreement. -# -# This software is distributed without any warranty. -#=============================================================================== - -## -## User id -## -[user] -id = user_ue - -## -## Commands supported by the MIH-User -## -commands = mih_link_get_parameters, mih_link_configure_thresholds, mih_link_actions, mih_net_ho_candidate_query, mih_net_ho_commit, mih_n2n_ho_query_resources, mih_n2n_ho_commit, mih_n2n_ho_complete, mih_mn_ho_candidate_query, mih_mn_ho_commit, mih_mn_ho_complete - -## -## Port used for communication with MIHF -## -[conf] -port = 1235 - -## -## MIHF configuration. For the default demonstration leave as is. -## -[mihf] -local_port = 1025 - - diff --git a/openair3/RAL-LTE/LTE_RAL_UE/MIH-USER/lte_test_user/mih_usr.cpp b/openair3/RAL-LTE/LTE_RAL_UE/MIH-USER/lte_test_user/mih_usr.cpp deleted file mode 100755 index 89722b7a1b..0000000000 --- a/openair3/RAL-LTE/LTE_RAL_UE/MIH-USER/lte_test_user/mih_usr.cpp +++ /dev/null @@ -1,1509 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include - -#include - -#define THRESHOLD_HIGH_VAL 90 -#define THRESHOLD_LOW_VAL 15 -//#define TEST_DEACTIVATION -#define NUM_ACT_DEACT 3 - - -/////////////////////////////////////////////////////////////////////////////// -// The scenario coded in this MIH-USER is the following (with mRALlteDummy and NASUEDummy executables) -// +--------+ +-----+ -// |MIH_USER| |MIH-F| -// +---+----+ +--+--+ -// |---------- User_Register.indication ---------------->| (supported_commands) Handler next msg=user_reg_handler -// | | -// |---------- Capability_Discover.request ------------->| Handler next msg=receive_MIH_Capability_Discover_confirm -// |<--------- Capability_Discover.confirm --------------| (success) -// | | -// |---------- Event_Subscribe.request ----------------->| Handler next msg=receive_MIH_Event_Subscribe_response -// |<--------- Event_Subscribe.response -----------------| (success) -// | | -// |---------- Configure_Thresholds.request ------------>| (High signal strength value) Handler next msg=event_handler -// |<--------- Configure_Thresholds.confirm -------------| link_get_parameters_request = 1 -// | | -// |---------- Link_Get_Parameters.request ------------->| Handler next msg=event_handler (link_get_parameters_request) -// |<--------- Link_Get_Parameters.confirm --------------| (success) -// | . | -// | . | -// | . | -// |<--------- Link_Detected.indication -----------------| link_action_request = 0 -// |---------- Link_Actions.request -------------------->| (power-up+scan) Handler next msg=event_handler -// |<--------- Link_Actions.confirm ---------------------| (success) -// |---------- Link_Actions.request -------------------->| (power-up) Handler next msg=event_handler -// |<--------- Link_Actions.confirm ---------------------| (success) -// | . | -// | . | -// |<--------- Link_Parameters_Report.indication --------| (Threshold crossed) Now (signal strength will decrease) -// | | -// |---------- Configure_Thresholds.request ------------>| (Low signal strength value) Handler next msg=event_handler -// |<--------- Configure_Thresholds.confirm -------------| (success) -// | . | -// | . | -// |<--------- Link_Parameters_Report.indication --------| (Threshold crossed) -// |---------- Link_Actions.request -------------------->| (power-down) Handler next msg=event_handler -// | . | -// |<--------- Link_Actions.confirm ---------------------| (success) -// | | -// | | -/////////////////////////////////////////////////////////////////////////////// - -static const char* const kConf_MIH_Commands = "user.commands"; -/////////////////////////////////////////////////////////////////////////////// - -namespace po = boost::program_options; - -using odtone::uint; -using odtone::ushort; -using odtone::sint8; - -odtone::logger log_("[mih_usr]", std::cout); - -/////////////////////////////////////////////////////////////////////////////// -void __trim(odtone::mih::octet_string &str, const char chr) -{ - str.erase(std::remove(str.begin(), str.end(), chr), str.end()); -} - -//----------------------------------------------------------------------------- -template std::string StringOf(T object) { -//----------------------------------------------------------------------------- - std::ostringstream os; - os << object; - return(os.str()); -} -//----------------------------------------------------------------------------- -std::string getTimeStamp4Log() -//----------------------------------------------------------------------------- -{ - std::stringstream ss (std::stringstream::in | std::stringstream::out); - struct timespec time_spec; - unsigned int time_now_micros; - unsigned int time_now_s; - clock_gettime (CLOCK_REALTIME, &time_spec); - time_now_s = (unsigned int) time_spec.tv_sec % 3600; - time_now_micros = (unsigned int) time_spec.tv_nsec/1000; - //time_now_s = 110; - //time_now_micros = 22; - ss << time_now_s << ':' << time_now_micros; - return ss.str(); -} -//----------------------------------------------------------------------------- -std::string status2string(odtone::mih::status statusP){ -//----------------------------------------------------------------------------- - switch (statusP.get()) { - case odtone::mih::status_success: return "SUCCESS";break; - case odtone::mih::status_failure: return "UNSPECIFIED_FAILURE";break; - case odtone::mih::status_rejected: return "REJECTED";break; - case odtone::mih::status_authorization_failure: return "AUTHORIZATION_FAILURE";break; - case odtone::mih::status_network_error: return "NETWORK_ERROR";break; - default: return "UNKNOWN"; - } -} -//----------------------------------------------------------------------------- -std::string link_down_reason2string(odtone::mih::link_dn_reason reasonP){ -//----------------------------------------------------------------------------- - switch (reasonP.get()) { - case odtone::mih::link_dn_reason_explicit_disconnect: return "DN_REASON_EXPLICIT_DISCONNECT";break; - case odtone::mih::link_dn_reason_packet_timeout: return "DN_REASON_PACKET_TIMEOUT";break; - case odtone::mih::link_dn_reason_no_resource: return "DN_REASON_NO_RESOURCE";break; - case odtone::mih::link_dn_reason_no_broadcast: return "DN_REASON_NO_BROADCAST";break; - case odtone::mih::link_dn_reason_authentication_failure: return "DN_REASON_AUTHENTICATION_FAILURE";break; - case odtone::mih::link_dn_reason_billing_failure: return "DN_REASON_BILLING_FAILURE";break; - default: return "DN_REASON_UNKNOWN"; - } -} -//----------------------------------------------------------------------------- -std::string link_going_down_reason2string(odtone::mih::link_gd_reason reasonP){ -//----------------------------------------------------------------------------- - switch (reasonP.get()) { - case odtone::mih::link_gd_reason_explicit_disconnect: return "GD_REASON_EXPLICIT_DISCONNECT";break; - case odtone::mih::link_gd_reason_link_parameter_degrading: return "GD_REASON_PARAMETER_DEGRADING";break; - case odtone::mih::link_gd_reason_low_power: return "GD_REASON_LOW_POWER";break; - case odtone::mih::link_gd_reason_no_resource: return "GD_REASON_NO_RESOURCE";break; - default: return "GD_REASON_UNKNOWN"; - } -} -//----------------------------------------------------------------------------- -std::string evt2string(odtone::mih::mih_evt_list evtP){ -//----------------------------------------------------------------------------- - std::string s; - if(evtP.get(odtone::mih::mih_evt_link_detected)) s = std::string("DETECTED, "); - if(evtP.get(odtone::mih::mih_evt_link_up)) s += "UP, "; - if(evtP.get(odtone::mih::mih_evt_link_down)) s += "DOWN, "; - if(evtP.get(odtone::mih::mih_evt_link_parameters_report)) s += "PARAMETERS_REPORT, "; - if(evtP.get(odtone::mih::mih_evt_link_going_down)) s += "GOING_DOWN, "; - if(evtP.get(odtone::mih::mih_evt_link_handover_imminent)) s += "HANDOVER_IMMINENT, "; - if(evtP.get(odtone::mih::mih_evt_link_handover_complete)) s += "HANDOVER_COMPLETE, "; - if(evtP.get(odtone::mih::mih_evt_link_pdu_transmit_status)) s += "PDU_TRANSMIT_STATUS, "; - return s; -} -//----------------------------------------------------------------------------- -std::string link_id2string(odtone::mih::link_id linkP){ -//----------------------------------------------------------------------------- - odtone::mih::l2_3gpp_addr local_l2_3gpp_addr; - std::string s; - - switch (linkP.type.get()) { - case odtone::mih::link_type_gsm: - s="GSM"; - break; - case odtone::mih::link_type_gprs: - s="GPRS"; - break; - case odtone::mih::link_type_edge: - s="EDGE"; - break; - case odtone::mih::link_type_ethernet: - s="Ethernet"; - break; - case odtone::mih::link_type_wireless_other: - s="Other"; - break; - case odtone::mih::link_type_802_11: - s="IEEE 802.11"; - break; - case odtone::mih::link_type_lte: - s="LTE"; - // address copied from UMTS - local_l2_3gpp_addr = boost::get(linkP.addr); - s = s + std::string(local_l2_3gpp_addr.value); - break; - case odtone::mih::link_type_cdma2000: - s="CDMA-2000"; - break; - case odtone::mih::link_type_umts: - s="UMTS:"; - local_l2_3gpp_addr = boost::get(linkP.addr); - /*index = 0; - for(iter=0; iter < local_l2_3gpp_addr.value.length(); iter++) { - index += sprintf(&buf[index],"-%hhx-", local_l2_3gpp_addr.value[iter]); - }*/ - s = s + std::string(local_l2_3gpp_addr.value); - break; - case odtone::mih::link_type_cdma2000_hrpd: - s="CDMA-2000-HRPD"; - break; - case odtone::mih::link_type_802_16: - s="IEEE 802.16"; - break; - case odtone::mih::link_type_802_20: - s="IEEE 802.20"; - break; - case odtone::mih::link_type_802_22: - s="IEEE 802.22"; - break; - } - return s; -} -//----------------------------------------------------------------------------- -std::string link_tupple_id2string(odtone::mih::link_tuple_id link_tuppleP){ -//----------------------------------------------------------------------------- - std::string s; - odtone::mih::l2_3gpp_addr local_l2_3gpp_addr; - - switch (link_tuppleP.type.get()) { - case odtone::mih::link_type_gsm: - s="GSM"; - break; - case odtone::mih::link_type_gprs: - s="GPRS"; - break; - case odtone::mih::link_type_edge: - s="EDGE"; - break; - case odtone::mih::link_type_ethernet: - s="Ethernet"; - break; - case odtone::mih::link_type_wireless_other: - s="Other"; - break; - case odtone::mih::link_type_802_11: - s="IEEE 802.11"; - break; - case odtone::mih::link_type_lte: - s="LTE"; - local_l2_3gpp_addr = boost::get(link_tuppleP.addr); - s = s + std::string(local_l2_3gpp_addr.value); - break; - case odtone::mih::link_type_cdma2000: - s="CDMA-2000"; - break; - case odtone::mih::link_type_umts: - s="UMTS:"; - local_l2_3gpp_addr = boost::get(link_tuppleP.addr); - /*index = 0; - for(iter=0; iter < local_l2_3gpp_addr.value.length(); iter++) { - index += sprintf(&buf[index],"-%hhx-", local_l2_3gpp_addr.value[iter]); - }*/ - break; - case odtone::mih::link_type_cdma2000_hrpd: - s="CDMA-2000-HRPD"; - break; - case odtone::mih::link_type_802_16: - s="IEEE 802.16"; - break; - case odtone::mih::link_type_802_20: - s="IEEE 802.20"; - break; - case odtone::mih::link_type_802_22: - s="IEEE 802.22"; - break; - } - return s; -} -//----------------------------------------------------------------------------- -std::string link_actions_req2string(odtone::mih::link_action_req link_act_reqP) { -//----------------------------------------------------------------------------- - std::string s; - - s = link_id2string(link_act_reqP.id); - - if(link_act_reqP.action.type == odtone::mih::link_ac_type_none) s += ", AC_TYPE_NONE"; - if(link_act_reqP.action.type == odtone::mih::link_ac_type_disconnect) s += ", AC_TYPE_DISCONNECT"; - if(link_act_reqP.action.type == odtone::mih::link_ac_type_low_power) s += ", AC_TYPE_LOW_POWER"; - if(link_act_reqP.action.type == odtone::mih::link_ac_type_power_down) s += ", AC_TYPE_POWER_DOWN"; - if(link_act_reqP.action.type == odtone::mih::link_ac_type_power_up) s += ", AC_TYPE_POWER_UP"; - if(link_act_reqP.action.type == odtone::mih::link_ac_type_flow_attr) s += ", AC_TYPE_FLOW_ATTR"; - if(link_act_reqP.action.type == odtone::mih::link_ac_type_link_activate_resources) s += ", AC_TYPE_ACTIVATE_RESOURCES"; - if(link_act_reqP.action.type == odtone::mih::link_ac_type_link_deactivate_resources) s += ", AC_TYPE_DEACTIVATE_RESOURCES"; - - if(link_act_reqP.action.attr.get(odtone::mih::link_ac_attr_data_fwd_req)) s += ", AC_ATTR_DATA_FWD_REQ"; - if(link_act_reqP.action.attr.get(odtone::mih::link_ac_attr_scan)) s += ", AC_ATTR_SCAN"; - if(link_act_reqP.action.attr.get(odtone::mih::link_ac_attr_res_retain)) s += ", AC_ATTR_RES_RETAIN"; - - s += ", " + StringOf(link_act_reqP.ex_time) + " ms"; - return s; -} -//----------------------------------------------------------------------------- -std::string net_type_addr_list2string(boost::optional ntalP) { -//----------------------------------------------------------------------------- - std::string s; - odtone::mih::link_id link_id; - for (odtone::mih::net_type_addr_list::iterator i = ntalP->begin(); i != ntalP->end(); ++i) - { - link_id.addr = boost::get(i->addr); - link_id.type = boost::get(i->nettype.link); - s += link_id2string(link_id); - } - return s; -} - - -/** - * Parse supported commands. - * - * @param cfg Configuration options. - * @return A bitmap mapping the supported commands. - */ -boost::optional parse_supported_commands(const odtone::mih::config &cfg) -{ - using namespace boost; - - odtone::mih::mih_cmd_list commands; - bool has_cmd = false; - - std::map enum_map; - enum_map["mih_link_get_parameters"] = odtone::mih::mih_cmd_link_get_parameters; - enum_map["mih_link_configure_thresholds"] = odtone::mih::mih_cmd_link_configure_thresholds; - enum_map["mih_link_actions"] = odtone::mih::mih_cmd_link_actions; - enum_map["mih_net_ho_candidate_query"] = odtone::mih::mih_cmd_net_ho_candidate_query; - enum_map["mih_net_ho_commit"] = odtone::mih::mih_cmd_net_ho_commit; - enum_map["mih_n2n_ho_query_resources"] = odtone::mih::mih_cmd_n2n_ho_query_resources; - enum_map["mih_n2n_ho_commit"] = odtone::mih::mih_cmd_n2n_ho_commit; - enum_map["mih_n2n_ho_complete"] = odtone::mih::mih_cmd_n2n_ho_complete; - enum_map["mih_mn_ho_candidate_query"] = odtone::mih::mih_cmd_mn_ho_candidate_query; - enum_map["mih_mn_ho_commit"] = odtone::mih::mih_cmd_mn_ho_commit; - enum_map["mih_mn_ho_complete"] = odtone::mih::mih_cmd_mn_ho_complete; - - std::string tmp = cfg.get(kConf_MIH_Commands); - __trim(tmp, ' '); - - char_separator sep1(","); - tokenizer< char_separator > list_tokens(tmp, sep1); - - BOOST_FOREACH(std::string str, list_tokens) { - if(enum_map.find(str) != enum_map.end()) { - commands.set((odtone::mih::mih_cmd_list_enum) enum_map[str]); - has_cmd = true; - } - } - - boost::optional supp_cmd; - if(has_cmd) - supp_cmd = commands; - - return supp_cmd; -} - -/////////////////////////////////////////////////////////////////////////////// -/** - * This class provides an implementation of an IEEE 802.21 MIH-User. - */ -class mih_user : boost::noncopyable { -public: - /** - * Construct the MIH-User. - * - * @param cfg Configuration options. - * @param io The io_service object that the MIH-User will use to - * dispatch handlers for any asynchronous operations performed on the socket. - */ - mih_user(const odtone::mih::config& cfg, boost::asio::io_service& io); - - /** - * Destruct the MIH-User. - */ - ~mih_user(); - -protected: - /** - * User registration handler. - * - * @param cfg Configuration options. - * @param ec Error Code. - */ - void user_reg_handler(const odtone::mih::config& cfg, const boost::system::error_code& ec); - - /** - * Default MIH event handler. - * - * @param msg Received message. - * @param ec Error code. - */ - void event_handler(odtone::mih::message& msg, const boost::system::error_code& ec); - - /** - * Capability Discover handler. - * - * @param msg Received message. - * @param ec Error Code. - */ - void receive_MIH_Capability_Discover_confirm(odtone::mih::message& msg, const boost::system::error_code& ec); - - /** - * Event subscribe handler. - * - * @param msg Received message. - * @param ec Error Code. - */ - void receive_MIH_Event_Subscribe_response(odtone::mih::message& msg, const boost::system::error_code& ec); - - void send_MIH_Link_Configure_Thresholds_request(odtone::mih::message& msg, const boost::system::error_code& ec); - - void receive_MIH_Link_Configure_Thresholds_confirm(odtone::mih::message& msg, const boost::system::error_code& ec); - - void send_MIH_Link_Get_Parameters_request(odtone::mih::message& msg, const boost::system::error_code& ec); - - void receive_MIH_Link_Get_Parameters_confirm(odtone::mih::message& msg, const boost::system::error_code& ec); - - void receive_MIH_Link_Detected_indication(odtone::mih::message& msg, const boost::system::error_code& ec); - - void send_MIH_Link_Actions_request(odtone::mih::message& msg, const boost::system::error_code& ec); - - void receive_MIH_Link_Actions_confirm(odtone::mih::message& msg, const boost::system::error_code& ec); - - void receive_MIH_Link_Up_indication(odtone::mih::message& msg, const boost::system::error_code& ec); - - void receive_MIH_Link_Going_Down_indication(odtone::mih::message& msg, const boost::system::error_code& ec); - - void receive_MIH_Link_Down_indication(odtone::mih::message& msg, const boost::system::error_code& ec); - - void receive_MIH_Event_Unsubscribe_confirm(odtone::mih::message& msg, const boost::system::error_code& ec); - - void send_MIH_Event_Unsubscribe_request(odtone::mih::message& msg, const boost::system::error_code& ec); - - void receive_MIH_Link_Parameters_Report(odtone::mih::message& msg, const boost::system::error_code& ec); - - void print_l2_3gpp_addr(odtone::mih::link_type& link_type, odtone::mih::l2_3gpp_addr& l2_3gpp_addr); - - -private: - odtone::sap::user _mihf; /**< User SAP helper. */ - odtone::mih::id _mihfid; /**< MIHF destination ID. */ - odtone::mih::id _mihuserid; /**< MIH_USER ID. */ - odtone::uint link_get_parameters_request, link_action_request, link_threshold_request; - odtone::uint link_last_action_sent, link_activate_counter; - odtone::mih::net_type_addr rcv_net_type_addr; - odtone::mih::link_id rcv_link_id; -}; - -/** - * Construct the MIH-User. - * - * @param cfg Configuration options. - * @param io The io_service object that the MIH-User will use to - * dispatch handlers for any asynchronous operations performed on the socket. - */ -//----------------------------------------------------------------------------- -mih_user::mih_user(const odtone::mih::config& cfg, boost::asio::io_service& io) - : _mihf(cfg, io, boost::bind(&mih_user::event_handler, this, _1, _2)) -//----------------------------------------------------------------------------- -{ - odtone::mih::message m; - boost::optional supp_cmd = parse_supported_commands(cfg); - - link_get_parameters_request = 0; - link_action_request = 0; - link_threshold_request = 0; - link_last_action_sent = 0; - link_activate_counter = 0; - - m << odtone::mih::indication(odtone::mih::indication::user_register) - & odtone::mih::tlv_command_list(supp_cmd); - - log_(0, "User Register Indication - SENT "); - log_(0, " - User Name: ", m.source().to_string()); - log_(0, " "); - - odtone::mih::octet_string user_id = cfg.get(odtone::sap::kConf_MIH_SAP_id); - _mihuserid.assign(user_id.c_str()); - - odtone::mih::octet_string dest_id = cfg.get(odtone::sap::kConf_MIH_SAP_dest); - _mihfid.assign("mihf1"); - - log_(0, "[MSC_NEW][",getTimeStamp4Log(),"][MIH-USER=",_mihuserid.to_string(),"]\n"); - m.source(_mihuserid); - m.destination(_mihfid); - log_(0, "[MSC_MSG]["+getTimeStamp4Log()+"]["+ m.source().to_string() +"][--- MIH_User_Register.indication --->]["+m.destination().to_string()+"]\n"); - _mihf.async_send(m, boost::bind(&mih_user::user_reg_handler, this, boost::cref(cfg), _2)); -} - - -/** - * Destruct the MIH-User. - */ -//----------------------------------------------------------------------------- -mih_user::~mih_user() -//----------------------------------------------------------------------------- -{ -} - -/** - * Print 3GPP Address. - * - * @param link_type Link Type. - * @param l2_3gpp_addr 3GPP Address. - */ -//----------------------------------------------------------------------------- -void mih_user::print_l2_3gpp_addr(odtone::mih::link_type& link_type, odtone::mih::l2_3gpp_addr& l2_3gpp_addr) -//----------------------------------------------------------------------------- -{ - odtone::uint iter; - if(link_type == odtone::mih::link_type_umts){ - log_(0, "\t Link Type: UMTS"); - } - if(link_type == odtone::mih::link_type_lte){ - log_(0, "\t Link Type: LTE"); - } - if((link_type == odtone::mih::link_type_umts)||(link_type == odtone::mih::link_type_lte)){ - //log_(0, "\t 3GPP Address: "); - std::printf("[mih_usr]: \t 3GPP Address: "); - for(iter=0; iter(odtone::sap::kConf_MIH_SAP_dest); - _mihfid.assign(destination.c_str()); - - // - // Let's fire a capability discover request to get things moving - // - msg << odtone::mih::request(odtone::mih::request::capability_discover, _mihfid); - - log_(0, "[MSC_MSG]["+getTimeStamp4Log()+"]["+ _mihuserid.to_string() +"][--- MIH_Capability_Discover.request --->]["+msg.destination().to_string()+"]\n"); - _mihf.async_send(msg, boost::bind(&mih_user::receive_MIH_Capability_Discover_confirm, this, _1, _2)); - - log_(0, "MIH_Capability_Discover.request - SENT (towards its local MIHF)"); - log_(0, ""); -} - -/** - * Default MIH event handler. - * - * @param msg Received message. - * @param ec Error code. - */ -//----------------------------------------------------------------------------- -void mih_user::event_handler(odtone::mih::message& msg, const boost::system::error_code& ec) -//----------------------------------------------------------------------------- -{ - if (ec) { - log_(0, __FUNCTION__, " error: ", ec.message()); - return; - } - - switch (msg.mid()) { - case odtone::mih::indication::link_up: - mih_user::receive_MIH_Link_Up_indication(msg, ec); - break; - - case odtone::mih::indication::link_down: - mih_user::receive_MIH_Link_Down_indication(msg, ec); - //sleep(2); - mih_user::send_MIH_Link_Get_Parameters_request(msg, ec); - break; - - case odtone::mih::indication::link_detected: - mih_user::receive_MIH_Link_Detected_indication(msg, ec); - // monitor signal strength - do not change (up/down) signal strength report now - //system ("sendip -d 0x00 -p ipv4 -is 127.0.0.1 -p udp -ud 22222 -us 65535 127.0.0.1"); - - //sleep(2); - link_action_request = 0; - mih_user::send_MIH_Link_Actions_request(msg, ec); - break; - - case odtone::mih::indication::link_going_down: - mih_user::receive_MIH_Link_Going_Down_indication(msg,ec); - //sleep(10); - link_get_parameters_request = 2; - mih_user::send_MIH_Link_Get_Parameters_request(msg, ec); - break; - - case odtone::mih::indication::link_handover_imminent: - log_(0, "MIH-User has received a local event \"link_handover_imminent\""); - break; - case odtone::mih::indication::link_handover_complete: - log_(0, "MIH-User has received a local event \"link_handover_complete\""); - break; - - case odtone::mih::confirm::link_configure_thresholds: - mih_user::receive_MIH_Link_Configure_Thresholds_confirm(msg, ec); - //sleep(2); - if (link_get_parameters_request == 0) { - link_get_parameters_request = 1; - mih_user::send_MIH_Link_Get_Parameters_request(msg, ec); - } - break; - - case odtone::mih::confirm::link_get_parameters: - switch(link_get_parameters_request){ - case 1: mih_user::receive_MIH_Link_Get_Parameters_confirm(msg, ec); - // monitor signal strength - increase signal strength report now - //system ("sendip -d 0x01 -p ipv4 -is 127.0.0.1 -p udp -ud 22222 -us 65535 127.0.0.1"); - break; - case 2: mih_user::receive_MIH_Link_Get_Parameters_confirm(msg, ec); - link_action_request = 1; - link_get_parameters_request = 3; - mih_user::send_MIH_Link_Actions_request(msg, ec); - break; - case 3: mih_user::receive_MIH_Link_Get_Parameters_confirm(msg, ec); - mih_user::send_MIH_Event_Unsubscribe_request(msg, ec); - break; - } - break; - - mih_user::receive_MIH_Link_Get_Parameters_confirm(msg, ec); - //sleep(1); - break; - - case odtone::mih::confirm::link_actions: - mih_user::receive_MIH_Link_Actions_confirm(msg, ec); - if (link_action_request == 0) { - link_action_request = 1; - mih_user::send_MIH_Link_Actions_request(msg, ec); - } else if (link_action_request == 1) { - // monitor signal strength - increase signal strength report now - //system ("sendip -d 0x01 -p ipv4 -is 127.0.0.1 -p udp -ud 22222 -us 65535 127.0.0.1"); - } - #ifdef TEST_DEACTIVATION - if ((link_activate_counter 0)) { - sleep(20); - mih_user::send_MIH_Link_Actions_request(msg, ec); - } - if (link_activate_counter==NUM_ACT_DEACT) - log_(0, "TEST_DEACTIVATION completed \n"); - #endif - break; - - case odtone::mih::confirm::event_unsubscribe: - mih_user::receive_MIH_Event_Unsubscribe_confirm(msg, ec); - break; - - case odtone::mih::indication::link_parameters_report: - mih_user::receive_MIH_Link_Parameters_Report(msg, ec); - if (link_threshold_request == 1) { - // monitor signal strength - do not modify signal strength report now - //system ("sendip -d 0x0x00 -p ipv4 -is 127.0.0.1 -p udp -ud 22222 -us 65535 127.0.0.1"); - link_action_request = 2; - mih_user::send_MIH_Link_Actions_request(msg, ec); - - } else if (link_action_request == 1) { - // monitor signal strength - decrease signal strength report now - //system ("sendip -d 0xFF -p ipv4 -is 127.0.0.1 -p udp -ud 22222 -us 65535 127.0.0.1"); - // select decreasing down to low threshold - link_threshold_request = 1; - mih_user::send_MIH_Link_Configure_Thresholds_request(msg, ec); - } - break; - } -} - -//----------------------------------------------------------------------------- -void mih_user::receive_MIH_Link_Parameters_Report(odtone::mih::message& msg, const boost::system::error_code& ec) -//----------------------------------------------------------------------------- -{ - odtone::mih::link_tuple_id link; - odtone::mih::link_param_rpt_list lprl; - odtone::mih::l2_3gpp_addr local_l2_3gpp_addr; - - msg >> odtone::mih::indication() - & odtone::mih::tlv_link_identifier(link) - & odtone::mih::tlv_link_param_rpt_list(lprl); - - log_(0, ""); - log_(0, "MIH_Link_Parameters_Report.indication - RECEIVED - Begin"); - log_(0, "[MSC_MSG]["+getTimeStamp4Log()+"]["+ msg.source().to_string() +"][--- MIH_Link_Parameters_Report.indication --->]["+msg.destination().to_string()+"]\n"); - local_l2_3gpp_addr = boost::get(link.addr); - print_l2_3gpp_addr(link.type, local_l2_3gpp_addr); - log_(0, "MIH_Link_Parameters_Report.indication - End"); -} - - -//----------------------------------------------------------------------------- -void mih_user::receive_MIH_Event_Unsubscribe_confirm(odtone::mih::message& msg, const boost::system::error_code& ec) -//----------------------------------------------------------------------------- -{ - odtone::mih::status st; - odtone::mih::link_tuple_id link; - boost::optional evt; - - msg >> odtone::mih::confirm() - & odtone::mih::tlv_status(st) - & odtone::mih::tlv_link_identifier(link) - & odtone::mih::tlv_event_list(evt); - - log_(0, ""); - log_(0, "receive_MIH_Event_Unsubscribe_confirm - Begin"); - - log_(0, "[MSC_MSG]["+getTimeStamp4Log()+"]["+ msg.source().to_string() +"][--- MIH_Event_Unsubscribe.confirm\\n"+status2string(st.get()).c_str()+" --->]["+msg.destination().to_string()+"]\n"); - log_(0, "\t- STATUS: ", status2string(st.get()).c_str(), " ", st.get()); - log_(0, "\t- MIH_EVT_LIST - Event List: ", evt2string(evt.get()).c_str()); - log_(0, "receive_MIH_Event_Unsubscribe_confirm - End"); -} - -//----------------------------------------------------------------------------- -void mih_user::send_MIH_Event_Unsubscribe_request(odtone::mih::message& msg, const boost::system::error_code& ec) -//----------------------------------------------------------------------------- -{ - odtone::mih::message m; - - odtone::mih::link_tuple_id link; - odtone::mih::mih_evt_list events; - odtone::mih::l2_3gpp_addr l2_3gpp_addr; - - link.type = rcv_link_id.type; - //address UMTS - link.addr = rcv_link_id.addr; - - events.set(odtone::mih::mih_evt_link_detected); - events.set(odtone::mih::mih_evt_link_up); - events.set(odtone::mih::mih_evt_link_down); - events.set(odtone::mih::mih_evt_link_parameters_report); - events.set(odtone::mih::mih_evt_link_going_down); - - log_(0, ""); - log_(0, "send_MIH_Event_Unsubscribe_request - Begin"); - m << odtone::mih::request(odtone::mih::request::event_unsubscribe) - & odtone::mih::tlv_link_identifier(link) - & odtone::mih::tlv_event_list(events); - - m.destination(msg.source()); - - log_(0, "[MSC_MSG]["+getTimeStamp4Log()+"]["+ m.source().to_string() +"][--- MIH_Event_Unsubscribe.request --->]["+m.destination().to_string()+"]\n"); - _mihf.async_send(m, boost::bind(&mih_user::event_handler, this, _1, _2)); - - log_(0, " - MIH_EVT_LIST - Event List: ", evt2string(events).c_str()); - log_(0, "send_MIH_Event_Unsubscribe_request - End"); -} - -//----------------------------------------------------------------------------- -void mih_user::receive_MIH_Link_Down_indication(odtone::mih::message& msg, const boost::system::error_code& ec) -//----------------------------------------------------------------------------- -{ - odtone::mih::link_tuple_id link; - odtone::mih::link_dn_reason ldr; - odtone::mih::l2_3gpp_addr local_l2_3gpp_addr; - - log_(0, ""); - log_(0, "receive_MIH_Link_Down_indication - Begin"); - - msg >> odtone::mih::indication() - & odtone::mih::tlv_link_identifier(link) - & odtone::mih::tlv_link_dn_reason(ldr); - - - local_l2_3gpp_addr = boost::get(link.addr); - - log_(0, "[MSC_MSG]["+getTimeStamp4Log()+"]["+ msg.source().to_string() +"][--- MIH_Link_Down.indication\\n"+link_down_reason2string(ldr).c_str()+" --->]["+msg.destination().to_string()+"]\n"); - - print_l2_3gpp_addr(link.type, local_l2_3gpp_addr); - - log_(0, " Link down reason: ", link_down_reason2string(ldr).c_str()); - log_(0, "receive_MIH_Link_Down_indication - End"); -} - -//----------------------------------------------------------------------------- -void mih_user::receive_MIH_Link_Going_Down_indication(odtone::mih::message& msg, const boost::system::error_code& ec) -//----------------------------------------------------------------------------- -{ - odtone::mih::link_tuple_id link; - odtone::mih::link_gd_reason lgd; - odtone::mih::link_ac_ex_time ex_time; - - odtone::mih::l2_3gpp_addr local_l2_3gpp_addr; - - log_(0, ""); - log_(0, "receive_MIH_Link_Going_Down_indication - Begin"); - - msg >> odtone::mih::indication() - & odtone::mih::tlv_link_identifier(link) - & odtone::mih::tlv_time_interval(ex_time) - & odtone::mih::tlv_link_gd_reason(lgd); - - - local_l2_3gpp_addr = boost::get(link.addr); - local_l2_3gpp_addr = boost::get(link.addr); - - log_(0, "[MSC_MSG]["+getTimeStamp4Log()+"]["+ msg.source().to_string() +"][--- MIH_Link_Going_Down.indication\\n"+link_going_down_reason2string(lgd).c_str()+" --->]["+msg.destination().to_string()+"]\n"); - - print_l2_3gpp_addr(link.type, local_l2_3gpp_addr); - log_(0, "\tTime Interval :", (ex_time/256)); - - log_(0, "\tLink going down reason: ", link_going_down_reason2string(lgd).c_str()); - - log_(0, "receive_MIH_Link_Going_Down_indication - End"); -} - -//----------------------------------------------------------------------------- -void mih_user::receive_MIH_Link_Up_indication(odtone::mih::message& msg, const boost::system::error_code& ec) -//----------------------------------------------------------------------------- -{ - odtone::mih::link_tuple_id link; - odtone::mih::l2_3gpp_addr local_l2_3gpp_addr; - - msg >> odtone::mih::indication() - & odtone::mih::tlv_link_identifier(link); - - log_(0, ""); - log_(0, "receive_MIH_Link_Up_indication - Begin"); - log_(0, "[MSC_MSG]["+getTimeStamp4Log()+"]["+ msg.source().to_string() +"][--- MIH_Link_Up.indication --->]["+msg.destination().to_string()+"]\n"); - - local_l2_3gpp_addr = boost::get(link.addr); - print_l2_3gpp_addr(link.type, local_l2_3gpp_addr); - log_(0, "receive_MIH_Link_Up_indication - End"); -} - -//----------------------------------------------------------------------------- -void mih_user::receive_MIH_Link_Actions_confirm(odtone::mih::message& msg, const boost::system::error_code& ec) -//----------------------------------------------------------------------------- -{ - - log_(0, ""); - log_(0, "receive_MIH_Link_Actions_confirm - Begin"); - - if (ec) { - log_(0, __FUNCTION__, " error: ", ec.message()); - return; - } - - odtone::mih::status st; - boost::optional larl; - /*odtone::mih::link_action_rsp_list larl; - odtone::mih::link_action_rsp lar; - - odtone::mih::link_scan_rsp_list lsrl; - odtone::mih::link_scan_rsp lsr; - - odtone::uint i, l, n, p; - odtone::mih::link_id link; - odtone::mih::l2_3gpp_addr local_l2_3gpp_addr; - odtone::mih::l2_3gpp_3g_cell_id local_l2_3gpp_3g_cell_id; - odtone::mih::link_scan_rsp_list local_link_scan_rsp_list; - odtone::sint8 local_sig_strength;*/ - - msg >> odtone::mih::confirm() - & odtone::mih::tlv_status(st) - & odtone::mih::tlv_link_action_rsp_list(larl); - - #ifdef TEST_DEACTIVATION - if (mih_user::link_last_action_sent==1){ - mih_user::link_activate_counter++; - } - #endif - - - log_(0, "[MSC_MSG]["+getTimeStamp4Log()+"]["+ msg.source().to_string() +"][--- MIH_Link_Actions.confirm\\n"+status2string(st.get())+" --->]["+msg.destination().to_string()+"]\n"); - log_(0, "\t- STATUS: ", status2string(st.get()), " " , st.get()); - - /*log_(0, " - LINK ACTION RSP LIST - Length:", larl.size()); - - for(i=0; i< larl.size(); i++) - { - local_l2_3gpp_addr = boost::get(larl[i].id.addr); - print_l2_3gpp_addr(larl[i].id.type, local_l2_3gpp_addr); - - if(larl[i].result == odtone::mih::link_ac_success){log_(0, " Link Action Success");} - if(larl[i].result == odtone::mih::link_ac_failure){log_(0, " Link Action Failure");} - if(larl[i].result == odtone::mih::link_ac_refused){log_(0, " Link Action Refused");} - if(larl[i].result == odtone::mih::link_ac_incapable){log_(0, " Link Action Incapable");} - - local_link_scan_rsp_list = boost::get(larl[i].scan_list); - - log_(0, " Link Scan Rsp List - Element: ", local_link_scan_rsp_list.size()); - for(l=0; l(local_link_scan_rsp_list[l].id); - - log_(0, " 3GPP Cell ID Adress: ", local_link_scan_rsp_list.size()); - for(p=0; p<3; p++) { - std::printf("[mih_usr]: "); - std::printf(" Plmn %d: %d", p, local_l2_3gpp_3g_cell_id.plmn_id[p]); - } - log_(0, " Cell-ID: ", (local_l2_3gpp_3g_cell_id._cell_id/); - //net_id network identifier - log_(0, " Network Identifier: "); - std::printf("[mih_usr]: "); - for(n=0; n(local_link_scan_rsp_list[l].signal); - std::printf("[mih_usr]: "); - std::printf("Signal Strength: %d \n", local_sig_strength); - //log_(0, " Signal Strength: ", local_sig_strength); - } - log_(0, " "); - } -*/ - log_(0, "MIH_Link_Actions.confirm - End"); -} - -//----------------------------------------------------------------------------- -void mih_user::send_MIH_Link_Actions_request(odtone::mih::message& msg, const boost::system::error_code& ec) -//----------------------------------------------------------------------------- -{ - odtone::mih::message m; - - odtone::mih::link_action_list lal; - odtone::mih::link_action_req link_act_req; - odtone::mih::l2_3gpp_addr local_l2_3gpp_addr; - - log_(0, ""); - log_(0, "send_MIH_Link_Actions_request - Begin"); - //address UMTS - link_act_req.id.type = rcv_link_id.type; - link_act_req.id.addr = rcv_link_id.addr; - - if(mih_user::link_action_request == 0){ - link_act_req.action.type = odtone::mih::link_ac_type_power_up; - link_act_req.action.attr.set(odtone::mih::link_ac_attr_scan); - log_(0, "Initial Scan, link_action_request = 0"); - //link_act_req.action.param...; - } else if((mih_user::link_activate_counter == 0)&&(mih_user::link_action_request == 1)) { - link_act_req.action.type = odtone::mih::link_ac_type_power_up; - mih_user::link_last_action_sent=1; - //mih_user::link_activate_counter++; - log_(0, "Initial Activation, link_action_request = 1"); - #ifndef TEST_DEACTIVATION - } else if(mih_user::link_action_request == 2) { - link_act_req.action.type = odtone::mih::link_ac_type_power_down; - log_(0, "Link Going Down Deactivation, link_action_request = 2"); - #endif - } - #ifdef TEST_DEACTIVATION - else if ((mih_user::link_activate_counter>0)&&(mih_user::link_action_request >= 1)){ - if (mih_user::link_last_action_sent==1){ - link_act_req.action.type = odtone::mih::link_ac_type_power_down; - mih_user::link_last_action_sent=0; - log_(0, "New Deactivation, link_action_request >1"); - } else { - link_act_req.action.type = odtone::mih::link_ac_type_power_up; - mih_user::link_last_action_sent=1; - //mih_user::link_activate_counter++; - log_(0, "New Activation, link_action_request >1"); - } - } - #endif - link_act_req.ex_time = 0; - - lal.push_back(link_act_req); - - - m << odtone::mih::request(odtone::mih::request::link_actions) - & odtone::mih::tlv_link_action_list(lal); - - - log_(0, "\t- LINK_ID: "); - local_l2_3gpp_addr = boost::get(link_act_req.id.addr); - print_l2_3gpp_addr(link_act_req.id.type, local_l2_3gpp_addr); - - log_(0, "\t- Link Actions: " + link_actions_req2string(link_act_req)); - - m.destination(msg.source()); - - log_(0, "[MSC_MSG]["+getTimeStamp4Log()+"]["+ msg.destination().to_string() +"][--- MIH_Link_Actions.request\\n"+link_actions_req2string(link_act_req)+" --->]["+msg.source().to_string()+"]\n"); - _mihf.async_send(m, boost::bind(&mih_user::event_handler, this, _1, _2)); - - log_(0, "send_MIH_Link_Actions_request - End"); - log_(0, ""); -} - -//----------------------------------------------------------------------------- -void mih_user::receive_MIH_Link_Detected_indication(odtone::mih::message& msg, const boost::system::error_code& ec) -//----------------------------------------------------------------------------- -{ - odtone::mih::link_det_info_list ldil; - - log_(0, ""); - log_(0, "receive_MIH_Link_Detected_indication - Begin"); - - msg >> odtone::mih::indication() - & odtone::mih::tlv_link_det_info_list(ldil); - - log_(0, "[MSC_MSG]["+getTimeStamp4Log()+"]["+ msg.source().to_string() +"][--- MIH_Link_Detected.indication --->]["+msg.destination().to_string()+"]\n"); - - log_(0, "receive_MIH_Link_Detected_indication - End"); -} - -//----------------------------------------------------------------------------- -void mih_user::send_MIH_Link_Get_Parameters_request(odtone::mih::message& msg, const boost::system::error_code& ec) -//----------------------------------------------------------------------------- -{ - odtone::mih::message m; - - odtone::mih::dev_states_req dsr; - odtone::uint iter; - - odtone::mih::link_id li; - odtone::mih::link_id_list lil; - - odtone::mih::link_status_req lsr; - - log_(0,""); - log_(0, "send_MIH_Link_Get_Parameters_request - Begin"); - - //set values - dsr.set(odtone::mih::dev_state_device_info); //optional - - li.type = rcv_link_id.type; - li.addr = rcv_link_id.addr; - lil.push_back(li); - odtone::mih::link_param_gen lp1; - //odtone::mih::link_param_gen lp2, lp3, lp4, lp5; - - lp1 = odtone::mih::link_param_gen_data_rate; - lsr._param_type_list.push_back(lp1); - - /*lp2 = odtone::mih::link_param_gen_sinr; - lsr._param_type_list.push_back(lp2); - - lp3 = odtone::mih::link_param_gen_packet_error_rate; - lsr._param_type_list.push_back(lp3); - - lp4 = odtone::mih::link_param_gen_throughput; - lsr._param_type_list.push_back(lp4); - - lp5 = odtone::mih::link_param_gen_signal_strength; - lsr._param_type_list.push_back(lp5);*/ - - lsr._states_req.set(odtone::mih::link_states_req_op_mode); - lsr._states_req.set(odtone::mih::link_states_req_channel_id); - lsr._desc_req.set(odtone::mih::link_desc_req_classes_of_service_supported); - - - m << odtone::mih::request(odtone::mih::request::link_get_parameters) - & odtone::mih::tlv_dev_states_req(dsr) - & odtone::mih::tlv_link_id_list(lil) - & odtone::mih::tlv_get_status_req_set(lsr); - - m.destination(msg.source()); - - log_(0, "[MSC_MSG]["+getTimeStamp4Log()+"]["+ msg.destination().to_string() +"][--- MIH_Link_Get_Parameters.request --->]["+msg.source().to_string()+"]\n"); - _mihf.async_send(m, boost::bind(&mih_user::event_handler, this, _1, _2)); - - //log_(0, " - DEVICE STATES REQUEST"); - - odtone::mih::l2_3gpp_addr local_l2_3gpp_addr; - - log_(0, "\t- LINK ID LIST - Length: ", lil.size()); - - for(iter=0; iter(lil[iter].addr); - print_l2_3gpp_addr(lil[iter].type, local_l2_3gpp_addr); - } - - log_(0, "\t- GET STATUS REQUEST "); - if(lsr._states_req.get(odtone::mih::link_states_req_op_mode) == 1) {log_(0, "\t Link power mode requested");} - if(lsr._states_req.get(odtone::mih::link_states_req_channel_id) == 1) {log_(0, "\t Channel identifier requested (as defined in the specific link technology)");} - - if(lp1 == odtone::mih::link_param_gen_data_rate) {log_(0, "\t DATA RATE link parameter requested");} - if(lp1 == odtone::mih::link_param_gen_signal_strength) {log_(0, "\t SIGNAL STRENGTH link parameter is required");} - if(lp1 == odtone::mih::link_param_gen_sinr) {log_(0, "\t SINR link parameter is required");} - if(lp1 == odtone::mih::link_param_gen_throughput) {log_(0, "\t THROUGHPUT link parameter is required");} - - log_(0, "\t- LINK DESCRIPTOR REQUESTED "); - - if(lsr._desc_req.get(odtone::mih::link_desc_req_classes_of_service_supported) == 1) {log_(0, "\t Number of CoS Supported ");} - if(lsr._desc_req.get(odtone::mih::link_desc_req_queues_supported) == 1) {log_(0, "\t Number of Queues Supported ");} - log_(0, "send_MIH_Link_Get_Parameters_request - End"); - log_(0, ""); - -} - -//----------------------------------------------------------------------------- -void mih_user::receive_MIH_Link_Get_Parameters_confirm(odtone::mih::message& msg, const boost::system::error_code& ec) -//----------------------------------------------------------------------------- -{ - - odtone::mih::status st; - odtone::mih::status_rsp_list srl; - - odtone::uint iter; - - log_(0, ""); - log_(0, "receive_MIH_Link_Get_Parameters_confirm - Begin"); - - msg >> odtone::mih::confirm() - & odtone::mih::tlv_status(st) - & odtone::mih::tlv_get_status_rsp_list(srl); - - log_(0, "[MSC_MSG]["+getTimeStamp4Log()+"]["+ _mihfid.to_string() +"][--- MIH_Link_Get_Parameters.confirm\\n"+status2string(st.get()).c_str()+" --->]["+_mihuserid.to_string()+"]\n"); - log_(0, "\t- STATUS: ", status2string(st.get()), " ", st.get()); - - - odtone::mih::l2_3gpp_addr local_l2_3gpp_addr; - - log_(0, "\t- STATUS RSP LIST - Length: ", srl.size()); - - for(iter=0; iter(srl[iter].id.addr); - print_l2_3gpp_addr(srl[iter].id.type, local_l2_3gpp_addr); - log_(0, "\t LINK STATUS RSP List - Element: ", iter+1); - - /*odtone::uint iter1; - - log_(0, " States Rsp List - Length: ", srl[iter].rsp.states_rsp_list.size()); - //States Rsp List (vector) - for(iter1=0; iter1 - } - - log_(0, " Desc_rsp_list - Length: ", srl[iter].rsp.desc_rsp_list.size()); - //Desc_rsp_list - for(iter1=0; iter1 - //uint8 num_cos - uint8 num_queue - }*/ - } - log_(0, "receive_MIH_Link_Get_Parameters_confirm - End"); - -} - - -/** - * Capability Discover handler. - * - * @param msg Received message. - * @param ec Error Code. - */ -//----------------------------------------------------------------------------- -void mih_user::receive_MIH_Capability_Discover_confirm(odtone::mih::message& msg, const boost::system::error_code& ec) -//----------------------------------------------------------------------------- -{ - log_(0, ""); - log_(0, "receive_MIH_Capability_Discover_confirm - Begin"); - if (ec) { - log_(0, __FUNCTION__, " error: ", ec.message()); - return; - } - - odtone::mih::status st; - boost::optional ntal; - boost::optional evt; - - odtone::mih::l2_3gpp_addr local_l2_3gpp_addr; - odtone::mih::link_tuple_id li; - - msg >> odtone::mih::confirm() - & odtone::mih::tlv_status(st) - & odtone::mih::tlv_net_type_addr_list(ntal) - & odtone::mih::tlv_event_list(evt); - // MIH_TRANS_LIST could be added - - log_(0, "[MSC_MSG]["+getTimeStamp4Log()+"]["+ _mihfid.to_string() ,"][--- MIH_Capability_Discover.confirm\\nstatus=", status2string(st.get()).c_str(), - "\\nEvent list=",evt2string(evt.get()).c_str(), - "\\nNet type addr list=" , net_type_addr_list2string(ntal).c_str(), - " --->][",_mihuserid.to_string(),"]\n"); - log_(0, "\t- STATUS: ", status2string(st.get()), " " ,st.get()); - - if (evt) { - log_(0, "\t- MIH_EVT_LIST - Event List: ", evt2string(evt.get()).c_str()); - } - - //log_(0, "MIH-User has received a Capability_Discover.response with status ", - // st.get(), " and the following capabilities:"); - - log_(0, "\t- LIST(NET_TYPE_ADDR) - Network Types and Link Address:"); - - if (ntal) { - for (odtone::mih::net_type_addr_list::iterator i = ntal->begin(); i != ntal->end(); ++i) - { - local_l2_3gpp_addr = boost::get(i->addr); - li.type = boost::get(i->nettype.link); - - rcv_net_type_addr.addr = boost::get(i->addr); - rcv_net_type_addr.nettype.link = boost::get(i->nettype.link); - - rcv_link_id.addr = boost::get(i->addr); - rcv_link_id.type = boost::get(i->nettype.link); - - print_l2_3gpp_addr(li.type, local_l2_3gpp_addr); - // should be the same print - //print_l2_3gpp_addr(rcv_link_id.type, rcv_link_id.addr); - - //log_(0, *i); - } - - } else { - log_(0, "none"); - } - - log_(0, ""); - // - // event subscription - // - // For every interface the MIHF sent in the - // Capability_Discover.response send an Event_Subscribe.request - // for all availabe events - // - if (ntal && evt) { - for (odtone::mih::net_type_addr_list::iterator i = ntal->begin(); i != ntal->end(); ++i) { - odtone::mih::message req; - odtone::mih::link_tuple_id li; - - if (i->nettype.link.which() == 1) - { - li.addr = i->addr; - li.type = boost::get(i->nettype.link); - - req << odtone::mih::request(odtone::mih::request::event_subscribe, _mihfid) - & odtone::mih::tlv_link_identifier(li) - & odtone::mih::tlv_event_list(evt); - - req.destination(msg.source()); - - log_(0, "[MSC_MSG]["+getTimeStamp4Log()+"]["+ _mihuserid.to_string() +"][--- MIH_Event_Subscribe.request"+ - "\\nLink="+link_tupple_id2string(li).c_str()+ - "\\nEvent list="+evt2string(evt.get()).c_str()+ - " --->]["+_mihfid.to_string()+"]\n"); - _mihf.async_send(req, boost::bind(&mih_user::receive_MIH_Event_Subscribe_response, this, _1, _2)); - - log_(0, "MIH-User has sent Event_Subscribe.request to ", req.destination().to_string()); - - if (evt) { - log_(0, "\t- MIH_EVT_LIST - Event List: ", evt2string(evt.get()).c_str()); - } - } - } - } - log_(0, "receive_MIH_Capability_Discover_confirm - End"); -} - -/** - * Event subscribe handler. - * - * @param msg Received message. - * @param ec Error Code. - */ -//----------------------------------------------------------------------------- -void mih_user::receive_MIH_Event_Subscribe_response(odtone::mih::message& msg, const boost::system::error_code& ec) -//----------------------------------------------------------------------------- -{ - //log_(0, __FUNCTION__, "(", msg.tid(), ")"); - log_(0, ""); - log_(0, "receive_MIH_Event_Subscribe_response - Begin"); - - if (ec) { - log_(0, __FUNCTION__, " error: ", ec.message()); - return; - } - - odtone::mih::status st; - boost::optional evt; - - msg >> odtone::mih::response() - & odtone::mih::tlv_status(st) - & odtone::mih::tlv_event_list(evt); - - if (evt) { - log_(0, "[MSC_MSG]["+getTimeStamp4Log()+"]["+ _mihfid.to_string() +"][--- MIH_Event_Subscribe.response\\nstatus="+ - status2string(st.get()).c_str()+ - "\\nEvent list="+evt2string(evt.get()).c_str()+ - " --->]["+_mihuserid.to_string()+"]\n"); - } else { - log_(0, "[MSC_MSG]["+getTimeStamp4Log()+"]["+ _mihfid.to_string() +"][--- MIH_Event_Subscribe.response\\nstatus="+ - status2string(st.get()).c_str()+ - " --->]["+_mihuserid.to_string()+"]\n"); - } - log_(0, " - STATUS: ", status2string(st.get()), " " ,st.get()); - - mih_user::send_MIH_Link_Configure_Thresholds_request(msg, ec); - log_(0, "receive_MIH_Event_Subscribe_response - End"); -} - -//----------------------------------------------------------------------------- -void mih_user::send_MIH_Link_Configure_Thresholds_request(odtone::mih::message& msg, const boost::system::error_code& ec) -//----------------------------------------------------------------------------- -{ - odtone::mih::message m; - - odtone::mih::threshold th; - std::vector thl; - - odtone::mih::link_tuple_id lti; - odtone::mih::l2_3gpp_addr local_l2_3gpp_addr; - - log_(0,""); - log_(0, "send_MIH_Link_Configure_Thresholds_request - Begin"); - - //link_tuple_id - lti.type = rcv_link_id.type; - lti.addr = rcv_link_id.addr; - - local_l2_3gpp_addr = boost::get(lti.addr); - - //List of the link threshold parameters - odtone::mih::link_cfg_param_list lcpl; - odtone::mih::link_cfg_param lcp; - odtone::mih::link_param_gen lp; - - //link_param_gen_data_rate = 0, /**< Data rate. */ - //link_param_gen_signal_strength = 1, /**< Signal strength. */ - //link_param_gen_sinr = 2, /**< SINR. */ - //link_param_gen_throughput = 3, /**< Throughput. */ - //link_param_gen_packet_error_rate = 4, /**< Packet error rate. */ - lp = odtone::mih::link_param_gen_signal_strength; - - lcp.type = lp; - //th_action_normal = 0, /**< Set normal threshold. */ - //th_action_one_shot = 1, /**< Set one-shot threshold. */ - //th_action_cancel = 2 /**< Cancel threshold. */ - lcp.action = odtone::mih::th_action_one_shot; - - //above_threshold = 0, /**< Above threshold. */ - //below_threshold = 1, /**< Below threshold. */ - if (link_threshold_request == 0) { - th.threshold_val = THRESHOLD_HIGH_VAL; - th.threshold_x_dir = odtone::mih::threshold::above_threshold; - } else if (link_threshold_request == 0) { - th.threshold_val = THRESHOLD_LOW_VAL; - th.threshold_x_dir = odtone::mih::threshold::below_threshold; - } else { - th.threshold_val = THRESHOLD_LOW_VAL; - th.threshold_x_dir = odtone::mih::threshold::below_threshold; - } - - thl.push_back(th); - lcp.threshold_list = thl; - lcpl.push_back(lcp); - - m << odtone::mih::request(odtone::mih::request::link_configure_thresholds) - & odtone::mih::tlv_link_identifier(lti) - & odtone::mih::tlv_link_cfg_param_list(lcpl); - - m.destination(msg.source()); - - log_(0, "[MSC_MSG]["+getTimeStamp4Log()+"]["+ _mihuserid.to_string() +"][--- MIH_Link_Configure_Thresholds.request\\nlink="+ - link_tupple_id2string(lti).c_str() + - " --->]["+_mihfid.to_string()+"]\n"); - _mihf.async_send(m, boost::bind(&mih_user::event_handler, this, _1, _2)); - - - log_(0, "\t- LINK TUPLE ID - Network Types and Link Address:"); - print_l2_3gpp_addr(lti.type, local_l2_3gpp_addr); - - log_(0, "\t- LINK CFG PARAM LIST - Length: ", lcpl.size()); - - if(lp == odtone::mih::link_param_gen_data_rate) {log_(0, "\t Generic link parameter DATA RATE ");} - if(lp == odtone::mih::link_param_gen_signal_strength) {log_(0, "\t Generic link parameter SIGNAL STRENGTH");} - if(lp == odtone::mih::link_param_gen_sinr) {log_(0, "\t Generic link parameter SINR");} - if(lp == odtone::mih::link_param_gen_throughput) {log_(0, "\t Generic link parameter THROUGHPUT");} - - if(lcp.action == odtone::mih::th_action_normal) {log_(0, "\t Normal Threshold");} - if(lcp.action == odtone::mih::th_action_one_shot) {log_(0, "\t One Shot Threshold");} - if(lcp.action == odtone::mih::th_action_cancel) {log_(0, "\t Threshold to be canceled");} - - log_(0, "\t Threshold value: ", th.threshold_val); - - if(th.threshold_x_dir == odtone::mih::threshold::below_threshold) {log_(0, "\t Threshold direction BELOW");} - if(th.threshold_x_dir == odtone::mih::threshold::above_threshold) {log_(0, "\t Threshold direction ABOVE");} - - log_(0, "send_MIH_Link_Configure_Thresholds_request - End"); -} - -//----------------------------------------------------------------------------- -void mih_user::receive_MIH_Link_Configure_Thresholds_confirm(odtone::mih::message& msg, const boost::system::error_code& ec) -//----------------------------------------------------------------------------- -{ - log_(0, ""); - log_(0, "receive_MIH_Link_Configure_Thresholds_confirm - Begin"); - - odtone::uint iter; - odtone::mih::status st; - - //boost::optional lcsl; - odtone::mih::link_cfg_status_list lcsl; - odtone::mih::link_cfg_status lcp; - odtone::mih::link_param_gen lp; - - odtone::mih::link_tuple_id lti; - - msg >> odtone::mih::confirm() - & odtone::mih::tlv_status(st) - & odtone::mih::tlv_link_identifier(lti) - & odtone::mih::tlv_link_cfg_status_list(lcsl); - - log_(0, "[MSC_MSG]["+getTimeStamp4Log()+"]["+ _mihfid.to_string() +"][--- MIH_Link_Configure_Thresholds.confirm\\nstatus="+status2string(st.get()).c_str()+" --->]["+_mihuserid.to_string()+"]\n"); - log_(0, "\t- STATUS: ", status2string(st.get()), " " ,st.get()); - - log_(0, "\t- LINK CFG STATUS LIST - Length: ", lcsl.size()); - - for(iter=0; iter()->default_value("mih_usr.conf"), "Configuration file") - (odtone::sap::kConf_Receive_Buffer_Len, po::value()->default_value(4096), "Receive buffer length") - (odtone::sap::kConf_Port, po::value()->default_value(1234), "Listening port") - (odtone::sap::kConf_MIH_SAP_id, po::value()->default_value("user"), "MIH-User ID") - (kConf_MIH_Commands, po::value()->default_value(""), "MIH-User supported commands") - (odtone::sap::kConf_MIHF_Ip, po::value()->default_value("127.0.0.1"), "Local MIHF IP address") - (odtone::sap::kConf_MIHF_Local_Port, po::value()->default_value(1025), "Local MIHF communication port") - (odtone::sap::kConf_MIH_SAP_dest, po::value()->default_value("mihf1"), "MIHF destination"); - - odtone::mih::config cfg(desc); - cfg.parse(argc, argv, odtone::sap::kConf_File); - - if (cfg.help()) { - std::cerr << desc << std::endl; - return EXIT_SUCCESS; - } - - mih_user usr(cfg, ios); - - ios.run(); - - } catch(std::exception& e) { - log_(0, "exception: ", e.what()); - } -} - -// EOF //////////////////////////////////////////////////////////////////////// diff --git a/openair3/RAL-LTE/LTE_RAL_UE/MIH-USER/lte_test_user/ue_lte_user.conf b/openair3/RAL-LTE/LTE_RAL_UE/MIH-USER/lte_test_user/ue_lte_user.conf deleted file mode 100755 index ab40db1085..0000000000 --- a/openair3/RAL-LTE/LTE_RAL_UE/MIH-USER/lte_test_user/ue_lte_user.conf +++ /dev/null @@ -1,42 +0,0 @@ -#=============================================================================== -# Brief : MIH-User configuration file -# Authors : Carlos Guimaraes -# Bruno Santos -#------------------------------------------------------------------------------- -# ODTONE - Open Dot Twenty One -# -# Copyright (C) 2009-2012 Universidade Aveiro -# Copyright (C) 2009-2012 Instituto de Telecomunicações - Pólo Aveiro -# -# This software is distributed under a license. The full license -# agreement can be found in the file LICENSE in this distribution. -# This software may not be copied, modified, sold or distributed -# other than expressed in the named license agreement. -# -# This software is distributed without any warranty. -#=============================================================================== - -## -## User id -## -[user] -id = user_ue - -## -## Commands supported by the MIH-User -## -commands = mih_link_get_parameters, mih_link_configure_thresholds, mih_link_actions, mih_net_ho_candidate_query, mih_net_ho_commit, mih_n2n_ho_query_resources, mih_n2n_ho_commit, mih_n2n_ho_complete, mih_mn_ho_candidate_query, mih_mn_ho_commit, mih_mn_ho_complete - -## -## Port used for communication with MIHF -## -[conf] -port = 1235 - -## -## MIHF configuration. For the default demonstration leave as is. -## -[mihf] -local_port = 1025 - - diff --git a/openair3/RAL-LTE/LTE_RAL_UE/MIH-USER/lte_test_user/ue_lte_user.cpp b/openair3/RAL-LTE/LTE_RAL_UE/MIH-USER/lte_test_user/ue_lte_user.cpp deleted file mode 100755 index 08ee34b3e9..0000000000 --- a/openair3/RAL-LTE/LTE_RAL_UE/MIH-USER/lte_test_user/ue_lte_user.cpp +++ /dev/null @@ -1,1412 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include - -#include -#include -#include - -/////////////////////////////////////////////////////////////////////////////// - -// Definition of the scenario to execute -#define NB_OF_RESOURCES 4 // Should not exceed mih_user::_max_link_action_requests -//#define SCENARIO_1 // Sequentially activate and deactivate each resource -//#define SCENARIO_2 // Activate all resources, then deactivate all resources -#define NUM_PARM_REPORT 10 - -/////////////////////////////////////////////////////////////////////////////// -// The scenario coded in this MIH-USER demo is the following -// +--------+ +-----+ +---------+ -// |MIH_USER| |MIH-F| |LINK_SAP | -// +---+----+ +--+--+ +----+----+ -// | | | -// ... (start of MIH-F here) ... ... -// | |---------- Link_Capability_Discover.request --------X| -// ... (start of LINK_SAP here) ... ... -// | |<--------- Link_Register.indication -----------------| -// | |---------- Link_Capability_Discover.request -------->| -// | |<--------- Link_Capability_Discover.confirm ---------| -// | | | -// ... (start of MIH USER here) ... ... -// |---------- MIH_User_Register.indication ------------>| (supported_commands) | -// | | | -// |---------- MIH_Capability_Discover.request --------->| | -// |<--------- MIH_Capability_Discover.confirm ----------| | -// | | | -// |---------- MIH_Event_Subscribe.request ------------->|---------- Link_Event_Subscribe.request ------------>| -// |<--------- MIH_Event_Subscribe.confirm --------------|<--------- Link_Event_Subscribe.confirm -------------| -// | | | -// |---------- MIH_Link_Actions.request ---------------->|---------- Link_Actions.request -------------------->| -// | (POWER UP + SCAN) | (POWER UP + SCAN) | -// ... ... ... -// | | | -// |<--------- Link_Detected.indication -----------------|<--------- Link_Detected.indication -----------------| -// | | | -// |<--------- Link_Up.indication -----------------------|<--------- Link_Up.indication -----------------------| -// | | RRC Connection Reestablishment notification) | -// | | | -// |---------- MIH_Link_Configure_Thresholds.request --->|---------- Link_Configure_Thresholds.request ------->| -// | | | -// |<--------- Link_Up.indication -----------------------|<--------- Link_Up.indication -----------------------| -// | | (RRC Connection reconfiguration notification) | -// |<--------- MIH_Link_Configure_Thresholds.confirm ----|<--------- Link_Configure_Thresholds.confirm --------| -// | | | -// |<--------- MIH_Link_Parameters_Report.indication ----|<--------- MIH_Link_Parameters_Report.indication ----| -// ... ... ... -// |<--------- MIH_Link_Actions.confirm -----------------|<--------- Link_Actions.confirm ---------------------| -// | (Success) | | -// |<--------- MIH_Link_Parameters_Report.indication ----|<--------- MIH_Link_Parameters_Report.indication ----| -// ... ... ... -// |<--------- MIH_Link_Parameters_Report.indication ----|<--------- MIH_Link_Parameters_Report.indication ----| -// ... ... ... -// |<--------- MIH_Link_Parameters_Report.indication ----|<--------- MIH_Link_Parameters_Report.indication ----| -// ... ... ... -// etc etc etc - -/////////////////////////////////////////////////////////////////////////////// - -static const char* const kConf_MIH_Commands = "user.commands"; - -/////////////////////////////////////////////////////////////////////////////// - -namespace po = boost::program_options; - -using odtone::uint; -using odtone::ushort; -using odtone::sint8; - -odtone::logger log_("[mih_usr]", std::cout); - -/////////////////////////////////////////////////////////////////////////////// - -//----------------------------------------------------------------------------- -void __trim(odtone::mih::octet_string &str, const char chr) -//----------------------------------------------------------------------------- -{ - str.erase(std::remove(str.begin(), str.end(), chr), str.end()); -} -//----------------------------------------------------------------------------- -template std::string StringOf(T object) { -//----------------------------------------------------------------------------- - std::ostringstream os; - os << object; - return(os.str()); -} -//----------------------------------------------------------------------------- -std::string getTimeStamp4Log() -//----------------------------------------------------------------------------- -{ - std::stringstream ss (std::stringstream::in | std::stringstream::out); - struct timespec time_spec; - unsigned int time_now_micros; - unsigned int time_now_s; - clock_gettime (CLOCK_REALTIME, &time_spec); - time_now_s = (unsigned int) time_spec.tv_sec % 3600; - time_now_micros = (unsigned int) time_spec.tv_nsec/1000; - ss << time_now_s << ':' << time_now_micros; - return ss.str(); -} -//----------------------------------------------------------------------------- -std::string status2string(odtone::mih::status statusP){ -//----------------------------------------------------------------------------- - switch (statusP.get()) { - case odtone::mih::status_success: return "SUCCESS";break; - case odtone::mih::status_failure: return "UNSPECIFIED_FAILURE";break; - case odtone::mih::status_rejected: return "REJECTED";break; - case odtone::mih::status_authorization_failure: return "AUTHORIZATION_FAILURE";break; - case odtone::mih::status_network_error: return "NETWORK_ERROR";break; - default: return "UNKNOWN"; - } -} -//----------------------------------------------------------------------------- -std::string link_down_reason2string(odtone::mih::link_dn_reason reasonP){ -//----------------------------------------------------------------------------- - switch (reasonP.get()) { - case odtone::mih::link_dn_reason_explicit_disconnect: return "DN_REASON_EXPLICIT_DISCONNECT";break; - case odtone::mih::link_dn_reason_packet_timeout: return "DN_REASON_PACKET_TIMEOUT";break; - case odtone::mih::link_dn_reason_no_resource: return "DN_REASON_NO_RESOURCE";break; - case odtone::mih::link_dn_reason_no_broadcast: return "DN_REASON_NO_BROADCAST";break; - case odtone::mih::link_dn_reason_authentication_failure: return "DN_REASON_AUTHENTICATION_FAILURE";break; - case odtone::mih::link_dn_reason_billing_failure: return "DN_REASON_BILLING_FAILURE";break; - default: return "DN_REASON_UNKNOWN"; - } -} -//----------------------------------------------------------------------------- -std::string link_going_down_reason2string(odtone::mih::link_gd_reason reasonP){ -//----------------------------------------------------------------------------- - switch (reasonP.get()) { - case odtone::mih::link_gd_reason_explicit_disconnect: return "GD_REASON_EXPLICIT_DISCONNECT";break; - case odtone::mih::link_gd_reason_link_parameter_degrading: return "GD_REASON_PARAMETER_DEGRADING";break; - case odtone::mih::link_gd_reason_low_power: return "GD_REASON_LOW_POWER";break; - case odtone::mih::link_gd_reason_no_resource: return "GD_REASON_NO_RESOURCE";break; - default: return "GD_REASON_UNKNOWN"; - } -} -//----------------------------------------------------------------------------- -std::string evt2string(odtone::mih::mih_evt_list evtP){ -//----------------------------------------------------------------------------- - std::string s=std::string(" "); - if(evtP.get(odtone::mih::mih_evt_link_detected)) s += "DETECTED "; - if(evtP.get(odtone::mih::mih_evt_link_up)) s += "UP "; - if(evtP.get(odtone::mih::mih_evt_link_down)) s += "DOWN "; - if(evtP.get(odtone::mih::mih_evt_link_parameters_report)) s += "PARAMETERS_REPORT "; - if(evtP.get(odtone::mih::mih_evt_link_going_down)) s += "GOING_DOWN "; - if(evtP.get(odtone::mih::mih_evt_link_handover_imminent)) s += "HANDOVER_IMMINENT "; - if(evtP.get(odtone::mih::mih_evt_link_handover_complete)) s += "HANDOVER_COMPLETE "; - if(evtP.get(odtone::mih::mih_evt_link_pdu_transmit_status)) s += "PDU_TRANSMIT_STATUS "; - return s; -} -//----------------------------------------------------------------------------- -std::string cmd2string(odtone::mih::mih_cmd_list cmdP){ -//----------------------------------------------------------------------------- - std::string s=std::string(" "); - if(cmdP.get(odtone::mih::mih_cmd_link_get_parameters)) s += "Link_Get_Parameters "; - if(cmdP.get(odtone::mih::mih_cmd_link_configure_thresholds)) s += "Link_Configure_Thresholds "; - if(cmdP.get(odtone::mih::mih_cmd_link_actions)) s += "Link_Actions "; - if(cmdP.get(odtone::mih::mih_cmd_net_ho_candidate_query)) s += "Net_HO_Candidate_Query "; - if(cmdP.get(odtone::mih::mih_cmd_net_ho_commit)) s += "Net_HO_Commit "; - if(cmdP.get(odtone::mih::mih_cmd_n2n_ho_query_resources)) s += "N2N_HO_Query_Resources "; - if(cmdP.get(odtone::mih::mih_cmd_n2n_ho_commit)) s += "N2N_HO_Commit "; - if(cmdP.get(odtone::mih::mih_cmd_n2n_ho_complete)) s += "N2N_HO_Complete "; - if(cmdP.get(odtone::mih::mih_cmd_mn_ho_candidate_query)) s += "MN_HO_Candidate_Query "; - if(cmdP.get(odtone::mih::mih_cmd_mn_ho_commit)) s += "MN_HO_Commit "; - if(cmdP.get(odtone::mih::mih_cmd_mn_ho_complete)) s += "MN_HO_Complete "; - return s; -} -//----------------------------------------------------------------------------- -std::string link_type2string(const odtone::mih::link_type& lt) -//----------------------------------------------------------------------------- -{ - switch (lt.get()) { - case odtone::mih::link_type_gsm: return "GSM"; break; - case odtone::mih::link_type_gprs: return "GPRS"; break; - case odtone::mih::link_type_edge: return "EDGE"; break; - case odtone::mih::link_type_ethernet: return "Ethernet"; break; - case odtone::mih::link_type_wireless_other: return "Other"; break; - case odtone::mih::link_type_802_11: return "IEEE 802.11"; break; - case odtone::mih::link_type_cdma2000: return "CDMA-2000"; break; - case odtone::mih::link_type_umts: return "UMTS"; break; - case odtone::mih::link_type_cdma2000_hrpd: return "CDMA-2000-HRPD"; break; - case odtone::mih::link_type_lte: return "LTE"; break; - case odtone::mih::link_type_802_16: return "IEEE 802.16"; break; - case odtone::mih::link_type_802_20: return "IEEE 802.20"; break; - case odtone::mih::link_type_802_22: return "IEEE 802.22"; break; - default: break; - } - return "Unknown link type"; -} -//----------------------------------------------------------------------------- -std::string link_addr2string(const odtone::mih::link_addr *addr) -//----------------------------------------------------------------------------- -{ - if (const odtone::mih::mac_addr *la = boost::get(addr)) { - return la->address(); - } - else if (const odtone::mih::l2_3gpp_3g_cell_id *la = boost::get(addr)) { - char plmn[16]; - sprintf(plmn, "%hhx:%hhx:%hhx", la->plmn_id[0], la->plmn_id[1], la->plmn_id[2]); - return str(boost::format("%s %d") % plmn % la->_cell_id); - } - else if (const odtone::mih::l2_3gpp_2g_cell_id *la = boost::get(addr)) { - char plmn[16]; - sprintf(plmn, "%hhx:%hhx:%hhx", la->plmn_id[0], la->plmn_id[1], la->plmn_id[2]); - return str(boost::format("%s %d %d") % plmn % la->_lac % la->_ci); - } - else if (const odtone::mih::l2_3gpp_addr *la = boost::get(addr)) { - return la->value; - } - else if (const odtone::mih::l2_3gpp2_addr *la = boost::get(addr)) { - return la->value; - } - else if (const odtone::mih::other_l2_addr *la = boost::get(addr)) { - return la->value; - } - return "null"; -} -//----------------------------------------------------------------------------- -std::string l2_3gpp_3g_cell_id2string(odtone::mih::l2_3gpp_3g_cell_id& addr) -//----------------------------------------------------------------------------- -{ - char buffer[256]; - int index = 0; - - index += std::sprintf(&buffer[index], "plmn: -%hhx--%hhx--%hhx-\n", addr.plmn_id[0], addr.plmn_id[1], addr.plmn_id[2]); - index += std::sprintf(&buffer[index], "cell_id: %hhx\n", addr._cell_id); - return buffer; -} -//----------------------------------------------------------------------------- -std::string link_id2string(odtone::mih::link_id linkP) -//----------------------------------------------------------------------------- -{ - std::string s; - s = link_type2string(linkP.type.get()) + " " + link_addr2string(&linkP.addr); - return s; -} -//----------------------------------------------------------------------------- -std::string ip_addr2string(odtone::mih::ip_addr ip_addrP) { -//----------------------------------------------------------------------------- - std::string s; - switch (ip_addrP.type()) { - case odtone::mih::ip_addr::ipv4: s = "ipv4 "; break; - case odtone::mih::ip_addr::ipv6: s = "ipv6 "; break; - default: s = "Unkown type "; - } - s += ip_addrP.address(); - return s; -} -//----------------------------------------------------------------------------- -std::string ip_tuple2string(odtone::mih::ip_tuple ip_tupleP) { -//----------------------------------------------------------------------------- - char buffer[128]; - std::snprintf(buffer, 128, "%s/%d", ip_addr2string(ip_tupleP.ip).c_str(), ip_tupleP.port_val); - return buffer; -} -//----------------------------------------------------------------------------- -std::string ip_proto2string(odtone::mih::proto ip_protoP) { -//----------------------------------------------------------------------------- - switch (ip_protoP.get()) { - case odtone::mih::proto_tcp: return "TCP"; - case odtone::mih::proto_udp: return "UDP"; - default: break; - } - return "Unknown IP protocol"; -} -// TEMP : next 2 functions are commented to restore flow_id as a uint32 -// full structure will be updated later -/*//----------------------------------------------------------------------------- -std::string flow_id2string(odtone::mih::flow_id flowP) { -//----------------------------------------------------------------------------- - std::string s; - odtone::mih::ip_tuple ip; - ip = flowP.src; - s = "SRC = " + ip_tuple2string(flowP.src); - s += ", DST = " + ip_tuple2string(flowP.dst); - s += ", PROTO = " + ip_proto2string(flowP.transport); - return s; -} -//----------------------------------------------------------------------------- -std::string flow_id2string(odtone::mih::link_ac_param link_ac_paramP) { -//----------------------------------------------------------------------------- - if (odtone::mih::resource_desc *res = boost::get(&link_ac_paramP.param)) { - return flow_id2string(res->fid); - } - else if (odtone::mih::flow_attribute *flow = boost::get(&link_ac_paramP.param)) { - return flow_id2string(flow->id); - } - return "null"; -}*/ -//----------------------------------------------------------------------------- -std::string link_ac_result2string(odtone::mih::link_ac_result resultP) -//----------------------------------------------------------------------------- -{ - switch (resultP.get()) { - case odtone::mih::link_ac_success: return "SUCCESS"; break; - case odtone::mih::link_ac_failure: return "FAILURE"; break; - case odtone::mih::link_ac_refused: return "REFUSED"; break; - case odtone::mih::link_ac_incapable: return "INCAPABLE"; break; - default: break; - } - return "Unknown action result"; -} -//----------------------------------------------------------------------------- -std::string link_actions_req2string(odtone::mih::link_action_req link_act_reqP) { -//----------------------------------------------------------------------------- - std::string s; - - s = link_id2string(link_act_reqP.id); - - if(link_act_reqP.action.type == odtone::mih::link_ac_type_none) s += ", AC_TYPE_NONE"; - if(link_act_reqP.action.type == odtone::mih::link_ac_type_disconnect) s += ", AC_TYPE_DISCONNECT"; - if(link_act_reqP.action.type == odtone::mih::link_ac_type_low_power) s += ", AC_TYPE_LOW_POWER"; - if(link_act_reqP.action.type == odtone::mih::link_ac_type_power_down) s += ", AC_TYPE_POWER_DOWN"; - if(link_act_reqP.action.type == odtone::mih::link_ac_type_power_up) s += ", AC_TYPE_POWER_UP"; - if(link_act_reqP.action.type == odtone::mih::link_ac_type_flow_attr) s += ", AC_TYPE_FLOW_ATTR"; - if(link_act_reqP.action.type == odtone::mih::link_ac_type_link_activate_resources) s += ", AC_TYPE_ACTIVATE_RESOURCES"; - if(link_act_reqP.action.type == odtone::mih::link_ac_type_link_deactivate_resources) s += ", AC_TYPE_DEACTIVATE_RESOURCES"; - - if(link_act_reqP.action.attr.get(odtone::mih::link_ac_attr_data_fwd_req)) s += ", AC_ATTR_DATA_FWD_REQ"; - if(link_act_reqP.action.attr.get(odtone::mih::link_ac_attr_scan)) s += ", AC_ATTR_SCAN"; - if(link_act_reqP.action.attr.get(odtone::mih::link_ac_attr_res_retain)) s += ", AC_ATTR_RES_RETAIN"; - - s += ", " + StringOf(link_act_reqP.ex_time) + " ms"; - return s; -} -//----------------------------------------------------------------------------- -std::string net_type_addr_list2string(boost::optional ntalP) { -//----------------------------------------------------------------------------- - std::string s; - std::ostringstream stream; - odtone::mih::net_type_addr net_type_addr; - - for (odtone::mih::net_type_addr_list::iterator i = ntalP->begin(); i != ntalP->end(); i++) - { - net_type_addr = boost::get(*i); - stream << net_type_addr; - if (i != ntalP->begin()) { - stream << " / "; - } - } - s = stream.str(); - return s; -} - - - -/** - * Parse supported commands. - * - * @param cfg Configuration options. - * @return An optional list of supported commands. - */ -boost::optional parse_supported_commands(const odtone::mih::config &cfg) -{ - using namespace boost; - - odtone::mih::mih_cmd_list commands; - - std::map enum_map; - enum_map["mih_link_get_parameters"] = odtone::mih::mih_cmd_link_get_parameters; - enum_map["mih_link_configure_thresholds"] = odtone::mih::mih_cmd_link_configure_thresholds; - enum_map["mih_link_actions"] = odtone::mih::mih_cmd_link_actions; - enum_map["mih_net_ho_candidate_query"] = odtone::mih::mih_cmd_net_ho_candidate_query; - enum_map["mih_net_ho_commit"] = odtone::mih::mih_cmd_net_ho_commit; - enum_map["mih_n2n_ho_query_resources"] = odtone::mih::mih_cmd_n2n_ho_query_resources; - enum_map["mih_n2n_ho_commit"] = odtone::mih::mih_cmd_n2n_ho_commit; - enum_map["mih_n2n_ho_complete"] = odtone::mih::mih_cmd_n2n_ho_complete; - enum_map["mih_mn_ho_candidate_query"] = odtone::mih::mih_cmd_mn_ho_candidate_query; - enum_map["mih_mn_ho_commit"] = odtone::mih::mih_cmd_mn_ho_commit; - enum_map["mih_mn_ho_complete"] = odtone::mih::mih_cmd_mn_ho_complete; - - std::string tmp = cfg.get(kConf_MIH_Commands); - __trim(tmp, ' '); - - char_separator sep1(","); - tokenizer< char_separator > list_tokens(tmp, sep1); - - BOOST_FOREACH(std::string str, list_tokens) { - if(enum_map.find(str) != enum_map.end()) { - commands.set((odtone::mih::mih_cmd_list_enum) enum_map[str]); - } - } - - return commands; -} - -/////////////////////////////////////////////////////////////////////////////// -/** - * This class provides an implementation of an IEEE 802.21 MIH-User. - */ -class mih_user : boost::noncopyable { -public: - /** - * Construct the MIH-User. - * - * @param cfg Configuration options. - * @param io The io_service object that the MIH-User will use to - * dispatch handlers for any asynchronous operations performed on the socket. - */ - mih_user(const odtone::mih::config& cfg, boost::asio::io_service& io); - - /** - * Destruct the MIH-User. - */ - ~mih_user(); - -protected: - /** - * User registration handler. - * - * @param cfg Configuration options. - * @param ec Error Code. - */ - void user_reg_handler(const odtone::mih::config& cfg, const boost::system::error_code& ec); - /** - * Default MIH event handler. - * - * @param msg Received event notification. - * @param ec Error code. - */ - void event_handler(odtone::mih::message& msg, const boost::system::error_code& ec); - /** - * MIH receive message handler. - * - * @param msg Received message. - * @param ec Error code. - */ - void receive_handler(odtone::mih::message& msg, const boost::system::error_code& ec); - - void send_MIH_User_Register_indication(const odtone::mih::config& cfg); - - void send_MIH_Capability_Discover_request(void); - void receive_MIH_Capability_Discover_confirm(odtone::mih::message& msg); - - void send_MIH_Event_Subscribe_request(odtone::mih::link_tuple_id& li, odtone::mih::mih_evt_list& evt); - void receive_MIH_Event_Subscribe_confirm(odtone::mih::message& msg); - - void send_MIH_Event_Unsubscribe_request(void); - void send_MIH_Event_Unsubscribe_request(odtone::mih::link_tuple_id& li, odtone::mih::mih_evt_list& evt); - void receive_MIH_Event_Unsubscribe_confirm(odtone::mih::message& msg); - - void send_MIH_Link_Actions_request(const odtone::mih::link_id& link, odtone::mih::link_ac_type type); - void receive_MIH_Link_Actions_confirm(odtone::mih::message& msg); - void receive_MIH_Link_Parameters_Report(odtone::mih::message& msg, const boost::system::error_code& ec); - - void send_MIH_Link_Configure_Thresholds_request(odtone::mih::message& msg, const boost::system::error_code& ec); - void receive_MIH_Link_Configure_Thresholds_confirm(odtone::mih::message& msg, const boost::system::error_code& ec); - -private: - odtone::sap::user _mihf; /**< User SAP helper. */ - odtone::mih::id _mihfid; /**< MIHF destination ID. */ - odtone::mih::id _mihuserid; /**< MIH_USER ID. */ - - odtone::mih::ip_addr _mihf_ip; /**< MIHF IP address */ - odtone::mih::port _mihf_lport; /**< MIHF local port number */ - - odtone::mih::link_id_list _link_id_list; /**< List of network link identifiers */ - odtone::mih::mih_evt_list _subs_evt_list; /**< List of subscribed link events */ - - odtone::mih::link_ac_type _last_link_action_type; - odtone::uint _current_link_action_request, _nb_of_link_action_requests; - odtone::uint link_threshold_request, link_measures_request, link_measures_counter; - odtone::mih::link_id rcv_link_id; - - static const odtone::uint _max_link_action_requests = 4; - odtone::uint _num_thresholds_request; - - void receive_MIH_Link_Detected_indication(odtone::mih::message& msg); - void send_MIH_Link_Action_Power_Up_plus_scan_request(const odtone::mih::link_id& link); - void receive_MIH_Link_Up_indication(odtone::mih::message& msg); - - void receive_MIH_Link_Down_indication(odtone::mih::message& msg); - - void receive_MIH_Link_Going_Down_indication(odtone::mih::message& msg); - -}; - -//----------------------------------------------------------------------------- -mih_user::mih_user(const odtone::mih::config& cfg, boost::asio::io_service& io) - : _mihf(cfg, io, boost::bind(&mih_user::event_handler, this, _1, _2)), - _last_link_action_type(odtone::mih::link_ac_type_none), - _current_link_action_request(0), _nb_of_link_action_requests(NB_OF_RESOURCES), _num_thresholds_request(0) -//----------------------------------------------------------------------------- -{ - odtone::mih::octet_string user_id = cfg.get(odtone::sap::kConf_MIH_SAP_id); - _mihuserid.assign(user_id.c_str()); - - odtone::mih::octet_string dest_id = cfg.get(odtone::sap::kConf_MIH_SAP_dest); - _mihfid.assign(dest_id.c_str()); - - odtone::mih::octet_string src = cfg.get(odtone::sap::kConf_MIHF_Ip); - boost::asio::ip::address ip = boost::asio::ip::address::from_string(src); - if (ip.is_v4()) { - odtone::mih::ip_addr ip_addr(odtone::mih::ip_addr::ipv4, src); - _mihf_ip = ip_addr; - } else if (ip.is_v6()) { - odtone::mih::ip_addr ip_addr(odtone::mih::ip_addr::ipv6, src); - _mihf_ip = ip_addr; - } - - _mihf_lport = cfg.get(odtone::sap::kConf_MIHF_Local_Port); - - //_nb_of_link_action_requests = NB_OF_RESOURCES; - if (_nb_of_link_action_requests > _max_link_action_requests) { - _nb_of_link_action_requests = _max_link_action_requests; - } - - _link_id_list.clear(); - _subs_evt_list.clear(); - link_threshold_request = 0; - link_measures_request =0; - link_measures_counter =0; - log_(0, "[MSC_NEW]["+getTimeStamp4Log()+"][MIH-USER="+_mihuserid.to_string()+"]\n"); - - // Send MEDIEVAL specific MIH_User_Register.indication message to the MIH-F - mih_user::send_MIH_User_Register_indication(cfg); -} - -//----------------------------------------------------------------------------- -mih_user::~mih_user() -//----------------------------------------------------------------------------- -{ -} - -//----------------------------------------------------------------------------- -void mih_user::user_reg_handler(const odtone::mih::config& cfg, const boost::system::error_code& ec) -//----------------------------------------------------------------------------- -{ - log_(0, "MIH-User register result: ", ec.message(), "\n"); - - // - // Let's fire a capability discover request to get things moving - // - mih_user::send_MIH_Capability_Discover_request(); -} - -//----------------------------------------------------------------------------- -void mih_user::event_handler(odtone::mih::message& msg, const boost::system::error_code& ec) -//----------------------------------------------------------------------------- -{ - if (ec) { - log_(0, __FUNCTION__, " error: ", ec.message()); - return; - } - - switch (msg.mid()) { - case odtone::mih::indication::link_detected: - mih_user::receive_MIH_Link_Detected_indication(msg); - break; - - case odtone::mih::indication::link_up: - mih_user::receive_MIH_Link_Up_indication(msg); - if (_num_thresholds_request == 0) { - mih_user::send_MIH_Link_Configure_Thresholds_request(msg, ec); - _num_thresholds_request += 1;; - } - break; - - case odtone::mih::indication::link_down: - mih_user::receive_MIH_Link_Down_indication(msg); - break; - - case odtone::mih::indication::link_going_down: - mih_user::receive_MIH_Link_Going_Down_indication(msg); - break; - - case odtone::mih::indication::link_handover_imminent: - log_(0, "MIH-User has received a local event \"link_handover_imminent\""); - break; - - case odtone::mih::indication::link_handover_complete: - log_(0, "MIH-User has received a local event \"link_handover_complete\""); - break; - - case odtone::mih::indication::link_parameters_report: - //log_(0, "MIH-User has received a local event \"link_parameters_report\""); - mih_user::receive_MIH_Link_Parameters_Report(msg, ec); - /*if (link_threshold_request == 0){ - mih_user::send_MIH_Link_Configure_Thresholds_request(msg, ec); - link_threshold_request =1; - } else if (link_threshold_request == 1){ - link_measures_counter ++; - // Stop measures after 5 reports - if (link_measures_counter == NUM_PARM_REPORT){ - mih_user::send_MIH_Link_Configure_Thresholds_request(msg, ec); - } - }*/ - break; - - case odtone::mih::indication::link_pdu_transmit_status: - log_(0, "MIH-User has received a local event \"link_pdu_transmit_status\""); - break; - - case odtone::mih::confirm::link_configure_thresholds: - mih_user::receive_MIH_Link_Configure_Thresholds_confirm(msg, ec); - break; - - default: - log_(0, "MIH-User has received UNKNOWN local event"); - break; - } -} - -//----------------------------------------------------------------------------- -void mih_user::receive_handler(odtone::mih::message& msg, const boost::system::error_code& ec) -//----------------------------------------------------------------------------- -{ - if (ec) { - log_(0, __FUNCTION__, " error: ", ec.message()); - return; - } - - switch (msg.mid()) { - - case odtone::mih::confirm::capability_discover: - mih_user::receive_MIH_Capability_Discover_confirm(msg); - break; - - case odtone::mih::confirm::event_subscribe: - mih_user::receive_MIH_Event_Subscribe_confirm(msg); - break; - - case odtone::mih::confirm::event_unsubscribe: - mih_user::receive_MIH_Event_Unsubscribe_confirm(msg); - break; - - case odtone::mih::confirm::link_actions: - mih_user::receive_MIH_Link_Actions_confirm(msg); - break; - - default: - log_(0, "MIH-User has received UNKNOWN message (", msg.mid(), ")\n"); - break; - } -} - -//----------------------------------------------------------------------------- -void mih_user::receive_MIH_Link_Detected_indication(odtone::mih::message& msg) -//----------------------------------------------------------------------------- -{ - log_(0, "MIH_Link_Detected.indication - RECEIVED - Begin\n"); - odtone::mih::link_det_info ldi; - odtone::mih::link_det_info_list ldil; - odtone::mih::link_det_info_list::iterator it_ldil; - odtone::mih::link_id lid; - - msg >> odtone::mih::indication() & odtone::mih::tlv_link_det_info_list(ldil); - - log_(0, "[MSC_MSG]["+getTimeStamp4Log()+"]["+ msg.source().to_string() +"][--- MIH_Link_Detected.indication --->]["+msg.destination().to_string()+"]\n"); - for(it_ldil = ldil.begin(); it_ldil != ldil.end(); it_ldil++) { - ldi = *it_ldil; - log_(0, "\tMIH_Link_Detected.indication - network_id:........", ldi.network_id.c_str()); - log_(0, "\tMIH_Link_Detected.indication - net_aux_id:........", ldi.net_aux_id.c_str()); - log_(0, "\tMIH_Link_Detected.indication - sig_strength:......TO DO");//, ldi.signal); - log_(0, "\tMIH_Link_Detected.indication - sinr:..............", ldi.sinr); - log_(0, "\tMIH_Link_Detected.indication - data_rate:.........", ldi.data_rate); - log_(0, "\tMIH_Link_Detected.indication - data_rate:.........", ldi.data_rate); - log_(0, "\tMIH_Link_Detected.indication - mih_capabilities:..", ldi.data_rate); - log_(0, "\tMIH_Link_Detected.indication - net_capabilities:..TO DO");//, ldi.net_capabilities); - - } - // Display message parameters - // TODO: for each link_det_info in the list {display LINK_DET_INFO} - - // send Link_Action / Power Up - lid.type = odtone::mih::link_type_lte; - lid.addr = ldi.id.addr; - //send_MIH_Link_Action_Power_Up_plus_scan_request(lid); - log_(0, "MIH_Link_Detected.indication - End\n"); -} - - -//----------------------------------------------------------------------------- -void mih_user::send_MIH_Link_Action_Power_Up_plus_scan_request(const odtone::mih::link_id& link) -//----------------------------------------------------------------------------- -{ - odtone::mih::message m; - odtone::mih::link_action_list lal; - odtone::mih::link_action_req link_act_req; - //struct null n; - - link_act_req.id = link; - link_act_req.action.type = odtone::mih::link_ac_type_power_up; - link_act_req.action.attr.clear(); - link_act_req.action.attr.set(odtone::mih::link_ac_attr_scan); - - link_act_req.ex_time = 5000; // in ms - - lal.push_back(link_act_req); - - m << odtone::mih::request(odtone::mih::request::link_actions) - & odtone::mih::tlv_link_action_list(lal); - m.source(_mihuserid); - m.destination(_mihfid); - - log_(0, "[MSC_MSG]["+getTimeStamp4Log()+"]["+ m.source().to_string() +"][--- MIH_Link_Actions.request\\n"+link_actions_req2string(link_act_req)+" --->]["+m.destination().to_string()+"]\n"); - - _mihf.async_send(m, boost::bind(&mih_user::receive_handler, this, _1, _2)); - - log_(0, "MIH-User has sent Link_Actions.request to ", m.destination().to_string()); - log_(0, " - LINK_ID - Link identifier: ", link_id2string(link).c_str()); - log_(0, " - LINK_ACTIONS - Link Actions: " + link_actions_req2string(link_act_req) + "\n"); - - log_(0, "MIH_Link_Action_Power_Up_request - SENT\n"); -} - -//----------------------------------------------------------------------------- -void mih_user::receive_MIH_Link_Up_indication(odtone::mih::message& msg) -//----------------------------------------------------------------------------- -{ - log_(0, "MIH_Link_Up.indication - RECEIVED - Begin\n"); - - odtone::mih::link_tuple_id link; -// odtone::mih::tlv_old_access_router oldAR; - - msg >> odtone::mih::indication() & odtone::mih::tlv_link_identifier(link); -// & odtone::mih::tlv_old_access_router(oar); - - log_(0, "[MSC_MSG]["+getTimeStamp4Log()+"]["+ msg.source().to_string() +"][--- MIH_Link_Up.indication --->]["+msg.destination().to_string()+"]\n"); - - // Display message parameters - log_(0, " - LINK_ID - Link identifier: ", link_id2string(link).c_str(), "\n"); - - log_(0, "MIH_Link_Up.indication - End\n"); -} - -//----------------------------------------------------------------------------- -void mih_user::receive_MIH_Link_Down_indication(odtone::mih::message& msg) -//----------------------------------------------------------------------------- -{ - odtone::mih::link_tuple_id link; - boost::optional addr; - odtone::mih::link_dn_reason ldr; - - log_(0, "MIH_Link_Down.indication - RECEIVED - Begin\n"); - msg >> odtone::mih::indication() - & odtone::mih::tlv_link_identifier(link) - & odtone::mih::tlv_old_access_router(addr) - & odtone::mih::tlv_link_dn_reason(ldr); - -// log_(0, "[MSC_MSG]["+getTimeStamp4Log()+"]["+ msg.source().to_string() +"][--- MIH_Link_Down.indication\\n"+link_down_reason2string(ldr).c_str()+" --->]["+msg.destination().to_string()+"]\n"); - - //Display message parameters - log_(0, " - LINK_ID - Link identifier: ", link_id2string(link).c_str(), "\n"); -// log_(0, " - LINK_DN_REASON - Link down reason: ", link_down_reason2string(ldr).c_str(), "\n"); - - log_(0, "MIH_Link_Down.indication - End\n"); -} - -//----------------------------------------------------------------------------- -void mih_user::receive_MIH_Link_Going_Down_indication(odtone::mih::message& msg) -//----------------------------------------------------------------------------- -{ - log_(0, "MIH_Link_Going_Down.indication - RECEIVED - Begin\n"); - - odtone::mih::link_tuple_id link; - odtone::mih::link_gd_reason lgd; - odtone::mih::link_ac_ex_time ex_time; - - msg >> odtone::mih::indication() - & odtone::mih::tlv_link_identifier(link) - & odtone::mih::tlv_time_interval(ex_time) - & odtone::mih::tlv_link_gd_reason(lgd); - - log_(0, "[MSC_MSG]["+getTimeStamp4Log()+"]["+ msg.source().to_string() +"][--- MIH_Link_Going_Down.indication\\n"+link_going_down_reason2string(lgd).c_str()+" --->]["+msg.destination().to_string()+"]\n"); - - // Display message parameters - log_(0, " - LINK_ID - Link identifier: ", link_id2string(link).c_str()); - log_(0, " - Time Interval:", (ex_time/256)); - log_(0, " - LINK_GD_REASON - Link going down reason: ", link_going_down_reason2string(lgd).c_str(), "\n"); - - log_(0, "MIH_Link_Going_Down.indication - End\n"); -} - -//----------------------------------------------------------------------------- -void mih_user::receive_MIH_Link_Parameters_Report(odtone::mih::message& msg, const boost::system::error_code& ec) -//----------------------------------------------------------------------------- -{ - odtone::mih::link_tuple_id link; - odtone::mih::link_param_rpt_list lprl; - - msg >> odtone::mih::indication() - & odtone::mih::tlv_link_identifier(link) - & odtone::mih::tlv_link_param_rpt_list(lprl); - - log_(0, ""); - log_(0, "MIH_Link_Parameters_Report.indication - RECEIVED - Begin"); - log_(0, "[MSC_MSG]["+getTimeStamp4Log()+"]["+ msg.source().to_string() +"][--- MIH_Link_Parameters_Report.indication --->]["+msg.destination().to_string()+"]\n"); - log_(0, " - LINK_TUPLE_ID - Link identifier: ", link_id2string(link).c_str()); - log_(0, "MIH_Link_Parameters_Report.indication - End"); -} - - -//----------------------------------------------------------------------------- -void mih_user::send_MIH_User_Register_indication(const odtone::mih::config& cfg) -//----------------------------------------------------------------------------- -{ - odtone::mih::message m; - boost::optional supp_cmd = parse_supported_commands(cfg); - - m << odtone::mih::indication(odtone::mih::indication::user_register) - & odtone::mih::tlv_command_list(supp_cmd); - m.source(_mihuserid); - m.destination(_mihfid); - - log_(0, "[MSC_MSG]["+getTimeStamp4Log()+"]["+ m.source().to_string() +"][--- MIH_User_Register.indication --->]["+m.destination().to_string()+"]\n"); - - _mihf.async_send(m, boost::bind(&mih_user::user_reg_handler, this, boost::cref(cfg), _2)); - - log_(0, "MIH_User_Register.indication - SENT (towards its local MIHF)\n"); -} - -//----------------------------------------------------------------------------- -void mih_user::send_MIH_Capability_Discover_request(void) -//----------------------------------------------------------------------------- -{ - odtone::mih::message m; - m << odtone::mih::request(odtone::mih::request::capability_discover); - m.source(_mihuserid); - m.destination(_mihfid); - - log_(0, "[MSC_MSG]["+getTimeStamp4Log()+"]["+ m.source().to_string() +"][--- MIH_Capability_Discover.request --->]["+m.destination().to_string()+"]\n"); - - _mihf.async_send(m, boost::bind(&mih_user::receive_handler, this, _1, _2)); - - log_(0, "MIH_Capability_Discover.request - SENT (towards its local MIHF)\n"); -} - -//----------------------------------------------------------------------------- -void mih_user::receive_MIH_Capability_Discover_confirm(odtone::mih::message& msg) -//----------------------------------------------------------------------------- -{ - log_(0, "MIH_Capability_Discover.confirm - RECEIVED - Begin\n"); - - odtone::mih::status st; - boost::optional ntal; - boost::optional evt; - boost::optional cmd; - - msg >> odtone::mih::confirm() - & odtone::mih::tlv_status(st) - & odtone::mih::tlv_net_type_addr_list(ntal) - & odtone::mih::tlv_event_list(evt) - & odtone::mih::tlv_command_list(cmd); - - log_(0, "[MSC_MSG]["+getTimeStamp4Log()+"]["+ msg.source().to_string() +"][--- MIH_Capability_Discover.confirm"+ - "\\nstatus="+status2string(st).c_str()+ - "\\nEvent list="+evt2string(evt.get()).c_str()+ - "\\nNet type addr list=" + net_type_addr_list2string(ntal).c_str()+ - " --->]["+msg.destination().to_string()+"]\n"); - - // Display message parameters - log_(0, " - STATUS: ", status2string(st).c_str(), " (", st.get(), ")"); - if (evt) { - log_(0, " - MIH_EVT_LIST - Event List: ", evt2string(evt.get()).c_str()); - } - if (cmd) { - log_(0, " - MIH_CMD_LIST - Command List: ", cmd2string(cmd.get()).c_str()); - } - if (ntal) { - log_(0, " - LIST(NET_TYPE_ADDR) - Network Types and Link Address: ", net_type_addr_list2string(ntal).c_str()); - //Store link address - for (odtone::mih::net_type_addr_list::iterator i = ntal->begin(); i != ntal->end(); i++) - { - rcv_link_id.addr = i->addr; - rcv_link_id.type = boost::get(i->nettype.link); - } - } - log_(0, ""); - - // - // event subscription - // - // For every interface the MIHF sent in the - // Capability_Discover.response send an Event_Subscribe.request - // for all availabe events - // - if (ntal && evt) { - _subs_evt_list = evt.get(); // save the list of subscribed link events - for (odtone::mih::net_type_addr_list::iterator i = ntal->begin(); i != ntal->end(); i++) { - if (i->nettype.link.which() == 1) - { - odtone::mih::link_tuple_id li; - - li.addr = i->addr; - li.type = boost::get(i->nettype.link); - _link_id_list.push_back(li); // save the link identifier of the network interface - - mih_user::send_MIH_Event_Subscribe_request(li, evt.get()); - } - } - } - - log_(0, "MIH_Capability_Discover.confirm - End\n"); -} - -//----------------------------------------------------------------------------- -void mih_user::send_MIH_Event_Subscribe_request(odtone::mih::link_tuple_id& li, odtone::mih::mih_evt_list& evt) -//----------------------------------------------------------------------------- -{ - odtone::mih::message m; - - m << odtone::mih::request(odtone::mih::request::event_subscribe) - & odtone::mih::tlv_link_identifier(li) - & odtone::mih::tlv_event_list(evt); - m.source(_mihuserid); - m.destination(_mihfid); - - log_(0, "[MSC_MSG]["+getTimeStamp4Log()+"]["+ m.source().to_string() +"][--- MIH_Event_Subscribe.request"+ - "\\nLink="+link_id2string(li).c_str()+ - "\\nEvent list="+evt2string(evt).c_str()+ - " --->]["+m.destination().to_string()+"]\n"); - - _mihf.async_send(m, boost::bind(&mih_user::receive_handler, this, _1, _2)); - - log_(0, "MIH-User has sent Event_Subscribe.request to ", m.destination().to_string()); - log_(0, " - LINK_TUPLE_ID - Link identifier: ", link_id2string(li).c_str()); - log_(0, " - MIH_EVT_LIST - Event List: ", evt2string(evt).c_str(), "\n"); - - log_(0, "MIH_Event_Subscribe.request - SENT\n"); -} - -//----------------------------------------------------------------------------- -void mih_user::receive_MIH_Event_Subscribe_confirm(odtone::mih::message& msg) -//----------------------------------------------------------------------------- -{ - log_(0, "MIH_Event_Subscribe.confirm(", msg.tid(), ") - RECEIVED - Begin\n"); - - odtone::mih::status st; - odtone::mih::link_tuple_id link; - boost::optional evt; - - msg >> odtone::mih::confirm() - & odtone::mih::tlv_status(st) - & odtone::mih::tlv_link_identifier(link) - & odtone::mih::tlv_event_list(evt); - - if (evt) { - log_(0, "[MSC_MSG]["+getTimeStamp4Log()+"]["+ msg.source().to_string() +"][--- MIH_Event_Subscribe.confirm"+ - "\\nstatus="+status2string(st).c_str()+ - "\\nLink="+link_id2string(link).c_str()+ - "\\nEvent list="+evt2string(evt.get()).c_str()+ - " --->]["+msg.destination().to_string()+"]\n"); - } else { - log_(0, "[MSC_MSG]["+getTimeStamp4Log()+"]["+ msg.source().to_string() +"][--- MIH_Event_Subscribe.confirm"+ - "\\nstatus="+status2string(st).c_str()+ - "\\nLink="+link_id2string(link).c_str()+ - " --->]["+msg.destination().to_string()+"]\n"); - } - - // Display message parameters - log_(0, " - STATUS: ", status2string(st).c_str(), " (", st.get(), ")"); - log_(0, " - LINK_TUPLE_ID - Link identifier: ", link_id2string(link).c_str()); - if (evt) { - log_(0, " - MIH_EVT_LIST - Event List: ", evt2string(evt.get()).c_str()); - } - log_(0, ""); - - //mih_user::send_MIH_Link_Actions_request(link, odtone::mih::link_ac_type_link_activate_resources); - //log_(0, "TEMP : Resource scenario deactivated\n"); - - log_(0, "MIH_Event_Subscribe.confirm - End\n"); - mih_user::send_MIH_Link_Action_Power_Up_plus_scan_request(link); - -} - -//----------------------------------------------------------------------------- -void mih_user::send_MIH_Event_Unsubscribe_request(void) -//----------------------------------------------------------------------------- -{ - odtone::mih::link_tuple_id li; - - // For every interface the MIH user received in the - // Capability_Discover.confirm, send an Event_Unsubscribe.request - // for all subscribed events - for (odtone::mih::link_id_list::iterator i = _link_id_list.begin(); i != _link_id_list.end(); i++) { - li.type = i->type; - li.addr = i->addr; - mih_user::send_MIH_Event_Unsubscribe_request(li, _subs_evt_list); - } -} - -//----------------------------------------------------------------------------- -void mih_user::send_MIH_Event_Unsubscribe_request(odtone::mih::link_tuple_id& li, odtone::mih::mih_evt_list& evt) -//----------------------------------------------------------------------------- -{ - odtone::mih::message m; - - m << odtone::mih::request(odtone::mih::request::event_unsubscribe) - & odtone::mih::tlv_link_identifier(li) - & odtone::mih::tlv_event_list(evt); - m.source(_mihuserid); - m.destination(_mihfid); - - log_(0, "[MSC_MSG]["+getTimeStamp4Log()+"]["+ m.source().to_string() +"][--- MIH_Event_Unsubscribe.request"+ - "\\nLink="+link_id2string(li).c_str()+ - "\\nEvent list="+evt2string(evt).c_str()+ - " --->]["+m.destination().to_string()+"]\n"); - - _mihf.async_send(m, boost::bind(&mih_user::receive_handler, this, _1, _2)); - - log_(0, "MIH-User has sent Event_Unsubscribe.request to ", m.destination().to_string()); - log_(0, " - LINK_TUPLE_ID - Link identifier: ", link_id2string(li).c_str()); - log_(0, " - MIH_EVT_LIST - Event List: ", evt2string(evt).c_str(), "\n"); - - log_(0, "MIH_Event_Unsubscribe.request - SENT\n"); -} - -//----------------------------------------------------------------------------- -void mih_user::receive_MIH_Event_Unsubscribe_confirm(odtone::mih::message& msg) -//----------------------------------------------------------------------------- -{ - log_(0, "MIH_Event_Unsubscribe.confirm(", msg.tid(), ") - RECEIVED - Begin\n"); - - odtone::mih::status st; - odtone::mih::link_tuple_id link; - boost::optional evt; - - msg >> odtone::mih::confirm() - & odtone::mih::tlv_status(st) - & odtone::mih::tlv_link_identifier(link) - & odtone::mih::tlv_event_list(evt); - - if (evt) { - log_(0, "[MSC_MSG]["+getTimeStamp4Log()+"]["+ msg.source().to_string() +"][--- MIH_Event_Unsubscribe.confirm"+ - "\\nstatus="+status2string(st).c_str()+ - "\\nLink="+link_id2string(link).c_str()+ - "\\nEvent list="+evt2string(evt.get()).c_str()+ - " --->]["+msg.destination().to_string()+"]\n"); - } else { - log_(0, "[MSC_MSG]["+getTimeStamp4Log()+"]["+ msg.source().to_string() +"][--- MIH_Event_Unsubscribe.confirm"+ - "\\nstatus="+status2string(st).c_str()+ - "\\nLink="+link_id2string(link).c_str()+ - " --->]["+msg.destination().to_string()+"]\n"); - } - - // Display message parameters - log_(0, " - STATUS: ", status2string(st).c_str(), " (", st.get(), ")"); - log_(0, " - LINK_TUPLE_ID - Link identifier: ", link_id2string(link).c_str()); - if (evt) { - log_(0, " - MIH_EVT_LIST - Event List: ", evt2string(evt.get()).c_str()); - } - log_(0, ""); - - log_(0, "MIH_Event_Unsubscribe.confirm - End"); -} - -//----------------------------------------------------------------------------- -void mih_user::send_MIH_Link_Actions_request(const odtone::mih::link_id& link, odtone::mih::link_ac_type type) -//----------------------------------------------------------------------------- -{ - odtone::mih::message m; - odtone::mih::link_action_list lal; - odtone::mih::link_action_req link_act_req; - - link_act_req.id = link; - link_act_req.action.type = type; - - _last_link_action_type = type; - - // Initialize resource parameters - odtone::mih::resource_desc res; - - res.lid = link; // Link identifier - res.data_rate = 128000; // bit rate - res.jumbo = false; // jumbo disable - res.multicast = false; // multicast disable - - odtone::mih::qos qos; // Class Of Service - qos.value = 56; - res.qos_val = qos; - res.fid = 555 + _current_link_action_request; - -// // Flow identifier -// res.fid.src.ip = _mihf_ip; -// res.fid.src.port_val = _mihf_lport; -// -// if (mih_user::_current_link_action_request == 0) { -// res.fid.dst.ip = odtone::mih::ip_addr(odtone::mih::ip_addr::ipv6, -// "2001:0660:0382:0014:0335:0600:8014:9150"); // DUMMY -// } -// else if (mih_user::_current_link_action_request == 1) { -// res.fid.dst.ip = odtone::mih::ip_addr(odtone::mih::ip_addr::ipv6, -// "2001:0660:0382:0014:0335:0600:8014:9151"); // DUMMY -// } -// else if (mih_user::_current_link_action_request == 2) { -// res.fid.dst.ip = odtone::mih::ip_addr(odtone::mih::ip_addr::ipv6, -// "FF3E:0020:2001:0DB8:0000:0000:0000:0043"); // DUMMY -// res.multicast = true; -// } -// else if (mih_user::_current_link_action_request == 3) { -// res.fid.dst.ip = odtone::mih::ip_addr(odtone::mih::ip_addr::ipv6, -// "2001:0660:0382:0014:0335:0600:8014:9153"); // DUMMY -// } -// res.fid.dst.port_val = 1235; // DUMMY -// res.fid.transport = odtone::mih::proto_udp; - - link_act_req.action.param.param = res; - - link_act_req.ex_time = 0; - - lal.push_back(link_act_req); - - m << odtone::mih::request(odtone::mih::request::link_actions) - & odtone::mih::tlv_link_action_list(lal); - m.source(_mihuserid); - m.destination(_mihfid); - - log_(0, "[MSC_MSG]["+getTimeStamp4Log()+"]["+ m.source().to_string() +"][--- MIH_Link_Actions.request\\n"+link_actions_req2string(link_act_req)+" --->]["+m.destination().to_string()+"]\n"); - - _mihf.async_send(m, boost::bind(&mih_user::receive_handler, this, _1, _2)); - - log_(0, "MIH-User has sent Link_Actions.request to ", m.destination().to_string()); - log_(0, " - LINK_ID - Link identifier: ", link_id2string(link).c_str()); - log_(0, " - FLOW_ID - Flow identifier: ", res.fid); -//TEMP log_(0, " - FLOW_ID - Flow identifier: ", flow_id2string(link_act_req.action.param).c_str()); - log_(0, " - LINK_ACTIONS - Link Actions: " + link_actions_req2string(link_act_req) + "\n"); - - log_(0, "MIH_Link_Actions.request - SENT\n"); -} - -//----------------------------------------------------------------------------- -void mih_user::receive_MIH_Link_Actions_confirm(odtone::mih::message& msg) -//----------------------------------------------------------------------------- -{ - log_(0, "MIH_Link_Actions.confirm - RECEIVED - Begin\n"); - - odtone::mih::status st; - boost::optional larl; - - msg >> odtone::mih::confirm() - & odtone::mih::tlv_status(st) - & odtone::mih::tlv_link_action_rsp_list(larl); - - log_(0, "[MSC_MSG]["+getTimeStamp4Log()+"]["+ msg.source().to_string() +"][--- MIH_Link_Actions.confirm"+ - "\\nstatus="+status2string(st).c_str()+ - " --->]["+msg.destination().to_string()+"]\n"); - - // Display message parameters - log_(0, " - STATUS: ", status2string(st).c_str(), " (", st.get(), ")"); - if (larl) { - log_(0, " - LINK ACTION RSP LIST - Length:", larl.get().size()); - for (odtone::mih::link_action_rsp_list::iterator i = larl->begin(); i != larl->end(); i++) - { - log_(0, "\tLINK_ID: ", link_id2string(i->id).c_str(), - ", LINK_AC_RESULT: ", link_ac_result2string(i->result).c_str()); - } - } - log_(0, ""); - - // 1st scenario: Sequentially activate and deactivate each resource -#ifdef SCENARIO_1 - if (larl) { - odtone::mih::link_action_rsp *rsp = &larl->front(); - if (_current_link_action_request < _nb_of_link_action_requests) { - if (_last_link_action_type == odtone::mih::link_ac_type_link_activate_resources) { - if (rsp->result.get() == odtone::mih::link_ac_success) { - mih_user::send_MIH_Link_Actions_request(rsp->id, odtone::mih::link_ac_type_link_deactivate_resources); - _current_link_action_request += 1; - } - } - else if (_last_link_action_type == odtone::mih::link_ac_type_link_deactivate_resources) { - mih_user::send_MIH_Link_Actions_request(rsp->id, odtone::mih::link_ac_type_link_activate_resources); - } - } - else { // Ends the scenario - mih_user::send_MIH_Event_Unsubscribe_request(); - } - } -#endif // SCENARIO_1 - -#ifdef SCENARIO_2 - // 2nd scenario: Activate all resources, then deactivate all resources - if (larl.get().size() > 0) { - odtone::mih::link_action_rsp *rsp = &larl->front(); - if (++_current_link_action_request < _nb_of_link_action_requests) { - if (_last_link_action_type == odtone::mih::link_ac_type_link_activate_resources) { - mih_user::send_MIH_Link_Actions_request(rsp->id, odtone::mih::link_ac_type_link_activate_resources); - } - else if (_last_link_action_type == odtone::mih::link_ac_type_link_deactivate_resources) { - mih_user::send_MIH_Link_Actions_request(rsp->id, odtone::mih::link_ac_type_link_deactivate_resources); - } - } - else if (_last_link_action_type == odtone::mih::link_ac_type_link_activate_resources) { - _current_link_action_request = 0; - mih_user::send_MIH_Link_Actions_request(rsp->id, odtone::mih::link_ac_type_link_deactivate_resources); - } - else { // Ends the scenario - mih_user::send_MIH_Event_Unsubscribe_request(); - } - } -#endif // SCENARIO_2 - - log_(0, "MIH_Link_Actions.confirm - End\n"); -} - -//----------------------------------------------------------------------------- -void mih_user::send_MIH_Link_Configure_Thresholds_request(odtone::mih::message& msg, const boost::system::error_code& ec) -//----------------------------------------------------------------------------- -{ - odtone::mih::message m; - odtone::mih::threshold th; - std::vector thl; - odtone::mih::link_tuple_id lti; - odtone::mih::l2_3gpp_addr local_l2_3gpp_addr; - //List of the link threshold parameters - odtone::mih::link_cfg_param_list lcpl; - odtone::mih::link_cfg_param lcp; - odtone::mih::link_param_lte lp; - //odtone::mih::link_param_gen lp; - - odtone::mih::link_param_type typr; - - log_(0,""); - log_(0, "send_MIH_Link_Configure_Thresholds_request - Begin"); - - //link_tuple_id - lti.type = rcv_link_id.type; - lti.addr = rcv_link_id.addr; - - //local_l2_3gpp_addr = boost::get(lti.addr); - - - //link_param_gen_data_rate = 0, /**< Data rate. */ - //link_param_gen_signal_strength = 1, /**< Signal strength. */ - //link_param_gen_sinr = 2, /**< SINR. */ - //link_param_gen_throughput = 3, /**< Throughput. */ - //link_param_gen_packet_error_rate = 4, /**< Packet error rate. */ - //lp = odtone::mih::link_param_lte_bandwidth; - lp = odtone::mih::link_param_lte_rsrp; - lcp.type = lp; - - link_measures_request = 0; - if ( link_measures_request ==0){ - // Set Timer Interval (in ms) - lcp.timer_interval = 3000; - //th_action_normal = 0, /**< Set normal threshold. */ - //th_action_one_shot = 1, /**< Set one-shot threshold. */ - //th_action_cancel = 2 /**< Cancel threshold. */ - lcp.action = odtone::mih::th_action_normal; - link_measures_request = 1; - } else if ( link_measures_request==1){ - // Set Timer Interval (in ms) - lcp.timer_interval = 0; - lcp.action = odtone::mih::th_action_cancel; - link_measures_request = 0; - } - - //above_threshold = 0, /**< Above threshold. */ - //below_threshold = 1, /**< Below threshold. */ - th.threshold_val = -105; - th.threshold_x_dir = odtone::mih::threshold::above_threshold; - - thl.push_back(th); - lcp.threshold_list = thl; - lcpl.push_back(lcp); - - m << odtone::mih::request(odtone::mih::request::link_configure_thresholds) - & odtone::mih::tlv_link_identifier(lti) - & odtone::mih::tlv_link_cfg_param_list(lcpl); - - m.destination(msg.source()); - - log_(0, "[MSC_MSG]["+getTimeStamp4Log()+"]["+ _mihuserid.to_string() +"][--- MIH_Link_Configure_Thresholds.request\\nlink="+ - // link_tupple_id2string(lti).c_str() + - link_id2string(lti).c_str()+ - " --->]["+_mihfid.to_string()+"]\n"); - - _mihf.async_send(m, boost::bind(&mih_user::event_handler, this, _1, _2)); - - log_(0, " - LINK_TUPLE_ID - Link identifier: ", link_id2string(lti).c_str()); - - log_(0, "\t- LINK CFG PARAM LIST - Length: ", lcpl.size()); - - //if(lp == odtone::mih::link_param_gen_data_rate) {log_(0, "\t Generic link parameter DATA RATE ");} - //if(lp == odtone::mih::link_param_gen_signal_strength) {log_(0, "\t Generic link parameter SIGNAL STRENGTH");} - //if(lp == odtone::mih::link_param_gen_sinr) {log_(0, "\t Generic link parameter SINR");} - //if(lp == odtone::mih::link_param_gen_throughput) {log_(0, "\t Generic link parameter THROUGHPUT");} - //if(lp == odtone::mih::link_param_lte_bandwidth) {log_(0, "\t LTE link parameter BANDWIDTH");} - if(lp == odtone::mih::link_param_lte_rsrp) {log_(0, "\t LTE link parameter LTE RSRP");} - - log_(0, "\t- TIMER INTERVAL - Value: ", lcp.timer_interval); - - if(lcp.action == odtone::mih::th_action_normal) {log_(0, "\t Normal Threshold");} - if(lcp.action == odtone::mih::th_action_one_shot) {log_(0, "\t One Shot Threshold");} - if(lcp.action == odtone::mih::th_action_cancel) {log_(0, "\t Threshold to be canceled");} - - log_(0, "\t Threshold value: ", th.threshold_val); - - if(th.threshold_x_dir == odtone::mih::threshold::below_threshold) {log_(0, "\t Threshold direction BELOW");} - if(th.threshold_x_dir == odtone::mih::threshold::above_threshold) {log_(0, "\t Threshold direction ABOVE");} - - log_(0, "send_MIH_Link_Configure_Thresholds_request - End"); -} - -//----------------------------------------------------------------------------- -void mih_user::receive_MIH_Link_Configure_Thresholds_confirm(odtone::mih::message& msg, const boost::system::error_code& ec) -//----------------------------------------------------------------------------- -{ - log_(0, ""); - log_(0, "receive_MIH_Link_Configure_Thresholds_confirm - Begin"); - - // T odtone::uint iter; - // T odtone::mih::status st; - - //boost::optional lcsl; - // Todtone::mih::link_cfg_status_list lcsl; - // Todtone::mih::link_cfg_status lcp; - //odtone::mih::link_param_gen lp; - - // T odtone::mih::link_tuple_id lti; - - //msg >> odtone::mih::confirm() - // & odtone::mih::tlv_status(st) - // & odtone::mih::tlv_link_identifier(lti) - // & odtone::mih::tlv_link_cfg_status_list(lcsl); - - - log_(0, "receive_MIH_Link_Configure_Thresholds_confirm - End"); - log_(0,""); -} - -//----------------------------------------------------------------------------- -int main(int argc, char** argv) -//----------------------------------------------------------------------------- -{ - odtone::setup_crash_handler(); - - try { - boost::asio::io_service ios; - - // declare MIH Usr available options - po::options_description desc(odtone::mih::octet_string("MIH Usr Configuration")); - desc.add_options() - ("help", "Display configuration options") - (odtone::sap::kConf_File, po::value()->default_value("ue_lte_user.conf"), "Configuration file") - (odtone::sap::kConf_Receive_Buffer_Len, po::value()->default_value(4096), "Receive buffer length") - (odtone::sap::kConf_Port, po::value()->default_value(1235), "Listening port") - (odtone::sap::kConf_MIH_SAP_id, po::value()->default_value("user"), "MIH-User ID") - (kConf_MIH_Commands, po::value()->default_value(""), "MIH-User supported commands") - (odtone::sap::kConf_MIHF_Ip, po::value()->default_value("127.0.0.1"), "Local MIHF IP address") - (odtone::sap::kConf_MIHF_Local_Port, po::value()->default_value(1025), "Local MIHF communication port") - (odtone::sap::kConf_MIH_SAP_dest, po::value()->default_value("mihf2_ue"), "MIHF destination"); - - odtone::mih::config cfg(desc); - cfg.parse(argc, argv, odtone::sap::kConf_File); - - if (cfg.help()) { - std::cerr << desc << std::endl; - return EXIT_SUCCESS; - } - - mih_user usr(cfg, ios); - - ios.run(); - - } catch(std::exception& e) { - log_(0, "exception: ", e.what()); - } -} - -// EOF //////////////////////////////////////////////////////////////////////// - diff --git a/openair3/RAL-LTE/LTE_RAL_UE/Makefile b/openair3/RAL-LTE/LTE_RAL_UE/Makefile deleted file mode 100755 index 6cc42a2229..0000000000 --- a/openair3/RAL-LTE/LTE_RAL_UE/Makefile +++ /dev/null @@ -1,75 +0,0 @@ -# lines starting with the pound sign are comments. -# -# These things are options that you might need -# to tweak. - - - -INTERFACE_DIR=../INTERFACE-802.21 -INCLUDE_DIR=INCLUDE -SRC_DIR=SRC -# external directories for ioctl -RRC_DIR := $(OPENAIR2_DIR)/RRC/CELLULAR -NAS_DIR := $(OPENAIR2_DIR)/NAS/DRIVER/CELLULAR/NASMT - -# SVN version -#SVNREV = -D'SVN_REV="$(shell svnversion -n .)"' -SVNREV = -D'SVN_REV="1"' - -CC = gcc - -#CFLAGS = -Wall -g -I$(SRC_DIR) -I$(INTERFACE_DIR)/INCLUDE -I$(INCLUDE_DIR) \ -# -DMIH_C_MEDIEVAL_EXTENSIONS -DMSCGEN_PYTOOL -DMIH_USER_CONTROL $(SVNREV) - -CFLAGS = -Wall -g -I$(SRC_DIR) -I$(INTERFACE_DIR)/INCLUDE -I$(INCLUDE_DIR) -DMIH_C_MEDIEVAL_EXTENSIONS -DMIH_USER_CONTROL $(SVNREV) -CFLAGS += -I$(NAS_DIR) -I$(RRC_DIR) - -LDFLAGS = -L$(INTERFACE_DIR)/LIB -lmih_c-802.21 -lrt - -MRAL_OBJS = $(SRC_DIR)/lteRALue_mih_msg.o -#MRAL_OBJS += $(SRC_DIR)/lteRALue_thresholds.o -#MRAL_OBJS += $(SRC_DIR)/lteRALue_parameters.o -#MRAL_OBJS += $(SRC_DIR)/lteRALue_action.o -#MRAL_OBJS += $(SRC_DIR)/lteRALue_get.o -#MRAL_OBJS += $(SRC_DIR)/lteRALue_subscribe.o -MRAL_OBJS += $(SRC_DIR)/lteRALue_mih_execute.o -MRAL_OBJS += $(SRC_DIR)/lteRALue_main.o -MRAL_OBJS += $(SRC_DIR)/lteRALue_ioctl.o -MRAL_OBJS += $(SRC_DIR)/lteRALue_process.o - - -OBJS = $(MRAL_OBJS) - -M_RAL_EXE = LTE_RAL_UE - -EXECUTABLE = interface $(M_RAL_EXE) - -# "all" is the default target. Simply make it point to myprogram. - -all: $(EXECUTABLE) - -runral: $(M_RAL_EXE) - -rm -f /tmp/*.txt - -./$(M_RAL_EXE) > /tmp/mral.txt - -interface : - -(cd $(INTERFACE_DIR) && make) -# -(cd $(INTERFACE_DIR) && make clean && make) - -cleaninterface : - -(cd $(INTERFACE_DIR) && make clean) - - -$(M_RAL_EXE) : $(MRAL_OBJS) - $(CC) -o $@ $^ $(LDFLAGS) - -%.o: %.c Makefile - @echo Compiling $< - @$(CC) -c $(CFLAGS) $(EXTRA_CFLAGS) -o $@ $< - -clean: - -find . -name "*.o" -delete - -find . -name "*.*~" -delete - -find . -name "*~" -delete -# -rm -f $(M_RAL_EXE) $(M_NAS_EXE) -# -rm -f $(E_RAL_EXE) $(E_NAS_EXE) diff --git a/openair3/RAL-LTE/LTE_RAL_UE/SRC/lteRALue_action.c b/openair3/RAL-LTE/LTE_RAL_UE/SRC/lteRALue_action.c deleted file mode 100755 index a522369b1d..0000000000 --- a/openair3/RAL-LTE/LTE_RAL_UE/SRC/lteRALue_action.c +++ /dev/null @@ -1,240 +0,0 @@ -/*************************************************************************** - lteRALue_action.c - description - *************************************************************************** - Eurecom OpenAirInterface 3 - Copyright(c) 1999 - 2013 Eurecom - - This program is free software; you can redistribute it and/or modify it - under the terms and conditions of the GNU General Public License, - version 2, as published by the Free Software Foundation. - - This program is distributed in the hope it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - more details. - - You should have received a copy of the GNU General Public License along with - this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - - The full GNU General Public License is included in this distribution in - the file called "COPYING". - - Contact Information - Openair Admin: openair_admin@eurecom.fr - Openair Tech : openair_tech@eurecom.fr - Forums : http://forums.eurecom.fsr/openairinterface - Address : Eurecom, 450 route des Chappes, 06410 Biot Sophia Antipolis, France -*******************************************************************************/ -/*! \file lteRALue_mih_execute.c - * \brief Execution of MIH primitives in LTE-RAL-UE - * \author WETTERWALD Michelle, GAUTHIER Lionel, MAUREL Frederic - * \date 2013 - * \company EURECOM - * \email: michelle.wetterwald@eurecom.fr, lionel.gauthier@eurecom.fr, frederic.maurel@eurecom.fr - */ -/*******************************************************************************/ -#define LTE_RAL_UE -#define LTERALUE_ACTION_C -//----------------------------------------------------------------------------- -#include "lteRALue.h" -#include "LAYER2/MAC/extern.h" - -//----------------------------------------------------------------------------- -void mRAL_action_request(ral_ue_instance_t instanceP, MIH_C_Message_Link_Action_request_t* messageP) -{ - //----------------------------------------------------------------------------- - MIH_C_STATUS_T status; - LIST(MIH_C_LINK_SCAN_RSP, scan_response_set); - MIH_C_LINK_AC_RESULT_T link_action_result; - //unsigned int scan_index, meas_to_send; - MessageDef *message_p = NULL; - rrc_ral_connection_release_req_t release_req; - rrc_ral_connection_establishment_req_t connection_establishment_req; - module_id_t mod_id = instanceP - NB_eNB_INST; - - status = MIH_C_STATUS_SUCCESS; - link_action_result = MIH_C_LINK_AC_RESULT_SUCCESS; - scan_response_set_list.length = 0; - - if ( messageP->primitive.LinkAction.link_ac_attr & MIH_C_BIT_LINK_AC_ATTR_LINK_SCAN) { - //---------------------------------------------------- - // send a response to MIH-F or it will report an error. - //---------------------------------------------------- - //link_action_result = MIH_C_LINK_AC_RESULT_SUCCESS; - //mRAL_send_link_action_confirm(instanceP, &messageP->header.transaction_id, &status, &scan_response_set_list, &link_action_result); - - //---------------------------------------------------- - // Transmit request to RRC. - //---------------------------------------------------- - message_p = itti_alloc_new_message (TASK_RAL_UE, RRC_RAL_SCAN_REQ); - RRC_RAL_SCAN_REQ(message_p).transaction_id = messageP->header.transaction_id; - itti_send_msg_to_task (TASK_RRC_UE, instanceP, message_p); - } - - if ( messageP->primitive.LinkAction.link_ac_attr & MIH_C_BIT_LINK_AC_ATTR_LINK_RES_RETAIN) { - // TO DO - // The link will be disconnected but the resource for the link connection still remains so - // reestablishing the link connection later can be more efficient. - - } - - if ( messageP->primitive.LinkAction.link_ac_attr & MIH_C_BIT_LINK_AC_ATTR_DATA_FWD_REQ) { - // TO DO - // This indication requires the buffered data at the old serving PoA entity to be forwarded - // to the new target PoA entity in order to avoid data loss. This action can be taken imme- - // diately after the old serving PoS receives MIH_N2N_HO_Commit response message - // from the new target PoS, or the old serving PoS receives MIH_Net_HO_Commit - // response message from the MN. This is not valid on UMTS link type. - - } - - // do not make actions if SCAN required - if (( messageP->primitive.LinkAction.link_ac_attr & MIH_C_BIT_LINK_AC_ATTR_LINK_SCAN) == 0) { - switch (messageP->primitive.LinkAction.link_ac_type) { - case MIH_C_LINK_AC_TYPE_NONE: - LOG_D(RAL_UE, "%s ACTION REQUESTED: MIH_C_LINK_AC_TYPE_NONE: NO ACTION\n", __FUNCTION__); - break; - - case MIH_C_LINK_AC_TYPE_LINK_DISCONNECT: - LOG_D(RAL_UE, "%s ACTION REQUESTED: MIH_C_LINK_AC_TYPE_LINK_DISCONNECT: NO ACTION\n", __FUNCTION__); - - if (g_ue_ral_obj[mod_id].mih_supported_action_list & MIH_C_LINK_AC_TYPE_LINK_DISCONNECT) { - message_p = itti_alloc_new_message (TASK_RAL_UE, RRC_RAL_CONNECTION_RELEASE_REQ); - memset(&release_req, 0, sizeof(rrc_ral_connection_release_req_t)); - // copy transaction id - release_req.transaction_id = messageP->header.transaction_id; - memcpy (&message_p->ittiMsg, (void *) &release_req, sizeof(rrc_ral_connection_release_req_t)); - itti_send_msg_to_task (TASK_RRC_UE, instanceP, message_p); - } else { - link_action_result = MIH_C_LINK_AC_RESULT_INCAPABLE; - mRAL_send_link_action_confirm(instanceP, &messageP->header.transaction_id, &status, &scan_response_set_list, &link_action_result); - } - - break; - - case MIH_C_LINK_AC_TYPE_LINK_LOW_POWER: - LOG_D(RAL_UE, "%s ACTION REQUESTED: MIH_C_LINK_AC_TYPE_LINK_LOW_POWER\n", __FUNCTION__); - - if (g_ue_ral_obj[mod_id].mih_supported_action_list & MIH_C_LINK_AC_TYPE_LINK_LOW_POWER) { - // TO DO - } else { - link_action_result = MIH_C_LINK_AC_RESULT_INCAPABLE; - mRAL_send_link_action_confirm(instanceP, &messageP->header.transaction_id, &status, &scan_response_set_list, &link_action_result); - } - - break; - - case MIH_C_LINK_AC_TYPE_LINK_POWER_DOWN: - LOG_D(RAL_UE, "%s ACTION REQUESTED: MIH_C_LINK_AC_TYPE_LINK_POWER_DOWN\n", __FUNCTION__); - - if (g_ue_ral_obj[mod_id].mih_supported_action_list & MIH_C_LINK_AC_TYPE_LINK_POWER_DOWN) { - if ( g_ue_ral_obj[mod_id].pending_req_action & MIH_C_LINK_AC_TYPE_LINK_POWER_DOWN ) { - if (g_ue_ral_obj[mod_id].state == DISCONNECTED) { - LOG_D(RAL_UE, "Deactivation requested, but interface already inactive ==> NO OP\n"); - mRAL_send_link_action_confirm(instanceP, &messageP->header.transaction_id, &status, &scan_response_set_list, &link_action_result); - } else { - g_ue_ral_obj[mod_id].pending_req_action = g_ue_ral_obj[mod_id].pending_req_action | MIH_C_LINK_AC_TYPE_LINK_POWER_DOWN; - //Send immediatly a confirm, otherwise it will arrive to late and MIH-F will report a failure to the MIH-USER - mRAL_send_link_action_confirm(instanceP, &messageP->header.transaction_id, &status, NULL, &link_action_result); - - message_p = itti_alloc_new_message (TASK_RAL_UE, RRC_RAL_CONNECTION_RELEASE_REQ); - memset(&release_req, 0, sizeof(rrc_ral_connection_release_req_t)); - // copy transaction id - release_req.transaction_id = messageP->header.transaction_id; - memcpy (&message_p->ittiMsg, (void *) &release_req, sizeof(rrc_ral_connection_release_req_t)); - itti_send_msg_to_task (TASK_RRC_UE, instanceP, message_p); - LOG_D(RAL_UE, "Deactivation requested to NAS interface\n"); - //RAL_process_NAS_message(IO_OBJ_CNX, IO_CMD_DEL, g_ue_ral_obj[mod_id].cell_id); - - } - } else { - g_ue_ral_obj[mod_id].pending_req_action |= MIH_C_LINK_AC_TYPE_LINK_POWER_DOWN; - //Send immediatly a confirm, otherwise it will arrive to late and MIH-F will report a failure to the MIH-USER - mRAL_send_link_action_confirm(instanceP, &messageP->header.transaction_id, &status, NULL, &link_action_result); - - message_p = itti_alloc_new_message (TASK_RAL_UE, RRC_RAL_CONNECTION_RELEASE_REQ); - memset(&release_req, 0, sizeof(rrc_ral_connection_release_req_t)); - // copy transaction id - release_req.transaction_id = messageP->header.transaction_id; - memcpy (&message_p->ittiMsg, (void *) &release_req, sizeof(rrc_ral_connection_release_req_t)); - itti_send_msg_to_task (TASK_RRC_UE, instanceP, message_p); - LOG_D(RAL_UE, "Deactivation requested to NAS interface\n"); - //RAL_process_NAS_message(IO_OBJ_CNX, IO_CMD_DEL, g_ue_ral_obj[mod_id].cell_id); - } - } else { - LOG_D(RAL_UE, " command POWER DOWN not available \n\n"); - link_action_result = MIH_C_LINK_AC_RESULT_INCAPABLE; - mRAL_send_link_action_confirm(instanceP, &messageP->header.transaction_id, &status, NULL, &link_action_result); - } - - break; - - case MIH_C_LINK_AC_TYPE_LINK_POWER_UP: - LOG_D(RAL_UE, "%s ACTION REQUESTED: MIH_C_LINK_AC_TYPE_LINK_POWER_UP\n", __FUNCTION__); - - if (g_ue_ral_obj[mod_id].mih_supported_action_list & MIH_C_LINK_AC_TYPE_LINK_POWER_UP) { - // Activation requested - check it is not already active - if(g_ue_ral_obj[mod_id].pending_req_action & MIH_C_LINK_AC_TYPE_LINK_POWER_UP) { - if (g_ue_ral_obj[mod_id].state == CONNECTED) { - LOG_D(RAL_UE, "Activation requested, but interface already active ==> NO OP\n"); - mRAL_send_link_action_confirm(instanceP, &messageP->header.transaction_id, &status, &scan_response_set_list, &link_action_result); - } else { - g_ue_ral_obj[mod_id].pending_req_action = g_ue_ral_obj[mod_id].pending_req_action | MIH_C_LINK_AC_TYPE_LINK_POWER_UP; - g_ue_ral_obj[mod_id].cell_id = g_ue_ral_obj[mod_id].meas_cell_id[0]; // Default cell #0 - Next, choose cell with best conditions - LOG_D(RAL_UE, "Activation requested to NAS interface on cell %d\n", g_ue_ral_obj[mod_id].cell_id); - //RAL_process_NAS_message(IO_OBJ_CNX, IO_CMD_ADD, g_ue_ral_obj[mod_id].cell_id); - } - } else { - g_ue_ral_obj[mod_id].pending_req_action |= MIH_C_LINK_AC_TYPE_LINK_POWER_UP; - g_ue_ral_obj[mod_id].cell_id = g_ue_ral_obj[mod_id].meas_cell_id[0]; // Default cell #0 - Next, choose cell with best conditions - message_p = itti_alloc_new_message (TASK_RAL_UE, RRC_RAL_CONNECTION_ESTABLISHMENT_REQ); - memset(&connection_establishment_req, 0, sizeof(rrc_ral_connection_establishment_req_t)); - // copy transaction id - connection_establishment_req.transaction_id = messageP->header.transaction_id; - memcpy (&message_p->ittiMsg, (void *) &connection_establishment_req, sizeof(rrc_ral_connection_establishment_req_t)); - itti_send_msg_to_task (TASK_RRC_UE, instanceP, message_p); - } - } else { - LOG_D(RAL_UE, "[mRAL]: command POWER UP not available \n\n"); - link_action_result = MIH_C_LINK_AC_RESULT_INCAPABLE; - mRAL_send_link_action_confirm(instanceP, &messageP->header.transaction_id, &status, &scan_response_set_list, &link_action_result); - } - - break; - - /* LG KEEP case MIH_C_LINK_AC_TYPE_LINK_FLOW_ATTR: - LOG_D(RAL_UE, "%s ACTION REQUESTED: MIH_C_LINK_AC_TYPE_LINK_FLOW_ATTR: NO ACTION\n", __FUNCTION__); - if (g_ue_ral_obj[mod_id].mih_supported_action_list & MIH_C_LINK_AC_TYPE_LINK_FLOW_ATTR) { - } else { - link_action_result = MIH_C_LINK_AC_RESULT_INCAPABLE; - mRAL_send_link_action_confirm(instanceP, &messageP->header.transaction_id, &status, &scan_response_set_list, &link_action_result); - } - break; - - case MIH_C_LINK_AC_TYPE_LINK_ACTIVATE_RESOURCES: - LOG_D(RAL_UE, "%s ACTION REQUESTED: MIH_C_LINK_AC_TYPE_LINK_ACTIVATE_RESOURCES: NO ACTION\n", __FUNCTION__); - if (g_ue_ral_obj[mod_id].mih_supported_action_list & MIH_C_LINK_AC_TYPE_LINK_ACTIVATE_RESOURCES) { - } else { - link_action_result = MIH_C_LINK_AC_RESULT_INCAPABLE; - mRAL_send_link_action_confirm(instanceP, &messageP->header.transaction_id, &status, &scan_response_set_list, &link_action_result); - } - break; - - case MIH_C_LINK_AC_TYPE_LINK_DEACTIVATE_RESOURCES: - LOG_D(RAL_UE, "%s ACTION REQUESTED: MIH_C_LINK_AC_TYPE_LINK_DEACTIVATE_RESOURCES: NO ACTION\n", __FUNCTION__); - if (g_ue_ral_obj[mod_id].mih_supported_action_list & MIH_C_LINK_AC_TYPE_LINK_DEACTIVATE_RESOURCES) { - } else { - link_action_result = MIH_C_LINK_AC_RESULT_INCAPABLE; - mRAL_send_link_action_confirm(instanceP, &messageP->header.transaction_id, &status, &scan_response_set_list, &link_action_result); - } - break;*/ - - default: - LOG_E(RAL_UE, "%s Invalid LinkAction.link_ac_type in MIH_C_Message_Link_Action_request\n", __FUNCTION__); - status = MIH_C_STATUS_UNSPECIFIED_FAILURE; - mRAL_send_link_action_confirm(instanceP, &messageP->header.transaction_id, &status, &scan_response_set_list, &link_action_result); - } - } -} - diff --git a/openair3/RAL-LTE/LTE_RAL_UE/SRC/lteRALue_ioctl.c b/openair3/RAL-LTE/LTE_RAL_UE/SRC/lteRALue_ioctl.c deleted file mode 100755 index bedf47015d..0000000000 --- a/openair3/RAL-LTE/LTE_RAL_UE/SRC/lteRALue_ioctl.c +++ /dev/null @@ -1,455 +0,0 @@ -/*************************************************************************** - lteRALue_ioctl.c - description - *************************************************************************** - Eurecom OpenAirInterface 3 - Copyright(c) 1999 - 2013 Eurecom - - This program is free software; you can redistribute it and/or modify it - under the terms and conditions of the GNU General Public License, - version 2, as published by the Free Software Foundation. - - This program is distributed in the hope it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - more details. - - You should have received a copy of the GNU General Public License along with - this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - - The full GNU General Public License is included in this distribution in - the file called "COPYING". - - Contact Information - Openair Admin: openair_admin@eurecom.fr - Openair Tech : openair_tech@eurecom.fr - Forums : http://forums.eurecom.fsr/openairinterface - Address : Eurecom, 450 route des Chappes, 06410 Biot Sophia Antipolis, France -*******************************************************************************/ -/*! \file lteRALue_ioctl.c - * \brief Handling of ioctl for LTE driver in LTE-RAL-UE - * \author WETTERWALD Michelle, GAUTHIER Lionel, MAUREL Frederic - * \date 2013 - * \company EURECOM - * \email: michelle.wetterwald@eurecom.fr, lionel.gauthier@eurecom.fr, frederic.maurel@eurecom.fr - */ -/*******************************************************************************/ -#define MRAL_MODULE -#include "rrc_d_types.h" -#include "nas_ue_ioctl.h" -#include "rrc_nas_primitives.h" -#include "nasmt_constant.h" -#include "nasmt_iocontrol.h" - -#include "lteRALue_mih_msg.h" -#include "lteRALue_variables.h" -#include "lteRALue_proto.h" -#include "MIH_C.h" -#include "lteRALue_mih_msg.h" - -extern struct nas_ioctl gifr; -extern int fd; -// 0335060080149150 -uint8_t NAS_DEFAULT_IMEI[16]= {0x00, 0x03, 0x03, 0x05, 0x00 ,0x06, 0x00, 0x00, 0x08, 0x00, 0x01 ,0x04, 0x09, 0x01, 0x05, 0x00}; - -//--------------------------------------------------------------------------- -void print_state(uint8_t state) -{ - //--------------------------------------------------------------------------- - switch(state) { - case NAS_IDLE: - DEBUG("NAS_IDLE\n"); - return; - - // case NAS_STATE_CONNECTED:DEBUG("NAS_STATE_CONNECTED\n");return; - // case NAS_STATE_ESTABLISHMENT_REQUEST:DEBUG("NAS_STATE_ESTABLISHMENT_REQUEST\n");return; - // case NAS_STATE_ESTABLISHMENT_FAILURE:DEBUG("NAS_STATE_ESTABLISHMENT_FAILURE\n");return; - // case NAS_STATE_RELEASE_FAILURE:DEBUG("NAS_STATE_RELEASE_FAILURE\n");return; - case NAS_CX_FACH: - DEBUG("NAS_CX_FACH\n"); - return; - - case NAS_CX_DCH: - DEBUG("NAS_CX_DCH\n"); - return; - - case NAS_CX_RECEIVED: - DEBUG("NAS_CX_RECEIVED\n"); - return; - - case NAS_CX_CONNECTING: - DEBUG("NAS_CX_CONNECTING\n"); - return; - - case NAS_CX_RELEASING: - DEBUG("NAS_CX_RELEASING\n"); - return; - - case NAS_CX_CONNECTING_FAILURE: - DEBUG("NAS_CX_CONNECTING_FAILURE\n"); - return; - - case NAS_CX_RELEASING_FAILURE: - DEBUG("NAS_CX_RELEASING_FAILURE\n"); - return; - - case NAS_RB_ESTABLISHING: - DEBUG("NAS_RB_ESTABLISHING\n"); - return; - - case NAS_RB_RELEASING: - DEBUG("NAS_RB_RELEASING\n"); - return; - - case NAS_RB_DCH: - DEBUG("NAS_RB_DCH\n"); - return; - - default: - ERR(" Unknown state\n"); - } -} - - -//--------------------------------------------------------------------------- -// Convert the IMEI to iid -void RAL_imei2iid(uint8_t *imei, uint8_t *iid) -{ - //--------------------------------------------------------------------------- - // Start debug information - if (!imei ||! iid ) { - ERR("RAL_imei2iid - input parameter is NULL \n"); - return; - } - - // End debug information - memset(iid, 0, 8); - iid[0] = 16*imei[0]+imei[1]; - iid[1] = 16*imei[2]+imei[3]; - iid[2] = 16*imei[4]+imei[5]; - iid[3] = 16*imei[6]+imei[7]; - iid[4] = 16*imei[8]+imei[9]; - iid[5] = 16*imei[10]+imei[11]; - iid[6] = 16*imei[12]+imei[13]; - iid[7] = 16*imei[14]+imei[15]+1; -} - -//--------------------------------------------------------------------------- -int RAL_process_NAS_message(int ioctl_obj, int ioctl_cmd, int ioctl_cellid) -{ - //--------------------------------------------------------------------------- - int err, rc; - - NOTICE(" \n"); - - switch (ioctl_obj) { - /***************************/ - case IO_OBJ_STATS: { - struct nas_msg_statistic_reply *msgrep; - - //printf("Statistics requested -0\n"); - gifr.type=NAS_MSG_STATISTIC_REQUEST; - // gifr.msg=(char *)malloc(sizeof(struct nas_msg_statistic_reply)); - memset (ralpriv->buffer,0,800); - gifr.msg= &(ralpriv->buffer[0]); - msgrep=(struct nas_msg_statistic_reply *)(gifr.msg); - NOTICE("[MSC_MSG][%s][%s][--- ioctl : NAS_MSG_STATISTIC_REQUEST --->][nas]\n", getTimeStamp4Log(), g_link_id); - err=ioctl(fd, NASMT_IOCTL_RAL, &gifr); - - if (err<0) { - ERR("IOCTL error, err=%d\n",err); - rc = -1; - } else { - DEBUG("tx_packets = %u, rx_packets = %u\n", msgrep->tx_packets, msgrep->rx_packets); - DEBUG("tx_bytes = %u, rx_bytes = %u\n", msgrep->tx_bytes, msgrep->rx_bytes); - DEBUG("tx_errors = %u, rx_errors = %u\n", msgrep->tx_errors, msgrep->rx_errors); - DEBUG("tx_dropped = %u, rx_dropped = %u\n", msgrep->tx_dropped, msgrep->rx_dropped); - memcpy(&(ralpriv->rx_packets), &(msgrep->rx_packets), sizeof(struct nas_msg_statistic_reply)); - //IAL_return_NAS_Statistics(); - rc = 0; - } - } - break; - - /***************************/ - case IO_OBJ_CNX: - switch (ioctl_cmd) { - /***/ - case IO_CMD_ADD: { - //printf("Usage: gioctl cx add \n"); - struct nas_msg_cx_establishment_request *msgreq; - struct nas_msg_cx_establishment_reply *msgrep; - gifr.type=NAS_MSG_CX_ESTABLISHMENT_REQUEST; - //gifr.msg=(char *)malloc(sizeof(msgrep)buffer,0,800); - gifr.msg= &(ralpriv->buffer[0]); - msgreq=(struct nas_msg_cx_establishment_request *)(gifr.msg); - msgrep=(struct nas_msg_cx_establishment_reply *)(gifr.msg); - msgreq->lcr=0; //Temp - msgreq->cellid=ioctl_cellid; - // send IOCTL - NOTICE("[MSC_MSG][%s][%s][--- ioctl : NAS_MSG_CX_ESTABLISHMENT_REQUEST --->][nas]\n", getTimeStamp4Log(), g_link_id); - err=ioctl(fd, NASMT_IOCTL_RAL, &gifr); - - if (err<0) { - ERR("IOCTL error, err=%d\n",err); - } - - NOTICE("[MSC_MSG][%s][nas][--- NAS_MSG_CX_ESTABLISHMENT_REPLY --->][%s]\n", getTimeStamp4Log(), g_link_id); - ralpriv->pending_req_action = MIH_C_LINK_AC_TYPE_NONE; - ralpriv->state = DISCONNECTED; - - if ((err<0)||(msgrep->status<0)) { - ERR(" Connexion establishment failure: %d\n",msgrep->status); - //ralpriv->state = DISCONNECTED; - rc = -1; - ralpriv->pending_req_status = MIH_C_STATUS_SUCCESS; - ralpriv->pending_req_ac_result = MIH_C_LINK_AC_RESULT_FAILURE; - } else { - //ralpriv->state = CONNECTED; - ralpriv->cell_id = ioctl_cellid; - ralpriv->pending_req_status = MIH_C_STATUS_SUCCESS; - ralpriv->pending_req_ac_result = MIH_C_LINK_AC_RESULT_SUCCESS; - ralpriv->pending_req_flag = 1; - DEBUG(" Connexion establishment pending: pending_req_flag %d\n",ralpriv->pending_req_flag); - } - - //mRAL_send_link_action_confirm(&ralpriv->pending_req_transaction_id, &ralpriv->pending_req_status, NULL, &ralpriv->pending_req_ac_result); - rc = 0; - } - break; - - /***/ - case IO_CMD_DEL: { - //printf("Usage: gioctl cx del \n"); - struct nas_msg_cx_release_request *msgreq; - struct nas_msg_cx_release_reply *msgrep; - gifr.type=NAS_MSG_CX_RELEASE_REQUEST; - //gifr.msg=(char *)malloc(sizeof(msgrep)buffer,0,800); - gifr.msg= &(ralpriv->buffer[0]); - msgreq=(struct nas_msg_cx_release_request *)(gifr.msg); - msgrep=(struct nas_msg_cx_release_reply *)(gifr.msg); - msgreq->lcr=0; //Temp - // - NOTICE("[MSC_MSG][%s][%s][--- ioctl : NAS_MSG_CX_RELEASE_REQUEST --->][nas]\n", getTimeStamp4Log(), g_link_id); - err=ioctl(fd, NASMT_IOCTL_RAL, &gifr); - - if (err<0) { - ERR("IOCTL error, err=%d\n",err); - rc = -1; - } - - // - NOTICE("[MSC_MSG][%s][nas][--- NAS_MSG_CX_RELEASE_REPLY --->][%s]\n", getTimeStamp4Log(), g_link_id); - ralpriv->pending_req_action = MIH_C_LINK_AC_TYPE_NONE; - - if (msgrep->status<0) { - ERR(" Connexion release failure: %d", msgrep->status); - rc = -1; - } - - if (rc == -1) { // something failed - ralpriv->pending_req_ac_result = MIH_C_LINK_AC_RESULT_FAILURE; - } else { - ralpriv->pending_req_ac_result = MIH_C_LINK_AC_RESULT_SUCCESS; - } - - ralpriv->pending_req_status = MIH_C_STATUS_SUCCESS; - ralpriv->state = DISCONNECTED; - //mRALu_send_link_switch_cnf(); - ralpriv->pending_req_flag = 0; - ralpriv->cell_id = CONF_UNKNOWN_CELL_ID; - rc = 0; - } - break; - - /***/ - case IO_CMD_LIST: { - //printf("Usage: gioctl cx list\n"); - uint8_t *msgrep; - uint8_t i; - struct nas_msg_cx_list_reply *list; - uint8_t lcr; - gifr.type=NAS_MSG_CX_LIST_REQUEST; - //gifr.msg=(char *)malloc(NAS_LIST_CX_MAX*sizeof(struct nas_msg_cx_list_reply)+1); - memset (ralpriv->buffer,0,800); - gifr.msg= &(ralpriv->buffer[0]); - msgrep=(uint8_t *)(gifr.msg); - // - NOTICE("[MSC_MSG][%s][%s][--- ioctl : NAS_MSG_CX_LIST_REQUEST --->][nas]\n", getTimeStamp4Log(), g_link_id); - err=ioctl(fd, NASMT_IOCTL_RAL, &gifr); - - if (err<0) { - ERR("IOCTL error, err=%d\n",err); - rc = -1; - } else { - NOTICE("[MSC_MSG][%s][nas][--- NAS_UE_MSG_CNX_LIST_REPLY --->][%s]\n", getTimeStamp4Log(), g_link_id); - DEBUG("Lcr\t\tCellId\tIID4\tIID6\t\t\tnum_rb\tnsclass\tState\n"); - list=(struct nas_msg_cx_list_reply *)(msgrep+1); - lcr=0; - DEBUG("%u\t\t%u\t%u\t", list[lcr].lcr, list[lcr].cellid, list[lcr].iid4); - - for (i=0; i<8; ++i) - DEBUG("%02x", *((uint8_t *)list[lcr].iid6+i)); - - DEBUG("\t%u\t%u\t", list[lcr].num_rb, list[lcr].nsclassifier); - print_state(list[lcr].state); - - ralpriv->nas_state = list[lcr].state ; - ralpriv->num_rb = list[lcr].num_rb; - ralpriv->num_class = list[lcr].nsclassifier; - ralpriv->cell_id = list[lcr].cellid ; - //IAL_return_NAS_StatAttach(); - rc = 0; - } - } - break; - - /***/ - default: - ERR ("IAL_process_NAS_message : IO_OBJ_CNX : invalid ioctl command %d\n",ioctl_cmd); - rc= -1; - } //end switch ioctl_cmd - - break; - - /***************************/ - case IO_OBJ_RB: - switch (ioctl_cmd) { - /***/ - case IO_CMD_LIST: { - //printf("Usage: gioctl rb list \n"); - uint8_t *msgrep; - uint8_t rbi; - struct nas_msg_rb_list_reply *list; - struct nas_msg_rb_list_request *msgreq; - gifr.type=NAS_MSG_RB_LIST_REQUEST; - // gifr.msg=(char *)malloc(NAS_LIST_RB_MAX*sizeof(struct nas_msg_rb_list_reply)+1); - memset (ralpriv->buffer,0,800); - gifr.msg= &(ralpriv->buffer[0]); - msgreq=(struct nas_msg_rb_list_request *)(gifr.msg); - msgrep=(uint8_t *)(gifr.msg); - msgreq->lcr=0; //Temp - MT - // - NOTICE("[MSC_MSG][%s][%s][--- ioctl : NAS_MSG_RB_LIST_REQUEST --->][nas]\n", getTimeStamp4Log(), g_link_id); - err=ioctl(fd, NASMT_IOCTL_RAL, &gifr); - - if (err<0) { - ERR("IOCTL error, err=%d\n",err); - rc = -1; - } else { - DEBUG("rab_id\t\tSapi\t\tQoS\t\tState\n"); - list=(struct nas_msg_rb_list_reply *)(msgrep+1); - - for (rbi=0; rbinum_rb = msgrep[0]; - - for (rbi=0; rbinum_rb; rbi++) { - ralpriv->rbId[rbi]= list[rbi].rab_id; - ralpriv->QoSclass[rbi] = list[rbi].qos; - ralpriv->dscp[rbi] = rbi+4; - } - - //IAL_return_NAS_StatRB(); - } - } - break; - - /***/ - default: - ERR ("IAL_process_NAS_message : IO_OBJ_RB : invalid ioctl command %d\n",ioctl_cmd); - rc= -1; - } //end switch ioctl_cmd - - break; - - /***************************/ - case IO_OBJ_MEAS: - // - { - uint8_t i; - struct nas_msg_measure_request *msgreq; - struct nas_msg_measure_reply *msgrep; - gifr.type=NAS_MSG_MEAS_REQUEST; - // gifr.msg=(char *)malloc(sizeof(msgrep)buffer,0,800); - gifr.msg= &(ralpriv->buffer[0]); - msgreq=(struct nas_msg_measure_request *)(gifr.msg); - msgrep=(struct nas_msg_measure_reply *)(gifr.msg); - // - NOTICE("[MSC_MSG][%s][%s][--- ioctl : NAS_MSG_MEAS_REQUEST --->][nas]\n", getTimeStamp4Log(), g_link_id); - err=ioctl(fd, NASMT_IOCTL_RAL, &gifr); - - if (err<0) { - ERR("IOCTL error, err=%d\n",err); - rc = -1; - } else { - // - NOTICE("[MSC_MSG][%s][nas][--- NAS_MSG_MEAS_REPLY --->][%s]\n", getTimeStamp4Log(), g_link_id); - - // ralpriv->num_measures = msgrep->num_cells; TEMP- To be activated later - for (i=0; inum_cells; i++) { - ralpriv->meas_cell_id[i] = msgrep-> measures[i].cell_id; - IAL_integrate_measure(msgrep-> measures[i].level, i); - ralpriv->provider_id[i] = msgrep-> measures[i].provider_id; - } - - DEBUG("Measurement Report - Number of cells %d - Current cell %d\n", msgrep->num_cells, ralpriv->cell_id); -#ifdef DEBUG_MRALU_MEASURES - DEBUG("Cell_id\tMeasure\tProvider_id\n"); - - for (i=0; inum_cells; i++) { - DEBUG(" %d\t%d\t%d\n",msgrep-> measures[i].cell_id,msgrep-> measures[i].level,msgrep-> measures[i].provider_id); - } - -#endif - //Temp - //ralpriv->meas_cell_id[0] = ralpriv->cell_id; - rc = 0; - } - } - break; - - /***************************/ - case IO_OBJ_IMEI: { - struct nas_msg_l2id_reply *msgrep; - gifr.type=NAS_MSG_IMEI_REQUEST; - // gifr.msg=(char *)malloc(sizeof(struct nas_msg_statistic_reply)); - memset (ralpriv->buffer,0,800); - gifr.msg= &(ralpriv->buffer[0]); - msgrep=(struct nas_msg_l2id_reply *)(gifr.msg); - NOTICE("[MSC_MSG][%s][%s][--- ioctl : NAS_MSG_IMEI_REQUEST (L2Id) --->][nas]\n", getTimeStamp4Log(), g_link_id); - err=ioctl(fd, NASMT_IOCTL_RAL, &gifr); - - if (err<0) { - ERR("IOCTL error, err=%d\n",err); - rc = -1; - // default IMEI address : NAS_DEFAULT_IMEI - RAL_imei2iid(NAS_DEFAULT_IMEI, (uint8_t *)&(ralpriv->ipv6_l2id[0])); - } else { - NOTICE("[MSC_MSG][%s][nas][--- NAS_MSG_IMEI_REPLY --->][%s]\n", getTimeStamp4Log(), g_link_id); - DEBUG("IMEI value received= %d %d\n", msgrep->l2id[0], msgrep->l2id[1]); - //store the received value, to be used later - ralpriv->ipv6_l2id[0] = msgrep->l2id[0]; - ralpriv->ipv6_l2id[1] = msgrep->l2id[1]; - rc = 0; - } - } - break; - - /***************************/ - default: - ERR ("IAL_process_NAS_message : invalid ioctl object %d\n",ioctl_obj); - rc= -1; - } //end switch ioctl_obj - - return rc; -} - diff --git a/openair3/RAL-LTE/LTE_RAL_UE/SRC/lteRALue_main.c b/openair3/RAL-LTE/LTE_RAL_UE/SRC/lteRALue_main.c deleted file mode 100755 index 2448d08283..0000000000 --- a/openair3/RAL-LTE/LTE_RAL_UE/SRC/lteRALue_main.c +++ /dev/null @@ -1,375 +0,0 @@ -/*************************************************************************** - lteRALue_main.c - description - *************************************************************************** - Eurecom OpenAirInterface 3 - Copyright(c) 1999 - 2013 Eurecom - - This program is free software; you can redistribute it and/or modify it - under the terms and conditions of the GNU General Public License, - version 2, as published by the Free Software Foundation. - - This program is distributed in the hope it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - more details. - - You should have received a copy of the GNU General Public License along with - this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - - The full GNU General Public License is included in this distribution in - the file called "COPYING". - - Contact Information - Openair Admin: openair_admin@eurecom.fr - Openair Tech : openair_tech@eurecom.fr - Forums : http://forums.eurecom.fsr/openairinterface - Address : Eurecom, 450 route des Chappes, 06410 Biot Sophia Antipolis, France -*******************************************************************************/ -/*! \file lteRALue_main.c - * \brief This file contains the main() function for the LTE-RAL-UE - * \author WETTERWALD Michelle, GAUTHIER Lionel, MAUREL Frederic - * \date 2013 - * \company EURECOM - * \email: michelle.wetterwald@eurecom.fr, lionel.gauthier@eurecom.fr, frederic.maurel@eurecom.fr - */ -/*******************************************************************************/ -#define LTE_RAL_UE -#define LTERALUE_MAIN_C -//----------------------------------------------------------------------------- -#include -# include -#include -#include -#include -#include -#include -//----------------------------------------------------------------------------- -#include "assertions.h" -#include "lteRALue.h" -#include "LAYER2/MAC/extern.h" -#include "intertask_interface.h" -#include "OCG.h" -//----------------------------------------------------------------------------- - -extern unsigned char NB_eNB_INST; -extern unsigned char NB_UE_INST; -extern OAI_Emulation oai_emulation; - - -//--------------------------------------------------------------------------- -void mRAL_get_IPv6_addr(void) -{ - //--------------------------------------------------------------------------- -#define IPV6_ADDR_LINKLOCAL 0x0020U - -#ifdef RAL_DUMMY - char * eth0_name="eth0";/* interface name */ -#endif -#ifdef RAL_REALTIME - char * graal0_name="oai0";/* interface name */ -#endif - - FILE *f; - char devname[20]; - int plen, scope, dad_status, if_idx; - char addr6p[8][5]; - int intf_found = 0; - char my_addr[16]; - char temp_addr[32]; - int i, j; - - if ((f = fopen("/proc/net/if_inet6", "r")) != NULL) { - while (fscanf(f, "%4s%4s%4s%4s%4s%4s%4s%4s %02x %02x %02x %02x %20s\n", - addr6p[0], addr6p[1], addr6p[2], addr6p[3], - addr6p[4], addr6p[5], addr6p[6], addr6p[7], - &if_idx, &plen, &scope, &dad_status, devname) != EOF) { -#ifdef RAL_DUMMY - - if (!strcmp(devname, eth0_name)) { -#endif -#ifdef RAL_REALTIME - - if (!strcmp(devname, graal0_name)) { -#endif - intf_found = 1; - - // retrieve numerical value - if ((scope ==0)||(scope== IPV6_ADDR_LINKLOCAL)) { - LOG_D(RAL_UE, " adresse %s:%s:%s:%s:%s:%s:%s:%s", - addr6p[0], addr6p[1], addr6p[2], addr6p[3], - addr6p[4], addr6p[5], addr6p[6], addr6p[7]); - LOG_D(RAL_UE, " Scope:"); - - switch (scope) { - case 0: - LOG_D(RAL_UE, "Global"); - break; - - case IPV6_ADDR_LINKLOCAL: - LOG_D(RAL_UE, "Link"); - break; - - default: - LOG_D(RAL_UE, "Unknown"); - } - - LOG_D(RAL_UE, "\n Numerical value: "); - - for (i = 0; i < 8; i++) { - for (j=0; j<4; j++) { - addr6p[i][j]= toupper(addr6p[i][j]); - - if ((addr6p[i][j] >= 'A') && (addr6p[i][j] <= 'F')) { - temp_addr[(4*i)+j] =(unsigned short int)(addr6p[i][j]-'A')+10; - } else if ((addr6p[i][j] >= '0') && (addr6p[i][j] <= '9')) { - temp_addr[(4*i)+j] =(unsigned short int)(addr6p[i][j]-'0'); - } - } - - my_addr[2*i]= (16*temp_addr[(4*i)])+temp_addr[(4*i)+1]; - my_addr[(2*i)+1]= (16*temp_addr[(4*i)+2])+temp_addr[(4*i)+3]; - - } - - for (i=0; i<16; i++) { - LOG_D(RAL_UE, "-%hhx-",my_addr[i]); - } - - LOG_D(RAL_UE, "\n\n"); - } - } - } - - fclose(f); - - if (!intf_found) { - LOG_E(RAL_UE, "interface not found\n\n"); - } - } - } - - - //--------------------------------------------------------------------------- - void mRAL_init_default_values(void) - //--------------------------------------------------------------------------- - { - g_conf_ue_ral_listening_port = UE_DEFAULT_LOCAL_PORT_RAL; - g_conf_ue_ral_ip_address = UE_DEFAULT_IP_ADDRESS_RAL; - g_conf_ue_ral_link_id = UE_DEFAULT_LINK_ID_RAL; - g_conf_ue_ral_link_address = UE_DEFAULT_LINK_ADDRESS_RAL; - g_conf_ue_mihf_remote_port = UE_DEFAULT_REMOTE_PORT_MIHF; - g_conf_ue_mihf_ip_address = UE_DEFAULT_IP_ADDRESS_MIHF; - g_conf_ue_mihf_id = UE_DEFAULT_MIHF_ID; - } - - //--------------------------------------------------------------------------- - int mRAL_initialize(void) { - //--------------------------------------------------------------------------- - ral_ue_instance_t instance = 0; - module_id_t mod_id = 0; - char *char_tmp = NULL; - - MIH_C_init(); - - srand(time(NULL)); - - memset(g_ue_ral_obj, 0, sizeof(lte_ral_ue_object_t)*MAX_MODULES); - - g_ue_ral_fd2instance = hashtable_create (32, NULL, hash_free_int_func); - - for (mod_id = oai_emulation.info.first_ue_local; mod_id < oai_emulation.info.first_ue_local+ oai_emulation.info.nb_ue_local; mod_id++) { - - instance = mod_id + NB_eNB_INST; - char_tmp = calloc(1, strlen(g_conf_ue_ral_listening_port) + 3); // 2 digits + \0 ->99 mod_ids - sprintf(char_tmp,"%d", atoi(g_conf_ue_ral_listening_port) + mod_id); - g_ue_ral_obj[mod_id].ral_listening_port = char_tmp; - - g_ue_ral_obj[mod_id].ral_ip_address = strdup(g_conf_ue_ral_ip_address); - g_ue_ral_obj[mod_id].ral_link_address = strdup(g_conf_ue_ral_link_address); - - char_tmp = calloc(1, strlen(g_conf_ue_mihf_remote_port) + 3); // 2 digits + \0 ->99 mod_ids - sprintf(char_tmp, "%d", atoi(g_conf_ue_mihf_remote_port) + mod_id); - g_ue_ral_obj[mod_id].mihf_remote_port = char_tmp; - - g_ue_ral_obj[mod_id].mihf_ip_address = strdup(g_conf_ue_mihf_ip_address); - - char_tmp = calloc(1, strlen(g_conf_ue_mihf_id) + 3); // 2 digits + \0 ->99 mod_ids - sprintf(char_tmp, "%s%02d",g_conf_ue_mihf_id, mod_id); - g_ue_ral_obj[mod_id].mihf_id = char_tmp; - - char_tmp = calloc(1, strlen(g_conf_ue_ral_link_id) + 3); // 2 digits + \0 ->99 mod_ids - sprintf(char_tmp, "%s%02d",g_conf_ue_ral_link_id, mod_id); - g_ue_ral_obj[mod_id].link_id = char_tmp; - - char_tmp = NULL; - - printf("g_ue_ral_obj[%d].link_id=%s\n", mod_id, g_ue_ral_obj[mod_id].link_id); - // excluded MIH_C_LINK_AC_TYPE_NONE - // excluded MIH_C_LINK_AC_TYPE_LINK_LOW_POWER - g_ue_ral_obj[mod_id].mih_supported_action_list = MIH_C_LINK_AC_TYPE_LINK_DISCONNECT | - MIH_C_LINK_AC_TYPE_LINK_POWER_DOWN | - MIH_C_LINK_AC_TYPE_LINK_POWER_UP | - MIH_C_LINK_AC_TYPE_LINK_FLOW_ATTR | - MIH_C_LINK_AC_TYPE_LINK_ACTIVATE_RESOURCES | - MIH_C_LINK_AC_TYPE_LINK_DEACTIVATE_RESOURCES; - - - - g_ue_ral_obj[mod_id].mih_supported_link_event_list = MIH_C_BIT_LINK_DETECTED | - MIH_C_BIT_LINK_UP | - MIH_C_BIT_LINK_DOWN | - MIH_C_BIT_LINK_PARAMETERS_REPORT | - MIH_C_BIT_LINK_GOING_DOWN | - MIH_C_BIT_LINK_HANDOVER_IMMINENT | - MIH_C_BIT_LINK_HANDOVER_COMPLETE | - MIH_C_BIT_LINK_PDU_TRANSMIT_STATUS; - - g_ue_ral_obj[mod_id].mih_supported_link_command_list = MIH_C_BIT_LINK_EVENT_SUBSCRIBE | MIH_C_BIT_LINK_EVENT_UNSUBSCRIBE | - MIH_C_BIT_LINK_GET_PARAMETERS | MIH_C_BIT_LINK_CONFIGURE_THRESHOLDS | - MIH_C_BIT_LINK_ACTION; - - g_ue_ral_obj[mod_id].link_to_be_detected = MIH_C_BOOLEAN_TRUE; - - - - - g_ue_ral_obj[mod_id].link_mihcap_flag = MIH_C_BIT_EVENT_SERVICE_SUPPORTED | MIH_C_BIT_COMMAND_SERVICE_SUPPORTED | MIH_C_BIT_INFORMATION_SERVICE_SUPPORTED; - - g_ue_ral_obj[mod_id].net_caps = MIH_C_BIT_NET_CAPS_QOS_CLASS5 | MIH_C_BIT_NET_CAPS_INTERNET_ACCESS | MIH_C_BIT_NET_CAPS_MIH_CAPABILITY; - - - g_ue_ral_obj[mod_id].transaction_id = (MIH_C_TRANSACTION_ID_T)rand(); - - LOG_D(RAL_UE, " Connect to the MIH-F for module id instance %d...\n", mod_id, instance); - g_ue_ral_obj[mod_id].mih_sock_desc = -1; - AssertFatal (mRAL_mihf_connect(instance) >= 0, "%s : Could not connect to MIH-F...\n", __FUNCTION__); - itti_subscribe_event_fd(TASK_RAL_UE, g_ue_ral_obj[mod_id].mih_sock_desc); - hashtable_insert(g_ue_ral_fd2instance, g_ue_ral_obj[mod_id].mih_sock_desc, (void*)instance); - - mRAL_send_link_register_indication(instance, &g_ue_ral_obj[mod_id].transaction_id); - g_ue_ral_obj[mod_id].transaction_id += 1; - } - - return 0; - } - - void mRAL_process_file_descriptors(struct epoll_event *events, int nb_events) { - int i; - ral_ue_instance_t instance; - hashtable_rc_t rc; - - if (events == NULL) { - return; - } - - for (i = 0; i < nb_events; i++) { - rc = hashtable_get(g_ue_ral_fd2instance, events[i].data.fd, (void**)&instance); - - if (rc == HASH_TABLE_OK) { - mRAL_mih_link_process_message(instance); - } - } - } - - void* mRAL_task(void *args_p) { - int nb_events; - struct epoll_event *events; - MessageDef *msg_p = NULL; - const char *msg_name = NULL; - instance_t instance = 0; - - - mRAL_initialize(); - - itti_mark_task_ready (TASK_RAL_UE); - - // Set UE activation state - for (instance = NB_eNB_INST; instance < (NB_eNB_INST + NB_UE_INST); instance++) { - MessageDef *message_p; - - message_p = itti_alloc_new_message(TASK_RAL_UE, DEACTIVATE_MESSAGE); - itti_send_msg_to_task(TASK_L2L1, instance, message_p); - } - - while(1) { - // Wait for a message - itti_receive_msg (TASK_RAL_UE, &msg_p); - - if (msg_p != NULL) { - - msg_name = ITTI_MSG_NAME (msg_p); - instance = ITTI_MSG_INSTANCE (msg_p); - - switch (ITTI_MSG_ID(msg_p)) { - case TERMINATE_MESSAGE: - // TO DO - itti_exit_task (); - break; - - case TIMER_HAS_EXPIRED: - LOG_D(RAL_UE, "Received %s\n", msg_name); - break; - - case RRC_RAL_SCAN_CONF: - LOG_D(RAL_UE, "Received %s\n", msg_name); - mRAL_rx_rrc_ral_scan_confirm(instance, msg_p); - break; - - case RRC_RAL_SYSTEM_INFORMATION_IND: - LOG_D(RAL_UE, "Received %s\n", msg_name); - mRAL_rx_rrc_ral_system_information_indication(instance, msg_p); - break; - - case RRC_RAL_CONNECTION_ESTABLISHMENT_IND: - LOG_D(RAL_UE, "Received %s\n", msg_name); - mRAL_rx_rrc_ral_connection_establishment_indication(instance, msg_p); - break; - - case RRC_RAL_CONNECTION_REESTABLISHMENT_IND: - LOG_D(RAL_UE, "Received %s\n", msg_name); - mRAL_rx_rrc_ral_connection_reestablishment_indication(instance, msg_p); - break; - - case RRC_RAL_CONNECTION_RECONFIGURATION_IND: - LOG_D(RAL_UE, "Received %s\n", msg_name); - mRAL_rx_rrc_ral_connection_reconfiguration_indication(instance, msg_p); - break; - - case RRC_RAL_CONNECTION_RECONFIGURATION_HO_IND: - LOG_D(RAL_UE, "Received %s\n", msg_name); - //mRAL_rx_rrc_ral_connection_reconfiguration_ho_indication(instance, msg_p); - break; - - case RRC_RAL_MEASUREMENT_REPORT_IND: - LOG_D(RAL_UE, "Received %s\n", msg_name); - mRAL_rx_rrc_ral_measurement_report_indication(instance, msg_p); - break; - - case RRC_RAL_CONNECTION_RELEASE_IND: - LOG_D(RAL_UE, "Received %s\n", msg_name); - mRAL_rx_rrc_ral_connection_release_indication(instance, msg_p); - break; - - case RRC_RAL_CONFIGURE_THRESHOLD_CONF: - LOG_D(RAL_UE, "Received %s\n", msg_name); - mRAL_rx_rrc_ral_configure_threshold_conf(instance, msg_p); - break; - - default: - LOG_E(RAL_UE, "Received unexpected message %s\n", msg_name); - break; - } - - itti_free (ITTI_MSG_ORIGIN_ID(msg_p), msg_p); - msg_p = NULL; - } - - nb_events = itti_get_events(TASK_RAL_UE, &events); - - /* Now handle notifications for other sockets */ - if (nb_events > 0) { - mRAL_process_file_descriptors(events, nb_events); - } - } - } diff --git a/openair3/RAL-LTE/LTE_RAL_UE/SRC/lteRALue_mih_execute.c b/openair3/RAL-LTE/LTE_RAL_UE/SRC/lteRALue_mih_execute.c deleted file mode 100755 index fe7365d98b..0000000000 --- a/openair3/RAL-LTE/LTE_RAL_UE/SRC/lteRALue_mih_execute.c +++ /dev/null @@ -1,224 +0,0 @@ -/*************************************************************************** - lteRALue_mih_execute.c - description - *************************************************************************** - Eurecom OpenAirInterface 3 - Copyright(c) 1999 - 2013 Eurecom - - This program is free software; you can redistribute it and/or modify it - under the terms and conditions of the GNU General Public License, - version 2, as published by the Free Software Foundation. - - This program is distributed in the hope it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - more details. - - You should have received a copy of the GNU General Public License along with - this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - - The full GNU General Public License is included in this distribution in - the file called "COPYING". - - Contact Information - Openair Admin: openair_admin@eurecom.fr - Openair Tech : openair_tech@eurecom.fr - Forums : http://forums.eurecom.fsr/openairinterface - Address : Eurecom, 450 route des Chappes, 06410 Biot Sophia Antipolis, France -*******************************************************************************/ -/*! \file lteRALue_mih_execute.c - * \brief Execution of MIH primitives in LTE-RAL-UE - * \author WETTERWALD Michelle, GAUTHIER Lionel, MAUREL Frederic - * \date 2013 - * \company EURECOM - * \email: michelle.wetterwald@eurecom.fr, lionel.gauthier@eurecom.fr, frederic.maurel@eurecom.fr - */ -/*******************************************************************************/ -#define LTE_RAL_UE -#define LTERALUE_MIH_MSG_C - -#include -//----------------------------------------------------------------------------- -#include "lteRALue.h" - - - - - -//----------------------------------------------------------------------------- -void mRAL_configure_thresholds_request(MIH_C_Message_Link_Configure_Thresholds_request_t* messageP) -{ - //----------------------------------------------------------------------------- - MIH_C_STATUS_T status; - MIH_C_LINK_CFG_STATUS_LIST_T link_cfg_status_list; - unsigned int threshold_index; - unsigned int link_index; - unsigned int result_index; - - // SAVE REQUEST - // IT IS ASSUMED SINCE IT IS NOT CLEAR IN SPECs THAT THERE IS NO NEED TO MERGE CONFIGURE_THRESHOLDS_requests - //memset(&ralpriv->mih_link_cfg_param_thresholds_list, 0, sizeof(MIH_C_LINK_CFG_PARAM_LIST_T)); - memcpy(&ralpriv->mih_link_cfg_param_thresholds_list, &messageP->primitive.LinkConfigureParameterList_list, sizeof(MIH_C_LINK_CFG_PARAM_LIST_T)); - - status = MIH_C_STATUS_SUCCESS; - - result_index = 0; - - for (link_index = 0; - link_index < messageP->primitive.LinkConfigureParameterList_list.length; - link_index++) { - - ralpriv->active_mih_link_cfg_param_threshold[link_index] = MIH_C_BOOLEAN_TRUE; - - for (threshold_index = 0; - threshold_index < messageP->primitive.LinkConfigureParameterList_list.val[link_index].threshold_list.length; - threshold_index ++) { - - memcpy(&link_cfg_status_list.val[result_index].link_param_type, - &messageP->primitive.LinkConfigureParameterList_list.val[link_index].link_param_type, - sizeof(MIH_C_LINK_PARAM_TYPE_T)); - - memcpy(&link_cfg_status_list.val[result_index].threshold, - &messageP->primitive.LinkConfigureParameterList_list.val[link_index].threshold_list.val[threshold_index], - sizeof(MIH_C_THRESHOLD_T)); - - // NOW, ALWAYS SAY OK FOR PARAMETERS, BUT MAY BE WE WILL PUT MIH_C_BOOLEAN_FALSE in active_mih_link_cfg_param_threshold[link_index] - link_cfg_status_list.val[result_index].config_status = MIH_C_CONFIG_STATUS_SUCCESS; - - result_index += 1; - } - } - - // Say following thresholds entries are not configured - for (link_index = messageP->primitive.LinkConfigureParameterList_list.length; - link_index < MIH_C_LINK_CFG_PARAM_LIST_LENGTH; - link_index++) { - ralpriv->active_mih_link_cfg_param_threshold[link_index] = MIH_C_BOOLEAN_FALSE; - } - - link_cfg_status_list.length = result_index; - - mRALte_send_configure_thresholds_confirm(&messageP->header.transaction_id,&status, &link_cfg_status_list); -} -/* -//----------------------------------------------------------------------------- -void mRAL_check_thresholds_signal_strength(MIH_C_THRESHOLD_VAL_T new_valP, MIH_C_THRESHOLD_VAL_T old_valP) { -//----------------------------------------------------------------------------- - - unsigned int threshold_index, threshold_index_mov; - unsigned int link_index; - unsigned int buffer_index; - MIH_C_THRESHOLD_VAL_T threshold_val; - MIH_C_THRESHOLD_XDIR_T threshold_xdir; - MIH_C_TH_ACTION_T th_action; - LIST(MIH_C_LINK_PARAM_RPT, LinkParametersReportList); - MIH_C_TRANSACTION_ID_T transaction_id; - MIH_C_LINK_TUPLE_ID_T link_identifier; - char buf[256]; - - DEBUG("%s new_val %d old_val %d\n", __FUNCTION__, new_valP, old_valP); - - LinkParametersReportList_list.length = 0; - for (link_index = 0; - link_index < MIH_C_LINK_CFG_PARAM_LIST_LENGTH; - link_index++) { - - if (ralpriv->active_mih_link_cfg_param_threshold[link_index] == MIH_C_BOOLEAN_TRUE) { - - if ( ralpriv->mih_link_cfg_param_thresholds_list.val[link_index].link_param_type.choice == MIH_C_LINK_PARAM_TYPE_CHOICE_GEN) { - - th_action = ralpriv->mih_link_cfg_param_thresholds_list.val[link_index].th_action; - - for (threshold_index = 0; - threshold_index < ralpriv->mih_link_cfg_param_thresholds_list.val[link_index].threshold_list.length; - threshold_index ++) { - - threshold_val = ralpriv->mih_link_cfg_param_thresholds_list.val[link_index].threshold_list.val[threshold_index].threshold_val; - threshold_xdir = ralpriv->mih_link_cfg_param_thresholds_list.val[link_index].threshold_list.val[threshold_index].threshold_xdir; - - switch (th_action) { - case MIH_C_SET_NORMAL_THRESHOLD: - if (((threshold_xdir == MIH_C_ABOVE_THRESHOLD) && (old_valP <= threshold_val) && (new_valP > threshold_val)) || - ((threshold_xdir == MIH_C_BELOW_THRESHOLD) && (old_valP >= threshold_val) && (new_valP < threshold_val))) { - - memset(buf, 0, 256); - buffer_index = sprintf(buf, "CROSSED NORMAL THRESHOLD VAL %d DIR ", threshold_val); - buffer_index = MIH_C_THRESHOLD_XDIR2String2(&threshold_xdir, &buf[buffer_index]); - buffer_index = sprintf(buf, " with VAL %d\n", new_valP); - NOTICE("%s", buf); - - LinkParametersReportList_list.val[LinkParametersReportList_list.length].link_param.link_param_type.choice = MIH_C_LINK_PARAM_TYPE_CHOICE_GEN; - LinkParametersReportList_list.val[LinkParametersReportList_list.length].link_param.link_param_type._union.link_param_gen = MIH_C_LINK_PARAM_GEN_SIGNAL_STRENGTH; - LinkParametersReportList_list.val[LinkParametersReportList_list.length].link_param.choice = MIH_C_LINK_PARAM_CHOICE_LINK_PARAM_VAL; - LinkParametersReportList_list.val[LinkParametersReportList_list.length].link_param._union.link_param_val = new_valP; - - LinkParametersReportList_list.val[LinkParametersReportList_list.length].choice = MIH_C_LINK_PARAM_RPT_CHOICE_THRESHOLD; - LinkParametersReportList_list.val[LinkParametersReportList_list.length]._union.threshold.threshold_val = threshold_val; - LinkParametersReportList_list.val[LinkParametersReportList_list.length]._union.threshold.threshold_xdir = threshold_xdir; - LinkParametersReportList_list.length = LinkParametersReportList_list.length + 1; - } - break; - case MIH_C_SET_ONE_SHOT_THRESHOLD: - if (((threshold_xdir == MIH_C_ABOVE_THRESHOLD) && (old_valP <= threshold_val) && (new_valP > threshold_val)) || - ((threshold_xdir == MIH_C_BELOW_THRESHOLD) && (old_valP >= threshold_val) && (new_valP < threshold_val))) { - - memset(buf, 0, 256); - buffer_index = sprintf(buf, "CROSSED ONE SHOT THRESHOLD VAL %d DIR ", threshold_val); - buffer_index = MIH_C_THRESHOLD_XDIR2String2(&threshold_xdir, &buf[buffer_index]); - buffer_index = sprintf(buf, " with VAL %d\n", new_valP); - NOTICE("%s", buf); - - LinkParametersReportList_list.val[LinkParametersReportList_list.length].link_param.link_param_type.choice = MIH_C_LINK_PARAM_TYPE_CHOICE_GEN; - LinkParametersReportList_list.val[LinkParametersReportList_list.length].link_param.link_param_type._union.link_param_gen = MIH_C_LINK_PARAM_GEN_SIGNAL_STRENGTH; - LinkParametersReportList_list.val[LinkParametersReportList_list.length].link_param.choice = MIH_C_LINK_PARAM_CHOICE_LINK_PARAM_VAL; - LinkParametersReportList_list.val[LinkParametersReportList_list.length].link_param._union.link_param_val = new_valP; - - LinkParametersReportList_list.val[LinkParametersReportList_list.length].choice = MIH_C_LINK_PARAM_RPT_CHOICE_THRESHOLD; - LinkParametersReportList_list.val[LinkParametersReportList_list.length]._union.threshold.threshold_val = threshold_val; - LinkParametersReportList_list.val[LinkParametersReportList_list.length]._union.threshold.threshold_xdir = threshold_xdir; - LinkParametersReportList_list.length = LinkParametersReportList_list.length + 1; - - // Remove this threshold: shift Thresholds - for (threshold_index_mov = threshold_index; - threshold_index_mov < ralpriv->mih_link_cfg_param_thresholds_list.val[link_index].threshold_list.length - 1; - threshold_index_mov ++) { - memcpy(&ralpriv->mih_link_cfg_param_thresholds_list.val[link_index].threshold_list.val[threshold_index_mov], - &ralpriv->mih_link_cfg_param_thresholds_list.val[link_index].threshold_list.val[threshold_index_mov+1], - sizeof(MIH_C_THRESHOLD_T)); - } - } - break; - // may be not necessary here - case MIH_C_CANCEL_THRESHOLD: - // shift Thresholds - for (threshold_index_mov = threshold_index; - threshold_index_mov < ralpriv->mih_link_cfg_param_thresholds_list.val[link_index].threshold_list.length - 1; - threshold_index_mov ++) { - memcpy(&ralpriv->mih_link_cfg_param_thresholds_list.val[link_index].threshold_list.val[threshold_index_mov], - &ralpriv->mih_link_cfg_param_thresholds_list.val[link_index].threshold_list.val[threshold_index_mov+1], - sizeof(MIH_C_THRESHOLD_T)); - } - ralpriv->mih_link_cfg_param_thresholds_list.val[link_index].threshold_list.length -= 1; - break; - default: - ERR("%s UNKNOWN TH ACTION FOUND, RETURN", __FUNCTION__); - return; - } - } - } - } - } - if (LinkParametersReportList_list.length > 0) { - transaction_id = MIH_C_get_new_transaction_id(); - - link_identifier.link_id.link_type = MIH_C_WIRELESS_UMTS; - link_identifier.link_id.link_addr.choice = (MIH_C_CHOICE_T)MIH_C_CHOICE_3GPP_ADDR; - MIH_C_3GPP_ADDR_set(&link_identifier.link_id.link_addr._union._3gpp_addr, (u_int8_t*)&(ralpriv->ipv6_l2id[0]), strlen(DEFAULT_ADDRESS_3GPP)); - link_identifier.choice = MIH_C_LINK_TUPLE_ID_CHOICE_NULL; - - mRAL_send_link_parameters_report_indication(&transaction_id, &link_identifier, &LinkParametersReportList_list); - } -} -*/ - - diff --git a/openair3/RAL-LTE/LTE_RAL_UE/SRC/lteRALue_mih_msg.c b/openair3/RAL-LTE/LTE_RAL_UE/SRC/lteRALue_mih_msg.c deleted file mode 100755 index 6a521d2bc3..0000000000 --- a/openair3/RAL-LTE/LTE_RAL_UE/SRC/lteRALue_mih_msg.c +++ /dev/null @@ -1,966 +0,0 @@ -/*************************************************************************** - lteRALue_mih_msg.c - description - *************************************************************************** - Eurecom OpenAirInterface 3 - Copyright(c) 1999 - 2013 Eurecom - - This program is free software; you can redistribute it and/or modify it - under the terms and conditions of the GNU General Public License, - version 2, as published by the Free Software Foundation. - - This program is distributed in the hope it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - more details. - - You should have received a copy of the GNU General Public License along with - this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - - The full GNU General Public License is included in this distribution in - the file called "COPYING". - - Contact Information - Openair Admin: openair_admin@eurecom.fr - Openair Tech : openair_tech@eurecom.fr - Forums : http://forums.eurecom.fsr/openairinterface - Address : Eurecom, 450 route des Chappes, 06410 Biot Sophia Antipolis, France -*******************************************************************************/ -/*! \file lteRALue_mih_msg.c - * \brief Interface for MIH primitives in LTE-RAL-UE - * \author WETTERWALD Michelle, GAUTHIER Lionel, MAUREL Frederic - * \date 2013 - * \company EURECOM - * \email: michelle.wetterwald@eurecom.fr, lionel.gauthier@eurecom.fr, frederic.maurel@eurecom.fr - */ -/*******************************************************************************/ -#define LTE_RAL_UE -#define LTERALUE_MIH_MSG_C -//----------------------------------------------------------------------------- -#include "lteRALue.h" -#include "LAYER2/MAC/extern.h" -//----------------------------------------------------------------------------- -#define MSG_CODEC_RECV_BUFFER_SIZE 16400 -#define MSG_CODEC_SEND_BUFFER_SIZE 16400 - -/****************************************************************************/ -/******************* L O C A L D E F I N I T I O N S *******************/ -/****************************************************************************/ - -static u_int8_t g_msg_codec_recv_buffer[MSG_CODEC_RECV_BUFFER_SIZE] = {}; -static u_int8_t g_msg_codec_send_buffer[MSG_CODEC_SEND_BUFFER_SIZE] = {}; - -static char g_msg_print_buffer[8192] = {}; -static char g_msg_codec_print_buffer[8192] = {}; - - -//----------------------------------------------------------------------------- -int mRAL_send_to_mih(ral_ue_instance_t instanceP, u_int8_t *buffer_pP, size_t lenP) -{ - //----------------------------------------------------------------------------- - int result; - module_id_t mod_id = instanceP - NB_eNB_INST; - result = send(g_ue_ral_obj[mod_id].mih_sock_desc, (const void *)buffer_pP, lenP, 0); - - if (result != lenP) { - LOG_E(RAL_UE, "send_to_mih %d bytes failed, returned %d: %s\n", lenP, result, strerror(errno)); - } - - return result; -} - -//--------------------------------------------------------------------------- -int mRAL_mihf_connect(ral_ue_instance_t instanceP) -{ - //--------------------------------------------------------------------------- - struct addrinfo info; /* endpoint information */ - struct addrinfo *addr, *rp; /* endpoint address */ - int rc; /* returned error code */ - int optval; /* socket option value */ - module_id_t mod_id = instanceP - NB_eNB_INST; - - unsigned char buf[sizeof(struct sockaddr_in6)]; - - /* - * Initialize the remote MIH-F endpoint address information - */ - memset(&info, 0, sizeof(struct addrinfo)); - info.ai_family = AF_UNSPEC; /* Allow IPv4 or IPv6 */ - info.ai_socktype = SOCK_DGRAM; /* Datagram socket */ - info.ai_flags = 0; - info.ai_protocol = 0; /* Any protocol */ - - rc = getaddrinfo(g_ue_ral_obj[mod_id].mihf_ip_address, g_ue_ral_obj[mod_id].mihf_remote_port, &info, &addr); - - if (rc != 0) { - LOG_E(RAL_UE, " getaddrinfo: %s\n", gai_strerror(rc)); - return -1; - } - - /* - * getaddrinfo() returns a linked list of address structures. - * Try each address until we successfully connect(2). If socket(2) - * (or connect(2)) fails, we (close the socket and) try the next address. - */ - for (rp = addr; rp != NULL; rp = rp->ai_next) { - - g_ue_ral_obj[mod_id].mih_sock_desc = socket(rp->ai_family, rp->ai_socktype, rp->ai_protocol); - - if (g_ue_ral_obj[mod_id].mih_sock_desc < 0) { - continue; - } - - optval = 1; - setsockopt(g_ue_ral_obj[mod_id].mih_sock_desc, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof(optval)); - - /* - * Convert the RAL local network address - */ - if (rp->ai_family == AF_INET) { - /* IPv4 network address family */ - struct sockaddr_in *addr4 = NULL; - - LOG_D(RAL_UE, " %s is an ipv4 address\n", g_ue_ral_obj[mod_id].mihf_ip_address); - addr4 = (struct sockaddr_in *)(&buf[0]); - addr4->sin_port = htons(atoi(g_ue_ral_obj[mod_id].ral_listening_port)); - addr4->sin_family = AF_INET; - rc = inet_pton(AF_INET, g_ue_ral_obj[mod_id].ral_ip_address, &addr4->sin_addr); - } else if (rp->ai_family == AF_INET6) { - /* IPv6 network address family */ - struct sockaddr_in6 *addr6 = NULL; - - LOG_D(RAL_UE, " %s is an ipv6 address\n", g_ue_ral_obj[mod_id].mihf_ip_address); - addr6 = (struct sockaddr_in6 *)(&buf[0]); - addr6->sin6_port = htons(atoi(g_ue_ral_obj[mod_id].ral_listening_port)); - addr6->sin6_family = AF_INET6; - rc = inet_pton(AF_INET, g_ue_ral_obj[mod_id].ral_ip_address, &addr6->sin6_addr); - } else { - LOG_E(RAL_UE, " %s is an unknown address format %d\n", - g_ue_ral_obj[mod_id].mihf_ip_address, rp->ai_family); - return -1; - } - - if (rc < 0) { - /* The network address convertion failed */ - LOG_E(RAL_UE, " inet_pton(RAL IP address %s): %s\n", - g_ue_ral_obj[mod_id].ral_ip_address, strerror(rc)); - return -1; - } else if (rc == 0) { - /* The network address is not valid */ - LOG_E(RAL_UE, " RAL IP address %s is not valid\n", g_ue_ral_obj[mod_id].ral_ip_address); - return -1; - } - - /* Bind the socket to the local RAL network address */ - rc = bind(g_ue_ral_obj[mod_id].mih_sock_desc, (const struct sockaddr *)buf, - sizeof(struct sockaddr_in)); - - if (rc < 0) { - LOG_E(RAL_UE, " bind(RAL IP address %s): %s\n", - g_ue_ral_obj[mod_id].ral_ip_address, strerror(errno)); - return -1; - } - - /* Connect the socket to the remote MIH-F network address */ - if (connect(g_ue_ral_obj[mod_id].mih_sock_desc, rp->ai_addr, rp->ai_addrlen) == 0) { - LOG_N(RAL_UE, " RAL [%s:%s] is now UDP-CONNECTED to MIH-F [%s:%s]\n", - g_ue_ral_obj[mod_id].ral_ip_address, g_ue_ral_obj[mod_id].ral_listening_port, - g_ue_ral_obj[mod_id].mihf_ip_address, g_ue_ral_obj[mod_id].mihf_remote_port); - break; - } - - /* - * We failed to connect: - * Close the socket file descriptor and try to connect to an other - * address. - */ - close(g_ue_ral_obj[mod_id].mih_sock_desc); - } - - /* - * Unable to connect to a network address - */ - if (rp == NULL) { - LOG_E(RAL_UE, " Could not connect to MIH-F\n"); - return -1; - } - - freeaddrinfo(addr); - - return 0; -} - - -//----------------------------------------------------------------------------- -void MIH_C_3GPP_ADDR_load_3gpp_str_address(ral_ue_instance_t instanceP, MIH_C_3GPP_ADDR_T* _3gpp_addr_pP, u_int8_t* str_pP) -//----------------------------------------------------------------------------- -{ - int i, l; - u_int8_t val_temp; - unsigned char address_3gpp[32]; - unsigned char buf[3]; - u_int8_t _3gpp_byte_address[8]; - module_id_t mod_id = instanceP - NB_eNB_INST; - - strcpy((char *)address_3gpp, (char *)str_pP); - - for(l=0; l<8; l++) { - i=l*2; - buf[0]= address_3gpp[i]; - buf[1]= address_3gpp[i+1]; - buf[2]= '\0'; - //sscanf((const char *)buf,"%02x", &val_temp); - sscanf((const char *)buf,"%hhx", &val_temp); - _3gpp_byte_address[l] = val_temp; - } - - _3gpp_byte_address[7] += mod_id; - MIH_C_3GPP_ADDR_set(_3gpp_addr_pP, _3gpp_byte_address, 8); -} - - -/*************************************************************************** - Transmission side - ***************************************************************************/ - -//----------------------------------------------------------------------------- -void mRAL_send_link_register_indication(ral_ue_instance_t instanceP, - MIH_C_TRANSACTION_ID_T *transaction_id_pP) -{ - //----------------------------------------------------------------------------- - MIH_C_Message_Link_Register_indication_t message; - Bit_Buffer_t *bb_p; - int message_total_length; - module_id_t mod_id = instanceP - NB_eNB_INST; - - bb_p = new_BitBuffer_0(); - BitBuffer_wrap(bb_p, g_msg_codec_send_buffer, (unsigned int)MSG_CODEC_SEND_BUFFER_SIZE); - - memset(&message, 0, sizeof (MIH_C_Message_Link_Register_indication_t)); - - message.header.version = (MIH_C_VERSION_T)MIH_C_PROTOCOL_VERSION; - message.header.service_identifier = (MIH_C_SID_T)1; - message.header.operation_code = (MIH_C_OPCODE_T)3; - message.header.action_identifier = (MIH_C_AID_T)6; - message.header.transaction_id = *transaction_id_pP; - - - MIH_C_MIHF_ID_set(&message.source, (u_int8_t*)g_ue_ral_obj[mod_id].link_id, strlen(g_ue_ral_obj[mod_id].link_id)); - - MIH_C_MIHF_ID_set(&message.destination, (u_int8_t*)g_ue_ral_obj[mod_id].mihf_id, strlen(g_ue_ral_obj[mod_id].mihf_id)); - - - message.primitive.Link_Id.link_type = MIH_C_WIRELESS_LTE; //MIH_C_WIRELESS_UMTS; -#ifdef USE_3GPP_ADDR_AS_LINK_ADDR - message.primitive.Link_Id.link_addr.choice = (MIH_C_CHOICE_T)MIH_C_CHOICE_3GPP_ADDR; - MIH_C_3GPP_ADDR_load_3gpp_str_address(mod_id, &message.primitive.Link_Id.link_addr._union._3gpp_addr, (u_int8_t*)UE_DEFAULT_3GPP_ADDRESS); -#else - message.primitive.Link_Id.link_addr.choice = (MIH_C_CHOICE_T)MIH_C_CHOICE_3GPP_3G_CELL_ID; - memcpy(message.primitive.Link_Id.link_addr._union._3gpp_3g_cell_id.plmn_id.val, &g_ue_ral_obj[mod_id].plmn_id, 3); - message.primitive.Link_Id.link_addr._union._3gpp_3g_cell_id.cell_id = g_ue_ral_obj[mod_id].cell_id; -#endif - //MIH_C_3GPP_ADDR_set(&message.primitive.Link_Id.link_addr._union._3gpp_addr, (u_int8_t*)&(g_ue_ral_obj[instanceP].ipv6_l2id[0]), strlen(UE_DEFAULT_3GPP_ADDRESS)); - ////MIH_C_3GPP_ADDR_set(&message.primitive.Link_Id.link_addr._union._3gpp_addr, (u_int8_t*)UE_DEFAULT_3GPP_ADDRESS, strlen(UE_DEFAULT_3GPP_ADDRESS)); - ////MIH_C_3GPP_ADDR_load_3gpp_str_address(&message.primitive.Link_Id.link_addr._union._3gpp_addr, (u_int8_t*)UE_DEFAULT_3GPP_ADDRESS); - - - message_total_length = MIH_C_Link_Message_Encode_Link_Register_indication(bb_p, &message); - -#ifdef MSCGEN_PYTOOL - memset(g_msc_gen_buf, 0, MSC_GEN_BUF_SIZE); - g_msc_gen_buffer_index = 0; - MIH_C_LINK_ID2String(&message.primitive.Link_Id, g_msc_gen_buf); -#endif - - if (mRAL_send_to_mih(instanceP, bb_p->m_buffer,message_total_length)<0) { - printf("ERROR RAL_UE, : Send Link_Register.indication\n"); - LOG_E(RAL_UE, ": Send Link_Register.indication\n"); - } else { - printf("OK RAL_UE, : Send Link_Register.indication\n"); - LOG_D(RAL_UE, ": Sent Link_Register.indication\n"); - } - - free_BitBuffer(bb_p); -} -//----------------------------------------------------------------------------- -void mRAL_send_link_detected_indication(ral_ue_instance_t instanceP, - MIH_C_TRANSACTION_ID_T *transaction_id_pP, - MIH_C_LINK_DET_INFO_T *link_detected_info_pP) -{ - //----------------------------------------------------------------------------- - MIH_C_Message_Link_Detected_indication_t message; - Bit_Buffer_t *bb_p; - int message_total_length; - module_id_t mod_id = instanceP - NB_eNB_INST; - - bb_p = new_BitBuffer_0(); - BitBuffer_wrap(bb_p, g_msg_codec_send_buffer, (unsigned int)MSG_CODEC_SEND_BUFFER_SIZE); - - memset(&message, 0, sizeof (MIH_C_Message_Link_Detected_indication_t)); - - message.header.version = (MIH_C_VERSION_T)MIH_C_PROTOCOL_VERSION; - message.header.service_identifier = (MIH_C_SID_T)2; - message.header.operation_code = (MIH_C_OPCODE_T)3; - message.header.action_identifier = (MIH_C_AID_T)1; - message.header.transaction_id = *transaction_id_pP; - - - MIH_C_MIHF_ID_set(&message.source, (u_int8_t*)g_ue_ral_obj[mod_id].link_id, strlen(g_ue_ral_obj[mod_id].link_id)); - - MIH_C_MIHF_ID_set(&message.destination, (u_int8_t*)g_ue_ral_obj[mod_id].mihf_id, strlen(g_ue_ral_obj[mod_id].mihf_id)); - - - memcpy(&message.primitive.LinkDetectedInfo, link_detected_info_pP, sizeof(MIH_C_LINK_DET_INFO_T)); - - message_total_length = MIH_C_Link_Message_Encode_Link_Detected_indication(bb_p, &message); - - if (mRAL_send_to_mih(instanceP, bb_p->m_buffer,message_total_length)<0) { - LOG_E(RAL_UE, ": Send Link_Detected.indication\n"); - } else { - LOG_D(RAL_UE, ": Sent Link_Detected.indication\n"); - } - - free_BitBuffer(bb_p); -} -//----------------------------------------------------------------------------- -void mRAL_send_link_up_indication(ral_ue_instance_t instanceP, - MIH_C_TRANSACTION_ID_T *transaction_id_pP, - MIH_C_LINK_TUPLE_ID_T *link_identifier_pP, - MIH_C_LINK_ADDR_T *old_access_router_pP, - MIH_C_LINK_ADDR_T *new_access_router_pP, - MIH_C_IP_RENEWAL_FLAG_T *ip_renewal_flag_pP, - MIH_C_IP_MOB_MGMT_T *mobility_management_support_pP) -{ - //----------------------------------------------------------------------------- - MIH_C_Message_Link_Up_indication_t message; - Bit_Buffer_t *bb_p; - int message_total_length; - module_id_t mod_id = instanceP - NB_eNB_INST; - - bb_p = new_BitBuffer_0(); - BitBuffer_wrap(bb_p, g_msg_codec_send_buffer, (unsigned int)MSG_CODEC_SEND_BUFFER_SIZE); - - memset(&message, 0, sizeof (MIH_C_Message_Link_Up_indication_t)); - - message.header.version = (MIH_C_VERSION_T)MIH_C_PROTOCOL_VERSION; - message.header.service_identifier = (MIH_C_SID_T)2; - message.header.operation_code = (MIH_C_OPCODE_T)3; - message.header.action_identifier = (MIH_C_AID_T)2; - message.header.transaction_id = *transaction_id_pP; - - - MIH_C_MIHF_ID_set(&message.source, (u_int8_t*)g_ue_ral_obj[mod_id].link_id, strlen(g_ue_ral_obj[mod_id].link_id)); - - MIH_C_MIHF_ID_set(&message.destination, (u_int8_t*)g_ue_ral_obj[mod_id].mihf_id, strlen(g_ue_ral_obj[mod_id].mihf_id)); - - - memcpy(&message.primitive.LinkIdentifier, link_identifier_pP, sizeof(MIH_C_LINK_TUPLE_ID_T)); - - message.primitive.OldAccessRouter = old_access_router_pP; - message.primitive.NewAccessRouter = new_access_router_pP; - message.primitive.IPRenewalFlag = ip_renewal_flag_pP; - message.primitive.MobilityManagementSupport = mobility_management_support_pP; - - message_total_length = MIH_C_Link_Message_Encode_Link_Up_indication(bb_p, &message); - - if (mRAL_send_to_mih(instanceP, bb_p->m_buffer,message_total_length)<0) { - LOG_E(RAL_UE, ": Send Link_Up.indication\n"); - } else { - LOG_D(RAL_UE, ": Sent Link_Up.indication\n"); - } - - free_BitBuffer(bb_p); -} -//----------------------------------------------------------------------------- -void mRAL_send_link_parameters_report_indication(ral_ue_instance_t instanceP, - MIH_C_TRANSACTION_ID_T *transaction_id_pP, - MIH_C_LINK_TUPLE_ID_T *link_identifier_pP, - MIH_C_LINK_PARAM_RPT_LIST_T *link_parameters_report_list_pP) -{ - //----------------------------------------------------------------------------- - MIH_C_Message_Link_Parameters_Report_indication_t message; - Bit_Buffer_t *bb_p; - int message_total_length; - module_id_t mod_id = instanceP - NB_eNB_INST; - - bb_p = new_BitBuffer_0(); - BitBuffer_wrap(bb_p, g_msg_codec_send_buffer, (unsigned int)MSG_CODEC_SEND_BUFFER_SIZE); - - memset(&message, 0, sizeof (MIH_C_Message_Link_Parameters_Report_indication_t)); - - message.header.version = (MIH_C_VERSION_T)MIH_C_PROTOCOL_VERSION; - message.header.service_identifier = (MIH_C_SID_T)2; - message.header.operation_code = (MIH_C_OPCODE_T)3; - message.header.action_identifier = (MIH_C_AID_T)5; - message.header.transaction_id = *transaction_id_pP; - - - MIH_C_MIHF_ID_set(&message.source, (u_int8_t*)g_ue_ral_obj[mod_id].link_id, strlen(g_ue_ral_obj[mod_id].link_id)); - - MIH_C_MIHF_ID_set(&message.destination, (u_int8_t*)g_ue_ral_obj[mod_id].mihf_id, strlen(g_ue_ral_obj[mod_id].mihf_id)); - - - memcpy(&message.primitive.LinkIdentifier, link_identifier_pP, sizeof(MIH_C_LINK_TUPLE_ID_T)); - memcpy(&message.primitive.LinkParametersReportList_list, link_parameters_report_list_pP, sizeof(MIH_C_LINK_PARAM_RPT_LIST_T)); - - message_total_length = MIH_C_Link_Message_Encode_Link_Parameters_Report_indication(bb_p, &message); - - if (mRAL_send_to_mih(instanceP, bb_p->m_buffer,message_total_length)<0) { - LOG_E(RAL_UE, ": Send Link_Parameters_Report.indication\n"); - } else { - LOG_D(RAL_UE, ": Sent Link_Parameters_Report.indication\n"); - } - - free_BitBuffer(bb_p); -} - -//----------------------------------------------------------------------------- -void mRAL_send_link_going_down_indication(ral_ue_instance_t instanceP, - MIH_C_TRANSACTION_ID_T *transaction_id_pP, - MIH_C_LINK_TUPLE_ID_T *link_identifier_pP, - MIH_C_UNSIGNED_INT2_T *time_interval_pP, - MIH_C_LINK_GD_REASON_T *link_going_down_reason_pP) -{ - //----------------------------------------------------------------------------- - MIH_C_Message_Link_Going_Down_indication_t message; - Bit_Buffer_t *bb_p; - int message_total_length; - module_id_t mod_id = instanceP - NB_eNB_INST; - - bb_p = new_BitBuffer_0(); - BitBuffer_wrap(bb_p, g_msg_codec_send_buffer, (unsigned int)MSG_CODEC_SEND_BUFFER_SIZE); - - memset(&message, 0, sizeof (MIH_C_Message_Link_Going_Down_indication_t)); - - message.header.version = (MIH_C_VERSION_T)MIH_C_PROTOCOL_VERSION; - message.header.service_identifier = (MIH_C_SID_T)2; - message.header.operation_code = (MIH_C_OPCODE_T)3; - message.header.action_identifier = (MIH_C_AID_T)6; - message.header.transaction_id = *transaction_id_pP; - - - MIH_C_MIHF_ID_set(&message.source, (u_int8_t*)g_ue_ral_obj[mod_id].link_id, strlen(g_ue_ral_obj[mod_id].link_id)); - - MIH_C_MIHF_ID_set(&message.destination, (u_int8_t*)g_ue_ral_obj[mod_id].mihf_id, strlen(g_ue_ral_obj[mod_id].mihf_id)); - - - memcpy(&message.primitive.LinkIdentifier, link_identifier_pP, sizeof(MIH_C_LINK_TUPLE_ID_T)); - message.primitive.TimeInterval = *time_interval_pP; - memcpy(&message.primitive.LinkGoingDownReason, link_going_down_reason_pP, sizeof(MIH_C_LINK_GD_REASON_T)); - - - message_total_length = MIH_C_Link_Message_Encode_Link_Going_Down_indication(bb_p, &message); - - if (mRAL_send_to_mih(instanceP, bb_p->m_buffer,message_total_length)<0) { - LOG_E(RAL_UE, ": Send Link_Going_Down.indication\n"); - } else { - LOG_D(RAL_UE, ": Sent Link_Going_Down.indication\n"); - } - - free_BitBuffer(bb_p); -} - -//----------------------------------------------------------------------------- -void mRAL_send_link_down_indication(ral_ue_instance_t instanceP, - MIH_C_TRANSACTION_ID_T *transaction_id_pP, - MIH_C_LINK_TUPLE_ID_T *link_identifier_pP, - MIH_C_LINK_ADDR_T *old_access_router_pP, - MIH_C_LINK_DN_REASON_T *reason_code_pP) -{ - //----------------------------------------------------------------------------- - MIH_C_Message_Link_Down_indication_t message; - Bit_Buffer_t *bb_p; - int message_total_length; - module_id_t mod_id = instanceP - NB_eNB_INST; - - bb_p = new_BitBuffer_0(); - BitBuffer_wrap(bb_p, g_msg_codec_send_buffer, (unsigned int)MSG_CODEC_SEND_BUFFER_SIZE); - - memset(&message, 0, sizeof (MIH_C_Message_Link_Going_Down_indication_t)); - - message.header.version = (MIH_C_VERSION_T)MIH_C_PROTOCOL_VERSION; - message.header.service_identifier = (MIH_C_SID_T)2; - message.header.operation_code = (MIH_C_OPCODE_T)3; - message.header.action_identifier = (MIH_C_AID_T)3; - message.header.transaction_id = *transaction_id_pP; - - - MIH_C_MIHF_ID_set(&message.source, (u_int8_t*)g_ue_ral_obj[mod_id].link_id, strlen(g_ue_ral_obj[mod_id].link_id)); - - MIH_C_MIHF_ID_set(&message.destination, (u_int8_t*)g_ue_ral_obj[mod_id].mihf_id, strlen(g_ue_ral_obj[mod_id].mihf_id)); - - - memcpy(&message.primitive.LinkIdentifier, link_identifier_pP, sizeof(MIH_C_LINK_TUPLE_ID_T)); - message.primitive.OldAccessRouter = old_access_router_pP; - memcpy(&message.primitive.ReasonCode, reason_code_pP, sizeof(MIH_C_LINK_DN_REASON_T)); - - - message_total_length = MIH_C_Link_Message_Encode_Link_Down_indication(bb_p, &message); - - if (mRAL_send_to_mih(instanceP, bb_p->m_buffer,message_total_length)<0) { - LOG_E(RAL_UE, ": Send Link_Down.indication\n"); - } else { - LOG_D(RAL_UE, ": Sent Link_Down.indication\n"); - } - - free_BitBuffer(bb_p); -} - -//----------------------------------------------------------------------------- -void mRAL_send_link_action_confirm(ral_ue_instance_t instanceP, - MIH_C_TRANSACTION_ID_T *transaction_id_pP, - MIH_C_STATUS_T *status_pP, - MIH_C_LINK_SCAN_RSP_LIST_T *scan_response_set_pP, - MIH_C_LINK_AC_RESULT_T *link_action_result_pP) -{ - //----------------------------------------------------------------------------- - MIH_C_Message_Link_Action_confirm_t message; - Bit_Buffer_t *bb_p; - int message_total_length; - module_id_t mod_id = instanceP - NB_eNB_INST; - - - bb_p = new_BitBuffer_0(); - BitBuffer_wrap(bb_p, g_msg_codec_send_buffer, (unsigned int)MSG_CODEC_SEND_BUFFER_SIZE); - - memset(&message, 0, sizeof (MIH_C_Message_Link_Action_confirm_t)); - - message.header.version = (MIH_C_VERSION_T)MIH_C_PROTOCOL_VERSION; - message.header.service_identifier = (MIH_C_SID_T)3; - message.header.operation_code = (MIH_C_OPCODE_T)0; - message.header.action_identifier = (MIH_C_AID_T)3; - message.header.transaction_id = *transaction_id_pP; - - - MIH_C_MIHF_ID_set(&message.source, (u_int8_t*)g_ue_ral_obj[mod_id].link_id, strlen(g_ue_ral_obj[mod_id].link_id)); - - MIH_C_MIHF_ID_set(&message.destination, (u_int8_t*)g_ue_ral_obj[mod_id].mihf_id, strlen(g_ue_ral_obj[mod_id].mihf_id)); - - - message.primitive.Status = *status_pP; - message.primitive.ScanResponseSet_list = scan_response_set_pP; - message.primitive.LinkActionResult = link_action_result_pP; - - - message_total_length = MIH_C_Link_Message_Encode_Link_Action_confirm(bb_p, &message); - - if (mRAL_send_to_mih(instanceP, bb_p->m_buffer,message_total_length)<0) { - LOG_E(RAL_UE, ": Send Link_Action.confirm\n"); - } else { - LOG_D(RAL_UE, ": Sent Link_Action.confirm\n"); - } - - free_BitBuffer(bb_p); -} - -//----------------------------------------------------------------------------- -void mRAL_send_capability_discover_confirm(ral_ue_instance_t instanceP, - MIH_C_TRANSACTION_ID_T *transaction_id_pP, - MIH_C_STATUS_T *status_pP, - MIH_C_LINK_EVENT_LIST_T *supported_link_event_list_pP, - MIH_C_LINK_CMD_LIST_T *supported_link_command_list_pP) -{ - //----------------------------------------------------------------------------- - MIH_C_Message_Link_Capability_Discover_confirm_t message; - Bit_Buffer_t *bb_p; - int message_total_length; - module_id_t mod_id = instanceP - NB_eNB_INST; - - bb_p = new_BitBuffer_0(); - BitBuffer_wrap(bb_p, g_msg_codec_send_buffer, (unsigned int)MSG_CODEC_SEND_BUFFER_SIZE); - - memset(&message, 0, sizeof (MIH_C_Message_Link_Capability_Discover_confirm_t)); - - message.header.version = (MIH_C_VERSION_T)MIH_C_PROTOCOL_VERSION; - message.header.service_identifier = (MIH_C_SID_T)1; - message.header.operation_code = (MIH_C_OPCODE_T)0; - message.header.action_identifier = (MIH_C_AID_T)1; - message.header.transaction_id = *transaction_id_pP; - - - MIH_C_MIHF_ID_set(&message.source, (u_int8_t*)g_ue_ral_obj[mod_id].link_id, strlen(g_ue_ral_obj[mod_id].link_id)); - MIH_C_MIHF_ID_set(&message.destination, (u_int8_t*)g_ue_ral_obj[mod_id].mihf_id, strlen(g_ue_ral_obj[mod_id].mihf_id)); - - message.primitive.Status = *status_pP; - message.primitive.SupportedLinkEventList = supported_link_event_list_pP; - message.primitive.SupportedLinkCommandList = supported_link_command_list_pP; - - message_total_length = MIH_C_Link_Message_Encode_Capability_Discover_confirm(bb_p, &message); - - if (mRAL_send_to_mih(instanceP, bb_p->m_buffer,message_total_length)<0) { - LOG_E(RAL_UE, ": Send Link_Capability_Discover.confirm\n"); - } else { - LOG_D(RAL_UE, ": Sent Link_Capability_Discover.confirm\n"); - } - - free_BitBuffer(bb_p); -} - -//----------------------------------------------------------------------------- -void mRAL_send_event_subscribe_confirm(ral_ue_instance_t instanceP, - MIH_C_TRANSACTION_ID_T *transaction_id_pP, - MIH_C_STATUS_T *status_pP, - MIH_C_LINK_EVENT_LIST_T *response_link_event_list_pP) -{ - //----------------------------------------------------------------------------- - MIH_C_Message_Link_Event_Subscribe_confirm_t message; - Bit_Buffer_t *bb_p; - int message_total_length; - module_id_t mod_id = instanceP - NB_eNB_INST; - - bb_p = new_BitBuffer_0(); - BitBuffer_wrap(bb_p, g_msg_codec_send_buffer, (unsigned int)MSG_CODEC_SEND_BUFFER_SIZE); - - memset(&message, 0, sizeof (MIH_C_Message_Link_Event_Subscribe_confirm_t)); - - message.header.version = (MIH_C_VERSION_T)MIH_C_PROTOCOL_VERSION; - message.header.service_identifier = (MIH_C_SID_T)1; - message.header.operation_code = (MIH_C_OPCODE_T)0; - message.header.action_identifier = (MIH_C_AID_T)4; - message.header.transaction_id = *transaction_id_pP; - - - MIH_C_MIHF_ID_set(&message.source, (u_int8_t*)g_ue_ral_obj[mod_id].link_id, strlen(g_ue_ral_obj[mod_id].link_id)); - MIH_C_MIHF_ID_set(&message.destination, (u_int8_t*)g_ue_ral_obj[mod_id].mihf_id, strlen(g_ue_ral_obj[mod_id].mihf_id)); - - message.primitive.Status = *status_pP; - message.primitive.ResponseLinkEventList = response_link_event_list_pP; - - message_total_length = MIH_C_Link_Message_Encode_Event_Subscribe_confirm(bb_p, &message); - - if (mRAL_send_to_mih(instanceP, bb_p->m_buffer,message_total_length)<0) { - LOG_E(RAL_UE, ": Send Link_Event_Subscribe.confirm\n"); - } else { - LOG_D(RAL_UE, ": Sent Link_Event_Subscribe.confirm\n"); - } - - free_BitBuffer(bb_p); -} - -//----------------------------------------------------------------------------- -void mRAL_send_event_unsubscribe_confirm(ral_ue_instance_t instanceP, - MIH_C_TRANSACTION_ID_T *transaction_id_pP, - MIH_C_STATUS_T *status_pP, - MIH_C_LINK_EVENT_LIST_T *response_link_event_list_pP) -{ - //----------------------------------------------------------------------------- - MIH_C_Message_Link_Event_Unsubscribe_confirm_t message; - Bit_Buffer_t *bb_p; - int message_total_length; - module_id_t mod_id = instanceP - NB_eNB_INST; - - bb_p = new_BitBuffer_0(); - BitBuffer_wrap(bb_p, g_msg_codec_send_buffer, (unsigned int)MSG_CODEC_SEND_BUFFER_SIZE); - - memset(&message, 0, sizeof (MIH_C_Message_Link_Event_Unsubscribe_confirm_t)); - - message.header.version = (MIH_C_VERSION_T)MIH_C_PROTOCOL_VERSION; - message.header.service_identifier = (MIH_C_SID_T)1; - message.header.operation_code = (MIH_C_OPCODE_T)0; - message.header.action_identifier = (MIH_C_AID_T)5; - message.header.transaction_id = *transaction_id_pP; - - - MIH_C_MIHF_ID_set(&message.source, (u_int8_t*)g_ue_ral_obj[mod_id].link_id, strlen(g_ue_ral_obj[mod_id].link_id)); - MIH_C_MIHF_ID_set(&message.destination, (u_int8_t*)g_ue_ral_obj[mod_id].mihf_id, strlen(g_ue_ral_obj[mod_id].mihf_id)); - - message.primitive.Status = *status_pP; - message.primitive.ResponseLinkEventList = response_link_event_list_pP; - - message_total_length = MIH_C_Link_Message_Encode_Event_Unsubscribe_confirm(bb_p, &message); - - if (mRAL_send_to_mih(instanceP, bb_p->m_buffer,message_total_length)<0) { - LOG_E(RAL_UE, ": Send Link_Event_Unsubscribe.confirm\n"); - } else { - LOG_D(RAL_UE, ": Sent Link_Event_Unsubscribe.confirm\n"); - } - - free_BitBuffer(bb_p); -} - -//----------------------------------------------------------------------------- -void mRAL_send_configure_thresholds_confirm(ral_ue_instance_t instanceP, - MIH_C_TRANSACTION_ID_T *transaction_id_pP, - MIH_C_STATUS_T *status_pP, - MIH_C_LINK_CFG_STATUS_LIST_T *link_configure_status_list_pP) -{ - //----------------------------------------------------------------------------- - MIH_C_Message_Link_Configure_Thresholds_confirm_t message; - Bit_Buffer_t *bb_p; - int message_total_length; - module_id_t mod_id = instanceP - NB_eNB_INST; - - bb_p = new_BitBuffer_0(); - BitBuffer_wrap(bb_p, g_msg_codec_send_buffer, (unsigned int)MSG_CODEC_SEND_BUFFER_SIZE); - - memset(&message, 0, sizeof (MIH_C_Message_Link_Configure_Thresholds_confirm_t)); - - message.header.version = (MIH_C_VERSION_T)MIH_C_PROTOCOL_VERSION; - message.header.service_identifier = (MIH_C_SID_T)3; - message.header.operation_code = (MIH_C_OPCODE_T)0; - message.header.action_identifier = (MIH_C_AID_T)2; - message.header.transaction_id = *transaction_id_pP; - - - MIH_C_MIHF_ID_set(&message.source, (u_int8_t*)g_ue_ral_obj[mod_id].link_id, strlen(g_ue_ral_obj[mod_id].link_id)); - MIH_C_MIHF_ID_set(&message.destination, (u_int8_t*)g_ue_ral_obj[mod_id].mihf_id, strlen(g_ue_ral_obj[mod_id].mihf_id)); - - message.primitive.Status = *status_pP; - message.primitive.LinkConfigureStatusList_list = link_configure_status_list_pP; - - message_total_length = MIH_C_Link_Message_Encode_Configure_Thresholds_confirm(bb_p, &message); - - if (mRAL_send_to_mih(instanceP, bb_p->m_buffer,message_total_length)<0) { - LOG_E(RAL_UE, ": Send Link_Configure_Threshold.confirm\n"); - } else { - LOG_D(RAL_UE, ": Sent Link_Configure_Threshold.confirm\n"); - } - - free_BitBuffer(bb_p); -} - -//----------------------------------------------------------------------------- -void mRAL_send_get_parameters_confirm (ral_ue_instance_t instanceP, - MIH_C_TRANSACTION_ID_T *transaction_id_pP, - MIH_C_STATUS_T *status_pP, - MIH_C_LINK_PARAM_LIST_T *link_parameters_status_list_pP, - MIH_C_LINK_STATES_RSP_LIST_T *link_states_response_list_pP, - MIH_C_LINK_DESC_RSP_LIST_T *link_descriptors_response_list_pP) -{ - //----------------------------------------------------------------------------- - MIH_C_Message_Link_Get_Parameters_confirm_t message; - Bit_Buffer_t *bb_p; - int message_total_length; - module_id_t mod_id = instanceP - NB_eNB_INST; - - - bb_p = new_BitBuffer_0(); - BitBuffer_wrap(bb_p, g_msg_codec_send_buffer, (unsigned int)MSG_CODEC_SEND_BUFFER_SIZE); - - memset(&message, 0, sizeof (MIH_C_Message_Link_Get_Parameters_confirm_t)); - - message.header.version = (MIH_C_VERSION_T)MIH_C_PROTOCOL_VERSION; - message.header.service_identifier = (MIH_C_SID_T)3; - message.header.operation_code = (MIH_C_OPCODE_T)0; - message.header.action_identifier = (MIH_C_AID_T)1; - message.header.transaction_id = *transaction_id_pP; - - - MIH_C_MIHF_ID_set(&message.source, (u_int8_t*)g_ue_ral_obj[mod_id].link_id, strlen(g_ue_ral_obj[mod_id].link_id)); - MIH_C_MIHF_ID_set(&message.destination, (u_int8_t*)g_ue_ral_obj[mod_id].mihf_id, strlen(g_ue_ral_obj[mod_id].mihf_id)); - - message.primitive.Status = *status_pP; - message.primitive.LinkParametersStatusList_list = link_parameters_status_list_pP; - message.primitive.LinkStatesResponse_list = link_states_response_list_pP; - message.primitive.LinkDescriptorsResponse_list = link_descriptors_response_list_pP; - - message_total_length = MIH_C_Link_Message_Encode_Get_Parameters_confirm(bb_p, &message); - - if (mRAL_send_to_mih(instanceP, bb_p->m_buffer,message_total_length)<0) { - LOG_E(RAL_UE, ": Send Link_Get_Parameters.confirm\n"); - } else { - LOG_D(RAL_UE, ": Sent Link_Get_Parameters.confirm\n"); - } - - free_BitBuffer(bb_p); -} - -/*************************************************************************** - Reception side - ***************************************************************************/ - -//----------------------------------------------------------------------------- -int mRAL_mih_link_msg_decode(ral_ue_instance_t instanceP, - Bit_Buffer_t *bbP, - MIH_C_Message_Wrapper_t *message_wrapperP) -{ - //----------------------------------------------------------------------------- - int status = MIH_MESSAGE_DECODE_FAILURE; - MIH_C_HEADER_T header; - MIH_C_STATUS_T mih_status; - module_id_t mod_id = instanceP - NB_eNB_INST; - - - if ((bbP != NULL) && (message_wrapperP != NULL)) { - status = MIH_C_Link_Header_Decode(bbP, &header); - - if (status == MIH_HEADER_DECODE_TOO_SHORT) { - return MIH_MESSAGE_DECODE_TOO_SHORT; - } else if (status == MIH_HEADER_DECODE_FAILURE) { - return MIH_MESSAGE_DECODE_FAILURE; - } else if (status == MIH_HEADER_DECODE_BAD_PARAMETER) { - return MIH_MESSAGE_DECODE_BAD_PARAMETER; - } - - message_wrapperP->message_id = MIH_C_MESSAGE_ID(header.service_identifier, header.operation_code, header.action_identifier); - - switch (message_wrapperP->message_id) { - case MIH_C_MESSAGE_LINK_CAPABILITY_DISCOVER_REQUEST_ID: - LOG_D(RAL_UE, " %s Received MIH_C_MESSAGE_LINK_CAPABILITY_DISCOVER_REQUEST TID %u\n", __FUNCTION__, header.transaction_id); - memcpy(&message_wrapperP->_union_message.link_capability_discover_request.header, (const void *)&header, sizeof(MIH_C_HEADER_T)); - status = MIH_C_Link_Message_Decode_Link_Capability_Discover_request(bbP, &message_wrapperP->_union_message.link_capability_discover_request); - - if (status == MIH_MESSAGE_DECODE_OK) { - MIH_C_Link_Message_Link_Capability_Discover_request2String(&message_wrapperP->_union_message.link_capability_discover_request, g_msg_print_buffer); - LOG_D(RAL_UE, "%s", g_msg_print_buffer); - - mih_status = MIH_C_STATUS_SUCCESS; - LOG_D(RAL_UE, "**\n"); - LOG_D(RAL_UE, " %s Sending MIH_C_MESSAGE_LINK_CAPABILITY_DISCOVER_CONFIRM\n\n", __FUNCTION__); - - mRAL_send_capability_discover_confirm(instanceP, - &message_wrapperP->_union_message.link_capability_discover_request.header.transaction_id, - &mih_status, - &g_ue_ral_obj[mod_id].mih_supported_link_event_list, - &g_ue_ral_obj[mod_id].mih_supported_link_command_list); - } else { - } - - break; - - case MIH_C_MESSAGE_LINK_EVENT_SUBSCRIBE_REQUEST_ID: - LOG_D(RAL_UE, " %s Received MIH_C_MESSAGE_LINK_EVENT_SUBSCRIBE_REQUEST TID %u\n", __FUNCTION__, header.transaction_id); - memcpy(&message_wrapperP->_union_message.link_event_subscribe_request.header, (const void *)&header, sizeof(MIH_C_HEADER_T)); - status = MIH_C_Link_Message_Decode_Link_Event_Subscribe_request(bbP, &message_wrapperP->_union_message.link_event_subscribe_request); - - if (status == MIH_MESSAGE_DECODE_OK) { - LOG_D(RAL_UE, "**\n"); - - mRAL_subscribe_request(instanceP, &message_wrapperP->_union_message.link_event_subscribe_request); - } else { - } - - break; - - case MIH_C_MESSAGE_LINK_EVENT_UNSUBSCRIBE_REQUEST_ID: - LOG_D(RAL_UE, " %s Received MIH_C_MESSAGE_LINK_EVENT_UNSUBSCRIBE_REQUEST TID %u\n", __FUNCTION__, header.transaction_id); - memcpy(&message_wrapperP->_union_message.link_event_unsubscribe_request.header, (const void *)&header, sizeof(MIH_C_HEADER_T)); - status = MIH_C_Link_Message_Decode_Link_Event_Unsubscribe_request(bbP, &message_wrapperP->_union_message.link_event_unsubscribe_request); - - if (status == MIH_MESSAGE_DECODE_OK) { - LOG_D(RAL_UE, "**\n"); - mRAL_unsubscribe_request(instanceP, &message_wrapperP->_union_message.link_event_unsubscribe_request); - } else { - } - - break; - - case MIH_C_MESSAGE_LINK_GET_PARAMETERS_REQUEST_ID: - LOG_D(RAL_UE, " %s Received MIH_C_MESSAGE_LINK_GET_PARAMETERS_REQUEST TID %u\n", __FUNCTION__, header.transaction_id); - memcpy(&message_wrapperP->_union_message.link_get_parameters_request.header, (const void *)&header, sizeof(MIH_C_HEADER_T)); - status = MIH_C_Link_Message_Decode_Link_Get_Parameters_request(bbP, &message_wrapperP->_union_message.link_get_parameters_request); - - if (status == MIH_MESSAGE_DECODE_OK) { - LOG_D(RAL_UE, "**\n"); - mRAL_get_parameters_request(instanceP, &message_wrapperP->_union_message.link_get_parameters_request); - } else { - } - - break; - - case MIH_C_MESSAGE_LINK_CONFIGURE_THRESHOLDS_REQUEST_ID: - LOG_D(RAL_UE, " %s Received MIH_C_MESSAGE_LINK_CONFIGURE_THRESHOLDS_REQUEST TID %u\n", __FUNCTION__, header.transaction_id); - memcpy(&message_wrapperP->_union_message.link_configure_thresholds_request.header, (const void *)&header, sizeof(MIH_C_HEADER_T)); - status = MIH_C_Link_Message_Decode_Link_Configure_Thresholds_request(bbP, &message_wrapperP->_union_message.link_configure_thresholds_request); - - if (status == MIH_MESSAGE_DECODE_OK) { - LOG_D(RAL_UE, "**\n"); - mRAL_configure_thresholds_request(instanceP, &message_wrapperP->_union_message.link_configure_thresholds_request); - } else { - } - - break; - - case MIH_C_MESSAGE_LINK_ACTION_REQUEST_ID: - LOG_D(RAL_UE, " %s Received MIH_C_MESSAGE_LINK_ACTION_REQUEST TID %u\n", __FUNCTION__, header.transaction_id); - memcpy(&message_wrapperP->_union_message.link_action_request.header, (const void *)&header, sizeof(MIH_C_HEADER_T)); - status = MIH_C_Link_Message_Decode_Link_Action_request(bbP, &message_wrapperP->_union_message.link_action_request); - - if (status == MIH_MESSAGE_DECODE_OK) { - LOG_D(RAL_UE, "**\n"); - mRAL_action_request(instanceP, &message_wrapperP->_union_message.link_action_request); - } else { - } - - break; - - default: - LOG_W(RAL_UE, "UNKNOWN MESSAGE ID SID %d, OP_CODE %d, AID %d\n", header.service_identifier, header.operation_code, header.action_identifier); - status = MIH_MESSAGE_DECODE_FAILURE; - - return status; - } - } else { - return MIH_MESSAGE_DECODE_BAD_PARAMETER; - } - - return status; -} - -//----------------------------------------------------------------------------- -int mRAL_mih_link_process_message(ral_ue_instance_t instanceP) -{ - //----------------------------------------------------------------------------- - MIH_C_Message_Wrapper_t message_wrapper; - int nb_bytes_received ; - int nb_bytes_decoded ; - int total_bytes_to_decode ; - int status ; - Bit_Buffer_t *bb_p; - struct sockaddr_in udp_socket; - socklen_t sockaddr_len; - module_id_t mod_id = instanceP - NB_eNB_INST; - - total_bytes_to_decode = 0; - nb_bytes_received = 0; - - bb_p = new_BitBuffer_0(); - - nb_bytes_received = recvfrom(g_ue_ral_obj[mod_id].mih_sock_desc, - (void *)g_msg_codec_recv_buffer, - MSG_CODEC_RECV_BUFFER_SIZE, - 0, - (struct sockaddr *) &udp_socket, - &sockaddr_len); - - if (nb_bytes_received > 0) { - LOG_D(RAL_UE, " \n"); - LOG_D(RAL_UE, " %s: Received %d bytes from MIHF\n", __FUNCTION__, nb_bytes_received); - total_bytes_to_decode += nb_bytes_received; - BitBuffer_wrap(bb_p, g_msg_codec_recv_buffer, total_bytes_to_decode); - status = mRAL_mih_link_msg_decode(instanceP, bb_p, &message_wrapper); - nb_bytes_decoded = BitBuffer_getPosition(bb_p); - - if (status == MIH_MESSAGE_DECODE_OK) { - if (nb_bytes_decoded > 0) { - total_bytes_to_decode = total_bytes_to_decode - nb_bytes_decoded; - - // if remaining bytes to decode - if (total_bytes_to_decode > 0) { - //shift left bytes in buffer - memcpy(g_msg_codec_recv_buffer, &g_msg_codec_recv_buffer[nb_bytes_decoded], nb_bytes_decoded); - - //shift left again bytes in buffer - if (total_bytes_to_decode > nb_bytes_decoded) { - memcpy(&g_msg_codec_recv_buffer[nb_bytes_decoded], &g_msg_codec_recv_buffer[nb_bytes_decoded], total_bytes_to_decode - nb_bytes_decoded); - } - - // not necessary - memset(&g_msg_codec_recv_buffer[total_bytes_to_decode], 0 , MSG_CODEC_RECV_BUFFER_SIZE - total_bytes_to_decode); - - } - } - - // data could not be decoded - } else if (status == MIH_MESSAGE_DECODE_FAILURE) { - memset(g_msg_codec_recv_buffer, 0, MSG_CODEC_RECV_BUFFER_SIZE); - total_bytes_to_decode = 0; - } else if (status == MIH_MESSAGE_DECODE_TOO_SHORT) { - } - - LOG_D(RAL_UE, " \n"); - } - - free_BitBuffer(bb_p); - return 0; -} diff --git a/openair3/RAL-LTE/LTE_RAL_UE/SRC/lteRALue_parameters.c b/openair3/RAL-LTE/LTE_RAL_UE/SRC/lteRALue_parameters.c deleted file mode 100755 index fd6e9a7f59..0000000000 --- a/openair3/RAL-LTE/LTE_RAL_UE/SRC/lteRALue_parameters.c +++ /dev/null @@ -1,145 +0,0 @@ -/*************************************************************************** - lteRALue_parameters.c - description - *************************************************************************** - Eurecom OpenAirInterface 3 - Copyright(c) 1999 - 2013 Eurecom - - This program is free software; you can redistribute it and/or modify it - under the terms and conditions of the GNU General Public License, - version 2, as published by the Free Software Foundation. - - This program is distributed in the hope it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - more details. - - You should have received a copy of the GNU General Public License along with - this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - - The full GNU General Public License is included in this distribution in - the file called "COPYING". - - Contact Information - Openair Admin: openair_admin@eurecom.fr - Openair Tech : openair_tech@eurecom.fr - Forums : http://forums.eurecom.fsr/openairinterface - Address : Eurecom, 450 route des Chappes, 06410 Biot Sophia Antipolis, France -*******************************************************************************/ -/*! \file lteRALue_mih_execute.c - * \brief Execution of MIH primitives in LTE-RAL-UE - * \author WETTERWALD Michelle, GAUTHIER Lionel, MAUREL Frederic - * \date 2013 - * \company EURECOM - * \email: michelle.wetterwald@eurecom.fr, lionel.gauthier@eurecom.fr, frederic.maurel@eurecom.fr - */ -/*******************************************************************************/ -#define LTE_RAL_UE -#define LTERALUE_PARAMETERS_C -//----------------------------------------------------------------------------- -#include "lteRALue.h" - -//----------------------------------------------------------------------------- -void mRAL_get_parameters_request(ral_ue_instance_t instanceP, - MIH_C_Message_Link_Get_Parameters_request_t *messageP) -{ - //----------------------------------------------------------------------------- - MIH_C_STATUS_T status; - MIH_C_LINK_PARAM_LIST_T link_parameters_status_list; - MIH_C_LINK_STATES_RSP_LIST_T link_states_response_list; - MIH_C_LINK_DESC_RSP_LIST_T link_descriptors_response_list; - unsigned int link_index; - - // SAVE REQUEST - // MAY BE MERGE REQUESTS ? - //memcpy(&g_link_cfg_param_thresholds_list, &messageP->primitive.LinkConfigureParameterList_list, sizeof(MIH_C_LINK_CFG_PARAM_LIST_T)); - - status = MIH_C_STATUS_SUCCESS; - - for (link_index = 0; - link_index < messageP->primitive.LinkParametersRequest_list.length; - link_index++) { - - //------------------------------------------------ - // MIH_C_LINK_PARAM_LIST_T - //------------------------------------------------ - memcpy(&link_parameters_status_list.val[link_index].link_param_type, - &messageP->primitive.LinkParametersRequest_list.val[link_index], - sizeof(MIH_C_LINK_PARAM_TYPE_T)); - - switch (messageP->primitive.LinkParametersRequest_list.val[link_index].choice) { - case MIH_C_LINK_PARAM_TYPE_CHOICE_GEN: - link_parameters_status_list.val[link_index].choice = MIH_C_LINK_PARAM_CHOICE_LINK_PARAM_VAL; - link_parameters_status_list.val[link_index]._union.link_param_val = MIH_C_LINK_PARAM_GEN_SIGNAL_STRENGTH; - break; - - case MIH_C_LINK_PARAM_TYPE_CHOICE_QOS: - link_parameters_status_list.val[link_index].choice = MIH_C_LINK_PARAM_CHOICE_QOS_PARAM_VAL; - link_parameters_status_list.val[link_index]._union.qos_param_val.choice = MIH_C_QOS_PARAM_VAL_CHOICE_AVG_PK_TX_DELAY; - link_parameters_status_list.val[link_index]._union.qos_param_val._union.avg_pk_tx_delay_list.length = 2; //?? - link_parameters_status_list.val[link_index]._union.qos_param_val._union.avg_pk_tx_delay_list.val[0].cos_id = 2; //?? - link_parameters_status_list.val[link_index]._union.qos_param_val._union.avg_pk_tx_delay_list.val[0].value = 20; //?? - link_parameters_status_list.val[link_index]._union.qos_param_val._union.avg_pk_tx_delay_list.val[1].cos_id = 3; //?? - link_parameters_status_list.val[link_index]._union.qos_param_val._union.avg_pk_tx_delay_list.val[2].value = 50; //?? - break; - - case MIH_C_LINK_PARAM_TYPE_CHOICE_LTE: - case MIH_C_LINK_PARAM_TYPE_CHOICE_GG: - case MIH_C_LINK_PARAM_TYPE_CHOICE_EDGE: - case MIH_C_LINK_PARAM_TYPE_CHOICE_ETH: - case MIH_C_LINK_PARAM_TYPE_CHOICE_802_11: - case MIH_C_LINK_PARAM_TYPE_CHOICE_C2K: - case MIH_C_LINK_PARAM_TYPE_CHOICE_FDD: - case MIH_C_LINK_PARAM_TYPE_CHOICE_HRPD: - case MIH_C_LINK_PARAM_TYPE_CHOICE_802_16: - case MIH_C_LINK_PARAM_TYPE_CHOICE_802_20: - case MIH_C_LINK_PARAM_TYPE_CHOICE_802_22: - default: - LOG_E(RAL_UE, "%s TO DO CONTINUE PROCESSING LinkParametersRequest_list of \n", __FUNCTION__); - } - - //------------------------------------------------ - // MIH_C_LINK_STATES_RSP_LIST_T - //------------------------------------------------ - if (messageP->primitive.LinkStatesRequest & MIH_C_BIT_LINK_STATES_REQ_OP_MODE) { - link_states_response_list.val[link_index].choice = 0; - link_states_response_list.val[link_index]._union.op_mode = MIH_C_OPMODE_NORMAL_MODE; - } else if (messageP->primitive.LinkStatesRequest & MIH_C_BIT_LINK_STATES_REQ_CHANNEL_ID) { - link_states_response_list.val[link_index].choice = 1; - link_states_response_list.val[link_index]._union.channel_id = PREDEFINED_CHANNEL_ID; - } else { - LOG_E(RAL_UE, "%s Invalid LinkStatesRequest in MIH_C_Link_Get_Parameters_request\n", __FUNCTION__); - // DEFAULT VALUES - link_states_response_list.val[link_index].choice = 0; - link_states_response_list.val[link_index]._union.op_mode = MIH_C_OPMODE_NORMAL_MODE; - } - - //------------------------------------------------ - // MIH_C_LINK_DESC_RSP_LIST_T - //------------------------------------------------ - if (messageP->primitive.LinkDescriptorsRequest & MIH_C_BIT_NUMBER_OF_CLASSES_OF_SERVICE_SUPPORTED) { - link_descriptors_response_list.val[link_index].choice = 0; - link_descriptors_response_list.val[link_index]._union.num_cos = PREDEFINED_CLASSES_SERVICE_SUPPORTED; - } else if (messageP->primitive.LinkDescriptorsRequest & MIH_C_BIT_NUMBER_OF_QUEUES_SUPPORTED) { - link_descriptors_response_list.val[link_index].choice = 1; - link_descriptors_response_list.val[link_index]._union.num_queue = PREDEFINED_QUEUES_SUPPORTED; - } else { - LOG_E(RAL_UE, "%s Invalid LinkDescriptorsRequest in MIH_C_Link_Get_Parameters_request\n", __FUNCTION__); - // DEFAULT VALUES - link_descriptors_response_list.val[link_index].choice = 0; - link_descriptors_response_list.val[link_index]._union.num_cos = PREDEFINED_CLASSES_SERVICE_SUPPORTED; - } - } - - link_parameters_status_list.length = messageP->primitive.LinkParametersRequest_list.length; - link_states_response_list.length = messageP->primitive.LinkParametersRequest_list.length; - link_descriptors_response_list.length = messageP->primitive.LinkParametersRequest_list.length; - - - mRAL_send_get_parameters_confirm(instanceP, - &messageP->header.transaction_id, - &status, - &link_parameters_status_list, - &link_states_response_list, - &link_descriptors_response_list); -} diff --git a/openair3/RAL-LTE/LTE_RAL_UE/SRC/lteRALue_process.c b/openair3/RAL-LTE/LTE_RAL_UE/SRC/lteRALue_process.c deleted file mode 100755 index 1de7ba39f9..0000000000 --- a/openair3/RAL-LTE/LTE_RAL_UE/SRC/lteRALue_process.c +++ /dev/null @@ -1,301 +0,0 @@ -/*************************************************************************** - lteRALue_process.c - description - *************************************************************************** - Eurecom OpenAirInterface 3 - Copyright(c) 1999 - 2013 Eurecom - - This program is free software; you can redistribute it and/or modify it - under the terms and conditions of the GNU General Public License, - version 2, as published by the Free Software Foundation. - - This program is distributed in the hope it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - more details. - - You should have received a copy of the GNU General Public License along with - this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - - The full GNU General Public License is included in this distribution in - the file called "COPYING". - - Contact Information - Openair Admin: openair_admin@eurecom.fr - Openair Tech : openair_tech@eurecom.fr - Forums : http://forums.eurecom.fsr/openairinterface - Address : Eurecom, 450 route des Chappes, 06410 Biot Sophia Antipolis, France -*******************************************************************************/ -/*! \file lteRALue_process.c - * \brief Handling of measurements and connection in LTE-RAL-UE - * \author WETTERWALD Michelle, GAUTHIER Lionel, MAUREL Frederic - * \date 2013 - * \company EURECOM - * \email: michelle.wetterwald@eurecom.fr, lionel.gauthier@eurecom.fr, frederic.maurel@eurecom.fr - */ -/*******************************************************************************/ -#define LTE_RAL_UE -#define LTERALUE_PROCESS_C -#include -#include -#include -#include - -//----------------------------------------------------------------------------- -#include "lteRALue.h" -#include "PHY/extern.h" -/* -//--------------------------------------------------------------------------- -// Temp - Enter hard-coded measures in IAL -void IAL_NAS_measures_init(void){ -//--------------------------------------------------------------------------- -#ifdef DEBUG_MRALU_MEASURES - DEBUG("Entering IAL_NAS_measures_init \n\n"); -#endif -#ifdef RAL_DUMMY - ralpriv->num_measures = 3; -#endif -#ifdef RAL_REALTIME - ralpriv->num_measures = 1; -#endif - ralpriv->meas_cell_id[0] = 0; -#ifdef MIH_USER_CONTROL - ralpriv->last_meas_level[0] = 0; -#else - ralpriv->last_meas_level[0] = 30; -#endif - ralpriv->integrated_meas_level[0] = ralpriv->last_meas_level[0]; - ralpriv->provider_id[0] = 25; - ralpriv->meas_cell_id[1] = 1; - ralpriv->last_meas_level[1] = 50; - ralpriv->integrated_meas_level[1] = ralpriv->last_meas_level[1]; - ralpriv->provider_id[1] = 1; - ralpriv->meas_cell_id[2] = 20; - ralpriv->last_meas_level[2] = 20; - ralpriv->integrated_meas_level[2] = ralpriv->last_meas_level[2]; - ralpriv->provider_id[2] = 25; -} - -//--------------------------------------------------------------------------- -// Temp - Enter hard-coded measures in IAL -void IAL_NAS_measures_update(int i){ -//--------------------------------------------------------------------------- - DEBUG("\n"); -#ifdef DEBUG_MRALU_MEASURES - DEBUG("Entering IAL_NAS_measures_update\n"); -#endif - int j; - - //ralpriv->meas_cell_id[0] = ralpriv->cell_id; - j = i%2; - if (j==0){ - ralpriv->integrated_meas_level[2] = (ralpriv->integrated_meas_level[2] + (ralpriv->last_meas_level[2]/5)); - }else{ - ralpriv->integrated_meas_level[2] = (ralpriv->integrated_meas_level[2] - (ralpriv->last_meas_level[2]/5)); - } - ralpriv->curr_signal_level = ralpriv->integrated_meas_level[0]; - -// DEBUG ("Measure update - cell 1 %d, %d \n", ralpriv->last_meas_level[1], ralpriv->integrated_meas_level[1]); -} - -//--------------------------------------------------------------------------- -void IAL_integrate_measure(int measure, int i){ -//--------------------------------------------------------------------------- -#ifdef DEBUG_MRALU_MEASURES - DEBUG("Entering IAL_integrate_measure #%d\n", i); -#endif - int new_integrated = 0; - - new_integrated = (((10-LAMBDA)*ralpriv->last_meas_level[i])+(LAMBDA*measure))/10; - //apply correction to get a value between 0-100 - now is linear - new_integrated = (new_integrated*100)/MEAS_MAX_RSSI; - // print result - #ifdef DEBUG_MRALU_MEASURES - DEBUG (" Integrate measure: old %d, new %d, integrated %d\n", ralpriv->last_meas_level[i], measure,new_integrated ); - #endif - // store the result - ralpriv->last_meas_level[i] = measure; - ralpriv->prev_integrated_meas_level[i] = ralpriv->integrated_meas_level[i]; - ralpriv->integrated_meas_level[i] = new_integrated; - // if cell_id = 0, it means that there is no base station. Level should be 0 - // apply correction - if (!ralpriv->meas_cell_id[i]) - ralpriv->integrated_meas_level[i]=0; - -} - - -//--------------------------------------------------------------------------- -// poll for measures in NAS -void rallte_NAS_measures_polling(void){ -//--------------------------------------------------------------------------- - MIH_C_LINK_GD_REASON_T going_down_reason_code; - MIH_C_LINK_DN_REASON_T down_reason_code; - MIH_C_TRANSACTION_ID_T transaction_id; - MIH_C_LINK_TUPLE_ID_T link_identifier; - MIH_C_LINK_DET_INFO_T link_detected_info; - MIH_C_UNSIGNED_INT2_T time_interval; - //MIH_C_LINK_PARAM_RPT_LIST_T link_parameters_report_list; - - RAL_process_NAS_message(IO_OBJ_MEAS, IO_CMD_LIST, 0); - -// hard-coded trigger for test -#ifdef MRALU_SIMU_LINKDOWN - meas_counter ++; - if (meas_counter == 4){ - ralpriv->curr_signal_level = ralpriv->curr_signal_level/10; - IAL_integrate_measure(ralpriv->curr_signal_level, 0); - DEBUG ("\n signal level %d , integrated new value : %d\n",ralpriv->curr_signal_level, ralpriv->integrated_meas_level[0]); - } - - if (meas_counter == 5){ - ralpriv->curr_signal_level = 40; - IAL_integrate_measure(ralpriv->curr_signal_level, 0); - DEBUG ("\n signal level %d , integrated new value : %d\n",ralpriv->curr_signal_level, ralpriv->integrated_meas_level[0]); - } - if (meas_counter == 6){ - ralpriv->curr_signal_level = 0; - IAL_integrate_measure(ralpriv->curr_signal_level, 0); - DEBUG ("\n signal level %d , integrated new value : %d\n",ralpriv->curr_signal_level, ralpriv->integrated_meas_level[0]); - } -#endif - DEBUG ("signal level %d , integrated new value : %d , integrated old value : (%d)\n", - ralpriv->curr_signal_level, - ralpriv->integrated_meas_level[0], - ralpriv->prev_integrated_meas_level[0]); -// condition still TBD - message dropped or level = 0 - if ((!ralpriv->curr_signal_level) && - (ralpriv->link_to_be_detected == MIH_C_BOOLEAN_FALSE) && - (ralpriv->state != DISCONNECTED)) { - transaction_id = MIH_C_get_new_transaction_id(); - down_reason_code = MIH_C_LINK_DOWN_REASON_NO_RESOURCE; - link_identifier.link_id.link_type = MIH_C_WIRELESS_UMTS; - link_identifier.link_id.link_addr.choice = (MIH_C_CHOICE_T)MIH_C_CHOICE_3GPP_ADDR; - //MIH_C_3GPP_ADDR_load_3gpp_str_address(&link_identifier.link_id.link_addr._union._3gpp_addr, (u_int8_t*)DEFAULT_ADDRESS_3GPP); - //MIH_C_3GPP_ADDR_set(&link_identifier.link_id.link_addr._union._3gpp_addr, (u_int8_t*)DEFAULT_ADDRESS_3GPP, strlen(DEFAULT_ADDRESS_3GPP)); - MIH_C_3GPP_ADDR_set(&link_identifier.link_id.link_addr._union._3gpp_addr, (u_int8_t*)&(ralpriv->ipv6_l2id[0]), strlen(DEFAULT_ADDRESS_3GPP)); - link_identifier.choice = MIH_C_LINK_TUPLE_ID_CHOICE_NULL; - - mRAL_send_link_down_indication(&transaction_id, &link_identifier, NULL, &down_reason_code); - - ralpriv->link_to_be_detected = MIH_C_BOOLEAN_TRUE; - // warning may be repeated several times - } else - if ((ralpriv->link_to_be_detected == MIH_C_BOOLEAN_FALSE) && - (ralpriv->curr_signal_level <= ralpriv->integrated_meas_level[0]) && - (ralpriv->integrated_meas_level[0] < ralpriv->prev_integrated_meas_level[0]) && - (ralpriv->integrated_meas_level[0] < PREDEFINED_LINK_GOING_DOWN_INDICATION_SIG_STRENGTH) && - (ralpriv->state != DISCONNECTED)) { - - transaction_id = MIH_C_get_new_transaction_id(); - link_identifier.link_id.link_type = MIH_C_WIRELESS_UMTS; - link_identifier.link_id.link_addr.choice = (MIH_C_CHOICE_T)MIH_C_CHOICE_3GPP_ADDR; - //MIH_C_3GPP_ADDR_load_3gpp_str_address(&link_identifier.link_id.link_addr._union._3gpp_addr, (u_int8_t*)DEFAULT_ADDRESS_3GPP); - //MIH_C_3GPP_ADDR_set(&link_identifier.link_id.link_addr._union._3gpp_addr, (u_int8_t*)DEFAULT_ADDRESS_3GPP, strlen(DEFAULT_ADDRESS_3GPP)); - MIH_C_3GPP_ADDR_set(&link_identifier.link_id.link_addr._union._3gpp_addr, (u_int8_t*)&(ralpriv->ipv6_l2id[0]), strlen(DEFAULT_ADDRESS_3GPP)); - link_identifier.choice = MIH_C_LINK_TUPLE_ID_CHOICE_NULL; - time_interval = (MIH_C_UNSIGNED_INT2_T)0; // unknown - going_down_reason_code = MIH_C_LINK_GOING_DOWN_REASON_LINK_PARAMETER_DEGRADING; - // - mRAL_send_link_going_down_indication(&transaction_id, &link_identifier, &time_interval, &going_down_reason_code); - - } else - if ((ralpriv->link_to_be_detected == MIH_C_BOOLEAN_TRUE) && - ((ralpriv->mih_subscribe_req_event_list && (MIH_C_BIT_LINK_DETECTED + MIH_C_BIT_LINK_UP))>0)&& - (ralpriv->curr_signal_level > PREDEFINED_LINK_DETECTED_INDICATION_SIG_STRENGTH)) { - transaction_id = MIH_C_get_new_transaction_id(); - // MIH_C_LINK_TUPLE_ID_T - link_detected_info.link_tuple_id.link_id.link_type = MIH_C_WIRELESS_UMTS; - link_detected_info.link_tuple_id.link_id.link_addr.choice = (MIH_C_CHOICE_T)MIH_C_CHOICE_3GPP_ADDR; - MIH_C_3GPP_ADDR_set(&link_detected_info.link_tuple_id.link_id.link_addr._union._3gpp_addr, (u_int8_t*)&(ralpriv->ipv6_l2id[0]), strlen(DEFAULT_ADDRESS_3GPP)); - link_detected_info.link_tuple_id.choice = MIH_C_LINK_TUPLE_ID_CHOICE_NULL; - // MIH_C_NETWORK_ID_T - MIH_C_NETWORK_ID_set(&link_detected_info.network_id, (u_int8_t *)PREDEFINED_MIH_NETWORK_ID, strlen(PREDEFINED_MIH_NETWORK_ID)); - // MIH_C_NET_AUX_ID_T - MIH_C_NET_AUX_ID_set(&link_detected_info.net_aux_id, (u_int8_t *)PREDEFINED_MIH_NETAUX_ID, strlen(PREDEFINED_MIH_NETAUX_ID)); - // MIH_C_SIG_STRENGTH_T - link_detected_info.sig_strength.choice = MIH_C_SIG_STRENGTH_CHOICE_PERCENTAGE; - link_detected_info.sig_strength._union.percentage = ralpriv->curr_signal_level; - // sinr - link_detected_info.sinr = PREDEFINED_LINK_DETECTED_INDICATION_SINR; - // MIH_C_LINK_DATA_RATE_T - link_detected_info.link_data_rate = PREDEFINED_LINK_DETECTED_INDICATION_LINK_DATA_RATE; - // MIH_C_LINK_MIHCAP_FLAG - link_detected_info.link_mihcap_flag = MIH_C_BIT_EVENT_SERVICE_SUPPORTED | - MIH_C_BIT_COMMAND_SERVICE_SUPPORTED | - MIH_C_BIT_INFORMATION_SERVICE_SUPPORTED; - // MIH_C_NET_CAPS_T - link_detected_info.net_caps = MIH_C_BIT_NET_CAPS_QOS_CLASS0 | - MIH_C_BIT_NET_CAPS_QOS_CLASS1 | - MIH_C_BIT_NET_CAPS_INTERNET_ACCESS; - // - mRAL_send_link_detected_indication(&transaction_id, &link_detected_info); - ralpriv->link_to_be_detected = MIH_C_BOOLEAN_FALSE; - } - // LG: TO DO CHECK IF INDEX IS 0 - mRAL_check_thresholds_signal_strength(ralpriv->integrated_meas_level[0], ralpriv->prev_integrated_meas_level[0]); -} - -//--------------------------------------------------------------------------- -// find correponding cell in NAS measures -int rallte_NAS_corresponding_cell(int req_index) -//--------------------------------------------------------------------------- -{ - int index, i=0; - - while ((i<=ralpriv->num_measures)&&(ralpriv->req_cell_id[req_index]!=ralpriv->meas_cell_id[i])) - i++; - - index = i; - return index; -} - -//--------------------------------------------------------------------------- -void rallte_verifyPendingConnection(void){ -//--------------------------------------------------------------------------- - int if_ready = 0; - MIH_C_LINK_TUPLE_ID_T link_identifier; - - if ((ralpriv->pending_req_flag)%5==0){ - DEBUG("**\n"); - DEBUG("Pending Req Flag %d\n", ralpriv->pending_req_flag); - DEBUG(" >>>> verifyPendingConnection "); - //poll status from driver -#ifdef RAL_DUMMY - IAL_process_DNAS_message(IO_OBJ_CNX, IO_CMD_LIST, ralpriv->cell_id); - - if ((ralpriv->nas_state == NAS_CONNECTED)&&(ralpriv->num_rb>=1)){ - if_ready = 1; - ralpriv->state = CONNECTED; - } -#endif -#ifdef RAL_REALTIME - RAL_process_NAS_message(IO_OBJ_CNX, IO_CMD_LIST, ralpriv->cell_id); - if ((ralpriv->nas_state == NAS_CX_DCH)&&(ralpriv->num_rb>=1)){ - if_ready = 1; - ralpriv->state = CONNECTED; - } -#endif - if ((if_ready==1)||(ralpriv->pending_req_flag > 100)){ - if (ralpriv->pending_req_flag > 100){ - ralpriv->pending_req_ac_result = MIH_C_LINK_AC_RESULT_FAILURE; - } - mRAL_send_link_action_confirm(&ralpriv->pending_req_transaction_id, &ralpriv->pending_req_status, NULL, &ralpriv->pending_req_ac_result); - - - ////alternative : send linkup - //link_identifier.link_id.link_type = MIH_C_WIRELESS_UMTS; - //link_identifier.link_id.link_addr.choice = (MIH_C_CHOICE_T)MIH_C_CHOICE_3GPP_ADDR; - //MIH_C_3GPP_ADDR_set(&link_identifier.link_id.link_addr._union._3gpp_addr, (u_int8_t*)&(ralpriv->ipv6_l2id[0]), strlen(DEFAULT_ADDRESS_3GPP)); - //link_identifier.choice = MIH_C_LINK_TUPLE_ID_CHOICE_NULL; - //mRAL_send_link_up_indication(&ralpriv->pending_req_transaction_id, &link_identifier, NULL, NULL, NULL, NULL); - - - DEBUG("After response, Pending Req Flag = %d, cell_id = %d\n", ralpriv->pending_req_flag, ralpriv->cell_id); - ralpriv->pending_req_flag = 0; - // Link_up Ind not needed anymore - //sleep(2); - //mRALte_send_link_up_indication(); - } - } -}*/ diff --git a/openair3/RAL-LTE/LTE_RAL_UE/SRC/lteRALue_rrc_msg.c b/openair3/RAL-LTE/LTE_RAL_UE/SRC/lteRALue_rrc_msg.c deleted file mode 100755 index c93e3b0b00..0000000000 --- a/openair3/RAL-LTE/LTE_RAL_UE/SRC/lteRALue_rrc_msg.c +++ /dev/null @@ -1,283 +0,0 @@ -/***************************************************************************** - * Eurecom OpenAirInterface 3 - * Copyright(c) 2012 Eurecom - * - * Source mRAL_subscribe.c - * - * Version 0.1 - * - * Date 11/27/2013 - * - * Product MIH RAL LTE - * - * Subsystem - * - * Authors Lionel Gauthier - * - * Description - * - *****************************************************************************/ -#define LTE_RAL_UE -#define LTE_RAL_UE_RRC_MSG_C -#include "lteRALue.h" -#include "LAYER2/MAC/extern.h" - -//--------------------------------------------------------------------------------------------------------------------- -static int ueid2eui48(uint8_t *euiP, uint8_t* ue_idP) -//--------------------------------------------------------------------------------------------------------------------- -{ - // inspired by linux-source-3.2.0/net/ipv6/addrconf.c - memcpy(euiP, ue_idP, 3); - memcpy(euiP + 5, ue_idP + 3, 3); - euiP[3] = 0xFF; - euiP[4] = 0xFE; - euiP[0] ^= 2; - return 0; -} - -//--------------------------------------------------------------------------------------------------------------------- -void mRAL_rx_rrc_ral_scan_confirm(instance_t instanceP, - MessageDef *msg_pP) -//--------------------------------------------------------------------------------------------------------------------- -{ - MIH_C_STATUS_T status; - MIH_C_LINK_SCAN_RSP_LIST_T scan_rsp_list; - MIH_C_LINK_AC_RESULT_T ac_result; - int i; - - status = MIH_C_STATUS_SUCCESS; - ac_result = MIH_C_LINK_AC_RESULT_SUCCESS; - memset(&scan_rsp_list, 0, sizeof(MIH_C_LINK_SCAN_RSP_LIST_T)); - - for (i = 0 ; i < RRC_RAL_SCAN_CONF (msg_pP).num_scan_resp; i++) { - // TO DO - memcpy(&scan_rsp_list.val[i].link_addr, &RRC_RAL_SCAN_CONF (msg_pP).link_scan_resp[i].link_addr, sizeof(MIH_C_LINK_ADDR_T)); - // TO DO - memcpy(&scan_rsp_list.val[i].network_id, &RRC_RAL_SCAN_CONF (msg_pP).link_scan_resp[i].network_id, sizeof(MIH_C_NETWORK_ID_T)); - - scan_rsp_list.val[i].sig_strength.choice = RRC_RAL_SCAN_CONF (msg_pP).link_scan_resp[i].sig_strength.choice; - - switch (scan_rsp_list.val[i].sig_strength.choice) { - case RAL_SIG_STRENGTH_CHOICE_DBM: - scan_rsp_list.val[i].sig_strength._union.dbm = RRC_RAL_SCAN_CONF (msg_pP).link_scan_resp[i].sig_strength._union.dbm; - break; - - case RAL_SIG_STRENGTH_CHOICE_PERCENTAGE: - scan_rsp_list.val[i].sig_strength._union.percentage = RRC_RAL_SCAN_CONF (msg_pP).link_scan_resp[i].sig_strength._union.percentage; - break; - - default: - LOG_E(RAL_UE, "INVALID RRC_RAL_SCAN_CONF field sig_strength.choice %d\n", scan_rsp_list.val[i].sig_strength.choice); - status = MIH_C_STATUS_UNSPECIFIED_FAILURE; - } - - scan_rsp_list.length += 1; - } - - mRAL_send_link_action_confirm(instanceP, - &RRC_RAL_SCAN_CONF (msg_pP).transaction_id, - &status, - &scan_rsp_list, - &ac_result); -} - - -//--------------------------------------------------------------------------------------------------------------------- -void mRAL_rx_rrc_ral_system_information_indication(instance_t instanceP, - MessageDef *msg_pP) -//--------------------------------------------------------------------------------------------------------------------- -{ - MIH_C_LINK_DET_INFO_T link_det_info; - int i; - module_id_t mod_id = instanceP - NB_eNB_INST; - - memset(&link_det_info, 0, sizeof(MIH_C_LINK_DET_INFO_T)); - - // save cell parameters - g_ue_ral_obj[mod_id].cell_id = RRC_RAL_SYSTEM_INFORMATION_IND(msg_pP).cell_id; - memcpy(&g_ue_ral_obj[mod_id].plmn_id, &RRC_RAL_SYSTEM_INFORMATION_IND(msg_pP).plmn_id, sizeof(g_ue_ral_obj[mod_id].plmn_id)); - - // link id - link_det_info.link_tuple_id.link_id.link_type = MIH_C_WIRELESS_LTE; -#ifdef USE_3GPP_ADDR_AS_LINK_ADDR - link_det_info.link_tuple_id.link_id.link_addr.choice = (MIH_C_CHOICE_T)MIH_C_CHOICE_3GPP_ADDR; - MIH_C_3GPP_ADDR_load_3gpp_str_address(mod_id, &link_det_info.link_tuple_id.link_id.link_addr._union._3gpp_addr, (u_int8_t*)UE_DEFAULT_3GPP_ADDRESS); -#else - link_det_info.link_tuple_id.link_id.link_addr.choice = MIH_C_CHOICE_3GPP_3G_CELL_ID; - - // preserve byte order of plmn id - memcpy(link_det_info.link_tuple_id.link_id.link_addr._union._3gpp_3g_cell_id.plmn_id.val, &RRC_RAL_SYSTEM_INFORMATION_IND(msg_pP).plmn_id, 3); - link_det_info.link_tuple_id.link_id.link_addr._union._3gpp_3g_cell_id.cell_id = RRC_RAL_SYSTEM_INFORMATION_IND(msg_pP).cell_id; - - LOG_D(RAL_UE, "PLMN ID %d.%d.%d\n", link_det_info.link_tuple_id.link_id.link_addr._union._3gpp_3g_cell_id.plmn_id.val[0], - link_det_info.link_tuple_id.link_id.link_addr._union._3gpp_3g_cell_id.plmn_id.val[1], - link_det_info.link_tuple_id.link_id.link_addr._union._3gpp_3g_cell_id.plmn_id.val[2]); - LOG_D(RAL_UE, "CELL ID %d\n", link_det_info.link_tuple_id.link_id.link_addr._union._3gpp_3g_cell_id.cell_id); -#endif - //The optional LINK_ADDR may contains a link address of PoA. - link_det_info.link_tuple_id.choice = MIH_C_LINK_TUPLE_ID_CHOICE_NULL; - - MIH_C_NETWORK_ID_set(&link_det_info.network_id, (u_int8_t *)PREDEFINED_MIH_NETWORK_ID, strlen(PREDEFINED_MIH_NETWORK_ID)); - - MIH_C_NET_AUX_ID_set(&link_det_info.net_aux_id, (u_int8_t *)PREDEFINED_MIH_NETAUX_ID, strlen(PREDEFINED_MIH_NETAUX_ID)); - - link_det_info.sig_strength.choice = MIH_C_SIG_STRENGTH_CHOICE_DBM; - link_det_info.sig_strength._union.dbm = RRC_RAL_SYSTEM_INFORMATION_IND(msg_pP).dbm; - - link_det_info.sinr = RRC_RAL_SYSTEM_INFORMATION_IND(msg_pP).sinr; - - link_det_info.link_data_rate = RRC_RAL_SYSTEM_INFORMATION_IND(msg_pP).link_data_rate; - - link_det_info.link_mihcap_flag = g_ue_ral_obj[mod_id].link_mihcap_flag; - - link_det_info.net_caps = g_ue_ral_obj[mod_id].net_caps; - - mRAL_send_link_detected_indication(instanceP, &g_ue_ral_obj[mod_id].transaction_id, &link_det_info); - - g_ue_ral_obj[mod_id].transaction_id ++; - -} -//--------------------------------------------------------------------------------------------------------------------- -void mRAL_rx_rrc_ral_connection_establishment_indication(instance_t instanceP, - MessageDef *msg_pP) -//--------------------------------------------------------------------------------------------------------------------- -{ - MIH_C_LINK_TUPLE_ID_T link_tuple_id; - module_id_t mod_id = instanceP - NB_eNB_INST; - - memset(&link_tuple_id, 0, sizeof(MIH_C_LINK_TUPLE_ID_T)); - // The LINK_ID contains the MN LINK_ADDR - link_tuple_id.link_id.link_type = MIH_C_WIRELESS_LTE; -#ifdef USE_3GPP_ADDR_AS_LINK_ADDR - link_tuple_id.link_id.link_addr.choice = (MIH_C_CHOICE_T)MIH_C_CHOICE_3GPP_ADDR; - MIH_C_3GPP_ADDR_load_3gpp_str_address(mod_id, &link_tuple_id.link_id.link_addr._union._3gpp_addr, (u_int8_t*)UE_DEFAULT_3GPP_ADDRESS); -#else - link_tuple_id.link_id.link_addr.choice = MIH_C_CHOICE_3GPP_3G_CELL_ID; - memcpy(link_tuple_id.link_id.link_addr._union._3gpp_3g_cell_id.plmn_id.val, &g_ue_ral_obj[mod_id].plmn_id, 3); - link_tuple_id.link_id.link_addr._union._3gpp_3g_cell_id.cell_id = g_ue_ral_obj[mod_id].cell_id; - LOG_D(RAL_UE, "PLMN ID %d.%d.%d\n", link_tuple_id.link_id.link_addr._union._3gpp_3g_cell_id.plmn_id.val[0], - link_tuple_id.link_id.link_addr._union._3gpp_3g_cell_id.plmn_id.val[1], - link_tuple_id.link_id.link_addr._union._3gpp_3g_cell_id.plmn_id.val[2]); - LOG_D(RAL_UE, "CELL ID %d\n", link_tuple_id.link_id.link_addr._union._3gpp_3g_cell_id.cell_id); -#endif - //The optional LINK_ADDR may contains a link address of PoA. - link_tuple_id.choice = MIH_C_LINK_TUPLE_ID_CHOICE_NULL; - - mRAL_send_link_up_indication(instanceP, &g_ue_ral_obj[mod_id].transaction_id, - &link_tuple_id, - NULL, //MIH_C_LINK_ADDR_T *old_arP,(Optional) Old Access Router link address. - NULL, //MIH_C_LINK_ADDR_T *new_arP,(Optional) New Access Router link address. - NULL, //MIH_C_IP_RENEWAL_FLAG_T *flagP, (Optional) Indicates whether the MN needs to change IP Address in the new PoA. - NULL); //MIH_C_IP_MOB_MGMT_T *mobil_mngtP, (Optional) Indicates the type of Mobility Management Protocol supported by the new PoA. - - g_ue_ral_obj[mod_id].transaction_id ++; - -} -//--------------------------------------------------------------------------------------------------------------------- -void mRAL_rx_rrc_ral_connection_reestablishment_indication(instance_t instanceP, - MessageDef *msg_pP) -//--------------------------------------------------------------------------------------------------------------------- -{ - MIH_C_LINK_TUPLE_ID_T link_tuple_id; - module_id_t mod_id = instanceP - NB_eNB_INST; - - memset(&link_tuple_id, 0, sizeof(MIH_C_LINK_TUPLE_ID_T)); - //The optional LINK_ADDR may contains a link address of PoA. - link_tuple_id.choice = MIH_C_LINK_TUPLE_ID_CHOICE_NULL; - link_tuple_id.link_id.link_type = MIH_C_WIRELESS_LTE; -#ifdef USE_3GPP_ADDR_AS_LINK_ADDR - link_tuple_id.link_id.link_addr.choice = (MIH_C_CHOICE_T)MIH_C_CHOICE_3GPP_ADDR; - MIH_C_3GPP_ADDR_load_3gpp_str_address(mod_id, &link_tuple_id.link_id.link_addr._union._3gpp_addr, (u_int8_t*)UE_DEFAULT_3GPP_ADDRESS); -#else - link_tuple_id.link_id.link_addr.choice = MIH_C_CHOICE_3GPP_3G_CELL_ID; - // preserve byte order of plmn id - memcpy(link_tuple_id.link_id.link_addr._union._3gpp_3g_cell_id.plmn_id.val, &g_ue_ral_obj[mod_id].plmn_id, 3); - link_tuple_id.link_id.link_addr._union._3gpp_3g_cell_id.cell_id = g_ue_ral_obj[mod_id].cell_id; - - LOG_D(RAL_UE, "PLMN ID %d.%d.%d\n", link_tuple_id.link_id.link_addr._union._3gpp_3g_cell_id.plmn_id.val[0], - link_tuple_id.link_id.link_addr._union._3gpp_3g_cell_id.plmn_id.val[1], - link_tuple_id.link_id.link_addr._union._3gpp_3g_cell_id.plmn_id.val[2]); - LOG_D(RAL_UE, "CELL ID %d\n", link_tuple_id.link_id.link_addr._union._3gpp_3g_cell_id.cell_id); -#endif - - LOG_D(RAL_UE, "RRC_RAL_CONNECTION_ESTABLISHMENT_IND num srb %d num drb %d\n", RRC_RAL_CONNECTION_REESTABLISHMENT_IND(msg_pP).num_srb,RRC_RAL_CONNECTION_REESTABLISHMENT_IND(msg_pP).num_drb); - - if ((RRC_RAL_CONNECTION_REESTABLISHMENT_IND(msg_pP).num_drb > 0) && (RRC_RAL_CONNECTION_REESTABLISHMENT_IND(msg_pP).num_srb > 0)) { - mRAL_send_link_up_indication(instanceP, &g_ue_ral_obj[mod_id].transaction_id, - &link_tuple_id, - NULL, //MIH_C_LINK_ADDR_T *old_arP,(Optional) Old Access Router link address. - NULL, //MIH_C_LINK_ADDR_T *new_arP,(Optional) New Access Router link address. - NULL, //MIH_C_IP_RENEWAL_FLAG_T *flagP, (Optional) Indicates whether the MN needs to change IP Address in the new PoA. - NULL); //MIH_C_IP_MOB_MGMT_T *mobil_mngtP, (Optional) Indicates the type of Mobility Management Protocol supported by the new PoA. - } else { - MIH_C_LINK_DN_REASON_T reason_code = MIH_C_LINK_DOWN_REASON_EXPLICIT_DISCONNECT; - - mRAL_send_link_down_indication(instanceP, &g_ue_ral_obj[mod_id].transaction_id, - &link_tuple_id, - NULL, - &reason_code); - } - - g_ue_ral_obj[mod_id].transaction_id ++; -} -//--------------------------------------------------------------------------------------------------------------------- -void mRAL_rx_rrc_ral_connection_reconfiguration_indication(instance_t instanceP, - MessageDef *msg_pP) -//--------------------------------------------------------------------------------------------------------------------- -{ - MIH_C_LINK_TUPLE_ID_T link_tuple_id; - module_id_t mod_id = instanceP - NB_eNB_INST; - - memset(&link_tuple_id, 0, sizeof(MIH_C_LINK_TUPLE_ID_T)); - //The optional LINK_ADDR may contains a link address of PoA. - link_tuple_id.choice = MIH_C_LINK_TUPLE_ID_CHOICE_NULL; - link_tuple_id.link_id.link_type = MIH_C_WIRELESS_LTE; -#ifdef USE_3GPP_ADDR_AS_LINK_ADDR - link_tuple_id.link_id.link_addr.choice = (MIH_C_CHOICE_T)MIH_C_CHOICE_3GPP_ADDR; - MIH_C_3GPP_ADDR_load_3gpp_str_address(mod_id, &link_tuple_id.link_id.link_addr._union._3gpp_addr, (u_int8_t*)UE_DEFAULT_3GPP_ADDRESS); -#else - // preserve byte order of plmn id - memcpy(link_tuple_id.link_id.link_addr._union._3gpp_3g_cell_id.plmn_id.val, &g_ue_ral_obj[mod_id].plmn_id, 3); - link_tuple_id.link_id.link_addr._union._3gpp_3g_cell_id.cell_id = g_ue_ral_obj[mod_id].cell_id; - - LOG_D(RAL_UE, "PLMN ID %d.%d.%d\n", link_tuple_id.link_id.link_addr._union._3gpp_3g_cell_id.plmn_id.val[0], - link_tuple_id.link_id.link_addr._union._3gpp_3g_cell_id.plmn_id.val[1], - link_tuple_id.link_id.link_addr._union._3gpp_3g_cell_id.plmn_id.val[2]); - LOG_D(RAL_UE, "CELL ID %d\n", link_tuple_id.link_id.link_addr._union._3gpp_3g_cell_id.cell_id); -#endif - - LOG_D(RAL_UE, "RRC_RAL_CONNECTION_RECONFIGURATION_IND num srb %d num drb %d\n", - RRC_RAL_CONNECTION_RECONFIGURATION_IND(msg_pP).num_srb, - RRC_RAL_CONNECTION_RECONFIGURATION_IND(msg_pP).num_drb); - - if ((RRC_RAL_CONNECTION_RECONFIGURATION_IND(msg_pP).num_drb > 0) && - (RRC_RAL_CONNECTION_RECONFIGURATION_IND(msg_pP).num_srb > 0)) { - mRAL_send_link_up_indication(instanceP, &g_ue_ral_obj[mod_id].transaction_id, - &link_tuple_id, - NULL, //MIH_C_LINK_ADDR_T *old_arP,(Optional) Old Access Router link address. - NULL, //MIH_C_LINK_ADDR_T *new_arP,(Optional) New Access Router link address. - NULL, //MIH_C_IP_RENEWAL_FLAG_T *flagP, (Optional) Indicates whether the MN needs to change IP Address in the new PoA. - NULL); //MIH_C_IP_MOB_MGMT_T *mobil_mngtP, (Optional) Indicates the type of Mobility Management Protocol supported by the new PoA. - } else { - MIH_C_LINK_DN_REASON_T reason_code = MIH_C_LINK_DOWN_REASON_EXPLICIT_DISCONNECT; - - mRAL_send_link_down_indication(instanceP, &g_ue_ral_obj[mod_id].transaction_id, - &link_tuple_id, - NULL, - &reason_code); - } - - g_ue_ral_obj[mod_id].transaction_id ++; -} -//--------------------------------------------------------------------------------------------------------------------- -void mRAL_rx_rrc_ral_connection_release_indication(instance_t instanceP, MessageDef *msg_pP) -//--------------------------------------------------------------------------------------------------------------------- -{ - -} - - - - - - diff --git a/openair3/RAL-LTE/LTE_RAL_UE/SRC/lteRALue_subscribe.c b/openair3/RAL-LTE/LTE_RAL_UE/SRC/lteRALue_subscribe.c deleted file mode 100755 index 0e61802474..0000000000 --- a/openair3/RAL-LTE/LTE_RAL_UE/SRC/lteRALue_subscribe.c +++ /dev/null @@ -1,136 +0,0 @@ -/*************************************************************************** - ltmRALue_subscribe.c - description - *************************************************************************** - Eurecom OpenAirInterface 3 - Copyright(c) 1999 - 2013 Eurecom - - This program is free software; you can redistribute it and/or modify it - under the terms and conditions of the GNU General Public License, - version 2, as published by the Free Software Foundation. - - This program is distributed in the hope it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - more details. - - You should have received a copy of the GNU General Public License along with - this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - - The full GNU General Public License is included in this distribution in - the file called "COPYING". - - Contact Information - Openair Admin: openair_admin@eurecom.fr - Openair Tech : openair_tech@eurecom.fr - Forums : http://forums.eurecom.fsr/openairinterface - Address : Eurecom, 450 route des Chappes, 06410 Biot Sophia Antipolis, France -*******************************************************************************/ -/*! \file ltmRALue_subscribe.c - * \brief - * \author WETTERWALD Michelle, GAUTHIER Lionel, MAUREL Frederic - * \date 2013 - * \company EURECOM - * \email: michelle.wetterwald@eurecom.fr, lionel.gauthier@eurecom.fr, frederic.maurel@eurecom.fr - */ -/*******************************************************************************/ -#define LTE_RAL_UE -#define LTERALUE_SUBSCRIBE_C -//----------------------------------------------------------------------------- -#include "lteRALue.h" -#include "LAYER2/MAC/extern.h" -/****************************************************************************/ -/****************** E X P O R T E D F U N C T I O N S ******************/ -/****************************************************************************/ - -/**************************************************************************** - ** ** - ** Name: mRAL_subscribe_request() ** - ** ** - ** Description: Subscribes the MIH-F to receive specified link event ** - ** indications and sends Link Event Subscribe confirmation ** - ** to the MIH-F. ** - ** ** - ** Inputs: msg_pP: Pointer to the received MIH message ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: None ** - ** Others: ralpriv ** - ** ** - ***************************************************************************/ -void mRAL_subscribe_request(ral_ue_instance_t instanceP, - MIH_C_Message_Link_Event_Subscribe_request_t *msg_pP) -{ - module_id_t mod_id = instanceP - NB_eNB_INST; - MIH_C_STATUS_T status = MIH_C_STATUS_REJECTED; - - /* Check whether the action request is supported */ - if (g_ue_ral_obj[mod_id].mih_supported_link_command_list & MIH_C_BIT_LINK_EVENT_SUBSCRIBE) { - MIH_C_LINK_EVENT_LIST_T mih_subscribed_req_event_list; - - g_ue_ral_obj[mod_id].mih_subscribe_req_event_list |= (msg_pP->primitive.RequestedLinkEventList & g_ue_ral_obj[mod_id].mih_supported_link_event_list); - - mih_subscribed_req_event_list = g_ue_ral_obj[mod_id].mih_subscribe_req_event_list & msg_pP->primitive.RequestedLinkEventList; - - status = MIH_C_STATUS_SUCCESS; - - mRAL_send_event_subscribe_confirm(instanceP, &msg_pP->header.transaction_id, - &status, - &mih_subscribed_req_event_list); - } else { - mRAL_send_event_subscribe_confirm(instanceP, &msg_pP->header.transaction_id, - &status, - NULL); - } -} - -/**************************************************************************** - ** ** - ** Name: mRAL_unsubscribe_request() ** - ** ** - ** Description: Unsubscribes the MIH-F to receive specified link event ** - ** indications and sends Link Event Unsubscribe confirmation ** - ** to the MIH-F. ** - ** ** - ** Inputs: msg_pP: Pointer to the received MIH message ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: None ** - ** Others: ralpriv ** - ** ** - ***************************************************************************/ -void mRAL_unsubscribe_request(ral_ue_instance_t instanceP, - MIH_C_Message_Link_Event_Unsubscribe_request_t *msg_pP) -{ - MIH_C_STATUS_T status = MIH_C_STATUS_REJECTED; - module_id_t mod_id = instanceP - NB_eNB_INST; - - /* Check whether the action request is supported */ - if (g_ue_ral_obj[mod_id].mih_supported_link_command_list & MIH_C_BIT_LINK_EVENT_UNSUBSCRIBE) { - MIH_C_LINK_EVENT_LIST_T mih_unsubscribed_req_event_list; - MIH_C_LINK_EVENT_LIST_T saved_req_event_list; - - saved_req_event_list = g_ue_ral_obj[mod_id].mih_subscribe_req_event_list; - - g_ue_ral_obj[mod_id].mih_subscribe_req_event_list &= ~(msg_pP->primitive.RequestedLinkEventList & g_ue_ral_obj[mod_id].mih_supported_link_event_list); - mih_unsubscribed_req_event_list = g_ue_ral_obj[mod_id].mih_subscribe_req_event_list ^ saved_req_event_list; - - status = MIH_C_STATUS_SUCCESS; - - mRAL_send_event_unsubscribe_confirm(instanceP, &msg_pP->header.transaction_id, - &status, - &mih_unsubscribed_req_event_list); - } else { - mRAL_send_event_unsubscribe_confirm(instanceP, &msg_pP->header.transaction_id, - &status, - NULL); - } -} - -/****************************************************************************/ -/********************* L O C A L F U N C T I O N S *********************/ -/****************************************************************************/ - - diff --git a/openair3/RAL-LTE/LTE_RAL_UE/SRC/lteRALue_thresholds.c b/openair3/RAL-LTE/LTE_RAL_UE/SRC/lteRALue_thresholds.c deleted file mode 100755 index 4176ef60cf..0000000000 --- a/openair3/RAL-LTE/LTE_RAL_UE/SRC/lteRALue_thresholds.c +++ /dev/null @@ -1,313 +0,0 @@ -/*************************************************************************** - ltmRALue_thresholds.c - description - *************************************************************************** - Eurecom OpenAirInterface 3 - Copyright(c) 1999 - 2013 Eurecom - - This program is free software; you can redistribute it and/or modify it - under the terms and conditions of the GNU General Public License, - version 2, as published by the Free Software Foundation. - - This program is distributed in the hope it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - more details. - - You should have received a copy of the GNU General Public License along with - this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - - The full GNU General Public License is included in this distribution in - the file called "COPYING". - - Contact Information - Openair Admin: openair_admin@eurecom.fr - Openair Tech : openair_tech@eurecom.fr - Forums : http://forums.eurecom.fr/openairinterface - Address : Eurecom, 450 route des Chappes, 06410 Biot Sophia Antipolis, France -*******************************************************************************/ -/*! \file ltmRALue_thresholds.c - * \brief - * \author WETTERWALD Michelle, GAUTHIER Lionel, MAUREL Frederic - * \date 2013 - * \company EURECOM - * \email: michelle.wetterwald@eurecom.fr, lionel.gauthier@eurecom.fr, frederic.maurel@eurecom.fr - */ -/*******************************************************************************/ -#define LTE_RAL_UE -#define LTERALUE_THRESHOLDS_C -//----------------------------------------------------------------------------- -#include "assertions.h" -#include "lteRALue.h" - -extern unsigned char NB_eNB_INST; - - -/**************************************************************************** - ** ** - ** Name: mRAL_configure_thresholds_request() ** - ** ** - ** Description: Forwards the Link_Configure_Thresholds.request message ** - ** to the RRC layer. ** - ** ** - ** Inputs: msg_pP: Pointer to the received message ** - ** Others: ** - ** ** - ** Outputs: None ** - ** Return: None ** - ** Others: None ** - ** ** - ***************************************************************************/ -void mRAL_configure_thresholds_request(ral_ue_instance_t instanceP, - MIH_C_Message_Link_Configure_Thresholds_request_t* msg_pP) -{ - unsigned int index; - unsigned int th_index; - rrc_ral_configure_threshold_req_t configure_threshold_req; - MessageDef *message_p; - MIH_C_STATUS_T status; - MIH_C_STATUS_T global_status; - int result; - MIH_C_LINK_CFG_STATUS_LIST_T link_configure_status_list; - - MIH_C_LINK_CFG_STATUS_LIST_init(&link_configure_status_list); - - message_p = itti_alloc_new_message (TASK_RAL_UE, RRC_RAL_CONFIGURE_THRESHOLD_REQ); - - memset(&configure_threshold_req, 0, sizeof(rrc_ral_configure_threshold_req_t)); - - // copy transaction id - configure_threshold_req.transaction_id = msg_pP->header.transaction_id; - - global_status = MIH_C_STATUS_SUCCESS; - - // configure_threshold_req.num_link_cfg_params = 0; // done - for (index = 0; index < msg_pP->primitive.LinkConfigureParameterList_list.length; index++) { - - status = MIH_C_STATUS_SUCCESS; - - // copy link_param_type - configure_threshold_req.link_cfg_params[index].link_param_type.choice = msg_pP->primitive.LinkConfigureParameterList_list.val[index].link_param_type.choice; - - switch (configure_threshold_req.link_cfg_params[index].link_param_type.choice) { - case RAL_LINK_PARAM_TYPE_CHOICE_GEN: - memcpy(&configure_threshold_req.link_cfg_params[index].link_param_type._union.link_param_gen, - &msg_pP->primitive.LinkConfigureParameterList_list.val[index].link_param_type._union.link_param_gen, - sizeof(ral_link_param_gen_t)); - break; - - case RAL_LINK_PARAM_TYPE_CHOICE_QOS: - memcpy(&configure_threshold_req.link_cfg_params[index].link_param_type._union.link_param_qos, - &msg_pP->primitive.LinkConfigureParameterList_list.val[index].link_param_type._union.link_param_qos, - sizeof(ral_link_param_qos_t)); - break; - - case RAL_LINK_PARAM_TYPE_CHOICE_LTE: - memcpy(&configure_threshold_req.link_cfg_params[index].link_param_type._union.link_param_lte, - &msg_pP->primitive.LinkConfigureParameterList_list.val[index].link_param_type._union.link_param_lte, - sizeof(ral_link_param_lte_t)); - break; - - default: - status = MIH_C_STATUS_UNSPECIFIED_FAILURE; - break; - } - - // at first error, exit - - - configure_threshold_req.num_link_cfg_params += 1; - - // copy choice - configure_threshold_req.link_cfg_params[index].union_choice = msg_pP->primitive.LinkConfigureParameterList_list.val[index].choice; - - // copy _union - switch (configure_threshold_req.link_cfg_params[index].union_choice) { - case RAL_LINK_CFG_PARAM_CHOICE_TIMER_NULL: - configure_threshold_req.link_cfg_params[index]._union.null_attr = 0; - break; - - case RAL_LINK_CFG_PARAM_CHOICE_TIMER: - configure_threshold_req.link_cfg_params[index]._union.timer_interval = msg_pP->primitive.LinkConfigureParameterList_list.val[index]._union.timer_interval; - break; - - default: - printf("ERROR RAL_UE, : mRAL_configure_thresholds_request unknown configure_threshold_req.link_cfg_params[index].union_choice %d\n", - configure_threshold_req.link_cfg_params[index].union_choice); - status = MIH_C_STATUS_UNSPECIFIED_FAILURE; - break; - } - - // copy th_action - configure_threshold_req.link_cfg_params[index].th_action = msg_pP->primitive.LinkConfigureParameterList_list.val[index].th_action; - - // configure_threshold_req.link_cfg_params[index].num_thresholds = 0; // done - for (th_index = 0; th_index < msg_pP->primitive.LinkConfigureParameterList_list.val[index].threshold_list.length; th_index++) { - configure_threshold_req.link_cfg_params[index].thresholds[th_index].threshold_val = msg_pP->primitive.LinkConfigureParameterList_list.val[index].threshold_list.val[th_index].threshold_val; - configure_threshold_req.link_cfg_params[index].thresholds[th_index].threshold_xdir = msg_pP->primitive.LinkConfigureParameterList_list.val[index].threshold_list.val[th_index].threshold_xdir; - configure_threshold_req.link_cfg_params[index].num_thresholds += 1; - - // Fill ConfigureThreshold_confirm - if (link_configure_status_list.length < MIH_C_LINK_CFG_STATUS_LIST_LENGTH) { - memcpy(&link_configure_status_list.val[link_configure_status_list.length].link_param_type, - &configure_threshold_req.link_cfg_params[index].link_param_type, - sizeof(ral_link_param_type_t)); - - memcpy(&link_configure_status_list.val[link_configure_status_list.length].threshold, - &msg_pP->primitive.LinkConfigureParameterList_list.val[index].threshold_list.val[th_index], - sizeof(ral_link_param_type_t)); - - link_configure_status_list.val[link_configure_status_list.length].config_status = status; - - link_configure_status_list.length += 1; - } else { - LOG_E(RAL_UE, "MIH_C_LINK_CFG_STATUS_LIST overflow for send_configure_thresholds_confirm\n"); - global_status = MIH_C_STATUS_UNSPECIFIED_FAILURE; - } - } - } - - if (link_configure_status_list.length > 0) { - memcpy (&message_p->ittiMsg, (void *) &configure_threshold_req, sizeof(rrc_ral_configure_threshold_req_t)); - itti_send_msg_to_task (TASK_RRC_UE, instanceP, message_p); - - mRAL_send_configure_thresholds_confirm(instanceP, - &msg_pP->header.transaction_id, - &global_status, - &link_configure_status_list); - } else { - mRAL_send_configure_thresholds_confirm(instanceP, - &msg_pP->header.transaction_id, - &global_status, - NULL); - - result = itti_free (ITTI_MSG_ORIGIN_ID(message_p), message_p); - AssertFatal (result == EXIT_SUCCESS, "Failed to free memory (%d)!\n", result); - } -} - -//--------------------------------------------------------------------------------------------------------------------- -void mRAL_rx_rrc_ral_configure_threshold_conf(ral_ue_instance_t instance, MessageDef *msg_pP) -//--------------------------------------------------------------------------------------------------------------------- -{ - MIH_C_STATUS_T status; - // This parameter is not included if Status does not indicate “Success.� - MIH_C_LINK_CFG_STATUS_LIST_T link_cfg_status_list; - unsigned int i; - - status = RRC_RAL_CONFIGURE_THRESHOLD_CONF(msg_pP).status; - - if (status == RAL_STATUS_SUCCESS) { - link_cfg_status_list.length = 0; - - for (i = 0; i < RRC_RAL_CONFIGURE_THRESHOLD_CONF(msg_pP).num_link_cfg_params; i++) { - link_cfg_status_list.val[i].link_param_type.choice = RRC_RAL_CONFIGURE_THRESHOLD_CONF(msg_pP).cfg_status[i].link_param_type.choice; - - switch (link_cfg_status_list.val[i].link_param_type.choice) { - case RAL_LINK_PARAM_TYPE_CHOICE_GEN: - memcpy(&link_cfg_status_list.val[i].link_param_type._union.link_param_gen, - &RRC_RAL_CONFIGURE_THRESHOLD_CONF(msg_pP).cfg_status[i].link_param_type._union.link_param_gen, - sizeof(ral_link_param_gen_t)); - break; - - case RAL_LINK_PARAM_TYPE_CHOICE_QOS: - memcpy(&link_cfg_status_list.val[i].link_param_type._union.link_param_qos, - &RRC_RAL_CONFIGURE_THRESHOLD_CONF(msg_pP).cfg_status[i].link_param_type._union.link_param_qos, - sizeof(ral_link_param_qos_t)); - break; - - case RAL_LINK_PARAM_TYPE_CHOICE_LTE: - memcpy(&link_cfg_status_list.val[i].link_param_type._union.link_param_lte, - &RRC_RAL_CONFIGURE_THRESHOLD_CONF(msg_pP).cfg_status[i].link_param_type._union.link_param_lte, - sizeof(ral_link_param_lte_t)); - break; - - default: - assert(1==0); - } - - link_cfg_status_list.val[i].threshold.threshold_val = RRC_RAL_CONFIGURE_THRESHOLD_CONF(msg_pP).cfg_status[i].threshold.threshold_val; - link_cfg_status_list.val[i].threshold.threshold_xdir = RRC_RAL_CONFIGURE_THRESHOLD_CONF(msg_pP).cfg_status[i].threshold.threshold_xdir; - link_cfg_status_list.val[i].config_status = RRC_RAL_CONFIGURE_THRESHOLD_CONF(msg_pP).cfg_status[i].config_status; - link_cfg_status_list.length += 1; - } - - mRAL_send_configure_thresholds_confirm(instance, &RRC_RAL_CONFIGURE_THRESHOLD_CONF(msg_pP).transaction_id, &status, &link_cfg_status_list); - } else { - mRAL_send_configure_thresholds_confirm(instance, &RRC_RAL_CONFIGURE_THRESHOLD_CONF(msg_pP).transaction_id, &status, NULL); - } -} -//--------------------------------------------------------------------------------------------------------------------- -void mRAL_rx_rrc_ral_measurement_report_indication(ral_ue_instance_t instanceP, MessageDef *msg_pP) -//--------------------------------------------------------------------------------------------------------------------- -{ - MIH_C_TRANSACTION_ID_T transaction_id; - module_id_t mod_id; - MIH_C_LINK_TUPLE_ID_T link_tuple_id; - LIST(MIH_C_LINK_PARAM_RPT, link_parameters_report); - - mod_id = instanceP - NB_eNB_INST; - transaction_id = g_ue_ral_obj[mod_id].transaction_id; - g_ue_ral_obj[mod_id].transaction_id += 1; - - memset(&link_tuple_id, 0, sizeof(MIH_C_LINK_TUPLE_ID_T)); - link_tuple_id.link_id.link_type = MIH_C_WIRELESS_LTE; -#ifdef USE_3GPP_ADDR_AS_LINK_ADDR - link_tuple_id.link_id.link_addr.choice = (MIH_C_CHOICE_T)MIH_C_CHOICE_3GPP_ADDR; - MIH_C_3GPP_ADDR_load_3gpp_str_address(mod_id, &link_tuple_id.link_id.link_addr._union._3gpp_addr, (u_int8_t*)UE_DEFAULT_3GPP_ADDRESS); -#else - link_tuple_id.link_id.link_addr.choice = MIH_C_CHOICE_3GPP_3G_CELL_ID; - - // preserve byte order of plmn id - memcpy(link_tuple_id.link_id.link_addr._union._3gpp_3g_cell_id.plmn_id.val, &g_ue_ral_obj[mod_id].plmn_id, 3); - link_tuple_id.link_id.link_addr._union._3gpp_3g_cell_id.cell_id = g_ue_ral_obj[mod_id].cell_id; - - LOG_D(RAL_UE, "PLMN ID %d.%d.%d\n", link_tuple_id.link_id.link_addr._union._3gpp_3g_cell_id.plmn_id.val[0], - link_tuple_id.link_id.link_addr._union._3gpp_3g_cell_id.plmn_id.val[1], - link_tuple_id.link_id.link_addr._union._3gpp_3g_cell_id.plmn_id.val[2]); - LOG_D(RAL_UE, "CELL ID %d\n", link_tuple_id.link_id.link_addr._union._3gpp_3g_cell_id.cell_id); -#endif - - MIH_C_LINK_PARAM_RPT_LIST_init(&link_parameters_report_list); - memcpy(&link_parameters_report_list.val[0].link_param, - &RRC_RAL_MEASUREMENT_REPORT_IND(msg_pP).link_param, - sizeof(MIH_C_LINK_PARAM_T)); - - if (RRC_RAL_MEASUREMENT_REPORT_IND(msg_pP).threshold.threshold_xdir == RAL_NO_THRESHOLD) { - link_parameters_report_list.val[0].choice = MIH_C_LINK_PARAM_RPT_CHOICE_NULL; - } else { - link_parameters_report_list.val[0].choice = MIH_C_LINK_PARAM_RPT_CHOICE_THRESHOLD; - link_parameters_report_list.val[0]._union.threshold.threshold_val = RRC_RAL_MEASUREMENT_REPORT_IND(msg_pP).threshold.threshold_val; - link_parameters_report_list.val[0]._union.threshold.threshold_xdir = RRC_RAL_MEASUREMENT_REPORT_IND(msg_pP).threshold.threshold_xdir; - } - - link_parameters_report_list.length += 1; - - mRAL_send_link_parameters_report_indication(instanceP, - &transaction_id, - &link_tuple_id, - &link_parameters_report_list); -} -/* - * typedef struct MIH_C_LINK_PARAM { - MIH_C_LINK_PARAM_TYPE_T link_param_type; - MIH_C_CHOICE_T choice; - union { - MIH_C_LINK_PARAM_VAL_T link_param_val; - MIH_C_QOS_PARAM_VAL_T qos_param_val; - } _union; -} MIH_C_LINK_PARAM_T; - - * typedef struct MIH_C_LINK_PARAM_RPT { - MIH_C_LINK_PARAM_T link_param; - MIH_C_CHOICE_T choice; - union { - MIH_C_NULL_T null_attr; - MIH_C_THRESHOLD_T threshold; - } _union; -} MIH_C_LINK_PARAM_RPT_T; -#define MIH_C_LINK_PARAM_RPT_CHOICE_NULL 0 -#define MIH_C_LINK_PARAM_RPT_CHOICE_THRESHOLD 1 - * - */ - diff --git a/openair3/RAL-LTE/Makefile.inc b/openair3/RAL-LTE/Makefile.inc deleted file mode 100755 index 19b9f286af..0000000000 --- a/openair3/RAL-LTE/Makefile.inc +++ /dev/null @@ -1,43 +0,0 @@ - -RAL_OBJS = - -ifeq ($(ENABLE_RAL), 1) -RAL_OBJS += $(OPENAIR3_DIR)/RAL-LTE/INTERFACE-802.21/C/MIH_C_header_codec.o -RAL_OBJS += $(OPENAIR3_DIR)/RAL-LTE/INTERFACE-802.21/C/MIH_C_msg_codec.o -RAL_OBJS += $(OPENAIR3_DIR)/RAL-LTE/INTERFACE-802.21/C/MIH_C_primitive_codec.o -RAL_OBJS += $(OPENAIR3_DIR)/RAL-LTE/INTERFACE-802.21/C/MIH_C_F1_basic_data_types_codec.o -RAL_OBJS += $(OPENAIR3_DIR)/RAL-LTE/INTERFACE-802.21/C/MIH_C_F2_general_data_types_codec.o -RAL_OBJS += $(OPENAIR3_DIR)/RAL-LTE/INTERFACE-802.21/C/MIH_C_F3_data_types_for_address_codec.o -RAL_OBJS += $(OPENAIR3_DIR)/RAL-LTE/INTERFACE-802.21/C/MIH_C_F4_data_types_for_links_codec.o -RAL_OBJS += $(OPENAIR3_DIR)/RAL-LTE/INTERFACE-802.21/C/MIH_C_F9_data_types_for_qos_codec.o -RAL_OBJS += $(OPENAIR3_DIR)/RAL-LTE/INTERFACE-802.21/C/MIH_C_F13_data_types_for_information_elements_codec.o -RAL_OBJS += $(OPENAIR3_DIR)/RAL-LTE/INTERFACE-802.21/C/MIH_C_L2_type_values_for_tlv_encoding.o -RAL_OBJS += $(OPENAIR3_DIR)/RAL-LTE/INTERFACE-802.21/C/MIH_C_Medieval_extensions.o -#RAL_OBJS += $(OPENAIR3_DIR)/RAL-LTE/INTERFACE-802.21/C/MIH_C_log.o -RAL_OBJS += $(OPENAIR3_DIR)/RAL-LTE/INTERFACE-802.21/C/MIH_C_bit_buffer.o -RAL_OBJS += $(OPENAIR3_DIR)/RAL-LTE/INTERFACE-802.21/C/MIH_C.o - -RAL_OBJS += $(OPENAIR3_DIR)/RAL-LTE/LTE_RAL_ENB/SRC/lteRALenb_action.o -RAL_OBJS += $(OPENAIR3_DIR)/RAL-LTE/LTE_RAL_ENB/SRC/lteRALenb_main.o -RAL_OBJS += $(OPENAIR3_DIR)/RAL-LTE/LTE_RAL_ENB/SRC/lteRALenb_mih_msg.o -RAL_OBJS += $(OPENAIR3_DIR)/RAL-LTE/LTE_RAL_ENB/SRC/lteRALenb_parameters.o -RAL_OBJS += $(OPENAIR3_DIR)/RAL-LTE/LTE_RAL_ENB/SRC/lteRALenb_process.o -RAL_OBJS += $(OPENAIR3_DIR)/RAL-LTE/LTE_RAL_ENB/SRC/lteRALenb_rrc_msg.o -RAL_OBJS += $(OPENAIR3_DIR)/RAL-LTE/LTE_RAL_ENB/SRC/lteRALenb_subscribe.o -RAL_OBJS += $(OPENAIR3_DIR)/RAL-LTE/LTE_RAL_ENB/SRC/lteRALenb_thresholds.o - -RAL_OBJS += $(OPENAIR3_DIR)/RAL-LTE/LTE_RAL_UE/SRC/lteRALue_action.o -RAL_OBJS += $(OPENAIR3_DIR)/RAL-LTE/LTE_RAL_UE/SRC/lteRALue_main.o -RAL_OBJS += $(OPENAIR3_DIR)/RAL-LTE/LTE_RAL_UE/SRC/lteRALue_mih_msg.o -RAL_OBJS += $(OPENAIR3_DIR)/RAL-LTE/LTE_RAL_UE/SRC/lteRALue_parameters.o -RAL_OBJS += $(OPENAIR3_DIR)/RAL-LTE/LTE_RAL_UE/SRC/lteRALue_process.o -RAL_OBJS += $(OPENAIR3_DIR)/RAL-LTE/LTE_RAL_UE/SRC/lteRALue_rrc_msg.o -RAL_OBJS += $(OPENAIR3_DIR)/RAL-LTE/LTE_RAL_UE/SRC/lteRALue_subscribe.o -RAL_OBJS += $(OPENAIR3_DIR)/RAL-LTE/LTE_RAL_UE/SRC/lteRALue_thresholds.o -endif - -EXTRA_CFLAGS += -DMIH_C_MEDIEVAL_EXTENSIONS -L2_OBJS += $(RAL_OBJS) -L2_incl += -I$(OPENAIR3_DIR)/RAL-LTE/INTERFACE-802.21/INCLUDE -L2_incl += -I$(OPENAIR3_DIR)/RAL-LTE/LTE_RAL_ENB/INCLUDE -L2_incl += -I$(OPENAIR3_DIR)/RAL-LTE/LTE_RAL_UE/INCLUDE diff --git a/openair3/RAL-LTE/RAL-DUMMY/802.21-SCENARIO/VERSION0/README.txt b/openair3/RAL-LTE/RAL-DUMMY/802.21-SCENARIO/VERSION0/README.txt deleted file mode 100644 index f3bab3c129..0000000000 --- a/openair3/RAL-LTE/RAL-DUMMY/802.21-SCENARIO/VERSION0/README.txt +++ /dev/null @@ -1,12 +0,0 @@ --------------------------------------------------------------------------------- - Scenario used with rg_mih_user.cpp (MIH user run at the Radio Gateway side) --------------------------------------------------------------------------------- - --- Activate/Deactivate Unicast resource 2001:0660:0382:0014:0335:0600:8014:9150 -mih_mscgen_page_10.png - --- Activate/Deactivate Multicast resource FF3E:0020:2001:0DB8:0000:0000:0000:0043 -mih_mscgen_page_11.png - --- Activate/Deactivate Non-RB-CONNECTED Unicast resource 2001:0660:0382:0014:0335:0600:8014:9153 -mih_mscgen_page_12.png diff --git a/openair3/RAL-LTE/RAL-DUMMY/802.21-SCENARIO/VERSION0/mih_mscgen_page_0.png b/openair3/RAL-LTE/RAL-DUMMY/802.21-SCENARIO/VERSION0/mih_mscgen_page_0.png deleted file mode 100644 index 5756f2173d..0000000000 Binary files a/openair3/RAL-LTE/RAL-DUMMY/802.21-SCENARIO/VERSION0/mih_mscgen_page_0.png and /dev/null differ diff --git a/openair3/RAL-LTE/RAL-DUMMY/802.21-SCENARIO/VERSION0/mih_mscgen_page_1.png b/openair3/RAL-LTE/RAL-DUMMY/802.21-SCENARIO/VERSION0/mih_mscgen_page_1.png deleted file mode 100644 index 4c523b260e..0000000000 Binary files a/openair3/RAL-LTE/RAL-DUMMY/802.21-SCENARIO/VERSION0/mih_mscgen_page_1.png and /dev/null differ diff --git a/openair3/RAL-LTE/RAL-DUMMY/802.21-SCENARIO/VERSION0/mih_mscgen_page_10.png b/openair3/RAL-LTE/RAL-DUMMY/802.21-SCENARIO/VERSION0/mih_mscgen_page_10.png deleted file mode 100644 index ff122f2f01..0000000000 Binary files a/openair3/RAL-LTE/RAL-DUMMY/802.21-SCENARIO/VERSION0/mih_mscgen_page_10.png and /dev/null differ diff --git a/openair3/RAL-LTE/RAL-DUMMY/802.21-SCENARIO/VERSION0/mih_mscgen_page_11.png b/openair3/RAL-LTE/RAL-DUMMY/802.21-SCENARIO/VERSION0/mih_mscgen_page_11.png deleted file mode 100644 index 15c0d87c01..0000000000 Binary files a/openair3/RAL-LTE/RAL-DUMMY/802.21-SCENARIO/VERSION0/mih_mscgen_page_11.png and /dev/null differ diff --git a/openair3/RAL-LTE/RAL-DUMMY/802.21-SCENARIO/VERSION0/mih_mscgen_page_12.png b/openair3/RAL-LTE/RAL-DUMMY/802.21-SCENARIO/VERSION0/mih_mscgen_page_12.png deleted file mode 100644 index 784db0f243..0000000000 Binary files a/openair3/RAL-LTE/RAL-DUMMY/802.21-SCENARIO/VERSION0/mih_mscgen_page_12.png and /dev/null differ diff --git a/openair3/RAL-LTE/RAL-DUMMY/802.21-SCENARIO/VERSION0/mih_mscgen_page_2.png b/openair3/RAL-LTE/RAL-DUMMY/802.21-SCENARIO/VERSION0/mih_mscgen_page_2.png deleted file mode 100644 index 1a171fc0af..0000000000 Binary files a/openair3/RAL-LTE/RAL-DUMMY/802.21-SCENARIO/VERSION0/mih_mscgen_page_2.png and /dev/null differ diff --git a/openair3/RAL-LTE/RAL-DUMMY/802.21-SCENARIO/VERSION0/mih_mscgen_page_3.png b/openair3/RAL-LTE/RAL-DUMMY/802.21-SCENARIO/VERSION0/mih_mscgen_page_3.png deleted file mode 100644 index 2a890bbcfa..0000000000 Binary files a/openair3/RAL-LTE/RAL-DUMMY/802.21-SCENARIO/VERSION0/mih_mscgen_page_3.png and /dev/null differ diff --git a/openair3/RAL-LTE/RAL-DUMMY/802.21-SCENARIO/VERSION0/mih_mscgen_page_4.png b/openair3/RAL-LTE/RAL-DUMMY/802.21-SCENARIO/VERSION0/mih_mscgen_page_4.png deleted file mode 100644 index d3839cf097..0000000000 Binary files a/openair3/RAL-LTE/RAL-DUMMY/802.21-SCENARIO/VERSION0/mih_mscgen_page_4.png and /dev/null differ diff --git a/openair3/RAL-LTE/RAL-DUMMY/802.21-SCENARIO/VERSION0/mih_usr.cpp b/openair3/RAL-LTE/RAL-DUMMY/802.21-SCENARIO/VERSION0/mih_usr.cpp deleted file mode 100755 index f1c09fd984..0000000000 --- a/openair3/RAL-LTE/RAL-DUMMY/802.21-SCENARIO/VERSION0/mih_usr.cpp +++ /dev/null @@ -1,1457 +0,0 @@ -//============================================================================== -// Brief : MIH-User -// Authors : Bruno Santos -//------------------------------------------------------------------------------ -// ODTONE - Open Dot Twenty One -// -// Copyright (C) 2009-2012 Universidade Aveiro -// Copyright (C) 2009-2012 Instituto de Telecomunicações - Pólo Aveiro -// -// This software is distributed under a license. The full license -// agreement can be found in the file LICENSE in this distribution. -// This software may not be copied, modified, sold or distributed -// other than expressed in the named license agreement. -// -// This software is distributed without any warranty. -//============================================================================== - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include - -#include - -#define THRESHOLD_HIGH_VAL 90 -#define THRESHOLD_LOW_VAL 15 - -/////////////////////////////////////////////////////////////////////////////// -// The scenario coded in this MIH-USER is the following (with mRALlteDummy and NASUEDummy executables) -// +--------+ +-----+ -// |MIH_USER| |MIH-F| -// +---+----+ +--+--+ -// |---------- User_Register.indication ---------------->| (supported_commands) Handler next msg=user_reg_handler -// | | -// |---------- Capability_Discover.request ------------->| Handler next msg=receive_MIH_Capability_Discover_confirm -// |<--------- Capability_Discover.confirm --------------| (success) -// | | -// |---------- Event_Subscribe.request ----------------->| Handler next msg=receive_MIH_Event_Subscribe_response -// |<--------- Event_Subscribe.response -----------------| (success) -// | | -// |---------- Configure_Thresholds.request ------------>| (High signal strength value) Handler next msg=event_handler -// |<--------- Configure_Thresholds.confirm -------------| link_get_parameters_request = 1 -// | | -// |---------- Link_Get_Parameters.request ------------->| Handler next msg=event_handler (link_get_parameters_request) -// |<--------- Link_Get_Parameters.confirm --------------| (success) -// | . | -// | . | -// | . | -// |<--------- Link_Detected.indication -----------------| link_action_request = 0 -// |---------- Link_Actions.request -------------------->| (power-up+scan) Handler next msg=event_handler -// |<--------- Link_Actions.confirm ---------------------| (success) -// |---------- Link_Actions.request -------------------->| (power-up) Handler next msg=event_handler -// |<--------- Link_Actions.confirm ---------------------| (success) -// | . | -// | . | -// |<--------- Link_Parameters_Report.indication --------| (Threshold crossed) Now (signal strength will decrease) -// | | -// |---------- Configure_Thresholds.request ------------>| (Low signal strength value) Handler next msg=event_handler -// |<--------- Configure_Thresholds.confirm -------------| (success) -// | . | -// | . | -// |<--------- Link_Parameters_Report.indication --------| (Threshold crossed) -// |---------- Link_Actions.request -------------------->| (power-down) Handler next msg=event_handler -// | . | -// |<--------- Link_Actions.confirm ---------------------| (success) -// | | -// | | -/////////////////////////////////////////////////////////////////////////////// - -static const char* const kConf_MIH_Commands = "user.commands"; -/////////////////////////////////////////////////////////////////////////////// - -namespace po = boost::program_options; - -using odtone::uint; -using odtone::ushort; -using odtone::sint8; - -odtone::logger log_("[mih_usr]", std::cout); - -/////////////////////////////////////////////////////////////////////////////// -void __trim(odtone::mih::octet_string &str, const char chr) -{ - str.erase(std::remove(str.begin(), str.end(), chr), str.end()); -} - -//----------------------------------------------------------------------------- -template std::string StringOf(T object) { -//----------------------------------------------------------------------------- - std::ostringstream os; - os << object; - return(os.str()); -} -//----------------------------------------------------------------------------- -std::string getTimeStamp4Log() -//----------------------------------------------------------------------------- -{ - std::stringstream ss (std::stringstream::in | std::stringstream::out); - struct timespec time_spec; - unsigned int time_now_micros; - unsigned int time_now_s; - clock_gettime (CLOCK_REALTIME, &time_spec); - time_now_s = (unsigned int) time_spec.tv_sec % 3600; - time_now_micros = (unsigned int) time_spec.tv_nsec/1000; - //time_now_s = 110; - //time_now_micros = 22; - ss << time_now_s << ':' << time_now_micros; - return ss.str(); -} -//----------------------------------------------------------------------------- -std::string status2string(odtone::mih::status statusP){ -//----------------------------------------------------------------------------- - switch (statusP.get()) { - case odtone::mih::status_success: return "SUCCESS";break; - case odtone::mih::status_failure: return "UNSPECIFIED_FAILURE";break; - case odtone::mih::status_rejected: return "REJECTED";break; - case odtone::mih::status_authorization_failure: return "AUTHORIZATION_FAILURE";break; - case odtone::mih::status_network_error: return "NETWORK_ERROR";break; - default: return "UNKNOWN"; - } -} -//----------------------------------------------------------------------------- -std::string link_down_reason2string(odtone::mih::link_dn_reason reasonP){ -//----------------------------------------------------------------------------- - switch (reasonP.get()) { - case odtone::mih::link_dn_reason_explicit_disconnect: return "DN_REASON_EXPLICIT_DISCONNECT";break; - case odtone::mih::link_dn_reason_packet_timeout: return "DN_REASON_PACKET_TIMEOUT";break; - case odtone::mih::link_dn_reason_no_resource: return "DN_REASON_NO_RESOURCE";break; - case odtone::mih::link_dn_reason_no_broadcast: return "DN_REASON_NO_BROADCAST";break; - case odtone::mih::link_dn_reason_authentication_failure: return "DN_REASON_AUTHENTICATION_FAILURE";break; - case odtone::mih::link_dn_reason_billing_failure: return "DN_REASON_BILLING_FAILURE";break; - default: return "DN_REASON_UNKNOWN"; - } -} -//----------------------------------------------------------------------------- -std::string link_going_down_reason2string(odtone::mih::link_gd_reason reasonP){ -//----------------------------------------------------------------------------- - switch (reasonP.get()) { - case odtone::mih::link_gd_reason_explicit_disconnect: return "GD_REASON_EXPLICIT_DISCONNECT";break; - case odtone::mih::link_gd_reason_link_parameter_degrading: return "GD_REASON_PARAMETER_DEGRADING";break; - case odtone::mih::link_gd_reason_low_power: return "GD_REASON_LOW_POWER";break; - case odtone::mih::link_gd_reason_no_resource: return "GD_REASON_NO_RESOURCE";break; - default: return "GD_REASON_UNKNOWN"; - } -} -//----------------------------------------------------------------------------- -std::string evt2string(odtone::mih::mih_evt_list evtP){ -//----------------------------------------------------------------------------- - std::string s; - if(evtP.get(odtone::mih::mih_evt_link_detected)) s = std::string("DETECTED, "); - if(evtP.get(odtone::mih::mih_evt_link_up)) s += "UP, "; - if(evtP.get(odtone::mih::mih_evt_link_down)) s += "DOWN, "; - if(evtP.get(odtone::mih::mih_evt_link_parameters_report)) s += "PARAMETERS_REPORT, "; - if(evtP.get(odtone::mih::mih_evt_link_going_down)) s += "GOING_DOWN, "; - if(evtP.get(odtone::mih::mih_evt_link_handover_imminent)) s += "HANDOVER_IMMINENT, "; - if(evtP.get(odtone::mih::mih_evt_link_handover_complete)) s += "HANDOVER_COMPLETE, "; - if(evtP.get(odtone::mih::mih_evt_link_pdu_transmit_status)) s += "PDU_TRANSMIT_STATUS, "; - return s; -} -//----------------------------------------------------------------------------- -std::string link_id2string(odtone::mih::link_id linkP){ -//----------------------------------------------------------------------------- - odtone::mih::l2_3gpp_addr local_l2_3gpp_addr; - std::string s; - - switch (linkP.type.get()) { - case odtone::mih::link_type_gsm: - s="GSM"; - break; - case odtone::mih::link_type_gprs: - s="GPRS"; - break; - case odtone::mih::link_type_edge: - s="EDGE"; - break; - case odtone::mih::link_type_ethernet: - s="Ethernet"; - break; - case odtone::mih::link_type_wireless_other: - s="Other"; - break; - case odtone::mih::link_type_802_11: - s="IEEE 802.11"; - break; - case odtone::mih::link_type_lte: - s="LTE"; - // address copied from UMTS - local_l2_3gpp_addr = boost::get(linkP.addr); - s = s + std::string(local_l2_3gpp_addr.value); - break; - case odtone::mih::link_type_cdma2000: - s="CDMA-2000"; - break; - case odtone::mih::link_type_umts: - s="UMTS:"; - local_l2_3gpp_addr = boost::get(linkP.addr); - /*index = 0; - for(iter=0; iter < local_l2_3gpp_addr.value.length(); iter++) { - index += sprintf(&buf[index],"-%hhx-", local_l2_3gpp_addr.value[iter]); - }*/ - s = s + std::string(local_l2_3gpp_addr.value); - break; - case odtone::mih::link_type_cdma2000_hrpd: - s="CDMA-2000-HRPD"; - break; - case odtone::mih::link_type_802_16: - s="IEEE 802.16"; - break; - case odtone::mih::link_type_802_20: - s="IEEE 802.20"; - break; - case odtone::mih::link_type_802_22: - s="IEEE 802.22"; - break; - } - return s; -} -//----------------------------------------------------------------------------- -std::string link_tupple_id2string(odtone::mih::link_tuple_id link_tuppleP){ -//----------------------------------------------------------------------------- - std::string s; - odtone::mih::l2_3gpp_addr local_l2_3gpp_addr; - - switch (link_tuppleP.type.get()) { - case odtone::mih::link_type_gsm: - s="GSM"; - break; - case odtone::mih::link_type_gprs: - s="GPRS"; - break; - case odtone::mih::link_type_edge: - s="EDGE"; - break; - case odtone::mih::link_type_ethernet: - s="Ethernet"; - break; - case odtone::mih::link_type_wireless_other: - s="Other"; - break; - case odtone::mih::link_type_802_11: - s="IEEE 802.11"; - break; - case odtone::mih::link_type_lte: - s="LTE"; - local_l2_3gpp_addr = boost::get(link_tuppleP.addr); - s = s + std::string(local_l2_3gpp_addr.value); - break; - case odtone::mih::link_type_cdma2000: - s="CDMA-2000"; - break; - case odtone::mih::link_type_umts: - s="UMTS:"; - local_l2_3gpp_addr = boost::get(link_tuppleP.addr); - /*index = 0; - for(iter=0; iter < local_l2_3gpp_addr.value.length(); iter++) { - index += sprintf(&buf[index],"-%hhx-", local_l2_3gpp_addr.value[iter]); - }*/ - break; - case odtone::mih::link_type_cdma2000_hrpd: - s="CDMA-2000-HRPD"; - break; - case odtone::mih::link_type_802_16: - s="IEEE 802.16"; - break; - case odtone::mih::link_type_802_20: - s="IEEE 802.20"; - break; - case odtone::mih::link_type_802_22: - s="IEEE 802.22"; - break; - } - return s; -} -//----------------------------------------------------------------------------- -std::string link_actions_req2string(odtone::mih::link_action_req link_act_reqP) { -//----------------------------------------------------------------------------- - std::string s; - - s = link_id2string(link_act_reqP.id); - - if(link_act_reqP.action.type == odtone::mih::link_ac_type_none) s += ", AC_TYPE_NONE"; - if(link_act_reqP.action.type == odtone::mih::link_ac_type_disconnect) s += ", AC_TYPE_DISCONNECT"; - if(link_act_reqP.action.type == odtone::mih::link_ac_type_low_power) s += ", AC_TYPE_LOW_POWER"; - if(link_act_reqP.action.type == odtone::mih::link_ac_type_power_down) s += ", AC_TYPE_POWER_DOWN"; - if(link_act_reqP.action.type == odtone::mih::link_ac_type_power_up) s += ", AC_TYPE_POWER_UP"; - if(link_act_reqP.action.type == odtone::mih::link_ac_type_flow_attr) s += ", AC_TYPE_FLOW_ATTR"; - if(link_act_reqP.action.type == odtone::mih::link_ac_type_link_activate_resources) s += ", AC_TYPE_ACTIVATE_RESOURCES"; - if(link_act_reqP.action.type == odtone::mih::link_ac_type_link_deactivate_resources) s += ", AC_TYPE_DEACTIVATE_RESOURCES"; - - if(link_act_reqP.action.attr.get(odtone::mih::link_ac_attr_data_fwd_req)) s += ", AC_ATTR_DATA_FWD_REQ"; - if(link_act_reqP.action.attr.get(odtone::mih::link_ac_attr_scan)) s += ", AC_ATTR_SCAN"; - if(link_act_reqP.action.attr.get(odtone::mih::link_ac_attr_res_retain)) s += ", AC_ATTR_RES_RETAIN"; - - s += ", " + StringOf(link_act_reqP.ex_time) + " ms"; - return s; -} -//----------------------------------------------------------------------------- -std::string net_type_addr_list2string(boost::optional ntalP) { -//----------------------------------------------------------------------------- - std::string s; - odtone::mih::link_id link_id; - for (odtone::mih::net_type_addr_list::iterator i = ntalP->begin(); i != ntalP->end(); ++i) - { - link_id.addr = boost::get(i->addr); - link_id.type = boost::get(i->nettype.link); - s += link_id2string(link_id); - } - return s; -} - - -/** - * Parse supported commands. - * - * @param cfg Configuration options. - * @return A bitmap mapping the supported commands. - */ -boost::optional parse_supported_commands(const odtone::mih::config &cfg) -{ - using namespace boost; - - odtone::mih::mih_cmd_list commands; - bool has_cmd = false; - - std::map enum_map; - enum_map["mih_link_get_parameters"] = odtone::mih::mih_cmd_link_get_parameters; - enum_map["mih_link_configure_thresholds"] = odtone::mih::mih_cmd_link_configure_thresholds; - enum_map["mih_link_actions"] = odtone::mih::mih_cmd_link_actions; - enum_map["mih_net_ho_candidate_query"] = odtone::mih::mih_cmd_net_ho_candidate_query; - enum_map["mih_net_ho_commit"] = odtone::mih::mih_cmd_net_ho_commit; - enum_map["mih_n2n_ho_query_resources"] = odtone::mih::mih_cmd_n2n_ho_query_resources; - enum_map["mih_n2n_ho_commit"] = odtone::mih::mih_cmd_n2n_ho_commit; - enum_map["mih_n2n_ho_complete"] = odtone::mih::mih_cmd_n2n_ho_complete; - enum_map["mih_mn_ho_candidate_query"] = odtone::mih::mih_cmd_mn_ho_candidate_query; - enum_map["mih_mn_ho_commit"] = odtone::mih::mih_cmd_mn_ho_commit; - enum_map["mih_mn_ho_complete"] = odtone::mih::mih_cmd_mn_ho_complete; - - std::string tmp = cfg.get(kConf_MIH_Commands); - __trim(tmp, ' '); - - char_separator sep1(","); - tokenizer< char_separator > list_tokens(tmp, sep1); - - BOOST_FOREACH(std::string str, list_tokens) { - if(enum_map.find(str) != enum_map.end()) { - commands.set((odtone::mih::mih_cmd_list_enum) enum_map[str]); - has_cmd = true; - } - } - - boost::optional supp_cmd; - if(has_cmd) - supp_cmd = commands; - - return supp_cmd; -} - -/////////////////////////////////////////////////////////////////////////////// -/** - * This class provides an implementation of an IEEE 802.21 MIH-User. - */ -class mih_user : boost::noncopyable { -public: - /** - * Construct the MIH-User. - * - * @param cfg Configuration options. - * @param io The io_service object that the MIH-User will use to - * dispatch handlers for any asynchronous operations performed on the socket. - */ - mih_user(const odtone::mih::config& cfg, boost::asio::io_service& io); - - /** - * Destruct the MIH-User. - */ - ~mih_user(); - -protected: - /** - * User registration handler. - * - * @param cfg Configuration options. - * @param ec Error Code. - */ - void user_reg_handler(const odtone::mih::config& cfg, const boost::system::error_code& ec); - - /** - * Default MIH event handler. - * - * @param msg Received message. - * @param ec Error code. - */ - void event_handler(odtone::mih::message& msg, const boost::system::error_code& ec); - - /** - * Capability Discover handler. - * - * @param msg Received message. - * @param ec Error Code. - */ - void receive_MIH_Capability_Discover_confirm(odtone::mih::message& msg, const boost::system::error_code& ec); - - /** - * Event subscribe handler. - * - * @param msg Received message. - * @param ec Error Code. - */ - void receive_MIH_Event_Subscribe_response(odtone::mih::message& msg, const boost::system::error_code& ec); - - void send_MIH_Link_Configure_Thresholds_request(odtone::mih::message& msg, const boost::system::error_code& ec); - - void receive_MIH_Link_Configure_Thresholds_confirm(odtone::mih::message& msg, const boost::system::error_code& ec); - - void send_MIH_Link_Get_Parameters_request(odtone::mih::message& msg, const boost::system::error_code& ec); - - void receive_MIH_Link_Get_Parameters_confirm(odtone::mih::message& msg, const boost::system::error_code& ec); - - void receive_MIH_Link_Detected_indication(odtone::mih::message& msg, const boost::system::error_code& ec); - - void send_MIH_Link_Actions_request(odtone::mih::message& msg, const boost::system::error_code& ec); - - void receive_MIH_Link_Actions_confirm(odtone::mih::message& msg, const boost::system::error_code& ec); - - void receive_MIH_Link_Up_indication(odtone::mih::message& msg, const boost::system::error_code& ec); - - void receive_MIH_Link_Going_Down_indication(odtone::mih::message& msg, const boost::system::error_code& ec); - - void receive_MIH_Link_Down_indication(odtone::mih::message& msg, const boost::system::error_code& ec); - - void receive_MIH_Event_Unsubscribe_confirm(odtone::mih::message& msg, const boost::system::error_code& ec); - - void send_MIH_Event_Unsubscribe_request(odtone::mih::message& msg, const boost::system::error_code& ec); - - void receive_MIH_Link_Parameters_Report(odtone::mih::message& msg, const boost::system::error_code& ec); - - void print_l2_3gpp_addr(odtone::mih::link_type& link_type, odtone::mih::l2_3gpp_addr& l2_3gpp_addr); - - -private: - odtone::sap::user _mihf; /**< User SAP helper. */ - odtone::mih::id _mihfid; /**< MIHF destination ID. */ - odtone::mih::id _mihuserid; /**< MIH_USER ID. */ - odtone::uint link_get_parameters_request, link_action_request, link_threshold_request; - odtone::mih::net_type_addr rcv_net_type_addr; - odtone::mih::link_id rcv_link_id; -}; - -/** - * Construct the MIH-User. - * - * @param cfg Configuration options. - * @param io The io_service object that the MIH-User will use to - * dispatch handlers for any asynchronous operations performed on the socket. - */ -//----------------------------------------------------------------------------- -mih_user::mih_user(const odtone::mih::config& cfg, boost::asio::io_service& io) - : _mihf(cfg, io, boost::bind(&mih_user::event_handler, this, _1, _2)) -//----------------------------------------------------------------------------- -{ - odtone::mih::message m; - boost::optional supp_cmd = parse_supported_commands(cfg); - - link_get_parameters_request = 0; - link_action_request = 0; - link_threshold_request = 0; - - m << odtone::mih::indication(odtone::mih::indication::user_register) - & odtone::mih::tlv_command_list(supp_cmd); - - log_(0, "User Register Indication - SENT "); - log_(0, " - User Name: ", m.source().to_string()); - log_(0, " "); - - odtone::mih::octet_string user_id = cfg.get(odtone::sap::kConf_MIH_SAP_id); - _mihuserid.assign(user_id.c_str()); - - odtone::mih::octet_string dest_id = cfg.get(odtone::sap::kConf_MIH_SAP_dest); - _mihfid.assign("mihf1"); - - log_(0, "[MSC_NEW][",getTimeStamp4Log(),"][MIH-USER=",_mihuserid.to_string(),"]\n"); - m.source(_mihuserid); - m.destination(_mihfid); - log_(0, "[MSC_MSG]["+getTimeStamp4Log()+"]["+ m.source().to_string() +"][--- MIH_User_Register.indication --->]["+m.destination().to_string()+"]\n"); - _mihf.async_send(m, boost::bind(&mih_user::user_reg_handler, this, boost::cref(cfg), _2)); -} - - -/** - * Destruct the MIH-User. - */ -//----------------------------------------------------------------------------- -mih_user::~mih_user() -//----------------------------------------------------------------------------- -{ -} - -/** - * Print 3GPP Address. - * - * @param link_type Link Type. - * @param l2_3gpp_addr 3GPP Address. - */ -//----------------------------------------------------------------------------- -void mih_user::print_l2_3gpp_addr(odtone::mih::link_type& link_type, odtone::mih::l2_3gpp_addr& l2_3gpp_addr) -//----------------------------------------------------------------------------- -{ - odtone::uint iter; - if(link_type == odtone::mih::link_type_umts){ - log_(0, "\t Link Type: UMTS"); - } - if(link_type == odtone::mih::link_type_lte){ - log_(0, "\t Link Type: LTE"); - } - if((link_type == odtone::mih::link_type_umts)||(link_type == odtone::mih::link_type_lte)){ - //log_(0, "\t 3GPP Address: "); - std::printf("[mih_usr]: \t 3GPP Address: "); - for(iter=0; iter(odtone::sap::kConf_MIH_SAP_dest); - _mihfid.assign(destination.c_str()); - - // - // Let's fire a capability discover request to get things moving - // - msg << odtone::mih::request(odtone::mih::request::capability_discover, _mihfid); - - log_(0, "[MSC_MSG]["+getTimeStamp4Log()+"]["+ _mihuserid.to_string() +"][--- MIH_Capability_Discover.request --->]["+msg.destination().to_string()+"]\n"); - _mihf.async_send(msg, boost::bind(&mih_user::receive_MIH_Capability_Discover_confirm, this, _1, _2)); - - log_(0, "MIH_Capability_Discover.request - SENT (towards its local MIHF)"); - log_(0, ""); -} - -/** - * Default MIH event handler. - * - * @param msg Received message. - * @param ec Error code. - */ -//----------------------------------------------------------------------------- -void mih_user::event_handler(odtone::mih::message& msg, const boost::system::error_code& ec) -//----------------------------------------------------------------------------- -{ - if (ec) { - log_(0, __FUNCTION__, " error: ", ec.message()); - return; - } - - switch (msg.mid()) { - case odtone::mih::indication::link_up: - mih_user::receive_MIH_Link_Up_indication(msg, ec); - break; - - case odtone::mih::indication::link_down: - mih_user::receive_MIH_Link_Down_indication(msg, ec); - //sleep(2); - mih_user::send_MIH_Link_Get_Parameters_request(msg, ec); - break; - - case odtone::mih::indication::link_detected: - mih_user::receive_MIH_Link_Detected_indication(msg, ec); - // monitor signal strength - do not change (up/down) signal strength report now - //system ("sendip -d 0x00 -p ipv4 -is 127.0.0.1 -p udp -ud 22222 -us 65535 127.0.0.1"); - - //sleep(2); - link_action_request = 0; - mih_user::send_MIH_Link_Actions_request(msg, ec); - break; - - case odtone::mih::indication::link_going_down: - mih_user::receive_MIH_Link_Going_Down_indication(msg,ec); - //sleep(10); - link_get_parameters_request = 2; - mih_user::send_MIH_Link_Get_Parameters_request(msg, ec); - break; - - case odtone::mih::indication::link_handover_imminent: - log_(0, "MIH-User has received a local event \"link_handover_imminent\""); - break; - case odtone::mih::indication::link_handover_complete: - log_(0, "MIH-User has received a local event \"link_handover_complete\""); - break; - - case odtone::mih::confirm::link_configure_thresholds: - mih_user::receive_MIH_Link_Configure_Thresholds_confirm(msg, ec); - //sleep(2); - if (link_get_parameters_request == 0) { - link_get_parameters_request = 1; - mih_user::send_MIH_Link_Get_Parameters_request(msg, ec); - } - break; - - case odtone::mih::confirm::link_get_parameters: - switch(link_get_parameters_request){ - case 1: mih_user::receive_MIH_Link_Get_Parameters_confirm(msg, ec); - // monitor signal strength - increase signal strength report now - //system ("sendip -d 0x01 -p ipv4 -is 127.0.0.1 -p udp -ud 22222 -us 65535 127.0.0.1"); - break; - case 2: mih_user::receive_MIH_Link_Get_Parameters_confirm(msg, ec); - link_action_request = 1; - link_get_parameters_request = 3; - mih_user::send_MIH_Link_Actions_request(msg, ec); - break; - case 3: mih_user::receive_MIH_Link_Get_Parameters_confirm(msg, ec); - mih_user::send_MIH_Event_Unsubscribe_request(msg, ec); - break; - } - break; - - mih_user::receive_MIH_Link_Get_Parameters_confirm(msg, ec); - //sleep(1); - break; - - case odtone::mih::confirm::link_actions: - mih_user::receive_MIH_Link_Actions_confirm(msg, ec); - if (link_action_request == 0) { - link_action_request = 1; - mih_user::send_MIH_Link_Actions_request(msg, ec); - } else if (link_action_request == 1) { - // monitor signal strength - increase signal strength report now - //system ("sendip -d 0x01 -p ipv4 -is 127.0.0.1 -p udp -ud 22222 -us 65535 127.0.0.1"); - } - - break; - - case odtone::mih::confirm::event_unsubscribe: - mih_user::receive_MIH_Event_Unsubscribe_confirm(msg, ec); - break; - - case odtone::mih::indication::link_parameters_report: - mih_user::receive_MIH_Link_Parameters_Report(msg, ec); - if (link_threshold_request == 1) { - // monitor signal strength - do not modify signal strength report now - //system ("sendip -d 0x0x00 -p ipv4 -is 127.0.0.1 -p udp -ud 22222 -us 65535 127.0.0.1"); - link_action_request = 2; - mih_user::send_MIH_Link_Actions_request(msg, ec); - - } else if (link_action_request == 1) { - // monitor signal strength - decrease signal strength report now - //system ("sendip -d 0xFF -p ipv4 -is 127.0.0.1 -p udp -ud 22222 -us 65535 127.0.0.1"); - // select decreasing down to low threshold - link_threshold_request = 1; - mih_user::send_MIH_Link_Configure_Thresholds_request(msg, ec); - } - break; - } -} - -//----------------------------------------------------------------------------- -void mih_user::receive_MIH_Link_Parameters_Report(odtone::mih::message& msg, const boost::system::error_code& ec) -//----------------------------------------------------------------------------- -{ - odtone::mih::link_tuple_id link; - odtone::mih::link_param_rpt_list lprl; - odtone::mih::l2_3gpp_addr local_l2_3gpp_addr; - - msg >> odtone::mih::indication() - & odtone::mih::tlv_link_identifier(link) - & odtone::mih::tlv_link_param_rpt_list(lprl); - - log_(0, ""); - log_(0, "MIH_Link_Parameters_Report.indication - RECEIVED - Begin"); - log_(0, "[MSC_MSG]["+getTimeStamp4Log()+"]["+ msg.source().to_string() +"][--- MIH_Link_Parameters_Report.indication --->]["+msg.destination().to_string()+"]\n"); - local_l2_3gpp_addr = boost::get(link.addr); - print_l2_3gpp_addr(link.type, local_l2_3gpp_addr); - log_(0, "MIH_Link_Parameters_Report.indication - End"); -} - - -//----------------------------------------------------------------------------- -void mih_user::receive_MIH_Event_Unsubscribe_confirm(odtone::mih::message& msg, const boost::system::error_code& ec) -//----------------------------------------------------------------------------- -{ - odtone::mih::status st; - odtone::mih::link_tuple_id link; - boost::optional evt; - - msg >> odtone::mih::confirm() - & odtone::mih::tlv_status(st) - & odtone::mih::tlv_link_identifier(link) - & odtone::mih::tlv_event_list(evt); - - log_(0, ""); - log_(0, "receive_MIH_Event_Unsubscribe_confirm - Begin"); - - log_(0, "[MSC_MSG]["+getTimeStamp4Log()+"]["+ msg.source().to_string() +"][--- MIH_Event_Unsubscribe.confirm\\n"+status2string(st.get()).c_str()+" --->]["+msg.destination().to_string()+"]\n"); - log_(0, "\t- STATUS: ", status2string(st.get()).c_str(), " ", st.get()); - log_(0, "\t- MIH_EVT_LIST - Event List: ", evt2string(evt.get()).c_str()); - log_(0, "receive_MIH_Event_Unsubscribe_confirm - End"); -} - -//----------------------------------------------------------------------------- -void mih_user::send_MIH_Event_Unsubscribe_request(odtone::mih::message& msg, const boost::system::error_code& ec) -//----------------------------------------------------------------------------- -{ - odtone::mih::message m; - - odtone::mih::link_tuple_id link; - odtone::mih::mih_evt_list events; - odtone::mih::l2_3gpp_addr l2_3gpp_addr; - - link.type = rcv_link_id.type; - //address UMTS - link.addr = rcv_link_id.addr; - - events.set(odtone::mih::mih_evt_link_detected); - events.set(odtone::mih::mih_evt_link_up); - events.set(odtone::mih::mih_evt_link_down); - events.set(odtone::mih::mih_evt_link_parameters_report); - events.set(odtone::mih::mih_evt_link_going_down); - - log_(0, ""); - log_(0, "send_MIH_Event_Unsubscribe_request - Begin"); - m << odtone::mih::request(odtone::mih::request::event_unsubscribe) - & odtone::mih::tlv_link_identifier(link) - & odtone::mih::tlv_event_list(events); - - m.destination(msg.source()); - - log_(0, "[MSC_MSG]["+getTimeStamp4Log()+"]["+ m.source().to_string() +"][--- MIH_Event_Unsubscribe.request --->]["+m.destination().to_string()+"]\n"); - _mihf.async_send(m, boost::bind(&mih_user::event_handler, this, _1, _2)); - - log_(0, " - MIH_EVT_LIST - Event List: ", evt2string(events).c_str()); - log_(0, "send_MIH_Event_Unsubscribe_request - End"); -} - -//----------------------------------------------------------------------------- -void mih_user::receive_MIH_Link_Down_indication(odtone::mih::message& msg, const boost::system::error_code& ec) -//----------------------------------------------------------------------------- -{ - odtone::mih::link_tuple_id link; - odtone::mih::link_dn_reason ldr; - odtone::mih::l2_3gpp_addr local_l2_3gpp_addr; - - log_(0, ""); - log_(0, "receive_MIH_Link_Down_indication - Begin"); - - msg >> odtone::mih::indication() - & odtone::mih::tlv_link_identifier(link) - & odtone::mih::tlv_link_dn_reason(ldr); - - - local_l2_3gpp_addr = boost::get(link.addr); - - log_(0, "[MSC_MSG]["+getTimeStamp4Log()+"]["+ msg.source().to_string() +"][--- MIH_Link_Down.indication\\n"+link_down_reason2string(ldr).c_str()+" --->]["+msg.destination().to_string()+"]\n"); - - print_l2_3gpp_addr(link.type, local_l2_3gpp_addr); - - log_(0, " Link down reason: ", link_down_reason2string(ldr).c_str()); - log_(0, "receive_MIH_Link_Down_indication - End"); -} - -//----------------------------------------------------------------------------- -void mih_user::receive_MIH_Link_Going_Down_indication(odtone::mih::message& msg, const boost::system::error_code& ec) -//----------------------------------------------------------------------------- -{ - odtone::mih::link_tuple_id link; - odtone::mih::link_gd_reason lgd; - odtone::mih::link_ac_ex_time ex_time; - - odtone::mih::l2_3gpp_addr local_l2_3gpp_addr; - - log_(0, ""); - log_(0, "receive_MIH_Link_Going_Down_indication - Begin"); - - msg >> odtone::mih::indication() - & odtone::mih::tlv_link_identifier(link) - & odtone::mih::tlv_time_interval(ex_time) - & odtone::mih::tlv_link_gd_reason(lgd); - - - local_l2_3gpp_addr = boost::get(link.addr); - local_l2_3gpp_addr = boost::get(link.addr); - - log_(0, "[MSC_MSG]["+getTimeStamp4Log()+"]["+ msg.source().to_string() +"][--- MIH_Link_Going_Down.indication\\n"+link_going_down_reason2string(lgd).c_str()+" --->]["+msg.destination().to_string()+"]\n"); - - print_l2_3gpp_addr(link.type, local_l2_3gpp_addr); - log_(0, "\tTime Interval :", (ex_time/256)); - - log_(0, "\tLink going down reason: ", link_going_down_reason2string(lgd).c_str()); - - log_(0, "receive_MIH_Link_Going_Down_indication - End"); -} - -//----------------------------------------------------------------------------- -void mih_user::receive_MIH_Link_Up_indication(odtone::mih::message& msg, const boost::system::error_code& ec) -//----------------------------------------------------------------------------- -{ - odtone::mih::link_tuple_id link; - odtone::mih::l2_3gpp_addr local_l2_3gpp_addr; - - msg >> odtone::mih::indication() - & odtone::mih::tlv_link_identifier(link); - - log_(0, ""); - log_(0, "receive_MIH_Link_Up_indication - Begin"); - log_(0, "[MSC_MSG]["+getTimeStamp4Log()+"]["+ msg.source().to_string() +"][--- MIH_Link_Up.indication --->]["+msg.destination().to_string()+"]\n"); - - local_l2_3gpp_addr = boost::get(link.addr); - print_l2_3gpp_addr(link.type, local_l2_3gpp_addr); - log_(0, "receive_MIH_Link_Up_indication - End"); -} - -//----------------------------------------------------------------------------- -void mih_user::receive_MIH_Link_Actions_confirm(odtone::mih::message& msg, const boost::system::error_code& ec) -//----------------------------------------------------------------------------- -{ - - log_(0, ""); - log_(0, "receive_MIH_Link_Actions_confirm - Begin"); - - if (ec) { - log_(0, __FUNCTION__, " error: ", ec.message()); - return; - } - - odtone::mih::status st; - boost::optional larl; - /*odtone::mih::link_action_rsp_list larl; - odtone::mih::link_action_rsp lar; - - odtone::mih::link_scan_rsp_list lsrl; - odtone::mih::link_scan_rsp lsr; - - odtone::uint i, l, n, p; - odtone::mih::link_id link; - odtone::mih::l2_3gpp_addr local_l2_3gpp_addr; - odtone::mih::l2_3gpp_3g_cell_id local_l2_3gpp_3g_cell_id; - odtone::mih::link_scan_rsp_list local_link_scan_rsp_list; - odtone::sint8 local_sig_strength;*/ - - msg >> odtone::mih::confirm() - & odtone::mih::tlv_status(st) - & odtone::mih::tlv_link_action_rsp_list(larl); - - log_(0, "[MSC_MSG]["+getTimeStamp4Log()+"]["+ msg.source().to_string() +"][--- MIH_Link_Actions.confirm\\n"+status2string(st.get())+" --->]["+msg.destination().to_string()+"]\n"); - log_(0, "\t- STATUS: ", status2string(st.get()), " " , st.get()); - - /*log_(0, " - LINK ACTION RSP LIST - Length:", larl.size()); - - for(i=0; i< larl.size(); i++) - { - local_l2_3gpp_addr = boost::get(larl[i].id.addr); - print_l2_3gpp_addr(larl[i].id.type, local_l2_3gpp_addr); - - if(larl[i].result == odtone::mih::link_ac_success){log_(0, " Link Action Success");} - if(larl[i].result == odtone::mih::link_ac_failure){log_(0, " Link Action Failure");} - if(larl[i].result == odtone::mih::link_ac_refused){log_(0, " Link Action Refused");} - if(larl[i].result == odtone::mih::link_ac_incapable){log_(0, " Link Action Incapable");} - - local_link_scan_rsp_list = boost::get(larl[i].scan_list); - - log_(0, " Link Scan Rsp List - Element: ", local_link_scan_rsp_list.size()); - for(l=0; l(local_link_scan_rsp_list[l].id); - - log_(0, " 3GPP Cell ID Adress: ", local_link_scan_rsp_list.size()); - for(p=0; p<3; p++) { - std::printf("[mih_usr]: "); - std::printf(" Plmn %d: %d", p, local_l2_3gpp_3g_cell_id.plmn_id[p]); - } - log_(0, " Cell-ID: ", (local_l2_3gpp_3g_cell_id._cell_id/); - //net_id network identifier - log_(0, " Network Identifier: "); - std::printf("[mih_usr]: "); - for(n=0; n(local_link_scan_rsp_list[l].signal); - std::printf("[mih_usr]: "); - std::printf("Signal Strength: %d \n", local_sig_strength); - //log_(0, " Signal Strength: ", local_sig_strength); - } - log_(0, " "); - } -*/ - log_(0, "MIH_Link_Actions.confirm - End"); -} - -//----------------------------------------------------------------------------- -void mih_user::send_MIH_Link_Actions_request(odtone::mih::message& msg, const boost::system::error_code& ec) -//----------------------------------------------------------------------------- -{ - odtone::mih::message m; - - odtone::mih::link_action_list lal; - odtone::mih::link_action_req link_act_req; - odtone::mih::l2_3gpp_addr local_l2_3gpp_addr; - - log_(0, ""); - log_(0, "send_MIH_Link_Actions_request - Begin"); - //address UMTS - link_act_req.id.type = rcv_link_id.type; - link_act_req.id.addr = rcv_link_id.addr; - - if(mih_user::link_action_request == 0){ - link_act_req.action.type = odtone::mih::link_ac_type_power_up; - link_act_req.action.attr.set(odtone::mih::link_ac_attr_scan); - //link_act_req.action.param...; - } else if(mih_user::link_action_request == 1) { - link_act_req.action.type = odtone::mih::link_ac_type_power_up; - } else if(mih_user::link_action_request == 2) { - link_act_req.action.type = odtone::mih::link_ac_type_power_down; - } - - link_act_req.ex_time = 0; - - lal.push_back(link_act_req); - - - m << odtone::mih::request(odtone::mih::request::link_actions) - & odtone::mih::tlv_link_action_list(lal); - - - log_(0, "\t- LINK_ID: "); - local_l2_3gpp_addr = boost::get(link_act_req.id.addr); - print_l2_3gpp_addr(link_act_req.id.type, local_l2_3gpp_addr); - - log_(0, "\t- Link Actions: " + link_actions_req2string(link_act_req)); - - m.destination(msg.source()); - - log_(0, "[MSC_MSG]["+getTimeStamp4Log()+"]["+ msg.destination().to_string() +"][--- MIH_Link_Actions.request\\n"+link_actions_req2string(link_act_req)+" --->]["+msg.source().to_string()+"]\n"); - _mihf.async_send(m, boost::bind(&mih_user::event_handler, this, _1, _2)); - - log_(0, "send_MIH_Link_Actions_request - End"); - log_(0, ""); -} - -//----------------------------------------------------------------------------- -void mih_user::receive_MIH_Link_Detected_indication(odtone::mih::message& msg, const boost::system::error_code& ec) -//----------------------------------------------------------------------------- -{ - odtone::mih::link_det_info_list ldil; - - log_(0, ""); - log_(0, "receive_MIH_Link_Detected_indication - Begin"); - - msg >> odtone::mih::indication() - & odtone::mih::tlv_link_det_info_list(ldil); - - log_(0, "[MSC_MSG]["+getTimeStamp4Log()+"]["+ msg.source().to_string() +"][--- MIH_Link_Detected.indication --->]["+msg.destination().to_string()+"]\n"); - - log_(0, "receive_MIH_Link_Detected_indication - End"); -} - -//----------------------------------------------------------------------------- -void mih_user::send_MIH_Link_Get_Parameters_request(odtone::mih::message& msg, const boost::system::error_code& ec) -//----------------------------------------------------------------------------- -{ - odtone::mih::message m; - - odtone::mih::dev_states_req dsr; - odtone::uint iter; - - odtone::mih::link_id li; - odtone::mih::link_id_list lil; - - odtone::mih::link_status_req lsr; - - log_(0,""); - log_(0, "send_MIH_Link_Get_Parameters_request - Begin"); - - //set values - dsr.set(odtone::mih::dev_state_device_info); //optional - - li.type = rcv_link_id.type; - li.addr = rcv_link_id.addr; - lil.push_back(li); - odtone::mih::link_param_gen lp1; - //odtone::mih::link_param_gen lp2, lp3, lp4, lp5; - - lp1 = odtone::mih::link_param_gen_data_rate; - lsr._param_type_list.push_back(lp1); - - /*lp2 = odtone::mih::link_param_gen_sinr; - lsr._param_type_list.push_back(lp2); - - lp3 = odtone::mih::link_param_gen_packet_error_rate; - lsr._param_type_list.push_back(lp3); - - lp4 = odtone::mih::link_param_gen_throughput; - lsr._param_type_list.push_back(lp4); - - lp5 = odtone::mih::link_param_gen_signal_strength; - lsr._param_type_list.push_back(lp5);*/ - - lsr._states_req.set(odtone::mih::link_states_req_op_mode); - lsr._states_req.set(odtone::mih::link_states_req_channel_id); - lsr._desc_req.set(odtone::mih::link_desc_req_classes_of_service_supported); - - - m << odtone::mih::request(odtone::mih::request::link_get_parameters) - & odtone::mih::tlv_dev_states_req(dsr) - & odtone::mih::tlv_link_id_list(lil) - & odtone::mih::tlv_get_status_req_set(lsr); - - m.destination(msg.source()); - - log_(0, "[MSC_MSG]["+getTimeStamp4Log()+"]["+ msg.destination().to_string() +"][--- MIH_Link_Get_Parameters.request --->]["+msg.source().to_string()+"]\n"); - _mihf.async_send(m, boost::bind(&mih_user::event_handler, this, _1, _2)); - - //log_(0, " - DEVICE STATES REQUEST"); - - odtone::mih::l2_3gpp_addr local_l2_3gpp_addr; - - log_(0, "\t- LINK ID LIST - Length: ", lil.size()); - - for(iter=0; iter(lil[iter].addr); - print_l2_3gpp_addr(lil[iter].type, local_l2_3gpp_addr); - } - - log_(0, "\t- GET STATUS REQUEST "); - if(lsr._states_req.get(odtone::mih::link_states_req_op_mode) == 1) {log_(0, "\t Link power mode requested");} - if(lsr._states_req.get(odtone::mih::link_states_req_channel_id) == 1) {log_(0, "\t Channel identifier requested (as defined in the specific link technology)");} - - if(lp1 == odtone::mih::link_param_gen_data_rate) {log_(0, "\t DATA RATE link parameter requested");} - if(lp1 == odtone::mih::link_param_gen_signal_strength) {log_(0, "\t SIGNAL STRENGTH link parameter is required");} - if(lp1 == odtone::mih::link_param_gen_sinr) {log_(0, "\t SINR link parameter is required");} - if(lp1 == odtone::mih::link_param_gen_throughput) {log_(0, "\t THROUGHPUT link parameter is required");} - - log_(0, "\t- LINK DESCRIPTOR REQUESTED "); - - if(lsr._desc_req.get(odtone::mih::link_desc_req_classes_of_service_supported) == 1) {log_(0, "\t Number of CoS Supported ");} - if(lsr._desc_req.get(odtone::mih::link_desc_req_queues_supported) == 1) {log_(0, "\t Number of Queues Supported ");} - log_(0, "send_MIH_Link_Get_Parameters_request - End"); - log_(0, ""); - -} - -//----------------------------------------------------------------------------- -void mih_user::receive_MIH_Link_Get_Parameters_confirm(odtone::mih::message& msg, const boost::system::error_code& ec) -//----------------------------------------------------------------------------- -{ - - odtone::mih::status st; - odtone::mih::status_rsp_list srl; - - odtone::uint iter; - - log_(0, ""); - log_(0, "receive_MIH_Link_Get_Parameters_confirm - Begin"); - - msg >> odtone::mih::confirm() - & odtone::mih::tlv_status(st) - & odtone::mih::tlv_get_status_rsp_list(srl); - - log_(0, "[MSC_MSG]["+getTimeStamp4Log()+"]["+ _mihfid.to_string() +"][--- MIH_Link_Get_Parameters.confirm\\n"+status2string(st.get()).c_str()+" --->]["+_mihuserid.to_string()+"]\n"); - log_(0, "\t- STATUS: ", status2string(st.get()), " ", st.get()); - - - odtone::mih::l2_3gpp_addr local_l2_3gpp_addr; - - log_(0, "\t- STATUS RSP LIST - Length: ", srl.size()); - - for(iter=0; iter(srl[iter].id.addr); - print_l2_3gpp_addr(srl[iter].id.type, local_l2_3gpp_addr); - log_(0, "\t LINK STATUS RSP List - Element: ", iter+1); - - /*odtone::uint iter1; - - log_(0, " States Rsp List - Length: ", srl[iter].rsp.states_rsp_list.size()); - //States Rsp List (vector) - for(iter1=0; iter1 - } - - log_(0, " Desc_rsp_list - Length: ", srl[iter].rsp.desc_rsp_list.size()); - //Desc_rsp_list - for(iter1=0; iter1 - //uint8 num_cos - uint8 num_queue - }*/ - } - log_(0, "receive_MIH_Link_Get_Parameters_confirm - End"); - -} - - -/** - * Capability Discover handler. - * - * @param msg Received message. - * @param ec Error Code. - */ -//----------------------------------------------------------------------------- -void mih_user::receive_MIH_Capability_Discover_confirm(odtone::mih::message& msg, const boost::system::error_code& ec) -//----------------------------------------------------------------------------- -{ - log_(0, ""); - log_(0, "receive_MIH_Capability_Discover_confirm - Begin"); - if (ec) { - log_(0, __FUNCTION__, " error: ", ec.message()); - return; - } - - odtone::mih::status st; - boost::optional ntal; - boost::optional evt; - - odtone::mih::l2_3gpp_addr local_l2_3gpp_addr; - odtone::mih::link_tuple_id li; - - msg >> odtone::mih::confirm() - & odtone::mih::tlv_status(st) - & odtone::mih::tlv_net_type_addr_list(ntal) - & odtone::mih::tlv_event_list(evt); - // MIH_TRANS_LIST could be added - - log_(0, "[MSC_MSG]["+getTimeStamp4Log()+"]["+ _mihfid.to_string() ,"][--- MIH_Capability_Discover.confirm\\nstatus=", status2string(st.get()).c_str(), - "\\nEvent list=",evt2string(evt.get()).c_str(), - "\\nNet type addr list=" , net_type_addr_list2string(ntal).c_str(), - " --->][",_mihuserid.to_string(),"]\n"); - log_(0, "\t- STATUS: ", status2string(st.get()), " " ,st.get()); - - if (evt) { - log_(0, "\t- MIH_EVT_LIST - Event List: ", evt2string(evt.get()).c_str()); - } - - //log_(0, "MIH-User has received a Capability_Discover.response with status ", - // st.get(), " and the following capabilities:"); - - log_(0, "\t- LIST(NET_TYPE_ADDR) - Network Types and Link Address:"); - - if (ntal) { - for (odtone::mih::net_type_addr_list::iterator i = ntal->begin(); i != ntal->end(); ++i) - { - local_l2_3gpp_addr = boost::get(i->addr); - li.type = boost::get(i->nettype.link); - - rcv_net_type_addr.addr = boost::get(i->addr); - rcv_net_type_addr.nettype.link = boost::get(i->nettype.link); - - rcv_link_id.addr = boost::get(i->addr); - rcv_link_id.type = boost::get(i->nettype.link); - - print_l2_3gpp_addr(li.type, local_l2_3gpp_addr); - // should be the same print - //print_l2_3gpp_addr(rcv_link_id.type, rcv_link_id.addr); - - //log_(0, *i); - } - - } else { - log_(0, "none"); - } - - log_(0, ""); - // - // event subscription - // - // For every interface the MIHF sent in the - // Capability_Discover.response send an Event_Subscribe.request - // for all availabe events - // - if (ntal && evt) { - for (odtone::mih::net_type_addr_list::iterator i = ntal->begin(); i != ntal->end(); ++i) { - odtone::mih::message req; - odtone::mih::link_tuple_id li; - - if (i->nettype.link.which() == 1) - { - li.addr = i->addr; - li.type = boost::get(i->nettype.link); - - req << odtone::mih::request(odtone::mih::request::event_subscribe, _mihfid) - & odtone::mih::tlv_link_identifier(li) - & odtone::mih::tlv_event_list(evt); - - req.destination(msg.source()); - - log_(0, "[MSC_MSG]["+getTimeStamp4Log()+"]["+ _mihuserid.to_string() +"][--- MIH_Event_Subscribe.request"+ - "\\nLink="+link_tupple_id2string(li).c_str()+ - "\\nEvent list="+evt2string(evt.get()).c_str()+ - " --->]["+_mihfid.to_string()+"]\n"); - _mihf.async_send(req, boost::bind(&mih_user::receive_MIH_Event_Subscribe_response, this, _1, _2)); - - log_(0, "MIH-User has sent Event_Subscribe.request to ", req.destination().to_string()); - - if (evt) { - log_(0, "\t- MIH_EVT_LIST - Event List: ", evt2string(evt.get()).c_str()); - } - } - } - } - log_(0, "receive_MIH_Capability_Discover_confirm - End"); -} - -/** - * Event subscribe handler. - * - * @param msg Received message. - * @param ec Error Code. - */ -//----------------------------------------------------------------------------- -void mih_user::receive_MIH_Event_Subscribe_response(odtone::mih::message& msg, const boost::system::error_code& ec) -//----------------------------------------------------------------------------- -{ - //log_(0, __FUNCTION__, "(", msg.tid(), ")"); - log_(0, ""); - log_(0, "receive_MIH_Event_Subscribe_response - Begin"); - - if (ec) { - log_(0, __FUNCTION__, " error: ", ec.message()); - return; - } - - odtone::mih::status st; - boost::optional evt; - - msg >> odtone::mih::response() - & odtone::mih::tlv_status(st) - & odtone::mih::tlv_event_list(evt); - - if (evt) { - log_(0, "[MSC_MSG]["+getTimeStamp4Log()+"]["+ _mihfid.to_string() +"][--- MIH_Event_Subscribe.response\\nstatus="+ - status2string(st.get()).c_str()+ - "\\nEvent list="+evt2string(evt.get()).c_str()+ - " --->]["+_mihuserid.to_string()+"]\n"); - } else { - log_(0, "[MSC_MSG]["+getTimeStamp4Log()+"]["+ _mihfid.to_string() +"][--- MIH_Event_Subscribe.response\\nstatus="+ - status2string(st.get()).c_str()+ - " --->]["+_mihuserid.to_string()+"]\n"); - } - log_(0, " - STATUS: ", status2string(st.get()), " " ,st.get()); - - mih_user::send_MIH_Link_Configure_Thresholds_request(msg, ec); - log_(0, "receive_MIH_Event_Subscribe_response - End"); -} - -//----------------------------------------------------------------------------- -void mih_user::send_MIH_Link_Configure_Thresholds_request(odtone::mih::message& msg, const boost::system::error_code& ec) -//----------------------------------------------------------------------------- -{ - odtone::mih::message m; - - odtone::mih::threshold th; - std::vector thl; - - odtone::mih::link_tuple_id lti; - odtone::mih::l2_3gpp_addr local_l2_3gpp_addr; - - log_(0,""); - log_(0, "send_MIH_Link_Configure_Thresholds_request - Begin"); - - //link_tuple_id - lti.type = rcv_link_id.type; - lti.addr = rcv_link_id.addr; - - local_l2_3gpp_addr = boost::get(lti.addr); - - //List of the link threshold parameters - odtone::mih::link_cfg_param_list lcpl; - odtone::mih::link_cfg_param lcp; - odtone::mih::link_param_gen lp; - - //link_param_gen_data_rate = 0, /**< Data rate. */ - //link_param_gen_signal_strength = 1, /**< Signal strength. */ - //link_param_gen_sinr = 2, /**< SINR. */ - //link_param_gen_throughput = 3, /**< Throughput. */ - //link_param_gen_packet_error_rate = 4, /**< Packet error rate. */ - lp = odtone::mih::link_param_gen_signal_strength; - - lcp.type = lp; - //th_action_normal = 0, /**< Set normal threshold. */ - //th_action_one_shot = 1, /**< Set one-shot threshold. */ - //th_action_cancel = 2 /**< Cancel threshold. */ - lcp.action = odtone::mih::th_action_one_shot; - - //above_threshold = 0, /**< Above threshold. */ - //below_threshold = 1, /**< Below threshold. */ - if (link_threshold_request == 0) { - th.threshold_val = THRESHOLD_HIGH_VAL; - th.threshold_x_dir = odtone::mih::threshold::above_threshold; - } else if (link_threshold_request == 0) { - th.threshold_val = THRESHOLD_LOW_VAL; - th.threshold_x_dir = odtone::mih::threshold::below_threshold; - } else { - th.threshold_val = THRESHOLD_LOW_VAL; - th.threshold_x_dir = odtone::mih::threshold::below_threshold; - } - - thl.push_back(th); - lcp.threshold_list = thl; - lcpl.push_back(lcp); - - m << odtone::mih::request(odtone::mih::request::link_configure_thresholds) - & odtone::mih::tlv_link_identifier(lti) - & odtone::mih::tlv_link_cfg_param_list(lcpl); - - m.destination(msg.source()); - - log_(0, "[MSC_MSG]["+getTimeStamp4Log()+"]["+ _mihuserid.to_string() +"][--- MIH_Link_Configure_Thresholds.request\\nlink="+ - link_tupple_id2string(lti).c_str() + - " --->]["+_mihfid.to_string()+"]\n"); - _mihf.async_send(m, boost::bind(&mih_user::event_handler, this, _1, _2)); - - - log_(0, "\t- LINK TUPLE ID - Network Types and Link Address:"); - print_l2_3gpp_addr(lti.type, local_l2_3gpp_addr); - - log_(0, "\t- LINK CFG PARAM LIST - Length: ", lcpl.size()); - - if(lp == odtone::mih::link_param_gen_data_rate) {log_(0, "\t Generic link parameter DATA RATE ");} - if(lp == odtone::mih::link_param_gen_signal_strength) {log_(0, "\t Generic link parameter SIGNAL STRENGTH");} - if(lp == odtone::mih::link_param_gen_sinr) {log_(0, "\t Generic link parameter SINR");} - if(lp == odtone::mih::link_param_gen_throughput) {log_(0, "\t Generic link parameter THROUGHPUT");} - - if(lcp.action == odtone::mih::th_action_normal) {log_(0, "\t Normal Threshold");} - if(lcp.action == odtone::mih::th_action_one_shot) {log_(0, "\t One Shot Threshold");} - if(lcp.action == odtone::mih::th_action_cancel) {log_(0, "\t Threshold to be canceled");} - - log_(0, "\t Threshold value: ", th.threshold_val); - - if(th.threshold_x_dir == odtone::mih::threshold::below_threshold) {log_(0, "\t Threshold direction BELOW");} - if(th.threshold_x_dir == odtone::mih::threshold::above_threshold) {log_(0, "\t Threshold direction ABOVE");} - - log_(0, "send_MIH_Link_Configure_Thresholds_request - End"); -} - -//----------------------------------------------------------------------------- -void mih_user::receive_MIH_Link_Configure_Thresholds_confirm(odtone::mih::message& msg, const boost::system::error_code& ec) -//----------------------------------------------------------------------------- -{ - log_(0, ""); - log_(0, "receive_MIH_Link_Configure_Thresholds_confirm - Begin"); - - odtone::uint iter; - odtone::mih::status st; - - //boost::optional lcsl; - odtone::mih::link_cfg_status_list lcsl; - odtone::mih::link_cfg_status lcp; - odtone::mih::link_param_gen lp; - - odtone::mih::link_tuple_id lti; - - msg >> odtone::mih::confirm() - & odtone::mih::tlv_status(st) - & odtone::mih::tlv_link_identifier(lti) - & odtone::mih::tlv_link_cfg_status_list(lcsl); - - log_(0, "[MSC_MSG]["+getTimeStamp4Log()+"]["+ _mihfid.to_string() +"][--- MIH_Link_Configure_Thresholds.confirm\\nstatus="+status2string(st.get()).c_str()+" --->]["+_mihuserid.to_string()+"]\n"); - log_(0, "\t- STATUS: ", status2string(st.get()), " " ,st.get()); - - log_(0, "\t- LINK CFG STATUS LIST - Length: ", lcsl.size()); - - for(iter=0; iter()->default_value("mih_usr.conf"), "Configuration file") - (odtone::sap::kConf_Receive_Buffer_Len, po::value()->default_value(4096), "Receive buffer length") - (odtone::sap::kConf_Port, po::value()->default_value(1234), "Listening port") - (odtone::sap::kConf_MIH_SAP_id, po::value()->default_value("user"), "MIH-User ID") - (kConf_MIH_Commands, po::value()->default_value(""), "MIH-User supported commands") - (odtone::sap::kConf_MIHF_Ip, po::value()->default_value("127.0.0.1"), "Local MIHF IP address") - (odtone::sap::kConf_MIHF_Local_Port, po::value()->default_value(1025), "Local MIHF communication port") - (odtone::sap::kConf_MIH_SAP_dest, po::value()->default_value("mihf1"), "MIHF destination"); - - odtone::mih::config cfg(desc); - cfg.parse(argc, argv, odtone::sap::kConf_File); - - if (cfg.help()) { - std::cerr << desc << std::endl; - return EXIT_SUCCESS; - } - - mih_user usr(cfg, ios); - - ios.run(); - - } catch(std::exception& e) { - log_(0, "exception: ", e.what()); - } -} - -// EOF //////////////////////////////////////////////////////////////////////// diff --git a/openair3/RAL-LTE/RAL-DUMMY/802.21-SCENARIO/VERSION0/rg_mih_usr.cpp b/openair3/RAL-LTE/RAL-DUMMY/802.21-SCENARIO/VERSION0/rg_mih_usr.cpp deleted file mode 100644 index 70808c1f4b..0000000000 --- a/openair3/RAL-LTE/RAL-DUMMY/802.21-SCENARIO/VERSION0/rg_mih_usr.cpp +++ /dev/null @@ -1,1167 +0,0 @@ -//============================================================================== -// Brief : MIH-User -// Authors : Bruno Santos -//------------------------------------------------------------------------------ -// ODTONE - Open Dot Twenty One -// -// Copyright (C) 2009-2012 Universidade Aveiro -// Copyright (C) 2009-2012 Instituto de Telecomunicações - Pólo Aveiro -// -// This software is distributed under a license. The full license -// agreement can be found in the file LICENSE in this distribution. -// This software may not be copied, modified, sold or distributed -// other than expressed in the named license agreement. -// -// This software is distributed without any warranty. -//============================================================================== - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include - -#include -#include -#include - -/////////////////////////////////////////////////////////////////////////////// - -// Definition of the scenario to execute -#define NB_OF_RESOURCES 4 // Should not exceed mih_user::_max_link_action_requests -//#define SCENARIO_1 // Sequentially activate and deactivate each resource -#define SCENARIO_2 // Activate all resources, then deactivate all resources - -/////////////////////////////////////////////////////////////////////////////// -// The scenario coded in this MIH-USER is the following (with eRALlteDummy and NASRGDummy executables) -// +--------+ +-----+ -// |MIH_USER| |MIH-F| -// +---+----+ +--+--+ -// | | _current_link_action_request = 0 -// |---------- User_Register.indication ---------------->| (supported_commands) Handler next msg=user_reg_handler -// | | -// |---------- Capability_Discover.request ------------->| Handler next msg=receive_MIH_Capability_Discover_confirm -// |<--------- Capability_Discover.confirm --------------| (success) -// | | -// |---------- Event_Subscribe.request ----------------->| Handler next msg=receive_MIH_Event_Subscribe_confirm -// |<--------- Event_Subscribe.confirm ------------------| (success) -// | | -// ------------------------------------------------------------------------------------------------------------------------ -// Scenario 1: Sequentially activate and deactivate each resource -// ------------------------------------------------------------------------------------------------------------------------ -// | | -// |---------- Link_Actions.request -------------------->| (activate-resources[_current_link_action_request]) -// | | Handler next msg=receive_MIH_Link_Actions_confirm -// |<--------- Link_Actions.confirm ---------------------| (success) -// |---------- Link_Actions.request -------------------->| (deactivate-resources[_current_link_action_request]) -// | | Handler next msg=receive_MIH_Link_Actions_confirm -// | | _current_link_action_request = _current_link_action_request + 1 -// |<--------- Link_Actions.confirm ---------------------| (success) -// | . | -// | . | -// | . | -// | | -// ------------------------------------------------------------------------------------------------------------------------ -// Scenario 2: Activate all resources, then deactivate all resources -// ------------------------------------------------------------------------------------------------------------------------ -// | | -// |---------- Link_Actions.request -------------------->| (activate-resources[_current_link_action_request]) -// | | Handler next msg=receive_MIH_Link_Actions_confirm -// | | _current_link_action_request = _current_link_action_request + 1 -// |<--------- Link_Actions.confirm ---------------------| (success) -// | . | -// | . | -// | . | _current_link_action_request = 0 -// |---------- Link_Actions.request -------------------->| (deactivate-resources[_current_link_action_request]) -// | | Handler next msg=receive_MIH_Link_Actions_confirm -// | | _current_link_action_request = _current_link_action_request + 1 -// |<--------- Link_Actions.confirm ---------------------| (success) -// | . | -// | . | -// | . | -// | | -// ------------------------------------------------------------------------------------------------------------------------ -// | | -// |---------- Event_Unsubscribe.request --------------->| Handler next msg=receive_MIH_Event_Unsubscribe_confirm -// |<--------- Event_Subscribe.confirm ------------------| (success) -// | | -// | | -/////////////////////////////////////////////////////////////////////////////// - -static const char* const kConf_MIH_Commands = "user.commands"; - -/////////////////////////////////////////////////////////////////////////////// - -namespace po = boost::program_options; - -using odtone::uint; -using odtone::ushort; -using odtone::sint8; - -odtone::logger log_("[mih_usr]", std::cout); - -/////////////////////////////////////////////////////////////////////////////// - -//----------------------------------------------------------------------------- -void __trim(odtone::mih::octet_string &str, const char chr) -//----------------------------------------------------------------------------- -{ - str.erase(std::remove(str.begin(), str.end(), chr), str.end()); -} -//----------------------------------------------------------------------------- -template std::string StringOf(T object) { -//----------------------------------------------------------------------------- - std::ostringstream os; - os << object; - return(os.str()); -} -//----------------------------------------------------------------------------- -std::string getTimeStamp4Log() -//----------------------------------------------------------------------------- -{ - std::stringstream ss (std::stringstream::in | std::stringstream::out); - struct timespec time_spec; - unsigned int time_now_micros; - unsigned int time_now_s; - clock_gettime (CLOCK_REALTIME, &time_spec); - time_now_s = (unsigned int) time_spec.tv_sec % 3600; - time_now_micros = (unsigned int) time_spec.tv_nsec/1000; - ss << time_now_s << ':' << time_now_micros; - return ss.str(); -} -//----------------------------------------------------------------------------- -std::string status2string(odtone::mih::status statusP){ -//----------------------------------------------------------------------------- - switch (statusP.get()) { - case odtone::mih::status_success: return "SUCCESS";break; - case odtone::mih::status_failure: return "UNSPECIFIED_FAILURE";break; - case odtone::mih::status_rejected: return "REJECTED";break; - case odtone::mih::status_authorization_failure: return "AUTHORIZATION_FAILURE";break; - case odtone::mih::status_network_error: return "NETWORK_ERROR";break; - default: return "UNKNOWN"; - } -} -//----------------------------------------------------------------------------- -std::string link_down_reason2string(odtone::mih::link_dn_reason reasonP){ -//----------------------------------------------------------------------------- - switch (reasonP.get()) { - case odtone::mih::link_dn_reason_explicit_disconnect: return "DN_REASON_EXPLICIT_DISCONNECT";break; - case odtone::mih::link_dn_reason_packet_timeout: return "DN_REASON_PACKET_TIMEOUT";break; - case odtone::mih::link_dn_reason_no_resource: return "DN_REASON_NO_RESOURCE";break; - case odtone::mih::link_dn_reason_no_broadcast: return "DN_REASON_NO_BROADCAST";break; - case odtone::mih::link_dn_reason_authentication_failure: return "DN_REASON_AUTHENTICATION_FAILURE";break; - case odtone::mih::link_dn_reason_billing_failure: return "DN_REASON_BILLING_FAILURE";break; - default: return "DN_REASON_UNKNOWN"; - } -} -//----------------------------------------------------------------------------- -std::string link_going_down_reason2string(odtone::mih::link_gd_reason reasonP){ -//----------------------------------------------------------------------------- - switch (reasonP.get()) { - case odtone::mih::link_gd_reason_explicit_disconnect: return "GD_REASON_EXPLICIT_DISCONNECT";break; - case odtone::mih::link_gd_reason_link_parameter_degrading: return "GD_REASON_PARAMETER_DEGRADING";break; - case odtone::mih::link_gd_reason_low_power: return "GD_REASON_LOW_POWER";break; - case odtone::mih::link_gd_reason_no_resource: return "GD_REASON_NO_RESOURCE";break; - default: return "GD_REASON_UNKNOWN"; - } -} -//----------------------------------------------------------------------------- -std::string evt2string(odtone::mih::mih_evt_list evtP){ -//----------------------------------------------------------------------------- - std::string s; - if(evtP.get(odtone::mih::mih_evt_link_detected)) s = std::string("DETECTED "); - if(evtP.get(odtone::mih::mih_evt_link_up)) s += "UP "; - if(evtP.get(odtone::mih::mih_evt_link_down)) s += "DOWN "; - if(evtP.get(odtone::mih::mih_evt_link_parameters_report)) s += "PARAMETERS_REPORT "; - if(evtP.get(odtone::mih::mih_evt_link_going_down)) s += "GOING_DOWN "; - if(evtP.get(odtone::mih::mih_evt_link_handover_imminent)) s += "HANDOVER_IMMINENT "; - if(evtP.get(odtone::mih::mih_evt_link_handover_complete)) s += "HANDOVER_COMPLETE "; - if(evtP.get(odtone::mih::mih_evt_link_pdu_transmit_status)) s += "PDU_TRANSMIT_STATUS "; - return s; -} -//----------------------------------------------------------------------------- -std::string cmd2string(odtone::mih::mih_cmd_list cmdP){ -//----------------------------------------------------------------------------- - std::string s; - if(cmdP.get(odtone::mih::mih_cmd_link_get_parameters)) s = std::string("Link_Get_Parameters "); - if(cmdP.get(odtone::mih::mih_cmd_link_configure_thresholds)) s += "Link_Configure_Thresholds "; - if(cmdP.get(odtone::mih::mih_cmd_link_actions)) s += "Link_Actions "; - if(cmdP.get(odtone::mih::mih_cmd_net_ho_candidate_query)) s += "Net_HO_Candidate_Query "; - if(cmdP.get(odtone::mih::mih_cmd_net_ho_commit)) s += "Net_HO_Commit "; - if(cmdP.get(odtone::mih::mih_cmd_n2n_ho_query_resources)) s += "N2N_HO_Query_Resources "; - if(cmdP.get(odtone::mih::mih_cmd_n2n_ho_commit)) s += "N2N_HO_Commit "; - if(cmdP.get(odtone::mih::mih_cmd_n2n_ho_complete)) s += "N2N_HO_Complete "; - if(cmdP.get(odtone::mih::mih_cmd_mn_ho_candidate_query)) s += "MN_HO_Candidate_Query "; - if(cmdP.get(odtone::mih::mih_cmd_mn_ho_commit)) s += "MN_HO_Commit "; - if(cmdP.get(odtone::mih::mih_cmd_mn_ho_complete)) s += "MN_HO_Complete "; - return s; -} -//----------------------------------------------------------------------------- -std::string link_type2string(const odtone::mih::link_type& lt) -//----------------------------------------------------------------------------- -{ - switch (lt.get()) { - case odtone::mih::link_type_gsm: return "GSM"; break; - case odtone::mih::link_type_gprs: return "GPRS"; break; - case odtone::mih::link_type_edge: return "EDGE"; break; - case odtone::mih::link_type_ethernet: return "Ethernet"; break; - case odtone::mih::link_type_wireless_other: return "Other"; break; - case odtone::mih::link_type_802_11: return "IEEE 802.11"; break; - case odtone::mih::link_type_cdma2000: return "CDMA-2000"; break; - case odtone::mih::link_type_umts: return "UMTS"; break; - case odtone::mih::link_type_cdma2000_hrpd: return "CDMA-2000-HRPD"; break; - case odtone::mih::link_type_lte: return "LTE"; break; - case odtone::mih::link_type_802_16: return "IEEE 802.16"; break; - case odtone::mih::link_type_802_20: return "IEEE 802.20"; break; - case odtone::mih::link_type_802_22: return "IEEE 802.22"; break; - default: break; - } - return "Unknown link type"; -} -//----------------------------------------------------------------------------- -std::string link_addr2string(const odtone::mih::link_addr *addr) -//----------------------------------------------------------------------------- -{ - if (const odtone::mih::mac_addr *la = boost::get(addr)) { - return la->address(); - } - else if (const odtone::mih::l2_3gpp_3g_cell_id *la = boost::get(addr)) { - char plmn[16]; - sprintf(plmn, "%hhx:%hhx:%hhx", la->plmn_id[0], la->plmn_id[1], la->plmn_id[2]); - return str(boost::format("%s %d") % plmn % la->_cell_id); - } - else if (const odtone::mih::l2_3gpp_2g_cell_id *la = boost::get(addr)) { - char plmn[16]; - sprintf(plmn, "%hhx:%hhx:%hhx", la->plmn_id[0], la->plmn_id[1], la->plmn_id[2]); - return str(boost::format("%s %d %d") % plmn % la->_lac % la->_ci); - } - else if (const odtone::mih::l2_3gpp_addr *la = boost::get(addr)) { - return la->value; - } - else if (const odtone::mih::l2_3gpp2_addr *la = boost::get(addr)) { - return la->value; - } - else if (const odtone::mih::other_l2_addr *la = boost::get(addr)) { - return la->value; - } - return "null"; -} -//----------------------------------------------------------------------------- -std::string l2_3gpp_3g_cell_id2string(odtone::mih::l2_3gpp_3g_cell_id& addr) -//----------------------------------------------------------------------------- -{ - char buffer[256]; - int index = 0; - - index += std::sprintf(&buffer[index], "plmn: -%hhx--%hhx--%hhx-\n", addr.plmn_id[0], addr.plmn_id[1], addr.plmn_id[2]); - index += std::sprintf(&buffer[index], "cell_id: %hhx\n", addr._cell_id); - return buffer; -} -//----------------------------------------------------------------------------- -std::string link_id2string(odtone::mih::link_id linkP) -//----------------------------------------------------------------------------- -{ - std::string s; - s = link_type2string(linkP.type.get()) + " " + link_addr2string(&linkP.addr); - return s; -} -//----------------------------------------------------------------------------- -std::string ip_addr2string(odtone::mih::ip_addr ip_addrP) { -//----------------------------------------------------------------------------- - std::string s; - switch (ip_addrP.type()) { - case odtone::mih::ip_addr::ipv4: s = "ipv4 "; break; - case odtone::mih::ip_addr::ipv6: s = "ipv6 "; break; - default: s = "Unkown type "; - } - s += ip_addrP.address(); - return s; -} -//----------------------------------------------------------------------------- -std::string ip_tuple2string(odtone::mih::ip_tuple ip_tupleP) { -//----------------------------------------------------------------------------- - char buffer[128]; - std::snprintf(buffer, 128, "%s/%d", ip_addr2string(ip_tupleP.ip).c_str(), ip_tupleP.port_val); - return buffer; -} -//----------------------------------------------------------------------------- -std::string ip_proto2string(odtone::mih::proto ip_protoP) { -//----------------------------------------------------------------------------- - switch (ip_protoP.get()) { - case odtone::mih::proto_tcp: return "TCP"; - case odtone::mih::proto_udp: return "UDP"; - default: break; - } - return "Unknown IP protocol"; -} -// TEMP : next 2 functions are commented to restore flow_id as a uint32 -// full structure will be updated later -/*//----------------------------------------------------------------------------- -std::string flow_id2string(odtone::mih::flow_id flowP) { -//----------------------------------------------------------------------------- - std::string s; - odtone::mih::ip_tuple ip; - ip = flowP.src; - s = "SRC = " + ip_tuple2string(flowP.src); - s += ", DST = " + ip_tuple2string(flowP.dst); - s += ", PROTO = " + ip_proto2string(flowP.transport); - return s; -} -//----------------------------------------------------------------------------- -std::string flow_id2string(odtone::mih::link_ac_param link_ac_paramP) { -//----------------------------------------------------------------------------- - if (odtone::mih::resource_desc *res = boost::get(&link_ac_paramP.param)) { - return flow_id2string(res->fid); - } - else if (odtone::mih::flow_attribute *flow = boost::get(&link_ac_paramP.param)) { - return flow_id2string(flow->id); - } - return "null"; -}*/ -//----------------------------------------------------------------------------- -std::string link_ac_result2string(odtone::mih::link_ac_result resultP) -//----------------------------------------------------------------------------- -{ - switch (resultP.get()) { - case odtone::mih::link_ac_success: return "SUCCESS"; break; - case odtone::mih::link_ac_failure: return "FAILURE"; break; - case odtone::mih::link_ac_refused: return "REFUSED"; break; - case odtone::mih::link_ac_incapable: return "INCAPABLE"; break; - default: break; - } - return "Unknown action result"; -} -//----------------------------------------------------------------------------- -std::string link_actions_req2string(odtone::mih::link_action_req link_act_reqP) { -//----------------------------------------------------------------------------- - std::string s; - - s = link_id2string(link_act_reqP.id); - - if(link_act_reqP.action.type == odtone::mih::link_ac_type_none) s += ", AC_TYPE_NONE"; - if(link_act_reqP.action.type == odtone::mih::link_ac_type_disconnect) s += ", AC_TYPE_DISCONNECT"; - if(link_act_reqP.action.type == odtone::mih::link_ac_type_low_power) s += ", AC_TYPE_LOW_POWER"; - if(link_act_reqP.action.type == odtone::mih::link_ac_type_power_down) s += ", AC_TYPE_POWER_DOWN"; - if(link_act_reqP.action.type == odtone::mih::link_ac_type_power_up) s += ", AC_TYPE_POWER_UP"; - if(link_act_reqP.action.type == odtone::mih::link_ac_type_flow_attr) s += ", AC_TYPE_FLOW_ATTR"; - if(link_act_reqP.action.type == odtone::mih::link_ac_type_link_activate_resources) s += ", AC_TYPE_ACTIVATE_RESOURCES"; - if(link_act_reqP.action.type == odtone::mih::link_ac_type_link_deactivate_resources) s += ", AC_TYPE_DEACTIVATE_RESOURCES"; - - if(link_act_reqP.action.attr.get(odtone::mih::link_ac_attr_data_fwd_req)) s += ", AC_ATTR_DATA_FWD_REQ"; - if(link_act_reqP.action.attr.get(odtone::mih::link_ac_attr_scan)) s += ", AC_ATTR_SCAN"; - if(link_act_reqP.action.attr.get(odtone::mih::link_ac_attr_res_retain)) s += ", AC_ATTR_RES_RETAIN"; - - s += ", " + StringOf(link_act_reqP.ex_time) + " ms"; - return s; -} -//----------------------------------------------------------------------------- -std::string net_type_addr_list2string(boost::optional ntalP) { -//----------------------------------------------------------------------------- - std::string s; - odtone::mih::link_id link_id; - - for (odtone::mih::net_type_addr_list::iterator i = ntalP->begin(); i != ntalP->end(); i++) - { - link_id.type = boost::get(i->nettype.link); - link_id.addr = i->addr; - if (i != ntalP->begin()) { - s += " / "; - } - s += link_id2string(link_id); - } - - return s; -} - -/** - * Parse supported commands. - * - * @param cfg Configuration options. - * @return An optional list of supported commands. - */ -boost::optional parse_supported_commands(const odtone::mih::config &cfg) -{ - using namespace boost; - - odtone::mih::mih_cmd_list commands; - - std::map enum_map; - enum_map["mih_link_get_parameters"] = odtone::mih::mih_cmd_link_get_parameters; - enum_map["mih_link_configure_thresholds"] = odtone::mih::mih_cmd_link_configure_thresholds; - enum_map["mih_link_actions"] = odtone::mih::mih_cmd_link_actions; - enum_map["mih_net_ho_candidate_query"] = odtone::mih::mih_cmd_net_ho_candidate_query; - enum_map["mih_net_ho_commit"] = odtone::mih::mih_cmd_net_ho_commit; - enum_map["mih_n2n_ho_query_resources"] = odtone::mih::mih_cmd_n2n_ho_query_resources; - enum_map["mih_n2n_ho_commit"] = odtone::mih::mih_cmd_n2n_ho_commit; - enum_map["mih_n2n_ho_complete"] = odtone::mih::mih_cmd_n2n_ho_complete; - enum_map["mih_mn_ho_candidate_query"] = odtone::mih::mih_cmd_mn_ho_candidate_query; - enum_map["mih_mn_ho_commit"] = odtone::mih::mih_cmd_mn_ho_commit; - enum_map["mih_mn_ho_complete"] = odtone::mih::mih_cmd_mn_ho_complete; - - std::string tmp = cfg.get(kConf_MIH_Commands); - __trim(tmp, ' '); - - char_separator sep1(","); - tokenizer< char_separator > list_tokens(tmp, sep1); - - BOOST_FOREACH(std::string str, list_tokens) { - if(enum_map.find(str) != enum_map.end()) { - commands.set((odtone::mih::mih_cmd_list_enum) enum_map[str]); - } - } - - return commands; -} - -/////////////////////////////////////////////////////////////////////////////// -/** - * This class provides an implementation of an IEEE 802.21 MIH-User. - */ -class mih_user : boost::noncopyable { -public: - /** - * Construct the MIH-User. - * - * @param cfg Configuration options. - * @param io The io_service object that the MIH-User will use to - * dispatch handlers for any asynchronous operations performed on the socket. - */ - mih_user(const odtone::mih::config& cfg, boost::asio::io_service& io); - - /** - * Destruct the MIH-User. - */ - ~mih_user(); - -protected: - /** - * User registration handler. - * - * @param cfg Configuration options. - * @param ec Error Code. - */ - void user_reg_handler(const odtone::mih::config& cfg, const boost::system::error_code& ec); - /** - * Default MIH event handler. - * - * @param msg Received event notification. - * @param ec Error code. - */ - void event_handler(odtone::mih::message& msg, const boost::system::error_code& ec); - /** - * MIH receive message handler. - * - * @param msg Received message. - * @param ec Error code. - */ - void receive_handler(odtone::mih::message& msg, const boost::system::error_code& ec); - - void send_MIH_User_Register_indication(const odtone::mih::config& cfg); - - void send_MIH_Capability_Discover_request(void); - void receive_MIH_Capability_Discover_confirm(odtone::mih::message& msg); - - void send_MIH_Event_Subscribe_request(odtone::mih::link_tuple_id& li, odtone::mih::mih_evt_list& evt); - void receive_MIH_Event_Subscribe_confirm(odtone::mih::message& msg); - - void send_MIH_Event_Unsubscribe_request(void); - void send_MIH_Event_Unsubscribe_request(odtone::mih::link_tuple_id& li, odtone::mih::mih_evt_list& evt); - void receive_MIH_Event_Unsubscribe_confirm(odtone::mih::message& msg); - - void send_MIH_Link_Actions_request(const odtone::mih::link_id& link, odtone::mih::link_ac_type type); - void receive_MIH_Link_Actions_confirm(odtone::mih::message& msg); - -private: - odtone::sap::user _mihf; /**< User SAP helper. */ - odtone::mih::id _mihfid; /**< MIHF destination ID. */ - odtone::mih::id _mihuserid; /**< MIH_USER ID. */ - - odtone::mih::ip_addr _mihf_ip; /**< MIHF IP address */ - odtone::mih::port _mihf_lport; /**< MIHF local port number */ - - odtone::mih::link_id_list _link_id_list; /**< List of network link identifiers */ - odtone::mih::mih_evt_list _subs_evt_list; /**< List of subscribed link events */ - - odtone::mih::link_ac_type _last_link_action_type; - odtone::uint _current_link_action_request, _nb_of_link_action_requests; - static const odtone::uint _max_link_action_requests = 4; - - void receive_MIH_Link_Detected_indication(odtone::mih::message& msg); - - void receive_MIH_Link_Up_indication(odtone::mih::message& msg); - - void receive_MIH_Link_Down_indication(odtone::mih::message& msg); - - void receive_MIH_Link_Going_Down_indication(odtone::mih::message& msg); - -}; - -//----------------------------------------------------------------------------- -mih_user::mih_user(const odtone::mih::config& cfg, boost::asio::io_service& io) - : _mihf(cfg, io, boost::bind(&mih_user::event_handler, this, _1, _2)), - _last_link_action_type(odtone::mih::link_ac_type_none), - _current_link_action_request(0), _nb_of_link_action_requests(NB_OF_RESOURCES) -//----------------------------------------------------------------------------- -{ - odtone::mih::octet_string user_id = cfg.get(odtone::sap::kConf_MIH_SAP_id); - _mihuserid.assign(user_id.c_str()); - - odtone::mih::octet_string dest_id = cfg.get(odtone::sap::kConf_MIH_SAP_dest); - _mihfid.assign(dest_id.c_str()); - - odtone::mih::octet_string src = cfg.get(odtone::sap::kConf_MIHF_Ip); - boost::asio::ip::address ip = boost::asio::ip::address::from_string(src); - if (ip.is_v4()) { - odtone::mih::ip_addr ip_addr(odtone::mih::ip_addr::ipv4, src); - _mihf_ip = ip_addr; - } - else if (ip.is_v6()) { - odtone::mih::ip_addr ip_addr(odtone::mih::ip_addr::ipv6, src); - _mihf_ip = ip_addr; - } - - _mihf_lport = cfg.get(odtone::sap::kConf_MIHF_Local_Port); - - //_nb_of_link_action_requests = NB_OF_RESOURCES; - if (_nb_of_link_action_requests > _max_link_action_requests) { - _nb_of_link_action_requests = _max_link_action_requests; - } - - _link_id_list.clear(); - _subs_evt_list.clear(); - - log_(0, "[MSC_NEW]["+getTimeStamp4Log()+"][MIH-USER="+_mihuserid.to_string()+"]\n"); - - // Send MEDIEVAL specific MIH_User_Register.indication message to the MIH-F - mih_user::send_MIH_User_Register_indication(cfg); -} - -//----------------------------------------------------------------------------- -mih_user::~mih_user() -//----------------------------------------------------------------------------- -{ -} - -//----------------------------------------------------------------------------- -void mih_user::user_reg_handler(const odtone::mih::config& cfg, const boost::system::error_code& ec) -//----------------------------------------------------------------------------- -{ - log_(0, "MIH-User register result: ", ec.message(), "\n"); - - // - // Let's fire a capability discover request to get things moving - // - mih_user::send_MIH_Capability_Discover_request(); -} - -//----------------------------------------------------------------------------- -void mih_user::event_handler(odtone::mih::message& msg, const boost::system::error_code& ec) -//----------------------------------------------------------------------------- -{ - if (ec) { - log_(0, __FUNCTION__, " error: ", ec.message()); - return; - } - - switch (msg.mid()) { - case odtone::mih::indication::link_detected: - mih_user::receive_MIH_Link_Detected_indication(msg); - break; - - case odtone::mih::indication::link_up: - mih_user::receive_MIH_Link_Up_indication(msg); - break; - - case odtone::mih::indication::link_down: - mih_user::receive_MIH_Link_Down_indication(msg); - break; - - case odtone::mih::indication::link_going_down: - mih_user::receive_MIH_Link_Going_Down_indication(msg); - break; - - case odtone::mih::indication::link_handover_imminent: - log_(0, "MIH-User has received a local event \"link_handover_imminent\""); - break; - - case odtone::mih::indication::link_handover_complete: - log_(0, "MIH-User has received a local event \"link_handover_complete\""); - break; - - case odtone::mih::indication::link_parameters_report: - log_(0, "MIH-User has received a local event \"link_parameters_report\""); - break; - - case odtone::mih::indication::link_pdu_transmit_status: - log_(0, "MIH-User has received a local event \"link_pdu_transmit_status\""); - break; - - default: - log_(0, "MIH-User has received UNKNOWN local event"); - break; - } -} - -//----------------------------------------------------------------------------- -void mih_user::receive_handler(odtone::mih::message& msg, const boost::system::error_code& ec) -//----------------------------------------------------------------------------- -{ - if (ec) { - log_(0, __FUNCTION__, " error: ", ec.message()); - return; - } - - switch (msg.mid()) { - - case odtone::mih::confirm::capability_discover: - mih_user::receive_MIH_Capability_Discover_confirm(msg); - break; - - case odtone::mih::confirm::event_subscribe: - mih_user::receive_MIH_Event_Subscribe_confirm(msg); - break; - - case odtone::mih::confirm::event_unsubscribe: - mih_user::receive_MIH_Event_Unsubscribe_confirm(msg); - break; - - case odtone::mih::confirm::link_actions: - mih_user::receive_MIH_Link_Actions_confirm(msg); - break; - - default: - log_(0, "MIH-User has received UNKNOWN message (", msg.mid(), ")\n"); - break; - } -} - -//----------------------------------------------------------------------------- -void mih_user::receive_MIH_Link_Detected_indication(odtone::mih::message& msg) -//----------------------------------------------------------------------------- -{ - log_(0, "MIH_Link_Detected.indication - RECEIVED - Begin\n"); - - odtone::mih::link_det_info_list ldil; - - msg >> odtone::mih::indication() - & odtone::mih::tlv_link_det_info_list(ldil); - - log_(0, "[MSC_MSG]["+getTimeStamp4Log()+"]["+ msg.source().to_string() +"][--- MIH_Link_Detected.indication --->]["+msg.destination().to_string()+"]\n"); - - // Display message parameters - // TODO: for each link_det_info in the list {display LINK_DET_INFO} - - log_(0, "MIH_Link_Detected.indication - End\n"); -} - -//----------------------------------------------------------------------------- -void mih_user::receive_MIH_Link_Up_indication(odtone::mih::message& msg) -//----------------------------------------------------------------------------- -{ - log_(0, "MIH_Link_Up.indication - RECEIVED - Begin\n"); - - odtone::mih::link_tuple_id link; - - msg >> odtone::mih::indication() - & odtone::mih::tlv_link_identifier(link); - - log_(0, "[MSC_MSG]["+getTimeStamp4Log()+"]["+ msg.source().to_string() +"][--- MIH_Link_Up.indication --->]["+msg.destination().to_string()+"]\n"); - - // Display message parameters - log_(0, " - LINK_ID - Link identifier: ", link_id2string(link).c_str(), "\n"); - - log_(0, "MIH_Link_Up.indication - End\n"); -} - -//----------------------------------------------------------------------------- -void mih_user::receive_MIH_Link_Down_indication(odtone::mih::message& msg) -//----------------------------------------------------------------------------- -{ - log_(0, "MIH_Link_Down.indication - RECEIVED - Begin\n"); - - odtone::mih::link_tuple_id link; - odtone::mih::link_dn_reason ldr; - - msg >> odtone::mih::indication() - & odtone::mih::tlv_link_identifier(link) - & odtone::mih::tlv_link_dn_reason(ldr); - - log_(0, "[MSC_MSG]["+getTimeStamp4Log()+"]["+ msg.source().to_string() +"][--- MIH_Link_Down.indication\\n"+link_down_reason2string(ldr).c_str()+" --->]["+msg.destination().to_string()+"]\n"); - - // Display message parameters - log_(0, " - LINK_ID - Link identifier: ", link_id2string(link).c_str()); - log_(0, " - LINK_DN_REASON - Link down reason: ", link_down_reason2string(ldr).c_str(), "\n"); - - log_(0, "MIH_Link_Down.indication - End\n"); -} - -//----------------------------------------------------------------------------- -void mih_user::receive_MIH_Link_Going_Down_indication(odtone::mih::message& msg) -//----------------------------------------------------------------------------- -{ - log_(0, "MIH_Link_Going_Down.indication - RECEIVED - Begin\n"); - - odtone::mih::link_tuple_id link; - odtone::mih::link_gd_reason lgd; - odtone::mih::link_ac_ex_time ex_time; - - msg >> odtone::mih::indication() - & odtone::mih::tlv_link_identifier(link) - & odtone::mih::tlv_time_interval(ex_time) - & odtone::mih::tlv_link_gd_reason(lgd); - - log_(0, "[MSC_MSG]["+getTimeStamp4Log()+"]["+ msg.source().to_string() +"][--- MIH_Link_Going_Down.indication\\n"+link_going_down_reason2string(lgd).c_str()+" --->]["+msg.destination().to_string()+"]\n"); - - // Display message parameters - log_(0, " - LINK_ID - Link identifier: ", link_id2string(link).c_str()); - log_(0, " - Time Interval:", (ex_time/256)); - log_(0, " - LINK_GD_REASON - Link going down reason: ", link_going_down_reason2string(lgd).c_str(), "\n"); - - log_(0, "MIH_Link_Going_Down.indication - End\n"); -} - -//----------------------------------------------------------------------------- -void mih_user::send_MIH_User_Register_indication(const odtone::mih::config& cfg) -//----------------------------------------------------------------------------- -{ - odtone::mih::message m; - boost::optional supp_cmd = parse_supported_commands(cfg); - - m << odtone::mih::indication(odtone::mih::indication::user_register) - & odtone::mih::tlv_command_list(supp_cmd); - m.source(_mihuserid); - m.destination(_mihfid); - - log_(0, "[MSC_MSG]["+getTimeStamp4Log()+"]["+ m.source().to_string() +"][--- MIH_User_Register.indication --->]["+m.destination().to_string()+"]\n"); - - _mihf.async_send(m, boost::bind(&mih_user::user_reg_handler, this, boost::cref(cfg), _2)); - - log_(0, "MIH_User_Register.indication - SENT (towards its local MIHF)\n"); -} - -//----------------------------------------------------------------------------- -void mih_user::send_MIH_Capability_Discover_request(void) -//----------------------------------------------------------------------------- -{ - odtone::mih::message m; - m << odtone::mih::request(odtone::mih::request::capability_discover); - m.source(_mihuserid); - m.destination(_mihfid); - - log_(0, "[MSC_MSG]["+getTimeStamp4Log()+"]["+ m.source().to_string() +"][--- MIH_Capability_Discover.request --->]["+m.destination().to_string()+"]\n"); - - _mihf.async_send(m, boost::bind(&mih_user::receive_handler, this, _1, _2)); - - log_(0, "MIH_Capability_Discover.request - SENT (towards its local MIHF)\n"); -} - -//----------------------------------------------------------------------------- -void mih_user::receive_MIH_Capability_Discover_confirm(odtone::mih::message& msg) -//----------------------------------------------------------------------------- -{ - log_(0, "MIH_Capability_Discover.confirm - RECEIVED - Begin\n"); - - odtone::mih::status st; - boost::optional ntal; - boost::optional evt; - boost::optional cmd; - - msg >> odtone::mih::confirm() - & odtone::mih::tlv_status(st) - & odtone::mih::tlv_net_type_addr_list(ntal) - & odtone::mih::tlv_event_list(evt) - & odtone::mih::tlv_command_list(cmd); - - log_(0, "[MSC_MSG]["+getTimeStamp4Log()+"]["+ msg.source().to_string() +"][--- MIH_Capability_Discover.confirm"+ - "\\nstatus="+status2string(st).c_str()+ - "\\nEvent list="+evt2string(evt.get()).c_str()+ - "\\nNet type addr list=" + net_type_addr_list2string(ntal).c_str()+ - " --->]["+msg.destination().to_string()+"]\n"); - - // Display message parameters - log_(0, " - STATUS: ", status2string(st).c_str(), " (", st.get(), ")"); - if (evt) { - log_(0, " - MIH_EVT_LIST - Event List: ", evt2string(evt.get()).c_str()); - } - if (cmd) { - log_(0, " - MIH_CMD_LIST - Command List: ", cmd2string(cmd.get()).c_str()); - } - if (ntal) { - log_(0, " - LIST(NET_TYPE_ADDR) - Network Types and Link Address: ", net_type_addr_list2string(ntal).c_str()); - } - log_(0, ""); - - // - // event subscription - // - // For every interface the MIHF sent in the - // Capability_Discover.response send an Event_Subscribe.request - // for all availabe events - // - if (ntal && evt) { - _subs_evt_list = evt.get(); // save the list of subscribed link events - for (odtone::mih::net_type_addr_list::iterator i = ntal->begin(); i != ntal->end(); i++) { - if (i->nettype.link.which() == 1) - { - odtone::mih::link_tuple_id li; - - li.addr = i->addr; - li.type = boost::get(i->nettype.link); - _link_id_list.push_back(li); // save the link identifier of the network interface - - mih_user::send_MIH_Event_Subscribe_request(li, evt.get()); - } - } - } - - log_(0, "MIH_Capability_Discover.confirm - End\n"); -} - -//----------------------------------------------------------------------------- -void mih_user::send_MIH_Event_Subscribe_request(odtone::mih::link_tuple_id& li, odtone::mih::mih_evt_list& evt) -//----------------------------------------------------------------------------- -{ - odtone::mih::message m; - - m << odtone::mih::request(odtone::mih::request::event_subscribe) - & odtone::mih::tlv_link_identifier(li) - & odtone::mih::tlv_event_list(evt); - m.source(_mihuserid); - m.destination(_mihfid); - - log_(0, "[MSC_MSG]["+getTimeStamp4Log()+"]["+ m.source().to_string() +"][--- MIH_Event_Subscribe.request"+ - "\\nLink="+link_id2string(li).c_str()+ - "\\nEvent list="+evt2string(evt).c_str()+ - " --->]["+m.destination().to_string()+"]\n"); - - _mihf.async_send(m, boost::bind(&mih_user::receive_handler, this, _1, _2)); - - log_(0, "MIH-User has sent Event_Subscribe.request to ", m.destination().to_string()); - log_(0, " - LINK_TUPLE_ID - Link identifier: ", link_id2string(li).c_str()); - log_(0, " - MIH_EVT_LIST - Event List: ", evt2string(evt).c_str(), "\n"); - - log_(0, "MIH_Event_Subscribe.request - SENT\n"); -} - -//----------------------------------------------------------------------------- -void mih_user::receive_MIH_Event_Subscribe_confirm(odtone::mih::message& msg) -//----------------------------------------------------------------------------- -{ - log_(0, "MIH_Event_Subscribe.confirm(", msg.tid(), ") - RECEIVED - Begin\n"); - - odtone::mih::status st; - odtone::mih::link_tuple_id link; - boost::optional evt; - - msg >> odtone::mih::confirm() - & odtone::mih::tlv_status(st) - & odtone::mih::tlv_link_identifier(link) - & odtone::mih::tlv_event_list(evt); - - if (evt) { - log_(0, "[MSC_MSG]["+getTimeStamp4Log()+"]["+ msg.source().to_string() +"][--- MIH_Event_Subscribe.confirm"+ - "\\nstatus="+status2string(st).c_str()+ - "\\nLink="+link_id2string(link).c_str()+ - "\\nEvent list="+evt2string(evt.get()).c_str()+ - " --->]["+msg.destination().to_string()+"]\n"); - } else { - log_(0, "[MSC_MSG]["+getTimeStamp4Log()+"]["+ msg.source().to_string() +"][--- MIH_Event_Subscribe.confirm"+ - "\\nstatus="+status2string(st).c_str()+ - "\\nLink="+link_id2string(link).c_str()+ - " --->]["+msg.destination().to_string()+"]\n"); - } - - // Display message parameters - log_(0, " - STATUS: ", status2string(st).c_str(), " (", st.get(), ")"); - log_(0, " - LINK_TUPLE_ID - Link identifier: ", link_id2string(link).c_str()); - if (evt) { - log_(0, " - MIH_EVT_LIST - Event List: ", evt2string(evt.get()).c_str()); - } - log_(0, ""); - - mih_user::send_MIH_Link_Actions_request(link, odtone::mih::link_ac_type_link_activate_resources); - - log_(0, "MIH_Event_Subscribe.confirm - End\n"); -} - -//----------------------------------------------------------------------------- -void mih_user::send_MIH_Event_Unsubscribe_request(void) -//----------------------------------------------------------------------------- -{ - odtone::mih::link_tuple_id li; - - // For every interface the MIH user received in the - // Capability_Discover.confirm, send an Event_Unsubscribe.request - // for all subscribed events - for (odtone::mih::link_id_list::iterator i = _link_id_list.begin(); i != _link_id_list.end(); i++) { - li.type = i->type; - li.addr = i->addr; - mih_user::send_MIH_Event_Unsubscribe_request(li, _subs_evt_list); - } -} - -//----------------------------------------------------------------------------- -void mih_user::send_MIH_Event_Unsubscribe_request(odtone::mih::link_tuple_id& li, odtone::mih::mih_evt_list& evt) -//----------------------------------------------------------------------------- -{ - odtone::mih::message m; - - m << odtone::mih::request(odtone::mih::request::event_unsubscribe) - & odtone::mih::tlv_link_identifier(li) - & odtone::mih::tlv_event_list(evt); - m.source(_mihuserid); - m.destination(_mihfid); - - log_(0, "[MSC_MSG]["+getTimeStamp4Log()+"]["+ m.source().to_string() +"][--- MIH_Event_Unsubscribe.request"+ - "\\nLink="+link_id2string(li).c_str()+ - "\\nEvent list="+evt2string(evt).c_str()+ - " --->]["+m.destination().to_string()+"]\n"); - - _mihf.async_send(m, boost::bind(&mih_user::receive_handler, this, _1, _2)); - - log_(0, "MIH-User has sent Event_Unsubscribe.request to ", m.destination().to_string()); - log_(0, " - LINK_TUPLE_ID - Link identifier: ", link_id2string(li).c_str()); - log_(0, " - MIH_EVT_LIST - Event List: ", evt2string(evt).c_str(), "\n"); - - log_(0, "MIH_Event_Unsubscribe.request - SENT\n"); -} - -//----------------------------------------------------------------------------- -void mih_user::receive_MIH_Event_Unsubscribe_confirm(odtone::mih::message& msg) -//----------------------------------------------------------------------------- -{ - log_(0, "MIH_Event_Unsubscribe.confirm(", msg.tid(), ") - RECEIVED - Begin\n"); - - odtone::mih::status st; - odtone::mih::link_tuple_id link; - boost::optional evt; - - msg >> odtone::mih::confirm() - & odtone::mih::tlv_status(st) - & odtone::mih::tlv_link_identifier(link) - & odtone::mih::tlv_event_list(evt); - - if (evt) { - log_(0, "[MSC_MSG]["+getTimeStamp4Log()+"]["+ msg.source().to_string() +"][--- MIH_Event_Unsubscribe.confirm"+ - "\\nstatus="+status2string(st).c_str()+ - "\\nLink="+link_id2string(link).c_str()+ - "\\nEvent list="+evt2string(evt.get()).c_str()+ - " --->]["+msg.destination().to_string()+"]\n"); - } else { - log_(0, "[MSC_MSG]["+getTimeStamp4Log()+"]["+ msg.source().to_string() +"][--- MIH_Event_Unsubscribe.confirm"+ - "\\nstatus="+status2string(st).c_str()+ - "\\nLink="+link_id2string(link).c_str()+ - " --->]["+msg.destination().to_string()+"]\n"); - } - - // Display message parameters - log_(0, " - STATUS: ", status2string(st).c_str(), " (", st.get(), ")"); - log_(0, " - LINK_TUPLE_ID - Link identifier: ", link_id2string(link).c_str()); - if (evt) { - log_(0, " - MIH_EVT_LIST - Event List: ", evt2string(evt.get()).c_str()); - } - log_(0, ""); - - log_(0, "MIH_Event_Unsubscribe.confirm - End"); -} - -//----------------------------------------------------------------------------- -void mih_user::send_MIH_Link_Actions_request(const odtone::mih::link_id& link, odtone::mih::link_ac_type type) -//----------------------------------------------------------------------------- -{ - odtone::mih::message m; - odtone::mih::link_action_list lal; - odtone::mih::link_action_req link_act_req; - - link_act_req.id = link; - link_act_req.action.type = type; - - _last_link_action_type = type; - - // Initialize resource parameters - odtone::mih::resource_desc res; - - res.lid = link; // Link identifier - res.data_rate = 128000; // bit rate - res.jumbo = false; // jumbo disable - res.multicast = false; // multicast disable - - odtone::mih::qos qos; // Class Of Service - qos.value = 56; - res.qos_val = qos; - res.fid = 555; - -// // Flow identifier -// res.fid.src.ip = _mihf_ip; -// res.fid.src.port_val = _mihf_lport; -// -// if (mih_user::_current_link_action_request == 0) { -// res.fid.dst.ip = odtone::mih::ip_addr(odtone::mih::ip_addr::ipv6, -// "2001:0660:0382:0014:0335:0600:8014:9150"); // DUMMY -// } -// else if (mih_user::_current_link_action_request == 1) { -// res.fid.dst.ip = odtone::mih::ip_addr(odtone::mih::ip_addr::ipv6, -// "2001:0660:0382:0014:0335:0600:8014:9151"); // DUMMY -// } -// else if (mih_user::_current_link_action_request == 2) { -// res.fid.dst.ip = odtone::mih::ip_addr(odtone::mih::ip_addr::ipv6, -// "FF3E:0020:2001:0DB8:0000:0000:0000:0043"); // DUMMY -// res.multicast = true; -// } -// else if (mih_user::_current_link_action_request == 3) { -// res.fid.dst.ip = odtone::mih::ip_addr(odtone::mih::ip_addr::ipv6, -// "2001:0660:0382:0014:0335:0600:8014:9153"); // DUMMY -// } -// res.fid.dst.port_val = 1235; // DUMMY -// res.fid.transport = odtone::mih::proto_udp; - - link_act_req.action.param.param = res; - - link_act_req.ex_time = 0; - - lal.push_back(link_act_req); - - m << odtone::mih::request(odtone::mih::request::link_actions) - & odtone::mih::tlv_link_action_list(lal); - m.source(_mihuserid); - m.destination(_mihfid); - - log_(0, "[MSC_MSG]["+getTimeStamp4Log()+"]["+ m.source().to_string() +"][--- MIH_Link_Actions.request\\n"+link_actions_req2string(link_act_req)+" --->]["+m.destination().to_string()+"]\n"); - - _mihf.async_send(m, boost::bind(&mih_user::receive_handler, this, _1, _2)); - - log_(0, "MIH-User has sent Link_Actions.request to ", m.destination().to_string()); - log_(0, " - LINK_ID - Link identifier: ", link_id2string(link).c_str()); - log_(0, " - FLOW_ID - Flow identifier: ", res.fid); -//TEMP log_(0, " - FLOW_ID - Flow identifier: ", flow_id2string(link_act_req.action.param).c_str()); - log_(0, " - LINK_ACTIONS - Link Actions: " + link_actions_req2string(link_act_req) + "\n"); - - log_(0, "MIH_Link_Actions.request - SENT\n"); -} - -//----------------------------------------------------------------------------- -void mih_user::receive_MIH_Link_Actions_confirm(odtone::mih::message& msg) -//----------------------------------------------------------------------------- -{ - log_(0, "MIH_Link_Actions.confirm - RECEIVED - Begin\n"); - - odtone::mih::status st; - boost::optional larl; - - msg >> odtone::mih::confirm() - & odtone::mih::tlv_status(st) - & odtone::mih::tlv_link_action_rsp_list(larl); - - log_(0, "[MSC_MSG]["+getTimeStamp4Log()+"]["+ msg.source().to_string() +"][--- MIH_Link_Actions.confirm"+ - "\\nstatus="+status2string(st).c_str()+ - " --->]["+msg.destination().to_string()+"]\n"); - - // Display message parameters - log_(0, " - STATUS: ", status2string(st).c_str(), " (", st.get(), ")"); - if (larl) { - log_(0, " - LINK ACTION RSP LIST - Length:", larl.get().size()); - for (odtone::mih::link_action_rsp_list::iterator i = larl->begin(); i != larl->end(); i++) - { - log_(0, "\tLINK_ID: ", link_id2string(i->id).c_str(), - ", LINK_AC_RESULT: ", link_ac_result2string(i->result).c_str()); - } - } - log_(0, ""); - - // 1st scenario: Sequentially activate and deactivate each resource -#ifdef SCENARIO_1 - if (larl) { - odtone::mih::link_action_rsp *rsp = &larl->front(); - if (_current_link_action_request < _nb_of_link_action_requests) { - if (_last_link_action_type == odtone::mih::link_ac_type_link_activate_resources) { - if (rsp->result.get() == odtone::mih::link_ac_success) { - mih_user::send_MIH_Link_Actions_request(rsp->id, odtone::mih::link_ac_type_link_deactivate_resources); - _current_link_action_request += 1; - } - } - else if (_last_link_action_type == odtone::mih::link_ac_type_link_deactivate_resources) { - mih_user::send_MIH_Link_Actions_request(rsp->id, odtone::mih::link_ac_type_link_activate_resources); - } - } - else { // Ends the scenario - mih_user::send_MIH_Event_Unsubscribe_request(); - } - } -#endif // SCENARIO_1 - -#ifdef SCENARIO_2 - // 2nd scenario: Activate all resources, then deactivate all resources - if (larl.get().size() > 0) { - odtone::mih::link_action_rsp *rsp = &larl->front(); - if (++_current_link_action_request < _nb_of_link_action_requests) { - if (_last_link_action_type == odtone::mih::link_ac_type_link_activate_resources) { - mih_user::send_MIH_Link_Actions_request(rsp->id, odtone::mih::link_ac_type_link_activate_resources); - } - else if (_last_link_action_type == odtone::mih::link_ac_type_link_deactivate_resources) { - mih_user::send_MIH_Link_Actions_request(rsp->id, odtone::mih::link_ac_type_link_deactivate_resources); - } - } - else if (_last_link_action_type == odtone::mih::link_ac_type_link_activate_resources) { - _current_link_action_request = 0; - mih_user::send_MIH_Link_Actions_request(rsp->id, odtone::mih::link_ac_type_link_deactivate_resources); - } - else { // Ends the scenario - mih_user::send_MIH_Event_Unsubscribe_request(); - } - } -#endif // SCENARIO_2 - - log_(0, "MIH_Link_Actions.confirm - End\n"); -} - -//----------------------------------------------------------------------------- -int main(int argc, char** argv) -//----------------------------------------------------------------------------- -{ - odtone::setup_crash_handler(); - - try { - boost::asio::io_service ios; - - // declare MIH Usr available options - po::options_description desc(odtone::mih::octet_string("MIH Usr Configuration")); - desc.add_options() - ("help", "Display configuration options") - (odtone::sap::kConf_File, po::value()->default_value("mih_usr.conf"), "Configuration file") - (odtone::sap::kConf_Receive_Buffer_Len, po::value()->default_value(4096), "Receive buffer length") - (odtone::sap::kConf_Port, po::value()->default_value(1234), "Listening port") - (odtone::sap::kConf_MIH_SAP_id, po::value()->default_value("user"), "MIH-User ID") - (kConf_MIH_Commands, po::value()->default_value(""), "MIH-User supported commands") - (odtone::sap::kConf_MIHF_Ip, po::value()->default_value("127.0.0.1"), "Local MIHF IP address") - (odtone::sap::kConf_MIHF_Local_Port, po::value()->default_value(1025), "Local MIHF communication port") - (odtone::sap::kConf_MIH_SAP_dest, po::value()->default_value("mihf1"), "MIHF destination"); - - odtone::mih::config cfg(desc); - cfg.parse(argc, argv, odtone::sap::kConf_File); - - if (cfg.help()) { - std::cerr << desc << std::endl; - return EXIT_SUCCESS; - } - - mih_user usr(cfg, ios); - - ios.run(); - - } catch(std::exception& e) { - log_(0, "exception: ", e.what()); - } -} - -// EOF //////////////////////////////////////////////////////////////////////// - diff --git a/openair3/RAL-LTE/RAL-DUMMY/802.21-SCENARIO/sendUDP-01 b/openair3/RAL-LTE/RAL-DUMMY/802.21-SCENARIO/sendUDP-01 deleted file mode 100755 index d50c3d3a10..0000000000 Binary files a/openair3/RAL-LTE/RAL-DUMMY/802.21-SCENARIO/sendUDP-01 and /dev/null differ diff --git a/openair3/RAL-LTE/RAL-DUMMY/802.21-SCENARIO/sendUDP-FF b/openair3/RAL-LTE/RAL-DUMMY/802.21-SCENARIO/sendUDP-FF deleted file mode 100755 index 84d4f1246f..0000000000 Binary files a/openair3/RAL-LTE/RAL-DUMMY/802.21-SCENARIO/sendUDP-FF and /dev/null differ diff --git a/openair3/RAL-LTE/RAL-DUMMY/INCLUDE/eRALlte_constants.h b/openair3/RAL-LTE/RAL-DUMMY/INCLUDE/eRALlte_constants.h deleted file mode 100644 index 5939378a7f..0000000000 --- a/openair3/RAL-LTE/RAL-DUMMY/INCLUDE/eRALlte_constants.h +++ /dev/null @@ -1,81 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ - -#ifndef __RAL_LTE_CONS_H__ -#define __RAL_LTE_CONS_H__ - -#include - -/****************************************************************************/ -/********************* G L O B A L C O N S T A N T S *******************/ -/****************************************************************************/ - -//----------------------------------------------------------------------------- -#define DEFAULT_LOCAL_PORT_RAL "1235" -#define DEFAULT_REMOTE_PORT_MIHF "1025" -#define DEFAULT_IP_ADDRESS_MIHF "127.0.0.1" -#define DEFAULT_IP_ADDRESS_RAL "127.0.0.1" -#define DEFAULT_LINK_ID "link" -#define DEFAULT_MIHF_ID "mihf1" -#define DEFAULT_ADDRESS_3GPP "0335060080149150" - -#define DEFAULT_PLMN "208020" -#define DEFAULT_MCC "208" // France -#define DEFAULT_MNC "020" // Bouygues Telecom - -//----------------------------------------------------------------------------- -#define MIH_C_RADIO_POLLING_INTERVAL_MICRO_SECONDS 50000 -#define MIH_C_RADIO_POLLING_INTERVAL_SECONDS 0 - -//----------------------------------------------------------------------------- -// Constants for scenario -#define PREDEFINED_MIH_NETWORK_ID "eurecom" -#define PREDEFINED_MIH_NETAUX_ID "netaux" - -#define PREDEFINED_CHANNEL_ID 2 -#define PREDEFINED_CLASSES_SERVICE_SUPPORTED 2 -#define PREDEFINED_QUEUES_SUPPORTED 2 - -#define PREDEFINED_LINK_DETECTED_INDICATION_SIG_STRENGTH 5 -#define PREDEFINED_LINK_DETECTED_INDICATION_SINR 45 -#define PREDEFINED_LINK_DETECTED_INDICATION_LINK_DATA_RATE 1000 - -/****************************************************************************/ -/************************ G L O B A L T Y P E S ************************/ -/****************************************************************************/ - -/****************************************************************************/ -/******************** G L O B A L V A R I A B L E S ********************/ -/****************************************************************************/ - -/****************************************************************************/ -/****************** E X P O R T E D F U N C T I O N S ******************/ -/****************************************************************************/ - -#endif diff --git a/openair3/RAL-LTE/RAL-DUMMY/INCLUDE/eRALlte_mih_msg.h b/openair3/RAL-LTE/RAL-DUMMY/INCLUDE/eRALlte_mih_msg.h deleted file mode 100644 index 4ad63a80f8..0000000000 --- a/openair3/RAL-LTE/RAL-DUMMY/INCLUDE/eRALlte_mih_msg.h +++ /dev/null @@ -1,188 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ -/*! \file eRALlte_mih_msg.h - * \brief - * \author BRIZZOLA Davide, GAUTHIER Lionel, MAUREL Frederic, WETTERWALD Michelle - * \date 2012 - * \version - * \note - * \bug - * \warning - */ - -#ifndef __RAL_LTE_MIH_MSG_H__ -#define __RAL_LTE_MIH_MSG_H__ - -#include - -#include "MIH_C_Types.h" -#include "MIH_C_header_codec.h" -#include "MIH_C_Link_Primitives.h" - -/****************************************************************************/ -/********************* G L O B A L C O N S T A N T S *******************/ -/****************************************************************************/ - -/****************************************************************************/ -/************************ G L O B A L T Y P E S ************************/ -/****************************************************************************/ - -/****************************************************************************/ -/******************** G L O B A L V A R I A B L E S ********************/ -/****************************************************************************/ - -char* g_mihf_ip_address; -char* g_mihf_remote_port; -int g_sockd_mihf; - -char* g_ral_ip_address; -char* g_ral_listening_port_for_mihf; - -char* g_link_id; -char* g_mihf_id; - -/****************************************************************************/ -/****************** E X P O R T E D F U N C T I O N S ******************/ -/****************************************************************************/ - -int eRALlte_mihf_connect(void); - -int eRALlte_mih_link_process_message(void); - -/* - * -------------------------------------------------------------------------- - * MIH service management messages - * -------------------------------------------------------------------------- - */ - -/* MIH_C_MESSAGE_LINK_REGISTER_INDICATION_ID */ -void eRALlte_send_link_register_indication( - MIH_C_TRANSACTION_ID_T *transaction_idP); - -/* MIH_C_MESSAGE_LINK_CAPABILITY_DISCOVER_CONFIRM_ID */ -void eRALlte_send_capability_discover_confirm( - MIH_C_TRANSACTION_ID_T *tidP, - MIH_C_STATUS_T *statusP, - MIH_C_LINK_EVENT_LIST_T *link_evt_listP, - MIH_C_LINK_CMD_LIST_T *link_cmd_listP); - -/* MIH_C_MESSAGE_LINK_EVENT_SUBSCRIBE_CONFIRM_ID */ -void eRALlte_send_event_subscribe_confirm( - MIH_C_TRANSACTION_ID_T *transaction_idP, - MIH_C_STATUS_T *statusP, - MIH_C_LINK_EVENT_LIST_T *link_event_listP); - -/* MIH_C_MESSAGE_LINK_EVENT_UNSUBSCRIBE_CONFIRM_ID */ -void eRALlte_send_event_unsubscribe_confirm( - MIH_C_TRANSACTION_ID_T *transaction_idP, - MIH_C_STATUS_T *statusP, - MIH_C_LINK_EVENT_LIST_T *link_event_listP); - -/* - * -------------------------------------------------------------------------- - * MIH event messages - * -------------------------------------------------------------------------- - */ - -/* MIH_C_MESSAGE_LINK_DETECTED_INDICATION_ID */ -void eRALlte_send_link_detected_indication( - MIH_C_TRANSACTION_ID_T *transaction_idP, - MIH_C_LINK_DET_INFO_T *link_detected_infoP); - -/* MIH_C_MESSAGE_LINK_UP_INDICATION_ID */ -void eRALlte_send_link_up_indication( - MIH_C_TRANSACTION_ID_T *transaction_idP, - MIH_C_LINK_TUPLE_ID_T *link_identifierP, - MIH_C_LINK_ADDR_T *old_access_routerP, - MIH_C_LINK_ADDR_T *new_access_routerP, - MIH_C_IP_RENEWAL_FLAG_T *ip_renewal_flagP, - MIH_C_IP_MOB_MGMT_T *mobility_mngtP); - -/* MIH_C_MESSAGE_LINK_DOWN_INDICATION_ID */ -void eRALlte_send_link_down_indication( - MIH_C_TRANSACTION_ID_T *transaction_idP, - MIH_C_LINK_TUPLE_ID_T *link_identifierP, - MIH_C_LINK_ADDR_T *old_access_routerP, - MIH_C_LINK_DN_REASON_T *reason_codeP); - -/* MIH_C_MESSAGE_LINK_PARAMETERS_REPORT_INDICATION_ID */ -void eRALlte_send_link_parameters_report_indication( - MIH_C_TRANSACTION_ID_T *transaction_idP, - MIH_C_LINK_TUPLE_ID_T *link_identifierP, - MIH_C_LINK_PARAM_RPT_LIST_T *link_parameters_report_listP); - -/* MIH_C_MESSAGE_LINK_GOING_DOWN_INDICATION_ID */ -void eRALlte_send_link_going_down_indication( - MIH_C_TRANSACTION_ID_T *transaction_idP, - MIH_C_LINK_TUPLE_ID_T *link_identifierP, - MIH_C_UNSIGNED_INT2_T *time_intervalP, - MIH_C_LINK_GD_REASON_T *link_going_down_reasonP); - -/* MIH_C_MESSAGE_LINK_HANDOVER_IMMINENT_INDICATION_ID */ - -/* MIH_C_MESSAGE_LINK_HANDOVER_COMPLETE_INDICATION_ID */ - -/* MIH_C_MESSAGE_LINK_PDU_TRANSMIT_STATUS_INDICATION_ID */ - -/* - * -------------------------------------------------------------------------- - * MIH command messages - * -------------------------------------------------------------------------- - */ - -/* MIH_C_MESSAGE_LINK_GET_PARAMETERS_CONFIRM_ID */ -void eRALlte_send_get_parameters_confirm( - MIH_C_TRANSACTION_ID_T *transaction_idP, - MIH_C_STATUS_T *statusP, - MIH_C_LINK_PARAM_LIST_T *link_parameters_status_listP, - MIH_C_LINK_STATES_RSP_LIST_T *link_states_response_listP, - MIH_C_LINK_DESC_RSP_LIST_T *link_descriptors_response_listP); - -/* MIH_C_MESSAGE_LINK_CONFIGURE_THRESHOLDS_CONFIRM_ID */ -void eRALlte_send_configure_thresholds_confirm( - MIH_C_TRANSACTION_ID_T *transaction_idP, - MIH_C_STATUS_T *statusP, - MIH_C_LINK_CFG_STATUS_LIST_T *link_configure_status_listP); - -/* MIH_C_MESSAGE_LINK_ACTION_CONFIRM_ID */ -void eRALlte_send_link_action_confirm( - MIH_C_TRANSACTION_ID_T *transaction_idP, - MIH_C_STATUS_T *statusP, - MIH_C_LINK_SCAN_RSP_LIST_T *scan_response_setP, - MIH_C_LINK_AC_RESULT_T *link_action_resultP); - -/* - * -------------------------------------------------------------------------- - * MIH information messages - * -------------------------------------------------------------------------- - */ - -/****************************************************************************/ - -#endif diff --git a/openair3/RAL-LTE/RAL-DUMMY/INCLUDE/eRALlte_proto.h b/openair3/RAL-LTE/RAL-DUMMY/INCLUDE/eRALlte_proto.h deleted file mode 100644 index 940ed460d2..0000000000 --- a/openair3/RAL-LTE/RAL-DUMMY/INCLUDE/eRALlte_proto.h +++ /dev/null @@ -1,90 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ -/*! \file eRALlte_proto.h - * \brief - * \author BRIZZOLA Davide, GAUTHIER Lionel, MAUREL Frederic, WETTERWALD Michelle - * \date 2012 - * \version - * \note - * \bug - * \warning - */ - -#ifndef __RAL_LTE_PROTO_H__ -#define __RAL_LTE_PROTO_H__ - -#include "eRALlte_variables.h" - -/****************************************************************************/ -/********************* G L O B A L C O N S T A N T S *******************/ -/****************************************************************************/ - -/****************************************************************************/ -/************************ G L O B A L T Y P E S ************************/ -/****************************************************************************/ - -/****************************************************************************/ -/******************** G L O B A L V A R I A B L E S ********************/ -/****************************************************************************/ - -/****************************************************************************/ -/****************** E X P O R T E D F U N C T I O N S ******************/ -/****************************************************************************/ - -/* - * Functions defined in eRALlte_NAS.c - */ - -void eRALlte_NAS_get_MTs_list(void); -int eRALlte_NAS_update_MTs_list(void); - -int eRALlte_NAS_process_message(void); -int eRALlte_NAS_send_rb_establish_request(int mt_ix, int ch_ix); -int eRALlte_NAS_send_rb_release_request(int mt_ix, int ch_ix); - -#ifdef RAL_REALTIME -int TQAL_process_NAS_message(int ioctl_obj, int ioctl_cmd, - int mt_ix, int ch_ix); -#endif - -/* - * Functions defined in eRALlte_process.c - */ -int eRALlte_process_find_channel(unsigned int cnxid, int* mt_ix, int* ch_ix); -int eRALlte_process_find_new_channel(int mt_ix); -void eRALlte_process_clean_channel(struct ral_lte_channel* pchannel); -void eRALlte_process_verify_pending_mt_status(void); -char* eRALlte_process_mt_addr_to_string(const unsigned char* mt_addr); -void eRALlte_process_mt_addr_to_l2id(const unsigned char* mt_addr, unsigned int* l2id); -int eRALlte_process_cmp_mt_addr(const char* mt_addr, const char* l2id); -int eRALlte_process_find_mt_by_addr(const char* mt_addr); -int eRALlte_process_map_qos(int mt_ix, int ch_ix); - -#endif - diff --git a/openair3/RAL-LTE/RAL-DUMMY/INCLUDE/eRALlte_variables.h b/openair3/RAL-LTE/RAL-DUMMY/INCLUDE/eRALlte_variables.h deleted file mode 100644 index 48d4d1f645..0000000000 --- a/openair3/RAL-LTE/RAL-DUMMY/INCLUDE/eRALlte_variables.h +++ /dev/null @@ -1,239 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ - -#ifndef __RAL_LTE_VAR_H__ -#define __RAL_LTE_VAR_H__ - -#include "rrc_d_types.h" -#include "nas_rg_netlink.h" - -#include "MIH_C_Types.h" -#include "MIH_C_header_codec.h" -#include "MIH_C_Link_Primitives.h" - -/****************************************************************************/ -/********************* G L O B A L C O N S T A N T S *******************/ -/****************************************************************************/ - -#define RAL_DUMMY -//#define RAL_REALTIME - - -/* Radio Bearer attachment status; must be the same as NAS interface */ -#define RB_CONNECTED NAS_CONNECTED -#define RB_DISCONNECTED NAS_DISCONNECTED - -#ifdef RAL_REALTIME -/* - * -------------------------------------------------------------------------- - * Arguments ioctl command - * -------------------------------------------------------------------------- - */ - -//arg[0] -#define IO_OBJ_STATS 0 -#define IO_OBJ_CNX 1 -#define IO_OBJ_RB 2 -#define IO_OBJ_MC 3 // multicast -//arg[1] -#define IO_CMD_ADD 0 -#define IO_CMD_DEL 1 -#define IO_CMD_LIST 2 - -#endif // RAL_REALTIME - -/* - * -------------------------------------------------------------------------- - * Access Router configuration - * -------------------------------------------------------------------------- - */ - -/* Maximum number of supported Radio Bearers */ -#define RAL_MAX_RB NAS_RG_NETL_MAX_RABS - -/* Maximum number of supported Mobile Terminals */ -#define RAL_MAX_MT NAS_RG_NETL_MAX_MTs - -/* Maximum number of Radio Bearers per User Equipment */ -#define RAL_MAX_RB_PER_UE 32 - -/* Default Radio Bearer identifier */ -#define RAL_DEFAULT_RAB_ID 6 // RBID 5 => MBMS, 6 => DEFAULTRAB, 7+ => others - -/* Default Radio Bearer QoS value */ -#define RAL_DEFAULT_RAB_QoS 2 // RRC_QOS_CONV_64_64 - -/* Default current cell identifier */ -#define RAL_DEFAULT_CELL_ID 5 - -/* Default bit rates */ -#define RAL_BITRATE_32k 32000 -#define RAL_BITRATE_64k 64000 -#define RAL_BITRATE_128k 128000 -#define RAL_BITRATE_256k 256000 -#define RAL_BITRATE_320k 320000 -#define RAL_BITRATE_384k 384000 -#define RAL_BITRATE_440k 440000 - -/* Public Lan Mobile Network */ -#define DEFAULT_PLMN_SIZE 3 -#ifdef DEFINE_GLOBAL_CONSTANTS -const u_int8_t DefaultPLMN[DEFAULT_PLMN_SIZE] = {0x20, 0x80, 0x20}; -#else -extern const u_int8_t DefaultPLMN[DEFAULT_PLMN_SIZE]; -#endif - -/* - * Destination addresses - * --------------------- - */ -enum { - ADDR_MT1 = 0, - ADDR_MT2, - ADDR_MBMS, - ADDR_MT3, - ADDR_MAX -}; - -#ifdef DEFINE_GLOBAL_CONSTANTS // Modified MW 23/05/13 -const char DestIpv6Addr[ADDR_MAX][16] = { // DUMMY - // MT1 - 2001:660:382:14:335:600:8014:9150 - {0x20,0x01,0x06,0x60,0x03,0x82,0x00,0x14,0x03,0x35,0x06,0x00,0x80,0x14,0x91,0x50}, - // MT2 - 2001:660:382:14:335:600:8014:9151 - {0x20,0x01,0x06,0x60,0x03,0x82,0x00,0x14,0x03,0x35,0x06,0x00,0x80,0x14,0x91,0x51}, - // Multicast - FF3E:20:2001:DB8::43 - {0xFF,0x3E,0x00,0x20,0x20,0x01,0x0D,0xB8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x43}, - // MT3 - 2001:660:382:14:335:600:8014:9153 - {0x20,0x01,0x06,0x60,0x03,0x82,0x00,0x14,0x03,0x35,0x06,0x00,0x80,0x14,0x91,0x53} -}; -#else -extern const char DestIpv6Addr[ADDR_MAX][16]; -#endif - -/****************************************************************************/ -/************************ G L O B A L T Y P E S ************************/ -/****************************************************************************/ - -/* List of link action types */ -TYPEDEF_BITMAP8(MIH_C_LINK_AC_TYPE_LIST) - -/* - * Radio Bearer data - */ -struct ral_lte_channel { - uint32_t cnx_id; - uint8_t multicast; - // MIHF parameters ix=0 UPLINK, ix=1 DOWNLINK - uint16_t flowId[2]; - uint16_t classId[2]; - float resBitrate[2]; - float meanBitrate[2]; - float bktDepth[2]; - float pkBitrate[2]; - float MTU[2]; - //NAS driver parameters - uint16_t rbId; - uint16_t RadioQoSclass; - uint16_t dscpUL; - uint16_t dscpDL; - uint16_t nas_state; - uint16_t status; -}; - -/* - * Mobile Terminal data - */ -struct ral_lte_mt { - /* The identifier of the link that is associated with a PoA */ - MIH_C_LINK_TUPLE_ID_T ltid; - uint8_t ipv6_addr[16]; - uint32_t ipv6_l2id[2]; - uint32_t ue_id; - struct ral_lte_channel radio_channel[RAL_MAX_RB]; - int num_rbs; - int num_class; - int nas_state; - int mt_state; -}; - -/* - * Multicast data - */ -struct ral_lte_mcast { - /* The identifier of the multicast link that is associated with a PoA */ - MIH_C_LINK_TUPLE_ID_T ltid; - struct ral_lte_channel radio_channel; - uint8_t mc_group_addr[16]; -}; - -/* - * RAL LTE internal data - */ -struct ral_lte_priv { - - uint8_t plmn[3]; - int curr_cellId; - int num_connected_mts; - - uint8_t pending_req_flag; - uint8_t pending_req_mt_ix; - uint8_t pending_req_ch_ix; - MIH_C_FLOW_ID_T pending_req_fid; - - struct ral_lte_mt pending_mt; - int pending_mt_timer; - - struct ral_lte_mt mt[RAL_MAX_MT]; - struct ral_lte_mcast mcast; - - /* MIH-INTERFACE data */ - MIH_C_LINK_AC_TYPE_LIST_T mih_supported_link_action_list; - MIH_C_LINK_EVENT_LIST_T mih_supported_link_event_list; - MIH_C_LINK_CMD_LIST_T mih_supported_link_command_list; - - MIH_C_LINK_EVENT_LIST_T mih_subscribe_req_event_list; - - MIH_C_LINK_AC_TYPE_T pending_req_action; - MIH_C_STATUS_T pending_req_status; - MIH_C_LINK_AC_RESULT_T pending_req_ac_result; - MIH_C_TRANSACTION_ID_T pending_req_transaction_id; -}; - -/****************************************************************************/ -/******************** G L O B A L V A R I A B L E S ********************/ -/****************************************************************************/ - -extern struct ral_lte_priv *ralpriv; - -/****************************************************************************/ -/****************** E X P O R T E D F U N C T I O N S ******************/ -/****************************************************************************/ - -#endif - diff --git a/openair3/RAL-LTE/RAL-DUMMY/INCLUDE/mRALlte_action.h b/openair3/RAL-LTE/RAL-DUMMY/INCLUDE/mRALlte_action.h deleted file mode 100755 index 0879be98fa..0000000000 --- a/openair3/RAL-LTE/RAL-DUMMY/INCLUDE/mRALlte_action.h +++ /dev/null @@ -1,74 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ -/*! \file mRALlte_action.h - * \brief - * \author BRIZZOLA Davide, GAUTHIER Lionel, MAUREL Frederic, WETTERWALD Michelle - * \date 2012 - * \version - * \note - * \bug - * \warning - */ - -#ifndef __MRALLTE_ACTION_H__ -# define __MRALLTE_ACTION_H__ -//----------------------------------------------------------------------------- -# ifdef MRALLTE_ACTION_C -# define private_mRALlte_action(x) x -# define protected_mRALlte_action(x) x -# define public_mRALlte_action(x) x -# else -# ifdef MRAL_MODULE -# define private_mRALlte_action(x) -# define protected_mRALlte_action(x) extern x -# define public_mRALlte_action(x) extern x -# else -# define private_mRALlte_action(x) -# define protected_mRALlte_action(x) -# define public_mRALlte_action(x) extern x -# endif -# endif -//----------------------------------------------------------------------------- -#include -#include -#include -#include -#include -#include -#include -//----------------------------------------------------------------------------- -#include "MIH_C.h" -#include "mRALlte_constants.h" -#include "mRALlte_mih_msg.h" -//----------------------------------------------------------------------------- -protected_mRALlte_action(MIH_C_LINK_ACTION_T g_link_action;) -//----------------------------------------------------------------------------- -protected_mRALlte_action(void mRALlte_action_request(MIH_C_Message_Link_Action_request_t* messageP);) - -#endif diff --git a/openair3/RAL-LTE/RAL-DUMMY/INCLUDE/mRALlte_constants.h b/openair3/RAL-LTE/RAL-DUMMY/INCLUDE/mRALlte_constants.h deleted file mode 100755 index 6899c9f835..0000000000 --- a/openair3/RAL-LTE/RAL-DUMMY/INCLUDE/mRALlte_constants.h +++ /dev/null @@ -1,57 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ -#ifndef __MRALLTE_CONSTANTS_H__ -#define __MRALLTE_CONSTANTS_H__ -//----------------------------------------------------------------------------- -#define DEFAULT_LOCAL_PORT_RAL "1235" -#define DEFAULT_REMOTE_PORT_MIHF "1025" -#define DEFAULT_IP_ADDRESS_MIHF "127.0.0.1" -#define DEFAULT_IP_ADDRESS_RAL "127.0.0.1" -#define DEFAULT_LINK_ID "link" //"lte" -#define DEFAULT_MIHF_ID "mihf1" -#define DEFAULT_ADDRESS_3GPP "0335060080149150" - -//----------------------------------------------------------------------------- -#define MIH_C_RADIO_POLLING_INTERVAL_MICRO_SECONDS 50000 -#define MIH_C_RADIO_POLLING_INTERVAL_SECONDS 0 -//----------------------------------------------------------------------------- -// Constants for scenario -#define PREDEFINED_MIH_NETWORK_ID "eurecom" -#define PREDEFINED_MIH_NETAUX_ID "netaux" - -#define PREDEFINED_CHANNEL_ID 2 -#define PREDEFINED_CLASSES_SERVICE_SUPPORTED 2 -#define PREDEFINED_QUEUES_SUPPORTED 2 - -#define PREDEFINED_LINK_GOING_DOWN_INDICATION_SIG_STRENGTH 20 -#define PREDEFINED_LINK_DETECTED_INDICATION_SIG_STRENGTH 10 -#define PREDEFINED_LINK_DETECTED_INDICATION_SINR 45 -#define PREDEFINED_LINK_DETECTED_INDICATION_LINK_DATA_RATE 1000 - -#endif diff --git a/openair3/RAL-LTE/RAL-DUMMY/INCLUDE/mRALlte_get.h b/openair3/RAL-LTE/RAL-DUMMY/INCLUDE/mRALlte_get.h deleted file mode 100755 index 417ba9ebb6..0000000000 --- a/openair3/RAL-LTE/RAL-DUMMY/INCLUDE/mRALlte_get.h +++ /dev/null @@ -1,70 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ -/*! \file mRALlte_get.h - * \brief - * \author BRIZZOLA Davide, GAUTHIER Lionel, MAUREL Frederic, WETTERWALD Michelle - * \date 2012 - * \version - * \note - * \bug - * \warning - */ - -#ifndef __MRALLTE_GET_H__ -# define __MRALLTE_GET_H__ -//----------------------------------------------------------------------------- -# ifdef MRALLTE_GET_C -# define private_mRALlte_get(x) x -# define protected_mRALlte_get(x) x -# define public_mRALlte_get(x) x -# else -# ifdef MRAL_MODULE -# define private_mRALlte_get(x) -# define protected_mRALlte_get(x) extern x -# define public_mRALlte_get(x) extern x -# else -# define private_mRALlte_get(x) -# define protected_mRALlte_get(x) -# define public_mRALlte_get(x) extern x -# endif -# endif -//----------------------------------------------------------------------------- -#include -#include -#include -#include -#include -#include -#include -//----------------------------------------------------------------------------- -#include "MIH_C.h" -//----------------------------------------------------------------------------- -public_mRALlte_get(void MIH_C_3GPP_ADDR_load_3gpp_str_address(MIH_C_3GPP_ADDR_T* _3gpp_addrP, u_int8_t* strP);) - -#endif diff --git a/openair3/RAL-LTE/RAL-DUMMY/INCLUDE/mRALlte_main.h b/openair3/RAL-LTE/RAL-DUMMY/INCLUDE/mRALlte_main.h deleted file mode 100755 index 59dfdfcb8a..0000000000 --- a/openair3/RAL-LTE/RAL-DUMMY/INCLUDE/mRALlte_main.h +++ /dev/null @@ -1,80 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ -/*! \file mRALlte_main.h - * \brief This file defines the prototypes of the functions for starting the module mRALlteInt. - * \author BRIZZOLA Davide, GAUTHIER Lionel, MAUREL Frederic, WETTERWALD Michelle - * \date 2012 - * \version - * \note - * \bug - * \warning - */ - -#ifndef __MRALLTE_MAIN_H__ -# define __MRALLTE_MAIN_H__ -//----------------------------------------------------------------------------- -# ifdef MRALLTE_MAIN_C -# define private_mRALlte_main(x) x -# define protected_mRALlte_main(x) x -# define public_mRALlte_main(x) x -# else -# ifdef MRAL_MODULE -# define private_mRALlte_main(x) -# define protected_mRALlte_main(x) extern x -# define public_mRALlte_main(x) extern x -# else -# define private_mRALlte_main(x) -# define protected_mRALlte_main(x) -# define public_mRALlte_main(x) extern x -# endif -# endif -//----------------------------------------------------------------------------- -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -//----------------------------------------------------------------------------- -#endif - - - - - - diff --git a/openair3/RAL-LTE/RAL-DUMMY/INCLUDE/mRALlte_mih_msg.h b/openair3/RAL-LTE/RAL-DUMMY/INCLUDE/mRALlte_mih_msg.h deleted file mode 100755 index 19a32b8b98..0000000000 --- a/openair3/RAL-LTE/RAL-DUMMY/INCLUDE/mRALlte_mih_msg.h +++ /dev/null @@ -1,155 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ -/*! \file mRALlte_mih_msg.h - * \brief This file defines the prototypes of the functions for coding and decoding of MIH Link messages. - * \author BRIZZOLA Davide, GAUTHIER Lionel, MAUREL Frederic, WETTERWALD Michelle - * \date 2012 - * \version - * \note - * \bug - * \warning - */ - -#ifndef __MRALLTE_MIH_MSG_H__ -# define __MRALLTE_MIH_MSG_H__ -//----------------------------------------------------------------------------- -# ifdef MRALLTE_MIH_MSG_C -# define private_mRALlte_mih_msg(x) x -# define protected_mRALlte_mih_msg(x) x -# define public_mRALlte_mih_msg(x) x -# else -# ifdef MRAL_MODULE -# define private_mRALlte_mih_msg(x) -# define protected_mRALlte_mih_msg(x) extern x -# define public_mRALlte_mih_msg(x) extern x -# else -# define private_mRALlte_mih_msg(x) -# define protected_mRALlte_mih_msg(x) -# define public_mRALlte_mih_msg(x) extern x -# endif -# endif -//----------------------------------------------------------------------------- -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -//----------------------------------------------------------------------------- -#include "MIH_C.h" -#include "mRALlte_constants.h" -#include "mRALlte_get.h" -//----------------------------------------------------------------------------- - -//----------------------------------------------------------------------------- -#define MSG_CODEC_RECV_BUFFER_SIZE 16400 -#define MSG_CODEC_SEND_BUFFER_SIZE 16400 -//----------------------------------------------------------------------------- -protected_mRALlte_mih_msg(char* g_mihf_remote_port;) -protected_mRALlte_mih_msg(char* g_mihf_ip_address;) -protected_mRALlte_mih_msg(char* g_ral_ip_address;) -protected_mRALlte_mih_msg(char* g_ral_listening_port_for_mihf;) -protected_mRALlte_mih_msg(char* g_link_id;) -protected_mRALlte_mih_msg(char* g_mihf_id;) -protected_mRALlte_mih_msg(int g_sockd_mihf;) -protected_mRALlte_mih_msg(char g_msg_print_buffer[8192];) - -//----------------------------------------------------------------------------- -protected_mRALlte_mih_msg(u_int8_t g_msg_codec_recv_buffer[MSG_CODEC_RECV_BUFFER_SIZE];) -protected_mRALlte_mih_msg(u_int8_t g_msg_codec_send_buffer[MSG_CODEC_SEND_BUFFER_SIZE];) -//----------------------------------------------------------------------------- -public_mRALlte_mih_msg( int mRALlte_send_to_mih(u_int8_t *bufferP, size_t lenP);) - -protected_mRALlte_mih_msg( void mRALlte_print_buffer (char * bufferP, int lengthP);) -protected_mRALlte_mih_msg( int mRALlte_mihf_connect (void);) -protected_mRALlte_mih_msg( void mRALlte_send_link_register_indication (MIH_C_TRANSACTION_ID_T *transaction_idP);) -protected_mRALlte_mih_msg( void mRALlte_send_link_detected_indication (MIH_C_TRANSACTION_ID_T *transaction_idP, - MIH_C_LINK_DET_INFO_T *link_detected_infoP);) - -protected_mRALlte_mih_msg( void mRALlte_send_link_up_indication(MIH_C_TRANSACTION_ID_T *transaction_idP, - MIH_C_LINK_TUPLE_ID_T *link_identifierP, - MIH_C_LINK_ADDR_T *old_access_routerP, - MIH_C_LINK_ADDR_T *new_access_routerP, - MIH_C_IP_RENEWAL_FLAG_T *ip_renewal_flagP, - MIH_C_IP_MOB_MGMT_T *mobility_management_supportP);) - -protected_mRALlte_mih_msg( void mRALlte_send_link_parameters_report_indication(MIH_C_TRANSACTION_ID_T *transaction_idP, - MIH_C_LINK_TUPLE_ID_T *link_identifierP, - MIH_C_LINK_PARAM_RPT_LIST_T *link_parameters_report_listP);) - -protected_mRALlte_mih_msg( void mRALlte_send_link_going_down_indication(MIH_C_TRANSACTION_ID_T *transaction_idP, - MIH_C_LINK_TUPLE_ID_T *link_identifierP, - MIH_C_UNSIGNED_INT2_T *time_intervalP, - MIH_C_LINK_GD_REASON_T *link_going_down_reasonP);) - -protected_mRALlte_mih_msg( void mRALlte_send_link_down_indication(MIH_C_TRANSACTION_ID_T *transaction_idP, - MIH_C_LINK_TUPLE_ID_T *link_identifierP, - MIH_C_LINK_ADDR_T *old_access_routerP, - MIH_C_LINK_DN_REASON_T *reason_codeP);) - -protected_mRALlte_mih_msg( void mRALlte_send_link_action_confirm(MIH_C_TRANSACTION_ID_T *transaction_idP, - MIH_C_STATUS_T *statusP, - MIH_C_LINK_SCAN_RSP_LIST_T *scan_response_setP, - MIH_C_LINK_AC_RESULT_T *link_action_resultP);) - -protected_mRALlte_mih_msg( void mRALte_send_capability_discover_confirm(MIH_C_TRANSACTION_ID_T *transaction_idP, - MIH_C_STATUS_T *statusP, - MIH_C_LINK_EVENT_LIST_T *supported_link_event_listP, - MIH_C_LINK_CMD_LIST_T *supported_link_command_listP);) - -protected_mRALlte_mih_msg( void mRALte_send_event_subscribe_confirm (MIH_C_TRANSACTION_ID_T *transaction_idP, - MIH_C_STATUS_T *statusP, - MIH_C_LINK_EVENT_LIST_T *response_link_event_listP);) - -protected_mRALlte_mih_msg( void mRALte_send_event_unsubscribe_confirm (MIH_C_TRANSACTION_ID_T *transaction_idP, - MIH_C_STATUS_T *statusP, - MIH_C_LINK_EVENT_LIST_T *response_link_event_listP);) - -protected_mRALlte_mih_msg( void mRALte_send_configure_thresholds_confirm(MIH_C_TRANSACTION_ID_T *transaction_idP, - MIH_C_STATUS_T *statusP, - MIH_C_LINK_CFG_STATUS_LIST_T *link_configure_status_listP);) - -protected_mRALlte_mih_msg( void mRALte_send_get_parameters_confirm (MIH_C_TRANSACTION_ID_T *transaction_idP, - MIH_C_STATUS_T *statusP, - MIH_C_LINK_PARAM_LIST_T *link_parameters_status_listP, - MIH_C_LINK_STATES_RSP_LIST_T *link_states_response_listP, - MIH_C_LINK_DESC_RSP_LIST_T *link_descriptors_response_listP);) - -private_mRALlte_mih_msg( int mRALlte_mih_link_msg_decode (Bit_Buffer_t* bbP, MIH_C_Message_Wrapper_t *message_wrapperP);) -protected_mRALlte_mih_msg( int mRALlte_mih_link_process_message (void);) -#endif diff --git a/openair3/RAL-LTE/RAL-DUMMY/INCLUDE/mRALlte_parameters.h b/openair3/RAL-LTE/RAL-DUMMY/INCLUDE/mRALlte_parameters.h deleted file mode 100755 index fa55f4bfde..0000000000 --- a/openair3/RAL-LTE/RAL-DUMMY/INCLUDE/mRALlte_parameters.h +++ /dev/null @@ -1,73 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ -/*! \file mRALlte_parameters.h - * \brief - * \author BRIZZOLA Davide, GAUTHIER Lionel, MAUREL Frederic, WETTERWALD Michelle - * \date 2012 - * \version - * \note - * \bug - * \warning - */ - -#ifndef __MRALLTE_PARAMETERS_H__ -# define __MRALLTE_PARAMETERS_H__ -//----------------------------------------------------------------------------- -# ifdef MRALLTE_PARAMETERS_C -# define private_mRALlte_parameters(x) x -# define protected_mRALlte_parameters(x) x -# define public_mRALlte_parameters(x) x -# else -# ifdef MRAL_MODULE -# define private_mRALlte_parameters(x) -# define protected_mRALlte_parameters(x) extern x -# define public_mRALlte_parameters(x) extern x -# else -# define private_mRALlte_parameters(x) -# define protected_mRALlte_parameters(x) -# define public_mRALlte_parameters(x) extern x -# endif -# endif -//----------------------------------------------------------------------------- -#include -#include -#include -#include -#include -#include -#include -//----------------------------------------------------------------------------- -#include "MIH_C.h" -//----------------------------------------------------------------------------- -#include "mRALlte_constants.h" -#include "mRALlte_mih_msg.h" -//----------------------------------------------------------------------------- -protected_mRALlte_parameters(void mRALlte_get_parameters_request(MIH_C_Message_Link_Get_Parameters_request_t* messageP);) - -#endif diff --git a/openair3/RAL-LTE/RAL-DUMMY/INCLUDE/mRALlte_subscribe.h b/openair3/RAL-LTE/RAL-DUMMY/INCLUDE/mRALlte_subscribe.h deleted file mode 100755 index 82a60468de..0000000000 --- a/openair3/RAL-LTE/RAL-DUMMY/INCLUDE/mRALlte_subscribe.h +++ /dev/null @@ -1,74 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ -/*! \file mRALlte_subscribe.h - * \brief - * \author BRIZZOLA Davide, GAUTHIER Lionel, MAUREL Frederic, WETTERWALD Michelle - * \date 2012 - * \version - * \note - * \bug - * \warning - */ - -#ifndef __MRALLTE_SUBSCRIBE_H__ -# define __MRALLTE_SUBSCRIBE_H__ -//----------------------------------------------------------------------------- -# ifdef MRALLTE_SUBSCRIBE_C -# define private_mRALlte_subscribe(x) x -# define protected_mRALlte_subscribe(x) x -# define public_mRALlte_subscribe(x) x -# else -# ifdef MRAL_MODULE -# define private_mRALlte_subscribe(x) -# define protected_mRALlte_subscribe(x) extern x -# define public_mRALlte_subscribe(x) extern x -# else -# define private_mRALlte_subscribe(x) -# define protected_mRALlte_subscribe(x) -# define public_mRALlte_subscribe(x) extern x -# endif -# endif -//----------------------------------------------------------------------------- -#include -#include -#include -#include -#include -#include -#include -//----------------------------------------------------------------------------- -#include "MIH_C.h" -//----------------------------------------------------------------------------- -#include "mRALlte_constants.h" -#include "mRALlte_mih_msg.h" -//----------------------------------------------------------------------------- -protected_mRALlte_subscribe(void mRALlte_subscribe_request (MIH_C_Message_Link_Event_Subscribe_request_t* messageP);) -protected_mRALlte_subscribe(void mRALlte_unsubscribe_request(MIH_C_Message_Link_Event_Unsubscribe_request_t* messageP);) - -#endif diff --git a/openair3/RAL-LTE/RAL-DUMMY/INCLUDE/mRALlte_thresholds.h b/openair3/RAL-LTE/RAL-DUMMY/INCLUDE/mRALlte_thresholds.h deleted file mode 100755 index 7c85054245..0000000000 --- a/openair3/RAL-LTE/RAL-DUMMY/INCLUDE/mRALlte_thresholds.h +++ /dev/null @@ -1,74 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ -/*! \file mRALlte_thresholds.h - * \brief - * \author BRIZZOLA Davide, GAUTHIER Lionel, MAUREL Frederic, WETTERWALD Michelle - * \date 2012 - * \version - * \note - * \bug - * \warning - */ - -#ifndef __MRALLTE_THRESHOLDS_H__ -# define __MRALLTE_THRESHOLDS_H__ -//----------------------------------------------------------------------------- -# ifdef MRALLTE_THRESHOLDS_C -# define private_mRALlte_thresholds(x) x -# define protected_mRALlte_thresholds(x) x -# define public_mRALlte_thresholds(x) x -# else -# ifdef MRAL_MODULE -# define private_mRALlte_thresholds(x) -# define protected_mRALlte_thresholds(x) extern x -# define public_mRALlte_thresholds(x) extern x -# else -# define private_mRALlte_thresholds(x) -# define protected_mRALlte_thresholds(x) -# define public_mRALlte_thresholds(x) extern x -# endif -# endif -//----------------------------------------------------------------------------- -#include -#include -#include -#include -#include -#include -#include -//----------------------------------------------------------------------------- -#include "MIH_C.h" -#include "mRALlte_mih_msg.h" -//----------------------------------------------------------------------------- -protected_mRALlte_thresholds(LIST(MIH_C_LINK_CFG_PARAM, g_link_cfg_param_thresholds);) -//----------------------------------------------------------------------------- -protected_mRALlte_thresholds(void mRALlte_configure_thresholds_request(MIH_C_Message_Link_Configure_Thresholds_request_t* messageP);) -public_mRALlte_thresholds( void mRALlte_check_thresholds_signal_strength(MIH_C_THRESHOLD_VAL_T new_valP, MIH_C_THRESHOLD_VAL_T old_valP);) - -#endif diff --git a/openair3/RAL-LTE/RAL-DUMMY/INCLUDE/mRALlte_variables.h b/openair3/RAL-LTE/RAL-DUMMY/INCLUDE/mRALlte_variables.h deleted file mode 100755 index af947d258d..0000000000 --- a/openair3/RAL-LTE/RAL-DUMMY/INCLUDE/mRALlte_variables.h +++ /dev/null @@ -1,134 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ - -#ifndef __RAL_LTE_VAR_H__ -#define __RAL_LTE_VAR_H__ -//------------------------------------------------------------------- - -#include "rrc_d_types.h" -#include "commonDS.h" -#include "mRALlte_constants.h" -#include "MIH_C.h" - -/*************************************************************************** - CONSTANTS - ***************************************************************************/ -#define RAL_DUMMY -//#define RAL_REALTIME -//#define MRALU_SIMU_LINKDOWN -//#define DEBUG_MRALU_MEASURES -//#define UPDATE - - -#define RALU_MT_EVENT_MAP MIH_EVENT_Link_AdvertisementIndication + MIH_EVENT_Link_Parameters_ReportIndication + MIH_EVENT_Link_UpIndication + MIH_EVENT_Link_DownIndication - -#define MIHLink_MAX_LENGTH 500 -#define MAX_NUMBER_BS 3 /* Max number of base stations */ -#define CONF_UNKNOWN_CELL_ID 0 -#define UMTS_INTF_NAME "graal0" - -//Attachment status -#define UNKNOWN 9 -#define CONNECTED 1 -#define DISCONNECTED 0 -//max number RB supported (27 in Spec) -#define RAL_MAX_RB 5 - -// constant for integrating measures according to the formula -// y[n] = (1-LAMBDA)*u[n-1] + LAMBDA*u[n] -#define LAMBDA 8 -#define MEAS_MAX_RSSI 110 - -/*************************************************************************** - VARIABLES - ***************************************************************************/ -struct ral_lte_priv { - // only to call ralu_verifyPendingConnection - uint8_t pending_req_flag; - // network parameters - uint16_t cell_id; - uint16_t nas_state; - int state; - uint32_t curr_signal_level; - uint32_t ipv6_l2id[2]; - //measures - uint8_t req_num_bs; - uint16_t req_cell_id[MAX_NUMBER_BS]; - uint32_t req_prov_id[MAX_NUMBER_BS]; - uint16_t req_order_index[MAX_NUMBER_BS]; - int num_measures; - uint16_t meas_cell_id[MAX_NUMBER_BS]; - uint32_t last_meas_level[MAX_NUMBER_BS]; - uint32_t integrated_meas_level[MAX_NUMBER_BS]; - uint32_t prev_integrated_meas_level[MAX_NUMBER_BS]; - uint32_t provider_id[MAX_NUMBER_BS]; - //Radio Bearers - uint16_t num_rb; - uint16_t rbId[RAL_MAX_RB]; - uint16_t QoSclass[RAL_MAX_RB]; - uint16_t dscp[RAL_MAX_RB]; - // statistics - uint32_t rx_packets; - uint32_t tx_packets; - uint32_t rx_bytes; - uint32_t tx_bytes; - uint32_t rx_errors; - uint32_t tx_errors; - uint32_t rx_dropped; - uint32_t tx_dropped; - char buffer[800]; // For ioctl with NAS driver - - // MIH-INTERFACE data - // Initialised, then read-only, supported actions - MIH_C_LINK_AC_TYPE_T mih_supported_action_list; - // action currently processed - MIH_C_LINK_AC_TYPE_T pending_req_action; - // actions requested by MIH-H - MIH_C_LINK_AC_TYPE_T req_action_list; - - MIH_C_STATUS_T pending_req_status; - MIH_C_LINK_AC_RESULT_T pending_req_ac_result; - MIH_C_TRANSACTION_ID_T pending_req_transaction_id; - // set unset bits by MIH_C_Message_Link_Event_Subscribe_request MIH_C_Message_Link_Event_Unsubscribe_request - MIH_C_LINK_EVENT_LIST_T mih_subscribe_req_event_list; - // Initialised, then read-only - MIH_C_LINK_EVENT_LIST_T mih_supported_link_event_list; - // Initialised, then read-only - MIH_C_LINK_CMD_LIST_T mih_supported_link_command_list; - LIST(MIH_C_LINK_CFG_PARAM, mih_link_cfg_param_thresholds); - // to tell what are the configured thresholds in mih_link_cfg_param_thresholds_list - MIH_C_BOOLEAN_T active_mih_link_cfg_param_threshold[MIH_C_LINK_CFG_PARAM_LIST_LENGTH]; - MIH_C_BOOLEAN_T link_to_be_detected; -}; - -//----------------------------------------------------------------------------- -extern struct ral_lte_priv *ralpriv; - -#endif - diff --git a/openair3/RAL-LTE/RAL-DUMMY/INCLUDE/nasUE_config.h b/openair3/RAL-LTE/RAL-DUMMY/INCLUDE/nasUE_config.h deleted file mode 100755 index b4a2db57cf..0000000000 --- a/openair3/RAL-LTE/RAL-DUMMY/INCLUDE/nasUE_config.h +++ /dev/null @@ -1,109 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ -#ifndef __NASUE_CONFIG_H__ -#define __NASUE_CONFIG_H__ - -#ifdef MIH_USER_CONTROL -#define MIH_USER_IP_ADDRESS "127.0.0.1" -#define MIH_USER_REMOTE_PORT "0" -#define NAS_IP_ADDRESS "127.0.0.1" -#define NAS_LISTENING_PORT_FOR_MIH_USER "22222" -#define RSSI_INCREMENT_STEP 5 -#endif -//#define SOCKET_RAL_TD_CDMA_NAME "/tmp/graal" - -#define MIHLink_MAX_LENGTH 500 - - -//max number of UE per BS -// Warning : This must be coordinated with the number of FIFOs in the RG (rrc_sap.h) - -// max number of cells or RGs -// to be coordinated with NAS list of RGs -#define maxCells 2 - - -//// Daidalos II -//// parameters are defined in tables, -//// - -#define CONF_ACTIVATE_REQ 2 -#define CONF_DEACTIVATE_REQ 3 -#define CONF_ALL_MEAS_REQ 4 -#define CONF_SEL_MEAS_REQ 5 - -#define CONF_NUM_MEAS 5 -#define CONF_PERIOD_MEAS 30 // 30*100 = 3000 ms = 3 secs -// MIHF measure every CONF_PERIOD_MEAS * 100 ms -// Ex : CONF_PERIOD_MEAS = 20 ==> measure every 2 secs -#define CONF_TEST_DURATION 300 // 60*100 = 60000 ms = 60 secs -// Actual duration = CONF_TEST_DURATION * 100 ms -// must be a mulptiple of CONF_PERIOD_MEAS -#define CONF_TEST_COUNTER CONF_TEST_DURATION/CONF_PERIOD_MEAS - -#define CONF_CURR_CELL_ID 5 - -// start NAS config -#ifdef CONF_NASUE_DUMMY - -#define CONF_MT0 0 -#define CONF_MT1 1 - -#define CONF_iid4 2 -int conf_iid6_0[2] = { 406787, 406787}; -int conf_iid6_1[2] = {1351685248, 1368462464}; - - -#define CONF_rx_packets 1529 -#define CONF_tx_packets 254 -#define CONF_rx_bytes 157896 -#define CONF_tx_bytes 32546 -#define CONF_rx_errors 12 -#define CONF_tx_errors 5 -#define CONF_rx_dropped 0 -#define CONF_tx_dropped 24 - -//rb_list -#define CONF_num_rb 2 -int conf_rbId[CONF_num_rb] = {12 ,14 }; -int conf_qoSclass[CONF_num_rb] = {2 ,9 }; -int conf_dscp[CONF_num_rb] = {5 ,25 }; - -// measures -#define CONF_num_cells 3 -int conf_cell_id[CONF_num_cells] = {CONF_CURR_CELL_ID, 8, 2 }; -// LGint conf_level [CONF_num_cells] = {50, 5, 20}; -int conf_level [CONF_num_cells] = {5, 50, 20}; -int conf_provider_id [CONF_num_cells] = {25, 1 , 25 }; - -//float conf_MTU[3] = {1000.,1100.,1200.}; -#endif - -#endif - diff --git a/openair3/RAL-LTE/RAL-DUMMY/INCLUDE/nas_rg_netlink.h b/openair3/RAL-LTE/RAL-DUMMY/INCLUDE/nas_rg_netlink.h deleted file mode 100755 index c740ef2b5c..0000000000 --- a/openair3/RAL-LTE/RAL-DUMMY/INCLUDE/nas_rg_netlink.h +++ /dev/null @@ -1,242 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ -#ifndef NAS_RG_NTL_H -#define NAS_RG_NTL_H - -#include -#include - -#include "rrc_d_types.h" - -#define SOCK_TQAL_NAS_PATH "/tmp/SOCK_TQAL_NAS" - - -#define NAS_RG_NETL_MAXLEN 200 -//#define NAS_RG_NETL_MAX_RABS 27 //spec value -#define NAS_RG_NETL_MAX_RABS 5 //test value -#define NAS_RG_NETL_MAX_MEASURE_NB 5 -#define NAS_RG_NETL_MAX_MTs 3 - -#define NAS_CONNECTED 1 //same as NAS interface -#define NAS_DISCONNECTED 0 - -#define NAS_UNICAST 0 -#define NAS_MCAST 2 - -// type of CTL message -#define NAS_RG_MSG_STATISTIC_REQUEST 1 -#define NAS_RG_MSG_STATISTIC_REPLY 2 -#define NAS_RG_MSG_CNX_STATUS_REQUEST 3 -#define NAS_RG_MSG_CNX_STATUS_REPLY 4 -//#define NAS_RG_MSG_CNX_ESTABLISH_REQUEST 5 -//#define NAS_RG_MSG_CNX_ESTABLISH_REPLY 6 -//#define NAS_RG_MSG_CNX_RELEASE_REQUEST 7 -//#define NAS_RG_MSG_CNX_RELEASE_REPLY 8 -#define NAS_RG_MSG_RB_LIST_REQUEST 9 -#define NAS_RG_MSG_RB_LIST_REPLY 10 -#define NAS_RG_MSG_MEASUREMENT_REQUEST 11 -#define NAS_RG_MSG_MEASUREMENT_REPLY 12 -#define NAS_RG_MSG_MEASUREMENT_INDICATION 14 -#define NAS_RG_MSG_CNX_LOSS_INDICATION 15 -#define NAS_RG_MSG_RB_ESTABLISH_REQUEST 16 -#define NAS_RG_MSG_RB_ESTABLISH_REPLY 17 -#define NAS_RG_MSG_RB_RELEASE_REQUEST 18 -#define NAS_RG_MSG_RB_RELEASE_REPLY 19 -#define NAS_RG_MSG_MT_MCAST_JOIN 20 -#define NAS_RG_MSG_MT_MCAST_LEAVE 21 -#define NAS_RG_MSG_MT_MCAST_JOIN_REP 22 -#define NAS_RG_MSG_MT_MCAST_LEAVE_REP 23 - -// Parameter types -//---------------------------------------------------------- -typedef uint16_t netlIPVersion_t; -typedef struct netlIPAddr { - netlIPVersion_t ip_version; - struct in6_addr ip_address; -} netlIPAddr_t; -typedef uint32_t netlStatValue_t; -typedef uint32_t netlProviderId_t; -typedef uint16_t netlCellID_t; // ID of the cell for connection -typedef uint32_t netlMobileId_t; // mobile identifier -typedef uint16_t netlStatus_t; // establishment status -typedef uint32_t netlCnxid_t; -typedef uint16_t netlRadioBearerId_t; -typedef uint16_t netlQoSTrafficClass_t; //QoS traffic class requested -typedef uint16_t netlIPdscp_t; // DSCP code transported to service NAS -typedef struct netlRBDef { - netlRadioBearerId_t rbId; - netlQoSTrafficClass_t QoSclass; - netlIPdscp_t dscp; -} netlrbParms_t; -typedef uint16_t netlNumRBsInList_t; // number of RBs defined in the list -typedef uint16_t netlNumCellsMeas_t; // number of RGs that could be measured -typedef uint32_t netlSigLevel_t; // Signal level measured -typedef struct netlMeasures { - netlCellID_t cell_id; - netlSigLevel_t level; - netlProviderId_t provider_id; -} netlMeasures_t; -typedef uint16_t netlMcast_t; - - - -// Parameter structures -//---------------------------------------------------------- -struct nas_rg_msg_statistic_reply { //FFS - netlStatValue_t rx_packets; - netlStatValue_t tx_packets; - netlStatValue_t rx_bytes; - netlStatValue_t tx_bytes; - netlStatValue_t rx_errors; - netlStatValue_t tx_errors; - netlStatValue_t rx_dropped; - netlStatValue_t tx_dropped; -}; - -struct nas_rg_msg_cnx_status_request { //FFS - netlMobileId_t ue_id; -}; - -struct nas_rg_msg_cnx_status_reply { //FFS - netlMobileId_t ue_id; - uint8_t iid[8]; // interface identification - EUI64 - netlIPAddr_t l3_addr; - netlStatus_t status; - netlNumRBsInList_t num_rb; - netlSigLevel_t signal_level; - netlMobileId_t valid_UEs[NAS_RG_NETL_MAX_MTs]; -}; - -struct nas_rg_msg_rb_list_request { //FFS - netlMobileId_t ue_id; -}; - -struct nas_rg_msg_rb_list_reply { //FFS - netlMobileId_t ue_id; - netlNumRBsInList_t num_rb; // actual number of RBs in the list - netlrbParms_t RBList[NAS_RG_NETL_MAX_RABS]; -}; - -struct nas_rg_msg_signal_loss { - netlMobileId_t ue_id; -}; - -struct nas_rg_msg_rb_establish_request { - netlCnxid_t cnxid; - netlrbParms_t RBParms; - netlIPAddr_t ip_addr; - netlMcast_t mcast_flag; -}; - -struct nas_rg_msg_rb_establish_reply { - netlCnxid_t cnxid; - netlMobileId_t ue_id; - netlrbParms_t RBParms; - netlStatus_t result; -}; -struct nas_rg_msg_rb_release_request { - netlCnxid_t cnxid; - netlMobileId_t ue_id; - netlRadioBearerId_t rbId; -}; - -struct nas_rg_msg_rb_release_reply { - netlCnxid_t cnxid; - netlMobileId_t ue_id; - netlStatus_t result; -}; - -struct nas_rg_msg_mt_mcast_join { - netlCnxid_t cnxid; - netlMobileId_t ue_id; -}; - -struct nas_rg_msg_mt_mcast_leave { - netlCnxid_t cnxid; - netlMobileId_t ue_id; -}; - -struct nas_rg_msg_mt_mcast_join_rep { - netlCnxid_t cnxid; - netlMobileId_t ue_id; - netlStatus_t result; -}; - -struct nas_rg_msg_mt_mcast_leave_rep { - netlCnxid_t cnxid; - netlMobileId_t ue_id; - netlStatus_t result; -}; - -/***** - * TQAL-NAS Primitive - *****/ -struct nas_rg_netl_hdr { - char name[IFNAMSIZ]; - uint16_t type; - uint16_t length; -}; -struct nas_rg_netl_request { - char name[IFNAMSIZ]; - uint16_t type; - uint16_t length; - union { - struct nas_rg_msg_cnx_status_request cnx_stat_req; - struct nas_rg_msg_rb_list_request rb_list_req; - struct nas_rg_msg_rb_establish_request rb_est_req; - struct nas_rg_msg_rb_release_request rb_rel_req; - struct nas_rg_msg_mt_mcast_join mt_mcast_join; - struct nas_rg_msg_mt_mcast_leave mt_mcast_leave; - } tqalNASPrimitive; -}; -struct nas_rg_netl_reply { - char name[IFNAMSIZ]; - uint16_t type; - uint16_t length; - union { - struct nas_rg_msg_statistic_reply statistics_rep; - struct nas_rg_msg_cnx_status_reply cnx_stat_rep; - struct nas_rg_msg_rb_list_reply rb_list_rep; - struct nas_rg_msg_rb_establish_reply rb_est_rep; - struct nas_rg_msg_rb_release_reply rb_rel_rep; - struct nas_rg_msg_mt_mcast_join_rep mt_mc_join_rep; - struct nas_rg_msg_mt_mcast_leave_rep mt_mc_leavce_rep; - } tqalNASPrimitive; -}; -struct nas_rg_netl_indication { - char name[IFNAMSIZ]; - uint16_t type; - uint16_t length; - union { - struct nas_rg_msg_signal_loss sign_loss; - } tqalNASPrimitive; -}; - - -#endif diff --git a/openair3/RAL-LTE/RAL-DUMMY/INCLUDE/nas_ue_ioctl.h b/openair3/RAL-LTE/RAL-DUMMY/INCLUDE/nas_ue_ioctl.h deleted file mode 100755 index 5bb1a82238..0000000000 --- a/openair3/RAL-LTE/RAL-DUMMY/INCLUDE/nas_ue_ioctl.h +++ /dev/null @@ -1,70 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ -#ifndef _IAL_IOCTL_H -#define _IAL_IOCTL_H - -#include -#include -#include -#include -#include -//LG#include -//LG#include -//LG#include -//#include - -//#include -//#define GRAAL_STATE_IDLE 0 -//#define GRAAL_STATE_CONNECTED 1 -//#define GRAAL_STATE_ESTABLISHMENT_REQUEST 2 -//#define GRAAL_STATE_ESTABLISHMENT_FAILURE 3 -//#define GRAAL_STATE_RELEASE_FAILURE 4 - -//typedef unsigned char uint8_t; -//typedef unsigned short uint16_t; -//typedef unsigned int uint32_t; - -// Temp constants = arguments gioctl -//arg[0] -#define IO_OBJ_STATS 0 -#define IO_OBJ_CNX 1 -#define IO_OBJ_RB 2 -#define IO_OBJ_MEAS 3 -#define IO_OBJ_IMEI 4 -//arg[1] -#define IO_CMD_ADD 0 -#define IO_CMD_DEL 1 -#define IO_CMD_LIST 2 - - - -//LGextern int inet_pton(int af, const char *src, void *dst); -//LGextern char *inet_ntop(int af, const void *src, char *dst, size_t sise); - -#endif diff --git a/openair3/RAL-LTE/RAL-DUMMY/INCLUDE/nas_ue_netlink.h b/openair3/RAL-LTE/RAL-DUMMY/INCLUDE/nas_ue_netlink.h deleted file mode 100755 index f068bd46c4..0000000000 --- a/openair3/RAL-LTE/RAL-DUMMY/INCLUDE/nas_ue_netlink.h +++ /dev/null @@ -1,234 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ -#ifndef NAS_UE_NTL_H -#define NAS_UE_NTL_H - -#include -#include - -#include "rrc_d_types.h" - -//#define SOCK_NAS_PATH "/opt/eurecom/ipc/SOCK_IAL_NAS" -#define SOCK_NAS_PATH "/tmp/SOCK_IAL_NAS" - -// Temp constants = arguments gioctl -//arg[0] -#define IO_OBJ_STATS 0 -#define IO_OBJ_CNX 1 -#define IO_OBJ_RB 2 -#define IO_OBJ_MEAS 3 -#define IO_OBJ_IMEI 4 -//arg[1] -#define IO_CMD_ADD 0 -#define IO_CMD_DEL 1 -#define IO_CMD_LIST 2 - -#define NAS_UE_NETL_MAXLEN 500 -#define NAS_UE_NETL_MAX_RABS 27 -#define NAS_UE_NETL_MAX_MEASURE_NB 5 - -//#define NAS_CONNECTED 1 //same as NAS interface -//#define NAS_DISCONNECTED 0 -#define NAS_CONNECTED 1 //same as NAS interface -#define NAS_DISCONNECTED 0 - -// type of CTL message -#define NAS_UE_MSG_STATISTIC_REQUEST 1 -#define NAS_UE_MSG_STATISTIC_REPLY 2 -#define NAS_UE_MSG_CNX_STATUS_REQUEST 3 -#define NAS_UE_MSG_CNX_STATUS_REPLY 4 -#define NAS_UE_MSG_CNX_ESTABLISH_REQUEST 5 -#define NAS_UE_MSG_CNX_ESTABLISH_REPLY 6 -#define NAS_UE_MSG_CNX_RELEASE_REQUEST 7 -#define NAS_UE_MSG_CNX_RELEASE_REPLY 8 -#define NAS_UE_MSG_CNX_LIST_REQUEST 9 -#define NAS_UE_MSG_CNX_LIST_REPLY 10 -#define NAS_UE_MSG_RB_LIST_REQUEST 15 -#define NAS_UE_MSG_RB_LIST_REPLY 16 -#define NAS_UE_MSG_MEAS_REQUEST 23 -#define NAS_UE_MSG_MEAS_REPLY 24 -#define NAS_UE_MSG_IMEI_REQUEST 25 -#define NAS_UE_MSG_IMEI_REPLY 26 -// -#define NAS_UE_MSG_MEASUREMENT_INDICATION 17 -#define NAS_UE_MSG_CNX_LOSS_INDICATION 18 - - -// Parameter types -//---------------------------------------------------------- -typedef uint16_t netlIPVersion_t; -typedef struct netlIPAddr { - netlIPVersion_t ip_version; - struct in6_addr ip_address; -} netlIPAddr_t; -typedef uint32_t netlStatValue_t; -typedef uint32_t netlProviderId_t; -typedef uint16_t netlCellID_t; // ID of the cell for connection -typedef uint16_t netlConnectionStatus_t; // connection establishment status -typedef uint16_t netlRadioBearerId_t; -typedef uint16_t netlQoSTrafficClass_t; //QoS traffic class requested -typedef uint16_t netlIPdscp_t; // DSCP code transported to service NAS -typedef struct netlRBDef { - netlRadioBearerId_t rbId; - netlQoSTrafficClass_t QoSclass; - netlIPdscp_t dscp; - uint8_t state; -} netlrbParms_t; -typedef uint16_t netlNumRBsInList_t; // number of RBs defined in the list -typedef uint16_t netlNumCellsMeas_t; // number of RGs that could be measured -typedef uint32_t netlSigLevel_t; // Signal level measured -typedef struct netlMeasures { - netlCellID_t cell_id; - netlSigLevel_t level; - netlProviderId_t provider_id; -} netlMeasures_t; - - - -// Parameter structures -//---------------------------------------------------------- -struct nas_ue_msg_statistic_reply { - netlStatValue_t rx_packets; - netlStatValue_t tx_packets; - netlStatValue_t rx_bytes; - netlStatValue_t tx_bytes; - netlStatValue_t rx_errors; - netlStatValue_t tx_errors; - netlStatValue_t rx_dropped; - netlStatValue_t tx_dropped; -}; - -struct nas_ue_msg_cnx_status_reply { - netlCellID_t cellid; // cell identification - uint8_t iid[8]; // interface identification - EUI64 - netlIPAddr_t ip_addr; - netlConnectionStatus_t status; - netlNumRBsInList_t num_rb; - netlSigLevel_t signal_level; -}; - -struct nas_ue_msg_cnx_list_reply { - uint8_t state; - uint16_t cellid; // cell identification - uint32_t iid6[2]; // IPv6 interface identification - uint8_t iid4; // IPv4 interface identification - uint16_t num_rb; - uint16_t nsclassifier; -}; - - -struct nas_ue_msg_cnx_establish_request { - netlCellID_t cellid; // Cell identification -}; - -struct nas_ue_msg_cnx_establish_reply { - netlConnectionStatus_t status; - // uint8_t iid6[8]; // IPv6 interface identification - EUI64 -}; - -struct nas_ue_msg_cnx_release_reply { - netlConnectionStatus_t status; -}; - -struct nas_ue_msg_rb_list_reply { - netlNumRBsInList_t num_rb; // actual number of RBs in the list - netlrbParms_t RBList[NAS_UE_NETL_MAX_RABS]; -}; - -struct nas_ue_msg_measure_request { - netlNumCellsMeas_t num_cells; - netlCellID_t cellid[NAS_UE_NETL_MAX_MEASURE_NB]; // Cell identification - uint16_t num_providers; - netlProviderId_t provider_id[NAS_UE_NETL_MAX_MEASURE_NB]; // Provider identification -}; - -struct nas_ue_msg_measure_reply { - netlNumCellsMeas_t num_cells; - netlMeasures_t measures[NAS_UE_NETL_MAX_MEASURE_NB]; - uint16_t signal_lost_flag; -}; - -struct nas_ue_msg_measure_indicate { - netlMeasures_t measure; -}; - -struct nas_ue_msg_signal_loss { - netlMeasures_t measure; -}; - -struct nas_ue_l2id_reply { - uint32_t l2id [2]; -}; - -/////////////////////////// - -/***** - * IAL-NAS Primitive - *****/ -struct nas_ue_netl_hdr { - char name[IFNAMSIZ]; - uint16_t type; - uint16_t length; -}; -struct nas_ue_netl_request { - char name[IFNAMSIZ]; - uint16_t type; - uint16_t length; - union { - struct nas_ue_msg_cnx_establish_request cnx_req; - struct nas_ue_msg_measure_request meas_req; - } ialNASPrimitive; -}; -struct nas_ue_netl_reply { - char name[IFNAMSIZ]; - uint16_t type; - uint16_t length; - union { - struct nas_ue_msg_statistic_reply statistics_rep; - struct nas_ue_msg_cnx_status_reply cnx_stat_rep; - struct nas_ue_msg_cnx_list_reply cnx_list_rep; - struct nas_ue_msg_cnx_establish_reply cnx_est_rep; - struct nas_ue_msg_cnx_release_reply cnx_rel_rep; - struct nas_ue_msg_rb_list_reply rb_list_rep; - struct nas_ue_msg_measure_reply meas_rep; - struct nas_ue_l2id_reply l2id_rep; - } ialNASPrimitive; -}; -struct nas_ue_netl_indication { - char name[IFNAMSIZ]; - uint16_t type; - uint16_t length; - union { - struct nas_ue_msg_measure_indicate meas_ind; - struct nas_ue_msg_signal_loss sign_loss; - } ialNASPrimitive; -}; - - -#endif diff --git a/openair3/RAL-LTE/RAL-DUMMY/INCLUDE/rrc_d_types.h b/openair3/RAL-LTE/RAL-DUMMY/INCLUDE/rrc_d_types.h deleted file mode 100755 index f480701d11..0000000000 --- a/openair3/RAL-LTE/RAL-DUMMY/INCLUDE/rrc_d_types.h +++ /dev/null @@ -1,37 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ -#ifndef __RRC_DTYPES_H__ -#define __RRC_DTYPES_H__ - -typedef unsigned char uint8_t; -typedef unsigned short uint16_t; -typedef unsigned int uint32_t; - - -#endif diff --git a/openair3/RAL-LTE/RAL-DUMMY/MSCGEN_CHART/msc_gen.py b/openair3/RAL-LTE/RAL-DUMMY/MSCGEN_CHART/msc_gen.py deleted file mode 100755 index e23c1690fa..0000000000 --- a/openair3/RAL-LTE/RAL-DUMMY/MSCGEN_CHART/msc_gen.py +++ /dev/null @@ -1,344 +0,0 @@ -#!/usr/bin/python -# -*- coding: utf-8 -*- -# Lionel GAUTHIER -# This script is a downgrade of a python script written for the openair stack, generating sequence diagrams charts, displaying -# messages exchanged between LTE access stratum protocol entities. -# This script needs mscgen tool (http://www.mcternan.me.uk/mscgen/). -# -# The aim of this script is to collect some traces from oaisim stack and generate a mscgen script, then generate a sequence diagram -# image (png or jpeg) based on the scripts generated. -# An example of how it can be invoqued: msc_gen.py /tmp/msc_log.txt /tmp/msc_log2.txt msc_logx.txt are input text files, -# They/It are/is generated by the execution of executables in linux user space. May be it is better to operate on log files 'grepped' with MSC: -# ./my_exe.exe | grep \[MSC > /tmp/msc_log1.txt - - -# Now, examples of how to generate a mscgen trace in a C executable: -# -First you have to declare the instance(s) of the protocol(s) that will send or receive messages. -# This is done with the following line: -# [MSC_NEW][system time][protocol_name=instance_name] -# examples: -# printf("[MSC_NEW][%s][MIH-F=%s]\n", getTimeStamp4Log(), g_mihf_id); for declaring a new instance of a protocol entity of type MIH-F -# with an instance name g_mihf_id (of type char*) -# printf("[MSC_NEW][%s][NAS=%s]\n", getTimeStamp4Log(), "nas"); other example. -# This declaration of instances of protocols is mandatory to for this script to work. -# -# -Then for tracing a message you have to log a line following this format: -# [MSC_MSG][system time][source instance_name][--- message_name --->][destination instance_name] -# Note: -# ---> means a message that has been received correctly by destination -# ---x means a message lost by destination -# example -# NOTICE("[MSC_MSG][%s][%s][--- Link_Register.indication\\n%s ---x][%s]\n",getTimeStamp4Log(),g_link_id,g_msc_gen_buf,g_mihf_id); -# - - - - -import sys -import subprocess -import re -import socket -import datetime -import os.path -from datetime import date - -MSCGEN_OUTPUT_TYPE = "png" -MAX_MESSAGES_PER_PAGE = 36 - -SYSTEM_FRAME_NUMBER_STR = 'FRAME' -MODULE_STR = 'MOD' -RADIO_BEARER_STR = 'RB' -MSC_NEW_STR = '[MSC_NEW]' -MSC_MSG_STR = '[MSC_MSG]' -MSC_NBOX_STR = '[MSC_NBOX]' -MSC_BOX_STR = '[MSC_BOX]' -MSC_ABOX_STR = '[MSC_ABOX]' -MSC_RBOX_STR = '[MSC_RBOX]' - -# This dic is filled as follow : g_entities_dic[protocol_instance_name].append(protocol_name) -# where protocol_name can be any of the following MI-USER, MIH-F, RAL, LINK-SAP -g_entities_dic = {} -g_reverse_entities_dic = {} - - -# g_messages is filled with dictionnaries: -# message_dic['entity_src'] = protocol_entity_src -# message_dic['entity_dst'] = protocol_entity_dest -# message_dic['msg'] = message -# message_dic['line_color'] = g_display_color[entity_name] -# message_dic['text_color'] = g_display_color[entity_name] -# message_dic['time'] = system_frame_number -# message_dic['seq_no'] = sequence_number_generator() -# g_messages.append(message_dic) -g_messages = [] - -g_messages_dic = {} - - -# g_display_order_dic is a dictionnary where the order of the display of entities sharing the same module identifier is hardcoded -#MAC and PHY valus have to be above num max radio bearer value -g_display_order_dic = {'MIH-USER': 0, 'MIH-F': 1, 'RAL': 3, 'NAS': 4} - -# Display color of messages of sending entities -g_display_color = {'IP': '\"teal\"', - 'RRC_UE': '\"red\"', - 'MIH-USER': '\"black\"', - 'MIH-F': '\"black\"', - 'RAL': '\"black\"', - 'RAL_M': '\"black\"', - 'RLC_UM': '\"navy\"', - 'RLC_TM': '\"navy\"', - 'NAS': '\"black\"', - 'MAC_eNB': '\"indigo\"', - 'PHY': '\"purple\"'} - - -g_final_display_order_list = [] - -g_sequence_generator = 0 - -def sequence_number_generator(): - global g_sequence_generator - l_seq = g_sequence_generator - g_sequence_generator = g_sequence_generator + 1 - return l_seq - -def parse_log_file_for_discovering_protocol_entities(filename): - global g_entities_dic - global g_entities - global g_messages - global g_final_display_order_list - #open TXT file that contain OAI filtered traces for mscgen - - fhandle = open(filename, 'r') - fcontent = fhandle.read() - fhandle.close() - - # split file content in lines - lines = fcontent.splitlines() - for line in lines: - system_time = 'unknown' - - # if line is a trace of the creation of a new protocol instance - if MSC_NEW_STR in line: - partition = line.rpartition(MSC_NEW_STR) - msc_log_string = partition[2] - #print (" %s " % msc_log_string) - partition = msc_log_string.split('[') - print ("\n\n %s \n" % partition) - #if len(partition) == 2: - - item = partition[1] - item = item.strip() - item = item.strip(']') - system_time = item.split(' ')[-1] - print ("NEW system_time %s " % system_time) - - item = partition[2] - item = item.strip() - item = item.strip(']') - protocol_entity_type = item.split('=')[0] - protocol_entity_name = item.split('=')[-1] - print ("NEW protocol_entity_type %s " % protocol_entity_type) - print ("NEW protocol_entity_name %s " % protocol_entity_name) - - if protocol_entity_name not in g_entities_dic: - g_entities_dic[protocol_entity_name] = protocol_entity_type - - if protocol_entity_type not in g_reverse_entities_dic: - g_reverse_entities_dic[protocol_entity_type] = protocol_entity_name - else: - entity_name_list = g_reverse_entities_dic[protocol_entity_type] - entity_name_list.append(protocol_entity_name) - g_reverse_entities_dic[protocol_entity_type] = entity_name_list - #print (" g_entities_dic[%d][%d].append(%s)" % (module_id_int, radio_bearer_id_int, entity_name_src)) - print (" g_entities_dic= %s\n\n" % (g_entities_dic)) - print (" g_reverse_entities_dic= %s\n\n" % (g_reverse_entities_dic)) - - #g_entities.append(protocol_entity_type) - #print (" %s \n" % protocol_entity) - - - - - -def parse_log_file(filename): - global g_entities_dic - global g_entities - global g_messages - global g_final_display_order_list - #open TXT file that contain OAI filtered traces for mscgen - fhandle = open(filename, 'r') - fcontent = fhandle.read() - fhandle.close() - - # split file content in lines - lines = fcontent.splitlines() - for line in lines: - system_time = 'unknown' - message = 'unknown' - entity_name_src = 'unknown' - entity_name_dest = 'unknown' - - - # if line is a trace of the creation of a new protocol instance - if MSC_MSG_STR in line: - partition = line.strip().rpartition(MSC_MSG_STR) - msc_log_string = partition[2].strip() - print (" %s " % msc_log_string) - partition = msc_log_string.split('[') - print (" %s " % partition) - - #if len(partition) == 9: - message_dic = {} - - system_time = partition[1].strip().split(' ')[-1].strip(']') - message_dic['display_time'] = system_time - seconds_int = int(system_time.split(':')[0]) - micro_seconds_int = int(system_time.split(':')[-1]) - system_time_int = seconds_int*1000000 + micro_seconds_int - system_time=str(system_time_int) - print ('system_time %s' % system_time) - - entity_name_src = partition[2].strip().split(' ')[-1].strip(']') - print ('entity_name_src %s' % entity_name_src) - - message = partition[3].strip().strip(']').strip() - if (message[-1] == 'x') or (message[-1] == 'X'): - message_dic['arc'] = '-x' - elif message[-1] == '>': - message_dic['arc'] = '=>' - message = message.strip('<').strip('>').strip('x').strip('X').strip('-').strip('=').strip() - print ('message %s' % message) - - entity_name_dest = partition[4].strip().split(' ')[-1].strip(']') - print ('entity_name_dest %s' % entity_name_dest) - message_dic['entity_src'] = entity_name_src - message_dic['entity_dst'] = entity_name_dest - message_dic['msg'] = message - message_dic['line_color'] = g_display_color[g_entities_dic[entity_name_src]] - message_dic['text_color'] = g_display_color[g_entities_dic[entity_name_src]] - message_dic['time'] = system_time - #message_dic['seq_no'] = sequence_number_generator() - print ('%s\n\n' % message_dic) - g_messages_dic[system_time_int] = message_dic - #g_messages.append(message_dic) - - -def generate_sorted_message_list(): - first_time_stamp = 0 - for system_time_int in sorted(g_messages_dic.iterkeys()): - if first_time_stamp == 0: - first_time_stamp = system_time_int - message_dic = g_messages_dic[system_time_int] - message_dic['seq_no'] = sequence_number_generator() - message_dic['display_time'] = str(system_time_int - first_time_stamp) - g_messages.append(message_dic) - -def generate_sorted_entity_display_list(): - module_display_order_dic = {} - for entity_name in sorted(g_entities_dic.iterkeys()): - module_display_order_dic[g_display_order_dic[g_entities_dic[entity_name]]] = entity_name - - - print("------------------------------------") - print(" %s " % (module_display_order_dic)) - - for display_priority in sorted(module_display_order_dic.iterkeys()): - g_final_display_order_list.append(module_display_order_dic[display_priority]) - -def msc_chart_write_header(fileP): - global g_final_display_order_list - fileP.write("msc {\n") - fileP.write("width = \"2048\";\n") - - entity_line_list_str = '' - for entity in g_final_display_order_list: - entity_line_list_str = entity_line_list_str + ' ' + entity + ',' - - entity_line_list_str = entity_line_list_str.rstrip().strip(',') - fileP.write(" %s;" % (entity_line_list_str)) - - -def msc_chart_write_footer(fileP): - fileP.write("\n}\n") - -def msc_chart_generate(file_nameP): - global MSCGEN_OUTPUT_TYPE - command_line = "mscgen -T " + MSCGEN_OUTPUT_TYPE + " -i " + file_nameP + "; chmod 777 " +file_nameP + ";" - - print("Command Line: %s " % (command_line)) - fi,fo,fe=os.popen3(command_line) - for i in fe.readlines(): - print "error:",i - -def get_nem_file_descriptor(): - global g_base_file_name - global g_page_index - l_file_name = g_base_file_name + str(g_page_index)+'.txt' - l_file = open(l_file_name, "w", 0777) - return l_file - - -###### MAIN STAR HERE ################# -num_args = len(sys.argv) -if num_args < 2: # the program name and the arguments - # stop the program and print an error message - sys.exit("Must provide at least one file to parse") - -for i in range(1,num_args): - print sys.argv[i] - -for i in range(1,num_args): - parse_log_file_for_discovering_protocol_entities(sys.argv[i]) - -for i in range(1,num_args): - parse_log_file(sys.argv[i]) - -generate_sorted_message_list() -generate_sorted_entity_display_list() - -g_page_index = 0 -g_message_index = 0 -g_message_index_in_current_page = 0 -g_now = datetime.datetime.now() -g_now_formated = g_now.strftime("%Y-%m-%d_%H.%M.%S") -g_currentdir = os.curdir -g_resultdir = os.path.join(g_currentdir, g_now_formated) -os.mkdir(g_resultdir, 0777) -os.chdir(g_resultdir) - -g_base_file_name = 'mih_mscgen_page_' - -g_file = get_nem_file_descriptor() -msc_chart_write_header(g_file) - -for message in g_messages: - - if 'msg' in message: - print ('message %s' % message) - g_file.write(" %s%s%s [ label = \"(%d) T%s %s\", linecolour=%s , textcolour=%s ] ;\n" % (message['entity_src'], message['arc'], message['entity_dst'], message['seq_no'], message['display_time'], message['msg'], message['line_color'], message['text_color'])) - elif 'box' in message: - g_file.write(" %s %s %s [ label = \"%s\", textbgcolour=%s , textcolour=%s ] ;\n" % (message['entity_src'], message['box_type'], message['entity_dst'], message['box'], message['textbg_color'], message['text_color'])) - - g_message_index = g_message_index + 1 - g_message_index_in_current_page = g_message_index_in_current_page + 1 - - if (g_message_index_in_current_page == MAX_MESSAGES_PER_PAGE): - msc_chart_write_footer(g_file) - g_file.close() - msc_chart_generate(g_file.name) - g_page_index = g_page_index + 1 - g_message_index_in_current_page = 0 - - g_file = get_nem_file_descriptor() - msc_chart_write_header(g_file) - - -msc_chart_write_footer(g_file) -g_file.close() -if g_message_index_in_current_page >= 1: - msc_chart_generate(g_file.name) -else: - print("Removing empty seq diagram file: %s " % (g_file.name)) - os.remove(g_file.name) diff --git a/openair3/RAL-LTE/RAL-DUMMY/Makefile b/openair3/RAL-LTE/RAL-DUMMY/Makefile deleted file mode 100755 index e217083fce..0000000000 --- a/openair3/RAL-LTE/RAL-DUMMY/Makefile +++ /dev/null @@ -1,91 +0,0 @@ -# lines starting with the pound sign are comments. -# -# These things are options that you might need -# to tweak. - - -# You can modify the below as well, but probably -# won't need to. -INTERFACE_DIR=../INTERFACE-802.21 -INCLUDE_DIR=INCLUDE -SRC_DIR=SRC - -# SVN version -SVNREV = -D'SVN_REV="$(shell svnversion -n .)"' - -CC = gcc - -CFLAGS = -Wall -g -I$(SRC_DIR) -I$(INTERFACE_DIR)/INCLUDE -I$(INCLUDE_DIR) \ - -DMIH_C_MEDIEVAL_EXTENSIONS -DMSCGEN_PYTOOL -DMIH_USER_CONTROL $(SVNREV) - -LDFLAGS = -L$(INTERFACE_DIR)/LIB -lmih_c-802.21 -lrt - -MRAL_OBJS = $(SRC_DIR)/mRALlte_mih_msg.o -MRAL_OBJS += $(SRC_DIR)/mRALlte_thresholds.o -MRAL_OBJS += $(SRC_DIR)/mRALlte_parameters.o -MRAL_OBJS += $(SRC_DIR)/mRALlte_action.o -MRAL_OBJS += $(SRC_DIR)/mRALlte_get.o -MRAL_OBJS += $(SRC_DIR)/mRALlte_subscribe.o -MRAL_OBJS += $(SRC_DIR)/mRALlte_main.o -MRAL_OBJS += $(SRC_DIR)/mRALlte_NAS.o -MRAL_OBJS += $(SRC_DIR)/mRALlte_process.o - -ERAL_OBJS += $(SRC_DIR)/eRALlte_main.o -ERAL_OBJS += $(SRC_DIR)/eRALlte_mih_msg.o -ERAL_OBJS += $(SRC_DIR)/eRALlte_thresholds.o -ERAL_OBJS += $(SRC_DIR)/eRALlte_parameters.o -ERAL_OBJS += $(SRC_DIR)/eRALlte_action.o -ERAL_OBJS += $(SRC_DIR)/eRALlte_subscribe.o -ERAL_OBJS += $(SRC_DIR)/eRALlte_NAS.o -ERAL_OBJS += $(SRC_DIR)/eRALlte_process.o - -OBJS = $(MRAL_OBJS) $(ERAL_OBJS) - -M_RAL_EXE = mRALlteDummy -M_NAS_EXE = NASUEdummy - -E_RAL_EXE = eRALlteDummy -E_NAS_EXE = NASRGdummy - -EXECUTABLE = interface $(M_RAL_EXE) $(M_NAS_EXE) $(E_RAL_EXE) $(E_NAS_EXE) - -# "all" is the default target. Simply make it point to myprogram. - -all: $(EXECUTABLE) - -ral: $(M_RAL_EXE) $(E_RAL_EXE) - -runralwithvalgrind: $(M_RAL_EXE) - -rm -f /tmp/*.txt - -valgrind --leak-check=full --show-reachable=yes --track-origins=yes ./$(M_RAL_EXE) > /tmp/mral.txt - -runral: $(M_RAL_EXE) - -rm -f /tmp/*.txt - -./$(M_RAL_EXE) > /tmp/mral.txt - -interface : - -(cd $(INTERFACE_DIR) && make clean && make) - - -$(M_RAL_EXE) : $(MRAL_OBJS) - $(CC) -o $@ $^ $(LDFLAGS) - -$(M_NAS_EXE) : $(SRC_DIR)/nasUEdummy.o - $(CC) -o $@ $^ - -$(E_RAL_EXE) : $(ERAL_OBJS) - $(CC) -o $@ $^ $(LDFLAGS) - -$(E_NAS_EXE) : $(SRC_DIR)/nasRGdummy.o - $(CC) -o $@ $^ - -%.o: %.c Makefile - @echo Compiling $< - @$(CC) -c $(CFLAGS) $(EXTRA_CFLAGS) -o $@ $< - -clean: - -find . -name "*.o" -delete - -find . -name "*.*~" -delete - -find . -name "*~" -delete - -rm -f $(M_RAL_EXE) $(M_NAS_EXE) - -rm -f $(E_RAL_EXE) $(E_NAS_EXE) diff --git a/openair3/RAL-LTE/RAL-DUMMY/SRC/eRALlte_NAS.c b/openair3/RAL-LTE/RAL-DUMMY/SRC/eRALlte_NAS.c deleted file mode 100644 index c201a4c27b..0000000000 --- a/openair3/RAL-LTE/RAL-DUMMY/SRC/eRALlte_NAS.c +++ /dev/null @@ -1,921 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ - -#include - -#include "eRALlte_proto.h" - -#include "eRALlte_variables.h" -#include "eRALlte_mih_msg.h" -#include "nas_rg_netlink.h" - -#include "MIH_C_Types.h" - -/****************************************************************************/ -/******************* G L O C A L D E F I N I T I O N S *****************/ -/****************************************************************************/ - -extern int g_sockd_nas; // defined in eRALlte_main.c - -/****************************************************************************/ -/******************* L O C A L D E F I N I T I O N S *******************/ -/****************************************************************************/ - -/* Read/write buffer used to receive/send messages from/to the NAS driver */ -static char nas_rg_msg[NAS_RG_NETL_MAXLEN]; - -/* Request messages sent to the NAS driver */ -static struct nas_rg_netl_request *nas_rg_request = (struct nas_rg_netl_request *) nas_rg_msg; - -/* Reply message received from the NAS driver */ -static struct nas_rg_netl_reply *nas_rg_reply = (struct nas_rg_netl_reply *) nas_rg_msg; - -/* Functions used to write messages being sent to the NAS driver */ -static int eRALlte_NAS_write_rb_establish_request(int mt_ix, int ch_ix); -static int eRALlte_NAS_write_rb_release_request(int mt_ix, int ch_ix); -static int eRALlte_NAS_write_cnx_status_request(int mt_ix); -static int eRALlte_NAS_write_rb_list_request(int mt_ix); - -/* Functions used to read messages being received from the NAS driver */ -static int eRALlte_NAS_read_rb_establish_reply(void); -static int eRALlte_NAS_read_rb_release_reply(void); -static int eRALlte_NAS_read_cnx_status_reply(void); -static int eRALlte_NAS_read_rb_list_reply(void); - -static void imei2l2id(const uint8_t* imei, uint32_t* l2id); - -static void _eRALlte_NAS_get_MTs_list(int n_mts, int n_rbs); -static int _eRALlte_NAS_update_MTs_list(int mt_ix, int ch_ix); - -/****************************************************************************/ -/****************** E X P O R T E D F U N C T I O N S ******************/ -/****************************************************************************/ - -/**************************************************************************** - ** ** - ** Name: eRALlte_NAS_get_MTs_list() ** - ** ** - ** Description: Gets the list of attached Mobile Terminals. ** - ** (Dummy list: Hard coded for testing purpose) ** - ** ** - ** Inputs: None ** - ** Others: DestIpv6Addr[][] ** - ** ** - ** Outputs: None ** - ** Return: None ** - ** Others: ralpriv ** - ** ** - ***************************************************************************/ -void eRALlte_NAS_get_MTs_list(void) -{ - /* Number of MTs = 2, Number of RBs = 1 */ - _eRALlte_NAS_get_MTs_list(2, 1); // DUMMY -} -static void _eRALlte_NAS_get_MTs_list(int n_mts, int n_rbs) -{ - struct ral_lte_channel *channel; - int mt_ix, ch_ix; - - memcpy(ralpriv->plmn, DefaultPLMN, DEFAULT_PLMN_SIZE); // DUMMY - ralpriv->curr_cellId = RAL_DEFAULT_CELL_ID; // DUMMY - - /* Number of MTs in the list */ - if (n_mts > RAL_MAX_MT) { - /* Should not exceed RAL_MAX_MT */ - n_mts = RAL_MAX_MT; - } - - for (mt_ix=0; mt_ix < n_mts; ++mt_ix) { - ralpriv->mt[mt_ix].ue_id = mt_ix; - // ralpriv->mt[mt_ix].ipv6_l2id[0]= 406787; - // ralpriv->mt[mt_ix].ipv6_l2id[1]= 1351685248 + mt_ix; - ralpriv->mt[mt_ix].num_class = 2; - ralpriv->mt[mt_ix].nas_state = 0x0A; - ralpriv->mt[mt_ix].mt_state = RB_CONNECTED; - - /* Number of Radio Bearers attached to that MT */ - if (n_rbs > RAL_MAX_RB) { - /* Should not exceed RAL_MAX_RB */ - n_rbs = RAL_MAX_RB; - } - - ralpriv->mt[mt_ix].num_rbs = n_rbs; - - for (ch_ix = 0; ch_ix < ralpriv->mt[mt_ix].num_rbs; ch_ix++) { - channel = &ralpriv->mt[mt_ix].radio_channel[ch_ix]; - channel->cnx_id = (RAL_MAX_RB_PER_UE*mt_ix)+ch_ix+1; - channel->rbId = RAL_DEFAULT_RAB_ID; - channel->RadioQoSclass = RAL_DEFAULT_RAB_QoS; - channel->dscpUL = 0; - channel->dscpDL = 0; - channel->nas_state = 16; - channel->status = NAS_CONNECTED; - } - - ralpriv->num_connected_mts++; - - /* MT's IPv6 L2 identifier */ - if (mt_ix < ADDR_MAX) { - memcpy((char *) ralpriv->mt[mt_ix].ipv6_addr, - (char *) DestIpv6Addr[mt_ix], 16); - imei2l2id((uint8_t*) &DestIpv6Addr[mt_ix][8], - (uint32_t*) &ralpriv->mt[mt_ix].ipv6_l2id[0]); - DEBUG(" MT%d initialized : address %d %d\n", mt_ix, - ralpriv->mt[mt_ix].ipv6_l2id[0], - ralpriv->mt[mt_ix].ipv6_l2id[1]); - } - } -} - -/**************************************************************************** - ** ** - ** Name: eRALlte_NAS_update_MTs_list() ** - ** ** - ** Description: Updates the list of attached Mobile Terminals. ** - ** (Dummy list: Hard coded for testing purpose) ** - ** ** - ** Inputs: None ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: The index of the MT that has been updated ** - ** Others: ralpriv ** - ** ** - ***************************************************************************/ -int eRALlte_NAS_update_MTs_list(void) -{ - /* MT index = 2, RB channel index = 0 */ - return _eRALlte_NAS_update_MTs_list(2, 0); // DUMMY -} -static int _eRALlte_NAS_update_MTs_list(int mt_ix, int ch_ix) -{ - struct ral_lte_channel *channel; - - /* MT index */ - if (mt_ix < RAL_MAX_MT) { - ralpriv->mt[mt_ix].ue_id = mt_ix; - ralpriv->mt[mt_ix].num_rbs = 1; - ralpriv->mt[mt_ix].num_class = 2; - ralpriv->mt[mt_ix].nas_state = 0x0A; - ralpriv->mt[mt_ix].mt_state = RB_CONNECTED; - - /* Default RB channel */ - if (ch_ix < RAL_MAX_RB) { - channel = &ralpriv->mt[mt_ix].radio_channel[ch_ix]; - channel->cnx_id = (RAL_MAX_RB_PER_UE*mt_ix)+ch_ix+1; - channel->rbId = RAL_DEFAULT_RAB_ID; - channel->RadioQoSclass = RAL_DEFAULT_RAB_QoS; - channel->dscpUL = 0; - channel->dscpDL = 0; - channel->nas_state = 16; - channel->status = NAS_CONNECTED; - } - - ralpriv->num_connected_mts++; - - ralpriv->mt[mt_ix].ltid = ralpriv->pending_mt.ltid; - - imei2l2id((uint8_t*) &ralpriv->pending_mt.ipv6_addr[8], - (uint32_t*) &ralpriv->mt[mt_ix].ipv6_l2id[0]); - DEBUG (" MT%d initialized : address %d %d\n", mt_ix, - ralpriv->mt[mt_ix].ipv6_l2id[0], - ralpriv->mt[mt_ix].ipv6_l2id[1]); - return mt_ix; - } - - return RAL_MAX_MT; -} - -/**************************************************************************** - ** ** - ** Name: eRALlte_NAS_process_message() ** - ** ** - ** Description: Processes messages received from the NAS sublayer. ** - ** ** - ** Inputs: None ** - ** Others: g_sockd_nas, nas_rg_msg ** - ** ** - ** Outputs: None ** - ** Return: 0 if the received message has been ** - ** successfully processed; -1 otherwise. ** - ** Others: ** - ** ** - ***************************************************************************/ -int eRALlte_NAS_process_message(void) -{ - int rc = 0; - int n; - - n = recv(g_sockd_nas, nas_rg_msg, NAS_RG_NETL_MAXLEN, 0); - - if (n <= 0) { - if (n < 0) { - ERR(" %s : recv() failed (%d)\n", __FUNCTION__, errno); - } - - rc = -1; - } else if (n != nas_rg_reply->length) { - ERR(" %s : invalid message length %d (should be %d)", __FUNCTION__, - n, nas_rg_reply->length); - rc = -1; - } - - if (!rc) { - rc = -1; - - switch (nas_rg_reply->type) { - /* - * Process Radio Bearer establish reply message - */ - case NAS_RG_MSG_RB_ESTABLISH_REPLY: - DEBUG(" NAS_RG_MSG_RB_ESTABLISH_REPLY received from NAS (%d)\n", nas_rg_reply->length); -#ifdef MSCGEN_PYTOOL - NOTICE("[MSC_MSG][%s][nas][--- NAS_RG_MSG_RB_ESTABLISH_REPLY --->][%s]\n", - getTimeStamp4Log(), g_link_id); -#endif - rc = eRALlte_NAS_read_rb_establish_reply(); - break; - - /* - * Process Radio Bearer release reply message - */ - case NAS_RG_MSG_RB_RELEASE_REPLY: - DEBUG(" NAS_RG_MSG_RB_RELEASE_REPLY received from NAS (%d)\n", nas_rg_reply->length); -#ifdef MSCGEN_PYTOOL - NOTICE("[MSC_MSG][%s][nas][--- NAS_RG_MSG_RB_RELEASE_REPLY --->][%s]\n", - getTimeStamp4Log(), g_link_id); -#endif - rc = eRALlte_NAS_read_rb_release_reply(); - break; - - case NAS_RG_MSG_MT_MCAST_JOIN_REP: - DEBUG(" NAS_RG_MSG_MT_MCAST_JOIN_REP received "); - break; - - case NAS_RG_MSG_MT_MCAST_LEAVE_REP: - DEBUG(" NAS_RG_MSG_MT_MCAST_LEAVE_REP received "); - break; - - /* - * Process connection status reply message - */ - case NAS_RG_MSG_CNX_STATUS_REPLY: - DEBUG(" NAS_RG_MSG_CNX_STATUS_REPLY received from NAS (%d)\n", nas_rg_reply->length); -#ifdef MSCGEN_PYTOOL - NOTICE("[MSC_MSG][%s][nas][--- NAS_RG_MSG_CNX_STATUS_REPLY --->][%s]\n", - getTimeStamp4Log(), g_link_id); -#endif - rc = eRALlte_NAS_read_cnx_status_reply(); - break; - - /* - * Process Radio Bearer list reply message - */ - case NAS_RG_MSG_RB_LIST_REPLY: - DEBUG(" NAS_RG_MSG_RB_LIST_REPLY received from NAS (%d)\n", nas_rg_reply->length); -#ifdef MSCGEN_PYTOOL - NOTICE("[MSC_MSG][%s][nas][--- NAS_RG_MSG_RB_LIST_REPLY --->][%s]\n", - getTimeStamp4Log(), g_link_id); -#endif - rc = eRALlte_NAS_read_rb_list_reply(); - break; - - case NAS_RG_MSG_STATISTIC_REPLY: - DEBUG(" NAS_RG_MSG_STATISTIC_REPLY received\n"); - break; - - case NAS_RG_MSG_MEASUREMENT_REPLY: - DEBUG(" NAS_RG_MSG_MEASUREMENT_REPLY received\n"); - break; - - default: - WARNING(" %s : invalid message Type %d\n", - __FUNCTION__, nas_rg_reply->type); - break; - } - - } - - return rc; -} - -#ifdef RAL_REALTIME -/**************************************************************************** - ** ** - ** Name: TQAL_process_NAS_message() ** - ** ** - ** Description: Sends messages to the NAS sublayer. ** - ** ** - ** Inputs: ioctl_obj: ioctl object identifier ** - ** ioctl_cmd: ioctl command identifier ** - ** mt_ix: Mobile Terminal index ** - ** ch_ix: Radio Bearer channel index ** - ** Others: g_sockd_nas, nas_rg_msg, nas_rg_request ** - ** ** - ** Outputs: None ** - ** Return: 0 if the message has been successfully ** - ** sent to the NAS driver; -1 otherwise. ** - ** Others: nas_rg_msg ** - ** ** - ***************************************************************************/ -int TQAL_process_NAS_message(int ioctl_obj, int ioctl_cmd, - int mt_ix, int ch_ix) -{ - int rc = -1; - char msg_name[64]; - - memset(nas_rg_msg, 0, NAS_RG_NETL_MAXLEN); - - switch (ioctl_obj) { - case IO_OBJ_STATS: - /* - * Statistics command - */ - break; - - case IO_OBJ_CNX: - - /* - * Connexion command - */ - switch (ioctl_cmd) { - case IO_CMD_LIST: - strncpy(msg_name, "NAS_RG_MSG_CNX_STATUS_REQUEST", 64); - rc = eRALlte_NAS_write_cnx_status_request(mt_ix); - break; - - default: - ERR(" %s : invalid ioctl command %d for object %d\n", - __FUNCTION__, ioctl_cmd, ioctl_obj); - break; - } - - break; - - case IO_OBJ_RB: - - /* - * Radio Bearer command - */ - switch (ioctl_cmd) { - case IO_CMD_ADD: - strncpy(msg_name, "NAS_RG_MSG_RB_ESTABLISH_REQUEST", 64); - rc = eRALlte_NAS_write_rb_establish_request(mt_ix, ch_ix); - break; - - case IO_CMD_DEL: - strncpy(msg_name, "NAS_RG_MSG_RB_RELEASE_REQUEST", 64); - rc = eRALlte_NAS_write_rb_release_request(mt_ix, ch_ix); - break; - - case IO_CMD_LIST: - strncpy(msg_name, "NAS_RG_MSG_RB_LIST_REQUEST", 64); - rc = eRALlte_NAS_write_rb_list_request(mt_ix); - break; - - default: - ERR(" %s : invalid ioctl command %d for object %d\n", - __FUNCTION__, ioctl_cmd, ioctl_obj); - break; - } - - break; - - case IO_OBJ_MC: - - /* - * Multicast command - */ - switch (ioctl_cmd) { - case IO_CMD_ADD: - break; - - case IO_CMD_DEL: - break; - - default: - ERR(" %s : invalid ioctl command %d for object %d\n", - __FUNCTION__, ioctl_cmd, ioctl_obj); - break; - } - - break; - - default: - ERR(" %s : invalid ioctl object %d\n", __FUNCTION__, ioctl_obj); - break; - } - - if (!rc) { - rc = send(g_sockd_nas, nas_rg_msg, nas_rg_request->length, 0); - - if (rc < 0) { - ERR(": failed to send %s (%d)\n", msg_name, errno); -#ifdef MSCGEN_PYTOOL - NOTICE("[MSC_MSG][%s][%s][--- %s ---x][nas]\n", - getTimeStamp4Log(), g_link_id, msg_name); -#endif - } else { - DEBUG (" %s sent to NAS (%d)\n", msg_name, nas_rg_request->length); -#ifdef MSCGEN_PYTOOL - NOTICE("[MSC_MSG][%s][%s][--- %s --->][nas]\n", - getTimeStamp4Log(), g_link_id, msg_name); -#endif - } - } - - return rc; -} -#endif - -/**************************************************************************** - ** ** - ** Name: eRALlte_NAS_send_rb_establish_request() ** - ** ** - ** Description: Sends Radio Bearer establish request to the NAS driver. ** - ** ** - ** Inputs: mt_ix: Mobile Terminal index ** - ** ch_ix: Radio bearer channel index ** - ** Others: g_sockd_nas, nas_rg_msg, nas_rg_request ** - ** ** - ** Outputs: None ** - ** Return: -1 if the request message has not been ** - ** successfully sent to the NAS driver. ** - ** Otherwise, the number of bytes actually ** - ** sent to the NAS driver. ** - ** Others: None ** - ** ** - ***************************************************************************/ -int eRALlte_NAS_send_rb_establish_request(int mt_ix, int ch_ix) -{ - int rc = eRALlte_NAS_write_rb_establish_request(mt_ix, ch_ix); - - if (!rc) { - rc = send(g_sockd_nas, nas_rg_msg, nas_rg_request->length, 0); - - if (rc < 0) { - ERR(": failed to send NAS_RG_MSG_RB_ESTABLISH_REQUEST (%d)\n", errno); -#ifdef MSCGEN_PYTOOL - NOTICE("[MSC_MSG][%s][%s][--- NAS_RG_MSG_RB_ESTABLISH_REQUEST ---x][nas]\n", getTimeStamp4Log(), g_link_id); -#endif - } else { - DEBUG (" NAS_RG_MSG_RB_ESTABLISH_REQUEST sent to NAS (%d)\n", nas_rg_request->length); -#ifdef MSCGEN_PYTOOL - NOTICE("[MSC_MSG][%s][%s][--- NAS_RG_MSG_RB_ESTABLISH_REQUEST --->][nas]\n", getTimeStamp4Log(), g_link_id); -#endif - } - } - - return rc; -} - -/**************************************************************************** - ** ** - ** Name: eRALlte_NAS_send_rb_release_request() ** - ** ** - ** Description: Sends Radio Bearer release request to the NAS driver. ** - ** ** - ** Inputs: mt_ix: Mobile Terminal index ** - ** ch_ix: Radio bearer channel index ** - ** Others: g_sockd_nas, nas_rg_msg, nas_rg_request ** - ** ** - ** Outputs: None ** - ** Return: -1 if the request message has not been ** - ** successfully sent to the NAS driver. ** - ** Otherwise, the number of bytes actually ** - ** sent to the NAS driver. ** - ** Others: None ** - ** ** - ***************************************************************************/ -int eRALlte_NAS_send_rb_release_request(int mt_ix, int ch_ix) -{ - int rc = eRALlte_NAS_write_rb_release_request(mt_ix, ch_ix); - - if (!rc) { - rc = send(g_sockd_nas, nas_rg_msg, nas_rg_request->length, 0); - - if (rc < 0) { - ERR(": failed to send NAS_RG_MSG_RB_RELEASE_REQUEST (%d)\n", errno); -#ifdef MSCGEN_PYTOOL - NOTICE("[MSC_MSG][%s][%s][--- NAS_RG_MSG_RB_RELEASE_REQUEST ---x][nas]\n", getTimeStamp4Log(), g_link_id); -#endif - } else { - DEBUG (" NAS_RG_MSG_RB_RELEASE_REQUEST sent to NAS (%d)\n", nas_rg_request->length); -#ifdef MSCGEN_PYTOOL - NOTICE("[MSC_MSG][%s][%s][--- NAS_RG_MSG_RB_RELEASE_REQUEST --->][nas]\n", getTimeStamp4Log(), g_link_id); -#endif - } - } - - return rc; -} - -/****************************************************************************/ -/********************* L O C A L F U N C T I O N S *********************/ -/****************************************************************************/ - -/**************************************************************************** - ** ** - ** Name: eRALlte_NAS_write_rb_establish_request() ** - ** ** - ** Description: Writes Radio Bearer establish request to be sent to the ** - ** NAS driver. ** - ** ** - ** Inputs: mt_ix: Mobile Terminal index ** - ** ch_ix: Radio bearer channel index ** - ** Others: ralpriv ** - ** ** - ** Outputs: None ** - ** Return: Always returns 0 ** - ** Others: nas_rg_request, ralpriv ** - ** ** - ***************************************************************************/ -static int eRALlte_NAS_write_rb_establish_request(int mt_ix, int ch_ix) -{ - struct ral_lte_channel *currChannel; - struct nas_rg_msg_rb_establish_request* rb_est_req = &(nas_rg_request->tqalNASPrimitive.rb_est_req); - - nas_rg_request->type = NAS_RG_MSG_RB_ESTABLISH_REQUEST; - nas_rg_request->length = sizeof(struct nas_rg_netl_hdr) + sizeof(struct nas_rg_msg_rb_establish_request); - - if (mt_ix == RAL_MAX_MT) { - currChannel = &(ralpriv->mcast.radio_channel); - } else { - currChannel = &(ralpriv->mt[mt_ix].radio_channel[ch_ix]); - } - - rb_est_req->cnxid = currChannel->cnx_id; - rb_est_req->RBParms.rbId = currChannel->rbId; - rb_est_req->RBParms.QoSclass = currChannel->RadioQoSclass; - rb_est_req->RBParms.dscp = currChannel->dscpDL; - rb_est_req->mcast_flag = currChannel->multicast; - - ralpriv->pending_req_mt_ix = mt_ix; - ralpriv->pending_req_ch_ix = ch_ix; - - return 0; -} - -/**************************************************************************** - ** ** - ** Name: eRALlte_NAS_read_rb_establish_reply() ** - ** ** - ** Description: Reads Radio Bearer establish reply received from the NAS ** - ** driver. ** - ** Returns a Link_Up.indication to the MIH-F. ** - ** ** - ** Inputs: None ** - ** Others: nas_rg_reply ** - ** ** - ** Outputs: None ** - ** Return: 0 if the message type is valid, ** - ** -1 otherwise. ** - ** Others: ralpriv ** - ** ** - ***************************************************************************/ -static int eRALlte_NAS_read_rb_establish_reply(void) -{ - if (nas_rg_reply->type == NAS_RG_MSG_RB_ESTABLISH_REPLY) { - struct ral_lte_channel *currChannel; - struct nas_rg_msg_rb_establish_reply* rb_est_rep = &(nas_rg_reply->tqalNASPrimitive.rb_est_rep); - int mt_ix, ch_ix; - - MIH_C_LINK_TUPLE_ID_T* ltid; - int is_unicast = eRALlte_process_find_channel(rb_est_rep->cnxid, - &mt_ix, &ch_ix); - - /* Read received parameters */ - if (is_unicast) { - ralpriv->mt[mt_ix].ue_id = rb_est_rep->ue_id; - currChannel = &(ralpriv->mt[mt_ix].radio_channel[ch_ix]); - ltid = &ralpriv->mt[mt_ix].ltid; - } else { - currChannel = &(ralpriv->mcast.radio_channel); - ltid = &ralpriv->mcast.ltid; - } - - /* Check channel status */ - if (rb_est_rep->result == NAS_CONNECTED) { - ralpriv->pending_req_status = MIH_C_STATUS_SUCCESS; - currChannel->cnx_id = rb_est_rep->cnxid; - currChannel->rbId = rb_est_rep->RBParms.rbId; - currChannel->RadioQoSclass = rb_est_rep->RBParms.QoSclass; - currChannel->dscpDL = rb_est_rep->RBParms.dscp; - currChannel->status = rb_est_rep->result; - } else { - ralpriv->pending_req_status = MIH_C_STATUS_REJECTED; - /* Clean radio resources */ - eRALlte_process_clean_channel(currChannel); - } - - /* Send Link-Up.indication to the MIH-F */ - if (ralpriv->pending_req_status != MIH_C_STATUS_REJECTED) { - eRALlte_send_link_up_indication(&ralpriv->pending_req_transaction_id, ltid, NULL, NULL, NULL, NULL); - } - - ralpriv->pending_req_mt_ix = -1; - ralpriv->pending_req_ch_ix = -1; - ralpriv->pending_req_transaction_id = 0; - - return 0; - } - - return -1; -} - -/**************************************************************************** - ** ** - ** Name: eRALlte_NAS_write_rb_release_request() ** - ** ** - ** Description: Writes Radio Bearer release request to be sent to the NAS ** - ** driver. ** - ** ** - ** Inputs: mt_ix: Mobile Terminal index ** - ** ch_ix: Radio Bearer channel index ** - ** Others: ralpriv ** - ** ** - ** Outputs: None ** - ** Return: Always returns 0 ** - ** Others: nas_rg_request ** - ** ** - ***************************************************************************/ -static int eRALlte_NAS_write_rb_release_request(int mt_ix, int ch_ix) -{ - struct ral_lte_channel *currChannel; - struct nas_rg_msg_rb_release_request* rb_rel_req = &(nas_rg_request->tqalNASPrimitive.rb_rel_req); - - nas_rg_request->type = NAS_RG_MSG_RB_RELEASE_REQUEST; - nas_rg_request->length = sizeof(struct nas_rg_netl_hdr) + sizeof(struct nas_rg_msg_rb_release_request); - - if (mt_ix == RAL_MAX_MT) { - currChannel = &(ralpriv->mcast.radio_channel); - rb_rel_req->ue_id = RAL_MAX_MT; - } else { - currChannel = &(ralpriv->mt[mt_ix].radio_channel[ch_ix]); - rb_rel_req->ue_id = ralpriv->mt[mt_ix].ue_id; - } - - rb_rel_req->cnxid = currChannel->cnx_id; - rb_rel_req->rbId = currChannel->rbId; - - ralpriv->pending_req_mt_ix = mt_ix; - ralpriv->pending_req_ch_ix = ch_ix; - - return 0; -} - -/**************************************************************************** - ** ** - ** Name: eRALlte_NAS_read_rb_release_reply() ** - ** ** - ** Description: Reads Radio Bearer release reply received from the NAS ** - ** driver. ** - ** Returns a Link_Down.indication to the MIH-F. ** - ** ** - ** Inputs: None ** - ** Others: nas_rg_reply ** - ** ** - ** Outputs: None ** - ** Return: 0 if the message type is valid, ** - ** -1 otherwise. ** - ** Others: ralpriv ** - ** ** - ***************************************************************************/ -static int eRALlte_NAS_read_rb_release_reply(void) -{ - if (nas_rg_reply->type == NAS_RG_MSG_RB_RELEASE_REPLY) { - struct ral_lte_channel *currChannel; - struct nas_rg_msg_rb_release_reply* rb_rel_rep = &(nas_rg_reply->tqalNASPrimitive.rb_rel_rep); - int mt_ix, ch_ix; - MIH_C_LINK_DN_REASON_T reason_code = MIH_C_LINK_DOWN_REASON_EXPLICIT_DISCONNECT; - MIH_C_LINK_TUPLE_ID_T* ltid; - - int is_unicast = eRALlte_process_find_channel(rb_rel_rep->cnxid, - &mt_ix, &ch_ix); - - /* Read received parameters */ - if (is_unicast) { - assert (rb_rel_rep->ue_id == ralpriv->mt[mt_ix].ue_id); - currChannel = &(ralpriv->mt[mt_ix].radio_channel[ch_ix]); - ltid = &ralpriv->mt[mt_ix].ltid; - } else { - assert (rb_rel_rep->ue_id == RAL_MAX_MT); - currChannel = &(ralpriv->mcast.radio_channel); - ltid = &ralpriv->mcast.ltid; - } - - /* Check channel status */ - if (rb_rel_rep->result == NAS_DISCONNECTED) { - ralpriv->pending_req_status = MIH_C_STATUS_SUCCESS; - } else { - ralpriv->pending_req_status = MIH_C_STATUS_REJECTED; - } - - /* Clean radio resources */ - eRALlte_process_clean_channel(currChannel); - - /* Send Link-Down.indication to the MIH-F */ - if (ralpriv->pending_req_status != MIH_C_STATUS_REJECTED) { - eRALlte_send_link_down_indication(&ralpriv->pending_req_transaction_id, ltid, NULL, &reason_code); - } - - ralpriv->pending_req_mt_ix = -1; - ralpriv->pending_req_ch_ix = -1; - ralpriv->pending_req_transaction_id = 0; - - return 0; - } - - return -1; -} - -/**************************************************************************** - ** ** - ** Name: eRALlte_NAS_write_cnx_status_request() ** - ** ** - ** Description: Writes connection status request to be sent to the NAS ** - ** driver. ** - ** ** - ** Inputs: mt_ix: Mobile Terminal index ** - ** Others: ralpriv ** - ** ** - ** Outputs: None ** - ** Return: Always returns 0 ** - ** Others: nas_rg_request ** - ** ** - ***************************************************************************/ -static int eRALlte_NAS_write_cnx_status_request(int mt_ix) -{ - struct nas_rg_msg_cnx_status_request* cnx_stat_req = &(nas_rg_request->tqalNASPrimitive.cnx_stat_req); - - nas_rg_request->type = NAS_RG_MSG_CNX_STATUS_REQUEST; - nas_rg_request->length = sizeof(struct nas_rg_netl_hdr) + sizeof(struct nas_rg_msg_cnx_status_request); - - /* Connection status is requested for MT unicast only */ - assert (mt_ix < RAL_MAX_MT); - cnx_stat_req->ue_id = ralpriv->mt[mt_ix].ue_id; - return 0; -} - -/**************************************************************************** - ** ** - ** Name: eRALlte_NAS_read_cnx_status_reply() ** - ** ** - ** Description: Reads connection status reply received from the NAS ** - ** driver. ** - ** ** - ** Inputs: None ** - ** Others: nas_rg_reply ** - ** ** - ** Outputs: None ** - ** Return: 0 if the message type is valid, ** - ** -1 otherwise. ** - ** Others: ralpriv ** - ** ** - ***************************************************************************/ -static int eRALlte_NAS_read_cnx_status_reply(void) -{ - if (nas_rg_reply->type == NAS_RG_MSG_CNX_STATUS_REPLY) { - struct nas_rg_msg_cnx_status_reply* cnx_stat_rep = &(nas_rg_reply->tqalNASPrimitive.cnx_stat_rep); - - int mt_ix = cnx_stat_rep->ue_id; - - /* Connection status has been requested for MT unicast only */ - assert (mt_ix < RAL_MAX_MT); - assert (mt_ix == ralpriv->mt[mt_ix].ue_id); - - /* Read MT connection establishment status */ - ralpriv->mt[mt_ix].mt_state = cnx_stat_rep->status; // TODO ??? - return 0; - } - - return -1; -} - -/**************************************************************************** - ** ** - ** Name: eRALlte_NAS_write_rb_list_request() ** - ** ** - ** Description: Writes Radio Bearer list request to be sent to the NAS ** - ** driver. ** - ** ** - ** Inputs: mt_ix: Mobile Terminal index ** - ** Others: ralpriv ** - ** ** - ** Outputs: None ** - ** Return: Always returns 0 ** - ** Others: nas_rg_request ** - ** ** - ***************************************************************************/ -static int eRALlte_NAS_write_rb_list_request(int mt_ix) -{ - struct nas_rg_msg_rb_list_request* rb_list_req = &(nas_rg_request->tqalNASPrimitive.rb_list_req); - - nas_rg_request->type = NAS_RG_MSG_RB_LIST_REQUEST; - nas_rg_request->length = sizeof(struct nas_rg_netl_hdr) + sizeof(struct nas_rg_msg_rb_list_request); - - /* Radio Bearer list is requested for MT unicast only */ - assert (mt_ix < RAL_MAX_MT); - rb_list_req->ue_id = ralpriv->mt[mt_ix].ue_id; - return 0; -} - -/**************************************************************************** - ** ** - ** Name: eRALlte_NAS_read_rb_list_reply() ** - ** ** - ** Description: Reads Radio Bearer list reply received from the NAS ** - ** driver. ** - ** ** - ** Inputs: None ** - ** Others: nas_rg_reply ** - ** ** - ** Outputs: None ** - ** Return: 0 if the message type is valid, ** - ** -1 otherwise. ** - ** Others: ralpriv ** - ** ** - ***************************************************************************/ -static int eRALlte_NAS_read_rb_list_reply(void) -{ - if (nas_rg_reply->type == NAS_RG_MSG_RB_LIST_REPLY) { - struct ral_lte_channel *currChannel; - struct nas_rg_msg_rb_list_reply* rb_list_rep = &(nas_rg_reply->tqalNASPrimitive.rb_list_rep); - - int mt_ix = rb_list_rep->ue_id; - int ch_ix; - - /* Radio Bearer list has been requested for MT unicast only */ - assert (mt_ix < RAL_MAX_MT); - assert (mt_ix == ralpriv->mt[mt_ix].ue_id); - - /* Read Radio Bearer channel data */ - assert (rb_list_rep->num_rb <= NAS_RG_NETL_MAX_RABS); - ralpriv->mt[mt_ix].num_rbs = rb_list_rep->num_rb; - - for (ch_ix = 0; ch_ix < ralpriv->mt[mt_ix].num_rbs; ch_ix++) { - currChannel = &ralpriv->mt[mt_ix].radio_channel[ch_ix]; - currChannel->multicast = 0; - currChannel->rbId = rb_list_rep->RBList[ch_ix].rbId; - currChannel->RadioQoSclass = rb_list_rep->RBList[ch_ix].QoSclass; - currChannel->dscpUL = rb_list_rep->RBList[ch_ix].dscp; // TODO ??? - currChannel->dscpDL = rb_list_rep->RBList[ch_ix].dscp; // TODO ??? - } - - return 0; - } - - return -1; -} - -/**************************************************************************** - ** ** - ** Name: imei2l2id() ** - ** ** - ** Description: Converts IMEI to Layer 2 identifier ** - ** ** - ** Inputs: imei IMEI identifier ** - ** Others: None ** - ** ** - ** Outputs: l2id Layer 2 identifier ** - ** Return: None ** - ** Others: None ** - ** ** - ***************************************************************************/ -static void imei2l2id(const uint8_t* imei, uint32_t* l2id) -{ - if ( !(imei) || !(l2id) ) { - ERR(" %s : input parameter is NULL\n", __FUNCTION__); - return; - } - - l2id[0] = imei[0]+256 *(imei[1]+256*(imei[2]+256*(imei[3]))); - l2id[1] = imei[4]+256 *(imei[5]+256*(imei[6]+256*(imei[7]))); -} - diff --git a/openair3/RAL-LTE/RAL-DUMMY/SRC/eRALlte_action.c b/openair3/RAL-LTE/RAL-DUMMY/SRC/eRALlte_action.c deleted file mode 100644 index 24bad1909d..0000000000 --- a/openair3/RAL-LTE/RAL-DUMMY/SRC/eRALlte_action.c +++ /dev/null @@ -1,890 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ - -#include - -#include "eRALlte_action.h" - -#include "eRALlte_mih_msg.h" -#include "eRALlte_variables.h" -#include "eRALlte_constants.h" -#include "eRALlte_proto.h" - -/****************************************************************************/ -/******************* G L O C A L D E F I N I T I O N S *****************/ -/****************************************************************************/ - -/****************************************************************************/ -/******************* L O C A L D E F I N I T I O N S *******************/ -/****************************************************************************/ - -static MIH_C_LINK_ACTION_T g_link_action; - -static const char* g_link_action_type_str[] = { - "MIH_C_LINK_AC_TYPE_NONE", - "MIH_C_LINK_AC_TYPE_LINK_DISCONNECT", - "MIH_C_LINK_AC_TYPE_LINK_LOW_POWER", - "MIH_C_LINK_AC_TYPE_LINK_POWER_DOWN", - "MIH_C_LINK_AC_TYPE_LINK_POWER_UP", -#ifdef MIH_C_MEDIEVAL_EXTENSIONS - "MIH_C_LINK_AC_TYPE_LINK_FLOW_ATTR", - "MIH_C_LINK_AC_TYPE_LINK_ACTIVATE_RESOURCES", - "MIH_C_LINK_AC_TYPE_LINK_DEACTIVATE_RESOURCES" -#endif -}; - -static int _eRALlte_action_is_in_progress(MIH_C_STATUS_T* status, - MIH_C_LINK_AC_RESULT_T* ac_status, - MIH_C_LINK_AC_TYPE_T action); - -#ifdef MIH_C_MEDIEVAL_EXTENSIONS -static MIH_C_LINK_AC_RESULT_T _eRALlte_action_link_flow_attr(void); -static MIH_C_LINK_AC_RESULT_T _eRALlte_action_link_activate_resources(void); -static MIH_C_LINK_AC_RESULT_T _eRALlte_action_link_deactivate_resources(void); - -/* - * --------------------------------------------------------------------------- - * Flow identifier management: - * Radio Bearer data flows are identified by a source address, a destination - * address and a port number for a particular IP transport protocol (UDP, - * TCP). A private data structure is used to map upper-layer flow identifiers - * to lower-layer RB channel identifiers. It is handled by private functions. - * --------------------------------------------------------------------------- - */ -/* Structure of the destination data flow */ -struct Data_flow { - unsigned char addr[16]; // IP address - unsigned int l2id[2]; // L2 identifier - unsigned int port; // IP port identifier - int proto; // IP protocol - int cnxid; // Data flow identifier -}; -typedef struct { - int n_flows; -#define ACTION_MAX_FLOW ((RAL_MAX_MT)*(RAL_MAX_RB)) - struct Data_flow flow [ACTION_MAX_FLOW]; - int flow_id [ACTION_MAX_FLOW]; //added TEMP MW 23/05/13 -} eRALlte_action_DataFlowList_t; - -static eRALlte_action_DataFlowList_t g_flows = {}; - -static int _eRALlte_action_set_channel_id (MIH_C_FLOW_ID_T* flowId, int cnxid); -static int _eRALlte_action_get_channel_id (MIH_C_FLOW_ID_T* flowId, int* cnxid); -static int _eRALlte_action_del_channel_id (int fix); -#endif // MIH_C_MEDIEVAL_EXTENSIONS - -/****************************************************************************/ -/****************** E X P O R T E D F U N C T I O N S ******************/ -/****************************************************************************/ - -/**************************************************************************** - ** ** - ** Name: eRALlte_action_request() ** - ** ** - ** Description: Processes the Link_Action.request message and sends a ** - ** Link_Action.confirm message to the MIHF. ** - ** ** - ** Inputs: msgP: Pointer to the received message ** - ** Others: ralpriv ** - ** ** - ** Outputs: None ** - ** Return: None ** - ** Others: g_link_action ** - ** ** - ***************************************************************************/ -void eRALlte_action_request(MIH_C_Message_Link_Action_request_t* msgP) -{ - MIH_C_STATUS_T status; - MIH_C_LINK_AC_TYPE_T link_action_type; - MIH_C_LINK_AC_RESULT_T link_action_result; - int link_action_done = 0; - - memcpy(&g_link_action, &msgP->primitive.LinkAction, sizeof(MIH_C_LINK_ACTION_T)); - - status = MIH_C_STATUS_SUCCESS; - link_action_type = msgP->primitive.LinkAction.link_ac_type; - link_action_result = MIH_C_LINK_AC_RESULT_SUCCESS; - - /* - * Read link action attributs - * -------------------------- - */ - if (msgP->primitive.LinkAction.link_ac_attr & MIH_C_BIT_LINK_AC_ATTR_LINK_SCAN) { - /* - * Link scan operation request - Not supported by the network side: - * No measurements - */ - DEBUG(" ACTION ATTRIBUTE MIH_C_BIT_LINK_AC_ATTR_LINK_SCAN: REFUSED\n"); - link_action_result = MIH_C_LINK_AC_RESULT_REFUSED; - eRALlte_send_link_action_confirm(&msgP->header.transaction_id, - &status, - NULL, - &link_action_result); - } - - if (msgP->primitive.LinkAction.link_ac_attr & MIH_C_BIT_LINK_AC_ATTR_LINK_RES_RETAIN) { - /* - * Link resource retain operation request - Not supported by the - * network side. - */ - DEBUG(" ACTION ATTRIBUTE MIH_C_BIT_LINK_AC_ATTR_LINK_RES_RETAIN: REFUSED\n"); - link_action_result = MIH_C_LINK_AC_RESULT_REFUSED; - eRALlte_send_link_action_confirm(&msgP->header.transaction_id, - &status, - NULL, - &link_action_result); - } - - if (msgP->primitive.LinkAction.link_ac_attr & MIH_C_BIT_LINK_AC_ATTR_DATA_FWD_REQ) { - /* - * Data forward operation request - Not supported by the network side. - */ - DEBUG(" ACTION ATTRIBUTE MIH_C_BIT_LINK_AC_ATTR_DATA_FWD_REQ: REFUSED\n"); - link_action_result = MIH_C_LINK_AC_RESULT_REFUSED; - eRALlte_send_link_action_confirm(&msgP->header.transaction_id, - &status, - NULL, - &link_action_result); - } - - /* - * Read link action request - * ------------------------ - * Requested actions that are not supported or currently in progress - * are refused. - */ - if (_eRALlte_action_is_in_progress(&status, - &link_action_result, - link_action_type)) { - DEBUG(" Link action request %s is not supported or currently in progress\n", g_link_action_type_str[link_action_type]); - } else { - DEBUG(" %s ACTION REQUESTED: %s\n", __FUNCTION__, g_link_action_type_str[link_action_type]); - - switch (link_action_type) { - case MIH_C_LINK_AC_TYPE_NONE: - DEBUG(" NO ACTION\n"); - break; - -#ifdef MIH_C_MEDIEVAL_EXTENSIONS - - case MIH_C_LINK_AC_TYPE_LINK_FLOW_ATTR: - /* - * Provide the mark and multicast configuration to be set up - * for the data flow - */ - ralpriv->pending_req_ac_result = _eRALlte_action_link_flow_attr(); - link_action_done = 1; - break; - - case MIH_C_LINK_AC_TYPE_LINK_ACTIVATE_RESOURCES: - /* - * Configure and activate a data flow - */ - ralpriv->pending_req_ac_result = _eRALlte_action_link_activate_resources(); - link_action_done = 1; - break; - - case MIH_C_LINK_AC_TYPE_LINK_DEACTIVATE_RESOURCES: - /* - * Deactivate a previously activated data flow - */ - ralpriv->pending_req_ac_result = _eRALlte_action_link_deactivate_resources(); - link_action_done = 1; - break; -#endif // MIH_C_MEDIEVAL_EXTENSIONS - - case MIH_C_LINK_AC_TYPE_LINK_DISCONNECT: - - /* - * Disconnect the link connection directly - */ - case MIH_C_LINK_AC_TYPE_LINK_LOW_POWER: - - /* - * Cause the link to adjust its battery power level to be - * low power consumption - Not supported by the network side - */ - case MIH_C_LINK_AC_TYPE_LINK_POWER_DOWN: - - /* - * Cause the link to power down and turn off the radio - * - Not supported by the network side - */ - case MIH_C_LINK_AC_TYPE_LINK_POWER_UP: - /* - * Cause the link to power up and establish L2 connectivity. - * For UMTS link type, power up lower layers and establish - * PDP context - Not supported by the network side - */ - DEBUG(" REFUSED\n"); - link_action_result = MIH_C_LINK_AC_RESULT_REFUSED; - break; - - default: - ERR(" %s Invalid LinkAction.link_ac_type %d\n", - __FUNCTION__, link_action_type); - status = MIH_C_STATUS_UNSPECIFIED_FAILURE; - } - } - - /* Return link action confirmation to the MIH-F */ - if (link_action_done) { - ralpriv->pending_req_transaction_id = msgP->header.transaction_id; - ralpriv->pending_req_status = MIH_C_STATUS_SUCCESS; - eRALlte_send_link_action_confirm(&ralpriv->pending_req_transaction_id, - &ralpriv->pending_req_status, - NULL, - &ralpriv->pending_req_ac_result); - } else if (status == MIH_C_STATUS_SUCCESS) { - eRALlte_send_link_action_confirm(&msgP->header.transaction_id, - &status, - NULL, - &link_action_result); - } else { - eRALlte_send_link_action_confirm(&msgP->header.transaction_id, - &status, - NULL, - NULL); - } - - ralpriv->pending_req_action = 0; -} - -/**************************************************************************** - ** ** - ** Name: eRALlte_action_save_flow_id() ** - ** ** - ** Description: Save connection identifier and data of the specified data ** - ** flow into the list of active data flows. ** - ** ** - ** Inputs: flowId: The data flow identifier ** - ** cnxid: The connection identifier ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: The index of the specified data flow in ** - ** the list of active data flows. ** - ** -1 if the list is full. ** - ** Others: None ** - ** ** - ***************************************************************************/ -extern int eRALlte_action_save_flow_id(MIH_C_FLOW_ID_T* flowId, int cnxid) -{ - return _eRALlte_action_set_channel_id(flowId, cnxid); -} - -/****************************************************************************/ -/********************* L O C A L F U N C T I O N S *********************/ -/****************************************************************************/ - -/**************************************************************************** - ** Name: eRALlte_action_set_channel_id() ** - ** ** - ** Description: Set the Connection identifier and store data of the ** - ** specified data flow in the list of active data flows. ** - ** Inputs: flowId: The data flow identifier ** - ** cnxid: The connection identifier ** - ** Outputs: None ** - ** Return: The index of the specified data flow in ** - ** the list of active data flows. ** - ** -1 if the list is full. ** - ***************************************************************************/ -static int _eRALlte_action_set_channel_id (MIH_C_FLOW_ID_T* flowId, int cnxid) -{ - char addr[128]; - //char port[8]; - int f_ix; - - assert(cnxid != 0); - - for (f_ix = 0; f_ix < ACTION_MAX_FLOW; f_ix++) { - if (g_flows.flow[f_ix].cnxid > 0) continue; - - g_flows.flow[f_ix].cnxid = cnxid; - g_flows.flow_id[f_ix] = (int) flowId; - g_flows.n_flows += 1; - - // Modified Michelle - memcpy((char*)&(DestIpv6Addr[0][16]), addr, 16); - eRALlte_process_mt_addr_to_l2id(&g_flows.flow[f_ix].addr[8], - &g_flows.flow[f_ix].l2id[0]); - - /* MIH_C_TRANSPORT_ADDR_VALUE2String(&flowId->dest_addr.ip_addr.address, addr); - memcpy((char*)&(g_flows.flow[f_ix].addr), addr, 16); - eRALlte_process_mt_addr_to_l2id(&g_flows.flow[f_ix].addr[8], - &g_flows.flow[f_ix].l2id[0]); - MIH_C_PORT2String(&flowId->dest_addr.port, port); - g_flows.flow[f_ix].port = strtol(port, (char**) NULL, 16); - g_flows.flow[f_ix].proto = flowId->transport_protocol;*/ - return f_ix; - } - - return (-1); -} - -/**************************************************************************** - ** Name: eRALlte_action_get_channel_id() ** - ** ** - ** Description: Returns the Connection identifier of the specified data ** - ** flow. ** - ** Inputs: flowId: The data flow identifier ** - ** Others: None ** - ** Outputs: cnxid: The connection identifier allocated to the ** - ** specified data flow. ** - ** Return: The index of the specified data flow in ** - ** the list of active data flows. ** - ** -1 if no any connection identifier exists ** - ** for the specified data flow. ** - ** Others: None ** - ***************************************************************************/ -static int _eRALlte_action_get_channel_id (MIH_C_FLOW_ID_T* flowId, int* cnxid) -{ - //char addr[128]; - //char port[8]; - //unsigned int dp; - int f_ix; - - // MIH_C_TRANSPORT_ADDR_VALUE2String(&flowId->dest_addr.ip_addr.address, addr); - // MIH_C_PORT2String(&flowId->dest_addr.port, port); - // dp = strtol(port, (char**) NULL, 16); - - for (f_ix = 0; f_ix < ACTION_MAX_FLOW; f_ix++) { - /* if (!eRALlte_process_cmp_mt_addr((const char*)addr, (const char*)g_flows.flow[f_ix].l2id)) continue; - if (g_flows.flow[f_ix].port != dp) continue; - if (g_flows.flow[f_ix].proto != flowId->transport_protocol) continue;*/ - if (g_flows.flow_id[f_ix] != *flowId) continue; - - *cnxid = g_flows.flow[f_ix].cnxid; - return f_ix; - } - - return (-1); -} - -/**************************************************************************** - ** ** - ** Name: eRALlte_action_del_channel_id() ** - ** ** - ** Description: Remove the data flow stored at the specified index in the ** - ** list of active data flows. ** - ** ** - ** Inputs: fix: Index of the data flow in the list ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: The number of the remaining data flows in ** - ** the list. ** - ** -1 if the specified index is out of the ** - ** boundary of the list. ** - ** Others: None ** - ** ** - ***************************************************************************/ -static int _eRALlte_action_del_channel_id (int fix) -{ - if (fix < ACTION_MAX_FLOW) { - g_flows.n_flows -= 1; - memset (&g_flows.flow[fix], 0, sizeof (struct Data_flow)); - return g_flows.n_flows; - } - - return (-1); -} - -/**************************************************************************** - ** ** - ** Name: _eRALlte_action_is_in_progress() ** - ** ** - ** Description: Checks if an action request is supported and whether it ** - ** is currently in progress. ** - ** ** - ** Inputs: action: Type of link action ** - ** Others: g_link_action, ralpriv ** - ** ** - ** Outputs: status: MIH request status ** - ** ac_status: Action request status ** - ** Return: 1 if the request is not supported or is ** - ** currently in progress and the resource is ** - ** already in the required state. 0 otherwise.** - ** Others: None ** - ** ** - ***************************************************************************/ -static int _eRALlte_action_is_in_progress(MIH_C_STATUS_T* status, - MIH_C_LINK_AC_RESULT_T* ac_status, - MIH_C_LINK_AC_TYPE_T action) -{ - /* Check whether the action link command is supported */ - if (!(ralpriv->mih_supported_link_command_list & MIH_C_BIT_LINK_ACTION)) { - *status = MIH_C_STATUS_REJECTED; - return 1; - } - - *status = MIH_C_STATUS_SUCCESS; - - /* Check whether the action request is supported */ - if (ralpriv->mih_supported_link_action_list & (1 << action)) { - /* Check whether another action request is currently in progress */ - if ((ralpriv->pending_req_action) && (ralpriv->pending_req_action != action)) { - /* Another action request is in progress: - * Do not process new request before completion of this one */ - *ac_status = MIH_C_LINK_AC_RESULT_REFUSED; - return 1; - } - - /* The action request is supported and no other request is in progress: - * Go ahead and process the request */ - return 0; - } - - /* The link action request is not supported */ - *ac_status = MIH_C_LINK_AC_RESULT_INCAPABLE; - return 1; -} - -#ifdef MIH_C_MEDIEVAL_EXTENSIONS -/**************************************************************************** - ** ** - ** Name: _eRALlte_action_link_flow_attr() ** - ** ** - ** Description: Processes the link flow attribut action request. ** - ** ** - ** Inputs: None ** - ** Others: g_link_action ** - ** ** - ** Outputs: None ** - ** Return: MIH_C_LINK_AC_RESULT_SUCCESS if action has ** - ** been successfully processed. ** - ** Others: ralpriv ** - ** ** - ***************************************************************************/ -static MIH_C_LINK_AC_RESULT_T _eRALlte_action_link_flow_attr(void) -//TODO -{ - MIH_C_FLOW_ATTRIBUTE_T *flow = &g_link_action.link_ac_param._union.flow_attribute; - int mt_ix, ch_ix, f_ix; - int cnxid; - - /* Get the connection identifier */ - f_ix = _eRALlte_action_get_channel_id(&flow->flow_id, &cnxid); - - if (f_ix < 0) { - DEBUG(" No RB allocated for this data flow\n"); - return MIH_C_LINK_AC_RESULT_REFUSED; - } - - /* Get MT and RB channel identifiers */ - if (eRALlte_process_find_channel(cnxid, &mt_ix, &ch_ix) != 0) { - /* Unicast data flow */ - DEBUG (" %s: Unicast MT's address = %s\n", __FUNCTION__, - eRALlte_process_mt_addr_to_string(ralpriv->mt[mt_ix].ipv6_addr)); - } else { - /* Multicast data flow */ - DEBUG (" %s: Multicast MT's address = %s\n", __FUNCTION__, - eRALlte_process_mt_addr_to_string(ralpriv->mcast.mc_group_addr)); - } - - if (flow->choice_mark_qos) { - DEBUG(" Mark QoS enabled\n"); - //TODO ??? - } - - if (flow->choice_mark_drop_eligibility) { - DEBUG(" Mark drop eligibility enabled\n"); - //TODO ??? - } - - /* Link action successfully processed */ - ralpriv->pending_req_action = MIH_C_LINK_AC_TYPE_LINK_FLOW_ATTR; - return MIH_C_LINK_AC_RESULT_SUCCESS; -} - -/**************************************************************************** - ** ** - ** Name: _eRALlte_action_link_activate_resources() ** - ** ** - ** Description: Processes the link activate resource action request. ** - ** ** - ** Inputs: None ** - ** Others: g_link_action ** - ** ** - ** Outputs: None ** - ** Return: MIH_C_LINK_AC_RESULT_SUCCESS if action has ** - ** been successfully processed. ** - ** Others: ralpriv ** - ** ** - ***************************************************************************/ -static MIH_C_LINK_AC_RESULT_T _eRALlte_action_link_activate_resources(void) -{ - MIH_C_RESOURCE_DESC_T *res = &g_link_action.link_ac_param._union.resource_desc; - MIH_C_COS_T classIdDL = 0; - MIH_C_COS_T classIdUL = 0; - MIH_C_LINK_DATA_RATE_T resBitrateDL = 0; - MIH_C_LINK_DATA_RATE_T resBitrateUL = 0; - MIH_C_BOOLEAN_T multicast = MIH_C_BOOLEAN_FALSE; - - /* TODO: To be initialized downlink/uplink */ - if (res->choice_qos) { - MIH_C_QOS_T *qos = &(res->_union_qos.qos); - - if (qos->choice) { - classIdDL = qos->_union.cos; - classIdUL = qos->_union.cos; - } - } - - if (res->choice_link_data_rate) { - resBitrateDL = res->_union_link_data_rate.link_data_rate; - resBitrateUL = res->_union_link_data_rate.link_data_rate; - } - - /* end TODO */ - - if (res->choice_multicast_enable) { - multicast = res->_union_multicast_enable.multicast_enable; - } - - /* - * Get the Care-of Address (MT address): - * The destination address is contained into the MIH_C_FLOW_ID structure - * within the MIH_C_RESOURCE_DESC parameters of the request. - */ - char mt_addr[128]; - //original code: int len = MIH_C_TRANSPORT_ADDR_VALUE2String(&res->flow_id.dest_addr.ip_addr.address, mt_addr); - - MIH_C_TRANSPORT_ADDR_VALUE_T mihc_transport_addr_value; - MIH_C_TRANSPORT_ADDR_VALUE_set(&mihc_transport_addr_value, (unsigned char*)"2001:660:382:14:335:600:8014:9150", strlen("2001:660:382:14:335:600:8014:9150")); - - int len = MIH_C_TRANSPORT_ADDR_VALUE2String(&mihc_transport_addr_value, mt_addr); - //int len = MIH_C_TRANSPORT_ADDR_VALUE2String(&DestIpv6Addr[0][16], mt_addr); - - if ( (len > 0) && (len < 128)) { - DEBUG (" %s: MT's address = %s\n", __FUNCTION__, eRALlte_process_mt_addr_to_string((unsigned char*)mt_addr)); - } else { - ERR (" %s : IP Address is NOT valid (len=%d)\n", __FUNCTION__, len); - return MIH_C_LINK_AC_RESULT_FAILURE; - } - -#if 0 - char mt_addr[128]; - - if (res->link_id.link_addr.choice == MIH_C_CHOICE_3GPP_3G_CELL_ID) { - char link_addr[128]; - int len = MIH_C_LINK_ADDR2String(&res->link_id.link_addr, link_addr); - - if ( (len > 0) && (len <= 128) ) { - int i; - DEBUG (" %s : Link address = %s\n", __FUNCTION__, link_addr); - - for (i=0; i < len; i++) { - if (link_addr[i] == '=') break; - } - - strncpy(mt_addr, &link_addr[i+2], 16); - DEBUG (" %s : MT address = %s\n", __FUNCTION__, mt_addr); - } else { - ERR (" %s : Link address is NOT valid (len=%d)\n", __FUNCTION__, len); - return MIH_C_LINK_AC_RESULT_FAILURE; - } - } else { - ERR (" %s : Link address is NOT valid (type=%d, not 3GPP_3G_CELL_ID)\n", - __FUNCTION__, res->link_id.link_addr.choice); - return MIH_C_LINK_AC_RESULT_FAILURE; - } - -#endif - - /* - * If the resource has already been activated, check whether it is in the - * required state. - */ - struct ral_lte_channel *currChannel; - int mt_ix, ch_ix, f_ix; - int cnxid; - - /* Get the connection identifier */ - f_ix = _eRALlte_action_get_channel_id(&res->flow_id, &cnxid); - - if (f_ix != -1) { - /* Get MT and RB channel identifiers */ - if (eRALlte_process_find_channel(cnxid, &mt_ix, &ch_ix) != 0) { - /* Unicast data flow */ - currChannel = &(ralpriv->mt[mt_ix].radio_channel[ch_ix]); - } else { - /* Multicast data flow */ - assert(multicast == MIH_C_BOOLEAN_TRUE); - currChannel = &(ralpriv->mcast.radio_channel); - } - - if (currChannel->status == NAS_CONNECTED) { - /* The resource is already in the required state */ - DEBUG(" Link action ACTIVATE_RESOURCES requested while link resource is ALREADY activated\n"); - return MIH_C_LINK_AC_RESULT_SUCCESS; - } - - /* The resource is not in the required state: - * Remove the connection identifier from the list of active resources - * and process the action request again. */ - DEBUG(" Resource has been activated but is not in the ACTIVE state\n"); - (void) _eRALlte_action_del_channel_id(f_ix); - } - - MIH_C_LINK_TUPLE_ID_T *ltid; - int is_ready_for_rb_establish = 1; - - if (multicast) { - /* - * Multicast data flow: - */ - mt_ix = RAL_MAX_MT; - ch_ix = 0; - currChannel = &(ralpriv->mcast.radio_channel); - currChannel->cnx_id = (RAL_MAX_RB_PER_UE*mt_ix)+1; - currChannel->rbId = RAL_DEFAULT_RAB_ID; - currChannel->multicast = 1; - memcpy((char*)&(ralpriv->mcast.mc_group_addr), mt_addr, 16); - ltid = &(ralpriv->mcast.ltid); - } else { - /* - * Unicast data flow - */ - /* Get the list of MTs waiting for RB establishment */ -#ifdef RAL_REALTIME - TQAL_process_NAS_message(IO_OBJ_CNX, IO_CMD_LIST, 0, 0); - TQAL_process_NAS_message(IO_OBJ_RB, IO_CMD_LIST, 0, 0); -#endif - /* Check if the MT is in the list */ - mt_ix = eRALlte_process_find_mt_by_addr(mt_addr); - - if ( (mt_ix < RAL_MAX_MT) && - (ralpriv->mt[mt_ix].mt_state == RB_CONNECTED)) { - /* The MT is ready for RB establishment */ - ch_ix = eRALlte_process_find_new_channel(mt_ix); - - if (ch_ix == RAL_MAX_RB) { - DEBUG(" No RB available in MT\n"); - return MIH_C_LINK_AC_RESULT_REFUSED; - } - - currChannel = &(ralpriv->mt[mt_ix].radio_channel[ch_ix]); - currChannel->cnx_id = (RAL_MAX_RB_PER_UE*mt_ix)+ch_ix+1; - currChannel->rbId = RAL_DEFAULT_RAB_ID + ch_ix; - currChannel->multicast = 0; - DEBUG(" mt_ix %d, ch_ix %d, cnx_id %d, rbId %d\n", - mt_ix, ch_ix, currChannel->cnx_id, currChannel->rbId); - memcpy((char *)&(ralpriv->mt[mt_ix].ipv6_addr), mt_addr, 16); - ltid = &(ralpriv->mt[mt_ix].ltid); - } else { - /* The MT is NOT ready for RB establishment */ - is_ready_for_rb_establish = 0; - int qos_is_valid = 0; - - DEBUG(" Mobile Terminal not ready - Storing request data\n"); - - /* Check validity of QoS parameters */ - if ( (classIdDL < 64) && (classIdUL < 64) ) { - if ( (resBitrateDL <= RAL_BITRATE_320k) - && (resBitrateUL <= RAL_BITRATE_320k) ) { - qos_is_valid = 1; - } else if ( (resBitrateDL >= RAL_BITRATE_384k) - && (resBitrateDL <= RAL_BITRATE_440k) - && (resBitrateUL <= RAL_BITRATE_64k) ) { - qos_is_valid = 1; - } - } - - if (qos_is_valid) { - DEBUG(" Received QoS parameters are valid\n"); - } else { - DEBUG(" Received QoS parameters are NOT valid - Request will be rejected\n"); - return MIH_C_LINK_AC_RESULT_REFUSED; - } - - currChannel = &(ralpriv->pending_mt.radio_channel[0]); - currChannel->cnx_id = 0; - currChannel->rbId = 0; - currChannel->multicast = 0; - memcpy((char *)&(ralpriv->pending_mt.ipv6_addr), mt_addr, 16); - - ltid = &(ralpriv->pending_mt.ltid); - ralpriv->pending_req_flag = 1; - - } /* end MT not ready */ - - } /* end unicast data flow */ - - /* Save the current data flow identifier into the list of active data flows */ - if (currChannel->cnx_id != 0) { - f_ix = _eRALlte_action_set_channel_id(&res->flow_id, currChannel->cnx_id); - - if (f_ix < 0) { - DEBUG(" No RB available\n"); - return MIH_C_LINK_AC_RESULT_REFUSED; - } - } else { - /* The current request is pending waiting for RB establishment */ - f_ix = 0; - ralpriv->pending_req_fid = res->flow_id; - } - - /* - * Store resource parameters - */ - int i; - - for (i = 0; i < 2; i++) { - //TODO: int dir = p->qos.value[i].direction; - // TODO: To be initialized downlink/uplink - currChannel->flowId[i] = f_ix; - currChannel->classId[i] = classIdDL; // classIdUL - currChannel->resBitrate[i] = resBitrateDL; // resBitrateUL - //currChannel->meanBitrate[i] = p->qos.value[i].tspec.meanBitrate; - //currChannel->bktDepth[i] = p->qos.value[i].tspec.bucketDepth; - //currChannel->pkBitrate[i] = p->qos.value[i].tspec.peakBitrate; - //currChannel->MTU[i] = p->qos.value[i].tspec.maximumTransmissionUnit; - DEBUG(" qos value : DIR %d, flowId %d, classId %d, resBitrate %.1f\n", i , currChannel->flowId[i], currChannel->classId[i], currChannel->resBitrate[i]); - } - - /* Store the link identifier */ - ltid->link_id = res->link_id; - ltid->choice = MIH_C_LINK_TUPLE_ID_CHOICE_LINK_ADDR; - ltid->_union.link_addr.choice = MIH_C_CHOICE_3GPP_3G_CELL_ID; // DUMMY - ltid->_union.link_addr._union._3gpp_3g_cell_id.cell_id = RAL_DEFAULT_CELL_ID; // DUMMY - - /* - * Setup Radio Bearer resources - */ - if (is_ready_for_rb_establish) { - /* Map QoS */ - int mapping_result = eRALlte_process_map_qos(mt_ix, ch_ix); - - if (mapping_result) { - int rc; -#ifdef RAL_DUMMY - rc = eRALlte_NAS_send_rb_establish_request(mt_ix, ch_ix); -#endif -#ifdef RAL_REALTIME - rc = TQAL_process_NAS_message(IO_OBJ_RB, IO_CMD_ADD, mt_ix, ch_ix); -#endif - - if (rc < 0) { - /* Failed to send RB establishment request */ - return MIH_C_LINK_AC_RESULT_FAILURE; - } - } else { - /* QoS mapping is not supported */ - return MIH_C_LINK_AC_RESULT_REFUSED; - } - } else { - /* Wait for MT coming ready; - * re-try to establish RB upon timer expiration */ -#ifdef RAL_DUMMY - ralpriv->pending_mt_timer = 5; -#endif -#ifdef RAL_REALTIME - ralpriv->pending_mt_timer = 300; -#endif - } - - /* Link action successfully processed */ - ralpriv->pending_req_action = MIH_C_LINK_AC_TYPE_LINK_ACTIVATE_RESOURCES; - return MIH_C_LINK_AC_RESULT_SUCCESS; -} - -/**************************************************************************** - ** ** - ** Name: _eRALlte_action_link_deactivate_resources() ** - ** ** - ** Description: Processes the link deactivate resource action request. ** - ** ** - ** Inputs: None ** - ** Others: g_link_action ** - ** ** - ** Outputs: None ** - ** Return: MIH_C_LINK_AC_RESULT_SUCCESS if action has ** - ** been successfully processed. ** - ** Others: ralpriv ** - ** ** - ***************************************************************************/ -static MIH_C_LINK_AC_RESULT_T _eRALlte_action_link_deactivate_resources(void) -{ - MIH_C_RESOURCE_DESC_T *res = &g_link_action.link_ac_param._union.resource_desc; - struct ral_lte_channel *currChannel; - int mt_ix, ch_ix, f_ix; - int cnxid; - - /* Get the connection identifier */ - f_ix = _eRALlte_action_get_channel_id(&res->flow_id, &cnxid); - - if (f_ix < 0) { - DEBUG(" Link action DEACTIVATE_RESOURCES requested while link resource is NOT activated\n"); - return MIH_C_LINK_AC_RESULT_SUCCESS; - } - - /* Get MT and RB channel identifiers */ - if (eRALlte_process_find_channel(cnxid, &mt_ix, &ch_ix) != 0) { - /* Unicast data flow */ - currChannel = &(ralpriv->mt[mt_ix].radio_channel[ch_ix]); - DEBUG (" %s: Unicast MT's address = %s\n", __FUNCTION__, - eRALlte_process_mt_addr_to_string(ralpriv->mt[mt_ix].ipv6_addr)); - } else { - /* Multicast data flow */ - currChannel = &(ralpriv->mcast.radio_channel); - DEBUG (" %s: Multicast MT's address = %s\n", __FUNCTION__, - eRALlte_process_mt_addr_to_string(ralpriv->mcast.mc_group_addr)); - } - - if (currChannel->status == NAS_DISCONNECTED) { - /* The resource is already in the required state */ - DEBUG(" Link action request DEACTIVATE_RESOURCES is currently in progress\n"); - return MIH_C_LINK_AC_RESULT_SUCCESS; - } - - /* The resource is not in the required state: - * Remove the connection identifier from the list of active resources - * and go ahead in the request processing. */ - (void) _eRALlte_action_del_channel_id(f_ix); - - int rc; -#ifdef RAL_DUMMY - rc = eRALlte_NAS_send_rb_release_request(mt_ix, ch_ix); -#endif -#ifdef RAL_REALTIME - rc = TQAL_process_NAS_message(IO_OBJ_RB, IO_CMD_DEL, mt_ix, ch_ix); -#endif - - if (rc < 0) { - /* Failed to send RB release request */ - return MIH_C_LINK_AC_RESULT_FAILURE; - } - - /* Link action successfully processed */ - ralpriv->pending_req_action = MIH_C_LINK_AC_TYPE_LINK_DEACTIVATE_RESOURCES; - return MIH_C_LINK_AC_RESULT_SUCCESS; -} - -#endif // MIH_C_MEDIEVAL_EXTENSIONS diff --git a/openair3/RAL-LTE/RAL-DUMMY/SRC/eRALlte_main.c b/openair3/RAL-LTE/RAL-DUMMY/SRC/eRALlte_main.c deleted file mode 100644 index 7663afa49e..0000000000 --- a/openair3/RAL-LTE/RAL-DUMMY/SRC/eRALlte_main.c +++ /dev/null @@ -1,532 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ - -#include -#include - -#define DEFINE_GLOBAL_CONSTANTS -#include "eRALlte_constants.h" -#include "eRALlte_variables.h" -#include "eRALlte_proto.h" -#include "eRALlte_mih_msg.h" - -#include "MIH_C.h" - -/****************************************************************************/ -/******************* G L O C A L D E F I N I T I O N S *****************/ -/****************************************************************************/ - -/* NAS socket file descritor */ -int g_sockd_nas; // referenced in eRALlte_NAS.c - -/* RAL LTE internal data */ -struct ral_lte_priv *ralpriv; - -/****************************************************************************/ -/******************* L O C A L D E F I N I T I O N S *******************/ -/****************************************************************************/ - -static int g_log_output; -static struct ral_lte_priv rl_priv; - -static void arg_usage(const char* name); -static int parse_opts(int argc, char* argv[]); -static void NAS_Netlink_socket_init(void); -static void get_IPv6_addr(const char* if_name); - -static int RAL_initialize(int argc, const char *argv[]); - -static int netl_s; /* NAS net link socket */ - -/****************************************************************************/ -/****************** E X P O R T E D F U N C T I O N S ******************/ -/****************************************************************************/ - -int main(int argc, const char *argv[]) -{ - int rc, done; - fd_set readfds; - struct timeval tv; - - RAL_initialize(argc, argv); - - ralpriv->pending_mt_timer = 0; - - done = 0; - - do { - /* Initialize fd_set and wait for input */ - FD_ZERO(&readfds); - FD_SET(g_sockd_mihf, &readfds); - FD_SET(g_sockd_nas, &readfds); - tv.tv_sec = MIH_C_RADIO_POLLING_INTERVAL_SECONDS; - tv.tv_usec = MIH_C_RADIO_POLLING_INTERVAL_MICRO_SECONDS; - - rc = select(FD_SETSIZE, &readfds, NULL, NULL, &tv); - - if (rc < 0) { - perror("main : select() failed"); - done = 1; - } - - /* Something is ready for being read */ - else if (rc >= 0) { - /* Read data coming from the MIH Function */ - if (FD_ISSET(g_sockd_mihf, &readfds)) { - done = eRALlte_mih_link_process_message(); - } - - /* Read data coming from the NAS driver */ - if (FD_ISSET(g_sockd_nas, &readfds)) { - done = eRALlte_NAS_process_message(); - } - - /* Wait until next pending MT's timer expiration */ - if (ralpriv->pending_mt_timer > 0) { - ralpriv->pending_mt_timer --; - eRALlte_process_verify_pending_mt_status(); - } - } - } while (!done); - - free(g_ral_ip_address); - free(g_ral_listening_port_for_mihf); - free(g_mihf_remote_port); - free(g_mihf_ip_address); - free(g_link_id); - free(g_mihf_id); - - close(g_sockd_mihf); - close(netl_s); - MIH_C_exit(); - return 0; -} - -/****************************************************************************/ -/********************* L O C A L F U N C T I O N S *********************/ -/****************************************************************************/ - -/**************************************************************************** - ** ** - ** Name: arg_usage() ** - ** ** - ** Description: Displays command line usage ** - ** ** - ** Inputs: name: Name of the running process ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: None ** - ** Others: None ** - ** ** - ***************************************************************************/ -static void arg_usage(const char *name) -{ - fprintf(stderr, - "Usage: %s [options]\nOptions:\n" - " -V, --version Display version information\n" - " -?, -h, --help Display this help text\n" - " -P , --ral-listening-port Listening port for incoming MIH-F messages\n" - " -I , --ral-ip-address Binding IP(v4 or v6) address for RAL\n" - " -p , --mihf-remote-port MIH-F remote port\n" - " -i , --mihf-ip-address MIH-F IP(v4 or v6) address\n" - " -l , --mihf-link-id MIH-F link identifier\n" - " -m , --mihf-id MIH-F identifier\n" - " -c, --output-to-console All stream outputs are redirected to console\n" - " -f, --output-to-file All stream outputs are redirected to file\n" - " -s, --output-to-syslog All stream outputs are redirected to syslog\n", - name); -} - -/**************************************************************************** - ** ** - ** Name: parse_opts() ** - ** ** - ** Description: Parses the command line parameters ** - ** ** - ** Inputs: argc: Number of parameters in the command line ** - ** argv: Command line parameters ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: None ** - ** Others: None ** - ** ** - ***************************************************************************/ -static int parse_opts(int argc, char *argv[]) -{ - static struct option long_opts[] = { - {"version", 0, 0, 'V'}, - {"help", 0, 0, 'h'}, - {"help", 0, 0, '?'}, - {"ral-listening-port", optional_argument, 0, 'P'}, - {"ral-ip-address", optional_argument, 0, 'I'}, - {"mihf-remote-port", optional_argument, 0, 'p'}, - {"mihf-ip-address", optional_argument, 0, 'i'}, - {"mihf-link-id", optional_argument, 0, 'l'}, - {"mihf-id", optional_argument, 0, 'm'}, - {"output-to-console", 0, 0, 'c'}, - {"output-to-file", 0, 0, 'f'}, - {"output-to-syslog", 0, 0, 's'}, - {0, 0, 0, 0} - }; - - /* parse all other cmd line parameters than -c */ - while (1) { - int idx, c; - c = getopt_long(argc, argv, "P:I:p:i:l:m:Vh?cfs", long_opts, &idx); - - if (c == -1) break; - - switch (c) { - case 'V': - fprintf(stderr, "SVN MODULE VERSION: %s\n", SVN_REV); - return -1; - - case '?': - case 'h': - arg_usage(basename(argv[0])); - return -1; - - case 'i': - strncpy(g_mihf_ip_address, optarg, strlen(g_mihf_ip_address)); - break; - - case 'p': - strncpy(g_mihf_remote_port, optarg, strlen(g_mihf_remote_port)); - break; - - case 'P': - strncpy(g_ral_listening_port_for_mihf, optarg, - strlen(g_ral_listening_port_for_mihf)); - break; - - case 'I': - strncpy(g_ral_ip_address, optarg, strlen(g_ral_ip_address)); - break; - - case 'l': - strncpy(g_link_id, optarg, strlen(g_link_id)); - break; - - case 'm': - strncpy(g_mihf_id, optarg, strlen(g_mihf_id)); - break; - - case 'c': - g_log_output = LOG_TO_CONSOLE; - break; - - case 'f': - g_log_output = LOG_TO_FILE; - break; - - case 's': - g_log_output = LOG_TO_SYSTEM; - break; - - default: - break; - }; - } - - return 0; -} - -/**************************************************************************** - ** ** - ** Name: NAS_Netlink_socket_init() ** - ** ** - ** Description: Initializes the communication channel with the NAS driver ** - ** ** - ** Inputs: None ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: None ** - ** Others: netl_s : the NAS net link socket ** - ** ** - ***************************************************************************/ -static void NAS_Netlink_socket_init(void) -{ - int len; - struct sockaddr_un local; - - if ((netl_s = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) { - perror("NAS_Netlink_socket_init : socket() failed"); - exit(1); - } - - local.sun_family = AF_UNIX; - strcpy(local.sun_path, SOCK_TQAL_NAS_PATH); - unlink(local.sun_path); - len = strlen(local.sun_path) + sizeof(local.sun_family); - - if (bind(netl_s, (struct sockaddr *)&local, len) == -1) { - perror("NAS_Netlink_socket_init : bind() failed"); - exit(1); - } - - if (listen(netl_s, 1) == -1) { - perror("NAS_Netlink_socket_init : listen() failed"); - exit(1); - } -} - -/**************************************************************************** - ** ** - ** Name: get_IPv6_addr() ** - ** ** - ** Description: Gets the IPv6 address of the specified network interface. ** - ** ** - ** Inputs: if_name Interface name ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: None ** - ** Others: None ** - ** ** - ***************************************************************************/ -static void get_IPv6_addr(const char* if_name) -{ -#define IPV6_ADDR_LINKLOCAL 0x0020U - - FILE *f; - char devname[20]; - int plen, scope, dad_status, if_idx; - char addr6p[8][5]; - int found = 0; - char my_addr[16]; - char temp_addr[32]; - int i, j; - - DEBUG(" %s : network interface %s\n", __FUNCTION__, if_name); - - if ((f = fopen("/proc/net/if_inet6", "r")) != NULL) { - while (fscanf(f, "%4s%4s%4s%4s%4s%4s%4s%4s %02x %02x %02x %02x %20s\n", - addr6p[0], addr6p[1], addr6p[2], addr6p[3], - addr6p[4], addr6p[5], addr6p[6], addr6p[7], - &if_idx, &plen, &scope, &dad_status, devname) != EOF) { - - if (!strcmp(devname, if_name)) { - found = 1; - - // retrieve numerical value - if ((scope == 0) || (scope == IPV6_ADDR_LINKLOCAL)) { - DEBUG(" adresse %s:%s:%s:%s:%s:%s:%s:%s", - addr6p[0], addr6p[1], addr6p[2], addr6p[3], - addr6p[4], addr6p[5], addr6p[6], addr6p[7]); - DEBUG(" Scope:"); - - switch (scope) { - case 0: - DEBUG(" Global\n"); - break; - - case IPV6_ADDR_LINKLOCAL: - DEBUG(" Link\n"); - break; - - default: - DEBUG(" Unknown\n"); - break; - } - - DEBUG(" Numerical value: "); - - for (i = 0; i < 8; i++) { - for (j = 0; j < 4; j++) { - addr6p[i][j]= toupper(addr6p[i][j]); - - if ((addr6p[i][j] >= 'A') && (addr6p[i][j] <= 'F')) { - temp_addr[(4*i)+j] =(unsigned short int)(addr6p[i][j]-'A')+10; - } else if ((addr6p[i][j] >= '0') && (addr6p[i][j] <= '9')) { - temp_addr[(4*i)+j] =(unsigned short int)(addr6p[i][j]-'0'); - } - } - - my_addr[2*i] = (16*temp_addr[(4*i)])+temp_addr[(4*i)+1]; - my_addr[(2*i)+1] = (16*temp_addr[(4*i)+2])+temp_addr[(4*i)+3]; - - } - - for (i = 0; i < 16; i++) { - DEBUG("-%hhx-",my_addr[i]); - } - - DEBUG("\n"); - } - } - } - - fclose(f); - - if (!found) { - ERR(" %s : interface %s not found\n\n", __FUNCTION__, if_name); - } - } -} - -/**************************************************************************** - ** ** - ** Name: RAL_initialize() ** - ** ** - ** Description: Performs overall RAL LTE initialisations: ** - ** - Default value of global variables ** - ** - Command line parsing ** - ** - List of supported MIH actions ** - ** - List of supported MIH link-events ** - ** - Communication channel with the NAS driver ** - ** - MIH link registration ** - ** ** - ** Inputs: argc: Number of parameters in the command line ** - ** argv: Command line parameters ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: None ** - ** Others: g_mihf_ip_address, g_mihf_remote_port ** - ** g_sockd_mihf, g_ral_ip_address, ** - ** g_ral_listening_port_for_mihf ** - ** g_link_id, g_mihf_id, g_log_output ** - ** g_sockd_nas, ralpriv ** - ** ** - ***************************************************************************/ -static int RAL_initialize(int argc, const char *argv[]) -{ - MIH_C_TRANSACTION_ID_T transaction_id; - unsigned int t; - struct sockaddr_un nas_socket; - - ralpriv = &rl_priv; - memset(ralpriv, 0, sizeof(struct ral_lte_priv)); - - /* - * Initialize defaults - */ - g_ral_ip_address = strdup(DEFAULT_IP_ADDRESS_RAL); - g_ral_listening_port_for_mihf = strdup(DEFAULT_LOCAL_PORT_RAL); - g_mihf_remote_port = strdup(DEFAULT_REMOTE_PORT_MIHF); - g_mihf_ip_address = strdup(DEFAULT_IP_ADDRESS_MIHF); - g_sockd_mihf = -1; - g_link_id = strdup(DEFAULT_LINK_ID); - g_mihf_id = strdup(DEFAULT_MIHF_ID); - g_log_output = LOG_TO_CONSOLE; - - /* - * Parse command line parameters - */ - if (parse_opts(argc, (char**) argv) < 0) { - exit(0); - } - - MIH_C_init(g_log_output); - - DEBUG(" %s -I %s -P %s -i %s -p %s -l %s -m %s\n", argv[0], - g_ral_ip_address, g_ral_listening_port_for_mihf, - g_mihf_ip_address, g_mihf_remote_port, - g_link_id, g_mihf_id); - - /* - * Connect to the MIF Function - */ - DEBUG(" Connect to the MIH-F ...\n"); - - if (eRALlte_mihf_connect() < 0 ) { - ERR(" %s : Could not connect to MIH-F...exiting\n", __FUNCTION__); - exit(-1); - } - - // excluded MIH_C_LINK_AC_TYPE_NONE - // excluded MIH_C_LINK_AC_TYPE_LINK_DISCONNECT - // excluded MIH_C_LINK_AC_TYPE_LINK_LOW_POWER - // excluded MIH_C_LINK_AC_TYPE_LINK_POWER_DOWN - // excluded MIH_C_LINK_AC_TYPE_LINK_POWER_UP - ralpriv->mih_supported_link_action_list = - (1 << MIH_C_LINK_AC_TYPE_LINK_FLOW_ATTR) | - (1 << MIH_C_LINK_AC_TYPE_LINK_ACTIVATE_RESOURCES) | - (1 << MIH_C_LINK_AC_TYPE_LINK_DEACTIVATE_RESOURCES); - - // excluded MIH_C_BIT_LINK_DETECTED - // excluded MIH_C_BIT_LINK_PARAMETERS_REPORT - // excluded MIH_C_BIT_LINK_GOING_DOWN - // excluded MIH_C_BIT_LINK_HANDOVER_IMMINENT - // excluded MIH_C_BIT_LINK_HANDOVER_COMPLETE - // excluded MIH_C_BIT_LINK_PDU_TRANSMIT_STATUS - ralpriv->mih_supported_link_event_list = - MIH_C_BIT_LINK_UP | - MIH_C_BIT_LINK_DOWN; - - // excluded MIH_C_BIT_LINK_GET_PARAMETERS - // excluded MIH_C_BIT_LINK_CONFIGURE_THRESHOLDS - ralpriv->mih_supported_link_command_list = - MIH_C_BIT_LINK_EVENT_SUBSCRIBE | - MIH_C_BIT_LINK_EVENT_UNSUBSCRIBE | - MIH_C_BIT_LINK_ACTION; - - NOTICE("[MSC_NEW][%s][MIH-F=%s]\n", getTimeStamp4Log(), g_mihf_id); - NOTICE("[MSC_NEW][%s][RAL=%s]\n", getTimeStamp4Log(), g_link_id); - NOTICE("[MSC_NEW][%s][NAS=%s]\n", getTimeStamp4Log(), "nas"); - - /* - * Initialize the NAS driver communication channel - */ - NAS_Netlink_socket_init(); - DEBUG(" Waiting for a connection from the NAS Driver ...\n"); - t = sizeof(nas_socket); - - if ((g_sockd_nas = accept(netl_s, (struct sockaddr *)&nas_socket, &t)) == -1) { - perror("RAL_initialize : g_sockd_nas - accept() failed"); - exit(1); - } - - DEBUG(" NAS Driver Connected.\n\n"); - - /* - * Get the interface IPv6 address - */ -#ifdef RAL_DUMMY - get_IPv6_addr("eth0"); -#else -#ifdef RAL_REALTIME - get_IPv6_addr("graal0"); -#endif -#endif - - /* - * Get the list of MTs - */ - eRALlte_NAS_get_MTs_list(); - DEBUG(" List of MTs initialized\n\n"); - - transaction_id = (MIH_C_TRANSACTION_ID_T)0; - eRALlte_send_link_register_indication(&transaction_id); - - return 0; -} diff --git a/openair3/RAL-LTE/RAL-DUMMY/SRC/eRALlte_mih_msg.c b/openair3/RAL-LTE/RAL-DUMMY/SRC/eRALlte_mih_msg.c deleted file mode 100644 index 92dfd626bd..0000000000 --- a/openair3/RAL-LTE/RAL-DUMMY/SRC/eRALlte_mih_msg.c +++ /dev/null @@ -1,1945 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ - -#include "eRALlte_mih_msg.h" - -#include "eRALlte_constants.h" -#include "eRALlte_variables.h" - -#include "eRALlte_subscribe.h" -#include "eRALlte_parameters.h" -#include "eRALlte_thresholds.h" -#include "eRALlte_action.h" - -/****************************************************************************/ -/******************* G L O C A L D E F I N I T I O N S *****************/ -/****************************************************************************/ - -#define MSG_CODEC_RECV_BUFFER_SIZE 16400 -#define MSG_CODEC_SEND_BUFFER_SIZE 16400 - -/****************************************************************************/ -/******************* L O C A L D E F I N I T I O N S *******************/ -/****************************************************************************/ - -static u_int8_t g_msg_codec_recv_buffer[MSG_CODEC_RECV_BUFFER_SIZE] = {}; -static u_int8_t g_msg_codec_send_buffer[MSG_CODEC_SEND_BUFFER_SIZE] = {}; - -static char g_msg_print_buffer[8192] = {}; -static char g_msg_codec_print_buffer[8192] = {}; - -static int eRALlte_mih_link_msg_decode(Bit_Buffer_t* bbP, MIH_C_Message_Wrapper_t *message_wrapperP); - -static int eRALlte_send_to_mih(const u_int8_t *bufferP, int lenP); - -static void eRALlte_print_buffer(const u_int8_t * bufferP, int lenP); - -#ifdef MSCGEN_PYTOOL -#define MSC_GEN_BUF_SIZE 1024 -static char g_msc_gen_buf[MSC_GEN_BUF_SIZE]; -static unsigned int g_msc_gen_buffer_index; -#endif - -/****************************************************************************/ -/****************** E X P O R T E D F U N C T I O N S ******************/ -/****************************************************************************/ - -/* - * ------------------------------------------------------------------------- - * Functions used to send MIH link service management messages - * ------------------------------------------------------------------------- - */ - -/**************************************************************************** - ** ** - ** Name: eRALlte_send_link_register_indication() ** - ** ** - ** Description: Sends a Link_Register.indication message to the MIHF. ** - ** ** - ** This message is ODTONE specific and not defined by the ** - ** 802.21 standard. It allows the Link SAP to send informa- ** - ** tions to the MIHF about which technology it supports and ** - ** which interface it manages. ** - ** Upon receiving this message the MIHF executes its Link ** - ** SAPs discovery procedure in order to get the full link ** - ** capabilities. ** - ** ** - ** Inputs: tidP Transaction identifier ** - ** Others: g_link_id, g_mihf_id, ralpriv ** - ** ** - ** Outputs: None ** - ** Return: None ** - ** Others: g_msg_codec_send_buffer ** - ** ** - ***************************************************************************/ -void eRALlte_send_link_register_indication(MIH_C_TRANSACTION_ID_T *tidP) -{ - MIH_C_Message_Link_Register_indication_t message; - Bit_Buffer_t *bb; - int message_total_length; - - DEBUG(" Send MIH_C_MESSAGE_LINK_REGISTER_INDICATION\n"); - - bb = new_BitBuffer_0(); - BitBuffer_wrap(bb, g_msg_codec_send_buffer, (unsigned int)MSG_CODEC_SEND_BUFFER_SIZE); - - memset(&message, 0, sizeof (MIH_C_Message_Link_Register_indication_t)); - - message.header.version = (MIH_C_VERSION_T)MIH_C_PROTOCOL_VERSION; - //message.header.ack_req = 0; - //message.header.ack_rsp = 0; - //message.header.uir = 0; - //message.header.more_fragment = 0 - //message.header.fragment_number = 0; - message.header.service_identifier = (MIH_C_SID_T)1; - message.header.operation_code = (MIH_C_OPCODE_T)3; - message.header.action_identifier = (MIH_C_AID_T)6; - message.header.transaction_id = *tidP; - - MIH_C_MIHF_ID_set(&message.source, (u_int8_t*)g_link_id, strlen(g_link_id)); - - MIH_C_MIHF_ID_set(&message.destination, (u_int8_t*)g_mihf_id, strlen(g_mihf_id)); - - message.primitive.Link_Id.link_type = MIH_C_WIRELESS_UMTS; - message.primitive.Link_Id.link_addr.choice = (MIH_C_CHOICE_T)MIH_C_CHOICE_3GPP_3G_CELL_ID; - - Bit_Buffer_t *plmn = new_BitBuffer_0(); - BitBuffer_wrap(plmn, (unsigned char*) ralpriv->plmn, DEFAULT_PLMN_SIZE); - MIH_C_PLMN_ID_decode(plmn, &message.primitive.Link_Id.link_addr._union._3gpp_3g_cell_id.plmn_id); - message.primitive.Link_Id.link_addr._union._3gpp_3g_cell_id.cell_id = ralpriv->curr_cellId; - free_BitBuffer(plmn); - - message_total_length = MIH_C_Link_Message_Encode_Link_Register_indication(bb, &message); - -#ifdef MSCGEN_PYTOOL - memset(g_msc_gen_buf, 0, MSC_GEN_BUF_SIZE); - g_msc_gen_buffer_index = 0; - MIH_C_LINK_ID2String(&message.primitive.Link_Id, g_msc_gen_buf); -#endif - - if (eRALlte_send_to_mih(bb->m_buffer, message_total_length) < 0) { - ERR(": Send Link_Register.indication\n"); -#ifdef MSCGEN_PYTOOL - NOTICE("[MSC_MSG][%s][%s][--- Link_Register.indication\\n%s ---x][%s]\n", - getTimeStamp4Log(), - g_link_id, - g_msc_gen_buf, - g_mihf_id); -#endif - } else { - DEBUG(": Sent Link_Register.indication\n"); -#ifdef MSCGEN_PYTOOL - NOTICE("[MSC_MSG][%s][%s][--- Link_Register.indication\\n%s --->][%s]\n", - getTimeStamp4Log(), - g_link_id, - g_msc_gen_buf, - g_mihf_id); -#endif - } - - free_BitBuffer(bb); -} - -/**************************************************************************** - ** ** - ** Name: eRALlte_send_capability_discover_confirm() ** - ** ** - ** Description: Sends capability discover service management response to ** - ** the MIH-F. ** - ** ** - ** Inputs: tidP Transaction identifier ** - ** statusP: Status of operation ** - ** levt_listP: List of events supported by the link layer ** - ** lcmd_listP: List of commands supported by the link ** - ** layer ** - ** Others: g_link_id, g_mihf_id ** - ** ** - ** Outputs: None ** - ** Return: None ** - ** Others: g_msg_codec_send_buffer ** - ** ** - ***************************************************************************/ -void eRALlte_send_capability_discover_confirm(MIH_C_TRANSACTION_ID_T *tidP, - MIH_C_STATUS_T *statusP, - MIH_C_LINK_EVENT_LIST_T *link_evt_listP, - MIH_C_LINK_CMD_LIST_T *link_cmd_listP) -{ - MIH_C_Message_Link_Capability_Discover_confirm_t message; - Bit_Buffer_t *bb; - int message_total_length; - - DEBUG(" Send MIH_C_MESSAGE_LINK_CAPABILITY_DISCOVER_CONFIRM\n"); - - bb = new_BitBuffer_0(); - BitBuffer_wrap(bb, g_msg_codec_send_buffer, (unsigned int)MSG_CODEC_SEND_BUFFER_SIZE); - - memset(&message, 0, sizeof (MIH_C_Message_Link_Capability_Discover_confirm_t)); - - message.header.version = (MIH_C_VERSION_T)MIH_C_PROTOCOL_VERSION; - //message.header.ack_req = 0; - //message.header.ack_rsp = 0; - //message.header.uir = 0; - //message.header.more_fragment = 0 - //message.header.fragment_number = 0; - message.header.service_identifier = (MIH_C_SID_T)1; - message.header.operation_code = (MIH_C_OPCODE_T)0; - message.header.action_identifier = (MIH_C_AID_T)1; - message.header.transaction_id = *tidP; - - MIH_C_MIHF_ID_set(&message.source, (u_int8_t*)g_link_id, strlen(g_link_id)); - MIH_C_MIHF_ID_set(&message.destination, (u_int8_t*)g_mihf_id, strlen(g_mihf_id)); - - message.primitive.Status = *statusP; - message.primitive.SupportedLinkEventList = link_evt_listP; - message.primitive.SupportedLinkCommandList = link_cmd_listP; - - message_total_length = MIH_C_Link_Message_Encode_Capability_Discover_confirm(bb, &message); - -#ifdef MSCGEN_PYTOOL - memset(g_msc_gen_buf, 0, MSC_GEN_BUF_SIZE); - g_msc_gen_buffer_index = 0; - g_msc_gen_buffer_index += MIH_C_STATUS2String(&message.primitive.Status, &g_msc_gen_buf[g_msc_gen_buffer_index]); - g_msc_gen_buffer_index += sprintf(&g_msc_gen_buf[g_msc_gen_buffer_index], "\\n\\nsupported link events="); - g_msc_gen_buffer_index += MIH_C_LINK_EVENT_LIST2String2(message.primitive.SupportedLinkEventList, &g_msc_gen_buf[g_msc_gen_buffer_index]); - g_msc_gen_buffer_index += sprintf(&g_msc_gen_buf[g_msc_gen_buffer_index], "\\nsupported commands="); - g_msc_gen_buffer_index += MIH_C_LINK_CMD_LIST2String2(message.primitive.SupportedLinkCommandList, &g_msc_gen_buf[g_msc_gen_buffer_index]); -#endif - - if (eRALlte_send_to_mih(bb->m_buffer, message_total_length) < 0) { - ERR(": Send Link_Capability_Discover.confirm\n"); -#ifdef MSCGEN_PYTOOL - NOTICE("[MSC_MSG][%s][%s][--- Link_Capability_Discover.confirm\\nstatus=%s ---x][%s]\n", - getTimeStamp4Log(), - g_link_id, - g_msc_gen_buf, - g_mihf_id); -#endif - } else { - DEBUG(": Sent Link_Capability_Discover.confirm\n"); -#ifdef MSCGEN_PYTOOL - NOTICE("[MSC_MSG][%s][%s][--- Link_Capability_Discover.confirm\\nstatus=%s --->][%s]\n", - getTimeStamp4Log(), - g_link_id, - g_msc_gen_buf, - g_mihf_id); -#endif - } - - free_BitBuffer(bb); -} - -/**************************************************************************** - ** ** - ** Name: eRALlte_send_event_subscribe_confirm() ** - ** ** - ** Description: Sends a Link_Event_Subscribe.confirm message to the MIHF. ** - ** ** - ** This primitive is generated in response to a Link_Event_ ** - ** Subscribe.request. ** - ** ** - ** Inputs: tidP Transaction identifier ** - ** statusP: Status of operation ** - ** levt_listP: List of successfully subscribed link events** - ** Others: g_link_id, g_mihf_id ** - ** ** - ** Outputs: None ** - ** Return: None ** - ** Others: g_msg_codec_send_buffer ** - ** ** - ***************************************************************************/ -void eRALlte_send_event_subscribe_confirm(MIH_C_TRANSACTION_ID_T *tidP, - MIH_C_STATUS_T *statusP, - MIH_C_LINK_EVENT_LIST_T *levt_listP) -{ - MIH_C_Message_Link_Event_Subscribe_confirm_t message; - Bit_Buffer_t *bb; - int message_total_length; - - DEBUG(" Send MIH_C_MESSAGE_LINK_EVENT_SUBSCRIBE_CONFIRM\n"); - - bb = new_BitBuffer_0(); - BitBuffer_wrap(bb, g_msg_codec_send_buffer, (unsigned int)MSG_CODEC_SEND_BUFFER_SIZE); - - memset(&message, 0, sizeof (MIH_C_Message_Link_Event_Subscribe_confirm_t)); - - message.header.version = (MIH_C_VERSION_T)MIH_C_PROTOCOL_VERSION; - //message.header.ack_req = 0; - //message.header.ack_rsp = 0; - //message.header.uir = 0; - //message.header.more_fragment = 0 - //message.header.fragment_number = 0; - message.header.service_identifier = (MIH_C_SID_T)1; - message.header.operation_code = (MIH_C_OPCODE_T)0; - message.header.action_identifier = (MIH_C_AID_T)4; - message.header.transaction_id = *tidP; - - MIH_C_MIHF_ID_set(&message.source, (u_int8_t*)g_link_id, strlen(g_link_id)); - - MIH_C_MIHF_ID_set(&message.destination, (u_int8_t*)g_mihf_id, strlen(g_mihf_id)); - - message.primitive.Status = *statusP; - message.primitive.ResponseLinkEventList = levt_listP; - - message_total_length = MIH_C_Link_Message_Encode_Event_Subscribe_confirm(bb, &message); - -#ifdef MSCGEN_PYTOOL - memset(g_msc_gen_buf, 0, MSC_GEN_BUF_SIZE); - g_msc_gen_buffer_index = 0; - g_msc_gen_buffer_index += MIH_C_STATUS2String(&message.primitive.Status, &g_msc_gen_buf[g_msc_gen_buffer_index]); - - if (levt_listP) { - g_msc_gen_buffer_index += sprintf(&g_msc_gen_buf[g_msc_gen_buffer_index], "\\nlink event list="); - g_msc_gen_buffer_index += MIH_C_LINK_EVENT_LIST2String2(message.primitive.ResponseLinkEventList, &g_msc_gen_buf[g_msc_gen_buffer_index]); - } - -#endif - - if (eRALlte_send_to_mih(bb->m_buffer, message_total_length) < 0) { - ERR(": Send Link_Event_Subscribe.confirm\n"); -#ifdef MSCGEN_PYTOOL - NOTICE("[MSC_MSG][%s][%s][--- Link_Event_Subscribe.confirm\\nstatus=%s ---x][%s]\n", - getTimeStamp4Log(), - g_link_id, - g_msc_gen_buf, - g_mihf_id); -#endif - } else { - DEBUG(": Sent Link_Event_Subscribe.confirm\n"); -#ifdef MSCGEN_PYTOOL - NOTICE("[MSC_MSG][%s][%s][--- Link_Event_Subscribe.confirm\\nstatus=%s --->][%s]\n", - getTimeStamp4Log(), - g_link_id, - g_msc_gen_buf, - g_mihf_id); -#endif - } - - free_BitBuffer(bb); -} - -/**************************************************************************** - ** ** - ** Name: eRALlte_send_event_unsubscribe_confirm() ** - ** ** - ** Description: Sends a Link_Event_Unsubscribe.confirm message to the ** - ** MIHF. ** - ** ** - ** This primitive is generated in response to a Link_Event_ ** - ** Unsubscribe.request. ** - ** ** - ** Inputs: tidP Transaction identifier ** - ** statusP: Status of operation ** - ** levt_listP: List of successfully subscribed link events** - ** Others: g_link_id, g_mihf_id ** - ** ** - ** Outputs: None ** - ** Return: None ** - ** Others: g_msg_codec_send_buffer ** - ** ** - ***************************************************************************/ -void eRALlte_send_event_unsubscribe_confirm(MIH_C_TRANSACTION_ID_T *tidP, - MIH_C_STATUS_T *statusP, - MIH_C_LINK_EVENT_LIST_T *levt_listP) -{ - MIH_C_Message_Link_Event_Unsubscribe_confirm_t message; - Bit_Buffer_t *bb; - int message_total_length; - - DEBUG(" Send MIH_C_MESSAGE_LINK_EVENT_UNSUBSCRIBE_CONFIRM\n"); - - bb = new_BitBuffer_0(); - BitBuffer_wrap(bb, g_msg_codec_send_buffer, (unsigned int)MSG_CODEC_SEND_BUFFER_SIZE); - - memset(&message, 0, sizeof (MIH_C_Message_Link_Event_Unsubscribe_confirm_t)); - - message.header.version = (MIH_C_VERSION_T)MIH_C_PROTOCOL_VERSION; - //message.header.ack_req = 0; - //message.header.ack_rsp = 0; - //message.header.uir = 0; - //message.header.more_fragment = 0 - //message.header.fragment_number = 0; - message.header.service_identifier = (MIH_C_SID_T)1; - message.header.operation_code = (MIH_C_OPCODE_T)0; - message.header.action_identifier = (MIH_C_AID_T)5; - message.header.transaction_id = *tidP; - - MIH_C_MIHF_ID_set(&message.source, (u_int8_t*)g_link_id, strlen(g_link_id)); - - MIH_C_MIHF_ID_set(&message.destination, (u_int8_t*)g_mihf_id, strlen(g_mihf_id)); - - message.primitive.Status = *statusP; - message.primitive.ResponseLinkEventList = levt_listP; - - message_total_length = MIH_C_Link_Message_Encode_Event_Unsubscribe_confirm(bb, &message); - -#ifdef MSCGEN_PYTOOL - memset(g_msc_gen_buf, 0, MSC_GEN_BUF_SIZE); - g_msc_gen_buffer_index = 0; - g_msc_gen_buffer_index += MIH_C_STATUS2String(&message.primitive.Status, &g_msc_gen_buf[g_msc_gen_buffer_index]); - - if (levt_listP) { - g_msc_gen_buffer_index += sprintf(&g_msc_gen_buf[g_msc_gen_buffer_index], "\\nlink event list="); - g_msc_gen_buffer_index += MIH_C_LINK_EVENT_LIST2String2(message.primitive.ResponseLinkEventList, &g_msc_gen_buf[g_msc_gen_buffer_index]); - } - -#endif - - if (eRALlte_send_to_mih(bb->m_buffer, message_total_length) < 0) { - ERR(": Send Link_Event_Unsubscribe.confirm\n"); -#ifdef MSCGEN_PYTOOL - NOTICE("[MSC_MSG][%s][%s][--- Link_Event_Unsubscribe.confirm\\nstatus=%s ---x][%s]\n", - getTimeStamp4Log(), - g_link_id, - g_msc_gen_buf, - g_mihf_id); -#endif - } else { - DEBUG(": Sent Link_Event_Unsubscribe.confirm\n"); -#ifdef MSCGEN_PYTOOL - NOTICE("[MSC_MSG][%s][%s][--- Link_Event_Unsubscribe.confirm\\nstatus=%s --->][%s]\n", - getTimeStamp4Log(), - g_link_id, - g_msc_gen_buf, - g_mihf_id); -#endif - } - - free_BitBuffer(bb); -} - -/* - * ------------------------------------------------------------------------- - * Functions used to send MIH link event messages - * ------------------------------------------------------------------------- - */ - -/**************************************************************************** - ** ** - ** Name: eRALlte_send_link_detected_indication() ** - ** ** - ** Description: Sends a Link_Detected.indication message to the MIHF. ** - ** ** - ** The Link Detected event is generated on the MN when the ** - ** first PoA of an access network is detected. This event is ** - ** not generated when subsequent PoAs of the same access ** - ** network are discovered during the active connection on ** - ** that link. ** - ** ** - ** Inputs: tidP Transaction identifier ** - ** linfoP: Information of the detected link ** - ** Others: g_link_id, g_mihf_id ** - ** ** - ** Outputs: None ** - ** Return: None ** - ** Others: g_msg_codec_send_buffer ** - ** ** - ***************************************************************************/ -void eRALlte_send_link_detected_indication(MIH_C_TRANSACTION_ID_T *tidP, - MIH_C_LINK_DET_INFO_T *linfoP) -{ - MIH_C_Message_Link_Detected_indication_t message; - Bit_Buffer_t *bb; - int message_total_length; - - if (!(ralpriv->mih_supported_link_event_list & MIH_C_BIT_LINK_DETECTED)) { - return; - } - - DEBUG(" Send MIH_C_MESSAGE_LINK_DETECTED_INDICATION\n"); - - bb = new_BitBuffer_0(); - BitBuffer_wrap(bb, g_msg_codec_send_buffer, (unsigned int)MSG_CODEC_SEND_BUFFER_SIZE); - - memset(&message, 0, sizeof (MIH_C_Message_Link_Detected_indication_t)); - - message.header.version = (MIH_C_VERSION_T)MIH_C_PROTOCOL_VERSION; - //message.header.ack_req = 0; - //message.header.ack_rsp = 0; - //message.header.uir = 0; - //message.header.more_fragment = 0 - //message.header.fragment_number = 0; - message.header.service_identifier = (MIH_C_SID_T)2; - message.header.operation_code = (MIH_C_OPCODE_T)3; - message.header.action_identifier = (MIH_C_AID_T)1; - message.header.transaction_id = *tidP; - - MIH_C_MIHF_ID_set(&message.source, (u_int8_t*)g_link_id, strlen(g_link_id)); - - MIH_C_MIHF_ID_set(&message.destination, (u_int8_t*)g_mihf_id, strlen(g_mihf_id)); - - memcpy(&message.primitive.LinkDetectedInfo, linfoP, - sizeof(MIH_C_LINK_DET_INFO_T)); - - message_total_length = MIH_C_Link_Message_Encode_Link_Detected_indication(bb, &message); - -#ifdef MSCGEN_PYTOOL - g_msc_gen_buffer_index = 0; - memset(g_msc_gen_buf, 0, MSC_GEN_BUF_SIZE); - g_msc_gen_buffer_index = MIH_C_SIG_STRENGTH2String(&linfoP->sig_strength, &g_msc_gen_buf[g_msc_gen_buffer_index]); - g_msc_gen_buffer_index = sprintf(&g_msc_gen_buf[g_msc_gen_buffer_index], "\\nSINR %d\\nData rate %d", linfoP->sinr, linfoP->link_data_rate); -#endif - - if (eRALlte_send_to_mih(bb->m_buffer, message_total_length) < 0) { - ERR(": Send Link_Detected.indication\n"); -#ifdef MSCGEN_PYTOOL - NOTICE("[MSC_MSG][%s][%s][--- Link_Detected.indication\\n%s ---x][%s]\n", - getTimeStamp4Log(), - g_link_id, - g_msc_gen_buf, - g_mihf_id); -#endif - } else { - DEBUG(": Sent Link_Detected.indication\n"); -#ifdef MSCGEN_PYTOOL - NOTICE("[MSC_MSG][%s][%s][--- Link_Detected.indication\\n%s --->][%s]\n", - getTimeStamp4Log(), - g_link_id, - g_msc_gen_buf, - g_mihf_id); -#endif - } - - free_BitBuffer(bb); -} - -/**************************************************************************** - ** ** - ** Name: eRALlte_send_link_up_indication() ** - ** ** - ** Description: Sends a Link_Up.indication message to the MIHF. ** - ** ** - ** This notification is generated when a layer 2 connection ** - ** is established for the specified link interface. ** - ** ** - ** Inputs: tidP Transaction identifier ** - ** lidP: Link identifier ** - ** old_arP: Old access router link address ** - ** new_arP: New access router link address ** - ** flagP: Indicates whether the MN needs to change ** - ** IP Address in the new PoA ** - ** mobil_mngtP: Indicates the type of Mobility Management ** - ** Protocol supported by the new PoA ** - ** Others: g_link_id, g_mihf_id, ** - ** ** - ** Outputs: None ** - ** Return: None ** - ** Others: g_msg_codec_send_buffer ** - ** ** - ***************************************************************************/ -void eRALlte_send_link_up_indication(MIH_C_TRANSACTION_ID_T *tidP, - MIH_C_LINK_TUPLE_ID_T *lidP, - MIH_C_LINK_ADDR_T *old_arP, - MIH_C_LINK_ADDR_T *new_arP, - MIH_C_IP_RENEWAL_FLAG_T *flagP, - MIH_C_IP_MOB_MGMT_T *mobil_mngtP) -{ - MIH_C_Message_Link_Up_indication_t message; - Bit_Buffer_t *bb; - int message_total_length; - - if (!(ralpriv->mih_supported_link_event_list & MIH_C_BIT_LINK_UP)) { - return; - } - - DEBUG(" Send MIH_C_MESSAGE_LINK_UP_INDICATION\n"); - - bb = new_BitBuffer_0(); - BitBuffer_wrap(bb, g_msg_codec_send_buffer, (unsigned int)MSG_CODEC_SEND_BUFFER_SIZE); - - memset(&message, 0, sizeof (MIH_C_Message_Link_Up_indication_t)); - - message.header.version = (MIH_C_VERSION_T)MIH_C_PROTOCOL_VERSION; - //message.header.ack_req = 0; - //message.header.ack_rsp = 0; - //message.header.uir = 0; - //message.header.more_fragment = 0 - //message.header.fragment_number = 0; - message.header.service_identifier = (MIH_C_SID_T)2; - message.header.operation_code = (MIH_C_OPCODE_T)3; - message.header.action_identifier = (MIH_C_AID_T)2; - message.header.transaction_id = *tidP; - - MIH_C_MIHF_ID_set(&message.source, (u_int8_t*)g_link_id, strlen(g_link_id)); - - MIH_C_MIHF_ID_set(&message.destination, (u_int8_t*)g_mihf_id, strlen(g_mihf_id)); - - memcpy(&message.primitive.LinkIdentifier, lidP, sizeof(MIH_C_LINK_TUPLE_ID_T)); - - message.primitive.OldAccessRouter = old_arP; - message.primitive.NewAccessRouter = new_arP; - message.primitive.IPRenewalFlag = flagP; - message.primitive.MobilityManagementSupport = mobil_mngtP; - - message_total_length = MIH_C_Link_Message_Encode_Link_Up_indication(bb, &message); - -#ifdef MSCGEN_PYTOOL - memset(g_msc_gen_buf, 0, MSC_GEN_BUF_SIZE); - g_msc_gen_buffer_index = 0; - g_msc_gen_buffer_index += MIH_C_LINK_ID2String(&lidP->link_id, &g_msc_gen_buf[g_msc_gen_buffer_index]); - - g_msc_gen_buffer_index += sprintf(&g_msc_gen_buf[g_msc_gen_buffer_index], "\\nOldAccessRouter="); - - if (old_arP) { - g_msc_gen_buffer_index += MIH_C_LINK_ADDR2String(old_arP, &g_msc_gen_buf[g_msc_gen_buffer_index]); - } else { - g_msc_gen_buffer_index += sprintf(&g_msc_gen_buf[g_msc_gen_buffer_index], "null"); - } - - g_msc_gen_buffer_index += sprintf(&g_msc_gen_buf[g_msc_gen_buffer_index], "\\nNewAccessRouter="); - - if (old_arP) { - g_msc_gen_buffer_index += MIH_C_LINK_ADDR2String(new_arP, &g_msc_gen_buf[g_msc_gen_buffer_index]); - } else { - g_msc_gen_buffer_index += sprintf(&g_msc_gen_buf[g_msc_gen_buffer_index], "null"); - } - -#endif - - if (eRALlte_send_to_mih(bb->m_buffer, message_total_length) < 0) { - ERR(": Send Link_Up.indication\n"); -#ifdef MSCGEN_PYTOOL - NOTICE("[MSC_MSG][%s][%s][--- Link_Up.indication\\n%s ---x][%s]\n", - getTimeStamp4Log(), - g_link_id, - g_msc_gen_buf, - g_mihf_id); -#endif - } else { - DEBUG(": Sent Link_Up.indication\n"); -#ifdef MSCGEN_PYTOOL - NOTICE("[MSC_MSG][%s][%s][--- Link_Up.indication\\n%s --->][%s]\n", - getTimeStamp4Log(), - g_link_id, - g_msc_gen_buf, - g_mihf_id); -#endif - } - - free_BitBuffer(bb); -} - -/**************************************************************************** - ** ** - ** Name: eRALlte_send_link_down_indication() ** - ** ** - ** Description: Sends a Link_Down.indication message to the MIHF. ** - ** ** - ** This notification is generated when layer 2 connectivity ** - ** is lost. Layer 2 connectivity is lost explicitly in cases ** - ** where the MN initiates detach type procedures. In other ** - ** cases, the MN can infer loss of link connectivity due to ** - ** successive time-outs for acknowledgements of retransmit- ** - ** ted packets along with loss of reception of broadcast ** - ** frames. ** - ** ** - ** Inputs: tidP Transaction identifier ** - ** lidP: Link identifier ** - ** old_arP: Old access router link address ** - ** reason_codeP: Reason why the link went down ** - ** Others: g_link_id, g_mihf_id, ** - ** ** - ** Outputs: None ** - ** Return: None ** - ** Others: g_msg_codec_send_buffer ** - ** ** - ***************************************************************************/ -void eRALlte_send_link_down_indication(MIH_C_TRANSACTION_ID_T *tidP, - MIH_C_LINK_TUPLE_ID_T *lidP, - MIH_C_LINK_ADDR_T *old_arP, - MIH_C_LINK_DN_REASON_T *reason_codeP) -{ - MIH_C_Message_Link_Down_indication_t message; - Bit_Buffer_t *bb; - int message_total_length; - - if (!(ralpriv->mih_supported_link_event_list & MIH_C_BIT_LINK_DOWN)) { - return; - } - - DEBUG(" Send MIH_C_MESSAGE_LINK_DOWN_INDICATION\n"); - - bb = new_BitBuffer_0(); - BitBuffer_wrap(bb, g_msg_codec_send_buffer, (unsigned int)MSG_CODEC_SEND_BUFFER_SIZE); - - memset(&message, 0, sizeof (MIH_C_Message_Link_Going_Down_indication_t)); - - message.header.version = (MIH_C_VERSION_T)MIH_C_PROTOCOL_VERSION; - //message.header.ack_req = 0; - //message.header.ack_rsp = 0; - //message.header.uir = 0; - //message.header.more_fragment = 0 - //message.header.fragment_number = 0; - message.header.service_identifier = (MIH_C_SID_T)2; - message.header.operation_code = (MIH_C_OPCODE_T)3; - message.header.action_identifier = (MIH_C_AID_T)3; - message.header.transaction_id = *tidP; - - MIH_C_MIHF_ID_set(&message.source, (u_int8_t*)g_link_id, strlen(g_link_id)); - - MIH_C_MIHF_ID_set(&message.destination, (u_int8_t*)g_mihf_id, strlen(g_mihf_id)); - - memcpy(&message.primitive.LinkIdentifier, lidP, sizeof(MIH_C_LINK_TUPLE_ID_T)); - message.primitive.OldAccessRouter = old_arP; - memcpy(&message.primitive.ReasonCode, reason_codeP, - sizeof(MIH_C_LINK_DN_REASON_T)); - - message_total_length = MIH_C_Link_Message_Encode_Link_Down_indication(bb, &message); - -#ifdef MSCGEN_PYTOOL - memset(g_msc_gen_buf, 0, MSC_GEN_BUF_SIZE); - g_msc_gen_buffer_index = 0; - g_msc_gen_buffer_index += MIH_C_LINK_ID2String(&lidP->link_id, &g_msc_gen_buf[g_msc_gen_buffer_index]); - g_msc_gen_buffer_index += sprintf(&g_msc_gen_buf[g_msc_gen_buffer_index], "\\nOldAccessRouter="); - - if (old_arP) { - g_msc_gen_buffer_index += MIH_C_LINK_ADDR2String(old_arP, &g_msc_gen_buf[g_msc_gen_buffer_index]); - } else { - g_msc_gen_buffer_index += sprintf(&g_msc_gen_buf[g_msc_gen_buffer_index], "null"); - } - - g_msc_gen_buffer_index += sprintf(&g_msc_gen_buf[g_msc_gen_buffer_index], "\\nReasonCode="); - g_msc_gen_buffer_index += MIH_C_LINK_DN_REASON2String(reason_codeP, &g_msc_gen_buf[g_msc_gen_buffer_index]); -#endif - - if (eRALlte_send_to_mih(bb->m_buffer, message_total_length) < 0) { - ERR(": Send Link_Down.indication\n"); -#ifdef MSCGEN_PYTOOL - NOTICE("[MSC_MSG][%s][%s][--- Link_Down.indication\\n%s ---x][%s]\n", - getTimeStamp4Log(), - g_link_id, - g_msc_gen_buf, - g_mihf_id); -#endif - } else { - DEBUG(": Sent Link_Down.indication\n"); -#ifdef MSCGEN_PYTOOL - NOTICE("[MSC_MSG][%s][%s][--- Link_Down.indication\\n%s --->][%s]\n", - getTimeStamp4Log(), - g_link_id, - g_msc_gen_buf, - g_mihf_id); -#endif - } - - free_BitBuffer(bb); -} - -/**************************************************************************** - ** ** - ** Name: eRALlte_send_link_parameters_report_indication() ** - ** ** - ** Description: Sends a Link_Parameters_Report.indication message to the ** - ** MIHF. ** - ** ** - ** For each specified parameter, this notification is gene- ** - ** rated either at a predefined regular interval determined ** - ** by a user configurable timer or when it crosses a confi- ** - ** gured threshold. ** - ** ** - ** Inputs: tidP Transaction identifier ** - ** lidP: Link identifier ** - ** lparam_listP: List of link parameter reports ** - ** Others: g_link_id, g_mihf_id ** - ** ** - ** Outputs: None ** - ** Return: None ** - ** Others: g_msg_codec_send_buffer ** - ** ** - ***************************************************************************/ -void eRALlte_send_link_parameters_report_indication(MIH_C_TRANSACTION_ID_T *tidP, - MIH_C_LINK_TUPLE_ID_T *lidP, - MIH_C_LINK_PARAM_RPT_LIST_T *lparam_listP) -{ - MIH_C_Message_Link_Parameters_Report_indication_t message; - Bit_Buffer_t *bb; - int message_total_length; -#ifdef MSCGEN_PYTOOL - int i; -#endif - - if (!(ralpriv->mih_supported_link_event_list & MIH_C_BIT_LINK_PARAMETERS_REPORT)) { - return; - } - - DEBUG(" Send MIH_C_MESSAGE_LINK_PARAMETERS_REPORT_INDICATION\n"); - - bb = new_BitBuffer_0(); - BitBuffer_wrap(bb, g_msg_codec_send_buffer, (unsigned int)MSG_CODEC_SEND_BUFFER_SIZE); - - memset(&message, 0, sizeof (MIH_C_Message_Link_Parameters_Report_indication_t)); - - message.header.version = (MIH_C_VERSION_T)MIH_C_PROTOCOL_VERSION; - //message.header.ack_req = 0; - //message.header.ack_rsp = 0; - //message.header.uir = 0; - //message.header.more_fragment = 0 - //message.header.fragment_number = 0; - message.header.service_identifier = (MIH_C_SID_T)2; - message.header.operation_code = (MIH_C_OPCODE_T)3; - message.header.action_identifier = (MIH_C_AID_T)5; - message.header.transaction_id = *tidP; - - MIH_C_MIHF_ID_set(&message.source, (u_int8_t*)g_link_id, strlen(g_link_id)); - - MIH_C_MIHF_ID_set(&message.destination, (u_int8_t*)g_mihf_id, strlen(g_mihf_id)); - - - memcpy(&message.primitive.LinkIdentifier, lidP, sizeof(MIH_C_LINK_TUPLE_ID_T)); - memcpy(&message.primitive.LinkParametersReportList_list, lparam_listP, sizeof(MIH_C_LINK_PARAM_RPT_LIST_T)); - - message_total_length = MIH_C_Link_Message_Encode_Link_Parameters_Report_indication(bb, &message); - -#ifdef MSCGEN_PYTOOL - g_msc_gen_buffer_index = 0; - memset(g_msc_gen_buf, 0, MSC_GEN_BUF_SIZE); - g_msc_gen_buffer_index += MIH_C_LINK_ID2String(&lidP->link_id, &g_msc_gen_buf[g_msc_gen_buffer_index]); - - for (i = 0; i < lparam_listP->length; i++) { - g_msc_gen_buffer_index += sprintf(&g_msc_gen_buf[g_msc_gen_buffer_index], "\\n"); - g_msc_gen_buffer_index += MIH_C_LINK_PARAM_RPT2String(&lparam_listP->val[i], &g_msc_gen_buf[g_msc_gen_buffer_index]); - } - -#endif - - if (eRALlte_send_to_mih(bb->m_buffer, message_total_length) < 0) { - ERR(": Send Link_Parameters_Report.indication\n"); -#ifdef MSCGEN_PYTOOL - NOTICE("[MSC_MSG][%s][%s][--- Link_Parameters_Report.indication\\n%s ---x][%s]\n", - getTimeStamp4Log(), - g_link_id, - g_msc_gen_buf, - g_mihf_id); -#endif - } else { - DEBUG(": Sent Link_Parameters_Report.indication\n"); -#ifdef MSCGEN_PYTOOL - NOTICE("[MSC_MSG][%s][%s][--- Link_Parameters_Report.indication\\n%s --->][%s]\n", - getTimeStamp4Log(), - g_link_id, - g_msc_gen_buf, - g_mihf_id); -#endif - } - - free_BitBuffer(bb); -} - -/**************************************************************************** - ** ** - ** Name: eRALlte_send_link_going_down_indication() ** - ** ** - ** Description: Sends a Link_Going_Down.indication message to the MIHF. ** - ** ** - ** A Link_Going_Down event implies that a Link_Down is immi- ** - ** nent within a certain time interval. If Link_Down is NOT ** - ** received within specified time interval then actions due ** - ** to previous Link_Going_Down are ignored. ** - ** ** - ** Inputs: tidP Transaction identifier ** - ** lidP: Link identifier ** - ** timeP: The time interval (ms) at which the link ** - ** is expected to go down (0 if unknown) ** - ** lreasonP: Reason why the link is going to be down ** - ** Others: g_link_id, g_mihf_id ** - ** ** - ** Outputs: None ** - ** Return: None ** - ** Others: g_msg_codec_send_buffer ** - ** ** - ***************************************************************************/ -void eRALlte_send_link_going_down_indication(MIH_C_TRANSACTION_ID_T *tidP, - MIH_C_LINK_TUPLE_ID_T *lidP, - MIH_C_UNSIGNED_INT2_T *timeP, - MIH_C_LINK_GD_REASON_T *lreasonP) -{ - MIH_C_Message_Link_Going_Down_indication_t message; - Bit_Buffer_t *bb; - int message_total_length; - - if (!(ralpriv->mih_supported_link_event_list & MIH_C_BIT_LINK_GOING_DOWN)) { - return; - } - - DEBUG(" Send MIH_C_MESSAGE_LINK_GOING_DOWN_INDICATION\n"); - - bb = new_BitBuffer_0(); - BitBuffer_wrap(bb, g_msg_codec_send_buffer, (unsigned int)MSG_CODEC_SEND_BUFFER_SIZE); - - memset(&message, 0, sizeof (MIH_C_Message_Link_Going_Down_indication_t)); - - message.header.version = (MIH_C_VERSION_T)MIH_C_PROTOCOL_VERSION; - //message.header.ack_req = 0; - //message.header.ack_rsp = 0; - //message.header.uir = 0; - //message.header.more_fragment = 0 - //message.header.fragment_number = 0; - message.header.service_identifier = (MIH_C_SID_T)2; - message.header.operation_code = (MIH_C_OPCODE_T)3; - message.header.action_identifier = (MIH_C_AID_T)6; - message.header.transaction_id = *tidP; - - MIH_C_MIHF_ID_set(&message.source, (u_int8_t*)g_link_id, strlen(g_link_id)); - - MIH_C_MIHF_ID_set(&message.destination, (u_int8_t*)g_mihf_id, strlen(g_mihf_id)); - - - memcpy(&message.primitive.LinkIdentifier, lidP, sizeof(MIH_C_LINK_TUPLE_ID_T)); - message.primitive.TimeInterval = *timeP; - memcpy(&message.primitive.LinkGoingDownReason, lreasonP, - sizeof(MIH_C_LINK_GD_REASON_T)); - - message_total_length = MIH_C_Link_Message_Encode_Link_Going_Down_indication(bb, &message); - - if (eRALlte_send_to_mih(bb->m_buffer, message_total_length) < 0) { - ERR(": Send Link_Going_Down.indication\n"); -#ifdef MSCGEN_PYTOOL - NOTICE("[MSC_MSG][%s][%s][--- Link_Going_Down.indication ---x][%s]\n", - getTimeStamp4Log(), - g_link_id, - g_mihf_id); -#endif - } else { - DEBUG(": Sent Link_Going_Down.indication\n"); -#ifdef MSCGEN_PYTOOL - NOTICE("[MSC_MSG][%s][%s][--- Link_Going_Down.indication --->][%s]\n", - getTimeStamp4Log(), - g_link_id, - g_mihf_id); -#endif - } - - free_BitBuffer(bb); -} - -/* - * ------------------------------------------------------------------------- - * Functions used to send MIH link command messages - * ------------------------------------------------------------------------- - */ - -/**************************************************************************** - ** ** - ** Name: eRALlte_send_get_parameters_confirm() ** - ** ** - ** Description: Sends a Link_Get_Parameters.confirm message to the MIHF. ** - ** ** - ** This primitive is generated in response to a Link_Get_ ** - ** Parameters.request. ** - ** ** - ** Inputs: tidP Transaction identifier ** - ** statusP: Status of operation ** - ** lparam_listP: List of measurable link parameters and ** - ** their current values ** - ** lstates_listP: List of current link state information ** - ** ldesc_listP: List of link descriptors ** - ** Others: g_link_id, g_mihf_id ** - ** ** - ** Outputs: None ** - ** Return: None ** - ** Others: g_msg_codec_send_buffer ** - ** ** - ***************************************************************************/ -void eRALlte_send_get_parameters_confirm(MIH_C_TRANSACTION_ID_T *tidP, - MIH_C_STATUS_T *statusP, - MIH_C_LINK_PARAM_LIST_T *lparam_listP, - MIH_C_LINK_STATES_RSP_LIST_T *lstates_listP, - MIH_C_LINK_DESC_RSP_LIST_T *ldesc_listP) -{ - MIH_C_Message_Link_Get_Parameters_confirm_t message; - Bit_Buffer_t *bb; - int message_total_length; -#ifdef MSCGEN_PYTOOL - int i; -#endif - - DEBUG(" Send MIH_C_MESSAGE_LINK_GET_PARAMETERS_CONFIRM\n"); - - bb = new_BitBuffer_0(); - BitBuffer_wrap(bb, g_msg_codec_send_buffer, (unsigned int)MSG_CODEC_SEND_BUFFER_SIZE); - - memset(&message, 0, sizeof (MIH_C_Message_Link_Get_Parameters_confirm_t)); - - message.header.version = (MIH_C_VERSION_T)MIH_C_PROTOCOL_VERSION; - //message.header.ack_req = 0; - //message.header.ack_rsp = 0; - //message.header.uir = 0; - //message.header.more_fragment = 0 - //message.header.fragment_number = 0; - message.header.service_identifier = (MIH_C_SID_T)3; - message.header.operation_code = (MIH_C_OPCODE_T)0; - message.header.action_identifier = (MIH_C_AID_T)1; - message.header.transaction_id = *tidP; - - MIH_C_MIHF_ID_set(&message.source, (u_int8_t*)g_link_id, strlen(g_link_id)); - - MIH_C_MIHF_ID_set(&message.destination, (u_int8_t*)g_mihf_id, strlen(g_mihf_id)); - - message.primitive.Status = *statusP; - message.primitive.LinkParametersStatusList_list = lparam_listP; - message.primitive.LinkStatesResponse_list = lstates_listP; - message.primitive.LinkDescriptorsResponse_list = ldesc_listP; - - message_total_length = MIH_C_Link_Message_Encode_Get_Parameters_confirm(bb, &message); - -#ifdef MSCGEN_PYTOOL - memset(g_msc_gen_buf, 0, MSC_GEN_BUF_SIZE); - g_msc_gen_buffer_index = 0; - g_msc_gen_buffer_index += MIH_C_STATUS2String(&message.primitive.Status, &g_msc_gen_buf[g_msc_gen_buffer_index]); - - if (lparam_listP) { - g_msc_gen_buffer_index += sprintf(&g_msc_gen_buf[g_msc_gen_buffer_index], "\\n LinkParametersStatusList="); - - for (i = 0; i < lparam_listP->length; i++) { - g_msc_gen_buffer_index += MIH_C_LINK_PARAM2String(&lparam_listP->val[i], &g_msc_gen_buf[g_msc_gen_buffer_index]); - g_msc_gen_buffer_index += sprintf(&g_msc_gen_buf[g_msc_gen_buffer_index], ", "); - } - } - - if (lstates_listP) { - g_msc_gen_buffer_index += sprintf(&g_msc_gen_buf[g_msc_gen_buffer_index], "\\n LinkStatesResponseList="); - - for (i = 0; i < lstates_listP->length; i++) { - g_msc_gen_buffer_index += MIH_C_LINK_STATES_RSP2String(&lstates_listP->val[i], &g_msc_gen_buf[g_msc_gen_buffer_index]); - g_msc_gen_buffer_index += sprintf(&g_msc_gen_buf[g_msc_gen_buffer_index], ", "); - } - } - - if (ldesc_listP) { - g_msc_gen_buffer_index += sprintf(&g_msc_gen_buf[g_msc_gen_buffer_index], "\\n LinkDescriptorsResponseList="); - - for (i = 0; i < ldesc_listP->length; i++) { - g_msc_gen_buffer_index += MIH_C_LINK_DESC_RSP2String(&ldesc_listP->val[i], &g_msc_gen_buf[g_msc_gen_buffer_index]); - g_msc_gen_buffer_index += sprintf(&g_msc_gen_buf[g_msc_gen_buffer_index], ", "); - } - } - -#endif - - if (eRALlte_send_to_mih(bb->m_buffer, message_total_length) < 0) { - ERR(": Send Link_Get_Parameters.confirm\n"); -#ifdef MSCGEN_PYTOOL - NOTICE("[MSC_MSG][%s][%s][--- Link_Get_Parameters.confirm\\nstatus=%s ---x][%s]\n", - getTimeStamp4Log(), - g_link_id, - g_msc_gen_buf, - g_mihf_id); -#endif - } else { - DEBUG(": Sent Link_Get_Parameters.confirm\n"); -#ifdef MSCGEN_PYTOOL - NOTICE("[MSC_MSG][%s][%s][--- Link_Get_Parameters.confirm\\nstatus=%s --->][%s]\n", - getTimeStamp4Log(), - g_link_id, - g_msc_gen_buf, - g_mihf_id); -#endif - } - - free_BitBuffer(bb); -} - -/**************************************************************************** - ** ** - ** Name: eRALlte_send_configure_thresholds_confirm() ** - ** ** - ** Description: Sends a Link_Configure_Thresholds.confirm message to the ** - ** MIHF. ** - ** ** - ** This primitive is generated in response to a Link_ ** - ** Configure_Thresholds.request. ** - ** ** - ** Inputs: tidP Transaction identifier ** - ** statusP: Status of operation ** - ** lstatus_listP: List of link configure status ** - ** Others: g_link_id, g_mihf_id ** - ** ** - ** Outputs: None ** - ** Return: None ** - ** Others: g_msg_codec_send_buffer ** - ** ** - ***************************************************************************/ -void eRALlte_send_configure_thresholds_confirm(MIH_C_TRANSACTION_ID_T *tidP, - MIH_C_STATUS_T *statusP, - MIH_C_LINK_CFG_STATUS_LIST_T *lstatus_listP) -{ - MIH_C_Message_Link_Configure_Thresholds_confirm_t message; - Bit_Buffer_t *bb; - int message_total_length; -#ifdef MSCGEN_PYTOOL - int i; -#endif - - DEBUG(" Send MIH_C_MESSAGE_LINK_CONFIGURE_THRESHOLDS_CONFIRM\n"); - - bb = new_BitBuffer_0(); - BitBuffer_wrap(bb, g_msg_codec_send_buffer, (unsigned int)MSG_CODEC_SEND_BUFFER_SIZE); - - memset(&message, 0, sizeof (MIH_C_Message_Link_Configure_Thresholds_confirm_t)); - - message.header.version = (MIH_C_VERSION_T)MIH_C_PROTOCOL_VERSION; - //message.header.ack_req = 0; - //message.header.ack_rsp = 0; - //message.header.uir = 0; - //message.header.more_fragment = 0 - //message.header.fragment_number = 0; - message.header.service_identifier = (MIH_C_SID_T)3; - message.header.operation_code = (MIH_C_OPCODE_T)0; - message.header.action_identifier = (MIH_C_AID_T)2; - message.header.transaction_id = *tidP; - - MIH_C_MIHF_ID_set(&message.source, (u_int8_t*)g_link_id, strlen(g_link_id)); - - MIH_C_MIHF_ID_set(&message.destination, (u_int8_t*)g_mihf_id, strlen(g_mihf_id)); - - message.primitive.Status = *statusP; - message.primitive.LinkConfigureStatusList_list = lstatus_listP; - - message_total_length = MIH_C_Link_Message_Encode_Configure_Thresholds_confirm(bb, &message); - -#ifdef MSCGEN_PYTOOL - memset(g_msc_gen_buf, 0, MSC_GEN_BUF_SIZE); - g_msc_gen_buffer_index = 0; - g_msc_gen_buffer_index += MIH_C_STATUS2String(&message.primitive.Status, &g_msc_gen_buf[g_msc_gen_buffer_index]); - g_msc_gen_buffer_index += sprintf(&g_msc_gen_buf[g_msc_gen_buffer_index], "\\n"); - - for (i = 0; i < lstatus_listP->length; i++) { - g_msc_gen_buffer_index += MIH_C_LINK_CFG_STATUS2String(&lstatus_listP->val[i], &g_msc_gen_buf[g_msc_gen_buffer_index]); - } - -#endif - - if (eRALlte_send_to_mih(bb->m_buffer, message_total_length) < 0) { - ERR(": Send Link_Configure_Threshold.confirm\n"); -#ifdef MSCGEN_PYTOOL - NOTICE("[MSC_MSG][%s][%s][--- Link_Configure_Thresholds.confirm\\nstatus=%s ---x][%s]\n", - getTimeStamp4Log(), - g_link_id, - g_msc_gen_buf, - g_mihf_id); -#endif - } else { - DEBUG(": Sent Link_Configure_Threshold.confirm\n"); -#ifdef MSCGEN_PYTOOL - NOTICE("[MSC_MSG][%s][%s][--- Link_Configure_Thresholds.confirm\\nstatus=%s --->][%s]\n", - getTimeStamp4Log(), - g_link_id, - g_msc_gen_buf, - g_mihf_id); -#endif - } - - free_BitBuffer(bb); -} - -/**************************************************************************** - ** ** - ** Name: eRALlte_send_link_action_confirm() ** - ** ** - ** Description: Sends a Link_Action.confirm message to the MIHF. ** - ** ** - ** This primitive is generated to communicate the result of ** - ** the action executed on the link-layer connection. ** - ** ** - ** Inputs: tidP Transaction identifier ** - ** statusP: Status of operation ** - ** response_setP: List of discovered links and related ** - ** information ** - ** action_resultP: Specifies whether the link action was ** - ** successful ** - ** Others: g_link_id, g_mihf_id ** - ** ** - ** Outputs: None ** - ** Return: None ** - ** Others: g_msg_codec_send_buffer ** - ** ** - ***************************************************************************/ -void eRALlte_send_link_action_confirm(MIH_C_TRANSACTION_ID_T *tidP, - MIH_C_STATUS_T *statusP, - MIH_C_LINK_SCAN_RSP_LIST_T *response_setP, - MIH_C_LINK_AC_RESULT_T *action_resultP) -{ - MIH_C_Message_Link_Action_confirm_t message; - Bit_Buffer_t *bb; - int message_total_length; -#ifdef MSCGEN_PYTOOL - unsigned int index; -#endif - - DEBUG(" Send MIH_C_MESSAGE_LINK_ACTION_CONFIRM\n"); - - bb = new_BitBuffer_0(); - BitBuffer_wrap(bb, g_msg_codec_send_buffer, (unsigned int)MSG_CODEC_SEND_BUFFER_SIZE); - - memset(&message, 0, sizeof (MIH_C_Message_Link_Action_confirm_t)); - - message.header.version = (MIH_C_VERSION_T)MIH_C_PROTOCOL_VERSION; - //message.header.ack_req = 0; - //message.header.ack_rsp = 0; - //message.header.uir = 0; - //message.header.more_fragment = 0 - //message.header.fragment_number = 0; - message.header.service_identifier = (MIH_C_SID_T)3; - message.header.operation_code = (MIH_C_OPCODE_T)0; - message.header.action_identifier = (MIH_C_AID_T)3; - message.header.transaction_id = *tidP; - - MIH_C_MIHF_ID_set(&message.source, (u_int8_t*)g_link_id, strlen(g_link_id)); - - MIH_C_MIHF_ID_set(&message.destination, (u_int8_t*)g_mihf_id, strlen(g_mihf_id)); - - message.primitive.Status = *statusP; - message.primitive.ScanResponseSet_list = response_setP; - message.primitive.LinkActionResult = action_resultP; - - message_total_length = MIH_C_Link_Message_Encode_Link_Action_confirm(bb, &message); - -#ifdef MSCGEN_PYTOOL - memset(g_msc_gen_buf, 0, MSC_GEN_BUF_SIZE); - g_msc_gen_buffer_index = 0; - g_msc_gen_buffer_index += MIH_C_STATUS2String(&message.primitive.Status, &g_msc_gen_buf[g_msc_gen_buffer_index]); - - if (response_setP) { - for (index = 0; index < response_setP->length; index++) { - g_msc_gen_buffer_index += sprintf(&g_msc_gen_buf[g_msc_gen_buffer_index], "\\nScan resp:"); - g_msc_gen_buffer_index += MIH_C_LINK_SCAN_RSP2String(&response_setP->val[index], &g_msc_gen_buf[g_msc_gen_buffer_index]); - } - } - - if (action_resultP) { - g_msc_gen_buffer_index += sprintf(&g_msc_gen_buf[g_msc_gen_buffer_index], "\\nAction result:"); - g_msc_gen_buffer_index += MIH_C_LINK_AC_RESULT2String2(action_resultP, &g_msc_gen_buf[g_msc_gen_buffer_index]); - } - -#endif - - if (eRALlte_send_to_mih(bb->m_buffer, message_total_length) < 0) { - ERR(": Send Link_Action.confirm\n"); -#ifdef MSCGEN_PYTOOL - NOTICE("[MSC_MSG][%s][%s][--- Link_Action.confirm\\nstatus=%s ---x][%s]\n", - getTimeStamp4Log(), - g_link_id, - g_msc_gen_buf, - g_mihf_id); -#endif - } else { - DEBUG(": Sent Link_Action.confirm\n"); -#ifdef MSCGEN_PYTOOL - NOTICE("[MSC_MSG][%s][%s][--- Link_Action.confirm\\nstatus=%s --->][%s]\n", - getTimeStamp4Log(), - g_link_id, - g_msc_gen_buf, - g_mihf_id); -#endif - } - - free_BitBuffer(bb); -} - -/**************************************************************************** - ** ** - ** Name: eRALlte_mihf_connect() ** - ** ** - ** Description: Connects the RAL to the remote MIH Function. ** - ** The calling process should exit upon connection failure ** - ** in order to properly close the MIH-F socket file ** - ** descriptor and free the automatically allocated addrinfo ** - ** structure. ** - ** ** - ** Inputs: None ** - ** Others: g_mihf_ip_address, g_mihf_remote_port ** - ** g_ral_ip_address, ** - ** g_ral_listening_port_for_mihf ** - ** ** - ** Outputs: None ** - ** Return: 0 on success, -1 on failure ** - ** Others: g_sockd_mihf ** - ** ** - ***************************************************************************/ -int eRALlte_mihf_connect(ral_enb_instance_t instanceP) -{ - struct addrinfo info; /* endpoint information */ - struct addrinfo *addr, *rp; /* endpoint address */ - int rc; /* returned error code */ - int optval; /* socket option value */ - - unsigned char buf[sizeof(struct sockaddr_in6)]; - - /* - * Initialize the remote MIH-F endpoint address information - */ - memset(&info, 0, sizeof(struct addrinfo)); - info.ai_family = AF_UNSPEC; /* Allow IPv4 or IPv6 */ - info.ai_socktype = SOCK_DGRAM; /* Datagram socket */ - info.ai_flags = 0; - info.ai_protocol = 0; /* Any protocol */ - - rc = getaddrinfo(g_enb_ral_obj[instanceP].mihf_ip_address, g_enb_ral_obj[instanceP].mihf_remote_port, &info, &addr); - - if (rc != 0) { - ERR(" getaddrinfo: %s\n", gai_strerror(rc)); - return -1; - } - - /* - * getaddrinfo() returns a linked list of address structures. - * Try each address until we successfully connect(2). If socket(2) - * (or connect(2)) fails, we (close the socket and) try the next address. - */ - for (rp = addr; rp != NULL; rp = rp->ai_next) { - g_enb_ral_obj[instance].mih_sock_desc = socket(rp->ai_family, rp->ai_socktype, rp->ai_protocol); - - if (g_enb_ral_obj[instance].mih_sock_desc < 0) { - continue; - } - - optval = 1; - setsockopt(g_enb_ral_obj[instance].mih_sock_desc, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof(optval)); - - // Convert the RAL local network address - - if (rp->ai_family == AF_INET) { - /* IPv4 network address family */ - struct sockaddr_in *addr4 = NULL; - - DEBUG(" %s is an ipv4 address\n", g_enb_ral_obj[instanceP].mihf_ip_address); - addr4 = (struct sockaddr_in *)(&buf[0]); - addr4->sin_port = htons(atoi(g_enb_ral_obj[instanceP].ral_listening_port)); - addr4->sin_family = AF_INET; - rc = inet_pton(AF_INET, g_enb_ral_obj[instanceP].ral_ip_address, &addr4->sin_addr); - - } else if (rp->ai_family == AF_INET6) { - /* IPv6 network address family */ - struct sockaddr_in6 *addr6 = NULL; - - DEBUG(" %s is an ipv6 address\n", g_enb_ral_obj[instanceP].mihf_ip_address); - addr6 = (struct sockaddr_in6 *)(&buf[0]); - addr6->sin6_port = htons(atoi(g_enb_ral_obj[instanceP].ral_listening_port)); - addr6->sin6_family = AF_INET6; - rc = inet_pton(AF_INET, g_enb_ral_obj[instanceP].ral_ip_address, &addr6->sin6_addr); - } else { - ERR(" %s is an unknown address format %d\n", - g_enb_ral_obj[instanceP].mihf_ip_address, rp->ai_family); - return -1; - } - - if (rc < 0) { - // The network address convertion failed - ERR(" inet_pton(RAL IP address %s): %s\n", - g_enb_ral_obj[instanceP].ral_ip_address, strerror(rc)); - return -1; - } else if (rc == 0) { - // The network address is not valid - ERR(" RAL IP address %s is not valid\n", g_enb_ral_obj[instanceP].ral_ip_address); - return -1; - } - - // Bind the socket to the local RAL network address */ - rc = bind(g_enb_ral_obj[instance].mih_sock_desc, (const struct sockaddr *)buf, - sizeof(struct sockaddr_in)); - - if (rc < 0) { - ERR(" bind(RAL IP address %s): %s\n", g_enb_ral_obj[instanceP].ral_ip_address, strerror(errno)); - return -1; - } - - // Connect the socket to the remote MIH-F network address - if (connect(g_enb_ral_obj[instance].mih_sock_desc, rp->ai_addr, rp->ai_addrlen) == 0) { - NOTICE(" RAL [%s:%s] is now UDP-CONNECTED to MIH-F [%s:%s]\n", - g_enb_ral_obj[instanceP].ral_ip_address, g_enb_ral_obj[instanceP].ral_listening_port, - g_enb_ral_obj[instanceP].mihf_ip_address, g_enb_ral_obj[instanceP].mihf_remote_port); - break; - } - - // We failed to connect: - // Close the socket file descriptor and try to connect to an other address. - close(g_enb_ral_obj[instanceP].mih_sock_desc); - } - - // Unable to connect to a network address - if (rp == NULL) { - ERR(" Could not connect to MIH-F\n"); - return -1; - } - - freeaddrinfo(addr); - return 0; -} - -/**************************************************************************** - ** ** - ** Name: eRALlte_mih_link_process_message() ** - ** ** - ** Description: Processes messages received from the MIH-F. ** - ** ** - ** Inputs: None ** - ** Others: g_sockd_mihf ** - ** ** - ** Outputs: None ** - ** Return: Always return 0 ** - ** Others: g_msg_codec_recv_buffer ** - ** ** - ***************************************************************************/ -int eRALlte_mih_link_process_message(void) -{ - MIH_C_Message_Wrapper_t message_wrapper; - int nb_bytes_received ; - int nb_bytes_decoded ; - int total_bytes_to_decode ; - int status ; - Bit_Buffer_t *bb; - struct sockaddr_in udp_socket; - socklen_t sockaddr_len; - - - total_bytes_to_decode = 0; - nb_bytes_received = 0; - - bb = new_BitBuffer_0(); - - nb_bytes_received = recvfrom(g_sockd_mihf, - (void *)g_msg_codec_recv_buffer, - MSG_CODEC_RECV_BUFFER_SIZE, - 0, - (struct sockaddr *) &udp_socket, - &sockaddr_len); - - if (nb_bytes_received > 0) { - DEBUG(" %s Received %d bytes\n", __FUNCTION__, nb_bytes_received); - eRALlte_print_buffer(g_msg_codec_recv_buffer, nb_bytes_received); - total_bytes_to_decode += nb_bytes_received; - BitBuffer_wrap(bb, g_msg_codec_recv_buffer, total_bytes_to_decode); - /* Decode the message received from the MIHF */ - status = eRALlte_mih_link_msg_decode(bb, &message_wrapper); - - if (status == MIH_MESSAGE_DECODE_OK) { - nb_bytes_decoded = BitBuffer_getPosition(bb); - - if (nb_bytes_decoded > 0) { - total_bytes_to_decode = total_bytes_to_decode - nb_bytes_decoded; - - // if remaining bytes to decode - if (total_bytes_to_decode > 0) { - //shift left bytes in buffer - memcpy(g_msg_codec_recv_buffer, &g_msg_codec_recv_buffer[nb_bytes_decoded], nb_bytes_decoded); - - //shift left again bytes in buffer - if (total_bytes_to_decode > nb_bytes_decoded) { - memcpy(&g_msg_codec_recv_buffer[nb_bytes_decoded], &g_msg_codec_recv_buffer[nb_bytes_decoded], total_bytes_to_decode - nb_bytes_decoded); - } - - // not necessary - memset(&g_msg_codec_recv_buffer[total_bytes_to_decode], 0 , MSG_CODEC_RECV_BUFFER_SIZE - total_bytes_to_decode); - - } - } - - // data could not be decoded - } else if (status == MIH_MESSAGE_DECODE_FAILURE) { - memset(g_msg_codec_recv_buffer, 0, MSG_CODEC_RECV_BUFFER_SIZE); - total_bytes_to_decode = 0; - } else if (status == MIH_MESSAGE_DECODE_TOO_SHORT) { - } else if (status == MIH_MESSAGE_DECODE_BAD_PARAMETER) { - } - } - - free_BitBuffer(bb); - return 0; -} - -/****************************************************************************/ -/********************* L O C A L F U N C T I O N S *********************/ -/****************************************************************************/ - -/**************************************************************************** - ** ** - ** Name: eRALlte_print_buffer() ** - ** ** - ** Description: Print the content of a buffer in hexadecimal. ** - ** ** - ** Inputs: bufferP: Pointer to the buffer to print ** - ** lengthP: Length of the buffer to print ** - ** Others: g_msg_codec_print_buffer ** - ** ** - ** Outputs: None ** - ** Return: None ** - ** Others: None ** - ** ** - ***************************************************************************/ -static void eRALlte_print_buffer(const u_int8_t * bufferP, int lenP) -{ - char c; - unsigned int buffer_index = 0; - unsigned int index; - unsigned int octet_index = 0; - unsigned long char_index = 0; - - if (bufferP == NULL) { - return; - } - - buffer_index += sprintf(&g_msg_codec_print_buffer[buffer_index],"\n------+-------------------------------------------------+------------------+\n"); - buffer_index += sprintf(&g_msg_codec_print_buffer[buffer_index], " | 0 1 2 3 4 5 6 7 8 9 a b c d e f | 0123456789abcdef |\n"); - buffer_index += sprintf(&g_msg_codec_print_buffer[buffer_index], "------+-------------------------------------------------+------------------+\n"); - - for (octet_index = 0; octet_index < lenP; octet_index++) { - if ((octet_index % 16) == 0) { - if (octet_index != 0) { - buffer_index += sprintf(&g_msg_codec_print_buffer[buffer_index], " | "); - - for (char_index = octet_index - 16; char_index < octet_index; char_index++) { - c = (char) bufferP[char_index] & 0177; - - if (iscntrl(c) || isspace(c)) { - buffer_index += sprintf(&g_msg_codec_print_buffer[buffer_index], " "); - } else { - buffer_index += sprintf(&g_msg_codec_print_buffer[buffer_index], "%c", c); - } - } - - buffer_index += sprintf(&g_msg_codec_print_buffer[buffer_index], " |\n"); - } - - buffer_index += sprintf(&g_msg_codec_print_buffer[buffer_index], " %04d |", octet_index); - } - - /* - * Print every single octet in hexadecimal form - */ - buffer_index += sprintf(&g_msg_codec_print_buffer[buffer_index], " %02x", (u_int8_t)(bufferP[octet_index] & 0x00FF)); - } - - /* - * Append enough spaces and put final pipe - */ - if ((lenP % 16) > 0) { - for (index = (octet_index % 16); index < 16; ++index) { - buffer_index += sprintf(&g_msg_codec_print_buffer[buffer_index], " "); - } - } - - buffer_index += sprintf(&g_msg_codec_print_buffer[buffer_index], " | "); - - for (char_index = (octet_index / 16) * 16; char_index < octet_index; char_index++) { - c = (char) bufferP[char_index] & 0177; - - if (iscntrl(c) || isspace(c)) { - buffer_index += sprintf(&g_msg_codec_print_buffer[buffer_index], " "); - } else { - buffer_index += sprintf(&g_msg_codec_print_buffer[buffer_index], "%c", c); - } - } - - if ((lenP % 16) > 0) { - for (index = (octet_index % 16); index < 16; ++index) { - buffer_index += sprintf(&g_msg_codec_print_buffer[buffer_index], " "); - } - } - - buffer_index += sprintf(&g_msg_codec_print_buffer[buffer_index], " |\n"); - buffer_index += sprintf(&g_msg_codec_print_buffer[buffer_index], "------+-------------------------------------------------+------------------+\n"); - DEBUG(g_msg_codec_print_buffer); -} - -/**************************************************************************** - ** ** - ** Name: eRALlte_send_to_mih() ** - ** ** - ** Description: Sends a buffered message to the MIH-F. ** - ** ** - ** Inputs: bufferP: Pointer to the buffered buffer to send ** - ** lenP: Length of the buffered buffer to send ** - ** Others: g_sockd_mihf ** - ** ** - ** Outputs: None ** - ** Return: The number of bytes actually sent ** - ** Others: None ** - ** ** - ***************************************************************************/ -static int eRALlte_send_to_mih(const u_int8_t *bufferP, int lenP) -{ - int result; - eRALlte_print_buffer(bufferP, lenP); - result = send(g_sockd_mihf, (const void *)bufferP, lenP, 0); - - if (result != lenP) { - ERR(" %s : %d bytes failed, returned %d: %s\n", - __FUNCTION__, lenP, result, strerror(errno)); - } - - return result; -} - -/**************************************************************************** - ** ** - ** Name: eRALlte_mih_link_msg_decode() ** - ** ** - ** Description: Decode messages received from the MIH-F. ** - ** ** - ** Inputs: bbP: Pointer to the buffer to decode ** - ** Others: None ** - ** ** - ** Outputs: message_wrapperP: ** - ** Pointer to the message wrapper ** - ** Return: < 0 on failure, 0 otherwise ** - ** Others: None ** - ** ** - ***************************************************************************/ -static int eRALlte_mih_link_msg_decode(Bit_Buffer_t* bbP, - MIH_C_Message_Wrapper_t *message_wrapperP) -{ - int status = MIH_MESSAGE_DECODE_FAILURE; - MIH_C_HEADER_T header; - MIH_C_STATUS_T mih_status; -#ifdef MSCGEN_PYTOOL - char msg_src[32]; - char msg_dst[32]; - int i; -#endif - - if ((bbP != NULL) && (message_wrapperP != NULL)) { - /* - * Decode MIH protocol header - */ - status = MIH_C_Link_Header_Decode(bbP, &header); - - if (status == MIH_HEADER_DECODE_TOO_SHORT) { - return MIH_MESSAGE_DECODE_TOO_SHORT; - } else if (status == MIH_HEADER_DECODE_FAILURE) { - return MIH_MESSAGE_DECODE_FAILURE; - } else if (status == MIH_HEADER_DECODE_BAD_PARAMETER) { - return MIH_MESSAGE_DECODE_BAD_PARAMETER; - } - - message_wrapperP->message_id = MIH_C_MESSAGE_ID(header.service_identifier, header.operation_code, header.action_identifier); - - /* - * Decode MIH primitives - */ - switch (message_wrapperP->message_id) { - - case MIH_C_MESSAGE_LINK_CAPABILITY_DISCOVER_REQUEST_ID: - /* - * This primitive is generated by the MIHF when it needs to - * receive link-layer event notifications and learn about which - * link-layer commands the lower layer can support. - * The recipient responds immediately with Link_Capability_ - * Discover.confirm primitive. - */ - DEBUG(" %s Received MIH_C_MESSAGE_LINK_CAPABILITY_DISCOVER_REQUEST\n", __FUNCTION__); - memcpy(&message_wrapperP->_union_message.link_capability_discover_request.header, (const void *)&header, sizeof(MIH_C_HEADER_T)); - - /* Decode Link_Capability_Discover.request */ - status = MIH_C_Link_Message_Decode_Link_Capability_Discover_request(bbP, &message_wrapperP->_union_message.link_capability_discover_request); - - if (status == MIH_MESSAGE_DECODE_OK) { -#ifdef MSCGEN_PYTOOL - MIH_C_MIHF_ID2String(&(message_wrapperP->_union_message.link_capability_discover_request.source), msg_src); - MIH_C_MIHF_ID2String(&(message_wrapperP->_union_message.link_capability_discover_request.destination), msg_dst); - NOTICE("[MSC_MSG][%s][%s][--- Link_Capability_Discover.request --->][%s]\n", - getTimeStamp4Log(), - msg_src, - msg_dst); -#endif - - /* Process Link_Capability_Discover.request */ - MIH_C_Link_Message_Link_Capability_Discover_request2String(&message_wrapperP->_union_message.link_capability_discover_request, g_msg_print_buffer); - DEBUG(" %s", g_msg_print_buffer); - mih_status = MIH_C_STATUS_SUCCESS; - - /* Send Link_Capability_Discover.confirm */ - eRALlte_send_capability_discover_confirm(&message_wrapperP->_union_message.link_capability_discover_request.header.transaction_id, - &mih_status, - &ralpriv->mih_supported_link_event_list, - &ralpriv->mih_supported_link_command_list); - } else { -#ifdef MSCGEN_PYTOOL - MIH_C_MIHF_ID2String(&(message_wrapperP->_union_message.link_capability_discover_request.source), msg_src); - MIH_C_MIHF_ID2String(&(message_wrapperP->_union_message.link_capability_discover_request.destination), msg_dst); - NOTICE("[MSC_MSG][%s][%s][--- Link_Capability_Discover.request\\nERR DECODE ---x][%s]\n", - getTimeStamp4Log(), - msg_src, - msg_dst); -#endif - } - - break; - - case MIH_C_MESSAGE_LINK_EVENT_SUBSCRIBE_REQUEST_ID: - /* - * This primitive is generated by a subscriber such as the MIHF - * that is seeking to receive event indications from different - * link-layer technologies. - * The recipient responds immediately with Link_Event_Subscribe. - * confirm primitive. - */ - DEBUG(" %s Received MIH_C_MESSAGE_LINK_EVENT_SUBSCRIBE_REQUEST\n", __FUNCTION__); - memcpy(&message_wrapperP->_union_message.link_event_subscribe_request.header, (const void *)&header, sizeof(MIH_C_HEADER_T)); - - /* Decode Link_Event_Subscribe.request */ - status = MIH_C_Link_Message_Decode_Link_Event_Subscribe_request(bbP, &message_wrapperP->_union_message.link_event_subscribe_request); - - if (status == MIH_MESSAGE_DECODE_OK) { -#ifdef MSCGEN_PYTOOL - MIH_C_MIHF_ID2String(&(message_wrapperP->_union_message.link_event_subscribe_request.source), msg_src); - MIH_C_MIHF_ID2String(&(message_wrapperP->_union_message.link_event_subscribe_request.destination), msg_dst); - memset(g_msc_gen_buf, 0, MSC_GEN_BUF_SIZE); - MIH_C_LINK_EVENT_LIST2String2(&message_wrapperP->_union_message.link_event_subscribe_request.primitive.RequestedLinkEventList, g_msc_gen_buf); - NOTICE("[MSC_MSG][%s][%s][--- Link_Event_Subscribe.request\\n%s --->][%s]\n", - getTimeStamp4Log(), - msg_src, - g_msc_gen_buf, - msg_dst); -#endif - - /* Process Link_Event_Subscribe.request */ - eRALlte_subscribe_request(&message_wrapperP->_union_message.link_event_subscribe_request); - - } else { -#ifdef MSCGEN_PYTOOL - MIH_C_MIHF_ID2String(&(message_wrapperP->_union_message.link_event_subscribe_request.source), msg_src); - MIH_C_MIHF_ID2String(&(message_wrapperP->_union_message.link_event_subscribe_request.destination), msg_dst); - memset(g_msc_gen_buf, 0, MSC_GEN_BUF_SIZE); - MIH_C_LINK_EVENT_LIST2String2(&message_wrapperP->_union_message.link_event_subscribe_request.primitive.RequestedLinkEventList, g_msc_gen_buf); - NOTICE("[MSC_MSG][%s][%s][--- Link_Event_Subscribe.request\\nERR DECODE ---x][%s]\n", - getTimeStamp4Log(), - msg_src, - msg_dst); -#endif - } - - break; - - case MIH_C_MESSAGE_LINK_EVENT_UNSUBSCRIBE_REQUEST_ID: - /* - * This primitive is generated by a subscriber such as the MIHF - * that is seeking to unsubscribe from an already subscribed set - * of events. - * The recipient responds immediately with Link_Event_ - * Unsubscribe.confirm primitive. - */ - DEBUG(" %s Received MIH_C_MESSAGE_LINK_EVENT_UNSUBSCRIBE_REQUEST\n", __FUNCTION__); - memcpy(&message_wrapperP->_union_message.link_event_unsubscribe_request.header, (const void *)&header, sizeof(MIH_C_HEADER_T)); - - /* Decode Link_Event_Unsubscribe.request */ - status = MIH_C_Link_Message_Decode_Link_Event_Unsubscribe_request(bbP, &message_wrapperP->_union_message.link_event_unsubscribe_request); - - if (status == MIH_MESSAGE_DECODE_OK) { -#ifdef MSCGEN_PYTOOL - MIH_C_MIHF_ID2String(&(message_wrapperP->_union_message.link_event_unsubscribe_request.source), msg_src); - MIH_C_MIHF_ID2String(&(message_wrapperP->_union_message.link_event_unsubscribe_request.destination), msg_dst); - memset(g_msc_gen_buf, 0, MSC_GEN_BUF_SIZE); - MIH_C_LINK_EVENT_LIST2String2(&message_wrapperP->_union_message.link_event_unsubscribe_request.primitive.RequestedLinkEventList, g_msc_gen_buf); - NOTICE("[MSC_MSG][%s][%s][--- Link_Event_Unsubscribe.request\\n%s --->][%s]\n", - getTimeStamp4Log(), - msg_src, - g_msc_gen_buf, - msg_dst); -#endif - - /* Process Link_Event_Unsubscribe.request */ - eRALlte_unsubscribe_request(&message_wrapperP->_union_message.link_event_unsubscribe_request); - - } else { -#ifdef MSCGEN_PYTOOL - MIH_C_MIHF_ID2String(&(message_wrapperP->_union_message.link_event_unsubscribe_request.source), msg_src); - MIH_C_MIHF_ID2String(&(message_wrapperP->_union_message.link_event_unsubscribe_request.destination), msg_dst); - memset(g_msc_gen_buf, 0, MSC_GEN_BUF_SIZE); - MIH_C_LINK_EVENT_LIST2String2(&message_wrapperP->_union_message.link_event_unsubscribe_request.primitive.RequestedLinkEventList, g_msc_gen_buf); - NOTICE("[MSC_MSG][%s][%s][--- Link_Event_Unsubscribe.request\\nERR DECODE ---x][%s]\n", - getTimeStamp4Log(), - msg_src, - msg_dst); -#endif - } - - break; - - case MIH_C_MESSAGE_LINK_GET_PARAMETERS_REQUEST_ID: - /* - * This primitive is generated by the MIHF to obtain the current - * value of a set of link parameters from a link. - * The recipient link responds with Link_Get_Parameters.confirm - * primitive. - */ - DEBUG(" %s Received MIH_C_MESSAGE_LINK_GET_PARAMETERS_REQUEST\n", __FUNCTION__); - memcpy(&message_wrapperP->_union_message.link_get_parameters_request.header, (const void *)&header, sizeof(MIH_C_HEADER_T)); - - /* Decode Link_Get_Parameters.request */ - status = MIH_C_Link_Message_Decode_Link_Get_Parameters_request(bbP, &message_wrapperP->_union_message.link_get_parameters_request); - - if (status == MIH_MESSAGE_DECODE_OK) { -#ifdef MSCGEN_PYTOOL - MIH_C_MIHF_ID2String(&(message_wrapperP->_union_message.link_get_parameters_request.source), msg_src); - MIH_C_MIHF_ID2String(&(message_wrapperP->_union_message.link_get_parameters_request.destination), msg_dst); - memset(g_msc_gen_buf, 0, MSC_GEN_BUF_SIZE); - g_msc_gen_buffer_index = 0; - - for (i = 0; i < message_wrapperP->_union_message.link_get_parameters_request.primitive.LinkParametersRequest_list.length; i++) { - g_msc_gen_buffer_index += MIH_C_LINK_PARAM_TYPE2String(&message_wrapperP->_union_message.link_get_parameters_request.primitive.LinkParametersRequest_list.val[i], - &g_msc_gen_buf[g_msc_gen_buffer_index]); - } - - g_msc_gen_buffer_index += sprintf(&g_msc_gen_buf[g_msc_gen_buffer_index], "\\n Link states request="); - g_msc_gen_buffer_index += MIH_C_LINK_STATES_REQ2String2(&message_wrapperP->_union_message.link_get_parameters_request.primitive.LinkStatesRequest, &g_msc_gen_buf[g_msc_gen_buffer_index]); - g_msc_gen_buffer_index += sprintf(&g_msc_gen_buf[g_msc_gen_buffer_index], "\\n Link desc request="); - g_msc_gen_buffer_index += MIH_C_LINK_DESC_REQ2String2(&message_wrapperP->_union_message.link_get_parameters_request.primitive.LinkDescriptorsRequest, &g_msc_gen_buf[g_msc_gen_buffer_index]); - - NOTICE("[MSC_MSG][%s][%s][--- Link_Get_Parameters.request\\n%s --->][%s]\n", - getTimeStamp4Log(), - msg_src, - g_msc_gen_buf, - msg_dst); -#endif - - /* Process Link_Get_Parameters.request */ - eRALlte_get_parameters_request(&message_wrapperP->_union_message.link_get_parameters_request); - - } else { -#ifdef MSCGEN_PYTOOL - MIH_C_MIHF_ID2String(&(message_wrapperP->_union_message.link_get_parameters_request.source), msg_src); - MIH_C_MIHF_ID2String(&(message_wrapperP->_union_message.link_get_parameters_request.destination), msg_dst); - NOTICE("[MSC_MSG][%s][%s][--- Link_Get_Parameters.request\\nERR DECODE ---x][%s]\n", - getTimeStamp4Log(), - msg_src, - msg_dst); -#endif - } - - break; - - case MIH_C_MESSAGE_LINK_CONFIGURE_THRESHOLDS_REQUEST_ID: - /* - * This primitive is generated by an MIHF that needs to set - * threshold values for different link parameters. - * The recipient responds immediately with Link_Configure_ - * Thresholds.confirm primitive. - */ - DEBUG(" %s Received MIH_C_MESSAGE_LINK_CONFIGURE_THRESHOLDS_REQUEST\n", __FUNCTION__); - memcpy(&message_wrapperP->_union_message.link_configure_thresholds_request.header, (const void *)&header, sizeof(MIH_C_HEADER_T)); - - /* Decode Link_Configure_Thresholds.request */ - status = MIH_C_Link_Message_Decode_Link_Configure_Thresholds_request(bbP, &message_wrapperP->_union_message.link_configure_thresholds_request); - - if (status == MIH_MESSAGE_DECODE_OK) { -#ifdef MSCGEN_PYTOOL - MIH_C_MIHF_ID2String(&(message_wrapperP->_union_message.link_configure_thresholds_request.source), msg_src); - MIH_C_MIHF_ID2String(&(message_wrapperP->_union_message.link_configure_thresholds_request.destination), msg_dst); - memset(g_msc_gen_buf, 0, MSC_GEN_BUF_SIZE); - g_msc_gen_buffer_index = 0; - - for (i = 0; i < message_wrapperP->_union_message.link_configure_thresholds_request.primitive.LinkConfigureParameterList_list.length; i++) { - g_msc_gen_buffer_index += MIH_C_LINK_CFG_PARAM2String(&message_wrapperP->_union_message.link_configure_thresholds_request.primitive.LinkConfigureParameterList_list.val[i], - &g_msc_gen_buf[g_msc_gen_buffer_index]); - } - - NOTICE("[MSC_MSG][%s][%s][--- Link_Configure_Thresholds.request\\n%s --->][%s]\n", - getTimeStamp4Log(), - msg_src, - g_msc_gen_buf, - msg_dst); -#endif - - /* Process Link_Configure_Thresholds.request */ - eRALlte_configure_thresholds_request(&message_wrapperP->_union_message.link_configure_thresholds_request); - - } else { -#ifdef MSCGEN_PYTOOL - MIH_C_MIHF_ID2String(&(message_wrapperP->_union_message.link_configure_thresholds_request.source), msg_src); - MIH_C_MIHF_ID2String(&(message_wrapperP->_union_message.link_configure_thresholds_request.destination), msg_dst); - NOTICE("[MSC_MSG][%s][%s][--- Link_Configure_Thresholds.request\\nERR DECODE ---x][%s]\n", - getTimeStamp4Log(), - msg_src, - msg_dst); -#endif - } - - break; - - case MIH_C_MESSAGE_LINK_ACTION_REQUEST_ID: - /* - * This primitive is used by the MIHF to request an action on a - * link-layer connection to enable optimal handling of link- - * layer resources for the purpose of handovers. - * The MIHF generates this primitive upon request from the MIH - * user to perform an action on a pre-defined link-layer - * connection. - */ - DEBUG(" %s Received MIH_C_MESSAGE_LINK_ACTION_REQUEST\n", __FUNCTION__); - memcpy(&message_wrapperP->_union_message.link_action_request.header, (const void *)&header, sizeof(MIH_C_HEADER_T)); - - /* Decode Link_Action.request */ - status = MIH_C_Link_Message_Decode_Link_Action_request(bbP, &message_wrapperP->_union_message.link_action_request); - - if (status == MIH_MESSAGE_DECODE_OK) { -#ifdef MSCGEN_PYTOOL - MIH_C_MIHF_ID2String(&(message_wrapperP->_union_message.link_action_request.source), msg_src); - MIH_C_MIHF_ID2String(&(message_wrapperP->_union_message.link_action_request.destination), msg_dst); - memset(g_msc_gen_buf, 0, MSC_GEN_BUF_SIZE); - g_msc_gen_buffer_index = 0; - g_msc_gen_buffer_index += MIH_C_LINK_ACTION2String(&message_wrapperP->_union_message.link_action_request.primitive.LinkAction, g_msc_gen_buf); - g_msc_gen_buffer_index += sprintf(&g_msc_gen_buf[g_msc_gen_buffer_index], "\\nExecution Delay=%d", message_wrapperP->_union_message.link_action_request.primitive.ExecutionDelay); - - if (message_wrapperP->_union_message.link_action_request.primitive.PoALinkAddress != NULL) { - g_msc_gen_buffer_index += sprintf(&g_msc_gen_buf[g_msc_gen_buffer_index], "\\nPoALinkAddress="); - g_msc_gen_buffer_index += MIH_C_LINK_ADDR2String(message_wrapperP->_union_message.link_action_request.primitive.PoALinkAddress, &g_msc_gen_buf[g_msc_gen_buffer_index]); - } - - NOTICE("[MSC_MSG][%s][%s][--- Link_Action.request\\n%s --->][%s]\n", - getTimeStamp4Log(), - msg_src, - g_msc_gen_buf, - msg_dst); -#endif - - /* Process Link_Action.request */ - eRALlte_action_request(&message_wrapperP->_union_message.link_action_request); - - } else { -#ifdef MSCGEN_PYTOOL - MIH_C_MIHF_ID2String(&(message_wrapperP->_union_message.link_action_request.source), msg_src); - MIH_C_MIHF_ID2String(&(message_wrapperP->_union_message.link_action_request.destination), msg_dst); - NOTICE("[MSC_MSG][%s][%s][--- Link_Action.request\\nERR DECODE --->][%s]\n", - getTimeStamp4Log(), - msg_src, - msg_dst); -#endif - } - - break; - - default: - WARNING(" UNKNOWN MESSAGE ID SID %d, OP_CODE %d, AID %d\n", header.service_identifier, header.operation_code, header.action_identifier); - status = MIH_MESSAGE_DECODE_FAILURE; - } - } else { - status = MIH_MESSAGE_DECODE_BAD_PARAMETER; - } - - return status; -} diff --git a/openair3/RAL-LTE/RAL-DUMMY/SRC/eRALlte_parameters.c b/openair3/RAL-LTE/RAL-DUMMY/SRC/eRALlte_parameters.c deleted file mode 100644 index 29d7c4bbb5..0000000000 --- a/openair3/RAL-LTE/RAL-DUMMY/SRC/eRALlte_parameters.c +++ /dev/null @@ -1,74 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ - -#include "eRALlte_parameters.h" - -#include "eRALlte_mih_msg.h" - -/****************************************************************************/ -/******************* G L O C A L D E F I N I T I O N S *****************/ -/****************************************************************************/ - -/****************************************************************************/ -/******************* L O C A L D E F I N I T I O N S *******************/ -/****************************************************************************/ - -/****************************************************************************/ -/****************** E X P O R T E D F U N C T I O N S ******************/ -/****************************************************************************/ - -/**************************************************************************** - ** ** - ** Name: eRALlte_get_parameters_request() ** - ** ** - ** Description: Processes the Link_Get_Parameters.request message and ** - ** sends a LinK_Get_Parameters.confirm message to the MIHF. ** - ** ** - ** Inputs: msgP: Pointer to the received message ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: None ** - ** Others: None ** - ** ** - ***************************************************************************/ -void eRALlte_get_parameters_request(MIH_C_Message_Link_Get_Parameters_request_t* msgP) -{ - MIH_C_STATUS_T status = MIH_C_STATUS_REJECTED; - - /* Get parameters link command is not supported at the network side */ - DEBUG(" Get Parameters request is not supported by the network\n"); - eRALlte_send_get_parameters_confirm(&msgP->header.transaction_id, - &status, NULL, NULL, NULL); -} - -/****************************************************************************/ -/********************* L O C A L F U N C T I O N S *********************/ -/****************************************************************************/ - diff --git a/openair3/RAL-LTE/RAL-DUMMY/SRC/eRALlte_process.c b/openair3/RAL-LTE/RAL-DUMMY/SRC/eRALlte_process.c deleted file mode 100644 index ba13b04f66..0000000000 --- a/openair3/RAL-LTE/RAL-DUMMY/SRC/eRALlte_process.c +++ /dev/null @@ -1,546 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ - -#include "eRALlte_variables.h" -#include "eRALlte_proto.h" - -/****************************************************************************/ -/******************* G L O C A L D E F I N I T I O N S *****************/ -/****************************************************************************/ - -extern int eRALlte_action_save_flow_id(MIH_C_FLOW_ID_T* flowId, int cnxid); - -/****************************************************************************/ -/******************* L O C A L D E F I N I T I O N S *******************/ -/****************************************************************************/ - -static void _eRALlte_process_clean_pending_mt(void); -static void _eRALlte_process_waiting_RB(int mt_ix); - -/****************************************************************************/ -/****************** E X P O R T E D F U N C T I O N S ******************/ -/****************************************************************************/ - -/**************************************************************************** - ** ** - ** Name: eRALlte_process_find_channel() ** - ** ** - ** Description: Returns the Mobile Terminal index and the Radio Bearer ** - ** channel index for the specified Connection identifier. ** - ** ** - ** Inputs: cnxid: Connection identifier ** - ** Others: ralpriv ** - ** ** - ** Outputs: mt_ix: Mobile Terminal index ** - ** ch_ix: Radio Bearer channel index ** - ** Return: 0 if no MT and RB channel indexes exist ** - ** for the specified Connection identifier. ** - ** 1 otherwise. ** - ** Others: None ** - ** ** - ***************************************************************************/ -int eRALlte_process_find_channel(unsigned int cnxid, int* mt_ix, int* ch_ix) -{ - int mt, ch; - int found = 0; - - DEBUG(" %s : cnxid = %d\n", __FUNCTION__, cnxid); - - for (mt = 0; !found && (mt < RAL_MAX_MT); mt++) { - for (ch = 0; ch < RAL_MAX_RB; ch++) { - if (ralpriv->mt[mt].radio_channel[ch].cnx_id == cnxid) { - found = 1; - *mt_ix = mt; - *ch_ix = ch; - break; - } - } - } - - if (!found) { - *mt_ix = RAL_MAX_MT; - *ch_ix = 0; - } - - DEBUG (" %s : return %d (mt=%d, ch=%d)\n" , __FUNCTION__, found, *mt_ix, *ch_ix); - return found; -} - -/**************************************************************************** - ** ** - ** Name: eRALlte_process_find_new_channel() ** - ** ** - ** Description: Returns the index of the first available Radio Bearer ** - ** channel for the specified Mobile Terminal identifier. ** - ** ** - ** Inputs: mt_ix: Mobile Terminal index ** - ** Others: ralpriv ** - ** ** - ** Outputs: None ** - ** Return: The index of the first available RB chan- ** - ** nel; RAL_MAX_RB if no any RB channel is ** - ** available. ** - ** Others: None ** - ** ** - ***************************************************************************/ -int eRALlte_process_find_new_channel(int mt_ix) -{ - int ch_ix; - - DEBUG(" %s : mt_ix = %d\n", __FUNCTION__, mt_ix); - - for (ch_ix = 0; ch_ix < RAL_MAX_RB; ch_ix++) { - if (ralpriv->mt[mt_ix].radio_channel[ch_ix].cnx_id == 0) { - break; - } - } - - DEBUG (" %s : return %d\n" , __FUNCTION__, ch_ix); - return ch_ix; -} - -/**************************************************************************** - ** ** - ** Name: eRALlte_process_clean_channel() ** - ** ** - ** Description: Cleans data of the specified Radio Bearer channel. ** - ** ** - ** Inputs: None ** - ** Others: None ** - ** ** - ** Outputs: channel: Channel data to clean ** - ** Return: None ** - ** Others: None ** - ** ** - ***************************************************************************/ -void eRALlte_process_clean_channel(struct ral_lte_channel* channel) -{ - DEBUG(" %s : cnx_id = %d, rbId = %d\n", __FUNCTION__, - channel->cnx_id, channel->rbId); - memset(channel, 0, sizeof (struct ral_lte_channel)); -} - -/**************************************************************************** - ** ** - ** Name: eRALlte_process_mt_addr_to_string() ** - ** ** - ** Description: Display the specified IPv6 address. ** - ** ** - ** Inputs: ip_addr: The IP address ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: Pointer to the string buffer. ** - ** Others: None ** - ** ** - ***************************************************************************/ -char* eRALlte_process_mt_addr_to_string(const unsigned char* ip_addr) -{ - static char buffer[40]; - int i, index = 0; - - for (i = 0; i < 16; i++) { - index += sprintf(&buffer[index], "%.2hX", ip_addr[i]); - - if (i % 2) buffer[index++] = ':'; - } - - buffer[--index] = '\0'; - return buffer; -} - -/**************************************************************************** - ** ** - ** Name: eRALlte_process_mt_addr_to_l2id() ** - ** ** - ** Description: Convert the specified IP address to Layer 2 identifier. ** - ** ** - ** Inputs: mt_addr: MT's IP address ** - ** Others: None ** - ** ** - ** Outputs: l2id Layer 2 identifier ** - ** Return: None ** - ** Others: None ** - ** ** - ***************************************************************************/ -void eRALlte_process_mt_addr_to_l2id(const unsigned char* mt_addr, unsigned int* l2id) -{ - if ( !(mt_addr) || !(l2id) ) { - ERR(" %s : input parameter is NULL\n", __FUNCTION__); - return; - } - - l2id[0] = mt_addr[0]+256 *(mt_addr[1]+256*(mt_addr[2]+256*(mt_addr[3]))); - l2id[1] = mt_addr[4]+256 *(mt_addr[5]+256*(mt_addr[6]+256*(mt_addr[7]))); -} - -/**************************************************************************** - ** ** - ** Name: eRALlte_process_cmp_mt_addr() ** - ** ** - ** Description: Compares MT's IP address to the specified L2 identifier. ** - ** ** - ** Inputs: mt_addr: MT's IP address ** - ** l2id Layer 2 identifier ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: 0 if the MT's IP address matches the L2 ** - ** identifier, 1 otherwise. ** - ** Others: None ** - ** ** - ***************************************************************************/ -int eRALlte_process_cmp_mt_addr(const char* mt_addr, const char* l2id) -{ - int i; - - for (i = 0; i < 8; i++) { - if ((uint8_t)l2id[i] != (uint8_t)mt_addr[i+8]) { - return 0; - } - } - - return 1; -} - -/**************************************************************************** - ** ** - ** Name: eRALlte_process_find_mt_by_addr() ** - ** ** - ** Description: Returns the index of the Mobile Terminal with the ** - ** specified IP address. ** - ** ** - ** Inputs: mt_addr: MT's IP address ** - ** Others: ralpriv ** - ** ** - ** Outputs: None ** - ** Return: The MT's index in the list of MTs; ** - ** RAL_MAX_MT if not found. ** - ** Others: None ** - ** ** - ***************************************************************************/ -int eRALlte_process_find_mt_by_addr(const char* mt_addr) -{ - int mt_ix; - - for (mt_ix = 0; mt_ix < RAL_MAX_MT; mt_ix++) { - const char* l2id = (const char*)(&ralpriv->mt[mt_ix].ipv6_l2id[0]); - int i; - - for (i = 0; i < 8; i++) { - if ((uint8_t)l2id[i] != (uint8_t)mt_addr[i+8]) { - break; - } - } - - if (i == 8) { - break; - } - } - - DEBUG (" %s : return %d\n" , __FUNCTION__, mt_ix); - return mt_ix; -} - -/**************************************************************************** - ** ** - ** Name: eRALlte_process_verify_pending_mt_status() ** - ** ** - ** Description: Checks the pending MT connection status and simulates RB ** - ** setup if it is ready for Radio Bearer establishment. ** - ** ** - ** Inputs: None ** - ** Others: ralpriv ** - ** ** - ** Outputs: None ** - ** Return: None ** - ** Others: None ** - ** ** - ***************************************************************************/ -void eRALlte_process_verify_pending_mt_status(void) -{ - int mt_ix; - - if (!ralpriv->pending_mt_timer) { - DEBUG(" Pending MT timer expired\n"); -#ifdef RAL_REALTIME - _eRALlte_process_clean_pending_mt(); -#endif -#ifdef RAL_DUMMY - DEBUG(" SIMULATE MT arrival\n"); - mt_ix = eRALlte_NAS_update_MTs_list(); - DEBUG(" SIMULATE RB setup\n"); - _eRALlte_process_waiting_RB(mt_ix); -#endif - } else { -#ifdef RAL_REALTIME - - if (!( ralpriv->pending_mt_timer % 10)) { - /* Get the list of MTs in the driver waiting for pending - * RB establishment */ - TQAL_process_NAS_message(IO_OBJ_CNX, IO_CMD_LIST, 0, 0); - TQAL_process_NAS_message(IO_OBJ_RB, IO_CMD_LIST, 0, 0); - /* Check if the pending MT is in the list */ - mt_ix = eRALlte_process_find_mt_by_addr((char*)ralpriv->pending_mt.ipv6_addr); - - if ( (mt_ix < RAL_MAX_MT) && - (ralpriv->mt[mt_ix].mt_state == RB_CONNECTED)) { - /* The pending MT is ready for RB establishment */ - _eRALlte_process_waiting_RB(mt_ix); - } - } - -#endif - } -} - -/**************************************************************************** - ** ** - ** Name: eRALlte_process_map_qos() ** - ** ** - ** Description: Performs mapping of reserved bit rate to Radio QoS class, ** - ** and mapping of traffic class to DCSP. ** - ** ** - ** Inputs: mt_ix: Mobile Terminal index ** - ** ch_ix: Radio Bearer channel index ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: 1 if the requested reserved bit rate and ** - ** traffic class are supported and their ** - ** mapping to Radio Qos class and DSCP ** - ** succeed. 0 otherwise. ** - ** Others: ralpriv ** - ** ** - ***************************************************************************/ -int eRALlte_process_map_qos(int mt_ix, int ch_ix) -{ - int resBitrateDL = 0, resBitrateUL = 0; - struct ral_lte_channel *currChannel; - - /* - * Map for multicast flow - */ - if (mt_ix == RAL_MAX_MT) { - currChannel = &(ralpriv->mcast.radio_channel); - - /* multicast - reserved bit rate */ - resBitrateDL = (int)currChannel->resBitrate[1]; - - if (resBitrateDL <= RAL_BITRATE_128k) { - currChannel->RadioQoSclass = 20; - } else if (resBitrateDL <= RAL_BITRATE_256k) { - currChannel->RadioQoSclass = 21; - } else if (resBitrateDL <= RAL_BITRATE_384k) { - currChannel->RadioQoSclass = 22; - } else { - ERR (" %s : Invalid requested resBitrate %d - Request will be rejected.\n", __FUNCTION__, resBitrateDL); - return 0; - } - - /* multicast - DSCP */ - if (currChannel->classId[1] < 64) { - currChannel->dscpDL = currChannel->classId[1]; - } else { - ERR (" %s : DSCP %d > 63 - NOT SUPPORTED - Request will be rejected.\n", __FUNCTION__, currChannel->classId[1]); - return 0; - } - - DEBUG (" QoS Mapping : Requested radio QoS class %d, DSCP DL %d\n", - currChannel->RadioQoSclass, - currChannel->dscpDL); - } - - /* - * Map for unicast flow - */ - else { - currChannel = &(ralpriv->mt[mt_ix].radio_channel[ch_ix]); - - /* unicast - reserved bit rate - CONVERSATIONAL */ - resBitrateDL = (int)currChannel->resBitrate[1]; - resBitrateUL = (int)currChannel->resBitrate[0]; - - if ((resBitrateDL <= RAL_BITRATE_32k) && - (resBitrateUL <= RAL_BITRATE_32k)) { - currChannel->RadioQoSclass = 1; - } else if ((resBitrateDL <= RAL_BITRATE_64k) && - (resBitrateUL <= RAL_BITRATE_64k)) { - currChannel->RadioQoSclass = 2; - } else if ((resBitrateDL <= RAL_BITRATE_128k) && - (resBitrateUL <= RAL_BITRATE_128k)) { - currChannel->RadioQoSclass = 3; - } else if ((resBitrateDL <= RAL_BITRATE_256k) && - (resBitrateUL <= RAL_BITRATE_256k)) { - currChannel->RadioQoSclass = 4; - } else if ((resBitrateDL <= RAL_BITRATE_320k) && - (resBitrateUL <= RAL_BITRATE_320k)) { - currChannel->RadioQoSclass = 5; - } else if ((resBitrateDL >= RAL_BITRATE_384k) && - (resBitrateDL <= RAL_BITRATE_440k) && - (resBitrateUL <= RAL_BITRATE_64k)) { - currChannel->RadioQoSclass = 14; - } else { - ERR (" %s : Invalid requested resBitrate %d , %d - Request will be rejected\n", __FUNCTION__, resBitrateDL, resBitrateUL); - return 0; - } - - /* unicast - DSCP */ - if ((currChannel->classId[0] < 64) && - (currChannel->classId[1] < 64)) { - currChannel->dscpUL = currChannel->classId[0]; - currChannel->dscpDL = currChannel->classId[1]; - } else { - ERR (" %s : DSCP > 63 - NOT SUPPORTED - Request will be rejected.\n", __FUNCTION__); - return 0; - } - - DEBUG (" QoS Mapping : Requested radio QoS class %d, DSCP UL %d, DSCP DL %d\n", currChannel->RadioQoSclass, currChannel->dscpUL, currChannel->dscpDL); - } - - return 1; -} - -/****************************************************************************/ -/********************* L O C A L F U N C T I O N S *********************/ -/****************************************************************************/ - -/**************************************************************************** - ** ** - ** Name: _eRALlte_process_waiting_RB() ** - ** ** - ** Description: Allocates a new Radio Bearer parameters to the specified ** - ** Mobile Terminal which was pending for RB establishment, ** - ** and sends RB establishment request to the NAS sublayer. ** - ** ** - ** Inputs: mt_ix: Mobile Terminal index ** - ** Others: ralpriv ** - ** ** - ** Outputs: None ** - ** Return: None ** - ** Others: ralpriv ** - ** ** - ***************************************************************************/ -static void _eRALlte_process_waiting_RB(int mt_ix) -{ - struct ral_lte_channel *currChannel; - struct ral_lte_channel *pendingChannel; - int ch_ix, f_ix; - int dir, mapping_result, rc = -1; - - DEBUG(" Establishment of pending RB now starting...\n"); - ch_ix = eRALlte_process_find_new_channel(mt_ix); - - if (ch_ix == RAL_MAX_RB) { - DEBUG(" No RB available in MT - Deleting request data\n"); - _eRALlte_process_clean_pending_mt(); - return; - } - - pendingChannel = &(ralpriv->pending_mt.radio_channel[0]); - currChannel = &(ralpriv->mt[mt_ix].radio_channel[ch_ix]); - - currChannel->cnx_id = (RAL_MAX_RB_PER_UE*mt_ix)+ch_ix+1; - currChannel->rbId = RAL_DEFAULT_RAB_ID+ch_ix; - currChannel->multicast = 0; - DEBUG(" mt_ix %d, ch_ix %d, cnx_id %d, rbId %d\n", - mt_ix, ch_ix, currChannel->cnx_id, currChannel->rbId); - memcpy((char *)&(ralpriv->mt[mt_ix].ipv6_addr), - (char *)&(ralpriv->pending_mt.ipv6_addr), 16); - DEBUG (" MT's address = %s\n", - eRALlte_process_mt_addr_to_string(ralpriv->mt[mt_ix].ipv6_addr)); - - /* Save the pending data flow identifier into the list of active data flows */ - f_ix = eRALlte_action_save_flow_id(&ralpriv->pending_req_fid, currChannel->cnx_id); - - if (f_ix < 0) { - DEBUG(" No RB available - Deleting request data\n"); - _eRALlte_process_clean_pending_mt(); - return; - } - - /* Store resource parameters of the pending MT */ - for (dir = 0; dir < 2; dir++) { - currChannel->flowId[dir] = f_ix; - currChannel->classId[dir]= pendingChannel->classId[dir] ; - currChannel->resBitrate[dir] = pendingChannel->resBitrate[dir]; - currChannel->meanBitrate[dir] = pendingChannel->meanBitrate[dir]; - currChannel->bktDepth[dir] = pendingChannel->bktDepth[dir]; - currChannel->pkBitrate[dir] = pendingChannel->pkBitrate[dir]; - currChannel->MTU[dir] = pendingChannel->MTU[dir]; - DEBUG(" qos value : DIR %d, flowId %d, classId %d, resBitrate %.1f \n", - dir, currChannel->flowId[dir], currChannel->classId[dir], - currChannel->resBitrate[dir]); - } - - /* Map Qos */ - mapping_result = eRALlte_process_map_qos(mt_ix, ch_ix); - - if (mapping_result) { -#ifdef RAL_DUMMY - rc = eRALlte_NAS_send_rb_establish_request(mt_ix, ch_ix); -#endif -#ifdef RAL_REALTIME - rc = TQAL_process_NAS_message(IO_OBJ_RB, IO_CMD_ADD, mt_ix, ch_ix); -#endif - } - - if (rc < 0) { - /* Failed to send RB establishment request; release new RB data */ - eRALlte_process_clean_channel(currChannel); - } else { - /* RB establishment request has been sent; release pending MT data */ - ralpriv->pending_req_flag = 0; - _eRALlte_process_clean_pending_mt(); - } -} - -/**************************************************************************** - ** ** - ** Name: _eRALlte_process_clean_pending_mt() ** - ** ** - ** Description: Deletes previously stored pending MT data. ** - ** ** - ** Inputs: None ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: None ** - ** Others: ralpriv ** - ** ** - ***************************************************************************/ -static void _eRALlte_process_clean_pending_mt(void) -{ - memset(ralpriv->pending_mt.ipv6_addr, 0 , 16); - eRALlte_process_clean_channel(&ralpriv->pending_mt.radio_channel[0]); - - ralpriv->pending_mt_timer = -1; - DEBUG(" Pending MT data deleted\n"); -} - diff --git a/openair3/RAL-LTE/RAL-DUMMY/SRC/eRALlte_subscribe.c b/openair3/RAL-LTE/RAL-DUMMY/SRC/eRALlte_subscribe.c deleted file mode 100644 index cbb8b1ace2..0000000000 --- a/openair3/RAL-LTE/RAL-DUMMY/SRC/eRALlte_subscribe.c +++ /dev/null @@ -1,132 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ - -#include "eRALlte_subscribe.h" - -#include "eRALlte_mih_msg.h" -#include "eRALlte_variables.h" - -/****************************************************************************/ -/******************* G L O C A L D E F I N I T I O N S *****************/ -/****************************************************************************/ - -/****************************************************************************/ -/******************* L O C A L D E F I N I T I O N S *******************/ -/****************************************************************************/ - -/****************************************************************************/ -/****************** E X P O R T E D F U N C T I O N S ******************/ -/****************************************************************************/ - -/**************************************************************************** - ** ** - ** Name: eRALlte_subscribe_request() ** - ** ** - ** Description: Subscribes the MIH-F to receive specified link event ** - ** indications and sends Link Event Subscribe confirmation ** - ** to the MIH-F. ** - ** ** - ** Inputs: msgP: Pointer to the received MIH message ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: None ** - ** Others: ralpriv ** - ** ** - ***************************************************************************/ -void eRALlte_subscribe_request(MIH_C_Message_Link_Event_Subscribe_request_t* msgP) -{ - MIH_C_STATUS_T status = MIH_C_STATUS_REJECTED; - - /* Check whether the action request is supported */ - if (ralpriv->mih_supported_link_command_list & MIH_C_BIT_LINK_EVENT_SUBSCRIBE) { - MIH_C_LINK_EVENT_LIST_T mih_subscribed_req_event_list; - - ralpriv->mih_subscribe_req_event_list |= (msgP->primitive.RequestedLinkEventList & ralpriv->mih_supported_link_event_list); - - mih_subscribed_req_event_list = ralpriv->mih_subscribe_req_event_list & msgP->primitive.RequestedLinkEventList; - - status = MIH_C_STATUS_SUCCESS; - - eRALlte_send_event_subscribe_confirm(&msgP->header.transaction_id, - &status, - &mih_subscribed_req_event_list); - } else { - eRALlte_send_event_subscribe_confirm(&msgP->header.transaction_id, - &status, - NULL); - } -} - -/**************************************************************************** - ** ** - ** Name: eRALlte_unsubscribe_request() ** - ** ** - ** Description: Unsubscribes the MIH-F to receive specified link event ** - ** indications and sends Link Event Unsubscribe confirmation ** - ** to the MIH-F. ** - ** ** - ** Inputs: msgP: Pointer to the received MIH message ** - ** Others: None ** - ** ** - ** Outputs: None ** - ** Return: None ** - ** Others: ralpriv ** - ** ** - ***************************************************************************/ -void eRALlte_unsubscribe_request(MIH_C_Message_Link_Event_Unsubscribe_request_t* msgP) -{ - MIH_C_STATUS_T status = MIH_C_STATUS_REJECTED; - - /* Check whether the action request is supported */ - if (ralpriv->mih_supported_link_command_list & MIH_C_BIT_LINK_EVENT_UNSUBSCRIBE) { - MIH_C_LINK_EVENT_LIST_T mih_unsubscribed_req_event_list; - MIH_C_LINK_EVENT_LIST_T saved_req_event_list; - - saved_req_event_list = ralpriv->mih_subscribe_req_event_list; - - ralpriv->mih_subscribe_req_event_list &= ~(msgP->primitive.RequestedLinkEventList & ralpriv->mih_supported_link_event_list); - mih_unsubscribed_req_event_list = ralpriv->mih_subscribe_req_event_list ^ saved_req_event_list; - - status = MIH_C_STATUS_SUCCESS; - - eRALlte_send_event_unsubscribe_confirm(&msgP->header.transaction_id, - &status, - &mih_unsubscribed_req_event_list); - } else { - eRALlte_send_event_unsubscribe_confirm(&msgP->header.transaction_id, - &status, - NULL); - } -} - -/****************************************************************************/ -/********************* L O C A L F U N C T I O N S *********************/ -/****************************************************************************/ - diff --git a/openair3/RAL-LTE/RAL-DUMMY/SRC/eRALlte_thresholds.c b/openair3/RAL-LTE/RAL-DUMMY/SRC/eRALlte_thresholds.c deleted file mode 100644 index dba7d98e9a..0000000000 --- a/openair3/RAL-LTE/RAL-DUMMY/SRC/eRALlte_thresholds.c +++ /dev/null @@ -1,75 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ - -#include "eRALlte_thresholds.h" - -#include "eRALlte_mih_msg.h" - -/****************************************************************************/ -/******************* G L O C A L D E F I N I T I O N S *****************/ -/****************************************************************************/ - -/****************************************************************************/ -/******************* L O C A L D E F I N I T I O N S *******************/ -/****************************************************************************/ - -/****************************************************************************/ -/****************** E X P O R T E D F U N C T I O N S ******************/ -/****************************************************************************/ - -/**************************************************************************** - ** ** - ** Name: eRALlte_configure_thresholds_request() ** - ** ** - ** Description: Processes the Link_Configure_Thresholds.request message ** - ** and sends a Link_Configure_Thresholds.confirm message to ** - ** the MIHF. ** - ** ** - ** Inputs: msgP: Pointer to the received message ** - ** Others: ralpriv ** - ** ** - ** Outputs: None ** - ** Return: None ** - ** Others: None ** - ** ** - ***************************************************************************/ -void eRALlte_configure_thresholds_request(MIH_C_Message_Link_Configure_Thresholds_request_t* msgP) -{ - MIH_C_STATUS_T status = MIH_C_STATUS_REJECTED; - - /* Configure thresholds link command is not supported at the network side */ - DEBUG(" Configure thresholds request is not supported by the network\n"); - eRALlte_send_configure_thresholds_confirm(&msgP->header.transaction_id, - &status, NULL); -} - -/****************************************************************************/ -/********************* L O C A L F U N C T I O N S *********************/ -/****************************************************************************/ - diff --git a/openair3/RAL-LTE/RAL-DUMMY/SRC/mRALlte_NAS.c b/openair3/RAL-LTE/RAL-DUMMY/SRC/mRALlte_NAS.c deleted file mode 100755 index 6ea81a48f8..0000000000 --- a/openair3/RAL-LTE/RAL-DUMMY/SRC/mRALlte_NAS.c +++ /dev/null @@ -1,468 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ -#define MRAL_MODULE -#include -#include -#include -#include -//#include -//#include -#include -//#include -//#include - -#include "mRALlte_mih_msg.h" -#include "mRALlte_variables.h" -#include "mRALlte_proto.h" -#include "MIH_C.h" -#include "mRALlte_mih_msg.h" - -#include "nasUE_config.h" -#include "nas_ue_netlink.h" - -extern char message[NAS_UE_NETL_MAXLEN]; -extern int sd_graal, s_nas; - -#define MSC_GEN_BUF_SIZE 1024 -static char msc_gen_buff[MSC_GEN_BUF_SIZE]; - -/*************************************************************************** - Reception side - ***************************************************************************/ -//--------------------------------------------------------------------------- -void print_state(uint8_t state) -{ - //--------------------------------------------------------------------------- - switch(state) { - case NAS_DISCONNECTED: - DEBUG("NAS_DISCONNECTED\n"); - return; - - case NAS_CONNECTED: - DEBUG("NAS_CONNECTED\n"); - return; - - default: - ERR(" Unknown state\n"); - } -} - -//--------------------------------------------------------------------------- -int IAL_decode_NAS_message(void) -{ - //--------------------------------------------------------------------------- - struct nas_ue_netl_reply *msgToRcve; - int done=0, n, i; - char *buffer; -#ifdef MSCGEN_PYTOOL - unsigned int buffer_index; -#endif - n = recv(s_nas, message, NAS_UE_NETL_MAXLEN, 0); - - if (n <= 0) { - if (n < 0) perror("RAL_process_DNAS_message : recv"); - - done = 1; - } - - if (!done) { - DEBUG(" "); - DEBUG("RAL_decode_NAS_message: primitive from NAS\n"); - msgToRcve = (struct nas_ue_netl_reply *) message; - - switch (msgToRcve->type) { - - case NAS_UE_MSG_CNX_ESTABLISH_REPLY: - NOTICE("[MSC_MSG][%s][nas][--- NAS_UE_MSG_CNX_ESTABLISH_REPLY --->][%s]\n", getTimeStamp4Log(), g_link_id); - DEBUG("NAS_UE_MSG_CNX_ESTABLISH_REPLY received\n"); - ralpriv->pending_req_action = MIH_C_LINK_AC_TYPE_NONE; - ralpriv->state = DISCONNECTED; - - if (msgToRcve->ialNASPrimitive.cnx_est_rep.status==0) { - ERR(" Connexion establishment failure: %d\n",msgToRcve->ialNASPrimitive.cnx_est_rep.status); - done = 1; - ralpriv->pending_req_status = MIH_C_STATUS_SUCCESS; - ralpriv->pending_req_ac_result = MIH_C_LINK_AC_RESULT_FAILURE; - //mRALu_send_link_switch_cnf(); - //mRALte_send_link_action_confirm(); - } else { - ralpriv->pending_req_status = MIH_C_STATUS_SUCCESS; - ralpriv->pending_req_ac_result = MIH_C_LINK_AC_RESULT_SUCCESS; - ralpriv->pending_req_flag = 1; - DEBUG(" Connexion establishment pending: pending_req_flag %d\n\n",ralpriv->pending_req_flag); - } - - break; - - case NAS_UE_MSG_CNX_RELEASE_REPLY: - NOTICE("[MSC_MSG][%s][nas][--- NAS_UE_MSG_CNX_RELEASE_REPLY --->][%s]\n", - getTimeStamp4Log(), - g_link_id); - DEBUG("NAS_UE_MSG_CNX_RELEASE_REPLY received\n"); - ralpriv->pending_req_action = MIH_C_LINK_AC_TYPE_NONE; - - if (msgToRcve->ialNASPrimitive.cnx_rel_rep.status>0) { - ERR(" Connexion release failure: %d", msgToRcve->ialNASPrimitive.cnx_rel_rep.status); - done = 1; - ralpriv->pending_req_status = MIH_C_STATUS_SUCCESS; - ralpriv->pending_req_ac_result = MIH_C_LINK_AC_RESULT_FAILURE; - } else { - ralpriv->pending_req_status = MIH_C_STATUS_SUCCESS; - ralpriv->pending_req_ac_result = MIH_C_LINK_AC_RESULT_SUCCESS; - ralpriv->pending_req_flag = 1; - DEBUG(" Connexion establishment pending: pending_req_flag %d\n\n",ralpriv->pending_req_flag); - } - - ralpriv->state = DISCONNECTED; - //mRALu_send_link_switch_cnf(); - //added - ralpriv->pending_req_flag = 0; - ralpriv->cell_id = CONF_UNKNOWN_CELL_ID; - break; - - case NAS_UE_MSG_CNX_LIST_REPLY: { - struct nas_ue_msg_cnx_list_reply *p; - NOTICE("[MSC_MSG][%s][nas][--- NAS_UE_MSG_CNX_LIST_REPLY --->][%s]\n", - getTimeStamp4Log(), - g_link_id); - DEBUG("NAS_UE_MSG_CNX_LIST_REPLY received\n"); - p = &(msgToRcve->ialNASPrimitive.cnx_list_rep); - DEBUG(" CellId\tIID4\tIID6\t\t\tnum_rb\tnsclass\tState\n"); - - DEBUG(" %u\t%u\t", p->cellid, p->iid4); - - for (i=0; i<8; ++i) - DEBUG("%02x", *((uint8_t *)p->iid6+i)); - - DEBUG("\t%u\t%u\t", p->num_rb, p->nsclassifier); - print_state(p->state); - - ralpriv->nas_state = p->state ; - ralpriv->num_rb = p->num_rb; - ralpriv->cell_id = p->cellid ; - //IAL_return_NAS_StatAttach(); - } - break; - - case NAS_UE_MSG_RB_LIST_REPLY: { - struct nas_ue_msg_rb_list_reply *p; - NOTICE("[MSC_MSG][%s][nas][--- NAS_UE_MSG_RB_LIST_REPLY --->][%s]\n", - getTimeStamp4Log(), - g_link_id); - DEBUG("NAS_UE_MSG_RB_LIST_REPLY received\n"); - p = &(msgToRcve->ialNASPrimitive.rb_list_rep); - ralpriv->num_rb = p->num_rb; - DEBUG("rab_id\t\tdscp\t\tQoS\t\tState\n"); - - for(i=0; inum_rb; i++) { - DEBUG("%u\t\t%u\t\t%u\t\t", p->RBList[i].rbId, p->RBList[i].dscp, p->RBList[i].QoSclass); - print_state(p->RBList[i].state); - ralpriv->rbId[i]= p->RBList[i].rbId; - ralpriv->QoSclass[i] = p->RBList[i].QoSclass; - ralpriv->dscp[i] = p->RBList[i].dscp; - } - } - //IAL_return_NAS_StatRB(); - break; - - case NAS_UE_MSG_MEAS_REPLY: { - struct nas_ue_msg_measure_reply *p; - DEBUG("NAS_UE_MSG_MEASUREMENT_REPLY received\n"); - p = &(msgToRcve->ialNASPrimitive.meas_rep); -#ifdef DEBUG_MRALU_MEASURES - DEBUG("Measurement Report - Number of cells %d - Current cell %d\n", p->num_cells, ralpriv->cell_id); - DEBUG("Cell_id\tMeasure\tProvider_id\n"); -#endif - - for (i=0; inum_cells; i++) { -#ifdef DEBUG_MRALU_MEASURES - DEBUG(" %d\t%d\t%d\n",p-> measures[i].cell_id,p-> measures[i].level,p-> measures[i].provider_id); -#endif - ralpriv->meas_cell_id[i] = p-> measures[i].cell_id; - IAL_integrate_measure(p-> measures[i].level, i); - ralpriv->provider_id[i] = p-> measures[i].provider_id; - } - -#ifdef MSCGEN_PYTOOL - memset(msc_gen_buff, 0, MSC_GEN_BUF_SIZE); - buffer_index = 0; - - for (i=0; inum_cells; i++) { - buffer_index += sprintf(&msc_gen_buff[buffer_index], "\\nCell Id %d Level %d Provider %d", - p-> measures[i].cell_id, p-> measures[i].level, p-> measures[i].provider_id); - ralpriv->meas_cell_id[i] = p-> measures[i].cell_id; - } - - NOTICE("[MSC_MSG][%s][nas][--- NAS_UE_MSG_MEASUREMENT_REPLY%s --->][%s]\n", - getTimeStamp4Log(), - msc_gen_buff, - g_link_id); -#endif - //Temp -#ifdef RAL_DUMMY - ralpriv->num_measures = p->num_cells; //TEMP- To be activated later -#endif - //ralpriv->meas_cell_id[0] = ralpriv->cell_id; - } - break; - - case NAS_UE_MSG_IMEI_REPLY: - DEBUG("NAS_UE_MSG_IMEI_REPLY received\n"); - DEBUG("IMEI value received= %d %d\n", msgToRcve->ialNASPrimitive.l2id_rep.l2id[0], msgToRcve->ialNASPrimitive.l2id_rep.l2id[1]); - //store the received value, to be used later - ralpriv->ipv6_l2id[0] = msgToRcve->ialNASPrimitive.l2id_rep.l2id[0]; - ralpriv->ipv6_l2id[1] = msgToRcve->ialNASPrimitive.l2id_rep.l2id[1]; - buffer = (char *)(&ralpriv->ipv6_l2id[0]); - DEBUG ("IMEI value: = "); - - for (i = 0; i < 8; i++) { - DEBUG ("-%hhx-", (unsigned char) buffer[i]); - } - - DEBUG ("\n"); -#ifdef MSCGEN_PYTOOL - memset(msc_gen_buff, 0, MSC_GEN_BUF_SIZE); - buffer_index = 0; - buffer_index = sprintf(&msc_gen_buff[buffer_index], "\\nIMEI:%hhx-%hhx-%hhx-%hhx-%hhx-%hhx-%hhx-%hhx", - (unsigned char) buffer[0],(unsigned char) buffer[1], - (unsigned char) buffer[2],(unsigned char) buffer[3], - (unsigned char) buffer[4],(unsigned char) buffer[5], - (unsigned char) buffer[6],(unsigned char) buffer[7]); - NOTICE("[MSC_MSG][%s][nas][--- NAS_UE_MSG_IMEI_REPLY --->][%s]\n", - getTimeStamp4Log(), - g_link_id); -#endif - break; - - default: - ERR("IAL_decode_NAS_message : invalid message Type %d\n",msgToRcve->type); - done = 1; - } - } - - return done; -} - - -/*************************************************************************** - Transmission side - ***************************************************************************/ - -//--------------------------------------------------------------------------- -int IAL_process_DNAS_message(int ioctl_obj, int ioctl_cmd, int ioctl_cellid) -{ - //--------------------------------------------------------------------------- - struct nas_ue_netl_request *msgToSend; - int rc; - - - msgToSend = (struct nas_ue_netl_request *) message; - memset(message,0,NAS_UE_NETL_MAXLEN); - - NOTICE(" \n"); - - switch (ioctl_obj) { - case IO_OBJ_CNX: - switch (ioctl_cmd) { - /***/ - case IO_CMD_ADD: { - NOTICE("[MSC_MSG][%s][%s][--- NAS_UE_MSG_CNX_ESTABLISH_REQUEST --->][nas]\n", - getTimeStamp4Log(), - g_link_id); - msgToSend->type=NAS_UE_MSG_CNX_ESTABLISH_REQUEST; - msgToSend->length = sizeof(struct nas_ue_netl_hdr)+ sizeof(struct nas_ue_netl_request); - msgToSend->ialNASPrimitive.cnx_req.cellid = ioctl_cellid; - ralpriv->cell_id = ioctl_cellid; - // - DEBUG("ioctl : Connection establishment requested\n"); - rc = 0; - } - break; - - /***/ - case IO_CMD_DEL: { - - NOTICE("[MSC_MSG][%s][%s][--- NAS_UE_MSG_CNX_RELEASE_REQUEST --->][nas]\n", - getTimeStamp4Log(), - g_link_id); - msgToSend->type=NAS_UE_MSG_CNX_RELEASE_REQUEST; - msgToSend->length = sizeof(struct nas_ue_netl_hdr)+ sizeof(struct nas_ue_netl_request); - // - DEBUG("ioctl : Connexion release requested\n"); - rc = 0; - } - break; - - /***/ - case IO_CMD_LIST: { - NOTICE("[MSC_MSG][%s][%s][--- NAS_UE_MSG_CNX_LIST_REQUEST --->][nas]\n", - getTimeStamp4Log(), - g_link_id); - msgToSend->type=NAS_UE_MSG_CNX_LIST_REQUEST; - msgToSend->length = sizeof(struct nas_ue_netl_hdr)+ sizeof(struct nas_ue_netl_request); - // - DEBUG("ioctl : Connexion list requested\n"); - rc = 0; - } - break; - - /***/ - default: - ERR("IAL_process_DNAS_message : invalid ioctl command %d\n",ioctl_cmd); - rc= -1; - } //end switch ioctl_cmd - - break; - - /***************************/ - case IO_OBJ_RB: - switch (ioctl_cmd) { - /***/ - case IO_CMD_LIST: { - NOTICE("[MSC_MSG][%s][%s][--- NAS_UE_MSG_RB_LIST_REQUEST --->][nas]\n", - getTimeStamp4Log(), - g_link_id); - msgToSend->type=NAS_UE_MSG_RB_LIST_REQUEST; - msgToSend->length = sizeof(struct nas_ue_netl_hdr)+ sizeof(struct nas_ue_netl_request); - // - DEBUG("ioctl : Radio bearer list requested\n"); - rc = 0; - } - break; - - /***/ - default: - ERR("IAL_process_DNAS_message : invalid ioctl command %d\n",ioctl_cmd); - rc= -1; - } //end switch ioctl_cmd - - break; - - /***************************/ - case IO_OBJ_MEAS: - // - { - msgToSend->type=NAS_UE_MSG_MEAS_REQUEST; - NOTICE("[MSC_MSG][%s][%s][--- NAS_UE_MSG_MEAS_REQUEST --->][nas]\n", - getTimeStamp4Log(), - g_link_id); - msgToSend->length = sizeof(struct nas_ue_netl_hdr)+ sizeof(struct nas_ue_netl_request); - // - DEBUG("ioctl : Measurement requested\n"); - rc = 0; - } - break; - - /***************************/ - case IO_OBJ_IMEI: { - NOTICE("[MSC_MSG][%s][%s][--- NAS_UE_MSG_IMEI_REQUEST --->][nas]\n", - getTimeStamp4Log(), - g_link_id); - msgToSend->type=NAS_UE_MSG_IMEI_REQUEST; - msgToSend->length = sizeof(struct nas_ue_netl_hdr)+ sizeof(struct nas_ue_netl_request); - // - DEBUG("ioctl : L2Id (IMEI) requested\n"); - rc = 0; - } - break; - - /***************************/ - default: - ERR("IAL_process_DNAS_message : invalid ioctl object %d\n",ioctl_obj); - rc= -1; - } //end switch ioctl_obj - - if (!rc) { - if (send(s_nas, message,msgToSend->length, 0) < 0) { - perror("IAL_process_DNAS_message : send"); - rc= -1; - } - - DEBUG ("message sent to NAS %d\n",msgToSend->length); - } - - return rc; -} - - - - -/*************************************************************************** - Tool functions - ***************************************************************************/ - - - -//--------------------------------------------------------------------------- -// Convert the IMEI to iid -void TQAL_NAS_imei2iid(uint8_t *imei, uint8_t *iid) -{ - //--------------------------------------------------------------------------- - // Start debug information - - if (!imei ||! iid ) { - ERR("TQAL_NAS_imei2iid - input parameter is NULL \n"); - return; - } - - // End debug information - memset(iid, 0, 8); - iid[0] = 16*imei[0]+imei[1]; - iid[1] = 16*imei[2]+imei[3]; - iid[2] = 16*imei[4]+imei[5]; - iid[3] = 16*imei[6]+imei[7]; - iid[4] = 16*imei[8]+imei[9]; - iid[5] = 16*imei[10]+imei[11]; - iid[6] = 16*imei[12]+imei[13]; - iid[7] = 16*imei[14]+imei[15]; -} - - -//--------------------------------------------------------------------------- -// Convert the IMEI to iid -void TQAL_NAS_imei2iid2(uint8_t *imei, uint32_t *iid) -{ - //--------------------------------------------------------------------------- - // Start debug information - - if (!imei ||! iid ) { - ERR("TQAL_NAS_imei2iid - input parameter is NULL \n"); - return; - } - - // End debug information - // memset(iid, 0, 8); - iid[0] = imei[0]+256 *(imei[1]+256*(imei[2]+256*(imei[3]))); - iid[1] = imei[4]+256 *(imei[5]+256*(imei[6]+256*(imei[7]))); -} - - - - - diff --git a/openair3/RAL-LTE/RAL-DUMMY/SRC/mRALlte_action.c b/openair3/RAL-LTE/RAL-DUMMY/SRC/mRALlte_action.c deleted file mode 100755 index f35fa91f29..0000000000 --- a/openair3/RAL-LTE/RAL-DUMMY/SRC/mRALlte_action.c +++ /dev/null @@ -1,229 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ - -#define MRAL_MODULE -#define MRALLTE_ACTION_C -#include -#include "mRALlte_action.h" -#include "mRALlte_variables.h" -#include "nas_ue_ioctl.h" -#include "mRALlte_proto.h" - -//----------------------------------------------------------------------------- -void mRALlte_action_request(MIH_C_Message_Link_Action_request_t* messageP) -{ - //----------------------------------------------------------------------------- - MIH_C_STATUS_T status; - LIST(MIH_C_LINK_SCAN_RSP, scan_response_set); - MIH_C_LINK_AC_RESULT_T link_action_result; - MIH_C_TRANSACTION_ID_T transaction_id; - unsigned int scan_index; - - - memcpy(&g_link_action, &messageP->primitive.LinkAction, sizeof(MIH_C_LINK_ACTION_T)); - - status = MIH_C_STATUS_SUCCESS; - link_action_result = MIH_C_LINK_AC_RESULT_SUCCESS; - scan_response_set_list.length = 0; - - if ( messageP->primitive.LinkAction.link_ac_attr & MIH_C_BIT_LINK_AC_ATTR_LINK_SCAN) { - for (scan_index = 0; scan_index < ralpriv->num_measures; scan_index++) { - //MIH_C_LINK_ADDR_T - scan_response_set_list.val[scan_index].link_addr.choice = (MIH_C_CHOICE_T)MIH_C_CHOICE_3GPP_ADDR; - MIH_C_3GPP_ADDR_set(&scan_response_set_list.val[scan_index].link_addr._union._3gpp_addr, (u_int8_t*)DEFAULT_ADDRESS_3GPP, strlen(DEFAULT_ADDRESS_3GPP)); - // MIH_C_NETWORK_ID_T - MIH_C_NETWORK_ID_set(&scan_response_set_list.val[scan_index].network_id, (u_int8_t *)PREDEFINED_MIH_NETWORK_ID, strlen(PREDEFINED_MIH_NETWORK_ID)); - // MIH_C_SIG_STRENGTH_T - - scan_response_set_list.val[scan_index].sig_strength.choice = MIH_C_SIG_STRENGTH_CHOICE_PERCENTAGE; - scan_response_set_list.val[scan_index].sig_strength._union.percentage = ralpriv->integrated_meas_level[scan_index]; - scan_response_set_list.length += 1; - } - - transaction_id = messageP->header.transaction_id; - - mRALlte_send_link_action_confirm(&transaction_id, - &status, - &scan_response_set_list, - &link_action_result); - - } - - if ( messageP->primitive.LinkAction.link_ac_attr & MIH_C_BIT_LINK_AC_ATTR_LINK_RES_RETAIN) { - // TO DO - } - - if ( messageP->primitive.LinkAction.link_ac_attr & MIH_C_BIT_LINK_AC_ATTR_DATA_FWD_REQ) { - // TO DO - } - - // do not make actions if SCAN required - if (( messageP->primitive.LinkAction.link_ac_attr & MIH_C_BIT_LINK_AC_ATTR_LINK_SCAN) == 0) { - switch (messageP->primitive.LinkAction.link_ac_type) { - case MIH_C_LINK_AC_TYPE_NONE: - DEBUG("%s ACTION REQUESTED: MIH_C_LINK_AC_TYPE_NONE: NO ACTION\n", __FUNCTION__); - break; - - case MIH_C_LINK_AC_TYPE_LINK_DISCONNECT: - DEBUG("%s ACTION REQUESTED: MIH_C_LINK_AC_TYPE_LINK_DISCONNECT: NO ACTION\n", __FUNCTION__); - - if (ralpriv->mih_supported_action_list & MIH_C_LINK_AC_TYPE_LINK_DISCONNECT) { - } else { - link_action_result = MIH_C_LINK_AC_RESULT_INCAPABLE; - ralpriv->pending_req_status = 0; - mRALlte_send_link_action_confirm(&messageP->header.transaction_id, &status, &scan_response_set_list, &link_action_result); - } - - break; - - case MIH_C_LINK_AC_TYPE_LINK_LOW_POWER: - DEBUG("%s ACTION REQUESTED: MIH_C_LINK_AC_TYPE_LINK_LOW_POWER\n", __FUNCTION__); - - if (ralpriv->mih_supported_action_list & MIH_C_LINK_AC_TYPE_LINK_LOW_POWER) { - } else { - link_action_result = MIH_C_LINK_AC_RESULT_INCAPABLE; - ralpriv->pending_req_status = 0; - mRALlte_send_link_action_confirm(&messageP->header.transaction_id, &status, &scan_response_set_list, &link_action_result); - } - - break; - - case MIH_C_LINK_AC_TYPE_LINK_POWER_DOWN: - DEBUG("%s ACTION REQUESTED: MIH_C_LINK_AC_TYPE_LINK_POWER_DOWN\n", __FUNCTION__); - - if (ralpriv->mih_supported_action_list & MIH_C_LINK_AC_TYPE_LINK_POWER_DOWN) { - if ( ralpriv->pending_req_action & MIH_C_LINK_AC_TYPE_LINK_POWER_DOWN ) { - if (ralpriv->state == DISCONNECTED) { - DEBUG("Deactivation requested, but interface already inactive ==> NO OP\n"); - ralpriv->pending_req_status = 0; - mRALlte_send_link_action_confirm(&messageP->header.transaction_id, &status, &scan_response_set_list, &link_action_result); - } else { - ralpriv->pending_req_action = ralpriv->pending_req_action | MIH_C_LINK_AC_TYPE_LINK_POWER_DOWN; - ralpriv->pending_req_status = 0; - ralpriv->pending_req_transaction_id = messageP->header.transaction_id; - DEBUG("Deactivation requested to NAS interface\n"); - IAL_process_DNAS_message(IO_OBJ_CNX, IO_CMD_DEL, ralpriv->cell_id); - //Send immediatly a confirm, otherwise it will arrive to late and MIH-F will report a failure to the MIH-USER - mRALlte_send_link_action_confirm(&messageP->header.transaction_id, &status, NULL, &link_action_result); - } - } else { - ralpriv->pending_req_action |= MIH_C_LINK_AC_TYPE_LINK_POWER_DOWN; - ralpriv->pending_req_status = 0; - ralpriv->pending_req_transaction_id = messageP->header.transaction_id; - DEBUG("Deactivation requested to NAS interface\n"); - IAL_process_DNAS_message(IO_OBJ_CNX, IO_CMD_DEL, ralpriv->cell_id); - //Send immediatly a confirm, otherwise it will arrive to late and MIH-F will report a failure to the MIH-USER - mRALlte_send_link_action_confirm(&messageP->header.transaction_id, &status, NULL, &link_action_result); - } - } else { - DEBUG ("[mRAL]: command POWER DOWN not available \n\n"); - link_action_result = MIH_C_LINK_AC_RESULT_INCAPABLE; - ralpriv->pending_req_status = 0; - mRALlte_send_link_action_confirm(&messageP->header.transaction_id, &status, NULL, &link_action_result); - } - - break; - - case MIH_C_LINK_AC_TYPE_LINK_POWER_UP: - DEBUG("%s ACTION REQUESTED: MIH_C_LINK_AC_TYPE_LINK_POWER_UP\n", __FUNCTION__); - - if (ralpriv->mih_supported_action_list & MIH_C_LINK_AC_TYPE_LINK_POWER_UP) { - // Activation requested - check it is not already active - if(ralpriv->pending_req_action & MIH_C_LINK_AC_TYPE_LINK_POWER_UP) { - if (ralpriv->state == CONNECTED) { - DEBUG("Activation requested, but interface already active ==> NO OP\n"); - ralpriv->pending_req_status = 0; - mRALlte_send_link_action_confirm(&messageP->header.transaction_id, &status, &scan_response_set_list, &link_action_result); - } else { - ralpriv->pending_req_action = ralpriv->pending_req_action | MIH_C_LINK_AC_TYPE_LINK_POWER_UP; - ralpriv->pending_req_status = 0; - ralpriv->pending_req_transaction_id = messageP->header.transaction_id; - DEBUG("Activation requested to NAS interface\n"); - IAL_process_DNAS_message(IO_OBJ_CNX, IO_CMD_ADD, ralpriv->cell_id); - } - } else { - ralpriv->pending_req_action |= MIH_C_LINK_AC_TYPE_LINK_POWER_UP; - ralpriv->pending_req_status = 0; - ralpriv->pending_req_transaction_id = messageP->header.transaction_id; - DEBUG("Activation requested to NAS interface\n"); - IAL_process_DNAS_message(IO_OBJ_CNX, IO_CMD_ADD, ralpriv->cell_id); - } - } else { - DEBUG ("[mRAL]: command POWER UP not available \n\n"); - link_action_result = MIH_C_LINK_AC_RESULT_INCAPABLE; - ralpriv->pending_req_status = 0; - mRALlte_send_link_action_confirm(&messageP->header.transaction_id, &status, &scan_response_set_list, &link_action_result); - } - - break; - - case MIH_C_LINK_AC_TYPE_LINK_FLOW_ATTR: - DEBUG("%s ACTION REQUESTED: MIH_C_LINK_AC_TYPE_LINK_FLOW_ATTR: NO ACTION\n", __FUNCTION__); - - if (ralpriv->mih_supported_action_list & MIH_C_LINK_AC_TYPE_LINK_FLOW_ATTR) { - } else { - link_action_result = MIH_C_LINK_AC_RESULT_INCAPABLE; - ralpriv->pending_req_status = 0; - mRALlte_send_link_action_confirm(&messageP->header.transaction_id, &status, &scan_response_set_list, &link_action_result); - } - - break; - - case MIH_C_LINK_AC_TYPE_LINK_ACTIVATE_RESOURCES: - DEBUG("%s ACTION REQUESTED: MIH_C_LINK_AC_TYPE_LINK_ACTIVATE_RESOURCES: NO ACTION\n", __FUNCTION__); - - if (ralpriv->mih_supported_action_list & MIH_C_LINK_AC_TYPE_LINK_ACTIVATE_RESOURCES) { - } else { - link_action_result = MIH_C_LINK_AC_RESULT_INCAPABLE; - ralpriv->pending_req_status = 0; - mRALlte_send_link_action_confirm(&messageP->header.transaction_id, &status, &scan_response_set_list, &link_action_result); - } - - break; - - case MIH_C_LINK_AC_TYPE_LINK_DEACTIVATE_RESOURCES: - DEBUG("%s ACTION REQUESTED: MIH_C_LINK_AC_TYPE_LINK_DEACTIVATE_RESOURCES: NO ACTION\n", __FUNCTION__); - - if (ralpriv->mih_supported_action_list & MIH_C_LINK_AC_TYPE_LINK_DEACTIVATE_RESOURCES) { - } else { - link_action_result = MIH_C_LINK_AC_RESULT_INCAPABLE; - ralpriv->pending_req_status = 0; - mRALlte_send_link_action_confirm(&messageP->header.transaction_id, &status, &scan_response_set_list, &link_action_result); - } - - break; - - default: - ERR("%s Invalid LinkAction.link_ac_type in MIH_C_Message_Link_Action_request\n", __FUNCTION__); - status = MIH_C_STATUS_UNSPECIFIED_FAILURE; - mRALlte_send_link_action_confirm(&messageP->header.transaction_id, &status, &scan_response_set_list, &link_action_result); - } - } -} - diff --git a/openair3/RAL-LTE/RAL-DUMMY/SRC/mRALlte_get.c b/openair3/RAL-LTE/RAL-DUMMY/SRC/mRALlte_get.c deleted file mode 100755 index 48d41eb692..0000000000 --- a/openair3/RAL-LTE/RAL-DUMMY/SRC/mRALlte_get.c +++ /dev/null @@ -1,56 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ -#define MRAL_MODULE -#define MRALLTE_GET_C -#include "mRALlte_get.h" - -//----------------------------------------------------------------------------- -void MIH_C_3GPP_ADDR_load_3gpp_str_address(MIH_C_3GPP_ADDR_T* _3gpp_addrP, u_int8_t* strP) -//----------------------------------------------------------------------------- -{ - int i, l; - u_int8_t val_temp; - unsigned char address_3gpp[32]; - unsigned char buf[3]; - u_int8_t _3gpp_byte_address[8]; - - strcpy((char *)address_3gpp, (char *)strP); - - for(l=0; l<8; l++) { - i=l*2; - buf[0]= address_3gpp[i]; - buf[1]= address_3gpp[i+1]; - buf[2]= '\0'; - //sscanf((const char *)buf,"%02x", &val_temp); - sscanf((const char *)buf,"%hhx", &val_temp); - _3gpp_byte_address[l] = val_temp; - } - - MIH_C_3GPP_ADDR_set(_3gpp_addrP, _3gpp_byte_address, 8); -} \ No newline at end of file diff --git a/openair3/RAL-LTE/RAL-DUMMY/SRC/mRALlte_main.c b/openair3/RAL-LTE/RAL-DUMMY/SRC/mRALlte_main.c deleted file mode 100755 index 233aacb43b..0000000000 --- a/openair3/RAL-LTE/RAL-DUMMY/SRC/mRALlte_main.c +++ /dev/null @@ -1,447 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ -#define MRAL_MODULE -#define MRALLTE_MAIN_C -//----------------------------------------------------------------------------- -#include "mRALlte_main.h" -#include "mRALlte_constants.h" -#include "mRALlte_variables.h" -#include "mRALlte_proto.h" -#include "mRALlte_mih_msg.h" -#include "nas_ue_netlink.h" -#include "nasUE_config.h" -//----------------------------------------------------------------------------- -#include "MIH_C.h" -//----------------------------------------------------------------------------- - -#define NAS_UE_NETL_MAXLEN 500 -// TO DO -#ifndef SVN_REV -#define SVN_REV "0.1" -#endif -// Global variables -int netl_s, s_nas; -struct sockaddr_un ralu_socket; -int wait_start_mihf; -int listen_mih; -struct ral_lte_priv rl_priv; -struct ral_lte_priv *ralpriv; - - -char message[NAS_UE_NETL_MAXLEN]; -static int g_log_output; -//----------------------------------------------------------------------------- -static void arg_usage(char *exec_nameP) -{ - //----------------------------------------------------------------------------- - fprintf(stderr, - "Usage: %s [options]\nOptions:\n" - " -V, --version Display version information\n" - " -?, -h, --help Display this help text\n" - " -P , --ral-listening-port Listening port for incoming MIH-F messages\n" - " -I , --ral-ip-address Binding IP(v4 or v6) address for RAL\n" - " -p , --mihf-remote-port MIH-F remote port\n" - " -i , --mihf-ip-address MIH-F IP(v4 or v6) address\n" - " -c, --output-to-console All stream outputs are redirected to console\n" - " -f, --output-to-syslog All stream outputs are redirected to file\n" - " -s, --output-to-syslog All stream outputs are redirected to syslog\n", - exec_nameP); -} - -//--------------------------------------------------------------------------- -int parse_opts(int argc, char *argv[]) -{ - //--------------------------------------------------------------------------- - static struct option long_opts[] = { - {"version", 0, 0, 'V'}, - {"help", 0, 0, 'h'}, - {"ral-listening-port", optional_argument, 0, 'P'}, - {"ral-ip-address", optional_argument, 0, 'I'}, - {"mihf-remote-port", optional_argument, 0, 'p'}, - {"mihf-ip-address", optional_argument, 0, 'i'}, - {"link.id", optional_argument, 0, 'l'}, - {"mihf.id", optional_argument, 0, 'm'}, - {"output-to-console", 0, 0, 'c'}, - {"output-to-file", 0, 0, 'f'}, - {"output-to-syslog", 0, 0, 's'}, - {0, 0, 0, 0} - }; - - /* parse all other cmd line parameters than -c */ - while (1) { - int idx, c; - c = getopt_long(argc, argv, "PIpil:Vh?cfs", long_opts, &idx); - - if (c == -1) break; - - switch (c) { - case 'V': - fprintf(stderr, "SVN MODULE VERSION: %s\n", SVN_REV); - return -1; - - case '?': - case 'h': - arg_usage(basename(argv[0])); - return -1; - - case 'i': - fprintf(stderr, "Option mihf-ip-address:\t%s\n", optarg); - g_mihf_ip_address = optarg; - break; - - case 'p': - fprintf(stderr, "Option mihf-remote-port:\t%s\n", optarg); - g_mihf_remote_port = optarg; - break; - - case 'P': - fprintf(stderr, "Option ral-listening-port:\t%s\n", optarg); - g_ral_listening_port_for_mihf = optarg; - break; - - case 'I': - fprintf(stderr, "Option ral-ip-address:\t%s\n", optarg); - g_ral_ip_address = optarg; - break; - - case 'l': - fprintf(stderr, "Option link.id:\t%s\n", optarg); - g_link_id = optarg; - break; - - case 'm': - fprintf(stderr, "Option mihf.id:\t%s\n", optarg); - g_mihf_id = optarg; - break; - - case 'c': - fprintf(stderr, "Option output-to-console\n"); - g_log_output = LOG_TO_CONSOLE; - break; - - case 'f': - fprintf(stderr, "Option output-to-file\n"); - g_log_output = LOG_TO_FILE; - break; - - case 's': - fprintf(stderr, "Option output-to-syslog\n"); - g_log_output = LOG_TO_SYSTEM; - break; - - default: - WARNING("UNKNOWN OPTION\n"); - break; - }; - } - - return 0; -} -//--------------------------------------------------------------------------- -void IAL_D_Netlink_socket_init(void) -{ - //--------------------------------------------------------------------------- - int len; - struct sockaddr_un local; - - if ((netl_s = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) { - perror("IAL_D_Netlink_socket_init : socket command failed, err %d\n"); - exit(1); - } - - local.sun_family = AF_UNIX; - strcpy(local.sun_path, SOCK_NAS_PATH); - unlink(local.sun_path); - len = strlen(local.sun_path) + sizeof(local.sun_family); - - if (bind(netl_s, (struct sockaddr *)&local, len) == -1) { - perror("IAL_D_Netlink_socket_init : bind command failed, \n"); - exit(1); - } - - if (listen(netl_s, 1) == -1) { - perror("IAL_D_Netlink_socket_init : listen command failed, \n"); - exit(1); - } -} -//--------------------------------------------------------------------------- -void mRALlte_get_IPv6_addr(void) -{ - //--------------------------------------------------------------------------- -#define IPV6_ADDR_LINKLOCAL 0x0020U - -#ifdef RAL_DUMMY - char * eth0_name="eth0";/* interface name */ -#endif -#ifdef RAL_REALTIME - char * graal0_name="graal0";/* interface name */ -#endif - - FILE *f; - char devname[20]; - int plen, scope, dad_status, if_idx; - char addr6p[8][5]; - int intf_found = 0; - char my_addr[16]; - char temp_addr[32]; - int i, j; - - if ((f = fopen("/proc/net/if_inet6", "r")) != NULL) { - while (fscanf(f, "%4s%4s%4s%4s%4s%4s%4s%4s %02x %02x %02x %02x %20s\n", - addr6p[0], addr6p[1], addr6p[2], addr6p[3], - addr6p[4], addr6p[5], addr6p[6], addr6p[7], - &if_idx, &plen, &scope, &dad_status, devname) != EOF) { -#ifdef RAL_DUMMY - - if (!strcmp(devname, eth0_name)) { -#endif -#ifdef RAL_REALTIME - - if (!strcmp(devname, graal0_name)) { -#endif - intf_found = 1; - - // retrieve numerical value - if ((scope ==0)||(scope== IPV6_ADDR_LINKLOCAL)) { - DEBUG(" adresse %s:%s:%s:%s:%s:%s:%s:%s", - addr6p[0], addr6p[1], addr6p[2], addr6p[3], - addr6p[4], addr6p[5], addr6p[6], addr6p[7]); - DEBUG(" Scope:"); - - switch (scope) { - case 0: - DEBUG("Global"); - break; - - case IPV6_ADDR_LINKLOCAL: - DEBUG("Link"); - break; - - default: - DEBUG("Unknown"); - } - - DEBUG("\n Numerical value: "); - - for (i = 0; i < 8; i++) { - for (j=0; j<4; j++) { - addr6p[i][j]= toupper(addr6p[i][j]); - - if ((addr6p[i][j] >= 'A') && (addr6p[i][j] <= 'F')) { - temp_addr[(4*i)+j] =(unsigned short int)(addr6p[i][j]-'A')+10; - } else if ((addr6p[i][j] >= '0') && (addr6p[i][j] <= '9')) { - temp_addr[(4*i)+j] =(unsigned short int)(addr6p[i][j]-'0'); - } - } - - my_addr[2*i]= (16*temp_addr[(4*i)])+temp_addr[(4*i)+1]; - my_addr[(2*i)+1]= (16*temp_addr[(4*i)+2])+temp_addr[(4*i)+3]; - - } - - for (i=0; i<16; i++) { - DEBUG("-%hhx-",my_addr[i]); - } - - DEBUG("\n\n"); - } - } - } - - fclose(f); - - if (!intf_found) { - ERR("interface not found\n\n"); - } - } - } - - //--------------------------------------------------------------------------- - int inits(int argc, char *argv[]) { - //--------------------------------------------------------------------------- - MIH_C_TRANSACTION_ID_T transaction_id; - unsigned int t; - struct sockaddr_un nas_socket; - - ralpriv = &rl_priv; - memset(ralpriv, 0, sizeof(struct ral_lte_priv)); - - memset(g_msg_codec_recv_buffer, 0, MSG_CODEC_RECV_BUFFER_SIZE); - // Initialize defaults - g_ral_ip_address = DEFAULT_IP_ADDRESS_RAL; - g_ral_listening_port_for_mihf = DEFAULT_LOCAL_PORT_RAL; - g_mihf_remote_port = DEFAULT_REMOTE_PORT_MIHF; - g_mihf_ip_address = DEFAULT_IP_ADDRESS_MIHF; - g_link_id = DEFAULT_LINK_ID; - g_mihf_id = DEFAULT_MIHF_ID; - g_sockd_mihf = -1; - g_log_output = LOG_TO_CONSOLE; - - MIH_C_init(g_log_output); - - if (parse_opts( argc, argv) < 0) { - exit(0); - } - - - if (mRALlte_mihf_connect() < 0 ) { - ERR("Could not connect to MIH-F...exiting\n"); - exit(-1); - } - - DEBUG("MT-MIHF socket initialized.\n\n"); - - // excluded MIH_C_LINK_AC_TYPE_NONE - // excluded MIH_C_LINK_AC_TYPE_LINK_LOW_POWER - // excluded MIH_C_LINK_AC_TYPE_NONE - ralpriv->mih_supported_action_list = MIH_C_LINK_AC_TYPE_LINK_DISCONNECT | - MIH_C_LINK_AC_TYPE_LINK_POWER_DOWN | - MIH_C_LINK_AC_TYPE_LINK_POWER_UP | - MIH_C_LINK_AC_TYPE_LINK_FLOW_ATTR | - MIH_C_LINK_AC_TYPE_LINK_ACTIVATE_RESOURCES | - MIH_C_LINK_AC_TYPE_LINK_DEACTIVATE_RESOURCES; - - - - ralpriv->mih_supported_link_event_list = MIH_C_BIT_LINK_DETECTED | - MIH_C_BIT_LINK_UP | - MIH_C_BIT_LINK_DOWN | - MIH_C_BIT_LINK_PARAMETERS_REPORT | - MIH_C_BIT_LINK_GOING_DOWN | - MIH_C_BIT_LINK_HANDOVER_IMMINENT | - MIH_C_BIT_LINK_HANDOVER_COMPLETE | - MIH_C_BIT_LINK_PDU_TRANSMIT_STATUS; - - ralpriv->mih_supported_link_command_list = MIH_C_BIT_LINK_EVENT_SUBSCRIBE | MIH_C_BIT_LINK_EVENT_UNSUBSCRIBE | \ - MIH_C_BIT_LINK_GET_PARAMETERS | MIH_C_BIT_LINK_CONFIGURE_THRESHOLDS | \ - MIH_C_BIT_LINK_ACTION; - - ralpriv->link_to_be_detected = MIH_C_BOOLEAN_TRUE; - - NOTICE("[MSC_NEW][%s][MIH-F=%s]\n", getTimeStamp4Log(), g_mihf_id); - NOTICE("[MSC_NEW][%s][RAL=%s]\n", getTimeStamp4Log(), g_link_id); - NOTICE("[MSC_NEW][%s][NAS=%s]\n", getTimeStamp4Log(), "nas"); - - IAL_D_Netlink_socket_init(); - DEBUG("Waiting for a connection from NAS Driver ...\n"); - t = sizeof(nas_socket); - - if ((s_nas = accept(netl_s, (struct sockaddr *)&nas_socket, &t)) == -1) { - perror("main - s_nas - accept "); - exit(1); - } - - DEBUG("NAS Driver Connected.\n\n"); - - - // get interface ipv6 address - mRALlte_get_IPv6_addr(); - // get L2 identifier - IAL_process_DNAS_message(IO_OBJ_IMEI, IO_CMD_ADD, 0); - - IAL_decode_NAS_message(); - - // Initialize measurements - IAL_NAS_measures_init(); - ralpriv->state = DISCONNECTED; - - IAL_process_DNAS_message(IO_OBJ_MEAS, IO_CMD_LIST, ralpriv->cell_id); - IAL_decode_NAS_message(); - - - transaction_id = (MIH_C_TRANSACTION_ID_T)0; - mRALlte_send_link_register_indication(&transaction_id); - - return 0; - } - - //--------------------------------------------------------------------------- - int main(int argc, char *argv[]) { - //--------------------------------------------------------------------------- - int rc, done; - int meas_polling_counter; - fd_set readfds; - struct timeval tv; - - inits(argc, argv); - - done = 0; - ralpriv->pending_req_flag = 0; - meas_polling_counter = 1; - - do { - // Create fd_set and wait for input; - FD_ZERO(&readfds); - FD_SET(g_sockd_mihf, &readfds); - FD_SET (s_nas, &readfds); - tv.tv_sec = MIH_C_RADIO_POLLING_INTERVAL_SECONDS; - tv.tv_usec = MIH_C_RADIO_POLLING_INTERVAL_MICRO_SECONDS; - - rc= select(FD_SETSIZE, &readfds, NULL, NULL, &tv); - - if(rc == -1) { - perror("select"); - done = 1; - } - - //something received! - if(rc >= 0) { - if(FD_ISSET(g_sockd_mihf, &readfds)) { - done=mRALlte_mih_link_process_message(); - } /*else { // tick - - mRALlte_mih_fsm(NULL, 0); - }*/ - - if (FD_ISSET(s_nas,&readfds)) { - //printf("\n something received s_nas\n"); - done = IAL_decode_NAS_message(); - } - - //get measures from NAS - timer = 21x100ms -- impair - // if (meas_polling_counter ++ == 51){ - if (meas_polling_counter ++ == 51) { - IAL_NAS_measures_update(meas_polling_counter); - rallte_NAS_measures_polling(); - meas_polling_counter =1; - } - - if (ralpriv->pending_req_flag > 0) { //wait until next time - ralpriv->pending_req_flag ++; - rallte_verifyPendingConnection(); - } - - } - } while(!done); - - close(g_sockd_mihf); - close(netl_s); - MIH_C_exit(); - return 0; - } diff --git a/openair3/RAL-LTE/RAL-DUMMY/SRC/mRALlte_mih_msg.c b/openair3/RAL-LTE/RAL-DUMMY/SRC/mRALlte_mih_msg.c deleted file mode 100755 index 27e3cca97f..0000000000 --- a/openair3/RAL-LTE/RAL-DUMMY/SRC/mRALlte_mih_msg.c +++ /dev/null @@ -1,1434 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ -#define MRAL_MODULE -#define MRALLTE_MIH_MSG_C -//----------------------------------------------------------------------------- -#include "mRALlte_mih_msg.h" -#include "mRALlte_subscribe.h" -#include "mRALlte_variables.h" -#include "mRALlte_parameters.h" -#include "mRALlte_thresholds.h" -#include "mRALlte_action.h" -//----------------------------------------------------------------------------- - -static char g_msg_codec_tmp_print_buffer[8192]; -#ifdef MSCGEN_PYTOOL -#define MSC_GEN_BUF_SIZE 1024 -// global instead of poisonning the stack -static char g_msc_gen_buf[MSC_GEN_BUF_SIZE]; -static unsigned int g_msc_gen_buffer_index; -#endif - - -//----------------------------------------------------------------------------- -int mRALlte_send_to_mih(u_int8_t *bufferP, size_t lenP) -{ - //----------------------------------------------------------------------------- - int result; - mRALlte_print_buffer((char*)bufferP, lenP); - result = send(g_sockd_mihf, (const void *)bufferP, lenP, 0); - - if (result != lenP) { - ERR("send_to_mih %d bytes failed, returned %d: %s\n", lenP, result, strerror(errno)); - } - - return result; -} -//----------------------------------------------------------------------------- -// Print the content of a buffer in hexadecimal -void mRALlte_print_buffer(char * bufferP, int lengthP) -{ - //----------------------------------------------------------------------------- - char c; - unsigned int buffer_index = 0; - unsigned int index; - unsigned int octet_index = 0; - unsigned long char_index = 0; - - if (bufferP == NULL) { - return; - } - - - buffer_index += sprintf(&g_msg_codec_tmp_print_buffer[buffer_index], "\n------+-------------------------------------------------+------------------+\n"); - buffer_index += sprintf(&g_msg_codec_tmp_print_buffer[buffer_index], " | 0 1 2 3 4 5 6 7 8 9 a b c d e f | 0123456789abcdef |\n"); - buffer_index += sprintf(&g_msg_codec_tmp_print_buffer[buffer_index], "------+-------------------------------------------------+------------------+\n"); - - for (octet_index = 0; octet_index < lengthP; octet_index++) { - if ((octet_index % 16) == 0) { - if (octet_index != 0) { - buffer_index += sprintf(&g_msg_codec_tmp_print_buffer[buffer_index], " | "); - - for (char_index = octet_index - 16; char_index < octet_index; char_index++) { - c = (char) bufferP[char_index] & 0177; - - if (iscntrl(c) || isspace(c)) { - buffer_index += sprintf(&g_msg_codec_tmp_print_buffer[buffer_index], " "); - } else { - buffer_index += sprintf(&g_msg_codec_tmp_print_buffer[buffer_index], "%c", c); - } - } - - buffer_index += sprintf(&g_msg_codec_tmp_print_buffer[buffer_index], " |\n"); - } - - buffer_index += sprintf(&g_msg_codec_tmp_print_buffer[buffer_index], " %04d |", octet_index); - } - - /* - * Print every single octet in hexadecimal form - */ - buffer_index += sprintf(&g_msg_codec_tmp_print_buffer[buffer_index], " %02x", (u_int8_t)(bufferP[octet_index] & 0x00FF)); - /* - * Align newline and pipes according to the octets in groups of 2 - */ - } - - /* - * Append enough spaces and put final pipe - */ - if ((lengthP % 16) > 0) { - for (index = (octet_index % 16); index < 16; ++index) { - buffer_index += sprintf(&g_msg_codec_tmp_print_buffer[buffer_index], " "); - } - } - - buffer_index += sprintf(&g_msg_codec_tmp_print_buffer[buffer_index], " | "); - - for (char_index = (octet_index / 16) * 16; char_index < octet_index; char_index++) { - c = (char) bufferP[char_index] & 0177; - - if (iscntrl(c) || isspace(c)) { - buffer_index += sprintf(&g_msg_codec_tmp_print_buffer[buffer_index], " "); - } else { - buffer_index += sprintf(&g_msg_codec_tmp_print_buffer[buffer_index], "%c", c); - } - } - - if ((lengthP % 16) > 0) { - for (index = (octet_index % 16); index < 16; ++index) { - buffer_index += sprintf(&g_msg_codec_tmp_print_buffer[buffer_index], " "); - } - } - - buffer_index += sprintf(&g_msg_codec_tmp_print_buffer[buffer_index], " |\n"); - buffer_index += sprintf(&g_msg_codec_tmp_print_buffer[buffer_index], "------+-------------------------------------------------+------------------+\n"); - DEBUG(g_msg_codec_tmp_print_buffer); -} -//--------------------------------------------------------------------------- -int mRALlte_mihf_connect(void) -{ - //--------------------------------------------------------------------------- - struct addrinfo hints; - struct addrinfo *result, *rp; - int s, on; - struct sockaddr_in *addr = NULL; - struct sockaddr_in6 *addr6 = NULL; - unsigned char buf[sizeof(struct sockaddr_in6)]; - - - memset(&hints, 0, sizeof(struct addrinfo)); - hints.ai_family = AF_UNSPEC; /* Allow IPv4 or IPv6 */ - hints.ai_socktype = SOCK_DGRAM; /* Datagram socket */ - hints.ai_flags = 0; - hints.ai_protocol = 0; /* Any protocol */ - - s = getaddrinfo(g_mihf_ip_address, g_mihf_remote_port, &hints, &result); - - if (s != 0) { - ERR(" getaddrinfo: %s\n", gai_strerror(s)); - freeaddrinfo(result); - return -1; - } - - /* getaddrinfo() returns a list of address structures. - Try each address until we successfully connect(2). - If socket(2) (or connect(2)) fails, we (close the socket - and) try the next address. */ - - for (rp = result; rp != NULL; rp = rp->ai_next) { - g_sockd_mihf = socket(rp->ai_family, rp->ai_socktype, rp->ai_protocol); - - if (g_sockd_mihf == -1) - continue; - - on = 1; - setsockopt( g_sockd_mihf, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on)); - - if(rp->ai_family == AF_INET) { - DEBUG(" %s is an ipv4 address\n",g_mihf_ip_address); - addr = (struct sockaddr_in *)(&buf[0]); - addr->sin_port = htons(atoi(g_ral_listening_port_for_mihf)); - addr->sin_family = AF_INET; - s = inet_pton(AF_INET, g_ral_ip_address, &addr->sin_addr); - - if (s <= 0) { - if (s == 0) { - ERR(" IP RAL address should be a IPv4 ADDR - But found not in presentation format : %s\n", g_ral_ip_address); - } else { - ERR(" %s - inet_pton(RAL IPv4 ADDR %s): %s\n", __FUNCTION__, g_ral_ip_address, strerror(s)); - } - - return -1; - } - - s = bind(g_sockd_mihf, (const struct sockaddr *)addr, sizeof(struct sockaddr_in)); - - if (s == -1) { - ERR(" RAL IPv4 Address Bind: %s\n", strerror(errno)); - return -1; - } - - // sockd_mihf is of type SOCK_DGRAM, rp->ai_addr is the address to which datagrams are sent by default - if (connect(g_sockd_mihf, rp->ai_addr, rp->ai_addrlen) != -1) { - NOTICE(" RAL is now UDP-CONNECTED to MIH-F\n"); - freeaddrinfo(result); - return 0; - } else { - close(g_sockd_mihf); - } - } else if (rp->ai_family == AF_INET6) { - DEBUG(" %s is an ipv6 address\n",g_mihf_ip_address); - addr6 = (struct sockaddr_in6 *)(&buf[0]); - addr6->sin6_port = htons(atoi(g_ral_listening_port_for_mihf)); - addr6->sin6_family = AF_INET6; - s = inet_pton(AF_INET, g_ral_ip_address, &addr6->sin6_addr); - - if (s <= 0) { - if (s == 0) { - ERR(" IP RAL address should be a IPv6 ADDR, But found not in presentation format : %s\n", g_ral_ip_address); - } else { - ERR(" %s - inet_pton(RAL IPv6 ADDR %s): %s\n", __FUNCTION__, g_ral_ip_address, strerror(s)); - } - - return -1; - } - - s = bind(g_sockd_mihf, (const struct sockaddr *)addr6, sizeof(struct sockaddr_in)); - - if (s == -1) { - ERR(" RAL IPv6 Address Bind: %s\n", strerror(errno)); - return -1; - } - - if (connect(g_sockd_mihf, rp->ai_addr, rp->ai_addrlen) != -1) { - NOTICE(" RAL is now UDP-CONNECTED to MIH-F\n"); - freeaddrinfo(result); - return 0; - } else { - close(g_sockd_mihf); - } - } else { - ERR(" %s is an unknown address format %d\n",g_mihf_ip_address,rp->ai_family); - } - - close(g_sockd_mihf); - } - - if (rp == NULL) { /* No address succeeded */ - ERR(" Could not connect to MIH-F\n"); - return -1; - } - - return -1; -} -//----------------------------------------------------------------------------- -void mRALlte_send_link_register_indication(MIH_C_TRANSACTION_ID_T *transaction_idP) -{ - //----------------------------------------------------------------------------- - MIH_C_Message_Link_Register_indication_t message; - Bit_Buffer_t *bb; - int message_total_length; - - bb = new_BitBuffer_0(); - BitBuffer_wrap(bb, g_msg_codec_send_buffer, (unsigned int)MSG_CODEC_SEND_BUFFER_SIZE); - - memset(&message, 0, sizeof (MIH_C_Message_Link_Register_indication_t)); - - message.header.version = (MIH_C_VERSION_T)MIH_C_PROTOCOL_VERSION; - //message.header.ack_req = 0; - //message.header.ack_rsp = 0; - //message.header.uir = 0; - //message.header.more_fragment = 0 - //message.header.fragment_number = 0; - message.header.service_identifier = (MIH_C_SID_T)1; - message.header.operation_code = (MIH_C_OPCODE_T)3; - message.header.action_identifier = (MIH_C_AID_T)6; - message.header.transaction_id = *transaction_idP; - - - MIH_C_MIHF_ID_set(&message.source, (u_int8_t*)g_link_id, strlen(g_link_id)); - - MIH_C_MIHF_ID_set(&message.destination, (u_int8_t*)g_mihf_id, strlen(g_mihf_id)); - - - message.primitive.Link_Id.link_type = MIH_C_WIRELESS_UMTS; - message.primitive.Link_Id.link_addr.choice = (MIH_C_CHOICE_T)MIH_C_CHOICE_3GPP_ADDR; - - MIH_C_3GPP_ADDR_set(&message.primitive.Link_Id.link_addr._union._3gpp_addr, (u_int8_t*)DEFAULT_ADDRESS_3GPP, strlen(DEFAULT_ADDRESS_3GPP)); - //MIH_C_3GPP_ADDR_load_3gpp_str_address(&message.primitive.Link_Id.link_addr._union._3gpp_addr, (u_int8_t*)DEFAULT_ADDRESS_3GPP); - - message_total_length = MIH_C_Link_Message_Encode_Link_Register_indication(bb, &message); - -#ifdef MSCGEN_PYTOOL - memset(g_msc_gen_buf, 0, MSC_GEN_BUF_SIZE); - g_msc_gen_buffer_index = 0; - MIH_C_LINK_ID2String(&message.primitive.Link_Id, g_msc_gen_buf); -#endif - - if (mRALlte_send_to_mih(bb->m_buffer,message_total_length)<0) { - ERR(": Send Link_Register.indication\n"); -#ifdef MSCGEN_PYTOOL - NOTICE("[MSC_MSG][%s][%s][--- Link_Register.indication\\n%s ---x][%s]\n", - getTimeStamp4Log(), - g_link_id, - g_msc_gen_buf, - g_mihf_id); -#endif - } else { - DEBUG(": Sent Link_Register.indication\n"); -#ifdef MSCGEN_PYTOOL - NOTICE("[MSC_MSG][%s][%s][--- Link_Register.indication\\n%s --->][%s]\n", - getTimeStamp4Log(), - g_link_id, - g_msc_gen_buf, - g_mihf_id); -#endif - } - - free_BitBuffer(bb); -} -//----------------------------------------------------------------------------- -void mRALlte_send_link_detected_indication(MIH_C_TRANSACTION_ID_T *transaction_idP, MIH_C_LINK_DET_INFO_T *link_detected_infoP) -{ - //----------------------------------------------------------------------------- - MIH_C_Message_Link_Detected_indication_t message; - Bit_Buffer_t *bb; - int message_total_length; - - bb = new_BitBuffer_0(); - BitBuffer_wrap(bb, g_msg_codec_send_buffer, (unsigned int)MSG_CODEC_SEND_BUFFER_SIZE); - - memset(&message, 0, sizeof (MIH_C_Message_Link_Detected_indication_t)); - - message.header.version = (MIH_C_VERSION_T)MIH_C_PROTOCOL_VERSION; - //message.header.ack_req = 0; - //message.header.ack_rsp = 0; - //message.header.uir = 0; - //message.header.more_fragment = 0 - //message.header.fragment_number = 0; - message.header.service_identifier = (MIH_C_SID_T)2; - message.header.operation_code = (MIH_C_OPCODE_T)3; - message.header.action_identifier = (MIH_C_AID_T)1; - message.header.transaction_id = *transaction_idP; - - - MIH_C_MIHF_ID_set(&message.source, (u_int8_t*)g_link_id, strlen(g_link_id)); - - MIH_C_MIHF_ID_set(&message.destination, (u_int8_t*)g_mihf_id, strlen(g_mihf_id)); - - - memcpy(&message.primitive.LinkDetectedInfo, link_detected_infoP, sizeof(MIH_C_LINK_DET_INFO_T)); - - message_total_length = MIH_C_Link_Message_Encode_Link_Detected_indication(bb, &message); - - if (mRALlte_send_to_mih(bb->m_buffer,message_total_length)<0) { - ERR(": Send Link_Detected.indication\n"); -#ifdef MSCGEN_PYTOOL - g_msc_gen_buffer_index = 0; - memset(g_msc_gen_buf, 0, MSC_GEN_BUF_SIZE); - g_msc_gen_buffer_index = MIH_C_SIG_STRENGTH2String(&link_detected_infoP->sig_strength, &g_msc_gen_buf[g_msc_gen_buffer_index]); - g_msc_gen_buffer_index = sprintf(&g_msc_gen_buf[g_msc_gen_buffer_index], "\\nSINR %d\\nData rate %d", link_detected_infoP->sinr, link_detected_infoP->link_data_rate); - NOTICE("[MSC_MSG][%s][%s][--- Link_Detected.indication\\n%s ---x][%s]\n", - getTimeStamp4Log(), - g_link_id, - g_msc_gen_buf, - g_mihf_id); -#endif - } else { - DEBUG(": Sent Link_Detected.indication\n"); -#ifdef MSCGEN_PYTOOL - g_msc_gen_buffer_index = 0; - memset(g_msc_gen_buf, 0, MSC_GEN_BUF_SIZE); - g_msc_gen_buffer_index = MIH_C_SIG_STRENGTH2String(&link_detected_infoP->sig_strength, &g_msc_gen_buf[g_msc_gen_buffer_index]); - g_msc_gen_buffer_index = sprintf(&g_msc_gen_buf[g_msc_gen_buffer_index], "\\nSINR %d\\nData rate %d", link_detected_infoP->sinr, link_detected_infoP->link_data_rate); - - NOTICE("[MSC_MSG][%s][%s][--- Link_Detected.indication\\n%s --->][%s]\n", - getTimeStamp4Log(), - g_link_id, - g_msc_gen_buf, - g_mihf_id); -#endif - } - - free_BitBuffer(bb); -} -//----------------------------------------------------------------------------- -void mRALlte_send_link_up_indication(MIH_C_TRANSACTION_ID_T *transaction_idP, - MIH_C_LINK_TUPLE_ID_T *link_identifierP, - MIH_C_LINK_ADDR_T *old_access_routerP, - MIH_C_LINK_ADDR_T *new_access_routerP, - MIH_C_IP_RENEWAL_FLAG_T *ip_renewal_flagP, - MIH_C_IP_MOB_MGMT_T *mobility_management_supportP) -{ - //----------------------------------------------------------------------------- - MIH_C_Message_Link_Up_indication_t message; - Bit_Buffer_t *bb; - int message_total_length; - - bb = new_BitBuffer_0(); - BitBuffer_wrap(bb, g_msg_codec_send_buffer, (unsigned int)MSG_CODEC_SEND_BUFFER_SIZE); - - memset(&message, 0, sizeof (MIH_C_Message_Link_Up_indication_t)); - - message.header.version = (MIH_C_VERSION_T)MIH_C_PROTOCOL_VERSION; - //message.header.ack_req = 0; - //message.header.ack_rsp = 0; - //message.header.uir = 0; - //message.header.more_fragment = 0 - //message.header.fragment_number = 0; - message.header.service_identifier = (MIH_C_SID_T)2; - message.header.operation_code = (MIH_C_OPCODE_T)3; - message.header.action_identifier = (MIH_C_AID_T)2; - message.header.transaction_id = *transaction_idP; - - - MIH_C_MIHF_ID_set(&message.source, (u_int8_t*)g_link_id, strlen(g_link_id)); - - MIH_C_MIHF_ID_set(&message.destination, (u_int8_t*)g_mihf_id, strlen(g_mihf_id)); - - - memcpy(&message.primitive.LinkIdentifier, link_identifierP, sizeof(MIH_C_LINK_TUPLE_ID_T)); - - message.primitive.OldAccessRouter = old_access_routerP; - message.primitive.NewAccessRouter = new_access_routerP; - message.primitive.IPRenewalFlag = ip_renewal_flagP; - message.primitive.MobilityManagementSupport = mobility_management_supportP; - - message_total_length = MIH_C_Link_Message_Encode_Link_Up_indication(bb, &message); - - if (mRALlte_send_to_mih(bb->m_buffer,message_total_length)<0) { - ERR(": Send Link_Up.indication\n"); -#ifdef MSCGEN_PYTOOL - NOTICE("[MSC_MSG][%s][%s][--- Link_Up.indication ---x][%s]\n", - getTimeStamp4Log(), - g_link_id, - g_mihf_id); -#endif - } else { - DEBUG(": Sent Link_Up.indication\n"); -#ifdef MSCGEN_PYTOOL - NOTICE("[MSC_MSG][%s][%s][--- Link_Up.indication --->][%s]\n", - getTimeStamp4Log(), - g_link_id, - g_mihf_id); -#endif - } - - free_BitBuffer(bb); -} -//----------------------------------------------------------------------------- -void mRALlte_send_link_parameters_report_indication(MIH_C_TRANSACTION_ID_T *transaction_idP, - MIH_C_LINK_TUPLE_ID_T *link_identifierP, - MIH_C_LINK_PARAM_RPT_LIST_T *link_parameters_report_listP) -{ - //----------------------------------------------------------------------------- - MIH_C_Message_Link_Parameters_Report_indication_t message; - Bit_Buffer_t *bb; - int message_total_length; -#ifdef MSCGEN_PYTOOL - unsigned int index; -#endif - - bb = new_BitBuffer_0(); - BitBuffer_wrap(bb, g_msg_codec_send_buffer, (unsigned int)MSG_CODEC_SEND_BUFFER_SIZE); - - memset(&message, 0, sizeof (MIH_C_Message_Link_Parameters_Report_indication_t)); - - message.header.version = (MIH_C_VERSION_T)MIH_C_PROTOCOL_VERSION; - //message.header.ack_req = 0; - //message.header.ack_rsp = 0; - //message.header.uir = 0; - //message.header.more_fragment = 0 - //message.header.fragment_number = 0; - message.header.service_identifier = (MIH_C_SID_T)2; - message.header.operation_code = (MIH_C_OPCODE_T)3; - message.header.action_identifier = (MIH_C_AID_T)5; - message.header.transaction_id = *transaction_idP; - - - MIH_C_MIHF_ID_set(&message.source, (u_int8_t*)g_link_id, strlen(g_link_id)); - - MIH_C_MIHF_ID_set(&message.destination, (u_int8_t*)g_mihf_id, strlen(g_mihf_id)); - - - memcpy(&message.primitive.LinkIdentifier, link_identifierP, sizeof(MIH_C_LINK_TUPLE_ID_T)); - memcpy(&message.primitive.LinkParametersReportList_list, link_parameters_report_listP, sizeof(MIH_C_LINK_PARAM_RPT_LIST_T)); - - message_total_length = MIH_C_Link_Message_Encode_Link_Parameters_Report_indication(bb, &message); - - if (mRALlte_send_to_mih(bb->m_buffer,message_total_length)<0) { - ERR(": Send Link_Parameters_Report.indication\n"); -#ifdef MSCGEN_PYTOOL - NOTICE("[MSC_MSG][%s][%s][--- Link_Parameters_Report.indication ---x][%s]\n", - getTimeStamp4Log(), - g_link_id, - g_mihf_id); -#endif - } else { - DEBUG(": Sent Link_Parameters_Report.indication\n"); -#ifdef MSCGEN_PYTOOL - g_msc_gen_buffer_index = 0; - memset(g_msc_gen_buf, 0, MSC_GEN_BUF_SIZE); - g_msc_gen_buffer_index += MIH_C_LINK_ID2String(&link_identifierP->link_id, &g_msc_gen_buf[g_msc_gen_buffer_index]); - - for (index = 0; index < link_parameters_report_listP->length; index++) { - g_msc_gen_buffer_index += sprintf(&g_msc_gen_buf[g_msc_gen_buffer_index], "\\n"); - g_msc_gen_buffer_index += MIH_C_LINK_PARAM_RPT2String(&link_parameters_report_listP->val[index], &g_msc_gen_buf[g_msc_gen_buffer_index]); - } - - NOTICE("[MSC_MSG][%s][%s][--- Link_Parameters_Report.indication\\n%s --->][%s]\n", - getTimeStamp4Log(), - g_link_id, - g_msc_gen_buf, - g_mihf_id); -#endif - } - - free_BitBuffer(bb); -} -//----------------------------------------------------------------------------- -void mRALlte_send_link_going_down_indication(MIH_C_TRANSACTION_ID_T *transaction_idP, - MIH_C_LINK_TUPLE_ID_T *link_identifierP, - MIH_C_UNSIGNED_INT2_T *time_intervalP, - MIH_C_LINK_GD_REASON_T *link_going_down_reasonP) -{ - //----------------------------------------------------------------------------- - MIH_C_Message_Link_Going_Down_indication_t message; - Bit_Buffer_t *bb; - int message_total_length; - - bb = new_BitBuffer_0(); - BitBuffer_wrap(bb, g_msg_codec_send_buffer, (unsigned int)MSG_CODEC_SEND_BUFFER_SIZE); - - memset(&message, 0, sizeof (MIH_C_Message_Link_Going_Down_indication_t)); - - message.header.version = (MIH_C_VERSION_T)MIH_C_PROTOCOL_VERSION; - //message.header.ack_req = 0; - //message.header.ack_rsp = 0; - //message.header.uir = 0; - //message.header.more_fragment = 0 - //message.header.fragment_number = 0; - message.header.service_identifier = (MIH_C_SID_T)2; - message.header.operation_code = (MIH_C_OPCODE_T)3; - message.header.action_identifier = (MIH_C_AID_T)6; - message.header.transaction_id = *transaction_idP; - - - MIH_C_MIHF_ID_set(&message.source, (u_int8_t*)g_link_id, strlen(g_link_id)); - - MIH_C_MIHF_ID_set(&message.destination, (u_int8_t*)g_mihf_id, strlen(g_mihf_id)); - - - memcpy(&message.primitive.LinkIdentifier, link_identifierP, sizeof(MIH_C_LINK_TUPLE_ID_T)); - message.primitive.TimeInterval = *time_intervalP; - memcpy(&message.primitive.LinkGoingDownReason, link_going_down_reasonP, sizeof(MIH_C_LINK_GD_REASON_T)); - - - message_total_length = MIH_C_Link_Message_Encode_Link_Going_Down_indication(bb, &message); - - if (mRALlte_send_to_mih(bb->m_buffer,message_total_length)<0) { - ERR(": Send Link_Going_Down.indication\n"); -#ifdef MSCGEN_PYTOOL - NOTICE("[MSC_MSG][%s][%s][--- Link_Going_Down.indication ---x][%s]\n", - getTimeStamp4Log(), - g_link_id, - g_mihf_id); -#endif - } else { - DEBUG(": Sent Link_Going_Down.indication\n"); -#ifdef MSCGEN_PYTOOL - NOTICE("[MSC_MSG][%s][%s][--- Link_Going_Down.indication --->][%s]\n", - getTimeStamp4Log(), - g_link_id, - g_mihf_id); -#endif - } - - free_BitBuffer(bb); -} -//----------------------------------------------------------------------------- -void mRALlte_send_link_down_indication(MIH_C_TRANSACTION_ID_T *transaction_idP, - MIH_C_LINK_TUPLE_ID_T *link_identifierP, - MIH_C_LINK_ADDR_T *old_access_routerP, - MIH_C_LINK_DN_REASON_T *reason_codeP) -{ - //----------------------------------------------------------------------------- - MIH_C_Message_Link_Down_indication_t message; - Bit_Buffer_t *bb; - int message_total_length; - - bb = new_BitBuffer_0(); - BitBuffer_wrap(bb, g_msg_codec_send_buffer, (unsigned int)MSG_CODEC_SEND_BUFFER_SIZE); - - memset(&message, 0, sizeof (MIH_C_Message_Link_Going_Down_indication_t)); - - message.header.version = (MIH_C_VERSION_T)MIH_C_PROTOCOL_VERSION; - //message.header.ack_req = 0; - //message.header.ack_rsp = 0; - //message.header.uir = 0; - //message.header.more_fragment = 0 - //message.header.fragment_number = 0; - message.header.service_identifier = (MIH_C_SID_T)2; - message.header.operation_code = (MIH_C_OPCODE_T)3; - message.header.action_identifier = (MIH_C_AID_T)3; - message.header.transaction_id = *transaction_idP; - - - MIH_C_MIHF_ID_set(&message.source, (u_int8_t*)g_link_id, strlen(g_link_id)); - - MIH_C_MIHF_ID_set(&message.destination, (u_int8_t*)g_mihf_id, strlen(g_mihf_id)); - - - memcpy(&message.primitive.LinkIdentifier, link_identifierP, sizeof(MIH_C_LINK_TUPLE_ID_T)); - message.primitive.OldAccessRouter = old_access_routerP; - memcpy(&message.primitive.ReasonCode, reason_codeP, sizeof(MIH_C_LINK_DN_REASON_T)); - - - message_total_length = MIH_C_Link_Message_Encode_Link_Down_indication(bb, &message); - - if (mRALlte_send_to_mih(bb->m_buffer,message_total_length)<0) { - ERR(": Send Link_Down.indication\n"); -#ifdef MSCGEN_PYTOOL - NOTICE("[MSC_MSG][%s][%s][--- Link_Down.indication ---x][%s]\n", - getTimeStamp4Log(), - g_link_id, - g_mihf_id); -#endif - } else { - DEBUG(": Sent Link_Down.indication\n"); -#ifdef MSCGEN_PYTOOL - NOTICE("[MSC_MSG][%s][%s][--- Link_Down.indication --->][%s]\n", - getTimeStamp4Log(), - g_link_id, - g_mihf_id); -#endif - } - - free_BitBuffer(bb); -} -//----------------------------------------------------------------------------- -void mRALlte_send_link_action_confirm(MIH_C_TRANSACTION_ID_T *transaction_idP, - MIH_C_STATUS_T *statusP, - MIH_C_LINK_SCAN_RSP_LIST_T *scan_response_setP, - MIH_C_LINK_AC_RESULT_T *link_action_resultP) -{ - //----------------------------------------------------------------------------- - MIH_C_Message_Link_Action_confirm_t message; - Bit_Buffer_t *bb; - int message_total_length; -#ifdef MSCGEN_PYTOOL - unsigned int index; -#endif - - bb = new_BitBuffer_0(); - BitBuffer_wrap(bb, g_msg_codec_send_buffer, (unsigned int)MSG_CODEC_SEND_BUFFER_SIZE); - - memset(&message, 0, sizeof (MIH_C_Message_Link_Action_confirm_t)); - - message.header.version = (MIH_C_VERSION_T)MIH_C_PROTOCOL_VERSION; - //message.header.ack_req = 0; - //message.header.ack_rsp = 0; - //message.header.uir = 0; - //message.header.more_fragment = 0 - //message.header.fragment_number = 0; - message.header.service_identifier = (MIH_C_SID_T)3; - message.header.operation_code = (MIH_C_OPCODE_T)0; - message.header.action_identifier = (MIH_C_AID_T)3; - message.header.transaction_id = *transaction_idP; - - - MIH_C_MIHF_ID_set(&message.source, (u_int8_t*)g_link_id, strlen(g_link_id)); - - MIH_C_MIHF_ID_set(&message.destination, (u_int8_t*)g_mihf_id, strlen(g_mihf_id)); - - - message.primitive.Status = *statusP; - message.primitive.ScanResponseSet_list = scan_response_setP; - message.primitive.LinkActionResult = link_action_resultP; - - - message_total_length = MIH_C_Link_Message_Encode_Link_Action_confirm(bb, &message); - -#ifdef MSCGEN_PYTOOL - memset(g_msc_gen_buf, 0, MSC_GEN_BUF_SIZE); - g_msc_gen_buffer_index = 0; - g_msc_gen_buffer_index += MIH_C_STATUS2String(&message.primitive.Status, &g_msc_gen_buf[g_msc_gen_buffer_index]); - - if (scan_response_setP) { - for (index = 0; index < scan_response_setP->length; index++) { - g_msc_gen_buffer_index += sprintf(&g_msc_gen_buf[g_msc_gen_buffer_index], "\\nScan resp:"); - g_msc_gen_buffer_index += MIH_C_LINK_SCAN_RSP2String(&scan_response_setP->val[index], &g_msc_gen_buf[g_msc_gen_buffer_index]); - } - } - - if (link_action_resultP) { - g_msc_gen_buffer_index += sprintf(&g_msc_gen_buf[g_msc_gen_buffer_index], "\\nAction result:"); - g_msc_gen_buffer_index += MIH_C_LINK_AC_RESULT2String2(link_action_resultP, &g_msc_gen_buf[g_msc_gen_buffer_index]); - } - -#endif - - if (mRALlte_send_to_mih(bb->m_buffer,message_total_length)<0) { - ERR(": Send Link_Action.confirm\n"); -#ifdef MSCGEN_PYTOOL - NOTICE("[MSC_MSG][%s][%s][--- Link_Action.confirm\\nstatus=%s ---x][%s]\n", - getTimeStamp4Log(), - g_link_id, - g_msc_gen_buf, - g_mihf_id); -#endif - } else { - DEBUG(": Sent Link_Action.confirm\n"); -#ifdef MSCGEN_PYTOOL - NOTICE("[MSC_MSG][%s][%s][--- Link_Action.confirm\\nstatus=%s --->][%s]\n", - getTimeStamp4Log(), - g_link_id, - g_msc_gen_buf, - g_mihf_id); -#endif - } - - free_BitBuffer(bb); -} - -//----------------------------------------------------------------------------- -void mRALte_send_capability_discover_confirm(MIH_C_TRANSACTION_ID_T *transaction_idP, - MIH_C_STATUS_T *statusP, - MIH_C_LINK_EVENT_LIST_T *supported_link_event_listP, - MIH_C_LINK_CMD_LIST_T *supported_link_command_listP) -{ - //----------------------------------------------------------------------------- - MIH_C_Message_Link_Capability_Discover_confirm_t message; - Bit_Buffer_t *bb; - int message_total_length; - - bb = new_BitBuffer_0(); - BitBuffer_wrap(bb, g_msg_codec_send_buffer, (unsigned int)MSG_CODEC_SEND_BUFFER_SIZE); - - memset(&message, 0, sizeof (MIH_C_Message_Link_Capability_Discover_confirm_t)); - - message.header.version = (MIH_C_VERSION_T)MIH_C_PROTOCOL_VERSION; - //message.header.ack_req = 0; - //message.header.ack_rsp = 0; - //message.header.uir = 0; - //message.header.more_fragment = 0 - //message.header.fragment_number = 0; - message.header.service_identifier = (MIH_C_SID_T)1; - message.header.operation_code = (MIH_C_OPCODE_T)0; - message.header.action_identifier = (MIH_C_AID_T)1; - message.header.transaction_id = *transaction_idP; - - - MIH_C_MIHF_ID_set(&message.source, (u_int8_t*)g_link_id, strlen(g_link_id)); - MIH_C_MIHF_ID_set(&message.destination, (u_int8_t*)g_mihf_id, strlen(g_mihf_id)); - - message.primitive.Status = *statusP; - message.primitive.SupportedLinkEventList = supported_link_event_listP; - message.primitive.SupportedLinkCommandList = supported_link_command_listP; - - message_total_length = MIH_C_Link_Message_Encode_Capability_Discover_confirm(bb, &message); - -#ifdef MSCGEN_PYTOOL - memset(g_msc_gen_buf, 0, MSC_GEN_BUF_SIZE); - g_msc_gen_buffer_index = 0; - g_msc_gen_buffer_index += MIH_C_STATUS2String(&message.primitive.Status, &g_msc_gen_buf[g_msc_gen_buffer_index]); - g_msc_gen_buffer_index += sprintf(&g_msc_gen_buf[g_msc_gen_buffer_index], "\\n\\nsupported link events="); - g_msc_gen_buffer_index += MIH_C_LINK_EVENT_LIST2String2(message.primitive.SupportedLinkEventList, &g_msc_gen_buf[g_msc_gen_buffer_index]); - g_msc_gen_buffer_index += sprintf(&g_msc_gen_buf[g_msc_gen_buffer_index], "\\nsupported commands="); - g_msc_gen_buffer_index += MIH_C_LINK_CMD_LIST2String2(message.primitive.SupportedLinkCommandList, &g_msc_gen_buf[g_msc_gen_buffer_index]); -#endif - - if (mRALlte_send_to_mih(bb->m_buffer,message_total_length)<0) { - ERR(": Send Link_Capability_Discover.confirm\n"); -#ifdef MSCGEN_PYTOOL - NOTICE("[MSC_MSG][%s][%s][--- Link_Capability_Discover.confirm\\nstatus=%s ---x][%s]\n", - getTimeStamp4Log(), - g_link_id, - g_msc_gen_buf, - g_mihf_id); -#endif - } else { - DEBUG(": Sent Link_Capability_Discover.confirm\n"); -#ifdef MSCGEN_PYTOOL - NOTICE("[MSC_MSG][%s][%s][--- Link_Capability_Discover.confirm\\nstatus=%s --->][%s]\n", - getTimeStamp4Log(), - g_link_id, - g_msc_gen_buf, - g_mihf_id); -#endif - } - - free_BitBuffer(bb); -} -//----------------------------------------------------------------------------- -void mRALte_send_event_subscribe_confirm(MIH_C_TRANSACTION_ID_T *transaction_idP, - MIH_C_STATUS_T *statusP, - MIH_C_LINK_EVENT_LIST_T *response_link_event_listP) -{ - //----------------------------------------------------------------------------- - MIH_C_Message_Link_Event_Subscribe_confirm_t message; - Bit_Buffer_t *bb; - int message_total_length; - - bb = new_BitBuffer_0(); - BitBuffer_wrap(bb, g_msg_codec_send_buffer, (unsigned int)MSG_CODEC_SEND_BUFFER_SIZE); - - memset(&message, 0, sizeof (MIH_C_Message_Link_Event_Subscribe_confirm_t)); - - message.header.version = (MIH_C_VERSION_T)MIH_C_PROTOCOL_VERSION; - //message.header.ack_req = 0; - //message.header.ack_rsp = 0; - //message.header.uir = 0; - //message.header.more_fragment = 0 - //message.header.fragment_number = 0; - message.header.service_identifier = (MIH_C_SID_T)1; - message.header.operation_code = (MIH_C_OPCODE_T)0; - message.header.action_identifier = (MIH_C_AID_T)4; - message.header.transaction_id = *transaction_idP; - - - MIH_C_MIHF_ID_set(&message.source, (u_int8_t*)g_link_id, strlen(g_link_id)); - MIH_C_MIHF_ID_set(&message.destination, (u_int8_t*)g_mihf_id, strlen(g_mihf_id)); - - message.primitive.Status = *statusP; - message.primitive.ResponseLinkEventList = response_link_event_listP; - - message_total_length = MIH_C_Link_Message_Encode_Event_Subscribe_confirm(bb, &message); - -#ifdef MSCGEN_PYTOOL - memset(g_msc_gen_buf, 0, MSC_GEN_BUF_SIZE); - g_msc_gen_buffer_index = 0; - g_msc_gen_buffer_index += MIH_C_STATUS2String(&message.primitive.Status, &g_msc_gen_buf[g_msc_gen_buffer_index]); - g_msc_gen_buffer_index += sprintf(&g_msc_gen_buf[g_msc_gen_buffer_index], "\\nlink event list="); - g_msc_gen_buffer_index += MIH_C_LINK_EVENT_LIST2String2(message.primitive.ResponseLinkEventList, &g_msc_gen_buf[g_msc_gen_buffer_index]); -#endif - - if (mRALlte_send_to_mih(bb->m_buffer,message_total_length)<0) { - ERR(": Send Link_Event_Subscribe.confirm\n"); -#ifdef MSCGEN_PYTOOL - NOTICE("[MSC_MSG][%s][%s][--- Link_Event_Subscribe.confirm\\nstatus=%s ---x][%s]\n", - getTimeStamp4Log(), - g_link_id, - g_msc_gen_buf, - g_mihf_id); -#endif - } else { - DEBUG(": Sent Link_Event_Subscribe.confirm\n"); -#ifdef MSCGEN_PYTOOL - NOTICE("[MSC_MSG][%s][%s][--- Link_Event_Subscribe.confirm\\nstatus=%s --->][%s]\n", - getTimeStamp4Log(), - g_link_id, - g_msc_gen_buf, - g_mihf_id); -#endif - } - - free_BitBuffer(bb); -} -//----------------------------------------------------------------------------- -void mRALte_send_event_unsubscribe_confirm(MIH_C_TRANSACTION_ID_T *transaction_idP, - MIH_C_STATUS_T *statusP, - MIH_C_LINK_EVENT_LIST_T *response_link_event_listP) -{ - //----------------------------------------------------------------------------- - MIH_C_Message_Link_Event_Unsubscribe_confirm_t message; - Bit_Buffer_t *bb; - int message_total_length; - - bb = new_BitBuffer_0(); - BitBuffer_wrap(bb, g_msg_codec_send_buffer, (unsigned int)MSG_CODEC_SEND_BUFFER_SIZE); - - memset(&message, 0, sizeof (MIH_C_Message_Link_Event_Unsubscribe_confirm_t)); - - message.header.version = (MIH_C_VERSION_T)MIH_C_PROTOCOL_VERSION; - //message.header.ack_req = 0; - //message.header.ack_rsp = 0; - //message.header.uir = 0; - //message.header.more_fragment = 0 - //message.header.fragment_number = 0; - message.header.service_identifier = (MIH_C_SID_T)1; - message.header.operation_code = (MIH_C_OPCODE_T)0; - message.header.action_identifier = (MIH_C_AID_T)5; - message.header.transaction_id = *transaction_idP; - - - MIH_C_MIHF_ID_set(&message.source, (u_int8_t*)g_link_id, strlen(g_link_id)); - MIH_C_MIHF_ID_set(&message.destination, (u_int8_t*)g_mihf_id, strlen(g_mihf_id)); - - message.primitive.Status = *statusP; - message.primitive.ResponseLinkEventList = response_link_event_listP; - - message_total_length = MIH_C_Link_Message_Encode_Event_Unsubscribe_confirm(bb, &message); - -#ifdef MSCGEN_PYTOOL - memset(g_msc_gen_buf, 0, MSC_GEN_BUF_SIZE); - g_msc_gen_buffer_index = 0; - g_msc_gen_buffer_index += MIH_C_STATUS2String(&message.primitive.Status, &g_msc_gen_buf[g_msc_gen_buffer_index]); - g_msc_gen_buffer_index += sprintf(&g_msc_gen_buf[g_msc_gen_buffer_index], "\\nlink event list="); - g_msc_gen_buffer_index += MIH_C_LINK_EVENT_LIST2String2(message.primitive.ResponseLinkEventList, &g_msc_gen_buf[g_msc_gen_buffer_index]); -#endif - - if (mRALlte_send_to_mih(bb->m_buffer,message_total_length)<0) { - ERR(": Send Link_Event_Unsubscribe.confirm\n"); -#ifdef MSCGEN_PYTOOL - NOTICE("[MSC_MSG][%s][%s][--- Link_Event_Unsubscribe.confirm\\nstatus=%s ---x][%s]\n", - getTimeStamp4Log(), - g_link_id, - g_msc_gen_buf, - g_mihf_id); -#endif - } else { - DEBUG(": Sent Link_Event_Unsubscribe.confirm\n"); -#ifdef MSCGEN_PYTOOL - NOTICE("[MSC_MSG][%s][%s][--- Link_Event_Unsubscribe.confirm\\nstatus=%s --->][%s]\n", - getTimeStamp4Log(), - g_link_id, - g_msc_gen_buf, - g_mihf_id); -#endif - } - - free_BitBuffer(bb); -} -//----------------------------------------------------------------------------- -void mRALte_send_configure_thresholds_confirm(MIH_C_TRANSACTION_ID_T *transaction_idP, - MIH_C_STATUS_T *statusP, - MIH_C_LINK_CFG_STATUS_LIST_T *link_configure_status_listP) -{ - //----------------------------------------------------------------------------- - MIH_C_Message_Link_Configure_Thresholds_confirm_t message; - Bit_Buffer_t *bb; - int message_total_length; -#ifdef MSCGEN_PYTOOL - int i; -#endif - - bb = new_BitBuffer_0(); - BitBuffer_wrap(bb, g_msg_codec_send_buffer, (unsigned int)MSG_CODEC_SEND_BUFFER_SIZE); - - memset(&message, 0, sizeof (MIH_C_Message_Link_Configure_Thresholds_confirm_t)); - - message.header.version = (MIH_C_VERSION_T)MIH_C_PROTOCOL_VERSION; - //message.header.ack_req = 0; - //message.header.ack_rsp = 0; - //message.header.uir = 0; - //message.header.more_fragment = 0 - //message.header.fragment_number = 0; - message.header.service_identifier = (MIH_C_SID_T)3; - message.header.operation_code = (MIH_C_OPCODE_T)0; - message.header.action_identifier = (MIH_C_AID_T)2; - message.header.transaction_id = *transaction_idP; - - - MIH_C_MIHF_ID_set(&message.source, (u_int8_t*)g_link_id, strlen(g_link_id)); - MIH_C_MIHF_ID_set(&message.destination, (u_int8_t*)g_mihf_id, strlen(g_mihf_id)); - - message.primitive.Status = *statusP; - message.primitive.LinkConfigureStatusList_list = link_configure_status_listP; - - message_total_length = MIH_C_Link_Message_Encode_Configure_Thresholds_confirm(bb, &message); - -#ifdef MSCGEN_PYTOOL - memset(g_msc_gen_buf, 0, MSC_GEN_BUF_SIZE); - g_msc_gen_buffer_index = 0; - g_msc_gen_buffer_index += MIH_C_STATUS2String(&message.primitive.Status, &g_msc_gen_buf[g_msc_gen_buffer_index]); - g_msc_gen_buffer_index += sprintf(&g_msc_gen_buf[g_msc_gen_buffer_index], "\\n"); - - for (i = 0; i < link_configure_status_listP->length; i++) { - g_msc_gen_buffer_index += MIH_C_LINK_CFG_STATUS2String(&link_configure_status_listP->val[i], &g_msc_gen_buf[g_msc_gen_buffer_index]); - } - -#endif - - if (mRALlte_send_to_mih(bb->m_buffer,message_total_length)<0) { - ERR(": Send Link_Configure_Threshold.confirm\n"); -#ifdef MSCGEN_PYTOOL - NOTICE("[MSC_MSG][%s][%s][--- Link_Configure_Thresholds.confirm\\nstatus=%s ---x][%s]\n", - getTimeStamp4Log(), - g_link_id, - g_msc_gen_buf, - g_mihf_id); -#endif - } else { - DEBUG(": Sent Link_Configure_Threshold.confirm\n"); -#ifdef MSCGEN_PYTOOL - NOTICE("[MSC_MSG][%s][%s][--- Link_Configure_Thresholds.confirm\\nstatus=%s --->][%s]\n", - getTimeStamp4Log(), - g_link_id, - g_msc_gen_buf, - g_mihf_id); -#endif - } - - free_BitBuffer(bb); -} -//----------------------------------------------------------------------------- -void mRALte_send_get_parameters_confirm (MIH_C_TRANSACTION_ID_T *transaction_idP, - MIH_C_STATUS_T *statusP, - MIH_C_LINK_PARAM_LIST_T *link_parameters_status_listP, - MIH_C_LINK_STATES_RSP_LIST_T *link_states_response_listP, - MIH_C_LINK_DESC_RSP_LIST_T *link_descriptors_response_listP) -{ - //----------------------------------------------------------------------------- - MIH_C_Message_Link_Get_Parameters_confirm_t message; - Bit_Buffer_t *bb; - int message_total_length; -#ifdef MSCGEN_PYTOOL - char msg_src[32]; - char msg_dst[32]; - int i; -#endif - - bb = new_BitBuffer_0(); - BitBuffer_wrap(bb, g_msg_codec_send_buffer, (unsigned int)MSG_CODEC_SEND_BUFFER_SIZE); - - memset(&message, 0, sizeof (MIH_C_Message_Link_Get_Parameters_confirm_t)); - - message.header.version = (MIH_C_VERSION_T)MIH_C_PROTOCOL_VERSION; - //message.header.ack_req = 0; - //message.header.ack_rsp = 0; - //message.header.uir = 0; - //message.header.more_fragment = 0 - //message.header.fragment_number = 0; - message.header.service_identifier = (MIH_C_SID_T)3; - message.header.operation_code = (MIH_C_OPCODE_T)0; - message.header.action_identifier = (MIH_C_AID_T)1; - message.header.transaction_id = *transaction_idP; - - - MIH_C_MIHF_ID_set(&message.source, (u_int8_t*)g_link_id, strlen(g_link_id)); - MIH_C_MIHF_ID_set(&message.destination, (u_int8_t*)g_mihf_id, strlen(g_mihf_id)); - - message.primitive.Status = *statusP; - message.primitive.LinkParametersStatusList_list = link_parameters_status_listP; - message.primitive.LinkStatesResponse_list = link_states_response_listP; - message.primitive.LinkDescriptorsResponse_list = link_descriptors_response_listP; - - message_total_length = MIH_C_Link_Message_Encode_Get_Parameters_confirm(bb, &message); - - if (mRALlte_send_to_mih(bb->m_buffer,message_total_length)<0) { - ERR(": Send Link_Get_Parameters.confirm\n"); -#ifdef MSCGEN_PYTOOL - NOTICE("[MSC_MSG][%s][%s][--- Link_Get_Parameters.confirm ---x][%s]\n", - getTimeStamp4Log(), - g_link_id, - g_mihf_id); -#endif - } else { - DEBUG(": Sent Link_Get_Parameters.confirm\n"); -#ifdef MSCGEN_PYTOOL - MIH_C_MIHF_ID2String(&message.source, msg_src); - MIH_C_MIHF_ID2String(&message.destination, msg_dst); - memset(g_msc_gen_buf, 0, MSC_GEN_BUF_SIZE); - g_msc_gen_buffer_index = 0; - g_msc_gen_buffer_index += MIH_C_STATUS2String(&message.primitive.Status, &g_msc_gen_buf[g_msc_gen_buffer_index]); - - if (link_parameters_status_listP) { - g_msc_gen_buffer_index += sprintf(&g_msc_gen_buf[g_msc_gen_buffer_index], "\\n LinkParametersStatusList="); - - for (i = 0; i < link_parameters_status_listP->length; i++) { - g_msc_gen_buffer_index += MIH_C_LINK_PARAM2String(&link_parameters_status_listP->val[i], &g_msc_gen_buf[g_msc_gen_buffer_index]); - g_msc_gen_buffer_index += sprintf(&g_msc_gen_buf[g_msc_gen_buffer_index], ", "); - } - } - - if (link_states_response_listP) { - g_msc_gen_buffer_index += sprintf(&g_msc_gen_buf[g_msc_gen_buffer_index], "\\n LinkStatesResponseList="); - - for (i = 0; i < link_states_response_listP->length; i++) { - g_msc_gen_buffer_index += MIH_C_LINK_STATES_RSP2String(&link_states_response_listP->val[i], &g_msc_gen_buf[g_msc_gen_buffer_index]); - g_msc_gen_buffer_index += sprintf(&g_msc_gen_buf[g_msc_gen_buffer_index], ", "); - } - } - - if (link_descriptors_response_listP) { - g_msc_gen_buffer_index += sprintf(&g_msc_gen_buf[g_msc_gen_buffer_index], "\\n LinkDescriptorsResponseList="); - - for (i = 0; i < link_descriptors_response_listP->length; i++) { - g_msc_gen_buffer_index += MIH_C_LINK_DESC_RSP2String(&link_descriptors_response_listP->val[i], &g_msc_gen_buf[g_msc_gen_buffer_index]); - g_msc_gen_buffer_index += sprintf(&g_msc_gen_buf[g_msc_gen_buffer_index], ", "); - } - } - - NOTICE("[MSC_MSG][%s][%s][--- Link_Get_Parameters.confirm\\n%s --->][%s]\n", - getTimeStamp4Log(), - g_link_id, - g_msc_gen_buf, - g_mihf_id); -#endif - } - - free_BitBuffer(bb); -} -//----------------------------------------------------------------------------- -int mRALlte_mih_link_msg_decode(Bit_Buffer_t* bbP, MIH_C_Message_Wrapper_t *message_wrapperP) -{ - //----------------------------------------------------------------------------- - int status = MIH_MESSAGE_DECODE_FAILURE; - MIH_C_HEADER_T header; - MIH_C_STATUS_T mih_status; -#ifdef MSCGEN_PYTOOL - char msg_src[32]; - char msg_dst[32]; - int i; -#endif - - if ((bbP != NULL) && (message_wrapperP != NULL)) { - status = MIH_C_Link_Header_Decode(bbP, &header); - - if (status == MIH_HEADER_DECODE_TOO_SHORT) { - return MIH_MESSAGE_DECODE_TOO_SHORT; - } else if (status == MIH_HEADER_DECODE_FAILURE) { - return MIH_MESSAGE_DECODE_FAILURE; - } else if (status == MIH_HEADER_DECODE_BAD_PARAMETER) { - return MIH_MESSAGE_DECODE_BAD_PARAMETER; - } - - message_wrapperP->message_id = MIH_C_MESSAGE_ID(header.service_identifier, header.operation_code, header.action_identifier); - - switch (message_wrapperP->message_id) { - case MIH_C_MESSAGE_LINK_CAPABILITY_DISCOVER_REQUEST_ID: - DEBUG(" %s Received MIH_C_MESSAGE_LINK_CAPABILITY_DISCOVER_REQUEST\n", __FUNCTION__); - memcpy(&message_wrapperP->_union_message.link_capability_discover_request.header, (const void *)&header, sizeof(MIH_C_HEADER_T)); - status = MIH_C_Link_Message_Decode_Link_Capability_Discover_request(bbP, &message_wrapperP->_union_message.link_capability_discover_request); - - if (status == MIH_MESSAGE_DECODE_OK) { -#ifdef MSCGEN_PYTOOL - MIH_C_MIHF_ID2String(&(message_wrapperP->_union_message.link_capability_discover_request.source), msg_src); - MIH_C_MIHF_ID2String(&(message_wrapperP->_union_message.link_capability_discover_request.destination), msg_dst); - NOTICE("[MSC_MSG][%s][%s][--- Link_Capability_Discover.request --->][%s]\n", - getTimeStamp4Log(), - msg_src, - msg_dst); -#endif - MIH_C_Link_Message_Link_Capability_Discover_request2String(&message_wrapperP->_union_message.link_capability_discover_request, g_msg_print_buffer); - DEBUG("%s", g_msg_print_buffer); - - mih_status = MIH_C_STATUS_SUCCESS; - DEBUG("**\n"); - DEBUG(" %s Sending MIH_C_MESSAGE_LINK_CAPABILITY_DISCOVER_CONFIRM\n\n", __FUNCTION__); - - mRALte_send_capability_discover_confirm(&message_wrapperP->_union_message.link_capability_discover_request.header.transaction_id, - &mih_status, - &ralpriv->mih_supported_link_event_list, - &ralpriv->mih_supported_link_command_list); - } else { -#ifdef MSCGEN_PYTOOL - MIH_C_MIHF_ID2String(&(message_wrapperP->_union_message.link_capability_discover_request.source), msg_src); - MIH_C_MIHF_ID2String(&(message_wrapperP->_union_message.link_capability_discover_request.destination), msg_dst); - NOTICE("[MSC_MSG][%s][%s][--- Link_Capability_Discover.request\\nERR DECODE ---x][%s]\n", - getTimeStamp4Log(), - msg_src, - msg_dst); -#endif - } - - break; - - case MIH_C_MESSAGE_LINK_EVENT_SUBSCRIBE_REQUEST_ID: - DEBUG(" %s Received MIH_C_MESSAGE_LINK_EVENT_SUBSCRIBE_REQUEST\n", __FUNCTION__); - memcpy(&message_wrapperP->_union_message.link_event_subscribe_request.header, (const void *)&header, sizeof(MIH_C_HEADER_T)); - status = MIH_C_Link_Message_Decode_Link_Event_Subscribe_request(bbP, &message_wrapperP->_union_message.link_event_subscribe_request); - - if (status == MIH_MESSAGE_DECODE_OK) { -#ifdef MSCGEN_PYTOOL - MIH_C_MIHF_ID2String(&(message_wrapperP->_union_message.link_event_subscribe_request.source), msg_src); - MIH_C_MIHF_ID2String(&(message_wrapperP->_union_message.link_event_subscribe_request.destination), msg_dst); - memset(g_msc_gen_buf, 0, MSC_GEN_BUF_SIZE); - MIH_C_LINK_EVENT_LIST2String2(&message_wrapperP->_union_message.link_event_subscribe_request.primitive.RequestedLinkEventList, g_msc_gen_buf); - NOTICE("[MSC_MSG][%s][%s][--- Link_Event_Subscribe.request\\n%s --->][%s]\n", - getTimeStamp4Log(), - msg_src, - g_msc_gen_buf, - msg_dst); -#endif - DEBUG("**\n"); - - mRALlte_subscribe_request(&message_wrapperP->_union_message.link_event_subscribe_request); - } else { -#ifdef MSCGEN_PYTOOL - MIH_C_MIHF_ID2String(&(message_wrapperP->_union_message.link_event_subscribe_request.source), msg_src); - MIH_C_MIHF_ID2String(&(message_wrapperP->_union_message.link_event_subscribe_request.destination), msg_dst); - memset(g_msc_gen_buf, 0, MSC_GEN_BUF_SIZE); - MIH_C_LINK_EVENT_LIST2String2(&message_wrapperP->_union_message.link_event_subscribe_request.primitive.RequestedLinkEventList, g_msc_gen_buf); - NOTICE("[MSC_MSG][%s][%s][--- Link_Event_Subscribe.request\\nERR DECODE ---x][%s]\n", - getTimeStamp4Log(), - msg_src, - msg_dst); -#endif - } - - break; - - case MIH_C_MESSAGE_LINK_EVENT_UNSUBSCRIBE_REQUEST_ID: - DEBUG(" %s Received MIH_C_MESSAGE_LINK_EVENT_UNSUBSCRIBE_REQUEST\n", __FUNCTION__); - memcpy(&message_wrapperP->_union_message.link_event_unsubscribe_request.header, (const void *)&header, sizeof(MIH_C_HEADER_T)); - status = MIH_C_Link_Message_Decode_Link_Event_Unsubscribe_request(bbP, &message_wrapperP->_union_message.link_event_unsubscribe_request); - - if (status == MIH_MESSAGE_DECODE_OK) { -#ifdef MSCGEN_PYTOOL - MIH_C_MIHF_ID2String(&(message_wrapperP->_union_message.link_event_unsubscribe_request.source), msg_src); - MIH_C_MIHF_ID2String(&(message_wrapperP->_union_message.link_event_unsubscribe_request.destination), msg_dst); - memset(g_msc_gen_buf, 0, MSC_GEN_BUF_SIZE); - MIH_C_LINK_EVENT_LIST2String2(&message_wrapperP->_union_message.link_event_unsubscribe_request.primitive.RequestedLinkEventList, g_msc_gen_buf); - NOTICE("[MSC_MSG][%s][%s][--- Link_Event_Unsubscribe.request\\n%s --->][%s]\n", - getTimeStamp4Log(), - msg_src, - g_msc_gen_buf, - msg_dst); -#endif - DEBUG("**\n"); - mRALlte_unsubscribe_request(&message_wrapperP->_union_message.link_event_unsubscribe_request); - } else { -#ifdef MSCGEN_PYTOOL - MIH_C_MIHF_ID2String(&(message_wrapperP->_union_message.link_event_unsubscribe_request.source), msg_src); - MIH_C_MIHF_ID2String(&(message_wrapperP->_union_message.link_event_unsubscribe_request.destination), msg_dst); - memset(g_msc_gen_buf, 0, MSC_GEN_BUF_SIZE); - MIH_C_LINK_EVENT_LIST2String2(&message_wrapperP->_union_message.link_event_unsubscribe_request.primitive.RequestedLinkEventList, g_msc_gen_buf); - NOTICE("[MSC_MSG][%s][%s][--- Link_Event_Unsubscribe.request\\nERR DECODE ---x][%s]\n", - getTimeStamp4Log(), - msg_src, - msg_dst); -#endif - } - - break; - - case MIH_C_MESSAGE_LINK_GET_PARAMETERS_REQUEST_ID: - DEBUG(" %s Received MIH_C_MESSAGE_LINK_GET_PARAMETERS_REQUEST\n", __FUNCTION__); - memcpy(&message_wrapperP->_union_message.link_get_parameters_request.header, (const void *)&header, sizeof(MIH_C_HEADER_T)); - status = MIH_C_Link_Message_Decode_Link_Get_Parameters_request(bbP, &message_wrapperP->_union_message.link_get_parameters_request); - - if (status == MIH_MESSAGE_DECODE_OK) { -#ifdef MSCGEN_PYTOOL - MIH_C_MIHF_ID2String(&(message_wrapperP->_union_message.link_get_parameters_request.source), msg_src); - MIH_C_MIHF_ID2String(&(message_wrapperP->_union_message.link_get_parameters_request.destination), msg_dst); - memset(g_msc_gen_buf, 0, MSC_GEN_BUF_SIZE); - g_msc_gen_buffer_index = 0; - - for (i = 0; i < message_wrapperP->_union_message.link_get_parameters_request.primitive.LinkParametersRequest_list.length; i++) { - g_msc_gen_buffer_index += MIH_C_LINK_PARAM_TYPE2String(&message_wrapperP->_union_message.link_get_parameters_request.primitive.LinkParametersRequest_list.val[i], - &g_msc_gen_buf[g_msc_gen_buffer_index]); - } - - g_msc_gen_buffer_index += sprintf(&g_msc_gen_buf[g_msc_gen_buffer_index], "\\n Link states request="); - g_msc_gen_buffer_index += MIH_C_LINK_STATES_REQ2String2(&message_wrapperP->_union_message.link_get_parameters_request.primitive.LinkStatesRequest, &g_msc_gen_buf[g_msc_gen_buffer_index]); - g_msc_gen_buffer_index += sprintf(&g_msc_gen_buf[g_msc_gen_buffer_index], "\\n Link desc request="); - g_msc_gen_buffer_index += MIH_C_LINK_DESC_REQ2String2(&message_wrapperP->_union_message.link_get_parameters_request.primitive.LinkDescriptorsRequest, &g_msc_gen_buf[g_msc_gen_buffer_index]); - - NOTICE("[MSC_MSG][%s][%s][--- Link_Get_Parameters.request\\n%s --->][%s]\n", - getTimeStamp4Log(), - msg_src, - g_msc_gen_buf, - msg_dst); -#endif - DEBUG("**\n"); - mRALlte_get_parameters_request(&message_wrapperP->_union_message.link_get_parameters_request); - } else { -#ifdef MSCGEN_PYTOOL - MIH_C_MIHF_ID2String(&(message_wrapperP->_union_message.link_get_parameters_request.source), msg_src); - MIH_C_MIHF_ID2String(&(message_wrapperP->_union_message.link_get_parameters_request.destination), msg_dst); - NOTICE("[MSC_MSG][%s][%s][--- Link_Get_Parameters.request\\nERR DECODE ---x][%s]\n", - getTimeStamp4Log(), - msg_src, - msg_dst); -#endif - } - - break; - - case MIH_C_MESSAGE_LINK_CONFIGURE_THRESHOLDS_REQUEST_ID: - DEBUG(" %s Received MIH_C_MESSAGE_LINK_CONFIGURE_THRESHOLDS_REQUEST\n", __FUNCTION__); - memcpy(&message_wrapperP->_union_message.link_configure_thresholds_request.header, (const void *)&header, sizeof(MIH_C_HEADER_T)); - status = MIH_C_Link_Message_Decode_Link_Configure_Thresholds_request(bbP, &message_wrapperP->_union_message.link_configure_thresholds_request); - - if (status == MIH_MESSAGE_DECODE_OK) { -#ifdef MSCGEN_PYTOOL - MIH_C_MIHF_ID2String(&(message_wrapperP->_union_message.link_configure_thresholds_request.source), msg_src); - MIH_C_MIHF_ID2String(&(message_wrapperP->_union_message.link_configure_thresholds_request.destination), msg_dst); - memset(g_msc_gen_buf, 0, MSC_GEN_BUF_SIZE); - g_msc_gen_buffer_index = 0; - - for (i = 0; i < message_wrapperP->_union_message.link_configure_thresholds_request.primitive.LinkConfigureParameterList_list.length; i++) { - g_msc_gen_buffer_index += MIH_C_LINK_CFG_PARAM2String(&message_wrapperP->_union_message.link_configure_thresholds_request.primitive.LinkConfigureParameterList_list.val[i], - &g_msc_gen_buf[g_msc_gen_buffer_index]); - } - - NOTICE("[MSC_MSG][%s][%s][--- Link_Configure_Thresholds.request\\n%s --->][%s]\n", - getTimeStamp4Log(), - msg_src, - g_msc_gen_buf, - msg_dst); -#endif - DEBUG("**\n"); - mRALlte_configure_thresholds_request(&message_wrapperP->_union_message.link_configure_thresholds_request); - } else { -#ifdef MSCGEN_PYTOOL - MIH_C_MIHF_ID2String(&(message_wrapperP->_union_message.link_configure_thresholds_request.source), msg_src); - MIH_C_MIHF_ID2String(&(message_wrapperP->_union_message.link_configure_thresholds_request.destination), msg_dst); - NOTICE("[MSC_MSG][%s][%s][--- Link_Configure_Thresholds.request\\nERR DECODE ---x][%s]\n", - getTimeStamp4Log(), - msg_src, - msg_dst); -#endif - } - - break; - - case MIH_C_MESSAGE_LINK_ACTION_REQUEST_ID: - DEBUG(" %s Received MIH_C_MESSAGE_LINK_ACTION_REQUEST\n", __FUNCTION__); - memcpy(&message_wrapperP->_union_message.link_action_request.header, (const void *)&header, sizeof(MIH_C_HEADER_T)); - status = MIH_C_Link_Message_Decode_Link_Action_request(bbP, &message_wrapperP->_union_message.link_action_request); - - if (status == MIH_MESSAGE_DECODE_OK) { -#ifdef MSCGEN_PYTOOL - MIH_C_MIHF_ID2String(&(message_wrapperP->_union_message.link_action_request.source), msg_src); - MIH_C_MIHF_ID2String(&(message_wrapperP->_union_message.link_action_request.destination), msg_dst); - memset(g_msc_gen_buf, 0, MSC_GEN_BUF_SIZE); - g_msc_gen_buffer_index = 0; - g_msc_gen_buffer_index += MIH_C_LINK_ACTION2String(&message_wrapperP->_union_message.link_action_request.primitive.LinkAction, g_msc_gen_buf); - g_msc_gen_buffer_index += sprintf(&g_msc_gen_buf[g_msc_gen_buffer_index], "\\nExecution Delay=%d", message_wrapperP->_union_message.link_action_request.primitive.ExecutionDelay); - - if (message_wrapperP->_union_message.link_action_request.primitive.PoALinkAddress != NULL) { - g_msc_gen_buffer_index += sprintf(&g_msc_gen_buf[g_msc_gen_buffer_index], "\\nPoALinkAddress="); - g_msc_gen_buffer_index += MIH_C_LINK_ADDR2String(message_wrapperP->_union_message.link_action_request.primitive.PoALinkAddress, &g_msc_gen_buf[g_msc_gen_buffer_index]); - } - - NOTICE("[MSC_MSG][%s][%s][--- Link_Action.request\\n%s --->][%s]\n", - getTimeStamp4Log(), - msg_src, - g_msc_gen_buf, - msg_dst); -#endif - DEBUG("**\n"); - mRALlte_action_request(&message_wrapperP->_union_message.link_action_request); - } else { -#ifdef MSCGEN_PYTOOL - MIH_C_MIHF_ID2String(&(message_wrapperP->_union_message.link_action_request.source), msg_src); - MIH_C_MIHF_ID2String(&(message_wrapperP->_union_message.link_action_request.destination), msg_dst); - NOTICE("[MSC_MSG][%s][%s][--- Link_Action.request\\nERR DECODE --->][%s]\n", - getTimeStamp4Log(), - msg_src, - msg_dst); -#endif - } - - break; - - default: - WARNING("UNKNOWN MESSAGE ID SID %d, OP_CODE %d, AID %d\n", header.service_identifier, header.operation_code, header.action_identifier); - status = MIH_MESSAGE_DECODE_FAILURE; - - return status; - } - } else { - return MIH_MESSAGE_DECODE_BAD_PARAMETER; - } - - return status; -} -//----------------------------------------------------------------------------- -int mRALlte_mih_link_process_message(void) -{ - //----------------------------------------------------------------------------- - MIH_C_Message_Wrapper_t message_wrapper; - int nb_bytes_received ; - int nb_bytes_decoded ; - int total_bytes_to_decode ; - int status ; - Bit_Buffer_t *bb; - struct sockaddr_in udp_socket; - socklen_t sockaddr_len; - - - total_bytes_to_decode = 0; - nb_bytes_received = 0; - - bb = new_BitBuffer_0(); - - nb_bytes_received = recvfrom(g_sockd_mihf, - (void *)g_msg_codec_recv_buffer, - MSG_CODEC_RECV_BUFFER_SIZE, - 0, - (struct sockaddr *) &udp_socket, - &sockaddr_len); - - if (nb_bytes_received > 0) { - DEBUG(" \n"); - DEBUG(" %s Received %d bytes from MIHF\n", __FUNCTION__, nb_bytes_received); - mRALlte_print_buffer((char*)g_msg_codec_recv_buffer, nb_bytes_received); - total_bytes_to_decode += nb_bytes_received; - BitBuffer_wrap(bb, g_msg_codec_recv_buffer, total_bytes_to_decode); - status = mRALlte_mih_link_msg_decode(bb, &message_wrapper); - nb_bytes_decoded = BitBuffer_getPosition(bb); - - if (status == MIH_MESSAGE_DECODE_OK) { - if (nb_bytes_decoded > 0) { - total_bytes_to_decode = total_bytes_to_decode - nb_bytes_decoded; - - // if remaining bytes to decode - if (total_bytes_to_decode > 0) { - //shift left bytes in buffer - memcpy(g_msg_codec_recv_buffer, &g_msg_codec_recv_buffer[nb_bytes_decoded], nb_bytes_decoded); - - //shift left again bytes in buffer - if (total_bytes_to_decode > nb_bytes_decoded) { - memcpy(&g_msg_codec_recv_buffer[nb_bytes_decoded], &g_msg_codec_recv_buffer[nb_bytes_decoded], total_bytes_to_decode - nb_bytes_decoded); - } - - // not necessary - memset(&g_msg_codec_recv_buffer[total_bytes_to_decode], 0 , MSG_CODEC_RECV_BUFFER_SIZE - total_bytes_to_decode); - - } - } - - // data could not be decoded - } else if (status == MIH_MESSAGE_DECODE_FAILURE) { - memset(g_msg_codec_recv_buffer, 0, MSG_CODEC_RECV_BUFFER_SIZE); - total_bytes_to_decode = 0; - } else if ((status == MIH_MESSAGE_DECODE_TOO_SHORT)) { - } - - DEBUG(" \n"); - } - - free_BitBuffer(bb); - return 0; -} diff --git a/openair3/RAL-LTE/RAL-DUMMY/SRC/mRALlte_parameters.c b/openair3/RAL-LTE/RAL-DUMMY/SRC/mRALlte_parameters.c deleted file mode 100755 index 7fffeacd8b..0000000000 --- a/openair3/RAL-LTE/RAL-DUMMY/SRC/mRALlte_parameters.c +++ /dev/null @@ -1,136 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ -#define MRAL_MODULE -#define MRALLTE_PARAMETERS_C -#include -#include "mRALlte_parameters.h" - -//----------------------------------------------------------------------------- -void mRALlte_get_parameters_request(MIH_C_Message_Link_Get_Parameters_request_t* messageP) -{ - //----------------------------------------------------------------------------- - MIH_C_STATUS_T status; - MIH_C_LINK_PARAM_LIST_T link_parameters_status_list; - MIH_C_LINK_STATES_RSP_LIST_T link_states_response_list; - MIH_C_LINK_DESC_RSP_LIST_T link_descriptors_response_list; - unsigned int link_index; - - // SAVE REQUEST - // MAY BE MERGE REQUESTS ? - //memcpy(&g_link_cfg_param_thresholds_list, &messageP->primitive.LinkConfigureParameterList_list, sizeof(MIH_C_LINK_CFG_PARAM_LIST_T)); - - status = MIH_C_STATUS_SUCCESS; - - for (link_index = 0; - link_index < messageP->primitive.LinkParametersRequest_list.length; - link_index++) { - - //------------------------------------------------ - // MIH_C_LINK_PARAM_LIST_T - //------------------------------------------------ - memcpy(&link_parameters_status_list.val[link_index].link_param_type, - &messageP->primitive.LinkParametersRequest_list.val[link_index], - sizeof(MIH_C_LINK_PARAM_TYPE_T)); - - switch (messageP->primitive.LinkParametersRequest_list.val[link_index].choice) { - case MIH_C_LINK_PARAM_TYPE_CHOICE_GEN: - link_parameters_status_list.val[link_index].choice = MIH_C_LINK_PARAM_CHOICE_LINK_PARAM_VAL; - link_parameters_status_list.val[link_index]._union.link_param_val = MIH_C_LINK_PARAM_GEN_SIGNAL_STRENGTH; - break; - - case MIH_C_LINK_PARAM_TYPE_CHOICE_QOS: - link_parameters_status_list.val[link_index].choice = MIH_C_LINK_PARAM_CHOICE_QOS_PARAM_VAL; - link_parameters_status_list.val[link_index]._union.qos_param_val.choice = MIH_C_QOS_PARAM_VAL_CHOICE_AVG_PK_TX_DELAY; - link_parameters_status_list.val[link_index]._union.qos_param_val._union.avg_pk_tx_delay_list.length = 2; //?? - link_parameters_status_list.val[link_index]._union.qos_param_val._union.avg_pk_tx_delay_list.val[0].cos_id = 2; //?? - link_parameters_status_list.val[link_index]._union.qos_param_val._union.avg_pk_tx_delay_list.val[0].value = 20; //?? - link_parameters_status_list.val[link_index]._union.qos_param_val._union.avg_pk_tx_delay_list.val[1].cos_id = 3; //?? - link_parameters_status_list.val[link_index]._union.qos_param_val._union.avg_pk_tx_delay_list.val[2].value = 50; //?? - break; - - case MIH_C_LINK_PARAM_TYPE_CHOICE_LTE: - case MIH_C_LINK_PARAM_TYPE_CHOICE_GG: - case MIH_C_LINK_PARAM_TYPE_CHOICE_EDGE: - case MIH_C_LINK_PARAM_TYPE_CHOICE_ETH: - case MIH_C_LINK_PARAM_TYPE_CHOICE_802_11: - case MIH_C_LINK_PARAM_TYPE_CHOICE_C2K: - case MIH_C_LINK_PARAM_TYPE_CHOICE_FDD: - case MIH_C_LINK_PARAM_TYPE_CHOICE_HRPD: - case MIH_C_LINK_PARAM_TYPE_CHOICE_802_16: - case MIH_C_LINK_PARAM_TYPE_CHOICE_802_20: - case MIH_C_LINK_PARAM_TYPE_CHOICE_802_22: - default: - ERR("%s TO DO CONTINUE PROCESSING LinkParametersRequest_list of \n", __FUNCTION__); - } - - //------------------------------------------------ - // MIH_C_LINK_STATES_RSP_LIST_T - //------------------------------------------------ - if (messageP->primitive.LinkStatesRequest & MIH_C_BIT_LINK_STATES_REQ_OP_MODE) { - link_states_response_list.val[link_index].choice = 0; - link_states_response_list.val[link_index]._union.op_mode = MIH_C_OPMODE_NORMAL_MODE; - } else if (messageP->primitive.LinkStatesRequest & MIH_C_BIT_LINK_STATES_REQ_CHANNEL_ID) { - link_states_response_list.val[link_index].choice = 1; - link_states_response_list.val[link_index]._union.channel_id = PREDEFINED_CHANNEL_ID; - } else { - ERR("%s Invalid LinkStatesRequest in MIH_C_Link_Get_Parameters_request\n", __FUNCTION__); - // DEFAULT VALUES - link_states_response_list.val[link_index].choice = 0; - link_states_response_list.val[link_index]._union.op_mode = MIH_C_OPMODE_NORMAL_MODE; - } - - //------------------------------------------------ - // MIH_C_LINK_DESC_RSP_LIST_T - //------------------------------------------------ - if (messageP->primitive.LinkDescriptorsRequest & MIH_C_BIT_NUMBER_OF_CLASSES_OF_SERVICE_SUPPORTED) { - link_descriptors_response_list.val[link_index].choice = 0; - link_descriptors_response_list.val[link_index]._union.num_cos = PREDEFINED_CLASSES_SERVICE_SUPPORTED; - } else if (messageP->primitive.LinkDescriptorsRequest & MIH_C_BIT_NUMBER_OF_QUEUES_SUPPORTED) { - link_descriptors_response_list.val[link_index].choice = 1; - link_descriptors_response_list.val[link_index]._union.num_queue = PREDEFINED_QUEUES_SUPPORTED; - } else { - ERR("%s Invalid LinkDescriptorsRequest in MIH_C_Link_Get_Parameters_request\n", __FUNCTION__); - // DEFAULT VALUES - link_descriptors_response_list.val[link_index].choice = 0; - link_descriptors_response_list.val[link_index]._union.num_cos = PREDEFINED_CLASSES_SERVICE_SUPPORTED; - } - } - - link_parameters_status_list.length = messageP->primitive.LinkParametersRequest_list.length; - link_states_response_list.length = messageP->primitive.LinkParametersRequest_list.length; - link_descriptors_response_list.length = messageP->primitive.LinkParametersRequest_list.length; - - - mRALte_send_get_parameters_confirm(&messageP->header.transaction_id, - &status, - &link_parameters_status_list, - &link_states_response_list, - &link_descriptors_response_list); -} - diff --git a/openair3/RAL-LTE/RAL-DUMMY/SRC/mRALlte_process.c b/openair3/RAL-LTE/RAL-DUMMY/SRC/mRALlte_process.c deleted file mode 100755 index fde9fe9d54..0000000000 --- a/openair3/RAL-LTE/RAL-DUMMY/SRC/mRALlte_process.c +++ /dev/null @@ -1,297 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ -#define MRAL_MODULE -#include -#include -#include -#include - -#include "mRALlte_variables.h" -#include "mRALlte_proto.h" -#include "MIH_C.h" -#include "mRALlte_mih_msg.h" -#include "mRALlte_thresholds.h" -// for real-time -//#include "nas_ue_ioctl.h" -//#include "nasmt_constant.h" -// for dummy -#include "nas_ue_netlink.h" - -//global variables -extern int meas_counter; -extern int s_nas; - -//--------------------------------------------------------------------------- -// Temp - Enter hard-coded measures in IAL -void IAL_NAS_measures_init(void) -//--------------------------------------------------------------------------- -{ -#ifdef RAL_DUMMY - ralpriv->num_measures = 3; -#endif -#ifdef RAL_REALTIME - ralpriv->num_measures = 1; -#endif - ralpriv->meas_cell_id[0] = 0; -#ifdef MIH_USER_CONTROL - ralpriv->last_meas_level[0] = 0; -#else - ralpriv->last_meas_level[0] = 30; -#endif - ralpriv->integrated_meas_level[0] = ralpriv->last_meas_level[0]; - ralpriv->provider_id[0] = 25; - ralpriv->meas_cell_id[1] = 1; - ralpriv->last_meas_level[1] = 50; - ralpriv->integrated_meas_level[1] = ralpriv->last_meas_level[1]; - ralpriv->provider_id[1] = 1; - ralpriv->meas_cell_id[2] = 20; - ralpriv->last_meas_level[2] = 20; - ralpriv->integrated_meas_level[2] = ralpriv->last_meas_level[2]; - ralpriv->provider_id[2] = 25; -} - -//--------------------------------------------------------------------------- -// Temp - Enter hard-coded measures in IAL -void IAL_NAS_measures_update(int i) -//--------------------------------------------------------------------------- -{ - int j; - - //ralpriv->meas_cell_id[0] = ralpriv->cell_id; - j = i%2; - - if (j==0) { - ralpriv->integrated_meas_level[2] = (ralpriv->integrated_meas_level[2] + (ralpriv->last_meas_level[2]/5)); - } else { - ralpriv->integrated_meas_level[2] = (ralpriv->integrated_meas_level[2] - (ralpriv->last_meas_level[2]/5)); - } - - ralpriv->curr_signal_level = ralpriv->integrated_meas_level[0]; - - // DEBUG ("Measure update - cell 1 %d, %d \n", ralpriv->last_meas_level[1], ralpriv->integrated_meas_level[1]); -} - -//--------------------------------------------------------------------------- -void IAL_integrate_measure(int measure, int i) -{ - //--------------------------------------------------------------------------- - int new_integrated = 0; - - new_integrated = (((10-LAMBDA)*ralpriv->last_meas_level[i])+(LAMBDA*measure))/10; - //apply correction to get a value between 0-100 - now is linear - new_integrated = (new_integrated*100)/MEAS_MAX_RSSI; - // print result -#ifdef DEBUG_MRALU_MEASURES - DEBUG ("Integrate measure : old %d, new %d, integrated %d\n", ralpriv->last_meas_level[i], measure,new_integrated ); -#endif - // store the result - ralpriv->last_meas_level[i] = measure; - ralpriv->prev_integrated_meas_level[i] = ralpriv->integrated_meas_level[i]; - ralpriv->integrated_meas_level[i] = new_integrated; -} - - -//--------------------------------------------------------------------------- -// poll for measures in NAS -void rallte_NAS_measures_polling(void) -{ - //--------------------------------------------------------------------------- - MIH_C_LINK_GD_REASON_T going_down_reason_code; - MIH_C_LINK_DN_REASON_T down_reason_code; - MIH_C_TRANSACTION_ID_T transaction_id; - MIH_C_LINK_TUPLE_ID_T link_identifier; - MIH_C_LINK_DET_INFO_T link_detected_info; - MIH_C_UNSIGNED_INT2_T time_interval; - //MIH_C_LINK_PARAM_RPT_LIST_T link_parameters_report_list; - - IAL_process_DNAS_message(IO_OBJ_MEAS, IO_CMD_LIST, 0); - - // hard-coded trigger for test -#ifdef MRALU_SIMU_LINKDOWN - meas_counter ++; - - if (meas_counter == 4) { - ralpriv->curr_signal_level = ralpriv->curr_signal_level/10; - IAL_integrate_measure(ralpriv->curr_signal_level, 0); - DEBUG ("\n signal level %d , integrated new value : %d\n",ralpriv->curr_signal_level, ralpriv->integrated_meas_level[0]); - } - - if (meas_counter == 5) { - ralpriv->curr_signal_level = 40; - IAL_integrate_measure(ralpriv->curr_signal_level, 0); - DEBUG ("\n signal level %d , integrated new value : %d\n",ralpriv->curr_signal_level, ralpriv->integrated_meas_level[0]); - } - - if (meas_counter == 6) { - ralpriv->curr_signal_level = 0; - IAL_integrate_measure(ralpriv->curr_signal_level, 0); - DEBUG ("\n signal level %d , integrated new value : %d\n",ralpriv->curr_signal_level, ralpriv->integrated_meas_level[0]); - } - -#endif - DEBUG ("signal level %d , integrated new value : %d , integrated old value : (%d)\n", - ralpriv->curr_signal_level, - ralpriv->integrated_meas_level[0], - ralpriv->prev_integrated_meas_level[0]); - - // condition still TBD - message dropped or level = 0 - if ((!ralpriv->curr_signal_level) && - (ralpriv->link_to_be_detected == MIH_C_BOOLEAN_FALSE) && - (ralpriv->state != DISCONNECTED) - ) { - transaction_id = MIH_C_get_new_transaction_id(); - down_reason_code = MIH_C_LINK_DOWN_REASON_NO_RESOURCE; - link_identifier.link_id.link_type = MIH_C_WIRELESS_UMTS; - link_identifier.link_id.link_addr.choice = (MIH_C_CHOICE_T)MIH_C_CHOICE_3GPP_ADDR; - MIH_C_3GPP_ADDR_load_3gpp_str_address(&link_identifier.link_id.link_addr._union._3gpp_addr, (u_int8_t*)DEFAULT_ADDRESS_3GPP); - link_identifier.choice = MIH_C_LINK_TUPLE_ID_CHOICE_NULL; - - mRALlte_send_link_down_indication(&transaction_id, - &link_identifier, - NULL, - &down_reason_code); - - ralpriv->link_to_be_detected = MIH_C_BOOLEAN_TRUE; - // warning may be repeated several times - } else if ((ralpriv->link_to_be_detected == MIH_C_BOOLEAN_FALSE) && - (ralpriv->curr_signal_level <= ralpriv->integrated_meas_level[0]) && - (ralpriv->integrated_meas_level[0] < ralpriv->prev_integrated_meas_level[0]) && - (ralpriv->integrated_meas_level[0] < PREDEFINED_LINK_GOING_DOWN_INDICATION_SIG_STRENGTH) && - (ralpriv->state != DISCONNECTED) - ) { - transaction_id = MIH_C_get_new_transaction_id(); - - link_identifier.link_id.link_type = MIH_C_WIRELESS_UMTS; - link_identifier.link_id.link_addr.choice = (MIH_C_CHOICE_T)MIH_C_CHOICE_3GPP_ADDR; - MIH_C_3GPP_ADDR_load_3gpp_str_address(&link_identifier.link_id.link_addr._union._3gpp_addr, (u_int8_t*)DEFAULT_ADDRESS_3GPP); - link_identifier.choice = MIH_C_LINK_TUPLE_ID_CHOICE_NULL; - - time_interval = (MIH_C_UNSIGNED_INT2_T)0; // unknown - - going_down_reason_code = MIH_C_LINK_GOING_DOWN_REASON_LINK_PARAMETER_DEGRADING; - - mRALlte_send_link_going_down_indication(&transaction_id, - &link_identifier, - &time_interval, - &going_down_reason_code); - - } else if ((ralpriv->link_to_be_detected == MIH_C_BOOLEAN_TRUE) && (ralpriv->curr_signal_level > PREDEFINED_LINK_DETECTED_INDICATION_SIG_STRENGTH)) { - transaction_id = MIH_C_get_new_transaction_id(); - // MIH_C_LINK_TUPLE_ID_T - link_detected_info.link_tuple_id.link_id.link_type = MIH_C_WIRELESS_UMTS; - link_detected_info.link_tuple_id.link_id.link_addr.choice = (MIH_C_CHOICE_T)MIH_C_CHOICE_3GPP_ADDR; - MIH_C_3GPP_ADDR_set(&link_detected_info.link_tuple_id.link_id.link_addr._union._3gpp_addr, (u_int8_t*)DEFAULT_ADDRESS_3GPP, strlen(DEFAULT_ADDRESS_3GPP)); - link_detected_info.link_tuple_id.choice = MIH_C_LINK_TUPLE_ID_CHOICE_NULL; - // MIH_C_NETWORK_ID_T - MIH_C_NETWORK_ID_set(&link_detected_info.network_id, (u_int8_t *)PREDEFINED_MIH_NETWORK_ID, strlen(PREDEFINED_MIH_NETWORK_ID)); - // MIH_C_NET_AUX_ID_T - MIH_C_NET_AUX_ID_set(&link_detected_info.net_aux_id, (u_int8_t *)PREDEFINED_MIH_NETAUX_ID, strlen(PREDEFINED_MIH_NETAUX_ID)); - // MIH_C_SIG_STRENGTH_T - link_detected_info.sig_strength.choice = MIH_C_SIG_STRENGTH_CHOICE_PERCENTAGE; - link_detected_info.sig_strength._union.percentage = ralpriv->curr_signal_level; - // sinr - link_detected_info.sinr = PREDEFINED_LINK_DETECTED_INDICATION_SINR; - // MIH_C_LINK_DATA_RATE_T - link_detected_info.link_data_rate = PREDEFINED_LINK_DETECTED_INDICATION_LINK_DATA_RATE; - // MIH_C_LINK_MIHCAP_FLAG - link_detected_info.link_mihcap_flag = MIH_C_BIT_EVENT_SERVICE_SUPPORTED | - MIH_C_BIT_COMMAND_SERVICE_SUPPORTED | - MIH_C_BIT_INFORMATION_SERVICE_SUPPORTED; - // MIH_C_NET_CAPS_T - link_detected_info.net_caps = MIH_C_BIT_NET_CAPS_QOS_CLASS0 | - MIH_C_BIT_NET_CAPS_QOS_CLASS1 | - MIH_C_BIT_NET_CAPS_INTERNET_ACCESS; - - - mRALlte_send_link_detected_indication(&transaction_id, &link_detected_info); - ralpriv->link_to_be_detected = MIH_C_BOOLEAN_FALSE; - } - - // LG: TO DO CHECK IF INDEX IS 0 - mRALlte_check_thresholds_signal_strength(ralpriv->integrated_meas_level[0], ralpriv->prev_integrated_meas_level[0]); -} - -//--------------------------------------------------------------------------- -// find correponding cell in NAS measures -int rallte_NAS_corresponding_cell(int req_index) -//--------------------------------------------------------------------------- -{ - int index, i=0; - - while ((i<=ralpriv->num_measures)&&(ralpriv->req_cell_id[req_index]!=ralpriv->meas_cell_id[i])) - i++; - - index = i; - return index; -} - -//--------------------------------------------------------------------------- -void rallte_verifyPendingConnection(void) -{ - //--------------------------------------------------------------------------- - int if_ready = 0; - - if ((ralpriv->pending_req_flag)%5==0) { - DEBUG("Pending Req Flag %d\n", ralpriv->pending_req_flag); - DEBUG(" >>>> rallte_verifyPendingConnection "); - //poll status from driver -#ifdef RAL_DUMMY - IAL_process_DNAS_message(IO_OBJ_CNX, IO_CMD_LIST, ralpriv->cell_id); - - if ((ralpriv->nas_state == NAS_CONNECTED)&&(ralpriv->num_rb>=1)) { - if_ready = 1; - ralpriv->state = CONNECTED; - } - -#endif -#ifdef RAL_REALTIME - IAL_process_NAS_message(IO_OBJ_CNX, IO_CMD_LIST, ralpriv->cell_id); - - if ((ralpriv->nas_state == GRAAL_CX_DCH)&&(ralpriv->num_rb>=1)) { - if_ready = 1; - ralpriv->state = CONNECTED; - } - -#endif - - if ((if_ready==1)||(ralpriv->pending_req_flag > 100)) { - // here or just after ioctl? or between? - //mRALu_send_link_switch_cnf(); - //mRALte_send_link_action_confirm(); - - mRALlte_send_link_action_confirm(&ralpriv->pending_req_transaction_id, &ralpriv->pending_req_status, NULL, &ralpriv->pending_req_ac_result); - - DEBUG("After response, Pending Req Flag = %d\n", ralpriv->pending_req_flag); - ralpriv->pending_req_flag = 0; - // Link_up Ind not needed anymore - //sleep(2); - //mRALte_send_link_up_indication(); - } - } -} diff --git a/openair3/RAL-LTE/RAL-DUMMY/SRC/mRALlte_subscribe.c b/openair3/RAL-LTE/RAL-DUMMY/SRC/mRALlte_subscribe.c deleted file mode 100755 index e9473adba6..0000000000 --- a/openair3/RAL-LTE/RAL-DUMMY/SRC/mRALlte_subscribe.c +++ /dev/null @@ -1,75 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ -#define MRAL_MODULE -#define MRALLTE_SUBSCRIBE_C -#include -#include "mRALlte_subscribe.h" -#include "mRALlte_variables.h" - -//----------------------------------------------------------------------------- -void mRALlte_subscribe_request(MIH_C_Message_Link_Event_Subscribe_request_t* messageP) -{ - //----------------------------------------------------------------------------- - MIH_C_STATUS_T status; - MIH_C_LINK_EVENT_LIST_T mih_subscribed_req_event_list; - - ralpriv->mih_subscribe_req_event_list |= (messageP->primitive.RequestedLinkEventList & ralpriv->mih_supported_link_event_list); - - mih_subscribed_req_event_list = ralpriv->mih_subscribe_req_event_list & messageP->primitive.RequestedLinkEventList; - - status = MIH_C_STATUS_SUCCESS; - - mRALte_send_event_subscribe_confirm(&messageP->header.transaction_id, - &status, - &mih_subscribed_req_event_list); - -} -//----------------------------------------------------------------------------- -void mRALlte_unsubscribe_request(MIH_C_Message_Link_Event_Unsubscribe_request_t* messageP) -{ - //----------------------------------------------------------------------------- - MIH_C_STATUS_T status; - MIH_C_LINK_EVENT_LIST_T mih_unsubscribed_req_event_list; - MIH_C_LINK_EVENT_LIST_T saved_req_event_list; - - saved_req_event_list = ralpriv->mih_subscribe_req_event_list; - - ralpriv->mih_subscribe_req_event_list &= ((messageP->primitive.RequestedLinkEventList & ralpriv->mih_supported_link_event_list) ^ - messageP->primitive.RequestedLinkEventList); - - mih_unsubscribed_req_event_list = ralpriv->mih_subscribe_req_event_list ^ saved_req_event_list; - - status = MIH_C_STATUS_SUCCESS; - - mRALte_send_event_unsubscribe_confirm(&messageP->header.transaction_id, - &status, - &mih_unsubscribed_req_event_list); -} - - diff --git a/openair3/RAL-LTE/RAL-DUMMY/SRC/mRALlte_thresholds.c b/openair3/RAL-LTE/RAL-DUMMY/SRC/mRALlte_thresholds.c deleted file mode 100755 index 8ea0ef24ac..0000000000 --- a/openair3/RAL-LTE/RAL-DUMMY/SRC/mRALlte_thresholds.c +++ /dev/null @@ -1,219 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ -#define MRAL_MODULE -#define MRALLTE_THRESHOLDS_C -#include -#include "mRALlte_thresholds.h" -#include "mRALlte_variables.h" - -//----------------------------------------------------------------------------- -void mRALlte_configure_thresholds_request(MIH_C_Message_Link_Configure_Thresholds_request_t* messageP) -{ - //----------------------------------------------------------------------------- - MIH_C_STATUS_T status; - MIH_C_LINK_CFG_STATUS_LIST_T link_cfg_status_list; - unsigned int threshold_index; - unsigned int link_index; - unsigned int result_index; - - // SAVE REQUEST - // IT IS ASSUMED SINCE IT IS NOT CLEAR IN SPECs THAT THERE IS NO NEED TO MERGE CONFIGURE_THRESHOLDS_requests - //memset(&ralpriv->mih_link_cfg_param_thresholds_list, 0, sizeof(MIH_C_LINK_CFG_PARAM_LIST_T)); - memcpy(&ralpriv->mih_link_cfg_param_thresholds_list, &messageP->primitive.LinkConfigureParameterList_list, sizeof(MIH_C_LINK_CFG_PARAM_LIST_T)); - - status = MIH_C_STATUS_SUCCESS; - - result_index = 0; - - for (link_index = 0; - link_index < messageP->primitive.LinkConfigureParameterList_list.length; - link_index++) { - - ralpriv->active_mih_link_cfg_param_threshold[link_index] = MIH_C_BOOLEAN_TRUE; - - for (threshold_index = 0; - threshold_index < messageP->primitive.LinkConfigureParameterList_list.val[link_index].threshold_list.length; - threshold_index ++) { - - memcpy(&link_cfg_status_list.val[result_index].link_param_type, - &messageP->primitive.LinkConfigureParameterList_list.val[link_index].link_param_type, - sizeof(MIH_C_LINK_PARAM_TYPE_T)); - - memcpy(&link_cfg_status_list.val[result_index].threshold, - &messageP->primitive.LinkConfigureParameterList_list.val[link_index].threshold_list.val[threshold_index], - sizeof(MIH_C_THRESHOLD_T)); - - // NOW, ALWAYS SAY OK FOR PARAMETERS, BUT MAY BE WE WILL PUT MIH_C_BOOLEAN_FALSE in active_mih_link_cfg_param_threshold[link_index] - link_cfg_status_list.val[result_index].config_status = MIH_C_CONFIG_STATUS_SUCCESS; - - result_index += 1; - } - } - - // Say following thresholds entries are not configured - for (link_index = messageP->primitive.LinkConfigureParameterList_list.length; - link_index < MIH_C_LINK_CFG_PARAM_LIST_LENGTH; - link_index++) { - ralpriv->active_mih_link_cfg_param_threshold[link_index] = MIH_C_BOOLEAN_FALSE; - } - - link_cfg_status_list.length = result_index; - - mRALte_send_configure_thresholds_confirm(&messageP->header.transaction_id,&status, &link_cfg_status_list); -} -//----------------------------------------------------------------------------- -void mRALlte_check_thresholds_signal_strength(MIH_C_THRESHOLD_VAL_T new_valP, MIH_C_THRESHOLD_VAL_T old_valP) -{ - //----------------------------------------------------------------------------- - - unsigned int threshold_index, threshold_index_mov; - unsigned int link_index; - unsigned int buffer_index; - MIH_C_THRESHOLD_VAL_T threshold_val; - MIH_C_THRESHOLD_XDIR_T threshold_xdir; - MIH_C_TH_ACTION_T th_action; - LIST(MIH_C_LINK_PARAM_RPT, LinkParametersReportList); - MIH_C_TRANSACTION_ID_T transaction_id; - MIH_C_LINK_TUPLE_ID_T link_identifier; - char buf[256]; - - DEBUG("%s new_val %d old_val %d\n", __FUNCTION__, new_valP, old_valP); - - LinkParametersReportList_list.length = 0; - - for (link_index = 0; - link_index < MIH_C_LINK_CFG_PARAM_LIST_LENGTH; - link_index++) { - - if (ralpriv->active_mih_link_cfg_param_threshold[link_index] == MIH_C_BOOLEAN_TRUE) { - - if ( ralpriv->mih_link_cfg_param_thresholds_list.val[link_index].link_param_type.choice == MIH_C_LINK_PARAM_TYPE_CHOICE_GEN) { - - th_action = ralpriv->mih_link_cfg_param_thresholds_list.val[link_index].th_action; - - for (threshold_index = 0; - threshold_index < ralpriv->mih_link_cfg_param_thresholds_list.val[link_index].threshold_list.length; - threshold_index ++) { - - threshold_val = ralpriv->mih_link_cfg_param_thresholds_list.val[link_index].threshold_list.val[threshold_index].threshold_val; - threshold_xdir = ralpriv->mih_link_cfg_param_thresholds_list.val[link_index].threshold_list.val[threshold_index].threshold_xdir; - - switch (th_action) { - case MIH_C_SET_NORMAL_THRESHOLD: - if (((threshold_xdir == MIH_C_ABOVE_THRESHOLD) && (old_valP <= threshold_val) && (new_valP > threshold_val)) || - ((threshold_xdir == MIH_C_BELOW_THRESHOLD) && (old_valP >= threshold_val) && (new_valP < threshold_val))) { - - memset(buf, 0, 256); - buffer_index = sprintf(buf, "CROSSED NORMAL THRESHOLD VAL %d DIR ", threshold_val); - buffer_index = MIH_C_THRESHOLD_XDIR2String2(&threshold_xdir, &buf[buffer_index]); - buffer_index = sprintf(buf, " with VAL %d\n", new_valP); - NOTICE("%s", buf); - - LinkParametersReportList_list.val[LinkParametersReportList_list.length].link_param.link_param_type.choice = MIH_C_LINK_PARAM_TYPE_CHOICE_GEN; - LinkParametersReportList_list.val[LinkParametersReportList_list.length].link_param.link_param_type._union.link_param_gen = MIH_C_LINK_PARAM_GEN_SIGNAL_STRENGTH; - LinkParametersReportList_list.val[LinkParametersReportList_list.length].link_param.choice = MIH_C_LINK_PARAM_CHOICE_LINK_PARAM_VAL; - LinkParametersReportList_list.val[LinkParametersReportList_list.length].link_param._union.link_param_val = new_valP; - - LinkParametersReportList_list.val[LinkParametersReportList_list.length].choice = MIH_C_LINK_PARAM_RPT_CHOICE_THRESHOLD; - LinkParametersReportList_list.val[LinkParametersReportList_list.length]._union.threshold.threshold_val = threshold_val; - LinkParametersReportList_list.val[LinkParametersReportList_list.length]._union.threshold.threshold_xdir = threshold_xdir; - LinkParametersReportList_list.length = LinkParametersReportList_list.length + 1; - } - - break; - - case MIH_C_SET_ONE_SHOT_THRESHOLD: - if (((threshold_xdir == MIH_C_ABOVE_THRESHOLD) && (old_valP <= threshold_val) && (new_valP > threshold_val)) || - ((threshold_xdir == MIH_C_BELOW_THRESHOLD) && (old_valP >= threshold_val) && (new_valP < threshold_val))) { - - memset(buf, 0, 256); - buffer_index = sprintf(buf, "CROSSED ONE SHOT THRESHOLD VAL %d DIR ", threshold_val); - buffer_index = MIH_C_THRESHOLD_XDIR2String2(&threshold_xdir, &buf[buffer_index]); - buffer_index = sprintf(buf, " with VAL %d\n", new_valP); - NOTICE("%s", buf); - - LinkParametersReportList_list.val[LinkParametersReportList_list.length].link_param.link_param_type.choice = MIH_C_LINK_PARAM_TYPE_CHOICE_GEN; - LinkParametersReportList_list.val[LinkParametersReportList_list.length].link_param.link_param_type._union.link_param_gen = MIH_C_LINK_PARAM_GEN_SIGNAL_STRENGTH; - LinkParametersReportList_list.val[LinkParametersReportList_list.length].link_param.choice = MIH_C_LINK_PARAM_CHOICE_LINK_PARAM_VAL; - LinkParametersReportList_list.val[LinkParametersReportList_list.length].link_param._union.link_param_val = new_valP; - - LinkParametersReportList_list.val[LinkParametersReportList_list.length].choice = MIH_C_LINK_PARAM_RPT_CHOICE_THRESHOLD; - LinkParametersReportList_list.val[LinkParametersReportList_list.length]._union.threshold.threshold_val = threshold_val; - LinkParametersReportList_list.val[LinkParametersReportList_list.length]._union.threshold.threshold_xdir = threshold_xdir; - LinkParametersReportList_list.length = LinkParametersReportList_list.length + 1; - - // Remove this threshold: shift Thresholds - for (threshold_index_mov = threshold_index; - threshold_index_mov < ralpriv->mih_link_cfg_param_thresholds_list.val[link_index].threshold_list.length - 1; - threshold_index_mov ++) { - memcpy(&ralpriv->mih_link_cfg_param_thresholds_list.val[link_index].threshold_list.val[threshold_index_mov], - &ralpriv->mih_link_cfg_param_thresholds_list.val[link_index].threshold_list.val[threshold_index_mov+1], - sizeof(MIH_C_THRESHOLD_T)); - } - } - - break; - - // may be not necessary here - case MIH_C_CANCEL_THRESHOLD: - - // shift Thresholds - for (threshold_index_mov = threshold_index; - threshold_index_mov < ralpriv->mih_link_cfg_param_thresholds_list.val[link_index].threshold_list.length - 1; - threshold_index_mov ++) { - memcpy(&ralpriv->mih_link_cfg_param_thresholds_list.val[link_index].threshold_list.val[threshold_index_mov], - &ralpriv->mih_link_cfg_param_thresholds_list.val[link_index].threshold_list.val[threshold_index_mov+1], - sizeof(MIH_C_THRESHOLD_T)); - } - - ralpriv->mih_link_cfg_param_thresholds_list.val[link_index].threshold_list.length -= 1; - break; - - default: - ERR("%s UNKNOWN TH ACTION FOUND, RETURN", __FUNCTION__); - return; - } - } - } - } - } - - if (LinkParametersReportList_list.length > 0) { - transaction_id = MIH_C_get_new_transaction_id(); - - link_identifier.link_id.link_type = MIH_C_WIRELESS_UMTS; - link_identifier.link_id.link_addr.choice = (MIH_C_CHOICE_T)MIH_C_CHOICE_3GPP_ADDR; - MIH_C_3GPP_ADDR_set(&link_identifier.link_id.link_addr._union._3gpp_addr, (u_int8_t*)DEFAULT_ADDRESS_3GPP, strlen(DEFAULT_ADDRESS_3GPP)); - link_identifier.choice = MIH_C_LINK_TUPLE_ID_CHOICE_NULL; - - mRALlte_send_link_parameters_report_indication(&transaction_id, - &link_identifier, - &LinkParametersReportList_list); - } -} \ No newline at end of file diff --git a/openair3/RAL-LTE/RAL-DUMMY/SRC/nasRGdummy.c b/openair3/RAL-LTE/RAL-DUMMY/SRC/nasRGdummy.c deleted file mode 100644 index 6df6fe19a5..0000000000 --- a/openair3/RAL-LTE/RAL-DUMMY/SRC/nasRGdummy.c +++ /dev/null @@ -1,223 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ -#include - - -#include -#include -#include -#include -#include -#include -#include - -#include "nas_rg_netlink.h" - -//int state, cell_id; -//int rb_id; - -int NAS_TQAL_sock_connect(void) -{ - struct sockaddr_un remote; - int len,s; - - if ((s = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) { - perror("NAS_TQAL_sock_connect - socket"); - exit(1); - } - - printf("Trying to connect...\n"); - remote.sun_family = AF_UNIX; - strcpy(remote.sun_path, SOCK_TQAL_NAS_PATH); - len = strlen(remote.sun_path) + sizeof(remote.sun_family); - - if (connect(s, (struct sockaddr *)&remote, len) == -1) { - perror("NAS_TQAL_sock_connect - connect() failed"); - exit(1); - } - - printf("Connected to TQAL.\n"); - return s; -} - -int NAS_TQALreceive(int s) -{ - char str1[NAS_RG_NETL_MAXLEN]; - char str2[NAS_RG_NETL_MAXLEN]; - int t, done; - int ix; - struct nas_rg_netl_request *msgToRcve; - struct nas_rg_netl_reply *msgToSend; - - done = 0; - t = recv(s, str1, NAS_RG_NETL_MAXLEN, 0); - - if (t <= 0) { - if (t < 0) perror("NAS_TQALreceive : recv() failed"); - - done = 1; - } - - printf("message from TQAL, length: %d\n", t); - - msgToRcve = (struct nas_rg_netl_request *) str1; - msgToSend = (struct nas_rg_netl_reply *) str2; - memset(str2, 0, NAS_RG_NETL_MAXLEN); - - switch (msgToRcve->type) { - case NAS_RG_MSG_RB_ESTABLISH_REQUEST: - printf("NAS_RG_MSG_RB_ESTABLISH_REQUEST received\n"); - msgToSend->type = NAS_RG_MSG_RB_ESTABLISH_REPLY; - msgToSend->length = sizeof(struct nas_rg_netl_hdr)+sizeof(struct nas_rg_msg_rb_establish_reply); - msgToSend->tqalNASPrimitive.rb_est_rep.cnxid = msgToRcve->tqalNASPrimitive.rb_est_req.cnxid; - ix = (msgToRcve->tqalNASPrimitive.rb_est_req.cnxid-1) % 32; - msgToSend->tqalNASPrimitive.rb_est_rep.ue_id = (msgToRcve->tqalNASPrimitive.rb_est_req.cnxid - ix - 1)/32; - msgToSend->tqalNASPrimitive.rb_est_rep.RBParms.rbId = msgToRcve->tqalNASPrimitive.rb_est_req.RBParms.rbId; - msgToSend->tqalNASPrimitive.rb_est_rep.RBParms.QoSclass = msgToRcve->tqalNASPrimitive.rb_est_req.RBParms.QoSclass; - msgToSend->tqalNASPrimitive.rb_est_rep.RBParms.dscp = msgToRcve->tqalNASPrimitive.rb_est_req.RBParms.dscp; - msgToSend->tqalNASPrimitive.rb_est_rep.result = NAS_CONNECTED; - printf("Establishing Radio Bearer - cnx_id %d, Rb_id %d , QoSclass %d, dscp %d\n\n", - msgToSend->tqalNASPrimitive.rb_est_rep.cnxid , - msgToSend->tqalNASPrimitive.rb_est_rep.RBParms.rbId , - msgToSend->tqalNASPrimitive.rb_est_rep.RBParms.QoSclass, - msgToSend->tqalNASPrimitive.rb_est_rep.RBParms.dscp ); - break; - - case NAS_RG_MSG_RB_RELEASE_REQUEST: - printf("NAS_RG_MSG_RB_RELEASE_REQUEST received\n"); - msgToSend->type = NAS_RG_MSG_RB_RELEASE_REPLY; - msgToSend->length = sizeof(struct nas_rg_netl_hdr)+sizeof(struct nas_rg_msg_rb_release_reply); - msgToSend->tqalNASPrimitive.rb_rel_rep.cnxid = msgToRcve->tqalNASPrimitive.rb_rel_req.cnxid; - msgToSend->tqalNASPrimitive.rb_rel_rep.ue_id = msgToRcve->tqalNASPrimitive.rb_rel_req.ue_id; - msgToSend->tqalNASPrimitive.rb_rel_rep.result = NAS_DISCONNECTED; - printf("Releasing Radio Bearer - cnx_id %d, ue_id %d\n\n", - msgToSend->tqalNASPrimitive.rb_rel_rep.cnxid, - msgToSend->tqalNASPrimitive.rb_rel_rep.ue_id); - break; - - case NAS_RG_MSG_MT_MCAST_JOIN: - printf("NAS_RG_MSG_MT_MCAST_JOIN received\n"); - msgToSend->type = NAS_RG_MSG_MT_MCAST_JOIN_REP; - msgToSend->length = sizeof(struct nas_rg_netl_hdr)+sizeof(struct nas_rg_msg_mt_mcast_join_rep); - msgToSend->tqalNASPrimitive.mt_mc_join_rep.cnxid = msgToRcve->tqalNASPrimitive.mt_mcast_join.cnxid; - msgToSend->tqalNASPrimitive.mt_mc_join_rep.ue_id = msgToRcve->tqalNASPrimitive.mt_mcast_join.ue_id; - msgToSend->tqalNASPrimitive.mt_mc_join_rep.result = NAS_CONNECTED; - printf("MT Joining Multicast - cnx_id %d, ue_id %d\n\n", - msgToSend->tqalNASPrimitive.mt_mc_join_rep.cnxid, - msgToSend->tqalNASPrimitive.mt_mc_join_rep.ue_id); - break; - - case NAS_RG_MSG_MT_MCAST_LEAVE: - printf("NAS_RG_MSG_MT_MCAST_LEAVE received\n"); - msgToSend->type = NAS_RG_MSG_MT_MCAST_LEAVE_REP; - msgToSend->length = sizeof(struct nas_rg_netl_hdr)+sizeof(struct nas_rg_msg_mt_mcast_leave_rep); - msgToSend->tqalNASPrimitive.mt_mc_leavce_rep.cnxid = msgToRcve->tqalNASPrimitive.mt_mcast_leave.cnxid; - msgToSend->tqalNASPrimitive.mt_mc_leavce_rep.ue_id = msgToRcve->tqalNASPrimitive.mt_mcast_leave.ue_id; - msgToSend->tqalNASPrimitive.mt_mc_leavce_rep.result = NAS_DISCONNECTED; - printf("MT Leaving Multicast - cnx_id %d, ue_id %d\n\n", - msgToSend->tqalNASPrimitive.mt_mc_leavce_rep.cnxid, - msgToSend->tqalNASPrimitive.mt_mc_leavce_rep.ue_id); - break; - - case NAS_RG_MSG_CNX_STATUS_REQUEST: - printf("NAS_RG_MSG_CNX_STATUS_REQUEST received\n"); - break; - - case NAS_RG_MSG_RB_LIST_REQUEST: - printf("NAS_RG_MSG_RB_LIST_REQUEST received\n"); - break; - - case NAS_RG_MSG_STATISTIC_REQUEST: - printf("NAS_RG_MSG_STATISTIC_REQUEST received\n"); - break; - - case NAS_RG_MSG_MEASUREMENT_REQUEST: - printf("NAS_RG_MSG_MEASUREMENT_REQUEST received\n"); - break; - - default: - printf ("Invalid message Type %d\n",msgToRcve->type); - break; - } - - if (send(s, str2, msgToSend->length, 0) < 0) { - perror("NAS_TQALreceive : send() failed"); - done = 1; - } - - printf ("message sent to TQAL %d\n",msgToSend->length); - - return done; - -} - -int main(void) -{ - int s_ral, rc, done; - fd_set readfds; - struct timeval tv; - - /* Connect to the RAL-LTE */ - do { - s_ral = NAS_TQAL_sock_connect(); - - if (s_ral <= 0) { - sleep(2); - } - } while (s_ral < 0); - - done = 0; - - do { - // Create fd_set and wait for input - FD_ZERO(&readfds); - FD_SET (s_ral, &readfds); - tv.tv_sec = 0; - tv.tv_usec = 100000; // timeout select for 100ms and read FIFOs - - rc = select(FD_SETSIZE, &readfds, NULL, NULL, &tv); - - if (rc ==-1) { - perror("main : select() failed"); - done = 1; - } - - // something received ! - if (rc >= 0) { - if (FD_ISSET(s_ral, &readfds)) { - done = NAS_TQALreceive(s_ral); - } - } - - } while (!done); - - close(s_ral); - - return 0; -} diff --git a/openair3/RAL-LTE/RAL-DUMMY/SRC/nasUEdummy.c b/openair3/RAL-LTE/RAL-DUMMY/SRC/nasUEdummy.c deleted file mode 100755 index 30bfe48cce..0000000000 --- a/openair3/RAL-LTE/RAL-DUMMY/SRC/nasUEdummy.c +++ /dev/null @@ -1,464 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "nas_ue_netlink.h" - -#define CONF_NASUE_DUMMY -#define CONF_UNKNOWN_CELL_ID 0 - -#include "nasUE_config.h" - -int state, cell_id; - -#define MEAS_MAX_RSSI 110 - - -#ifdef MIH_USER_CONTROL -char *g_mih_user_ip_address = MIH_USER_IP_ADDRESS; -char *g_mih_user_remote_port = MIH_USER_REMOTE_PORT; -char *g_nas_ip_address = NAS_IP_ADDRESS; -char *g_nas_listening_port_for_mih_user = NAS_LISTENING_PORT_FOR_MIH_USER; -int g_sockd_mih_user; -signed int g_mih_user_rssi_increment = 0; -//--------------------------------------------------------------------------- -int NAS_mihuser_connect(void) -{ - //--------------------------------------------------------------------------- - struct addrinfo hints; - struct addrinfo *result, *rp; - int s, on; - struct sockaddr_in *addr = NULL; - struct sockaddr_in6 *addr6 = NULL; - unsigned char buf[sizeof(struct sockaddr_in6)]; - - - memset(&hints, 0, sizeof(struct addrinfo)); - hints.ai_family = AF_UNSPEC; /* Allow IPv4 or IPv6 */ - hints.ai_socktype = SOCK_DGRAM; /* Datagram socket */ - hints.ai_flags = 0; - hints.ai_protocol = 0; /* Any protocol */ - - s = getaddrinfo(g_mih_user_ip_address, g_mih_user_remote_port, &hints, &result); - - if (s != 0) { - printf("ERR getaddrinfo: %s\n", gai_strerror(s)); - return -1; - } - - /* getaddrinfo() returns a list of address structures. - Try each address until we successfully connect(2). - If socket(2) (or connect(2)) fails, we (close the socket - and) try the next address. */ - - for (rp = result; rp != NULL; rp = rp->ai_next) { - g_sockd_mih_user = socket(rp->ai_family, rp->ai_socktype, rp->ai_protocol); - - if (g_sockd_mih_user == -1) - continue; - - on = 1; - setsockopt( g_sockd_mih_user, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on)); - - if(rp->ai_family == AF_INET) { - printf("Destination address %s is an ipv4 address\n",g_mih_user_ip_address); - addr = (struct sockaddr_in *)(&buf[0]); - addr->sin_port = htons(atoi(g_nas_listening_port_for_mih_user)); - addr->sin_family = AF_INET; - s = inet_pton(AF_INET, g_nas_ip_address, &addr->sin_addr); - - if (s <= 0) { - if (s == 0) { - printf("ERR IP NAS address should be a IPv4 ADDR - But found not in presentation format : %s\n", g_nas_ip_address); - } else { - printf("ERR %s - inet_pton(NAS IPv4 ADDR %s): %s\n", __FUNCTION__, g_nas_ip_address, strerror(s)); - } - - return -1; - } - - s = bind(g_sockd_mih_user, (const struct sockaddr *)addr, sizeof(struct sockaddr_in)); - - if (s == -1) { - printf("ERR NAS IPv4 Address Bind: %s\n", strerror(errno)); - return -1; - } - - // sockd_mihf is of type SOCK_DGRAM, rp->ai_addr is the address to which datagrams are sent by default - if (connect(g_sockd_mih_user, rp->ai_addr, rp->ai_addrlen) != -1) { - printf(" NAS is now UDP-CONNECTED to MIH-F\n"); - return 0; - } else { - close(g_sockd_mih_user); - } - } else if (rp->ai_family == AF_INET6) { - printf("Destination address %s is an ipv6 address\n",g_mih_user_ip_address); - addr6 = (struct sockaddr_in6 *)(&buf[0]); - addr6->sin6_port = htons(atoi(g_nas_listening_port_for_mih_user)); - addr6->sin6_family = AF_INET6; - s = inet_pton(AF_INET, g_nas_ip_address, &addr6->sin6_addr); - - if (s <= 0) { - if (s == 0) { - printf("ERR IP NAS address should be a IPv6 ADDR, But found not in presentation format : %s\n", g_nas_ip_address); - } else { - printf("ERR %s - inet_pton(NAS IPv6 ADDR %s): %s\n", __FUNCTION__, g_nas_ip_address, strerror(s)); - } - - return -1; - } - - s = bind(g_sockd_mih_user, (const struct sockaddr *)addr6, sizeof(struct sockaddr_in)); - - if (s == -1) { - printf("ERR NAS IPv6 Address Bind: %s\n", strerror(errno)); - return -1; - } - - if (connect(g_sockd_mih_user, rp->ai_addr, rp->ai_addrlen) != -1) { - printf(" NAS is now able to receive UDP control messages from MIH-User\n"); - return 0; - } else { - close(g_sockd_mih_user); - } - } else { - printf("ERR %s is an unknown address format %d\n",g_mih_user_ip_address,rp->ai_family); - } - - close(g_sockd_mih_user); - } - - if (rp == NULL) { /* No address succeeded */ - printf("ERR Could not establish socket to MIH-User\n"); - return -1; - } - - return -1; -} - -int NAS_MIHUSERreceive(int sock) -{ - unsigned char str[NAS_UE_NETL_MAXLEN]; - int t, done; - t=recv(sock, str, NAS_UE_NETL_MAXLEN, 0); - - if (t <= 0) { - if (t < 0) perror("NAS_MIHUSERreceive : recv"); - - done = 1; - } - - printf("\nmessage from MIH-USER, length: %d\n", t); - - switch (str[0]) { - case 0xff: - printf("MIH-USER ASK FOR DECREASING RSSI\n"); - g_mih_user_rssi_increment = -RSSI_INCREMENT_STEP; - break; - - case 0x00: - printf("MIH-USER ASK FOR NOT MODIFYING RSSI\n"); - g_mih_user_rssi_increment = 0; - break; - - case 0x01: - printf("MIH-USER ASK FOR INCREASING RSSI\n"); - g_mih_user_rssi_increment = RSSI_INCREMENT_STEP; - break; - - default: - printf("received %hx\n", str[0]); - return -1; - } - - return 0; -} -#endif -int NAS_IAL_sock_connect(void) -{ - struct sockaddr_un remote; - int len,s; - - if ((s = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) { - perror("NAS_IALconnect - socket"); - exit(1); - } - - printf("Trying to connect...\n"); - remote.sun_family = AF_UNIX; - strcpy(remote.sun_path, SOCK_NAS_PATH); - len = strlen(remote.sun_path) + sizeof(remote.sun_family); - - if (connect(s, (struct sockaddr *)&remote, len) == -1) { - perror("NAS_IALconnect - connect"); - return -1; - } - - printf("Connected.\n"); - return s; -} - - -int NAS_IALreceive(int s) -{ - char str1[NAS_UE_NETL_MAXLEN]; - char str2[NAS_UE_NETL_MAXLEN]; - int i, t, done; - struct nas_ue_netl_request *msgToRcve; - struct nas_ue_netl_reply *msgToSend; - - done =0; - t=recv(s, str1, NAS_UE_NETL_MAXLEN, 0); - - if (t <= 0) { - if (t < 0) perror("RAL_process_command : recv"); - - done = 1; - } - - printf("\nmessage from RAL, length: %d\n", t); - - msgToRcve = (struct nas_ue_netl_request *) str1; - msgToSend = (struct nas_ue_netl_reply *) str2; - memset(str2,0,NAS_UE_NETL_MAXLEN); - - switch (msgToRcve->type) { - case NAS_UE_MSG_CNX_ESTABLISH_REQUEST: - printf("NAS_UE_MSG_CNX_ESTABLISH_REQUEST received\n"); - msgToSend->type = NAS_UE_MSG_CNX_ESTABLISH_REPLY; - msgToSend->length = sizeof(struct nas_ue_netl_hdr)+sizeof(struct nas_ue_msg_cnx_establish_reply); - msgToSend->ialNASPrimitive.cnx_est_rep.status = NAS_CONNECTED; - state = NAS_CONNECTED; - cell_id = msgToRcve->ialNASPrimitive.cnx_req.cellid; - break; - - case NAS_UE_MSG_CNX_RELEASE_REQUEST: - printf("NAS_UE_MSG_CNX_RELEASE_REQUEST received\n"); - msgToSend->type = NAS_UE_MSG_CNX_RELEASE_REPLY; - msgToSend->length = sizeof(struct nas_ue_netl_hdr)+sizeof(struct nas_ue_msg_cnx_release_reply); - msgToSend->ialNASPrimitive.cnx_rel_rep.status = NAS_DISCONNECTED; - state = NAS_DISCONNECTED; - cell_id = CONF_UNKNOWN_CELL_ID; - break; - - case NAS_UE_MSG_CNX_LIST_REQUEST: - printf("NAS_UE_MSG_CNX_LIST_REQUEST received\n"); - msgToSend->type = NAS_UE_MSG_CNX_LIST_REPLY; - msgToSend->length = sizeof(struct nas_ue_netl_hdr)+sizeof(struct nas_ue_msg_cnx_list_reply); - msgToSend->ialNASPrimitive.cnx_list_rep.state = state; - msgToSend->ialNASPrimitive.cnx_list_rep.cellid = cell_id; - msgToSend->ialNASPrimitive.cnx_list_rep.iid4 = CONF_iid4; - msgToSend->ialNASPrimitive.cnx_list_rep.iid6[0] = conf_iid6_0[CONF_MT0]; - msgToSend->ialNASPrimitive.cnx_list_rep.iid6[1] = conf_iid6_1[CONF_MT0]; - - if (state == NAS_CONNECTED) { - msgToSend->ialNASPrimitive.cnx_list_rep.num_rb = CONF_num_rb; - msgToSend->ialNASPrimitive.cnx_list_rep.nsclassifier = CONF_num_rb; - } - - break; - - case NAS_UE_MSG_CNX_STATUS_REQUEST: - printf("NAS_UE_MSG_CNX_STATUS_REQUEST received\n"); - msgToSend->type = NAS_UE_MSG_CNX_STATUS_REPLY; - msgToSend->length = sizeof(struct nas_ue_netl_hdr)+sizeof(struct nas_ue_msg_cnx_status_reply); - msgToSend->ialNASPrimitive.cnx_stat_rep.status = state; - msgToSend->ialNASPrimitive.cnx_stat_rep.cellid = cell_id; - - if (state == NAS_CONNECTED) { - msgToSend->ialNASPrimitive.cnx_stat_rep.num_rb = CONF_num_rb; - msgToSend->ialNASPrimitive.cnx_stat_rep.signal_level = conf_level[0]; - } - - break; - - case NAS_UE_MSG_RB_LIST_REQUEST: - printf("NAS_UE_MSG_RB_LIST_REQUEST received\n"); - msgToSend->type = NAS_UE_MSG_RB_LIST_REPLY; - msgToSend->length = sizeof(struct nas_ue_netl_hdr)+sizeof(struct nas_ue_msg_rb_list_reply); - - if (state == NAS_CONNECTED) { - msgToSend->ialNASPrimitive.rb_list_rep.num_rb = CONF_num_rb; - - for (i=0; iialNASPrimitive.rb_list_rep.RBList[i].rbId = conf_rbId[i]; - msgToSend->ialNASPrimitive.rb_list_rep.RBList[i].QoSclass = conf_qoSclass[i]; - msgToSend->ialNASPrimitive.rb_list_rep.RBList[i].dscp = conf_dscp[i]; - } - } - - break; - - case NAS_UE_MSG_STATISTIC_REQUEST: - printf("NAS_UE_MSG_STATISTIC_REQUEST received\n"); - msgToSend->type = NAS_UE_MSG_STATISTIC_REPLY; - msgToSend->length = sizeof(struct nas_ue_netl_hdr)+sizeof(struct nas_ue_msg_statistic_reply); - - if (state == NAS_CONNECTED) { - msgToSend->ialNASPrimitive.statistics_rep.rx_packets = CONF_rx_packets; - msgToSend->ialNASPrimitive.statistics_rep.tx_packets = CONF_tx_packets; - msgToSend->ialNASPrimitive.statistics_rep.rx_bytes = CONF_rx_bytes; - msgToSend->ialNASPrimitive.statistics_rep.tx_bytes = CONF_tx_bytes; - msgToSend->ialNASPrimitive.statistics_rep.rx_errors = CONF_rx_errors; - msgToSend->ialNASPrimitive.statistics_rep.tx_errors = CONF_tx_errors; - msgToSend->ialNASPrimitive.statistics_rep.rx_dropped = CONF_rx_dropped; - msgToSend->ialNASPrimitive.statistics_rep.tx_dropped = CONF_tx_dropped; - } - - break; - - case NAS_UE_MSG_MEAS_REQUEST: - printf("NAS_UE_MSG_MEAS_REQUEST received\n"); - msgToSend->type = NAS_UE_MSG_MEAS_REPLY; - msgToSend->length = sizeof(struct nas_ue_netl_hdr)+sizeof(struct nas_ue_msg_measure_reply); - msgToSend->ialNASPrimitive.meas_rep.num_cells = CONF_num_cells; - printf("\tSignal levels sent "); - - for (i=0; i MEAS_MAX_RSSI) conf_level[i] = MEAS_MAX_RSSI; - - if (conf_level[i] < 0) conf_level[i] = 0; - } - -#endif - msgToSend->ialNASPrimitive.meas_rep.measures[i].cell_id = conf_cell_id[i]; - msgToSend->ialNASPrimitive.meas_rep.measures[i].level = conf_level[i]; - msgToSend->ialNASPrimitive.meas_rep.measures[i].provider_id = conf_provider_id[i]; - printf ("| cell %d : %d ", conf_cell_id[i], conf_level[i]); - } - - printf("\n"); - break; - - case NAS_UE_MSG_IMEI_REQUEST: - printf("NAS_UE_MSG_IMEI_REQUEST received\n"); - msgToSend->type = NAS_UE_MSG_IMEI_REPLY; - msgToSend->length = sizeof(struct nas_ue_netl_hdr)+sizeof(struct nas_ue_l2id_reply); - msgToSend->ialNASPrimitive.l2id_rep.l2id[0] = conf_iid6_0[CONF_MT0]; - msgToSend->ialNASPrimitive.l2id_rep.l2id[1] = conf_iid6_1[CONF_MT0]; - state = NAS_DISCONNECTED; - cell_id = CONF_UNKNOWN_CELL_ID; - break; - - default: - printf ("Invalid message Type %d\n",msgToRcve->type); - } - - if (send(s, str2, msgToSend->length, 0) < 0) { - perror("IAL_process_command : send"); - done = 1; - } - - printf ("Response message sent to RAL %d\n",msgToSend->length); - - return done; - -} - -int main(void) -{ - int s = 0; - int rc, done; - fd_set readfds; - struct timeval tv; - - do { - s= NAS_IAL_sock_connect(); - - if (s <= 0) { - sleep(2); - } - } while (s < 0); - -#ifdef MIH_USER_CONTROL - NAS_mihuser_connect(); -#endif - - done = 0; - - do { - // Create fd_set and wait for input - FD_ZERO(&readfds); - FD_SET (s, &readfds); -#ifdef MIH_USER_CONTROL - FD_SET (g_sockd_mih_user, &readfds); -#endif - tv.tv_sec = 0; - tv.tv_usec = 100000; // timeout select for 100ms and read FIFOs - - rc = select(FD_SETSIZE, &readfds, NULL, NULL, &tv); - - if (rc ==-1) { - perror("select"); - done = 1; - } - - // something received ! - if (rc>=0) { - if (FD_ISSET(s,&readfds)) { - done = NAS_IALreceive(s); - } - -#ifdef MIH_USER_CONTROL - - if (FD_ISSET(g_sockd_mih_user,&readfds)) { - done = NAS_MIHUSERreceive(g_sockd_mih_user); - } - -#endif - } - - } while (!done); - - - close(s); - - return 0; -} - - diff --git a/openair3/RAL-LTE/RAL-LTE.readme.txt b/openair3/RAL-LTE/RAL-LTE.readme.txt deleted file mode 100644 index 87fad4b6ef..0000000000 --- a/openair3/RAL-LTE/RAL-LTE.readme.txt +++ /dev/null @@ -1,113 +0,0 @@ -Doc updated on 13/05/2013 - -README file for LTE_LINK_SAP - - ****************** - Release dates - - D0.1 : 13/05/2013 (RAL_UE only) - ****************** - - Content - 1. Install odtone on ubuntu - 2. Test RAL-Dummy - 3. Install and run LTE-RAL-UE - - ****************** - 1. Install odtone on ubuntu - - A. Download Boost v1.48 + ODTONE (Medieval Version) in a directory named myDir for example - - B. unzip both files, creating folders boost_1_48_0 and odtone - - C. Compile boost.build - > cd myDir/boost_1_48_0/tools/build/v2 - > ./bootstrap.sh - > sudo ./b2 install - - D. Compile ODTONE - > cd myDir/odtone - > b2 - ==> this creates odtone-mihf and miis executables in the myDir/odtone/dist directory and copies odtone.conf in that same directory - - E. Test Local demo - 1- compile mih user - > cd myDir/odtone/app/cm_demo1 - > b2 - ==> this creates cm_demo1 executable in the myDir/odtone/dist directory and copies mih_usr.conf in that same directory - 2- compile Link sap - > cd myDir/odtone/app/link_sap - > b2 - ==> this creates link_sap executable in the myDir/odtone/dist directory and copies link_sap.conf in that same directory - 3- check configuration files and update if needed (see ODTONE doc) - 4- open 3 terminals in the odtone/dist directory, each one for running an executable in the following order - T1 : > ./odtone-mihf - T2 : > ./link_sap - T3 : > ./cm_demo1 - - ****************** - 2. Test RAL-Dummy - - A. Install LTE user - copy the LTE user folder from openair3/RAL-LTE/RAL-DUMMY/802.21-SCENARIO/VERSION0 to the app directory - > b2 linkflags=-lrt - - B. Compile the RAL-Dummy - > cd /openair3/RAL-LTE/RAL-DUMMY - > make - ==> this creates several executables: - - mRALlteDummy + NASUEdummy for the UE - - eRALlteDummy + NASRGdummy for the eNB - A small tool to trigger action on NASUEdummy is provided in RAL-DUMMY/802.21-SCENARIO : "sendUDP-01" and "sendUDP-FF" (see below) - - C. Execute RAL-UE simulation - - note : path1 = myDir/odtone, path2 = /openair3/RAL-LTE - - Requires 5 terminals started in the following order (next step = create scripts) - - T1 > cd path1/dist - > ./odtone-mihf --log=4 - - T2 > cd path2/RAL-DUMMY - > ./mRALlteDummy -c - - T3 > cd path2/RAL-DUMMY - > ./NASUEdummy - - T4 > cd path1/dist - > ./lte_user - - T5 > cd path2/RAL-DUMMY/802.21-SCENARIO - When USER receives MIH_Link_Get_Parameters_confirm - > sendUDP-01 - ==> this tests link detection and activation - When USER receives the second MIH_Link_Actions.confirm - > sendUDP-FF - ==> this tests link parameters report going down and de-activation - -****************** - 3. Install and run LTE-RAL-UE - - A. Install LTE user - copy the lte_test_user folder from openair3/RAL-LTE/LTE_RAL_UE/MIH-USER to the app directory of ODTONE - > b2 linkflags=-lrt - - B. Compile the LTE_RAL_UE - > cd /openair3/RAL-LTE/LTE_RAL_UE - > make - ==> this creates the LTE_RAL_UE executable - - C. Run the LTE_RAL_UE - - note : path1 = myDir/odtone, path2 = /openair3/RAL-LTE - - Requires 3 terminals started in the following order (next step = create scripts) - - start OAI platform in CELLULAR mode - - T1 > cd path1/dist - > ./odtone-mihf --log=4 - - T2 > cd path2/LTE_RAL_UE - > ./LTE_RAL_UE - - T3 > cd path1/dist - > ./lte_user - - - - - - diff --git a/openairITS/ieee80211p_compile_modules.sh b/openairITS/ieee80211p_compile_modules.sh deleted file mode 100644 index 5715a6dd39..0000000000 --- a/openairITS/ieee80211p_compile_modules.sh +++ /dev/null @@ -1,41 +0,0 @@ -#!/bin/sh - -## INSTRUCTIONS -## - check the coherence of the OPENAIRITS_DIR and MOD_DIR with YOUR platform -## - configure the module dependencies by running the following command: -## sudo depmod -a -## - install 'iw' by the following command: -## sudo apt-get install iw -## - allow Ubuntu to reply to a PING in Broadcast by the following command: -## echo 0 | sudo tee /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts -## run the following shell -## voila !! - -#Path configuration -MOD_DIR=/lib/modules/`uname -r`/kernel -#MOD_DIR=/lib/modules/2.6.32.11+drm33.2.openairinterface.bigphys.rtai/updates - -#Modules compilation -cd ${OPENAIRITS_DIR}/mac/DOT11/ -sudo make clean -sudo make MAC=1 - -sudo rm ${MOD_DIR}/compat/compat.ko -sudo rm ${MOD_DIR}/net/wireless/cfg80211.ko -sudo rm ${MOD_DIR}/net/mac80211/mac80211_eurecom.ko - -sudo mkdir ${MOD_DIR}/compat -sudo mkdir ${MOD_DIR}/net/wireless -sudo mkdir ${MOD_DIR}/net/mac80211 - -sudo cp ${OPENAIRITS_DIR}/mac/DOT11/compat/compat.ko ${MOD_DIR}/compat/compat.ko -sudo cp ${OPENAIRITS_DIR}/mac/DOT11/net/wireless/cfg80211.ko ${MOD_DIR}/net/wireless/cfg80211.ko -sudo cp ${OPENAIRITS_DIR}/mac/DOT11/net/mac80211/mac80211_eurecom.ko ${MOD_DIR}/net/mac80211/mac80211_eurecom.ko - -cd ${OPENAIRITS_DIR}/phy/DRIVERS/ -sudo make clean -sudo make - -#Go back to the source directory -cd ${OPENAIRITS_DIR} - diff --git a/openairITS/ieee80211p_configure_interface.sh b/openairITS/ieee80211p_configure_interface.sh deleted file mode 100644 index 9f4e93ecbb..0000000000 --- a/openairITS/ieee80211p_configure_interface.sh +++ /dev/null @@ -1,20 +0,0 @@ -## INSTRUCTIONS -## - check the coherence of the OPENAIRITS_DIR and MOD_DIR with YOUR platform -## - configure the module dependencies by running the following command: -## sudo depmod -a -## - install 'iw' by the following command: -## sudo apt-get install iw -## - allow Ubuntu to reply to a PING in Broadcast by the following command: -## echo 0 | sudo tee /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts -## run the following shell -## voila !! - -# Interface configuration (interface type, MAC address, IP address, disable ARP) -sudo iw phy phy0 interface add wlan0 type ibss 4addr off -sudo ifconfig wlan0 hw ether 10:11:12:13:14:15 -sudo ifconfig wlan0 192.168.1.1 up -arp - -# Static ARP table -sudo arp -i wlan0 -s 192.168.1.2 10:21:22:23:24:25 -sudo arp -i wlan0 -s 192.168.1.255 FF:FF:FF:FF:FF:FF - diff --git a/openairITS/ieee80211p_insert_modules.sh b/openairITS/ieee80211p_insert_modules.sh deleted file mode 100644 index 8ef5adbfd2..0000000000 --- a/openairITS/ieee80211p_insert_modules.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/sh - -# Module loading -sudo depmod -a -sudo modprobe mac80211_eurecom -sudo insmod ${OPENAIRITS_DIR}/phy/DRIVERS/ieee80211p.ko diff --git a/openairITS/ieee80211p_setup_vars.sh b/openairITS/ieee80211p_setup_vars.sh deleted file mode 100644 index b416c21d33..0000000000 --- a/openairITS/ieee80211p_setup_vars.sh +++ /dev/null @@ -1,21 +0,0 @@ -#!/bin/sh - -## INSTRUCTIONS -## - check the coherence of the OPENAIRITS_DIR and MOD_DIR with YOUR platform -## - configure the module dependencies by running the following command: -## sudo depmod -a -## - install 'iw' by the following command: -## sudo apt-get install iw -## - allow Ubuntu to reply to a PING in Broadcast by the following command: -## echo 0 | sudo tee /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts -## run the following shell -## voila !! - -#Environment variables -export OPENAIR_HOME=/home/thales/openair4G -export OPENAIR1_DIR=$OPENAIR_HOME/openair1 -export OPENAIR2_DIR=$OPENAIR_HOME/openair2 -export OPENAIR3_DIR=$OPENAIR_HOME/openair3 -export OPENAIR_TARGETS=$OPENAIR_HOME/targets -export OPENAIRITS_DIR=$OPENAIR_HOME/openairITS - diff --git a/openairITS/mac/DOT11/.gitignore b/openairITS/mac/DOT11/.gitignore deleted file mode 100644 index 068e2176d5..0000000000 --- a/openairITS/mac/DOT11/.gitignore +++ /dev/null @@ -1,25 +0,0 @@ -drivers -mac80211 -bluetooth -include -net -compat -udev -*~ -git-describe -compat-release -master-tag -Module.symvers -module.order -.pc -code-metrics.txt -compat_base_tree -compat_base_tree_version -compat_version -.compat_autoconf_compat-* -.config -.config.mk_md5sum.txt -.tmp_versions/ -MAINTAINERS -modules -modules.order diff --git a/openairITS/mac/DOT11/COPYRIGHT b/openairITS/mac/DOT11/COPYRIGHT deleted file mode 100644 index ca442d313d..0000000000 --- a/openairITS/mac/DOT11/COPYRIGHT +++ /dev/null @@ -1,356 +0,0 @@ - - NOTE! This copyright does *not* cover user programs that use kernel - services by normal system calls - this is merely considered normal use - of the kernel, and does *not* fall under the heading of "derived work". - Also note that the GPL below is copyrighted by the Free Software - Foundation, but the instance of code that it refers to (the Linux - kernel) is copyrighted by me and others who actually wrote it. - - Also note that the only valid version of the GPL as far as the kernel - is concerned is _this_ particular version of the license (ie v2, not - v2.2 or v3.x or whatever), unless explicitly otherwise stated. - - Linus Torvalds - ----------------------------------------- - - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Library General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - , 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Library General -Public License instead of this License. diff --git a/openairITS/mac/DOT11/MAINTAINERS b/openairITS/mac/DOT11/MAINTAINERS deleted file mode 100644 index b0f1073c40..0000000000 --- a/openairITS/mac/DOT11/MAINTAINERS +++ /dev/null @@ -1,7651 +0,0 @@ - - - List of maintainers and how to submit kernel changes - -Please try to follow the guidelines below. This will make things -easier on the maintainers. Not all of these guidelines matter for every -trivial patch so apply some common sense. - -1. Always _test_ your changes, however small, on at least 4 or - 5 people, preferably many more. - -2. Try to release a few ALPHA test versions to the net. Announce - them onto the kernel channel and await results. This is especially - important for device drivers, because often that's the only way - you will find things like the fact version 3 firmware needs - a magic fix you didn't know about, or some clown changed the - chips on a board and not its name. (Don't laugh! Look at the - SMC etherpower for that.) - -3. Make sure your changes compile correctly in multiple - configurations. In particular check that changes work both as a - module and built into the kernel. - -4. When you are happy with a change make it generally available for - testing and await feedback. - -5. Make a patch available to the relevant maintainer in the list. Use - 'diff -u' to make the patch easy to merge. Be prepared to get your - changes sent back with seemingly silly requests about formatting - and variable names. These aren't as silly as they seem. One - job the maintainers (and especially Linus) do is to keep things - looking the same. Sometimes this means that the clever hack in - your driver to get around a problem actually needs to become a - generalized kernel feature ready for next time. - - PLEASE check your patch with the automated style checker - (scripts/checkpatch.pl) to catch trival style violations. - See Documentation/CodingStyle for guidance here. - - PLEASE CC: the maintainers and mailing lists that are generated - by scripts/get_maintainer.pl. The results returned by the - script will be best if you have git installed and are making - your changes in a branch derived from Linus' latest git tree. - See Documentation/SubmittingPatches for details. - - PLEASE try to include any credit lines you want added with the - patch. It avoids people being missed off by mistake and makes - it easier to know who wants adding and who doesn't. - - PLEASE document known bugs. If it doesn't work for everything - or does something very odd once a month document it. - - PLEASE remember that submissions must be made under the terms - of the OSDL certificate of contribution and should include a - Signed-off-by: line. The current version of this "Developer's - Certificate of Origin" (DCO) is listed in the file - Documentation/SubmittingPatches. - -6. Make sure you have the right to send any changes you make. If you - do changes at work you may find your employer owns the patch - not you. - -7. When sending security related changes or reports to a maintainer - please Cc: security@kernel.org, especially if the maintainer - does not respond. - -8. Happy hacking. - -Descriptions of section entries: - - P: Person (obsolete) - M: Mail patches to: FullName - L: Mailing list that is relevant to this area - W: Web-page with status/info - Q: Patchwork web based patch tracking system site - T: SCM tree type and location. Type is one of: git, hg, quilt, stgit, topgit. - S: Status, one of the following: - Supported: Someone is actually paid to look after this. - Maintained: Someone actually looks after it. - Odd Fixes: It has a maintainer but they don't have time to do - much other than throw the odd patch in. See below.. - Orphan: No current maintainer [but maybe you could take the - role as you write your new code]. - Obsolete: Old code. Something tagged obsolete generally means - it has been replaced by a better system and you - should be using that. - F: Files and directories with wildcard patterns. - A trailing slash includes all files and subdirectory files. - F: drivers/net/ all files in and below drivers/net - F: drivers/net/* all files in drivers/net, but not below - F: */net/* all files in "any top level directory"/net - One pattern per line. Multiple F: lines acceptable. - X: Files and directories that are NOT maintained, same rules as F: - Files exclusions are tested before file matches. - Can be useful for excluding a specific subdirectory, for instance: - F: net/ - X: net/ipv6/ - matches all files in and below net excluding net/ipv6/ - K: Keyword perl extended regex pattern to match content in a - patch or file. For instance: - K: of_get_profile - matches patches or files that contain "of_get_profile" - K: \b(printk|pr_(info|err))\b - matches patches or files that contain one or more of the words - printk, pr_info or pr_err - One regex pattern per line. Multiple K: lines acceptable. - -Note: For the hard of thinking, this list is meant to remain in alphabetical -order. If you could add yourselves to it in alphabetical order that would be -so much easier [Ed] - -Maintainers List (try to look for most precise areas first) - - ----------------------------------- - -3C505 NETWORK DRIVER -M: Philip Blundell -L: netdev@vger.kernel.org -S: Maintained -F: drivers/net/ethernet/i825xx/3c505* - -3C59X NETWORK DRIVER -M: Steffen Klassert -L: netdev@vger.kernel.org -S: Maintained -F: Documentation/networking/vortex.txt -F: drivers/net/ethernet/3com/3c59x.c - -3CR990 NETWORK DRIVER -M: David Dillow -L: netdev@vger.kernel.org -S: Maintained -F: drivers/net/ethernet/3com/typhoon* - -3WARE SAS/SATA-RAID SCSI DRIVERS (3W-XXXX, 3W-9XXX, 3W-SAS) -M: Adam Radford -L: linux-scsi@vger.kernel.org -W: http://www.lsi.com -S: Supported -F: drivers/scsi/3w-* - -53C700 AND 53C700-66 SCSI DRIVER -M: "James E.J. Bottomley" -L: linux-scsi@vger.kernel.org -S: Maintained -F: drivers/scsi/53c700* - -6PACK NETWORK DRIVER FOR AX.25 -M: Andreas Koensgen -L: linux-hams@vger.kernel.org -S: Maintained -F: drivers/net/hamradio/6pack.c - -8169 10/100/1000 GIGABIT ETHERNET DRIVER -M: Realtek linux nic maintainers -M: Francois Romieu -L: netdev@vger.kernel.org -S: Maintained -F: drivers/net/ethernet/realtek/r8169.c - -8250/16?50 (AND CLONE UARTS) SERIAL DRIVER -M: Greg Kroah-Hartman -L: linux-serial@vger.kernel.org -W: http://serial.sourceforge.net -S: Maintained -T: git git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty.git -F: drivers/tty/serial/8250* -F: include/linux/serial_8250.h - -8390 NETWORK DRIVERS [WD80x3/SMC-ELITE, SMC-ULTRA, NE2000, 3C503, etc.] -L: netdev@vger.kernel.org -S: Orphan / Obsolete -F: drivers/net/ethernet/8390/ - -9P FILE SYSTEM -M: Eric Van Hensbergen -M: Ron Minnich -M: Latchesar Ionkov -L: v9fs-developer@lists.sourceforge.net -W: http://swik.net/v9fs -Q: http://patchwork.kernel.org/project/v9fs-devel/list/ -T: git git://git.kernel.org/pub/scm/linux/kernel/git/ericvh/v9fs.git -S: Maintained -F: Documentation/filesystems/9p.txt -F: fs/9p/ - -AACRAID SCSI RAID DRIVER -M: Adaptec OEM Raid Solutions -L: linux-scsi@vger.kernel.org -W: http://www.adaptec.com/ -S: Supported -F: Documentation/scsi/aacraid.txt -F: drivers/scsi/aacraid/ - -ABIT UGURU 1,2 HARDWARE MONITOR DRIVER -M: Hans de Goede -L: lm-sensors@lm-sensors.org -S: Maintained -F: drivers/hwmon/abituguru.c - -ABIT UGURU 3 HARDWARE MONITOR DRIVER -M: Alistair John Strachan -L: lm-sensors@lm-sensors.org -S: Maintained -F: drivers/hwmon/abituguru3.c - -ACENIC DRIVER -M: Jes Sorensen -L: linux-acenic@sunsite.dk -S: Maintained -F: drivers/net/ethernet/alteon/acenic* - -ACER ASPIRE ONE TEMPERATURE AND FAN DRIVER -M: Peter Feuerer -L: platform-driver-x86@vger.kernel.org -W: http://piie.net/?section=acerhdf -S: Maintained -F: drivers/platform/x86/acerhdf.c - -ACER WMI LAPTOP EXTRAS -M: Joey Lee -L: platform-driver-x86@vger.kernel.org -S: Maintained -F: drivers/platform/x86/acer-wmi.c - -ACPI -M: Len Brown -L: linux-acpi@vger.kernel.org -W: http://www.lesswatts.org/projects/acpi/ -Q: http://patchwork.kernel.org/project/linux-acpi/list/ -T: git git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux -S: Supported -F: drivers/acpi/ -F: drivers/pnp/pnpacpi/ -F: include/linux/acpi.h -F: include/acpi/ - -ACPI FAN DRIVER -M: Zhang Rui -L: linux-acpi@vger.kernel.org -W: http://www.lesswatts.org/projects/acpi/ -S: Supported -F: drivers/acpi/fan.c - -ACPI PROCESSOR AGGREGATOR DRIVER -M: Shaohua Li -L: linux-acpi@vger.kernel.org -W: http://www.lesswatts.org/projects/acpi/ -S: Supported -F: drivers/acpi/acpi_pad.c - -ACPI THERMAL DRIVER -M: Zhang Rui -L: linux-acpi@vger.kernel.org -W: http://www.lesswatts.org/projects/acpi/ -S: Supported -F: drivers/acpi/*thermal* - -ACPI VIDEO DRIVER -M: Zhang Rui -L: linux-acpi@vger.kernel.org -W: http://www.lesswatts.org/projects/acpi/ -S: Supported -F: drivers/acpi/video.c - -ACPI WMI DRIVER -L: platform-driver-x86@vger.kernel.org -S: Orphan -F: drivers/platform/x86/wmi.c - -AD1889 ALSA SOUND DRIVER -M: Thibaut Varene -W: http://wiki.parisc-linux.org/AD1889 -L: linux-parisc@vger.kernel.org -S: Maintained -F: sound/pci/ad1889.* - -AD525X ANALOG DEVICES DIGITAL POTENTIOMETERS DRIVER -M: Michael Hennerich -L: device-drivers-devel@blackfin.uclinux.org -W: http://wiki.analog.com/AD5254 -S: Supported -F: drivers/misc/ad525x_dpot.c - -AD5398 CURRENT REGULATOR DRIVER (AD5398/AD5821) -M: Michael Hennerich -L: device-drivers-devel@blackfin.uclinux.org -W: http://wiki.analog.com/AD5398 -S: Supported -F: drivers/regulator/ad5398.c - -AD714X CAPACITANCE TOUCH SENSOR DRIVER (AD7142/3/7/8/7A) -M: Michael Hennerich -L: device-drivers-devel@blackfin.uclinux.org -W: http://wiki.analog.com/AD7142 -S: Supported -F: drivers/input/misc/ad714x.c - -AD7877 TOUCHSCREEN DRIVER -M: Michael Hennerich -L: device-drivers-devel@blackfin.uclinux.org -W: http://wiki.analog.com/AD7877 -S: Supported -F: drivers/input/touchscreen/ad7877.c - -AD7879 TOUCHSCREEN DRIVER (AD7879/AD7889) -M: Michael Hennerich -L: device-drivers-devel@blackfin.uclinux.org -W: http://wiki.analog.com/AD7879 -S: Supported -F: drivers/input/touchscreen/ad7879.c - -ADDRESS SPACE LAYOUT RANDOMIZATION (ASLR) -M: Jiri Kosina -S: Maintained - -ADM1025 HARDWARE MONITOR DRIVER -M: Jean Delvare -L: lm-sensors@lm-sensors.org -S: Maintained -F: Documentation/hwmon/adm1025 -F: drivers/hwmon/adm1025.c - -ADM1029 HARDWARE MONITOR DRIVER -M: Corentin Labbe -L: lm-sensors@lm-sensors.org -S: Maintained -F: drivers/hwmon/adm1029.c - -ADM8211 WIRELESS DRIVER -L: linux-wireless@vger.kernel.org -W: http://linuxwireless.org/ -S: Orphan -F: drivers/net/wireless/adm8211.* - -ADP5520 BACKLIGHT DRIVER WITH IO EXPANDER (ADP5520/ADP5501) -M: Michael Hennerich -L: device-drivers-devel@blackfin.uclinux.org -W: http://wiki.analog.com/ADP5520 -S: Supported -F: drivers/mfd/adp5520.c -F: drivers/video/backlight/adp5520_bl.c -F: drivers/leds/leds-adp5520.c -F: drivers/gpio/gpio-adp5520.c -F: drivers/input/keyboard/adp5520-keys.c - -ADP5588 QWERTY KEYPAD AND IO EXPANDER DRIVER (ADP5588/ADP5587) -M: Michael Hennerich -L: device-drivers-devel@blackfin.uclinux.org -W: http://wiki.analog.com/ADP5588 -S: Supported -F: drivers/input/keyboard/adp5588-keys.c -F: drivers/gpio/gpio-adp5588.c - -ADP8860 BACKLIGHT DRIVER (ADP8860/ADP8861/ADP8863) -M: Michael Hennerich -L: device-drivers-devel@blackfin.uclinux.org -W: http://wiki.analog.com/ADP8860 -S: Supported -F: drivers/video/backlight/adp8860_bl.c - -ADS1015 HARDWARE MONITOR DRIVER -M: Dirk Eibach -L: lm-sensors@lm-sensors.org -S: Maintained -F: Documentation/hwmon/ads1015 -F: drivers/hwmon/ads1015.c -F: include/linux/i2c/ads1015.h - -ADT746X FAN DRIVER -M: Colin Leroy -S: Maintained -F: drivers/macintosh/therm_adt746x.c - -ADT7475 HARDWARE MONITOR DRIVER -M: Jean Delvare -L: lm-sensors@lm-sensors.org -S: Maintained -F: Documentation/hwmon/adt7475 -F: drivers/hwmon/adt7475.c - -ADXL34X THREE-AXIS DIGITAL ACCELEROMETER DRIVER (ADXL345/ADXL346) -M: Michael Hennerich -L: device-drivers-devel@blackfin.uclinux.org -W: http://wiki.analog.com/ADXL345 -S: Supported -F: drivers/input/misc/adxl34x.c - -ADVANSYS SCSI DRIVER -M: Matthew Wilcox -L: linux-scsi@vger.kernel.org -S: Maintained -F: Documentation/scsi/advansys.txt -F: drivers/scsi/advansys.c - -AEDSP16 DRIVER -M: Riccardo Facchetti -S: Maintained -F: sound/oss/aedsp16.c - -AFFS FILE SYSTEM -L: linux-fsdevel@vger.kernel.org -S: Orphan -F: Documentation/filesystems/affs.txt -F: fs/affs/ - -AFS FILESYSTEM & AF_RXRPC SOCKET DOMAIN -M: David Howells -L: linux-afs@lists.infradead.org -S: Supported -F: fs/afs/ -F: include/net/af_rxrpc.h -F: net/rxrpc/af_rxrpc.c - -AGPGART DRIVER -M: David Airlie -T: git git://git.kernel.org/pub/scm/linux/kernel/git/airlied/drm-2.6.git -S: Maintained -F: drivers/char/agp/ -F: include/linux/agp* - -AHA152X SCSI DRIVER -M: "Juergen E. Fischer" -L: linux-scsi@vger.kernel.org -S: Maintained -F: drivers/scsi/aha152x* -F: drivers/scsi/pcmcia/aha152x* - -AIC7XXX / AIC79XX SCSI DRIVER -M: Hannes Reinecke -L: linux-scsi@vger.kernel.org -S: Maintained -F: drivers/scsi/aic7xxx/ -F: drivers/scsi/aic7xxx_old/ - -AIO -M: Benjamin LaHaise -L: linux-aio@kvack.org -S: Supported -F: fs/aio.c -F: include/linux/*aio*.h - -ALCATEL SPEEDTOUCH USB DRIVER -M: Duncan Sands -L: linux-usb@vger.kernel.org -W: http://www.linux-usb.org/SpeedTouch/ -S: Maintained -F: drivers/usb/atm/speedtch.c -F: drivers/usb/atm/usbatm.c - -ALCHEMY AU1XX0 MMC DRIVER -M: Manuel Lauss -S: Maintained -F: drivers/mmc/host/au1xmmc.c - -ALI1563 I2C DRIVER -M: Rudolf Marek -L: linux-i2c@vger.kernel.org -S: Maintained -F: Documentation/i2c/busses/i2c-ali1563 -F: drivers/i2c/busses/i2c-ali1563.c - -ALPHA PORT -M: Richard Henderson -M: Ivan Kokshaysky -M: Matt Turner -S: Odd Fixes -L: linux-alpha@vger.kernel.org -F: arch/alpha/ - -ALTERA UART/JTAG UART SERIAL DRIVERS -M: Tobias Klauser -L: linux-serial@vger.kernel.org -L: nios2-dev@sopc.et.ntust.edu.tw (moderated for non-subscribers) -S: Maintained -F: drivers/tty/serial/altera_uart.c -F: drivers/tty/serial/altera_jtaguart.c -F: include/linux/altera_uart.h -F: include/linux/altera_jtaguart.h - -AMD FAM15H PROCESSOR POWER MONITORING DRIVER -M: Andreas Herrmann -L: lm-sensors@lm-sensors.org -S: Maintained -F: Documentation/hwmon/fam15h_power -F: drivers/hwmon/fam15h_power.c - -AMD GEODE CS5536 USB DEVICE CONTROLLER DRIVER -M: Thomas Dahlmann -L: linux-geode@lists.infradead.org (moderated for non-subscribers) -S: Supported -F: drivers/usb/gadget/amd5536udc.* - -AMD GEODE PROCESSOR/CHIPSET SUPPORT -P: Andres Salomon -L: linux-geode@lists.infradead.org (moderated for non-subscribers) -W: http://www.amd.com/us-en/ConnectivitySolutions/TechnicalResources/0,,50_2334_2452_11363,00.html -S: Supported -F: drivers/char/hw_random/geode-rng.c -F: drivers/crypto/geode* -F: drivers/video/geode/ -F: arch/x86/include/asm/geode.h - -AMD IOMMU (AMD-VI) -M: Joerg Roedel -L: iommu@lists.linux-foundation.org -T: git git://git.kernel.org/pub/scm/linux/kernel/git/joro/iommu.git -S: Supported -F: drivers/iommu/amd_iommu*.[ch] -F: include/linux/amd-iommu.h - -AMD MICROCODE UPDATE SUPPORT -M: Andreas Herrmann -L: amd64-microcode@amd64.org -S: Supported -F: arch/x86/kernel/microcode_amd.c - -AMS (Apple Motion Sensor) DRIVER -M: Michael Hanselmann -S: Supported -F: drivers/macintosh/ams/ - -AMSO1100 RNIC DRIVER -M: Tom Tucker -M: Steve Wise -L: linux-rdma@vger.kernel.org -S: Maintained -F: drivers/infiniband/hw/amso1100/ - -ANALOG DEVICES INC ASOC CODEC DRIVERS -M: Lars-Peter Clausen -L: device-drivers-devel@blackfin.uclinux.org -L: alsa-devel@alsa-project.org (moderated for non-subscribers) -W: http://wiki.analog.com/ -S: Supported -F: sound/soc/codecs/adau* -F: sound/soc/codecs/adav* -F: sound/soc/codecs/ad1* -F: sound/soc/codecs/ssm* -F: sound/soc/codecs/sigmadsp.* - -ANALOG DEVICES INC ASOC DRIVERS -L: uclinux-dist-devel@blackfin.uclinux.org -L: alsa-devel@alsa-project.org (moderated for non-subscribers) -W: http://blackfin.uclinux.org/ -S: Supported -F: sound/soc/blackfin/* - -AOA (Apple Onboard Audio) ALSA DRIVER -M: Johannes Berg -L: linuxppc-dev@lists.ozlabs.org -L: alsa-devel@alsa-project.org (moderated for non-subscribers) -S: Maintained -F: sound/aoa/ - -APM DRIVER -M: Jiri Kosina -S: Odd fixes -F: arch/x86/kernel/apm_32.c -F: include/linux/apm_bios.h -F: drivers/char/apm-emulation.c - -APPLE BCM5974 MULTITOUCH DRIVER -M: Henrik Rydberg -L: linux-input@vger.kernel.org -S: Maintained -F: drivers/input/mouse/bcm5974.c - -APPLE SMC DRIVER -M: Henrik Rydberg -L: lm-sensors@lm-sensors.org -S: Maintained -F: drivers/hwmon/applesmc.c - -APPLETALK NETWORK LAYER -M: Arnaldo Carvalho de Melo -S: Maintained -F: drivers/net/appletalk/ -F: net/appletalk/ - -ARASAN COMPACT FLASH PATA CONTROLLER -M: Viresh Kumar -L: linux-ide@vger.kernel.org -S: Maintained -F: include/linux/pata_arasan_cf_data.h -F: drivers/ata/pata_arasan_cf.c - -ARC FRAMEBUFFER DRIVER -M: Jaya Kumar -S: Maintained -F: drivers/video/arcfb.c -F: drivers/video/fb_defio.c - -ARM MFM AND FLOPPY DRIVERS -M: Ian Molton -S: Maintained -F: arch/arm/lib/floppydma.S -F: arch/arm/include/asm/floppy.h - -ARM PMU PROFILING AND DEBUGGING -M: Will Deacon -S: Maintained -F: arch/arm/kernel/perf_event* -F: arch/arm/oprofile/common.c -F: arch/arm/kernel/pmu.c -F: arch/arm/include/asm/pmu.h -F: arch/arm/kernel/hw_breakpoint.c -F: arch/arm/include/asm/hw_breakpoint.h - -ARM PORT -M: Russell King -L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) -W: http://www.arm.linux.org.uk/ -S: Maintained -F: arch/arm/ - -ARM PRIMECELL AACI PL041 DRIVER -M: Russell King -S: Maintained -F: sound/arm/aaci.* - -ARM PRIMECELL CLCD PL110 DRIVER -M: Russell King -S: Maintained -F: drivers/video/amba-clcd.* - -ARM PRIMECELL KMI PL050 DRIVER -M: Russell King -S: Maintained -F: drivers/input/serio/ambakmi.* -F: include/linux/amba/kmi.h - -ARM PRIMECELL MMCI PL180/1 DRIVER -S: Orphan -F: drivers/mmc/host/mmci.* - -ARM PRIMECELL BUS SUPPORT -M: Russell King -S: Maintained -F: drivers/amba/ -F: include/linux/amba/bus.h - -ARM/ADI ROADRUNNER MACHINE SUPPORT -M: Lennert Buytenhek -L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) -S: Maintained -F: arch/arm/mach-ixp23xx/ -F: arch/arm/mach-ixp23xx/include/mach/ - -ARM/ADS SPHERE MACHINE SUPPORT -M: Lennert Buytenhek -L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) -S: Maintained - -ARM/AFEB9260 MACHINE SUPPORT -M: Sergey Lapin -L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) -S: Maintained - -ARM/AJECO 1ARM MACHINE SUPPORT -M: Lennert Buytenhek -L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) -S: Maintained - -ARM/ATMEL AT91RM9200 AND AT91SAM ARM ARCHITECTURES -M: Andrew Victor -M: Nicolas Ferre -M: Jean-Christophe Plagniol-Villard -L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) -W: http://maxim.org.za/at91_26.html -W: http://www.linux4sam.org -S: Supported -F: arch/arm/mach-at91/ - -ARM/BCMRING ARM ARCHITECTURE -M: Jiandong Zheng -M: Scott Branden -L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) -S: Maintained -F: arch/arm/mach-bcmring - -ARM/BCMRING MTD NAND DRIVER -M: Jiandong Zheng -M: Scott Branden -L: linux-mtd@lists.infradead.org -S: Maintained -F: drivers/mtd/nand/bcm_umi_nand.c -F: drivers/mtd/nand/bcm_umi_bch.c -F: drivers/mtd/nand/nand_bcm_umi.h - -ARM/CALXEDA HIGHBANK ARCHITECTURE -M: Rob Herring -L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) -S: Maintained -F: arch/arm/mach-highbank/ - -ARM/CAVIUM NETWORKS CNS3XXX MACHINE SUPPORT -M: Anton Vorontsov -S: Maintained -F: arch/arm/mach-cns3xxx/ -T: git git://git.infradead.org/users/cbou/linux-cns3xxx.git - -ARM/CIRRUS LOGIC EP93XX ARM ARCHITECTURE -M: Hartley Sweeten -M: Ryan Mallon -L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) -S: Maintained -F: arch/arm/mach-ep93xx/ -F: arch/arm/mach-ep93xx/include/mach/ - -ARM/CIRRUS LOGIC EDB9315A MACHINE SUPPORT -M: Lennert Buytenhek -L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) -S: Maintained - -ARM/CLKDEV SUPPORT -M: Russell King -L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) -S: Maintained -F: arch/arm/include/asm/clkdev.h -F: drivers/clk/clkdev.c - -ARM/COMPULAB CM-X270/EM-X270 and CM-X300 MACHINE SUPPORT -M: Mike Rapoport -L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) -S: Maintained - -ARM/CONTEC MICRO9 MACHINE SUPPORT -M: Hubert Feurstein -S: Maintained -F: arch/arm/mach-ep93xx/micro9.c - -ARM/CORGI MACHINE SUPPORT -M: Richard Purdie -S: Maintained - -ARM/CORTINA SYSTEMS GEMINI ARM ARCHITECTURE -M: Hans Ulli Kroll -L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) -T: git git://git.berlios.de/gemini-board -S: Maintained -F: arch/arm/mach-gemini/ - -ARM/CSR SIRFPRIMA2 MACHINE SUPPORT -M: Barry Song -L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) -S: Maintained -F: arch/arm/mach-prima2/ -F: drivers/dma/sirf-dma* - -ARM/EBSA110 MACHINE SUPPORT -M: Russell King -L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) -W: http://www.arm.linux.org.uk/ -S: Maintained -F: arch/arm/mach-ebsa110/ -F: drivers/net/ethernet/amd/am79c961a.* - -ARM/EZX SMARTPHONES (A780, A910, A1200, E680, ROKR E2 and ROKR E6) -M: Daniel Ribeiro -M: Stefan Schmidt -M: Harald Welte -L: openezx-devel@lists.openezx.org (moderated for non-subscribers) -W: http://www.openezx.org/ -S: Maintained -T: topgit git://git.openezx.org/openezx.git -F: arch/arm/mach-pxa/ezx.c - -ARM/FARADAY FA526 PORT -M: Hans Ulli Kroll -L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) -S: Maintained -T: git git://git.berlios.de/gemini-board -F: arch/arm/mm/*-fa* - -ARM/FOOTBRIDGE ARCHITECTURE -M: Russell King -L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) -W: http://www.arm.linux.org.uk/ -S: Maintained -F: arch/arm/include/asm/hardware/dec21285.h -F: arch/arm/mach-footbridge/ - -ARM/FREESCALE IMX / MXC ARM ARCHITECTURE -M: Sascha Hauer -L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) -S: Maintained -T: git git://git.pengutronix.de/git/imx/linux-2.6.git -F: arch/arm/mach-imx/ -F: arch/arm/plat-mxc/ - -ARM/FREESCALE IMX6 -M: Shawn Guo -L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) -S: Maintained -T: git git://git.linaro.org/people/shawnguo/linux-2.6.git -F: arch/arm/mach-imx/*imx6* - -ARM/FREESCALE MXS ARM ARCHITECTURE -M: Shawn Guo -L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) -S: Maintained -T: git git://git.linaro.org/people/shawnguo/linux-2.6.git -F: arch/arm/mach-mxs/ - -ARM/GLOMATION GESBC9312SX MACHINE SUPPORT -M: Lennert Buytenhek -L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) -S: Maintained - -ARM/GUMSTIX MACHINE SUPPORT -M: Steve Sakoman -L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) -S: Maintained - -ARM/H4700 (HP IPAQ HX4700) MACHINE SUPPORT -M: Philipp Zabel -M: Paul Parsons -L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) -S: Maintained -F: arch/arm/mach-pxa/hx4700.c -F: arch/arm/mach-pxa/include/mach/hx4700.h -F: sound/soc/pxa/hx4700.c - -ARM/HP JORNADA 7XX MACHINE SUPPORT -M: Kristoffer Ericson -W: www.jlime.com -S: Maintained -T: git git://git.kernel.org/pub/scm/linux/kernel/git/kristoffer/linux-hpc.git -F: arch/arm/mach-sa1100/jornada720.c -F: arch/arm/mach-sa1100/include/mach/jornada720.h - -ARM/INCOME PXA270 SUPPORT -M: Marek Vasut -L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) -S: Maintained -F: arch/arm/mach-pxa/colibri-pxa270-income.c - -ARM/INTEL IOP32X ARM ARCHITECTURE -M: Lennert Buytenhek -M: Dan Williams -L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) -S: Maintained - -ARM/INTEL IOP33X ARM ARCHITECTURE -M: Dan Williams -L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) -S: Maintained - -ARM/INTEL IOP13XX ARM ARCHITECTURE -M: Lennert Buytenhek -M: Dan Williams -L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) -S: Maintained - -ARM/INTEL IQ81342EX MACHINE SUPPORT -M: Lennert Buytenhek -M: Dan Williams -L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) -S: Maintained - -ARM/INTEL IXP2000 ARM ARCHITECTURE -M: Lennert Buytenhek -L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) -S: Maintained - -ARM/INTEL IXDP2850 MACHINE SUPPORT -M: Lennert Buytenhek -L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) -S: Maintained - -ARM/INTEL IXP23XX ARM ARCHITECTURE -M: Lennert Buytenhek -L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) -S: Maintained - -ARM/INTEL IXP4XX ARM ARCHITECTURE -M: Imre Kaloz -M: Krzysztof Halasa -L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) -S: Maintained -F: arch/arm/mach-ixp4xx/ - -ARM/INTEL RESEARCH IMOTE/STARGATE 2 MACHINE SUPPORT -M: Jonathan Cameron -L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) -S: Maintained -F: arch/arm/mach-pxa/stargate2.c -F: drivers/pcmcia/pxa2xx_stargate2.c - -ARM/INTEL XSC3 (MANZANO) ARM CORE -M: Lennert Buytenhek -M: Dan Williams -L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) -S: Maintained - -ARM/IP FABRICS DOUBLE ESPRESSO MACHINE SUPPORT -M: Lennert Buytenhek -L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) -S: Maintained - -ARM/LOGICPD PXA270 MACHINE SUPPORT -M: Lennert Buytenhek -L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) -S: Maintained - -ARM/MAGICIAN MACHINE SUPPORT -M: Philipp Zabel -S: Maintained - -ARM/Marvell Loki/Kirkwood/MV78xx0/Orion SOC support -M: Lennert Buytenhek -M: Nicolas Pitre -L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) -S: Odd Fixes -F: arch/arm/mach-kirkwood/ -F: arch/arm/mach-mv78xx0/ -F: arch/arm/mach-orion5x/ -F: arch/arm/plat-orion/ - -ARM/Orion SoC/Technologic Systems TS-78xx platform support -M: Alexander Clouter -L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) -W: http://www.digriz.org.uk/ts78xx/kernel -S: Maintained -F: arch/arm/mach-orion5x/ts78xx-* - -ARM/MIOA701 MACHINE SUPPORT -M: Robert Jarzmik -L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) -F: arch/arm/mach-pxa/mioa701.c -S: Maintained - -ARM/NEC MOBILEPRO 900/c MACHINE SUPPORT -M: Michael Petchkovsky -S: Maintained - -ARM/NOMADIK ARCHITECTURE -M: Alessandro Rubini -M: Linus Walleij -M: STEricsson -L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) -S: Maintained -F: arch/arm/mach-nomadik/ -F: arch/arm/plat-nomadik/ -F: drivers/i2c/busses/i2c-nomadik.c -T: git git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-stericsson.git - -ARM/OPENMOKO NEO FREERUNNER (GTA02) MACHINE SUPPORT -M: Nelson Castillo -L: openmoko-kernel@lists.openmoko.org (subscribers-only) -W: http://wiki.openmoko.org/wiki/Neo_FreeRunner -S: Supported - -ARM/QUALCOMM MSM MACHINE SUPPORT -M: David Brown -M: Daniel Walker -M: Bryan Huntsman -L: linux-arm-msm@vger.kernel.org -F: arch/arm/mach-msm/ -F: drivers/video/msm/ -F: drivers/mmc/host/msm_sdcc.c -F: drivers/mmc/host/msm_sdcc.h -F: drivers/tty/serial/msm_serial.h -F: drivers/tty/serial/msm_serial.c -F: drivers/platform/msm/ -F: drivers/*/pm8???-* -F: include/linux/mfd/pm8xxx/ -T: git git://git.kernel.org/pub/scm/linux/kernel/git/davidb/linux-msm.git -S: Maintained - -ARM/TOSA MACHINE SUPPORT -M: Dmitry Eremin-Solenikov -M: Dirk Opfer -S: Maintained - -ARM/PALMTX,PALMT5,PALMLD,PALMTE2,PALMTC SUPPORT -M: Marek Vasut -L: linux-arm-kernel@lists.infradead.org -W: http://hackndev.com -S: Maintained -F: arch/arm/mach-pxa/include/mach/palmtx.h -F: arch/arm/mach-pxa/palmtx.c -F: arch/arm/mach-pxa/include/mach/palmt5.h -F: arch/arm/mach-pxa/palmt5.c -F: arch/arm/mach-pxa/include/mach/palmld.h -F: arch/arm/mach-pxa/palmld.c -F: arch/arm/mach-pxa/include/mach/palmte2.h -F: arch/arm/mach-pxa/palmte2.c -F: arch/arm/mach-pxa/include/mach/palmtc.h -F: arch/arm/mach-pxa/palmtc.c - -ARM/PALM TREO SUPPORT -M: Tomas Cech -L: linux-arm-kernel@lists.infradead.org -W: http://hackndev.com -S: Maintained -F: arch/arm/mach-pxa/include/mach/palmtreo.h -F: arch/arm/mach-pxa/palmtreo.c - -ARM/PALMZ72 SUPPORT -M: Sergey Lapin -L: linux-arm-kernel@lists.infradead.org -W: http://hackndev.com -S: Maintained -F: arch/arm/mach-pxa/include/mach/palmz72.h -F: arch/arm/mach-pxa/palmz72.c - -ARM/PLEB SUPPORT -M: Peter Chubb -W: http://www.disy.cse.unsw.edu.au/Hardware/PLEB -S: Maintained - -ARM/PT DIGITAL BOARD PORT -M: Stefan Eletzhofer -L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) -W: http://www.arm.linux.org.uk/ -S: Maintained - -ARM/RADISYS ENP2611 MACHINE SUPPORT -M: Lennert Buytenhek -L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) -S: Maintained - -ARM/RISCPC ARCHITECTURE -M: Russell King -L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) -W: http://www.arm.linux.org.uk/ -S: Maintained -F: arch/arm/common/time-acorn.c -F: arch/arm/include/asm/hardware/entry-macro-iomd.S -F: arch/arm/include/asm/hardware/ioc.h -F: arch/arm/include/asm/hardware/iomd.h -F: arch/arm/include/asm/hardware/memc.h -F: arch/arm/mach-rpc/ -F: drivers/net/ethernet/8390/etherh.c -F: drivers/net/ethernet/i825xx/ether1* -F: drivers/net/ethernet/seeq/ether3* -F: drivers/scsi/arm/ - -ARM/SHARK MACHINE SUPPORT -M: Alexander Schulz -W: http://www.shark-linux.de/shark.html -S: Maintained - -ARM/SAMSUNG ARM ARCHITECTURES -M: Ben Dooks -M: Kukjin Kim -L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) -L: linux-samsung-soc@vger.kernel.org (moderated for non-subscribers) -W: http://www.fluff.org/ben/linux/ -S: Maintained -F: arch/arm/plat-samsung/ -F: arch/arm/plat-s3c24xx/ -F: arch/arm/plat-s5p/ -F: arch/arm/mach-s3c24*/ -F: arch/arm/mach-s3c64xx/ -F: drivers/*/*s3c2410* -F: drivers/*/*/*s3c2410* -F: drivers/spi/spi-s3c* -F: sound/soc/samsung/* - -ARM/S5P EXYNOS ARM ARCHITECTURES -M: Kukjin Kim -L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) -L: linux-samsung-soc@vger.kernel.org (moderated for non-subscribers) -S: Maintained -F: arch/arm/mach-s5p*/ -F: arch/arm/mach-exynos*/ - -ARM/SAMSUNG MOBILE MACHINE SUPPORT -M: Kyungmin Park -L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) -S: Maintained -F: arch/arm/mach-s5pv210/mach-aquila.c -F: arch/arm/mach-s5pv210/mach-goni.c -F: arch/arm/mach-exynos/mach-universal_c210.c -F: arch/arm/mach-exynos/mach-nuri.c - -ARM/SAMSUNG S5P SERIES FIMC SUPPORT -M: Kyungmin Park -M: Sylwester Nawrocki -L: linux-arm-kernel@lists.infradead.org -L: linux-media@vger.kernel.org -S: Maintained -F: arch/arm/plat-s5p/dev-fimc* -F: arch/arm/plat-samsung/include/plat/*fimc* -F: drivers/media/video/s5p-fimc/ - -ARM/SAMSUNG S5P SERIES Multi Format Codec (MFC) SUPPORT -M: Kyungmin Park -M: Kamil Debski -M: Jeongtae Park -L: linux-arm-kernel@lists.infradead.org -L: linux-media@vger.kernel.org -S: Maintained -F: arch/arm/plat-s5p/dev-mfc.c -F: drivers/media/video/s5p-mfc/ - -ARM/SAMSUNG S5P SERIES TV SUBSYSTEM SUPPORT -M: Kyungmin Park -M: Tomasz Stanislawski -L: linux-arm-kernel@lists.infradead.org -L: linux-media@vger.kernel.org -S: Maintained -F: drivers/media/video/s5p-tv/ - -ARM/SHMOBILE ARM ARCHITECTURE -M: Paul Mundt -M: Magnus Damm -L: linux-sh@vger.kernel.org -W: http://oss.renesas.com -Q: http://patchwork.kernel.org/project/linux-sh/list/ -T: git git://git.kernel.org/pub/scm/linux/kernel/git/lethal/sh-2.6.git rmobile-latest -S: Supported -F: arch/arm/mach-shmobile/ -F: drivers/sh/ - -ARM/TECHNOLOGIC SYSTEMS TS7250 MACHINE SUPPORT -M: Lennert Buytenhek -L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) -S: Maintained - -ARM/TETON BGA MACHINE SUPPORT -M: "Mark F. Brown" -L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) -S: Maintained - -ARM/THECUS N2100 MACHINE SUPPORT -M: Lennert Buytenhek -L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) -S: Maintained - -ARM/NUVOTON W90X900 ARM ARCHITECTURE -M: Wan ZongShun -L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) -W: http://www.mcuos.com -S: Maintained -F: arch/arm/mach-w90x900/ -F: drivers/input/keyboard/w90p910_keypad.c -F: drivers/input/touchscreen/w90p910_ts.c -F: drivers/watchdog/nuc900_wdt.c -F: drivers/net/ethernet/nuvoton/w90p910_ether.c -F: drivers/mtd/nand/nuc900_nand.c -F: drivers/rtc/rtc-nuc900.c -F: drivers/spi/spi-nuc900.c -F: drivers/usb/host/ehci-w90x900.c -F: drivers/video/nuc900fb.c - -ARM/U300 MACHINE SUPPORT -M: Linus Walleij -L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) -S: Supported -F: arch/arm/mach-u300/ -F: drivers/i2c/busses/i2c-stu300.c -F: drivers/rtc/rtc-coh901331.c -F: drivers/watchdog/coh901327_wdt.c -F: drivers/dma/coh901318* -F: drivers/mfd/ab3100* -F: drivers/rtc/rtc-ab3100.c -F: drivers/rtc/rtc-coh901331.c -T: git git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-stericsson.git - -ARM/Ux500 ARM ARCHITECTURE -M: Srinidhi Kasagar -M: Linus Walleij -L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) -S: Maintained -F: arch/arm/mach-ux500/ -F: drivers/dma/ste_dma40* -F: drivers/mfd/abx500* -F: drivers/mfd/ab8500* -F: drivers/mfd/stmpe* -F: drivers/rtc/rtc-ab8500.c -T: git git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-stericsson.git - -ARM/VFP SUPPORT -M: Russell King -L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) -W: http://www.arm.linux.org.uk/ -S: Maintained -F: arch/arm/vfp/ - -ARM/VOIPAC PXA270 SUPPORT -M: Marek Vasut -L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) -S: Maintained -F: arch/arm/mach-pxa/vpac270.c -F: arch/arm/mach-pxa/include/mach/vpac270.h - -ARM/ZIPIT Z2 SUPPORT -M: Marek Vasut -L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) -S: Maintained -F: arch/arm/mach-pxa/z2.c -F: arch/arm/mach-pxa/include/mach/z2.h - -ASC7621 HARDWARE MONITOR DRIVER -M: George Joseph -L: lm-sensors@lm-sensors.org -S: Maintained -F: Documentation/hwmon/asc7621 -F: drivers/hwmon/asc7621.c - -ASUS NOTEBOOKS AND EEEPC ACPI/WMI EXTRAS DRIVERS -M: Corentin Chary -L: acpi4asus-user@lists.sourceforge.net -L: platform-driver-x86@vger.kernel.org -W: http://acpi4asus.sf.net -S: Maintained -F: drivers/platform/x86/asus*.c -F: drivers/platform/x86/eeepc*.c - -ASUS ASB100 HARDWARE MONITOR DRIVER -M: "Mark M. Hoffman" -L: lm-sensors@lm-sensors.org -S: Maintained -F: drivers/hwmon/asb100.c - -ASYNCHRONOUS TRANSFERS/TRANSFORMS (IOAT) API -M: Dan Williams -W: http://sourceforge.net/projects/xscaleiop -S: Supported -F: Documentation/crypto/async-tx-api.txt -F: crypto/async_tx/ -F: drivers/dma/ -F: include/linux/dmaengine.h -F: include/linux/async_tx.h - -AT24 EEPROM DRIVER -M: Wolfram Sang -L: linux-i2c@vger.kernel.org -S: Maintained -F: drivers/misc/eeprom/at24.c -F: include/linux/i2c/at24.h - -ATA OVER ETHERNET (AOE) DRIVER -M: "Ed L. Cashin" -W: http://www.coraid.com/support/linux -S: Supported -F: Documentation/aoe/ -F: drivers/block/aoe/ - -ATHEROS ATH GENERIC UTILITIES -M: "Luis R. Rodriguez" -L: linux-wireless@vger.kernel.org -S: Supported -F: drivers/net/wireless/ath/* - -ATHEROS ATH5K WIRELESS DRIVER -M: Jiri Slaby -M: Nick Kossifidis -M: "Luis R. Rodriguez" -L: linux-wireless@vger.kernel.org -L: ath5k-devel@lists.ath5k.org -W: http://wireless.kernel.org/en/users/Drivers/ath5k -S: Maintained -F: drivers/net/wireless/ath/ath5k/ - -ATHEROS ATH6KL WIRELESS DRIVER -M: Kalle Valo -L: linux-wireless@vger.kernel.org -W: http://wireless.kernel.org/en/users/Drivers/ath6kl -T: git git://git.kernel.org/pub/scm/linux/kernel/git/kvalo/ath6kl.git -S: Supported -F: drivers/net/wireless/ath/ath6kl/ - -ATHEROS ATH9K WIRELESS DRIVER -M: "Luis R. Rodriguez" -M: Jouni Malinen -M: Vasanthakumar Thiagarajan -M: Senthil Balasubramanian -L: linux-wireless@vger.kernel.org -L: ath9k-devel@lists.ath9k.org -W: http://wireless.kernel.org/en/users/Drivers/ath9k -S: Supported -F: drivers/net/wireless/ath/ath9k/ - -CARL9170 LINUX COMMUNITY WIRELESS DRIVER -M: Christian Lamparter -L: linux-wireless@vger.kernel.org -W: http://wireless.kernel.org/en/users/Drivers/carl9170 -S: Maintained -F: drivers/net/wireless/ath/carl9170/ - -ATK0110 HWMON DRIVER -M: Luca Tettamanti -L: lm-sensors@lm-sensors.org -S: Maintained -F: drivers/hwmon/asus_atk0110.c - -ATI_REMOTE2 DRIVER -M: Ville Syrjala -S: Maintained -F: drivers/input/misc/ati_remote2.c - -ATLX ETHERNET DRIVERS -M: Jay Cliburn -M: Chris Snook -L: netdev@vger.kernel.org -W: http://sourceforge.net/projects/atl1 -W: http://atl1.sourceforge.net -S: Maintained -F: drivers/net/ethernet/atheros/ - -ATM -M: Chas Williams -L: linux-atm-general@lists.sourceforge.net (moderated for non-subscribers) -L: netdev@vger.kernel.org -W: http://linux-atm.sourceforge.net -S: Maintained -F: drivers/atm/ -F: include/linux/atm* - -ATMEL AT91 MCI DRIVER -M: Ludovic Desroches -L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) -W: http://www.atmel.com/products/AT91/ -W: http://www.at91.com/ -S: Maintained -F: drivers/mmc/host/at91_mci.c - -ATMEL AT91 / AT32 MCI DRIVER -M: Ludovic Desroches -S: Maintained -F: drivers/mmc/host/atmel-mci.c -F: drivers/mmc/host/atmel-mci-regs.h - -ATMEL AT91 / AT32 SERIAL DRIVER -M: Nicolas Ferre -S: Supported -F: drivers/tty/serial/atmel_serial.c - -ATMEL LCDFB DRIVER -M: Nicolas Ferre -L: linux-fbdev@vger.kernel.org -S: Maintained -F: drivers/video/atmel_lcdfb.c -F: include/video/atmel_lcdc.h - -ATMEL MACB ETHERNET DRIVER -M: Nicolas Ferre -S: Supported -F: drivers/net/ethernet/cadence/ - -ATMEL SPI DRIVER -M: Nicolas Ferre -S: Supported -F: drivers/spi/spi-atmel.* - -ATMEL USBA UDC DRIVER -M: Nicolas Ferre -L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) -W: http://avr32linux.org/twiki/bin/view/Main/AtmelUsbDeviceDriver -S: Supported -F: drivers/usb/gadget/atmel_usba_udc.* - -ATMEL WIRELESS DRIVER -M: Simon Kelley -L: linux-wireless@vger.kernel.org -W: http://www.thekelleys.org.uk/atmel -W: http://atmelwlandriver.sourceforge.net/ -S: Maintained -F: drivers/net/wireless/atmel* - -AUDIT SUBSYSTEM -M: Al Viro -M: Eric Paris -L: linux-audit@redhat.com (subscribers-only) -W: http://people.redhat.com/sgrubb/audit/ -T: git git://git.kernel.org/pub/scm/linux/kernel/git/viro/audit-current.git -S: Maintained -F: include/linux/audit.h -F: kernel/audit* - -AUXILIARY DISPLAY DRIVERS -M: Miguel Ojeda Sandonis -W: http://miguelojeda.es/auxdisplay.htm -W: http://jair.lab.fi.uva.es/~migojed/auxdisplay.htm -S: Maintained -F: drivers/auxdisplay/ -F: include/linux/cfag12864b.h - -AVR32 ARCHITECTURE -M: Haavard Skinnemoen -M: Hans-Christian Egtvedt -W: http://www.atmel.com/products/AVR32/ -W: http://avr32linux.org/ -W: http://avrfreaks.net/ -S: Maintained -F: arch/avr32/ - -AVR32/AT32AP MACHINE SUPPORT -M: Haavard Skinnemoen -M: Hans-Christian Egtvedt -S: Maintained -F: arch/avr32/mach-at32ap/ - -AX.25 NETWORK LAYER -M: Ralf Baechle -L: linux-hams@vger.kernel.org -W: http://www.linux-ax25.org/ -S: Maintained -F: include/linux/ax25.h -F: include/net/ax25.h -F: net/ax25/ - -B43 WIRELESS DRIVER -M: Stefano Brivio -L: linux-wireless@vger.kernel.org -L: b43-dev@lists.infradead.org -W: http://linuxwireless.org/en/users/Drivers/b43 -S: Maintained -F: drivers/net/wireless/b43/ - -B43LEGACY WIRELESS DRIVER -M: Larry Finger -M: Stefano Brivio -L: linux-wireless@vger.kernel.org -L: b43-dev@lists.infradead.org -W: http://linuxwireless.org/en/users/Drivers/b43 -S: Maintained -F: drivers/net/wireless/b43legacy/ - -BACKLIGHT CLASS/SUBSYSTEM -M: Richard Purdie -S: Maintained -F: drivers/video/backlight/ -F: include/linux/backlight.h - -BATMAN ADVANCED -M: Marek Lindner -M: Simon Wunderlich -L: b.a.t.m.a.n@lists.open-mesh.org -W: http://www.open-mesh.org/ -S: Maintained -F: net/batman-adv/ - -BAYCOM/HDLCDRV DRIVERS FOR AX.25 -M: Thomas Sailer -L: linux-hams@vger.kernel.org -W: http://www.baycom.org/~tom/ham/ham.html -S: Maintained -F: drivers/net/hamradio/baycom* - -BEFS FILE SYSTEM -S: Orphan -F: Documentation/filesystems/befs.txt -F: fs/befs/ - -BFS FILE SYSTEM -M: "Tigran A. Aivazian" -S: Maintained -F: Documentation/filesystems/bfs.txt -F: fs/bfs/ -F: include/linux/bfs_fs.h - -BLACKFIN ARCHITECTURE -M: Mike Frysinger -L: uclinux-dist-devel@blackfin.uclinux.org -W: http://blackfin.uclinux.org -S: Supported -F: arch/blackfin/ - -BLACKFIN EMAC DRIVER -L: uclinux-dist-devel@blackfin.uclinux.org -W: http://blackfin.uclinux.org -S: Supported -F: drivers/net/ethernet/adi/ - -BLACKFIN RTC DRIVER -M: Mike Frysinger -L: uclinux-dist-devel@blackfin.uclinux.org -W: http://blackfin.uclinux.org -S: Supported -F: drivers/rtc/rtc-bfin.c - -BLACKFIN SDH DRIVER -M: Cliff Cai -L: uclinux-dist-devel@blackfin.uclinux.org -W: http://blackfin.uclinux.org -S: Supported -F: drivers/mmc/host/bfin_sdh.c - -BLACKFIN SERIAL DRIVER -M: Sonic Zhang -L: uclinux-dist-devel@blackfin.uclinux.org -W: http://blackfin.uclinux.org -S: Supported -F: drivers/tty/serial/bfin_uart.c - -BLACKFIN WATCHDOG DRIVER -M: Mike Frysinger -L: uclinux-dist-devel@blackfin.uclinux.org -W: http://blackfin.uclinux.org -S: Supported -F: drivers/watchdog/bfin_wdt.c - -BLACKFIN I2C TWI DRIVER -M: Sonic Zhang -L: uclinux-dist-devel@blackfin.uclinux.org -W: http://blackfin.uclinux.org/ -S: Supported -F: drivers/i2c/busses/i2c-bfin-twi.c - -BLOCK LAYER -M: Jens Axboe -T: git git://git.kernel.org/pub/scm/linux/kernel/git/axboe/linux-block.git -S: Maintained -F: block/ - -BLOCK2MTD DRIVER -M: Joern Engel -L: linux-mtd@lists.infradead.org -S: Maintained -F: drivers/mtd/devices/block2mtd.c - -BLUETOOTH DRIVERS -M: Marcel Holtmann -M: Gustavo Padovan -M: Johan Hedberg -L: linux-bluetooth@vger.kernel.org -W: http://www.bluez.org/ -T: git git://git.kernel.org/pub/scm/linux/kernel/git/bluetooth/bluetooth.git -T: git git://git.kernel.org/pub/scm/linux/kernel/git/bluetooth/bluetooth-next.git -S: Maintained -F: drivers/bluetooth/ - -BLUETOOTH SUBSYSTEM -M: Marcel Holtmann -M: Gustavo Padovan -M: Johan Hedberg -L: linux-bluetooth@vger.kernel.org -W: http://www.bluez.org/ -T: git git://git.kernel.org/pub/scm/linux/kernel/git/bluetooth/bluetooth.git -T: git git://git.kernel.org/pub/scm/linux/kernel/git/bluetooth/bluetooth-next.git -S: Maintained -F: net/bluetooth/ -F: include/net/bluetooth/ - -BONDING DRIVER -M: Jay Vosburgh -M: Andy Gospodarek -L: netdev@vger.kernel.org -W: http://sourceforge.net/projects/bonding/ -S: Supported -F: drivers/net/bonding/ -F: include/linux/if_bonding.h - -BROADCOM B44 10/100 ETHERNET DRIVER -M: Gary Zambrano -L: netdev@vger.kernel.org -S: Supported -F: drivers/net/ethernet/broadcom/b44.* - -BROADCOM BNX2 GIGABIT ETHERNET DRIVER -M: Michael Chan -L: netdev@vger.kernel.org -S: Supported -F: drivers/net/ethernet/broadcom/bnx2.* -F: drivers/net/ethernet/broadcom/bnx2_* - -BROADCOM BNX2X 10 GIGABIT ETHERNET DRIVER -M: Eilon Greenstein -L: netdev@vger.kernel.org -S: Supported -F: drivers/net/ethernet/broadcom/bnx2x/ - -BROADCOM TG3 GIGABIT ETHERNET DRIVER -M: Matt Carlson -M: Michael Chan -L: netdev@vger.kernel.org -S: Supported -F: drivers/net/ethernet/broadcom/tg3.* - -BROADCOM BRCM80211 IEEE802.11n WIRELESS DRIVER -M: Brett Rudley -M: Roland Vossen -M: Arend van Spriel -M: Franky (Zhenhui) Lin -M: Kan Yan -L: linux-wireless@vger.kernel.org -S: Supported -F: drivers/net/wireless/brcm80211/ - -BROADCOM BNX2FC 10 GIGABIT FCOE DRIVER -M: Bhanu Prakash Gollapudi -L: linux-scsi@vger.kernel.org -S: Supported -F: drivers/scsi/bnx2fc/ - -BROADCOM SPECIFIC AMBA DRIVER (BCMA) -M: RafaÅ‚ MiÅ‚ecki -L: linux-wireless@vger.kernel.org -S: Maintained -F: drivers/bcma/ -F: include/linux/bcma/ - -BROCADE BFA FC SCSI DRIVER -M: Jing Huang -L: linux-scsi@vger.kernel.org -S: Supported -F: drivers/scsi/bfa/ - -BROCADE BNA 10 GIGABIT ETHERNET DRIVER -M: Rasesh Mody -L: netdev@vger.kernel.org -S: Supported -F: drivers/net/ethernet/brocade/bna/ - -BSG (block layer generic sg v4 driver) -M: FUJITA Tomonori -L: linux-scsi@vger.kernel.org -S: Supported -F: block/bsg.c -F: include/linux/bsg.h - -BT87X AUDIO DRIVER -M: Clemens Ladisch -L: alsa-devel@alsa-project.org (moderated for non-subscribers) -T: git git://git.alsa-project.org/alsa-kernel.git -S: Maintained -F: Documentation/sound/alsa/Bt87x.txt -F: sound/pci/bt87x.c - -BT8XXGPIO DRIVER -M: Michael Buesch -W: http://bu3sch.de/btgpio.php -S: Maintained -F: drivers/gpio/gpio-bt8xx.c - -BTRFS FILE SYSTEM -M: Chris Mason -L: linux-btrfs@vger.kernel.org -W: http://btrfs.wiki.kernel.org/ -Q: http://patchwork.kernel.org/project/linux-btrfs/list/ -T: git git://git.kernel.org/pub/scm/linux/kernel/git/mason/btrfs-unstable.git -S: Maintained -F: Documentation/filesystems/btrfs.txt -F: fs/btrfs/ - -BTTV VIDEO4LINUX DRIVER -M: Mauro Carvalho Chehab -L: linux-media@vger.kernel.org -W: http://linuxtv.org -T: git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media.git -S: Maintained -F: Documentation/video4linux/bttv/ -F: drivers/media/video/bt8xx/bttv* - -C-MEDIA CMI8788 DRIVER -M: Clemens Ladisch -L: alsa-devel@alsa-project.org (moderated for non-subscribers) -T: git git://git.alsa-project.org/alsa-kernel.git -S: Maintained -F: sound/pci/oxygen/ - -C6X ARCHITECTURE -M: Mark Salter -M: Aurelien Jacquiot -L: linux-c6x-dev@linux-c6x.org -W: http://www.linux-c6x.org/wiki/index.php/Main_Page -S: Maintained -F: arch/c6x/ - -CACHEFILES: FS-CACHE BACKEND FOR CACHING ON MOUNTED FILESYSTEMS -M: David Howells -L: linux-cachefs@redhat.com -S: Supported -F: Documentation/filesystems/caching/cachefiles.txt -F: fs/cachefiles/ - -CAFE CMOS INTEGRATED CAMERA CONTROLLER DRIVER -M: Jonathan Corbet -L: linux-media@vger.kernel.org -T: git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media.git -S: Maintained -F: Documentation/video4linux/cafe_ccic -F: drivers/media/video/marvell-ccic/ - -CAIF NETWORK LAYER -M: Sjur Braendeland -L: netdev@vger.kernel.org -S: Supported -F: Documentation/networking/caif/ -F: drivers/net/caif/ -F: include/linux/caif/ -F: include/net/caif/ -F: net/caif/ - -CALGARY x86-64 IOMMU -M: Muli Ben-Yehuda -M: "Jon D. Mason" -L: discuss@x86-64.org -S: Maintained -F: arch/x86/kernel/pci-calgary_64.c -F: arch/x86/kernel/tce_64.c -F: arch/x86/include/asm/calgary.h -F: arch/x86/include/asm/tce.h - -CAN NETWORK LAYER -M: Oliver Hartkopp -L: linux-can@vger.kernel.org -W: http://gitorious.org/linux-can -T: git git://gitorious.org/linux-can/linux-can-next.git -S: Maintained -F: net/can/ -F: include/linux/can.h -F: include/linux/can/core.h -F: include/linux/can/bcm.h -F: include/linux/can/raw.h -F: include/linux/can/gw.h - -CAN NETWORK DRIVERS -M: Wolfgang Grandegger -M: Marc Kleine-Budde -L: linux-can@vger.kernel.org -W: http://gitorious.org/linux-can -T: git git://gitorious.org/linux-can/linux-can-next.git -S: Maintained -F: drivers/net/can/ -F: include/linux/can/dev.h -F: include/linux/can/error.h -F: include/linux/can/netlink.h -F: include/linux/can/platform/ - -CAPABILITIES -M: Serge Hallyn -L: linux-security-module@vger.kernel.org -S: Supported -F: include/linux/capability.h -F: security/capability.c -F: security/commoncap.c - -CELL BROADBAND ENGINE ARCHITECTURE -M: Arnd Bergmann -L: linuxppc-dev@lists.ozlabs.org -L: cbe-oss-dev@lists.ozlabs.org -W: http://www.ibm.com/developerworks/power/cell/ -S: Supported -F: arch/powerpc/include/asm/cell*.h -F: arch/powerpc/include/asm/spu*.h -F: arch/powerpc/oprofile/*cell* -F: arch/powerpc/platforms/cell/ - -CEPH DISTRIBUTED FILE SYSTEM CLIENT -M: Sage Weil -L: ceph-devel@vger.kernel.org -W: http://ceph.newdream.net/ -T: git git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph-client.git -S: Supported -F: Documentation/filesystems/ceph.txt -F: fs/ceph -F: net/ceph -F: include/linux/ceph - -CERTIFIED WIRELESS USB (WUSB) SUBSYSTEM: -L: linux-usb@vger.kernel.org -S: Orphan -F: Documentation/usb/WUSB-Design-overview.txt -F: Documentation/usb/wusb-cbaf -F: drivers/usb/host/hwa-hc.c -F: drivers/usb/host/whci/ -F: drivers/usb/wusbcore/ -F: include/linux/usb/wusb* - -CFAG12864B LCD DRIVER -M: Miguel Ojeda Sandonis -W: http://miguelojeda.es/auxdisplay.htm -W: http://jair.lab.fi.uva.es/~migojed/auxdisplay.htm -S: Maintained -F: drivers/auxdisplay/cfag12864b.c -F: include/linux/cfag12864b.h - -CFAG12864BFB LCD FRAMEBUFFER DRIVER -M: Miguel Ojeda Sandonis -W: http://miguelojeda.es/auxdisplay.htm -W: http://jair.lab.fi.uva.es/~migojed/auxdisplay.htm -S: Maintained -F: drivers/auxdisplay/cfag12864bfb.c -F: include/linux/cfag12864b.h - -CFG80211 and NL80211 -M: Johannes Berg -L: linux-wireless@vger.kernel.org -S: Maintained -F: include/linux/nl80211.h -F: include/net/cfg80211.h -F: net/wireless/* -X: net/wireless/wext* - -CHAR and MISC DRIVERS -M: Arnd Bergmann -M: Greg Kroah-Hartman -T: git git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/char-misc.git -S: Supported -F: drivers/char/* -F: drivers/misc/* - -CHECKPATCH -M: Andy Whitcroft -S: Supported -F: scripts/checkpatch.pl - -CHINESE DOCUMENTATION -M: Harry Wei -L: xiyoulinuxkernelgroup@googlegroups.com -L: linux-kernel@zh-kernel.org (moderated for non-subscribers) -S: Maintained -F: Documentation/zh_CN/ - -CISCO VIC ETHERNET NIC DRIVER -M: Christian Benvenuti -M: Roopa Prabhu -M: Neel Patel -M: Nishank Trivedi -S: Supported -F: drivers/net/ethernet/cisco/enic/ - -CIRRUS LOGIC EP93XX ETHERNET DRIVER -M: Hartley Sweeten -L: netdev@vger.kernel.org -S: Maintained -F: drivers/net/ethernet/cirrus/ep93xx_eth.c - -CIRRUS LOGIC EP93XX OHCI USB HOST DRIVER -M: Lennert Buytenhek -L: linux-usb@vger.kernel.org -S: Maintained -F: drivers/usb/host/ohci-ep93xx.c - -CIRRUS LOGIC CS4270 SOUND DRIVER -M: Timur Tabi -L: alsa-devel@alsa-project.org (moderated for non-subscribers) -S: Supported -F: sound/soc/codecs/cs4270* - -CLEANCACHE API -M: Konrad Rzeszutek Wilk -L: linux-kernel@vger.kernel.org -S: Maintained -F: mm/cleancache.c -F: include/linux/cleancache.h - -CLK API -M: Russell King -S: Maintained -F: include/linux/clk.h - -CISCO FCOE HBA DRIVER -M: Abhijeet Joglekar -M: Venkata Siva Vijayendra Bhamidipati -M: Brian Uchino -L: linux-scsi@vger.kernel.org -S: Supported -F: drivers/scsi/fnic/ - -CMPC ACPI DRIVER -M: Thadeu Lima de Souza Cascardo -M: Daniel Oliveira Nascimento -L: platform-driver-x86@vger.kernel.org -S: Supported -F: drivers/platform/x86/classmate-laptop.c - -COCCINELLE/Semantic Patches (SmPL) -M: Julia Lawall -M: Gilles Muller -M: Nicolas Palix -L: cocci@diku.dk (moderated for non-subscribers) -W: http://coccinelle.lip6.fr/ -S: Supported -F: scripts/coccinelle/ -F: scripts/coccicheck - -CODA FILE SYSTEM -M: Jan Harkes -M: coda@cs.cmu.edu -L: codalist@coda.cs.cmu.edu -W: http://www.coda.cs.cmu.edu/ -S: Maintained -F: Documentation/filesystems/coda.txt -F: fs/coda/ -F: include/linux/coda*.h - -COMMON INTERNET FILE SYSTEM (CIFS) -M: Steve French -L: linux-cifs@vger.kernel.org -L: samba-technical@lists.samba.org (moderated for non-subscribers) -W: http://linux-cifs.samba.org/ -Q: http://patchwork.ozlabs.org/project/linux-cifs-client/list/ -T: git git://git.kernel.org/pub/scm/linux/kernel/git/sfrench/cifs-2.6.git -S: Supported -F: Documentation/filesystems/cifs.txt -F: fs/cifs/ - -COMPACTPCI HOTPLUG CORE -M: Scott Murray -L: linux-pci@vger.kernel.org -S: Maintained -F: drivers/pci/hotplug/cpci_hotplug* - -COMPACTPCI HOTPLUG ZIATECH ZT5550 DRIVER -M: Scott Murray -L: linux-pci@vger.kernel.org -S: Maintained -F: drivers/pci/hotplug/cpcihp_zt5550.* - -COMPACTPCI HOTPLUG GENERIC DRIVER -M: Scott Murray -L: linux-pci@vger.kernel.org -S: Maintained -F: drivers/pci/hotplug/cpcihp_generic.c - -COMPAL LAPTOP SUPPORT -M: Cezary Jackiewicz -L: platform-driver-x86@vger.kernel.org -S: Maintained -F: drivers/platform/x86/compal-laptop.c - -CONEXANT ACCESSRUNNER USB DRIVER -M: Simon Arlott -L: accessrunner-general@lists.sourceforge.net -W: http://accessrunner.sourceforge.net/ -S: Maintained -F: drivers/usb/atm/cxacru.c - -CONFIGFS -M: Joel Becker -T: git git://git.kernel.org/pub/scm/linux/kernel/git/jlbec/configfs.git -S: Supported -F: fs/configfs/ -F: include/linux/configfs.h - -CONNECTOR -M: Evgeniy Polyakov -L: netdev@vger.kernel.org -S: Maintained -F: drivers/connector/ - -CONTROL GROUPS (CGROUPS) -M: Tejun Heo -M: Li Zefan -L: containers@lists.linux-foundation.org -L: cgroups@vger.kernel.org -T: git git://git.kernel.org/pub/scm/linux/kernel/git/tj/cgroup.git -S: Maintained -F: include/linux/cgroup* -F: kernel/cgroup* -F: mm/*cgroup* - -CORETEMP HARDWARE MONITORING DRIVER -M: Fenghua Yu -L: lm-sensors@lm-sensors.org -S: Maintained -F: Documentation/hwmon/coretemp -F: drivers/hwmon/coretemp.c - -COSA/SRP SYNC SERIAL DRIVER -M: Jan "Yenya" Kasprzak -W: http://www.fi.muni.cz/~kas/cosa/ -S: Maintained -F: drivers/net/wan/cosa* - -CPMAC ETHERNET DRIVER -M: Florian Fainelli -L: netdev@vger.kernel.org -S: Maintained -F: drivers/net/ethernet/ti/cpmac.c - -CPU FREQUENCY DRIVERS -M: Dave Jones -L: cpufreq@vger.kernel.org -W: http://www.codemonkey.org.uk/projects/cpufreq/ -T: git git://git.kernel.org/pub/scm/linux/kernel/git/davej/cpufreq.git -S: Maintained -F: drivers/cpufreq/ -F: include/linux/cpufreq.h - -CPUID/MSR DRIVER -M: "H. Peter Anvin" -S: Maintained -F: arch/x86/kernel/cpuid.c -F: arch/x86/kernel/msr.c - -CPU POWER MONITORING SUBSYSTEM -M: Dominik Brodowski -M: Thomas Renninger -S: Maintained -F: tools/power/cpupower - -CPUSETS -M: Paul Menage -W: http://www.bullopensource.org/cpuset/ -W: http://oss.sgi.com/projects/cpusets/ -S: Supported -F: Documentation/cgroups/cpusets.txt -F: include/linux/cpuset.h -F: kernel/cpuset.c - -CRAMFS FILESYSTEM -W: http://sourceforge.net/projects/cramfs/ -S: Orphan -F: Documentation/filesystems/cramfs.txt -F: fs/cramfs/ - -CRIS PORT -M: Mikael Starvik -M: Jesper Nilsson -L: linux-cris-kernel@axis.com -W: http://developer.axis.com -S: Maintained -F: arch/cris/ -F: drivers/tty/serial/crisv10.* - -CRYPTO API -M: Herbert Xu -M: "David S. Miller" -L: linux-crypto@vger.kernel.org -T: git git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6.git -S: Maintained -F: Documentation/crypto/ -F: arch/*/crypto/ -F: crypto/ -F: drivers/crypto/ -F: include/crypto/ - -CRYPTOGRAPHIC RANDOM NUMBER GENERATOR -M: Neil Horman -L: linux-crypto@vger.kernel.org -S: Maintained -F: crypto/ansi_cprng.c -F: crypto/rng.c - -CS5535 Audio ALSA driver -M: Jaya Kumar -S: Maintained -F: sound/pci/cs5535audio/ - -CX18 VIDEO4LINUX DRIVER -M: Andy Walls -L: ivtv-devel@ivtvdriver.org (moderated for non-subscribers) -L: linux-media@vger.kernel.org -T: git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media.git -W: http://linuxtv.org -W: http://www.ivtvdriver.org/index.php/Cx18 -S: Maintained -F: Documentation/video4linux/cx18.txt -F: drivers/media/video/cx18/ - -CXGB3 ETHERNET DRIVER (CXGB3) -M: Divy Le Ray -L: netdev@vger.kernel.org -W: http://www.chelsio.com -S: Supported -F: drivers/net/ethernet/chelsio/cxgb3/ - -CXGB3 IWARP RNIC DRIVER (IW_CXGB3) -M: Steve Wise -L: linux-rdma@vger.kernel.org -W: http://www.openfabrics.org -S: Supported -F: drivers/infiniband/hw/cxgb3/ - -CXGB4 ETHERNET DRIVER (CXGB4) -M: Dimitris Michailidis -L: netdev@vger.kernel.org -W: http://www.chelsio.com -S: Supported -F: drivers/net/ethernet/chelsio/cxgb4/ - -CXGB4 IWARP RNIC DRIVER (IW_CXGB4) -M: Steve Wise -L: linux-rdma@vger.kernel.org -W: http://www.openfabrics.org -S: Supported -F: drivers/infiniband/hw/cxgb4/ - -CXGB4VF ETHERNET DRIVER (CXGB4VF) -M: Casey Leedom -L: netdev@vger.kernel.org -W: http://www.chelsio.com -S: Supported -F: drivers/net/ethernet/chelsio/cxgb4vf/ - -STMMAC ETHERNET DRIVER -M: Giuseppe Cavallaro -L: netdev@vger.kernel.org -W: http://www.stlinux.com -S: Supported -F: drivers/net/ethernet/stmicro/stmmac/ - -CYBERPRO FB DRIVER -M: Russell King -L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) -W: http://www.arm.linux.org.uk/ -S: Maintained -F: drivers/video/cyber2000fb.* - -CYCLADES 2X SYNC CARD DRIVER -M: Arnaldo Carvalho de Melo -W: http://oops.ghostprotocols.net:81/blog -S: Maintained -F: drivers/net/wan/cycx* - -CYCLADES ASYNC MUX DRIVER -W: http://www.cyclades.com/ -S: Orphan -F: drivers/tty/cyclades.c -F: include/linux/cyclades.h - -CYCLADES PC300 DRIVER -W: http://www.cyclades.com/ -S: Orphan -F: drivers/net/wan/pc300* - -CYTTSP TOUCHSCREEN DRIVER -M: Javier Martinez Canillas -L: linux-input@vger.kernel.org -S: Maintained -F: drivers/input/touchscreen/cyttsp* -F: include/linux/input/cyttsp.h - -DAMA SLAVE for AX.25 -M: Joerg Reuter -W: http://yaina.de/jreuter/ -W: http://www.qsl.net/dl1bke/ -L: linux-hams@vger.kernel.org -S: Maintained -F: net/ax25/af_ax25.c -F: net/ax25/ax25_dev.c -F: net/ax25/ax25_ds_* -F: net/ax25/ax25_in.c -F: net/ax25/ax25_out.c -F: net/ax25/ax25_timer.c -F: net/ax25/sysctl_net_ax25.c - -DAVICOM FAST ETHERNET (DMFE) NETWORK DRIVER -L: netdev@vger.kernel.org -S: Orphan -F: Documentation/networking/dmfe.txt -F: drivers/net/ethernet/dec/tulip/dmfe.c - -DC390/AM53C974 SCSI driver -M: Kurt Garloff -W: http://www.garloff.de/kurt/linux/dc390/ -M: Guennadi Liakhovetski -S: Maintained -F: drivers/scsi/tmscsim.* - -DC395x SCSI driver -M: Oliver Neukum -M: Ali Akcaagac -M: Jamie Lenehan -W: http://twibble.org/dist/dc395x/ -L: dc395x@twibble.org -L: http://lists.twibble.org/mailman/listinfo/dc395x/ -S: Maintained -F: Documentation/scsi/dc395x.txt -F: drivers/scsi/dc395x.* - -DCCP PROTOCOL -M: Gerrit Renker -L: dccp@vger.kernel.org -W: http://www.linuxfoundation.org/collaborate/workgroups/networking/dccp -S: Maintained -F: include/linux/dccp.h -F: include/linux/tfrc.h -F: net/dccp/ - -DECnet NETWORK LAYER -W: http://linux-decnet.sourceforge.net -L: linux-decnet-user@lists.sourceforge.net -S: Orphan -F: Documentation/networking/decnet.txt -F: net/decnet/ - -DEFXX FDDI NETWORK DRIVER -M: "Maciej W. Rozycki" -S: Maintained -F: drivers/net/fddi/defxx.* - -DELL LAPTOP DRIVER -M: Matthew Garrett -L: platform-driver-x86@vger.kernel.org -S: Maintained -F: drivers/platform/x86/dell-laptop.c - -DELL LAPTOP SMM DRIVER -M: Massimo Dal Zotto -W: http://www.debian.org/~dz/i8k/ -S: Maintained -F: drivers/char/i8k.c -F: include/linux/i8k.h - -DELL SYSTEMS MANAGEMENT BASE DRIVER (dcdbas) -M: Doug Warzecha -S: Maintained -F: Documentation/dcdbas.txt -F: drivers/firmware/dcdbas.* - -DELL WMI EXTRAS DRIVER -M: Matthew Garrett -S: Maintained -F: drivers/platform/x86/dell-wmi.c - -DESIGNWARE USB3 DRD IP DRIVER -M: Felipe Balbi -L: linux-usb@vger.kernel.org -L: linux-omap@vger.kernel.org -T: git git://git.kernel.org/pub/scm/linux/kernel/git/balbi/usb.git -S: Maintained -F: drivers/usb/dwc3/ - -DEVICE FREQUENCY (DEVFREQ) -M: MyungJoo Ham -M: Kyungmin Park -L: linux-kernel@vger.kernel.org -S: Maintained -F: drivers/devfreq/ - -DEVICE NUMBER REGISTRY -M: Torben Mathiasen -W: http://lanana.org/docs/device-list/index.html -S: Maintained - -DEVICE-MAPPER (LVM) -M: Alasdair Kergon -M: dm-devel@redhat.com -L: dm-devel@redhat.com -W: http://sources.redhat.com/dm -Q: http://patchwork.kernel.org/project/dm-devel/list/ -T: quilt http://people.redhat.com/agk/patches/linux/editing/ -S: Maintained -F: Documentation/device-mapper/ -F: drivers/md/dm* -F: drivers/md/persistent-data/ -F: include/linux/device-mapper.h -F: include/linux/dm-*.h - -DIOLAN U2C-12 I2C DRIVER -M: Guenter Roeck -L: linux-i2c@vger.kernel.org -S: Maintained -F: drivers/i2c/busses/i2c-diolan-u2c.c - -DIRECTORY NOTIFICATION (DNOTIFY) -M: Eric Paris -S: Maintained -F: Documentation/filesystems/dnotify.txt -F: fs/notify/dnotify/ -F: include/linux/dnotify.h - -DISK GEOMETRY AND PARTITION HANDLING -M: Andries Brouwer -W: http://www.win.tue.nl/~aeb/linux/Large-Disk.html -W: http://www.win.tue.nl/~aeb/linux/zip/zip-1.html -W: http://www.win.tue.nl/~aeb/partitions/partition_types-1.html -S: Maintained - -DISKQUOTA -M: Jan Kara -S: Maintained -F: Documentation/filesystems/quota.txt -F: fs/quota/ -F: include/linux/quota*.h - -DISPLAYLINK USB 2.0 FRAMEBUFFER DRIVER (UDLFB) -M: Bernie Thompson -L: linux-fbdev@vger.kernel.org -S: Maintained -W: http://plugable.com/category/projects/udlfb/ -F: drivers/video/udlfb.c -F: include/video/udlfb.h -F: Documentation/fb/udlfb.txt - -DISTRIBUTED LOCK MANAGER (DLM) -M: Christine Caulfield -M: David Teigland -L: cluster-devel@redhat.com -W: http://sources.redhat.com/cluster/ -T: git git://git.kernel.org/pub/scm/linux/kernel/git/teigland/dlm.git -S: Supported -F: fs/dlm/ - -DMA BUFFER SHARING FRAMEWORK -M: Sumit Semwal -S: Maintained -L: linux-media@vger.kernel.org -L: dri-devel@lists.freedesktop.org -L: linaro-mm-sig@lists.linaro.org -F: drivers/base/dma-buf* -F: include/linux/dma-buf* -F: Documentation/dma-buf-sharing.txt -T: git git://git.linaro.org/people/sumitsemwal/linux-dma-buf.git - -DMA GENERIC OFFLOAD ENGINE SUBSYSTEM -M: Vinod Koul -M: Dan Williams -S: Supported -F: drivers/dma/ -F: include/linux/dma* -T: git git://git.kernel.org/pub/scm/linux/kernel/git/djbw/async_tx.git -T: git git://git.infradead.org/users/vkoul/slave-dma.git (slave-dma) - -DME1737 HARDWARE MONITOR DRIVER -M: Juerg Haefliger -L: lm-sensors@lm-sensors.org -S: Maintained -F: Documentation/hwmon/dme1737 -F: drivers/hwmon/dme1737.c - -DOCBOOK FOR DOCUMENTATION -M: Randy Dunlap -S: Maintained -F: scripts/kernel-doc - -DOCKING STATION DRIVER -M: Shaohua Li -L: linux-acpi@vger.kernel.org -S: Supported -F: drivers/acpi/dock.c - -DOCUMENTATION -M: Randy Dunlap -L: linux-doc@vger.kernel.org -T: quilt http://xenotime.net/kernel-doc-patches/current/ -S: Maintained -F: Documentation/ - -DOUBLETALK DRIVER -M: "James R. Van Zandt" -L: blinux-list@redhat.com -S: Maintained -F: drivers/char/dtlk.c -F: include/linux/dtlk.h - -DPT_I2O SCSI RAID DRIVER -M: Adaptec OEM Raid Solutions -L: linux-scsi@vger.kernel.org -W: http://www.adaptec.com/ -S: Maintained -F: drivers/scsi/dpt* -F: drivers/scsi/dpt/ - -DRBD DRIVER -P: Philipp Reisner -P: Lars Ellenberg -M: drbd-dev@lists.linbit.com -L: drbd-user@lists.linbit.com -W: http://www.drbd.org -T: git git://git.drbd.org/linux-2.6-drbd.git drbd -T: git git://git.drbd.org/drbd-8.3.git -S: Supported -F: drivers/block/drbd/ -F: lib/lru_cache.c -F: Documentation/blockdev/drbd/ - -DRIVER CORE, KOBJECTS, DEBUGFS AND SYSFS -M: Greg Kroah-Hartman -T: git git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core.git -S: Supported -F: Documentation/kobject.txt -F: drivers/base/ -F: fs/sysfs/ -F: fs/debugfs/ -F: include/linux/kobj* -F: include/linux/debugfs.h -F: lib/kobj* - -DRM DRIVERS -M: David Airlie -L: dri-devel@lists.freedesktop.org -T: git git://git.kernel.org/pub/scm/linux/kernel/git/airlied/drm-2.6.git -S: Maintained -F: drivers/gpu/drm/ -F: include/drm/ - -INTEL DRM DRIVERS (excluding Poulsbo, Moorestown and derivative chipsets) -M: Keith Packard -L: intel-gfx@lists.freedesktop.org (subscribers-only) -L: dri-devel@lists.freedesktop.org -T: git git://git.kernel.org/pub/scm/linux/kernel/git/keithp/linux.git -S: Supported -F: drivers/gpu/drm/i915 -F: include/drm/i915* - -DRM DRIVERS FOR EXYNOS -M: Inki Dae -M: Joonyoung Shim -M: Seung-Woo Kim -M: Kyungmin Park -L: dri-devel@lists.freedesktop.org -S: Supported -F: drivers/gpu/drm/exynos -F: include/drm/exynos* - -DSCC4 DRIVER -M: Francois Romieu -L: netdev@vger.kernel.org -S: Maintained -F: drivers/net/wan/dscc4.c - -DYNAMIC DEBUG -M: Jason Baron -S: Maintained -F: lib/dynamic_debug.c -F: include/linux/dynamic_debug.h - -DZ DECSTATION DZ11 SERIAL DRIVER -M: "Maciej W. Rozycki" -S: Maintained -F: drivers/tty/serial/dz.* - -EATA-DMA SCSI DRIVER -M: Michael Neuffer -L: linux-eata@i-connect.net -L: linux-scsi@vger.kernel.org -S: Maintained -F: drivers/scsi/eata* - -EATA ISA/EISA/PCI SCSI DRIVER -M: Dario Ballabio -L: linux-scsi@vger.kernel.org -S: Maintained -F: drivers/scsi/eata.c - -EATA-PIO SCSI DRIVER -M: Michael Neuffer -L: linux-eata@i-connect.net -L: linux-scsi@vger.kernel.org -S: Maintained -F: drivers/scsi/eata_pio.* - -EBTABLES -M: Bart De Schuymer -L: netfilter-devel@vger.kernel.org -W: http://ebtables.sourceforge.net/ -S: Maintained -F: include/linux/netfilter_bridge/ebt_*.h -F: net/bridge/netfilter/ebt*.c - -ECRYPT FILE SYSTEM -M: Tyler Hicks -M: Dustin Kirkland -L: ecryptfs@vger.kernel.org -W: https://launchpad.net/ecryptfs -S: Supported -F: Documentation/filesystems/ecryptfs.txt -F: fs/ecryptfs/ - -EDAC-CORE -M: Doug Thompson -L: linux-edac@vger.kernel.org -W: bluesmoke.sourceforge.net -S: Supported -F: Documentation/edac.txt -F: drivers/edac/ -F: include/linux/edac.h - -EDAC-AMD64 -M: Doug Thompson -M: Borislav Petkov -L: linux-edac@vger.kernel.org -W: bluesmoke.sourceforge.net -S: Supported -F: drivers/edac/amd64_edac* - -EDAC-E752X -M: Mark Gross -M: Doug Thompson -L: linux-edac@vger.kernel.org -W: bluesmoke.sourceforge.net -S: Maintained -F: drivers/edac/e752x_edac.c - -EDAC-E7XXX -M: Doug Thompson -L: linux-edac@vger.kernel.org -W: bluesmoke.sourceforge.net -S: Maintained -F: drivers/edac/e7xxx_edac.c - -EDAC-I82443BXGX -M: Tim Small -L: linux-edac@vger.kernel.org -W: bluesmoke.sourceforge.net -S: Maintained -F: drivers/edac/i82443bxgx_edac.c - -EDAC-I3000 -M: Jason Uhlenkott -L: linux-edac@vger.kernel.org -W: bluesmoke.sourceforge.net -S: Maintained -F: drivers/edac/i3000_edac.c - -EDAC-I5000 -M: Doug Thompson -L: linux-edac@vger.kernel.org -W: bluesmoke.sourceforge.net -S: Maintained -F: drivers/edac/i5000_edac.c - -EDAC-I5400 -M: Mauro Carvalho Chehab -L: linux-edac@vger.kernel.org -W: bluesmoke.sourceforge.net -S: Maintained -F: drivers/edac/i5400_edac.c - -EDAC-I7300 -M: Mauro Carvalho Chehab -L: linux-edac@vger.kernel.org -W: bluesmoke.sourceforge.net -S: Maintained -F: drivers/edac/i7300_edac.c - -EDAC-I7CORE -M: Mauro Carvalho Chehab -L: linux-edac@vger.kernel.org -W: bluesmoke.sourceforge.net -S: Maintained -F: drivers/edac/i7core_edac.c - -EDAC-I82975X -M: Ranganathan Desikan -M: "Arvind R." -L: linux-edac@vger.kernel.org -W: bluesmoke.sourceforge.net -S: Maintained -F: drivers/edac/i82975x_edac.c - -EDAC-PASEMI -M: Egor Martovetsky -L: linux-edac@vger.kernel.org -W: bluesmoke.sourceforge.net -S: Maintained -F: drivers/edac/pasemi_edac.c - -EDAC-R82600 -M: Tim Small -L: linux-edac@vger.kernel.org -W: bluesmoke.sourceforge.net -S: Maintained -F: drivers/edac/r82600_edac.c - -EDAC-SBRIDGE -M: Mauro Carvalho Chehab -L: linux-edac@vger.kernel.org -W: bluesmoke.sourceforge.net -S: Maintained -F: drivers/edac/sb_edac.c - -EDIROL UA-101/UA-1000 DRIVER -M: Clemens Ladisch -L: alsa-devel@alsa-project.org (moderated for non-subscribers) -T: git git://git.alsa-project.org/alsa-kernel.git -S: Maintained -F: sound/usb/misc/ua101.c - -EFIFB FRAMEBUFFER DRIVER -L: linux-fbdev@vger.kernel.org -M: Peter Jones -S: Maintained -F: drivers/video/efifb.c - -EFS FILESYSTEM -W: http://aeschi.ch.eu.org/efs/ -S: Orphan -F: fs/efs/ - -EHCA (IBM GX bus InfiniBand adapter) DRIVER -M: Hoang-Nam Nguyen -M: Christoph Raisch -L: linux-rdma@vger.kernel.org -S: Supported -F: drivers/infiniband/hw/ehca/ - -EHEA (IBM pSeries eHEA 10Gb ethernet adapter) DRIVER -M: Thadeu Lima de Souza Cascardo -L: netdev@vger.kernel.org -S: Maintained -F: drivers/net/ethernet/ibm/ehea/ - -EMBEDDED LINUX -M: Paul Gortmaker -M: Matt Mackall -M: David Woodhouse -L: linux-embedded@vger.kernel.org -S: Maintained - -EMULEX LPFC FC SCSI DRIVER -M: James Smart -L: linux-scsi@vger.kernel.org -W: http://sourceforge.net/projects/lpfcxxxx -S: Supported -F: drivers/scsi/lpfc/ - -ENE CB710 FLASH CARD READER DRIVER -M: MichaÅ‚ MirosÅ‚aw -S: Maintained -F: drivers/misc/cb710/ -F: drivers/mmc/host/cb710-mmc.* -F: include/linux/cb710.h - -ENE KB2426 (ENE0100/ENE020XX) INFRARED RECEIVER -M: Maxim Levitsky -S: Maintained -F: drivers/media/rc/ene_ir.* - -EPSON 1355 FRAMEBUFFER DRIVER -M: Christopher Hoover -M: Christopher Hoover -S: Maintained -F: drivers/video/epson1355fb.c - -EPSON S1D13XXX FRAMEBUFFER DRIVER -M: Kristoffer Ericson -S: Maintained -T: git git://git.kernel.org/pub/scm/linux/kernel/git/kristoffer/linux-hpc.git -F: drivers/video/s1d13xxxfb.c -F: include/video/s1d13xxxfb.h - -ETHEREXPRESS-16 NETWORK DRIVER -M: Philip Blundell -L: netdev@vger.kernel.org -S: Maintained -F: drivers/net/ethernet/i825xx/eexpress.* - -ETHERNET BRIDGE -M: Stephen Hemminger -L: bridge@lists.linux-foundation.org -L: netdev@vger.kernel.org -W: http://www.linuxfoundation.org/en/Net:Bridge -S: Maintained -F: include/linux/netfilter_bridge/ -F: net/bridge/ - -ETHERTEAM 16I DRIVER -M: Mika Kuoppala -S: Maintained -F: drivers/net/ethernet/fujitsu/eth16i.c - -EXT2 FILE SYSTEM -M: Jan Kara -L: linux-ext4@vger.kernel.org -S: Maintained -F: Documentation/filesystems/ext2.txt -F: fs/ext2/ -F: include/linux/ext2* - -EXT3 FILE SYSTEM -M: Jan Kara -M: Andrew Morton -M: Andreas Dilger -L: linux-ext4@vger.kernel.org -S: Maintained -F: Documentation/filesystems/ext3.txt -F: fs/ext3/ -F: include/linux/ext3* - -EXT4 FILE SYSTEM -M: "Theodore Ts'o" -M: Andreas Dilger -L: linux-ext4@vger.kernel.org -W: http://ext4.wiki.kernel.org -Q: http://patchwork.ozlabs.org/project/linux-ext4/list/ -S: Maintained -F: Documentation/filesystems/ext4.txt -F: fs/ext4/ - -Extended Verification Module (EVM) -M: Mimi Zohar -S: Supported -F: security/integrity/evm/ - -EXYNOS DP DRIVER -M: Jingoo Han -L: linux-fbdev@vger.kernel.org -S: Maintained -F: drivers/video/exynos/exynos_dp* - -EXYNOS MIPI DISPLAY DRIVERS -M: Inki Dae -M: Donghwa Lee -M: Kyungmin Park -L: linux-fbdev@vger.kernel.org -S: Maintained -F: drivers/video/exynos/exynos_mipi* -F: include/video/exynos_mipi* - -F71805F HARDWARE MONITORING DRIVER -M: Jean Delvare -L: lm-sensors@lm-sensors.org -S: Maintained -F: Documentation/hwmon/f71805f -F: drivers/hwmon/f71805f.c - -FANOTIFY -M: Eric Paris -S: Maintained -F: fs/notify/fanotify/ -F: include/linux/fanotify.h - -FARSYNC SYNCHRONOUS DRIVER -M: Kevin Curtis -W: http://www.farsite.co.uk/ -S: Supported -F: drivers/net/wan/farsync.* - -FAULT INJECTION SUPPORT -M: Akinobu Mita -S: Supported -F: Documentation/fault-injection/ -F: lib/fault-inject.c - -FCOE SUBSYSTEM (libfc, libfcoe, fcoe) -M: Robert Love -L: devel@open-fcoe.org -W: www.Open-FCoE.org -S: Supported -F: drivers/scsi/libfc/ -F: drivers/scsi/fcoe/ -F: include/scsi/fc/ -F: include/scsi/libfc.h -F: include/scsi/libfcoe.h - -FILE LOCKING (flock() and fcntl()/lockf()) -M: Matthew Wilcox -L: linux-fsdevel@vger.kernel.org -S: Maintained -F: include/linux/fcntl.h -F: include/linux/fs.h -F: fs/fcntl.c -F: fs/locks.c - -FILESYSTEMS (VFS and infrastructure) -M: Alexander Viro -L: linux-fsdevel@vger.kernel.org -S: Maintained -F: fs/* - -FINTEK F75375S HARDWARE MONITOR AND FAN CONTROLLER DRIVER -M: Riku Voipio -L: lm-sensors@lm-sensors.org -S: Maintained -F: drivers/hwmon/f75375s.c -F: include/linux/f75375s.h - -FIREWIRE AUDIO DRIVERS -M: Clemens Ladisch -L: alsa-devel@alsa-project.org (moderated for non-subscribers) -T: git git://git.alsa-project.org/alsa-kernel.git -S: Maintained -F: sound/firewire/ - -FIREWIRE SUBSYSTEM -M: Stefan Richter -L: linux1394-devel@lists.sourceforge.net -W: http://ieee1394.wiki.kernel.org/ -T: git git://git.kernel.org/pub/scm/linux/kernel/git/ieee1394/linux1394.git -S: Maintained -F: drivers/firewire/ -F: include/linux/firewire*.h -F: tools/firewire/ - -FIRMWARE LOADER (request_firmware) -S: Orphan -F: Documentation/firmware_class/ -F: drivers/base/firmware*.c -F: include/linux/firmware.h - -FPU EMULATOR -M: Bill Metzenthen -W: http://floatingpoint.sourceforge.net/emulator/index.html -S: Maintained -F: arch/x86/math-emu/ - -FRAME RELAY DLCI/FRAD (Sangoma drivers too) -L: netdev@vger.kernel.org -S: Orphan -F: drivers/net/wan/dlci.c -F: drivers/net/wan/sdla.c - -FRAMEBUFFER LAYER -M: Florian Tobias Schandinat -L: linux-fbdev@vger.kernel.org -W: http://linux-fbdev.sourceforge.net/ -Q: http://patchwork.kernel.org/project/linux-fbdev/list/ -T: git git://github.com/schandinat/linux-2.6.git fbdev-next -S: Maintained -F: Documentation/fb/ -F: Documentation/devicetree/bindings/fb/ -F: drivers/video/ -F: include/video/ -F: include/linux/fb.h - -FREESCALE DMA DRIVER -M: Li Yang -M: Zhang Wei -L: linuxppc-dev@lists.ozlabs.org -S: Maintained -F: drivers/dma/fsldma.* - -FREESCALE I2C CPM DRIVER -M: Jochen Friedrich -L: linuxppc-dev@lists.ozlabs.org -L: linux-i2c@vger.kernel.org -S: Maintained -F: drivers/i2c/busses/i2c-cpm.c - -FREESCALE IMX / MXC FRAMEBUFFER DRIVER -M: Sascha Hauer -L: linux-fbdev@vger.kernel.org -L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) -S: Maintained -F: arch/arm/plat-mxc/include/mach/imxfb.h -F: drivers/video/imxfb.c - -FREESCALE SOC FS_ENET DRIVER -M: Pantelis Antoniou -M: Vitaly Bordug -L: linuxppc-dev@lists.ozlabs.org -L: netdev@vger.kernel.org -S: Maintained -F: drivers/net/ethernet/freescale/fs_enet/ -F: include/linux/fs_enet_pd.h - -FREESCALE QUICC ENGINE LIBRARY -M: Timur Tabi -L: linuxppc-dev@lists.ozlabs.org -S: Supported -F: arch/powerpc/sysdev/qe_lib/ -F: arch/powerpc/include/asm/*qe.h - -FREESCALE USB PERIPHERAL DRIVERS -M: Li Yang -L: linux-usb@vger.kernel.org -L: linuxppc-dev@lists.ozlabs.org -S: Maintained -F: drivers/usb/gadget/fsl* - -FREESCALE QUICC ENGINE UCC ETHERNET DRIVER -M: Li Yang -L: netdev@vger.kernel.org -L: linuxppc-dev@lists.ozlabs.org -S: Maintained -F: drivers/net/ethernet/freescale/ucc_geth* - -FREESCALE QUICC ENGINE UCC UART DRIVER -M: Timur Tabi -L: linuxppc-dev@lists.ozlabs.org -S: Supported -F: drivers/tty/serial/ucc_uart.c - -FREESCALE SOC SOUND DRIVERS -M: Timur Tabi -L: alsa-devel@alsa-project.org (moderated for non-subscribers) -L: linuxppc-dev@lists.ozlabs.org -S: Supported -F: sound/soc/fsl/fsl* -F: sound/soc/fsl/mpc8610_hpcd.c - -FREEVXFS FILESYSTEM -M: Christoph Hellwig -W: ftp://ftp.openlinux.org/pub/people/hch/vxfs -S: Maintained -F: fs/freevxfs/ - -FREEZER -M: Pavel Machek -M: "Rafael J. Wysocki" -L: linux-pm@vger.kernel.org -S: Supported -F: Documentation/power/freezing-of-tasks.txt -F: include/linux/freezer.h -F: kernel/freezer.c - -FS-CACHE: LOCAL CACHING FOR NETWORK FILESYSTEMS -M: David Howells -L: linux-cachefs@redhat.com -S: Supported -F: Documentation/filesystems/caching/ -F: fs/fscache/ -F: include/linux/fscache*.h - -FUJITSU FR-V (FRV) PORT -M: David Howells -S: Maintained -F: arch/frv/ - -FUJITSU LAPTOP EXTRAS -M: Jonathan Woithe -L: platform-driver-x86@vger.kernel.org -S: Maintained -F: drivers/platform/x86/fujitsu-laptop.c - -FUJITSU M-5MO LS CAMERA ISP DRIVER -M: Kyungmin Park -M: Heungjun Kim -L: linux-media@vger.kernel.org -S: Maintained -F: drivers/media/video/m5mols/ -F: include/media/m5mols.h - -FUJITSU TABLET EXTRAS -M: Robert Gerlach -L: platform-driver-x86@vger.kernel.org -S: Maintained -F: drivers/platform/x86/fujitsu-tablet.c - -FUSE: FILESYSTEM IN USERSPACE -M: Miklos Szeredi -L: fuse-devel@lists.sourceforge.net -W: http://fuse.sourceforge.net/ -S: Maintained -F: fs/fuse/ -F: include/linux/fuse.h - -FUTURE DOMAIN TMC-16x0 SCSI DRIVER (16-bit) -M: Rik Faith -L: linux-scsi@vger.kernel.org -S: Odd Fixes (e.g., new signatures) -F: drivers/scsi/fdomain.* - -GDT SCSI DISK ARRAY CONTROLLER DRIVER -M: Achim Leubner -L: linux-scsi@vger.kernel.org -W: http://www.icp-vortex.com/ -S: Supported -F: drivers/scsi/gdt* - -GENERIC GPIO I2C DRIVER -M: Haavard Skinnemoen -S: Supported -F: drivers/i2c/busses/i2c-gpio.c -F: include/linux/i2c-gpio.h - -GENERIC GPIO I2C MULTIPLEXER DRIVER -M: Peter Korsgaard -L: linux-i2c@vger.kernel.org -S: Supported -F: drivers/i2c/muxes/gpio-i2cmux.c -F: include/linux/gpio-i2cmux.h -F: Documentation/i2c/muxes/gpio-i2cmux - -GENERIC HDLC (WAN) DRIVERS -M: Krzysztof Halasa -W: http://www.kernel.org/pub/linux/utils/net/hdlc/ -S: Maintained -F: drivers/net/wan/c101.c -F: drivers/net/wan/hd6457* -F: drivers/net/wan/hdlc* -F: drivers/net/wan/n2.c -F: drivers/net/wan/pc300too.c -F: drivers/net/wan/pci200syn.c -F: drivers/net/wan/wanxl* - -GENERIC INCLUDE/ASM HEADER FILES -M: Arnd Bergmann -L: linux-arch@vger.kernel.org -T: git git://git.kernel.org/pub/scm/linux/kernel/git/arnd/asm-generic.git -S: Maintained -F: include/asm-generic - -GENERIC UIO DRIVER FOR PCI DEVICES -M: "Michael S. Tsirkin" -L: kvm@vger.kernel.org -S: Supported -F: drivers/uio/uio_pci_generic.c - -GFS2 FILE SYSTEM -M: Steven Whitehouse -L: cluster-devel@redhat.com -W: http://sources.redhat.com/cluster/ -T: git git://git.kernel.org/pub/scm/linux/kernel/git/steve/gfs2-3.0-fixes.git -T: git git://git.kernel.org/pub/scm/linux/kernel/git/steve/gfs2-3.0-nmw.git -S: Supported -F: Documentation/filesystems/gfs2*.txt -F: fs/gfs2/ -F: include/linux/gfs2_ondisk.h - -GIGASET ISDN DRIVERS -M: Hansjoerg Lipp -M: Tilman Schmidt -L: gigaset307x-common@lists.sourceforge.net -W: http://gigaset307x.sourceforge.net/ -S: Maintained -F: Documentation/isdn/README.gigaset -F: drivers/isdn/gigaset/ -F: include/linux/gigaset_dev.h - -GPIO SUBSYSTEM -M: Grant Likely -M: Linus Walleij -S: Maintained -T: git git://git.secretlab.ca/git/linux-2.6.git -F: Documentation/gpio.txt -F: drivers/gpio/ -F: include/linux/gpio* - -GRE DEMULTIPLEXER DRIVER -M: Dmitry Kozlov -L: netdev@vger.kernel.org -S: Maintained -F: net/ipv4/gre.c -F: include/net/gre.h - -GRETH 10/100/1G Ethernet MAC device driver -M: Kristoffer Glembo -L: netdev@vger.kernel.org -S: Maintained -F: drivers/net/ethernet/aeroflex/ - -GSPCA FINEPIX SUBDRIVER -M: Frank Zago -L: linux-media@vger.kernel.org -T: git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media.git -S: Maintained -F: drivers/media/video/gspca/finepix.c - -GSPCA GL860 SUBDRIVER -M: Olivier Lorin -L: linux-media@vger.kernel.org -T: git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media.git -S: Maintained -F: drivers/media/video/gspca/gl860/ - -GSPCA M5602 SUBDRIVER -M: Erik Andren -L: linux-media@vger.kernel.org -T: git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media.git -S: Maintained -F: drivers/media/video/gspca/m5602/ - -GSPCA PAC207 SONIXB SUBDRIVER -M: Hans de Goede -L: linux-media@vger.kernel.org -T: git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media.git -S: Maintained -F: drivers/media/video/gspca/pac207.c - -GSPCA SN9C20X SUBDRIVER -M: Brian Johnson -L: linux-media@vger.kernel.org -T: git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media.git -S: Maintained -F: drivers/media/video/gspca/sn9c20x.c - -GSPCA T613 SUBDRIVER -M: Leandro Costantino -L: linux-media@vger.kernel.org -T: git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media.git -S: Maintained -F: drivers/media/video/gspca/t613.c - -GSPCA USB WEBCAM DRIVER -M: Jean-Francois Moine -W: http://moinejf.free.fr -L: linux-media@vger.kernel.org -T: git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media.git -S: Maintained -F: drivers/media/video/gspca/ - -HARD DRIVE ACTIVE PROTECTION SYSTEM (HDAPS) DRIVER -M: Frank Seidel -L: platform-driver-x86@vger.kernel.org -W: http://www.kernel.org/pub/linux/kernel/people/fseidel/hdaps/ -S: Maintained -F: drivers/platform/x86/hdaps.c - -HWPOISON MEMORY FAILURE HANDLING -M: Andi Kleen -L: linux-mm@kvack.org -T: git git://git.kernel.org/pub/scm/linux/kernel/git/ak/linux-mce-2.6.git hwpoison -S: Maintained -F: mm/memory-failure.c -F: mm/hwpoison-inject.c - -HYPERVISOR VIRTUAL CONSOLE DRIVER -L: linuxppc-dev@lists.ozlabs.org -S: Odd Fixes -F: drivers/tty/hvc/ - -HARDWARE MONITORING -M: Jean Delvare -M: Guenter Roeck -L: lm-sensors@lm-sensors.org -W: http://www.lm-sensors.org/ -T: quilt kernel.org/pub/linux/kernel/people/jdelvare/linux-2.6/jdelvare-hwmon/ -T: git git://git.kernel.org/pub/scm/linux/kernel/git/groeck/linux-staging.git -S: Maintained -F: Documentation/hwmon/ -F: drivers/hwmon/ -F: include/linux/hwmon*.h - -HARDWARE RANDOM NUMBER GENERATOR CORE -M: Matt Mackall -M: Herbert Xu -S: Odd fixes -F: Documentation/hw_random.txt -F: drivers/char/hw_random/ -F: include/linux/hw_random.h - -HARDWARE SPINLOCK CORE -M: Ohad Ben-Cohen -S: Maintained -F: Documentation/hwspinlock.txt -F: drivers/hwspinlock/hwspinlock_* -F: include/linux/hwspinlock.h - -HARMONY SOUND DRIVER -L: linux-parisc@vger.kernel.org -S: Maintained -F: sound/parisc/harmony.* - -HEWLETT-PACKARD SMART2 RAID DRIVER -M: Chirag Kantharia -L: iss_storagedev@hp.com -S: Maintained -F: Documentation/blockdev/cpqarray.txt -F: drivers/block/cpqarray.* - -HEWLETT-PACKARD SMART ARRAY RAID DRIVER (hpsa) -M: "Stephen M. Cameron" -L: iss_storagedev@hp.com -S: Supported -F: Documentation/scsi/hpsa.txt -F: drivers/scsi/hpsa*.[ch] -F: include/linux/cciss*.h - -HEWLETT-PACKARD SMART CISS RAID DRIVER (cciss) -M: Mike Miller -L: iss_storagedev@hp.com -S: Supported -F: Documentation/blockdev/cciss.txt -F: drivers/block/cciss* -F: include/linux/cciss_ioctl.h - -HFS FILESYSTEM -L: linux-fsdevel@vger.kernel.org -S: Orphan -F: Documentation/filesystems/hfs.txt -F: fs/hfs/ - -HGA FRAMEBUFFER DRIVER -M: Ferenc Bakonyi -L: linux-nvidia@lists.surfsouth.com -W: http://drama.obuda.kando.hu/~fero/cgi-bin/hgafb.shtml -S: Maintained -F: drivers/video/hgafb.c - -HIBERNATION (aka Software Suspend, aka swsusp) -M: Pavel Machek -M: "Rafael J. Wysocki" -L: linux-pm@vger.kernel.org -S: Supported -F: arch/x86/power/ -F: drivers/base/power/ -F: kernel/power/ -F: include/linux/suspend.h -F: include/linux/freezer.h -F: include/linux/pm.h -F: arch/*/include/asm/suspend*.h - -HID CORE LAYER -M: Jiri Kosina -L: linux-input@vger.kernel.org -T: git git://git.kernel.org/pub/scm/linux/kernel/git/jikos/hid.git -S: Maintained -F: drivers/hid/ -F: include/linux/hid* - -HIGH-RESOLUTION TIMERS, CLOCKEVENTS, DYNTICKS -M: Thomas Gleixner -T: git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git timers/core -S: Maintained -F: Documentation/timers/ -F: kernel/hrtimer.c -F: kernel/time/clockevents.c -F: kernel/time/tick*.* -F: kernel/time/timer_*.c -F: include/linux/clockchips.h -F: include/linux/hrtimer.h - -HIGH-SPEED SCC DRIVER FOR AX.25 -M: Klaus Kudielka -L: linux-hams@vger.kernel.org -W: http://www.nt.tuwien.ac.at/~kkudielk/Linux/ -S: Maintained -F: drivers/net/hamradio/dmascc.c -F: drivers/net/hamradio/scc.c - -HIGHPOINT ROCKETRAID 3xxx RAID DRIVER -M: HighPoint Linux Team -W: http://www.highpoint-tech.com -S: Supported -F: Documentation/scsi/hptiop.txt -F: drivers/scsi/hptiop.c - -HIPPI -M: Jes Sorensen -L: linux-hippi@sunsite.dk -S: Maintained -F: include/linux/hippidevice.h -F: include/linux/if_hippi.h -F: net/802/hippi.c -F: drivers/net/hippi/ - -HOST AP DRIVER -M: Jouni Malinen -L: hostap@shmoo.com (subscribers-only) -L: linux-wireless@vger.kernel.org -W: http://hostap.epitest.fi/ -S: Maintained -F: drivers/net/wireless/hostap/ - -HP COMPAQ TC1100 TABLET WMI EXTRAS DRIVER -L: platform-driver-x86@vger.kernel.org -S: Orphan -F: drivers/platform/x86/tc1100-wmi.c - -HP100: Driver for HP 10/100 Mbit/s Voice Grade Network Adapter Series -M: Jaroslav Kysela -S: Maintained -F: drivers/net/ethernet/hp/hp100.* - -HPET: High Precision Event Timers driver -M: Clemens Ladisch -S: Maintained -F: Documentation/timers/hpet.txt -F: drivers/char/hpet.c -F: include/linux/hpet.h - -HPET: x86 -M: "Venkatesh Pallipadi (Venki)" -S: Maintained -F: arch/x86/kernel/hpet.c -F: arch/x86/include/asm/hpet.h - -HPFS FILESYSTEM -M: Mikulas Patocka -W: http://artax.karlin.mff.cuni.cz/~mikulas/vyplody/hpfs/index-e.cgi -S: Maintained -F: fs/hpfs/ - -HSO 3G MODEM DRIVER -M: Jan Dumon -W: http://www.pharscape.org -S: Maintained -F: drivers/net/usb/hso.c - -HTCPEN TOUCHSCREEN DRIVER -M: Pau Oliva Fora -L: linux-input@vger.kernel.org -S: Maintained -F: drivers/input/touchscreen/htcpen.c - -HUGETLB FILESYSTEM -M: William Irwin -S: Maintained -F: fs/hugetlbfs/ - -Hyper-V CORE AND DRIVERS -M: K. Y. Srinivasan -M: Haiyang Zhang -L: devel@linuxdriverproject.org -S: Maintained -F: drivers/hv/ -F: drivers/hid/hid-hyperv.c -F: drivers/net/hyperv/ -F: drivers/staging/hv/ - -I2C/SMBUS STUB DRIVER -M: "Mark M. Hoffman" -L: linux-i2c@vger.kernel.org -S: Maintained -F: drivers/i2c/busses/i2c-stub.c - -I2C SUBSYSTEM -M: "Jean Delvare (PC drivers, core)" -M: "Ben Dooks (embedded platforms)" -M: "Wolfram Sang (embedded platforms)" -L: linux-i2c@vger.kernel.org -W: http://i2c.wiki.kernel.org/ -T: quilt kernel.org/pub/linux/kernel/people/jdelvare/linux-2.6/jdelvare-i2c/ -T: git git://git.fluff.org/bjdooks/linux.git -S: Maintained -F: Documentation/i2c/ -F: drivers/i2c/ -F: include/linux/i2c.h -F: include/linux/i2c-*.h - -I2C-TINY-USB DRIVER -M: Till Harbaum -L: linux-i2c@vger.kernel.org -W: http://www.harbaum.org/till/i2c_tiny_usb -S: Maintained -F: drivers/i2c/busses/i2c-tiny-usb.c - -i386 BOOT CODE -M: "H. Peter Anvin" -S: Maintained -F: arch/x86/boot/ - -i386 SETUP CODE / CPU ERRATA WORKAROUNDS -M: "H. Peter Anvin" -T: git git://git.kernel.org/pub/scm/linux/kernel/git/hpa/linux-2.6-x86setup.git -S: Maintained - -IA64 (Itanium) PLATFORM -M: Tony Luck -M: Fenghua Yu -L: linux-ia64@vger.kernel.org -T: git git://git.kernel.org/pub/scm/linux/kernel/git/aegl/linux.git -S: Maintained -F: arch/ia64/ - -IBM MCA SCSI SUBSYSTEM DRIVER -M: Michael Lang -W: http://www.uni-mainz.de/~langm000/linux.html -S: Maintained -F: drivers/scsi/ibmmca.c - -IBM Power Linux RAID adapter -M: Brian King -S: Supported -F: drivers/scsi/ipr.* - -IBM Power Virtual Ethernet Device Driver -M: Santiago Leon -L: netdev@vger.kernel.org -S: Supported -F: drivers/net/ethernet/ibm/ibmveth.* - -IBM ServeRAID RAID DRIVER -P: Jack Hammer -M: Dave Jeffery -W: http://www.developer.ibm.com/welcome/netfinity/serveraid.html -S: Supported -F: drivers/scsi/ips.* - -IDE SUBSYSTEM -M: "David S. Miller" -L: linux-ide@vger.kernel.org -Q: http://patchwork.ozlabs.org/project/linux-ide/list/ -T: git git://git.kernel.org/pub/scm/linux/kernel/git/davem/ide.git -S: Maintained -F: Documentation/ide/ -F: drivers/ide/ -F: include/linux/ide.h - -IDEAPAD LAPTOP EXTRAS DRIVER -M: Ike Panhc -L: platform-driver-x86@vger.kernel.org -W: http://launchpad.net/ideapad-laptop -S: Maintained -F: drivers/platform/x86/ideapad-laptop.c - -IDE/ATAPI DRIVERS -M: Borislav Petkov -L: linux-ide@vger.kernel.org -S: Maintained -F: Documentation/cdrom/ide-cd -F: drivers/ide/ide-cd* - -IDLE-I7300 -M: Andy Henroid -L: linux-pm@vger.kernel.org -S: Supported -F: drivers/idle/i7300_idle.c - -IEEE 802.15.4 SUBSYSTEM -M: Dmitry Eremin-Solenikov -M: Sergey Lapin -L: linux-zigbee-devel@lists.sourceforge.net (moderated for non-subscribers) -W: http://apps.sourceforge.net/trac/linux-zigbee -T: git git://git.kernel.org/pub/scm/linux/kernel/git/lowpan/lowpan.git -S: Maintained -F: net/ieee802154/ -F: drivers/ieee802154/ - -IIO SUBSYSTEM AND DRIVERS -M: Jonathan Cameron -L: linux-iio@vger.kernel.org -S: Maintained -F: drivers/staging/iio/ - -IKANOS/ADI EAGLE ADSL USB DRIVER -M: Matthieu Castet -M: Stanislaw Gruszka -S: Maintained -F: drivers/usb/atm/ueagle-atm.c - -INTEGRITY MEASUREMENT ARCHITECTURE (IMA) -M: Mimi Zohar -S: Supported -F: security/integrity/ima/ - -IMS TWINTURBO FRAMEBUFFER DRIVER -L: linux-fbdev@vger.kernel.org -S: Orphan -F: drivers/video/imsttfb.c - -INFINIBAND SUBSYSTEM -M: Roland Dreier -M: Sean Hefty -M: Hal Rosenstock -L: linux-rdma@vger.kernel.org -W: http://www.openfabrics.org/ -Q: http://patchwork.kernel.org/project/linux-rdma/list/ -T: git git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git -S: Supported -F: Documentation/infiniband/ -F: drivers/infiniband/ -F: include/linux/if_infiniband.h - -INOTIFY -M: John McCutchan -M: Robert Love -M: Eric Paris -S: Maintained -F: Documentation/filesystems/inotify.txt -F: fs/notify/inotify/ -F: include/linux/inotify.h - -INPUT (KEYBOARD, MOUSE, JOYSTICK, TOUCHSCREEN) DRIVERS -M: Dmitry Torokhov -M: Dmitry Torokhov -L: linux-input@vger.kernel.org -Q: http://patchwork.kernel.org/project/linux-input/list/ -T: git git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input.git -S: Maintained -F: drivers/input/ - -INPUT MULTITOUCH (MT) PROTOCOL -M: Henrik Rydberg -L: linux-input@vger.kernel.org -T: git git://git.kernel.org/pub/scm/linux/kernel/git/rydberg/input-mt.git -S: Maintained -F: Documentation/input/multi-touch-protocol.txt -F: drivers/input/input-mt.c -K: \b(ABS|SYN)_MT_ - -INTEL C600 SERIES SAS CONTROLLER DRIVER -M: Intel SCU Linux support -M: Dan Williams -M: Dave Jiang -M: Ed Nadolski -L: linux-scsi@vger.kernel.org -T: git git://git.kernel.org/pub/scm/linux/kernel/git/djbw/isci.git -S: Maintained -F: drivers/scsi/isci/ -F: firmware/isci/ - -INTEL IDLE DRIVER -M: Len Brown -L: linux-pm@vger.kernel.org -T: git git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux.git -S: Supported -F: drivers/idle/intel_idle.c - -INTEL FRAMEBUFFER DRIVER (excluding 810 and 815) -M: Maik Broemme -L: linux-fbdev@vger.kernel.org -S: Maintained -F: Documentation/fb/intelfb.txt -F: drivers/video/intelfb/ - -INTEL 810/815 FRAMEBUFFER DRIVER -M: Antonino Daplas -L: linux-fbdev@vger.kernel.org -S: Maintained -F: drivers/video/i810/ - -INTEL MENLOW THERMAL DRIVER -M: Sujith Thomas -L: platform-driver-x86@vger.kernel.org -W: http://www.lesswatts.org/projects/acpi/ -S: Supported -F: drivers/platform/x86/intel_menlow.c - -INTEL IA32 MICROCODE UPDATE SUPPORT -M: Tigran Aivazian -S: Maintained -F: arch/x86/kernel/microcode_core.c -F: arch/x86/kernel/microcode_intel.c - -INTEL I/OAT DMA DRIVER -M: Dan Williams -S: Supported -F: drivers/dma/ioat* - -INTEL IOMMU (VT-d) -M: David Woodhouse -L: iommu@lists.linux-foundation.org -T: git git://git.infradead.org/iommu-2.6.git -S: Supported -F: drivers/iommu/intel-iommu.c -F: include/linux/intel-iommu.h - -INTEL IOP-ADMA DMA DRIVER -M: Dan Williams -S: Maintained -F: drivers/dma/iop-adma.c - -INTEL IXP4XX QMGR, NPE, ETHERNET and HSS SUPPORT -M: Krzysztof Halasa -S: Maintained -F: arch/arm/mach-ixp4xx/include/mach/qmgr.h -F: arch/arm/mach-ixp4xx/include/mach/npe.h -F: arch/arm/mach-ixp4xx/ixp4xx_qmgr.c -F: arch/arm/mach-ixp4xx/ixp4xx_npe.c -F: drivers/net/ethernet/xscale/ixp4xx_eth.c -F: drivers/net/wan/ixp4xx_hss.c - -INTEL IXP4XX RANDOM NUMBER GENERATOR SUPPORT -M: Deepak Saxena -S: Maintained -F: drivers/char/hw_random/ixp4xx-rng.c - -INTEL IXP2000 ETHERNET DRIVER -M: Lennert Buytenhek -L: netdev@vger.kernel.org -S: Maintained -F: drivers/net/ethernet/xscale/ixp2000/ - -INTEL ETHERNET DRIVERS (e100/e1000/e1000e/igb/igbvf/ixgb/ixgbe/ixgbevf) -M: Jeff Kirsher -M: Jesse Brandeburg -M: Bruce Allan -M: Carolyn Wyborny -M: Don Skidmore -M: Greg Rose -M: Peter P Waskiewicz Jr -M: Alex Duyck -M: John Ronciak -L: e1000-devel@lists.sourceforge.net -W: http://e1000.sourceforge.net/ -T: git git://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/net.git -T: git git://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/net-next.git -S: Supported -F: Documentation/networking/e100.txt -F: Documentation/networking/e1000.txt -F: Documentation/networking/e1000e.txt -F: Documentation/networking/igb.txt -F: Documentation/networking/igbvf.txt -F: Documentation/networking/ixgb.txt -F: Documentation/networking/ixgbe.txt -F: Documentation/networking/ixgbevf.txt -F: drivers/net/ethernet/intel/ - -INTEL MRST PMU DRIVER -M: Len Brown -L: linux-pm@vger.kernel.org -S: Supported -F: arch/x86/platform/mrst/pmu.* - -INTEL PRO/WIRELESS 2100, 2200BG, 2915ABG NETWORK CONNECTION SUPPORT -M: Stanislav Yakovlev -L: linux-wireless@vger.kernel.org -S: Maintained -F: Documentation/networking/README.ipw2100 -F: Documentation/networking/README.ipw2200 -F: drivers/net/wireless/ipw2x00/ - -INTEL(R) TRUSTED EXECUTION TECHNOLOGY (TXT) -M: Joseph Cihula -M: Shane Wang -L: tboot-devel@lists.sourceforge.net -W: http://tboot.sourceforge.net -T: Mercurial http://www.bughost.org/repos.hg/tboot.hg -S: Supported -F: Documentation/intel_txt.txt -F: include/linux/tboot.h -F: arch/x86/kernel/tboot.c - -INTEL WIRELESS WIMAX CONNECTION 2400 -M: Inaky Perez-Gonzalez -M: linux-wimax@intel.com -L: wimax@linuxwimax.org -S: Supported -W: http://linuxwimax.org -F: Documentation/wimax/README.i2400m -F: drivers/net/wimax/i2400m/ -F: include/linux/wimax/i2400m.h - -INTEL WIRELESS 3945ABG/BG, 4965AGN (iwlegacy) -M: Stanislaw Gruszka -L: linux-wireless@vger.kernel.org -S: Supported -F: drivers/net/wireless/iwlegacy/ - -INTEL WIRELESS WIFI LINK (iwlwifi) -M: Wey-Yi Guy -M: Intel Linux Wireless -L: linux-wireless@vger.kernel.org -W: http://intellinuxwireless.org -T: git git://git.kernel.org/pub/scm/linux/kernel/git/iwlwifi/iwlwifi.git -S: Supported -F: drivers/net/wireless/iwlwifi/ - -INTEL WIRELESS MULTICOMM 3200 WIFI (iwmc3200wifi) -M: Samuel Ortiz -M: Intel Linux Wireless -L: linux-wireless@vger.kernel.org -S: Supported -W: http://wireless.kernel.org/en/users/Drivers/iwmc3200wifi -F: drivers/net/wireless/iwmc3200wifi/ - -IOC3 ETHERNET DRIVER -M: Ralf Baechle -L: linux-mips@linux-mips.org -S: Maintained -F: drivers/net/ethernet/sgi/ioc3-eth.c - -IOC3 SERIAL DRIVER -M: Pat Gefre -L: linux-serial@vger.kernel.org -S: Maintained -F: drivers/tty/serial/ioc3_serial.c - -IP MASQUERADING -M: Juanjo Ciarlante -S: Maintained -F: net/ipv4/netfilter/ipt_MASQUERADE.c - -IP1000A 10/100/1000 GIGABIT ETHERNET DRIVER -M: Francois Romieu -M: Sorbica Shieh -L: netdev@vger.kernel.org -S: Maintained -F: drivers/net/ethernet/icplus/ipg.* - -IPATH DRIVER -M: Mike Marciniszyn -L: linux-rdma@vger.kernel.org -S: Maintained -F: drivers/infiniband/hw/ipath/ - -IPMI SUBSYSTEM -M: Corey Minyard -L: openipmi-developer@lists.sourceforge.net (moderated for non-subscribers) -W: http://openipmi.sourceforge.net/ -S: Supported -F: Documentation/IPMI.txt -F: drivers/char/ipmi/ -F: include/linux/ipmi* - -IPS SCSI RAID DRIVER -M: Adaptec OEM Raid Solutions -L: linux-scsi@vger.kernel.org -W: http://www.adaptec.com/ -S: Maintained -F: drivers/scsi/ips* - -IPVS -M: Wensong Zhang -M: Simon Horman -M: Julian Anastasov -L: netdev@vger.kernel.org -L: lvs-devel@vger.kernel.org -S: Maintained -F: Documentation/networking/ipvs-sysctl.txt -F: include/net/ip_vs.h -F: include/linux/ip_vs.h -F: net/netfilter/ipvs/ - -IPWIRELESS DRIVER -M: Jiri Kosina -M: David Sterba -S: Odd Fixes -F: drivers/tty/ipwireless/ - -IPX NETWORK LAYER -M: Arnaldo Carvalho de Melo -L: netdev@vger.kernel.org -S: Maintained -F: include/linux/ipx.h -F: include/net/ipx.h -F: net/ipx/ - -IRDA SUBSYSTEM -M: Samuel Ortiz -L: irda-users@lists.sourceforge.net (subscribers-only) -L: netdev@vger.kernel.org -W: http://irda.sourceforge.net/ -S: Maintained -T: git git://git.kernel.org/pub/scm/linux/kernel/git/sameo/irda-2.6.git -F: Documentation/networking/irda.txt -F: drivers/net/irda/ -F: include/net/irda/ -F: net/irda/ - -IRQ SUBSYSTEM -M: Thomas Gleixner -S: Maintained -T: git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git irq/core -F: kernel/irq/ - -IRQ DOMAINS (IRQ NUMBER MAPPING LIBRARY) -M: Benjamin Herrenschmidt -M: Grant Likely -T: git git://git.secretlab.ca/git/linux-2.6.git irqdomain/next -S: Maintained -F: Documentation/IRQ-domain.txt -F: include/linux/irqdomain.h -F: kernel/irq/irqdomain.c - -ISAPNP -M: Jaroslav Kysela -S: Maintained -F: Documentation/isapnp.txt -F: drivers/pnp/isapnp/ -F: include/linux/isapnp.h - -iSCSI BOOT FIRMWARE TABLE (iBFT) DRIVER -M: Peter Jones -M: Konrad Rzeszutek Wilk -S: Maintained -F: drivers/firmware/iscsi_ibft* - -ISCSI -M: Mike Christie -L: open-iscsi@googlegroups.com -W: www.open-iscsi.org -T: git git://git.kernel.org/pub/scm/linux/kernel/git/mnc/linux-2.6-iscsi.git -S: Maintained -F: drivers/scsi/*iscsi* -F: include/scsi/*iscsi* - -ISDN SUBSYSTEM -M: Karsten Keil -L: isdn4linux@listserv.isdn4linux.de (subscribers-only) -L: netdev@vger.kernel.org -W: http://www.isdn4linux.de -T: git git://git.kernel.org/pub/scm/linux/kernel/git/kkeil/isdn-2.6.git -S: Maintained -F: Documentation/isdn/ -F: drivers/isdn/ -F: include/linux/isdn.h -F: include/linux/isdn/ - -ISDN SUBSYSTEM (Eicon active card driver) -M: Armin Schindler -L: isdn4linux@listserv.isdn4linux.de (subscribers-only) -W: http://www.melware.de -S: Maintained -F: drivers/isdn/hardware/eicon/ - -IT87 HARDWARE MONITORING DRIVER -M: Jean Delvare -L: lm-sensors@lm-sensors.org -S: Maintained -F: Documentation/hwmon/it87 -F: drivers/hwmon/it87.c - -IVTV VIDEO4LINUX DRIVER -M: Andy Walls -L: ivtv-devel@ivtvdriver.org (moderated for non-subscribers) -L: linux-media@vger.kernel.org -T: git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media.git -W: http://www.ivtvdriver.org -S: Maintained -F: Documentation/video4linux/*.ivtv -F: drivers/media/video/ivtv/ -F: include/linux/ivtv* - -JC42.4 TEMPERATURE SENSOR DRIVER -M: Guenter Roeck -L: lm-sensors@lm-sensors.org -S: Maintained -F: drivers/hwmon/jc42.c -F: Documentation/hwmon/jc42 - -JFS FILESYSTEM -M: Dave Kleikamp -L: jfs-discussion@lists.sourceforge.net -W: http://jfs.sourceforge.net/ -T: git git://git.kernel.org/pub/scm/linux/kernel/git/shaggy/jfs-2.6.git -S: Maintained -F: Documentation/filesystems/jfs.txt -F: fs/jfs/ - -JME NETWORK DRIVER -M: Guo-Fu Tseng -L: netdev@vger.kernel.org -S: Maintained -F: drivers/net/ethernet/jme.* - -JOURNALLING FLASH FILE SYSTEM V2 (JFFS2) -M: David Woodhouse -L: linux-mtd@lists.infradead.org -W: http://www.linux-mtd.infradead.org/doc/jffs2.html -S: Maintained -F: fs/jffs2/ -F: include/linux/jffs2.h - -JOURNALLING LAYER FOR BLOCK DEVICES (JBD) -M: Andrew Morton -M: Jan Kara -L: linux-ext4@vger.kernel.org -S: Maintained -F: fs/jbd/ -F: include/linux/ext3_jbd.h -F: include/linux/jbd.h - -JOURNALLING LAYER FOR BLOCK DEVICES (JBD2) -M: "Theodore Ts'o" -L: linux-ext4@vger.kernel.org -S: Maintained -F: fs/jbd2/ -F: include/linux/jbd2.h - -JSM Neo PCI based serial card -M: Lucas Tavares -L: linux-serial@vger.kernel.org -S: Maintained -F: drivers/tty/serial/jsm/ - -K10TEMP HARDWARE MONITORING DRIVER -M: Clemens Ladisch -L: lm-sensors@lm-sensors.org -S: Maintained -F: Documentation/hwmon/k10temp -F: drivers/hwmon/k10temp.c - -K8TEMP HARDWARE MONITORING DRIVER -M: Rudolf Marek -L: lm-sensors@lm-sensors.org -S: Maintained -F: Documentation/hwmon/k8temp -F: drivers/hwmon/k8temp.c - -KCONFIG -M: Michal Marek -L: linux-kbuild@vger.kernel.org -S: Odd Fixes -F: Documentation/kbuild/kconfig-language.txt -F: scripts/kconfig/ - -KDUMP -M: Vivek Goyal -M: Haren Myneni -L: kexec@lists.infradead.org -W: http://lse.sourceforge.net/kdump/ -S: Maintained -F: Documentation/kdump/ - -KERNEL AUTOMOUNTER v4 (AUTOFS4) -M: Ian Kent -L: autofs@vger.kernel.org -S: Maintained -F: fs/autofs4/ - -KERNEL BUILD + files below scripts/ (unless maintained elsewhere) -M: Michal Marek -T: git git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild.git for-next -T: git git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild.git rc-fixes -L: linux-kbuild@vger.kernel.org -S: Maintained -F: Documentation/kbuild/ -F: Makefile -F: scripts/Makefile.* -F: scripts/basic/ -F: scripts/mk* -F: scripts/package/ - -KERNEL JANITORS -L: kernel-janitors@vger.kernel.org -W: http://kernelnewbies.org/KernelJanitors -S: Odd Fixes - -KERNEL NFSD, SUNRPC, AND LOCKD SERVERS -M: "J. Bruce Fields" -L: linux-nfs@vger.kernel.org -W: http://nfs.sourceforge.net/ -S: Supported -F: fs/nfsd/ -F: include/linux/nfsd/ -F: fs/lockd/ -F: fs/nfs_common/ -F: net/sunrpc/ -F: include/linux/lockd/ -F: include/linux/sunrpc/ - -KERNEL VIRTUAL MACHINE (KVM) -M: Avi Kivity -M: Marcelo Tosatti -L: kvm@vger.kernel.org -W: http://kvm.qumranet.com -S: Supported -F: Documentation/*/kvm.txt -F: arch/*/kvm/ -F: arch/*/include/asm/kvm* -F: include/linux/kvm* -F: virt/kvm/ - -KERNEL VIRTUAL MACHINE (KVM) FOR AMD-V -M: Joerg Roedel -L: kvm@vger.kernel.org -W: http://kvm.qumranet.com -S: Supported -F: arch/x86/include/asm/svm.h -F: arch/x86/kvm/svm.c - -KERNEL VIRTUAL MACHINE (KVM) FOR POWERPC -M: Alexander Graf -L: kvm-ppc@vger.kernel.org -W: http://kvm.qumranet.com -S: Supported -F: arch/powerpc/include/asm/kvm* -F: arch/powerpc/kvm/ - -KERNEL VIRTUAL MACHINE For Itanium (KVM/IA64) -M: Xiantao Zhang -L: kvm-ia64@vger.kernel.org -W: http://kvm.qumranet.com -S: Supported -F: Documentation/ia64/kvm.txt -F: arch/ia64/include/asm/kvm* -F: arch/ia64/kvm/ - -KERNEL VIRTUAL MACHINE for s390 (KVM/s390) -M: Carsten Otte -M: Christian Borntraeger -M: linux390@de.ibm.com -L: linux-s390@vger.kernel.org -W: http://www.ibm.com/developerworks/linux/linux390/ -S: Supported -F: Documentation/s390/kvm.txt -F: arch/s390/include/asm/kvm* -F: arch/s390/kvm/ -F: drivers/s390/kvm/ - -KEXEC -M: Eric Biederman -W: http://kernel.org/pub/linux/utils/kernel/kexec/ -L: kexec@lists.infradead.org -S: Maintained -F: include/linux/kexec.h -F: kernel/kexec.c - -KEYS/KEYRINGS: -M: David Howells -L: keyrings@linux-nfs.org -S: Maintained -F: Documentation/security/keys.txt -F: include/linux/key.h -F: include/linux/key-type.h -F: include/keys/ -F: security/keys/ - -KEYS-TRUSTED -M: David Safford -M: Mimi Zohar -L: linux-security-module@vger.kernel.org -L: keyrings@linux-nfs.org -S: Supported -F: Documentation/security/keys-trusted-encrypted.txt -F: include/keys/trusted-type.h -F: security/keys/trusted.c -F: security/keys/trusted.h - -KEYS-ENCRYPTED -M: Mimi Zohar -M: David Safford -L: linux-security-module@vger.kernel.org -L: keyrings@linux-nfs.org -S: Supported -F: Documentation/security/keys-trusted-encrypted.txt -F: include/keys/encrypted-type.h -F: security/keys/encrypted-keys/ - -KGDB / KDB /debug_core -M: Jason Wessel -W: http://kgdb.wiki.kernel.org/ -L: kgdb-bugreport@lists.sourceforge.net -S: Maintained -F: Documentation/DocBook/kgdb.tmpl -F: drivers/misc/kgdbts.c -F: drivers/tty/serial/kgdboc.c -F: include/linux/kdb.h -F: include/linux/kgdb.h -F: kernel/debug/ - -KMEMCHECK -M: Vegard Nossum -M: Pekka Enberg -S: Maintained -F: Documentation/kmemcheck.txt -F: arch/x86/include/asm/kmemcheck.h -F: arch/x86/mm/kmemcheck/ -F: include/linux/kmemcheck.h -F: mm/kmemcheck.c - -KMEMLEAK -M: Catalin Marinas -S: Maintained -F: Documentation/kmemleak.txt -F: include/linux/kmemleak.h -F: mm/kmemleak.c -F: mm/kmemleak-test.c - -KPROBES -M: Ananth N Mavinakayanahalli -M: Anil S Keshavamurthy -M: "David S. Miller" -M: Masami Hiramatsu -S: Maintained -F: Documentation/kprobes.txt -F: include/linux/kprobes.h -F: kernel/kprobes.c - -KS0108 LCD CONTROLLER DRIVER -M: Miguel Ojeda Sandonis -W: http://miguelojeda.es/auxdisplay.htm -W: http://jair.lab.fi.uva.es/~migojed/auxdisplay.htm -S: Maintained -F: Documentation/auxdisplay/ks0108 -F: drivers/auxdisplay/ks0108.c -F: include/linux/ks0108.h - -LAPB module -L: linux-x25@vger.kernel.org -S: Orphan -F: Documentation/networking/lapb-module.txt -F: include/*/lapb.h -F: net/lapb/ - -LASI 53c700 driver for PARISC -M: "James E.J. Bottomley" -L: linux-scsi@vger.kernel.org -S: Maintained -F: Documentation/scsi/53c700.txt -F: drivers/scsi/53c700* - -LED SUBSYSTEM -M: Richard Purdie -S: Maintained -F: drivers/leds/ -F: include/linux/leds.h - -LEGACY EEPROM DRIVER -M: Jean Delvare -S: Maintained -F: Documentation/misc-devices/eeprom -F: drivers/misc/eeprom/eeprom.c - -LEGO USB Tower driver -M: Juergen Stuber -L: legousb-devel@lists.sourceforge.net -W: http://legousb.sourceforge.net/ -S: Maintained -F: drivers/usb/misc/legousbtower.c - -LGUEST -M: Rusty Russell -L: lguest@lists.ozlabs.org -W: http://lguest.ozlabs.org/ -S: Odd Fixes -F: arch/x86/include/asm/lguest*.h -F: arch/x86/lguest/ -F: drivers/lguest/ -F: include/linux/lguest*.h -F: tools/lguest/ - -LINUX FOR IBM pSERIES (RS/6000) -M: Paul Mackerras -W: http://www.ibm.com/linux/ltc/projects/ppc -S: Supported -F: arch/powerpc/boot/rs6000.h - -LINUX FOR POWERPC (32-BIT AND 64-BIT) -M: Benjamin Herrenschmidt -M: Paul Mackerras -W: http://www.penguinppc.org/ -L: linuxppc-dev@lists.ozlabs.org -Q: http://patchwork.ozlabs.org/project/linuxppc-dev/list/ -T: git git://git.kernel.org/pub/scm/linux/kernel/git/benh/powerpc.git -S: Supported -F: Documentation/powerpc/ -F: arch/powerpc/ - -LINUX FOR POWER MACINTOSH -M: Benjamin Herrenschmidt -W: http://www.penguinppc.org/ -L: linuxppc-dev@lists.ozlabs.org -S: Maintained -F: arch/powerpc/platforms/powermac/ -F: drivers/macintosh/ - -LINUX FOR POWERPC EMBEDDED MPC5XXX -M: Anatolij Gustschin -L: linuxppc-dev@lists.ozlabs.org -T: git git://git.denx.de/linux-2.6-agust.git -S: Maintained -F: arch/powerpc/platforms/512x/ -F: arch/powerpc/platforms/52xx/ - -LINUX FOR POWERPC EMBEDDED PPC4XX -M: Josh Boyer -M: Matt Porter -W: http://www.penguinppc.org/ -L: linuxppc-dev@lists.ozlabs.org -T: git git://git.kernel.org/pub/scm/linux/kernel/git/jwboyer/powerpc-4xx.git -S: Maintained -F: arch/powerpc/platforms/40x/ -F: arch/powerpc/platforms/44x/ - -LINUX FOR POWERPC EMBEDDED XILINX VIRTEX -M: Grant Likely -W: http://wiki.secretlab.ca/index.php/Linux_on_Xilinx_Virtex -L: linuxppc-dev@lists.ozlabs.org -T: git git://git.secretlab.ca/git/linux-2.6.git -S: Maintained -F: arch/powerpc/*/*virtex* -F: arch/powerpc/*/*/*virtex* - -LINUX FOR POWERPC EMBEDDED PPC8XX -M: Vitaly Bordug -M: Marcelo Tosatti -W: http://www.penguinppc.org/ -L: linuxppc-dev@lists.ozlabs.org -S: Maintained -F: arch/powerpc/platforms/8xx/ - -LINUX FOR POWERPC EMBEDDED PPC83XX AND PPC85XX -M: Kumar Gala -W: http://www.penguinppc.org/ -L: linuxppc-dev@lists.ozlabs.org -S: Maintained -F: arch/powerpc/platforms/83xx/ -F: arch/powerpc/platforms/85xx/ - -LINUX FOR POWERPC PA SEMI PWRFICIENT -M: Olof Johansson -L: linuxppc-dev@lists.ozlabs.org -S: Maintained -F: arch/powerpc/platforms/pasemi/ -F: drivers/*/*pasemi* -F: drivers/*/*/*pasemi* - -LINUX SECURITY MODULE (LSM) FRAMEWORK -M: Chris Wright -L: linux-security-module@vger.kernel.org -S: Supported - -LIS3LV02D ACCELEROMETER DRIVER -M: Eric Piel -S: Maintained -F: Documentation/misc-devices/lis3lv02d -F: drivers/misc/lis3lv02d/ -F: drivers/platform/x86/hp_accel.c - -LLC (802.2) -M: Arnaldo Carvalho de Melo -S: Maintained -F: include/linux/llc.h -F: include/net/llc* -F: net/llc/ - -LM73 HARDWARE MONITOR DRIVER -M: Guillaume Ligneul -L: lm-sensors@lm-sensors.org -S: Maintained -F: drivers/hwmon/lm73.c - -LM78 HARDWARE MONITOR DRIVER -M: Jean Delvare -L: lm-sensors@lm-sensors.org -S: Maintained -F: Documentation/hwmon/lm78 -F: drivers/hwmon/lm78.c - -LM83 HARDWARE MONITOR DRIVER -M: Jean Delvare -L: lm-sensors@lm-sensors.org -S: Maintained -F: Documentation/hwmon/lm83 -F: drivers/hwmon/lm83.c - -LM90 HARDWARE MONITOR DRIVER -M: Jean Delvare -L: lm-sensors@lm-sensors.org -S: Maintained -F: Documentation/hwmon/lm90 -F: drivers/hwmon/lm90.c - -LOCKDEP AND LOCKSTAT -M: Peter Zijlstra -M: Ingo Molnar -T: git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git core/locking -S: Maintained -F: Documentation/lockdep*.txt -F: Documentation/lockstat.txt -F: include/linux/lockdep.h -F: kernel/lockdep* - -LOGICAL DISK MANAGER SUPPORT (LDM, Windows 2000/XP/Vista Dynamic Disks) -M: "Richard Russon (FlatCap)" -L: linux-ntfs-dev@lists.sourceforge.net -W: http://www.linux-ntfs.org/content/view/19/37/ -S: Maintained -F: Documentation/ldm.txt -F: block/partitions/ldm.* - -LogFS -M: Joern Engel -M: Prasad Joshi -L: logfs@logfs.org -W: logfs.org -S: Maintained -F: fs/logfs/ - -LSILOGIC MPT FUSION DRIVERS (FC/SAS/SPI) -M: Eric Moore -M: support@lsi.com -L: DL-MPTFusionLinux@lsi.com -L: linux-scsi@vger.kernel.org -W: http://www.lsilogic.com/support -S: Supported -F: drivers/message/fusion/ - -LSILOGIC/SYMBIOS/NCR 53C8XX and 53C1010 PCI-SCSI drivers -M: Matthew Wilcox -L: linux-scsi@vger.kernel.org -S: Maintained -F: drivers/scsi/sym53c8xx_2/ - -LTC4261 HARDWARE MONITOR DRIVER -M: Guenter Roeck -L: lm-sensors@lm-sensors.org -S: Maintained -F: Documentation/hwmon/ltc4261 -F: drivers/hwmon/ltc4261.c - -LTP (Linux Test Project) -M: Shubham Goyal -M: Mike Frysinger -M: Cyril Hrubis -M: Caspar Zhang -M: Wanlong Gao -L: ltp-list@lists.sourceforge.net (subscribers-only) -W: http://ltp.sourceforge.net/ -T: git git://github.com/linux-test-project/ltp.git -T: git git://ltp.git.sourceforge.net/gitroot/ltp/ltp-dev -S: Maintained - -M32R ARCHITECTURE -M: Hirokazu Takata -L: linux-m32r@ml.linux-m32r.org (moderated for non-subscribers) -L: linux-m32r-ja@ml.linux-m32r.org (in Japanese) -W: http://www.linux-m32r.org/ -S: Maintained -F: arch/m32r/ - -M68K ARCHITECTURE -M: Geert Uytterhoeven -L: linux-m68k@lists.linux-m68k.org -W: http://www.linux-m68k.org/ -T: git git://git.kernel.org/pub/scm/linux/kernel/git/geert/linux-m68k.git -S: Maintained -F: arch/m68k/ -F: drivers/zorro/ - -M68K ON APPLE MACINTOSH -M: Joshua Thompson -W: http://www.mac.linux-m68k.org/ -L: linux-m68k@lists.linux-m68k.org -S: Maintained -F: arch/m68k/mac/ - -M68K ON HP9000/300 -M: Philip Blundell -W: http://www.tazenda.demon.co.uk/phil/linux-hp -S: Maintained -F: arch/m68k/hp300/ - -MAC80211 -M: Johannes Berg -L: linux-wireless@vger.kernel.org -W: http://linuxwireless.org/ -T: git git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless.git -S: Maintained -F: Documentation/networking/mac80211-injection.txt -F: include/net/mac80211.h -F: net/mac80211/ - -MAC80211 PID RATE CONTROL -M: Stefano Brivio -M: Mattias Nissler -L: linux-wireless@vger.kernel.org -W: http://linuxwireless.org/en/developers/Documentation/mac80211/RateControl/PID -T: git git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless.git -S: Maintained -F: net/mac80211/rc80211_pid* - -MACVLAN DRIVER -M: Patrick McHardy -L: netdev@vger.kernel.org -S: Maintained -F: drivers/net/macvlan.c -F: include/linux/if_macvlan.h - -MAN-PAGES: MANUAL PAGES FOR LINUX -- Sections 2, 3, 4, 5, and 7 -M: Michael Kerrisk -W: http://www.kernel.org/doc/man-pages -L: linux-man@vger.kernel.org -S: Maintained - -MARVELL GIGABIT ETHERNET DRIVERS (skge/sky2) -M: Mirko Lindner -M: Stephen Hemminger -L: netdev@vger.kernel.org -S: Maintained -F: drivers/net/ethernet/marvell/sk* - -MARVELL LIBERTAS WIRELESS DRIVER -M: Dan Williams -L: libertas-dev@lists.infradead.org -S: Maintained -F: drivers/net/wireless/libertas/ - -MARVELL MV643XX ETHERNET DRIVER -M: Lennert Buytenhek -L: netdev@vger.kernel.org -S: Maintained -F: drivers/net/ethernet/marvell/mv643xx_eth.* -F: include/linux/mv643xx.h - -MARVELL MWIFIEX WIRELESS DRIVER -M: Bing Zhao -L: linux-wireless@vger.kernel.org -S: Maintained -F: drivers/net/wireless/mwifiex/ - -MARVELL MWL8K WIRELESS DRIVER -M: Lennert Buytenhek -L: linux-wireless@vger.kernel.org -S: Odd Fixes -F: drivers/net/wireless/mwl8k.c - -MARVELL SOC MMC/SD/SDIO CONTROLLER DRIVER -M: Nicolas Pitre -S: Odd Fixes -F: drivers/mmc/host/mvsdio.* - -MATROX FRAMEBUFFER DRIVER -L: linux-fbdev@vger.kernel.org -S: Orphan -F: drivers/video/matrox/matroxfb_* -F: include/linux/matroxfb.h - -MAX6650 HARDWARE MONITOR AND FAN CONTROLLER DRIVER -M: "Hans J. Koch" -L: lm-sensors@lm-sensors.org -S: Maintained -F: Documentation/hwmon/max6650 -F: drivers/hwmon/max6650.c - -MEDIA INPUT INFRASTRUCTURE (V4L/DVB) -M: Mauro Carvalho Chehab -P: LinuxTV.org Project -L: linux-media@vger.kernel.org -W: http://linuxtv.org -Q: http://patchwork.kernel.org/project/linux-media/list/ -T: git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media.git -S: Maintained -F: Documentation/dvb/ -F: Documentation/video4linux/ -F: Documentation/DocBook/media/ -F: drivers/media/ -F: drivers/staging/media/ -F: include/media/ -F: include/linux/dvb/ -F: include/linux/videodev*.h - -MEGARAID SCSI DRIVERS -M: Neela Syam Kolli -L: linux-scsi@vger.kernel.org -W: http://megaraid.lsilogic.com -S: Maintained -F: Documentation/scsi/megaraid.txt -F: drivers/scsi/megaraid.* -F: drivers/scsi/megaraid/ - -MEMORY MANAGEMENT -L: linux-mm@kvack.org -W: http://www.linux-mm.org -S: Maintained -F: include/linux/mm.h -F: mm/ - -MEMORY RESOURCE CONTROLLER -M: Johannes Weiner -M: Michal Hocko -M: Balbir Singh -M: KAMEZAWA Hiroyuki -L: cgroups@vger.kernel.org -L: linux-mm@kvack.org -S: Maintained -F: mm/memcontrol.c -F: mm/page_cgroup.c - -MEMORY TECHNOLOGY DEVICES (MTD) -M: David Woodhouse -L: linux-mtd@lists.infradead.org -W: http://www.linux-mtd.infradead.org/ -Q: http://patchwork.ozlabs.org/project/linux-mtd/list/ -T: git git://git.infradead.org/mtd-2.6.git -S: Maintained -F: drivers/mtd/ -F: include/linux/mtd/ -F: include/mtd/ - -MICROBLAZE ARCHITECTURE -M: Michal Simek -L: microblaze-uclinux@itee.uq.edu.au (moderated for non-subscribers) -W: http://www.monstr.eu/fdt/ -T: git git://git.monstr.eu/linux-2.6-microblaze.git -S: Supported -F: arch/microblaze/ - -MICROCHANNEL ARCHITECTURE (MCA) -M: James Bottomley -S: Maintained -F: Documentation/mca.txt -F: drivers/mca/ -F: include/linux/mca* - -MICROTEK X6 SCANNER -M: Oliver Neukum -S: Maintained -F: drivers/usb/image/microtek.* - -MIPS -M: Ralf Baechle -L: linux-mips@linux-mips.org -W: http://www.linux-mips.org/ -T: git git://git.linux-mips.org/pub/scm/ralf/linux.git -Q: http://patchwork.linux-mips.org/project/linux-mips/list/ -S: Supported -F: Documentation/mips/ -F: arch/mips/ - -MODULE SUPPORT -M: Rusty Russell -S: Maintained -F: include/linux/module.h -F: kernel/module.c - -MOTION EYE VAIO PICTUREBOOK CAMERA DRIVER -W: http://popies.net/meye/ -S: Orphan -F: Documentation/video4linux/meye.txt -F: drivers/media/video/meye.* -F: include/linux/meye.h - -MOTOROLA IMX MMC/SD HOST CONTROLLER INTERFACE DRIVER -M: Pavel Pisa -L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) -S: Maintained -F: drivers/mmc/host/imxmmc.* - -MOUSE AND MISC DEVICES [GENERAL] -M: Alessandro Rubini -S: Maintained -F: drivers/input/mouse/ -F: include/linux/gpio_mouse.h - -MOXA SMARTIO/INDUSTIO/INTELLIO SERIAL CARD -M: Jiri Slaby -S: Maintained -F: Documentation/serial/moxa-smartio -F: drivers/tty/mxser.* - -MSI LAPTOP SUPPORT -M: "Lee, Chun-Yi" -L: platform-driver-x86@vger.kernel.org -S: Maintained -F: drivers/platform/x86/msi-laptop.c - -MSI WMI SUPPORT -M: Anisse Astier -L: platform-driver-x86@vger.kernel.org -S: Supported -F: drivers/platform/x86/msi-wmi.c - -MULTIFUNCTION DEVICES (MFD) -M: Samuel Ortiz -T: git git://git.kernel.org/pub/scm/linux/kernel/git/sameo/mfd-2.6.git -S: Supported -F: drivers/mfd/ - -MULTIMEDIA CARD (MMC), SECURE DIGITAL (SD) AND SDIO SUBSYSTEM -M: Chris Ball -L: linux-mmc@vger.kernel.org -T: git git://git.kernel.org/pub/scm/linux/kernel/git/cjb/mmc.git -S: Maintained -F: drivers/mmc/ -F: include/linux/mmc/ - -MULTIMEDIA CARD (MMC) ETC. OVER SPI -S: Orphan -F: drivers/mmc/host/mmc_spi.c -F: include/linux/spi/mmc_spi.h - -MULTISOUND SOUND DRIVER -M: Andrew Veliath -S: Maintained -F: Documentation/sound/oss/MultiSound -F: sound/oss/msnd* - -MULTITECH MULTIPORT CARD (ISICOM) -S: Orphan -F: drivers/tty/isicom.c -F: include/linux/isicom.h - -MUSB MULTIPOINT HIGH SPEED DUAL-ROLE CONTROLLER -M: Felipe Balbi -L: linux-usb@vger.kernel.org -T: git git://git.kernel.org/pub/scm/linux/kernel/git/balbi/usb.git -S: Maintained -F: drivers/usb/musb/ - -MYRICOM MYRI-10G 10GbE DRIVER (MYRI10GE) -M: Jon Mason -M: Andrew Gallatin -L: netdev@vger.kernel.org -W: http://www.myri.com/scs/download-Myri10GE.html -S: Supported -F: drivers/net/ethernet/myricom/myri10ge/ - -NATSEMI ETHERNET DRIVER (DP8381x) -S: Orphan -F: drivers/net/ethernet/natsemi/natsemi.c - -NATIVE INSTRUMENTS USB SOUND INTERFACE DRIVER -M: Daniel Mack -S: Maintained -L: alsa-devel@alsa-project.org -W: http://www.native-instruments.com -F: sound/usb/caiaq/ - -NCP FILESYSTEM -M: Petr Vandrovec -S: Odd Fixes -F: fs/ncpfs/ - -NCR DUAL 700 SCSI DRIVER (MICROCHANNEL) -M: "James E.J. Bottomley" -L: linux-scsi@vger.kernel.org -S: Maintained -F: drivers/scsi/NCR_D700.* - -NETEFFECT IWARP RNIC DRIVER (IW_NES) -M: Faisal Latif -L: linux-rdma@vger.kernel.org -W: http://www.intel.com/Products/Server/Adapters/Server-Cluster/Server-Cluster-overview.htm -S: Supported -F: drivers/infiniband/hw/nes/ - -NETEM NETWORK EMULATOR -M: Stephen Hemminger -L: netem@lists.linux-foundation.org -S: Maintained -F: net/sched/sch_netem.c - -NETERION 10GbE DRIVERS (s2io/vxge) -M: Jon Mason -L: netdev@vger.kernel.org -W: http://trac.neterion.com/cgi-bin/trac.cgi/wiki/Linux?Anonymous -W: http://trac.neterion.com/cgi-bin/trac.cgi/wiki/X3100Linux?Anonymous -S: Supported -F: Documentation/networking/s2io.txt -F: Documentation/networking/vxge.txt -F: drivers/net/ethernet/neterion/ - -NETFILTER/IPTABLES/IPCHAINS -P: Harald Welte -P: Jozsef Kadlecsik -M: Pablo Neira Ayuso -M: Patrick McHardy -L: netfilter-devel@vger.kernel.org -L: netfilter@vger.kernel.org -L: coreteam@netfilter.org -W: http://www.netfilter.org/ -W: http://www.iptables.org/ -T: git git://git.kernel.org/pub/scm/linux/kernel/git/netfilter/nf-2.6.git -T: git git://git.kernel.org/pub/scm/linux/kernel/git/netfilter/nf-next-2.6.git -S: Supported -F: include/linux/netfilter* -F: include/linux/netfilter/ -F: include/net/netfilter/ -F: net/*/netfilter.c -F: net/*/netfilter/ -F: net/netfilter/ - -NETLABEL -M: Paul Moore -W: http://netlabel.sf.net -L: netdev@vger.kernel.org -S: Maintained -F: Documentation/netlabel/ -F: include/net/netlabel.h -F: net/netlabel/ - -NETROM NETWORK LAYER -M: Ralf Baechle -L: linux-hams@vger.kernel.org -W: http://www.linux-ax25.org/ -S: Maintained -F: include/linux/netrom.h -F: include/net/netrom.h -F: net/netrom/ - -NETWORK BLOCK DEVICE (NBD) -M: Paul Clements -S: Maintained -F: Documentation/blockdev/nbd.txt -F: drivers/block/nbd.c -F: include/linux/nbd.h - -NETWORK DROP MONITOR -M: Neil Horman -L: netdev@vger.kernel.org -S: Maintained -W: https://fedorahosted.org/dropwatch/ -F: net/core/drop_monitor.c - -NETWORKING [GENERAL] -M: "David S. Miller" -L: netdev@vger.kernel.org -W: http://www.linuxfoundation.org/en/Net -W: http://patchwork.ozlabs.org/project/netdev/list/ -T: git git://git.kernel.org/pub/scm/linux/kernel/git/davem/net.git -T: git git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next.git -S: Maintained -F: net/ -F: include/net/ -F: include/linux/in.h -F: include/linux/net.h -F: include/linux/netdevice.h - -NETWORKING [IPv4/IPv6] -M: "David S. Miller" -M: Alexey Kuznetsov -M: James Morris -M: Hideaki YOSHIFUJI -M: Patrick McHardy -L: netdev@vger.kernel.org -T: git git://git.kernel.org/pub/scm/linux/kernel/git/davem/net.git -S: Maintained -F: net/ipv4/ -F: net/ipv6/ -F: include/net/ip* -F: arch/x86/net/* - -NETWORKING [LABELED] (NetLabel, CIPSO, Labeled IPsec, SECMARK) -M: Paul Moore -L: netdev@vger.kernel.org -S: Maintained - -NETWORKING [WIRELESS] -M: "John W. Linville" -L: linux-wireless@vger.kernel.org -Q: http://patchwork.kernel.org/project/linux-wireless/list/ -T: git git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless.git -S: Maintained -F: net/mac80211/ -F: net/rfkill/ -F: net/wireless/ -F: include/net/ieee80211* -F: include/linux/wireless.h -F: include/net/iw_handler.h -F: drivers/net/wireless/ - -NETWORKING DRIVERS -L: netdev@vger.kernel.org -W: http://www.linuxfoundation.org/en/Net -T: git git://git.kernel.org/pub/scm/linux/kernel/git/davem/net.git -T: git git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next.git -S: Odd Fixes -F: drivers/net/ -F: include/linux/if_* -F: include/linux/*device.h - -NETXEN (1/10) GbE SUPPORT -M: Sony Chacko -M: Rajesh Borundia -L: netdev@vger.kernel.org -W: http://www.qlogic.com -S: Supported -F: drivers/net/ethernet/qlogic/netxen/ - -NFC SUBSYSTEM -M: Lauro Ramos Venancio -M: Aloisio Almeida Jr -M: Samuel Ortiz -L: linux-wireless@vger.kernel.org -S: Maintained -F: net/nfc/ -F: include/linux/nfc.h -F: include/net/nfc/ -F: drivers/nfc/ - -NFS, SUNRPC, AND LOCKD CLIENTS -M: Trond Myklebust -L: linux-nfs@vger.kernel.org -W: http://client.linux-nfs.org -T: git git://git.linux-nfs.org/pub/linux/nfs-2.6.git -S: Maintained -F: fs/lockd/ -F: fs/nfs/ -F: fs/nfs_common/ -F: net/sunrpc/ -F: include/linux/lockd/ -F: include/linux/nfs* -F: include/linux/sunrpc/ - -NI5010 NETWORK DRIVER -M: Jan-Pascal van Best -M: Andreas Mohr -L: netdev@vger.kernel.org -S: Maintained -F: drivers/net/ethernet/racal/ni5010.* - -NILFS2 FILESYSTEM -M: KONISHI Ryusuke -L: linux-nilfs@vger.kernel.org -W: http://www.nilfs.org/en/ -T: git git://git.kernel.org/pub/scm/linux/kernel/git/ryusuke/nilfs2.git -S: Supported -F: Documentation/filesystems/nilfs2.txt -F: fs/nilfs2/ -F: include/linux/nilfs2_fs.h - -NINJA SCSI-3 / NINJA SCSI-32Bi (16bit/CardBus) PCMCIA SCSI HOST ADAPTER DRIVER -M: YOKOTA Hiroshi -W: http://www.netlab.is.tsukuba.ac.jp/~yokota/izumi/ninja/ -S: Maintained -F: Documentation/scsi/NinjaSCSI.txt -F: drivers/scsi/pcmcia/nsp_* - -NINJA SCSI-32Bi/UDE PCI/CARDBUS SCSI HOST ADAPTER DRIVER -M: GOTO Masanori -M: YOKOTA Hiroshi -W: http://www.netlab.is.tsukuba.ac.jp/~yokota/izumi/ninja/ -S: Maintained -F: Documentation/scsi/NinjaSCSI.txt -F: drivers/scsi/nsp32* - -NTFS FILESYSTEM -M: Anton Altaparmakov -L: linux-ntfs-dev@lists.sourceforge.net -W: http://www.tuxera.com/ -T: git git://git.kernel.org/pub/scm/linux/kernel/git/aia21/ntfs.git -S: Supported -F: Documentation/filesystems/ntfs.txt -F: fs/ntfs/ - -NVIDIA (rivafb and nvidiafb) FRAMEBUFFER DRIVER -M: Antonino Daplas -L: linux-fbdev@vger.kernel.org -S: Maintained -F: drivers/video/riva/ -F: drivers/video/nvidia/ - -OMAP SUPPORT -M: Tony Lindgren -L: linux-omap@vger.kernel.org -W: http://www.muru.com/linux/omap/ -W: http://linux.omap.com/ -Q: http://patchwork.kernel.org/project/linux-omap/list/ -T: git git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap.git -S: Maintained -F: arch/arm/*omap*/ -F: drivers/i2c/busses/i2c-omap.c -F: include/linux/i2c-omap.h - -OMAP CLOCK FRAMEWORK SUPPORT -M: Paul Walmsley -L: linux-omap@vger.kernel.org -S: Maintained -F: arch/arm/*omap*/*clock* - -OMAP POWER MANAGEMENT SUPPORT -M: Kevin Hilman -L: linux-omap@vger.kernel.org -S: Maintained -F: arch/arm/*omap*/*pm* - -OMAP POWERDOMAIN/CLOCKDOMAIN SOC ADAPTATION LAYER SUPPORT -M: Rajendra Nayak -M: Paul Walmsley -L: linux-omap@vger.kernel.org -S: Maintained -F: arch/arm/mach-omap2/powerdomain2xxx_3xxx.c -F: arch/arm/mach-omap2/powerdomain44xx.c -F: arch/arm/mach-omap2/clockdomain2xxx_3xxx.c -F: arch/arm/mach-omap2/clockdomain44xx.c - -OMAP AUDIO SUPPORT -M: Peter Ujfalusi -M: Jarkko Nikula -L: alsa-devel@alsa-project.org (subscribers-only) -L: linux-omap@vger.kernel.org -S: Maintained -F: sound/soc/omap/ - -OMAP FRAMEBUFFER SUPPORT -M: Tomi Valkeinen -L: linux-fbdev@vger.kernel.org -L: linux-omap@vger.kernel.org -S: Maintained -F: drivers/video/omap/ - -OMAP DISPLAY SUBSYSTEM and FRAMEBUFFER SUPPORT (DSS2) -M: Tomi Valkeinen -L: linux-omap@vger.kernel.org -L: linux-fbdev@vger.kernel.org -S: Maintained -F: drivers/video/omap2/ -F: Documentation/arm/OMAP/DSS - -OMAP HARDWARE SPINLOCK SUPPORT -M: Ohad Ben-Cohen -L: linux-omap@vger.kernel.org -S: Maintained -F: drivers/hwspinlock/omap_hwspinlock.c -F: arch/arm/mach-omap2/hwspinlock.c - -OMAP MMC SUPPORT -M: Jarkko Lavinen -L: linux-omap@vger.kernel.org -S: Maintained -F: drivers/mmc/host/omap.c - -OMAP HS MMC SUPPORT -L: linux-omap@vger.kernel.org -S: Orphan -F: drivers/mmc/host/omap_hsmmc.c - -OMAP RANDOM NUMBER GENERATOR SUPPORT -M: Deepak Saxena -S: Maintained -F: drivers/char/hw_random/omap-rng.c - -OMAP HWMOD SUPPORT -M: Benoît Cousson -M: Paul Walmsley -L: linux-omap@vger.kernel.org -S: Maintained -F: arch/arm/mach-omap2/omap_hwmod.c -F: arch/arm/plat-omap/include/plat/omap_hwmod.h - -OMAP HWMOD DATA FOR OMAP4-BASED DEVICES -M: Benoît Cousson -L: linux-omap@vger.kernel.org -S: Maintained -F: arch/arm/mach-omap2/omap_hwmod_44xx_data.c - -OMAP IMAGE SIGNAL PROCESSOR (ISP) -M: Laurent Pinchart -L: linux-media@vger.kernel.org -S: Maintained -F: drivers/media/video/omap3isp/* - -OMAP USB SUPPORT -M: Felipe Balbi -L: linux-usb@vger.kernel.org -L: linux-omap@vger.kernel.org -T: git git://git.kernel.org/pub/scm/linux/kernel/git/balbi/usb.git -S: Maintained -F: drivers/usb/*/*omap* -F: arch/arm/*omap*/usb* - -OMFS FILESYSTEM -M: Bob Copeland -L: linux-karma-devel@lists.sourceforge.net -S: Maintained -F: Documentation/filesystems/omfs.txt -F: fs/omfs/ - -OMNIKEY CARDMAN 4000 DRIVER -M: Harald Welte -S: Maintained -F: drivers/char/pcmcia/cm4000_cs.c -F: include/linux/cm4000_cs.h - -OMNIKEY CARDMAN 4040 DRIVER -M: Harald Welte -S: Maintained -F: drivers/char/pcmcia/cm4040_cs.* - -OMNIVISION OV7670 SENSOR DRIVER -M: Jonathan Corbet -L: linux-media@vger.kernel.org -T: git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media.git -S: Maintained -F: drivers/media/video/ov7670.c - -ONENAND FLASH DRIVER -M: Kyungmin Park -L: linux-mtd@lists.infradead.org -S: Maintained -F: drivers/mtd/onenand/ -F: include/linux/mtd/onenand*.h - -ONSTREAM SCSI TAPE DRIVER -M: Willem Riede -L: osst-users@lists.sourceforge.net -L: linux-scsi@vger.kernel.org -S: Maintained -F: drivers/scsi/osst* -F: drivers/scsi/st* - -OPENCORES I2C BUS DRIVER -M: Peter Korsgaard -L: linux-i2c@vger.kernel.org -S: Maintained -F: Documentation/i2c/busses/i2c-ocores -F: drivers/i2c/busses/i2c-ocores.c - -OPEN FIRMWARE AND FLATTENED DEVICE TREE -M: Grant Likely -M: Rob Herring -L: devicetree-discuss@lists.ozlabs.org (moderated for non-subscribers) -W: http://fdt.secretlab.ca -T: git git://git.secretlab.ca/git/linux-2.6.git -S: Maintained -F: Documentation/devicetree -F: drivers/of -F: include/linux/of*.h -K: of_get_property -K: of_match_table - -OPENRISC ARCHITECTURE -M: Jonas Bonn -W: http://openrisc.net -L: linux@lists.openrisc.net (moderated for non-subscribers) -S: Maintained -T: git git://openrisc.net/~jonas/linux -F: arch/openrisc - -OPENVSWITCH -M: Jesse Gross -L: dev@openvswitch.org -W: http://openvswitch.org -T: git git://git.kernel.org/pub/scm/linux/kernel/git/jesse/openvswitch.git -S: Maintained -F: net/openvswitch/ - -OPL4 DRIVER -M: Clemens Ladisch -L: alsa-devel@alsa-project.org (moderated for non-subscribers) -T: git git://git.alsa-project.org/alsa-kernel.git -S: Maintained -F: sound/drivers/opl4/ - -OPROFILE -M: Robert Richter -L: oprofile-list@lists.sf.net -S: Maintained -F: arch/*/include/asm/oprofile*.h -F: arch/*/oprofile/ -F: drivers/oprofile/ -F: include/linux/oprofile.h - -ORACLE CLUSTER FILESYSTEM 2 (OCFS2) -M: Mark Fasheh -M: Joel Becker -L: ocfs2-devel@oss.oracle.com (moderated for non-subscribers) -W: http://oss.oracle.com/projects/ocfs2/ -T: git git://git.kernel.org/pub/scm/linux/kernel/git/jlbec/ocfs2.git -S: Supported -F: Documentation/filesystems/ocfs2.txt -F: Documentation/filesystems/dlmfs.txt -F: fs/ocfs2/ - -ORINOCO DRIVER -L: linux-wireless@vger.kernel.org -W: http://linuxwireless.org/en/users/Drivers/orinoco -W: http://www.nongnu.org/orinoco/ -S: Orphan -F: drivers/net/wireless/orinoco/ - -OSD LIBRARY and FILESYSTEM -M: Boaz Harrosh -M: Benny Halevy -L: osd-dev@open-osd.org -W: http://open-osd.org -T: git git://git.open-osd.org/open-osd.git -S: Maintained -F: drivers/scsi/osd/ -F: include/scsi/osd_* -F: fs/exofs/ - -P54 WIRELESS DRIVER -M: Christian Lamparter -L: linux-wireless@vger.kernel.org -W: http://wireless.kernel.org/en/users/Drivers/p54 -S: Maintained -F: drivers/net/wireless/p54/ - -PA SEMI ETHERNET DRIVER -M: Olof Johansson -L: netdev@vger.kernel.org -S: Maintained -F: drivers/net/ethernet/pasemi/* - -PA SEMI SMBUS DRIVER -M: Olof Johansson -L: linux-i2c@vger.kernel.org -S: Maintained -F: drivers/i2c/busses/i2c-pasemi.c - -PADATA PARALLEL EXECUTION MECHANISM -M: Steffen Klassert -L: linux-crypto@vger.kernel.org -S: Maintained -F: kernel/padata.c -F: include/linux/padata.h -F: Documentation/padata.txt - -PANASONIC LAPTOP ACPI EXTRAS DRIVER -M: Harald Welte -L: platform-driver-x86@vger.kernel.org -S: Maintained -F: drivers/platform/x86/panasonic-laptop.c - -PANASONIC MN10300/AM33/AM34 PORT -M: David Howells -M: Koichi Yasutake -L: linux-am33-list@redhat.com (moderated for non-subscribers) -W: ftp://ftp.redhat.com/pub/redhat/gnupro/AM33/ -S: Maintained -F: Documentation/mn10300/ -F: arch/mn10300/ - -PARALLEL PORT SUPPORT -L: linux-parport@lists.infradead.org (subscribers-only) -S: Orphan -F: drivers/parport/ -F: include/linux/parport*.h -F: drivers/char/ppdev.c -F: include/linux/ppdev.h - -PARAVIRT_OPS INTERFACE -M: Jeremy Fitzhardinge -M: Chris Wright -M: Alok Kataria -M: Rusty Russell -L: virtualization@lists.linux-foundation.org -S: Supported -F: Documentation/ia64/paravirt_ops.txt -F: arch/*/kernel/paravirt* -F: arch/*/include/asm/paravirt.h - -PARIDE DRIVERS FOR PARALLEL PORT IDE DEVICES -M: Tim Waugh -L: linux-parport@lists.infradead.org (subscribers-only) -W: http://www.torque.net/linux-pp.html -S: Maintained -F: Documentation/blockdev/paride.txt -F: drivers/block/paride/ - -PARISC ARCHITECTURE -M: "James E.J. Bottomley" -M: Helge Deller -L: linux-parisc@vger.kernel.org -W: http://www.parisc-linux.org/ -Q: http://patchwork.kernel.org/project/linux-parisc/list/ -T: git git://git.kernel.org/pub/scm/linux/kernel/git/jejb/parisc-2.6.git -S: Maintained -F: arch/parisc/ -F: drivers/parisc/ - -PC87360 HARDWARE MONITORING DRIVER -M: Jim Cromie -L: lm-sensors@lm-sensors.org -S: Maintained -F: Documentation/hwmon/pc87360 -F: drivers/hwmon/pc87360.c - -PC8736x GPIO DRIVER -M: Jim Cromie -S: Maintained -F: drivers/char/pc8736x_gpio.c - -PC87427 HARDWARE MONITORING DRIVER -M: Jean Delvare -L: lm-sensors@lm-sensors.org -S: Maintained -F: Documentation/hwmon/pc87427 -F: drivers/hwmon/pc87427.c - -PCA9532 LED DRIVER -M: Riku Voipio -S: Maintained -F: drivers/leds/leds-pca9532.c -F: include/linux/leds-pca9532.h - -PCA9541 I2C BUS MASTER SELECTOR DRIVER -M: Guenter Roeck -L: linux-i2c@vger.kernel.org -S: Maintained -F: drivers/i2c/muxes/pca9541.c - -PCA9564/PCA9665 I2C BUS DRIVER -M: Wolfram Sang -L: linux-i2c@vger.kernel.org -S: Maintained -F: drivers/i2c/algos/i2c-algo-pca.c -F: drivers/i2c/busses/i2c-pca-* -F: include/linux/i2c-algo-pca.h -F: include/linux/i2c-pca-platform.h - -PCDP - PRIMARY CONSOLE AND DEBUG PORT -M: Khalid Aziz -S: Maintained -F: drivers/firmware/pcdp.* - -PCI ERROR RECOVERY -M: Linas Vepstas -L: linux-pci@vger.kernel.org -S: Supported -F: Documentation/PCI/pci-error-recovery.txt -F: Documentation/powerpc/eeh-pci-error-recovery.txt - -PCI SUBSYSTEM -M: Bjorn Helgaas -L: linux-pci@vger.kernel.org -Q: http://patchwork.kernel.org/project/linux-pci/list/ -T: git git://git.kernel.org/pub/scm/linux/kernel/git/jbarnes/pci.git -S: Supported -F: Documentation/PCI/ -F: drivers/pci/ -F: include/linux/pci* - -PCI HOTPLUG -M: Bjorn Helgaas -L: linux-pci@vger.kernel.org -S: Supported -F: drivers/pci/hotplug - -PCMCIA SUBSYSTEM -P: Linux PCMCIA Team -L: linux-pcmcia@lists.infradead.org -W: http://lists.infradead.org/mailman/listinfo/linux-pcmcia -T: git git://git.kernel.org/pub/scm/linux/kernel/git/brodo/pcmcia-2.6.git -S: Maintained -F: Documentation/pcmcia/ -F: drivers/pcmcia/ -F: include/pcmcia/ - -PCNET32 NETWORK DRIVER -M: Don Fry -L: netdev@vger.kernel.org -S: Maintained -F: drivers/net/ethernet/amd/pcnet32.c - -PCRYPT PARALLEL CRYPTO ENGINE -M: Steffen Klassert -L: linux-crypto@vger.kernel.org -S: Maintained -F: crypto/pcrypt.c -F: include/crypto/pcrypt.h - -PER-CPU MEMORY ALLOCATOR -M: Tejun Heo -M: Christoph Lameter -T: git git://git.kernel.org/pub/scm/linux/kernel/git/tj/percpu.git -S: Maintained -F: include/linux/percpu*.h -F: mm/percpu*.c -F: arch/*/include/asm/percpu.h - -PER-TASK DELAY ACCOUNTING -M: Balbir Singh -S: Maintained -F: include/linux/delayacct.h -F: kernel/delayacct.c - -PERFORMANCE EVENTS SUBSYSTEM -M: Peter Zijlstra -M: Paul Mackerras -M: Ingo Molnar -M: Arnaldo Carvalho de Melo -T: git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git perf/core -S: Supported -F: kernel/events/* -F: include/linux/perf_event.h -F: arch/*/kernel/perf_event*.c -F: arch/*/kernel/*/perf_event*.c -F: arch/*/kernel/*/*/perf_event*.c -F: arch/*/include/asm/perf_event.h -F: arch/*/lib/perf_event*.c -F: arch/*/kernel/perf_callchain.c -F: tools/perf/ - -PERSONALITY HANDLING -M: Christoph Hellwig -L: linux-abi-devel@lists.sourceforge.net -S: Maintained -F: include/linux/personality.h - -PHONET PROTOCOL -M: Remi Denis-Courmont -S: Supported -F: Documentation/networking/phonet.txt -F: include/linux/phonet.h -F: include/net/phonet/ -F: net/phonet/ - -PHRAM MTD DRIVER -M: Joern Engel -L: linux-mtd@lists.infradead.org -S: Maintained -F: drivers/mtd/devices/phram.c - -PICOXCELL SUPPORT -M: Jamie Iles -L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) -T: git git://github.com/jamieiles/linux-2.6-ji.git -S: Supported -F: arch/arm/mach-picoxcell -F: drivers/*/picoxcell* -F: drivers/*/*/picoxcell* - -PIN CONTROL SUBSYSTEM -M: Linus Walleij -S: Maintained -F: drivers/pinctrl/ - -PKTCDVD DRIVER -M: Peter Osterlund -S: Maintained -F: drivers/block/pktcdvd.c -F: include/linux/pktcdvd.h - -PKUNITY SOC DRIVERS -M: Guan Xuetao -W: http://mprc.pku.edu.cn/~guanxuetao/linux -S: Maintained -T: git git://git.kernel.org/pub/scm/linux/kernel/git/epip/linux-2.6-unicore32.git -F: drivers/input/serio/i8042-unicore32io.h -F: drivers/i2c/busses/i2c-puv3.c -F: drivers/video/fb-puv3.c -F: drivers/rtc/rtc-puv3.c - -PMBUS HARDWARE MONITORING DRIVERS -M: Guenter Roeck -L: lm-sensors@lm-sensors.org -W: http://www.lm-sensors.org/ -W: http://www.roeck-us.net/linux/drivers/ -T: git git://git.kernel.org/pub/scm/linux/kernel/git/groeck/linux-staging.git -S: Maintained -F: Documentation/hwmon/pmbus -F: drivers/hwmon/pmbus/ -F: include/linux/i2c/pmbus.h - -PMC SIERRA MaxRAID DRIVER -M: Anil Ravindranath -L: linux-scsi@vger.kernel.org -W: http://www.pmc-sierra.com/ -S: Supported -F: drivers/scsi/pmcraid.* - -PMC SIERRA PM8001 DRIVER -M: jack_wang@usish.com -M: lindar_liu@usish.com -L: linux-scsi@vger.kernel.org -S: Supported -F: drivers/scsi/pm8001/ - -POSIX CLOCKS and TIMERS -M: Thomas Gleixner -T: git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git timers/core -S: Supported -F: fs/timerfd.c -F: include/linux/timer* -F: kernel/*timer* - -POWER SUPPLY CLASS/SUBSYSTEM and DRIVERS -M: Anton Vorontsov -M: David Woodhouse -T: git git://git.infradead.org/battery-2.6.git -S: Maintained -F: include/linux/power_supply.h -F: drivers/power/power_supply* - -PNP SUPPORT -M: Adam Belay -M: Bjorn Helgaas -S: Maintained -F: drivers/pnp/ - -PNXxxxx I2C DRIVER -M: Vitaly Wool -L: linux-i2c@vger.kernel.org -S: Maintained -F: drivers/i2c/busses/i2c-pnx.c - -PPP PROTOCOL DRIVERS AND COMPRESSORS -M: Paul Mackerras -L: linux-ppp@vger.kernel.org -S: Maintained -F: drivers/net/ppp/ppp_* - -PPP OVER ATM (RFC 2364) -M: Mitchell Blank Jr -S: Maintained -F: net/atm/pppoatm.c -F: include/linux/atmppp.h - -PPP OVER ETHERNET -M: Michal Ostrowski -S: Maintained -F: drivers/net/ppp/pppoe.c -F: drivers/net/ppp/pppox.c - -PPP OVER L2TP -M: James Chapman -S: Maintained -F: net/l2tp/l2tp_ppp.c -F: include/linux/if_pppol2tp.h - -PPS SUPPORT -M: Rodolfo Giometti -W: http://wiki.enneenne.com/index.php/LinuxPPS_support -L: linuxpps@ml.enneenne.com (subscribers-only) -S: Maintained -F: Documentation/pps/ -F: drivers/pps/ -F: include/linux/pps*.h - -PPTP DRIVER -M: Dmitry Kozlov -L: netdev@vger.kernel.org -S: Maintained -F: drivers/net/ppp/pptp.c -W: http://sourceforge.net/projects/accel-pptp - -PREEMPTIBLE KERNEL -M: Robert Love -L: kpreempt-tech@lists.sourceforge.net -W: ftp://ftp.kernel.org/pub/linux/kernel/people/rml/preempt-kernel -S: Supported -F: Documentation/preempt-locking.txt -F: include/linux/preempt.h - -PRISM54 WIRELESS DRIVER -M: "Luis R. Rodriguez" -L: linux-wireless@vger.kernel.org -W: http://wireless.kernel.org/en/users/Drivers/p54 -S: Obsolete -F: drivers/net/wireless/prism54/ - -PROMISE SATA TX2/TX4 CONTROLLER LIBATA DRIVER -M: Mikael Pettersson -L: linux-ide@vger.kernel.org -S: Maintained -F: drivers/ata/sata_promise.* - -PS3 NETWORK SUPPORT -M: Geoff Levand -L: netdev@vger.kernel.org -L: cbe-oss-dev@lists.ozlabs.org -S: Maintained -F: drivers/net/ethernet/toshiba/ps3_gelic_net.* - -PS3 PLATFORM SUPPORT -M: Geoff Levand -L: linuxppc-dev@lists.ozlabs.org -L: cbe-oss-dev@lists.ozlabs.org -S: Maintained -F: arch/powerpc/boot/ps3* -F: arch/powerpc/include/asm/lv1call.h -F: arch/powerpc/include/asm/ps3*.h -F: arch/powerpc/platforms/ps3/ -F: drivers/*/ps3* -F: drivers/ps3/ -F: drivers/rtc/rtc-ps3.c -F: drivers/usb/host/*ps3.c -F: sound/ppc/snd_ps3* - -PS3VRAM DRIVER -M: Jim Paris -L: cbe-oss-dev@lists.ozlabs.org -S: Maintained -F: drivers/block/ps3vram.c - -PTP HARDWARE CLOCK SUPPORT -M: Richard Cochran -S: Maintained -W: http://linuxptp.sourceforge.net/ -F: Documentation/ABI/testing/sysfs-ptp -F: Documentation/ptp/* -F: drivers/net/gianfar_ptp.c -F: drivers/net/phy/dp83640* -F: drivers/ptp/* -F: include/linux/ptp_cl* - -PTRACE SUPPORT -M: Roland McGrath -M: Oleg Nesterov -S: Maintained -F: include/asm-generic/syscall.h -F: include/linux/ptrace.h -F: include/linux/regset.h -F: include/linux/tracehook.h -F: kernel/ptrace.c - -PVRUSB2 VIDEO4LINUX DRIVER -M: Mike Isely -L: pvrusb2@isely.net (subscribers-only) -L: linux-media@vger.kernel.org -W: http://www.isely.net/pvrusb2/ -T: git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media.git -S: Maintained -F: Documentation/video4linux/README.pvrusb2 -F: drivers/media/video/pvrusb2/ - -PXA2xx/PXA3xx SUPPORT -M: Eric Miao -M: Russell King -M: Haojian Zhuang -L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) -T: git git://github.com/hzhuang1/linux.git -T: git git://git.linaro.org/people/ycmiao/pxa-linux.git -S: Maintained -F: arch/arm/mach-pxa/ -F: drivers/pcmcia/pxa2xx* -F: drivers/spi/spi-pxa2xx* -F: drivers/usb/gadget/pxa2* -F: include/sound/pxa2xx-lib.h -F: sound/arm/pxa* -F: sound/soc/pxa - -MMP SUPPORT -M: Eric Miao -M: Haojian Zhuang -L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) -T: git git://github.com/hzhuang1/linux.git -T: git git://git.linaro.org/people/ycmiao/pxa-linux.git -S: Maintained -F: arch/arm/mach-mmp/ - -PXA MMCI DRIVER -S: Orphan - -PXA RTC DRIVER -M: Robert Jarzmik -L: rtc-linux@googlegroups.com -S: Maintained - -QIB DRIVER -M: Mike Marciniszyn -L: linux-rdma@vger.kernel.org -S: Supported -F: drivers/infiniband/hw/qib/ - -QLOGIC QLA1280 SCSI DRIVER -M: Michael Reed -L: linux-scsi@vger.kernel.org -S: Maintained -F: drivers/scsi/qla1280.[ch] - -QLOGIC QLA2XXX FC-SCSI DRIVER -M: Andrew Vasquez -M: linux-driver@qlogic.com -L: linux-scsi@vger.kernel.org -S: Supported -F: Documentation/scsi/LICENSE.qla2xxx -F: drivers/scsi/qla2xxx/ - -QLOGIC QLA4XXX iSCSI DRIVER -M: Ravi Anand -M: Vikas Chaudhary -M: iscsi-driver@qlogic.com -L: linux-scsi@vger.kernel.org -S: Supported -F: drivers/scsi/qla4xxx/ - -QLOGIC QLA3XXX NETWORK DRIVER -M: Jitendra Kalsaria -M: Ron Mercer -M: linux-driver@qlogic.com -L: netdev@vger.kernel.org -S: Supported -F: Documentation/networking/LICENSE.qla3xxx -F: drivers/net/ethernet/qlogic/qla3xxx.* - -QLOGIC QLCNIC (1/10)Gb ETHERNET DRIVER -M: Anirban Chakraborty -M: Sony Chacko -M: linux-driver@qlogic.com -L: netdev@vger.kernel.org -S: Supported -F: drivers/net/ethernet/qlogic/qlcnic/ - -QLOGIC QLGE 10Gb ETHERNET DRIVER -M: Anirban Chakraborty -M: Jitendra Kalsaria -M: Ron Mercer -M: linux-driver@qlogic.com -L: netdev@vger.kernel.org -S: Supported -F: drivers/net/ethernet/qlogic/qlge/ - -QNX4 FILESYSTEM -M: Anders Larsen -W: http://www.alarsen.net/linux/qnx4fs/ -S: Maintained -F: fs/qnx4/ -F: include/linux/qnx4_fs.h -F: include/linux/qnxtypes.h - -QUALCOMM HEXAGON ARCHITECTURE -M: Richard Kuo -L: linux-hexagon@vger.kernel.org -S: Supported -F: arch/hexagon/ - -RADOS BLOCK DEVICE (RBD) -F: include/linux/qnxtypes.h -M: Yehuda Sadeh -M: Sage Weil -M: ceph-devel@vger.kernel.org -S: Supported -F: drivers/block/rbd.c -F: drivers/block/rbd_types.h - -RADEON FRAMEBUFFER DISPLAY DRIVER -M: Benjamin Herrenschmidt -L: linux-fbdev@vger.kernel.org -S: Maintained -F: drivers/video/aty/radeon* -F: include/linux/radeonfb.h - -RAGE128 FRAMEBUFFER DISPLAY DRIVER -M: Paul Mackerras -L: linux-fbdev@vger.kernel.org -S: Maintained -F: drivers/video/aty/aty128fb.c - -RALINK RT2X00 WIRELESS LAN DRIVER -P: rt2x00 project -M: Ivo van Doorn -M: Gertjan van Wingerde -M: Helmut Schaa -L: linux-wireless@vger.kernel.org -L: users@rt2x00.serialmonkey.com (moderated for non-subscribers) -W: http://rt2x00.serialmonkey.com/ -S: Maintained -T: git git://git.kernel.org/pub/scm/linux/kernel/git/ivd/rt2x00.git -F: drivers/net/wireless/rt2x00/ - -RAMDISK RAM BLOCK DEVICE DRIVER -M: Nick Piggin -S: Maintained -F: Documentation/blockdev/ramdisk.txt -F: drivers/block/brd.c - -RANDOM NUMBER DRIVER -M: Matt Mackall -S: Maintained -F: drivers/char/random.c - -RAPIDIO SUBSYSTEM -M: Matt Porter -M: Alexandre Bounine -S: Maintained -F: drivers/rapidio/ - -RAYLINK/WEBGEAR 802.11 WIRELESS LAN DRIVER -L: linux-wireless@vger.kernel.org -S: Orphan -F: drivers/net/wireless/ray* - -RCUTORTURE MODULE -M: Josh Triplett -M: "Paul E. McKenney" -S: Supported -T: git git://git.kernel.org/pub/scm/linux/kernel/git/paulmck/linux-rcu.git -F: Documentation/RCU/torture.txt -F: kernel/rcutorture.c - -RDC R-321X SoC -M: Florian Fainelli -S: Maintained - -RDC R6040 FAST ETHERNET DRIVER -M: Florian Fainelli -L: netdev@vger.kernel.org -S: Maintained -F: drivers/net/ethernet/rdc/r6040.c - -RDS - RELIABLE DATAGRAM SOCKETS -M: Venkat Venkatsubra -L: rds-devel@oss.oracle.com (moderated for non-subscribers) -S: Supported -F: net/rds/ - -READ-COPY UPDATE (RCU) -M: Dipankar Sarma -M: "Paul E. McKenney" -W: http://www.rdrop.com/users/paulmck/rclock/ -S: Supported -T: git git://git.kernel.org/pub/scm/linux/kernel/git/paulmck/linux-rcu.git -F: Documentation/RCU/ -F: include/linux/rcu* -F: include/linux/srcu* -F: kernel/rcu* -F: kernel/srcu* -X: kernel/rcutorture.c - -REAL TIME CLOCK (RTC) SUBSYSTEM -M: Alessandro Zummo -L: rtc-linux@googlegroups.com -Q: http://patchwork.ozlabs.org/project/rtc-linux/list/ -S: Maintained -F: Documentation/rtc.txt -F: drivers/rtc/ -F: include/linux/rtc.h - -REISERFS FILE SYSTEM -L: reiserfs-devel@vger.kernel.org -S: Supported -F: fs/reiserfs/ - -REGISTER MAP ABSTRACTION -M: Mark Brown -T: git git://git.kernel.org/pub/scm/linux/kernel/git/broonie/regmap.git -S: Supported -F: drivers/base/regmap/ -F: include/linux/regmap.h - -REMOTE PROCESSOR (REMOTEPROC) SUBSYSTEM -M: Ohad Ben-Cohen -S: Maintained -F: drivers/remoteproc/ -F: Documentation/remoteproc.txt -F: include/linux/remoteproc.h - -RFKILL -M: Johannes Berg -L: linux-wireless@vger.kernel.org -S: Maintained -F: Documentation/rfkill.txt -F: net/rfkill/ - -RICOH SMARTMEDIA/XD DRIVER -M: Maxim Levitsky -S: Maintained -F: drivers/mtd/nand/r852.c -F: drivers/mtd/nand/r852.h - -RICOH R5C592 MEMORYSTICK DRIVER -M: Maxim Levitsky -S: Maintained -F: drivers/memstick/host/r592.* - -ROCKETPORT DRIVER -P: Comtrol Corp. -W: http://www.comtrol.com -S: Maintained -F: Documentation/serial/rocket.txt -F: drivers/tty/rocket* - -ROSE NETWORK LAYER -M: Ralf Baechle -L: linux-hams@vger.kernel.org -W: http://www.linux-ax25.org/ -S: Maintained -F: include/linux/rose.h -F: include/net/rose.h -F: net/rose/ - -RTL8180 WIRELESS DRIVER -M: "John W. Linville" -L: linux-wireless@vger.kernel.org -W: http://linuxwireless.org/ -T: git git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-testing.git -S: Maintained -F: drivers/net/wireless/rtl818x/rtl8180/ - -RTL8187 WIRELESS DRIVER -M: Herton Ronaldo Krzesinski -M: Hin-Tak Leung -M: Larry Finger -L: linux-wireless@vger.kernel.org -W: http://linuxwireless.org/ -T: git git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-testing.git -S: Maintained -F: drivers/net/wireless/rtl818x/rtl8187/ - -RTL8192CE WIRELESS DRIVER -M: Larry Finger -M: Chaoming Li -L: linux-wireless@vger.kernel.org -W: http://linuxwireless.org/ -T: git git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-testing.git -S: Maintained -F: drivers/net/wireless/rtlwifi/ -F: drivers/net/wireless/rtlwifi/rtl8192ce/ - -S3 SAVAGE FRAMEBUFFER DRIVER -M: Antonino Daplas -L: linux-fbdev@vger.kernel.org -S: Maintained -F: drivers/video/savage/ - -S390 -M: Martin Schwidefsky -M: Heiko Carstens -M: linux390@de.ibm.com -L: linux-s390@vger.kernel.org -W: http://www.ibm.com/developerworks/linux/linux390/ -S: Supported -F: arch/s390/ -F: drivers/s390/ -F: block/partitions/ibm.c -F: Documentation/s390/ -F: Documentation/DocBook/s390* - -S390 NETWORK DRIVERS -M: Ursula Braun -M: Frank Blaschka -M: linux390@de.ibm.com -L: linux-s390@vger.kernel.org -W: http://www.ibm.com/developerworks/linux/linux390/ -S: Supported -F: drivers/s390/net/ - -S390 ZCRYPT DRIVER -M: Holger Dengler -M: linux390@de.ibm.com -L: linux-s390@vger.kernel.org -W: http://www.ibm.com/developerworks/linux/linux390/ -S: Supported -F: drivers/s390/crypto/ - -S390 ZFCP DRIVER -M: Steffen Maier -M: linux390@de.ibm.com -L: linux-s390@vger.kernel.org -W: http://www.ibm.com/developerworks/linux/linux390/ -S: Supported -F: drivers/s390/scsi/zfcp_* - -S390 IUCV NETWORK LAYER -M: Ursula Braun -M: linux390@de.ibm.com -L: linux-s390@vger.kernel.org -W: http://www.ibm.com/developerworks/linux/linux390/ -S: Supported -F: drivers/s390/net/*iucv* -F: include/net/iucv/ -F: net/iucv/ - -S3C24XX SD/MMC Driver -M: Ben Dooks -L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) -S: Supported -F: drivers/mmc/host/s3cmci.* - -SAA7146 VIDEO4LINUX-2 DRIVER -M: Michael Hunold -L: linux-media@vger.kernel.org -T: git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media.git -W: http://www.mihu.de/linux/saa7146 -S: Maintained -F: drivers/media/common/saa7146* -F: drivers/media/video/*7146* -F: include/media/*7146* - -SAMSUNG LAPTOP DRIVER -M: Corentin Chary -L: platform-driver-x86@vger.kernel.org -S: Maintained -F: drivers/platform/x86/samsung-laptop.c - -SAMSUNG AUDIO (ASoC) DRIVERS -M: Sangbeom Kim -L: alsa-devel@alsa-project.org (moderated for non-subscribers) -S: Supported -F: sound/soc/samsung - -SAMSUNG FRAMEBUFFER DRIVER -M: Jingoo Han -L: linux-fbdev@vger.kernel.org -S: Maintained -F: drivers/video/s3c-fb.c - -SERIAL DRIVERS -M: Alan Cox -L: linux-serial@vger.kernel.org -S: Maintained -F: drivers/tty/serial - -SYNOPSYS DESIGNWARE DMAC DRIVER -M: Viresh Kumar -S: Maintained -F: include/linux/dw_dmac.h -F: drivers/dma/dw_dmac_regs.h -F: drivers/dma/dw_dmac.c - -TIMEKEEPING, NTP -M: John Stultz -M: Thomas Gleixner -T: git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git timers/core -S: Supported -F: include/linux/clocksource.h -F: include/linux/time.h -F: include/linux/timex.h -F: kernel/time/clocksource.c -F: kernel/time/time*.c -F: kernel/time/ntp.c -F: drivers/clocksource - -TLG2300 VIDEO4LINUX-2 DRIVER -M: Huang Shijie -M: Kang Yong -M: Zhang Xiaobing -S: Supported -F: drivers/media/video/tlg2300 - -SC1200 WDT DRIVER -M: Zwane Mwaikambo -S: Maintained -F: drivers/watchdog/sc1200wdt.c - -SCHEDULER -M: Ingo Molnar -M: Peter Zijlstra -T: git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git sched/core -S: Maintained -F: kernel/sched* -F: include/linux/sched.h - -SCORE ARCHITECTURE -M: Chen Liqin -M: Lennox Wu -W: http://www.sunplusct.com -S: Supported -F: arch/score/ - -SCSI CDROM DRIVER -M: Jens Axboe -L: linux-scsi@vger.kernel.org -W: http://www.kernel.dk -S: Maintained -F: drivers/scsi/sr* - -SCSI RDMA PROTOCOL (SRP) INITIATOR -M: David Dillow -L: linux-rdma@vger.kernel.org -S: Supported -W: http://www.openfabrics.org -Q: http://patchwork.kernel.org/project/linux-rdma/list/ -T: git git://git.kernel.org/pub/scm/linux/kernel/git/dad/srp-initiator.git -F: drivers/infiniband/ulp/srp/ -F: include/scsi/srp.h - -SCSI SG DRIVER -M: Doug Gilbert -L: linux-scsi@vger.kernel.org -W: http://www.torque.net/sg -S: Maintained -F: drivers/scsi/sg.c -F: include/scsi/sg.h - -SCSI SUBSYSTEM -M: "James E.J. Bottomley" -L: linux-scsi@vger.kernel.org -T: git git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6.git -T: git git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi-rc-fixes-2.6.git -T: git git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi-pending-2.6.git -S: Maintained -F: drivers/scsi/ -F: include/scsi/ - -SCSI TAPE DRIVER -M: Kai Mäkisara -L: linux-scsi@vger.kernel.org -S: Maintained -F: Documentation/scsi/st.txt -F: drivers/scsi/st* - -SCTP PROTOCOL -M: Vlad Yasevich -M: Sridhar Samudrala -L: linux-sctp@vger.kernel.org -W: http://lksctp.sourceforge.net -S: Supported -F: Documentation/networking/sctp.txt -F: include/linux/sctp.h -F: include/net/sctp/ -F: net/sctp/ - -SCx200 CPU SUPPORT -M: Jim Cromie -S: Odd Fixes -F: Documentation/i2c/busses/scx200_acb -F: arch/x86/platform/scx200/ -F: drivers/watchdog/scx200_wdt.c -F: drivers/i2c/busses/scx200* -F: drivers/mtd/maps/scx200_docflash.c -F: include/linux/scx200.h - -SCx200 GPIO DRIVER -M: Jim Cromie -S: Maintained -F: drivers/char/scx200_gpio.c -F: include/linux/scx200_gpio.h - -SCx200 HRT CLOCKSOURCE DRIVER -M: Jim Cromie -S: Maintained -F: drivers/clocksource/scx200_hrt.c - -SDRICOH_CS MMC/SD HOST CONTROLLER INTERFACE DRIVER -M: Sascha Sommer -L: sdricohcs-devel@lists.sourceforge.net (subscribers-only) -S: Maintained -F: drivers/mmc/host/sdricoh_cs.c - -SECURE DIGITAL HOST CONTROLLER INTERFACE (SDHCI) DRIVER -M: Chris Ball -L: linux-mmc@vger.kernel.org -T: git git://git.kernel.org/pub/scm/linux/kernel/git/cjb/mmc.git -S: Maintained -F: drivers/mmc/host/sdhci.* -F: drivers/mmc/host/sdhci-pltfm.[ch] - -SECURE DIGITAL HOST CONTROLLER INTERFACE, OPEN FIRMWARE BINDINGS (SDHCI-OF) -M: Anton Vorontsov -L: linuxppc-dev@lists.ozlabs.org -L: linux-mmc@vger.kernel.org -S: Maintained -F: drivers/mmc/host/sdhci-pltfm.[ch] - -SECURE DIGITAL HOST CONTROLLER INTERFACE (SDHCI) SAMSUNG DRIVER -M: Ben Dooks -L: linux-mmc@vger.kernel.org -S: Maintained -F: drivers/mmc/host/sdhci-s3c.c - -SECURE DIGITAL HOST CONTROLLER INTERFACE (SDHCI) ST SPEAR DRIVER -M: Viresh Kumar -L: spear-devel@list.st.com -L: linux-mmc@vger.kernel.org -S: Maintained -F: drivers/mmc/host/sdhci-spear.c - -SECURITY SUBSYSTEM -M: James Morris -L: linux-security-module@vger.kernel.org (suggested Cc:) -T: git git://git.kernel.org/pub/scm/linux/kernel/git/jmorris/linux-security.git -W: http://security.wiki.kernel.org/ -S: Supported -F: security/ - -SECURITY CONTACT -M: Security Officers -S: Supported - -SELINUX SECURITY MODULE -M: Stephen Smalley -M: James Morris -M: Eric Paris -L: selinux@tycho.nsa.gov (subscribers-only, general discussion) -W: http://selinuxproject.org -T: git git://git.infradead.org/users/eparis/selinux.git -S: Supported -F: include/linux/selinux* -F: security/selinux/ -F: scripts/selinux/ - -APPARMOR SECURITY MODULE -M: John Johansen -L: apparmor@lists.ubuntu.com (subscribers-only, general discussion) -W: apparmor.wiki.kernel.org -T: git git://git.kernel.org/pub/scm/linux/kernel/git/jj/apparmor-dev.git -S: Supported -F: security/apparmor/ - -SENSABLE PHANTOM -M: Jiri Slaby -S: Maintained -F: drivers/misc/phantom.c -F: include/linux/phantom.h - -SERIAL ATA (SATA) SUBSYSTEM -M: Jeff Garzik -L: linux-ide@vger.kernel.org -T: git git://git.kernel.org/pub/scm/linux/kernel/git/jgarzik/libata-dev.git -S: Supported -F: drivers/ata/ -F: include/linux/ata.h -F: include/linux/libata.h - -SERVER ENGINES 10Gbps iSCSI - BladeEngine 2 DRIVER -M: Jayamohan Kallickal -L: linux-scsi@vger.kernel.org -W: http://www.emulex.com -S: Supported -F: drivers/scsi/be2iscsi/ - -SERVER ENGINES 10Gbps NIC - BladeEngine 2 DRIVER -M: Sathya Perla -M: Subbu Seetharaman -M: Ajit Khaparde -L: netdev@vger.kernel.org -W: http://www.emulex.com -S: Supported -F: drivers/net/ethernet/emulex/benet/ - -SFC NETWORK DRIVER -M: Solarflare linux maintainers -M: Ben Hutchings -L: netdev@vger.kernel.org -S: Supported -F: drivers/net/ethernet/sfc/ - -SGI GRU DRIVER -M: Jack Steiner -S: Maintained -F: drivers/misc/sgi-gru/ - -SGI SN-IA64 (Altix) SERIAL CONSOLE DRIVER -M: Pat Gefre -L: linux-ia64@vger.kernel.org -S: Supported -F: Documentation/ia64/serial.txt -F: drivers/tty/serial/ioc?_serial.c -F: include/linux/ioc?.h - -SGI VISUAL WORKSTATION 320 AND 540 -M: Andrey Panin -L: linux-visws-devel@lists.sf.net -W: http://linux-visws.sf.net -S: Maintained for 2.6. -F: Documentation/sgi-visws.txt - -SGI XP/XPC/XPNET DRIVER -M: Robin Holt -S: Maintained -F: drivers/misc/sgi-xp/ - -SIMPLE FIRMWARE INTERFACE (SFI) -M: Len Brown -L: sfi-devel@simplefirmware.org -W: http://simplefirmware.org/ -T: git git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux-sfi-2.6.git -S: Supported -F: arch/x86/platform/sfi/ -F: drivers/sfi/ -F: include/linux/sfi*.h - -SIMTEC EB110ATX (Chalice CATS) -P: Ben Dooks -P: Vincent Sanders -M: Simtec Linux Team -W: http://www.simtec.co.uk/products/EB110ATX/ -S: Supported - -SIMTEC EB2410ITX (BAST) -P: Ben Dooks -P: Vincent Sanders -M: Simtec Linux Team -W: http://www.simtec.co.uk/products/EB2410ITX/ -S: Supported -F: arch/arm/mach-s3c2410/mach-bast.c -F: arch/arm/mach-s3c2410/bast-ide.c -F: arch/arm/mach-s3c2410/bast-irq.c - -TI DAVINCI MACHINE SUPPORT -M: Sekhar Nori -M: Kevin Hilman -L: davinci-linux-open-source@linux.davincidsp.com (moderated for non-subscribers) -T: git git://gitorious.org/linux-davinci/linux-davinci.git -Q: http://patchwork.kernel.org/project/linux-davinci/list/ -S: Supported -F: arch/arm/mach-davinci -F: drivers/i2c/busses/i2c-davinci.c - -SIS 190 ETHERNET DRIVER -M: Francois Romieu -L: netdev@vger.kernel.org -S: Maintained -F: drivers/net/ethernet/sis/sis190.c - -SIS 900/7016 FAST ETHERNET DRIVER -M: Daniele Venzano -W: http://www.brownhat.org/sis900.html -L: netdev@vger.kernel.org -S: Maintained -F: drivers/net/ethernet/sis/sis900.* - -SIS 96X I2C/SMBUS DRIVER -M: "Mark M. Hoffman" -L: linux-i2c@vger.kernel.org -S: Maintained -F: Documentation/i2c/busses/i2c-sis96x -F: drivers/i2c/busses/i2c-sis96x.c - -SIS FRAMEBUFFER DRIVER -M: Thomas Winischhofer -W: http://www.winischhofer.net/linuxsisvga.shtml -S: Maintained -F: Documentation/fb/sisfb.txt -F: drivers/video/sis/ -F: include/video/sisfb.h - -SIS USB2VGA DRIVER -M: Thomas Winischhofer -W: http://www.winischhofer.at/linuxsisusbvga.shtml -S: Maintained -F: drivers/usb/misc/sisusbvga/ - -SLAB ALLOCATOR -M: Christoph Lameter -M: Pekka Enberg -M: Matt Mackall -L: linux-mm@kvack.org -S: Maintained -F: include/linux/sl?b*.h -F: mm/sl?b.c - -SMC91x ETHERNET DRIVER -M: Nicolas Pitre -S: Odd Fixes -F: drivers/net/ethernet/smsc/smc91x.* - -SMM665 HARDWARE MONITOR DRIVER -M: Guenter Roeck -L: lm-sensors@lm-sensors.org -S: Maintained -F: Documentation/hwmon/smm665 -F: drivers/hwmon/smm665.c - -SMSC EMC2103 HARDWARE MONITOR DRIVER -M: Steve Glendinning -L: lm-sensors@lm-sensors.org -S: Supported -F: Documentation/hwmon/emc2103 -F: drivers/hwmon/emc2103.c - -SMSC SCH5627 HARDWARE MONITOR DRIVER -M: Hans de Goede -L: lm-sensors@lm-sensors.org -S: Supported -F: Documentation/hwmon/sch5627 -F: drivers/hwmon/sch5627.c - -SMSC47B397 HARDWARE MONITOR DRIVER -M: "Mark M. Hoffman" -L: lm-sensors@lm-sensors.org -S: Maintained -F: Documentation/hwmon/smsc47b397 -F: drivers/hwmon/smsc47b397.c - -SMSC911x ETHERNET DRIVER -M: Steve Glendinning -L: netdev@vger.kernel.org -S: Supported -F: include/linux/smsc911x.h -F: drivers/net/ethernet/smsc/smsc911x.* - -SMSC9420 PCI ETHERNET DRIVER -M: Steve Glendinning -L: netdev@vger.kernel.org -S: Supported -F: drivers/net/ethernet/smsc/smsc9420.* - -SMSC UFX6000 and UFX7000 USB to VGA DRIVER -M: Steve Glendinning -L: linux-fbdev@vger.kernel.org -S: Supported -F: drivers/video/smscufx.c - -SN-IA64 (Itanium) SUB-PLATFORM -M: Jes Sorensen -L: linux-altix@sgi.com -L: linux-ia64@vger.kernel.org -W: http://www.sgi.com/altix -S: Maintained -F: arch/ia64/sn/ - -SOC-CAMERA V4L2 SUBSYSTEM -M: Guennadi Liakhovetski -L: linux-media@vger.kernel.org -T: git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media.git -S: Maintained -F: include/media/v4l2* -F: drivers/media/video/v4l2* - -SOEKRIS NET48XX LED SUPPORT -M: Chris Boot -S: Maintained -F: drivers/leds/leds-net48xx.c - -SOFTWARE RAID (Multiple Disks) SUPPORT -M: Neil Brown -L: linux-raid@vger.kernel.org -S: Supported -F: drivers/md/ -F: include/linux/raid/ - -SONIC NETWORK DRIVER -M: Thomas Bogendoerfer -L: netdev@vger.kernel.org -S: Maintained -F: drivers/net/ethernet/natsemi/sonic.* - -SONICS SILICON BACKPLANE DRIVER (SSB) -M: Michael Buesch -L: netdev@vger.kernel.org -S: Maintained -F: drivers/ssb/ -F: include/linux/ssb/ - -SONY VAIO CONTROL DEVICE DRIVER -M: Mattia Dongili -L: platform-driver-x86@vger.kernel.org -W: http://www.linux.it/~malattia/wiki/index.php/Sony_drivers -S: Maintained -F: Documentation/laptops/sony-laptop.txt -F: drivers/char/sonypi.c -F: drivers/platform/x86/sony-laptop.c -F: include/linux/sony-laptop.h - -SONY MEMORYSTICK CARD SUPPORT -M: Alex Dubov -W: http://tifmxx.berlios.de/ -S: Maintained -F: drivers/memstick/host/tifm_ms.c - -SOUND -M: Jaroslav Kysela -M: Takashi Iwai -L: alsa-devel@alsa-project.org (moderated for non-subscribers) -W: http://www.alsa-project.org/ -T: git git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound.git -T: git git://git.alsa-project.org/alsa-kernel.git -S: Maintained -F: Documentation/sound/ -F: include/sound/ -F: sound/ - -SOUND - SOC LAYER / DYNAMIC AUDIO POWER MANAGEMENT (ASoC) -M: Liam Girdwood -M: Mark Brown -T: git git://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git -L: alsa-devel@alsa-project.org (moderated for non-subscribers) -W: http://alsa-project.org/main/index.php/ASoC -S: Supported -F: sound/soc/ -F: include/sound/soc* - -SPARC + UltraSPARC (sparc/sparc64) -M: "David S. Miller" -L: sparclinux@vger.kernel.org -Q: http://patchwork.ozlabs.org/project/sparclinux/list/ -T: git git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc.git -T: git git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc-next.git -S: Maintained -F: arch/sparc/ -F: drivers/sbus/ - -SPARC SERIAL DRIVERS -M: "David S. Miller" -L: sparclinux@vger.kernel.org -T: git git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc.git -T: git git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc-next.git -S: Maintained -F: include/linux/sunserialcore.h -F: drivers/tty/serial/suncore.c -F: drivers/tty/serial/sunhv.c -F: drivers/tty/serial/sunsab.c -F: drivers/tty/serial/sunsab.h -F: drivers/tty/serial/sunsu.c -F: drivers/tty/serial/sunzilog.c -F: drivers/tty/serial/sunzilog.h - -SPARSE CHECKER -M: "Christopher Li" -L: linux-sparse@vger.kernel.org -W: https://sparse.wiki.kernel.org/ -T: git git://git.kernel.org/pub/scm/devel/sparse/sparse.git -T: git git://git.kernel.org/pub/scm/devel/sparse/chrisl/sparse.git -S: Maintained -F: include/linux/compiler.h - -SPEAR PLATFORM SUPPORT -M: Viresh Kumar -L: spear-devel@list.st.com -L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) -W: http://www.st.com/spear -S: Maintained -F: arch/arm/plat-spear/ - -SPEAR3XX MACHINE SUPPORT -M: Viresh Kumar -L: spear-devel@list.st.com -L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) -W: http://www.st.com/spear -S: Maintained -F: arch/arm/mach-spear3xx/ - -SPEAR6XX MACHINE SUPPORT -M: Rajeev Kumar -L: spear-devel@list.st.com -L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) -W: http://www.st.com/spear -S: Maintained -F: arch/arm/mach-spear6xx/ - -SPEAR CLOCK FRAMEWORK SUPPORT -M: Viresh Kumar -L: spear-devel@list.st.com -L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) -W: http://www.st.com/spear -S: Maintained -F: arch/arm/mach-spear*/clock.c -F: arch/arm/plat-spear/clock.c -F: arch/arm/plat-spear/include/plat/clock.h - -SPEAR PAD MULTIPLEXING SUPPORT -M: Viresh Kumar -L: spear-devel@list.st.com -L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) -W: http://www.st.com/spear -S: Maintained -F: arch/arm/plat-spear/include/plat/padmux.h -F: arch/arm/plat-spear/padmux.c -F: arch/arm/mach-spear*/spear*xx.c -F: arch/arm/mach-spear*/include/mach/generic.h -F: arch/arm/mach-spear3xx/spear3*0.c -F: arch/arm/mach-spear3xx/spear3*0_evb.c -F: arch/arm/mach-spear6xx/spear600.c -F: arch/arm/mach-spear6xx/spear600_evb.c - -SPI SUBSYSTEM -M: Grant Likely -L: spi-devel-general@lists.sourceforge.net -Q: http://patchwork.kernel.org/project/spi-devel-general/list/ -T: git git://git.secretlab.ca/git/linux-2.6.git -S: Maintained -F: Documentation/spi/ -F: drivers/spi/ -F: include/linux/spi/ - -SPIDERNET NETWORK DRIVER for CELL -M: Ishizaki Kou -M: Jens Osterkamp -L: netdev@vger.kernel.org -S: Supported -F: Documentation/networking/spider_net.txt -F: drivers/net/ethernet/toshiba/spider_net* - -SPU FILE SYSTEM -M: Jeremy Kerr -L: linuxppc-dev@lists.ozlabs.org -L: cbe-oss-dev@lists.ozlabs.org -W: http://www.ibm.com/developerworks/power/cell/ -S: Supported -F: Documentation/filesystems/spufs.txt -F: arch/powerpc/platforms/cell/spufs/ - -SQUASHFS FILE SYSTEM -M: Phillip Lougher -L: squashfs-devel@lists.sourceforge.net (subscribers-only) -W: http://squashfs.org.uk -S: Maintained -F: Documentation/filesystems/squashfs.txt -F: fs/squashfs/ - -SRM (Alpha) environment access -M: Jan-Benedict Glaw -S: Maintained -F: arch/alpha/kernel/srm_env.c - -STABLE BRANCH -M: Greg Kroah-Hartman -L: stable@vger.kernel.org -S: Supported - -STAGING SUBSYSTEM -M: Greg Kroah-Hartman -T: git git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging.git -L: devel@driverdev.osuosl.org -S: Supported -F: drivers/staging/ - -STAGING - AGERE HERMES II and II.5 WIRELESS DRIVERS -M: Henk de Groot -S: Odd Fixes -F: drivers/staging/wlags49_h2/ -F: drivers/staging/wlags49_h25/ - -STAGING - ASUS OLED -M: Jakub Schmidtke -S: Odd Fixes -F: drivers/staging/asus_oled/ - -STAGING - COMEDI -M: Ian Abbott -M: Mori Hess -S: Odd Fixes -F: drivers/staging/comedi/ - -STAGING - CRYSTAL HD VIDEO DECODER -M: Naren Sankar -M: Jarod Wilson -M: Scott Davilla -M: Manu Abraham -S: Odd Fixes -F: drivers/staging/crystalhd/ - -STAGING - ECHO CANCELLER -M: Steve Underwood -M: David Rowe -S: Odd Fixes -F: drivers/staging/echo/ - -STAGING - ET131X NETWORK DRIVER -M: Mark Einon -S: Odd Fixes -F: drivers/staging/et131x/ - -STAGING - FLARION FT1000 DRIVERS -M: Marek Belisko -S: Odd Fixes -F: drivers/staging/ft1000/ - -STAGING - FRONTIER TRANZPORT AND ALPHATRACK -M: David Täht -S: Odd Fixes -F: drivers/staging/frontier/ - -STAGING - INDUSTRIAL IO -M: Jonathan Cameron -L: linux-iio@vger.kernel.org -S: Odd Fixes -F: drivers/staging/iio/ - -STAGING - LIRC (LINUX INFRARED REMOTE CONTROL) DRIVERS -M: Jarod Wilson -W: http://www.lirc.org/ -S: Odd Fixes -F: drivers/staging/media/lirc/ - -STAGING - NVIDIA COMPLIANT EMBEDDED CONTROLLER INTERFACE (nvec) -M: Julian Andres Klode -M: Marc Dietrich -L: ac100@lists.launchpad.net (moderated for non-subscribers) -S: Maintained -F: drivers/staging/nvec/ - -STAGING - OLPC SECONDARY DISPLAY CONTROLLER (DCON) -M: Andres Salomon -M: Chris Ball -M: Jon Nettleton -W: http://wiki.laptop.org/go/DCON -S: Odd Fixes -F: drivers/staging/olpc_dcon/ - -STAGING - OZMO DEVICES USB OVER WIFI DRIVER -M: Rupesh Gujare -M: Chris Kelly -S: Maintained -F: drivers/staging/ozwpan/ - -STAGING - PARALLEL LCD/KEYPAD PANEL DRIVER -M: Willy Tarreau -S: Odd Fixes -F: drivers/staging/panel/ - -STAGING - REALTEK RTL8712U DRIVERS -M: Larry Finger -M: Florian Schilhabel . -S: Odd Fixes -F: drivers/staging/rtl8712/ - -STAGING - SILICON MOTION SM7XX FRAME BUFFER DRIVER -M: Teddy Wang -S: Odd Fixes -F: drivers/staging/sm7xx/ - -STAGING - SOFTLOGIC 6x10 MPEG CODEC -M: Ben Collins -S: Odd Fixes -F: drivers/staging/media/solo6x10/ - -STAGING - SPEAKUP CONSOLE SPEECH DRIVER -M: William Hubbs -M: Chris Brannon -M: Kirk Reiser -M: Samuel Thibault -L: speakup@braille.uwo.ca -W: http://www.linux-speakup.org/ -S: Odd Fixes -F: drivers/staging/speakup/ - -STAGING - TI DSP BRIDGE DRIVERS -M: Omar Ramirez Luna -S: Odd Fixes -F: drivers/staging/tidspbridge/ - -STAGING - USB ENE SM/MS CARD READER DRIVER -M: Al Cho -S: Odd Fixes -F: drivers/staging/keucr/ - -STAGING - VIA VT665X DRIVERS -M: Forest Bond -S: Odd Fixes -F: drivers/staging/vt665?/ - -STAGING - WINBOND IS89C35 WLAN USB DRIVER -M: Pavel Machek -S: Odd Fixes -F: drivers/staging/winbond/ - -STAGING - XGI Z7,Z9,Z11 PCI DISPLAY DRIVER -M: Arnaud Patard -S: Odd Fixes -F: drivers/staging/xgifb/ - -STARFIRE/DURALAN NETWORK DRIVER -M: Ion Badulescu -S: Odd Fixes -F: drivers/net/ethernet/adaptec/starfire* - -SUN3/3X -M: Sam Creasey -W: http://sammy.net/sun3/ -S: Maintained -F: arch/m68k/kernel/*sun3* -F: arch/m68k/sun3*/ -F: arch/m68k/include/asm/sun3* -F: drivers/net/ethernet/i825xx/sun3* - -SUPERH -M: Paul Mundt -L: linux-sh@vger.kernel.org -W: http://www.linux-sh.org -Q: http://patchwork.kernel.org/project/linux-sh/list/ -T: git git://git.kernel.org/pub/scm/linux/kernel/git/lethal/sh-2.6.git sh-latest -S: Supported -F: Documentation/sh/ -F: arch/sh/ -F: drivers/sh/ - -SUSPEND TO RAM -M: Len Brown -M: Pavel Machek -M: "Rafael J. Wysocki" -L: linux-pm@vger.kernel.org -S: Supported -F: Documentation/power/ -F: arch/x86/kernel/acpi/ -F: drivers/base/power/ -F: kernel/power/ -F: include/linux/suspend.h -F: include/linux/freezer.h -F: include/linux/pm.h - -SVGA HANDLING -M: Martin Mares -L: linux-video@atrey.karlin.mff.cuni.cz -S: Maintained -F: Documentation/svga.txt -F: arch/x86/boot/video* - -SYSV FILESYSTEM -M: Christoph Hellwig -S: Maintained -F: Documentation/filesystems/sysv-fs.txt -F: fs/sysv/ -F: include/linux/sysv_fs.h - -TARGET SUBSYSTEM -M: Nicholas A. Bellinger -L: linux-scsi@vger.kernel.org -L: target-devel@vger.kernel.org -L: http://groups.google.com/group/linux-iscsi-target-dev -W: http://www.linux-iscsi.org -T: git git://git.kernel.org/pub/scm/linux/kernel/git/nab/lio-core.git master -S: Supported -F: drivers/target/ -F: include/target/ -F: Documentation/target/ - -TASKSTATS STATISTICS INTERFACE -M: Balbir Singh -S: Maintained -F: Documentation/accounting/taskstats* -F: include/linux/taskstats* -F: kernel/taskstats.c - -TC CLASSIFIER -M: Jamal Hadi Salim -L: netdev@vger.kernel.org -S: Maintained -F: include/linux/pkt_cls.h -F: include/net/pkt_cls.h -F: net/sched/ - -TCP LOW PRIORITY MODULE -M: "Wong Hoi Sing, Edison" -M: "Hung Hing Lun, Mike" -W: http://tcp-lp-mod.sourceforge.net/ -S: Maintained -F: net/ipv4/tcp_lp.c - -TEAM DRIVER -M: Jiri Pirko -L: netdev@vger.kernel.org -S: Supported -F: drivers/net/team/ -F: include/linux/if_team.h - -TEGRA SUPPORT -M: Colin Cross -M: Olof Johansson -M: Stephen Warren -L: linux-tegra@vger.kernel.org -Q: http://patchwork.ozlabs.org/project/linux-tegra/list/ -T: git git://git.kernel.org/pub/scm/linux/kernel/git/swarren/linux-tegra.git -S: Supported -F: arch/arm/mach-tegra - -TEHUTI ETHERNET DRIVER -M: Andy Gospodarek -L: netdev@vger.kernel.org -S: Supported -F: drivers/net/ethernet/tehuti/* - -Telecom Clock Driver for MCPL0010 -M: Mark Gross -S: Supported -F: drivers/char/tlclk.c - -TENSILICA XTENSA PORT (xtensa) -M: Chris Zankel -S: Maintained -F: arch/xtensa/ - -THINKPAD ACPI EXTRAS DRIVER -M: Henrique de Moraes Holschuh -L: ibm-acpi-devel@lists.sourceforge.net -L: platform-driver-x86@vger.kernel.org -W: http://ibm-acpi.sourceforge.net -W: http://thinkwiki.org/wiki/Ibm-acpi -T: git git://repo.or.cz/linux-2.6/linux-acpi-2.6/ibm-acpi-2.6.git -S: Maintained -F: drivers/platform/x86/thinkpad_acpi.c - -TI FLASH MEDIA INTERFACE DRIVER -M: Alex Dubov -S: Maintained -F: drivers/misc/tifm* -F: drivers/mmc/host/tifm_sd.c -F: include/linux/tifm.h - -TI TWL4030 SERIES SOC CODEC DRIVER -M: Peter Ujfalusi -L: alsa-devel@alsa-project.org (moderated for non-subscribers) -S: Maintained -F: sound/soc/codecs/twl4030* - -TIPC NETWORK LAYER -M: Jon Maloy -M: Allan Stephens -L: netdev@vger.kernel.org (core kernel code) -L: tipc-discussion@lists.sourceforge.net (user apps, general discussion) -W: http://tipc.sourceforge.net/ -S: Maintained -F: include/linux/tipc*.h -F: net/tipc/ - -TILE ARCHITECTURE -M: Chris Metcalf -W: http://www.tilera.com/scm/ -S: Supported -F: arch/tile/ -F: drivers/tty/hvc/hvc_tile.c -F: drivers/net/ethernet/tile/ -F: drivers/edac/tile_edac.c - -TLAN NETWORK DRIVER -M: Samuel Chessman -L: tlan-devel@lists.sourceforge.net (subscribers-only) -W: http://sourceforge.net/projects/tlan/ -S: Maintained -F: Documentation/networking/tlan.txt -F: drivers/net/ethernet/ti/tlan.* - -TOMOYO SECURITY MODULE -M: Kentaro Takeda -M: Tetsuo Handa -L: tomoyo-dev-en@lists.sourceforge.jp (subscribers-only, for developers in English) -L: tomoyo-users-en@lists.sourceforge.jp (subscribers-only, for users in English) -L: tomoyo-dev@lists.sourceforge.jp (subscribers-only, for developers in Japanese) -L: tomoyo-users@lists.sourceforge.jp (subscribers-only, for users in Japanese) -W: http://tomoyo.sourceforge.jp/ -T: quilt http://svn.sourceforge.jp/svnroot/tomoyo/trunk/2.5.x/tomoyo-lsm/patches/ -S: Maintained -F: security/tomoyo/ - -TOPSTAR LAPTOP EXTRAS DRIVER -M: Herton Ronaldo Krzesinski -L: platform-driver-x86@vger.kernel.org -S: Maintained -F: drivers/platform/x86/topstar-laptop.c - -TOSHIBA ACPI EXTRAS DRIVER -L: platform-driver-x86@vger.kernel.org -S: Orphan -F: drivers/platform/x86/toshiba_acpi.c - -TOSHIBA SMM DRIVER -M: Jonathan Buzzard -L: tlinux-users@tce.toshiba-dme.co.jp -W: http://www.buzzard.org.uk/toshiba/ -S: Maintained -F: drivers/char/toshiba.c -F: include/linux/toshiba.h - -TMIO MMC DRIVER -M: Guennadi Liakhovetski -M: Ian Molton -L: linux-mmc@vger.kernel.org -S: Maintained -F: drivers/mmc/host/tmio_mmc* -F: drivers/mmc/host/sh_mobile_sdhi.c -F: include/linux/mmc/tmio.h -F: include/linux/mmc/sh_mobile_sdhi.h - -TMPFS (SHMEM FILESYSTEM) -M: Hugh Dickins -L: linux-mm@kvack.org -S: Maintained -F: include/linux/shmem_fs.h -F: mm/shmem.c - -TPM DEVICE DRIVER -M: Debora Velarde -M: Rajiv Andrade -W: http://tpmdd.sourceforge.net -M: Marcel Selhorst -W: http://www.sirrix.com -L: tpmdd-devel@lists.sourceforge.net (moderated for non-subscribers) -S: Maintained -F: drivers/char/tpm/ - -TRACING -M: Steven Rostedt -M: Frederic Weisbecker -M: Ingo Molnar -T: git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git perf/core -S: Maintained -F: Documentation/trace/ftrace.txt -F: arch/*/*/*/ftrace.h -F: arch/*/kernel/ftrace.c -F: include/*/ftrace.h -F: include/linux/trace*.h -F: include/trace/ -F: kernel/trace/ - -TRIVIAL PATCHES -M: Jiri Kosina -T: git git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial.git -S: Maintained -K: ^Subject:.*(?i)trivial - -TTY LAYER -M: Greg Kroah-Hartman -S: Supported -T: git git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty.git -F: drivers/tty/ -F: drivers/tty/serial/serial_core.c -F: include/linux/serial_core.h -F: include/linux/serial.h -F: include/linux/tty.h - -TULIP NETWORK DRIVERS -M: Grant Grundler -L: netdev@vger.kernel.org -S: Maintained -F: drivers/net/ethernet/dec/tulip/ - -TUN/TAP driver -M: Maxim Krasnyansky -L: vtun@office.satix.net -W: http://vtun.sourceforge.net/tun -S: Maintained -F: Documentation/networking/tuntap.txt -F: arch/um/os-Linux/drivers/ - -TURBOCHANNEL SUBSYSTEM -M: "Maciej W. Rozycki" -S: Maintained -F: drivers/tc/ -F: include/linux/tc.h - -U14-34F SCSI DRIVER -M: Dario Ballabio -L: linux-scsi@vger.kernel.org -S: Maintained -F: drivers/scsi/u14-34f.c - -UBI FILE SYSTEM (UBIFS) -M: Artem Bityutskiy -M: Adrian Hunter -L: linux-mtd@lists.infradead.org -T: git git://git.infradead.org/ubifs-2.6.git -W: http://www.linux-mtd.infradead.org/doc/ubifs.html -S: Maintained -F: Documentation/filesystems/ubifs.txt -F: fs/ubifs/ - -UCLINUX (AND M68KNOMMU) -M: Greg Ungerer -W: http://www.uclinux.org/ -L: uclinux-dev@uclinux.org (subscribers-only) -S: Maintained -F: arch/m68k/*/*_no.* -F: arch/m68k/include/asm/*_no.* - -UCLINUX FOR RENESAS H8/300 (H8300) -M: Yoshinori Sato -W: http://uclinux-h8.sourceforge.jp/ -S: Supported -F: arch/h8300/ -F: drivers/ide/ide-h8300.c -F: drivers/net/ethernet/8390/ne-h8300.c - -UDF FILESYSTEM -M: Jan Kara -S: Maintained -F: Documentation/filesystems/udf.txt -F: fs/udf/ - -UFS FILESYSTEM -M: Evgeniy Dushistov -S: Maintained -F: Documentation/filesystems/ufs.txt -F: fs/ufs/ - -ULTRA-WIDEBAND (UWB) SUBSYSTEM: -L: linux-usb@vger.kernel.org -S: Orphan -F: drivers/uwb/ -F: include/linux/uwb.h -F: include/linux/uwb/ - -UNICORE32 ARCHITECTURE: -M: Guan Xuetao -W: http://mprc.pku.edu.cn/~guanxuetao/linux -S: Maintained -T: git git://git.kernel.org/pub/scm/linux/kernel/git/epip/linux-2.6-unicore32.git -F: arch/unicore32/ - -UNIFDEF -M: Tony Finch -W: http://dotat.at/prog/unifdef -S: Maintained -F: scripts/unifdef.c - -UNIFORM CDROM DRIVER -M: Jens Axboe -W: http://www.kernel.dk -S: Maintained -F: Documentation/cdrom/ -F: drivers/cdrom/cdrom.c -F: include/linux/cdrom.h - -UNSORTED BLOCK IMAGES (UBI) -M: Artem Bityutskiy -W: http://www.linux-mtd.infradead.org/ -L: linux-mtd@lists.infradead.org -T: git git://git.infradead.org/ubi-2.6.git -S: Maintained -F: drivers/mtd/ubi/ -F: include/linux/mtd/ubi.h -F: include/mtd/ubi-user.h - -USB ACM DRIVER -M: Oliver Neukum -L: linux-usb@vger.kernel.org -S: Maintained -F: Documentation/usb/acm.txt -F: drivers/usb/class/cdc-acm.* - -USB ATTACHED SCSI -M: Matthew Wilcox -M: Sarah Sharp -L: linux-usb@vger.kernel.org -L: linux-scsi@vger.kernel.org -S: Supported -F: drivers/usb/storage/uas.c - -USB BLOCK DRIVER (UB ub) -M: Pete Zaitcev -L: linux-usb@vger.kernel.org -S: Supported -F: drivers/block/ub.c - -USB CDC ETHERNET DRIVER -M: Oliver Neukum -L: linux-usb@vger.kernel.org -S: Maintained -F: drivers/net/usb/cdc_*.c -F: include/linux/usb/cdc.h - -USB CYPRESS C67X00 DRIVER -M: Peter Korsgaard -L: linux-usb@vger.kernel.org -S: Maintained -F: drivers/usb/c67x00/ - -USB DAVICOM DM9601 DRIVER -M: Peter Korsgaard -L: netdev@vger.kernel.org -W: http://www.linux-usb.org/usbnet -S: Maintained -F: drivers/net/usb/dm9601.c - -USB DIAMOND RIO500 DRIVER -M: Cesar Miquel -L: rio500-users@lists.sourceforge.net -W: http://rio500.sourceforge.net -S: Maintained -F: drivers/usb/misc/rio500* - -USB EHCI DRIVER -M: Alan Stern -L: linux-usb@vger.kernel.org -S: Maintained -F: Documentation/usb/ehci.txt -F: drivers/usb/host/ehci* - -USB ET61X[12]51 DRIVER -M: Luca Risolia -L: linux-usb@vger.kernel.org -L: linux-media@vger.kernel.org -T: git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media.git -W: http://www.linux-projects.org -S: Maintained -F: drivers/media/video/et61x251/ - -USB GADGET/PERIPHERAL SUBSYSTEM -M: Felipe Balbi -L: linux-usb@vger.kernel.org -W: http://www.linux-usb.org/gadget -T: git git://git.kernel.org/pub/scm/linux/kernel/git/balbi/usb.git -S: Maintained -F: drivers/usb/gadget/ -F: include/linux/usb/gadget* - -USB HID/HIDBP DRIVERS (USB KEYBOARDS, MICE, REMOTE CONTROLS, ...) -M: Jiri Kosina -L: linux-usb@vger.kernel.org -T: git git://git.kernel.org/pub/scm/linux/kernel/git/jikos/hid.git -S: Maintained -F: Documentation/hid/hiddev.txt -F: drivers/hid/usbhid/ - -USB/IP DRIVERS -M: Matt Mooney -L: linux-usb@vger.kernel.org -S: Maintained -F: drivers/staging/usbip/ - -USB ISP116X DRIVER -M: Olav Kongas -L: linux-usb@vger.kernel.org -S: Maintained -F: drivers/usb/host/isp116x* -F: include/linux/usb/isp116x.h - -USB KAWASAKI LSI DRIVER -M: Oliver Neukum -L: linux-usb@vger.kernel.org -S: Maintained -F: drivers/usb/serial/kl5kusb105.* - -USB MASS STORAGE DRIVER -M: Matthew Dharm -L: linux-usb@vger.kernel.org -L: usb-storage@lists.one-eyed-alien.net -S: Maintained -W: http://www.one-eyed-alien.net/~mdharm/linux-usb/ -F: drivers/usb/storage/ - -USB MIDI DRIVER -M: Clemens Ladisch -L: alsa-devel@alsa-project.org (moderated for non-subscribers) -T: git git://git.alsa-project.org/alsa-kernel.git -S: Maintained -F: sound/usb/midi.* - -USB OHCI DRIVER -M: Alan Stern -L: linux-usb@vger.kernel.org -S: Maintained -F: Documentation/usb/ohci.txt -F: drivers/usb/host/ohci* - -USB OPTION-CARD DRIVER -M: Matthias Urlichs -L: linux-usb@vger.kernel.org -S: Maintained -F: drivers/usb/serial/option.c - -USB PEGASUS DRIVER -M: Petko Manolov -L: linux-usb@vger.kernel.org -L: netdev@vger.kernel.org -W: http://pegasus2.sourceforge.net/ -S: Maintained -F: drivers/net/usb/pegasus.* - -USB PRINTER DRIVER (usblp) -M: Pete Zaitcev -L: linux-usb@vger.kernel.org -S: Supported -F: drivers/usb/class/usblp.c - -USB RTL8150 DRIVER -M: Petko Manolov -L: linux-usb@vger.kernel.org -L: netdev@vger.kernel.org -W: http://pegasus2.sourceforge.net/ -S: Maintained -F: drivers/net/usb/rtl8150.c - -USB SERIAL BELKIN F5U103 DRIVER -M: William Greathouse -L: linux-usb@vger.kernel.org -S: Maintained -F: drivers/usb/serial/belkin_sa.* - -USB SERIAL CYPRESS M8 DRIVER -M: Lonnie Mendez -L: linux-usb@vger.kernel.org -S: Maintained -W: http://geocities.com/i0xox0i -W: http://firstlight.net/cvs -F: drivers/usb/serial/cypress_m8.* - -USB SERIAL CYBERJACK DRIVER -M: Matthias Bruestle and Harald Welte -W: http://www.reiner-sct.de/support/treiber_cyberjack.php -S: Maintained -F: drivers/usb/serial/cyberjack.c - -USB SERIAL DIGI ACCELEPORT DRIVER -M: Peter Berger -M: Al Borchers -L: linux-usb@vger.kernel.org -S: Maintained -F: drivers/usb/serial/digi_acceleport.c - -USB SERIAL DRIVER -M: Greg Kroah-Hartman -L: linux-usb@vger.kernel.org -S: Supported -F: Documentation/usb/usb-serial.txt -F: drivers/usb/serial/generic.c -F: drivers/usb/serial/usb-serial.c -F: include/linux/usb/serial.h - -USB SERIAL EMPEG EMPEG-CAR MARK I/II DRIVER -M: Gary Brubaker -L: linux-usb@vger.kernel.org -S: Maintained -F: drivers/usb/serial/empeg.c - -USB SERIAL KEYSPAN DRIVER -M: Greg Kroah-Hartman -L: linux-usb@vger.kernel.org -S: Maintained -F: drivers/usb/serial/*keyspan* - -USB SERIAL WHITEHEAT DRIVER -M: Support Department -L: linux-usb@vger.kernel.org -W: http://www.connecttech.com -S: Supported -F: drivers/usb/serial/whiteheat* - -USB SMSC95XX ETHERNET DRIVER -M: Steve Glendinning -L: netdev@vger.kernel.org -S: Supported -F: drivers/net/usb/smsc95xx.* - -USB SN9C1xx DRIVER -M: Luca Risolia -L: linux-usb@vger.kernel.org -L: linux-media@vger.kernel.org -T: git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media.git -W: http://www.linux-projects.org -S: Maintained -F: Documentation/video4linux/sn9c102.txt -F: drivers/media/video/sn9c102/ - -USB SUBSYSTEM -M: Greg Kroah-Hartman -L: linux-usb@vger.kernel.org -W: http://www.linux-usb.org -T: git git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb.git -S: Supported -F: Documentation/usb/ -F: drivers/net/usb/ -F: drivers/usb/ -F: include/linux/usb.h -F: include/linux/usb/ - -USB UHCI DRIVER -M: Alan Stern -L: linux-usb@vger.kernel.org -S: Maintained -F: drivers/usb/host/uhci* - -USB "USBNET" DRIVER FRAMEWORK -M: Oliver Neukum -L: netdev@vger.kernel.org -W: http://www.linux-usb.org/usbnet -S: Maintained -F: drivers/net/usb/usbnet.c -F: include/linux/usb/usbnet.h - -USB VIDEO CLASS -M: Laurent Pinchart -L: linux-uvc-devel@lists.berlios.de (subscribers-only) -L: linux-media@vger.kernel.org -T: git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media.git -W: http://www.ideasonboard.org/uvc/ -S: Maintained -F: drivers/media/video/uvc/ - -USB W996[87]CF DRIVER -M: Luca Risolia -L: linux-usb@vger.kernel.org -L: linux-media@vger.kernel.org -T: git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media.git -W: http://www.linux-projects.org -S: Maintained -F: Documentation/video4linux/w9968cf.txt -F: drivers/media/video/w996* - -USB WIRELESS RNDIS DRIVER (rndis_wlan) -M: Jussi Kivilinna -L: linux-wireless@vger.kernel.org -S: Maintained -F: drivers/net/wireless/rndis_wlan.c - -USB XHCI DRIVER -M: Sarah Sharp -L: linux-usb@vger.kernel.org -S: Supported -F: drivers/usb/host/xhci* -F: drivers/usb/host/pci-quirks* - -USB ZD1201 DRIVER -L: linux-wireless@vger.kernel.org -W: http://linux-lc100020.sourceforge.net -S: Orphan -F: drivers/net/wireless/zd1201.* - -USB ZR364XX DRIVER -M: Antoine Jacquet -L: linux-usb@vger.kernel.org -L: linux-media@vger.kernel.org -T: git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media.git -W: http://royale.zerezo.com/zr364xx/ -S: Maintained -F: Documentation/video4linux/zr364xx.txt -F: drivers/media/video/zr364xx.c - -USER-MODE LINUX (UML) -M: Jeff Dike -M: Richard Weinberger -L: user-mode-linux-devel@lists.sourceforge.net -L: user-mode-linux-user@lists.sourceforge.net -W: http://user-mode-linux.sourceforge.net -S: Maintained -F: Documentation/virtual/uml/ -F: arch/um/ -F: fs/hostfs/ -F: fs/hppfs/ - -USERSPACE I/O (UIO) -M: "Hans J. Koch" -M: Greg Kroah-Hartman -S: Maintained -F: Documentation/DocBook/uio-howto.tmpl -F: drivers/uio/ -F: include/linux/uio*.h - -UTIL-LINUX-NG PACKAGE -M: Karel Zak -L: util-linux-ng@vger.kernel.org -W: http://kernel.org/~kzak/util-linux-ng/ -T: git git://git.kernel.org/pub/scm/utils/util-linux-ng/util-linux-ng.git -S: Maintained - -UVESAFB DRIVER -M: Michal Januszewski -L: linux-fbdev@vger.kernel.org -W: http://dev.gentoo.org/~spock/projects/uvesafb/ -S: Maintained -F: Documentation/fb/uvesafb.txt -F: drivers/video/uvesafb.* - -VFAT/FAT/MSDOS FILESYSTEM -M: OGAWA Hirofumi -S: Maintained -F: Documentation/filesystems/vfat.txt -F: fs/fat/ - -VIDEOBUF2 FRAMEWORK -M: Pawel Osciak -M: Marek Szyprowski -M: Kyungmin Park -L: linux-media@vger.kernel.org -S: Maintained -F: drivers/media/video/videobuf2-* -F: include/media/videobuf2-* - -VIRTIO CONSOLE DRIVER -M: Amit Shah -L: virtualization@lists.linux-foundation.org -S: Maintained -F: drivers/char/virtio_console.c -F: include/linux/virtio_console.h - -VIRTIO CORE, NET AND BLOCK DRIVERS -M: Rusty Russell -M: "Michael S. Tsirkin" -L: virtualization@lists.linux-foundation.org -S: Maintained -F: drivers/virtio/ -F: drivers/net/virtio_net.c -F: drivers/block/virtio_blk.c -F: include/linux/virtio_*.h - -VIRTIO HOST (VHOST) -M: "Michael S. Tsirkin" -L: kvm@vger.kernel.org -L: virtualization@lists.linux-foundation.org -L: netdev@vger.kernel.org -S: Maintained -F: drivers/vhost/ -F: include/linux/vhost.h - -VIA RHINE NETWORK DRIVER -M: Roger Luethi -S: Maintained -F: drivers/net/ethernet/via/via-rhine.c - -VIAPRO SMBUS DRIVER -M: Jean Delvare -L: linux-i2c@vger.kernel.org -S: Maintained -F: Documentation/i2c/busses/i2c-viapro -F: drivers/i2c/busses/i2c-viapro.c - -VIA SD/MMC CARD CONTROLLER DRIVER -M: Bruce Chang -M: Harald Welte -S: Maintained -F: drivers/mmc/host/via-sdmmc.c - -VIA UNICHROME(PRO)/CHROME9 FRAMEBUFFER DRIVER -M: Florian Tobias Schandinat -L: linux-fbdev@vger.kernel.org -S: Maintained -F: include/linux/via-core.h -F: include/linux/via-gpio.h -F: include/linux/via_i2c.h -F: drivers/video/via/ - -VIA VELOCITY NETWORK DRIVER -M: Francois Romieu -L: netdev@vger.kernel.org -S: Maintained -F: drivers/net/ethernet/via/via-velocity.* - -VLAN (802.1Q) -M: Patrick McHardy -L: netdev@vger.kernel.org -S: Maintained -F: drivers/net/macvlan.c -F: include/linux/if_*vlan.h -F: net/8021q/ - -VLYNQ BUS -M: Florian Fainelli -L: openwrt-devel@lists.openwrt.org (subscribers-only) -S: Maintained -F: drivers/vlynq/vlynq.c -F: include/linux/vlynq.h - -VMWARE VMXNET3 ETHERNET DRIVER -M: Shreyas Bhatewara -M: "VMware, Inc." -L: netdev@vger.kernel.org -S: Maintained -F: drivers/net/vmxnet3/ - -VMware PVSCSI driver -M: Arvind Kumar -M: VMware PV-Drivers -L: linux-scsi@vger.kernel.org -S: Maintained -F: drivers/scsi/vmw_pvscsi.c -F: drivers/scsi/vmw_pvscsi.h - -VOLTAGE AND CURRENT REGULATOR FRAMEWORK -M: Liam Girdwood -M: Mark Brown -W: http://opensource.wolfsonmicro.com/node/15 -W: http://www.slimlogic.co.uk/?p=48 -T: git git://git.kernel.org/pub/scm/linux/kernel/git/lrg/regulator.git -S: Supported -F: drivers/regulator/ -F: include/linux/regulator/ - -VT1211 HARDWARE MONITOR DRIVER -M: Juerg Haefliger -L: lm-sensors@lm-sensors.org -S: Maintained -F: Documentation/hwmon/vt1211 -F: drivers/hwmon/vt1211.c - -VT8231 HARDWARE MONITOR DRIVER -M: Roger Lucas -L: lm-sensors@lm-sensors.org -S: Maintained -F: drivers/hwmon/vt8231.c - -VUB300 USB to SDIO/SD/MMC bridge chip -M: Tony Olech -L: linux-mmc@vger.kernel.org -L: linux-usb@vger.kernel.org -S: Supported -F: drivers/mmc/host/vub300.c - -W1 DALLAS'S 1-WIRE BUS -M: Evgeniy Polyakov -S: Maintained -F: Documentation/w1/ -F: drivers/w1/ - -W83791D HARDWARE MONITORING DRIVER -M: Marc Hulsman -L: lm-sensors@lm-sensors.org -S: Maintained -F: Documentation/hwmon/w83791d -F: drivers/hwmon/w83791d.c - -W83793 HARDWARE MONITORING DRIVER -M: Rudolf Marek -L: lm-sensors@lm-sensors.org -S: Maintained -F: Documentation/hwmon/w83793 -F: drivers/hwmon/w83793.c - -W83795 HARDWARE MONITORING DRIVER -M: Jean Delvare -L: lm-sensors@lm-sensors.org -S: Maintained -F: drivers/hwmon/w83795.c - -W83L51xD SD/MMC CARD INTERFACE DRIVER -M: Pierre Ossman -S: Maintained -F: drivers/mmc/host/wbsd.* - -WATCHDOG DEVICE DRIVERS -M: Wim Van Sebroeck -L: linux-watchdog@vger.kernel.org -W: http://www.linux-watchdog.org/ -T: git git://www.linux-watchdog.org/linux-watchdog.git -S: Maintained -F: Documentation/watchdog/ -F: drivers/watchdog/ -F: include/linux/watchdog.h - -WD7000 SCSI DRIVER -M: Miroslav Zagorac -L: linux-scsi@vger.kernel.org -S: Maintained -F: drivers/scsi/wd7000.c - -WIIMOTE HID DRIVER -M: David Herrmann -L: linux-input@vger.kernel.org -S: Maintained -F: drivers/hid/hid-wiimote* - -WINBOND CIR DRIVER -M: David Härdeman -S: Maintained -F: drivers/media/rc/winbond-cir.c - -WIMAX STACK -M: Inaky Perez-Gonzalez -M: linux-wimax@intel.com -L: wimax@linuxwimax.org -S: Supported -W: http://linuxwimax.org -F: Documentation/wimax/README.wimax -F: include/linux/wimax.h -F: include/linux/wimax/debug.h -F: include/net/wimax.h -F: net/wimax/ - -WISTRON LAPTOP BUTTON DRIVER -M: Miloslav Trmac -S: Maintained -F: drivers/input/misc/wistron_btns.c - -WL1251 WIRELESS DRIVER -M: Luciano Coelho -L: linux-wireless@vger.kernel.org -W: http://wireless.kernel.org/en/users/Drivers/wl1251 -T: git git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-testing.git -S: Maintained -F: drivers/net/wireless/wl1251/* - -WL1271 WIRELESS DRIVER -M: Luciano Coelho -L: linux-wireless@vger.kernel.org -W: http://wireless.kernel.org/en/users/Drivers/wl12xx -T: git git://git.kernel.org/pub/scm/linux/kernel/git/luca/wl12xx.git -S: Maintained -F: drivers/net/wireless/wl12xx/ -F: include/linux/wl12xx.h - -WL3501 WIRELESS PCMCIA CARD DRIVER -M: Arnaldo Carvalho de Melo -L: linux-wireless@vger.kernel.org -W: http://oops.ghostprotocols.net:81/blog -S: Maintained -F: drivers/net/wireless/wl3501* - -WM97XX TOUCHSCREEN DRIVERS -M: Mark Brown -M: Liam Girdwood -L: linux-input@vger.kernel.org -T: git git://opensource.wolfsonmicro.com/linux-2.6-touch -W: http://opensource.wolfsonmicro.com/node/7 -S: Supported -F: drivers/input/touchscreen/*wm97* -F: include/linux/wm97xx.h - -WOLFSON MICROELECTRONICS DRIVERS -M: Mark Brown -L: patches@opensource.wolfsonmicro.com -T: git git://opensource.wolfsonmicro.com/linux-2.6-asoc -T: git git://opensource.wolfsonmicro.com/linux-2.6-audioplus -W: http://opensource.wolfsonmicro.com/content/linux-drivers-wolfson-devices -S: Supported -F: Documentation/hwmon/wm83?? -F: arch/arm/mach-s3c64xx/mach-crag6410* -F: drivers/leds/leds-wm83*.c -F: drivers/hwmon/wm83??-hwmon.c -F: drivers/input/misc/wm831x-on.c -F: drivers/input/touchscreen/wm831x-ts.c -F: drivers/input/touchscreen/wm97*.c -F: drivers/mfd/wm8*.c -F: drivers/power/wm83*.c -F: drivers/rtc/rtc-wm83*.c -F: drivers/regulator/wm8*.c -F: drivers/video/backlight/wm83*_bl.c -F: drivers/watchdog/wm83*_wdt.c -F: include/linux/mfd/wm831x/ -F: include/linux/mfd/wm8350/ -F: include/linux/mfd/wm8400* -F: include/linux/wm97xx.h -F: include/sound/wm????.h -F: sound/soc/codecs/wm* - -WORKQUEUE -M: Tejun Heo -T: git git://git.kernel.org/pub/scm/linux/kernel/git/tj/wq.git -S: Maintained -F: include/linux/workqueue.h -F: kernel/workqueue.c -F: Documentation/workqueue.txt - -X.25 NETWORK LAYER -M: Andrew Hendry -L: linux-x25@vger.kernel.org -S: Odd Fixes -F: Documentation/networking/x25* -F: include/net/x25* -F: net/x25/ - -X86 ARCHITECTURE (32-BIT AND 64-BIT) -M: Thomas Gleixner -M: Ingo Molnar -M: "H. Peter Anvin" -M: x86@kernel.org -T: git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git x86/core -S: Maintained -F: Documentation/x86/ -F: arch/x86/ - -X86 PLATFORM DRIVERS -M: Matthew Garrett -L: platform-driver-x86@vger.kernel.org -T: git git://git.kernel.org/pub/scm/linux/kernel/git/mjg59/platform-drivers-x86.git -S: Maintained -F: drivers/platform/x86 - -X86 MCE INFRASTRUCTURE -M: Tony Luck -M: Borislav Petkov -L: linux-edac@vger.kernel.org -S: Maintained -F: arch/x86/kernel/cpu/mcheck/* - -XEN HYPERVISOR INTERFACE -M: Konrad Rzeszutek Wilk -M: Jeremy Fitzhardinge -L: xen-devel@lists.xensource.com (moderated for non-subscribers) -L: virtualization@lists.linux-foundation.org -S: Supported -F: arch/x86/xen/ -F: drivers/*/xen-*front.c -F: drivers/xen/ -F: arch/x86/include/asm/xen/ -F: include/xen/ - -XEN NETWORK BACKEND DRIVER -M: Ian Campbell -L: xen-devel@lists.xensource.com (moderated for non-subscribers) -L: netdev@vger.kernel.org -S: Supported -F: drivers/net/xen-netback/* - -XEN PCI SUBSYSTEM -M: Konrad Rzeszutek Wilk -L: xen-devel@lists.xensource.com (moderated for non-subscribers) -S: Supported -F: arch/x86/pci/*xen* -F: drivers/pci/*xen* - -XEN SWIOTLB SUBSYSTEM -M: Konrad Rzeszutek Wilk -L: xen-devel@lists.xensource.com (moderated for non-subscribers) -S: Supported -F: arch/x86/xen/*swiotlb* -F: drivers/xen/*swiotlb* - -XFS FILESYSTEM -P: Silicon Graphics Inc -M: Ben Myers -M: Alex Elder -M: xfs-masters@oss.sgi.com -L: xfs@oss.sgi.com -W: http://oss.sgi.com/projects/xfs -T: git git://oss.sgi.com/xfs/xfs.git -S: Supported -F: Documentation/filesystems/xfs.txt -F: fs/xfs/ - -XILINX AXI ETHERNET DRIVER -M: Ariane Keller -M: Daniel Borkmann -S: Maintained -F: drivers/net/ethernet/xilinx/xilinx_axienet* - -XILINX SYSTEMACE DRIVER -M: Grant Likely -W: http://www.secretlab.ca/ -S: Maintained -F: drivers/block/xsysace.c - -XILINX UARTLITE SERIAL DRIVER -M: Peter Korsgaard -L: linux-serial@vger.kernel.org -S: Maintained -F: drivers/tty/serial/uartlite.c - -YAM DRIVER FOR AX.25 -M: Jean-Paul Roubelat -L: linux-hams@vger.kernel.org -S: Maintained -F: drivers/net/hamradio/yam* -F: include/linux/yam.h - -YEALINK PHONE DRIVER -M: Henk Vergonet -L: usbb2k-api-dev@nongnu.org -S: Maintained -F: Documentation/input/yealink.txt -F: drivers/input/misc/yealink.* - -Z8530 DRIVER FOR AX.25 -M: Joerg Reuter -W: http://yaina.de/jreuter/ -W: http://www.qsl.net/dl1bke/ -L: linux-hams@vger.kernel.org -S: Maintained -F: Documentation/networking/z8530drv.txt -F: drivers/net/hamradio/*scc.c -F: drivers/net/hamradio/z8530.h - -ZD1211RW WIRELESS DRIVER -M: Daniel Drake -M: Ulrich Kunitz -W: http://zd1211.ath.cx/wiki/DriverRewrite -L: linux-wireless@vger.kernel.org -L: zd1211-devs@lists.sourceforge.net (subscribers-only) -S: Maintained -F: drivers/net/wireless/zd1211rw/ - -ZR36067 VIDEO FOR LINUX DRIVER -L: mjpeg-users@lists.sourceforge.net -L: linux-media@vger.kernel.org -W: http://mjpeg.sourceforge.net/driver-zoran/ -T: Mercurial http://linuxtv.org/hg/v4l-dvb -S: Odd Fixes -F: drivers/media/video/zoran/ - -ZS DECSTATION Z85C30 SERIAL DRIVER -M: "Maciej W. Rozycki" -S: Maintained -F: drivers/tty/serial/zs.* - -THE REST -M: Linus Torvalds -L: linux-kernel@vger.kernel.org -Q: http://patchwork.kernel.org/project/LKML/list/ -T: git git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git -S: Buried alive in reporters -F: * -F: */ diff --git a/openairITS/mac/DOT11/Makefile b/openairITS/mac/DOT11/Makefile deleted file mode 100644 index 647d32b819..0000000000 --- a/openairITS/mac/DOT11/Makefile +++ /dev/null @@ -1,248 +0,0 @@ -export KMODDIR?= updates -KMODDIR_ARG:= "INSTALL_MOD_DIR=$(KMODDIR)" -ifneq ($(origin KLIB), undefined) -KMODPATH_ARG:= "INSTALL_MOD_PATH=$(KLIB)" -else -export KLIB:= /lib/modules/$(shell uname -r) -endif -export KLIB_BUILD ?= $(KLIB)/build -export MAKE - -DESTDIR?= - -ifneq ($(KERNELRELEASE),) - --include $(COMPAT_CONFIG) -include $(COMPAT_CONFIG_CW) - -NOSTDINC_FLAGS := -I$(M)/include/ \ - -include $(M)/include/linux/compat-2.6.h \ - $(CFLAGS) - -obj-y := compat/ - -#obj-$(CONFIG_COMPAT_RFKILL) += net/rfkill/ - -ifeq ($(BT),) -obj-$(CONFIG_COMPAT_WIRELESS) += net/wireless/ net/mac80211/ -#obj-$(CONFIG_COMPAT_WIRELESS_MODULES) += drivers/net/wireless/ - -#obj-$(CONFIG_COMPAT_NET_USB_MODULES) += drivers/net/usb/ - -#obj-$(CONFIG_COMPAT_NETWORK_MODULES) += drivers/net/ethernet/atheros/ -#obj-$(CONFIG_COMPAT_NETWORK_MODULES) += drivers/net/ethernet/broadcom/ - -#obj-$(CONFIG_COMPAT_VAR_MODULES) += drivers/ssb/ -#obj-$(CONFIG_COMPAT_VAR_MODULES) += drivers/bcma/ -#obj-$(CONFIG_COMPAT_VAR_MODULES) += drivers/misc/eeprom/ - -ifeq ($(CONFIG_STAGING_EXCLUDE_BUILD),) -endif - -endif - -#obj-$(CONFIG_COMPAT_BLUETOOTH) += net/bluetooth/ -#obj-$(CONFIG_COMPAT_BLUETOOTH_MODULES) += drivers/bluetooth/ - -else - -export PWD := $(shell pwd) - -# The build will fail if there is any space in PWD. -ifneq (,$(findstring $() ,$(PWD))) -$(error "The path to this compat-wireless directory has spaces in it." \ - "Please put it somewhere where there is no space") -endif - -export CFLAGS += \ - -DCOMPAT_BASE_TREE="\"$(shell cat $(PWD)/compat_base_tree)\"" \ - -DCOMPAT_BASE_TREE_VERSION="\"$(shell cat $(PWD)/compat_base_tree_version)\"" \ - -DCOMPAT_PROJECT="\"Compat-wireless\"" \ - -DCOMPAT_VERSION="\"$(shell cat $(PWD)/compat_version)\"" - -# These exported as they are used by the scripts -# to check config and compat autoconf -export COMPAT_CONFIG_CW=$(PWD)/config.mk -export COMPAT_CONFIG=$(PWD)/.config -export CONFIG_CHECK=$(PWD)/.config.mk_md5sum.txt -export COMPAT_AUTOCONF=include/linux/compat_autoconf.h -export CREL=$(shell cat $(PWD)/compat_version) -export CREL_PRE:=.compat_autoconf_ -export CREL_CHECK:=$(PWD)/$(CREL_PRE)$(CREL) - -all: modules - -$(COMPAT_CONFIG): ; - -modules: $(CREL_CHECK) - $(MAKE) -C $(KLIB_BUILD) M=$(PWD) modules - @touch $@ - -bt: $(CREL_CHECK) - +@./scripts/check_config.sh - $(MAKE) -C $(KLIB_BUILD) M=$(PWD) BT=TRUE modules - @touch $@ - -# We use a CREL_CHECK variable which will depend on the environment used to -# build. If the environment requirements change it forces a reconfiguration -# check. This means we force a new reconfiguration check if a the user gets a -# new updates of compat-wireless or when the user updates the $(COMPAT_CONFIG) -# file. -# XXX: add kernel target to the CREL_CHECK mix, this would ensure we also -# reconfigure and build again fresh if we detect a new target kernel is -# being used. -$(CREL_CHECK): - @# Force to regenerate compat autoconf - +@./compat/scripts/gen-compat-config.sh > $(COMPAT_CONFIG) - @rm -f $(CONFIG_CHECK) - +@./scripts/check_config.sh - @md5sum $(COMPAT_CONFIG_CW) > $(CONFIG_CHECK) - @touch $@ - -btinstall: btuninstall bt-install-modules - -bt-install-modules: bt - $(MAKE) -C $(KLIB_BUILD) M=$(PWD) $(KMODDIR_ARG) $(KMODPATH_ARG) BT=TRUE \ - modules_install - @/sbin/depmod -ae - @echo - @echo Now run: - @echo - @echo sudo make btunload: - @echo - @echo And then load the needed bluetooth modules. If unsure reboot. - @echo - -btuninstall: - @# New location, matches upstream - @rm -rf $(KLIB)/$(KMODDIR)/net/bluetooth/ - @rm -rf $(KLIB)/$(KMODDIR)/drivers/bluetooth/ - @# Lets only remove the stuff we are sure we are providing - @# on the misc directory. - @/sbin/depmod -ae - @echo - -btclean: - $(MAKE) -C /lib/modules/$(shell uname -r)/build M=$(PWD) BT=TRUE clean - @rm -f $(CREL_PRE)* - -install: uninstall install-modules install-scripts - -install-modules: modules - $(MAKE) -C $(KLIB_BUILD) M=$(PWD) $(KMODDIR_ARG) $(KMODPATH_ARG) \ - modules_install - @./scripts/update-initramfs - -install-scripts: - @# All the scripts we can use - @mkdir -p $(DESTDIR)/usr/lib/compat-wireless/ - @install scripts/modlib.sh $(DESTDIR)/usr/lib/compat-wireless/ - @install scripts/madwifi-unload $(DESTDIR)/usr/sbin/ - @# This is to allow switching between drivers without blacklisting - @install scripts/athenable $(DESTDIR)/usr/sbin/ - @install scripts/b43enable $(DESTDIR)/usr/sbin/ - @install scripts/iwl-enable $(DESTDIR)/usr/sbin/ - @install scripts/alx-enable $(DESTDIR)/usr/sbin/ - @install scripts/athload $(DESTDIR)/usr/sbin/ - @install scripts/b43load $(DESTDIR)/usr/sbin/ - @install scripts/iwl-load $(DESTDIR)/usr/sbin/ - @if [ $(shell modinfo ath_pci > /dev/null 2>&1 && echo 1) ]; then \ - echo -n "Note: madwifi detected, we're going to disable it. " ;\ - echo "If you would like to enable it later you can run:" ;\ - echo " sudo athenable madwifi" ;\ - echo ;\ - echo Running athenable ath5k...;\ - $(DESTDIR)/usr/sbin/athenable ath5k ;\ - fi - @if [ $(shell modinfo iwl4965 > /dev/null 2>&1 && echo 1) ]; then \ - echo ;\ - echo -n "Note: iwl4965 detected, we're going to disable it. " ;\ - echo "If you would like to enable it later you can run:" ;\ - echo " sudo iwl-load iwl4965" ;\ - echo ;\ - echo Running iwl-enable iwlagn...;\ - $(DESTDIR)/usr/sbin/iwl-enable iwlagn ;\ - fi - @if [ $(shell modinfo iwlagn > /dev/null 2>&1 && echo 1) ] \ - && [ $(shell modinfo iwlwifi > /dev/null 2>&1 && echo 1) ]; then \ - echo ;\ - echo -n "Note: iwlagn detected, we're going to disable it. " ;\ - echo "If you would like to enable it later you can run:" ;\ - echo " sudo iwl-load iwlagn" ;\ - echo ;\ - echo Running iwl-enable iwlwifi...;\ - $(DESTDIR)/usr/sbin/iwl-enable iwlwifi ;\ - fi - @if [ $(shell modinfo atl1c > /dev/null 2>&1 && echo 1) ]; then \ - echo ;\ - echo -n "Note: atl1c detected, we're going to disable it. " ;\ - echo "If you would like to enable it later you can run:" ;\ - echo " sudo alx-load atl1c" ;\ - echo ;\ - echo Running alx-enable alx...;\ - $(DESTDIR)/usr/sbin/alx-enable alx;\ - fi - @# If on distributions like Mandriva which like to - @# compress their modules this will find out and do - @# it for you. Reason is some old version of modutils - @# won't know mac80211.ko should be used instead of - @# mac80211.ko.gz - @./scripts/compress_modules - @# Mandrake doesn't have a depmod.d/ conf file to prefer - @# the updates/ dir which is what we use so we add one for it - @# (or any other distribution that doens't have this). - @./scripts/check_depmod - @# Udev stuff needed for the new compat_firmware_class. - @./compat/scripts/compat_firmware_install - @/sbin/depmod -a - @echo - @echo Now run: - @echo - @echo sudo make unload to unload all: wireless, bluetooth and ethernet modules - @echo sudo make wlunload to unload wireless modules - @echo sudo make btunload to unload bluetooth modules - @echo - @echo Run sudo modprobe 'driver-name' to load your desired driver. - @echo If unsure reboot. - @echo - -uninstall: - @# New location, matches upstream - @rm -rf $(KLIB)/$(KMODDIR)/compat/ - @rm -rf $(KLIB)/$(KMODDIR)/net/mac80211/ - @rm -rf $(KLIB)/$(KMODDIR)/net/rfkill/ - @rm -rf $(KLIB)/$(KMODDIR)/net/wireless/ - @rm -rf $(KLIB)/$(KMODDIR)/drivers/ssb/ - @rm -rf $(KLIB)/$(KMODDIR)/drivers/net/usb/ - @rm -rf $(KLIB)/$(KMODDIR)/drivers/net/wireless/ - @rm -rf $(KLIB)/$(KMODDIR)/drivers/staging/ - @rm -rf $(KLIB)/$(KMODDIR)/drivers/net/atl* - @# Lets only remove the stuff we are sure we are providing - @# on the misc directory. - @rm -f $(KLIB)/$(KMODDIR)/drivers/misc/eeprom/eeprom_93cx6.ko* - @rm -f $(KLIB)/$(KMODDIR)/drivers/misc/eeprom_93cx6.ko* - @rm -f $(KLIB)/$(KMODDIR)/drivers/net/b44.ko* - @/sbin/depmod -a - @echo - -clean: - @if [ -d net -a -d $(KLIB_BUILD) ]; then \ - $(MAKE) -C $(KLIB_BUILD) M=$(PWD) clean ;\ - fi - @rm -f $(CREL_PRE)* -unload: - @./scripts/unload.sh - -btunload: - @./scripts/btunload.sh - -wlunload: - @./scripts/wlunload.sh - - -.PHONY: all clean install uninstall unload btunload wlunload modules bt Makefile - -endif - -clean-files += Module.symvers Module.markers modules modules.order -clean-files += $(CREL_CHECK) $(CONFIG_CHECK) $(COMPAT_CONFIG) diff --git a/openairITS/mac/DOT11/README b/openairITS/mac/DOT11/README deleted file mode 100644 index 09d8612569..0000000000 --- a/openairITS/mac/DOT11/README +++ /dev/null @@ -1,417 +0,0 @@ - -Linux Wireless compatibility package -===================================== - -This is a Linux wireless compatibility package which provides the latest -Linux wireless subsystem enhancements for kernels 2.6.24 and above. -It is technically possible to support kernels < 2.6.24 but more -work is required for that. -It also provides Linux bluetooth subsystem enhancements for kernels 2.6.27 and above. - -With a local git repository you can update the compatibility package yourself. -For more information on how to do this please refer the Developers section below. - -Documentation ------------- - -This package is also documented online and has more-up-to date -information online than on this README file. You should read the wiki page -and not rely on this README: - -http://wireless.kernel.org/en/users/Download - -Subscribe to the wiki page to get updates on the documentation. - -Where to get the latest ------------------------ - -This package lets you build your own 'latest', all you need is a local git -repository. The process is documented in the Developers section of this document. -However since not many users are expected to keep a local git repository we -provide daily snapshots of this package + the wireless and bluetooth subsystem -code. You can find the latest snapshot at: - -linux-next.git version: -http://wireless.kernel.org/en/users/Download - -stable version: -http://wireless.kernel.org/en/users/Download/stable/ - -Versions --------- - -There are two different versions of this package available. - * Version based on latest linux-next.git tree named compat-wireless-YYYY-MM-DD.tar.bz2 - * Version based on linux-2.6-stable.git tree named compat-wireless-2.6.CC.DD.tar.bz2 - -Both versions should work for every kernel > 2.6.24. The differences are the -code they are containing. The version based on linux-next.git contains the -wireless and bluetooth subsystem out of linux-next.git and the stable version -the wireless subsystem out of the corresponding linux stable version. - -Selecting your driver ---------------------- - -If you know the driver you want you can select it with our -helper script: - -./scripts/driver-select - -Run that script to see more information. -Not all drivers are currently enabled via driver-select. - -Building, and installing ------------------------- - -Build: compile the latest linux wireless subsystem - - make - -Install: - -We use the updates/ directory so your distribution's drivers are left intact. - - sudo make install - -Uninstall: - -This nukes our changes to updates/ so you can go back to using your -distribution's supported drivers. - - sudo make uninstall - -Load: - -Reboot unless you know what you are doing. -(Usually modprobe 'driver-name' is the way to go) - - -Bluetooth modules can be separately compiled and installed using below commands -Bluetooth drivers are also available via ./scripts/driver-select - -Build: - make bt - -Install: - sudo make btinstall - -Uninstall: - sudo make btuninstall - -Unload: - sudo make btunload - -Load: - modprobe driver-name. If unsure, reboot. - -Drivers -------- - -This is the list of drivers the package currently provides. It adds -all new drivers or drivers which keep being updated which you might -be interested in. - -Drivers list: - -adm8211 -ar9170usb -at76c50x-usb -ath5k -ath6kl -ath9k -ath9k_htc -b43 -b43legacy -b44 -carl9170 -brcm80211 -ipw2100 -ipw2200 -iwl3945 -iwlagn -iwlcore -iwmc3200wifi -libertas -libertas_cs -libertas_sdio -libertas_spi -libertas_tf -libertas_tf_usb -libipw -mwl8k -orinoco_cs -orinoco_nortel -orinoco_pci -orinoco_plx -orinoco_tld -orinoco_usb -orinoco -p54common -p54pci -p54spi -p54usb -rt2400pci -rt2500pci -rt2500usb -rt2800pci -rt2800usb -rt61pci -rt73usb -rtl8180 -rtl8187 -rtlwifi -rtl8192ce -spectrum_cs -ssb -wl1251 -wl12xx -zd1211rw - -This package also provides more drivers which may be documented here - -For a complete list see: - -http://wireless.kernel.org/en/users/Download - -Non-wireless drivers --------------------- - -Atheros Ethernet drivers: - -atl1 -atl1c -atl1e -atl2 - -To support b43 ssb is also provided, and since ssb is also provided -we provide b44 (the ethernet driver). - -The new rfkill drivers also provided and backported. - -Bluetooth drivers: - -ath3k -bcm203x -bluecard_cs -bluetooth -bnep -bpa10x -bt3c_cs -btmrvl -btmrvl_sdio -btsdio -btusb -btuart_cs -cmtp -dtl1_cs -hidp -hci_vhci -hci_uart -l2cap -rfcomm -sco - -Firmware: ---------- - -If your driver needs firmware please be sure to check the driver page -for that driver here: - -http://wireless.kernel.org/en/users/Drivers - -Why? ----- - -For users or developers stuck on older kernels that want to help test or -patch wireless work. Additionally if you're on a recent kernel this lets -you get the latest and greatest linux-next git work without much effort. -This may mean new drivers for some users. Last but not least we hope this -will encourage vendors and developers to post patches upstream first -rather than forking or maintaining their own mac80211 releases with -their own patches for their own drivers. - -Building for external kernels ----------------------------------- - -If you have a kernel you do not have installed but yet want to build the -compat-wireless-2.6 drivers for it you can use this syntax: - -make KLIB=/home/mcgrof/kernels/linux-2.6.23.9 KLIB_BUILD=/home/mcgrof/kernels/linux-2.6.23.9 - -If you have a kernel installed, which is not your currently running kernel (e.g. via -distro updates; plus its corresponding kernel-dev package), you can use this syntax: - -make KLIB=/lib/modules/2.6.30.6-53.fc11.x86_64 - - and to install to your system's root path for the non-running kernel: - -make KLIB=/lib/modules/2.6.30.6-53.fc11.x86_64 KMODPATH_ARG='INSTALL_MOD_PATH=' install - -Bugs ------ - -If you've found a bug please report it to our linux-wireless mailing list: - -linux-wireless@vger.kernel.org - -Report the bug if you are working with the latest and greatest. -If your bug is compatibility-related then we should still try to fix -it within the compat.[ch] work. - -ChangeLog ---------- - -Here you see the list of changes to all wireless drivers, the wireless core and mac80211. - -http://git.kernel.org/?p=linux/kernel/git/linville/wireless-testing.git;a=log; - -This views all the changes on wireless-testing.git. - -License -------- - -This work is a subset of the Linux kernel as such we keep the kernel's -Copyright practice. Some files have their own copyright and in those -cases the license is mentioned in the file. All additional work made -to building this package is licensed under the GPLv2. - -Developers ----------- - -Compatibility work goes into compat/compat.[ch]. If using those files do -not suffice additional actual code changes can go into patches/*.patch. - -An extended and more up to date version can be found at: - -http://wireless.kernel.org/en/users/Download/hacking - -This section deals with development details of compat-wireless and the other -trees it uses. If you want to make your own compat-wireless tarballs, or if you -see something busted with compat-wireless or just want to add something new or -an enhancement this is the guide for you. - -Git trees you will need ------------------------ - -compat-wireless backports both the bluetooth and 802.11 subsystems down to older -kernels. To be able to synchronize backporting the latest and greatest the -linux-next.git tree is used as its main source for kernel updates. General Linux -kernel compatibility is addressed through a general kernel compatibility tree, -compat.git. compat-wireless then has its own tree for specific wireless -compatibility. You will then need to checkout three trees to start hacking on -compat-wireless: - -git://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git -git://git.kernel.org/pub/scm/linux/kernel/git/mcgrof/compat.git -git://git.kernel.org/pub/scm/linux/kernel/git/mcgrof/compat-wireless-2.6.git - -Linux next ----------- - -The linux-next.git tree brings all subsystems being worked on for the next -kernel release into one tree. So if the current rc kernel is 2.6.33-rc5, this -means linux-next will have what people today are working on for the 2.6.34 -kernel release. - -compat.git ----------- - -The compat git tree is a general kernel compatibility layer which can be shared -amongst different compatibility projects, or drivers. compat-wireless is just -one of the kernel compatibility projects using compat.git. compat.git builds a -general compatibility module, compat, and any additional modules to let you get -new general kernel updates from future kernels on your old kernels. - -compat.git modules ------------------- - -compat.git provides a few modules and headers to help with general kernel -compatibility. - -compat ------- - -Provides all exported symbols implemented in each respective kernel -compat-2.6.xy.c files. Upon module load it just initializes the Linux kernel's -''power management Quality Of Service'' (aka '''pm-qos''') Interface interface -added as of the 2.6.24 kernel. No other things are initialized, the rest of the -compat module just acts as a library of exported symbols. - -compat_firmware_class ---------------------- - -Another module which compat.git provides is a backport of the firmware_class -module which got updated recently newer with a new request_firmware_nowait() -to allow better asynchronous firmware uploading. This was added as of the 2.6.33 -kernel. The firmware_class module has been backported into a new module called -compat_firmware_class. A separate module has been defined instead of a direct -replacement for firmware_class since your system may have old drivers which use -the old request_firmware_nowait() and would bust if they used the new -request_firmware_nowait(). The compat_firmware_class module registers its own -sysfs subsystem and as such also gets udev events sent through a separate -subsystem. Because of this a new udev rules file is required and provided. - -compat-wireless.git -------------------- - -Anything that is not general kernel compatibility but instead specific to 802.11 -or bluetooth goes into compat-wireless.git. After you've cloned all three trees, -linux-next.git, compat.git and compat-wireless.git you need to change into the -compat-wireless directory and tell compat-wireless where you linux-next and -compat.git trees are. You do this with environment variables GIT_TREE and -GIT_COMPAT_TREE. You can do for example: - -export GIT_TREE=/home/user/wireless-testing/ -export GIT_COMPAT_TREE=/home/users/compat.git/ - -Then you can update your local sources based on these linux-next.git and -compat.git trees: - -scripts/admin-clean.sh - Cleans the compat-wireless-2.6 tree -scripts/admin-update.sh - Updates compat-wireless-2.6 with your git tree -scripts/admin-refresh.sh - Does the above two - -Adding new drivers ------------------- - -Most new drivers are enabled for compilation. If see a driver you would like -enabled try it into the mix, test them and if they work enable them and send -the respective patches. - -Sending patches ---------------- - -Remember there are three trees. linux-next itself is a conglomeration of kernel -git trees itself, so patches for linux-next.git should be sent to each -respective subsystem for which the patches are targeted for. So for example for -802.11 you will want to send them to John Linville and cc linux-wireless, for -further guidelines on this see the Submitting Patches guidelines for 802.11. -http://wireless.kernel.org/en/developers/Documentation/SubmittingPatches -As another example, for bluetooth you will want to send them to Marcel -Holtmann and cc the linux-bluetooth mailing list. If your patch touches on -others areas of the kernel refer to the MAINTAINERS file on the kernel. - -For compat.git and compat-wireless.git please send patches against to: - -To: Luis R. Rodriguez -CC: linux-wireless@vger.kernel.org, linux-bluetooth@vger.kernel.org -Subject: [PATCH] compat-2.6: fix foo - -For patches for compat.git please use a subject like the following: - -Subject: [PATCH] compat: fix foo - -For compat-wireless.git please use a subject like the following: - -Subject: [PATCH] compat-wireless: fix foo - -Patches are preferred sent with a clear commit log entry, if unfamiliar with -how to send patches please refer to -http://wireless.kernel.org/en/developers/Documentation/git-guide. - - -TODO ------ - * Dialog (make menuconfig) option for this package - * Compatibility work for 2.6.18 --> 2.6.24 - diff --git a/openairITS/mac/DOT11/code-metrics.txt b/openairITS/mac/DOT11/code-metrics.txt deleted file mode 100644 index ddb9ec8f02..0000000000 --- a/openairITS/mac/DOT11/code-metrics.txt +++ /dev/null @@ -1,14 +0,0 @@ - -compat-wireless code metrics - - 829063 - Total upstream lines of code being pulled - 2748 - backport code changes - 2333 - backport code additions - 415 - backport code deletions - 9575 - backport from compat module - 12323 - total backport code - 1.4864 - % of code consists of backport work - -Base tree: linux-stable.git -Base tree version: v3.4-rc3 -compat-wireless release: compat-wireless-v3.4-rc3-1 diff --git a/openairITS/mac/DOT11/compat/Makefile b/openairITS/mac/DOT11/compat/Makefile deleted file mode 100644 index 26b709072c..0000000000 --- a/openairITS/mac/DOT11/compat/Makefile +++ /dev/null @@ -1,102 +0,0 @@ -ifdef MAC -obj-m += compat.o -#compat-objs := - -#obj-$(CONFIG_COMPAT_FIRMWARE_CLASS) += compat_firmware_class.o - -compat-y += main.o - -# Compat kernel compatibility code -compat-$(CONFIG_COMPAT_KERNEL_2_6_14) += compat-2.6.14.o -compat-$(CONFIG_COMPAT_KERNEL_2_6_18) += compat-2.6.18.o -compat-$(CONFIG_COMPAT_KERNEL_2_6_19) += compat-2.6.19.o -compat-$(CONFIG_COMPAT_KERNEL_2_6_21) += compat-2.6.21.o -compat-$(CONFIG_COMPAT_KERNEL_2_6_22) += compat-2.6.22.o -compat-$(CONFIG_COMPAT_KERNEL_2_6_23) += compat-2.6.23.o -compat-$(CONFIG_COMPAT_KERNEL_2_6_24) += compat-2.6.24.o -compat-$(CONFIG_COMPAT_KERNEL_2_6_25) += \ - compat-2.6.25.o \ - pm_qos_params.o - -compat-$(CONFIG_COMPAT_KERNEL_2_6_26) += compat-2.6.26.o -compat-$(CONFIG_COMPAT_KERNEL_2_6_27) += compat-2.6.27.o -compat-$(CONFIG_COMPAT_KERNEL_2_6_28) += compat-2.6.28.o -compat-$(CONFIG_COMPAT_KERNEL_2_6_29) += compat-2.6.29.o -compat-$(CONFIG_COMPAT_KERNEL_2_6_32) += compat-2.6.32.o -compat-$(CONFIG_COMPAT_KERNEL_2_6_33) += compat-2.6.33.o -compat-$(CONFIG_COMPAT_KERNEL_2_6_35) += compat-2.6.35.o -compat-$(CONFIG_COMPAT_KERNEL_2_6_36) += compat-2.6.36.o - -compat-$(CONFIG_COMPAT_KFIFO) += kfifo.o - -compat-$(CONFIG_COMPAT_KERNEL_2_6_37) += compat-2.6.37.o -compat-$(CONFIG_COMPAT_KERNEL_2_6_38) += compat-2.6.38.o -compat-$(CONFIG_COMPAT_KERNEL_2_6_39) += \ - compat-2.6.39.o \ - kstrtox.o -compat-$(CONFIG_COMPAT_KERNEL_3_0) += compat-3.0.o -compat-$(CONFIG_COMPAT_KERNEL_3_2) += compat-3.2.o -compat-$(CONFIG_COMPAT_KERNEL_3_3) += compat-3.3.o -compat-$(CONFIG_COMPAT_KERNEL_3_5) += compat-3.5.o - -compat-$(CONFIG_COMPAT_CORDIC) += cordic.o -compat-$(CONFIG_COMPAT_CRC8) += crc8.o - -ifndef CONFIG_64BIT -ifndef CONFIG_GENERIC_ATOMIC64 - compat-y += compat_atomic.o -endif -endif -endif - -ifdef ALL -obj-m += compat.o -#compat-objs := - -obj-$(CONFIG_COMPAT_FIRMWARE_CLASS) += compat_firmware_class.o - -compat-y += main.o - -# Compat kernel compatibility code -compat-$(CONFIG_COMPAT_KERNEL_2_6_14) += compat-2.6.14.o -compat-$(CONFIG_COMPAT_KERNEL_2_6_18) += compat-2.6.18.o -compat-$(CONFIG_COMPAT_KERNEL_2_6_19) += compat-2.6.19.o -compat-$(CONFIG_COMPAT_KERNEL_2_6_21) += compat-2.6.21.o -compat-$(CONFIG_COMPAT_KERNEL_2_6_22) += compat-2.6.22.o -compat-$(CONFIG_COMPAT_KERNEL_2_6_23) += compat-2.6.23.o -compat-$(CONFIG_COMPAT_KERNEL_2_6_24) += compat-2.6.24.o -compat-$(CONFIG_COMPAT_KERNEL_2_6_25) += \ - compat-2.6.25.o \ - pm_qos_params.o - -compat-$(CONFIG_COMPAT_KERNEL_2_6_26) += compat-2.6.26.o -compat-$(CONFIG_COMPAT_KERNEL_2_6_27) += compat-2.6.27.o -compat-$(CONFIG_COMPAT_KERNEL_2_6_28) += compat-2.6.28.o -compat-$(CONFIG_COMPAT_KERNEL_2_6_29) += compat-2.6.29.o -compat-$(CONFIG_COMPAT_KERNEL_2_6_32) += compat-2.6.32.o -compat-$(CONFIG_COMPAT_KERNEL_2_6_33) += compat-2.6.33.o -compat-$(CONFIG_COMPAT_KERNEL_2_6_35) += compat-2.6.35.o -compat-$(CONFIG_COMPAT_KERNEL_2_6_36) += compat-2.6.36.o - -compat-$(CONFIG_COMPAT_KFIFO) += kfifo.o - -compat-$(CONFIG_COMPAT_KERNEL_2_6_37) += compat-2.6.37.o -compat-$(CONFIG_COMPAT_KERNEL_2_6_38) += compat-2.6.38.o -compat-$(CONFIG_COMPAT_KERNEL_2_6_39) += \ - compat-2.6.39.o \ - kstrtox.o -compat-$(CONFIG_COMPAT_KERNEL_3_0) += compat-3.0.o -compat-$(CONFIG_COMPAT_KERNEL_3_2) += compat-3.2.o -compat-$(CONFIG_COMPAT_KERNEL_3_3) += compat-3.3.o -compat-$(CONFIG_COMPAT_KERNEL_3_5) += compat-3.5.o - -compat-$(CONFIG_COMPAT_CORDIC) += cordic.o -compat-$(CONFIG_COMPAT_CRC8) += crc8.o - -ifndef CONFIG_64BIT -ifndef CONFIG_GENERIC_ATOMIC64 - compat-y += compat_atomic.o -endif -endif - -endif diff --git a/openairITS/mac/DOT11/compat/compat-2.6.14.c b/openairITS/mac/DOT11/compat/compat-2.6.14.c deleted file mode 100644 index 3de847d9d0..0000000000 --- a/openairITS/mac/DOT11/compat/compat-2.6.14.c +++ /dev/null @@ -1,14 +0,0 @@ -/* - * Copyright 2007 Luis R. Rodriguez - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - * - * Compatibility file for Linux wireless for kernels 2.6.14. - */ - -#include - -/* 2.6.14 compat code goes here */ - diff --git a/openairITS/mac/DOT11/compat/compat-2.6.18.c b/openairITS/mac/DOT11/compat/compat-2.6.18.c deleted file mode 100644 index c7961eeba9..0000000000 --- a/openairITS/mac/DOT11/compat/compat-2.6.18.c +++ /dev/null @@ -1,14 +0,0 @@ -/* - * Copyright 2007 Luis R. Rodriguez - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - * - * Compatibility file for Linux wireless for kernels 2.6.18. - */ - -#include - -/* 2.6.18 compat code goes here */ - diff --git a/openairITS/mac/DOT11/compat/compat-2.6.19.c b/openairITS/mac/DOT11/compat/compat-2.6.19.c deleted file mode 100644 index 60c3404580..0000000000 --- a/openairITS/mac/DOT11/compat/compat-2.6.19.c +++ /dev/null @@ -1,14 +0,0 @@ -/* - * Copyright 2007 Luis R. Rodriguez - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - * - * Compatibility file for Linux wireless for kernels 2.6.19. - */ - -#include - -/* 2.6.19 compat code goes here */ - diff --git a/openairITS/mac/DOT11/compat/compat-2.6.21.c b/openairITS/mac/DOT11/compat/compat-2.6.21.c deleted file mode 100644 index 7cf886194b..0000000000 --- a/openairITS/mac/DOT11/compat/compat-2.6.21.c +++ /dev/null @@ -1,14 +0,0 @@ -/* - * Copyright 2007 Luis R. Rodriguez - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - * - * Compatibility file for Linux wireless for kernels 2.6.21. - */ - -#include - -/* 2.6.21 compat code goes here */ - diff --git a/openairITS/mac/DOT11/compat/compat-2.6.22.c b/openairITS/mac/DOT11/compat/compat-2.6.22.c deleted file mode 100644 index d4df7b7d8d..0000000000 --- a/openairITS/mac/DOT11/compat/compat-2.6.22.c +++ /dev/null @@ -1,14 +0,0 @@ -/* - * Copyright 2007 Luis R. Rodriguez - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - * - * Compatibility file for Linux wireless for kernels 2.6.22. - */ - -#include - -/* 2.6.22 compat code goes here */ - diff --git a/openairITS/mac/DOT11/compat/compat-2.6.23.c b/openairITS/mac/DOT11/compat/compat-2.6.23.c deleted file mode 100644 index bc49e98266..0000000000 --- a/openairITS/mac/DOT11/compat/compat-2.6.23.c +++ /dev/null @@ -1,239 +0,0 @@ -/* - * Copyright 2007 Luis R. Rodriguez - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - * - * Compatibility file for Linux wireless for kernels 2.6.23. - */ - -#include - -/* On net/core/dev.c as of 2.6.24 */ -int __dev_addr_delete(struct dev_addr_list **list, int *count, - void *addr, int alen, int glbl) -{ - struct dev_addr_list *da; - - for (; (da = *list) != NULL; list = &da->next) { - if (memcmp(da->da_addr, addr, da->da_addrlen) == 0 && - alen == da->da_addrlen) { - if (glbl) { - int old_glbl = da->da_gusers; - da->da_gusers = 0; - if (old_glbl == 0) - break; - } - if (--da->da_users) - return 0; - - *list = da->next; - kfree(da); - (*count)--; - return 0; - } - } - return -ENOENT; -} -EXPORT_SYMBOL_GPL(__dev_addr_delete); - -/* On net/core/dev.c as of 2.6.24. This is not yet used by mac80211 but - * might as well add it */ -int __dev_addr_add(struct dev_addr_list **list, int *count, - void *addr, int alen, int glbl) -{ - struct dev_addr_list *da; - - for (da = *list; da != NULL; da = da->next) { - if (memcmp(da->da_addr, addr, da->da_addrlen) == 0 && - da->da_addrlen == alen) { - if (glbl) { - int old_glbl = da->da_gusers; - da->da_gusers = 1; - if (old_glbl) - return 0; - } - da->da_users++; - return 0; - } - } - - da = kmalloc(sizeof(*da), GFP_ATOMIC); - if (da == NULL) - return -ENOMEM; - memcpy(da->da_addr, addr, alen); - da->da_addrlen = alen; - da->da_users = 1; - da->da_gusers = glbl ? 1 : 0; - da->next = *list; - *list = da; - (*count)++; - return 0; -} -EXPORT_SYMBOL_GPL(__dev_addr_add); - - -/* Part of net/core/dev_mcast.c as of 2.6.23. This is a slightly different version. - * Since da->da_synced is not part of 2.6.22 we need to take longer route when - * syncing */ - -/** - * dev_mc_sync - Synchronize device's multicast list to another device - * @to: destination device - * @from: source device - * - * Add newly added addresses to the destination device and release - * addresses that have no users left. The source device must be - * locked by netif_tx_lock_bh. - * - * This function is intended to be called from the dev->set_multicast_list - * function of layered software devices. - */ -int dev_mc_sync(struct net_device *to, struct net_device *from) -{ - struct dev_addr_list *da, *next, *da_to; - int err = 0; - - netif_tx_lock_bh(to); - da = from->mc_list; - while (da != NULL) { - int synced = 0; - next = da->next; - da_to = to->mc_list; - /* 2.6.22 does not have da->da_synced so lets take the long route */ - while (da_to != NULL) { - if (memcmp(da_to->da_addr, da->da_addr, da_to->da_addrlen) == 0 && - da->da_addrlen == da_to->da_addrlen) - synced = 1; - break; - } - if (!synced) { - err = __dev_addr_add(&to->mc_list, &to->mc_count, - da->da_addr, da->da_addrlen, 0); - if (err < 0) - break; - da->da_users++; - } else if (da->da_users == 1) { - __dev_addr_delete(&to->mc_list, &to->mc_count, - da->da_addr, da->da_addrlen, 0); - __dev_addr_delete(&from->mc_list, &from->mc_count, - da->da_addr, da->da_addrlen, 0); - } - da = next; - } - if (!err) - __dev_set_rx_mode(to); - netif_tx_unlock_bh(to); - - return err; -} -EXPORT_SYMBOL_GPL(dev_mc_sync); - - -/* Part of net/core/dev_mcast.c as of 2.6.23. This is a slighty different version. - * Since da->da_synced is not part of 2.6.22 we need to take longer route when - * unsyncing */ - -/** - * dev_mc_unsync - Remove synchronized addresses from the destination - * device - * @to: destination device - * @from: source device - * - * Remove all addresses that were added to the destination device by - * dev_mc_sync(). This function is intended to be called from the - * dev->stop function of layered software devices. - */ -void dev_mc_unsync(struct net_device *to, struct net_device *from) -{ - struct dev_addr_list *da, *next, *da_to; - - netif_tx_lock_bh(from); - netif_tx_lock_bh(to); - - da = from->mc_list; - while (da != NULL) { - bool synced = false; - next = da->next; - da_to = to->mc_list; - /* 2.6.22 does not have da->da_synced so lets take the long route */ - while (da_to != NULL) { - if (memcmp(da_to->da_addr, da->da_addr, da_to->da_addrlen) == 0 && - da->da_addrlen == da_to->da_addrlen) - synced = true; - break; - } - if (!synced) { - da = next; - continue; - } - __dev_addr_delete(&to->mc_list, &to->mc_count, - da->da_addr, da->da_addrlen, 0); - __dev_addr_delete(&from->mc_list, &from->mc_count, - da->da_addr, da->da_addrlen, 0); - da = next; - } - __dev_set_rx_mode(to); - - netif_tx_unlock_bh(to); - netif_tx_unlock_bh(from); -} -EXPORT_SYMBOL_GPL(dev_mc_unsync); - -/* Added as of 2.6.23 on net/core/dev.c. Slightly modifed, no dev->set_rx_mode on - * 2.6.22 so ignore that. */ - -/* - * Upload unicast and multicast address lists to device and - * configure RX filtering. When the device doesn't support unicast - * filtering it is put in promiscous mode while unicast addresses - * are present. - */ -void __dev_set_rx_mode(struct net_device *dev) -{ - /* dev_open will call this function so the list will stay sane. */ - if (!(dev->flags&IFF_UP)) - return; - - if (!netif_device_present(dev)) - return; - -/* This needs to be ported to 2.6.22 framework */ -#if 0 - /* Unicast addresses changes may only happen under the rtnl, - * therefore calling __dev_set_promiscuity here is safe. - */ - if (dev->uc_count > 0 && !dev->uc_promisc) { - __dev_set_promiscuity(dev, 1); - dev->uc_promisc = 1; - } else if (dev->uc_count == 0 && dev->uc_promisc) { - __dev_set_promiscuity(dev, -1); - dev->uc_promisc = 0; - } -#endif - - if (dev->set_multicast_list) - dev->set_multicast_list(dev); -} - -/** - * pci_try_set_mwi - enables memory-write-invalidate PCI transaction - * @dev: the PCI device for which MWI is enabled - * - * Enables the Memory-Write-Invalidate transaction in %PCI_COMMAND. - * Callers are not required to check the return value. - * - * RETURNS: An appropriate -ERRNO error value on error, or zero for success. - */ -int pci_try_set_mwi(struct pci_dev *dev) -{ - int rc = 0; -#ifdef HAVE_PCI_SET_MWI - rc = pci_set_mwi(dev); -#endif - return rc; -} -EXPORT_SYMBOL_GPL(pci_try_set_mwi); -#endif - diff --git a/openairITS/mac/DOT11/compat/compat-2.6.24.c b/openairITS/mac/DOT11/compat/compat-2.6.24.c deleted file mode 100644 index 977db0ca17..0000000000 --- a/openairITS/mac/DOT11/compat/compat-2.6.24.c +++ /dev/null @@ -1,158 +0,0 @@ -/* - * Copyright 2007 Luis R. Rodriguez - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - * - * Compatibility file for Linux wireless for kernels 2.6.24. - */ - -#include -#include - -/* - * We simply won't use it though, just declare it for our wrappers and - * for usage with tons of code that makes mention to it. - */ -struct net init_net; -EXPORT_SYMBOL_GPL(init_net); - -/* 2.6.22 and 2.6.23 have eth_header_cache_update defined as extern in include/linux/etherdevice.h - * and actually defined in net/ethernet/eth.c but 2.6.24 exports it. Lets export it here */ - -/** - * eth_header_cache_update - update cache entry - * @hh: destination cache entry - * @dev: network device - * @haddr: new hardware address - * - * Called by Address Resolution module to notify changes in address. - */ -void eth_header_cache_update(struct hh_cache *hh, - struct net_device *dev, - unsigned char *haddr) -{ - memcpy(((u8 *) hh->hh_data) + HH_DATA_OFF(sizeof(struct ethhdr)), - haddr, ETH_ALEN); -} -EXPORT_SYMBOL_GPL(eth_header_cache_update); - -/* 2.6.22 and 2.6.23 have eth_header_cache defined as extern in include/linux/etherdevice.h - * and actually defined in net/ethernet/eth.c but 2.6.24 exports it. Lets export it here */ - -/** - * eth_header_cache - fill cache entry from neighbour - * @neigh: source neighbour - * @hh: destination cache entry - * Create an Ethernet header template from the neighbour. - */ -int eth_header_cache(struct neighbour *neigh, struct hh_cache *hh) -{ - __be16 type = hh->hh_type; - struct ethhdr *eth; - const struct net_device *dev = neigh->dev; - - eth = (struct ethhdr *) - (((u8 *) hh->hh_data) + (HH_DATA_OFF(sizeof(*eth)))); - - if (type == htons(ETH_P_802_3)) - return -1; - - eth->h_proto = type; - memcpy(eth->h_source, dev->dev_addr, ETH_ALEN); - memcpy(eth->h_dest, neigh->ha, ETH_ALEN); - hh->hh_len = ETH_HLEN; - return 0; -} -EXPORT_SYMBOL_GPL(eth_header_cache); - -/* 2.6.22 and 2.6.23 have eth_header() defined as extern in include/linux/etherdevice.h - * and actually defined in net/ethernet/eth.c but 2.6.24 exports it. Lets export it here */ - -/** - * eth_header - create the Ethernet header - * @skb: buffer to alter - * @dev: source device - * @type: Ethernet type field - * @daddr: destination address (NULL leave destination address) - * @saddr: source address (NULL use device source address) - * @len: packet length (<= skb->len) - * - * - * Set the protocol type. For a packet of type ETH_P_802_3 we put the length - * in here instead. It is up to the 802.2 layer to carry protocol information. - */ -int eth_header(struct sk_buff *skb, struct net_device *dev, unsigned short type, - void *daddr, void *saddr, unsigned len) -{ - struct ethhdr *eth = (struct ethhdr *)skb_push(skb, ETH_HLEN); - - if (type != ETH_P_802_3) - eth->h_proto = htons(type); - else - eth->h_proto = htons(len); - - /* - * Set the source hardware address. - */ - - if (!saddr) - saddr = dev->dev_addr; - memcpy(eth->h_source, saddr, dev->addr_len); - - if (daddr) { - memcpy(eth->h_dest, daddr, dev->addr_len); - return ETH_HLEN; - } - - /* - * Anyway, the loopback-device should never use this function... - */ - - if (dev->flags & (IFF_LOOPBACK | IFF_NOARP)) { - memset(eth->h_dest, 0, dev->addr_len); - return ETH_HLEN; - } - - return -ETH_HLEN; -} - -EXPORT_SYMBOL_GPL(eth_header); - -/* 2.6.22 and 2.6.23 have eth_rebuild_header defined as extern in include/linux/etherdevice.h - * and actually defined in net/ethernet/eth.c but 2.6.24 exports it. Lets export it here */ - -/** - * eth_rebuild_header- rebuild the Ethernet MAC header. - * @skb: socket buffer to update - * - * This is called after an ARP or IPV6 ndisc it's resolution on this - * sk_buff. We now let protocol (ARP) fill in the other fields. - * - * This routine CANNOT use cached dst->neigh! - * Really, it is used only when dst->neigh is wrong. - */ -int eth_rebuild_header(struct sk_buff *skb) -{ - struct ethhdr *eth = (struct ethhdr *)skb->data; - struct net_device *dev = skb->dev; - - switch (eth->h_proto) { -#ifdef CONFIG_INET - case __constant_htons(ETH_P_IP): - return arp_find(eth->h_dest, skb); -#endif - default: - printk(KERN_DEBUG - "%s: unable to resolve type %X addresses.\n", - dev->name, (int)eth->h_proto); - - memcpy(eth->h_source, dev->dev_addr, ETH_ALEN); - break; - } - - return 0; -} -EXPORT_SYMBOL_GPL(eth_rebuild_header); - diff --git a/openairITS/mac/DOT11/compat/compat-2.6.25.c b/openairITS/mac/DOT11/compat/compat-2.6.25.c deleted file mode 100644 index 2e9c3a8810..0000000000 --- a/openairITS/mac/DOT11/compat/compat-2.6.25.c +++ /dev/null @@ -1,97 +0,0 @@ -/* - * Copyright 2007-2010 Luis R. Rodriguez - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - * - * Compatibility file for Linux wireless for kernels 2.6.25. - */ - -#include - -/** - * The following things are out of ./lib/vsprintf.c - * The new iwlwifi driver is using them. - */ - -/** - * strict_strtoul - convert a string to an unsigned long strictly - * @cp: The string to be converted - * @base: The number base to use - * @res: The converted result value - * - * strict_strtoul converts a string to an unsigned long only if the - * string is really an unsigned long string, any string containing - * any invalid char at the tail will be rejected and -EINVAL is returned, - * only a newline char at the tail is acceptible because people generally - * change a module parameter in the following way: - * - * echo 1024 > /sys/module/e1000/parameters/copybreak - * - * echo will append a newline to the tail. - * - * It returns 0 if conversion is successful and *res is set to the converted - * value, otherwise it returns -EINVAL and *res is set to 0. - * - * simple_strtoul just ignores the successive invalid characters and - * return the converted value of prefix part of the string. - */ -int strict_strtoul(const char *cp, unsigned int base, unsigned long *res); - -/** - * strict_strtol - convert a string to a long strictly - * @cp: The string to be converted - * @base: The number base to use - * @res: The converted result value - * - * strict_strtol is similiar to strict_strtoul, but it allows the first - * character of a string is '-'. - * - * It returns 0 if conversion is successful and *res is set to the converted - * value, otherwise it returns -EINVAL and *res is set to 0. - */ -int strict_strtol(const char *cp, unsigned int base, long *res); - -#define define_strict_strtoux(type, valtype) \ -int strict_strtou##type(const char *cp, unsigned int base, valtype *res)\ -{ \ - char *tail; \ - valtype val; \ - size_t len; \ - \ - *res = 0; \ - len = strlen(cp); \ - if (len == 0) \ - return -EINVAL; \ - \ - val = simple_strtou##type(cp, &tail, base); \ - if ((*tail == '\0') || \ - ((len == (size_t)(tail - cp) + 1) && (*tail == '\n'))) {\ - *res = val; \ - return 0; \ - } \ - \ - return -EINVAL; \ -} \ - -#define define_strict_strtox(type, valtype) \ -int strict_strto##type(const char *cp, unsigned int base, valtype *res) \ -{ \ - int ret; \ - if (*cp == '-') { \ - ret = strict_strtou##type(cp+1, base, res); \ - if (!ret) \ - *res = -(*res); \ - } else \ - ret = strict_strtou##type(cp, base, res); \ - \ - return ret; \ -} \ - -define_strict_strtoux(l, unsigned long) -define_strict_strtox(l, long) - -EXPORT_SYMBOL_GPL(strict_strtoul); -EXPORT_SYMBOL_GPL(strict_strtol); - diff --git a/openairITS/mac/DOT11/compat/compat-2.6.26.c b/openairITS/mac/DOT11/compat/compat-2.6.26.c deleted file mode 100644 index f471506751..0000000000 --- a/openairITS/mac/DOT11/compat/compat-2.6.26.c +++ /dev/null @@ -1,87 +0,0 @@ -/* - * Copyright 2007-2010 Luis R. Rodriguez - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - * - * Compatibility file for Linux wireless for kernels 2.6.26. - * - * Copyright holders from ported work: - * - * Copyright (c) 2002-2003 Patrick Mochel - * Copyright (c) 2006-2007 Greg Kroah-Hartman - * Copyright (c) 2006-2007 Novell Inc. - */ - -#include - -/* 2.6.24 does not have the struct kobject with a name */ -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,25)) - -/** - * kobject_set_name_vargs - Set the name of an kobject - * @kobj: struct kobject to set the name of - * @fmt: format string used to build the name - * @vargs: vargs to format the string. - */ -static -int kobject_set_name_vargs(struct kobject *kobj, const char *fmt, - va_list vargs) -{ - const char *old_name = kobj->name; - char *s; - - if (kobj->name && !fmt) - return 0; - - kobj->name = kvasprintf(GFP_KERNEL, fmt, vargs); - if (!kobj->name) - return -ENOMEM; - - /* ewww... some of these buggers have '/' in the name ... */ - while ((s = strchr(kobj->name, '/'))) - s[0] = '!'; - - kfree(old_name); - return 0; -} -#else -static -int kobject_set_name_vargs(struct kobject *kobj, const char *fmt, - va_list vargs) -{ - struct device *dev; - unsigned int len; - va_list aq; - - dev = container_of(kobj, struct device, kobj); - - va_copy(aq, vargs); - len = vsnprintf(NULL, 0, fmt, aq); - va_end(aq); - - len = len < BUS_ID_SIZE ? (len + 1) : BUS_ID_SIZE; - - vsnprintf(dev->bus_id, len, fmt, vargs); - return 0; -} -#endif - -/** - * dev_set_name - set a device name - * @dev: device - * @fmt: format string for the device's name - */ -int dev_set_name(struct device *dev, const char *fmt, ...) -{ - va_list vargs; - int err; - - va_start(vargs, fmt); - err = kobject_set_name_vargs(&dev->kobj, fmt, vargs); - va_end(vargs); - return err; -} -EXPORT_SYMBOL_GPL(dev_set_name); - diff --git a/openairITS/mac/DOT11/compat/compat-2.6.27.c b/openairITS/mac/DOT11/compat/compat-2.6.27.c deleted file mode 100644 index 762f0ca1de..0000000000 --- a/openairITS/mac/DOT11/compat/compat-2.6.27.c +++ /dev/null @@ -1,239 +0,0 @@ -/* - * Copyright 2007 Luis R. Rodriguez - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - * - * Compatibility file for Linux wireless for kernels 2.6.27 - */ - -#include -#include -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24)) -#include -#include -#include -#include -#endif - -/* rfkill notification chain */ -#define RFKILL_STATE_CHANGED 0x0001 /* state of a normal rfkill - switch has changed */ - -/* - * e5899e1b7d73e67de758a32174a859cc2586c0b9 made pci_pme_capable() external, - * it was defined internally, some drivers want access to this information. - * - * Unfortunately the old kernels do not have ->pm_cap or ->pme_support so - * we have to call the PCI routines directly. - */ - -/** - * pci_pme_capable - check the capability of PCI device to generate PME# - * @dev: PCI device to handle. - * @state: PCI state from which device will issue PME#. - * - * This is the backport code for older kernels for compat-wireless, we read stuff - * from the initialization stuff from pci_pm_init(). - */ -bool pci_pme_capable(struct pci_dev *dev, pci_power_t state) -{ - int pm; - u16 pmc = 0; - u16 pme_support; /* as from the pci dev */ - /* find PCI PM capability in list */ - pm = pci_find_capability(dev, PCI_CAP_ID_PM); - if (!pm) - return false; - - if ((pmc & PCI_PM_CAP_VER_MASK) > 3) { - dev_err(&dev->dev, "unsupported PM cap regs version (%u)\n", - pmc & PCI_PM_CAP_VER_MASK); - return false; - } - - pmc &= PCI_PM_CAP_PME_MASK; - - if (!pmc) - return false; - - pme_support = pmc >> PCI_PM_CAP_PME_SHIFT; - - /* Check device's ability to generate PME# */ - - return !!(pme_support & (1 << state)); -} -EXPORT_SYMBOL_GPL(pci_pme_capable); - -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24)) -/** - * mmc_align_data_size - pads a transfer size to a more optimal value - * @card: the MMC card associated with the data transfer - * @sz: original transfer size - * - * Pads the original data size with a number of extra bytes in - * order to avoid controller bugs and/or performance hits - * (e.g. some controllers revert to PIO for certain sizes). - * - * Returns the improved size, which might be unmodified. - * - * Note that this function is only relevant when issuing a - * single scatter gather entry. - */ -unsigned int mmc_align_data_size(struct mmc_card *card, unsigned int sz) -{ - /* - * FIXME: We don't have a system for the controller to tell - * the core about its problems yet, so for now we just 32-bit - * align the size. - */ - sz = ((sz + 3) / 4) * 4; - - return sz; -} -EXPORT_SYMBOL_GPL(mmc_align_data_size); - -/* - * Calculate the maximum byte mode transfer size - */ -static inline unsigned int sdio_max_byte_size(struct sdio_func *func) -{ - unsigned int mval = (unsigned int) min(func->card->host->max_seg_size, - func->card->host->max_blk_size); - mval = min(mval, func->max_blksize); - return min(mval, 512u); /* maximum size for byte mode */ -} - -/** - * sdio_align_size - pads a transfer size to a more optimal value - * @func: SDIO function - * @sz: original transfer size - * - * Pads the original data size with a number of extra bytes in - * order to avoid controller bugs and/or performance hits - * (e.g. some controllers revert to PIO for certain sizes). - * - * If possible, it will also adjust the size so that it can be - * handled in just a single request. - * - * Returns the improved size, which might be unmodified. - */ -unsigned int sdio_align_size(struct sdio_func *func, unsigned int sz) -{ - unsigned int orig_sz; - unsigned int blk_sz, byte_sz; - unsigned chunk_sz; - - orig_sz = sz; - - /* - * Do a first check with the controller, in case it - * wants to increase the size up to a point where it - * might need more than one block. - */ - sz = mmc_align_data_size(func->card, sz); - - /* - * If we can still do this with just a byte transfer, then - * we're done. - */ - if (sz <= sdio_max_byte_size(func)) - return sz; - - if (func->card->cccr.multi_block) { - /* - * Check if the transfer is already block aligned - */ - if ((sz % func->cur_blksize) == 0) - return sz; - - /* - * Realign it so that it can be done with one request, - * and recheck if the controller still likes it. - */ - blk_sz = ((sz + func->cur_blksize - 1) / - func->cur_blksize) * func->cur_blksize; - blk_sz = mmc_align_data_size(func->card, blk_sz); - - /* - * This value is only good if it is still just - * one request. - */ - if ((blk_sz % func->cur_blksize) == 0) - return blk_sz; - - /* - * We failed to do one request, but at least try to - * pad the remainder properly. - */ - byte_sz = mmc_align_data_size(func->card, - sz % func->cur_blksize); - if (byte_sz <= sdio_max_byte_size(func)) { - blk_sz = sz / func->cur_blksize; - return blk_sz * func->cur_blksize + byte_sz; - } - } else { - /* - * We need multiple requests, so first check that the - * controller can handle the chunk size; - */ - chunk_sz = mmc_align_data_size(func->card, - sdio_max_byte_size(func)); - if (chunk_sz == sdio_max_byte_size(func)) { - /* - * Fix up the size of the remainder (if any) - */ - byte_sz = orig_sz % chunk_sz; - if (byte_sz) { - byte_sz = mmc_align_data_size(func->card, - byte_sz); - } - - return (orig_sz / chunk_sz) * chunk_sz + byte_sz; - } - } - - /* - * The controller is simply incapable of transferring the size - * we want in decent manner, so just return the original size. - */ - return orig_sz; -} -EXPORT_SYMBOL_GPL(sdio_align_size); -#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24) */ - -#ifdef CONFIG_DEBUG_FS -/* - * Backport of debugfs_remove_recursive() without using the internals globals - * which are used by the kernel's version with: - * simple_release_fs(&debugfs_mount, &debugfs_mount_count); - */ -void debugfs_remove_recursive(struct dentry *dentry) -{ - struct dentry *last = NULL; - - /* Sanity checks */ - if (!dentry || !dentry->d_parent || !dentry->d_parent->d_inode) - return; - - while (dentry != last) { - struct dentry *child = dentry; - - /* Find a child without children */ - while (!list_empty(&child->d_subdirs)) - child = list_entry(child->d_subdirs.next, - struct dentry, - d_u.d_child); - - /* Bail out if we already tried to remove that entry */ - if (child == last) - return; - - last = child; - debugfs_remove(child); - } -} -EXPORT_SYMBOL_GPL(debugfs_remove_recursive); -#endif /* CONFIG_DEBUG_FS */ - diff --git a/openairITS/mac/DOT11/compat/compat-2.6.28.c b/openairITS/mac/DOT11/compat/compat-2.6.28.c deleted file mode 100644 index 0ae8f465db..0000000000 --- a/openairITS/mac/DOT11/compat/compat-2.6.28.c +++ /dev/null @@ -1,463 +0,0 @@ -/* - * Copyright 2007 Luis R. Rodriguez - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - * - * Compatibility file for Linux wireless for kernels 2.6.28. - */ - -#include -#include -#include -#include - -/* 2.6.28 compat code goes here */ - -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,23)) -#if defined(CONFIG_USB) || defined(CONFIG_USB_MODULE) -/* - * Compat-wireless notes for USB backport stuff: - * - * urb->reject exists on 2.6.27, the poison/unpoison helpers - * did not though. The anchor poison does not exist so we cannot use them. - * - * USB anchor poising seems to exist to prevent future driver sumbissions - * of usb_anchor_urb() to an anchor marked as poisoned. For older kernels - * we cannot use that, so new usb_anchor_urb()s will be anchored. The down - * side to this should be submission of URBs will continue being anchored - * on an anchor instead of having them being rejected immediately when the - * driver realized we needed to stop. For ar9170 we poison URBs upon the - * ar9170 mac80211 stop callback(), don't think this should be so bad. - * It mean there is period of time in older kernels for which we continue - * to anchor new URBs to a known stopped anchor. We have two anchors - * (TX, and RX) - */ - -#if 0 -/** - * usb_poison_urb - reliably kill a transfer and prevent further use of an URB - * @urb: pointer to URB describing a previously submitted request, - * may be NULL - * - * This routine cancels an in-progress request. It is guaranteed that - * upon return all completion handlers will have finished and the URB - * will be totally idle and cannot be reused. These features make - * this an ideal way to stop I/O in a disconnect() callback. - * If the request has not already finished or been unlinked - * the completion handler will see urb->status == -ENOENT. - * - * After and while the routine runs, attempts to resubmit the URB will fail - * with error -EPERM. Thus even if the URB's completion handler always - * tries to resubmit, it will not succeed and the URB will become idle. - * - * This routine may not be used in an interrupt context (such as a bottom - * half or a completion handler), or when holding a spinlock, or in other - * situations where the caller can't schedule(). - * - * This routine should not be called by a driver after its disconnect - * method has returned. - */ -void usb_poison_urb(struct urb *urb) -{ - might_sleep(); - if (!(urb && urb->dev && urb->ep)) - return; -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,28)) - spin_lock_irq(&usb_reject_lock); -#endif - ++urb->reject; -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,28)) - spin_unlock_irq(&usb_reject_lock); -#endif - /* - * XXX: usb_hcd_unlink_urb() needs backporting... this is defined - * on usb hcd.c but urb.c gets access to it. That is, older kernels - * have usb_hcd_unlink_urb() but its not exported, nor can we - * re-implement it exactly. This essentially dequeues the urb from - * hw, we need to figure out a way to backport this. - */ - //usb_hcd_unlink_urb(urb, -ENOENT); - - wait_event(usb_kill_urb_queue, atomic_read(&urb->use_count) == 0); -} -EXPORT_SYMBOL_GPL(usb_poison_urb); -#endif -#endif /* CONFIG_USB */ - -#if defined(CONFIG_PCMCIA) || defined(CONFIG_PCMCIA_MODULE) - -#include -struct pcmcia_cfg_mem { - tuple_t tuple; - cisparse_t parse; - u8 buf[256]; - cistpl_cftable_entry_t dflt; -}; -/** - * pcmcia_loop_config() - loop over configuration options - * @p_dev: the struct pcmcia_device which we need to loop for. - * @conf_check: function to call for each configuration option. - * It gets passed the struct pcmcia_device, the CIS data - * describing the configuration option, and private data - * being passed to pcmcia_loop_config() - * @priv_data: private data to be passed to the conf_check function. - * - * pcmcia_loop_config() loops over all configuration options, and calls - * the driver-specific conf_check() for each one, checking whether - * it is a valid one. Returns 0 on success or errorcode otherwise. - */ -int pcmcia_loop_config(struct pcmcia_device *p_dev, - int (*conf_check) (struct pcmcia_device *p_dev, - cistpl_cftable_entry_t *cfg, - cistpl_cftable_entry_t *dflt, - unsigned int vcc, - void *priv_data), - void *priv_data) -{ - struct pcmcia_cfg_mem *cfg_mem; - - tuple_t *tuple; - int ret; - unsigned int vcc; - - cfg_mem = kzalloc(sizeof(struct pcmcia_cfg_mem), GFP_KERNEL); - if (cfg_mem == NULL) - return -ENOMEM; - - /* get the current Vcc setting */ - vcc = p_dev->socket->socket.Vcc; - - tuple = &cfg_mem->tuple; - tuple->TupleData = cfg_mem->buf; - tuple->TupleDataMax = 255; - tuple->TupleOffset = 0; - tuple->DesiredTuple = CISTPL_CFTABLE_ENTRY; - tuple->Attributes = 0; - - ret = pcmcia_get_first_tuple(p_dev, tuple); - while (!ret) { - cistpl_cftable_entry_t *cfg = &cfg_mem->parse.cftable_entry; - - if (pcmcia_get_tuple_data(p_dev, tuple)) - goto next_entry; - - if (pcmcia_parse_tuple(tuple, &cfg_mem->parse)) - goto next_entry; - - /* default values */ - p_dev->conf.ConfigIndex = cfg->index; - if (cfg->flags & CISTPL_CFTABLE_DEFAULT) - cfg_mem->dflt = *cfg; - - ret = conf_check(p_dev, cfg, &cfg_mem->dflt, vcc, priv_data); - if (!ret) - break; - -next_entry: - ret = pcmcia_get_next_tuple(p_dev, tuple); - } - - return ret; -} -EXPORT_SYMBOL_GPL(pcmcia_loop_config); - -#endif /* CONFIG_PCMCIA */ - -#if defined(CONFIG_USB) || defined(CONFIG_USB_MODULE) - -void usb_unpoison_urb(struct urb *urb) -{ -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,28)) - unsigned long flags; -#endif - - if (!urb) - return; - -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,28)) - spin_lock_irqsave(&usb_reject_lock, flags); -#endif - --urb->reject; -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,28)) - spin_unlock_irqrestore(&usb_reject_lock, flags); -#endif -} -EXPORT_SYMBOL_GPL(usb_unpoison_urb); - - -#if 0 -/** - * usb_poison_anchored_urbs - cease all traffic from an anchor - * @anchor: anchor the requests are bound to - * - * this allows all outstanding URBs to be poisoned starting - * from the back of the queue. Newly added URBs will also be - * poisoned - * - * This routine should not be called by a driver after its disconnect - * method has returned. - */ -void usb_poison_anchored_urbs(struct usb_anchor *anchor) -{ - struct urb *victim; - - spin_lock_irq(&anchor->lock); - // anchor->poisoned = 1; /* XXX: Cannot backport */ - while (!list_empty(&anchor->urb_list)) { - victim = list_entry(anchor->urb_list.prev, struct urb, - anchor_list); - /* we must make sure the URB isn't freed before we kill it*/ - usb_get_urb(victim); - spin_unlock_irq(&anchor->lock); - /* this will unanchor the URB */ - usb_poison_urb(victim); - usb_put_urb(victim); - spin_lock_irq(&anchor->lock); - } - spin_unlock_irq(&anchor->lock); -} -EXPORT_SYMBOL_GPL(usb_poison_anchored_urbs); -#endif - -/** - * usb_anchor_empty - is an anchor empty - * @anchor: the anchor you want to query - * - * returns 1 if the anchor has no urbs associated with it - */ -int usb_anchor_empty(struct usb_anchor *anchor) -{ - return list_empty(&anchor->urb_list); -} - -EXPORT_SYMBOL_GPL(usb_anchor_empty); -#endif /* CONFIG_USB */ -#endif - -void __iomem *pci_ioremap_bar(struct pci_dev *pdev, int bar) -{ - /* - * Make sure the BAR is actually a memory resource, not an IO resource - */ - if (!(pci_resource_flags(pdev, bar) & IORESOURCE_MEM)) { - WARN_ON(1); - return NULL; - } - return ioremap_nocache(pci_resource_start(pdev, bar), - pci_resource_len(pdev, bar)); -} -EXPORT_SYMBOL_GPL(pci_ioremap_bar); - -static unsigned long round_jiffies_common(unsigned long j, int cpu, - bool force_up) -{ - int rem; - unsigned long original = j; - - /* - * We don't want all cpus firing their timers at once hitting the - * same lock or cachelines, so we skew each extra cpu with an extra - * 3 jiffies. This 3 jiffies came originally from the mm/ code which - * already did this. - * The skew is done by adding 3*cpunr, then round, then subtract this - * extra offset again. - */ - j += cpu * 3; - - rem = j % HZ; - - /* - * If the target jiffie is just after a whole second (which can happen - * due to delays of the timer irq, long irq off times etc etc) then - * we should round down to the whole second, not up. Use 1/4th second - * as cutoff for this rounding as an extreme upper bound for this. - * But never round down if @force_up is set. - */ - if (rem < HZ/4 && !force_up) /* round down */ - j = j - rem; - else /* round up */ - j = j - rem + HZ; - - /* now that we have rounded, subtract the extra skew again */ - j -= cpu * 3; - - if (j <= jiffies) /* rounding ate our timeout entirely; */ - return original; - return j; -} - -/** - * round_jiffies_up - function to round jiffies up to a full second - * @j: the time in (absolute) jiffies that should be rounded - * - * This is the same as round_jiffies() except that it will never - * round down. This is useful for timeouts for which the exact time - * of firing does not matter too much, as long as they don't fire too - * early. - */ -unsigned long round_jiffies_up(unsigned long j) -{ - return round_jiffies_common(j, raw_smp_processor_id(), true); -} -EXPORT_SYMBOL_GPL(round_jiffies_up); - -void v2_6_28_skb_add_rx_frag(struct sk_buff *skb, int i, struct page *page, int off, - int size) -{ - skb_fill_page_desc(skb, i, page, off, size); - skb->len += size; - skb->data_len += size; - skb->truesize += size; -} -EXPORT_SYMBOL_GPL(v2_6_28_skb_add_rx_frag); - -void tty_write_unlock(struct tty_struct *tty) -{ - mutex_unlock(&tty->atomic_write_lock); - wake_up_interruptible_poll(&tty->write_wait, POLLOUT); -} - -int tty_write_lock(struct tty_struct *tty, int ndelay) -{ - if (!mutex_trylock(&tty->atomic_write_lock)) { - if (ndelay) - return -EAGAIN; - if (mutex_lock_interruptible(&tty->atomic_write_lock)) - return -ERESTARTSYS; - } - return 0; -} - -/** - * send_prio_char - send priority character - * - * Send a high priority character to the tty even if stopped - * - * Locking: none for xchar method, write ordering for write method. - */ - -static int send_prio_char(struct tty_struct *tty, char ch) -{ - int was_stopped = tty->stopped; - -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,26)) - if (tty->ops->send_xchar) { - tty->ops->send_xchar(tty, ch); -#else - if (tty->driver->send_xchar) { - tty->driver->send_xchar(tty, ch); -#endif - return 0; - } - - if (tty_write_lock(tty, 0) < 0) - return -ERESTARTSYS; - - if (was_stopped) - start_tty(tty); -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,26)) - tty->ops->write(tty, &ch, 1); -#else - tty->driver->write(tty, &ch, 1); -#endif - if (was_stopped) - stop_tty(tty); - tty_write_unlock(tty); - return 0; -} - -int n_tty_ioctl_helper(struct tty_struct *tty, struct file *file, - unsigned int cmd, unsigned long arg) -{ -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,26)) - unsigned long flags; -#endif - int retval; - - switch (cmd) { - case TCXONC: - retval = tty_check_change(tty); - if (retval) - return retval; - switch (arg) { - case TCOOFF: - if (!tty->flow_stopped) { - tty->flow_stopped = 1; - stop_tty(tty); - } - break; - case TCOON: - if (tty->flow_stopped) { - tty->flow_stopped = 0; - start_tty(tty); - } - break; - case TCIOFF: - if (STOP_CHAR(tty) != __DISABLED_CHAR) - return send_prio_char(tty, STOP_CHAR(tty)); - break; - case TCION: - if (START_CHAR(tty) != __DISABLED_CHAR) - return send_prio_char(tty, START_CHAR(tty)); - break; - default: - return -EINVAL; - } - return 0; - case TCFLSH: - return tty_perform_flush(tty, arg); - case TIOCPKT: - { - int pktmode; - - if (tty->driver->type != TTY_DRIVER_TYPE_PTY || - tty->driver->subtype != PTY_TYPE_MASTER) - return -ENOTTY; - if (get_user(pktmode, (int __user *) arg)) - return -EFAULT; -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,26)) - spin_lock_irqsave(&tty->ctrl_lock, flags); -#endif - if (pktmode) { - if (!tty->packet) { - tty->packet = 1; - tty->link->ctrl_status = 0; - } - } else - tty->packet = 0; -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,26)) - spin_unlock_irqrestore(&tty->ctrl_lock, flags); -#endif - return 0; - } - default: - /* Try the mode commands */ - return tty_mode_ioctl(tty, file, cmd, arg); - } -} -EXPORT_SYMBOL_GPL(n_tty_ioctl_helper); - -/** - * pci_wake_from_d3 - enable/disable device to wake up from D3_hot or D3_cold - * @dev: PCI device to prepare - * @enable: True to enable wake-up event generation; false to disable - * - * Many drivers want the device to wake up the system from D3_hot or D3_cold - * and this function allows them to set that up cleanly - pci_enable_wake() - * should not be called twice in a row to enable wake-up due to PCI PM vs ACPI - * ordering constraints. - * - * This function only returns error code if the device is not capable of - * generating PME# from both D3_hot and D3_cold, and the platform is unable to - * enable wake-up power for it. - */ -int pci_wake_from_d3(struct pci_dev *dev, bool enable) -{ - return pci_pme_capable(dev, PCI_D3cold) ? - pci_enable_wake(dev, PCI_D3cold, enable) : - pci_enable_wake(dev, PCI_D3hot, enable); -} -EXPORT_SYMBOL_GPL(pci_wake_from_d3); - diff --git a/openairITS/mac/DOT11/compat/compat-2.6.29.c b/openairITS/mac/DOT11/compat/compat-2.6.29.c deleted file mode 100644 index 1beb718dc7..0000000000 --- a/openairITS/mac/DOT11/compat/compat-2.6.29.c +++ /dev/null @@ -1,166 +0,0 @@ -/* - * Copyright 2007-2010 Luis R. Rodriguez - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - * - * Compatibility file for Linux wireless for kernels 2.6.29. - */ - -#include -#include -#include - -/* - * If you don't see your net_device_ops implemented on - * netdev_attach_ops() then you are shit out of luck and - * you must do the nasty ifdef magic, unless you figure - * out a way to squeze your hacks into this routine :) - */ -void netdev_attach_ops(struct net_device *dev, - const struct net_device_ops *ops) -{ - dev->open = ops->ndo_open; - dev->init = ops->ndo_init; - dev->stop = ops->ndo_stop; - dev->hard_start_xmit = ops->ndo_start_xmit; - dev->change_rx_flags = ops->ndo_change_rx_flags; - dev->set_multicast_list = ops->ndo_set_multicast_list; - dev->validate_addr = ops->ndo_validate_addr; - dev->do_ioctl = ops->ndo_do_ioctl; - dev->set_config = ops->ndo_set_config; - dev->change_mtu = ops->ndo_change_mtu; - dev->set_mac_address = ops->ndo_set_mac_address; - dev->tx_timeout = ops->ndo_tx_timeout; - if (ops->ndo_get_stats) - dev->get_stats = ops->ndo_get_stats; - dev->vlan_rx_register = ops->ndo_vlan_rx_register; - dev->vlan_rx_add_vid = ops->ndo_vlan_rx_add_vid; - dev->vlan_rx_kill_vid = ops->ndo_vlan_rx_kill_vid; -#ifdef CONFIG_NET_POLL_CONTROLLER - dev->poll_controller = ops->ndo_poll_controller; -#endif - -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,27)) - dev->select_queue = ops->ndo_select_queue; -#endif -} -EXPORT_SYMBOL_GPL(netdev_attach_ops); - -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,23)) -#if defined(CONFIG_USB) || defined(CONFIG_USB_MODULE) -/** - * usb_unpoison_anchored_urbs - let an anchor be used successfully again - * @anchor: anchor the requests are bound to - * - * Reverses the effect of usb_poison_anchored_urbs - * the anchor can be used normally after it returns - */ -void usb_unpoison_anchored_urbs(struct usb_anchor *anchor) -{ - unsigned long flags; - struct urb *lazarus; - - spin_lock_irqsave(&anchor->lock, flags); - list_for_each_entry(lazarus, &anchor->urb_list, anchor_list) { - usb_unpoison_urb(lazarus); - } - //anchor->poisoned = 0; /* XXX: cannot backport */ - spin_unlock_irqrestore(&anchor->lock, flags); -} -EXPORT_SYMBOL_GPL(usb_unpoison_anchored_urbs); -#endif /* CONFIG_USB */ -#endif - -/** - * eth_mac_addr - set new Ethernet hardware address - * @dev: network device - * @p: socket address - * Change hardware address of device. - * - * This doesn't change hardware matching, so needs to be overridden - * for most real devices. - */ -int eth_mac_addr(struct net_device *dev, void *p) -{ - struct sockaddr *addr = p; - - if (netif_running(dev)) - return -EBUSY; - if (!is_valid_ether_addr(addr->sa_data)) - return -EADDRNOTAVAIL; - memcpy(dev->dev_addr, addr->sa_data, ETH_ALEN); - return 0; -} -EXPORT_SYMBOL_GPL(eth_mac_addr); - -/** - * eth_change_mtu - set new MTU size - * @dev: network device - * @new_mtu: new Maximum Transfer Unit - * - * Allow changing MTU size. Needs to be overridden for devices - * supporting jumbo frames. - */ -int eth_change_mtu(struct net_device *dev, int new_mtu) -{ - if (new_mtu < 68 || new_mtu > ETH_DATA_LEN) - return -EINVAL; - dev->mtu = new_mtu; - return 0; -} -EXPORT_SYMBOL_GPL(eth_change_mtu); - -int eth_validate_addr(struct net_device *dev) -{ - if (!is_valid_ether_addr(dev->dev_addr)) - return -EADDRNOTAVAIL; - - return 0; -} -EXPORT_SYMBOL_GPL(eth_validate_addr); -/* Source: net/ethernet/eth.c */ - -#define NETREG_DUMMY 5 -/** - * init_dummy_netdev - init a dummy network device for NAPI - * @dev: device to init - * - * This takes a network device structure and initialize the minimum - * amount of fields so it can be used to schedule NAPI polls without - * registering a full blown interface. This is to be used by drivers - * that need to tie several hardware interfaces to a single NAPI - * poll scheduler due to HW limitations. - */ -int init_dummy_netdev(struct net_device *dev) -{ - /* Clear everything. Note we don't initialize spinlocks - * are they aren't supposed to be taken by any of the - * NAPI code and this dummy netdev is supposed to be - * only ever used for NAPI polls - */ - memset(dev, 0, sizeof(struct net_device)); - - /* make sure we BUG if trying to hit standard - * register/unregister code path - */ - dev->reg_state = NETREG_DUMMY; - - /* initialize the ref count */ - atomic_set(&dev->refcnt, 1); - -#ifdef CONFIG_NETPOLL - /* NAPI wants this */ - INIT_LIST_HEAD(&dev->napi_list); -#endif - - /* a dummy interface is started by default */ - set_bit(__LINK_STATE_PRESENT, &dev->state); - set_bit(__LINK_STATE_START, &dev->state); - - return 0; -} -EXPORT_SYMBOL_GPL(init_dummy_netdev); -/* Source: net/core/dev.c */ - diff --git a/openairITS/mac/DOT11/compat/compat-2.6.32.c b/openairITS/mac/DOT11/compat/compat-2.6.32.c deleted file mode 100644 index b5a66a869e..0000000000 --- a/openairITS/mac/DOT11/compat/compat-2.6.32.c +++ /dev/null @@ -1,216 +0,0 @@ -/* - * Copyright 2007 Luis R. Rodriguez - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - * - * Compatibility file for Linux wireless for kernels 2.6.32. - */ - -#include -#include - -int __dev_addr_add(struct dev_addr_list **list, int *count, - void *addr, int alen, int glbl) -{ - struct dev_addr_list *da; - - for (da = *list; da != NULL; da = da->next) { - if (memcmp(da->da_addr, addr, da->da_addrlen) == 0 && - da->da_addrlen == alen) { - if (glbl) { - int old_glbl = da->da_gusers; - da->da_gusers = 1; - if (old_glbl) - return 0; - } - da->da_users++; - return 0; - } - } - - da = kzalloc(sizeof(*da), GFP_ATOMIC); - if (da == NULL) - return -ENOMEM; - memcpy(da->da_addr, addr, alen); - da->da_addrlen = alen; - da->da_users = 1; - da->da_gusers = glbl ? 1 : 0; - da->next = *list; - *list = da; - (*count)++; - return 0; -} - -int __dev_addr_delete(struct dev_addr_list **list, int *count, - void *addr, int alen, int glbl) -{ - struct dev_addr_list *da; - - for (; (da = *list) != NULL; list = &da->next) { - if (memcmp(da->da_addr, addr, da->da_addrlen) == 0 && - alen == da->da_addrlen) { - if (glbl) { - int old_glbl = da->da_gusers; - da->da_gusers = 0; - if (old_glbl == 0) - break; - } - if (--da->da_users) - return 0; - - *list = da->next; - kfree(da); - (*count)--; - return 0; - } - } - return -ENOENT; -} - -int __dev_addr_sync(struct dev_addr_list **to, int *to_count, - struct dev_addr_list **from, int *from_count) -{ - struct dev_addr_list *da, *next; - int err = 0; - - da = *from; - while (da != NULL) { - next = da->next; - if (!da->da_synced) { - err = __dev_addr_add(to, to_count, - da->da_addr, da->da_addrlen, 0); - if (err < 0) - break; - da->da_synced = 1; - da->da_users++; - } else if (da->da_users == 1) { - __dev_addr_delete(to, to_count, - da->da_addr, da->da_addrlen, 0); - __dev_addr_delete(from, from_count, - da->da_addr, da->da_addrlen, 0); - } - da = next; - } - return err; -} -EXPORT_SYMBOL_GPL(__dev_addr_sync); - -void __dev_addr_unsync(struct dev_addr_list **to, int *to_count, - struct dev_addr_list **from, int *from_count) -{ - struct dev_addr_list *da, *next; - - da = *from; - while (da != NULL) { - next = da->next; - if (da->da_synced) { - __dev_addr_delete(to, to_count, - da->da_addr, da->da_addrlen, 0); - da->da_synced = 0; - __dev_addr_delete(from, from_count, - da->da_addr, da->da_addrlen, 0); - } - da = next; - } -} -EXPORT_SYMBOL_GPL(__dev_addr_unsync); - -/* - * Nonzero if YEAR is a leap year (every 4 years, - * except every 100th isn't, and every 400th is). - */ -static int __isleap(long year) -{ - return (year) % 4 == 0 && ((year) % 100 != 0 || (year) % 400 == 0); -} - -/* do a mathdiv for long type */ -static long math_div(long a, long b) -{ - return a / b - (a % b < 0); -} - -/* How many leap years between y1 and y2, y1 must less or equal to y2 */ -static long leaps_between(long y1, long y2) -{ - long leaps1 = math_div(y1 - 1, 4) - math_div(y1 - 1, 100) - + math_div(y1 - 1, 400); - long leaps2 = math_div(y2 - 1, 4) - math_div(y2 - 1, 100) - + math_div(y2 - 1, 400); - return leaps2 - leaps1; -} - -/* How many days come before each month (0-12). */ -static const unsigned short __mon_yday[2][13] = { - /* Normal years. */ - {0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365}, - /* Leap years. */ - {0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366} -}; - -#define SECS_PER_HOUR (60 * 60) -#define SECS_PER_DAY (SECS_PER_HOUR * 24) - -/** - * time_to_tm - converts the calendar time to local broken-down time - * - * @totalsecs the number of seconds elapsed since 00:00:00 on January 1, 1970, - * Coordinated Universal Time (UTC). - * @offset offset seconds adding to totalsecs. - * @result pointer to struct tm variable to receive broken-down time - */ -void time_to_tm(time_t totalsecs, int offset, struct tm *result) -{ - long days, rem, y; - const unsigned short *ip; - - days = totalsecs / SECS_PER_DAY; - rem = totalsecs % SECS_PER_DAY; - rem += offset; - while (rem < 0) { - rem += SECS_PER_DAY; - --days; - } - while (rem >= SECS_PER_DAY) { - rem -= SECS_PER_DAY; - ++days; - } - - result->tm_hour = rem / SECS_PER_HOUR; - rem %= SECS_PER_HOUR; - result->tm_min = rem / 60; - result->tm_sec = rem % 60; - - /* January 1, 1970 was a Thursday. */ - result->tm_wday = (4 + days) % 7; - if (result->tm_wday < 0) - result->tm_wday += 7; - - y = 1970; - - while (days < 0 || days >= (__isleap(y) ? 366 : 365)) { - /* Guess a corrected year, assuming 365 days per year. */ - long yg = y + math_div(days, 365); - - /* Adjust DAYS and Y to match the guessed year. */ - days -= (yg - y) * 365 + leaps_between(y, yg); - y = yg; - } - - result->tm_year = y - 1900; - - result->tm_yday = days; - - ip = __mon_yday[__isleap(y)]; - for (y = 11; days < ip[y]; y--) - continue; - days -= ip[y]; - - result->tm_mon = y; - result->tm_mday = days + 1; -} -EXPORT_SYMBOL_GPL(time_to_tm); -/* source: kernel/time/timeconv.c*/ - diff --git a/openairITS/mac/DOT11/compat/compat-2.6.33.c b/openairITS/mac/DOT11/compat/compat-2.6.33.c deleted file mode 100644 index 04e2fd09f7..0000000000 --- a/openairITS/mac/DOT11/compat/compat-2.6.33.c +++ /dev/null @@ -1,132 +0,0 @@ -/* - * Copyright 2009 Hauke Mehrtens - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - * - * Compatibility file for Linux wireless for kernels 2.6.33. - */ - -#include -#include - -#if defined(CONFIG_PCCARD) || defined(CONFIG_PCCARD_MODULE) - -/** - * pccard_loop_tuple() - loop over tuples in the CIS - * @s: the struct pcmcia_socket where the card is inserted - * @function: the device function we loop for - * @code: which CIS code shall we look for? - * @parse: buffer where the tuple shall be parsed (or NULL, if no parse) - * @priv_data: private data to be passed to the loop_tuple function. - * @loop_tuple: function to call for each CIS entry of type @function. IT - * gets passed the raw tuple, the paresed tuple (if @parse is - * set) and @priv_data. - * - * pccard_loop_tuple() loops over all CIS entries of type @function, and - * calls the @loop_tuple function for each entry. If the call to @loop_tuple - * returns 0, the loop exits. Returns 0 on success or errorcode otherwise. - */ -int pccard_loop_tuple(struct pcmcia_socket *s, unsigned int function, - cisdata_t code, cisparse_t *parse, void *priv_data, - int (*loop_tuple) (tuple_t *tuple, - cisparse_t *parse, - void *priv_data)) -{ - tuple_t tuple; - cisdata_t *buf; - int ret; - - buf = kzalloc(256, GFP_KERNEL); - if (buf == NULL) { - dev_printk(KERN_WARNING, &s->dev, "no memory to read tuple\n"); - return -ENOMEM; - } - - tuple.TupleData = buf; - tuple.TupleDataMax = 255; - tuple.TupleOffset = 0; - tuple.DesiredTuple = code; - tuple.Attributes = 0; - - ret = pccard_get_first_tuple(s, function, &tuple); - while (!ret) { - if (pccard_get_tuple_data(s, &tuple)) - goto next_entry; - - if (parse) - if (pcmcia_parse_tuple(&tuple, parse)) - goto next_entry; - - ret = loop_tuple(&tuple, parse, priv_data); - if (!ret) - break; - -next_entry: - ret = pccard_get_next_tuple(s, function, &tuple); - } - - kfree(buf); - return ret; -} -EXPORT_SYMBOL_GPL(pccard_loop_tuple); -/* Source: drivers/pcmcia/cistpl.c */ - -#if defined(CONFIG_PCMCIA) || defined(CONFIG_PCMCIA_MODULE) - -struct pcmcia_loop_mem { - struct pcmcia_device *p_dev; - void *priv_data; - int (*loop_tuple) (struct pcmcia_device *p_dev, - tuple_t *tuple, - void *priv_data); -}; - -/** - * pcmcia_do_loop_tuple() - internal helper for pcmcia_loop_config() - * - * pcmcia_do_loop_tuple() is the internal callback for the call from - * pcmcia_loop_tuple() to pccard_loop_tuple(). Data is transferred - * by a struct pcmcia_cfg_mem. - */ -static int pcmcia_do_loop_tuple(tuple_t *tuple, cisparse_t *parse, void *priv) -{ - struct pcmcia_loop_mem *loop = priv; - - return loop->loop_tuple(loop->p_dev, tuple, loop->priv_data); -}; - -/** - * pcmcia_loop_tuple() - loop over tuples in the CIS - * @p_dev: the struct pcmcia_device which we need to loop for. - * @code: which CIS code shall we look for? - * @priv_data: private data to be passed to the loop_tuple function. - * @loop_tuple: function to call for each CIS entry of type @function. IT - * gets passed the raw tuple and @priv_data. - * - * pcmcia_loop_tuple() loops over all CIS entries of type @function, and - * calls the @loop_tuple function for each entry. If the call to @loop_tuple - * returns 0, the loop exits. Returns 0 on success or errorcode otherwise. - */ -int pcmcia_loop_tuple(struct pcmcia_device *p_dev, cisdata_t code, - int (*loop_tuple) (struct pcmcia_device *p_dev, - tuple_t *tuple, - void *priv_data), - void *priv_data) -{ - struct pcmcia_loop_mem loop = { - .p_dev = p_dev, - .loop_tuple = loop_tuple, - .priv_data = priv_data}; - - return pccard_loop_tuple(p_dev->socket, p_dev->func, code, NULL, - &loop, pcmcia_do_loop_tuple); -} -EXPORT_SYMBOL_GPL(pcmcia_loop_tuple); -/* Source: drivers/pcmcia/pcmcia_resource.c */ - -#endif /* CONFIG_PCMCIA */ - -#endif /* CONFIG_PCCARD */ - diff --git a/openairITS/mac/DOT11/compat/compat-2.6.35.c b/openairITS/mac/DOT11/compat/compat-2.6.35.c deleted file mode 100644 index 2455172227..0000000000 --- a/openairITS/mac/DOT11/compat/compat-2.6.35.c +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright 2010 Kshitij Kulshreshtha - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - * - * Compatibility file for Linux wireless for kernels 2.6.35. - */ - -#include -#include - -/** - * hex_to_bin - convert a hex digit to its real value - * @ch: ascii character represents hex digit - * - * hex_to_bin() converts one hex digit to its actual value or -1 in case of bad - * input. - */ -int compat_hex_to_bin(char ch) -{ - if ((ch >= '0') && (ch <= '9')) - return ch - '0'; - ch = tolower(ch); - if ((ch >= 'a') && (ch <= 'f')) - return ch - 'a' + 10; - return -1; -} -EXPORT_SYMBOL_GPL(compat_hex_to_bin); - -/** - * noop_llseek - No Operation Performed llseek implementation - * @file: file structure to seek on - * @offset: file offset to seek to - * @origin: type of seek - * - * This is an implementation of ->llseek useable for the rare special case when - * userspace expects the seek to succeed but the (device) file is actually not - * able to perform the seek. In this case you use noop_llseek() instead of - * falling back to the default implementation of ->llseek. - */ -loff_t noop_llseek(struct file *file, loff_t offset, int origin) -{ - return file->f_pos; -} -EXPORT_SYMBOL_GPL(noop_llseek); - diff --git a/openairITS/mac/DOT11/compat/compat-2.6.36.c b/openairITS/mac/DOT11/compat/compat-2.6.36.c deleted file mode 100644 index 9190ecd8b0..0000000000 --- a/openairITS/mac/DOT11/compat/compat-2.6.36.c +++ /dev/null @@ -1,185 +0,0 @@ -/* - * Copyright 2010 Hauke Mehrtens - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - * - * Compatibility file for Linux wireless for kernels 2.6.36. - */ - -#include -#include - -#ifdef CONFIG_COMPAT_USB_URB_THREAD_FIX -/* Callers must hold anchor->lock */ -static void __usb_unanchor_urb(struct urb *urb, struct usb_anchor *anchor) -{ - urb->anchor = NULL; - list_del(&urb->anchor_list); - usb_put_urb(urb); - if (list_empty(&anchor->urb_list)) - wake_up(&anchor->wait); -} - -/** - * usb_unlink_anchored_urbs - asynchronously cancel transfer requests en masse - * @anchor: anchor the requests are bound to - * - * this allows all outstanding URBs to be unlinked starting - * from the back of the queue. This function is asynchronous. - * The unlinking is just tiggered. It may happen after this - * function has returned. - * - * This routine should not be called by a driver after its disconnect - * method has returned. - */ -void compat_usb_unlink_anchored_urbs(struct usb_anchor *anchor) -{ - struct urb *victim; - - while ((victim = usb_get_from_anchor(anchor)) != NULL) { - usb_unlink_urb(victim); - usb_put_urb(victim); - } -} -EXPORT_SYMBOL_GPL(compat_usb_unlink_anchored_urbs); - -/** - * usb_get_from_anchor - get an anchor's oldest urb - * @anchor: the anchor whose urb you want - * - * this will take the oldest urb from an anchor, - * unanchor and return it - */ -struct urb *compat_usb_get_from_anchor(struct usb_anchor *anchor) -{ - struct urb *victim; - unsigned long flags; - - spin_lock_irqsave(&anchor->lock, flags); - if (!list_empty(&anchor->urb_list)) { - victim = list_entry(anchor->urb_list.next, struct urb, - anchor_list); - usb_get_urb(victim); - __usb_unanchor_urb(victim, anchor); - } else { - victim = NULL; - } - spin_unlock_irqrestore(&anchor->lock, flags); - - return victim; -} -EXPORT_SYMBOL_GPL(compat_usb_get_from_anchor); - -/** - * usb_scuttle_anchored_urbs - unanchor all an anchor's urbs - * @anchor: the anchor whose urbs you want to unanchor - * - * use this to get rid of all an anchor's urbs - */ -void compat_usb_scuttle_anchored_urbs(struct usb_anchor *anchor) -{ - struct urb *victim; - unsigned long flags; - - spin_lock_irqsave(&anchor->lock, flags); - while (!list_empty(&anchor->urb_list)) { - victim = list_entry(anchor->urb_list.prev, struct urb, - anchor_list); - __usb_unanchor_urb(victim, anchor); - } - spin_unlock_irqrestore(&anchor->lock, flags); -} -EXPORT_SYMBOL_GPL(compat_usb_scuttle_anchored_urbs); - -#endif /* CONFIG_COMPAT_USB_URB_THREAD_FIX */ - -struct workqueue_struct *system_wq __read_mostly; -struct workqueue_struct *system_long_wq __read_mostly; -struct workqueue_struct *system_nrt_wq __read_mostly; -EXPORT_SYMBOL_GPL(system_wq); -EXPORT_SYMBOL_GPL(system_long_wq); -EXPORT_SYMBOL_GPL(system_nrt_wq); - -int compat_schedule_work(struct work_struct *work) -{ - return queue_work(system_wq, work); -} -EXPORT_SYMBOL_GPL(compat_schedule_work); - -int compat_schedule_work_on(int cpu, struct work_struct *work) -{ -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,27)) - return queue_work_on(cpu, system_wq, work); -#else - return queue_work(system_wq, work); -#endif -} -EXPORT_SYMBOL_GPL(compat_schedule_work_on); - -int compat_schedule_delayed_work(struct delayed_work *dwork, - unsigned long delay) -{ - return queue_delayed_work(system_wq, dwork, delay); -} -EXPORT_SYMBOL_GPL(compat_schedule_delayed_work); - -int compat_schedule_delayed_work_on(int cpu, - struct delayed_work *dwork, - unsigned long delay) -{ - return queue_delayed_work_on(cpu, system_wq, dwork, delay); -} -EXPORT_SYMBOL_GPL(compat_schedule_delayed_work_on); - -void compat_flush_scheduled_work(void) -{ - /* - * It is debatable which one we should prioritize first, lets - * go with the old kernel's one first for now (keventd_wq) and - * if think its reasonable later we can flip this around. - */ - flush_workqueue(system_wq); - flush_scheduled_work(); -} -EXPORT_SYMBOL_GPL(compat_flush_scheduled_work); - -/** - * work_busy - test whether a work is currently pending or running - * @work: the work to be tested - * - * Test whether @work is currently pending or running. There is no - * synchronization around this function and the test result is - * unreliable and only useful as advisory hints or for debugging. - * Especially for reentrant wqs, the pending state might hide the - * running state. - * - * RETURNS: - * OR'd bitmask of WORK_BUSY_* bits. - */ -unsigned int work_busy(struct work_struct *work) -{ - unsigned int ret = 0; - - if (work_pending(work)) - ret |= WORK_BUSY_PENDING; - - return ret; -} -EXPORT_SYMBOL_GPL(work_busy); - -void compat_system_workqueue_create() -{ - system_wq = alloc_workqueue("events", 0, 0); - system_long_wq = alloc_workqueue("events_long", 0, 0); - system_nrt_wq = create_singlethread_workqueue("events_nrt"); - BUG_ON(!system_wq || !system_long_wq || !system_nrt_wq); -} - -void compat_system_workqueue_destroy() -{ - destroy_workqueue(system_wq); - destroy_workqueue(system_long_wq); - destroy_workqueue(system_nrt_wq); -} diff --git a/openairITS/mac/DOT11/compat/compat-2.6.37.c b/openairITS/mac/DOT11/compat/compat-2.6.37.c deleted file mode 100644 index 24b267a5be..0000000000 --- a/openairITS/mac/DOT11/compat/compat-2.6.37.c +++ /dev/null @@ -1,358 +0,0 @@ -/* - * Copyright 2010 Hauke Mehrtens - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - * - * Compatibility file for Linux wireless for kernels 2.6.37. - */ - -#include -#include -#include -#include -#include - -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35) -static const void *net_current_ns(void) -{ - return current->nsproxy->net_ns; -} - -static const void *net_initial_ns(void) -{ - return &init_net; -} - -static const void *net_netlink_ns(struct sock *sk) -{ - return sock_net(sk); -} - -struct kobj_ns_type_operations net_ns_type_operations = { - .type = KOBJ_NS_TYPE_NET, - .current_ns = net_current_ns, - .netlink_ns = net_netlink_ns, - .initial_ns = net_initial_ns, -}; -EXPORT_SYMBOL_GPL(net_ns_type_operations); - -#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35)*/ - -#undef genl_info -#undef genl_unregister_family - -static LIST_HEAD(compat_nl_fam); - -static struct genl_ops *genl_get_cmd(u8 cmd, struct genl_family *family) -{ - struct genl_ops *ops; - - list_for_each_entry(ops, &family->family.ops_list, ops.ops_list) - if (ops->cmd == cmd) - return ops; - - return NULL; -} - - -static int nl_doit_wrapper(struct sk_buff *skb, struct genl_info *info) -{ - struct compat_genl_info compat_info; - struct genl_family *family; - struct genl_ops *ops; - int err; - - list_for_each_entry(family, &compat_nl_fam, list) { - if (family->id == info->nlhdr->nlmsg_type) - goto found; - } - return -ENOENT; - -found: - ops = genl_get_cmd(info->genlhdr->cmd, family); - if (!ops) - return -ENOENT; - - memset(&compat_info.user_ptr, 0, sizeof(compat_info.user_ptr)); - compat_info.info = info; -#define __copy(_field) compat_info._field = info->_field - __copy(snd_seq); - __copy(snd_pid); - __copy(genlhdr); - __copy(attrs); -#undef __copy - if (family->pre_doit) { - err = family->pre_doit(ops, skb, &compat_info); - if (err) - return err; - } - - err = ops->doit(skb, &compat_info); - - if (family->post_doit) - family->post_doit(ops, skb, &compat_info); - - return err; -} - -int compat_genl_register_family_with_ops(struct genl_family *family, - struct genl_ops *ops, size_t n_ops) -{ - int i, ret; - -#define __copy(_field) family->family._field = family->_field - __copy(id); - __copy(hdrsize); - __copy(version); - __copy(maxattr); - strncpy(family->family.name, family->name, sizeof(family->family.name)); -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,32)) - __copy(netnsok); -#endif -#undef __copy - - ret = genl_register_family(&family->family); - if (ret < 0) - return ret; - - family->attrbuf = family->family.attrbuf; - family->id = family->family.id; - - for (i = 0; i < n_ops; i++) { -#define __copy(_field) ops[i].ops._field = ops[i]._field - __copy(cmd); - __copy(flags); - __copy(policy); - __copy(dumpit); - __copy(done); -#undef __copy - if (ops[i].doit) - ops[i].ops.doit = nl_doit_wrapper; - ret = genl_register_ops(&family->family, &ops[i].ops); - if (ret < 0) - goto error_ops; - } - list_add(&family->list, &compat_nl_fam); - - return ret; - -error_ops: - compat_genl_unregister_family(family); - return ret; -} -EXPORT_SYMBOL_GPL(compat_genl_register_family_with_ops); - -int compat_genl_unregister_family(struct genl_family *family) -{ - int err; - err = genl_unregister_family(&family->family); - list_del(&family->list); - return err; -} -EXPORT_SYMBOL_GPL(compat_genl_unregister_family); - -#if defined(CONFIG_LEDS_CLASS) || defined(CONFIG_LEDS_CLASS_MODULE) - -#undef led_brightness_set -#undef led_classdev_unregister - -static DEFINE_SPINLOCK(led_lock); -static LIST_HEAD(led_timers); - -struct led_timer { - struct list_head list; - struct led_classdev *cdev; - struct timer_list blink_timer; - unsigned long blink_delay_on; - unsigned long blink_delay_off; - int blink_brightness; -}; - -static void led_brightness_set(struct led_classdev *led_cdev, - enum led_brightness brightness) -{ - led_cdev->brightness = brightness; - led_cdev->brightness_set(led_cdev, brightness); -} - -static struct led_timer *led_get_timer(struct led_classdev *led_cdev) -{ - struct led_timer *p; - unsigned long flags; - - spin_lock_irqsave(&led_lock, flags); - list_for_each_entry(p, &led_timers, list) { - if (p->cdev == led_cdev) - goto found; - } - p = NULL; -found: - spin_unlock_irqrestore(&led_lock, flags); - return p; -} - -static void led_stop_software_blink(struct led_timer *led) -{ - del_timer_sync(&led->blink_timer); - led->blink_delay_on = 0; - led->blink_delay_off = 0; -} - -static void led_timer_function(unsigned long data) -{ - struct led_timer *led = (struct led_timer *)data; - unsigned long brightness; - unsigned long delay; - - if (!led->blink_delay_on || !led->blink_delay_off) { - led->cdev->brightness_set(led->cdev, LED_OFF); - return; - } - - brightness = led->cdev->brightness; - if (!brightness) { - /* Time to switch the LED on. */ - brightness = led->blink_brightness; - delay = led->blink_delay_on; - } else { - /* Store the current brightness value to be able - * to restore it when the delay_off period is over. - */ - led->blink_brightness = brightness; - brightness = LED_OFF; - delay = led->blink_delay_off; - } - - led_brightness_set(led->cdev, brightness); - mod_timer(&led->blink_timer, jiffies + msecs_to_jiffies(delay)); -} - -static struct led_timer *led_new_timer(struct led_classdev *led_cdev) -{ - struct led_timer *led; - unsigned long flags; - - led = kzalloc(sizeof(struct led_timer), GFP_ATOMIC); - if (!led) - return NULL; - - led->cdev = led_cdev; - init_timer(&led->blink_timer); - led->blink_timer.function = led_timer_function; - led->blink_timer.data = (unsigned long) led; - - spin_lock_irqsave(&led_lock, flags); - list_add(&led->list, &led_timers); - spin_unlock_irqrestore(&led_lock, flags); - - return led; -} - -void led_blink_set(struct led_classdev *led_cdev, - unsigned long *delay_on, - unsigned long *delay_off) -{ - struct led_timer *led; - int current_brightness; - -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,25)) - if (led_cdev->blink_set && - !led_cdev->blink_set(led_cdev, delay_on, delay_off)) - return; -#endif - - led = led_get_timer(led_cdev); - if (!led) { - led = led_new_timer(led_cdev); - if (!led) - return; - } - - /* blink with 1 Hz as default if nothing specified */ - if (!*delay_on && !*delay_off) - *delay_on = *delay_off = 500; - - if (led->blink_delay_on == *delay_on && - led->blink_delay_off == *delay_off) - return; - - current_brightness = led_cdev->brightness; - if (current_brightness) - led->blink_brightness = current_brightness; - if (!led->blink_brightness) -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,30) - led->blink_brightness = led_cdev->max_brightness; -#else - led->blink_brightness = LED_FULL; -#endif - - led_stop_software_blink(led); - led->blink_delay_on = *delay_on; - led->blink_delay_off = *delay_off; - - /* never on - don't blink */ - if (!*delay_on) - return; - - /* never off - just set to brightness */ - if (!*delay_off) { - led_brightness_set(led_cdev, led->blink_brightness); - return; - } - - mod_timer(&led->blink_timer, jiffies + 1); -} -EXPORT_SYMBOL_GPL(led_blink_set); - -void compat_led_brightness_set(struct led_classdev *led_cdev, - enum led_brightness brightness) -{ - struct led_timer *led = led_get_timer(led_cdev); - - if (led) - led_stop_software_blink(led); - - return led_cdev->brightness_set(led_cdev, brightness); -} -EXPORT_SYMBOL_GPL(compat_led_brightness_set); - -void compat_led_classdev_unregister(struct led_classdev *led_cdev) -{ - struct led_timer *led = led_get_timer(led_cdev); - unsigned long flags; - - if (led) { - del_timer_sync(&led->blink_timer); - spin_lock_irqsave(&led_lock, flags); - list_del(&led->list); - spin_unlock_irqrestore(&led_lock, flags); - kfree(led); - } - - led_classdev_unregister(led_cdev); -} -EXPORT_SYMBOL_GPL(compat_led_classdev_unregister); - -/** - * vzalloc - allocate virtually contiguous memory with zero fill - * @size: allocation size - * Allocate enough pages to cover @size from the page level - * allocator and map them into contiguous kernel virtual space. - * The memory allocated is set to zero. - * - * For tight control over page level allocator and protection flags - * use __vmalloc() instead. - */ -void *compat_vzalloc(unsigned long size) -{ - void *buf; - buf = vmalloc(size); - if (buf) - memset(buf, 0, size); - return buf; -} -EXPORT_SYMBOL_GPL(compat_vzalloc); - -#endif diff --git a/openairITS/mac/DOT11/compat/compat-2.6.38.c b/openairITS/mac/DOT11/compat/compat-2.6.38.c deleted file mode 100644 index 0074ac6252..0000000000 --- a/openairITS/mac/DOT11/compat/compat-2.6.38.c +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright 2010 Hauke Mehrtens - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - * - * Compatibility file for Linux wireless for kernels 2.6.38. - */ - -#include -#include -#include - -/** - * ewma_init() - Initialize EWMA parameters - * @avg: Average structure - * @factor: Factor to use for the scaled up internal value. The maximum value - * of averages can be ULONG_MAX/(factor*weight). - * @weight: Exponential weight, or decay rate. This defines how fast the - * influence of older values decreases. Has to be bigger than 1. - * - * Initialize the EWMA parameters for a given struct ewma @avg. - */ -void ewma_init(struct ewma *avg, unsigned long factor, unsigned long weight) -{ - WARN_ON(weight <= 1 || factor == 0); - avg->internal = 0; - avg->weight = weight; - avg->factor = factor; -} -EXPORT_SYMBOL_GPL(ewma_init); - -/** - * ewma_add() - Exponentially weighted moving average (EWMA) - * @avg: Average structure - * @val: Current value - * - * Add a sample to the average. - */ -struct ewma *ewma_add(struct ewma *avg, unsigned long val) -{ - avg->internal = avg->internal ? - (((avg->internal * (avg->weight - 1)) + - (val * avg->factor)) / avg->weight) : - (val * avg->factor); - return avg; -} -EXPORT_SYMBOL_GPL(ewma_add); - diff --git a/openairITS/mac/DOT11/compat/compat-2.6.39.c b/openairITS/mac/DOT11/compat/compat-2.6.39.c deleted file mode 100644 index 5bb932218d..0000000000 --- a/openairITS/mac/DOT11/compat/compat-2.6.39.c +++ /dev/null @@ -1,114 +0,0 @@ -/* - * Copyright 2011 Hauke Mehrtens - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - * - * Compatibility file for Linux wireless for kernels 2.6.39. - */ - -#include -#include -#include - -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,27)) -/* - * Termios Helper Methods - */ -static void unset_locked_termios(struct ktermios *termios, - struct ktermios *old, - struct ktermios *locked) -{ - int i; - -#define NOSET_MASK(x, y, z) (x = ((x) & ~(z)) | ((y) & (z))) - - if (!locked) { - printk(KERN_WARNING "Warning?!? termios_locked is NULL.\n"); - return; - } - - NOSET_MASK(termios->c_iflag, old->c_iflag, locked->c_iflag); - NOSET_MASK(termios->c_oflag, old->c_oflag, locked->c_oflag); - NOSET_MASK(termios->c_cflag, old->c_cflag, locked->c_cflag); - NOSET_MASK(termios->c_lflag, old->c_lflag, locked->c_lflag); - termios->c_line = locked->c_line ? old->c_line : termios->c_line; - for (i = 0; i < NCCS; i++) - termios->c_cc[i] = locked->c_cc[i] ? - old->c_cc[i] : termios->c_cc[i]; - /* FIXME: What should we do for i/ospeed */ -} - -/** - * tty_set_termios - update termios values - * @tty: tty to update - * @new_termios: desired new value - * - * Perform updates to the termios values set on this terminal. There - * is a bit of layering violation here with n_tty in terms of the - * internal knowledge of this function. - * - * Locking: termios_mutex - */ -int tty_set_termios(struct tty_struct *tty, struct ktermios *new_termios) -{ - struct ktermios old_termios; - struct tty_ldisc *ld; - unsigned long flags; - - /* - * Perform the actual termios internal changes under lock. - */ - - - /* FIXME: we need to decide on some locking/ordering semantics - for the set_termios notification eventually */ - mutex_lock(&tty->termios_mutex); - old_termios = *tty->termios; - *tty->termios = *new_termios; - unset_locked_termios(tty->termios, &old_termios, tty->termios_locked); - - /* See if packet mode change of state. */ - if (tty->link && tty->link->packet) { - int extproc = (old_termios.c_lflag & EXTPROC) | - (tty->termios->c_lflag & EXTPROC); - int old_flow = ((old_termios.c_iflag & IXON) && - (old_termios.c_cc[VSTOP] == '\023') && - (old_termios.c_cc[VSTART] == '\021')); - int new_flow = (I_IXON(tty) && - STOP_CHAR(tty) == '\023' && - START_CHAR(tty) == '\021'); - if ((old_flow != new_flow) || extproc) { - spin_lock_irqsave(&tty->ctrl_lock, flags); - if (old_flow != new_flow) { - tty->ctrl_status &= ~(TIOCPKT_DOSTOP | TIOCPKT_NOSTOP); - if (new_flow) - tty->ctrl_status |= TIOCPKT_DOSTOP; - else - tty->ctrl_status |= TIOCPKT_NOSTOP; - } - if (extproc) - tty->ctrl_status |= TIOCPKT_IOCTL; - spin_unlock_irqrestore(&tty->ctrl_lock, flags); - wake_up_interruptible(&tty->link->read_wait); - } - } - - if (tty->ops->set_termios) - (*tty->ops->set_termios)(tty, &old_termios); - else - tty_termios_copy_hw(tty->termios, &old_termios); - - ld = tty_ldisc_ref(tty); - if (ld != NULL) { - if (ld->ops->set_termios) - (ld->ops->set_termios)(tty, &old_termios); - tty_ldisc_deref(ld); - } - mutex_unlock(&tty->termios_mutex); - return 0; -} -EXPORT_SYMBOL_GPL(tty_set_termios); -#endif /* (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,27)) */ - diff --git a/openairITS/mac/DOT11/compat/compat-3.0.c b/openairITS/mac/DOT11/compat/compat-3.0.c deleted file mode 100644 index 1da45ac12b..0000000000 --- a/openairITS/mac/DOT11/compat/compat-3.0.c +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright 2011 Hauke Mehrtens - * Copyright 2011 Alexey Dobriyan - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - * - * Compatibility file for Linux wireless for kernels 3.0. - */ - -#include -#include - -int mac_pton(const char *s, u8 *mac) -{ - int i; - - /* XX:XX:XX:XX:XX:XX */ - if (strlen(s) < 3 * ETH_ALEN - 1) - return 0; - - /* Don't dirty result unless string is valid MAC. */ - for (i = 0; i < ETH_ALEN; i++) { - if (!strchr("0123456789abcdefABCDEF", s[i * 3])) - return 0; - if (!strchr("0123456789abcdefABCDEF", s[i * 3 + 1])) - return 0; - if (i != ETH_ALEN - 1 && s[i * 3 + 2] != ':') - return 0; - } - for (i = 0; i < ETH_ALEN; i++) { - mac[i] = (hex_to_bin(s[i * 3]) << 4) | hex_to_bin(s[i * 3 + 1]); - } - return 1; -} -EXPORT_SYMBOL_GPL(mac_pton); - -#define kstrto_from_user(f, g, type) \ -int f(const char __user *s, size_t count, unsigned int base, type *res) \ -{ \ - /* sign, base 2 representation, newline, terminator */ \ - char buf[1 + sizeof(type) * 8 + 1 + 1]; \ - \ - count = min(count, sizeof(buf) - 1); \ - if (copy_from_user(buf, s, count)) \ - return -EFAULT; \ - buf[count] = '\0'; \ - return g(buf, base, res); \ -} \ -EXPORT_SYMBOL_GPL(f) - -kstrto_from_user(kstrtoull_from_user, kstrtoull, unsigned long long); -kstrto_from_user(kstrtoll_from_user, kstrtoll, long long); -kstrto_from_user(kstrtoul_from_user, kstrtoul, unsigned long); -kstrto_from_user(kstrtol_from_user, kstrtol, long); -kstrto_from_user(kstrtouint_from_user, kstrtouint, unsigned int); -kstrto_from_user(kstrtoint_from_user, kstrtoint, int); -kstrto_from_user(kstrtou16_from_user, kstrtou16, u16); -kstrto_from_user(kstrtos16_from_user, kstrtos16, s16); -kstrto_from_user(kstrtou8_from_user, kstrtou8, u8); -kstrto_from_user(kstrtos8_from_user, kstrtos8, s8); diff --git a/openairITS/mac/DOT11/compat/compat-3.2.c b/openairITS/mac/DOT11/compat/compat-3.2.c deleted file mode 100644 index 55ae6af0f9..0000000000 --- a/openairITS/mac/DOT11/compat/compat-3.2.c +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright 2012 Luis R. Rodriguez - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - * - * Compatibility file for Linux wireless for kernels 3.2. - */ - -#include -#include - -int __netdev_printk(const char *level, const struct net_device *dev, - struct va_format *vaf) -{ - int r; - - if (dev && dev->dev.parent) -#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,35)) - r = dev_printk(level, dev->dev.parent, "%s: %pV", - netdev_name(dev), vaf); -#else - /* XXX: this could likely be done better but I'm lazy */ - r = printk("%s%s: %pV", level, netdev_name(dev), vaf); -#endif - else if (dev) - r = printk("%s%s: %pV", level, netdev_name(dev), vaf); - else - r = printk("%s(NULL net_device): %pV", level, vaf); - - return r; -} -EXPORT_SYMBOL_GPL(__netdev_printk); diff --git a/openairITS/mac/DOT11/compat/compat-3.3.c b/openairITS/mac/DOT11/compat/compat-3.3.c deleted file mode 100644 index 8489344614..0000000000 --- a/openairITS/mac/DOT11/compat/compat-3.3.c +++ /dev/null @@ -1,173 +0,0 @@ -/* - * Copyright 2012 Luis R. Rodriguez - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - * - * Compatibility file for Linux wireless for kernels 3.3. - */ - -#include -#include -#include -#include -#include -#include - -static void __copy_skb_header(struct sk_buff *new, const struct sk_buff *old) -{ - new->tstamp = old->tstamp; - new->dev = old->dev; - new->transport_header = old->transport_header; - new->network_header = old->network_header; - new->mac_header = old->mac_header; -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35)) - skb_dst_copy(new, old); - new->rxhash = old->rxhash; -#else - skb_dst_set(new, dst_clone(skb_dst(old))); -#endif -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,1,0)) - new->ooo_okay = old->ooo_okay; -#endif -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,2,0)) - new->l4_rxhash = old->l4_rxhash; -#endif -#ifdef CONFIG_XFRM - new->sp = secpath_get(old->sp); -#endif - memcpy(new->cb, old->cb, sizeof(old->cb)); - new->csum = old->csum; - new->local_df = old->local_df; - new->pkt_type = old->pkt_type; - new->ip_summed = old->ip_summed; - skb_copy_queue_mapping(new, old); - new->priority = old->priority; -#if IS_ENABLED(CONFIG_IP_VS) - new->ipvs_property = old->ipvs_property; -#endif - new->protocol = old->protocol; - new->mark = old->mark; -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,33)) - new->skb_iif = old->skb_iif; -#endif - __nf_copy(new, old); -#if IS_ENABLED(CONFIG_NETFILTER_XT_TARGET_TRACE) - new->nf_trace = old->nf_trace; -#endif -#ifdef CONFIG_NET_SCHED - new->tc_index = old->tc_index; -#ifdef CONFIG_NET_CLS_ACT - new->tc_verd = old->tc_verd; -#endif -#endif -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,27)) - new->vlan_tci = old->vlan_tci; -#endif - - skb_copy_secmark(new, old); -} - -static void copy_skb_header(struct sk_buff *new, const struct sk_buff *old) -{ -#ifndef NET_SKBUFF_DATA_USES_OFFSET - /* - * Shift between the two data areas in bytes - */ - unsigned long offset = new->data - old->data; -#endif - - __copy_skb_header(new, old); - -#ifndef NET_SKBUFF_DATA_USES_OFFSET - /* {transport,network,mac}_header are relative to skb->head */ - new->transport_header += offset; - new->network_header += offset; - if (skb_mac_header_was_set(new)) - new->mac_header += offset; -#endif - skb_shinfo(new)->gso_size = skb_shinfo(old)->gso_size; - skb_shinfo(new)->gso_segs = skb_shinfo(old)->gso_segs; - skb_shinfo(new)->gso_type = skb_shinfo(old)->gso_type; -} - -static void skb_clone_fraglist(struct sk_buff *skb) -{ - struct sk_buff *list; - - skb_walk_frags(skb, list) - skb_get(list); -} - - -/** - * __pskb_copy - create copy of an sk_buff with private head. - * @skb: buffer to copy - * @headroom: headroom of new skb - * @gfp_mask: allocation priority - * - * Make a copy of both an &sk_buff and part of its data, located - * in header. Fragmented data remain shared. This is used when - * the caller wishes to modify only header of &sk_buff and needs - * private copy of the header to alter. Returns %NULL on failure - * or the pointer to the buffer on success. - * The returned buffer has a reference count of 1. - */ - -struct sk_buff *__pskb_copy(struct sk_buff *skb, int headroom, gfp_t gfp_mask) -{ - unsigned int size = skb_headlen(skb) + headroom; - struct sk_buff *n = alloc_skb(size, gfp_mask); - - if (!n) - goto out; - - /* Set the data pointer */ - skb_reserve(n, headroom); - /* Set the tail pointer and length */ - skb_put(n, skb_headlen(skb)); - /* Copy the bytes */ - skb_copy_from_linear_data(skb, n->data, n->len); - - n->truesize += skb->data_len; - n->data_len = skb->data_len; - n->len = skb->len; - - if (skb_shinfo(skb)->nr_frags) { - int i; - -/* - * SKBTX_DEV_ZEROCOPY was added on 3.1 as well but requires ubuf - * stuff added to the skb which we do not have - */ -#if 0 - if (skb_shinfo(skb)->tx_flags & SKBTX_DEV_ZEROCOPY) { - if (skb_copy_ubufs(skb, gfp_mask)) { - kfree_skb(n); - n = NULL; - goto out; - } - } -#endif - for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) { - skb_shinfo(n)->frags[i] = skb_shinfo(skb)->frags[i]; -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,2,0)) - skb_frag_ref(skb, i); -#else - get_page(skb_shinfo(skb)->frags[i].page); -#endif - } - skb_shinfo(n)->nr_frags = i; - } - - if (skb_has_frag_list(skb)) { - skb_shinfo(n)->frag_list = skb_shinfo(skb)->frag_list; - skb_clone_fraglist(n); - } - - copy_skb_header(n, skb); -out: - return n; -} -EXPORT_SYMBOL_GPL(__pskb_copy); diff --git a/openairITS/mac/DOT11/compat/compat-3.5.c b/openairITS/mac/DOT11/compat/compat-3.5.c deleted file mode 100644 index 5d516f0ebf..0000000000 --- a/openairITS/mac/DOT11/compat/compat-3.5.c +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Copyright 2012 Luis R. Rodriguez - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - * - * Compatibility file for Linux wireless for kernels 3.5. - */ - -#include -#include - -int simple_open(struct inode *inode, struct file *file) -{ - if (inode->i_private) - file->private_data = inode->i_private; - return 0; -} -EXPORT_SYMBOL_GPL(simple_open); diff --git a/openairITS/mac/DOT11/compat/compat_atomic.c b/openairITS/mac/DOT11/compat/compat_atomic.c deleted file mode 100644 index b8565aa5b2..0000000000 --- a/openairITS/mac/DOT11/compat/compat_atomic.c +++ /dev/null @@ -1,33 +0,0 @@ -#include -#include - -#if !((LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,31)) && (defined(CONFIG_UML) || defined(CONFIG_X86))) && !((LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,33)) && defined(CONFIG_ARM) && !defined(CONFIG_GENERIC_ATOMIC64)) - -static DEFINE_SPINLOCK(lock); - -long long atomic64_read(const atomic64_t *v) -{ - unsigned long flags; - long long val; - - spin_lock_irqsave(&lock, flags); - val = v->counter; - spin_unlock_irqrestore(&lock, flags); - return val; -} -EXPORT_SYMBOL_GPL(atomic64_read); - -long long atomic64_add_return(long long a, atomic64_t *v) -{ - unsigned long flags; - long long val; - - spin_lock_irqsave(&lock, flags); - val = v->counter += a; - spin_unlock_irqrestore(&lock, flags); - return val; -} -EXPORT_SYMBOL_GPL(atomic64_add_return); - -#endif - diff --git a/openairITS/mac/DOT11/compat/compat_firmware_class.c b/openairITS/mac/DOT11/compat/compat_firmware_class.c deleted file mode 100644 index 69b442b7d2..0000000000 --- a/openairITS/mac/DOT11/compat/compat_firmware_class.c +++ /dev/null @@ -1,759 +0,0 @@ -/* - * firmware_class.c - Multi purpose firmware loading support - * - * Copyright (c) 2003 Manuel Estrada Sainz - * - * Please see Documentation/firmware_class/ for more information. - * - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#define compat_firmware_to_dev(obj) container_of(obj, struct device, kobj) - -MODULE_AUTHOR("Manuel Estrada Sainz"); -MODULE_DESCRIPTION("Multi purpose firmware loading support"); -MODULE_LICENSE("GPL"); - -/* Builtin firmware support */ - -//#ifdef CONFIG_FW_LOADER -#if 0 - -extern struct builtin_fw __start_builtin_fw[]; -extern struct builtin_fw __end_builtin_fw[]; - -static bool fw_get_builtin_firmware(struct firmware *fw, const char *name) -{ - struct builtin_fw *b_fw; - - for (b_fw = __start_builtin_fw; b_fw != __end_builtin_fw; b_fw++) { - if (strcmp(name, b_fw->name) == 0) { - fw->size = b_fw->size; - fw->data = b_fw->data; - return true; - } - } - - return false; -} - -static bool fw_is_builtin_firmware(const struct firmware *fw) -{ - struct builtin_fw *b_fw; - - for (b_fw = __start_builtin_fw; b_fw != __end_builtin_fw; b_fw++) - if (fw->data == b_fw->data) - return true; - - return false; -} - -#else /* Module case - no builtin firmware support */ - -static inline bool fw_get_builtin_firmware(struct firmware *fw, const char *name) -{ - return false; -} - -static inline bool fw_is_builtin_firmware(const struct firmware *fw) -{ - return false; -} -#endif - -enum { - FW_STATUS_LOADING, - FW_STATUS_DONE, - FW_STATUS_ABORT, -}; - -static int loading_timeout = 60; /* In seconds */ - -/* fw_lock could be moved to 'struct firmware_priv' but since it is just - * guarding for corner cases a global lock should be OK */ -static DEFINE_MUTEX(fw_lock); - -struct firmware_priv { - struct completion completion; - struct firmware *fw; - unsigned long status; - struct page **pages; - int nr_pages; - int page_array_size; - struct timer_list timeout; - struct device dev; - bool nowait; - char fw_id[]; -}; - -static struct firmware_priv *to_firmware_priv(struct device *dev) -{ - return container_of(dev, struct firmware_priv, dev); -} - -static void fw_load_abort(struct firmware_priv *fw_priv) -{ - set_bit(FW_STATUS_ABORT, &fw_priv->status); - wmb(); - complete(&fw_priv->completion); -} - -static ssize_t firmware_timeout_show(struct class *class, - char *buf) -{ - return sprintf(buf, "%d\n", loading_timeout); -} - -/** - * firmware_timeout_store - set number of seconds to wait for firmware - * @class: device class pointer - * @buf: buffer to scan for timeout value - * @count: number of bytes in @buf - * - * Sets the number of seconds to wait for the firmware. Once - * this expires an error will be returned to the driver and no - * firmware will be provided. - * - * Note: zero means 'wait forever'. - **/ -static ssize_t firmware_timeout_store(struct class *class, - const char *buf, size_t count) -{ - loading_timeout = simple_strtol(buf, NULL, 10); - if (loading_timeout < 0) - loading_timeout = 0; - - return count; -} - -static struct class_attribute firmware_class_attrs[] = { - __ATTR(timeout, S_IWUSR | S_IRUGO, - firmware_timeout_show, firmware_timeout_store), - __ATTR_NULL -}; - -static void fw_dev_release(struct device *dev) -{ - struct firmware_priv *fw_priv = to_firmware_priv(dev); - int i; - - for (i = 0; i < fw_priv->nr_pages; i++) - __free_page(fw_priv->pages[i]); - kfree(fw_priv->pages); - kfree(fw_priv); - - module_put(THIS_MODULE); -} - -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24)) -static int firmware_uevent(struct device *dev, struct kobj_uevent_env *env) -{ - struct firmware_priv *fw_priv = to_firmware_priv(dev); - - if (add_uevent_var(env, "FIRMWARE=%s", fw_priv->fw_id)) - return -ENOMEM; - if (add_uevent_var(env, "TIMEOUT=%i", loading_timeout)) - return -ENOMEM; - if (add_uevent_var(env, "ASYNC=%d", fw_priv->nowait)) - return -ENOMEM; - - return 0; -} -#else -static int firmware_uevent(struct device *dev, char **envp, - int num_envp, char *buf, int size) -{ - struct firmware_priv *fw_priv = to_firmware_priv(dev); - int error, len = 0, i = 0; - - error = add_uevent_var(envp, num_envp, &i, - buf, size, &len, - "FIRMWARE=%s", fw_priv->fw_id); - if (error) - goto exit; - - error = add_uevent_var(envp, num_envp, &i, - buf, size, &len, - "TIMEOUT=%i", loading_timeout); - if (error) - goto exit; - error = add_uevent_var(envp, num_envp, &i, - buf, size, &len, - "ASYNC=%i", fw_priv->nowait); - if (error) - goto exit; - - return 0; -exit: - envp[i] = NULL; - return error; -} -#endif - -static struct class firmware_class = { - .name = "compat_firmware", - .class_attrs = firmware_class_attrs, - .dev_uevent = firmware_uevent, - .dev_release = fw_dev_release, -}; - -static ssize_t firmware_loading_show(struct device *dev, - struct device_attribute *attr, char *buf) -{ - struct firmware_priv *fw_priv = to_firmware_priv(dev); - int loading = test_bit(FW_STATUS_LOADING, &fw_priv->status); - - return sprintf(buf, "%d\n", loading); -} - -static void firmware_free_data(const struct firmware *fw) -{ -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35)) - int i; - vunmap(fw->data); - if (fw->pages) { - for (i = 0; i < PFN_UP(fw->size); i++) - __free_page(fw->pages[i]); - kfree(fw->pages); - } -#else - vunmap(fw->data); -#endif -} - -/* Some architectures don't have PAGE_KERNEL_RO */ -#ifndef PAGE_KERNEL_RO -#define PAGE_KERNEL_RO PAGE_KERNEL -#endif -/** - * firmware_loading_store - set value in the 'loading' control file - * @dev: device pointer - * @buf: buffer to scan for loading control value - * @count: number of bytes in @buf - * - * The relevant values are: - * - * 1: Start a load, discarding any previous partial load. - * 0: Conclude the load and hand the data to the driver code. - * -1: Conclude the load with an error and discard any written data. - **/ -static ssize_t firmware_loading_store(struct device *dev, - struct device_attribute *attr, - const char *buf, size_t count) -{ - struct firmware_priv *fw_priv = to_firmware_priv(dev); - int loading = simple_strtol(buf, NULL, 10); - int i; - - switch (loading) { - case 1: - mutex_lock(&fw_lock); - if (!fw_priv->fw) { - mutex_unlock(&fw_lock); - break; - } - firmware_free_data(fw_priv->fw); - memset(fw_priv->fw, 0, sizeof(struct firmware)); - /* If the pages are not owned by 'struct firmware' */ - for (i = 0; i < fw_priv->nr_pages; i++) - __free_page(fw_priv->pages[i]); - kfree(fw_priv->pages); - fw_priv->pages = NULL; - fw_priv->page_array_size = 0; - fw_priv->nr_pages = 0; - set_bit(FW_STATUS_LOADING, &fw_priv->status); - mutex_unlock(&fw_lock); - break; - case 0: - if (test_bit(FW_STATUS_LOADING, &fw_priv->status)) { - vunmap(fw_priv->fw->data); - fw_priv->fw->data = vmap(fw_priv->pages, - fw_priv->nr_pages, - 0, PAGE_KERNEL_RO); - if (!fw_priv->fw->data) { - dev_err(dev, "%s: vmap() failed\n", __func__); - goto err; - } - /* Pages are now owned by 'struct firmware' */ -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35)) - fw_priv->fw->pages = fw_priv->pages; - fw_priv->pages = NULL; -#endif - - fw_priv->page_array_size = 0; - fw_priv->nr_pages = 0; - complete(&fw_priv->completion); - clear_bit(FW_STATUS_LOADING, &fw_priv->status); - break; - } - /* fallthrough */ - default: - dev_err(dev, "%s: unexpected value (%d)\n", __func__, loading); - /* fallthrough */ - case -1: - err: - fw_load_abort(fw_priv); - break; - } - - return count; -} - -static DEVICE_ATTR(loading, 0644, firmware_loading_show, firmware_loading_store); - -#if defined(CONFIG_COMPAT_FIRMWARE_DATA_RW_NEEDS_FILP) -static ssize_t firmware_data_read(struct file *filp, struct kobject *kobj, - struct bin_attribute *bin_attr, - char *buffer, loff_t offset, size_t count) -#else -static ssize_t firmware_data_read(struct kobject *kobj, - struct bin_attribute *bin_attr, - char *buffer, loff_t offset, size_t count) -#endif -{ - struct device *dev = compat_firmware_to_dev(kobj); - struct firmware_priv *fw_priv = to_firmware_priv(dev); - struct firmware *fw; - ssize_t ret_count; - - mutex_lock(&fw_lock); - fw = fw_priv->fw; - if (!fw || test_bit(FW_STATUS_DONE, &fw_priv->status)) { - ret_count = -ENODEV; - goto out; - } - if (offset > fw->size) { - ret_count = 0; - goto out; - } - if (count > fw->size - offset) - count = fw->size - offset; - - ret_count = count; - - while (count) { - void *page_data; - int page_nr = offset >> PAGE_SHIFT; - int page_ofs = offset & (PAGE_SIZE-1); - int page_cnt = min_t(size_t, PAGE_SIZE - page_ofs, count); - - page_data = kmap(fw_priv->pages[page_nr]); - - memcpy(buffer, page_data + page_ofs, page_cnt); - - kunmap(fw_priv->pages[page_nr]); - buffer += page_cnt; - offset += page_cnt; - count -= page_cnt; - } -out: - mutex_unlock(&fw_lock); - return ret_count; -} - -static int fw_realloc_buffer(struct firmware_priv *fw_priv, int min_size) -{ - int pages_needed = ALIGN(min_size, PAGE_SIZE) >> PAGE_SHIFT; - - /* If the array of pages is too small, grow it... */ - if (fw_priv->page_array_size < pages_needed) { - int new_array_size = max(pages_needed, - fw_priv->page_array_size * 2); - struct page **new_pages; - - new_pages = kmalloc(new_array_size * sizeof(void *), - GFP_KERNEL); - if (!new_pages) { - fw_load_abort(fw_priv); - return -ENOMEM; - } - memcpy(new_pages, fw_priv->pages, - fw_priv->page_array_size * sizeof(void *)); - memset(&new_pages[fw_priv->page_array_size], 0, sizeof(void *) * - (new_array_size - fw_priv->page_array_size)); - kfree(fw_priv->pages); - fw_priv->pages = new_pages; - fw_priv->page_array_size = new_array_size; - } - - while (fw_priv->nr_pages < pages_needed) { - fw_priv->pages[fw_priv->nr_pages] = - alloc_page(GFP_KERNEL | __GFP_HIGHMEM); - - if (!fw_priv->pages[fw_priv->nr_pages]) { - fw_load_abort(fw_priv); - return -ENOMEM; - } - fw_priv->nr_pages++; - } - return 0; -} - -/** - * firmware_data_write - write method for firmware - * @kobj: kobject for the device - * @bin_attr: bin_attr structure - * @buffer: buffer being written - * @offset: buffer offset for write in total data store area - * @count: buffer size - * - * Data written to the 'data' attribute will be later handed to - * the driver as a firmware image. - **/ -#if defined(CONFIG_COMPAT_FIRMWARE_DATA_RW_NEEDS_FILP) -static ssize_t firmware_data_write(struct file *filp, struct kobject *kobj, - struct bin_attribute *bin_attr, - char *buffer, loff_t offset, size_t count) -#else -static ssize_t firmware_data_write(struct kobject *kobj, - struct bin_attribute *bin_attr, - char *buffer, loff_t offset, size_t count) -#endif -{ - struct device *dev = compat_firmware_to_dev(kobj); - struct firmware_priv *fw_priv = to_firmware_priv(dev); - struct firmware *fw; - ssize_t retval; - - if (!capable(CAP_SYS_RAWIO)) - return -EPERM; - - mutex_lock(&fw_lock); - fw = fw_priv->fw; - if (!fw || test_bit(FW_STATUS_DONE, &fw_priv->status)) { - retval = -ENODEV; - goto out; - } - retval = fw_realloc_buffer(fw_priv, offset + count); - if (retval) - goto out; - - retval = count; - - while (count) { - void *page_data; - int page_nr = offset >> PAGE_SHIFT; - int page_ofs = offset & (PAGE_SIZE - 1); - int page_cnt = min_t(size_t, PAGE_SIZE - page_ofs, count); - - page_data = kmap(fw_priv->pages[page_nr]); - - memcpy(page_data + page_ofs, buffer, page_cnt); - - kunmap(fw_priv->pages[page_nr]); - buffer += page_cnt; - offset += page_cnt; - count -= page_cnt; - } - - fw->size = max_t(size_t, offset, fw->size); -out: - mutex_unlock(&fw_lock); - return retval; -} - -static struct bin_attribute firmware_attr_data = { - .attr = { .name = "data", .mode = 0644 }, - .size = 0, - .read = firmware_data_read, - .write = firmware_data_write, -}; - -static void firmware_class_timeout(u_long data) -{ - struct firmware_priv *fw_priv = (struct firmware_priv *) data; - - fw_load_abort(fw_priv); -} - -static struct firmware_priv * -fw_create_instance(struct firmware *firmware, const char *fw_name, - struct device *device, bool uevent, bool nowait) -{ - struct firmware_priv *fw_priv; - struct device *f_dev; - int error; - - fw_priv = kzalloc(sizeof(*fw_priv) + strlen(fw_name) + 1 , GFP_KERNEL); - if (!fw_priv) { - dev_err(device, "%s: kmalloc failed\n", __func__); - error = -ENOMEM; - goto err_out; - } - - fw_priv->fw = firmware; - fw_priv->nowait = nowait; - strcpy(fw_priv->fw_id, fw_name); - init_completion(&fw_priv->completion); - setup_timer(&fw_priv->timeout, - firmware_class_timeout, (u_long) fw_priv); - - f_dev = &fw_priv->dev; - - device_initialize(f_dev); - dev_set_name(f_dev, "%s", dev_name(device)); - f_dev->parent = device; - f_dev->class = &firmware_class; - - dev_set_uevent_suppress(f_dev, true); - - /* Need to pin this module until class device is destroyed */ - __module_get(THIS_MODULE); - - error = device_add(f_dev); - if (error) { - dev_err(device, "%s: device_register failed\n", __func__); - goto err_put_dev; - } - - error = device_create_bin_file(f_dev, &firmware_attr_data); - if (error) { - dev_err(device, "%s: sysfs_create_bin_file failed\n", __func__); - goto err_del_dev; - } - - error = device_create_file(f_dev, &dev_attr_loading); - if (error) { - dev_err(device, "%s: device_create_file failed\n", __func__); - goto err_del_bin_attr; - } - - if (uevent) - dev_set_uevent_suppress(f_dev, false); - - return fw_priv; - -err_del_bin_attr: - device_remove_bin_file(f_dev, &firmware_attr_data); -err_del_dev: - device_del(f_dev); -err_put_dev: - put_device(f_dev); -err_out: - return ERR_PTR(error); -} - -static void fw_destroy_instance(struct firmware_priv *fw_priv) -{ - struct device *f_dev = &fw_priv->dev; - - device_remove_file(f_dev, &dev_attr_loading); - device_remove_bin_file(f_dev, &firmware_attr_data); - device_unregister(f_dev); -} - -static int _request_firmware(const struct firmware **firmware_p, - const char *name, struct device *device, - bool uevent, bool nowait) -{ - struct firmware_priv *fw_priv; - struct firmware *firmware; - int retval = 0; - - if (!firmware_p) - return -EINVAL; - - *firmware_p = firmware = kzalloc(sizeof(*firmware), GFP_KERNEL); - if (!firmware) { - dev_err(device, "%s: kmalloc(struct firmware) failed\n", - __func__); - retval = -ENOMEM; - goto out; - } - - if (fw_get_builtin_firmware(firmware, name)) { - dev_dbg(device, "firmware: using built-in firmware %s\n", name); - return 0; - } - - if (uevent) - dev_dbg(device, "firmware: requesting %s\n", name); - - fw_priv = fw_create_instance(firmware, name, device, uevent, nowait); - if (IS_ERR(fw_priv)) { - retval = PTR_ERR(fw_priv); - goto out; - } - - if (uevent) { - if (loading_timeout > 0) - mod_timer(&fw_priv->timeout, - round_jiffies_up(jiffies + - loading_timeout * HZ)); - - kobject_uevent(&fw_priv->dev.kobj, KOBJ_ADD); - } - - wait_for_completion(&fw_priv->completion); - - set_bit(FW_STATUS_DONE, &fw_priv->status); - del_timer_sync(&fw_priv->timeout); - - mutex_lock(&fw_lock); - if (!fw_priv->fw->size || test_bit(FW_STATUS_ABORT, &fw_priv->status)) - retval = -ENOENT; - fw_priv->fw = NULL; - mutex_unlock(&fw_lock); - - fw_destroy_instance(fw_priv); - -out: - if (retval) { - release_firmware(firmware); - *firmware_p = NULL; - } - - return retval; -} - -/** - * request_firmware: - send firmware request and wait for it - * @firmware_p: pointer to firmware image - * @name: name of firmware file - * @device: device for which firmware is being loaded - * - * @firmware_p will be used to return a firmware image by the name - * of @name for device @device. - * - * Should be called from user context where sleeping is allowed. - * - * @name will be used as $FIRMWARE in the uevent environment and - * should be distinctive enough not to be confused with any other - * firmware image for this or any other device. - **/ -int -compat_request_firmware(const struct firmware **firmware_p, const char *name, - struct device *device) -{ - int uevent = 1; - return _request_firmware(firmware_p, name, device, uevent, false); -} - -/** - * release_firmware: - release the resource associated with a firmware image - * @fw: firmware resource to release - **/ -void compat_release_firmware(const struct firmware *fw) -{ - if (fw) { - if (!fw_is_builtin_firmware(fw)) - firmware_free_data(fw); - kfree(fw); - } -} - -/* Async support */ -struct firmware_work { - struct work_struct work; - struct module *module; - const char *name; - struct device *device; - void *context; - void (*cont)(const struct firmware *fw, void *context); - int uevent; -}; - -static int request_firmware_work_func(void *arg) -{ - struct firmware_work *fw_work = arg; - const struct firmware *fw; - int ret; - - if (!arg) { - WARN_ON(1); - return 0; - } - - ret = _request_firmware(&fw, fw_work->name, fw_work->device, - fw_work->uevent, true); - fw_work->cont(fw, fw_work->context); - - module_put(fw_work->module); - kfree(fw_work); - - return ret; -} - -/** - * request_firmware_nowait - asynchronous version of request_firmware - * @module: module requesting the firmware - * @uevent: sends uevent to copy the firmware image if this flag - * is non-zero else the firmware copy must be done manually. - * @name: name of firmware file - * @device: device for which firmware is being loaded - * @gfp: allocation flags - * @context: will be passed over to @cont, and - * @fw may be %NULL if firmware request fails. - * @cont: function will be called asynchronously when the firmware - * request is over. - * - * Asynchronous variant of request_firmware() for user contexts where - * it is not possible to sleep for long time. It can't be called - * in atomic contexts. - **/ -int -compat_request_firmware_nowait( - struct module *module, int uevent, - const char *name, struct device *device, gfp_t gfp, void *context, - void (*cont)(const struct firmware *fw, void *context)) -{ - struct task_struct *task; - struct firmware_work *fw_work; - - fw_work = kzalloc(sizeof (struct firmware_work), gfp); - if (!fw_work) - return -ENOMEM; - - fw_work->module = module; - fw_work->name = name; - fw_work->device = device; - fw_work->context = context; - fw_work->cont = cont; - fw_work->uevent = uevent; - - if (!try_module_get(module)) { - kfree(fw_work); - return -EFAULT; - } - - task = kthread_run(request_firmware_work_func, fw_work, - "firmware/%s", name); - if (IS_ERR(task)) { - fw_work->cont(NULL, fw_work->context); - module_put(fw_work->module); - kfree(fw_work); - return PTR_ERR(task); - } - - return 0; -} - -static int __init firmware_class_init(void) -{ - return class_register(&firmware_class); -} - -static void __exit firmware_class_exit(void) -{ - class_unregister(&firmware_class); -} - -fs_initcall(firmware_class_init); -module_exit(firmware_class_exit); - -EXPORT_SYMBOL_GPL(release_firmware); -EXPORT_SYMBOL_GPL(request_firmware); -EXPORT_SYMBOL_GPL(request_firmware_nowait); diff --git a/openairITS/mac/DOT11/compat/cordic.c b/openairITS/mac/DOT11/compat/cordic.c deleted file mode 100644 index a6340b6a09..0000000000 --- a/openairITS/mac/DOT11/compat/cordic.c +++ /dev/null @@ -1,101 +0,0 @@ -/* - * Copyright (c) 2011 Broadcom Corporation - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ -#include -#include - -#define CORDIC_ANGLE_GEN 39797 -#define CORDIC_PRECISION_SHIFT 16 -#define CORDIC_NUM_ITER (CORDIC_PRECISION_SHIFT + 2) - -#define FIXED(X) ((s32)((X) << CORDIC_PRECISION_SHIFT)) -#define FLOAT(X) (((X) >= 0) \ - ? ((((X) >> (CORDIC_PRECISION_SHIFT - 1)) + 1) >> 1) \ - : -((((-(X)) >> (CORDIC_PRECISION_SHIFT - 1)) + 1) >> 1)) - -static const s32 arctan_table[] = { - 2949120, - 1740967, - 919879, - 466945, - 234379, - 117304, - 58666, - 29335, - 14668, - 7334, - 3667, - 1833, - 917, - 458, - 229, - 115, - 57, - 29 -}; - -/* - * cordic_calc_iq() - calculates the i/q coordinate for given angle - * - * theta: angle in degrees for which i/q coordinate is to be calculated - * coord: function output parameter holding the i/q coordinate - */ -struct cordic_iq cordic_calc_iq(s32 theta) -{ - struct cordic_iq coord; - s32 angle, valtmp; - unsigned iter; - int signx = 1; - int signtheta; - - coord.i = CORDIC_ANGLE_GEN; - coord.q = 0; - angle = 0; - - theta = FIXED(theta); - signtheta = (theta < 0) ? -1 : 1; - theta = ((theta + FIXED(180) * signtheta) % FIXED(360)) - - FIXED(180) * signtheta; - - if (FLOAT(theta) > 90) { - theta -= FIXED(180); - signx = -1; - } else if (FLOAT(theta) < -90) { - theta += FIXED(180); - signx = -1; - } - - for (iter = 0; iter < CORDIC_NUM_ITER; iter++) { - if (theta > angle) { - valtmp = coord.i - (coord.q >> iter); - coord.q += (coord.i >> iter); - angle += arctan_table[iter]; - } else { - valtmp = coord.i + (coord.q >> iter); - coord.q -= (coord.i >> iter); - angle -= arctan_table[iter]; - } - coord.i = valtmp; - } - - coord.i *= signx; - coord.q *= signx; - return coord; -} -EXPORT_SYMBOL_GPL(cordic_calc_iq); - -MODULE_DESCRIPTION("Cordic functions"); -MODULE_AUTHOR("Broadcom Corporation"); -MODULE_LICENSE("Dual BSD/GPL"); diff --git a/openairITS/mac/DOT11/compat/crc8.c b/openairITS/mac/DOT11/compat/crc8.c deleted file mode 100644 index 5878171c5b..0000000000 --- a/openairITS/mac/DOT11/compat/crc8.c +++ /dev/null @@ -1,87 +0,0 @@ -/* - * Copyright (c) 2011 Broadcom Corporation - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#undef pr_fmt -#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt - -#include -#include -#include - -/* - * crc8_populate_msb - fill crc table for given polynomial in reverse bit order. - * - * table: table to be filled. - * polynomial: polynomial for which table is to be filled. - */ -void crc8_populate_msb(u8 table[CRC8_TABLE_SIZE], u8 polynomial) -{ - int i, j; - const u8 msbit = 0x80; - u8 t = msbit; - - table[0] = 0; - - for (i = 1; i < CRC8_TABLE_SIZE; i *= 2) { - t = (t << 1) ^ (t & msbit ? polynomial : 0); - for (j = 0; j < i; j++) - table[i+j] = table[j] ^ t; - } -} -EXPORT_SYMBOL_GPL(crc8_populate_msb); - -/* - * crc8_populate_lsb - fill crc table for given polynomial in regular bit order. - * - * table: table to be filled. - * polynomial: polynomial for which table is to be filled. - */ -void crc8_populate_lsb(u8 table[CRC8_TABLE_SIZE], u8 polynomial) -{ - int i, j; - u8 t = 1; - - table[0] = 0; - - for (i = (CRC8_TABLE_SIZE >> 1); i; i >>= 1) { - t = (t >> 1) ^ (t & 1 ? polynomial : 0); - for (j = 0; j < CRC8_TABLE_SIZE; j += 2*i) - table[i+j] = table[j] ^ t; - } -} -EXPORT_SYMBOL_GPL(crc8_populate_lsb); - -/* - * crc8 - calculate a crc8 over the given input data. - * - * table: crc table used for calculation. - * pdata: pointer to data buffer. - * nbytes: number of bytes in data buffer. - * crc: previous returned crc8 value. - */ -u8 crc8(const u8 table[CRC8_TABLE_SIZE], u8 *pdata, size_t nbytes, u8 crc) -{ - /* loop over the buffer data */ - while (nbytes-- > 0) - crc = table[(crc ^ *pdata++) & 0xff]; - - return crc; -} -EXPORT_SYMBOL_GPL(crc8); - -MODULE_DESCRIPTION("CRC8 (by Williams, Ross N.) function"); -MODULE_AUTHOR("Broadcom Corporation"); -MODULE_LICENSE("Dual BSD/GPL"); diff --git a/openairITS/mac/DOT11/compat/kfifo.c b/openairITS/mac/DOT11/compat/kfifo.c deleted file mode 100644 index 96e1bdfd0e..0000000000 --- a/openairITS/mac/DOT11/compat/kfifo.c +++ /dev/null @@ -1,608 +0,0 @@ -/* - * A generic kernel FIFO implementation - * - * Copyright (C) 2009/2010 Stefani Seibold - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - */ - -#include -#include -#include -#include -#include -#include -#include - -/* - * internal helper to calculate the unused elements in a fifo - */ -static inline unsigned int kfifo_unused(struct __kfifo *fifo) -{ - return (fifo->mask + 1) - (fifo->in - fifo->out); -} - -int __kfifo_alloc(struct __kfifo *fifo, unsigned int size, - size_t esize, gfp_t gfp_mask) -{ - /* - * round down to the next power of 2, since our 'let the indices - * wrap' technique works only in this case. - */ - if (!is_power_of_2(size)) - size = rounddown_pow_of_two(size); - - fifo->in = 0; - fifo->out = 0; - fifo->esize = esize; - - if (size < 2) { - fifo->data = NULL; - fifo->mask = 0; - return -EINVAL; - } - - fifo->data = kmalloc(size * esize, gfp_mask); - - if (!fifo->data) { - fifo->mask = 0; - return -ENOMEM; - } - fifo->mask = size - 1; - - return 0; -} -EXPORT_SYMBOL_GPL(__kfifo_alloc); - -void __kfifo_free(struct __kfifo *fifo) -{ - kfree(fifo->data); - fifo->in = 0; - fifo->out = 0; - fifo->esize = 0; - fifo->data = NULL; - fifo->mask = 0; -} -EXPORT_SYMBOL_GPL(__kfifo_free); - -int __kfifo_init(struct __kfifo *fifo, void *buffer, - unsigned int size, size_t esize) -{ - size /= esize; - - if (!is_power_of_2(size)) - size = rounddown_pow_of_two(size); - - fifo->in = 0; - fifo->out = 0; - fifo->esize = esize; - fifo->data = buffer; - - if (size < 2) { - fifo->mask = 0; - return -EINVAL; - } - fifo->mask = size - 1; - - return 0; -} -EXPORT_SYMBOL_GPL(__kfifo_init); - -static void kfifo_copy_in(struct __kfifo *fifo, const void *src, - unsigned int len, unsigned int off) -{ - unsigned int size = fifo->mask + 1; - unsigned int esize = fifo->esize; - unsigned int l; - - off &= fifo->mask; - if (esize != 1) { - off *= esize; - size *= esize; - len *= esize; - } - l = min(len, size - off); - - memcpy(fifo->data + off, src, l); - memcpy(fifo->data, src + l, len - l); - /* - * make sure that the data in the fifo is up to date before - * incrementing the fifo->in index counter - */ - smp_wmb(); -} - -unsigned int __kfifo_in(struct __kfifo *fifo, - const void *buf, unsigned int len) -{ - unsigned int l; - - l = kfifo_unused(fifo); - if (len > l) - len = l; - - kfifo_copy_in(fifo, buf, len, fifo->in); - fifo->in += len; - return len; -} -EXPORT_SYMBOL_GPL(__kfifo_in); - -static void kfifo_copy_out(struct __kfifo *fifo, void *dst, - unsigned int len, unsigned int off) -{ - unsigned int size = fifo->mask + 1; - unsigned int esize = fifo->esize; - unsigned int l; - - off &= fifo->mask; - if (esize != 1) { - off *= esize; - size *= esize; - len *= esize; - } - l = min(len, size - off); - - memcpy(dst, fifo->data + off, l); - memcpy(dst + l, fifo->data, len - l); - /* - * make sure that the data is copied before - * incrementing the fifo->out index counter - */ - smp_wmb(); -} - -unsigned int __kfifo_out_peek(struct __kfifo *fifo, - void *buf, unsigned int len) -{ - unsigned int l; - - l = fifo->in - fifo->out; - if (len > l) - len = l; - - kfifo_copy_out(fifo, buf, len, fifo->out); - return len; -} -EXPORT_SYMBOL_GPL(__kfifo_out_peek); - -unsigned int __kfifo_out(struct __kfifo *fifo, - void *buf, unsigned int len) -{ - len = __kfifo_out_peek(fifo, buf, len); - fifo->out += len; - return len; -} -EXPORT_SYMBOL_GPL(__kfifo_out); - -static unsigned long kfifo_copy_from_user(struct __kfifo *fifo, - const void __user *from, unsigned int len, unsigned int off, - unsigned int *copied) -{ - unsigned int size = fifo->mask + 1; - unsigned int esize = fifo->esize; - unsigned int l; - unsigned long ret; - - off &= fifo->mask; - if (esize != 1) { - off *= esize; - size *= esize; - len *= esize; - } - l = min(len, size - off); - - ret = copy_from_user(fifo->data + off, from, l); - if (unlikely(ret)) - ret = DIV_ROUND_UP(ret + len - l, esize); - else { - ret = copy_from_user(fifo->data, from + l, len - l); - if (unlikely(ret)) - ret = DIV_ROUND_UP(ret, esize); - } - /* - * make sure that the data in the fifo is up to date before - * incrementing the fifo->in index counter - */ - smp_wmb(); - *copied = len - ret; - /* return the number of elements which are not copied */ - return ret; -} - -int __kfifo_from_user(struct __kfifo *fifo, const void __user *from, - unsigned long len, unsigned int *copied) -{ - unsigned int l; - unsigned long ret; - unsigned int esize = fifo->esize; - int err; - - if (esize != 1) - len /= esize; - - l = kfifo_unused(fifo); - if (len > l) - len = l; - - ret = kfifo_copy_from_user(fifo, from, len, fifo->in, copied); - if (unlikely(ret)) { - len -= ret; - err = -EFAULT; - } else - err = 0; - fifo->in += len; - return err; -} -EXPORT_SYMBOL_GPL(__kfifo_from_user); - -static unsigned long kfifo_copy_to_user(struct __kfifo *fifo, void __user *to, - unsigned int len, unsigned int off, unsigned int *copied) -{ - unsigned int l; - unsigned long ret; - unsigned int size = fifo->mask + 1; - unsigned int esize = fifo->esize; - - off &= fifo->mask; - if (esize != 1) { - off *= esize; - size *= esize; - len *= esize; - } - l = min(len, size - off); - - ret = copy_to_user(to, fifo->data + off, l); - if (unlikely(ret)) - ret = DIV_ROUND_UP(ret + len - l, esize); - else { - ret = copy_to_user(to + l, fifo->data, len - l); - if (unlikely(ret)) - ret = DIV_ROUND_UP(ret, esize); - } - /* - * make sure that the data is copied before - * incrementing the fifo->out index counter - */ - smp_wmb(); - *copied = len - ret; - /* return the number of elements which are not copied */ - return ret; -} - -int __kfifo_to_user(struct __kfifo *fifo, void __user *to, - unsigned long len, unsigned int *copied) -{ - unsigned int l; - unsigned long ret; - unsigned int esize = fifo->esize; - int err; - - if (esize != 1) - len /= esize; - - l = fifo->in - fifo->out; - if (len > l) - len = l; - ret = kfifo_copy_to_user(fifo, to, len, fifo->out, copied); - if (unlikely(ret)) { - len -= ret; - err = -EFAULT; - } else - err = 0; - fifo->out += len; - return err; -} -EXPORT_SYMBOL_GPL(__kfifo_to_user); - -static int setup_sgl_buf(struct scatterlist *sgl, void *buf, - int nents, unsigned int len) -{ - int n; - unsigned int l; - unsigned int off; - struct page *page; - - if (!nents) - return 0; - - if (!len) - return 0; - - n = 0; - page = virt_to_page(buf); - off = offset_in_page(buf); - l = 0; - - while (len >= l + PAGE_SIZE - off) { - struct page *npage; - - l += PAGE_SIZE; - buf += PAGE_SIZE; - npage = virt_to_page(buf); - if (page_to_phys(page) != page_to_phys(npage) - l) { - sg_set_page(sgl, page, l - off, off); - sgl = sg_next(sgl); - if (++n == nents || sgl == NULL) - return n; - page = npage; - len -= l - off; - l = off = 0; - } - } - sg_set_page(sgl, page, len, off); - return n + 1; -} - -static unsigned int setup_sgl(struct __kfifo *fifo, struct scatterlist *sgl, - int nents, unsigned int len, unsigned int off) -{ - unsigned int size = fifo->mask + 1; - unsigned int esize = fifo->esize; - unsigned int l; - unsigned int n; - - off &= fifo->mask; - if (esize != 1) { - off *= esize; - size *= esize; - len *= esize; - } - l = min(len, size - off); - - n = setup_sgl_buf(sgl, fifo->data + off, nents, l); - n += setup_sgl_buf(sgl + n, fifo->data, nents - n, len - l); - - return n; -} - -unsigned int __kfifo_dma_in_prepare(struct __kfifo *fifo, - struct scatterlist *sgl, int nents, unsigned int len) -{ - unsigned int l; - - l = kfifo_unused(fifo); - if (len > l) - len = l; - - return setup_sgl(fifo, sgl, nents, len, fifo->in); -} -EXPORT_SYMBOL_GPL(__kfifo_dma_in_prepare); - -unsigned int __kfifo_dma_out_prepare(struct __kfifo *fifo, - struct scatterlist *sgl, int nents, unsigned int len) -{ - unsigned int l; - - l = fifo->in - fifo->out; - if (len > l) - len = l; - - return setup_sgl(fifo, sgl, nents, len, fifo->out); -} -EXPORT_SYMBOL_GPL(__kfifo_dma_out_prepare); - -unsigned int __kfifo_max_r(unsigned int len, size_t recsize) -{ - unsigned int max = (1 << (recsize << 3)) - 1; - - if (len > max) - return max; - return len; -} - -#define __KFIFO_PEEK(data, out, mask) \ - ((data)[(out) & (mask)]) -/* - * __kfifo_peek_n internal helper function for determinate the length of - * the next record in the fifo - */ -static unsigned int __kfifo_peek_n(struct __kfifo *fifo, size_t recsize) -{ - unsigned int l; - unsigned int mask = fifo->mask; - unsigned char *data = fifo->data; - - l = __KFIFO_PEEK(data, fifo->out, mask); - - if (--recsize) - l |= __KFIFO_PEEK(data, fifo->out + 1, mask) << 8; - - return l; -} - -#define __KFIFO_POKE(data, in, mask, val) \ - ( \ - (data)[(in) & (mask)] = (unsigned char)(val) \ - ) - -/* - * __kfifo_poke_n internal helper function for storeing the length of - * the record into the fifo - */ -static void __kfifo_poke_n(struct __kfifo *fifo, unsigned int n, size_t recsize) -{ - unsigned int mask = fifo->mask; - unsigned char *data = fifo->data; - - __KFIFO_POKE(data, fifo->in, mask, n); - - if (recsize > 1) - __KFIFO_POKE(data, fifo->in + 1, mask, n >> 8); -} - -unsigned int __kfifo_len_r(struct __kfifo *fifo, size_t recsize) -{ - return __kfifo_peek_n(fifo, recsize); -} -EXPORT_SYMBOL_GPL(__kfifo_len_r); - -unsigned int __kfifo_in_r(struct __kfifo *fifo, const void *buf, - unsigned int len, size_t recsize) -{ - if (len + recsize > kfifo_unused(fifo)) - return 0; - - __kfifo_poke_n(fifo, len, recsize); - - kfifo_copy_in(fifo, buf, len, fifo->in + recsize); - fifo->in += len + recsize; - return len; -} -EXPORT_SYMBOL_GPL(__kfifo_in_r); - -static unsigned int kfifo_out_copy_r(struct __kfifo *fifo, - void *buf, unsigned int len, size_t recsize, unsigned int *n) -{ - *n = __kfifo_peek_n(fifo, recsize); - - if (len > *n) - len = *n; - - kfifo_copy_out(fifo, buf, len, fifo->out + recsize); - return len; -} - -unsigned int __kfifo_out_peek_r(struct __kfifo *fifo, void *buf, - unsigned int len, size_t recsize) -{ - unsigned int n; - - if (fifo->in == fifo->out) - return 0; - - return kfifo_out_copy_r(fifo, buf, len, recsize, &n); -} -EXPORT_SYMBOL_GPL(__kfifo_out_peek_r); - -unsigned int __kfifo_out_r(struct __kfifo *fifo, void *buf, - unsigned int len, size_t recsize) -{ - unsigned int n; - - if (fifo->in == fifo->out) - return 0; - - len = kfifo_out_copy_r(fifo, buf, len, recsize, &n); - fifo->out += n + recsize; - return len; -} -EXPORT_SYMBOL_GPL(__kfifo_out_r); - -void __kfifo_skip_r(struct __kfifo *fifo, size_t recsize) -{ - unsigned int n; - - n = __kfifo_peek_n(fifo, recsize); - fifo->out += n + recsize; -} -EXPORT_SYMBOL_GPL(__kfifo_skip_r); - -int __kfifo_from_user_r(struct __kfifo *fifo, const void __user *from, - unsigned long len, unsigned int *copied, size_t recsize) -{ - unsigned long ret; - - len = __kfifo_max_r(len, recsize); - - if (len + recsize > kfifo_unused(fifo)) { - *copied = 0; - return 0; - } - - __kfifo_poke_n(fifo, len, recsize); - - ret = kfifo_copy_from_user(fifo, from, len, fifo->in + recsize, copied); - if (unlikely(ret)) { - *copied = 0; - return -EFAULT; - } - fifo->in += len + recsize; - return 0; -} -EXPORT_SYMBOL_GPL(__kfifo_from_user_r); - -int __kfifo_to_user_r(struct __kfifo *fifo, void __user *to, - unsigned long len, unsigned int *copied, size_t recsize) -{ - unsigned long ret; - unsigned int n; - - if (fifo->in == fifo->out) { - *copied = 0; - return 0; - } - - n = __kfifo_peek_n(fifo, recsize); - if (len > n) - len = n; - - ret = kfifo_copy_to_user(fifo, to, len, fifo->out + recsize, copied); - if (unlikely(ret)) { - *copied = 0; - return -EFAULT; - } - fifo->out += n + recsize; - return 0; -} -EXPORT_SYMBOL_GPL(__kfifo_to_user_r); - -unsigned int __kfifo_dma_in_prepare_r(struct __kfifo *fifo, - struct scatterlist *sgl, int nents, unsigned int len, size_t recsize) -{ - if (!nents) - BUG(); - - len = __kfifo_max_r(len, recsize); - - if (len + recsize > kfifo_unused(fifo)) - return 0; - - return setup_sgl(fifo, sgl, nents, len, fifo->in + recsize); -} -EXPORT_SYMBOL_GPL(__kfifo_dma_in_prepare_r); - -void __kfifo_dma_in_finish_r(struct __kfifo *fifo, - unsigned int len, size_t recsize) -{ - len = __kfifo_max_r(len, recsize); - __kfifo_poke_n(fifo, len, recsize); - fifo->in += len + recsize; -} -EXPORT_SYMBOL_GPL(__kfifo_dma_in_finish_r); - -unsigned int __kfifo_dma_out_prepare_r(struct __kfifo *fifo, - struct scatterlist *sgl, int nents, unsigned int len, size_t recsize) -{ - if (!nents) - BUG(); - - len = __kfifo_max_r(len, recsize); - - if (len + recsize > fifo->in - fifo->out) - return 0; - - return setup_sgl(fifo, sgl, nents, len, fifo->out + recsize); -} -EXPORT_SYMBOL_GPL(__kfifo_dma_out_prepare_r); - -void __kfifo_dma_out_finish_r(struct __kfifo *fifo, size_t recsize) -{ - unsigned int len; - - len = __kfifo_peek_n(fifo, recsize); - fifo->out += len + recsize; -} -EXPORT_SYMBOL_GPL(__kfifo_dma_out_finish_r); diff --git a/openairITS/mac/DOT11/compat/kstrtox.c b/openairITS/mac/DOT11/compat/kstrtox.c deleted file mode 100644 index 44859d19a5..0000000000 --- a/openairITS/mac/DOT11/compat/kstrtox.c +++ /dev/null @@ -1,236 +0,0 @@ -/* - * Convert integer string representation to an integer. - * If an integer doesn't fit into specified type, -E is returned. - * - * Integer starts with optional sign. - * kstrtou*() functions do not accept sign "-". - * - * Radix 0 means autodetection: leading "0x" implies radix 16, - * leading "0" implies radix 8, otherwise radix is 10. - * Autodetection hints work after optional sign, but not before. - * - * If -E is returned, result is not touched. - */ -#include -/* - * kstrto* was included in kernel 2.6.38.4 and causes conflicts with the - * version included in compat-wireless. We use strict_strtol to check if - * kstrto* is already available. - */ -#ifndef strict_strtol - -#include -#include -#include -#include -#include -#include - -static inline char _tolower(const char c) -{ - return c | 0x20; -} - -static int _kstrtoull(const char *s, unsigned int base, unsigned long long *res) -{ - unsigned long long acc; - int ok; - - if (base == 0) { - if (s[0] == '0') { - if (_tolower(s[1]) == 'x' && isxdigit(s[2])) - base = 16; - else - base = 8; - } else - base = 10; - } - if (base == 16 && s[0] == '0' && _tolower(s[1]) == 'x') - s += 2; - - acc = 0; - ok = 0; - while (*s) { - unsigned int val; - - if ('0' <= *s && *s <= '9') - val = *s - '0'; - else if ('a' <= _tolower(*s) && _tolower(*s) <= 'f') - val = _tolower(*s) - 'a' + 10; - else if (*s == '\n') { - if (*(s + 1) == '\0') - break; - else - return -EINVAL; - } else - return -EINVAL; - - if (val >= base) - return -EINVAL; - if (acc > div_u64(ULLONG_MAX - val, base)) - return -ERANGE; - acc = acc * base + val; - ok = 1; - - s++; - } - if (!ok) - return -EINVAL; - *res = acc; - return 0; -} - -int kstrtoull(const char *s, unsigned int base, unsigned long long *res) -{ - if (s[0] == '+') - s++; - return _kstrtoull(s, base, res); -} -EXPORT_SYMBOL_GPL(kstrtoull); - -int kstrtoll(const char *s, unsigned int base, long long *res) -{ - unsigned long long tmp; - int rv; - - if (s[0] == '-') { - rv = _kstrtoull(s + 1, base, &tmp); - if (rv < 0) - return rv; - if ((long long)(-tmp) >= 0) - return -ERANGE; - *res = -tmp; - } else { - rv = kstrtoull(s, base, &tmp); - if (rv < 0) - return rv; - if ((long long)tmp < 0) - return -ERANGE; - *res = tmp; - } - return 0; -} -EXPORT_SYMBOL_GPL(kstrtoll); - -/* Internal, do not use. */ -int _kstrtoul(const char *s, unsigned int base, unsigned long *res) -{ - unsigned long long tmp; - int rv; - - rv = kstrtoull(s, base, &tmp); - if (rv < 0) - return rv; - if (tmp != (unsigned long long)(unsigned long)tmp) - return -ERANGE; - *res = tmp; - return 0; -} -EXPORT_SYMBOL_GPL(_kstrtoul); - -/* Internal, do not use. */ -int _kstrtol(const char *s, unsigned int base, long *res) -{ - long long tmp; - int rv; - - rv = kstrtoll(s, base, &tmp); - if (rv < 0) - return rv; - if (tmp != (long long)(long)tmp) - return -ERANGE; - *res = tmp; - return 0; -} -EXPORT_SYMBOL_GPL(_kstrtol); - -int kstrtouint(const char *s, unsigned int base, unsigned int *res) -{ - unsigned long long tmp; - int rv; - - rv = kstrtoull(s, base, &tmp); - if (rv < 0) - return rv; - if (tmp != (unsigned long long)(unsigned int)tmp) - return -ERANGE; - *res = tmp; - return 0; -} -EXPORT_SYMBOL_GPL(kstrtouint); - -int kstrtoint(const char *s, unsigned int base, int *res) -{ - long long tmp; - int rv; - - rv = kstrtoll(s, base, &tmp); - if (rv < 0) - return rv; - if (tmp != (long long)(int)tmp) - return -ERANGE; - *res = tmp; - return 0; -} -EXPORT_SYMBOL_GPL(kstrtoint); - -int kstrtou16(const char *s, unsigned int base, u16 *res) -{ - unsigned long long tmp; - int rv; - - rv = kstrtoull(s, base, &tmp); - if (rv < 0) - return rv; - if (tmp != (unsigned long long)(u16)tmp) - return -ERANGE; - *res = tmp; - return 0; -} -EXPORT_SYMBOL_GPL(kstrtou16); - -int kstrtos16(const char *s, unsigned int base, s16 *res) -{ - long long tmp; - int rv; - - rv = kstrtoll(s, base, &tmp); - if (rv < 0) - return rv; - if (tmp != (long long)(s16)tmp) - return -ERANGE; - *res = tmp; - return 0; -} -EXPORT_SYMBOL_GPL(kstrtos16); - -int kstrtou8(const char *s, unsigned int base, u8 *res) -{ - unsigned long long tmp; - int rv; - - rv = kstrtoull(s, base, &tmp); - if (rv < 0) - return rv; - if (tmp != (unsigned long long)(u8)tmp) - return -ERANGE; - *res = tmp; - return 0; -} -EXPORT_SYMBOL_GPL(kstrtou8); - -int kstrtos8(const char *s, unsigned int base, s8 *res) -{ - long long tmp; - int rv; - - rv = kstrtoll(s, base, &tmp); - if (rv < 0) - return rv; - if (tmp != (long long)(s8)tmp) - return -ERANGE; - *res = tmp; - return 0; -} -EXPORT_SYMBOL_GPL(kstrtos8); -#endif /* #ifndef strict_strtol */ diff --git a/openairITS/mac/DOT11/compat/main.c b/openairITS/mac/DOT11/compat/main.c deleted file mode 100644 index 30a4a1ee6e..0000000000 --- a/openairITS/mac/DOT11/compat/main.c +++ /dev/null @@ -1,66 +0,0 @@ -#include - -MODULE_AUTHOR("Luis R. Rodriguez"); -MODULE_DESCRIPTION("Kernel compatibility module"); -MODULE_LICENSE("GPL"); - -#ifndef COMPAT_BASE_TREE -#error "You need a COMPAT_BASE_TREE" -#endif - -#ifndef COMPAT_BASE_TREE_VERSION -#error "You need a COMPAT_BASE_TREE_VERSION" -#endif - -#ifndef COMPAT_VERSION -#error "You need a COMPAT_VERSION" -#endif - -static char *compat_base_tree = COMPAT_BASE_TREE; -static char *compat_base_tree_version = COMPAT_BASE_TREE_VERSION; -static char *compat_version = COMPAT_VERSION; - -module_param(compat_base_tree, charp, 0400); -MODULE_PARM_DESC(compat_base_tree, - "The upstream tree used as base for this backport"); - -module_param(compat_base_tree_version, charp, 0400); -MODULE_PARM_DESC(compat_base_tree_version, - "The git-describe of the upstream base tree"); - -module_param(compat_version, charp, 0400); -MODULE_PARM_DESC(compat_version, - "Version of the kernel compat backport work"); - -void compat_dependency_symbol(void) -{ -} -EXPORT_SYMBOL_GPL(compat_dependency_symbol); - -static int __init compat_init(void) -{ - /* pm-qos for kernels <= 2.6.24, this is a no-op on newer kernels */ - compat_pm_qos_power_init(); - compat_system_workqueue_create(); - - printk(KERN_INFO - COMPAT_PROJECT " backport release: " - COMPAT_VERSION - "\n"); - printk(KERN_INFO "Backport based on " - COMPAT_BASE_TREE " " COMPAT_BASE_TREE_VERSION - "\n"); - - return 0; -} -module_init(compat_init); - -static void __exit compat_exit(void) -{ - compat_pm_qos_power_deinit(); - compat_system_workqueue_destroy(); - - return; -} -module_exit(compat_exit); - diff --git a/openairITS/mac/DOT11/compat/modules.order b/openairITS/mac/DOT11/compat/modules.order deleted file mode 100644 index b251c8f0e8..0000000000 --- a/openairITS/mac/DOT11/compat/modules.order +++ /dev/null @@ -1 +0,0 @@ -kernel//home/thales/openair4G/openairITS/mac/DOT11/compat/compat.ko diff --git a/openairITS/mac/DOT11/compat/pm_qos_params.c b/openairITS/mac/DOT11/compat/pm_qos_params.c deleted file mode 100644 index 833d98c5dd..0000000000 --- a/openairITS/mac/DOT11/compat/pm_qos_params.c +++ /dev/null @@ -1,477 +0,0 @@ -#include - -/* This is the backport of pm-qos params for kernels <= 2.6.25 */ -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,25)) - -/* - * This module exposes the interface to kernel space for specifying - * QoS dependencies. It provides infrastructure for registration of: - * - * Dependents on a QoS value : register requirements - * Watchers of QoS value : get notified when target QoS value changes - * - * This QoS design is best effort based. Dependents register their QoS needs. - * Watchers register to keep track of the current QoS needs of the system. - * - * There are 3 basic classes of QoS parameter: latency, timeout, throughput - * each have defined units: - * latency: usec - * timeout: usec <-- currently not used. - * throughput: kbs (kilo byte / sec) - * - * There are lists of pm_qos_objects each one wrapping requirements, notifiers - * - * User mode requirements on a QOS parameter register themselves to the - * subsystem by opening the device node /dev/... and writing there request to - * the node. As long as the process holds a file handle open to the node the - * client continues to be accounted for. Upon file release the usermode - * requirement is removed and a new qos target is computed. This way when the - * requirement that the application has is cleaned up when closes the file - * pointer or exits the pm_qos_object will get an opportunity to clean up. - * - * Mark Gross - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -/* - * locking rule: all changes to requirements or notifiers lists - * or pm_qos_object list and pm_qos_objects need to happen with pm_qos_lock - * held, taken with _irqsave. One lock to rule them all - */ -struct requirement_list { - struct list_head list; - union { - s32 value; - s32 usec; - s32 kbps; - }; - char *name; -}; - -static s32 max_compare(s32 v1, s32 v2); -static s32 min_compare(s32 v1, s32 v2); - -struct pm_qos_object { - struct requirement_list requirements; - struct blocking_notifier_head *notifiers; - struct miscdevice pm_qos_power_miscdev; - char *name; - s32 default_value; - atomic_t target_value; - s32 (*comparitor)(s32, s32); -}; - -static struct pm_qos_object null_pm_qos; -static BLOCKING_NOTIFIER_HEAD(cpu_dma_lat_notifier); -static struct pm_qos_object cpu_dma_pm_qos = { - .requirements = {LIST_HEAD_INIT(cpu_dma_pm_qos.requirements.list)}, - .notifiers = &cpu_dma_lat_notifier, - .name = "cpu_dma_latency", - .default_value = 2000 * USEC_PER_SEC, - .target_value = ATOMIC_INIT(2000 * USEC_PER_SEC), - .comparitor = min_compare -}; - -static BLOCKING_NOTIFIER_HEAD(network_lat_notifier); -static struct pm_qos_object network_lat_pm_qos = { - .requirements = {LIST_HEAD_INIT(network_lat_pm_qos.requirements.list)}, - .notifiers = &network_lat_notifier, - .name = "network_latency", - .default_value = 2000 * USEC_PER_SEC, - .target_value = ATOMIC_INIT(2000 * USEC_PER_SEC), - .comparitor = min_compare -}; - - -static BLOCKING_NOTIFIER_HEAD(network_throughput_notifier); -static struct pm_qos_object network_throughput_pm_qos = { - .requirements = - {LIST_HEAD_INIT(network_throughput_pm_qos.requirements.list)}, - .notifiers = &network_throughput_notifier, - .name = "network_throughput", - .default_value = 0, - .target_value = ATOMIC_INIT(0), - .comparitor = max_compare -}; - -static BLOCKING_NOTIFIER_HEAD(system_bus_freq_notifier); -static struct pm_qos_object system_bus_freq_pm_qos = { - .requirements = - {LIST_HEAD_INIT(system_bus_freq_pm_qos.requirements.list)}, - .notifiers = &system_bus_freq_notifier, - .name = "system_bus_freq", - .default_value = 0, - .target_value = ATOMIC_INIT(0), - .comparitor = max_compare -}; - - -static struct pm_qos_object *pm_qos_array[PM_QOS_NUM_CLASSES] = { - [PM_QOS_RESERVED] = &null_pm_qos, - [PM_QOS_CPU_DMA_LATENCY] = &cpu_dma_pm_qos, - [PM_QOS_NETWORK_LATENCY] = &network_lat_pm_qos, - [PM_QOS_NETWORK_THROUGHPUT] = &network_throughput_pm_qos, - [PM_QOS_SYSTEM_BUS_FREQ] = &system_bus_freq_pm_qos, -}; - -static DEFINE_SPINLOCK(pm_qos_lock); - -static ssize_t pm_qos_power_write(struct file *filp, const char __user *buf, - size_t count, loff_t *f_pos); -static int pm_qos_power_open(struct inode *inode, struct file *filp); -static int pm_qos_power_release(struct inode *inode, struct file *filp); - -static const struct file_operations pm_qos_power_fops = { - .write = pm_qos_power_write, - .open = pm_qos_power_open, - .release = pm_qos_power_release, -}; - -/* static helper functions */ -static s32 max_compare(s32 v1, s32 v2) -{ - return max(v1, v2); -} - -static s32 min_compare(s32 v1, s32 v2) -{ - return min(v1, v2); -} - - -static void update_target(int target) -{ - s32 extreme_value; - struct requirement_list *node; - unsigned long flags; - int call_notifier = 0; - - spin_lock_irqsave(&pm_qos_lock, flags); - extreme_value = pm_qos_array[target]->default_value; - list_for_each_entry(node, - &pm_qos_array[target]->requirements.list, list) { - extreme_value = pm_qos_array[target]->comparitor( - extreme_value, node->value); - } - if (atomic_read(&pm_qos_array[target]->target_value) != extreme_value) { - call_notifier = 1; - atomic_set(&pm_qos_array[target]->target_value, extreme_value); - pr_debug(KERN_ERR "new target for qos %d is %d\n", target, - atomic_read(&pm_qos_array[target]->target_value)); - } - spin_unlock_irqrestore(&pm_qos_lock, flags); - - if (call_notifier) - blocking_notifier_call_chain(pm_qos_array[target]->notifiers, - (unsigned long) extreme_value, NULL); -} - -static int register_pm_qos_misc(struct pm_qos_object *qos) -{ - qos->pm_qos_power_miscdev.minor = MISC_DYNAMIC_MINOR; - qos->pm_qos_power_miscdev.name = qos->name; - qos->pm_qos_power_miscdev.fops = &pm_qos_power_fops; - - return misc_register(&qos->pm_qos_power_miscdev); -} - -static int find_pm_qos_object_by_minor(int minor) -{ - int pm_qos_class; - - for (pm_qos_class = 0; - pm_qos_class < PM_QOS_NUM_CLASSES; pm_qos_class++) { - if (minor == - pm_qos_array[pm_qos_class]->pm_qos_power_miscdev.minor) - return pm_qos_class; - } - return -1; -} - -/** - * pm_qos_requirement - returns current system wide qos expectation - * @pm_qos_class: identification of which qos value is requested - * - * This function returns the current target value in an atomic manner. - */ -int pm_qos_requirement(int pm_qos_class) -{ - return atomic_read(&pm_qos_array[pm_qos_class]->target_value); -} -EXPORT_SYMBOL_GPL(pm_qos_requirement); - -/** - * pm_qos_add_requirement - inserts new qos request into the list - * @pm_qos_class: identifies which list of qos request to us - * @name: identifies the request - * @value: defines the qos request - * - * This function inserts a new entry in the pm_qos_class list of requested qos - * performance characteristics. It recomputes the aggregate QoS expectations - * for the pm_qos_class of parameters. - */ -int pm_qos_add_requirement(int pm_qos_class, char *name, s32 value) -{ - struct requirement_list *dep; - unsigned long flags; - - dep = kzalloc(sizeof(struct requirement_list), GFP_KERNEL); - if (dep) { - if (value == PM_QOS_DEFAULT_VALUE) - dep->value = pm_qos_array[pm_qos_class]->default_value; - else - dep->value = value; - dep->name = kstrdup(name, GFP_KERNEL); - if (!dep->name) - goto cleanup; - - spin_lock_irqsave(&pm_qos_lock, flags); - list_add(&dep->list, - &pm_qos_array[pm_qos_class]->requirements.list); - spin_unlock_irqrestore(&pm_qos_lock, flags); - update_target(pm_qos_class); - - return 0; - } - -cleanup: - kfree(dep); - return -ENOMEM; -} -EXPORT_SYMBOL_GPL(pm_qos_add_requirement); - -/** - * pm_qos_update_requirement - modifies an existing qos request - * @pm_qos_class: identifies which list of qos request to us - * @name: identifies the request - * @value: defines the qos request - * - * Updates an existing qos requirement for the pm_qos_class of parameters along - * with updating the target pm_qos_class value. - * - * If the named request isn't in the list then no change is made. - */ -int pm_qos_update_requirement(int pm_qos_class, char *name, s32 new_value) -{ - unsigned long flags; - struct requirement_list *node; - int pending_update = 0; - - spin_lock_irqsave(&pm_qos_lock, flags); - list_for_each_entry(node, - &pm_qos_array[pm_qos_class]->requirements.list, list) { - if (strcmp(node->name, name) == 0) { - if (new_value == PM_QOS_DEFAULT_VALUE) - node->value = - pm_qos_array[pm_qos_class]->default_value; - else - node->value = new_value; - pending_update = 1; - break; - } - } - spin_unlock_irqrestore(&pm_qos_lock, flags); - if (pending_update) - update_target(pm_qos_class); - - return 0; -} -EXPORT_SYMBOL_GPL(pm_qos_update_requirement); - -/** - * pm_qos_remove_requirement - modifies an existing qos request - * @pm_qos_class: identifies which list of qos request to us - * @name: identifies the request - * - * Will remove named qos request from pm_qos_class list of parameters and - * recompute the current target value for the pm_qos_class. - */ -void pm_qos_remove_requirement(int pm_qos_class, char *name) -{ - unsigned long flags; - struct requirement_list *node; - int pending_update = 0; - - spin_lock_irqsave(&pm_qos_lock, flags); - list_for_each_entry(node, - &pm_qos_array[pm_qos_class]->requirements.list, list) { - if (strcmp(node->name, name) == 0) { - kfree(node->name); - list_del(&node->list); - kfree(node); - pending_update = 1; - break; - } - } - spin_unlock_irqrestore(&pm_qos_lock, flags); - if (pending_update) - update_target(pm_qos_class); -} -EXPORT_SYMBOL_GPL(pm_qos_remove_requirement); - -/** - * pm_qos_add_notifier - sets notification entry for changes to target value - * @pm_qos_class: identifies which qos target changes should be notified. - * @notifier: notifier block managed by caller. - * - * will register the notifier into a notification chain that gets called - * upon changes to the pm_qos_class target value. - */ -int pm_qos_add_notifier(int pm_qos_class, struct notifier_block *notifier) -{ - int retval; - - retval = blocking_notifier_chain_register( - pm_qos_array[pm_qos_class]->notifiers, notifier); - - return retval; -} -EXPORT_SYMBOL_GPL(pm_qos_add_notifier); - -/** - * pm_qos_remove_notifier - deletes notification entry from chain. - * @pm_qos_class: identifies which qos target changes are notified. - * @notifier: notifier block to be removed. - * - * will remove the notifier from the notification chain that gets called - * upon changes to the pm_qos_class target value. - */ -int pm_qos_remove_notifier(int pm_qos_class, struct notifier_block *notifier) -{ - int retval; - - retval = blocking_notifier_chain_unregister( - pm_qos_array[pm_qos_class]->notifiers, notifier); - - return retval; -} -EXPORT_SYMBOL_GPL(pm_qos_remove_notifier); - -#define PID_NAME_LEN 32 - -static int pm_qos_power_open(struct inode *inode, struct file *filp) -{ - int ret; - long pm_qos_class; - char name[PID_NAME_LEN]; - - pm_qos_class = find_pm_qos_object_by_minor(iminor(inode)); - if (pm_qos_class >= 0) { - filp->private_data = (void *)pm_qos_class; - snprintf(name, PID_NAME_LEN, "process_%d", current->pid); - ret = pm_qos_add_requirement(pm_qos_class, name, - PM_QOS_DEFAULT_VALUE); - if (ret >= 0) - return 0; - } - return -EPERM; -} - -static int pm_qos_power_release(struct inode *inode, struct file *filp) -{ - int pm_qos_class; - char name[PID_NAME_LEN]; - - pm_qos_class = (long)filp->private_data; - snprintf(name, PID_NAME_LEN, "process_%d", current->pid); - pm_qos_remove_requirement(pm_qos_class, name); - - return 0; -} - -static ssize_t pm_qos_power_write(struct file *filp, const char __user *buf, - size_t count, loff_t *f_pos) -{ - s32 value; - int pm_qos_class; - char name[PID_NAME_LEN]; - - pm_qos_class = (long)filp->private_data; - if (count != sizeof(s32)) - return -EINVAL; - if (copy_from_user(&value, buf, sizeof(s32))) - return -EFAULT; - snprintf(name, PID_NAME_LEN, "process_%d", current->pid); - pm_qos_update_requirement(pm_qos_class, name, value); - - return sizeof(s32); -} - - -/* - * This initializes pm-qos for older kernels. - */ -int compat_pm_qos_power_init(void) -{ - int ret = 0; - - ret = register_pm_qos_misc(&cpu_dma_pm_qos); - if (ret < 0) { - printk(KERN_ERR "pm_qos_param: cpu_dma_latency setup failed\n"); - return ret; - } - ret = register_pm_qos_misc(&network_lat_pm_qos); - if (ret < 0) { - printk(KERN_ERR "pm_qos_param: network_latency setup failed\n"); - return ret; - } - ret = register_pm_qos_misc(&network_throughput_pm_qos); - if (ret < 0) { - printk(KERN_ERR - "pm_qos_param: network_throughput setup failed\n"); - return ret; - } - ret = register_pm_qos_misc(&system_bus_freq_pm_qos); - if (ret < 0) - printk(KERN_ERR - "pm_qos_param: system_bus_freq setup failed\n"); - - return ret; -} - -int compat_pm_qos_power_deinit(void) -{ - int ret = 0; - - ret = misc_deregister(&cpu_dma_pm_qos.pm_qos_power_miscdev); - if (ret < 0) { - printk(KERN_ERR "pm_qos_param: cpu_dma_latency deinit failed\n"); - return ret; - } - - ret = misc_deregister(&network_lat_pm_qos.pm_qos_power_miscdev); - if (ret < 0) { - printk(KERN_ERR "pm_qos_param: network_latency deinit failed\n"); - return ret; - } - - ret = misc_deregister(&network_throughput_pm_qos.pm_qos_power_miscdev); - if (ret < 0) { - printk(KERN_ERR - "pm_qos_param: network_throughput deinit failed\n"); - return ret; - } - - ret = misc_deregister(&system_bus_freq_pm_qos.pm_qos_power_miscdev); - if (ret < 0) { - printk(KERN_ERR - "pm_qos_param: system_bus_freq deinit failed\n"); - return ret; - } - - return ret; -} -#endif /* LINUX_VERSION_CODE < KERNEL_VERSION(2,6,25) */ diff --git a/openairITS/mac/DOT11/compat/scripts/compat_firmware_install b/openairITS/mac/DOT11/compat/scripts/compat_firmware_install deleted file mode 100755 index 33e4fde846..0000000000 --- a/openairITS/mac/DOT11/compat/scripts/compat_firmware_install +++ /dev/null @@ -1,21 +0,0 @@ -#!/bin/sh - -if [ -f /usr/bin/lsb_release ]; then - LSB_RED_ID=$(/usr/bin/lsb_release -i -s) -else - LSB_RED_ID="Unknown" -fi - -case $LSB_RED_ID in -"Ubuntu") - mkdir -p /lib/udev/ /lib/udev/rules.d/ - cp udev/ubuntu/compat_firmware.sh /lib/udev/ - cp udev/ubuntu/50-compat_firmware.rules /lib/udev/rules.d/ - ;; -*) - mkdir -p /lib/udev/ /lib/udev/rules.d/ - cp udev/compat_firmware.sh /lib/udev/ - cp udev/50-compat_firmware.rules /lib/udev/rules.d/ - ;; -esac - diff --git a/openairITS/mac/DOT11/compat/scripts/gen-compat-autoconf.sh b/openairITS/mac/DOT11/compat/scripts/gen-compat-autoconf.sh deleted file mode 100755 index e52cc5aa88..0000000000 --- a/openairITS/mac/DOT11/compat/scripts/gen-compat-autoconf.sh +++ /dev/null @@ -1,105 +0,0 @@ -#!/bin/bash -# -# Copyright 2012 Luis R. Rodriguez -# Copyright 2011 Hauke Mehrtens -# Copyright 2011 John W. Linville -# -# Use this to parse a small .config equivalent looking file to generate -# our own autoconf.h. This file has defines for each config option -# just like the kernels include/linux/autoconf.h -# -# XXX: consider using scripts/kconfig/confdata.c instead. -# On the downside this would require the user to have libc though. - -# This indicates which is the oldest kernel we support -# Update this if you are adding support for older kernels. -OLDEST_KERNEL_SUPPORTED="2.6.24" - -if [ $# -ne 1 ]; then - echo "Usage $0 config-file" - exit -fi - -COMPAT_CONFIG="$1" - -if [ ! -f $COMPAT_CONFIG ]; then - echo "File $1 is not a file" - exit -fi - -# Defines a CONFIG_ option if not defined yet, this helps respect -# linux/autoconf.h -function define_config { - VAR=$1 - VALUE=$2 - case $VALUE in - n) # Try to undefine it - echo "#undef $VAR" - ;; - y) - echo "#ifndef $VAR" - echo "#define $VAR 1" - echo "#endif /* $VAR */" - ;; - m) - echo "#ifndef $VAR" - echo "#define $VAR 1" - echo "#endif /* $VAR */" - ;; - *) # Assume string - # XXX: add better checks to make sure what was on - # the right was indeed a string - echo "#ifndef $VAR" - echo "#define $VAR \"$VALUE\"" - echo "#endif /* $VAR */" - ;; - esac -} - -function kernel_version_req { - VERSION=$(echo $1 | sed -e 's/\./,/g') - echo "#if (LINUX_VERSION_CODE < KERNEL_VERSION($VERSION))" - echo "#error compat requirement: Linux >= $VERSION" - echo "#endif /* (LINUX_VERSION_CODE < KERNEL_VERSION($VERSION) */" -} - -cat <= \3)/' -e 's/\(#ifdef \)\(CONFIG_[^:space:]*\)/#if defined(\2) || defined(\2_MODULE)/' - continue - ;; - 'ifndef+CONFIG_'* ) - echo "#$i" | sed -e 's/+/ /' -e 's/\(ifndef CONFIG_COMPAT_KERNEL_3_\)\([0-9]*\)/if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,\2,0))/' -e 's/\(ifndef CONFIG_COMPAT_KERNEL_2_6_\)\([0-9]*\)/if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,\2))/' -e 's/\(ifndef CONFIG_COMPAT_RHEL_\)\([0-9]*\)_\([0-9]*\)/if (!defined(RHEL_MAJOR) || RHEL_MAJOR != \2 || RHEL_MINOR < \3)/' -e 's/\(#ifndef \)\(CONFIG_[^:space:]*\)/#if !defined(\2) \&\& !defined(\2_MODULE)/' - continue - ;; - 'else+#CONFIG_'* | 'endif+#CONFIG_'* ) - echo "#$i */" |sed -e 's/+#/ \/* /g' - continue - ;; - CONFIG_* ) - # Get the element on the left of the "=" - VAR=$(echo $i | cut -d"=" -f 1) - # Get the element on the right of the "=" - VALUE=$(echo $i | cut -d"=" -f 2) - - # Any other module which can *definitely* be built as a module goes here - define_config $VAR $VALUE - continue - ;; - esac -done - -echo "#endif /* COMPAT_AUTOCONF_INCLUDED */" diff --git a/openairITS/mac/DOT11/compat/scripts/gen-compat-config.sh b/openairITS/mac/DOT11/compat/scripts/gen-compat-config.sh deleted file mode 100755 index f56cbfc8ec..0000000000 --- a/openairITS/mac/DOT11/compat/scripts/gen-compat-config.sh +++ /dev/null @@ -1,64 +0,0 @@ -#!/bin/bash -# Copyright 2012 Luis R. Rodriguez -# Copyright 2012 Hauke Mehrtens -# -# This generates a bunch of CONFIG_COMPAT_KERNEL_2_6_22 -# CONFIG_COMPAT_KERNEL_3_0 .. etc for each kernel release you need an object -# for. -# -# Note: this is part of the compat.git project, not compat-wireless.git, -# send patches against compat.git. - -if [[ ! -f ${KLIB_BUILD}/Makefile ]]; then - exit -fi - -# Actual kernel version -KERNEL_VERSION=$(${MAKE} -C ${KLIB_BUILD} kernelversion | sed -n 's/^\([0-9]\)\..*/\1/p') - -# 3.0 kernel stuff -COMPAT_LATEST_VERSION="5" -KERNEL_SUBLEVEL="-1" - -# Note that this script will export all variables explicitly, -# trying to export all with a blanket "export" statement at -# the top of the generated file causes the build to slow down -# by an order of magnitude. - -if [[ ${KERNEL_VERSION} -eq "3" ]]; then - KERNEL_SUBLEVEL=$(${MAKE} -C ${KLIB_BUILD} kernelversion | sed -n 's/^3\.\([0-9]\+\).*/\1/p') -else - COMPAT_26LATEST_VERSION="39" - KERNEL_26SUBLEVEL=$(${MAKE} -C ${KLIB_BUILD} kernelversion | sed -n 's/^2\.6\.\([0-9]\+\).*/\1/p') - let KERNEL_26SUBLEVEL=${KERNEL_26SUBLEVEL}+1 - - for i in $(seq ${KERNEL_26SUBLEVEL} ${COMPAT_26LATEST_VERSION}); do - eval CONFIG_COMPAT_KERNEL_2_6_${i}=y - echo "export CONFIG_COMPAT_KERNEL_2_6_${i}=y" - done -fi - -let KERNEL_SUBLEVEL=${KERNEL_SUBLEVEL}+1 -for i in $(seq ${KERNEL_SUBLEVEL} ${COMPAT_LATEST_VERSION}); do - eval CONFIG_COMPAT_KERNEL_3_${i}=y - echo "export CONFIG_COMPAT_KERNEL_3_${i}=y" -done - -# The purpose of these seem to be the inverse of the above other varibales. -# The RHEL checks seem to annotate the existance of RHEL minor versions. -RHEL_MAJOR=$(grep ^RHEL_MAJOR ${KLIB_BUILD}/Makefile | sed -n 's/.*= *\(.*\)/\1/p') -if [[ ! -z ${RHEL_MAJOR} ]]; then - RHEL_MINOR=$(grep ^RHEL_MINOR $(KLIB_BUILD)/Makefile | sed -n 's/.*= *\(.*\)/\1/p') - for i in $(seq 0 ${RHEL_MINOR}); do - eval CONFIG_COMPAT_${RHEL_MAJOR}_${i}=y - echo "export CONFIG_COMPAT_${RHEL_MAJOR}_${i}=y" - done -fi - -if [[ ${CONFIG_COMPAT_KERNEL_2_6_33} = "y" ]]; then - echo "export CONFIG_COMPAT_FIRMWARE_CLASS=m" -fi - -if [[ ${CONFIG_COMPAT_KERNEL_2_6_36} = "y" ]]; then - echo "export CONFIG_COMPAT_KFIFO=y" -fi diff --git a/openairITS/mac/DOT11/compat/scripts/skip-colors b/openairITS/mac/DOT11/compat/scripts/skip-colors deleted file mode 100755 index 121626fb16..0000000000 --- a/openairITS/mac/DOT11/compat/scripts/skip-colors +++ /dev/null @@ -1,2 +0,0 @@ -#!/bin/bash -perl -pe 's|(\e)\[(\d+)(;*)(\d*)(\w)||g' diff --git a/openairITS/mac/DOT11/compat_base_tree b/openairITS/mac/DOT11/compat_base_tree deleted file mode 100644 index ab2d9258c6..0000000000 --- a/openairITS/mac/DOT11/compat_base_tree +++ /dev/null @@ -1 +0,0 @@ -linux-stable.git diff --git a/openairITS/mac/DOT11/compat_base_tree_version b/openairITS/mac/DOT11/compat_base_tree_version deleted file mode 100644 index a861ab72fd..0000000000 --- a/openairITS/mac/DOT11/compat_base_tree_version +++ /dev/null @@ -1 +0,0 @@ -v3.4-rc3 diff --git a/openairITS/mac/DOT11/compat_version b/openairITS/mac/DOT11/compat_version deleted file mode 100644 index ac0b9a674c..0000000000 --- a/openairITS/mac/DOT11/compat_version +++ /dev/null @@ -1 +0,0 @@ -compat-wireless-v3.4-rc3-1 diff --git a/openairITS/mac/DOT11/config.mk b/openairITS/mac/DOT11/config.mk deleted file mode 100644 index f02d52b7f2..0000000000 --- a/openairITS/mac/DOT11/config.mk +++ /dev/null @@ -1,677 +0,0 @@ -ifeq ($(wildcard $(KLIB_BUILD)/.config),) -# These will be ignored by compat autoconf - export CONFIG_PCI=y - export CONFIG_USB=y - export CONFIG_PCMCIA=y - export CONFIG_SSB=m -else -include $(KLIB_BUILD)/.config -endif - -ifneq ($(wildcard $(KLIB_BUILD)/Makefile),) - -KERNEL_VERSION := $(shell $(MAKE) -C $(KLIB_BUILD) kernelversion | sed -n 's/^\([0-9]\)\..*/\1/p') - -ifneq ($(KERNEL_VERSION),2) -else -KERNEL_26SUBLEVEL := $(shell $(MAKE) -C $(KLIB_BUILD) kernelversion | sed -n 's/^2\.6\.\([0-9]\+\).*/\1/p') -endif - -ifdef CONFIG_COMPAT_KERNEL_2_6_24 -$(error "ERROR: compat-wireless by default supports kernels >= 2.6.24, try enabling only one driver though") -endif #CONFIG_COMPAT_KERNEL_2_6_24 - -ifeq ($(CONFIG_CFG80211),y) -$(error "ERROR: your kernel has CONFIG_CFG80211=y, you should have it CONFIG_CFG80211=m if you want to use this thing.") -endif - - -# 2.6.27 has FTRACE_DYNAMIC borked, so we will complain if -# you have it enabled, otherwise you will very likely run into -# a kernel panic. -# XXX: move this to compat_autoconf.h script generation -ifeq ($(KERNEL_VERSION),2) -ifeq ($(shell test $(KERNEL_VERSION) -eq 2 -a $(KERNEL_26SUBLEVEL) -eq 27 && echo yes),yes) -ifeq ($(CONFIG_DYNAMIC_FTRACE),y) -$(error "ERROR: Your 2.6.27 kernel has CONFIG_DYNAMIC_FTRACE, please upgrade your distribution kernel as newer ones should not have this enabled (and if so report a bug) or remove this warning if you know what you are doing") -endif -endif -endif - -# This is because with CONFIG_MAC80211 include/linux/skbuff.h will -# enable on 2.6.27 a new attribute: -# -# skb->do_not_encrypt -# -# and on 2.6.28 another new attribute: -# -# skb->requeue -# -# In kernel 2.6.32 both attributes were removed. -# -# XXX: move this to compat_autoconf.h script generation -ifeq ($(KERNEL_VERSION),2) -ifeq ($(shell test $(KERNEL_VERSION) -eq 2 -a $(KERNEL_26SUBLEVEL) -ge 27 -a $(KERNEL_26SUBLEVEL) -le 31 && echo yes),yes) -ifeq ($(CONFIG_MAC80211),) -$(error "ERROR: Your >=2.6.27 and <= 2.6.31 kernel has CONFIG_MAC80211 disabled, you should have it CONFIG_MAC80211=m if you want to use this thing.") -endif -endif -endif - -ifneq ($(KERNELRELEASE),) # This prevents a warning - -# We will warn when you don't have MQ support or NET_SCHED enabled. -# -# We could consider just quiting if MQ and NET_SCHED is disabled -# as I suspect all users of this package want 802.11e (WME) and -# 802.11n (HT) support. -ifeq ($(CONFIG_NET_SCHED),) - QOS_REQS_MISSING+=CONFIG_NET_SCHED -endif - -ifneq ($(QOS_REQS_MISSING),) # Complain about our missing dependencies -$(warning "WARNING: You are running a kernel >= 2.6.23, you should enable in it $(QOS_REQS_MISSING) for 802.11[ne] support") -endif - -endif # build check -endif # kernel Makefile check - -# These both are needed by compat-wireless || compat-bluetooth so enable them - export CONFIG_COMPAT_RFKILL=y - -ifeq ($(CONFIG_MAC80211),y) -$(error "ERROR: you have MAC80211 compiled into the kernel, CONFIG_MAC80211=y, as such you cannot replace its mac80211 driver. You need this set to CONFIG_MAC80211=m. If you are using Fedora upgrade your kernel as later version should this set as modular. For further information on Fedora see https://bugzilla.redhat.com/show_bug.cgi?id=470143. If you are using your own kernel recompile it and make mac80211 modular") -else - export CONFIG_COMPAT_WIRELESS=y - export CONFIG_COMPAT_WIRELESS_MODULES=m - export CONFIG_COMPAT_VAR_MODULES=m -# We could technically separate these but not yet, we only have b44 -# Note that we don't intend on backporting network drivers that -# use Multiqueue as that was a pain to backport to kernels older than -# 2.6.27. But -- we could just disable those drivers from kernels -# older than 2.6.27 - export CONFIG_COMPAT_NETWORK_MODULES=m - export CONFIG_COMPAT_NET_USB_MODULES=m -endif - -# The Bluetooth compatibility only builds on kernels >= 2.6.27 for now -ifndef CONFIG_COMPAT_KERNEL_2_6_27 -ifeq ($(CONFIG_BT),y) -# we'll ignore compiling bluetooth -else - export CONFIG_COMPAT_BLUETOOTH=y - export CONFIG_COMPAT_BLUETOOTH_MODULES=m -endif -endif #CONFIG_COMPAT_KERNEL_2_6_27 - -# -# CONFIG_COMPAT_FIRMWARE_CLASS definition has no leading whitespace, -# because it gets passed-on through compat_autoconf.h. -# -ifdef CONFIG_COMPAT_KERNEL_2_6_33 -ifndef CONFIG_COMPAT_RHEL_6_1 -ifdef CONFIG_FW_LOADER -export CONFIG_COMPAT_FIRMWARE_CLASS=m -endif #CONFIG_FW_LOADER -endif #CONFIG_COMPAT_RHEL_6_1 -endif #CONFIG_COMPAT_KERNEL_2_6_33 - -ifdef CONFIG_COMPAT_KERNEL_2_6_36 -ifndef CONFIG_COMPAT_RHEL_6_1 - export CONFIG_COMPAT_KFIFO=y -endif #CONFIG_COMPAT_RHEL_6_1 -endif #CONFIG_COMPAT_KERNEL_2_6_36 - -# -# CONFIG_COMPAT_BT_SOCK_CREATE_NEEDS_KERN definitions have no leading -# whitespace, because they get passed-on through compat_autoconf.h. -# -ifndef CONFIG_COMPAT_KERNEL_2_6_33 -export CONFIG_COMPAT_BT_SOCK_CREATE_NEEDS_KERN=y -endif #CONFIG_COMPAT_KERNEL_2_6_33 -ifdef CONFIG_COMPAT_RHEL_6_0 -export CONFIG_COMPAT_BT_SOCK_CREATE_NEEDS_KERN=y -endif #CONFIG_COMPAT_RHEL_6_0 - -# -# CONFIG_COMPAT_FIRMWARE_DATA_RW_NEEDS_FILP definition has no leading -# whitespace, because it gets passed-on through compat_autoconf.h. -# -ifdef CONFIG_COMPAT_RHEL_6_0 -export CONFIG_COMPAT_FIRMWARE_DATA_RW_NEEDS_FILP=y -endif #CONFIG_COMPAT_RHEL_6_0 - -# Wireless subsystem stuff -export CONFIG_MAC80211=m - -ifndef CONFIG_COMPAT_KERNEL_2_6_33 -export CONFIG_COMPAT_MAC80211_DRIVER_API_TRACER=y -endif #CONFIG_COMPAT_KERNEL_2_6_33 - -# CONFIG_MAC80211_DEBUGFS=y -# CONFIG_MAC80211_NOINLINE=y -# CONFIG_MAC80211_VERBOSE_DEBUG=y -# CONFIG_MAC80211_HT_DEBUG=y -# CONFIG_MAC80211_TKIP_DEBUG=y -# CONFIG_MAC80211_IBSS_DEBUG=y -# CONFIG_MAC80211_VERBOSE_PS_DEBUG=y -# CONFIG_MAC80211_VERBOSE_MPL_DEBUG=y -# CONFIG_MAC80211_VERBOSE_MHWMP_DEBUG=y -# CONFIG_MAC80211_VERBOSE_TDLS_DEBUG -# CONFIG_MAC80211_DEBUG_COUNTERS=y - -# choose between pid and minstrel as default rate control algorithm -export CONFIG_MAC80211_RC_DEFAULT=minstrel_ht -export CONFIG_MAC80211_RC_DEFAULT_MINSTREL=y -# CONFIG_MAC80211_RC_DEFAULT_PID=y -# This is the one used by our compat-wireless net/mac80211/rate.c -# in case you have and old kernel which is overriding this to pid. -export CONFIG_COMPAT_MAC80211_RC_DEFAULT=minstrel_ht -export CONFIG_MAC80211_RC_PID=y -export CONFIG_MAC80211_RC_MINSTREL=y -export CONFIG_MAC80211_RC_MINSTREL_HT=y -ifdef CONFIG_LEDS_TRIGGERS -export CONFIG_MAC80211_LEDS=y -endif #CONFIG_LEDS_TRIGGERS - -# enable mesh networking too -export CONFIG_MAC80211_MESH=y - -export CONFIG_CFG80211=m -export CONFIG_CFG80211_DEFAULT_PS=y -# CONFIG_CFG80211_DEBUGFS=y -# CONFIG_NL80211_TESTMODE=y -# CONFIG_CFG80211_DEVELOPER_WARNINGS=y -# CONFIG_CFG80211_REG_DEBUG=y -# CONFIG_CFG80211_INTERNAL_REGDB=y -# See below for wext stuff - -export CONFIG_LIB80211=m -export CONFIG_LIB80211_CRYPT_WEP=m -export CONFIG_LIB80211_CRYPT_CCMP=m -export CONFIG_LIB80211_CRYPT_TKIP=m -# CONFIG_LIB80211_DEBUG=y - -export CONFIG_BT=m -export CONFIG_BT_RFCOMM=m -export CONFIG_BT_RFCOMM_TTY=y -export CONFIG_BT_BNEP=m -export CONFIG_BT_BNEP_MC_FILTER=y -export CONFIG_BT_BNEP_PROTO_FILTER=y -# CONFIG_BT_CMTP depends on ISDN_CAPI -ifdef CONFIG_ISDN_CAPI -export CONFIG_BT_CMTP=m -endif #CONFIG_ISDN_CAPI -ifndef CONFIG_COMPAT_KERNEL_2_6_28 -export CONFIG_COMPAT_BT_HIDP=m -endif #CONFIG_COMPAT_KERNEL_2_6_28 - -export CONFIG_BT_HCIUART=M -export CONFIG_BT_HCIUART_H4=y -export CONFIG_BT_HCIUART_BCSP=y -export CONFIG_BT_HCIUART_ATH3K=y -export CONFIG_BT_HCIUART_LL=y - -export CONFIG_BT_HCIVHCI=m -export CONFIG_BT_MRVL=m - -ifdef CONFIG_PCMCIA -export CONFIG_BT_HCIDTL1=m -export CONFIG_BT_HCIBT3C=m -export CONFIG_BT_HCIBLUECARD=m -export CONFIG_BT_HCIBTUART=m -endif #CONFIG_PCMCIA - - -# We need CONFIG_WIRELESS_EXT for CONFIG_CFG80211_WEXT for every kernel -# version. The new way CONFIG_CFG80211_WEXT is called from the kernel -# does not work with compat-wireless because it calls some callback -# function on struct wiphy. This struct is shipped with compat-wireless -# and changes from kernel version to version. We are using the -# wireless_handlers attribute which will be activated by -# CONFIG_WIRELESS_EXT. -ifdef CONFIG_WIRELESS_EXT -export CONFIG_CFG80211_WEXT=y -else #CONFIG_CFG80211_WEXT -$(warning "WARNING: CONFIG_CFG80211_WEXT will be deactivated or not working because kernel was compiled with CONFIG_WIRELESS_EXT=n. Tools using wext interface like iwconfig will not work. To activate it build your kernel e.g. with CONFIG_LIBIPW=m.") -endif #CONFIG_WIRELESS_EXT - -ifdef CONFIG_STAGING -export CONFIG_COMPAT_STAGING=m -endif #CONFIG_STAGING - -# mac80211 test driver -export CONFIG_MAC80211_HWSIM=m - -export CONFIG_ATH5K=m -# CONFIG_ATH5K_DEBUG=y -# CONFIG_ATH5K_TRACER=y -# CONFIG_ATH5K_AHB=y - -export CONFIG_ATH9K=m -export CONFIG_ATH9K_HW=m -export CONFIG_ATH9K_COMMON=m -# CONFIG_ATH9K_DEBUGFS=y -# CONFIG_ATH9K_AHB=y -# CONFIG_ATH9K_PKTLOG=y - -# Disable this to get minstrel as default, we leave the ath9k -# rate control algorithm as the default for now as that is also -# default upstream on the kernel. We will move this to minstrel -# as default once we get minstrel properly tested and blessed by -# our systems engineering team. CCK rates also need to be used -# for long range considerations. -export CONFIG_COMPAT_ATH9K_RATE_CONTROL=y - -export CONFIG_ATH9K_BTCOEX_SUPPORT=y - -# PCI Drivers -ifdef CONFIG_PCI - -export CONFIG_ATH5K_PCI=y -export CONFIG_ATH9K_PCI=y - -export CONFIG_IWLWIFI=m -export CONFIG_IWLWIFI_P2P=y -# CONFIG_IWLWIFI_DEBUG=y -# CONFIG_IWLWIFI_DEBUGFS=y -# CONFIG_IWLWIFI_DEVICE_TRACING=y -# CONFIG_IWLWIFI_DEBUG_EXPERIMENTAL_UCODE=y - -export CONFIG_IWLEGACY=m -export CONFIG_COMPAT_IWL4965=m -export CONFIG_IWL3945=m -# CONFIG_IWLEGACY_DEBUG=y -# CONFIG_IWLEGACY_DEBUGFS=y - - -export CONFIG_B43=m -export CONFIG_B43_HWRNG=y -export CONFIG_B43_PCI_AUTOSELECT=y -ifdef CONFIG_PCMCIA -export CONFIG_B43_PCMCIA=y -endif #CONFIG_PCMCIA -ifdef CONFIG_MAC80211_LEDS -export CONFIG_B43_LEDS=y -endif #CONFIG_MAC80211_LEDS -export CONFIG_B43_PHY_LP=y -export CONFIG_B43_PHY_N=y -export CONFIG_B43_PHY_HT=y -# CONFIG_B43_PHY_LCN=y -# CONFIG_B43_DEBUG=y - -export CONFIG_B43LEGACY=m -export CONFIG_B43LEGACY_HWRNG=y -export CONFIG_B43LEGACY_PCI_AUTOSELECT=y -ifdef CONFIG_MAC80211_LEDS -export CONFIG_B43LEGACY_LEDS=y -endif #CONFIG_MAC80211_LEDS -# CONFIG_B43LEGACY_DEBUG=y -export CONFIG_B43LEGACY_DMA=y -export CONFIG_B43LEGACY_PIO=y - -ifdef CONFIG_WIRELESS_EXT -# The Intel ipws -export CONFIG_LIBIPW=m -# CONFIG_LIBIPW_DEBUG=y - -export CONFIG_IPW2100=m -export CONFIG_IPW2100_MONITOR=y -# CONFIG_IPW2100_DEBUG=y -export CONFIG_IPW2200=m -export CONFIG_IPW2200_MONITOR=y -export CONFIG_IPW2200_RADIOTAP=y -export CONFIG_IPW2200_PROMISCUOUS=y -export CONFIG_IPW2200_QOS=y -# CONFIG_IPW2200_DEBUG=y -# The above enables use a second interface prefixed 'rtap'. -# Example usage: -# -# % modprobe ipw2200 rtap_iface=1 -# % ifconfig rtap0 up -# % tethereal -i rtap0 -# -# If you do not specify 'rtap_iface=1' as a module parameter then -# the rtap interface will not be created and you will need to turn -# it on via sysfs: -# -# % echo 1 > /sys/bus/pci/drivers/ipw2200/*/rtap_iface -endif #CONFIG_WIRELESS_EXT - -ifdef CONFIG_SSB -# Sonics Silicon Backplane -export CONFIG_SSB_SPROM=y - -export CONFIG_SSB_BLOCKIO=y -export CONFIG_SSB_PCIHOST=y -export CONFIG_SSB_B43_PCI_BRIDGE=y -ifdef CONFIG_PCMCIA -export CONFIG_SSB_PCMCIAHOST=y -endif #CONFIG_PCMCIA -# CONFIG_SSB_DEBUG=y -export CONFIG_SSB_DRIVER_PCICORE=y -export CONFIG_B43_SSB=y -endif #CONFIG_SSB - -export CONFIG_BCMA=m -export CONFIG_BCMA_BLOCKIO=y -export CONFIG_BCMA_HOST_PCI=y -# CONFIG_BCMA_DEBUG=y -export CONFIG_B43_BCMA=y -export CONFIG_B43_BCMA_EXTRA=y - -export CONFIG_P54_PCI=m - -export CONFIG_B44=m -export CONFIG_B44_PCI=y - -export CONFIG_RTL8180=m - -export CONFIG_ADM8211=m - -export CONFIG_RT2X00_LIB_PCI=m -export CONFIG_RT2400PCI=m -export CONFIG_RT2500PCI=m -ifdef CONFIG_CRC_CCITT -export CONFIG_RT2800PCI=m -export CONFIG_RT2800PCI_RT33XX=y -export CONFIG_RT2800PCI_RT35XX=y -export CONFIG_RT2800PCI_RT53XX=y -endif #CONFIG_CRC_CCITT -NEED_RT2X00=y - -# Two rt2x00 drivers require firmware: rt61pci and rt73usb. They depend on -# CRC to check the firmware. We check here first for the PCI -# driver as we're in the PCI section. -ifdef CONFIG_CRC_ITU_T -export CONFIG_RT61PCI=m -endif #CONFIG_CRC_ITU_T - -export CONFIG_MWL8K=m - -# Ethernet drivers go here -export CONFIG_ATL1=m -export CONFIG_ATL2=m -export CONFIG_ATL1E=m -ifdef CONFIG_COMPAT_KERNEL_2_6_27 -export CONFIG_ATL1C=n -export CONFIG_ALX=m -else #CONFIG_COMPAT_KERNEL_2_6_27 -export CONFIG_ATL1C=n -export CONFIG_ALX=m -endif #CONFIG_COMPAT_KERNEL_2_6_27 - -ifdef CONFIG_WIRELESS_EXT -export CONFIG_HERMES=m -export CONFIG_HERMES_CACHE_FW_ON_INIT=y -ifdef CONFIG_PPC_PMAC -export CONFIG_APPLE_AIRPORT=m -endif #CONFIG_PPC_PMAC -export CONFIG_PLX_HERMES=m -export CONFIG_TMD_HERMES=m -export CONFIG_NORTEL_HERMES=m -export CONFIG_PCI_HERMES=m -ifdef CONFIG_PCMCIA -export CONFIG_PCMCIA_HERMES=m -export CONFIG_PCMCIA_SPECTRUM=m -endif #CONFIG_PCMCIA -endif #CONFIG_WIRELESS_EXT - -export CONFIG_RTL8192CE=m -export CONFIG_RTL8192SE=m -export CONFIG_RTL8192DE=m - -export CONFIG_BRCMSMAC=m - -export CONFIG_MWIFIEX_PCIE=m - -endif #CONFIG_PCI -## end of PCI - -ifdef CONFIG_PCMCIA - -ifdef CONFIG_COMPAT_KERNEL_2_6_27 -export CONFIG_LIBERTAS=n -export CONFIG_LIBERTAS_CS=n -else #CONFIG_COMPAT_KERNEL_2_6_27 -export CONFIG_LIBERTAS_CS=m -NEED_LIBERTAS=y -endif #CONFIG_COMPAT_KERNEL_2_6_27 - -endif #CONFIG_PCMCIA -## end of PCMCIA - -# This is required for some cards -export CONFIG_EEPROM_93CX6=m - -# USB Drivers -ifdef CONFIG_USB -ifndef CONFIG_COMPAT_KERNEL_2_6_29 -export CONFIG_COMPAT_ZD1211RW=m -# CONFIG_ZD1211RW_DEBUG=y -endif #CONFIG_COMPAT_KERNEL_2_6_29 - -# Sorry, rndis_wlan uses cancel_work_sync which is new and can't be done in compat... - -# Wireless RNDIS USB support (RTL8185 802.11g) A-Link WL54PC -# All of these devices are based on Broadcom 4320 chip which -# is only wireless RNDIS chip known to date. -# Note: this depends on CONFIG_USB_NET_RNDIS_HOST and CONFIG_USB_NET_CDCETHER -# it also requires new RNDIS_HOST and CDC_ETHER modules which we add -ifdef CONFIG_COMPAT_KERNEL_2_6_29 -export CONFIG_USB_COMPAT_USBNET=n -export CONFIG_USB_NET_COMPAT_RNDIS_HOST=n -export CONFIG_USB_NET_COMPAT_RNDIS_WLAN=n -export CONFIG_USB_NET_COMPAT_CDCETHER=n -else #CONFIG_COMPAT_KERNEL_2_6_29 -export CONFIG_USB_COMPAT_USBNET=m -ifdef CONFIG_USB_NET_CDCETHER -export CONFIG_USB_NET_COMPAT_RNDIS_HOST=m -export CONFIG_USB_NET_COMPAT_RNDIS_WLAN=m -endif #CONFIG_USB_NET_CDCETHER -ifdef CONFIG_USB_NET_CDCETHER_MODULE -export CONFIG_USB_NET_COMPAT_RNDIS_HOST=m -export CONFIG_USB_NET_COMPAT_RNDIS_WLAN=m -endif #CONFIG_USB_NET_CDCETHER -export CONFIG_USB_NET_COMPAT_CDCETHER=m -endif #CONFIG_COMPAT_KERNEL_2_6_29 - - -export CONFIG_P54_USB=m -export CONFIG_RTL8187=m -ifdef CONFIG_MAC80211_LEDS -export CONFIG_RTL8187_LEDS=y -endif #CONFIG_MAC80211_LEDS - -export CONFIG_AT76C50X_USB=m - -ifndef CONFIG_COMPAT_KERNEL_2_6_29 -export CONFIG_CARL9170=m -ifdef CONFIG_MAC80211_LEDS -export CONFIG_CARL9170_LEDS=y -endif #CONFIG_MAC80211_LEDS -# CONFIG_CARL9170_DEBUGFS=y -export CONFIG_CARL9170_WPC=y -endif #CONFIG_COMPAT_KERNEL_2_6_29 - -# This activates a threading fix for usb urb. -# this is mainline commit: b3e670443b7fb8a2d29831b62b44a039c283e351 -# This fix will be included in some stable releases. -export CONFIG_COMPAT_USB_URB_THREAD_FIX=y - -export CONFIG_ATH9K_HTC=m -# CONFIG_ATH9K_HTC_DEBUGFS=y - -# RT2500USB does not require firmware -export CONFIG_RT2500USB=m -ifdef CONFIG_CRC_CCITT -export CONFIG_RT2800USB=m -export CONFIG_RT2800USB_RT33XX=y -export CONFIG_RT2800USB_RT35XX=y -export CONFIG_RT2800USB_RT53XX=y -export CONFIG_RT2800USB_UNKNOWN=y -endif #CONFIG_CRC_CCITT -export CONFIG_RT2X00_LIB_USB=m -NEED_RT2X00=y -# RT73USB requires firmware -ifdef CONFIG_CRC_ITU_T -export CONFIG_RT73USB=m -endif #CONFIG_CRC_ITU_T - -ifdef CONFIG_COMPAT_KERNEL_2_6_27 -export CONFIG_LIBERTAS_THINFIRM_USB=n -export CONFIG_LIBERTAS_USB=n -NEED_LIBERTAS=n -else #CONFIG_COMPAT_KERNEL_2_6_27 -export CONFIG_LIBERTAS_THINFIRM_USB=m -export CONFIG_LIBERTAS_USB=m -NEED_LIBERTAS=y -endif #CONFIG_COMPAT_KERNEL_2_6_27 - -export CONFIG_ORINOCO_USB=m - -export CONFIG_BT_HCIBTUSB=m -export CONFIG_BT_HCIBCM203X=m -export CONFIG_BT_HCIBPA10X=m -export CONFIG_BT_HCIBFUSB=m -export CONFIG_BT_ATH3K=m - -export CONFIG_RTL8192CU=m - -endif #CONFIG_USB end of USB driver list - -ifdef CONFIG_SPI_MASTER -ifndef CONFIG_COMPAT_KERNEL_2_6_25 - -ifdef CONFIG_CRC7 -export CONFIG_WL1251_SPI=m -export CONFIG_WL12XX_SPI=m -endif #CONFIG_CRC7 -export CONFIG_P54_SPI=m - -ifdef CONFIG_COMPAT_KERNEL_2_6_27 -export CONFIG_LIBERTAS_SPI=n -NEED_LIBERTAS=n -else #CONFIG_COMPAT_KERNEL_2_6_27 -export CONFIG_LIBERTAS_SPI=m -NEED_LIBERTAS=y -endif #CONFIG_COMPAT_KERNEL_2_6_27 - -endif #CONFIG_COMPAT_KERNEL_2_6_25 -endif #CONFIG_SPI_MASTER end of SPI driver list - -ifdef CONFIG_MMC - -export CONFIG_SSB_SDIOHOST=y -export CONFIG_B43_SDIO=y - -ifdef CONFIG_CRC7 -ifdef CONFIG_WL12XX_PLATFORM_DATA -export CONFIG_COMPAT_WL1251_SDIO=m -endif #CONFIG_WL12XX_PLATFORM_DATA - -ifndef CONFIG_COMPAT_KERNEL_2_6_32 -ifdef CONFIG_WL12XX_PLATFORM_DATA -export CONFIG_COMPAT_WL12XX_SDIO=m -endif #CONFIG_WL12XX_PLATFORM_DATA -endif #CONFIG_COMPAT_KERNEL_2_6_32 - -endif #CONFIG_CRC7 - -export CONFIG_MWIFIEX_SDIO=m - -ifndef CONFIG_COMPAT_KERNEL_2_6_32 -export CONFIG_COMPAT_LIBERTAS_SDIO=m -NEED_LIBERTAS=y -endif #CONFIG_COMPAT_KERNEL_2_6_32 - -export CONFIG_IWM=m -# CONFIG_IWM_DEBUG=y -# CONFIG_IWM_TRACING=y - -export CONFIG_BT_HCIBTSDIO=m -export CONFIG_BT_MRVL_SDIO=m - -ifndef CONFIG_COMPAT_KERNEL_2_6_27 -export CONFIG_ATH6KL=m -# CONFIG_ATH6KL_DEBUG=y -endif #CONFIG_COMPAT_KERNEL_2_6_27 - -ifndef CONFIG_COMPAT_KERNEL_2_6_29 -export CONFIG_BRCMFMAC=m -export CONFIG_BRCMFMAC_SDIO=y -endif #CONFIG_COMPAT_KERNEL_2_6_29 - -endif #CONFIG_MMC - -export CONFIG_RTLWIFI=m -export CONFIG_RTL8192C_COMMON=m - -# Common rt2x00 requirements -ifeq ($(NEED_RT2X00),y) -export CONFIG_RT2X00=y -export CONFIG_RT2X00_LIB=m -export CONFIG_RT2800_LIB=m -export CONFIG_RT2X00_LIB_FIRMWARE=y -export CONFIG_RT2X00_LIB_CRYPTO=y -# CONFIG_RT2X00_LIB_SOC=y -ifdef CONFIG_COMPAT_KERNEL_2_6_25 -export CONFIG_RT2X00_LIB_LEDS=n -else #CONFIG_COMPAT_KERNEL_2_6_25 -ifdef CONFIG_LEDS_CLASS -export CONFIG_RT2X00_LIB_LEDS=y -endif #CONFIG_LEDS_CLASS -endif #CONFIG_COMPAT_KERNEL_2_6_25 -# CONFIG_RT2X00_DEBUG=y -# CONFIG_RT2X00_LIB_DEBUGFS=y -endif - -# p54 -export CONFIG_P54_COMMON=m -ifdef CONFIG_MAC80211_LEDS -export CONFIG_P54_LEDS=y -endif #CONFIG_MAC80211_LEDS - -# Atheros -export CONFIG_ATH_COMMON=m -# CONFIG_ATH_DEBUG=y - -export CONFIG_BRCMUTIL=m -# CONFIG_BRCMDBG=y - -ifdef CONFIG_CRC7 -export CONFIG_WL1251=m -export CONFIG_WL12XX=m -endif #CONFIG_CRC7 - -export CONFIG_MWIFIEX=m - -ifndef CONFIG_CORDIC -export CONFIG_COMPAT_CORDIC=y -endif #CONFIG_CORDIC - -ifndef CONFIG_CRC8 -export CONFIG_COMPAT_CRC8=y -endif #CONFIG_CRC8 - -ifdef CONFIG_COMPAT_KERNEL_2_6_27 -export CONFIG_LIBERTAS=n -else #CONFIG_COMPAT_KERNEL_2_6_27 -ifeq ($(NEED_LIBERTAS),y) -export CONFIG_LIBERTAS_THINFIRM=m -export CONFIG_LIBERTAS=m -export CONFIG_LIBERTAS_MESH=y -# CONFIG_LIBERTAS_DEBUG=y -endif -endif #CONFIG_COMPAT_KERNEL_2_6_27 - -# We need the backported rfkill module on kernel < 2.6.31. -# In more recent kernel versions use the in kernel rfkill module. -ifdef CONFIG_COMPAT_KERNEL_2_6_31 -export CONFIG_RFKILL_BACKPORT=m -ifdef CONFIG_LEDS_TRIGGERS -export CONFIG_RFKILL_BACKPORT_LEDS=y -endif #CONFIG_LEDS_TRIGGERS -export CONFIG_RFKILL_BACKPORT_INPUT=y -endif #CONFIG_COMPAT_KERNEL_2_6_31 - diff --git a/openairITS/mac/DOT11/include/N/pcmcia/cistpl.h b/openairITS/mac/DOT11/include/N/pcmcia/cistpl.h deleted file mode 100644 index 789dc59db7..0000000000 --- a/openairITS/mac/DOT11/include/N/pcmcia/cistpl.h +++ /dev/null @@ -1,10 +0,0 @@ -#include - -#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,36) -#include -#endif -#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,37) -#include -#endif - -#include_next diff --git a/openairITS/mac/DOT11/include/N/trace/define_trace.h b/openairITS/mac/DOT11/include/N/trace/define_trace.h deleted file mode 100644 index 7d03ccf770..0000000000 --- a/openairITS/mac/DOT11/include/N/trace/define_trace.h +++ /dev/null @@ -1,5 +0,0 @@ -#include - -#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,30)) -#include_next -#endif /* (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,30)) */ diff --git a/openairITS/mac/DOT11/include/crypto/aes.h b/openairITS/mac/DOT11/include/crypto/aes.h deleted file mode 100644 index 8031a54d4a..0000000000 --- a/openairITS/mac/DOT11/include/crypto/aes.h +++ /dev/null @@ -1,21 +0,0 @@ -#ifndef _COMPAT_CRYPTO_AES_H -#define _COMPAT_CRYPTO_AES_H - -#include - -#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,24)) -#include_next -#else - -#define AES_MIN_KEY_SIZE 16 -#define AES_MAX_KEY_SIZE 32 -#define AES_KEYSIZE_128 16 -#define AES_KEYSIZE_192 24 -#define AES_KEYSIZE_256 32 -#define AES_BLOCK_SIZE 16 -#define AES_MAX_KEYLENGTH (15 * 16) -#define AES_MAX_KEYLENGTH_U32 (AES_MAX_KEYLENGTH / sizeof(u32)) - -#endif /* (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,24)) */ - -#endif diff --git a/openairITS/mac/DOT11/include/linux/ath9k_platform.h b/openairITS/mac/DOT11/include/linux/ath9k_platform.h deleted file mode 100644 index 6e3f54f378..0000000000 --- a/openairITS/mac/DOT11/include/linux/ath9k_platform.h +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright (c) 2008 Atheros Communications Inc. - * Copyright (c) 2009 Gabor Juhos - * Copyright (c) 2009 Imre Kaloz - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#ifndef _LINUX_ATH9K_PLATFORM_H -#define _LINUX_ATH9K_PLATFORM_H - -#define ATH9K_PLAT_EEP_MAX_WORDS 2048 - -struct ath9k_platform_data { - u16 eeprom_data[ATH9K_PLAT_EEP_MAX_WORDS]; - u8 *macaddr; - - int led_pin; - u32 gpio_mask; - u32 gpio_val; - - bool is_clk_25mhz; - int (*get_mac_revision)(void); - int (*external_reset)(void); -}; - -#endif /* _LINUX_ATH9K_PLATFORM_H */ diff --git a/openairITS/mac/DOT11/include/linux/atomic.h b/openairITS/mac/DOT11/include/linux/atomic.h deleted file mode 100644 index 378b748fb2..0000000000 --- a/openairITS/mac/DOT11/include/linux/atomic.h +++ /dev/null @@ -1,46 +0,0 @@ -#ifndef _COMPAT_LINUX_ATOMIC_H -#define _COMPAT_LINUX_ATOMIC_H 1 - -#include - -#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,36)) -#include_next -#else - -#include - -/** - * atomic_inc_not_zero_hint - increment if not null - * @v: pointer of type atomic_t - * @hint: probable value of the atomic before the increment - * - * This version of atomic_inc_not_zero() gives a hint of probable - * value of the atomic. This helps processor to not read the memory - * before doing the atomic read/modify/write cycle, lowering - * number of bus transactions on some arches. - * - * Returns: 0 if increment was not done, 1 otherwise. - */ -#ifndef atomic_inc_not_zero_hint -static inline int atomic_inc_not_zero_hint(atomic_t *v, int hint) -{ - int val, c = hint; - - /* sanity test, should be removed by compiler if hint is a constant */ - if (!hint) - return atomic_inc_not_zero(v); - - do { - val = atomic_cmpxchg(v, c, c + 1); - if (val == c) - return 1; - c = val; - } while (c); - - return 0; -} -#endif - -#endif /* (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,36)) */ - -#endif /* _COMPAT_LINUX_ATOMIC_H */ diff --git a/openairITS/mac/DOT11/include/linux/average.h b/openairITS/mac/DOT11/include/linux/average.h deleted file mode 100644 index ece86ca3a9..0000000000 --- a/openairITS/mac/DOT11/include/linux/average.h +++ /dev/null @@ -1,5 +0,0 @@ -#include - -#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,37)) -#include_next -#endif /* (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,37)) */ diff --git a/openairITS/mac/DOT11/include/linux/bcma/bcma.h b/openairITS/mac/DOT11/include/linux/bcma/bcma.h deleted file mode 100644 index 5af9a07549..0000000000 --- a/openairITS/mac/DOT11/include/linux/bcma/bcma.h +++ /dev/null @@ -1,307 +0,0 @@ -#ifndef LINUX_BCMA_H_ -#define LINUX_BCMA_H_ - -#include -#include - -#include -#include -#include -#include /* SPROM sharing */ - -#include "bcma_regs.h" - -struct bcma_device; -struct bcma_bus; - -enum bcma_hosttype { - BCMA_HOSTTYPE_PCI, - BCMA_HOSTTYPE_SDIO, - BCMA_HOSTTYPE_SOC, -}; - -struct bcma_chipinfo { - u16 id; - u8 rev; - u8 pkg; -}; - -enum bcma_clkmode { - BCMA_CLKMODE_FAST, - BCMA_CLKMODE_DYNAMIC, -}; - -struct bcma_host_ops { - u8 (*read8)(struct bcma_device *core, u16 offset); - u16 (*read16)(struct bcma_device *core, u16 offset); - u32 (*read32)(struct bcma_device *core, u16 offset); - void (*write8)(struct bcma_device *core, u16 offset, u8 value); - void (*write16)(struct bcma_device *core, u16 offset, u16 value); - void (*write32)(struct bcma_device *core, u16 offset, u32 value); -#ifdef CONFIG_BCMA_BLOCKIO - void (*block_read)(struct bcma_device *core, void *buffer, - size_t count, u16 offset, u8 reg_width); - void (*block_write)(struct bcma_device *core, const void *buffer, - size_t count, u16 offset, u8 reg_width); -#endif - /* Agent ops */ - u32 (*aread32)(struct bcma_device *core, u16 offset); - void (*awrite32)(struct bcma_device *core, u16 offset, u32 value); -}; - -/* Core manufacturers */ -#define BCMA_MANUF_ARM 0x43B -#define BCMA_MANUF_MIPS 0x4A7 -#define BCMA_MANUF_BCM 0x4BF - -/* Core class values. */ -#define BCMA_CL_SIM 0x0 -#define BCMA_CL_EROM 0x1 -#define BCMA_CL_CORESIGHT 0x9 -#define BCMA_CL_VERIF 0xB -#define BCMA_CL_OPTIMO 0xD -#define BCMA_CL_GEN 0xE -#define BCMA_CL_PRIMECELL 0xF - -/* Core-ID values. */ -#define BCMA_CORE_OOB_ROUTER 0x367 /* Out of band */ -#define BCMA_CORE_INVALID 0x700 -#define BCMA_CORE_CHIPCOMMON 0x800 -#define BCMA_CORE_ILINE20 0x801 -#define BCMA_CORE_SRAM 0x802 -#define BCMA_CORE_SDRAM 0x803 -#define BCMA_CORE_PCI 0x804 -#define BCMA_CORE_MIPS 0x805 -#define BCMA_CORE_ETHERNET 0x806 -#define BCMA_CORE_V90 0x807 -#define BCMA_CORE_USB11_HOSTDEV 0x808 -#define BCMA_CORE_ADSL 0x809 -#define BCMA_CORE_ILINE100 0x80A -#define BCMA_CORE_IPSEC 0x80B -#define BCMA_CORE_UTOPIA 0x80C -#define BCMA_CORE_PCMCIA 0x80D -#define BCMA_CORE_INTERNAL_MEM 0x80E -#define BCMA_CORE_MEMC_SDRAM 0x80F -#define BCMA_CORE_OFDM 0x810 -#define BCMA_CORE_EXTIF 0x811 -#define BCMA_CORE_80211 0x812 -#define BCMA_CORE_PHY_A 0x813 -#define BCMA_CORE_PHY_B 0x814 -#define BCMA_CORE_PHY_G 0x815 -#define BCMA_CORE_MIPS_3302 0x816 -#define BCMA_CORE_USB11_HOST 0x817 -#define BCMA_CORE_USB11_DEV 0x818 -#define BCMA_CORE_USB20_HOST 0x819 -#define BCMA_CORE_USB20_DEV 0x81A -#define BCMA_CORE_SDIO_HOST 0x81B -#define BCMA_CORE_ROBOSWITCH 0x81C -#define BCMA_CORE_PARA_ATA 0x81D -#define BCMA_CORE_SATA_XORDMA 0x81E -#define BCMA_CORE_ETHERNET_GBIT 0x81F -#define BCMA_CORE_PCIE 0x820 -#define BCMA_CORE_PHY_N 0x821 -#define BCMA_CORE_SRAM_CTL 0x822 -#define BCMA_CORE_MINI_MACPHY 0x823 -#define BCMA_CORE_ARM_1176 0x824 -#define BCMA_CORE_ARM_7TDMI 0x825 -#define BCMA_CORE_PHY_LP 0x826 -#define BCMA_CORE_PMU 0x827 -#define BCMA_CORE_PHY_SSN 0x828 -#define BCMA_CORE_SDIO_DEV 0x829 -#define BCMA_CORE_ARM_CM3 0x82A -#define BCMA_CORE_PHY_HT 0x82B -#define BCMA_CORE_MIPS_74K 0x82C -#define BCMA_CORE_MAC_GBIT 0x82D -#define BCMA_CORE_DDR12_MEM_CTL 0x82E -#define BCMA_CORE_PCIE_RC 0x82F /* PCIe Root Complex */ -#define BCMA_CORE_OCP_OCP_BRIDGE 0x830 -#define BCMA_CORE_SHARED_COMMON 0x831 -#define BCMA_CORE_OCP_AHB_BRIDGE 0x832 -#define BCMA_CORE_SPI_HOST 0x833 -#define BCMA_CORE_I2S 0x834 -#define BCMA_CORE_SDR_DDR1_MEM_CTL 0x835 /* SDR/DDR1 memory controller core */ -#define BCMA_CORE_SHIM 0x837 /* SHIM component in ubus/6362 */ -#define BCMA_CORE_DEFAULT 0xFFF - -#define BCMA_MAX_NR_CORES 16 - -struct bcma_device { - struct bcma_bus *bus; - struct bcma_device_id id; - - struct device dev; - struct device *dma_dev; - - unsigned int irq; - bool dev_registered; - - u8 core_index; - u8 core_unit; - - u32 addr; - u32 wrap; - - void __iomem *io_addr; - void __iomem *io_wrap; - - void *drvdata; - struct list_head list; -}; - -static inline void *bcma_get_drvdata(struct bcma_device *core) -{ - return core->drvdata; -} -static inline void bcma_set_drvdata(struct bcma_device *core, void *drvdata) -{ - core->drvdata = drvdata; -} - -struct bcma_driver { - const char *name; - const struct bcma_device_id *id_table; - - int (*probe)(struct bcma_device *dev); - void (*remove)(struct bcma_device *dev); - int (*suspend)(struct bcma_device *dev); - int (*resume)(struct bcma_device *dev); - void (*shutdown)(struct bcma_device *dev); - - struct device_driver drv; -}; -extern -int __bcma_driver_register(struct bcma_driver *drv, struct module *owner); -#define bcma_driver_register(drv) \ - __bcma_driver_register(drv, THIS_MODULE) - -extern void bcma_driver_unregister(struct bcma_driver *drv); - -/* Set a fallback SPROM. - * See kdoc at the function definition for complete documentation. */ -extern int bcma_arch_register_fallback_sprom( - int (*sprom_callback)(struct bcma_bus *bus, - struct ssb_sprom *out)); - -struct bcma_bus { - /* The MMIO area. */ - void __iomem *mmio; - - const struct bcma_host_ops *ops; - - enum bcma_hosttype hosttype; - union { - /* Pointer to the PCI bus (only for BCMA_HOSTTYPE_PCI) */ - struct pci_dev *host_pci; - /* Pointer to the SDIO device (only for BCMA_HOSTTYPE_SDIO) */ - struct sdio_func *host_sdio; - }; - - struct bcma_chipinfo chipinfo; - - struct bcma_device *mapped_core; - struct list_head cores; - u8 nr_cores; - u8 init_done:1; - u8 num; - - struct bcma_drv_cc drv_cc; - struct bcma_drv_pci drv_pci; - struct bcma_drv_mips drv_mips; - - /* We decided to share SPROM struct with SSB as long as we do not need - * any hacks for BCMA. This simplifies drivers code. */ - struct ssb_sprom sprom; -}; - -static inline u32 bcma_read8(struct bcma_device *core, u16 offset) -{ - return core->bus->ops->read8(core, offset); -} -static inline u32 bcma_read16(struct bcma_device *core, u16 offset) -{ - return core->bus->ops->read16(core, offset); -} -static inline u32 bcma_read32(struct bcma_device *core, u16 offset) -{ - return core->bus->ops->read32(core, offset); -} -static inline -void bcma_write8(struct bcma_device *core, u16 offset, u32 value) -{ - core->bus->ops->write8(core, offset, value); -} -static inline -void bcma_write16(struct bcma_device *core, u16 offset, u32 value) -{ - core->bus->ops->write16(core, offset, value); -} -static inline -void bcma_write32(struct bcma_device *core, u16 offset, u32 value) -{ - core->bus->ops->write32(core, offset, value); -} -#ifdef CONFIG_BCMA_BLOCKIO -static inline void bcma_block_read(struct bcma_device *core, void *buffer, - size_t count, u16 offset, u8 reg_width) -{ - core->bus->ops->block_read(core, buffer, count, offset, reg_width); -} -static inline void bcma_block_write(struct bcma_device *core, - const void *buffer, size_t count, - u16 offset, u8 reg_width) -{ - core->bus->ops->block_write(core, buffer, count, offset, reg_width); -} -#endif -static inline u32 bcma_aread32(struct bcma_device *core, u16 offset) -{ - return core->bus->ops->aread32(core, offset); -} -static inline -void bcma_awrite32(struct bcma_device *core, u16 offset, u32 value) -{ - core->bus->ops->awrite32(core, offset, value); -} - -static inline void bcma_mask32(struct bcma_device *cc, u16 offset, u32 mask) -{ - bcma_write32(cc, offset, bcma_read32(cc, offset) & mask); -} -static inline void bcma_set32(struct bcma_device *cc, u16 offset, u32 set) -{ - bcma_write32(cc, offset, bcma_read32(cc, offset) | set); -} -static inline void bcma_maskset32(struct bcma_device *cc, - u16 offset, u32 mask, u32 set) -{ - bcma_write32(cc, offset, (bcma_read32(cc, offset) & mask) | set); -} -static inline void bcma_mask16(struct bcma_device *cc, u16 offset, u16 mask) -{ - bcma_write16(cc, offset, bcma_read16(cc, offset) & mask); -} -static inline void bcma_set16(struct bcma_device *cc, u16 offset, u16 set) -{ - bcma_write16(cc, offset, bcma_read16(cc, offset) | set); -} -static inline void bcma_maskset16(struct bcma_device *cc, - u16 offset, u16 mask, u16 set) -{ - bcma_write16(cc, offset, (bcma_read16(cc, offset) & mask) | set); -} - -extern struct bcma_device *bcma_find_core(struct bcma_bus *bus, u16 coreid); -extern bool bcma_core_is_enabled(struct bcma_device *core); -extern void bcma_core_disable(struct bcma_device *core, u32 flags); -extern int bcma_core_enable(struct bcma_device *core, u32 flags); -extern void bcma_core_set_clockmode(struct bcma_device *core, - enum bcma_clkmode clkmode); -extern void bcma_core_pll_ctl(struct bcma_device *core, u32 req, u32 status, - bool on); -#define BCMA_DMA_TRANSLATION_MASK 0xC0000000 -#define BCMA_DMA_TRANSLATION_NONE 0x00000000 -#define BCMA_DMA_TRANSLATION_DMA32_CMT 0x40000000 /* Client Mode Translation for 32-bit DMA */ -#define BCMA_DMA_TRANSLATION_DMA64_CMT 0x80000000 /* Client Mode Translation for 64-bit DMA */ -extern u32 bcma_core_dma_translation(struct bcma_device *core); - -#endif /* LINUX_BCMA_H_ */ diff --git a/openairITS/mac/DOT11/include/linux/bcma/bcma_driver_chipcommon.h b/openairITS/mac/DOT11/include/linux/bcma/bcma_driver_chipcommon.h deleted file mode 100644 index 8bbfe31fba..0000000000 --- a/openairITS/mac/DOT11/include/linux/bcma/bcma_driver_chipcommon.h +++ /dev/null @@ -1,415 +0,0 @@ -#ifndef LINUX_BCMA_DRIVER_CC_H_ -#define LINUX_BCMA_DRIVER_CC_H_ - -/** ChipCommon core registers. **/ -#define BCMA_CC_ID 0x0000 -#define BCMA_CC_ID_ID 0x0000FFFF -#define BCMA_CC_ID_ID_SHIFT 0 -#define BCMA_CC_ID_REV 0x000F0000 -#define BCMA_CC_ID_REV_SHIFT 16 -#define BCMA_CC_ID_PKG 0x00F00000 -#define BCMA_CC_ID_PKG_SHIFT 20 -#define BCMA_CC_ID_NRCORES 0x0F000000 -#define BCMA_CC_ID_NRCORES_SHIFT 24 -#define BCMA_CC_ID_TYPE 0xF0000000 -#define BCMA_CC_ID_TYPE_SHIFT 28 -#define BCMA_CC_CAP 0x0004 /* Capabilities */ -#define BCMA_CC_CAP_NRUART 0x00000003 /* # of UARTs */ -#define BCMA_CC_CAP_MIPSEB 0x00000004 /* MIPS in BigEndian Mode */ -#define BCMA_CC_CAP_UARTCLK 0x00000018 /* UART clock select */ -#define BCMA_CC_CAP_UARTCLK_INT 0x00000008 /* UARTs are driven by internal divided clock */ -#define BCMA_CC_CAP_UARTGPIO 0x00000020 /* UARTs on GPIO 15-12 */ -#define BCMA_CC_CAP_EXTBUS 0x000000C0 /* External buses present */ -#define BCMA_CC_CAP_FLASHT 0x00000700 /* Flash Type */ -#define BCMA_CC_FLASHT_NONE 0x00000000 /* No flash */ -#define BCMA_CC_FLASHT_STSER 0x00000100 /* ST serial flash */ -#define BCMA_CC_FLASHT_ATSER 0x00000200 /* Atmel serial flash */ -#define BCMA_CC_FLASHT_NFLASH 0x00000200 -#define BCMA_CC_FLASHT_PARA 0x00000700 /* Parallel flash */ -#define BCMA_CC_CAP_PLLT 0x00038000 /* PLL Type */ -#define BCMA_PLLTYPE_NONE 0x00000000 -#define BCMA_PLLTYPE_1 0x00010000 /* 48Mhz base, 3 dividers */ -#define BCMA_PLLTYPE_2 0x00020000 /* 48Mhz, 4 dividers */ -#define BCMA_PLLTYPE_3 0x00030000 /* 25Mhz, 2 dividers */ -#define BCMA_PLLTYPE_4 0x00008000 /* 48Mhz, 4 dividers */ -#define BCMA_PLLTYPE_5 0x00018000 /* 25Mhz, 4 dividers */ -#define BCMA_PLLTYPE_6 0x00028000 /* 100/200 or 120/240 only */ -#define BCMA_PLLTYPE_7 0x00038000 /* 25Mhz, 4 dividers */ -#define BCMA_CC_CAP_PCTL 0x00040000 /* Power Control */ -#define BCMA_CC_CAP_OTPS 0x00380000 /* OTP size */ -#define BCMA_CC_CAP_OTPS_SHIFT 19 -#define BCMA_CC_CAP_OTPS_BASE 5 -#define BCMA_CC_CAP_JTAGM 0x00400000 /* JTAG master present */ -#define BCMA_CC_CAP_BROM 0x00800000 /* Internal boot ROM active */ -#define BCMA_CC_CAP_64BIT 0x08000000 /* 64-bit Backplane */ -#define BCMA_CC_CAP_PMU 0x10000000 /* PMU available (rev >= 20) */ -#define BCMA_CC_CAP_ECI 0x20000000 /* ECI available (rev >= 20) */ -#define BCMA_CC_CAP_SPROM 0x40000000 /* SPROM present */ -#define BCMA_CC_CORECTL 0x0008 -#define BCMA_CC_CORECTL_UARTCLK0 0x00000001 /* Drive UART with internal clock */ -#define BCMA_CC_CORECTL_SE 0x00000002 /* sync clk out enable (corerev >= 3) */ -#define BCMA_CC_CORECTL_UARTCLKEN 0x00000008 /* UART clock enable (rev >= 21) */ -#define BCMA_CC_BIST 0x000C -#define BCMA_CC_OTPS 0x0010 /* OTP status */ -#define BCMA_CC_OTPS_PROGFAIL 0x80000000 -#define BCMA_CC_OTPS_PROTECT 0x00000007 -#define BCMA_CC_OTPS_HW_PROTECT 0x00000001 -#define BCMA_CC_OTPS_SW_PROTECT 0x00000002 -#define BCMA_CC_OTPS_CID_PROTECT 0x00000004 -#define BCMA_CC_OTPS_GU_PROG_IND 0x00000F00 /* General Use programmed indication */ -#define BCMA_CC_OTPS_GU_PROG_IND_SHIFT 8 -#define BCMA_CC_OTPS_GU_PROG_HW 0x00000100 /* HW region programmed */ -#define BCMA_CC_OTPC 0x0014 /* OTP control */ -#define BCMA_CC_OTPC_RECWAIT 0xFF000000 -#define BCMA_CC_OTPC_PROGWAIT 0x00FFFF00 -#define BCMA_CC_OTPC_PRW_SHIFT 8 -#define BCMA_CC_OTPC_MAXFAIL 0x00000038 -#define BCMA_CC_OTPC_VSEL 0x00000006 -#define BCMA_CC_OTPC_SELVL 0x00000001 -#define BCMA_CC_OTPP 0x0018 /* OTP prog */ -#define BCMA_CC_OTPP_COL 0x000000FF -#define BCMA_CC_OTPP_ROW 0x0000FF00 -#define BCMA_CC_OTPP_ROW_SHIFT 8 -#define BCMA_CC_OTPP_READERR 0x10000000 -#define BCMA_CC_OTPP_VALUE 0x20000000 -#define BCMA_CC_OTPP_READ 0x40000000 -#define BCMA_CC_OTPP_START 0x80000000 -#define BCMA_CC_OTPP_BUSY 0x80000000 -#define BCMA_CC_OTPL 0x001C /* OTP layout */ -#define BCMA_CC_OTPL_GURGN_OFFSET 0x00000FFF /* offset of general use region */ -#define BCMA_CC_IRQSTAT 0x0020 -#define BCMA_CC_IRQMASK 0x0024 -#define BCMA_CC_IRQ_GPIO 0x00000001 /* gpio intr */ -#define BCMA_CC_IRQ_EXT 0x00000002 /* ro: ext intr pin (corerev >= 3) */ -#define BCMA_CC_IRQ_WDRESET 0x80000000 /* watchdog reset occurred */ -#define BCMA_CC_CHIPCTL 0x0028 /* Rev >= 11 only */ -#define BCMA_CC_CHIPSTAT 0x002C /* Rev >= 11 only */ -#define BCMA_CC_CHIPST_4313_SPROM_PRESENT 1 -#define BCMA_CC_CHIPST_4313_OTP_PRESENT 2 -#define BCMA_CC_CHIPST_4331_SPROM_PRESENT 2 -#define BCMA_CC_CHIPST_4331_OTP_PRESENT 4 -#define BCMA_CC_JCMD 0x0030 /* Rev >= 10 only */ -#define BCMA_CC_JCMD_START 0x80000000 -#define BCMA_CC_JCMD_BUSY 0x80000000 -#define BCMA_CC_JCMD_PAUSE 0x40000000 -#define BCMA_CC_JCMD0_ACC_MASK 0x0000F000 -#define BCMA_CC_JCMD0_ACC_IRDR 0x00000000 -#define BCMA_CC_JCMD0_ACC_DR 0x00001000 -#define BCMA_CC_JCMD0_ACC_IR 0x00002000 -#define BCMA_CC_JCMD0_ACC_RESET 0x00003000 -#define BCMA_CC_JCMD0_ACC_IRPDR 0x00004000 -#define BCMA_CC_JCMD0_ACC_PDR 0x00005000 -#define BCMA_CC_JCMD0_IRW_MASK 0x00000F00 -#define BCMA_CC_JCMD_ACC_MASK 0x000F0000 /* Changes for corerev 11 */ -#define BCMA_CC_JCMD_ACC_IRDR 0x00000000 -#define BCMA_CC_JCMD_ACC_DR 0x00010000 -#define BCMA_CC_JCMD_ACC_IR 0x00020000 -#define BCMA_CC_JCMD_ACC_RESET 0x00030000 -#define BCMA_CC_JCMD_ACC_IRPDR 0x00040000 -#define BCMA_CC_JCMD_ACC_PDR 0x00050000 -#define BCMA_CC_JCMD_IRW_MASK 0x00001F00 -#define BCMA_CC_JCMD_IRW_SHIFT 8 -#define BCMA_CC_JCMD_DRW_MASK 0x0000003F -#define BCMA_CC_JIR 0x0034 /* Rev >= 10 only */ -#define BCMA_CC_JDR 0x0038 /* Rev >= 10 only */ -#define BCMA_CC_JCTL 0x003C /* Rev >= 10 only */ -#define BCMA_CC_JCTL_FORCE_CLK 4 /* Force clock */ -#define BCMA_CC_JCTL_EXT_EN 2 /* Enable external targets */ -#define BCMA_CC_JCTL_EN 1 /* Enable Jtag master */ -#define BCMA_CC_FLASHCTL 0x0040 -#define BCMA_CC_FLASHCTL_START 0x80000000 -#define BCMA_CC_FLASHCTL_BUSY BCMA_CC_FLASHCTL_START -#define BCMA_CC_FLASHADDR 0x0044 -#define BCMA_CC_FLASHDATA 0x0048 -#define BCMA_CC_BCAST_ADDR 0x0050 -#define BCMA_CC_BCAST_DATA 0x0054 -#define BCMA_CC_GPIOPULLUP 0x0058 /* Rev >= 20 only */ -#define BCMA_CC_GPIOPULLDOWN 0x005C /* Rev >= 20 only */ -#define BCMA_CC_GPIOIN 0x0060 -#define BCMA_CC_GPIOOUT 0x0064 -#define BCMA_CC_GPIOOUTEN 0x0068 -#define BCMA_CC_GPIOCTL 0x006C -#define BCMA_CC_GPIOPOL 0x0070 -#define BCMA_CC_GPIOIRQ 0x0074 -#define BCMA_CC_WATCHDOG 0x0080 -#define BCMA_CC_GPIOTIMER 0x0088 /* LED powersave (corerev >= 16) */ -#define BCMA_CC_GPIOTIMER_OFFTIME 0x0000FFFF -#define BCMA_CC_GPIOTIMER_OFFTIME_SHIFT 0 -#define BCMA_CC_GPIOTIMER_ONTIME 0xFFFF0000 -#define BCMA_CC_GPIOTIMER_ONTIME_SHIFT 16 -#define BCMA_CC_GPIOTOUTM 0x008C /* LED powersave (corerev >= 16) */ -#define BCMA_CC_CLOCK_N 0x0090 -#define BCMA_CC_CLOCK_SB 0x0094 -#define BCMA_CC_CLOCK_PCI 0x0098 -#define BCMA_CC_CLOCK_M2 0x009C -#define BCMA_CC_CLOCK_MIPS 0x00A0 -#define BCMA_CC_CLKDIV 0x00A4 /* Rev >= 3 only */ -#define BCMA_CC_CLKDIV_SFLASH 0x0F000000 -#define BCMA_CC_CLKDIV_SFLASH_SHIFT 24 -#define BCMA_CC_CLKDIV_OTP 0x000F0000 -#define BCMA_CC_CLKDIV_OTP_SHIFT 16 -#define BCMA_CC_CLKDIV_JTAG 0x00000F00 -#define BCMA_CC_CLKDIV_JTAG_SHIFT 8 -#define BCMA_CC_CLKDIV_UART 0x000000FF -#define BCMA_CC_CAP_EXT 0x00AC /* Capabilities */ -#define BCMA_CC_PLLONDELAY 0x00B0 /* Rev >= 4 only */ -#define BCMA_CC_FREFSELDELAY 0x00B4 /* Rev >= 4 only */ -#define BCMA_CC_SLOWCLKCTL 0x00B8 /* 6 <= Rev <= 9 only */ -#define BCMA_CC_SLOWCLKCTL_SRC 0x00000007 /* slow clock source mask */ -#define BCMA_CC_SLOWCLKCTL_SRC_LPO 0x00000000 /* source of slow clock is LPO */ -#define BCMA_CC_SLOWCLKCTL_SRC_XTAL 0x00000001 /* source of slow clock is crystal */ -#define BCMA_CC_SLOECLKCTL_SRC_PCI 0x00000002 /* source of slow clock is PCI */ -#define BCMA_CC_SLOWCLKCTL_LPOFREQ 0x00000200 /* LPOFreqSel, 1: 160Khz, 0: 32KHz */ -#define BCMA_CC_SLOWCLKCTL_LPOPD 0x00000400 /* LPOPowerDown, 1: LPO is disabled, 0: LPO is enabled */ -#define BCMA_CC_SLOWCLKCTL_FSLOW 0x00000800 /* ForceSlowClk, 1: sb/cores running on slow clock, 0: power logic control */ -#define BCMA_CC_SLOWCLKCTL_IPLL 0x00001000 /* IgnorePllOffReq, 1/0: power logic ignores/honors PLL clock disable requests from core */ -#define BCMA_CC_SLOWCLKCTL_ENXTAL 0x00002000 /* XtalControlEn, 1/0: power logic does/doesn't disable crystal when appropriate */ -#define BCMA_CC_SLOWCLKCTL_XTALPU 0x00004000 /* XtalPU (RO), 1/0: crystal running/disabled */ -#define BCMA_CC_SLOWCLKCTL_CLKDIV 0xFFFF0000 /* ClockDivider (SlowClk = 1/(4+divisor)) */ -#define BCMA_CC_SLOWCLKCTL_CLKDIV_SHIFT 16 -#define BCMA_CC_SYSCLKCTL 0x00C0 /* Rev >= 3 only */ -#define BCMA_CC_SYSCLKCTL_IDLPEN 0x00000001 /* ILPen: Enable Idle Low Power */ -#define BCMA_CC_SYSCLKCTL_ALPEN 0x00000002 /* ALPen: Enable Active Low Power */ -#define BCMA_CC_SYSCLKCTL_PLLEN 0x00000004 /* ForcePLLOn */ -#define BCMA_CC_SYSCLKCTL_FORCEALP 0x00000008 /* Force ALP (or HT if ALPen is not set */ -#define BCMA_CC_SYSCLKCTL_FORCEHT 0x00000010 /* Force HT */ -#define BCMA_CC_SYSCLKCTL_CLKDIV 0xFFFF0000 /* ClkDiv (ILP = 1/(4+divisor)) */ -#define BCMA_CC_SYSCLKCTL_CLKDIV_SHIFT 16 -#define BCMA_CC_CLKSTSTR 0x00C4 /* Rev >= 3 only */ -#define BCMA_CC_EROM 0x00FC -#define BCMA_CC_PCMCIA_CFG 0x0100 -#define BCMA_CC_PCMCIA_MEMWAIT 0x0104 -#define BCMA_CC_PCMCIA_ATTRWAIT 0x0108 -#define BCMA_CC_PCMCIA_IOWAIT 0x010C -#define BCMA_CC_IDE_CFG 0x0110 -#define BCMA_CC_IDE_MEMWAIT 0x0114 -#define BCMA_CC_IDE_ATTRWAIT 0x0118 -#define BCMA_CC_IDE_IOWAIT 0x011C -#define BCMA_CC_PROG_CFG 0x0120 -#define BCMA_CC_PROG_WAITCNT 0x0124 -#define BCMA_CC_FLASH_CFG 0x0128 -#define BCMA_CC_FLASH_CFG_DS 0x0010 /* Data size, 0=8bit, 1=16bit */ -#define BCMA_CC_FLASH_WAITCNT 0x012C -#define BCMA_CC_SROM_CONTROL 0x0190 -#define BCMA_CC_SROM_CONTROL_START 0x80000000 -#define BCMA_CC_SROM_CONTROL_BUSY 0x80000000 -#define BCMA_CC_SROM_CONTROL_OPCODE 0x60000000 -#define BCMA_CC_SROM_CONTROL_OP_READ 0x00000000 -#define BCMA_CC_SROM_CONTROL_OP_WRITE 0x20000000 -#define BCMA_CC_SROM_CONTROL_OP_WRDIS 0x40000000 -#define BCMA_CC_SROM_CONTROL_OP_WREN 0x60000000 -#define BCMA_CC_SROM_CONTROL_OTPSEL 0x00000010 -#define BCMA_CC_SROM_CONTROL_LOCK 0x00000008 -#define BCMA_CC_SROM_CONTROL_SIZE_MASK 0x00000006 -#define BCMA_CC_SROM_CONTROL_SIZE_1K 0x00000000 -#define BCMA_CC_SROM_CONTROL_SIZE_4K 0x00000002 -#define BCMA_CC_SROM_CONTROL_SIZE_16K 0x00000004 -#define BCMA_CC_SROM_CONTROL_SIZE_SHIFT 1 -#define BCMA_CC_SROM_CONTROL_PRESENT 0x00000001 -/* 0x1E0 is defined as shared BCMA_CLKCTLST */ -#define BCMA_CC_HW_WORKAROUND 0x01E4 /* Hardware workaround (rev >= 20) */ -#define BCMA_CC_UART0_DATA 0x0300 -#define BCMA_CC_UART0_IMR 0x0304 -#define BCMA_CC_UART0_FCR 0x0308 -#define BCMA_CC_UART0_LCR 0x030C -#define BCMA_CC_UART0_MCR 0x0310 -#define BCMA_CC_UART0_LSR 0x0314 -#define BCMA_CC_UART0_MSR 0x0318 -#define BCMA_CC_UART0_SCRATCH 0x031C -#define BCMA_CC_UART1_DATA 0x0400 -#define BCMA_CC_UART1_IMR 0x0404 -#define BCMA_CC_UART1_FCR 0x0408 -#define BCMA_CC_UART1_LCR 0x040C -#define BCMA_CC_UART1_MCR 0x0410 -#define BCMA_CC_UART1_LSR 0x0414 -#define BCMA_CC_UART1_MSR 0x0418 -#define BCMA_CC_UART1_SCRATCH 0x041C -/* PMU registers (rev >= 20) */ -#define BCMA_CC_PMU_CTL 0x0600 /* PMU control */ -#define BCMA_CC_PMU_CTL_ILP_DIV 0xFFFF0000 /* ILP div mask */ -#define BCMA_CC_PMU_CTL_ILP_DIV_SHIFT 16 -#define BCMA_CC_PMU_CTL_PLL_UPD 0x00000400 -#define BCMA_CC_PMU_CTL_NOILPONW 0x00000200 /* No ILP on wait */ -#define BCMA_CC_PMU_CTL_HTREQEN 0x00000100 /* HT req enable */ -#define BCMA_CC_PMU_CTL_ALPREQEN 0x00000080 /* ALP req enable */ -#define BCMA_CC_PMU_CTL_XTALFREQ 0x0000007C /* Crystal freq */ -#define BCMA_CC_PMU_CTL_XTALFREQ_SHIFT 2 -#define BCMA_CC_PMU_CTL_ILPDIVEN 0x00000002 /* ILP div enable */ -#define BCMA_CC_PMU_CTL_LPOSEL 0x00000001 /* LPO sel */ -#define BCMA_CC_PMU_CAP 0x0604 /* PMU capabilities */ -#define BCMA_CC_PMU_CAP_REVISION 0x000000FF /* Revision mask */ -#define BCMA_CC_PMU_STAT 0x0608 /* PMU status */ -#define BCMA_CC_PMU_STAT_INTPEND 0x00000040 /* Interrupt pending */ -#define BCMA_CC_PMU_STAT_SBCLKST 0x00000030 /* Backplane clock status? */ -#define BCMA_CC_PMU_STAT_HAVEALP 0x00000008 /* ALP available */ -#define BCMA_CC_PMU_STAT_HAVEHT 0x00000004 /* HT available */ -#define BCMA_CC_PMU_STAT_RESINIT 0x00000003 /* Res init */ -#define BCMA_CC_PMU_RES_STAT 0x060C /* PMU res status */ -#define BCMA_CC_PMU_RES_PEND 0x0610 /* PMU res pending */ -#define BCMA_CC_PMU_TIMER 0x0614 /* PMU timer */ -#define BCMA_CC_PMU_MINRES_MSK 0x0618 /* PMU min res mask */ -#define BCMA_CC_PMU_MAXRES_MSK 0x061C /* PMU max res mask */ -#define BCMA_CC_PMU_RES_TABSEL 0x0620 /* PMU res table sel */ -#define BCMA_CC_PMU_RES_DEPMSK 0x0624 /* PMU res dep mask */ -#define BCMA_CC_PMU_RES_UPDNTM 0x0628 /* PMU res updown timer */ -#define BCMA_CC_PMU_RES_TIMER 0x062C /* PMU res timer */ -#define BCMA_CC_PMU_CLKSTRETCH 0x0630 /* PMU clockstretch */ -#define BCMA_CC_PMU_WATCHDOG 0x0634 /* PMU watchdog */ -#define BCMA_CC_PMU_RES_REQTS 0x0640 /* PMU res req timer sel */ -#define BCMA_CC_PMU_RES_REQT 0x0644 /* PMU res req timer */ -#define BCMA_CC_PMU_RES_REQM 0x0648 /* PMU res req mask */ -#define BCMA_CC_CHIPCTL_ADDR 0x0650 -#define BCMA_CC_CHIPCTL_DATA 0x0654 -#define BCMA_CC_REGCTL_ADDR 0x0658 -#define BCMA_CC_REGCTL_DATA 0x065C -#define BCMA_CC_PLLCTL_ADDR 0x0660 -#define BCMA_CC_PLLCTL_DATA 0x0664 -#define BCMA_CC_SPROM 0x0800 /* SPROM beginning */ - -/* Divider allocation in 4716/47162/5356 */ -#define BCMA_CC_PMU5_MAINPLL_CPU 1 -#define BCMA_CC_PMU5_MAINPLL_MEM 2 -#define BCMA_CC_PMU5_MAINPLL_SSB 3 - -/* PLL usage in 4716/47162 */ -#define BCMA_CC_PMU4716_MAINPLL_PLL0 12 - -/* PLL usage in 5356/5357 */ -#define BCMA_CC_PMU5356_MAINPLL_PLL0 0 -#define BCMA_CC_PMU5357_MAINPLL_PLL0 0 - -/* 4706 PMU */ -#define BCMA_CC_PMU4706_MAINPLL_PLL0 0 - -/* ALP clock on pre-PMU chips */ -#define BCMA_CC_PMU_ALP_CLOCK 20000000 -/* HT clock for systems with PMU-enabled chipcommon */ -#define BCMA_CC_PMU_HT_CLOCK 80000000 - -/* PMU rev 5 (& 6) */ -#define BCMA_CC_PPL_P1P2_OFF 0 -#define BCMA_CC_PPL_P1_MASK 0x0f000000 -#define BCMA_CC_PPL_P1_SHIFT 24 -#define BCMA_CC_PPL_P2_MASK 0x00f00000 -#define BCMA_CC_PPL_P2_SHIFT 20 -#define BCMA_CC_PPL_M14_OFF 1 -#define BCMA_CC_PPL_MDIV_MASK 0x000000ff -#define BCMA_CC_PPL_MDIV_WIDTH 8 -#define BCMA_CC_PPL_NM5_OFF 2 -#define BCMA_CC_PPL_NDIV_MASK 0xfff00000 -#define BCMA_CC_PPL_NDIV_SHIFT 20 -#define BCMA_CC_PPL_FMAB_OFF 3 -#define BCMA_CC_PPL_MRAT_MASK 0xf0000000 -#define BCMA_CC_PPL_MRAT_SHIFT 28 -#define BCMA_CC_PPL_ABRAT_MASK 0x08000000 -#define BCMA_CC_PPL_ABRAT_SHIFT 27 -#define BCMA_CC_PPL_FDIV_MASK 0x07ffffff -#define BCMA_CC_PPL_PLLCTL_OFF 4 -#define BCMA_CC_PPL_PCHI_OFF 5 -#define BCMA_CC_PPL_PCHI_MASK 0x0000003f - -/* BCM4331 ChipControl numbers. */ -#define BCMA_CHIPCTL_4331_BT_COEXIST BIT(0) /* 0 disable */ -#define BCMA_CHIPCTL_4331_SECI BIT(1) /* 0 SECI is disabled (JATG functional) */ -#define BCMA_CHIPCTL_4331_EXT_LNA BIT(2) /* 0 disable */ -#define BCMA_CHIPCTL_4331_SPROM_GPIO13_15 BIT(3) /* sprom/gpio13-15 mux */ -#define BCMA_CHIPCTL_4331_EXTPA_EN BIT(4) /* 0 ext pa disable, 1 ext pa enabled */ -#define BCMA_CHIPCTL_4331_GPIOCLK_ON_SPROMCS BIT(5) /* set drive out GPIO_CLK on sprom_cs pin */ -#define BCMA_CHIPCTL_4331_PCIE_MDIO_ON_SPROMCS BIT(6) /* use sprom_cs pin as PCIE mdio interface */ -#define BCMA_CHIPCTL_4331_EXTPA_ON_GPIO2_5 BIT(7) /* aband extpa will be at gpio2/5 and sprom_dout */ -#define BCMA_CHIPCTL_4331_OVR_PIPEAUXCLKEN BIT(8) /* override core control on pipe_AuxClkEnable */ -#define BCMA_CHIPCTL_4331_OVR_PIPEAUXPWRDOWN BIT(9) /* override core control on pipe_AuxPowerDown */ -#define BCMA_CHIPCTL_4331_PCIE_AUXCLKEN BIT(10) /* pcie_auxclkenable */ -#define BCMA_CHIPCTL_4331_PCIE_PIPE_PLLDOWN BIT(11) /* pcie_pipe_pllpowerdown */ -#define BCMA_CHIPCTL_4331_BT_SHD0_ON_GPIO4 BIT(16) /* enable bt_shd0 at gpio4 */ -#define BCMA_CHIPCTL_4331_BT_SHD1_ON_GPIO5 BIT(17) /* enable bt_shd1 at gpio5 */ - -/* Data for the PMU, if available. - * Check availability with ((struct bcma_chipcommon)->capabilities & BCMA_CC_CAP_PMU) - */ -struct bcma_chipcommon_pmu { - u8 rev; /* PMU revision */ - u32 crystalfreq; /* The active crystal frequency (in kHz) */ -}; - -#ifdef CONFIG_BCMA_DRIVER_MIPS -struct bcma_pflash { - u8 buswidth; - u32 window; - u32 window_size; -}; - -struct bcma_serial_port { - void *regs; - unsigned long clockspeed; - unsigned int irq; - unsigned int baud_base; - unsigned int reg_shift; -}; -#endif /* CONFIG_BCMA_DRIVER_MIPS */ - -struct bcma_drv_cc { - struct bcma_device *core; - u32 status; - u32 capabilities; - u32 capabilities_ext; - u8 setup_done:1; - /* Fast Powerup Delay constant */ - u16 fast_pwrup_delay; - struct bcma_chipcommon_pmu pmu; -#ifdef CONFIG_BCMA_DRIVER_MIPS - struct bcma_pflash pflash; - - int nr_serial_ports; - struct bcma_serial_port serial_ports[4]; -#endif /* CONFIG_BCMA_DRIVER_MIPS */ -}; - -/* Register access */ -#define bcma_cc_read32(cc, offset) \ - bcma_read32((cc)->core, offset) -#define bcma_cc_write32(cc, offset, val) \ - bcma_write32((cc)->core, offset, val) - -#define bcma_cc_mask32(cc, offset, mask) \ - bcma_cc_write32(cc, offset, bcma_cc_read32(cc, offset) & (mask)) -#define bcma_cc_set32(cc, offset, set) \ - bcma_cc_write32(cc, offset, bcma_cc_read32(cc, offset) | (set)) -#define bcma_cc_maskset32(cc, offset, mask, set) \ - bcma_cc_write32(cc, offset, (bcma_cc_read32(cc, offset) & (mask)) | (set)) - -extern void bcma_core_chipcommon_init(struct bcma_drv_cc *cc); - -extern void bcma_chipco_suspend(struct bcma_drv_cc *cc); -extern void bcma_chipco_resume(struct bcma_drv_cc *cc); - -void bcma_chipco_bcm4331_ext_pa_lines_ctl(struct bcma_drv_cc *cc, bool enable); - -extern void bcma_chipco_watchdog_timer_set(struct bcma_drv_cc *cc, - u32 ticks); - -void bcma_chipco_irq_mask(struct bcma_drv_cc *cc, u32 mask, u32 value); - -u32 bcma_chipco_irq_status(struct bcma_drv_cc *cc, u32 mask); - -/* Chipcommon GPIO pin access. */ -u32 bcma_chipco_gpio_in(struct bcma_drv_cc *cc, u32 mask); -u32 bcma_chipco_gpio_out(struct bcma_drv_cc *cc, u32 mask, u32 value); -u32 bcma_chipco_gpio_outen(struct bcma_drv_cc *cc, u32 mask, u32 value); -u32 bcma_chipco_gpio_control(struct bcma_drv_cc *cc, u32 mask, u32 value); -u32 bcma_chipco_gpio_intmask(struct bcma_drv_cc *cc, u32 mask, u32 value); -u32 bcma_chipco_gpio_polarity(struct bcma_drv_cc *cc, u32 mask, u32 value); - -/* PMU support */ -extern void bcma_pmu_init(struct bcma_drv_cc *cc); - -extern void bcma_chipco_pll_write(struct bcma_drv_cc *cc, u32 offset, - u32 value); -extern void bcma_chipco_pll_maskset(struct bcma_drv_cc *cc, u32 offset, - u32 mask, u32 set); -extern void bcma_chipco_chipctl_maskset(struct bcma_drv_cc *cc, - u32 offset, u32 mask, u32 set); -extern void bcma_chipco_regctl_maskset(struct bcma_drv_cc *cc, - u32 offset, u32 mask, u32 set); - -#endif /* LINUX_BCMA_DRIVER_CC_H_ */ diff --git a/openairITS/mac/DOT11/include/linux/bcma/bcma_driver_mips.h b/openairITS/mac/DOT11/include/linux/bcma/bcma_driver_mips.h deleted file mode 100644 index c0043645cd..0000000000 --- a/openairITS/mac/DOT11/include/linux/bcma/bcma_driver_mips.h +++ /dev/null @@ -1,51 +0,0 @@ -#ifndef LINUX_BCMA_DRIVER_MIPS_H_ -#define LINUX_BCMA_DRIVER_MIPS_H_ - -#define BCMA_MIPS_IPSFLAG 0x0F08 -/* which sbflags get routed to mips interrupt 1 */ -#define BCMA_MIPS_IPSFLAG_IRQ1 0x0000003F -#define BCMA_MIPS_IPSFLAG_IRQ1_SHIFT 0 -/* which sbflags get routed to mips interrupt 2 */ -#define BCMA_MIPS_IPSFLAG_IRQ2 0x00003F00 -#define BCMA_MIPS_IPSFLAG_IRQ2_SHIFT 8 -/* which sbflags get routed to mips interrupt 3 */ -#define BCMA_MIPS_IPSFLAG_IRQ3 0x003F0000 -#define BCMA_MIPS_IPSFLAG_IRQ3_SHIFT 16 -/* which sbflags get routed to mips interrupt 4 */ -#define BCMA_MIPS_IPSFLAG_IRQ4 0x3F000000 -#define BCMA_MIPS_IPSFLAG_IRQ4_SHIFT 24 - -/* MIPS 74K core registers */ -#define BCMA_MIPS_MIPS74K_CORECTL 0x0000 -#define BCMA_MIPS_MIPS74K_EXCEPTBASE 0x0004 -#define BCMA_MIPS_MIPS74K_BIST 0x000C -#define BCMA_MIPS_MIPS74K_INTMASK_INT0 0x0014 -#define BCMA_MIPS_MIPS74K_INTMASK(int) \ - ((int) * 4 + BCMA_MIPS_MIPS74K_INTMASK_INT0) -#define BCMA_MIPS_MIPS74K_NMIMASK 0x002C -#define BCMA_MIPS_MIPS74K_GPIOSEL 0x0040 -#define BCMA_MIPS_MIPS74K_GPIOOUT 0x0044 -#define BCMA_MIPS_MIPS74K_GPIOEN 0x0048 -#define BCMA_MIPS_MIPS74K_CLKCTLST 0x01E0 - -#define BCMA_MIPS_OOBSELOUTA30 0x100 - -struct bcma_device; - -struct bcma_drv_mips { - struct bcma_device *core; - u8 setup_done:1; - unsigned int assigned_irqs; -}; - -#ifdef CONFIG_BCMA_DRIVER_MIPS -extern void bcma_core_mips_init(struct bcma_drv_mips *mcore); -#else -static inline void bcma_core_mips_init(struct bcma_drv_mips *mcore) { } -#endif - -extern u32 bcma_cpu_clock(struct bcma_drv_mips *mcore); - -extern unsigned int bcma_core_mips_irq(struct bcma_device *dev); - -#endif /* LINUX_BCMA_DRIVER_MIPS_H_ */ diff --git a/openairITS/mac/DOT11/include/linux/bcma/bcma_driver_pci.h b/openairITS/mac/DOT11/include/linux/bcma/bcma_driver_pci.h deleted file mode 100644 index 46c71e27d3..0000000000 --- a/openairITS/mac/DOT11/include/linux/bcma/bcma_driver_pci.h +++ /dev/null @@ -1,214 +0,0 @@ -#ifndef LINUX_BCMA_DRIVER_PCI_H_ -#define LINUX_BCMA_DRIVER_PCI_H_ - -#include - -struct pci_dev; - -/** PCI core registers. **/ -#define BCMA_CORE_PCI_CTL 0x0000 /* PCI Control */ -#define BCMA_CORE_PCI_CTL_RST_OE 0x00000001 /* PCI_RESET Output Enable */ -#define BCMA_CORE_PCI_CTL_RST 0x00000002 /* PCI_RESET driven out to pin */ -#define BCMA_CORE_PCI_CTL_CLK_OE 0x00000004 /* Clock gate Output Enable */ -#define BCMA_CORE_PCI_CTL_CLK 0x00000008 /* Gate for clock driven out to pin */ -#define BCMA_CORE_PCI_ARBCTL 0x0010 /* PCI Arbiter Control */ -#define BCMA_CORE_PCI_ARBCTL_INTERN 0x00000001 /* Use internal arbiter */ -#define BCMA_CORE_PCI_ARBCTL_EXTERN 0x00000002 /* Use external arbiter */ -#define BCMA_CORE_PCI_ARBCTL_PARKID 0x00000006 /* Mask, selects which agent is parked on an idle bus */ -#define BCMA_CORE_PCI_ARBCTL_PARKID_LAST 0x00000000 /* Last requestor */ -#define BCMA_CORE_PCI_ARBCTL_PARKID_4710 0x00000002 /* 4710 */ -#define BCMA_CORE_PCI_ARBCTL_PARKID_EXT0 0x00000004 /* External requestor 0 */ -#define BCMA_CORE_PCI_ARBCTL_PARKID_EXT1 0x00000006 /* External requestor 1 */ -#define BCMA_CORE_PCI_ISTAT 0x0020 /* Interrupt status */ -#define BCMA_CORE_PCI_ISTAT_INTA 0x00000001 /* PCI INTA# */ -#define BCMA_CORE_PCI_ISTAT_INTB 0x00000002 /* PCI INTB# */ -#define BCMA_CORE_PCI_ISTAT_SERR 0x00000004 /* PCI SERR# (write to clear) */ -#define BCMA_CORE_PCI_ISTAT_PERR 0x00000008 /* PCI PERR# (write to clear) */ -#define BCMA_CORE_PCI_ISTAT_PME 0x00000010 /* PCI PME# */ -#define BCMA_CORE_PCI_IMASK 0x0024 /* Interrupt mask */ -#define BCMA_CORE_PCI_IMASK_INTA 0x00000001 /* PCI INTA# */ -#define BCMA_CORE_PCI_IMASK_INTB 0x00000002 /* PCI INTB# */ -#define BCMA_CORE_PCI_IMASK_SERR 0x00000004 /* PCI SERR# */ -#define BCMA_CORE_PCI_IMASK_PERR 0x00000008 /* PCI PERR# */ -#define BCMA_CORE_PCI_IMASK_PME 0x00000010 /* PCI PME# */ -#define BCMA_CORE_PCI_MBOX 0x0028 /* Backplane to PCI Mailbox */ -#define BCMA_CORE_PCI_MBOX_F0_0 0x00000100 /* PCI function 0, INT 0 */ -#define BCMA_CORE_PCI_MBOX_F0_1 0x00000200 /* PCI function 0, INT 1 */ -#define BCMA_CORE_PCI_MBOX_F1_0 0x00000400 /* PCI function 1, INT 0 */ -#define BCMA_CORE_PCI_MBOX_F1_1 0x00000800 /* PCI function 1, INT 1 */ -#define BCMA_CORE_PCI_MBOX_F2_0 0x00001000 /* PCI function 2, INT 0 */ -#define BCMA_CORE_PCI_MBOX_F2_1 0x00002000 /* PCI function 2, INT 1 */ -#define BCMA_CORE_PCI_MBOX_F3_0 0x00004000 /* PCI function 3, INT 0 */ -#define BCMA_CORE_PCI_MBOX_F3_1 0x00008000 /* PCI function 3, INT 1 */ -#define BCMA_CORE_PCI_BCAST_ADDR 0x0050 /* Backplane Broadcast Address */ -#define BCMA_CORE_PCI_BCAST_ADDR_MASK 0x000000FF -#define BCMA_CORE_PCI_BCAST_DATA 0x0054 /* Backplane Broadcast Data */ -#define BCMA_CORE_PCI_GPIO_IN 0x0060 /* rev >= 2 only */ -#define BCMA_CORE_PCI_GPIO_OUT 0x0064 /* rev >= 2 only */ -#define BCMA_CORE_PCI_GPIO_ENABLE 0x0068 /* rev >= 2 only */ -#define BCMA_CORE_PCI_GPIO_CTL 0x006C /* rev >= 2 only */ -#define BCMA_CORE_PCI_SBTOPCI0 0x0100 /* Backplane to PCI translation 0 (sbtopci0) */ -#define BCMA_CORE_PCI_SBTOPCI0_MASK 0xFC000000 -#define BCMA_CORE_PCI_SBTOPCI1 0x0104 /* Backplane to PCI translation 1 (sbtopci1) */ -#define BCMA_CORE_PCI_SBTOPCI1_MASK 0xFC000000 -#define BCMA_CORE_PCI_SBTOPCI2 0x0108 /* Backplane to PCI translation 2 (sbtopci2) */ -#define BCMA_CORE_PCI_SBTOPCI2_MASK 0xC0000000 -#define BCMA_CORE_PCI_CONFIG_ADDR 0x0120 /* pcie config space access */ -#define BCMA_CORE_PCI_CONFIG_DATA 0x0124 /* pcie config space access */ -#define BCMA_CORE_PCI_MDIO_CONTROL 0x0128 /* controls the mdio access */ -#define BCMA_CORE_PCI_MDIOCTL_DIVISOR_MASK 0x7f /* clock to be used on MDIO */ -#define BCMA_CORE_PCI_MDIOCTL_DIVISOR_VAL 0x2 -#define BCMA_CORE_PCI_MDIOCTL_PREAM_EN 0x80 /* Enable preamble sequnce */ -#define BCMA_CORE_PCI_MDIOCTL_ACCESS_DONE 0x100 /* Tranaction complete */ -#define BCMA_CORE_PCI_MDIO_DATA 0x012c /* Data to the mdio access */ -#define BCMA_CORE_PCI_MDIODATA_MASK 0x0000ffff /* data 2 bytes */ -#define BCMA_CORE_PCI_MDIODATA_TA 0x00020000 /* Turnaround */ -#define BCMA_CORE_PCI_MDIODATA_REGADDR_SHF_OLD 18 /* Regaddr shift (rev < 10) */ -#define BCMA_CORE_PCI_MDIODATA_REGADDR_MASK_OLD 0x003c0000 /* Regaddr Mask (rev < 10) */ -#define BCMA_CORE_PCI_MDIODATA_DEVADDR_SHF_OLD 22 /* Physmedia devaddr shift (rev < 10) */ -#define BCMA_CORE_PCI_MDIODATA_DEVADDR_MASK_OLD 0x0fc00000 /* Physmedia devaddr Mask (rev < 10) */ -#define BCMA_CORE_PCI_MDIODATA_REGADDR_SHF 18 /* Regaddr shift */ -#define BCMA_CORE_PCI_MDIODATA_REGADDR_MASK 0x007c0000 /* Regaddr Mask */ -#define BCMA_CORE_PCI_MDIODATA_DEVADDR_SHF 23 /* Physmedia devaddr shift */ -#define BCMA_CORE_PCI_MDIODATA_DEVADDR_MASK 0x0f800000 /* Physmedia devaddr Mask */ -#define BCMA_CORE_PCI_MDIODATA_WRITE 0x10000000 /* write Transaction */ -#define BCMA_CORE_PCI_MDIODATA_READ 0x20000000 /* Read Transaction */ -#define BCMA_CORE_PCI_MDIODATA_START 0x40000000 /* start of Transaction */ -#define BCMA_CORE_PCI_MDIODATA_DEV_ADDR 0x0 /* dev address for serdes */ -#define BCMA_CORE_PCI_MDIODATA_BLK_ADDR 0x1F /* blk address for serdes */ -#define BCMA_CORE_PCI_MDIODATA_DEV_PLL 0x1d /* SERDES PLL Dev */ -#define BCMA_CORE_PCI_MDIODATA_DEV_TX 0x1e /* SERDES TX Dev */ -#define BCMA_CORE_PCI_MDIODATA_DEV_RX 0x1f /* SERDES RX Dev */ -#define BCMA_CORE_PCI_PCIEIND_ADDR 0x0130 /* indirect access to the internal register */ -#define BCMA_CORE_PCI_PCIEIND_DATA 0x0134 /* Data to/from the internal regsiter */ -#define BCMA_CORE_PCI_CLKREQENCTRL 0x0138 /* >= rev 6, Clkreq rdma control */ -#define BCMA_CORE_PCI_PCICFG0 0x0400 /* PCI config space 0 (rev >= 8) */ -#define BCMA_CORE_PCI_PCICFG1 0x0500 /* PCI config space 1 (rev >= 8) */ -#define BCMA_CORE_PCI_PCICFG2 0x0600 /* PCI config space 2 (rev >= 8) */ -#define BCMA_CORE_PCI_PCICFG3 0x0700 /* PCI config space 3 (rev >= 8) */ -#define BCMA_CORE_PCI_SPROM(wordoffset) (0x0800 + ((wordoffset) * 2)) /* SPROM shadow area (72 bytes) */ - -/* SBtoPCIx */ -#define BCMA_CORE_PCI_SBTOPCI_MEM 0x00000000 -#define BCMA_CORE_PCI_SBTOPCI_IO 0x00000001 -#define BCMA_CORE_PCI_SBTOPCI_CFG0 0x00000002 -#define BCMA_CORE_PCI_SBTOPCI_CFG1 0x00000003 -#define BCMA_CORE_PCI_SBTOPCI_PREF 0x00000004 /* Prefetch enable */ -#define BCMA_CORE_PCI_SBTOPCI_BURST 0x00000008 /* Burst enable */ -#define BCMA_CORE_PCI_SBTOPCI_MRM 0x00000020 /* Memory Read Multiple */ -#define BCMA_CORE_PCI_SBTOPCI_RC 0x00000030 /* Read Command mask (rev >= 11) */ -#define BCMA_CORE_PCI_SBTOPCI_RC_READ 0x00000000 /* Memory read */ -#define BCMA_CORE_PCI_SBTOPCI_RC_READL 0x00000010 /* Memory read line */ -#define BCMA_CORE_PCI_SBTOPCI_RC_READM 0x00000020 /* Memory read multiple */ - -/* PCIE protocol PHY diagnostic registers */ -#define BCMA_CORE_PCI_PLP_MODEREG 0x200 /* Mode */ -#define BCMA_CORE_PCI_PLP_STATUSREG 0x204 /* Status */ -#define BCMA_CORE_PCI_PLP_POLARITYINV_STAT 0x10 /* Status reg PCIE_PLP_STATUSREG */ -#define BCMA_CORE_PCI_PLP_LTSSMCTRLREG 0x208 /* LTSSM control */ -#define BCMA_CORE_PCI_PLP_LTLINKNUMREG 0x20c /* Link Training Link number */ -#define BCMA_CORE_PCI_PLP_LTLANENUMREG 0x210 /* Link Training Lane number */ -#define BCMA_CORE_PCI_PLP_LTNFTSREG 0x214 /* Link Training N_FTS */ -#define BCMA_CORE_PCI_PLP_ATTNREG 0x218 /* Attention */ -#define BCMA_CORE_PCI_PLP_ATTNMASKREG 0x21C /* Attention Mask */ -#define BCMA_CORE_PCI_PLP_RXERRCTR 0x220 /* Rx Error */ -#define BCMA_CORE_PCI_PLP_RXFRMERRCTR 0x224 /* Rx Framing Error */ -#define BCMA_CORE_PCI_PLP_RXERRTHRESHREG 0x228 /* Rx Error threshold */ -#define BCMA_CORE_PCI_PLP_TESTCTRLREG 0x22C /* Test Control reg */ -#define BCMA_CORE_PCI_PLP_SERDESCTRLOVRDREG 0x230 /* SERDES Control Override */ -#define BCMA_CORE_PCI_PLP_TIMINGOVRDREG 0x234 /* Timing param override */ -#define BCMA_CORE_PCI_PLP_RXTXSMDIAGREG 0x238 /* RXTX State Machine Diag */ -#define BCMA_CORE_PCI_PLP_LTSSMDIAGREG 0x23C /* LTSSM State Machine Diag */ - -/* PCIE protocol DLLP diagnostic registers */ -#define BCMA_CORE_PCI_DLLP_LCREG 0x100 /* Link Control */ -#define BCMA_CORE_PCI_DLLP_LSREG 0x104 /* Link Status */ -#define BCMA_CORE_PCI_DLLP_LAREG 0x108 /* Link Attention */ -#define BCMA_CORE_PCI_DLLP_LSREG_LINKUP (1 << 16) -#define BCMA_CORE_PCI_DLLP_LAMASKREG 0x10C /* Link Attention Mask */ -#define BCMA_CORE_PCI_DLLP_NEXTTXSEQNUMREG 0x110 /* Next Tx Seq Num */ -#define BCMA_CORE_PCI_DLLP_ACKEDTXSEQNUMREG 0x114 /* Acked Tx Seq Num */ -#define BCMA_CORE_PCI_DLLP_PURGEDTXSEQNUMREG 0x118 /* Purged Tx Seq Num */ -#define BCMA_CORE_PCI_DLLP_RXSEQNUMREG 0x11C /* Rx Sequence Number */ -#define BCMA_CORE_PCI_DLLP_LRREG 0x120 /* Link Replay */ -#define BCMA_CORE_PCI_DLLP_LACKTOREG 0x124 /* Link Ack Timeout */ -#define BCMA_CORE_PCI_DLLP_PMTHRESHREG 0x128 /* Power Management Threshold */ -#define BCMA_CORE_PCI_DLLP_RTRYWPREG 0x12C /* Retry buffer write ptr */ -#define BCMA_CORE_PCI_DLLP_RTRYRPREG 0x130 /* Retry buffer Read ptr */ -#define BCMA_CORE_PCI_DLLP_RTRYPPREG 0x134 /* Retry buffer Purged ptr */ -#define BCMA_CORE_PCI_DLLP_RTRRWREG 0x138 /* Retry buffer Read/Write */ -#define BCMA_CORE_PCI_DLLP_ECTHRESHREG 0x13C /* Error Count Threshold */ -#define BCMA_CORE_PCI_DLLP_TLPERRCTRREG 0x140 /* TLP Error Counter */ -#define BCMA_CORE_PCI_DLLP_ERRCTRREG 0x144 /* Error Counter */ -#define BCMA_CORE_PCI_DLLP_NAKRXCTRREG 0x148 /* NAK Received Counter */ -#define BCMA_CORE_PCI_DLLP_TESTREG 0x14C /* Test */ -#define BCMA_CORE_PCI_DLLP_PKTBIST 0x150 /* Packet BIST */ -#define BCMA_CORE_PCI_DLLP_PCIE11 0x154 /* DLLP PCIE 1.1 reg */ - -/* SERDES RX registers */ -#define BCMA_CORE_PCI_SERDES_RX_CTRL 1 /* Rx cntrl */ -#define BCMA_CORE_PCI_SERDES_RX_CTRL_FORCE 0x80 /* rxpolarity_force */ -#define BCMA_CORE_PCI_SERDES_RX_CTRL_POLARITY 0x40 /* rxpolarity_value */ -#define BCMA_CORE_PCI_SERDES_RX_TIMER1 2 /* Rx Timer1 */ -#define BCMA_CORE_PCI_SERDES_RX_CDR 6 /* CDR */ -#define BCMA_CORE_PCI_SERDES_RX_CDRBW 7 /* CDR BW */ - -/* SERDES PLL registers */ -#define BCMA_CORE_PCI_SERDES_PLL_CTRL 1 /* PLL control reg */ -#define BCMA_CORE_PCI_PLL_CTRL_FREQDET_EN 0x4000 /* bit 14 is FREQDET on */ - -/* PCIcore specific boardflags */ -#define BCMA_CORE_PCI_BFL_NOPCI 0x00000400 /* Board leaves PCI floating */ - -/* PCIE Config space accessing MACROS */ -#define BCMA_CORE_PCI_CFG_BUS_SHIFT 24 /* Bus shift */ -#define BCMA_CORE_PCI_CFG_SLOT_SHIFT 19 /* Slot/Device shift */ -#define BCMA_CORE_PCI_CFG_FUN_SHIFT 16 /* Function shift */ -#define BCMA_CORE_PCI_CFG_OFF_SHIFT 0 /* Register shift */ - -#define BCMA_CORE_PCI_CFG_BUS_MASK 0xff /* Bus mask */ -#define BCMA_CORE_PCI_CFG_SLOT_MASK 0x1f /* Slot/Device mask */ -#define BCMA_CORE_PCI_CFG_FUN_MASK 7 /* Function mask */ -#define BCMA_CORE_PCI_CFG_OFF_MASK 0xfff /* Register mask */ - -/* PCIE Root Capability Register bits (Host mode only) */ -#define BCMA_CORE_PCI_RC_CRS_VISIBILITY 0x0001 - -struct bcma_drv_pci; - -#ifdef CONFIG_BCMA_DRIVER_PCI_HOSTMODE -struct bcma_drv_pci_host { - struct bcma_drv_pci *pdev; - - u32 host_cfg_addr; - spinlock_t cfgspace_lock; - - struct pci_controller pci_controller; - struct pci_ops pci_ops; - struct resource mem_resource; - struct resource io_resource; -}; -#endif - -struct bcma_drv_pci { - struct bcma_device *core; - u8 setup_done:1; - u8 hostmode:1; - -#ifdef CONFIG_BCMA_DRIVER_PCI_HOSTMODE - struct bcma_drv_pci_host *host_controller; -#endif -}; - -/* Register access */ -#define pcicore_read32(pc, offset) bcma_read32((pc)->core, offset) -#define pcicore_write32(pc, offset, val) bcma_write32((pc)->core, offset, val) - -extern void __devinit bcma_core_pci_init(struct bcma_drv_pci *pc); -extern int bcma_core_pci_irq_ctl(struct bcma_drv_pci *pc, - struct bcma_device *core, bool enable); - -extern int bcma_core_pci_pcibios_map_irq(const struct pci_dev *dev); -extern int bcma_core_pci_plat_dev_init(struct pci_dev *dev); - -#endif /* LINUX_BCMA_DRIVER_PCI_H_ */ diff --git a/openairITS/mac/DOT11/include/linux/bcma/bcma_regs.h b/openairITS/mac/DOT11/include/linux/bcma/bcma_regs.h deleted file mode 100644 index 5a71d57196..0000000000 --- a/openairITS/mac/DOT11/include/linux/bcma/bcma_regs.h +++ /dev/null @@ -1,86 +0,0 @@ -#ifndef LINUX_BCMA_REGS_H_ -#define LINUX_BCMA_REGS_H_ - -/* Some single registers are shared between many cores */ -/* BCMA_CLKCTLST: ChipCommon (rev >= 20), PCIe, 80211 */ -#define BCMA_CLKCTLST 0x01E0 /* Clock control and status */ -#define BCMA_CLKCTLST_FORCEALP 0x00000001 /* Force ALP request */ -#define BCMA_CLKCTLST_FORCEHT 0x00000002 /* Force HT request */ -#define BCMA_CLKCTLST_FORCEILP 0x00000004 /* Force ILP request */ -#define BCMA_CLKCTLST_HAVEALPREQ 0x00000008 /* ALP available request */ -#define BCMA_CLKCTLST_HAVEHTREQ 0x00000010 /* HT available request */ -#define BCMA_CLKCTLST_HWCROFF 0x00000020 /* Force HW clock request off */ -#define BCMA_CLKCTLST_EXTRESREQ 0x00000700 /* Mask of external resource requests */ -#define BCMA_CLKCTLST_HAVEALP 0x00010000 /* ALP available */ -#define BCMA_CLKCTLST_HAVEHT 0x00020000 /* HT available */ -#define BCMA_CLKCTLST_BP_ON_ALP 0x00040000 /* RO: running on ALP clock */ -#define BCMA_CLKCTLST_BP_ON_HT 0x00080000 /* RO: running on HT clock */ -#define BCMA_CLKCTLST_EXTRESST 0x07000000 /* Mask of external resource status */ -/* Is there any BCM4328 on BCMA bus? */ -#define BCMA_CLKCTLST_4328A0_HAVEHT 0x00010000 /* 4328a0 has reversed bits */ -#define BCMA_CLKCTLST_4328A0_HAVEALP 0x00020000 /* 4328a0 has reversed bits */ - -/* Agent registers (common for every core) */ -#define BCMA_IOCTL 0x0408 /* IO control */ -#define BCMA_IOCTL_CLK 0x0001 -#define BCMA_IOCTL_FGC 0x0002 -#define BCMA_IOCTL_CORE_BITS 0x3FFC -#define BCMA_IOCTL_PME_EN 0x4000 -#define BCMA_IOCTL_BIST_EN 0x8000 -#define BCMA_IOST 0x0500 /* IO status */ -#define BCMA_IOST_CORE_BITS 0x0FFF -#define BCMA_IOST_DMA64 0x1000 -#define BCMA_IOST_GATED_CLK 0x2000 -#define BCMA_IOST_BIST_ERROR 0x4000 -#define BCMA_IOST_BIST_DONE 0x8000 -#define BCMA_RESET_CTL 0x0800 -#define BCMA_RESET_CTL_RESET 0x0001 - -/* BCMA PCI config space registers. */ -#define BCMA_PCI_PMCSR 0x44 -#define BCMA_PCI_PE 0x100 -#define BCMA_PCI_BAR0_WIN 0x80 /* Backplane address space 0 */ -#define BCMA_PCI_BAR1_WIN 0x84 /* Backplane address space 1 */ -#define BCMA_PCI_SPROMCTL 0x88 /* SPROM control */ -#define BCMA_PCI_SPROMCTL_WE 0x10 /* SPROM write enable */ -#define BCMA_PCI_BAR1_CONTROL 0x8c /* Address space 1 burst control */ -#define BCMA_PCI_IRQS 0x90 /* PCI interrupts */ -#define BCMA_PCI_IRQMASK 0x94 /* PCI IRQ control and mask (pcirev >= 6 only) */ -#define BCMA_PCI_BACKPLANE_IRQS 0x98 /* Backplane Interrupts */ -#define BCMA_PCI_BAR0_WIN2 0xAC -#define BCMA_PCI_GPIO_IN 0xB0 /* GPIO Input (pcirev >= 3 only) */ -#define BCMA_PCI_GPIO_OUT 0xB4 /* GPIO Output (pcirev >= 3 only) */ -#define BCMA_PCI_GPIO_OUT_ENABLE 0xB8 /* GPIO Output Enable/Disable (pcirev >= 3 only) */ -#define BCMA_PCI_GPIO_SCS 0x10 /* PCI config space bit 4 for 4306c0 slow clock source */ -#define BCMA_PCI_GPIO_HWRAD 0x20 /* PCI config space GPIO 13 for hw radio disable */ -#define BCMA_PCI_GPIO_XTAL 0x40 /* PCI config space GPIO 14 for Xtal powerup */ -#define BCMA_PCI_GPIO_PLL 0x80 /* PCI config space GPIO 15 for PLL powerdown */ - -/* SiliconBackplane Address Map. - * All regions may not exist on all chips. - */ -#define BCMA_SOC_SDRAM_BASE 0x00000000U /* Physical SDRAM */ -#define BCMA_SOC_PCI_MEM 0x08000000U /* Host Mode sb2pcitranslation0 (64 MB) */ -#define BCMA_SOC_PCI_MEM_SZ (64 * 1024 * 1024) -#define BCMA_SOC_PCI_CFG 0x0c000000U /* Host Mode sb2pcitranslation1 (64 MB) */ -#define BCMA_SOC_SDRAM_SWAPPED 0x10000000U /* Byteswapped Physical SDRAM */ -#define BCMA_SOC_SDRAM_R2 0x80000000U /* Region 2 for sdram (512 MB) */ - - -#define BCMA_SOC_PCI_DMA 0x40000000U /* Client Mode sb2pcitranslation2 (1 GB) */ -#define BCMA_SOC_PCI_DMA2 0x80000000U /* Client Mode sb2pcitranslation2 (1 GB) */ -#define BCMA_SOC_PCI_DMA_SZ 0x40000000U /* Client Mode sb2pcitranslation2 size in bytes */ -#define BCMA_SOC_PCIE_DMA_L32 0x00000000U /* PCIE Client Mode sb2pcitranslation2 - * (2 ZettaBytes), low 32 bits - */ -#define BCMA_SOC_PCIE_DMA_H32 0x80000000U /* PCIE Client Mode sb2pcitranslation2 - * (2 ZettaBytes), high 32 bits - */ - -#define BCMA_SOC_PCI1_MEM 0x40000000U /* Host Mode sb2pcitranslation0 (64 MB) */ -#define BCMA_SOC_PCI1_CFG 0x44000000U /* Host Mode sb2pcitranslation1 (64 MB) */ -#define BCMA_SOC_PCIE1_DMA_H32 0xc0000000U /* PCIE Client Mode sb2pcitranslation2 - * (2 ZettaBytes), high 32 bits - */ - -#endif /* LINUX_BCMA_REGS_H_ */ diff --git a/openairITS/mac/DOT11/include/linux/bcma/bcma_soc.h b/openairITS/mac/DOT11/include/linux/bcma/bcma_soc.h deleted file mode 100644 index 4203c5593b..0000000000 --- a/openairITS/mac/DOT11/include/linux/bcma/bcma_soc.h +++ /dev/null @@ -1,16 +0,0 @@ -#ifndef LINUX_BCMA_SOC_H_ -#define LINUX_BCMA_SOC_H_ - -#include - -struct bcma_soc { - struct bcma_bus bus; - struct bcma_device core_cc; - struct bcma_device core_mips; -}; - -int __init bcma_host_soc_register(struct bcma_soc *soc); - -int bcma_bus_register(struct bcma_bus *bus); - -#endif /* LINUX_BCMA_SOC_H_ */ diff --git a/openairITS/mac/DOT11/include/linux/bitops.h b/openairITS/mac/DOT11/include/linux/bitops.h deleted file mode 100644 index aa76af1843..0000000000 --- a/openairITS/mac/DOT11/include/linux/bitops.h +++ /dev/null @@ -1,211 +0,0 @@ -#ifndef _LINUX_BITOPS_H -#define _LINUX_BITOPS_H -#include - -#ifdef __KERNEL__ -#define BIT(nr) (1UL << (nr)) -#define BIT_MASK(nr) (1UL << ((nr) % BITS_PER_LONG)) -#define BIT_WORD(nr) ((nr) / BITS_PER_LONG) -#define BITS_PER_BYTE 8 -#ifndef BITS_TO_LONGS /* Older kernels define this already */ -#define BITS_TO_LONGS(nr) DIV_ROUND_UP(nr, BITS_PER_BYTE * sizeof(long)) -#endif -#endif - -extern unsigned int __sw_hweight8(unsigned int w); -extern unsigned int __sw_hweight16(unsigned int w); -extern unsigned int __sw_hweight32(unsigned int w); -extern unsigned long __sw_hweight64(__u64 w); - -/* - * Include this here because some architectures need generic_ffs/fls in - * scope - */ -#include - -#define for_each_set_bit(bit, addr, size) \ - for ((bit) = find_first_bit((addr), (size)); \ - (bit) < (size); \ - (bit) = find_next_bit((addr), (size), (bit) + 1)) - -static __inline__ int get_bitmask_order(unsigned int count) -{ - int order; - - order = fls(count); - return order; /* We could be slightly more clever with -1 here... */ -} - -static __inline__ int get_count_order(unsigned int count) -{ - int order; - - order = fls(count) - 1; - if (count & (count - 1)) - order++; - return order; -} - -static inline unsigned long hweight_long(unsigned long w) -{ - return sizeof(w) == 4 ? hweight32(w) : hweight64(w); -} - -/** - * rol32 - rotate a 32-bit value left - * @word: value to rotate - * @shift: bits to roll - */ -static inline __u32 rol32(__u32 word, unsigned int shift) -{ - return (word << shift) | (word >> (32 - shift)); -} - -/** - * ror32 - rotate a 32-bit value right - * @word: value to rotate - * @shift: bits to roll - */ -static inline __u32 ror32(__u32 word, unsigned int shift) -{ - return (word >> shift) | (word << (32 - shift)); -} - -/** - * rol16 - rotate a 16-bit value left - * @word: value to rotate - * @shift: bits to roll - */ -static inline __u16 rol16(__u16 word, unsigned int shift) -{ - return (word << shift) | (word >> (16 - shift)); -} - -/** - * ror16 - rotate a 16-bit value right - * @word: value to rotate - * @shift: bits to roll - */ -static inline __u16 ror16(__u16 word, unsigned int shift) -{ - return (word >> shift) | (word << (16 - shift)); -} - -/** - * rol8 - rotate an 8-bit value left - * @word: value to rotate - * @shift: bits to roll - */ -static inline __u8 rol8(__u8 word, unsigned int shift) -{ - return (word << shift) | (word >> (8 - shift)); -} - -/** - * ror8 - rotate an 8-bit value right - * @word: value to rotate - * @shift: bits to roll - */ -static inline __u8 ror8(__u8 word, unsigned int shift) -{ - return (word >> shift) | (word << (8 - shift)); -} - -/** - * sign_extend32 - sign extend a 32-bit value using specified bit as sign-bit - * @value: value to sign extend - * @index: 0 based bit index (0<=index<32) to sign bit - */ -static inline __s32 sign_extend32(__u32 value, int index) -{ - __u8 shift = 31 - index; - return (__s32)(value << shift) >> shift; -} - -static inline unsigned fls_long(unsigned long l) -{ - if (sizeof(l) == 4) - return fls(l); - return fls64(l); -} - -/** - * __ffs64 - find first set bit in a 64 bit word - * @word: The 64 bit word - * - * On 64 bit arches this is a synomyn for __ffs - * The result is not defined if no bits are set, so check that @word - * is non-zero before calling this. - */ -static inline unsigned long __ffs64(u64 word) -{ -#if BITS_PER_LONG == 32 - if (((u32)word) == 0UL) - return __ffs((u32)(word >> 32)) + 32; -#elif BITS_PER_LONG != 64 -#error BITS_PER_LONG not 32 or 64 -#endif - return __ffs((unsigned long)word); -} - -#ifdef __KERNEL__ -#ifdef CONFIG_GENERIC_FIND_FIRST_BIT - -/** - * find_first_bit - find the first set bit in a memory region - * @addr: The address to start the search at - * @size: The maximum size to search - * - * Returns the bit number of the first set bit. - */ -extern unsigned long find_first_bit(const unsigned long *addr, - unsigned long size); - -/** - * find_first_zero_bit - find the first cleared bit in a memory region - * @addr: The address to start the search at - * @size: The maximum size to search - * - * Returns the bit number of the first cleared bit. - */ -extern unsigned long find_first_zero_bit(const unsigned long *addr, - unsigned long size); -#endif /* CONFIG_GENERIC_FIND_FIRST_BIT */ - -#ifdef CONFIG_GENERIC_FIND_LAST_BIT -/** - * find_last_bit - find the last set bit in a memory region - * @addr: The address to start the search at - * @size: The maximum size to search - * - * Returns the bit number of the first set bit, or size. - */ -extern unsigned long find_last_bit(const unsigned long *addr, - unsigned long size); -#endif /* CONFIG_GENERIC_FIND_LAST_BIT */ - -#ifdef CONFIG_GENERIC_FIND_NEXT_BIT - -/** - * find_next_bit - find the next set bit in a memory region - * @addr: The address to base the search on - * @offset: The bitnumber to start searching at - * @size: The bitmap size in bits - */ -extern unsigned long find_next_bit(const unsigned long *addr, - unsigned long size, unsigned long offset); - -/** - * find_next_zero_bit - find the next cleared bit in a memory region - * @addr: The address to base the search on - * @offset: The bitnumber to start searching at - * @size: The bitmap size in bits - */ - -extern unsigned long find_next_zero_bit(const unsigned long *addr, - unsigned long size, - unsigned long offset); - -#endif /* CONFIG_GENERIC_FIND_NEXT_BIT */ -#endif /* __KERNEL__ */ -#endif diff --git a/openairITS/mac/DOT11/include/linux/compat-2.6.14.h b/openairITS/mac/DOT11/include/linux/compat-2.6.14.h deleted file mode 100644 index 1f19f7fee5..0000000000 --- a/openairITS/mac/DOT11/include/linux/compat-2.6.14.h +++ /dev/null @@ -1,13 +0,0 @@ -#ifndef LINUX_26_14_COMPAT_H -#define LINUX_26_14_COMPAT_H - -#include - -/* Compat work for 2.6.14 */ -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,14)) - -typedef unsigned int gfp_t; - -#endif /* (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,14)) */ - -#endif /* LINUX_26_14_COMPAT_H */ diff --git a/openairITS/mac/DOT11/include/linux/compat-2.6.18.h b/openairITS/mac/DOT11/include/linux/compat-2.6.18.h deleted file mode 100644 index 5e0182b18a..0000000000 --- a/openairITS/mac/DOT11/include/linux/compat-2.6.18.h +++ /dev/null @@ -1,13 +0,0 @@ -#ifndef LINUX_26_18_COMPAT_H -#define LINUX_26_18_COMPAT_H - -#include - -/* Compat work for 2.6.18 */ -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,18)) - -#define roundup(x, y) ((((x) + ((y) - 1)) / (y)) * (y)) - -#endif /* (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,18)) */ - -#endif /* LINUX_26_18_COMPAT_H */ diff --git a/openairITS/mac/DOT11/include/linux/compat-2.6.19.h b/openairITS/mac/DOT11/include/linux/compat-2.6.19.h deleted file mode 100644 index 1e648c0aeb..0000000000 --- a/openairITS/mac/DOT11/include/linux/compat-2.6.19.h +++ /dev/null @@ -1,24 +0,0 @@ -#ifndef LINUX_26_19_COMPAT_H -#define LINUX_26_19_COMPAT_H - -#include - -/* Compat work for 2.6.19 */ -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,19)) - -#include - -static inline int -compat_kmem_cache_destroy(struct kmem_cache *cachep) -{ -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19)) - return kmem_cache_destroy(cachep); -#else - kmem_cache_destroy(cachep); - return 0; -#endif -} - -#endif /* (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19)) */ - -#endif /* LINUX_26_19_COMPAT_H */ diff --git a/openairITS/mac/DOT11/include/linux/compat-2.6.20.h b/openairITS/mac/DOT11/include/linux/compat-2.6.20.h deleted file mode 100644 index 14579e29cf..0000000000 --- a/openairITS/mac/DOT11/include/linux/compat-2.6.20.h +++ /dev/null @@ -1,21 +0,0 @@ -#ifndef LINUX_26_20_COMPAT_H -#define LINUX_26_20_COMPAT_H - -#include - -/* Compat work for 2.6.20 */ -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20)) - -#include - -typedef void (*work_func_t)(struct work_struct *work); -typedef void (*compat_work_func_t)(void *work); -static inline void (INIT_WORK)(struct work_struct *work, work_func_t func) -{ - INIT_WORK(work, (compat_work_func_t)func, work); -} -#undef INIT_WORK - -#endif /* (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20)) */ - -#endif /* LINUX_26_20_COMPAT_H */ diff --git a/openairITS/mac/DOT11/include/linux/compat-2.6.21.h b/openairITS/mac/DOT11/include/linux/compat-2.6.21.h deleted file mode 100644 index 89ed6d9a43..0000000000 --- a/openairITS/mac/DOT11/include/linux/compat-2.6.21.h +++ /dev/null @@ -1,18 +0,0 @@ -#ifndef LINUX_26_21_COMPAT_H -#define LINUX_26_21_COMPAT_H - -#include - -/* Compat work for 2.6.21 */ -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,21)) - -#include - -#define register_sysctl_table(table) \ - ({ \ - register_sysctl_table((table), 0); \ - }) - -#endif /* (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,21)) */ - -#endif /* LINUX_26_21_COMPAT_H */ diff --git a/openairITS/mac/DOT11/include/linux/compat-2.6.22.h b/openairITS/mac/DOT11/include/linux/compat-2.6.22.h deleted file mode 100644 index 7ca1b18ea0..0000000000 --- a/openairITS/mac/DOT11/include/linux/compat-2.6.22.h +++ /dev/null @@ -1,104 +0,0 @@ -#ifndef LINUX_26_22_COMPAT_H -#define LINUX_26_22_COMPAT_H - -#include - -/* Compat work for 2.6.21 */ -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,22)) - -#include -#include - -/* reuse ax25_ptr */ -#define ieee80211_ptr ax25_ptr - -#ifdef CONFIG_AX25 -#error Compat reuses the AX.25 pointer so that may not be enabled! -#endif - -static inline unsigned char *skb_mac_header(const struct sk_buff *skb) -{ - return skb->mac.raw; -} - -static inline void skb_set_mac_header(struct sk_buff *skb, int offset) -{ - skb->mac.raw = skb->data + offset; -} - -static inline void skb_reset_mac_header(struct sk_buff *skb) -{ - skb->mac.raw = skb->data; -} - -static inline void skb_reset_network_header(struct sk_buff *skb) -{ - skb->nh.raw = skb->data; -} - -static inline void skb_set_network_header(struct sk_buff *skb, int offset) -{ - skb->nh.raw = skb->data + offset; -} - -static inline void skb_set_transport_header(struct sk_buff *skb, int offset) -{ - skb->h.raw = skb->data + offset; -} - -static inline unsigned char *skb_transport_header(struct sk_buff *skb) -{ - return skb->h.raw; -} - -static inline unsigned char *skb_network_header(const struct sk_buff *skb) -{ - return skb->nh.raw; -} - -static inline unsigned char *skb_tail_pointer(const struct sk_buff *skb) -{ - return skb->tail; -} - -static inline struct iphdr *ip_hdr(const struct sk_buff *skb) -{ - return (struct iphdr *)skb_network_header(skb); -} - -static inline void skb_copy_from_linear_data(const struct sk_buff *skb, - void *to, - const unsigned int len) -{ - memcpy(to, skb->data, len); -} - -static inline void skb_copy_from_linear_data_offset(const struct sk_buff *skb, - const int offset, void *to, - const unsigned int len) -{ - memcpy(to, skb->data + offset, len); -} - -#define __maybe_unused __attribute__((unused)) - -#define uninitialized_var(x) x = x - -/* This will lead to very weird behaviour... */ -#define NLA_BINARY NLA_STRING - -static inline int pci_set_mwi(struct pci_dev *dev) -{ - return -ENOSYS; -} - -static inline void pci_clear_mwi(struct pci_dev *dev) -{ -} - -#define list_first_entry(ptr, type, member) \ - list_entry((ptr)->next, type, member) - -#endif /* (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,22)) */ - -#endif /* LINUX_26_22_COMPAT_H */ diff --git a/openairITS/mac/DOT11/include/linux/compat-2.6.23.h b/openairITS/mac/DOT11/include/linux/compat-2.6.23.h deleted file mode 100644 index fbfb470d13..0000000000 --- a/openairITS/mac/DOT11/include/linux/compat-2.6.23.h +++ /dev/null @@ -1,136 +0,0 @@ -#ifndef LINUX_26_23_COMPAT_H -#define LINUX_26_23_COMPAT_H - -#include - -/* Compat work for < 2.6.23 */ -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,23)) - -#include -#include -#include -#include -#include - -/* - * Tell gcc if a function is cold. The compiler will assume any path - * directly leading to the call is unlikely. - */ - -#if !(__GNUC__ == 4 && __GNUC_MINOR__ < 3) -/* Mark functions as cold. gcc will assume any path leading to a call - * to them will be unlikely. This means a lot of manual unlikely()s - * are unnecessary now for any paths leading to the usual suspects - * like BUG(), printk(), panic() etc. [but let's keep them for now for - * older compilers] - * - * Early snapshots of gcc 4.3 don't support this and we can't detect this - * in the preprocessor, but we can live with this because they're unreleased. - * Maketime probing would be overkill here. - * - * gcc also has a __attribute__((__hot__)) to move hot functions into - * a special section, but I don't see any sense in this right now in - * the kernel context */ -#define __cold __attribute__((__cold__)) -#endif /* gcc 4.3 check */ - -#ifndef __cold -#define __cold -#endif - -/* Added as of 2.6.23 in include/linux/netdevice.h */ -#define alloc_netdev_mq(sizeof_priv, name, setup, queue) \ - alloc_netdev(sizeof_priv, name, setup) -#define NETIF_F_MULTI_QUEUE 16384 - -/* Added as of 2.6.23 on include/linux/netdevice.h */ -static inline int netif_is_multiqueue(const struct net_device *dev) -{ - return (!!(NETIF_F_MULTI_QUEUE & dev->features)); -} - -/* 2.6.23 fixed a bug in tcf_destroy_chain and the parameter changed */ -static inline void tcf_destroy_chain_compat(struct tcf_proto **fl) -{ - struct tcf_proto *tp; - - while ((tp = *fl) != NULL) { - *fl = tp->next; - tp->ops->destroy(tp); - module_put(tp->ops->owner); - kfree(tp); - } -} - -/* dev_mc_list was replaced with dev_addr_list as of 2.6.23, - * only new member added is da_synced. */ -#define dev_addr_list dev_mc_list -#define da_addr dmi_addr -#define da_addrlen dmi_addrlen -#define da_users dmi_users -#define da_gusers dmi_gusers - -/* dev_set_promiscuity() was moved to __dev_set_promiscuity() on 2.6.23 and - * dev_set_promiscuity() became a wrapper. */ -#define __dev_set_promiscuity dev_set_promiscuity - -/* Our own 2.6.22 port on compat.c */ -extern void dev_mc_unsync(struct net_device *to, struct net_device *from); -extern int dev_mc_sync(struct net_device *to, struct net_device *from); - -/* Our own 2.6.22 port on compat.c */ -extern void __dev_set_rx_mode(struct net_device *dev); - -/* Simple to add this */ -extern int cancel_delayed_work_sync(struct delayed_work *work); - -#define cancel_delayed_work_sync cancel_rearming_delayed_work - -#define debugfs_rename(a, b, c, d) 1 - -/* nl80211 requires multicast group support which is new and added on - * 2.6.23. We can't add support for it for older kernels to support it - * genl_family structure was changed. Lets just let through the - * genl_register_mc_group call. This means no multicast group suppport */ - -#define genl_register_mc_group(a, b) 0 - -/** - * struct genl_multicast_group - generic netlink multicast group - * @name: name of the multicast group, names are per-family - * @id: multicast group ID, assigned by the core, to use with - * genlmsg_multicast(). - * @list: list entry for linking - * @family: pointer to family, need not be set before registering - */ -struct genl_multicast_group -{ - struct genl_family *family; /* private */ - struct list_head list; /* private */ - char name[GENL_NAMSIZ]; - u32 id; -}; - - -/* Added as of 2.6.23 */ -int pci_try_set_mwi(struct pci_dev *dev); - -/* Added as of 2.6.23 */ -#ifdef CONFIG_PM_SLEEP -/* - * Tell the freezer that the current task should be frozen by it - */ -static inline void set_freezable(void) -{ - current->flags &= ~PF_NOFREEZE; -} - -#else -static inline void set_freezable(void) {} -#endif /* CONFIG_PM_SLEEP */ - -#else -#define tcf_destroy_chain_compat tcf_destroy_chain -#endif /* (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,23)) */ - -#endif /* LINUX_26_23_COMPAT_H */ diff --git a/openairITS/mac/DOT11/include/linux/compat-2.6.24.h b/openairITS/mac/DOT11/include/linux/compat-2.6.24.h deleted file mode 100644 index 456dcb6c2a..0000000000 --- a/openairITS/mac/DOT11/include/linux/compat-2.6.24.h +++ /dev/null @@ -1,247 +0,0 @@ -#ifndef LINUX_26_24_COMPAT_H -#define LINUX_26_24_COMPAT_H - -#include - -/* Compat work for 2.6.21, 2.6.22 and 2.6.23 */ -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24)) - -#include -#include -#include -#include -#include -#include -#include - -#define KEY_BLUETOOTH 237 -#define KEY_WLAN 238 -#define KEY_UWB 239 - -#define DMA_BIT_MASK(n) (((n) == 64) ? ~0ULL : ((1ULL<<(n))-1)) - -struct proc_dir_entry; -struct net_device; -struct net { - atomic_t count; /* To decided when the network - * namespace should be freed. - */ - atomic_t use_count; /* To track references we - * destroy on demand - */ - struct list_head list; /* list of network namespaces */ - struct work_struct work; /* work struct for freeing */ - - struct proc_dir_entry *proc_net; - struct proc_dir_entry *proc_net_stat; - struct proc_dir_entry *proc_net_root; - - struct net_device *loopback_dev; /* The loopback */ - - struct list_head dev_base_head; - struct hlist_head *dev_name_head; - struct hlist_head *dev_index_head; -}; - -#ifdef CONFIG_NET -/* Init's network namespace */ -extern struct net init_net; -#define INIT_NET_NS(net_ns) .net_ns = &init_net, -#else -#define INIT_NET_NS(net_ns) -#endif - -/* Added on 2.6.24 in include/linux/types.h by Al viro on commit 142956af */ -typedef unsigned long uintptr_t; - -/* From include/linux/net.h */ -enum sock_shutdown_cmd { - SHUT_RD = 0, - SHUT_WR = 1, - SHUT_RDWR = 2, -}; - -#if (LINUX_VERSION_CODE == KERNEL_VERSION(2,6,23)) /* Local check */ -/* Added as of 2.6.24 in include/linux/skbuff.h. - * - * Although 2.6.23 does support for CONFIG_NETDEVICES_MULTIQUEUE - * this helper was not added until 2.6.24. This implementation - * is exactly as it is on newer kernels. - * - * For older kernels we use the an internal mac80211 hack. - * For details see changes to include/net/mac80211.h through - * compat.diff and compat/mq_compat.h */ -static inline u16 skb_get_queue_mapping(struct sk_buff *skb) -{ -#ifdef CONFIG_NETDEVICES_MULTIQUEUE - return skb->queue_mapping; -#else - return 0; -#endif -} -#endif /* Local 2.6.23 check */ - -/* On older kernels we handle this a bit differently, so we yield to that - * code for its implementation in mq_compat.h as we want to make - * use of the internal mac80211 __ieee80211_queue_stopped() which itself - * uses internal mac80211 data structure hacks. */ -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,23)) /* Local check */ -/** - * netif_subqueue_stopped - test status of subqueue - * @dev: network device - * @queue_index: sub queue index - * - * Check individual transmit queue of a device with multiple transmit queues. - */ -static inline int __netif_subqueue_stopped(const struct net_device *dev, - u16 queue_index) -{ -#ifdef CONFIG_NETDEVICES_MULTIQUEUE - return test_bit(__LINK_STATE_XOFF, - &dev->egress_subqueue[queue_index].state); -#else - return 0; -#endif -} - -/* Note: although the backport implementation for netif_subqueue_stopped - * on older kernels is identical to upstream __netif_subqueue_stopped() - * (except for a const qualifier) we implement netif_subqueue_stopped() - * as part of mac80211 as it relies on internal mac80211 structures we - * use for MQ support. We this implement it in mq_compat.h */ - -#endif /* Local 2.6.23 check */ - -/* - * Force link bug if constructor is used, can't be done compatibly - * because constructor arguments were swapped since then! - */ -extern void __incompatible_kmem_cache_create(void); - -/* 2.6.21 and 2.6.22 kmem_cache_create() takes 6 arguments */ -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,23)) -#define kmem_cache_create(name, objsize, align, flags, ctor) \ - ({ \ - if (ctor) __incompatible_kmem_cache_create(); \ - kmem_cache_create((name), (objsize), (align), \ - (flags), NULL, NULL); \ - }) -#endif - -/* 2.6.23 kmem_cache_create() takes 5 arguments */ -#if (LINUX_VERSION_CODE == KERNEL_VERSION(2,6,23)) -#define kmem_cache_create(name, objsize, align, flags, ctor) \ - ({ \ - if (ctor) __incompatible_kmem_cache_create(); \ - kmem_cache_create((name), (objsize), (align), \ - (flags), NULL); \ - }) -#endif - -/* From include/linux/mod_devicetable.h */ - -/* SSB core, see drivers/ssb/ */ -#ifndef SSB_DEVICE -struct ssb_device_id { - __u16 vendor; - __u16 coreid; - __u8 revision; -}; -#define SSB_DEVICE(_vendor, _coreid, _revision) \ - { .vendor = _vendor, .coreid = _coreid, .revision = _revision, } -#define SSB_DEVTABLE_END \ - { 0, }, - -#define SSB_ANY_VENDOR 0xFFFF -#define SSB_ANY_ID 0xFFFF -#define SSB_ANY_REV 0xFF -#endif - - -/* Namespace stuff, introduced on 2.6.24 */ -#define dev_get_by_index(a, b) dev_get_by_index(b) -#define __dev_get_by_index(a, b) __dev_get_by_index(b) - -extern int eth_header(struct sk_buff *skb, struct net_device *dev, - unsigned short type, void *daddr, - void *saddr, unsigned len); -extern int eth_rebuild_header(struct sk_buff *skb); -extern void eth_header_cache_update(struct hh_cache *hh, struct net_device *dev, - unsigned char * haddr); -extern int eth_header_cache(struct neighbour *neigh, - struct hh_cache *hh); - -/* This structure is simply not present on 2.6.22 and 2.6.23 */ -struct header_ops { - int (*create) (struct sk_buff *skb, struct net_device *dev, - unsigned short type, void *daddr, - void *saddr, unsigned len); - int (*parse)(const struct sk_buff *skb, unsigned char *haddr); - int (*rebuild)(struct sk_buff *skb); - #define HAVE_HEADER_CACHE - int (*cache)(struct neighbour *neigh, struct hh_cache *hh); - void (*cache_update)(struct hh_cache *hh, - struct net_device *dev, - unsigned char *haddr); -}; - -/* net/ieee80211/ieee80211_crypt_tkip uses sg_init_table. This was added on - * 2.6.24. CONFIG_DEBUG_SG was added in 2.6.24 as well, so lets just ignore - * the debug stuff. Note that adding this required changes to the struct - * scatterlist on include/asm/scatterlist*, so the right way to port this - * is to simply ignore the new structure changes and zero the scatterlist - * array. We lave the kdoc intact for reference. - */ - -/** - * sg_mark_end - Mark the end of the scatterlist - * @sg: SG entryScatterlist - * - * Description: - * Marks the passed in sg entry as the termination point for the sg - * table. A call to sg_next() on this entry will return NULL. - * - **/ -static inline void sg_mark_end(struct scatterlist *sg) -{ -#ifdef CONFIG_DEBUG_SG - BUG_ON(sg->sg_magic != SG_MAGIC); -#endif -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24)) - /* - * Set termination bit, clear potential chain bit - */ - sg->page_link |= 0x02; - sg->page_link &= ~0x01; -#endif -} - -/** - * sg_init_table - Initialize SG table - * @sgl: The SG table - * @nents: Number of entries in table - * - * Notes: - * If this is part of a chained sg table, sg_mark_end() should be - * used only on the last table part. - * - **/ -static inline void sg_init_table(struct scatterlist *sgl, unsigned int nents) -{ - memset(sgl, 0, sizeof(*sgl) * nents); -} - -/** - * usb_endpoint_num - get the endpoint's number - * @epd: endpoint to be checked - * - * Returns @epd's number: 0 to 15. - */ -static inline int usb_endpoint_num(const struct usb_endpoint_descriptor *epd) -{ - return epd->bEndpointAddress & USB_ENDPOINT_NUMBER_MASK; -} - -#endif /* (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24)) */ - -#endif /* LINUX_26_24_COMPAT_H */ diff --git a/openairITS/mac/DOT11/include/linux/compat-2.6.25.h b/openairITS/mac/DOT11/include/linux/compat-2.6.25.h deleted file mode 100644 index d0cd50b5b4..0000000000 --- a/openairITS/mac/DOT11/include/linux/compat-2.6.25.h +++ /dev/null @@ -1,274 +0,0 @@ -#ifndef LINUX_26_25_COMPAT_H -#define LINUX_26_25_COMPAT_H - -#include - -/* Compat work for 2.6.24 */ -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,25)) - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -/* - * Backports 312b1485fb509c9bc32eda28ad29537896658cb8 - * Author: Sam Ravnborg - * Date: Mon Jan 28 20:21:15 2008 +0100 - * - * Introduce new section reference annotations tags: __ref, __refdata, __refconst - */ -#define __ref __init_refok -#define __refdata __initdata_refok - -/* - * backports 2658fa803111dae1353602e7f586de8e537803e2 - * We skip proto_ports_offset() as I'm lazy. - */ - -static inline bool ipv4_is_loopback(__be32 addr) -{ - return (addr & htonl(0xff000000)) == htonl(0x7f000000); -} - -static inline bool ipv4_is_multicast(__be32 addr) -{ - return (addr & htonl(0xf0000000)) == htonl(0xe0000000); -} - -static inline bool ipv4_is_local_multicast(__be32 addr) -{ - return (addr & htonl(0xffffff00)) == htonl(0xe0000000); -} - -static inline bool ipv4_is_lbcast(__be32 addr) -{ - /* limited broadcast */ - return addr == htonl(INADDR_BROADCAST); -} - -static inline bool ipv4_is_zeronet(__be32 addr) -{ - return (addr & htonl(0xff000000)) == htonl(0x00000000); -} - -/* Special-Use IPv4 Addresses (RFC3330) */ - -static inline bool ipv4_is_private_10(__be32 addr) -{ - return (addr & htonl(0xff000000)) == htonl(0x0a000000); -} - -static inline bool ipv4_is_private_172(__be32 addr) -{ - return (addr & htonl(0xfff00000)) == htonl(0xac100000); -} - -static inline bool ipv4_is_private_192(__be32 addr) -{ - return (addr & htonl(0xffff0000)) == htonl(0xc0a80000); -} - -static inline bool ipv4_is_linklocal_169(__be32 addr) -{ - return (addr & htonl(0xffff0000)) == htonl(0xa9fe0000); -} - -static inline bool ipv4_is_anycast_6to4(__be32 addr) -{ - return (addr & htonl(0xffffff00)) == htonl(0xc0586300); -} - -static inline bool ipv4_is_test_192(__be32 addr) -{ - return (addr & htonl(0xffffff00)) == htonl(0xc0000200); -} - -static inline bool ipv4_is_test_198(__be32 addr) -{ - return (addr & htonl(0xfffe0000)) == htonl(0xc6120000); -} - -/* - * phys_addr_t was added as a generic arch typedef on 2.6.28, - * that backport is dealt with in compat-2.6.28.h - */ -#if defined(CONFIG_X86) || defined(CONFIG_X86_64) - -#if defined(CONFIG_64BIT) || defined(CONFIG_X86_PAE) || defined(CONFIG_PHYS_64BIT) -typedef u64 phys_addr_t; -#else -typedef u32 phys_addr_t; -#endif - -#endif /* x86 */ - -/* The macro below uses a const upstream, this differs */ - -/** - * DEFINE_PCI_DEVICE_TABLE - macro used to describe a pci device table - * @_table: device table name - * - * This macro is used to create a struct pci_device_id array (a device table) - * in a generic manner. - */ -#define DEFINE_PCI_DEVICE_TABLE(_table) \ - const struct pci_device_id _table[] __devinitdata - -/* - * Backport work for QoS dependencies (kernel/pm_qos_params.c) - * pm-qos stuff written by mark gross mgross@linux.intel.com. - * - * ipw2100 now makes use of: - * - * pm_qos_add_requirement(), - * pm_qos_update_requirement() and - * pm_qos_remove_requirement() from it - * - * mac80211 uses the network latency to determine if to enable or not - * dynamic PS. mac80211 also and registers a notifier for when - * the latency changes. Since older kernels do no thave pm-qos stuff - * we just implement it completley here and register it upon cfg80211 - * init. I haven't tested ipw2100 on 2.6.24 though. - * - * This pm-qos implementation is copied verbatim from the kernel - * written by mark gross mgross@linux.intel.com. You don't have - * to do anythinig to use pm-qos except use the same exported - * routines as used in newer kernels. The compat_pm_qos_power_init() - * defned below is used by the compat module to initialize pm-qos. - */ -int compat_pm_qos_power_init(void); -int compat_pm_qos_power_deinit(void); - -/* - * 2.6.25 adds PM_EVENT_HIBERNATE as well here but - * we don't have this on <= 2.6.23) - */ -#ifndef PM_EVENT_SLEEP /* some distribution have mucked with their own headers to add this.. */ -#define PM_EVENT_SLEEP (PM_EVENT_SUSPEND) -#endif - -/* Although we don't care about wimax this is needed for rfkill input stuff */ -#define KEY_WIMAX 246 - -/* Although pm_qos stuff is not implemented on <= 2.6.24 lets keep the define */ -#define PM_QOS_DEFAULT_VALUE -1 - -#define __WARN(foo) dump_stack() - -#define dev_emerg(dev, format, arg...) \ - dev_printk(KERN_EMERG , dev , format , ## arg) -#define dev_alert(dev, format, arg...) \ - dev_printk(KERN_ALERT , dev , format , ## arg) -#define dev_crit(dev, format, arg...) \ - dev_printk(KERN_CRIT , dev , format , ## arg) - -extern int __dev_addr_sync(struct dev_addr_list **to, int *to_count, struct dev_addr_list **from, int *from_count); -extern void __dev_addr_unsync(struct dev_addr_list **to, int *to_count, struct dev_addr_list **from, int *from_count); - -#define seq_file_net &init_net; - -enum nf_inet_hooks { - NF_INET_PRE_ROUTING = 0, - NF_INET_LOCAL_IN = 1, - NF_INET_FORWARD = 2, - NF_INET_LOCAL_OUT = 3, - NF_INET_POST_ROUTING = 4, - NF_INET_NUMHOOKS = 5 -}; - -/* The patch: - * commit 8b5f6883683c91ad7e1af32b7ceeb604d68e2865 - * Author: Marcin Slusarz - * Date: Fri Feb 8 04:20:12 2008 -0800 - * - * byteorder: move le32_add_cpu & friends from OCFS2 to core - * - * moves le*_add_cpu and be*_add_cpu functions from OCFS2 to core - * header (1st) and converted some existing code to it. We port - * it here as later kernels will most likely use it. - */ -static inline void le16_add_cpu(__le16 *var, u16 val) -{ - *var = cpu_to_le16(le16_to_cpu(*var) + val); -} - -static inline void le32_add_cpu(__le32 *var, u32 val) -{ - *var = cpu_to_le32(le32_to_cpu(*var) + val); -} - -static inline void le64_add_cpu(__le64 *var, u64 val) -{ - *var = cpu_to_le64(le64_to_cpu(*var) + val); -} - -static inline void be16_add_cpu(__be16 *var, u16 val) -{ - u16 v = be16_to_cpu(*var); - *var = cpu_to_be16(v + val); -} - -static inline void be32_add_cpu(__be32 *var, u32 val) -{ - u32 v = be32_to_cpu(*var); - *var = cpu_to_be32(v + val); -} - -static inline void be64_add_cpu(__be64 *var, u64 val) -{ - u64 v = be64_to_cpu(*var); - *var = cpu_to_be64(v + val); -} - -/* 2.6.25 changes hwrng_unregister()'s behaviour by supporting - * suspend of its parent device (the misc device, which is itself the - * hardware random number generator). It does this by passing a parameter to - * unregister_miscdev() which is not supported in older kernels. The suspend - * parameter allows us to enable access to the device's hardware - * number generator during suspend. As far as wireless is concerned this means - * if a driver goes to suspend it you won't have the HNR available in - * older kernels. */ -static inline void __hwrng_unregister(struct hwrng *rng, bool suspended) -{ - hwrng_unregister(rng); -} - -static inline void led_classdev_unregister_suspended(struct led_classdev *lcd) -{ - led_classdev_unregister(lcd); -} - -/** - * The following things are out of ./include/linux/kernel.h - * The new iwlwifi driver is using them. - */ -extern int strict_strtoul(const char *, unsigned int, unsigned long *); -extern int strict_strtol(const char *, unsigned int, long *); - -#else -/* - * Kernels >= 2.6.25 have pm-qos and its initialized as part of - * the bootup process - */ -static inline int compat_pm_qos_power_init(void) -{ - return 0; -} - -static inline int compat_pm_qos_power_deinit(void) -{ - return 0; -} -#endif /* (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,25)) */ - -#endif /* LINUX_26_25_COMPAT_H */ diff --git a/openairITS/mac/DOT11/include/linux/compat-2.6.26.h b/openairITS/mac/DOT11/include/linux/compat-2.6.26.h deleted file mode 100644 index 177792a375..0000000000 --- a/openairITS/mac/DOT11/include/linux/compat-2.6.26.h +++ /dev/null @@ -1,455 +0,0 @@ -#ifndef LINUX_26_26_COMPAT_H -#define LINUX_26_26_COMPAT_H - -#include - -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,26)) - -#include -#include -#include -#include -#include -#include -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24)) -#include -#endif -#include -#include -#include - -/* These jiffie helpers added as of 2.6.26 */ - -/* - * These four macros compare jiffies and 'a' for convenience. - */ - -/* time_is_before_jiffies(a) return true if a is before jiffies */ -#define time_is_before_jiffies(a) time_after(jiffies, a) - -/* time_is_after_jiffies(a) return true if a is after jiffies */ -#define time_is_after_jiffies(a) time_before(jiffies, a) - -/* time_is_before_eq_jiffies(a) return true if a is before or equal to jiffies*/ -#define time_is_before_eq_jiffies(a) time_after_eq(jiffies, a) - -/* time_is_after_eq_jiffies(a) return true if a is after or equal to jiffies*/ -#define time_is_after_eq_jiffies(a) time_before_eq(jiffies, a) - -/* This comes from include/linux/input.h */ -#define SW_RFKILL_ALL 0x03 /* rfkill master switch, type "any" - set = radio enabled */ - -/* From kernel.h */ -#define USHORT_MAX ((u16)(~0U)) -#define SHORT_MAX ((s16)(USHORT_MAX>>1)) -#define SHORT_MIN (-SHORT_MAX - 1) - -extern int dev_set_name(struct device *dev, const char *name, ...) - __attribute__((format(printf, 2, 3))); - -/** - * clamp - return a value clamped to a given range with strict typechecking - * @val: current value - * @min: minimum allowable value - * @max: maximum allowable value - * - * This macro does strict typechecking of min/max to make sure they are of the - * same type as val. See the unnecessary pointer comparisons. - */ -#define clamp(val, min, max) ({ \ - typeof(val) __val = (val); \ - typeof(min) __min = (min); \ - typeof(max) __max = (max); \ - (void) (&__val == &__min); \ - (void) (&__val == &__max); \ - __val = __val < __min ? __min: __val; \ - __val > __max ? __max: __val; }) - -/** - * clamp_t - return a value clamped to a given range using a given type - * @type: the type of variable to use - * @val: current value - * @min: minimum allowable value - * @max: maximum allowable value - * - * This macro does no typechecking and uses temporary variables of type - * 'type' to make all the comparisons. - */ -#define clamp_t(type, val, min, max) ({ \ - type __val = (val); \ - type __min = (min); \ - type __max = (max); \ - __val = __val < __min ? __min: __val; \ - __val > __max ? __max: __val; }) - - -/* from include/linux/device.h */ -/* device_create_drvdata() is new */ -extern struct device *device_create_drvdata(struct class *cls, - struct device *parent, - dev_t devt, - void *drvdata, - const char *fmt, ...) -__attribute__((format(printf, 5, 6))); - -/* This is from include/linux/list.h */ - -/** - * list_is_singular - tests whether a list has just one entry. - * @head: the list to test. - */ -static inline int list_is_singular(const struct list_head *head) -{ - return !list_empty(head) && (head->next == head->prev); -} - -/* This is from include/linux/device.h, which was added as of 2.6.26 */ -static inline const char *dev_name(struct device *dev) -{ - /* will be changed into kobject_name(&dev->kobj) in the near future */ - return dev->bus_id; -} - -/* This is from include/linux/kernel.h, which was added as of 2.6.26 */ - -/** - * clamp_val - return a value clamped to a given range using val's type - * @val: current value - * @min: minimum allowable value - * @max: maximum allowable value - * - * This macro does no typechecking and uses temporary variables of whatever - * type the input argument 'val' is. This is useful when val is an unsigned - * type and min and max are literals that will otherwise be assigned a signed - * integer type. - */ - -#define clamp_val(val, min, max) ({ \ - typeof(val) __val = (val); \ - typeof(val) __min = (min); \ - typeof(val) __max = (max); \ - __val = __val < __min ? __min: __val; \ - __val > __max ? __max: __val; }) - -/* This comes from include/net/net_namespace.h */ - -#ifdef CONFIG_NET_NS -static inline -int net_eq(const struct net *net1, const struct net *net2) -{ - return net1 == net2; -} -#else -static inline -int net_eq(const struct net *net1, const struct net *net2) -{ - return 1; -} -#endif - -static inline -void dev_net_set(struct net_device *dev, struct net *net) -{ -#ifdef CONFIG_NET_NS - release_net(dev->nd_net); - dev->nd_net = hold_net(net); -#endif -} - -static inline -struct net *sock_net(const struct sock *sk) -{ -#ifdef CONFIG_NET_NS - return sk->sk_net; -#else - return &init_net; -#endif -} - -/* This comes from include/linux/netdevice.h */ - -/* - * Net namespace inlines - */ -static inline -struct net *dev_net(const struct net_device *dev) -{ -#ifdef CONFIG_NET_NS - /* - * compat-wirelss backport note: - * For older kernels we may just need to always return init_net, - * not sure when we added dev->nd_net. - */ - return dev->nd_net; -#else - return &init_net; -#endif -} - - -/* - * 2.6.26 added its own unaligned API which the - * new drivers can use. Lets port it here by including it in older - * kernels and also deal with the architecture handling here. - */ - -#ifdef CONFIG_ALPHA - -#include -#include -#include - -#endif /* alpha */ -#ifdef CONFIG_ARM - -/* arm */ -#include -#include -#include - -#endif /* arm */ -#ifdef CONFIG_AVR32 - -/* - * AVR32 can handle some unaligned accesses, depending on the - * implementation. The AVR32 AP implementation can handle unaligned - * words, but halfwords must be halfword-aligned, and doublewords must - * be word-aligned. - * - * However, swapped word loads must be word-aligned so we can't - * optimize word loads in general. - */ - -#include -#include -#include - -#endif -#ifdef CONFIG_BLACKFIN - -#include -#include -#include - -#endif /* blackfin */ -#ifdef CONFIG_CRIS - -/* - * CRIS can do unaligned accesses itself. - */ -#include -#include - -#endif /* cris */ -#ifdef CONFIG_FRV - -#include -#include -#include - -#endif /* frv */ -#ifdef CONFIG_H8300 - -#include -#include -#include - -#endif /* h8300 */ -#ifdef CONFIG_IA64 - -#include -#include -#include - -#endif /* ia64 */ -#ifdef CONFIG_M32R - -#if defined(__LITTLE_ENDIAN__) -# include -# include -# include -#else -# include -# include -# include -#endif - -#endif /* m32r */ -#ifdef CONFIG_M68K /* this handles both m68k and m68knommu */ - -#ifdef CONFIG_COLDFIRE -#include -#include -#include -#else - -/* - * The m68k can do unaligned accesses itself. - */ -#include -#include -#endif - -#endif /* m68k and m68knommu */ -#ifdef CONFIG_MIPS - -#if defined(__MIPSEB__) -# include -# include -# include -# define get_unaligned __get_unaligned_be -# define put_unaligned __put_unaligned_be -#elif defined(__MIPSEL__) -# include -# include -# include -#endif - -#endif /* mips */ -#ifdef CONFIG_MN10300 - -#include -#include - -#endif /* mn10300 */ -#ifdef CONFIG_PARISC - -#include -#include -#include - -#endif /* parisc */ -#ifdef CONFIG_PPC -/* - * The PowerPC can do unaligned accesses itself in big endian mode. - */ -#include -#include - -#endif /* ppc */ -#ifdef CONFIG_S390 - -/* - * The S390 can do unaligned accesses itself. - */ -#include -#include - -#endif /* s390 */ -#ifdef CONFIG_SUPERH - -/* SH can't handle unaligned accesses. */ -#ifdef __LITTLE_ENDIAN__ -# include -# include -# include -#else -# include -# include -# include -#endif - -#endif /* sh - SUPERH */ -#ifdef CONFIG_SPARC - -/* sparc and sparc64 */ -#include -#include -#include - -#endif /* sparc */ -#ifdef CONFIG_UML - -#include "asm/arch/unaligned.h" - -#endif /* um - uml */ -#ifdef CONFIG_V850 - -#include -#include -#include - -#endif /* v850 */ -#ifdef CONFIG_X86 -/* - * The x86 can do unaligned accesses itself. - */ -#include -#include - -#endif /* x86 */ -#ifdef CONFIG_XTENSA - -#ifdef __XTENSA_EL__ -# include -# include -# include -#elif defined(__XTENSA_EB__) -# include -# include -# include -#else -# error processor byte order undefined! -#endif - -#endif /* xtensa */ - -#define PCIE_LINK_STATE_L0S 1 -#define PCIE_LINK_STATE_L1 2 -#define PCIE_LINK_STATE_CLKPM 4 - -static inline void pci_disable_link_state(struct pci_dev *pdev, int state) -{ -} -/* source: include/linux/pci-aspm.h */ - - -#if BITS_PER_LONG == 64 - -/** - * div_u64_rem - unsigned 64bit divide with 32bit divisor with remainder - * - * This is commonly provided by 32bit archs to provide an optimized 64bit - * divide. - */ -static inline u64 div_u64_rem(u64 dividend, u32 divisor, u32 *remainder) -{ - *remainder = dividend % divisor; - return dividend / divisor; -} - -#elif BITS_PER_LONG == 32 - -#ifndef div_u64_rem -static inline u64 div_u64_rem(u64 dividend, u32 divisor, u32 *remainder) -{ - *remainder = do_div(dividend, divisor); - return dividend; -} -#endif - -#endif /* BITS_PER_LONG */ - -/** - * div_u64 - unsigned 64bit divide with 32bit divisor - * - * This is the most common 64bit divide and should be used if possible, - * as many 32bit archs can optimize this variant better than a full 64bit - * divide. - */ -#ifndef div_u64 -static inline u64 div_u64(u64 dividend, u32 divisor) -{ - u32 remainder; - return div_u64_rem(dividend, divisor, &remainder); -} -#endif -/* source: include/math64.h */ - -#define hex_asc_lo(x) hex_asc((x) & 0x0f) -#define hex_asc_hi(x) hex_asc(((x) & 0xf0) >> 4) - -#endif /* (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,26)) */ - -#endif /* LINUX_26_26_COMPAT_H */ diff --git a/openairITS/mac/DOT11/include/linux/compat-2.6.27.h b/openairITS/mac/DOT11/include/linux/compat-2.6.27.h deleted file mode 100644 index 1e2af806a4..0000000000 --- a/openairITS/mac/DOT11/include/linux/compat-2.6.27.h +++ /dev/null @@ -1,263 +0,0 @@ -#ifndef LINUX_26_27_COMPAT_H -#define LINUX_26_27_COMPAT_H - -#include - -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,27)) - -#include -#include -#include -#include -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24)) -#include -#include -#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24) */ -#include -#include -#include -#include -#include -#include -#include -#include - -#define PCI_PM_CAP_PME_SHIFT 11 - -/* I can't find a more suitable replacement... */ -#define flush_work(work) cancel_work_sync(work) - -struct builtin_fw { - char *name; - void *data; - unsigned long size; -}; - -/* - * On older kernels we do not have net_device Multi Queue support, but - * since we no longer use MQ on mac80211 we can simply use the 0 queue. - * Note that if other fullmac drivers make use of this they then need - * to be backported somehow or deal with just 1 queueue from MQ. - */ -static inline void netif_tx_wake_all_queues(struct net_device *dev) -{ - netif_wake_queue(dev); -} -static inline void netif_tx_start_all_queues(struct net_device *dev) -{ - netif_start_queue(dev); -} -static inline void netif_tx_stop_all_queues(struct net_device *dev) -{ - netif_stop_queue(dev); -} - -/* Are all TX queues of the device empty? */ -static inline bool qdisc_all_tx_empty(const struct net_device *dev) -{ - return skb_queue_empty(&dev->qdisc->q); -} - -bool pci_pme_capable(struct pci_dev *dev, pci_power_t state); - -/* - * The net_device has a spin_lock on newer kernels, on older kernels we're out of luck - */ -#define netif_addr_lock_bh(dev) -#define netif_addr_unlock_bh(dev) - -/* - * To port this properly we'd have to port warn_slowpath_null(), - * which I'm lazy to do so just do a regular print for now. If you - * want to port this read kernel/panic.c - */ -#define __WARN_printf(arg...) do { printk(arg); __WARN(); } while (0) - -/* This is ported directly as-is on newer kernels */ -#ifndef WARN -#define WARN(condition, format...) ({ \ - int __ret_warn_on = !!(condition); \ - if (unlikely(__ret_warn_on)) \ - __WARN_printf(format); \ - unlikely(__ret_warn_on); \ -}) -#endif - -/* On 2.6.27 a second argument was added, on older kernels we ignore it */ -#define dma_mapping_error(pdev, dma_addr) dma_mapping_error(dma_addr) -#define pci_dma_mapping_error(pdev, dma_addr) dma_mapping_error(pdev, dma_addr) - -/* This is from include/linux/ieee80211.h */ -#define IEEE80211_HT_CAP_DSSSCCK40 0x1000 - -/* New link list changes added as of 2.6.27, needed for ath9k */ - -static inline void __list_cut_position(struct list_head *list, - struct list_head *head, struct list_head *entry) -{ - struct list_head *new_first = entry->next; - list->next = head->next; - list->next->prev = list; - list->prev = entry; - entry->next = list; - head->next = new_first; - new_first->prev = head; -} - -/** - * list_cut_position - cut a list into two - * @list: a new list to add all removed entries - * @head: a list with entries - * @entry: an entry within head, could be the head itself - * and if so we won't cut the list - * - * This helper moves the initial part of @head, up to and - * including @entry, from @head to @list. You should - * pass on @entry an element you know is on @head. @list - * should be an empty list or a list you do not care about - * losing its data. - * - */ -static inline void list_cut_position(struct list_head *list, - struct list_head *head, struct list_head *entry) -{ - if (list_empty(head)) - return; - if (list_is_singular(head) && - (head->next != entry && head != entry)) - return; - if (entry == head) - INIT_LIST_HEAD(list); - else - __list_cut_position(list, head, entry); -} - - -/* __list_splice as re-implemented on 2.6.27, we backport it */ -static inline void __compat_list_splice_new_27(const struct list_head *list, - struct list_head *prev, - struct list_head *next) -{ - struct list_head *first = list->next; - struct list_head *last = list->prev; - - first->prev = prev; - prev->next = first; - - last->next = next; - next->prev = last; -} - -/** - * list_splice_tail - join two lists, each list being a queue - * @list: the new list to add. - * @head: the place to add it in the first list. - */ -static inline void list_splice_tail(struct list_head *list, - struct list_head *head) -{ - if (!list_empty(list)) - __compat_list_splice_new_27(list, head->prev, head); -} - -/** - * list_splice_tail_init - join two lists and reinitialise the emptied list - * @list: the new list to add. - * @head: the place to add it in the first list. - * - * Each of the lists is a queue. - * The list at @list is reinitialised - */ -static inline void list_splice_tail_init(struct list_head *list, - struct list_head *head) -{ - if (!list_empty(list)) { - __compat_list_splice_new_27(list, head->prev, head); - INIT_LIST_HEAD(list); - } -} - -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24)) -extern unsigned int mmc_align_data_size(struct mmc_card *, unsigned int); -extern unsigned int sdio_align_size(struct sdio_func *func, unsigned int sz); -#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24) */ - -#define iwe_stream_add_value(info, event, value, ends, iwe, event_len) iwe_stream_add_value(event, value, ends, iwe, event_len) -#define iwe_stream_add_point(info, stream, ends, iwe, extra) iwe_stream_add_point(stream, ends, iwe, extra) -#define iwe_stream_add_event(info, stream, ends, iwe, event_len) iwe_stream_add_event(stream, ends, iwe, event_len) - -/* Flags available in struct iw_request_info */ -#define IW_REQUEST_FLAG_COMPAT 0x0001 /* Compat ioctl call */ - -static inline int iwe_stream_lcp_len(struct iw_request_info *info) -{ -#ifdef CONFIG_COMPAT - if (info->flags & IW_REQUEST_FLAG_COMPAT) - return IW_EV_COMPAT_LCP_LEN; -#endif - return IW_EV_LCP_LEN; -} - -#ifdef CONFIG_ARM - -/* - * The caller asks to handle a range between offset and offset + size, - * but we process a larger range from 0 to offset + size due to lack of - * offset support. - */ - -static inline void dma_sync_single_range_for_cpu(struct device *dev, - dma_addr_t handle, unsigned long offset, size_t size, - enum dma_data_direction dir) -{ - dma_sync_single_for_cpu(dev, handle, offset + size, dir); -} - -static inline void dma_sync_single_range_for_device(struct device *dev, - dma_addr_t handle, unsigned long offset, size_t size, - enum dma_data_direction dir) -{ - dma_sync_single_for_device(dev, handle, offset + size, dir); -} - -#endif /* arm */ - -#if defined(CONFIG_DEBUG_FS) -void debugfs_remove_recursive(struct dentry *dentry); -#else -static inline void debugfs_remove_recursive(struct dentry *dentry) -{ } -#endif - -#define device_create(cls, parent, devt, drvdata, fmt, ...) \ -({ \ - struct device *_dev; \ - _dev = (device_create)(cls, parent, devt, fmt, __VA_ARGS__); \ - dev_set_drvdata(_dev, drvdata); \ - _dev; \ -}) - -#define dev_name(dev) dev_name((struct device *)dev) - -static inline void ethtool_cmd_speed_set(struct ethtool_cmd *ep, - __u32 speed) -{ - ep->speed = (__u16)speed; -} - -static inline __u32 ethtool_cmd_speed(const struct ethtool_cmd *ep) -{ - return ep->speed; -} - -/** - * lower_32_bits - return bits 0-31 of a number - * @n: the number we're accessing - */ -#define lower_32_bits(n) ((u32)(n)) - -#define netif_wake_subqueue netif_start_subqueue - -#endif /* (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,27)) */ - -#endif /* LINUX_26_27_COMPAT_H */ diff --git a/openairITS/mac/DOT11/include/linux/compat-2.6.28.h b/openairITS/mac/DOT11/include/linux/compat-2.6.28.h deleted file mode 100644 index 3980989ee3..0000000000 --- a/openairITS/mac/DOT11/include/linux/compat-2.6.28.h +++ /dev/null @@ -1,268 +0,0 @@ -#ifndef LINUX_26_28_COMPAT_H -#define LINUX_26_28_COMPAT_H - -#include - -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,28)) - -#include -#include -#include -#include -#include -#include - -#ifndef ETH_P_PAE -#define ETH_P_PAE 0x888E /* Port Access Entity (IEEE 802.1X) */ -#endif - -#include - -typedef struct cpumask { DECLARE_BITMAP(bits, NR_CPUS); } compat_cpumask_t; - -#if defined(CONFIG_X86) || defined(CONFIG_X86_64) || defined(CONFIG_PPC) -/* - * CONFIG_PHYS_ADDR_T_64BIT was added as new to all architectures - * as of 2.6.28 but x86 and ppc had it already. x86 only got phys_addr_t - * as of 2.6.25 but then is backported in compat-2.6.25.h - */ -#else -#if defined(CONFIG_64BIT) || defined(CONFIG_X86_PAE) || defned(CONFIG_PPC64) || defined(CONFIG_PHYS_64BIT) -#define CONFIG_PHYS_ADDR_T_64BIT 1 -typedef u64 phys_addr_t; -#else -typedef u32 phys_addr_t; -#endif - -#endif /* non x86 and ppc */ - -#ifndef WARN_ONCE -#define WARN_ONCE(condition, format...) ({ \ - static int __warned; \ - int __ret_warn_once = !!(condition); \ - \ - if (unlikely(__ret_warn_once)) \ - if (WARN(!__warned, format)) \ - __warned = 1; \ - unlikely(__ret_warn_once); \ -}) -#endif /* From include/asm-generic/bug.h */ - -#if defined(CONFIG_PCMCIA) || defined(CONFIG_PCMCIA_MODULE) - -#include -#include -#include -#ifdef pcmcia_parse_tuple -#undef pcmcia_parse_tuple -#define pcmcia_parse_tuple(tuple, parse) pccard_parse_tuple(tuple, parse) -#endif - -/* From : include/pcmcia/ds.h */ -/* loop CIS entries for valid configuration */ -int pcmcia_loop_config(struct pcmcia_device *p_dev, - int (*conf_check) (struct pcmcia_device *p_dev, - cistpl_cftable_entry_t *cfg, - cistpl_cftable_entry_t *dflt, - unsigned int vcc, - void *priv_data), - void *priv_data); - -#endif /* CONFIG_PCMCIA */ - -/* USB anchors were added as of 2.6.23 */ -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,23)) - -#if defined(CONFIG_USB) || defined(CONFIG_USB_MODULE) -#if 0 -extern void usb_poison_urb(struct urb *urb); -#endif -extern void usb_unpoison_urb(struct urb *urb); - -#if 0 -extern void usb_poison_anchored_urbs(struct usb_anchor *anchor); -#endif - -extern int usb_anchor_empty(struct usb_anchor *anchor); -#endif /* CONFIG_USB */ -#endif - - -void __iomem *pci_ioremap_bar(struct pci_dev *pdev, int bar); - -/** - * skb_queue_is_last - check if skb is the last entry in the queue - * @list: queue head - * @skb: buffer - * - * Returns true if @skb is the last buffer on the list. - */ -static inline bool skb_queue_is_last(const struct sk_buff_head *list, - const struct sk_buff *skb) -{ - return (skb->next == (struct sk_buff *) list); -} - -/** - * skb_queue_next - return the next packet in the queue - * @list: queue head - * @skb: current buffer - * - * Return the next packet in @list after @skb. It is only valid to - * call this if skb_queue_is_last() evaluates to false. - */ -static inline struct sk_buff *skb_queue_next(const struct sk_buff_head *list, - const struct sk_buff *skb) -{ - /* This BUG_ON may seem severe, but if we just return then we - * are going to dereference garbage. - */ - BUG_ON(skb_queue_is_last(list, skb)); - return skb->next; -} - -/** - * __skb_queue_head_init - initialize non-spinlock portions of sk_buff_head - * @list: queue to initialize - * - * This initializes only the list and queue length aspects of - * an sk_buff_head object. This allows to initialize the list - * aspects of an sk_buff_head without reinitializing things like - * the spinlock. It can also be used for on-stack sk_buff_head - * objects where the spinlock is known to not be used. - */ -static inline void __skb_queue_head_init(struct sk_buff_head *list) -{ - list->prev = list->next = (struct sk_buff *)list; - list->qlen = 0; -} - -static inline void __skb_queue_splice(const struct sk_buff_head *list, - struct sk_buff *prev, - struct sk_buff *next) -{ - struct sk_buff *first = list->next; - struct sk_buff *last = list->prev; - - first->prev = prev; - prev->next = first; - - last->next = next; - next->prev = last; -} - -/** - * skb_queue_splice - join two skb lists, this is designed for stacks - * @list: the new list to add - * @head: the place to add it in the first list - */ -static inline void skb_queue_splice(const struct sk_buff_head *list, - struct sk_buff_head *head) -{ - if (!skb_queue_empty(list)) { - __skb_queue_splice(list, (struct sk_buff *) head, head->next); - head->qlen += list->qlen; - } -} - -/** - * skb_queue_splice - join two skb lists and reinitialise the emptied list - * @list: the new list to add - * @head: the place to add it in the first list - * - * The list at @list is reinitialised - */ -static inline void skb_queue_splice_init(struct sk_buff_head *list, - struct sk_buff_head *head) -{ - if (!skb_queue_empty(list)) { - __skb_queue_splice(list, (struct sk_buff *) head, head->next); - head->qlen += list->qlen; - __skb_queue_head_init(list); - } -} - -/** - * skb_queue_splice_tail - join two skb lists and reinitialise the emptied list - * @list: the new list to add - * @head: the place to add it in the first list - * - * Each of the lists is a queue. - * The list at @list is reinitialised - */ -static inline void skb_queue_splice_tail_init(struct sk_buff_head *list, - struct sk_buff_head *head) -{ - if (!skb_queue_empty(list)) { - __skb_queue_splice(list, head->prev, (struct sk_buff *) head); - head->qlen += list->qlen; - __skb_queue_head_init(list); - } -} /* From include/linux/skbuff.h */ - -/** - * skb_queue_splice_tail - join two skb lists, each list being a queue - * @list: the new list to add - * @head: the place to add it in the first list - */ -static inline void skb_queue_splice_tail(const struct sk_buff_head *list, - struct sk_buff_head *head) -{ - if (!skb_queue_empty(list)) { - __skb_queue_splice(list, head->prev, (struct sk_buff *) head); - head->qlen += list->qlen; - } -} - -#ifndef DECLARE_TRACE - -#define TP_PROTO(args...) args -#define TP_ARGS(args...) args - -#define DECLARE_TRACE(name, proto, args) \ - static inline void _do_trace_##name(struct tracepoint *tp, proto) \ - { } \ - static inline void trace_##name(proto) \ - { } \ - static inline int register_trace_##name(void (*probe)(proto)) \ - { \ - return -ENOSYS; \ - } \ - static inline int unregister_trace_##name(void (*probe)(proto)) \ - { \ - return -ENOSYS; \ - } - -#define EXPORT_TRACEPOINT_SYMBOL_GPL(name) -#define EXPORT_TRACEPOINT_SYMBOL(name) - - -#endif - -/* openSuse includes round_jiffies_up in it's kernel 2.6.27. - * This is needed to prevent conflicts with the openSuse definition. - */ -#define round_jiffies_up backport_round_jiffies_up - -unsigned long round_jiffies_up(unsigned long j); - -extern void v2_6_28_skb_add_rx_frag(struct sk_buff *skb, int i, struct page *page, - int off, int size); - -#define wake_up_interruptible_poll(x, m) \ - __wake_up(x, TASK_INTERRUPTIBLE, 1, (void *) (m)) - -extern int n_tty_ioctl_helper(struct tty_struct *tty, struct file *file, - unsigned int cmd, unsigned long arg); - -int pci_wake_from_d3(struct pci_dev *dev, bool enable); - -#define alloc_workqueue(name, flags, max_active) __create_workqueue(name, flags, max_active) - -#ifndef pr_fmt -#define pr_fmt(fmt) fmt -#endif - -#endif /* (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,28)) */ - -#endif /* LINUX_26_28_COMPAT_H */ diff --git a/openairITS/mac/DOT11/include/linux/compat-2.6.29.h b/openairITS/mac/DOT11/include/linux/compat-2.6.29.h deleted file mode 100644 index 48b62e8a39..0000000000 --- a/openairITS/mac/DOT11/include/linux/compat-2.6.29.h +++ /dev/null @@ -1,379 +0,0 @@ -#ifndef LINUX_26_29_COMPAT_H -#define LINUX_26_29_COMPAT_H - -#include -#include -#include - -/* - * I kow this looks odd.. but 2.6.32 added the netdev_tx_t - * and we backport that there so inlcude that header first - * as we need it for the netdev ops. - */ -#include - -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,29)) - -#include -#include -#include - -/* backports */ -static inline void usb_autopm_put_interface_async(struct usb_interface *intf) -{ } -static inline int usb_autopm_get_interface_async(struct usb_interface *intf) -{ return 0; } - -#if \ - defined(CONFIG_ALPHA) || defined(CONFIG_AVR32) || \ - defined(CONFIG_BLACKFIN) || defined(CONFIG_CRIS) || \ - defined(CONFIG_H8300) || defined(CONFIG_IA64) || \ - defined(CONFIG_M68K) || defined(CONFIG_MIPS) || \ - defined(CONFIG_PARISC) || defined(CONFIG_S390) || \ - defined(CONFIG_PPC64) || defined(CONFIG_PPC32) || \ - defined(CONFIG_SUPERH) || defined(CONFIG_SPARC) || \ - defined(CONFIG_FRV) || defined(CONFIG_X86) || \ - defined(CONFIG_M32R) || defined(CONFIG_M68K) || \ - defined(CONFIG_MN10300) || defined(CONFIG_XTENSA) -#include -#else -typedef struct { - volatile int counter; -} atomic_t; - -#ifdef CONFIG_64BIT -typedef struct { - volatile long counter; -} atomic64_t; -#endif /* CONFIG_64BIT */ - -#endif - -#define PCI_EXP_LNKCTL_ES 0x0080 /* Extended Synch */ - -/* - * Older kernels do not have struct net_device_ops but what we can - * do is just define the data structure and use a caller to let us - * set the data structure's routines onto the old netdev, essentially - * doing it the old way. This avoids huge deltas on our backports. - */ - -/* - * This structure defines the management hooks for network devices. - * The following hooks can be defined; unless noted otherwise, they are - * optional and can be filled with a null pointer. - * - * int (*ndo_init)(struct net_device *dev); - * This function is called once when network device is registered. - * The network device can use this to any late stage initializaton - * or semantic validattion. It can fail with an error code which will - * be propogated back to register_netdev - * - * void (*ndo_uninit)(struct net_device *dev); - * This function is called when device is unregistered or when registration - * fails. It is not called if init fails. - * - * int (*ndo_open)(struct net_device *dev); - * This function is called when network device transistions to the up - * state. - * - * int (*ndo_stop)(struct net_device *dev); - * This function is called when network device transistions to the down - * state. - * - * netdev_tx_t (*ndo_start_xmit)(struct sk_buff *skb, - * struct net_device *dev); - * Called when a packet needs to be transmitted. - * Must return NETDEV_TX_OK , NETDEV_TX_BUSY. - * (can also return NETDEV_TX_LOCKED iff NETIF_F_LLTX) - * Required can not be NULL. - * - * u16 (*ndo_select_queue)(struct net_device *dev, struct sk_buff *skb); - * Called to decide which queue to when device supports multiple - * transmit queues. - * - * void (*ndo_change_rx_flags)(struct net_device *dev, int flags); - * This function is called to allow device receiver to make - * changes to configuration when multicast or promiscious is enabled. - * - * void (*ndo_set_rx_mode)(struct net_device *dev); - * This function is called device changes address list filtering. - * - * void (*ndo_set_multicast_list)(struct net_device *dev); - * This function is called when the multicast address list changes. - * - * int (*ndo_set_mac_address)(struct net_device *dev, void *addr); - * This function is called when the Media Access Control address - * needs to be changed. If this interface is not defined, the - * mac address can not be changed. - * - * int (*ndo_validate_addr)(struct net_device *dev); - * Test if Media Access Control address is valid for the device. - * - * int (*ndo_do_ioctl)(struct net_device *dev, struct ifreq *ifr, int cmd); - * Called when a user request an ioctl which can't be handled by - * the generic interface code. If not defined ioctl's return - * not supported error code. - * - * int (*ndo_set_config)(struct net_device *dev, struct ifmap *map); - * Used to set network devices bus interface parameters. This interface - * is retained for legacy reason, new devices should use the bus - * interface (PCI) for low level management. - * - * int (*ndo_change_mtu)(struct net_device *dev, int new_mtu); - * Called when a user wants to change the Maximum Transfer Unit - * of a device. If not defined, any request to change MTU will - * will return an error. - * - * void (*ndo_tx_timeout)(struct net_device *dev); - * Callback uses when the transmitter has not made any progress - * for dev->watchdog ticks. - * - * struct net_device_stats* (*ndo_get_stats)(struct net_device *dev); - * Called when a user wants to get the network device usage - * statistics. If not defined, the counters in dev->stats will - * be used. - * - * void (*ndo_vlan_rx_register)(struct net_device *dev, struct vlan_group *grp); - * If device support VLAN receive accleration - * (ie. dev->features & NETIF_F_HW_VLAN_RX), then this function is called - * when vlan groups for the device changes. Note: grp is NULL - * if no vlan's groups are being used. - * - * void (*ndo_vlan_rx_add_vid)(struct net_device *dev, unsigned short vid); - * If device support VLAN filtering (dev->features & NETIF_F_HW_VLAN_FILTER) - * this function is called when a VLAN id is registered. - * - * void (*ndo_vlan_rx_kill_vid)(struct net_device *dev, unsigned short vid); - * If device support VLAN filtering (dev->features & NETIF_F_HW_VLAN_FILTER) - * this function is called when a VLAN id is unregistered. - * - * void (*ndo_poll_controller)(struct net_device *dev); - * - * SR-IOV management functions. - * int (*ndo_set_vf_mac)(struct net_device *dev, int vf, u8* mac); - * int (*ndo_set_vf_vlan)(struct net_device *dev, int vf, u16 vlan, u8 qos); - * int (*ndo_set_vf_tx_rate)(struct net_device *dev, int vf, int rate); - * int (*ndo_get_vf_config)(struct net_device *dev, - * int vf, struct ifla_vf_info *ivf); - */ -#define HAVE_NET_DEVICE_OPS -struct net_device_ops { - int (*ndo_init)(struct net_device *dev); - void (*ndo_uninit)(struct net_device *dev); - int (*ndo_open)(struct net_device *dev); - int (*ndo_stop)(struct net_device *dev); - netdev_tx_t (*ndo_start_xmit) (struct sk_buff *skb, - struct net_device *dev); - u16 (*ndo_select_queue)(struct net_device *dev, - struct sk_buff *skb); - void (*ndo_change_rx_flags)(struct net_device *dev, - int flags); - void (*ndo_set_rx_mode)(struct net_device *dev); - void (*ndo_set_multicast_list)(struct net_device *dev); - int (*ndo_set_mac_address)(struct net_device *dev, - void *addr); - int (*ndo_validate_addr)(struct net_device *dev); - int (*ndo_do_ioctl)(struct net_device *dev, - struct ifreq *ifr, int cmd); - int (*ndo_set_config)(struct net_device *dev, - struct ifmap *map); - int (*ndo_change_mtu)(struct net_device *dev, - int new_mtu); - int (*ndo_neigh_setup)(struct net_device *dev, - struct neigh_parms *); - void (*ndo_tx_timeout) (struct net_device *dev); - - struct net_device_stats* (*ndo_get_stats)(struct net_device *dev); - - void (*ndo_vlan_rx_register)(struct net_device *dev, - struct vlan_group *grp); - void (*ndo_vlan_rx_add_vid)(struct net_device *dev, - unsigned short vid); - void (*ndo_vlan_rx_kill_vid)(struct net_device *dev, - unsigned short vid); -#ifdef CONFIG_NET_POLL_CONTROLLER - void (*ndo_poll_controller)(struct net_device *dev); -#endif - int (*ndo_set_vf_mac)(struct net_device *dev, - int queue, u8 *mac); - int (*ndo_set_vf_vlan)(struct net_device *dev, - int queue, u16 vlan, u8 qos); - int (*ndo_set_vf_tx_rate)(struct net_device *dev, - int vf, int rate); -/* - * The struct ifla_vf_info was added via b280da8d54b8d82b52f368a8703b7ada6c1744d5 - * on the v2.6.34-rc1~233^2~338 release - */ -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,34)) - int (*ndo_get_vf_config)(struct net_device *dev, - int vf, - struct ifla_vf_info *ivf); -#endif -#if defined(CONFIG_FCOE) || defined(CONFIG_FCOE_MODULE) - int (*ndo_fcoe_enable)(struct net_device *dev); - int (*ndo_fcoe_disable)(struct net_device *dev); - int (*ndo_fcoe_ddp_setup)(struct net_device *dev, - u16 xid, - struct scatterlist *sgl, - unsigned int sgc); - int (*ndo_fcoe_ddp_done)(struct net_device *dev, - u16 xid); -#define NETDEV_FCOE_WWNN 0 -#define NETDEV_FCOE_WWPN 1 - int (*ndo_fcoe_get_wwn)(struct net_device *dev, - u64 *wwn, int type); -#endif -}; - -static inline int ndo_do_ioctl(struct net_device *dev, - struct ifreq *ifr, - int cmd) -{ - if (dev->do_ioctl) - return dev->do_ioctl(dev, ifr, cmd); - return -EOPNOTSUPP; -} - - -void netdev_attach_ops(struct net_device *dev, - const struct net_device_ops *ops); - -/** - * skb_queue_is_first - check if skb is the first entry in the queue - * @list: queue head - * @skb: buffer - * - * Returns true if @skb is the first buffer on the list. - */ -static inline bool skb_queue_is_first(const struct sk_buff_head *list, - const struct sk_buff *skb) -{ - return (skb->prev == (struct sk_buff *) list); -} - -/** - * skb_queue_prev - return the prev packet in the queue - * @list: queue head - * @skb: current buffer - * - * Return the prev packet in @list before @skb. It is only valid to - * call this if skb_queue_is_first() evaluates to false. - */ -static inline struct sk_buff *skb_queue_prev(const struct sk_buff_head *list, - const struct sk_buff *skb) -{ - /* This BUG_ON may seem severe, but if we just return then we - * are going to dereference garbage. - */ - BUG_ON(skb_queue_is_first(list, skb)); - return skb->prev; -} - - -static inline struct net_device_stats *dev_get_stats(struct net_device *dev) -{ - return dev->get_stats(dev); -} - -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,23)) -#if defined(CONFIG_USB) || defined(CONFIG_USB_MODULE) -extern void usb_unpoison_anchored_urbs(struct usb_anchor *anchor); -#endif /* CONFIG_USB */ -#endif - -#define DIV_ROUND_CLOSEST(x, divisor)( \ -{ \ - typeof(divisor) __divisor = divisor; \ - (((x) + ((__divisor) / 2)) / (__divisor)); \ -} \ -) - -extern int eth_mac_addr(struct net_device *dev, void *p); -extern int eth_change_mtu(struct net_device *dev, int new_mtu); -extern int eth_validate_addr(struct net_device *dev); - -#ifdef CONFIG_NET_NS - -static inline void write_pnet(struct net **pnet, struct net *net) -{ - *pnet = net; -} - -static inline struct net *read_pnet(struct net * const *pnet) -{ - return *pnet; -} - -#else - -#define write_pnet(pnet, net) do { (void)(net);} while (0) -#define read_pnet(pnet) (&init_net) - -/* - * swap - swap value of @a and @b - */ -#define swap(a, b) \ - do { typeof(a) __tmp = (a); (a) = (b); (b) = __tmp; } while (0) - -#endif - -extern int init_dummy_netdev(struct net_device *dev); - -#define compat_pci_suspend(fn) \ - int fn##_compat(struct pci_dev *pdev, pm_message_t state) \ - { \ - int r; \ - \ - r = fn(&pdev->dev); \ - if (r) \ - return r; \ - \ - pci_save_state(pdev); \ - pci_disable_device(pdev); \ - pci_set_power_state(pdev, PCI_D3hot); \ - \ - return 0; \ - } - -#define compat_pci_resume(fn) \ - int fn##_compat(struct pci_dev *pdev) \ - { \ - int r; \ - \ - pci_set_power_state(pdev, PCI_D0); \ - r = pci_enable_device(pdev); \ - if (r) \ - return r; \ - pci_restore_state(pdev); \ - \ - return fn(&pdev->dev); \ - } - -#else /* (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,29)) */ - -/* Kernels >= 2.6.29 follows */ - -/* XXX: this can probably just go upstream ! */ -static inline void netdev_attach_ops(struct net_device *dev, - const struct net_device_ops *ops) -{ - dev->netdev_ops = ops; -} - -/* XXX: this can probably just go upstream! */ -static inline int ndo_do_ioctl(struct net_device *dev, - struct ifreq *ifr, - int cmd) -{ - if (dev->netdev_ops && dev->netdev_ops->ndo_do_ioctl) - return dev->netdev_ops->ndo_do_ioctl(dev, ifr, cmd); - return -EOPNOTSUPP; -} - -#define compat_pci_suspend(fn) -#define compat_pci_resume(fn) - -#endif /* (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,29)) */ - -#endif /* LINUX_26_29_COMPAT_H */ diff --git a/openairITS/mac/DOT11/include/linux/compat-2.6.30.h b/openairITS/mac/DOT11/include/linux/compat-2.6.30.h deleted file mode 100644 index 28f3d54a92..0000000000 --- a/openairITS/mac/DOT11/include/linux/compat-2.6.30.h +++ /dev/null @@ -1,47 +0,0 @@ -#ifndef LINUX_26_30_COMPAT_H -#define LINUX_26_30_COMPAT_H - -#include - -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,30)) - -#include - -#ifndef TP_PROTO -#define TP_PROTO(args...) TPPROTO(args) -#endif -#ifndef TP_ARGS -#define TP_ARGS(args...) TPARGS(args) -#endif - -#define IRQ_WAKE_THREAD (2) - -/* From : include/linux/pm.h */ -/* How to reorder dpm_list after device_move() */ -enum dpm_order { - DPM_ORDER_NONE, - DPM_ORDER_DEV_AFTER_PARENT, - DPM_ORDER_PARENT_BEFORE_DEV, - DPM_ORDER_DEV_LAST, -}; - -static inline void dev_set_uevent_suppress(struct device *dev, int val) -{ - dev->uevent_suppress = val; -} - -/* - * Print a one-time message (analogous to WARN_ONCE() et al): - */ -#define printk_once(x...) ({ \ - static bool __print_once; \ - \ - if (!__print_once) { \ - __print_once = true; \ - printk(x); \ - } \ -}) - -#endif /* (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,30)) */ - -#endif /* LINUX_26_30_COMPAT_H */ diff --git a/openairITS/mac/DOT11/include/linux/compat-2.6.31.h b/openairITS/mac/DOT11/include/linux/compat-2.6.31.h deleted file mode 100644 index 25db973dff..0000000000 --- a/openairITS/mac/DOT11/include/linux/compat-2.6.31.h +++ /dev/null @@ -1,221 +0,0 @@ -#ifndef LINUX_26_31_COMPAT_H -#define LINUX_26_31_COMPAT_H - -#include - -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,31)) - -#include -#include -#include -#include -#include -#include - -/* - * These macros allow us to backport rfkill without any - * changes on cfg80211 through compat.diff. Note that this - * file will be included by rfkill_backport.h so we must - * not conflict with things there. - */ -#define rfkill_get_led_trigger_name backport_rfkill_get_led_trigger_name -#define rfkill_set_led_trigger_name backport_rfkill_set_led_trigger_name -#define rfkill_set_hw_state backport_rfkill_set_hw_state -#define rfkill_set_sw_state backport_rfkill_set_sw_state -#define rfkill_init_sw_state backport_rfkill_init_sw_state -#define rfkill_set_states backport_rfkill_set_states -#define rfkill_pause_polling backport_rfkill_pause_polling -#define rfkill_resume_polling backport_rfkill_resume_polling -#define rfkill_blocked backport_rfkill_blocked -#define rfkill_alloc backport_rfkill_alloc -#define rfkill_register backport_rfkill_register -#define rfkill_unregister backport_rfkill_unregister -#define rfkill_destroy backport_rfkill_destroy - -#ifndef ERFKILL -#if !defined(CONFIG_ALPHA) && !defined(CONFIG_MIPS) && !defined(CONFIG_PARISC) && !defined(CONFIG_SPARC) -#define ERFKILL 132 /* Operation not possible due to RF-kill */ -#endif -#ifdef CONFIG_ALPHA -#define ERFKILL 138 /* Operation not possible due to RF-kill */ -#endif -#ifdef CONFIG_MIPS -#define ERFKILL 167 /* Operation not possible due to RF-kill */ -#endif -#ifdef CONFIG_PARISC -#define ERFKILL 256 /* Operation not possible due to RF-kill */ -#endif -#ifdef CONFIG_SPARC -#define ERFKILL 134 /* Operation not possible due to RF-kill */ -#endif -#endif - -#ifndef NETDEV_PRE_UP -#define NETDEV_PRE_UP 0x000D -#endif - -#ifndef SDIO_DEVICE_ID_MARVELL_8688WLAN -#define SDIO_DEVICE_ID_MARVELL_8688WLAN 0x9104 -#endif - -struct compat_threaded_irq { - unsigned int irq; - irq_handler_t handler; - irq_handler_t thread_fn; - void *dev_id; - char wq_name[64]; - struct workqueue_struct *wq; - struct work_struct work; -}; - -/* - * kmemleak was introduced on 2.6.31, since older kernels do not have - * we simply ignore its tuning. - */ -static inline void kmemleak_ignore(const void *ptr) -{ - return; -} - -static inline void kmemleak_not_leak(const void *ptr) -{ - return; -} - -static inline void kmemleak_no_scan(const void *ptr) -{ - return; -} - -/* - * Added via adf30907d63893e4208dfe3f5c88ae12bc2f25d5 - * - * There is no _sk_dst on older kernels, so just set the - * old dst to NULL and release it directly. - */ -static inline void skb_dst_drop(struct sk_buff *skb) -{ - dst_release(skb->dst); - skb->dst = NULL; -} - -static inline struct dst_entry *skb_dst(const struct sk_buff *skb) -{ - return (struct dst_entry *)skb->dst; -} - -static inline void skb_dst_set(struct sk_buff *skb, struct dst_entry *dst) -{ - skb->dst = dst; -} - -static inline struct rtable *skb_rtable(const struct sk_buff *skb) -{ - return (struct rtable *)skb_dst(skb); -} - -/* Backport threaded IRQ support */ - -static inline -void compat_irq_work(struct work_struct *work) -{ - struct compat_threaded_irq *comp = container_of(work, struct compat_threaded_irq, work); - comp->thread_fn(comp->irq, comp->dev_id); -} - -static inline -irqreturn_t compat_irq_dispatcher(int irq, void *dev_id) -{ - struct compat_threaded_irq *comp = dev_id; - irqreturn_t res; - - res = comp->handler(irq, comp->dev_id); - if (res == IRQ_WAKE_THREAD) { - queue_work(comp->wq, &comp->work); - res = IRQ_HANDLED; - } - - return res; -} - -static inline -int compat_request_threaded_irq(struct compat_threaded_irq *comp, - unsigned int irq, - irq_handler_t handler, - irq_handler_t thread_fn, - unsigned long flags, - const char *name, - void *dev_id) -{ - comp->irq = irq; - comp->handler = handler; - comp->thread_fn = thread_fn; - comp->dev_id = dev_id; - INIT_WORK(&comp->work, compat_irq_work); - - if (!comp->wq) { - snprintf(comp->wq_name, sizeof(comp->wq_name), - "compirq/%u-%s", irq, name); - comp->wq = create_singlethread_workqueue(comp->wq_name); - if (!comp->wq) { - printk(KERN_ERR "Failed to create compat-threaded-IRQ workqueue %s\n", - comp->wq_name); - return -ENOMEM; - } - } - return request_irq(irq, compat_irq_dispatcher, flags, name, comp); -} - -static inline -void compat_free_threaded_irq(struct compat_threaded_irq *comp) -{ - free_irq(comp->irq, comp); -} - -static inline -void compat_destroy_threaded_irq(struct compat_threaded_irq *comp) -{ - if (comp->wq) - destroy_workqueue(comp->wq); - comp->wq = NULL; -} - -static inline -void compat_synchronize_threaded_irq(struct compat_threaded_irq *comp) -{ - synchronize_irq(comp->irq); - cancel_work_sync(&comp->work); -} - -/** - * list_entry_rcu - get the struct for this entry - * @ptr: the &struct list_head pointer. - * @type: the type of the struct this is embedded in. - * @member: the name of the list_struct within the struct. - * - * This primitive may safely run concurrently with the _rcu list-mutation - * primitives such as list_add_rcu() as long as it's guarded by rcu_read_lock(). - */ -#define list_entry_rcu(ptr, type, member) \ - container_of(rcu_dereference(ptr), type, member) - -#define skb_walk_frags(skb, iter) \ - for (iter = skb_shinfo(skb)->frag_list; iter; iter = iter->next) - -#ifndef CONFIG_64BIT - -typedef struct { - long long counter; -} atomic64_t; - -extern long long atomic64_read(const atomic64_t *v); -extern long long atomic64_add_return(long long a, atomic64_t *v); - -#define atomic64_inc_return(v) atomic64_add_return(1LL, (v)) - -#endif - - -#endif /* (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,31)) */ - -#endif /* LINUX_26_31_COMPAT_H */ diff --git a/openairITS/mac/DOT11/include/linux/compat-2.6.32.h b/openairITS/mac/DOT11/include/linux/compat-2.6.32.h deleted file mode 100644 index b0c699a6d4..0000000000 --- a/openairITS/mac/DOT11/include/linux/compat-2.6.32.h +++ /dev/null @@ -1,178 +0,0 @@ -#ifndef LINUX_26_32_COMPAT_H -#define LINUX_26_32_COMPAT_H - -#include - -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,32)) - -#include -#include -#include -#include -#include - -#define SDIO_VENDOR_ID_INTEL 0x0089 -#define SDIO_DEVICE_ID_INTEL_IWMC3200WIMAX 0x1402 -#define SDIO_DEVICE_ID_INTEL_IWMC3200WIFI 0x1403 -#define SDIO_DEVICE_ID_INTEL_IWMC3200TOP 0x1404 -#define SDIO_DEVICE_ID_INTEL_IWMC3200GPS 0x1405 -#define SDIO_DEVICE_ID_INTEL_IWMC3200BT 0x1406 - -/* - * Backports 5e928f77a09a07f9dd595bb8a489965d69a83458 - * run-time power management cannot really be backported - * given that the implementation added bus specific - * callbacks that we won't have on older kernels. If - * you really want run-time power management or good - * power management upgrade your kernel. We'll just - * compile this out as if run-time power management was - * disabled just as the kernel disables run-time power management - * when CONFIG_PM_RUNTIME is disabled. - */ -static inline void pm_runtime_init(struct device *dev) {} -static inline void pm_runtime_remove(struct device *dev) {} -static inline int pm_runtime_get(struct device *dev) -{ - return 0; -} - -static inline int pm_runtime_get_sync(struct device *dev) -{ - return 0; -} - -static inline int pm_runtime_put(struct device *dev) -{ - return 0; -} - -static inline int pm_runtime_put_sync(struct device *dev) -{ - return 0; -} - -static inline int pm_runtime_set_active(struct device *dev) -{ - return 0; -} - -static inline void pm_runtime_set_suspended(struct device *dev) -{ -} - -static inline void pm_runtime_disable(struct device *dev) -{ -} - -static inline void pm_runtime_put_noidle(struct device *dev) {} -static inline void pm_runtime_get_noresume(struct device *dev) {} - -static inline void flush_delayed_work(struct delayed_work *dwork) -{ - if (del_timer_sync(&dwork->timer)) { - /* - * This is what would happen on 2.6.32 but since we don't have - * access to the singlethread_cpu we can't really backport this, - * so avoid really *flush*ing the work... Oh well. Any better ideas? - - struct cpu_workqueue_struct *cwq; - cwq = wq_per_cpu(keventd_wq, get_cpu()); - __queue_work(cwq, &dwork->work); - put_cpu(); - - */ - } - flush_work(&dwork->work); -} - -/* - * struct genl_multicast_group was made netns aware through - * patch "genetlink: make netns aware" by johannes, we just - * force this to always use the default init_net - */ -#define genl_info_net(x) &init_net -/* Just use init_net for older kernels */ -#define get_net_ns_by_pid(x) &init_net - -/* net namespace is lost */ -#define genlmsg_multicast_netns(a, b, c, d, e) genlmsg_multicast(b, c, d, e) -#define genlmsg_multicast_allns(a, b, c, d) genlmsg_multicast(a, b, c, d) -#define genlmsg_unicast(net, skb, pid) genlmsg_unicast(skb, pid) - -#define dev_change_net_namespace(a, b, c) (-EOPNOTSUPP) - -#define SET_NETDEV_DEVTYPE(netdev, type) - -#ifdef __KERNEL__ -/* Driver transmit return codes */ -enum netdev_tx { - BACKPORT_NETDEV_TX_OK = NETDEV_TX_OK, /* driver took care of packet */ - BACKPORT_NETDEV_TX_BUSY = NETDEV_TX_BUSY, /* driver tx path was busy*/ - BACKPORT_NETDEV_TX_LOCKED = NETDEV_TX_LOCKED, /* driver tx lock was already taken */ -}; -typedef enum netdev_tx netdev_tx_t; -#endif /* __KERNEL__ */ - -/* - * dev_pm_ops is only available on kernels >= 2.6.29, for - * older kernels we rely on reverting the work to old - * power management style stuff. - */ -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,29)) -/* - * Use this if you want to use the same suspend and resume callbacks for suspend - * to RAM and hibernation. - */ -#define SIMPLE_DEV_PM_OPS(name, suspend_fn, resume_fn) \ -struct dev_pm_ops name = { \ - .suspend = suspend_fn, \ - .resume = resume_fn, \ - .freeze = suspend_fn, \ - .thaw = resume_fn, \ - .poweroff = suspend_fn, \ - .restore = resume_fn, \ -} -#else -#define SIMPLE_DEV_PM_OPS(name, suspend_fn, resume_fn) -#endif /* >= 2.6.29 */ - -#define wireless_send_event(a, b, c, d) wireless_send_event(a, b, c, (char * ) d) - -/* The export symbol in changed in compat/patches/15-symbol-export-conflicts.patch */ -#define ieee80211_rx(hw, skb) mac80211_ieee80211_rx(hw, skb) - -#define dev_to_sdio_func(d) container_of(d, struct sdio_func, dev) - -#define lockdep_assert_held(l) do { } while (0) - -/* - * Similar to the struct tm in userspace , but it needs to be here so - * that the kernel source is self contained. - */ -struct tm { - /* - * the number of seconds after the minute, normally in the range - * 0 to 59, but can be up to 60 to allow for leap seconds - */ - int tm_sec; - /* the number of minutes after the hour, in the range 0 to 59*/ - int tm_min; - /* the number of hours past midnight, in the range 0 to 23 */ - int tm_hour; - /* the day of the month, in the range 1 to 31 */ - int tm_mday; - /* the number of months since January, in the range 0 to 11 */ - int tm_mon; - /* the number of years since 1900 */ - long tm_year; - /* the number of days since Sunday, in the range 0 to 6 */ - int tm_wday; - /* the number of days since January 1, in the range 0 to 365 */ - int tm_yday; -}; - -void time_to_tm(time_t totalsecs, int offset, struct tm *result); - -#endif /* (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,32)) */ - -#endif /* LINUX_26_32_COMPAT_H */ diff --git a/openairITS/mac/DOT11/include/linux/compat-2.6.33.h b/openairITS/mac/DOT11/include/linux/compat-2.6.33.h deleted file mode 100644 index 0c71af9993..0000000000 --- a/openairITS/mac/DOT11/include/linux/compat-2.6.33.h +++ /dev/null @@ -1,172 +0,0 @@ -#ifndef LINUX_26_33_COMPAT_H -#define LINUX_26_33_COMPAT_H - -#include - -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,33)) - -#include -#include -#if defined(CONFIG_PCCARD) || defined(CONFIG_PCCARD_MODULE) -#include -#include -#include -#endif -#include -#include - -#if defined(CONFIG_FW_LOADER) || defined(CONFIG_FW_LOADER_MODULE) -#define release_firmware compat_release_firmware -#define request_firmware compat_request_firmware -#define request_firmware_nowait compat_request_firmware_nowait -#endif - -#if defined(CONFIG_FW_LOADER) || defined(CONFIG_FW_LOADER_MODULE) -int compat_request_firmware(const struct firmware **fw, const char *name, - struct device *device); -int compat_request_firmware_nowait( - struct module *module, int uevent, - const char *name, struct device *device, gfp_t gfp, void *context, - void (*cont)(const struct firmware *fw, void *context)); - -void compat_release_firmware(const struct firmware *fw); -#else -static inline int compat_request_firmware(const struct firmware **fw, - const char *name, - struct device *device) -{ - return -EINVAL; -} -static inline int compat_request_firmware_nowait( - struct module *module, int uevent, - const char *name, struct device *device, gfp_t gfp, void *context, - void (*cont)(const struct firmware *fw, void *context)) -{ - return -EINVAL; -} - -static inline void compat_release_firmware(const struct firmware *fw) -{ -} -#endif - -/* mask KEY_RFKILL as RHEL6 backports this */ -#if !defined(KEY_RFKILL) -#define KEY_RFKILL 247 /* Key that controls all radios */ -#endif - -#define IFF_DONT_BRIDGE 0x800 /* disallow bridging this ether dev */ -/* source: include/linux/if.h */ - -/* this will never happen on older kernels */ -#define NETDEV_POST_INIT 0xffff - -/* mask netdev_alloc_skb_ip_align as debian squeeze also backports this */ -#define netdev_alloc_skb_ip_align(a, b) compat_netdev_alloc_skb_ip_align(a, b) - -static inline struct sk_buff *netdev_alloc_skb_ip_align(struct net_device *dev, - unsigned int length) -{ - struct sk_buff *skb = netdev_alloc_skb(dev, length + NET_IP_ALIGN); - - if (NET_IP_ALIGN && skb) - skb_reserve(skb, NET_IP_ALIGN); - return skb; -} - -#if defined(CONFIG_PCCARD) || defined(CONFIG_PCCARD_MODULE) - -#if defined(CONFIG_PCMCIA) || defined(CONFIG_PCMCIA_MODULE) - -#define pcmcia_request_window(a, b, c) pcmcia_request_window(&a, b, c) - -#define pcmcia_map_mem_page(a, b, c) pcmcia_map_mem_page(b, c) - -/* loop over CIS entries */ -int pcmcia_loop_tuple(struct pcmcia_device *p_dev, cisdata_t code, - int (*loop_tuple) (struct pcmcia_device *p_dev, - tuple_t *tuple, - void *priv_data), - void *priv_data); - -#endif /* CONFIG_PCMCIA */ - -/* loop over CIS entries */ -int pccard_loop_tuple(struct pcmcia_socket *s, unsigned int function, - cisdata_t code, cisparse_t *parse, void *priv_data, - int (*loop_tuple) (tuple_t *tuple, - cisparse_t *parse, - void *priv_data)); - -#endif /* CONFIG_PCCARD */ - -/** - * list_for_each_entry_continue_rcu - continue iteration over list of given type - * @pos: the type * to use as a loop cursor. - * @head: the head for your list. - * @member: the name of the list_struct within the struct. - * - * Continue to iterate over list of given type, continuing after - * the current position. - */ -#define list_for_each_entry_continue_rcu(pos, head, member) \ - for (pos = list_entry_rcu(pos->member.next, typeof(*pos), member); \ - prefetch(pos->member.next), &pos->member != (head); \ - pos = list_entry_rcu(pos->member.next, typeof(*pos), member)) - -#define sock_recv_ts_and_drops(msg, sk, skb) sock_recv_timestamp(msg, sk, skb) - -/* mask pci_pcie_cap as debian squeeze also backports this */ -#define pci_pcie_cap(a) compat_pci_pcie_cap(a) - -/** - * pci_pcie_cap - get the saved PCIe capability offset - * @dev: PCI device - * - * PCIe capability offset is calculated at PCI device initialization - * time and saved in the data structure. This function returns saved - * PCIe capability offset. Using this instead of pci_find_capability() - * reduces unnecessary search in the PCI configuration space. If you - * need to calculate PCIe capability offset from raw device for some - * reasons, please use pci_find_capability() instead. - */ -static inline int pci_pcie_cap(struct pci_dev *dev) -{ - return pci_find_capability(dev, PCI_CAP_ID_EXP); -} - -/* mask pci_is_pcie as RHEL6 backports this */ -#define pci_is_pcie(a) compat_pci_is_pcie(a) - -/** - * pci_is_pcie - check if the PCI device is PCI Express capable - * @dev: PCI device - * - * Retrun true if the PCI device is PCI Express capable, false otherwise. - */ -static inline bool pci_is_pcie(struct pci_dev *dev) -{ -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24)) - return dev->is_pcie; -#else - return !!pci_pcie_cap(dev); -#endif -} - -#ifdef __GNUC__ -#define __always_unused __attribute__((unused)) -#else -#define __always_unused /* unimplemented */ -#endif - -/* mask IS_ERR_OR_NULL as debian squeeze also backports this */ -#define IS_ERR_OR_NULL(a) compat_IS_ERR_OR_NULL(a) - -static inline long __must_check IS_ERR_OR_NULL(const void *ptr) -{ - return !ptr || IS_ERR_VALUE((unsigned long)ptr); -} - -#endif /* (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,33)) */ - -#endif /* LINUX_26_33_COMPAT_H */ diff --git a/openairITS/mac/DOT11/include/linux/compat-2.6.34.h b/openairITS/mac/DOT11/include/linux/compat-2.6.34.h deleted file mode 100644 index da242ce053..0000000000 --- a/openairITS/mac/DOT11/include/linux/compat-2.6.34.h +++ /dev/null @@ -1,309 +0,0 @@ -#ifndef LINUX_26_34_COMPAT_H -#define LINUX_26_34_COMPAT_H - -#include - -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,34)) - -#include -#include - -#define netdev_mc_count(dev) ((dev)->mc_count) -#define netdev_mc_empty(dev) (netdev_mc_count(dev) == 0) - -#define netdev_for_each_mc_addr(mclist, dev) \ - for (mclist = dev->mc_list; mclist; mclist = mclist->next) -/* source: include/linux/netdevice.h */ - - -/* Logging, debugging and troubleshooting/diagnostic helpers. */ - -/* netdev_printk helpers, similar to dev_printk */ - -#ifndef netdev_name -#define netdev_name(__dev) \ - ((__dev->reg_state != NETREG_REGISTERED) ? \ - "(unregistered net_device)" : __dev->name) -#endif - -#define netdev_printk(level, netdev, format, args...) \ - dev_printk(level, (netdev)->dev.parent, \ - "%s: " format, \ - netdev_name(netdev), ##args) - -#define netdev_emerg(dev, format, args...) \ - netdev_printk(KERN_EMERG, dev, format, ##args) -#define netdev_alert(dev, format, args...) \ - netdev_printk(KERN_ALERT, dev, format, ##args) -#define netdev_crit(dev, format, args...) \ - netdev_printk(KERN_CRIT, dev, format, ##args) -#define netdev_err(dev, format, args...) \ - netdev_printk(KERN_ERR, dev, format, ##args) -#define netdev_warn(dev, format, args...) \ - netdev_printk(KERN_WARNING, dev, format, ##args) -#define netdev_notice(dev, format, args...) \ - netdev_printk(KERN_NOTICE, dev, format, ##args) -#define netdev_info(dev, format, args...) \ - netdev_printk(KERN_INFO, dev, format, ##args) - -/* mask netdev_dbg as RHEL6 backports this */ -#if !defined(netdev_dbg) - -#if defined(DEBUG) -#define netdev_dbg(__dev, format, args...) \ - netdev_printk(KERN_DEBUG, __dev, format, ##args) -#elif defined(CONFIG_DYNAMIC_DEBUG) -#define netdev_dbg(__dev, format, args...) \ -do { \ - dynamic_dev_dbg((__dev)->dev.parent, "%s: " format, \ - netdev_name(__dev), ##args); \ -} while (0) -#else -#define netdev_dbg(__dev, format, args...) \ -({ \ - if (0) \ - netdev_printk(KERN_DEBUG, __dev, format, ##args); \ - 0; \ -}) -#endif - -#endif - -/* mask netdev_vdbg as RHEL6 backports this */ -#if !defined(netdev_dbg) - -#if defined(VERBOSE_DEBUG) -#define netdev_vdbg netdev_dbg -#else - -#define netdev_vdbg(dev, format, args...) \ -({ \ - if (0) \ - netdev_printk(KERN_DEBUG, dev, format, ##args); \ - 0; \ -}) -#endif - -#endif - -/* - * netdev_WARN() acts like dev_printk(), but with the key difference - * of using a WARN/WARN_ON to get the message out, including the - * file/line information and a backtrace. - */ -#define netdev_WARN(dev, format, args...) \ - WARN(1, "netdevice: %s\n" format, netdev_name(dev), ##args); - -/* netif printk helpers, similar to netdev_printk */ - -#define netif_printk(priv, type, level, dev, fmt, args...) \ -do { \ - if (netif_msg_##type(priv)) \ - netdev_printk(level, (dev), fmt, ##args); \ -} while (0) - -#define netif_emerg(priv, type, dev, fmt, args...) \ - netif_printk(priv, type, KERN_EMERG, dev, fmt, ##args) -#define netif_alert(priv, type, dev, fmt, args...) \ - netif_printk(priv, type, KERN_ALERT, dev, fmt, ##args) -#define netif_crit(priv, type, dev, fmt, args...) \ - netif_printk(priv, type, KERN_CRIT, dev, fmt, ##args) -#define netif_err(priv, type, dev, fmt, args...) \ - netif_printk(priv, type, KERN_ERR, dev, fmt, ##args) -#define netif_warn(priv, type, dev, fmt, args...) \ - netif_printk(priv, type, KERN_WARNING, dev, fmt, ##args) -#define netif_notice(priv, type, dev, fmt, args...) \ - netif_printk(priv, type, KERN_NOTICE, dev, fmt, ##args) -#define netif_info(priv, type, dev, fmt, args...) \ - netif_printk(priv, type, KERN_INFO, (dev), fmt, ##args) - -/* mask netif_dbg as RHEL6 backports this */ -#if !defined(netif_dbg) - -#if defined(DEBUG) -#define netif_dbg(priv, type, dev, format, args...) \ - netif_printk(priv, type, KERN_DEBUG, dev, format, ##args) -#elif defined(CONFIG_DYNAMIC_DEBUG) -#define netif_dbg(priv, type, netdev, format, args...) \ -do { \ - if (netif_msg_##type(priv)) \ - dynamic_dev_dbg((netdev)->dev.parent, \ - "%s: " format, \ - netdev_name(netdev), ##args); \ -} while (0) -#else -#define netif_dbg(priv, type, dev, format, args...) \ -({ \ - if (0) \ - netif_printk(priv, type, KERN_DEBUG, dev, format, ##args); \ - 0; \ -}) -#endif - -#endif - -/* mask netif_vdbg as RHEL6 backports this */ -#if !defined(netif_vdbg) - -#if defined(VERBOSE_DEBUG) -#define netif_vdbg netdev_dbg -#else -#define netif_vdbg(priv, type, dev, format, args...) \ -({ \ - if (0) \ - netif_printk(KERN_DEBUG, dev, format, ##args); \ - 0; \ -}) -#endif -#endif -/* source: include/linux/netdevice.h */ - - -static inline void device_lock(struct device *dev) -{ -#if defined(CONFIG_PREEMPT_RT) || defined(CONFIG_PREEMPT_DESKTOP) - mutex_lock(&dev->mutex); -#else - down(&dev->sem); -#endif -} - -static inline int device_trylock(struct device *dev) -{ -#if defined(CONFIG_PREEMPT_RT) || defined(CONFIG_PREEMPT_DESKTOP) - return mutex_trylock(&dev->mutex); -#else - return down_trylock(&dev->sem); -#endif -} - -static inline void device_unlock(struct device *dev) -{ -#if defined(CONFIG_PREEMPT_RT) || defined(CONFIG_PREEMPT_DESKTOP) - mutex_unlock(&dev->mutex); -#else - up(&dev->sem); -#endif -} - -#if defined(CONFIG_PCMCIA) || defined(CONFIG_PCMCIA_MODULE) -#define PCMCIA_DEVICE_PROD_ID3(v3, vh3) { \ - .match_flags = PCMCIA_DEV_ID_MATCH_PROD_ID3, \ - .prod_id = { NULL, NULL, (v3), NULL }, \ - .prod_id_hash = { 0, 0, (vh3), 0 }, } -#endif - -#define rcu_dereference_check(p, c) rcu_dereference(p) - -/** - * sysfs_attr_init - initialize a dynamically allocated sysfs attribute - * @attr: struct attribute to initialize - * - * Initialize a dynamically allocated struct attribute so we can - * make lockdep happy. This is a new requirement for attributes - * and initially this is only needed when lockdep is enabled. - * Lockdep gives a nice error when your attribute is added to - * sysfs if you don't have this. - */ -#ifdef CONFIG_DEBUG_LOCK_ALLOC -#define sysfs_attr_init(attr) \ -do { \ - static struct lock_class_key __key; \ - \ - (attr)->key = &__key; \ -} while(0) -#else -#define sysfs_attr_init(attr) do {} while(0) -#endif - -/** - * sysfs_bin_attr_init - initialize a dynamically allocated bin_attribute - * @attr: struct bin_attribute to initialize - * - * Initialize a dynamically allocated struct bin_attribute so we - * can make lockdep happy. This is a new requirement for - * attributes and initially this is only needed when lockdep is - * enabled. Lockdep gives a nice error when your attribute is - * added to sysfs if you don't have this. - */ -#define sysfs_bin_attr_init(bin_attr) sysfs_attr_init(&(bin_attr)->attr) - -#define usb_alloc_coherent(dev, size, mem_flags, dma) usb_buffer_alloc(dev, size, mem_flags, dma) -#define usb_free_coherent(dev, size, addr, dma) usb_buffer_free(dev, size, addr, dma) - -/* only include this if DEFINE_DMA_UNMAP_ADDR is not set as debian squeeze also backports this */ -#ifndef DEFINE_DMA_UNMAP_ADDR -#ifdef CONFIG_NEED_DMA_MAP_STATE -#define DEFINE_DMA_UNMAP_ADDR(ADDR_NAME) dma_addr_t ADDR_NAME -#define DEFINE_DMA_UNMAP_LEN(LEN_NAME) __u32 LEN_NAME -#define dma_unmap_addr(PTR, ADDR_NAME) ((PTR)->ADDR_NAME) -#define dma_unmap_addr_set(PTR, ADDR_NAME, VAL) (((PTR)->ADDR_NAME) = (VAL)) -#define dma_unmap_len(PTR, LEN_NAME) ((PTR)->LEN_NAME) -#define dma_unmap_len_set(PTR, LEN_NAME, VAL) (((PTR)->LEN_NAME) = (VAL)) -#else -#define DEFINE_DMA_UNMAP_ADDR(ADDR_NAME) -#define DEFINE_DMA_UNMAP_LEN(LEN_NAME) -#define dma_unmap_addr(PTR, ADDR_NAME) (0) -#define dma_unmap_addr_set(PTR, ADDR_NAME, VAL) do { } while (0) -#define dma_unmap_len(PTR, LEN_NAME) (0) -#define dma_unmap_len_set(PTR, LEN_NAME, VAL) do { } while (0) -#endif -#endif - -/* mask dma_set_coherent_mask as debian squeeze also backports this */ -#define dma_set_coherent_mask(a, b) compat_dma_set_coherent_mask(a, b) - -static inline int dma_set_coherent_mask(struct device *dev, u64 mask) -{ - if (!dma_supported(dev, mask)) - return -EIO; - dev->coherent_dma_mask = mask; - return 0; -} - -/* USB autosuspend and autoresume */ -static inline int usb_enable_autosuspend(struct usb_device *udev) -{ return 0; } -static inline int usb_disable_autosuspend(struct usb_device *udev) -{ return 0; } - -#define MMC_PM_KEEP_POWER (1 << 0) /* preserve card power during suspend */ -#define sdio_set_host_pm_flags(a, b) 0 - -#define rcu_dereference_protected(p, c) (p) -#define rcu_access_pointer(p) ACCESS_ONCE(p) - -#define rcu_dereference_raw(p) rcu_dereference(p) - -#define KEY_WPS_BUTTON 0x211 /* WiFi Protected Setup key */ - -/* - * This looks more complex than it should be. But we need to - * get the type for the ~ right in round_down (it needs to be - * as wide as the result!), and we want to evaluate the macro - * arguments just once each. - */ -#define __round_mask(x, y) ((__typeof__(x))((y)-1)) -#define round_up(x, y) ((((x)-1) | __round_mask(x, y))+1) -#define round_down(x, y) ((x) & ~__round_mask(x, y)) - -static inline int rcu_read_lock_held(void) -{ - return 1; -} - -#ifdef CONFIG_PROVE_LOCKING -/* - * Obviously, this is wrong. But the base kernel will have rtnl_mutex - * declared static, with no way to access it. I think this is the best - * we can do... - */ -static inline int lockdep_rtnl_is_held(void) -{ - return 1; -} -#endif /* #ifdef CONFIG_PROVE_LOCKING */ - -#endif /* (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,34)) */ - -#endif /* LINUX_26_34_COMPAT_H */ diff --git a/openairITS/mac/DOT11/include/linux/compat-2.6.35.h b/openairITS/mac/DOT11/include/linux/compat-2.6.35.h deleted file mode 100644 index 581412392e..0000000000 --- a/openairITS/mac/DOT11/include/linux/compat-2.6.35.h +++ /dev/null @@ -1,59 +0,0 @@ -#ifndef LINUX_26_35_COMPAT_H -#define LINUX_26_35_COMPAT_H - -#include - -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,35)) -#include -#include -#include -#include - -/* added on linux/kernel.h */ -#define USHRT_MAX ((u16)(~0U)) -#define SHRT_MAX ((s16)(USHRT_MAX>>1)) -#define SHRT_MIN ((s16)(-SHRT_MAX - 1)) - -#define SDIO_BUS_ECSI 0x20 /* Enable continuous SPI interrupt */ -#define SDIO_BUS_SCSI 0x40 /* Support continuous SPI interrupt */ - -#define netdev_hw_addr dev_mc_list - -/* - * We cannot backport this guy as the IRQ data structure - * was modified in the kernel itself to support this. We - * treat the system as uni-processor in this case. - */ -static inline int irq_set_affinity_hint(unsigned int irq, - const struct cpumask *m) -{ - return -EINVAL; -} - -static inline wait_queue_head_t *sk_sleep(struct sock *sk) -{ - return sk->sk_sleep; -} - -#define sdio_writeb_readb(func, write_byte, addr, err_ret) sdio_readb(func, addr, err_ret) - -/* mask hex_to_bin as RHEL6 backports this */ -#define hex_to_bin(a) compat_hex_to_bin(a) - -int hex_to_bin(char ch); - -extern loff_t noop_llseek(struct file *file, loff_t offset, int origin); - -#define pm_qos_request(_qos) pm_qos_requirement(_qos) - -static inline struct usb_host_endpoint * -usb_pipe_endpoint(struct usb_device *dev, unsigned int pipe) -{ - struct usb_host_endpoint **eps; - eps = usb_pipein(pipe) ? dev->ep_in : dev->ep_out; - return eps[usb_pipeendpoint(pipe)]; -} - -#endif /* (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,35)) */ - -#endif /* LINUX_26_35_COMPAT_H */ diff --git a/openairITS/mac/DOT11/include/linux/compat-2.6.36.h b/openairITS/mac/DOT11/include/linux/compat-2.6.36.h deleted file mode 100644 index 56d5961916..0000000000 --- a/openairITS/mac/DOT11/include/linux/compat-2.6.36.h +++ /dev/null @@ -1,212 +0,0 @@ -#ifndef LINUX_26_36_COMPAT_H -#define LINUX_26_36_COMPAT_H - -#include - -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,36)) - -#include -#include -#include -#include -#include - -#define kparam_block_sysfs_write(a) -#define kparam_unblock_sysfs_write(a) - -/* mask va_format as RHEL6 backports this */ -#define va_format compat_va_format - -struct va_format { - const char *fmt; - va_list *va; -}; - -#define device_rename(dev, new_name) device_rename(dev, (char *)new_name) - -#ifdef CONFIG_COMPAT_USB_URB_THREAD_FIX -#define usb_scuttle_anchored_urbs(anchor) compat_usb_scuttle_anchored_urbs(anchor) -#define usb_get_from_anchor(anchor) compat_usb_get_from_anchor(anchor) -#define usb_unlink_anchored_urbs(anchor) compat_usb_unlink_anchored_urbs(anchor) - -extern void compat_usb_unlink_anchored_urbs(struct usb_anchor *anchor); -extern struct urb *compat_usb_get_from_anchor(struct usb_anchor *anchor); -extern void compat_usb_scuttle_anchored_urbs(struct usb_anchor *anchor); -#endif - -/** - * pcmcia_read_config_byte() - read a byte from a card configuration register - * - * pcmcia_read_config_byte() reads a byte from a configuration register in - * attribute memory. - */ -static inline int pcmcia_read_config_byte(struct pcmcia_device *p_dev, off_t where, u8 *val) -{ - int ret; - conf_reg_t reg = { 0, CS_READ, where, 0 }; - ret = pcmcia_access_configuration_register(p_dev, ®); - *val = reg.Value; - return ret; -} - -/** - * pcmcia_write_config_byte() - write a byte to a card configuration register - * - * pcmcia_write_config_byte() writes a byte to a configuration register in - * attribute memory. - */ -static inline int pcmcia_write_config_byte(struct pcmcia_device *p_dev, off_t where, u8 val) -{ - conf_reg_t reg = { 0, CS_WRITE, where, val }; - return pcmcia_access_configuration_register(p_dev, ®); -} - -struct pm_qos_request_list { - u32 qos; - void *request; -}; - -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,35)) - -#define pm_qos_add_request(_req, _class, _value) do { \ - (_req)->request = #_req; \ - (_req)->qos = _class; \ - pm_qos_add_requirement((_class), (_req)->request, (_value)); \ - } while(0) - -#define pm_qos_update_request(_req, _value) \ - pm_qos_update_requirement((_req)->qos, (_req)->request, (_value)) - -#define pm_qos_remove_request(_req) \ - pm_qos_remove_requirement((_req)->qos, (_req)->request) - -#else - -#define pm_qos_add_request(_req, _class, _value) do { \ - (_req)->request = pm_qos_add_request((_class), (_value)); \ - } while (0) - -#define pm_qos_update_request(_req, _value) \ - pm_qos_update_request((_req)->request, (_value)) - -#define pm_qos_remove_request(_req) \ - pm_qos_remove_request((_req)->request) - -#endif - -/* - * Dummy printk for disabled debugging statements to use whilst maintaining - * gcc's format and side-effect checking. - */ -static inline __attribute__ ((format (printf, 1, 2))) -int no_printk(const char *s, ...) { return 0; } - -#ifndef alloc_workqueue -#define alloc_workqueue(name, flags, max_active) __create_workqueue(name, flags, max_active, 0) -#endif - -#define EXTPROC 0200000 -#define TIOCPKT_IOCTL 64 - -static inline void tty_lock(void) __acquires(kernel_lock) -{ -#ifdef CONFIG_LOCK_KERNEL - /* kernel_locked is 1 for !CONFIG_LOCK_KERNEL */ - WARN_ON(kernel_locked()); -#endif - lock_kernel(); -} -static inline void tty_unlock(void) __releases(kernel_lock) -{ - unlock_kernel(); -} -#define tty_locked() (kernel_locked()) - -#define usleep_range(_min, _max) msleep((_max) / 1000) - -#define __rcu - -static inline void pm_wakeup_event(struct device *dev, unsigned int msec) {} - -static inline bool skb_defer_rx_timestamp(struct sk_buff *skb) -{ - return false; -} - -static inline void skb_tx_timestamp(struct sk_buff *skb) -{ -} - -/* - * System-wide workqueues which are always present. - * - * system_wq is the one used by schedule[_delayed]_work[_on](). - * Multi-CPU multi-threaded. There are users which expect relatively - * short queue flush time. Don't queue works which can run for too - * long. - * - * system_long_wq is similar to system_wq but may host long running - * works. Queue flushing might take relatively long. - * - * system_nrt_wq is non-reentrant and guarantees that any given work - * item is never executed in parallel by multiple CPUs. Queue - * flushing might take relatively long. - */ -extern struct workqueue_struct *system_wq; -extern struct workqueue_struct *system_long_wq; -extern struct workqueue_struct *system_nrt_wq; - -void compat_system_workqueue_create(void); -void compat_system_workqueue_destroy(void); - -int compat_schedule_work(struct work_struct *work); -int compat_schedule_work_on(int cpu, struct work_struct *work); -int compat_schedule_delayed_work(struct delayed_work *dwork, - unsigned long delay); -int compat_schedule_delayed_work_on(int cpu, - struct delayed_work *dwork, - unsigned long delay); -void compat_flush_scheduled_work(void); - -enum { - /* bit mask for work_busy() return values */ - WORK_BUSY_PENDING = 1 << 0, - WORK_BUSY_RUNNING = 1 << 1, -}; - -extern unsigned int work_busy(struct work_struct *work); - -#define schedule_work(work) compat_schedule_work(work) -#define schedule_work_on(cpu, work) compat_schedule_work_on(cpu, work) -#define schedule_delayed_work(dwork, delay) compat_schedule_delayed_work(dwork, delay) -#define schedule_delayed_work_on(cpu, dwork, delay) compat_schedule_delayed_work_on(cpu, dwork, delay) -#define flush_scheduled_work(a) compat_flush_scheduled_work(a) - -#define br_port_exists(dev) (dev->br_port) - -#else - -static inline void compat_system_workqueue_create(void) -{ -} - -static inline void compat_system_workqueue_destroy(void) -{ -} - -/* - * This is not part of The 2.6.37 kernel yet but we - * we use it to optimize the backport code we - * need to implement. Instead of using ifdefs - * to check what version of the check we use - * we just replace all checks on current code - * with this. I'll submit this upstream too, that - * way all we'd have to do is to implement this - * for older kernels, then we would not have to - * edit the upstrema code for backport efforts. - */ -#define br_port_exists(dev) (dev->priv_flags & IFF_BRIDGE_PORT) - -#endif /* (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,36)) */ - -#endif /* LINUX_26_36_COMPAT_H */ diff --git a/openairITS/mac/DOT11/include/linux/compat-2.6.37.h b/openairITS/mac/DOT11/include/linux/compat-2.6.37.h deleted file mode 100644 index c19e781846..0000000000 --- a/openairITS/mac/DOT11/include/linux/compat-2.6.37.h +++ /dev/null @@ -1,140 +0,0 @@ -#ifndef LINUX_26_37_COMPAT_H -#define LINUX_26_37_COMPAT_H - -#include - -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,37)) - -#include -#include - -#define SDIO_CLASS_BT_AMP 0x09 /* Type-A Bluetooth AMP interface */ - -extern struct kobj_ns_type_operations net_ns_type_operations; - -/* mask skb_checksum_none_assert as RHEL6 backports this */ -#define skb_checksum_none_assert(a) compat_skb_checksum_none_assert(a) - -/** - * skb_checksum_none_assert - make sure skb ip_summed is CHECKSUM_NONE - * @skb: skb to check - * - * fresh skbs have their ip_summed set to CHECKSUM_NONE. - * Instead of forcing ip_summed to CHECKSUM_NONE, we can - * use this helper, to document places where we make this assertion. - */ -static inline void skb_checksum_none_assert(struct sk_buff *skb) -{ -#ifdef DEBUG - BUG_ON(skb->ip_summed != CHECKSUM_NONE); -#endif -} - -#define pcmcia_enable_device(link) pcmcia_request_configuration(link, &link->conf) - -#include - -struct compat_genl_info { - struct genl_info *info; - - u32 snd_seq; - u32 snd_pid; - struct genlmsghdr *genlhdr; - struct nlattr **attrs; - void *user_ptr[2]; -}; -#define genl_info compat_genl_info - -struct compat_genl_ops { - struct genl_ops ops; - - u8 cmd; - u8 internal_flags; - unsigned int flags; - const struct nla_policy *policy; - - int (*doit)(struct sk_buff *skb, struct genl_info *info); - int (*dumpit)(struct sk_buff *skb, struct netlink_callback *cb); - int (*done)(struct netlink_callback *cb); -}; -#define genl_ops compat_genl_ops - -struct compat_genl_family { - struct genl_family family; - - struct list_head list; - - unsigned int id, hdrsize, version, maxattr; - const char *name; - bool netnsok; - - struct nlattr **attrbuf; - - int (*pre_doit)(struct genl_ops *ops, struct sk_buff *skb, - struct genl_info *info); - - void (*post_doit)(struct genl_ops *ops, struct sk_buff *skb, - struct genl_info *info); -}; - -#define genl_family compat_genl_family - -#define genl_register_family_with_ops compat_genl_register_family_with_ops - -int genl_register_family_with_ops(struct genl_family *family, - struct genl_ops *ops, size_t n_ops); - -#define genl_unregister_family compat_genl_unregister_family - -int genl_unregister_family(struct genl_family *family); - -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,32)) -#define genl_info_net(_info) genl_info_net((_info)->info) -#endif - -#define genlmsg_reply(_msg, _info) genlmsg_reply(_msg, (_info)->info) -#define genlmsg_put(_skb, _pid, _seq, _fam, _flags, _cmd) genlmsg_put(_skb, _pid, _seq, &(_fam)->family, _flags, _cmd) -#define genl_register_mc_group(_fam, _grp) genl_register_mc_group(&(_fam)->family, _grp) -#define genl_unregister_mc_group(_fam, _grp) genl_unregister_mc_group(&(_fam)->family, _grp) - - -extern void led_blink_set(struct led_classdev *led_cdev, - unsigned long *delay_on, - unsigned long *delay_off); - -#define led_classdev_unregister compat_led_classdev_unregister -extern void compat_led_classdev_unregister(struct led_classdev *led_cdev); - -#define led_brightness_set compat_led_brightness_set -extern void compat_led_brightness_set(struct led_classdev *led_cdev, - enum led_brightness brightness); - -#define alloc_ordered_workqueue(name, flags) create_singlethread_workqueue(name) - -#define netdev_refcnt_read(a) atomic_read(&a->refcnt) - -/* mask vzalloc as RHEL6 backports this */ -#define vzalloc(a) compat_vzalloc(a) - -extern void *vzalloc(unsigned long size); - -#define rtnl_dereference(p) \ - rcu_dereference_protected(p, lockdep_rtnl_is_held()) - -/** - * RCU_INIT_POINTER() - initialize an RCU protected pointer - * - * Initialize an RCU-protected pointer in such a way to avoid RCU-lockdep - * splats. - */ -#define RCU_INIT_POINTER(p, v) \ - p = (typeof(*v) __force __rcu *)(v) - -static inline bool skb_has_frag_list(const struct sk_buff *skb) -{ - return skb_shinfo(skb)->frag_list != NULL; -} - -#endif /* (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,37)) */ - -#endif /* LINUX_26_37_COMPAT_H */ diff --git a/openairITS/mac/DOT11/include/linux/compat-2.6.38.h b/openairITS/mac/DOT11/include/linux/compat-2.6.38.h deleted file mode 100644 index 63f9dd6a0e..0000000000 --- a/openairITS/mac/DOT11/include/linux/compat-2.6.38.h +++ /dev/null @@ -1,95 +0,0 @@ -#ifndef LINUX_26_38_COMPAT_H -#define LINUX_26_38_COMPAT_H - -#include - -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,38)) - -#include -#include -#include - -/* rename member in struct mmc_host in include/linux/mmc/host.h */ -#define max_segs max_hw_segs - - -/* Exponentially weighted moving average (EWMA) */ - -/* For more documentation see lib/average.c */ - -struct ewma { - unsigned long internal; - unsigned long factor; - unsigned long weight; -}; - -extern void ewma_init(struct ewma *avg, unsigned long factor, - unsigned long weight); - -extern struct ewma *ewma_add(struct ewma *avg, unsigned long val); - -/** - * ewma_read() - Get average value - * @avg: Average structure - * - * Returns the average value held in @avg. - */ -static inline unsigned long ewma_read(const struct ewma *avg) -{ - return DIV_ROUND_CLOSEST(avg->internal, avg->factor); -} - -#define pr_warn pr_warning -#define create_freezable_workqueue create_freezeable_workqueue - -static inline int skb_checksum_start_offset(const struct sk_buff *skb) -{ - return skb->csum_start - skb_headroom(skb); -} - -/* from include/linux/printk.h */ -#define pr_emerg_once(fmt, ...) \ - printk_once(KERN_EMERG pr_fmt(fmt), ##__VA_ARGS__) -#define pr_alert_once(fmt, ...) \ - printk_once(KERN_ALERT pr_fmt(fmt), ##__VA_ARGS__) -#define pr_crit_once(fmt, ...) \ - printk_once(KERN_CRIT pr_fmt(fmt), ##__VA_ARGS__) -#define pr_err_once(fmt, ...) \ - printk_once(KERN_ERR pr_fmt(fmt), ##__VA_ARGS__) -#define pr_warn_once(fmt, ...) \ - printk_once(KERN_WARNING pr_fmt(fmt), ##__VA_ARGS__) -#define pr_notice_once(fmt, ...) \ - printk_once(KERN_NOTICE pr_fmt(fmt), ##__VA_ARGS__) -#define pr_info_once(fmt, ...) \ - printk_once(KERN_INFO pr_fmt(fmt), ##__VA_ARGS__) -#define pr_cont_once(fmt, ...) \ - printk_once(KERN_CONT pr_fmt(fmt), ##__VA_ARGS__) -#if defined(DEBUG) -#define pr_debug_once(fmt, ...) \ - printk_once(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__) -#else -#define pr_debug_once(fmt, ...) \ - no_printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__) -#endif - -/* include/linux/netdevice.h */ -#define alloc_netdev_mqs(sizeof_priv, name, setup, txqs, rxqs) \ - alloc_netdev_mq(sizeof_priv, name, setup, \ - max_t(unsigned int, txqs, rxqs)) - -#define ETH_P_LINK_CTL 0x886c /* HPNA, wlan link local tunnel */ - -/** - * is_unicast_ether_addr - Determine if the Ethernet address is unicast - * @addr: Pointer to a six-byte array containing the Ethernet address - * - * Return true if the address is a unicast address. - */ -static inline int is_unicast_ether_addr(const u8 *addr) -{ - return !is_multicast_ether_addr(addr); -} - -#endif /* (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,38)) */ - -#endif /* LINUX_26_38_COMPAT_H */ diff --git a/openairITS/mac/DOT11/include/linux/compat-2.6.39.h b/openairITS/mac/DOT11/include/linux/compat-2.6.39.h deleted file mode 100644 index 406f8ebfc9..0000000000 --- a/openairITS/mac/DOT11/include/linux/compat-2.6.39.h +++ /dev/null @@ -1,169 +0,0 @@ -#ifndef LINUX_26_39_COMPAT_H -#define LINUX_26_39_COMPAT_H - -#include - -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,39)) - -#include -#include -#include - -#define tiocmget(tty) tiocmget(tty, NULL) -#define tiocmset(tty, set, clear) tiocmset(tty, NULL, set, clear) - -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,27)) -extern int tty_set_termios(struct tty_struct *tty, struct ktermios *kt); -#endif /* (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,27)) */ - -static inline int irq_set_irq_wake(unsigned int irq, unsigned int on) -{ - return set_irq_wake(irq, on); -} -static inline int irq_set_chip(unsigned int irq, struct irq_chip *chip) -{ - return set_irq_chip(irq, chip); -} -static inline int irq_set_handler_data(unsigned int irq, void *data) -{ - return set_irq_data(irq, data); -} -static inline int irq_set_chip_data(unsigned int irq, void *data) -{ - return set_irq_chip_data(irq, data); -} -static inline int irq_set_irq_type(unsigned int irq, unsigned int type) -{ - return set_irq_type(irq, type); -} -static inline int irq_set_msi_desc(unsigned int irq, struct msi_desc *entry) -{ - return set_irq_msi(irq, entry); -} -static inline struct irq_chip *irq_get_chip(unsigned int irq) -{ - return get_irq_chip(irq); -} -static inline void *irq_get_chip_data(unsigned int irq) -{ - return get_irq_chip_data(irq); -} -static inline void *irq_get_handler_data(unsigned int irq) -{ - return get_irq_data(irq); -} - -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) -static inline void *irq_data_get_irq_handler_data(struct irq_data *d) -{ - return irq_data_get_irq_data(d); -} -#endif - -static inline struct msi_desc *irq_get_msi_desc(unsigned int irq) -{ - return get_irq_msi(irq); -} - -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,25)) -static inline void irq_set_noprobe(unsigned int irq) -{ - set_irq_noprobe(irq); -} -static inline void irq_set_probe(unsigned int irq) -{ - set_irq_probe(irq); -} -#endif - -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,29)) -static inline struct irq_chip *irq_desc_get_chip(struct irq_desc *desc) -{ - return get_irq_desc_chip(desc); -} -static inline void *irq_desc_get_handler_data(struct irq_desc *desc) -{ - return get_irq_desc_data(desc); -} - -static inline void *irq_desc_get_chip_data(struct irq_desc *desc) -{ - return get_irq_desc_chip_data(desc); -} - -static inline struct msi_desc *irq_desc_get_msi_desc(struct irq_desc *desc) -{ - return get_irq_desc_msi(desc); -} -#endif /* (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,29)) */ - -/* - * kstrto* was included in kernel 2.6.38.4 and causes conflicts with the - * version included in compat-wireless. We use strict_strtol to check if - * kstrto* is already available. - */ -#ifndef strict_strtol -/* Internal, do not use. */ -int __must_check _kstrtoul(const char *s, unsigned int base, unsigned long *res); -int __must_check _kstrtol(const char *s, unsigned int base, long *res); - -int __must_check kstrtoull(const char *s, unsigned int base, unsigned long long *res); -int __must_check kstrtoll(const char *s, unsigned int base, long long *res); -static inline int __must_check kstrtoul(const char *s, unsigned int base, unsigned long *res) -{ - /* - * We want to shortcut function call, but - * __builtin_types_compatible_p(unsigned long, unsigned long long) = 0. - */ - if (sizeof(unsigned long) == sizeof(unsigned long long) && - __alignof__(unsigned long) == __alignof__(unsigned long long)) - return kstrtoull(s, base, (unsigned long long *)res); - else - return _kstrtoul(s, base, res); -} - -static inline int __must_check kstrtol(const char *s, unsigned int base, long *res) -{ - /* - * We want to shortcut function call, but - * __builtin_types_compatible_p(long, long long) = 0. - */ - if (sizeof(long) == sizeof(long long) && - __alignof__(long) == __alignof__(long long)) - return kstrtoll(s, base, (long long *)res); - else - return _kstrtol(s, base, res); -} - -int __must_check kstrtouint(const char *s, unsigned int base, unsigned int *res); -int __must_check kstrtoint(const char *s, unsigned int base, int *res); - -static inline int __must_check kstrtou64(const char *s, unsigned int base, u64 *res) -{ - return kstrtoull(s, base, res); -} - -static inline int __must_check kstrtos64(const char *s, unsigned int base, s64 *res) -{ - return kstrtoll(s, base, res); -} - -static inline int __must_check kstrtou32(const char *s, unsigned int base, u32 *res) -{ - return kstrtouint(s, base, res); -} - -static inline int __must_check kstrtos32(const char *s, unsigned int base, s32 *res) -{ - return kstrtoint(s, base, res); -} - -int __must_check kstrtou16(const char *s, unsigned int base, u16 *res); -int __must_check kstrtos16(const char *s, unsigned int base, s16 *res); -int __must_check kstrtou8(const char *s, unsigned int base, u8 *res); -int __must_check kstrtos8(const char *s, unsigned int base, s8 *res); -#endif /* ifndef strict_strtol */ - -#endif /* (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,39)) */ - -#endif /* LINUX_26_39_COMPAT_H */ diff --git a/openairITS/mac/DOT11/include/linux/compat-2.6.h b/openairITS/mac/DOT11/include/linux/compat-2.6.h deleted file mode 100644 index 17905598f5..0000000000 --- a/openairITS/mac/DOT11/include/linux/compat-2.6.h +++ /dev/null @@ -1,67 +0,0 @@ -#ifndef LINUX_26_COMPAT_H -#define LINUX_26_COMPAT_H - -#include -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,1,0)) -#include -#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,33)) -#include -#else -#include -#endif -#include -#include - -/* - * The define overwriting module_init is based on the original module_init - * which looks like this: - * #define module_init(initfn) \ - * static inline initcall_t __inittest(void) \ - * { return initfn; } \ - * int init_module(void) __attribute__((alias(#initfn))); - * - * To the call to the initfn we added the symbol dependency on compat - * to make sure that compat.ko gets loaded for any compat modules. - */ -void compat_dependency_symbol(void); - -#undef module_init -#define module_init(initfn) \ - static int __init __init_compat(void) \ - { \ - compat_dependency_symbol(); \ - return initfn(); \ - } \ - int init_module(void) __attribute__((alias("__init_compat"))); - -/* - * Each compat file represents compatibility code for new kernel - * code introduced for *that* kernel revision. - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#endif /* LINUX_26_COMPAT_H */ diff --git a/openairITS/mac/DOT11/include/linux/compat-3.0.h b/openairITS/mac/DOT11/include/linux/compat-3.0.h deleted file mode 100644 index 22ab5399ad..0000000000 --- a/openairITS/mac/DOT11/include/linux/compat-3.0.h +++ /dev/null @@ -1,130 +0,0 @@ -#ifndef LINUX_3_0_COMPAT_H -#define LINUX_3_0_COMPAT_H - -#include - -#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,0,0)) - -#include - -/* - * since commit 1c5cae815d19ffe02bdfda1260949ef2b1806171 - * "net: call dev_alloc_name from register_netdevice" dev_alloc_name is - * called automatically. This is not implemented in older kernel - * versions so it will result in device wrong names. - */ -static inline int register_netdevice_name(struct net_device *dev) -{ - int err; - - if (strchr(dev->name, '%')) { - err = dev_alloc_name(dev, dev->name); - if (err < 0) - return err; - } - - return register_netdevice(dev); -} - -#define register_netdevice(dev) register_netdevice_name(dev) - -/* BCMA core, see drivers/bcma/ */ -#ifndef BCMA_CORE -/* Broadcom's specific AMBA core, see drivers/bcma/ */ -struct bcma_device_id { - __u16 manuf; - __u16 id; - __u8 rev; - __u8 class; -}; -#define BCMA_CORE(_manuf, _id, _rev, _class) \ - { .manuf = _manuf, .id = _id, .rev = _rev, .class = _class, } -#define BCMA_CORETABLE_END \ - { 0, }, - -#define BCMA_ANY_MANUF 0xFFFF -#define BCMA_ANY_ID 0xFFFF -#define BCMA_ANY_REV 0xFF -#define BCMA_ANY_CLASS 0xFF -#endif /* BCMA_CORE */ - -int mac_pton(const char *s, u8 *mac); - -int __must_check kstrtoull_from_user(const char __user *s, size_t count, unsigned int base, unsigned long long *res); -int __must_check kstrtoll_from_user(const char __user *s, size_t count, unsigned int base, long long *res); -int __must_check kstrtoul_from_user(const char __user *s, size_t count, unsigned int base, unsigned long *res); -int __must_check kstrtol_from_user(const char __user *s, size_t count, unsigned int base, long *res); -int __must_check kstrtouint_from_user(const char __user *s, size_t count, unsigned int base, unsigned int *res); -int __must_check kstrtoint_from_user(const char __user *s, size_t count, unsigned int base, int *res); -int __must_check kstrtou16_from_user(const char __user *s, size_t count, unsigned int base, u16 *res); -int __must_check kstrtos16_from_user(const char __user *s, size_t count, unsigned int base, s16 *res); -int __must_check kstrtou8_from_user(const char __user *s, size_t count, unsigned int base, u8 *res); -int __must_check kstrtos8_from_user(const char __user *s, size_t count, unsigned int base, s8 *res); - -static inline int __must_check kstrtou64_from_user(const char __user *s, size_t count, unsigned int base, u64 *res) -{ - return kstrtoull_from_user(s, count, base, res); -} - -static inline int __must_check kstrtos64_from_user(const char __user *s, size_t count, unsigned int base, s64 *res) -{ - return kstrtoll_from_user(s, count, base, res); -} - -static inline int __must_check kstrtou32_from_user(const char __user *s, size_t count, unsigned int base, u32 *res) -{ - return kstrtouint_from_user(s, count, base, res); -} - -static inline int __must_check kstrtos32_from_user(const char __user *s, size_t count, unsigned int base, s32 *res) -{ - return kstrtoint_from_user(s, count, base, res); -} - -/* - * This adds a nested function everywhere kfree_rcu() was called. This - * function frees the memory and is given as a function to call_rcu(). - * The rcu callback could happen every time also after the module was - * unloaded and this will cause problems. - */ -#define kfree_rcu(data, rcuhead) do { \ - void __kfree_rcu_fn(struct rcu_head *rcu_head) \ - { \ - void *___ptr; \ - ___ptr = container_of(rcu_head, typeof(*(data)), rcuhead);\ - kfree(___ptr); \ - } \ - call_rcu(&(data)->rcuhead, __kfree_rcu_fn); \ - } while (0) - -#ifdef MODULE - -/* - * The define overwriting module_exit is based on the original module_exit - * which looks like this: - * #define module_exit(exitfn) \ - * static inline exitcall_t __exittest(void) \ - * { return exitfn; } \ - * void cleanup_module(void) __attribute__((alias(#exitfn))); - * - * We replaced the call to the actual function exitfn() with a call to our - * function which calls the original exitfn() and then rcu_barrier() - * - * As a module will not be unloaded that ofter it should not have a big - * performance impact when rcu_barrier() is called on every module exit, - * also when no kfree_rcu() backport is used in that module. - */ -#undef module_exit -#define module_exit(exitfn) \ - static void __exit __exit_compat(void) \ - { \ - exitfn(); \ - rcu_barrier(); \ - } \ - void cleanup_module(void) __attribute__((alias("__exit_compat"))); - -#endif - -#endif /* (LINUX_VERSION_CODE < KERNEL_VERSION(3,0,0)) */ - -#endif /* LINUX_3_0_COMPAT_H */ diff --git a/openairITS/mac/DOT11/include/linux/compat-3.1.h b/openairITS/mac/DOT11/include/linux/compat-3.1.h deleted file mode 100644 index 1e8e05edb1..0000000000 --- a/openairITS/mac/DOT11/include/linux/compat-3.1.h +++ /dev/null @@ -1,62 +0,0 @@ -#ifndef LINUX_3_1_COMPAT_H -#define LINUX_3_1_COMPAT_H - -#include - -#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,1,0)) - -#include -#include - -static inline struct sk_buff *__netdev_alloc_skb_ip_align(struct net_device *dev, - unsigned int length, gfp_t gfp) -{ - struct sk_buff *skb = __netdev_alloc_skb(dev, length + NET_IP_ALIGN, gfp); - - if (NET_IP_ALIGN && skb) - skb_reserve(skb, NET_IP_ALIGN); - return skb; -} - -#define IS_ENABLED(option) defined(option) - -#define genl_dump_check_consistent(cb, user_hdr, family) - -#define IFF_TX_SKB_SHARING 0x10000 /* The interface supports sharing - * skbs on transmit */ - -#define PCMCIA_DEVICE_MANF_CARD_PROD_ID3(manf, card, v3, vh3) { \ - .match_flags = PCMCIA_DEV_ID_MATCH_MANF_ID| \ - PCMCIA_DEV_ID_MATCH_CARD_ID| \ - PCMCIA_DEV_ID_MATCH_PROD_ID3, \ - .manf_id = (manf), \ - .card_id = (card), \ - .prod_id = { NULL, NULL, (v3), NULL }, \ - .prod_id_hash = { 0, 0, (vh3), 0 }, } - -/* - * This has been defined in include/linux/security.h for some time, but was - * only given an EXPORT_SYMBOL for 3.1. Add a compat_* definition to avoid - * breaking the compile. - */ -#define security_sk_clone(a, b) compat_security_sk_clone(a, b) - -static inline void security_sk_clone(const struct sock *sk, struct sock *newsk) -{ -} - -/* - * In many versions, several architectures do not seem to include an - * atomic64_t implementation, and do not include the software emulation from - * asm-generic/atomic64_t. - * Detect and handle this here. - */ -#include - -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,31)) && !defined(ATOMIC64_INIT) && !defined(CONFIG_X86) && !((LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,33)) && defined(CONFIG_ARM) && !defined(CONFIG_GENERIC_ATOMIC64)) -#include -#endif - -#endif /* (LINUX_VERSION_CODE < KERNEL_VERSION(3,1,0)) */ - -#endif /* LINUX_3_1_COMPAT_H */ diff --git a/openairITS/mac/DOT11/include/linux/compat-3.2.h b/openairITS/mac/DOT11/include/linux/compat-3.2.h deleted file mode 100644 index cb14f0b120..0000000000 --- a/openairITS/mac/DOT11/include/linux/compat-3.2.h +++ /dev/null @@ -1,81 +0,0 @@ -#ifndef LINUX_3_2_COMPAT_H -#define LINUX_3_2_COMPAT_H - -#include - -#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,2,0)) - -#include -#include - -#define PMSG_IS_AUTO(msg) (((msg).event & PM_EVENT_AUTO) != 0) - -/** - * skb_frag_page - retrieve the page refered to by a paged fragment - * @frag: the paged fragment - * - * Returns the &struct page associated with @frag. - */ -static inline struct page *skb_frag_page(const skb_frag_t *frag) -{ - return frag->page; -} - -/** - * skb_frag_dma_map - maps a paged fragment via the DMA API - * @device: the device to map the fragment to - * @frag: the paged fragment to map - * @offset: the offset within the fragment (starting at the - * fragment's own offset) - * @size: the number of bytes to map - * @direction: the direction of the mapping (%PCI_DMA_*) - * - * Maps the page associated with @frag to @device. - */ -static inline dma_addr_t skb_frag_dma_map(struct device *dev, - const skb_frag_t *frag, - size_t offset, size_t size, - enum dma_data_direction dir) -{ - return dma_map_page(dev, skb_frag_page(frag), - frag->page_offset + offset, size, dir); -} - -#define ETH_P_TDLS 0x890D /* TDLS */ - -static inline unsigned int skb_frag_size(const skb_frag_t *frag) -{ - return frag->size; -} - -static inline char *hex_byte_pack(char *buf, u8 byte) -{ - *buf++ = hex_asc_hi(byte); - *buf++ = hex_asc_lo(byte); - return buf; -} - -/* module_platform_driver() - Helper macro for drivers that don't do - * anything special in module init/exit. This eliminates a lot of - * boilerplate. Each module may only use this macro once, and - * calling it replaces module_init() and module_exit() - */ -#define module_platform_driver(__platform_driver) \ - module_driver(__platform_driver, platform_driver_register, \ - platform_driver_unregister) - -static inline void *dma_zalloc_coherent(struct device *dev, size_t size, - dma_addr_t *dma_handle, gfp_t flag) -{ - void *ret = dma_alloc_coherent(dev, size, dma_handle, flag); - if (ret) - memset(ret, 0, size); - return ret; -} - -extern int __netdev_printk(const char *level, const struct net_device *dev, - struct va_format *vaf); - -#endif /* (LINUX_VERSION_CODE < KERNEL_VERSION(3,2,0)) */ - -#endif /* LINUX_3_2_COMPAT_H */ diff --git a/openairITS/mac/DOT11/include/linux/compat-3.3.h b/openairITS/mac/DOT11/include/linux/compat-3.3.h deleted file mode 100644 index 69bdcd0bbe..0000000000 --- a/openairITS/mac/DOT11/include/linux/compat-3.3.h +++ /dev/null @@ -1,60 +0,0 @@ -#ifndef LINUX_3_3_COMPAT_H -#define LINUX_3_3_COMPAT_H - -#include - -#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,3,0)) - -/* include to override NL80211_FEATURE_SK_TX_STATUS */ -#include -#include - -extern struct sk_buff *__pskb_copy(struct sk_buff *skb, - int headroom, gfp_t gfp_mask); - -static inline void skb_complete_wifi_ack(struct sk_buff *skb, bool acked) -{ - WARN_ON(1); -} -#define NL80211_FEATURE_SK_TX_STATUS 0 - -typedef u32 netdev_features_t; - -/* source include/linux/device.h */ -/** - * module_driver() - Helper macro for drivers that don't do anything - * special in module init/exit. This eliminates a lot of boilerplate. - * Each module may only use this macro once, and calling it replaces - * module_init() and module_exit(). - * - * Use this macro to construct bus specific macros for registering - * drivers, and do not use it on its own. - */ -#define module_driver(__driver, __register, __unregister) \ -static int __init __driver##_init(void) \ -{ \ - return __register(&(__driver)); \ -} \ -module_init(__driver##_init); \ -static void __exit __driver##_exit(void) \ -{ \ - __unregister(&(__driver)); \ -} \ -module_exit(__driver##_exit); - -/* source include/linux/usb.h */ -/** - * module_usb_driver() - Helper macro for registering a USB driver - * @__usb_driver: usb_driver struct - * - * Helper macro for USB drivers which do not do anything special in module - * init/exit. This eliminates a lot of boilerplate. Each module may only - * use this macro once, and calling it replaces module_init() and module_exit() - */ -#define module_usb_driver(__usb_driver) \ - module_driver(__usb_driver, usb_register, \ - usb_deregister) - -#endif /* (LINUX_VERSION_CODE < KERNEL_VERSION(3,3,0)) */ - -#endif /* LINUX_3_3_COMPAT_H */ diff --git a/openairITS/mac/DOT11/include/linux/compat-3.4.h b/openairITS/mac/DOT11/include/linux/compat-3.4.h deleted file mode 100644 index e82e52fa78..0000000000 --- a/openairITS/mac/DOT11/include/linux/compat-3.4.h +++ /dev/null @@ -1,67 +0,0 @@ -#ifndef LINUX_3_4_COMPAT_H -#define LINUX_3_4_COMPAT_H - -#include - -#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,4,0)) - -#include -#include - -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,28)) -#define skb_add_rx_frag(skb, i, page, off, size, truesize) \ - v2_6_28_skb_add_rx_frag(skb, i, page, off, size) -#else -#define skb_add_rx_frag(skb, i, page, off, size, truesize) \ - skb_add_rx_frag(skb, i, page, off, size) -#endif - -#ifdef CONFIG_X86_X32_ABI -#define COMPAT_USE_64BIT_TIME \ - (!!(task_pt_regs(current)->orig_ax & __X32_SYSCALL_BIT)) -#else -#define COMPAT_USE_64BIT_TIME 0 -#endif - -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,12)) -static inline void eth_hw_addr_random(struct net_device *dev) -{ -#error eth_hw_addr_random() needs to be implemented for < 2.6.12 -} -#else /* kernels >= 2.6.12 */ - -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,31)) -static inline void eth_hw_addr_random(struct net_device *dev) -{ - get_random_bytes(dev->dev_addr, ETH_ALEN); - dev->dev_addr[0] &= 0xfe; /* clear multicast bit */ - dev->dev_addr[0] |= 0x02; /* set local assignment bit (IEEE802) */ -} -#else /* kernels >= 2.6.31 */ - -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,36)) -/* So this is 2.6.31..2.6.35 */ - -/* Just have the flags present, they won't really mean anything though */ -#define NET_ADDR_PERM 0 /* address is permanent (default) */ -#define NET_ADDR_RANDOM 1 /* address is generated randomly */ -#define NET_ADDR_STOLEN 2 /* address is stolen from other device */ - -static inline void eth_hw_addr_random(struct net_device *dev) -{ - random_ether_addr(dev->dev_addr); -} - -#else /* 2.6.36 and on */ -static inline void eth_hw_addr_random(struct net_device *dev) -{ - dev_hw_addr_random(dev, dev->dev_addr); -} -#endif /* (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,31)) */ - -#endif /* (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,31)) */ -#endif /* (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,12)) */ - -#endif /* (LINUX_VERSION_CODE < KERNEL_VERSION(3,4,0)) */ - -#endif /* LINUX_5_4_COMPAT_H */ diff --git a/openairITS/mac/DOT11/include/linux/compat-3.5.h b/openairITS/mac/DOT11/include/linux/compat-3.5.h deleted file mode 100644 index 9c10a42806..0000000000 --- a/openairITS/mac/DOT11/include/linux/compat-3.5.h +++ /dev/null @@ -1,13 +0,0 @@ -#ifndef LINUX_3_5_COMPAT_H -#define LINUX_3_5_COMPAT_H - -#include -#include - -#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0)) - -extern int simple_open(struct inode *inode, struct file *file); - -#endif /* (LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0)) */ - -#endif /* LINUX_3_5_COMPAT_H */ diff --git a/openairITS/mac/DOT11/include/linux/compat_autoconf.h b/openairITS/mac/DOT11/include/linux/compat_autoconf.h deleted file mode 100644 index 8c7263c64b..0000000000 --- a/openairITS/mac/DOT11/include/linux/compat_autoconf.h +++ /dev/null @@ -1,767 +0,0 @@ -#ifndef COMPAT_AUTOCONF_INCLUDED -#define COMPAT_AUTOCONF_INCLUDED -/* - * Automatically generated C config: don't edit - * Wed Jan 8 15:57:07 CET 2014 - * compat-wireless-2.6: compat-wireless-v3.4-rc3-1 - * linux-2.6: v3.4-rc3 - */ -#define COMPAT_RELEASE "compat-wireless-v3.4-rc3-1" -#define COMPAT_KERNEL_RELEASE "v3.4-rc3" -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24)) -#error Compat-wireless requirement: Linux >= 2,6,24 -#endif /* (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24) */ -#ifndef CONFIG_COMPAT_KERNEL_3_3 -#define CONFIG_COMPAT_KERNEL_3_3 1 -#endif /* CONFIG_COMPAT_KERNEL_3_3 */ -#ifndef CONFIG_COMPAT_KERNEL_3_4 -#define CONFIG_COMPAT_KERNEL_3_4 1 -#endif /* CONFIG_COMPAT_KERNEL_3_4 */ -#ifndef CONFIG_COMPAT_KERNEL_3_5 -#define CONFIG_COMPAT_KERNEL_3_5 1 -#endif /* CONFIG_COMPAT_KERNEL_3_5 */ -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24)) -#endif /* CONFIG_COMPAT_KERNEL_2_6_24 */ -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,27)) -#endif /* CONFIG_COMPAT_KERNEL_2_6_27 */ -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,33)) -#if (!defined(RHEL_MAJOR) || RHEL_MAJOR != 6 || RHEL_MINOR < 1) -#if defined(CONFIG_FW_LOADER) || defined(CONFIG_FW_LOADER_MODULE) -#ifndef CONFIG_COMPAT_FIRMWARE_CLASS -#define CONFIG_COMPAT_FIRMWARE_CLASS 1 -#endif /* CONFIG_COMPAT_FIRMWARE_CLASS */ -#endif /* CONFIG_FW_LOADER */ -#endif /* CONFIG_COMPAT_RHEL_6_1 */ -#endif /* CONFIG_COMPAT_KERNEL_2_6_33 */ -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,36)) -#if (!defined(RHEL_MAJOR) || RHEL_MAJOR != 6 || RHEL_MINOR < 1) -#endif /* CONFIG_COMPAT_RHEL_6_1 */ -#endif /* CONFIG_COMPAT_KERNEL_2_6_36 */ -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,33)) -#ifndef CONFIG_COMPAT_BT_SOCK_CREATE_NEEDS_KERN -#define CONFIG_COMPAT_BT_SOCK_CREATE_NEEDS_KERN 1 -#endif /* CONFIG_COMPAT_BT_SOCK_CREATE_NEEDS_KERN */ -#endif /* CONFIG_COMPAT_KERNEL_2_6_33 */ -#if (defined(RHEL_MAJOR) && RHEL_MAJOR == 6 && RHEL_MINOR >= 0) -#ifndef CONFIG_COMPAT_BT_SOCK_CREATE_NEEDS_KERN -#define CONFIG_COMPAT_BT_SOCK_CREATE_NEEDS_KERN 1 -#endif /* CONFIG_COMPAT_BT_SOCK_CREATE_NEEDS_KERN */ -#endif /* CONFIG_COMPAT_RHEL_6_0 */ -#if (defined(RHEL_MAJOR) && RHEL_MAJOR == 6 && RHEL_MINOR >= 0) -#ifndef CONFIG_COMPAT_FIRMWARE_DATA_RW_NEEDS_FILP -#define CONFIG_COMPAT_FIRMWARE_DATA_RW_NEEDS_FILP 1 -#endif /* CONFIG_COMPAT_FIRMWARE_DATA_RW_NEEDS_FILP */ -#endif /* CONFIG_COMPAT_RHEL_6_0 */ -#ifndef CONFIG_MAC80211 -#define CONFIG_MAC80211 1 -#endif /* CONFIG_MAC80211 */ -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,33)) -#ifndef CONFIG_COMPAT_MAC80211_DRIVER_API_TRACER -#define CONFIG_COMPAT_MAC80211_DRIVER_API_TRACER 1 -#endif /* CONFIG_COMPAT_MAC80211_DRIVER_API_TRACER */ -#endif /* CONFIG_COMPAT_KERNEL_2_6_33 */ -#ifndef CONFIG_MAC80211_RC_DEFAULT -#define CONFIG_MAC80211_RC_DEFAULT "minstrel_ht" -#endif /* CONFIG_MAC80211_RC_DEFAULT */ -#ifndef CONFIG_MAC80211_RC_DEFAULT_MINSTREL -#define CONFIG_MAC80211_RC_DEFAULT_MINSTREL 1 -#endif /* CONFIG_MAC80211_RC_DEFAULT_MINSTREL */ -#ifndef CONFIG_COMPAT_MAC80211_RC_DEFAULT -#define CONFIG_COMPAT_MAC80211_RC_DEFAULT "minstrel_ht" -#endif /* CONFIG_COMPAT_MAC80211_RC_DEFAULT */ -#ifndef CONFIG_MAC80211_RC_PID -#define CONFIG_MAC80211_RC_PID 1 -#endif /* CONFIG_MAC80211_RC_PID */ -#ifndef CONFIG_MAC80211_RC_MINSTREL -#define CONFIG_MAC80211_RC_MINSTREL 1 -#endif /* CONFIG_MAC80211_RC_MINSTREL */ -#ifndef CONFIG_MAC80211_RC_MINSTREL_HT -#define CONFIG_MAC80211_RC_MINSTREL_HT 1 -#endif /* CONFIG_MAC80211_RC_MINSTREL_HT */ -#if defined(CONFIG_LEDS_TRIGGERS) || defined(CONFIG_LEDS_TRIGGERS_MODULE) -#ifndef CONFIG_MAC80211_LEDS -#define CONFIG_MAC80211_LEDS 1 -#endif /* CONFIG_MAC80211_LEDS */ -#endif /* CONFIG_LEDS_TRIGGERS */ -#ifndef CONFIG_MAC80211_MESH -#define CONFIG_MAC80211_MESH 1 -#endif /* CONFIG_MAC80211_MESH */ -#ifndef CONFIG_CFG80211 -#define CONFIG_CFG80211 1 -#endif /* CONFIG_CFG80211 */ -#ifndef CONFIG_CFG80211_DEFAULT_PS -#define CONFIG_CFG80211_DEFAULT_PS 1 -#endif /* CONFIG_CFG80211_DEFAULT_PS */ -#ifndef CONFIG_LIB80211 -#define CONFIG_LIB80211 1 -#endif /* CONFIG_LIB80211 */ -#ifndef CONFIG_LIB80211_CRYPT_WEP -#define CONFIG_LIB80211_CRYPT_WEP 1 -#endif /* CONFIG_LIB80211_CRYPT_WEP */ -#ifndef CONFIG_LIB80211_CRYPT_CCMP -#define CONFIG_LIB80211_CRYPT_CCMP 1 -#endif /* CONFIG_LIB80211_CRYPT_CCMP */ -#ifndef CONFIG_LIB80211_CRYPT_TKIP -#define CONFIG_LIB80211_CRYPT_TKIP 1 -#endif /* CONFIG_LIB80211_CRYPT_TKIP */ -#ifndef CONFIG_BT -#define CONFIG_BT 1 -#endif /* CONFIG_BT */ -#ifndef CONFIG_BT_RFCOMM -#define CONFIG_BT_RFCOMM 1 -#endif /* CONFIG_BT_RFCOMM */ -#ifndef CONFIG_BT_RFCOMM_TTY -#define CONFIG_BT_RFCOMM_TTY 1 -#endif /* CONFIG_BT_RFCOMM_TTY */ -#ifndef CONFIG_BT_BNEP -#define CONFIG_BT_BNEP 1 -#endif /* CONFIG_BT_BNEP */ -#ifndef CONFIG_BT_BNEP_MC_FILTER -#define CONFIG_BT_BNEP_MC_FILTER 1 -#endif /* CONFIG_BT_BNEP_MC_FILTER */ -#ifndef CONFIG_BT_BNEP_PROTO_FILTER -#define CONFIG_BT_BNEP_PROTO_FILTER 1 -#endif /* CONFIG_BT_BNEP_PROTO_FILTER */ -#if defined(CONFIG_ISDN_CAPI) || defined(CONFIG_ISDN_CAPI_MODULE) -#ifndef CONFIG_BT_CMTP -#define CONFIG_BT_CMTP 1 -#endif /* CONFIG_BT_CMTP */ -#endif /* CONFIG_ISDN_CAPI */ -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,28)) -#ifndef CONFIG_COMPAT_BT_HIDP -#define CONFIG_COMPAT_BT_HIDP 1 -#endif /* CONFIG_COMPAT_BT_HIDP */ -#endif /* CONFIG_COMPAT_KERNEL_2_6_28 */ -#ifndef CONFIG_BT_HCIUART -#define CONFIG_BT_HCIUART "M" -#endif /* CONFIG_BT_HCIUART */ -#ifndef CONFIG_BT_HCIUART_H4 -#define CONFIG_BT_HCIUART_H4 1 -#endif /* CONFIG_BT_HCIUART_H4 */ -#ifndef CONFIG_BT_HCIUART_BCSP -#define CONFIG_BT_HCIUART_BCSP 1 -#endif /* CONFIG_BT_HCIUART_BCSP */ -#ifndef CONFIG_BT_HCIUART_ATH3K -#define CONFIG_BT_HCIUART_ATH3K 1 -#endif /* CONFIG_BT_HCIUART_ATH3K */ -#ifndef CONFIG_BT_HCIUART_LL -#define CONFIG_BT_HCIUART_LL 1 -#endif /* CONFIG_BT_HCIUART_LL */ -#ifndef CONFIG_BT_HCIVHCI -#define CONFIG_BT_HCIVHCI 1 -#endif /* CONFIG_BT_HCIVHCI */ -#ifndef CONFIG_BT_MRVL -#define CONFIG_BT_MRVL 1 -#endif /* CONFIG_BT_MRVL */ -#if defined(CONFIG_PCMCIA) || defined(CONFIG_PCMCIA_MODULE) -#ifndef CONFIG_BT_HCIDTL1 -#define CONFIG_BT_HCIDTL1 1 -#endif /* CONFIG_BT_HCIDTL1 */ -#ifndef CONFIG_BT_HCIBT3C -#define CONFIG_BT_HCIBT3C 1 -#endif /* CONFIG_BT_HCIBT3C */ -#ifndef CONFIG_BT_HCIBLUECARD -#define CONFIG_BT_HCIBLUECARD 1 -#endif /* CONFIG_BT_HCIBLUECARD */ -#ifndef CONFIG_BT_HCIBTUART -#define CONFIG_BT_HCIBTUART 1 -#endif /* CONFIG_BT_HCIBTUART */ -#endif /* CONFIG_PCMCIA */ -#if defined(CONFIG_WIRELESS_EXT) || defined(CONFIG_WIRELESS_EXT_MODULE) -#ifndef CONFIG_CFG80211_WEXT -#define CONFIG_CFG80211_WEXT 1 -#endif /* CONFIG_CFG80211_WEXT */ -#else /* CONFIG_CFG80211_WEXT */ -#endif /* CONFIG_WIRELESS_EXT */ -#if defined(CONFIG_STAGING) || defined(CONFIG_STAGING_MODULE) -#ifndef CONFIG_COMPAT_STAGING -#define CONFIG_COMPAT_STAGING 1 -#endif /* CONFIG_COMPAT_STAGING */ -#endif /* CONFIG_STAGING */ -#ifndef CONFIG_MAC80211_HWSIM -#define CONFIG_MAC80211_HWSIM 1 -#endif /* CONFIG_MAC80211_HWSIM */ -#ifndef CONFIG_ATH5K -#define CONFIG_ATH5K 1 -#endif /* CONFIG_ATH5K */ -#ifndef CONFIG_ATH9K -#define CONFIG_ATH9K 1 -#endif /* CONFIG_ATH9K */ -#ifndef CONFIG_ATH9K_HW -#define CONFIG_ATH9K_HW 1 -#endif /* CONFIG_ATH9K_HW */ -#ifndef CONFIG_ATH9K_COMMON -#define CONFIG_ATH9K_COMMON 1 -#endif /* CONFIG_ATH9K_COMMON */ -#ifndef CONFIG_COMPAT_ATH9K_RATE_CONTROL -#define CONFIG_COMPAT_ATH9K_RATE_CONTROL 1 -#endif /* CONFIG_COMPAT_ATH9K_RATE_CONTROL */ -#ifndef CONFIG_ATH9K_BTCOEX_SUPPORT -#define CONFIG_ATH9K_BTCOEX_SUPPORT 1 -#endif /* CONFIG_ATH9K_BTCOEX_SUPPORT */ -#if defined(CONFIG_PCI) || defined(CONFIG_PCI_MODULE) -#ifndef CONFIG_ATH5K_PCI -#define CONFIG_ATH5K_PCI 1 -#endif /* CONFIG_ATH5K_PCI */ -#ifndef CONFIG_ATH9K_PCI -#define CONFIG_ATH9K_PCI 1 -#endif /* CONFIG_ATH9K_PCI */ -#ifndef CONFIG_IWLWIFI -#define CONFIG_IWLWIFI 1 -#endif /* CONFIG_IWLWIFI */ -#ifndef CONFIG_IWLWIFI_P2P -#define CONFIG_IWLWIFI_P2P 1 -#endif /* CONFIG_IWLWIFI_P2P */ -#ifndef CONFIG_IWLEGACY -#define CONFIG_IWLEGACY 1 -#endif /* CONFIG_IWLEGACY */ -#ifndef CONFIG_COMPAT_IWL4965 -#define CONFIG_COMPAT_IWL4965 1 -#endif /* CONFIG_COMPAT_IWL4965 */ -#ifndef CONFIG_IWL3945 -#define CONFIG_IWL3945 1 -#endif /* CONFIG_IWL3945 */ -#ifndef CONFIG_B43 -#define CONFIG_B43 1 -#endif /* CONFIG_B43 */ -#ifndef CONFIG_B43_HWRNG -#define CONFIG_B43_HWRNG 1 -#endif /* CONFIG_B43_HWRNG */ -#ifndef CONFIG_B43_PCI_AUTOSELECT -#define CONFIG_B43_PCI_AUTOSELECT 1 -#endif /* CONFIG_B43_PCI_AUTOSELECT */ -#if defined(CONFIG_PCMCIA) || defined(CONFIG_PCMCIA_MODULE) -#ifndef CONFIG_B43_PCMCIA -#define CONFIG_B43_PCMCIA 1 -#endif /* CONFIG_B43_PCMCIA */ -#endif /* CONFIG_PCMCIA */ -#if defined(CONFIG_MAC80211_LEDS) || defined(CONFIG_MAC80211_LEDS_MODULE) -#ifndef CONFIG_B43_LEDS -#define CONFIG_B43_LEDS 1 -#endif /* CONFIG_B43_LEDS */ -#endif /* CONFIG_MAC80211_LEDS */ -#ifndef CONFIG_B43_PHY_LP -#define CONFIG_B43_PHY_LP 1 -#endif /* CONFIG_B43_PHY_LP */ -#ifndef CONFIG_B43_PHY_N -#define CONFIG_B43_PHY_N 1 -#endif /* CONFIG_B43_PHY_N */ -#ifndef CONFIG_B43_PHY_HT -#define CONFIG_B43_PHY_HT 1 -#endif /* CONFIG_B43_PHY_HT */ -#ifndef CONFIG_B43LEGACY -#define CONFIG_B43LEGACY 1 -#endif /* CONFIG_B43LEGACY */ -#ifndef CONFIG_B43LEGACY_HWRNG -#define CONFIG_B43LEGACY_HWRNG 1 -#endif /* CONFIG_B43LEGACY_HWRNG */ -#ifndef CONFIG_B43LEGACY_PCI_AUTOSELECT -#define CONFIG_B43LEGACY_PCI_AUTOSELECT 1 -#endif /* CONFIG_B43LEGACY_PCI_AUTOSELECT */ -#if defined(CONFIG_MAC80211_LEDS) || defined(CONFIG_MAC80211_LEDS_MODULE) -#ifndef CONFIG_B43LEGACY_LEDS -#define CONFIG_B43LEGACY_LEDS 1 -#endif /* CONFIG_B43LEGACY_LEDS */ -#endif /* CONFIG_MAC80211_LEDS */ -#ifndef CONFIG_B43LEGACY_DMA -#define CONFIG_B43LEGACY_DMA 1 -#endif /* CONFIG_B43LEGACY_DMA */ -#ifndef CONFIG_B43LEGACY_PIO -#define CONFIG_B43LEGACY_PIO 1 -#endif /* CONFIG_B43LEGACY_PIO */ -#if defined(CONFIG_WIRELESS_EXT) || defined(CONFIG_WIRELESS_EXT_MODULE) -#ifndef CONFIG_LIBIPW -#define CONFIG_LIBIPW 1 -#endif /* CONFIG_LIBIPW */ -#ifndef CONFIG_IPW2100 -#define CONFIG_IPW2100 1 -#endif /* CONFIG_IPW2100 */ -#ifndef CONFIG_IPW2100_MONITOR -#define CONFIG_IPW2100_MONITOR 1 -#endif /* CONFIG_IPW2100_MONITOR */ -#ifndef CONFIG_IPW2200 -#define CONFIG_IPW2200 1 -#endif /* CONFIG_IPW2200 */ -#ifndef CONFIG_IPW2200_MONITOR -#define CONFIG_IPW2200_MONITOR 1 -#endif /* CONFIG_IPW2200_MONITOR */ -#ifndef CONFIG_IPW2200_RADIOTAP -#define CONFIG_IPW2200_RADIOTAP 1 -#endif /* CONFIG_IPW2200_RADIOTAP */ -#ifndef CONFIG_IPW2200_PROMISCUOUS -#define CONFIG_IPW2200_PROMISCUOUS 1 -#endif /* CONFIG_IPW2200_PROMISCUOUS */ -#ifndef CONFIG_IPW2200_QOS -#define CONFIG_IPW2200_QOS 1 -#endif /* CONFIG_IPW2200_QOS */ -#endif /* CONFIG_WIRELESS_EXT */ -#if defined(CONFIG_SSB) || defined(CONFIG_SSB_MODULE) -#ifndef CONFIG_SSB_SPROM -#define CONFIG_SSB_SPROM 1 -#endif /* CONFIG_SSB_SPROM */ -#ifndef CONFIG_SSB_BLOCKIO -#define CONFIG_SSB_BLOCKIO 1 -#endif /* CONFIG_SSB_BLOCKIO */ -#ifndef CONFIG_SSB_PCIHOST -#define CONFIG_SSB_PCIHOST 1 -#endif /* CONFIG_SSB_PCIHOST */ -#ifndef CONFIG_SSB_B43_PCI_BRIDGE -#define CONFIG_SSB_B43_PCI_BRIDGE 1 -#endif /* CONFIG_SSB_B43_PCI_BRIDGE */ -#if defined(CONFIG_PCMCIA) || defined(CONFIG_PCMCIA_MODULE) -#ifndef CONFIG_SSB_PCMCIAHOST -#define CONFIG_SSB_PCMCIAHOST 1 -#endif /* CONFIG_SSB_PCMCIAHOST */ -#endif /* CONFIG_PCMCIA */ -#ifndef CONFIG_SSB_DRIVER_PCICORE -#define CONFIG_SSB_DRIVER_PCICORE 1 -#endif /* CONFIG_SSB_DRIVER_PCICORE */ -#ifndef CONFIG_B43_SSB -#define CONFIG_B43_SSB 1 -#endif /* CONFIG_B43_SSB */ -#endif /* CONFIG_SSB */ -#ifndef CONFIG_BCMA -#define CONFIG_BCMA 1 -#endif /* CONFIG_BCMA */ -#ifndef CONFIG_BCMA_BLOCKIO -#define CONFIG_BCMA_BLOCKIO 1 -#endif /* CONFIG_BCMA_BLOCKIO */ -#ifndef CONFIG_BCMA_HOST_PCI -#define CONFIG_BCMA_HOST_PCI 1 -#endif /* CONFIG_BCMA_HOST_PCI */ -#ifndef CONFIG_B43_BCMA -#define CONFIG_B43_BCMA 1 -#endif /* CONFIG_B43_BCMA */ -#ifndef CONFIG_B43_BCMA_EXTRA -#define CONFIG_B43_BCMA_EXTRA 1 -#endif /* CONFIG_B43_BCMA_EXTRA */ -#ifndef CONFIG_P54_PCI -#define CONFIG_P54_PCI 1 -#endif /* CONFIG_P54_PCI */ -#ifndef CONFIG_B44 -#define CONFIG_B44 1 -#endif /* CONFIG_B44 */ -#ifndef CONFIG_B44_PCI -#define CONFIG_B44_PCI 1 -#endif /* CONFIG_B44_PCI */ -#ifndef CONFIG_RTL8180 -#define CONFIG_RTL8180 1 -#endif /* CONFIG_RTL8180 */ -#ifndef CONFIG_ADM8211 -#define CONFIG_ADM8211 1 -#endif /* CONFIG_ADM8211 */ -#ifndef CONFIG_RT2X00_LIB_PCI -#define CONFIG_RT2X00_LIB_PCI 1 -#endif /* CONFIG_RT2X00_LIB_PCI */ -#ifndef CONFIG_RT2400PCI -#define CONFIG_RT2400PCI 1 -#endif /* CONFIG_RT2400PCI */ -#ifndef CONFIG_RT2500PCI -#define CONFIG_RT2500PCI 1 -#endif /* CONFIG_RT2500PCI */ -#if defined(CONFIG_CRC_CCITT) || defined(CONFIG_CRC_CCITT_MODULE) -#ifndef CONFIG_RT2800PCI -#define CONFIG_RT2800PCI 1 -#endif /* CONFIG_RT2800PCI */ -#ifndef CONFIG_RT2800PCI_RT33XX -#define CONFIG_RT2800PCI_RT33XX 1 -#endif /* CONFIG_RT2800PCI_RT33XX */ -#ifndef CONFIG_RT2800PCI_RT35XX -#define CONFIG_RT2800PCI_RT35XX 1 -#endif /* CONFIG_RT2800PCI_RT35XX */ -#ifndef CONFIG_RT2800PCI_RT53XX -#define CONFIG_RT2800PCI_RT53XX 1 -#endif /* CONFIG_RT2800PCI_RT53XX */ -#endif /* CONFIG_CRC_CCITT */ -#if defined(CONFIG_CRC_ITU_T) || defined(CONFIG_CRC_ITU_T_MODULE) -#ifndef CONFIG_RT61PCI -#define CONFIG_RT61PCI 1 -#endif /* CONFIG_RT61PCI */ -#endif /* CONFIG_CRC_ITU_T */ -#ifndef CONFIG_MWL8K -#define CONFIG_MWL8K 1 -#endif /* CONFIG_MWL8K */ -#ifndef CONFIG_ATL1 -#define CONFIG_ATL1 1 -#endif /* CONFIG_ATL1 */ -#ifndef CONFIG_ATL2 -#define CONFIG_ATL2 1 -#endif /* CONFIG_ATL2 */ -#ifndef CONFIG_ATL1E -#define CONFIG_ATL1E 1 -#endif /* CONFIG_ATL1E */ -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,27)) -#undef CONFIG_ATL1C -#ifndef CONFIG_ALX -#define CONFIG_ALX 1 -#endif /* CONFIG_ALX */ -#else /* CONFIG_COMPAT_KERNEL_2_6_27 */ -#undef CONFIG_ATL1C -#ifndef CONFIG_ALX -#define CONFIG_ALX 1 -#endif /* CONFIG_ALX */ -#endif /* CONFIG_COMPAT_KERNEL_2_6_27 */ -#if defined(CONFIG_WIRELESS_EXT) || defined(CONFIG_WIRELESS_EXT_MODULE) -#ifndef CONFIG_HERMES -#define CONFIG_HERMES 1 -#endif /* CONFIG_HERMES */ -#ifndef CONFIG_HERMES_CACHE_FW_ON_INIT -#define CONFIG_HERMES_CACHE_FW_ON_INIT 1 -#endif /* CONFIG_HERMES_CACHE_FW_ON_INIT */ -#if defined(CONFIG_PPC_PMAC) || defined(CONFIG_PPC_PMAC_MODULE) -#ifndef CONFIG_APPLE_AIRPORT -#define CONFIG_APPLE_AIRPORT 1 -#endif /* CONFIG_APPLE_AIRPORT */ -#endif /* CONFIG_PPC_PMAC */ -#ifndef CONFIG_PLX_HERMES -#define CONFIG_PLX_HERMES 1 -#endif /* CONFIG_PLX_HERMES */ -#ifndef CONFIG_TMD_HERMES -#define CONFIG_TMD_HERMES 1 -#endif /* CONFIG_TMD_HERMES */ -#ifndef CONFIG_NORTEL_HERMES -#define CONFIG_NORTEL_HERMES 1 -#endif /* CONFIG_NORTEL_HERMES */ -#ifndef CONFIG_PCI_HERMES -#define CONFIG_PCI_HERMES 1 -#endif /* CONFIG_PCI_HERMES */ -#if defined(CONFIG_PCMCIA) || defined(CONFIG_PCMCIA_MODULE) -#ifndef CONFIG_PCMCIA_HERMES -#define CONFIG_PCMCIA_HERMES 1 -#endif /* CONFIG_PCMCIA_HERMES */ -#ifndef CONFIG_PCMCIA_SPECTRUM -#define CONFIG_PCMCIA_SPECTRUM 1 -#endif /* CONFIG_PCMCIA_SPECTRUM */ -#endif /* CONFIG_PCMCIA */ -#endif /* CONFIG_WIRELESS_EXT */ -#ifndef CONFIG_RTL8192CE -#define CONFIG_RTL8192CE 1 -#endif /* CONFIG_RTL8192CE */ -#ifndef CONFIG_RTL8192SE -#define CONFIG_RTL8192SE 1 -#endif /* CONFIG_RTL8192SE */ -#ifndef CONFIG_RTL8192DE -#define CONFIG_RTL8192DE 1 -#endif /* CONFIG_RTL8192DE */ -#ifndef CONFIG_BRCMSMAC -#define CONFIG_BRCMSMAC 1 -#endif /* CONFIG_BRCMSMAC */ -#ifndef CONFIG_MWIFIEX_PCIE -#define CONFIG_MWIFIEX_PCIE 1 -#endif /* CONFIG_MWIFIEX_PCIE */ -#endif /* CONFIG_PCI */ -#if defined(CONFIG_PCMCIA) || defined(CONFIG_PCMCIA_MODULE) -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,27)) -#undef CONFIG_LIBERTAS -#undef CONFIG_LIBERTAS_CS -#else /* CONFIG_COMPAT_KERNEL_2_6_27 */ -#ifndef CONFIG_LIBERTAS_CS -#define CONFIG_LIBERTAS_CS 1 -#endif /* CONFIG_LIBERTAS_CS */ -#endif /* CONFIG_COMPAT_KERNEL_2_6_27 */ -#endif /* CONFIG_PCMCIA */ -#ifndef CONFIG_EEPROM_93CX6 -#define CONFIG_EEPROM_93CX6 1 -#endif /* CONFIG_EEPROM_93CX6 */ -#if defined(CONFIG_USB) || defined(CONFIG_USB_MODULE) -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,29)) -#ifndef CONFIG_COMPAT_ZD1211RW -#define CONFIG_COMPAT_ZD1211RW 1 -#endif /* CONFIG_COMPAT_ZD1211RW */ -#endif /* CONFIG_COMPAT_KERNEL_2_6_29 */ -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,29)) -#undef CONFIG_USB_COMPAT_USBNET -#undef CONFIG_USB_NET_COMPAT_RNDIS_HOST -#undef CONFIG_USB_NET_COMPAT_RNDIS_WLAN -#undef CONFIG_USB_NET_COMPAT_CDCETHER -#else /* CONFIG_COMPAT_KERNEL_2_6_29 */ -#ifndef CONFIG_USB_COMPAT_USBNET -#define CONFIG_USB_COMPAT_USBNET 1 -#endif /* CONFIG_USB_COMPAT_USBNET */ -#if defined(CONFIG_USB_NET_CDCETHER) || defined(CONFIG_USB_NET_CDCETHER_MODULE) -#ifndef CONFIG_USB_NET_COMPAT_RNDIS_HOST -#define CONFIG_USB_NET_COMPAT_RNDIS_HOST 1 -#endif /* CONFIG_USB_NET_COMPAT_RNDIS_HOST */ -#ifndef CONFIG_USB_NET_COMPAT_RNDIS_WLAN -#define CONFIG_USB_NET_COMPAT_RNDIS_WLAN 1 -#endif /* CONFIG_USB_NET_COMPAT_RNDIS_WLAN */ -#endif /* CONFIG_USB_NET_CDCETHER */ -#if defined(CONFIG_USB_NET_CDCETHER_MODULE) || defined(CONFIG_USB_NET_CDCETHER_MODULE_MODULE) -#ifndef CONFIG_USB_NET_COMPAT_RNDIS_HOST -#define CONFIG_USB_NET_COMPAT_RNDIS_HOST 1 -#endif /* CONFIG_USB_NET_COMPAT_RNDIS_HOST */ -#ifndef CONFIG_USB_NET_COMPAT_RNDIS_WLAN -#define CONFIG_USB_NET_COMPAT_RNDIS_WLAN 1 -#endif /* CONFIG_USB_NET_COMPAT_RNDIS_WLAN */ -#endif /* CONFIG_USB_NET_CDCETHER */ -#ifndef CONFIG_USB_NET_COMPAT_CDCETHER -#define CONFIG_USB_NET_COMPAT_CDCETHER 1 -#endif /* CONFIG_USB_NET_COMPAT_CDCETHER */ -#endif /* CONFIG_COMPAT_KERNEL_2_6_29 */ -#ifndef CONFIG_P54_USB -#define CONFIG_P54_USB 1 -#endif /* CONFIG_P54_USB */ -#ifndef CONFIG_RTL8187 -#define CONFIG_RTL8187 1 -#endif /* CONFIG_RTL8187 */ -#if defined(CONFIG_MAC80211_LEDS) || defined(CONFIG_MAC80211_LEDS_MODULE) -#ifndef CONFIG_RTL8187_LEDS -#define CONFIG_RTL8187_LEDS 1 -#endif /* CONFIG_RTL8187_LEDS */ -#endif /* CONFIG_MAC80211_LEDS */ -#ifndef CONFIG_AT76C50X_USB -#define CONFIG_AT76C50X_USB 1 -#endif /* CONFIG_AT76C50X_USB */ -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,29)) -#ifndef CONFIG_CARL9170 -#define CONFIG_CARL9170 1 -#endif /* CONFIG_CARL9170 */ -#if defined(CONFIG_MAC80211_LEDS) || defined(CONFIG_MAC80211_LEDS_MODULE) -#ifndef CONFIG_CARL9170_LEDS -#define CONFIG_CARL9170_LEDS 1 -#endif /* CONFIG_CARL9170_LEDS */ -#endif /* CONFIG_MAC80211_LEDS */ -#ifndef CONFIG_CARL9170_WPC -#define CONFIG_CARL9170_WPC 1 -#endif /* CONFIG_CARL9170_WPC */ -#endif /* CONFIG_COMPAT_KERNEL_2_6_29 */ -#ifndef CONFIG_COMPAT_USB_URB_THREAD_FIX -#define CONFIG_COMPAT_USB_URB_THREAD_FIX 1 -#endif /* CONFIG_COMPAT_USB_URB_THREAD_FIX */ -#ifndef CONFIG_ATH9K_HTC -#define CONFIG_ATH9K_HTC 1 -#endif /* CONFIG_ATH9K_HTC */ -#ifndef CONFIG_RT2500USB -#define CONFIG_RT2500USB 1 -#endif /* CONFIG_RT2500USB */ -#if defined(CONFIG_CRC_CCITT) || defined(CONFIG_CRC_CCITT_MODULE) -#ifndef CONFIG_RT2800USB -#define CONFIG_RT2800USB 1 -#endif /* CONFIG_RT2800USB */ -#ifndef CONFIG_RT2800USB_RT33XX -#define CONFIG_RT2800USB_RT33XX 1 -#endif /* CONFIG_RT2800USB_RT33XX */ -#ifndef CONFIG_RT2800USB_RT35XX -#define CONFIG_RT2800USB_RT35XX 1 -#endif /* CONFIG_RT2800USB_RT35XX */ -#ifndef CONFIG_RT2800USB_RT53XX -#define CONFIG_RT2800USB_RT53XX 1 -#endif /* CONFIG_RT2800USB_RT53XX */ -#ifndef CONFIG_RT2800USB_UNKNOWN -#define CONFIG_RT2800USB_UNKNOWN 1 -#endif /* CONFIG_RT2800USB_UNKNOWN */ -#endif /* CONFIG_CRC_CCITT */ -#ifndef CONFIG_RT2X00_LIB_USB -#define CONFIG_RT2X00_LIB_USB 1 -#endif /* CONFIG_RT2X00_LIB_USB */ -#if defined(CONFIG_CRC_ITU_T) || defined(CONFIG_CRC_ITU_T_MODULE) -#ifndef CONFIG_RT73USB -#define CONFIG_RT73USB 1 -#endif /* CONFIG_RT73USB */ -#endif /* CONFIG_CRC_ITU_T */ -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,27)) -#undef CONFIG_LIBERTAS_THINFIRM_USB -#undef CONFIG_LIBERTAS_USB -#else /* CONFIG_COMPAT_KERNEL_2_6_27 */ -#ifndef CONFIG_LIBERTAS_THINFIRM_USB -#define CONFIG_LIBERTAS_THINFIRM_USB 1 -#endif /* CONFIG_LIBERTAS_THINFIRM_USB */ -#ifndef CONFIG_LIBERTAS_USB -#define CONFIG_LIBERTAS_USB 1 -#endif /* CONFIG_LIBERTAS_USB */ -#endif /* CONFIG_COMPAT_KERNEL_2_6_27 */ -#ifndef CONFIG_ORINOCO_USB -#define CONFIG_ORINOCO_USB 1 -#endif /* CONFIG_ORINOCO_USB */ -#ifndef CONFIG_BT_HCIBTUSB -#define CONFIG_BT_HCIBTUSB 1 -#endif /* CONFIG_BT_HCIBTUSB */ -#ifndef CONFIG_BT_HCIBCM203X -#define CONFIG_BT_HCIBCM203X 1 -#endif /* CONFIG_BT_HCIBCM203X */ -#ifndef CONFIG_BT_HCIBPA10X -#define CONFIG_BT_HCIBPA10X 1 -#endif /* CONFIG_BT_HCIBPA10X */ -#ifndef CONFIG_BT_HCIBFUSB -#define CONFIG_BT_HCIBFUSB 1 -#endif /* CONFIG_BT_HCIBFUSB */ -#ifndef CONFIG_BT_ATH3K -#define CONFIG_BT_ATH3K 1 -#endif /* CONFIG_BT_ATH3K */ -#ifndef CONFIG_RTL8192CU -#define CONFIG_RTL8192CU 1 -#endif /* CONFIG_RTL8192CU */ -#endif /* CONFIG_USB */ -#if defined(CONFIG_SPI_MASTER) || defined(CONFIG_SPI_MASTER_MODULE) -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,25)) -#if defined(CONFIG_CRC7) || defined(CONFIG_CRC7_MODULE) -#ifndef CONFIG_WL1251_SPI -#define CONFIG_WL1251_SPI 1 -#endif /* CONFIG_WL1251_SPI */ -#ifndef CONFIG_WL12XX_SPI -#define CONFIG_WL12XX_SPI 1 -#endif /* CONFIG_WL12XX_SPI */ -#endif /* CONFIG_CRC7 */ -#ifndef CONFIG_P54_SPI -#define CONFIG_P54_SPI 1 -#endif /* CONFIG_P54_SPI */ -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,27)) -#undef CONFIG_LIBERTAS_SPI -#else /* CONFIG_COMPAT_KERNEL_2_6_27 */ -#ifndef CONFIG_LIBERTAS_SPI -#define CONFIG_LIBERTAS_SPI 1 -#endif /* CONFIG_LIBERTAS_SPI */ -#endif /* CONFIG_COMPAT_KERNEL_2_6_27 */ -#endif /* CONFIG_COMPAT_KERNEL_2_6_25 */ -#endif /* CONFIG_SPI_MASTER */ -#if defined(CONFIG_MMC) || defined(CONFIG_MMC_MODULE) -#ifndef CONFIG_SSB_SDIOHOST -#define CONFIG_SSB_SDIOHOST 1 -#endif /* CONFIG_SSB_SDIOHOST */ -#ifndef CONFIG_B43_SDIO -#define CONFIG_B43_SDIO 1 -#endif /* CONFIG_B43_SDIO */ -#if defined(CONFIG_CRC7) || defined(CONFIG_CRC7_MODULE) -#if defined(CONFIG_WL12XX_PLATFORM_DATA) || defined(CONFIG_WL12XX_PLATFORM_DATA_MODULE) -#ifndef CONFIG_COMPAT_WL1251_SDIO -#define CONFIG_COMPAT_WL1251_SDIO 1 -#endif /* CONFIG_COMPAT_WL1251_SDIO */ -#endif /* CONFIG_WL12XX_PLATFORM_DATA */ -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,32)) -#if defined(CONFIG_WL12XX_PLATFORM_DATA) || defined(CONFIG_WL12XX_PLATFORM_DATA_MODULE) -#ifndef CONFIG_COMPAT_WL12XX_SDIO -#define CONFIG_COMPAT_WL12XX_SDIO 1 -#endif /* CONFIG_COMPAT_WL12XX_SDIO */ -#endif /* CONFIG_WL12XX_PLATFORM_DATA */ -#endif /* CONFIG_COMPAT_KERNEL_2_6_32 */ -#endif /* CONFIG_CRC7 */ -#ifndef CONFIG_MWIFIEX_SDIO -#define CONFIG_MWIFIEX_SDIO 1 -#endif /* CONFIG_MWIFIEX_SDIO */ -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,32)) -#ifndef CONFIG_COMPAT_LIBERTAS_SDIO -#define CONFIG_COMPAT_LIBERTAS_SDIO 1 -#endif /* CONFIG_COMPAT_LIBERTAS_SDIO */ -#endif /* CONFIG_COMPAT_KERNEL_2_6_32 */ -#ifndef CONFIG_IWM -#define CONFIG_IWM 1 -#endif /* CONFIG_IWM */ -#ifndef CONFIG_BT_HCIBTSDIO -#define CONFIG_BT_HCIBTSDIO 1 -#endif /* CONFIG_BT_HCIBTSDIO */ -#ifndef CONFIG_BT_MRVL_SDIO -#define CONFIG_BT_MRVL_SDIO 1 -#endif /* CONFIG_BT_MRVL_SDIO */ -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,27)) -#ifndef CONFIG_ATH6KL -#define CONFIG_ATH6KL 1 -#endif /* CONFIG_ATH6KL */ -#endif /* CONFIG_COMPAT_KERNEL_2_6_27 */ -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,29)) -#ifndef CONFIG_BRCMFMAC -#define CONFIG_BRCMFMAC 1 -#endif /* CONFIG_BRCMFMAC */ -#ifndef CONFIG_BRCMFMAC_SDIO -#define CONFIG_BRCMFMAC_SDIO 1 -#endif /* CONFIG_BRCMFMAC_SDIO */ -#endif /* CONFIG_COMPAT_KERNEL_2_6_29 */ -#endif /* CONFIG_MMC */ -#ifndef CONFIG_RTLWIFI -#define CONFIG_RTLWIFI 1 -#endif /* CONFIG_RTLWIFI */ -#ifndef CONFIG_RTL8192C_COMMON -#define CONFIG_RTL8192C_COMMON 1 -#endif /* CONFIG_RTL8192C_COMMON */ -#ifndef CONFIG_RT2X00 -#define CONFIG_RT2X00 1 -#endif /* CONFIG_RT2X00 */ -#ifndef CONFIG_RT2X00_LIB -#define CONFIG_RT2X00_LIB 1 -#endif /* CONFIG_RT2X00_LIB */ -#ifndef CONFIG_RT2800_LIB -#define CONFIG_RT2800_LIB 1 -#endif /* CONFIG_RT2800_LIB */ -#ifndef CONFIG_RT2X00_LIB_FIRMWARE -#define CONFIG_RT2X00_LIB_FIRMWARE 1 -#endif /* CONFIG_RT2X00_LIB_FIRMWARE */ -#ifndef CONFIG_RT2X00_LIB_CRYPTO -#define CONFIG_RT2X00_LIB_CRYPTO 1 -#endif /* CONFIG_RT2X00_LIB_CRYPTO */ -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,25)) -#undef CONFIG_RT2X00_LIB_LEDS -#else /* CONFIG_COMPAT_KERNEL_2_6_25 */ -#if defined(CONFIG_LEDS_CLASS) || defined(CONFIG_LEDS_CLASS_MODULE) -#ifndef CONFIG_RT2X00_LIB_LEDS -#define CONFIG_RT2X00_LIB_LEDS 1 -#endif /* CONFIG_RT2X00_LIB_LEDS */ -#endif /* CONFIG_LEDS_CLASS */ -#endif /* CONFIG_COMPAT_KERNEL_2_6_25 */ -#ifndef CONFIG_P54_COMMON -#define CONFIG_P54_COMMON 1 -#endif /* CONFIG_P54_COMMON */ -#if defined(CONFIG_MAC80211_LEDS) || defined(CONFIG_MAC80211_LEDS_MODULE) -#ifndef CONFIG_P54_LEDS -#define CONFIG_P54_LEDS 1 -#endif /* CONFIG_P54_LEDS */ -#endif /* CONFIG_MAC80211_LEDS */ -#ifndef CONFIG_ATH_COMMON -#define CONFIG_ATH_COMMON 1 -#endif /* CONFIG_ATH_COMMON */ -#ifndef CONFIG_BRCMUTIL -#define CONFIG_BRCMUTIL 1 -#endif /* CONFIG_BRCMUTIL */ -#if defined(CONFIG_CRC7) || defined(CONFIG_CRC7_MODULE) -#ifndef CONFIG_WL1251 -#define CONFIG_WL1251 1 -#endif /* CONFIG_WL1251 */ -#ifndef CONFIG_WL12XX -#define CONFIG_WL12XX 1 -#endif /* CONFIG_WL12XX */ -#endif /* CONFIG_CRC7 */ -#ifndef CONFIG_MWIFIEX -#define CONFIG_MWIFIEX 1 -#endif /* CONFIG_MWIFIEX */ -#if !defined(CONFIG_CORDIC) && !defined(CONFIG_CORDIC_MODULE) -#ifndef CONFIG_COMPAT_CORDIC -#define CONFIG_COMPAT_CORDIC 1 -#endif /* CONFIG_COMPAT_CORDIC */ -#endif /* CONFIG_CORDIC */ -#if !defined(CONFIG_CRC8) && !defined(CONFIG_CRC8_MODULE) -#ifndef CONFIG_COMPAT_CRC8 -#define CONFIG_COMPAT_CRC8 1 -#endif /* CONFIG_COMPAT_CRC8 */ -#endif /* CONFIG_CRC8 */ -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,27)) -#undef CONFIG_LIBERTAS -#else /* CONFIG_COMPAT_KERNEL_2_6_27 */ -#ifndef CONFIG_LIBERTAS_THINFIRM -#define CONFIG_LIBERTAS_THINFIRM 1 -#endif /* CONFIG_LIBERTAS_THINFIRM */ -#ifndef CONFIG_LIBERTAS -#define CONFIG_LIBERTAS 1 -#endif /* CONFIG_LIBERTAS */ -#ifndef CONFIG_LIBERTAS_MESH -#define CONFIG_LIBERTAS_MESH 1 -#endif /* CONFIG_LIBERTAS_MESH */ -#endif /* CONFIG_COMPAT_KERNEL_2_6_27 */ -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,31)) -#ifndef CONFIG_RFKILL_BACKPORT -#define CONFIG_RFKILL_BACKPORT 1 -#endif /* CONFIG_RFKILL_BACKPORT */ -#if defined(CONFIG_LEDS_TRIGGERS) || defined(CONFIG_LEDS_TRIGGERS_MODULE) -#ifndef CONFIG_RFKILL_BACKPORT_LEDS -#define CONFIG_RFKILL_BACKPORT_LEDS 1 -#endif /* CONFIG_RFKILL_BACKPORT_LEDS */ -#endif /* CONFIG_LEDS_TRIGGERS */ -#ifndef CONFIG_RFKILL_BACKPORT_INPUT -#define CONFIG_RFKILL_BACKPORT_INPUT 1 -#endif /* CONFIG_RFKILL_BACKPORT_INPUT */ -#endif /* CONFIG_COMPAT_KERNEL_2_6_31 */ -#ifdef CONFIG_NET_SCHED -#ifdef CONFIG_NETDEVICES_MULTIQUEUE -#ifndef CONFIG_MAC80211_QOS -#define CONFIG_MAC80211_QOS 1 -#endif /* CONFIG_MAC80211_QOS */ -#endif -#endif -#endif /* COMPAT_AUTOCONF_INCLUDED */ diff --git a/openairITS/mac/DOT11/include/linux/cordic.h b/openairITS/mac/DOT11/include/linux/cordic.h deleted file mode 100644 index f932093e20..0000000000 --- a/openairITS/mac/DOT11/include/linux/cordic.h +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright (c) 2011 Broadcom Corporation - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ -#ifndef __CORDIC_H_ -#define __CORDIC_H_ - -#include - -/** - * struct cordic_iq - i/q coordinate. - * - * @i: real part of coordinate (in phase). - * @q: imaginary part of coordinate (quadrature). - */ -struct cordic_iq { - s32 i; - s32 q; -}; - -/** - * cordic_calc_iq() - calculates the i/q coordinate for given angle. - * - * @theta: angle in degrees for which i/q coordinate is to be calculated. - * @coord: function output parameter holding the i/q coordinate. - * - * The function calculates the i/q coordinate for a given angle using - * cordic algorithm. The coordinate consists of a real (i) and an - * imaginary (q) part. The real part is essentially the cosine of the - * angle and the imaginary part is the sine of the angle. The returned - * values are scaled by 2^16 for precision. The range for theta is - * for -180 degrees to +180 degrees. Passed values outside this range are - * converted before doing the actual calculation. - */ -struct cordic_iq cordic_calc_iq(s32 theta); - -#endif /* __CORDIC_H_ */ diff --git a/openairITS/mac/DOT11/include/linux/crc8.h b/openairITS/mac/DOT11/include/linux/crc8.h deleted file mode 100644 index 13c8dabb04..0000000000 --- a/openairITS/mac/DOT11/include/linux/crc8.h +++ /dev/null @@ -1,101 +0,0 @@ -/* - * Copyright (c) 2011 Broadcom Corporation - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ -#ifndef __CRC8_H_ -#define __CRC8_H_ - -#include - -/* see usage of this value in crc8() description */ -#define CRC8_INIT_VALUE 0xFF - -/* - * Return value of crc8() indicating valid message+crc. This is true - * if a CRC is inverted before transmission. The CRC computed over the - * whole received bitstream is _table[x], where x is the bit pattern - * of the modification (almost always 0xff). - */ -#define CRC8_GOOD_VALUE(_table) (_table[0xFF]) - -/* required table size for crc8 algorithm */ -#define CRC8_TABLE_SIZE 256 - -/* helper macro assuring right table size is used */ -#define DECLARE_CRC8_TABLE(_table) \ - static u8 _table[CRC8_TABLE_SIZE] - -/** - * crc8_populate_lsb - fill crc table for given polynomial in regular bit order. - * - * @table: table to be filled. - * @polynomial: polynomial for which table is to be filled. - * - * This function fills the provided table according the polynomial provided for - * regular bit order (lsb first). Polynomials in CRC algorithms are typically - * represented as shown below. - * - * poly = x^8 + x^7 + x^6 + x^4 + x^2 + 1 - * - * For lsb first direction x^7 maps to the lsb. So the polynomial is as below. - * - * - lsb first: poly = 10101011(1) = 0xAB - */ -void crc8_populate_lsb(u8 table[CRC8_TABLE_SIZE], u8 polynomial); - -/** - * crc8_populate_msb - fill crc table for given polynomial in reverse bit order. - * - * @table: table to be filled. - * @polynomial: polynomial for which table is to be filled. - * - * This function fills the provided table according the polynomial provided for - * reverse bit order (msb first). Polynomials in CRC algorithms are typically - * represented as shown below. - * - * poly = x^8 + x^7 + x^6 + x^4 + x^2 + 1 - * - * For msb first direction x^7 maps to the msb. So the polynomial is as below. - * - * - msb first: poly = (1)11010101 = 0xD5 - */ -void crc8_populate_msb(u8 table[CRC8_TABLE_SIZE], u8 polynomial); - -/** - * crc8() - calculate a crc8 over the given input data. - * - * @table: crc table used for calculation. - * @pdata: pointer to data buffer. - * @nbytes: number of bytes in data buffer. - * @crc: previous returned crc8 value. - * - * The CRC8 is calculated using the polynomial given in crc8_populate_msb() - * or crc8_populate_lsb(). - * - * The caller provides the initial value (either %CRC8_INIT_VALUE - * or the previous returned value) to allow for processing of - * discontiguous blocks of data. When generating the CRC the - * caller is responsible for complementing the final return value - * and inserting it into the byte stream. When validating a byte - * stream (including CRC8), a final return value of %CRC8_GOOD_VALUE - * indicates the byte stream data can be considered valid. - * - * Reference: - * "A Painless Guide to CRC Error Detection Algorithms", ver 3, Aug 1993 - * Williams, Ross N., rossross.net - * (see URL http://www.ross.net/crc/download/crc_v3.txt). - */ -u8 crc8(const u8 table[CRC8_TABLE_SIZE], u8 *pdata, size_t nbytes, u8 crc); - -#endif /* __CRC8_H_ */ diff --git a/openairITS/mac/DOT11/include/linux/eeprom_93cx6.h b/openairITS/mac/DOT11/include/linux/eeprom_93cx6.h deleted file mode 100644 index e50f98b029..0000000000 --- a/openairITS/mac/DOT11/include/linux/eeprom_93cx6.h +++ /dev/null @@ -1,82 +0,0 @@ -/* - Copyright (C) 2004 - 2006 rt2x00 SourceForge Project - - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the - Free Software Foundation, Inc., - 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - */ - -/* - Module: eeprom_93cx6 - Abstract: EEPROM reader datastructures for 93cx6 chipsets. - Supported chipsets: 93c46, 93c56 and 93c66. - */ - -/* - * EEPROM operation defines. - */ -#define PCI_EEPROM_WIDTH_93C46 6 -#define PCI_EEPROM_WIDTH_93C56 8 -#define PCI_EEPROM_WIDTH_93C66 8 -#define PCI_EEPROM_WIDTH_93C86 8 -#define PCI_EEPROM_WIDTH_OPCODE 3 -#define PCI_EEPROM_WRITE_OPCODE 0x05 -#define PCI_EEPROM_ERASE_OPCODE 0x07 -#define PCI_EEPROM_READ_OPCODE 0x06 -#define PCI_EEPROM_EWDS_OPCODE 0x10 -#define PCI_EEPROM_EWEN_OPCODE 0x13 - -/** - * struct eeprom_93cx6 - control structure for setting the commands - * for reading the eeprom data. - * @data: private pointer for the driver. - * @register_read(struct eeprom_93cx6 *eeprom): handler to - * read the eeprom register, this function should set all reg_* fields. - * @register_write(struct eeprom_93cx6 *eeprom): handler to - * write to the eeprom register by using all reg_* fields. - * @width: eeprom width, should be one of the PCI_EEPROM_WIDTH_* defines - * @drive_data: Set if we're driving the data line. - * @reg_data_in: register field to indicate data input - * @reg_data_out: register field to indicate data output - * @reg_data_clock: register field to set the data clock - * @reg_chip_select: register field to set the chip select - * - * This structure is used for the communication between the driver - * and the eeprom_93cx6 handlers for reading the eeprom. - */ -struct eeprom_93cx6 { - void *data; - - void (*register_read)(struct eeprom_93cx6 *eeprom); - void (*register_write)(struct eeprom_93cx6 *eeprom); - - int width; - - char drive_data; - char reg_data_in; - char reg_data_out; - char reg_data_clock; - char reg_chip_select; -}; - -extern void eeprom_93cx6_read(struct eeprom_93cx6 *eeprom, - const u8 word, u16 *data); -extern void eeprom_93cx6_multiread(struct eeprom_93cx6 *eeprom, - const u8 word, __le16 *data, const u16 words); - -extern void eeprom_93cx6_wren(struct eeprom_93cx6 *eeprom, bool enable); - -extern void eeprom_93cx6_write(struct eeprom_93cx6 *eeprom, - u8 addr, u16 data); diff --git a/openairITS/mac/DOT11/include/linux/export.h b/openairITS/mac/DOT11/include/linux/export.h deleted file mode 100644 index f7842b7a58..0000000000 --- a/openairITS/mac/DOT11/include/linux/export.h +++ /dev/null @@ -1,12 +0,0 @@ -#ifndef _COMPAT_LINUX_EXPORT_H -#define _COMPAT_LINUX_EXPORT_H 1 - -#include - -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,2,0)) -#include_next -#else -#include -#endif /* (LINUX_VERSION_CODE >= KERNEL_VERSION(3,2,0)) */ - -#endif /* _COMPAT_LINUX_EXPORT_H */ diff --git a/openairITS/mac/DOT11/include/linux/ieee80211.h b/openairITS/mac/DOT11/include/linux/ieee80211.h deleted file mode 100644 index 210e2c3255..0000000000 --- a/openairITS/mac/DOT11/include/linux/ieee80211.h +++ /dev/null @@ -1,1878 +0,0 @@ -/* - * IEEE 802.11 defines - * - * Copyright (c) 2001-2002, SSH Communications Security Corp and Jouni Malinen - * - * Copyright (c) 2002-2003, Jouni Malinen - * Copyright (c) 2005, Devicescape Software, Inc. - * Copyright (c) 2006, Michael Wu - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - */ - -#ifndef LINUX_IEEE80211_H -#define LINUX_IEEE80211_H - -#include -#include - -/* - * DS bit usage - * - * TA = transmitter address - * RA = receiver address - * DA = destination address - * SA = source address - * - * ToDS FromDS A1(RA) A2(TA) A3 A4 Use - * ----------------------------------------------------------------- - * 0 0 DA SA BSSID - IBSS/DLS - * 0 1 DA BSSID SA - AP -> STA - * 1 0 BSSID SA DA - AP <- STA - * 1 1 RA TA DA SA unspecified (WDS) - */ - -#define FCS_LEN 4 - -#define IEEE80211_FCTL_VERS 0x0003 -#define IEEE80211_FCTL_FTYPE 0x000c -#define IEEE80211_FCTL_STYPE 0x00f0 -#define IEEE80211_FCTL_TODS 0x0100 -#define IEEE80211_FCTL_FROMDS 0x0200 -#define IEEE80211_FCTL_MOREFRAGS 0x0400 -#define IEEE80211_FCTL_RETRY 0x0800 -#define IEEE80211_FCTL_PM 0x1000 -#define IEEE80211_FCTL_MOREDATA 0x2000 -#define IEEE80211_FCTL_PROTECTED 0x4000 -#define IEEE80211_FCTL_ORDER 0x8000 - -#define IEEE80211_SCTL_FRAG 0x000F -#define IEEE80211_SCTL_SEQ 0xFFF0 - -#define IEEE80211_FTYPE_MGMT 0x0000 -#define IEEE80211_FTYPE_CTL 0x0004 -#define IEEE80211_FTYPE_DATA 0x0008 - -/* management */ -#define IEEE80211_STYPE_ASSOC_REQ 0x0000 -#define IEEE80211_STYPE_ASSOC_RESP 0x0010 -#define IEEE80211_STYPE_REASSOC_REQ 0x0020 -#define IEEE80211_STYPE_REASSOC_RESP 0x0030 -#define IEEE80211_STYPE_PROBE_REQ 0x0040 -#define IEEE80211_STYPE_PROBE_RESP 0x0050 -#define IEEE80211_STYPE_BEACON 0x0080 -#define IEEE80211_STYPE_ATIM 0x0090 -#define IEEE80211_STYPE_DISASSOC 0x00A0 -#define IEEE80211_STYPE_AUTH 0x00B0 -#define IEEE80211_STYPE_DEAUTH 0x00C0 -#define IEEE80211_STYPE_ACTION 0x00D0 - -/* control */ -#define IEEE80211_STYPE_BACK_REQ 0x0080 -#define IEEE80211_STYPE_BACK 0x0090 -#define IEEE80211_STYPE_PSPOLL 0x00A0 -#define IEEE80211_STYPE_RTS 0x00B0 -#define IEEE80211_STYPE_CTS 0x00C0 -#define IEEE80211_STYPE_ACK 0x00D0 -#define IEEE80211_STYPE_CFEND 0x00E0 -#define IEEE80211_STYPE_CFENDACK 0x00F0 - -/* data */ -#define IEEE80211_STYPE_DATA 0x0000 -#define IEEE80211_STYPE_DATA_CFACK 0x0010 -#define IEEE80211_STYPE_DATA_CFPOLL 0x0020 -#define IEEE80211_STYPE_DATA_CFACKPOLL 0x0030 -#define IEEE80211_STYPE_NULLFUNC 0x0040 -#define IEEE80211_STYPE_CFACK 0x0050 -#define IEEE80211_STYPE_CFPOLL 0x0060 -#define IEEE80211_STYPE_CFACKPOLL 0x0070 -#define IEEE80211_STYPE_QOS_DATA 0x0080 -#define IEEE80211_STYPE_QOS_DATA_CFACK 0x0090 -#define IEEE80211_STYPE_QOS_DATA_CFPOLL 0x00A0 -#define IEEE80211_STYPE_QOS_DATA_CFACKPOLL 0x00B0 -#define IEEE80211_STYPE_QOS_NULLFUNC 0x00C0 -#define IEEE80211_STYPE_QOS_CFACK 0x00D0 -#define IEEE80211_STYPE_QOS_CFPOLL 0x00E0 -#define IEEE80211_STYPE_QOS_CFACKPOLL 0x00F0 - - -/* miscellaneous IEEE 802.11 constants */ -#define IEEE80211_MAX_FRAG_THRESHOLD 2352 -#define IEEE80211_MAX_RTS_THRESHOLD 2353 -#define IEEE80211_MAX_AID 2007 -#define IEEE80211_MAX_TIM_LEN 251 -/* Maximum size for the MA-UNITDATA primitive, 802.11 standard section - 6.2.1.1.2. - - 802.11e clarifies the figure in section 7.1.2. The frame body is - up to 2304 octets long (maximum MSDU size) plus any crypt overhead. */ -#define IEEE80211_MAX_DATA_LEN 2304 -/* 30 byte 4 addr hdr, 2 byte QoS, 2304 byte MSDU, 12 byte crypt, 4 byte FCS */ -#define IEEE80211_MAX_FRAME_LEN 2352 - -#define IEEE80211_MAX_SSID_LEN 32 - -#define IEEE80211_MAX_MESH_ID_LEN 32 - -#define IEEE80211_QOS_CTL_LEN 2 -/* 1d tag mask */ -#define IEEE80211_QOS_CTL_TAG1D_MASK 0x0007 -/* TID mask */ -#define IEEE80211_QOS_CTL_TID_MASK 0x000f -/* EOSP */ -#define IEEE80211_QOS_CTL_EOSP 0x0010 -/* ACK policy */ -#define IEEE80211_QOS_CTL_ACK_POLICY_NORMAL 0x0000 -#define IEEE80211_QOS_CTL_ACK_POLICY_NOACK 0x0020 -#define IEEE80211_QOS_CTL_ACK_POLICY_NO_EXPL 0x0040 -#define IEEE80211_QOS_CTL_ACK_POLICY_BLOCKACK 0x0060 -#define IEEE80211_QOS_CTL_ACK_POLICY_MASK 0x0060 -/* A-MSDU 802.11n */ -#define IEEE80211_QOS_CTL_A_MSDU_PRESENT 0x0080 -/* Mesh Control 802.11s */ -#define IEEE80211_QOS_CTL_MESH_CONTROL_PRESENT 0x0100 - -/* U-APSD queue for WMM IEs sent by AP */ -#define IEEE80211_WMM_IE_AP_QOSINFO_UAPSD (1<<7) -#define IEEE80211_WMM_IE_AP_QOSINFO_PARAM_SET_CNT_MASK 0x0f - -/* U-APSD queues for WMM IEs sent by STA */ -#define IEEE80211_WMM_IE_STA_QOSINFO_AC_VO (1<<0) -#define IEEE80211_WMM_IE_STA_QOSINFO_AC_VI (1<<1) -#define IEEE80211_WMM_IE_STA_QOSINFO_AC_BK (1<<2) -#define IEEE80211_WMM_IE_STA_QOSINFO_AC_BE (1<<3) -#define IEEE80211_WMM_IE_STA_QOSINFO_AC_MASK 0x0f - -/* U-APSD max SP length for WMM IEs sent by STA */ -#define IEEE80211_WMM_IE_STA_QOSINFO_SP_ALL 0x00 -#define IEEE80211_WMM_IE_STA_QOSINFO_SP_2 0x01 -#define IEEE80211_WMM_IE_STA_QOSINFO_SP_4 0x02 -#define IEEE80211_WMM_IE_STA_QOSINFO_SP_6 0x03 -#define IEEE80211_WMM_IE_STA_QOSINFO_SP_MASK 0x03 -#define IEEE80211_WMM_IE_STA_QOSINFO_SP_SHIFT 5 - -#define IEEE80211_HT_CTL_LEN 4 - -struct ieee80211_hdr { - __le16 frame_control; - __le16 duration_id; - u8 addr1[6]; - u8 addr2[6]; - u8 addr3[6]; - __le16 seq_ctrl; - u8 addr4[6]; -} __attribute__ ((packed)); - -struct ieee80211_hdr_3addr { - __le16 frame_control; - __le16 duration_id; - u8 addr1[6]; - u8 addr2[6]; - u8 addr3[6]; - __le16 seq_ctrl; -} __attribute__ ((packed)); - -struct ieee80211_qos_hdr { - __le16 frame_control; - __le16 duration_id; - u8 addr1[6]; - u8 addr2[6]; - u8 addr3[6]; - __le16 seq_ctrl; - __le16 qos_ctrl; -} __attribute__ ((packed)); - -/** - * ieee80211_has_tods - check if IEEE80211_FCTL_TODS is set - * @fc: frame control bytes in little-endian byteorder - */ -static inline int ieee80211_has_tods(__le16 fc) -{ - return (fc & cpu_to_le16(IEEE80211_FCTL_TODS)) != 0; -} - -/** - * ieee80211_has_fromds - check if IEEE80211_FCTL_FROMDS is set - * @fc: frame control bytes in little-endian byteorder - */ -static inline int ieee80211_has_fromds(__le16 fc) -{ - return (fc & cpu_to_le16(IEEE80211_FCTL_FROMDS)) != 0; -} - -/** - * ieee80211_has_a4 - check if IEEE80211_FCTL_TODS and IEEE80211_FCTL_FROMDS are set - * @fc: frame control bytes in little-endian byteorder - */ -static inline int ieee80211_has_a4(__le16 fc) -{ - __le16 tmp = cpu_to_le16(IEEE80211_FCTL_TODS | IEEE80211_FCTL_FROMDS); - return (fc & tmp) == tmp; -} - -/** - * ieee80211_has_morefrags - check if IEEE80211_FCTL_MOREFRAGS is set - * @fc: frame control bytes in little-endian byteorder - */ -static inline int ieee80211_has_morefrags(__le16 fc) -{ - return (fc & cpu_to_le16(IEEE80211_FCTL_MOREFRAGS)) != 0; -} - -/** - * ieee80211_has_retry - check if IEEE80211_FCTL_RETRY is set - * @fc: frame control bytes in little-endian byteorder - */ -static inline int ieee80211_has_retry(__le16 fc) -{ - return (fc & cpu_to_le16(IEEE80211_FCTL_RETRY)) != 0; -} - -/** - * ieee80211_has_pm - check if IEEE80211_FCTL_PM is set - * @fc: frame control bytes in little-endian byteorder - */ -static inline int ieee80211_has_pm(__le16 fc) -{ - return (fc & cpu_to_le16(IEEE80211_FCTL_PM)) != 0; -} - -/** - * ieee80211_has_moredata - check if IEEE80211_FCTL_MOREDATA is set - * @fc: frame control bytes in little-endian byteorder - */ -static inline int ieee80211_has_moredata(__le16 fc) -{ - return (fc & cpu_to_le16(IEEE80211_FCTL_MOREDATA)) != 0; -} - -/** - * ieee80211_has_protected - check if IEEE80211_FCTL_PROTECTED is set - * @fc: frame control bytes in little-endian byteorder - */ -static inline int ieee80211_has_protected(__le16 fc) -{ - return (fc & cpu_to_le16(IEEE80211_FCTL_PROTECTED)) != 0; -} - -/** - * ieee80211_has_order - check if IEEE80211_FCTL_ORDER is set - * @fc: frame control bytes in little-endian byteorder - */ -static inline int ieee80211_has_order(__le16 fc) -{ - return (fc & cpu_to_le16(IEEE80211_FCTL_ORDER)) != 0; -} - -/** - * ieee80211_is_mgmt - check if type is IEEE80211_FTYPE_MGMT - * @fc: frame control bytes in little-endian byteorder - */ -static inline int ieee80211_is_mgmt(__le16 fc) -{ - return (fc & cpu_to_le16(IEEE80211_FCTL_FTYPE)) == - cpu_to_le16(IEEE80211_FTYPE_MGMT); -} - -/** - * ieee80211_is_ctl - check if type is IEEE80211_FTYPE_CTL - * @fc: frame control bytes in little-endian byteorder - */ -static inline int ieee80211_is_ctl(__le16 fc) -{ - return (fc & cpu_to_le16(IEEE80211_FCTL_FTYPE)) == - cpu_to_le16(IEEE80211_FTYPE_CTL); -} - -/** - * ieee80211_is_data - check if type is IEEE80211_FTYPE_DATA - * @fc: frame control bytes in little-endian byteorder - */ -static inline int ieee80211_is_data(__le16 fc) -{ - return (fc & cpu_to_le16(IEEE80211_FCTL_FTYPE)) == - cpu_to_le16(IEEE80211_FTYPE_DATA); -} - -/** - * ieee80211_is_data_qos - check if type is IEEE80211_FTYPE_DATA and IEEE80211_STYPE_QOS_DATA is set - * @fc: frame control bytes in little-endian byteorder - */ -static inline int ieee80211_is_data_qos(__le16 fc) -{ - /* - * mask with QOS_DATA rather than IEEE80211_FCTL_STYPE as we just need - * to check the one bit - */ - return (fc & cpu_to_le16(IEEE80211_FCTL_FTYPE | IEEE80211_STYPE_QOS_DATA)) == - cpu_to_le16(IEEE80211_FTYPE_DATA | IEEE80211_STYPE_QOS_DATA); -} - -/** - * ieee80211_is_data_present - check if type is IEEE80211_FTYPE_DATA and has data - * @fc: frame control bytes in little-endian byteorder - */ -static inline int ieee80211_is_data_present(__le16 fc) -{ - /* - * mask with 0x40 and test that that bit is clear to only return true - * for the data-containing substypes. - */ - return (fc & cpu_to_le16(IEEE80211_FCTL_FTYPE | 0x40)) == - cpu_to_le16(IEEE80211_FTYPE_DATA); -} - -/** - * ieee80211_is_assoc_req - check if IEEE80211_FTYPE_MGMT && IEEE80211_STYPE_ASSOC_REQ - * @fc: frame control bytes in little-endian byteorder - */ -static inline int ieee80211_is_assoc_req(__le16 fc) -{ - return (fc & cpu_to_le16(IEEE80211_FCTL_FTYPE | IEEE80211_FCTL_STYPE)) == - cpu_to_le16(IEEE80211_FTYPE_MGMT | IEEE80211_STYPE_ASSOC_REQ); -} - -/** - * ieee80211_is_assoc_resp - check if IEEE80211_FTYPE_MGMT && IEEE80211_STYPE_ASSOC_RESP - * @fc: frame control bytes in little-endian byteorder - */ -static inline int ieee80211_is_assoc_resp(__le16 fc) -{ - return (fc & cpu_to_le16(IEEE80211_FCTL_FTYPE | IEEE80211_FCTL_STYPE)) == - cpu_to_le16(IEEE80211_FTYPE_MGMT | IEEE80211_STYPE_ASSOC_RESP); -} - -/** - * ieee80211_is_reassoc_req - check if IEEE80211_FTYPE_MGMT && IEEE80211_STYPE_REASSOC_REQ - * @fc: frame control bytes in little-endian byteorder - */ -static inline int ieee80211_is_reassoc_req(__le16 fc) -{ - return (fc & cpu_to_le16(IEEE80211_FCTL_FTYPE | IEEE80211_FCTL_STYPE)) == - cpu_to_le16(IEEE80211_FTYPE_MGMT | IEEE80211_STYPE_REASSOC_REQ); -} - -/** - * ieee80211_is_reassoc_resp - check if IEEE80211_FTYPE_MGMT && IEEE80211_STYPE_REASSOC_RESP - * @fc: frame control bytes in little-endian byteorder - */ -static inline int ieee80211_is_reassoc_resp(__le16 fc) -{ - return (fc & cpu_to_le16(IEEE80211_FCTL_FTYPE | IEEE80211_FCTL_STYPE)) == - cpu_to_le16(IEEE80211_FTYPE_MGMT | IEEE80211_STYPE_REASSOC_RESP); -} - -/** - * ieee80211_is_probe_req - check if IEEE80211_FTYPE_MGMT && IEEE80211_STYPE_PROBE_REQ - * @fc: frame control bytes in little-endian byteorder - */ -static inline int ieee80211_is_probe_req(__le16 fc) -{ - return (fc & cpu_to_le16(IEEE80211_FCTL_FTYPE | IEEE80211_FCTL_STYPE)) == - cpu_to_le16(IEEE80211_FTYPE_MGMT | IEEE80211_STYPE_PROBE_REQ); -} - -/** - * ieee80211_is_probe_resp - check if IEEE80211_FTYPE_MGMT && IEEE80211_STYPE_PROBE_RESP - * @fc: frame control bytes in little-endian byteorder - */ -static inline int ieee80211_is_probe_resp(__le16 fc) -{ - return (fc & cpu_to_le16(IEEE80211_FCTL_FTYPE | IEEE80211_FCTL_STYPE)) == - cpu_to_le16(IEEE80211_FTYPE_MGMT | IEEE80211_STYPE_PROBE_RESP); -} - -/** - * ieee80211_is_beacon - check if IEEE80211_FTYPE_MGMT && IEEE80211_STYPE_BEACON - * @fc: frame control bytes in little-endian byteorder - */ -static inline int ieee80211_is_beacon(__le16 fc) -{ - return (fc & cpu_to_le16(IEEE80211_FCTL_FTYPE | IEEE80211_FCTL_STYPE)) == - cpu_to_le16(IEEE80211_FTYPE_MGMT | IEEE80211_STYPE_BEACON); -} - -/** - * ieee80211_is_atim - check if IEEE80211_FTYPE_MGMT && IEEE80211_STYPE_ATIM - * @fc: frame control bytes in little-endian byteorder - */ -static inline int ieee80211_is_atim(__le16 fc) -{ - return (fc & cpu_to_le16(IEEE80211_FCTL_FTYPE | IEEE80211_FCTL_STYPE)) == - cpu_to_le16(IEEE80211_FTYPE_MGMT | IEEE80211_STYPE_ATIM); -} - -/** - * ieee80211_is_disassoc - check if IEEE80211_FTYPE_MGMT && IEEE80211_STYPE_DISASSOC - * @fc: frame control bytes in little-endian byteorder - */ -static inline int ieee80211_is_disassoc(__le16 fc) -{ - return (fc & cpu_to_le16(IEEE80211_FCTL_FTYPE | IEEE80211_FCTL_STYPE)) == - cpu_to_le16(IEEE80211_FTYPE_MGMT | IEEE80211_STYPE_DISASSOC); -} - -/** - * ieee80211_is_auth - check if IEEE80211_FTYPE_MGMT && IEEE80211_STYPE_AUTH - * @fc: frame control bytes in little-endian byteorder - */ -static inline int ieee80211_is_auth(__le16 fc) -{ - return (fc & cpu_to_le16(IEEE80211_FCTL_FTYPE | IEEE80211_FCTL_STYPE)) == - cpu_to_le16(IEEE80211_FTYPE_MGMT | IEEE80211_STYPE_AUTH); -} - -/** - * ieee80211_is_deauth - check if IEEE80211_FTYPE_MGMT && IEEE80211_STYPE_DEAUTH - * @fc: frame control bytes in little-endian byteorder - */ -static inline int ieee80211_is_deauth(__le16 fc) -{ - return (fc & cpu_to_le16(IEEE80211_FCTL_FTYPE | IEEE80211_FCTL_STYPE)) == - cpu_to_le16(IEEE80211_FTYPE_MGMT | IEEE80211_STYPE_DEAUTH); -} - -/** - * ieee80211_is_action - check if IEEE80211_FTYPE_MGMT && IEEE80211_STYPE_ACTION - * @fc: frame control bytes in little-endian byteorder - */ -static inline int ieee80211_is_action(__le16 fc) -{ - return (fc & cpu_to_le16(IEEE80211_FCTL_FTYPE | IEEE80211_FCTL_STYPE)) == - cpu_to_le16(IEEE80211_FTYPE_MGMT | IEEE80211_STYPE_ACTION); -} - -/** - * ieee80211_is_back_req - check if IEEE80211_FTYPE_CTL && IEEE80211_STYPE_BACK_REQ - * @fc: frame control bytes in little-endian byteorder - */ -static inline int ieee80211_is_back_req(__le16 fc) -{ - return (fc & cpu_to_le16(IEEE80211_FCTL_FTYPE | IEEE80211_FCTL_STYPE)) == - cpu_to_le16(IEEE80211_FTYPE_CTL | IEEE80211_STYPE_BACK_REQ); -} - -/** - * ieee80211_is_back - check if IEEE80211_FTYPE_CTL && IEEE80211_STYPE_BACK - * @fc: frame control bytes in little-endian byteorder - */ -static inline int ieee80211_is_back(__le16 fc) -{ - return (fc & cpu_to_le16(IEEE80211_FCTL_FTYPE | IEEE80211_FCTL_STYPE)) == - cpu_to_le16(IEEE80211_FTYPE_CTL | IEEE80211_STYPE_BACK); -} - -/** - * ieee80211_is_pspoll - check if IEEE80211_FTYPE_CTL && IEEE80211_STYPE_PSPOLL - * @fc: frame control bytes in little-endian byteorder - */ -static inline int ieee80211_is_pspoll(__le16 fc) -{ - return (fc & cpu_to_le16(IEEE80211_FCTL_FTYPE | IEEE80211_FCTL_STYPE)) == - cpu_to_le16(IEEE80211_FTYPE_CTL | IEEE80211_STYPE_PSPOLL); -} - -/** - * ieee80211_is_rts - check if IEEE80211_FTYPE_CTL && IEEE80211_STYPE_RTS - * @fc: frame control bytes in little-endian byteorder - */ -static inline int ieee80211_is_rts(__le16 fc) -{ - return (fc & cpu_to_le16(IEEE80211_FCTL_FTYPE | IEEE80211_FCTL_STYPE)) == - cpu_to_le16(IEEE80211_FTYPE_CTL | IEEE80211_STYPE_RTS); -} - -/** - * ieee80211_is_cts - check if IEEE80211_FTYPE_CTL && IEEE80211_STYPE_CTS - * @fc: frame control bytes in little-endian byteorder - */ -static inline int ieee80211_is_cts(__le16 fc) -{ - return (fc & cpu_to_le16(IEEE80211_FCTL_FTYPE | IEEE80211_FCTL_STYPE)) == - cpu_to_le16(IEEE80211_FTYPE_CTL | IEEE80211_STYPE_CTS); -} - -/** - * ieee80211_is_ack - check if IEEE80211_FTYPE_CTL && IEEE80211_STYPE_ACK - * @fc: frame control bytes in little-endian byteorder - */ -static inline int ieee80211_is_ack(__le16 fc) -{ - return (fc & cpu_to_le16(IEEE80211_FCTL_FTYPE | IEEE80211_FCTL_STYPE)) == - cpu_to_le16(IEEE80211_FTYPE_CTL | IEEE80211_STYPE_ACK); -} - -/** - * ieee80211_is_cfend - check if IEEE80211_FTYPE_CTL && IEEE80211_STYPE_CFEND - * @fc: frame control bytes in little-endian byteorder - */ -static inline int ieee80211_is_cfend(__le16 fc) -{ - return (fc & cpu_to_le16(IEEE80211_FCTL_FTYPE | IEEE80211_FCTL_STYPE)) == - cpu_to_le16(IEEE80211_FTYPE_CTL | IEEE80211_STYPE_CFEND); -} - -/** - * ieee80211_is_cfendack - check if IEEE80211_FTYPE_CTL && IEEE80211_STYPE_CFENDACK - * @fc: frame control bytes in little-endian byteorder - */ -static inline int ieee80211_is_cfendack(__le16 fc) -{ - return (fc & cpu_to_le16(IEEE80211_FCTL_FTYPE | IEEE80211_FCTL_STYPE)) == - cpu_to_le16(IEEE80211_FTYPE_CTL | IEEE80211_STYPE_CFENDACK); -} - -/** - * ieee80211_is_nullfunc - check if frame is a regular (non-QoS) nullfunc frame - * @fc: frame control bytes in little-endian byteorder - */ -static inline int ieee80211_is_nullfunc(__le16 fc) -{ - return (fc & cpu_to_le16(IEEE80211_FCTL_FTYPE | IEEE80211_FCTL_STYPE)) == - cpu_to_le16(IEEE80211_FTYPE_DATA | IEEE80211_STYPE_NULLFUNC); -} - -/** - * ieee80211_is_qos_nullfunc - check if frame is a QoS nullfunc frame - * @fc: frame control bytes in little-endian byteorder - */ -static inline int ieee80211_is_qos_nullfunc(__le16 fc) -{ - return (fc & cpu_to_le16(IEEE80211_FCTL_FTYPE | IEEE80211_FCTL_STYPE)) == - cpu_to_le16(IEEE80211_FTYPE_DATA | IEEE80211_STYPE_QOS_NULLFUNC); -} - -/** - * ieee80211_is_first_frag - check if IEEE80211_SCTL_FRAG is not set - * @seq_ctrl: frame sequence control bytes in little-endian byteorder - */ -static inline int ieee80211_is_first_frag(__le16 seq_ctrl) -{ - return (seq_ctrl & cpu_to_le16(IEEE80211_SCTL_FRAG)) == 0; -} - -struct ieee80211s_hdr { - u8 flags; - u8 ttl; - __le32 seqnum; - u8 eaddr1[6]; - u8 eaddr2[6]; -} __attribute__ ((packed)); - -/* Mesh flags */ -#define MESH_FLAGS_AE_A4 0x1 -#define MESH_FLAGS_AE_A5_A6 0x2 -#define MESH_FLAGS_AE 0x3 -#define MESH_FLAGS_PS_DEEP 0x4 - -/** - * struct ieee80211_quiet_ie - * - * This structure refers to "Quiet information element" - */ -struct ieee80211_quiet_ie { - u8 count; - u8 period; - __le16 duration; - __le16 offset; -} __attribute__ ((packed)); - -/** - * struct ieee80211_msrment_ie - * - * This structure refers to "Measurement Request/Report information element" - */ -struct ieee80211_msrment_ie { - u8 token; - u8 mode; - u8 type; - u8 request[0]; -} __attribute__ ((packed)); - -/** - * struct ieee80211_channel_sw_ie - * - * This structure refers to "Channel Switch Announcement information element" - */ -struct ieee80211_channel_sw_ie { - u8 mode; - u8 new_ch_num; - u8 count; -} __attribute__ ((packed)); - -/** - * struct ieee80211_tim - * - * This structure refers to "Traffic Indication Map information element" - */ -struct ieee80211_tim_ie { - u8 dtim_count; - u8 dtim_period; - u8 bitmap_ctrl; - /* variable size: 1 - 251 bytes */ - u8 virtual_map[1]; -} __attribute__ ((packed)); - -/** - * struct ieee80211_meshconf_ie - * - * This structure refers to "Mesh Configuration information element" - */ -struct ieee80211_meshconf_ie { - u8 meshconf_psel; - u8 meshconf_pmetric; - u8 meshconf_congest; - u8 meshconf_synch; - u8 meshconf_auth; - u8 meshconf_form; - u8 meshconf_cap; -} __attribute__ ((packed)); - -/** - * struct ieee80211_rann_ie - * - * This structure refers to "Root Announcement information element" - */ -struct ieee80211_rann_ie { - u8 rann_flags; - u8 rann_hopcount; - u8 rann_ttl; - u8 rann_addr[6]; - u32 rann_seq; - u32 rann_interval; - u32 rann_metric; -} __attribute__ ((packed)); - -enum ieee80211_rann_flags { - RANN_FLAG_IS_GATE = 1 << 0, -}; - -#define WLAN_SA_QUERY_TR_ID_LEN 2 - -struct ieee80211_mgmt { - __le16 frame_control; - __le16 duration; - u8 da[6]; - u8 sa[6]; - u8 bssid[6]; - __le16 seq_ctrl; - union { - struct { - __le16 auth_alg; - __le16 auth_transaction; - __le16 status_code; - /* possibly followed by Challenge text */ - u8 variable[0]; - } __attribute__ ((packed)) auth; - struct { - __le16 reason_code; - } __attribute__ ((packed)) deauth; - struct { - __le16 capab_info; - __le16 listen_interval; - /* followed by SSID and Supported rates */ - u8 variable[0]; - } __attribute__ ((packed)) assoc_req; - struct { - __le16 capab_info; - __le16 status_code; - __le16 aid; - /* followed by Supported rates */ - u8 variable[0]; - } __attribute__ ((packed)) assoc_resp, reassoc_resp; - struct { - __le16 capab_info; - __le16 listen_interval; - u8 current_ap[6]; - /* followed by SSID and Supported rates */ - u8 variable[0]; - } __attribute__ ((packed)) reassoc_req; - struct { - __le16 reason_code; - } __attribute__ ((packed)) disassoc; - struct { - __le64 timestamp; - __le16 beacon_int; - __le16 capab_info; - /* followed by some of SSID, Supported rates, - * FH Params, DS Params, CF Params, IBSS Params, TIM */ - u8 variable[0]; - } __attribute__ ((packed)) beacon; - struct { - /* only variable items: SSID, Supported rates */ - u8 variable[0]; - } __attribute__ ((packed)) probe_req; - struct { - __le64 timestamp; - __le16 beacon_int; - __le16 capab_info; - /* followed by some of SSID, Supported rates, - * FH Params, DS Params, CF Params, IBSS Params */ - u8 variable[0]; - } __attribute__ ((packed)) probe_resp; - struct { - u8 category; - union { - struct { - u8 action_code; - u8 dialog_token; - u8 status_code; - u8 variable[0]; - } __attribute__ ((packed)) wme_action; - struct{ - u8 action_code; - u8 element_id; - u8 length; - struct ieee80211_channel_sw_ie sw_elem; - } __attribute__((packed)) chan_switch; - struct{ - u8 action_code; - u8 dialog_token; - u8 element_id; - u8 length; - struct ieee80211_msrment_ie msr_elem; - } __attribute__((packed)) measurement; - struct{ - u8 action_code; - u8 dialog_token; - __le16 capab; - __le16 timeout; - __le16 start_seq_num; - } __attribute__((packed)) addba_req; - struct{ - u8 action_code; - u8 dialog_token; - __le16 status; - __le16 capab; - __le16 timeout; - } __attribute__((packed)) addba_resp; - struct{ - u8 action_code; - __le16 params; - __le16 reason_code; - } __attribute__((packed)) delba; - struct { - u8 action_code; - u8 variable[0]; - } __attribute__((packed)) self_prot; - struct{ - u8 action_code; - u8 variable[0]; - } __attribute__((packed)) mesh_action; - struct { - u8 action; - u8 trans_id[WLAN_SA_QUERY_TR_ID_LEN]; - } __attribute__ ((packed)) sa_query; - struct { - u8 action; - u8 smps_control; - } __attribute__ ((packed)) ht_smps; - struct { - u8 action_code; - u8 dialog_token; - __le16 capability; - u8 variable[0]; - } __packed tdls_discover_resp; - } u; - } __attribute__ ((packed)) action; - } u; -} __attribute__ ((packed)); - -/* Supported Rates value encodings in 802.11n-2009 7.3.2.2 */ -#define BSS_MEMBERSHIP_SELECTOR_HT_PHY 127 - -/* mgmt header + 1 byte category code */ -#define IEEE80211_MIN_ACTION_SIZE offsetof(struct ieee80211_mgmt, u.action.u) - - -/* Management MIC information element (IEEE 802.11w) */ -struct ieee80211_mmie { - u8 element_id; - u8 length; - __le16 key_id; - u8 sequence_number[6]; - u8 mic[8]; -} __attribute__ ((packed)); - -struct ieee80211_vendor_ie { - u8 element_id; - u8 len; - u8 oui[3]; - u8 oui_type; -} __packed; - -/* Control frames */ -struct ieee80211_rts { - __le16 frame_control; - __le16 duration; - u8 ra[6]; - u8 ta[6]; -} __attribute__ ((packed)); - -struct ieee80211_cts { - __le16 frame_control; - __le16 duration; - u8 ra[6]; -} __attribute__ ((packed)); - -struct ieee80211_pspoll { - __le16 frame_control; - __le16 aid; - u8 bssid[6]; - u8 ta[6]; -} __attribute__ ((packed)); - -/* TDLS */ - -/* Link-id information element */ -struct ieee80211_tdls_lnkie { - u8 ie_type; /* Link Identifier IE */ - u8 ie_len; - u8 bssid[6]; - u8 init_sta[6]; - u8 resp_sta[6]; -} __packed; - -struct ieee80211_tdls_data { - u8 da[6]; - u8 sa[6]; - __be16 ether_type; - u8 payload_type; - u8 category; - u8 action_code; - union { - struct { - u8 dialog_token; - __le16 capability; - u8 variable[0]; - } __packed setup_req; - struct { - __le16 status_code; - u8 dialog_token; - __le16 capability; - u8 variable[0]; - } __packed setup_resp; - struct { - __le16 status_code; - u8 dialog_token; - u8 variable[0]; - } __packed setup_cfm; - struct { - __le16 reason_code; - u8 variable[0]; - } __packed teardown; - struct { - u8 dialog_token; - u8 variable[0]; - } __packed discover_req; - } u; -} __packed; - -/** - * struct ieee80211_bar - HT Block Ack Request - * - * This structure refers to "HT BlockAckReq" as - * described in 802.11n draft section 7.2.1.7.1 - */ -struct ieee80211_bar { - __le16 frame_control; - __le16 duration; - __u8 ra[6]; - __u8 ta[6]; - __le16 control; - __le16 start_seq_num; -} __attribute__((packed)); - -/* 802.11 BAR control masks */ -#define IEEE80211_BAR_CTRL_ACK_POLICY_NORMAL 0x0000 -#define IEEE80211_BAR_CTRL_MULTI_TID 0x0002 -#define IEEE80211_BAR_CTRL_CBMTID_COMPRESSED_BA 0x0004 -#define IEEE80211_BAR_CTRL_TID_INFO_MASK 0xf000 -#define IEEE80211_BAR_CTRL_TID_INFO_SHIFT 12 - -#define IEEE80211_HT_MCS_MASK_LEN 10 - -/** - * struct ieee80211_mcs_info - MCS information - * @rx_mask: RX mask - * @rx_highest: highest supported RX rate. If set represents - * the highest supported RX data rate in units of 1 Mbps. - * If this field is 0 this value should not be used to - * consider the highest RX data rate supported. - * @tx_params: TX parameters - */ -struct ieee80211_mcs_info { - u8 rx_mask[IEEE80211_HT_MCS_MASK_LEN]; - __le16 rx_highest; - u8 tx_params; - u8 reserved[3]; -} __attribute__((packed)); - -/* 802.11n HT capability MSC set */ -#define IEEE80211_HT_MCS_RX_HIGHEST_MASK 0x3ff -#define IEEE80211_HT_MCS_TX_DEFINED 0x01 -#define IEEE80211_HT_MCS_TX_RX_DIFF 0x02 -/* value 0 == 1 stream etc */ -#define IEEE80211_HT_MCS_TX_MAX_STREAMS_MASK 0x0C -#define IEEE80211_HT_MCS_TX_MAX_STREAMS_SHIFT 2 -#define IEEE80211_HT_MCS_TX_MAX_STREAMS 4 -#define IEEE80211_HT_MCS_TX_UNEQUAL_MODULATION 0x10 - -/* - * 802.11n D5.0 20.3.5 / 20.6 says: - * - indices 0 to 7 and 32 are single spatial stream - * - 8 to 31 are multiple spatial streams using equal modulation - * [8..15 for two streams, 16..23 for three and 24..31 for four] - * - remainder are multiple spatial streams using unequal modulation - */ -#define IEEE80211_HT_MCS_UNEQUAL_MODULATION_START 33 -#define IEEE80211_HT_MCS_UNEQUAL_MODULATION_START_BYTE \ - (IEEE80211_HT_MCS_UNEQUAL_MODULATION_START / 8) - -/** - * struct ieee80211_ht_cap - HT capabilities - * - * This structure is the "HT capabilities element" as - * described in 802.11n D5.0 7.3.2.57 - */ -struct ieee80211_ht_cap { - __le16 cap_info; - u8 ampdu_params_info; - - /* 16 bytes MCS information */ - struct ieee80211_mcs_info mcs; - - __le16 extended_ht_cap_info; - __le32 tx_BF_cap_info; - u8 antenna_selection_info; -} __attribute__ ((packed)); - -/* 802.11n HT capabilities masks (for cap_info) */ -#define IEEE80211_HT_CAP_LDPC_CODING 0x0001 -#define IEEE80211_HT_CAP_SUP_WIDTH_20_40 0x0002 -#define IEEE80211_HT_CAP_SM_PS 0x000C -#define IEEE80211_HT_CAP_SM_PS_SHIFT 2 -#define IEEE80211_HT_CAP_GRN_FLD 0x0010 -#define IEEE80211_HT_CAP_SGI_20 0x0020 -#define IEEE80211_HT_CAP_SGI_40 0x0040 -#define IEEE80211_HT_CAP_TX_STBC 0x0080 -#define IEEE80211_HT_CAP_RX_STBC 0x0300 -#define IEEE80211_HT_CAP_RX_STBC_SHIFT 8 -#define IEEE80211_HT_CAP_DELAY_BA 0x0400 -#define IEEE80211_HT_CAP_MAX_AMSDU 0x0800 -#define IEEE80211_HT_CAP_DSSSCCK40 0x1000 -#define IEEE80211_HT_CAP_RESERVED 0x2000 -#define IEEE80211_HT_CAP_40MHZ_INTOLERANT 0x4000 -#define IEEE80211_HT_CAP_LSIG_TXOP_PROT 0x8000 - -/* 802.11n HT extended capabilities masks (for extended_ht_cap_info) */ -#define IEEE80211_HT_EXT_CAP_PCO 0x0001 -#define IEEE80211_HT_EXT_CAP_PCO_TIME 0x0006 -#define IEEE80211_HT_EXT_CAP_PCO_TIME_SHIFT 1 -#define IEEE80211_HT_EXT_CAP_MCS_FB 0x0300 -#define IEEE80211_HT_EXT_CAP_MCS_FB_SHIFT 8 -#define IEEE80211_HT_EXT_CAP_HTC_SUP 0x0400 -#define IEEE80211_HT_EXT_CAP_RD_RESPONDER 0x0800 - -/* 802.11n HT capability AMPDU settings (for ampdu_params_info) */ -#define IEEE80211_HT_AMPDU_PARM_FACTOR 0x03 -#define IEEE80211_HT_AMPDU_PARM_DENSITY 0x1C -#define IEEE80211_HT_AMPDU_PARM_DENSITY_SHIFT 2 - -/* - * Maximum length of AMPDU that the STA can receive. - * Length = 2 ^ (13 + max_ampdu_length_exp) - 1 (octets) - */ -enum ieee80211_max_ampdu_length_exp { - IEEE80211_HT_MAX_AMPDU_8K = 0, - IEEE80211_HT_MAX_AMPDU_16K = 1, - IEEE80211_HT_MAX_AMPDU_32K = 2, - IEEE80211_HT_MAX_AMPDU_64K = 3 -}; - -#define IEEE80211_HT_MAX_AMPDU_FACTOR 13 - -/* Minimum MPDU start spacing */ -enum ieee80211_min_mpdu_spacing { - IEEE80211_HT_MPDU_DENSITY_NONE = 0, /* No restriction */ - IEEE80211_HT_MPDU_DENSITY_0_25 = 1, /* 1/4 usec */ - IEEE80211_HT_MPDU_DENSITY_0_5 = 2, /* 1/2 usec */ - IEEE80211_HT_MPDU_DENSITY_1 = 3, /* 1 usec */ - IEEE80211_HT_MPDU_DENSITY_2 = 4, /* 2 usec */ - IEEE80211_HT_MPDU_DENSITY_4 = 5, /* 4 usec */ - IEEE80211_HT_MPDU_DENSITY_8 = 6, /* 8 usec */ - IEEE80211_HT_MPDU_DENSITY_16 = 7 /* 16 usec */ -}; - -/** - * struct ieee80211_ht_info - HT information - * - * This structure is the "HT information element" as - * described in 802.11n D5.0 7.3.2.58 - */ -struct ieee80211_ht_info { - u8 control_chan; - u8 ht_param; - __le16 operation_mode; - __le16 stbc_param; - u8 basic_set[16]; -} __attribute__ ((packed)); - -/* for ht_param */ -#define IEEE80211_HT_PARAM_CHA_SEC_OFFSET 0x03 -#define IEEE80211_HT_PARAM_CHA_SEC_NONE 0x00 -#define IEEE80211_HT_PARAM_CHA_SEC_ABOVE 0x01 -#define IEEE80211_HT_PARAM_CHA_SEC_BELOW 0x03 -#define IEEE80211_HT_PARAM_CHAN_WIDTH_ANY 0x04 -#define IEEE80211_HT_PARAM_RIFS_MODE 0x08 -#define IEEE80211_HT_PARAM_SPSMP_SUPPORT 0x10 -#define IEEE80211_HT_PARAM_SERV_INTERVAL_GRAN 0xE0 - -/* for operation_mode */ -#define IEEE80211_HT_OP_MODE_PROTECTION 0x0003 -#define IEEE80211_HT_OP_MODE_PROTECTION_NONE 0 -#define IEEE80211_HT_OP_MODE_PROTECTION_NONMEMBER 1 -#define IEEE80211_HT_OP_MODE_PROTECTION_20MHZ 2 -#define IEEE80211_HT_OP_MODE_PROTECTION_NONHT_MIXED 3 -#define IEEE80211_HT_OP_MODE_NON_GF_STA_PRSNT 0x0004 -#define IEEE80211_HT_OP_MODE_NON_HT_STA_PRSNT 0x0010 - -/* for stbc_param */ -#define IEEE80211_HT_STBC_PARAM_DUAL_BEACON 0x0040 -#define IEEE80211_HT_STBC_PARAM_DUAL_CTS_PROT 0x0080 -#define IEEE80211_HT_STBC_PARAM_STBC_BEACON 0x0100 -#define IEEE80211_HT_STBC_PARAM_LSIG_TXOP_FULLPROT 0x0200 -#define IEEE80211_HT_STBC_PARAM_PCO_ACTIVE 0x0400 -#define IEEE80211_HT_STBC_PARAM_PCO_PHASE 0x0800 - - -/* block-ack parameters */ -#define IEEE80211_ADDBA_PARAM_POLICY_MASK 0x0002 -#define IEEE80211_ADDBA_PARAM_TID_MASK 0x003C -#define IEEE80211_ADDBA_PARAM_BUF_SIZE_MASK 0xFFC0 -#define IEEE80211_DELBA_PARAM_TID_MASK 0xF000 -#define IEEE80211_DELBA_PARAM_INITIATOR_MASK 0x0800 - -/* - * A-PMDU buffer sizes - * According to IEEE802.11n spec size varies from 8K to 64K (in powers of 2) - */ -#define IEEE80211_MIN_AMPDU_BUF 0x8 -#define IEEE80211_MAX_AMPDU_BUF 0x40 - - -/* Spatial Multiplexing Power Save Modes (for capability) */ -#define WLAN_HT_CAP_SM_PS_STATIC 0 -#define WLAN_HT_CAP_SM_PS_DYNAMIC 1 -#define WLAN_HT_CAP_SM_PS_INVALID 2 -#define WLAN_HT_CAP_SM_PS_DISABLED 3 - -/* for SM power control field lower two bits */ -#define WLAN_HT_SMPS_CONTROL_DISABLED 0 -#define WLAN_HT_SMPS_CONTROL_STATIC 1 -#define WLAN_HT_SMPS_CONTROL_DYNAMIC 3 - -/* Authentication algorithms */ -#define WLAN_AUTH_OPEN 0 -#define WLAN_AUTH_SHARED_KEY 1 -#define WLAN_AUTH_FT 2 -#define WLAN_AUTH_SAE 3 -#define WLAN_AUTH_LEAP 128 - -#define WLAN_AUTH_CHALLENGE_LEN 128 - -#define WLAN_CAPABILITY_ESS (1<<0) -#define WLAN_CAPABILITY_IBSS (1<<1) - -/* - * A mesh STA sets the ESS and IBSS capability bits to zero. - * however, this holds true for p2p probe responses (in the p2p_find - * phase) as well. - */ -#define WLAN_CAPABILITY_IS_STA_BSS(cap) \ - (!((cap) & (WLAN_CAPABILITY_ESS | WLAN_CAPABILITY_IBSS))) - -#define WLAN_CAPABILITY_CF_POLLABLE (1<<2) -#define WLAN_CAPABILITY_CF_POLL_REQUEST (1<<3) -#define WLAN_CAPABILITY_PRIVACY (1<<4) -#define WLAN_CAPABILITY_SHORT_PREAMBLE (1<<5) -#define WLAN_CAPABILITY_PBCC (1<<6) -#define WLAN_CAPABILITY_CHANNEL_AGILITY (1<<7) - -/* 802.11h */ -#define WLAN_CAPABILITY_SPECTRUM_MGMT (1<<8) -#define WLAN_CAPABILITY_QOS (1<<9) -#define WLAN_CAPABILITY_SHORT_SLOT_TIME (1<<10) -#define WLAN_CAPABILITY_DSSS_OFDM (1<<13) -/* measurement */ -#define IEEE80211_SPCT_MSR_RPRT_MODE_LATE (1<<0) -#define IEEE80211_SPCT_MSR_RPRT_MODE_INCAPABLE (1<<1) -#define IEEE80211_SPCT_MSR_RPRT_MODE_REFUSED (1<<2) - -#define IEEE80211_SPCT_MSR_RPRT_TYPE_BASIC 0 -#define IEEE80211_SPCT_MSR_RPRT_TYPE_CCA 1 -#define IEEE80211_SPCT_MSR_RPRT_TYPE_RPI 2 - - -/* 802.11g ERP information element */ -#define WLAN_ERP_NON_ERP_PRESENT (1<<0) -#define WLAN_ERP_USE_PROTECTION (1<<1) -#define WLAN_ERP_BARKER_PREAMBLE (1<<2) - -/* WLAN_ERP_BARKER_PREAMBLE values */ -enum { - WLAN_ERP_PREAMBLE_SHORT = 0, - WLAN_ERP_PREAMBLE_LONG = 1, -}; - -/* Status codes */ -enum ieee80211_statuscode { - WLAN_STATUS_SUCCESS = 0, - WLAN_STATUS_UNSPECIFIED_FAILURE = 1, - WLAN_STATUS_CAPS_UNSUPPORTED = 10, - WLAN_STATUS_REASSOC_NO_ASSOC = 11, - WLAN_STATUS_ASSOC_DENIED_UNSPEC = 12, - WLAN_STATUS_NOT_SUPPORTED_AUTH_ALG = 13, - WLAN_STATUS_UNKNOWN_AUTH_TRANSACTION = 14, - WLAN_STATUS_CHALLENGE_FAIL = 15, - WLAN_STATUS_AUTH_TIMEOUT = 16, - WLAN_STATUS_AP_UNABLE_TO_HANDLE_NEW_STA = 17, - WLAN_STATUS_ASSOC_DENIED_RATES = 18, - /* 802.11b */ - WLAN_STATUS_ASSOC_DENIED_NOSHORTPREAMBLE = 19, - WLAN_STATUS_ASSOC_DENIED_NOPBCC = 20, - WLAN_STATUS_ASSOC_DENIED_NOAGILITY = 21, - /* 802.11h */ - WLAN_STATUS_ASSOC_DENIED_NOSPECTRUM = 22, - WLAN_STATUS_ASSOC_REJECTED_BAD_POWER = 23, - WLAN_STATUS_ASSOC_REJECTED_BAD_SUPP_CHAN = 24, - /* 802.11g */ - WLAN_STATUS_ASSOC_DENIED_NOSHORTTIME = 25, - WLAN_STATUS_ASSOC_DENIED_NODSSSOFDM = 26, - /* 802.11w */ - WLAN_STATUS_ASSOC_REJECTED_TEMPORARILY = 30, - WLAN_STATUS_ROBUST_MGMT_FRAME_POLICY_VIOLATION = 31, - /* 802.11i */ - WLAN_STATUS_INVALID_IE = 40, - WLAN_STATUS_INVALID_GROUP_CIPHER = 41, - WLAN_STATUS_INVALID_PAIRWISE_CIPHER = 42, - WLAN_STATUS_INVALID_AKMP = 43, - WLAN_STATUS_UNSUPP_RSN_VERSION = 44, - WLAN_STATUS_INVALID_RSN_IE_CAP = 45, - WLAN_STATUS_CIPHER_SUITE_REJECTED = 46, - /* 802.11e */ - WLAN_STATUS_UNSPECIFIED_QOS = 32, - WLAN_STATUS_ASSOC_DENIED_NOBANDWIDTH = 33, - WLAN_STATUS_ASSOC_DENIED_LOWACK = 34, - WLAN_STATUS_ASSOC_DENIED_UNSUPP_QOS = 35, - WLAN_STATUS_REQUEST_DECLINED = 37, - WLAN_STATUS_INVALID_QOS_PARAM = 38, - WLAN_STATUS_CHANGE_TSPEC = 39, - WLAN_STATUS_WAIT_TS_DELAY = 47, - WLAN_STATUS_NO_DIRECT_LINK = 48, - WLAN_STATUS_STA_NOT_PRESENT = 49, - WLAN_STATUS_STA_NOT_QSTA = 50, - /* 802.11s */ - WLAN_STATUS_ANTI_CLOG_REQUIRED = 76, - WLAN_STATUS_FCG_NOT_SUPP = 78, - WLAN_STATUS_STA_NO_TBTT = 78, -}; - - -/* Reason codes */ -enum ieee80211_reasoncode { - WLAN_REASON_UNSPECIFIED = 1, - WLAN_REASON_PREV_AUTH_NOT_VALID = 2, - WLAN_REASON_DEAUTH_LEAVING = 3, - WLAN_REASON_DISASSOC_DUE_TO_INACTIVITY = 4, - WLAN_REASON_DISASSOC_AP_BUSY = 5, - WLAN_REASON_CLASS2_FRAME_FROM_NONAUTH_STA = 6, - WLAN_REASON_CLASS3_FRAME_FROM_NONASSOC_STA = 7, - WLAN_REASON_DISASSOC_STA_HAS_LEFT = 8, - WLAN_REASON_STA_REQ_ASSOC_WITHOUT_AUTH = 9, - /* 802.11h */ - WLAN_REASON_DISASSOC_BAD_POWER = 10, - WLAN_REASON_DISASSOC_BAD_SUPP_CHAN = 11, - /* 802.11i */ - WLAN_REASON_INVALID_IE = 13, - WLAN_REASON_MIC_FAILURE = 14, - WLAN_REASON_4WAY_HANDSHAKE_TIMEOUT = 15, - WLAN_REASON_GROUP_KEY_HANDSHAKE_TIMEOUT = 16, - WLAN_REASON_IE_DIFFERENT = 17, - WLAN_REASON_INVALID_GROUP_CIPHER = 18, - WLAN_REASON_INVALID_PAIRWISE_CIPHER = 19, - WLAN_REASON_INVALID_AKMP = 20, - WLAN_REASON_UNSUPP_RSN_VERSION = 21, - WLAN_REASON_INVALID_RSN_IE_CAP = 22, - WLAN_REASON_IEEE8021X_FAILED = 23, - WLAN_REASON_CIPHER_SUITE_REJECTED = 24, - /* 802.11e */ - WLAN_REASON_DISASSOC_UNSPECIFIED_QOS = 32, - WLAN_REASON_DISASSOC_QAP_NO_BANDWIDTH = 33, - WLAN_REASON_DISASSOC_LOW_ACK = 34, - WLAN_REASON_DISASSOC_QAP_EXCEED_TXOP = 35, - WLAN_REASON_QSTA_LEAVE_QBSS = 36, - WLAN_REASON_QSTA_NOT_USE = 37, - WLAN_REASON_QSTA_REQUIRE_SETUP = 38, - WLAN_REASON_QSTA_TIMEOUT = 39, - WLAN_REASON_QSTA_CIPHER_NOT_SUPP = 45, - /* 802.11s */ - WLAN_REASON_MESH_PEER_CANCELED = 52, - WLAN_REASON_MESH_MAX_PEERS = 53, - WLAN_REASON_MESH_CONFIG = 54, - WLAN_REASON_MESH_CLOSE = 55, - WLAN_REASON_MESH_MAX_RETRIES = 56, - WLAN_REASON_MESH_CONFIRM_TIMEOUT = 57, - WLAN_REASON_MESH_INVALID_GTK = 58, - WLAN_REASON_MESH_INCONSISTENT_PARAM = 59, - WLAN_REASON_MESH_INVALID_SECURITY = 60, - WLAN_REASON_MESH_PATH_ERROR = 61, - WLAN_REASON_MESH_PATH_NOFORWARD = 62, - WLAN_REASON_MESH_PATH_DEST_UNREACHABLE = 63, - WLAN_REASON_MAC_EXISTS_IN_MBSS = 64, - WLAN_REASON_MESH_CHAN_REGULATORY = 65, - WLAN_REASON_MESH_CHAN = 66, -}; - - -/* Information Element IDs */ -enum ieee80211_eid { - WLAN_EID_SSID = 0, - WLAN_EID_SUPP_RATES = 1, - WLAN_EID_FH_PARAMS = 2, - WLAN_EID_DS_PARAMS = 3, - WLAN_EID_CF_PARAMS = 4, - WLAN_EID_TIM = 5, - WLAN_EID_IBSS_PARAMS = 6, - WLAN_EID_CHALLENGE = 16, - - WLAN_EID_COUNTRY = 7, - WLAN_EID_HP_PARAMS = 8, - WLAN_EID_HP_TABLE = 9, - WLAN_EID_REQUEST = 10, - - WLAN_EID_QBSS_LOAD = 11, - WLAN_EID_EDCA_PARAM_SET = 12, - WLAN_EID_TSPEC = 13, - WLAN_EID_TCLAS = 14, - WLAN_EID_SCHEDULE = 15, - WLAN_EID_TS_DELAY = 43, - WLAN_EID_TCLAS_PROCESSING = 44, - WLAN_EID_QOS_CAPA = 46, - /* 802.11z */ - WLAN_EID_LINK_ID = 101, - /* 802.11s */ - WLAN_EID_MESH_CONFIG = 113, - WLAN_EID_MESH_ID = 114, - WLAN_EID_LINK_METRIC_REPORT = 115, - WLAN_EID_CONGESTION_NOTIFICATION = 116, - WLAN_EID_PEER_MGMT = 117, - WLAN_EID_CHAN_SWITCH_PARAM = 118, - WLAN_EID_MESH_AWAKE_WINDOW = 119, - WLAN_EID_BEACON_TIMING = 120, - WLAN_EID_MCCAOP_SETUP_REQ = 121, - WLAN_EID_MCCAOP_SETUP_RESP = 122, - WLAN_EID_MCCAOP_ADVERT = 123, - WLAN_EID_MCCAOP_TEARDOWN = 124, - WLAN_EID_GANN = 125, - WLAN_EID_RANN = 126, - WLAN_EID_PREQ = 130, - WLAN_EID_PREP = 131, - WLAN_EID_PERR = 132, - WLAN_EID_PXU = 137, - WLAN_EID_PXUC = 138, - WLAN_EID_AUTH_MESH_PEER_EXCH = 139, - WLAN_EID_MIC = 140, - - WLAN_EID_PWR_CONSTRAINT = 32, - WLAN_EID_PWR_CAPABILITY = 33, - WLAN_EID_TPC_REQUEST = 34, - WLAN_EID_TPC_REPORT = 35, - WLAN_EID_SUPPORTED_CHANNELS = 36, - WLAN_EID_CHANNEL_SWITCH = 37, - WLAN_EID_MEASURE_REQUEST = 38, - WLAN_EID_MEASURE_REPORT = 39, - WLAN_EID_QUIET = 40, - WLAN_EID_IBSS_DFS = 41, - - WLAN_EID_ERP_INFO = 42, - WLAN_EID_EXT_SUPP_RATES = 50, - - WLAN_EID_HT_CAPABILITY = 45, - WLAN_EID_HT_INFORMATION = 61, - - WLAN_EID_RSN = 48, - WLAN_EID_MMIE = 76, - WLAN_EID_WPA = 221, - WLAN_EID_GENERIC = 221, - WLAN_EID_VENDOR_SPECIFIC = 221, - WLAN_EID_QOS_PARAMETER = 222, - - WLAN_EID_AP_CHAN_REPORT = 51, - WLAN_EID_NEIGHBOR_REPORT = 52, - WLAN_EID_RCPI = 53, - WLAN_EID_BSS_AVG_ACCESS_DELAY = 63, - WLAN_EID_ANTENNA_INFO = 64, - WLAN_EID_RSNI = 65, - WLAN_EID_MEASUREMENT_PILOT_TX_INFO = 66, - WLAN_EID_BSS_AVAILABLE_CAPACITY = 67, - WLAN_EID_BSS_AC_ACCESS_DELAY = 68, - WLAN_EID_RRM_ENABLED_CAPABILITIES = 70, - WLAN_EID_MULTIPLE_BSSID = 71, - WLAN_EID_BSS_COEX_2040 = 72, - WLAN_EID_OVERLAP_BSS_SCAN_PARAM = 74, - WLAN_EID_EXT_CAPABILITY = 127, - - WLAN_EID_MOBILITY_DOMAIN = 54, - WLAN_EID_FAST_BSS_TRANSITION = 55, - WLAN_EID_TIMEOUT_INTERVAL = 56, - WLAN_EID_RIC_DATA = 57, - WLAN_EID_RIC_DESCRIPTOR = 75, - - WLAN_EID_DSE_REGISTERED_LOCATION = 58, - WLAN_EID_SUPPORTED_REGULATORY_CLASSES = 59, - WLAN_EID_EXT_CHANSWITCH_ANN = 60, -}; - -/* Action category code */ -enum ieee80211_category { - WLAN_CATEGORY_SPECTRUM_MGMT = 0, - WLAN_CATEGORY_QOS = 1, - WLAN_CATEGORY_DLS = 2, - WLAN_CATEGORY_BACK = 3, - WLAN_CATEGORY_PUBLIC = 4, - WLAN_CATEGORY_HT = 7, - WLAN_CATEGORY_SA_QUERY = 8, - WLAN_CATEGORY_PROTECTED_DUAL_OF_ACTION = 9, - WLAN_CATEGORY_TDLS = 12, - WLAN_CATEGORY_MESH_ACTION = 13, - WLAN_CATEGORY_MULTIHOP_ACTION = 14, - WLAN_CATEGORY_SELF_PROTECTED = 15, - WLAN_CATEGORY_WMM = 17, - WLAN_CATEGORY_VENDOR_SPECIFIC_PROTECTED = 126, - WLAN_CATEGORY_VENDOR_SPECIFIC = 127, -}; - -/* SPECTRUM_MGMT action code */ -enum ieee80211_spectrum_mgmt_actioncode { - WLAN_ACTION_SPCT_MSR_REQ = 0, - WLAN_ACTION_SPCT_MSR_RPRT = 1, - WLAN_ACTION_SPCT_TPC_REQ = 2, - WLAN_ACTION_SPCT_TPC_RPRT = 3, - WLAN_ACTION_SPCT_CHL_SWITCH = 4, -}; - -/* HT action codes */ -enum ieee80211_ht_actioncode { - WLAN_HT_ACTION_NOTIFY_CHANWIDTH = 0, - WLAN_HT_ACTION_SMPS = 1, - WLAN_HT_ACTION_PSMP = 2, - WLAN_HT_ACTION_PCO_PHASE = 3, - WLAN_HT_ACTION_CSI = 4, - WLAN_HT_ACTION_NONCOMPRESSED_BF = 5, - WLAN_HT_ACTION_COMPRESSED_BF = 6, - WLAN_HT_ACTION_ASEL_IDX_FEEDBACK = 7, -}; - -/* Self Protected Action codes */ -enum ieee80211_self_protected_actioncode { - WLAN_SP_RESERVED = 0, - WLAN_SP_MESH_PEERING_OPEN = 1, - WLAN_SP_MESH_PEERING_CONFIRM = 2, - WLAN_SP_MESH_PEERING_CLOSE = 3, - WLAN_SP_MGK_INFORM = 4, - WLAN_SP_MGK_ACK = 5, -}; - -/* Mesh action codes */ -enum ieee80211_mesh_actioncode { - WLAN_MESH_ACTION_LINK_METRIC_REPORT, - WLAN_MESH_ACTION_HWMP_PATH_SELECTION, - WLAN_MESH_ACTION_GATE_ANNOUNCEMENT, - WLAN_MESH_ACTION_CONGESTION_CONTROL_NOTIFICATION, - WLAN_MESH_ACTION_MCCA_SETUP_REQUEST, - WLAN_MESH_ACTION_MCCA_SETUP_REPLY, - WLAN_MESH_ACTION_MCCA_ADVERTISEMENT_REQUEST, - WLAN_MESH_ACTION_MCCA_ADVERTISEMENT, - WLAN_MESH_ACTION_MCCA_TEARDOWN, - WLAN_MESH_ACTION_TBTT_ADJUSTMENT_REQUEST, - WLAN_MESH_ACTION_TBTT_ADJUSTMENT_RESPONSE, -}; - -/* Security key length */ -enum ieee80211_key_len { - WLAN_KEY_LEN_WEP40 = 5, - WLAN_KEY_LEN_WEP104 = 13, - WLAN_KEY_LEN_CCMP = 16, - WLAN_KEY_LEN_TKIP = 32, - WLAN_KEY_LEN_AES_CMAC = 16, -}; - -/* Public action codes */ -enum ieee80211_pub_actioncode { - WLAN_PUB_ACTION_TDLS_DISCOVER_RES = 14, -}; - -/* TDLS action codes */ -enum ieee80211_tdls_actioncode { - WLAN_TDLS_SETUP_REQUEST = 0, - WLAN_TDLS_SETUP_RESPONSE = 1, - WLAN_TDLS_SETUP_CONFIRM = 2, - WLAN_TDLS_TEARDOWN = 3, - WLAN_TDLS_PEER_TRAFFIC_INDICATION = 4, - WLAN_TDLS_CHANNEL_SWITCH_REQUEST = 5, - WLAN_TDLS_CHANNEL_SWITCH_RESPONSE = 6, - WLAN_TDLS_PEER_PSM_REQUEST = 7, - WLAN_TDLS_PEER_PSM_RESPONSE = 8, - WLAN_TDLS_PEER_TRAFFIC_RESPONSE = 9, - WLAN_TDLS_DISCOVERY_REQUEST = 10, -}; - -/* - * TDLS capabililites to be enabled in the 5th byte of the - * @WLAN_EID_EXT_CAPABILITY information element - */ -#define WLAN_EXT_CAPA5_TDLS_ENABLED BIT(5) -#define WLAN_EXT_CAPA5_TDLS_PROHIBITED BIT(6) - -/* TDLS specific payload type in the LLC/SNAP header */ -#define WLAN_TDLS_SNAP_RFTYPE 0x2 - -/** - * enum - mesh path selection protocol identifier - * - * @IEEE80211_PATH_PROTOCOL_HWMP: the default path selection protocol - * @IEEE80211_PATH_PROTOCOL_VENDOR: a vendor specific protocol that will - * be specified in a vendor specific information element - */ -enum { - IEEE80211_PATH_PROTOCOL_HWMP = 0, - IEEE80211_PATH_PROTOCOL_VENDOR = 255, -}; - -/** - * enum - mesh path selection metric identifier - * - * @IEEE80211_PATH_METRIC_AIRTIME: the default path selection metric - * @IEEE80211_PATH_METRIC_VENDOR: a vendor specific metric that will be - * specified in a vendor specific information element - */ -enum { - IEEE80211_PATH_METRIC_AIRTIME = 0, - IEEE80211_PATH_METRIC_VENDOR = 255, -}; - - -/* - * IEEE 802.11-2007 7.3.2.9 Country information element - * - * Minimum length is 8 octets, ie len must be evenly - * divisible by 2 - */ - -/* Although the spec says 8 I'm seeing 6 in practice */ -#define IEEE80211_COUNTRY_IE_MIN_LEN 6 - -/* The Country String field of the element shall be 3 octets in length */ -#define IEEE80211_COUNTRY_STRING_LEN 3 - -/* - * For regulatory extension stuff see IEEE 802.11-2007 - * Annex I (page 1141) and Annex J (page 1147). Also - * review 7.3.2.9. - * - * When dot11RegulatoryClassesRequired is true and the - * first_channel/reg_extension_id is >= 201 then the IE - * compromises of the 'ext' struct represented below: - * - * - Regulatory extension ID - when generating IE this just needs - * to be monotonically increasing for each triplet passed in - * the IE - * - Regulatory class - index into set of rules - * - Coverage class - index into air propagation time (Table 7-27), - * in microseconds, you can compute the air propagation time from - * the index by multiplying by 3, so index 10 yields a propagation - * of 10 us. Valid values are 0-31, values 32-255 are not defined - * yet. A value of 0 inicates air propagation of <= 1 us. - * - * See also Table I.2 for Emission limit sets and table - * I.3 for Behavior limit sets. Table J.1 indicates how to map - * a reg_class to an emission limit set and behavior limit set. - */ -#define IEEE80211_COUNTRY_EXTENSION_ID 201 - -/* - * Channels numbers in the IE must be monotonically increasing - * if dot11RegulatoryClassesRequired is not true. - * - * If dot11RegulatoryClassesRequired is true consecutive - * subband triplets following a regulatory triplet shall - * have monotonically increasing first_channel number fields. - * - * Channel numbers shall not overlap. - * - * Note that max_power is signed. - */ -struct ieee80211_country_ie_triplet { - union { - struct { - u8 first_channel; - u8 num_channels; - s8 max_power; - } __attribute__ ((packed)) chans; - struct { - u8 reg_extension_id; - u8 reg_class; - u8 coverage_class; - } __attribute__ ((packed)) ext; - }; -} __attribute__ ((packed)); - -enum ieee80211_timeout_interval_type { - WLAN_TIMEOUT_REASSOC_DEADLINE = 1 /* 802.11r */, - WLAN_TIMEOUT_KEY_LIFETIME = 2 /* 802.11r */, - WLAN_TIMEOUT_ASSOC_COMEBACK = 3 /* 802.11w */, -}; - -/* BACK action code */ -enum ieee80211_back_actioncode { - WLAN_ACTION_ADDBA_REQ = 0, - WLAN_ACTION_ADDBA_RESP = 1, - WLAN_ACTION_DELBA = 2, -}; - -/* BACK (block-ack) parties */ -enum ieee80211_back_parties { - WLAN_BACK_RECIPIENT = 0, - WLAN_BACK_INITIATOR = 1, -}; - -/* SA Query action */ -enum ieee80211_sa_query_action { - WLAN_ACTION_SA_QUERY_REQUEST = 0, - WLAN_ACTION_SA_QUERY_RESPONSE = 1, -}; - - -/* cipher suite selectors */ -#define WLAN_CIPHER_SUITE_USE_GROUP 0x000FAC00 -#define WLAN_CIPHER_SUITE_WEP40 0x000FAC01 -#define WLAN_CIPHER_SUITE_TKIP 0x000FAC02 -/* reserved: 0x000FAC03 */ -#define WLAN_CIPHER_SUITE_CCMP 0x000FAC04 -#define WLAN_CIPHER_SUITE_WEP104 0x000FAC05 -#define WLAN_CIPHER_SUITE_AES_CMAC 0x000FAC06 - -#define WLAN_CIPHER_SUITE_SMS4 0x00147201 - -/* AKM suite selectors */ -#define WLAN_AKM_SUITE_8021X 0x000FAC01 -#define WLAN_AKM_SUITE_PSK 0x000FAC02 -#define WLAN_AKM_SUITE_SAE 0x000FAC08 -#define WLAN_AKM_SUITE_FT_OVER_SAE 0x000FAC09 - -#define WLAN_MAX_KEY_LEN 32 - -#define WLAN_PMKID_LEN 16 - -#define WLAN_OUI_WFA 0x506f9a -#define WLAN_OUI_TYPE_WFA_P2P 9 - -/* - * WMM/802.11e Tspec Element - */ -#define IEEE80211_WMM_IE_TSPEC_TID_MASK 0x0F -#define IEEE80211_WMM_IE_TSPEC_TID_SHIFT 1 - -enum ieee80211_tspec_status_code { - IEEE80211_TSPEC_STATUS_ADMISS_ACCEPTED = 0, - IEEE80211_TSPEC_STATUS_ADDTS_INVAL_PARAMS = 0x1, -}; - -struct ieee80211_tspec_ie { - u8 element_id; - u8 len; - u8 oui[3]; - u8 oui_type; - u8 oui_subtype; - u8 version; - __le16 tsinfo; - u8 tsinfo_resvd; - __le16 nominal_msdu; - __le16 max_msdu; - __le32 min_service_int; - __le32 max_service_int; - __le32 inactivity_int; - __le32 suspension_int; - __le32 service_start_time; - __le32 min_data_rate; - __le32 mean_data_rate; - __le32 peak_data_rate; - __le32 max_burst_size; - __le32 delay_bound; - __le32 min_phy_rate; - __le16 sba; - __le16 medium_time; -} __packed; - -/** - * ieee80211_get_qos_ctl - get pointer to qos control bytes - * @hdr: the frame - * - * The qos ctrl bytes come after the frame_control, duration, seq_num - * and 3 or 4 addresses of length ETH_ALEN. - * 3 addr: 2 + 2 + 2 + 3*6 = 24 - * 4 addr: 2 + 2 + 2 + 4*6 = 30 - */ -static inline u8 *ieee80211_get_qos_ctl(struct ieee80211_hdr *hdr) -{ - if (ieee80211_has_a4(hdr->frame_control)) - return (u8 *)hdr + 30; - else - return (u8 *)hdr + 24; -} - -/** - * ieee80211_get_SA - get pointer to SA - * @hdr: the frame - * - * Given an 802.11 frame, this function returns the offset - * to the source address (SA). It does not verify that the - * header is long enough to contain the address, and the - * header must be long enough to contain the frame control - * field. - */ -static inline u8 *ieee80211_get_SA(struct ieee80211_hdr *hdr) -{ - if (ieee80211_has_a4(hdr->frame_control)) - return hdr->addr4; - if (ieee80211_has_fromds(hdr->frame_control)) - return hdr->addr3; - return hdr->addr2; -} - -/** - * ieee80211_get_DA - get pointer to DA - * @hdr: the frame - * - * Given an 802.11 frame, this function returns the offset - * to the destination address (DA). It does not verify that - * the header is long enough to contain the address, and the - * header must be long enough to contain the frame control - * field. - */ -static inline u8 *ieee80211_get_DA(struct ieee80211_hdr *hdr) -{ - if (ieee80211_has_tods(hdr->frame_control)) - return hdr->addr3; - else - return hdr->addr1; -} - -/** - * ieee80211_is_robust_mgmt_frame - check if frame is a robust management frame - * @hdr: the frame (buffer must include at least the first octet of payload) - */ -static inline bool ieee80211_is_robust_mgmt_frame(struct ieee80211_hdr *hdr) -{ - if (ieee80211_is_disassoc(hdr->frame_control) || - ieee80211_is_deauth(hdr->frame_control)) - return true; - - if (ieee80211_is_action(hdr->frame_control)) { - u8 *category; - - /* - * Action frames, excluding Public Action frames, are Robust - * Management Frames. However, if we are looking at a Protected - * frame, skip the check since the data may be encrypted and - * the frame has already been found to be a Robust Management - * Frame (by the other end). - */ - if (ieee80211_has_protected(hdr->frame_control)) - return true; - category = ((u8 *) hdr) + 24; - return *category != WLAN_CATEGORY_PUBLIC && - *category != WLAN_CATEGORY_HT && - *category != WLAN_CATEGORY_SELF_PROTECTED && - *category != WLAN_CATEGORY_VENDOR_SPECIFIC; - } - - return false; -} - -/** - * ieee80211_is_public_action - check if frame is a public action frame - * @hdr: the frame - * @len: length of the frame - */ -static inline bool ieee80211_is_public_action(struct ieee80211_hdr *hdr, - size_t len) -{ - struct ieee80211_mgmt *mgmt = (void *)hdr; - - if (len < IEEE80211_MIN_ACTION_SIZE) - return false; - if (!ieee80211_is_action(hdr->frame_control)) - return false; - return mgmt->u.action.category == WLAN_CATEGORY_PUBLIC; -} - -/** - * ieee80211_fhss_chan_to_freq - get channel frequency - * @channel: the FHSS channel - * - * Convert IEEE802.11 FHSS channel to frequency (MHz) - * Ref IEEE 802.11-2007 section 14.6 - */ -static inline int ieee80211_fhss_chan_to_freq(int channel) -{ - if ((channel > 1) && (channel < 96)) - return channel + 2400; - else - return -1; -} - -/** - * ieee80211_freq_to_fhss_chan - get channel - * @freq: the channels frequency - * - * Convert frequency (MHz) to IEEE802.11 FHSS channel - * Ref IEEE 802.11-2007 section 14.6 - */ -static inline int ieee80211_freq_to_fhss_chan(int freq) -{ - if ((freq > 2401) && (freq < 2496)) - return freq - 2400; - else - return -1; -} - -/** - * ieee80211_dsss_chan_to_freq - get channel center frequency - * @channel: the DSSS channel - * - * Convert IEEE802.11 DSSS channel to the center frequency (MHz). - * Ref IEEE 802.11-2007 section 15.6 - */ -static inline int ieee80211_dsss_chan_to_freq(int channel) -{ - if ((channel > 0) && (channel < 14)) - return 2407 + (channel * 5); - else if (channel == 14) - return 2484; - else - return -1; -} - -/** - * ieee80211_freq_to_dsss_chan - get channel - * @freq: the frequency - * - * Convert frequency (MHz) to IEEE802.11 DSSS channel - * Ref IEEE 802.11-2007 section 15.6 - * - * This routine selects the channel with the closest center frequency. - */ -static inline int ieee80211_freq_to_dsss_chan(int freq) -{ - if ((freq >= 2410) && (freq < 2475)) - return (freq - 2405) / 5; - else if ((freq >= 2482) && (freq < 2487)) - return 14; - else - return -1; -} - -/* Convert IEEE802.11 HR DSSS channel to frequency (MHz) and back - * Ref IEEE 802.11-2007 section 18.4.6.2 - * - * The channels and frequencies are the same as those defined for DSSS - */ -#define ieee80211_hr_chan_to_freq(chan) ieee80211_dsss_chan_to_freq(chan) -#define ieee80211_freq_to_hr_chan(freq) ieee80211_freq_to_dsss_chan(freq) - -/* Convert IEEE802.11 ERP channel to frequency (MHz) and back - * Ref IEEE 802.11-2007 section 19.4.2 - */ -#define ieee80211_erp_chan_to_freq(chan) ieee80211_hr_chan_to_freq(chan) -#define ieee80211_freq_to_erp_chan(freq) ieee80211_freq_to_hr_chan(freq) - -/** - * ieee80211_ofdm_chan_to_freq - get channel center frequency - * @s_freq: starting frequency == (dotChannelStartingFactor/2) MHz - * @channel: the OFDM channel - * - * Convert IEEE802.11 OFDM channel to center frequency (MHz) - * Ref IEEE 802.11-2007 section 17.3.8.3.2 - */ -static inline int ieee80211_ofdm_chan_to_freq(int s_freq, int channel) -{ - if ((channel > 0) && (channel <= 200) && - (s_freq >= 4000)) - return s_freq + (channel * 5); - else - return -1; -} - -/** - * ieee80211_freq_to_ofdm_channel - get channel - * @s_freq: starting frequency == (dotChannelStartingFactor/2) MHz - * @freq: the frequency - * - * Convert frequency (MHz) to IEEE802.11 OFDM channel - * Ref IEEE 802.11-2007 section 17.3.8.3.2 - * - * This routine selects the channel with the closest center frequency. - */ -static inline int ieee80211_freq_to_ofdm_chan(int s_freq, int freq) -{ - if ((freq > (s_freq + 2)) && (freq <= (s_freq + 1202)) && - (s_freq >= 4000)) - return (freq + 2 - s_freq) / 5; - else - return -1; -} - -/** - * ieee80211_tu_to_usec - convert time units (TU) to microseconds - * @tu: the TUs - */ -static inline unsigned long ieee80211_tu_to_usec(unsigned long tu) -{ - return 1024 * tu; -} - -/** - * ieee80211_check_tim - check if AID bit is set in TIM - * @tim: the TIM IE - * @tim_len: length of the TIM IE - * @aid: the AID to look for - */ -static inline bool ieee80211_check_tim(struct ieee80211_tim_ie *tim, - u8 tim_len, u16 aid) -{ - u8 mask; - u8 index, indexn1, indexn2; - - if (unlikely(!tim || tim_len < sizeof(*tim))) - return false; - - aid &= 0x3fff; - index = aid / 8; - mask = 1 << (aid & 7); - - indexn1 = tim->bitmap_ctrl & 0xfe; - indexn2 = tim_len + indexn1 - 4; - - if (index < indexn1 || index > indexn2) - return false; - - index -= indexn1; - - return !!(tim->virtual_map[index] & mask); -} - -#endif /* LINUX_IEEE80211_H */ diff --git a/openairITS/mac/DOT11/include/linux/kfifo.h b/openairITS/mac/DOT11/include/linux/kfifo.h deleted file mode 100644 index e30bb546a0..0000000000 --- a/openairITS/mac/DOT11/include/linux/kfifo.h +++ /dev/null @@ -1,857 +0,0 @@ -#include -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,36)) -#include_next -#else -/* - * A generic kernel FIFO implementation - * - * Copyright (C) 2009/2010 Stefani Seibold - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - */ - -#ifndef _LINUX_KFIFO_H -#define _LINUX_KFIFO_H - -/* - * How to porting drivers to the new generic FIFO API: - * - * - Modify the declaration of the "struct kfifo *" object into a - * in-place "struct kfifo" object - * - Init the in-place object with kfifo_alloc() or kfifo_init() - * Note: The address of the in-place "struct kfifo" object must be - * passed as the first argument to this functions - * - Replace the use of __kfifo_put into kfifo_in and __kfifo_get - * into kfifo_out - * - Replace the use of kfifo_put into kfifo_in_spinlocked and kfifo_get - * into kfifo_out_spinlocked - * Note: the spinlock pointer formerly passed to kfifo_init/kfifo_alloc - * must be passed now to the kfifo_in_spinlocked and kfifo_out_spinlocked - * as the last parameter - * - The formerly __kfifo_* functions are renamed into kfifo_* - */ - -/* - * Note about locking : There is no locking required until only * one reader - * and one writer is using the fifo and no kfifo_reset() will be * called - * kfifo_reset_out() can be safely used, until it will be only called - * in the reader thread. - * For multiple writer and one reader there is only a need to lock the writer. - * And vice versa for only one writer and multiple reader there is only a need - * to lock the reader. - */ - -#include -#include -#include -#include - -struct __kfifo { - unsigned int in; - unsigned int out; - unsigned int mask; - unsigned int esize; - void *data; -}; - -#define __STRUCT_KFIFO_COMMON(datatype, recsize, ptrtype) \ - union { \ - struct __kfifo kfifo; \ - datatype *type; \ - char (*rectype)[recsize]; \ - ptrtype *ptr; \ - const ptrtype *ptr_const; \ - } - -#define __STRUCT_KFIFO(type, size, recsize, ptrtype) \ -{ \ - __STRUCT_KFIFO_COMMON(type, recsize, ptrtype); \ - type buf[((size < 2) || (size & (size - 1))) ? -1 : size]; \ -} - -#define STRUCT_KFIFO(type, size) \ - struct __STRUCT_KFIFO(type, size, 0, type) - -#define __STRUCT_KFIFO_PTR(type, recsize, ptrtype) \ -{ \ - __STRUCT_KFIFO_COMMON(type, recsize, ptrtype); \ - type buf[0]; \ -} - -#define STRUCT_KFIFO_PTR(type) \ - struct __STRUCT_KFIFO_PTR(type, 0, type) - -/* - * define compatibility "struct kfifo" for dynamic allocated fifos - */ -struct kfifo __STRUCT_KFIFO_PTR(unsigned char, 0, void); - -#define STRUCT_KFIFO_REC_1(size) \ - struct __STRUCT_KFIFO(unsigned char, size, 1, void) - -#define STRUCT_KFIFO_REC_2(size) \ - struct __STRUCT_KFIFO(unsigned char, size, 2, void) - -/* - * define kfifo_rec types - */ -struct kfifo_rec_ptr_1 __STRUCT_KFIFO_PTR(unsigned char, 1, void); -struct kfifo_rec_ptr_2 __STRUCT_KFIFO_PTR(unsigned char, 2, void); - -/* - * helper macro to distinguish between real in place fifo where the fifo - * array is a part of the structure and the fifo type where the array is - * outside of the fifo structure. - */ -#define __is_kfifo_ptr(fifo) (sizeof(*fifo) == sizeof(struct __kfifo)) - -/** - * DECLARE_KFIFO_PTR - macro to declare a fifo pointer object - * @fifo: name of the declared fifo - * @type: type of the fifo elements - */ -#define DECLARE_KFIFO_PTR(fifo, type) STRUCT_KFIFO_PTR(type) fifo - -/** - * DECLARE_KFIFO - macro to declare a fifo object - * @fifo: name of the declared fifo - * @type: type of the fifo elements - * @size: the number of elements in the fifo, this must be a power of 2 - */ -#define DECLARE_KFIFO(fifo, type, size) STRUCT_KFIFO(type, size) fifo - -/** - * INIT_KFIFO - Initialize a fifo declared by DECLARE_KFIFO - * @fifo: name of the declared fifo datatype - */ -#define INIT_KFIFO(fifo) \ -(void)({ \ - typeof(&(fifo)) __tmp = &(fifo); \ - struct __kfifo *__kfifo = &__tmp->kfifo; \ - __kfifo->in = 0; \ - __kfifo->out = 0; \ - __kfifo->mask = __is_kfifo_ptr(__tmp) ? 0 : ARRAY_SIZE(__tmp->buf) - 1;\ - __kfifo->esize = sizeof(*__tmp->buf); \ - __kfifo->data = __is_kfifo_ptr(__tmp) ? NULL : __tmp->buf; \ -}) - -/** - * DEFINE_KFIFO - macro to define and initialize a fifo - * @fifo: name of the declared fifo datatype - * @type: type of the fifo elements - * @size: the number of elements in the fifo, this must be a power of 2 - * - * Note: the macro can be used for global and local fifo data type variables. - */ -#define DEFINE_KFIFO(fifo, type, size) \ - DECLARE_KFIFO(fifo, type, size) = \ - (typeof(fifo)) { \ - { \ - { \ - .in = 0, \ - .out = 0, \ - .mask = __is_kfifo_ptr(&(fifo)) ? \ - 0 : \ - ARRAY_SIZE((fifo).buf) - 1, \ - .esize = sizeof(*(fifo).buf), \ - .data = __is_kfifo_ptr(&(fifo)) ? \ - NULL : \ - (fifo).buf, \ - } \ - } \ - } - - -static inline unsigned int __must_check -__kfifo_uint_must_check_helper(unsigned int val) -{ - return val; -} - -static inline int __must_check -__kfifo_int_must_check_helper(int val) -{ - return val; -} - -/** - * kfifo_initialized - Check if the fifo is initialized - * @fifo: address of the fifo to check - * - * Return %true if fifo is initialized, otherwise %false. - * Assumes the fifo was 0 before. - */ -#define kfifo_initialized(fifo) ((fifo)->kfifo.mask) - -/** - * kfifo_esize - returns the size of the element managed by the fifo - * @fifo: address of the fifo to be used - */ -#define kfifo_esize(fifo) ((fifo)->kfifo.esize) - -/** - * kfifo_recsize - returns the size of the record length field - * @fifo: address of the fifo to be used - */ -#define kfifo_recsize(fifo) (sizeof(*(fifo)->rectype)) - -/** - * kfifo_size - returns the size of the fifo in elements - * @fifo: address of the fifo to be used - */ -#define kfifo_size(fifo) ((fifo)->kfifo.mask + 1) - -/** - * kfifo_reset - removes the entire fifo content - * @fifo: address of the fifo to be used - * - * Note: usage of kfifo_reset() is dangerous. It should be only called when the - * fifo is exclusived locked or when it is secured that no other thread is - * accessing the fifo. - */ -#define kfifo_reset(fifo) \ -(void)({ \ - typeof((fifo) + 1) __tmp = (fifo); \ - __tmp->kfifo.in = __tmp->kfifo.out = 0; \ -}) - -/** - * kfifo_reset_out - skip fifo content - * @fifo: address of the fifo to be used - * - * Note: The usage of kfifo_reset_out() is safe until it will be only called - * from the reader thread and there is only one concurrent reader. Otherwise - * it is dangerous and must be handled in the same way as kfifo_reset(). - */ -#define kfifo_reset_out(fifo) \ -(void)({ \ - typeof((fifo) + 1) __tmp = (fifo); \ - __tmp->kfifo.out = __tmp->kfifo.in; \ -}) - -/** - * kfifo_len - returns the number of used elements in the fifo - * @fifo: address of the fifo to be used - */ -#define kfifo_len(fifo) \ -({ \ - typeof((fifo) + 1) __tmpl = (fifo); \ - __tmpl->kfifo.in - __tmpl->kfifo.out; \ -}) - -/** - * kfifo_is_empty - returns true if the fifo is empty - * @fifo: address of the fifo to be used - */ -#define kfifo_is_empty(fifo) \ -({ \ - typeof((fifo) + 1) __tmpq = (fifo); \ - __tmpq->kfifo.in == __tmpq->kfifo.out; \ -}) - -/** - * kfifo_is_full - returns true if the fifo is full - * @fifo: address of the fifo to be used - */ -#define kfifo_is_full(fifo) \ -({ \ - typeof((fifo) + 1) __tmpq = (fifo); \ - kfifo_len(__tmpq) > __tmpq->kfifo.mask; \ -}) - -/** - * kfifo_avail - returns the number of unused elements in the fifo - * @fifo: address of the fifo to be used - */ -#define kfifo_avail(fifo) \ -__kfifo_uint_must_check_helper( \ -({ \ - typeof((fifo) + 1) __tmpq = (fifo); \ - const size_t __recsize = sizeof(*__tmpq->rectype); \ - unsigned int __avail = kfifo_size(__tmpq) - kfifo_len(__tmpq); \ - (__recsize) ? ((__avail <= __recsize) ? 0 : \ - __kfifo_max_r(__avail - __recsize, __recsize)) : \ - __avail; \ -}) \ -) - -/** - * kfifo_skip - skip output data - * @fifo: address of the fifo to be used - */ -#define kfifo_skip(fifo) \ -(void)({ \ - typeof((fifo) + 1) __tmp = (fifo); \ - const size_t __recsize = sizeof(*__tmp->rectype); \ - struct __kfifo *__kfifo = &__tmp->kfifo; \ - if (__recsize) \ - __kfifo_skip_r(__kfifo, __recsize); \ - else \ - __kfifo->out++; \ -}) - -/** - * kfifo_peek_len - gets the size of the next fifo record - * @fifo: address of the fifo to be used - * - * This function returns the size of the next fifo record in number of bytes. - */ -#define kfifo_peek_len(fifo) \ -__kfifo_uint_must_check_helper( \ -({ \ - typeof((fifo) + 1) __tmp = (fifo); \ - const size_t __recsize = sizeof(*__tmp->rectype); \ - struct __kfifo *__kfifo = &__tmp->kfifo; \ - (!__recsize) ? kfifo_len(__tmp) * sizeof(*__tmp->type) : \ - __kfifo_len_r(__kfifo, __recsize); \ -}) \ -) - -/** - * kfifo_alloc - dynamically allocates a new fifo buffer - * @fifo: pointer to the fifo - * @size: the number of elements in the fifo, this must be a power of 2 - * @gfp_mask: get_free_pages mask, passed to kmalloc() - * - * This macro dynamically allocates a new fifo buffer. - * - * The numer of elements will be rounded-up to a power of 2. - * The fifo will be release with kfifo_free(). - * Return 0 if no error, otherwise an error code. - */ -#define kfifo_alloc(fifo, size, gfp_mask) \ -__kfifo_int_must_check_helper( \ -({ \ - typeof((fifo) + 1) __tmp = (fifo); \ - struct __kfifo *__kfifo = &__tmp->kfifo; \ - __is_kfifo_ptr(__tmp) ? \ - __kfifo_alloc(__kfifo, size, sizeof(*__tmp->type), gfp_mask) : \ - -EINVAL; \ -}) \ -) - -/** - * kfifo_free - frees the fifo - * @fifo: the fifo to be freed - */ -#define kfifo_free(fifo) \ -({ \ - typeof((fifo) + 1) __tmp = (fifo); \ - struct __kfifo *__kfifo = &__tmp->kfifo; \ - if (__is_kfifo_ptr(__tmp)) \ - __kfifo_free(__kfifo); \ -}) - -/** - * kfifo_init - initialize a fifo using a preallocated buffer - * @fifo: the fifo to assign the buffer - * @buffer: the preallocated buffer to be used - * @size: the size of the internal buffer, this have to be a power of 2 - * - * This macro initialize a fifo using a preallocated buffer. - * - * The numer of elements will be rounded-up to a power of 2. - * Return 0 if no error, otherwise an error code. - */ -#define kfifo_init(fifo, buffer, size) \ -({ \ - typeof((fifo) + 1) __tmp = (fifo); \ - struct __kfifo *__kfifo = &__tmp->kfifo; \ - __is_kfifo_ptr(__tmp) ? \ - __kfifo_init(__kfifo, buffer, size, sizeof(*__tmp->type)) : \ - -EINVAL; \ -}) - -/** - * kfifo_put - put data into the fifo - * @fifo: address of the fifo to be used - * @val: the data to be added - * - * This macro copies the given value into the fifo. - * It returns 0 if the fifo was full. Otherwise it returns the number - * processed elements. - * - * Note that with only one concurrent reader and one concurrent - * writer, you don't need extra locking to use these macro. - */ -#define kfifo_put(fifo, val) \ -({ \ - typeof((fifo) + 1) __tmp = (fifo); \ - typeof((val) + 1) __val = (val); \ - unsigned int __ret; \ - const size_t __recsize = sizeof(*__tmp->rectype); \ - struct __kfifo *__kfifo = &__tmp->kfifo; \ - if (0) { \ - typeof(__tmp->ptr_const) __dummy __attribute__ ((unused)); \ - __dummy = (typeof(__val))NULL; \ - } \ - if (__recsize) \ - __ret = __kfifo_in_r(__kfifo, __val, sizeof(*__val), \ - __recsize); \ - else { \ - __ret = !kfifo_is_full(__tmp); \ - if (__ret) { \ - (__is_kfifo_ptr(__tmp) ? \ - ((typeof(__tmp->type))__kfifo->data) : \ - (__tmp->buf) \ - )[__kfifo->in & __tmp->kfifo.mask] = \ - *(typeof(__tmp->type))__val; \ - smp_wmb(); \ - __kfifo->in++; \ - } \ - } \ - __ret; \ -}) - -/** - * kfifo_get - get data from the fifo - * @fifo: address of the fifo to be used - * @val: the var where to store the data to be added - * - * This macro reads the data from the fifo. - * It returns 0 if the fifo was empty. Otherwise it returns the number - * processed elements. - * - * Note that with only one concurrent reader and one concurrent - * writer, you don't need extra locking to use these macro. - */ -#define kfifo_get(fifo, val) \ -__kfifo_uint_must_check_helper( \ -({ \ - typeof((fifo) + 1) __tmp = (fifo); \ - typeof((val) + 1) __val = (val); \ - unsigned int __ret; \ - const size_t __recsize = sizeof(*__tmp->rectype); \ - struct __kfifo *__kfifo = &__tmp->kfifo; \ - if (0) \ - __val = (typeof(__tmp->ptr))0; \ - if (__recsize) \ - __ret = __kfifo_out_r(__kfifo, __val, sizeof(*__val), \ - __recsize); \ - else { \ - __ret = !kfifo_is_empty(__tmp); \ - if (__ret) { \ - *(typeof(__tmp->type))__val = \ - (__is_kfifo_ptr(__tmp) ? \ - ((typeof(__tmp->type))__kfifo->data) : \ - (__tmp->buf) \ - )[__kfifo->out & __tmp->kfifo.mask]; \ - smp_wmb(); \ - __kfifo->out++; \ - } \ - } \ - __ret; \ -}) \ -) - -/** - * kfifo_peek - get data from the fifo without removing - * @fifo: address of the fifo to be used - * @val: the var where to store the data to be added - * - * This reads the data from the fifo without removing it from the fifo. - * It returns 0 if the fifo was empty. Otherwise it returns the number - * processed elements. - * - * Note that with only one concurrent reader and one concurrent - * writer, you don't need extra locking to use these macro. - */ -#define kfifo_peek(fifo, val) \ -__kfifo_uint_must_check_helper( \ -({ \ - typeof((fifo) + 1) __tmp = (fifo); \ - typeof((val) + 1) __val = (val); \ - unsigned int __ret; \ - const size_t __recsize = sizeof(*__tmp->rectype); \ - struct __kfifo *__kfifo = &__tmp->kfifo; \ - if (0) \ - __val = (typeof(__tmp->ptr))NULL; \ - if (__recsize) \ - __ret = __kfifo_out_peek_r(__kfifo, __val, sizeof(*__val), \ - __recsize); \ - else { \ - __ret = !kfifo_is_empty(__tmp); \ - if (__ret) { \ - *(typeof(__tmp->type))__val = \ - (__is_kfifo_ptr(__tmp) ? \ - ((typeof(__tmp->type))__kfifo->data) : \ - (__tmp->buf) \ - )[__kfifo->out & __tmp->kfifo.mask]; \ - smp_wmb(); \ - } \ - } \ - __ret; \ -}) \ -) - -/** - * kfifo_in - put data into the fifo - * @fifo: address of the fifo to be used - * @buf: the data to be added - * @n: number of elements to be added - * - * This macro copies the given buffer into the fifo and returns the - * number of copied elements. - * - * Note that with only one concurrent reader and one concurrent - * writer, you don't need extra locking to use these macro. - */ -#define kfifo_in(fifo, buf, n) \ -({ \ - typeof((fifo) + 1) __tmp = (fifo); \ - typeof((buf) + 1) __buf = (buf); \ - unsigned long __n = (n); \ - const size_t __recsize = sizeof(*__tmp->rectype); \ - struct __kfifo *__kfifo = &__tmp->kfifo; \ - if (0) { \ - typeof(__tmp->ptr_const) __dummy __attribute__ ((unused)); \ - __dummy = (typeof(__buf))NULL; \ - } \ - (__recsize) ?\ - __kfifo_in_r(__kfifo, __buf, __n, __recsize) : \ - __kfifo_in(__kfifo, __buf, __n); \ -}) - -/** - * kfifo_in_spinlocked - put data into the fifo using a spinlock for locking - * @fifo: address of the fifo to be used - * @buf: the data to be added - * @n: number of elements to be added - * @lock: pointer to the spinlock to use for locking - * - * This macro copies the given values buffer into the fifo and returns the - * number of copied elements. - */ -#define kfifo_in_spinlocked(fifo, buf, n, lock) \ -({ \ - unsigned long __flags; \ - unsigned int __ret; \ - spin_lock_irqsave(lock, __flags); \ - __ret = kfifo_in(fifo, buf, n); \ - spin_unlock_irqrestore(lock, __flags); \ - __ret; \ -}) - -/* alias for kfifo_in_spinlocked, will be removed in a future release */ -#define kfifo_in_locked(fifo, buf, n, lock) \ - kfifo_in_spinlocked(fifo, buf, n, lock) - -/** - * kfifo_out - get data from the fifo - * @fifo: address of the fifo to be used - * @buf: pointer to the storage buffer - * @n: max. number of elements to get - * - * This macro get some data from the fifo and return the numbers of elements - * copied. - * - * Note that with only one concurrent reader and one concurrent - * writer, you don't need extra locking to use these macro. - */ -#define kfifo_out(fifo, buf, n) \ -__kfifo_uint_must_check_helper( \ -({ \ - typeof((fifo) + 1) __tmp = (fifo); \ - typeof((buf) + 1) __buf = (buf); \ - unsigned long __n = (n); \ - const size_t __recsize = sizeof(*__tmp->rectype); \ - struct __kfifo *__kfifo = &__tmp->kfifo; \ - if (0) { \ - typeof(__tmp->ptr) __dummy = NULL; \ - __buf = __dummy; \ - } \ - (__recsize) ?\ - __kfifo_out_r(__kfifo, __buf, __n, __recsize) : \ - __kfifo_out(__kfifo, __buf, __n); \ -}) \ -) - -/** - * kfifo_out_spinlocked - get data from the fifo using a spinlock for locking - * @fifo: address of the fifo to be used - * @buf: pointer to the storage buffer - * @n: max. number of elements to get - * @lock: pointer to the spinlock to use for locking - * - * This macro get the data from the fifo and return the numbers of elements - * copied. - */ -#define kfifo_out_spinlocked(fifo, buf, n, lock) \ -__kfifo_uint_must_check_helper( \ -({ \ - unsigned long __flags; \ - unsigned int __ret; \ - spin_lock_irqsave(lock, __flags); \ - __ret = kfifo_out(fifo, buf, n); \ - spin_unlock_irqrestore(lock, __flags); \ - __ret; \ -}) \ -) - -/* alias for kfifo_out_spinlocked, will be removed in a future release */ -#define kfifo_out_locked(fifo, buf, n, lock) \ - kfifo_out_spinlocked(fifo, buf, n, lock) - -/** - * kfifo_from_user - puts some data from user space into the fifo - * @fifo: address of the fifo to be used - * @from: pointer to the data to be added - * @len: the length of the data to be added - * @copied: pointer to output variable to store the number of copied bytes - * - * This macro copies at most @len bytes from the @from into the - * fifo, depending of the available space and returns -EFAULT/0. - * - * Note that with only one concurrent reader and one concurrent - * writer, you don't need extra locking to use these macro. - */ -#define kfifo_from_user(fifo, from, len, copied) \ -__kfifo_uint_must_check_helper( \ -({ \ - typeof((fifo) + 1) __tmp = (fifo); \ - const void __user *__from = (from); \ - unsigned int __len = (len); \ - unsigned int *__copied = (copied); \ - const size_t __recsize = sizeof(*__tmp->rectype); \ - struct __kfifo *__kfifo = &__tmp->kfifo; \ - (__recsize) ? \ - __kfifo_from_user_r(__kfifo, __from, __len, __copied, __recsize) : \ - __kfifo_from_user(__kfifo, __from, __len, __copied); \ -}) \ -) - -/** - * kfifo_to_user - copies data from the fifo into user space - * @fifo: address of the fifo to be used - * @to: where the data must be copied - * @len: the size of the destination buffer - * @copied: pointer to output variable to store the number of copied bytes - * - * This macro copies at most @len bytes from the fifo into the - * @to buffer and returns -EFAULT/0. - * - * Note that with only one concurrent reader and one concurrent - * writer, you don't need extra locking to use these macro. - */ -#define kfifo_to_user(fifo, to, len, copied) \ -__kfifo_uint_must_check_helper( \ -({ \ - typeof((fifo) + 1) __tmp = (fifo); \ - void __user *__to = (to); \ - unsigned int __len = (len); \ - unsigned int *__copied = (copied); \ - const size_t __recsize = sizeof(*__tmp->rectype); \ - struct __kfifo *__kfifo = &__tmp->kfifo; \ - (__recsize) ? \ - __kfifo_to_user_r(__kfifo, __to, __len, __copied, __recsize) : \ - __kfifo_to_user(__kfifo, __to, __len, __copied); \ -}) \ -) - -/** - * kfifo_dma_in_prepare - setup a scatterlist for DMA input - * @fifo: address of the fifo to be used - * @sgl: pointer to the scatterlist array - * @nents: number of entries in the scatterlist array - * @len: number of elements to transfer - * - * This macro fills a scatterlist for DMA input. - * It returns the number entries in the scatterlist array. - * - * Note that with only one concurrent reader and one concurrent - * writer, you don't need extra locking to use these macros. - */ -#define kfifo_dma_in_prepare(fifo, sgl, nents, len) \ -({ \ - typeof((fifo) + 1) __tmp = (fifo); \ - struct scatterlist *__sgl = (sgl); \ - int __nents = (nents); \ - unsigned int __len = (len); \ - const size_t __recsize = sizeof(*__tmp->rectype); \ - struct __kfifo *__kfifo = &__tmp->kfifo; \ - (__recsize) ? \ - __kfifo_dma_in_prepare_r(__kfifo, __sgl, __nents, __len, __recsize) : \ - __kfifo_dma_in_prepare(__kfifo, __sgl, __nents, __len); \ -}) - -/** - * kfifo_dma_in_finish - finish a DMA IN operation - * @fifo: address of the fifo to be used - * @len: number of bytes to received - * - * This macro finish a DMA IN operation. The in counter will be updated by - * the len parameter. No error checking will be done. - * - * Note that with only one concurrent reader and one concurrent - * writer, you don't need extra locking to use these macros. - */ -#define kfifo_dma_in_finish(fifo, len) \ -(void)({ \ - typeof((fifo) + 1) __tmp = (fifo); \ - unsigned int __len = (len); \ - const size_t __recsize = sizeof(*__tmp->rectype); \ - struct __kfifo *__kfifo = &__tmp->kfifo; \ - if (__recsize) \ - __kfifo_dma_in_finish_r(__kfifo, __len, __recsize); \ - else \ - __kfifo->in += __len / sizeof(*__tmp->type); \ -}) - -/** - * kfifo_dma_out_prepare - setup a scatterlist for DMA output - * @fifo: address of the fifo to be used - * @sgl: pointer to the scatterlist array - * @nents: number of entries in the scatterlist array - * @len: number of elements to transfer - * - * This macro fills a scatterlist for DMA output which at most @len bytes - * to transfer. - * It returns the number entries in the scatterlist array. - * A zero means there is no space available and the scatterlist is not filled. - * - * Note that with only one concurrent reader and one concurrent - * writer, you don't need extra locking to use these macros. - */ -#define kfifo_dma_out_prepare(fifo, sgl, nents, len) \ -({ \ - typeof((fifo) + 1) __tmp = (fifo); \ - struct scatterlist *__sgl = (sgl); \ - int __nents = (nents); \ - unsigned int __len = (len); \ - const size_t __recsize = sizeof(*__tmp->rectype); \ - struct __kfifo *__kfifo = &__tmp->kfifo; \ - (__recsize) ? \ - __kfifo_dma_out_prepare_r(__kfifo, __sgl, __nents, __len, __recsize) : \ - __kfifo_dma_out_prepare(__kfifo, __sgl, __nents, __len); \ -}) - -/** - * kfifo_dma_out_finish - finish a DMA OUT operation - * @fifo: address of the fifo to be used - * @len: number of bytes transferd - * - * This macro finish a DMA OUT operation. The out counter will be updated by - * the len parameter. No error checking will be done. - * - * Note that with only one concurrent reader and one concurrent - * writer, you don't need extra locking to use these macros. - */ -#define kfifo_dma_out_finish(fifo, len) \ -(void)({ \ - typeof((fifo) + 1) __tmp = (fifo); \ - unsigned int __len = (len); \ - const size_t __recsize = sizeof(*__tmp->rectype); \ - struct __kfifo *__kfifo = &__tmp->kfifo; \ - if (__recsize) \ - __kfifo_dma_out_finish_r(__kfifo, __recsize); \ - else \ - __kfifo->out += __len / sizeof(*__tmp->type); \ -}) - -/** - * kfifo_out_peek - gets some data from the fifo - * @fifo: address of the fifo to be used - * @buf: pointer to the storage buffer - * @n: max. number of elements to get - * - * This macro get the data from the fifo and return the numbers of elements - * copied. The data is not removed from the fifo. - * - * Note that with only one concurrent reader and one concurrent - * writer, you don't need extra locking to use these macro. - */ -#define kfifo_out_peek(fifo, buf, n) \ -__kfifo_uint_must_check_helper( \ -({ \ - typeof((fifo) + 1) __tmp = (fifo); \ - typeof((buf) + 1) __buf = (buf); \ - unsigned long __n = (n); \ - const size_t __recsize = sizeof(*__tmp->rectype); \ - struct __kfifo *__kfifo = &__tmp->kfifo; \ - if (0) { \ - typeof(__tmp->ptr) __dummy __attribute__ ((unused)) = NULL; \ - __buf = __dummy; \ - } \ - (__recsize) ? \ - __kfifo_out_peek_r(__kfifo, __buf, __n, __recsize) : \ - __kfifo_out_peek(__kfifo, __buf, __n); \ -}) \ -) - -extern int __kfifo_alloc(struct __kfifo *fifo, unsigned int size, - size_t esize, gfp_t gfp_mask); - -extern void __kfifo_free(struct __kfifo *fifo); - -extern int __kfifo_init(struct __kfifo *fifo, void *buffer, - unsigned int size, size_t esize); - -extern unsigned int __kfifo_in(struct __kfifo *fifo, - const void *buf, unsigned int len); - -extern unsigned int __kfifo_out(struct __kfifo *fifo, - void *buf, unsigned int len); - -extern int __kfifo_from_user(struct __kfifo *fifo, - const void __user *from, unsigned long len, unsigned int *copied); - -extern int __kfifo_to_user(struct __kfifo *fifo, - void __user *to, unsigned long len, unsigned int *copied); - -extern unsigned int __kfifo_dma_in_prepare(struct __kfifo *fifo, - struct scatterlist *sgl, int nents, unsigned int len); - -extern unsigned int __kfifo_dma_out_prepare(struct __kfifo *fifo, - struct scatterlist *sgl, int nents, unsigned int len); - -extern unsigned int __kfifo_out_peek(struct __kfifo *fifo, - void *buf, unsigned int len); - -extern unsigned int __kfifo_in_r(struct __kfifo *fifo, - const void *buf, unsigned int len, size_t recsize); - -extern unsigned int __kfifo_out_r(struct __kfifo *fifo, - void *buf, unsigned int len, size_t recsize); - -extern int __kfifo_from_user_r(struct __kfifo *fifo, - const void __user *from, unsigned long len, unsigned int *copied, - size_t recsize); - -extern int __kfifo_to_user_r(struct __kfifo *fifo, void __user *to, - unsigned long len, unsigned int *copied, size_t recsize); - -extern unsigned int __kfifo_dma_in_prepare_r(struct __kfifo *fifo, - struct scatterlist *sgl, int nents, unsigned int len, size_t recsize); - -extern void __kfifo_dma_in_finish_r(struct __kfifo *fifo, - unsigned int len, size_t recsize); - -extern unsigned int __kfifo_dma_out_prepare_r(struct __kfifo *fifo, - struct scatterlist *sgl, int nents, unsigned int len, size_t recsize); - -extern void __kfifo_dma_out_finish_r(struct __kfifo *fifo, size_t recsize); - -extern unsigned int __kfifo_len_r(struct __kfifo *fifo, size_t recsize); - -extern void __kfifo_skip_r(struct __kfifo *fifo, size_t recsize); - -extern unsigned int __kfifo_out_peek_r(struct __kfifo *fifo, - void *buf, unsigned int len, size_t recsize); - -extern unsigned int __kfifo_max_r(unsigned int len, size_t recsize); - -#endif -#endif /* (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,36)) */ diff --git a/openairITS/mac/DOT11/include/linux/math64.h b/openairITS/mac/DOT11/include/linux/math64.h deleted file mode 100644 index eb9e8e1522..0000000000 --- a/openairITS/mac/DOT11/include/linux/math64.h +++ /dev/null @@ -1,10 +0,0 @@ -#ifndef _COMPAT_LINUX_MATH64_H -#define _COMPAT_LINUX_MATH64_H 1 - -#include - -#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,25)) -#include_next -#endif /* (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,25)) */ - -#endif /* _COMPAT_LINUX_MATH64_H */ diff --git a/openairITS/mac/DOT11/include/linux/nl80211.h b/openairITS/mac/DOT11/include/linux/nl80211.h deleted file mode 100644 index bed749330c..0000000000 --- a/openairITS/mac/DOT11/include/linux/nl80211.h +++ /dev/null @@ -1,2870 +0,0 @@ -#ifndef __LINUX_NL80211_H -#define __LINUX_NL80211_H -/* - * 802.11 netlink interface public header - * - * Copyright 2006-2010 Johannes Berg - * Copyright 2008 Michael Wu - * Copyright 2008 Luis Carlos Cobo - * Copyright 2008 Michael Buesch - * Copyright 2008, 2009 Luis R. Rodriguez - * Copyright 2008 Jouni Malinen - * Copyright 2008 Colin McCabe - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - * - */ - -#include - -/** - * DOC: Station handling - * - * Stations are added per interface, but a special case exists with VLAN - * interfaces. When a station is bound to an AP interface, it may be moved - * into a VLAN identified by a VLAN interface index (%NL80211_ATTR_STA_VLAN). - * The station is still assumed to belong to the AP interface it was added - * to. - * - * TODO: need more info? - */ - -/** - * DOC: Frame transmission/registration support - * - * Frame transmission and registration support exists to allow userspace - * management entities such as wpa_supplicant react to management frames - * that are not being handled by the kernel. This includes, for example, - * certain classes of action frames that cannot be handled in the kernel - * for various reasons. - * - * Frame registration is done on a per-interface basis and registrations - * cannot be removed other than by closing the socket. It is possible to - * specify a registration filter to register, for example, only for a - * certain type of action frame. In particular with action frames, those - * that userspace registers for will not be returned as unhandled by the - * driver, so that the registered application has to take responsibility - * for doing that. - * - * The type of frame that can be registered for is also dependent on the - * driver and interface type. The frame types are advertised in wiphy - * attributes so applications know what to expect. - * - * NOTE: When an interface changes type while registrations are active, - * these registrations are ignored until the interface type is - * changed again. This means that changing the interface type can - * lead to a situation that couldn't otherwise be produced, but - * any such registrations will be dormant in the sense that they - * will not be serviced, i.e. they will not receive any frames. - * - * Frame transmission allows userspace to send for example the required - * responses to action frames. It is subject to some sanity checking, - * but many frames can be transmitted. When a frame was transmitted, its - * status is indicated to the sending socket. - * - * For more technical details, see the corresponding command descriptions - * below. - */ - -/** - * DOC: Virtual interface / concurrency capabilities - * - * Some devices are able to operate with virtual MACs, they can have - * more than one virtual interface. The capability handling for this - * is a bit complex though, as there may be a number of restrictions - * on the types of concurrency that are supported. - * - * To start with, each device supports the interface types listed in - * the %NL80211_ATTR_SUPPORTED_IFTYPES attribute, but by listing the - * types there no concurrency is implied. - * - * Once concurrency is desired, more attributes must be observed: - * To start with, since some interface types are purely managed in - * software, like the AP-VLAN type in mac80211 for example, there's - * an additional list of these, they can be added at any time and - * are only restricted by some semantic restrictions (e.g. AP-VLAN - * cannot be added without a corresponding AP interface). This list - * is exported in the %NL80211_ATTR_SOFTWARE_IFTYPES attribute. - * - * Further, the list of supported combinations is exported. This is - * in the %NL80211_ATTR_INTERFACE_COMBINATIONS attribute. Basically, - * it exports a list of "groups", and at any point in time the - * interfaces that are currently active must fall into any one of - * the advertised groups. Within each group, there are restrictions - * on the number of interfaces of different types that are supported - * and also the number of different channels, along with potentially - * some other restrictions. See &enum nl80211_if_combination_attrs. - * - * All together, these attributes define the concurrency of virtual - * interfaces that a given device supports. - */ - -/** - * enum nl80211_commands - supported nl80211 commands - * - * @NL80211_CMD_UNSPEC: unspecified command to catch errors - * - * @NL80211_CMD_GET_WIPHY: request information about a wiphy or dump request - * to get a list of all present wiphys. - * @NL80211_CMD_SET_WIPHY: set wiphy parameters, needs %NL80211_ATTR_WIPHY or - * %NL80211_ATTR_IFINDEX; can be used to set %NL80211_ATTR_WIPHY_NAME, - * %NL80211_ATTR_WIPHY_TXQ_PARAMS, %NL80211_ATTR_WIPHY_FREQ, - * %NL80211_ATTR_WIPHY_CHANNEL_TYPE, %NL80211_ATTR_WIPHY_RETRY_SHORT, - * %NL80211_ATTR_WIPHY_RETRY_LONG, %NL80211_ATTR_WIPHY_FRAG_THRESHOLD, - * and/or %NL80211_ATTR_WIPHY_RTS_THRESHOLD. - * However, for setting the channel, see %NL80211_CMD_SET_CHANNEL - * instead, the support here is for backward compatibility only. - * @NL80211_CMD_NEW_WIPHY: Newly created wiphy, response to get request - * or rename notification. Has attributes %NL80211_ATTR_WIPHY and - * %NL80211_ATTR_WIPHY_NAME. - * @NL80211_CMD_DEL_WIPHY: Wiphy deleted. Has attributes - * %NL80211_ATTR_WIPHY and %NL80211_ATTR_WIPHY_NAME. - * - * @NL80211_CMD_GET_INTERFACE: Request an interface's configuration; - * either a dump request on a %NL80211_ATTR_WIPHY or a specific get - * on an %NL80211_ATTR_IFINDEX is supported. - * @NL80211_CMD_SET_INTERFACE: Set type of a virtual interface, requires - * %NL80211_ATTR_IFINDEX and %NL80211_ATTR_IFTYPE. - * @NL80211_CMD_NEW_INTERFACE: Newly created virtual interface or response - * to %NL80211_CMD_GET_INTERFACE. Has %NL80211_ATTR_IFINDEX, - * %NL80211_ATTR_WIPHY and %NL80211_ATTR_IFTYPE attributes. Can also - * be sent from userspace to request creation of a new virtual interface, - * then requires attributes %NL80211_ATTR_WIPHY, %NL80211_ATTR_IFTYPE and - * %NL80211_ATTR_IFNAME. - * @NL80211_CMD_DEL_INTERFACE: Virtual interface was deleted, has attributes - * %NL80211_ATTR_IFINDEX and %NL80211_ATTR_WIPHY. Can also be sent from - * userspace to request deletion of a virtual interface, then requires - * attribute %NL80211_ATTR_IFINDEX. - * - * @NL80211_CMD_GET_KEY: Get sequence counter information for a key specified - * by %NL80211_ATTR_KEY_IDX and/or %NL80211_ATTR_MAC. - * @NL80211_CMD_SET_KEY: Set key attributes %NL80211_ATTR_KEY_DEFAULT, - * %NL80211_ATTR_KEY_DEFAULT_MGMT, or %NL80211_ATTR_KEY_THRESHOLD. - * @NL80211_CMD_NEW_KEY: add a key with given %NL80211_ATTR_KEY_DATA, - * %NL80211_ATTR_KEY_IDX, %NL80211_ATTR_MAC, %NL80211_ATTR_KEY_CIPHER, - * and %NL80211_ATTR_KEY_SEQ attributes. - * @NL80211_CMD_DEL_KEY: delete a key identified by %NL80211_ATTR_KEY_IDX - * or %NL80211_ATTR_MAC. - * - * @NL80211_CMD_GET_BEACON: (not used) - * @NL80211_CMD_SET_BEACON: change the beacon on an access point interface - * using the %NL80211_ATTR_BEACON_HEAD and %NL80211_ATTR_BEACON_TAIL - * attributes. For drivers that generate the beacon and probe responses - * internally, the following attributes must be provided: %NL80211_ATTR_IE, - * %NL80211_ATTR_IE_PROBE_RESP and %NL80211_ATTR_IE_ASSOC_RESP. - * @NL80211_CMD_START_AP: Start AP operation on an AP interface, parameters - * are like for %NL80211_CMD_SET_BEACON, and additionally parameters that - * do not change are used, these include %NL80211_ATTR_BEACON_INTERVAL, - * %NL80211_ATTR_DTIM_PERIOD, %NL80211_ATTR_SSID, - * %NL80211_ATTR_HIDDEN_SSID, %NL80211_ATTR_CIPHERS_PAIRWISE, - * %NL80211_ATTR_CIPHER_GROUP, %NL80211_ATTR_WPA_VERSIONS, - * %NL80211_ATTR_AKM_SUITES, %NL80211_ATTR_PRIVACY, - * %NL80211_ATTR_AUTH_TYPE and %NL80211_ATTR_INACTIVITY_TIMEOUT. - * @NL80211_CMD_NEW_BEACON: old alias for %NL80211_CMD_START_AP - * @NL80211_CMD_STOP_AP: Stop AP operation on the given interface - * @NL80211_CMD_DEL_BEACON: old alias for %NL80211_CMD_STOP_AP - * - * @NL80211_CMD_GET_STATION: Get station attributes for station identified by - * %NL80211_ATTR_MAC on the interface identified by %NL80211_ATTR_IFINDEX. - * @NL80211_CMD_SET_STATION: Set station attributes for station identified by - * %NL80211_ATTR_MAC on the interface identified by %NL80211_ATTR_IFINDEX. - * @NL80211_CMD_NEW_STATION: Add a station with given attributes to the - * the interface identified by %NL80211_ATTR_IFINDEX. - * @NL80211_CMD_DEL_STATION: Remove a station identified by %NL80211_ATTR_MAC - * or, if no MAC address given, all stations, on the interface identified - * by %NL80211_ATTR_IFINDEX. - * - * @NL80211_CMD_GET_MPATH: Get mesh path attributes for mesh path to - * destination %NL80211_ATTR_MAC on the interface identified by - * %NL80211_ATTR_IFINDEX. - * @NL80211_CMD_SET_MPATH: Set mesh path attributes for mesh path to - * destination %NL80211_ATTR_MAC on the interface identified by - * %NL80211_ATTR_IFINDEX. - * @NL80211_CMD_NEW_MPATH: Create a new mesh path for the destination given by - * %NL80211_ATTR_MAC via %NL80211_ATTR_MPATH_NEXT_HOP. - * @NL80211_CMD_DEL_MPATH: Delete a mesh path to the destination given by - * %NL80211_ATTR_MAC. - * @NL80211_CMD_NEW_PATH: Add a mesh path with given attributes to the - * the interface identified by %NL80211_ATTR_IFINDEX. - * @NL80211_CMD_DEL_PATH: Remove a mesh path identified by %NL80211_ATTR_MAC - * or, if no MAC address given, all mesh paths, on the interface identified - * by %NL80211_ATTR_IFINDEX. - * @NL80211_CMD_SET_BSS: Set BSS attributes for BSS identified by - * %NL80211_ATTR_IFINDEX. - * - * @NL80211_CMD_GET_REG: ask the wireless core to send us its currently set - * regulatory domain. - * @NL80211_CMD_SET_REG: Set current regulatory domain. CRDA sends this command - * after being queried by the kernel. CRDA replies by sending a regulatory - * domain structure which consists of %NL80211_ATTR_REG_ALPHA set to our - * current alpha2 if it found a match. It also provides - * NL80211_ATTR_REG_RULE_FLAGS, and a set of regulatory rules. Each - * regulatory rule is a nested set of attributes given by - * %NL80211_ATTR_REG_RULE_FREQ_[START|END] and - * %NL80211_ATTR_FREQ_RANGE_MAX_BW with an attached power rule given by - * %NL80211_ATTR_REG_RULE_POWER_MAX_ANT_GAIN and - * %NL80211_ATTR_REG_RULE_POWER_MAX_EIRP. - * @NL80211_CMD_REQ_SET_REG: ask the wireless core to set the regulatory domain - * to the specified ISO/IEC 3166-1 alpha2 country code. The core will - * store this as a valid request and then query userspace for it. - * - * @NL80211_CMD_GET_MESH_CONFIG: Get mesh networking properties for the - * interface identified by %NL80211_ATTR_IFINDEX - * - * @NL80211_CMD_SET_MESH_CONFIG: Set mesh networking properties for the - * interface identified by %NL80211_ATTR_IFINDEX - * - * @NL80211_CMD_SET_MGMT_EXTRA_IE: Set extra IEs for management frames. The - * interface is identified with %NL80211_ATTR_IFINDEX and the management - * frame subtype with %NL80211_ATTR_MGMT_SUBTYPE. The extra IE data to be - * added to the end of the specified management frame is specified with - * %NL80211_ATTR_IE. If the command succeeds, the requested data will be - * added to all specified management frames generated by - * kernel/firmware/driver. - * Note: This command has been removed and it is only reserved at this - * point to avoid re-using existing command number. The functionality this - * command was planned for has been provided with cleaner design with the - * option to specify additional IEs in NL80211_CMD_TRIGGER_SCAN, - * NL80211_CMD_AUTHENTICATE, NL80211_CMD_ASSOCIATE, - * NL80211_CMD_DEAUTHENTICATE, and NL80211_CMD_DISASSOCIATE. - * - * @NL80211_CMD_GET_SCAN: get scan results - * @NL80211_CMD_TRIGGER_SCAN: trigger a new scan with the given parameters - * %NL80211_ATTR_TX_NO_CCK_RATE is used to decide whether to send the - * probe requests at CCK rate or not. - * @NL80211_CMD_NEW_SCAN_RESULTS: scan notification (as a reply to - * NL80211_CMD_GET_SCAN and on the "scan" multicast group) - * @NL80211_CMD_SCAN_ABORTED: scan was aborted, for unspecified reasons, - * partial scan results may be available - * - * @NL80211_CMD_START_SCHED_SCAN: start a scheduled scan at certain - * intervals, as specified by %NL80211_ATTR_SCHED_SCAN_INTERVAL. - * Like with normal scans, if SSIDs (%NL80211_ATTR_SCAN_SSIDS) - * are passed, they are used in the probe requests. For - * broadcast, a broadcast SSID must be passed (ie. an empty - * string). If no SSID is passed, no probe requests are sent and - * a passive scan is performed. %NL80211_ATTR_SCAN_FREQUENCIES, - * if passed, define which channels should be scanned; if not - * passed, all channels allowed for the current regulatory domain - * are used. Extra IEs can also be passed from the userspace by - * using the %NL80211_ATTR_IE attribute. - * @NL80211_CMD_STOP_SCHED_SCAN: stop a scheduled scan. Returns -ENOENT - * if scheduled scan is not running. - * @NL80211_CMD_SCHED_SCAN_RESULTS: indicates that there are scheduled scan - * results available. - * @NL80211_CMD_SCHED_SCAN_STOPPED: indicates that the scheduled scan has - * stopped. The driver may issue this event at any time during a - * scheduled scan. One reason for stopping the scan is if the hardware - * does not support starting an association or a normal scan while running - * a scheduled scan. This event is also sent when the - * %NL80211_CMD_STOP_SCHED_SCAN command is received or when the interface - * is brought down while a scheduled scan was running. - * - * @NL80211_CMD_GET_SURVEY: get survey resuls, e.g. channel occupation - * or noise level - * @NL80211_CMD_NEW_SURVEY_RESULTS: survey data notification (as a reply to - * NL80211_CMD_GET_SURVEY and on the "scan" multicast group) - * - * @NL80211_CMD_REG_CHANGE: indicates to userspace the regulatory domain - * has been changed and provides details of the request information - * that caused the change such as who initiated the regulatory request - * (%NL80211_ATTR_REG_INITIATOR), the wiphy_idx - * (%NL80211_ATTR_REG_ALPHA2) on which the request was made from if - * the initiator was %NL80211_REGDOM_SET_BY_COUNTRY_IE or - * %NL80211_REGDOM_SET_BY_DRIVER, the type of regulatory domain - * set (%NL80211_ATTR_REG_TYPE), if the type of regulatory domain is - * %NL80211_REG_TYPE_COUNTRY the alpha2 to which we have moved on - * to (%NL80211_ATTR_REG_ALPHA2). - * @NL80211_CMD_REG_BEACON_HINT: indicates to userspace that an AP beacon - * has been found while world roaming thus enabling active scan or - * any mode of operation that initiates TX (beacons) on a channel - * where we would not have been able to do either before. As an example - * if you are world roaming (regulatory domain set to world or if your - * driver is using a custom world roaming regulatory domain) and while - * doing a passive scan on the 5 GHz band you find an AP there (if not - * on a DFS channel) you will now be able to actively scan for that AP - * or use AP mode on your card on that same channel. Note that this will - * never be used for channels 1-11 on the 2 GHz band as they are always - * enabled world wide. This beacon hint is only sent if your device had - * either disabled active scanning or beaconing on a channel. We send to - * userspace the wiphy on which we removed a restriction from - * (%NL80211_ATTR_WIPHY) and the channel on which this occurred - * before (%NL80211_ATTR_FREQ_BEFORE) and after (%NL80211_ATTR_FREQ_AFTER) - * the beacon hint was processed. - * - * @NL80211_CMD_AUTHENTICATE: authentication request and notification. - * This command is used both as a command (request to authenticate) and - * as an event on the "mlme" multicast group indicating completion of the - * authentication process. - * When used as a command, %NL80211_ATTR_IFINDEX is used to identify the - * interface. %NL80211_ATTR_MAC is used to specify PeerSTAAddress (and - * BSSID in case of station mode). %NL80211_ATTR_SSID is used to specify - * the SSID (mainly for association, but is included in authentication - * request, too, to help BSS selection. %NL80211_ATTR_WIPHY_FREQ is used - * to specify the frequence of the channel in MHz. %NL80211_ATTR_AUTH_TYPE - * is used to specify the authentication type. %NL80211_ATTR_IE is used to - * define IEs (VendorSpecificInfo, but also including RSN IE and FT IEs) - * to be added to the frame. - * When used as an event, this reports reception of an Authentication - * frame in station and IBSS modes when the local MLME processed the - * frame, i.e., it was for the local STA and was received in correct - * state. This is similar to MLME-AUTHENTICATE.confirm primitive in the - * MLME SAP interface (kernel providing MLME, userspace SME). The - * included %NL80211_ATTR_FRAME attribute contains the management frame - * (including both the header and frame body, but not FCS). This event is - * also used to indicate if the authentication attempt timed out. In that - * case the %NL80211_ATTR_FRAME attribute is replaced with a - * %NL80211_ATTR_TIMED_OUT flag (and %NL80211_ATTR_MAC to indicate which - * pending authentication timed out). - * @NL80211_CMD_ASSOCIATE: association request and notification; like - * NL80211_CMD_AUTHENTICATE but for Association and Reassociation - * (similar to MLME-ASSOCIATE.request, MLME-REASSOCIATE.request, - * MLME-ASSOCIATE.confirm or MLME-REASSOCIATE.confirm primitives). - * @NL80211_CMD_DEAUTHENTICATE: deauthentication request and notification; like - * NL80211_CMD_AUTHENTICATE but for Deauthentication frames (similar to - * MLME-DEAUTHENTICATION.request and MLME-DEAUTHENTICATE.indication - * primitives). - * @NL80211_CMD_DISASSOCIATE: disassociation request and notification; like - * NL80211_CMD_AUTHENTICATE but for Disassociation frames (similar to - * MLME-DISASSOCIATE.request and MLME-DISASSOCIATE.indication primitives). - * - * @NL80211_CMD_MICHAEL_MIC_FAILURE: notification of a locally detected Michael - * MIC (part of TKIP) failure; sent on the "mlme" multicast group; the - * event includes %NL80211_ATTR_MAC to describe the source MAC address of - * the frame with invalid MIC, %NL80211_ATTR_KEY_TYPE to show the key - * type, %NL80211_ATTR_KEY_IDX to indicate the key identifier, and - * %NL80211_ATTR_KEY_SEQ to indicate the TSC value of the frame; this - * event matches with MLME-MICHAELMICFAILURE.indication() primitive - * - * @NL80211_CMD_JOIN_IBSS: Join a new IBSS -- given at least an SSID and a - * FREQ attribute (for the initial frequency if no peer can be found) - * and optionally a MAC (as BSSID) and FREQ_FIXED attribute if those - * should be fixed rather than automatically determined. Can only be - * executed on a network interface that is UP, and fixed BSSID/FREQ - * may be rejected. Another optional parameter is the beacon interval, - * given in the %NL80211_ATTR_BEACON_INTERVAL attribute, which if not - * given defaults to 100 TU (102.4ms). - * @NL80211_CMD_LEAVE_IBSS: Leave the IBSS -- no special arguments, the IBSS is - * determined by the network interface. - * - * @NL80211_CMD_TESTMODE: testmode command, takes a wiphy (or ifindex) attribute - * to identify the device, and the TESTDATA blob attribute to pass through - * to the driver. - * - * @NL80211_CMD_CONNECT: connection request and notification; this command - * requests to connect to a specified network but without separating - * auth and assoc steps. For this, you need to specify the SSID in a - * %NL80211_ATTR_SSID attribute, and can optionally specify the association - * IEs in %NL80211_ATTR_IE, %NL80211_ATTR_AUTH_TYPE, %NL80211_ATTR_MAC, - * %NL80211_ATTR_WIPHY_FREQ, %NL80211_ATTR_CONTROL_PORT, - * %NL80211_ATTR_CONTROL_PORT_ETHERTYPE and - * %NL80211_ATTR_CONTROL_PORT_NO_ENCRYPT. - * Background scan period can optionally be - * specified in %NL80211_ATTR_BG_SCAN_PERIOD, - * if not specified default background scan configuration - * in driver is used and if period value is 0, bg scan will be disabled. - * This attribute is ignored if driver does not support roam scan. - * It is also sent as an event, with the BSSID and response IEs when the - * connection is established or failed to be established. This can be - * determined by the STATUS_CODE attribute. - * @NL80211_CMD_ROAM: request that the card roam (currently not implemented), - * sent as an event when the card/driver roamed by itself. - * @NL80211_CMD_DISCONNECT: drop a given connection; also used to notify - * userspace that a connection was dropped by the AP or due to other - * reasons, for this the %NL80211_ATTR_DISCONNECTED_BY_AP and - * %NL80211_ATTR_REASON_CODE attributes are used. - * - * @NL80211_CMD_SET_WIPHY_NETNS: Set a wiphy's netns. Note that all devices - * associated with this wiphy must be down and will follow. - * - * @NL80211_CMD_REMAIN_ON_CHANNEL: Request to remain awake on the specified - * channel for the specified amount of time. This can be used to do - * off-channel operations like transmit a Public Action frame and wait for - * a response while being associated to an AP on another channel. - * %NL80211_ATTR_IFINDEX is used to specify which interface (and thus - * radio) is used. %NL80211_ATTR_WIPHY_FREQ is used to specify the - * frequency for the operation and %NL80211_ATTR_WIPHY_CHANNEL_TYPE may be - * optionally used to specify additional channel parameters. - * %NL80211_ATTR_DURATION is used to specify the duration in milliseconds - * to remain on the channel. This command is also used as an event to - * notify when the requested duration starts (it may take a while for the - * driver to schedule this time due to other concurrent needs for the - * radio). - * When called, this operation returns a cookie (%NL80211_ATTR_COOKIE) - * that will be included with any events pertaining to this request; - * the cookie is also used to cancel the request. - * @NL80211_CMD_CANCEL_REMAIN_ON_CHANNEL: This command can be used to cancel a - * pending remain-on-channel duration if the desired operation has been - * completed prior to expiration of the originally requested duration. - * %NL80211_ATTR_WIPHY or %NL80211_ATTR_IFINDEX is used to specify the - * radio. The %NL80211_ATTR_COOKIE attribute must be given as well to - * uniquely identify the request. - * This command is also used as an event to notify when a requested - * remain-on-channel duration has expired. - * - * @NL80211_CMD_SET_TX_BITRATE_MASK: Set the mask of rates to be used in TX - * rate selection. %NL80211_ATTR_IFINDEX is used to specify the interface - * and @NL80211_ATTR_TX_RATES the set of allowed rates. - * - * @NL80211_CMD_REGISTER_FRAME: Register for receiving certain mgmt frames - * (via @NL80211_CMD_FRAME) for processing in userspace. This command - * requires an interface index, a frame type attribute (optional for - * backward compatibility reasons, if not given assumes action frames) - * and a match attribute containing the first few bytes of the frame - * that should match, e.g. a single byte for only a category match or - * four bytes for vendor frames including the OUI. The registration - * cannot be dropped, but is removed automatically when the netlink - * socket is closed. Multiple registrations can be made. - * @NL80211_CMD_REGISTER_ACTION: Alias for @NL80211_CMD_REGISTER_FRAME for - * backward compatibility - * @NL80211_CMD_FRAME: Management frame TX request and RX notification. This - * command is used both as a request to transmit a management frame and - * as an event indicating reception of a frame that was not processed in - * kernel code, but is for us (i.e., which may need to be processed in a - * user space application). %NL80211_ATTR_FRAME is used to specify the - * frame contents (including header). %NL80211_ATTR_WIPHY_FREQ (and - * optionally %NL80211_ATTR_WIPHY_CHANNEL_TYPE) is used to indicate on - * which channel the frame is to be transmitted or was received. If this - * channel is not the current channel (remain-on-channel or the - * operational channel) the device will switch to the given channel and - * transmit the frame, optionally waiting for a response for the time - * specified using %NL80211_ATTR_DURATION. When called, this operation - * returns a cookie (%NL80211_ATTR_COOKIE) that will be included with the - * TX status event pertaining to the TX request. - * %NL80211_ATTR_TX_NO_CCK_RATE is used to decide whether to send the - * management frames at CCK rate or not in 2GHz band. - * @NL80211_CMD_FRAME_WAIT_CANCEL: When an off-channel TX was requested, this - * command may be used with the corresponding cookie to cancel the wait - * time if it is known that it is no longer necessary. - * @NL80211_CMD_ACTION: Alias for @NL80211_CMD_FRAME for backward compatibility. - * @NL80211_CMD_FRAME_TX_STATUS: Report TX status of a management frame - * transmitted with %NL80211_CMD_FRAME. %NL80211_ATTR_COOKIE identifies - * the TX command and %NL80211_ATTR_FRAME includes the contents of the - * frame. %NL80211_ATTR_ACK flag is included if the recipient acknowledged - * the frame. - * @NL80211_CMD_ACTION_TX_STATUS: Alias for @NL80211_CMD_FRAME_TX_STATUS for - * backward compatibility. - * @NL80211_CMD_SET_CQM: Connection quality monitor configuration. This command - * is used to configure connection quality monitoring notification trigger - * levels. - * @NL80211_CMD_NOTIFY_CQM: Connection quality monitor notification. This - * command is used as an event to indicate the that a trigger level was - * reached. - * @NL80211_CMD_SET_CHANNEL: Set the channel (using %NL80211_ATTR_WIPHY_FREQ - * and %NL80211_ATTR_WIPHY_CHANNEL_TYPE) the given interface (identifed - * by %NL80211_ATTR_IFINDEX) shall operate on. - * In case multiple channels are supported by the device, the mechanism - * with which it switches channels is implementation-defined. - * When a monitor interface is given, it can only switch channel while - * no other interfaces are operating to avoid disturbing the operation - * of any other interfaces, and other interfaces will again take - * precedence when they are used. - * - * @NL80211_CMD_SET_WDS_PEER: Set the MAC address of the peer on a WDS interface. - * - * @NL80211_CMD_JOIN_MESH: Join a mesh. The mesh ID must be given, and initial - * mesh config parameters may be given. - * @NL80211_CMD_LEAVE_MESH: Leave the mesh network -- no special arguments, the - * network is determined by the network interface. - * - * @NL80211_CMD_UNPROT_DEAUTHENTICATE: Unprotected deauthentication frame - * notification. This event is used to indicate that an unprotected - * deauthentication frame was dropped when MFP is in use. - * @NL80211_CMD_UNPROT_DISASSOCIATE: Unprotected disassociation frame - * notification. This event is used to indicate that an unprotected - * disassociation frame was dropped when MFP is in use. - * - * @NL80211_CMD_NEW_PEER_CANDIDATE: Notification on the reception of a - * beacon or probe response from a compatible mesh peer. This is only - * sent while no station information (sta_info) exists for the new peer - * candidate and when @NL80211_MESH_SETUP_USERSPACE_AUTH is set. On - * reception of this notification, userspace may decide to create a new - * station (@NL80211_CMD_NEW_STATION). To stop this notification from - * reoccurring, the userspace authentication daemon may want to create the - * new station with the AUTHENTICATED flag unset and maybe change it later - * depending on the authentication result. - * - * @NL80211_CMD_GET_WOWLAN: get Wake-on-Wireless-LAN (WoWLAN) settings. - * @NL80211_CMD_SET_WOWLAN: set Wake-on-Wireless-LAN (WoWLAN) settings. - * Since wireless is more complex than wired ethernet, it supports - * various triggers. These triggers can be configured through this - * command with the %NL80211_ATTR_WOWLAN_TRIGGERS attribute. For - * more background information, see - * http://wireless.kernel.org/en/users/Documentation/WoWLAN. - * - * @NL80211_CMD_SET_REKEY_OFFLOAD: This command is used give the driver - * the necessary information for supporting GTK rekey offload. This - * feature is typically used during WoWLAN. The configuration data - * is contained in %NL80211_ATTR_REKEY_DATA (which is nested and - * contains the data in sub-attributes). After rekeying happened, - * this command may also be sent by the driver as an MLME event to - * inform userspace of the new replay counter. - * - * @NL80211_CMD_PMKSA_CANDIDATE: This is used as an event to inform userspace - * of PMKSA caching dandidates. - * - * @NL80211_CMD_TDLS_OPER: Perform a high-level TDLS command (e.g. link setup). - * @NL80211_CMD_TDLS_MGMT: Send a TDLS management frame. - * - * @NL80211_CMD_UNEXPECTED_FRAME: Used by an application controlling an AP - * (or GO) interface (i.e. hostapd) to ask for unexpected frames to - * implement sending deauth to stations that send unexpected class 3 - * frames. Also used as the event sent by the kernel when such a frame - * is received. - * For the event, the %NL80211_ATTR_MAC attribute carries the TA and - * other attributes like the interface index are present. - * If used as the command it must have an interface index and you can - * only unsubscribe from the event by closing the socket. Subscription - * is also for %NL80211_CMD_UNEXPECTED_4ADDR_FRAME events. - * - * @NL80211_CMD_UNEXPECTED_4ADDR_FRAME: Sent as an event indicating that the - * associated station identified by %NL80211_ATTR_MAC sent a 4addr frame - * and wasn't already in a 4-addr VLAN. The event will be sent similarly - * to the %NL80211_CMD_UNEXPECTED_FRAME event, to the same listener. - * - * @NL80211_CMD_PROBE_CLIENT: Probe an associated station on an AP interface - * by sending a null data frame to it and reporting when the frame is - * acknowleged. This is used to allow timing out inactive clients. Uses - * %NL80211_ATTR_IFINDEX and %NL80211_ATTR_MAC. The command returns a - * direct reply with an %NL80211_ATTR_COOKIE that is later used to match - * up the event with the request. The event includes the same data and - * has %NL80211_ATTR_ACK set if the frame was ACKed. - * - * @NL80211_CMD_REGISTER_BEACONS: Register this socket to receive beacons from - * other BSSes when any interfaces are in AP mode. This helps implement - * OLBC handling in hostapd. Beacons are reported in %NL80211_CMD_FRAME - * messages. Note that per PHY only one application may register. - * - * @NL80211_CMD_SET_NOACK_MAP: sets a bitmap for the individual TIDs whether - * No Acknowledgement Policy should be applied. - * - * @NL80211_CMD_MAX: highest used command number - * @__NL80211_CMD_AFTER_LAST: internal use - */ -enum nl80211_commands { -/* don't change the order or add anything between, this is ABI! */ - NL80211_CMD_UNSPEC, - - NL80211_CMD_GET_WIPHY, /* can dump */ - NL80211_CMD_SET_WIPHY, - NL80211_CMD_NEW_WIPHY, - NL80211_CMD_DEL_WIPHY, - - NL80211_CMD_GET_INTERFACE, /* can dump */ - NL80211_CMD_SET_INTERFACE, - NL80211_CMD_NEW_INTERFACE, - NL80211_CMD_DEL_INTERFACE, - - NL80211_CMD_GET_KEY, - NL80211_CMD_SET_KEY, - NL80211_CMD_NEW_KEY, - NL80211_CMD_DEL_KEY, - - NL80211_CMD_GET_BEACON, - NL80211_CMD_SET_BEACON, - NL80211_CMD_START_AP, - NL80211_CMD_NEW_BEACON = NL80211_CMD_START_AP, - NL80211_CMD_STOP_AP, - NL80211_CMD_DEL_BEACON = NL80211_CMD_STOP_AP, - - NL80211_CMD_GET_STATION, - NL80211_CMD_SET_STATION, - NL80211_CMD_NEW_STATION, - NL80211_CMD_DEL_STATION, - - NL80211_CMD_GET_MPATH, - NL80211_CMD_SET_MPATH, - NL80211_CMD_NEW_MPATH, - NL80211_CMD_DEL_MPATH, - - NL80211_CMD_SET_BSS, - - NL80211_CMD_SET_REG, - NL80211_CMD_REQ_SET_REG, - - NL80211_CMD_GET_MESH_CONFIG, - NL80211_CMD_SET_MESH_CONFIG, - - NL80211_CMD_SET_MGMT_EXTRA_IE /* reserved; not used */, - - NL80211_CMD_GET_REG, - - NL80211_CMD_GET_SCAN, - NL80211_CMD_TRIGGER_SCAN, - NL80211_CMD_NEW_SCAN_RESULTS, - NL80211_CMD_SCAN_ABORTED, - - NL80211_CMD_REG_CHANGE, - - NL80211_CMD_AUTHENTICATE, - NL80211_CMD_ASSOCIATE, - NL80211_CMD_DEAUTHENTICATE, - NL80211_CMD_DISASSOCIATE, - - NL80211_CMD_MICHAEL_MIC_FAILURE, - - NL80211_CMD_REG_BEACON_HINT, - - NL80211_CMD_JOIN_IBSS, - NL80211_CMD_LEAVE_IBSS, - - NL80211_CMD_TESTMODE, - - NL80211_CMD_CONNECT, - NL80211_CMD_ROAM, - NL80211_CMD_DISCONNECT, - - NL80211_CMD_SET_WIPHY_NETNS, - - NL80211_CMD_GET_SURVEY, - NL80211_CMD_NEW_SURVEY_RESULTS, - - NL80211_CMD_SET_PMKSA, - NL80211_CMD_DEL_PMKSA, - NL80211_CMD_FLUSH_PMKSA, - - NL80211_CMD_REMAIN_ON_CHANNEL, - NL80211_CMD_CANCEL_REMAIN_ON_CHANNEL, - - NL80211_CMD_SET_TX_BITRATE_MASK, - - NL80211_CMD_REGISTER_FRAME, - NL80211_CMD_REGISTER_ACTION = NL80211_CMD_REGISTER_FRAME, - NL80211_CMD_FRAME, - NL80211_CMD_ACTION = NL80211_CMD_FRAME, - NL80211_CMD_FRAME_TX_STATUS, - NL80211_CMD_ACTION_TX_STATUS = NL80211_CMD_FRAME_TX_STATUS, - - NL80211_CMD_SET_POWER_SAVE, - NL80211_CMD_GET_POWER_SAVE, - - NL80211_CMD_SET_CQM, - NL80211_CMD_NOTIFY_CQM, - - NL80211_CMD_SET_CHANNEL, - NL80211_CMD_SET_WDS_PEER, - - NL80211_CMD_FRAME_WAIT_CANCEL, - - NL80211_CMD_JOIN_MESH, - NL80211_CMD_LEAVE_MESH, - - NL80211_CMD_UNPROT_DEAUTHENTICATE, - NL80211_CMD_UNPROT_DISASSOCIATE, - - NL80211_CMD_NEW_PEER_CANDIDATE, - - NL80211_CMD_GET_WOWLAN, - NL80211_CMD_SET_WOWLAN, - - NL80211_CMD_START_SCHED_SCAN, - NL80211_CMD_STOP_SCHED_SCAN, - NL80211_CMD_SCHED_SCAN_RESULTS, - NL80211_CMD_SCHED_SCAN_STOPPED, - - NL80211_CMD_SET_REKEY_OFFLOAD, - - NL80211_CMD_PMKSA_CANDIDATE, - - NL80211_CMD_TDLS_OPER, - NL80211_CMD_TDLS_MGMT, - - NL80211_CMD_UNEXPECTED_FRAME, - - NL80211_CMD_PROBE_CLIENT, - - NL80211_CMD_REGISTER_BEACONS, - - NL80211_CMD_UNEXPECTED_4ADDR_FRAME, - - NL80211_CMD_SET_NOACK_MAP, - - /* add new commands above here */ - - /* used to define NL80211_CMD_MAX below */ - __NL80211_CMD_AFTER_LAST, - NL80211_CMD_MAX = __NL80211_CMD_AFTER_LAST - 1 -}; - -/* - * Allow user space programs to use #ifdef on new commands by defining them - * here - */ -#define NL80211_CMD_SET_BSS NL80211_CMD_SET_BSS -#define NL80211_CMD_SET_MGMT_EXTRA_IE NL80211_CMD_SET_MGMT_EXTRA_IE -#define NL80211_CMD_REG_CHANGE NL80211_CMD_REG_CHANGE -#define NL80211_CMD_AUTHENTICATE NL80211_CMD_AUTHENTICATE -#define NL80211_CMD_ASSOCIATE NL80211_CMD_ASSOCIATE -#define NL80211_CMD_DEAUTHENTICATE NL80211_CMD_DEAUTHENTICATE -#define NL80211_CMD_DISASSOCIATE NL80211_CMD_DISASSOCIATE -#define NL80211_CMD_REG_BEACON_HINT NL80211_CMD_REG_BEACON_HINT - -#define NL80211_ATTR_FEATURE_FLAGS NL80211_ATTR_FEATURE_FLAGS - -/* source-level API compatibility */ -#define NL80211_CMD_GET_MESH_PARAMS NL80211_CMD_GET_MESH_CONFIG -#define NL80211_CMD_SET_MESH_PARAMS NL80211_CMD_SET_MESH_CONFIG -#define NL80211_MESH_SETUP_VENDOR_PATH_SEL_IE NL80211_MESH_SETUP_IE - -/** - * enum nl80211_attrs - nl80211 netlink attributes - * - * @NL80211_ATTR_UNSPEC: unspecified attribute to catch errors - * - * @NL80211_ATTR_WIPHY: index of wiphy to operate on, cf. - * /sys/class/ieee80211//index - * @NL80211_ATTR_WIPHY_NAME: wiphy name (used for renaming) - * @NL80211_ATTR_WIPHY_TXQ_PARAMS: a nested array of TX queue parameters - * @NL80211_ATTR_WIPHY_FREQ: frequency of the selected channel in MHz - * @NL80211_ATTR_WIPHY_CHANNEL_TYPE: included with NL80211_ATTR_WIPHY_FREQ - * if HT20 or HT40 are allowed (i.e., 802.11n disabled if not included): - * NL80211_CHAN_NO_HT = HT not allowed (i.e., same as not including - * this attribute) - * NL80211_CHAN_HT20 = HT20 only - * NL80211_CHAN_HT40MINUS = secondary channel is below the primary channel - * NL80211_CHAN_HT40PLUS = secondary channel is above the primary channel - * @NL80211_ATTR_WIPHY_RETRY_SHORT: TX retry limit for frames whose length is - * less than or equal to the RTS threshold; allowed range: 1..255; - * dot11ShortRetryLimit; u8 - * @NL80211_ATTR_WIPHY_RETRY_LONG: TX retry limit for frames whose length is - * greater than the RTS threshold; allowed range: 1..255; - * dot11ShortLongLimit; u8 - * @NL80211_ATTR_WIPHY_FRAG_THRESHOLD: fragmentation threshold, i.e., maximum - * length in octets for frames; allowed range: 256..8000, disable - * fragmentation with (u32)-1; dot11FragmentationThreshold; u32 - * @NL80211_ATTR_WIPHY_RTS_THRESHOLD: RTS threshold (TX frames with length - * larger than or equal to this use RTS/CTS handshake); allowed range: - * 0..65536, disable with (u32)-1; dot11RTSThreshold; u32 - * @NL80211_ATTR_WIPHY_COVERAGE_CLASS: Coverage Class as defined by IEEE 802.11 - * section 7.3.2.9; dot11CoverageClass; u8 - * - * @NL80211_ATTR_IFINDEX: network interface index of the device to operate on - * @NL80211_ATTR_IFNAME: network interface name - * @NL80211_ATTR_IFTYPE: type of virtual interface, see &enum nl80211_iftype - * - * @NL80211_ATTR_MAC: MAC address (various uses) - * - * @NL80211_ATTR_KEY_DATA: (temporal) key data; for TKIP this consists of - * 16 bytes encryption key followed by 8 bytes each for TX and RX MIC - * keys - * @NL80211_ATTR_KEY_IDX: key ID (u8, 0-3) - * @NL80211_ATTR_KEY_CIPHER: key cipher suite (u32, as defined by IEEE 802.11 - * section 7.3.2.25.1, e.g. 0x000FAC04) - * @NL80211_ATTR_KEY_SEQ: transmit key sequence number (IV/PN) for TKIP and - * CCMP keys, each six bytes in little endian - * - * @NL80211_ATTR_BEACON_INTERVAL: beacon interval in TU - * @NL80211_ATTR_DTIM_PERIOD: DTIM period for beaconing - * @NL80211_ATTR_BEACON_HEAD: portion of the beacon before the TIM IE - * @NL80211_ATTR_BEACON_TAIL: portion of the beacon after the TIM IE - * - * @NL80211_ATTR_STA_AID: Association ID for the station (u16) - * @NL80211_ATTR_STA_FLAGS: flags, nested element with NLA_FLAG attributes of - * &enum nl80211_sta_flags (deprecated, use %NL80211_ATTR_STA_FLAGS2) - * @NL80211_ATTR_STA_LISTEN_INTERVAL: listen interval as defined by - * IEEE 802.11 7.3.1.6 (u16). - * @NL80211_ATTR_STA_SUPPORTED_RATES: supported rates, array of supported - * rates as defined by IEEE 802.11 7.3.2.2 but without the length - * restriction (at most %NL80211_MAX_SUPP_RATES). - * @NL80211_ATTR_STA_VLAN: interface index of VLAN interface to move station - * to, or the AP interface the station was originally added to to. - * @NL80211_ATTR_STA_INFO: information about a station, part of station info - * given for %NL80211_CMD_GET_STATION, nested attribute containing - * info as possible, see &enum nl80211_sta_info. - * - * @NL80211_ATTR_WIPHY_BANDS: Information about an operating bands, - * consisting of a nested array. - * - * @NL80211_ATTR_MESH_ID: mesh id (1-32 bytes). - * @NL80211_ATTR_STA_PLINK_ACTION: action to perform on the mesh peer link. - * @NL80211_ATTR_MPATH_NEXT_HOP: MAC address of the next hop for a mesh path. - * @NL80211_ATTR_MPATH_INFO: information about a mesh_path, part of mesh path - * info given for %NL80211_CMD_GET_MPATH, nested attribute described at - * &enum nl80211_mpath_info. - * - * @NL80211_ATTR_MNTR_FLAGS: flags, nested element with NLA_FLAG attributes of - * &enum nl80211_mntr_flags. - * - * @NL80211_ATTR_REG_ALPHA2: an ISO-3166-alpha2 country code for which the - * current regulatory domain should be set to or is already set to. - * For example, 'CR', for Costa Rica. This attribute is used by the kernel - * to query the CRDA to retrieve one regulatory domain. This attribute can - * also be used by userspace to query the kernel for the currently set - * regulatory domain. We chose an alpha2 as that is also used by the - * IEEE-802.11d country information element to identify a country. - * Users can also simply ask the wireless core to set regulatory domain - * to a specific alpha2. - * @NL80211_ATTR_REG_RULES: a nested array of regulatory domain regulatory - * rules. - * - * @NL80211_ATTR_BSS_CTS_PROT: whether CTS protection is enabled (u8, 0 or 1) - * @NL80211_ATTR_BSS_SHORT_PREAMBLE: whether short preamble is enabled - * (u8, 0 or 1) - * @NL80211_ATTR_BSS_SHORT_SLOT_TIME: whether short slot time enabled - * (u8, 0 or 1) - * @NL80211_ATTR_BSS_BASIC_RATES: basic rates, array of basic - * rates in format defined by IEEE 802.11 7.3.2.2 but without the length - * restriction (at most %NL80211_MAX_SUPP_RATES). - * - * @NL80211_ATTR_HT_CAPABILITY: HT Capability information element (from - * association request when used with NL80211_CMD_NEW_STATION) - * - * @NL80211_ATTR_SUPPORTED_IFTYPES: nested attribute containing all - * supported interface types, each a flag attribute with the number - * of the interface mode. - * - * @NL80211_ATTR_MGMT_SUBTYPE: Management frame subtype for - * %NL80211_CMD_SET_MGMT_EXTRA_IE. - * - * @NL80211_ATTR_IE: Information element(s) data (used, e.g., with - * %NL80211_CMD_SET_MGMT_EXTRA_IE). - * - * @NL80211_ATTR_MAX_NUM_SCAN_SSIDS: number of SSIDs you can scan with - * a single scan request, a wiphy attribute. - * @NL80211_ATTR_MAX_NUM_SCHED_SCAN_SSIDS: number of SSIDs you can - * scan with a single scheduled scan request, a wiphy attribute. - * @NL80211_ATTR_MAX_SCAN_IE_LEN: maximum length of information elements - * that can be added to a scan request - * @NL80211_ATTR_MAX_SCHED_SCAN_IE_LEN: maximum length of information - * elements that can be added to a scheduled scan request - * @NL80211_ATTR_MAX_MATCH_SETS: maximum number of sets that can be - * used with @NL80211_ATTR_SCHED_SCAN_MATCH, a wiphy attribute. - * - * @NL80211_ATTR_SCAN_FREQUENCIES: nested attribute with frequencies (in MHz) - * @NL80211_ATTR_SCAN_SSIDS: nested attribute with SSIDs, leave out for passive - * scanning and include a zero-length SSID (wildcard) for wildcard scan - * @NL80211_ATTR_BSS: scan result BSS - * - * @NL80211_ATTR_REG_INITIATOR: indicates who requested the regulatory domain - * currently in effect. This could be any of the %NL80211_REGDOM_SET_BY_* - * @NL80211_ATTR_REG_TYPE: indicates the type of the regulatory domain currently - * set. This can be one of the nl80211_reg_type (%NL80211_REGDOM_TYPE_*) - * - * @NL80211_ATTR_SUPPORTED_COMMANDS: wiphy attribute that specifies - * an array of command numbers (i.e. a mapping index to command number) - * that the driver for the given wiphy supports. - * - * @NL80211_ATTR_FRAME: frame data (binary attribute), including frame header - * and body, but not FCS; used, e.g., with NL80211_CMD_AUTHENTICATE and - * NL80211_CMD_ASSOCIATE events - * @NL80211_ATTR_SSID: SSID (binary attribute, 0..32 octets) - * @NL80211_ATTR_AUTH_TYPE: AuthenticationType, see &enum nl80211_auth_type, - * represented as a u32 - * @NL80211_ATTR_REASON_CODE: ReasonCode for %NL80211_CMD_DEAUTHENTICATE and - * %NL80211_CMD_DISASSOCIATE, u16 - * - * @NL80211_ATTR_KEY_TYPE: Key Type, see &enum nl80211_key_type, represented as - * a u32 - * - * @NL80211_ATTR_FREQ_BEFORE: A channel which has suffered a regulatory change - * due to considerations from a beacon hint. This attribute reflects - * the state of the channel _before_ the beacon hint processing. This - * attributes consists of a nested attribute containing - * NL80211_FREQUENCY_ATTR_* - * @NL80211_ATTR_FREQ_AFTER: A channel which has suffered a regulatory change - * due to considerations from a beacon hint. This attribute reflects - * the state of the channel _after_ the beacon hint processing. This - * attributes consists of a nested attribute containing - * NL80211_FREQUENCY_ATTR_* - * - * @NL80211_ATTR_CIPHER_SUITES: a set of u32 values indicating the supported - * cipher suites - * - * @NL80211_ATTR_FREQ_FIXED: a flag indicating the IBSS should not try to look - * for other networks on different channels - * - * @NL80211_ATTR_TIMED_OUT: a flag indicating than an operation timed out; this - * is used, e.g., with %NL80211_CMD_AUTHENTICATE event - * - * @NL80211_ATTR_USE_MFP: Whether management frame protection (IEEE 802.11w) is - * used for the association (&enum nl80211_mfp, represented as a u32); - * this attribute can be used - * with %NL80211_CMD_ASSOCIATE request - * - * @NL80211_ATTR_STA_FLAGS2: Attribute containing a - * &struct nl80211_sta_flag_update. - * - * @NL80211_ATTR_CONTROL_PORT: A flag indicating whether user space controls - * IEEE 802.1X port, i.e., sets/clears %NL80211_STA_FLAG_AUTHORIZED, in - * station mode. If the flag is included in %NL80211_CMD_ASSOCIATE - * request, the driver will assume that the port is unauthorized until - * authorized by user space. Otherwise, port is marked authorized by - * default in station mode. - * @NL80211_ATTR_CONTROL_PORT_ETHERTYPE: A 16-bit value indicating the - * ethertype that will be used for key negotiation. It can be - * specified with the associate and connect commands. If it is not - * specified, the value defaults to 0x888E (PAE, 802.1X). This - * attribute is also used as a flag in the wiphy information to - * indicate that protocols other than PAE are supported. - * @NL80211_ATTR_CONTROL_PORT_NO_ENCRYPT: When included along with - * %NL80211_ATTR_CONTROL_PORT_ETHERTYPE, indicates that the custom - * ethertype frames used for key negotiation must not be encrypted. - * - * @NL80211_ATTR_TESTDATA: Testmode data blob, passed through to the driver. - * We recommend using nested, driver-specific attributes within this. - * - * @NL80211_ATTR_DISCONNECTED_BY_AP: A flag indicating that the DISCONNECT - * event was due to the AP disconnecting the station, and not due to - * a local disconnect request. - * @NL80211_ATTR_STATUS_CODE: StatusCode for the %NL80211_CMD_CONNECT - * event (u16) - * @NL80211_ATTR_PRIVACY: Flag attribute, used with connect(), indicating - * that protected APs should be used. This is also used with NEW_BEACON to - * indicate that the BSS is to use protection. - * - * @NL80211_ATTR_CIPHERS_PAIRWISE: Used with CONNECT, ASSOCIATE, and NEW_BEACON - * to indicate which unicast key ciphers will be used with the connection - * (an array of u32). - * @NL80211_ATTR_CIPHER_GROUP: Used with CONNECT, ASSOCIATE, and NEW_BEACON to - * indicate which group key cipher will be used with the connection (a - * u32). - * @NL80211_ATTR_WPA_VERSIONS: Used with CONNECT, ASSOCIATE, and NEW_BEACON to - * indicate which WPA version(s) the AP we want to associate with is using - * (a u32 with flags from &enum nl80211_wpa_versions). - * @NL80211_ATTR_AKM_SUITES: Used with CONNECT, ASSOCIATE, and NEW_BEACON to - * indicate which key management algorithm(s) to use (an array of u32). - * - * @NL80211_ATTR_REQ_IE: (Re)association request information elements as - * sent out by the card, for ROAM and successful CONNECT events. - * @NL80211_ATTR_RESP_IE: (Re)association response information elements as - * sent by peer, for ROAM and successful CONNECT events. - * - * @NL80211_ATTR_PREV_BSSID: previous BSSID, to be used by in ASSOCIATE - * commands to specify using a reassociate frame - * - * @NL80211_ATTR_KEY: key information in a nested attribute with - * %NL80211_KEY_* sub-attributes - * @NL80211_ATTR_KEYS: array of keys for static WEP keys for connect() - * and join_ibss(), key information is in a nested attribute each - * with %NL80211_KEY_* sub-attributes - * - * @NL80211_ATTR_PID: Process ID of a network namespace. - * - * @NL80211_ATTR_GENERATION: Used to indicate consistent snapshots for - * dumps. This number increases whenever the object list being - * dumped changes, and as such userspace can verify that it has - * obtained a complete and consistent snapshot by verifying that - * all dump messages contain the same generation number. If it - * changed then the list changed and the dump should be repeated - * completely from scratch. - * - * @NL80211_ATTR_4ADDR: Use 4-address frames on a virtual interface - * - * @NL80211_ATTR_SURVEY_INFO: survey information about a channel, part of - * the survey response for %NL80211_CMD_GET_SURVEY, nested attribute - * containing info as possible, see &enum survey_info. - * - * @NL80211_ATTR_PMKID: PMK material for PMKSA caching. - * @NL80211_ATTR_MAX_NUM_PMKIDS: maximum number of PMKIDs a firmware can - * cache, a wiphy attribute. - * - * @NL80211_ATTR_DURATION: Duration of an operation in milliseconds, u32. - * @NL80211_ATTR_MAX_REMAIN_ON_CHANNEL_DURATION: Device attribute that - * specifies the maximum duration that can be requested with the - * remain-on-channel operation, in milliseconds, u32. - * - * @NL80211_ATTR_COOKIE: Generic 64-bit cookie to identify objects. - * - * @NL80211_ATTR_TX_RATES: Nested set of attributes - * (enum nl80211_tx_rate_attributes) describing TX rates per band. The - * enum nl80211_band value is used as the index (nla_type() of the nested - * data. If a band is not included, it will be configured to allow all - * rates based on negotiated supported rates information. This attribute - * is used with %NL80211_CMD_SET_TX_BITRATE_MASK. - * - * @NL80211_ATTR_FRAME_MATCH: A binary attribute which typically must contain - * at least one byte, currently used with @NL80211_CMD_REGISTER_FRAME. - * @NL80211_ATTR_FRAME_TYPE: A u16 indicating the frame type/subtype for the - * @NL80211_CMD_REGISTER_FRAME command. - * @NL80211_ATTR_TX_FRAME_TYPES: wiphy capability attribute, which is a - * nested attribute of %NL80211_ATTR_FRAME_TYPE attributes, containing - * information about which frame types can be transmitted with - * %NL80211_CMD_FRAME. - * @NL80211_ATTR_RX_FRAME_TYPES: wiphy capability attribute, which is a - * nested attribute of %NL80211_ATTR_FRAME_TYPE attributes, containing - * information about which frame types can be registered for RX. - * - * @NL80211_ATTR_ACK: Flag attribute indicating that the frame was - * acknowledged by the recipient. - * - * @NL80211_ATTR_CQM: connection quality monitor configuration in a - * nested attribute with %NL80211_ATTR_CQM_* sub-attributes. - * - * @NL80211_ATTR_LOCAL_STATE_CHANGE: Flag attribute to indicate that a command - * is requesting a local authentication/association state change without - * invoking actual management frame exchange. This can be used with - * NL80211_CMD_AUTHENTICATE, NL80211_CMD_DEAUTHENTICATE, - * NL80211_CMD_DISASSOCIATE. - * - * @NL80211_ATTR_AP_ISOLATE: (AP mode) Do not forward traffic between stations - * connected to this BSS. - * - * @NL80211_ATTR_WIPHY_TX_POWER_SETTING: Transmit power setting type. See - * &enum nl80211_tx_power_setting for possible values. - * @NL80211_ATTR_WIPHY_TX_POWER_LEVEL: Transmit power level in signed mBm units. - * This is used in association with @NL80211_ATTR_WIPHY_TX_POWER_SETTING - * for non-automatic settings. - * - * @NL80211_ATTR_SUPPORT_IBSS_RSN: The device supports IBSS RSN, which mostly - * means support for per-station GTKs. - * - * @NL80211_ATTR_WIPHY_ANTENNA_TX: Bitmap of allowed antennas for transmitting. - * This can be used to mask out antennas which are not attached or should - * not be used for transmitting. If an antenna is not selected in this - * bitmap the hardware is not allowed to transmit on this antenna. - * - * Each bit represents one antenna, starting with antenna 1 at the first - * bit. Depending on which antennas are selected in the bitmap, 802.11n - * drivers can derive which chainmasks to use (if all antennas belonging to - * a particular chain are disabled this chain should be disabled) and if - * a chain has diversity antennas wether diversity should be used or not. - * HT capabilities (STBC, TX Beamforming, Antenna selection) can be - * derived from the available chains after applying the antenna mask. - * Non-802.11n drivers can derive wether to use diversity or not. - * Drivers may reject configurations or RX/TX mask combinations they cannot - * support by returning -EINVAL. - * - * @NL80211_ATTR_WIPHY_ANTENNA_RX: Bitmap of allowed antennas for receiving. - * This can be used to mask out antennas which are not attached or should - * not be used for receiving. If an antenna is not selected in this bitmap - * the hardware should not be configured to receive on this antenna. - * For a more detailed description see @NL80211_ATTR_WIPHY_ANTENNA_TX. - * - * @NL80211_ATTR_WIPHY_ANTENNA_AVAIL_TX: Bitmap of antennas which are available - * for configuration as TX antennas via the above parameters. - * - * @NL80211_ATTR_WIPHY_ANTENNA_AVAIL_RX: Bitmap of antennas which are available - * for configuration as RX antennas via the above parameters. - * - * @NL80211_ATTR_MCAST_RATE: Multicast tx rate (in 100 kbps) for IBSS - * - * @NL80211_ATTR_OFFCHANNEL_TX_OK: For management frame TX, the frame may be - * transmitted on another channel when the channel given doesn't match - * the current channel. If the current channel doesn't match and this - * flag isn't set, the frame will be rejected. This is also used as an - * nl80211 capability flag. - * - * @NL80211_ATTR_BSS_HTOPMODE: HT operation mode (u16) - * - * @NL80211_ATTR_KEY_DEFAULT_TYPES: A nested attribute containing flags - * attributes, specifying what a key should be set as default as. - * See &enum nl80211_key_default_types. - * - * @NL80211_ATTR_MESH_SETUP: Optional mesh setup parameters. These cannot be - * changed once the mesh is active. - * @NL80211_ATTR_MESH_CONFIG: Mesh configuration parameters, a nested attribute - * containing attributes from &enum nl80211_meshconf_params. - * @NL80211_ATTR_SUPPORT_MESH_AUTH: Currently, this means the underlying driver - * allows auth frames in a mesh to be passed to userspace for processing via - * the @NL80211_MESH_SETUP_USERSPACE_AUTH flag. - * @NL80211_ATTR_STA_PLINK_STATE: The state of a mesh peer link as - * defined in &enum nl80211_plink_state. Used when userspace is - * driving the peer link management state machine. - * @NL80211_MESH_SETUP_USERSPACE_AMPE must be enabled. - * - * @NL80211_ATTR_WOWLAN_TRIGGERS_SUPPORTED: indicates, as part of the wiphy - * capabilities, the supported WoWLAN triggers - * @NL80211_ATTR_WOWLAN_TRIGGERS: used by %NL80211_CMD_SET_WOWLAN to - * indicate which WoW triggers should be enabled. This is also - * used by %NL80211_CMD_GET_WOWLAN to get the currently enabled WoWLAN - * triggers. - - * @NL80211_ATTR_SCHED_SCAN_INTERVAL: Interval between scheduled scan - * cycles, in msecs. - - * @NL80211_ATTR_SCHED_SCAN_MATCH: Nested attribute with one or more - * sets of attributes to match during scheduled scans. Only BSSs - * that match any of the sets will be reported. These are - * pass-thru filter rules. - * For a match to succeed, the BSS must match all attributes of a - * set. Since not every hardware supports matching all types of - * attributes, there is no guarantee that the reported BSSs are - * fully complying with the match sets and userspace needs to be - * able to ignore them by itself. - * Thus, the implementation is somewhat hardware-dependent, but - * this is only an optimization and the userspace application - * needs to handle all the non-filtered results anyway. - * If the match attributes don't make sense when combined with - * the values passed in @NL80211_ATTR_SCAN_SSIDS (eg. if an SSID - * is included in the probe request, but the match attributes - * will never let it go through), -EINVAL may be returned. - * If ommited, no filtering is done. - * - * @NL80211_ATTR_INTERFACE_COMBINATIONS: Nested attribute listing the supported - * interface combinations. In each nested item, it contains attributes - * defined in &enum nl80211_if_combination_attrs. - * @NL80211_ATTR_SOFTWARE_IFTYPES: Nested attribute (just like - * %NL80211_ATTR_SUPPORTED_IFTYPES) containing the interface types that - * are managed in software: interfaces of these types aren't subject to - * any restrictions in their number or combinations. - * - * @%NL80211_ATTR_REKEY_DATA: nested attribute containing the information - * necessary for GTK rekeying in the device, see &enum nl80211_rekey_data. - * - * @NL80211_ATTR_SCAN_SUPP_RATES: rates per to be advertised as supported in scan, - * nested array attribute containing an entry for each band, with the entry - * being a list of supported rates as defined by IEEE 802.11 7.3.2.2 but - * without the length restriction (at most %NL80211_MAX_SUPP_RATES). - * - * @NL80211_ATTR_HIDDEN_SSID: indicates whether SSID is to be hidden from Beacon - * and Probe Response (when response to wildcard Probe Request); see - * &enum nl80211_hidden_ssid, represented as a u32 - * - * @NL80211_ATTR_IE_PROBE_RESP: Information element(s) for Probe Response frame. - * This is used with %NL80211_CMD_NEW_BEACON and %NL80211_CMD_SET_BEACON to - * provide extra IEs (e.g., WPS/P2P IE) into Probe Response frames when the - * driver (or firmware) replies to Probe Request frames. - * @NL80211_ATTR_IE_ASSOC_RESP: Information element(s) for (Re)Association - * Response frames. This is used with %NL80211_CMD_NEW_BEACON and - * %NL80211_CMD_SET_BEACON to provide extra IEs (e.g., WPS/P2P IE) into - * (Re)Association Response frames when the driver (or firmware) replies to - * (Re)Association Request frames. - * - * @NL80211_ATTR_STA_WME: Nested attribute containing the wme configuration - * of the station, see &enum nl80211_sta_wme_attr. - * @NL80211_ATTR_SUPPORT_AP_UAPSD: the device supports uapsd when working - * as AP. - * - * @NL80211_ATTR_ROAM_SUPPORT: Indicates whether the firmware is capable of - * roaming to another AP in the same ESS if the signal lever is low. - * - * @NL80211_ATTR_PMKSA_CANDIDATE: Nested attribute containing the PMKSA caching - * candidate information, see &enum nl80211_pmksa_candidate_attr. - * - * @NL80211_ATTR_TX_NO_CCK_RATE: Indicates whether to use CCK rate or not - * for management frames transmission. In order to avoid p2p probe/action - * frames are being transmitted at CCK rate in 2GHz band, the user space - * applications use this attribute. - * This attribute is used with %NL80211_CMD_TRIGGER_SCAN and - * %NL80211_CMD_FRAME commands. - * - * @NL80211_ATTR_TDLS_ACTION: Low level TDLS action code (e.g. link setup - * request, link setup confirm, link teardown, etc.). Values are - * described in the TDLS (802.11z) specification. - * @NL80211_ATTR_TDLS_DIALOG_TOKEN: Non-zero token for uniquely identifying a - * TDLS conversation between two devices. - * @NL80211_ATTR_TDLS_OPERATION: High level TDLS operation; see - * &enum nl80211_tdls_operation, represented as a u8. - * @NL80211_ATTR_TDLS_SUPPORT: A flag indicating the device can operate - * as a TDLS peer sta. - * @NL80211_ATTR_TDLS_EXTERNAL_SETUP: The TDLS discovery/setup and teardown - * procedures should be performed by sending TDLS packets via - * %NL80211_CMD_TDLS_MGMT. Otherwise %NL80211_CMD_TDLS_OPER should be - * used for asking the driver to perform a TDLS operation. - * - * @NL80211_ATTR_DEVICE_AP_SME: This u32 attribute may be listed for devices - * that have AP support to indicate that they have the AP SME integrated - * with support for the features listed in this attribute, see - * &enum nl80211_ap_sme_features. - * - * @NL80211_ATTR_DONT_WAIT_FOR_ACK: Used with %NL80211_CMD_FRAME, this tells - * the driver to not wait for an acknowledgement. Note that due to this, - * it will also not give a status callback nor return a cookie. This is - * mostly useful for probe responses to save airtime. - * - * @NL80211_ATTR_FEATURE_FLAGS: This u32 attribute contains flags from - * &enum nl80211_feature_flags and is advertised in wiphy information. - * @NL80211_ATTR_PROBE_RESP_OFFLOAD: Indicates that the HW responds to probe - * - * requests while operating in AP-mode. - * This attribute holds a bitmap of the supported protocols for - * offloading (see &enum nl80211_probe_resp_offload_support_attr). - * - * @NL80211_ATTR_PROBE_RESP: Probe Response template data. Contains the entire - * probe-response frame. The DA field in the 802.11 header is zero-ed out, - * to be filled by the FW. - * @NL80211_ATTR_DISABLE_HT: Force HT capable interfaces to disable - * this feature. Currently, only supported in mac80211 drivers. - * @NL80211_ATTR_HT_CAPABILITY_MASK: Specify which bits of the - * ATTR_HT_CAPABILITY to which attention should be paid. - * Currently, only mac80211 NICs support this feature. - * The values that may be configured are: - * MCS rates, MAX-AMSDU, HT-20-40 and HT_CAP_SGI_40 - * AMPDU density and AMPDU factor. - * All values are treated as suggestions and may be ignored - * by the driver as required. The actual values may be seen in - * the station debugfs ht_caps file. - * - * @NL80211_ATTR_DFS_REGION: region for regulatory rules which this country - * abides to when initiating radiation on DFS channels. A country maps - * to one DFS region. - * - * @NL80211_ATTR_NOACK_MAP: This u16 bitmap contains the No Ack Policy of - * up to 16 TIDs. - * - * @NL80211_ATTR_INACTIVITY_TIMEOUT: timeout value in seconds, this can be - * used by the drivers which has MLME in firmware and does not have support - * to report per station tx/rx activity to free up the staion entry from - * the list. This needs to be used when the driver advertises the - * capability to timeout the stations. - * - * @NL80211_ATTR_RX_SIGNAL_DBM: signal strength in dBm (as a 32-bit int); - * this attribute is (depending on the driver capabilities) added to - * received frames indicated with %NL80211_CMD_FRAME. - * - * @NL80211_ATTR_BG_SCAN_PERIOD: Background scan period in seconds - * or 0 to disable background scan. - * - * @NL80211_ATTR_MAX: highest attribute number currently defined - * @__NL80211_ATTR_AFTER_LAST: internal use - */ -enum nl80211_attrs { -/* don't change the order or add anything between, this is ABI! */ - NL80211_ATTR_UNSPEC, - - NL80211_ATTR_WIPHY, - NL80211_ATTR_WIPHY_NAME, - - NL80211_ATTR_IFINDEX, - NL80211_ATTR_IFNAME, - NL80211_ATTR_IFTYPE, - - NL80211_ATTR_MAC, - - NL80211_ATTR_KEY_DATA, - NL80211_ATTR_KEY_IDX, - NL80211_ATTR_KEY_CIPHER, - NL80211_ATTR_KEY_SEQ, - NL80211_ATTR_KEY_DEFAULT, - - NL80211_ATTR_BEACON_INTERVAL, - NL80211_ATTR_DTIM_PERIOD, - NL80211_ATTR_BEACON_HEAD, - NL80211_ATTR_BEACON_TAIL, - - NL80211_ATTR_STA_AID, - NL80211_ATTR_STA_FLAGS, - NL80211_ATTR_STA_LISTEN_INTERVAL, - NL80211_ATTR_STA_SUPPORTED_RATES, - NL80211_ATTR_STA_VLAN, - NL80211_ATTR_STA_INFO, - - NL80211_ATTR_WIPHY_BANDS, - - NL80211_ATTR_MNTR_FLAGS, - - NL80211_ATTR_MESH_ID, - NL80211_ATTR_STA_PLINK_ACTION, - NL80211_ATTR_MPATH_NEXT_HOP, - NL80211_ATTR_MPATH_INFO, - - NL80211_ATTR_BSS_CTS_PROT, - NL80211_ATTR_BSS_SHORT_PREAMBLE, - NL80211_ATTR_BSS_SHORT_SLOT_TIME, - - NL80211_ATTR_HT_CAPABILITY, - - NL80211_ATTR_SUPPORTED_IFTYPES, - - NL80211_ATTR_REG_ALPHA2, - NL80211_ATTR_REG_RULES, - - NL80211_ATTR_MESH_CONFIG, - - NL80211_ATTR_BSS_BASIC_RATES, - - NL80211_ATTR_WIPHY_TXQ_PARAMS, - NL80211_ATTR_WIPHY_FREQ, - NL80211_ATTR_WIPHY_CHANNEL_TYPE, - - NL80211_ATTR_KEY_DEFAULT_MGMT, - - NL80211_ATTR_MGMT_SUBTYPE, - NL80211_ATTR_IE, - - NL80211_ATTR_MAX_NUM_SCAN_SSIDS, - - NL80211_ATTR_SCAN_FREQUENCIES, - NL80211_ATTR_SCAN_SSIDS, - NL80211_ATTR_GENERATION, /* replaces old SCAN_GENERATION */ - NL80211_ATTR_BSS, - - NL80211_ATTR_REG_INITIATOR, - NL80211_ATTR_REG_TYPE, - - NL80211_ATTR_SUPPORTED_COMMANDS, - - NL80211_ATTR_FRAME, - NL80211_ATTR_SSID, - NL80211_ATTR_AUTH_TYPE, - NL80211_ATTR_REASON_CODE, - - NL80211_ATTR_KEY_TYPE, - - NL80211_ATTR_MAX_SCAN_IE_LEN, - NL80211_ATTR_CIPHER_SUITES, - - NL80211_ATTR_FREQ_BEFORE, - NL80211_ATTR_FREQ_AFTER, - - NL80211_ATTR_FREQ_FIXED, - - - NL80211_ATTR_WIPHY_RETRY_SHORT, - NL80211_ATTR_WIPHY_RETRY_LONG, - NL80211_ATTR_WIPHY_FRAG_THRESHOLD, - NL80211_ATTR_WIPHY_RTS_THRESHOLD, - - NL80211_ATTR_TIMED_OUT, - - NL80211_ATTR_USE_MFP, - - NL80211_ATTR_STA_FLAGS2, - - NL80211_ATTR_CONTROL_PORT, - - NL80211_ATTR_TESTDATA, - - NL80211_ATTR_PRIVACY, - - NL80211_ATTR_DISCONNECTED_BY_AP, - NL80211_ATTR_STATUS_CODE, - - NL80211_ATTR_CIPHER_SUITES_PAIRWISE, - NL80211_ATTR_CIPHER_SUITE_GROUP, - NL80211_ATTR_WPA_VERSIONS, - NL80211_ATTR_AKM_SUITES, - - NL80211_ATTR_REQ_IE, - NL80211_ATTR_RESP_IE, - - NL80211_ATTR_PREV_BSSID, - - NL80211_ATTR_KEY, - NL80211_ATTR_KEYS, - - NL80211_ATTR_PID, - - NL80211_ATTR_4ADDR, - - NL80211_ATTR_SURVEY_INFO, - - NL80211_ATTR_PMKID, - NL80211_ATTR_MAX_NUM_PMKIDS, - - NL80211_ATTR_DURATION, - - NL80211_ATTR_COOKIE, - - NL80211_ATTR_WIPHY_COVERAGE_CLASS, - - NL80211_ATTR_TX_RATES, - - NL80211_ATTR_FRAME_MATCH, - - NL80211_ATTR_ACK, - - NL80211_ATTR_PS_STATE, - - NL80211_ATTR_CQM, - - NL80211_ATTR_LOCAL_STATE_CHANGE, - - NL80211_ATTR_AP_ISOLATE, - - NL80211_ATTR_WIPHY_TX_POWER_SETTING, - NL80211_ATTR_WIPHY_TX_POWER_LEVEL, - - NL80211_ATTR_TX_FRAME_TYPES, - NL80211_ATTR_RX_FRAME_TYPES, - NL80211_ATTR_FRAME_TYPE, - - NL80211_ATTR_CONTROL_PORT_ETHERTYPE, - NL80211_ATTR_CONTROL_PORT_NO_ENCRYPT, - - NL80211_ATTR_SUPPORT_IBSS_RSN, - - NL80211_ATTR_WIPHY_ANTENNA_TX, - NL80211_ATTR_WIPHY_ANTENNA_RX, - - NL80211_ATTR_MCAST_RATE, - - NL80211_ATTR_OFFCHANNEL_TX_OK, - - NL80211_ATTR_BSS_HT_OPMODE, - - NL80211_ATTR_KEY_DEFAULT_TYPES, - - NL80211_ATTR_MAX_REMAIN_ON_CHANNEL_DURATION, - - NL80211_ATTR_MESH_SETUP, - - NL80211_ATTR_WIPHY_ANTENNA_AVAIL_TX, - NL80211_ATTR_WIPHY_ANTENNA_AVAIL_RX, - - NL80211_ATTR_SUPPORT_MESH_AUTH, - NL80211_ATTR_STA_PLINK_STATE, - - NL80211_ATTR_WOWLAN_TRIGGERS, - NL80211_ATTR_WOWLAN_TRIGGERS_SUPPORTED, - - NL80211_ATTR_SCHED_SCAN_INTERVAL, - - NL80211_ATTR_INTERFACE_COMBINATIONS, - NL80211_ATTR_SOFTWARE_IFTYPES, - - NL80211_ATTR_REKEY_DATA, - - NL80211_ATTR_MAX_NUM_SCHED_SCAN_SSIDS, - NL80211_ATTR_MAX_SCHED_SCAN_IE_LEN, - - NL80211_ATTR_SCAN_SUPP_RATES, - - NL80211_ATTR_HIDDEN_SSID, - - NL80211_ATTR_IE_PROBE_RESP, - NL80211_ATTR_IE_ASSOC_RESP, - - NL80211_ATTR_STA_WME, - NL80211_ATTR_SUPPORT_AP_UAPSD, - - NL80211_ATTR_ROAM_SUPPORT, - - NL80211_ATTR_SCHED_SCAN_MATCH, - NL80211_ATTR_MAX_MATCH_SETS, - - NL80211_ATTR_PMKSA_CANDIDATE, - - NL80211_ATTR_TX_NO_CCK_RATE, - - NL80211_ATTR_TDLS_ACTION, - NL80211_ATTR_TDLS_DIALOG_TOKEN, - NL80211_ATTR_TDLS_OPERATION, - NL80211_ATTR_TDLS_SUPPORT, - NL80211_ATTR_TDLS_EXTERNAL_SETUP, - - NL80211_ATTR_DEVICE_AP_SME, - - NL80211_ATTR_DONT_WAIT_FOR_ACK, - - NL80211_ATTR_FEATURE_FLAGS, - - NL80211_ATTR_PROBE_RESP_OFFLOAD, - - NL80211_ATTR_PROBE_RESP, - - NL80211_ATTR_DFS_REGION, - - NL80211_ATTR_DISABLE_HT, - NL80211_ATTR_HT_CAPABILITY_MASK, - - NL80211_ATTR_NOACK_MAP, - - NL80211_ATTR_INACTIVITY_TIMEOUT, - - NL80211_ATTR_RX_SIGNAL_DBM, - - NL80211_ATTR_BG_SCAN_PERIOD, - - /* add attributes here, update the policy in nl80211.c */ - - __NL80211_ATTR_AFTER_LAST, - NL80211_ATTR_MAX = __NL80211_ATTR_AFTER_LAST - 1 -}; - -/* source-level API compatibility */ -#define NL80211_ATTR_SCAN_GENERATION NL80211_ATTR_GENERATION -#define NL80211_ATTR_MESH_PARAMS NL80211_ATTR_MESH_CONFIG - -/* - * Allow user space programs to use #ifdef on new attributes by defining them - * here - */ -#define NL80211_CMD_CONNECT NL80211_CMD_CONNECT -#define NL80211_ATTR_HT_CAPABILITY NL80211_ATTR_HT_CAPABILITY -#define NL80211_ATTR_BSS_BASIC_RATES NL80211_ATTR_BSS_BASIC_RATES -#define NL80211_ATTR_WIPHY_TXQ_PARAMS NL80211_ATTR_WIPHY_TXQ_PARAMS -#define NL80211_ATTR_WIPHY_FREQ NL80211_ATTR_WIPHY_FREQ -#define NL80211_ATTR_WIPHY_CHANNEL_TYPE NL80211_ATTR_WIPHY_CHANNEL_TYPE -#define NL80211_ATTR_MGMT_SUBTYPE NL80211_ATTR_MGMT_SUBTYPE -#define NL80211_ATTR_IE NL80211_ATTR_IE -#define NL80211_ATTR_REG_INITIATOR NL80211_ATTR_REG_INITIATOR -#define NL80211_ATTR_REG_TYPE NL80211_ATTR_REG_TYPE -#define NL80211_ATTR_FRAME NL80211_ATTR_FRAME -#define NL80211_ATTR_SSID NL80211_ATTR_SSID -#define NL80211_ATTR_AUTH_TYPE NL80211_ATTR_AUTH_TYPE -#define NL80211_ATTR_REASON_CODE NL80211_ATTR_REASON_CODE -#define NL80211_ATTR_CIPHER_SUITES_PAIRWISE NL80211_ATTR_CIPHER_SUITES_PAIRWISE -#define NL80211_ATTR_CIPHER_SUITE_GROUP NL80211_ATTR_CIPHER_SUITE_GROUP -#define NL80211_ATTR_WPA_VERSIONS NL80211_ATTR_WPA_VERSIONS -#define NL80211_ATTR_AKM_SUITES NL80211_ATTR_AKM_SUITES -#define NL80211_ATTR_KEY NL80211_ATTR_KEY -#define NL80211_ATTR_KEYS NL80211_ATTR_KEYS -#define NL80211_ATTR_FEATURE_FLAGS NL80211_ATTR_FEATURE_FLAGS - -#define NL80211_MAX_SUPP_RATES 32 -#define NL80211_MAX_SUPP_HT_RATES 77 -#define NL80211_MAX_SUPP_REG_RULES 32 -#define NL80211_TKIP_DATA_OFFSET_ENCR_KEY 0 -#define NL80211_TKIP_DATA_OFFSET_TX_MIC_KEY 16 -#define NL80211_TKIP_DATA_OFFSET_RX_MIC_KEY 24 -#define NL80211_HT_CAPABILITY_LEN 26 - -#define NL80211_MAX_NR_CIPHER_SUITES 5 -#define NL80211_MAX_NR_AKM_SUITES 2 - -/** - * enum nl80211_iftype - (virtual) interface types - * - * @NL80211_IFTYPE_UNSPECIFIED: unspecified type, driver decides - * @NL80211_IFTYPE_ADHOC: independent BSS member - * @NL80211_IFTYPE_STATION: managed BSS member - * @NL80211_IFTYPE_AP: access point - * @NL80211_IFTYPE_AP_VLAN: VLAN interface for access points; VLAN interfaces - * are a bit special in that they must always be tied to a pre-existing - * AP type interface. - * @NL80211_IFTYPE_WDS: wireless distribution interface - * @NL80211_IFTYPE_MONITOR: monitor interface receiving all frames - * @NL80211_IFTYPE_MESH_POINT: mesh point - * @NL80211_IFTYPE_P2P_CLIENT: P2P client - * @NL80211_IFTYPE_P2P_GO: P2P group owner - * @NL80211_IFTYPE_MAX: highest interface type number currently defined - * @NUM_NL80211_IFTYPES: number of defined interface types - * - * These values are used with the %NL80211_ATTR_IFTYPE - * to set the type of an interface. - * - */ -enum nl80211_iftype { - NL80211_IFTYPE_UNSPECIFIED, - NL80211_IFTYPE_ADHOC, - NL80211_IFTYPE_STATION, - NL80211_IFTYPE_AP, - NL80211_IFTYPE_AP_VLAN, - NL80211_IFTYPE_WDS, - NL80211_IFTYPE_MONITOR, - NL80211_IFTYPE_MESH_POINT, - NL80211_IFTYPE_P2P_CLIENT, - NL80211_IFTYPE_P2P_GO, - - /* keep last */ - NUM_NL80211_IFTYPES, - NL80211_IFTYPE_MAX = NUM_NL80211_IFTYPES - 1 -}; - -/** - * enum nl80211_sta_flags - station flags - * - * Station flags. When a station is added to an AP interface, it is - * assumed to be already associated (and hence authenticated.) - * - * @__NL80211_STA_FLAG_INVALID: attribute number 0 is reserved - * @NL80211_STA_FLAG_AUTHORIZED: station is authorized (802.1X) - * @NL80211_STA_FLAG_SHORT_PREAMBLE: station is capable of receiving frames - * with short barker preamble - * @NL80211_STA_FLAG_WME: station is WME/QoS capable - * @NL80211_STA_FLAG_MFP: station uses management frame protection - * @NL80211_STA_FLAG_AUTHENTICATED: station is authenticated - * @NL80211_STA_FLAG_TDLS_PEER: station is a TDLS peer -- this flag should - * only be used in managed mode (even in the flags mask). Note that the - * flag can't be changed, it is only valid while adding a station, and - * attempts to change it will silently be ignored (rather than rejected - * as errors.) - * @NL80211_STA_FLAG_MAX: highest station flag number currently defined - * @__NL80211_STA_FLAG_AFTER_LAST: internal use - */ -enum nl80211_sta_flags { - __NL80211_STA_FLAG_INVALID, - NL80211_STA_FLAG_AUTHORIZED, - NL80211_STA_FLAG_SHORT_PREAMBLE, - NL80211_STA_FLAG_WME, - NL80211_STA_FLAG_MFP, - NL80211_STA_FLAG_AUTHENTICATED, - NL80211_STA_FLAG_TDLS_PEER, - - /* keep last */ - __NL80211_STA_FLAG_AFTER_LAST, - NL80211_STA_FLAG_MAX = __NL80211_STA_FLAG_AFTER_LAST - 1 -}; - -/** - * struct nl80211_sta_flag_update - station flags mask/set - * @mask: mask of station flags to set - * @set: which values to set them to - * - * Both mask and set contain bits as per &enum nl80211_sta_flags. - */ -struct nl80211_sta_flag_update { - __u32 mask; - __u32 set; -} __attribute__((packed)); - -/** - * enum nl80211_rate_info - bitrate information - * - * These attribute types are used with %NL80211_STA_INFO_TXRATE - * when getting information about the bitrate of a station. - * - * @__NL80211_RATE_INFO_INVALID: attribute number 0 is reserved - * @NL80211_RATE_INFO_BITRATE: total bitrate (u16, 100kbit/s) - * @NL80211_RATE_INFO_MCS: mcs index for 802.11n (u8) - * @NL80211_RATE_INFO_40_MHZ_WIDTH: 40 Mhz dualchannel bitrate - * @NL80211_RATE_INFO_SHORT_GI: 400ns guard interval - * @NL80211_RATE_INFO_MAX: highest rate_info number currently defined - * @__NL80211_RATE_INFO_AFTER_LAST: internal use - */ -enum nl80211_rate_info { - __NL80211_RATE_INFO_INVALID, - NL80211_RATE_INFO_BITRATE, - NL80211_RATE_INFO_MCS, - NL80211_RATE_INFO_40_MHZ_WIDTH, - NL80211_RATE_INFO_SHORT_GI, - - /* keep last */ - __NL80211_RATE_INFO_AFTER_LAST, - NL80211_RATE_INFO_MAX = __NL80211_RATE_INFO_AFTER_LAST - 1 -}; - -/** - * enum nl80211_sta_bss_param - BSS information collected by STA - * - * These attribute types are used with %NL80211_STA_INFO_BSS_PARAM - * when getting information about the bitrate of a station. - * - * @__NL80211_STA_BSS_PARAM_INVALID: attribute number 0 is reserved - * @NL80211_STA_BSS_PARAM_CTS_PROT: whether CTS protection is enabled (flag) - * @NL80211_STA_BSS_PARAM_SHORT_PREAMBLE: whether short preamble is enabled - * (flag) - * @NL80211_STA_BSS_PARAM_SHORT_SLOT_TIME: whether short slot time is enabled - * (flag) - * @NL80211_STA_BSS_PARAM_DTIM_PERIOD: DTIM period for beaconing (u8) - * @NL80211_STA_BSS_PARAM_BEACON_INTERVAL: Beacon interval (u16) - * @NL80211_STA_BSS_PARAM_MAX: highest sta_bss_param number currently defined - * @__NL80211_STA_BSS_PARAM_AFTER_LAST: internal use - */ -enum nl80211_sta_bss_param { - __NL80211_STA_BSS_PARAM_INVALID, - NL80211_STA_BSS_PARAM_CTS_PROT, - NL80211_STA_BSS_PARAM_SHORT_PREAMBLE, - NL80211_STA_BSS_PARAM_SHORT_SLOT_TIME, - NL80211_STA_BSS_PARAM_DTIM_PERIOD, - NL80211_STA_BSS_PARAM_BEACON_INTERVAL, - - /* keep last */ - __NL80211_STA_BSS_PARAM_AFTER_LAST, - NL80211_STA_BSS_PARAM_MAX = __NL80211_STA_BSS_PARAM_AFTER_LAST - 1 -}; - -/** - * enum nl80211_sta_info - station information - * - * These attribute types are used with %NL80211_ATTR_STA_INFO - * when getting information about a station. - * - * @__NL80211_STA_INFO_INVALID: attribute number 0 is reserved - * @NL80211_STA_INFO_INACTIVE_TIME: time since last activity (u32, msecs) - * @NL80211_STA_INFO_RX_BYTES: total received bytes (u32, from this station) - * @NL80211_STA_INFO_TX_BYTES: total transmitted bytes (u32, to this station) - * @NL80211_STA_INFO_SIGNAL: signal strength of last received PPDU (u8, dBm) - * @NL80211_STA_INFO_TX_BITRATE: current unicast tx rate, nested attribute - * containing info as possible, see &enum nl80211_rate_info - * @NL80211_STA_INFO_RX_PACKETS: total received packet (u32, from this station) - * @NL80211_STA_INFO_TX_PACKETS: total transmitted packets (u32, to this - * station) - * @NL80211_STA_INFO_TX_RETRIES: total retries (u32, to this station) - * @NL80211_STA_INFO_TX_FAILED: total failed packets (u32, to this station) - * @NL80211_STA_INFO_SIGNAL_AVG: signal strength average (u8, dBm) - * @NL80211_STA_INFO_LLID: the station's mesh LLID - * @NL80211_STA_INFO_PLID: the station's mesh PLID - * @NL80211_STA_INFO_PLINK_STATE: peer link state for the station - * (see %enum nl80211_plink_state) - * @NL80211_STA_INFO_RX_BITRATE: last unicast data frame rx rate, nested - * attribute, like NL80211_STA_INFO_TX_BITRATE. - * @NL80211_STA_INFO_BSS_PARAM: current station's view of BSS, nested attribute - * containing info as possible, see &enum nl80211_sta_bss_param - * @NL80211_STA_INFO_CONNECTED_TIME: time since the station is last connected - * @NL80211_STA_INFO_STA_FLAGS: Contains a struct nl80211_sta_flag_update. - * @NL80211_STA_INFO_BEACON_LOSS: count of times beacon loss was detected (u32) - * @__NL80211_STA_INFO_AFTER_LAST: internal - * @NL80211_STA_INFO_MAX: highest possible station info attribute - */ -enum nl80211_sta_info { - __NL80211_STA_INFO_INVALID, - NL80211_STA_INFO_INACTIVE_TIME, - NL80211_STA_INFO_RX_BYTES, - NL80211_STA_INFO_TX_BYTES, - NL80211_STA_INFO_LLID, - NL80211_STA_INFO_PLID, - NL80211_STA_INFO_PLINK_STATE, - NL80211_STA_INFO_SIGNAL, - NL80211_STA_INFO_TX_BITRATE, - NL80211_STA_INFO_RX_PACKETS, - NL80211_STA_INFO_TX_PACKETS, - NL80211_STA_INFO_TX_RETRIES, - NL80211_STA_INFO_TX_FAILED, - NL80211_STA_INFO_SIGNAL_AVG, - NL80211_STA_INFO_RX_BITRATE, - NL80211_STA_INFO_BSS_PARAM, - NL80211_STA_INFO_CONNECTED_TIME, - NL80211_STA_INFO_STA_FLAGS, - NL80211_STA_INFO_BEACON_LOSS, - - /* keep last */ - __NL80211_STA_INFO_AFTER_LAST, - NL80211_STA_INFO_MAX = __NL80211_STA_INFO_AFTER_LAST - 1 -}; - -/** - * enum nl80211_mpath_flags - nl80211 mesh path flags - * - * @NL80211_MPATH_FLAG_ACTIVE: the mesh path is active - * @NL80211_MPATH_FLAG_RESOLVING: the mesh path discovery process is running - * @NL80211_MPATH_FLAG_SN_VALID: the mesh path contains a valid SN - * @NL80211_MPATH_FLAG_FIXED: the mesh path has been manually set - * @NL80211_MPATH_FLAG_RESOLVED: the mesh path discovery process succeeded - */ -enum nl80211_mpath_flags { - NL80211_MPATH_FLAG_ACTIVE = 1<<0, - NL80211_MPATH_FLAG_RESOLVING = 1<<1, - NL80211_MPATH_FLAG_SN_VALID = 1<<2, - NL80211_MPATH_FLAG_FIXED = 1<<3, - NL80211_MPATH_FLAG_RESOLVED = 1<<4, -}; - -/** - * enum nl80211_mpath_info - mesh path information - * - * These attribute types are used with %NL80211_ATTR_MPATH_INFO when getting - * information about a mesh path. - * - * @__NL80211_MPATH_INFO_INVALID: attribute number 0 is reserved - * @NL80211_MPATH_INFO_FRAME_QLEN: number of queued frames for this destination - * @NL80211_MPATH_INFO_SN: destination sequence number - * @NL80211_MPATH_INFO_METRIC: metric (cost) of this mesh path - * @NL80211_MPATH_INFO_EXPTIME: expiration time for the path, in msec from now - * @NL80211_MPATH_INFO_FLAGS: mesh path flags, enumerated in - * &enum nl80211_mpath_flags; - * @NL80211_MPATH_INFO_DISCOVERY_TIMEOUT: total path discovery timeout, in msec - * @NL80211_MPATH_INFO_DISCOVERY_RETRIES: mesh path discovery retries - * @NL80211_MPATH_INFO_MAX: highest mesh path information attribute number - * currently defind - * @__NL80211_MPATH_INFO_AFTER_LAST: internal use - */ -enum nl80211_mpath_info { - __NL80211_MPATH_INFO_INVALID, - NL80211_MPATH_INFO_FRAME_QLEN, - NL80211_MPATH_INFO_SN, - NL80211_MPATH_INFO_METRIC, - NL80211_MPATH_INFO_EXPTIME, - NL80211_MPATH_INFO_FLAGS, - NL80211_MPATH_INFO_DISCOVERY_TIMEOUT, - NL80211_MPATH_INFO_DISCOVERY_RETRIES, - - /* keep last */ - __NL80211_MPATH_INFO_AFTER_LAST, - NL80211_MPATH_INFO_MAX = __NL80211_MPATH_INFO_AFTER_LAST - 1 -}; - -/** - * enum nl80211_band_attr - band attributes - * @__NL80211_BAND_ATTR_INVALID: attribute number 0 is reserved - * @NL80211_BAND_ATTR_FREQS: supported frequencies in this band, - * an array of nested frequency attributes - * @NL80211_BAND_ATTR_RATES: supported bitrates in this band, - * an array of nested bitrate attributes - * @NL80211_BAND_ATTR_HT_MCS_SET: 16-byte attribute containing the MCS set as - * defined in 802.11n - * @NL80211_BAND_ATTR_HT_CAPA: HT capabilities, as in the HT information IE - * @NL80211_BAND_ATTR_HT_AMPDU_FACTOR: A-MPDU factor, as in 11n - * @NL80211_BAND_ATTR_HT_AMPDU_DENSITY: A-MPDU density, as in 11n - * @NL80211_BAND_ATTR_MAX: highest band attribute currently defined - * @__NL80211_BAND_ATTR_AFTER_LAST: internal use - */ -enum nl80211_band_attr { - __NL80211_BAND_ATTR_INVALID, - NL80211_BAND_ATTR_FREQS, - NL80211_BAND_ATTR_RATES, - - NL80211_BAND_ATTR_HT_MCS_SET, - NL80211_BAND_ATTR_HT_CAPA, - NL80211_BAND_ATTR_HT_AMPDU_FACTOR, - NL80211_BAND_ATTR_HT_AMPDU_DENSITY, - - /* keep last */ - __NL80211_BAND_ATTR_AFTER_LAST, - NL80211_BAND_ATTR_MAX = __NL80211_BAND_ATTR_AFTER_LAST - 1 -}; - -#define NL80211_BAND_ATTR_HT_CAPA NL80211_BAND_ATTR_HT_CAPA - -/** - * enum nl80211_frequency_attr - frequency attributes - * @__NL80211_FREQUENCY_ATTR_INVALID: attribute number 0 is reserved - * @NL80211_FREQUENCY_ATTR_FREQ: Frequency in MHz - * @NL80211_FREQUENCY_ATTR_DISABLED: Channel is disabled in current - * regulatory domain. - * @NL80211_FREQUENCY_ATTR_PASSIVE_SCAN: Only passive scanning is - * permitted on this channel in current regulatory domain. - * @NL80211_FREQUENCY_ATTR_NO_IBSS: IBSS networks are not permitted - * on this channel in current regulatory domain. - * @NL80211_FREQUENCY_ATTR_RADAR: Radar detection is mandatory - * on this channel in current regulatory domain. - * @NL80211_FREQUENCY_ATTR_MAX_TX_POWER: Maximum transmission power in mBm - * (100 * dBm). - * @NL80211_FREQUENCY_ATTR_MAX: highest frequency attribute number - * currently defined - * @__NL80211_FREQUENCY_ATTR_AFTER_LAST: internal use - */ -enum nl80211_frequency_attr { - __NL80211_FREQUENCY_ATTR_INVALID, - NL80211_FREQUENCY_ATTR_FREQ, - NL80211_FREQUENCY_ATTR_DISABLED, - NL80211_FREQUENCY_ATTR_PASSIVE_SCAN, - NL80211_FREQUENCY_ATTR_NO_IBSS, - NL80211_FREQUENCY_ATTR_RADAR, - NL80211_FREQUENCY_ATTR_MAX_TX_POWER, - - /* keep last */ - __NL80211_FREQUENCY_ATTR_AFTER_LAST, - NL80211_FREQUENCY_ATTR_MAX = __NL80211_FREQUENCY_ATTR_AFTER_LAST - 1 -}; - -#define NL80211_FREQUENCY_ATTR_MAX_TX_POWER NL80211_FREQUENCY_ATTR_MAX_TX_POWER - -/** - * enum nl80211_bitrate_attr - bitrate attributes - * @__NL80211_BITRATE_ATTR_INVALID: attribute number 0 is reserved - * @NL80211_BITRATE_ATTR_RATE: Bitrate in units of 100 kbps - * @NL80211_BITRATE_ATTR_2GHZ_SHORTPREAMBLE: Short preamble supported - * in 2.4 GHz band. - * @NL80211_BITRATE_ATTR_MAX: highest bitrate attribute number - * currently defined - * @__NL80211_BITRATE_ATTR_AFTER_LAST: internal use - */ -enum nl80211_bitrate_attr { - __NL80211_BITRATE_ATTR_INVALID, - NL80211_BITRATE_ATTR_RATE, - NL80211_BITRATE_ATTR_2GHZ_SHORTPREAMBLE, - - /* keep last */ - __NL80211_BITRATE_ATTR_AFTER_LAST, - NL80211_BITRATE_ATTR_MAX = __NL80211_BITRATE_ATTR_AFTER_LAST - 1 -}; - -/** - * enum nl80211_initiator - Indicates the initiator of a reg domain request - * @NL80211_REGDOM_SET_BY_CORE: Core queried CRDA for a dynamic world - * regulatory domain. - * @NL80211_REGDOM_SET_BY_USER: User asked the wireless core to set the - * regulatory domain. - * @NL80211_REGDOM_SET_BY_DRIVER: a wireless drivers has hinted to the - * wireless core it thinks its knows the regulatory domain we should be in. - * @NL80211_REGDOM_SET_BY_COUNTRY_IE: the wireless core has received an - * 802.11 country information element with regulatory information it - * thinks we should consider. cfg80211 only processes the country - * code from the IE, and relies on the regulatory domain information - * structure passed by userspace (CRDA) from our wireless-regdb. - * If a channel is enabled but the country code indicates it should - * be disabled we disable the channel and re-enable it upon disassociation. - */ -enum nl80211_reg_initiator { - NL80211_REGDOM_SET_BY_CORE, - NL80211_REGDOM_SET_BY_USER, - NL80211_REGDOM_SET_BY_DRIVER, - NL80211_REGDOM_SET_BY_COUNTRY_IE, -}; - -/** - * enum nl80211_reg_type - specifies the type of regulatory domain - * @NL80211_REGDOM_TYPE_COUNTRY: the regulatory domain set is one that pertains - * to a specific country. When this is set you can count on the - * ISO / IEC 3166 alpha2 country code being valid. - * @NL80211_REGDOM_TYPE_WORLD: the regulatory set domain is the world regulatory - * domain. - * @NL80211_REGDOM_TYPE_CUSTOM_WORLD: the regulatory domain set is a custom - * driver specific world regulatory domain. These do not apply system-wide - * and are only applicable to the individual devices which have requested - * them to be applied. - * @NL80211_REGDOM_TYPE_INTERSECTION: the regulatory domain set is the product - * of an intersection between two regulatory domains -- the previously - * set regulatory domain on the system and the last accepted regulatory - * domain request to be processed. - */ -enum nl80211_reg_type { - NL80211_REGDOM_TYPE_COUNTRY, - NL80211_REGDOM_TYPE_WORLD, - NL80211_REGDOM_TYPE_CUSTOM_WORLD, - NL80211_REGDOM_TYPE_INTERSECTION, -}; - -/** - * enum nl80211_reg_rule_attr - regulatory rule attributes - * @__NL80211_REG_RULE_ATTR_INVALID: attribute number 0 is reserved - * @NL80211_ATTR_REG_RULE_FLAGS: a set of flags which specify additional - * considerations for a given frequency range. These are the - * &enum nl80211_reg_rule_flags. - * @NL80211_ATTR_FREQ_RANGE_START: starting frequencry for the regulatory - * rule in KHz. This is not a center of frequency but an actual regulatory - * band edge. - * @NL80211_ATTR_FREQ_RANGE_END: ending frequency for the regulatory rule - * in KHz. This is not a center a frequency but an actual regulatory - * band edge. - * @NL80211_ATTR_FREQ_RANGE_MAX_BW: maximum allowed bandwidth for this - * frequency range, in KHz. - * @NL80211_ATTR_POWER_RULE_MAX_ANT_GAIN: the maximum allowed antenna gain - * for a given frequency range. The value is in mBi (100 * dBi). - * If you don't have one then don't send this. - * @NL80211_ATTR_POWER_RULE_MAX_EIRP: the maximum allowed EIRP for - * a given frequency range. The value is in mBm (100 * dBm). - * @NL80211_REG_RULE_ATTR_MAX: highest regulatory rule attribute number - * currently defined - * @__NL80211_REG_RULE_ATTR_AFTER_LAST: internal use - */ -enum nl80211_reg_rule_attr { - __NL80211_REG_RULE_ATTR_INVALID, - NL80211_ATTR_REG_RULE_FLAGS, - - NL80211_ATTR_FREQ_RANGE_START, - NL80211_ATTR_FREQ_RANGE_END, - NL80211_ATTR_FREQ_RANGE_MAX_BW, - - NL80211_ATTR_POWER_RULE_MAX_ANT_GAIN, - NL80211_ATTR_POWER_RULE_MAX_EIRP, - - /* keep last */ - __NL80211_REG_RULE_ATTR_AFTER_LAST, - NL80211_REG_RULE_ATTR_MAX = __NL80211_REG_RULE_ATTR_AFTER_LAST - 1 -}; - -/** - * enum nl80211_sched_scan_match_attr - scheduled scan match attributes - * @__NL80211_SCHED_SCAN_MATCH_ATTR_INVALID: attribute number 0 is reserved - * @NL80211_SCHED_SCAN_MATCH_ATTR_SSID: SSID to be used for matching, - * only report BSS with matching SSID. - * @NL80211_SCHED_SCAN_MATCH_ATTR_MAX: highest scheduled scan filter - * attribute number currently defined - * @__NL80211_SCHED_SCAN_MATCH_ATTR_AFTER_LAST: internal use - */ -enum nl80211_sched_scan_match_attr { - __NL80211_SCHED_SCAN_MATCH_ATTR_INVALID, - - NL80211_ATTR_SCHED_SCAN_MATCH_SSID, - - /* keep last */ - __NL80211_SCHED_SCAN_MATCH_ATTR_AFTER_LAST, - NL80211_SCHED_SCAN_MATCH_ATTR_MAX = - __NL80211_SCHED_SCAN_MATCH_ATTR_AFTER_LAST - 1 -}; - -/** - * enum nl80211_reg_rule_flags - regulatory rule flags - * - * @NL80211_RRF_NO_OFDM: OFDM modulation not allowed - * @NL80211_RRF_NO_CCK: CCK modulation not allowed - * @NL80211_RRF_NO_INDOOR: indoor operation not allowed - * @NL80211_RRF_NO_OUTDOOR: outdoor operation not allowed - * @NL80211_RRF_DFS: DFS support is required to be used - * @NL80211_RRF_PTP_ONLY: this is only for Point To Point links - * @NL80211_RRF_PTMP_ONLY: this is only for Point To Multi Point links - * @NL80211_RRF_PASSIVE_SCAN: passive scan is required - * @NL80211_RRF_NO_IBSS: no IBSS is allowed - */ -enum nl80211_reg_rule_flags { - NL80211_RRF_NO_OFDM = 1<<0, - NL80211_RRF_NO_CCK = 1<<1, - NL80211_RRF_NO_INDOOR = 1<<2, - NL80211_RRF_NO_OUTDOOR = 1<<3, - NL80211_RRF_DFS = 1<<4, - NL80211_RRF_PTP_ONLY = 1<<5, - NL80211_RRF_PTMP_ONLY = 1<<6, - NL80211_RRF_PASSIVE_SCAN = 1<<7, - NL80211_RRF_NO_IBSS = 1<<8, -}; - -/** - * enum nl80211_dfs_regions - regulatory DFS regions - * - * @NL80211_DFS_UNSET: Country has no DFS master region specified - * @NL80211_DFS_FCC_: Country follows DFS master rules from FCC - * @NL80211_DFS_FCC_: Country follows DFS master rules from ETSI - * @NL80211_DFS_JP_: Country follows DFS master rules from JP/MKK/Telec - */ -enum nl80211_dfs_regions { - NL80211_DFS_UNSET = 0, - NL80211_DFS_FCC = 1, - NL80211_DFS_ETSI = 2, - NL80211_DFS_JP = 3, -}; - -/** - * enum nl80211_survey_info - survey information - * - * These attribute types are used with %NL80211_ATTR_SURVEY_INFO - * when getting information about a survey. - * - * @__NL80211_SURVEY_INFO_INVALID: attribute number 0 is reserved - * @NL80211_SURVEY_INFO_FREQUENCY: center frequency of channel - * @NL80211_SURVEY_INFO_NOISE: noise level of channel (u8, dBm) - * @NL80211_SURVEY_INFO_IN_USE: channel is currently being used - * @NL80211_SURVEY_INFO_CHANNEL_TIME: amount of time (in ms) that the radio - * spent on this channel - * @NL80211_SURVEY_INFO_CHANNEL_TIME_BUSY: amount of the time the primary - * channel was sensed busy (either due to activity or energy detect) - * @NL80211_SURVEY_INFO_CHANNEL_TIME_EXT_BUSY: amount of time the extension - * channel was sensed busy - * @NL80211_SURVEY_INFO_CHANNEL_TIME_RX: amount of time the radio spent - * receiving data - * @NL80211_SURVEY_INFO_CHANNEL_TIME_TX: amount of time the radio spent - * transmitting data - * @NL80211_SURVEY_INFO_MAX: highest survey info attribute number - * currently defined - * @__NL80211_SURVEY_INFO_AFTER_LAST: internal use - */ -enum nl80211_survey_info { - __NL80211_SURVEY_INFO_INVALID, - NL80211_SURVEY_INFO_FREQUENCY, - NL80211_SURVEY_INFO_NOISE, - NL80211_SURVEY_INFO_IN_USE, - NL80211_SURVEY_INFO_CHANNEL_TIME, - NL80211_SURVEY_INFO_CHANNEL_TIME_BUSY, - NL80211_SURVEY_INFO_CHANNEL_TIME_EXT_BUSY, - NL80211_SURVEY_INFO_CHANNEL_TIME_RX, - NL80211_SURVEY_INFO_CHANNEL_TIME_TX, - - /* keep last */ - __NL80211_SURVEY_INFO_AFTER_LAST, - NL80211_SURVEY_INFO_MAX = __NL80211_SURVEY_INFO_AFTER_LAST - 1 -}; - -/** - * enum nl80211_mntr_flags - monitor configuration flags - * - * Monitor configuration flags. - * - * @__NL80211_MNTR_FLAG_INVALID: reserved - * - * @NL80211_MNTR_FLAG_FCSFAIL: pass frames with bad FCS - * @NL80211_MNTR_FLAG_PLCPFAIL: pass frames with bad PLCP - * @NL80211_MNTR_FLAG_CONTROL: pass control frames - * @NL80211_MNTR_FLAG_OTHER_BSS: disable BSSID filtering - * @NL80211_MNTR_FLAG_COOK_FRAMES: report frames after processing. - * overrides all other flags. - * - * @__NL80211_MNTR_FLAG_AFTER_LAST: internal use - * @NL80211_MNTR_FLAG_MAX: highest possible monitor flag - */ -enum nl80211_mntr_flags { - __NL80211_MNTR_FLAG_INVALID, - NL80211_MNTR_FLAG_FCSFAIL, - NL80211_MNTR_FLAG_PLCPFAIL, - NL80211_MNTR_FLAG_CONTROL, - NL80211_MNTR_FLAG_OTHER_BSS, - NL80211_MNTR_FLAG_COOK_FRAMES, - - /* keep last */ - __NL80211_MNTR_FLAG_AFTER_LAST, - NL80211_MNTR_FLAG_MAX = __NL80211_MNTR_FLAG_AFTER_LAST - 1 -}; - -/** - * enum nl80211_meshconf_params - mesh configuration parameters - * - * Mesh configuration parameters. These can be changed while the mesh is - * active. - * - * @__NL80211_MESHCONF_INVALID: internal use - * - * @NL80211_MESHCONF_RETRY_TIMEOUT: specifies the initial retry timeout in - * millisecond units, used by the Peer Link Open message - * - * @NL80211_MESHCONF_CONFIRM_TIMEOUT: specifies the initial confirm timeout, in - * millisecond units, used by the peer link management to close a peer link - * - * @NL80211_MESHCONF_HOLDING_TIMEOUT: specifies the holding timeout, in - * millisecond units - * - * @NL80211_MESHCONF_MAX_PEER_LINKS: maximum number of peer links allowed - * on this mesh interface - * - * @NL80211_MESHCONF_MAX_RETRIES: specifies the maximum number of peer link - * open retries that can be sent to establish a new peer link instance in a - * mesh - * - * @NL80211_MESHCONF_TTL: specifies the value of TTL field set at a source mesh - * point. - * - * @NL80211_MESHCONF_AUTO_OPEN_PLINKS: whether we should automatically - * open peer links when we detect compatible mesh peers. - * - * @NL80211_MESHCONF_HWMP_MAX_PREQ_RETRIES: the number of action frames - * containing a PREQ that an MP can send to a particular destination (path - * target) - * - * @NL80211_MESHCONF_PATH_REFRESH_TIME: how frequently to refresh mesh paths - * (in milliseconds) - * - * @NL80211_MESHCONF_MIN_DISCOVERY_TIMEOUT: minimum length of time to wait - * until giving up on a path discovery (in milliseconds) - * - * @NL80211_MESHCONF_HWMP_ACTIVE_PATH_TIMEOUT: The time (in TUs) for which mesh - * points receiving a PREQ shall consider the forwarding information from the - * root to be valid. (TU = time unit) - * - * @NL80211_MESHCONF_HWMP_PREQ_MIN_INTERVAL: The minimum interval of time (in - * TUs) during which an MP can send only one action frame containing a PREQ - * reference element - * - * @NL80211_MESHCONF_HWMP_NET_DIAM_TRVS_TIME: The interval of time (in TUs) - * that it takes for an HWMP information element to propagate across the mesh - * - * @NL80211_MESHCONF_HWMP_ROOTMODE: whether root mode is enabled or not - * - * @NL80211_MESHCONF_ELEMENT_TTL: specifies the value of TTL field set at a - * source mesh point for path selection elements. - * - * @NL80211_MESHCONF_HWMP_RANN_INTERVAL: The interval of time (in TUs) between - * root announcements are transmitted. - * - * @NL80211_MESHCONF_GATE_ANNOUNCEMENTS: Advertise that this mesh station has - * access to a broader network beyond the MBSS. This is done via Root - * Announcement frames. - * - * @NL80211_MESHCONF_HWMP_PERR_MIN_INTERVAL: The minimum interval of time (in - * TUs) during which a mesh STA can send only one Action frame containing a - * PERR element. - * - * @NL80211_MESHCONF_FORWARDING: set Mesh STA as forwarding or non-forwarding - * or forwarding entity (default is TRUE - forwarding entity) - * - * @NL80211_MESHCONF_RSSI_THRESHOLD: RSSI threshold in dBm. This specifies the - * threshold for average signal strength of candidate station to establish - * a peer link. - * - * @NL80211_MESHCONF_ATTR_MAX: highest possible mesh configuration attribute - * - * @__NL80211_MESHCONF_ATTR_AFTER_LAST: internal use - */ -enum nl80211_meshconf_params { - __NL80211_MESHCONF_INVALID, - NL80211_MESHCONF_RETRY_TIMEOUT, - NL80211_MESHCONF_CONFIRM_TIMEOUT, - NL80211_MESHCONF_HOLDING_TIMEOUT, - NL80211_MESHCONF_MAX_PEER_LINKS, - NL80211_MESHCONF_MAX_RETRIES, - NL80211_MESHCONF_TTL, - NL80211_MESHCONF_AUTO_OPEN_PLINKS, - NL80211_MESHCONF_HWMP_MAX_PREQ_RETRIES, - NL80211_MESHCONF_PATH_REFRESH_TIME, - NL80211_MESHCONF_MIN_DISCOVERY_TIMEOUT, - NL80211_MESHCONF_HWMP_ACTIVE_PATH_TIMEOUT, - NL80211_MESHCONF_HWMP_PREQ_MIN_INTERVAL, - NL80211_MESHCONF_HWMP_NET_DIAM_TRVS_TIME, - NL80211_MESHCONF_HWMP_ROOTMODE, - NL80211_MESHCONF_ELEMENT_TTL, - NL80211_MESHCONF_HWMP_RANN_INTERVAL, - NL80211_MESHCONF_GATE_ANNOUNCEMENTS, - NL80211_MESHCONF_HWMP_PERR_MIN_INTERVAL, - NL80211_MESHCONF_FORWARDING, - NL80211_MESHCONF_RSSI_THRESHOLD, - - /* keep last */ - __NL80211_MESHCONF_ATTR_AFTER_LAST, - NL80211_MESHCONF_ATTR_MAX = __NL80211_MESHCONF_ATTR_AFTER_LAST - 1 -}; - -/** - * enum nl80211_mesh_setup_params - mesh setup parameters - * - * Mesh setup parameters. These are used to start/join a mesh and cannot be - * changed while the mesh is active. - * - * @__NL80211_MESH_SETUP_INVALID: Internal use - * - * @NL80211_MESH_SETUP_ENABLE_VENDOR_PATH_SEL: Enable this option to use a - * vendor specific path selection algorithm or disable it to use the default - * HWMP. - * - * @NL80211_MESH_SETUP_ENABLE_VENDOR_METRIC: Enable this option to use a - * vendor specific path metric or disable it to use the default Airtime - * metric. - * - * @NL80211_MESH_SETUP_IE: Information elements for this mesh, for instance, a - * robust security network ie, or a vendor specific information element that - * vendors will use to identify the path selection methods and metrics in use. - * - * @NL80211_MESH_SETUP_USERSPACE_AUTH: Enable this option if an authentication - * daemon will be authenticating mesh candidates. - * - * @NL80211_MESH_SETUP_USERSPACE_AMPE: Enable this option if an authentication - * daemon will be securing peer link frames. AMPE is a secured version of Mesh - * Peering Management (MPM) and is implemented with the assistance of a - * userspace daemon. When this flag is set, the kernel will send peer - * management frames to a userspace daemon that will implement AMPE - * functionality (security capabilities selection, key confirmation, and key - * management). When the flag is unset (default), the kernel can autonomously - * complete (unsecured) mesh peering without the need of a userspace daemon. - * - * @NL80211_MESH_SETUP_ATTR_MAX: highest possible mesh setup attribute number - * @__NL80211_MESH_SETUP_ATTR_AFTER_LAST: Internal use - */ -enum nl80211_mesh_setup_params { - __NL80211_MESH_SETUP_INVALID, - NL80211_MESH_SETUP_ENABLE_VENDOR_PATH_SEL, - NL80211_MESH_SETUP_ENABLE_VENDOR_METRIC, - NL80211_MESH_SETUP_IE, - NL80211_MESH_SETUP_USERSPACE_AUTH, - NL80211_MESH_SETUP_USERSPACE_AMPE, - - /* keep last */ - __NL80211_MESH_SETUP_ATTR_AFTER_LAST, - NL80211_MESH_SETUP_ATTR_MAX = __NL80211_MESH_SETUP_ATTR_AFTER_LAST - 1 -}; - -/** - * enum nl80211_txq_attr - TX queue parameter attributes - * @__NL80211_TXQ_ATTR_INVALID: Attribute number 0 is reserved - * @NL80211_TXQ_ATTR_QUEUE: TX queue identifier (NL80211_TXQ_Q_*) - * @NL80211_TXQ_ATTR_TXOP: Maximum burst time in units of 32 usecs, 0 meaning - * disabled - * @NL80211_TXQ_ATTR_CWMIN: Minimum contention window [a value of the form - * 2^n-1 in the range 1..32767] - * @NL80211_TXQ_ATTR_CWMAX: Maximum contention window [a value of the form - * 2^n-1 in the range 1..32767] - * @NL80211_TXQ_ATTR_AIFS: Arbitration interframe space [0..255] - * @__NL80211_TXQ_ATTR_AFTER_LAST: Internal - * @NL80211_TXQ_ATTR_MAX: Maximum TXQ attribute number - */ -enum nl80211_txq_attr { - __NL80211_TXQ_ATTR_INVALID, - NL80211_TXQ_ATTR_QUEUE, - NL80211_TXQ_ATTR_TXOP, - NL80211_TXQ_ATTR_CWMIN, - NL80211_TXQ_ATTR_CWMAX, - NL80211_TXQ_ATTR_AIFS, - - /* keep last */ - __NL80211_TXQ_ATTR_AFTER_LAST, - NL80211_TXQ_ATTR_MAX = __NL80211_TXQ_ATTR_AFTER_LAST - 1 -}; - -enum nl80211_txq_q { - NL80211_TXQ_Q_VO, - NL80211_TXQ_Q_VI, - NL80211_TXQ_Q_BE, - NL80211_TXQ_Q_BK -}; - -enum nl80211_channel_type { - NL80211_CHAN_NO_HT, - NL80211_CHAN_HT20, - NL80211_CHAN_HT40MINUS, - NL80211_CHAN_HT40PLUS -}; - -/** - * enum nl80211_bss - netlink attributes for a BSS - * - * @__NL80211_BSS_INVALID: invalid - * @NL80211_BSS_BSSID: BSSID of the BSS (6 octets) - * @NL80211_BSS_FREQUENCY: frequency in MHz (u32) - * @NL80211_BSS_TSF: TSF of the received probe response/beacon (u64) - * @NL80211_BSS_BEACON_INTERVAL: beacon interval of the (I)BSS (u16) - * @NL80211_BSS_CAPABILITY: capability field (CPU order, u16) - * @NL80211_BSS_INFORMATION_ELEMENTS: binary attribute containing the - * raw information elements from the probe response/beacon (bin); - * if the %NL80211_BSS_BEACON_IES attribute is present, the IEs here are - * from a Probe Response frame; otherwise they are from a Beacon frame. - * However, if the driver does not indicate the source of the IEs, these - * IEs may be from either frame subtype. - * @NL80211_BSS_SIGNAL_MBM: signal strength of probe response/beacon - * in mBm (100 * dBm) (s32) - * @NL80211_BSS_SIGNAL_UNSPEC: signal strength of the probe response/beacon - * in unspecified units, scaled to 0..100 (u8) - * @NL80211_BSS_STATUS: status, if this BSS is "used" - * @NL80211_BSS_SEEN_MS_AGO: age of this BSS entry in ms - * @NL80211_BSS_BEACON_IES: binary attribute containing the raw information - * elements from a Beacon frame (bin); not present if no Beacon frame has - * yet been received - * @__NL80211_BSS_AFTER_LAST: internal - * @NL80211_BSS_MAX: highest BSS attribute - */ -enum nl80211_bss { - __NL80211_BSS_INVALID, - NL80211_BSS_BSSID, - NL80211_BSS_FREQUENCY, - NL80211_BSS_TSF, - NL80211_BSS_BEACON_INTERVAL, - NL80211_BSS_CAPABILITY, - NL80211_BSS_INFORMATION_ELEMENTS, - NL80211_BSS_SIGNAL_MBM, - NL80211_BSS_SIGNAL_UNSPEC, - NL80211_BSS_STATUS, - NL80211_BSS_SEEN_MS_AGO, - NL80211_BSS_BEACON_IES, - - /* keep last */ - __NL80211_BSS_AFTER_LAST, - NL80211_BSS_MAX = __NL80211_BSS_AFTER_LAST - 1 -}; - -/** - * enum nl80211_bss_status - BSS "status" - * @NL80211_BSS_STATUS_AUTHENTICATED: Authenticated with this BSS. - * @NL80211_BSS_STATUS_ASSOCIATED: Associated with this BSS. - * @NL80211_BSS_STATUS_IBSS_JOINED: Joined to this IBSS. - * - * The BSS status is a BSS attribute in scan dumps, which - * indicates the status the interface has wrt. this BSS. - */ -enum nl80211_bss_status { - NL80211_BSS_STATUS_AUTHENTICATED, - NL80211_BSS_STATUS_ASSOCIATED, - NL80211_BSS_STATUS_IBSS_JOINED, -}; - -/** - * enum nl80211_auth_type - AuthenticationType - * - * @NL80211_AUTHTYPE_OPEN_SYSTEM: Open System authentication - * @NL80211_AUTHTYPE_SHARED_KEY: Shared Key authentication (WEP only) - * @NL80211_AUTHTYPE_FT: Fast BSS Transition (IEEE 802.11r) - * @NL80211_AUTHTYPE_NETWORK_EAP: Network EAP (some Cisco APs and mainly LEAP) - * @__NL80211_AUTHTYPE_NUM: internal - * @NL80211_AUTHTYPE_MAX: maximum valid auth algorithm - * @NL80211_AUTHTYPE_AUTOMATIC: determine automatically (if necessary by - * trying multiple times); this is invalid in netlink -- leave out - * the attribute for this on CONNECT commands. - */ -enum nl80211_auth_type { - NL80211_AUTHTYPE_OPEN_SYSTEM, - NL80211_AUTHTYPE_SHARED_KEY, - NL80211_AUTHTYPE_FT, - NL80211_AUTHTYPE_NETWORK_EAP, - - /* keep last */ - __NL80211_AUTHTYPE_NUM, - NL80211_AUTHTYPE_MAX = __NL80211_AUTHTYPE_NUM - 1, - NL80211_AUTHTYPE_AUTOMATIC -}; - -/** - * enum nl80211_key_type - Key Type - * @NL80211_KEYTYPE_GROUP: Group (broadcast/multicast) key - * @NL80211_KEYTYPE_PAIRWISE: Pairwise (unicast/individual) key - * @NL80211_KEYTYPE_PEERKEY: PeerKey (DLS) - * @NUM_NL80211_KEYTYPES: number of defined key types - */ -enum nl80211_key_type { - NL80211_KEYTYPE_GROUP, - NL80211_KEYTYPE_PAIRWISE, - NL80211_KEYTYPE_PEERKEY, - - NUM_NL80211_KEYTYPES -}; - -/** - * enum nl80211_mfp - Management frame protection state - * @NL80211_MFP_NO: Management frame protection not used - * @NL80211_MFP_REQUIRED: Management frame protection required - */ -enum nl80211_mfp { - NL80211_MFP_NO, - NL80211_MFP_REQUIRED, -}; - -enum nl80211_wpa_versions { - NL80211_WPA_VERSION_1 = 1 << 0, - NL80211_WPA_VERSION_2 = 1 << 1, -}; - -/** - * enum nl80211_key_default_types - key default types - * @__NL80211_KEY_DEFAULT_TYPE_INVALID: invalid - * @NL80211_KEY_DEFAULT_TYPE_UNICAST: key should be used as default - * unicast key - * @NL80211_KEY_DEFAULT_TYPE_MULTICAST: key should be used as default - * multicast key - * @NUM_NL80211_KEY_DEFAULT_TYPES: number of default types - */ -enum nl80211_key_default_types { - __NL80211_KEY_DEFAULT_TYPE_INVALID, - NL80211_KEY_DEFAULT_TYPE_UNICAST, - NL80211_KEY_DEFAULT_TYPE_MULTICAST, - - NUM_NL80211_KEY_DEFAULT_TYPES -}; - -/** - * enum nl80211_key_attributes - key attributes - * @__NL80211_KEY_INVALID: invalid - * @NL80211_KEY_DATA: (temporal) key data; for TKIP this consists of - * 16 bytes encryption key followed by 8 bytes each for TX and RX MIC - * keys - * @NL80211_KEY_IDX: key ID (u8, 0-3) - * @NL80211_KEY_CIPHER: key cipher suite (u32, as defined by IEEE 802.11 - * section 7.3.2.25.1, e.g. 0x000FAC04) - * @NL80211_KEY_SEQ: transmit key sequence number (IV/PN) for TKIP and - * CCMP keys, each six bytes in little endian - * @NL80211_KEY_DEFAULT: flag indicating default key - * @NL80211_KEY_DEFAULT_MGMT: flag indicating default management key - * @NL80211_KEY_TYPE: the key type from enum nl80211_key_type, if not - * specified the default depends on whether a MAC address was - * given with the command using the key or not (u32) - * @NL80211_KEY_DEFAULT_TYPES: A nested attribute containing flags - * attributes, specifying what a key should be set as default as. - * See &enum nl80211_key_default_types. - * @__NL80211_KEY_AFTER_LAST: internal - * @NL80211_KEY_MAX: highest key attribute - */ -enum nl80211_key_attributes { - __NL80211_KEY_INVALID, - NL80211_KEY_DATA, - NL80211_KEY_IDX, - NL80211_KEY_CIPHER, - NL80211_KEY_SEQ, - NL80211_KEY_DEFAULT, - NL80211_KEY_DEFAULT_MGMT, - NL80211_KEY_TYPE, - NL80211_KEY_DEFAULT_TYPES, - - /* keep last */ - __NL80211_KEY_AFTER_LAST, - NL80211_KEY_MAX = __NL80211_KEY_AFTER_LAST - 1 -}; - -/** - * enum nl80211_tx_rate_attributes - TX rate set attributes - * @__NL80211_TXRATE_INVALID: invalid - * @NL80211_TXRATE_LEGACY: Legacy (non-MCS) rates allowed for TX rate selection - * in an array of rates as defined in IEEE 802.11 7.3.2.2 (u8 values with - * 1 = 500 kbps) but without the IE length restriction (at most - * %NL80211_MAX_SUPP_RATES in a single array). - * @NL80211_TXRATE_MCS: HT (MCS) rates allowed for TX rate selection - * in an array of MCS numbers. - * @__NL80211_TXRATE_AFTER_LAST: internal - * @NL80211_TXRATE_MAX: highest TX rate attribute - */ -enum nl80211_tx_rate_attributes { - __NL80211_TXRATE_INVALID, - NL80211_TXRATE_LEGACY, - NL80211_TXRATE_MCS, - - /* keep last */ - __NL80211_TXRATE_AFTER_LAST, - NL80211_TXRATE_MAX = __NL80211_TXRATE_AFTER_LAST - 1 -}; - -/** - * enum nl80211_band - Frequency band - * @NL80211_BAND_2GHZ: 2.4 GHz ISM band - * @NL80211_BAND_5GHZ: around 5 GHz band (4.9 - 5.7 GHz) - * @NL80211_BAND_5_9GHZ: around the ITS 5.9GHz band (5.875GHz - 5.905GHz) - * @NL80211_BAND_0_8GHZ: around the 800 MHz band - */ -enum nl80211_band { - NL80211_BAND_2GHZ, - NL80211_BAND_5GHZ, - NL80211_BAND_5_9GHZ, - NL80211_BAND_0_8GHZ, -}; - -enum nl80211_ps_state { - NL80211_PS_DISABLED, - NL80211_PS_ENABLED, -}; - -/** - * enum nl80211_attr_cqm - connection quality monitor attributes - * @__NL80211_ATTR_CQM_INVALID: invalid - * @NL80211_ATTR_CQM_RSSI_THOLD: RSSI threshold in dBm. This value specifies - * the threshold for the RSSI level at which an event will be sent. Zero - * to disable. - * @NL80211_ATTR_CQM_RSSI_HYST: RSSI hysteresis in dBm. This value specifies - * the minimum amount the RSSI level must change after an event before a - * new event may be issued (to reduce effects of RSSI oscillation). - * @NL80211_ATTR_CQM_RSSI_THRESHOLD_EVENT: RSSI threshold event - * @NL80211_ATTR_CQM_PKT_LOSS_EVENT: a u32 value indicating that this many - * consecutive packets were not acknowledged by the peer - * @__NL80211_ATTR_CQM_AFTER_LAST: internal - * @NL80211_ATTR_CQM_MAX: highest key attribute - */ -enum nl80211_attr_cqm { - __NL80211_ATTR_CQM_INVALID, - NL80211_ATTR_CQM_RSSI_THOLD, - NL80211_ATTR_CQM_RSSI_HYST, - NL80211_ATTR_CQM_RSSI_THRESHOLD_EVENT, - NL80211_ATTR_CQM_PKT_LOSS_EVENT, - - /* keep last */ - __NL80211_ATTR_CQM_AFTER_LAST, - NL80211_ATTR_CQM_MAX = __NL80211_ATTR_CQM_AFTER_LAST - 1 -}; - -/** - * enum nl80211_cqm_rssi_threshold_event - RSSI threshold event - * @NL80211_CQM_RSSI_THRESHOLD_EVENT_LOW: The RSSI level is lower than the - * configured threshold - * @NL80211_CQM_RSSI_THRESHOLD_EVENT_HIGH: The RSSI is higher than the - * configured threshold - */ -enum nl80211_cqm_rssi_threshold_event { - NL80211_CQM_RSSI_THRESHOLD_EVENT_LOW, - NL80211_CQM_RSSI_THRESHOLD_EVENT_HIGH, -}; - - -/** - * enum nl80211_tx_power_setting - TX power adjustment - * @NL80211_TX_POWER_AUTOMATIC: automatically determine transmit power - * @NL80211_TX_POWER_LIMITED: limit TX power by the mBm parameter - * @NL80211_TX_POWER_FIXED: fix TX power to the mBm parameter - */ -enum nl80211_tx_power_setting { - NL80211_TX_POWER_AUTOMATIC, - NL80211_TX_POWER_LIMITED, - NL80211_TX_POWER_FIXED, -}; - -/** - * enum nl80211_wowlan_packet_pattern_attr - WoWLAN packet pattern attribute - * @__NL80211_WOWLAN_PKTPAT_INVALID: invalid number for nested attribute - * @NL80211_WOWLAN_PKTPAT_PATTERN: the pattern, values where the mask has - * a zero bit are ignored - * @NL80211_WOWLAN_PKTPAT_MASK: pattern mask, must be long enough to have - * a bit for each byte in the pattern. The lowest-order bit corresponds - * to the first byte of the pattern, but the bytes of the pattern are - * in a little-endian-like format, i.e. the 9th byte of the pattern - * corresponds to the lowest-order bit in the second byte of the mask. - * For example: The match 00:xx:00:00:xx:00:00:00:00:xx:xx:xx (where - * xx indicates "don't care") would be represented by a pattern of - * twelve zero bytes, and a mask of "0xed,0x07". - * Note that the pattern matching is done as though frames were not - * 802.11 frames but 802.3 frames, i.e. the frame is fully unpacked - * first (including SNAP header unpacking) and then matched. - * @NUM_NL80211_WOWLAN_PKTPAT: number of attributes - * @MAX_NL80211_WOWLAN_PKTPAT: max attribute number - */ -enum nl80211_wowlan_packet_pattern_attr { - __NL80211_WOWLAN_PKTPAT_INVALID, - NL80211_WOWLAN_PKTPAT_MASK, - NL80211_WOWLAN_PKTPAT_PATTERN, - - NUM_NL80211_WOWLAN_PKTPAT, - MAX_NL80211_WOWLAN_PKTPAT = NUM_NL80211_WOWLAN_PKTPAT - 1, -}; - -/** - * struct nl80211_wowlan_pattern_support - pattern support information - * @max_patterns: maximum number of patterns supported - * @min_pattern_len: minimum length of each pattern - * @max_pattern_len: maximum length of each pattern - * - * This struct is carried in %NL80211_WOWLAN_TRIG_PKT_PATTERN when - * that is part of %NL80211_ATTR_WOWLAN_TRIGGERS_SUPPORTED in the - * capability information given by the kernel to userspace. - */ -struct nl80211_wowlan_pattern_support { - __u32 max_patterns; - __u32 min_pattern_len; - __u32 max_pattern_len; -} __attribute__((packed)); - -/** - * enum nl80211_wowlan_triggers - WoWLAN trigger definitions - * @__NL80211_WOWLAN_TRIG_INVALID: invalid number for nested attributes - * @NL80211_WOWLAN_TRIG_ANY: wake up on any activity, do not really put - * the chip into a special state -- works best with chips that have - * support for low-power operation already (flag) - * @NL80211_WOWLAN_TRIG_DISCONNECT: wake up on disconnect, the way disconnect - * is detected is implementation-specific (flag) - * @NL80211_WOWLAN_TRIG_MAGIC_PKT: wake up on magic packet (6x 0xff, followed - * by 16 repetitions of MAC addr, anywhere in payload) (flag) - * @NL80211_WOWLAN_TRIG_PKT_PATTERN: wake up on the specified packet patterns - * which are passed in an array of nested attributes, each nested attribute - * defining a with attributes from &struct nl80211_wowlan_trig_pkt_pattern. - * Each pattern defines a wakeup packet. The matching is done on the MSDU, - * i.e. as though the packet was an 802.3 packet, so the pattern matching - * is done after the packet is converted to the MSDU. - * - * In %NL80211_ATTR_WOWLAN_TRIGGERS_SUPPORTED, it is a binary attribute - * carrying a &struct nl80211_wowlan_pattern_support. - * @NL80211_WOWLAN_TRIG_GTK_REKEY_SUPPORTED: Not a real trigger, and cannot be - * used when setting, used only to indicate that GTK rekeying is supported - * by the device (flag) - * @NL80211_WOWLAN_TRIG_GTK_REKEY_FAILURE: wake up on GTK rekey failure (if - * done by the device) (flag) - * @NL80211_WOWLAN_TRIG_EAP_IDENT_REQUEST: wake up on EAP Identity Request - * packet (flag) - * @NL80211_WOWLAN_TRIG_4WAY_HANDSHAKE: wake up on 4-way handshake (flag) - * @NL80211_WOWLAN_TRIG_RFKILL_RELEASE: wake up when rfkill is released - * (on devices that have rfkill in the device) (flag) - * @NUM_NL80211_WOWLAN_TRIG: number of wake on wireless triggers - * @MAX_NL80211_WOWLAN_TRIG: highest wowlan trigger attribute number - */ -enum nl80211_wowlan_triggers { - __NL80211_WOWLAN_TRIG_INVALID, - NL80211_WOWLAN_TRIG_ANY, - NL80211_WOWLAN_TRIG_DISCONNECT, - NL80211_WOWLAN_TRIG_MAGIC_PKT, - NL80211_WOWLAN_TRIG_PKT_PATTERN, - NL80211_WOWLAN_TRIG_GTK_REKEY_SUPPORTED, - NL80211_WOWLAN_TRIG_GTK_REKEY_FAILURE, - NL80211_WOWLAN_TRIG_EAP_IDENT_REQUEST, - NL80211_WOWLAN_TRIG_4WAY_HANDSHAKE, - NL80211_WOWLAN_TRIG_RFKILL_RELEASE, - - /* keep last */ - NUM_NL80211_WOWLAN_TRIG, - MAX_NL80211_WOWLAN_TRIG = NUM_NL80211_WOWLAN_TRIG - 1 -}; - -/** - * enum nl80211_iface_limit_attrs - limit attributes - * @NL80211_IFACE_LIMIT_UNSPEC: (reserved) - * @NL80211_IFACE_LIMIT_MAX: maximum number of interfaces that - * can be chosen from this set of interface types (u32) - * @NL80211_IFACE_LIMIT_TYPES: nested attribute containing a - * flag attribute for each interface type in this set - * @NUM_NL80211_IFACE_LIMIT: number of attributes - * @MAX_NL80211_IFACE_LIMIT: highest attribute number - */ -enum nl80211_iface_limit_attrs { - NL80211_IFACE_LIMIT_UNSPEC, - NL80211_IFACE_LIMIT_MAX, - NL80211_IFACE_LIMIT_TYPES, - - /* keep last */ - NUM_NL80211_IFACE_LIMIT, - MAX_NL80211_IFACE_LIMIT = NUM_NL80211_IFACE_LIMIT - 1 -}; - -/** - * enum nl80211_if_combination_attrs -- interface combination attributes - * - * @NL80211_IFACE_COMB_UNSPEC: (reserved) - * @NL80211_IFACE_COMB_LIMITS: Nested attributes containing the limits - * for given interface types, see &enum nl80211_iface_limit_attrs. - * @NL80211_IFACE_COMB_MAXNUM: u32 attribute giving the total number of - * interfaces that can be created in this group. This number doesn't - * apply to interfaces purely managed in software, which are listed - * in a separate attribute %NL80211_ATTR_INTERFACES_SOFTWARE. - * @NL80211_IFACE_COMB_STA_AP_BI_MATCH: flag attribute specifying that - * beacon intervals within this group must be all the same even for - * infrastructure and AP/GO combinations, i.e. the GO(s) must adopt - * the infrastructure network's beacon interval. - * @NL80211_IFACE_COMB_NUM_CHANNELS: u32 attribute specifying how many - * different channels may be used within this group. - * @NUM_NL80211_IFACE_COMB: number of attributes - * @MAX_NL80211_IFACE_COMB: highest attribute number - * - * Examples: - * limits = [ #{STA} <= 1, #{AP} <= 1 ], matching BI, channels = 1, max = 2 - * => allows an AP and a STA that must match BIs - * - * numbers = [ #{AP, P2P-GO} <= 8 ], channels = 1, max = 8 - * => allows 8 of AP/GO - * - * numbers = [ #{STA} <= 2 ], channels = 2, max = 2 - * => allows two STAs on different channels - * - * numbers = [ #{STA} <= 1, #{P2P-client,P2P-GO} <= 3 ], max = 4 - * => allows a STA plus three P2P interfaces - * - * The list of these four possiblities could completely be contained - * within the %NL80211_ATTR_INTERFACE_COMBINATIONS attribute to indicate - * that any of these groups must match. - * - * "Combinations" of just a single interface will not be listed here, - * a single interface of any valid interface type is assumed to always - * be possible by itself. This means that implicitly, for each valid - * interface type, the following group always exists: - * numbers = [ #{} <= 1 ], channels = 1, max = 1 - */ -enum nl80211_if_combination_attrs { - NL80211_IFACE_COMB_UNSPEC, - NL80211_IFACE_COMB_LIMITS, - NL80211_IFACE_COMB_MAXNUM, - NL80211_IFACE_COMB_STA_AP_BI_MATCH, - NL80211_IFACE_COMB_NUM_CHANNELS, - - /* keep last */ - NUM_NL80211_IFACE_COMB, - MAX_NL80211_IFACE_COMB = NUM_NL80211_IFACE_COMB - 1 -}; - - -/** - * enum nl80211_plink_state - state of a mesh peer link finite state machine - * - * @NL80211_PLINK_LISTEN: initial state, considered the implicit - * state of non existant mesh peer links - * @NL80211_PLINK_OPN_SNT: mesh plink open frame has been sent to - * this mesh peer - * @NL80211_PLINK_OPN_RCVD: mesh plink open frame has been received - * from this mesh peer - * @NL80211_PLINK_CNF_RCVD: mesh plink confirm frame has been - * received from this mesh peer - * @NL80211_PLINK_ESTAB: mesh peer link is established - * @NL80211_PLINK_HOLDING: mesh peer link is being closed or cancelled - * @NL80211_PLINK_BLOCKED: all frames transmitted from this mesh - * plink are discarded - * @NUM_NL80211_PLINK_STATES: number of peer link states - * @MAX_NL80211_PLINK_STATES: highest numerical value of plink states - */ -enum nl80211_plink_state { - NL80211_PLINK_LISTEN, - NL80211_PLINK_OPN_SNT, - NL80211_PLINK_OPN_RCVD, - NL80211_PLINK_CNF_RCVD, - NL80211_PLINK_ESTAB, - NL80211_PLINK_HOLDING, - NL80211_PLINK_BLOCKED, - - /* keep last */ - NUM_NL80211_PLINK_STATES, - MAX_NL80211_PLINK_STATES = NUM_NL80211_PLINK_STATES - 1 -}; - -#define NL80211_KCK_LEN 16 -#define NL80211_KEK_LEN 16 -#define NL80211_REPLAY_CTR_LEN 8 - -/** - * enum nl80211_rekey_data - attributes for GTK rekey offload - * @__NL80211_REKEY_DATA_INVALID: invalid number for nested attributes - * @NL80211_REKEY_DATA_KEK: key encryption key (binary) - * @NL80211_REKEY_DATA_KCK: key confirmation key (binary) - * @NL80211_REKEY_DATA_REPLAY_CTR: replay counter (binary) - * @NUM_NL80211_REKEY_DATA: number of rekey attributes (internal) - * @MAX_NL80211_REKEY_DATA: highest rekey attribute (internal) - */ -enum nl80211_rekey_data { - __NL80211_REKEY_DATA_INVALID, - NL80211_REKEY_DATA_KEK, - NL80211_REKEY_DATA_KCK, - NL80211_REKEY_DATA_REPLAY_CTR, - - /* keep last */ - NUM_NL80211_REKEY_DATA, - MAX_NL80211_REKEY_DATA = NUM_NL80211_REKEY_DATA - 1 -}; - -/** - * enum nl80211_hidden_ssid - values for %NL80211_ATTR_HIDDEN_SSID - * @NL80211_HIDDEN_SSID_NOT_IN_USE: do not hide SSID (i.e., broadcast it in - * Beacon frames) - * @NL80211_HIDDEN_SSID_ZERO_LEN: hide SSID by using zero-length SSID element - * in Beacon frames - * @NL80211_HIDDEN_SSID_ZERO_CONTENTS: hide SSID by using correct length of SSID - * element in Beacon frames but zero out each byte in the SSID - */ -enum nl80211_hidden_ssid { - NL80211_HIDDEN_SSID_NOT_IN_USE, - NL80211_HIDDEN_SSID_ZERO_LEN, - NL80211_HIDDEN_SSID_ZERO_CONTENTS -}; - -/** - * enum nl80211_sta_wme_attr - station WME attributes - * @__NL80211_STA_WME_INVALID: invalid number for nested attribute - * @NL80211_STA_WME_UAPSD_QUEUES: bitmap of uapsd queues. the format - * is the same as the AC bitmap in the QoS info field. - * @NL80211_STA_WME_MAX_SP: max service period. the format is the same - * as the MAX_SP field in the QoS info field (but already shifted down). - * @__NL80211_STA_WME_AFTER_LAST: internal - * @NL80211_STA_WME_MAX: highest station WME attribute - */ -enum nl80211_sta_wme_attr { - __NL80211_STA_WME_INVALID, - NL80211_STA_WME_UAPSD_QUEUES, - NL80211_STA_WME_MAX_SP, - - /* keep last */ - __NL80211_STA_WME_AFTER_LAST, - NL80211_STA_WME_MAX = __NL80211_STA_WME_AFTER_LAST - 1 -}; - -/** - * enum nl80211_pmksa_candidate_attr - attributes for PMKSA caching candidates - * @__NL80211_PMKSA_CANDIDATE_INVALID: invalid number for nested attributes - * @NL80211_PMKSA_CANDIDATE_INDEX: candidate index (u32; the smaller, the higher - * priority) - * @NL80211_PMKSA_CANDIDATE_BSSID: candidate BSSID (6 octets) - * @NL80211_PMKSA_CANDIDATE_PREAUTH: RSN pre-authentication supported (flag) - * @NUM_NL80211_PMKSA_CANDIDATE: number of PMKSA caching candidate attributes - * (internal) - * @MAX_NL80211_PMKSA_CANDIDATE: highest PMKSA caching candidate attribute - * (internal) - */ -enum nl80211_pmksa_candidate_attr { - __NL80211_PMKSA_CANDIDATE_INVALID, - NL80211_PMKSA_CANDIDATE_INDEX, - NL80211_PMKSA_CANDIDATE_BSSID, - NL80211_PMKSA_CANDIDATE_PREAUTH, - - /* keep last */ - NUM_NL80211_PMKSA_CANDIDATE, - MAX_NL80211_PMKSA_CANDIDATE = NUM_NL80211_PMKSA_CANDIDATE - 1 -}; - -/** - * enum nl80211_tdls_operation - values for %NL80211_ATTR_TDLS_OPERATION - * @NL80211_TDLS_DISCOVERY_REQ: Send a TDLS discovery request - * @NL80211_TDLS_SETUP: Setup TDLS link - * @NL80211_TDLS_TEARDOWN: Teardown a TDLS link which is already established - * @NL80211_TDLS_ENABLE_LINK: Enable TDLS link - * @NL80211_TDLS_DISABLE_LINK: Disable TDLS link - */ -enum nl80211_tdls_operation { - NL80211_TDLS_DISCOVERY_REQ, - NL80211_TDLS_SETUP, - NL80211_TDLS_TEARDOWN, - NL80211_TDLS_ENABLE_LINK, - NL80211_TDLS_DISABLE_LINK, -}; - -/* - * enum nl80211_ap_sme_features - device-integrated AP features - * Reserved for future use, no bits are defined in - * NL80211_ATTR_DEVICE_AP_SME yet. -enum nl80211_ap_sme_features { -}; - */ - -/** - * enum nl80211_feature_flags - device/driver features - * @NL80211_FEATURE_SK_TX_STATUS: This driver supports reflecting back - * TX status to the socket error queue when requested with the - * socket option. - * @NL80211_FEATURE_HT_IBSS: This driver supports IBSS with HT datarates. - * @NL80211_FEATURE_INACTIVITY_TIMER: This driver takes care of freeing up - * the connected inactive stations in AP mode. - */ -enum nl80211_feature_flags { - NL80211_FEATURE_SK_TX_STATUS = 1 << 0, - NL80211_FEATURE_HT_IBSS = 1 << 1, - NL80211_FEATURE_INACTIVITY_TIMER = 1 << 2, -}; - -/** - * enum nl80211_probe_resp_offload_support_attr - optional supported - * protocols for probe-response offloading by the driver/FW. - * To be used with the %NL80211_ATTR_PROBE_RESP_OFFLOAD attribute. - * Each enum value represents a bit in the bitmap of supported - * protocols. Typically a subset of probe-requests belonging to a - * supported protocol will be excluded from offload and uploaded - * to the host. - * - * @NL80211_PROBE_RESP_OFFLOAD_SUPPORT_WPS: Support for WPS ver. 1 - * @NL80211_PROBE_RESP_OFFLOAD_SUPPORT_WPS2: Support for WPS ver. 2 - * @NL80211_PROBE_RESP_OFFLOAD_SUPPORT_P2P: Support for P2P - * @NL80211_PROBE_RESP_OFFLOAD_SUPPORT_80211U: Support for 802.11u - */ -enum nl80211_probe_resp_offload_support_attr { - NL80211_PROBE_RESP_OFFLOAD_SUPPORT_WPS = 1<<0, - NL80211_PROBE_RESP_OFFLOAD_SUPPORT_WPS2 = 1<<1, - NL80211_PROBE_RESP_OFFLOAD_SUPPORT_P2P = 1<<2, - NL80211_PROBE_RESP_OFFLOAD_SUPPORT_80211U = 1<<3, -}; - -#endif /* __LINUX_NL80211_H */ diff --git a/openairITS/mac/DOT11/include/linux/of.h b/openairITS/mac/DOT11/include/linux/of.h deleted file mode 100644 index c5dc87c2ef..0000000000 --- a/openairITS/mac/DOT11/include/linux/of.h +++ /dev/null @@ -1,16 +0,0 @@ -#ifndef _COMPAT_LINUX_OF_H -#define _COMPAT_LINUX_OF_H 1 - -#include - -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,34)) -#include_next -#else - -#ifdef CONFIG_OF -#include_next -#endif /* CONFIG_OF */ - -#endif /* (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,34)) */ - -#endif /* _COMPAT_LINUX_OF_H */ diff --git a/openairITS/mac/DOT11/include/linux/pci-aspm.h b/openairITS/mac/DOT11/include/linux/pci-aspm.h deleted file mode 100644 index 2bc6efb333..0000000000 --- a/openairITS/mac/DOT11/include/linux/pci-aspm.h +++ /dev/null @@ -1,5 +0,0 @@ -#include - -#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,25)) -#include_next -#endif /* (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,25)) */ diff --git a/openairITS/mac/DOT11/include/linux/pci_ids.h b/openairITS/mac/DOT11/include/linux/pci_ids.h deleted file mode 100644 index 3329965ed6..0000000000 --- a/openairITS/mac/DOT11/include/linux/pci_ids.h +++ /dev/null @@ -1,2907 +0,0 @@ -/* - * PCI Class, Vendor and Device IDs - * - * Please keep sorted. - * - * Do not add new entries to this file unless the definitions - * are shared between multiple drivers. - */ - -/* Device classes and subclasses */ - -#define PCI_CLASS_NOT_DEFINED 0x0000 -#define PCI_CLASS_NOT_DEFINED_VGA 0x0001 - -#define PCI_BASE_CLASS_STORAGE 0x01 -#define PCI_CLASS_STORAGE_SCSI 0x0100 -#define PCI_CLASS_STORAGE_IDE 0x0101 -#define PCI_CLASS_STORAGE_FLOPPY 0x0102 -#define PCI_CLASS_STORAGE_IPI 0x0103 -#define PCI_CLASS_STORAGE_RAID 0x0104 -#define PCI_CLASS_STORAGE_SATA 0x0106 -#define PCI_CLASS_STORAGE_SATA_AHCI 0x010601 -#define PCI_CLASS_STORAGE_SAS 0x0107 -#define PCI_CLASS_STORAGE_OTHER 0x0180 - -#define PCI_BASE_CLASS_NETWORK 0x02 -#define PCI_CLASS_NETWORK_ETHERNET 0x0200 -#define PCI_CLASS_NETWORK_TOKEN_RING 0x0201 -#define PCI_CLASS_NETWORK_FDDI 0x0202 -#define PCI_CLASS_NETWORK_ATM 0x0203 -#define PCI_CLASS_NETWORK_OTHER 0x0280 - -#define PCI_BASE_CLASS_DISPLAY 0x03 -#define PCI_CLASS_DISPLAY_VGA 0x0300 -#define PCI_CLASS_DISPLAY_XGA 0x0301 -#define PCI_CLASS_DISPLAY_3D 0x0302 -#define PCI_CLASS_DISPLAY_OTHER 0x0380 - -#define PCI_BASE_CLASS_MULTIMEDIA 0x04 -#define PCI_CLASS_MULTIMEDIA_VIDEO 0x0400 -#define PCI_CLASS_MULTIMEDIA_AUDIO 0x0401 -#define PCI_CLASS_MULTIMEDIA_PHONE 0x0402 -#define PCI_CLASS_MULTIMEDIA_OTHER 0x0480 - -#define PCI_BASE_CLASS_MEMORY 0x05 -#define PCI_CLASS_MEMORY_RAM 0x0500 -#define PCI_CLASS_MEMORY_FLASH 0x0501 -#define PCI_CLASS_MEMORY_OTHER 0x0580 - -#define PCI_BASE_CLASS_BRIDGE 0x06 -#define PCI_CLASS_BRIDGE_HOST 0x0600 -#define PCI_CLASS_BRIDGE_ISA 0x0601 -#define PCI_CLASS_BRIDGE_EISA 0x0602 -#define PCI_CLASS_BRIDGE_MC 0x0603 -#define PCI_CLASS_BRIDGE_PCI 0x0604 -#define PCI_CLASS_BRIDGE_PCMCIA 0x0605 -#define PCI_CLASS_BRIDGE_NUBUS 0x0606 -#define PCI_CLASS_BRIDGE_CARDBUS 0x0607 -#define PCI_CLASS_BRIDGE_RACEWAY 0x0608 -#define PCI_CLASS_BRIDGE_OTHER 0x0680 - -#define PCI_BASE_CLASS_COMMUNICATION 0x07 -#define PCI_CLASS_COMMUNICATION_SERIAL 0x0700 -#define PCI_CLASS_COMMUNICATION_PARALLEL 0x0701 -#define PCI_CLASS_COMMUNICATION_MULTISERIAL 0x0702 -#define PCI_CLASS_COMMUNICATION_MODEM 0x0703 -#define PCI_CLASS_COMMUNICATION_OTHER 0x0780 - -#define PCI_BASE_CLASS_SYSTEM 0x08 -#define PCI_CLASS_SYSTEM_PIC 0x0800 -#define PCI_CLASS_SYSTEM_PIC_IOAPIC 0x080010 -#define PCI_CLASS_SYSTEM_PIC_IOXAPIC 0x080020 -#define PCI_CLASS_SYSTEM_DMA 0x0801 -#define PCI_CLASS_SYSTEM_TIMER 0x0802 -#define PCI_CLASS_SYSTEM_RTC 0x0803 -#define PCI_CLASS_SYSTEM_PCI_HOTPLUG 0x0804 -#define PCI_CLASS_SYSTEM_SDHCI 0x0805 -#define PCI_CLASS_SYSTEM_OTHER 0x0880 - -#define PCI_BASE_CLASS_INPUT 0x09 -#define PCI_CLASS_INPUT_KEYBOARD 0x0900 -#define PCI_CLASS_INPUT_PEN 0x0901 -#define PCI_CLASS_INPUT_MOUSE 0x0902 -#define PCI_CLASS_INPUT_SCANNER 0x0903 -#define PCI_CLASS_INPUT_GAMEPORT 0x0904 -#define PCI_CLASS_INPUT_OTHER 0x0980 - -#define PCI_BASE_CLASS_DOCKING 0x0a -#define PCI_CLASS_DOCKING_GENERIC 0x0a00 -#define PCI_CLASS_DOCKING_OTHER 0x0a80 - -#define PCI_BASE_CLASS_PROCESSOR 0x0b -#define PCI_CLASS_PROCESSOR_386 0x0b00 -#define PCI_CLASS_PROCESSOR_486 0x0b01 -#define PCI_CLASS_PROCESSOR_PENTIUM 0x0b02 -#define PCI_CLASS_PROCESSOR_ALPHA 0x0b10 -#define PCI_CLASS_PROCESSOR_POWERPC 0x0b20 -#define PCI_CLASS_PROCESSOR_MIPS 0x0b30 -#define PCI_CLASS_PROCESSOR_CO 0x0b40 - -#define PCI_BASE_CLASS_SERIAL 0x0c -#define PCI_CLASS_SERIAL_FIREWIRE 0x0c00 -#define PCI_CLASS_SERIAL_FIREWIRE_OHCI 0x0c0010 -#define PCI_CLASS_SERIAL_ACCESS 0x0c01 -#define PCI_CLASS_SERIAL_SSA 0x0c02 -#define PCI_CLASS_SERIAL_USB 0x0c03 -#define PCI_CLASS_SERIAL_USB_UHCI 0x0c0300 -#define PCI_CLASS_SERIAL_USB_OHCI 0x0c0310 -#define PCI_CLASS_SERIAL_USB_EHCI 0x0c0320 -#define PCI_CLASS_SERIAL_USB_XHCI 0x0c0330 -#define PCI_CLASS_SERIAL_FIBER 0x0c04 -#define PCI_CLASS_SERIAL_SMBUS 0x0c05 - -#define PCI_BASE_CLASS_WIRELESS 0x0d -#define PCI_CLASS_WIRELESS_RF_CONTROLLER 0x0d10 -#define PCI_CLASS_WIRELESS_WHCI 0x0d1010 - -#define PCI_BASE_CLASS_INTELLIGENT 0x0e -#define PCI_CLASS_INTELLIGENT_I2O 0x0e00 - -#define PCI_BASE_CLASS_SATELLITE 0x0f -#define PCI_CLASS_SATELLITE_TV 0x0f00 -#define PCI_CLASS_SATELLITE_AUDIO 0x0f01 -#define PCI_CLASS_SATELLITE_VOICE 0x0f03 -#define PCI_CLASS_SATELLITE_DATA 0x0f04 - -#define PCI_BASE_CLASS_CRYPT 0x10 -#define PCI_CLASS_CRYPT_NETWORK 0x1000 -#define PCI_CLASS_CRYPT_ENTERTAINMENT 0x1001 -#define PCI_CLASS_CRYPT_OTHER 0x1080 - -#define PCI_BASE_CLASS_SIGNAL_PROCESSING 0x11 -#define PCI_CLASS_SP_DPIO 0x1100 -#define PCI_CLASS_SP_OTHER 0x1180 - -#define PCI_CLASS_OTHERS 0xff - -/* Vendors and devices. Sort key: vendor first, device next. */ - -#define PCI_VENDOR_ID_TTTECH 0x0357 -#define PCI_DEVICE_ID_TTTECH_MC322 0x000a - -#define PCI_VENDOR_ID_DYNALINK 0x0675 -#define PCI_DEVICE_ID_DYNALINK_IS64PH 0x1702 - -#define PCI_VENDOR_ID_BERKOM 0x0871 -#define PCI_DEVICE_ID_BERKOM_A1T 0xffa1 -#define PCI_DEVICE_ID_BERKOM_T_CONCEPT 0xffa2 -#define PCI_DEVICE_ID_BERKOM_A4T 0xffa4 -#define PCI_DEVICE_ID_BERKOM_SCITEL_QUADRO 0xffa8 - -#define PCI_VENDOR_ID_COMPAQ 0x0e11 -#define PCI_DEVICE_ID_COMPAQ_TOKENRING 0x0508 -#define PCI_DEVICE_ID_COMPAQ_TACHYON 0xa0fc -#define PCI_DEVICE_ID_COMPAQ_SMART2P 0xae10 -#define PCI_DEVICE_ID_COMPAQ_NETEL100 0xae32 -#define PCI_DEVICE_ID_COMPAQ_NETEL10 0xae34 -#define PCI_DEVICE_ID_COMPAQ_TRIFLEX_IDE 0xae33 -#define PCI_DEVICE_ID_COMPAQ_NETFLEX3I 0xae35 -#define PCI_DEVICE_ID_COMPAQ_NETEL100D 0xae40 -#define PCI_DEVICE_ID_COMPAQ_NETEL100PI 0xae43 -#define PCI_DEVICE_ID_COMPAQ_NETEL100I 0xb011 -#define PCI_DEVICE_ID_COMPAQ_CISS 0xb060 -#define PCI_DEVICE_ID_COMPAQ_CISSB 0xb178 -#define PCI_DEVICE_ID_COMPAQ_CISSC 0x46 -#define PCI_DEVICE_ID_COMPAQ_THUNDER 0xf130 -#define PCI_DEVICE_ID_COMPAQ_NETFLEX3B 0xf150 - -#define PCI_VENDOR_ID_NCR 0x1000 -#define PCI_VENDOR_ID_LSI_LOGIC 0x1000 -#define PCI_DEVICE_ID_NCR_53C810 0x0001 -#define PCI_DEVICE_ID_NCR_53C820 0x0002 -#define PCI_DEVICE_ID_NCR_53C825 0x0003 -#define PCI_DEVICE_ID_NCR_53C815 0x0004 -#define PCI_DEVICE_ID_LSI_53C810AP 0x0005 -#define PCI_DEVICE_ID_NCR_53C860 0x0006 -#define PCI_DEVICE_ID_LSI_53C1510 0x000a -#define PCI_DEVICE_ID_NCR_53C896 0x000b -#define PCI_DEVICE_ID_NCR_53C895 0x000c -#define PCI_DEVICE_ID_NCR_53C885 0x000d -#define PCI_DEVICE_ID_NCR_53C875 0x000f -#define PCI_DEVICE_ID_NCR_53C1510 0x0010 -#define PCI_DEVICE_ID_LSI_53C895A 0x0012 -#define PCI_DEVICE_ID_LSI_53C875A 0x0013 -#define PCI_DEVICE_ID_LSI_53C1010_33 0x0020 -#define PCI_DEVICE_ID_LSI_53C1010_66 0x0021 -#define PCI_DEVICE_ID_LSI_53C1030 0x0030 -#define PCI_DEVICE_ID_LSI_1030_53C1035 0x0032 -#define PCI_DEVICE_ID_LSI_53C1035 0x0040 -#define PCI_DEVICE_ID_NCR_53C875J 0x008f -#define PCI_DEVICE_ID_LSI_FC909 0x0621 -#define PCI_DEVICE_ID_LSI_FC929 0x0622 -#define PCI_DEVICE_ID_LSI_FC929_LAN 0x0623 -#define PCI_DEVICE_ID_LSI_FC919 0x0624 -#define PCI_DEVICE_ID_LSI_FC919_LAN 0x0625 -#define PCI_DEVICE_ID_LSI_FC929X 0x0626 -#define PCI_DEVICE_ID_LSI_FC939X 0x0642 -#define PCI_DEVICE_ID_LSI_FC949X 0x0640 -#define PCI_DEVICE_ID_LSI_FC949ES 0x0646 -#define PCI_DEVICE_ID_LSI_FC919X 0x0628 -#define PCI_DEVICE_ID_NCR_YELLOWFIN 0x0701 -#define PCI_DEVICE_ID_LSI_61C102 0x0901 -#define PCI_DEVICE_ID_LSI_63C815 0x1000 -#define PCI_DEVICE_ID_LSI_SAS1064 0x0050 -#define PCI_DEVICE_ID_LSI_SAS1064R 0x0411 -#define PCI_DEVICE_ID_LSI_SAS1066 0x005E -#define PCI_DEVICE_ID_LSI_SAS1068 0x0054 -#define PCI_DEVICE_ID_LSI_SAS1064A 0x005C -#define PCI_DEVICE_ID_LSI_SAS1064E 0x0056 -#define PCI_DEVICE_ID_LSI_SAS1066E 0x005A -#define PCI_DEVICE_ID_LSI_SAS1068E 0x0058 -#define PCI_DEVICE_ID_LSI_SAS1078 0x0060 - -#define PCI_VENDOR_ID_ATI 0x1002 -/* Mach64 */ -#define PCI_DEVICE_ID_ATI_68800 0x4158 -#define PCI_DEVICE_ID_ATI_215CT222 0x4354 -#define PCI_DEVICE_ID_ATI_210888CX 0x4358 -#define PCI_DEVICE_ID_ATI_215ET222 0x4554 -/* Mach64 / Rage */ -#define PCI_DEVICE_ID_ATI_215GB 0x4742 -#define PCI_DEVICE_ID_ATI_215GD 0x4744 -#define PCI_DEVICE_ID_ATI_215GI 0x4749 -#define PCI_DEVICE_ID_ATI_215GP 0x4750 -#define PCI_DEVICE_ID_ATI_215GQ 0x4751 -#define PCI_DEVICE_ID_ATI_215XL 0x4752 -#define PCI_DEVICE_ID_ATI_215GT 0x4754 -#define PCI_DEVICE_ID_ATI_215GTB 0x4755 -#define PCI_DEVICE_ID_ATI_215_IV 0x4756 -#define PCI_DEVICE_ID_ATI_215_IW 0x4757 -#define PCI_DEVICE_ID_ATI_215_IZ 0x475A -#define PCI_DEVICE_ID_ATI_210888GX 0x4758 -#define PCI_DEVICE_ID_ATI_215_LB 0x4c42 -#define PCI_DEVICE_ID_ATI_215_LD 0x4c44 -#define PCI_DEVICE_ID_ATI_215_LG 0x4c47 -#define PCI_DEVICE_ID_ATI_215_LI 0x4c49 -#define PCI_DEVICE_ID_ATI_215_LM 0x4c4D -#define PCI_DEVICE_ID_ATI_215_LN 0x4c4E -#define PCI_DEVICE_ID_ATI_215_LR 0x4c52 -#define PCI_DEVICE_ID_ATI_215_LS 0x4c53 -#define PCI_DEVICE_ID_ATI_264_LT 0x4c54 -/* Mach64 VT */ -#define PCI_DEVICE_ID_ATI_264VT 0x5654 -#define PCI_DEVICE_ID_ATI_264VU 0x5655 -#define PCI_DEVICE_ID_ATI_264VV 0x5656 -/* Rage128 GL */ -#define PCI_DEVICE_ID_ATI_RAGE128_RE 0x5245 -#define PCI_DEVICE_ID_ATI_RAGE128_RF 0x5246 -#define PCI_DEVICE_ID_ATI_RAGE128_RG 0x5247 -/* Rage128 VR */ -#define PCI_DEVICE_ID_ATI_RAGE128_RK 0x524b -#define PCI_DEVICE_ID_ATI_RAGE128_RL 0x524c -#define PCI_DEVICE_ID_ATI_RAGE128_SE 0x5345 -#define PCI_DEVICE_ID_ATI_RAGE128_SF 0x5346 -#define PCI_DEVICE_ID_ATI_RAGE128_SG 0x5347 -#define PCI_DEVICE_ID_ATI_RAGE128_SH 0x5348 -#define PCI_DEVICE_ID_ATI_RAGE128_SK 0x534b -#define PCI_DEVICE_ID_ATI_RAGE128_SL 0x534c -#define PCI_DEVICE_ID_ATI_RAGE128_SM 0x534d -#define PCI_DEVICE_ID_ATI_RAGE128_SN 0x534e -/* Rage128 Ultra */ -#define PCI_DEVICE_ID_ATI_RAGE128_TF 0x5446 -#define PCI_DEVICE_ID_ATI_RAGE128_TL 0x544c -#define PCI_DEVICE_ID_ATI_RAGE128_TR 0x5452 -#define PCI_DEVICE_ID_ATI_RAGE128_TS 0x5453 -#define PCI_DEVICE_ID_ATI_RAGE128_TT 0x5454 -#define PCI_DEVICE_ID_ATI_RAGE128_TU 0x5455 -/* Rage128 M3 */ -#define PCI_DEVICE_ID_ATI_RAGE128_LE 0x4c45 -#define PCI_DEVICE_ID_ATI_RAGE128_LF 0x4c46 -/* Rage128 M4 */ -#define PCI_DEVICE_ID_ATI_RAGE128_MF 0x4d46 -#define PCI_DEVICE_ID_ATI_RAGE128_ML 0x4d4c -/* Rage128 Pro GL */ -#define PCI_DEVICE_ID_ATI_RAGE128_PA 0x5041 -#define PCI_DEVICE_ID_ATI_RAGE128_PB 0x5042 -#define PCI_DEVICE_ID_ATI_RAGE128_PC 0x5043 -#define PCI_DEVICE_ID_ATI_RAGE128_PD 0x5044 -#define PCI_DEVICE_ID_ATI_RAGE128_PE 0x5045 -#define PCI_DEVICE_ID_ATI_RAGE128_PF 0x5046 -/* Rage128 Pro VR */ -#define PCI_DEVICE_ID_ATI_RAGE128_PG 0x5047 -#define PCI_DEVICE_ID_ATI_RAGE128_PH 0x5048 -#define PCI_DEVICE_ID_ATI_RAGE128_PI 0x5049 -#define PCI_DEVICE_ID_ATI_RAGE128_PJ 0x504A -#define PCI_DEVICE_ID_ATI_RAGE128_PK 0x504B -#define PCI_DEVICE_ID_ATI_RAGE128_PL 0x504C -#define PCI_DEVICE_ID_ATI_RAGE128_PM 0x504D -#define PCI_DEVICE_ID_ATI_RAGE128_PN 0x504E -#define PCI_DEVICE_ID_ATI_RAGE128_PO 0x504F -#define PCI_DEVICE_ID_ATI_RAGE128_PP 0x5050 -#define PCI_DEVICE_ID_ATI_RAGE128_PQ 0x5051 -#define PCI_DEVICE_ID_ATI_RAGE128_PR 0x5052 -#define PCI_DEVICE_ID_ATI_RAGE128_PS 0x5053 -#define PCI_DEVICE_ID_ATI_RAGE128_PT 0x5054 -#define PCI_DEVICE_ID_ATI_RAGE128_PU 0x5055 -#define PCI_DEVICE_ID_ATI_RAGE128_PV 0x5056 -#define PCI_DEVICE_ID_ATI_RAGE128_PW 0x5057 -#define PCI_DEVICE_ID_ATI_RAGE128_PX 0x5058 -/* Rage128 M4 */ -/* Radeon R100 */ -#define PCI_DEVICE_ID_ATI_RADEON_QD 0x5144 -#define PCI_DEVICE_ID_ATI_RADEON_QE 0x5145 -#define PCI_DEVICE_ID_ATI_RADEON_QF 0x5146 -#define PCI_DEVICE_ID_ATI_RADEON_QG 0x5147 -/* Radeon RV100 (VE) */ -#define PCI_DEVICE_ID_ATI_RADEON_QY 0x5159 -#define PCI_DEVICE_ID_ATI_RADEON_QZ 0x515a -/* Radeon R200 (8500) */ -#define PCI_DEVICE_ID_ATI_RADEON_QL 0x514c -#define PCI_DEVICE_ID_ATI_RADEON_QN 0x514e -#define PCI_DEVICE_ID_ATI_RADEON_QO 0x514f -#define PCI_DEVICE_ID_ATI_RADEON_Ql 0x516c -#define PCI_DEVICE_ID_ATI_RADEON_BB 0x4242 -/* Radeon R200 (9100) */ -#define PCI_DEVICE_ID_ATI_RADEON_QM 0x514d -/* Radeon RV200 (7500) */ -#define PCI_DEVICE_ID_ATI_RADEON_QW 0x5157 -#define PCI_DEVICE_ID_ATI_RADEON_QX 0x5158 -/* Radeon NV-100 */ -/* Radeon RV250 (9000) */ -#define PCI_DEVICE_ID_ATI_RADEON_Id 0x4964 -#define PCI_DEVICE_ID_ATI_RADEON_Ie 0x4965 -#define PCI_DEVICE_ID_ATI_RADEON_If 0x4966 -#define PCI_DEVICE_ID_ATI_RADEON_Ig 0x4967 -/* Radeon RV280 (9200) */ -#define PCI_DEVICE_ID_ATI_RADEON_Ya 0x5961 -#define PCI_DEVICE_ID_ATI_RADEON_Yd 0x5964 -/* Radeon R300 (9500) */ -/* Radeon R300 (9700) */ -#define PCI_DEVICE_ID_ATI_RADEON_ND 0x4e44 -#define PCI_DEVICE_ID_ATI_RADEON_NE 0x4e45 -#define PCI_DEVICE_ID_ATI_RADEON_NF 0x4e46 -#define PCI_DEVICE_ID_ATI_RADEON_NG 0x4e47 -/* Radeon R350 (9800) */ -/* Radeon RV350 (9600) */ -/* Radeon M6 */ -#define PCI_DEVICE_ID_ATI_RADEON_LY 0x4c59 -#define PCI_DEVICE_ID_ATI_RADEON_LZ 0x4c5a -/* Radeon M7 */ -#define PCI_DEVICE_ID_ATI_RADEON_LW 0x4c57 -#define PCI_DEVICE_ID_ATI_RADEON_LX 0x4c58 -/* Radeon M9 */ -#define PCI_DEVICE_ID_ATI_RADEON_Ld 0x4c64 -#define PCI_DEVICE_ID_ATI_RADEON_Le 0x4c65 -#define PCI_DEVICE_ID_ATI_RADEON_Lf 0x4c66 -#define PCI_DEVICE_ID_ATI_RADEON_Lg 0x4c67 -/* Radeon */ -/* RadeonIGP */ -#define PCI_DEVICE_ID_ATI_RS100 0xcab0 -#define PCI_DEVICE_ID_ATI_RS200 0xcab2 -#define PCI_DEVICE_ID_ATI_RS200_B 0xcbb2 -#define PCI_DEVICE_ID_ATI_RS250 0xcab3 -#define PCI_DEVICE_ID_ATI_RS300_100 0x5830 -#define PCI_DEVICE_ID_ATI_RS300_133 0x5831 -#define PCI_DEVICE_ID_ATI_RS300_166 0x5832 -#define PCI_DEVICE_ID_ATI_RS300_200 0x5833 -#define PCI_DEVICE_ID_ATI_RS350_100 0x7830 -#define PCI_DEVICE_ID_ATI_RS350_133 0x7831 -#define PCI_DEVICE_ID_ATI_RS350_166 0x7832 -#define PCI_DEVICE_ID_ATI_RS350_200 0x7833 -#define PCI_DEVICE_ID_ATI_RS400_100 0x5a30 -#define PCI_DEVICE_ID_ATI_RS400_133 0x5a31 -#define PCI_DEVICE_ID_ATI_RS400_166 0x5a32 -#define PCI_DEVICE_ID_ATI_RS400_200 0x5a33 -#define PCI_DEVICE_ID_ATI_RS480 0x5950 -/* ATI IXP Chipset */ -#define PCI_DEVICE_ID_ATI_IXP200_IDE 0x4349 -#define PCI_DEVICE_ID_ATI_IXP200_SMBUS 0x4353 -#define PCI_DEVICE_ID_ATI_IXP300_SMBUS 0x4363 -#define PCI_DEVICE_ID_ATI_IXP300_IDE 0x4369 -#define PCI_DEVICE_ID_ATI_IXP300_SATA 0x436e -#define PCI_DEVICE_ID_ATI_IXP400_SMBUS 0x4372 -#define PCI_DEVICE_ID_ATI_IXP400_IDE 0x4376 -#define PCI_DEVICE_ID_ATI_IXP400_SATA 0x4379 -#define PCI_DEVICE_ID_ATI_IXP400_SATA2 0x437a -#define PCI_DEVICE_ID_ATI_IXP600_SATA 0x4380 -#define PCI_DEVICE_ID_ATI_SBX00_SMBUS 0x4385 -#define PCI_DEVICE_ID_ATI_IXP600_IDE 0x438c -#define PCI_DEVICE_ID_ATI_IXP700_SATA 0x4390 -#define PCI_DEVICE_ID_ATI_IXP700_IDE 0x439c - -#define PCI_VENDOR_ID_VLSI 0x1004 -#define PCI_DEVICE_ID_VLSI_82C592 0x0005 -#define PCI_DEVICE_ID_VLSI_82C593 0x0006 -#define PCI_DEVICE_ID_VLSI_82C594 0x0007 -#define PCI_DEVICE_ID_VLSI_82C597 0x0009 -#define PCI_DEVICE_ID_VLSI_82C541 0x000c -#define PCI_DEVICE_ID_VLSI_82C543 0x000d -#define PCI_DEVICE_ID_VLSI_82C532 0x0101 -#define PCI_DEVICE_ID_VLSI_82C534 0x0102 -#define PCI_DEVICE_ID_VLSI_82C535 0x0104 -#define PCI_DEVICE_ID_VLSI_82C147 0x0105 -#define PCI_DEVICE_ID_VLSI_VAS96011 0x0702 - -/* AMD RD890 Chipset */ -#define PCI_DEVICE_ID_RD890_IOMMU 0x5a23 - -#define PCI_VENDOR_ID_ADL 0x1005 -#define PCI_DEVICE_ID_ADL_2301 0x2301 - -#define PCI_VENDOR_ID_NS 0x100b -#define PCI_DEVICE_ID_NS_87415 0x0002 -#define PCI_DEVICE_ID_NS_87560_LIO 0x000e -#define PCI_DEVICE_ID_NS_87560_USB 0x0012 -#define PCI_DEVICE_ID_NS_83815 0x0020 -#define PCI_DEVICE_ID_NS_83820 0x0022 -#define PCI_DEVICE_ID_NS_CS5535_ISA 0x002b -#define PCI_DEVICE_ID_NS_CS5535_IDE 0x002d -#define PCI_DEVICE_ID_NS_CS5535_AUDIO 0x002e -#define PCI_DEVICE_ID_NS_CS5535_USB 0x002f -#define PCI_DEVICE_ID_NS_GX_VIDEO 0x0030 -#define PCI_DEVICE_ID_NS_SATURN 0x0035 -#define PCI_DEVICE_ID_NS_SCx200_BRIDGE 0x0500 -#define PCI_DEVICE_ID_NS_SCx200_SMI 0x0501 -#define PCI_DEVICE_ID_NS_SCx200_IDE 0x0502 -#define PCI_DEVICE_ID_NS_SCx200_AUDIO 0x0503 -#define PCI_DEVICE_ID_NS_SCx200_VIDEO 0x0504 -#define PCI_DEVICE_ID_NS_SCx200_XBUS 0x0505 -#define PCI_DEVICE_ID_NS_SC1100_BRIDGE 0x0510 -#define PCI_DEVICE_ID_NS_SC1100_SMI 0x0511 -#define PCI_DEVICE_ID_NS_SC1100_XBUS 0x0515 -#define PCI_DEVICE_ID_NS_87410 0xd001 - -#define PCI_DEVICE_ID_NS_GX_HOST_BRIDGE 0x0028 - -#define PCI_VENDOR_ID_TSENG 0x100c -#define PCI_DEVICE_ID_TSENG_W32P_2 0x3202 -#define PCI_DEVICE_ID_TSENG_W32P_b 0x3205 -#define PCI_DEVICE_ID_TSENG_W32P_c 0x3206 -#define PCI_DEVICE_ID_TSENG_W32P_d 0x3207 -#define PCI_DEVICE_ID_TSENG_ET6000 0x3208 - -#define PCI_VENDOR_ID_WEITEK 0x100e -#define PCI_DEVICE_ID_WEITEK_P9000 0x9001 -#define PCI_DEVICE_ID_WEITEK_P9100 0x9100 - -#define PCI_VENDOR_ID_DEC 0x1011 -#define PCI_DEVICE_ID_DEC_BRD 0x0001 -#define PCI_DEVICE_ID_DEC_TULIP 0x0002 -#define PCI_DEVICE_ID_DEC_TGA 0x0004 -#define PCI_DEVICE_ID_DEC_TULIP_FAST 0x0009 -#define PCI_DEVICE_ID_DEC_TGA2 0x000D -#define PCI_DEVICE_ID_DEC_FDDI 0x000F -#define PCI_DEVICE_ID_DEC_TULIP_PLUS 0x0014 -#define PCI_DEVICE_ID_DEC_21142 0x0019 -#define PCI_DEVICE_ID_DEC_21052 0x0021 -#define PCI_DEVICE_ID_DEC_21150 0x0022 -#define PCI_DEVICE_ID_DEC_21152 0x0024 -#define PCI_DEVICE_ID_DEC_21153 0x0025 -#define PCI_DEVICE_ID_DEC_21154 0x0026 -#define PCI_DEVICE_ID_DEC_21285 0x1065 -#define PCI_DEVICE_ID_COMPAQ_42XX 0x0046 - -#define PCI_VENDOR_ID_CIRRUS 0x1013 -#define PCI_DEVICE_ID_CIRRUS_7548 0x0038 -#define PCI_DEVICE_ID_CIRRUS_5430 0x00a0 -#define PCI_DEVICE_ID_CIRRUS_5434_4 0x00a4 -#define PCI_DEVICE_ID_CIRRUS_5434_8 0x00a8 -#define PCI_DEVICE_ID_CIRRUS_5436 0x00ac -#define PCI_DEVICE_ID_CIRRUS_5446 0x00b8 -#define PCI_DEVICE_ID_CIRRUS_5480 0x00bc -#define PCI_DEVICE_ID_CIRRUS_5462 0x00d0 -#define PCI_DEVICE_ID_CIRRUS_5464 0x00d4 -#define PCI_DEVICE_ID_CIRRUS_5465 0x00d6 -#define PCI_DEVICE_ID_CIRRUS_6729 0x1100 -#define PCI_DEVICE_ID_CIRRUS_6832 0x1110 -#define PCI_DEVICE_ID_CIRRUS_7543 0x1202 -#define PCI_DEVICE_ID_CIRRUS_4610 0x6001 -#define PCI_DEVICE_ID_CIRRUS_4612 0x6003 -#define PCI_DEVICE_ID_CIRRUS_4615 0x6004 - -#define PCI_VENDOR_ID_IBM 0x1014 -#define PCI_DEVICE_ID_IBM_TR 0x0018 -#define PCI_DEVICE_ID_IBM_TR_WAKE 0x003e -#define PCI_DEVICE_ID_IBM_CPC710_PCI64 0x00fc -#define PCI_DEVICE_ID_IBM_SNIPE 0x0180 -#define PCI_DEVICE_ID_IBM_CITRINE 0x028C -#define PCI_DEVICE_ID_IBM_GEMSTONE 0xB166 -#define PCI_DEVICE_ID_IBM_OBSIDIAN 0x02BD -#define PCI_DEVICE_ID_IBM_ICOM_DEV_ID_1 0x0031 -#define PCI_DEVICE_ID_IBM_ICOM_DEV_ID_2 0x0219 -#define PCI_DEVICE_ID_IBM_ICOM_V2_TWO_PORTS_RVX 0x021A -#define PCI_DEVICE_ID_IBM_ICOM_V2_ONE_PORT_RVX_ONE_PORT_MDM 0x0251 -#define PCI_DEVICE_ID_IBM_ICOM_V2_ONE_PORT_RVX_ONE_PORT_MDM_PCIE 0x0361 -#define PCI_DEVICE_ID_IBM_ICOM_FOUR_PORT_MODEL 0x252 - -#define PCI_SUBVENDOR_ID_IBM 0x1014 -#define PCI_SUBDEVICE_ID_IBM_SATURN_SERIAL_ONE_PORT 0x03d4 - -#define PCI_VENDOR_ID_UNISYS 0x1018 -#define PCI_DEVICE_ID_UNISYS_DMA_DIRECTOR 0x001C - -#define PCI_VENDOR_ID_COMPEX2 0x101a /* pci.ids says "AT&T GIS (NCR)" */ -#define PCI_DEVICE_ID_COMPEX2_100VG 0x0005 - -#define PCI_VENDOR_ID_WD 0x101c -#define PCI_DEVICE_ID_WD_90C 0xc24a - -#define PCI_VENDOR_ID_AMI 0x101e -#define PCI_DEVICE_ID_AMI_MEGARAID3 0x1960 -#define PCI_DEVICE_ID_AMI_MEGARAID 0x9010 -#define PCI_DEVICE_ID_AMI_MEGARAID2 0x9060 - -#define PCI_VENDOR_ID_AMD 0x1022 -#define PCI_DEVICE_ID_AMD_K8_NB 0x1100 -#define PCI_DEVICE_ID_AMD_K8_NB_ADDRMAP 0x1101 -#define PCI_DEVICE_ID_AMD_K8_NB_MEMCTL 0x1102 -#define PCI_DEVICE_ID_AMD_K8_NB_MISC 0x1103 -#define PCI_DEVICE_ID_AMD_10H_NB_HT 0x1200 -#define PCI_DEVICE_ID_AMD_10H_NB_MAP 0x1201 -#define PCI_DEVICE_ID_AMD_10H_NB_DRAM 0x1202 -#define PCI_DEVICE_ID_AMD_10H_NB_MISC 0x1203 -#define PCI_DEVICE_ID_AMD_10H_NB_LINK 0x1204 -#define PCI_DEVICE_ID_AMD_11H_NB_HT 0x1300 -#define PCI_DEVICE_ID_AMD_11H_NB_MAP 0x1301 -#define PCI_DEVICE_ID_AMD_11H_NB_DRAM 0x1302 -#define PCI_DEVICE_ID_AMD_11H_NB_MISC 0x1303 -#define PCI_DEVICE_ID_AMD_11H_NB_LINK 0x1304 -#define PCI_DEVICE_ID_AMD_15H_NB_F0 0x1600 -#define PCI_DEVICE_ID_AMD_15H_NB_F1 0x1601 -#define PCI_DEVICE_ID_AMD_15H_NB_F2 0x1602 -#define PCI_DEVICE_ID_AMD_15H_NB_F3 0x1603 -#define PCI_DEVICE_ID_AMD_15H_NB_F4 0x1604 -#define PCI_DEVICE_ID_AMD_15H_NB_F5 0x1605 -#define PCI_DEVICE_ID_AMD_CNB17H_F3 0x1703 -#define PCI_DEVICE_ID_AMD_LANCE 0x2000 -#define PCI_DEVICE_ID_AMD_LANCE_HOME 0x2001 -#define PCI_DEVICE_ID_AMD_SCSI 0x2020 -#define PCI_DEVICE_ID_AMD_SERENADE 0x36c0 -#define PCI_DEVICE_ID_AMD_FE_GATE_7006 0x7006 -#define PCI_DEVICE_ID_AMD_FE_GATE_7007 0x7007 -#define PCI_DEVICE_ID_AMD_FE_GATE_700C 0x700C -#define PCI_DEVICE_ID_AMD_FE_GATE_700E 0x700E -#define PCI_DEVICE_ID_AMD_COBRA_7401 0x7401 -#define PCI_DEVICE_ID_AMD_VIPER_7409 0x7409 -#define PCI_DEVICE_ID_AMD_VIPER_740B 0x740B -#define PCI_DEVICE_ID_AMD_VIPER_7410 0x7410 -#define PCI_DEVICE_ID_AMD_VIPER_7411 0x7411 -#define PCI_DEVICE_ID_AMD_VIPER_7413 0x7413 -#define PCI_DEVICE_ID_AMD_VIPER_7440 0x7440 -#define PCI_DEVICE_ID_AMD_OPUS_7441 0x7441 -#define PCI_DEVICE_ID_AMD_OPUS_7443 0x7443 -#define PCI_DEVICE_ID_AMD_VIPER_7443 0x7443 -#define PCI_DEVICE_ID_AMD_OPUS_7445 0x7445 -#define PCI_DEVICE_ID_AMD_8111_PCI 0x7460 -#define PCI_DEVICE_ID_AMD_8111_LPC 0x7468 -#define PCI_DEVICE_ID_AMD_8111_IDE 0x7469 -#define PCI_DEVICE_ID_AMD_8111_SMBUS2 0x746a -#define PCI_DEVICE_ID_AMD_8111_SMBUS 0x746b -#define PCI_DEVICE_ID_AMD_8111_AUDIO 0x746d -#define PCI_DEVICE_ID_AMD_8151_0 0x7454 -#define PCI_DEVICE_ID_AMD_8131_BRIDGE 0x7450 -#define PCI_DEVICE_ID_AMD_8131_APIC 0x7451 -#define PCI_DEVICE_ID_AMD_8132_BRIDGE 0x7458 -#define PCI_DEVICE_ID_AMD_HUDSON2_SMBUS 0x780b -#define PCI_DEVICE_ID_AMD_CS5535_IDE 0x208F -#define PCI_DEVICE_ID_AMD_CS5536_ISA 0x2090 -#define PCI_DEVICE_ID_AMD_CS5536_FLASH 0x2091 -#define PCI_DEVICE_ID_AMD_CS5536_AUDIO 0x2093 -#define PCI_DEVICE_ID_AMD_CS5536_OHC 0x2094 -#define PCI_DEVICE_ID_AMD_CS5536_EHC 0x2095 -#define PCI_DEVICE_ID_AMD_CS5536_UDC 0x2096 -#define PCI_DEVICE_ID_AMD_CS5536_UOC 0x2097 -#define PCI_DEVICE_ID_AMD_CS5536_IDE 0x209A -#define PCI_DEVICE_ID_AMD_LX_VIDEO 0x2081 -#define PCI_DEVICE_ID_AMD_LX_AES 0x2082 -#define PCI_DEVICE_ID_AMD_HUDSON2_IDE 0x780c -#define PCI_DEVICE_ID_AMD_HUDSON2_SATA_IDE 0x7800 - -#define PCI_VENDOR_ID_TRIDENT 0x1023 -#define PCI_DEVICE_ID_TRIDENT_4DWAVE_DX 0x2000 -#define PCI_DEVICE_ID_TRIDENT_4DWAVE_NX 0x2001 -#define PCI_DEVICE_ID_TRIDENT_9320 0x9320 -#define PCI_DEVICE_ID_TRIDENT_9388 0x9388 -#define PCI_DEVICE_ID_TRIDENT_9397 0x9397 -#define PCI_DEVICE_ID_TRIDENT_939A 0x939A -#define PCI_DEVICE_ID_TRIDENT_9520 0x9520 -#define PCI_DEVICE_ID_TRIDENT_9525 0x9525 -#define PCI_DEVICE_ID_TRIDENT_9420 0x9420 -#define PCI_DEVICE_ID_TRIDENT_9440 0x9440 -#define PCI_DEVICE_ID_TRIDENT_9660 0x9660 -#define PCI_DEVICE_ID_TRIDENT_9750 0x9750 -#define PCI_DEVICE_ID_TRIDENT_9850 0x9850 -#define PCI_DEVICE_ID_TRIDENT_9880 0x9880 -#define PCI_DEVICE_ID_TRIDENT_8400 0x8400 -#define PCI_DEVICE_ID_TRIDENT_8420 0x8420 -#define PCI_DEVICE_ID_TRIDENT_8500 0x8500 - -#define PCI_VENDOR_ID_AI 0x1025 -#define PCI_DEVICE_ID_AI_M1435 0x1435 - -#define PCI_VENDOR_ID_DELL 0x1028 -#define PCI_DEVICE_ID_DELL_RACIII 0x0008 -#define PCI_DEVICE_ID_DELL_RAC4 0x0012 -#define PCI_DEVICE_ID_DELL_PERC5 0x0015 - -#define PCI_VENDOR_ID_MATROX 0x102B -#define PCI_DEVICE_ID_MATROX_MGA_2 0x0518 -#define PCI_DEVICE_ID_MATROX_MIL 0x0519 -#define PCI_DEVICE_ID_MATROX_MYS 0x051A -#define PCI_DEVICE_ID_MATROX_MIL_2 0x051b -#define PCI_DEVICE_ID_MATROX_MYS_AGP 0x051e -#define PCI_DEVICE_ID_MATROX_MIL_2_AGP 0x051f -#define PCI_DEVICE_ID_MATROX_MGA_IMP 0x0d10 -#define PCI_DEVICE_ID_MATROX_G100_MM 0x1000 -#define PCI_DEVICE_ID_MATROX_G100_AGP 0x1001 -#define PCI_DEVICE_ID_MATROX_G200_PCI 0x0520 -#define PCI_DEVICE_ID_MATROX_G200_AGP 0x0521 -#define PCI_DEVICE_ID_MATROX_G400 0x0525 -#define PCI_DEVICE_ID_MATROX_G200EV_PCI 0x0530 -#define PCI_DEVICE_ID_MATROX_G550 0x2527 -#define PCI_DEVICE_ID_MATROX_VIA 0x4536 - -#define PCI_VENDOR_ID_MOBILITY_ELECTRONICS 0x14f2 - -#define PCI_VENDOR_ID_CT 0x102c -#define PCI_DEVICE_ID_CT_69000 0x00c0 -#define PCI_DEVICE_ID_CT_65545 0x00d8 -#define PCI_DEVICE_ID_CT_65548 0x00dc -#define PCI_DEVICE_ID_CT_65550 0x00e0 -#define PCI_DEVICE_ID_CT_65554 0x00e4 -#define PCI_DEVICE_ID_CT_65555 0x00e5 - -#define PCI_VENDOR_ID_MIRO 0x1031 -#define PCI_DEVICE_ID_MIRO_36050 0x5601 -#define PCI_DEVICE_ID_MIRO_DC10PLUS 0x7efe -#define PCI_DEVICE_ID_MIRO_DC30PLUS 0xd801 - -#define PCI_VENDOR_ID_NEC 0x1033 -#define PCI_DEVICE_ID_NEC_CBUS_1 0x0001 /* PCI-Cbus Bridge */ -#define PCI_DEVICE_ID_NEC_LOCAL 0x0002 /* Local Bridge */ -#define PCI_DEVICE_ID_NEC_ATM 0x0003 /* ATM LAN Controller */ -#define PCI_DEVICE_ID_NEC_R4000 0x0004 /* R4000 Bridge */ -#define PCI_DEVICE_ID_NEC_486 0x0005 /* 486 Like Peripheral Bus Bridge */ -#define PCI_DEVICE_ID_NEC_ACCEL_1 0x0006 /* Graphic Accelerator */ -#define PCI_DEVICE_ID_NEC_UXBUS 0x0007 /* UX-Bus Bridge */ -#define PCI_DEVICE_ID_NEC_ACCEL_2 0x0008 /* Graphic Accelerator */ -#define PCI_DEVICE_ID_NEC_GRAPH 0x0009 /* PCI-CoreGraph Bridge */ -#define PCI_DEVICE_ID_NEC_VL 0x0016 /* PCI-VL Bridge */ -#define PCI_DEVICE_ID_NEC_STARALPHA2 0x002c /* STAR ALPHA2 */ -#define PCI_DEVICE_ID_NEC_CBUS_2 0x002d /* PCI-Cbus Bridge */ -#define PCI_DEVICE_ID_NEC_USB 0x0035 /* PCI-USB Host */ -#define PCI_DEVICE_ID_NEC_CBUS_3 0x003b -#define PCI_DEVICE_ID_NEC_NAPCCARD 0x003e -#define PCI_DEVICE_ID_NEC_PCX2 0x0046 /* PowerVR */ -#define PCI_DEVICE_ID_NEC_VRC5476 0x009b -#define PCI_DEVICE_ID_NEC_VRC4173 0x00a5 -#define PCI_DEVICE_ID_NEC_VRC5477_AC97 0x00a6 -#define PCI_DEVICE_ID_NEC_PC9821CS01 0x800c /* PC-9821-CS01 */ -#define PCI_DEVICE_ID_NEC_PC9821NRB06 0x800d /* PC-9821NR-B06 */ - -#define PCI_VENDOR_ID_FD 0x1036 -#define PCI_DEVICE_ID_FD_36C70 0x0000 - -#define PCI_VENDOR_ID_SI 0x1039 -#define PCI_DEVICE_ID_SI_5591_AGP 0x0001 -#define PCI_DEVICE_ID_SI_6202 0x0002 -#define PCI_DEVICE_ID_SI_503 0x0008 -#define PCI_DEVICE_ID_SI_ACPI 0x0009 -#define PCI_DEVICE_ID_SI_SMBUS 0x0016 -#define PCI_DEVICE_ID_SI_LPC 0x0018 -#define PCI_DEVICE_ID_SI_5597_VGA 0x0200 -#define PCI_DEVICE_ID_SI_6205 0x0205 -#define PCI_DEVICE_ID_SI_501 0x0406 -#define PCI_DEVICE_ID_SI_496 0x0496 -#define PCI_DEVICE_ID_SI_300 0x0300 -#define PCI_DEVICE_ID_SI_315H 0x0310 -#define PCI_DEVICE_ID_SI_315 0x0315 -#define PCI_DEVICE_ID_SI_315PRO 0x0325 -#define PCI_DEVICE_ID_SI_530 0x0530 -#define PCI_DEVICE_ID_SI_540 0x0540 -#define PCI_DEVICE_ID_SI_550 0x0550 -#define PCI_DEVICE_ID_SI_540_VGA 0x5300 -#define PCI_DEVICE_ID_SI_550_VGA 0x5315 -#define PCI_DEVICE_ID_SI_620 0x0620 -#define PCI_DEVICE_ID_SI_630 0x0630 -#define PCI_DEVICE_ID_SI_633 0x0633 -#define PCI_DEVICE_ID_SI_635 0x0635 -#define PCI_DEVICE_ID_SI_640 0x0640 -#define PCI_DEVICE_ID_SI_645 0x0645 -#define PCI_DEVICE_ID_SI_646 0x0646 -#define PCI_DEVICE_ID_SI_648 0x0648 -#define PCI_DEVICE_ID_SI_650 0x0650 -#define PCI_DEVICE_ID_SI_651 0x0651 -#define PCI_DEVICE_ID_SI_655 0x0655 -#define PCI_DEVICE_ID_SI_661 0x0661 -#define PCI_DEVICE_ID_SI_730 0x0730 -#define PCI_DEVICE_ID_SI_733 0x0733 -#define PCI_DEVICE_ID_SI_630_VGA 0x6300 -#define PCI_DEVICE_ID_SI_735 0x0735 -#define PCI_DEVICE_ID_SI_740 0x0740 -#define PCI_DEVICE_ID_SI_741 0x0741 -#define PCI_DEVICE_ID_SI_745 0x0745 -#define PCI_DEVICE_ID_SI_746 0x0746 -#define PCI_DEVICE_ID_SI_755 0x0755 -#define PCI_DEVICE_ID_SI_760 0x0760 -#define PCI_DEVICE_ID_SI_900 0x0900 -#define PCI_DEVICE_ID_SI_961 0x0961 -#define PCI_DEVICE_ID_SI_962 0x0962 -#define PCI_DEVICE_ID_SI_963 0x0963 -#define PCI_DEVICE_ID_SI_965 0x0965 -#define PCI_DEVICE_ID_SI_966 0x0966 -#define PCI_DEVICE_ID_SI_968 0x0968 -#define PCI_DEVICE_ID_SI_1180 0x1180 -#define PCI_DEVICE_ID_SI_5511 0x5511 -#define PCI_DEVICE_ID_SI_5513 0x5513 -#define PCI_DEVICE_ID_SI_5517 0x5517 -#define PCI_DEVICE_ID_SI_5518 0x5518 -#define PCI_DEVICE_ID_SI_5571 0x5571 -#define PCI_DEVICE_ID_SI_5581 0x5581 -#define PCI_DEVICE_ID_SI_5582 0x5582 -#define PCI_DEVICE_ID_SI_5591 0x5591 -#define PCI_DEVICE_ID_SI_5596 0x5596 -#define PCI_DEVICE_ID_SI_5597 0x5597 -#define PCI_DEVICE_ID_SI_5598 0x5598 -#define PCI_DEVICE_ID_SI_5600 0x5600 -#define PCI_DEVICE_ID_SI_7012 0x7012 -#define PCI_DEVICE_ID_SI_7013 0x7013 -#define PCI_DEVICE_ID_SI_7016 0x7016 -#define PCI_DEVICE_ID_SI_7018 0x7018 - -#define PCI_VENDOR_ID_HP 0x103c -#define PCI_DEVICE_ID_HP_VISUALIZE_EG 0x1005 -#define PCI_DEVICE_ID_HP_VISUALIZE_FX6 0x1006 -#define PCI_DEVICE_ID_HP_VISUALIZE_FX4 0x1008 -#define PCI_DEVICE_ID_HP_VISUALIZE_FX2 0x100a -#define PCI_DEVICE_ID_HP_TACHYON 0x1028 -#define PCI_DEVICE_ID_HP_TACHLITE 0x1029 -#define PCI_DEVICE_ID_HP_J2585A 0x1030 -#define PCI_DEVICE_ID_HP_J2585B 0x1031 -#define PCI_DEVICE_ID_HP_J2973A 0x1040 -#define PCI_DEVICE_ID_HP_J2970A 0x1042 -#define PCI_DEVICE_ID_HP_DIVA 0x1048 -#define PCI_DEVICE_ID_HP_DIVA_TOSCA1 0x1049 -#define PCI_DEVICE_ID_HP_DIVA_TOSCA2 0x104A -#define PCI_DEVICE_ID_HP_DIVA_MAESTRO 0x104B -#define PCI_DEVICE_ID_HP_REO_IOC 0x10f1 -#define PCI_DEVICE_ID_HP_VISUALIZE_FXE 0x108b -#define PCI_DEVICE_ID_HP_DIVA_HALFDOME 0x1223 -#define PCI_DEVICE_ID_HP_DIVA_KEYSTONE 0x1226 -#define PCI_DEVICE_ID_HP_DIVA_POWERBAR 0x1227 -#define PCI_DEVICE_ID_HP_ZX1_IOC 0x122a -#define PCI_DEVICE_ID_HP_PCIX_LBA 0x122e -#define PCI_DEVICE_ID_HP_SX1000_IOC 0x127c -#define PCI_DEVICE_ID_HP_DIVA_EVEREST 0x1282 -#define PCI_DEVICE_ID_HP_DIVA_AUX 0x1290 -#define PCI_DEVICE_ID_HP_DIVA_RMP3 0x1301 -#define PCI_DEVICE_ID_HP_DIVA_HURRICANE 0x132a -#define PCI_DEVICE_ID_HP_CISSA 0x3220 -#define PCI_DEVICE_ID_HP_CISSC 0x3230 -#define PCI_DEVICE_ID_HP_CISSD 0x3238 -#define PCI_DEVICE_ID_HP_CISSE 0x323a -#define PCI_DEVICE_ID_HP_CISSF 0x323b -#define PCI_DEVICE_ID_HP_ZX2_IOC 0x4031 - -#define PCI_VENDOR_ID_PCTECH 0x1042 -#define PCI_DEVICE_ID_PCTECH_RZ1000 0x1000 -#define PCI_DEVICE_ID_PCTECH_RZ1001 0x1001 -#define PCI_DEVICE_ID_PCTECH_SAMURAI_IDE 0x3020 - -#define PCI_VENDOR_ID_ASUSTEK 0x1043 -#define PCI_DEVICE_ID_ASUSTEK_0675 0x0675 - -#define PCI_VENDOR_ID_DPT 0x1044 -#define PCI_DEVICE_ID_DPT 0xa400 - -#define PCI_VENDOR_ID_OPTI 0x1045 -#define PCI_DEVICE_ID_OPTI_82C558 0xc558 -#define PCI_DEVICE_ID_OPTI_82C621 0xc621 -#define PCI_DEVICE_ID_OPTI_82C700 0xc700 -#define PCI_DEVICE_ID_OPTI_82C825 0xd568 - -#define PCI_VENDOR_ID_ELSA 0x1048 -#define PCI_DEVICE_ID_ELSA_MICROLINK 0x1000 -#define PCI_DEVICE_ID_ELSA_QS3000 0x3000 - -#define PCI_VENDOR_ID_STMICRO 0x104A -#define PCI_DEVICE_ID_STMICRO_USB_HOST 0xCC00 -#define PCI_DEVICE_ID_STMICRO_USB_OHCI 0xCC01 -#define PCI_DEVICE_ID_STMICRO_USB_OTG 0xCC02 -#define PCI_DEVICE_ID_STMICRO_UART_HWFC 0xCC03 -#define PCI_DEVICE_ID_STMICRO_UART_NO_HWFC 0xCC04 -#define PCI_DEVICE_ID_STMICRO_SOC_DMA 0xCC05 -#define PCI_DEVICE_ID_STMICRO_SATA 0xCC06 -#define PCI_DEVICE_ID_STMICRO_I2C 0xCC07 -#define PCI_DEVICE_ID_STMICRO_SPI_HS 0xCC08 -#define PCI_DEVICE_ID_STMICRO_MAC 0xCC09 -#define PCI_DEVICE_ID_STMICRO_SDIO_EMMC 0xCC0A -#define PCI_DEVICE_ID_STMICRO_SDIO 0xCC0B -#define PCI_DEVICE_ID_STMICRO_GPIO 0xCC0C -#define PCI_DEVICE_ID_STMICRO_VIP 0xCC0D -#define PCI_DEVICE_ID_STMICRO_AUDIO_ROUTER_DMA 0xCC0E -#define PCI_DEVICE_ID_STMICRO_AUDIO_ROUTER_SRCS 0xCC0F -#define PCI_DEVICE_ID_STMICRO_AUDIO_ROUTER_MSPS 0xCC10 -#define PCI_DEVICE_ID_STMICRO_CAN 0xCC11 -#define PCI_DEVICE_ID_STMICRO_MLB 0xCC12 -#define PCI_DEVICE_ID_STMICRO_DBP 0xCC13 -#define PCI_DEVICE_ID_STMICRO_SATA_PHY 0xCC14 -#define PCI_DEVICE_ID_STMICRO_ESRAM 0xCC15 -#define PCI_DEVICE_ID_STMICRO_VIC 0xCC16 - -#define PCI_VENDOR_ID_BUSLOGIC 0x104B -#define PCI_DEVICE_ID_BUSLOGIC_MULTIMASTER_NC 0x0140 -#define PCI_DEVICE_ID_BUSLOGIC_MULTIMASTER 0x1040 -#define PCI_DEVICE_ID_BUSLOGIC_FLASHPOINT 0x8130 - -#define PCI_VENDOR_ID_TI 0x104c -#define PCI_DEVICE_ID_TI_TVP4020 0x3d07 -#define PCI_DEVICE_ID_TI_4450 0x8011 -#define PCI_DEVICE_ID_TI_XX21_XX11 0x8031 -#define PCI_DEVICE_ID_TI_XX21_XX11_FM 0x8033 -#define PCI_DEVICE_ID_TI_XX21_XX11_SD 0x8034 -#define PCI_DEVICE_ID_TI_X515 0x8036 -#define PCI_DEVICE_ID_TI_XX12 0x8039 -#define PCI_DEVICE_ID_TI_XX12_FM 0x803b -#define PCI_DEVICE_ID_TI_XIO2000A 0x8231 -#define PCI_DEVICE_ID_TI_1130 0xac12 -#define PCI_DEVICE_ID_TI_1031 0xac13 -#define PCI_DEVICE_ID_TI_1131 0xac15 -#define PCI_DEVICE_ID_TI_1250 0xac16 -#define PCI_DEVICE_ID_TI_1220 0xac17 -#define PCI_DEVICE_ID_TI_1221 0xac19 -#define PCI_DEVICE_ID_TI_1210 0xac1a -#define PCI_DEVICE_ID_TI_1450 0xac1b -#define PCI_DEVICE_ID_TI_1225 0xac1c -#define PCI_DEVICE_ID_TI_1251A 0xac1d -#define PCI_DEVICE_ID_TI_1211 0xac1e -#define PCI_DEVICE_ID_TI_1251B 0xac1f -#define PCI_DEVICE_ID_TI_4410 0xac41 -#define PCI_DEVICE_ID_TI_4451 0xac42 -#define PCI_DEVICE_ID_TI_4510 0xac44 -#define PCI_DEVICE_ID_TI_4520 0xac46 -#define PCI_DEVICE_ID_TI_7510 0xac47 -#define PCI_DEVICE_ID_TI_7610 0xac48 -#define PCI_DEVICE_ID_TI_7410 0xac49 -#define PCI_DEVICE_ID_TI_1410 0xac50 -#define PCI_DEVICE_ID_TI_1420 0xac51 -#define PCI_DEVICE_ID_TI_1451A 0xac52 -#define PCI_DEVICE_ID_TI_1620 0xac54 -#define PCI_DEVICE_ID_TI_1520 0xac55 -#define PCI_DEVICE_ID_TI_1510 0xac56 -#define PCI_DEVICE_ID_TI_X620 0xac8d -#define PCI_DEVICE_ID_TI_X420 0xac8e -#define PCI_DEVICE_ID_TI_XX20_FM 0xac8f - -#define PCI_VENDOR_ID_SONY 0x104d - -/* Winbond have two vendor IDs! See 0x10ad as well */ -#define PCI_VENDOR_ID_WINBOND2 0x1050 -#define PCI_DEVICE_ID_WINBOND2_89C940F 0x5a5a -#define PCI_DEVICE_ID_WINBOND2_6692 0x6692 - -#define PCI_VENDOR_ID_ANIGMA 0x1051 -#define PCI_DEVICE_ID_ANIGMA_MC145575 0x0100 - -#define PCI_VENDOR_ID_EFAR 0x1055 -#define PCI_DEVICE_ID_EFAR_SLC90E66_1 0x9130 -#define PCI_DEVICE_ID_EFAR_SLC90E66_3 0x9463 - -#define PCI_VENDOR_ID_MOTOROLA 0x1057 -#define PCI_DEVICE_ID_MOTOROLA_MPC105 0x0001 -#define PCI_DEVICE_ID_MOTOROLA_MPC106 0x0002 -#define PCI_DEVICE_ID_MOTOROLA_MPC107 0x0004 -#define PCI_DEVICE_ID_MOTOROLA_RAVEN 0x4801 -#define PCI_DEVICE_ID_MOTOROLA_FALCON 0x4802 -#define PCI_DEVICE_ID_MOTOROLA_HAWK 0x4803 -#define PCI_DEVICE_ID_MOTOROLA_HARRIER 0x480b -#define PCI_DEVICE_ID_MOTOROLA_MPC5200 0x5803 -#define PCI_DEVICE_ID_MOTOROLA_MPC5200B 0x5809 - -#define PCI_VENDOR_ID_PROMISE 0x105a -#define PCI_DEVICE_ID_PROMISE_20265 0x0d30 -#define PCI_DEVICE_ID_PROMISE_20267 0x4d30 -#define PCI_DEVICE_ID_PROMISE_20246 0x4d33 -#define PCI_DEVICE_ID_PROMISE_20262 0x4d38 -#define PCI_DEVICE_ID_PROMISE_20263 0x0D38 -#define PCI_DEVICE_ID_PROMISE_20268 0x4d68 -#define PCI_DEVICE_ID_PROMISE_20269 0x4d69 -#define PCI_DEVICE_ID_PROMISE_20270 0x6268 -#define PCI_DEVICE_ID_PROMISE_20271 0x6269 -#define PCI_DEVICE_ID_PROMISE_20275 0x1275 -#define PCI_DEVICE_ID_PROMISE_20276 0x5275 -#define PCI_DEVICE_ID_PROMISE_20277 0x7275 - -#define PCI_VENDOR_ID_FOXCONN 0x105b - -#define PCI_VENDOR_ID_UMC 0x1060 -#define PCI_DEVICE_ID_UMC_UM8673F 0x0101 -#define PCI_DEVICE_ID_UMC_UM8886BF 0x673a -#define PCI_DEVICE_ID_UMC_UM8886A 0x886a - -#define PCI_VENDOR_ID_PICOPOWER 0x1066 -#define PCI_DEVICE_ID_PICOPOWER_PT86C523 0x0002 -#define PCI_DEVICE_ID_PICOPOWER_PT86C523BBP 0x8002 - -#define PCI_VENDOR_ID_MYLEX 0x1069 -#define PCI_DEVICE_ID_MYLEX_DAC960_P 0x0001 -#define PCI_DEVICE_ID_MYLEX_DAC960_PD 0x0002 -#define PCI_DEVICE_ID_MYLEX_DAC960_PG 0x0010 -#define PCI_DEVICE_ID_MYLEX_DAC960_LA 0x0020 -#define PCI_DEVICE_ID_MYLEX_DAC960_LP 0x0050 -#define PCI_DEVICE_ID_MYLEX_DAC960_BA 0xBA56 -#define PCI_DEVICE_ID_MYLEX_DAC960_GEM 0xB166 - -#define PCI_VENDOR_ID_APPLE 0x106b -#define PCI_DEVICE_ID_APPLE_BANDIT 0x0001 -#define PCI_DEVICE_ID_APPLE_HYDRA 0x000e -#define PCI_DEVICE_ID_APPLE_UNI_N_FW 0x0018 -#define PCI_DEVICE_ID_APPLE_UNI_N_AGP 0x0020 -#define PCI_DEVICE_ID_APPLE_UNI_N_GMAC 0x0021 -#define PCI_DEVICE_ID_APPLE_UNI_N_GMACP 0x0024 -#define PCI_DEVICE_ID_APPLE_UNI_N_AGP_P 0x0027 -#define PCI_DEVICE_ID_APPLE_UNI_N_AGP15 0x002d -#define PCI_DEVICE_ID_APPLE_UNI_N_PCI15 0x002e -#define PCI_DEVICE_ID_APPLE_UNI_N_GMAC2 0x0032 -#define PCI_DEVICE_ID_APPLE_UNI_N_ATA 0x0033 -#define PCI_DEVICE_ID_APPLE_UNI_N_AGP2 0x0034 -#define PCI_DEVICE_ID_APPLE_IPID_ATA100 0x003b -#define PCI_DEVICE_ID_APPLE_K2_ATA100 0x0043 -#define PCI_DEVICE_ID_APPLE_U3_AGP 0x004b -#define PCI_DEVICE_ID_APPLE_K2_GMAC 0x004c -#define PCI_DEVICE_ID_APPLE_SH_ATA 0x0050 -#define PCI_DEVICE_ID_APPLE_SH_SUNGEM 0x0051 -#define PCI_DEVICE_ID_APPLE_U3L_AGP 0x0058 -#define PCI_DEVICE_ID_APPLE_U3H_AGP 0x0059 -#define PCI_DEVICE_ID_APPLE_U4_PCIE 0x005b -#define PCI_DEVICE_ID_APPLE_IPID2_AGP 0x0066 -#define PCI_DEVICE_ID_APPLE_IPID2_ATA 0x0069 -#define PCI_DEVICE_ID_APPLE_IPID2_FW 0x006a -#define PCI_DEVICE_ID_APPLE_IPID2_GMAC 0x006b -#define PCI_DEVICE_ID_APPLE_TIGON3 0x1645 - -#define PCI_VENDOR_ID_YAMAHA 0x1073 -#define PCI_DEVICE_ID_YAMAHA_724 0x0004 -#define PCI_DEVICE_ID_YAMAHA_724F 0x000d -#define PCI_DEVICE_ID_YAMAHA_740 0x000a -#define PCI_DEVICE_ID_YAMAHA_740C 0x000c -#define PCI_DEVICE_ID_YAMAHA_744 0x0010 -#define PCI_DEVICE_ID_YAMAHA_754 0x0012 - -#define PCI_VENDOR_ID_QLOGIC 0x1077 -#define PCI_DEVICE_ID_QLOGIC_ISP10160 0x1016 -#define PCI_DEVICE_ID_QLOGIC_ISP1020 0x1020 -#define PCI_DEVICE_ID_QLOGIC_ISP1080 0x1080 -#define PCI_DEVICE_ID_QLOGIC_ISP12160 0x1216 -#define PCI_DEVICE_ID_QLOGIC_ISP1240 0x1240 -#define PCI_DEVICE_ID_QLOGIC_ISP1280 0x1280 -#define PCI_DEVICE_ID_QLOGIC_ISP2100 0x2100 -#define PCI_DEVICE_ID_QLOGIC_ISP2200 0x2200 -#define PCI_DEVICE_ID_QLOGIC_ISP2300 0x2300 -#define PCI_DEVICE_ID_QLOGIC_ISP2312 0x2312 -#define PCI_DEVICE_ID_QLOGIC_ISP2322 0x2322 -#define PCI_DEVICE_ID_QLOGIC_ISP6312 0x6312 -#define PCI_DEVICE_ID_QLOGIC_ISP6322 0x6322 -#define PCI_DEVICE_ID_QLOGIC_ISP2422 0x2422 -#define PCI_DEVICE_ID_QLOGIC_ISP2432 0x2432 -#define PCI_DEVICE_ID_QLOGIC_ISP2512 0x2512 -#define PCI_DEVICE_ID_QLOGIC_ISP2522 0x2522 -#define PCI_DEVICE_ID_QLOGIC_ISP5422 0x5422 -#define PCI_DEVICE_ID_QLOGIC_ISP5432 0x5432 - -#define PCI_VENDOR_ID_CYRIX 0x1078 -#define PCI_DEVICE_ID_CYRIX_5510 0x0000 -#define PCI_DEVICE_ID_CYRIX_PCI_MASTER 0x0001 -#define PCI_DEVICE_ID_CYRIX_5520 0x0002 -#define PCI_DEVICE_ID_CYRIX_5530_LEGACY 0x0100 -#define PCI_DEVICE_ID_CYRIX_5530_IDE 0x0102 -#define PCI_DEVICE_ID_CYRIX_5530_AUDIO 0x0103 -#define PCI_DEVICE_ID_CYRIX_5530_VIDEO 0x0104 - -#define PCI_VENDOR_ID_CONTAQ 0x1080 -#define PCI_DEVICE_ID_CONTAQ_82C693 0xc693 - -#define PCI_VENDOR_ID_OLICOM 0x108d -#define PCI_DEVICE_ID_OLICOM_OC2325 0x0012 -#define PCI_DEVICE_ID_OLICOM_OC2183 0x0013 -#define PCI_DEVICE_ID_OLICOM_OC2326 0x0014 - -#define PCI_VENDOR_ID_SUN 0x108e -#define PCI_DEVICE_ID_SUN_EBUS 0x1000 -#define PCI_DEVICE_ID_SUN_HAPPYMEAL 0x1001 -#define PCI_DEVICE_ID_SUN_RIO_EBUS 0x1100 -#define PCI_DEVICE_ID_SUN_RIO_GEM 0x1101 -#define PCI_DEVICE_ID_SUN_RIO_1394 0x1102 -#define PCI_DEVICE_ID_SUN_RIO_USB 0x1103 -#define PCI_DEVICE_ID_SUN_GEM 0x2bad -#define PCI_DEVICE_ID_SUN_SIMBA 0x5000 -#define PCI_DEVICE_ID_SUN_PBM 0x8000 -#define PCI_DEVICE_ID_SUN_SCHIZO 0x8001 -#define PCI_DEVICE_ID_SUN_SABRE 0xa000 -#define PCI_DEVICE_ID_SUN_HUMMINGBIRD 0xa001 -#define PCI_DEVICE_ID_SUN_TOMATILLO 0xa801 -#define PCI_DEVICE_ID_SUN_CASSINI 0xabba - -#define PCI_VENDOR_ID_NI 0x1093 -#define PCI_DEVICE_ID_NI_PCI2322 0xd130 -#define PCI_DEVICE_ID_NI_PCI2324 0xd140 -#define PCI_DEVICE_ID_NI_PCI2328 0xd150 -#define PCI_DEVICE_ID_NI_PXI8422_2322 0xd190 -#define PCI_DEVICE_ID_NI_PXI8422_2324 0xd1a0 -#define PCI_DEVICE_ID_NI_PXI8420_2322 0xd1d0 -#define PCI_DEVICE_ID_NI_PXI8420_2324 0xd1e0 -#define PCI_DEVICE_ID_NI_PXI8420_2328 0xd1f0 -#define PCI_DEVICE_ID_NI_PXI8420_23216 0xd1f1 -#define PCI_DEVICE_ID_NI_PCI2322I 0xd250 -#define PCI_DEVICE_ID_NI_PCI2324I 0xd270 -#define PCI_DEVICE_ID_NI_PCI23216 0xd2b0 -#define PCI_DEVICE_ID_NI_PXI8430_2322 0x7080 -#define PCI_DEVICE_ID_NI_PCI8430_2322 0x70db -#define PCI_DEVICE_ID_NI_PXI8430_2324 0x70dd -#define PCI_DEVICE_ID_NI_PCI8430_2324 0x70df -#define PCI_DEVICE_ID_NI_PXI8430_2328 0x70e2 -#define PCI_DEVICE_ID_NI_PCI8430_2328 0x70e4 -#define PCI_DEVICE_ID_NI_PXI8430_23216 0x70e6 -#define PCI_DEVICE_ID_NI_PCI8430_23216 0x70e7 -#define PCI_DEVICE_ID_NI_PXI8432_2322 0x70e8 -#define PCI_DEVICE_ID_NI_PCI8432_2322 0x70ea -#define PCI_DEVICE_ID_NI_PXI8432_2324 0x70ec -#define PCI_DEVICE_ID_NI_PCI8432_2324 0x70ee - -#define PCI_VENDOR_ID_CMD 0x1095 -#define PCI_DEVICE_ID_CMD_643 0x0643 -#define PCI_DEVICE_ID_CMD_646 0x0646 -#define PCI_DEVICE_ID_CMD_648 0x0648 -#define PCI_DEVICE_ID_CMD_649 0x0649 - -#define PCI_DEVICE_ID_SII_680 0x0680 -#define PCI_DEVICE_ID_SII_3112 0x3112 -#define PCI_DEVICE_ID_SII_1210SA 0x0240 - -#define PCI_VENDOR_ID_BROOKTREE 0x109e -#define PCI_DEVICE_ID_BROOKTREE_878 0x0878 -#define PCI_DEVICE_ID_BROOKTREE_879 0x0879 - -#define PCI_VENDOR_ID_SGI 0x10a9 -#define PCI_DEVICE_ID_SGI_IOC3 0x0003 -#define PCI_DEVICE_ID_SGI_LITHIUM 0x1002 -#define PCI_DEVICE_ID_SGI_IOC4 0x100a - -#define PCI_VENDOR_ID_WINBOND 0x10ad -#define PCI_DEVICE_ID_WINBOND_82C105 0x0105 -#define PCI_DEVICE_ID_WINBOND_83C553 0x0565 - -#define PCI_VENDOR_ID_PLX 0x10b5 -#define PCI_DEVICE_ID_PLX_R685 0x1030 -#define PCI_DEVICE_ID_PLX_ROMULUS 0x106a -#define PCI_DEVICE_ID_PLX_SPCOM800 0x1076 -#define PCI_DEVICE_ID_PLX_1077 0x1077 -#define PCI_DEVICE_ID_PLX_SPCOM200 0x1103 -#define PCI_DEVICE_ID_PLX_DJINN_ITOO 0x1151 -#define PCI_DEVICE_ID_PLX_R753 0x1152 -#define PCI_DEVICE_ID_PLX_OLITEC 0x1187 -#define PCI_DEVICE_ID_PLX_PCI200SYN 0x3196 -#define PCI_DEVICE_ID_PLX_9030 0x9030 -#define PCI_DEVICE_ID_PLX_9050 0x9050 -#define PCI_DEVICE_ID_PLX_9056 0x9056 -#define PCI_DEVICE_ID_PLX_9080 0x9080 -#define PCI_DEVICE_ID_PLX_GTEK_SERIAL2 0xa001 - -#define PCI_VENDOR_ID_MADGE 0x10b6 -#define PCI_DEVICE_ID_MADGE_MK2 0x0002 - -#define PCI_VENDOR_ID_3COM 0x10b7 -#define PCI_DEVICE_ID_3COM_3C985 0x0001 -#define PCI_DEVICE_ID_3COM_3C940 0x1700 -#define PCI_DEVICE_ID_3COM_3C339 0x3390 -#define PCI_DEVICE_ID_3COM_3C359 0x3590 -#define PCI_DEVICE_ID_3COM_3C940B 0x80eb -#define PCI_DEVICE_ID_3COM_3CR990 0x9900 -#define PCI_DEVICE_ID_3COM_3CR990_TX_95 0x9902 -#define PCI_DEVICE_ID_3COM_3CR990_TX_97 0x9903 -#define PCI_DEVICE_ID_3COM_3CR990B 0x9904 -#define PCI_DEVICE_ID_3COM_3CR990_FX 0x9905 -#define PCI_DEVICE_ID_3COM_3CR990SVR95 0x9908 -#define PCI_DEVICE_ID_3COM_3CR990SVR97 0x9909 -#define PCI_DEVICE_ID_3COM_3CR990SVR 0x990a - -#define PCI_VENDOR_ID_AL 0x10b9 -#define PCI_DEVICE_ID_AL_M1533 0x1533 -#define PCI_DEVICE_ID_AL_M1535 0x1535 -#define PCI_DEVICE_ID_AL_M1541 0x1541 -#define PCI_DEVICE_ID_AL_M1563 0x1563 -#define PCI_DEVICE_ID_AL_M1621 0x1621 -#define PCI_DEVICE_ID_AL_M1631 0x1631 -#define PCI_DEVICE_ID_AL_M1632 0x1632 -#define PCI_DEVICE_ID_AL_M1641 0x1641 -#define PCI_DEVICE_ID_AL_M1644 0x1644 -#define PCI_DEVICE_ID_AL_M1647 0x1647 -#define PCI_DEVICE_ID_AL_M1651 0x1651 -#define PCI_DEVICE_ID_AL_M1671 0x1671 -#define PCI_DEVICE_ID_AL_M1681 0x1681 -#define PCI_DEVICE_ID_AL_M1683 0x1683 -#define PCI_DEVICE_ID_AL_M1689 0x1689 -#define PCI_DEVICE_ID_AL_M5219 0x5219 -#define PCI_DEVICE_ID_AL_M5228 0x5228 -#define PCI_DEVICE_ID_AL_M5229 0x5229 -#define PCI_DEVICE_ID_AL_M5451 0x5451 -#define PCI_DEVICE_ID_AL_M7101 0x7101 - -#define PCI_VENDOR_ID_NEOMAGIC 0x10c8 -#define PCI_DEVICE_ID_NEOMAGIC_NM256AV_AUDIO 0x8005 -#define PCI_DEVICE_ID_NEOMAGIC_NM256ZX_AUDIO 0x8006 -#define PCI_DEVICE_ID_NEOMAGIC_NM256XL_PLUS_AUDIO 0x8016 - -#define PCI_VENDOR_ID_TCONRAD 0x10da -#define PCI_DEVICE_ID_TCONRAD_TOKENRING 0x0508 - -#define PCI_VENDOR_ID_NVIDIA 0x10de -#define PCI_DEVICE_ID_NVIDIA_TNT 0x0020 -#define PCI_DEVICE_ID_NVIDIA_TNT2 0x0028 -#define PCI_DEVICE_ID_NVIDIA_UTNT2 0x0029 -#define PCI_DEVICE_ID_NVIDIA_TNT_UNKNOWN 0x002a -#define PCI_DEVICE_ID_NVIDIA_VTNT2 0x002C -#define PCI_DEVICE_ID_NVIDIA_UVTNT2 0x002D -#define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP04_SMBUS 0x0034 -#define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP04_IDE 0x0035 -#define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP04_SATA 0x0036 -#define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP04_SATA2 0x003e -#define PCI_DEVICE_ID_NVIDIA_GEFORCE_6800_ULTRA 0x0040 -#define PCI_DEVICE_ID_NVIDIA_GEFORCE_6800 0x0041 -#define PCI_DEVICE_ID_NVIDIA_GEFORCE_6800_LE 0x0042 -#define PCI_DEVICE_ID_NVIDIA_GEFORCE_6800_GT 0x0045 -#define PCI_DEVICE_ID_NVIDIA_QUADRO_FX_4000 0x004E -#define PCI_DEVICE_ID_NVIDIA_NFORCE4_SMBUS 0x0052 -#define PCI_DEVICE_ID_NVIDIA_NFORCE_CK804_IDE 0x0053 -#define PCI_DEVICE_ID_NVIDIA_NFORCE_CK804_SATA 0x0054 -#define PCI_DEVICE_ID_NVIDIA_NFORCE_CK804_SATA2 0x0055 -#define PCI_DEVICE_ID_NVIDIA_CK804_AUDIO 0x0059 -#define PCI_DEVICE_ID_NVIDIA_CK804_PCIE 0x005d -#define PCI_DEVICE_ID_NVIDIA_NFORCE2_SMBUS 0x0064 -#define PCI_DEVICE_ID_NVIDIA_NFORCE2_IDE 0x0065 -#define PCI_DEVICE_ID_NVIDIA_MCP2_MODEM 0x0069 -#define PCI_DEVICE_ID_NVIDIA_MCP2_AUDIO 0x006a -#define PCI_DEVICE_ID_NVIDIA_NFORCE2S_SMBUS 0x0084 -#define PCI_DEVICE_ID_NVIDIA_NFORCE2S_IDE 0x0085 -#define PCI_DEVICE_ID_NVIDIA_MCP2S_MODEM 0x0089 -#define PCI_DEVICE_ID_NVIDIA_CK8_AUDIO 0x008a -#define PCI_DEVICE_ID_NVIDIA_NFORCE2S_SATA 0x008e -#define PCI_DEVICE_ID_NVIDIA_GEFORCE_7800_GT 0x0090 -#define PCI_DEVICE_ID_NVIDIA_GEFORCE_7800_GTX 0x0091 -#define PCI_DEVICE_ID_NVIDIA_GEFORCE_GO_7800 0x0098 -#define PCI_DEVICE_ID_NVIDIA_GEFORCE_GO_7800_GTX 0x0099 -#define PCI_DEVICE_ID_NVIDIA_ITNT2 0x00A0 -#define PCI_DEVICE_ID_GEFORCE_6800A 0x00c1 -#define PCI_DEVICE_ID_GEFORCE_6800A_LE 0x00c2 -#define PCI_DEVICE_ID_GEFORCE_GO_6800 0x00c8 -#define PCI_DEVICE_ID_GEFORCE_GO_6800_ULTRA 0x00c9 -#define PCI_DEVICE_ID_QUADRO_FX_GO1400 0x00cc -#define PCI_DEVICE_ID_QUADRO_FX_1400 0x00ce -#define PCI_DEVICE_ID_NVIDIA_NFORCE3 0x00d1 -#define PCI_DEVICE_ID_NVIDIA_NFORCE3_SMBUS 0x00d4 -#define PCI_DEVICE_ID_NVIDIA_NFORCE3_IDE 0x00d5 -#define PCI_DEVICE_ID_NVIDIA_MCP3_MODEM 0x00d9 -#define PCI_DEVICE_ID_NVIDIA_MCP3_AUDIO 0x00da -#define PCI_DEVICE_ID_NVIDIA_NFORCE3S 0x00e1 -#define PCI_DEVICE_ID_NVIDIA_NFORCE3S_SATA 0x00e3 -#define PCI_DEVICE_ID_NVIDIA_NFORCE3S_SMBUS 0x00e4 -#define PCI_DEVICE_ID_NVIDIA_NFORCE3S_IDE 0x00e5 -#define PCI_DEVICE_ID_NVIDIA_CK8S_AUDIO 0x00ea -#define PCI_DEVICE_ID_NVIDIA_NFORCE3S_SATA2 0x00ee -#define PCIE_DEVICE_ID_NVIDIA_GEFORCE_6800_ALT1 0x00f0 -#define PCIE_DEVICE_ID_NVIDIA_GEFORCE_6600_ALT1 0x00f1 -#define PCIE_DEVICE_ID_NVIDIA_GEFORCE_6600_ALT2 0x00f2 -#define PCIE_DEVICE_ID_NVIDIA_GEFORCE_6200_ALT1 0x00f3 -#define PCIE_DEVICE_ID_NVIDIA_GEFORCE_6800_GT 0x00f9 -#define PCIE_DEVICE_ID_NVIDIA_QUADRO_NVS280 0x00fd -#define PCI_DEVICE_ID_NVIDIA_GEFORCE_SDR 0x0100 -#define PCI_DEVICE_ID_NVIDIA_GEFORCE_DDR 0x0101 -#define PCI_DEVICE_ID_NVIDIA_QUADRO 0x0103 -#define PCI_DEVICE_ID_NVIDIA_GEFORCE2_MX 0x0110 -#define PCI_DEVICE_ID_NVIDIA_GEFORCE2_MX2 0x0111 -#define PCI_DEVICE_ID_NVIDIA_GEFORCE2_GO 0x0112 -#define PCI_DEVICE_ID_NVIDIA_QUADRO2_MXR 0x0113 -#define PCI_DEVICE_ID_NVIDIA_GEFORCE_6600_GT 0x0140 -#define PCI_DEVICE_ID_NVIDIA_GEFORCE_6600 0x0141 -#define PCI_DEVICE_ID_NVIDIA_GEFORCE_6610_XL 0x0145 -#define PCI_DEVICE_ID_NVIDIA_QUADRO_FX_540 0x014E -#define PCI_DEVICE_ID_NVIDIA_GEFORCE_6200 0x014F -#define PCI_DEVICE_ID_NVIDIA_GEFORCE2_GTS 0x0150 -#define PCI_DEVICE_ID_NVIDIA_GEFORCE2_GTS2 0x0151 -#define PCI_DEVICE_ID_NVIDIA_GEFORCE2_ULTRA 0x0152 -#define PCI_DEVICE_ID_NVIDIA_QUADRO2_PRO 0x0153 -#define PCI_DEVICE_ID_NVIDIA_GEFORCE_6200_TURBOCACHE 0x0161 -#define PCI_DEVICE_ID_NVIDIA_GEFORCE_GO_6200 0x0164 -#define PCI_DEVICE_ID_NVIDIA_GEFORCE_GO_6250 0x0166 -#define PCI_DEVICE_ID_NVIDIA_GEFORCE_GO_6200_1 0x0167 -#define PCI_DEVICE_ID_NVIDIA_GEFORCE_GO_6250_1 0x0168 -#define PCI_DEVICE_ID_NVIDIA_GEFORCE4_MX_460 0x0170 -#define PCI_DEVICE_ID_NVIDIA_GEFORCE4_MX_440 0x0171 -#define PCI_DEVICE_ID_NVIDIA_GEFORCE4_MX_420 0x0172 -#define PCI_DEVICE_ID_NVIDIA_GEFORCE4_MX_440_SE 0x0173 -#define PCI_DEVICE_ID_NVIDIA_GEFORCE4_440_GO 0x0174 -#define PCI_DEVICE_ID_NVIDIA_GEFORCE4_420_GO 0x0175 -#define PCI_DEVICE_ID_NVIDIA_GEFORCE4_420_GO_M32 0x0176 -#define PCI_DEVICE_ID_NVIDIA_GEFORCE4_460_GO 0x0177 -#define PCI_DEVICE_ID_NVIDIA_QUADRO4_500XGL 0x0178 -#define PCI_DEVICE_ID_NVIDIA_GEFORCE4_440_GO_M64 0x0179 -#define PCI_DEVICE_ID_NVIDIA_QUADRO4_200 0x017A -#define PCI_DEVICE_ID_NVIDIA_QUADRO4_550XGL 0x017B -#define PCI_DEVICE_ID_NVIDIA_QUADRO4_500_GOGL 0x017C -#define PCI_DEVICE_ID_NVIDIA_GEFORCE4_410_GO_M16 0x017D -#define PCI_DEVICE_ID_NVIDIA_GEFORCE4_MX_440_8X 0x0181 -#define PCI_DEVICE_ID_NVIDIA_GEFORCE4_MX_440SE_8X 0x0182 -#define PCI_DEVICE_ID_NVIDIA_GEFORCE4_MX_420_8X 0x0183 -#define PCI_DEVICE_ID_NVIDIA_GEFORCE4_MX_4000 0x0185 -#define PCI_DEVICE_ID_NVIDIA_GEFORCE4_448_GO 0x0186 -#define PCI_DEVICE_ID_NVIDIA_GEFORCE4_488_GO 0x0187 -#define PCI_DEVICE_ID_NVIDIA_QUADRO4_580_XGL 0x0188 -#define PCI_DEVICE_ID_NVIDIA_GEFORCE4_MX_MAC 0x0189 -#define PCI_DEVICE_ID_NVIDIA_QUADRO4_280_NVS 0x018A -#define PCI_DEVICE_ID_NVIDIA_QUADRO4_380_XGL 0x018B -#define PCI_DEVICE_ID_NVIDIA_IGEFORCE2 0x01a0 -#define PCI_DEVICE_ID_NVIDIA_NFORCE 0x01a4 -#define PCI_DEVICE_ID_NVIDIA_MCP1_AUDIO 0x01b1 -#define PCI_DEVICE_ID_NVIDIA_NFORCE_SMBUS 0x01b4 -#define PCI_DEVICE_ID_NVIDIA_NFORCE_IDE 0x01bc -#define PCI_DEVICE_ID_NVIDIA_MCP1_MODEM 0x01c1 -#define PCI_DEVICE_ID_NVIDIA_NFORCE2 0x01e0 -#define PCI_DEVICE_ID_NVIDIA_GEFORCE3 0x0200 -#define PCI_DEVICE_ID_NVIDIA_GEFORCE3_1 0x0201 -#define PCI_DEVICE_ID_NVIDIA_GEFORCE3_2 0x0202 -#define PCI_DEVICE_ID_NVIDIA_QUADRO_DDC 0x0203 -#define PCI_DEVICE_ID_NVIDIA_GEFORCE_6800B 0x0211 -#define PCI_DEVICE_ID_NVIDIA_GEFORCE_6800B_LE 0x0212 -#define PCI_DEVICE_ID_NVIDIA_GEFORCE_6800B_GT 0x0215 -#define PCI_DEVICE_ID_NVIDIA_GEFORCE4_TI_4600 0x0250 -#define PCI_DEVICE_ID_NVIDIA_GEFORCE4_TI_4400 0x0251 -#define PCI_DEVICE_ID_NVIDIA_GEFORCE4_TI_4200 0x0253 -#define PCI_DEVICE_ID_NVIDIA_QUADRO4_900XGL 0x0258 -#define PCI_DEVICE_ID_NVIDIA_QUADRO4_750XGL 0x0259 -#define PCI_DEVICE_ID_NVIDIA_QUADRO4_700XGL 0x025B -#define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP51_SMBUS 0x0264 -#define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP51_IDE 0x0265 -#define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP51_SATA 0x0266 -#define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP51_SATA2 0x0267 -#define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP55_SMBUS 0x0368 -#define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP55_IDE 0x036E -#define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP55_SATA 0x037E -#define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP55_SATA2 0x037F -#define PCI_DEVICE_ID_NVIDIA_GEFORCE4_TI_4800 0x0280 -#define PCI_DEVICE_ID_NVIDIA_GEFORCE4_TI_4800_8X 0x0281 -#define PCI_DEVICE_ID_NVIDIA_GEFORCE4_TI_4800SE 0x0282 -#define PCI_DEVICE_ID_NVIDIA_GEFORCE4_4200_GO 0x0286 -#define PCI_DEVICE_ID_NVIDIA_QUADRO4_980_XGL 0x0288 -#define PCI_DEVICE_ID_NVIDIA_QUADRO4_780_XGL 0x0289 -#define PCI_DEVICE_ID_NVIDIA_QUADRO4_700_GOGL 0x028C -#define PCI_DEVICE_ID_NVIDIA_GEFORCE_FX_5800_ULTRA 0x0301 -#define PCI_DEVICE_ID_NVIDIA_GEFORCE_FX_5800 0x0302 -#define PCI_DEVICE_ID_NVIDIA_QUADRO_FX_2000 0x0308 -#define PCI_DEVICE_ID_NVIDIA_QUADRO_FX_1000 0x0309 -#define PCI_DEVICE_ID_NVIDIA_GEFORCE_FX_5600_ULTRA 0x0311 -#define PCI_DEVICE_ID_NVIDIA_GEFORCE_FX_5600 0x0312 -#define PCI_DEVICE_ID_NVIDIA_GEFORCE_FX_5600SE 0x0314 -#define PCI_DEVICE_ID_NVIDIA_GEFORCE_FX_GO5600 0x031A -#define PCI_DEVICE_ID_NVIDIA_GEFORCE_FX_GO5650 0x031B -#define PCI_DEVICE_ID_NVIDIA_QUADRO_FX_GO700 0x031C -#define PCI_DEVICE_ID_NVIDIA_GEFORCE_FX_5200 0x0320 -#define PCI_DEVICE_ID_NVIDIA_GEFORCE_FX_5200_ULTRA 0x0321 -#define PCI_DEVICE_ID_NVIDIA_GEFORCE_FX_5200_1 0x0322 -#define PCI_DEVICE_ID_NVIDIA_GEFORCE_FX_5200SE 0x0323 -#define PCI_DEVICE_ID_NVIDIA_GEFORCE_FX_GO5200 0x0324 -#define PCI_DEVICE_ID_NVIDIA_GEFORCE_FX_GO5250 0x0325 -#define PCI_DEVICE_ID_NVIDIA_GEFORCE_FX_5500 0x0326 -#define PCI_DEVICE_ID_NVIDIA_GEFORCE_FX_5100 0x0327 -#define PCI_DEVICE_ID_NVIDIA_GEFORCE_FX_GO5250_32 0x0328 -#define PCI_DEVICE_ID_NVIDIA_GEFORCE_FX_GO_5200 0x0329 -#define PCI_DEVICE_ID_NVIDIA_QUADRO_NVS_280_PCI 0x032A -#define PCI_DEVICE_ID_NVIDIA_QUADRO_FX_500 0x032B -#define PCI_DEVICE_ID_NVIDIA_GEFORCE_FX_GO5300 0x032C -#define PCI_DEVICE_ID_NVIDIA_GEFORCE_FX_GO5100 0x032D -#define PCI_DEVICE_ID_NVIDIA_GEFORCE_FX_5900_ULTRA 0x0330 -#define PCI_DEVICE_ID_NVIDIA_GEFORCE_FX_5900 0x0331 -#define PCI_DEVICE_ID_NVIDIA_GEFORCE_FX_5900XT 0x0332 -#define PCI_DEVICE_ID_NVIDIA_GEFORCE_FX_5950_ULTRA 0x0333 -#define PCI_DEVICE_ID_NVIDIA_GEFORCE_FX_5900ZT 0x0334 -#define PCI_DEVICE_ID_NVIDIA_QUADRO_FX_3000 0x0338 -#define PCI_DEVICE_ID_NVIDIA_QUADRO_FX_700 0x033F -#define PCI_DEVICE_ID_NVIDIA_GEFORCE_FX_5700_ULTRA 0x0341 -#define PCI_DEVICE_ID_NVIDIA_GEFORCE_FX_5700 0x0342 -#define PCI_DEVICE_ID_NVIDIA_GEFORCE_FX_5700LE 0x0343 -#define PCI_DEVICE_ID_NVIDIA_GEFORCE_FX_5700VE 0x0344 -#define PCI_DEVICE_ID_NVIDIA_GEFORCE_FX_GO5700_1 0x0347 -#define PCI_DEVICE_ID_NVIDIA_GEFORCE_FX_GO5700_2 0x0348 -#define PCI_DEVICE_ID_NVIDIA_QUADRO_FX_GO1000 0x034C -#define PCI_DEVICE_ID_NVIDIA_QUADRO_FX_1100 0x034E -#define PCI_DEVICE_ID_NVIDIA_MCP55_BRIDGE_V0 0x0360 -#define PCI_DEVICE_ID_NVIDIA_MCP55_BRIDGE_V4 0x0364 -#define PCI_DEVICE_ID_NVIDIA_NVENET_15 0x0373 -#define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP61_SATA 0x03E7 -#define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP61_SMBUS 0x03EB -#define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP61_IDE 0x03EC -#define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP61_SATA2 0x03F6 -#define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP61_SATA3 0x03F7 -#define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP65_SMBUS 0x0446 -#define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP65_IDE 0x0448 -#define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP67_SMBUS 0x0542 -#define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP67_IDE 0x0560 -#define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP73_IDE 0x056C -#define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP78S_SMBUS 0x0752 -#define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP77_IDE 0x0759 -#define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP73_SMBUS 0x07D8 -#define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP79_SMBUS 0x0AA2 -#define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP89_SATA 0x0D85 - -#define PCI_VENDOR_ID_IMS 0x10e0 -#define PCI_DEVICE_ID_IMS_TT128 0x9128 -#define PCI_DEVICE_ID_IMS_TT3D 0x9135 - -#define PCI_VENDOR_ID_INTERG 0x10ea -#define PCI_DEVICE_ID_INTERG_1682 0x1682 -#define PCI_DEVICE_ID_INTERG_2000 0x2000 -#define PCI_DEVICE_ID_INTERG_2010 0x2010 -#define PCI_DEVICE_ID_INTERG_5000 0x5000 -#define PCI_DEVICE_ID_INTERG_5050 0x5050 - -#define PCI_VENDOR_ID_REALTEK 0x10ec -#define PCI_DEVICE_ID_REALTEK_8139 0x8139 - -#define PCI_VENDOR_ID_XILINX 0x10ee -#define PCI_DEVICE_ID_RME_DIGI96 0x3fc0 -#define PCI_DEVICE_ID_RME_DIGI96_8 0x3fc1 -#define PCI_DEVICE_ID_RME_DIGI96_8_PRO 0x3fc2 -#define PCI_DEVICE_ID_RME_DIGI96_8_PAD_OR_PST 0x3fc3 -#define PCI_DEVICE_ID_XILINX_HAMMERFALL_DSP 0x3fc5 -#define PCI_DEVICE_ID_XILINX_HAMMERFALL_DSP_MADI 0x3fc6 - -#define PCI_VENDOR_ID_INIT 0x1101 - -#define PCI_VENDOR_ID_CREATIVE 0x1102 /* duplicate: ECTIVA */ -#define PCI_DEVICE_ID_CREATIVE_EMU10K1 0x0002 -#define PCI_DEVICE_ID_CREATIVE_20K1 0x0005 -#define PCI_DEVICE_ID_CREATIVE_20K2 0x000b -#define PCI_SUBDEVICE_ID_CREATIVE_SB0760 0x0024 -#define PCI_SUBDEVICE_ID_CREATIVE_SB08801 0x0041 -#define PCI_SUBDEVICE_ID_CREATIVE_SB08802 0x0042 -#define PCI_SUBDEVICE_ID_CREATIVE_SB08803 0x0043 -#define PCI_SUBDEVICE_ID_CREATIVE_SB1270 0x0062 -#define PCI_SUBDEVICE_ID_CREATIVE_HENDRIX 0x6000 - -#define PCI_VENDOR_ID_ECTIVA 0x1102 /* duplicate: CREATIVE */ -#define PCI_DEVICE_ID_ECTIVA_EV1938 0x8938 - -#define PCI_VENDOR_ID_TTI 0x1103 -#define PCI_DEVICE_ID_TTI_HPT343 0x0003 -#define PCI_DEVICE_ID_TTI_HPT366 0x0004 -#define PCI_DEVICE_ID_TTI_HPT372 0x0005 -#define PCI_DEVICE_ID_TTI_HPT302 0x0006 -#define PCI_DEVICE_ID_TTI_HPT371 0x0007 -#define PCI_DEVICE_ID_TTI_HPT374 0x0008 -#define PCI_DEVICE_ID_TTI_HPT372N 0x0009 /* apparently a 372N variant? */ - -#define PCI_VENDOR_ID_VIA 0x1106 -#define PCI_DEVICE_ID_VIA_8763_0 0x0198 -#define PCI_DEVICE_ID_VIA_8380_0 0x0204 -#define PCI_DEVICE_ID_VIA_3238_0 0x0238 -#define PCI_DEVICE_ID_VIA_PT880 0x0258 -#define PCI_DEVICE_ID_VIA_PT880ULTRA 0x0308 -#define PCI_DEVICE_ID_VIA_PX8X0_0 0x0259 -#define PCI_DEVICE_ID_VIA_3269_0 0x0269 -#define PCI_DEVICE_ID_VIA_K8T800PRO_0 0x0282 -#define PCI_DEVICE_ID_VIA_3296_0 0x0296 -#define PCI_DEVICE_ID_VIA_8363_0 0x0305 -#define PCI_DEVICE_ID_VIA_P4M800CE 0x0314 -#define PCI_DEVICE_ID_VIA_P4M890 0x0327 -#define PCI_DEVICE_ID_VIA_VT3324 0x0324 -#define PCI_DEVICE_ID_VIA_VT3336 0x0336 -#define PCI_DEVICE_ID_VIA_VT3351 0x0351 -#define PCI_DEVICE_ID_VIA_VT3364 0x0364 -#define PCI_DEVICE_ID_VIA_8371_0 0x0391 -#define PCI_DEVICE_ID_VIA_6415 0x0415 -#define PCI_DEVICE_ID_VIA_8501_0 0x0501 -#define PCI_DEVICE_ID_VIA_82C561 0x0561 -#define PCI_DEVICE_ID_VIA_82C586_1 0x0571 -#define PCI_DEVICE_ID_VIA_82C576 0x0576 -#define PCI_DEVICE_ID_VIA_82C586_0 0x0586 -#define PCI_DEVICE_ID_VIA_82C596 0x0596 -#define PCI_DEVICE_ID_VIA_82C597_0 0x0597 -#define PCI_DEVICE_ID_VIA_82C598_0 0x0598 -#define PCI_DEVICE_ID_VIA_8601_0 0x0601 -#define PCI_DEVICE_ID_VIA_8605_0 0x0605 -#define PCI_DEVICE_ID_VIA_82C686 0x0686 -#define PCI_DEVICE_ID_VIA_82C691_0 0x0691 -#define PCI_DEVICE_ID_VIA_82C576_1 0x1571 -#define PCI_DEVICE_ID_VIA_82C586_2 0x3038 -#define PCI_DEVICE_ID_VIA_82C586_3 0x3040 -#define PCI_DEVICE_ID_VIA_82C596_3 0x3050 -#define PCI_DEVICE_ID_VIA_82C596B_3 0x3051 -#define PCI_DEVICE_ID_VIA_82C686_4 0x3057 -#define PCI_DEVICE_ID_VIA_82C686_5 0x3058 -#define PCI_DEVICE_ID_VIA_8233_5 0x3059 -#define PCI_DEVICE_ID_VIA_8233_0 0x3074 -#define PCI_DEVICE_ID_VIA_8633_0 0x3091 -#define PCI_DEVICE_ID_VIA_8367_0 0x3099 -#define PCI_DEVICE_ID_VIA_8653_0 0x3101 -#define PCI_DEVICE_ID_VIA_8622 0x3102 -#define PCI_DEVICE_ID_VIA_8235_USB_2 0x3104 -#define PCI_DEVICE_ID_VIA_8233C_0 0x3109 -#define PCI_DEVICE_ID_VIA_8361 0x3112 -#define PCI_DEVICE_ID_VIA_XM266 0x3116 -#define PCI_DEVICE_ID_VIA_612X 0x3119 -#define PCI_DEVICE_ID_VIA_862X_0 0x3123 -#define PCI_DEVICE_ID_VIA_8753_0 0x3128 -#define PCI_DEVICE_ID_VIA_8233A 0x3147 -#define PCI_DEVICE_ID_VIA_8703_51_0 0x3148 -#define PCI_DEVICE_ID_VIA_8237_SATA 0x3149 -#define PCI_DEVICE_ID_VIA_XN266 0x3156 -#define PCI_DEVICE_ID_VIA_6410 0x3164 -#define PCI_DEVICE_ID_VIA_8754C_0 0x3168 -#define PCI_DEVICE_ID_VIA_8235 0x3177 -#define PCI_DEVICE_ID_VIA_8385_0 0x3188 -#define PCI_DEVICE_ID_VIA_8377_0 0x3189 -#define PCI_DEVICE_ID_VIA_8378_0 0x3205 -#define PCI_DEVICE_ID_VIA_8783_0 0x3208 -#define PCI_DEVICE_ID_VIA_8237 0x3227 -#define PCI_DEVICE_ID_VIA_8251 0x3287 -#define PCI_DEVICE_ID_VIA_8261 0x3402 -#define PCI_DEVICE_ID_VIA_8237A 0x3337 -#define PCI_DEVICE_ID_VIA_8237S 0x3372 -#define PCI_DEVICE_ID_VIA_SATA_EIDE 0x5324 -#define PCI_DEVICE_ID_VIA_8231 0x8231 -#define PCI_DEVICE_ID_VIA_8231_4 0x8235 -#define PCI_DEVICE_ID_VIA_8365_1 0x8305 -#define PCI_DEVICE_ID_VIA_CX700 0x8324 -#define PCI_DEVICE_ID_VIA_CX700_IDE 0x0581 -#define PCI_DEVICE_ID_VIA_VX800 0x8353 -#define PCI_DEVICE_ID_VIA_VX855 0x8409 -#define PCI_DEVICE_ID_VIA_8371_1 0x8391 -#define PCI_DEVICE_ID_VIA_82C598_1 0x8598 -#define PCI_DEVICE_ID_VIA_838X_1 0xB188 -#define PCI_DEVICE_ID_VIA_83_87XX_1 0xB198 -#define PCI_DEVICE_ID_VIA_VX855_IDE 0xC409 -#define PCI_DEVICE_ID_VIA_ANON 0xFFFF - -#define PCI_VENDOR_ID_SIEMENS 0x110A -#define PCI_DEVICE_ID_SIEMENS_DSCC4 0x2102 - -#define PCI_VENDOR_ID_VORTEX 0x1119 -#define PCI_DEVICE_ID_VORTEX_GDT60x0 0x0000 -#define PCI_DEVICE_ID_VORTEX_GDT6000B 0x0001 -#define PCI_DEVICE_ID_VORTEX_GDT6x10 0x0002 -#define PCI_DEVICE_ID_VORTEX_GDT6x20 0x0003 -#define PCI_DEVICE_ID_VORTEX_GDT6530 0x0004 -#define PCI_DEVICE_ID_VORTEX_GDT6550 0x0005 -#define PCI_DEVICE_ID_VORTEX_GDT6x17 0x0006 -#define PCI_DEVICE_ID_VORTEX_GDT6x27 0x0007 -#define PCI_DEVICE_ID_VORTEX_GDT6537 0x0008 -#define PCI_DEVICE_ID_VORTEX_GDT6557 0x0009 -#define PCI_DEVICE_ID_VORTEX_GDT6x15 0x000a -#define PCI_DEVICE_ID_VORTEX_GDT6x25 0x000b -#define PCI_DEVICE_ID_VORTEX_GDT6535 0x000c -#define PCI_DEVICE_ID_VORTEX_GDT6555 0x000d -#define PCI_DEVICE_ID_VORTEX_GDT6x17RP 0x0100 -#define PCI_DEVICE_ID_VORTEX_GDT6x27RP 0x0101 -#define PCI_DEVICE_ID_VORTEX_GDT6537RP 0x0102 -#define PCI_DEVICE_ID_VORTEX_GDT6557RP 0x0103 -#define PCI_DEVICE_ID_VORTEX_GDT6x11RP 0x0104 -#define PCI_DEVICE_ID_VORTEX_GDT6x21RP 0x0105 - -#define PCI_VENDOR_ID_EF 0x111a -#define PCI_DEVICE_ID_EF_ATM_FPGA 0x0000 -#define PCI_DEVICE_ID_EF_ATM_ASIC 0x0002 -#define PCI_DEVICE_ID_EF_ATM_LANAI2 0x0003 -#define PCI_DEVICE_ID_EF_ATM_LANAIHB 0x0005 - -#define PCI_VENDOR_ID_IDT 0x111d -#define PCI_DEVICE_ID_IDT_IDT77201 0x0001 - -#define PCI_VENDOR_ID_FORE 0x1127 -#define PCI_DEVICE_ID_FORE_PCA200E 0x0300 - -#define PCI_VENDOR_ID_PHILIPS 0x1131 -#define PCI_DEVICE_ID_PHILIPS_SAA7146 0x7146 -#define PCI_DEVICE_ID_PHILIPS_SAA9730 0x9730 - -#define PCI_VENDOR_ID_EICON 0x1133 -#define PCI_DEVICE_ID_EICON_DIVA20 0xe002 -#define PCI_DEVICE_ID_EICON_DIVA20_U 0xe004 -#define PCI_DEVICE_ID_EICON_DIVA201 0xe005 -#define PCI_DEVICE_ID_EICON_DIVA202 0xe00b -#define PCI_DEVICE_ID_EICON_MAESTRA 0xe010 -#define PCI_DEVICE_ID_EICON_MAESTRAQ 0xe012 -#define PCI_DEVICE_ID_EICON_MAESTRAQ_U 0xe013 -#define PCI_DEVICE_ID_EICON_MAESTRAP 0xe014 - -#define PCI_VENDOR_ID_CISCO 0x1137 - -#define PCI_VENDOR_ID_ZIATECH 0x1138 -#define PCI_DEVICE_ID_ZIATECH_5550_HC 0x5550 - - -#define PCI_VENDOR_ID_SYSKONNECT 0x1148 -#define PCI_DEVICE_ID_SYSKONNECT_TR 0x4200 -#define PCI_DEVICE_ID_SYSKONNECT_GE 0x4300 -#define PCI_DEVICE_ID_SYSKONNECT_YU 0x4320 -#define PCI_DEVICE_ID_SYSKONNECT_9DXX 0x4400 -#define PCI_DEVICE_ID_SYSKONNECT_9MXX 0x4500 - -#define PCI_VENDOR_ID_DIGI 0x114f -#define PCI_DEVICE_ID_DIGI_DF_M_IOM2_E 0x0070 -#define PCI_DEVICE_ID_DIGI_DF_M_E 0x0071 -#define PCI_DEVICE_ID_DIGI_DF_M_IOM2_A 0x0072 -#define PCI_DEVICE_ID_DIGI_DF_M_A 0x0073 -#define PCI_DEVICE_ID_DIGI_NEO_8 0x00B1 -#define PCI_DEVICE_ID_NEO_2DB9 0x00C8 -#define PCI_DEVICE_ID_NEO_2DB9PRI 0x00C9 -#define PCI_DEVICE_ID_NEO_2RJ45 0x00CA -#define PCI_DEVICE_ID_NEO_2RJ45PRI 0x00CB -#define PCIE_DEVICE_ID_NEO_4_IBM 0x00F4 - -#define PCI_VENDOR_ID_XIRCOM 0x115d -#define PCI_DEVICE_ID_XIRCOM_RBM56G 0x0101 -#define PCI_DEVICE_ID_XIRCOM_X3201_MDM 0x0103 - -#define PCI_VENDOR_ID_SERVERWORKS 0x1166 -#define PCI_DEVICE_ID_SERVERWORKS_HE 0x0008 -#define PCI_DEVICE_ID_SERVERWORKS_LE 0x0009 -#define PCI_DEVICE_ID_SERVERWORKS_GCNB_LE 0x0017 -#define PCI_DEVICE_ID_SERVERWORKS_HT1000_PXB 0x0036 -#define PCI_DEVICE_ID_SERVERWORKS_EPB 0x0103 -#define PCI_DEVICE_ID_SERVERWORKS_HT2000_PCIE 0x0132 -#define PCI_DEVICE_ID_SERVERWORKS_OSB4 0x0200 -#define PCI_DEVICE_ID_SERVERWORKS_CSB5 0x0201 -#define PCI_DEVICE_ID_SERVERWORKS_CSB6 0x0203 -#define PCI_DEVICE_ID_SERVERWORKS_HT1000SB 0x0205 -#define PCI_DEVICE_ID_SERVERWORKS_OSB4IDE 0x0211 -#define PCI_DEVICE_ID_SERVERWORKS_CSB5IDE 0x0212 -#define PCI_DEVICE_ID_SERVERWORKS_CSB6IDE 0x0213 -#define PCI_DEVICE_ID_SERVERWORKS_HT1000IDE 0x0214 -#define PCI_DEVICE_ID_SERVERWORKS_CSB6IDE2 0x0217 -#define PCI_DEVICE_ID_SERVERWORKS_CSB6LPC 0x0227 -#define PCI_DEVICE_ID_SERVERWORKS_HT1100LD 0x0408 - -#define PCI_VENDOR_ID_SBE 0x1176 -#define PCI_DEVICE_ID_SBE_WANXL100 0x0301 -#define PCI_DEVICE_ID_SBE_WANXL200 0x0302 -#define PCI_DEVICE_ID_SBE_WANXL400 0x0104 -#define PCI_SUBDEVICE_ID_SBE_T3E3 0x0009 -#define PCI_SUBDEVICE_ID_SBE_2T3E3_P0 0x0901 -#define PCI_SUBDEVICE_ID_SBE_2T3E3_P1 0x0902 - -#define PCI_VENDOR_ID_TOSHIBA 0x1179 -#define PCI_DEVICE_ID_TOSHIBA_PICCOLO_1 0x0101 -#define PCI_DEVICE_ID_TOSHIBA_PICCOLO_2 0x0102 -#define PCI_DEVICE_ID_TOSHIBA_PICCOLO_3 0x0103 -#define PCI_DEVICE_ID_TOSHIBA_PICCOLO_5 0x0105 -#define PCI_DEVICE_ID_TOSHIBA_TOPIC95 0x060a -#define PCI_DEVICE_ID_TOSHIBA_TOPIC97 0x060f -#define PCI_DEVICE_ID_TOSHIBA_TOPIC100 0x0617 - -#define PCI_VENDOR_ID_TOSHIBA_2 0x102f -#define PCI_DEVICE_ID_TOSHIBA_TC35815CF 0x0030 -#define PCI_DEVICE_ID_TOSHIBA_TC35815_NWU 0x0031 -#define PCI_DEVICE_ID_TOSHIBA_TC35815_TX4939 0x0032 -#define PCI_DEVICE_ID_TOSHIBA_TC86C001_IDE 0x0105 -#define PCI_DEVICE_ID_TOSHIBA_TC86C001_MISC 0x0108 -#define PCI_DEVICE_ID_TOSHIBA_SPIDER_NET 0x01b3 - -#define PCI_VENDOR_ID_ATTO 0x117c - -#define PCI_VENDOR_ID_RICOH 0x1180 -#define PCI_DEVICE_ID_RICOH_RL5C465 0x0465 -#define PCI_DEVICE_ID_RICOH_RL5C466 0x0466 -#define PCI_DEVICE_ID_RICOH_RL5C475 0x0475 -#define PCI_DEVICE_ID_RICOH_RL5C476 0x0476 -#define PCI_DEVICE_ID_RICOH_RL5C478 0x0478 -#define PCI_DEVICE_ID_RICOH_R5C822 0x0822 -#define PCI_DEVICE_ID_RICOH_R5CE823 0xe823 -#define PCI_DEVICE_ID_RICOH_R5C832 0x0832 -#define PCI_DEVICE_ID_RICOH_R5C843 0x0843 - -#define PCI_VENDOR_ID_DLINK 0x1186 -#define PCI_DEVICE_ID_DLINK_DGE510T 0x4c00 - -#define PCI_VENDOR_ID_ARTOP 0x1191 -#define PCI_DEVICE_ID_ARTOP_ATP850UF 0x0005 -#define PCI_DEVICE_ID_ARTOP_ATP860 0x0006 -#define PCI_DEVICE_ID_ARTOP_ATP860R 0x0007 -#define PCI_DEVICE_ID_ARTOP_ATP865 0x0008 -#define PCI_DEVICE_ID_ARTOP_ATP865R 0x0009 -#define PCI_DEVICE_ID_ARTOP_ATP867A 0x000A -#define PCI_DEVICE_ID_ARTOP_ATP867B 0x000B -#define PCI_DEVICE_ID_ARTOP_AEC7610 0x8002 -#define PCI_DEVICE_ID_ARTOP_AEC7612UW 0x8010 -#define PCI_DEVICE_ID_ARTOP_AEC7612U 0x8020 -#define PCI_DEVICE_ID_ARTOP_AEC7612S 0x8030 -#define PCI_DEVICE_ID_ARTOP_AEC7612D 0x8040 -#define PCI_DEVICE_ID_ARTOP_AEC7612SUW 0x8050 -#define PCI_DEVICE_ID_ARTOP_8060 0x8060 - -#define PCI_VENDOR_ID_ZEITNET 0x1193 -#define PCI_DEVICE_ID_ZEITNET_1221 0x0001 -#define PCI_DEVICE_ID_ZEITNET_1225 0x0002 - -#define PCI_VENDOR_ID_FUJITSU_ME 0x119e -#define PCI_DEVICE_ID_FUJITSU_FS155 0x0001 -#define PCI_DEVICE_ID_FUJITSU_FS50 0x0003 - -#define PCI_SUBVENDOR_ID_KEYSPAN 0x11a9 -#define PCI_SUBDEVICE_ID_KEYSPAN_SX2 0x5334 - -#define PCI_VENDOR_ID_MARVELL 0x11ab -#define PCI_DEVICE_ID_MARVELL_GT64111 0x4146 -#define PCI_DEVICE_ID_MARVELL_GT64260 0x6430 -#define PCI_DEVICE_ID_MARVELL_MV64360 0x6460 -#define PCI_DEVICE_ID_MARVELL_MV64460 0x6480 -#define PCI_DEVICE_ID_MARVELL_88ALP01_NAND 0x4100 -#define PCI_DEVICE_ID_MARVELL_88ALP01_SD 0x4101 -#define PCI_DEVICE_ID_MARVELL_88ALP01_CCIC 0x4102 - -#define PCI_VENDOR_ID_V3 0x11b0 -#define PCI_DEVICE_ID_V3_V960 0x0001 -#define PCI_DEVICE_ID_V3_V351 0x0002 - -#define PCI_VENDOR_ID_ATT 0x11c1 -#define PCI_DEVICE_ID_ATT_VENUS_MODEM 0x480 - -#define PCI_VENDOR_ID_SPECIALIX 0x11cb -#define PCI_DEVICE_ID_SPECIALIX_IO8 0x2000 -#define PCI_DEVICE_ID_SPECIALIX_RIO 0x8000 -#define PCI_SUBDEVICE_ID_SPECIALIX_SPEED4 0xa004 - -#define PCI_VENDOR_ID_ANALOG_DEVICES 0x11d4 -#define PCI_DEVICE_ID_AD1889JS 0x1889 - -#define PCI_DEVICE_ID_SEGA_BBA 0x1234 - -#define PCI_VENDOR_ID_ZORAN 0x11de -#define PCI_DEVICE_ID_ZORAN_36057 0x6057 -#define PCI_DEVICE_ID_ZORAN_36120 0x6120 - -#define PCI_VENDOR_ID_COMPEX 0x11f6 -#define PCI_DEVICE_ID_COMPEX_ENET100VG4 0x0112 - -#define PCI_VENDOR_ID_PMC_Sierra 0x11f8 - -#define PCI_VENDOR_ID_RP 0x11fe -#define PCI_DEVICE_ID_RP32INTF 0x0001 -#define PCI_DEVICE_ID_RP8INTF 0x0002 -#define PCI_DEVICE_ID_RP16INTF 0x0003 -#define PCI_DEVICE_ID_RP4QUAD 0x0004 -#define PCI_DEVICE_ID_RP8OCTA 0x0005 -#define PCI_DEVICE_ID_RP8J 0x0006 -#define PCI_DEVICE_ID_RP4J 0x0007 -#define PCI_DEVICE_ID_RP8SNI 0x0008 -#define PCI_DEVICE_ID_RP16SNI 0x0009 -#define PCI_DEVICE_ID_RPP4 0x000A -#define PCI_DEVICE_ID_RPP8 0x000B -#define PCI_DEVICE_ID_RP4M 0x000D -#define PCI_DEVICE_ID_RP2_232 0x000E -#define PCI_DEVICE_ID_RP2_422 0x000F -#define PCI_DEVICE_ID_URP32INTF 0x0801 -#define PCI_DEVICE_ID_URP8INTF 0x0802 -#define PCI_DEVICE_ID_URP16INTF 0x0803 -#define PCI_DEVICE_ID_URP8OCTA 0x0805 -#define PCI_DEVICE_ID_UPCI_RM3_8PORT 0x080C -#define PCI_DEVICE_ID_UPCI_RM3_4PORT 0x080D -#define PCI_DEVICE_ID_CRP16INTF 0x0903 - -#define PCI_VENDOR_ID_CYCLADES 0x120e -#define PCI_DEVICE_ID_CYCLOM_Y_Lo 0x0100 -#define PCI_DEVICE_ID_CYCLOM_Y_Hi 0x0101 -#define PCI_DEVICE_ID_CYCLOM_4Y_Lo 0x0102 -#define PCI_DEVICE_ID_CYCLOM_4Y_Hi 0x0103 -#define PCI_DEVICE_ID_CYCLOM_8Y_Lo 0x0104 -#define PCI_DEVICE_ID_CYCLOM_8Y_Hi 0x0105 -#define PCI_DEVICE_ID_CYCLOM_Z_Lo 0x0200 -#define PCI_DEVICE_ID_CYCLOM_Z_Hi 0x0201 -#define PCI_DEVICE_ID_PC300_RX_2 0x0300 -#define PCI_DEVICE_ID_PC300_RX_1 0x0301 -#define PCI_DEVICE_ID_PC300_TE_2 0x0310 -#define PCI_DEVICE_ID_PC300_TE_1 0x0311 -#define PCI_DEVICE_ID_PC300_TE_M_2 0x0320 -#define PCI_DEVICE_ID_PC300_TE_M_1 0x0321 - -#define PCI_VENDOR_ID_ESSENTIAL 0x120f -#define PCI_DEVICE_ID_ESSENTIAL_ROADRUNNER 0x0001 - -#define PCI_VENDOR_ID_O2 0x1217 -#define PCI_DEVICE_ID_O2_6729 0x6729 -#define PCI_DEVICE_ID_O2_6730 0x673a -#define PCI_DEVICE_ID_O2_6832 0x6832 -#define PCI_DEVICE_ID_O2_6836 0x6836 -#define PCI_DEVICE_ID_O2_6812 0x6872 -#define PCI_DEVICE_ID_O2_6933 0x6933 -#define PCI_DEVICE_ID_O2_8120 0x8120 -#define PCI_DEVICE_ID_O2_8220 0x8220 -#define PCI_DEVICE_ID_O2_8221 0x8221 -#define PCI_DEVICE_ID_O2_8320 0x8320 -#define PCI_DEVICE_ID_O2_8321 0x8321 - -#define PCI_VENDOR_ID_3DFX 0x121a -#define PCI_DEVICE_ID_3DFX_VOODOO 0x0001 -#define PCI_DEVICE_ID_3DFX_VOODOO2 0x0002 -#define PCI_DEVICE_ID_3DFX_BANSHEE 0x0003 -#define PCI_DEVICE_ID_3DFX_VOODOO3 0x0005 -#define PCI_DEVICE_ID_3DFX_VOODOO5 0x0009 - -#define PCI_VENDOR_ID_AVM 0x1244 -#define PCI_DEVICE_ID_AVM_B1 0x0700 -#define PCI_DEVICE_ID_AVM_C4 0x0800 -#define PCI_DEVICE_ID_AVM_A1 0x0a00 -#define PCI_DEVICE_ID_AVM_A1_V2 0x0e00 -#define PCI_DEVICE_ID_AVM_C2 0x1100 -#define PCI_DEVICE_ID_AVM_T1 0x1200 - -#define PCI_VENDOR_ID_STALLION 0x124d - -/* Allied Telesyn */ -#define PCI_VENDOR_ID_AT 0x1259 -#define PCI_SUBDEVICE_ID_AT_2700FX 0x2701 -#define PCI_SUBDEVICE_ID_AT_2701FX 0x2703 - -#define PCI_VENDOR_ID_ESS 0x125d -#define PCI_DEVICE_ID_ESS_ESS1968 0x1968 -#define PCI_DEVICE_ID_ESS_ESS1978 0x1978 -#define PCI_DEVICE_ID_ESS_ALLEGRO_1 0x1988 -#define PCI_DEVICE_ID_ESS_ALLEGRO 0x1989 -#define PCI_DEVICE_ID_ESS_CANYON3D_2LE 0x1990 -#define PCI_DEVICE_ID_ESS_CANYON3D_2 0x1992 -#define PCI_DEVICE_ID_ESS_MAESTRO3 0x1998 -#define PCI_DEVICE_ID_ESS_MAESTRO3_1 0x1999 -#define PCI_DEVICE_ID_ESS_MAESTRO3_HW 0x199a -#define PCI_DEVICE_ID_ESS_MAESTRO3_2 0x199b - -#define PCI_VENDOR_ID_SATSAGEM 0x1267 -#define PCI_DEVICE_ID_SATSAGEM_NICCY 0x1016 - -#define PCI_VENDOR_ID_ENSONIQ 0x1274 -#define PCI_DEVICE_ID_ENSONIQ_CT5880 0x5880 -#define PCI_DEVICE_ID_ENSONIQ_ES1370 0x5000 -#define PCI_DEVICE_ID_ENSONIQ_ES1371 0x1371 - -#define PCI_VENDOR_ID_TRANSMETA 0x1279 -#define PCI_DEVICE_ID_EFFICEON 0x0060 - -#define PCI_VENDOR_ID_ROCKWELL 0x127A - -#define PCI_VENDOR_ID_ITE 0x1283 -#define PCI_DEVICE_ID_ITE_8172 0x8172 -#define PCI_DEVICE_ID_ITE_8211 0x8211 -#define PCI_DEVICE_ID_ITE_8212 0x8212 -#define PCI_DEVICE_ID_ITE_8213 0x8213 -#define PCI_DEVICE_ID_ITE_8152 0x8152 -#define PCI_DEVICE_ID_ITE_8872 0x8872 -#define PCI_DEVICE_ID_ITE_IT8330G_0 0xe886 - -/* formerly Platform Tech */ -#define PCI_DEVICE_ID_ESS_ESS0100 0x0100 - -#define PCI_VENDOR_ID_ALTEON 0x12ae - -#define PCI_SUBVENDOR_ID_CONNECT_TECH 0x12c4 -#define PCI_SUBDEVICE_ID_CONNECT_TECH_BH8_232 0x0001 -#define PCI_SUBDEVICE_ID_CONNECT_TECH_BH4_232 0x0002 -#define PCI_SUBDEVICE_ID_CONNECT_TECH_BH2_232 0x0003 -#define PCI_SUBDEVICE_ID_CONNECT_TECH_BH8_485 0x0004 -#define PCI_SUBDEVICE_ID_CONNECT_TECH_BH8_485_4_4 0x0005 -#define PCI_SUBDEVICE_ID_CONNECT_TECH_BH4_485 0x0006 -#define PCI_SUBDEVICE_ID_CONNECT_TECH_BH4_485_2_2 0x0007 -#define PCI_SUBDEVICE_ID_CONNECT_TECH_BH2_485 0x0008 -#define PCI_SUBDEVICE_ID_CONNECT_TECH_BH8_485_2_6 0x0009 -#define PCI_SUBDEVICE_ID_CONNECT_TECH_BH081101V1 0x000A -#define PCI_SUBDEVICE_ID_CONNECT_TECH_BH041101V1 0x000B -#define PCI_SUBDEVICE_ID_CONNECT_TECH_BH2_20MHZ 0x000C -#define PCI_SUBDEVICE_ID_CONNECT_TECH_BH2_PTM 0x000D -#define PCI_SUBDEVICE_ID_CONNECT_TECH_NT960PCI 0x0100 -#define PCI_SUBDEVICE_ID_CONNECT_TECH_TITAN_2 0x0201 -#define PCI_SUBDEVICE_ID_CONNECT_TECH_TITAN_4 0x0202 -#define PCI_SUBDEVICE_ID_CONNECT_TECH_PCI_UART_2_232 0x0300 -#define PCI_SUBDEVICE_ID_CONNECT_TECH_PCI_UART_4_232 0x0301 -#define PCI_SUBDEVICE_ID_CONNECT_TECH_PCI_UART_8_232 0x0302 -#define PCI_SUBDEVICE_ID_CONNECT_TECH_PCI_UART_1_1 0x0310 -#define PCI_SUBDEVICE_ID_CONNECT_TECH_PCI_UART_2_2 0x0311 -#define PCI_SUBDEVICE_ID_CONNECT_TECH_PCI_UART_4_4 0x0312 -#define PCI_SUBDEVICE_ID_CONNECT_TECH_PCI_UART_2 0x0320 -#define PCI_SUBDEVICE_ID_CONNECT_TECH_PCI_UART_4 0x0321 -#define PCI_SUBDEVICE_ID_CONNECT_TECH_PCI_UART_8 0x0322 -#define PCI_SUBDEVICE_ID_CONNECT_TECH_PCI_UART_2_485 0x0330 -#define PCI_SUBDEVICE_ID_CONNECT_TECH_PCI_UART_4_485 0x0331 -#define PCI_SUBDEVICE_ID_CONNECT_TECH_PCI_UART_8_485 0x0332 - -#define PCI_VENDOR_ID_NVIDIA_SGS 0x12d2 -#define PCI_DEVICE_ID_NVIDIA_SGS_RIVA128 0x0018 - -#define PCI_SUBVENDOR_ID_CHASE_PCIFAST 0x12E0 -#define PCI_SUBDEVICE_ID_CHASE_PCIFAST4 0x0031 -#define PCI_SUBDEVICE_ID_CHASE_PCIFAST8 0x0021 -#define PCI_SUBDEVICE_ID_CHASE_PCIFAST16 0x0011 -#define PCI_SUBDEVICE_ID_CHASE_PCIFAST16FMC 0x0041 -#define PCI_SUBVENDOR_ID_CHASE_PCIRAS 0x124D -#define PCI_SUBDEVICE_ID_CHASE_PCIRAS4 0xF001 -#define PCI_SUBDEVICE_ID_CHASE_PCIRAS8 0xF010 - -#define PCI_VENDOR_ID_AUREAL 0x12eb -#define PCI_DEVICE_ID_AUREAL_VORTEX_1 0x0001 -#define PCI_DEVICE_ID_AUREAL_VORTEX_2 0x0002 -#define PCI_DEVICE_ID_AUREAL_ADVANTAGE 0x0003 - -#define PCI_VENDOR_ID_ELECTRONICDESIGNGMBH 0x12f8 -#define PCI_DEVICE_ID_LML_33R10 0x8a02 - -#define PCI_VENDOR_ID_ESDGMBH 0x12fe -#define PCI_DEVICE_ID_ESDGMBH_CPCIASIO4 0x0111 - -#define PCI_VENDOR_ID_SIIG 0x131f -#define PCI_SUBVENDOR_ID_SIIG 0x131f -#define PCI_DEVICE_ID_SIIG_1S_10x_550 0x1000 -#define PCI_DEVICE_ID_SIIG_1S_10x_650 0x1001 -#define PCI_DEVICE_ID_SIIG_1S_10x_850 0x1002 -#define PCI_DEVICE_ID_SIIG_1S1P_10x_550 0x1010 -#define PCI_DEVICE_ID_SIIG_1S1P_10x_650 0x1011 -#define PCI_DEVICE_ID_SIIG_1S1P_10x_850 0x1012 -#define PCI_DEVICE_ID_SIIG_1P_10x 0x1020 -#define PCI_DEVICE_ID_SIIG_2P_10x 0x1021 -#define PCI_DEVICE_ID_SIIG_2S_10x_550 0x1030 -#define PCI_DEVICE_ID_SIIG_2S_10x_650 0x1031 -#define PCI_DEVICE_ID_SIIG_2S_10x_850 0x1032 -#define PCI_DEVICE_ID_SIIG_2S1P_10x_550 0x1034 -#define PCI_DEVICE_ID_SIIG_2S1P_10x_650 0x1035 -#define PCI_DEVICE_ID_SIIG_2S1P_10x_850 0x1036 -#define PCI_DEVICE_ID_SIIG_4S_10x_550 0x1050 -#define PCI_DEVICE_ID_SIIG_4S_10x_650 0x1051 -#define PCI_DEVICE_ID_SIIG_4S_10x_850 0x1052 -#define PCI_DEVICE_ID_SIIG_1S_20x_550 0x2000 -#define PCI_DEVICE_ID_SIIG_1S_20x_650 0x2001 -#define PCI_DEVICE_ID_SIIG_1S_20x_850 0x2002 -#define PCI_DEVICE_ID_SIIG_1P_20x 0x2020 -#define PCI_DEVICE_ID_SIIG_2P_20x 0x2021 -#define PCI_DEVICE_ID_SIIG_2S_20x_550 0x2030 -#define PCI_DEVICE_ID_SIIG_2S_20x_650 0x2031 -#define PCI_DEVICE_ID_SIIG_2S_20x_850 0x2032 -#define PCI_DEVICE_ID_SIIG_2P1S_20x_550 0x2040 -#define PCI_DEVICE_ID_SIIG_2P1S_20x_650 0x2041 -#define PCI_DEVICE_ID_SIIG_2P1S_20x_850 0x2042 -#define PCI_DEVICE_ID_SIIG_1S1P_20x_550 0x2010 -#define PCI_DEVICE_ID_SIIG_1S1P_20x_650 0x2011 -#define PCI_DEVICE_ID_SIIG_1S1P_20x_850 0x2012 -#define PCI_DEVICE_ID_SIIG_4S_20x_550 0x2050 -#define PCI_DEVICE_ID_SIIG_4S_20x_650 0x2051 -#define PCI_DEVICE_ID_SIIG_4S_20x_850 0x2052 -#define PCI_DEVICE_ID_SIIG_2S1P_20x_550 0x2060 -#define PCI_DEVICE_ID_SIIG_2S1P_20x_650 0x2061 -#define PCI_DEVICE_ID_SIIG_2S1P_20x_850 0x2062 -#define PCI_DEVICE_ID_SIIG_8S_20x_550 0x2080 -#define PCI_DEVICE_ID_SIIG_8S_20x_650 0x2081 -#define PCI_DEVICE_ID_SIIG_8S_20x_850 0x2082 -#define PCI_SUBDEVICE_ID_SIIG_QUARTET_SERIAL 0x2050 -#define PCI_SUBDEVICE_ID_SIIG_DUAL_SERIAL 0x2530 - -#define PCI_VENDOR_ID_RADISYS 0x1331 - -#define PCI_VENDOR_ID_MICRO_MEMORY 0x1332 -#define PCI_DEVICE_ID_MICRO_MEMORY_5415CN 0x5415 -#define PCI_DEVICE_ID_MICRO_MEMORY_5425CN 0x5425 -#define PCI_DEVICE_ID_MICRO_MEMORY_6155 0x6155 - -#define PCI_VENDOR_ID_DOMEX 0x134a -#define PCI_DEVICE_ID_DOMEX_DMX3191D 0x0001 - -#define PCI_VENDOR_ID_INTASHIELD 0x135a -#define PCI_DEVICE_ID_INTASHIELD_IS200 0x0d80 -#define PCI_DEVICE_ID_INTASHIELD_IS400 0x0dc0 - -#define PCI_VENDOR_ID_QUATECH 0x135C -#define PCI_DEVICE_ID_QUATECH_QSC100 0x0010 -#define PCI_DEVICE_ID_QUATECH_DSC100 0x0020 -#define PCI_DEVICE_ID_QUATECH_ESC100D 0x0050 -#define PCI_DEVICE_ID_QUATECH_ESC100M 0x0060 -#define PCI_DEVICE_ID_QUATECH_SPPXP_100 0x0278 - -#define PCI_VENDOR_ID_SEALEVEL 0x135e -#define PCI_DEVICE_ID_SEALEVEL_U530 0x7101 -#define PCI_DEVICE_ID_SEALEVEL_UCOMM2 0x7201 -#define PCI_DEVICE_ID_SEALEVEL_UCOMM422 0x7402 -#define PCI_DEVICE_ID_SEALEVEL_UCOMM232 0x7202 -#define PCI_DEVICE_ID_SEALEVEL_COMM4 0x7401 -#define PCI_DEVICE_ID_SEALEVEL_COMM8 0x7801 -#define PCI_DEVICE_ID_SEALEVEL_7803 0x7803 -#define PCI_DEVICE_ID_SEALEVEL_UCOMM8 0x7804 - -#define PCI_VENDOR_ID_HYPERCOPE 0x1365 -#define PCI_DEVICE_ID_HYPERCOPE_PLX 0x9050 -#define PCI_SUBDEVICE_ID_HYPERCOPE_OLD_ERGO 0x0104 -#define PCI_SUBDEVICE_ID_HYPERCOPE_ERGO 0x0106 -#define PCI_SUBDEVICE_ID_HYPERCOPE_METRO 0x0107 -#define PCI_SUBDEVICE_ID_HYPERCOPE_CHAMP2 0x0108 - -#define PCI_VENDOR_ID_DIGIGRAM 0x1369 -#define PCI_SUBDEVICE_ID_DIGIGRAM_LX6464ES_SERIAL_SUBSYSTEM 0xc001 -#define PCI_SUBDEVICE_ID_DIGIGRAM_LX6464ES_CAE_SERIAL_SUBSYSTEM 0xc002 - -#define PCI_VENDOR_ID_KAWASAKI 0x136b -#define PCI_DEVICE_ID_MCHIP_KL5A72002 0xff01 - -#define PCI_VENDOR_ID_CNET 0x1371 -#define PCI_DEVICE_ID_CNET_GIGACARD 0x434e - -#define PCI_VENDOR_ID_LMC 0x1376 -#define PCI_DEVICE_ID_LMC_HSSI 0x0003 -#define PCI_DEVICE_ID_LMC_DS3 0x0004 -#define PCI_DEVICE_ID_LMC_SSI 0x0005 -#define PCI_DEVICE_ID_LMC_T1 0x0006 - -#define PCI_VENDOR_ID_NETGEAR 0x1385 -#define PCI_DEVICE_ID_NETGEAR_GA620 0x620a - -#define PCI_VENDOR_ID_APPLICOM 0x1389 -#define PCI_DEVICE_ID_APPLICOM_PCIGENERIC 0x0001 -#define PCI_DEVICE_ID_APPLICOM_PCI2000IBS_CAN 0x0002 -#define PCI_DEVICE_ID_APPLICOM_PCI2000PFB 0x0003 - -#define PCI_VENDOR_ID_MOXA 0x1393 -#define PCI_DEVICE_ID_MOXA_RC7000 0x0001 -#define PCI_DEVICE_ID_MOXA_CP102 0x1020 -#define PCI_DEVICE_ID_MOXA_CP102UL 0x1021 -#define PCI_DEVICE_ID_MOXA_CP102U 0x1022 -#define PCI_DEVICE_ID_MOXA_C104 0x1040 -#define PCI_DEVICE_ID_MOXA_CP104U 0x1041 -#define PCI_DEVICE_ID_MOXA_CP104JU 0x1042 -#define PCI_DEVICE_ID_MOXA_CP104EL 0x1043 -#define PCI_DEVICE_ID_MOXA_CT114 0x1140 -#define PCI_DEVICE_ID_MOXA_CP114 0x1141 -#define PCI_DEVICE_ID_MOXA_CP118U 0x1180 -#define PCI_DEVICE_ID_MOXA_CP118EL 0x1181 -#define PCI_DEVICE_ID_MOXA_CP132 0x1320 -#define PCI_DEVICE_ID_MOXA_CP132U 0x1321 -#define PCI_DEVICE_ID_MOXA_CP134U 0x1340 -#define PCI_DEVICE_ID_MOXA_C168 0x1680 -#define PCI_DEVICE_ID_MOXA_CP168U 0x1681 -#define PCI_DEVICE_ID_MOXA_CP168EL 0x1682 -#define PCI_DEVICE_ID_MOXA_CP204J 0x2040 -#define PCI_DEVICE_ID_MOXA_C218 0x2180 -#define PCI_DEVICE_ID_MOXA_C320 0x3200 - -#define PCI_VENDOR_ID_CCD 0x1397 -#define PCI_DEVICE_ID_CCD_HFC4S 0x08B4 -#define PCI_SUBDEVICE_ID_CCD_PMX2S 0x1234 -#define PCI_DEVICE_ID_CCD_HFC8S 0x16B8 -#define PCI_DEVICE_ID_CCD_2BD0 0x2bd0 -#define PCI_DEVICE_ID_CCD_HFCE1 0x30B1 -#define PCI_SUBDEVICE_ID_CCD_SPD4S 0x3136 -#define PCI_SUBDEVICE_ID_CCD_SPDE1 0x3137 -#define PCI_DEVICE_ID_CCD_B000 0xb000 -#define PCI_DEVICE_ID_CCD_B006 0xb006 -#define PCI_DEVICE_ID_CCD_B007 0xb007 -#define PCI_DEVICE_ID_CCD_B008 0xb008 -#define PCI_DEVICE_ID_CCD_B009 0xb009 -#define PCI_DEVICE_ID_CCD_B00A 0xb00a -#define PCI_DEVICE_ID_CCD_B00B 0xb00b -#define PCI_DEVICE_ID_CCD_B00C 0xb00c -#define PCI_DEVICE_ID_CCD_B100 0xb100 -#define PCI_SUBDEVICE_ID_CCD_IOB4ST 0xB520 -#define PCI_SUBDEVICE_ID_CCD_IOB8STR 0xB521 -#define PCI_SUBDEVICE_ID_CCD_IOB8ST 0xB522 -#define PCI_SUBDEVICE_ID_CCD_IOB1E1 0xB523 -#define PCI_SUBDEVICE_ID_CCD_SWYX4S 0xB540 -#define PCI_SUBDEVICE_ID_CCD_JH4S20 0xB550 -#define PCI_SUBDEVICE_ID_CCD_IOB8ST_1 0xB552 -#define PCI_SUBDEVICE_ID_CCD_JHSE1 0xB553 -#define PCI_SUBDEVICE_ID_CCD_JH8S 0xB55B -#define PCI_SUBDEVICE_ID_CCD_BN4S 0xB560 -#define PCI_SUBDEVICE_ID_CCD_BN8S 0xB562 -#define PCI_SUBDEVICE_ID_CCD_BNE1 0xB563 -#define PCI_SUBDEVICE_ID_CCD_BNE1D 0xB564 -#define PCI_SUBDEVICE_ID_CCD_BNE1DP 0xB565 -#define PCI_SUBDEVICE_ID_CCD_BN2S 0xB566 -#define PCI_SUBDEVICE_ID_CCD_BN1SM 0xB567 -#define PCI_SUBDEVICE_ID_CCD_BN4SM 0xB568 -#define PCI_SUBDEVICE_ID_CCD_BN2SM 0xB569 -#define PCI_SUBDEVICE_ID_CCD_BNE1M 0xB56A -#define PCI_SUBDEVICE_ID_CCD_BN8SP 0xB56B -#define PCI_SUBDEVICE_ID_CCD_HFC4S 0xB620 -#define PCI_SUBDEVICE_ID_CCD_HFC8S 0xB622 -#define PCI_DEVICE_ID_CCD_B700 0xb700 -#define PCI_DEVICE_ID_CCD_B701 0xb701 -#define PCI_SUBDEVICE_ID_CCD_HFCE1 0xC523 -#define PCI_SUBDEVICE_ID_CCD_OV2S 0xE884 -#define PCI_SUBDEVICE_ID_CCD_OV4S 0xE888 -#define PCI_SUBDEVICE_ID_CCD_OV8S 0xE998 - -#define PCI_VENDOR_ID_EXAR 0x13a8 -#define PCI_DEVICE_ID_EXAR_XR17C152 0x0152 -#define PCI_DEVICE_ID_EXAR_XR17C154 0x0154 -#define PCI_DEVICE_ID_EXAR_XR17C158 0x0158 - -#define PCI_VENDOR_ID_MICROGATE 0x13c0 -#define PCI_DEVICE_ID_MICROGATE_USC 0x0010 -#define PCI_DEVICE_ID_MICROGATE_SCA 0x0030 - -#define PCI_VENDOR_ID_3WARE 0x13C1 -#define PCI_DEVICE_ID_3WARE_1000 0x1000 -#define PCI_DEVICE_ID_3WARE_7000 0x1001 -#define PCI_DEVICE_ID_3WARE_9000 0x1002 - -#define PCI_VENDOR_ID_IOMEGA 0x13ca -#define PCI_DEVICE_ID_IOMEGA_BUZ 0x4231 - -#define PCI_VENDOR_ID_ABOCOM 0x13D1 -#define PCI_DEVICE_ID_ABOCOM_2BD1 0x2BD1 - -#define PCI_VENDOR_ID_SUNDANCE 0x13f0 - -#define PCI_VENDOR_ID_CMEDIA 0x13f6 -#define PCI_DEVICE_ID_CMEDIA_CM8338A 0x0100 -#define PCI_DEVICE_ID_CMEDIA_CM8338B 0x0101 -#define PCI_DEVICE_ID_CMEDIA_CM8738 0x0111 -#define PCI_DEVICE_ID_CMEDIA_CM8738B 0x0112 - -#define PCI_VENDOR_ID_LAVA 0x1407 -#define PCI_DEVICE_ID_LAVA_DSERIAL 0x0100 /* 2x 16550 */ -#define PCI_DEVICE_ID_LAVA_QUATRO_A 0x0101 /* 2x 16550, half of 4 port */ -#define PCI_DEVICE_ID_LAVA_QUATRO_B 0x0102 /* 2x 16550, half of 4 port */ -#define PCI_DEVICE_ID_LAVA_QUATTRO_A 0x0120 /* 2x 16550A, half of 4 port */ -#define PCI_DEVICE_ID_LAVA_QUATTRO_B 0x0121 /* 2x 16550A, half of 4 port */ -#define PCI_DEVICE_ID_LAVA_OCTO_A 0x0180 /* 4x 16550A, half of 8 port */ -#define PCI_DEVICE_ID_LAVA_OCTO_B 0x0181 /* 4x 16550A, half of 8 port */ -#define PCI_DEVICE_ID_LAVA_PORT_PLUS 0x0200 /* 2x 16650 */ -#define PCI_DEVICE_ID_LAVA_QUAD_A 0x0201 /* 2x 16650, half of 4 port */ -#define PCI_DEVICE_ID_LAVA_QUAD_B 0x0202 /* 2x 16650, half of 4 port */ -#define PCI_DEVICE_ID_LAVA_SSERIAL 0x0500 /* 1x 16550 */ -#define PCI_DEVICE_ID_LAVA_PORT_650 0x0600 /* 1x 16650 */ -#define PCI_DEVICE_ID_LAVA_PARALLEL 0x8000 -#define PCI_DEVICE_ID_LAVA_DUAL_PAR_A 0x8002 /* The Lava Dual Parallel is */ -#define PCI_DEVICE_ID_LAVA_DUAL_PAR_B 0x8003 /* two PCI devices on a card */ -#define PCI_DEVICE_ID_LAVA_BOCA_IOPPAR 0x8800 - -#define PCI_VENDOR_ID_TIMEDIA 0x1409 -#define PCI_DEVICE_ID_TIMEDIA_1889 0x7168 - -#define PCI_VENDOR_ID_ICE 0x1412 -#define PCI_DEVICE_ID_ICE_1712 0x1712 -#define PCI_DEVICE_ID_VT1724 0x1724 - -#define PCI_VENDOR_ID_OXSEMI 0x1415 -#define PCI_DEVICE_ID_OXSEMI_12PCI840 0x8403 -#define PCI_DEVICE_ID_OXSEMI_PCIe840 0xC000 -#define PCI_DEVICE_ID_OXSEMI_PCIe840_G 0xC004 -#define PCI_DEVICE_ID_OXSEMI_PCIe952_0 0xC100 -#define PCI_DEVICE_ID_OXSEMI_PCIe952_0_G 0xC104 -#define PCI_DEVICE_ID_OXSEMI_PCIe952_1 0xC110 -#define PCI_DEVICE_ID_OXSEMI_PCIe952_1_G 0xC114 -#define PCI_DEVICE_ID_OXSEMI_PCIe952_1_U 0xC118 -#define PCI_DEVICE_ID_OXSEMI_PCIe952_1_GU 0xC11C -#define PCI_DEVICE_ID_OXSEMI_16PCI954 0x9501 -#define PCI_DEVICE_ID_OXSEMI_C950 0x950B -#define PCI_DEVICE_ID_OXSEMI_16PCI95N 0x9511 -#define PCI_DEVICE_ID_OXSEMI_16PCI954PP 0x9513 -#define PCI_DEVICE_ID_OXSEMI_16PCI952 0x9521 -#define PCI_DEVICE_ID_OXSEMI_16PCI952PP 0x9523 -#define PCI_SUBDEVICE_ID_OXSEMI_C950 0x0001 - -#define PCI_VENDOR_ID_CHELSIO 0x1425 - -#define PCI_VENDOR_ID_SAMSUNG 0x144d - -#define PCI_VENDOR_ID_GIGABYTE 0x1458 - -#define PCI_VENDOR_ID_AMBIT 0x1468 - -#define PCI_VENDOR_ID_MYRICOM 0x14c1 - -#define PCI_VENDOR_ID_TITAN 0x14D2 -#define PCI_DEVICE_ID_TITAN_010L 0x8001 -#define PCI_DEVICE_ID_TITAN_100L 0x8010 -#define PCI_DEVICE_ID_TITAN_110L 0x8011 -#define PCI_DEVICE_ID_TITAN_200L 0x8020 -#define PCI_DEVICE_ID_TITAN_210L 0x8021 -#define PCI_DEVICE_ID_TITAN_400L 0x8040 -#define PCI_DEVICE_ID_TITAN_800L 0x8080 -#define PCI_DEVICE_ID_TITAN_100 0xA001 -#define PCI_DEVICE_ID_TITAN_200 0xA005 -#define PCI_DEVICE_ID_TITAN_400 0xA003 -#define PCI_DEVICE_ID_TITAN_800B 0xA004 - -#define PCI_VENDOR_ID_PANACOM 0x14d4 -#define PCI_DEVICE_ID_PANACOM_QUADMODEM 0x0400 -#define PCI_DEVICE_ID_PANACOM_DUALMODEM 0x0402 - -#define PCI_VENDOR_ID_SIPACKETS 0x14d9 -#define PCI_DEVICE_ID_SP1011 0x0010 - -#define PCI_VENDOR_ID_AFAVLAB 0x14db -#define PCI_DEVICE_ID_AFAVLAB_P028 0x2180 -#define PCI_DEVICE_ID_AFAVLAB_P030 0x2182 -#define PCI_SUBDEVICE_ID_AFAVLAB_P061 0x2150 - -#define PCI_VENDOR_ID_BCM_GVC 0x14a4 -#define PCI_VENDOR_ID_BROADCOM 0x14e4 -#define PCI_DEVICE_ID_TIGON3_5752 0x1600 -#define PCI_DEVICE_ID_TIGON3_5752M 0x1601 -#define PCI_DEVICE_ID_NX2_5709 0x1639 -#define PCI_DEVICE_ID_NX2_5709S 0x163a -#define PCI_DEVICE_ID_TIGON3_5700 0x1644 -#define PCI_DEVICE_ID_TIGON3_5701 0x1645 -#define PCI_DEVICE_ID_TIGON3_5702 0x1646 -#define PCI_DEVICE_ID_TIGON3_5703 0x1647 -#define PCI_DEVICE_ID_TIGON3_5704 0x1648 -#define PCI_DEVICE_ID_TIGON3_5704S_2 0x1649 -#define PCI_DEVICE_ID_NX2_5706 0x164a -#define PCI_DEVICE_ID_NX2_5708 0x164c -#define PCI_DEVICE_ID_TIGON3_5702FE 0x164d -#define PCI_DEVICE_ID_NX2_57710 0x164e -#define PCI_DEVICE_ID_NX2_57711 0x164f -#define PCI_DEVICE_ID_NX2_57711E 0x1650 -#define PCI_DEVICE_ID_TIGON3_5705 0x1653 -#define PCI_DEVICE_ID_TIGON3_5705_2 0x1654 -#define PCI_DEVICE_ID_TIGON3_5719 0x1657 -#define PCI_DEVICE_ID_TIGON3_5721 0x1659 -#define PCI_DEVICE_ID_TIGON3_5722 0x165a -#define PCI_DEVICE_ID_TIGON3_5723 0x165b -#define PCI_DEVICE_ID_TIGON3_5705M 0x165d -#define PCI_DEVICE_ID_TIGON3_5705M_2 0x165e -#define PCI_DEVICE_ID_NX2_57712 0x1662 -#define PCI_DEVICE_ID_NX2_57712E 0x1663 -#define PCI_DEVICE_ID_TIGON3_5714 0x1668 -#define PCI_DEVICE_ID_TIGON3_5714S 0x1669 -#define PCI_DEVICE_ID_TIGON3_5780 0x166a -#define PCI_DEVICE_ID_TIGON3_5780S 0x166b -#define PCI_DEVICE_ID_TIGON3_5705F 0x166e -#define PCI_DEVICE_ID_TIGON3_5754M 0x1672 -#define PCI_DEVICE_ID_TIGON3_5755M 0x1673 -#define PCI_DEVICE_ID_TIGON3_5756 0x1674 -#define PCI_DEVICE_ID_TIGON3_5751 0x1677 -#define PCI_DEVICE_ID_TIGON3_5715 0x1678 -#define PCI_DEVICE_ID_TIGON3_5715S 0x1679 -#define PCI_DEVICE_ID_TIGON3_5754 0x167a -#define PCI_DEVICE_ID_TIGON3_5755 0x167b -#define PCI_DEVICE_ID_TIGON3_5751M 0x167d -#define PCI_DEVICE_ID_TIGON3_5751F 0x167e -#define PCI_DEVICE_ID_TIGON3_5787F 0x167f -#define PCI_DEVICE_ID_TIGON3_5761E 0x1680 -#define PCI_DEVICE_ID_TIGON3_5761 0x1681 -#define PCI_DEVICE_ID_TIGON3_5764 0x1684 -#define PCI_DEVICE_ID_NX2_57800 0x168a -#define PCI_DEVICE_ID_NX2_57840 0x168d -#define PCI_DEVICE_ID_NX2_57810 0x168e -#define PCI_DEVICE_ID_TIGON3_5787M 0x1693 -#define PCI_DEVICE_ID_TIGON3_5782 0x1696 -#define PCI_DEVICE_ID_TIGON3_5784 0x1698 -#define PCI_DEVICE_ID_TIGON3_5786 0x169a -#define PCI_DEVICE_ID_TIGON3_5787 0x169b -#define PCI_DEVICE_ID_TIGON3_5788 0x169c -#define PCI_DEVICE_ID_TIGON3_5789 0x169d -#define PCI_DEVICE_ID_NX2_57800_MF 0x16a5 -#define PCI_DEVICE_ID_TIGON3_5702X 0x16a6 -#define PCI_DEVICE_ID_TIGON3_5703X 0x16a7 -#define PCI_DEVICE_ID_TIGON3_5704S 0x16a8 -#define PCI_DEVICE_ID_NX2_57800_VF 0x16a9 -#define PCI_DEVICE_ID_NX2_5706S 0x16aa -#define PCI_DEVICE_ID_NX2_57840_MF 0x16ab -#define PCI_DEVICE_ID_NX2_5708S 0x16ac -#define PCI_DEVICE_ID_NX2_57840_VF 0x16ad -#define PCI_DEVICE_ID_NX2_57810_MF 0x16ae -#define PCI_DEVICE_ID_NX2_57810_VF 0x16af -#define PCI_DEVICE_ID_TIGON3_5702A3 0x16c6 -#define PCI_DEVICE_ID_TIGON3_5703A3 0x16c7 -#define PCI_DEVICE_ID_TIGON3_5781 0x16dd -#define PCI_DEVICE_ID_TIGON3_5753 0x16f7 -#define PCI_DEVICE_ID_TIGON3_5753M 0x16fd -#define PCI_DEVICE_ID_TIGON3_5753F 0x16fe -#define PCI_DEVICE_ID_TIGON3_5901 0x170d -#define PCI_DEVICE_ID_BCM4401B1 0x170c -#define PCI_DEVICE_ID_TIGON3_5901_2 0x170e -#define PCI_DEVICE_ID_TIGON3_5906 0x1712 -#define PCI_DEVICE_ID_TIGON3_5906M 0x1713 -#define PCI_DEVICE_ID_BCM4401 0x4401 -#define PCI_DEVICE_ID_BCM4401B0 0x4402 - -#define PCI_VENDOR_ID_TOPIC 0x151f -#define PCI_DEVICE_ID_TOPIC_TP560 0x0000 - -#define PCI_VENDOR_ID_MAINPINE 0x1522 -#define PCI_DEVICE_ID_MAINPINE_PBRIDGE 0x0100 -#define PCI_VENDOR_ID_ENE 0x1524 -#define PCI_DEVICE_ID_ENE_CB710_FLASH 0x0510 -#define PCI_DEVICE_ID_ENE_CB712_SD 0x0550 -#define PCI_DEVICE_ID_ENE_CB712_SD_2 0x0551 -#define PCI_DEVICE_ID_ENE_CB714_SD 0x0750 -#define PCI_DEVICE_ID_ENE_CB714_SD_2 0x0751 -#define PCI_DEVICE_ID_ENE_1211 0x1211 -#define PCI_DEVICE_ID_ENE_1225 0x1225 -#define PCI_DEVICE_ID_ENE_1410 0x1410 -#define PCI_DEVICE_ID_ENE_710 0x1411 -#define PCI_DEVICE_ID_ENE_712 0x1412 -#define PCI_DEVICE_ID_ENE_1420 0x1420 -#define PCI_DEVICE_ID_ENE_720 0x1421 -#define PCI_DEVICE_ID_ENE_722 0x1422 - -#define PCI_SUBVENDOR_ID_PERLE 0x155f -#define PCI_SUBDEVICE_ID_PCI_RAS4 0xf001 -#define PCI_SUBDEVICE_ID_PCI_RAS8 0xf010 - -#define PCI_VENDOR_ID_SYBA 0x1592 -#define PCI_DEVICE_ID_SYBA_2P_EPP 0x0782 -#define PCI_DEVICE_ID_SYBA_1P_ECP 0x0783 - -#define PCI_VENDOR_ID_MORETON 0x15aa -#define PCI_DEVICE_ID_RASTEL_2PORT 0x2000 - -#define PCI_VENDOR_ID_ZOLTRIX 0x15b0 -#define PCI_DEVICE_ID_ZOLTRIX_2BD0 0x2bd0 - -#define PCI_VENDOR_ID_MELLANOX 0x15b3 -#define PCI_DEVICE_ID_MELLANOX_TAVOR 0x5a44 -#define PCI_DEVICE_ID_MELLANOX_TAVOR_BRIDGE 0x5a46 -#define PCI_DEVICE_ID_MELLANOX_ARBEL_COMPAT 0x6278 -#define PCI_DEVICE_ID_MELLANOX_ARBEL 0x6282 -#define PCI_DEVICE_ID_MELLANOX_SINAI_OLD 0x5e8c -#define PCI_DEVICE_ID_MELLANOX_SINAI 0x6274 - -#define PCI_VENDOR_ID_DFI 0x15bd - -#define PCI_VENDOR_ID_QUICKNET 0x15e2 -#define PCI_DEVICE_ID_QUICKNET_XJ 0x0500 - -/* - * ADDI-DATA GmbH communication cards - */ -#define PCI_VENDOR_ID_ADDIDATA_OLD 0x10E8 -#define PCI_VENDOR_ID_ADDIDATA 0x15B8 -#define PCI_DEVICE_ID_ADDIDATA_APCI7500 0x7000 -#define PCI_DEVICE_ID_ADDIDATA_APCI7420 0x7001 -#define PCI_DEVICE_ID_ADDIDATA_APCI7300 0x7002 -#define PCI_DEVICE_ID_ADDIDATA_APCI7800 0x818E -#define PCI_DEVICE_ID_ADDIDATA_APCI7500_2 0x7009 -#define PCI_DEVICE_ID_ADDIDATA_APCI7420_2 0x700A -#define PCI_DEVICE_ID_ADDIDATA_APCI7300_2 0x700B -#define PCI_DEVICE_ID_ADDIDATA_APCI7500_3 0x700C -#define PCI_DEVICE_ID_ADDIDATA_APCI7420_3 0x700D -#define PCI_DEVICE_ID_ADDIDATA_APCI7300_3 0x700E -#define PCI_DEVICE_ID_ADDIDATA_APCI7800_3 0x700F -#define PCI_DEVICE_ID_ADDIDATA_APCIe7300 0x7010 -#define PCI_DEVICE_ID_ADDIDATA_APCIe7420 0x7011 -#define PCI_DEVICE_ID_ADDIDATA_APCIe7500 0x7012 -#define PCI_DEVICE_ID_ADDIDATA_APCIe7800 0x7013 - -#define PCI_VENDOR_ID_PDC 0x15e9 - -#define PCI_VENDOR_ID_FARSITE 0x1619 -#define PCI_DEVICE_ID_FARSITE_T2P 0x0400 -#define PCI_DEVICE_ID_FARSITE_T4P 0x0440 -#define PCI_DEVICE_ID_FARSITE_T1U 0x0610 -#define PCI_DEVICE_ID_FARSITE_T2U 0x0620 -#define PCI_DEVICE_ID_FARSITE_T4U 0x0640 -#define PCI_DEVICE_ID_FARSITE_TE1 0x1610 -#define PCI_DEVICE_ID_FARSITE_TE1C 0x1612 - -#define PCI_VENDOR_ID_ARIMA 0x161f - -#define PCI_VENDOR_ID_BROCADE 0x1657 -#define PCI_DEVICE_ID_BROCADE_CT 0x0014 -#define PCI_DEVICE_ID_BROCADE_FC_8G1P 0x0017 -#define PCI_DEVICE_ID_BROCADE_CT_FC 0x0021 - -#define PCI_VENDOR_ID_SIBYTE 0x166d -#define PCI_DEVICE_ID_BCM1250_PCI 0x0001 -#define PCI_DEVICE_ID_BCM1250_HT 0x0002 - -#define PCI_VENDOR_ID_ATHEROS 0x168c - -#define PCI_VENDOR_ID_NETCELL 0x169c -#define PCI_DEVICE_ID_REVOLUTION 0x0044 - -#define PCI_VENDOR_ID_CENATEK 0x16CA -#define PCI_DEVICE_ID_CENATEK_IDE 0x0001 - -#define PCI_VENDOR_ID_VITESSE 0x1725 -#define PCI_DEVICE_ID_VITESSE_VSC7174 0x7174 - -#define PCI_VENDOR_ID_LINKSYS 0x1737 -#define PCI_DEVICE_ID_LINKSYS_EG1064 0x1064 - -#define PCI_VENDOR_ID_ALTIMA 0x173b -#define PCI_DEVICE_ID_ALTIMA_AC1000 0x03e8 -#define PCI_DEVICE_ID_ALTIMA_AC1001 0x03e9 -#define PCI_DEVICE_ID_ALTIMA_AC9100 0x03ea -#define PCI_DEVICE_ID_ALTIMA_AC1003 0x03eb - -#define PCI_VENDOR_ID_BELKIN 0x1799 -#define PCI_DEVICE_ID_BELKIN_F5D7010V7 0x701f - -#define PCI_VENDOR_ID_RDC 0x17f3 -#define PCI_DEVICE_ID_RDC_R6020 0x6020 -#define PCI_DEVICE_ID_RDC_R6030 0x6030 -#define PCI_DEVICE_ID_RDC_R6040 0x6040 -#define PCI_DEVICE_ID_RDC_R6060 0x6060 -#define PCI_DEVICE_ID_RDC_R6061 0x6061 -#define PCI_DEVICE_ID_RDC_D1010 0x1010 - -#define PCI_VENDOR_ID_LENOVO 0x17aa - -#define PCI_VENDOR_ID_ARECA 0x17d3 -#define PCI_DEVICE_ID_ARECA_1110 0x1110 -#define PCI_DEVICE_ID_ARECA_1120 0x1120 -#define PCI_DEVICE_ID_ARECA_1130 0x1130 -#define PCI_DEVICE_ID_ARECA_1160 0x1160 -#define PCI_DEVICE_ID_ARECA_1170 0x1170 -#define PCI_DEVICE_ID_ARECA_1200 0x1200 -#define PCI_DEVICE_ID_ARECA_1201 0x1201 -#define PCI_DEVICE_ID_ARECA_1202 0x1202 -#define PCI_DEVICE_ID_ARECA_1210 0x1210 -#define PCI_DEVICE_ID_ARECA_1220 0x1220 -#define PCI_DEVICE_ID_ARECA_1230 0x1230 -#define PCI_DEVICE_ID_ARECA_1260 0x1260 -#define PCI_DEVICE_ID_ARECA_1270 0x1270 -#define PCI_DEVICE_ID_ARECA_1280 0x1280 -#define PCI_DEVICE_ID_ARECA_1380 0x1380 -#define PCI_DEVICE_ID_ARECA_1381 0x1381 -#define PCI_DEVICE_ID_ARECA_1680 0x1680 -#define PCI_DEVICE_ID_ARECA_1681 0x1681 - -#define PCI_VENDOR_ID_S2IO 0x17d5 -#define PCI_DEVICE_ID_S2IO_WIN 0x5731 -#define PCI_DEVICE_ID_S2IO_UNI 0x5831 -#define PCI_DEVICE_ID_HERC_WIN 0x5732 -#define PCI_DEVICE_ID_HERC_UNI 0x5832 - -#define PCI_VENDOR_ID_SITECOM 0x182d -#define PCI_DEVICE_ID_SITECOM_DC105V2 0x3069 - -#define PCI_VENDOR_ID_TOPSPIN 0x1867 - -#define PCI_VENDOR_ID_SILAN 0x1904 - -#define PCI_VENDOR_ID_RENESAS 0x1912 -#define PCI_DEVICE_ID_RENESAS_SH7781 0x0001 -#define PCI_DEVICE_ID_RENESAS_SH7780 0x0002 -#define PCI_DEVICE_ID_RENESAS_SH7763 0x0004 -#define PCI_DEVICE_ID_RENESAS_SH7785 0x0007 -#define PCI_DEVICE_ID_RENESAS_SH7786 0x0010 - -#define PCI_VENDOR_ID_SOLARFLARE 0x1924 -#define PCI_DEVICE_ID_SOLARFLARE_SFC4000A_0 0x0703 -#define PCI_DEVICE_ID_SOLARFLARE_SFC4000A_1 0x6703 -#define PCI_DEVICE_ID_SOLARFLARE_SFC4000B 0x0710 - -#define PCI_VENDOR_ID_TDI 0x192E -#define PCI_DEVICE_ID_TDI_EHCI 0x0101 - -#define PCI_VENDOR_ID_FREESCALE 0x1957 -#define PCI_DEVICE_ID_MPC8308 0xc006 -#define PCI_DEVICE_ID_MPC8315E 0x00b4 -#define PCI_DEVICE_ID_MPC8315 0x00b5 -#define PCI_DEVICE_ID_MPC8314E 0x00b6 -#define PCI_DEVICE_ID_MPC8314 0x00b7 -#define PCI_DEVICE_ID_MPC8378E 0x00c4 -#define PCI_DEVICE_ID_MPC8378 0x00c5 -#define PCI_DEVICE_ID_MPC8377E 0x00c6 -#define PCI_DEVICE_ID_MPC8377 0x00c7 -#define PCI_DEVICE_ID_MPC8548E 0x0012 -#define PCI_DEVICE_ID_MPC8548 0x0013 -#define PCI_DEVICE_ID_MPC8543E 0x0014 -#define PCI_DEVICE_ID_MPC8543 0x0015 -#define PCI_DEVICE_ID_MPC8547E 0x0018 -#define PCI_DEVICE_ID_MPC8545E 0x0019 -#define PCI_DEVICE_ID_MPC8545 0x001a -#define PCI_DEVICE_ID_MPC8569E 0x0061 -#define PCI_DEVICE_ID_MPC8569 0x0060 -#define PCI_DEVICE_ID_MPC8568E 0x0020 -#define PCI_DEVICE_ID_MPC8568 0x0021 -#define PCI_DEVICE_ID_MPC8567E 0x0022 -#define PCI_DEVICE_ID_MPC8567 0x0023 -#define PCI_DEVICE_ID_MPC8533E 0x0030 -#define PCI_DEVICE_ID_MPC8533 0x0031 -#define PCI_DEVICE_ID_MPC8544E 0x0032 -#define PCI_DEVICE_ID_MPC8544 0x0033 -#define PCI_DEVICE_ID_MPC8572E 0x0040 -#define PCI_DEVICE_ID_MPC8572 0x0041 -#define PCI_DEVICE_ID_MPC8536E 0x0050 -#define PCI_DEVICE_ID_MPC8536 0x0051 -#define PCI_DEVICE_ID_P2020E 0x0070 -#define PCI_DEVICE_ID_P2020 0x0071 -#define PCI_DEVICE_ID_P2010E 0x0078 -#define PCI_DEVICE_ID_P2010 0x0079 -#define PCI_DEVICE_ID_P1020E 0x0100 -#define PCI_DEVICE_ID_P1020 0x0101 -#define PCI_DEVICE_ID_P1021E 0x0102 -#define PCI_DEVICE_ID_P1021 0x0103 -#define PCI_DEVICE_ID_P1011E 0x0108 -#define PCI_DEVICE_ID_P1011 0x0109 -#define PCI_DEVICE_ID_P1022E 0x0110 -#define PCI_DEVICE_ID_P1022 0x0111 -#define PCI_DEVICE_ID_P1013E 0x0118 -#define PCI_DEVICE_ID_P1013 0x0119 -#define PCI_DEVICE_ID_P4080E 0x0400 -#define PCI_DEVICE_ID_P4080 0x0401 -#define PCI_DEVICE_ID_P4040E 0x0408 -#define PCI_DEVICE_ID_P4040 0x0409 -#define PCI_DEVICE_ID_P2040E 0x0410 -#define PCI_DEVICE_ID_P2040 0x0411 -#define PCI_DEVICE_ID_P3041E 0x041E -#define PCI_DEVICE_ID_P3041 0x041F -#define PCI_DEVICE_ID_P5020E 0x0420 -#define PCI_DEVICE_ID_P5020 0x0421 -#define PCI_DEVICE_ID_P5010E 0x0428 -#define PCI_DEVICE_ID_P5010 0x0429 -#define PCI_DEVICE_ID_MPC8641 0x7010 -#define PCI_DEVICE_ID_MPC8641D 0x7011 -#define PCI_DEVICE_ID_MPC8610 0x7018 - -#define PCI_VENDOR_ID_PASEMI 0x1959 - -#define PCI_VENDOR_ID_ATTANSIC 0x1969 -#define PCI_DEVICE_ID_ATTANSIC_L1 0x1048 -#define PCI_DEVICE_ID_ATTANSIC_L2 0x2048 - -#define PCI_VENDOR_ID_JMICRON 0x197B -#define PCI_DEVICE_ID_JMICRON_JMB360 0x2360 -#define PCI_DEVICE_ID_JMICRON_JMB361 0x2361 -#define PCI_DEVICE_ID_JMICRON_JMB362 0x2362 -#define PCI_DEVICE_ID_JMICRON_JMB363 0x2363 -#define PCI_DEVICE_ID_JMICRON_JMB364 0x2364 -#define PCI_DEVICE_ID_JMICRON_JMB365 0x2365 -#define PCI_DEVICE_ID_JMICRON_JMB366 0x2366 -#define PCI_DEVICE_ID_JMICRON_JMB368 0x2368 -#define PCI_DEVICE_ID_JMICRON_JMB369 0x2369 -#define PCI_DEVICE_ID_JMICRON_JMB38X_SD 0x2381 -#define PCI_DEVICE_ID_JMICRON_JMB38X_MMC 0x2382 -#define PCI_DEVICE_ID_JMICRON_JMB38X_MS 0x2383 -#define PCI_DEVICE_ID_JMICRON_JMB385_MS 0x2388 -#define PCI_DEVICE_ID_JMICRON_JMB388_SD 0x2391 -#define PCI_DEVICE_ID_JMICRON_JMB388_ESD 0x2392 -#define PCI_DEVICE_ID_JMICRON_JMB390_MS 0x2393 - -#define PCI_VENDOR_ID_KORENIX 0x1982 -#define PCI_DEVICE_ID_KORENIX_JETCARDF0 0x1600 -#define PCI_DEVICE_ID_KORENIX_JETCARDF1 0x16ff -#define PCI_DEVICE_ID_KORENIX_JETCARDF2 0x1700 -#define PCI_DEVICE_ID_KORENIX_JETCARDF3 0x17ff - -#define PCI_VENDOR_ID_QMI 0x1a32 - -#define PCI_VENDOR_ID_AZWAVE 0x1a3b - -#define PCI_VENDOR_ID_ASMEDIA 0x1b21 - -#define PCI_VENDOR_ID_TEKRAM 0x1de1 -#define PCI_DEVICE_ID_TEKRAM_DC290 0xdc29 - -#define PCI_VENDOR_ID_TEHUTI 0x1fc9 -#define PCI_DEVICE_ID_TEHUTI_3009 0x3009 -#define PCI_DEVICE_ID_TEHUTI_3010 0x3010 -#define PCI_DEVICE_ID_TEHUTI_3014 0x3014 - -#define PCI_VENDOR_ID_HINT 0x3388 -#define PCI_DEVICE_ID_HINT_VXPROII_IDE 0x8013 - -#define PCI_VENDOR_ID_3DLABS 0x3d3d -#define PCI_DEVICE_ID_3DLABS_PERMEDIA2 0x0007 -#define PCI_DEVICE_ID_3DLABS_PERMEDIA2V 0x0009 - -#define PCI_VENDOR_ID_NETXEN 0x4040 -#define PCI_DEVICE_ID_NX2031_10GXSR 0x0001 -#define PCI_DEVICE_ID_NX2031_10GCX4 0x0002 -#define PCI_DEVICE_ID_NX2031_4GCU 0x0003 -#define PCI_DEVICE_ID_NX2031_IMEZ 0x0004 -#define PCI_DEVICE_ID_NX2031_HMEZ 0x0005 -#define PCI_DEVICE_ID_NX2031_XG_MGMT 0x0024 -#define PCI_DEVICE_ID_NX2031_XG_MGMT2 0x0025 -#define PCI_DEVICE_ID_NX3031 0x0100 - -#define PCI_VENDOR_ID_AKS 0x416c -#define PCI_DEVICE_ID_AKS_ALADDINCARD 0x0100 - -#define PCI_VENDOR_ID_ACCESSIO 0x494f -#define PCI_DEVICE_ID_ACCESSIO_WDG_CSM 0x22c0 - -#define PCI_VENDOR_ID_S3 0x5333 -#define PCI_DEVICE_ID_S3_TRIO 0x8811 -#define PCI_DEVICE_ID_S3_868 0x8880 -#define PCI_DEVICE_ID_S3_968 0x88f0 -#define PCI_DEVICE_ID_S3_SAVAGE4 0x8a25 -#define PCI_DEVICE_ID_S3_PROSAVAGE8 0x8d04 -#define PCI_DEVICE_ID_S3_SONICVIBES 0xca00 - -#define PCI_VENDOR_ID_DUNORD 0x5544 -#define PCI_DEVICE_ID_DUNORD_I3000 0x0001 - -#define PCI_VENDOR_ID_DCI 0x6666 -#define PCI_DEVICE_ID_DCI_PCCOM4 0x0001 -#define PCI_DEVICE_ID_DCI_PCCOM8 0x0002 -#define PCI_DEVICE_ID_DCI_PCCOM2 0x0004 - -#define PCI_VENDOR_ID_INTEL 0x8086 -#define PCI_DEVICE_ID_INTEL_EESSC 0x0008 -#define PCI_DEVICE_ID_INTEL_PXHD_0 0x0320 -#define PCI_DEVICE_ID_INTEL_PXHD_1 0x0321 -#define PCI_DEVICE_ID_INTEL_PXH_0 0x0329 -#define PCI_DEVICE_ID_INTEL_PXH_1 0x032A -#define PCI_DEVICE_ID_INTEL_PXHV 0x032C -#define PCI_DEVICE_ID_INTEL_80332_0 0x0330 -#define PCI_DEVICE_ID_INTEL_80332_1 0x0332 -#define PCI_DEVICE_ID_INTEL_80333_0 0x0370 -#define PCI_DEVICE_ID_INTEL_80333_1 0x0372 -#define PCI_DEVICE_ID_INTEL_82375 0x0482 -#define PCI_DEVICE_ID_INTEL_82424 0x0483 -#define PCI_DEVICE_ID_INTEL_82378 0x0484 -#define PCI_DEVICE_ID_INTEL_MRST_SD0 0x0807 -#define PCI_DEVICE_ID_INTEL_MRST_SD1 0x0808 -#define PCI_DEVICE_ID_INTEL_MFD_SD 0x0820 -#define PCI_DEVICE_ID_INTEL_MFD_SDIO1 0x0821 -#define PCI_DEVICE_ID_INTEL_MFD_SDIO2 0x0822 -#define PCI_DEVICE_ID_INTEL_MFD_EMMC0 0x0823 -#define PCI_DEVICE_ID_INTEL_MFD_EMMC1 0x0824 -#define PCI_DEVICE_ID_INTEL_MRST_SD2 0x084F -#define PCI_DEVICE_ID_INTEL_I960 0x0960 -#define PCI_DEVICE_ID_INTEL_I960RM 0x0962 -#define PCI_DEVICE_ID_INTEL_8257X_SOL 0x1062 -#define PCI_DEVICE_ID_INTEL_82573E_SOL 0x1085 -#define PCI_DEVICE_ID_INTEL_82573L_SOL 0x108F -#define PCI_DEVICE_ID_INTEL_82815_MC 0x1130 -#define PCI_DEVICE_ID_INTEL_82815_CGC 0x1132 -#define PCI_DEVICE_ID_INTEL_82092AA_0 0x1221 -#define PCI_DEVICE_ID_INTEL_7505_0 0x2550 -#define PCI_DEVICE_ID_INTEL_7205_0 0x255d -#define PCI_DEVICE_ID_INTEL_82437 0x122d -#define PCI_DEVICE_ID_INTEL_82371FB_0 0x122e -#define PCI_DEVICE_ID_INTEL_82371FB_1 0x1230 -#define PCI_DEVICE_ID_INTEL_82371MX 0x1234 -#define PCI_DEVICE_ID_INTEL_82441 0x1237 -#define PCI_DEVICE_ID_INTEL_82380FB 0x124b -#define PCI_DEVICE_ID_INTEL_82439 0x1250 -#define PCI_DEVICE_ID_INTEL_80960_RP 0x1960 -#define PCI_DEVICE_ID_INTEL_82840_HB 0x1a21 -#define PCI_DEVICE_ID_INTEL_82845_HB 0x1a30 -#define PCI_DEVICE_ID_INTEL_IOAT 0x1a38 -#define PCI_DEVICE_ID_INTEL_COUGARPOINT_LPC_MIN 0x1c41 -#define PCI_DEVICE_ID_INTEL_COUGARPOINT_LPC_MAX 0x1c5f -#define PCI_DEVICE_ID_INTEL_PATSBURG_LPC_0 0x1d40 -#define PCI_DEVICE_ID_INTEL_PATSBURG_LPC_1 0x1d41 -#define PCI_DEVICE_ID_INTEL_PANTHERPOINT_XHCI 0x1e31 -#define PCI_DEVICE_ID_INTEL_PANTHERPOINT_LPC_MIN 0x1e40 -#define PCI_DEVICE_ID_INTEL_PANTHERPOINT_LPC_MAX 0x1e5f -#define PCI_DEVICE_ID_INTEL_DH89XXCC_LPC_MIN 0x2310 -#define PCI_DEVICE_ID_INTEL_DH89XXCC_LPC_MAX 0x231f -#define PCI_DEVICE_ID_INTEL_82801AA_0 0x2410 -#define PCI_DEVICE_ID_INTEL_82801AA_1 0x2411 -#define PCI_DEVICE_ID_INTEL_82801AA_3 0x2413 -#define PCI_DEVICE_ID_INTEL_82801AA_5 0x2415 -#define PCI_DEVICE_ID_INTEL_82801AA_6 0x2416 -#define PCI_DEVICE_ID_INTEL_82801AA_8 0x2418 -#define PCI_DEVICE_ID_INTEL_82801AB_0 0x2420 -#define PCI_DEVICE_ID_INTEL_82801AB_1 0x2421 -#define PCI_DEVICE_ID_INTEL_82801AB_3 0x2423 -#define PCI_DEVICE_ID_INTEL_82801AB_5 0x2425 -#define PCI_DEVICE_ID_INTEL_82801AB_6 0x2426 -#define PCI_DEVICE_ID_INTEL_82801AB_8 0x2428 -#define PCI_DEVICE_ID_INTEL_82801BA_0 0x2440 -#define PCI_DEVICE_ID_INTEL_82801BA_2 0x2443 -#define PCI_DEVICE_ID_INTEL_82801BA_4 0x2445 -#define PCI_DEVICE_ID_INTEL_82801BA_6 0x2448 -#define PCI_DEVICE_ID_INTEL_82801BA_8 0x244a -#define PCI_DEVICE_ID_INTEL_82801BA_9 0x244b -#define PCI_DEVICE_ID_INTEL_82801BA_10 0x244c -#define PCI_DEVICE_ID_INTEL_82801BA_11 0x244e -#define PCI_DEVICE_ID_INTEL_82801E_0 0x2450 -#define PCI_DEVICE_ID_INTEL_82801E_11 0x245b -#define PCI_DEVICE_ID_INTEL_82801CA_0 0x2480 -#define PCI_DEVICE_ID_INTEL_82801CA_3 0x2483 -#define PCI_DEVICE_ID_INTEL_82801CA_5 0x2485 -#define PCI_DEVICE_ID_INTEL_82801CA_6 0x2486 -#define PCI_DEVICE_ID_INTEL_82801CA_10 0x248a -#define PCI_DEVICE_ID_INTEL_82801CA_11 0x248b -#define PCI_DEVICE_ID_INTEL_82801CA_12 0x248c -#define PCI_DEVICE_ID_INTEL_82801DB_0 0x24c0 -#define PCI_DEVICE_ID_INTEL_82801DB_1 0x24c1 -#define PCI_DEVICE_ID_INTEL_82801DB_2 0x24c2 -#define PCI_DEVICE_ID_INTEL_82801DB_3 0x24c3 -#define PCI_DEVICE_ID_INTEL_82801DB_5 0x24c5 -#define PCI_DEVICE_ID_INTEL_82801DB_6 0x24c6 -#define PCI_DEVICE_ID_INTEL_82801DB_9 0x24c9 -#define PCI_DEVICE_ID_INTEL_82801DB_10 0x24ca -#define PCI_DEVICE_ID_INTEL_82801DB_11 0x24cb -#define PCI_DEVICE_ID_INTEL_82801DB_12 0x24cc -#define PCI_DEVICE_ID_INTEL_82801EB_0 0x24d0 -#define PCI_DEVICE_ID_INTEL_82801EB_1 0x24d1 -#define PCI_DEVICE_ID_INTEL_82801EB_3 0x24d3 -#define PCI_DEVICE_ID_INTEL_82801EB_5 0x24d5 -#define PCI_DEVICE_ID_INTEL_82801EB_6 0x24d6 -#define PCI_DEVICE_ID_INTEL_82801EB_11 0x24db -#define PCI_DEVICE_ID_INTEL_82801EB_12 0x24dc -#define PCI_DEVICE_ID_INTEL_82801EB_13 0x24dd -#define PCI_DEVICE_ID_INTEL_ESB_1 0x25a1 -#define PCI_DEVICE_ID_INTEL_ESB_2 0x25a2 -#define PCI_DEVICE_ID_INTEL_ESB_4 0x25a4 -#define PCI_DEVICE_ID_INTEL_ESB_5 0x25a6 -#define PCI_DEVICE_ID_INTEL_ESB_9 0x25ab -#define PCI_DEVICE_ID_INTEL_ESB_10 0x25ac -#define PCI_DEVICE_ID_INTEL_82820_HB 0x2500 -#define PCI_DEVICE_ID_INTEL_82820_UP_HB 0x2501 -#define PCI_DEVICE_ID_INTEL_82850_HB 0x2530 -#define PCI_DEVICE_ID_INTEL_82860_HB 0x2531 -#define PCI_DEVICE_ID_INTEL_E7501_MCH 0x254c -#define PCI_DEVICE_ID_INTEL_82845G_HB 0x2560 -#define PCI_DEVICE_ID_INTEL_82845G_IG 0x2562 -#define PCI_DEVICE_ID_INTEL_82865_HB 0x2570 -#define PCI_DEVICE_ID_INTEL_82865_IG 0x2572 -#define PCI_DEVICE_ID_INTEL_82875_HB 0x2578 -#define PCI_DEVICE_ID_INTEL_82915G_HB 0x2580 -#define PCI_DEVICE_ID_INTEL_82915G_IG 0x2582 -#define PCI_DEVICE_ID_INTEL_82915GM_HB 0x2590 -#define PCI_DEVICE_ID_INTEL_82915GM_IG 0x2592 -#define PCI_DEVICE_ID_INTEL_5000_ERR 0x25F0 -#define PCI_DEVICE_ID_INTEL_5000_FBD0 0x25F5 -#define PCI_DEVICE_ID_INTEL_5000_FBD1 0x25F6 -#define PCI_DEVICE_ID_INTEL_82945G_HB 0x2770 -#define PCI_DEVICE_ID_INTEL_82945G_IG 0x2772 -#define PCI_DEVICE_ID_INTEL_3000_HB 0x2778 -#define PCI_DEVICE_ID_INTEL_82945GM_HB 0x27A0 -#define PCI_DEVICE_ID_INTEL_82945GM_IG 0x27A2 -#define PCI_DEVICE_ID_INTEL_ICH6_0 0x2640 -#define PCI_DEVICE_ID_INTEL_ICH6_1 0x2641 -#define PCI_DEVICE_ID_INTEL_ICH6_2 0x2642 -#define PCI_DEVICE_ID_INTEL_ICH6_16 0x266a -#define PCI_DEVICE_ID_INTEL_ICH6_17 0x266d -#define PCI_DEVICE_ID_INTEL_ICH6_18 0x266e -#define PCI_DEVICE_ID_INTEL_ICH6_19 0x266f -#define PCI_DEVICE_ID_INTEL_ESB2_0 0x2670 -#define PCI_DEVICE_ID_INTEL_ESB2_14 0x2698 -#define PCI_DEVICE_ID_INTEL_ESB2_17 0x269b -#define PCI_DEVICE_ID_INTEL_ESB2_18 0x269e -#define PCI_DEVICE_ID_INTEL_ICH7_0 0x27b8 -#define PCI_DEVICE_ID_INTEL_ICH7_1 0x27b9 -#define PCI_DEVICE_ID_INTEL_ICH7_30 0x27b0 -#define PCI_DEVICE_ID_INTEL_TGP_LPC 0x27bc -#define PCI_DEVICE_ID_INTEL_ICH7_31 0x27bd -#define PCI_DEVICE_ID_INTEL_ICH7_17 0x27da -#define PCI_DEVICE_ID_INTEL_ICH7_19 0x27dd -#define PCI_DEVICE_ID_INTEL_ICH7_20 0x27de -#define PCI_DEVICE_ID_INTEL_ICH7_21 0x27df -#define PCI_DEVICE_ID_INTEL_ICH8_0 0x2810 -#define PCI_DEVICE_ID_INTEL_ICH8_1 0x2811 -#define PCI_DEVICE_ID_INTEL_ICH8_2 0x2812 -#define PCI_DEVICE_ID_INTEL_ICH8_3 0x2814 -#define PCI_DEVICE_ID_INTEL_ICH8_4 0x2815 -#define PCI_DEVICE_ID_INTEL_ICH8_5 0x283e -#define PCI_DEVICE_ID_INTEL_ICH8_6 0x2850 -#define PCI_DEVICE_ID_INTEL_ICH9_0 0x2910 -#define PCI_DEVICE_ID_INTEL_ICH9_1 0x2917 -#define PCI_DEVICE_ID_INTEL_ICH9_2 0x2912 -#define PCI_DEVICE_ID_INTEL_ICH9_3 0x2913 -#define PCI_DEVICE_ID_INTEL_ICH9_4 0x2914 -#define PCI_DEVICE_ID_INTEL_ICH9_5 0x2919 -#define PCI_DEVICE_ID_INTEL_ICH9_6 0x2930 -#define PCI_DEVICE_ID_INTEL_ICH9_7 0x2916 -#define PCI_DEVICE_ID_INTEL_ICH9_8 0x2918 -#define PCI_DEVICE_ID_INTEL_I7_MCR 0x2c18 -#define PCI_DEVICE_ID_INTEL_I7_MC_TAD 0x2c19 -#define PCI_DEVICE_ID_INTEL_I7_MC_RAS 0x2c1a -#define PCI_DEVICE_ID_INTEL_I7_MC_TEST 0x2c1c -#define PCI_DEVICE_ID_INTEL_I7_MC_CH0_CTRL 0x2c20 -#define PCI_DEVICE_ID_INTEL_I7_MC_CH0_ADDR 0x2c21 -#define PCI_DEVICE_ID_INTEL_I7_MC_CH0_RANK 0x2c22 -#define PCI_DEVICE_ID_INTEL_I7_MC_CH0_TC 0x2c23 -#define PCI_DEVICE_ID_INTEL_I7_MC_CH1_CTRL 0x2c28 -#define PCI_DEVICE_ID_INTEL_I7_MC_CH1_ADDR 0x2c29 -#define PCI_DEVICE_ID_INTEL_I7_MC_CH1_RANK 0x2c2a -#define PCI_DEVICE_ID_INTEL_I7_MC_CH1_TC 0x2c2b -#define PCI_DEVICE_ID_INTEL_I7_MC_CH2_CTRL 0x2c30 -#define PCI_DEVICE_ID_INTEL_I7_MC_CH2_ADDR 0x2c31 -#define PCI_DEVICE_ID_INTEL_I7_MC_CH2_RANK 0x2c32 -#define PCI_DEVICE_ID_INTEL_I7_MC_CH2_TC 0x2c33 -#define PCI_DEVICE_ID_INTEL_I7_NONCORE 0x2c41 -#define PCI_DEVICE_ID_INTEL_I7_NONCORE_ALT 0x2c40 -#define PCI_DEVICE_ID_INTEL_LYNNFIELD_NONCORE 0x2c50 -#define PCI_DEVICE_ID_INTEL_LYNNFIELD_NONCORE_ALT 0x2c51 -#define PCI_DEVICE_ID_INTEL_LYNNFIELD_NONCORE_REV2 0x2c70 -#define PCI_DEVICE_ID_INTEL_LYNNFIELD_SAD 0x2c81 -#define PCI_DEVICE_ID_INTEL_LYNNFIELD_QPI_LINK0 0x2c90 -#define PCI_DEVICE_ID_INTEL_LYNNFIELD_QPI_PHY0 0x2c91 -#define PCI_DEVICE_ID_INTEL_LYNNFIELD_MCR 0x2c98 -#define PCI_DEVICE_ID_INTEL_LYNNFIELD_MC_TAD 0x2c99 -#define PCI_DEVICE_ID_INTEL_LYNNFIELD_MC_TEST 0x2c9C -#define PCI_DEVICE_ID_INTEL_LYNNFIELD_MC_CH0_CTRL 0x2ca0 -#define PCI_DEVICE_ID_INTEL_LYNNFIELD_MC_CH0_ADDR 0x2ca1 -#define PCI_DEVICE_ID_INTEL_LYNNFIELD_MC_CH0_RANK 0x2ca2 -#define PCI_DEVICE_ID_INTEL_LYNNFIELD_MC_CH0_TC 0x2ca3 -#define PCI_DEVICE_ID_INTEL_LYNNFIELD_MC_CH1_CTRL 0x2ca8 -#define PCI_DEVICE_ID_INTEL_LYNNFIELD_MC_CH1_ADDR 0x2ca9 -#define PCI_DEVICE_ID_INTEL_LYNNFIELD_MC_CH1_RANK 0x2caa -#define PCI_DEVICE_ID_INTEL_LYNNFIELD_MC_CH1_TC 0x2cab -#define PCI_DEVICE_ID_INTEL_LYNNFIELD_MCR_REV2 0x2d98 -#define PCI_DEVICE_ID_INTEL_LYNNFIELD_MC_TAD_REV2 0x2d99 -#define PCI_DEVICE_ID_INTEL_LYNNFIELD_MC_RAS_REV2 0x2d9a -#define PCI_DEVICE_ID_INTEL_LYNNFIELD_MC_TEST_REV2 0x2d9c -#define PCI_DEVICE_ID_INTEL_LYNNFIELD_MC_CH0_CTRL_REV2 0x2da0 -#define PCI_DEVICE_ID_INTEL_LYNNFIELD_MC_CH0_ADDR_REV2 0x2da1 -#define PCI_DEVICE_ID_INTEL_LYNNFIELD_MC_CH0_RANK_REV2 0x2da2 -#define PCI_DEVICE_ID_INTEL_LYNNFIELD_MC_CH0_TC_REV2 0x2da3 -#define PCI_DEVICE_ID_INTEL_LYNNFIELD_MC_CH1_CTRL_REV2 0x2da8 -#define PCI_DEVICE_ID_INTEL_LYNNFIELD_MC_CH1_ADDR_REV2 0x2da9 -#define PCI_DEVICE_ID_INTEL_LYNNFIELD_MC_CH1_RANK_REV2 0x2daa -#define PCI_DEVICE_ID_INTEL_LYNNFIELD_MC_CH1_TC_REV2 0x2dab -#define PCI_DEVICE_ID_INTEL_LYNNFIELD_MC_CH2_CTRL_REV2 0x2db0 -#define PCI_DEVICE_ID_INTEL_LYNNFIELD_MC_CH2_ADDR_REV2 0x2db1 -#define PCI_DEVICE_ID_INTEL_LYNNFIELD_MC_CH2_RANK_REV2 0x2db2 -#define PCI_DEVICE_ID_INTEL_LYNNFIELD_MC_CH2_TC_REV2 0x2db3 -#define PCI_DEVICE_ID_INTEL_82855PM_HB 0x3340 -#define PCI_DEVICE_ID_INTEL_IOAT_TBG4 0x3429 -#define PCI_DEVICE_ID_INTEL_IOAT_TBG5 0x342a -#define PCI_DEVICE_ID_INTEL_IOAT_TBG6 0x342b -#define PCI_DEVICE_ID_INTEL_IOAT_TBG7 0x342c -#define PCI_DEVICE_ID_INTEL_X58_HUB_MGMT 0x342e -#define PCI_DEVICE_ID_INTEL_IOAT_TBG0 0x3430 -#define PCI_DEVICE_ID_INTEL_IOAT_TBG1 0x3431 -#define PCI_DEVICE_ID_INTEL_IOAT_TBG2 0x3432 -#define PCI_DEVICE_ID_INTEL_IOAT_TBG3 0x3433 -#define PCI_DEVICE_ID_INTEL_82830_HB 0x3575 -#define PCI_DEVICE_ID_INTEL_82830_CGC 0x3577 -#define PCI_DEVICE_ID_INTEL_82854_HB 0x358c -#define PCI_DEVICE_ID_INTEL_82854_IG 0x358e -#define PCI_DEVICE_ID_INTEL_82855GM_HB 0x3580 -#define PCI_DEVICE_ID_INTEL_82855GM_IG 0x3582 -#define PCI_DEVICE_ID_INTEL_E7520_MCH 0x3590 -#define PCI_DEVICE_ID_INTEL_E7320_MCH 0x3592 -#define PCI_DEVICE_ID_INTEL_MCH_PA 0x3595 -#define PCI_DEVICE_ID_INTEL_MCH_PA1 0x3596 -#define PCI_DEVICE_ID_INTEL_MCH_PB 0x3597 -#define PCI_DEVICE_ID_INTEL_MCH_PB1 0x3598 -#define PCI_DEVICE_ID_INTEL_MCH_PC 0x3599 -#define PCI_DEVICE_ID_INTEL_MCH_PC1 0x359a -#define PCI_DEVICE_ID_INTEL_E7525_MCH 0x359e -#define PCI_DEVICE_ID_INTEL_I7300_MCH_ERR 0x360c -#define PCI_DEVICE_ID_INTEL_I7300_MCH_FB0 0x360f -#define PCI_DEVICE_ID_INTEL_I7300_MCH_FB1 0x3610 -#define PCI_DEVICE_ID_INTEL_IOAT_CNB 0x360b -#define PCI_DEVICE_ID_INTEL_FBD_CNB 0x360c -#define PCI_DEVICE_ID_INTEL_IOAT_JSF0 0x3710 -#define PCI_DEVICE_ID_INTEL_IOAT_JSF1 0x3711 -#define PCI_DEVICE_ID_INTEL_IOAT_JSF2 0x3712 -#define PCI_DEVICE_ID_INTEL_IOAT_JSF3 0x3713 -#define PCI_DEVICE_ID_INTEL_IOAT_JSF4 0x3714 -#define PCI_DEVICE_ID_INTEL_IOAT_JSF5 0x3715 -#define PCI_DEVICE_ID_INTEL_IOAT_JSF6 0x3716 -#define PCI_DEVICE_ID_INTEL_IOAT_JSF7 0x3717 -#define PCI_DEVICE_ID_INTEL_IOAT_JSF8 0x3718 -#define PCI_DEVICE_ID_INTEL_IOAT_JSF9 0x3719 -#define PCI_DEVICE_ID_INTEL_ICH10_0 0x3a14 -#define PCI_DEVICE_ID_INTEL_ICH10_1 0x3a16 -#define PCI_DEVICE_ID_INTEL_ICH10_2 0x3a18 -#define PCI_DEVICE_ID_INTEL_ICH10_3 0x3a1a -#define PCI_DEVICE_ID_INTEL_ICH10_4 0x3a30 -#define PCI_DEVICE_ID_INTEL_ICH10_5 0x3a60 -#define PCI_DEVICE_ID_INTEL_5_3400_SERIES_LPC_MIN 0x3b00 -#define PCI_DEVICE_ID_INTEL_5_3400_SERIES_LPC_MAX 0x3b1f -#define PCI_DEVICE_ID_INTEL_IOAT_SNB0 0x3c20 -#define PCI_DEVICE_ID_INTEL_IOAT_SNB1 0x3c21 -#define PCI_DEVICE_ID_INTEL_IOAT_SNB2 0x3c22 -#define PCI_DEVICE_ID_INTEL_IOAT_SNB3 0x3c23 -#define PCI_DEVICE_ID_INTEL_IOAT_SNB4 0x3c24 -#define PCI_DEVICE_ID_INTEL_IOAT_SNB5 0x3c25 -#define PCI_DEVICE_ID_INTEL_IOAT_SNB6 0x3c26 -#define PCI_DEVICE_ID_INTEL_IOAT_SNB7 0x3c27 -#define PCI_DEVICE_ID_INTEL_IOAT_SNB8 0x3c2e -#define PCI_DEVICE_ID_INTEL_IOAT_SNB9 0x3c2f -#define PCI_DEVICE_ID_INTEL_IOAT_SNB 0x402f -#define PCI_DEVICE_ID_INTEL_5100_16 0x65f0 -#define PCI_DEVICE_ID_INTEL_5100_21 0x65f5 -#define PCI_DEVICE_ID_INTEL_5100_22 0x65f6 -#define PCI_DEVICE_ID_INTEL_5400_ERR 0x4030 -#define PCI_DEVICE_ID_INTEL_5400_FBD0 0x4035 -#define PCI_DEVICE_ID_INTEL_5400_FBD1 0x4036 -#define PCI_DEVICE_ID_INTEL_IOAT_SCNB 0x65ff -#define PCI_DEVICE_ID_INTEL_EP80579_0 0x5031 -#define PCI_DEVICE_ID_INTEL_EP80579_1 0x5032 -#define PCI_DEVICE_ID_INTEL_82371SB_0 0x7000 -#define PCI_DEVICE_ID_INTEL_82371SB_1 0x7010 -#define PCI_DEVICE_ID_INTEL_82371SB_2 0x7020 -#define PCI_DEVICE_ID_INTEL_82437VX 0x7030 -#define PCI_DEVICE_ID_INTEL_82439TX 0x7100 -#define PCI_DEVICE_ID_INTEL_82371AB_0 0x7110 -#define PCI_DEVICE_ID_INTEL_82371AB 0x7111 -#define PCI_DEVICE_ID_INTEL_82371AB_2 0x7112 -#define PCI_DEVICE_ID_INTEL_82371AB_3 0x7113 -#define PCI_DEVICE_ID_INTEL_82810_MC1 0x7120 -#define PCI_DEVICE_ID_INTEL_82810_IG1 0x7121 -#define PCI_DEVICE_ID_INTEL_82810_MC3 0x7122 -#define PCI_DEVICE_ID_INTEL_82810_IG3 0x7123 -#define PCI_DEVICE_ID_INTEL_82810E_MC 0x7124 -#define PCI_DEVICE_ID_INTEL_82810E_IG 0x7125 -#define PCI_DEVICE_ID_INTEL_82443LX_0 0x7180 -#define PCI_DEVICE_ID_INTEL_82443LX_1 0x7181 -#define PCI_DEVICE_ID_INTEL_82443BX_0 0x7190 -#define PCI_DEVICE_ID_INTEL_82443BX_1 0x7191 -#define PCI_DEVICE_ID_INTEL_82443BX_2 0x7192 -#define PCI_DEVICE_ID_INTEL_440MX 0x7195 -#define PCI_DEVICE_ID_INTEL_440MX_6 0x7196 -#define PCI_DEVICE_ID_INTEL_82443MX_0 0x7198 -#define PCI_DEVICE_ID_INTEL_82443MX_1 0x7199 -#define PCI_DEVICE_ID_INTEL_82443MX_3 0x719b -#define PCI_DEVICE_ID_INTEL_82443GX_0 0x71a0 -#define PCI_DEVICE_ID_INTEL_82443GX_2 0x71a2 -#define PCI_DEVICE_ID_INTEL_82372FB_1 0x7601 -#define PCI_DEVICE_ID_INTEL_SCH_LPC 0x8119 -#define PCI_DEVICE_ID_INTEL_SCH_IDE 0x811a -#define PCI_DEVICE_ID_INTEL_ITC_LPC 0x8186 -#define PCI_DEVICE_ID_INTEL_82454GX 0x84c4 -#define PCI_DEVICE_ID_INTEL_82450GX 0x84c5 -#define PCI_DEVICE_ID_INTEL_82451NX 0x84ca -#define PCI_DEVICE_ID_INTEL_82454NX 0x84cb -#define PCI_DEVICE_ID_INTEL_84460GX 0x84ea -#define PCI_DEVICE_ID_INTEL_IXP4XX 0x8500 -#define PCI_DEVICE_ID_INTEL_IXP2800 0x9004 -#define PCI_DEVICE_ID_INTEL_S21152BB 0xb152 - -#define PCI_VENDOR_ID_SCALEMP 0x8686 -#define PCI_DEVICE_ID_SCALEMP_VSMP_CTL 0x1010 - -#define PCI_VENDOR_ID_COMPUTONE 0x8e0e -#define PCI_DEVICE_ID_COMPUTONE_IP2EX 0x0291 -#define PCI_DEVICE_ID_COMPUTONE_PG 0x0302 -#define PCI_SUBVENDOR_ID_COMPUTONE 0x8e0e -#define PCI_SUBDEVICE_ID_COMPUTONE_PG4 0x0001 -#define PCI_SUBDEVICE_ID_COMPUTONE_PG8 0x0002 -#define PCI_SUBDEVICE_ID_COMPUTONE_PG6 0x0003 - -#define PCI_VENDOR_ID_KTI 0x8e2e - -#define PCI_VENDOR_ID_ADAPTEC 0x9004 -#define PCI_DEVICE_ID_ADAPTEC_7810 0x1078 -#define PCI_DEVICE_ID_ADAPTEC_7821 0x2178 -#define PCI_DEVICE_ID_ADAPTEC_38602 0x3860 -#define PCI_DEVICE_ID_ADAPTEC_7850 0x5078 -#define PCI_DEVICE_ID_ADAPTEC_7855 0x5578 -#define PCI_DEVICE_ID_ADAPTEC_3860 0x6038 -#define PCI_DEVICE_ID_ADAPTEC_1480A 0x6075 -#define PCI_DEVICE_ID_ADAPTEC_7860 0x6078 -#define PCI_DEVICE_ID_ADAPTEC_7861 0x6178 -#define PCI_DEVICE_ID_ADAPTEC_7870 0x7078 -#define PCI_DEVICE_ID_ADAPTEC_7871 0x7178 -#define PCI_DEVICE_ID_ADAPTEC_7872 0x7278 -#define PCI_DEVICE_ID_ADAPTEC_7873 0x7378 -#define PCI_DEVICE_ID_ADAPTEC_7874 0x7478 -#define PCI_DEVICE_ID_ADAPTEC_7895 0x7895 -#define PCI_DEVICE_ID_ADAPTEC_7880 0x8078 -#define PCI_DEVICE_ID_ADAPTEC_7881 0x8178 -#define PCI_DEVICE_ID_ADAPTEC_7882 0x8278 -#define PCI_DEVICE_ID_ADAPTEC_7883 0x8378 -#define PCI_DEVICE_ID_ADAPTEC_7884 0x8478 -#define PCI_DEVICE_ID_ADAPTEC_7885 0x8578 -#define PCI_DEVICE_ID_ADAPTEC_7886 0x8678 -#define PCI_DEVICE_ID_ADAPTEC_7887 0x8778 -#define PCI_DEVICE_ID_ADAPTEC_7888 0x8878 - -#define PCI_VENDOR_ID_ADAPTEC2 0x9005 -#define PCI_DEVICE_ID_ADAPTEC2_2940U2 0x0010 -#define PCI_DEVICE_ID_ADAPTEC2_2930U2 0x0011 -#define PCI_DEVICE_ID_ADAPTEC2_7890B 0x0013 -#define PCI_DEVICE_ID_ADAPTEC2_7890 0x001f -#define PCI_DEVICE_ID_ADAPTEC2_3940U2 0x0050 -#define PCI_DEVICE_ID_ADAPTEC2_3950U2D 0x0051 -#define PCI_DEVICE_ID_ADAPTEC2_7896 0x005f -#define PCI_DEVICE_ID_ADAPTEC2_7892A 0x0080 -#define PCI_DEVICE_ID_ADAPTEC2_7892B 0x0081 -#define PCI_DEVICE_ID_ADAPTEC2_7892D 0x0083 -#define PCI_DEVICE_ID_ADAPTEC2_7892P 0x008f -#define PCI_DEVICE_ID_ADAPTEC2_7899A 0x00c0 -#define PCI_DEVICE_ID_ADAPTEC2_7899B 0x00c1 -#define PCI_DEVICE_ID_ADAPTEC2_7899D 0x00c3 -#define PCI_DEVICE_ID_ADAPTEC2_7899P 0x00cf -#define PCI_DEVICE_ID_ADAPTEC2_OBSIDIAN 0x0500 -#define PCI_DEVICE_ID_ADAPTEC2_SCAMP 0x0503 - -#define PCI_VENDOR_ID_HOLTEK 0x9412 -#define PCI_DEVICE_ID_HOLTEK_6565 0x6565 - -#define PCI_VENDOR_ID_NETMOS 0x9710 -#define PCI_DEVICE_ID_NETMOS_9705 0x9705 -#define PCI_DEVICE_ID_NETMOS_9715 0x9715 -#define PCI_DEVICE_ID_NETMOS_9735 0x9735 -#define PCI_DEVICE_ID_NETMOS_9745 0x9745 -#define PCI_DEVICE_ID_NETMOS_9755 0x9755 -#define PCI_DEVICE_ID_NETMOS_9805 0x9805 -#define PCI_DEVICE_ID_NETMOS_9815 0x9815 -#define PCI_DEVICE_ID_NETMOS_9835 0x9835 -#define PCI_DEVICE_ID_NETMOS_9845 0x9845 -#define PCI_DEVICE_ID_NETMOS_9855 0x9855 -#define PCI_DEVICE_ID_NETMOS_9865 0x9865 -#define PCI_DEVICE_ID_NETMOS_9900 0x9900 -#define PCI_DEVICE_ID_NETMOS_9901 0x9901 -#define PCI_DEVICE_ID_NETMOS_9904 0x9904 -#define PCI_DEVICE_ID_NETMOS_9912 0x9912 -#define PCI_DEVICE_ID_NETMOS_9922 0x9922 - -#define PCI_VENDOR_ID_3COM_2 0xa727 - -#define PCI_VENDOR_ID_DIGIUM 0xd161 -#define PCI_DEVICE_ID_DIGIUM_HFC4S 0xb410 - -#define PCI_SUBVENDOR_ID_EXSYS 0xd84d -#define PCI_SUBDEVICE_ID_EXSYS_4014 0x4014 -#define PCI_SUBDEVICE_ID_EXSYS_4055 0x4055 - -#define PCI_VENDOR_ID_TIGERJET 0xe159 -#define PCI_DEVICE_ID_TIGERJET_300 0x0001 -#define PCI_DEVICE_ID_TIGERJET_100 0x0002 - -#define PCI_VENDOR_ID_XILINX_RME 0xea60 -#define PCI_DEVICE_ID_RME_DIGI32 0x9896 -#define PCI_DEVICE_ID_RME_DIGI32_PRO 0x9897 -#define PCI_DEVICE_ID_RME_DIGI32_8 0x9898 - -#define PCI_VENDOR_ID_XEN 0x5853 -#define PCI_DEVICE_ID_XEN_PLATFORM 0x0001 - -#define PCI_VENDOR_ID_OCZ 0x1b85 diff --git a/openairITS/mac/DOT11/include/linux/pm_qos.h b/openairITS/mac/DOT11/include/linux/pm_qos.h deleted file mode 100644 index c58c1c1f01..0000000000 --- a/openairITS/mac/DOT11/include/linux/pm_qos.h +++ /dev/null @@ -1,12 +0,0 @@ -#ifndef _COMPAT_LINUX_PM_QOS_H -#define _COMPAT_LINUX_PM_QOS_H 1 - -#include - -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,2,0)) -#include_next -#else -#include -#endif /* (LINUX_VERSION_CODE >= KERNEL_VERSION(3,2,0)) */ - -#endif /* _COMPAT_LINUX_PM_QOS_H */ diff --git a/openairITS/mac/DOT11/include/linux/pm_qos_params.h b/openairITS/mac/DOT11/include/linux/pm_qos_params.h deleted file mode 100644 index d0e3ad863a..0000000000 --- a/openairITS/mac/DOT11/include/linux/pm_qos_params.h +++ /dev/null @@ -1,36 +0,0 @@ -#include - -#ifndef __COMPAT_LINUX_PM_QOS_PARAMS_H -#define __COMPAT_LINUX_PM_QOS_PARAMS_H - -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,25)) -#include_next -#else -/* interface for the pm_qos_power infrastructure of the linux kernel. - * - * Mark Gross - */ -#include -#include -#include - -#define PM_QOS_RESERVED 0 -#define PM_QOS_CPU_DMA_LATENCY 1 -#define PM_QOS_NETWORK_LATENCY 2 -#define PM_QOS_NETWORK_THROUGHPUT 3 -#define PM_QOS_SYSTEM_BUS_FREQ 4 - -#define PM_QOS_NUM_CLASSES 5 -#define PM_QOS_DEFAULT_VALUE -1 - -int pm_qos_add_requirement(int qos, char *name, s32 value); -int pm_qos_update_requirement(int qos, char *name, s32 new_value); -void pm_qos_remove_requirement(int qos, char *name); - -int pm_qos_requirement(int qos); - -int pm_qos_add_notifier(int qos, struct notifier_block *notifier); -int pm_qos_remove_notifier(int qos, struct notifier_block *notifier); -#endif /* (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,25)) */ - -#endif diff --git a/openairITS/mac/DOT11/include/linux/pm_runtime.h b/openairITS/mac/DOT11/include/linux/pm_runtime.h deleted file mode 100644 index eec965ba0d..0000000000 --- a/openairITS/mac/DOT11/include/linux/pm_runtime.h +++ /dev/null @@ -1,14 +0,0 @@ -#include - -#ifndef __COMPAT_LINUX_PM_RUNTIME_H -#define __COMPAT_LINUX_PM_RUNTIME_H - -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,32)) -#include_next -#else - -static inline void pm_runtime_enable(struct device *dev) {} - -#endif /* (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,32)) */ - -#endif diff --git a/openairITS/mac/DOT11/include/linux/printk.h b/openairITS/mac/DOT11/include/linux/printk.h deleted file mode 100644 index c0822ac488..0000000000 --- a/openairITS/mac/DOT11/include/linux/printk.h +++ /dev/null @@ -1,12 +0,0 @@ -#ifndef _COMPAT_LINUX_PRINTK_H -#define _COMPAT_LINUX_PRINTK_H 1 - -#include - -#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,36)) -#include_next -#else -#include -#endif /* (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,35)) */ - -#endif /* _COMPAT_LINUX_PRINTK_H */ diff --git a/openairITS/mac/DOT11/include/linux/rfkill.h b/openairITS/mac/DOT11/include/linux/rfkill.h deleted file mode 100644 index d615ac9f5b..0000000000 --- a/openairITS/mac/DOT11/include/linux/rfkill.h +++ /dev/null @@ -1,32 +0,0 @@ -#ifndef __COMPAT_RFKILL_H -#define __COMPAT_RFKILL_H - -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,31)) - -#include_next - -#else - -#include - -#undef CONFIG_RFKILL -#undef CONFIG_RFKILL_INPUT -#undef CONFIG_RFKILL_LEDS - -#ifdef CONFIG_RFKILL_BACKPORT -#define CONFIG_RFKILL 1 -#endif - -#ifdef CONFIG_RFKILL_BACKPORT_INPUT -#define CONFIG_RFKILL_INPUT -#endif - -#ifdef CONFIG_RFKILL_BACKPORT_LEDS -#define CONFIG_RFKILL_LEDS -#endif - -#include - -#endif - -#endif diff --git a/openairITS/mac/DOT11/include/linux/rfkill_backport.h b/openairITS/mac/DOT11/include/linux/rfkill_backport.h deleted file mode 100644 index 6fdf02737e..0000000000 --- a/openairITS/mac/DOT11/include/linux/rfkill_backport.h +++ /dev/null @@ -1,359 +0,0 @@ -#ifndef __RFKILL_H -#define __RFKILL_H - -/* - * Copyright (C) 2006 - 2007 Ivo van Doorn - * Copyright (C) 2007 Dmitry Torokhov - * Copyright 2009 Johannes Berg - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#include - -/* define userspace visible states */ -#define RFKILL_STATE_SOFT_BLOCKED 0 -#define RFKILL_STATE_UNBLOCKED 1 -#define RFKILL_STATE_HARD_BLOCKED 2 - -/** - * enum rfkill_type - type of rfkill switch. - * - * @RFKILL_TYPE_ALL: toggles all switches (requests only - not a switch type) - * @RFKILL_TYPE_WLAN: switch is on a 802.11 wireless network device. - * @RFKILL_TYPE_BLUETOOTH: switch is on a bluetooth device. - * @RFKILL_TYPE_UWB: switch is on a ultra wideband device. - * @RFKILL_TYPE_WIMAX: switch is on a WiMAX device. - * @RFKILL_TYPE_WWAN: switch is on a wireless WAN device. - * @RFKILL_TYPE_GPS: switch is on a GPS device. - * @RFKILL_TYPE_FM: switch is on a FM radio device. - * @NUM_RFKILL_TYPES: number of defined rfkill types - */ -enum rfkill_type { - RFKILL_TYPE_ALL = 0, - RFKILL_TYPE_WLAN, - RFKILL_TYPE_BLUETOOTH, - RFKILL_TYPE_UWB, - RFKILL_TYPE_WIMAX, - RFKILL_TYPE_WWAN, - RFKILL_TYPE_GPS, - RFKILL_TYPE_FM, - NUM_RFKILL_TYPES, -}; - -/** - * enum rfkill_operation - operation types - * @RFKILL_OP_ADD: a device was added - * @RFKILL_OP_DEL: a device was removed - * @RFKILL_OP_CHANGE: a device's state changed -- userspace changes one device - * @RFKILL_OP_CHANGE_ALL: userspace changes all devices (of a type, or all) - */ -enum rfkill_operation { - RFKILL_OP_ADD = 0, - RFKILL_OP_DEL, - RFKILL_OP_CHANGE, - RFKILL_OP_CHANGE_ALL, -}; - -/** - * struct rfkill_event - events for userspace on /dev/rfkill - * @idx: index of dev rfkill - * @type: type of the rfkill struct - * @op: operation code - * @hard: hard state (0/1) - * @soft: soft state (0/1) - * - * Structure used for userspace communication on /dev/rfkill, - * used for events from the kernel and control to the kernel. - */ -struct rfkill_event { - __u32 idx; - __u8 type; - __u8 op; - __u8 soft, hard; -} __attribute__((packed)); - -/* - * We are planning to be backward and forward compatible with changes - * to the event struct, by adding new, optional, members at the end. - * When reading an event (whether the kernel from userspace or vice - * versa) we need to accept anything that's at least as large as the - * version 1 event size, but might be able to accept other sizes in - * the future. - * - * One exception is the kernel -- we already have two event sizes in - * that we've made the 'hard' member optional since our only option - * is to ignore it anyway. - */ -#define RFKILL_EVENT_SIZE_V1 8 - -/* ioctl for turning off rfkill-input (if present) */ -#define RFKILL_IOC_MAGIC 'R' -#define RFKILL_IOC_NOINPUT 1 -#define RFKILL_IOCTL_NOINPUT _IO(RFKILL_IOC_MAGIC, RFKILL_IOC_NOINPUT) - -/* and that's all userspace gets */ -#ifdef __KERNEL__ -/* don't allow anyone to use these in the kernel */ -enum rfkill_user_states { - RFKILL_USER_STATE_SOFT_BLOCKED = RFKILL_STATE_SOFT_BLOCKED, - RFKILL_USER_STATE_UNBLOCKED = RFKILL_STATE_UNBLOCKED, - RFKILL_USER_STATE_HARD_BLOCKED = RFKILL_STATE_HARD_BLOCKED, -}; -#undef RFKILL_STATE_SOFT_BLOCKED -#undef RFKILL_STATE_UNBLOCKED -#undef RFKILL_STATE_HARD_BLOCKED - -#include -#include -#include -#include -#include - -struct device; -/* this is opaque */ -struct rfkill; - -/** - * struct rfkill_ops - rfkill driver methods - * - * @poll: poll the rfkill block state(s) -- only assign this method - * when you need polling. When called, simply call one of the - * rfkill_set{,_hw,_sw}_state family of functions. If the hw - * is getting unblocked you need to take into account the return - * value of those functions to make sure the software block is - * properly used. - * @query: query the rfkill block state(s) and call exactly one of the - * rfkill_set{,_hw,_sw}_state family of functions. Assign this - * method if input events can cause hardware state changes to make - * the rfkill core query your driver before setting a requested - * block. - * @set_block: turn the transmitter on (blocked == false) or off - * (blocked == true) -- ignore and return 0 when hard blocked. - * This callback must be assigned. - */ -struct rfkill_ops { - void (*poll)(struct rfkill *rfkill, void *data); - void (*query)(struct rfkill *rfkill, void *data); - int (*set_block)(void *data, bool blocked); -}; - -#if defined(CONFIG_RFKILL) || defined(CONFIG_RFKILL_MODULE) -/** - * rfkill_alloc - allocate rfkill structure - * @name: name of the struct -- the string is not copied internally - * @parent: device that has rf switch on it - * @type: type of the switch (RFKILL_TYPE_*) - * @ops: rfkill methods - * @ops_data: data passed to each method - * - * This function should be called by the transmitter driver to allocate an - * rfkill structure. Returns %NULL on failure. - */ -struct rfkill * __must_check rfkill_alloc(const char *name, - struct device *parent, - const enum rfkill_type type, - const struct rfkill_ops *ops, - void *ops_data); - -/** - * rfkill_register - Register a rfkill structure. - * @rfkill: rfkill structure to be registered - * - * This function should be called by the transmitter driver to register - * the rfkill structure. Before calling this function the driver needs - * to be ready to service method calls from rfkill. - * - * If rfkill_init_sw_state() is not called before registration, - * set_block() will be called to initialize the software blocked state - * to a default value. - * - * If the hardware blocked state is not set before registration, - * it is assumed to be unblocked. - */ -int __must_check rfkill_register(struct rfkill *rfkill); - -/** - * rfkill_pause_polling(struct rfkill *rfkill) - * - * Pause polling -- say transmitter is off for other reasons. - * NOTE: not necessary for suspend/resume -- in that case the - * core stops polling anyway - */ -void rfkill_pause_polling(struct rfkill *rfkill); - -/** - * rfkill_resume_polling(struct rfkill *rfkill) - * - * Pause polling -- say transmitter is off for other reasons. - * NOTE: not necessary for suspend/resume -- in that case the - * core stops polling anyway - */ -void rfkill_resume_polling(struct rfkill *rfkill); - - -/** - * rfkill_unregister - Unregister a rfkill structure. - * @rfkill: rfkill structure to be unregistered - * - * This function should be called by the network driver during device - * teardown to destroy rfkill structure. Until it returns, the driver - * needs to be able to service method calls. - */ -void rfkill_unregister(struct rfkill *rfkill); - -/** - * rfkill_destroy - free rfkill structure - * @rfkill: rfkill structure to be destroyed - * - * Destroys the rfkill structure. - */ -void rfkill_destroy(struct rfkill *rfkill); - -/** - * rfkill_set_hw_state - Set the internal rfkill hardware block state - * @rfkill: pointer to the rfkill class to modify. - * @state: the current hardware block state to set - * - * rfkill drivers that get events when the hard-blocked state changes - * use this function to notify the rfkill core (and through that also - * userspace) of the current state. They should also use this after - * resume if the state could have changed. - * - * You need not (but may) call this function if poll_state is assigned. - * - * This function can be called in any context, even from within rfkill - * callbacks. - * - * The function returns the combined block state (true if transmitter - * should be blocked) so that drivers need not keep track of the soft - * block state -- which they might not be able to. - */ -bool rfkill_set_hw_state(struct rfkill *rfkill, bool blocked); - -/** - * rfkill_set_sw_state - Set the internal rfkill software block state - * @rfkill: pointer to the rfkill class to modify. - * @state: the current software block state to set - * - * rfkill drivers that get events when the soft-blocked state changes - * (yes, some platforms directly act on input but allow changing again) - * use this function to notify the rfkill core (and through that also - * userspace) of the current state. - * - * Drivers should also call this function after resume if the state has - * been changed by the user. This only makes sense for "persistent" - * devices (see rfkill_init_sw_state()). - * - * This function can be called in any context, even from within rfkill - * callbacks. - * - * The function returns the combined block state (true if transmitter - * should be blocked). - */ -bool rfkill_set_sw_state(struct rfkill *rfkill, bool blocked); - -/** - * rfkill_init_sw_state - Initialize persistent software block state - * @rfkill: pointer to the rfkill class to modify. - * @state: the current software block state to set - * - * rfkill drivers that preserve their software block state over power off - * use this function to notify the rfkill core (and through that also - * userspace) of their initial state. It should only be used before - * registration. - * - * In addition, it marks the device as "persistent", an attribute which - * can be read by userspace. Persistent devices are expected to preserve - * their own state when suspended. - */ -void rfkill_init_sw_state(struct rfkill *rfkill, bool blocked); - -/** - * rfkill_set_states - Set the internal rfkill block states - * @rfkill: pointer to the rfkill class to modify. - * @sw: the current software block state to set - * @hw: the current hardware block state to set - * - * This function can be called in any context, even from within rfkill - * callbacks. - */ -void rfkill_set_states(struct rfkill *rfkill, bool sw, bool hw); - -/** - * rfkill_blocked - query rfkill block - * - * @rfkill: rfkill struct to query - */ -bool rfkill_blocked(struct rfkill *rfkill); -#else /* !RFKILL */ -static inline struct rfkill * __must_check -rfkill_alloc(const char *name, - struct device *parent, - const enum rfkill_type type, - const struct rfkill_ops *ops, - void *ops_data) -{ - return ERR_PTR(-ENODEV); -} - -static inline int __must_check rfkill_register(struct rfkill *rfkill) -{ - if (rfkill == ERR_PTR(-ENODEV)) - return 0; - return -EINVAL; -} - -static inline void rfkill_pause_polling(struct rfkill *rfkill) -{ -} - -static inline void rfkill_resume_polling(struct rfkill *rfkill) -{ -} - -static inline void rfkill_unregister(struct rfkill *rfkill) -{ -} - -static inline void rfkill_destroy(struct rfkill *rfkill) -{ -} - -static inline bool rfkill_set_hw_state(struct rfkill *rfkill, bool blocked) -{ - return blocked; -} - -static inline bool rfkill_set_sw_state(struct rfkill *rfkill, bool blocked) -{ - return blocked; -} - -static inline void rfkill_init_sw_state(struct rfkill *rfkill, bool blocked) -{ -} - -static inline void rfkill_set_states(struct rfkill *rfkill, bool sw, bool hw) -{ -} - -static inline bool rfkill_blocked(struct rfkill *rfkill) -{ - return false; -} -#endif /* RFKILL || RFKILL_MODULE */ - -#endif /* __KERNEL__ */ - -#endif /* RFKILL_H */ diff --git a/openairITS/mac/DOT11/include/linux/semaphore.h b/openairITS/mac/DOT11/include/linux/semaphore.h deleted file mode 100644 index 78af4db376..0000000000 --- a/openairITS/mac/DOT11/include/linux/semaphore.h +++ /dev/null @@ -1,12 +0,0 @@ -#ifndef _COMPAT_LINUX_SEMAPHORE_H -#define _COMPAT_LINUX_SEMAPHORE_H 1 - -#include - -#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,25)) -#include_next -#else -#include -#endif /* (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,25)) */ - -#endif /* _COMPAT_LINUX_SEMAPHORE_H */ diff --git a/openairITS/mac/DOT11/include/linux/spi/libertas_spi.h b/openairITS/mac/DOT11/include/linux/spi/libertas_spi.h deleted file mode 100644 index 1b5d5384fc..0000000000 --- a/openairITS/mac/DOT11/include/linux/spi/libertas_spi.h +++ /dev/null @@ -1,29 +0,0 @@ -/* - * board-specific data for the libertas_spi driver. - * - * Copyright 2008 Analog Devices Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or (at - * your option) any later version. - */ -#ifndef _LIBERTAS_SPI_H_ -#define _LIBERTAS_SPI_H_ - -struct spi_device; - -struct libertas_spi_platform_data { - /* There are two ways to read data from the WLAN module's SPI - * interface. Setting 0 or 1 here controls which one is used. - * - * Usually you want to set use_dummy_writes = 1. - * However, if that doesn't work or if you are using a slow SPI clock - * speed, you may want to use 0 here. */ - u16 use_dummy_writes; - - /* Board specific setup/teardown */ - int (*setup)(struct spi_device *spi); - int (*teardown)(struct spi_device *spi); -}; -#endif diff --git a/openairITS/mac/DOT11/include/linux/ssb/ssb.h b/openairITS/mac/DOT11/include/linux/ssb/ssb.h deleted file mode 100644 index d276831800..0000000000 --- a/openairITS/mac/DOT11/include/linux/ssb/ssb.h +++ /dev/null @@ -1,625 +0,0 @@ -#ifndef LINUX_SSB_H_ -#define LINUX_SSB_H_ - -#include -#include -#include -#include -#include -#include -#include - -#include - - -struct pcmcia_device; -struct ssb_bus; -struct ssb_driver; - -struct ssb_sprom_core_pwr_info { - u8 itssi_2g, itssi_5g; - u8 maxpwr_2g, maxpwr_5gl, maxpwr_5g, maxpwr_5gh; - u16 pa_2g[4], pa_5gl[4], pa_5g[4], pa_5gh[4]; -}; - -struct ssb_sprom { - u8 revision; - u8 il0mac[6]; /* MAC address for 802.11b/g */ - u8 et0mac[6]; /* MAC address for Ethernet */ - u8 et1mac[6]; /* MAC address for 802.11a */ - u8 et0phyaddr; /* MII address for enet0 */ - u8 et1phyaddr; /* MII address for enet1 */ - u8 et0mdcport; /* MDIO for enet0 */ - u8 et1mdcport; /* MDIO for enet1 */ - u16 board_rev; /* Board revision number from SPROM. */ - u16 board_num; /* Board number from SPROM. */ - u16 board_type; /* Board type from SPROM. */ - u8 country_code; /* Country Code */ - char alpha2[2]; /* Country Code as two chars like EU or US */ - u8 leddc_on_time; /* LED Powersave Duty Cycle On Count */ - u8 leddc_off_time; /* LED Powersave Duty Cycle Off Count */ - u8 ant_available_a; /* 2GHz antenna available bits (up to 4) */ - u8 ant_available_bg; /* 5GHz antenna available bits (up to 4) */ - u16 pa0b0; - u16 pa0b1; - u16 pa0b2; - u16 pa1b0; - u16 pa1b1; - u16 pa1b2; - u16 pa1lob0; - u16 pa1lob1; - u16 pa1lob2; - u16 pa1hib0; - u16 pa1hib1; - u16 pa1hib2; - u8 gpio0; /* GPIO pin 0 */ - u8 gpio1; /* GPIO pin 1 */ - u8 gpio2; /* GPIO pin 2 */ - u8 gpio3; /* GPIO pin 3 */ - u8 maxpwr_bg; /* 2.4GHz Amplifier Max Power (in dBm Q5.2) */ - u8 maxpwr_al; /* 5.2GHz Amplifier Max Power (in dBm Q5.2) */ - u8 maxpwr_a; /* 5.3GHz Amplifier Max Power (in dBm Q5.2) */ - u8 maxpwr_ah; /* 5.8GHz Amplifier Max Power (in dBm Q5.2) */ - u8 itssi_a; /* Idle TSSI Target for A-PHY */ - u8 itssi_bg; /* Idle TSSI Target for B/G-PHY */ - u8 tri2g; /* 2.4GHz TX isolation */ - u8 tri5gl; /* 5.2GHz TX isolation */ - u8 tri5g; /* 5.3GHz TX isolation */ - u8 tri5gh; /* 5.8GHz TX isolation */ - u8 txpid2g[4]; /* 2GHz TX power index */ - u8 txpid5gl[4]; /* 4.9 - 5.1GHz TX power index */ - u8 txpid5g[4]; /* 5.1 - 5.5GHz TX power index */ - u8 txpid5gh[4]; /* 5.5 - ...GHz TX power index */ - s8 rxpo2g; /* 2GHz RX power offset */ - s8 rxpo5g; /* 5GHz RX power offset */ - u8 rssisav2g; /* 2GHz RSSI params */ - u8 rssismc2g; - u8 rssismf2g; - u8 bxa2g; /* 2GHz BX arch */ - u8 rssisav5g; /* 5GHz RSSI params */ - u8 rssismc5g; - u8 rssismf5g; - u8 bxa5g; /* 5GHz BX arch */ - u16 cck2gpo; /* CCK power offset */ - u32 ofdm2gpo; /* 2.4GHz OFDM power offset */ - u32 ofdm5glpo; /* 5.2GHz OFDM power offset */ - u32 ofdm5gpo; /* 5.3GHz OFDM power offset */ - u32 ofdm5ghpo; /* 5.8GHz OFDM power offset */ - u16 boardflags_lo; /* Board flags (bits 0-15) */ - u16 boardflags_hi; /* Board flags (bits 16-31) */ - u16 boardflags2_lo; /* Board flags (bits 32-47) */ - u16 boardflags2_hi; /* Board flags (bits 48-63) */ - /* TODO store board flags in a single u64 */ - - struct ssb_sprom_core_pwr_info core_pwr_info[4]; - - /* Antenna gain values for up to 4 antennas - * on each band. Values in dBm/4 (Q5.2). Negative gain means the - * loss in the connectors is bigger than the gain. */ - struct { - s8 a0, a1, a2, a3; - } antenna_gain; - - struct { - struct { - u8 tssipos, extpa_gain, pdet_range, tr_iso, antswlut; - } ghz2; - struct { - u8 tssipos, extpa_gain, pdet_range, tr_iso, antswlut; - } ghz5; - } fem; - - u16 mcs2gpo[8]; - u16 mcs5gpo[8]; - u16 mcs5glpo[8]; - u16 mcs5ghpo[8]; - u8 opo; - - u8 rxgainerr2ga[3]; - u8 rxgainerr5gla[3]; - u8 rxgainerr5gma[3]; - u8 rxgainerr5gha[3]; - u8 rxgainerr5gua[3]; - - u8 noiselvl2ga[3]; - u8 noiselvl5gla[3]; - u8 noiselvl5gma[3]; - u8 noiselvl5gha[3]; - u8 noiselvl5gua[3]; - - u8 regrev; - u8 txchain; - u8 rxchain; - u8 antswitch; - u16 cddpo; - u16 stbcpo; - u16 bw40po; - u16 bwduppo; - - u8 tempthresh; - u8 tempoffset; - u16 rawtempsense; - u8 measpower; - u8 tempsense_slope; - u8 tempcorrx; - u8 tempsense_option; - u8 freqoffset_corr; - u8 iqcal_swp_dis; - u8 hw_iqcal_en; - u8 elna2g; - u8 elna5g; - u8 phycal_tempdelta; - u8 temps_period; - u8 temps_hysteresis; - u8 measpower1; - u8 measpower2; - u8 pcieingress_war; - - /* power per rate from sromrev 9 */ - u16 cckbw202gpo; - u16 cckbw20ul2gpo; - u32 legofdmbw202gpo; - u32 legofdmbw20ul2gpo; - u32 legofdmbw205glpo; - u32 legofdmbw20ul5glpo; - u32 legofdmbw205gmpo; - u32 legofdmbw20ul5gmpo; - u32 legofdmbw205ghpo; - u32 legofdmbw20ul5ghpo; - u32 mcsbw202gpo; - u32 mcsbw20ul2gpo; - u32 mcsbw402gpo; - u32 mcsbw205glpo; - u32 mcsbw20ul5glpo; - u32 mcsbw405glpo; - u32 mcsbw205gmpo; - u32 mcsbw20ul5gmpo; - u32 mcsbw405gmpo; - u32 mcsbw205ghpo; - u32 mcsbw20ul5ghpo; - u32 mcsbw405ghpo; - u16 mcs32po; - u16 legofdm40duppo; - u8 sar2g; - u8 sar5g; -}; - -/* Information about the PCB the circuitry is soldered on. */ -struct ssb_boardinfo { - u16 vendor; - u16 type; - u8 rev; -}; - - -struct ssb_device; -/* Lowlevel read/write operations on the device MMIO. - * Internal, don't use that outside of ssb. */ -struct ssb_bus_ops { - u8 (*read8)(struct ssb_device *dev, u16 offset); - u16 (*read16)(struct ssb_device *dev, u16 offset); - u32 (*read32)(struct ssb_device *dev, u16 offset); - void (*write8)(struct ssb_device *dev, u16 offset, u8 value); - void (*write16)(struct ssb_device *dev, u16 offset, u16 value); - void (*write32)(struct ssb_device *dev, u16 offset, u32 value); -#ifdef CONFIG_SSB_BLOCKIO - void (*block_read)(struct ssb_device *dev, void *buffer, - size_t count, u16 offset, u8 reg_width); - void (*block_write)(struct ssb_device *dev, const void *buffer, - size_t count, u16 offset, u8 reg_width); -#endif -}; - - -/* Core-ID values. */ -#define SSB_DEV_CHIPCOMMON 0x800 -#define SSB_DEV_ILINE20 0x801 -#define SSB_DEV_SDRAM 0x803 -#define SSB_DEV_PCI 0x804 -#define SSB_DEV_MIPS 0x805 -#define SSB_DEV_ETHERNET 0x806 -#define SSB_DEV_V90 0x807 -#define SSB_DEV_USB11_HOSTDEV 0x808 -#define SSB_DEV_ADSL 0x809 -#define SSB_DEV_ILINE100 0x80A -#define SSB_DEV_IPSEC 0x80B -#define SSB_DEV_PCMCIA 0x80D -#define SSB_DEV_INTERNAL_MEM 0x80E -#define SSB_DEV_MEMC_SDRAM 0x80F -#define SSB_DEV_EXTIF 0x811 -#define SSB_DEV_80211 0x812 -#define SSB_DEV_MIPS_3302 0x816 -#define SSB_DEV_USB11_HOST 0x817 -#define SSB_DEV_USB11_DEV 0x818 -#define SSB_DEV_USB20_HOST 0x819 -#define SSB_DEV_USB20_DEV 0x81A -#define SSB_DEV_SDIO_HOST 0x81B -#define SSB_DEV_ROBOSWITCH 0x81C -#define SSB_DEV_PARA_ATA 0x81D -#define SSB_DEV_SATA_XORDMA 0x81E -#define SSB_DEV_ETHERNET_GBIT 0x81F -#define SSB_DEV_PCIE 0x820 -#define SSB_DEV_MIMO_PHY 0x821 -#define SSB_DEV_SRAM_CTRLR 0x822 -#define SSB_DEV_MINI_MACPHY 0x823 -#define SSB_DEV_ARM_1176 0x824 -#define SSB_DEV_ARM_7TDMI 0x825 - -/* Vendor-ID values */ -#define SSB_VENDOR_BROADCOM 0x4243 - -/* Some kernel subsystems poke with dev->drvdata, so we must use the - * following ugly workaround to get from struct device to struct ssb_device */ -struct __ssb_dev_wrapper { - struct device dev; - struct ssb_device *sdev; -}; - -struct ssb_device { - /* Having a copy of the ops pointer in each dev struct - * is an optimization. */ - const struct ssb_bus_ops *ops; - - struct device *dev, *dma_dev; - - struct ssb_bus *bus; - struct ssb_device_id id; - - u8 core_index; - unsigned int irq; - - /* Internal-only stuff follows. */ - void *drvdata; /* Per-device data */ - void *devtypedata; /* Per-devicetype (eg 802.11) data */ -}; - -/* Go from struct device to struct ssb_device. */ -static inline -struct ssb_device * dev_to_ssb_dev(struct device *dev) -{ - struct __ssb_dev_wrapper *wrap; - wrap = container_of(dev, struct __ssb_dev_wrapper, dev); - return wrap->sdev; -} - -/* Device specific user data */ -static inline -void ssb_set_drvdata(struct ssb_device *dev, void *data) -{ - dev->drvdata = data; -} -static inline -void * ssb_get_drvdata(struct ssb_device *dev) -{ - return dev->drvdata; -} - -/* Devicetype specific user data. This is per device-type (not per device) */ -void ssb_set_devtypedata(struct ssb_device *dev, void *data); -static inline -void * ssb_get_devtypedata(struct ssb_device *dev) -{ - return dev->devtypedata; -} - - -struct ssb_driver { - const char *name; - const struct ssb_device_id *id_table; - - int (*probe)(struct ssb_device *dev, const struct ssb_device_id *id); - void (*remove)(struct ssb_device *dev); - int (*suspend)(struct ssb_device *dev, pm_message_t state); - int (*resume)(struct ssb_device *dev); - void (*shutdown)(struct ssb_device *dev); - - struct device_driver drv; -}; -#define drv_to_ssb_drv(_drv) container_of(_drv, struct ssb_driver, drv) - -extern int __ssb_driver_register(struct ssb_driver *drv, struct module *owner); -#define ssb_driver_register(drv) \ - __ssb_driver_register(drv, THIS_MODULE) - -extern void ssb_driver_unregister(struct ssb_driver *drv); - - - - -enum ssb_bustype { - SSB_BUSTYPE_SSB, /* This SSB bus is the system bus */ - SSB_BUSTYPE_PCI, /* SSB is connected to PCI bus */ - SSB_BUSTYPE_PCMCIA, /* SSB is connected to PCMCIA bus */ - SSB_BUSTYPE_SDIO, /* SSB is connected to SDIO bus */ -}; - -/* board_vendor */ -#define SSB_BOARDVENDOR_BCM 0x14E4 /* Broadcom */ -#define SSB_BOARDVENDOR_DELL 0x1028 /* Dell */ -#define SSB_BOARDVENDOR_HP 0x0E11 /* HP */ -/* board_type */ -#define SSB_BOARD_BCM94306MP 0x0418 -#define SSB_BOARD_BCM4309G 0x0421 -#define SSB_BOARD_BCM4306CB 0x0417 -#define SSB_BOARD_BCM4309MP 0x040C -#define SSB_BOARD_MP4318 0x044A -#define SSB_BOARD_BU4306 0x0416 -#define SSB_BOARD_BU4309 0x040A -/* chip_package */ -#define SSB_CHIPPACK_BCM4712S 1 /* Small 200pin 4712 */ -#define SSB_CHIPPACK_BCM4712M 2 /* Medium 225pin 4712 */ -#define SSB_CHIPPACK_BCM4712L 0 /* Large 340pin 4712 */ - -#include -#include -#include -#include - -struct ssb_bus { - /* The MMIO area. */ - void __iomem *mmio; - - const struct ssb_bus_ops *ops; - - /* The core currently mapped into the MMIO window. - * Not valid on all host-buses. So don't use outside of SSB. */ - struct ssb_device *mapped_device; - union { - /* Currently mapped PCMCIA segment. (bustype == SSB_BUSTYPE_PCMCIA only) */ - u8 mapped_pcmcia_seg; - /* Current SSB base address window for SDIO. */ - u32 sdio_sbaddr; - }; - /* Lock for core and segment switching. - * On PCMCIA-host busses this is used to protect the whole MMIO access. */ - spinlock_t bar_lock; - - /* The host-bus this backplane is running on. */ - enum ssb_bustype bustype; - /* Pointers to the host-bus. Check bustype before using any of these pointers. */ - union { - /* Pointer to the PCI bus (only valid if bustype == SSB_BUSTYPE_PCI). */ - struct pci_dev *host_pci; - /* Pointer to the PCMCIA device (only if bustype == SSB_BUSTYPE_PCMCIA). */ - struct pcmcia_device *host_pcmcia; - /* Pointer to the SDIO device (only if bustype == SSB_BUSTYPE_SDIO). */ - struct sdio_func *host_sdio; - }; - - /* See enum ssb_quirks */ - unsigned int quirks; - -#ifdef CONFIG_SSB_SPROM - /* Mutex to protect the SPROM writing. */ - struct mutex sprom_mutex; -#endif - - /* ID information about the Chip. */ - u16 chip_id; - u8 chip_rev; - u16 sprom_offset; - u16 sprom_size; /* number of words in sprom */ - u8 chip_package; - - /* List of devices (cores) on the backplane. */ - struct ssb_device devices[SSB_MAX_NR_CORES]; - u8 nr_devices; - - /* Software ID number for this bus. */ - unsigned int busnumber; - - /* The ChipCommon device (if available). */ - struct ssb_chipcommon chipco; - /* The PCI-core device (if available). */ - struct ssb_pcicore pcicore; - /* The MIPS-core device (if available). */ - struct ssb_mipscore mipscore; - /* The EXTif-core device (if available). */ - struct ssb_extif extif; - - /* The following structure elements are not available in early - * SSB initialization. Though, they are available for regular - * registered drivers at any stage. So be careful when - * using them in the ssb core code. */ - - /* ID information about the PCB. */ - struct ssb_boardinfo boardinfo; - /* Contents of the SPROM. */ - struct ssb_sprom sprom; - /* If the board has a cardbus slot, this is set to true. */ - bool has_cardbus_slot; - -#ifdef CONFIG_SSB_EMBEDDED - /* Lock for GPIO register access. */ - spinlock_t gpio_lock; -#endif /* EMBEDDED */ - - /* Internal-only stuff follows. Do not touch. */ - struct list_head list; -#ifdef CONFIG_SSB_DEBUG - /* Is the bus already powered up? */ - bool powered_up; - int power_warn_count; -#endif /* DEBUG */ -}; - -enum ssb_quirks { - /* SDIO connected card requires performing a read after writing a 32-bit value */ - SSB_QUIRK_SDIO_READ_AFTER_WRITE32 = (1 << 0), -}; - -/* The initialization-invariants. */ -struct ssb_init_invariants { - /* Versioning information about the PCB. */ - struct ssb_boardinfo boardinfo; - /* The SPROM information. That's either stored in an - * EEPROM or NVRAM on the board. */ - struct ssb_sprom sprom; - /* If the board has a cardbus slot, this is set to true. */ - bool has_cardbus_slot; -}; -/* Type of function to fetch the invariants. */ -typedef int (*ssb_invariants_func_t)(struct ssb_bus *bus, - struct ssb_init_invariants *iv); - -/* Register a SSB system bus. get_invariants() is called after the - * basic system devices are initialized. - * The invariants are usually fetched from some NVRAM. - * Put the invariants into the struct pointed to by iv. */ -extern int ssb_bus_ssbbus_register(struct ssb_bus *bus, - unsigned long baseaddr, - ssb_invariants_func_t get_invariants); -#ifdef CONFIG_SSB_PCIHOST -extern int ssb_bus_pcibus_register(struct ssb_bus *bus, - struct pci_dev *host_pci); -#endif /* CONFIG_SSB_PCIHOST */ -#ifdef CONFIG_SSB_PCMCIAHOST -extern int ssb_bus_pcmciabus_register(struct ssb_bus *bus, - struct pcmcia_device *pcmcia_dev, - unsigned long baseaddr); -#endif /* CONFIG_SSB_PCMCIAHOST */ -#ifdef CONFIG_SSB_SDIOHOST -extern int ssb_bus_sdiobus_register(struct ssb_bus *bus, - struct sdio_func *sdio_func, - unsigned int quirks); -#endif /* CONFIG_SSB_SDIOHOST */ - - -extern void ssb_bus_unregister(struct ssb_bus *bus); - -/* Does the device have an SPROM? */ -extern bool ssb_is_sprom_available(struct ssb_bus *bus); - -/* Set a fallback SPROM. - * See kdoc at the function definition for complete documentation. */ -extern int ssb_arch_register_fallback_sprom( - int (*sprom_callback)(struct ssb_bus *bus, - struct ssb_sprom *out)); - -/* Suspend a SSB bus. - * Call this from the parent bus suspend routine. */ -extern int ssb_bus_suspend(struct ssb_bus *bus); -/* Resume a SSB bus. - * Call this from the parent bus resume routine. */ -extern int ssb_bus_resume(struct ssb_bus *bus); - -extern u32 ssb_clockspeed(struct ssb_bus *bus); - -/* Is the device enabled in hardware? */ -int ssb_device_is_enabled(struct ssb_device *dev); -/* Enable a device and pass device-specific SSB_TMSLOW flags. - * If no device-specific flags are available, use 0. */ -void ssb_device_enable(struct ssb_device *dev, u32 core_specific_flags); -/* Disable a device in hardware and pass SSB_TMSLOW flags (if any). */ -void ssb_device_disable(struct ssb_device *dev, u32 core_specific_flags); - - -/* Device MMIO register read/write functions. */ -static inline u8 ssb_read8(struct ssb_device *dev, u16 offset) -{ - return dev->ops->read8(dev, offset); -} -static inline u16 ssb_read16(struct ssb_device *dev, u16 offset) -{ - return dev->ops->read16(dev, offset); -} -static inline u32 ssb_read32(struct ssb_device *dev, u16 offset) -{ - return dev->ops->read32(dev, offset); -} -static inline void ssb_write8(struct ssb_device *dev, u16 offset, u8 value) -{ - dev->ops->write8(dev, offset, value); -} -static inline void ssb_write16(struct ssb_device *dev, u16 offset, u16 value) -{ - dev->ops->write16(dev, offset, value); -} -static inline void ssb_write32(struct ssb_device *dev, u16 offset, u32 value) -{ - dev->ops->write32(dev, offset, value); -} -#ifdef CONFIG_SSB_BLOCKIO -static inline void ssb_block_read(struct ssb_device *dev, void *buffer, - size_t count, u16 offset, u8 reg_width) -{ - dev->ops->block_read(dev, buffer, count, offset, reg_width); -} - -static inline void ssb_block_write(struct ssb_device *dev, const void *buffer, - size_t count, u16 offset, u8 reg_width) -{ - dev->ops->block_write(dev, buffer, count, offset, reg_width); -} -#endif /* CONFIG_SSB_BLOCKIO */ - - -/* The SSB DMA API. Use this API for any DMA operation on the device. - * This API basically is a wrapper that calls the correct DMA API for - * the host device type the SSB device is attached to. */ - -/* Translation (routing) bits that need to be ORed to DMA - * addresses before they are given to a device. */ -extern u32 ssb_dma_translation(struct ssb_device *dev); -#define SSB_DMA_TRANSLATION_MASK 0xC0000000 -#define SSB_DMA_TRANSLATION_SHIFT 30 - -static inline void __cold __ssb_dma_not_implemented(struct ssb_device *dev) -{ -#ifdef CONFIG_SSB_DEBUG - printk(KERN_ERR "SSB: BUG! Calling DMA API for " - "unsupported bustype %d\n", dev->bus->bustype); -#endif /* DEBUG */ -} - -#ifdef CONFIG_SSB_PCIHOST -/* PCI-host wrapper driver */ -extern int ssb_pcihost_register(struct pci_driver *driver); -static inline void ssb_pcihost_unregister(struct pci_driver *driver) -{ - pci_unregister_driver(driver); -} - -static inline -void ssb_pcihost_set_power_state(struct ssb_device *sdev, pci_power_t state) -{ - if (sdev->bus->bustype == SSB_BUSTYPE_PCI) - pci_set_power_state(sdev->bus->host_pci, state); -} -#else -static inline void ssb_pcihost_unregister(struct pci_driver *driver) -{ -} - -static inline -void ssb_pcihost_set_power_state(struct ssb_device *sdev, pci_power_t state) -{ -} -#endif /* CONFIG_SSB_PCIHOST */ - - -/* If a driver is shutdown or suspended, call this to signal - * that the bus may be completely powered down. SSB will decide, - * if it's really time to power down the bus, based on if there - * are other devices that want to run. */ -extern int ssb_bus_may_powerdown(struct ssb_bus *bus); -/* Before initializing and enabling a device, call this to power-up the bus. - * If you want to allow use of dynamic-power-control, pass the flag. - * Otherwise static always-on powercontrol will be used. */ -extern int ssb_bus_powerup(struct ssb_bus *bus, bool dynamic_pctl); - -extern void ssb_commit_settings(struct ssb_bus *bus); - -/* Various helper functions */ -extern u32 ssb_admatch_base(u32 adm); -extern u32 ssb_admatch_size(u32 adm); - -/* PCI device mapping and fixup routines. - * Called from the architecture pcibios init code. - * These are only available on SSB_EMBEDDED configurations. */ -#ifdef CONFIG_SSB_EMBEDDED -int ssb_pcibios_plat_dev_init(struct pci_dev *dev); -int ssb_pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin); -#endif /* CONFIG_SSB_EMBEDDED */ - -#endif /* LINUX_SSB_H_ */ diff --git a/openairITS/mac/DOT11/include/linux/ssb/ssb_driver_chipcommon.h b/openairITS/mac/DOT11/include/linux/ssb/ssb_driver_chipcommon.h deleted file mode 100644 index 1a6b0045b0..0000000000 --- a/openairITS/mac/DOT11/include/linux/ssb/ssb_driver_chipcommon.h +++ /dev/null @@ -1,665 +0,0 @@ -#ifndef LINUX_SSB_CHIPCO_H_ -#define LINUX_SSB_CHIPCO_H_ - -/* SonicsSiliconBackplane CHIPCOMMON core hardware definitions - * - * The chipcommon core provides chip identification, SB control, - * jtag, 0/1/2 uarts, clock frequency control, a watchdog interrupt timer, - * gpio interface, extbus, and support for serial and parallel flashes. - * - * Copyright 2005, Broadcom Corporation - * Copyright 2006, Michael Buesch - * - * Licensed under the GPL version 2. See COPYING for details. - */ - -/** ChipCommon core registers. **/ - -#define SSB_CHIPCO_CHIPID 0x0000 -#define SSB_CHIPCO_IDMASK 0x0000FFFF -#define SSB_CHIPCO_REVMASK 0x000F0000 -#define SSB_CHIPCO_REVSHIFT 16 -#define SSB_CHIPCO_PACKMASK 0x00F00000 -#define SSB_CHIPCO_PACKSHIFT 20 -#define SSB_CHIPCO_NRCORESMASK 0x0F000000 -#define SSB_CHIPCO_NRCORESSHIFT 24 -#define SSB_CHIPCO_CAP 0x0004 /* Capabilities */ -#define SSB_CHIPCO_CAP_NRUART 0x00000003 /* # of UARTs */ -#define SSB_CHIPCO_CAP_MIPSEB 0x00000004 /* MIPS in BigEndian Mode */ -#define SSB_CHIPCO_CAP_UARTCLK 0x00000018 /* UART clock select */ -#define SSB_CHIPCO_CAP_UARTCLK_INT 0x00000008 /* UARTs are driven by internal divided clock */ -#define SSB_CHIPCO_CAP_UARTGPIO 0x00000020 /* UARTs on GPIO 15-12 */ -#define SSB_CHIPCO_CAP_EXTBUS 0x000000C0 /* External buses present */ -#define SSB_CHIPCO_CAP_FLASHT 0x00000700 /* Flash Type */ -#define SSB_CHIPCO_FLASHT_NONE 0x00000000 /* No flash */ -#define SSB_CHIPCO_FLASHT_STSER 0x00000100 /* ST serial flash */ -#define SSB_CHIPCO_FLASHT_ATSER 0x00000200 /* Atmel serial flash */ -#define SSB_CHIPCO_FLASHT_PARA 0x00000700 /* Parallel flash */ -#define SSB_CHIPCO_CAP_PLLT 0x00038000 /* PLL Type */ -#define SSB_PLLTYPE_NONE 0x00000000 -#define SSB_PLLTYPE_1 0x00010000 /* 48Mhz base, 3 dividers */ -#define SSB_PLLTYPE_2 0x00020000 /* 48Mhz, 4 dividers */ -#define SSB_PLLTYPE_3 0x00030000 /* 25Mhz, 2 dividers */ -#define SSB_PLLTYPE_4 0x00008000 /* 48Mhz, 4 dividers */ -#define SSB_PLLTYPE_5 0x00018000 /* 25Mhz, 4 dividers */ -#define SSB_PLLTYPE_6 0x00028000 /* 100/200 or 120/240 only */ -#define SSB_PLLTYPE_7 0x00038000 /* 25Mhz, 4 dividers */ -#define SSB_CHIPCO_CAP_PCTL 0x00040000 /* Power Control */ -#define SSB_CHIPCO_CAP_OTPS 0x00380000 /* OTP size */ -#define SSB_CHIPCO_CAP_OTPS_SHIFT 19 -#define SSB_CHIPCO_CAP_OTPS_BASE 5 -#define SSB_CHIPCO_CAP_JTAGM 0x00400000 /* JTAG master present */ -#define SSB_CHIPCO_CAP_BROM 0x00800000 /* Internal boot ROM active */ -#define SSB_CHIPCO_CAP_64BIT 0x08000000 /* 64-bit Backplane */ -#define SSB_CHIPCO_CAP_PMU 0x10000000 /* PMU available (rev >= 20) */ -#define SSB_CHIPCO_CAP_ECI 0x20000000 /* ECI available (rev >= 20) */ -#define SSB_CHIPCO_CAP_SPROM 0x40000000 /* SPROM present */ -#define SSB_CHIPCO_CORECTL 0x0008 -#define SSB_CHIPCO_CORECTL_UARTCLK0 0x00000001 /* Drive UART with internal clock */ -#define SSB_CHIPCO_CORECTL_SE 0x00000002 /* sync clk out enable (corerev >= 3) */ -#define SSB_CHIPCO_CORECTL_UARTCLKEN 0x00000008 /* UART clock enable (rev >= 21) */ -#define SSB_CHIPCO_BIST 0x000C -#define SSB_CHIPCO_OTPS 0x0010 /* OTP status */ -#define SSB_CHIPCO_OTPS_PROGFAIL 0x80000000 -#define SSB_CHIPCO_OTPS_PROTECT 0x00000007 -#define SSB_CHIPCO_OTPS_HW_PROTECT 0x00000001 -#define SSB_CHIPCO_OTPS_SW_PROTECT 0x00000002 -#define SSB_CHIPCO_OTPS_CID_PROTECT 0x00000004 -#define SSB_CHIPCO_OTPC 0x0014 /* OTP control */ -#define SSB_CHIPCO_OTPC_RECWAIT 0xFF000000 -#define SSB_CHIPCO_OTPC_PROGWAIT 0x00FFFF00 -#define SSB_CHIPCO_OTPC_PRW_SHIFT 8 -#define SSB_CHIPCO_OTPC_MAXFAIL 0x00000038 -#define SSB_CHIPCO_OTPC_VSEL 0x00000006 -#define SSB_CHIPCO_OTPC_SELVL 0x00000001 -#define SSB_CHIPCO_OTPP 0x0018 /* OTP prog */ -#define SSB_CHIPCO_OTPP_COL 0x000000FF -#define SSB_CHIPCO_OTPP_ROW 0x0000FF00 -#define SSB_CHIPCO_OTPP_ROW_SHIFT 8 -#define SSB_CHIPCO_OTPP_READERR 0x10000000 -#define SSB_CHIPCO_OTPP_VALUE 0x20000000 -#define SSB_CHIPCO_OTPP_READ 0x40000000 -#define SSB_CHIPCO_OTPP_START 0x80000000 -#define SSB_CHIPCO_OTPP_BUSY 0x80000000 -#define SSB_CHIPCO_IRQSTAT 0x0020 -#define SSB_CHIPCO_IRQMASK 0x0024 -#define SSB_CHIPCO_IRQ_GPIO 0x00000001 /* gpio intr */ -#define SSB_CHIPCO_IRQ_EXT 0x00000002 /* ro: ext intr pin (corerev >= 3) */ -#define SSB_CHIPCO_IRQ_WDRESET 0x80000000 /* watchdog reset occurred */ -#define SSB_CHIPCO_CHIPCTL 0x0028 /* Rev >= 11 only */ -#define SSB_CHIPCO_CHIPSTAT 0x002C /* Rev >= 11 only */ -#define SSB_CHIPCO_JCMD 0x0030 /* Rev >= 10 only */ -#define SSB_CHIPCO_JCMD_START 0x80000000 -#define SSB_CHIPCO_JCMD_BUSY 0x80000000 -#define SSB_CHIPCO_JCMD_PAUSE 0x40000000 -#define SSB_CHIPCO_JCMD0_ACC_MASK 0x0000F000 -#define SSB_CHIPCO_JCMD0_ACC_IRDR 0x00000000 -#define SSB_CHIPCO_JCMD0_ACC_DR 0x00001000 -#define SSB_CHIPCO_JCMD0_ACC_IR 0x00002000 -#define SSB_CHIPCO_JCMD0_ACC_RESET 0x00003000 -#define SSB_CHIPCO_JCMD0_ACC_IRPDR 0x00004000 -#define SSB_CHIPCO_JCMD0_ACC_PDR 0x00005000 -#define SSB_CHIPCO_JCMD0_IRW_MASK 0x00000F00 -#define SSB_CHIPCO_JCMD_ACC_MASK 0x000F0000 /* Changes for corerev 11 */ -#define SSB_CHIPCO_JCMD_ACC_IRDR 0x00000000 -#define SSB_CHIPCO_JCMD_ACC_DR 0x00010000 -#define SSB_CHIPCO_JCMD_ACC_IR 0x00020000 -#define SSB_CHIPCO_JCMD_ACC_RESET 0x00030000 -#define SSB_CHIPCO_JCMD_ACC_IRPDR 0x00040000 -#define SSB_CHIPCO_JCMD_ACC_PDR 0x00050000 -#define SSB_CHIPCO_JCMD_IRW_MASK 0x00001F00 -#define SSB_CHIPCO_JCMD_IRW_SHIFT 8 -#define SSB_CHIPCO_JCMD_DRW_MASK 0x0000003F -#define SSB_CHIPCO_JIR 0x0034 /* Rev >= 10 only */ -#define SSB_CHIPCO_JDR 0x0038 /* Rev >= 10 only */ -#define SSB_CHIPCO_JCTL 0x003C /* Rev >= 10 only */ -#define SSB_CHIPCO_JCTL_FORCE_CLK 4 /* Force clock */ -#define SSB_CHIPCO_JCTL_EXT_EN 2 /* Enable external targets */ -#define SSB_CHIPCO_JCTL_EN 1 /* Enable Jtag master */ -#define SSB_CHIPCO_FLASHCTL 0x0040 -#define SSB_CHIPCO_FLASHCTL_START 0x80000000 -#define SSB_CHIPCO_FLASHCTL_BUSY SSB_CHIPCO_FLASHCTL_START -#define SSB_CHIPCO_FLASHADDR 0x0044 -#define SSB_CHIPCO_FLASHDATA 0x0048 -#define SSB_CHIPCO_BCAST_ADDR 0x0050 -#define SSB_CHIPCO_BCAST_DATA 0x0054 -#define SSB_CHIPCO_GPIOPULLUP 0x0058 /* Rev >= 20 only */ -#define SSB_CHIPCO_GPIOPULLDOWN 0x005C /* Rev >= 20 only */ -#define SSB_CHIPCO_GPIOIN 0x0060 -#define SSB_CHIPCO_GPIOOUT 0x0064 -#define SSB_CHIPCO_GPIOOUTEN 0x0068 -#define SSB_CHIPCO_GPIOCTL 0x006C -#define SSB_CHIPCO_GPIOPOL 0x0070 -#define SSB_CHIPCO_GPIOIRQ 0x0074 -#define SSB_CHIPCO_WATCHDOG 0x0080 -#define SSB_CHIPCO_GPIOTIMER 0x0088 /* LED powersave (corerev >= 16) */ -#define SSB_CHIPCO_GPIOTIMER_OFFTIME 0x0000FFFF -#define SSB_CHIPCO_GPIOTIMER_OFFTIME_SHIFT 0 -#define SSB_CHIPCO_GPIOTIMER_ONTIME 0xFFFF0000 -#define SSB_CHIPCO_GPIOTIMER_ONTIME_SHIFT 16 -#define SSB_CHIPCO_GPIOTOUTM 0x008C /* LED powersave (corerev >= 16) */ -#define SSB_CHIPCO_CLOCK_N 0x0090 -#define SSB_CHIPCO_CLOCK_SB 0x0094 -#define SSB_CHIPCO_CLOCK_PCI 0x0098 -#define SSB_CHIPCO_CLOCK_M2 0x009C -#define SSB_CHIPCO_CLOCK_MIPS 0x00A0 -#define SSB_CHIPCO_CLKDIV 0x00A4 /* Rev >= 3 only */ -#define SSB_CHIPCO_CLKDIV_SFLASH 0x0F000000 -#define SSB_CHIPCO_CLKDIV_SFLASH_SHIFT 24 -#define SSB_CHIPCO_CLKDIV_OTP 0x000F0000 -#define SSB_CHIPCO_CLKDIV_OTP_SHIFT 16 -#define SSB_CHIPCO_CLKDIV_JTAG 0x00000F00 -#define SSB_CHIPCO_CLKDIV_JTAG_SHIFT 8 -#define SSB_CHIPCO_CLKDIV_UART 0x000000FF -#define SSB_CHIPCO_PLLONDELAY 0x00B0 /* Rev >= 4 only */ -#define SSB_CHIPCO_FREFSELDELAY 0x00B4 /* Rev >= 4 only */ -#define SSB_CHIPCO_SLOWCLKCTL 0x00B8 /* 6 <= Rev <= 9 only */ -#define SSB_CHIPCO_SLOWCLKCTL_SRC 0x00000007 /* slow clock source mask */ -#define SSB_CHIPCO_SLOWCLKCTL_SRC_LPO 0x00000000 /* source of slow clock is LPO */ -#define SSB_CHIPCO_SLOWCLKCTL_SRC_XTAL 0x00000001 /* source of slow clock is crystal */ -#define SSB_CHIPCO_SLOECLKCTL_SRC_PCI 0x00000002 /* source of slow clock is PCI */ -#define SSB_CHIPCO_SLOWCLKCTL_LPOFREQ 0x00000200 /* LPOFreqSel, 1: 160Khz, 0: 32KHz */ -#define SSB_CHIPCO_SLOWCLKCTL_LPOPD 0x00000400 /* LPOPowerDown, 1: LPO is disabled, 0: LPO is enabled */ -#define SSB_CHIPCO_SLOWCLKCTL_FSLOW 0x00000800 /* ForceSlowClk, 1: sb/cores running on slow clock, 0: power logic control */ -#define SSB_CHIPCO_SLOWCLKCTL_IPLL 0x00001000 /* IgnorePllOffReq, 1/0: power logic ignores/honors PLL clock disable requests from core */ -#define SSB_CHIPCO_SLOWCLKCTL_ENXTAL 0x00002000 /* XtalControlEn, 1/0: power logic does/doesn't disable crystal when appropriate */ -#define SSB_CHIPCO_SLOWCLKCTL_XTALPU 0x00004000 /* XtalPU (RO), 1/0: crystal running/disabled */ -#define SSB_CHIPCO_SLOWCLKCTL_CLKDIV 0xFFFF0000 /* ClockDivider (SlowClk = 1/(4+divisor)) */ -#define SSB_CHIPCO_SLOWCLKCTL_CLKDIV_SHIFT 16 -#define SSB_CHIPCO_SYSCLKCTL 0x00C0 /* Rev >= 3 only */ -#define SSB_CHIPCO_SYSCLKCTL_IDLPEN 0x00000001 /* ILPen: Enable Idle Low Power */ -#define SSB_CHIPCO_SYSCLKCTL_ALPEN 0x00000002 /* ALPen: Enable Active Low Power */ -#define SSB_CHIPCO_SYSCLKCTL_PLLEN 0x00000004 /* ForcePLLOn */ -#define SSB_CHIPCO_SYSCLKCTL_FORCEALP 0x00000008 /* Force ALP (or HT if ALPen is not set */ -#define SSB_CHIPCO_SYSCLKCTL_FORCEHT 0x00000010 /* Force HT */ -#define SSB_CHIPCO_SYSCLKCTL_CLKDIV 0xFFFF0000 /* ClkDiv (ILP = 1/(4+divisor)) */ -#define SSB_CHIPCO_SYSCLKCTL_CLKDIV_SHIFT 16 -#define SSB_CHIPCO_CLKSTSTR 0x00C4 /* Rev >= 3 only */ -#define SSB_CHIPCO_PCMCIA_CFG 0x0100 -#define SSB_CHIPCO_PCMCIA_MEMWAIT 0x0104 -#define SSB_CHIPCO_PCMCIA_ATTRWAIT 0x0108 -#define SSB_CHIPCO_PCMCIA_IOWAIT 0x010C -#define SSB_CHIPCO_IDE_CFG 0x0110 -#define SSB_CHIPCO_IDE_MEMWAIT 0x0114 -#define SSB_CHIPCO_IDE_ATTRWAIT 0x0118 -#define SSB_CHIPCO_IDE_IOWAIT 0x011C -#define SSB_CHIPCO_PROG_CFG 0x0120 -#define SSB_CHIPCO_PROG_WAITCNT 0x0124 -#define SSB_CHIPCO_FLASH_CFG 0x0128 -#define SSB_CHIPCO_FLASH_WAITCNT 0x012C -#define SSB_CHIPCO_CLKCTLST 0x01E0 /* Clock control and status (rev >= 20) */ -#define SSB_CHIPCO_CLKCTLST_FORCEALP 0x00000001 /* Force ALP request */ -#define SSB_CHIPCO_CLKCTLST_FORCEHT 0x00000002 /* Force HT request */ -#define SSB_CHIPCO_CLKCTLST_FORCEILP 0x00000004 /* Force ILP request */ -#define SSB_CHIPCO_CLKCTLST_HAVEALPREQ 0x00000008 /* ALP available request */ -#define SSB_CHIPCO_CLKCTLST_HAVEHTREQ 0x00000010 /* HT available request */ -#define SSB_CHIPCO_CLKCTLST_HWCROFF 0x00000020 /* Force HW clock request off */ -#define SSB_CHIPCO_CLKCTLST_HAVEALP 0x00010000 /* ALP available */ -#define SSB_CHIPCO_CLKCTLST_HAVEHT 0x00020000 /* HT available */ -#define SSB_CHIPCO_CLKCTLST_4328A0_HAVEHT 0x00010000 /* 4328a0 has reversed bits */ -#define SSB_CHIPCO_CLKCTLST_4328A0_HAVEALP 0x00020000 /* 4328a0 has reversed bits */ -#define SSB_CHIPCO_HW_WORKAROUND 0x01E4 /* Hardware workaround (rev >= 20) */ -#define SSB_CHIPCO_UART0_DATA 0x0300 -#define SSB_CHIPCO_UART0_IMR 0x0304 -#define SSB_CHIPCO_UART0_FCR 0x0308 -#define SSB_CHIPCO_UART0_LCR 0x030C -#define SSB_CHIPCO_UART0_MCR 0x0310 -#define SSB_CHIPCO_UART0_LSR 0x0314 -#define SSB_CHIPCO_UART0_MSR 0x0318 -#define SSB_CHIPCO_UART0_SCRATCH 0x031C -#define SSB_CHIPCO_UART1_DATA 0x0400 -#define SSB_CHIPCO_UART1_IMR 0x0404 -#define SSB_CHIPCO_UART1_FCR 0x0408 -#define SSB_CHIPCO_UART1_LCR 0x040C -#define SSB_CHIPCO_UART1_MCR 0x0410 -#define SSB_CHIPCO_UART1_LSR 0x0414 -#define SSB_CHIPCO_UART1_MSR 0x0418 -#define SSB_CHIPCO_UART1_SCRATCH 0x041C -/* PMU registers (rev >= 20) */ -#define SSB_CHIPCO_PMU_CTL 0x0600 /* PMU control */ -#define SSB_CHIPCO_PMU_CTL_ILP_DIV 0xFFFF0000 /* ILP div mask */ -#define SSB_CHIPCO_PMU_CTL_ILP_DIV_SHIFT 16 -#define SSB_CHIPCO_PMU_CTL_NOILPONW 0x00000200 /* No ILP on wait */ -#define SSB_CHIPCO_PMU_CTL_HTREQEN 0x00000100 /* HT req enable */ -#define SSB_CHIPCO_PMU_CTL_ALPREQEN 0x00000080 /* ALP req enable */ -#define SSB_CHIPCO_PMU_CTL_XTALFREQ 0x0000007C /* Crystal freq */ -#define SSB_CHIPCO_PMU_CTL_XTALFREQ_SHIFT 2 -#define SSB_CHIPCO_PMU_CTL_ILPDIVEN 0x00000002 /* ILP div enable */ -#define SSB_CHIPCO_PMU_CTL_LPOSEL 0x00000001 /* LPO sel */ -#define SSB_CHIPCO_PMU_CAP 0x0604 /* PMU capabilities */ -#define SSB_CHIPCO_PMU_CAP_REVISION 0x000000FF /* Revision mask */ -#define SSB_CHIPCO_PMU_STAT 0x0608 /* PMU status */ -#define SSB_CHIPCO_PMU_STAT_INTPEND 0x00000040 /* Interrupt pending */ -#define SSB_CHIPCO_PMU_STAT_SBCLKST 0x00000030 /* Backplane clock status? */ -#define SSB_CHIPCO_PMU_STAT_HAVEALP 0x00000008 /* ALP available */ -#define SSB_CHIPCO_PMU_STAT_HAVEHT 0x00000004 /* HT available */ -#define SSB_CHIPCO_PMU_STAT_RESINIT 0x00000003 /* Res init */ -#define SSB_CHIPCO_PMU_RES_STAT 0x060C /* PMU res status */ -#define SSB_CHIPCO_PMU_RES_PEND 0x0610 /* PMU res pending */ -#define SSB_CHIPCO_PMU_TIMER 0x0614 /* PMU timer */ -#define SSB_CHIPCO_PMU_MINRES_MSK 0x0618 /* PMU min res mask */ -#define SSB_CHIPCO_PMU_MAXRES_MSK 0x061C /* PMU max res mask */ -#define SSB_CHIPCO_PMU_RES_TABSEL 0x0620 /* PMU res table sel */ -#define SSB_CHIPCO_PMU_RES_DEPMSK 0x0624 /* PMU res dep mask */ -#define SSB_CHIPCO_PMU_RES_UPDNTM 0x0628 /* PMU res updown timer */ -#define SSB_CHIPCO_PMU_RES_TIMER 0x062C /* PMU res timer */ -#define SSB_CHIPCO_PMU_CLKSTRETCH 0x0630 /* PMU clockstretch */ -#define SSB_CHIPCO_PMU_WATCHDOG 0x0634 /* PMU watchdog */ -#define SSB_CHIPCO_PMU_RES_REQTS 0x0640 /* PMU res req timer sel */ -#define SSB_CHIPCO_PMU_RES_REQT 0x0644 /* PMU res req timer */ -#define SSB_CHIPCO_PMU_RES_REQM 0x0648 /* PMU res req mask */ -#define SSB_CHIPCO_CHIPCTL_ADDR 0x0650 -#define SSB_CHIPCO_CHIPCTL_DATA 0x0654 -#define SSB_CHIPCO_REGCTL_ADDR 0x0658 -#define SSB_CHIPCO_REGCTL_DATA 0x065C -#define SSB_CHIPCO_PLLCTL_ADDR 0x0660 -#define SSB_CHIPCO_PLLCTL_DATA 0x0664 - - - -/** PMU PLL registers */ - -/* PMU rev 0 PLL registers */ -#define SSB_PMU0_PLLCTL0 0 -#define SSB_PMU0_PLLCTL0_PDIV_MSK 0x00000001 -#define SSB_PMU0_PLLCTL0_PDIV_FREQ 25000 /* kHz */ -#define SSB_PMU0_PLLCTL1 1 -#define SSB_PMU0_PLLCTL1_WILD_IMSK 0xF0000000 /* Wild int mask (low nibble) */ -#define SSB_PMU0_PLLCTL1_WILD_IMSK_SHIFT 28 -#define SSB_PMU0_PLLCTL1_WILD_FMSK 0x0FFFFF00 /* Wild frac mask */ -#define SSB_PMU0_PLLCTL1_WILD_FMSK_SHIFT 8 -#define SSB_PMU0_PLLCTL1_STOPMOD 0x00000040 /* Stop mod */ -#define SSB_PMU0_PLLCTL2 2 -#define SSB_PMU0_PLLCTL2_WILD_IMSKHI 0x0000000F /* Wild int mask (high nibble) */ -#define SSB_PMU0_PLLCTL2_WILD_IMSKHI_SHIFT 0 - -/* PMU rev 1 PLL registers */ -#define SSB_PMU1_PLLCTL0 0 -#define SSB_PMU1_PLLCTL0_P1DIV 0x00F00000 /* P1 div */ -#define SSB_PMU1_PLLCTL0_P1DIV_SHIFT 20 -#define SSB_PMU1_PLLCTL0_P2DIV 0x0F000000 /* P2 div */ -#define SSB_PMU1_PLLCTL0_P2DIV_SHIFT 24 -#define SSB_PMU1_PLLCTL1 1 -#define SSB_PMU1_PLLCTL1_M1DIV 0x000000FF /* M1 div */ -#define SSB_PMU1_PLLCTL1_M1DIV_SHIFT 0 -#define SSB_PMU1_PLLCTL1_M2DIV 0x0000FF00 /* M2 div */ -#define SSB_PMU1_PLLCTL1_M2DIV_SHIFT 8 -#define SSB_PMU1_PLLCTL1_M3DIV 0x00FF0000 /* M3 div */ -#define SSB_PMU1_PLLCTL1_M3DIV_SHIFT 16 -#define SSB_PMU1_PLLCTL1_M4DIV 0xFF000000 /* M4 div */ -#define SSB_PMU1_PLLCTL1_M4DIV_SHIFT 24 -#define SSB_PMU1_PLLCTL2 2 -#define SSB_PMU1_PLLCTL2_M5DIV 0x000000FF /* M5 div */ -#define SSB_PMU1_PLLCTL2_M5DIV_SHIFT 0 -#define SSB_PMU1_PLLCTL2_M6DIV 0x0000FF00 /* M6 div */ -#define SSB_PMU1_PLLCTL2_M6DIV_SHIFT 8 -#define SSB_PMU1_PLLCTL2_NDIVMODE 0x000E0000 /* NDIV mode */ -#define SSB_PMU1_PLLCTL2_NDIVMODE_SHIFT 17 -#define SSB_PMU1_PLLCTL2_NDIVINT 0x1FF00000 /* NDIV int */ -#define SSB_PMU1_PLLCTL2_NDIVINT_SHIFT 20 -#define SSB_PMU1_PLLCTL3 3 -#define SSB_PMU1_PLLCTL3_NDIVFRAC 0x00FFFFFF /* NDIV frac */ -#define SSB_PMU1_PLLCTL3_NDIVFRAC_SHIFT 0 -#define SSB_PMU1_PLLCTL4 4 -#define SSB_PMU1_PLLCTL5 5 -#define SSB_PMU1_PLLCTL5_CLKDRV 0xFFFFFF00 /* clk drv */ -#define SSB_PMU1_PLLCTL5_CLKDRV_SHIFT 8 - -/* BCM4312 PLL resource numbers. */ -#define SSB_PMURES_4312_SWITCHER_BURST 0 -#define SSB_PMURES_4312_SWITCHER_PWM 1 -#define SSB_PMURES_4312_PA_REF_LDO 2 -#define SSB_PMURES_4312_CORE_LDO_BURST 3 -#define SSB_PMURES_4312_CORE_LDO_PWM 4 -#define SSB_PMURES_4312_RADIO_LDO 5 -#define SSB_PMURES_4312_ILP_REQUEST 6 -#define SSB_PMURES_4312_BG_FILTBYP 7 -#define SSB_PMURES_4312_TX_FILTBYP 8 -#define SSB_PMURES_4312_RX_FILTBYP 9 -#define SSB_PMURES_4312_XTAL_PU 10 -#define SSB_PMURES_4312_ALP_AVAIL 11 -#define SSB_PMURES_4312_BB_PLL_FILTBYP 12 -#define SSB_PMURES_4312_RF_PLL_FILTBYP 13 -#define SSB_PMURES_4312_HT_AVAIL 14 - -/* BCM4325 PLL resource numbers. */ -#define SSB_PMURES_4325_BUCK_BOOST_BURST 0 -#define SSB_PMURES_4325_CBUCK_BURST 1 -#define SSB_PMURES_4325_CBUCK_PWM 2 -#define SSB_PMURES_4325_CLDO_CBUCK_BURST 3 -#define SSB_PMURES_4325_CLDO_CBUCK_PWM 4 -#define SSB_PMURES_4325_BUCK_BOOST_PWM 5 -#define SSB_PMURES_4325_ILP_REQUEST 6 -#define SSB_PMURES_4325_ABUCK_BURST 7 -#define SSB_PMURES_4325_ABUCK_PWM 8 -#define SSB_PMURES_4325_LNLDO1_PU 9 -#define SSB_PMURES_4325_LNLDO2_PU 10 -#define SSB_PMURES_4325_LNLDO3_PU 11 -#define SSB_PMURES_4325_LNLDO4_PU 12 -#define SSB_PMURES_4325_XTAL_PU 13 -#define SSB_PMURES_4325_ALP_AVAIL 14 -#define SSB_PMURES_4325_RX_PWRSW_PU 15 -#define SSB_PMURES_4325_TX_PWRSW_PU 16 -#define SSB_PMURES_4325_RFPLL_PWRSW_PU 17 -#define SSB_PMURES_4325_LOGEN_PWRSW_PU 18 -#define SSB_PMURES_4325_AFE_PWRSW_PU 19 -#define SSB_PMURES_4325_BBPLL_PWRSW_PU 20 -#define SSB_PMURES_4325_HT_AVAIL 21 - -/* BCM4328 PLL resource numbers. */ -#define SSB_PMURES_4328_EXT_SWITCHER_PWM 0 -#define SSB_PMURES_4328_BB_SWITCHER_PWM 1 -#define SSB_PMURES_4328_BB_SWITCHER_BURST 2 -#define SSB_PMURES_4328_BB_EXT_SWITCHER_BURST 3 -#define SSB_PMURES_4328_ILP_REQUEST 4 -#define SSB_PMURES_4328_RADIO_SWITCHER_PWM 5 -#define SSB_PMURES_4328_RADIO_SWITCHER_BURST 6 -#define SSB_PMURES_4328_ROM_SWITCH 7 -#define SSB_PMURES_4328_PA_REF_LDO 8 -#define SSB_PMURES_4328_RADIO_LDO 9 -#define SSB_PMURES_4328_AFE_LDO 10 -#define SSB_PMURES_4328_PLL_LDO 11 -#define SSB_PMURES_4328_BG_FILTBYP 12 -#define SSB_PMURES_4328_TX_FILTBYP 13 -#define SSB_PMURES_4328_RX_FILTBYP 14 -#define SSB_PMURES_4328_XTAL_PU 15 -#define SSB_PMURES_4328_XTAL_EN 16 -#define SSB_PMURES_4328_BB_PLL_FILTBYP 17 -#define SSB_PMURES_4328_RF_PLL_FILTBYP 18 -#define SSB_PMURES_4328_BB_PLL_PU 19 - -/* BCM5354 PLL resource numbers. */ -#define SSB_PMURES_5354_EXT_SWITCHER_PWM 0 -#define SSB_PMURES_5354_BB_SWITCHER_PWM 1 -#define SSB_PMURES_5354_BB_SWITCHER_BURST 2 -#define SSB_PMURES_5354_BB_EXT_SWITCHER_BURST 3 -#define SSB_PMURES_5354_ILP_REQUEST 4 -#define SSB_PMURES_5354_RADIO_SWITCHER_PWM 5 -#define SSB_PMURES_5354_RADIO_SWITCHER_BURST 6 -#define SSB_PMURES_5354_ROM_SWITCH 7 -#define SSB_PMURES_5354_PA_REF_LDO 8 -#define SSB_PMURES_5354_RADIO_LDO 9 -#define SSB_PMURES_5354_AFE_LDO 10 -#define SSB_PMURES_5354_PLL_LDO 11 -#define SSB_PMURES_5354_BG_FILTBYP 12 -#define SSB_PMURES_5354_TX_FILTBYP 13 -#define SSB_PMURES_5354_RX_FILTBYP 14 -#define SSB_PMURES_5354_XTAL_PU 15 -#define SSB_PMURES_5354_XTAL_EN 16 -#define SSB_PMURES_5354_BB_PLL_FILTBYP 17 -#define SSB_PMURES_5354_RF_PLL_FILTBYP 18 -#define SSB_PMURES_5354_BB_PLL_PU 19 - - - -/** Chip specific Chip-Status register contents. */ -#define SSB_CHIPCO_CHST_4322_SPROM_EXISTS 0x00000040 /* SPROM present */ -#define SSB_CHIPCO_CHST_4325_SPROM_OTP_SEL 0x00000003 -#define SSB_CHIPCO_CHST_4325_DEFCIS_SEL 0 /* OTP is powered up, use def. CIS, no SPROM */ -#define SSB_CHIPCO_CHST_4325_SPROM_SEL 1 /* OTP is powered up, SPROM is present */ -#define SSB_CHIPCO_CHST_4325_OTP_SEL 2 /* OTP is powered up, no SPROM */ -#define SSB_CHIPCO_CHST_4325_OTP_PWRDN 3 /* OTP is powered down, SPROM is present */ -#define SSB_CHIPCO_CHST_4325_SDIO_USB_MODE 0x00000004 -#define SSB_CHIPCO_CHST_4325_SDIO_USB_MODE_SHIFT 2 -#define SSB_CHIPCO_CHST_4325_RCAL_VALID 0x00000008 -#define SSB_CHIPCO_CHST_4325_RCAL_VALID_SHIFT 3 -#define SSB_CHIPCO_CHST_4325_RCAL_VALUE 0x000001F0 -#define SSB_CHIPCO_CHST_4325_RCAL_VALUE_SHIFT 4 -#define SSB_CHIPCO_CHST_4325_PMUTOP_2B 0x00000200 /* 1 for 2b, 0 for to 2a */ - -/** Macros to determine SPROM presence based on Chip-Status register. */ -#define SSB_CHIPCO_CHST_4312_SPROM_PRESENT(status) \ - ((status & SSB_CHIPCO_CHST_4325_SPROM_OTP_SEL) != \ - SSB_CHIPCO_CHST_4325_OTP_SEL) -#define SSB_CHIPCO_CHST_4322_SPROM_PRESENT(status) \ - (status & SSB_CHIPCO_CHST_4322_SPROM_EXISTS) -#define SSB_CHIPCO_CHST_4325_SPROM_PRESENT(status) \ - (((status & SSB_CHIPCO_CHST_4325_SPROM_OTP_SEL) != \ - SSB_CHIPCO_CHST_4325_DEFCIS_SEL) && \ - ((status & SSB_CHIPCO_CHST_4325_SPROM_OTP_SEL) != \ - SSB_CHIPCO_CHST_4325_OTP_SEL)) - - - -/** Clockcontrol masks and values **/ - -/* SSB_CHIPCO_CLOCK_N */ -#define SSB_CHIPCO_CLK_N1 0x0000003F /* n1 control */ -#define SSB_CHIPCO_CLK_N2 0x00003F00 /* n2 control */ -#define SSB_CHIPCO_CLK_N2_SHIFT 8 -#define SSB_CHIPCO_CLK_PLLC 0x000F0000 /* pll control */ -#define SSB_CHIPCO_CLK_PLLC_SHIFT 16 - -/* SSB_CHIPCO_CLOCK_SB/PCI/UART */ -#define SSB_CHIPCO_CLK_M1 0x0000003F /* m1 control */ -#define SSB_CHIPCO_CLK_M2 0x00003F00 /* m2 control */ -#define SSB_CHIPCO_CLK_M2_SHIFT 8 -#define SSB_CHIPCO_CLK_M3 0x003F0000 /* m3 control */ -#define SSB_CHIPCO_CLK_M3_SHIFT 16 -#define SSB_CHIPCO_CLK_MC 0x1F000000 /* mux control */ -#define SSB_CHIPCO_CLK_MC_SHIFT 24 - -/* N3M Clock control magic field values */ -#define SSB_CHIPCO_CLK_F6_2 0x02 /* A factor of 2 in */ -#define SSB_CHIPCO_CLK_F6_3 0x03 /* 6-bit fields like */ -#define SSB_CHIPCO_CLK_F6_4 0x05 /* N1, M1 or M3 */ -#define SSB_CHIPCO_CLK_F6_5 0x09 -#define SSB_CHIPCO_CLK_F6_6 0x11 -#define SSB_CHIPCO_CLK_F6_7 0x21 - -#define SSB_CHIPCO_CLK_F5_BIAS 5 /* 5-bit fields get this added */ - -#define SSB_CHIPCO_CLK_MC_BYPASS 0x08 -#define SSB_CHIPCO_CLK_MC_M1 0x04 -#define SSB_CHIPCO_CLK_MC_M1M2 0x02 -#define SSB_CHIPCO_CLK_MC_M1M2M3 0x01 -#define SSB_CHIPCO_CLK_MC_M1M3 0x11 - -/* Type 2 Clock control magic field values */ -#define SSB_CHIPCO_CLK_T2_BIAS 2 /* n1, n2, m1 & m3 bias */ -#define SSB_CHIPCO_CLK_T2M2_BIAS 3 /* m2 bias */ - -#define SSB_CHIPCO_CLK_T2MC_M1BYP 1 -#define SSB_CHIPCO_CLK_T2MC_M2BYP 2 -#define SSB_CHIPCO_CLK_T2MC_M3BYP 4 - -/* Type 6 Clock control magic field values */ -#define SSB_CHIPCO_CLK_T6_MMASK 1 /* bits of interest in m */ -#define SSB_CHIPCO_CLK_T6_M0 120000000 /* sb clock for m = 0 */ -#define SSB_CHIPCO_CLK_T6_M1 100000000 /* sb clock for m = 1 */ -#define SSB_CHIPCO_CLK_SB2MIPS_T6(sb) (2 * (sb)) - -/* Common clock base */ -#define SSB_CHIPCO_CLK_BASE1 24000000 /* Half the clock freq */ -#define SSB_CHIPCO_CLK_BASE2 12500000 /* Alternate crystal on some PLL's */ - -/* Clock control values for 200Mhz in 5350 */ -#define SSB_CHIPCO_CLK_5350_N 0x0311 -#define SSB_CHIPCO_CLK_5350_M 0x04020009 - - -/** Bits in the config registers **/ - -#define SSB_CHIPCO_CFG_EN 0x0001 /* Enable */ -#define SSB_CHIPCO_CFG_EXTM 0x000E /* Extif Mode */ -#define SSB_CHIPCO_CFG_EXTM_ASYNC 0x0002 /* Async/Parallel flash */ -#define SSB_CHIPCO_CFG_EXTM_SYNC 0x0004 /* Synchronous */ -#define SSB_CHIPCO_CFG_EXTM_PCMCIA 0x0008 /* PCMCIA */ -#define SSB_CHIPCO_CFG_EXTM_IDE 0x000A /* IDE */ -#define SSB_CHIPCO_CFG_DS16 0x0010 /* Data size, 0=8bit, 1=16bit */ -#define SSB_CHIPCO_CFG_CLKDIV 0x0060 /* Sync: Clock divisor */ -#define SSB_CHIPCO_CFG_CLKEN 0x0080 /* Sync: Clock enable */ -#define SSB_CHIPCO_CFG_BSTRO 0x0100 /* Sync: Size/Bytestrobe */ - - -/** Flash-specific control/status values */ - -/* flashcontrol opcodes for ST flashes */ -#define SSB_CHIPCO_FLASHCTL_ST_WREN 0x0006 /* Write Enable */ -#define SSB_CHIPCO_FLASHCTL_ST_WRDIS 0x0004 /* Write Disable */ -#define SSB_CHIPCO_FLASHCTL_ST_RDSR 0x0105 /* Read Status Register */ -#define SSB_CHIPCO_FLASHCTL_ST_WRSR 0x0101 /* Write Status Register */ -#define SSB_CHIPCO_FLASHCTL_ST_READ 0x0303 /* Read Data Bytes */ -#define SSB_CHIPCO_FLASHCTL_ST_PP 0x0302 /* Page Program */ -#define SSB_CHIPCO_FLASHCTL_ST_SE 0x02D8 /* Sector Erase */ -#define SSB_CHIPCO_FLASHCTL_ST_BE 0x00C7 /* Bulk Erase */ -#define SSB_CHIPCO_FLASHCTL_ST_DP 0x00B9 /* Deep Power-down */ -#define SSB_CHIPCO_FLASHCTL_ST_RSIG 0x03AB /* Read Electronic Signature */ - -/* Status register bits for ST flashes */ -#define SSB_CHIPCO_FLASHSTA_ST_WIP 0x01 /* Write In Progress */ -#define SSB_CHIPCO_FLASHSTA_ST_WEL 0x02 /* Write Enable Latch */ -#define SSB_CHIPCO_FLASHSTA_ST_BP 0x1C /* Block Protect */ -#define SSB_CHIPCO_FLASHSTA_ST_BP_SHIFT 2 -#define SSB_CHIPCO_FLASHSTA_ST_SRWD 0x80 /* Status Register Write Disable */ - -/* flashcontrol opcodes for Atmel flashes */ -#define SSB_CHIPCO_FLASHCTL_AT_READ 0x07E8 -#define SSB_CHIPCO_FLASHCTL_AT_PAGE_READ 0x07D2 -#define SSB_CHIPCO_FLASHCTL_AT_BUF1_READ /* FIXME */ -#define SSB_CHIPCO_FLASHCTL_AT_BUF2_READ /* FIXME */ -#define SSB_CHIPCO_FLASHCTL_AT_STATUS 0x01D7 -#define SSB_CHIPCO_FLASHCTL_AT_BUF1_WRITE 0x0384 -#define SSB_CHIPCO_FLASHCTL_AT_BUF2_WRITE 0x0387 -#define SSB_CHIPCO_FLASHCTL_AT_BUF1_ERASE_PRGM 0x0283 /* Erase program */ -#define SSB_CHIPCO_FLASHCTL_AT_BUF2_ERASE_PRGM 0x0286 /* Erase program */ -#define SSB_CHIPCO_FLASHCTL_AT_BUF1_PROGRAM 0x0288 -#define SSB_CHIPCO_FLASHCTL_AT_BUF2_PROGRAM 0x0289 -#define SSB_CHIPCO_FLASHCTL_AT_PAGE_ERASE 0x0281 -#define SSB_CHIPCO_FLASHCTL_AT_BLOCK_ERASE 0x0250 -#define SSB_CHIPCO_FLASHCTL_AT_BUF1_WRER_PRGM 0x0382 /* Write erase program */ -#define SSB_CHIPCO_FLASHCTL_AT_BUF2_WRER_PRGM 0x0385 /* Write erase program */ -#define SSB_CHIPCO_FLASHCTL_AT_BUF1_LOAD 0x0253 -#define SSB_CHIPCO_FLASHCTL_AT_BUF2_LOAD 0x0255 -#define SSB_CHIPCO_FLASHCTL_AT_BUF1_COMPARE 0x0260 -#define SSB_CHIPCO_FLASHCTL_AT_BUF2_COMPARE 0x0261 -#define SSB_CHIPCO_FLASHCTL_AT_BUF1_REPROGRAM 0x0258 -#define SSB_CHIPCO_FLASHCTL_AT_BUF2_REPROGRAM 0x0259 - -/* Status register bits for Atmel flashes */ -#define SSB_CHIPCO_FLASHSTA_AT_READY 0x80 -#define SSB_CHIPCO_FLASHSTA_AT_MISMATCH 0x40 -#define SSB_CHIPCO_FLASHSTA_AT_ID 0x38 -#define SSB_CHIPCO_FLASHSTA_AT_ID_SHIFT 3 - - -/** OTP **/ - -/* OTP regions */ -#define SSB_CHIPCO_OTP_HW_REGION SSB_CHIPCO_OTPS_HW_PROTECT -#define SSB_CHIPCO_OTP_SW_REGION SSB_CHIPCO_OTPS_SW_PROTECT -#define SSB_CHIPCO_OTP_CID_REGION SSB_CHIPCO_OTPS_CID_PROTECT - -/* OTP regions (Byte offsets from otp size) */ -#define SSB_CHIPCO_OTP_SWLIM_OFF (-8) -#define SSB_CHIPCO_OTP_CIDBASE_OFF 0 -#define SSB_CHIPCO_OTP_CIDLIM_OFF 8 - -/* Predefined OTP words (Word offset from otp size) */ -#define SSB_CHIPCO_OTP_BOUNDARY_OFF (-4) -#define SSB_CHIPCO_OTP_HWSIGN_OFF (-3) -#define SSB_CHIPCO_OTP_SWSIGN_OFF (-2) -#define SSB_CHIPCO_OTP_CIDSIGN_OFF (-1) - -#define SSB_CHIPCO_OTP_CID_OFF 0 -#define SSB_CHIPCO_OTP_PKG_OFF 1 -#define SSB_CHIPCO_OTP_FID_OFF 2 -#define SSB_CHIPCO_OTP_RSV_OFF 3 -#define SSB_CHIPCO_OTP_LIM_OFF 4 - -#define SSB_CHIPCO_OTP_SIGNATURE 0x578A -#define SSB_CHIPCO_OTP_MAGIC 0x4E56 - - -struct ssb_device; -struct ssb_serial_port; - -/* Data for the PMU, if available. - * Check availability with ((struct ssb_chipcommon)->capabilities & SSB_CHIPCO_CAP_PMU) - */ -struct ssb_chipcommon_pmu { - u8 rev; /* PMU revision */ - u32 crystalfreq; /* The active crystal frequency (in kHz) */ -}; - -struct ssb_chipcommon { - struct ssb_device *dev; - u32 capabilities; - u32 status; - /* Fast Powerup Delay constant */ - u16 fast_pwrup_delay; - struct ssb_chipcommon_pmu pmu; -}; - -static inline bool ssb_chipco_available(struct ssb_chipcommon *cc) -{ - return (cc->dev != NULL); -} - -/* Register access */ -#define chipco_read32(cc, offset) ssb_read32((cc)->dev, offset) -#define chipco_write32(cc, offset, val) ssb_write32((cc)->dev, offset, val) - -#define chipco_mask32(cc, offset, mask) \ - chipco_write32(cc, offset, chipco_read32(cc, offset) & (mask)) -#define chipco_set32(cc, offset, set) \ - chipco_write32(cc, offset, chipco_read32(cc, offset) | (set)) -#define chipco_maskset32(cc, offset, mask, set) \ - chipco_write32(cc, offset, (chipco_read32(cc, offset) & (mask)) | (set)) - -extern void ssb_chipcommon_init(struct ssb_chipcommon *cc); - -extern void ssb_chipco_suspend(struct ssb_chipcommon *cc); -extern void ssb_chipco_resume(struct ssb_chipcommon *cc); - -extern void ssb_chipco_get_clockcpu(struct ssb_chipcommon *cc, - u32 *plltype, u32 *n, u32 *m); -extern void ssb_chipco_get_clockcontrol(struct ssb_chipcommon *cc, - u32 *plltype, u32 *n, u32 *m); -extern void ssb_chipco_timing_init(struct ssb_chipcommon *cc, - unsigned long ns_per_cycle); - -enum ssb_clkmode { - SSB_CLKMODE_SLOW, - SSB_CLKMODE_FAST, - SSB_CLKMODE_DYNAMIC, -}; - -extern void ssb_chipco_set_clockmode(struct ssb_chipcommon *cc, - enum ssb_clkmode mode); - -extern void ssb_chipco_watchdog_timer_set(struct ssb_chipcommon *cc, - u32 ticks); - -void ssb_chipco_irq_mask(struct ssb_chipcommon *cc, u32 mask, u32 value); - -u32 ssb_chipco_irq_status(struct ssb_chipcommon *cc, u32 mask); - -/* Chipcommon GPIO pin access. */ -u32 ssb_chipco_gpio_in(struct ssb_chipcommon *cc, u32 mask); -u32 ssb_chipco_gpio_out(struct ssb_chipcommon *cc, u32 mask, u32 value); -u32 ssb_chipco_gpio_outen(struct ssb_chipcommon *cc, u32 mask, u32 value); -u32 ssb_chipco_gpio_control(struct ssb_chipcommon *cc, u32 mask, u32 value); -u32 ssb_chipco_gpio_intmask(struct ssb_chipcommon *cc, u32 mask, u32 value); -u32 ssb_chipco_gpio_polarity(struct ssb_chipcommon *cc, u32 mask, u32 value); - -#ifdef CONFIG_SSB_SERIAL -extern int ssb_chipco_serial_init(struct ssb_chipcommon *cc, - struct ssb_serial_port *ports); -#endif /* CONFIG_SSB_SERIAL */ - -/* PMU support */ -extern void ssb_pmu_init(struct ssb_chipcommon *cc); - -enum ssb_pmu_ldo_volt_id { - LDO_PAREF = 0, - LDO_VOLT1, - LDO_VOLT2, - LDO_VOLT3, -}; - -void ssb_pmu_set_ldo_voltage(struct ssb_chipcommon *cc, - enum ssb_pmu_ldo_volt_id id, u32 voltage); -void ssb_pmu_set_ldo_paref(struct ssb_chipcommon *cc, bool on); - -#endif /* LINUX_SSB_CHIPCO_H_ */ diff --git a/openairITS/mac/DOT11/include/linux/ssb/ssb_driver_extif.h b/openairITS/mac/DOT11/include/linux/ssb/ssb_driver_extif.h deleted file mode 100644 index 91161f0aa2..0000000000 --- a/openairITS/mac/DOT11/include/linux/ssb/ssb_driver_extif.h +++ /dev/null @@ -1,214 +0,0 @@ -/* - * Hardware-specific External Interface I/O core definitions - * for the BCM47xx family of SiliconBackplane-based chips. - * - * The External Interface core supports a total of three external chip selects - * supporting external interfaces. One of the external chip selects is - * used for Flash, one is used for PCMCIA, and the other may be - * programmed to support either a synchronous interface or an - * asynchronous interface. The asynchronous interface can be used to - * support external devices such as UARTs and the BCM2019 Bluetooth - * baseband processor. - * The external interface core also contains 2 on-chip 16550 UARTs, clock - * frequency control, a watchdog interrupt timer, and a GPIO interface. - * - * Copyright 2005, Broadcom Corporation - * Copyright 2006, Michael Buesch - * - * Licensed under the GPL version 2. See COPYING for details. - */ -#ifndef LINUX_SSB_EXTIFCORE_H_ -#define LINUX_SSB_EXTIFCORE_H_ - -/* external interface address space */ -#define SSB_EXTIF_PCMCIA_MEMBASE(x) (x) -#define SSB_EXTIF_PCMCIA_IOBASE(x) ((x) + 0x100000) -#define SSB_EXTIF_PCMCIA_CFGBASE(x) ((x) + 0x200000) -#define SSB_EXTIF_CFGIF_BASE(x) ((x) + 0x800000) -#define SSB_EXTIF_FLASH_BASE(x) ((x) + 0xc00000) - -#define SSB_EXTIF_NR_GPIOOUT 5 -/* GPIO NOTE: - * The multiple instances of output and output enable registers - * are present to allow driver software for multiple cores to control - * gpio outputs without needing to share a single register pair. - * Use the following helper macro to get a register offset value. - */ -#define SSB_EXTIF_GPIO_OUT(index) ({ \ - BUILD_BUG_ON(index >= SSB_EXTIF_NR_GPIOOUT); \ - SSB_EXTIF_GPIO_OUT_BASE + ((index) * 8); \ - }) -#define SSB_EXTIF_GPIO_OUTEN(index) ({ \ - BUILD_BUG_ON(index >= SSB_EXTIF_NR_GPIOOUT); \ - SSB_EXTIF_GPIO_OUTEN_BASE + ((index) * 8); \ - }) - -/** EXTIF core registers **/ - -#define SSB_EXTIF_CTL 0x0000 -#define SSB_EXTIF_CTL_UARTEN (1 << 0) /* UART enable */ -#define SSB_EXTIF_EXTSTAT 0x0004 -#define SSB_EXTIF_EXTSTAT_EMODE (1 << 0) /* Endian mode (ro) */ -#define SSB_EXTIF_EXTSTAT_EIRQPIN (1 << 1) /* External interrupt pin (ro) */ -#define SSB_EXTIF_EXTSTAT_GPIOIRQPIN (1 << 2) /* GPIO interrupt pin (ro) */ -#define SSB_EXTIF_PCMCIA_CFG 0x0010 -#define SSB_EXTIF_PCMCIA_MEMWAIT 0x0014 -#define SSB_EXTIF_PCMCIA_ATTRWAIT 0x0018 -#define SSB_EXTIF_PCMCIA_IOWAIT 0x001C -#define SSB_EXTIF_PROG_CFG 0x0020 -#define SSB_EXTIF_PROG_WAITCNT 0x0024 -#define SSB_EXTIF_FLASH_CFG 0x0028 -#define SSB_EXTIF_FLASH_WAITCNT 0x002C -#define SSB_EXTIF_WATCHDOG 0x0040 -#define SSB_EXTIF_CLOCK_N 0x0044 -#define SSB_EXTIF_CLOCK_SB 0x0048 -#define SSB_EXTIF_CLOCK_PCI 0x004C -#define SSB_EXTIF_CLOCK_MII 0x0050 -#define SSB_EXTIF_GPIO_IN 0x0060 -#define SSB_EXTIF_GPIO_OUT_BASE 0x0064 -#define SSB_EXTIF_GPIO_OUTEN_BASE 0x0068 -#define SSB_EXTIF_EJTAG_OUTEN 0x0090 -#define SSB_EXTIF_GPIO_INTPOL 0x0094 -#define SSB_EXTIF_GPIO_INTMASK 0x0098 -#define SSB_EXTIF_UART_DATA 0x0300 -#define SSB_EXTIF_UART_TIMER 0x0310 -#define SSB_EXTIF_UART_FCR 0x0320 -#define SSB_EXTIF_UART_LCR 0x0330 -#define SSB_EXTIF_UART_MCR 0x0340 -#define SSB_EXTIF_UART_LSR 0x0350 -#define SSB_EXTIF_UART_MSR 0x0360 -#define SSB_EXTIF_UART_SCRATCH 0x0370 - - - - -/* pcmcia/prog/flash_config */ -#define SSB_EXTCFG_EN (1 << 0) /* enable */ -#define SSB_EXTCFG_MODE 0xE /* mode */ -#define SSB_EXTCFG_MODE_SHIFT 1 -#define SSB_EXTCFG_MODE_FLASH 0x0 /* flash/asynchronous mode */ -#define SSB_EXTCFG_MODE_SYNC 0x2 /* synchronous mode */ -#define SSB_EXTCFG_MODE_PCMCIA 0x4 /* pcmcia mode */ -#define SSB_EXTCFG_DS16 (1 << 4) /* destsize: 0=8bit, 1=16bit */ -#define SSB_EXTCFG_BSWAP (1 << 5) /* byteswap */ -#define SSB_EXTCFG_CLKDIV 0xC0 /* clock divider */ -#define SSB_EXTCFG_CLKDIV_SHIFT 6 -#define SSB_EXTCFG_CLKDIV_2 0x0 /* backplane/2 */ -#define SSB_EXTCFG_CLKDIV_3 0x40 /* backplane/3 */ -#define SSB_EXTCFG_CLKDIV_4 0x80 /* backplane/4 */ -#define SSB_EXTCFG_CLKEN (1 << 8) /* clock enable */ -#define SSB_EXTCFG_STROBE (1 << 9) /* size/bytestrobe (synch only) */ - -/* pcmcia_memwait */ -#define SSB_PCMCIA_MEMW_0 0x0000003F /* waitcount0 */ -#define SSB_PCMCIA_MEMW_1 0x00001F00 /* waitcount1 */ -#define SSB_PCMCIA_MEMW_1_SHIFT 8 -#define SSB_PCMCIA_MEMW_2 0x001F0000 /* waitcount2 */ -#define SSB_PCMCIA_MEMW_2_SHIFT 16 -#define SSB_PCMCIA_MEMW_3 0x1F000000 /* waitcount3 */ -#define SSB_PCMCIA_MEMW_3_SHIFT 24 - -/* pcmcia_attrwait */ -#define SSB_PCMCIA_ATTW_0 0x0000003F /* waitcount0 */ -#define SSB_PCMCIA_ATTW_1 0x00001F00 /* waitcount1 */ -#define SSB_PCMCIA_ATTW_1_SHIFT 8 -#define SSB_PCMCIA_ATTW_2 0x001F0000 /* waitcount2 */ -#define SSB_PCMCIA_ATTW_2_SHIFT 16 -#define SSB_PCMCIA_ATTW_3 0x1F000000 /* waitcount3 */ -#define SSB_PCMCIA_ATTW_3_SHIFT 24 - -/* pcmcia_iowait */ -#define SSB_PCMCIA_IOW_0 0x0000003F /* waitcount0 */ -#define SSB_PCMCIA_IOW_1 0x00001F00 /* waitcount1 */ -#define SSB_PCMCIA_IOW_1_SHIFT 8 -#define SSB_PCMCIA_IOW_2 0x001F0000 /* waitcount2 */ -#define SSB_PCMCIA_IOW_2_SHIFT 16 -#define SSB_PCMCIA_IOW_3 0x1F000000 /* waitcount3 */ -#define SSB_PCMCIA_IOW_3_SHIFT 24 - -/* prog_waitcount */ -#define SSB_PROG_WCNT_0 0x0000001F /* waitcount0 */ -#define SSB_PROG_WCNT_1 0x00001F00 /* waitcount1 */ -#define SSB_PROG_WCNT_1_SHIFT 8 -#define SSB_PROG_WCNT_2 0x001F0000 /* waitcount2 */ -#define SSB_PROG_WCNT_2_SHIFT 16 -#define SSB_PROG_WCNT_3 0x1F000000 /* waitcount3 */ -#define SSB_PROG_WCNT_3_SHIFT 24 - -#define SSB_PROG_W0 0x0000000C -#define SSB_PROG_W1 0x00000A00 -#define SSB_PROG_W2 0x00020000 -#define SSB_PROG_W3 0x01000000 - -/* flash_waitcount */ -#define SSB_FLASH_WCNT_0 0x0000001F /* waitcount0 */ -#define SSB_FLASH_WCNT_1 0x00001F00 /* waitcount1 */ -#define SSB_FLASH_WCNT_1_SHIFT 8 -#define SSB_FLASH_WCNT_2 0x001F0000 /* waitcount2 */ -#define SSB_FLASH_WCNT_2_SHIFT 16 -#define SSB_FLASH_WCNT_3 0x1F000000 /* waitcount3 */ -#define SSB_FLASH_WCNT_3_SHIFT 24 - -/* watchdog */ -#define SSB_EXTIF_WATCHDOG_CLK 48000000 /* Hz */ - - - -#ifdef CONFIG_SSB_DRIVER_EXTIF - -struct ssb_extif { - struct ssb_device *dev; -}; - -static inline bool ssb_extif_available(struct ssb_extif *extif) -{ - return (extif->dev != NULL); -} - -extern void ssb_extif_get_clockcontrol(struct ssb_extif *extif, - u32 *plltype, u32 *n, u32 *m); - -extern void ssb_extif_timing_init(struct ssb_extif *extif, - unsigned long ns); - -extern void ssb_extif_watchdog_timer_set(struct ssb_extif *extif, - u32 ticks); - -/* Extif GPIO pin access */ -u32 ssb_extif_gpio_in(struct ssb_extif *extif, u32 mask); -u32 ssb_extif_gpio_out(struct ssb_extif *extif, u32 mask, u32 value); -u32 ssb_extif_gpio_outen(struct ssb_extif *extif, u32 mask, u32 value); -u32 ssb_extif_gpio_polarity(struct ssb_extif *extif, u32 mask, u32 value); -u32 ssb_extif_gpio_intmask(struct ssb_extif *extif, u32 mask, u32 value); - -#ifdef CONFIG_SSB_SERIAL -extern int ssb_extif_serial_init(struct ssb_extif *extif, - struct ssb_serial_port *ports); -#endif /* CONFIG_SSB_SERIAL */ - - -#else /* CONFIG_SSB_DRIVER_EXTIF */ -/* extif disabled */ - -struct ssb_extif { -}; - -static inline bool ssb_extif_available(struct ssb_extif *extif) -{ - return 0; -} - -static inline -void ssb_extif_get_clockcontrol(struct ssb_extif *extif, - u32 *plltype, u32 *n, u32 *m) -{ -} - -static inline -void ssb_extif_watchdog_timer_set(struct ssb_extif *extif, - u32 ticks) -{ -} - -#endif /* CONFIG_SSB_DRIVER_EXTIF */ -#endif /* LINUX_SSB_EXTIFCORE_H_ */ diff --git a/openairITS/mac/DOT11/include/linux/ssb/ssb_driver_gige.h b/openairITS/mac/DOT11/include/linux/ssb/ssb_driver_gige.h deleted file mode 100644 index 6b05dcd927..0000000000 --- a/openairITS/mac/DOT11/include/linux/ssb/ssb_driver_gige.h +++ /dev/null @@ -1,180 +0,0 @@ -#ifndef LINUX_SSB_DRIVER_GIGE_H_ -#define LINUX_SSB_DRIVER_GIGE_H_ - -#include -#include -#include -#include - - -#ifdef CONFIG_SSB_DRIVER_GIGE - - -#define SSB_GIGE_PCIIO 0x0000 /* PCI I/O Registers (1024 bytes) */ -#define SSB_GIGE_RESERVED 0x0400 /* Reserved (1024 bytes) */ -#define SSB_GIGE_PCICFG 0x0800 /* PCI config space (256 bytes) */ -#define SSB_GIGE_SHIM_FLUSHSTAT 0x0C00 /* PCI to OCP: Flush status control (32bit) */ -#define SSB_GIGE_SHIM_FLUSHRDA 0x0C04 /* PCI to OCP: Flush read address (32bit) */ -#define SSB_GIGE_SHIM_FLUSHTO 0x0C08 /* PCI to OCP: Flush timeout counter (32bit) */ -#define SSB_GIGE_SHIM_BARRIER 0x0C0C /* PCI to OCP: Barrier register (32bit) */ -#define SSB_GIGE_SHIM_MAOCPSI 0x0C10 /* PCI to OCP: MaocpSI Control (32bit) */ -#define SSB_GIGE_SHIM_SIOCPMA 0x0C14 /* PCI to OCP: SiocpMa Control (32bit) */ - -/* TM Status High flags */ -#define SSB_GIGE_TMSHIGH_RGMII 0x00010000 /* Have an RGMII PHY-bus */ -/* TM Status Low flags */ -#define SSB_GIGE_TMSLOW_TXBYPASS 0x00080000 /* TX bypass (no delay) */ -#define SSB_GIGE_TMSLOW_RXBYPASS 0x00100000 /* RX bypass (no delay) */ -#define SSB_GIGE_TMSLOW_DLLEN 0x01000000 /* Enable DLL controls */ - -/* Boardflags (low) */ -#define SSB_GIGE_BFL_ROBOSWITCH 0x0010 - - -#define SSB_GIGE_MEM_RES_NAME "SSB Broadcom 47xx GigE memory" -#define SSB_GIGE_IO_RES_NAME "SSB Broadcom 47xx GigE I/O" - -struct ssb_gige { - struct ssb_device *dev; - - spinlock_t lock; - - /* True, if the device has an RGMII bus. - * False, if the device has a GMII bus. */ - bool has_rgmii; - - /* The PCI controller device. */ - struct pci_controller pci_controller; - struct pci_ops pci_ops; - struct resource mem_resource; - struct resource io_resource; -}; - -/* Check whether a PCI device is a SSB Gigabit Ethernet core. */ -extern bool pdev_is_ssb_gige_core(struct pci_dev *pdev); - -/* Convert a pci_dev pointer to a ssb_gige pointer. */ -static inline struct ssb_gige * pdev_to_ssb_gige(struct pci_dev *pdev) -{ - if (!pdev_is_ssb_gige_core(pdev)) - return NULL; - return container_of(pdev->bus->ops, struct ssb_gige, pci_ops); -} - -/* Returns whether the PHY is connected by an RGMII bus. */ -static inline bool ssb_gige_is_rgmii(struct pci_dev *pdev) -{ - struct ssb_gige *dev = pdev_to_ssb_gige(pdev); - return (dev ? dev->has_rgmii : 0); -} - -/* Returns whether we have a Roboswitch. */ -static inline bool ssb_gige_have_roboswitch(struct pci_dev *pdev) -{ - struct ssb_gige *dev = pdev_to_ssb_gige(pdev); - if (dev) - return !!(dev->dev->bus->sprom.boardflags_lo & - SSB_GIGE_BFL_ROBOSWITCH); - return 0; -} - -/* Returns whether we can only do one DMA at once. */ -static inline bool ssb_gige_one_dma_at_once(struct pci_dev *pdev) -{ - struct ssb_gige *dev = pdev_to_ssb_gige(pdev); - if (dev) - return ((dev->dev->bus->chip_id == 0x4785) && - (dev->dev->bus->chip_rev < 2)); - return 0; -} - -/* Returns whether we must flush posted writes. */ -static inline bool ssb_gige_must_flush_posted_writes(struct pci_dev *pdev) -{ - struct ssb_gige *dev = pdev_to_ssb_gige(pdev); - if (dev) - return (dev->dev->bus->chip_id == 0x4785); - return 0; -} - -#ifdef CONFIG_BCM47XX -#include -/* Get the device MAC address */ -static inline void ssb_gige_get_macaddr(struct pci_dev *pdev, u8 *macaddr) -{ - char buf[20]; - if (nvram_getenv("et0macaddr", buf, sizeof(buf)) < 0) - return; - nvram_parse_macaddr(buf, macaddr); -} -#else -static inline void ssb_gige_get_macaddr(struct pci_dev *pdev, u8 *macaddr) -{ -} -#endif - -extern int ssb_gige_pcibios_plat_dev_init(struct ssb_device *sdev, - struct pci_dev *pdev); -extern int ssb_gige_map_irq(struct ssb_device *sdev, - const struct pci_dev *pdev); - -/* The GigE driver is not a standalone module, because we don't have support - * for unregistering the driver. So we could not unload the module anyway. */ -extern int ssb_gige_init(void); -static inline void ssb_gige_exit(void) -{ - /* Currently we can not unregister the GigE driver, - * because we can not unregister the PCI bridge. */ - BUG(); -} - - -#else /* CONFIG_SSB_DRIVER_GIGE */ -/* Gigabit Ethernet driver disabled */ - - -static inline int ssb_gige_pcibios_plat_dev_init(struct ssb_device *sdev, - struct pci_dev *pdev) -{ - return -ENOSYS; -} -static inline int ssb_gige_map_irq(struct ssb_device *sdev, - const struct pci_dev *pdev) -{ - return -ENOSYS; -} -static inline int ssb_gige_init(void) -{ - return 0; -} -static inline void ssb_gige_exit(void) -{ -} - -static inline bool pdev_is_ssb_gige_core(struct pci_dev *pdev) -{ - return 0; -} -static inline struct ssb_gige * pdev_to_ssb_gige(struct pci_dev *pdev) -{ - return NULL; -} -static inline bool ssb_gige_is_rgmii(struct pci_dev *pdev) -{ - return 0; -} -static inline bool ssb_gige_have_roboswitch(struct pci_dev *pdev) -{ - return 0; -} -static inline bool ssb_gige_one_dma_at_once(struct pci_dev *pdev) -{ - return 0; -} -static inline bool ssb_gige_must_flush_posted_writes(struct pci_dev *pdev) -{ - return 0; -} - -#endif /* CONFIG_SSB_DRIVER_GIGE */ -#endif /* LINUX_SSB_DRIVER_GIGE_H_ */ diff --git a/openairITS/mac/DOT11/include/linux/ssb/ssb_driver_mips.h b/openairITS/mac/DOT11/include/linux/ssb/ssb_driver_mips.h deleted file mode 100644 index 5f44e9740c..0000000000 --- a/openairITS/mac/DOT11/include/linux/ssb/ssb_driver_mips.h +++ /dev/null @@ -1,46 +0,0 @@ -#ifndef LINUX_SSB_MIPSCORE_H_ -#define LINUX_SSB_MIPSCORE_H_ - -#ifdef CONFIG_SSB_DRIVER_MIPS - -struct ssb_device; - -struct ssb_serial_port { - void *regs; - unsigned long clockspeed; - unsigned int irq; - unsigned int baud_base; - unsigned int reg_shift; -}; - - -struct ssb_mipscore { - struct ssb_device *dev; - - int nr_serial_ports; - struct ssb_serial_port serial_ports[4]; - - u8 flash_buswidth; - u32 flash_window; - u32 flash_window_size; -}; - -extern void ssb_mipscore_init(struct ssb_mipscore *mcore); -extern u32 ssb_cpu_clock(struct ssb_mipscore *mcore); - -extern unsigned int ssb_mips_irq(struct ssb_device *dev); - - -#else /* CONFIG_SSB_DRIVER_MIPS */ - -struct ssb_mipscore { -}; - -static inline -void ssb_mipscore_init(struct ssb_mipscore *mcore) -{ -} - -#endif /* CONFIG_SSB_DRIVER_MIPS */ - -#endif /* LINUX_SSB_MIPSCORE_H_ */ diff --git a/openairITS/mac/DOT11/include/linux/ssb/ssb_driver_pci.h b/openairITS/mac/DOT11/include/linux/ssb/ssb_driver_pci.h deleted file mode 100644 index 41e330e51c..0000000000 --- a/openairITS/mac/DOT11/include/linux/ssb/ssb_driver_pci.h +++ /dev/null @@ -1,130 +0,0 @@ -#ifndef LINUX_SSB_PCICORE_H_ -#define LINUX_SSB_PCICORE_H_ - -#include - -struct pci_dev; - - -#ifdef CONFIG_SSB_DRIVER_PCICORE - -/* PCI core registers. */ -#define SSB_PCICORE_CTL 0x0000 /* PCI Control */ -#define SSB_PCICORE_CTL_RST_OE 0x00000001 /* PCI_RESET Output Enable */ -#define SSB_PCICORE_CTL_RST 0x00000002 /* PCI_RESET driven out to pin */ -#define SSB_PCICORE_CTL_CLK_OE 0x00000004 /* Clock gate Output Enable */ -#define SSB_PCICORE_CTL_CLK 0x00000008 /* Gate for clock driven out to pin */ -#define SSB_PCICORE_ARBCTL 0x0010 /* PCI Arbiter Control */ -#define SSB_PCICORE_ARBCTL_INTERN 0x00000001 /* Use internal arbiter */ -#define SSB_PCICORE_ARBCTL_EXTERN 0x00000002 /* Use external arbiter */ -#define SSB_PCICORE_ARBCTL_PARKID 0x00000006 /* Mask, selects which agent is parked on an idle bus */ -#define SSB_PCICORE_ARBCTL_PARKID_LAST 0x00000000 /* Last requestor */ -#define SSB_PCICORE_ARBCTL_PARKID_4710 0x00000002 /* 4710 */ -#define SSB_PCICORE_ARBCTL_PARKID_EXT0 0x00000004 /* External requestor 0 */ -#define SSB_PCICORE_ARBCTL_PARKID_EXT1 0x00000006 /* External requestor 1 */ -#define SSB_PCICORE_ISTAT 0x0020 /* Interrupt status */ -#define SSB_PCICORE_ISTAT_INTA 0x00000001 /* PCI INTA# */ -#define SSB_PCICORE_ISTAT_INTB 0x00000002 /* PCI INTB# */ -#define SSB_PCICORE_ISTAT_SERR 0x00000004 /* PCI SERR# (write to clear) */ -#define SSB_PCICORE_ISTAT_PERR 0x00000008 /* PCI PERR# (write to clear) */ -#define SSB_PCICORE_ISTAT_PME 0x00000010 /* PCI PME# */ -#define SSB_PCICORE_IMASK 0x0024 /* Interrupt mask */ -#define SSB_PCICORE_IMASK_INTA 0x00000001 /* PCI INTA# */ -#define SSB_PCICORE_IMASK_INTB 0x00000002 /* PCI INTB# */ -#define SSB_PCICORE_IMASK_SERR 0x00000004 /* PCI SERR# */ -#define SSB_PCICORE_IMASK_PERR 0x00000008 /* PCI PERR# */ -#define SSB_PCICORE_IMASK_PME 0x00000010 /* PCI PME# */ -#define SSB_PCICORE_MBOX 0x0028 /* Backplane to PCI Mailbox */ -#define SSB_PCICORE_MBOX_F0_0 0x00000100 /* PCI function 0, INT 0 */ -#define SSB_PCICORE_MBOX_F0_1 0x00000200 /* PCI function 0, INT 1 */ -#define SSB_PCICORE_MBOX_F1_0 0x00000400 /* PCI function 1, INT 0 */ -#define SSB_PCICORE_MBOX_F1_1 0x00000800 /* PCI function 1, INT 1 */ -#define SSB_PCICORE_MBOX_F2_0 0x00001000 /* PCI function 2, INT 0 */ -#define SSB_PCICORE_MBOX_F2_1 0x00002000 /* PCI function 2, INT 1 */ -#define SSB_PCICORE_MBOX_F3_0 0x00004000 /* PCI function 3, INT 0 */ -#define SSB_PCICORE_MBOX_F3_1 0x00008000 /* PCI function 3, INT 1 */ -#define SSB_PCICORE_BCAST_ADDR 0x0050 /* Backplane Broadcast Address */ -#define SSB_PCICORE_BCAST_ADDR_MASK 0x000000FF -#define SSB_PCICORE_BCAST_DATA 0x0054 /* Backplane Broadcast Data */ -#define SSB_PCICORE_GPIO_IN 0x0060 /* rev >= 2 only */ -#define SSB_PCICORE_GPIO_OUT 0x0064 /* rev >= 2 only */ -#define SSB_PCICORE_GPIO_ENABLE 0x0068 /* rev >= 2 only */ -#define SSB_PCICORE_GPIO_CTL 0x006C /* rev >= 2 only */ -#define SSB_PCICORE_SBTOPCI0 0x0100 /* Backplane to PCI translation 0 (sbtopci0) */ -#define SSB_PCICORE_SBTOPCI0_MASK 0xFC000000 -#define SSB_PCICORE_SBTOPCI1 0x0104 /* Backplane to PCI translation 1 (sbtopci1) */ -#define SSB_PCICORE_SBTOPCI1_MASK 0xFC000000 -#define SSB_PCICORE_SBTOPCI2 0x0108 /* Backplane to PCI translation 2 (sbtopci2) */ -#define SSB_PCICORE_SBTOPCI2_MASK 0xC0000000 -#define SSB_PCICORE_PCICFG0 0x0400 /* PCI config space 0 (rev >= 8) */ -#define SSB_PCICORE_PCICFG1 0x0500 /* PCI config space 1 (rev >= 8) */ -#define SSB_PCICORE_PCICFG2 0x0600 /* PCI config space 2 (rev >= 8) */ -#define SSB_PCICORE_PCICFG3 0x0700 /* PCI config space 3 (rev >= 8) */ -#define SSB_PCICORE_SPROM(wordoffset) (0x0800 + ((wordoffset) * 2)) /* SPROM shadow area (72 bytes) */ - -/* SBtoPCIx */ -#define SSB_PCICORE_SBTOPCI_MEM 0x00000000 -#define SSB_PCICORE_SBTOPCI_IO 0x00000001 -#define SSB_PCICORE_SBTOPCI_CFG0 0x00000002 -#define SSB_PCICORE_SBTOPCI_CFG1 0x00000003 -#define SSB_PCICORE_SBTOPCI_PREF 0x00000004 /* Prefetch enable */ -#define SSB_PCICORE_SBTOPCI_BURST 0x00000008 /* Burst enable */ -#define SSB_PCICORE_SBTOPCI_MRM 0x00000020 /* Memory Read Multiple */ -#define SSB_PCICORE_SBTOPCI_RC 0x00000030 /* Read Command mask (rev >= 11) */ -#define SSB_PCICORE_SBTOPCI_RC_READ 0x00000000 /* Memory read */ -#define SSB_PCICORE_SBTOPCI_RC_READL 0x00000010 /* Memory read line */ -#define SSB_PCICORE_SBTOPCI_RC_READM 0x00000020 /* Memory read multiple */ - - -/* PCIcore specific boardflags */ -#define SSB_PCICORE_BFL_NOPCI 0x00000400 /* Board leaves PCI floating */ - - -struct ssb_pcicore { - struct ssb_device *dev; - u8 setup_done:1; - u8 hostmode:1; - u8 cardbusmode:1; -}; - -extern void ssb_pcicore_init(struct ssb_pcicore *pc); - -/* Enable IRQ routing for a specific device */ -extern int ssb_pcicore_dev_irqvecs_enable(struct ssb_pcicore *pc, - struct ssb_device *dev); - -int ssb_pcicore_plat_dev_init(struct pci_dev *d); -int ssb_pcicore_pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin); - - -#else /* CONFIG_SSB_DRIVER_PCICORE */ - - -struct ssb_pcicore { -}; - -static inline -void ssb_pcicore_init(struct ssb_pcicore *pc) -{ -} - -static inline -int ssb_pcicore_dev_irqvecs_enable(struct ssb_pcicore *pc, - struct ssb_device *dev) -{ - return 0; -} - -static inline -int ssb_pcicore_plat_dev_init(struct pci_dev *d) -{ - return -ENODEV; -} -static inline -int ssb_pcicore_pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin) -{ - return -ENODEV; -} - -#endif /* CONFIG_SSB_DRIVER_PCICORE */ -#endif /* LINUX_SSB_PCICORE_H_ */ diff --git a/openairITS/mac/DOT11/include/linux/ssb/ssb_embedded.h b/openairITS/mac/DOT11/include/linux/ssb/ssb_embedded.h deleted file mode 100644 index 8d8dedff05..0000000000 --- a/openairITS/mac/DOT11/include/linux/ssb/ssb_embedded.h +++ /dev/null @@ -1,18 +0,0 @@ -#ifndef LINUX_SSB_EMBEDDED_H_ -#define LINUX_SSB_EMBEDDED_H_ - -#include -#include - - -extern int ssb_watchdog_timer_set(struct ssb_bus *bus, u32 ticks); - -/* Generic GPIO API */ -u32 ssb_gpio_in(struct ssb_bus *bus, u32 mask); -u32 ssb_gpio_out(struct ssb_bus *bus, u32 mask, u32 value); -u32 ssb_gpio_outen(struct ssb_bus *bus, u32 mask, u32 value); -u32 ssb_gpio_control(struct ssb_bus *bus, u32 mask, u32 value); -u32 ssb_gpio_intmask(struct ssb_bus *bus, u32 mask, u32 value); -u32 ssb_gpio_polarity(struct ssb_bus *bus, u32 mask, u32 value); - -#endif /* LINUX_SSB_EMBEDDED_H_ */ diff --git a/openairITS/mac/DOT11/include/linux/ssb/ssb_regs.h b/openairITS/mac/DOT11/include/linux/ssb/ssb_regs.h deleted file mode 100644 index 40b1ef8595..0000000000 --- a/openairITS/mac/DOT11/include/linux/ssb/ssb_regs.h +++ /dev/null @@ -1,594 +0,0 @@ -#ifndef LINUX_SSB_REGS_H_ -#define LINUX_SSB_REGS_H_ - - -/* SiliconBackplane Address Map. - * All regions may not exist on all chips. - */ -#define SSB_SDRAM_BASE 0x00000000U /* Physical SDRAM */ -#define SSB_PCI_MEM 0x08000000U /* Host Mode sb2pcitranslation0 (64 MB) */ -#define SSB_PCI_CFG 0x0c000000U /* Host Mode sb2pcitranslation1 (64 MB) */ -#define SSB_SDRAM_SWAPPED 0x10000000U /* Byteswapped Physical SDRAM */ -#define SSB_ENUM_BASE 0x18000000U /* Enumeration space base */ -#define SSB_ENUM_LIMIT 0x18010000U /* Enumeration space limit */ - -#define SSB_FLASH2 0x1c000000U /* Flash Region 2 (region 1 shadowed here) */ -#define SSB_FLASH2_SZ 0x02000000U /* Size of Flash Region 2 */ - -#define SSB_EXTIF_BASE 0x1f000000U /* External Interface region base address */ -#define SSB_FLASH1 0x1fc00000U /* Flash Region 1 */ -#define SSB_FLASH1_SZ 0x00400000U /* Size of Flash Region 1 */ - -#define SSB_PCI_DMA 0x40000000U /* Client Mode sb2pcitranslation2 (1 GB) */ -#define SSB_PCI_DMA_SZ 0x40000000U /* Client Mode sb2pcitranslation2 size in bytes */ -#define SSB_PCIE_DMA_L32 0x00000000U /* PCIE Client Mode sb2pcitranslation2 (2 ZettaBytes), low 32 bits */ -#define SSB_PCIE_DMA_H32 0x80000000U /* PCIE Client Mode sb2pcitranslation2 (2 ZettaBytes), high 32 bits */ -#define SSB_EUART (SSB_EXTIF_BASE + 0x00800000) -#define SSB_LED (SSB_EXTIF_BASE + 0x00900000) - - -/* Enumeration space constants */ -#define SSB_CORE_SIZE 0x1000 /* Size of a core MMIO area */ -#define SSB_MAX_NR_CORES ((SSB_ENUM_LIMIT - SSB_ENUM_BASE) / SSB_CORE_SIZE) - - -/* mips address */ -#define SSB_EJTAG 0xff200000 /* MIPS EJTAG space (2M) */ - - -/* SSB PCI config space registers. */ -#define SSB_PMCSR 0x44 -#define SSB_PE 0x100 -#define SSB_BAR0_WIN 0x80 /* Backplane address space 0 */ -#define SSB_BAR1_WIN 0x84 /* Backplane address space 1 */ -#define SSB_SPROMCTL 0x88 /* SPROM control */ -#define SSB_SPROMCTL_WE 0x10 /* SPROM write enable */ -#define SSB_BAR1_CONTROL 0x8c /* Address space 1 burst control */ -#define SSB_PCI_IRQS 0x90 /* PCI interrupts */ -#define SSB_PCI_IRQMASK 0x94 /* PCI IRQ control and mask (pcirev >= 6 only) */ -#define SSB_BACKPLANE_IRQS 0x98 /* Backplane Interrupts */ -#define SSB_GPIO_IN 0xB0 /* GPIO Input (pcirev >= 3 only) */ -#define SSB_GPIO_OUT 0xB4 /* GPIO Output (pcirev >= 3 only) */ -#define SSB_GPIO_OUT_ENABLE 0xB8 /* GPIO Output Enable/Disable (pcirev >= 3 only) */ -#define SSB_GPIO_SCS 0x10 /* PCI config space bit 4 for 4306c0 slow clock source */ -#define SSB_GPIO_HWRAD 0x20 /* PCI config space GPIO 13 for hw radio disable */ -#define SSB_GPIO_XTAL 0x40 /* PCI config space GPIO 14 for Xtal powerup */ -#define SSB_GPIO_PLL 0x80 /* PCI config space GPIO 15 for PLL powerdown */ - - -#define SSB_BAR0_MAX_RETRIES 50 - -/* Silicon backplane configuration register definitions */ -#define SSB_IPSFLAG 0x0F08 -#define SSB_IPSFLAG_IRQ1 0x0000003F /* which sbflags get routed to mips interrupt 1 */ -#define SSB_IPSFLAG_IRQ1_SHIFT 0 -#define SSB_IPSFLAG_IRQ2 0x00003F00 /* which sbflags get routed to mips interrupt 2 */ -#define SSB_IPSFLAG_IRQ2_SHIFT 8 -#define SSB_IPSFLAG_IRQ3 0x003F0000 /* which sbflags get routed to mips interrupt 3 */ -#define SSB_IPSFLAG_IRQ3_SHIFT 16 -#define SSB_IPSFLAG_IRQ4 0x3F000000 /* which sbflags get routed to mips interrupt 4 */ -#define SSB_IPSFLAG_IRQ4_SHIFT 24 -#define SSB_TPSFLAG 0x0F18 -#define SSB_TPSFLAG_BPFLAG 0x0000003F /* Backplane flag # */ -#define SSB_TPSFLAG_ALWAYSIRQ 0x00000040 /* IRQ is always sent on the Backplane */ -#define SSB_TMERRLOGA 0x0F48 -#define SSB_TMERRLOG 0x0F50 -#define SSB_ADMATCH3 0x0F60 -#define SSB_ADMATCH2 0x0F68 -#define SSB_ADMATCH1 0x0F70 -#define SSB_IMSTATE 0x0F90 /* SB Initiator Agent State */ -#define SSB_IMSTATE_PC 0x0000000f /* Pipe Count */ -#define SSB_IMSTATE_AP_MASK 0x00000030 /* Arbitration Priority */ -#define SSB_IMSTATE_AP_BOTH 0x00000000 /* Use both timeslices and token */ -#define SSB_IMSTATE_AP_TS 0x00000010 /* Use timeslices only */ -#define SSB_IMSTATE_AP_TK 0x00000020 /* Use token only */ -#define SSB_IMSTATE_AP_RSV 0x00000030 /* Reserved */ -#define SSB_IMSTATE_IBE 0x00020000 /* In Band Error */ -#define SSB_IMSTATE_TO 0x00040000 /* Timeout */ -#define SSB_IMSTATE_BUSY 0x01800000 /* Busy (Backplane rev >= 2.3 only) */ -#define SSB_IMSTATE_REJECT 0x02000000 /* Reject (Backplane rev >= 2.3 only) */ -#define SSB_INTVEC 0x0F94 /* SB Interrupt Mask */ -#define SSB_INTVEC_PCI 0x00000001 /* Enable interrupts for PCI */ -#define SSB_INTVEC_ENET0 0x00000002 /* Enable interrupts for enet 0 */ -#define SSB_INTVEC_ILINE20 0x00000004 /* Enable interrupts for iline20 */ -#define SSB_INTVEC_CODEC 0x00000008 /* Enable interrupts for v90 codec */ -#define SSB_INTVEC_USB 0x00000010 /* Enable interrupts for usb */ -#define SSB_INTVEC_EXTIF 0x00000020 /* Enable interrupts for external i/f */ -#define SSB_INTVEC_ENET1 0x00000040 /* Enable interrupts for enet 1 */ -#define SSB_TMSLOW 0x0F98 /* SB Target State Low */ -#define SSB_TMSLOW_RESET 0x00000001 /* Reset */ -#define SSB_TMSLOW_REJECT 0x00000002 /* Reject (Standard Backplane) */ -#define SSB_TMSLOW_REJECT_23 0x00000004 /* Reject (Backplane rev 2.3) */ -#define SSB_TMSLOW_CLOCK 0x00010000 /* Clock Enable */ -#define SSB_TMSLOW_FGC 0x00020000 /* Force Gated Clocks On */ -#define SSB_TMSLOW_PE 0x40000000 /* Power Management Enable */ -#define SSB_TMSLOW_BE 0x80000000 /* BIST Enable */ -#define SSB_TMSHIGH 0x0F9C /* SB Target State High */ -#define SSB_TMSHIGH_SERR 0x00000001 /* S-error */ -#define SSB_TMSHIGH_INT 0x00000002 /* Interrupt */ -#define SSB_TMSHIGH_BUSY 0x00000004 /* Busy */ -#define SSB_TMSHIGH_TO 0x00000020 /* Timeout. Backplane rev >= 2.3 only */ -#define SSB_TMSHIGH_COREFL 0x1FFF0000 /* Core specific flags */ -#define SSB_TMSHIGH_COREFL_SHIFT 16 -#define SSB_TMSHIGH_DMA64 0x10000000 /* 64bit DMA supported */ -#define SSB_TMSHIGH_GCR 0x20000000 /* Gated Clock Request */ -#define SSB_TMSHIGH_BISTF 0x40000000 /* BIST Failed */ -#define SSB_TMSHIGH_BISTD 0x80000000 /* BIST Done */ -#define SSB_BWA0 0x0FA0 -#define SSB_IMCFGLO 0x0FA8 -#define SSB_IMCFGLO_SERTO 0x00000007 /* Service timeout */ -#define SSB_IMCFGLO_REQTO 0x00000070 /* Request timeout */ -#define SSB_IMCFGLO_REQTO_SHIFT 4 -#define SSB_IMCFGLO_CONNID 0x00FF0000 /* Connection ID */ -#define SSB_IMCFGLO_CONNID_SHIFT 16 -#define SSB_IMCFGHI 0x0FAC -#define SSB_ADMATCH0 0x0FB0 -#define SSB_TMCFGLO 0x0FB8 -#define SSB_TMCFGHI 0x0FBC -#define SSB_BCONFIG 0x0FC0 -#define SSB_BSTATE 0x0FC8 -#define SSB_ACTCFG 0x0FD8 -#define SSB_FLAGST 0x0FE8 -#define SSB_IDLOW 0x0FF8 -#define SSB_IDLOW_CFGSP 0x00000003 /* Config Space */ -#define SSB_IDLOW_ADDRNGE 0x00000038 /* Address Ranges supported */ -#define SSB_IDLOW_ADDRNGE_SHIFT 3 -#define SSB_IDLOW_SYNC 0x00000040 -#define SSB_IDLOW_INITIATOR 0x00000080 -#define SSB_IDLOW_MIBL 0x00000F00 /* Minimum Backplane latency */ -#define SSB_IDLOW_MIBL_SHIFT 8 -#define SSB_IDLOW_MABL 0x0000F000 /* Maximum Backplane latency */ -#define SSB_IDLOW_MABL_SHIFT 12 -#define SSB_IDLOW_TIF 0x00010000 /* This Initiator is first */ -#define SSB_IDLOW_CCW 0x000C0000 /* Cycle counter width */ -#define SSB_IDLOW_CCW_SHIFT 18 -#define SSB_IDLOW_TPT 0x00F00000 /* Target ports */ -#define SSB_IDLOW_TPT_SHIFT 20 -#define SSB_IDLOW_INITP 0x0F000000 /* Initiator ports */ -#define SSB_IDLOW_INITP_SHIFT 24 -#define SSB_IDLOW_SSBREV 0xF0000000 /* Sonics Backplane Revision code */ -#define SSB_IDLOW_SSBREV_22 0x00000000 /* <= 2.2 */ -#define SSB_IDLOW_SSBREV_23 0x10000000 /* 2.3 */ -#define SSB_IDLOW_SSBREV_24 0x40000000 /* ?? Found in BCM4328 */ -#define SSB_IDLOW_SSBREV_25 0x50000000 /* ?? Not Found yet */ -#define SSB_IDLOW_SSBREV_26 0x60000000 /* ?? Found in some BCM4311/2 */ -#define SSB_IDLOW_SSBREV_27 0x70000000 /* ?? Found in some BCM4311/2 */ -#define SSB_IDHIGH 0x0FFC /* SB Identification High */ -#define SSB_IDHIGH_RCLO 0x0000000F /* Revision Code (low part) */ -#define SSB_IDHIGH_CC 0x00008FF0 /* Core Code */ -#define SSB_IDHIGH_CC_SHIFT 4 -#define SSB_IDHIGH_RCHI 0x00007000 /* Revision Code (high part) */ -#define SSB_IDHIGH_RCHI_SHIFT 8 /* yes, shift 8 is right */ -#define SSB_IDHIGH_VC 0xFFFF0000 /* Vendor Code */ -#define SSB_IDHIGH_VC_SHIFT 16 - -/* SPROM shadow area. If not otherwise noted, fields are - * two bytes wide. Note that the SPROM can _only_ be read - * in two-byte quantities. - */ -#define SSB_SPROMSIZE_WORDS 64 -#define SSB_SPROMSIZE_BYTES (SSB_SPROMSIZE_WORDS * sizeof(u16)) -#define SSB_SPROMSIZE_WORDS_R123 64 -#define SSB_SPROMSIZE_WORDS_R4 220 -#define SSB_SPROMSIZE_BYTES_R123 (SSB_SPROMSIZE_WORDS_R123 * sizeof(u16)) -#define SSB_SPROMSIZE_BYTES_R4 (SSB_SPROMSIZE_WORDS_R4 * sizeof(u16)) -#define SSB_SPROM_BASE1 0x1000 -#define SSB_SPROM_BASE31 0x0800 -#define SSB_SPROM_REVISION 0x007E -#define SSB_SPROM_REVISION_REV 0x00FF /* SPROM Revision number */ -#define SSB_SPROM_REVISION_CRC 0xFF00 /* SPROM CRC8 value */ -#define SSB_SPROM_REVISION_CRC_SHIFT 8 - -/* SPROM Revision 1 */ -#define SSB_SPROM1_SPID 0x0004 /* Subsystem Product ID for PCI */ -#define SSB_SPROM1_SVID 0x0006 /* Subsystem Vendor ID for PCI */ -#define SSB_SPROM1_PID 0x0008 /* Product ID for PCI */ -#define SSB_SPROM1_IL0MAC 0x0048 /* 6 bytes MAC address for 802.11b/g */ -#define SSB_SPROM1_ET0MAC 0x004E /* 6 bytes MAC address for Ethernet */ -#define SSB_SPROM1_ET1MAC 0x0054 /* 6 bytes MAC address for 802.11a */ -#define SSB_SPROM1_ETHPHY 0x005A /* Ethernet PHY settings */ -#define SSB_SPROM1_ETHPHY_ET0A 0x001F /* MII Address for enet0 */ -#define SSB_SPROM1_ETHPHY_ET1A 0x03E0 /* MII Address for enet1 */ -#define SSB_SPROM1_ETHPHY_ET1A_SHIFT 5 -#define SSB_SPROM1_ETHPHY_ET0M (1<<14) /* MDIO for enet0 */ -#define SSB_SPROM1_ETHPHY_ET1M (1<<15) /* MDIO for enet1 */ -#define SSB_SPROM1_BINF 0x005C /* Board info */ -#define SSB_SPROM1_BINF_BREV 0x00FF /* Board Revision */ -#define SSB_SPROM1_BINF_CCODE 0x0F00 /* Country Code */ -#define SSB_SPROM1_BINF_CCODE_SHIFT 8 -#define SSB_SPROM1_BINF_ANTBG 0x3000 /* Available B-PHY and G-PHY antennas */ -#define SSB_SPROM1_BINF_ANTBG_SHIFT 12 -#define SSB_SPROM1_BINF_ANTA 0xC000 /* Available A-PHY antennas */ -#define SSB_SPROM1_BINF_ANTA_SHIFT 14 -#define SSB_SPROM1_PA0B0 0x005E -#define SSB_SPROM1_PA0B1 0x0060 -#define SSB_SPROM1_PA0B2 0x0062 -#define SSB_SPROM1_GPIOA 0x0064 /* General Purpose IO pins 0 and 1 */ -#define SSB_SPROM1_GPIOA_P0 0x00FF /* Pin 0 */ -#define SSB_SPROM1_GPIOA_P1 0xFF00 /* Pin 1 */ -#define SSB_SPROM1_GPIOA_P1_SHIFT 8 -#define SSB_SPROM1_GPIOB 0x0066 /* General Purpuse IO pins 2 and 3 */ -#define SSB_SPROM1_GPIOB_P2 0x00FF /* Pin 2 */ -#define SSB_SPROM1_GPIOB_P3 0xFF00 /* Pin 3 */ -#define SSB_SPROM1_GPIOB_P3_SHIFT 8 -#define SSB_SPROM1_MAXPWR 0x0068 /* Power Amplifier Max Power */ -#define SSB_SPROM1_MAXPWR_BG 0x00FF /* B-PHY and G-PHY (in dBm Q5.2) */ -#define SSB_SPROM1_MAXPWR_A 0xFF00 /* A-PHY (in dBm Q5.2) */ -#define SSB_SPROM1_MAXPWR_A_SHIFT 8 -#define SSB_SPROM1_PA1B0 0x006A -#define SSB_SPROM1_PA1B1 0x006C -#define SSB_SPROM1_PA1B2 0x006E -#define SSB_SPROM1_ITSSI 0x0070 /* Idle TSSI Target */ -#define SSB_SPROM1_ITSSI_BG 0x00FF /* B-PHY and G-PHY*/ -#define SSB_SPROM1_ITSSI_A 0xFF00 /* A-PHY */ -#define SSB_SPROM1_ITSSI_A_SHIFT 8 -#define SSB_SPROM1_BFLLO 0x0072 /* Boardflags (low 16 bits) */ -#define SSB_SPROM1_AGAIN 0x0074 /* Antenna Gain (in dBm Q5.2) */ -#define SSB_SPROM1_AGAIN_BG 0x00FF /* B-PHY and G-PHY */ -#define SSB_SPROM1_AGAIN_BG_SHIFT 0 -#define SSB_SPROM1_AGAIN_A 0xFF00 /* A-PHY */ -#define SSB_SPROM1_AGAIN_A_SHIFT 8 - -/* SPROM Revision 2 (inherits from rev 1) */ -#define SSB_SPROM2_BFLHI 0x0038 /* Boardflags (high 16 bits) */ -#define SSB_SPROM2_MAXP_A 0x003A /* A-PHY Max Power */ -#define SSB_SPROM2_MAXP_A_HI 0x00FF /* Max Power High */ -#define SSB_SPROM2_MAXP_A_LO 0xFF00 /* Max Power Low */ -#define SSB_SPROM2_MAXP_A_LO_SHIFT 8 -#define SSB_SPROM2_PA1LOB0 0x003C /* A-PHY PowerAmplifier Low Settings */ -#define SSB_SPROM2_PA1LOB1 0x003E /* A-PHY PowerAmplifier Low Settings */ -#define SSB_SPROM2_PA1LOB2 0x0040 /* A-PHY PowerAmplifier Low Settings */ -#define SSB_SPROM2_PA1HIB0 0x0042 /* A-PHY PowerAmplifier High Settings */ -#define SSB_SPROM2_PA1HIB1 0x0044 /* A-PHY PowerAmplifier High Settings */ -#define SSB_SPROM2_PA1HIB2 0x0046 /* A-PHY PowerAmplifier High Settings */ -#define SSB_SPROM2_OPO 0x0078 /* OFDM Power Offset from CCK Level */ -#define SSB_SPROM2_OPO_VALUE 0x00FF -#define SSB_SPROM2_OPO_UNUSED 0xFF00 -#define SSB_SPROM2_CCODE 0x007C /* Two char Country Code */ - -/* SPROM Revision 3 (inherits most data from rev 2) */ -#define SSB_SPROM3_OFDMAPO 0x002C /* A-PHY OFDM Mid Power Offset (4 bytes, BigEndian) */ -#define SSB_SPROM3_OFDMALPO 0x0030 /* A-PHY OFDM Low Power Offset (4 bytes, BigEndian) */ -#define SSB_SPROM3_OFDMAHPO 0x0034 /* A-PHY OFDM High Power Offset (4 bytes, BigEndian) */ -#define SSB_SPROM3_GPIOLDC 0x0042 /* GPIO LED Powersave Duty Cycle (4 bytes, BigEndian) */ -#define SSB_SPROM3_GPIOLDC_OFF 0x0000FF00 /* Off Count */ -#define SSB_SPROM3_GPIOLDC_OFF_SHIFT 8 -#define SSB_SPROM3_GPIOLDC_ON 0x00FF0000 /* On Count */ -#define SSB_SPROM3_GPIOLDC_ON_SHIFT 16 -#define SSB_SPROM3_IL0MAC 0x004A /* 6 bytes MAC address for 802.11b/g */ -#define SSB_SPROM3_CCKPO 0x0078 /* CCK Power Offset */ -#define SSB_SPROM3_CCKPO_1M 0x000F /* 1M Rate PO */ -#define SSB_SPROM3_CCKPO_2M 0x00F0 /* 2M Rate PO */ -#define SSB_SPROM3_CCKPO_2M_SHIFT 4 -#define SSB_SPROM3_CCKPO_55M 0x0F00 /* 5.5M Rate PO */ -#define SSB_SPROM3_CCKPO_55M_SHIFT 8 -#define SSB_SPROM3_CCKPO_11M 0xF000 /* 11M Rate PO */ -#define SSB_SPROM3_CCKPO_11M_SHIFT 12 -#define SSB_SPROM3_OFDMGPO 0x107A /* G-PHY OFDM Power Offset (4 bytes, BigEndian) */ - -/* SPROM Revision 4 */ -#define SSB_SPROM4_BFLLO 0x0044 /* Boardflags (low 16 bits) */ -#define SSB_SPROM4_BFLHI 0x0046 /* Board Flags Hi */ -#define SSB_SPROM4_BFL2LO 0x0048 /* Board flags 2 (low 16 bits) */ -#define SSB_SPROM4_BFL2HI 0x004A /* Board flags 2 Hi */ -#define SSB_SPROM4_IL0MAC 0x004C /* 6 byte MAC address for a/b/g/n */ -#define SSB_SPROM4_CCODE 0x0052 /* Country Code (2 bytes) */ -#define SSB_SPROM4_GPIOA 0x0056 /* Gen. Purpose IO # 0 and 1 */ -#define SSB_SPROM4_GPIOA_P0 0x00FF /* Pin 0 */ -#define SSB_SPROM4_GPIOA_P1 0xFF00 /* Pin 1 */ -#define SSB_SPROM4_GPIOA_P1_SHIFT 8 -#define SSB_SPROM4_GPIOB 0x0058 /* Gen. Purpose IO # 2 and 3 */ -#define SSB_SPROM4_GPIOB_P2 0x00FF /* Pin 2 */ -#define SSB_SPROM4_GPIOB_P3 0xFF00 /* Pin 3 */ -#define SSB_SPROM4_GPIOB_P3_SHIFT 8 -#define SSB_SPROM4_ETHPHY 0x005A /* Ethernet PHY settings ?? */ -#define SSB_SPROM4_ETHPHY_ET0A 0x001F /* MII Address for enet0 */ -#define SSB_SPROM4_ETHPHY_ET1A 0x03E0 /* MII Address for enet1 */ -#define SSB_SPROM4_ETHPHY_ET1A_SHIFT 5 -#define SSB_SPROM4_ETHPHY_ET0M (1<<14) /* MDIO for enet0 */ -#define SSB_SPROM4_ETHPHY_ET1M (1<<15) /* MDIO for enet1 */ -#define SSB_SPROM4_ANTAVAIL 0x005D /* Antenna available bitfields */ -#define SSB_SPROM4_ANTAVAIL_A 0x00FF /* A-PHY bitfield */ -#define SSB_SPROM4_ANTAVAIL_A_SHIFT 0 -#define SSB_SPROM4_ANTAVAIL_BG 0xFF00 /* B-PHY and G-PHY bitfield */ -#define SSB_SPROM4_ANTAVAIL_BG_SHIFT 8 -#define SSB_SPROM4_AGAIN01 0x005E /* Antenna Gain (in dBm Q5.2) */ -#define SSB_SPROM4_AGAIN0 0x00FF /* Antenna 0 */ -#define SSB_SPROM4_AGAIN0_SHIFT 0 -#define SSB_SPROM4_AGAIN1 0xFF00 /* Antenna 1 */ -#define SSB_SPROM4_AGAIN1_SHIFT 8 -#define SSB_SPROM4_AGAIN23 0x0060 -#define SSB_SPROM4_AGAIN2 0x00FF /* Antenna 2 */ -#define SSB_SPROM4_AGAIN2_SHIFT 0 -#define SSB_SPROM4_AGAIN3 0xFF00 /* Antenna 3 */ -#define SSB_SPROM4_AGAIN3_SHIFT 8 -#define SSB_SPROM4_TXPID2G01 0x0062 /* TX Power Index 2GHz */ -#define SSB_SPROM4_TXPID2G0 0x00FF -#define SSB_SPROM4_TXPID2G0_SHIFT 0 -#define SSB_SPROM4_TXPID2G1 0xFF00 -#define SSB_SPROM4_TXPID2G1_SHIFT 8 -#define SSB_SPROM4_TXPID2G23 0x0064 /* TX Power Index 2GHz */ -#define SSB_SPROM4_TXPID2G2 0x00FF -#define SSB_SPROM4_TXPID2G2_SHIFT 0 -#define SSB_SPROM4_TXPID2G3 0xFF00 -#define SSB_SPROM4_TXPID2G3_SHIFT 8 -#define SSB_SPROM4_TXPID5G01 0x0066 /* TX Power Index 5GHz middle subband */ -#define SSB_SPROM4_TXPID5G0 0x00FF -#define SSB_SPROM4_TXPID5G0_SHIFT 0 -#define SSB_SPROM4_TXPID5G1 0xFF00 -#define SSB_SPROM4_TXPID5G1_SHIFT 8 -#define SSB_SPROM4_TXPID5G23 0x0068 /* TX Power Index 5GHz middle subband */ -#define SSB_SPROM4_TXPID5G2 0x00FF -#define SSB_SPROM4_TXPID5G2_SHIFT 0 -#define SSB_SPROM4_TXPID5G3 0xFF00 -#define SSB_SPROM4_TXPID5G3_SHIFT 8 -#define SSB_SPROM4_TXPID5GL01 0x006A /* TX Power Index 5GHz low subband */ -#define SSB_SPROM4_TXPID5GL0 0x00FF -#define SSB_SPROM4_TXPID5GL0_SHIFT 0 -#define SSB_SPROM4_TXPID5GL1 0xFF00 -#define SSB_SPROM4_TXPID5GL1_SHIFT 8 -#define SSB_SPROM4_TXPID5GL23 0x006C /* TX Power Index 5GHz low subband */ -#define SSB_SPROM4_TXPID5GL2 0x00FF -#define SSB_SPROM4_TXPID5GL2_SHIFT 0 -#define SSB_SPROM4_TXPID5GL3 0xFF00 -#define SSB_SPROM4_TXPID5GL3_SHIFT 8 -#define SSB_SPROM4_TXPID5GH01 0x006E /* TX Power Index 5GHz high subband */ -#define SSB_SPROM4_TXPID5GH0 0x00FF -#define SSB_SPROM4_TXPID5GH0_SHIFT 0 -#define SSB_SPROM4_TXPID5GH1 0xFF00 -#define SSB_SPROM4_TXPID5GH1_SHIFT 8 -#define SSB_SPROM4_TXPID5GH23 0x0070 /* TX Power Index 5GHz high subband */ -#define SSB_SPROM4_TXPID5GH2 0x00FF -#define SSB_SPROM4_TXPID5GH2_SHIFT 0 -#define SSB_SPROM4_TXPID5GH3 0xFF00 -#define SSB_SPROM4_TXPID5GH3_SHIFT 8 -#define SSB_SPROM4_MAXP_BG 0x0080 /* Max Power BG in path 1 */ -#define SSB_SPROM4_MAXP_BG_MASK 0x00FF /* Mask for Max Power BG */ -#define SSB_SPROM4_ITSSI_BG 0xFF00 /* Mask for path 1 itssi_bg */ -#define SSB_SPROM4_ITSSI_BG_SHIFT 8 -#define SSB_SPROM4_MAXP_A 0x008A /* Max Power A in path 1 */ -#define SSB_SPROM4_MAXP_A_MASK 0x00FF /* Mask for Max Power A */ -#define SSB_SPROM4_ITSSI_A 0xFF00 /* Mask for path 1 itssi_a */ -#define SSB_SPROM4_ITSSI_A_SHIFT 8 -#define SSB_SPROM4_PA0B0 0x0082 /* The paXbY locations are */ -#define SSB_SPROM4_PA0B1 0x0084 /* only guesses */ -#define SSB_SPROM4_PA0B2 0x0086 -#define SSB_SPROM4_PA1B0 0x008E -#define SSB_SPROM4_PA1B1 0x0090 -#define SSB_SPROM4_PA1B2 0x0092 - -/* SPROM Revision 5 (inherits most data from rev 4) */ -#define SSB_SPROM5_CCODE 0x0044 /* Country Code (2 bytes) */ -#define SSB_SPROM5_BFLLO 0x004A /* Boardflags (low 16 bits) */ -#define SSB_SPROM5_BFLHI 0x004C /* Board Flags Hi */ -#define SSB_SPROM5_BFL2LO 0x004E /* Board flags 2 (low 16 bits) */ -#define SSB_SPROM5_BFL2HI 0x0050 /* Board flags 2 Hi */ -#define SSB_SPROM5_IL0MAC 0x0052 /* 6 byte MAC address for a/b/g/n */ -#define SSB_SPROM5_GPIOA 0x0076 /* Gen. Purpose IO # 0 and 1 */ -#define SSB_SPROM5_GPIOA_P0 0x00FF /* Pin 0 */ -#define SSB_SPROM5_GPIOA_P1 0xFF00 /* Pin 1 */ -#define SSB_SPROM5_GPIOA_P1_SHIFT 8 -#define SSB_SPROM5_GPIOB 0x0078 /* Gen. Purpose IO # 2 and 3 */ -#define SSB_SPROM5_GPIOB_P2 0x00FF /* Pin 2 */ -#define SSB_SPROM5_GPIOB_P3 0xFF00 /* Pin 3 */ -#define SSB_SPROM5_GPIOB_P3_SHIFT 8 - -/* SPROM Revision 8 */ -#define SSB_SPROM8_BOARDREV 0x0082 /* Board revision */ -#define SSB_SPROM8_BFLLO 0x0084 /* Board flags (bits 0-15) */ -#define SSB_SPROM8_BFLHI 0x0086 /* Board flags (bits 16-31) */ -#define SSB_SPROM8_BFL2LO 0x0088 /* Board flags (bits 32-47) */ -#define SSB_SPROM8_BFL2HI 0x008A /* Board flags (bits 48-63) */ -#define SSB_SPROM8_IL0MAC 0x008C /* 6 byte MAC address */ -#define SSB_SPROM8_CCODE 0x0092 /* 2 byte country code */ -#define SSB_SPROM8_GPIOA 0x0096 /*Gen. Purpose IO # 0 and 1 */ -#define SSB_SPROM8_GPIOA_P0 0x00FF /* Pin 0 */ -#define SSB_SPROM8_GPIOA_P1 0xFF00 /* Pin 1 */ -#define SSB_SPROM8_GPIOA_P1_SHIFT 8 -#define SSB_SPROM8_GPIOB 0x0098 /* Gen. Purpose IO # 2 and 3 */ -#define SSB_SPROM8_GPIOB_P2 0x00FF /* Pin 2 */ -#define SSB_SPROM8_GPIOB_P3 0xFF00 /* Pin 3 */ -#define SSB_SPROM8_GPIOB_P3_SHIFT 8 -#define SSB_SPROM8_ANTAVAIL 0x009C /* Antenna available bitfields*/ -#define SSB_SPROM8_ANTAVAIL_A 0xFF00 /* A-PHY bitfield */ -#define SSB_SPROM8_ANTAVAIL_A_SHIFT 8 -#define SSB_SPROM8_ANTAVAIL_BG 0x00FF /* B-PHY and G-PHY bitfield */ -#define SSB_SPROM8_ANTAVAIL_BG_SHIFT 0 -#define SSB_SPROM8_AGAIN01 0x009E /* Antenna Gain (in dBm Q5.2) */ -#define SSB_SPROM8_AGAIN0 0x00FF /* Antenna 0 */ -#define SSB_SPROM8_AGAIN0_SHIFT 0 -#define SSB_SPROM8_AGAIN1 0xFF00 /* Antenna 1 */ -#define SSB_SPROM8_AGAIN1_SHIFT 8 -#define SSB_SPROM8_AGAIN23 0x00A0 -#define SSB_SPROM8_AGAIN2 0x00FF /* Antenna 2 */ -#define SSB_SPROM8_AGAIN2_SHIFT 0 -#define SSB_SPROM8_AGAIN3 0xFF00 /* Antenna 3 */ -#define SSB_SPROM8_AGAIN3_SHIFT 8 -#define SSB_SPROM8_RSSIPARM2G 0x00A4 /* RSSI params for 2GHz */ -#define SSB_SPROM8_RSSISMF2G 0x000F -#define SSB_SPROM8_RSSISMC2G 0x00F0 -#define SSB_SPROM8_RSSISMC2G_SHIFT 4 -#define SSB_SPROM8_RSSISAV2G 0x0700 -#define SSB_SPROM8_RSSISAV2G_SHIFT 8 -#define SSB_SPROM8_BXA2G 0x1800 -#define SSB_SPROM8_BXA2G_SHIFT 11 -#define SSB_SPROM8_RSSIPARM5G 0x00A6 /* RSSI params for 5GHz */ -#define SSB_SPROM8_RSSISMF5G 0x000F -#define SSB_SPROM8_RSSISMC5G 0x00F0 -#define SSB_SPROM8_RSSISMC5G_SHIFT 4 -#define SSB_SPROM8_RSSISAV5G 0x0700 -#define SSB_SPROM8_RSSISAV5G_SHIFT 8 -#define SSB_SPROM8_BXA5G 0x1800 -#define SSB_SPROM8_BXA5G_SHIFT 11 -#define SSB_SPROM8_TRI25G 0x00A8 /* TX isolation 2.4&5.3GHz */ -#define SSB_SPROM8_TRI2G 0x00FF /* TX isolation 2.4GHz */ -#define SSB_SPROM8_TRI5G 0xFF00 /* TX isolation 5.3GHz */ -#define SSB_SPROM8_TRI5G_SHIFT 8 -#define SSB_SPROM8_TRI5GHL 0x00AA /* TX isolation 5.2/5.8GHz */ -#define SSB_SPROM8_TRI5GL 0x00FF /* TX isolation 5.2GHz */ -#define SSB_SPROM8_TRI5GH 0xFF00 /* TX isolation 5.8GHz */ -#define SSB_SPROM8_TRI5GH_SHIFT 8 -#define SSB_SPROM8_RXPO 0x00AC /* RX power offsets */ -#define SSB_SPROM8_RXPO2G 0x00FF /* 2GHz RX power offset */ -#define SSB_SPROM8_RXPO5G 0xFF00 /* 5GHz RX power offset */ -#define SSB_SPROM8_RXPO5G_SHIFT 8 -#define SSB_SPROM8_FEM2G 0x00AE -#define SSB_SPROM8_FEM5G 0x00B0 -#define SSB_SROM8_FEM_TSSIPOS 0x0001 -#define SSB_SROM8_FEM_TSSIPOS_SHIFT 0 -#define SSB_SROM8_FEM_EXTPA_GAIN 0x0006 -#define SSB_SROM8_FEM_EXTPA_GAIN_SHIFT 1 -#define SSB_SROM8_FEM_PDET_RANGE 0x00F8 -#define SSB_SROM8_FEM_PDET_RANGE_SHIFT 3 -#define SSB_SROM8_FEM_TR_ISO 0x0700 -#define SSB_SROM8_FEM_TR_ISO_SHIFT 8 -#define SSB_SROM8_FEM_ANTSWLUT 0xF800 -#define SSB_SROM8_FEM_ANTSWLUT_SHIFT 11 -#define SSB_SPROM8_THERMAL 0x00B2 -#define SSB_SPROM8_MPWR_RAWTS 0x00B4 -#define SSB_SPROM8_TS_SLP_OPT_CORRX 0x00B6 -#define SSB_SPROM8_FOC_HWIQ_IQSWP 0x00B8 -#define SSB_SPROM8_PHYCAL_TEMPDELTA 0x00BA - -/* There are 4 blocks with power info sharing the same layout */ -#define SSB_SROM8_PWR_INFO_CORE0 0x00C0 -#define SSB_SROM8_PWR_INFO_CORE1 0x00E0 -#define SSB_SROM8_PWR_INFO_CORE2 0x0100 -#define SSB_SROM8_PWR_INFO_CORE3 0x0120 - -#define SSB_SROM8_2G_MAXP_ITSSI 0x00 -#define SSB_SPROM8_2G_MAXP 0x00FF -#define SSB_SPROM8_2G_ITSSI 0xFF00 -#define SSB_SPROM8_2G_ITSSI_SHIFT 8 -#define SSB_SROM8_2G_PA_0 0x02 /* 2GHz power amp settings */ -#define SSB_SROM8_2G_PA_1 0x04 -#define SSB_SROM8_2G_PA_2 0x06 -#define SSB_SROM8_5G_MAXP_ITSSI 0x08 /* 5GHz ITSSI and 5.3GHz Max Power */ -#define SSB_SPROM8_5G_MAXP 0x00FF -#define SSB_SPROM8_5G_ITSSI 0xFF00 -#define SSB_SPROM8_5G_ITSSI_SHIFT 8 -#define SSB_SPROM8_5GHL_MAXP 0x0A /* 5.2GHz and 5.8GHz Max Power */ -#define SSB_SPROM8_5GH_MAXP 0x00FF -#define SSB_SPROM8_5GL_MAXP 0xFF00 -#define SSB_SPROM8_5GL_MAXP_SHIFT 8 -#define SSB_SROM8_5G_PA_0 0x0C /* 5.3GHz power amp settings */ -#define SSB_SROM8_5G_PA_1 0x0E -#define SSB_SROM8_5G_PA_2 0x10 -#define SSB_SROM8_5GL_PA_0 0x12 /* 5.2GHz power amp settings */ -#define SSB_SROM8_5GL_PA_1 0x14 -#define SSB_SROM8_5GL_PA_2 0x16 -#define SSB_SROM8_5GH_PA_0 0x18 /* 5.8GHz power amp settings */ -#define SSB_SROM8_5GH_PA_1 0x1A -#define SSB_SROM8_5GH_PA_2 0x1C - -/* TODO: Make it deprecated */ -#define SSB_SPROM8_MAXP_BG 0x00C0 /* Max Power 2GHz in path 1 */ -#define SSB_SPROM8_MAXP_BG_MASK 0x00FF /* Mask for Max Power 2GHz */ -#define SSB_SPROM8_ITSSI_BG 0xFF00 /* Mask for path 1 itssi_bg */ -#define SSB_SPROM8_ITSSI_BG_SHIFT 8 -#define SSB_SPROM8_PA0B0 0x00C2 /* 2GHz power amp settings */ -#define SSB_SPROM8_PA0B1 0x00C4 -#define SSB_SPROM8_PA0B2 0x00C6 -#define SSB_SPROM8_MAXP_A 0x00C8 /* Max Power 5.3GHz */ -#define SSB_SPROM8_MAXP_A_MASK 0x00FF /* Mask for Max Power 5.3GHz */ -#define SSB_SPROM8_ITSSI_A 0xFF00 /* Mask for path 1 itssi_a */ -#define SSB_SPROM8_ITSSI_A_SHIFT 8 -#define SSB_SPROM8_MAXP_AHL 0x00CA /* Max Power 5.2/5.8GHz */ -#define SSB_SPROM8_MAXP_AH_MASK 0x00FF /* Mask for Max Power 5.8GHz */ -#define SSB_SPROM8_MAXP_AL_MASK 0xFF00 /* Mask for Max Power 5.2GHz */ -#define SSB_SPROM8_MAXP_AL_SHIFT 8 -#define SSB_SPROM8_PA1B0 0x00CC /* 5.3GHz power amp settings */ -#define SSB_SPROM8_PA1B1 0x00CE -#define SSB_SPROM8_PA1B2 0x00D0 -#define SSB_SPROM8_PA1LOB0 0x00D2 /* 5.2GHz power amp settings */ -#define SSB_SPROM8_PA1LOB1 0x00D4 -#define SSB_SPROM8_PA1LOB2 0x00D6 -#define SSB_SPROM8_PA1HIB0 0x00D8 /* 5.8GHz power amp settings */ -#define SSB_SPROM8_PA1HIB1 0x00DA -#define SSB_SPROM8_PA1HIB2 0x00DC - -#define SSB_SPROM8_CCK2GPO 0x0140 /* CCK power offset */ -#define SSB_SPROM8_OFDM2GPO 0x0142 /* 2.4GHz OFDM power offset */ -#define SSB_SPROM8_OFDM5GPO 0x0146 /* 5.3GHz OFDM power offset */ -#define SSB_SPROM8_OFDM5GLPO 0x014A /* 5.2GHz OFDM power offset */ -#define SSB_SPROM8_OFDM5GHPO 0x014E /* 5.8GHz OFDM power offset */ - -/* Values for boardflags_lo read from SPROM */ -#define SSB_BFL_BTCOEXIST 0x0001 /* implements Bluetooth coexistance */ -#define SSB_BFL_PACTRL 0x0002 /* GPIO 9 controlling the PA */ -#define SSB_BFL_AIRLINEMODE 0x0004 /* implements GPIO 13 radio disable indication */ -#define SSB_BFL_RSSI 0x0008 /* software calculates nrssi slope. */ -#define SSB_BFL_ENETSPI 0x0010 /* has ephy roboswitch spi */ -#define SSB_BFL_XTAL_NOSLOW 0x0020 /* no slow clock available */ -#define SSB_BFL_CCKHIPWR 0x0040 /* can do high power CCK transmission */ -#define SSB_BFL_ENETADM 0x0080 /* has ADMtek switch */ -#define SSB_BFL_ENETVLAN 0x0100 /* can do vlan */ -#define SSB_BFL_AFTERBURNER 0x0200 /* supports Afterburner mode */ -#define SSB_BFL_NOPCI 0x0400 /* board leaves PCI floating */ -#define SSB_BFL_FEM 0x0800 /* supports the Front End Module */ -#define SSB_BFL_EXTLNA 0x1000 /* has an external LNA */ -#define SSB_BFL_HGPA 0x2000 /* had high gain PA */ -#define SSB_BFL_BTCMOD 0x4000 /* BFL_BTCOEXIST is given in alternate GPIOs */ -#define SSB_BFL_ALTIQ 0x8000 /* alternate I/Q settings */ - -/* Values for boardflags_hi read from SPROM */ -#define SSB_BFH_NOPA 0x0001 /* has no PA */ -#define SSB_BFH_RSSIINV 0x0002 /* RSSI uses positive slope (not TSSI) */ -#define SSB_BFH_PAREF 0x0004 /* uses the PARef LDO */ -#define SSB_BFH_3TSWITCH 0x0008 /* uses a triple throw switch shared with bluetooth */ -#define SSB_BFH_PHASESHIFT 0x0010 /* can support phase shifter */ -#define SSB_BFH_BUCKBOOST 0x0020 /* has buck/booster */ -#define SSB_BFH_FEM_BT 0x0040 /* has FEM and switch to share antenna with bluetooth */ - -/* Values for boardflags2_lo read from SPROM */ -#define SSB_BFL2_RXBB_INT_REG_DIS 0x0001 /* external RX BB regulator present */ -#define SSB_BFL2_APLL_WAR 0x0002 /* alternative A-band PLL settings implemented */ -#define SSB_BFL2_TXPWRCTRL_EN 0x0004 /* permits enabling TX Power Control */ -#define SSB_BFL2_2X4_DIV 0x0008 /* 2x4 diversity switch */ -#define SSB_BFL2_5G_PWRGAIN 0x0010 /* supports 5G band power gain */ -#define SSB_BFL2_PCIEWAR_OVR 0x0020 /* overrides ASPM and Clkreq settings */ -#define SSB_BFL2_CAESERS_BRD 0x0040 /* is Caesers board (unused) */ -#define SSB_BFL2_BTC3WIRE 0x0080 /* used 3-wire bluetooth coexist */ -#define SSB_BFL2_SKWRKFEM_BRD 0x0100 /* 4321mcm93 uses Skyworks FEM */ -#define SSB_BFL2_SPUR_WAR 0x0200 /* has a workaround for clock-harmonic spurs */ -#define SSB_BFL2_GPLL_WAR 0x0400 /* altenative G-band PLL settings implemented */ - -/* Values for SSB_SPROM1_BINF_CCODE */ -enum { - SSB_SPROM1CCODE_WORLD = 0, - SSB_SPROM1CCODE_THAILAND, - SSB_SPROM1CCODE_ISRAEL, - SSB_SPROM1CCODE_JORDAN, - SSB_SPROM1CCODE_CHINA, - SSB_SPROM1CCODE_JAPAN, - SSB_SPROM1CCODE_USA_CANADA_ANZ, - SSB_SPROM1CCODE_EUROPE, - SSB_SPROM1CCODE_USA_LOW, - SSB_SPROM1CCODE_JAPAN_HIGH, - SSB_SPROM1CCODE_ALL, - SSB_SPROM1CCODE_NONE, -}; - -/* Address-Match values and masks (SSB_ADMATCHxxx) */ -#define SSB_ADM_TYPE 0x00000003 /* Address type */ -#define SSB_ADM_TYPE0 0 -#define SSB_ADM_TYPE1 1 -#define SSB_ADM_TYPE2 2 -#define SSB_ADM_AD64 0x00000004 -#define SSB_ADM_SZ0 0x000000F8 /* Type0 size */ -#define SSB_ADM_SZ0_SHIFT 3 -#define SSB_ADM_SZ1 0x000001F8 /* Type1 size */ -#define SSB_ADM_SZ1_SHIFT 3 -#define SSB_ADM_SZ2 0x000001F8 /* Type2 size */ -#define SSB_ADM_SZ2_SHIFT 3 -#define SSB_ADM_EN 0x00000400 /* Enable */ -#define SSB_ADM_NEG 0x00000800 /* Negative decode */ -#define SSB_ADM_BASE0 0xFFFFFF00 /* Type0 base address */ -#define SSB_ADM_BASE0_SHIFT 8 -#define SSB_ADM_BASE1 0xFFFFF000 /* Type1 base address for the core */ -#define SSB_ADM_BASE1_SHIFT 12 -#define SSB_ADM_BASE2 0xFFFF0000 /* Type2 base address for the core */ -#define SSB_ADM_BASE2_SHIFT 16 - - -#endif /* LINUX_SSB_REGS_H_ */ diff --git a/openairITS/mac/DOT11/include/linux/tracepoint.h b/openairITS/mac/DOT11/include/linux/tracepoint.h deleted file mode 100644 index fc44692a1d..0000000000 --- a/openairITS/mac/DOT11/include/linux/tracepoint.h +++ /dev/null @@ -1,41 +0,0 @@ -#ifndef _COMPAT_LINUX_TRACEPOINT_H -#define _COMPAT_LINUX_TRACEPOINT_H 1 - -#include - -#if (LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,32)) -/* - * Disable all tracing for older kernels - * < 2.6.27 had no tracing - * 2.6.27 had broken tracing - * 2.6.28-2.6.32 didn't have anything like DECLARE_EVENT_CLASS - * and faking it would be extremely difficult - */ -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,28)) -/* - * For 2.6.28+ include the original tracepoint.h but override - * the defines new code uses to disable tracing completely. - */ -#include_next -#endif - -#undef TRACE_EVENT -#define TRACE_EVENT(name, proto, ...) \ -static inline void trace_ ## name(proto) {} -#undef DECLARE_EVENT_CLASS -#define DECLARE_EVENT_CLASS(...) -#undef DEFINE_EVENT -#define DEFINE_EVENT(evt_class, name, proto, ...) \ -static inline void trace_ ## name(proto) {} - -#define TP_PROTO(args...) args -#define TP_ARGS(args...) args -#define TP_CONDITION(args...) args - -#else -/* since 2.6.33, tracing hasn't changed, so just include the kernel's file */ -#include_next - -#endif /* (LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,32)) */ - -#endif /* _COMPAT_LINUX_TRACEPOINT_H */ diff --git a/openairITS/mac/DOT11/include/linux/unaligned/access_ok.h b/openairITS/mac/DOT11/include/linux/unaligned/access_ok.h deleted file mode 100644 index 99c1b4d20b..0000000000 --- a/openairITS/mac/DOT11/include/linux/unaligned/access_ok.h +++ /dev/null @@ -1,67 +0,0 @@ -#ifndef _LINUX_UNALIGNED_ACCESS_OK_H -#define _LINUX_UNALIGNED_ACCESS_OK_H - -#include -#include - -static inline u16 get_unaligned_le16(const void *p) -{ - return le16_to_cpup((__le16 *)p); -} - -static inline u32 get_unaligned_le32(const void *p) -{ - return le32_to_cpup((__le32 *)p); -} - -static inline u64 get_unaligned_le64(const void *p) -{ - return le64_to_cpup((__le64 *)p); -} - -static inline u16 get_unaligned_be16(const void *p) -{ - return be16_to_cpup((__be16 *)p); -} - -static inline u32 get_unaligned_be32(const void *p) -{ - return be32_to_cpup((__be32 *)p); -} - -static inline u64 get_unaligned_be64(const void *p) -{ - return be64_to_cpup((__be64 *)p); -} - -static inline void put_unaligned_le16(u16 val, void *p) -{ - *((__le16 *)p) = cpu_to_le16(val); -} - -static inline void put_unaligned_le32(u32 val, void *p) -{ - *((__le32 *)p) = cpu_to_le32(val); -} - -static inline void put_unaligned_le64(u64 val, void *p) -{ - *((__le64 *)p) = cpu_to_le64(val); -} - -static inline void put_unaligned_be16(u16 val, void *p) -{ - *((__be16 *)p) = cpu_to_be16(val); -} - -static inline void put_unaligned_be32(u32 val, void *p) -{ - *((__be32 *)p) = cpu_to_be32(val); -} - -static inline void put_unaligned_be64(u64 val, void *p) -{ - *((__be64 *)p) = cpu_to_be64(val); -} - -#endif /* _LINUX_UNALIGNED_ACCESS_OK_H */ diff --git a/openairITS/mac/DOT11/include/linux/unaligned/be_byteshift.h b/openairITS/mac/DOT11/include/linux/unaligned/be_byteshift.h deleted file mode 100644 index 9356b24223..0000000000 --- a/openairITS/mac/DOT11/include/linux/unaligned/be_byteshift.h +++ /dev/null @@ -1,70 +0,0 @@ -#ifndef _LINUX_UNALIGNED_BE_BYTESHIFT_H -#define _LINUX_UNALIGNED_BE_BYTESHIFT_H - -#include - -static inline u16 __get_unaligned_be16(const u8 *p) -{ - return p[0] << 8 | p[1]; -} - -static inline u32 __get_unaligned_be32(const u8 *p) -{ - return p[0] << 24 | p[1] << 16 | p[2] << 8 | p[3]; -} - -static inline u64 __get_unaligned_be64(const u8 *p) -{ - return (u64)__get_unaligned_be32(p) << 32 | - __get_unaligned_be32(p + 4); -} - -static inline void __put_unaligned_be16(u16 val, u8 *p) -{ - *p++ = val >> 8; - *p++ = val; -} - -static inline void __put_unaligned_be32(u32 val, u8 *p) -{ - __put_unaligned_be16(val >> 16, p); - __put_unaligned_be16(val, p + 2); -} - -static inline void __put_unaligned_be64(u64 val, u8 *p) -{ - __put_unaligned_be32(val >> 32, p); - __put_unaligned_be32(val, p + 4); -} - -static inline u16 get_unaligned_be16(const void *p) -{ - return __get_unaligned_be16((const u8 *)p); -} - -static inline u32 get_unaligned_be32(const void *p) -{ - return __get_unaligned_be32((const u8 *)p); -} - -static inline u64 get_unaligned_be64(const void *p) -{ - return __get_unaligned_be64((const u8 *)p); -} - -static inline void put_unaligned_be16(u16 val, void *p) -{ - __put_unaligned_be16(val, p); -} - -static inline void put_unaligned_be32(u32 val, void *p) -{ - __put_unaligned_be32(val, p); -} - -static inline void put_unaligned_be64(u64 val, void *p) -{ - __put_unaligned_be64(val, p); -} - -#endif /* _LINUX_UNALIGNED_BE_BYTESHIFT_H */ diff --git a/openairITS/mac/DOT11/include/linux/unaligned/be_memmove.h b/openairITS/mac/DOT11/include/linux/unaligned/be_memmove.h deleted file mode 100644 index c2a76c5c9e..0000000000 --- a/openairITS/mac/DOT11/include/linux/unaligned/be_memmove.h +++ /dev/null @@ -1,36 +0,0 @@ -#ifndef _LINUX_UNALIGNED_BE_MEMMOVE_H -#define _LINUX_UNALIGNED_BE_MEMMOVE_H - -#include - -static inline u16 get_unaligned_be16(const void *p) -{ - return __get_unaligned_memmove16((const u8 *)p); -} - -static inline u32 get_unaligned_be32(const void *p) -{ - return __get_unaligned_memmove32((const u8 *)p); -} - -static inline u64 get_unaligned_be64(const void *p) -{ - return __get_unaligned_memmove64((const u8 *)p); -} - -static inline void put_unaligned_be16(u16 val, void *p) -{ - __put_unaligned_memmove16(val, p); -} - -static inline void put_unaligned_be32(u32 val, void *p) -{ - __put_unaligned_memmove32(val, p); -} - -static inline void put_unaligned_be64(u64 val, void *p) -{ - __put_unaligned_memmove64(val, p); -} - -#endif /* _LINUX_UNALIGNED_LE_MEMMOVE_H */ diff --git a/openairITS/mac/DOT11/include/linux/unaligned/be_struct.h b/openairITS/mac/DOT11/include/linux/unaligned/be_struct.h deleted file mode 100644 index 132415836c..0000000000 --- a/openairITS/mac/DOT11/include/linux/unaligned/be_struct.h +++ /dev/null @@ -1,36 +0,0 @@ -#ifndef _LINUX_UNALIGNED_BE_STRUCT_H -#define _LINUX_UNALIGNED_BE_STRUCT_H - -#include - -static inline u16 get_unaligned_be16(const void *p) -{ - return __get_unaligned_cpu16((const u8 *)p); -} - -static inline u32 get_unaligned_be32(const void *p) -{ - return __get_unaligned_cpu32((const u8 *)p); -} - -static inline u64 get_unaligned_be64(const void *p) -{ - return __get_unaligned_cpu64((const u8 *)p); -} - -static inline void put_unaligned_be16(u16 val, void *p) -{ - __put_unaligned_cpu16(val, p); -} - -static inline void put_unaligned_be32(u32 val, void *p) -{ - __put_unaligned_cpu32(val, p); -} - -static inline void put_unaligned_be64(u64 val, void *p) -{ - __put_unaligned_cpu64(val, p); -} - -#endif /* _LINUX_UNALIGNED_BE_STRUCT_H */ diff --git a/openairITS/mac/DOT11/include/linux/unaligned/generic.h b/openairITS/mac/DOT11/include/linux/unaligned/generic.h deleted file mode 100644 index 02d97ff3df..0000000000 --- a/openairITS/mac/DOT11/include/linux/unaligned/generic.h +++ /dev/null @@ -1,68 +0,0 @@ -#ifndef _LINUX_UNALIGNED_GENERIC_H -#define _LINUX_UNALIGNED_GENERIC_H - -/* - * Cause a link-time error if we try an unaligned access other than - * 1,2,4 or 8 bytes long - */ -extern void __bad_unaligned_access_size(void); - -#define __get_unaligned_le(ptr) ((__force typeof(*(ptr)))({ \ - __builtin_choose_expr(sizeof(*(ptr)) == 1, *(ptr), \ - __builtin_choose_expr(sizeof(*(ptr)) == 2, get_unaligned_le16((ptr)), \ - __builtin_choose_expr(sizeof(*(ptr)) == 4, get_unaligned_le32((ptr)), \ - __builtin_choose_expr(sizeof(*(ptr)) == 8, get_unaligned_le64((ptr)), \ - __bad_unaligned_access_size())))); \ - })) - -#define __get_unaligned_be(ptr) ((__force typeof(*(ptr)))({ \ - __builtin_choose_expr(sizeof(*(ptr)) == 1, *(ptr), \ - __builtin_choose_expr(sizeof(*(ptr)) == 2, get_unaligned_be16((ptr)), \ - __builtin_choose_expr(sizeof(*(ptr)) == 4, get_unaligned_be32((ptr)), \ - __builtin_choose_expr(sizeof(*(ptr)) == 8, get_unaligned_be64((ptr)), \ - __bad_unaligned_access_size())))); \ - })) - -#define __put_unaligned_le(val, ptr) ({ \ - void *__gu_p = (ptr); \ - switch (sizeof(*(ptr))) { \ - case 1: \ - *(u8 *)__gu_p = (__force u8)(val); \ - break; \ - case 2: \ - put_unaligned_le16((__force u16)(val), __gu_p); \ - break; \ - case 4: \ - put_unaligned_le32((__force u32)(val), __gu_p); \ - break; \ - case 8: \ - put_unaligned_le64((__force u64)(val), __gu_p); \ - break; \ - default: \ - __bad_unaligned_access_size(); \ - break; \ - } \ - (void)0; }) - -#define __put_unaligned_be(val, ptr) ({ \ - void *__gu_p = (ptr); \ - switch (sizeof(*(ptr))) { \ - case 1: \ - *(u8 *)__gu_p = (__force u8)(val); \ - break; \ - case 2: \ - put_unaligned_be16((__force u16)(val), __gu_p); \ - break; \ - case 4: \ - put_unaligned_be32((__force u32)(val), __gu_p); \ - break; \ - case 8: \ - put_unaligned_be64((__force u64)(val), __gu_p); \ - break; \ - default: \ - __bad_unaligned_access_size(); \ - break; \ - } \ - (void)0; }) - -#endif /* _LINUX_UNALIGNED_GENERIC_H */ diff --git a/openairITS/mac/DOT11/include/linux/unaligned/le_byteshift.h b/openairITS/mac/DOT11/include/linux/unaligned/le_byteshift.h deleted file mode 100644 index be376fb79b..0000000000 --- a/openairITS/mac/DOT11/include/linux/unaligned/le_byteshift.h +++ /dev/null @@ -1,70 +0,0 @@ -#ifndef _LINUX_UNALIGNED_LE_BYTESHIFT_H -#define _LINUX_UNALIGNED_LE_BYTESHIFT_H - -#include - -static inline u16 __get_unaligned_le16(const u8 *p) -{ - return p[0] | p[1] << 8; -} - -static inline u32 __get_unaligned_le32(const u8 *p) -{ - return p[0] | p[1] << 8 | p[2] << 16 | p[3] << 24; -} - -static inline u64 __get_unaligned_le64(const u8 *p) -{ - return (u64)__get_unaligned_le32(p + 4) << 32 | - __get_unaligned_le32(p); -} - -static inline void __put_unaligned_le16(u16 val, u8 *p) -{ - *p++ = val; - *p++ = val >> 8; -} - -static inline void __put_unaligned_le32(u32 val, u8 *p) -{ - __put_unaligned_le16(val >> 16, p + 2); - __put_unaligned_le16(val, p); -} - -static inline void __put_unaligned_le64(u64 val, u8 *p) -{ - __put_unaligned_le32(val >> 32, p + 4); - __put_unaligned_le32(val, p); -} - -static inline u16 get_unaligned_le16(const void *p) -{ - return __get_unaligned_le16((const u8 *)p); -} - -static inline u32 get_unaligned_le32(const void *p) -{ - return __get_unaligned_le32((const u8 *)p); -} - -static inline u64 get_unaligned_le64(const void *p) -{ - return __get_unaligned_le64((const u8 *)p); -} - -static inline void put_unaligned_le16(u16 val, void *p) -{ - __put_unaligned_le16(val, p); -} - -static inline void put_unaligned_le32(u32 val, void *p) -{ - __put_unaligned_le32(val, p); -} - -static inline void put_unaligned_le64(u64 val, void *p) -{ - __put_unaligned_le64(val, p); -} - -#endif /* _LINUX_UNALIGNED_LE_BYTESHIFT_H */ diff --git a/openairITS/mac/DOT11/include/linux/unaligned/le_memmove.h b/openairITS/mac/DOT11/include/linux/unaligned/le_memmove.h deleted file mode 100644 index 269849bee4..0000000000 --- a/openairITS/mac/DOT11/include/linux/unaligned/le_memmove.h +++ /dev/null @@ -1,36 +0,0 @@ -#ifndef _LINUX_UNALIGNED_LE_MEMMOVE_H -#define _LINUX_UNALIGNED_LE_MEMMOVE_H - -#include - -static inline u16 get_unaligned_le16(const void *p) -{ - return __get_unaligned_memmove16((const u8 *)p); -} - -static inline u32 get_unaligned_le32(const void *p) -{ - return __get_unaligned_memmove32((const u8 *)p); -} - -static inline u64 get_unaligned_le64(const void *p) -{ - return __get_unaligned_memmove64((const u8 *)p); -} - -static inline void put_unaligned_le16(u16 val, void *p) -{ - __put_unaligned_memmove16(val, p); -} - -static inline void put_unaligned_le32(u32 val, void *p) -{ - __put_unaligned_memmove32(val, p); -} - -static inline void put_unaligned_le64(u64 val, void *p) -{ - __put_unaligned_memmove64(val, p); -} - -#endif /* _LINUX_UNALIGNED_LE_MEMMOVE_H */ diff --git a/openairITS/mac/DOT11/include/linux/unaligned/le_struct.h b/openairITS/mac/DOT11/include/linux/unaligned/le_struct.h deleted file mode 100644 index 088c4572fa..0000000000 --- a/openairITS/mac/DOT11/include/linux/unaligned/le_struct.h +++ /dev/null @@ -1,36 +0,0 @@ -#ifndef _LINUX_UNALIGNED_LE_STRUCT_H -#define _LINUX_UNALIGNED_LE_STRUCT_H - -#include - -static inline u16 get_unaligned_le16(const void *p) -{ - return __get_unaligned_cpu16((const u8 *)p); -} - -static inline u32 get_unaligned_le32(const void *p) -{ - return __get_unaligned_cpu32((const u8 *)p); -} - -static inline u64 get_unaligned_le64(const void *p) -{ - return __get_unaligned_cpu64((const u8 *)p); -} - -static inline void put_unaligned_le16(u16 val, void *p) -{ - __put_unaligned_cpu16(val, p); -} - -static inline void put_unaligned_le32(u32 val, void *p) -{ - __put_unaligned_cpu32(val, p); -} - -static inline void put_unaligned_le64(u64 val, void *p) -{ - __put_unaligned_cpu64(val, p); -} - -#endif /* _LINUX_UNALIGNED_LE_STRUCT_H */ diff --git a/openairITS/mac/DOT11/include/linux/unaligned/memmove.h b/openairITS/mac/DOT11/include/linux/unaligned/memmove.h deleted file mode 100644 index eeb5a779a4..0000000000 --- a/openairITS/mac/DOT11/include/linux/unaligned/memmove.h +++ /dev/null @@ -1,45 +0,0 @@ -#ifndef _LINUX_UNALIGNED_MEMMOVE_H -#define _LINUX_UNALIGNED_MEMMOVE_H - -#include -#include - -/* Use memmove here, so gcc does not insert a __builtin_memcpy. */ - -static inline u16 __get_unaligned_memmove16(const void *p) -{ - u16 tmp; - memmove(&tmp, p, 2); - return tmp; -} - -static inline u32 __get_unaligned_memmove32(const void *p) -{ - u32 tmp; - memmove(&tmp, p, 4); - return tmp; -} - -static inline u64 __get_unaligned_memmove64(const void *p) -{ - u64 tmp; - memmove(&tmp, p, 8); - return tmp; -} - -static inline void __put_unaligned_memmove16(u16 val, void *p) -{ - memmove(p, &val, 2); -} - -static inline void __put_unaligned_memmove32(u32 val, void *p) -{ - memmove(p, &val, 4); -} - -static inline void __put_unaligned_memmove64(u64 val, void *p) -{ - memmove(p, &val, 8); -} - -#endif /* _LINUX_UNALIGNED_MEMMOVE_H */ diff --git a/openairITS/mac/DOT11/include/linux/unaligned/packed_struct.h b/openairITS/mac/DOT11/include/linux/unaligned/packed_struct.h deleted file mode 100644 index 2498bb9fe0..0000000000 --- a/openairITS/mac/DOT11/include/linux/unaligned/packed_struct.h +++ /dev/null @@ -1,46 +0,0 @@ -#ifndef _LINUX_UNALIGNED_PACKED_STRUCT_H -#define _LINUX_UNALIGNED_PACKED_STRUCT_H - -#include - -struct __una_u16 { u16 x __attribute__((packed)); }; -struct __una_u32 { u32 x __attribute__((packed)); }; -struct __una_u64 { u64 x __attribute__((packed)); }; - -static inline u16 __get_unaligned_cpu16(const void *p) -{ - const struct __una_u16 *ptr = (const struct __una_u16 *)p; - return ptr->x; -} - -static inline u32 __get_unaligned_cpu32(const void *p) -{ - const struct __una_u32 *ptr = (const struct __una_u32 *)p; - return ptr->x; -} - -static inline u64 __get_unaligned_cpu64(const void *p) -{ - const struct __una_u64 *ptr = (const struct __una_u64 *)p; - return ptr->x; -} - -static inline void __put_unaligned_cpu16(u16 val, void *p) -{ - struct __una_u16 *ptr = (struct __una_u16 *)p; - ptr->x = val; -} - -static inline void __put_unaligned_cpu32(u32 val, void *p) -{ - struct __una_u32 *ptr = (struct __una_u32 *)p; - ptr->x = val; -} - -static inline void __put_unaligned_cpu64(u64 val, void *p) -{ - struct __una_u64 *ptr = (struct __una_u64 *)p; - ptr->x = val; -} - -#endif /* _LINUX_UNALIGNED_PACKED_STRUCT_H */ diff --git a/openairITS/mac/DOT11/include/linux/usb/rndis_host.h b/openairITS/mac/DOT11/include/linux/usb/rndis_host.h deleted file mode 100644 index 88fceb718c..0000000000 --- a/openairITS/mac/DOT11/include/linux/usb/rndis_host.h +++ /dev/null @@ -1,272 +0,0 @@ -/* - * Host Side support for RNDIS Networking Links - * Copyright (C) 2005 by David Brownell - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#ifndef __LINUX_USB_RNDIS_HOST_H -#define __LINUX_USB_RNDIS_HOST_H - -/* - * CONTROL uses CDC "encapsulated commands" with funky notifications. - * - control-out: SEND_ENCAPSULATED - * - interrupt-in: RESPONSE_AVAILABLE - * - control-in: GET_ENCAPSULATED - * - * We'll try to ignore the RESPONSE_AVAILABLE notifications. - * - * REVISIT some RNDIS implementations seem to have curious issues still - * to be resolved. - */ -struct rndis_msg_hdr { - __le32 msg_type; /* RNDIS_MSG_* */ - __le32 msg_len; - /* followed by data that varies between messages */ - __le32 request_id; - __le32 status; - /* ... and more */ -} __attribute__ ((packed)); - -/* MS-Windows uses this strange size, but RNDIS spec says 1024 minimum */ -#define CONTROL_BUFFER_SIZE 1025 - -/* RNDIS defines an (absurdly huge) 10 second control timeout, - * but ActiveSync seems to use a more usual 5 second timeout - * (which matches the USB 2.0 spec). - */ -#define RNDIS_CONTROL_TIMEOUT_MS (5 * 1000) - -#define RNDIS_MSG_COMPLETION cpu_to_le32(0x80000000) - -/* codes for "msg_type" field of rndis messages; - * only the data channel uses packet messages (maybe batched); - * everything else goes on the control channel. - */ -#define RNDIS_MSG_PACKET cpu_to_le32(0x00000001) /* 1-N packets */ -#define RNDIS_MSG_INIT cpu_to_le32(0x00000002) -#define RNDIS_MSG_INIT_C (RNDIS_MSG_INIT|RNDIS_MSG_COMPLETION) -#define RNDIS_MSG_HALT cpu_to_le32(0x00000003) -#define RNDIS_MSG_QUERY cpu_to_le32(0x00000004) -#define RNDIS_MSG_QUERY_C (RNDIS_MSG_QUERY|RNDIS_MSG_COMPLETION) -#define RNDIS_MSG_SET cpu_to_le32(0x00000005) -#define RNDIS_MSG_SET_C (RNDIS_MSG_SET|RNDIS_MSG_COMPLETION) -#define RNDIS_MSG_RESET cpu_to_le32(0x00000006) -#define RNDIS_MSG_RESET_C (RNDIS_MSG_RESET|RNDIS_MSG_COMPLETION) -#define RNDIS_MSG_INDICATE cpu_to_le32(0x00000007) -#define RNDIS_MSG_KEEPALIVE cpu_to_le32(0x00000008) -#define RNDIS_MSG_KEEPALIVE_C (RNDIS_MSG_KEEPALIVE|RNDIS_MSG_COMPLETION) - -/* codes for "status" field of completion messages */ -#define RNDIS_STATUS_SUCCESS cpu_to_le32(0x00000000) -#define RNDIS_STATUS_FAILURE cpu_to_le32(0xc0000001) -#define RNDIS_STATUS_INVALID_DATA cpu_to_le32(0xc0010015) -#define RNDIS_STATUS_NOT_SUPPORTED cpu_to_le32(0xc00000bb) -#define RNDIS_STATUS_MEDIA_CONNECT cpu_to_le32(0x4001000b) -#define RNDIS_STATUS_MEDIA_DISCONNECT cpu_to_le32(0x4001000c) -#define RNDIS_STATUS_MEDIA_SPECIFIC_INDICATION cpu_to_le32(0x40010012) - -/* codes for OID_GEN_PHYSICAL_MEDIUM */ -#define RNDIS_PHYSICAL_MEDIUM_UNSPECIFIED cpu_to_le32(0x00000000) -#define RNDIS_PHYSICAL_MEDIUM_WIRELESS_LAN cpu_to_le32(0x00000001) -#define RNDIS_PHYSICAL_MEDIUM_CABLE_MODEM cpu_to_le32(0x00000002) -#define RNDIS_PHYSICAL_MEDIUM_PHONE_LINE cpu_to_le32(0x00000003) -#define RNDIS_PHYSICAL_MEDIUM_POWER_LINE cpu_to_le32(0x00000004) -#define RNDIS_PHYSICAL_MEDIUM_DSL cpu_to_le32(0x00000005) -#define RNDIS_PHYSICAL_MEDIUM_FIBRE_CHANNEL cpu_to_le32(0x00000006) -#define RNDIS_PHYSICAL_MEDIUM_1394 cpu_to_le32(0x00000007) -#define RNDIS_PHYSICAL_MEDIUM_WIRELESS_WAN cpu_to_le32(0x00000008) -#define RNDIS_PHYSICAL_MEDIUM_MAX cpu_to_le32(0x00000009) - -struct rndis_data_hdr { - __le32 msg_type; /* RNDIS_MSG_PACKET */ - __le32 msg_len; /* rndis_data_hdr + data_len + pad */ - __le32 data_offset; /* 36 -- right after header */ - __le32 data_len; /* ... real packet size */ - - __le32 oob_data_offset; /* zero */ - __le32 oob_data_len; /* zero */ - __le32 num_oob; /* zero */ - __le32 packet_data_offset; /* zero */ - - __le32 packet_data_len; /* zero */ - __le32 vc_handle; /* zero */ - __le32 reserved; /* zero */ -} __attribute__ ((packed)); - -struct rndis_init { /* OUT */ - /* header and: */ - __le32 msg_type; /* RNDIS_MSG_INIT */ - __le32 msg_len; /* 24 */ - __le32 request_id; - __le32 major_version; /* of rndis (1.0) */ - __le32 minor_version; - __le32 max_transfer_size; -} __attribute__ ((packed)); - -struct rndis_init_c { /* IN */ - /* header and: */ - __le32 msg_type; /* RNDIS_MSG_INIT_C */ - __le32 msg_len; - __le32 request_id; - __le32 status; - __le32 major_version; /* of rndis (1.0) */ - __le32 minor_version; - __le32 device_flags; - __le32 medium; /* zero == 802.3 */ - __le32 max_packets_per_message; - __le32 max_transfer_size; - __le32 packet_alignment; /* max 7; (1< - * Copyright (C) 2003-2005 David Hollis - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#ifndef __LINUX_USB_USBNET_H -#define __LINUX_USB_USBNET_H - -/* interface from usbnet core to each USB networking link we handle */ -struct usbnet { - /* housekeeping */ - struct usb_device *udev; - struct usb_interface *intf; - struct driver_info *driver_info; - const char *driver_name; - void *driver_priv; - wait_queue_head_t *wait; - struct mutex phy_mutex; - unsigned char suspend_count; - - /* i/o info: pipes etc */ - unsigned in, out; - struct usb_host_endpoint *status; - unsigned maxpacket; - struct timer_list delay; - - /* protocol/interface state */ - struct net_device *net; - int msg_enable; - unsigned long data[5]; - u32 xid; - u32 hard_mtu; /* count any extra framing */ - size_t rx_urb_size; /* size for rx urbs */ - struct mii_if_info mii; - - /* various kinds of pending driver work */ - struct sk_buff_head rxq; - struct sk_buff_head txq; - struct sk_buff_head done; - struct sk_buff_head rxq_pause; - struct urb *interrupt; - struct usb_anchor deferred; - struct tasklet_struct bh; - - struct work_struct kevent; - unsigned long flags; -# define EVENT_TX_HALT 0 -# define EVENT_RX_HALT 1 -# define EVENT_RX_MEMORY 2 -# define EVENT_STS_SPLIT 3 -# define EVENT_LINK_RESET 4 -# define EVENT_RX_PAUSED 5 -# define EVENT_DEV_WAKING 6 -# define EVENT_DEV_ASLEEP 7 -# define EVENT_DEV_OPEN 8 -}; - -static inline struct usb_driver *driver_of(struct usb_interface *intf) -{ - return to_usb_driver(intf->dev.driver); -} - -/* interface from the device/framing level "minidriver" to core */ -struct driver_info { - char *description; - - int flags; -/* framing is CDC Ethernet, not writing ZLPs (hw issues), or optionally: */ -#define FLAG_FRAMING_NC 0x0001 /* guard against device dropouts */ -#define FLAG_FRAMING_GL 0x0002 /* genelink batches packets */ -#define FLAG_FRAMING_Z 0x0004 /* zaurus adds a trailer */ -#define FLAG_FRAMING_RN 0x0008 /* RNDIS batches, plus huge header */ - -#define FLAG_NO_SETINT 0x0010 /* device can't set_interface() */ -#define FLAG_ETHER 0x0020 /* maybe use "eth%d" names */ - -#define FLAG_FRAMING_AX 0x0040 /* AX88772/178 packets */ -#define FLAG_WLAN 0x0080 /* use "wlan%d" names */ -#define FLAG_AVOID_UNLINK_URBS 0x0100 /* don't unlink urbs at usbnet_stop() */ -#define FLAG_SEND_ZLP 0x0200 /* hw requires ZLPs are sent */ -#define FLAG_WWAN 0x0400 /* use "wwan%d" names */ - -#define FLAG_LINK_INTR 0x0800 /* updates link (carrier) status */ - -#define FLAG_POINTTOPOINT 0x1000 /* possibly use "usb%d" names */ - -/* - * Indicates to usbnet, that USB driver accumulates multiple IP packets. - * Affects statistic (counters) and short packet handling. - */ -#define FLAG_MULTI_PACKET 0x2000 -#define FLAG_RX_ASSEMBLE 0x4000 /* rx packets may span >1 frames */ - - /* init device ... can sleep, or cause probe() failure */ - int (*bind)(struct usbnet *, struct usb_interface *); - - /* cleanup device ... can sleep, but can't fail */ - void (*unbind)(struct usbnet *, struct usb_interface *); - - /* reset device ... can sleep */ - int (*reset)(struct usbnet *); - - /* stop device ... can sleep */ - int (*stop)(struct usbnet *); - - /* see if peer is connected ... can sleep */ - int (*check_connect)(struct usbnet *); - - /* (dis)activate runtime power management */ - int (*manage_power)(struct usbnet *, int); - - /* for status polling */ - void (*status)(struct usbnet *, struct urb *); - - /* link reset handling, called from defer_kevent */ - int (*link_reset)(struct usbnet *); - - /* fixup rx packet (strip framing) */ - int (*rx_fixup)(struct usbnet *dev, struct sk_buff *skb); - - /* fixup tx packet (add framing) */ - struct sk_buff *(*tx_fixup)(struct usbnet *dev, - struct sk_buff *skb, gfp_t flags); - - /* early initialization code, can sleep. This is for minidrivers - * having 'subminidrivers' that need to do extra initialization - * right after minidriver have initialized hardware. */ - int (*early_init)(struct usbnet *dev); - - /* called by minidriver when receiving indication */ - void (*indication)(struct usbnet *dev, void *ind, int indlen); - - /* for new devices, use the descriptor-reading code instead */ - int in; /* rx endpoint */ - int out; /* tx endpoint */ - - unsigned long data; /* Misc driver specific data */ -}; - -/* Minidrivers are just drivers using the "usbnet" core as a powerful - * network-specific subroutine library ... that happens to do pretty - * much everything except custom framing and chip-specific stuff. - */ -extern int usbnet_probe(struct usb_interface *, const struct usb_device_id *); -extern int usbnet_suspend(struct usb_interface *, pm_message_t); -extern int usbnet_resume(struct usb_interface *); -extern void usbnet_disconnect(struct usb_interface *); - - -/* Drivers that reuse some of the standard USB CDC infrastructure - * (notably, using multiple interfaces according to the CDC - * union descriptor) get some helper code. - */ -struct cdc_state { - struct usb_cdc_header_desc *header; - struct usb_cdc_union_desc *u; - struct usb_cdc_ether_desc *ether; - struct usb_interface *control; - struct usb_interface *data; -}; - -extern int usbnet_generic_cdc_bind(struct usbnet *, struct usb_interface *); -extern int usbnet_cdc_bind(struct usbnet *, struct usb_interface *); -extern void usbnet_cdc_unbind(struct usbnet *, struct usb_interface *); -extern void usbnet_cdc_status(struct usbnet *, struct urb *); - -/* CDC and RNDIS support the same host-chosen packet filters for IN transfers */ -#define DEFAULT_FILTER (USB_CDC_PACKET_TYPE_BROADCAST \ - |USB_CDC_PACKET_TYPE_ALL_MULTICAST \ - |USB_CDC_PACKET_TYPE_PROMISCUOUS \ - |USB_CDC_PACKET_TYPE_DIRECTED) - - -/* we record the state for each of our queued skbs */ -enum skb_state { - illegal = 0, - tx_start, tx_done, - rx_start, rx_done, rx_cleanup -}; - -struct skb_data { /* skb->cb is one of these */ - struct urb *urb; - struct usbnet *dev; - enum skb_state state; - size_t length; -}; - -extern int usbnet_open(struct net_device *net); -extern int usbnet_stop(struct net_device *net); -extern netdev_tx_t usbnet_start_xmit(struct sk_buff *skb, - struct net_device *net); -extern void usbnet_tx_timeout(struct net_device *net); -extern int usbnet_change_mtu(struct net_device *net, int new_mtu); - -extern int usbnet_get_endpoints(struct usbnet *, struct usb_interface *); -extern int usbnet_get_ethernet_addr(struct usbnet *, int); -extern void usbnet_defer_kevent(struct usbnet *, int); -extern void usbnet_skb_return(struct usbnet *, struct sk_buff *); -extern void usbnet_unlink_rx_urbs(struct usbnet *); - -extern void usbnet_pause_rx(struct usbnet *); -extern void usbnet_resume_rx(struct usbnet *); -extern void usbnet_purge_paused_rxq(struct usbnet *); - -extern int usbnet_get_settings(struct net_device *net, - struct ethtool_cmd *cmd); -extern int usbnet_set_settings(struct net_device *net, - struct ethtool_cmd *cmd); -extern u32 usbnet_get_link(struct net_device *net); -extern u32 usbnet_get_msglevel(struct net_device *); -extern void usbnet_set_msglevel(struct net_device *, u32); -extern void usbnet_get_drvinfo(struct net_device *, struct ethtool_drvinfo *); -extern int usbnet_nway_reset(struct net_device *net); - -#endif /* __LINUX_USB_USBNET_H */ diff --git a/openairITS/mac/DOT11/include/linux/wireless.h b/openairITS/mac/DOT11/include/linux/wireless.h deleted file mode 100644 index 4395b28bb8..0000000000 --- a/openairITS/mac/DOT11/include/linux/wireless.h +++ /dev/null @@ -1,1162 +0,0 @@ -/* - * This file define a set of standard wireless extensions - * - * Version : 22 16.3.07 - * - * Authors : Jean Tourrilhes - HPL - - * Copyright (c) 1997-2007 Jean Tourrilhes, All Rights Reserved. - */ - -#ifndef _LINUX_WIRELESS_H -#define _LINUX_WIRELESS_H - -/************************** DOCUMENTATION **************************/ -/* - * Initial APIs (1996 -> onward) : - * ----------------------------- - * Basically, the wireless extensions are for now a set of standard ioctl - * call + /proc/net/wireless - * - * The entry /proc/net/wireless give statistics and information on the - * driver. - * This is better than having each driver having its entry because - * its centralised and we may remove the driver module safely. - * - * Ioctl are used to configure the driver and issue commands. This is - * better than command line options of insmod because we may want to - * change dynamically (while the driver is running) some parameters. - * - * The ioctl mechanimsm are copied from standard devices ioctl. - * We have the list of command plus a structure descibing the - * data exchanged... - * Note that to add these ioctl, I was obliged to modify : - * # net/core/dev.c (two place + add include) - * # net/ipv4/af_inet.c (one place + add include) - * - * /proc/net/wireless is a copy of /proc/net/dev. - * We have a structure for data passed from the driver to /proc/net/wireless - * Too add this, I've modified : - * # net/core/dev.c (two other places) - * # include/linux/netdevice.h (one place) - * # include/linux/proc_fs.h (one place) - * - * New driver API (2002 -> onward) : - * ------------------------------- - * This file is only concerned with the user space API and common definitions. - * The new driver API is defined and documented in : - * # include/net/iw_handler.h - * - * Note as well that /proc/net/wireless implementation has now moved in : - * # net/core/wireless.c - * - * Wireless Events (2002 -> onward) : - * -------------------------------- - * Events are defined at the end of this file, and implemented in : - * # net/core/wireless.c - * - * Other comments : - * -------------- - * Do not add here things that are redundant with other mechanisms - * (drivers init, ifconfig, /proc/net/dev, ...) and with are not - * wireless specific. - * - * These wireless extensions are not magic : each driver has to provide - * support for them... - * - * IMPORTANT NOTE : As everything in the kernel, this is very much a - * work in progress. Contact me if you have ideas of improvements... - */ - -/***************************** INCLUDES *****************************/ - -#include /* for __u* and __s* typedefs */ -#include /* for "struct sockaddr" et al */ -#include /* for IFNAMSIZ and co... */ - -/***************************** VERSION *****************************/ -/* - * This constant is used to know the availability of the wireless - * extensions and to know which version of wireless extensions it is - * (there is some stuff that will be added in the future...) - * I just plan to increment with each new version. - */ -#define WIRELESS_EXT 22 - -/* - * Changes : - * - * V2 to V3 - * -------- - * Alan Cox start some incompatibles changes. I've integrated a bit more. - * - Encryption renamed to Encode to avoid US regulation problems - * - Frequency changed from float to struct to avoid problems on old 386 - * - * V3 to V4 - * -------- - * - Add sensitivity - * - * V4 to V5 - * -------- - * - Missing encoding definitions in range - * - Access points stuff - * - * V5 to V6 - * -------- - * - 802.11 support (ESSID ioctls) - * - * V6 to V7 - * -------- - * - define IW_ESSID_MAX_SIZE and IW_MAX_AP - * - * V7 to V8 - * -------- - * - Changed my e-mail address - * - More 802.11 support (nickname, rate, rts, frag) - * - List index in frequencies - * - * V8 to V9 - * -------- - * - Support for 'mode of operation' (ad-hoc, managed...) - * - Support for unicast and multicast power saving - * - Change encoding to support larger tokens (>64 bits) - * - Updated iw_params (disable, flags) and use it for NWID - * - Extracted iw_point from iwreq for clarity - * - * V9 to V10 - * --------- - * - Add PM capability to range structure - * - Add PM modifier : MAX/MIN/RELATIVE - * - Add encoding option : IW_ENCODE_NOKEY - * - Add TxPower ioctls (work like TxRate) - * - * V10 to V11 - * ---------- - * - Add WE version in range (help backward/forward compatibility) - * - Add retry ioctls (work like PM) - * - * V11 to V12 - * ---------- - * - Add SIOCSIWSTATS to get /proc/net/wireless programatically - * - Add DEV PRIVATE IOCTL to avoid collisions in SIOCDEVPRIVATE space - * - Add new statistics (frag, retry, beacon) - * - Add average quality (for user space calibration) - * - * V12 to V13 - * ---------- - * - Document creation of new driver API. - * - Extract union iwreq_data from struct iwreq (for new driver API). - * - Rename SIOCSIWNAME as SIOCSIWCOMMIT - * - * V13 to V14 - * ---------- - * - Wireless Events support : define struct iw_event - * - Define additional specific event numbers - * - Add "addr" and "param" fields in union iwreq_data - * - AP scanning stuff (SIOCSIWSCAN and friends) - * - * V14 to V15 - * ---------- - * - Add IW_PRIV_TYPE_ADDR for struct sockaddr private arg - * - Make struct iw_freq signed (both m & e), add explicit padding - * - Add IWEVCUSTOM for driver specific event/scanning token - * - Add IW_MAX_GET_SPY for driver returning a lot of addresses - * - Add IW_TXPOW_RANGE for range of Tx Powers - * - Add IWEVREGISTERED & IWEVEXPIRED events for Access Points - * - Add IW_MODE_MONITOR for passive monitor - * - * V15 to V16 - * ---------- - * - Increase the number of bitrates in iw_range to 32 (for 802.11g) - * - Increase the number of frequencies in iw_range to 32 (for 802.11b+a) - * - Reshuffle struct iw_range for increases, add filler - * - Increase IW_MAX_AP to 64 for driver returning a lot of addresses - * - Remove IW_MAX_GET_SPY because conflict with enhanced spy support - * - Add SIOCSIWTHRSPY/SIOCGIWTHRSPY and "struct iw_thrspy" - * - Add IW_ENCODE_TEMP and iw_range->encoding_login_index - * - * V16 to V17 - * ---------- - * - Add flags to frequency -> auto/fixed - * - Document (struct iw_quality *)->updated, add new flags (INVALID) - * - Wireless Event capability in struct iw_range - * - Add support for relative TxPower (yick !) - * - * V17 to V18 (From Jouni Malinen ) - * ---------- - * - Add support for WPA/WPA2 - * - Add extended encoding configuration (SIOCSIWENCODEEXT and - * SIOCGIWENCODEEXT) - * - Add SIOCSIWGENIE/SIOCGIWGENIE - * - Add SIOCSIWMLME - * - Add SIOCSIWPMKSA - * - Add struct iw_range bit field for supported encoding capabilities - * - Add optional scan request parameters for SIOCSIWSCAN - * - Add SIOCSIWAUTH/SIOCGIWAUTH for setting authentication and WPA - * related parameters (extensible up to 4096 parameter values) - * - Add wireless events: IWEVGENIE, IWEVMICHAELMICFAILURE, - * IWEVASSOCREQIE, IWEVASSOCRESPIE, IWEVPMKIDCAND - * - * V18 to V19 - * ---------- - * - Remove (struct iw_point *)->pointer from events and streams - * - Remove header includes to help user space - * - Increase IW_ENCODING_TOKEN_MAX from 32 to 64 - * - Add IW_QUAL_ALL_UPDATED and IW_QUAL_ALL_INVALID macros - * - Add explicit flag to tell stats are in dBm : IW_QUAL_DBM - * - Add IW_IOCTL_IDX() and IW_EVENT_IDX() macros - * - * V19 to V20 - * ---------- - * - RtNetlink requests support (SET/GET) - * - * V20 to V21 - * ---------- - * - Remove (struct net_device *)->get_wireless_stats() - * - Change length in ESSID and NICK to strlen() instead of strlen()+1 - * - Add IW_RETRY_SHORT/IW_RETRY_LONG retry modifiers - * - Power/Retry relative values no longer * 100000 - * - Add explicit flag to tell stats are in 802.11k RCPI : IW_QUAL_RCPI - * - * V21 to V22 - * ---------- - * - Prevent leaking of kernel space in stream on 64 bits. - */ - -/**************************** CONSTANTS ****************************/ - -/* -------------------------- IOCTL LIST -------------------------- */ - -/* Wireless Identification */ -#define SIOCSIWCOMMIT 0x8B00 /* Commit pending changes to driver */ -#define SIOCGIWNAME 0x8B01 /* get name == wireless protocol */ -/* SIOCGIWNAME is used to verify the presence of Wireless Extensions. - * Common values : "IEEE 802.11-DS", "IEEE 802.11-FH", "IEEE 802.11b"... - * Don't put the name of your driver there, it's useless. */ - -/* Basic operations */ -#define SIOCSIWNWID 0x8B02 /* set network id (pre-802.11) */ -#define SIOCGIWNWID 0x8B03 /* get network id (the cell) */ -#define SIOCSIWFREQ 0x8B04 /* set channel/frequency (Hz) */ -#define SIOCGIWFREQ 0x8B05 /* get channel/frequency (Hz) */ -#define SIOCSIWMODE 0x8B06 /* set operation mode */ -#define SIOCGIWMODE 0x8B07 /* get operation mode */ -#define SIOCSIWSENS 0x8B08 /* set sensitivity (dBm) */ -#define SIOCGIWSENS 0x8B09 /* get sensitivity (dBm) */ - -/* Informative stuff */ -#define SIOCSIWRANGE 0x8B0A /* Unused */ -#define SIOCGIWRANGE 0x8B0B /* Get range of parameters */ -#define SIOCSIWPRIV 0x8B0C /* Unused */ -#define SIOCGIWPRIV 0x8B0D /* get private ioctl interface info */ -#define SIOCSIWSTATS 0x8B0E /* Unused */ -#define SIOCGIWSTATS 0x8B0F /* Get /proc/net/wireless stats */ -/* SIOCGIWSTATS is strictly used between user space and the kernel, and - * is never passed to the driver (i.e. the driver will never see it). */ - -/* Spy support (statistics per MAC address - used for Mobile IP support) */ -#define SIOCSIWSPY 0x8B10 /* set spy addresses */ -#define SIOCGIWSPY 0x8B11 /* get spy info (quality of link) */ -#define SIOCSIWTHRSPY 0x8B12 /* set spy threshold (spy event) */ -#define SIOCGIWTHRSPY 0x8B13 /* get spy threshold */ - -/* Access Point manipulation */ -#define SIOCSIWAP 0x8B14 /* set access point MAC addresses */ -#define SIOCGIWAP 0x8B15 /* get access point MAC addresses */ -#define SIOCGIWAPLIST 0x8B17 /* Deprecated in favor of scanning */ -#define SIOCSIWSCAN 0x8B18 /* trigger scanning (list cells) */ -#define SIOCGIWSCAN 0x8B19 /* get scanning results */ - -/* 802.11 specific support */ -#define SIOCSIWESSID 0x8B1A /* set ESSID (network name) */ -#define SIOCGIWESSID 0x8B1B /* get ESSID */ -#define SIOCSIWNICKN 0x8B1C /* set node name/nickname */ -#define SIOCGIWNICKN 0x8B1D /* get node name/nickname */ -/* As the ESSID and NICKN are strings up to 32 bytes long, it doesn't fit - * within the 'iwreq' structure, so we need to use the 'data' member to - * point to a string in user space, like it is done for RANGE... */ - -/* Other parameters useful in 802.11 and some other devices */ -#define SIOCSIWRATE 0x8B20 /* set default bit rate (bps) */ -#define SIOCGIWRATE 0x8B21 /* get default bit rate (bps) */ -#define SIOCSIWRTS 0x8B22 /* set RTS/CTS threshold (bytes) */ -#define SIOCGIWRTS 0x8B23 /* get RTS/CTS threshold (bytes) */ -#define SIOCSIWFRAG 0x8B24 /* set fragmentation thr (bytes) */ -#define SIOCGIWFRAG 0x8B25 /* get fragmentation thr (bytes) */ -#define SIOCSIWTXPOW 0x8B26 /* set transmit power (dBm) */ -#define SIOCGIWTXPOW 0x8B27 /* get transmit power (dBm) */ -#define SIOCSIWRETRY 0x8B28 /* set retry limits and lifetime */ -#define SIOCGIWRETRY 0x8B29 /* get retry limits and lifetime */ - -/* Encoding stuff (scrambling, hardware security, WEP...) */ -#define SIOCSIWENCODE 0x8B2A /* set encoding token & mode */ -#define SIOCGIWENCODE 0x8B2B /* get encoding token & mode */ -/* Power saving stuff (power management, unicast and multicast) */ -#define SIOCSIWPOWER 0x8B2C /* set Power Management settings */ -#define SIOCGIWPOWER 0x8B2D /* get Power Management settings */ - -/* WPA : Generic IEEE 802.11 informatiom element (e.g., for WPA/RSN/WMM). - * This ioctl uses struct iw_point and data buffer that includes IE id and len - * fields. More than one IE may be included in the request. Setting the generic - * IE to empty buffer (len=0) removes the generic IE from the driver. Drivers - * are allowed to generate their own WPA/RSN IEs, but in these cases, drivers - * are required to report the used IE as a wireless event, e.g., when - * associating with an AP. */ -#define SIOCSIWGENIE 0x8B30 /* set generic IE */ -#define SIOCGIWGENIE 0x8B31 /* get generic IE */ - -/* WPA : IEEE 802.11 MLME requests */ -#define SIOCSIWMLME 0x8B16 /* request MLME operation; uses - * struct iw_mlme */ -/* WPA : Authentication mode parameters */ -#define SIOCSIWAUTH 0x8B32 /* set authentication mode params */ -#define SIOCGIWAUTH 0x8B33 /* get authentication mode params */ - -/* WPA : Extended version of encoding configuration */ -#define SIOCSIWENCODEEXT 0x8B34 /* set encoding token & mode */ -#define SIOCGIWENCODEEXT 0x8B35 /* get encoding token & mode */ - -/* WPA2 : PMKSA cache management */ -#define SIOCSIWPMKSA 0x8B36 /* PMKSA cache operation */ - -/* -------------------- DEV PRIVATE IOCTL LIST -------------------- */ - -/* These 32 ioctl are wireless device private, for 16 commands. - * Each driver is free to use them for whatever purpose it chooses, - * however the driver *must* export the description of those ioctls - * with SIOCGIWPRIV and *must* use arguments as defined below. - * If you don't follow those rules, DaveM is going to hate you (reason : - * it make mixed 32/64bit operation impossible). - */ -#define SIOCIWFIRSTPRIV 0x8BE0 -#define SIOCIWLASTPRIV 0x8BFF -/* Previously, we were using SIOCDEVPRIVATE, but we now have our - * separate range because of collisions with other tools such as - * 'mii-tool'. - * We now have 32 commands, so a bit more space ;-). - * Also, all 'even' commands are only usable by root and don't return the - * content of ifr/iwr to user (but you are not obliged to use the set/get - * convention, just use every other two command). More details in iwpriv.c. - * And I repeat : you are not forced to use them with iwpriv, but you - * must be compliant with it. - */ - -/* ------------------------- IOCTL STUFF ------------------------- */ - -/* The first and the last (range) */ -#define SIOCIWFIRST 0x8B00 -#define SIOCIWLAST SIOCIWLASTPRIV /* 0x8BFF */ -#define IW_IOCTL_IDX(cmd) ((cmd) - SIOCIWFIRST) -#define IW_HANDLER(id, func) \ - [IW_IOCTL_IDX(id)] = func - -/* Odd : get (world access), even : set (root access) */ -#define IW_IS_SET(cmd) (!((cmd) & 0x1)) -#define IW_IS_GET(cmd) ((cmd) & 0x1) - -/* ----------------------- WIRELESS EVENTS ----------------------- */ -/* Those are *NOT* ioctls, do not issue request on them !!! */ -/* Most events use the same identifier as ioctl requests */ - -#define IWEVTXDROP 0x8C00 /* Packet dropped to excessive retry */ -#define IWEVQUAL 0x8C01 /* Quality part of statistics (scan) */ -#define IWEVCUSTOM 0x8C02 /* Driver specific ascii string */ -#define IWEVREGISTERED 0x8C03 /* Discovered a new node (AP mode) */ -#define IWEVEXPIRED 0x8C04 /* Expired a node (AP mode) */ -#define IWEVGENIE 0x8C05 /* Generic IE (WPA, RSN, WMM, ..) - * (scan results); This includes id and - * length fields. One IWEVGENIE may - * contain more than one IE. Scan - * results may contain one or more - * IWEVGENIE events. */ -#define IWEVMICHAELMICFAILURE 0x8C06 /* Michael MIC failure - * (struct iw_michaelmicfailure) - */ -#define IWEVASSOCREQIE 0x8C07 /* IEs used in (Re)Association Request. - * The data includes id and length - * fields and may contain more than one - * IE. This event is required in - * Managed mode if the driver - * generates its own WPA/RSN IE. This - * should be sent just before - * IWEVREGISTERED event for the - * association. */ -#define IWEVASSOCRESPIE 0x8C08 /* IEs used in (Re)Association - * Response. The data includes id and - * length fields and may contain more - * than one IE. This may be sent - * between IWEVASSOCREQIE and - * IWEVREGISTERED events for the - * association. */ -#define IWEVPMKIDCAND 0x8C09 /* PMKID candidate for RSN - * pre-authentication - * (struct iw_pmkid_cand) */ - -#define IWEVFIRST 0x8C00 -#define IW_EVENT_IDX(cmd) ((cmd) - IWEVFIRST) - -/* ------------------------- PRIVATE INFO ------------------------- */ -/* - * The following is used with SIOCGIWPRIV. It allow a driver to define - * the interface (name, type of data) for its private ioctl. - * Privates ioctl are SIOCIWFIRSTPRIV -> SIOCIWLASTPRIV - */ - -#define IW_PRIV_TYPE_MASK 0x7000 /* Type of arguments */ -#define IW_PRIV_TYPE_NONE 0x0000 -#define IW_PRIV_TYPE_BYTE 0x1000 /* Char as number */ -#define IW_PRIV_TYPE_CHAR 0x2000 /* Char as character */ -#define IW_PRIV_TYPE_INT 0x4000 /* 32 bits int */ -#define IW_PRIV_TYPE_FLOAT 0x5000 /* struct iw_freq */ -#define IW_PRIV_TYPE_ADDR 0x6000 /* struct sockaddr */ - -#define IW_PRIV_SIZE_FIXED 0x0800 /* Variable or fixed number of args */ - -#define IW_PRIV_SIZE_MASK 0x07FF /* Max number of those args */ - -/* - * Note : if the number of args is fixed and the size < 16 octets, - * instead of passing a pointer we will put args in the iwreq struct... - */ - -/* ----------------------- OTHER CONSTANTS ----------------------- */ - -/* Maximum frequencies in the range struct */ -#define IW_MAX_FREQUENCIES 32 -/* Note : if you have something like 80 frequencies, - * don't increase this constant and don't fill the frequency list. - * The user will be able to set by channel anyway... */ - -/* Maximum bit rates in the range struct */ -#define IW_MAX_BITRATES 32 - -/* Maximum tx powers in the range struct */ -#define IW_MAX_TXPOWER 8 -/* Note : if you more than 8 TXPowers, just set the max and min or - * a few of them in the struct iw_range. */ - -/* Maximum of address that you may set with SPY */ -#define IW_MAX_SPY 8 - -/* Maximum of address that you may get in the - list of access points in range */ -#define IW_MAX_AP 64 - -/* Maximum size of the ESSID and NICKN strings */ -#define IW_ESSID_MAX_SIZE 32 - -/* Modes of operation */ -#define IW_MODE_AUTO 0 /* Let the driver decides */ -#define IW_MODE_ADHOC 1 /* Single cell network */ -#define IW_MODE_INFRA 2 /* Multi cell network, roaming, ... */ -#define IW_MODE_MASTER 3 /* Synchronisation master or Access Point */ -#define IW_MODE_REPEAT 4 /* Wireless Repeater (forwarder) */ -#define IW_MODE_SECOND 5 /* Secondary master/repeater (backup) */ -#define IW_MODE_MONITOR 6 /* Passive monitor (listen only) */ -#define IW_MODE_MESH 7 /* Mesh (IEEE 802.11s) network */ - -/* Statistics flags (bitmask in updated) */ -#define IW_QUAL_QUAL_UPDATED 0x01 /* Value was updated since last read */ -#define IW_QUAL_LEVEL_UPDATED 0x02 -#define IW_QUAL_NOISE_UPDATED 0x04 -#define IW_QUAL_ALL_UPDATED 0x07 -#define IW_QUAL_DBM 0x08 /* Level + Noise are dBm */ -#define IW_QUAL_QUAL_INVALID 0x10 /* Driver doesn't provide value */ -#define IW_QUAL_LEVEL_INVALID 0x20 -#define IW_QUAL_NOISE_INVALID 0x40 -#define IW_QUAL_RCPI 0x80 /* Level + Noise are 802.11k RCPI */ -#define IW_QUAL_ALL_INVALID 0x70 - -/* Frequency flags */ -#define IW_FREQ_AUTO 0x00 /* Let the driver decides */ -#define IW_FREQ_FIXED 0x01 /* Force a specific value */ - -/* Maximum number of size of encoding token available - * they are listed in the range structure */ -#define IW_MAX_ENCODING_SIZES 8 - -/* Maximum size of the encoding token in bytes */ -#define IW_ENCODING_TOKEN_MAX 64 /* 512 bits (for now) */ - -/* Flags for encoding (along with the token) */ -#define IW_ENCODE_INDEX 0x00FF /* Token index (if needed) */ -#define IW_ENCODE_FLAGS 0xFF00 /* Flags defined below */ -#define IW_ENCODE_MODE 0xF000 /* Modes defined below */ -#define IW_ENCODE_DISABLED 0x8000 /* Encoding disabled */ -#define IW_ENCODE_ENABLED 0x0000 /* Encoding enabled */ -#define IW_ENCODE_RESTRICTED 0x4000 /* Refuse non-encoded packets */ -#define IW_ENCODE_OPEN 0x2000 /* Accept non-encoded packets */ -#define IW_ENCODE_NOKEY 0x0800 /* Key is write only, so not present */ -#define IW_ENCODE_TEMP 0x0400 /* Temporary key */ - -/* Power management flags available (along with the value, if any) */ -#define IW_POWER_ON 0x0000 /* No details... */ -#define IW_POWER_TYPE 0xF000 /* Type of parameter */ -#define IW_POWER_PERIOD 0x1000 /* Value is a period/duration of */ -#define IW_POWER_TIMEOUT 0x2000 /* Value is a timeout (to go asleep) */ -#define IW_POWER_MODE 0x0F00 /* Power Management mode */ -#define IW_POWER_UNICAST_R 0x0100 /* Receive only unicast messages */ -#define IW_POWER_MULTICAST_R 0x0200 /* Receive only multicast messages */ -#define IW_POWER_ALL_R 0x0300 /* Receive all messages though PM */ -#define IW_POWER_FORCE_S 0x0400 /* Force PM procedure for sending unicast */ -#define IW_POWER_REPEATER 0x0800 /* Repeat broadcast messages in PM period */ -#define IW_POWER_MODIFIER 0x000F /* Modify a parameter */ -#define IW_POWER_MIN 0x0001 /* Value is a minimum */ -#define IW_POWER_MAX 0x0002 /* Value is a maximum */ -#define IW_POWER_RELATIVE 0x0004 /* Value is not in seconds/ms/us */ - -/* Transmit Power flags available */ -#define IW_TXPOW_TYPE 0x00FF /* Type of value */ -#define IW_TXPOW_DBM 0x0000 /* Value is in dBm */ -#define IW_TXPOW_MWATT 0x0001 /* Value is in mW */ -#define IW_TXPOW_RELATIVE 0x0002 /* Value is in arbitrary units */ -#define IW_TXPOW_RANGE 0x1000 /* Range of value between min/max */ - -/* Retry limits and lifetime flags available */ -#define IW_RETRY_ON 0x0000 /* No details... */ -#define IW_RETRY_TYPE 0xF000 /* Type of parameter */ -#define IW_RETRY_LIMIT 0x1000 /* Maximum number of retries*/ -#define IW_RETRY_LIFETIME 0x2000 /* Maximum duration of retries in us */ -#define IW_RETRY_MODIFIER 0x00FF /* Modify a parameter */ -#define IW_RETRY_MIN 0x0001 /* Value is a minimum */ -#define IW_RETRY_MAX 0x0002 /* Value is a maximum */ -#define IW_RETRY_RELATIVE 0x0004 /* Value is not in seconds/ms/us */ -#define IW_RETRY_SHORT 0x0010 /* Value is for short packets */ -#define IW_RETRY_LONG 0x0020 /* Value is for long packets */ - -/* Scanning request flags */ -#define IW_SCAN_DEFAULT 0x0000 /* Default scan of the driver */ -#define IW_SCAN_ALL_ESSID 0x0001 /* Scan all ESSIDs */ -#define IW_SCAN_THIS_ESSID 0x0002 /* Scan only this ESSID */ -#define IW_SCAN_ALL_FREQ 0x0004 /* Scan all Frequencies */ -#define IW_SCAN_THIS_FREQ 0x0008 /* Scan only this Frequency */ -#define IW_SCAN_ALL_MODE 0x0010 /* Scan all Modes */ -#define IW_SCAN_THIS_MODE 0x0020 /* Scan only this Mode */ -#define IW_SCAN_ALL_RATE 0x0040 /* Scan all Bit-Rates */ -#define IW_SCAN_THIS_RATE 0x0080 /* Scan only this Bit-Rate */ -/* struct iw_scan_req scan_type */ -#define IW_SCAN_TYPE_ACTIVE 0 -#define IW_SCAN_TYPE_PASSIVE 1 -/* Maximum size of returned data */ -#define IW_SCAN_MAX_DATA 4096 /* In bytes */ - -/* Scan capability flags - in (struct iw_range *)->scan_capa */ -#define IW_SCAN_CAPA_NONE 0x00 -#define IW_SCAN_CAPA_ESSID 0x01 -#define IW_SCAN_CAPA_BSSID 0x02 -#define IW_SCAN_CAPA_CHANNEL 0x04 -#define IW_SCAN_CAPA_MODE 0x08 -#define IW_SCAN_CAPA_RATE 0x10 -#define IW_SCAN_CAPA_TYPE 0x20 -#define IW_SCAN_CAPA_TIME 0x40 - -/* Max number of char in custom event - use multiple of them if needed */ -#define IW_CUSTOM_MAX 256 /* In bytes */ - -/* Generic information element */ -#define IW_GENERIC_IE_MAX 1024 - -/* MLME requests (SIOCSIWMLME / struct iw_mlme) */ -#define IW_MLME_DEAUTH 0 -#define IW_MLME_DISASSOC 1 -#define IW_MLME_AUTH 2 -#define IW_MLME_ASSOC 3 - -/* SIOCSIWAUTH/SIOCGIWAUTH struct iw_param flags */ -#define IW_AUTH_INDEX 0x0FFF -#define IW_AUTH_FLAGS 0xF000 -/* SIOCSIWAUTH/SIOCGIWAUTH parameters (0 .. 4095) - * (IW_AUTH_INDEX mask in struct iw_param flags; this is the index of the - * parameter that is being set/get to; value will be read/written to - * struct iw_param value field) */ -#define IW_AUTH_WPA_VERSION 0 -#define IW_AUTH_CIPHER_PAIRWISE 1 -#define IW_AUTH_CIPHER_GROUP 2 -#define IW_AUTH_KEY_MGMT 3 -#define IW_AUTH_TKIP_COUNTERMEASURES 4 -#define IW_AUTH_DROP_UNENCRYPTED 5 -#define IW_AUTH_80211_AUTH_ALG 6 -#define IW_AUTH_WPA_ENABLED 7 -#define IW_AUTH_RX_UNENCRYPTED_EAPOL 8 -#define IW_AUTH_ROAMING_CONTROL 9 -#define IW_AUTH_PRIVACY_INVOKED 10 -#define IW_AUTH_CIPHER_GROUP_MGMT 11 -#define IW_AUTH_MFP 12 - -/* IW_AUTH_WPA_VERSION values (bit field) */ -#define IW_AUTH_WPA_VERSION_DISABLED 0x00000001 -#define IW_AUTH_WPA_VERSION_WPA 0x00000002 -#define IW_AUTH_WPA_VERSION_WPA2 0x00000004 - -/* IW_AUTH_PAIRWISE_CIPHER, IW_AUTH_GROUP_CIPHER, and IW_AUTH_CIPHER_GROUP_MGMT - * values (bit field) */ -#define IW_AUTH_CIPHER_NONE 0x00000001 -#define IW_AUTH_CIPHER_WEP40 0x00000002 -#define IW_AUTH_CIPHER_TKIP 0x00000004 -#define IW_AUTH_CIPHER_CCMP 0x00000008 -#define IW_AUTH_CIPHER_WEP104 0x00000010 -#define IW_AUTH_CIPHER_AES_CMAC 0x00000020 - -/* IW_AUTH_KEY_MGMT values (bit field) */ -#define IW_AUTH_KEY_MGMT_802_1X 1 -#define IW_AUTH_KEY_MGMT_PSK 2 - -/* IW_AUTH_80211_AUTH_ALG values (bit field) */ -#define IW_AUTH_ALG_OPEN_SYSTEM 0x00000001 -#define IW_AUTH_ALG_SHARED_KEY 0x00000002 -#define IW_AUTH_ALG_LEAP 0x00000004 - -/* IW_AUTH_ROAMING_CONTROL values */ -#define IW_AUTH_ROAMING_ENABLE 0 /* driver/firmware based roaming */ -#define IW_AUTH_ROAMING_DISABLE 1 /* user space program used for roaming - * control */ - -/* IW_AUTH_MFP (management frame protection) values */ -#define IW_AUTH_MFP_DISABLED 0 /* MFP disabled */ -#define IW_AUTH_MFP_OPTIONAL 1 /* MFP optional */ -#define IW_AUTH_MFP_REQUIRED 2 /* MFP required */ - -/* SIOCSIWENCODEEXT definitions */ -#define IW_ENCODE_SEQ_MAX_SIZE 8 -/* struct iw_encode_ext ->alg */ -#define IW_ENCODE_ALG_NONE 0 -#define IW_ENCODE_ALG_WEP 1 -#define IW_ENCODE_ALG_TKIP 2 -#define IW_ENCODE_ALG_CCMP 3 -#define IW_ENCODE_ALG_PMK 4 -#define IW_ENCODE_ALG_AES_CMAC 5 -/* struct iw_encode_ext ->ext_flags */ -#define IW_ENCODE_EXT_TX_SEQ_VALID 0x00000001 -#define IW_ENCODE_EXT_RX_SEQ_VALID 0x00000002 -#define IW_ENCODE_EXT_GROUP_KEY 0x00000004 -#define IW_ENCODE_EXT_SET_TX_KEY 0x00000008 - -/* IWEVMICHAELMICFAILURE : struct iw_michaelmicfailure ->flags */ -#define IW_MICFAILURE_KEY_ID 0x00000003 /* Key ID 0..3 */ -#define IW_MICFAILURE_GROUP 0x00000004 -#define IW_MICFAILURE_PAIRWISE 0x00000008 -#define IW_MICFAILURE_STAKEY 0x00000010 -#define IW_MICFAILURE_COUNT 0x00000060 /* 1 or 2 (0 = count not supported) - */ - -/* Bit field values for enc_capa in struct iw_range */ -#define IW_ENC_CAPA_WPA 0x00000001 -#define IW_ENC_CAPA_WPA2 0x00000002 -#define IW_ENC_CAPA_CIPHER_TKIP 0x00000004 -#define IW_ENC_CAPA_CIPHER_CCMP 0x00000008 -#define IW_ENC_CAPA_4WAY_HANDSHAKE 0x00000010 - -/* Event capability macros - in (struct iw_range *)->event_capa - * Because we have more than 32 possible events, we use an array of - * 32 bit bitmasks. Note : 32 bits = 0x20 = 2^5. */ -#define IW_EVENT_CAPA_BASE(cmd) ((cmd >= SIOCIWFIRSTPRIV) ? \ - (cmd - SIOCIWFIRSTPRIV + 0x60) : \ - (cmd - SIOCIWFIRST)) -#define IW_EVENT_CAPA_INDEX(cmd) (IW_EVENT_CAPA_BASE(cmd) >> 5) -#define IW_EVENT_CAPA_MASK(cmd) (1 << (IW_EVENT_CAPA_BASE(cmd) & 0x1F)) -/* Event capability constants - event autogenerated by the kernel - * This list is valid for most 802.11 devices, customise as needed... */ -#define IW_EVENT_CAPA_K_0 (IW_EVENT_CAPA_MASK(0x8B04) | \ - IW_EVENT_CAPA_MASK(0x8B06) | \ - IW_EVENT_CAPA_MASK(0x8B1A)) -#define IW_EVENT_CAPA_K_1 (IW_EVENT_CAPA_MASK(0x8B2A)) -/* "Easy" macro to set events in iw_range (less efficient) */ -#define IW_EVENT_CAPA_SET(event_capa, cmd) (event_capa[IW_EVENT_CAPA_INDEX(cmd)] |= IW_EVENT_CAPA_MASK(cmd)) -#define IW_EVENT_CAPA_SET_KERNEL(event_capa) {event_capa[0] |= IW_EVENT_CAPA_K_0; event_capa[1] |= IW_EVENT_CAPA_K_1; } - - -/****************************** TYPES ******************************/ - -/* --------------------------- SUBTYPES --------------------------- */ -/* - * Generic format for most parameters that fit in an int - */ -struct iw_param -{ - __s32 value; /* The value of the parameter itself */ - __u8 fixed; /* Hardware should not use auto select */ - __u8 disabled; /* Disable the feature */ - __u16 flags; /* Various specifc flags (if any) */ -}; - -/* - * For all data larger than 16 octets, we need to use a - * pointer to memory allocated in user space. - */ -struct iw_point -{ - void __user *pointer; /* Pointer to the data (in user space) */ - __u16 length; /* number of fields or size in bytes */ - __u16 flags; /* Optional params */ -}; - -#ifdef __KERNEL__ -#ifdef CONFIG_COMPAT - -#include - -struct compat_iw_point { - compat_caddr_t pointer; - __u16 length; - __u16 flags; -}; -#endif -#endif - -/* - * A frequency - * For numbers lower than 10^9, we encode the number in 'm' and - * set 'e' to 0 - * For number greater than 10^9, we divide it by the lowest power - * of 10 to get 'm' lower than 10^9, with 'm'= f / (10^'e')... - * The power of 10 is in 'e', the result of the division is in 'm'. - */ -struct iw_freq -{ - __s32 m; /* Mantissa */ - __s16 e; /* Exponent */ - __u8 i; /* List index (when in range struct) */ - __u8 flags; /* Flags (fixed/auto) */ -}; - -/* - * Quality of the link - */ -struct iw_quality -{ - __u8 qual; /* link quality (%retries, SNR, - %missed beacons or better...) */ - __u8 level; /* signal level (dBm) */ - __u8 noise; /* noise level (dBm) */ - __u8 updated; /* Flags to know if updated */ -}; - -/* - * Packet discarded in the wireless adapter due to - * "wireless" specific problems... - * Note : the list of counter and statistics in net_device_stats - * is already pretty exhaustive, and you should use that first. - * This is only additional stats... - */ -struct iw_discarded -{ - __u32 nwid; /* Rx : Wrong nwid/essid */ - __u32 code; /* Rx : Unable to code/decode (WEP) */ - __u32 fragment; /* Rx : Can't perform MAC reassembly */ - __u32 retries; /* Tx : Max MAC retries num reached */ - __u32 misc; /* Others cases */ -}; - -/* - * Packet/Time period missed in the wireless adapter due to - * "wireless" specific problems... - */ -struct iw_missed -{ - __u32 beacon; /* Missed beacons/superframe */ -}; - -/* - * Quality range (for spy threshold) - */ -struct iw_thrspy -{ - struct sockaddr addr; /* Source address (hw/mac) */ - struct iw_quality qual; /* Quality of the link */ - struct iw_quality low; /* Low threshold */ - struct iw_quality high; /* High threshold */ -}; - -/* - * Optional data for scan request - * - * Note: these optional parameters are controlling parameters for the - * scanning behavior, these do not apply to getting scan results - * (SIOCGIWSCAN). Drivers are expected to keep a local BSS table and - * provide a merged results with all BSSes even if the previous scan - * request limited scanning to a subset, e.g., by specifying an SSID. - * Especially, scan results are required to include an entry for the - * current BSS if the driver is in Managed mode and associated with an AP. - */ -struct iw_scan_req -{ - __u8 scan_type; /* IW_SCAN_TYPE_{ACTIVE,PASSIVE} */ - __u8 essid_len; - __u8 num_channels; /* num entries in channel_list; - * 0 = scan all allowed channels */ - __u8 flags; /* reserved as padding; use zero, this may - * be used in the future for adding flags - * to request different scan behavior */ - struct sockaddr bssid; /* ff:ff:ff:ff:ff:ff for broadcast BSSID or - * individual address of a specific BSS */ - - /* - * Use this ESSID if IW_SCAN_THIS_ESSID flag is used instead of using - * the current ESSID. This allows scan requests for specific ESSID - * without having to change the current ESSID and potentially breaking - * the current association. - */ - __u8 essid[IW_ESSID_MAX_SIZE]; - - /* - * Optional parameters for changing the default scanning behavior. - * These are based on the MLME-SCAN.request from IEEE Std 802.11. - * TU is 1.024 ms. If these are set to 0, driver is expected to use - * reasonable default values. min_channel_time defines the time that - * will be used to wait for the first reply on each channel. If no - * replies are received, next channel will be scanned after this. If - * replies are received, total time waited on the channel is defined by - * max_channel_time. - */ - __u32 min_channel_time; /* in TU */ - __u32 max_channel_time; /* in TU */ - - struct iw_freq channel_list[IW_MAX_FREQUENCIES]; -}; - -/* ------------------------- WPA SUPPORT ------------------------- */ - -/* - * Extended data structure for get/set encoding (this is used with - * SIOCSIWENCODEEXT/SIOCGIWENCODEEXT. struct iw_point and IW_ENCODE_* - * flags are used in the same way as with SIOCSIWENCODE/SIOCGIWENCODE and - * only the data contents changes (key data -> this structure, including - * key data). - * - * If the new key is the first group key, it will be set as the default - * TX key. Otherwise, default TX key index is only changed if - * IW_ENCODE_EXT_SET_TX_KEY flag is set. - * - * Key will be changed with SIOCSIWENCODEEXT in all cases except for - * special "change TX key index" operation which is indicated by setting - * key_len = 0 and ext_flags |= IW_ENCODE_EXT_SET_TX_KEY. - * - * tx_seq/rx_seq are only used when respective - * IW_ENCODE_EXT_{TX,RX}_SEQ_VALID flag is set in ext_flags. Normal - * TKIP/CCMP operation is to set RX seq with SIOCSIWENCODEEXT and start - * TX seq from zero whenever key is changed. SIOCGIWENCODEEXT is normally - * used only by an Authenticator (AP or an IBSS station) to get the - * current TX sequence number. Using TX_SEQ_VALID for SIOCSIWENCODEEXT and - * RX_SEQ_VALID for SIOCGIWENCODEEXT are optional, but can be useful for - * debugging/testing. - */ -struct iw_encode_ext -{ - __u32 ext_flags; /* IW_ENCODE_EXT_* */ - __u8 tx_seq[IW_ENCODE_SEQ_MAX_SIZE]; /* LSB first */ - __u8 rx_seq[IW_ENCODE_SEQ_MAX_SIZE]; /* LSB first */ - struct sockaddr addr; /* ff:ff:ff:ff:ff:ff for broadcast/multicast - * (group) keys or unicast address for - * individual keys */ - __u16 alg; /* IW_ENCODE_ALG_* */ - __u16 key_len; - __u8 key[0]; -}; - -/* SIOCSIWMLME data */ -struct iw_mlme -{ - __u16 cmd; /* IW_MLME_* */ - __u16 reason_code; - struct sockaddr addr; -}; - -/* SIOCSIWPMKSA data */ -#define IW_PMKSA_ADD 1 -#define IW_PMKSA_REMOVE 2 -#define IW_PMKSA_FLUSH 3 - -#define IW_PMKID_LEN 16 - -struct iw_pmksa -{ - __u32 cmd; /* IW_PMKSA_* */ - struct sockaddr bssid; - __u8 pmkid[IW_PMKID_LEN]; -}; - -/* IWEVMICHAELMICFAILURE data */ -struct iw_michaelmicfailure -{ - __u32 flags; - struct sockaddr src_addr; - __u8 tsc[IW_ENCODE_SEQ_MAX_SIZE]; /* LSB first */ -}; - -/* IWEVPMKIDCAND data */ -#define IW_PMKID_CAND_PREAUTH 0x00000001 /* RNS pre-authentication enabled */ -struct iw_pmkid_cand -{ - __u32 flags; /* IW_PMKID_CAND_* */ - __u32 index; /* the smaller the index, the higher the - * priority */ - struct sockaddr bssid; -}; - -/* ------------------------ WIRELESS STATS ------------------------ */ -/* - * Wireless statistics (used for /proc/net/wireless) - */ -struct iw_statistics -{ - __u16 status; /* Status - * - device dependent for now */ - - struct iw_quality qual; /* Quality of the link - * (instant/mean/max) */ - struct iw_discarded discard; /* Packet discarded counts */ - struct iw_missed miss; /* Packet missed counts */ -}; - -/* ------------------------ IOCTL REQUEST ------------------------ */ -/* - * This structure defines the payload of an ioctl, and is used - * below. - * - * Note that this structure should fit on the memory footprint - * of iwreq (which is the same as ifreq), which mean a max size of - * 16 octets = 128 bits. Warning, pointers might be 64 bits wide... - * You should check this when increasing the structures defined - * above in this file... - */ -union iwreq_data -{ - /* Config - generic */ - char name[IFNAMSIZ]; - /* Name : used to verify the presence of wireless extensions. - * Name of the protocol/provider... */ - - struct iw_point essid; /* Extended network name */ - struct iw_param nwid; /* network id (or domain - the cell) */ - struct iw_freq freq; /* frequency or channel : - * 0-1000 = channel - * > 1000 = frequency in Hz */ - - struct iw_param sens; /* signal level threshold */ - struct iw_param bitrate; /* default bit rate */ - struct iw_param txpower; /* default transmit power */ - struct iw_param rts; /* RTS threshold threshold */ - struct iw_param frag; /* Fragmentation threshold */ - __u32 mode; /* Operation mode */ - struct iw_param retry; /* Retry limits & lifetime */ - - struct iw_point encoding; /* Encoding stuff : tokens */ - struct iw_param power; /* PM duration/timeout */ - struct iw_quality qual; /* Quality part of statistics */ - - struct sockaddr ap_addr; /* Access point address */ - struct sockaddr addr; /* Destination address (hw/mac) */ - - struct iw_param param; /* Other small parameters */ - struct iw_point data; /* Other large parameters */ -}; - -/* - * The structure to exchange data for ioctl. - * This structure is the same as 'struct ifreq', but (re)defined for - * convenience... - * Do I need to remind you about structure size (32 octets) ? - */ -struct iwreq -{ - union - { - char ifrn_name[IFNAMSIZ]; /* if name, e.g. "eth0" */ - } ifr_ifrn; - - /* Data part (defined just above) */ - union iwreq_data u; -}; - -/* -------------------------- IOCTL DATA -------------------------- */ -/* - * For those ioctl which want to exchange mode data that what could - * fit in the above structure... - */ - -/* - * Range of parameters - */ - -struct iw_range -{ - /* Informative stuff (to choose between different interface) */ - __u32 throughput; /* To give an idea... */ - /* In theory this value should be the maximum benchmarked - * TCP/IP throughput, because with most of these devices the - * bit rate is meaningless (overhead an co) to estimate how - * fast the connection will go and pick the fastest one. - * I suggest people to play with Netperf or any benchmark... - */ - - /* NWID (or domain id) */ - __u32 min_nwid; /* Minimal NWID we are able to set */ - __u32 max_nwid; /* Maximal NWID we are able to set */ - - /* Old Frequency (backward compat - moved lower ) */ - __u16 old_num_channels; - __u8 old_num_frequency; - - /* Scan capabilities */ - __u8 scan_capa; /* IW_SCAN_CAPA_* bit field */ - - /* Wireless event capability bitmasks */ - __u32 event_capa[6]; - - /* signal level threshold range */ - __s32 sensitivity; - - /* Quality of link & SNR stuff */ - /* Quality range (link, level, noise) - * If the quality is absolute, it will be in the range [0 ; max_qual], - * if the quality is dBm, it will be in the range [max_qual ; 0]. - * Don't forget that we use 8 bit arithmetics... */ - struct iw_quality max_qual; /* Quality of the link */ - /* This should contain the average/typical values of the quality - * indicator. This should be the threshold between a "good" and - * a "bad" link (example : monitor going from green to orange). - * Currently, user space apps like quality monitors don't have any - * way to calibrate the measurement. With this, they can split - * the range between 0 and max_qual in different quality level - * (using a geometric subdivision centered on the average). - * I expect that people doing the user space apps will feedback - * us on which value we need to put in each driver... */ - struct iw_quality avg_qual; /* Quality of the link */ - - /* Rates */ - __u8 num_bitrates; /* Number of entries in the list */ - __s32 bitrate[IW_MAX_BITRATES]; /* list, in bps */ - - /* RTS threshold */ - __s32 min_rts; /* Minimal RTS threshold */ - __s32 max_rts; /* Maximal RTS threshold */ - - /* Frag threshold */ - __s32 min_frag; /* Minimal frag threshold */ - __s32 max_frag; /* Maximal frag threshold */ - - /* Power Management duration & timeout */ - __s32 min_pmp; /* Minimal PM period */ - __s32 max_pmp; /* Maximal PM period */ - __s32 min_pmt; /* Minimal PM timeout */ - __s32 max_pmt; /* Maximal PM timeout */ - __u16 pmp_flags; /* How to decode max/min PM period */ - __u16 pmt_flags; /* How to decode max/min PM timeout */ - __u16 pm_capa; /* What PM options are supported */ - - /* Encoder stuff */ - __u16 encoding_size[IW_MAX_ENCODING_SIZES]; /* Different token sizes */ - __u8 num_encoding_sizes; /* Number of entry in the list */ - __u8 max_encoding_tokens; /* Max number of tokens */ - /* For drivers that need a "login/passwd" form */ - __u8 encoding_login_index; /* token index for login token */ - - /* Transmit power */ - __u16 txpower_capa; /* What options are supported */ - __u8 num_txpower; /* Number of entries in the list */ - __s32 txpower[IW_MAX_TXPOWER]; /* list, in bps */ - - /* Wireless Extension version info */ - __u8 we_version_compiled; /* Must be WIRELESS_EXT */ - __u8 we_version_source; /* Last update of source */ - - /* Retry limits and lifetime */ - __u16 retry_capa; /* What retry options are supported */ - __u16 retry_flags; /* How to decode max/min retry limit */ - __u16 r_time_flags; /* How to decode max/min retry life */ - __s32 min_retry; /* Minimal number of retries */ - __s32 max_retry; /* Maximal number of retries */ - __s32 min_r_time; /* Minimal retry lifetime */ - __s32 max_r_time; /* Maximal retry lifetime */ - - /* Frequency */ - __u16 num_channels; /* Number of channels [0; num - 1] */ - __u8 num_frequency; /* Number of entry in the list */ - struct iw_freq freq[IW_MAX_FREQUENCIES]; /* list */ - /* Note : this frequency list doesn't need to fit channel numbers, - * because each entry contain its channel index */ - - __u32 enc_capa; /* IW_ENC_CAPA_* bit field */ -}; - -/* - * Private ioctl interface information - */ - -struct iw_priv_args -{ - __u32 cmd; /* Number of the ioctl to issue */ - __u16 set_args; /* Type and number of args */ - __u16 get_args; /* Type and number of args */ - char name[IFNAMSIZ]; /* Name of the extension */ -}; - -/* ----------------------- WIRELESS EVENTS ----------------------- */ -/* - * Wireless events are carried through the rtnetlink socket to user - * space. They are encapsulated in the IFLA_WIRELESS field of - * a RTM_NEWLINK message. - */ - -/* - * A Wireless Event. Contains basically the same data as the ioctl... - */ -struct iw_event -{ - __u16 len; /* Real length of this stuff */ - __u16 cmd; /* Wireless IOCTL */ - union iwreq_data u; /* IOCTL fixed payload */ -}; - -/* Size of the Event prefix (including padding and alignement junk) */ -#define IW_EV_LCP_LEN (sizeof(struct iw_event) - sizeof(union iwreq_data)) -/* Size of the various events */ -#define IW_EV_CHAR_LEN (IW_EV_LCP_LEN + IFNAMSIZ) -#define IW_EV_UINT_LEN (IW_EV_LCP_LEN + sizeof(__u32)) -#define IW_EV_FREQ_LEN (IW_EV_LCP_LEN + sizeof(struct iw_freq)) -#define IW_EV_PARAM_LEN (IW_EV_LCP_LEN + sizeof(struct iw_param)) -#define IW_EV_ADDR_LEN (IW_EV_LCP_LEN + sizeof(struct sockaddr)) -#define IW_EV_QUAL_LEN (IW_EV_LCP_LEN + sizeof(struct iw_quality)) - -/* iw_point events are special. First, the payload (extra data) come at - * the end of the event, so they are bigger than IW_EV_POINT_LEN. Second, - * we omit the pointer, so start at an offset. */ -#define IW_EV_POINT_OFF (((char *) &(((struct iw_point *) NULL)->length)) - \ - (char *) NULL) -#define IW_EV_POINT_LEN (IW_EV_LCP_LEN + sizeof(struct iw_point) - \ - IW_EV_POINT_OFF) - -#ifdef __KERNEL__ -#ifdef CONFIG_COMPAT -struct __compat_iw_event { - __u16 len; /* Real length of this stuff */ - __u16 cmd; /* Wireless IOCTL */ - compat_caddr_t pointer; -}; -#define IW_EV_COMPAT_LCP_LEN offsetof(struct __compat_iw_event, pointer) -#define IW_EV_COMPAT_POINT_OFF offsetof(struct compat_iw_point, length) - -/* Size of the various events for compat */ -#define IW_EV_COMPAT_CHAR_LEN (IW_EV_COMPAT_LCP_LEN + IFNAMSIZ) -#define IW_EV_COMPAT_UINT_LEN (IW_EV_COMPAT_LCP_LEN + sizeof(__u32)) -#define IW_EV_COMPAT_FREQ_LEN (IW_EV_COMPAT_LCP_LEN + sizeof(struct iw_freq)) -#define IW_EV_COMPAT_PARAM_LEN (IW_EV_COMPAT_LCP_LEN + sizeof(struct iw_param)) -#define IW_EV_COMPAT_ADDR_LEN (IW_EV_COMPAT_LCP_LEN + sizeof(struct sockaddr)) -#define IW_EV_COMPAT_QUAL_LEN (IW_EV_COMPAT_LCP_LEN + sizeof(struct iw_quality)) -#define IW_EV_COMPAT_POINT_LEN \ - (IW_EV_COMPAT_LCP_LEN + sizeof(struct compat_iw_point) - \ - IW_EV_COMPAT_POINT_OFF) -#endif -#endif - -/* Size of the Event prefix when packed in stream */ -#define IW_EV_LCP_PK_LEN (4) -/* Size of the various events when packed in stream */ -#define IW_EV_CHAR_PK_LEN (IW_EV_LCP_PK_LEN + IFNAMSIZ) -#define IW_EV_UINT_PK_LEN (IW_EV_LCP_PK_LEN + sizeof(__u32)) -#define IW_EV_FREQ_PK_LEN (IW_EV_LCP_PK_LEN + sizeof(struct iw_freq)) -#define IW_EV_PARAM_PK_LEN (IW_EV_LCP_PK_LEN + sizeof(struct iw_param)) -#define IW_EV_ADDR_PK_LEN (IW_EV_LCP_PK_LEN + sizeof(struct sockaddr)) -#define IW_EV_QUAL_PK_LEN (IW_EV_LCP_PK_LEN + sizeof(struct iw_quality)) -#define IW_EV_POINT_PK_LEN (IW_EV_LCP_PK_LEN + 4) - -#endif /* _LINUX_WIRELESS_H */ diff --git a/openairITS/mac/DOT11/include/linux/wl12xx.h b/openairITS/mac/DOT11/include/linux/wl12xx.h deleted file mode 100644 index 0d6373195d..0000000000 --- a/openairITS/mac/DOT11/include/linux/wl12xx.h +++ /dev/null @@ -1,81 +0,0 @@ -/* - * This file is part of wl12xx - * - * Copyright (C) 2009 Nokia Corporation - * - * Contact: Luciano Coelho - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 2 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA - * 02110-1301 USA - * - */ - -#ifndef _LINUX_WL12XX_H -#define _LINUX_WL12XX_H - -/* Reference clock values */ -enum { - WL12XX_REFCLOCK_19 = 0, /* 19.2 MHz */ - WL12XX_REFCLOCK_26 = 1, /* 26 MHz */ - WL12XX_REFCLOCK_38 = 2, /* 38.4 MHz */ - WL12XX_REFCLOCK_52 = 3, /* 52 MHz */ - WL12XX_REFCLOCK_38_XTAL = 4, /* 38.4 MHz, XTAL */ - WL12XX_REFCLOCK_26_XTAL = 5, /* 26 MHz, XTAL */ -}; - -/* TCXO clock values */ -enum { - WL12XX_TCXOCLOCK_19_2 = 0, /* 19.2MHz */ - WL12XX_TCXOCLOCK_26 = 1, /* 26 MHz */ - WL12XX_TCXOCLOCK_38_4 = 2, /* 38.4MHz */ - WL12XX_TCXOCLOCK_52 = 3, /* 52 MHz */ - WL12XX_TCXOCLOCK_16_368 = 4, /* 16.368 MHz */ - WL12XX_TCXOCLOCK_32_736 = 5, /* 32.736 MHz */ - WL12XX_TCXOCLOCK_16_8 = 6, /* 16.8 MHz */ - WL12XX_TCXOCLOCK_33_6 = 7, /* 33.6 MHz */ -}; - -struct wl12xx_platform_data { - void (*set_power)(bool enable); - /* SDIO only: IRQ number if WLAN_IRQ line is used, 0 for SDIO IRQs */ - int irq; - bool use_eeprom; - int board_ref_clock; - int board_tcxo_clock; - unsigned long platform_quirks; - bool pwr_in_suspend; - - struct wl1271_if_operations *ops; -}; - -/* Platform does not support level trigger interrupts */ -#define WL12XX_PLATFORM_QUIRK_EDGE_IRQ BIT(0) - -#ifdef CONFIG_WL12XX_PLATFORM_DATA - -int wl12xx_set_platform_data(const struct wl12xx_platform_data *data); - -#else - -static inline -int wl12xx_set_platform_data(const struct wl12xx_platform_data *data) -{ - return -ENOSYS; -} - -#endif - -struct wl12xx_platform_data *wl12xx_get_platform_data(void); - -#endif diff --git a/openairITS/mac/DOT11/include/net/cfg80211-wext.h b/openairITS/mac/DOT11/include/net/cfg80211-wext.h deleted file mode 100644 index 25baddc4fb..0000000000 --- a/openairITS/mac/DOT11/include/net/cfg80211-wext.h +++ /dev/null @@ -1,55 +0,0 @@ -#ifndef __NET_CFG80211_WEXT_H -#define __NET_CFG80211_WEXT_H -/* - * 802.11 device and configuration interface -- wext handlers - * - * Copyright 2006-2010 Johannes Berg - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - */ - -#include -#include -#include - -/* - * Temporary wext handlers & helper functions - * - * These are used only by drivers that aren't yet fully - * converted to cfg80211. - */ -int cfg80211_wext_giwname(struct net_device *dev, - struct iw_request_info *info, - char *name, char *extra); -int cfg80211_wext_siwmode(struct net_device *dev, struct iw_request_info *info, - u32 *mode, char *extra); -int cfg80211_wext_giwmode(struct net_device *dev, struct iw_request_info *info, - u32 *mode, char *extra); -int cfg80211_wext_siwscan(struct net_device *dev, - struct iw_request_info *info, - union iwreq_data *wrqu, char *extra); -int cfg80211_wext_giwscan(struct net_device *dev, - struct iw_request_info *info, - struct iw_point *data, char *extra); -int cfg80211_wext_giwrange(struct net_device *dev, - struct iw_request_info *info, - struct iw_point *data, char *extra); -int cfg80211_wext_siwrts(struct net_device *dev, - struct iw_request_info *info, - struct iw_param *rts, char *extra); -int cfg80211_wext_giwrts(struct net_device *dev, - struct iw_request_info *info, - struct iw_param *rts, char *extra); -int cfg80211_wext_siwfrag(struct net_device *dev, - struct iw_request_info *info, - struct iw_param *frag, char *extra); -int cfg80211_wext_giwfrag(struct net_device *dev, - struct iw_request_info *info, - struct iw_param *frag, char *extra); -int cfg80211_wext_giwretry(struct net_device *dev, - struct iw_request_info *info, - struct iw_param *retry, char *extra); - -#endif /* __NET_CFG80211_WEXT_H */ diff --git a/openairITS/mac/DOT11/include/net/cfg80211.h b/openairITS/mac/DOT11/include/net/cfg80211.h deleted file mode 100644 index d597dcaa5e..0000000000 --- a/openairITS/mac/DOT11/include/net/cfg80211.h +++ /dev/null @@ -1,3419 +0,0 @@ -#ifndef __NET_CFG80211_H -#define __NET_CFG80211_H -/* - * 802.11 device and configuration interface - * - * Copyright 2006-2010 Johannes Berg - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -/** - * DOC: Introduction - * - * cfg80211 is the configuration API for 802.11 devices in Linux. It bridges - * userspace and drivers, and offers some utility functionality associated - * with 802.11. cfg80211 must, directly or indirectly via mac80211, be used - * by all modern wireless drivers in Linux, so that they offer a consistent - * API through nl80211. For backward compatibility, cfg80211 also offers - * wireless extensions to userspace, but hides them from drivers completely. - * - * Additionally, cfg80211 contains code to help enforce regulatory spectrum - * use restrictions. - */ - - -/** - * DOC: Device registration - * - * In order for a driver to use cfg80211, it must register the hardware device - * with cfg80211. This happens through a number of hardware capability structs - * described below. - * - * The fundamental structure for each device is the 'wiphy', of which each - * instance describes a physical wireless device connected to the system. Each - * such wiphy can have zero, one, or many virtual interfaces associated with - * it, which need to be identified as such by pointing the network interface's - * @ieee80211_ptr pointer to a &struct wireless_dev which further describes - * the wireless part of the interface, normally this struct is embedded in the - * network interface's private data area. Drivers can optionally allow creating - * or destroying virtual interfaces on the fly, but without at least one or the - * ability to create some the wireless device isn't useful. - * - * Each wiphy structure contains device capability information, and also has - * a pointer to the various operations the driver offers. The definitions and - * structures here describe these capabilities in detail. - */ - -/* - * wireless hardware capability structures - */ - -/** - * enum ieee80211_band - supported frequency bands - * - * The bands are assigned this way because the supported - * bitrates differ in these bands. - * - * @IEEE80211_BAND_2GHZ: 2.4GHz ISM band - * @IEEE80211_BAND_5GHZ: around 5GHz band (4.9-5.7) - * @IEEE80211_BAND_5_9GHZ: around the ITS 5.9GHz band (5.875GHz - 5.905GHz) - * @IEEE80211_BAND_0_8GHZ: around 800MHz band - * @IEEE80211_NUM_BANDS: number of defined bands - */ -enum ieee80211_band { - IEEE80211_BAND_2GHZ = NL80211_BAND_2GHZ, - IEEE80211_BAND_5GHZ = NL80211_BAND_5GHZ, - IEEE80211_BAND_5_9GHZ = NL80211_BAND_5_9GHZ, - IEEE80211_BAND_0_8GHZ = NL80211_BAND_0_8GHZ, - - /* keep last */ - IEEE80211_NUM_BANDS -}; - -/** - * enum ieee80211_channel_flags - channel flags - * - * Channel flags set by the regulatory control code. - * - * @IEEE80211_CHAN_DISABLED: This channel is disabled. - * @IEEE80211_CHAN_PASSIVE_SCAN: Only passive scanning is permitted - * on this channel. - * @IEEE80211_CHAN_NO_IBSS: IBSS is not allowed on this channel. - * @IEEE80211_CHAN_RADAR: Radar detection is required on this channel. - * @IEEE80211_CHAN_NO_HT40PLUS: extension channel above this channel - * is not permitted. - * @IEEE80211_CHAN_NO_HT40MINUS: extension channel below this channel - * is not permitted. - */ -enum ieee80211_channel_flags { - IEEE80211_CHAN_DISABLED = 1<<0, - IEEE80211_CHAN_PASSIVE_SCAN = 1<<1, - IEEE80211_CHAN_NO_IBSS = 1<<2, - IEEE80211_CHAN_RADAR = 1<<3, - IEEE80211_CHAN_NO_HT40PLUS = 1<<4, - IEEE80211_CHAN_NO_HT40MINUS = 1<<5, -}; - -#define IEEE80211_CHAN_NO_HT40 \ - (IEEE80211_CHAN_NO_HT40PLUS | IEEE80211_CHAN_NO_HT40MINUS) - -/** - * struct ieee80211_channel - channel definition - * - * This structure describes a single channel for use - * with cfg80211. - * - * @center_freq: center frequency in MHz - * @hw_value: hardware-specific value for the channel - * @flags: channel flags from &enum ieee80211_channel_flags. - * @orig_flags: channel flags at registration time, used by regulatory - * code to support devices with additional restrictions - * @band: band this channel belongs to. - * @max_antenna_gain: maximum antenna gain in dBi - * @max_power: maximum transmission power (in dBm) - * @max_reg_power: maximum regulatory transmission power (in dBm) - * @beacon_found: helper to regulatory code to indicate when a beacon - * has been found on this channel. Use regulatory_hint_found_beacon() - * to enable this, this is useful only on 5 GHz band. - * @orig_mag: internal use - * @orig_mpwr: internal use - */ -struct ieee80211_channel { - enum ieee80211_band band; - u16 center_freq; - u16 hw_value; - u32 flags; - int max_antenna_gain; - int max_power; - int max_reg_power; - bool beacon_found; - u32 orig_flags; - int orig_mag, orig_mpwr; -}; - -/** - * enum ieee80211_rate_flags - rate flags - * - * Hardware/specification flags for rates. These are structured - * in a way that allows using the same bitrate structure for - * different bands/PHY modes. - * - * @IEEE80211_RATE_SHORT_PREAMBLE: Hardware can send with short - * preamble on this bitrate; only relevant in 2.4GHz band and - * with CCK rates. - * @IEEE80211_RATE_MANDATORY_A: This bitrate is a mandatory rate - * when used with 802.11a (on the 5 GHz band); filled by the - * core code when registering the wiphy. - * @IEEE80211_RATE_MANDATORY_B: This bitrate is a mandatory rate - * when used with 802.11b (on the 2.4 GHz band); filled by the - * core code when registering the wiphy. - * @IEEE80211_RATE_MANDATORY_G: This bitrate is a mandatory rate - * when used with 802.11g (on the 2.4 GHz band); filled by the - * core code when registering the wiphy. - * @IEEE80211_RATE_MANDATORY_P: This bitrate is a mandatory rate - * when used with 802.11p (on the 5.9 GHz and 800MHz bands); filled by the - * core code when registering the wiphy. - * @IEEE80211_RATE_ERP_G: This is an ERP rate in 802.11g mode. - * @IEEE80211_RATE_MANDATORY_P: This bitrate is a mandatory rate - * when used with 802.11p (on the 5.9 GHz and 800MHz bands); filled by the - * core code when registering the wiphy. - */ -/* - * [PLATA] added a new mandatory rate for 802.11p mode - */ -enum ieee80211_rate_flags { - IEEE80211_RATE_SHORT_PREAMBLE = 1<<0, - IEEE80211_RATE_MANDATORY_A = 1<<1, - IEEE80211_RATE_MANDATORY_B = 1<<2, - IEEE80211_RATE_MANDATORY_G = 1<<3, - IEEE80211_RATE_ERP_G = 1<<4, - IEEE80211_RATE_MANDATORY_P = 1<<5, -}; - -/** - * struct ieee80211_rate - bitrate definition - * - * This structure describes a bitrate that an 802.11 PHY can - * operate with. The two values @hw_value and @hw_value_short - * are only for driver use when pointers to this structure are - * passed around. - * - * @flags: rate-specific flags - * @bitrate: bitrate in units of 100 Kbps - * @hw_value: driver/hardware value for this rate - * @hw_value_short: driver/hardware value for this rate when - * short preamble is used - */ -struct ieee80211_rate { - u32 flags; - u16 bitrate; - u16 hw_value, hw_value_short; -}; - -/** - * struct ieee80211_sta_ht_cap - STA's HT capabilities - * - * This structure describes most essential parameters needed - * to describe 802.11n HT capabilities for an STA. - * - * @ht_supported: is HT supported by the STA - * @cap: HT capabilities map as described in 802.11n spec - * @ampdu_factor: Maximum A-MPDU length factor - * @ampdu_density: Minimum A-MPDU spacing - * @mcs: Supported MCS rates - */ -struct ieee80211_sta_ht_cap { - u16 cap; /* use IEEE80211_HT_CAP_ */ - bool ht_supported; - u8 ampdu_factor; - u8 ampdu_density; - struct ieee80211_mcs_info mcs; -}; - -/** - * struct ieee80211_supported_band - frequency band definition - * - * This structure describes a frequency band a wiphy - * is able to operate in. - * - * @channels: Array of channels the hardware can operate in - * in this band. - * @band: the band this structure represents - * @n_channels: Number of channels in @channels - * @bitrates: Array of bitrates the hardware can operate with - * in this band. Must be sorted to give a valid "supported - * rates" IE, i.e. CCK rates first, then OFDM. - * @n_bitrates: Number of bitrates in @bitrates - * @ht_cap: HT capabilities in this band - */ -struct ieee80211_supported_band { - struct ieee80211_channel *channels; - struct ieee80211_rate *bitrates; - enum ieee80211_band band; - int n_channels; - int n_bitrates; - struct ieee80211_sta_ht_cap ht_cap; -}; - -/* - * Wireless hardware/device configuration structures and methods - */ - -/** - * DOC: Actions and configuration - * - * Each wireless device and each virtual interface offer a set of configuration - * operations and other actions that are invoked by userspace. Each of these - * actions is described in the operations structure, and the parameters these - * operations use are described separately. - * - * Additionally, some operations are asynchronous and expect to get status - * information via some functions that drivers need to call. - * - * Scanning and BSS list handling with its associated functionality is described - * in a separate chapter. - */ - -/** - * struct vif_params - describes virtual interface parameters - * @use_4addr: use 4-address frames - */ -struct vif_params { - int use_4addr; -}; - -/** - * struct key_params - key information - * - * Information about a key - * - * @key: key material - * @key_len: length of key material - * @cipher: cipher suite selector - * @seq: sequence counter (IV/PN) for TKIP and CCMP keys, only used - * with the get_key() callback, must be in little endian, - * length given by @seq_len. - * @seq_len: length of @seq. - */ -struct key_params { - u8 *key; - u8 *seq; - int key_len; - int seq_len; - u32 cipher; -}; - -/** - * enum survey_info_flags - survey information flags - * - * @SURVEY_INFO_NOISE_DBM: noise (in dBm) was filled in - * @SURVEY_INFO_IN_USE: channel is currently being used - * @SURVEY_INFO_CHANNEL_TIME: channel active time (in ms) was filled in - * @SURVEY_INFO_CHANNEL_TIME_BUSY: channel busy time was filled in - * @SURVEY_INFO_CHANNEL_TIME_EXT_BUSY: extension channel busy time was filled in - * @SURVEY_INFO_CHANNEL_TIME_RX: channel receive time was filled in - * @SURVEY_INFO_CHANNEL_TIME_TX: channel transmit time was filled in - * - * Used by the driver to indicate which info in &struct survey_info - * it has filled in during the get_survey(). - */ -enum survey_info_flags { - SURVEY_INFO_NOISE_DBM = 1<<0, - SURVEY_INFO_IN_USE = 1<<1, - SURVEY_INFO_CHANNEL_TIME = 1<<2, - SURVEY_INFO_CHANNEL_TIME_BUSY = 1<<3, - SURVEY_INFO_CHANNEL_TIME_EXT_BUSY = 1<<4, - SURVEY_INFO_CHANNEL_TIME_RX = 1<<5, - SURVEY_INFO_CHANNEL_TIME_TX = 1<<6, -}; - -/** - * struct survey_info - channel survey response - * - * @channel: the channel this survey record reports, mandatory - * @filled: bitflag of flags from &enum survey_info_flags - * @noise: channel noise in dBm. This and all following fields are - * optional - * @channel_time: amount of time in ms the radio spent on the channel - * @channel_time_busy: amount of time the primary channel was sensed busy - * @channel_time_ext_busy: amount of time the extension channel was sensed busy - * @channel_time_rx: amount of time the radio spent receiving data - * @channel_time_tx: amount of time the radio spent transmitting data - * - * Used by dump_survey() to report back per-channel survey information. - * - * This structure can later be expanded with things like - * channel duty cycle etc. - */ -struct survey_info { - struct ieee80211_channel *channel; - u64 channel_time; - u64 channel_time_busy; - u64 channel_time_ext_busy; - u64 channel_time_rx; - u64 channel_time_tx; - u32 filled; - s8 noise; -}; - -/** - * struct cfg80211_crypto_settings - Crypto settings - * @wpa_versions: indicates which, if any, WPA versions are enabled - * (from enum nl80211_wpa_versions) - * @cipher_group: group key cipher suite (or 0 if unset) - * @n_ciphers_pairwise: number of AP supported unicast ciphers - * @ciphers_pairwise: unicast key cipher suites - * @n_akm_suites: number of AKM suites - * @akm_suites: AKM suites - * @control_port: Whether user space controls IEEE 802.1X port, i.e., - * sets/clears %NL80211_STA_FLAG_AUTHORIZED. If true, the driver is - * required to assume that the port is unauthorized until authorized by - * user space. Otherwise, port is marked authorized by default. - * @control_port_ethertype: the control port protocol that should be - * allowed through even on unauthorized ports - * @control_port_no_encrypt: TRUE to prevent encryption of control port - * protocol frames. - */ -struct cfg80211_crypto_settings { - u32 wpa_versions; - u32 cipher_group; - int n_ciphers_pairwise; - u32 ciphers_pairwise[NL80211_MAX_NR_CIPHER_SUITES]; - int n_akm_suites; - u32 akm_suites[NL80211_MAX_NR_AKM_SUITES]; - bool control_port; - __be16 control_port_ethertype; - bool control_port_no_encrypt; -}; - -/** - * struct cfg80211_beacon_data - beacon data - * @head: head portion of beacon (before TIM IE) - * or %NULL if not changed - * @tail: tail portion of beacon (after TIM IE) - * or %NULL if not changed - * @head_len: length of @head - * @tail_len: length of @tail - * @beacon_ies: extra information element(s) to add into Beacon frames or %NULL - * @beacon_ies_len: length of beacon_ies in octets - * @proberesp_ies: extra information element(s) to add into Probe Response - * frames or %NULL - * @proberesp_ies_len: length of proberesp_ies in octets - * @assocresp_ies: extra information element(s) to add into (Re)Association - * Response frames or %NULL - * @assocresp_ies_len: length of assocresp_ies in octets - * @probe_resp_len: length of probe response template (@probe_resp) - * @probe_resp: probe response template (AP mode only) - */ -struct cfg80211_beacon_data { - const u8 *head, *tail; - const u8 *beacon_ies; - const u8 *proberesp_ies; - const u8 *assocresp_ies; - const u8 *probe_resp; - - size_t head_len, tail_len; - size_t beacon_ies_len; - size_t proberesp_ies_len; - size_t assocresp_ies_len; - size_t probe_resp_len; -}; - -/** - * struct cfg80211_ap_settings - AP configuration - * - * Used to configure an AP interface. - * - * @beacon: beacon data - * @beacon_interval: beacon interval - * @dtim_period: DTIM period - * @ssid: SSID to be used in the BSS (note: may be %NULL if not provided from - * user space) - * @ssid_len: length of @ssid - * @hidden_ssid: whether to hide the SSID in Beacon/Probe Response frames - * @crypto: crypto settings - * @privacy: the BSS uses privacy - * @auth_type: Authentication type (algorithm) - * @inactivity_timeout: time in seconds to determine station's inactivity. - */ -struct cfg80211_ap_settings { - struct cfg80211_beacon_data beacon; - - int beacon_interval, dtim_period; - const u8 *ssid; - size_t ssid_len; - enum nl80211_hidden_ssid hidden_ssid; - struct cfg80211_crypto_settings crypto; - bool privacy; - enum nl80211_auth_type auth_type; - int inactivity_timeout; -}; - -/** - * enum plink_action - actions to perform in mesh peers - * - * @PLINK_ACTION_INVALID: action 0 is reserved - * @PLINK_ACTION_OPEN: start mesh peer link establishment - * @PLINK_ACTION_BLOCK: block traffic from this mesh peer - */ -enum plink_actions { - PLINK_ACTION_INVALID, - PLINK_ACTION_OPEN, - PLINK_ACTION_BLOCK, -}; - -/** - * enum station_parameters_apply_mask - station parameter values to apply - * @STATION_PARAM_APPLY_UAPSD: apply new uAPSD parameters (uapsd_queues, max_sp) - * - * Not all station parameters have in-band "no change" signalling, - * for those that don't these flags will are used. - */ -enum station_parameters_apply_mask { - STATION_PARAM_APPLY_UAPSD = BIT(0), -}; - -/** - * struct station_parameters - station parameters - * - * Used to change and create a new station. - * - * @vlan: vlan interface station should belong to - * @supported_rates: supported rates in IEEE 802.11 format - * (or NULL for no change) - * @supported_rates_len: number of supported rates - * @sta_flags_mask: station flags that changed - * (bitmask of BIT(NL80211_STA_FLAG_...)) - * @sta_flags_set: station flags values - * (bitmask of BIT(NL80211_STA_FLAG_...)) - * @listen_interval: listen interval or -1 for no change - * @aid: AID or zero for no change - * @plink_action: plink action to take - * @plink_state: set the peer link state for a station - * @ht_capa: HT capabilities of station - * @uapsd_queues: bitmap of queues configured for uapsd. same format - * as the AC bitmap in the QoS info field - * @max_sp: max Service Period. same format as the MAX_SP in the - * QoS info field (but already shifted down) - * @sta_modify_mask: bitmap indicating which parameters changed - * (for those that don't have a natural "no change" value), - * see &enum station_parameters_apply_mask - */ -struct station_parameters { - u8 *supported_rates; - struct net_device *vlan; - u32 sta_flags_mask, sta_flags_set; - u32 sta_modify_mask; - int listen_interval; - u16 aid; - u8 supported_rates_len; - u8 plink_action; - u8 plink_state; - struct ieee80211_ht_cap *ht_capa; - u8 uapsd_queues; - u8 max_sp; -}; - -/** - * enum station_info_flags - station information flags - * - * Used by the driver to indicate which info in &struct station_info - * it has filled in during get_station() or dump_station(). - * - * @STATION_INFO_INACTIVE_TIME: @inactive_time filled - * @STATION_INFO_RX_BYTES: @rx_bytes filled - * @STATION_INFO_TX_BYTES: @tx_bytes filled - * @STATION_INFO_LLID: @llid filled - * @STATION_INFO_PLID: @plid filled - * @STATION_INFO_PLINK_STATE: @plink_state filled - * @STATION_INFO_SIGNAL: @signal filled - * @STATION_INFO_TX_BITRATE: @txrate fields are filled - * (tx_bitrate, tx_bitrate_flags and tx_bitrate_mcs) - * @STATION_INFO_RX_PACKETS: @rx_packets filled - * @STATION_INFO_TX_PACKETS: @tx_packets filled - * @STATION_INFO_TX_RETRIES: @tx_retries filled - * @STATION_INFO_TX_FAILED: @tx_failed filled - * @STATION_INFO_RX_DROP_MISC: @rx_dropped_misc filled - * @STATION_INFO_SIGNAL_AVG: @signal_avg filled - * @STATION_INFO_RX_BITRATE: @rxrate fields are filled - * @STATION_INFO_BSS_PARAM: @bss_param filled - * @STATION_INFO_CONNECTED_TIME: @connected_time filled - * @STATION_INFO_ASSOC_REQ_IES: @assoc_req_ies filled - * @STATION_INFO_STA_FLAGS: @sta_flags filled - * @STATION_INFO_BEACON_LOSS_COUNT: @beacon_loss_count filled - */ -enum station_info_flags { - STATION_INFO_INACTIVE_TIME = 1<<0, - STATION_INFO_RX_BYTES = 1<<1, - STATION_INFO_TX_BYTES = 1<<2, - STATION_INFO_LLID = 1<<3, - STATION_INFO_PLID = 1<<4, - STATION_INFO_PLINK_STATE = 1<<5, - STATION_INFO_SIGNAL = 1<<6, - STATION_INFO_TX_BITRATE = 1<<7, - STATION_INFO_RX_PACKETS = 1<<8, - STATION_INFO_TX_PACKETS = 1<<9, - STATION_INFO_TX_RETRIES = 1<<10, - STATION_INFO_TX_FAILED = 1<<11, - STATION_INFO_RX_DROP_MISC = 1<<12, - STATION_INFO_SIGNAL_AVG = 1<<13, - STATION_INFO_RX_BITRATE = 1<<14, - STATION_INFO_BSS_PARAM = 1<<15, - STATION_INFO_CONNECTED_TIME = 1<<16, - STATION_INFO_ASSOC_REQ_IES = 1<<17, - STATION_INFO_STA_FLAGS = 1<<18, - STATION_INFO_BEACON_LOSS_COUNT = 1<<19 -}; - -/** - * enum station_info_rate_flags - bitrate info flags - * - * Used by the driver to indicate the specific rate transmission - * type for 802.11n transmissions. - * - * @RATE_INFO_FLAGS_MCS: @tx_bitrate_mcs filled - * @RATE_INFO_FLAGS_40_MHZ_WIDTH: 40 Mhz width transmission - * @RATE_INFO_FLAGS_SHORT_GI: 400ns guard interval - */ -enum rate_info_flags { - RATE_INFO_FLAGS_MCS = 1<<0, - RATE_INFO_FLAGS_40_MHZ_WIDTH = 1<<1, - RATE_INFO_FLAGS_SHORT_GI = 1<<2, -}; - -/** - * struct rate_info - bitrate information - * - * Information about a receiving or transmitting bitrate - * - * @flags: bitflag of flags from &enum rate_info_flags - * @mcs: mcs index if struct describes a 802.11n bitrate - * @legacy: bitrate in 100kbit/s for 802.11abg - */ -struct rate_info { - u8 flags; - u8 mcs; - u16 legacy; -}; - -/** - * enum station_info_rate_flags - bitrate info flags - * - * Used by the driver to indicate the specific rate transmission - * type for 802.11n transmissions. - * - * @BSS_PARAM_FLAGS_CTS_PROT: whether CTS protection is enabled - * @BSS_PARAM_FLAGS_SHORT_PREAMBLE: whether short preamble is enabled - * @BSS_PARAM_FLAGS_SHORT_SLOT_TIME: whether short slot time is enabled - */ -enum bss_param_flags { - BSS_PARAM_FLAGS_CTS_PROT = 1<<0, - BSS_PARAM_FLAGS_SHORT_PREAMBLE = 1<<1, - BSS_PARAM_FLAGS_SHORT_SLOT_TIME = 1<<2, -}; - -/** - * struct sta_bss_parameters - BSS parameters for the attached station - * - * Information about the currently associated BSS - * - * @flags: bitflag of flags from &enum bss_param_flags - * @dtim_period: DTIM period for the BSS - * @beacon_interval: beacon interval - */ -struct sta_bss_parameters { - u8 flags; - u8 dtim_period; - u16 beacon_interval; -}; - -/** - * struct station_info - station information - * - * Station information filled by driver for get_station() and dump_station. - * - * @filled: bitflag of flags from &enum station_info_flags - * @connected_time: time(in secs) since a station is last connected - * @inactive_time: time since last station activity (tx/rx) in milliseconds - * @rx_bytes: bytes received from this station - * @tx_bytes: bytes transmitted to this station - * @llid: mesh local link id - * @plid: mesh peer link id - * @plink_state: mesh peer link state - * @signal: the signal strength, type depends on the wiphy's signal_type - NOTE: For CFG80211_SIGNAL_TYPE_MBM, value is expressed in _dBm_. - * @signal_avg: avg signal strength, type depends on the wiphy's signal_type - NOTE: For CFG80211_SIGNAL_TYPE_MBM, value is expressed in _dBm_. - * @txrate: current unicast bitrate from this station - * @rxrate: current unicast bitrate to this station - * @rx_packets: packets received from this station - * @tx_packets: packets transmitted to this station - * @tx_retries: cumulative retry counts - * @tx_failed: number of failed transmissions (retries exceeded, no ACK) - * @rx_dropped_misc: Dropped for un-specified reason. - * @bss_param: current BSS parameters - * @generation: generation number for nl80211 dumps. - * This number should increase every time the list of stations - * changes, i.e. when a station is added or removed, so that - * userspace can tell whether it got a consistent snapshot. - * @assoc_req_ies: IEs from (Re)Association Request. - * This is used only when in AP mode with drivers that do not use - * user space MLME/SME implementation. The information is provided for - * the cfg80211_new_sta() calls to notify user space of the IEs. - * @assoc_req_ies_len: Length of assoc_req_ies buffer in octets. - * @sta_flags: station flags mask & values - * @beacon_loss_count: Number of times beacon loss event has triggered. - */ -struct station_info { - u32 filled; - u32 connected_time; - u32 inactive_time; - u32 rx_bytes; - u32 tx_bytes; - u16 llid; - u16 plid; - u8 plink_state; - s8 signal; - s8 signal_avg; - struct rate_info txrate; - struct rate_info rxrate; - u32 rx_packets; - u32 tx_packets; - u32 tx_retries; - u32 tx_failed; - u32 rx_dropped_misc; - struct sta_bss_parameters bss_param; - struct nl80211_sta_flag_update sta_flags; - - int generation; - - const u8 *assoc_req_ies; - size_t assoc_req_ies_len; - - u32 beacon_loss_count; - - /* - * Note: Add a new enum station_info_flags value for each new field and - * use it to check which fields are initialized. - */ -}; - -/** - * enum monitor_flags - monitor flags - * - * Monitor interface configuration flags. Note that these must be the bits - * according to the nl80211 flags. - * - * @MONITOR_FLAG_FCSFAIL: pass frames with bad FCS - * @MONITOR_FLAG_PLCPFAIL: pass frames with bad PLCP - * @MONITOR_FLAG_CONTROL: pass control frames - * @MONITOR_FLAG_OTHER_BSS: disable BSSID filtering - * @MONITOR_FLAG_COOK_FRAMES: report frames after processing - */ -enum monitor_flags { - MONITOR_FLAG_FCSFAIL = 1<bss_priv_size bytes - */ -struct cfg80211_bss { - struct ieee80211_channel *channel; - - u8 bssid[ETH_ALEN]; - u64 tsf; - u16 beacon_interval; - u16 capability; - u8 *information_elements; - size_t len_information_elements; - u8 *beacon_ies; - size_t len_beacon_ies; - u8 *proberesp_ies; - size_t len_proberesp_ies; - - s32 signal; - - void (*free_priv)(struct cfg80211_bss *bss); - u8 priv[0] __attribute__((__aligned__(sizeof(void *)))); -}; - -/** - * ieee80211_bss_get_ie - find IE with given ID - * @bss: the bss to search - * @ie: the IE ID - * Returns %NULL if not found. - */ -const u8 *ieee80211_bss_get_ie(struct cfg80211_bss *bss, u8 ie); - - -/** - * struct cfg80211_auth_request - Authentication request data - * - * This structure provides information needed to complete IEEE 802.11 - * authentication. - * - * @bss: The BSS to authenticate with. - * @auth_type: Authentication type (algorithm) - * @ie: Extra IEs to add to Authentication frame or %NULL - * @ie_len: Length of ie buffer in octets - * @key_len: length of WEP key for shared key authentication - * @key_idx: index of WEP key for shared key authentication - * @key: WEP key for shared key authentication - */ -struct cfg80211_auth_request { - struct cfg80211_bss *bss; - const u8 *ie; - size_t ie_len; - enum nl80211_auth_type auth_type; - const u8 *key; - u8 key_len, key_idx; -}; - -/** - * enum cfg80211_assoc_req_flags - Over-ride default behaviour in association. - * - * @ASSOC_REQ_DISABLE_HT: Disable HT (802.11n) - */ -enum cfg80211_assoc_req_flags { - ASSOC_REQ_DISABLE_HT = BIT(0), -}; - -/** - * struct cfg80211_assoc_request - (Re)Association request data - * - * This structure provides information needed to complete IEEE 802.11 - * (re)association. - * @bss: The BSS to associate with. If the call is successful the driver - * is given a reference that it must release, normally via a call to - * cfg80211_send_rx_assoc(), or, if association timed out, with a - * call to cfg80211_put_bss() (in addition to calling - * cfg80211_send_assoc_timeout()) - * @ie: Extra IEs to add to (Re)Association Request frame or %NULL - * @ie_len: Length of ie buffer in octets - * @use_mfp: Use management frame protection (IEEE 802.11w) in this association - * @crypto: crypto settings - * @prev_bssid: previous BSSID, if not %NULL use reassociate frame - * @flags: See &enum cfg80211_assoc_req_flags - * @ht_capa: HT Capabilities over-rides. Values set in ht_capa_mask - * will be used in ht_capa. Un-supported values will be ignored. - * @ht_capa_mask: The bits of ht_capa which are to be used. - */ -struct cfg80211_assoc_request { - struct cfg80211_bss *bss; - const u8 *ie, *prev_bssid; - size_t ie_len; - struct cfg80211_crypto_settings crypto; - bool use_mfp; - u32 flags; - struct ieee80211_ht_cap ht_capa; - struct ieee80211_ht_cap ht_capa_mask; -}; - -/** - * struct cfg80211_deauth_request - Deauthentication request data - * - * This structure provides information needed to complete IEEE 802.11 - * deauthentication. - * - * @bssid: the BSSID of the BSS to deauthenticate from - * @ie: Extra IEs to add to Deauthentication frame or %NULL - * @ie_len: Length of ie buffer in octets - * @reason_code: The reason code for the deauthentication - */ -struct cfg80211_deauth_request { - const u8 *bssid; - const u8 *ie; - size_t ie_len; - u16 reason_code; -}; - -/** - * struct cfg80211_disassoc_request - Disassociation request data - * - * This structure provides information needed to complete IEEE 802.11 - * disassocation. - * - * @bss: the BSS to disassociate from - * @ie: Extra IEs to add to Disassociation frame or %NULL - * @ie_len: Length of ie buffer in octets - * @reason_code: The reason code for the disassociation - * @local_state_change: This is a request for a local state only, i.e., no - * Disassociation frame is to be transmitted. - */ -struct cfg80211_disassoc_request { - struct cfg80211_bss *bss; - const u8 *ie; - size_t ie_len; - u16 reason_code; - bool local_state_change; -}; - -/** - * struct cfg80211_ibss_params - IBSS parameters - * - * This structure defines the IBSS parameters for the join_ibss() - * method. - * - * @ssid: The SSID, will always be non-null. - * @ssid_len: The length of the SSID, will always be non-zero. - * @bssid: Fixed BSSID requested, maybe be %NULL, if set do not - * search for IBSSs with a different BSSID. - * @channel: The channel to use if no IBSS can be found to join. - * @channel_type: channel type (HT mode) - * @channel_fixed: The channel should be fixed -- do not search for - * IBSSs to join on other channels. - * @ie: information element(s) to include in the beacon - * @ie_len: length of that - * @beacon_interval: beacon interval to use - * @privacy: this is a protected network, keys will be configured - * after joining - * @control_port: whether user space controls IEEE 802.1X port, i.e., - * sets/clears %NL80211_STA_FLAG_AUTHORIZED. If true, the driver is - * required to assume that the port is unauthorized until authorized by - * user space. Otherwise, port is marked authorized by default. - * @basic_rates: bitmap of basic rates to use when creating the IBSS - * @mcast_rate: per-band multicast rate index + 1 (0: disabled) - */ -struct cfg80211_ibss_params { - u8 *ssid; - u8 *bssid; - struct ieee80211_channel *channel; - enum nl80211_channel_type channel_type; - u8 *ie; - u8 ssid_len, ie_len; - u16 beacon_interval; - u32 basic_rates; - bool channel_fixed; - bool privacy; - bool control_port; - int mcast_rate[IEEE80211_NUM_BANDS]; -}; - -/** - * struct cfg80211_connect_params - Connection parameters - * - * This structure provides information needed to complete IEEE 802.11 - * authentication and association. - * - * @channel: The channel to use or %NULL if not specified (auto-select based - * on scan results) - * @bssid: The AP BSSID or %NULL if not specified (auto-select based on scan - * results) - * @ssid: SSID - * @ssid_len: Length of ssid in octets - * @auth_type: Authentication type (algorithm) - * @ie: IEs for association request - * @ie_len: Length of assoc_ie in octets - * @privacy: indicates whether privacy-enabled APs should be used - * @crypto: crypto settings - * @key_len: length of WEP key for shared key authentication - * @key_idx: index of WEP key for shared key authentication - * @key: WEP key for shared key authentication - * @flags: See &enum cfg80211_assoc_req_flags - * @bg_scan_period: Background scan period in seconds - * or -1 to indicate that default value is to be used. - * @ht_capa: HT Capabilities over-rides. Values set in ht_capa_mask - * will be used in ht_capa. Un-supported values will be ignored. - * @ht_capa_mask: The bits of ht_capa which are to be used. - */ -struct cfg80211_connect_params { - struct ieee80211_channel *channel; - u8 *bssid; - u8 *ssid; - size_t ssid_len; - enum nl80211_auth_type auth_type; - u8 *ie; - size_t ie_len; - bool privacy; - struct cfg80211_crypto_settings crypto; - const u8 *key; - u8 key_len, key_idx; - u32 flags; - int bg_scan_period; - struct ieee80211_ht_cap ht_capa; - struct ieee80211_ht_cap ht_capa_mask; -}; - -/** - * enum wiphy_params_flags - set_wiphy_params bitfield values - * @WIPHY_PARAM_RETRY_SHORT: wiphy->retry_short has changed - * @WIPHY_PARAM_RETRY_LONG: wiphy->retry_long has changed - * @WIPHY_PARAM_FRAG_THRESHOLD: wiphy->frag_threshold has changed - * @WIPHY_PARAM_RTS_THRESHOLD: wiphy->rts_threshold has changed - * @WIPHY_PARAM_COVERAGE_CLASS: coverage class changed - */ -enum wiphy_params_flags { - WIPHY_PARAM_RETRY_SHORT = 1 << 0, - WIPHY_PARAM_RETRY_LONG = 1 << 1, - WIPHY_PARAM_FRAG_THRESHOLD = 1 << 2, - WIPHY_PARAM_RTS_THRESHOLD = 1 << 3, - WIPHY_PARAM_COVERAGE_CLASS = 1 << 4, -}; - -/* - * cfg80211_bitrate_mask - masks for bitrate control - */ -struct cfg80211_bitrate_mask { - struct { - u32 legacy; - u8 mcs[IEEE80211_HT_MCS_MASK_LEN]; - } control[IEEE80211_NUM_BANDS]; -}; -/** - * struct cfg80211_pmksa - PMK Security Association - * - * This structure is passed to the set/del_pmksa() method for PMKSA - * caching. - * - * @bssid: The AP's BSSID. - * @pmkid: The PMK material itself. - */ -struct cfg80211_pmksa { - u8 *bssid; - u8 *pmkid; -}; - -/** - * struct cfg80211_wowlan_trig_pkt_pattern - packet pattern - * @mask: bitmask where to match pattern and where to ignore bytes, - * one bit per byte, in same format as nl80211 - * @pattern: bytes to match where bitmask is 1 - * @pattern_len: length of pattern (in bytes) - * - * Internal note: @mask and @pattern are allocated in one chunk of - * memory, free @mask only! - */ -struct cfg80211_wowlan_trig_pkt_pattern { - u8 *mask, *pattern; - int pattern_len; -}; - -/** - * struct cfg80211_wowlan - Wake on Wireless-LAN support info - * - * This structure defines the enabled WoWLAN triggers for the device. - * @any: wake up on any activity -- special trigger if device continues - * operating as normal during suspend - * @disconnect: wake up if getting disconnected - * @magic_pkt: wake up on receiving magic packet - * @patterns: wake up on receiving packet matching a pattern - * @n_patterns: number of patterns - * @gtk_rekey_failure: wake up on GTK rekey failure - * @eap_identity_req: wake up on EAP identity request packet - * @four_way_handshake: wake up on 4-way handshake - * @rfkill_release: wake up when rfkill is released - */ -struct cfg80211_wowlan { - bool any, disconnect, magic_pkt, gtk_rekey_failure, - eap_identity_req, four_way_handshake, - rfkill_release; - struct cfg80211_wowlan_trig_pkt_pattern *patterns; - int n_patterns; -}; - -/** - * struct cfg80211_gtk_rekey_data - rekey data - * @kek: key encryption key - * @kck: key confirmation key - * @replay_ctr: replay counter - */ -struct cfg80211_gtk_rekey_data { - u8 kek[NL80211_KEK_LEN]; - u8 kck[NL80211_KCK_LEN]; - u8 replay_ctr[NL80211_REPLAY_CTR_LEN]; -}; - -/** - * struct cfg80211_ops - backend description for wireless configuration - * - * This struct is registered by fullmac card drivers and/or wireless stacks - * in order to handle configuration requests on their interfaces. - * - * All callbacks except where otherwise noted should return 0 - * on success or a negative error code. - * - * All operations are currently invoked under rtnl for consistency with the - * wireless extensions but this is subject to reevaluation as soon as this - * code is used more widely and we have a first user without wext. - * - * @suspend: wiphy device needs to be suspended. The variable @wow will - * be %NULL or contain the enabled Wake-on-Wireless triggers that are - * configured for the device. - * @resume: wiphy device needs to be resumed - * - * @add_virtual_intf: create a new virtual interface with the given name, - * must set the struct wireless_dev's iftype. Beware: You must create - * the new netdev in the wiphy's network namespace! Returns the netdev, - * or an ERR_PTR. - * - * @del_virtual_intf: remove the virtual interface determined by ifindex. - * - * @change_virtual_intf: change type/configuration of virtual interface, - * keep the struct wireless_dev's iftype updated. - * - * @add_key: add a key with the given parameters. @mac_addr will be %NULL - * when adding a group key. - * - * @get_key: get information about the key with the given parameters. - * @mac_addr will be %NULL when requesting information for a group - * key. All pointers given to the @callback function need not be valid - * after it returns. This function should return an error if it is - * not possible to retrieve the key, -ENOENT if it doesn't exist. - * - * @del_key: remove a key given the @mac_addr (%NULL for a group key) - * and @key_index, return -ENOENT if the key doesn't exist. - * - * @set_default_key: set the default key on an interface - * - * @set_default_mgmt_key: set the default management frame key on an interface - * - * @set_rekey_data: give the data necessary for GTK rekeying to the driver - * - * @start_ap: Start acting in AP mode defined by the parameters. - * @change_beacon: Change the beacon parameters for an access point mode - * interface. This should reject the call when AP mode wasn't started. - * @stop_ap: Stop being an AP, including stopping beaconing. - * - * @add_station: Add a new station. - * @del_station: Remove a station; @mac may be NULL to remove all stations. - * @change_station: Modify a given station. Note that flags changes are not much - * validated in cfg80211, in particular the auth/assoc/authorized flags - * might come to the driver in invalid combinations -- make sure to check - * them, also against the existing state! Also, supported_rates changes are - * not checked in station mode -- drivers need to reject (or ignore) them - * for anything but TDLS peers. - * @get_station: get station information for the station identified by @mac - * @dump_station: dump station callback -- resume dump at index @idx - * - * @add_mpath: add a fixed mesh path - * @del_mpath: delete a given mesh path - * @change_mpath: change a given mesh path - * @get_mpath: get a mesh path for the given parameters - * @dump_mpath: dump mesh path callback -- resume dump at index @idx - * @join_mesh: join the mesh network with the specified parameters - * @leave_mesh: leave the current mesh network - * - * @get_mesh_config: Get the current mesh configuration - * - * @update_mesh_config: Update mesh parameters on a running mesh. - * The mask is a bitfield which tells us which parameters to - * set, and which to leave alone. - * - * @change_bss: Modify parameters for a given BSS. - * - * @set_txq_params: Set TX queue parameters - * - * @set_channel: Set channel for a given wireless interface. Some devices - * may support multi-channel operation (by channel hopping) so cfg80211 - * doesn't verify much. Note, however, that the passed netdev may be - * %NULL as well if the user requested changing the channel for the - * device itself, or for a monitor interface. - * @get_channel: Get the current operating channel, should return %NULL if - * there's no single defined operating channel if for example the - * device implements channel hopping for multi-channel virtual interfaces. - * - * @scan: Request to do a scan. If returning zero, the scan request is given - * the driver, and will be valid until passed to cfg80211_scan_done(). - * For scan results, call cfg80211_inform_bss(); you can call this outside - * the scan/scan_done bracket too. - * - * @auth: Request to authenticate with the specified peer - * @assoc: Request to (re)associate with the specified peer - * @deauth: Request to deauthenticate from the specified peer - * @disassoc: Request to disassociate from the specified peer - * - * @connect: Connect to the ESS with the specified parameters. When connected, - * call cfg80211_connect_result() with status code %WLAN_STATUS_SUCCESS. - * If the connection fails for some reason, call cfg80211_connect_result() - * with the status from the AP. - * @disconnect: Disconnect from the BSS/ESS. - * - * @join_ibss: Join the specified IBSS (or create if necessary). Once done, call - * cfg80211_ibss_joined(), also call that function when changing BSSID due - * to a merge. - * @leave_ibss: Leave the IBSS. - * - * @set_wiphy_params: Notify that wiphy parameters have changed; - * @changed bitfield (see &enum wiphy_params_flags) describes which values - * have changed. The actual parameter values are available in - * struct wiphy. If returning an error, no value should be changed. - * - * @set_tx_power: set the transmit power according to the parameters, - * the power passed is in mBm, to get dBm use MBM_TO_DBM(). - * @get_tx_power: store the current TX power into the dbm variable; - * return 0 if successful - * - * @set_wds_peer: set the WDS peer for a WDS interface - * - * @rfkill_poll: polls the hw rfkill line, use cfg80211 reporting - * functions to adjust rfkill hw state - * - * @dump_survey: get site survey information. - * - * @remain_on_channel: Request the driver to remain awake on the specified - * channel for the specified duration to complete an off-channel - * operation (e.g., public action frame exchange). When the driver is - * ready on the requested channel, it must indicate this with an event - * notification by calling cfg80211_ready_on_channel(). - * @cancel_remain_on_channel: Cancel an on-going remain-on-channel operation. - * This allows the operation to be terminated prior to timeout based on - * the duration value. - * @mgmt_tx: Transmit a management frame. - * @mgmt_tx_cancel_wait: Cancel the wait time from transmitting a management - * frame on another channel - * - * @testmode_cmd: run a test mode command - * @testmode_dump: Implement a test mode dump. The cb->args[2] and up may be - * used by the function, but 0 and 1 must not be touched. Additionally, - * return error codes other than -ENOBUFS and -ENOENT will terminate the - * dump and return to userspace with an error, so be careful. If any data - * was passed in from userspace then the data/len arguments will be present - * and point to the data contained in %NL80211_ATTR_TESTDATA. - * - * @set_bitrate_mask: set the bitrate mask configuration - * - * @set_pmksa: Cache a PMKID for a BSSID. This is mostly useful for fullmac - * devices running firmwares capable of generating the (re) association - * RSN IE. It allows for faster roaming between WPA2 BSSIDs. - * @del_pmksa: Delete a cached PMKID. - * @flush_pmksa: Flush all cached PMKIDs. - * @set_power_mgmt: Configure WLAN power management. A timeout value of -1 - * allows the driver to adjust the dynamic ps timeout value. - * @set_cqm_rssi_config: Configure connection quality monitor RSSI threshold. - * @sched_scan_start: Tell the driver to start a scheduled scan. - * @sched_scan_stop: Tell the driver to stop an ongoing scheduled - * scan. The driver_initiated flag specifies whether the driver - * itself has informed that the scan has stopped. - * - * @mgmt_frame_register: Notify driver that a management frame type was - * registered. Note that this callback may not sleep, and cannot run - * concurrently with itself. - * - * @set_antenna: Set antenna configuration (tx_ant, rx_ant) on the device. - * Parameters are bitmaps of allowed antennas to use for TX/RX. Drivers may - * reject TX/RX mask combinations they cannot support by returning -EINVAL - * (also see nl80211.h @NL80211_ATTR_WIPHY_ANTENNA_TX). - * - * @get_antenna: Get current antenna configuration from device (tx_ant, rx_ant). - * - * @set_ringparam: Set tx and rx ring sizes. - * - * @get_ringparam: Get tx and rx ring current and maximum sizes. - * - * @tdls_mgmt: Transmit a TDLS management frame. - * @tdls_oper: Perform a high-level TDLS operation (e.g. TDLS link setup). - * - * @probe_client: probe an associated client, must return a cookie that it - * later passes to cfg80211_probe_status(). - * - * @set_noack_map: Set the NoAck Map for the TIDs. - */ -struct cfg80211_ops { - int (*suspend)(struct wiphy *wiphy, struct cfg80211_wowlan *wow); - int (*resume)(struct wiphy *wiphy); - - struct net_device * (*add_virtual_intf)(struct wiphy *wiphy, - char *name, - enum nl80211_iftype type, - u32 *flags, - struct vif_params *params); - int (*del_virtual_intf)(struct wiphy *wiphy, struct net_device *dev); - int (*change_virtual_intf)(struct wiphy *wiphy, - struct net_device *dev, - enum nl80211_iftype type, u32 *flags, - struct vif_params *params); - - int (*add_key)(struct wiphy *wiphy, struct net_device *netdev, - u8 key_index, bool pairwise, const u8 *mac_addr, - struct key_params *params); - int (*get_key)(struct wiphy *wiphy, struct net_device *netdev, - u8 key_index, bool pairwise, const u8 *mac_addr, - void *cookie, - void (*callback)(void *cookie, struct key_params*)); - int (*del_key)(struct wiphy *wiphy, struct net_device *netdev, - u8 key_index, bool pairwise, const u8 *mac_addr); - int (*set_default_key)(struct wiphy *wiphy, - struct net_device *netdev, - u8 key_index, bool unicast, bool multicast); - int (*set_default_mgmt_key)(struct wiphy *wiphy, - struct net_device *netdev, - u8 key_index); - - int (*start_ap)(struct wiphy *wiphy, struct net_device *dev, - struct cfg80211_ap_settings *settings); - int (*change_beacon)(struct wiphy *wiphy, struct net_device *dev, - struct cfg80211_beacon_data *info); - int (*stop_ap)(struct wiphy *wiphy, struct net_device *dev); - - - int (*add_station)(struct wiphy *wiphy, struct net_device *dev, - u8 *mac, struct station_parameters *params); - int (*del_station)(struct wiphy *wiphy, struct net_device *dev, - u8 *mac); - int (*change_station)(struct wiphy *wiphy, struct net_device *dev, - u8 *mac, struct station_parameters *params); - int (*get_station)(struct wiphy *wiphy, struct net_device *dev, - u8 *mac, struct station_info *sinfo); - int (*dump_station)(struct wiphy *wiphy, struct net_device *dev, - int idx, u8 *mac, struct station_info *sinfo); - - int (*add_mpath)(struct wiphy *wiphy, struct net_device *dev, - u8 *dst, u8 *next_hop); - int (*del_mpath)(struct wiphy *wiphy, struct net_device *dev, - u8 *dst); - int (*change_mpath)(struct wiphy *wiphy, struct net_device *dev, - u8 *dst, u8 *next_hop); - int (*get_mpath)(struct wiphy *wiphy, struct net_device *dev, - u8 *dst, u8 *next_hop, - struct mpath_info *pinfo); - int (*dump_mpath)(struct wiphy *wiphy, struct net_device *dev, - int idx, u8 *dst, u8 *next_hop, - struct mpath_info *pinfo); - int (*get_mesh_config)(struct wiphy *wiphy, - struct net_device *dev, - struct mesh_config *conf); - int (*update_mesh_config)(struct wiphy *wiphy, - struct net_device *dev, u32 mask, - const struct mesh_config *nconf); - int (*join_mesh)(struct wiphy *wiphy, struct net_device *dev, - const struct mesh_config *conf, - const struct mesh_setup *setup); - int (*leave_mesh)(struct wiphy *wiphy, struct net_device *dev); - - int (*change_bss)(struct wiphy *wiphy, struct net_device *dev, - struct bss_parameters *params); - - int (*set_txq_params)(struct wiphy *wiphy, struct net_device *dev, - struct ieee80211_txq_params *params); - - int (*set_channel)(struct wiphy *wiphy, struct net_device *dev, - struct ieee80211_channel *chan, - enum nl80211_channel_type channel_type); - - int (*scan)(struct wiphy *wiphy, struct net_device *dev, - struct cfg80211_scan_request *request); - - int (*auth)(struct wiphy *wiphy, struct net_device *dev, - struct cfg80211_auth_request *req); - int (*assoc)(struct wiphy *wiphy, struct net_device *dev, - struct cfg80211_assoc_request *req); - int (*deauth)(struct wiphy *wiphy, struct net_device *dev, - struct cfg80211_deauth_request *req); - int (*disassoc)(struct wiphy *wiphy, struct net_device *dev, - struct cfg80211_disassoc_request *req); - - int (*connect)(struct wiphy *wiphy, struct net_device *dev, - struct cfg80211_connect_params *sme); - int (*disconnect)(struct wiphy *wiphy, struct net_device *dev, - u16 reason_code); - - int (*join_ibss)(struct wiphy *wiphy, struct net_device *dev, - struct cfg80211_ibss_params *params); - int (*leave_ibss)(struct wiphy *wiphy, struct net_device *dev); - - int (*set_wiphy_params)(struct wiphy *wiphy, u32 changed); - - int (*set_tx_power)(struct wiphy *wiphy, - enum nl80211_tx_power_setting type, int mbm); - int (*get_tx_power)(struct wiphy *wiphy, int *dbm); - - int (*set_wds_peer)(struct wiphy *wiphy, struct net_device *dev, - const u8 *addr); - - void (*rfkill_poll)(struct wiphy *wiphy); - -#ifdef CONFIG_NL80211_TESTMODE - int (*testmode_cmd)(struct wiphy *wiphy, void *data, int len); - int (*testmode_dump)(struct wiphy *wiphy, struct sk_buff *skb, - struct netlink_callback *cb, - void *data, int len); -#endif - - int (*set_bitrate_mask)(struct wiphy *wiphy, - struct net_device *dev, - const u8 *peer, - const struct cfg80211_bitrate_mask *mask); - - int (*dump_survey)(struct wiphy *wiphy, struct net_device *netdev, - int idx, struct survey_info *info); - - int (*set_pmksa)(struct wiphy *wiphy, struct net_device *netdev, - struct cfg80211_pmksa *pmksa); - int (*del_pmksa)(struct wiphy *wiphy, struct net_device *netdev, - struct cfg80211_pmksa *pmksa); - int (*flush_pmksa)(struct wiphy *wiphy, struct net_device *netdev); - - int (*remain_on_channel)(struct wiphy *wiphy, - struct net_device *dev, - struct ieee80211_channel *chan, - enum nl80211_channel_type channel_type, - unsigned int duration, - u64 *cookie); - int (*cancel_remain_on_channel)(struct wiphy *wiphy, - struct net_device *dev, - u64 cookie); - - int (*mgmt_tx)(struct wiphy *wiphy, struct net_device *dev, - struct ieee80211_channel *chan, bool offchan, - enum nl80211_channel_type channel_type, - bool channel_type_valid, unsigned int wait, - const u8 *buf, size_t len, bool no_cck, - bool dont_wait_for_ack, u64 *cookie); - int (*mgmt_tx_cancel_wait)(struct wiphy *wiphy, - struct net_device *dev, - u64 cookie); - - int (*set_power_mgmt)(struct wiphy *wiphy, struct net_device *dev, - bool enabled, int timeout); - - int (*set_cqm_rssi_config)(struct wiphy *wiphy, - struct net_device *dev, - s32 rssi_thold, u32 rssi_hyst); - - void (*mgmt_frame_register)(struct wiphy *wiphy, - struct net_device *dev, - u16 frame_type, bool reg); - - int (*set_antenna)(struct wiphy *wiphy, u32 tx_ant, u32 rx_ant); - int (*get_antenna)(struct wiphy *wiphy, u32 *tx_ant, u32 *rx_ant); - - int (*set_ringparam)(struct wiphy *wiphy, u32 tx, u32 rx); - void (*get_ringparam)(struct wiphy *wiphy, - u32 *tx, u32 *tx_max, u32 *rx, u32 *rx_max); - - int (*sched_scan_start)(struct wiphy *wiphy, - struct net_device *dev, - struct cfg80211_sched_scan_request *request); - int (*sched_scan_stop)(struct wiphy *wiphy, struct net_device *dev); - - int (*set_rekey_data)(struct wiphy *wiphy, struct net_device *dev, - struct cfg80211_gtk_rekey_data *data); - - int (*tdls_mgmt)(struct wiphy *wiphy, struct net_device *dev, - u8 *peer, u8 action_code, u8 dialog_token, - u16 status_code, const u8 *buf, size_t len); - int (*tdls_oper)(struct wiphy *wiphy, struct net_device *dev, - u8 *peer, enum nl80211_tdls_operation oper); - - int (*probe_client)(struct wiphy *wiphy, struct net_device *dev, - const u8 *peer, u64 *cookie); - - int (*set_noack_map)(struct wiphy *wiphy, - struct net_device *dev, - u16 noack_map); - - struct ieee80211_channel *(*get_channel)(struct wiphy *wiphy); -}; - -/* - * wireless hardware and networking interfaces structures - * and registration/helper functions - */ - -/** - * enum wiphy_flags - wiphy capability flags - * - * @WIPHY_FLAG_CUSTOM_REGULATORY: tells us the driver for this device - * has its own custom regulatory domain and cannot identify the - * ISO / IEC 3166 alpha2 it belongs to. When this is enabled - * we will disregard the first regulatory hint (when the - * initiator is %REGDOM_SET_BY_CORE). - * @WIPHY_FLAG_STRICT_REGULATORY: tells us the driver for this device will - * ignore regulatory domain settings until it gets its own regulatory - * domain via its regulatory_hint() unless the regulatory hint is - * from a country IE. After its gets its own regulatory domain it will - * only allow further regulatory domain settings to further enhance - * compliance. For example if channel 13 and 14 are disabled by this - * regulatory domain no user regulatory domain can enable these channels - * at a later time. This can be used for devices which do not have - * calibration information guaranteed for frequencies or settings - * outside of its regulatory domain. If used in combination with - * WIPHY_FLAG_CUSTOM_REGULATORY the inspected country IE power settings - * will be followed. - * @WIPHY_FLAG_DISABLE_BEACON_HINTS: enable this if your driver needs to ensure - * that passive scan flags and beaconing flags may not be lifted by - * cfg80211 due to regulatory beacon hints. For more information on beacon - * hints read the documenation for regulatory_hint_found_beacon() - * @WIPHY_FLAG_NETNS_OK: if not set, do not allow changing the netns of this - * wiphy at all - * @WIPHY_FLAG_ENFORCE_COMBINATIONS: Set this flag to enforce interface - * combinations for this device. This flag is used for backward - * compatibility only until all drivers advertise combinations and - * they will always be enforced. - * @WIPHY_FLAG_PS_ON_BY_DEFAULT: if set to true, powersave will be enabled - * by default -- this flag will be set depending on the kernel's default - * on wiphy_new(), but can be changed by the driver if it has a good - * reason to override the default - * @WIPHY_FLAG_4ADDR_AP: supports 4addr mode even on AP (with a single station - * on a VLAN interface) - * @WIPHY_FLAG_4ADDR_STATION: supports 4addr mode even as a station - * @WIPHY_FLAG_CONTROL_PORT_PROTOCOL: This device supports setting the - * control port protocol ethertype. The device also honours the - * control_port_no_encrypt flag. - * @WIPHY_FLAG_IBSS_RSN: The device supports IBSS RSN. - * @WIPHY_FLAG_MESH_AUTH: The device supports mesh authentication by routing - * auth frames to userspace. See @NL80211_MESH_SETUP_USERSPACE_AUTH. - * @WIPHY_FLAG_SUPPORTS_SCHED_SCAN: The device supports scheduled scans. - * @WIPHY_FLAG_SUPPORTS_FW_ROAM: The device supports roaming feature in the - * firmware. - * @WIPHY_FLAG_AP_UAPSD: The device supports uapsd on AP. - * @WIPHY_FLAG_SUPPORTS_TDLS: The device supports TDLS (802.11z) operation. - * @WIPHY_FLAG_TDLS_EXTERNAL_SETUP: The device does not handle TDLS (802.11z) - * link setup/discovery operations internally. Setup, discovery and - * teardown packets should be sent through the @NL80211_CMD_TDLS_MGMT - * command. When this flag is not set, @NL80211_CMD_TDLS_OPER should be - * used for asking the driver/firmware to perform a TDLS operation. - * @WIPHY_FLAG_HAVE_AP_SME: device integrates AP SME - * @WIPHY_FLAG_REPORTS_OBSS: the device will report beacons from other BSSes - * when there are virtual interfaces in AP mode by calling - * cfg80211_report_obss_beacon(). - * @WIPHY_FLAG_AP_PROBE_RESP_OFFLOAD: When operating as an AP, the device - * responds to probe-requests in hardware. - * @WIPHY_FLAG_OFFCHAN_TX: Device supports direct off-channel TX. - * @WIPHY_FLAG_HAS_REMAIN_ON_CHANNEL: Device supports remain-on-channel call. - */ -enum wiphy_flags { - WIPHY_FLAG_CUSTOM_REGULATORY = BIT(0), - WIPHY_FLAG_STRICT_REGULATORY = BIT(1), - WIPHY_FLAG_DISABLE_BEACON_HINTS = BIT(2), - WIPHY_FLAG_NETNS_OK = BIT(3), - WIPHY_FLAG_PS_ON_BY_DEFAULT = BIT(4), - WIPHY_FLAG_4ADDR_AP = BIT(5), - WIPHY_FLAG_4ADDR_STATION = BIT(6), - WIPHY_FLAG_CONTROL_PORT_PROTOCOL = BIT(7), - WIPHY_FLAG_IBSS_RSN = BIT(8), - WIPHY_FLAG_MESH_AUTH = BIT(10), - WIPHY_FLAG_SUPPORTS_SCHED_SCAN = BIT(11), - WIPHY_FLAG_ENFORCE_COMBINATIONS = BIT(12), - WIPHY_FLAG_SUPPORTS_FW_ROAM = BIT(13), - WIPHY_FLAG_AP_UAPSD = BIT(14), - WIPHY_FLAG_SUPPORTS_TDLS = BIT(15), - WIPHY_FLAG_TDLS_EXTERNAL_SETUP = BIT(16), - WIPHY_FLAG_HAVE_AP_SME = BIT(17), - WIPHY_FLAG_REPORTS_OBSS = BIT(18), - WIPHY_FLAG_AP_PROBE_RESP_OFFLOAD = BIT(19), - WIPHY_FLAG_OFFCHAN_TX = BIT(20), - WIPHY_FLAG_HAS_REMAIN_ON_CHANNEL = BIT(21), -}; - -/** - * struct ieee80211_iface_limit - limit on certain interface types - * @max: maximum number of interfaces of these types - * @types: interface types (bits) - */ -struct ieee80211_iface_limit { - u16 max; - u16 types; -}; - -/** - * struct ieee80211_iface_combination - possible interface combination - * @limits: limits for the given interface types - * @n_limits: number of limitations - * @num_different_channels: can use up to this many different channels - * @max_interfaces: maximum number of interfaces in total allowed in this - * group - * @beacon_int_infra_match: In this combination, the beacon intervals - * between infrastructure and AP types must match. This is required - * only in special cases. - * - * These examples can be expressed as follows: - * - * Allow #STA <= 1, #AP <= 1, matching BI, channels = 1, 2 total: - * - * struct ieee80211_iface_limit limits1[] = { - * { .max = 1, .types = BIT(NL80211_IFTYPE_STATION), }, - * { .max = 1, .types = BIT(NL80211_IFTYPE_AP}, }, - * }; - * struct ieee80211_iface_combination combination1 = { - * .limits = limits1, - * .n_limits = ARRAY_SIZE(limits1), - * .max_interfaces = 2, - * .beacon_int_infra_match = true, - * }; - * - * - * Allow #{AP, P2P-GO} <= 8, channels = 1, 8 total: - * - * struct ieee80211_iface_limit limits2[] = { - * { .max = 8, .types = BIT(NL80211_IFTYPE_AP) | - * BIT(NL80211_IFTYPE_P2P_GO), }, - * }; - * struct ieee80211_iface_combination combination2 = { - * .limits = limits2, - * .n_limits = ARRAY_SIZE(limits2), - * .max_interfaces = 8, - * .num_different_channels = 1, - * }; - * - * - * Allow #STA <= 1, #{P2P-client,P2P-GO} <= 3 on two channels, 4 total. - * This allows for an infrastructure connection and three P2P connections. - * - * struct ieee80211_iface_limit limits3[] = { - * { .max = 1, .types = BIT(NL80211_IFTYPE_STATION), }, - * { .max = 3, .types = BIT(NL80211_IFTYPE_P2P_GO) | - * BIT(NL80211_IFTYPE_P2P_CLIENT), }, - * }; - * struct ieee80211_iface_combination combination3 = { - * .limits = limits3, - * .n_limits = ARRAY_SIZE(limits3), - * .max_interfaces = 4, - * .num_different_channels = 2, - * }; - */ -struct ieee80211_iface_combination { - const struct ieee80211_iface_limit *limits; - u32 num_different_channels; - u16 max_interfaces; - u8 n_limits; - bool beacon_int_infra_match; -}; - -struct mac_address { - u8 addr[ETH_ALEN]; -}; - -struct ieee80211_txrx_stypes { - u16 tx, rx; -}; - -/** - * enum wiphy_wowlan_support_flags - WoWLAN support flags - * @WIPHY_WOWLAN_ANY: supports wakeup for the special "any" - * trigger that keeps the device operating as-is and - * wakes up the host on any activity, for example a - * received packet that passed filtering; note that the - * packet should be preserved in that case - * @WIPHY_WOWLAN_MAGIC_PKT: supports wakeup on magic packet - * (see nl80211.h) - * @WIPHY_WOWLAN_DISCONNECT: supports wakeup on disconnect - * @WIPHY_WOWLAN_SUPPORTS_GTK_REKEY: supports GTK rekeying while asleep - * @WIPHY_WOWLAN_GTK_REKEY_FAILURE: supports wakeup on GTK rekey failure - * @WIPHY_WOWLAN_EAP_IDENTITY_REQ: supports wakeup on EAP identity request - * @WIPHY_WOWLAN_4WAY_HANDSHAKE: supports wakeup on 4-way handshake failure - * @WIPHY_WOWLAN_RFKILL_RELEASE: supports wakeup on RF-kill release - */ -enum wiphy_wowlan_support_flags { - WIPHY_WOWLAN_ANY = BIT(0), - WIPHY_WOWLAN_MAGIC_PKT = BIT(1), - WIPHY_WOWLAN_DISCONNECT = BIT(2), - WIPHY_WOWLAN_SUPPORTS_GTK_REKEY = BIT(3), - WIPHY_WOWLAN_GTK_REKEY_FAILURE = BIT(4), - WIPHY_WOWLAN_EAP_IDENTITY_REQ = BIT(5), - WIPHY_WOWLAN_4WAY_HANDSHAKE = BIT(6), - WIPHY_WOWLAN_RFKILL_RELEASE = BIT(7), -}; - -/** - * struct wiphy_wowlan_support - WoWLAN support data - * @flags: see &enum wiphy_wowlan_support_flags - * @n_patterns: number of supported wakeup patterns - * (see nl80211.h for the pattern definition) - * @pattern_max_len: maximum length of each pattern - * @pattern_min_len: minimum length of each pattern - */ -struct wiphy_wowlan_support { - u32 flags; - int n_patterns; - int pattern_max_len; - int pattern_min_len; -}; - -/** - * struct wiphy - wireless hardware description - * @reg_notifier: the driver's regulatory notification callback, - * note that if your driver uses wiphy_apply_custom_regulatory() - * the reg_notifier's request can be passed as NULL - * @regd: the driver's regulatory domain, if one was requested via - * the regulatory_hint() API. This can be used by the driver - * on the reg_notifier() if it chooses to ignore future - * regulatory domain changes caused by other drivers. - * @signal_type: signal type reported in &struct cfg80211_bss. - * @cipher_suites: supported cipher suites - * @n_cipher_suites: number of supported cipher suites - * @retry_short: Retry limit for short frames (dot11ShortRetryLimit) - * @retry_long: Retry limit for long frames (dot11LongRetryLimit) - * @frag_threshold: Fragmentation threshold (dot11FragmentationThreshold); - * -1 = fragmentation disabled, only odd values >= 256 used - * @rts_threshold: RTS threshold (dot11RTSThreshold); -1 = RTS/CTS disabled - * @dot11OCBActivated: the OCB mode is activated or not (IEEE 802.11p mode) [1 - dot11p ; 0 - not dot11p] - * @_net: the network namespace this wiphy currently lives in - * @perm_addr: permanent MAC address of this device - * @addr_mask: If the device supports multiple MAC addresses by masking, - * set this to a mask with variable bits set to 1, e.g. if the last - * four bits are variable then set it to 00:...:00:0f. The actual - * variable bits shall be determined by the interfaces added, with - * interfaces not matching the mask being rejected to be brought up. - * @n_addresses: number of addresses in @addresses. - * @addresses: If the device has more than one address, set this pointer - * to a list of addresses (6 bytes each). The first one will be used - * by default for perm_addr. In this case, the mask should be set to - * all-zeroes. In this case it is assumed that the device can handle - * the same number of arbitrary MAC addresses. - * @registered: protects ->resume and ->suspend sysfs callbacks against - * unregister hardware - * @debugfsdir: debugfs directory used for this wiphy, will be renamed - * automatically on wiphy renames - * @dev: (virtual) struct device for this wiphy - * @registered: helps synchronize suspend/resume with wiphy unregister - * @wext: wireless extension handlers - * @priv: driver private data (sized according to wiphy_new() parameter) - * @interface_modes: bitmask of interfaces types valid for this wiphy, - * must be set by driver - * @iface_combinations: Valid interface combinations array, should not - * list single interface types. - * @n_iface_combinations: number of entries in @iface_combinations array. - * @software_iftypes: bitmask of software interface types, these are not - * subject to any restrictions since they are purely managed in SW. - * @flags: wiphy flags, see &enum wiphy_flags - * @features: features advertised to nl80211, see &enum nl80211_feature_flags. - * @bss_priv_size: each BSS struct has private data allocated with it, - * this variable determines its size - * @max_scan_ssids: maximum number of SSIDs the device can scan for in - * any given scan - * @max_sched_scan_ssids: maximum number of SSIDs the device can scan - * for in any given scheduled scan - * @max_match_sets: maximum number of match sets the device can handle - * when performing a scheduled scan, 0 if filtering is not - * supported. - * @max_scan_ie_len: maximum length of user-controlled IEs device can - * add to probe request frames transmitted during a scan, must not - * include fixed IEs like supported rates - * @max_sched_scan_ie_len: same as max_scan_ie_len, but for scheduled - * scans - * @coverage_class: current coverage class - * @fw_version: firmware version for ethtool reporting - * @hw_version: hardware version for ethtool reporting - * @max_num_pmkids: maximum number of PMKIDs supported by device - * @privid: a pointer that drivers can use to identify if an arbitrary - * wiphy is theirs, e.g. in global notifiers - * @bands: information about bands/channels supported by this device - * - * @mgmt_stypes: bitmasks of frame subtypes that can be subscribed to or - * transmitted through nl80211, points to an array indexed by interface - * type - * - * @available_antennas_tx: bitmap of antennas which are available to be - * configured as TX antennas. Antenna configuration commands will be - * rejected unless this or @available_antennas_rx is set. - * - * @available_antennas_rx: bitmap of antennas which are available to be - * configured as RX antennas. Antenna configuration commands will be - * rejected unless this or @available_antennas_tx is set. - * - * @probe_resp_offload: - * Bitmap of supported protocols for probe response offloading. - * See &enum nl80211_probe_resp_offload_support_attr. Only valid - * when the wiphy flag @WIPHY_FLAG_AP_PROBE_RESP_OFFLOAD is set. - * - * @max_remain_on_channel_duration: Maximum time a remain-on-channel operation - * may request, if implemented. - * - * @wowlan: WoWLAN support information - * - * @ap_sme_capa: AP SME capabilities, flags from &enum nl80211_ap_sme_features. - * @ht_capa_mod_mask: Specify what ht_cap values can be over-ridden. - * If null, then none can be over-ridden. - */ -struct wiphy { - /* assign these fields before you register the wiphy */ - -#define WIPHY_COMPAT_PAD_SIZE 2048 - u8 padding[WIPHY_COMPAT_PAD_SIZE]; - - /* permanent MAC address(es) */ - u8 perm_addr[ETH_ALEN]; - u8 addr_mask[ETH_ALEN]; - - struct mac_address *addresses; - - const struct ieee80211_txrx_stypes *mgmt_stypes; - - const struct ieee80211_iface_combination *iface_combinations; - int n_iface_combinations; - u16 software_iftypes; - - u16 n_addresses; - - /* Supported interface modes, OR together BIT(NL80211_IFTYPE_...) */ - u16 interface_modes; - - u32 flags, features; - - u32 ap_sme_capa; - - enum cfg80211_signal_type signal_type; - - int bss_priv_size; - u8 max_scan_ssids; - u8 max_sched_scan_ssids; - u8 max_match_sets; - u16 max_scan_ie_len; - u16 max_sched_scan_ie_len; - - int n_cipher_suites; - const u32 *cipher_suites; - - u8 retry_short; - u8 retry_long; - u32 frag_threshold; - u32 rts_threshold; - u8 coverage_class; - - bool dot11OCBActivated; // [1 - dot11p ; 0 - not dot11p] - - char fw_version[ETHTOOL_BUSINFO_LEN]; - u32 hw_version; - - struct wiphy_wowlan_support wowlan; - - u16 max_remain_on_channel_duration; - - u8 max_num_pmkids; - - u32 available_antennas_tx; - u32 available_antennas_rx; - - /* - * Bitmap of supported protocols for probe response offloading - * see &enum nl80211_probe_resp_offload_support_attr. Only valid - * when the wiphy flag @WIPHY_FLAG_AP_PROBE_RESP_OFFLOAD is set. - */ - u32 probe_resp_offload; - - /* If multiple wiphys are registered and you're handed e.g. - * a regular netdev with assigned ieee80211_ptr, you won't - * know whether it points to a wiphy your driver has registered - * or not. Assign this to something global to your driver to - * help determine whether you own this wiphy or not. */ - const void *privid; - - struct ieee80211_supported_band *bands[IEEE80211_NUM_BANDS]; - - /* Lets us get back the wiphy on the callback */ - int (*reg_notifier)(struct wiphy *wiphy, - struct regulatory_request *request); - - /* fields below are read-only, assigned by cfg80211 */ - - const struct ieee80211_regdomain *regd; - - /* the item in /sys/class/ieee80211/ points to this, - * you need use set_wiphy_dev() (see below) */ - struct device dev; - - /* protects ->resume, ->suspend sysfs callbacks against unregister hw */ - bool registered; - - /* dir in debugfs: ieee80211/ */ - struct dentry *debugfsdir; - - const struct ieee80211_ht_cap *ht_capa_mod_mask; - -#ifdef CONFIG_NET_NS - /* the network namespace this phy lives in currently */ - struct net *_net; -#endif - -#ifdef CONFIG_CFG80211_WEXT - const struct iw_handler_def *wext; -#endif - - char priv[0] __attribute__((__aligned__(NETDEV_ALIGN))); -}; - -static inline struct net *wiphy_net(struct wiphy *wiphy) -{ - return read_pnet(&wiphy->_net); -} - -static inline void wiphy_net_set(struct wiphy *wiphy, struct net *net) -{ - write_pnet(&wiphy->_net, net); -} - -/** - * wiphy_priv - return priv from wiphy - * - * @wiphy: the wiphy whose priv pointer to return - */ -static inline void *wiphy_priv(struct wiphy *wiphy) -{ - BUG_ON(!wiphy); - return &wiphy->priv; -} - -/** - * priv_to_wiphy - return the wiphy containing the priv - * - * @priv: a pointer previously returned by wiphy_priv - */ -static inline struct wiphy *priv_to_wiphy(void *priv) -{ - BUG_ON(!priv); - return container_of(priv, struct wiphy, priv); -} - -/** - * set_wiphy_dev - set device pointer for wiphy - * - * @wiphy: The wiphy whose device to bind - * @dev: The device to parent it to - */ -static inline void set_wiphy_dev(struct wiphy *wiphy, struct device *dev) -{ - wiphy->dev.parent = dev; -} - -/** - * wiphy_dev - get wiphy dev pointer - * - * @wiphy: The wiphy whose device struct to look up - */ -static inline struct device *wiphy_dev(struct wiphy *wiphy) -{ - return wiphy->dev.parent; -} - -/** - * wiphy_name - get wiphy name - * - * @wiphy: The wiphy whose name to return - */ -static inline const char *wiphy_name(const struct wiphy *wiphy) -{ - return dev_name(&wiphy->dev); -} - -/** - * wiphy_new - create a new wiphy for use with cfg80211 - * - * @ops: The configuration operations for this device - * @sizeof_priv: The size of the private area to allocate - * - * Create a new wiphy and associate the given operations with it. - * @sizeof_priv bytes are allocated for private use. - * - * The returned pointer must be assigned to each netdev's - * ieee80211_ptr for proper operation. - */ -struct wiphy *wiphy_new(const struct cfg80211_ops *ops, int sizeof_priv); - -/** - * wiphy_register - register a wiphy with cfg80211 - * - * @wiphy: The wiphy to register. - * - * Returns a non-negative wiphy index or a negative error code. - */ -extern int wiphy_register(struct wiphy *wiphy); - -/** - * wiphy_unregister - deregister a wiphy from cfg80211 - * - * @wiphy: The wiphy to unregister. - * - * After this call, no more requests can be made with this priv - * pointer, but the call may sleep to wait for an outstanding - * request that is being handled. - */ -extern void wiphy_unregister(struct wiphy *wiphy); - -/** - * wiphy_free - free wiphy - * - * @wiphy: The wiphy to free - */ -extern void wiphy_free(struct wiphy *wiphy); - -/* internal structs */ -struct cfg80211_conn; -struct cfg80211_internal_bss; -struct cfg80211_cached_keys; - -/** - * struct wireless_dev - wireless per-netdev state - * - * This structure must be allocated by the driver/stack - * that uses the ieee80211_ptr field in struct net_device - * (this is intentional so it can be allocated along with - * the netdev.) - * - * @wiphy: pointer to hardware description - * @iftype: interface type - * @list: (private) Used to collect the interfaces - * @netdev: (private) Used to reference back to the netdev - * @current_bss: (private) Used by the internal configuration code - * @channel: (private) Used by the internal configuration code to track - * user-set AP, monitor and WDS channels for wireless extensions - * @bssid: (private) Used by the internal configuration code - * @ssid: (private) Used by the internal configuration code - * @ssid_len: (private) Used by the internal configuration code - * @mesh_id_len: (private) Used by the internal configuration code - * @mesh_id_up_len: (private) Used by the internal configuration code - * @wext: (private) Used by the internal wireless extensions compat code - * @use_4addr: indicates 4addr mode is used on this interface, must be - * set by driver (if supported) on add_interface BEFORE registering the - * netdev and may otherwise be used by driver read-only, will be update - * by cfg80211 on change_interface - * @mgmt_registrations: list of registrations for management frames - * @mgmt_registrations_lock: lock for the list - * @mtx: mutex used to lock data in this struct - * @cleanup_work: work struct used for cleanup that can't be done directly - * @beacon_interval: beacon interval used on this device for transmitting - * beacons, 0 when not valid - */ -struct wireless_dev { - struct wiphy *wiphy; - enum nl80211_iftype iftype; - - /* the remainder of this struct should be private to cfg80211 */ - struct list_head list; - struct net_device *netdev; - - struct list_head mgmt_registrations; - spinlock_t mgmt_registrations_lock; - - struct mutex mtx; - - struct work_struct cleanup_work; - - bool use_4addr; - - /* currently used for IBSS and SME - might be rearranged later */ - u8 ssid[IEEE80211_MAX_SSID_LEN]; - u8 ssid_len, mesh_id_len, mesh_id_up_len; - enum { - CFG80211_SME_IDLE, - CFG80211_SME_CONNECTING, - CFG80211_SME_CONNECTED, - } sme_state; - struct cfg80211_conn *conn; - struct cfg80211_cached_keys *connect_keys; - - struct list_head event_list; - spinlock_t event_lock; - - struct cfg80211_internal_bss *current_bss; /* associated / joined */ - struct ieee80211_channel *channel; - - bool ps; - int ps_timeout; - - int beacon_interval; - - u32 ap_unexpected_nlpid; - -#ifdef CONFIG_CFG80211_WEXT - /* wext data */ - struct { - struct cfg80211_ibss_params ibss; - struct cfg80211_connect_params connect; - struct cfg80211_cached_keys *keys; - u8 *ie; - size_t ie_len; - u8 bssid[ETH_ALEN], prev_bssid[ETH_ALEN]; - u8 ssid[IEEE80211_MAX_SSID_LEN]; - s8 default_key, default_mgmt_key; - bool prev_bssid_valid; - } wext; -#endif -}; - -/** - * wdev_priv - return wiphy priv from wireless_dev - * - * @wdev: The wireless device whose wiphy's priv pointer to return - */ -static inline void *wdev_priv(struct wireless_dev *wdev) -{ - BUG_ON(!wdev); - return wiphy_priv(wdev->wiphy); -} - -/** - * DOC: Utility functions - * - * cfg80211 offers a number of utility functions that can be useful. - */ - -/** - * ieee80211_channel_to_frequency - convert channel number to frequency - * @chan: channel number - * @band: band, necessary due to channel number overlap - */ -extern int ieee80211_channel_to_frequency(int chan, enum ieee80211_band band); - -/** - * ieee80211_frequency_to_channel - convert frequency to channel number - * @freq: center frequency - */ -extern int ieee80211_frequency_to_channel(int freq); - -/* - * Name indirection necessary because the ieee80211 code also has - * a function named "ieee80211_get_channel", so if you include - * cfg80211's header file you get cfg80211's version, if you try - * to include both header files you'll (rightfully!) get a symbol - * clash. - */ -extern struct ieee80211_channel *__ieee80211_get_channel(struct wiphy *wiphy, - int freq); -/** - * ieee80211_get_channel - get channel struct from wiphy for specified frequency - * @wiphy: the struct wiphy to get the channel for - * @freq: the center frequency of the channel - */ -static inline struct ieee80211_channel * -ieee80211_get_channel(struct wiphy *wiphy, int freq) -{ - return __ieee80211_get_channel(wiphy, freq); -} - -/** - * ieee80211_get_response_rate - get basic rate for a given rate - * - * @sband: the band to look for rates in - * @basic_rates: bitmap of basic rates - * @bitrate: the bitrate for which to find the basic rate - * - * This function returns the basic rate corresponding to a given - * bitrate, that is the next lower bitrate contained in the basic - * rate map, which is, for this function, given as a bitmap of - * indices of rates in the band's bitrate table. - */ -struct ieee80211_rate * -ieee80211_get_response_rate(struct ieee80211_supported_band *sband, - u32 basic_rates, int bitrate); - -/* - * Radiotap parsing functions -- for controlled injection support - * - * Implemented in net/wireless/radiotap.c - * Documentation in Documentation/networking/radiotap-headers.txt - */ - -struct radiotap_align_size { - uint8_t align:4, size:4; -}; - -struct ieee80211_radiotap_namespace { - const struct radiotap_align_size *align_size; - int n_bits; - uint32_t oui; - uint8_t subns; -}; - -struct ieee80211_radiotap_vendor_namespaces { - const struct ieee80211_radiotap_namespace *ns; - int n_ns; -}; - -/** - * struct ieee80211_radiotap_iterator - tracks walk thru present radiotap args - * @this_arg_index: index of current arg, valid after each successful call - * to ieee80211_radiotap_iterator_next() - * @this_arg: pointer to current radiotap arg; it is valid after each - * call to ieee80211_radiotap_iterator_next() but also after - * ieee80211_radiotap_iterator_init() where it will point to - * the beginning of the actual data portion - * @this_arg_size: length of the current arg, for convenience - * @current_namespace: pointer to the current namespace definition - * (or internally %NULL if the current namespace is unknown) - * @is_radiotap_ns: indicates whether the current namespace is the default - * radiotap namespace or not - * - * @_rtheader: pointer to the radiotap header we are walking through - * @_max_length: length of radiotap header in cpu byte ordering - * @_arg_index: next argument index - * @_arg: next argument pointer - * @_next_bitmap: internal pointer to next present u32 - * @_bitmap_shifter: internal shifter for curr u32 bitmap, b0 set == arg present - * @_vns: vendor namespace definitions - * @_next_ns_data: beginning of the next namespace's data - * @_reset_on_ext: internal; reset the arg index to 0 when going to the - * next bitmap word - * - * Describes the radiotap parser state. Fields prefixed with an underscore - * must not be used by users of the parser, only by the parser internally. - */ - -struct ieee80211_radiotap_iterator { - struct ieee80211_radiotap_header *_rtheader; - const struct ieee80211_radiotap_vendor_namespaces *_vns; - const struct ieee80211_radiotap_namespace *current_namespace; - - unsigned char *_arg, *_next_ns_data; - __le32 *_next_bitmap; - - unsigned char *this_arg; - int this_arg_index; - int this_arg_size; - - int is_radiotap_ns; - - int _max_length; - int _arg_index; - uint32_t _bitmap_shifter; - int _reset_on_ext; -}; - -extern int ieee80211_radiotap_iterator_init( - struct ieee80211_radiotap_iterator *iterator, - struct ieee80211_radiotap_header *radiotap_header, - int max_length, const struct ieee80211_radiotap_vendor_namespaces *vns); - -extern int ieee80211_radiotap_iterator_next( - struct ieee80211_radiotap_iterator *iterator); - - -extern const unsigned char rfc1042_header[6]; -extern const unsigned char bridge_tunnel_header[6]; - -/** - * ieee80211_get_hdrlen_from_skb - get header length from data - * - * Given an skb with a raw 802.11 header at the data pointer this function - * returns the 802.11 header length in bytes (not including encryption - * headers). If the data in the sk_buff is too short to contain a valid 802.11 - * header the function returns 0. - * - * @skb: the frame - */ -unsigned int ieee80211_get_hdrlen_from_skb(const struct sk_buff *skb); - -/** - * ieee80211_hdrlen - get header length in bytes from frame control - * @fc: frame control field in little-endian format - */ -unsigned int __attribute_const__ ieee80211_hdrlen(__le16 fc); - -/** - * DOC: Data path helpers - * - * In addition to generic utilities, cfg80211 also offers - * functions that help implement the data path for devices - * that do not do the 802.11/802.3 conversion on the device. - */ - -/** - * ieee80211_data_to_8023 - convert an 802.11 data frame to 802.3 - * @skb: the 802.11 data frame - * @addr: the device MAC address - * @iftype: the virtual interface type - */ -int ieee80211_data_to_8023(struct sk_buff *skb, const u8 *addr, - enum nl80211_iftype iftype); - -/** - * ieee80211_data_from_8023 - convert an 802.3 frame to 802.11 - * @skb: the 802.3 frame - * @addr: the device MAC address - * @iftype: the virtual interface type - * @bssid: the network bssid (used only for iftype STATION and ADHOC) - * @qos: build 802.11 QoS data frame - */ -int ieee80211_data_from_8023(struct sk_buff *skb, const u8 *addr, - enum nl80211_iftype iftype, u8 *bssid, bool qos); - -/** - * ieee80211_amsdu_to_8023s - decode an IEEE 802.11n A-MSDU frame - * - * Decode an IEEE 802.11n A-MSDU frame and convert it to a list of - * 802.3 frames. The @list will be empty if the decode fails. The - * @skb is consumed after the function returns. - * - * @skb: The input IEEE 802.11n A-MSDU frame. - * @list: The output list of 802.3 frames. It must be allocated and - * initialized by by the caller. - * @addr: The device MAC address. - * @iftype: The device interface type. - * @extra_headroom: The hardware extra headroom for SKBs in the @list. - * @has_80211_header: Set it true if SKB is with IEEE 802.11 header. - */ -void ieee80211_amsdu_to_8023s(struct sk_buff *skb, struct sk_buff_head *list, - const u8 *addr, enum nl80211_iftype iftype, - const unsigned int extra_headroom, - bool has_80211_header); - -/** - * cfg80211_classify8021d - determine the 802.1p/1d tag for a data frame - * @skb: the data frame - */ -unsigned int cfg80211_classify8021d(struct sk_buff *skb); - -/** - * cfg80211_find_ie - find information element in data - * - * @eid: element ID - * @ies: data consisting of IEs - * @len: length of data - * - * This function will return %NULL if the element ID could - * not be found or if the element is invalid (claims to be - * longer than the given data), or a pointer to the first byte - * of the requested element, that is the byte containing the - * element ID. There are no checks on the element length - * other than having to fit into the given data. - */ -const u8 *cfg80211_find_ie(u8 eid, const u8 *ies, int len); - -/** - * cfg80211_find_vendor_ie - find vendor specific information element in data - * - * @oui: vendor OUI - * @oui_type: vendor-specific OUI type - * @ies: data consisting of IEs - * @len: length of data - * - * This function will return %NULL if the vendor specific element ID - * could not be found or if the element is invalid (claims to be - * longer than the given data), or a pointer to the first byte - * of the requested element, that is the byte containing the - * element ID. There are no checks on the element length - * other than having to fit into the given data. - */ -const u8 *cfg80211_find_vendor_ie(unsigned int oui, u8 oui_type, - const u8 *ies, int len); - -/** - * DOC: Regulatory enforcement infrastructure - * - * TODO - */ - -/** - * regulatory_hint - driver hint to the wireless core a regulatory domain - * @wiphy: the wireless device giving the hint (used only for reporting - * conflicts) - * @alpha2: the ISO/IEC 3166 alpha2 the driver claims its regulatory domain - * should be in. If @rd is set this should be NULL. Note that if you - * set this to NULL you should still set rd->alpha2 to some accepted - * alpha2. - * - * Wireless drivers can use this function to hint to the wireless core - * what it believes should be the current regulatory domain by - * giving it an ISO/IEC 3166 alpha2 country code it knows its regulatory - * domain should be in or by providing a completely build regulatory domain. - * If the driver provides an ISO/IEC 3166 alpha2 userspace will be queried - * for a regulatory domain structure for the respective country. - * - * The wiphy must have been registered to cfg80211 prior to this call. - * For cfg80211 drivers this means you must first use wiphy_register(), - * for mac80211 drivers you must first use ieee80211_register_hw(). - * - * Drivers should check the return value, its possible you can get - * an -ENOMEM. - */ -extern int regulatory_hint(struct wiphy *wiphy, const char *alpha2); - -/** - * wiphy_apply_custom_regulatory - apply a custom driver regulatory domain - * @wiphy: the wireless device we want to process the regulatory domain on - * @regd: the custom regulatory domain to use for this wiphy - * - * Drivers can sometimes have custom regulatory domains which do not apply - * to a specific country. Drivers can use this to apply such custom regulatory - * domains. This routine must be called prior to wiphy registration. The - * custom regulatory domain will be trusted completely and as such previous - * default channel settings will be disregarded. If no rule is found for a - * channel on the regulatory domain the channel will be disabled. - */ -extern void wiphy_apply_custom_regulatory( - struct wiphy *wiphy, - const struct ieee80211_regdomain *regd); - -/** - * freq_reg_info - get regulatory information for the given frequency - * @wiphy: the wiphy for which we want to process this rule for - * @center_freq: Frequency in KHz for which we want regulatory information for - * @desired_bw_khz: the desired max bandwidth you want to use per - * channel. Note that this is still 20 MHz if you want to use HT40 - * as HT40 makes use of two channels for its 40 MHz width bandwidth. - * If set to 0 we'll assume you want the standard 20 MHz. - * @reg_rule: the regulatory rule which we have for this frequency - * - * Use this function to get the regulatory rule for a specific frequency on - * a given wireless device. If the device has a specific regulatory domain - * it wants to follow we respect that unless a country IE has been received - * and processed already. - * - * Returns 0 if it was able to find a valid regulatory rule which does - * apply to the given center_freq otherwise it returns non-zero. It will - * also return -ERANGE if we determine the given center_freq does not even have - * a regulatory rule for a frequency range in the center_freq's band. See - * freq_in_rule_band() for our current definition of a band -- this is purely - * subjective and right now its 802.11 specific. - */ -extern int freq_reg_info(struct wiphy *wiphy, - u32 center_freq, - u32 desired_bw_khz, - const struct ieee80211_reg_rule **reg_rule); - -/* - * callbacks for asynchronous cfg80211 methods, notification - * functions and BSS handling helpers - */ - -/** - * cfg80211_scan_done - notify that scan finished - * - * @request: the corresponding scan request - * @aborted: set to true if the scan was aborted for any reason, - * userspace will be notified of that - */ -void cfg80211_scan_done(struct cfg80211_scan_request *request, bool aborted); - -/** - * cfg80211_sched_scan_results - notify that new scan results are available - * - * @wiphy: the wiphy which got scheduled scan results - */ -void cfg80211_sched_scan_results(struct wiphy *wiphy); - -/** - * cfg80211_sched_scan_stopped - notify that the scheduled scan has stopped - * - * @wiphy: the wiphy on which the scheduled scan stopped - * - * The driver can call this function to inform cfg80211 that the - * scheduled scan had to be stopped, for whatever reason. The driver - * is then called back via the sched_scan_stop operation when done. - */ -void cfg80211_sched_scan_stopped(struct wiphy *wiphy); - -/** - * cfg80211_inform_bss_frame - inform cfg80211 of a received BSS frame - * - * @wiphy: the wiphy reporting the BSS - * @channel: The channel the frame was received on - * @mgmt: the management frame (probe response or beacon) - * @len: length of the management frame - * @signal: the signal strength, type depends on the wiphy's signal_type - * @gfp: context flags - * - * This informs cfg80211 that BSS information was found and - * the BSS should be updated/added. - * - * NOTE: Returns a referenced struct, must be released with cfg80211_put_bss()! - */ -struct cfg80211_bss * __must_check -cfg80211_inform_bss_frame(struct wiphy *wiphy, - struct ieee80211_channel *channel, - struct ieee80211_mgmt *mgmt, size_t len, - s32 signal, gfp_t gfp); - -/** - * cfg80211_inform_bss - inform cfg80211 of a new BSS - * - * @wiphy: the wiphy reporting the BSS - * @channel: The channel the frame was received on - * @bssid: the BSSID of the BSS - * @tsf: the TSF sent by the peer in the beacon/probe response (or 0) - * @capability: the capability field sent by the peer - * @beacon_interval: the beacon interval announced by the peer - * @ie: additional IEs sent by the peer - * @ielen: length of the additional IEs - * @signal: the signal strength, type depends on the wiphy's signal_type - * @gfp: context flags - * - * This informs cfg80211 that BSS information was found and - * the BSS should be updated/added. - * - * NOTE: Returns a referenced struct, must be released with cfg80211_put_bss()! - */ -struct cfg80211_bss * __must_check -cfg80211_inform_bss(struct wiphy *wiphy, - struct ieee80211_channel *channel, - const u8 *bssid, u64 tsf, u16 capability, - u16 beacon_interval, const u8 *ie, size_t ielen, - s32 signal, gfp_t gfp); - -struct cfg80211_bss *cfg80211_get_bss(struct wiphy *wiphy, - struct ieee80211_channel *channel, - const u8 *bssid, - const u8 *ssid, size_t ssid_len, - u16 capa_mask, u16 capa_val); -static inline struct cfg80211_bss * -cfg80211_get_ibss(struct wiphy *wiphy, - struct ieee80211_channel *channel, - const u8 *ssid, size_t ssid_len) -{ - return cfg80211_get_bss(wiphy, channel, NULL, ssid, ssid_len, - WLAN_CAPABILITY_IBSS, WLAN_CAPABILITY_IBSS); -} - -struct cfg80211_bss *cfg80211_get_mesh(struct wiphy *wiphy, - struct ieee80211_channel *channel, - const u8 *meshid, size_t meshidlen, - const u8 *meshcfg); -/** - * cfg80211_ref_bss - reference BSS struct - * @bss: the BSS struct to reference - * - * Increments the refcount of the given BSS struct. - */ -void cfg80211_ref_bss(struct cfg80211_bss *bss); - -/** - * cfg80211_put_bss - unref BSS struct - * @bss: the BSS struct - * - * Decrements the refcount of the given BSS struct. - */ -void cfg80211_put_bss(struct cfg80211_bss *bss); - -/** - * cfg80211_unlink_bss - unlink BSS from internal data structures - * @wiphy: the wiphy - * @bss: the bss to remove - * - * This function removes the given BSS from the internal data structures - * thereby making it no longer show up in scan results etc. Use this - * function when you detect a BSS is gone. Normally BSSes will also time - * out, so it is not necessary to use this function at all. - */ -void cfg80211_unlink_bss(struct wiphy *wiphy, struct cfg80211_bss *bss); - -/** - * cfg80211_send_rx_auth - notification of processed authentication - * @dev: network device - * @buf: authentication frame (header + body) - * @len: length of the frame data - * - * This function is called whenever an authentication has been processed in - * station mode. The driver is required to call either this function or - * cfg80211_send_auth_timeout() to indicate the result of cfg80211_ops::auth() - * call. This function may sleep. - */ -void cfg80211_send_rx_auth(struct net_device *dev, const u8 *buf, size_t len); - -/** - * cfg80211_send_auth_timeout - notification of timed out authentication - * @dev: network device - * @addr: The MAC address of the device with which the authentication timed out - * - * This function may sleep. - */ -void cfg80211_send_auth_timeout(struct net_device *dev, const u8 *addr); - -/** - * cfg80211_send_rx_assoc - notification of processed association - * @dev: network device - * @bss: the BSS struct association was requested for, the struct reference - * is owned by cfg80211 after this call - * @buf: (re)association response frame (header + body) - * @len: length of the frame data - * - * This function is called whenever a (re)association response has been - * processed in station mode. The driver is required to call either this - * function or cfg80211_send_assoc_timeout() to indicate the result of - * cfg80211_ops::assoc() call. This function may sleep. - */ -void cfg80211_send_rx_assoc(struct net_device *dev, struct cfg80211_bss *bss, - const u8 *buf, size_t len); - -/** - * cfg80211_send_assoc_timeout - notification of timed out association - * @dev: network device - * @addr: The MAC address of the device with which the association timed out - * - * This function may sleep. - */ -void cfg80211_send_assoc_timeout(struct net_device *dev, const u8 *addr); - -/** - * cfg80211_send_deauth - notification of processed deauthentication - * @dev: network device - * @buf: deauthentication frame (header + body) - * @len: length of the frame data - * - * This function is called whenever deauthentication has been processed in - * station mode. This includes both received deauthentication frames and - * locally generated ones. This function may sleep. - */ -void cfg80211_send_deauth(struct net_device *dev, const u8 *buf, size_t len); - -/** - * __cfg80211_send_deauth - notification of processed deauthentication - * @dev: network device - * @buf: deauthentication frame (header + body) - * @len: length of the frame data - * - * Like cfg80211_send_deauth(), but doesn't take the wdev lock. - */ -void __cfg80211_send_deauth(struct net_device *dev, const u8 *buf, size_t len); - -/** - * cfg80211_send_disassoc - notification of processed disassociation - * @dev: network device - * @buf: disassociation response frame (header + body) - * @len: length of the frame data - * - * This function is called whenever disassociation has been processed in - * station mode. This includes both received disassociation frames and locally - * generated ones. This function may sleep. - */ -void cfg80211_send_disassoc(struct net_device *dev, const u8 *buf, size_t len); - -/** - * __cfg80211_send_disassoc - notification of processed disassociation - * @dev: network device - * @buf: disassociation response frame (header + body) - * @len: length of the frame data - * - * Like cfg80211_send_disassoc(), but doesn't take the wdev lock. - */ -void __cfg80211_send_disassoc(struct net_device *dev, const u8 *buf, - size_t len); - -/** - * cfg80211_send_unprot_deauth - notification of unprotected deauthentication - * @dev: network device - * @buf: deauthentication frame (header + body) - * @len: length of the frame data - * - * This function is called whenever a received Deauthentication frame has been - * dropped in station mode because of MFP being used but the Deauthentication - * frame was not protected. This function may sleep. - */ -void cfg80211_send_unprot_deauth(struct net_device *dev, const u8 *buf, - size_t len); - -/** - * cfg80211_send_unprot_disassoc - notification of unprotected disassociation - * @dev: network device - * @buf: disassociation frame (header + body) - * @len: length of the frame data - * - * This function is called whenever a received Disassociation frame has been - * dropped in station mode because of MFP being used but the Disassociation - * frame was not protected. This function may sleep. - */ -void cfg80211_send_unprot_disassoc(struct net_device *dev, const u8 *buf, - size_t len); - -/** - * cfg80211_michael_mic_failure - notification of Michael MIC failure (TKIP) - * @dev: network device - * @addr: The source MAC address of the frame - * @key_type: The key type that the received frame used - * @key_id: Key identifier (0..3). Can be -1 if missing. - * @tsc: The TSC value of the frame that generated the MIC failure (6 octets) - * @gfp: allocation flags - * - * This function is called whenever the local MAC detects a MIC failure in a - * received frame. This matches with MLME-MICHAELMICFAILURE.indication() - * primitive. - */ -void cfg80211_michael_mic_failure(struct net_device *dev, const u8 *addr, - enum nl80211_key_type key_type, int key_id, - const u8 *tsc, gfp_t gfp); - -/** - * cfg80211_ibss_joined - notify cfg80211 that device joined an IBSS - * - * @dev: network device - * @bssid: the BSSID of the IBSS joined - * @gfp: allocation flags - * - * This function notifies cfg80211 that the device joined an IBSS or - * switched to a different BSSID. Before this function can be called, - * either a beacon has to have been received from the IBSS, or one of - * the cfg80211_inform_bss{,_frame} functions must have been called - * with the locally generated beacon -- this guarantees that there is - * always a scan result for this IBSS. cfg80211 will handle the rest. - */ -void cfg80211_ibss_joined(struct net_device *dev, const u8 *bssid, gfp_t gfp); - -/** - * cfg80211_notify_new_candidate - notify cfg80211 of a new mesh peer candidate - * - * @dev: network device - * @macaddr: the MAC address of the new candidate - * @ie: information elements advertised by the peer candidate - * @ie_len: lenght of the information elements buffer - * @gfp: allocation flags - * - * This function notifies cfg80211 that the mesh peer candidate has been - * detected, most likely via a beacon or, less likely, via a probe response. - * cfg80211 then sends a notification to userspace. - */ -void cfg80211_notify_new_peer_candidate(struct net_device *dev, - const u8 *macaddr, const u8 *ie, u8 ie_len, gfp_t gfp); - -/** - * DOC: RFkill integration - * - * RFkill integration in cfg80211 is almost invisible to drivers, - * as cfg80211 automatically registers an rfkill instance for each - * wireless device it knows about. Soft kill is also translated - * into disconnecting and turning all interfaces off, drivers are - * expected to turn off the device when all interfaces are down. - * - * However, devices may have a hard RFkill line, in which case they - * also need to interact with the rfkill subsystem, via cfg80211. - * They can do this with a few helper functions documented here. - */ - -/** - * wiphy_rfkill_set_hw_state - notify cfg80211 about hw block state - * @wiphy: the wiphy - * @blocked: block status - */ -void wiphy_rfkill_set_hw_state(struct wiphy *wiphy, bool blocked); - -/** - * wiphy_rfkill_start_polling - start polling rfkill - * @wiphy: the wiphy - */ -void wiphy_rfkill_start_polling(struct wiphy *wiphy); - -/** - * wiphy_rfkill_stop_polling - stop polling rfkill - * @wiphy: the wiphy - */ -void wiphy_rfkill_stop_polling(struct wiphy *wiphy); - -#ifdef CONFIG_NL80211_TESTMODE -/** - * DOC: Test mode - * - * Test mode is a set of utility functions to allow drivers to - * interact with driver-specific tools to aid, for instance, - * factory programming. - * - * This chapter describes how drivers interact with it, for more - * information see the nl80211 book's chapter on it. - */ - -/** - * cfg80211_testmode_alloc_reply_skb - allocate testmode reply - * @wiphy: the wiphy - * @approxlen: an upper bound of the length of the data that will - * be put into the skb - * - * This function allocates and pre-fills an skb for a reply to - * the testmode command. Since it is intended for a reply, calling - * it outside of the @testmode_cmd operation is invalid. - * - * The returned skb (or %NULL if any errors happen) is pre-filled - * with the wiphy index and set up in a way that any data that is - * put into the skb (with skb_put(), nla_put() or similar) will end - * up being within the %NL80211_ATTR_TESTDATA attribute, so all that - * needs to be done with the skb is adding data for the corresponding - * userspace tool which can then read that data out of the testdata - * attribute. You must not modify the skb in any other way. - * - * When done, call cfg80211_testmode_reply() with the skb and return - * its error code as the result of the @testmode_cmd operation. - */ -struct sk_buff *cfg80211_testmode_alloc_reply_skb(struct wiphy *wiphy, - int approxlen); - -/** - * cfg80211_testmode_reply - send the reply skb - * @skb: The skb, must have been allocated with - * cfg80211_testmode_alloc_reply_skb() - * - * Returns an error code or 0 on success, since calling this - * function will usually be the last thing before returning - * from the @testmode_cmd you should return the error code. - * Note that this function consumes the skb regardless of the - * return value. - */ -int cfg80211_testmode_reply(struct sk_buff *skb); - -/** - * cfg80211_testmode_alloc_event_skb - allocate testmode event - * @wiphy: the wiphy - * @approxlen: an upper bound of the length of the data that will - * be put into the skb - * @gfp: allocation flags - * - * This function allocates and pre-fills an skb for an event on the - * testmode multicast group. - * - * The returned skb (or %NULL if any errors happen) is set up in the - * same way as with cfg80211_testmode_alloc_reply_skb() but prepared - * for an event. As there, you should simply add data to it that will - * then end up in the %NL80211_ATTR_TESTDATA attribute. Again, you must - * not modify the skb in any other way. - * - * When done filling the skb, call cfg80211_testmode_event() with the - * skb to send the event. - */ -struct sk_buff *cfg80211_testmode_alloc_event_skb(struct wiphy *wiphy, - int approxlen, gfp_t gfp); - -/** - * cfg80211_testmode_event - send the event - * @skb: The skb, must have been allocated with - * cfg80211_testmode_alloc_event_skb() - * @gfp: allocation flags - * - * This function sends the given @skb, which must have been allocated - * by cfg80211_testmode_alloc_event_skb(), as an event. It always - * consumes it. - */ -void cfg80211_testmode_event(struct sk_buff *skb, gfp_t gfp); - -#define CFG80211_TESTMODE_CMD(cmd) .testmode_cmd = (cmd), -#define CFG80211_TESTMODE_DUMP(cmd) .testmode_dump = (cmd), -#else -#define CFG80211_TESTMODE_CMD(cmd) -#define CFG80211_TESTMODE_DUMP(cmd) -#endif - -/** - * cfg80211_connect_result - notify cfg80211 of connection result - * - * @dev: network device - * @bssid: the BSSID of the AP - * @req_ie: association request IEs (maybe be %NULL) - * @req_ie_len: association request IEs length - * @resp_ie: association response IEs (may be %NULL) - * @resp_ie_len: assoc response IEs length - * @status: status code, 0 for successful connection, use - * %WLAN_STATUS_UNSPECIFIED_FAILURE if your device cannot give you - * the real status code for failures. - * @gfp: allocation flags - * - * It should be called by the underlying driver whenever connect() has - * succeeded. - */ -void cfg80211_connect_result(struct net_device *dev, const u8 *bssid, - const u8 *req_ie, size_t req_ie_len, - const u8 *resp_ie, size_t resp_ie_len, - u16 status, gfp_t gfp); - -/** - * cfg80211_roamed - notify cfg80211 of roaming - * - * @dev: network device - * @channel: the channel of the new AP - * @bssid: the BSSID of the new AP - * @req_ie: association request IEs (maybe be %NULL) - * @req_ie_len: association request IEs length - * @resp_ie: association response IEs (may be %NULL) - * @resp_ie_len: assoc response IEs length - * @gfp: allocation flags - * - * It should be called by the underlying driver whenever it roamed - * from one AP to another while connected. - */ -void cfg80211_roamed(struct net_device *dev, - struct ieee80211_channel *channel, - const u8 *bssid, - const u8 *req_ie, size_t req_ie_len, - const u8 *resp_ie, size_t resp_ie_len, gfp_t gfp); - -/** - * cfg80211_roamed_bss - notify cfg80211 of roaming - * - * @dev: network device - * @bss: entry of bss to which STA got roamed - * @req_ie: association request IEs (maybe be %NULL) - * @req_ie_len: association request IEs length - * @resp_ie: association response IEs (may be %NULL) - * @resp_ie_len: assoc response IEs length - * @gfp: allocation flags - * - * This is just a wrapper to notify cfg80211 of roaming event with driver - * passing bss to avoid a race in timeout of the bss entry. It should be - * called by the underlying driver whenever it roamed from one AP to another - * while connected. Drivers which have roaming implemented in firmware - * may use this function to avoid a race in bss entry timeout where the bss - * entry of the new AP is seen in the driver, but gets timed out by the time - * it is accessed in __cfg80211_roamed() due to delay in scheduling - * rdev->event_work. In case of any failures, the reference is released - * either in cfg80211_roamed_bss() or in __cfg80211_romed(), Otherwise, - * it will be released while diconneting from the current bss. - */ -void cfg80211_roamed_bss(struct net_device *dev, struct cfg80211_bss *bss, - const u8 *req_ie, size_t req_ie_len, - const u8 *resp_ie, size_t resp_ie_len, gfp_t gfp); - -/** - * cfg80211_disconnected - notify cfg80211 that connection was dropped - * - * @dev: network device - * @ie: information elements of the deauth/disassoc frame (may be %NULL) - * @ie_len: length of IEs - * @reason: reason code for the disconnection, set it to 0 if unknown - * @gfp: allocation flags - * - * After it calls this function, the driver should enter an idle state - * and not try to connect to any AP any more. - */ -void cfg80211_disconnected(struct net_device *dev, u16 reason, - u8 *ie, size_t ie_len, gfp_t gfp); - -/** - * cfg80211_ready_on_channel - notification of remain_on_channel start - * @dev: network device - * @cookie: the request cookie - * @chan: The current channel (from remain_on_channel request) - * @channel_type: Channel type - * @duration: Duration in milliseconds that the driver intents to remain on the - * channel - * @gfp: allocation flags - */ -void cfg80211_ready_on_channel(struct net_device *dev, u64 cookie, - struct ieee80211_channel *chan, - enum nl80211_channel_type channel_type, - unsigned int duration, gfp_t gfp); - -/** - * cfg80211_remain_on_channel_expired - remain_on_channel duration expired - * @dev: network device - * @cookie: the request cookie - * @chan: The current channel (from remain_on_channel request) - * @channel_type: Channel type - * @gfp: allocation flags - */ -void cfg80211_remain_on_channel_expired(struct net_device *dev, - u64 cookie, - struct ieee80211_channel *chan, - enum nl80211_channel_type channel_type, - gfp_t gfp); - - -/** - * cfg80211_new_sta - notify userspace about station - * - * @dev: the netdev - * @mac_addr: the station's address - * @sinfo: the station information - * @gfp: allocation flags - */ -void cfg80211_new_sta(struct net_device *dev, const u8 *mac_addr, - struct station_info *sinfo, gfp_t gfp); - -/** - * cfg80211_del_sta - notify userspace about deletion of a station - * - * @dev: the netdev - * @mac_addr: the station's address - * @gfp: allocation flags - */ -void cfg80211_del_sta(struct net_device *dev, const u8 *mac_addr, gfp_t gfp); - -/** - * cfg80211_rx_mgmt - notification of received, unprocessed management frame - * @dev: network device - * @freq: Frequency on which the frame was received in MHz - * @sig_dbm: signal strength in mBm, or 0 if unknown - * @buf: Management frame (header + body) - * @len: length of the frame data - * @gfp: context flags - * - * Returns %true if a user space application has registered for this frame. - * For action frames, that makes it responsible for rejecting unrecognized - * action frames; %false otherwise, in which case for action frames the - * driver is responsible for rejecting the frame. - * - * This function is called whenever an Action frame is received for a station - * mode interface, but is not processed in kernel. - */ -bool cfg80211_rx_mgmt(struct net_device *dev, int freq, int sig_dbm, - const u8 *buf, size_t len, gfp_t gfp); - -/** - * cfg80211_mgmt_tx_status - notification of TX status for management frame - * @dev: network device - * @cookie: Cookie returned by cfg80211_ops::mgmt_tx() - * @buf: Management frame (header + body) - * @len: length of the frame data - * @ack: Whether frame was acknowledged - * @gfp: context flags - * - * This function is called whenever a management frame was requested to be - * transmitted with cfg80211_ops::mgmt_tx() to report the TX status of the - * transmission attempt. - */ -void cfg80211_mgmt_tx_status(struct net_device *dev, u64 cookie, - const u8 *buf, size_t len, bool ack, gfp_t gfp); - - -/** - * cfg80211_cqm_rssi_notify - connection quality monitoring rssi event - * @dev: network device - * @rssi_event: the triggered RSSI event - * @gfp: context flags - * - * This function is called when a configured connection quality monitoring - * rssi threshold reached event occurs. - */ -void cfg80211_cqm_rssi_notify(struct net_device *dev, - enum nl80211_cqm_rssi_threshold_event rssi_event, - gfp_t gfp); - -/** - * cfg80211_cqm_pktloss_notify - notify userspace about packetloss to peer - * @dev: network device - * @peer: peer's MAC address - * @num_packets: how many packets were lost -- should be a fixed threshold - * but probably no less than maybe 50, or maybe a throughput dependent - * threshold (to account for temporary interference) - * @gfp: context flags - */ -void cfg80211_cqm_pktloss_notify(struct net_device *dev, - const u8 *peer, u32 num_packets, gfp_t gfp); - -/** - * cfg80211_gtk_rekey_notify - notify userspace about driver rekeying - * @dev: network device - * @bssid: BSSID of AP (to avoid races) - * @replay_ctr: new replay counter - * @gfp: allocation flags - */ -void cfg80211_gtk_rekey_notify(struct net_device *dev, const u8 *bssid, - const u8 *replay_ctr, gfp_t gfp); - -/** - * cfg80211_pmksa_candidate_notify - notify about PMKSA caching candidate - * @dev: network device - * @index: candidate index (the smaller the index, the higher the priority) - * @bssid: BSSID of AP - * @preauth: Whether AP advertises support for RSN pre-authentication - * @gfp: allocation flags - */ -void cfg80211_pmksa_candidate_notify(struct net_device *dev, int index, - const u8 *bssid, bool preauth, gfp_t gfp); - -/** - * cfg80211_rx_spurious_frame - inform userspace about a spurious frame - * @dev: The device the frame matched to - * @addr: the transmitter address - * @gfp: context flags - * - * This function is used in AP mode (only!) to inform userspace that - * a spurious class 3 frame was received, to be able to deauth the - * sender. - * Returns %true if the frame was passed to userspace (or this failed - * for a reason other than not having a subscription.) - */ -bool cfg80211_rx_spurious_frame(struct net_device *dev, - const u8 *addr, gfp_t gfp); - -/** - * cfg80211_rx_unexpected_4addr_frame - inform about unexpected WDS frame - * @dev: The device the frame matched to - * @addr: the transmitter address - * @gfp: context flags - * - * This function is used in AP mode (only!) to inform userspace that - * an associated station sent a 4addr frame but that wasn't expected. - * It is allowed and desirable to send this event only once for each - * station to avoid event flooding. - * Returns %true if the frame was passed to userspace (or this failed - * for a reason other than not having a subscription.) - */ -bool cfg80211_rx_unexpected_4addr_frame(struct net_device *dev, - const u8 *addr, gfp_t gfp); - -/** - * cfg80211_probe_status - notify userspace about probe status - * @dev: the device the probe was sent on - * @addr: the address of the peer - * @cookie: the cookie filled in @probe_client previously - * @acked: indicates whether probe was acked or not - * @gfp: allocation flags - */ -void cfg80211_probe_status(struct net_device *dev, const u8 *addr, - u64 cookie, bool acked, gfp_t gfp); - -/** - * cfg80211_report_obss_beacon - report beacon from other APs - * @wiphy: The wiphy that received the beacon - * @frame: the frame - * @len: length of the frame - * @freq: frequency the frame was received on - * @sig_dbm: signal strength in mBm, or 0 if unknown - * @gfp: allocation flags - * - * Use this function to report to userspace when a beacon was - * received. It is not useful to call this when there is no - * netdev that is in AP/GO mode. - */ -void cfg80211_report_obss_beacon(struct wiphy *wiphy, - const u8 *frame, size_t len, - int freq, int sig_dbm, gfp_t gfp); - -/* - * cfg80211_can_beacon_sec_chan - test if ht40 on extension channel can be used - * @wiphy: the wiphy - * @chan: main channel - * @channel_type: HT mode - */ -int cfg80211_can_beacon_sec_chan(struct wiphy *wiphy, - struct ieee80211_channel *chan, - enum nl80211_channel_type channel_type); - -/* - * cfg80211_calculate_bitrate - calculate actual bitrate (in 100Kbps units) - * @rate: given rate_info to calculate bitrate from - * - * return 0 if MCS index >= 32 - */ -u16 cfg80211_calculate_bitrate(struct rate_info *rate); - -/* Logging, debugging and troubleshooting/diagnostic helpers. */ - -/* wiphy_printk helpers, similar to dev_printk */ - -#define wiphy_printk(level, wiphy, format, args...) \ - dev_printk(level, &(wiphy)->dev, format, ##args) -#define wiphy_emerg(wiphy, format, args...) \ - dev_emerg(&(wiphy)->dev, format, ##args) -#define wiphy_alert(wiphy, format, args...) \ - dev_alert(&(wiphy)->dev, format, ##args) -#define wiphy_crit(wiphy, format, args...) \ - dev_crit(&(wiphy)->dev, format, ##args) -#define wiphy_err(wiphy, format, args...) \ - dev_err(&(wiphy)->dev, format, ##args) -#define wiphy_warn(wiphy, format, args...) \ - dev_warn(&(wiphy)->dev, format, ##args) -#define wiphy_notice(wiphy, format, args...) \ - dev_notice(&(wiphy)->dev, format, ##args) -#define wiphy_info(wiphy, format, args...) \ - dev_info(&(wiphy)->dev, format, ##args) - -#define wiphy_debug(wiphy, format, args...) \ - wiphy_printk(KERN_DEBUG, wiphy, format, ##args) - -#define wiphy_dbg(wiphy, format, args...) \ - dev_dbg(&(wiphy)->dev, format, ##args) - -#if defined(VERBOSE_DEBUG) -#define wiphy_vdbg wiphy_dbg -#else -#define wiphy_vdbg(wiphy, format, args...) \ -({ \ - if (0) \ - wiphy_printk(KERN_DEBUG, wiphy, format, ##args); \ - 0; \ -}) -#endif - -/* - * wiphy_WARN() acts like wiphy_printk(), but with the key difference - * of using a WARN/WARN_ON to get the message out, including the - * file/line information and a backtrace. - */ -#define wiphy_WARN(wiphy, format, args...) \ - WARN(1, "wiphy: %s\n" format, wiphy_name(wiphy), ##args); - -#endif /* __NET_CFG80211_H */ diff --git a/openairITS/mac/DOT11/include/net/ieee80211_radiotap.h b/openairITS/mac/DOT11/include/net/ieee80211_radiotap.h deleted file mode 100644 index 0484e6d51e..0000000000 --- a/openairITS/mac/DOT11/include/net/ieee80211_radiotap.h +++ /dev/null @@ -1,294 +0,0 @@ -/* - * Copyright (c) 2003, 2004 David Young. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. The name of David Young may not be used to endorse or promote - * products derived from this software without specific prior - * written permission. - * - * THIS SOFTWARE IS PROVIDED BY DAVID YOUNG ``AS IS'' AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, - * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A - * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL DAVID - * YOUNG BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED - * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - */ - -/* - * Modifications to fit into the linux IEEE 802.11 stack, - * Mike Kershaw (dragorn@kismetwireless.net) - */ - -#ifndef IEEE80211RADIOTAP_H -#define IEEE80211RADIOTAP_H - -#include -#include -#include - -/* Base version of the radiotap packet header data */ -#define PKTHDR_RADIOTAP_VERSION 0 - -/* A generic radio capture format is desirable. There is one for - * Linux, but it is neither rigidly defined (there were not even - * units given for some fields) nor easily extensible. - * - * I suggest the following extensible radio capture format. It is - * based on a bitmap indicating which fields are present. - * - * I am trying to describe precisely what the application programmer - * should expect in the following, and for that reason I tell the - * units and origin of each measurement (where it applies), or else I - * use sufficiently weaselly language ("is a monotonically nondecreasing - * function of...") that I cannot set false expectations for lawyerly - * readers. - */ - -/* - * The radio capture header precedes the 802.11 header. - * All data in the header is little endian on all platforms. - */ -struct ieee80211_radiotap_header { - u8 it_version; /* Version 0. Only increases - * for drastic changes, - * introduction of compatible - * new fields does not count. - */ - u8 it_pad; - __le16 it_len; /* length of the whole - * header in bytes, including - * it_version, it_pad, - * it_len, and data fields. - */ - __le32 it_present; /* A bitmap telling which - * fields are present. Set bit 31 - * (0x80000000) to extend the - * bitmap by another 32 bits. - * Additional extensions are made - * by setting bit 31. - */ -} __packed; - -/* Name Data type Units - * ---- --------- ----- - * - * IEEE80211_RADIOTAP_TSFT __le64 microseconds - * - * Value in microseconds of the MAC's 64-bit 802.11 Time - * Synchronization Function timer when the first bit of the - * MPDU arrived at the MAC. For received frames, only. - * - * IEEE80211_RADIOTAP_CHANNEL 2 x __le16 MHz, bitmap - * - * Tx/Rx frequency in MHz, followed by flags (see below). - * - * IEEE80211_RADIOTAP_FHSS __le16 see below - * - * For frequency-hopping radios, the hop set (first byte) - * and pattern (second byte). - * - * IEEE80211_RADIOTAP_RATE u8 500kb/s - * - * Tx/Rx data rate - * - * IEEE80211_RADIOTAP_DBM_ANTSIGNAL s8 decibels from - * one milliwatt (dBm) - * - * RF signal power at the antenna, decibel difference from - * one milliwatt. - * - * IEEE80211_RADIOTAP_DBM_ANTNOISE s8 decibels from - * one milliwatt (dBm) - * - * RF noise power at the antenna, decibel difference from one - * milliwatt. - * - * IEEE80211_RADIOTAP_DB_ANTSIGNAL u8 decibel (dB) - * - * RF signal power at the antenna, decibel difference from an - * arbitrary, fixed reference. - * - * IEEE80211_RADIOTAP_DB_ANTNOISE u8 decibel (dB) - * - * RF noise power at the antenna, decibel difference from an - * arbitrary, fixed reference point. - * - * IEEE80211_RADIOTAP_LOCK_QUALITY __le16 unitless - * - * Quality of Barker code lock. Unitless. Monotonically - * nondecreasing with "better" lock strength. Called "Signal - * Quality" in datasheets. (Is there a standard way to measure - * this?) - * - * IEEE80211_RADIOTAP_TX_ATTENUATION __le16 unitless - * - * Transmit power expressed as unitless distance from max - * power set at factory calibration. 0 is max power. - * Monotonically nondecreasing with lower power levels. - * - * IEEE80211_RADIOTAP_DB_TX_ATTENUATION __le16 decibels (dB) - * - * Transmit power expressed as decibel distance from max power - * set at factory calibration. 0 is max power. Monotonically - * nondecreasing with lower power levels. - * - * IEEE80211_RADIOTAP_DBM_TX_POWER s8 decibels from - * one milliwatt (dBm) - * - * Transmit power expressed as dBm (decibels from a 1 milliwatt - * reference). This is the absolute power level measured at - * the antenna port. - * - * IEEE80211_RADIOTAP_FLAGS u8 bitmap - * - * Properties of transmitted and received frames. See flags - * defined below. - * - * IEEE80211_RADIOTAP_ANTENNA u8 antenna index - * - * Unitless indication of the Rx/Tx antenna for this packet. - * The first antenna is antenna 0. - * - * IEEE80211_RADIOTAP_RX_FLAGS __le16 bitmap - * - * Properties of received frames. See flags defined below. - * - * IEEE80211_RADIOTAP_TX_FLAGS __le16 bitmap - * - * Properties of transmitted frames. See flags defined below. - * - * IEEE80211_RADIOTAP_RTS_RETRIES u8 data - * - * Number of rts retries a transmitted frame used. - * - * IEEE80211_RADIOTAP_DATA_RETRIES u8 data - * - * Number of unicast retries a transmitted frame used. - * - * IEEE80211_RADIOTAP_MCS u8, u8, u8 unitless - * - * Contains a bitmap of known fields/flags, the flags, and - * the MCS index. - * - */ -enum ieee80211_radiotap_type { - IEEE80211_RADIOTAP_TSFT = 0, - IEEE80211_RADIOTAP_FLAGS = 1, - IEEE80211_RADIOTAP_RATE = 2, - IEEE80211_RADIOTAP_CHANNEL = 3, - IEEE80211_RADIOTAP_FHSS = 4, - IEEE80211_RADIOTAP_DBM_ANTSIGNAL = 5, - IEEE80211_RADIOTAP_DBM_ANTNOISE = 6, - IEEE80211_RADIOTAP_LOCK_QUALITY = 7, - IEEE80211_RADIOTAP_TX_ATTENUATION = 8, - IEEE80211_RADIOTAP_DB_TX_ATTENUATION = 9, - IEEE80211_RADIOTAP_DBM_TX_POWER = 10, - IEEE80211_RADIOTAP_ANTENNA = 11, - IEEE80211_RADIOTAP_DB_ANTSIGNAL = 12, - IEEE80211_RADIOTAP_DB_ANTNOISE = 13, - IEEE80211_RADIOTAP_RX_FLAGS = 14, - IEEE80211_RADIOTAP_TX_FLAGS = 15, - IEEE80211_RADIOTAP_RTS_RETRIES = 16, - IEEE80211_RADIOTAP_DATA_RETRIES = 17, - - IEEE80211_RADIOTAP_MCS = 19, - - /* valid in every it_present bitmap, even vendor namespaces */ - IEEE80211_RADIOTAP_RADIOTAP_NAMESPACE = 29, - IEEE80211_RADIOTAP_VENDOR_NAMESPACE = 30, - IEEE80211_RADIOTAP_EXT = 31 -}; - -/* Channel flags. */ -/* - * [PLATA] needto add the new bands - */ -#define IEEE80211_CHAN_TURBO 0x0010 /* Turbo channel */ -#define IEEE80211_CHAN_CCK 0x0020 /* CCK channel */ -#define IEEE80211_CHAN_OFDM 0x0040 /* OFDM channel */ -#define IEEE80211_CHAN_2GHZ 0x0080 /* 2 GHz spectrum channel. */ -#define IEEE80211_CHAN_5GHZ 0x0100 /* 5 GHz spectrum channel */ -/* - * [PLATA] - new bands - */ -#define IEEE80211_CHAN_5_9GHZ 0x0120 /* 5.9 GHz ITS spectrum channel */ -#define IEEE80211_CHAN_0_8GHZ 0x0140 /* 800 MHz ITS spectrum channel */ -/* - * [PLATA] - end - */ -#define IEEE80211_CHAN_PASSIVE 0x0200 /* Only passive scan allowed */ -#define IEEE80211_CHAN_DYN 0x0400 /* Dynamic CCK-OFDM channel */ -#define IEEE80211_CHAN_GFSK 0x0800 /* GFSK channel (FHSS PHY) */ - -/* For IEEE80211_RADIOTAP_FLAGS */ -#define IEEE80211_RADIOTAP_F_CFP 0x01 /* sent/received - * during CFP - */ -#define IEEE80211_RADIOTAP_F_SHORTPRE 0x02 /* sent/received - * with short - * preamble - */ -#define IEEE80211_RADIOTAP_F_WEP 0x04 /* sent/received - * with WEP encryption - */ -#define IEEE80211_RADIOTAP_F_FRAG 0x08 /* sent/received - * with fragmentation - */ -#define IEEE80211_RADIOTAP_F_FCS 0x10 /* frame includes FCS */ -#define IEEE80211_RADIOTAP_F_DATAPAD 0x20 /* frame has padding between - * 802.11 header and payload - * (to 32-bit boundary) - */ -#define IEEE80211_RADIOTAP_F_BADFCS 0x40 /* bad FCS */ - -/* For IEEE80211_RADIOTAP_RX_FLAGS */ -#define IEEE80211_RADIOTAP_F_RX_BADPLCP 0x0002 /* frame has bad PLCP */ - -/* For IEEE80211_RADIOTAP_TX_FLAGS */ -#define IEEE80211_RADIOTAP_F_TX_FAIL 0x0001 /* failed due to excessive - * retries */ -#define IEEE80211_RADIOTAP_F_TX_CTS 0x0002 /* used cts 'protection' */ -#define IEEE80211_RADIOTAP_F_TX_RTS 0x0004 /* used rts/cts handshake */ -#define IEEE80211_RADIOTAP_F_TX_NOACK 0x0008 /* don't expect an ack */ - - -/* For IEEE80211_RADIOTAP_MCS */ -#define IEEE80211_RADIOTAP_MCS_HAVE_BW 0x01 -#define IEEE80211_RADIOTAP_MCS_HAVE_MCS 0x02 -#define IEEE80211_RADIOTAP_MCS_HAVE_GI 0x04 -#define IEEE80211_RADIOTAP_MCS_HAVE_FMT 0x08 -#define IEEE80211_RADIOTAP_MCS_HAVE_FEC 0x10 - -#define IEEE80211_RADIOTAP_MCS_BW_MASK 0x03 -#define IEEE80211_RADIOTAP_MCS_BW_20 0 -#define IEEE80211_RADIOTAP_MCS_BW_40 1 -#define IEEE80211_RADIOTAP_MCS_BW_20L 2 -#define IEEE80211_RADIOTAP_MCS_BW_20U 3 -#define IEEE80211_RADIOTAP_MCS_SGI 0x04 -#define IEEE80211_RADIOTAP_MCS_FMT_GF 0x08 -#define IEEE80211_RADIOTAP_MCS_FEC_LDPC 0x10 - - -/* helpers */ -static inline int ieee80211_get_radiotap_len(unsigned char *data) -{ - struct ieee80211_radiotap_header *hdr = - (struct ieee80211_radiotap_header *)data; - - return get_unaligned_le16(&hdr->it_len); -} - -#endif /* IEEE80211_RADIOTAP_H */ diff --git a/openairITS/mac/DOT11/include/net/lib80211.h b/openairITS/mac/DOT11/include/net/lib80211.h deleted file mode 100644 index d178c26a55..0000000000 --- a/openairITS/mac/DOT11/include/net/lib80211.h +++ /dev/null @@ -1,124 +0,0 @@ -/* - * lib80211.h -- common bits for IEEE802.11 wireless drivers - * - * Copyright (c) 2008, John W. Linville - * - * Some bits copied from old ieee80211 component, w/ original copyright - * notices below: - * - * Original code based on Host AP (software wireless LAN access point) driver - * for Intersil Prism2/2.5/3. - * - * Copyright (c) 2001-2002, SSH Communications Security Corp and Jouni Malinen - * - * Copyright (c) 2002-2003, Jouni Malinen - * - * Adaption to a generic IEEE 802.11 stack by James Ketrenos - * - * - * Copyright (c) 2004, Intel Corporation - * - */ - -#ifndef LIB80211_H -#define LIB80211_H - -#include -#include -#include -#include -#include -#include -#include -/* print_ssid() is intended to be used in debug (and possibly error) - * messages. It should never be used for passing ssid to user space. */ -const char *print_ssid(char *buf, const char *ssid, u8 ssid_len); -#define DECLARE_SSID_BUF(var) char var[IEEE80211_MAX_SSID_LEN * 4 + 1] __maybe_unused - -#define NUM_WEP_KEYS 4 - -enum { - IEEE80211_CRYPTO_TKIP_COUNTERMEASURES = (1 << 0), -}; - -struct module; - -struct lib80211_crypto_ops { - const char *name; - struct list_head list; - - /* init new crypto context (e.g., allocate private data space, - * select IV, etc.); returns NULL on failure or pointer to allocated - * private data on success */ - void *(*init) (int keyidx); - - /* deinitialize crypto context and free allocated private data */ - void (*deinit) (void *priv); - - /* encrypt/decrypt return < 0 on error or >= 0 on success. The return - * value from decrypt_mpdu is passed as the keyidx value for - * decrypt_msdu. skb must have enough head and tail room for the - * encryption; if not, error will be returned; these functions are - * called for all MPDUs (i.e., fragments). - */ - int (*encrypt_mpdu) (struct sk_buff * skb, int hdr_len, void *priv); - int (*decrypt_mpdu) (struct sk_buff * skb, int hdr_len, void *priv); - - /* These functions are called for full MSDUs, i.e. full frames. - * These can be NULL if full MSDU operations are not needed. */ - int (*encrypt_msdu) (struct sk_buff * skb, int hdr_len, void *priv); - int (*decrypt_msdu) (struct sk_buff * skb, int keyidx, int hdr_len, - void *priv); - - int (*set_key) (void *key, int len, u8 * seq, void *priv); - int (*get_key) (void *key, int len, u8 * seq, void *priv); - - /* procfs handler for printing out key information and possible - * statistics */ - char *(*print_stats) (char *p, void *priv); - - /* Crypto specific flag get/set for configuration settings */ - unsigned long (*get_flags) (void *priv); - unsigned long (*set_flags) (unsigned long flags, void *priv); - - /* maximum number of bytes added by encryption; encrypt buf is - * allocated with extra_prefix_len bytes, copy of in_buf, and - * extra_postfix_len; encrypt need not use all this space, but - * the result must start at the beginning of the buffer and correct - * length must be returned */ - int extra_mpdu_prefix_len, extra_mpdu_postfix_len; - int extra_msdu_prefix_len, extra_msdu_postfix_len; - - struct module *owner; -}; - -struct lib80211_crypt_data { - struct list_head list; /* delayed deletion list */ - struct lib80211_crypto_ops *ops; - void *priv; - atomic_t refcnt; -}; - -struct lib80211_crypt_info { - char *name; - /* Most clients will already have a lock, - so just point to that. */ - spinlock_t *lock; - - struct lib80211_crypt_data *crypt[NUM_WEP_KEYS]; - int tx_keyidx; /* default TX key index (crypt[tx_keyidx]) */ - struct list_head crypt_deinit_list; - struct timer_list crypt_deinit_timer; - int crypt_quiesced; -}; - -int lib80211_crypt_info_init(struct lib80211_crypt_info *info, char *name, - spinlock_t *lock); -void lib80211_crypt_info_free(struct lib80211_crypt_info *info); -int lib80211_register_crypto_ops(struct lib80211_crypto_ops *ops); -int lib80211_unregister_crypto_ops(struct lib80211_crypto_ops *ops); -struct lib80211_crypto_ops *lib80211_get_crypto_ops(const char *name); -void lib80211_crypt_delayed_deinit(struct lib80211_crypt_info *info, - struct lib80211_crypt_data **crypt); - -#endif /* LIB80211_H */ diff --git a/openairITS/mac/DOT11/include/net/mac80211.h b/openairITS/mac/DOT11/include/net/mac80211.h deleted file mode 100644 index e555977c06..0000000000 --- a/openairITS/mac/DOT11/include/net/mac80211.h +++ /dev/null @@ -1,3724 +0,0 @@ -/* - * mac80211 <-> driver interface - * - * Copyright 2002-2005, Devicescape Software, Inc. - * Copyright 2006-2007 Jiri Benc - * Copyright 2007-2010 Johannes Berg - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - */ - -#ifndef MAC80211_H -#define MAC80211_H - -#include -#include -#include -#include -#include -#include -#include - -/** - * DOC: Introduction - * - * mac80211 is the Linux stack for 802.11 hardware that implements - * only partial functionality in hard- or firmware. This document - * defines the interface between mac80211 and low-level hardware - * drivers. - */ - -/** - * DOC: Calling mac80211 from interrupts - * - * Only ieee80211_tx_status_irqsafe() and ieee80211_rx_irqsafe() can be - * called in hardware interrupt context. The low-level driver must not call any - * other functions in hardware interrupt context. If there is a need for such - * call, the low-level driver should first ACK the interrupt and perform the - * IEEE 802.11 code call after this, e.g. from a scheduled workqueue or even - * tasklet function. - * - * NOTE: If the driver opts to use the _irqsafe() functions, it may not also - * use the non-IRQ-safe functions! - */ - -/** - * DOC: Warning - * - * If you're reading this document and not the header file itself, it will - * be incomplete because not all documentation has been converted yet. - */ - -/** - * DOC: Frame format - * - * As a general rule, when frames are passed between mac80211 and the driver, - * they start with the IEEE 802.11 header and include the same octets that are - * sent over the air except for the FCS which should be calculated by the - * hardware. - * - * There are, however, various exceptions to this rule for advanced features: - * - * The first exception is for hardware encryption and decryption offload - * where the IV/ICV may or may not be generated in hardware. - * - * Secondly, when the hardware handles fragmentation, the frame handed to - * the driver from mac80211 is the MSDU, not the MPDU. - * - * Finally, for received frames, the driver is able to indicate that it has - * filled a radiotap header and put that in front of the frame; if it does - * not do so then mac80211 may add this under certain circumstances. - */ - -/** - * DOC: mac80211 workqueue - * - * mac80211 provides its own workqueue for drivers and internal mac80211 use. - * The workqueue is a single threaded workqueue and can only be accessed by - * helpers for sanity checking. Drivers must ensure all work added onto the - * mac80211 workqueue should be cancelled on the driver stop() callback. - * - * mac80211 will flushed the workqueue upon interface removal and during - * suspend. - * - * All work performed on the mac80211 workqueue must not acquire the RTNL lock. - * - */ - -struct device; - -/** - * enum ieee80211_max_queues - maximum number of queues - * - * @IEEE80211_MAX_QUEUES: Maximum number of regular device queues. - */ -enum ieee80211_max_queues { - IEEE80211_MAX_QUEUES = 4, -}; - -/** - * enum ieee80211_ac_numbers - AC numbers as used in mac80211 - * @IEEE80211_AC_VO: voice - * @IEEE80211_AC_VI: video - * @IEEE80211_AC_BE: best effort - * @IEEE80211_AC_BK: background - */ -enum ieee80211_ac_numbers { - IEEE80211_AC_VO = 0, - IEEE80211_AC_VI = 1, - IEEE80211_AC_BE = 2, - IEEE80211_AC_BK = 3, -}; -#define IEEE80211_NUM_ACS 4 - -/** - * struct ieee80211_tx_queue_params - transmit queue configuration - * - * The information provided in this structure is required for QoS - * transmit queue configuration. Cf. IEEE 802.11 7.3.2.29. - * - * @aifs: arbitration interframe space [0..255] - * @cw_min: minimum contention window [a value of the form - * 2^n-1 in the range 1..32767] - * @cw_max: maximum contention window [like @cw_min] - * @txop: maximum burst time in units of 32 usecs, 0 meaning disabled - * @uapsd: is U-APSD mode enabled for the queue - */ -struct ieee80211_tx_queue_params { - u16 txop; - u16 cw_min; - u16 cw_max; - u8 aifs; - bool uapsd; -}; - -struct ieee80211_low_level_stats { - unsigned int dot11ACKFailureCount; - unsigned int dot11RTSFailureCount; - unsigned int dot11FCSErrorCount; - unsigned int dot11RTSSuccessCount; -}; - -/** - * enum ieee80211_bss_change - BSS change notification flags - * - * These flags are used with the bss_info_changed() callback - * to indicate which BSS parameter changed. - * - * @BSS_CHANGED_ASSOC: association status changed (associated/disassociated), - * also implies a change in the AID. - * @BSS_CHANGED_ERP_CTS_PROT: CTS protection changed - * @BSS_CHANGED_ERP_PREAMBLE: preamble changed - * @BSS_CHANGED_ERP_SLOT: slot timing changed - * @BSS_CHANGED_HT: 802.11n parameters changed - * @BSS_CHANGED_BASIC_RATES: Basic rateset changed - * @BSS_CHANGED_BEACON_INT: Beacon interval changed - * @BSS_CHANGED_BSSID: BSSID changed, for whatever - * reason (IBSS and managed mode) - * @BSS_CHANGED_BEACON: Beacon data changed, retrieve - * new beacon (beaconing modes) - * @BSS_CHANGED_BEACON_ENABLED: Beaconing should be - * enabled/disabled (beaconing modes) - * @BSS_CHANGED_CQM: Connection quality monitor config changed - * @BSS_CHANGED_IBSS: IBSS join status changed - * @BSS_CHANGED_ARP_FILTER: Hardware ARP filter address list or state changed. - * @BSS_CHANGED_QOS: QoS for this association was enabled/disabled. Note - * that it is only ever disabled for station mode. - * @BSS_CHANGED_IDLE: Idle changed for this BSS/interface. - * @BSS_CHANGED_SSID: SSID changed for this BSS (AP mode) - * @BSS_CHANGED_AP_PROBE_RESP: Probe Response changed for this BSS (AP mode) - */ -enum ieee80211_bss_change { - BSS_CHANGED_ASSOC = 1<<0, - BSS_CHANGED_ERP_CTS_PROT = 1<<1, - BSS_CHANGED_ERP_PREAMBLE = 1<<2, - BSS_CHANGED_ERP_SLOT = 1<<3, - BSS_CHANGED_HT = 1<<4, - BSS_CHANGED_BASIC_RATES = 1<<5, - BSS_CHANGED_BEACON_INT = 1<<6, - BSS_CHANGED_BSSID = 1<<7, - BSS_CHANGED_BEACON = 1<<8, - BSS_CHANGED_BEACON_ENABLED = 1<<9, - BSS_CHANGED_CQM = 1<<10, - BSS_CHANGED_IBSS = 1<<11, - BSS_CHANGED_ARP_FILTER = 1<<12, - BSS_CHANGED_QOS = 1<<13, - BSS_CHANGED_IDLE = 1<<14, - BSS_CHANGED_SSID = 1<<15, - BSS_CHANGED_AP_PROBE_RESP = 1<<16, - - /* when adding here, make sure to change ieee80211_reconfig */ -}; - -/* - * The maximum number of IPv4 addresses listed for ARP filtering. If the number - * of addresses for an interface increase beyond this value, hardware ARP - * filtering will be disabled. - */ -#define IEEE80211_BSS_ARP_ADDR_LIST_LEN 4 - -/** - * enum ieee80211_rssi_event - RSSI threshold event - * An indicator for when RSSI goes below/above a certain threshold. - * @RSSI_EVENT_HIGH: AP's rssi crossed the high threshold set by the driver. - * @RSSI_EVENT_LOW: AP's rssi crossed the low threshold set by the driver. - */ -enum ieee80211_rssi_event { - RSSI_EVENT_HIGH, - RSSI_EVENT_LOW, -}; - -/** - * struct ieee80211_bss_conf - holds the BSS's changing parameters - * - * This structure keeps information about a BSS (and an association - * to that BSS) that can change during the lifetime of the BSS. - * - * @assoc: association status - * @ibss_joined: indicates whether this station is part of an IBSS - * or not - * @aid: association ID number, valid only when @assoc is true - * @use_cts_prot: use CTS protection - * @use_short_preamble: use 802.11b short preamble; - * if the hardware cannot handle this it must set the - * IEEE80211_HW_2GHZ_SHORT_PREAMBLE_INCAPABLE hardware flag - * @use_short_slot: use short slot time (only relevant for ERP); - * if the hardware cannot handle this it must set the - * IEEE80211_HW_2GHZ_SHORT_SLOT_INCAPABLE hardware flag - * @dtim_period: num of beacons before the next DTIM, for beaconing, - * valid in station mode only while @assoc is true and if also - * requested by %IEEE80211_HW_NEED_DTIM_PERIOD (cf. also hw conf - * @ps_dtim_period) - * @last_tsf: last beacon's/probe response's TSF timestamp (could be old - * as it may have been received during scanning long ago) - * @beacon_int: beacon interval - * @assoc_capability: capabilities taken from assoc resp - * @basic_rates: bitmap of basic rates, each bit stands for an - * index into the rate table configured by the driver in - * the current band. - * @mcast_rate: per-band multicast rate index + 1 (0: disabled) - * @bssid: The BSSID for this BSS - * @enable_beacon: whether beaconing should be enabled or not - * @channel_type: Channel type for this BSS -- the hardware might be - * configured for HT40+ while this BSS only uses no-HT, for - * example. - * @ht_operation_mode: HT operation mode (like in &struct ieee80211_ht_info). - * This field is only valid when the channel type is one of the HT types. - * @cqm_rssi_thold: Connection quality monitor RSSI threshold, a zero value - * implies disabled - * @cqm_rssi_hyst: Connection quality monitor RSSI hysteresis - * @arp_addr_list: List of IPv4 addresses for hardware ARP filtering. The - * may filter ARP queries targeted for other addresses than listed here. - * The driver must allow ARP queries targeted for all address listed here - * to pass through. An empty list implies no ARP queries need to pass. - * @arp_addr_cnt: Number of addresses currently on the list. - * @arp_filter_enabled: Enable ARP filtering - if enabled, the hardware may - * filter ARP queries based on the @arp_addr_list, if disabled, the - * hardware must not perform any ARP filtering. Note, that the filter will - * be enabled also in promiscuous mode. - * @qos: This is a QoS-enabled BSS. - * @idle: This interface is idle. There's also a global idle flag in the - * hardware config which may be more appropriate depending on what - * your driver/device needs to do. - * @ssid: The SSID of the current vif. Only valid in AP-mode. - * @ssid_len: Length of SSID given in @ssid. - * @hidden_ssid: The SSID of the current vif is hidden. Only valid in AP-mode. - */ -struct ieee80211_bss_conf { - const u8 *bssid; - /* association related data */ - bool assoc, ibss_joined; - u16 aid; - /* erp related data */ - bool use_cts_prot; - bool use_short_preamble; - bool use_short_slot; - bool enable_beacon; - u8 dtim_period; - u16 beacon_int; - u16 assoc_capability; - u64 last_tsf; - u32 basic_rates; - int mcast_rate[IEEE80211_NUM_BANDS]; - u16 ht_operation_mode; - s32 cqm_rssi_thold; - u32 cqm_rssi_hyst; - enum nl80211_channel_type channel_type; - __be32 arp_addr_list[IEEE80211_BSS_ARP_ADDR_LIST_LEN]; - u8 arp_addr_cnt; - bool arp_filter_enabled; - bool qos; - bool idle; - u8 ssid[IEEE80211_MAX_SSID_LEN]; - size_t ssid_len; - bool hidden_ssid; -}; - -/** - * enum mac80211_tx_control_flags - flags to describe transmission information/status - * - * These flags are used with the @flags member of &ieee80211_tx_info. - * - * @IEEE80211_TX_CTL_REQ_TX_STATUS: require TX status callback for this frame. - * @IEEE80211_TX_CTL_ASSIGN_SEQ: The driver has to assign a sequence - * number to this frame, taking care of not overwriting the fragment - * number and increasing the sequence number only when the - * IEEE80211_TX_CTL_FIRST_FRAGMENT flag is set. mac80211 will properly - * assign sequence numbers to QoS-data frames but cannot do so correctly - * for non-QoS-data and management frames because beacons need them from - * that counter as well and mac80211 cannot guarantee proper sequencing. - * If this flag is set, the driver should instruct the hardware to - * assign a sequence number to the frame or assign one itself. Cf. IEEE - * 802.11-2007 7.1.3.4.1 paragraph 3. This flag will always be set for - * beacons and always be clear for frames without a sequence number field. - * @IEEE80211_TX_CTL_NO_ACK: tell the low level not to wait for an ack - * @IEEE80211_TX_CTL_CLEAR_PS_FILT: clear powersave filter for destination - * station - * @IEEE80211_TX_CTL_FIRST_FRAGMENT: this is a first fragment of the frame - * @IEEE80211_TX_CTL_SEND_AFTER_DTIM: send this frame after DTIM beacon - * @IEEE80211_TX_CTL_AMPDU: this frame should be sent as part of an A-MPDU - * @IEEE80211_TX_CTL_INJECTED: Frame was injected, internal to mac80211. - * @IEEE80211_TX_STAT_TX_FILTERED: The frame was not transmitted - * because the destination STA was in powersave mode. Note that to - * avoid race conditions, the filter must be set by the hardware or - * firmware upon receiving a frame that indicates that the station - * went to sleep (must be done on device to filter frames already on - * the queue) and may only be unset after mac80211 gives the OK for - * that by setting the IEEE80211_TX_CTL_CLEAR_PS_FILT (see above), - * since only then is it guaranteed that no more frames are in the - * hardware queue. - * @IEEE80211_TX_STAT_ACK: Frame was acknowledged - * @IEEE80211_TX_STAT_AMPDU: The frame was aggregated, so status - * is for the whole aggregation. - * @IEEE80211_TX_STAT_AMPDU_NO_BACK: no block ack was returned, - * so consider using block ack request (BAR). - * @IEEE80211_TX_CTL_RATE_CTRL_PROBE: internal to mac80211, can be - * set by rate control algorithms to indicate probe rate, will - * be cleared for fragmented frames (except on the last fragment) - * @IEEE80211_TX_INTFL_NEED_TXPROCESSING: completely internal to mac80211, - * used to indicate that a pending frame requires TX processing before - * it can be sent out. - * @IEEE80211_TX_INTFL_RETRIED: completely internal to mac80211, - * used to indicate that a frame was already retried due to PS - * @IEEE80211_TX_INTFL_DONT_ENCRYPT: completely internal to mac80211, - * used to indicate frame should not be encrypted - * @IEEE80211_TX_CTL_NO_PS_BUFFER: This frame is a response to a poll - * frame (PS-Poll or uAPSD) or a non-bufferable MMPDU and must - * be sent although the station is in powersave mode. - * @IEEE80211_TX_CTL_MORE_FRAMES: More frames will be passed to the - * transmit function after the current frame, this can be used - * by drivers to kick the DMA queue only if unset or when the - * queue gets full. - * @IEEE80211_TX_INTFL_RETRANSMISSION: This frame is being retransmitted - * after TX status because the destination was asleep, it must not - * be modified again (no seqno assignment, crypto, etc.) - * @IEEE80211_TX_INTFL_NL80211_FRAME_TX: Frame was requested through nl80211 - * MLME command (internal to mac80211 to figure out whether to send TX - * status to user space) - * @IEEE80211_TX_CTL_LDPC: tells the driver to use LDPC for this frame - * @IEEE80211_TX_CTL_STBC: Enables Space-Time Block Coding (STBC) for this - * frame and selects the maximum number of streams that it can use. - * @IEEE80211_TX_CTL_TX_OFFCHAN: Marks this packet to be transmitted on - * the off-channel channel when a remain-on-channel offload is done - * in hardware -- normal packets still flow and are expected to be - * handled properly by the device. - * @IEEE80211_TX_INTFL_TKIP_MIC_FAILURE: Marks this packet to be used for TKIP - * testing. It will be sent out with incorrect Michael MIC key to allow - * TKIP countermeasures to be tested. - * @IEEE80211_TX_CTL_NO_CCK_RATE: This frame will be sent at non CCK rate. - * This flag is actually used for management frame especially for P2P - * frames not being sent at CCK rate in 2GHz band. - * @IEEE80211_TX_STATUS_EOSP: This packet marks the end of service period, - * when its status is reported the service period ends. For frames in - * an SP that mac80211 transmits, it is already set; for driver frames - * the driver may set this flag. It is also used to do the same for - * PS-Poll responses. - * @IEEE80211_TX_CTL_USE_MINRATE: This frame will be sent at lowest rate. - * This flag is used to send nullfunc frame at minimum rate when - * the nullfunc is used for connection monitoring purpose. - * @IEEE80211_TX_CTL_DONTFRAG: Don't fragment this packet even if it - * would be fragmented by size (this is optional, only used for - * monitor injection). - * - * Note: If you have to add new flags to the enumeration, then don't - * forget to update %IEEE80211_TX_TEMPORARY_FLAGS when necessary. - */ -enum mac80211_tx_control_flags { - IEEE80211_TX_CTL_REQ_TX_STATUS = BIT(0), - IEEE80211_TX_CTL_ASSIGN_SEQ = BIT(1), - IEEE80211_TX_CTL_NO_ACK = BIT(2), - IEEE80211_TX_CTL_CLEAR_PS_FILT = BIT(3), - IEEE80211_TX_CTL_FIRST_FRAGMENT = BIT(4), - IEEE80211_TX_CTL_SEND_AFTER_DTIM = BIT(5), - IEEE80211_TX_CTL_AMPDU = BIT(6), - IEEE80211_TX_CTL_INJECTED = BIT(7), - IEEE80211_TX_STAT_TX_FILTERED = BIT(8), - IEEE80211_TX_STAT_ACK = BIT(9), - IEEE80211_TX_STAT_AMPDU = BIT(10), - IEEE80211_TX_STAT_AMPDU_NO_BACK = BIT(11), - IEEE80211_TX_CTL_RATE_CTRL_PROBE = BIT(12), - IEEE80211_TX_INTFL_NEED_TXPROCESSING = BIT(14), - IEEE80211_TX_INTFL_RETRIED = BIT(15), - IEEE80211_TX_INTFL_DONT_ENCRYPT = BIT(16), - IEEE80211_TX_CTL_NO_PS_BUFFER = BIT(17), - IEEE80211_TX_CTL_MORE_FRAMES = BIT(18), - IEEE80211_TX_INTFL_RETRANSMISSION = BIT(19), - /* hole at 20, use later */ - IEEE80211_TX_INTFL_NL80211_FRAME_TX = BIT(21), - IEEE80211_TX_CTL_LDPC = BIT(22), - IEEE80211_TX_CTL_STBC = BIT(23) | BIT(24), - IEEE80211_TX_CTL_TX_OFFCHAN = BIT(25), - IEEE80211_TX_INTFL_TKIP_MIC_FAILURE = BIT(26), - IEEE80211_TX_CTL_NO_CCK_RATE = BIT(27), - IEEE80211_TX_STATUS_EOSP = BIT(28), - IEEE80211_TX_CTL_USE_MINRATE = BIT(29), - IEEE80211_TX_CTL_DONTFRAG = BIT(30), -}; - -#define IEEE80211_TX_CTL_STBC_SHIFT 23 - -/* - * This definition is used as a mask to clear all temporary flags, which are - * set by the tx handlers for each transmission attempt by the mac80211 stack. - */ -#define IEEE80211_TX_TEMPORARY_FLAGS (IEEE80211_TX_CTL_NO_ACK | \ - IEEE80211_TX_CTL_CLEAR_PS_FILT | IEEE80211_TX_CTL_FIRST_FRAGMENT | \ - IEEE80211_TX_CTL_SEND_AFTER_DTIM | IEEE80211_TX_CTL_AMPDU | \ - IEEE80211_TX_STAT_TX_FILTERED | IEEE80211_TX_STAT_ACK | \ - IEEE80211_TX_STAT_AMPDU | IEEE80211_TX_STAT_AMPDU_NO_BACK | \ - IEEE80211_TX_CTL_RATE_CTRL_PROBE | IEEE80211_TX_CTL_NO_PS_BUFFER | \ - IEEE80211_TX_CTL_MORE_FRAMES | IEEE80211_TX_CTL_LDPC | \ - IEEE80211_TX_CTL_STBC | IEEE80211_TX_STATUS_EOSP) - -/** - * enum mac80211_rate_control_flags - per-rate flags set by the - * Rate Control algorithm. - * - * These flags are set by the Rate control algorithm for each rate during tx, - * in the @flags member of struct ieee80211_tx_rate. - * - * @IEEE80211_TX_RC_USE_RTS_CTS: Use RTS/CTS exchange for this rate. - * @IEEE80211_TX_RC_USE_CTS_PROTECT: CTS-to-self protection is required. - * This is set if the current BSS requires ERP protection. - * @IEEE80211_TX_RC_USE_SHORT_PREAMBLE: Use short preamble. - * @IEEE80211_TX_RC_MCS: HT rate. - * @IEEE80211_TX_RC_GREEN_FIELD: Indicates whether this rate should be used in - * Greenfield mode. - * @IEEE80211_TX_RC_40_MHZ_WIDTH: Indicates if the Channel Width should be 40 MHz. - * @IEEE80211_TX_RC_DUP_DATA: The frame should be transmitted on both of the - * adjacent 20 MHz channels, if the current channel type is - * NL80211_CHAN_HT40MINUS or NL80211_CHAN_HT40PLUS. - * @IEEE80211_TX_RC_SHORT_GI: Short Guard interval should be used for this rate. - */ -enum mac80211_rate_control_flags { - IEEE80211_TX_RC_USE_RTS_CTS = BIT(0), - IEEE80211_TX_RC_USE_CTS_PROTECT = BIT(1), - IEEE80211_TX_RC_USE_SHORT_PREAMBLE = BIT(2), - - /* rate index is an MCS rate number instead of an index */ - IEEE80211_TX_RC_MCS = BIT(3), - IEEE80211_TX_RC_GREEN_FIELD = BIT(4), - IEEE80211_TX_RC_40_MHZ_WIDTH = BIT(5), - IEEE80211_TX_RC_DUP_DATA = BIT(6), - IEEE80211_TX_RC_SHORT_GI = BIT(7), -}; - - -/* there are 40 bytes if you don't need the rateset to be kept */ -#define IEEE80211_TX_INFO_DRIVER_DATA_SIZE 40 - -/* if you do need the rateset, then you have less space */ -#define IEEE80211_TX_INFO_RATE_DRIVER_DATA_SIZE 24 - -/* maximum number of rate stages */ -#define IEEE80211_TX_MAX_RATES 5 - -/** - * struct ieee80211_tx_rate - rate selection/status - * - * @idx: rate index to attempt to send with - * @flags: rate control flags (&enum mac80211_rate_control_flags) - * @count: number of tries in this rate before going to the next rate - * - * A value of -1 for @idx indicates an invalid rate and, if used - * in an array of retry rates, that no more rates should be tried. - * - * When used for transmit status reporting, the driver should - * always report the rate along with the flags it used. - * - * &struct ieee80211_tx_info contains an array of these structs - * in the control information, and it will be filled by the rate - * control algorithm according to what should be sent. For example, - * if this array contains, in the format { , } the - * information - * { 3, 2 }, { 2, 2 }, { 1, 4 }, { -1, 0 }, { -1, 0 } - * then this means that the frame should be transmitted - * up to twice at rate 3, up to twice at rate 2, and up to four - * times at rate 1 if it doesn't get acknowledged. Say it gets - * acknowledged by the peer after the fifth attempt, the status - * information should then contain - * { 3, 2 }, { 2, 2 }, { 1, 1 }, { -1, 0 } ... - * since it was transmitted twice at rate 3, twice at rate 2 - * and once at rate 1 after which we received an acknowledgement. - */ -struct ieee80211_tx_rate { - s8 idx; - u8 count; - u8 flags; -} __packed; - -/** - * struct ieee80211_tx_info - skb transmit information - * - * This structure is placed in skb->cb for three uses: - * (1) mac80211 TX control - mac80211 tells the driver what to do - * (2) driver internal use (if applicable) - * (3) TX status information - driver tells mac80211 what happened - * - * The TX control's sta pointer is only valid during the ->tx call, - * it may be NULL. - * - * @flags: transmit info flags, defined above - * @band: the band to transmit on (use for checking for races) - * @antenna_sel_tx: antenna to use, 0 for automatic diversity - * @ack_frame_id: internal frame ID for TX status, used internally - * @control: union for control data - * @status: union for status data - * @driver_data: array of driver_data pointers - * @ampdu_ack_len: number of acked aggregated frames. - * relevant only if IEEE80211_TX_STAT_AMPDU was set. - * @ampdu_len: number of aggregated frames. - * relevant only if IEEE80211_TX_STAT_AMPDU was set. - * @ack_signal: signal strength of the ACK frame - */ -struct ieee80211_tx_info { - /* common information */ - u32 flags; - u8 band; - - u8 antenna_sel_tx; - - u16 ack_frame_id; - - union { - struct { - union { - /* rate control */ - struct { - struct ieee80211_tx_rate rates[ - IEEE80211_TX_MAX_RATES]; - s8 rts_cts_rate_idx; - }; - /* only needed before rate control */ - unsigned long jiffies; - }; - /* NB: vif can be NULL for injected frames */ - struct ieee80211_vif *vif; - struct ieee80211_key_conf *hw_key; - struct ieee80211_sta *sta; - } control; - struct { - struct ieee80211_tx_rate rates[IEEE80211_TX_MAX_RATES]; - u8 ampdu_ack_len; - int ack_signal; - u8 ampdu_len; - /* 15 bytes free */ - } status; - struct { - struct ieee80211_tx_rate driver_rates[ - IEEE80211_TX_MAX_RATES]; - void *rate_driver_data[ - IEEE80211_TX_INFO_RATE_DRIVER_DATA_SIZE / sizeof(void *)]; - }; - void *driver_data[ - IEEE80211_TX_INFO_DRIVER_DATA_SIZE / sizeof(void *)]; - }; -}; - -/** - * struct ieee80211_sched_scan_ies - scheduled scan IEs - * - * This structure is used to pass the appropriate IEs to be used in scheduled - * scans for all bands. It contains both the IEs passed from the userspace - * and the ones generated by mac80211. - * - * @ie: array with the IEs for each supported band - * @len: array with the total length of the IEs for each band - */ -struct ieee80211_sched_scan_ies { - u8 *ie[IEEE80211_NUM_BANDS]; - size_t len[IEEE80211_NUM_BANDS]; -}; - -static inline struct ieee80211_tx_info *IEEE80211_SKB_CB(struct sk_buff *skb) -{ - return (struct ieee80211_tx_info *)skb->cb; -} - -static inline struct ieee80211_rx_status *IEEE80211_SKB_RXCB(struct sk_buff *skb) -{ - return (struct ieee80211_rx_status *)skb->cb; -} - -/** - * ieee80211_tx_info_clear_status - clear TX status - * - * @info: The &struct ieee80211_tx_info to be cleared. - * - * When the driver passes an skb back to mac80211, it must report - * a number of things in TX status. This function clears everything - * in the TX status but the rate control information (it does clear - * the count since you need to fill that in anyway). - * - * NOTE: You can only use this function if you do NOT use - * info->driver_data! Use info->rate_driver_data - * instead if you need only the less space that allows. - */ -static inline void -ieee80211_tx_info_clear_status(struct ieee80211_tx_info *info) -{ - int i; - - BUILD_BUG_ON(offsetof(struct ieee80211_tx_info, status.rates) != - offsetof(struct ieee80211_tx_info, control.rates)); - BUILD_BUG_ON(offsetof(struct ieee80211_tx_info, status.rates) != - offsetof(struct ieee80211_tx_info, driver_rates)); - BUILD_BUG_ON(offsetof(struct ieee80211_tx_info, status.rates) != 8); - /* clear the rate counts */ - for (i = 0; i < IEEE80211_TX_MAX_RATES; i++) - info->status.rates[i].count = 0; - - BUILD_BUG_ON( - offsetof(struct ieee80211_tx_info, status.ampdu_ack_len) != 23); - memset(&info->status.ampdu_ack_len, 0, - sizeof(struct ieee80211_tx_info) - - offsetof(struct ieee80211_tx_info, status.ampdu_ack_len)); -} - - -/** - * enum mac80211_rx_flags - receive flags - * - * These flags are used with the @flag member of &struct ieee80211_rx_status. - * @RX_FLAG_MMIC_ERROR: Michael MIC error was reported on this frame. - * Use together with %RX_FLAG_MMIC_STRIPPED. - * @RX_FLAG_DECRYPTED: This frame was decrypted in hardware. - * @RX_FLAG_MMIC_STRIPPED: the Michael MIC is stripped off this frame, - * verification has been done by the hardware. - * @RX_FLAG_IV_STRIPPED: The IV/ICV are stripped from this frame. - * If this flag is set, the stack cannot do any replay detection - * hence the driver or hardware will have to do that. - * @RX_FLAG_FAILED_FCS_CRC: Set this flag if the FCS check failed on - * the frame. - * @RX_FLAG_FAILED_PLCP_CRC: Set this flag if the PCLP check failed on - * the frame. - * @RX_FLAG_MACTIME_MPDU: The timestamp passed in the RX status (@mactime - * field) is valid and contains the time the first symbol of the MPDU - * was received. This is useful in monitor mode and for proper IBSS - * merging. - * @RX_FLAG_SHORTPRE: Short preamble was used for this frame - * @RX_FLAG_HT: HT MCS was used and rate_idx is MCS index - * @RX_FLAG_40MHZ: HT40 (40 MHz) was used - * @RX_FLAG_SHORT_GI: Short guard interval was used - * @RX_FLAG_NO_SIGNAL_VAL: The signal strength value is not present. - * Valid only for data frames (mainly A-MPDU) - */ -enum mac80211_rx_flags { - RX_FLAG_MMIC_ERROR = 1<<0, - RX_FLAG_DECRYPTED = 1<<1, - RX_FLAG_MMIC_STRIPPED = 1<<3, - RX_FLAG_IV_STRIPPED = 1<<4, - RX_FLAG_FAILED_FCS_CRC = 1<<5, - RX_FLAG_FAILED_PLCP_CRC = 1<<6, - RX_FLAG_MACTIME_MPDU = 1<<7, - RX_FLAG_SHORTPRE = 1<<8, - RX_FLAG_HT = 1<<9, - RX_FLAG_40MHZ = 1<<10, - RX_FLAG_SHORT_GI = 1<<11, - RX_FLAG_NO_SIGNAL_VAL = 1<<12, -}; - -/** - * struct ieee80211_rx_status - receive status - * - * The low-level driver should provide this information (the subset - * supported by hardware) to the 802.11 code with each received - * frame, in the skb's control buffer (cb). - * - * @mactime: value in microseconds of the 64-bit Time Synchronization Function - * (TSF) timer when the first data symbol (MPDU) arrived at the hardware. - * @band: the active band when this frame was received - * @freq: frequency the radio was tuned to when receiving this frame, in MHz - * @signal: signal strength when receiving this frame, either in dBm, in dB or - * unspecified depending on the hardware capabilities flags - * @IEEE80211_HW_SIGNAL_* - * @antenna: antenna used - * @rate_idx: index of data rate into band's supported rates or MCS index if - * HT rates are use (RX_FLAG_HT) - * @flag: %RX_FLAG_* - * @rx_flags: internal RX flags for mac80211 - */ -struct ieee80211_rx_status { - u64 mactime; - enum ieee80211_band band; - int freq; - int signal; - int antenna; - int rate_idx; - int flag; - unsigned int rx_flags; -}; - -/** - * enum ieee80211_conf_flags - configuration flags - * - * Flags to define PHY configuration options - * - * @IEEE80211_CONF_MONITOR: there's a monitor interface present -- use this - * to determine for example whether to calculate timestamps for packets - * or not, do not use instead of filter flags! - * @IEEE80211_CONF_PS: Enable 802.11 power save mode (managed mode only). - * This is the power save mode defined by IEEE 802.11-2007 section 11.2, - * meaning that the hardware still wakes up for beacons, is able to - * transmit frames and receive the possible acknowledgment frames. - * Not to be confused with hardware specific wakeup/sleep states, - * driver is responsible for that. See the section "Powersave support" - * for more. - * @IEEE80211_CONF_IDLE: The device is running, but idle; if the flag is set - * the driver should be prepared to handle configuration requests but - * may turn the device off as much as possible. Typically, this flag will - * be set when an interface is set UP but not associated or scanning, but - * it can also be unset in that case when monitor interfaces are active. - * @IEEE80211_CONF_OFFCHANNEL: The device is currently not on its main - * operating channel. - */ -enum ieee80211_conf_flags { - IEEE80211_CONF_MONITOR = (1<<0), - IEEE80211_CONF_PS = (1<<1), - IEEE80211_CONF_IDLE = (1<<2), - IEEE80211_CONF_OFFCHANNEL = (1<<3), -}; - - -/** - * enum ieee80211_conf_changed - denotes which configuration changed - * - * @IEEE80211_CONF_CHANGE_LISTEN_INTERVAL: the listen interval changed - * @IEEE80211_CONF_CHANGE_MONITOR: the monitor flag changed - * @IEEE80211_CONF_CHANGE_PS: the PS flag or dynamic PS timeout changed - * @IEEE80211_CONF_CHANGE_POWER: the TX power changed - * @IEEE80211_CONF_CHANGE_CHANNEL: the channel/channel_type changed - * @IEEE80211_CONF_CHANGE_RETRY_LIMITS: retry limits changed - * @IEEE80211_CONF_CHANGE_IDLE: Idle flag changed - * @IEEE80211_CONF_CHANGE_SMPS: Spatial multiplexing powersave mode changed - */ -enum ieee80211_conf_changed { - IEEE80211_CONF_CHANGE_SMPS = BIT(1), - IEEE80211_CONF_CHANGE_LISTEN_INTERVAL = BIT(2), - IEEE80211_CONF_CHANGE_MONITOR = BIT(3), - IEEE80211_CONF_CHANGE_PS = BIT(4), - IEEE80211_CONF_CHANGE_POWER = BIT(5), - IEEE80211_CONF_CHANGE_CHANNEL = BIT(6), - IEEE80211_CONF_CHANGE_RETRY_LIMITS = BIT(7), - IEEE80211_CONF_CHANGE_IDLE = BIT(8), -}; - -/** - * enum ieee80211_smps_mode - spatial multiplexing power save mode - * - * @IEEE80211_SMPS_AUTOMATIC: automatic - * @IEEE80211_SMPS_OFF: off - * @IEEE80211_SMPS_STATIC: static - * @IEEE80211_SMPS_DYNAMIC: dynamic - * @IEEE80211_SMPS_NUM_MODES: internal, don't use - */ -enum ieee80211_smps_mode { - IEEE80211_SMPS_AUTOMATIC, - IEEE80211_SMPS_OFF, - IEEE80211_SMPS_STATIC, - IEEE80211_SMPS_DYNAMIC, - - /* keep last */ - IEEE80211_SMPS_NUM_MODES, -}; - -/** - * struct ieee80211_conf - configuration of the device - * - * This struct indicates how the driver shall configure the hardware. - * - * @flags: configuration flags defined above - * - * @listen_interval: listen interval in units of beacon interval - * @max_sleep_period: the maximum number of beacon intervals to sleep for - * before checking the beacon for a TIM bit (managed mode only); this - * value will be only achievable between DTIM frames, the hardware - * needs to check for the multicast traffic bit in DTIM beacons. - * This variable is valid only when the CONF_PS flag is set. - * @ps_dtim_period: The DTIM period of the AP we're connected to, for use - * in power saving. Power saving will not be enabled until a beacon - * has been received and the DTIM period is known. - * @dynamic_ps_timeout: The dynamic powersave timeout (in ms), see the - * powersave documentation below. This variable is valid only when - * the CONF_PS flag is set. - * - * @power_level: requested transmit power (in dBm) - * - * @channel: the channel to tune to - * @channel_type: the channel (HT) type - * - * @long_frame_max_tx_count: Maximum number of transmissions for a "long" frame - * (a frame not RTS protected), called "dot11LongRetryLimit" in 802.11, - * but actually means the number of transmissions not the number of retries - * @short_frame_max_tx_count: Maximum number of transmissions for a "short" - * frame, called "dot11ShortRetryLimit" in 802.11, but actually means the - * number of transmissions not the number of retries - * - * @smps_mode: spatial multiplexing powersave mode; note that - * %IEEE80211_SMPS_STATIC is used when the device is not - * configured for an HT channel - */ -struct ieee80211_conf { - u32 flags; - int power_level, dynamic_ps_timeout; - int max_sleep_period; - - u16 listen_interval; - u8 ps_dtim_period; - - u8 long_frame_max_tx_count, short_frame_max_tx_count; - - struct ieee80211_channel *channel; - enum nl80211_channel_type channel_type; - enum ieee80211_smps_mode smps_mode; -}; - -/** - * struct ieee80211_channel_switch - holds the channel switch data - * - * The information provided in this structure is required for channel switch - * operation. - * - * @timestamp: value in microseconds of the 64-bit Time Synchronization - * Function (TSF) timer when the frame containing the channel switch - * announcement was received. This is simply the rx.mactime parameter - * the driver passed into mac80211. - * @block_tx: Indicates whether transmission must be blocked before the - * scheduled channel switch, as indicated by the AP. - * @channel: the new channel to switch to - * @count: the number of TBTT's until the channel switch event - */ -struct ieee80211_channel_switch { - u64 timestamp; - bool block_tx; - struct ieee80211_channel *channel; - u8 count; -}; - -/** - * enum ieee80211_vif_flags - virtual interface flags - * - * @IEEE80211_VIF_BEACON_FILTER: the device performs beacon filtering - * on this virtual interface to avoid unnecessary CPU wakeups - * @IEEE80211_VIF_SUPPORTS_CQM_RSSI: the device can do connection quality - * monitoring on this virtual interface -- i.e. it can monitor - * connection quality related parameters, such as the RSSI level and - * provide notifications if configured trigger levels are reached. - */ -enum ieee80211_vif_flags { - IEEE80211_VIF_BEACON_FILTER = BIT(0), - IEEE80211_VIF_SUPPORTS_CQM_RSSI = BIT(1), -}; - -/** - * struct ieee80211_vif - per-interface data - * - * Data in this structure is continually present for driver - * use during the life of a virtual interface. - * - * @type: type of this virtual interface - * @bss_conf: BSS configuration for this interface, either our own - * or the BSS we're associated to - * @addr: address of this interface - * @p2p: indicates whether this AP or STA interface is a p2p - * interface, i.e. a GO or p2p-sta respectively - * @driver_flags: flags/capabilities the driver has for this interface, - * these need to be set (or cleared) when the interface is added - * or, if supported by the driver, the interface type is changed - * at runtime, mac80211 will never touch this field - * @drv_priv: data area for driver use, will always be aligned to - * sizeof(void *). - */ -struct ieee80211_vif { - enum nl80211_iftype type; - struct ieee80211_bss_conf bss_conf; - u8 addr[ETH_ALEN]; - bool p2p; - u32 driver_flags; - /* must be last */ - u8 drv_priv[0] __attribute__((__aligned__(sizeof(void *)))); -}; - -static inline bool ieee80211_vif_is_mesh(struct ieee80211_vif *vif) -{ -#ifdef CONFIG_MAC80211_MESH - return vif->type == NL80211_IFTYPE_MESH_POINT; -#endif - return false; -} - -/** - * enum ieee80211_key_flags - key flags - * - * These flags are used for communication about keys between the driver - * and mac80211, with the @flags parameter of &struct ieee80211_key_conf. - * - * @IEEE80211_KEY_FLAG_WMM_STA: Set by mac80211, this flag indicates - * that the STA this key will be used with could be using QoS. - * @IEEE80211_KEY_FLAG_GENERATE_IV: This flag should be set by the - * driver to indicate that it requires IV generation for this - * particular key. - * @IEEE80211_KEY_FLAG_GENERATE_MMIC: This flag should be set by - * the driver for a TKIP key if it requires Michael MIC - * generation in software. - * @IEEE80211_KEY_FLAG_PAIRWISE: Set by mac80211, this flag indicates - * that the key is pairwise rather then a shared key. - * @IEEE80211_KEY_FLAG_SW_MGMT: This flag should be set by the driver for a - * CCMP key if it requires CCMP encryption of management frames (MFP) to - * be done in software. - * @IEEE80211_KEY_FLAG_PUT_IV_SPACE: This flag should be set by the driver - * for a CCMP key if space should be prepared for the IV, but the IV - * itself should not be generated. Do not set together with - * @IEEE80211_KEY_FLAG_GENERATE_IV on the same key. - */ -enum ieee80211_key_flags { - IEEE80211_KEY_FLAG_WMM_STA = 1<<0, - IEEE80211_KEY_FLAG_GENERATE_IV = 1<<1, - IEEE80211_KEY_FLAG_GENERATE_MMIC= 1<<2, - IEEE80211_KEY_FLAG_PAIRWISE = 1<<3, - IEEE80211_KEY_FLAG_SW_MGMT = 1<<4, - IEEE80211_KEY_FLAG_PUT_IV_SPACE = 1<<5, -}; - -/** - * struct ieee80211_key_conf - key information - * - * This key information is given by mac80211 to the driver by - * the set_key() callback in &struct ieee80211_ops. - * - * @hw_key_idx: To be set by the driver, this is the key index the driver - * wants to be given when a frame is transmitted and needs to be - * encrypted in hardware. - * @cipher: The key's cipher suite selector. - * @flags: key flags, see &enum ieee80211_key_flags. - * @keyidx: the key index (0-3) - * @keylen: key material length - * @key: key material. For ALG_TKIP the key is encoded as a 256-bit (32 byte) - * data block: - * - Temporal Encryption Key (128 bits) - * - Temporal Authenticator Tx MIC Key (64 bits) - * - Temporal Authenticator Rx MIC Key (64 bits) - * @icv_len: The ICV length for this key type - * @iv_len: The IV length for this key type - */ -struct ieee80211_key_conf { - u32 cipher; - u8 icv_len; - u8 iv_len; - u8 hw_key_idx; - u8 flags; - s8 keyidx; - u8 keylen; - u8 key[0]; -}; - -/** - * enum set_key_cmd - key command - * - * Used with the set_key() callback in &struct ieee80211_ops, this - * indicates whether a key is being removed or added. - * - * @SET_KEY: a key is set - * @DISABLE_KEY: a key must be disabled - */ -enum set_key_cmd { - SET_KEY, DISABLE_KEY, -}; - -/* - * [PLATA] for the OCBMode, we should either be IEEE80211_STA_NONE or IEEE80211_STA_AUTHORIZED - */ -/** - * enum ieee80211_sta_state - station state - * - * @IEEE80211_STA_NOTEXIST: station doesn't exist at all, - * this is a special state for add/remove transitions - * @IEEE80211_STA_NONE: station exists without special state - * @IEEE80211_STA_AUTH: station is authenticated - * @IEEE80211_STA_ASSOC: station is associated - * @IEEE80211_STA_AUTHORIZED: station is authorized (802.1X) - */ -enum ieee80211_sta_state { - /* NOTE: These need to be ordered correctly! */ - IEEE80211_STA_NOTEXIST, - IEEE80211_STA_NONE, - IEEE80211_STA_AUTH, - IEEE80211_STA_ASSOC, - IEEE80211_STA_AUTHORIZED, -}; - -/** - * struct ieee80211_sta - station table entry - * - * A station table entry represents a station we are possibly - * communicating with. Since stations are RCU-managed in - * mac80211, any ieee80211_sta pointer you get access to must - * either be protected by rcu_read_lock() explicitly or implicitly, - * or you must take good care to not use such a pointer after a - * call to your sta_remove callback that removed it. - * - * @addr: MAC address - * @aid: AID we assigned to the station if we're an AP - * @supp_rates: Bitmap of supported rates (per band) - * @ht_cap: HT capabilities of this STA; restricted to our own TX capabilities - * @wme: indicates whether the STA supports WME. Only valid during AP-mode. - * @drv_priv: data area for driver use, will always be aligned to - * sizeof(void *), size is determined in hw information. - * @uapsd_queues: bitmap of queues configured for uapsd. Only valid - * if wme is supported. - * @max_sp: max Service Period. Only valid if wme is supported. - */ -struct ieee80211_sta { - u32 supp_rates[IEEE80211_NUM_BANDS]; - u8 addr[ETH_ALEN]; - u16 aid; - struct ieee80211_sta_ht_cap ht_cap; - bool wme; - u8 uapsd_queues; - u8 max_sp; - - /* must be last */ - u8 drv_priv[0] __attribute__((__aligned__(sizeof(void *)))); -}; - -/** - * enum sta_notify_cmd - sta notify command - * - * Used with the sta_notify() callback in &struct ieee80211_ops, this - * indicates if an associated station made a power state transition. - * - * @STA_NOTIFY_SLEEP: a station is now sleeping - * @STA_NOTIFY_AWAKE: a sleeping station woke up - */ -enum sta_notify_cmd { - STA_NOTIFY_SLEEP, STA_NOTIFY_AWAKE, -}; - -/** - * enum ieee80211_hw_flags - hardware flags - * - * These flags are used to indicate hardware capabilities to - * the stack. Generally, flags here should have their meaning - * done in a way that the simplest hardware doesn't need setting - * any particular flags. There are some exceptions to this rule, - * however, so you are advised to review these flags carefully. - * - * @IEEE80211_HW_HAS_RATE_CONTROL: - * The hardware or firmware includes rate control, and cannot be - * controlled by the stack. As such, no rate control algorithm - * should be instantiated, and the TX rate reported to userspace - * will be taken from the TX status instead of the rate control - * algorithm. - * Note that this requires that the driver implement a number of - * callbacks so it has the correct information, it needs to have - * the @set_rts_threshold callback and must look at the BSS config - * @use_cts_prot for G/N protection, @use_short_slot for slot - * timing in 2.4 GHz and @use_short_preamble for preambles for - * CCK frames. - * - * @IEEE80211_HW_RX_INCLUDES_FCS: - * Indicates that received frames passed to the stack include - * the FCS at the end. - * - * @IEEE80211_HW_HOST_BROADCAST_PS_BUFFERING: - * Some wireless LAN chipsets buffer broadcast/multicast frames - * for power saving stations in the hardware/firmware and others - * rely on the host system for such buffering. This option is used - * to configure the IEEE 802.11 upper layer to buffer broadcast and - * multicast frames when there are power saving stations so that - * the driver can fetch them with ieee80211_get_buffered_bc(). - * - * @IEEE80211_HW_2GHZ_SHORT_SLOT_INCAPABLE: - * Hardware is not capable of short slot operation on the 2.4 GHz band. - * - * @IEEE80211_HW_2GHZ_SHORT_PREAMBLE_INCAPABLE: - * Hardware is not capable of receiving frames with short preamble on - * the 2.4 GHz band. - * - * @IEEE80211_HW_SIGNAL_UNSPEC: - * Hardware can provide signal values but we don't know its units. We - * expect values between 0 and @max_signal. - * If possible please provide dB or dBm instead. - * - * @IEEE80211_HW_SIGNAL_DBM: - * Hardware gives signal values in dBm, decibel difference from - * one milliwatt. This is the preferred method since it is standardized - * between different devices. @max_signal does not need to be set. - * - * @IEEE80211_HW_SPECTRUM_MGMT: - * Hardware supports spectrum management defined in 802.11h - * Measurement, Channel Switch, Quieting, TPC - * - * @IEEE80211_HW_AMPDU_AGGREGATION: - * Hardware supports 11n A-MPDU aggregation. - * - * @IEEE80211_HW_SUPPORTS_PS: - * Hardware has power save support (i.e. can go to sleep). - * - * @IEEE80211_HW_PS_NULLFUNC_STACK: - * Hardware requires nullfunc frame handling in stack, implies - * stack support for dynamic PS. - * - * @IEEE80211_HW_SUPPORTS_DYNAMIC_PS: - * Hardware has support for dynamic PS. - * - * @IEEE80211_HW_MFP_CAPABLE: - * Hardware supports management frame protection (MFP, IEEE 802.11w). - * - * @IEEE80211_HW_SUPPORTS_STATIC_SMPS: - * Hardware supports static spatial multiplexing powersave, - * ie. can turn off all but one chain even on HT connections - * that should be using more chains. - * - * @IEEE80211_HW_SUPPORTS_DYNAMIC_SMPS: - * Hardware supports dynamic spatial multiplexing powersave, - * ie. can turn off all but one chain and then wake the rest - * up as required after, for example, rts/cts handshake. - * - * @IEEE80211_HW_SUPPORTS_UAPSD: - * Hardware supports Unscheduled Automatic Power Save Delivery - * (U-APSD) in managed mode. The mode is configured with - * conf_tx() operation. - * - * @IEEE80211_HW_REPORTS_TX_ACK_STATUS: - * Hardware can provide ack status reports of Tx frames to - * the stack. - * - * @IEEE80211_HW_CONNECTION_MONITOR: - * The hardware performs its own connection monitoring, including - * periodic keep-alives to the AP and probing the AP on beacon loss. - * When this flag is set, signaling beacon-loss will cause an immediate - * change to disassociated state. - * - * @IEEE80211_HW_NEED_DTIM_PERIOD: - * This device needs to know the DTIM period for the BSS before - * associating. - * - * @IEEE80211_HW_SUPPORTS_PER_STA_GTK: The device's crypto engine supports - * per-station GTKs as used by IBSS RSN or during fast transition. If - * the device doesn't support per-station GTKs, but can be asked not - * to decrypt group addressed frames, then IBSS RSN support is still - * possible but software crypto will be used. Advertise the wiphy flag - * only in that case. - * - * @IEEE80211_HW_AP_LINK_PS: When operating in AP mode the device - * autonomously manages the PS status of connected stations. When - * this flag is set mac80211 will not trigger PS mode for connected - * stations based on the PM bit of incoming frames. - * Use ieee80211_start_ps()/ieee8021_end_ps() to manually configure - * the PS mode of connected stations. - * - * @IEEE80211_HW_TX_AMPDU_SETUP_IN_HW: The device handles TX A-MPDU session - * setup strictly in HW. mac80211 should not attempt to do this in - * software. - * - * @IEEE80211_HW_SCAN_WHILE_IDLE: The device can do hw scan while - * being idle (i.e. mac80211 doesn't have to go idle-off during the - * the scan). - * - * @WIPHY_FLAG_OCB_SUPPORTED: the device supports operations related to the OCB - * mode (IEEE 802.11p). - */ -enum ieee80211_hw_flags { - IEEE80211_HW_HAS_RATE_CONTROL = 1<<0, - IEEE80211_HW_RX_INCLUDES_FCS = 1<<1, - IEEE80211_HW_HOST_BROADCAST_PS_BUFFERING = 1<<2, - IEEE80211_HW_2GHZ_SHORT_SLOT_INCAPABLE = 1<<3, - IEEE80211_HW_2GHZ_SHORT_PREAMBLE_INCAPABLE = 1<<4, - IEEE80211_HW_SIGNAL_UNSPEC = 1<<5, - IEEE80211_HW_SIGNAL_DBM = 1<<6, - IEEE80211_HW_NEED_DTIM_PERIOD = 1<<7, - IEEE80211_HW_SPECTRUM_MGMT = 1<<8, - IEEE80211_HW_AMPDU_AGGREGATION = 1<<9, - IEEE80211_HW_SUPPORTS_PS = 1<<10, - IEEE80211_HW_PS_NULLFUNC_STACK = 1<<11, - IEEE80211_HW_SUPPORTS_DYNAMIC_PS = 1<<12, - IEEE80211_HW_MFP_CAPABLE = 1<<13, - /* reuse bit 14 */ - IEEE80211_HW_SUPPORTS_STATIC_SMPS = 1<<15, - IEEE80211_HW_SUPPORTS_DYNAMIC_SMPS = 1<<16, - IEEE80211_HW_SUPPORTS_UAPSD = 1<<17, - IEEE80211_HW_REPORTS_TX_ACK_STATUS = 1<<18, - IEEE80211_HW_CONNECTION_MONITOR = 1<<19, - /* reuse bit 20 */ - IEEE80211_HW_SUPPORTS_PER_STA_GTK = 1<<21, - IEEE80211_HW_AP_LINK_PS = 1<<22, - IEEE80211_HW_TX_AMPDU_SETUP_IN_HW = 1<<23, - IEEE80211_HW_SCAN_WHILE_IDLE = 1<<24, - IEEE80211_HW_DOT11OCB_SUPPORTED = 1<<25, -}; - -/** - * struct ieee80211_hw - hardware information and state - * - * This structure contains the configuration and hardware - * information for an 802.11 PHY. - * - * @wiphy: This points to the &struct wiphy allocated for this - * 802.11 PHY. You must fill in the @perm_addr and @dev - * members of this structure using SET_IEEE80211_DEV() - * and SET_IEEE80211_PERM_ADDR(). Additionally, all supported - * bands (with channels, bitrates) are registered here. - * - * @conf: &struct ieee80211_conf, device configuration, don't use. - * - * @priv: pointer to private area that was allocated for driver use - * along with this structure. - * - * @flags: hardware flags, see &enum ieee80211_hw_flags. - * - * @extra_tx_headroom: headroom to reserve in each transmit skb - * for use by the driver (e.g. for transmit headers.) - * - * @channel_change_time: time (in microseconds) it takes to change channels. - * - * @max_signal: Maximum value for signal (rssi) in RX information, used - * only when @IEEE80211_HW_SIGNAL_UNSPEC or @IEEE80211_HW_SIGNAL_DB - * - * @max_listen_interval: max listen interval in units of beacon interval - * that HW supports - * - * @queues: number of available hardware transmit queues for - * data packets. WMM/QoS requires at least four, these - * queues need to have configurable access parameters. - * - * @rate_control_algorithm: rate control algorithm for this hardware. - * If unset (NULL), the default algorithm will be used. Must be - * set before calling ieee80211_register_hw(). - * - * @vif_data_size: size (in bytes) of the drv_priv data area - * within &struct ieee80211_vif. - * @sta_data_size: size (in bytes) of the drv_priv data area - * within &struct ieee80211_sta. - * - * @max_rates: maximum number of alternate rate retry stages the hw - * can handle. - * @max_report_rates: maximum number of alternate rate retry stages - * the hw can report back. - * @max_rate_tries: maximum number of tries for each stage - * - * @napi_weight: weight used for NAPI polling. You must specify an - * appropriate value here if a napi_poll operation is provided - * by your driver. - * - * @max_rx_aggregation_subframes: maximum buffer size (number of - * sub-frames) to be used for A-MPDU block ack receiver - * aggregation. - * This is only relevant if the device has restrictions on the - * number of subframes, if it relies on mac80211 to do reordering - * it shouldn't be set. - * - * @max_tx_aggregation_subframes: maximum number of subframes in an - * aggregate an HT driver will transmit, used by the peer as a - * hint to size its reorder buffer. - */ -struct ieee80211_hw { - struct ieee80211_conf conf; - struct wiphy *wiphy; - const char *rate_control_algorithm; - void *priv; - u32 flags; - unsigned int extra_tx_headroom; - int channel_change_time; - int vif_data_size; - int sta_data_size; - int napi_weight; - u16 queues; - u16 max_listen_interval; - s8 max_signal; - u8 max_rates; - u8 max_report_rates; - u8 max_rate_tries; - u8 max_rx_aggregation_subframes; - u8 max_tx_aggregation_subframes; -}; - -/** - * wiphy_to_ieee80211_hw - return a mac80211 driver hw struct from a wiphy - * - * @wiphy: the &struct wiphy which we want to query - * - * mac80211 drivers can use this to get to their respective - * &struct ieee80211_hw. Drivers wishing to get to their own private - * structure can then access it via hw->priv. Note that mac802111 drivers should - * not use wiphy_priv() to try to get their private driver structure as this - * is already used internally by mac80211. - */ -struct ieee80211_hw *wiphy_to_ieee80211_hw(struct wiphy *wiphy); - -/** - * SET_IEEE80211_DEV - set device for 802.11 hardware - * - * @hw: the &struct ieee80211_hw to set the device for - * @dev: the &struct device of this 802.11 device - */ -static inline void SET_IEEE80211_DEV(struct ieee80211_hw *hw, struct device *dev) -{ - set_wiphy_dev(hw->wiphy, dev); -} - -/** - * SET_IEEE80211_PERM_ADDR - set the permanent MAC address for 802.11 hardware - * - * @hw: the &struct ieee80211_hw to set the MAC address for - * @addr: the address to set - */ -static inline void SET_IEEE80211_PERM_ADDR(struct ieee80211_hw *hw, u8 *addr) -{ - memcpy(hw->wiphy->perm_addr, addr, ETH_ALEN); -} - -static inline struct ieee80211_rate * -ieee80211_get_tx_rate(const struct ieee80211_hw *hw, - const struct ieee80211_tx_info *c) -{ - if (WARN_ON_ONCE(c->control.rates[0].idx < 0)) - return NULL; - return &hw->wiphy->bands[c->band]->bitrates[c->control.rates[0].idx]; -} - -static inline struct ieee80211_rate * -ieee80211_get_rts_cts_rate(const struct ieee80211_hw *hw, - const struct ieee80211_tx_info *c) -{ - if (c->control.rts_cts_rate_idx < 0) - return NULL; - return &hw->wiphy->bands[c->band]->bitrates[c->control.rts_cts_rate_idx]; -} - -static inline struct ieee80211_rate * -ieee80211_get_alt_retry_rate(const struct ieee80211_hw *hw, - const struct ieee80211_tx_info *c, int idx) -{ - if (c->control.rates[idx + 1].idx < 0) - return NULL; - return &hw->wiphy->bands[c->band]->bitrates[c->control.rates[idx + 1].idx]; -} - -/** - * ieee80211_free_txskb - free TX skb - * @hw: the hardware - * @skb: the skb - * - * Free a transmit skb. Use this funtion when some failure - * to transmit happened and thus status cannot be reported. - */ -void ieee80211_free_txskb(struct ieee80211_hw *hw, struct sk_buff *skb); - -/** - * DOC: Hardware crypto acceleration - * - * mac80211 is capable of taking advantage of many hardware - * acceleration designs for encryption and decryption operations. - * - * The set_key() callback in the &struct ieee80211_ops for a given - * device is called to enable hardware acceleration of encryption and - * decryption. The callback takes a @sta parameter that will be NULL - * for default keys or keys used for transmission only, or point to - * the station information for the peer for individual keys. - * Multiple transmission keys with the same key index may be used when - * VLANs are configured for an access point. - * - * When transmitting, the TX control data will use the @hw_key_idx - * selected by the driver by modifying the &struct ieee80211_key_conf - * pointed to by the @key parameter to the set_key() function. - * - * The set_key() call for the %SET_KEY command should return 0 if - * the key is now in use, -%EOPNOTSUPP or -%ENOSPC if it couldn't be - * added; if you return 0 then hw_key_idx must be assigned to the - * hardware key index, you are free to use the full u8 range. - * - * When the cmd is %DISABLE_KEY then it must succeed. - * - * Note that it is permissible to not decrypt a frame even if a key - * for it has been uploaded to hardware, the stack will not make any - * decision based on whether a key has been uploaded or not but rather - * based on the receive flags. - * - * The &struct ieee80211_key_conf structure pointed to by the @key - * parameter is guaranteed to be valid until another call to set_key() - * removes it, but it can only be used as a cookie to differentiate - * keys. - * - * In TKIP some HW need to be provided a phase 1 key, for RX decryption - * acceleration (i.e. iwlwifi). Those drivers should provide update_tkip_key - * handler. - * The update_tkip_key() call updates the driver with the new phase 1 key. - * This happens every time the iv16 wraps around (every 65536 packets). The - * set_key() call will happen only once for each key (unless the AP did - * rekeying), it will not include a valid phase 1 key. The valid phase 1 key is - * provided by update_tkip_key only. The trigger that makes mac80211 call this - * handler is software decryption with wrap around of iv16. - */ - -/** - * DOC: Powersave support - * - * mac80211 has support for various powersave implementations. - * - * First, it can support hardware that handles all powersaving by itself, - * such hardware should simply set the %IEEE80211_HW_SUPPORTS_PS hardware - * flag. In that case, it will be told about the desired powersave mode - * with the %IEEE80211_CONF_PS flag depending on the association status. - * The hardware must take care of sending nullfunc frames when necessary, - * i.e. when entering and leaving powersave mode. The hardware is required - * to look at the AID in beacons and signal to the AP that it woke up when - * it finds traffic directed to it. - * - * %IEEE80211_CONF_PS flag enabled means that the powersave mode defined in - * IEEE 802.11-2007 section 11.2 is enabled. This is not to be confused - * with hardware wakeup and sleep states. Driver is responsible for waking - * up the hardware before issuing commands to the hardware and putting it - * back to sleep at appropriate times. - * - * When PS is enabled, hardware needs to wakeup for beacons and receive the - * buffered multicast/broadcast frames after the beacon. Also it must be - * possible to send frames and receive the acknowledment frame. - * - * Other hardware designs cannot send nullfunc frames by themselves and also - * need software support for parsing the TIM bitmap. This is also supported - * by mac80211 by combining the %IEEE80211_HW_SUPPORTS_PS and - * %IEEE80211_HW_PS_NULLFUNC_STACK flags. The hardware is of course still - * required to pass up beacons. The hardware is still required to handle - * waking up for multicast traffic; if it cannot the driver must handle that - * as best as it can, mac80211 is too slow to do that. - * - * Dynamic powersave is an extension to normal powersave in which the - * hardware stays awake for a user-specified period of time after sending a - * frame so that reply frames need not be buffered and therefore delayed to - * the next wakeup. It's compromise of getting good enough latency when - * there's data traffic and still saving significantly power in idle - * periods. - * - * Dynamic powersave is simply supported by mac80211 enabling and disabling - * PS based on traffic. Driver needs to only set %IEEE80211_HW_SUPPORTS_PS - * flag and mac80211 will handle everything automatically. Additionally, - * hardware having support for the dynamic PS feature may set the - * %IEEE80211_HW_SUPPORTS_DYNAMIC_PS flag to indicate that it can support - * dynamic PS mode itself. The driver needs to look at the - * @dynamic_ps_timeout hardware configuration value and use it that value - * whenever %IEEE80211_CONF_PS is set. In this case mac80211 will disable - * dynamic PS feature in stack and will just keep %IEEE80211_CONF_PS - * enabled whenever user has enabled powersave. - * - * Some hardware need to toggle a single shared antenna between WLAN and - * Bluetooth to facilitate co-existence. These types of hardware set - * limitations on the use of host controlled dynamic powersave whenever there - * is simultaneous WLAN and Bluetooth traffic. For these types of hardware, the - * driver may request temporarily going into full power save, in order to - * enable toggling the antenna between BT and WLAN. If the driver requests - * disabling dynamic powersave, the @dynamic_ps_timeout value will be - * temporarily set to zero until the driver re-enables dynamic powersave. - * - * Driver informs U-APSD client support by enabling - * %IEEE80211_HW_SUPPORTS_UAPSD flag. The mode is configured through the - * uapsd paramater in conf_tx() operation. Hardware needs to send the QoS - * Nullfunc frames and stay awake until the service period has ended. To - * utilize U-APSD, dynamic powersave is disabled for voip AC and all frames - * from that AC are transmitted with powersave enabled. - * - * Note: U-APSD client mode is not yet supported with - * %IEEE80211_HW_PS_NULLFUNC_STACK. - */ - -/** - * DOC: Beacon filter support - * - * Some hardware have beacon filter support to reduce host cpu wakeups - * which will reduce system power consumption. It usually works so that - * the firmware creates a checksum of the beacon but omits all constantly - * changing elements (TSF, TIM etc). Whenever the checksum changes the - * beacon is forwarded to the host, otherwise it will be just dropped. That - * way the host will only receive beacons where some relevant information - * (for example ERP protection or WMM settings) have changed. - * - * Beacon filter support is advertised with the %IEEE80211_VIF_BEACON_FILTER - * interface capability. The driver needs to enable beacon filter support - * whenever power save is enabled, that is %IEEE80211_CONF_PS is set. When - * power save is enabled, the stack will not check for beacon loss and the - * driver needs to notify about loss of beacons with ieee80211_beacon_loss(). - * - * The time (or number of beacons missed) until the firmware notifies the - * driver of a beacon loss event (which in turn causes the driver to call - * ieee80211_beacon_loss()) should be configurable and will be controlled - * by mac80211 and the roaming algorithm in the future. - * - * Since there may be constantly changing information elements that nothing - * in the software stack cares about, we will, in the future, have mac80211 - * tell the driver which information elements are interesting in the sense - * that we want to see changes in them. This will include - * - a list of information element IDs - * - a list of OUIs for the vendor information element - * - * Ideally, the hardware would filter out any beacons without changes in the - * requested elements, but if it cannot support that it may, at the expense - * of some efficiency, filter out only a subset. For example, if the device - * doesn't support checking for OUIs it should pass up all changes in all - * vendor information elements. - * - * Note that change, for the sake of simplification, also includes information - * elements appearing or disappearing from the beacon. - * - * Some hardware supports an "ignore list" instead, just make sure nothing - * that was requested is on the ignore list, and include commonly changing - * information element IDs in the ignore list, for example 11 (BSS load) and - * the various vendor-assigned IEs with unknown contents (128, 129, 133-136, - * 149, 150, 155, 156, 173, 176, 178, 179, 219); for forward compatibility - * it could also include some currently unused IDs. - * - * - * In addition to these capabilities, hardware should support notifying the - * host of changes in the beacon RSSI. This is relevant to implement roaming - * when no traffic is flowing (when traffic is flowing we see the RSSI of - * the received data packets). This can consist in notifying the host when - * the RSSI changes significantly or when it drops below or rises above - * configurable thresholds. In the future these thresholds will also be - * configured by mac80211 (which gets them from userspace) to implement - * them as the roaming algorithm requires. - * - * If the hardware cannot implement this, the driver should ask it to - * periodically pass beacon frames to the host so that software can do the - * signal strength threshold checking. - */ - -/** - * DOC: Spatial multiplexing power save - * - * SMPS (Spatial multiplexing power save) is a mechanism to conserve - * power in an 802.11n implementation. For details on the mechanism - * and rationale, please refer to 802.11 (as amended by 802.11n-2009) - * "11.2.3 SM power save". - * - * The mac80211 implementation is capable of sending action frames - * to update the AP about the station's SMPS mode, and will instruct - * the driver to enter the specific mode. It will also announce the - * requested SMPS mode during the association handshake. Hardware - * support for this feature is required, and can be indicated by - * hardware flags. - * - * The default mode will be "automatic", which nl80211/cfg80211 - * defines to be dynamic SMPS in (regular) powersave, and SMPS - * turned off otherwise. - * - * To support this feature, the driver must set the appropriate - * hardware support flags, and handle the SMPS flag to the config() - * operation. It will then with this mechanism be instructed to - * enter the requested SMPS mode while associated to an HT AP. - */ - -/** - * DOC: Frame filtering - * - * mac80211 requires to see many management frames for proper - * operation, and users may want to see many more frames when - * in monitor mode. However, for best CPU usage and power consumption, - * having as few frames as possible percolate through the stack is - * desirable. Hence, the hardware should filter as much as possible. - * - * To achieve this, mac80211 uses filter flags (see below) to tell - * the driver's configure_filter() function which frames should be - * passed to mac80211 and which should be filtered out. - * - * Before configure_filter() is invoked, the prepare_multicast() - * callback is invoked with the parameters @mc_count and @mc_list - * for the combined multicast address list of all virtual interfaces. - * It's use is optional, and it returns a u64 that is passed to - * configure_filter(). Additionally, configure_filter() has the - * arguments @changed_flags telling which flags were changed and - * @total_flags with the new flag states. - * - * If your device has no multicast address filters your driver will - * need to check both the %FIF_ALLMULTI flag and the @mc_count - * parameter to see whether multicast frames should be accepted - * or dropped. - * - * All unsupported flags in @total_flags must be cleared. - * Hardware does not support a flag if it is incapable of _passing_ - * the frame to the stack. Otherwise the driver must ignore - * the flag, but not clear it. - * You must _only_ clear the flag (announce no support for the - * flag to mac80211) if you are not able to pass the packet type - * to the stack (so the hardware always filters it). - * So for example, you should clear @FIF_CONTROL, if your hardware - * always filters control frames. If your hardware always passes - * control frames to the kernel and is incapable of filtering them, - * you do _not_ clear the @FIF_CONTROL flag. - * This rule applies to all other FIF flags as well. - */ - -/** - * DOC: AP support for powersaving clients - * - * In order to implement AP and P2P GO modes, mac80211 has support for - * client powersaving, both "legacy" PS (PS-Poll/null data) and uAPSD. - * There currently is no support for sAPSD. - * - * There is one assumption that mac80211 makes, namely that a client - * will not poll with PS-Poll and trigger with uAPSD at the same time. - * Both are supported, and both can be used by the same client, but - * they can't be used concurrently by the same client. This simplifies - * the driver code. - * - * The first thing to keep in mind is that there is a flag for complete - * driver implementation: %IEEE80211_HW_AP_LINK_PS. If this flag is set, - * mac80211 expects the driver to handle most of the state machine for - * powersaving clients and will ignore the PM bit in incoming frames. - * Drivers then use ieee80211_sta_ps_transition() to inform mac80211 of - * stations' powersave transitions. In this mode, mac80211 also doesn't - * handle PS-Poll/uAPSD. - * - * In the mode without %IEEE80211_HW_AP_LINK_PS, mac80211 will check the - * PM bit in incoming frames for client powersave transitions. When a - * station goes to sleep, we will stop transmitting to it. There is, - * however, a race condition: a station might go to sleep while there is - * data buffered on hardware queues. If the device has support for this - * it will reject frames, and the driver should give the frames back to - * mac80211 with the %IEEE80211_TX_STAT_TX_FILTERED flag set which will - * cause mac80211 to retry the frame when the station wakes up. The - * driver is also notified of powersave transitions by calling its - * @sta_notify callback. - * - * When the station is asleep, it has three choices: it can wake up, - * it can PS-Poll, or it can possibly start a uAPSD service period. - * Waking up is implemented by simply transmitting all buffered (and - * filtered) frames to the station. This is the easiest case. When - * the station sends a PS-Poll or a uAPSD trigger frame, mac80211 - * will inform the driver of this with the @allow_buffered_frames - * callback; this callback is optional. mac80211 will then transmit - * the frames as usual and set the %IEEE80211_TX_CTL_NO_PS_BUFFER - * on each frame. The last frame in the service period (or the only - * response to a PS-Poll) also has %IEEE80211_TX_STATUS_EOSP set to - * indicate that it ends the service period; as this frame must have - * TX status report it also sets %IEEE80211_TX_CTL_REQ_TX_STATUS. - * When TX status is reported for this frame, the service period is - * marked has having ended and a new one can be started by the peer. - * - * Additionally, non-bufferable MMPDUs can also be transmitted by - * mac80211 with the %IEEE80211_TX_CTL_NO_PS_BUFFER set in them. - * - * Another race condition can happen on some devices like iwlwifi - * when there are frames queued for the station and it wakes up - * or polls; the frames that are already queued could end up being - * transmitted first instead, causing reordering and/or wrong - * processing of the EOSP. The cause is that allowing frames to be - * transmitted to a certain station is out-of-band communication to - * the device. To allow this problem to be solved, the driver can - * call ieee80211_sta_block_awake() if frames are buffered when it - * is notified that the station went to sleep. When all these frames - * have been filtered (see above), it must call the function again - * to indicate that the station is no longer blocked. - * - * If the driver buffers frames in the driver for aggregation in any - * way, it must use the ieee80211_sta_set_buffered() call when it is - * notified of the station going to sleep to inform mac80211 of any - * TIDs that have frames buffered. Note that when a station wakes up - * this information is reset (hence the requirement to call it when - * informed of the station going to sleep). Then, when a service - * period starts for any reason, @release_buffered_frames is called - * with the number of frames to be released and which TIDs they are - * to come from. In this case, the driver is responsible for setting - * the EOSP (for uAPSD) and MORE_DATA bits in the released frames, - * to help the @more_data paramter is passed to tell the driver if - * there is more data on other TIDs -- the TIDs to release frames - * from are ignored since mac80211 doesn't know how many frames the - * buffers for those TIDs contain. - * - * If the driver also implement GO mode, where absence periods may - * shorten service periods (or abort PS-Poll responses), it must - * filter those response frames except in the case of frames that - * are buffered in the driver -- those must remain buffered to avoid - * reordering. Because it is possible that no frames are released - * in this case, the driver must call ieee80211_sta_eosp_irqsafe() - * to indicate to mac80211 that the service period ended anyway. - * - * Finally, if frames from multiple TIDs are released from mac80211 - * but the driver might reorder them, it must clear & set the flags - * appropriately (only the last frame may have %IEEE80211_TX_STATUS_EOSP) - * and also take care of the EOSP and MORE_DATA bits in the frame. - * The driver may also use ieee80211_sta_eosp_irqsafe() in this case. - */ - -/** - * enum ieee80211_filter_flags - hardware filter flags - * - * These flags determine what the filter in hardware should be - * programmed to let through and what should not be passed to the - * stack. It is always safe to pass more frames than requested, - * but this has negative impact on power consumption. - * - * @FIF_PROMISC_IN_BSS: promiscuous mode within your BSS, - * think of the BSS as your network segment and then this corresponds - * to the regular ethernet device promiscuous mode. - * - * @FIF_ALLMULTI: pass all multicast frames, this is used if requested - * by the user or if the hardware is not capable of filtering by - * multicast address. - * - * @FIF_FCSFAIL: pass frames with failed FCS (but you need to set the - * %RX_FLAG_FAILED_FCS_CRC for them) - * - * @FIF_PLCPFAIL: pass frames with failed PLCP CRC (but you need to set - * the %RX_FLAG_FAILED_PLCP_CRC for them - * - * @FIF_BCN_PRBRESP_PROMISC: This flag is set during scanning to indicate - * to the hardware that it should not filter beacons or probe responses - * by BSSID. Filtering them can greatly reduce the amount of processing - * mac80211 needs to do and the amount of CPU wakeups, so you should - * honour this flag if possible. - * - * @FIF_CONTROL: pass control frames (except for PS Poll), if PROMISC_IN_BSS - * is not set then only those addressed to this station. - * - * @FIF_OTHER_BSS: pass frames destined to other BSSes - * - * @FIF_PSPOLL: pass PS Poll frames, if PROMISC_IN_BSS is not set then only - * those addressed to this station. - * - * @FIF_PROBE_REQ: pass probe request frames - */ -enum ieee80211_filter_flags { - FIF_PROMISC_IN_BSS = 1<<0, - FIF_ALLMULTI = 1<<1, - FIF_FCSFAIL = 1<<2, - FIF_PLCPFAIL = 1<<3, - FIF_BCN_PRBRESP_PROMISC = 1<<4, - FIF_CONTROL = 1<<5, - FIF_OTHER_BSS = 1<<6, - FIF_PSPOLL = 1<<7, - FIF_PROBE_REQ = 1<<8, -}; - -/** - * enum ieee80211_ampdu_mlme_action - A-MPDU actions - * - * These flags are used with the ampdu_action() callback in - * &struct ieee80211_ops to indicate which action is needed. - * - * Note that drivers MUST be able to deal with a TX aggregation - * session being stopped even before they OK'ed starting it by - * calling ieee80211_start_tx_ba_cb_irqsafe, because the peer - * might receive the addBA frame and send a delBA right away! - * - * @IEEE80211_AMPDU_RX_START: start Rx aggregation - * @IEEE80211_AMPDU_RX_STOP: stop Rx aggregation - * @IEEE80211_AMPDU_TX_START: start Tx aggregation - * @IEEE80211_AMPDU_TX_STOP: stop Tx aggregation - * @IEEE80211_AMPDU_TX_OPERATIONAL: TX aggregation has become operational - */ -enum ieee80211_ampdu_mlme_action { - IEEE80211_AMPDU_RX_START, - IEEE80211_AMPDU_RX_STOP, - IEEE80211_AMPDU_TX_START, - IEEE80211_AMPDU_TX_STOP, - IEEE80211_AMPDU_TX_OPERATIONAL, -}; - -/** - * enum ieee80211_frame_release_type - frame release reason - * @IEEE80211_FRAME_RELEASE_PSPOLL: frame released for PS-Poll - * @IEEE80211_FRAME_RELEASE_UAPSD: frame(s) released due to - * frame received on trigger-enabled AC - */ -enum ieee80211_frame_release_type { - IEEE80211_FRAME_RELEASE_PSPOLL, - IEEE80211_FRAME_RELEASE_UAPSD, -}; - -/** - * struct ieee80211_ops - callbacks from mac80211 to the driver - * - * This structure contains various callbacks that the driver may - * handle or, in some cases, must handle, for example to configure - * the hardware to a new channel or to transmit a frame. - * - * @tx: Handler that 802.11 module calls for each transmitted frame. - * skb contains the buffer starting from the IEEE 802.11 header. - * The low-level driver should send the frame out based on - * configuration in the TX control data. This handler should, - * preferably, never fail and stop queues appropriately. - * This must be implemented if @tx_frags is not. - * Must be atomic. - * - * @tx_frags: Called to transmit multiple fragments of a single MSDU. - * This handler must consume all fragments, sending out some of - * them only is useless and it can't ask for some of them to be - * queued again. If the frame is not fragmented the queue has a - * single SKB only. To avoid issues with the networking stack - * when TX status is reported the frames should be removed from - * the skb queue. - * If this is used, the tx_info @vif and @sta pointers will be - * invalid -- you must not use them in that case. - * This must be implemented if @tx isn't. - * Must be atomic. - * - * @start: Called before the first netdevice attached to the hardware - * is enabled. This should turn on the hardware and must turn on - * frame reception (for possibly enabled monitor interfaces.) - * Returns negative error codes, these may be seen in userspace, - * or zero. - * When the device is started it should not have a MAC address - * to avoid acknowledging frames before a non-monitor device - * is added. - * Must be implemented and can sleep. - * - * @stop: Called after last netdevice attached to the hardware - * is disabled. This should turn off the hardware (at least - * it must turn off frame reception.) - * May be called right after add_interface if that rejects - * an interface. If you added any work onto the mac80211 workqueue - * you should ensure to cancel it on this callback. - * Must be implemented and can sleep. - * - * @suspend: Suspend the device; mac80211 itself will quiesce before and - * stop transmitting and doing any other configuration, and then - * ask the device to suspend. This is only invoked when WoWLAN is - * configured, otherwise the device is deconfigured completely and - * reconfigured at resume time. - * The driver may also impose special conditions under which it - * wants to use the "normal" suspend (deconfigure), say if it only - * supports WoWLAN when the device is associated. In this case, it - * must return 1 from this function. - * - * @resume: If WoWLAN was configured, this indicates that mac80211 is - * now resuming its operation, after this the device must be fully - * functional again. If this returns an error, the only way out is - * to also unregister the device. If it returns 1, then mac80211 - * will also go through the regular complete restart on resume. - * - * @add_interface: Called when a netdevice attached to the hardware is - * enabled. Because it is not called for monitor mode devices, @start - * and @stop must be implemented. - * The driver should perform any initialization it needs before - * the device can be enabled. The initial configuration for the - * interface is given in the conf parameter. - * The callback may refuse to add an interface by returning a - * negative error code (which will be seen in userspace.) - * Must be implemented and can sleep. - * - * @change_interface: Called when a netdevice changes type. This callback - * is optional, but only if it is supported can interface types be - * switched while the interface is UP. The callback may sleep. - * Note that while an interface is being switched, it will not be - * found by the interface iteration callbacks. - * - * @remove_interface: Notifies a driver that an interface is going down. - * The @stop callback is called after this if it is the last interface - * and no monitor interfaces are present. - * When all interfaces are removed, the MAC address in the hardware - * must be cleared so the device no longer acknowledges packets, - * the mac_addr member of the conf structure is, however, set to the - * MAC address of the device going away. - * Hence, this callback must be implemented. It can sleep. - * - * @config: Handler for configuration requests. IEEE 802.11 code calls this - * function to change hardware configuration, e.g., channel. - * This function should never fail but returns a negative error code - * if it does. The callback can sleep. - * - * @bss_info_changed: Handler for configuration requests related to BSS - * parameters that may vary during BSS's lifespan, and may affect low - * level driver (e.g. assoc/disassoc status, erp parameters). - * This function should not be used if no BSS has been set, unless - * for association indication. The @changed parameter indicates which - * of the bss parameters has changed when a call is made. The callback - * can sleep. - * - * @prepare_multicast: Prepare for multicast filter configuration. - * This callback is optional, and its return value is passed - * to configure_filter(). This callback must be atomic. - * - * @configure_filter: Configure the device's RX filter. - * See the section "Frame filtering" for more information. - * This callback must be implemented and can sleep. - * - * @set_tim: Set TIM bit. mac80211 calls this function when a TIM bit - * must be set or cleared for a given STA. Must be atomic. - * - * @set_key: See the section "Hardware crypto acceleration" - * This callback is only called between add_interface and - * remove_interface calls, i.e. while the given virtual interface - * is enabled. - * Returns a negative error code if the key can't be added. - * The callback can sleep. - * - * @update_tkip_key: See the section "Hardware crypto acceleration" - * This callback will be called in the context of Rx. Called for drivers - * which set IEEE80211_KEY_FLAG_TKIP_REQ_RX_P1_KEY. - * The callback must be atomic. - * - * @set_rekey_data: If the device supports GTK rekeying, for example while the - * host is suspended, it can assign this callback to retrieve the data - * necessary to do GTK rekeying, this is the KEK, KCK and replay counter. - * After rekeying was done it should (for example during resume) notify - * userspace of the new replay counter using ieee80211_gtk_rekey_notify(). - * - * @hw_scan: Ask the hardware to service the scan request, no need to start - * the scan state machine in stack. The scan must honour the channel - * configuration done by the regulatory agent in the wiphy's - * registered bands. The hardware (or the driver) needs to make sure - * that power save is disabled. - * The @req ie/ie_len members are rewritten by mac80211 to contain the - * entire IEs after the SSID, so that drivers need not look at these - * at all but just send them after the SSID -- mac80211 includes the - * (extended) supported rates and HT information (where applicable). - * When the scan finishes, ieee80211_scan_completed() must be called; - * note that it also must be called when the scan cannot finish due to - * any error unless this callback returned a negative error code. - * The callback can sleep. - * - * @cancel_hw_scan: Ask the low-level tp cancel the active hw scan. - * The driver should ask the hardware to cancel the scan (if possible), - * but the scan will be completed only after the driver will call - * ieee80211_scan_completed(). - * This callback is needed for wowlan, to prevent enqueueing a new - * scan_work after the low-level driver was already suspended. - * The callback can sleep. - * - * @sched_scan_start: Ask the hardware to start scanning repeatedly at - * specific intervals. The driver must call the - * ieee80211_sched_scan_results() function whenever it finds results. - * This process will continue until sched_scan_stop is called. - * - * @sched_scan_stop: Tell the hardware to stop an ongoing scheduled scan. - * - * @sw_scan_start: Notifier function that is called just before a software scan - * is started. Can be NULL, if the driver doesn't need this notification. - * The callback can sleep. - * - * @sw_scan_complete: Notifier function that is called just after a - * software scan finished. Can be NULL, if the driver doesn't need - * this notification. - * The callback can sleep. - * - * @get_stats: Return low-level statistics. - * Returns zero if statistics are available. - * The callback can sleep. - * - * @get_tkip_seq: If your device implements TKIP encryption in hardware this - * callback should be provided to read the TKIP transmit IVs (both IV32 - * and IV16) for the given key from hardware. - * The callback must be atomic. - * - * @set_frag_threshold: Configuration of fragmentation threshold. Assign this - * if the device does fragmentation by itself; if this callback is - * implemented then the stack will not do fragmentation. - * The callback can sleep. - * - * @set_rts_threshold: Configuration of RTS threshold (if device needs it) - * The callback can sleep. - * - * @sta_add: Notifies low level driver about addition of an associated station, - * AP, IBSS/WDS/mesh peer etc. This callback can sleep. - * - * @sta_remove: Notifies low level driver about removal of an associated - * station, AP, IBSS/WDS/mesh peer etc. This callback can sleep. - * - * @sta_notify: Notifies low level driver about power state transition of an - * associated station, AP, IBSS/WDS/mesh peer etc. For a VIF operating - * in AP mode, this callback will not be called when the flag - * %IEEE80211_HW_AP_LINK_PS is set. Must be atomic. - * - * @sta_state: Notifies low level driver about state transition of a - * station (which can be the AP, a client, IBSS/WDS/mesh peer etc.) - * This callback is mutually exclusive with @sta_add/@sta_remove. - * It must not fail for down transitions but may fail for transitions - * up the list of states. - * The callback can sleep. - * - * @conf_tx: Configure TX queue parameters (EDCF (aifs, cw_min, cw_max), - * bursting) for a hardware TX queue. - * Returns a negative error code on failure. - * The callback can sleep. - * - * @get_tsf: Get the current TSF timer value from firmware/hardware. Currently, - * this is only used for IBSS mode BSSID merging and debugging. Is not a - * required function. - * The callback can sleep. - * - * @set_tsf: Set the TSF timer to the specified value in the firmware/hardware. - * Currently, this is only used for IBSS mode debugging. Is not a - * required function. - * The callback can sleep. - * - * @reset_tsf: Reset the TSF timer and allow firmware/hardware to synchronize - * with other STAs in the IBSS. This is only used in IBSS mode. This - * function is optional if the firmware/hardware takes full care of - * TSF synchronization. - * The callback can sleep. - * - * @tx_last_beacon: Determine whether the last IBSS beacon was sent by us. - * This is needed only for IBSS mode and the result of this function is - * used to determine whether to reply to Probe Requests. - * Returns non-zero if this device sent the last beacon. - * The callback can sleep. - * - * @ampdu_action: Perform a certain A-MPDU action - * The RA/TID combination determines the destination and TID we want - * the ampdu action to be performed for. The action is defined through - * ieee80211_ampdu_mlme_action. Starting sequence number (@ssn) - * is the first frame we expect to perform the action on. Notice - * that TX/RX_STOP can pass NULL for this parameter. - * The @buf_size parameter is only valid when the action is set to - * %IEEE80211_AMPDU_TX_OPERATIONAL and indicates the peer's reorder - * buffer size (number of subframes) for this session -- the driver - * may neither send aggregates containing more subframes than this - * nor send aggregates in a way that lost frames would exceed the - * buffer size. If just limiting the aggregate size, this would be - * possible with a buf_size of 8: - * - TX: 1.....7 - * - RX: 2....7 (lost frame #1) - * - TX: 8..1... - * which is invalid since #1 was now re-transmitted well past the - * buffer size of 8. Correct ways to retransmit #1 would be: - * - TX: 1 or 18 or 81 - * Even "189" would be wrong since 1 could be lost again. - * - * Returns a negative error code on failure. - * The callback can sleep. - * - * @get_survey: Return per-channel survey information - * - * @rfkill_poll: Poll rfkill hardware state. If you need this, you also - * need to set wiphy->rfkill_poll to %true before registration, - * and need to call wiphy_rfkill_set_hw_state() in the callback. - * The callback can sleep. - * - * @set_coverage_class: Set slot time for given coverage class as specified - * in IEEE 802.11-2007 section 17.3.8.6 and modify ACK timeout - * accordingly. This callback is not required and may sleep. - * - * @testmode_cmd: Implement a cfg80211 test mode command. - * The callback can sleep. - * @testmode_dump: Implement a cfg80211 test mode dump. The callback can sleep. - * - * @flush: Flush all pending frames from the hardware queue, making sure - * that the hardware queues are empty. If the parameter @drop is set - * to %true, pending frames may be dropped. The callback can sleep. - * - * @channel_switch: Drivers that need (or want) to offload the channel - * switch operation for CSAs received from the AP may implement this - * callback. They must then call ieee80211_chswitch_done() to indicate - * completion of the channel switch. - * - * @napi_poll: Poll Rx queue for incoming data frames. - * - * @set_antenna: Set antenna configuration (tx_ant, rx_ant) on the device. - * Parameters are bitmaps of allowed antennas to use for TX/RX. Drivers may - * reject TX/RX mask combinations they cannot support by returning -EINVAL - * (also see nl80211.h @NL80211_ATTR_WIPHY_ANTENNA_TX). - * - * @get_antenna: Get current antenna configuration from device (tx_ant, rx_ant). - * - * @remain_on_channel: Starts an off-channel period on the given channel, must - * call back to ieee80211_ready_on_channel() when on that channel. Note - * that normal channel traffic is not stopped as this is intended for hw - * offload. Frames to transmit on the off-channel channel are transmitted - * normally except for the %IEEE80211_TX_CTL_TX_OFFCHAN flag. When the - * duration (which will always be non-zero) expires, the driver must call - * ieee80211_remain_on_channel_expired(). This callback may sleep. - * @cancel_remain_on_channel: Requests that an ongoing off-channel period is - * aborted before it expires. This callback may sleep. - * - * @set_ringparam: Set tx and rx ring sizes. - * - * @get_ringparam: Get tx and rx ring current and maximum sizes. - * - * @tx_frames_pending: Check if there is any pending frame in the hardware - * queues before entering power save. - * - * @set_bitrate_mask: Set a mask of rates to be used for rate control selection - * when transmitting a frame. Currently only legacy rates are handled. - * The callback can sleep. - * @rssi_callback: Notify driver when the average RSSI goes above/below - * thresholds that were registered previously. The callback can sleep. - * - * @release_buffered_frames: Release buffered frames according to the given - * parameters. In the case where the driver buffers some frames for - * sleeping stations mac80211 will use this callback to tell the driver - * to release some frames, either for PS-poll or uAPSD. - * Note that if the @more_data paramter is %false the driver must check - * if there are more frames on the given TIDs, and if there are more than - * the frames being released then it must still set the more-data bit in - * the frame. If the @more_data parameter is %true, then of course the - * more-data bit must always be set. - * The @tids parameter tells the driver which TIDs to release frames - * from, for PS-poll it will always have only a single bit set. - * In the case this is used for a PS-poll initiated release, the - * @num_frames parameter will always be 1 so code can be shared. In - * this case the driver must also set %IEEE80211_TX_STATUS_EOSP flag - * on the TX status (and must report TX status) so that the PS-poll - * period is properly ended. This is used to avoid sending multiple - * responses for a retried PS-poll frame. - * In the case this is used for uAPSD, the @num_frames parameter may be - * bigger than one, but the driver may send fewer frames (it must send - * at least one, however). In this case it is also responsible for - * setting the EOSP flag in the QoS header of the frames. Also, when the - * service period ends, the driver must set %IEEE80211_TX_STATUS_EOSP - * on the last frame in the SP. Alternatively, it may call the function - * ieee80211_sta_eosp_irqsafe() to inform mac80211 of the end of the SP. - * This callback must be atomic. - * @allow_buffered_frames: Prepare device to allow the given number of frames - * to go out to the given station. The frames will be sent by mac80211 - * via the usual TX path after this call. The TX information for frames - * released will also have the %IEEE80211_TX_CTL_NO_PS_BUFFER flag set - * and the last one will also have %IEEE80211_TX_STATUS_EOSP set. In case - * frames from multiple TIDs are released and the driver might reorder - * them between the TIDs, it must set the %IEEE80211_TX_STATUS_EOSP flag - * on the last frame and clear it on all others and also handle the EOSP - * bit in the QoS header correctly. Alternatively, it can also call the - * ieee80211_sta_eosp_irqsafe() function. - * The @tids parameter is a bitmap and tells the driver which TIDs the - * frames will be on; it will at most have two bits set. - * This callback must be atomic. - */ -struct ieee80211_ops { - void (*tx)(struct ieee80211_hw *hw, struct sk_buff *skb); - void (*tx_frags)(struct ieee80211_hw *hw, struct ieee80211_vif *vif, - struct ieee80211_sta *sta, struct sk_buff_head *skbs); - int (*start)(struct ieee80211_hw *hw); - void (*stop)(struct ieee80211_hw *hw); -#ifdef CONFIG_PM - int (*suspend)(struct ieee80211_hw *hw, struct cfg80211_wowlan *wowlan); - int (*resume)(struct ieee80211_hw *hw); -#endif - int (*add_interface)(struct ieee80211_hw *hw, - struct ieee80211_vif *vif); - int (*change_interface)(struct ieee80211_hw *hw, - struct ieee80211_vif *vif, - enum nl80211_iftype new_type, bool p2p); - void (*remove_interface)(struct ieee80211_hw *hw, - struct ieee80211_vif *vif); - int (*config)(struct ieee80211_hw *hw, u32 changed); - void (*bss_info_changed)(struct ieee80211_hw *hw, - struct ieee80211_vif *vif, - struct ieee80211_bss_conf *info, - u32 changed); - - u64 (*prepare_multicast)(struct ieee80211_hw *hw, -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35)) - struct netdev_hw_addr_list *mc_list); -#else - int mc_count, struct dev_addr_list *mc_list); -#endif - void (*configure_filter)(struct ieee80211_hw *hw, - unsigned int changed_flags, - unsigned int *total_flags, - u64 multicast); - int (*set_tim)(struct ieee80211_hw *hw, struct ieee80211_sta *sta, - bool set); - int (*set_key)(struct ieee80211_hw *hw, enum set_key_cmd cmd, - struct ieee80211_vif *vif, struct ieee80211_sta *sta, - struct ieee80211_key_conf *key); - void (*update_tkip_key)(struct ieee80211_hw *hw, - struct ieee80211_vif *vif, - struct ieee80211_key_conf *conf, - struct ieee80211_sta *sta, - u32 iv32, u16 *phase1key); - void (*set_rekey_data)(struct ieee80211_hw *hw, - struct ieee80211_vif *vif, - struct cfg80211_gtk_rekey_data *data); - int (*hw_scan)(struct ieee80211_hw *hw, struct ieee80211_vif *vif, - struct cfg80211_scan_request *req); - void (*cancel_hw_scan)(struct ieee80211_hw *hw, - struct ieee80211_vif *vif); - int (*sched_scan_start)(struct ieee80211_hw *hw, - struct ieee80211_vif *vif, - struct cfg80211_sched_scan_request *req, - struct ieee80211_sched_scan_ies *ies); - void (*sched_scan_stop)(struct ieee80211_hw *hw, - struct ieee80211_vif *vif); - void (*sw_scan_start)(struct ieee80211_hw *hw); - void (*sw_scan_complete)(struct ieee80211_hw *hw); - int (*get_stats)(struct ieee80211_hw *hw, - struct ieee80211_low_level_stats *stats); - void (*get_tkip_seq)(struct ieee80211_hw *hw, u8 hw_key_idx, - u32 *iv32, u16 *iv16); - int (*set_frag_threshold)(struct ieee80211_hw *hw, u32 value); - int (*set_rts_threshold)(struct ieee80211_hw *hw, u32 value); - int (*sta_add)(struct ieee80211_hw *hw, struct ieee80211_vif *vif, - struct ieee80211_sta *sta); - int (*sta_remove)(struct ieee80211_hw *hw, struct ieee80211_vif *vif, - struct ieee80211_sta *sta); - void (*sta_notify)(struct ieee80211_hw *hw, struct ieee80211_vif *vif, - enum sta_notify_cmd, struct ieee80211_sta *sta); - int (*sta_state)(struct ieee80211_hw *hw, struct ieee80211_vif *vif, - struct ieee80211_sta *sta, - enum ieee80211_sta_state old_state, - enum ieee80211_sta_state new_state); - int (*conf_tx)(struct ieee80211_hw *hw, - struct ieee80211_vif *vif, u16 queue, - const struct ieee80211_tx_queue_params *params); - u64 (*get_tsf)(struct ieee80211_hw *hw, struct ieee80211_vif *vif); - void (*set_tsf)(struct ieee80211_hw *hw, struct ieee80211_vif *vif, - u64 tsf); - void (*reset_tsf)(struct ieee80211_hw *hw, struct ieee80211_vif *vif); - int (*tx_last_beacon)(struct ieee80211_hw *hw); - int (*ampdu_action)(struct ieee80211_hw *hw, - struct ieee80211_vif *vif, - enum ieee80211_ampdu_mlme_action action, - struct ieee80211_sta *sta, u16 tid, u16 *ssn, - u8 buf_size); - int (*get_survey)(struct ieee80211_hw *hw, int idx, - struct survey_info *survey); - void (*rfkill_poll)(struct ieee80211_hw *hw); - void (*set_coverage_class)(struct ieee80211_hw *hw, u8 coverage_class); -#ifdef CONFIG_NL80211_TESTMODE - int (*testmode_cmd)(struct ieee80211_hw *hw, void *data, int len); - int (*testmode_dump)(struct ieee80211_hw *hw, struct sk_buff *skb, - struct netlink_callback *cb, - void *data, int len); -#endif - void (*flush)(struct ieee80211_hw *hw, bool drop); - void (*channel_switch)(struct ieee80211_hw *hw, - struct ieee80211_channel_switch *ch_switch); - int (*napi_poll)(struct ieee80211_hw *hw, int budget); - int (*set_antenna)(struct ieee80211_hw *hw, u32 tx_ant, u32 rx_ant); - int (*get_antenna)(struct ieee80211_hw *hw, u32 *tx_ant, u32 *rx_ant); - - int (*remain_on_channel)(struct ieee80211_hw *hw, - struct ieee80211_channel *chan, - enum nl80211_channel_type channel_type, - int duration); - int (*cancel_remain_on_channel)(struct ieee80211_hw *hw); - int (*set_ringparam)(struct ieee80211_hw *hw, u32 tx, u32 rx); - void (*get_ringparam)(struct ieee80211_hw *hw, - u32 *tx, u32 *tx_max, u32 *rx, u32 *rx_max); - bool (*tx_frames_pending)(struct ieee80211_hw *hw); - int (*set_bitrate_mask)(struct ieee80211_hw *hw, struct ieee80211_vif *vif, - const struct cfg80211_bitrate_mask *mask); - void (*rssi_callback)(struct ieee80211_hw *hw, - enum ieee80211_rssi_event rssi_event); - - void (*allow_buffered_frames)(struct ieee80211_hw *hw, - struct ieee80211_sta *sta, - u16 tids, int num_frames, - enum ieee80211_frame_release_type reason, - bool more_data); - void (*release_buffered_frames)(struct ieee80211_hw *hw, - struct ieee80211_sta *sta, - u16 tids, int num_frames, - enum ieee80211_frame_release_type reason, - bool more_data); -}; - -/** - * ieee80211_alloc_hw - Allocate a new hardware device - * - * This must be called once for each hardware device. The returned pointer - * must be used to refer to this device when calling other functions. - * mac80211 allocates a private data area for the driver pointed to by - * @priv in &struct ieee80211_hw, the size of this area is given as - * @priv_data_len. - * - * @priv_data_len: length of private data - * @ops: callbacks for this device - */ -struct ieee80211_hw *ieee80211_alloc_hw(size_t priv_data_len, - const struct ieee80211_ops *ops); - -/** - * ieee80211_register_hw - Register hardware device - * - * You must call this function before any other functions in - * mac80211. Note that before a hardware can be registered, you - * need to fill the contained wiphy's information. - * - * @hw: the device to register as returned by ieee80211_alloc_hw() - */ -int ieee80211_register_hw(struct ieee80211_hw *hw); - -/** - * struct ieee80211_tpt_blink - throughput blink description - * @throughput: throughput in Kbit/sec - * @blink_time: blink time in milliseconds - * (full cycle, ie. one off + one on period) - */ -struct ieee80211_tpt_blink { - int throughput; - int blink_time; -}; - -/** - * enum ieee80211_tpt_led_trigger_flags - throughput trigger flags - * @IEEE80211_TPT_LEDTRIG_FL_RADIO: enable blinking with radio - * @IEEE80211_TPT_LEDTRIG_FL_WORK: enable blinking when working - * @IEEE80211_TPT_LEDTRIG_FL_CONNECTED: enable blinking when at least one - * interface is connected in some way, including being an AP - */ -enum ieee80211_tpt_led_trigger_flags { - IEEE80211_TPT_LEDTRIG_FL_RADIO = BIT(0), - IEEE80211_TPT_LEDTRIG_FL_WORK = BIT(1), - IEEE80211_TPT_LEDTRIG_FL_CONNECTED = BIT(2), -}; - -#ifdef CONFIG_MAC80211_LEDS -extern char *__ieee80211_get_tx_led_name(struct ieee80211_hw *hw); -extern char *__ieee80211_get_rx_led_name(struct ieee80211_hw *hw); -extern char *__ieee80211_get_assoc_led_name(struct ieee80211_hw *hw); -extern char *__ieee80211_get_radio_led_name(struct ieee80211_hw *hw); -extern char *__ieee80211_create_tpt_led_trigger( - struct ieee80211_hw *hw, unsigned int flags, - const struct ieee80211_tpt_blink *blink_table, - unsigned int blink_table_len); -#endif -/** - * ieee80211_get_tx_led_name - get name of TX LED - * - * mac80211 creates a transmit LED trigger for each wireless hardware - * that can be used to drive LEDs if your driver registers a LED device. - * This function returns the name (or %NULL if not configured for LEDs) - * of the trigger so you can automatically link the LED device. - * - * @hw: the hardware to get the LED trigger name for - */ -static inline char *ieee80211_get_tx_led_name(struct ieee80211_hw *hw) -{ -#ifdef CONFIG_MAC80211_LEDS - return __ieee80211_get_tx_led_name(hw); -#else - return NULL; -#endif -} - -/** - * ieee80211_get_rx_led_name - get name of RX LED - * - * mac80211 creates a receive LED trigger for each wireless hardware - * that can be used to drive LEDs if your driver registers a LED device. - * This function returns the name (or %NULL if not configured for LEDs) - * of the trigger so you can automatically link the LED device. - * - * @hw: the hardware to get the LED trigger name for - */ -static inline char *ieee80211_get_rx_led_name(struct ieee80211_hw *hw) -{ -#ifdef CONFIG_MAC80211_LEDS - return __ieee80211_get_rx_led_name(hw); -#else - return NULL; -#endif -} - -/** - * ieee80211_get_assoc_led_name - get name of association LED - * - * mac80211 creates a association LED trigger for each wireless hardware - * that can be used to drive LEDs if your driver registers a LED device. - * This function returns the name (or %NULL if not configured for LEDs) - * of the trigger so you can automatically link the LED device. - * - * @hw: the hardware to get the LED trigger name for - */ -static inline char *ieee80211_get_assoc_led_name(struct ieee80211_hw *hw) -{ -#ifdef CONFIG_MAC80211_LEDS - return __ieee80211_get_assoc_led_name(hw); -#else - return NULL; -#endif -} - -/** - * ieee80211_get_radio_led_name - get name of radio LED - * - * mac80211 creates a radio change LED trigger for each wireless hardware - * that can be used to drive LEDs if your driver registers a LED device. - * This function returns the name (or %NULL if not configured for LEDs) - * of the trigger so you can automatically link the LED device. - * - * @hw: the hardware to get the LED trigger name for - */ -static inline char *ieee80211_get_radio_led_name(struct ieee80211_hw *hw) -{ -#ifdef CONFIG_MAC80211_LEDS - return __ieee80211_get_radio_led_name(hw); -#else - return NULL; -#endif -} - -/** - * ieee80211_create_tpt_led_trigger - create throughput LED trigger - * @hw: the hardware to create the trigger for - * @flags: trigger flags, see &enum ieee80211_tpt_led_trigger_flags - * @blink_table: the blink table -- needs to be ordered by throughput - * @blink_table_len: size of the blink table - * - * This function returns %NULL (in case of error, or if no LED - * triggers are configured) or the name of the new trigger. - * This function must be called before ieee80211_register_hw(). - */ -static inline char * -ieee80211_create_tpt_led_trigger(struct ieee80211_hw *hw, unsigned int flags, - const struct ieee80211_tpt_blink *blink_table, - unsigned int blink_table_len) -{ -#ifdef CONFIG_MAC80211_LEDS - return __ieee80211_create_tpt_led_trigger(hw, flags, blink_table, - blink_table_len); -#else - return NULL; -#endif -} - -/** - * ieee80211_unregister_hw - Unregister a hardware device - * - * This function instructs mac80211 to free allocated resources - * and unregister netdevices from the networking subsystem. - * - * @hw: the hardware to unregister - */ -void ieee80211_unregister_hw(struct ieee80211_hw *hw); - -/** - * ieee80211_free_hw - free hardware descriptor - * - * This function frees everything that was allocated, including the - * private data for the driver. You must call ieee80211_unregister_hw() - * before calling this function. - * - * @hw: the hardware to free - */ -void ieee80211_free_hw(struct ieee80211_hw *hw); - -/** - * ieee80211_restart_hw - restart hardware completely - * - * Call this function when the hardware was restarted for some reason - * (hardware error, ...) and the driver is unable to restore its state - * by itself. mac80211 assumes that at this point the driver/hardware - * is completely uninitialised and stopped, it starts the process by - * calling the ->start() operation. The driver will need to reset all - * internal state that it has prior to calling this function. - * - * @hw: the hardware to restart - */ -void ieee80211_restart_hw(struct ieee80211_hw *hw); - -/** ieee80211_napi_schedule - schedule NAPI poll - * - * Use this function to schedule NAPI polling on a device. - * - * @hw: the hardware to start polling - */ -void ieee80211_napi_schedule(struct ieee80211_hw *hw); - -/** ieee80211_napi_complete - complete NAPI polling - * - * Use this function to finish NAPI polling on a device. - * - * @hw: the hardware to stop polling - */ -void ieee80211_napi_complete(struct ieee80211_hw *hw); - -/** - * ieee80211_rx - receive frame - * - * Use this function to hand received frames to mac80211. The receive - * buffer in @skb must start with an IEEE 802.11 header. In case of a - * paged @skb is used, the driver is recommended to put the ieee80211 - * header of the frame on the linear part of the @skb to avoid memory - * allocation and/or memcpy by the stack. - * - * This function may not be called in IRQ context. Calls to this function - * for a single hardware must be synchronized against each other. Calls to - * this function, ieee80211_rx_ni() and ieee80211_rx_irqsafe() may not be - * mixed for a single hardware. - * - * In process context use instead ieee80211_rx_ni(). - * - * @hw: the hardware this frame came in on - * @skb: the buffer to receive, owned by mac80211 after this call - */ -void ieee80211_rx(struct ieee80211_hw *hw, struct sk_buff *skb); - -/** - * ieee80211_rx_irqsafe - receive frame - * - * Like ieee80211_rx() but can be called in IRQ context - * (internally defers to a tasklet.) - * - * Calls to this function, ieee80211_rx() or ieee80211_rx_ni() may not - * be mixed for a single hardware. - * - * @hw: the hardware this frame came in on - * @skb: the buffer to receive, owned by mac80211 after this call - */ -void ieee80211_rx_irqsafe(struct ieee80211_hw *hw, struct sk_buff *skb); - -/** - * ieee80211_rx_ni - receive frame (in process context) - * - * Like ieee80211_rx() but can be called in process context - * (internally disables bottom halves). - * - * Calls to this function, ieee80211_rx() and ieee80211_rx_irqsafe() may - * not be mixed for a single hardware. - * - * @hw: the hardware this frame came in on - * @skb: the buffer to receive, owned by mac80211 after this call - */ -static inline void ieee80211_rx_ni(struct ieee80211_hw *hw, - struct sk_buff *skb) -{ - local_bh_disable(); - ieee80211_rx(hw, skb); - local_bh_enable(); -} - -/** - * ieee80211_sta_ps_transition - PS transition for connected sta - * - * When operating in AP mode with the %IEEE80211_HW_AP_LINK_PS - * flag set, use this function to inform mac80211 about a connected station - * entering/leaving PS mode. - * - * This function may not be called in IRQ context or with softirqs enabled. - * - * Calls to this function for a single hardware must be synchronized against - * each other. - * - * The function returns -EINVAL when the requested PS mode is already set. - * - * @sta: currently connected sta - * @start: start or stop PS - */ -int ieee80211_sta_ps_transition(struct ieee80211_sta *sta, bool start); - -/** - * ieee80211_sta_ps_transition_ni - PS transition for connected sta - * (in process context) - * - * Like ieee80211_sta_ps_transition() but can be called in process context - * (internally disables bottom halves). Concurrent call restriction still - * applies. - * - * @sta: currently connected sta - * @start: start or stop PS - */ -static inline int ieee80211_sta_ps_transition_ni(struct ieee80211_sta *sta, - bool start) -{ - int ret; - - local_bh_disable(); - ret = ieee80211_sta_ps_transition(sta, start); - local_bh_enable(); - - return ret; -} - -/* - * The TX headroom reserved by mac80211 for its own tx_status functions. - * This is enough for the radiotap header. - */ -#define IEEE80211_TX_STATUS_HEADROOM 14 - -/** - * ieee80211_sta_set_buffered - inform mac80211 about driver-buffered frames - * @sta: &struct ieee80211_sta pointer for the sleeping station - * @tid: the TID that has buffered frames - * @buffered: indicates whether or not frames are buffered for this TID - * - * If a driver buffers frames for a powersave station instead of passing - * them back to mac80211 for retransmission, the station may still need - * to be told that there are buffered frames via the TIM bit. - * - * This function informs mac80211 whether or not there are frames that are - * buffered in the driver for a given TID; mac80211 can then use this data - * to set the TIM bit (NOTE: This may call back into the driver's set_tim - * call! Beware of the locking!) - * - * If all frames are released to the station (due to PS-poll or uAPSD) - * then the driver needs to inform mac80211 that there no longer are - * frames buffered. However, when the station wakes up mac80211 assumes - * that all buffered frames will be transmitted and clears this data, - * drivers need to make sure they inform mac80211 about all buffered - * frames on the sleep transition (sta_notify() with %STA_NOTIFY_SLEEP). - * - * Note that technically mac80211 only needs to know this per AC, not per - * TID, but since driver buffering will inevitably happen per TID (since - * it is related to aggregation) it is easier to make mac80211 map the - * TID to the AC as required instead of keeping track in all drivers that - * use this API. - */ -void ieee80211_sta_set_buffered(struct ieee80211_sta *sta, - u8 tid, bool buffered); - -/** - * ieee80211_tx_status - transmit status callback - * - * Call this function for all transmitted frames after they have been - * transmitted. It is permissible to not call this function for - * multicast frames but this can affect statistics. - * - * This function may not be called in IRQ context. Calls to this function - * for a single hardware must be synchronized against each other. Calls - * to this function, ieee80211_tx_status_ni() and ieee80211_tx_status_irqsafe() - * may not be mixed for a single hardware. - * - * @hw: the hardware the frame was transmitted by - * @skb: the frame that was transmitted, owned by mac80211 after this call - */ -void ieee80211_tx_status(struct ieee80211_hw *hw, - struct sk_buff *skb); - -/** - * ieee80211_tx_status_ni - transmit status callback (in process context) - * - * Like ieee80211_tx_status() but can be called in process context. - * - * Calls to this function, ieee80211_tx_status() and - * ieee80211_tx_status_irqsafe() may not be mixed - * for a single hardware. - * - * @hw: the hardware the frame was transmitted by - * @skb: the frame that was transmitted, owned by mac80211 after this call - */ -static inline void ieee80211_tx_status_ni(struct ieee80211_hw *hw, - struct sk_buff *skb) -{ - local_bh_disable(); - ieee80211_tx_status(hw, skb); - local_bh_enable(); -} - -/** - * ieee80211_tx_status_irqsafe - IRQ-safe transmit status callback - * - * Like ieee80211_tx_status() but can be called in IRQ context - * (internally defers to a tasklet.) - * - * Calls to this function, ieee80211_tx_status() and - * ieee80211_tx_status_ni() may not be mixed for a single hardware. - * - * @hw: the hardware the frame was transmitted by - * @skb: the frame that was transmitted, owned by mac80211 after this call - */ -void ieee80211_tx_status_irqsafe(struct ieee80211_hw *hw, - struct sk_buff *skb); - -/** - * ieee80211_report_low_ack - report non-responding station - * - * When operating in AP-mode, call this function to report a non-responding - * connected STA. - * - * @sta: the non-responding connected sta - * @num_packets: number of packets sent to @sta without a response - */ -void ieee80211_report_low_ack(struct ieee80211_sta *sta, u32 num_packets); - -/** - * ieee80211_beacon_get_tim - beacon generation function - * @hw: pointer obtained from ieee80211_alloc_hw(). - * @vif: &struct ieee80211_vif pointer from the add_interface callback. - * @tim_offset: pointer to variable that will receive the TIM IE offset. - * Set to 0 if invalid (in non-AP modes). - * @tim_length: pointer to variable that will receive the TIM IE length, - * (including the ID and length bytes!). - * Set to 0 if invalid (in non-AP modes). - * - * If the driver implements beaconing modes, it must use this function to - * obtain the beacon frame/template. - * - * If the beacon frames are generated by the host system (i.e., not in - * hardware/firmware), the driver uses this function to get each beacon - * frame from mac80211 -- it is responsible for calling this function - * before the beacon is needed (e.g. based on hardware interrupt). - * - * If the beacon frames are generated by the device, then the driver - * must use the returned beacon as the template and change the TIM IE - * according to the current DTIM parameters/TIM bitmap. - * - * The driver is responsible for freeing the returned skb. - */ -struct sk_buff *ieee80211_beacon_get_tim(struct ieee80211_hw *hw, - struct ieee80211_vif *vif, - u16 *tim_offset, u16 *tim_length); - -/** - * ieee80211_beacon_get - beacon generation function - * @hw: pointer obtained from ieee80211_alloc_hw(). - * @vif: &struct ieee80211_vif pointer from the add_interface callback. - * - * See ieee80211_beacon_get_tim(). - */ -static inline struct sk_buff *ieee80211_beacon_get(struct ieee80211_hw *hw, - struct ieee80211_vif *vif) -{ - return ieee80211_beacon_get_tim(hw, vif, NULL, NULL); -} - -/** - * ieee80211_proberesp_get - retrieve a Probe Response template - * @hw: pointer obtained from ieee80211_alloc_hw(). - * @vif: &struct ieee80211_vif pointer from the add_interface callback. - * - * Creates a Probe Response template which can, for example, be uploaded to - * hardware. The destination address should be set by the caller. - * - * Can only be called in AP mode. - */ -struct sk_buff *ieee80211_proberesp_get(struct ieee80211_hw *hw, - struct ieee80211_vif *vif); - -/** - * ieee80211_pspoll_get - retrieve a PS Poll template - * @hw: pointer obtained from ieee80211_alloc_hw(). - * @vif: &struct ieee80211_vif pointer from the add_interface callback. - * - * Creates a PS Poll a template which can, for example, uploaded to - * hardware. The template must be updated after association so that correct - * AID, BSSID and MAC address is used. - * - * Note: Caller (or hardware) is responsible for setting the - * &IEEE80211_FCTL_PM bit. - */ -struct sk_buff *ieee80211_pspoll_get(struct ieee80211_hw *hw, - struct ieee80211_vif *vif); - -/** - * ieee80211_nullfunc_get - retrieve a nullfunc template - * @hw: pointer obtained from ieee80211_alloc_hw(). - * @vif: &struct ieee80211_vif pointer from the add_interface callback. - * - * Creates a Nullfunc template which can, for example, uploaded to - * hardware. The template must be updated after association so that correct - * BSSID and address is used. - * - * Note: Caller (or hardware) is responsible for setting the - * &IEEE80211_FCTL_PM bit as well as Duration and Sequence Control fields. - */ -struct sk_buff *ieee80211_nullfunc_get(struct ieee80211_hw *hw, - struct ieee80211_vif *vif); - -/** - * ieee80211_probereq_get - retrieve a Probe Request template - * @hw: pointer obtained from ieee80211_alloc_hw(). - * @vif: &struct ieee80211_vif pointer from the add_interface callback. - * @ssid: SSID buffer - * @ssid_len: length of SSID - * @ie: buffer containing all IEs except SSID for the template - * @ie_len: length of the IE buffer - * - * Creates a Probe Request template which can, for example, be uploaded to - * hardware. - */ -struct sk_buff *ieee80211_probereq_get(struct ieee80211_hw *hw, - struct ieee80211_vif *vif, - const u8 *ssid, size_t ssid_len, - const u8 *ie, size_t ie_len); - -/** - * ieee80211_rts_get - RTS frame generation function - * @hw: pointer obtained from ieee80211_alloc_hw(). - * @vif: &struct ieee80211_vif pointer from the add_interface callback. - * @frame: pointer to the frame that is going to be protected by the RTS. - * @frame_len: the frame length (in octets). - * @frame_txctl: &struct ieee80211_tx_info of the frame. - * @rts: The buffer where to store the RTS frame. - * - * If the RTS frames are generated by the host system (i.e., not in - * hardware/firmware), the low-level driver uses this function to receive - * the next RTS frame from the 802.11 code. The low-level is responsible - * for calling this function before and RTS frame is needed. - */ -void ieee80211_rts_get(struct ieee80211_hw *hw, struct ieee80211_vif *vif, - const void *frame, size_t frame_len, - const struct ieee80211_tx_info *frame_txctl, - struct ieee80211_rts *rts); - -/** - * ieee80211_rts_duration - Get the duration field for an RTS frame - * @hw: pointer obtained from ieee80211_alloc_hw(). - * @vif: &struct ieee80211_vif pointer from the add_interface callback. - * @frame_len: the length of the frame that is going to be protected by the RTS. - * @frame_txctl: &struct ieee80211_tx_info of the frame. - * - * If the RTS is generated in firmware, but the host system must provide - * the duration field, the low-level driver uses this function to receive - * the duration field value in little-endian byteorder. - */ -__le16 ieee80211_rts_duration(struct ieee80211_hw *hw, - struct ieee80211_vif *vif, size_t frame_len, - const struct ieee80211_tx_info *frame_txctl); - -/** - * ieee80211_ctstoself_get - CTS-to-self frame generation function - * @hw: pointer obtained from ieee80211_alloc_hw(). - * @vif: &struct ieee80211_vif pointer from the add_interface callback. - * @frame: pointer to the frame that is going to be protected by the CTS-to-self. - * @frame_len: the frame length (in octets). - * @frame_txctl: &struct ieee80211_tx_info of the frame. - * @cts: The buffer where to store the CTS-to-self frame. - * - * If the CTS-to-self frames are generated by the host system (i.e., not in - * hardware/firmware), the low-level driver uses this function to receive - * the next CTS-to-self frame from the 802.11 code. The low-level is responsible - * for calling this function before and CTS-to-self frame is needed. - */ -void ieee80211_ctstoself_get(struct ieee80211_hw *hw, - struct ieee80211_vif *vif, - const void *frame, size_t frame_len, - const struct ieee80211_tx_info *frame_txctl, - struct ieee80211_cts *cts); - -/** - * ieee80211_ctstoself_duration - Get the duration field for a CTS-to-self frame - * @hw: pointer obtained from ieee80211_alloc_hw(). - * @vif: &struct ieee80211_vif pointer from the add_interface callback. - * @frame_len: the length of the frame that is going to be protected by the CTS-to-self. - * @frame_txctl: &struct ieee80211_tx_info of the frame. - * - * If the CTS-to-self is generated in firmware, but the host system must provide - * the duration field, the low-level driver uses this function to receive - * the duration field value in little-endian byteorder. - */ -__le16 ieee80211_ctstoself_duration(struct ieee80211_hw *hw, - struct ieee80211_vif *vif, - size_t frame_len, - const struct ieee80211_tx_info *frame_txctl); - -/** - * ieee80211_generic_frame_duration - Calculate the duration field for a frame - * @hw: pointer obtained from ieee80211_alloc_hw(). - * @vif: &struct ieee80211_vif pointer from the add_interface callback. - * @frame_len: the length of the frame. - * @rate: the rate at which the frame is going to be transmitted. - * - * Calculate the duration field of some generic frame, given its - * length and transmission rate (in 100kbps). - */ -__le16 ieee80211_generic_frame_duration(struct ieee80211_hw *hw, - struct ieee80211_vif *vif, - size_t frame_len, - struct ieee80211_rate *rate); - -/** - * ieee80211_get_buffered_bc - accessing buffered broadcast and multicast frames - * @hw: pointer as obtained from ieee80211_alloc_hw(). - * @vif: &struct ieee80211_vif pointer from the add_interface callback. - * - * Function for accessing buffered broadcast and multicast frames. If - * hardware/firmware does not implement buffering of broadcast/multicast - * frames when power saving is used, 802.11 code buffers them in the host - * memory. The low-level driver uses this function to fetch next buffered - * frame. In most cases, this is used when generating beacon frame. This - * function returns a pointer to the next buffered skb or NULL if no more - * buffered frames are available. - * - * Note: buffered frames are returned only after DTIM beacon frame was - * generated with ieee80211_beacon_get() and the low-level driver must thus - * call ieee80211_beacon_get() first. ieee80211_get_buffered_bc() returns - * NULL if the previous generated beacon was not DTIM, so the low-level driver - * does not need to check for DTIM beacons separately and should be able to - * use common code for all beacons. - */ -struct sk_buff * -ieee80211_get_buffered_bc(struct ieee80211_hw *hw, struct ieee80211_vif *vif); - -/** - * ieee80211_get_tkip_p1k_iv - get a TKIP phase 1 key for IV32 - * - * This function returns the TKIP phase 1 key for the given IV32. - * - * @keyconf: the parameter passed with the set key - * @iv32: IV32 to get the P1K for - * @p1k: a buffer to which the key will be written, as 5 u16 values - */ -void ieee80211_get_tkip_p1k_iv(struct ieee80211_key_conf *keyconf, - u32 iv32, u16 *p1k); - -/** - * ieee80211_get_tkip_p1k - get a TKIP phase 1 key - * - * This function returns the TKIP phase 1 key for the IV32 taken - * from the given packet. - * - * @keyconf: the parameter passed with the set key - * @skb: the packet to take the IV32 value from that will be encrypted - * with this P1K - * @p1k: a buffer to which the key will be written, as 5 u16 values - */ -static inline void ieee80211_get_tkip_p1k(struct ieee80211_key_conf *keyconf, - struct sk_buff *skb, u16 *p1k) -{ - struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data; - const u8 *data = (u8 *)hdr + ieee80211_hdrlen(hdr->frame_control); - u32 iv32 = get_unaligned_le32(&data[4]); - - ieee80211_get_tkip_p1k_iv(keyconf, iv32, p1k); -} - -/** - * ieee80211_get_tkip_rx_p1k - get a TKIP phase 1 key for RX - * - * This function returns the TKIP phase 1 key for the given IV32 - * and transmitter address. - * - * @keyconf: the parameter passed with the set key - * @ta: TA that will be used with the key - * @iv32: IV32 to get the P1K for - * @p1k: a buffer to which the key will be written, as 5 u16 values - */ -void ieee80211_get_tkip_rx_p1k(struct ieee80211_key_conf *keyconf, - const u8 *ta, u32 iv32, u16 *p1k); - -/** - * ieee80211_get_tkip_p2k - get a TKIP phase 2 key - * - * This function computes the TKIP RC4 key for the IV values - * in the packet. - * - * @keyconf: the parameter passed with the set key - * @skb: the packet to take the IV32/IV16 values from that will be - * encrypted with this key - * @p2k: a buffer to which the key will be written, 16 bytes - */ -void ieee80211_get_tkip_p2k(struct ieee80211_key_conf *keyconf, - struct sk_buff *skb, u8 *p2k); - -/** - * struct ieee80211_key_seq - key sequence counter - * - * @tkip: TKIP data, containing IV32 and IV16 in host byte order - * @ccmp: PN data, most significant byte first (big endian, - * reverse order than in packet) - * @aes_cmac: PN data, most significant byte first (big endian, - * reverse order than in packet) - */ -struct ieee80211_key_seq { - union { - struct { - u32 iv32; - u16 iv16; - } tkip; - struct { - u8 pn[6]; - } ccmp; - struct { - u8 pn[6]; - } aes_cmac; - }; -}; - -/** - * ieee80211_get_key_tx_seq - get key TX sequence counter - * - * @keyconf: the parameter passed with the set key - * @seq: buffer to receive the sequence data - * - * This function allows a driver to retrieve the current TX IV/PN - * for the given key. It must not be called if IV generation is - * offloaded to the device. - * - * Note that this function may only be called when no TX processing - * can be done concurrently, for example when queues are stopped - * and the stop has been synchronized. - */ -void ieee80211_get_key_tx_seq(struct ieee80211_key_conf *keyconf, - struct ieee80211_key_seq *seq); - -/** - * ieee80211_get_key_rx_seq - get key RX sequence counter - * - * @keyconf: the parameter passed with the set key - * @tid: The TID, or -1 for the management frame value (CCMP only); - * the value on TID 0 is also used for non-QoS frames. For - * CMAC, only TID 0 is valid. - * @seq: buffer to receive the sequence data - * - * This function allows a driver to retrieve the current RX IV/PNs - * for the given key. It must not be called if IV checking is done - * by the device and not by mac80211. - * - * Note that this function may only be called when no RX processing - * can be done concurrently. - */ -void ieee80211_get_key_rx_seq(struct ieee80211_key_conf *keyconf, - int tid, struct ieee80211_key_seq *seq); - -/** - * ieee80211_gtk_rekey_notify - notify userspace supplicant of rekeying - * @vif: virtual interface the rekeying was done on - * @bssid: The BSSID of the AP, for checking association - * @replay_ctr: the new replay counter after GTK rekeying - * @gfp: allocation flags - */ -void ieee80211_gtk_rekey_notify(struct ieee80211_vif *vif, const u8 *bssid, - const u8 *replay_ctr, gfp_t gfp); - -/** - * ieee80211_wake_queue - wake specific queue - * @hw: pointer as obtained from ieee80211_alloc_hw(). - * @queue: queue number (counted from zero). - * - * Drivers should use this function instead of netif_wake_queue. - */ -void ieee80211_wake_queue(struct ieee80211_hw *hw, int queue); - -/** - * ieee80211_stop_queue - stop specific queue - * @hw: pointer as obtained from ieee80211_alloc_hw(). - * @queue: queue number (counted from zero). - * - * Drivers should use this function instead of netif_stop_queue. - */ -void ieee80211_stop_queue(struct ieee80211_hw *hw, int queue); - -/** - * ieee80211_queue_stopped - test status of the queue - * @hw: pointer as obtained from ieee80211_alloc_hw(). - * @queue: queue number (counted from zero). - * - * Drivers should use this function instead of netif_stop_queue. - */ - -int ieee80211_queue_stopped(struct ieee80211_hw *hw, int queue); - -/** - * ieee80211_stop_queues - stop all queues - * @hw: pointer as obtained from ieee80211_alloc_hw(). - * - * Drivers should use this function instead of netif_stop_queue. - */ -void ieee80211_stop_queues(struct ieee80211_hw *hw); - -/** - * ieee80211_wake_queues - wake all queues - * @hw: pointer as obtained from ieee80211_alloc_hw(). - * - * Drivers should use this function instead of netif_wake_queue. - */ -void ieee80211_wake_queues(struct ieee80211_hw *hw); - -/** - * ieee80211_scan_completed - completed hardware scan - * - * When hardware scan offload is used (i.e. the hw_scan() callback is - * assigned) this function needs to be called by the driver to notify - * mac80211 that the scan finished. This function can be called from - * any context, including hardirq context. - * - * @hw: the hardware that finished the scan - * @aborted: set to true if scan was aborted - */ -void ieee80211_scan_completed(struct ieee80211_hw *hw, bool aborted); - -/** - * ieee80211_sched_scan_results - got results from scheduled scan - * - * When a scheduled scan is running, this function needs to be called by the - * driver whenever there are new scan results available. - * - * @hw: the hardware that is performing scheduled scans - */ -void ieee80211_sched_scan_results(struct ieee80211_hw *hw); - -/** - * ieee80211_sched_scan_stopped - inform that the scheduled scan has stopped - * - * When a scheduled scan is running, this function can be called by - * the driver if it needs to stop the scan to perform another task. - * Usual scenarios are drivers that cannot continue the scheduled scan - * while associating, for instance. - * - * @hw: the hardware that is performing scheduled scans - */ -void ieee80211_sched_scan_stopped(struct ieee80211_hw *hw); - -/** - * ieee80211_iterate_active_interfaces - iterate active interfaces - * - * This function iterates over the interfaces associated with a given - * hardware that are currently active and calls the callback for them. - * This function allows the iterator function to sleep, when the iterator - * function is atomic @ieee80211_iterate_active_interfaces_atomic can - * be used. - * Does not iterate over a new interface during add_interface() - * - * @hw: the hardware struct of which the interfaces should be iterated over - * @iterator: the iterator function to call - * @data: first argument of the iterator function - */ -void ieee80211_iterate_active_interfaces(struct ieee80211_hw *hw, - void (*iterator)(void *data, u8 *mac, - struct ieee80211_vif *vif), - void *data); - -/** - * ieee80211_iterate_active_interfaces_atomic - iterate active interfaces - * - * This function iterates over the interfaces associated with a given - * hardware that are currently active and calls the callback for them. - * This function requires the iterator callback function to be atomic, - * if that is not desired, use @ieee80211_iterate_active_interfaces instead. - * Does not iterate over a new interface during add_interface() - * - * @hw: the hardware struct of which the interfaces should be iterated over - * @iterator: the iterator function to call, cannot sleep - * @data: first argument of the iterator function - */ -void ieee80211_iterate_active_interfaces_atomic(struct ieee80211_hw *hw, - void (*iterator)(void *data, - u8 *mac, - struct ieee80211_vif *vif), - void *data); - -/** - * ieee80211_queue_work - add work onto the mac80211 workqueue - * - * Drivers and mac80211 use this to add work onto the mac80211 workqueue. - * This helper ensures drivers are not queueing work when they should not be. - * - * @hw: the hardware struct for the interface we are adding work for - * @work: the work we want to add onto the mac80211 workqueue - */ -void ieee80211_queue_work(struct ieee80211_hw *hw, struct work_struct *work); - -/** - * ieee80211_queue_delayed_work - add work onto the mac80211 workqueue - * - * Drivers and mac80211 use this to queue delayed work onto the mac80211 - * workqueue. - * - * @hw: the hardware struct for the interface we are adding work for - * @dwork: delayable work to queue onto the mac80211 workqueue - * @delay: number of jiffies to wait before queueing - */ -void ieee80211_queue_delayed_work(struct ieee80211_hw *hw, - struct delayed_work *dwork, - unsigned long delay); - -/** - * ieee80211_start_tx_ba_session - Start a tx Block Ack session. - * @sta: the station for which to start a BA session - * @tid: the TID to BA on. - * @timeout: session timeout value (in TUs) - * - * Return: success if addBA request was sent, failure otherwise - * - * Although mac80211/low level driver/user space application can estimate - * the need to start aggregation on a certain RA/TID, the session level - * will be managed by the mac80211. - */ -int ieee80211_start_tx_ba_session(struct ieee80211_sta *sta, u16 tid, - u16 timeout); - -/** - * ieee80211_start_tx_ba_cb_irqsafe - low level driver ready to aggregate. - * @vif: &struct ieee80211_vif pointer from the add_interface callback - * @ra: receiver address of the BA session recipient. - * @tid: the TID to BA on. - * - * This function must be called by low level driver once it has - * finished with preparations for the BA session. It can be called - * from any context. - */ -void ieee80211_start_tx_ba_cb_irqsafe(struct ieee80211_vif *vif, const u8 *ra, - u16 tid); - -/** - * ieee80211_stop_tx_ba_session - Stop a Block Ack session. - * @sta: the station whose BA session to stop - * @tid: the TID to stop BA. - * - * Return: negative error if the TID is invalid, or no aggregation active - * - * Although mac80211/low level driver/user space application can estimate - * the need to stop aggregation on a certain RA/TID, the session level - * will be managed by the mac80211. - */ -int ieee80211_stop_tx_ba_session(struct ieee80211_sta *sta, u16 tid); - -/** - * ieee80211_stop_tx_ba_cb_irqsafe - low level driver ready to stop aggregate. - * @vif: &struct ieee80211_vif pointer from the add_interface callback - * @ra: receiver address of the BA session recipient. - * @tid: the desired TID to BA on. - * - * This function must be called by low level driver once it has - * finished with preparations for the BA session tear down. It - * can be called from any context. - */ -void ieee80211_stop_tx_ba_cb_irqsafe(struct ieee80211_vif *vif, const u8 *ra, - u16 tid); - -/** - * ieee80211_find_sta - find a station - * - * @vif: virtual interface to look for station on - * @addr: station's address - * - * This function must be called under RCU lock and the - * resulting pointer is only valid under RCU lock as well. - */ -struct ieee80211_sta *ieee80211_find_sta(struct ieee80211_vif *vif, - const u8 *addr); - -/** - * ieee80211_find_sta_by_ifaddr - find a station on hardware - * - * @hw: pointer as obtained from ieee80211_alloc_hw() - * @addr: remote station's address - * @localaddr: local address (vif->sdata->vif.addr). Use NULL for 'any'. - * - * This function must be called under RCU lock and the - * resulting pointer is only valid under RCU lock as well. - * - * NOTE: You may pass NULL for localaddr, but then you will just get - * the first STA that matches the remote address 'addr'. - * We can have multiple STA associated with multiple - * logical stations (e.g. consider a station connecting to another - * BSSID on the same AP hardware without disconnecting first). - * In this case, the result of this method with localaddr NULL - * is not reliable. - * - * DO NOT USE THIS FUNCTION with localaddr NULL if at all possible. - */ -struct ieee80211_sta *ieee80211_find_sta_by_ifaddr(struct ieee80211_hw *hw, - const u8 *addr, - const u8 *localaddr); - -/** - * ieee80211_sta_block_awake - block station from waking up - * @hw: the hardware - * @pubsta: the station - * @block: whether to block or unblock - * - * Some devices require that all frames that are on the queues - * for a specific station that went to sleep are flushed before - * a poll response or frames after the station woke up can be - * delivered to that it. Note that such frames must be rejected - * by the driver as filtered, with the appropriate status flag. - * - * This function allows implementing this mode in a race-free - * manner. - * - * To do this, a driver must keep track of the number of frames - * still enqueued for a specific station. If this number is not - * zero when the station goes to sleep, the driver must call - * this function to force mac80211 to consider the station to - * be asleep regardless of the station's actual state. Once the - * number of outstanding frames reaches zero, the driver must - * call this function again to unblock the station. That will - * cause mac80211 to be able to send ps-poll responses, and if - * the station queried in the meantime then frames will also - * be sent out as a result of this. Additionally, the driver - * will be notified that the station woke up some time after - * it is unblocked, regardless of whether the station actually - * woke up while blocked or not. - */ -void ieee80211_sta_block_awake(struct ieee80211_hw *hw, - struct ieee80211_sta *pubsta, bool block); - -/** - * ieee80211_sta_eosp - notify mac80211 about end of SP - * @pubsta: the station - * - * When a device transmits frames in a way that it can't tell - * mac80211 in the TX status about the EOSP, it must clear the - * %IEEE80211_TX_STATUS_EOSP bit and call this function instead. - * This applies for PS-Poll as well as uAPSD. - * - * Note that there is no non-_irqsafe version right now as - * it wasn't needed, but just like _tx_status() and _rx() - * must not be mixed in irqsafe/non-irqsafe versions, this - * function must not be mixed with those either. Use the - * all irqsafe, or all non-irqsafe, don't mix! If you need - * the non-irqsafe version of this, you need to add it. - */ -void ieee80211_sta_eosp_irqsafe(struct ieee80211_sta *pubsta); - -/** - * ieee80211_iter_keys - iterate keys programmed into the device - * @hw: pointer obtained from ieee80211_alloc_hw() - * @vif: virtual interface to iterate, may be %NULL for all - * @iter: iterator function that will be called for each key - * @iter_data: custom data to pass to the iterator function - * - * This function can be used to iterate all the keys known to - * mac80211, even those that weren't previously programmed into - * the device. This is intended for use in WoWLAN if the device - * needs reprogramming of the keys during suspend. Note that due - * to locking reasons, it is also only safe to call this at few - * spots since it must hold the RTNL and be able to sleep. - * - * The order in which the keys are iterated matches the order - * in which they were originally installed and handed to the - * set_key callback. - */ -void ieee80211_iter_keys(struct ieee80211_hw *hw, - struct ieee80211_vif *vif, - void (*iter)(struct ieee80211_hw *hw, - struct ieee80211_vif *vif, - struct ieee80211_sta *sta, - struct ieee80211_key_conf *key, - void *data), - void *iter_data); - -/** - * ieee80211_ap_probereq_get - retrieve a Probe Request template - * @hw: pointer obtained from ieee80211_alloc_hw(). - * @vif: &struct ieee80211_vif pointer from the add_interface callback. - * - * Creates a Probe Request template which can, for example, be uploaded to - * hardware. The template is filled with bssid, ssid and supported rate - * information. This function must only be called from within the - * .bss_info_changed callback function and only in managed mode. The function - * is only useful when the interface is associated, otherwise it will return - * NULL. - */ -struct sk_buff *ieee80211_ap_probereq_get(struct ieee80211_hw *hw, - struct ieee80211_vif *vif); - -/** - * ieee80211_beacon_loss - inform hardware does not receive beacons - * - * @vif: &struct ieee80211_vif pointer from the add_interface callback. - * - * When beacon filtering is enabled with %IEEE80211_VIF_BEACON_FILTER and - * %IEEE80211_CONF_PS is set, the driver needs to inform whenever the - * hardware is not receiving beacons with this function. - */ -void ieee80211_beacon_loss(struct ieee80211_vif *vif); - -/** - * ieee80211_connection_loss - inform hardware has lost connection to the AP - * - * @vif: &struct ieee80211_vif pointer from the add_interface callback. - * - * When beacon filtering is enabled with %IEEE80211_VIF_BEACON_FILTER, and - * %IEEE80211_CONF_PS and %IEEE80211_HW_CONNECTION_MONITOR are set, the driver - * needs to inform if the connection to the AP has been lost. - * - * This function will cause immediate change to disassociated state, - * without connection recovery attempts. - */ -void ieee80211_connection_loss(struct ieee80211_vif *vif); - -/** - * ieee80211_resume_disconnect - disconnect from AP after resume - * - * @vif: &struct ieee80211_vif pointer from the add_interface callback. - * - * Instructs mac80211 to disconnect from the AP after resume. - * Drivers can use this after WoWLAN if they know that the - * connection cannot be kept up, for example because keys were - * used while the device was asleep but the replay counters or - * similar cannot be retrieved from the device during resume. - * - * Note that due to implementation issues, if the driver uses - * the reconfiguration functionality during resume the interface - * will still be added as associated first during resume and then - * disconnect normally later. - * - * This function can only be called from the resume callback and - * the driver must not be holding any of its own locks while it - * calls this function, or at least not any locks it needs in the - * key configuration paths (if it supports HW crypto). - */ -void ieee80211_resume_disconnect(struct ieee80211_vif *vif); - -/** - * ieee80211_disable_dyn_ps - force mac80211 to temporarily disable dynamic psm - * - * @vif: &struct ieee80211_vif pointer from the add_interface callback. - * - * Some hardware require full power save to manage simultaneous BT traffic - * on the WLAN frequency. Full PSM is required periodically, whenever there are - * burst of BT traffic. The hardware gets information of BT traffic via - * hardware co-existence lines, and consequentially requests mac80211 to - * (temporarily) enter full psm. - * This function will only temporarily disable dynamic PS, not enable PSM if - * it was not already enabled. - * The driver must make sure to re-enable dynamic PS using - * ieee80211_enable_dyn_ps() if the driver has disabled it. - * - */ -void ieee80211_disable_dyn_ps(struct ieee80211_vif *vif); - -/** - * ieee80211_enable_dyn_ps - restore dynamic psm after being disabled - * - * @vif: &struct ieee80211_vif pointer from the add_interface callback. - * - * This function restores dynamic PS after being temporarily disabled via - * ieee80211_disable_dyn_ps(). Each ieee80211_disable_dyn_ps() call must - * be coupled with an eventual call to this function. - * - */ -void ieee80211_enable_dyn_ps(struct ieee80211_vif *vif); - -/** - * ieee80211_cqm_rssi_notify - inform a configured connection quality monitoring - * rssi threshold triggered - * - * @vif: &struct ieee80211_vif pointer from the add_interface callback. - * @rssi_event: the RSSI trigger event type - * @gfp: context flags - * - * When the %IEEE80211_VIF_SUPPORTS_CQM_RSSI is set, and a connection quality - * monitoring is configured with an rssi threshold, the driver will inform - * whenever the rssi level reaches the threshold. - */ -void ieee80211_cqm_rssi_notify(struct ieee80211_vif *vif, - enum nl80211_cqm_rssi_threshold_event rssi_event, - gfp_t gfp); - -/** - * ieee80211_get_operstate - get the operstate of the vif - * - * @vif: &struct ieee80211_vif pointer from the add_interface callback. - * - * The driver might need to know the operstate of the net_device - * (specifically, whether the link is IF_OPER_UP after resume) - */ -unsigned char ieee80211_get_operstate(struct ieee80211_vif *vif); - -/** - * ieee80211_chswitch_done - Complete channel switch process - * @vif: &struct ieee80211_vif pointer from the add_interface callback. - * @success: make the channel switch successful or not - * - * Complete the channel switch post-process: set the new operational channel - * and wake up the suspended queues. - */ -void ieee80211_chswitch_done(struct ieee80211_vif *vif, bool success); - -/** - * ieee80211_request_smps - request SM PS transition - * @vif: &struct ieee80211_vif pointer from the add_interface callback. - * @smps_mode: new SM PS mode - * - * This allows the driver to request an SM PS transition in managed - * mode. This is useful when the driver has more information than - * the stack about possible interference, for example by bluetooth. - */ -void ieee80211_request_smps(struct ieee80211_vif *vif, - enum ieee80211_smps_mode smps_mode); - -/** - * ieee80211_key_removed - disable hw acceleration for key - * @key_conf: The key hw acceleration should be disabled for - * - * This allows drivers to indicate that the given key has been - * removed from hardware acceleration, due to a new key that - * was added. Don't use this if the key can continue to be used - * for TX, if the key restriction is on RX only it is permitted - * to keep the key for TX only and not call this function. - * - * Due to locking constraints, it may only be called during - * @set_key. This function must be allowed to sleep, and the - * key it tries to disable may still be used until it returns. - */ -void ieee80211_key_removed(struct ieee80211_key_conf *key_conf); - -/** - * ieee80211_ready_on_channel - notification of remain-on-channel start - * @hw: pointer as obtained from ieee80211_alloc_hw() - */ -void ieee80211_ready_on_channel(struct ieee80211_hw *hw); - -/** - * ieee80211_remain_on_channel_expired - remain_on_channel duration expired - * @hw: pointer as obtained from ieee80211_alloc_hw() - */ -void ieee80211_remain_on_channel_expired(struct ieee80211_hw *hw); - -/** - * ieee80211_stop_rx_ba_session - callback to stop existing BA sessions - * - * in order not to harm the system performance and user experience, the device - * may request not to allow any rx ba session and tear down existing rx ba - * sessions based on system constraints such as periodic BT activity that needs - * to limit wlan activity (eg.sco or a2dp)." - * in such cases, the intention is to limit the duration of the rx ppdu and - * therefore prevent the peer device to use a-mpdu aggregation. - * - * @vif: &struct ieee80211_vif pointer from the add_interface callback. - * @ba_rx_bitmap: Bit map of open rx ba per tid - * @addr: & to bssid mac address - */ -void ieee80211_stop_rx_ba_session(struct ieee80211_vif *vif, u16 ba_rx_bitmap, - const u8 *addr); - -/** - * ieee80211_send_bar - send a BlockAckReq frame - * - * can be used to flush pending frames from the peer's aggregation reorder - * buffer. - * - * @vif: &struct ieee80211_vif pointer from the add_interface callback. - * @ra: the peer's destination address - * @tid: the TID of the aggregation session - * @ssn: the new starting sequence number for the receiver - */ -void ieee80211_send_bar(struct ieee80211_vif *vif, u8 *ra, u16 tid, u16 ssn); - -/* Rate control API */ - -/** - * enum rate_control_changed - flags to indicate which parameter changed - * - * @IEEE80211_RC_HT_CHANGED: The HT parameters of the operating channel have - * changed, rate control algorithm can update its internal state if needed. - * @IEEE80211_RC_SMPS_CHANGED: The SMPS state of the station changed, the rate - * control algorithm needs to adjust accordingly. - */ -enum rate_control_changed { - IEEE80211_RC_HT_CHANGED = BIT(0), - IEEE80211_RC_SMPS_CHANGED = BIT(1), -}; - -/** - * struct ieee80211_tx_rate_control - rate control information for/from RC algo - * - * @hw: The hardware the algorithm is invoked for. - * @sband: The band this frame is being transmitted on. - * @bss_conf: the current BSS configuration - * @skb: the skb that will be transmitted, the control information in it needs - * to be filled in - * @reported_rate: The rate control algorithm can fill this in to indicate - * which rate should be reported to userspace as the current rate and - * used for rate calculations in the mesh network. - * @rts: whether RTS will be used for this frame because it is longer than the - * RTS threshold - * @short_preamble: whether mac80211 will request short-preamble transmission - * if the selected rate supports it - * @max_rate_idx: user-requested maximum (legacy) rate - * (deprecated; this will be removed once drivers get updated to use - * rate_idx_mask) - * @rate_idx_mask: user-requested (legacy) rate mask - * @rate_idx_mcs_mask: user-requested MCS rate mask - * @bss: whether this frame is sent out in AP or IBSS mode - */ -struct ieee80211_tx_rate_control { - struct ieee80211_hw *hw; - struct ieee80211_supported_band *sband; - struct ieee80211_bss_conf *bss_conf; - struct sk_buff *skb; - struct ieee80211_tx_rate reported_rate; - bool rts, short_preamble; - u8 max_rate_idx; - u32 rate_idx_mask; - u8 rate_idx_mcs_mask[IEEE80211_HT_MCS_MASK_LEN]; - bool bss; -}; - -struct rate_control_ops { - struct module *module; - const char *name; - void *(*alloc)(struct ieee80211_hw *hw, struct dentry *debugfsdir); - void (*free)(void *priv); - - void *(*alloc_sta)(void *priv, struct ieee80211_sta *sta, gfp_t gfp); - void (*rate_init)(void *priv, struct ieee80211_supported_band *sband, - struct ieee80211_sta *sta, void *priv_sta); - void (*rate_update)(void *priv, struct ieee80211_supported_band *sband, - struct ieee80211_sta *sta, - void *priv_sta, u32 changed, - enum nl80211_channel_type oper_chan_type); - void (*free_sta)(void *priv, struct ieee80211_sta *sta, - void *priv_sta); - - void (*tx_status)(void *priv, struct ieee80211_supported_band *sband, - struct ieee80211_sta *sta, void *priv_sta, - struct sk_buff *skb); - void (*get_rate)(void *priv, struct ieee80211_sta *sta, void *priv_sta, - struct ieee80211_tx_rate_control *txrc); - - void (*add_sta_debugfs)(void *priv, void *priv_sta, - struct dentry *dir); - void (*remove_sta_debugfs)(void *priv, void *priv_sta); -}; - -static inline int rate_supported(struct ieee80211_sta *sta, - enum ieee80211_band band, - int index) -{ - return (sta == NULL || sta->supp_rates[band] & BIT(index)); -} - -/** - * rate_control_send_low - helper for drivers for management/no-ack frames - * - * Rate control algorithms that agree to use the lowest rate to - * send management frames and NO_ACK data with the respective hw - * retries should use this in the beginning of their mac80211 get_rate - * callback. If true is returned the rate control can simply return. - * If false is returned we guarantee that sta and sta and priv_sta is - * not null. - * - * Rate control algorithms wishing to do more intelligent selection of - * rate for multicast/broadcast frames may choose to not use this. - * - * @sta: &struct ieee80211_sta pointer to the target destination. Note - * that this may be null. - * @priv_sta: private rate control structure. This may be null. - * @txrc: rate control information we sholud populate for mac80211. - */ -bool rate_control_send_low(struct ieee80211_sta *sta, - void *priv_sta, - struct ieee80211_tx_rate_control *txrc); - - -static inline s8 -rate_lowest_index(struct ieee80211_supported_band *sband, - struct ieee80211_sta *sta) -{ - int i; - - for (i = 0; i < sband->n_bitrates; i++) - if (rate_supported(sta, sband->band, i)) - return i; - - /* warn when we cannot find a rate. */ - WARN_ON_ONCE(1); - - /* and return 0 (the lowest index) */ - return 0; -} - -static inline -bool rate_usable_index_exists(struct ieee80211_supported_band *sband, - struct ieee80211_sta *sta) -{ - unsigned int i; - - for (i = 0; i < sband->n_bitrates; i++) - if (rate_supported(sta, sband->band, i)) - return true; - return false; -} - -int ieee80211_rate_control_register(struct rate_control_ops *ops); -void ieee80211_rate_control_unregister(struct rate_control_ops *ops); - -static inline bool -conf_is_ht20(struct ieee80211_conf *conf) -{ - return conf->channel_type == NL80211_CHAN_HT20; -} - -static inline bool -conf_is_ht40_minus(struct ieee80211_conf *conf) -{ - return conf->channel_type == NL80211_CHAN_HT40MINUS; -} - -static inline bool -conf_is_ht40_plus(struct ieee80211_conf *conf) -{ - return conf->channel_type == NL80211_CHAN_HT40PLUS; -} - -static inline bool -conf_is_ht40(struct ieee80211_conf *conf) -{ - return conf_is_ht40_minus(conf) || conf_is_ht40_plus(conf); -} - -static inline bool -conf_is_ht(struct ieee80211_conf *conf) -{ - return conf->channel_type != NL80211_CHAN_NO_HT; -} - -static inline enum nl80211_iftype -ieee80211_iftype_p2p(enum nl80211_iftype type, bool p2p) -{ - if (p2p) { - switch (type) { - case NL80211_IFTYPE_STATION: - return NL80211_IFTYPE_P2P_CLIENT; - case NL80211_IFTYPE_AP: - return NL80211_IFTYPE_P2P_GO; - default: - break; - } - } - return type; -} - -static inline enum nl80211_iftype -ieee80211_vif_type_p2p(struct ieee80211_vif *vif) -{ - return ieee80211_iftype_p2p(vif->type, vif->p2p); -} - -void ieee80211_enable_rssi_reports(struct ieee80211_vif *vif, - int rssi_min_thold, - int rssi_max_thold); - -void ieee80211_disable_rssi_reports(struct ieee80211_vif *vif); - -int ieee80211_add_srates_ie(struct ieee80211_vif *vif, struct sk_buff *skb); - -int ieee80211_add_ext_srates_ie(struct ieee80211_vif *vif, - struct sk_buff *skb); -#endif /* MAC80211_H */ diff --git a/openairITS/mac/DOT11/include/net/net_namespace.h b/openairITS/mac/DOT11/include/net/net_namespace.h deleted file mode 100644 index 0f74944b38..0000000000 --- a/openairITS/mac/DOT11/include/net/net_namespace.h +++ /dev/null @@ -1,10 +0,0 @@ -#ifndef _COMPAT_NET_NET_NAMESPACE_H -#define _COMPAT_NET_NET_NAMESPACE_H 1 - -#include - -#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,23)) -#include_next -#endif /* (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,23)) */ - -#endif /* _COMPAT_NET_NET_NAMESPACE_H */ diff --git a/openairITS/mac/DOT11/include/net/regulatory.h b/openairITS/mac/DOT11/include/net/regulatory.h deleted file mode 100644 index a5f79933e2..0000000000 --- a/openairITS/mac/DOT11/include/net/regulatory.h +++ /dev/null @@ -1,122 +0,0 @@ -#ifndef __NET_REGULATORY_H -#define __NET_REGULATORY_H -/* - * regulatory support structures - * - * Copyright 2008-2009 Luis R. Rodriguez - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - - -/** - * enum environment_cap - Environment parsed from country IE - * @ENVIRON_ANY: indicates country IE applies to both indoor and - * outdoor operation. - * @ENVIRON_INDOOR: indicates country IE applies only to indoor operation - * @ENVIRON_OUTDOOR: indicates country IE applies only to outdoor operation - */ -enum environment_cap { - ENVIRON_ANY, - ENVIRON_INDOOR, - ENVIRON_OUTDOOR, -}; - -/** - * struct regulatory_request - used to keep track of regulatory requests - * - * @wiphy_idx: this is set if this request's initiator is - * %REGDOM_SET_BY_COUNTRY_IE or %REGDOM_SET_BY_DRIVER. This - * can be used by the wireless core to deal with conflicts - * and potentially inform users of which devices specifically - * cased the conflicts. - * @initiator: indicates who sent this request, could be any of - * of those set in nl80211_reg_initiator (%NL80211_REGDOM_SET_BY_*) - * @alpha2: the ISO / IEC 3166 alpha2 country code of the requested - * regulatory domain. We have a few special codes: - * 00 - World regulatory domain - * 99 - built by driver but a specific alpha2 cannot be determined - * 98 - result of an intersection between two regulatory domains - * 97 - regulatory domain has not yet been configured - * @dfs_region: If CRDA responded with a regulatory domain that requires - * DFS master operation on a known DFS region (NL80211_DFS_*), - * dfs_region represents that region. Drivers can use this and the - * @alpha2 to adjust their device's DFS parameters as required. - * @intersect: indicates whether the wireless core should intersect - * the requested regulatory domain with the presently set regulatory - * domain. - * @processed: indicates whether or not this requests has already been - * processed. When the last request is processed it means that the - * currently regulatory domain set on cfg80211 is updated from - * CRDA and can be used by other regulatory requests. When a - * the last request is not yet processed we must yield until it - * is processed before processing any new requests. - * @country_ie_checksum: checksum of the last processed and accepted - * country IE - * @country_ie_env: lets us know if the AP is telling us we are outdoor, - * indoor, or if it doesn't matter - * @list: used to insert into the reg_requests_list linked list - */ -struct regulatory_request { - int wiphy_idx; - enum nl80211_reg_initiator initiator; - char alpha2[2]; - u8 dfs_region; - bool intersect; - bool processed; - enum environment_cap country_ie_env; - struct list_head list; -}; - -struct ieee80211_freq_range { - u32 start_freq_khz; - u32 end_freq_khz; - u32 max_bandwidth_khz; -}; - -struct ieee80211_power_rule { - u32 max_antenna_gain; - u32 max_eirp; -}; - -struct ieee80211_reg_rule { - struct ieee80211_freq_range freq_range; - struct ieee80211_power_rule power_rule; - u32 flags; -}; - -struct ieee80211_regdomain { - u32 n_reg_rules; - char alpha2[2]; - u8 dfs_region; - struct ieee80211_reg_rule reg_rules[]; -}; - -#define MHZ_TO_KHZ(freq) ((freq) * 1000) -#define KHZ_TO_MHZ(freq) ((freq) / 1000) -#define DBI_TO_MBI(gain) ((gain) * 100) -#define MBI_TO_DBI(gain) ((gain) / 100) -#define DBM_TO_MBM(gain) ((gain) * 100) -#define MBM_TO_DBM(gain) ((gain) / 100) - -#define REG_RULE(start, end, bw, gain, eirp, reg_flags) \ -{ \ - .freq_range.start_freq_khz = MHZ_TO_KHZ(start), \ - .freq_range.end_freq_khz = MHZ_TO_KHZ(end), \ - .freq_range.max_bandwidth_khz = MHZ_TO_KHZ(bw), \ - .power_rule.max_antenna_gain = DBI_TO_MBI(gain),\ - .power_rule.max_eirp = DBM_TO_MBM(eirp), \ - .flags = reg_flags, \ -} - -#endif diff --git a/openairITS/mac/DOT11/net/mac80211/Makefile b/openairITS/mac/DOT11/net/mac80211/Makefile deleted file mode 100644 index 66ca5eadd8..0000000000 --- a/openairITS/mac/DOT11/net/mac80211/Makefile +++ /dev/null @@ -1,63 +0,0 @@ -obj-$(CONFIG_MAC80211) += mac80211_eurecom.o - -# mac80211 objects -mac80211_eurecom-y := \ - main.o status.o \ - sta_info.o \ - wep.o \ - wpa.o \ - scan.o offchannel.o \ - ht.o agg-tx.o agg-rx.o \ - ibss.o \ - work.o \ - iface.o \ - rate.o \ - michael.o \ - tkip.o \ - aes_ccm.o \ - aes_cmac.o \ - cfg.o \ - rx.o \ - spectmgmt.o \ - tx.o \ - key.o \ - util.o \ - wme.o \ - event.o \ - chan.o \ - mlme.o - -mac80211_eurecom-$(CONFIG_COMPAT_MAC80211_DRIVER_API_TRACER) += driver-trace.o - -mac80211_eurecom-$(CONFIG_MAC80211_LEDS) += led.o -mac80211_eurecom-$(CONFIG_MAC80211_DEBUGFS) += \ - debugfs.o \ - debugfs_sta.o \ - debugfs_netdev.o \ - debugfs_key.o - -mac80211_eurecom-$(CONFIG_MAC80211_MESH) += \ - mesh.o \ - mesh_pathtbl.o \ - mesh_plink.o \ - mesh_hwmp.o - -mac80211_eurecom-$(CONFIG_PM) += pm.o - -CFLAGS_driver-trace.o := -I$(src) - -# objects for PID algorithm -rc80211_pid-y := rc80211_pid_algo.o -rc80211_pid-$(CONFIG_MAC80211_DEBUGFS) += rc80211_pid_debugfs.o - -rc80211_minstrel-y := rc80211_minstrel.o -rc80211_minstrel-$(CONFIG_MAC80211_DEBUGFS) += rc80211_minstrel_debugfs.o - -rc80211_minstrel_ht-y := rc80211_minstrel_ht.o -rc80211_minstrel_ht-$(CONFIG_MAC80211_DEBUGFS) += rc80211_minstrel_ht_debugfs.o - -mac80211_eurecom-$(CONFIG_MAC80211_RC_PID) += $(rc80211_pid-y) -mac80211_eurecom-$(CONFIG_MAC80211_RC_MINSTREL) += $(rc80211_minstrel-y) -mac80211_eurecom-$(CONFIG_MAC80211_RC_MINSTREL_HT) += $(rc80211_minstrel_ht-y) - -ccflags-y += -D__CHECK_ENDIAN__ diff --git a/openairITS/mac/DOT11/net/mac80211/aes_ccm.c b/openairITS/mac/DOT11/net/mac80211/aes_ccm.c deleted file mode 100644 index 0785e95c99..0000000000 --- a/openairITS/mac/DOT11/net/mac80211/aes_ccm.c +++ /dev/null @@ -1,150 +0,0 @@ -/* - * Copyright 2003-2004, Instant802 Networks, Inc. - * Copyright 2005-2006, Devicescape Software, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - */ - -#include -#include -#include -#include -#include - -#include -#include "key.h" -#include "aes_ccm.h" - -static void aes_ccm_prepare(struct crypto_cipher *tfm, u8 *scratch, u8 *a) -{ - int i; - u8 *b_0, *aad, *b, *s_0; - - b_0 = scratch + 3 * AES_BLOCK_SIZE; - aad = scratch + 4 * AES_BLOCK_SIZE; - b = scratch; - s_0 = scratch + AES_BLOCK_SIZE; - - crypto_cipher_encrypt_one(tfm, b, b_0); - - /* Extra Authenticate-only data (always two AES blocks) */ - for (i = 0; i < AES_BLOCK_SIZE; i++) - aad[i] ^= b[i]; - crypto_cipher_encrypt_one(tfm, b, aad); - - aad += AES_BLOCK_SIZE; - - for (i = 0; i < AES_BLOCK_SIZE; i++) - aad[i] ^= b[i]; - crypto_cipher_encrypt_one(tfm, a, aad); - - /* Mask out bits from auth-only-b_0 */ - b_0[0] &= 0x07; - - /* S_0 is used to encrypt T (= MIC) */ - b_0[14] = 0; - b_0[15] = 0; - crypto_cipher_encrypt_one(tfm, s_0, b_0); -} - - -void ieee80211_aes_ccm_encrypt(struct crypto_cipher *tfm, u8 *scratch, - u8 *data, size_t data_len, - u8 *cdata, u8 *mic) -{ - int i, j, last_len, num_blocks; - u8 *pos, *cpos, *b, *s_0, *e, *b_0; - - b = scratch; - s_0 = scratch + AES_BLOCK_SIZE; - e = scratch + 2 * AES_BLOCK_SIZE; - b_0 = scratch + 3 * AES_BLOCK_SIZE; - - num_blocks = DIV_ROUND_UP(data_len, AES_BLOCK_SIZE); - last_len = data_len % AES_BLOCK_SIZE; - aes_ccm_prepare(tfm, scratch, b); - - /* Process payload blocks */ - pos = data; - cpos = cdata; - for (j = 1; j <= num_blocks; j++) { - int blen = (j == num_blocks && last_len) ? - last_len : AES_BLOCK_SIZE; - - /* Authentication followed by encryption */ - for (i = 0; i < blen; i++) - b[i] ^= pos[i]; - crypto_cipher_encrypt_one(tfm, b, b); - - b_0[14] = (j >> 8) & 0xff; - b_0[15] = j & 0xff; - crypto_cipher_encrypt_one(tfm, e, b_0); - for (i = 0; i < blen; i++) - *cpos++ = *pos++ ^ e[i]; - } - - for (i = 0; i < CCMP_MIC_LEN; i++) - mic[i] = b[i] ^ s_0[i]; -} - - -int ieee80211_aes_ccm_decrypt(struct crypto_cipher *tfm, u8 *scratch, - u8 *cdata, size_t data_len, u8 *mic, u8 *data) -{ - int i, j, last_len, num_blocks; - u8 *pos, *cpos, *b, *s_0, *a, *b_0; - - b = scratch; - s_0 = scratch + AES_BLOCK_SIZE; - a = scratch + 2 * AES_BLOCK_SIZE; - b_0 = scratch + 3 * AES_BLOCK_SIZE; - - num_blocks = DIV_ROUND_UP(data_len, AES_BLOCK_SIZE); - last_len = data_len % AES_BLOCK_SIZE; - aes_ccm_prepare(tfm, scratch, a); - - /* Process payload blocks */ - cpos = cdata; - pos = data; - for (j = 1; j <= num_blocks; j++) { - int blen = (j == num_blocks && last_len) ? - last_len : AES_BLOCK_SIZE; - - /* Decryption followed by authentication */ - b_0[14] = (j >> 8) & 0xff; - b_0[15] = j & 0xff; - crypto_cipher_encrypt_one(tfm, b, b_0); - for (i = 0; i < blen; i++) { - *pos = *cpos++ ^ b[i]; - a[i] ^= *pos++; - } - crypto_cipher_encrypt_one(tfm, a, a); - } - - for (i = 0; i < CCMP_MIC_LEN; i++) { - if ((mic[i] ^ s_0[i]) != a[i]) - return -1; - } - - return 0; -} - - -struct crypto_cipher *ieee80211_aes_key_setup_encrypt(const u8 key[]) -{ - struct crypto_cipher *tfm; - - tfm = crypto_alloc_cipher("aes", 0, CRYPTO_ALG_ASYNC); - if (!IS_ERR(tfm)) - crypto_cipher_setkey(tfm, key, ALG_CCMP_KEY_LEN); - - return tfm; -} - - -void ieee80211_aes_key_free(struct crypto_cipher *tfm) -{ - crypto_free_cipher(tfm); -} diff --git a/openairITS/mac/DOT11/net/mac80211/aes_ccm.h b/openairITS/mac/DOT11/net/mac80211/aes_ccm.h deleted file mode 100644 index 5b7d744e23..0000000000 --- a/openairITS/mac/DOT11/net/mac80211/aes_ccm.h +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Copyright 2003-2004, Instant802 Networks, Inc. - * Copyright 2006, Devicescape Software, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - */ - -#ifndef AES_CCM_H -#define AES_CCM_H - -#include - -struct crypto_cipher *ieee80211_aes_key_setup_encrypt(const u8 key[]); -void ieee80211_aes_ccm_encrypt(struct crypto_cipher *tfm, u8 *scratch, - u8 *data, size_t data_len, - u8 *cdata, u8 *mic); -int ieee80211_aes_ccm_decrypt(struct crypto_cipher *tfm, u8 *scratch, - u8 *cdata, size_t data_len, - u8 *mic, u8 *data); -void ieee80211_aes_key_free(struct crypto_cipher *tfm); - -#endif /* AES_CCM_H */ diff --git a/openairITS/mac/DOT11/net/mac80211/aes_cmac.c b/openairITS/mac/DOT11/net/mac80211/aes_cmac.c deleted file mode 100644 index 8dfd70d8fc..0000000000 --- a/openairITS/mac/DOT11/net/mac80211/aes_cmac.c +++ /dev/null @@ -1,132 +0,0 @@ -/* - * AES-128-CMAC with TLen 16 for IEEE 802.11w BIP - * Copyright 2008, Jouni Malinen - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - */ - -#include -#include -#include -#include -#include - -#include -#include "key.h" -#include "aes_cmac.h" - -#define AES_CMAC_KEY_LEN 16 -#define CMAC_TLEN 8 /* CMAC TLen = 64 bits (8 octets) */ -#define AAD_LEN 20 - - -static void gf_mulx(u8 *pad) -{ - int i, carry; - - carry = pad[0] & 0x80; - for (i = 0; i < AES_BLOCK_SIZE - 1; i++) - pad[i] = (pad[i] << 1) | (pad[i + 1] >> 7); - pad[AES_BLOCK_SIZE - 1] <<= 1; - if (carry) - pad[AES_BLOCK_SIZE - 1] ^= 0x87; -} - - -static void aes_128_cmac_vector(struct crypto_cipher *tfm, size_t num_elem, - const u8 *addr[], const size_t *len, u8 *mac) -{ - u8 scratch[2 * AES_BLOCK_SIZE]; - u8 *cbc, *pad; - const u8 *pos, *end; - size_t i, e, left, total_len; - - cbc = scratch; - pad = scratch + AES_BLOCK_SIZE; - - memset(cbc, 0, AES_BLOCK_SIZE); - - total_len = 0; - for (e = 0; e < num_elem; e++) - total_len += len[e]; - left = total_len; - - e = 0; - pos = addr[0]; - end = pos + len[0]; - - while (left >= AES_BLOCK_SIZE) { - for (i = 0; i < AES_BLOCK_SIZE; i++) { - cbc[i] ^= *pos++; - if (pos >= end) { - e++; - pos = addr[e]; - end = pos + len[e]; - } - } - if (left > AES_BLOCK_SIZE) - crypto_cipher_encrypt_one(tfm, cbc, cbc); - left -= AES_BLOCK_SIZE; - } - - memset(pad, 0, AES_BLOCK_SIZE); - crypto_cipher_encrypt_one(tfm, pad, pad); - gf_mulx(pad); - - if (left || total_len == 0) { - for (i = 0; i < left; i++) { - cbc[i] ^= *pos++; - if (pos >= end) { - e++; - pos = addr[e]; - end = pos + len[e]; - } - } - cbc[left] ^= 0x80; - gf_mulx(pad); - } - - for (i = 0; i < AES_BLOCK_SIZE; i++) - pad[i] ^= cbc[i]; - crypto_cipher_encrypt_one(tfm, pad, pad); - memcpy(mac, pad, CMAC_TLEN); -} - - -void ieee80211_aes_cmac(struct crypto_cipher *tfm, const u8 *aad, - const u8 *data, size_t data_len, u8 *mic) -{ - const u8 *addr[3]; - size_t len[3]; - u8 zero[CMAC_TLEN]; - - memset(zero, 0, CMAC_TLEN); - addr[0] = aad; - len[0] = AAD_LEN; - addr[1] = data; - len[1] = data_len - CMAC_TLEN; - addr[2] = zero; - len[2] = CMAC_TLEN; - - aes_128_cmac_vector(tfm, 3, addr, len, mic); -} - - -struct crypto_cipher * ieee80211_aes_cmac_key_setup(const u8 key[]) -{ - struct crypto_cipher *tfm; - - tfm = crypto_alloc_cipher("aes", 0, CRYPTO_ALG_ASYNC); - if (!IS_ERR(tfm)) - crypto_cipher_setkey(tfm, key, AES_CMAC_KEY_LEN); - - return tfm; -} - - -void ieee80211_aes_cmac_key_free(struct crypto_cipher *tfm) -{ - crypto_free_cipher(tfm); -} diff --git a/openairITS/mac/DOT11/net/mac80211/aes_cmac.h b/openairITS/mac/DOT11/net/mac80211/aes_cmac.h deleted file mode 100644 index 20785a6472..0000000000 --- a/openairITS/mac/DOT11/net/mac80211/aes_cmac.h +++ /dev/null @@ -1,19 +0,0 @@ -/* - * Copyright 2008, Jouni Malinen - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - */ - -#ifndef AES_CMAC_H -#define AES_CMAC_H - -#include - -struct crypto_cipher * ieee80211_aes_cmac_key_setup(const u8 key[]); -void ieee80211_aes_cmac(struct crypto_cipher *tfm, const u8 *aad, - const u8 *data, size_t data_len, u8 *mic); -void ieee80211_aes_cmac_key_free(struct crypto_cipher *tfm); - -#endif /* AES_CMAC_H */ diff --git a/openairITS/mac/DOT11/net/mac80211/agg-rx.c b/openairITS/mac/DOT11/net/mac80211/agg-rx.c deleted file mode 100644 index 64d3ce5ea1..0000000000 --- a/openairITS/mac/DOT11/net/mac80211/agg-rx.c +++ /dev/null @@ -1,347 +0,0 @@ -/* - * HT handling - * - * Copyright 2003, Jouni Malinen - * Copyright 2002-2005, Instant802 Networks, Inc. - * Copyright 2005-2006, Devicescape Software, Inc. - * Copyright 2006-2007 Jiri Benc - * Copyright 2007, Michael Wu - * Copyright 2007-2010, Intel Corporation - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - */ - -/** - * DOC: RX A-MPDU aggregation - * - * Aggregation on the RX side requires only implementing the - * @ampdu_action callback that is invoked to start/stop any - * block-ack sessions for RX aggregation. - * - * When RX aggregation is started by the peer, the driver is - * notified via @ampdu_action function, with the - * %IEEE80211_AMPDU_RX_START action, and may reject the request - * in which case a negative response is sent to the peer, if it - * accepts it a positive response is sent. - * - * While the session is active, the device/driver are required - * to de-aggregate frames and pass them up one by one to mac80211, - * which will handle the reorder buffer. - * - * When the aggregation session is stopped again by the peer or - * ourselves, the driver's @ampdu_action function will be called - * with the action %IEEE80211_AMPDU_RX_STOP. In this case, the - * call must not fail. - */ - -#include -#include -#include -#include -#include "ieee80211_i.h" -#include "driver-ops.h" - -static void ieee80211_free_tid_rx(struct rcu_head *h) -{ - struct tid_ampdu_rx *tid_rx = - container_of(h, struct tid_ampdu_rx, rcu_head); - int i; - - del_timer_sync(&tid_rx->reorder_timer); - - for (i = 0; i < tid_rx->buf_size; i++) - dev_kfree_skb(tid_rx->reorder_buf[i]); - kfree(tid_rx->reorder_buf); - kfree(tid_rx->reorder_time); - kfree(tid_rx); -} - -void ___ieee80211_stop_rx_ba_session(struct sta_info *sta, u16 tid, - u16 initiator, u16 reason, bool tx) -{ - struct ieee80211_local *local = sta->local; - struct tid_ampdu_rx *tid_rx; - - lockdep_assert_held(&sta->ampdu_mlme.mtx); - - tid_rx = rcu_dereference_protected(sta->ampdu_mlme.tid_rx[tid], - lockdep_is_held(&sta->ampdu_mlme.mtx)); - - if (!tid_rx) - return; - - RCU_INIT_POINTER(sta->ampdu_mlme.tid_rx[tid], NULL); - -#ifdef CONFIG_MAC80211_HT_DEBUG - printk(KERN_DEBUG - "Rx BA session stop requested for %pM tid %u %s reason: %d\n", - sta->sta.addr, tid, - initiator == WLAN_BACK_RECIPIENT ? "recipient" : "inititator", - (int)reason); -#endif /* CONFIG_MAC80211_HT_DEBUG */ - - if (drv_ampdu_action(local, sta->sdata, IEEE80211_AMPDU_RX_STOP, - &sta->sta, tid, NULL, 0)) - printk(KERN_DEBUG "HW problem - can not stop rx " - "aggregation for tid %d\n", tid); - - /* check if this is a self generated aggregation halt */ - if (initiator == WLAN_BACK_RECIPIENT && tx) - ieee80211_send_delba(sta->sdata, sta->sta.addr, - tid, WLAN_BACK_RECIPIENT, reason); - - del_timer_sync(&tid_rx->session_timer); - - call_rcu(&tid_rx->rcu_head, ieee80211_free_tid_rx); -} - -void __ieee80211_stop_rx_ba_session(struct sta_info *sta, u16 tid, - u16 initiator, u16 reason, bool tx) -{ - mutex_lock(&sta->ampdu_mlme.mtx); - ___ieee80211_stop_rx_ba_session(sta, tid, initiator, reason, tx); - mutex_unlock(&sta->ampdu_mlme.mtx); -} - -void ieee80211_stop_rx_ba_session(struct ieee80211_vif *vif, u16 ba_rx_bitmap, - const u8 *addr) -{ - struct ieee80211_sub_if_data *sdata = vif_to_sdata(vif); - struct sta_info *sta; - int i; - - rcu_read_lock(); - sta = sta_info_get_bss(sdata, addr); - if (!sta) { - rcu_read_unlock(); - return; - } - - for (i = 0; i < STA_TID_NUM; i++) - if (ba_rx_bitmap & BIT(i)) - set_bit(i, sta->ampdu_mlme.tid_rx_stop_requested); - - ieee80211_queue_work(&sta->local->hw, &sta->ampdu_mlme.work); - rcu_read_unlock(); -} -EXPORT_SYMBOL(ieee80211_stop_rx_ba_session); - -/* - * After accepting the AddBA Request we activated a timer, - * resetting it after each frame that arrives from the originator. - */ -static void sta_rx_agg_session_timer_expired(unsigned long data) -{ - /* not an elegant detour, but there is no choice as the timer passes - * only one argument, and various sta_info are needed here, so init - * flow in sta_info_create gives the TID as data, while the timer_to_id - * array gives the sta through container_of */ - u8 *ptid = (u8 *)data; - u8 *timer_to_id = ptid - *ptid; - struct sta_info *sta = container_of(timer_to_id, struct sta_info, - timer_to_tid[0]); - -#ifdef CONFIG_MAC80211_HT_DEBUG - printk(KERN_DEBUG "rx session timer expired on tid %d\n", (u16)*ptid); -#endif - set_bit(*ptid, sta->ampdu_mlme.tid_rx_timer_expired); - ieee80211_queue_work(&sta->local->hw, &sta->ampdu_mlme.work); -} - -static void sta_rx_agg_reorder_timer_expired(unsigned long data) -{ - u8 *ptid = (u8 *)data; - u8 *timer_to_id = ptid - *ptid; - struct sta_info *sta = container_of(timer_to_id, struct sta_info, - timer_to_tid[0]); - - rcu_read_lock(); - ieee80211_release_reorder_timeout(sta, *ptid); - rcu_read_unlock(); -} - -static void ieee80211_send_addba_resp(struct ieee80211_sub_if_data *sdata, u8 *da, u16 tid, - u8 dialog_token, u16 status, u16 policy, - u16 buf_size, u16 timeout) -{ - struct ieee80211_local *local = sdata->local; - struct sk_buff *skb; - struct ieee80211_mgmt *mgmt; - u16 capab; - - skb = dev_alloc_skb(sizeof(*mgmt) + local->hw.extra_tx_headroom); - if (!skb) - return; - - skb_reserve(skb, local->hw.extra_tx_headroom); - mgmt = (struct ieee80211_mgmt *) skb_put(skb, 24); - memset(mgmt, 0, 24); - memcpy(mgmt->da, da, ETH_ALEN); - memcpy(mgmt->sa, sdata->vif.addr, ETH_ALEN); - if (sdata->vif.type == NL80211_IFTYPE_AP || - sdata->vif.type == NL80211_IFTYPE_AP_VLAN || - sdata->vif.type == NL80211_IFTYPE_MESH_POINT) - memcpy(mgmt->bssid, sdata->vif.addr, ETH_ALEN); - else if (sdata->vif.type == NL80211_IFTYPE_STATION) - memcpy(mgmt->bssid, sdata->u.mgd.bssid, ETH_ALEN); - else if (sdata->vif.type == NL80211_IFTYPE_ADHOC) - memcpy(mgmt->bssid, sdata->u.ibss.bssid, ETH_ALEN); - - mgmt->frame_control = cpu_to_le16(IEEE80211_FTYPE_MGMT | - IEEE80211_STYPE_ACTION); - - skb_put(skb, 1 + sizeof(mgmt->u.action.u.addba_resp)); - mgmt->u.action.category = WLAN_CATEGORY_BACK; - mgmt->u.action.u.addba_resp.action_code = WLAN_ACTION_ADDBA_RESP; - mgmt->u.action.u.addba_resp.dialog_token = dialog_token; - - capab = (u16)(policy << 1); /* bit 1 aggregation policy */ - capab |= (u16)(tid << 2); /* bit 5:2 TID number */ - capab |= (u16)(buf_size << 6); /* bit 15:6 max size of aggregation */ - - mgmt->u.action.u.addba_resp.capab = cpu_to_le16(capab); - mgmt->u.action.u.addba_resp.timeout = cpu_to_le16(timeout); - mgmt->u.action.u.addba_resp.status = cpu_to_le16(status); - - ieee80211_tx_skb(sdata, skb); -} - -void ieee80211_process_addba_request(struct ieee80211_local *local, - struct sta_info *sta, - struct ieee80211_mgmt *mgmt, - size_t len) -{ - struct tid_ampdu_rx *tid_agg_rx; - u16 capab, tid, timeout, ba_policy, buf_size, start_seq_num, status; - u8 dialog_token; - int ret = -EOPNOTSUPP; - - /* extract session parameters from addba request frame */ - dialog_token = mgmt->u.action.u.addba_req.dialog_token; - timeout = le16_to_cpu(mgmt->u.action.u.addba_req.timeout); - start_seq_num = - le16_to_cpu(mgmt->u.action.u.addba_req.start_seq_num) >> 4; - - capab = le16_to_cpu(mgmt->u.action.u.addba_req.capab); - ba_policy = (capab & IEEE80211_ADDBA_PARAM_POLICY_MASK) >> 1; - tid = (capab & IEEE80211_ADDBA_PARAM_TID_MASK) >> 2; - buf_size = (capab & IEEE80211_ADDBA_PARAM_BUF_SIZE_MASK) >> 6; - - status = WLAN_STATUS_REQUEST_DECLINED; - - if (test_sta_flag(sta, WLAN_STA_BLOCK_BA)) { -#ifdef CONFIG_MAC80211_HT_DEBUG - printk(KERN_DEBUG "Suspend in progress. " - "Denying ADDBA request\n"); -#endif - goto end_no_lock; - } - - /* sanity check for incoming parameters: - * check if configuration can support the BA policy - * and if buffer size does not exceeds max value */ - /* XXX: check own ht delayed BA capability?? */ - if (((ba_policy != 1) && - (!(sta->sta.ht_cap.cap & IEEE80211_HT_CAP_DELAY_BA))) || - (buf_size > IEEE80211_MAX_AMPDU_BUF)) { - status = WLAN_STATUS_INVALID_QOS_PARAM; -#ifdef CONFIG_MAC80211_HT_DEBUG - if (net_ratelimit()) - printk(KERN_DEBUG "AddBA Req with bad params from " - "%pM on tid %u. policy %d, buffer size %d\n", - mgmt->sa, tid, ba_policy, - buf_size); -#endif /* CONFIG_MAC80211_HT_DEBUG */ - goto end_no_lock; - } - /* determine default buffer size */ - if (buf_size == 0) - buf_size = IEEE80211_MAX_AMPDU_BUF; - - /* make sure the size doesn't exceed the maximum supported by the hw */ - if (buf_size > local->hw.max_rx_aggregation_subframes) - buf_size = local->hw.max_rx_aggregation_subframes; - - /* examine state machine */ - mutex_lock(&sta->ampdu_mlme.mtx); - - if (sta->ampdu_mlme.tid_rx[tid]) { -#ifdef CONFIG_MAC80211_HT_DEBUG - if (net_ratelimit()) - printk(KERN_DEBUG "unexpected AddBA Req from " - "%pM on tid %u\n", - mgmt->sa, tid); -#endif /* CONFIG_MAC80211_HT_DEBUG */ - - /* delete existing Rx BA session on the same tid */ - ___ieee80211_stop_rx_ba_session(sta, tid, WLAN_BACK_RECIPIENT, - WLAN_STATUS_UNSPECIFIED_QOS, - false); - } - - /* prepare A-MPDU MLME for Rx aggregation */ - tid_agg_rx = kmalloc(sizeof(struct tid_ampdu_rx), GFP_KERNEL); - if (!tid_agg_rx) - goto end; - - spin_lock_init(&tid_agg_rx->reorder_lock); - - /* rx timer */ - tid_agg_rx->session_timer.function = sta_rx_agg_session_timer_expired; - tid_agg_rx->session_timer.data = (unsigned long)&sta->timer_to_tid[tid]; - init_timer(&tid_agg_rx->session_timer); - - /* rx reorder timer */ - tid_agg_rx->reorder_timer.function = sta_rx_agg_reorder_timer_expired; - tid_agg_rx->reorder_timer.data = (unsigned long)&sta->timer_to_tid[tid]; - init_timer(&tid_agg_rx->reorder_timer); - - /* prepare reordering buffer */ - tid_agg_rx->reorder_buf = - kcalloc(buf_size, sizeof(struct sk_buff *), GFP_KERNEL); - tid_agg_rx->reorder_time = - kcalloc(buf_size, sizeof(unsigned long), GFP_KERNEL); - if (!tid_agg_rx->reorder_buf || !tid_agg_rx->reorder_time) { - kfree(tid_agg_rx->reorder_buf); - kfree(tid_agg_rx->reorder_time); - kfree(tid_agg_rx); - goto end; - } - - ret = drv_ampdu_action(local, sta->sdata, IEEE80211_AMPDU_RX_START, - &sta->sta, tid, &start_seq_num, 0); -#ifdef CONFIG_MAC80211_HT_DEBUG - printk(KERN_DEBUG "Rx A-MPDU request on tid %d result %d\n", tid, ret); -#endif /* CONFIG_MAC80211_HT_DEBUG */ - - if (ret) { - kfree(tid_agg_rx->reorder_buf); - kfree(tid_agg_rx->reorder_time); - kfree(tid_agg_rx); - goto end; - } - - /* update data */ - tid_agg_rx->dialog_token = dialog_token; - tid_agg_rx->ssn = start_seq_num; - tid_agg_rx->head_seq_num = start_seq_num; - tid_agg_rx->buf_size = buf_size; - tid_agg_rx->timeout = timeout; - tid_agg_rx->stored_mpdu_num = 0; - status = WLAN_STATUS_SUCCESS; - - /* activate it for RX */ - rcu_assign_pointer(sta->ampdu_mlme.tid_rx[tid], tid_agg_rx); - - if (timeout) - mod_timer(&tid_agg_rx->session_timer, TU_TO_EXP_TIME(timeout)); - -end: - mutex_unlock(&sta->ampdu_mlme.mtx); - -end_no_lock: - ieee80211_send_addba_resp(sta->sdata, sta->sta.addr, tid, - dialog_token, status, 1, buf_size, timeout); -} diff --git a/openairITS/mac/DOT11/net/mac80211/agg-tx.c b/openairITS/mac/DOT11/net/mac80211/agg-tx.c deleted file mode 100644 index 76be617441..0000000000 --- a/openairITS/mac/DOT11/net/mac80211/agg-tx.c +++ /dev/null @@ -1,898 +0,0 @@ -/* - * HT handling - * - * Copyright 2003, Jouni Malinen - * Copyright 2002-2005, Instant802 Networks, Inc. - * Copyright 2005-2006, Devicescape Software, Inc. - * Copyright 2006-2007 Jiri Benc - * Copyright 2007, Michael Wu - * Copyright 2007-2010, Intel Corporation - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - */ - -#include -#include -#include -#include -#include "ieee80211_i.h" -#include "driver-ops.h" -#include "wme.h" - -/** - * DOC: TX A-MPDU aggregation - * - * Aggregation on the TX side requires setting the hardware flag - * %IEEE80211_HW_AMPDU_AGGREGATION. The driver will then be handed - * packets with a flag indicating A-MPDU aggregation. The driver - * or device is responsible for actually aggregating the frames, - * as well as deciding how many and which to aggregate. - * - * When TX aggregation is started by some subsystem (usually the rate - * control algorithm would be appropriate) by calling the - * ieee80211_start_tx_ba_session() function, the driver will be - * notified via its @ampdu_action function, with the - * %IEEE80211_AMPDU_TX_START action. - * - * In response to that, the driver is later required to call the - * ieee80211_start_tx_ba_cb_irqsafe() function, which will really - * start the aggregation session after the peer has also responded. - * If the peer responds negatively, the session will be stopped - * again right away. Note that it is possible for the aggregation - * session to be stopped before the driver has indicated that it - * is done setting it up, in which case it must not indicate the - * setup completion. - * - * Also note that, since we also need to wait for a response from - * the peer, the driver is notified of the completion of the - * handshake by the %IEEE80211_AMPDU_TX_OPERATIONAL action to the - * @ampdu_action callback. - * - * Similarly, when the aggregation session is stopped by the peer - * or something calling ieee80211_stop_tx_ba_session(), the driver's - * @ampdu_action function will be called with the action - * %IEEE80211_AMPDU_TX_STOP. In this case, the call must not fail, - * and the driver must later call ieee80211_stop_tx_ba_cb_irqsafe(). - * Note that the sta can get destroyed before the BA tear down is - * complete. - */ - -static void ieee80211_send_addba_request(struct ieee80211_sub_if_data *sdata, - const u8 *da, u16 tid, - u8 dialog_token, u16 start_seq_num, - u16 agg_size, u16 timeout) -{ - struct ieee80211_local *local = sdata->local; - struct sk_buff *skb; - struct ieee80211_mgmt *mgmt; - u16 capab; - - skb = dev_alloc_skb(sizeof(*mgmt) + local->hw.extra_tx_headroom); - - if (!skb) - return; - - skb_reserve(skb, local->hw.extra_tx_headroom); - mgmt = (struct ieee80211_mgmt *) skb_put(skb, 24); - memset(mgmt, 0, 24); - memcpy(mgmt->da, da, ETH_ALEN); - memcpy(mgmt->sa, sdata->vif.addr, ETH_ALEN); - if (sdata->vif.type == NL80211_IFTYPE_AP || - sdata->vif.type == NL80211_IFTYPE_AP_VLAN || - sdata->vif.type == NL80211_IFTYPE_MESH_POINT) - memcpy(mgmt->bssid, sdata->vif.addr, ETH_ALEN); - else if (sdata->vif.type == NL80211_IFTYPE_STATION) - memcpy(mgmt->bssid, sdata->u.mgd.bssid, ETH_ALEN); - else if (sdata->vif.type == NL80211_IFTYPE_ADHOC) - memcpy(mgmt->bssid, sdata->u.ibss.bssid, ETH_ALEN); - - mgmt->frame_control = cpu_to_le16(IEEE80211_FTYPE_MGMT | - IEEE80211_STYPE_ACTION); - - skb_put(skb, 1 + sizeof(mgmt->u.action.u.addba_req)); - - mgmt->u.action.category = WLAN_CATEGORY_BACK; - mgmt->u.action.u.addba_req.action_code = WLAN_ACTION_ADDBA_REQ; - - mgmt->u.action.u.addba_req.dialog_token = dialog_token; - capab = (u16)(1 << 1); /* bit 1 aggregation policy */ - capab |= (u16)(tid << 2); /* bit 5:2 TID number */ - capab |= (u16)(agg_size << 6); /* bit 15:6 max size of aggergation */ - - mgmt->u.action.u.addba_req.capab = cpu_to_le16(capab); - - mgmt->u.action.u.addba_req.timeout = cpu_to_le16(timeout); - mgmt->u.action.u.addba_req.start_seq_num = - cpu_to_le16(start_seq_num << 4); - - ieee80211_tx_skb_tid(sdata, skb, tid); -} - -void ieee80211_send_bar(struct ieee80211_vif *vif, u8 *ra, u16 tid, u16 ssn) -{ - struct ieee80211_sub_if_data *sdata = vif_to_sdata(vif); - struct ieee80211_local *local = sdata->local; - struct sk_buff *skb; - struct ieee80211_bar *bar; - u16 bar_control = 0; - - skb = dev_alloc_skb(sizeof(*bar) + local->hw.extra_tx_headroom); - if (!skb) - return; - - skb_reserve(skb, local->hw.extra_tx_headroom); - bar = (struct ieee80211_bar *)skb_put(skb, sizeof(*bar)); - memset(bar, 0, sizeof(*bar)); - bar->frame_control = cpu_to_le16(IEEE80211_FTYPE_CTL | - IEEE80211_STYPE_BACK_REQ); - memcpy(bar->ra, ra, ETH_ALEN); - memcpy(bar->ta, sdata->vif.addr, ETH_ALEN); - bar_control |= (u16)IEEE80211_BAR_CTRL_ACK_POLICY_NORMAL; - bar_control |= (u16)IEEE80211_BAR_CTRL_CBMTID_COMPRESSED_BA; - bar_control |= (u16)(tid << IEEE80211_BAR_CTRL_TID_INFO_SHIFT); - bar->control = cpu_to_le16(bar_control); - bar->start_seq_num = cpu_to_le16(ssn); - - IEEE80211_SKB_CB(skb)->flags |= IEEE80211_TX_INTFL_DONT_ENCRYPT; - ieee80211_tx_skb_tid(sdata, skb, tid); -} -EXPORT_SYMBOL(ieee80211_send_bar); - -void ieee80211_assign_tid_tx(struct sta_info *sta, int tid, - struct tid_ampdu_tx *tid_tx) -{ - lockdep_assert_held(&sta->ampdu_mlme.mtx); - lockdep_assert_held(&sta->lock); - rcu_assign_pointer(sta->ampdu_mlme.tid_tx[tid], tid_tx); -} - -int ___ieee80211_stop_tx_ba_session(struct sta_info *sta, u16 tid, - enum ieee80211_back_parties initiator, - bool tx) -{ - struct ieee80211_local *local = sta->local; - struct tid_ampdu_tx *tid_tx; - int ret; - - lockdep_assert_held(&sta->ampdu_mlme.mtx); - - spin_lock_bh(&sta->lock); - - tid_tx = rcu_dereference_protected_tid_tx(sta, tid); - if (!tid_tx) { - spin_unlock_bh(&sta->lock); - return -ENOENT; - } - - /* if we're already stopping ignore any new requests to stop */ - if (test_bit(HT_AGG_STATE_STOPPING, &tid_tx->state)) { - spin_unlock_bh(&sta->lock); - return -EALREADY; - } - - if (test_bit(HT_AGG_STATE_WANT_START, &tid_tx->state)) { - /* not even started yet! */ - ieee80211_assign_tid_tx(sta, tid, NULL); - spin_unlock_bh(&sta->lock); - kfree_rcu(tid_tx, rcu_head); - return 0; - } - - set_bit(HT_AGG_STATE_STOPPING, &tid_tx->state); - - spin_unlock_bh(&sta->lock); - -#ifdef CONFIG_MAC80211_HT_DEBUG - printk(KERN_DEBUG "Tx BA session stop requested for %pM tid %u\n", - sta->sta.addr, tid); -#endif /* CONFIG_MAC80211_HT_DEBUG */ - - del_timer_sync(&tid_tx->addba_resp_timer); - del_timer_sync(&tid_tx->session_timer); - - /* - * After this packets are no longer handed right through - * to the driver but are put onto tid_tx->pending instead, - * with locking to ensure proper access. - */ - clear_bit(HT_AGG_STATE_OPERATIONAL, &tid_tx->state); - - /* - * There might be a few packets being processed right now (on - * another CPU) that have already gotten past the aggregation - * check when it was still OPERATIONAL and consequently have - * IEEE80211_TX_CTL_AMPDU set. In that case, this code might - * call into the driver at the same time or even before the - * TX paths calls into it, which could confuse the driver. - * - * Wait for all currently running TX paths to finish before - * telling the driver. New packets will not go through since - * the aggregation session is no longer OPERATIONAL. - */ - synchronize_net(); - - tid_tx->stop_initiator = initiator; - tid_tx->tx_stop = tx; - - ret = drv_ampdu_action(local, sta->sdata, - IEEE80211_AMPDU_TX_STOP, - &sta->sta, tid, NULL, 0); - - /* HW shall not deny going back to legacy */ - if (WARN_ON(ret)) { - /* - * We may have pending packets get stuck in this case... - * Not bothering with a workaround for now. - */ - } - - return ret; -} - -/* - * After sending add Block Ack request we activated a timer until - * add Block Ack response will arrive from the recipient. - * If this timer expires sta_addba_resp_timer_expired will be executed. - */ -static void sta_addba_resp_timer_expired(unsigned long data) -{ - /* not an elegant detour, but there is no choice as the timer passes - * only one argument, and both sta_info and TID are needed, so init - * flow in sta_info_create gives the TID as data, while the timer_to_id - * array gives the sta through container_of */ - u16 tid = *(u8 *)data; - struct sta_info *sta = container_of((void *)data, - struct sta_info, timer_to_tid[tid]); - struct tid_ampdu_tx *tid_tx; - - /* check if the TID waits for addBA response */ - rcu_read_lock(); - tid_tx = rcu_dereference(sta->ampdu_mlme.tid_tx[tid]); - if (!tid_tx || - test_bit(HT_AGG_STATE_RESPONSE_RECEIVED, &tid_tx->state)) { - rcu_read_unlock(); -#ifdef CONFIG_MAC80211_HT_DEBUG - printk(KERN_DEBUG "timer expired on tid %d but we are not " - "(or no longer) expecting addBA response there\n", - tid); -#endif - return; - } - -#ifdef CONFIG_MAC80211_HT_DEBUG - printk(KERN_DEBUG "addBA response timer expired on tid %d\n", tid); -#endif - - ieee80211_stop_tx_ba_session(&sta->sta, tid); - rcu_read_unlock(); -} - -static inline int ieee80211_ac_from_tid(int tid) -{ - return ieee802_1d_to_ac[tid & 7]; -} - -/* - * When multiple aggregation sessions on multiple stations - * are being created/destroyed simultaneously, we need to - * refcount the global queue stop caused by that in order - * to not get into a situation where one of the aggregation - * setup or teardown re-enables queues before the other is - * ready to handle that. - * - * These two functions take care of this issue by keeping - * a global "agg_queue_stop" refcount. - */ -static void __acquires(agg_queue) -ieee80211_stop_queue_agg(struct ieee80211_local *local, int tid) -{ - int queue = ieee80211_ac_from_tid(tid); - - if (atomic_inc_return(&local->agg_queue_stop[queue]) == 1) - ieee80211_stop_queue_by_reason( - &local->hw, queue, - IEEE80211_QUEUE_STOP_REASON_AGGREGATION); - __acquire(agg_queue); -} - -static void __releases(agg_queue) -ieee80211_wake_queue_agg(struct ieee80211_local *local, int tid) -{ - int queue = ieee80211_ac_from_tid(tid); - - if (atomic_dec_return(&local->agg_queue_stop[queue]) == 0) - ieee80211_wake_queue_by_reason( - &local->hw, queue, - IEEE80211_QUEUE_STOP_REASON_AGGREGATION); - __release(agg_queue); -} - -/* - * splice packets from the STA's pending to the local pending, - * requires a call to ieee80211_agg_splice_finish later - */ -static void __acquires(agg_queue) -ieee80211_agg_splice_packets(struct ieee80211_local *local, - struct tid_ampdu_tx *tid_tx, u16 tid) -{ - int queue = ieee80211_ac_from_tid(tid); - unsigned long flags; - - ieee80211_stop_queue_agg(local, tid); - - if (WARN(!tid_tx, "TID %d gone but expected when splicing aggregates" - " from the pending queue\n", tid)) - return; - - if (!skb_queue_empty(&tid_tx->pending)) { - spin_lock_irqsave(&local->queue_stop_reason_lock, flags); - /* copy over remaining packets */ - skb_queue_splice_tail_init(&tid_tx->pending, - &local->pending[queue]); - spin_unlock_irqrestore(&local->queue_stop_reason_lock, flags); - } -} - -static void __releases(agg_queue) -ieee80211_agg_splice_finish(struct ieee80211_local *local, u16 tid) -{ - ieee80211_wake_queue_agg(local, tid); -} - -void ieee80211_tx_ba_session_handle_start(struct sta_info *sta, int tid) -{ - struct tid_ampdu_tx *tid_tx; - struct ieee80211_local *local = sta->local; - struct ieee80211_sub_if_data *sdata = sta->sdata; - u16 start_seq_num; - int ret; - - tid_tx = rcu_dereference_protected_tid_tx(sta, tid); - - /* - * Start queuing up packets for this aggregation session. - * We're going to release them once the driver is OK with - * that. - */ - clear_bit(HT_AGG_STATE_WANT_START, &tid_tx->state); - - /* - * Make sure no packets are being processed. This ensures that - * we have a valid starting sequence number and that in-flight - * packets have been flushed out and no packets for this TID - * will go into the driver during the ampdu_action call. - */ - synchronize_net(); - - start_seq_num = sta->tid_seq[tid] >> 4; - - ret = drv_ampdu_action(local, sdata, IEEE80211_AMPDU_TX_START, - &sta->sta, tid, &start_seq_num, 0); - if (ret) { -#ifdef CONFIG_MAC80211_HT_DEBUG - printk(KERN_DEBUG "BA request denied - HW unavailable for" - " tid %d\n", tid); -#endif - spin_lock_bh(&sta->lock); - ieee80211_agg_splice_packets(local, tid_tx, tid); - ieee80211_assign_tid_tx(sta, tid, NULL); - ieee80211_agg_splice_finish(local, tid); - spin_unlock_bh(&sta->lock); - - kfree_rcu(tid_tx, rcu_head); - return; - } - - /* activate the timer for the recipient's addBA response */ - mod_timer(&tid_tx->addba_resp_timer, jiffies + ADDBA_RESP_INTERVAL); -#ifdef CONFIG_MAC80211_HT_DEBUG - printk(KERN_DEBUG "activated addBA response timer on tid %d\n", tid); -#endif - - spin_lock_bh(&sta->lock); - sta->ampdu_mlme.last_addba_req_time[tid] = jiffies; - sta->ampdu_mlme.addba_req_num[tid]++; - spin_unlock_bh(&sta->lock); - - /* send AddBA request */ - ieee80211_send_addba_request(sdata, sta->sta.addr, tid, - tid_tx->dialog_token, start_seq_num, - local->hw.max_tx_aggregation_subframes, - tid_tx->timeout); -} - -/* - * After accepting the AddBA Response we activated a timer, - * resetting it after each frame that we send. - */ -static void sta_tx_agg_session_timer_expired(unsigned long data) -{ - /* not an elegant detour, but there is no choice as the timer passes - * only one argument, and various sta_info are needed here, so init - * flow in sta_info_create gives the TID as data, while the timer_to_id - * array gives the sta through container_of */ - u8 *ptid = (u8 *)data; - u8 *timer_to_id = ptid - *ptid; - struct sta_info *sta = container_of(timer_to_id, struct sta_info, - timer_to_tid[0]); - -#ifdef CONFIG_MAC80211_HT_DEBUG - printk(KERN_DEBUG "tx session timer expired on tid %d\n", (u16)*ptid); -#endif - - ieee80211_stop_tx_ba_session(&sta->sta, *ptid); -} - -int ieee80211_start_tx_ba_session(struct ieee80211_sta *pubsta, u16 tid, - u16 timeout) -{ - struct sta_info *sta = container_of(pubsta, struct sta_info, sta); - struct ieee80211_sub_if_data *sdata = sta->sdata; - struct ieee80211_local *local = sdata->local; - struct tid_ampdu_tx *tid_tx; - int ret = 0; - - trace_api_start_tx_ba_session(pubsta, tid); - - if (WARN_ON(!local->ops->ampdu_action)) - return -EINVAL; - - if ((tid >= STA_TID_NUM) || - !(local->hw.flags & IEEE80211_HW_AMPDU_AGGREGATION) || - (local->hw.flags & IEEE80211_HW_TX_AMPDU_SETUP_IN_HW)) - return -EINVAL; - -#ifdef CONFIG_MAC80211_HT_DEBUG - printk(KERN_DEBUG "Open BA session requested for %pM tid %u\n", - pubsta->addr, tid); -#endif /* CONFIG_MAC80211_HT_DEBUG */ - - if (sdata->vif.type != NL80211_IFTYPE_STATION && - sdata->vif.type != NL80211_IFTYPE_MESH_POINT && - sdata->vif.type != NL80211_IFTYPE_AP_VLAN && - sdata->vif.type != NL80211_IFTYPE_AP && - sdata->vif.type != NL80211_IFTYPE_ADHOC) - return -EINVAL; - - if (test_sta_flag(sta, WLAN_STA_BLOCK_BA)) { -#ifdef CONFIG_MAC80211_HT_DEBUG - printk(KERN_DEBUG "BA sessions blocked. " - "Denying BA session request\n"); -#endif - return -EINVAL; - } - - /* - * 802.11n-2009 11.5.1.1: If the initiating STA is an HT STA, is a - * member of an IBSS, and has no other existing Block Ack agreement - * with the recipient STA, then the initiating STA shall transmit a - * Probe Request frame to the recipient STA and shall not transmit an - * ADDBA Request frame unless it receives a Probe Response frame - * from the recipient within dot11ADDBAFailureTimeout. - * - * The probe request mechanism for ADDBA is currently not implemented, - * but we only build up Block Ack session with HT STAs. This information - * is set when we receive a bss info from a probe response or a beacon. - */ - if (sta->sdata->vif.type == NL80211_IFTYPE_ADHOC && - !sta->sta.ht_cap.ht_supported) { -#ifdef CONFIG_MAC80211_HT_DEBUG - printk(KERN_DEBUG "BA request denied - IBSS STA %pM" - "does not advertise HT support\n", pubsta->addr); -#endif /* CONFIG_MAC80211_HT_DEBUG */ - return -EINVAL; - } - - spin_lock_bh(&sta->lock); - - /* we have tried too many times, receiver does not want A-MPDU */ - if (sta->ampdu_mlme.addba_req_num[tid] > HT_AGG_MAX_RETRIES) { - ret = -EBUSY; - goto err_unlock_sta; - } - - /* - * if we have tried more than HT_AGG_BURST_RETRIES times we - * will spread our requests in time to avoid stalling connection - * for too long - */ - if (sta->ampdu_mlme.addba_req_num[tid] > HT_AGG_BURST_RETRIES && - time_before(jiffies, sta->ampdu_mlme.last_addba_req_time[tid] + - HT_AGG_RETRIES_PERIOD)) { -#ifdef CONFIG_MAC80211_HT_DEBUG - printk(KERN_DEBUG "BA request denied - " - "waiting a grace period after %d failed requests " - "on tid %u\n", - sta->ampdu_mlme.addba_req_num[tid], tid); -#endif /* CONFIG_MAC80211_HT_DEBUG */ - ret = -EBUSY; - goto err_unlock_sta; - } - - tid_tx = rcu_dereference_protected_tid_tx(sta, tid); - /* check if the TID is not in aggregation flow already */ - if (tid_tx || sta->ampdu_mlme.tid_start_tx[tid]) { -#ifdef CONFIG_MAC80211_HT_DEBUG - printk(KERN_DEBUG "BA request denied - session is not " - "idle on tid %u\n", tid); -#endif /* CONFIG_MAC80211_HT_DEBUG */ - ret = -EAGAIN; - goto err_unlock_sta; - } - - /* prepare A-MPDU MLME for Tx aggregation */ - tid_tx = kzalloc(sizeof(struct tid_ampdu_tx), GFP_ATOMIC); - if (!tid_tx) { - ret = -ENOMEM; - goto err_unlock_sta; - } - - skb_queue_head_init(&tid_tx->pending); - __set_bit(HT_AGG_STATE_WANT_START, &tid_tx->state); - - tid_tx->timeout = timeout; - - /* response timer */ - tid_tx->addba_resp_timer.function = sta_addba_resp_timer_expired; - tid_tx->addba_resp_timer.data = (unsigned long)&sta->timer_to_tid[tid]; - init_timer(&tid_tx->addba_resp_timer); - - /* tx timer */ - tid_tx->session_timer.function = sta_tx_agg_session_timer_expired; - tid_tx->session_timer.data = (unsigned long)&sta->timer_to_tid[tid]; - init_timer(&tid_tx->session_timer); - - /* assign a dialog token */ - sta->ampdu_mlme.dialog_token_allocator++; - tid_tx->dialog_token = sta->ampdu_mlme.dialog_token_allocator; - - /* - * Finally, assign it to the start array; the work item will - * collect it and move it to the normal array. - */ - sta->ampdu_mlme.tid_start_tx[tid] = tid_tx; - - ieee80211_queue_work(&local->hw, &sta->ampdu_mlme.work); - - /* this flow continues off the work */ - err_unlock_sta: - spin_unlock_bh(&sta->lock); - return ret; -} -EXPORT_SYMBOL(ieee80211_start_tx_ba_session); - -static void ieee80211_agg_tx_operational(struct ieee80211_local *local, - struct sta_info *sta, u16 tid) -{ - struct tid_ampdu_tx *tid_tx; - - lockdep_assert_held(&sta->ampdu_mlme.mtx); - - tid_tx = rcu_dereference_protected_tid_tx(sta, tid); - -#ifdef CONFIG_MAC80211_HT_DEBUG - printk(KERN_DEBUG "Aggregation is on for tid %d\n", tid); -#endif - - drv_ampdu_action(local, sta->sdata, - IEEE80211_AMPDU_TX_OPERATIONAL, - &sta->sta, tid, NULL, tid_tx->buf_size); - - /* - * synchronize with TX path, while splicing the TX path - * should block so it won't put more packets onto pending. - */ - spin_lock_bh(&sta->lock); - - ieee80211_agg_splice_packets(local, tid_tx, tid); - /* - * Now mark as operational. This will be visible - * in the TX path, and lets it go lock-free in - * the common case. - */ - set_bit(HT_AGG_STATE_OPERATIONAL, &tid_tx->state); - ieee80211_agg_splice_finish(local, tid); - - spin_unlock_bh(&sta->lock); -} - -void ieee80211_start_tx_ba_cb(struct ieee80211_vif *vif, u8 *ra, u16 tid) -{ - struct ieee80211_sub_if_data *sdata = vif_to_sdata(vif); - struct ieee80211_local *local = sdata->local; - struct sta_info *sta; - struct tid_ampdu_tx *tid_tx; - - trace_api_start_tx_ba_cb(sdata, ra, tid); - - if (tid >= STA_TID_NUM) { -#ifdef CONFIG_MAC80211_HT_DEBUG - printk(KERN_DEBUG "Bad TID value: tid = %d (>= %d)\n", - tid, STA_TID_NUM); -#endif - return; - } - - mutex_lock(&local->sta_mtx); - sta = sta_info_get_bss(sdata, ra); - if (!sta) { - mutex_unlock(&local->sta_mtx); -#ifdef CONFIG_MAC80211_HT_DEBUG - printk(KERN_DEBUG "Could not find station: %pM\n", ra); -#endif - return; - } - - mutex_lock(&sta->ampdu_mlme.mtx); - tid_tx = rcu_dereference_protected_tid_tx(sta, tid); - - if (WARN_ON(!tid_tx)) { -#ifdef CONFIG_MAC80211_HT_DEBUG - printk(KERN_DEBUG "addBA was not requested!\n"); -#endif - goto unlock; - } - - if (WARN_ON(test_and_set_bit(HT_AGG_STATE_DRV_READY, &tid_tx->state))) - goto unlock; - - if (test_bit(HT_AGG_STATE_RESPONSE_RECEIVED, &tid_tx->state)) - ieee80211_agg_tx_operational(local, sta, tid); - - unlock: - mutex_unlock(&sta->ampdu_mlme.mtx); - mutex_unlock(&local->sta_mtx); -} - -void ieee80211_start_tx_ba_cb_irqsafe(struct ieee80211_vif *vif, - const u8 *ra, u16 tid) -{ - struct ieee80211_sub_if_data *sdata = vif_to_sdata(vif); - struct ieee80211_local *local = sdata->local; - struct ieee80211_ra_tid *ra_tid; - struct sk_buff *skb = dev_alloc_skb(0); - - if (unlikely(!skb)) - return; - - ra_tid = (struct ieee80211_ra_tid *) &skb->cb; - memcpy(&ra_tid->ra, ra, ETH_ALEN); - ra_tid->tid = tid; - - skb->pkt_type = IEEE80211_SDATA_QUEUE_AGG_START; - skb_queue_tail(&sdata->skb_queue, skb); - ieee80211_queue_work(&local->hw, &sdata->work); -} -EXPORT_SYMBOL(ieee80211_start_tx_ba_cb_irqsafe); - -int __ieee80211_stop_tx_ba_session(struct sta_info *sta, u16 tid, - enum ieee80211_back_parties initiator, - bool tx) -{ - int ret; - - mutex_lock(&sta->ampdu_mlme.mtx); - - ret = ___ieee80211_stop_tx_ba_session(sta, tid, initiator, tx); - - mutex_unlock(&sta->ampdu_mlme.mtx); - - return ret; -} - -int ieee80211_stop_tx_ba_session(struct ieee80211_sta *pubsta, u16 tid) -{ - struct sta_info *sta = container_of(pubsta, struct sta_info, sta); - struct ieee80211_sub_if_data *sdata = sta->sdata; - struct ieee80211_local *local = sdata->local; - struct tid_ampdu_tx *tid_tx; - int ret = 0; - - trace_api_stop_tx_ba_session(pubsta, tid); - - if (!local->ops->ampdu_action) - return -EINVAL; - - if (tid >= STA_TID_NUM) - return -EINVAL; - - spin_lock_bh(&sta->lock); - tid_tx = rcu_dereference_protected_tid_tx(sta, tid); - - if (!tid_tx) { - ret = -ENOENT; - goto unlock; - } - - if (test_bit(HT_AGG_STATE_STOPPING, &tid_tx->state)) { - /* already in progress stopping it */ - ret = 0; - goto unlock; - } - - set_bit(HT_AGG_STATE_WANT_STOP, &tid_tx->state); - ieee80211_queue_work(&local->hw, &sta->ampdu_mlme.work); - - unlock: - spin_unlock_bh(&sta->lock); - return ret; -} -EXPORT_SYMBOL(ieee80211_stop_tx_ba_session); - -void ieee80211_stop_tx_ba_cb(struct ieee80211_vif *vif, u8 *ra, u8 tid) -{ - struct ieee80211_sub_if_data *sdata = vif_to_sdata(vif); - struct ieee80211_local *local = sdata->local; - struct sta_info *sta; - struct tid_ampdu_tx *tid_tx; - - trace_api_stop_tx_ba_cb(sdata, ra, tid); - - if (tid >= STA_TID_NUM) { -#ifdef CONFIG_MAC80211_HT_DEBUG - printk(KERN_DEBUG "Bad TID value: tid = %d (>= %d)\n", - tid, STA_TID_NUM); -#endif - return; - } - -#ifdef CONFIG_MAC80211_HT_DEBUG - printk(KERN_DEBUG "Stopping Tx BA session for %pM tid %d\n", - ra, tid); -#endif /* CONFIG_MAC80211_HT_DEBUG */ - - mutex_lock(&local->sta_mtx); - - sta = sta_info_get_bss(sdata, ra); - if (!sta) { -#ifdef CONFIG_MAC80211_HT_DEBUG - printk(KERN_DEBUG "Could not find station: %pM\n", ra); -#endif - goto unlock; - } - - mutex_lock(&sta->ampdu_mlme.mtx); - spin_lock_bh(&sta->lock); - tid_tx = rcu_dereference_protected_tid_tx(sta, tid); - - if (!tid_tx || !test_bit(HT_AGG_STATE_STOPPING, &tid_tx->state)) { -#ifdef CONFIG_MAC80211_HT_DEBUG - printk(KERN_DEBUG "unexpected callback to A-MPDU stop\n"); -#endif - goto unlock_sta; - } - - if (tid_tx->stop_initiator == WLAN_BACK_INITIATOR && tid_tx->tx_stop) - ieee80211_send_delba(sta->sdata, ra, tid, - WLAN_BACK_INITIATOR, WLAN_REASON_QSTA_NOT_USE); - - /* - * When we get here, the TX path will not be lockless any more wrt. - * aggregation, since the OPERATIONAL bit has long been cleared. - * Thus it will block on getting the lock, if it occurs. So if we - * stop the queue now, we will not get any more packets, and any - * that might be being processed will wait for us here, thereby - * guaranteeing that no packets go to the tid_tx pending queue any - * more. - */ - - ieee80211_agg_splice_packets(local, tid_tx, tid); - - /* future packets must not find the tid_tx struct any more */ - ieee80211_assign_tid_tx(sta, tid, NULL); - - ieee80211_agg_splice_finish(local, tid); - - kfree_rcu(tid_tx, rcu_head); - - unlock_sta: - spin_unlock_bh(&sta->lock); - mutex_unlock(&sta->ampdu_mlme.mtx); - unlock: - mutex_unlock(&local->sta_mtx); -} - -void ieee80211_stop_tx_ba_cb_irqsafe(struct ieee80211_vif *vif, - const u8 *ra, u16 tid) -{ - struct ieee80211_sub_if_data *sdata = vif_to_sdata(vif); - struct ieee80211_local *local = sdata->local; - struct ieee80211_ra_tid *ra_tid; - struct sk_buff *skb = dev_alloc_skb(0); - - if (unlikely(!skb)) - return; - - ra_tid = (struct ieee80211_ra_tid *) &skb->cb; - memcpy(&ra_tid->ra, ra, ETH_ALEN); - ra_tid->tid = tid; - - skb->pkt_type = IEEE80211_SDATA_QUEUE_AGG_STOP; - skb_queue_tail(&sdata->skb_queue, skb); - ieee80211_queue_work(&local->hw, &sdata->work); -} -EXPORT_SYMBOL(ieee80211_stop_tx_ba_cb_irqsafe); - - -void ieee80211_process_addba_resp(struct ieee80211_local *local, - struct sta_info *sta, - struct ieee80211_mgmt *mgmt, - size_t len) -{ - struct tid_ampdu_tx *tid_tx; - u16 capab, tid; - u8 buf_size; - - capab = le16_to_cpu(mgmt->u.action.u.addba_resp.capab); - tid = (capab & IEEE80211_ADDBA_PARAM_TID_MASK) >> 2; - buf_size = (capab & IEEE80211_ADDBA_PARAM_BUF_SIZE_MASK) >> 6; - - mutex_lock(&sta->ampdu_mlme.mtx); - - tid_tx = rcu_dereference_protected_tid_tx(sta, tid); - if (!tid_tx) - goto out; - - if (mgmt->u.action.u.addba_resp.dialog_token != tid_tx->dialog_token) { -#ifdef CONFIG_MAC80211_HT_DEBUG - printk(KERN_DEBUG "wrong addBA response token, tid %d\n", tid); -#endif - goto out; - } - - del_timer_sync(&tid_tx->addba_resp_timer); - -#ifdef CONFIG_MAC80211_HT_DEBUG - printk(KERN_DEBUG "switched off addBA timer for tid %d\n", tid); -#endif - - /* - * addba_resp_timer may have fired before we got here, and - * caused WANT_STOP to be set. If the stop then was already - * processed further, STOPPING might be set. - */ - if (test_bit(HT_AGG_STATE_WANT_STOP, &tid_tx->state) || - test_bit(HT_AGG_STATE_STOPPING, &tid_tx->state)) { -#ifdef CONFIG_MAC80211_HT_DEBUG - printk(KERN_DEBUG - "got addBA resp for tid %d but we already gave up\n", - tid); -#endif - goto out; - } - - /* - * IEEE 802.11-2007 7.3.1.14: - * In an ADDBA Response frame, when the Status Code field - * is set to 0, the Buffer Size subfield is set to a value - * of at least 1. - */ - if (le16_to_cpu(mgmt->u.action.u.addba_resp.status) - == WLAN_STATUS_SUCCESS && buf_size) { - if (test_and_set_bit(HT_AGG_STATE_RESPONSE_RECEIVED, - &tid_tx->state)) { - /* ignore duplicate response */ - goto out; - } - - tid_tx->buf_size = buf_size; - - if (test_bit(HT_AGG_STATE_DRV_READY, &tid_tx->state)) - ieee80211_agg_tx_operational(local, sta, tid); - - sta->ampdu_mlme.addba_req_num[tid] = 0; - - if (tid_tx->timeout) - mod_timer(&tid_tx->session_timer, - TU_TO_EXP_TIME(tid_tx->timeout)); - - } else { - ___ieee80211_stop_tx_ba_session(sta, tid, WLAN_BACK_INITIATOR, - true); - } - - out: - mutex_unlock(&sta->ampdu_mlme.mtx); -} diff --git a/openairITS/mac/DOT11/net/mac80211/cfg.c b/openairITS/mac/DOT11/net/mac80211/cfg.c deleted file mode 100644 index f66c78f703..0000000000 --- a/openairITS/mac/DOT11/net/mac80211/cfg.c +++ /dev/null @@ -1,2815 +0,0 @@ -/* - * mac80211 configuration hooks for cfg80211 - * - * Copyright 2006-2010 Johannes Berg - * - * This file is GPLv2 as found in COPYING. - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include "ieee80211_i.h" -#include "driver-ops.h" -#include "cfg.h" -#include "rate.h" -#include "mesh.h" - -static struct net_device *ieee80211_add_iface(struct wiphy *wiphy, char *name, - enum nl80211_iftype type, - u32 *flags, - struct vif_params *params) -{ - struct ieee80211_local *local = wiphy_priv(wiphy); - struct net_device *dev; - struct ieee80211_sub_if_data *sdata; - int err; - - err = ieee80211_if_add(local, name, &dev, type, params); - if (err) - return ERR_PTR(err); - - if (type == NL80211_IFTYPE_MONITOR && flags) { - sdata = IEEE80211_DEV_TO_SUB_IF(dev); - sdata->u.mntr_flags = *flags; - } - - return dev; -} - -static int ieee80211_del_iface(struct wiphy *wiphy, struct net_device *dev) -{ - ieee80211_if_remove(IEEE80211_DEV_TO_SUB_IF(dev)); - - return 0; -} - -static int ieee80211_change_iface(struct wiphy *wiphy, - struct net_device *dev, - enum nl80211_iftype type, u32 *flags, - struct vif_params *params) -{ - struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); - int ret; - - ret = ieee80211_if_change_type(sdata, type); - if (ret) - return ret; - - if (type == NL80211_IFTYPE_AP_VLAN && - params && params->use_4addr == 0) - RCU_INIT_POINTER(sdata->u.vlan.sta, NULL); - else if (type == NL80211_IFTYPE_STATION && - params && params->use_4addr >= 0) - sdata->u.mgd.use_4addr = params->use_4addr; - - if (sdata->vif.type == NL80211_IFTYPE_MONITOR && flags) { - struct ieee80211_local *local = sdata->local; - - if (ieee80211_sdata_running(sdata)) { - /* - * Prohibit MONITOR_FLAG_COOK_FRAMES to be - * changed while the interface is up. - * Else we would need to add a lot of cruft - * to update everything: - * cooked_mntrs, monitor and all fif_* counters - * reconfigure hardware - */ - if ((*flags & MONITOR_FLAG_COOK_FRAMES) != - (sdata->u.mntr_flags & MONITOR_FLAG_COOK_FRAMES)) - return -EBUSY; - - ieee80211_adjust_monitor_flags(sdata, -1); - sdata->u.mntr_flags = *flags; - ieee80211_adjust_monitor_flags(sdata, 1); - - ieee80211_configure_filter(local); - } else { - /* - * Because the interface is down, ieee80211_do_stop - * and ieee80211_do_open take care of "everything" - * mentioned in the comment above. - */ - sdata->u.mntr_flags = *flags; - } - } - - return 0; -} - -static int ieee80211_set_noack_map(struct wiphy *wiphy, - struct net_device *dev, - u16 noack_map) -{ - struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); - - sdata->noack_map = noack_map; - return 0; -} - -static int ieee80211_add_key(struct wiphy *wiphy, struct net_device *dev, - u8 key_idx, bool pairwise, const u8 *mac_addr, - struct key_params *params) -{ - struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); - struct sta_info *sta = NULL; - struct ieee80211_key *key; - int err; - - if (!ieee80211_sdata_running(sdata)) - return -ENETDOWN; - - /* reject WEP and TKIP keys if WEP failed to initialize */ - switch (params->cipher) { - case WLAN_CIPHER_SUITE_WEP40: - case WLAN_CIPHER_SUITE_TKIP: - case WLAN_CIPHER_SUITE_WEP104: - if (IS_ERR(sdata->local->wep_tx_tfm)) - return -EINVAL; - break; - default: - break; - } - - key = ieee80211_key_alloc(params->cipher, key_idx, params->key_len, - params->key, params->seq_len, params->seq); - if (IS_ERR(key)) - return PTR_ERR(key); - - if (pairwise) - key->conf.flags |= IEEE80211_KEY_FLAG_PAIRWISE; - - mutex_lock(&sdata->local->sta_mtx); - - if (mac_addr) { - if (ieee80211_vif_is_mesh(&sdata->vif)) - sta = sta_info_get(sdata, mac_addr); - else - sta = sta_info_get_bss(sdata, mac_addr); - if (!sta) { - ieee80211_key_free(sdata->local, key); - err = -ENOENT; - goto out_unlock; - } - } - - err = ieee80211_key_link(key, sdata, sta); - if (err) - ieee80211_key_free(sdata->local, key); - - out_unlock: - mutex_unlock(&sdata->local->sta_mtx); - - return err; -} - -static int ieee80211_del_key(struct wiphy *wiphy, struct net_device *dev, - u8 key_idx, bool pairwise, const u8 *mac_addr) -{ - struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); - struct ieee80211_local *local = sdata->local; - struct sta_info *sta; - struct ieee80211_key *key = NULL; - int ret; - - mutex_lock(&local->sta_mtx); - mutex_lock(&local->key_mtx); - - if (mac_addr) { - ret = -ENOENT; - - sta = sta_info_get_bss(sdata, mac_addr); - if (!sta) - goto out_unlock; - - if (pairwise) - key = key_mtx_dereference(local, sta->ptk); - else - key = key_mtx_dereference(local, sta->gtk[key_idx]); - } else - key = key_mtx_dereference(local, sdata->keys[key_idx]); - - if (!key) { - ret = -ENOENT; - goto out_unlock; - } - - __ieee80211_key_free(key); - - ret = 0; - out_unlock: - mutex_unlock(&local->key_mtx); - mutex_unlock(&local->sta_mtx); - - return ret; -} - -static int ieee80211_get_key(struct wiphy *wiphy, struct net_device *dev, - u8 key_idx, bool pairwise, const u8 *mac_addr, - void *cookie, - void (*callback)(void *cookie, - struct key_params *params)) -{ - struct ieee80211_sub_if_data *sdata; - struct sta_info *sta = NULL; - u8 seq[6] = {0}; - struct key_params params; - struct ieee80211_key *key = NULL; - u64 pn64; - u32 iv32; - u16 iv16; - int err = -ENOENT; - - sdata = IEEE80211_DEV_TO_SUB_IF(dev); - - rcu_read_lock(); - - if (mac_addr) { - sta = sta_info_get_bss(sdata, mac_addr); - if (!sta) - goto out; - - if (pairwise) - key = rcu_dereference(sta->ptk); - else if (key_idx < NUM_DEFAULT_KEYS) - key = rcu_dereference(sta->gtk[key_idx]); - } else - key = rcu_dereference(sdata->keys[key_idx]); - - if (!key) - goto out; - - memset(¶ms, 0, sizeof(params)); - - params.cipher = key->conf.cipher; - - switch (key->conf.cipher) { - case WLAN_CIPHER_SUITE_TKIP: - iv32 = key->u.tkip.tx.iv32; - iv16 = key->u.tkip.tx.iv16; - - if (key->flags & KEY_FLAG_UPLOADED_TO_HARDWARE) - drv_get_tkip_seq(sdata->local, - key->conf.hw_key_idx, - &iv32, &iv16); - - seq[0] = iv16 & 0xff; - seq[1] = (iv16 >> 8) & 0xff; - seq[2] = iv32 & 0xff; - seq[3] = (iv32 >> 8) & 0xff; - seq[4] = (iv32 >> 16) & 0xff; - seq[5] = (iv32 >> 24) & 0xff; - params.seq = seq; - params.seq_len = 6; - break; - case WLAN_CIPHER_SUITE_CCMP: - pn64 = atomic64_read(&key->u.ccmp.tx_pn); - seq[0] = pn64; - seq[1] = pn64 >> 8; - seq[2] = pn64 >> 16; - seq[3] = pn64 >> 24; - seq[4] = pn64 >> 32; - seq[5] = pn64 >> 40; - params.seq = seq; - params.seq_len = 6; - break; - case WLAN_CIPHER_SUITE_AES_CMAC: - pn64 = atomic64_read(&key->u.aes_cmac.tx_pn); - seq[0] = pn64; - seq[1] = pn64 >> 8; - seq[2] = pn64 >> 16; - seq[3] = pn64 >> 24; - seq[4] = pn64 >> 32; - seq[5] = pn64 >> 40; - params.seq = seq; - params.seq_len = 6; - break; - } - - params.key = key->conf.key; - params.key_len = key->conf.keylen; - - callback(cookie, ¶ms); - err = 0; - - out: - rcu_read_unlock(); - return err; -} - -static int ieee80211_config_default_key(struct wiphy *wiphy, - struct net_device *dev, - u8 key_idx, bool uni, - bool multi) -{ - struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); - - ieee80211_set_default_key(sdata, key_idx, uni, multi); - - return 0; -} - -static int ieee80211_config_default_mgmt_key(struct wiphy *wiphy, - struct net_device *dev, - u8 key_idx) -{ - struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); - - ieee80211_set_default_mgmt_key(sdata, key_idx); - - return 0; -} - -static void rate_idx_to_bitrate(struct rate_info *rate, struct sta_info *sta, int idx) -{ - if (!(rate->flags & RATE_INFO_FLAGS_MCS)) { - struct ieee80211_supported_band *sband; - sband = sta->local->hw.wiphy->bands[ - sta->local->hw.conf.channel->band]; - rate->legacy = sband->bitrates[idx].bitrate; - } else - rate->mcs = idx; -} - -void sta_set_rate_info_tx(struct sta_info *sta, - const struct ieee80211_tx_rate *rate, - struct rate_info *rinfo) -{ - rinfo->flags = 0; - if (rate->flags & IEEE80211_TX_RC_MCS) - rinfo->flags |= RATE_INFO_FLAGS_MCS; - if (rate->flags & IEEE80211_TX_RC_40_MHZ_WIDTH) - rinfo->flags |= RATE_INFO_FLAGS_40_MHZ_WIDTH; - if (rate->flags & IEEE80211_TX_RC_SHORT_GI) - rinfo->flags |= RATE_INFO_FLAGS_SHORT_GI; - rate_idx_to_bitrate(rinfo, sta, rate->idx); -} - -static void sta_set_sinfo(struct sta_info *sta, struct station_info *sinfo) -{ - struct ieee80211_sub_if_data *sdata = sta->sdata; - struct timespec uptime; - - sinfo->generation = sdata->local->sta_generation; - - sinfo->filled = STATION_INFO_INACTIVE_TIME | - STATION_INFO_RX_BYTES | - STATION_INFO_TX_BYTES | - STATION_INFO_RX_PACKETS | - STATION_INFO_TX_PACKETS | - STATION_INFO_TX_RETRIES | - STATION_INFO_TX_FAILED | - STATION_INFO_TX_BITRATE | - STATION_INFO_RX_BITRATE | - STATION_INFO_RX_DROP_MISC | - STATION_INFO_BSS_PARAM | - STATION_INFO_CONNECTED_TIME | - STATION_INFO_STA_FLAGS | - STATION_INFO_BEACON_LOSS_COUNT; - - do_posix_clock_monotonic_gettime(&uptime); - sinfo->connected_time = uptime.tv_sec - sta->last_connected; - - sinfo->inactive_time = jiffies_to_msecs(jiffies - sta->last_rx); - sinfo->rx_bytes = sta->rx_bytes; - sinfo->tx_bytes = sta->tx_bytes; - sinfo->rx_packets = sta->rx_packets; - sinfo->tx_packets = sta->tx_packets; - sinfo->tx_retries = sta->tx_retry_count; - sinfo->tx_failed = sta->tx_retry_failed; - sinfo->rx_dropped_misc = sta->rx_dropped; - sinfo->beacon_loss_count = sta->beacon_loss_count; - - if ((sta->local->hw.flags & IEEE80211_HW_SIGNAL_DBM) || - (sta->local->hw.flags & IEEE80211_HW_SIGNAL_UNSPEC)) { - sinfo->filled |= STATION_INFO_SIGNAL | STATION_INFO_SIGNAL_AVG; - sinfo->signal = (s8)sta->last_signal; - sinfo->signal_avg = (s8) -ewma_read(&sta->avg_signal); - } - - sta_set_rate_info_tx(sta, &sta->last_tx_rate, &sinfo->txrate); - - sinfo->rxrate.flags = 0; - if (sta->last_rx_rate_flag & RX_FLAG_HT) - sinfo->rxrate.flags |= RATE_INFO_FLAGS_MCS; - if (sta->last_rx_rate_flag & RX_FLAG_40MHZ) - sinfo->rxrate.flags |= RATE_INFO_FLAGS_40_MHZ_WIDTH; - if (sta->last_rx_rate_flag & RX_FLAG_SHORT_GI) - sinfo->rxrate.flags |= RATE_INFO_FLAGS_SHORT_GI; - rate_idx_to_bitrate(&sinfo->rxrate, sta, sta->last_rx_rate_idx); - - if (ieee80211_vif_is_mesh(&sdata->vif)) { -#ifdef CONFIG_MAC80211_MESH - sinfo->filled |= STATION_INFO_LLID | - STATION_INFO_PLID | - STATION_INFO_PLINK_STATE; - - sinfo->llid = le16_to_cpu(sta->llid); - sinfo->plid = le16_to_cpu(sta->plid); - sinfo->plink_state = sta->plink_state; -#endif - } - - sinfo->bss_param.flags = 0; - if (sdata->vif.bss_conf.use_cts_prot) - sinfo->bss_param.flags |= BSS_PARAM_FLAGS_CTS_PROT; - if (sdata->vif.bss_conf.use_short_preamble) - sinfo->bss_param.flags |= BSS_PARAM_FLAGS_SHORT_PREAMBLE; - if (sdata->vif.bss_conf.use_short_slot) - sinfo->bss_param.flags |= BSS_PARAM_FLAGS_SHORT_SLOT_TIME; - sinfo->bss_param.dtim_period = sdata->local->hw.conf.ps_dtim_period; - sinfo->bss_param.beacon_interval = sdata->vif.bss_conf.beacon_int; - - sinfo->sta_flags.set = 0; - sinfo->sta_flags.mask = BIT(NL80211_STA_FLAG_AUTHORIZED) | - BIT(NL80211_STA_FLAG_SHORT_PREAMBLE) | - BIT(NL80211_STA_FLAG_WME) | - BIT(NL80211_STA_FLAG_MFP) | - BIT(NL80211_STA_FLAG_AUTHENTICATED) | - BIT(NL80211_STA_FLAG_TDLS_PEER); - if (test_sta_flag(sta, WLAN_STA_AUTHORIZED)) - sinfo->sta_flags.set |= BIT(NL80211_STA_FLAG_AUTHORIZED); - if (test_sta_flag(sta, WLAN_STA_SHORT_PREAMBLE)) - sinfo->sta_flags.set |= BIT(NL80211_STA_FLAG_SHORT_PREAMBLE); - if (test_sta_flag(sta, WLAN_STA_WME)) - sinfo->sta_flags.set |= BIT(NL80211_STA_FLAG_WME); - if (test_sta_flag(sta, WLAN_STA_MFP)) - sinfo->sta_flags.set |= BIT(NL80211_STA_FLAG_MFP); - if (test_sta_flag(sta, WLAN_STA_AUTH)) - sinfo->sta_flags.set |= BIT(NL80211_STA_FLAG_AUTHENTICATED); - if (test_sta_flag(sta, WLAN_STA_TDLS_PEER)) - sinfo->sta_flags.set |= BIT(NL80211_STA_FLAG_TDLS_PEER); -} - - -static int ieee80211_dump_station(struct wiphy *wiphy, struct net_device *dev, - int idx, u8 *mac, struct station_info *sinfo) -{ - struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); - struct sta_info *sta; - int ret = -ENOENT; - - rcu_read_lock(); - - sta = sta_info_get_by_idx(sdata, idx); - if (sta) { - ret = 0; - memcpy(mac, sta->sta.addr, ETH_ALEN); - sta_set_sinfo(sta, sinfo); - } - - rcu_read_unlock(); - - return ret; -} - -static int ieee80211_dump_survey(struct wiphy *wiphy, struct net_device *dev, - int idx, struct survey_info *survey) -{ - struct ieee80211_local *local = wdev_priv(dev->ieee80211_ptr); - - return drv_get_survey(local, idx, survey); -} - -static int ieee80211_get_station(struct wiphy *wiphy, struct net_device *dev, - u8 *mac, struct station_info *sinfo) -{ - struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); - struct sta_info *sta; - int ret = -ENOENT; - - rcu_read_lock(); - - sta = sta_info_get_bss(sdata, mac); - if (sta) { - ret = 0; - sta_set_sinfo(sta, sinfo); - } - - rcu_read_unlock(); - - return ret; -} - -static int ieee80211_set_probe_resp(struct ieee80211_sub_if_data *sdata, - const u8 *resp, size_t resp_len) -{ - struct sk_buff *new, *old; - - if (!resp || !resp_len) - return 1; - - old = rtnl_dereference(sdata->u.ap.probe_resp); - - new = dev_alloc_skb(resp_len); - if (!new) - return -ENOMEM; - - memcpy(skb_put(new, resp_len), resp, resp_len); - - rcu_assign_pointer(sdata->u.ap.probe_resp, new); - if (old) { - /* TODO: use call_rcu() */ - synchronize_rcu(); - dev_kfree_skb(old); - } - - return 0; -} - -static int ieee80211_assign_beacon(struct ieee80211_sub_if_data *sdata, - struct cfg80211_beacon_data *params) -{ - struct beacon_data *new, *old; - int new_head_len, new_tail_len; - int size, err; - u32 changed = BSS_CHANGED_BEACON; - - old = rtnl_dereference(sdata->u.ap.beacon); - - /* Need to have a beacon head if we don't have one yet */ - if (!params->head && !old) - return -EINVAL; - - /* new or old head? */ - if (params->head) - new_head_len = params->head_len; - else - new_head_len = old->head_len; - - /* new or old tail? */ - if (params->tail || !old) - /* params->tail_len will be zero for !params->tail */ - new_tail_len = params->tail_len; - else - new_tail_len = old->tail_len; - - size = sizeof(*new) + new_head_len + new_tail_len; - - new = kzalloc(size, GFP_KERNEL); - if (!new) - return -ENOMEM; - - /* start filling the new info now */ - - /* - * pointers go into the block we allocated, - * memory is | beacon_data | head | tail | - */ - new->head = ((u8 *) new) + sizeof(*new); - new->tail = new->head + new_head_len; - new->head_len = new_head_len; - new->tail_len = new_tail_len; - - /* copy in head */ - if (params->head) - memcpy(new->head, params->head, new_head_len); - else - memcpy(new->head, old->head, new_head_len); - - /* copy in optional tail */ - if (params->tail) - memcpy(new->tail, params->tail, new_tail_len); - else - if (old) - memcpy(new->tail, old->tail, new_tail_len); - - err = ieee80211_set_probe_resp(sdata, params->probe_resp, - params->probe_resp_len); - if (err < 0) - return err; - if (err == 0) - changed |= BSS_CHANGED_AP_PROBE_RESP; - - rcu_assign_pointer(sdata->u.ap.beacon, new); - - if (old) - kfree_rcu(old, rcu_head); - - return changed; -} - -static int ieee80211_start_ap(struct wiphy *wiphy, struct net_device *dev, - struct cfg80211_ap_settings *params) -{ - struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); - struct beacon_data *old; - struct ieee80211_sub_if_data *vlan; - u32 changed = BSS_CHANGED_BEACON_INT | - BSS_CHANGED_BEACON_ENABLED | - BSS_CHANGED_BEACON | - BSS_CHANGED_SSID; - int err; - - old = rtnl_dereference(sdata->u.ap.beacon); - if (old) - return -EALREADY; - - /* - * Apply control port protocol, this allows us to - * not encrypt dynamic WEP control frames. - */ - sdata->control_port_protocol = params->crypto.control_port_ethertype; - sdata->control_port_no_encrypt = params->crypto.control_port_no_encrypt; - list_for_each_entry(vlan, &sdata->u.ap.vlans, u.vlan.list) { - vlan->control_port_protocol = - params->crypto.control_port_ethertype; - vlan->control_port_no_encrypt = - params->crypto.control_port_no_encrypt; - } - - sdata->vif.bss_conf.beacon_int = params->beacon_interval; - sdata->vif.bss_conf.dtim_period = params->dtim_period; - - sdata->vif.bss_conf.ssid_len = params->ssid_len; - if (params->ssid_len) - memcpy(sdata->vif.bss_conf.ssid, params->ssid, - params->ssid_len); - sdata->vif.bss_conf.hidden_ssid = - (params->hidden_ssid != NL80211_HIDDEN_SSID_NOT_IN_USE); - - err = ieee80211_assign_beacon(sdata, ¶ms->beacon); - if (err < 0) - return err; - changed |= err; - - ieee80211_bss_info_change_notify(sdata, changed); - - return 0; -} - -static int ieee80211_change_beacon(struct wiphy *wiphy, struct net_device *dev, - struct cfg80211_beacon_data *params) -{ - struct ieee80211_sub_if_data *sdata; - struct beacon_data *old; - int err; - - sdata = IEEE80211_DEV_TO_SUB_IF(dev); - - old = rtnl_dereference(sdata->u.ap.beacon); - if (!old) - return -ENOENT; - - err = ieee80211_assign_beacon(sdata, params); - if (err < 0) - return err; - ieee80211_bss_info_change_notify(sdata, err); - return 0; -} - -static int ieee80211_stop_ap(struct wiphy *wiphy, struct net_device *dev) -{ - struct ieee80211_sub_if_data *sdata; - struct beacon_data *old; - - sdata = IEEE80211_DEV_TO_SUB_IF(dev); - - old = rtnl_dereference(sdata->u.ap.beacon); - if (!old) - return -ENOENT; - - RCU_INIT_POINTER(sdata->u.ap.beacon, NULL); - - kfree_rcu(old, rcu_head); - - ieee80211_bss_info_change_notify(sdata, BSS_CHANGED_BEACON_ENABLED); - - return 0; -} - -/* Layer 2 Update frame (802.2 Type 1 LLC XID Update response) */ -struct iapp_layer2_update { - u8 da[ETH_ALEN]; /* broadcast */ - u8 sa[ETH_ALEN]; /* STA addr */ - __be16 len; /* 6 */ - u8 dsap; /* 0 */ - u8 ssap; /* 0 */ - u8 control; - u8 xid_info[3]; -} __packed; - -static void ieee80211_send_layer2_update(struct sta_info *sta) -{ - struct iapp_layer2_update *msg; - struct sk_buff *skb; - - /* Send Level 2 Update Frame to update forwarding tables in layer 2 - * bridge devices */ - - skb = dev_alloc_skb(sizeof(*msg)); - if (!skb) - return; - msg = (struct iapp_layer2_update *)skb_put(skb, sizeof(*msg)); - - /* 802.2 Type 1 Logical Link Control (LLC) Exchange Identifier (XID) - * Update response frame; IEEE Std 802.2-1998, 5.4.1.2.1 */ - - memset(msg->da, 0xff, ETH_ALEN); - memcpy(msg->sa, sta->sta.addr, ETH_ALEN); - msg->len = htons(6); - msg->dsap = 0; - msg->ssap = 0x01; /* NULL LSAP, CR Bit: Response */ - msg->control = 0xaf; /* XID response lsb.1111F101. - * F=0 (no poll command; unsolicited frame) */ - msg->xid_info[0] = 0x81; /* XID format identifier */ - msg->xid_info[1] = 1; /* LLC types/classes: Type 1 LLC */ - msg->xid_info[2] = 0; /* XID sender's receive window size (RW) */ - - skb->dev = sta->sdata->dev; - skb->protocol = eth_type_trans(skb, sta->sdata->dev); - memset(skb->cb, 0, sizeof(skb->cb)); - netif_rx_ni(skb); -} - -/* - * [PLATA] - should probably add a hook to directly go to the state associated if OCBActivated - */ -static int sta_apply_parameters(struct ieee80211_local *local, - struct sta_info *sta, - struct station_parameters *params) -{ - int ret = 0; - u32 rates; - int i, j; - struct ieee80211_supported_band *sband; - struct ieee80211_sub_if_data *sdata = sta->sdata; - u32 mask, set; - - sband = local->hw.wiphy->bands[local->oper_channel->band]; - - mask = params->sta_flags_mask; - set = params->sta_flags_set; - - /* - * In mesh mode, we can clear AUTHENTICATED flag but must - * also make ASSOCIATED follow appropriately for the driver - * API. See also below, after AUTHORIZED changes. - */ - if (mask & BIT(NL80211_STA_FLAG_AUTHENTICATED)) { - /* cfg80211 should not allow this in non-mesh modes */ - if (WARN_ON(!ieee80211_vif_is_mesh(&sdata->vif))) - return -EINVAL; - - if (set & BIT(NL80211_STA_FLAG_AUTHENTICATED) && - !test_sta_flag(sta, WLAN_STA_AUTH)) { - ret = sta_info_move_state(sta, IEEE80211_STA_AUTH); - if (ret) - return ret; - ret = sta_info_move_state(sta, IEEE80211_STA_ASSOC); - if (ret) - return ret; - } - } - - if (mask & BIT(NL80211_STA_FLAG_AUTHORIZED)) { - if (set & BIT(NL80211_STA_FLAG_AUTHORIZED)) - ret = sta_info_move_state(sta, IEEE80211_STA_AUTHORIZED); - else if (test_sta_flag(sta, WLAN_STA_AUTHORIZED)) - ret = sta_info_move_state(sta, IEEE80211_STA_ASSOC); - if (ret) - return ret; - } - - if (mask & BIT(NL80211_STA_FLAG_AUTHENTICATED)) { - /* cfg80211 should not allow this in non-mesh modes */ - if (WARN_ON(!ieee80211_vif_is_mesh(&sdata->vif))) - return -EINVAL; - - if (!(set & BIT(NL80211_STA_FLAG_AUTHENTICATED)) && - test_sta_flag(sta, WLAN_STA_AUTH)) { - ret = sta_info_move_state(sta, IEEE80211_STA_AUTH); - if (ret) - return ret; - ret = sta_info_move_state(sta, IEEE80211_STA_NONE); - if (ret) - return ret; - } - } - - - if (mask & BIT(NL80211_STA_FLAG_SHORT_PREAMBLE)) { - if (set & BIT(NL80211_STA_FLAG_SHORT_PREAMBLE)) - set_sta_flag(sta, WLAN_STA_SHORT_PREAMBLE); - else - clear_sta_flag(sta, WLAN_STA_SHORT_PREAMBLE); - } - - if (mask & BIT(NL80211_STA_FLAG_WME)) { - if (set & BIT(NL80211_STA_FLAG_WME)) { - set_sta_flag(sta, WLAN_STA_WME); - sta->sta.wme = true; - } else { - clear_sta_flag(sta, WLAN_STA_WME); - sta->sta.wme = false; - } - } - - if (mask & BIT(NL80211_STA_FLAG_MFP)) { - if (set & BIT(NL80211_STA_FLAG_MFP)) - set_sta_flag(sta, WLAN_STA_MFP); - else - clear_sta_flag(sta, WLAN_STA_MFP); - } - - if (mask & BIT(NL80211_STA_FLAG_TDLS_PEER)) { - if (set & BIT(NL80211_STA_FLAG_TDLS_PEER)) - set_sta_flag(sta, WLAN_STA_TDLS_PEER); - else - clear_sta_flag(sta, WLAN_STA_TDLS_PEER); - } - - if (params->sta_modify_mask & STATION_PARAM_APPLY_UAPSD) { - sta->sta.uapsd_queues = params->uapsd_queues; - sta->sta.max_sp = params->max_sp; - } - - /* - * cfg80211 validates this (1-2007) and allows setting the AID - * only when creating a new station entry - */ - if (params->aid) - sta->sta.aid = params->aid; - - /* - * FIXME: updating the following information is racy when this - * function is called from ieee80211_change_station(). - * However, all this information should be static so - * maybe we should just reject attemps to change it. - */ - - if (params->listen_interval >= 0) - sta->listen_interval = params->listen_interval; - - if (params->supported_rates) { - rates = 0; - - for (i = 0; i < params->supported_rates_len; i++) { - int rate = (params->supported_rates[i] & 0x7f) * 5; - for (j = 0; j < sband->n_bitrates; j++) { - if (sband->bitrates[j].bitrate == rate) - rates |= BIT(j); - } - } - sta->sta.supp_rates[local->oper_channel->band] = rates; - } - - if (params->ht_capa) - ieee80211_ht_cap_ie_to_sta_ht_cap(sdata, sband, - params->ht_capa, - &sta->sta.ht_cap); - - if (ieee80211_vif_is_mesh(&sdata->vif)) { -#ifdef CONFIG_MAC80211_MESH - if (sdata->u.mesh.security & IEEE80211_MESH_SEC_SECURED) - switch (params->plink_state) { - case NL80211_PLINK_LISTEN: - case NL80211_PLINK_ESTAB: - case NL80211_PLINK_BLOCKED: - sta->plink_state = params->plink_state; - break; - default: - /* nothing */ - break; - } - else - switch (params->plink_action) { - case PLINK_ACTION_OPEN: - mesh_plink_open(sta); - break; - case PLINK_ACTION_BLOCK: - mesh_plink_block(sta); - break; - } -#endif - } - - return 0; -} - -static int ieee80211_add_station(struct wiphy *wiphy, struct net_device *dev, - u8 *mac, struct station_parameters *params) -{ - struct ieee80211_local *local = wiphy_priv(wiphy); - struct sta_info *sta; - struct ieee80211_sub_if_data *sdata; - int err; - int layer2_update; - - if (params->vlan) { - sdata = IEEE80211_DEV_TO_SUB_IF(params->vlan); - - if (sdata->vif.type != NL80211_IFTYPE_AP_VLAN && - sdata->vif.type != NL80211_IFTYPE_AP) - return -EINVAL; - } else - sdata = IEEE80211_DEV_TO_SUB_IF(dev); - - if (compare_ether_addr(mac, sdata->vif.addr) == 0) - return -EINVAL; - - if (is_multicast_ether_addr(mac)) - return -EINVAL; - - sta = sta_info_alloc(sdata, mac, GFP_KERNEL); - if (!sta) - return -ENOMEM; - - sta_info_pre_move_state(sta, IEEE80211_STA_AUTH); - sta_info_pre_move_state(sta, IEEE80211_STA_ASSOC); - - err = sta_apply_parameters(local, sta, params); - if (err) { - sta_info_free(local, sta); - return err; - } - - /* - * for TDLS, rate control should be initialized only when supported - * rates are known. - */ - if (!test_sta_flag(sta, WLAN_STA_TDLS_PEER)) - rate_control_rate_init(sta); - - layer2_update = sdata->vif.type == NL80211_IFTYPE_AP_VLAN || - sdata->vif.type == NL80211_IFTYPE_AP; - - err = sta_info_insert_rcu(sta); - if (err) { - rcu_read_unlock(); - return err; - } - - if (layer2_update) - ieee80211_send_layer2_update(sta); - - rcu_read_unlock(); - - return 0; -} - -static int ieee80211_del_station(struct wiphy *wiphy, struct net_device *dev, - u8 *mac) -{ - struct ieee80211_local *local = wiphy_priv(wiphy); - struct ieee80211_sub_if_data *sdata; - - sdata = IEEE80211_DEV_TO_SUB_IF(dev); - - if (mac) - return sta_info_destroy_addr_bss(sdata, mac); - - sta_info_flush(local, sdata); - return 0; -} - -static int ieee80211_change_station(struct wiphy *wiphy, - struct net_device *dev, - u8 *mac, - struct station_parameters *params) -{ - struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); - struct ieee80211_local *local = wiphy_priv(wiphy); - struct sta_info *sta; - struct ieee80211_sub_if_data *vlansdata; - int err; - - mutex_lock(&local->sta_mtx); - - sta = sta_info_get_bss(sdata, mac); - if (!sta) { - mutex_unlock(&local->sta_mtx); - return -ENOENT; - } - - /* in station mode, supported rates are only valid with TDLS */ - if (sdata->vif.type == NL80211_IFTYPE_STATION && - params->supported_rates && - !test_sta_flag(sta, WLAN_STA_TDLS_PEER)) { - mutex_unlock(&local->sta_mtx); - return -EINVAL; - } - - if (params->vlan && params->vlan != sta->sdata->dev) { - vlansdata = IEEE80211_DEV_TO_SUB_IF(params->vlan); - - if (vlansdata->vif.type != NL80211_IFTYPE_AP_VLAN && - vlansdata->vif.type != NL80211_IFTYPE_AP) { - mutex_unlock(&local->sta_mtx); - return -EINVAL; - } - - if (params->vlan->ieee80211_ptr->use_4addr) { - if (vlansdata->u.vlan.sta) { - mutex_unlock(&local->sta_mtx); - return -EBUSY; - } - - rcu_assign_pointer(vlansdata->u.vlan.sta, sta); - } - - sta->sdata = vlansdata; - ieee80211_send_layer2_update(sta); - } - - err = sta_apply_parameters(local, sta, params); - if (err) { - mutex_unlock(&local->sta_mtx); - return err; - } - - if (test_sta_flag(sta, WLAN_STA_TDLS_PEER) && params->supported_rates) - rate_control_rate_init(sta); - - mutex_unlock(&local->sta_mtx); - - if (sdata->vif.type == NL80211_IFTYPE_STATION && - params->sta_flags_mask & BIT(NL80211_STA_FLAG_AUTHORIZED)) - ieee80211_recalc_ps(local, -1); - - return 0; -} - -#ifdef CONFIG_MAC80211_MESH -static int ieee80211_add_mpath(struct wiphy *wiphy, struct net_device *dev, - u8 *dst, u8 *next_hop) -{ - struct ieee80211_sub_if_data *sdata; - struct mesh_path *mpath; - struct sta_info *sta; - int err; - - sdata = IEEE80211_DEV_TO_SUB_IF(dev); - - rcu_read_lock(); - sta = sta_info_get(sdata, next_hop); - if (!sta) { - rcu_read_unlock(); - return -ENOENT; - } - - err = mesh_path_add(dst, sdata); - if (err) { - rcu_read_unlock(); - return err; - } - - mpath = mesh_path_lookup(dst, sdata); - if (!mpath) { - rcu_read_unlock(); - return -ENXIO; - } - mesh_path_fix_nexthop(mpath, sta); - - rcu_read_unlock(); - return 0; -} - -static int ieee80211_del_mpath(struct wiphy *wiphy, struct net_device *dev, - u8 *dst) -{ - struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); - - if (dst) - return mesh_path_del(dst, sdata); - - mesh_path_flush_by_iface(sdata); - return 0; -} - -static int ieee80211_change_mpath(struct wiphy *wiphy, - struct net_device *dev, - u8 *dst, u8 *next_hop) -{ - struct ieee80211_sub_if_data *sdata; - struct mesh_path *mpath; - struct sta_info *sta; - - sdata = IEEE80211_DEV_TO_SUB_IF(dev); - - rcu_read_lock(); - - sta = sta_info_get(sdata, next_hop); - if (!sta) { - rcu_read_unlock(); - return -ENOENT; - } - - mpath = mesh_path_lookup(dst, sdata); - if (!mpath) { - rcu_read_unlock(); - return -ENOENT; - } - - mesh_path_fix_nexthop(mpath, sta); - - rcu_read_unlock(); - return 0; -} - -static void mpath_set_pinfo(struct mesh_path *mpath, u8 *next_hop, - struct mpath_info *pinfo) -{ - struct sta_info *next_hop_sta = rcu_dereference(mpath->next_hop); - - if (next_hop_sta) - memcpy(next_hop, next_hop_sta->sta.addr, ETH_ALEN); - else - memset(next_hop, 0, ETH_ALEN); - - pinfo->generation = mesh_paths_generation; - - pinfo->filled = MPATH_INFO_FRAME_QLEN | - MPATH_INFO_SN | - MPATH_INFO_METRIC | - MPATH_INFO_EXPTIME | - MPATH_INFO_DISCOVERY_TIMEOUT | - MPATH_INFO_DISCOVERY_RETRIES | - MPATH_INFO_FLAGS; - - pinfo->frame_qlen = mpath->frame_queue.qlen; - pinfo->sn = mpath->sn; - pinfo->metric = mpath->metric; - if (time_before(jiffies, mpath->exp_time)) - pinfo->exptime = jiffies_to_msecs(mpath->exp_time - jiffies); - pinfo->discovery_timeout = - jiffies_to_msecs(mpath->discovery_timeout); - pinfo->discovery_retries = mpath->discovery_retries; - pinfo->flags = 0; - if (mpath->flags & MESH_PATH_ACTIVE) - pinfo->flags |= NL80211_MPATH_FLAG_ACTIVE; - if (mpath->flags & MESH_PATH_RESOLVING) - pinfo->flags |= NL80211_MPATH_FLAG_RESOLVING; - if (mpath->flags & MESH_PATH_SN_VALID) - pinfo->flags |= NL80211_MPATH_FLAG_SN_VALID; - if (mpath->flags & MESH_PATH_FIXED) - pinfo->flags |= NL80211_MPATH_FLAG_FIXED; - if (mpath->flags & MESH_PATH_RESOLVING) - pinfo->flags |= NL80211_MPATH_FLAG_RESOLVING; - - pinfo->flags = mpath->flags; -} - -static int ieee80211_get_mpath(struct wiphy *wiphy, struct net_device *dev, - u8 *dst, u8 *next_hop, struct mpath_info *pinfo) - -{ - struct ieee80211_sub_if_data *sdata; - struct mesh_path *mpath; - - sdata = IEEE80211_DEV_TO_SUB_IF(dev); - - rcu_read_lock(); - mpath = mesh_path_lookup(dst, sdata); - if (!mpath) { - rcu_read_unlock(); - return -ENOENT; - } - memcpy(dst, mpath->dst, ETH_ALEN); - mpath_set_pinfo(mpath, next_hop, pinfo); - rcu_read_unlock(); - return 0; -} - -static int ieee80211_dump_mpath(struct wiphy *wiphy, struct net_device *dev, - int idx, u8 *dst, u8 *next_hop, - struct mpath_info *pinfo) -{ - struct ieee80211_sub_if_data *sdata; - struct mesh_path *mpath; - - sdata = IEEE80211_DEV_TO_SUB_IF(dev); - - rcu_read_lock(); - mpath = mesh_path_lookup_by_idx(idx, sdata); - if (!mpath) { - rcu_read_unlock(); - return -ENOENT; - } - memcpy(dst, mpath->dst, ETH_ALEN); - mpath_set_pinfo(mpath, next_hop, pinfo); - rcu_read_unlock(); - return 0; -} - -static int ieee80211_get_mesh_config(struct wiphy *wiphy, - struct net_device *dev, - struct mesh_config *conf) -{ - struct ieee80211_sub_if_data *sdata; - sdata = IEEE80211_DEV_TO_SUB_IF(dev); - - memcpy(conf, &(sdata->u.mesh.mshcfg), sizeof(struct mesh_config)); - return 0; -} - -static inline bool _chg_mesh_attr(enum nl80211_meshconf_params parm, u32 mask) -{ - return (mask >> (parm-1)) & 0x1; -} - -static int copy_mesh_setup(struct ieee80211_if_mesh *ifmsh, - const struct mesh_setup *setup) -{ - u8 *new_ie; - const u8 *old_ie; - struct ieee80211_sub_if_data *sdata = container_of(ifmsh, - struct ieee80211_sub_if_data, u.mesh); - - /* allocate information elements */ - new_ie = NULL; - old_ie = ifmsh->ie; - - if (setup->ie_len) { - new_ie = kmemdup(setup->ie, setup->ie_len, - GFP_KERNEL); - if (!new_ie) - return -ENOMEM; - } - ifmsh->ie_len = setup->ie_len; - ifmsh->ie = new_ie; - kfree(old_ie); - - /* now copy the rest of the setup parameters */ - ifmsh->mesh_id_len = setup->mesh_id_len; - memcpy(ifmsh->mesh_id, setup->mesh_id, ifmsh->mesh_id_len); - ifmsh->mesh_pp_id = setup->path_sel_proto; - ifmsh->mesh_pm_id = setup->path_metric; - ifmsh->security = IEEE80211_MESH_SEC_NONE; - if (setup->is_authenticated) - ifmsh->security |= IEEE80211_MESH_SEC_AUTHED; - if (setup->is_secure) - ifmsh->security |= IEEE80211_MESH_SEC_SECURED; - - /* mcast rate setting in Mesh Node */ - memcpy(sdata->vif.bss_conf.mcast_rate, setup->mcast_rate, - sizeof(setup->mcast_rate)); - - return 0; -} - -static int ieee80211_update_mesh_config(struct wiphy *wiphy, - struct net_device *dev, u32 mask, - const struct mesh_config *nconf) -{ - struct mesh_config *conf; - struct ieee80211_sub_if_data *sdata; - struct ieee80211_if_mesh *ifmsh; - - sdata = IEEE80211_DEV_TO_SUB_IF(dev); - ifmsh = &sdata->u.mesh; - - /* Set the config options which we are interested in setting */ - conf = &(sdata->u.mesh.mshcfg); - if (_chg_mesh_attr(NL80211_MESHCONF_RETRY_TIMEOUT, mask)) - conf->dot11MeshRetryTimeout = nconf->dot11MeshRetryTimeout; - if (_chg_mesh_attr(NL80211_MESHCONF_CONFIRM_TIMEOUT, mask)) - conf->dot11MeshConfirmTimeout = nconf->dot11MeshConfirmTimeout; - if (_chg_mesh_attr(NL80211_MESHCONF_HOLDING_TIMEOUT, mask)) - conf->dot11MeshHoldingTimeout = nconf->dot11MeshHoldingTimeout; - if (_chg_mesh_attr(NL80211_MESHCONF_MAX_PEER_LINKS, mask)) - conf->dot11MeshMaxPeerLinks = nconf->dot11MeshMaxPeerLinks; - if (_chg_mesh_attr(NL80211_MESHCONF_MAX_RETRIES, mask)) - conf->dot11MeshMaxRetries = nconf->dot11MeshMaxRetries; - if (_chg_mesh_attr(NL80211_MESHCONF_TTL, mask)) - conf->dot11MeshTTL = nconf->dot11MeshTTL; - if (_chg_mesh_attr(NL80211_MESHCONF_ELEMENT_TTL, mask)) - conf->dot11MeshTTL = nconf->element_ttl; - if (_chg_mesh_attr(NL80211_MESHCONF_AUTO_OPEN_PLINKS, mask)) - conf->auto_open_plinks = nconf->auto_open_plinks; - if (_chg_mesh_attr(NL80211_MESHCONF_HWMP_MAX_PREQ_RETRIES, mask)) - conf->dot11MeshHWMPmaxPREQretries = - nconf->dot11MeshHWMPmaxPREQretries; - if (_chg_mesh_attr(NL80211_MESHCONF_PATH_REFRESH_TIME, mask)) - conf->path_refresh_time = nconf->path_refresh_time; - if (_chg_mesh_attr(NL80211_MESHCONF_MIN_DISCOVERY_TIMEOUT, mask)) - conf->min_discovery_timeout = nconf->min_discovery_timeout; - if (_chg_mesh_attr(NL80211_MESHCONF_HWMP_ACTIVE_PATH_TIMEOUT, mask)) - conf->dot11MeshHWMPactivePathTimeout = - nconf->dot11MeshHWMPactivePathTimeout; - if (_chg_mesh_attr(NL80211_MESHCONF_HWMP_PREQ_MIN_INTERVAL, mask)) - conf->dot11MeshHWMPpreqMinInterval = - nconf->dot11MeshHWMPpreqMinInterval; - if (_chg_mesh_attr(NL80211_MESHCONF_HWMP_PERR_MIN_INTERVAL, mask)) - conf->dot11MeshHWMPperrMinInterval = - nconf->dot11MeshHWMPperrMinInterval; - if (_chg_mesh_attr(NL80211_MESHCONF_HWMP_NET_DIAM_TRVS_TIME, - mask)) - conf->dot11MeshHWMPnetDiameterTraversalTime = - nconf->dot11MeshHWMPnetDiameterTraversalTime; - if (_chg_mesh_attr(NL80211_MESHCONF_HWMP_ROOTMODE, mask)) { - conf->dot11MeshHWMPRootMode = nconf->dot11MeshHWMPRootMode; - ieee80211_mesh_root_setup(ifmsh); - } - if (_chg_mesh_attr(NL80211_MESHCONF_GATE_ANNOUNCEMENTS, mask)) { - /* our current gate announcement implementation rides on root - * announcements, so require this ifmsh to also be a root node - * */ - if (nconf->dot11MeshGateAnnouncementProtocol && - !conf->dot11MeshHWMPRootMode) { - conf->dot11MeshHWMPRootMode = 1; - ieee80211_mesh_root_setup(ifmsh); - } - conf->dot11MeshGateAnnouncementProtocol = - nconf->dot11MeshGateAnnouncementProtocol; - } - if (_chg_mesh_attr(NL80211_MESHCONF_HWMP_RANN_INTERVAL, mask)) { - conf->dot11MeshHWMPRannInterval = - nconf->dot11MeshHWMPRannInterval; - } - if (_chg_mesh_attr(NL80211_MESHCONF_FORWARDING, mask)) - conf->dot11MeshForwarding = nconf->dot11MeshForwarding; - if (_chg_mesh_attr(NL80211_MESHCONF_RSSI_THRESHOLD, mask)) { - /* our RSSI threshold implementation is supported only for - * devices that report signal in dBm. - */ - if (!(sdata->local->hw.flags & IEEE80211_HW_SIGNAL_DBM)) - return -ENOTSUPP; - conf->rssi_threshold = nconf->rssi_threshold; - } - return 0; -} - -static int ieee80211_join_mesh(struct wiphy *wiphy, struct net_device *dev, - const struct mesh_config *conf, - const struct mesh_setup *setup) -{ - struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); - struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh; - int err; - - memcpy(&ifmsh->mshcfg, conf, sizeof(struct mesh_config)); - err = copy_mesh_setup(ifmsh, setup); - if (err) - return err; - ieee80211_start_mesh(sdata); - - return 0; -} - -static int ieee80211_leave_mesh(struct wiphy *wiphy, struct net_device *dev) -{ - struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); - - ieee80211_stop_mesh(sdata); - - return 0; -} -#endif - -static int ieee80211_change_bss(struct wiphy *wiphy, - struct net_device *dev, - struct bss_parameters *params) -{ - struct ieee80211_sub_if_data *sdata; - u32 changed = 0; - - sdata = IEEE80211_DEV_TO_SUB_IF(dev); - - if (params->use_cts_prot >= 0) { - sdata->vif.bss_conf.use_cts_prot = params->use_cts_prot; - changed |= BSS_CHANGED_ERP_CTS_PROT; - } - if (params->use_short_preamble >= 0) { - sdata->vif.bss_conf.use_short_preamble = - params->use_short_preamble; - changed |= BSS_CHANGED_ERP_PREAMBLE; - } - - if (!sdata->vif.bss_conf.use_short_slot && - sdata->local->hw.conf.channel->band == IEEE80211_BAND_5GHZ) { - sdata->vif.bss_conf.use_short_slot = true; - changed |= BSS_CHANGED_ERP_SLOT; - } - - if (params->use_short_slot_time >= 0) { - sdata->vif.bss_conf.use_short_slot = - params->use_short_slot_time; - changed |= BSS_CHANGED_ERP_SLOT; - } - - if (params->basic_rates) { - int i, j; - u32 rates = 0; - struct ieee80211_local *local = wiphy_priv(wiphy); - struct ieee80211_supported_band *sband = - wiphy->bands[local->oper_channel->band]; - - for (i = 0; i < params->basic_rates_len; i++) { - int rate = (params->basic_rates[i] & 0x7f) * 5; - for (j = 0; j < sband->n_bitrates; j++) { - if (sband->bitrates[j].bitrate == rate) - rates |= BIT(j); - } - } - sdata->vif.bss_conf.basic_rates = rates; - changed |= BSS_CHANGED_BASIC_RATES; - } - - if (params->ap_isolate >= 0) { - if (params->ap_isolate) - sdata->flags |= IEEE80211_SDATA_DONT_BRIDGE_PACKETS; - else - sdata->flags &= ~IEEE80211_SDATA_DONT_BRIDGE_PACKETS; - } - - if (params->ht_opmode >= 0) { - sdata->vif.bss_conf.ht_operation_mode = - (u16) params->ht_opmode; - changed |= BSS_CHANGED_HT; - } - - ieee80211_bss_info_change_notify(sdata, changed); - - return 0; -} - -static int ieee80211_set_txq_params(struct wiphy *wiphy, - struct net_device *dev, - struct ieee80211_txq_params *params) -{ - struct ieee80211_local *local = wiphy_priv(wiphy); - struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); - struct ieee80211_tx_queue_params p; - - if (!local->ops->conf_tx) - return -EOPNOTSUPP; - - memset(&p, 0, sizeof(p)); - p.aifs = params->aifs; - p.cw_max = params->cwmax; - p.cw_min = params->cwmin; - p.txop = params->txop; - - /* - * Setting tx queue params disables u-apsd because it's only - * called in master mode. - */ - p.uapsd = false; - - if (params->queue >= local->hw.queues) - return -EINVAL; - - sdata->tx_conf[params->queue] = p; - if (drv_conf_tx(local, sdata, params->queue, &p)) { - wiphy_debug(local->hw.wiphy, - "failed to set TX queue parameters for queue %d\n", - params->queue); - return -EINVAL; - } - - return 0; -} - -static int ieee80211_set_channel(struct wiphy *wiphy, - struct net_device *netdev, - struct ieee80211_channel *chan, - enum nl80211_channel_type channel_type) -{ - struct ieee80211_local *local = wiphy_priv(wiphy); - struct ieee80211_sub_if_data *sdata = NULL; - struct ieee80211_channel *old_oper; - enum nl80211_channel_type old_oper_type; - enum nl80211_channel_type old_vif_oper_type= NL80211_CHAN_NO_HT; - - if (netdev) - sdata = IEEE80211_DEV_TO_SUB_IF(netdev); - - switch (ieee80211_get_channel_mode(local, NULL)) { - case CHAN_MODE_HOPPING: - return -EBUSY; - case CHAN_MODE_FIXED: - if (local->oper_channel != chan) - return -EBUSY; - if (!sdata && local->_oper_channel_type == channel_type) - return 0; - break; - case CHAN_MODE_UNDEFINED: - break; - } - - if (sdata) - old_vif_oper_type = sdata->vif.bss_conf.channel_type; - old_oper_type = local->_oper_channel_type; - - if (!ieee80211_set_channel_type(local, sdata, channel_type)) - return -EBUSY; - - old_oper = local->oper_channel; - local->oper_channel = chan; - - /* Update driver if changes were actually made. */ - if ((old_oper != local->oper_channel) || - (old_oper_type != local->_oper_channel_type)) - ieee80211_hw_config(local, IEEE80211_CONF_CHANGE_CHANNEL); - - if (sdata && sdata->vif.type != NL80211_IFTYPE_MONITOR && - old_vif_oper_type != sdata->vif.bss_conf.channel_type) - ieee80211_bss_info_change_notify(sdata, BSS_CHANGED_HT); - - return 0; -} - -#ifdef CONFIG_PM -static int ieee80211_suspend(struct wiphy *wiphy, - struct cfg80211_wowlan *wowlan) -{ - return __ieee80211_suspend(wiphy_priv(wiphy), wowlan); -} - -static int ieee80211_resume(struct wiphy *wiphy) -{ - return __ieee80211_resume(wiphy_priv(wiphy)); -} -#else -#define ieee80211_suspend NULL -#define ieee80211_resume NULL -#endif - -static int ieee80211_scan(struct wiphy *wiphy, - struct net_device *dev, - struct cfg80211_scan_request *req) -{ - struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); - - switch (ieee80211_vif_type_p2p(&sdata->vif)) { - case NL80211_IFTYPE_ADHOC: - if((sdata->local->hw.wiphy->dot11OCBActivated == 1) && (sdata->local->hw.flags & IEEE80211_HW_DOT11OCB_SUPPORTED)) { - /* - * [PLATA] - we do not support the scan mode if we are configured with OCBActivated (mode 802.11p) - */ - printk(KERN_ERR "ieee80211_scan: no scan in 802.11p\n"); - return -EOPNOTSUPP; - } - break; - case NL80211_IFTYPE_STATION: - case NL80211_IFTYPE_MESH_POINT: - case NL80211_IFTYPE_P2P_CLIENT: - break; - case NL80211_IFTYPE_P2P_GO: - if (sdata->local->ops->hw_scan) - break; - /* - * FIXME: implement NoA while scanning in software, - * for now fall through to allow scanning only when - * beaconing hasn't been configured yet - */ - case NL80211_IFTYPE_AP: - if (sdata->u.ap.beacon) - return -EOPNOTSUPP; - break; - default: - return -EOPNOTSUPP; - } - - return ieee80211_request_scan(sdata, req); -} - -static int -ieee80211_sched_scan_start(struct wiphy *wiphy, - struct net_device *dev, - struct cfg80211_sched_scan_request *req) -{ - struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); - - if((sdata->local->hw.wiphy->dot11OCBActivated == 1) && (sdata->local->hw.flags & IEEE80211_HW_DOT11OCB_SUPPORTED)) { - /* - * [PLATA] - we do not support the scan mode if we are configured with OCBActivated (mode 802.11p) - */ - printk(KERN_ERR "ieee80211_sched_scan_start: no scan in 802.11p"); - return -EOPNOTSUPP; - } - - if (!sdata->local->ops->sched_scan_start) - return -EOPNOTSUPP; - - return ieee80211_request_sched_scan_start(sdata, req); -} - -static int -ieee80211_sched_scan_stop(struct wiphy *wiphy, struct net_device *dev) -{ - struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); - - if (!sdata->local->ops->sched_scan_stop) - return -EOPNOTSUPP; - - return ieee80211_request_sched_scan_stop(sdata); -} - -static int ieee80211_auth(struct wiphy *wiphy, struct net_device *dev, - struct cfg80211_auth_request *req) -{ - /* - * [PLATA] we should also check on the hw to see if the OCB is supported.... - */ - struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); - - if((sdata->local->hw.wiphy->dot11OCBActivated == 1) && (sdata->local->hw.flags & IEEE80211_HW_DOT11OCB_SUPPORTED)) { - /* - * [PLATA] - we do not support the authentication mode if we are configured with OCBActivated (mode 802.11p) - */ - printk(KERN_ERR "ieee80211_auth: no auth in 802.11p"); - return -EOPNOTSUPP; - } - else { - return ieee80211_mgd_auth(IEEE80211_DEV_TO_SUB_IF(dev), req); - } -} - -static int ieee80211_assoc(struct wiphy *wiphy, struct net_device *dev, - struct cfg80211_assoc_request *req) -{ - struct ieee80211_local *local = wiphy_priv(wiphy); - struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); - - if((sdata->local->hw.wiphy->dot11OCBActivated == 1) && (sdata->local->hw.flags & IEEE80211_HW_DOT11OCB_SUPPORTED)) { - /* - * [PLATA] - we do not support the association mode if we are configured with OCBActivated (mode 802.11p) - */ - printk(KERN_ERR "ieee80211_assoc: no assoc in 802.11p"); - return -EOPNOTSUPP; - } - switch (ieee80211_get_channel_mode(local, sdata)) { - case CHAN_MODE_HOPPING: - return -EBUSY; - case CHAN_MODE_FIXED: - if (local->oper_channel == req->bss->channel) - break; - return -EBUSY; - case CHAN_MODE_UNDEFINED: - break; - } - - return ieee80211_mgd_assoc(IEEE80211_DEV_TO_SUB_IF(dev), req); -} - -static int ieee80211_deauth(struct wiphy *wiphy, struct net_device *dev, - struct cfg80211_deauth_request *req) -{ - return ieee80211_mgd_deauth(IEEE80211_DEV_TO_SUB_IF(dev), req); -} - -static int ieee80211_disassoc(struct wiphy *wiphy, struct net_device *dev, - struct cfg80211_disassoc_request *req) -{ - return ieee80211_mgd_disassoc(IEEE80211_DEV_TO_SUB_IF(dev), req); -} - -static int ieee80211_join_ibss(struct wiphy *wiphy, struct net_device *dev, - struct cfg80211_ibss_params *params) -{ - struct ieee80211_local *local = wiphy_priv(wiphy); - struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); - - if((sdata->local->hw.wiphy->dot11OCBActivated == 1) && (sdata->local->hw.flags & IEEE80211_HW_DOT11OCB_SUPPORTED)) { - /* - * [PLATA] - As the OCBMode is used here in ADHOC mode, we just want to be sure we do not try to - * join an IBSS if wiht OCBActivated (mode 802.11p) - */ - printk(KERN_ERR "ieee80211_join_ibss: no ibss in 802.11p"); - return -EOPNOTSUPP; - } - - switch (ieee80211_get_channel_mode(local, sdata)) { - case CHAN_MODE_HOPPING: - return -EBUSY; - case CHAN_MODE_FIXED: - if (!params->channel_fixed) - return -EBUSY; - if (local->oper_channel == params->channel) - break; - return -EBUSY; - case CHAN_MODE_UNDEFINED: - break; - } - - return ieee80211_ibss_join(sdata, params); -} - -static int ieee80211_leave_ibss(struct wiphy *wiphy, struct net_device *dev) -{ - struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); - - return ieee80211_ibss_leave(sdata); -} - -/* - * [PLATA] - should we add something to allow the change from OCBActivated from 0 to 1 and back? - */ -static int ieee80211_set_wiphy_params(struct wiphy *wiphy, u32 changed) -{ - struct ieee80211_local *local = wiphy_priv(wiphy); - int err; - - if (changed & WIPHY_PARAM_FRAG_THRESHOLD) { - err = drv_set_frag_threshold(local, wiphy->frag_threshold); - - if (err) - return err; - } - - if (changed & WIPHY_PARAM_COVERAGE_CLASS) { - err = drv_set_coverage_class(local, wiphy->coverage_class); - - if (err) - return err; - } - - if (changed & WIPHY_PARAM_RTS_THRESHOLD) { - err = drv_set_rts_threshold(local, wiphy->rts_threshold); - - if (err) - return err; - } - - if (changed & WIPHY_PARAM_RETRY_SHORT) - local->hw.conf.short_frame_max_tx_count = wiphy->retry_short; - if (changed & WIPHY_PARAM_RETRY_LONG) - local->hw.conf.long_frame_max_tx_count = wiphy->retry_long; - if (changed & - (WIPHY_PARAM_RETRY_SHORT | WIPHY_PARAM_RETRY_LONG)) - ieee80211_hw_config(local, IEEE80211_CONF_CHANGE_RETRY_LIMITS); - - return 0; -} - -static int ieee80211_set_tx_power(struct wiphy *wiphy, - enum nl80211_tx_power_setting type, int mbm) -{ - struct ieee80211_local *local = wiphy_priv(wiphy); - struct ieee80211_channel *chan = local->hw.conf.channel; - u32 changes = 0; - - switch (type) { - case NL80211_TX_POWER_AUTOMATIC: - local->user_power_level = -1; - break; - case NL80211_TX_POWER_LIMITED: - if (mbm < 0 || (mbm % 100)) - return -EOPNOTSUPP; - local->user_power_level = MBM_TO_DBM(mbm); - break; - case NL80211_TX_POWER_FIXED: - if (mbm < 0 || (mbm % 100)) - return -EOPNOTSUPP; - /* TODO: move to cfg80211 when it knows the channel */ - if (MBM_TO_DBM(mbm) > chan->max_power) - return -EINVAL; - local->user_power_level = MBM_TO_DBM(mbm); - break; - } - - ieee80211_hw_config(local, changes); - - return 0; -} - -static int ieee80211_get_tx_power(struct wiphy *wiphy, int *dbm) -{ - struct ieee80211_local *local = wiphy_priv(wiphy); - - *dbm = local->hw.conf.power_level; - - return 0; -} - -static int ieee80211_set_wds_peer(struct wiphy *wiphy, struct net_device *dev, - const u8 *addr) -{ - struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); - - memcpy(&sdata->u.wds.remote_addr, addr, ETH_ALEN); - - return 0; -} - -static void ieee80211_rfkill_poll(struct wiphy *wiphy) -{ - struct ieee80211_local *local = wiphy_priv(wiphy); - - drv_rfkill_poll(local); -} - -#ifdef CONFIG_NL80211_TESTMODE -static int ieee80211_testmode_cmd(struct wiphy *wiphy, void *data, int len) -{ - struct ieee80211_local *local = wiphy_priv(wiphy); - - if (!local->ops->testmode_cmd) - return -EOPNOTSUPP; - - return local->ops->testmode_cmd(&local->hw, data, len); -} - -static int ieee80211_testmode_dump(struct wiphy *wiphy, - struct sk_buff *skb, - struct netlink_callback *cb, - void *data, int len) -{ - struct ieee80211_local *local = wiphy_priv(wiphy); - - if (!local->ops->testmode_dump) - return -EOPNOTSUPP; - - return local->ops->testmode_dump(&local->hw, skb, cb, data, len); -} -#endif - -int __ieee80211_request_smps(struct ieee80211_sub_if_data *sdata, - enum ieee80211_smps_mode smps_mode) -{ - const u8 *ap; - enum ieee80211_smps_mode old_req; - int err; - - lockdep_assert_held(&sdata->u.mgd.mtx); - - old_req = sdata->u.mgd.req_smps; - sdata->u.mgd.req_smps = smps_mode; - - if (old_req == smps_mode && - smps_mode != IEEE80211_SMPS_AUTOMATIC) - return 0; - - /* - * If not associated, or current association is not an HT - * association, there's no need to send an action frame. - */ - if (!sdata->u.mgd.associated || - sdata->vif.bss_conf.channel_type == NL80211_CHAN_NO_HT) { - mutex_lock(&sdata->local->iflist_mtx); - ieee80211_recalc_smps(sdata->local); - mutex_unlock(&sdata->local->iflist_mtx); - return 0; - } - - ap = sdata->u.mgd.associated->bssid; - - if (smps_mode == IEEE80211_SMPS_AUTOMATIC) { - if (sdata->u.mgd.powersave) - smps_mode = IEEE80211_SMPS_DYNAMIC; - else - smps_mode = IEEE80211_SMPS_OFF; - } - - /* send SM PS frame to AP */ - err = ieee80211_send_smps_action(sdata, smps_mode, - ap, ap); - if (err) - sdata->u.mgd.req_smps = old_req; - - return err; -} - -static int ieee80211_set_power_mgmt(struct wiphy *wiphy, struct net_device *dev, - bool enabled, int timeout) -{ - struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); - struct ieee80211_local *local = wdev_priv(dev->ieee80211_ptr); - - if (sdata->vif.type != NL80211_IFTYPE_STATION) - return -EOPNOTSUPP; - - if (!(local->hw.flags & IEEE80211_HW_SUPPORTS_PS)) - return -EOPNOTSUPP; - - if (enabled == sdata->u.mgd.powersave && - timeout == local->dynamic_ps_forced_timeout) - return 0; - - sdata->u.mgd.powersave = enabled; - local->dynamic_ps_forced_timeout = timeout; - - /* no change, but if automatic follow powersave */ - mutex_lock(&sdata->u.mgd.mtx); - __ieee80211_request_smps(sdata, sdata->u.mgd.req_smps); - mutex_unlock(&sdata->u.mgd.mtx); - - if (local->hw.flags & IEEE80211_HW_SUPPORTS_DYNAMIC_PS) - ieee80211_hw_config(local, IEEE80211_CONF_CHANGE_PS); - - ieee80211_recalc_ps(local, -1); - - return 0; -} - -static int ieee80211_set_cqm_rssi_config(struct wiphy *wiphy, - struct net_device *dev, - s32 rssi_thold, u32 rssi_hyst) -{ - struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); - struct ieee80211_vif *vif = &sdata->vif; - struct ieee80211_bss_conf *bss_conf = &vif->bss_conf; - - if (rssi_thold == bss_conf->cqm_rssi_thold && - rssi_hyst == bss_conf->cqm_rssi_hyst) - return 0; - - bss_conf->cqm_rssi_thold = rssi_thold; - bss_conf->cqm_rssi_hyst = rssi_hyst; - - /* tell the driver upon association, unless already associated */ - if (sdata->u.mgd.associated && - sdata->vif.driver_flags & IEEE80211_VIF_SUPPORTS_CQM_RSSI) - ieee80211_bss_info_change_notify(sdata, BSS_CHANGED_CQM); - - return 0; -} - -static int ieee80211_set_bitrate_mask(struct wiphy *wiphy, - struct net_device *dev, - const u8 *addr, - const struct cfg80211_bitrate_mask *mask) -{ - struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); - struct ieee80211_local *local = wdev_priv(dev->ieee80211_ptr); - int i, ret; - - if (local->hw.flags & IEEE80211_HW_HAS_RATE_CONTROL) { - ret = drv_set_bitrate_mask(local, sdata, mask); - if (ret) - return ret; - } - - for (i = 0; i < IEEE80211_NUM_BANDS; i++) { - sdata->rc_rateidx_mask[i] = mask->control[i].legacy; - memcpy(sdata->rc_rateidx_mcs_mask[i], mask->control[i].mcs, - sizeof(mask->control[i].mcs)); - } - - return 0; -} - -/* - * [PLATA] This method could be called to guarantee that we stay on the CCH forever... - */ -static int ieee80211_remain_on_channel_hw(struct ieee80211_local *local, - struct net_device *dev, - struct ieee80211_channel *chan, - enum nl80211_channel_type chantype, - unsigned int duration, u64 *cookie) -{ - int ret; - u32 random_cookie; - - lockdep_assert_held(&local->mtx); - - if (local->hw_roc_cookie) - return -EBUSY; - /* must be nonzero */ - random_cookie = random32() | 1; - - *cookie = random_cookie; - local->hw_roc_dev = dev; - local->hw_roc_cookie = random_cookie; - local->hw_roc_channel = chan; - local->hw_roc_channel_type = chantype; - local->hw_roc_duration = duration; - ret = drv_remain_on_channel(local, chan, chantype, duration); - if (ret) { - local->hw_roc_channel = NULL; - local->hw_roc_cookie = 0; - } - - return ret; -} - -/* - * [PLATA] This method could be called to guarantee that we stay on the CCH forever... - */ -static int ieee80211_remain_on_channel(struct wiphy *wiphy, - struct net_device *dev, - struct ieee80211_channel *chan, - enum nl80211_channel_type channel_type, - unsigned int duration, - u64 *cookie) -{ - struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); - struct ieee80211_local *local = sdata->local; - - if (local->ops->remain_on_channel) { - int ret; - - mutex_lock(&local->mtx); - ret = ieee80211_remain_on_channel_hw(local, dev, - chan, channel_type, - duration, cookie); - local->hw_roc_for_tx = false; - mutex_unlock(&local->mtx); - - return ret; - } - - return ieee80211_wk_remain_on_channel(sdata, chan, channel_type, - duration, cookie); -} - -static int ieee80211_cancel_remain_on_channel_hw(struct ieee80211_local *local, - u64 cookie) -{ - int ret; - - lockdep_assert_held(&local->mtx); - - if (local->hw_roc_cookie != cookie) - return -ENOENT; - - ret = drv_cancel_remain_on_channel(local); - if (ret) - return ret; - - local->hw_roc_cookie = 0; - local->hw_roc_channel = NULL; - - ieee80211_recalc_idle(local); - - return 0; -} - -static int ieee80211_cancel_remain_on_channel(struct wiphy *wiphy, - struct net_device *dev, - u64 cookie) -{ - struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); - struct ieee80211_local *local = sdata->local; - - if (local->ops->cancel_remain_on_channel) { - int ret; - - mutex_lock(&local->mtx); - ret = ieee80211_cancel_remain_on_channel_hw(local, cookie); - mutex_unlock(&local->mtx); - - return ret; - } - - return ieee80211_wk_cancel_remain_on_channel(sdata, cookie); -} - -static enum work_done_result -ieee80211_offchan_tx_done(struct ieee80211_work *wk, struct sk_buff *skb) -{ - /* - * Use the data embedded in the work struct for reporting - * here so if the driver mangled the SKB before dropping - * it (which is the only way we really should get here) - * then we don't report mangled data. - * - * If there was no wait time, then by the time we get here - * the driver will likely not have reported the status yet, - * so in that case userspace will have to deal with it. - */ - - if (wk->offchan_tx.wait && !wk->offchan_tx.status) - cfg80211_mgmt_tx_status(wk->sdata->dev, - (unsigned long) wk->offchan_tx.frame, - wk->data, wk->data_len, false, GFP_KERNEL); - - return WORK_DONE_DESTROY; -} - -/* - * [PLATA] - method starting/controlling the TX of Action frames...not required for this version - */ -static int ieee80211_mgmt_tx(struct wiphy *wiphy, struct net_device *dev, - struct ieee80211_channel *chan, bool offchan, - enum nl80211_channel_type channel_type, - bool channel_type_valid, unsigned int wait, - const u8 *buf, size_t len, bool no_cck, - bool dont_wait_for_ack, u64 *cookie) -{ - struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); - struct ieee80211_local *local = sdata->local; - struct sk_buff *skb; - struct sta_info *sta; - struct ieee80211_work *wk; - const struct ieee80211_mgmt *mgmt = (void *)buf; - u32 flags; - bool is_offchan = false; - - if (dont_wait_for_ack) - flags = IEEE80211_TX_CTL_NO_ACK; - else - flags = IEEE80211_TX_INTFL_NL80211_FRAME_TX | - IEEE80211_TX_CTL_REQ_TX_STATUS; - - /* Check that we are on the requested channel for transmission */ - if (chan != local->tmp_channel && - chan != local->oper_channel) - is_offchan = true; - if (channel_type_valid && - (channel_type != local->tmp_channel_type && - channel_type != local->_oper_channel_type)) - is_offchan = true; - - if (chan == local->hw_roc_channel) { - /* TODO: check channel type? */ - is_offchan = false; - flags |= IEEE80211_TX_CTL_TX_OFFCHAN; - } - - if (no_cck) - flags |= IEEE80211_TX_CTL_NO_CCK_RATE; - - if (is_offchan && !offchan) - return -EBUSY; - - switch (sdata->vif.type) { - case NL80211_IFTYPE_ADHOC: - case NL80211_IFTYPE_AP: - case NL80211_IFTYPE_AP_VLAN: - case NL80211_IFTYPE_P2P_GO: - case NL80211_IFTYPE_MESH_POINT: - if (!ieee80211_is_action(mgmt->frame_control) || - mgmt->u.action.category == WLAN_CATEGORY_PUBLIC) - break; - rcu_read_lock(); - sta = sta_info_get(sdata, mgmt->da); - rcu_read_unlock(); - if (!sta) - return -ENOLINK; - break; - case NL80211_IFTYPE_STATION: - case NL80211_IFTYPE_P2P_CLIENT: - break; - default: - return -EOPNOTSUPP; - } - - skb = dev_alloc_skb(local->hw.extra_tx_headroom + len); - if (!skb) - return -ENOMEM; - skb_reserve(skb, local->hw.extra_tx_headroom); - - memcpy(skb_put(skb, len), buf, len); - - IEEE80211_SKB_CB(skb)->flags = flags; - - skb->dev = sdata->dev; - - *cookie = (unsigned long) skb; - - if (is_offchan && local->ops->remain_on_channel) { - unsigned int duration; - int ret; - - mutex_lock(&local->mtx); - /* - * If the duration is zero, then the driver - * wouldn't actually do anything. Set it to - * 100 for now. - * - * TODO: cancel the off-channel operation - * when we get the SKB's TX status and - * the wait time was zero before. - */ - duration = 100; - if (wait) - duration = wait; - ret = ieee80211_remain_on_channel_hw(local, dev, chan, - channel_type, - duration, cookie); - if (ret) { - kfree_skb(skb); - mutex_unlock(&local->mtx); - return ret; - } - - local->hw_roc_for_tx = true; - local->hw_roc_duration = wait; - - /* - * queue up frame for transmission after - * ieee80211_ready_on_channel call - */ - - /* modify cookie to prevent API mismatches */ - *cookie ^= 2; - IEEE80211_SKB_CB(skb)->flags |= IEEE80211_TX_CTL_TX_OFFCHAN; - local->hw_roc_skb = skb; - local->hw_roc_skb_for_status = skb; - mutex_unlock(&local->mtx); - - return 0; - } - - /* - * Can transmit right away if the channel was the - * right one and there's no wait involved... If a - * wait is involved, we might otherwise not be on - * the right channel for long enough! - */ - /* - * [PLATA] either we guarantee we are always all three as true, or we set the flag for OCBActivated - * trying the latter... - * JHNOTE: we do not support action frames now: so we still block them - */ - /*if ((!is_offchan && !wait && !sdata->vif.bss_conf.idle) - || ((local->hw.wiphy->dot11OCBActivated == 1) && (local->hw.flags & IEEE80211_HW_DOT11OCB_SUPPORTED))) { - ieee80211_tx_skb(sdata, skb); - return 0; - }*/ - if (!is_offchan && !wait && !sdata->vif.bss_conf.idle) { - ieee80211_tx_skb(sdata, skb); - return 0; - } - - wk = kzalloc(sizeof(*wk) + len, GFP_KERNEL); - if (!wk) { - kfree_skb(skb); - return -ENOMEM; - } - - wk->type = IEEE80211_WORK_OFFCHANNEL_TX; - wk->chan = chan; - wk->chan_type = channel_type; - wk->sdata = sdata; - wk->done = ieee80211_offchan_tx_done; - wk->offchan_tx.frame = skb; - wk->offchan_tx.wait = wait; - wk->data_len = len; - memcpy(wk->data, buf, len); - - ieee80211_add_work(wk); - return 0; -} - -static int ieee80211_mgmt_tx_cancel_wait(struct wiphy *wiphy, - struct net_device *dev, - u64 cookie) -{ - struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); - struct ieee80211_local *local = sdata->local; - struct ieee80211_work *wk; - int ret = -ENOENT; - - mutex_lock(&local->mtx); - - if (local->ops->cancel_remain_on_channel) { - cookie ^= 2; - ret = ieee80211_cancel_remain_on_channel_hw(local, cookie); - - if (ret == 0) { - kfree_skb(local->hw_roc_skb); - local->hw_roc_skb = NULL; - local->hw_roc_skb_for_status = NULL; - } - - mutex_unlock(&local->mtx); - - return ret; - } - - list_for_each_entry(wk, &local->work_list, list) { - if (wk->sdata != sdata) - continue; - - if (wk->type != IEEE80211_WORK_OFFCHANNEL_TX) - continue; - - if (cookie != (unsigned long) wk->offchan_tx.frame) - continue; - - wk->timeout = jiffies; - - ieee80211_queue_work(&local->hw, &local->work_work); - ret = 0; - break; - } - mutex_unlock(&local->mtx); - - return ret; -} - -static void ieee80211_mgmt_frame_register(struct wiphy *wiphy, - struct net_device *dev, - u16 frame_type, bool reg) -{ - struct ieee80211_local *local = wiphy_priv(wiphy); - - if (frame_type != (IEEE80211_FTYPE_MGMT | IEEE80211_STYPE_PROBE_REQ)) - return; - - if (reg) - local->probe_req_reg++; - else - local->probe_req_reg--; - - ieee80211_queue_work(&local->hw, &local->reconfig_filter); -} - -static int ieee80211_set_antenna(struct wiphy *wiphy, u32 tx_ant, u32 rx_ant) -{ - struct ieee80211_local *local = wiphy_priv(wiphy); - - if (local->started) - return -EOPNOTSUPP; - - return drv_set_antenna(local, tx_ant, rx_ant); -} - -static int ieee80211_get_antenna(struct wiphy *wiphy, u32 *tx_ant, u32 *rx_ant) -{ - struct ieee80211_local *local = wiphy_priv(wiphy); - - return drv_get_antenna(local, tx_ant, rx_ant); -} - -static int ieee80211_set_ringparam(struct wiphy *wiphy, u32 tx, u32 rx) -{ - struct ieee80211_local *local = wiphy_priv(wiphy); - - return drv_set_ringparam(local, tx, rx); -} - -static void ieee80211_get_ringparam(struct wiphy *wiphy, - u32 *tx, u32 *tx_max, u32 *rx, u32 *rx_max) -{ - struct ieee80211_local *local = wiphy_priv(wiphy); - - drv_get_ringparam(local, tx, tx_max, rx, rx_max); -} - -static int ieee80211_set_rekey_data(struct wiphy *wiphy, - struct net_device *dev, - struct cfg80211_gtk_rekey_data *data) -{ - struct ieee80211_local *local = wiphy_priv(wiphy); - struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); - - if (!local->ops->set_rekey_data) - return -EOPNOTSUPP; - - drv_set_rekey_data(local, sdata, data); - - return 0; -} - -static void ieee80211_tdls_add_ext_capab(struct sk_buff *skb) -{ - u8 *pos = (void *)skb_put(skb, 7); - - *pos++ = WLAN_EID_EXT_CAPABILITY; - *pos++ = 5; /* len */ - *pos++ = 0x0; - *pos++ = 0x0; - *pos++ = 0x0; - *pos++ = 0x0; - *pos++ = WLAN_EXT_CAPA5_TDLS_ENABLED; -} - -static u16 ieee80211_get_tdls_sta_capab(struct ieee80211_sub_if_data *sdata) -{ - struct ieee80211_local *local = sdata->local; - u16 capab; - - capab = 0; - if (local->oper_channel->band != IEEE80211_BAND_2GHZ) - return capab; - - if (!(local->hw.flags & IEEE80211_HW_2GHZ_SHORT_SLOT_INCAPABLE)) - capab |= WLAN_CAPABILITY_SHORT_SLOT_TIME; - if (!(local->hw.flags & IEEE80211_HW_2GHZ_SHORT_PREAMBLE_INCAPABLE)) - capab |= WLAN_CAPABILITY_SHORT_PREAMBLE; - - return capab; -} - -static void ieee80211_tdls_add_link_ie(struct sk_buff *skb, u8 *src_addr, - u8 *peer, u8 *bssid) -{ - struct ieee80211_tdls_lnkie *lnkid; - - lnkid = (void *)skb_put(skb, sizeof(struct ieee80211_tdls_lnkie)); - - lnkid->ie_type = WLAN_EID_LINK_ID; - lnkid->ie_len = sizeof(struct ieee80211_tdls_lnkie) - 2; - - memcpy(lnkid->bssid, bssid, ETH_ALEN); - memcpy(lnkid->init_sta, src_addr, ETH_ALEN); - memcpy(lnkid->resp_sta, peer, ETH_ALEN); -} - -static int -ieee80211_prep_tdls_encap_data(struct wiphy *wiphy, struct net_device *dev, - u8 *peer, u8 action_code, u8 dialog_token, - u16 status_code, struct sk_buff *skb) -{ - struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); - struct ieee80211_tdls_data *tf; - - tf = (void *)skb_put(skb, offsetof(struct ieee80211_tdls_data, u)); - - memcpy(tf->da, peer, ETH_ALEN); - memcpy(tf->sa, sdata->vif.addr, ETH_ALEN); - tf->ether_type = cpu_to_be16(ETH_P_TDLS); - tf->payload_type = WLAN_TDLS_SNAP_RFTYPE; - - switch (action_code) { - case WLAN_TDLS_SETUP_REQUEST: - tf->category = WLAN_CATEGORY_TDLS; - tf->action_code = WLAN_TDLS_SETUP_REQUEST; - - skb_put(skb, sizeof(tf->u.setup_req)); - tf->u.setup_req.dialog_token = dialog_token; - tf->u.setup_req.capability = - cpu_to_le16(ieee80211_get_tdls_sta_capab(sdata)); - - ieee80211_add_srates_ie(&sdata->vif, skb); - ieee80211_add_ext_srates_ie(&sdata->vif, skb); - ieee80211_tdls_add_ext_capab(skb); - break; - case WLAN_TDLS_SETUP_RESPONSE: - tf->category = WLAN_CATEGORY_TDLS; - tf->action_code = WLAN_TDLS_SETUP_RESPONSE; - - skb_put(skb, sizeof(tf->u.setup_resp)); - tf->u.setup_resp.status_code = cpu_to_le16(status_code); - tf->u.setup_resp.dialog_token = dialog_token; - tf->u.setup_resp.capability = - cpu_to_le16(ieee80211_get_tdls_sta_capab(sdata)); - - ieee80211_add_srates_ie(&sdata->vif, skb); - ieee80211_add_ext_srates_ie(&sdata->vif, skb); - ieee80211_tdls_add_ext_capab(skb); - break; - case WLAN_TDLS_SETUP_CONFIRM: - tf->category = WLAN_CATEGORY_TDLS; - tf->action_code = WLAN_TDLS_SETUP_CONFIRM; - - skb_put(skb, sizeof(tf->u.setup_cfm)); - tf->u.setup_cfm.status_code = cpu_to_le16(status_code); - tf->u.setup_cfm.dialog_token = dialog_token; - break; - case WLAN_TDLS_TEARDOWN: - tf->category = WLAN_CATEGORY_TDLS; - tf->action_code = WLAN_TDLS_TEARDOWN; - - skb_put(skb, sizeof(tf->u.teardown)); - tf->u.teardown.reason_code = cpu_to_le16(status_code); - break; - case WLAN_TDLS_DISCOVERY_REQUEST: - tf->category = WLAN_CATEGORY_TDLS; - tf->action_code = WLAN_TDLS_DISCOVERY_REQUEST; - - skb_put(skb, sizeof(tf->u.discover_req)); - tf->u.discover_req.dialog_token = dialog_token; - break; - default: - return -EINVAL; - } - - return 0; -} - -static int -ieee80211_prep_tdls_direct(struct wiphy *wiphy, struct net_device *dev, - u8 *peer, u8 action_code, u8 dialog_token, - u16 status_code, struct sk_buff *skb) -{ - struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); - struct ieee80211_mgmt *mgmt; - - mgmt = (void *)skb_put(skb, 24); - memset(mgmt, 0, 24); - memcpy(mgmt->da, peer, ETH_ALEN); - memcpy(mgmt->sa, sdata->vif.addr, ETH_ALEN); - memcpy(mgmt->bssid, sdata->u.mgd.bssid, ETH_ALEN); - - mgmt->frame_control = cpu_to_le16(IEEE80211_FTYPE_MGMT | - IEEE80211_STYPE_ACTION); - - switch (action_code) { - case WLAN_PUB_ACTION_TDLS_DISCOVER_RES: - skb_put(skb, 1 + sizeof(mgmt->u.action.u.tdls_discover_resp)); - mgmt->u.action.category = WLAN_CATEGORY_PUBLIC; - mgmt->u.action.u.tdls_discover_resp.action_code = - WLAN_PUB_ACTION_TDLS_DISCOVER_RES; - mgmt->u.action.u.tdls_discover_resp.dialog_token = - dialog_token; - mgmt->u.action.u.tdls_discover_resp.capability = - cpu_to_le16(ieee80211_get_tdls_sta_capab(sdata)); - - ieee80211_add_srates_ie(&sdata->vif, skb); - ieee80211_add_ext_srates_ie(&sdata->vif, skb); - ieee80211_tdls_add_ext_capab(skb); - break; - default: - return -EINVAL; - } - - return 0; -} - -static int ieee80211_tdls_mgmt(struct wiphy *wiphy, struct net_device *dev, - u8 *peer, u8 action_code, u8 dialog_token, - u16 status_code, const u8 *extra_ies, - size_t extra_ies_len) -{ - struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); - struct ieee80211_local *local = sdata->local; - struct ieee80211_tx_info *info; - struct sk_buff *skb = NULL; - bool send_direct; - int ret; - - if (!(wiphy->flags & WIPHY_FLAG_SUPPORTS_TDLS)) - return -ENOTSUPP; - - /* make sure we are in managed mode, and associated */ - if (sdata->vif.type != NL80211_IFTYPE_STATION || - !sdata->u.mgd.associated) - return -EINVAL; - -#ifdef CONFIG_MAC80211_VERBOSE_TDLS_DEBUG - printk(KERN_DEBUG "TDLS mgmt action %d peer %pM\n", action_code, peer); -#endif - - skb = dev_alloc_skb(local->hw.extra_tx_headroom + - max(sizeof(struct ieee80211_mgmt), - sizeof(struct ieee80211_tdls_data)) + - 50 + /* supported rates */ - 7 + /* ext capab */ - extra_ies_len + - sizeof(struct ieee80211_tdls_lnkie)); - if (!skb) - return -ENOMEM; - - info = IEEE80211_SKB_CB(skb); - skb_reserve(skb, local->hw.extra_tx_headroom); - - switch (action_code) { - case WLAN_TDLS_SETUP_REQUEST: - case WLAN_TDLS_SETUP_RESPONSE: - case WLAN_TDLS_SETUP_CONFIRM: - case WLAN_TDLS_TEARDOWN: - case WLAN_TDLS_DISCOVERY_REQUEST: - ret = ieee80211_prep_tdls_encap_data(wiphy, dev, peer, - action_code, dialog_token, - status_code, skb); - send_direct = false; - break; - case WLAN_PUB_ACTION_TDLS_DISCOVER_RES: - ret = ieee80211_prep_tdls_direct(wiphy, dev, peer, action_code, - dialog_token, status_code, - skb); - send_direct = true; - break; - default: - ret = -ENOTSUPP; - break; - } - - if (ret < 0) - goto fail; - - if (extra_ies_len) - memcpy(skb_put(skb, extra_ies_len), extra_ies, extra_ies_len); - - /* the TDLS link IE is always added last */ - switch (action_code) { - case WLAN_TDLS_SETUP_REQUEST: - case WLAN_TDLS_SETUP_CONFIRM: - case WLAN_TDLS_TEARDOWN: - case WLAN_TDLS_DISCOVERY_REQUEST: - /* we are the initiator */ - ieee80211_tdls_add_link_ie(skb, sdata->vif.addr, peer, - sdata->u.mgd.bssid); - break; - case WLAN_TDLS_SETUP_RESPONSE: - case WLAN_PUB_ACTION_TDLS_DISCOVER_RES: - /* we are the responder */ - ieee80211_tdls_add_link_ie(skb, peer, sdata->vif.addr, - sdata->u.mgd.bssid); - break; - default: - ret = -ENOTSUPP; - goto fail; - } - - if (send_direct) { - ieee80211_tx_skb(sdata, skb); - return 0; - } - - /* - * According to 802.11z: Setup req/resp are sent in AC_BK, otherwise - * we should default to AC_VI. - */ - switch (action_code) { - case WLAN_TDLS_SETUP_REQUEST: - case WLAN_TDLS_SETUP_RESPONSE: - skb_set_queue_mapping(skb, IEEE80211_AC_BK); - skb->priority = 2; - break; - default: - skb_set_queue_mapping(skb, IEEE80211_AC_VI); - skb->priority = 5; - break; - } - - /* disable bottom halves when entering the Tx path */ - local_bh_disable(); - ret = ieee80211_subif_start_xmit(skb, dev); - local_bh_enable(); - - return ret; - -fail: - dev_kfree_skb(skb); - return ret; -} - -static int ieee80211_tdls_oper(struct wiphy *wiphy, struct net_device *dev, - u8 *peer, enum nl80211_tdls_operation oper) -{ - struct sta_info *sta; - struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); - - if (!(wiphy->flags & WIPHY_FLAG_SUPPORTS_TDLS)) - return -ENOTSUPP; - - if (sdata->vif.type != NL80211_IFTYPE_STATION) - return -EINVAL; - -#ifdef CONFIG_MAC80211_VERBOSE_TDLS_DEBUG - printk(KERN_DEBUG "TDLS oper %d peer %pM\n", oper, peer); -#endif - - switch (oper) { - case NL80211_TDLS_ENABLE_LINK: - rcu_read_lock(); - sta = sta_info_get(sdata, peer); - if (!sta) { - rcu_read_unlock(); - return -ENOLINK; - } - - set_sta_flag(sta, WLAN_STA_TDLS_PEER_AUTH); - rcu_read_unlock(); - break; - case NL80211_TDLS_DISABLE_LINK: - return sta_info_destroy_addr(sdata, peer); - case NL80211_TDLS_TEARDOWN: - case NL80211_TDLS_SETUP: - case NL80211_TDLS_DISCOVERY_REQ: - /* We don't support in-driver setup/teardown/discovery */ - return -ENOTSUPP; - default: - return -ENOTSUPP; - } - - return 0; -} - -static int ieee80211_probe_client(struct wiphy *wiphy, struct net_device *dev, - const u8 *peer, u64 *cookie) -{ - struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); - struct ieee80211_local *local = sdata->local; - struct ieee80211_qos_hdr *nullfunc; - struct sk_buff *skb; - int size = sizeof(*nullfunc); - __le16 fc; - bool qos; - struct ieee80211_tx_info *info; - struct sta_info *sta; - - rcu_read_lock(); - sta = sta_info_get(sdata, peer); - if (sta) { - qos = test_sta_flag(sta, WLAN_STA_WME); - rcu_read_unlock(); - } else { - rcu_read_unlock(); - return -ENOLINK; - } - - if (qos) { - fc = cpu_to_le16(IEEE80211_FTYPE_DATA | - IEEE80211_STYPE_QOS_NULLFUNC | - IEEE80211_FCTL_FROMDS); - } else { - size -= 2; - fc = cpu_to_le16(IEEE80211_FTYPE_DATA | - IEEE80211_STYPE_NULLFUNC | - IEEE80211_FCTL_FROMDS); - } - - skb = dev_alloc_skb(local->hw.extra_tx_headroom + size); - if (!skb) - return -ENOMEM; - - skb->dev = dev; - - skb_reserve(skb, local->hw.extra_tx_headroom); - - nullfunc = (void *) skb_put(skb, size); - nullfunc->frame_control = fc; - nullfunc->duration_id = 0; - memcpy(nullfunc->addr1, sta->sta.addr, ETH_ALEN); - memcpy(nullfunc->addr2, sdata->vif.addr, ETH_ALEN); - memcpy(nullfunc->addr3, sdata->vif.addr, ETH_ALEN); - nullfunc->seq_ctrl = 0; - - info = IEEE80211_SKB_CB(skb); - - info->flags |= IEEE80211_TX_CTL_REQ_TX_STATUS | - IEEE80211_TX_INTFL_NL80211_FRAME_TX; - - skb_set_queue_mapping(skb, IEEE80211_AC_VO); - skb->priority = 7; - if (qos) - nullfunc->qos_ctrl = cpu_to_le16(7); - - local_bh_disable(); - ieee80211_xmit(sdata, skb); - local_bh_enable(); - - *cookie = (unsigned long) skb; - return 0; -} - -static struct ieee80211_channel * -ieee80211_wiphy_get_channel(struct wiphy *wiphy) -{ - struct ieee80211_local *local = wiphy_priv(wiphy); - - return local->oper_channel; -} - -struct cfg80211_ops mac80211_config_ops = { - .add_virtual_intf = ieee80211_add_iface, - .del_virtual_intf = ieee80211_del_iface, - .change_virtual_intf = ieee80211_change_iface, - .add_key = ieee80211_add_key, - .del_key = ieee80211_del_key, - .get_key = ieee80211_get_key, - .set_default_key = ieee80211_config_default_key, - .set_default_mgmt_key = ieee80211_config_default_mgmt_key, - .start_ap = ieee80211_start_ap, - .change_beacon = ieee80211_change_beacon, - .stop_ap = ieee80211_stop_ap, - .add_station = ieee80211_add_station, - .del_station = ieee80211_del_station, - .change_station = ieee80211_change_station, - .get_station = ieee80211_get_station, - .dump_station = ieee80211_dump_station, - .dump_survey = ieee80211_dump_survey, -#ifdef CONFIG_MAC80211_MESH - .add_mpath = ieee80211_add_mpath, - .del_mpath = ieee80211_del_mpath, - .change_mpath = ieee80211_change_mpath, - .get_mpath = ieee80211_get_mpath, - .dump_mpath = ieee80211_dump_mpath, - .update_mesh_config = ieee80211_update_mesh_config, - .get_mesh_config = ieee80211_get_mesh_config, - .join_mesh = ieee80211_join_mesh, - .leave_mesh = ieee80211_leave_mesh, -#endif - .change_bss = ieee80211_change_bss, - .set_txq_params = ieee80211_set_txq_params, - .set_channel = ieee80211_set_channel, - .suspend = ieee80211_suspend, - .resume = ieee80211_resume, - .scan = ieee80211_scan, - .sched_scan_start = ieee80211_sched_scan_start, - .sched_scan_stop = ieee80211_sched_scan_stop, - .auth = ieee80211_auth, - .assoc = ieee80211_assoc, - .deauth = ieee80211_deauth, - .disassoc = ieee80211_disassoc, - .join_ibss = ieee80211_join_ibss, - .leave_ibss = ieee80211_leave_ibss, - .set_wiphy_params = ieee80211_set_wiphy_params, - .set_tx_power = ieee80211_set_tx_power, - .get_tx_power = ieee80211_get_tx_power, - .set_wds_peer = ieee80211_set_wds_peer, - .rfkill_poll = ieee80211_rfkill_poll, - CFG80211_TESTMODE_CMD(ieee80211_testmode_cmd) - CFG80211_TESTMODE_DUMP(ieee80211_testmode_dump) - .set_power_mgmt = ieee80211_set_power_mgmt, - .set_bitrate_mask = ieee80211_set_bitrate_mask, - .remain_on_channel = ieee80211_remain_on_channel, - .cancel_remain_on_channel = ieee80211_cancel_remain_on_channel, - .mgmt_tx = ieee80211_mgmt_tx, - .mgmt_tx_cancel_wait = ieee80211_mgmt_tx_cancel_wait, - .set_cqm_rssi_config = ieee80211_set_cqm_rssi_config, - .mgmt_frame_register = ieee80211_mgmt_frame_register, - .set_antenna = ieee80211_set_antenna, - .get_antenna = ieee80211_get_antenna, - .set_ringparam = ieee80211_set_ringparam, - .get_ringparam = ieee80211_get_ringparam, - .set_rekey_data = ieee80211_set_rekey_data, - .tdls_oper = ieee80211_tdls_oper, - .tdls_mgmt = ieee80211_tdls_mgmt, - .probe_client = ieee80211_probe_client, - .get_channel = ieee80211_wiphy_get_channel, - .set_noack_map = ieee80211_set_noack_map, -}; diff --git a/openairITS/mac/DOT11/net/mac80211/cfg.h b/openairITS/mac/DOT11/net/mac80211/cfg.h deleted file mode 100644 index 7d7879f5b0..0000000000 --- a/openairITS/mac/DOT11/net/mac80211/cfg.h +++ /dev/null @@ -1,9 +0,0 @@ -/* - * mac80211 configuration hooks for cfg80211 - */ -#ifndef __CFG_H -#define __CFG_H - -extern struct cfg80211_ops mac80211_config_ops; - -#endif /* __CFG_H */ diff --git a/openairITS/mac/DOT11/net/mac80211/chan.c b/openairITS/mac/DOT11/net/mac80211/chan.c deleted file mode 100644 index e00ce8c3e2..0000000000 --- a/openairITS/mac/DOT11/net/mac80211/chan.c +++ /dev/null @@ -1,163 +0,0 @@ -/* - * mac80211 - channel management - */ - -#include -#include -#include "ieee80211_i.h" - -static enum ieee80211_chan_mode -__ieee80211_get_channel_mode(struct ieee80211_local *local, - struct ieee80211_sub_if_data *ignore) -{ - struct ieee80211_sub_if_data *sdata; - - lockdep_assert_held(&local->iflist_mtx); - - list_for_each_entry(sdata, &local->interfaces, list) { - if (sdata == ignore) - continue; - - if (!ieee80211_sdata_running(sdata)) - continue; - - switch (sdata->vif.type) { - case NL80211_IFTYPE_MONITOR: - continue; - case NL80211_IFTYPE_STATION: - if (!sdata->u.mgd.associated) - continue; - break; - case NL80211_IFTYPE_ADHOC: - if (!sdata->u.ibss.ssid_len) - continue; - if (!sdata->u.ibss.fixed_channel) - return CHAN_MODE_HOPPING; - break; - case NL80211_IFTYPE_AP_VLAN: - /* will also have _AP interface */ - continue; - case NL80211_IFTYPE_AP: - if (!sdata->u.ap.beacon) - continue; - break; - default: - break; - } - - return CHAN_MODE_FIXED; - } - - return CHAN_MODE_UNDEFINED; -} - -enum ieee80211_chan_mode -ieee80211_get_channel_mode(struct ieee80211_local *local, - struct ieee80211_sub_if_data *ignore) -{ - enum ieee80211_chan_mode mode; - - mutex_lock(&local->iflist_mtx); - mode = __ieee80211_get_channel_mode(local, ignore); - mutex_unlock(&local->iflist_mtx); - - return mode; -} - -bool ieee80211_set_channel_type(struct ieee80211_local *local, - struct ieee80211_sub_if_data *sdata, - enum nl80211_channel_type chantype) -{ - struct ieee80211_sub_if_data *tmp; - enum nl80211_channel_type superchan = NL80211_CHAN_NO_HT; - bool result; - - mutex_lock(&local->iflist_mtx); - - list_for_each_entry(tmp, &local->interfaces, list) { - if (tmp == sdata) - continue; - - if (!ieee80211_sdata_running(tmp)) - continue; - - switch (tmp->vif.bss_conf.channel_type) { - case NL80211_CHAN_NO_HT: - case NL80211_CHAN_HT20: - if (superchan > tmp->vif.bss_conf.channel_type) - break; - - superchan = tmp->vif.bss_conf.channel_type; - break; - case NL80211_CHAN_HT40PLUS: - WARN_ON(superchan == NL80211_CHAN_HT40MINUS); - superchan = NL80211_CHAN_HT40PLUS; - break; - case NL80211_CHAN_HT40MINUS: - WARN_ON(superchan == NL80211_CHAN_HT40PLUS); - superchan = NL80211_CHAN_HT40MINUS; - break; - } - } - - switch (superchan) { - case NL80211_CHAN_NO_HT: - case NL80211_CHAN_HT20: - /* - * allow any change that doesn't go to no-HT - * (if it already is no-HT no change is needed) - */ - if (chantype == NL80211_CHAN_NO_HT) - break; - superchan = chantype; - break; - case NL80211_CHAN_HT40PLUS: - case NL80211_CHAN_HT40MINUS: - /* allow smaller bandwidth and same */ - if (chantype == NL80211_CHAN_NO_HT) - break; - if (chantype == NL80211_CHAN_HT20) - break; - if (superchan == chantype) - break; - result = false; - goto out; - } - - local->_oper_channel_type = superchan; - - if (sdata) - sdata->vif.bss_conf.channel_type = chantype; - - result = true; - out: - mutex_unlock(&local->iflist_mtx); - - return result; -} - -/* - * ieee80211_get_tx_channel_type returns the channel type we should - * use for packet transmission, given the channel capability and - * whatever regulatory flags we have been given. - */ -enum nl80211_channel_type ieee80211_get_tx_channel_type( - struct ieee80211_local *local, - enum nl80211_channel_type channel_type) -{ - switch (channel_type) { - case NL80211_CHAN_HT40PLUS: - if (local->hw.conf.channel->flags & - IEEE80211_CHAN_NO_HT40PLUS) - return NL80211_CHAN_HT20; - break; - case NL80211_CHAN_HT40MINUS: - if (local->hw.conf.channel->flags & - IEEE80211_CHAN_NO_HT40MINUS) - return NL80211_CHAN_HT20; - break; - default: - break; - } - return channel_type; -} diff --git a/openairITS/mac/DOT11/net/mac80211/debugfs.c b/openairITS/mac/DOT11/net/mac80211/debugfs.c deleted file mode 100644 index 778e5916d7..0000000000 --- a/openairITS/mac/DOT11/net/mac80211/debugfs.c +++ /dev/null @@ -1,347 +0,0 @@ - -/* - * mac80211 debugfs for wireless PHYs - * - * Copyright 2007 Johannes Berg - * - * GPLv2 - * - */ - -#include -#include -#include "ieee80211_i.h" -#include "driver-ops.h" -#include "rate.h" -#include "debugfs.h" - -#define DEBUGFS_FORMAT_BUFFER_SIZE 100 - -int mac80211_format_buffer(char __user *userbuf, size_t count, - loff_t *ppos, char *fmt, ...) -{ - va_list args; - char buf[DEBUGFS_FORMAT_BUFFER_SIZE]; - int res; - - va_start(args, fmt); - res = vscnprintf(buf, sizeof(buf), fmt, args); - va_end(args); - - return simple_read_from_buffer(userbuf, count, ppos, buf, res); -} - -#define DEBUGFS_READONLY_FILE_FN(name, fmt, value...) \ -static ssize_t name## _read(struct file *file, char __user *userbuf, \ - size_t count, loff_t *ppos) \ -{ \ - struct ieee80211_local *local = file->private_data; \ - \ - return mac80211_format_buffer(userbuf, count, ppos, \ - fmt "\n", ##value); \ -} - -#define DEBUGFS_READONLY_FILE_OPS(name) \ -static const struct file_operations name## _ops = { \ - .read = name## _read, \ - .open = simple_open, \ - .llseek = generic_file_llseek, \ -}; - -#define DEBUGFS_READONLY_FILE(name, fmt, value...) \ - DEBUGFS_READONLY_FILE_FN(name, fmt, value) \ - DEBUGFS_READONLY_FILE_OPS(name) - -#define DEBUGFS_ADD(name) \ - debugfs_create_file(#name, 0400, phyd, local, &name## _ops); - -#define DEBUGFS_ADD_MODE(name, mode) \ - debugfs_create_file(#name, mode, phyd, local, &name## _ops); - - -DEBUGFS_READONLY_FILE(user_power, "%d", - local->user_power_level); -DEBUGFS_READONLY_FILE(power, "%d", - local->hw.conf.power_level); -DEBUGFS_READONLY_FILE(frequency, "%d", - local->hw.conf.channel->center_freq); -DEBUGFS_READONLY_FILE(total_ps_buffered, "%d", - local->total_ps_buffered); -DEBUGFS_READONLY_FILE(wep_iv, "%#08x", - local->wep_iv & 0xffffff); -DEBUGFS_READONLY_FILE(rate_ctrl_alg, "%s", - local->rate_ctrl ? local->rate_ctrl->ops->name : "hw/driver"); - -static ssize_t reset_write(struct file *file, const char __user *user_buf, - size_t count, loff_t *ppos) -{ - struct ieee80211_local *local = file->private_data; - - rtnl_lock(); - __ieee80211_suspend(&local->hw, NULL); - __ieee80211_resume(&local->hw); - rtnl_unlock(); - - return count; -} - -static const struct file_operations reset_ops = { - .write = reset_write, - .open = simple_open, - .llseek = noop_llseek, -}; - -static ssize_t channel_type_read(struct file *file, char __user *user_buf, - size_t count, loff_t *ppos) -{ - struct ieee80211_local *local = file->private_data; - const char *buf; - - switch (local->hw.conf.channel_type) { - case NL80211_CHAN_NO_HT: - buf = "no ht\n"; - break; - case NL80211_CHAN_HT20: - buf = "ht20\n"; - break; - case NL80211_CHAN_HT40MINUS: - buf = "ht40-\n"; - break; - case NL80211_CHAN_HT40PLUS: - buf = "ht40+\n"; - break; - default: - buf = "???"; - break; - } - - return simple_read_from_buffer(user_buf, count, ppos, buf, strlen(buf)); -} - -static ssize_t hwflags_read(struct file *file, char __user *user_buf, - size_t count, loff_t *ppos) -{ - struct ieee80211_local *local = file->private_data; - int mxln = 500; - ssize_t rv; - char *buf = kzalloc(mxln, GFP_KERNEL); - int sf = 0; /* how many written so far */ - - if (!buf) - return 0; - - sf += snprintf(buf, mxln - sf, "0x%x\n", local->hw.flags); - if (local->hw.flags & IEEE80211_HW_HAS_RATE_CONTROL) - sf += snprintf(buf + sf, mxln - sf, "HAS_RATE_CONTROL\n"); - if (local->hw.flags & IEEE80211_HW_RX_INCLUDES_FCS) - sf += snprintf(buf + sf, mxln - sf, "RX_INCLUDES_FCS\n"); - if (local->hw.flags & IEEE80211_HW_HOST_BROADCAST_PS_BUFFERING) - sf += snprintf(buf + sf, mxln - sf, - "HOST_BCAST_PS_BUFFERING\n"); - if (local->hw.flags & IEEE80211_HW_2GHZ_SHORT_SLOT_INCAPABLE) - sf += snprintf(buf + sf, mxln - sf, - "2GHZ_SHORT_SLOT_INCAPABLE\n"); - if (local->hw.flags & IEEE80211_HW_2GHZ_SHORT_PREAMBLE_INCAPABLE) - sf += snprintf(buf + sf, mxln - sf, - "2GHZ_SHORT_PREAMBLE_INCAPABLE\n"); - if (local->hw.flags & IEEE80211_HW_SIGNAL_UNSPEC) - sf += snprintf(buf + sf, mxln - sf, "SIGNAL_UNSPEC\n"); - if (local->hw.flags & IEEE80211_HW_SIGNAL_DBM) - sf += snprintf(buf + sf, mxln - sf, "SIGNAL_DBM\n"); - if (local->hw.flags & IEEE80211_HW_NEED_DTIM_PERIOD) - sf += snprintf(buf + sf, mxln - sf, "NEED_DTIM_PERIOD\n"); - if (local->hw.flags & IEEE80211_HW_SPECTRUM_MGMT) - sf += snprintf(buf + sf, mxln - sf, "SPECTRUM_MGMT\n"); - if (local->hw.flags & IEEE80211_HW_AMPDU_AGGREGATION) - sf += snprintf(buf + sf, mxln - sf, "AMPDU_AGGREGATION\n"); - if (local->hw.flags & IEEE80211_HW_SUPPORTS_PS) - sf += snprintf(buf + sf, mxln - sf, "SUPPORTS_PS\n"); - if (local->hw.flags & IEEE80211_HW_PS_NULLFUNC_STACK) - sf += snprintf(buf + sf, mxln - sf, "PS_NULLFUNC_STACK\n"); - if (local->hw.flags & IEEE80211_HW_SUPPORTS_DYNAMIC_PS) - sf += snprintf(buf + sf, mxln - sf, "SUPPORTS_DYNAMIC_PS\n"); - if (local->hw.flags & IEEE80211_HW_MFP_CAPABLE) - sf += snprintf(buf + sf, mxln - sf, "MFP_CAPABLE\n"); - if (local->hw.flags & IEEE80211_HW_SUPPORTS_STATIC_SMPS) - sf += snprintf(buf + sf, mxln - sf, "SUPPORTS_STATIC_SMPS\n"); - if (local->hw.flags & IEEE80211_HW_SUPPORTS_DYNAMIC_SMPS) - sf += snprintf(buf + sf, mxln - sf, "SUPPORTS_DYNAMIC_SMPS\n"); - if (local->hw.flags & IEEE80211_HW_SUPPORTS_UAPSD) - sf += snprintf(buf + sf, mxln - sf, "SUPPORTS_UAPSD\n"); - if (local->hw.flags & IEEE80211_HW_REPORTS_TX_ACK_STATUS) - sf += snprintf(buf + sf, mxln - sf, "REPORTS_TX_ACK_STATUS\n"); - if (local->hw.flags & IEEE80211_HW_CONNECTION_MONITOR) - sf += snprintf(buf + sf, mxln - sf, "CONNECTION_MONITOR\n"); - if (local->hw.flags & IEEE80211_HW_SUPPORTS_PER_STA_GTK) - sf += snprintf(buf + sf, mxln - sf, "SUPPORTS_PER_STA_GTK\n"); - if (local->hw.flags & IEEE80211_HW_AP_LINK_PS) - sf += snprintf(buf + sf, mxln - sf, "AP_LINK_PS\n"); - if (local->hw.flags & IEEE80211_HW_TX_AMPDU_SETUP_IN_HW) - sf += snprintf(buf + sf, mxln - sf, "TX_AMPDU_SETUP_IN_HW\n"); - if (local->hw.flags & IEEE80211_HW_SCAN_WHILE_IDLE) - sf += snprintf(buf + sf, mxln - sf, "SCAN_WHILE_IDLE\n"); - - rv = simple_read_from_buffer(user_buf, count, ppos, buf, strlen(buf)); - kfree(buf); - return rv; -} - -static ssize_t queues_read(struct file *file, char __user *user_buf, - size_t count, loff_t *ppos) -{ - struct ieee80211_local *local = file->private_data; - unsigned long flags; - char buf[IEEE80211_MAX_QUEUES * 20]; - int q, res = 0; - - spin_lock_irqsave(&local->queue_stop_reason_lock, flags); - for (q = 0; q < local->hw.queues; q++) - res += sprintf(buf + res, "%02d: %#.8lx/%d\n", q, - local->queue_stop_reasons[q], - skb_queue_len(&local->pending[q])); - spin_unlock_irqrestore(&local->queue_stop_reason_lock, flags); - - return simple_read_from_buffer(user_buf, count, ppos, buf, res); -} - -DEBUGFS_READONLY_FILE_OPS(hwflags); -DEBUGFS_READONLY_FILE_OPS(channel_type); -DEBUGFS_READONLY_FILE_OPS(queues); - -/* statistics stuff */ - -static ssize_t format_devstat_counter(struct ieee80211_local *local, - char __user *userbuf, - size_t count, loff_t *ppos, - int (*printvalue)(struct ieee80211_low_level_stats *stats, char *buf, - int buflen)) -{ - struct ieee80211_low_level_stats stats; - char buf[20]; - int res; - - rtnl_lock(); - res = drv_get_stats(local, &stats); - rtnl_unlock(); - if (res) - return res; - res = printvalue(&stats, buf, sizeof(buf)); - return simple_read_from_buffer(userbuf, count, ppos, buf, res); -} - -#define DEBUGFS_DEVSTATS_FILE(name) \ -static int print_devstats_##name(struct ieee80211_low_level_stats *stats,\ - char *buf, int buflen) \ -{ \ - return scnprintf(buf, buflen, "%u\n", stats->name); \ -} \ -static ssize_t stats_ ##name## _read(struct file *file, \ - char __user *userbuf, \ - size_t count, loff_t *ppos) \ -{ \ - return format_devstat_counter(file->private_data, \ - userbuf, \ - count, \ - ppos, \ - print_devstats_##name); \ -} \ - \ -static const struct file_operations stats_ ##name## _ops = { \ - .read = stats_ ##name## _read, \ - .open = simple_open, \ - .llseek = generic_file_llseek, \ -}; - -#define DEBUGFS_STATS_ADD(name, field) \ - debugfs_create_u32(#name, 0400, statsd, (u32 *) &field); -#define DEBUGFS_DEVSTATS_ADD(name) \ - debugfs_create_file(#name, 0400, statsd, local, &stats_ ##name## _ops); - -DEBUGFS_DEVSTATS_FILE(dot11ACKFailureCount); -DEBUGFS_DEVSTATS_FILE(dot11RTSFailureCount); -DEBUGFS_DEVSTATS_FILE(dot11FCSErrorCount); -DEBUGFS_DEVSTATS_FILE(dot11RTSSuccessCount); - -void debugfs_hw_add(struct ieee80211_local *local) -{ - struct dentry *phyd = local->hw.wiphy->debugfsdir; - struct dentry *statsd; - - if (!phyd) - return; - - local->debugfs.keys = debugfs_create_dir("keys", phyd); - - DEBUGFS_ADD(frequency); - DEBUGFS_ADD(total_ps_buffered); - DEBUGFS_ADD(wep_iv); - DEBUGFS_ADD(queues); - DEBUGFS_ADD_MODE(reset, 0200); - DEBUGFS_ADD(channel_type); - DEBUGFS_ADD(hwflags); - DEBUGFS_ADD(user_power); - DEBUGFS_ADD(power); - - statsd = debugfs_create_dir("statistics", phyd); - - /* if the dir failed, don't put all the other things into the root! */ - if (!statsd) - return; - - DEBUGFS_STATS_ADD(transmitted_fragment_count, - local->dot11TransmittedFragmentCount); - DEBUGFS_STATS_ADD(multicast_transmitted_frame_count, - local->dot11MulticastTransmittedFrameCount); - DEBUGFS_STATS_ADD(failed_count, local->dot11FailedCount); - DEBUGFS_STATS_ADD(retry_count, local->dot11RetryCount); - DEBUGFS_STATS_ADD(multiple_retry_count, - local->dot11MultipleRetryCount); - DEBUGFS_STATS_ADD(frame_duplicate_count, - local->dot11FrameDuplicateCount); - DEBUGFS_STATS_ADD(received_fragment_count, - local->dot11ReceivedFragmentCount); - DEBUGFS_STATS_ADD(multicast_received_frame_count, - local->dot11MulticastReceivedFrameCount); - DEBUGFS_STATS_ADD(transmitted_frame_count, - local->dot11TransmittedFrameCount); -#ifdef CONFIG_MAC80211_DEBUG_COUNTERS - DEBUGFS_STATS_ADD(tx_handlers_drop, local->tx_handlers_drop); - DEBUGFS_STATS_ADD(tx_handlers_queued, local->tx_handlers_queued); - DEBUGFS_STATS_ADD(tx_handlers_drop_unencrypted, - local->tx_handlers_drop_unencrypted); - DEBUGFS_STATS_ADD(tx_handlers_drop_fragment, - local->tx_handlers_drop_fragment); - DEBUGFS_STATS_ADD(tx_handlers_drop_wep, - local->tx_handlers_drop_wep); - DEBUGFS_STATS_ADD(tx_handlers_drop_not_assoc, - local->tx_handlers_drop_not_assoc); - DEBUGFS_STATS_ADD(tx_handlers_drop_unauth_port, - local->tx_handlers_drop_unauth_port); - DEBUGFS_STATS_ADD(rx_handlers_drop, local->rx_handlers_drop); - DEBUGFS_STATS_ADD(rx_handlers_queued, local->rx_handlers_queued); - DEBUGFS_STATS_ADD(rx_handlers_drop_nullfunc, - local->rx_handlers_drop_nullfunc); - DEBUGFS_STATS_ADD(rx_handlers_drop_defrag, - local->rx_handlers_drop_defrag); - DEBUGFS_STATS_ADD(rx_handlers_drop_short, - local->rx_handlers_drop_short); - DEBUGFS_STATS_ADD(rx_handlers_drop_passive_scan, - local->rx_handlers_drop_passive_scan); - DEBUGFS_STATS_ADD(tx_expand_skb_head, - local->tx_expand_skb_head); - DEBUGFS_STATS_ADD(tx_expand_skb_head_cloned, - local->tx_expand_skb_head_cloned); - DEBUGFS_STATS_ADD(rx_expand_skb_head, - local->rx_expand_skb_head); - DEBUGFS_STATS_ADD(rx_expand_skb_head2, - local->rx_expand_skb_head2); - DEBUGFS_STATS_ADD(rx_handlers_fragments, - local->rx_handlers_fragments); - DEBUGFS_STATS_ADD(tx_status_drop, - local->tx_status_drop); -#endif - DEBUGFS_DEVSTATS_ADD(dot11ACKFailureCount); - DEBUGFS_DEVSTATS_ADD(dot11RTSFailureCount); - DEBUGFS_DEVSTATS_ADD(dot11FCSErrorCount); - DEBUGFS_DEVSTATS_ADD(dot11RTSSuccessCount); -} diff --git a/openairITS/mac/DOT11/net/mac80211/debugfs.h b/openairITS/mac/DOT11/net/mac80211/debugfs.h deleted file mode 100644 index 9be4e6d71d..0000000000 --- a/openairITS/mac/DOT11/net/mac80211/debugfs.h +++ /dev/null @@ -1,14 +0,0 @@ -#ifndef __MAC80211_DEBUGFS_H -#define __MAC80211_DEBUGFS_H - -#ifdef CONFIG_MAC80211_DEBUGFS -extern void debugfs_hw_add(struct ieee80211_local *local); -extern int mac80211_format_buffer(char __user *userbuf, size_t count, - loff_t *ppos, char *fmt, ...); -#else -static inline void debugfs_hw_add(struct ieee80211_local *local) -{ -} -#endif - -#endif /* __MAC80211_DEBUGFS_H */ diff --git a/openairITS/mac/DOT11/net/mac80211/debugfs_key.c b/openairITS/mac/DOT11/net/mac80211/debugfs_key.c deleted file mode 100644 index 7932767bb4..0000000000 --- a/openairITS/mac/DOT11/net/mac80211/debugfs_key.c +++ /dev/null @@ -1,344 +0,0 @@ -/* - * Copyright 2003-2005 Devicescape Software, Inc. - * Copyright (c) 2006 Jiri Benc - * Copyright 2007 Johannes Berg - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - */ - -#include -#include -#include "ieee80211_i.h" -#include "key.h" -#include "debugfs.h" -#include "debugfs_key.h" - -#define KEY_READ(name, prop, format_string) \ -static ssize_t key_##name##_read(struct file *file, \ - char __user *userbuf, \ - size_t count, loff_t *ppos) \ -{ \ - struct ieee80211_key *key = file->private_data; \ - return mac80211_format_buffer(userbuf, count, ppos, \ - format_string, key->prop); \ -} -#define KEY_READ_D(name) KEY_READ(name, name, "%d\n") -#define KEY_READ_X(name) KEY_READ(name, name, "0x%x\n") - -#define KEY_OPS(name) \ -static const struct file_operations key_ ##name## _ops = { \ - .read = key_##name##_read, \ - .open = simple_open, \ - .llseek = generic_file_llseek, \ -} - -#define KEY_FILE(name, format) \ - KEY_READ_##format(name) \ - KEY_OPS(name) - -#define KEY_CONF_READ(name, format_string) \ - KEY_READ(conf_##name, conf.name, format_string) -#define KEY_CONF_READ_D(name) KEY_CONF_READ(name, "%d\n") - -#define KEY_CONF_OPS(name) \ -static const struct file_operations key_ ##name## _ops = { \ - .read = key_conf_##name##_read, \ - .open = simple_open, \ - .llseek = generic_file_llseek, \ -} - -#define KEY_CONF_FILE(name, format) \ - KEY_CONF_READ_##format(name) \ - KEY_CONF_OPS(name) - -KEY_CONF_FILE(keylen, D); -KEY_CONF_FILE(keyidx, D); -KEY_CONF_FILE(hw_key_idx, D); -KEY_FILE(flags, X); -KEY_FILE(tx_rx_count, D); -KEY_READ(ifindex, sdata->name, "%s\n"); -KEY_OPS(ifindex); - -static ssize_t key_algorithm_read(struct file *file, - char __user *userbuf, - size_t count, loff_t *ppos) -{ - char buf[15]; - struct ieee80211_key *key = file->private_data; - u32 c = key->conf.cipher; - - sprintf(buf, "%.2x-%.2x-%.2x:%d\n", - c >> 24, (c >> 16) & 0xff, (c >> 8) & 0xff, c & 0xff); - return simple_read_from_buffer(userbuf, count, ppos, buf, strlen(buf)); -} -KEY_OPS(algorithm); - -static ssize_t key_tx_spec_read(struct file *file, char __user *userbuf, - size_t count, loff_t *ppos) -{ - u64 pn; - char buf[20]; - int len; - struct ieee80211_key *key = file->private_data; - - switch (key->conf.cipher) { - case WLAN_CIPHER_SUITE_WEP40: - case WLAN_CIPHER_SUITE_WEP104: - len = scnprintf(buf, sizeof(buf), "\n"); - break; - case WLAN_CIPHER_SUITE_TKIP: - len = scnprintf(buf, sizeof(buf), "%08x %04x\n", - key->u.tkip.tx.iv32, - key->u.tkip.tx.iv16); - break; - case WLAN_CIPHER_SUITE_CCMP: - pn = atomic64_read(&key->u.ccmp.tx_pn); - len = scnprintf(buf, sizeof(buf), "%02x%02x%02x%02x%02x%02x\n", - (u8)(pn >> 40), (u8)(pn >> 32), (u8)(pn >> 24), - (u8)(pn >> 16), (u8)(pn >> 8), (u8)pn); - break; - case WLAN_CIPHER_SUITE_AES_CMAC: - pn = atomic64_read(&key->u.aes_cmac.tx_pn); - len = scnprintf(buf, sizeof(buf), "%02x%02x%02x%02x%02x%02x\n", - (u8)(pn >> 40), (u8)(pn >> 32), (u8)(pn >> 24), - (u8)(pn >> 16), (u8)(pn >> 8), (u8)pn); - break; - default: - return 0; - } - return simple_read_from_buffer(userbuf, count, ppos, buf, len); -} -KEY_OPS(tx_spec); - -static ssize_t key_rx_spec_read(struct file *file, char __user *userbuf, - size_t count, loff_t *ppos) -{ - struct ieee80211_key *key = file->private_data; - char buf[14*NUM_RX_DATA_QUEUES+1], *p = buf; - int i, len; - const u8 *rpn; - - switch (key->conf.cipher) { - case WLAN_CIPHER_SUITE_WEP40: - case WLAN_CIPHER_SUITE_WEP104: - len = scnprintf(buf, sizeof(buf), "\n"); - break; - case WLAN_CIPHER_SUITE_TKIP: - for (i = 0; i < NUM_RX_DATA_QUEUES; i++) - p += scnprintf(p, sizeof(buf)+buf-p, - "%08x %04x\n", - key->u.tkip.rx[i].iv32, - key->u.tkip.rx[i].iv16); - len = p - buf; - break; - case WLAN_CIPHER_SUITE_CCMP: - for (i = 0; i < NUM_RX_DATA_QUEUES + 1; i++) { - rpn = key->u.ccmp.rx_pn[i]; - p += scnprintf(p, sizeof(buf)+buf-p, - "%02x%02x%02x%02x%02x%02x\n", - rpn[0], rpn[1], rpn[2], - rpn[3], rpn[4], rpn[5]); - } - len = p - buf; - break; - case WLAN_CIPHER_SUITE_AES_CMAC: - rpn = key->u.aes_cmac.rx_pn; - p += scnprintf(p, sizeof(buf)+buf-p, - "%02x%02x%02x%02x%02x%02x\n", - rpn[0], rpn[1], rpn[2], - rpn[3], rpn[4], rpn[5]); - len = p - buf; - break; - default: - return 0; - } - return simple_read_from_buffer(userbuf, count, ppos, buf, len); -} -KEY_OPS(rx_spec); - -static ssize_t key_replays_read(struct file *file, char __user *userbuf, - size_t count, loff_t *ppos) -{ - struct ieee80211_key *key = file->private_data; - char buf[20]; - int len; - - switch (key->conf.cipher) { - case WLAN_CIPHER_SUITE_CCMP: - len = scnprintf(buf, sizeof(buf), "%u\n", key->u.ccmp.replays); - break; - case WLAN_CIPHER_SUITE_AES_CMAC: - len = scnprintf(buf, sizeof(buf), "%u\n", - key->u.aes_cmac.replays); - break; - default: - return 0; - } - return simple_read_from_buffer(userbuf, count, ppos, buf, len); -} -KEY_OPS(replays); - -static ssize_t key_icverrors_read(struct file *file, char __user *userbuf, - size_t count, loff_t *ppos) -{ - struct ieee80211_key *key = file->private_data; - char buf[20]; - int len; - - switch (key->conf.cipher) { - case WLAN_CIPHER_SUITE_AES_CMAC: - len = scnprintf(buf, sizeof(buf), "%u\n", - key->u.aes_cmac.icverrors); - break; - default: - return 0; - } - return simple_read_from_buffer(userbuf, count, ppos, buf, len); -} -KEY_OPS(icverrors); - -static ssize_t key_key_read(struct file *file, char __user *userbuf, - size_t count, loff_t *ppos) -{ - struct ieee80211_key *key = file->private_data; - int i, bufsize = 2 * key->conf.keylen + 2; - char *buf = kmalloc(bufsize, GFP_KERNEL); - char *p = buf; - ssize_t res; - - if (!buf) - return -ENOMEM; - - for (i = 0; i < key->conf.keylen; i++) - p += scnprintf(p, bufsize + buf - p, "%02x", key->conf.key[i]); - p += scnprintf(p, bufsize+buf-p, "\n"); - res = simple_read_from_buffer(userbuf, count, ppos, buf, p - buf); - kfree(buf); - return res; -} -KEY_OPS(key); - -#define DEBUGFS_ADD(name) \ - debugfs_create_file(#name, 0400, key->debugfs.dir, \ - key, &key_##name##_ops); - -void ieee80211_debugfs_key_add(struct ieee80211_key *key) -{ - static int keycount; - char buf[100]; - struct sta_info *sta; - - if (!key->local->debugfs.keys) - return; - - sprintf(buf, "%d", keycount); - key->debugfs.cnt = keycount; - keycount++; - key->debugfs.dir = debugfs_create_dir(buf, - key->local->debugfs.keys); - - if (!key->debugfs.dir) - return; - - sta = key->sta; - if (sta) { - sprintf(buf, "../../netdev:%s/stations/%pM", - sta->sdata->name, sta->sta.addr); - key->debugfs.stalink = - debugfs_create_symlink("station", key->debugfs.dir, buf); - } - - DEBUGFS_ADD(keylen); - DEBUGFS_ADD(flags); - DEBUGFS_ADD(keyidx); - DEBUGFS_ADD(hw_key_idx); - DEBUGFS_ADD(tx_rx_count); - DEBUGFS_ADD(algorithm); - DEBUGFS_ADD(tx_spec); - DEBUGFS_ADD(rx_spec); - DEBUGFS_ADD(replays); - DEBUGFS_ADD(icverrors); - DEBUGFS_ADD(key); - DEBUGFS_ADD(ifindex); -}; - -void ieee80211_debugfs_key_remove(struct ieee80211_key *key) -{ - if (!key) - return; - - debugfs_remove_recursive(key->debugfs.dir); - key->debugfs.dir = NULL; -} - -void ieee80211_debugfs_key_update_default(struct ieee80211_sub_if_data *sdata) -{ - char buf[50]; - struct ieee80211_key *key; - - if (!sdata->debugfs.dir) - return; - - lockdep_assert_held(&sdata->local->key_mtx); - - if (sdata->default_unicast_key) { - key = key_mtx_dereference(sdata->local, - sdata->default_unicast_key); - sprintf(buf, "../keys/%d", key->debugfs.cnt); - sdata->debugfs.default_unicast_key = - debugfs_create_symlink("default_unicast_key", - sdata->debugfs.dir, buf); - } else { - debugfs_remove(sdata->debugfs.default_unicast_key); - sdata->debugfs.default_unicast_key = NULL; - } - - if (sdata->default_multicast_key) { - key = key_mtx_dereference(sdata->local, - sdata->default_multicast_key); - sprintf(buf, "../keys/%d", key->debugfs.cnt); - sdata->debugfs.default_multicast_key = - debugfs_create_symlink("default_multicast_key", - sdata->debugfs.dir, buf); - } else { - debugfs_remove(sdata->debugfs.default_multicast_key); - sdata->debugfs.default_multicast_key = NULL; - } -} - -void ieee80211_debugfs_key_add_mgmt_default(struct ieee80211_sub_if_data *sdata) -{ - char buf[50]; - struct ieee80211_key *key; - - if (!sdata->debugfs.dir) - return; - - key = key_mtx_dereference(sdata->local, - sdata->default_mgmt_key); - if (key) { - sprintf(buf, "../keys/%d", key->debugfs.cnt); - sdata->debugfs.default_mgmt_key = - debugfs_create_symlink("default_mgmt_key", - sdata->debugfs.dir, buf); - } else - ieee80211_debugfs_key_remove_mgmt_default(sdata); -} - -void ieee80211_debugfs_key_remove_mgmt_default(struct ieee80211_sub_if_data *sdata) -{ - if (!sdata) - return; - - debugfs_remove(sdata->debugfs.default_mgmt_key); - sdata->debugfs.default_mgmt_key = NULL; -} - -void ieee80211_debugfs_key_sta_del(struct ieee80211_key *key, - struct sta_info *sta) -{ - debugfs_remove(key->debugfs.stalink); - key->debugfs.stalink = NULL; -} diff --git a/openairITS/mac/DOT11/net/mac80211/debugfs_key.h b/openairITS/mac/DOT11/net/mac80211/debugfs_key.h deleted file mode 100644 index 32adc77e9c..0000000000 --- a/openairITS/mac/DOT11/net/mac80211/debugfs_key.h +++ /dev/null @@ -1,33 +0,0 @@ -#ifndef __MAC80211_DEBUGFS_KEY_H -#define __MAC80211_DEBUGFS_KEY_H - -#ifdef CONFIG_MAC80211_DEBUGFS -void ieee80211_debugfs_key_add(struct ieee80211_key *key); -void ieee80211_debugfs_key_remove(struct ieee80211_key *key); -void ieee80211_debugfs_key_update_default(struct ieee80211_sub_if_data *sdata); -void ieee80211_debugfs_key_add_mgmt_default( - struct ieee80211_sub_if_data *sdata); -void ieee80211_debugfs_key_remove_mgmt_default( - struct ieee80211_sub_if_data *sdata); -void ieee80211_debugfs_key_sta_del(struct ieee80211_key *key, - struct sta_info *sta); -#else -static inline void ieee80211_debugfs_key_add(struct ieee80211_key *key) -{} -static inline void ieee80211_debugfs_key_remove(struct ieee80211_key *key) -{} -static inline void ieee80211_debugfs_key_update_default( - struct ieee80211_sub_if_data *sdata) -{} -static inline void ieee80211_debugfs_key_add_mgmt_default( - struct ieee80211_sub_if_data *sdata) -{} -static inline void ieee80211_debugfs_key_remove_mgmt_default( - struct ieee80211_sub_if_data *sdata) -{} -static inline void ieee80211_debugfs_key_sta_del(struct ieee80211_key *key, - struct sta_info *sta) -{} -#endif - -#endif /* __MAC80211_DEBUGFS_KEY_H */ diff --git a/openairITS/mac/DOT11/net/mac80211/debugfs_netdev.c b/openairITS/mac/DOT11/net/mac80211/debugfs_netdev.c deleted file mode 100644 index 30f99c3448..0000000000 --- a/openairITS/mac/DOT11/net/mac80211/debugfs_netdev.c +++ /dev/null @@ -1,721 +0,0 @@ -/* - * Copyright (c) 2006 Jiri Benc - * Copyright 2007 Johannes Berg - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "ieee80211_i.h" -#include "rate.h" -#include "debugfs.h" -#include "debugfs_netdev.h" -#include "driver-ops.h" - -static ssize_t ieee80211_if_read( - struct ieee80211_sub_if_data *sdata, - char __user *userbuf, - size_t count, loff_t *ppos, - ssize_t (*format)(const struct ieee80211_sub_if_data *, char *, int)) -{ - char buf[70]; - ssize_t ret = -EINVAL; - - read_lock(&dev_base_lock); - if (sdata->dev->reg_state == NETREG_REGISTERED) - ret = (*format)(sdata, buf, sizeof(buf)); - read_unlock(&dev_base_lock); - - if (ret >= 0) - ret = simple_read_from_buffer(userbuf, count, ppos, buf, ret); - - return ret; -} - -static ssize_t ieee80211_if_write( - struct ieee80211_sub_if_data *sdata, - const char __user *userbuf, - size_t count, loff_t *ppos, - ssize_t (*write)(struct ieee80211_sub_if_data *, const char *, int)) -{ - char buf[64]; - ssize_t ret; - - if (count >= sizeof(buf)) - return -E2BIG; - - if (copy_from_user(buf, userbuf, count)) - return -EFAULT; - buf[count] = '\0'; - - ret = -ENODEV; - rtnl_lock(); - if (sdata->dev->reg_state == NETREG_REGISTERED) - ret = (*write)(sdata, buf, count); - rtnl_unlock(); - - return ret; -} - -#define IEEE80211_IF_FMT(name, field, format_string) \ -static ssize_t ieee80211_if_fmt_##name( \ - const struct ieee80211_sub_if_data *sdata, char *buf, \ - int buflen) \ -{ \ - return scnprintf(buf, buflen, format_string, sdata->field); \ -} -#define IEEE80211_IF_FMT_DEC(name, field) \ - IEEE80211_IF_FMT(name, field, "%d\n") -#define IEEE80211_IF_FMT_HEX(name, field) \ - IEEE80211_IF_FMT(name, field, "%#x\n") -#define IEEE80211_IF_FMT_LHEX(name, field) \ - IEEE80211_IF_FMT(name, field, "%#lx\n") -#define IEEE80211_IF_FMT_SIZE(name, field) \ - IEEE80211_IF_FMT(name, field, "%zd\n") - -#define IEEE80211_IF_FMT_HEXARRAY(name, field) \ -static ssize_t ieee80211_if_fmt_##name( \ - const struct ieee80211_sub_if_data *sdata, \ - char *buf, int buflen) \ -{ \ - char *p = buf; \ - int i; \ - for (i = 0; i < sizeof(sdata->field); i++) { \ - p += scnprintf(p, buflen + buf - p, "%.2x ", \ - sdata->field[i]); \ - } \ - p += scnprintf(p, buflen + buf - p, "\n"); \ - return p - buf; \ -} - -#define IEEE80211_IF_FMT_ATOMIC(name, field) \ -static ssize_t ieee80211_if_fmt_##name( \ - const struct ieee80211_sub_if_data *sdata, \ - char *buf, int buflen) \ -{ \ - return scnprintf(buf, buflen, "%d\n", atomic_read(&sdata->field));\ -} - -#define IEEE80211_IF_FMT_MAC(name, field) \ -static ssize_t ieee80211_if_fmt_##name( \ - const struct ieee80211_sub_if_data *sdata, char *buf, \ - int buflen) \ -{ \ - return scnprintf(buf, buflen, "%pM\n", sdata->field); \ -} - -#define IEEE80211_IF_FMT_DEC_DIV_16(name, field) \ -static ssize_t ieee80211_if_fmt_##name( \ - const struct ieee80211_sub_if_data *sdata, \ - char *buf, int buflen) \ -{ \ - return scnprintf(buf, buflen, "%d\n", sdata->field / 16); \ -} - -#define __IEEE80211_IF_FILE(name, _write) \ -static ssize_t ieee80211_if_read_##name(struct file *file, \ - char __user *userbuf, \ - size_t count, loff_t *ppos) \ -{ \ - return ieee80211_if_read(file->private_data, \ - userbuf, count, ppos, \ - ieee80211_if_fmt_##name); \ -} \ -static const struct file_operations name##_ops = { \ - .read = ieee80211_if_read_##name, \ - .write = (_write), \ - .open = simple_open, \ - .llseek = generic_file_llseek, \ -} - -#define __IEEE80211_IF_FILE_W(name) \ -static ssize_t ieee80211_if_write_##name(struct file *file, \ - const char __user *userbuf, \ - size_t count, loff_t *ppos) \ -{ \ - return ieee80211_if_write(file->private_data, userbuf, count, \ - ppos, ieee80211_if_parse_##name); \ -} \ -__IEEE80211_IF_FILE(name, ieee80211_if_write_##name) - - -#define IEEE80211_IF_FILE(name, field, format) \ - IEEE80211_IF_FMT_##format(name, field) \ - __IEEE80211_IF_FILE(name, NULL) - -/* common attributes */ -IEEE80211_IF_FILE(drop_unencrypted, drop_unencrypted, DEC); -IEEE80211_IF_FILE(rc_rateidx_mask_2ghz, rc_rateidx_mask[IEEE80211_BAND_2GHZ], - HEX); -IEEE80211_IF_FILE(rc_rateidx_mask_5ghz, rc_rateidx_mask[IEEE80211_BAND_5GHZ], - HEX); -IEEE80211_IF_FILE(rc_rateidx_mcs_mask_2ghz, - rc_rateidx_mcs_mask[IEEE80211_BAND_2GHZ], HEXARRAY); -IEEE80211_IF_FILE(rc_rateidx_mcs_mask_5ghz, - rc_rateidx_mcs_mask[IEEE80211_BAND_5GHZ], HEXARRAY); - -IEEE80211_IF_FILE(flags, flags, HEX); -IEEE80211_IF_FILE(state, state, LHEX); -IEEE80211_IF_FILE(channel_type, vif.bss_conf.channel_type, DEC); - -/* STA attributes */ -IEEE80211_IF_FILE(bssid, u.mgd.bssid, MAC); -IEEE80211_IF_FILE(aid, u.mgd.aid, DEC); -IEEE80211_IF_FILE(last_beacon, u.mgd.last_beacon_signal, DEC); -IEEE80211_IF_FILE(ave_beacon, u.mgd.ave_beacon_signal, DEC_DIV_16); - -static int ieee80211_set_smps(struct ieee80211_sub_if_data *sdata, - enum ieee80211_smps_mode smps_mode) -{ - struct ieee80211_local *local = sdata->local; - int err; - - if (!(local->hw.flags & IEEE80211_HW_SUPPORTS_STATIC_SMPS) && - smps_mode == IEEE80211_SMPS_STATIC) - return -EINVAL; - - /* auto should be dynamic if in PS mode */ - if (!(local->hw.flags & IEEE80211_HW_SUPPORTS_DYNAMIC_SMPS) && - (smps_mode == IEEE80211_SMPS_DYNAMIC || - smps_mode == IEEE80211_SMPS_AUTOMATIC)) - return -EINVAL; - - /* supported only on managed interfaces for now */ - if (sdata->vif.type != NL80211_IFTYPE_STATION) - return -EOPNOTSUPP; - - mutex_lock(&sdata->u.mgd.mtx); - err = __ieee80211_request_smps(sdata, smps_mode); - mutex_unlock(&sdata->u.mgd.mtx); - - return err; -} - -static const char *smps_modes[IEEE80211_SMPS_NUM_MODES] = { - [IEEE80211_SMPS_AUTOMATIC] = "auto", - [IEEE80211_SMPS_OFF] = "off", - [IEEE80211_SMPS_STATIC] = "static", - [IEEE80211_SMPS_DYNAMIC] = "dynamic", -}; - -static ssize_t ieee80211_if_fmt_smps(const struct ieee80211_sub_if_data *sdata, - char *buf, int buflen) -{ - if (sdata->vif.type != NL80211_IFTYPE_STATION) - return -EOPNOTSUPP; - - return snprintf(buf, buflen, "request: %s\nused: %s\n", - smps_modes[sdata->u.mgd.req_smps], - smps_modes[sdata->u.mgd.ap_smps]); -} - -static ssize_t ieee80211_if_parse_smps(struct ieee80211_sub_if_data *sdata, - const char *buf, int buflen) -{ - enum ieee80211_smps_mode mode; - - for (mode = 0; mode < IEEE80211_SMPS_NUM_MODES; mode++) { - if (strncmp(buf, smps_modes[mode], buflen) == 0) { - int err = ieee80211_set_smps(sdata, mode); - if (!err) - return buflen; - return err; - } - } - - return -EINVAL; -} - -__IEEE80211_IF_FILE_W(smps); - -static ssize_t ieee80211_if_fmt_tkip_mic_test( - const struct ieee80211_sub_if_data *sdata, char *buf, int buflen) -{ - return -EOPNOTSUPP; -} - -static int hwaddr_aton(const char *txt, u8 *addr) -{ - int i; - - for (i = 0; i < ETH_ALEN; i++) { - int a, b; - - a = hex_to_bin(*txt++); - if (a < 0) - return -1; - b = hex_to_bin(*txt++); - if (b < 0) - return -1; - *addr++ = (a << 4) | b; - if (i < 5 && *txt++ != ':') - return -1; - } - - return 0; -} - -static ssize_t ieee80211_if_parse_tkip_mic_test( - struct ieee80211_sub_if_data *sdata, const char *buf, int buflen) -{ - struct ieee80211_local *local = sdata->local; - u8 addr[ETH_ALEN]; - struct sk_buff *skb; - struct ieee80211_hdr *hdr; - __le16 fc; - - /* - * Assume colon-delimited MAC address with possible white space - * following. - */ - if (buflen < 3 * ETH_ALEN - 1) - return -EINVAL; - if (hwaddr_aton(buf, addr) < 0) - return -EINVAL; - - if (!ieee80211_sdata_running(sdata)) - return -ENOTCONN; - - skb = dev_alloc_skb(local->hw.extra_tx_headroom + 24 + 100); - if (!skb) - return -ENOMEM; - skb_reserve(skb, local->hw.extra_tx_headroom); - - hdr = (struct ieee80211_hdr *) skb_put(skb, 24); - memset(hdr, 0, 24); - fc = cpu_to_le16(IEEE80211_FTYPE_DATA | IEEE80211_STYPE_DATA); - - switch (sdata->vif.type) { - case NL80211_IFTYPE_AP: - fc |= cpu_to_le16(IEEE80211_FCTL_FROMDS); - /* DA BSSID SA */ - memcpy(hdr->addr1, addr, ETH_ALEN); - memcpy(hdr->addr2, sdata->vif.addr, ETH_ALEN); - memcpy(hdr->addr3, sdata->vif.addr, ETH_ALEN); - break; - case NL80211_IFTYPE_STATION: - fc |= cpu_to_le16(IEEE80211_FCTL_TODS); - /* BSSID SA DA */ - if (sdata->vif.bss_conf.bssid == NULL) { - dev_kfree_skb(skb); - return -ENOTCONN; - } - memcpy(hdr->addr1, sdata->vif.bss_conf.bssid, ETH_ALEN); - memcpy(hdr->addr2, sdata->vif.addr, ETH_ALEN); - memcpy(hdr->addr3, addr, ETH_ALEN); - break; - default: - dev_kfree_skb(skb); - return -EOPNOTSUPP; - } - hdr->frame_control = fc; - - /* - * Add some length to the test frame to make it look bit more valid. - * The exact contents does not matter since the recipient is required - * to drop this because of the Michael MIC failure. - */ - memset(skb_put(skb, 50), 0, 50); - - IEEE80211_SKB_CB(skb)->flags |= IEEE80211_TX_INTFL_TKIP_MIC_FAILURE; - - ieee80211_tx_skb(sdata, skb); - - return buflen; -} - -__IEEE80211_IF_FILE_W(tkip_mic_test); - -static ssize_t ieee80211_if_fmt_uapsd_queues( - const struct ieee80211_sub_if_data *sdata, char *buf, int buflen) -{ - const struct ieee80211_if_managed *ifmgd = &sdata->u.mgd; - - return snprintf(buf, buflen, "0x%x\n", ifmgd->uapsd_queues); -} - -static ssize_t ieee80211_if_parse_uapsd_queues( - struct ieee80211_sub_if_data *sdata, const char *buf, int buflen) -{ - struct ieee80211_if_managed *ifmgd = &sdata->u.mgd; - u8 val; - int ret; - - ret = kstrtou8(buf, 0, &val); - if (ret) - return ret; - - if (val & ~IEEE80211_WMM_IE_STA_QOSINFO_AC_MASK) - return -ERANGE; - - ifmgd->uapsd_queues = val; - - return buflen; -} -__IEEE80211_IF_FILE_W(uapsd_queues); - -static ssize_t ieee80211_if_fmt_uapsd_max_sp_len( - const struct ieee80211_sub_if_data *sdata, char *buf, int buflen) -{ - const struct ieee80211_if_managed *ifmgd = &sdata->u.mgd; - - return snprintf(buf, buflen, "0x%x\n", ifmgd->uapsd_max_sp_len); -} - -static ssize_t ieee80211_if_parse_uapsd_max_sp_len( - struct ieee80211_sub_if_data *sdata, const char *buf, int buflen) -{ - struct ieee80211_if_managed *ifmgd = &sdata->u.mgd; - unsigned long val; - int ret; - - ret = kstrtoul(buf, 0, &val); - if (ret) - return -EINVAL; - - if (val & ~IEEE80211_WMM_IE_STA_QOSINFO_SP_MASK) - return -ERANGE; - - ifmgd->uapsd_max_sp_len = val; - - return buflen; -} -__IEEE80211_IF_FILE_W(uapsd_max_sp_len); - -/* AP attributes */ -IEEE80211_IF_FILE(num_sta_authorized, u.ap.num_sta_authorized, ATOMIC); -IEEE80211_IF_FILE(num_sta_ps, u.ap.num_sta_ps, ATOMIC); -IEEE80211_IF_FILE(dtim_count, u.ap.dtim_count, DEC); - -static ssize_t ieee80211_if_fmt_num_buffered_multicast( - const struct ieee80211_sub_if_data *sdata, char *buf, int buflen) -{ - return scnprintf(buf, buflen, "%u\n", - skb_queue_len(&sdata->u.ap.ps_bc_buf)); -} -__IEEE80211_IF_FILE(num_buffered_multicast, NULL); - -/* IBSS attributes */ -static ssize_t ieee80211_if_fmt_tsf( - const struct ieee80211_sub_if_data *sdata, char *buf, int buflen) -{ - struct ieee80211_local *local = sdata->local; - u64 tsf; - - tsf = drv_get_tsf(local, (struct ieee80211_sub_if_data *)sdata); - - return scnprintf(buf, buflen, "0x%016llx\n", (unsigned long long) tsf); -} - -static ssize_t ieee80211_if_parse_tsf( - struct ieee80211_sub_if_data *sdata, const char *buf, int buflen) -{ - struct ieee80211_local *local = sdata->local; - unsigned long long tsf; - int ret; - - if (strncmp(buf, "reset", 5) == 0) { - if (local->ops->reset_tsf) { - drv_reset_tsf(local, sdata); - wiphy_info(local->hw.wiphy, "debugfs reset TSF\n"); - } - } else { - ret = kstrtoull(buf, 10, &tsf); - if (ret < 0) - return -EINVAL; - if (local->ops->set_tsf) { - drv_set_tsf(local, sdata, tsf); - wiphy_info(local->hw.wiphy, - "debugfs set TSF to %#018llx\n", tsf); - } - } - - return buflen; -} -__IEEE80211_IF_FILE_W(tsf); - - -/* WDS attributes */ -IEEE80211_IF_FILE(peer, u.wds.remote_addr, MAC); - -#ifdef CONFIG_MAC80211_MESH -/* Mesh stats attributes */ -IEEE80211_IF_FILE(fwded_mcast, u.mesh.mshstats.fwded_mcast, DEC); -IEEE80211_IF_FILE(fwded_unicast, u.mesh.mshstats.fwded_unicast, DEC); -IEEE80211_IF_FILE(fwded_frames, u.mesh.mshstats.fwded_frames, DEC); -IEEE80211_IF_FILE(dropped_frames_ttl, u.mesh.mshstats.dropped_frames_ttl, DEC); -IEEE80211_IF_FILE(dropped_frames_congestion, - u.mesh.mshstats.dropped_frames_congestion, DEC); -IEEE80211_IF_FILE(dropped_frames_no_route, - u.mesh.mshstats.dropped_frames_no_route, DEC); -IEEE80211_IF_FILE(estab_plinks, u.mesh.mshstats.estab_plinks, ATOMIC); - -/* Mesh parameters */ -IEEE80211_IF_FILE(dot11MeshMaxRetries, - u.mesh.mshcfg.dot11MeshMaxRetries, DEC); -IEEE80211_IF_FILE(dot11MeshRetryTimeout, - u.mesh.mshcfg.dot11MeshRetryTimeout, DEC); -IEEE80211_IF_FILE(dot11MeshConfirmTimeout, - u.mesh.mshcfg.dot11MeshConfirmTimeout, DEC); -IEEE80211_IF_FILE(dot11MeshHoldingTimeout, - u.mesh.mshcfg.dot11MeshHoldingTimeout, DEC); -IEEE80211_IF_FILE(dot11MeshTTL, u.mesh.mshcfg.dot11MeshTTL, DEC); -IEEE80211_IF_FILE(element_ttl, u.mesh.mshcfg.element_ttl, DEC); -IEEE80211_IF_FILE(auto_open_plinks, u.mesh.mshcfg.auto_open_plinks, DEC); -IEEE80211_IF_FILE(dot11MeshMaxPeerLinks, - u.mesh.mshcfg.dot11MeshMaxPeerLinks, DEC); -IEEE80211_IF_FILE(dot11MeshHWMPactivePathTimeout, - u.mesh.mshcfg.dot11MeshHWMPactivePathTimeout, DEC); -IEEE80211_IF_FILE(dot11MeshHWMPpreqMinInterval, - u.mesh.mshcfg.dot11MeshHWMPpreqMinInterval, DEC); -IEEE80211_IF_FILE(dot11MeshHWMPperrMinInterval, - u.mesh.mshcfg.dot11MeshHWMPperrMinInterval, DEC); -IEEE80211_IF_FILE(dot11MeshHWMPnetDiameterTraversalTime, - u.mesh.mshcfg.dot11MeshHWMPnetDiameterTraversalTime, DEC); -IEEE80211_IF_FILE(dot11MeshHWMPmaxPREQretries, - u.mesh.mshcfg.dot11MeshHWMPmaxPREQretries, DEC); -IEEE80211_IF_FILE(path_refresh_time, - u.mesh.mshcfg.path_refresh_time, DEC); -IEEE80211_IF_FILE(min_discovery_timeout, - u.mesh.mshcfg.min_discovery_timeout, DEC); -IEEE80211_IF_FILE(dot11MeshHWMPRootMode, - u.mesh.mshcfg.dot11MeshHWMPRootMode, DEC); -IEEE80211_IF_FILE(dot11MeshGateAnnouncementProtocol, - u.mesh.mshcfg.dot11MeshGateAnnouncementProtocol, DEC); -IEEE80211_IF_FILE(dot11MeshHWMPRannInterval, - u.mesh.mshcfg.dot11MeshHWMPRannInterval, DEC); -IEEE80211_IF_FILE(dot11MeshForwarding, u.mesh.mshcfg.dot11MeshForwarding, DEC); -IEEE80211_IF_FILE(rssi_threshold, u.mesh.mshcfg.rssi_threshold, DEC); -#endif - - -#define DEBUGFS_ADD(name) \ - debugfs_create_file(#name, 0400, sdata->debugfs.dir, \ - sdata, &name##_ops); - -#define DEBUGFS_ADD_MODE(name, mode) \ - debugfs_create_file(#name, mode, sdata->debugfs.dir, \ - sdata, &name##_ops); - -static void add_sta_files(struct ieee80211_sub_if_data *sdata) -{ - DEBUGFS_ADD(drop_unencrypted); - DEBUGFS_ADD(flags); - DEBUGFS_ADD(state); - DEBUGFS_ADD(channel_type); - DEBUGFS_ADD(rc_rateidx_mask_2ghz); - DEBUGFS_ADD(rc_rateidx_mask_5ghz); - DEBUGFS_ADD(rc_rateidx_mcs_mask_2ghz); - DEBUGFS_ADD(rc_rateidx_mcs_mask_5ghz); - - DEBUGFS_ADD(bssid); - DEBUGFS_ADD(aid); - DEBUGFS_ADD(last_beacon); - DEBUGFS_ADD(ave_beacon); - DEBUGFS_ADD_MODE(smps, 0600); - DEBUGFS_ADD_MODE(tkip_mic_test, 0200); - DEBUGFS_ADD_MODE(uapsd_queues, 0600); - DEBUGFS_ADD_MODE(uapsd_max_sp_len, 0600); -} - -static void add_ap_files(struct ieee80211_sub_if_data *sdata) -{ - DEBUGFS_ADD(drop_unencrypted); - DEBUGFS_ADD(flags); - DEBUGFS_ADD(state); - DEBUGFS_ADD(channel_type); - DEBUGFS_ADD(rc_rateidx_mask_2ghz); - DEBUGFS_ADD(rc_rateidx_mask_5ghz); - DEBUGFS_ADD(rc_rateidx_mcs_mask_2ghz); - DEBUGFS_ADD(rc_rateidx_mcs_mask_5ghz); - - DEBUGFS_ADD(num_sta_authorized); - DEBUGFS_ADD(num_sta_ps); - DEBUGFS_ADD(dtim_count); - DEBUGFS_ADD(num_buffered_multicast); - DEBUGFS_ADD_MODE(tkip_mic_test, 0200); -} - -static void add_ibss_files(struct ieee80211_sub_if_data *sdata) -{ - DEBUGFS_ADD(channel_type); - DEBUGFS_ADD(rc_rateidx_mask_2ghz); - DEBUGFS_ADD(rc_rateidx_mask_5ghz); - DEBUGFS_ADD(rc_rateidx_mcs_mask_2ghz); - DEBUGFS_ADD(rc_rateidx_mcs_mask_5ghz); - - DEBUGFS_ADD_MODE(tsf, 0600); -} - -static void add_wds_files(struct ieee80211_sub_if_data *sdata) -{ - DEBUGFS_ADD(drop_unencrypted); - DEBUGFS_ADD(flags); - DEBUGFS_ADD(state); - DEBUGFS_ADD(channel_type); - DEBUGFS_ADD(rc_rateidx_mask_2ghz); - DEBUGFS_ADD(rc_rateidx_mask_5ghz); - DEBUGFS_ADD(rc_rateidx_mcs_mask_2ghz); - DEBUGFS_ADD(rc_rateidx_mcs_mask_5ghz); - - DEBUGFS_ADD(peer); -} - -static void add_vlan_files(struct ieee80211_sub_if_data *sdata) -{ - DEBUGFS_ADD(drop_unencrypted); - DEBUGFS_ADD(flags); - DEBUGFS_ADD(state); - DEBUGFS_ADD(channel_type); - DEBUGFS_ADD(rc_rateidx_mask_2ghz); - DEBUGFS_ADD(rc_rateidx_mask_5ghz); - DEBUGFS_ADD(rc_rateidx_mcs_mask_2ghz); - DEBUGFS_ADD(rc_rateidx_mcs_mask_5ghz); -} - -static void add_monitor_files(struct ieee80211_sub_if_data *sdata) -{ - DEBUGFS_ADD(flags); - DEBUGFS_ADD(state); - DEBUGFS_ADD(channel_type); -} - -#ifdef CONFIG_MAC80211_MESH - -static void add_mesh_files(struct ieee80211_sub_if_data *sdata) -{ - DEBUGFS_ADD_MODE(tsf, 0600); -} - -static void add_mesh_stats(struct ieee80211_sub_if_data *sdata) -{ - struct dentry *dir = debugfs_create_dir("mesh_stats", - sdata->debugfs.dir); -#define MESHSTATS_ADD(name)\ - debugfs_create_file(#name, 0400, dir, sdata, &name##_ops); - - MESHSTATS_ADD(fwded_mcast); - MESHSTATS_ADD(fwded_unicast); - MESHSTATS_ADD(fwded_frames); - MESHSTATS_ADD(dropped_frames_ttl); - MESHSTATS_ADD(dropped_frames_no_route); - MESHSTATS_ADD(dropped_frames_congestion); - MESHSTATS_ADD(estab_plinks); -#undef MESHSTATS_ADD -} - -static void add_mesh_config(struct ieee80211_sub_if_data *sdata) -{ - struct dentry *dir = debugfs_create_dir("mesh_config", - sdata->debugfs.dir); - -#define MESHPARAMS_ADD(name) \ - debugfs_create_file(#name, 0600, dir, sdata, &name##_ops); - - MESHPARAMS_ADD(dot11MeshMaxRetries); - MESHPARAMS_ADD(dot11MeshRetryTimeout); - MESHPARAMS_ADD(dot11MeshConfirmTimeout); - MESHPARAMS_ADD(dot11MeshHoldingTimeout); - MESHPARAMS_ADD(dot11MeshTTL); - MESHPARAMS_ADD(element_ttl); - MESHPARAMS_ADD(auto_open_plinks); - MESHPARAMS_ADD(dot11MeshMaxPeerLinks); - MESHPARAMS_ADD(dot11MeshHWMPactivePathTimeout); - MESHPARAMS_ADD(dot11MeshHWMPpreqMinInterval); - MESHPARAMS_ADD(dot11MeshHWMPperrMinInterval); - MESHPARAMS_ADD(dot11MeshHWMPnetDiameterTraversalTime); - MESHPARAMS_ADD(dot11MeshHWMPmaxPREQretries); - MESHPARAMS_ADD(path_refresh_time); - MESHPARAMS_ADD(min_discovery_timeout); - MESHPARAMS_ADD(dot11MeshHWMPRootMode); - MESHPARAMS_ADD(dot11MeshHWMPRannInterval); - MESHPARAMS_ADD(dot11MeshGateAnnouncementProtocol); - MESHPARAMS_ADD(rssi_threshold); -#undef MESHPARAMS_ADD -} -#endif - -static void add_files(struct ieee80211_sub_if_data *sdata) -{ - if (!sdata->debugfs.dir) - return; - - switch (sdata->vif.type) { - case NL80211_IFTYPE_MESH_POINT: -#ifdef CONFIG_MAC80211_MESH - add_mesh_files(sdata); - add_mesh_stats(sdata); - add_mesh_config(sdata); -#endif - break; - case NL80211_IFTYPE_STATION: - add_sta_files(sdata); - break; - case NL80211_IFTYPE_ADHOC: - add_ibss_files(sdata); - break; - case NL80211_IFTYPE_AP: - add_ap_files(sdata); - break; - case NL80211_IFTYPE_WDS: - add_wds_files(sdata); - break; - case NL80211_IFTYPE_MONITOR: - add_monitor_files(sdata); - break; - case NL80211_IFTYPE_AP_VLAN: - add_vlan_files(sdata); - break; - default: - break; - } -} - -void ieee80211_debugfs_add_netdev(struct ieee80211_sub_if_data *sdata) -{ - char buf[10+IFNAMSIZ]; - - sprintf(buf, "netdev:%s", sdata->name); - sdata->debugfs.dir = debugfs_create_dir(buf, - sdata->local->hw.wiphy->debugfsdir); - if (sdata->debugfs.dir) - sdata->debugfs.subdir_stations = debugfs_create_dir("stations", - sdata->debugfs.dir); - add_files(sdata); -} - -void ieee80211_debugfs_remove_netdev(struct ieee80211_sub_if_data *sdata) -{ - if (!sdata->debugfs.dir) - return; - - debugfs_remove_recursive(sdata->debugfs.dir); - sdata->debugfs.dir = NULL; -} - -void ieee80211_debugfs_rename_netdev(struct ieee80211_sub_if_data *sdata) -{ - struct dentry *dir; - char buf[10 + IFNAMSIZ]; - - dir = sdata->debugfs.dir; - - if (!dir) - return; - - sprintf(buf, "netdev:%s", sdata->name); - if (!debugfs_rename(dir->d_parent, dir, dir->d_parent, buf)) - printk(KERN_ERR "mac80211: debugfs: failed to rename debugfs " - "dir to %s\n", buf); -} diff --git a/openairITS/mac/DOT11/net/mac80211/debugfs_netdev.h b/openairITS/mac/DOT11/net/mac80211/debugfs_netdev.h deleted file mode 100644 index 79025e79f4..0000000000 --- a/openairITS/mac/DOT11/net/mac80211/debugfs_netdev.h +++ /dev/null @@ -1,22 +0,0 @@ -/* routines exported for debugfs handling */ - -#ifndef __IEEE80211_DEBUGFS_NETDEV_H -#define __IEEE80211_DEBUGFS_NETDEV_H - -#ifdef CONFIG_MAC80211_DEBUGFS -void ieee80211_debugfs_add_netdev(struct ieee80211_sub_if_data *sdata); -void ieee80211_debugfs_remove_netdev(struct ieee80211_sub_if_data *sdata); -void ieee80211_debugfs_rename_netdev(struct ieee80211_sub_if_data *sdata); -#else -static inline void ieee80211_debugfs_add_netdev( - struct ieee80211_sub_if_data *sdata) -{} -static inline void ieee80211_debugfs_remove_netdev( - struct ieee80211_sub_if_data *sdata) -{} -static inline void ieee80211_debugfs_rename_netdev( - struct ieee80211_sub_if_data *sdata) -{} -#endif - -#endif /* __IEEE80211_DEBUGFS_NETDEV_H */ diff --git a/openairITS/mac/DOT11/net/mac80211/debugfs_sta.c b/openairITS/mac/DOT11/net/mac80211/debugfs_sta.c deleted file mode 100644 index 832b2da5e4..0000000000 --- a/openairITS/mac/DOT11/net/mac80211/debugfs_sta.c +++ /dev/null @@ -1,387 +0,0 @@ -/* - * Copyright 2003-2005 Devicescape Software, Inc. - * Copyright (c) 2006 Jiri Benc - * Copyright 2007 Johannes Berg - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - */ - -#include -#include -#include "ieee80211_i.h" -#include "debugfs.h" -#include "debugfs_sta.h" -#include "sta_info.h" - -/* sta attributtes */ - -#define STA_READ(name, field, format_string) \ -static ssize_t sta_ ##name## _read(struct file *file, \ - char __user *userbuf, \ - size_t count, loff_t *ppos) \ -{ \ - struct sta_info *sta = file->private_data; \ - return mac80211_format_buffer(userbuf, count, ppos, \ - format_string, sta->field); \ -} -#define STA_READ_D(name, field) STA_READ(name, field, "%d\n") -#define STA_READ_U(name, field) STA_READ(name, field, "%u\n") -#define STA_READ_S(name, field) STA_READ(name, field, "%s\n") - -#define STA_OPS(name) \ -static const struct file_operations sta_ ##name## _ops = { \ - .read = sta_##name##_read, \ - .open = simple_open, \ - .llseek = generic_file_llseek, \ -} - -#define STA_OPS_RW(name) \ -static const struct file_operations sta_ ##name## _ops = { \ - .read = sta_##name##_read, \ - .write = sta_##name##_write, \ - .open = simple_open, \ - .llseek = generic_file_llseek, \ -} - -#define STA_FILE(name, field, format) \ - STA_READ_##format(name, field) \ - STA_OPS(name) - -STA_FILE(aid, sta.aid, D); -STA_FILE(dev, sdata->name, S); -STA_FILE(last_signal, last_signal, D); - -static ssize_t sta_flags_read(struct file *file, char __user *userbuf, - size_t count, loff_t *ppos) -{ - char buf[121]; - struct sta_info *sta = file->private_data; - -#define TEST(flg) \ - test_sta_flag(sta, WLAN_STA_##flg) ? #flg "\n" : "" - - int res = scnprintf(buf, sizeof(buf), - "%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s", - TEST(AUTH), TEST(ASSOC), TEST(PS_STA), - TEST(PS_DRIVER), TEST(AUTHORIZED), - TEST(SHORT_PREAMBLE), - TEST(WME), TEST(WDS), TEST(CLEAR_PS_FILT), - TEST(MFP), TEST(BLOCK_BA), TEST(PSPOLL), - TEST(UAPSD), TEST(SP), TEST(TDLS_PEER), - TEST(TDLS_PEER_AUTH), TEST(4ADDR_EVENT), - TEST(INSERTED), TEST(RATE_CONTROL)); -#undef TEST - return simple_read_from_buffer(userbuf, count, ppos, buf, res); -} -STA_OPS(flags); - -static ssize_t sta_num_ps_buf_frames_read(struct file *file, - char __user *userbuf, - size_t count, loff_t *ppos) -{ - struct sta_info *sta = file->private_data; - char buf[17*IEEE80211_NUM_ACS], *p = buf; - int ac; - - for (ac = 0; ac < IEEE80211_NUM_ACS; ac++) - p += scnprintf(p, sizeof(buf)+buf-p, "AC%d: %d\n", ac, - skb_queue_len(&sta->ps_tx_buf[ac]) + - skb_queue_len(&sta->tx_filtered[ac])); - return simple_read_from_buffer(userbuf, count, ppos, buf, p - buf); -} -STA_OPS(num_ps_buf_frames); - -static ssize_t sta_inactive_ms_read(struct file *file, char __user *userbuf, - size_t count, loff_t *ppos) -{ - struct sta_info *sta = file->private_data; - return mac80211_format_buffer(userbuf, count, ppos, "%d\n", - jiffies_to_msecs(jiffies - sta->last_rx)); -} -STA_OPS(inactive_ms); - - -static ssize_t sta_connected_time_read(struct file *file, char __user *userbuf, - size_t count, loff_t *ppos) -{ - struct sta_info *sta = file->private_data; - struct timespec uptime; - struct tm result; - long connected_time_secs; - char buf[100]; - int res; - do_posix_clock_monotonic_gettime(&uptime); - connected_time_secs = uptime.tv_sec - sta->last_connected; - time_to_tm(connected_time_secs, 0, &result); - result.tm_year -= 70; - result.tm_mday -= 1; - res = scnprintf(buf, sizeof(buf), - "years - %ld\nmonths - %d\ndays - %d\nclock - %d:%d:%d\n\n", - result.tm_year, result.tm_mon, result.tm_mday, - result.tm_hour, result.tm_min, result.tm_sec); - return simple_read_from_buffer(userbuf, count, ppos, buf, res); -} -STA_OPS(connected_time); - - - -static ssize_t sta_last_seq_ctrl_read(struct file *file, char __user *userbuf, - size_t count, loff_t *ppos) -{ - char buf[15*NUM_RX_DATA_QUEUES], *p = buf; - int i; - struct sta_info *sta = file->private_data; - for (i = 0; i < NUM_RX_DATA_QUEUES; i++) - p += scnprintf(p, sizeof(buf)+buf-p, "%x ", - le16_to_cpu(sta->last_seq_ctrl[i])); - p += scnprintf(p, sizeof(buf)+buf-p, "\n"); - return simple_read_from_buffer(userbuf, count, ppos, buf, p - buf); -} -STA_OPS(last_seq_ctrl); - -static ssize_t sta_agg_status_read(struct file *file, char __user *userbuf, - size_t count, loff_t *ppos) -{ - char buf[71 + STA_TID_NUM * 40], *p = buf; - int i; - struct sta_info *sta = file->private_data; - struct tid_ampdu_rx *tid_rx; - struct tid_ampdu_tx *tid_tx; - - rcu_read_lock(); - - p += scnprintf(p, sizeof(buf) + buf - p, "next dialog_token: %#02x\n", - sta->ampdu_mlme.dialog_token_allocator + 1); - p += scnprintf(p, sizeof(buf) + buf - p, - "TID\t\tRX active\tDTKN\tSSN\t\tTX\tDTKN\tpending\n"); - - for (i = 0; i < STA_TID_NUM; i++) { - tid_rx = rcu_dereference(sta->ampdu_mlme.tid_rx[i]); - tid_tx = rcu_dereference(sta->ampdu_mlme.tid_tx[i]); - - p += scnprintf(p, sizeof(buf) + buf - p, "%02d", i); - p += scnprintf(p, sizeof(buf) + buf - p, "\t\t%x", !!tid_rx); - p += scnprintf(p, sizeof(buf) + buf - p, "\t%#.2x", - tid_rx ? tid_rx->dialog_token : 0); - p += scnprintf(p, sizeof(buf) + buf - p, "\t%#.3x", - tid_rx ? tid_rx->ssn : 0); - - p += scnprintf(p, sizeof(buf) + buf - p, "\t\t%x", !!tid_tx); - p += scnprintf(p, sizeof(buf) + buf - p, "\t%#.2x", - tid_tx ? tid_tx->dialog_token : 0); - p += scnprintf(p, sizeof(buf) + buf - p, "\t%03d", - tid_tx ? skb_queue_len(&tid_tx->pending) : 0); - p += scnprintf(p, sizeof(buf) + buf - p, "\n"); - } - rcu_read_unlock(); - - return simple_read_from_buffer(userbuf, count, ppos, buf, p - buf); -} - -static ssize_t sta_agg_status_write(struct file *file, const char __user *userbuf, - size_t count, loff_t *ppos) -{ - char _buf[12], *buf = _buf; - struct sta_info *sta = file->private_data; - bool start, tx; - unsigned long tid; - int ret; - - if (count > sizeof(_buf)) - return -EINVAL; - - if (copy_from_user(buf, userbuf, count)) - return -EFAULT; - - buf[sizeof(_buf) - 1] = '\0'; - - if (strncmp(buf, "tx ", 3) == 0) { - buf += 3; - tx = true; - } else if (strncmp(buf, "rx ", 3) == 0) { - buf += 3; - tx = false; - } else - return -EINVAL; - - if (strncmp(buf, "start ", 6) == 0) { - buf += 6; - start = true; - if (!tx) - return -EINVAL; - } else if (strncmp(buf, "stop ", 5) == 0) { - buf += 5; - start = false; - } else - return -EINVAL; - - tid = simple_strtoul(buf, NULL, 0); - - if (tid >= STA_TID_NUM) - return -EINVAL; - - if (tx) { - if (start) - ret = ieee80211_start_tx_ba_session(&sta->sta, tid, 5000); - else - ret = ieee80211_stop_tx_ba_session(&sta->sta, tid); - } else { - __ieee80211_stop_rx_ba_session(sta, tid, WLAN_BACK_RECIPIENT, - 3, true); - ret = 0; - } - - return ret ?: count; -} -STA_OPS_RW(agg_status); - -static ssize_t sta_ht_capa_read(struct file *file, char __user *userbuf, - size_t count, loff_t *ppos) -{ -#define PRINT_HT_CAP(_cond, _str) \ - do { \ - if (_cond) \ - p += scnprintf(p, sizeof(buf)+buf-p, "\t" _str "\n"); \ - } while (0) - char buf[512], *p = buf; - int i; - struct sta_info *sta = file->private_data; - struct ieee80211_sta_ht_cap *htc = &sta->sta.ht_cap; - - p += scnprintf(p, sizeof(buf) + buf - p, "ht %ssupported\n", - htc->ht_supported ? "" : "not "); - if (htc->ht_supported) { - p += scnprintf(p, sizeof(buf)+buf-p, "cap: %#.4x\n", htc->cap); - - PRINT_HT_CAP((htc->cap & BIT(0)), "RX LDPC"); - PRINT_HT_CAP((htc->cap & BIT(1)), "HT20/HT40"); - PRINT_HT_CAP(!(htc->cap & BIT(1)), "HT20"); - - PRINT_HT_CAP(((htc->cap >> 2) & 0x3) == 0, "Static SM Power Save"); - PRINT_HT_CAP(((htc->cap >> 2) & 0x3) == 1, "Dynamic SM Power Save"); - PRINT_HT_CAP(((htc->cap >> 2) & 0x3) == 3, "SM Power Save disabled"); - - PRINT_HT_CAP((htc->cap & BIT(4)), "RX Greenfield"); - PRINT_HT_CAP((htc->cap & BIT(5)), "RX HT20 SGI"); - PRINT_HT_CAP((htc->cap & BIT(6)), "RX HT40 SGI"); - PRINT_HT_CAP((htc->cap & BIT(7)), "TX STBC"); - - PRINT_HT_CAP(((htc->cap >> 8) & 0x3) == 0, "No RX STBC"); - PRINT_HT_CAP(((htc->cap >> 8) & 0x3) == 1, "RX STBC 1-stream"); - PRINT_HT_CAP(((htc->cap >> 8) & 0x3) == 2, "RX STBC 2-streams"); - PRINT_HT_CAP(((htc->cap >> 8) & 0x3) == 3, "RX STBC 3-streams"); - - PRINT_HT_CAP((htc->cap & BIT(10)), "HT Delayed Block Ack"); - - PRINT_HT_CAP(!(htc->cap & BIT(11)), "Max AMSDU length: " - "3839 bytes"); - PRINT_HT_CAP((htc->cap & BIT(11)), "Max AMSDU length: " - "7935 bytes"); - - /* - * For beacons and probe response this would mean the BSS - * does or does not allow the usage of DSSS/CCK HT40. - * Otherwise it means the STA does or does not use - * DSSS/CCK HT40. - */ - PRINT_HT_CAP((htc->cap & BIT(12)), "DSSS/CCK HT40"); - PRINT_HT_CAP(!(htc->cap & BIT(12)), "No DSSS/CCK HT40"); - - /* BIT(13) is reserved */ - - PRINT_HT_CAP((htc->cap & BIT(14)), "40 MHz Intolerant"); - - PRINT_HT_CAP((htc->cap & BIT(15)), "L-SIG TXOP protection"); - - p += scnprintf(p, sizeof(buf)+buf-p, "ampdu factor/density: %d/%d\n", - htc->ampdu_factor, htc->ampdu_density); - p += scnprintf(p, sizeof(buf)+buf-p, "MCS mask:"); - - for (i = 0; i < IEEE80211_HT_MCS_MASK_LEN; i++) - p += scnprintf(p, sizeof(buf)+buf-p, " %.2x", - htc->mcs.rx_mask[i]); - p += scnprintf(p, sizeof(buf)+buf-p, "\n"); - - /* If not set this is meaningless */ - if (le16_to_cpu(htc->mcs.rx_highest)) { - p += scnprintf(p, sizeof(buf)+buf-p, - "MCS rx highest: %d Mbps\n", - le16_to_cpu(htc->mcs.rx_highest)); - } - - p += scnprintf(p, sizeof(buf)+buf-p, "MCS tx params: %x\n", - htc->mcs.tx_params); - } - - return simple_read_from_buffer(userbuf, count, ppos, buf, p - buf); -} -STA_OPS(ht_capa); - -#define DEBUGFS_ADD(name) \ - debugfs_create_file(#name, 0400, \ - sta->debugfs.dir, sta, &sta_ ##name## _ops); - -#define DEBUGFS_ADD_COUNTER(name, field) \ - if (sizeof(sta->field) == sizeof(u32)) \ - debugfs_create_u32(#name, 0400, sta->debugfs.dir, \ - (u32 *) &sta->field); \ - else \ - debugfs_create_u64(#name, 0400, sta->debugfs.dir, \ - (u64 *) &sta->field); - -void ieee80211_sta_debugfs_add(struct sta_info *sta) -{ - struct dentry *stations_dir = sta->sdata->debugfs.subdir_stations; - u8 mac[3*ETH_ALEN]; - - sta->debugfs.add_has_run = true; - - if (!stations_dir) - return; - - snprintf(mac, sizeof(mac), "%pM", sta->sta.addr); - - /* - * This might fail due to a race condition: - * When mac80211 unlinks a station, the debugfs entries - * remain, but it is already possible to link a new - * station with the same address which triggers adding - * it to debugfs; therefore, if the old station isn't - * destroyed quickly enough the old station's debugfs - * dir might still be around. - */ - sta->debugfs.dir = debugfs_create_dir(mac, stations_dir); - if (!sta->debugfs.dir) - return; - - DEBUGFS_ADD(flags); - DEBUGFS_ADD(num_ps_buf_frames); - DEBUGFS_ADD(inactive_ms); - DEBUGFS_ADD(connected_time); - DEBUGFS_ADD(last_seq_ctrl); - DEBUGFS_ADD(agg_status); - DEBUGFS_ADD(dev); - DEBUGFS_ADD(last_signal); - DEBUGFS_ADD(ht_capa); - - DEBUGFS_ADD_COUNTER(rx_packets, rx_packets); - DEBUGFS_ADD_COUNTER(tx_packets, tx_packets); - DEBUGFS_ADD_COUNTER(rx_bytes, rx_bytes); - DEBUGFS_ADD_COUNTER(tx_bytes, tx_bytes); - DEBUGFS_ADD_COUNTER(rx_duplicates, num_duplicates); - DEBUGFS_ADD_COUNTER(rx_fragments, rx_fragments); - DEBUGFS_ADD_COUNTER(rx_dropped, rx_dropped); - DEBUGFS_ADD_COUNTER(tx_fragments, tx_fragments); - DEBUGFS_ADD_COUNTER(tx_filtered, tx_filtered_count); - DEBUGFS_ADD_COUNTER(tx_retry_failed, tx_retry_failed); - DEBUGFS_ADD_COUNTER(tx_retry_count, tx_retry_count); - DEBUGFS_ADD_COUNTER(wep_weak_iv_count, wep_weak_iv_count); -} - -void ieee80211_sta_debugfs_remove(struct sta_info *sta) -{ - debugfs_remove_recursive(sta->debugfs.dir); - sta->debugfs.dir = NULL; -} diff --git a/openairITS/mac/DOT11/net/mac80211/debugfs_sta.h b/openairITS/mac/DOT11/net/mac80211/debugfs_sta.h deleted file mode 100644 index 8b60890325..0000000000 --- a/openairITS/mac/DOT11/net/mac80211/debugfs_sta.h +++ /dev/null @@ -1,14 +0,0 @@ -#ifndef __MAC80211_DEBUGFS_STA_H -#define __MAC80211_DEBUGFS_STA_H - -#include "sta_info.h" - -#ifdef CONFIG_MAC80211_DEBUGFS -void ieee80211_sta_debugfs_add(struct sta_info *sta); -void ieee80211_sta_debugfs_remove(struct sta_info *sta); -#else -static inline void ieee80211_sta_debugfs_add(struct sta_info *sta) {} -static inline void ieee80211_sta_debugfs_remove(struct sta_info *sta) {} -#endif - -#endif /* __MAC80211_DEBUGFS_STA_H */ diff --git a/openairITS/mac/DOT11/net/mac80211/driver-ops.h b/openairITS/mac/DOT11/net/mac80211/driver-ops.h deleted file mode 100644 index 7f00fe2e8c..0000000000 --- a/openairITS/mac/DOT11/net/mac80211/driver-ops.h +++ /dev/null @@ -1,794 +0,0 @@ -#ifndef __MAC80211_DRIVER_OPS -#define __MAC80211_DRIVER_OPS - -#include -#include "ieee80211_i.h" -#include "driver-trace.h" - -static inline void check_sdata_in_driver(struct ieee80211_sub_if_data *sdata) -{ - WARN_ON(!(sdata->flags & IEEE80211_SDATA_IN_DRIVER)); -} - -static inline struct ieee80211_sub_if_data * -get_bss_sdata(struct ieee80211_sub_if_data *sdata) -{ - if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN) - sdata = container_of(sdata->bss, struct ieee80211_sub_if_data, - u.ap); - - return sdata; -} - -static inline void drv_tx(struct ieee80211_local *local, struct sk_buff *skb) -{ - local->ops->tx(&local->hw, skb); -} - -static inline void drv_tx_frags(struct ieee80211_local *local, - struct ieee80211_vif *vif, - struct ieee80211_sta *sta, - struct sk_buff_head *skbs) -{ - local->ops->tx_frags(&local->hw, vif, sta, skbs); -} - -static inline int drv_start(struct ieee80211_local *local) -{ - int ret; - - might_sleep(); - - trace_drv_start(local); - local->started = true; - smp_mb(); - ret = local->ops->start(&local->hw); - trace_drv_return_int(local, ret); - return ret; -} - -static inline void drv_stop(struct ieee80211_local *local) -{ - might_sleep(); - - trace_drv_stop(local); - local->ops->stop(&local->hw); - trace_drv_return_void(local); - - /* sync away all work on the tasklet before clearing started */ - tasklet_disable(&local->tasklet); - tasklet_enable(&local->tasklet); - - barrier(); - - local->started = false; -} - -#ifdef CONFIG_PM -static inline int drv_suspend(struct ieee80211_local *local, - struct cfg80211_wowlan *wowlan) -{ - int ret; - - might_sleep(); - - trace_drv_suspend(local); - ret = local->ops->suspend(&local->hw, wowlan); - trace_drv_return_int(local, ret); - return ret; -} - -static inline int drv_resume(struct ieee80211_local *local) -{ - int ret; - - might_sleep(); - - trace_drv_resume(local); - ret = local->ops->resume(&local->hw); - trace_drv_return_int(local, ret); - return ret; -} -#endif - -static inline int drv_add_interface(struct ieee80211_local *local, - struct ieee80211_sub_if_data *sdata) -{ - int ret; - - might_sleep(); - - if (WARN_ON(sdata->vif.type == NL80211_IFTYPE_AP_VLAN || - sdata->vif.type == NL80211_IFTYPE_MONITOR)) - return -EINVAL; - - trace_drv_add_interface(local, sdata); - ret = local->ops->add_interface(&local->hw, &sdata->vif); - trace_drv_return_int(local, ret); - - if (ret == 0) - sdata->flags |= IEEE80211_SDATA_IN_DRIVER; - - return ret; -} - -static inline int drv_change_interface(struct ieee80211_local *local, - struct ieee80211_sub_if_data *sdata, - enum nl80211_iftype type, bool p2p) -{ - int ret; - - might_sleep(); - - check_sdata_in_driver(sdata); - - trace_drv_change_interface(local, sdata, type, p2p); - ret = local->ops->change_interface(&local->hw, &sdata->vif, type, p2p); - trace_drv_return_int(local, ret); - return ret; -} - -static inline void drv_remove_interface(struct ieee80211_local *local, - struct ieee80211_sub_if_data *sdata) -{ - might_sleep(); - - check_sdata_in_driver(sdata); - - trace_drv_remove_interface(local, sdata); - local->ops->remove_interface(&local->hw, &sdata->vif); - sdata->flags &= ~IEEE80211_SDATA_IN_DRIVER; - trace_drv_return_void(local); -} - -static inline int drv_config(struct ieee80211_local *local, u32 changed) -{ - int ret; - - might_sleep(); - - trace_drv_config(local, changed); - ret = local->ops->config(&local->hw, changed); - trace_drv_return_int(local, ret); - return ret; -} - -static inline void drv_bss_info_changed(struct ieee80211_local *local, - struct ieee80211_sub_if_data *sdata, - struct ieee80211_bss_conf *info, - u32 changed) -{ - might_sleep(); - - check_sdata_in_driver(sdata); - - trace_drv_bss_info_changed(local, sdata, info, changed); - if (local->ops->bss_info_changed) - local->ops->bss_info_changed(&local->hw, &sdata->vif, info, changed); - trace_drv_return_void(local); -} - -static inline u64 drv_prepare_multicast(struct ieee80211_local *local, -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35)) - struct netdev_hw_addr_list *mc_list) -#else - int mc_count, - struct dev_addr_list *mc_list) -#endif -{ - u64 ret = 0; - -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35)) - trace_drv_prepare_multicast(local, mc_list->count); -#else - trace_drv_prepare_multicast(local, mc_count); -#endif - - if (local->ops->prepare_multicast) -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35)) - ret = local->ops->prepare_multicast(&local->hw, mc_list); -#else - ret = local->ops->prepare_multicast(&local->hw, mc_count, - mc_list); -#endif - - trace_drv_return_u64(local, ret); - - return ret; -} - -static inline void drv_configure_filter(struct ieee80211_local *local, - unsigned int changed_flags, - unsigned int *total_flags, - u64 multicast) -{ - might_sleep(); - - trace_drv_configure_filter(local, changed_flags, total_flags, - multicast); - local->ops->configure_filter(&local->hw, changed_flags, total_flags, - multicast); - trace_drv_return_void(local); -} - -static inline int drv_set_tim(struct ieee80211_local *local, - struct ieee80211_sta *sta, bool set) -{ - int ret = 0; - trace_drv_set_tim(local, sta, set); - if (local->ops->set_tim) - ret = local->ops->set_tim(&local->hw, sta, set); - trace_drv_return_int(local, ret); - return ret; -} - -static inline int drv_set_key(struct ieee80211_local *local, - enum set_key_cmd cmd, - struct ieee80211_sub_if_data *sdata, - struct ieee80211_sta *sta, - struct ieee80211_key_conf *key) -{ - int ret; - - might_sleep(); - - sdata = get_bss_sdata(sdata); - check_sdata_in_driver(sdata); - - trace_drv_set_key(local, cmd, sdata, sta, key); - ret = local->ops->set_key(&local->hw, cmd, &sdata->vif, sta, key); - trace_drv_return_int(local, ret); - return ret; -} - -static inline void drv_update_tkip_key(struct ieee80211_local *local, - struct ieee80211_sub_if_data *sdata, - struct ieee80211_key_conf *conf, - struct sta_info *sta, u32 iv32, - u16 *phase1key) -{ - struct ieee80211_sta *ista = NULL; - - if (sta) - ista = &sta->sta; - - sdata = get_bss_sdata(sdata); - check_sdata_in_driver(sdata); - - trace_drv_update_tkip_key(local, sdata, conf, ista, iv32); - if (local->ops->update_tkip_key) - local->ops->update_tkip_key(&local->hw, &sdata->vif, conf, - ista, iv32, phase1key); - trace_drv_return_void(local); -} - -static inline int drv_hw_scan(struct ieee80211_local *local, - struct ieee80211_sub_if_data *sdata, - struct cfg80211_scan_request *req) -{ - int ret; - - might_sleep(); - - check_sdata_in_driver(sdata); - - trace_drv_hw_scan(local, sdata); - ret = local->ops->hw_scan(&local->hw, &sdata->vif, req); - trace_drv_return_int(local, ret); - return ret; -} - -static inline void drv_cancel_hw_scan(struct ieee80211_local *local, - struct ieee80211_sub_if_data *sdata) -{ - might_sleep(); - - check_sdata_in_driver(sdata); - - trace_drv_cancel_hw_scan(local, sdata); - local->ops->cancel_hw_scan(&local->hw, &sdata->vif); - trace_drv_return_void(local); -} - -static inline int -drv_sched_scan_start(struct ieee80211_local *local, - struct ieee80211_sub_if_data *sdata, - struct cfg80211_sched_scan_request *req, - struct ieee80211_sched_scan_ies *ies) -{ - int ret; - - might_sleep(); - - check_sdata_in_driver(sdata); - - trace_drv_sched_scan_start(local, sdata); - ret = local->ops->sched_scan_start(&local->hw, &sdata->vif, - req, ies); - trace_drv_return_int(local, ret); - return ret; -} - -static inline void drv_sched_scan_stop(struct ieee80211_local *local, - struct ieee80211_sub_if_data *sdata) -{ - might_sleep(); - - check_sdata_in_driver(sdata); - - trace_drv_sched_scan_stop(local, sdata); - local->ops->sched_scan_stop(&local->hw, &sdata->vif); - trace_drv_return_void(local); -} - -static inline void drv_sw_scan_start(struct ieee80211_local *local) -{ - might_sleep(); - - trace_drv_sw_scan_start(local); - if (local->ops->sw_scan_start) - local->ops->sw_scan_start(&local->hw); - trace_drv_return_void(local); -} - -static inline void drv_sw_scan_complete(struct ieee80211_local *local) -{ - might_sleep(); - - trace_drv_sw_scan_complete(local); - if (local->ops->sw_scan_complete) - local->ops->sw_scan_complete(&local->hw); - trace_drv_return_void(local); -} - -static inline int drv_get_stats(struct ieee80211_local *local, - struct ieee80211_low_level_stats *stats) -{ - int ret = -EOPNOTSUPP; - - might_sleep(); - - if (local->ops->get_stats) - ret = local->ops->get_stats(&local->hw, stats); - trace_drv_get_stats(local, stats, ret); - - return ret; -} - -static inline void drv_get_tkip_seq(struct ieee80211_local *local, - u8 hw_key_idx, u32 *iv32, u16 *iv16) -{ - if (local->ops->get_tkip_seq) - local->ops->get_tkip_seq(&local->hw, hw_key_idx, iv32, iv16); - trace_drv_get_tkip_seq(local, hw_key_idx, iv32, iv16); -} - -static inline int drv_set_frag_threshold(struct ieee80211_local *local, - u32 value) -{ - int ret = 0; - - might_sleep(); - - trace_drv_set_frag_threshold(local, value); - if (local->ops->set_frag_threshold) - ret = local->ops->set_frag_threshold(&local->hw, value); - trace_drv_return_int(local, ret); - return ret; -} - -static inline int drv_set_rts_threshold(struct ieee80211_local *local, - u32 value) -{ - int ret = 0; - - might_sleep(); - - trace_drv_set_rts_threshold(local, value); - if (local->ops->set_rts_threshold) - ret = local->ops->set_rts_threshold(&local->hw, value); - trace_drv_return_int(local, ret); - return ret; -} - -static inline int drv_set_coverage_class(struct ieee80211_local *local, - u8 value) -{ - int ret = 0; - might_sleep(); - - trace_drv_set_coverage_class(local, value); - if (local->ops->set_coverage_class) - local->ops->set_coverage_class(&local->hw, value); - else - ret = -EOPNOTSUPP; - - trace_drv_return_int(local, ret); - return ret; -} - -static inline void drv_sta_notify(struct ieee80211_local *local, - struct ieee80211_sub_if_data *sdata, - enum sta_notify_cmd cmd, - struct ieee80211_sta *sta) -{ - sdata = get_bss_sdata(sdata); - check_sdata_in_driver(sdata); - - trace_drv_sta_notify(local, sdata, cmd, sta); - if (local->ops->sta_notify) - local->ops->sta_notify(&local->hw, &sdata->vif, cmd, sta); - trace_drv_return_void(local); -} - -static inline int drv_sta_add(struct ieee80211_local *local, - struct ieee80211_sub_if_data *sdata, - struct ieee80211_sta *sta) -{ - int ret = 0; - - might_sleep(); - - sdata = get_bss_sdata(sdata); - check_sdata_in_driver(sdata); - - trace_drv_sta_add(local, sdata, sta); - if (local->ops->sta_add) - ret = local->ops->sta_add(&local->hw, &sdata->vif, sta); - - trace_drv_return_int(local, ret); - - return ret; -} - -static inline void drv_sta_remove(struct ieee80211_local *local, - struct ieee80211_sub_if_data *sdata, - struct ieee80211_sta *sta) -{ - might_sleep(); - - sdata = get_bss_sdata(sdata); - check_sdata_in_driver(sdata); - - trace_drv_sta_remove(local, sdata, sta); - if (local->ops->sta_remove) - local->ops->sta_remove(&local->hw, &sdata->vif, sta); - - trace_drv_return_void(local); -} - -static inline __must_check -int drv_sta_state(struct ieee80211_local *local, - struct ieee80211_sub_if_data *sdata, - struct sta_info *sta, - enum ieee80211_sta_state old_state, - enum ieee80211_sta_state new_state) -{ - int ret = 0; - - might_sleep(); - - sdata = get_bss_sdata(sdata); - check_sdata_in_driver(sdata); - - trace_drv_sta_state(local, sdata, &sta->sta, old_state, new_state); - if (local->ops->sta_state) { - ret = local->ops->sta_state(&local->hw, &sdata->vif, &sta->sta, - old_state, new_state); - } else if (old_state == IEEE80211_STA_AUTH && - new_state == IEEE80211_STA_ASSOC) { - ret = drv_sta_add(local, sdata, &sta->sta); - if (ret == 0) - sta->uploaded = true; - } else if (old_state == IEEE80211_STA_ASSOC && - new_state == IEEE80211_STA_AUTH) { - drv_sta_remove(local, sdata, &sta->sta); - } - trace_drv_return_int(local, ret); - return ret; -} - -static inline int drv_conf_tx(struct ieee80211_local *local, - struct ieee80211_sub_if_data *sdata, u16 queue, - const struct ieee80211_tx_queue_params *params) -{ - int ret = -EOPNOTSUPP; - - might_sleep(); - - check_sdata_in_driver(sdata); - - trace_drv_conf_tx(local, sdata, queue, params); - if (local->ops->conf_tx) - ret = local->ops->conf_tx(&local->hw, &sdata->vif, - queue, params); - trace_drv_return_int(local, ret); - return ret; -} - -static inline u64 drv_get_tsf(struct ieee80211_local *local, - struct ieee80211_sub_if_data *sdata) -{ - u64 ret = -1ULL; - - might_sleep(); - - check_sdata_in_driver(sdata); - - trace_drv_get_tsf(local, sdata); - if (local->ops->get_tsf) - ret = local->ops->get_tsf(&local->hw, &sdata->vif); - trace_drv_return_u64(local, ret); - return ret; -} - -static inline void drv_set_tsf(struct ieee80211_local *local, - struct ieee80211_sub_if_data *sdata, - u64 tsf) -{ - might_sleep(); - - check_sdata_in_driver(sdata); - - trace_drv_set_tsf(local, sdata, tsf); - if (local->ops->set_tsf) - local->ops->set_tsf(&local->hw, &sdata->vif, tsf); - trace_drv_return_void(local); -} - -static inline void drv_reset_tsf(struct ieee80211_local *local, - struct ieee80211_sub_if_data *sdata) -{ - might_sleep(); - - check_sdata_in_driver(sdata); - - trace_drv_reset_tsf(local, sdata); - if (local->ops->reset_tsf) - local->ops->reset_tsf(&local->hw, &sdata->vif); - trace_drv_return_void(local); -} - -static inline int drv_tx_last_beacon(struct ieee80211_local *local) -{ - int ret = 0; /* default unsuported op for less congestion */ - - might_sleep(); - - trace_drv_tx_last_beacon(local); - if (local->ops->tx_last_beacon) - ret = local->ops->tx_last_beacon(&local->hw); - trace_drv_return_int(local, ret); - return ret; -} - -static inline int drv_ampdu_action(struct ieee80211_local *local, - struct ieee80211_sub_if_data *sdata, - enum ieee80211_ampdu_mlme_action action, - struct ieee80211_sta *sta, u16 tid, - u16 *ssn, u8 buf_size) -{ - int ret = -EOPNOTSUPP; - - might_sleep(); - - sdata = get_bss_sdata(sdata); - check_sdata_in_driver(sdata); - - trace_drv_ampdu_action(local, sdata, action, sta, tid, ssn, buf_size); - - if (local->ops->ampdu_action) - ret = local->ops->ampdu_action(&local->hw, &sdata->vif, action, - sta, tid, ssn, buf_size); - - trace_drv_return_int(local, ret); - - return ret; -} - -static inline int drv_get_survey(struct ieee80211_local *local, int idx, - struct survey_info *survey) -{ - int ret = -EOPNOTSUPP; - - trace_drv_get_survey(local, idx, survey); - - if (local->ops->get_survey) - ret = local->ops->get_survey(&local->hw, idx, survey); - - trace_drv_return_int(local, ret); - - return ret; -} - -static inline void drv_rfkill_poll(struct ieee80211_local *local) -{ - might_sleep(); - - if (local->ops->rfkill_poll) - local->ops->rfkill_poll(&local->hw); -} - -static inline void drv_flush(struct ieee80211_local *local, bool drop) -{ - might_sleep(); - - trace_drv_flush(local, drop); - if (local->ops->flush) - local->ops->flush(&local->hw, drop); - trace_drv_return_void(local); -} - -static inline void drv_channel_switch(struct ieee80211_local *local, - struct ieee80211_channel_switch *ch_switch) -{ - might_sleep(); - - trace_drv_channel_switch(local, ch_switch); - local->ops->channel_switch(&local->hw, ch_switch); - trace_drv_return_void(local); -} - - -static inline int drv_set_antenna(struct ieee80211_local *local, - u32 tx_ant, u32 rx_ant) -{ - int ret = -EOPNOTSUPP; - might_sleep(); - if (local->ops->set_antenna) - ret = local->ops->set_antenna(&local->hw, tx_ant, rx_ant); - trace_drv_set_antenna(local, tx_ant, rx_ant, ret); - return ret; -} - -static inline int drv_get_antenna(struct ieee80211_local *local, - u32 *tx_ant, u32 *rx_ant) -{ - int ret = -EOPNOTSUPP; - might_sleep(); - if (local->ops->get_antenna) - ret = local->ops->get_antenna(&local->hw, tx_ant, rx_ant); - trace_drv_get_antenna(local, *tx_ant, *rx_ant, ret); - return ret; -} - -static inline int drv_remain_on_channel(struct ieee80211_local *local, - struct ieee80211_channel *chan, - enum nl80211_channel_type chantype, - unsigned int duration) -{ - int ret; - - might_sleep(); - - trace_drv_remain_on_channel(local, chan, chantype, duration); - ret = local->ops->remain_on_channel(&local->hw, chan, chantype, - duration); - trace_drv_return_int(local, ret); - - return ret; -} - -static inline int drv_cancel_remain_on_channel(struct ieee80211_local *local) -{ - int ret; - - might_sleep(); - - trace_drv_cancel_remain_on_channel(local); - ret = local->ops->cancel_remain_on_channel(&local->hw); - trace_drv_return_int(local, ret); - - return ret; -} - -static inline int drv_set_ringparam(struct ieee80211_local *local, - u32 tx, u32 rx) -{ - int ret = -ENOTSUPP; - - might_sleep(); - - trace_drv_set_ringparam(local, tx, rx); - if (local->ops->set_ringparam) - ret = local->ops->set_ringparam(&local->hw, tx, rx); - trace_drv_return_int(local, ret); - - return ret; -} - -static inline void drv_get_ringparam(struct ieee80211_local *local, - u32 *tx, u32 *tx_max, u32 *rx, u32 *rx_max) -{ - might_sleep(); - - trace_drv_get_ringparam(local, tx, tx_max, rx, rx_max); - if (local->ops->get_ringparam) - local->ops->get_ringparam(&local->hw, tx, tx_max, rx, rx_max); - trace_drv_return_void(local); -} - -static inline bool drv_tx_frames_pending(struct ieee80211_local *local) -{ - bool ret = false; - - might_sleep(); - - trace_drv_tx_frames_pending(local); - if (local->ops->tx_frames_pending) - ret = local->ops->tx_frames_pending(&local->hw); - trace_drv_return_bool(local, ret); - - return ret; -} - -static inline int drv_set_bitrate_mask(struct ieee80211_local *local, - struct ieee80211_sub_if_data *sdata, - const struct cfg80211_bitrate_mask *mask) -{ - int ret = -EOPNOTSUPP; - - might_sleep(); - - check_sdata_in_driver(sdata); - - trace_drv_set_bitrate_mask(local, sdata, mask); - if (local->ops->set_bitrate_mask) - ret = local->ops->set_bitrate_mask(&local->hw, - &sdata->vif, mask); - trace_drv_return_int(local, ret); - - return ret; -} - -static inline void drv_set_rekey_data(struct ieee80211_local *local, - struct ieee80211_sub_if_data *sdata, - struct cfg80211_gtk_rekey_data *data) -{ - check_sdata_in_driver(sdata); - - trace_drv_set_rekey_data(local, sdata, data); - if (local->ops->set_rekey_data) - local->ops->set_rekey_data(&local->hw, &sdata->vif, data); - trace_drv_return_void(local); -} - -static inline void drv_rssi_callback(struct ieee80211_local *local, - const enum ieee80211_rssi_event event) -{ - trace_drv_rssi_callback(local, event); - if (local->ops->rssi_callback) - local->ops->rssi_callback(&local->hw, event); - trace_drv_return_void(local); -} - -static inline void -drv_release_buffered_frames(struct ieee80211_local *local, - struct sta_info *sta, u16 tids, int num_frames, - enum ieee80211_frame_release_type reason, - bool more_data) -{ - trace_drv_release_buffered_frames(local, &sta->sta, tids, num_frames, - reason, more_data); - if (local->ops->release_buffered_frames) - local->ops->release_buffered_frames(&local->hw, &sta->sta, tids, - num_frames, reason, - more_data); - trace_drv_return_void(local); -} - -static inline void -drv_allow_buffered_frames(struct ieee80211_local *local, - struct sta_info *sta, u16 tids, int num_frames, - enum ieee80211_frame_release_type reason, - bool more_data) -{ - trace_drv_allow_buffered_frames(local, &sta->sta, tids, num_frames, - reason, more_data); - if (local->ops->allow_buffered_frames) - local->ops->allow_buffered_frames(&local->hw, &sta->sta, - tids, num_frames, reason, - more_data); - trace_drv_return_void(local); -} -#endif /* __MAC80211_DRIVER_OPS */ diff --git a/openairITS/mac/DOT11/net/mac80211/driver-trace.c b/openairITS/mac/DOT11/net/mac80211/driver-trace.c deleted file mode 100644 index 8ed8711b1a..0000000000 --- a/openairITS/mac/DOT11/net/mac80211/driver-trace.c +++ /dev/null @@ -1,9 +0,0 @@ -/* bug in tracepoint.h, it should include this */ -#include - -/* sparse isn't too happy with all macros... */ -#ifndef __CHECKER__ -#include "driver-ops.h" -#define CREATE_TRACE_POINTS -#include "driver-trace.h" -#endif diff --git a/openairITS/mac/DOT11/net/mac80211/driver-trace.h b/openairITS/mac/DOT11/net/mac80211/driver-trace.h deleted file mode 100644 index 21d6f5290a..0000000000 --- a/openairITS/mac/DOT11/net/mac80211/driver-trace.h +++ /dev/null @@ -1,1559 +0,0 @@ -#if !defined(__MAC80211_DRIVER_TRACE) || defined(TRACE_HEADER_MULTI_READ) -#define __MAC80211_DRIVER_TRACE - -#include -#include -#include "ieee80211_i.h" - -#undef TRACE_SYSTEM -#define TRACE_SYSTEM mac80211 - -#define MAXNAME 32 -#define LOCAL_ENTRY __array(char, wiphy_name, 32) -#define LOCAL_ASSIGN strlcpy(__entry->wiphy_name, wiphy_name(local->hw.wiphy), MAXNAME) -#define LOCAL_PR_FMT "%s" -#define LOCAL_PR_ARG __entry->wiphy_name - -#define STA_ENTRY __array(char, sta_addr, ETH_ALEN) -#define STA_ASSIGN (sta ? memcpy(__entry->sta_addr, sta->addr, ETH_ALEN) : memset(__entry->sta_addr, 0, ETH_ALEN)) -#define STA_PR_FMT " sta:%pM" -#define STA_PR_ARG __entry->sta_addr - -#define VIF_ENTRY __field(enum nl80211_iftype, vif_type) __field(void *, sdata) \ - __field(bool, p2p) \ - __string(vif_name, sdata->dev ? sdata->dev->name : "") -#define VIF_ASSIGN __entry->vif_type = sdata->vif.type; __entry->sdata = sdata; \ - __entry->p2p = sdata->vif.p2p; \ - __assign_str(vif_name, sdata->dev ? sdata->dev->name : "") -#define VIF_PR_FMT " vif:%s(%d%s)" -#define VIF_PR_ARG __get_str(vif_name), __entry->vif_type, __entry->p2p ? "/p2p" : "" - -/* - * Tracing for driver callbacks. - */ - -DECLARE_EVENT_CLASS(local_only_evt, - TP_PROTO(struct ieee80211_local *local), - TP_ARGS(local), - TP_STRUCT__entry( - LOCAL_ENTRY - ), - TP_fast_assign( - LOCAL_ASSIGN; - ), - TP_printk(LOCAL_PR_FMT, LOCAL_PR_ARG) -); - -DECLARE_EVENT_CLASS(local_sdata_addr_evt, - TP_PROTO(struct ieee80211_local *local, - struct ieee80211_sub_if_data *sdata), - TP_ARGS(local, sdata), - - TP_STRUCT__entry( - LOCAL_ENTRY - VIF_ENTRY - __array(char, addr, 6) - ), - - TP_fast_assign( - LOCAL_ASSIGN; - VIF_ASSIGN; - memcpy(__entry->addr, sdata->vif.addr, 6); - ), - - TP_printk( - LOCAL_PR_FMT VIF_PR_FMT " addr:%pM", - LOCAL_PR_ARG, VIF_PR_ARG, __entry->addr - ) -); - -DECLARE_EVENT_CLASS(local_u32_evt, - TP_PROTO(struct ieee80211_local *local, u32 value), - TP_ARGS(local, value), - - TP_STRUCT__entry( - LOCAL_ENTRY - __field(u32, value) - ), - - TP_fast_assign( - LOCAL_ASSIGN; - __entry->value = value; - ), - - TP_printk( - LOCAL_PR_FMT " value:%d", - LOCAL_PR_ARG, __entry->value - ) -); - -DECLARE_EVENT_CLASS(local_sdata_evt, - TP_PROTO(struct ieee80211_local *local, - struct ieee80211_sub_if_data *sdata), - TP_ARGS(local, sdata), - - TP_STRUCT__entry( - LOCAL_ENTRY - VIF_ENTRY - ), - - TP_fast_assign( - LOCAL_ASSIGN; - VIF_ASSIGN; - ), - - TP_printk( - LOCAL_PR_FMT VIF_PR_FMT, - LOCAL_PR_ARG, VIF_PR_ARG - ) -); - -DEFINE_EVENT(local_only_evt, drv_return_void, - TP_PROTO(struct ieee80211_local *local), - TP_ARGS(local) -); - -TRACE_EVENT(drv_return_int, - TP_PROTO(struct ieee80211_local *local, int ret), - TP_ARGS(local, ret), - TP_STRUCT__entry( - LOCAL_ENTRY - __field(int, ret) - ), - TP_fast_assign( - LOCAL_ASSIGN; - __entry->ret = ret; - ), - TP_printk(LOCAL_PR_FMT " - %d", LOCAL_PR_ARG, __entry->ret) -); - -TRACE_EVENT(drv_return_bool, - TP_PROTO(struct ieee80211_local *local, bool ret), - TP_ARGS(local, ret), - TP_STRUCT__entry( - LOCAL_ENTRY - __field(bool, ret) - ), - TP_fast_assign( - LOCAL_ASSIGN; - __entry->ret = ret; - ), - TP_printk(LOCAL_PR_FMT " - %s", LOCAL_PR_ARG, (__entry->ret) ? - "true" : "false") -); - -TRACE_EVENT(drv_return_u64, - TP_PROTO(struct ieee80211_local *local, u64 ret), - TP_ARGS(local, ret), - TP_STRUCT__entry( - LOCAL_ENTRY - __field(u64, ret) - ), - TP_fast_assign( - LOCAL_ASSIGN; - __entry->ret = ret; - ), - TP_printk(LOCAL_PR_FMT " - %llu", LOCAL_PR_ARG, __entry->ret) -); - -DEFINE_EVENT(local_only_evt, drv_start, - TP_PROTO(struct ieee80211_local *local), - TP_ARGS(local) -); - -DEFINE_EVENT(local_only_evt, drv_suspend, - TP_PROTO(struct ieee80211_local *local), - TP_ARGS(local) -); - -DEFINE_EVENT(local_only_evt, drv_resume, - TP_PROTO(struct ieee80211_local *local), - TP_ARGS(local) -); - -DEFINE_EVENT(local_only_evt, drv_stop, - TP_PROTO(struct ieee80211_local *local), - TP_ARGS(local) -); - -DEFINE_EVENT(local_sdata_addr_evt, drv_add_interface, - TP_PROTO(struct ieee80211_local *local, - struct ieee80211_sub_if_data *sdata), - TP_ARGS(local, sdata) -); - -TRACE_EVENT(drv_change_interface, - TP_PROTO(struct ieee80211_local *local, - struct ieee80211_sub_if_data *sdata, - enum nl80211_iftype type, bool p2p), - - TP_ARGS(local, sdata, type, p2p), - - TP_STRUCT__entry( - LOCAL_ENTRY - VIF_ENTRY - __field(u32, new_type) - __field(bool, new_p2p) - ), - - TP_fast_assign( - LOCAL_ASSIGN; - VIF_ASSIGN; - __entry->new_type = type; - __entry->new_p2p = p2p; - ), - - TP_printk( - LOCAL_PR_FMT VIF_PR_FMT " new type:%d%s", - LOCAL_PR_ARG, VIF_PR_ARG, __entry->new_type, - __entry->new_p2p ? "/p2p" : "" - ) -); - -DEFINE_EVENT(local_sdata_addr_evt, drv_remove_interface, - TP_PROTO(struct ieee80211_local *local, - struct ieee80211_sub_if_data *sdata), - TP_ARGS(local, sdata) -); - -TRACE_EVENT(drv_config, - TP_PROTO(struct ieee80211_local *local, - u32 changed), - - TP_ARGS(local, changed), - - TP_STRUCT__entry( - LOCAL_ENTRY - __field(u32, changed) - __field(u32, flags) - __field(int, power_level) - __field(int, dynamic_ps_timeout) - __field(int, max_sleep_period) - __field(u16, listen_interval) - __field(u8, long_frame_max_tx_count) - __field(u8, short_frame_max_tx_count) - __field(int, center_freq) - __field(int, channel_type) - __field(int, smps) - ), - - TP_fast_assign( - LOCAL_ASSIGN; - __entry->changed = changed; - __entry->flags = local->hw.conf.flags; - __entry->power_level = local->hw.conf.power_level; - __entry->dynamic_ps_timeout = local->hw.conf.dynamic_ps_timeout; - __entry->max_sleep_period = local->hw.conf.max_sleep_period; - __entry->listen_interval = local->hw.conf.listen_interval; - __entry->long_frame_max_tx_count = local->hw.conf.long_frame_max_tx_count; - __entry->short_frame_max_tx_count = local->hw.conf.short_frame_max_tx_count; - __entry->center_freq = local->hw.conf.channel->center_freq; - __entry->channel_type = local->hw.conf.channel_type; - __entry->smps = local->hw.conf.smps_mode; - ), - - TP_printk( - LOCAL_PR_FMT " ch:%#x freq:%d", - LOCAL_PR_ARG, __entry->changed, __entry->center_freq - ) -); - -TRACE_EVENT(drv_bss_info_changed, - TP_PROTO(struct ieee80211_local *local, - struct ieee80211_sub_if_data *sdata, - struct ieee80211_bss_conf *info, - u32 changed), - - TP_ARGS(local, sdata, info, changed), - - TP_STRUCT__entry( - LOCAL_ENTRY - VIF_ENTRY - __field(bool, assoc) - __field(u16, aid) - __field(bool, cts) - __field(bool, shortpre) - __field(bool, shortslot) - __field(u8, dtimper) - __field(u16, bcnint) - __field(u16, assoc_cap) - __field(u64, timestamp) - __field(u32, basic_rates) - __field(u32, changed) - __field(bool, enable_beacon) - __field(u16, ht_operation_mode) - ), - - TP_fast_assign( - LOCAL_ASSIGN; - VIF_ASSIGN; - __entry->changed = changed; - __entry->aid = info->aid; - __entry->assoc = info->assoc; - __entry->shortpre = info->use_short_preamble; - __entry->cts = info->use_cts_prot; - __entry->shortslot = info->use_short_slot; - __entry->dtimper = info->dtim_period; - __entry->bcnint = info->beacon_int; - __entry->assoc_cap = info->assoc_capability; - __entry->timestamp = info->last_tsf; - __entry->basic_rates = info->basic_rates; - __entry->enable_beacon = info->enable_beacon; - __entry->ht_operation_mode = info->ht_operation_mode; - ), - - TP_printk( - LOCAL_PR_FMT VIF_PR_FMT " changed:%#x", - LOCAL_PR_ARG, VIF_PR_ARG, __entry->changed - ) -); - -TRACE_EVENT(drv_prepare_multicast, - TP_PROTO(struct ieee80211_local *local, int mc_count), - - TP_ARGS(local, mc_count), - - TP_STRUCT__entry( - LOCAL_ENTRY - __field(int, mc_count) - ), - - TP_fast_assign( - LOCAL_ASSIGN; - __entry->mc_count = mc_count; - ), - - TP_printk( - LOCAL_PR_FMT " prepare mc (%d)", - LOCAL_PR_ARG, __entry->mc_count - ) -); - -TRACE_EVENT(drv_configure_filter, - TP_PROTO(struct ieee80211_local *local, - unsigned int changed_flags, - unsigned int *total_flags, - u64 multicast), - - TP_ARGS(local, changed_flags, total_flags, multicast), - - TP_STRUCT__entry( - LOCAL_ENTRY - __field(unsigned int, changed) - __field(unsigned int, total) - __field(u64, multicast) - ), - - TP_fast_assign( - LOCAL_ASSIGN; - __entry->changed = changed_flags; - __entry->total = *total_flags; - __entry->multicast = multicast; - ), - - TP_printk( - LOCAL_PR_FMT " changed:%#x total:%#x", - LOCAL_PR_ARG, __entry->changed, __entry->total - ) -); - -TRACE_EVENT(drv_set_tim, - TP_PROTO(struct ieee80211_local *local, - struct ieee80211_sta *sta, bool set), - - TP_ARGS(local, sta, set), - - TP_STRUCT__entry( - LOCAL_ENTRY - STA_ENTRY - __field(bool, set) - ), - - TP_fast_assign( - LOCAL_ASSIGN; - STA_ASSIGN; - __entry->set = set; - ), - - TP_printk( - LOCAL_PR_FMT STA_PR_FMT " set:%d", - LOCAL_PR_ARG, STA_PR_FMT, __entry->set - ) -); - -TRACE_EVENT(drv_set_key, - TP_PROTO(struct ieee80211_local *local, - enum set_key_cmd cmd, struct ieee80211_sub_if_data *sdata, - struct ieee80211_sta *sta, - struct ieee80211_key_conf *key), - - TP_ARGS(local, cmd, sdata, sta, key), - - TP_STRUCT__entry( - LOCAL_ENTRY - VIF_ENTRY - STA_ENTRY - __field(u32, cipher) - __field(u8, hw_key_idx) - __field(u8, flags) - __field(s8, keyidx) - ), - - TP_fast_assign( - LOCAL_ASSIGN; - VIF_ASSIGN; - STA_ASSIGN; - __entry->cipher = key->cipher; - __entry->flags = key->flags; - __entry->keyidx = key->keyidx; - __entry->hw_key_idx = key->hw_key_idx; - ), - - TP_printk( - LOCAL_PR_FMT VIF_PR_FMT STA_PR_FMT, - LOCAL_PR_ARG, VIF_PR_ARG, STA_PR_ARG - ) -); - -TRACE_EVENT(drv_update_tkip_key, - TP_PROTO(struct ieee80211_local *local, - struct ieee80211_sub_if_data *sdata, - struct ieee80211_key_conf *conf, - struct ieee80211_sta *sta, u32 iv32), - - TP_ARGS(local, sdata, conf, sta, iv32), - - TP_STRUCT__entry( - LOCAL_ENTRY - VIF_ENTRY - STA_ENTRY - __field(u32, iv32) - ), - - TP_fast_assign( - LOCAL_ASSIGN; - VIF_ASSIGN; - STA_ASSIGN; - __entry->iv32 = iv32; - ), - - TP_printk( - LOCAL_PR_FMT VIF_PR_FMT STA_PR_FMT " iv32:%#x", - LOCAL_PR_ARG,VIF_PR_ARG,STA_PR_ARG, __entry->iv32 - ) -); - -DEFINE_EVENT(local_sdata_evt, drv_hw_scan, - TP_PROTO(struct ieee80211_local *local, - struct ieee80211_sub_if_data *sdata), - TP_ARGS(local, sdata) -); - -DEFINE_EVENT(local_sdata_evt, drv_cancel_hw_scan, - TP_PROTO(struct ieee80211_local *local, - struct ieee80211_sub_if_data *sdata), - TP_ARGS(local, sdata) -); - -DEFINE_EVENT(local_sdata_evt, drv_sched_scan_start, - TP_PROTO(struct ieee80211_local *local, - struct ieee80211_sub_if_data *sdata), - TP_ARGS(local, sdata) -); - -DEFINE_EVENT(local_sdata_evt, drv_sched_scan_stop, - TP_PROTO(struct ieee80211_local *local, - struct ieee80211_sub_if_data *sdata), - TP_ARGS(local, sdata) -); - -DEFINE_EVENT(local_only_evt, drv_sw_scan_start, - TP_PROTO(struct ieee80211_local *local), - TP_ARGS(local) -); - -DEFINE_EVENT(local_only_evt, drv_sw_scan_complete, - TP_PROTO(struct ieee80211_local *local), - TP_ARGS(local) -); - -TRACE_EVENT(drv_get_stats, - TP_PROTO(struct ieee80211_local *local, - struct ieee80211_low_level_stats *stats, - int ret), - - TP_ARGS(local, stats, ret), - - TP_STRUCT__entry( - LOCAL_ENTRY - __field(int, ret) - __field(unsigned int, ackfail) - __field(unsigned int, rtsfail) - __field(unsigned int, fcserr) - __field(unsigned int, rtssucc) - ), - - TP_fast_assign( - LOCAL_ASSIGN; - __entry->ret = ret; - __entry->ackfail = stats->dot11ACKFailureCount; - __entry->rtsfail = stats->dot11RTSFailureCount; - __entry->fcserr = stats->dot11FCSErrorCount; - __entry->rtssucc = stats->dot11RTSSuccessCount; - ), - - TP_printk( - LOCAL_PR_FMT " ret:%d", - LOCAL_PR_ARG, __entry->ret - ) -); - -TRACE_EVENT(drv_get_tkip_seq, - TP_PROTO(struct ieee80211_local *local, - u8 hw_key_idx, u32 *iv32, u16 *iv16), - - TP_ARGS(local, hw_key_idx, iv32, iv16), - - TP_STRUCT__entry( - LOCAL_ENTRY - __field(u8, hw_key_idx) - __field(u32, iv32) - __field(u16, iv16) - ), - - TP_fast_assign( - LOCAL_ASSIGN; - __entry->hw_key_idx = hw_key_idx; - __entry->iv32 = *iv32; - __entry->iv16 = *iv16; - ), - - TP_printk( - LOCAL_PR_FMT, LOCAL_PR_ARG - ) -); - -DEFINE_EVENT(local_u32_evt, drv_set_frag_threshold, - TP_PROTO(struct ieee80211_local *local, u32 value), - TP_ARGS(local, value) -); - -DEFINE_EVENT(local_u32_evt, drv_set_rts_threshold, - TP_PROTO(struct ieee80211_local *local, u32 value), - TP_ARGS(local, value) -); - -TRACE_EVENT(drv_set_coverage_class, - TP_PROTO(struct ieee80211_local *local, u8 value), - - TP_ARGS(local, value), - - TP_STRUCT__entry( - LOCAL_ENTRY - __field(u8, value) - ), - - TP_fast_assign( - LOCAL_ASSIGN; - __entry->value = value; - ), - - TP_printk( - LOCAL_PR_FMT " value:%d", - LOCAL_PR_ARG, __entry->value - ) -); - -TRACE_EVENT(drv_sta_notify, - TP_PROTO(struct ieee80211_local *local, - struct ieee80211_sub_if_data *sdata, - enum sta_notify_cmd cmd, - struct ieee80211_sta *sta), - - TP_ARGS(local, sdata, cmd, sta), - - TP_STRUCT__entry( - LOCAL_ENTRY - VIF_ENTRY - STA_ENTRY - __field(u32, cmd) - ), - - TP_fast_assign( - LOCAL_ASSIGN; - VIF_ASSIGN; - STA_ASSIGN; - __entry->cmd = cmd; - ), - - TP_printk( - LOCAL_PR_FMT VIF_PR_FMT STA_PR_FMT " cmd:%d", - LOCAL_PR_ARG, VIF_PR_ARG, STA_PR_ARG, __entry->cmd - ) -); - -TRACE_EVENT(drv_sta_state, - TP_PROTO(struct ieee80211_local *local, - struct ieee80211_sub_if_data *sdata, - struct ieee80211_sta *sta, - enum ieee80211_sta_state old_state, - enum ieee80211_sta_state new_state), - - TP_ARGS(local, sdata, sta, old_state, new_state), - - TP_STRUCT__entry( - LOCAL_ENTRY - VIF_ENTRY - STA_ENTRY - __field(u32, old_state) - __field(u32, new_state) - ), - - TP_fast_assign( - LOCAL_ASSIGN; - VIF_ASSIGN; - STA_ASSIGN; - __entry->old_state = old_state; - __entry->new_state = new_state; - ), - - TP_printk( - LOCAL_PR_FMT VIF_PR_FMT STA_PR_FMT " state: %d->%d", - LOCAL_PR_ARG, VIF_PR_ARG, STA_PR_ARG, - __entry->old_state, __entry->new_state - ) -); - -TRACE_EVENT(drv_sta_add, - TP_PROTO(struct ieee80211_local *local, - struct ieee80211_sub_if_data *sdata, - struct ieee80211_sta *sta), - - TP_ARGS(local, sdata, sta), - - TP_STRUCT__entry( - LOCAL_ENTRY - VIF_ENTRY - STA_ENTRY - ), - - TP_fast_assign( - LOCAL_ASSIGN; - VIF_ASSIGN; - STA_ASSIGN; - ), - - TP_printk( - LOCAL_PR_FMT VIF_PR_FMT STA_PR_FMT, - LOCAL_PR_ARG, VIF_PR_ARG, STA_PR_ARG - ) -); - -TRACE_EVENT(drv_sta_remove, - TP_PROTO(struct ieee80211_local *local, - struct ieee80211_sub_if_data *sdata, - struct ieee80211_sta *sta), - - TP_ARGS(local, sdata, sta), - - TP_STRUCT__entry( - LOCAL_ENTRY - VIF_ENTRY - STA_ENTRY - ), - - TP_fast_assign( - LOCAL_ASSIGN; - VIF_ASSIGN; - STA_ASSIGN; - ), - - TP_printk( - LOCAL_PR_FMT VIF_PR_FMT STA_PR_FMT, - LOCAL_PR_ARG, VIF_PR_ARG, STA_PR_ARG - ) -); - -TRACE_EVENT(drv_conf_tx, - TP_PROTO(struct ieee80211_local *local, - struct ieee80211_sub_if_data *sdata, - u16 queue, - const struct ieee80211_tx_queue_params *params), - - TP_ARGS(local, sdata, queue, params), - - TP_STRUCT__entry( - LOCAL_ENTRY - VIF_ENTRY - __field(u16, queue) - __field(u16, txop) - __field(u16, cw_min) - __field(u16, cw_max) - __field(u8, aifs) - __field(bool, uapsd) - ), - - TP_fast_assign( - LOCAL_ASSIGN; - VIF_ASSIGN; - __entry->queue = queue; - __entry->txop = params->txop; - __entry->cw_max = params->cw_max; - __entry->cw_min = params->cw_min; - __entry->aifs = params->aifs; - __entry->uapsd = params->uapsd; - ), - - TP_printk( - LOCAL_PR_FMT VIF_PR_FMT " queue:%d", - LOCAL_PR_ARG, VIF_PR_ARG, __entry->queue - ) -); - -DEFINE_EVENT(local_sdata_evt, drv_get_tsf, - TP_PROTO(struct ieee80211_local *local, - struct ieee80211_sub_if_data *sdata), - TP_ARGS(local, sdata) -); - -TRACE_EVENT(drv_set_tsf, - TP_PROTO(struct ieee80211_local *local, - struct ieee80211_sub_if_data *sdata, - u64 tsf), - - TP_ARGS(local, sdata, tsf), - - TP_STRUCT__entry( - LOCAL_ENTRY - VIF_ENTRY - __field(u64, tsf) - ), - - TP_fast_assign( - LOCAL_ASSIGN; - VIF_ASSIGN; - __entry->tsf = tsf; - ), - - TP_printk( - LOCAL_PR_FMT VIF_PR_FMT " tsf:%llu", - LOCAL_PR_ARG, VIF_PR_ARG, (unsigned long long)__entry->tsf - ) -); - -DEFINE_EVENT(local_sdata_evt, drv_reset_tsf, - TP_PROTO(struct ieee80211_local *local, - struct ieee80211_sub_if_data *sdata), - TP_ARGS(local, sdata) -); - -DEFINE_EVENT(local_only_evt, drv_tx_last_beacon, - TP_PROTO(struct ieee80211_local *local), - TP_ARGS(local) -); - -TRACE_EVENT(drv_ampdu_action, - TP_PROTO(struct ieee80211_local *local, - struct ieee80211_sub_if_data *sdata, - enum ieee80211_ampdu_mlme_action action, - struct ieee80211_sta *sta, u16 tid, - u16 *ssn, u8 buf_size), - - TP_ARGS(local, sdata, action, sta, tid, ssn, buf_size), - - TP_STRUCT__entry( - LOCAL_ENTRY - STA_ENTRY - __field(u32, action) - __field(u16, tid) - __field(u16, ssn) - __field(u8, buf_size) - VIF_ENTRY - ), - - TP_fast_assign( - LOCAL_ASSIGN; - VIF_ASSIGN; - STA_ASSIGN; - __entry->action = action; - __entry->tid = tid; - __entry->ssn = ssn ? *ssn : 0; - __entry->buf_size = buf_size; - ), - - TP_printk( - LOCAL_PR_FMT VIF_PR_FMT STA_PR_FMT " action:%d tid:%d buf:%d", - LOCAL_PR_ARG, VIF_PR_ARG, STA_PR_ARG, __entry->action, - __entry->tid, __entry->buf_size - ) -); - -TRACE_EVENT(drv_get_survey, - TP_PROTO(struct ieee80211_local *local, int idx, - struct survey_info *survey), - - TP_ARGS(local, idx, survey), - - TP_STRUCT__entry( - LOCAL_ENTRY - __field(int, idx) - ), - - TP_fast_assign( - LOCAL_ASSIGN; - __entry->idx = idx; - ), - - TP_printk( - LOCAL_PR_FMT " idx:%d", - LOCAL_PR_ARG, __entry->idx - ) -); - -TRACE_EVENT(drv_flush, - TP_PROTO(struct ieee80211_local *local, bool drop), - - TP_ARGS(local, drop), - - TP_STRUCT__entry( - LOCAL_ENTRY - __field(bool, drop) - ), - - TP_fast_assign( - LOCAL_ASSIGN; - __entry->drop = drop; - ), - - TP_printk( - LOCAL_PR_FMT " drop:%d", - LOCAL_PR_ARG, __entry->drop - ) -); - -TRACE_EVENT(drv_channel_switch, - TP_PROTO(struct ieee80211_local *local, - struct ieee80211_channel_switch *ch_switch), - - TP_ARGS(local, ch_switch), - - TP_STRUCT__entry( - LOCAL_ENTRY - __field(u64, timestamp) - __field(bool, block_tx) - __field(u16, freq) - __field(u8, count) - ), - - TP_fast_assign( - LOCAL_ASSIGN; - __entry->timestamp = ch_switch->timestamp; - __entry->block_tx = ch_switch->block_tx; - __entry->freq = ch_switch->channel->center_freq; - __entry->count = ch_switch->count; - ), - - TP_printk( - LOCAL_PR_FMT " new freq:%u count:%d", - LOCAL_PR_ARG, __entry->freq, __entry->count - ) -); - -TRACE_EVENT(drv_set_antenna, - TP_PROTO(struct ieee80211_local *local, u32 tx_ant, u32 rx_ant, int ret), - - TP_ARGS(local, tx_ant, rx_ant, ret), - - TP_STRUCT__entry( - LOCAL_ENTRY - __field(u32, tx_ant) - __field(u32, rx_ant) - __field(int, ret) - ), - - TP_fast_assign( - LOCAL_ASSIGN; - __entry->tx_ant = tx_ant; - __entry->rx_ant = rx_ant; - __entry->ret = ret; - ), - - TP_printk( - LOCAL_PR_FMT " tx_ant:%d rx_ant:%d ret:%d", - LOCAL_PR_ARG, __entry->tx_ant, __entry->rx_ant, __entry->ret - ) -); - -TRACE_EVENT(drv_get_antenna, - TP_PROTO(struct ieee80211_local *local, u32 tx_ant, u32 rx_ant, int ret), - - TP_ARGS(local, tx_ant, rx_ant, ret), - - TP_STRUCT__entry( - LOCAL_ENTRY - __field(u32, tx_ant) - __field(u32, rx_ant) - __field(int, ret) - ), - - TP_fast_assign( - LOCAL_ASSIGN; - __entry->tx_ant = tx_ant; - __entry->rx_ant = rx_ant; - __entry->ret = ret; - ), - - TP_printk( - LOCAL_PR_FMT " tx_ant:%d rx_ant:%d ret:%d", - LOCAL_PR_ARG, __entry->tx_ant, __entry->rx_ant, __entry->ret - ) -); - -TRACE_EVENT(drv_remain_on_channel, - TP_PROTO(struct ieee80211_local *local, struct ieee80211_channel *chan, - enum nl80211_channel_type chantype, unsigned int duration), - - TP_ARGS(local, chan, chantype, duration), - - TP_STRUCT__entry( - LOCAL_ENTRY - __field(int, center_freq) - __field(int, channel_type) - __field(unsigned int, duration) - ), - - TP_fast_assign( - LOCAL_ASSIGN; - __entry->center_freq = chan->center_freq; - __entry->channel_type = chantype; - __entry->duration = duration; - ), - - TP_printk( - LOCAL_PR_FMT " freq:%dMHz duration:%dms", - LOCAL_PR_ARG, __entry->center_freq, __entry->duration - ) -); - -DEFINE_EVENT(local_only_evt, drv_cancel_remain_on_channel, - TP_PROTO(struct ieee80211_local *local), - TP_ARGS(local) -); - -TRACE_EVENT(drv_offchannel_tx, - TP_PROTO(struct ieee80211_local *local, struct sk_buff *skb, - struct ieee80211_channel *chan, - enum nl80211_channel_type channel_type, - unsigned int wait), - - TP_ARGS(local, skb, chan, channel_type, wait), - - TP_STRUCT__entry( - LOCAL_ENTRY - __field(int, center_freq) - __field(int, channel_type) - __field(unsigned int, wait) - ), - - TP_fast_assign( - LOCAL_ASSIGN; - __entry->center_freq = chan->center_freq; - __entry->channel_type = channel_type; - __entry->wait = wait; - ), - - TP_printk( - LOCAL_PR_FMT " freq:%dMHz, wait:%dms", - LOCAL_PR_ARG, __entry->center_freq, __entry->wait - ) -); - -TRACE_EVENT(drv_set_ringparam, - TP_PROTO(struct ieee80211_local *local, u32 tx, u32 rx), - - TP_ARGS(local, tx, rx), - - TP_STRUCT__entry( - LOCAL_ENTRY - __field(u32, tx) - __field(u32, rx) - ), - - TP_fast_assign( - LOCAL_ASSIGN; - __entry->tx = tx; - __entry->rx = rx; - ), - - TP_printk( - LOCAL_PR_FMT " tx:%d rx %d", - LOCAL_PR_ARG, __entry->tx, __entry->rx - ) -); - -TRACE_EVENT(drv_get_ringparam, - TP_PROTO(struct ieee80211_local *local, u32 *tx, u32 *tx_max, - u32 *rx, u32 *rx_max), - - TP_ARGS(local, tx, tx_max, rx, rx_max), - - TP_STRUCT__entry( - LOCAL_ENTRY - __field(u32, tx) - __field(u32, tx_max) - __field(u32, rx) - __field(u32, rx_max) - ), - - TP_fast_assign( - LOCAL_ASSIGN; - __entry->tx = *tx; - __entry->tx_max = *tx_max; - __entry->rx = *rx; - __entry->rx_max = *rx_max; - ), - - TP_printk( - LOCAL_PR_FMT " tx:%d tx_max %d rx %d rx_max %d", - LOCAL_PR_ARG, - __entry->tx, __entry->tx_max, __entry->rx, __entry->rx_max - ) -); - -DEFINE_EVENT(local_only_evt, drv_tx_frames_pending, - TP_PROTO(struct ieee80211_local *local), - TP_ARGS(local) -); - -DEFINE_EVENT(local_only_evt, drv_offchannel_tx_cancel_wait, - TP_PROTO(struct ieee80211_local *local), - TP_ARGS(local) -); - -TRACE_EVENT(drv_set_bitrate_mask, - TP_PROTO(struct ieee80211_local *local, - struct ieee80211_sub_if_data *sdata, - const struct cfg80211_bitrate_mask *mask), - - TP_ARGS(local, sdata, mask), - - TP_STRUCT__entry( - LOCAL_ENTRY - VIF_ENTRY - __field(u32, legacy_2g) - __field(u32, legacy_5g) - ), - - TP_fast_assign( - LOCAL_ASSIGN; - VIF_ASSIGN; - __entry->legacy_2g = mask->control[IEEE80211_BAND_2GHZ].legacy; - __entry->legacy_5g = mask->control[IEEE80211_BAND_5GHZ].legacy; - ), - - TP_printk( - LOCAL_PR_FMT VIF_PR_FMT " 2G Mask:0x%x 5G Mask:0x%x", - LOCAL_PR_ARG, VIF_PR_ARG, __entry->legacy_2g, __entry->legacy_5g - ) -); - -TRACE_EVENT(drv_set_rekey_data, - TP_PROTO(struct ieee80211_local *local, - struct ieee80211_sub_if_data *sdata, - struct cfg80211_gtk_rekey_data *data), - - TP_ARGS(local, sdata, data), - - TP_STRUCT__entry( - LOCAL_ENTRY - VIF_ENTRY - __array(u8, kek, NL80211_KEK_LEN) - __array(u8, kck, NL80211_KCK_LEN) - __array(u8, replay_ctr, NL80211_REPLAY_CTR_LEN) - ), - - TP_fast_assign( - LOCAL_ASSIGN; - VIF_ASSIGN; - memcpy(__entry->kek, data->kek, NL80211_KEK_LEN); - memcpy(__entry->kck, data->kck, NL80211_KCK_LEN); - memcpy(__entry->replay_ctr, data->replay_ctr, - NL80211_REPLAY_CTR_LEN); - ), - - TP_printk(LOCAL_PR_FMT VIF_PR_FMT, - LOCAL_PR_ARG, VIF_PR_ARG) -); - -TRACE_EVENT(drv_rssi_callback, - TP_PROTO(struct ieee80211_local *local, - enum ieee80211_rssi_event rssi_event), - - TP_ARGS(local, rssi_event), - - TP_STRUCT__entry( - LOCAL_ENTRY - __field(u32, rssi_event) - ), - - TP_fast_assign( - LOCAL_ASSIGN; - __entry->rssi_event = rssi_event; - ), - - TP_printk( - LOCAL_PR_FMT " rssi_event:%d", - LOCAL_PR_ARG, __entry->rssi_event - ) -); - -DECLARE_EVENT_CLASS(release_evt, - TP_PROTO(struct ieee80211_local *local, - struct ieee80211_sta *sta, - u16 tids, int num_frames, - enum ieee80211_frame_release_type reason, - bool more_data), - - TP_ARGS(local, sta, tids, num_frames, reason, more_data), - - TP_STRUCT__entry( - LOCAL_ENTRY - STA_ENTRY - __field(u16, tids) - __field(int, num_frames) - __field(int, reason) - __field(bool, more_data) - ), - - TP_fast_assign( - LOCAL_ASSIGN; - STA_ASSIGN; - __entry->tids = tids; - __entry->num_frames = num_frames; - __entry->reason = reason; - __entry->more_data = more_data; - ), - - TP_printk( - LOCAL_PR_FMT STA_PR_FMT - " TIDs:0x%.4x frames:%d reason:%d more:%d", - LOCAL_PR_ARG, STA_PR_ARG, __entry->tids, __entry->num_frames, - __entry->reason, __entry->more_data - ) -); - -DEFINE_EVENT(release_evt, drv_release_buffered_frames, - TP_PROTO(struct ieee80211_local *local, - struct ieee80211_sta *sta, - u16 tids, int num_frames, - enum ieee80211_frame_release_type reason, - bool more_data), - - TP_ARGS(local, sta, tids, num_frames, reason, more_data) -); - -DEFINE_EVENT(release_evt, drv_allow_buffered_frames, - TP_PROTO(struct ieee80211_local *local, - struct ieee80211_sta *sta, - u16 tids, int num_frames, - enum ieee80211_frame_release_type reason, - bool more_data), - - TP_ARGS(local, sta, tids, num_frames, reason, more_data) -); - -/* - * Tracing for API calls that drivers call. - */ - -TRACE_EVENT(api_start_tx_ba_session, - TP_PROTO(struct ieee80211_sta *sta, u16 tid), - - TP_ARGS(sta, tid), - - TP_STRUCT__entry( - STA_ENTRY - __field(u16, tid) - ), - - TP_fast_assign( - STA_ASSIGN; - __entry->tid = tid; - ), - - TP_printk( - STA_PR_FMT " tid:%d", - STA_PR_ARG, __entry->tid - ) -); - -TRACE_EVENT(api_start_tx_ba_cb, - TP_PROTO(struct ieee80211_sub_if_data *sdata, const u8 *ra, u16 tid), - - TP_ARGS(sdata, ra, tid), - - TP_STRUCT__entry( - VIF_ENTRY - __array(u8, ra, ETH_ALEN) - __field(u16, tid) - ), - - TP_fast_assign( - VIF_ASSIGN; - memcpy(__entry->ra, ra, ETH_ALEN); - __entry->tid = tid; - ), - - TP_printk( - VIF_PR_FMT " ra:%pM tid:%d", - VIF_PR_ARG, __entry->ra, __entry->tid - ) -); - -TRACE_EVENT(api_stop_tx_ba_session, - TP_PROTO(struct ieee80211_sta *sta, u16 tid), - - TP_ARGS(sta, tid), - - TP_STRUCT__entry( - STA_ENTRY - __field(u16, tid) - ), - - TP_fast_assign( - STA_ASSIGN; - __entry->tid = tid; - ), - - TP_printk( - STA_PR_FMT " tid:%d", - STA_PR_ARG, __entry->tid - ) -); - -TRACE_EVENT(api_stop_tx_ba_cb, - TP_PROTO(struct ieee80211_sub_if_data *sdata, const u8 *ra, u16 tid), - - TP_ARGS(sdata, ra, tid), - - TP_STRUCT__entry( - VIF_ENTRY - __array(u8, ra, ETH_ALEN) - __field(u16, tid) - ), - - TP_fast_assign( - VIF_ASSIGN; - memcpy(__entry->ra, ra, ETH_ALEN); - __entry->tid = tid; - ), - - TP_printk( - VIF_PR_FMT " ra:%pM tid:%d", - VIF_PR_ARG, __entry->ra, __entry->tid - ) -); - -DEFINE_EVENT(local_only_evt, api_restart_hw, - TP_PROTO(struct ieee80211_local *local), - TP_ARGS(local) -); - -TRACE_EVENT(api_beacon_loss, - TP_PROTO(struct ieee80211_sub_if_data *sdata), - - TP_ARGS(sdata), - - TP_STRUCT__entry( - VIF_ENTRY - ), - - TP_fast_assign( - VIF_ASSIGN; - ), - - TP_printk( - VIF_PR_FMT, - VIF_PR_ARG - ) -); - -TRACE_EVENT(api_connection_loss, - TP_PROTO(struct ieee80211_sub_if_data *sdata), - - TP_ARGS(sdata), - - TP_STRUCT__entry( - VIF_ENTRY - ), - - TP_fast_assign( - VIF_ASSIGN; - ), - - TP_printk( - VIF_PR_FMT, - VIF_PR_ARG - ) -); - -TRACE_EVENT(api_cqm_rssi_notify, - TP_PROTO(struct ieee80211_sub_if_data *sdata, - enum nl80211_cqm_rssi_threshold_event rssi_event), - - TP_ARGS(sdata, rssi_event), - - TP_STRUCT__entry( - VIF_ENTRY - __field(u32, rssi_event) - ), - - TP_fast_assign( - VIF_ASSIGN; - __entry->rssi_event = rssi_event; - ), - - TP_printk( - VIF_PR_FMT " event:%d", - VIF_PR_ARG, __entry->rssi_event - ) -); - -TRACE_EVENT(api_scan_completed, - TP_PROTO(struct ieee80211_local *local, bool aborted), - - TP_ARGS(local, aborted), - - TP_STRUCT__entry( - LOCAL_ENTRY - __field(bool, aborted) - ), - - TP_fast_assign( - LOCAL_ASSIGN; - __entry->aborted = aborted; - ), - - TP_printk( - LOCAL_PR_FMT " aborted:%d", - LOCAL_PR_ARG, __entry->aborted - ) -); - -TRACE_EVENT(api_sched_scan_results, - TP_PROTO(struct ieee80211_local *local), - - TP_ARGS(local), - - TP_STRUCT__entry( - LOCAL_ENTRY - ), - - TP_fast_assign( - LOCAL_ASSIGN; - ), - - TP_printk( - LOCAL_PR_FMT, LOCAL_PR_ARG - ) -); - -TRACE_EVENT(api_sched_scan_stopped, - TP_PROTO(struct ieee80211_local *local), - - TP_ARGS(local), - - TP_STRUCT__entry( - LOCAL_ENTRY - ), - - TP_fast_assign( - LOCAL_ASSIGN; - ), - - TP_printk( - LOCAL_PR_FMT, LOCAL_PR_ARG - ) -); - -TRACE_EVENT(api_sta_block_awake, - TP_PROTO(struct ieee80211_local *local, - struct ieee80211_sta *sta, bool block), - - TP_ARGS(local, sta, block), - - TP_STRUCT__entry( - LOCAL_ENTRY - STA_ENTRY - __field(bool, block) - ), - - TP_fast_assign( - LOCAL_ASSIGN; - STA_ASSIGN; - __entry->block = block; - ), - - TP_printk( - LOCAL_PR_FMT STA_PR_FMT " block:%d", - LOCAL_PR_ARG, STA_PR_FMT, __entry->block - ) -); - -TRACE_EVENT(api_chswitch_done, - TP_PROTO(struct ieee80211_sub_if_data *sdata, bool success), - - TP_ARGS(sdata, success), - - TP_STRUCT__entry( - VIF_ENTRY - __field(bool, success) - ), - - TP_fast_assign( - VIF_ASSIGN; - __entry->success = success; - ), - - TP_printk( - VIF_PR_FMT " success=%d", - VIF_PR_ARG, __entry->success - ) -); - -DEFINE_EVENT(local_only_evt, api_ready_on_channel, - TP_PROTO(struct ieee80211_local *local), - TP_ARGS(local) -); - -DEFINE_EVENT(local_only_evt, api_remain_on_channel_expired, - TP_PROTO(struct ieee80211_local *local), - TP_ARGS(local) -); - -TRACE_EVENT(api_gtk_rekey_notify, - TP_PROTO(struct ieee80211_sub_if_data *sdata, - const u8 *bssid, const u8 *replay_ctr), - - TP_ARGS(sdata, bssid, replay_ctr), - - TP_STRUCT__entry( - VIF_ENTRY - __array(u8, bssid, ETH_ALEN) - __array(u8, replay_ctr, NL80211_REPLAY_CTR_LEN) - ), - - TP_fast_assign( - VIF_ASSIGN; - memcpy(__entry->bssid, bssid, ETH_ALEN); - memcpy(__entry->replay_ctr, replay_ctr, NL80211_REPLAY_CTR_LEN); - ), - - TP_printk(VIF_PR_FMT, VIF_PR_ARG) -); - -TRACE_EVENT(api_enable_rssi_reports, - TP_PROTO(struct ieee80211_sub_if_data *sdata, - int rssi_min_thold, int rssi_max_thold), - - TP_ARGS(sdata, rssi_min_thold, rssi_max_thold), - - TP_STRUCT__entry( - VIF_ENTRY - __field(int, rssi_min_thold) - __field(int, rssi_max_thold) - ), - - TP_fast_assign( - VIF_ASSIGN; - __entry->rssi_min_thold = rssi_min_thold; - __entry->rssi_max_thold = rssi_max_thold; - ), - - TP_printk( - VIF_PR_FMT " rssi_min_thold =%d, rssi_max_thold = %d", - VIF_PR_ARG, __entry->rssi_min_thold, __entry->rssi_max_thold - ) -); - -TRACE_EVENT(api_eosp, - TP_PROTO(struct ieee80211_local *local, - struct ieee80211_sta *sta), - - TP_ARGS(local, sta), - - TP_STRUCT__entry( - LOCAL_ENTRY - STA_ENTRY - ), - - TP_fast_assign( - LOCAL_ASSIGN; - STA_ASSIGN; - ), - - TP_printk( - LOCAL_PR_FMT STA_PR_FMT, - LOCAL_PR_ARG, STA_PR_FMT - ) -); - -/* - * Tracing for internal functions - * (which may also be called in response to driver calls) - */ - -TRACE_EVENT(wake_queue, - TP_PROTO(struct ieee80211_local *local, u16 queue, - enum queue_stop_reason reason), - - TP_ARGS(local, queue, reason), - - TP_STRUCT__entry( - LOCAL_ENTRY - __field(u16, queue) - __field(u32, reason) - ), - - TP_fast_assign( - LOCAL_ASSIGN; - __entry->queue = queue; - __entry->reason = reason; - ), - - TP_printk( - LOCAL_PR_FMT " queue:%d, reason:%d", - LOCAL_PR_ARG, __entry->queue, __entry->reason - ) -); - -TRACE_EVENT(stop_queue, - TP_PROTO(struct ieee80211_local *local, u16 queue, - enum queue_stop_reason reason), - - TP_ARGS(local, queue, reason), - - TP_STRUCT__entry( - LOCAL_ENTRY - __field(u16, queue) - __field(u32, reason) - ), - - TP_fast_assign( - LOCAL_ASSIGN; - __entry->queue = queue; - __entry->reason = reason; - ), - - TP_printk( - LOCAL_PR_FMT " queue:%d, reason:%d", - LOCAL_PR_ARG, __entry->queue, __entry->reason - ) -); -#endif /* !__MAC80211_DRIVER_TRACE || TRACE_HEADER_MULTI_READ */ - -#undef TRACE_INCLUDE_PATH -#define TRACE_INCLUDE_PATH . -#undef TRACE_INCLUDE_FILE -#define TRACE_INCLUDE_FILE driver-trace -#include diff --git a/openairITS/mac/DOT11/net/mac80211/event.c b/openairITS/mac/DOT11/net/mac80211/event.c deleted file mode 100644 index 01ae759518..0000000000 --- a/openairITS/mac/DOT11/net/mac80211/event.c +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright 2007 Johannes Berg - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - * - * mac80211 - events - */ -#include -#include "ieee80211_i.h" - -/* - * Indicate a failed Michael MIC to userspace. If the caller knows the TSC of - * the frame that generated the MIC failure (i.e., if it was provided by the - * driver or is still in the frame), it should provide that information. - */ -void mac80211_ev_michael_mic_failure(struct ieee80211_sub_if_data *sdata, int keyidx, - struct ieee80211_hdr *hdr, const u8 *tsc, - gfp_t gfp) -{ - cfg80211_michael_mic_failure(sdata->dev, hdr->addr2, - (hdr->addr1[0] & 0x01) ? - NL80211_KEYTYPE_GROUP : - NL80211_KEYTYPE_PAIRWISE, - keyidx, tsc, gfp); -} diff --git a/openairITS/mac/DOT11/net/mac80211/ht.c b/openairITS/mac/DOT11/net/mac80211/ht.c deleted file mode 100644 index f25fff7607..0000000000 --- a/openairITS/mac/DOT11/net/mac80211/ht.c +++ /dev/null @@ -1,407 +0,0 @@ -/* - * HT handling - * - * Copyright 2003, Jouni Malinen - * Copyright 2002-2005, Instant802 Networks, Inc. - * Copyright 2005-2006, Devicescape Software, Inc. - * Copyright 2006-2007 Jiri Benc - * Copyright 2007, Michael Wu - * Copyright 2007-2010, Intel Corporation - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - */ - -#include -#include -#include -#include "ieee80211_i.h" -#include "rate.h" - -bool ieee80111_cfg_override_disables_ht40(struct ieee80211_sub_if_data *sdata) -{ - const __le16 flg = cpu_to_le16(IEEE80211_HT_CAP_SUP_WIDTH_20_40); - if ((sdata->u.mgd.ht_capa_mask.cap_info & flg) && - !(sdata->u.mgd.ht_capa.cap_info & flg)) - return true; - return false; -} - -static void __check_htcap_disable(struct ieee80211_sub_if_data *sdata, - struct ieee80211_sta_ht_cap *ht_cap, - u16 flag) -{ - __le16 le_flag = cpu_to_le16(flag); - if (sdata->u.mgd.ht_capa_mask.cap_info & le_flag) { - if (!(sdata->u.mgd.ht_capa.cap_info & le_flag)) - ht_cap->cap &= ~flag; - } -} - -void ieee80211_apply_htcap_overrides(struct ieee80211_sub_if_data *sdata, - struct ieee80211_sta_ht_cap *ht_cap) -{ - u8 *scaps = (u8 *)(&sdata->u.mgd.ht_capa.mcs.rx_mask); - u8 *smask = (u8 *)(&sdata->u.mgd.ht_capa_mask.mcs.rx_mask); - int i; - - if (sdata->vif.type != NL80211_IFTYPE_STATION) { - /* AP interfaces call this code when adding new stations, - * so just silently ignore non station interfaces. - */ - return; - } - - /* NOTE: If you add more over-rides here, update register_hw - * ht_capa_mod_msk logic in main.c as well. - * And, if this method can ever change ht_cap.ht_supported, fix - * the check in ieee80211_add_ht_ie. - */ - - /* check for HT over-rides, MCS rates first. */ - for (i = 0; i < IEEE80211_HT_MCS_MASK_LEN; i++) { - u8 m = smask[i]; - ht_cap->mcs.rx_mask[i] &= ~m; /* turn off all masked bits */ - /* Add back rates that are supported */ - ht_cap->mcs.rx_mask[i] |= (m & scaps[i]); - } - - /* Force removal of HT-40 capabilities? */ - __check_htcap_disable(sdata, ht_cap, IEEE80211_HT_CAP_SUP_WIDTH_20_40); - __check_htcap_disable(sdata, ht_cap, IEEE80211_HT_CAP_SGI_40); - - /* Allow user to disable the max-AMSDU bit. */ - __check_htcap_disable(sdata, ht_cap, IEEE80211_HT_CAP_MAX_AMSDU); - - /* Allow user to decrease AMPDU factor */ - if (sdata->u.mgd.ht_capa_mask.ampdu_params_info & - IEEE80211_HT_AMPDU_PARM_FACTOR) { - u8 n = sdata->u.mgd.ht_capa.ampdu_params_info - & IEEE80211_HT_AMPDU_PARM_FACTOR; - if (n < ht_cap->ampdu_factor) - ht_cap->ampdu_factor = n; - } - - /* Allow the user to increase AMPDU density. */ - if (sdata->u.mgd.ht_capa_mask.ampdu_params_info & - IEEE80211_HT_AMPDU_PARM_DENSITY) { - u8 n = (sdata->u.mgd.ht_capa.ampdu_params_info & - IEEE80211_HT_AMPDU_PARM_DENSITY) - >> IEEE80211_HT_AMPDU_PARM_DENSITY_SHIFT; - if (n > ht_cap->ampdu_density) - ht_cap->ampdu_density = n; - } -} - - -void ieee80211_ht_cap_ie_to_sta_ht_cap(struct ieee80211_sub_if_data *sdata, - struct ieee80211_supported_band *sband, - struct ieee80211_ht_cap *ht_cap_ie, - struct ieee80211_sta_ht_cap *ht_cap) -{ - u8 ampdu_info, tx_mcs_set_cap; - int i, max_tx_streams; - - BUG_ON(!ht_cap); - - memset(ht_cap, 0, sizeof(*ht_cap)); - - if (!ht_cap_ie || !sband->ht_cap.ht_supported) - return; - - ht_cap->ht_supported = true; - - /* - * The bits listed in this expression should be - * the same for the peer and us, if the station - * advertises more then we can't use those thus - * we mask them out. - */ - ht_cap->cap = le16_to_cpu(ht_cap_ie->cap_info) & - (sband->ht_cap.cap | - ~(IEEE80211_HT_CAP_LDPC_CODING | - IEEE80211_HT_CAP_SUP_WIDTH_20_40 | - IEEE80211_HT_CAP_GRN_FLD | - IEEE80211_HT_CAP_SGI_20 | - IEEE80211_HT_CAP_SGI_40 | - IEEE80211_HT_CAP_DSSSCCK40)); - /* - * The STBC bits are asymmetric -- if we don't have - * TX then mask out the peer's RX and vice versa. - */ - if (!(sband->ht_cap.cap & IEEE80211_HT_CAP_TX_STBC)) - ht_cap->cap &= ~IEEE80211_HT_CAP_RX_STBC; - if (!(sband->ht_cap.cap & IEEE80211_HT_CAP_RX_STBC)) - ht_cap->cap &= ~IEEE80211_HT_CAP_TX_STBC; - - ampdu_info = ht_cap_ie->ampdu_params_info; - ht_cap->ampdu_factor = - ampdu_info & IEEE80211_HT_AMPDU_PARM_FACTOR; - ht_cap->ampdu_density = - (ampdu_info & IEEE80211_HT_AMPDU_PARM_DENSITY) >> 2; - - /* own MCS TX capabilities */ - tx_mcs_set_cap = sband->ht_cap.mcs.tx_params; - - /* Copy peer MCS TX capabilities, the driver might need them. */ - ht_cap->mcs.tx_params = ht_cap_ie->mcs.tx_params; - - /* can we TX with MCS rates? */ - if (!(tx_mcs_set_cap & IEEE80211_HT_MCS_TX_DEFINED)) - return; - - /* Counting from 0, therefore +1 */ - if (tx_mcs_set_cap & IEEE80211_HT_MCS_TX_RX_DIFF) - max_tx_streams = - ((tx_mcs_set_cap & IEEE80211_HT_MCS_TX_MAX_STREAMS_MASK) - >> IEEE80211_HT_MCS_TX_MAX_STREAMS_SHIFT) + 1; - else - max_tx_streams = IEEE80211_HT_MCS_TX_MAX_STREAMS; - - /* - * 802.11n-2009 20.3.5 / 20.6 says: - * - indices 0 to 7 and 32 are single spatial stream - * - 8 to 31 are multiple spatial streams using equal modulation - * [8..15 for two streams, 16..23 for three and 24..31 for four] - * - remainder are multiple spatial streams using unequal modulation - */ - for (i = 0; i < max_tx_streams; i++) - ht_cap->mcs.rx_mask[i] = - sband->ht_cap.mcs.rx_mask[i] & ht_cap_ie->mcs.rx_mask[i]; - - if (tx_mcs_set_cap & IEEE80211_HT_MCS_TX_UNEQUAL_MODULATION) - for (i = IEEE80211_HT_MCS_UNEQUAL_MODULATION_START_BYTE; - i < IEEE80211_HT_MCS_MASK_LEN; i++) - ht_cap->mcs.rx_mask[i] = - sband->ht_cap.mcs.rx_mask[i] & - ht_cap_ie->mcs.rx_mask[i]; - - /* handle MCS rate 32 too */ - if (sband->ht_cap.mcs.rx_mask[32/8] & ht_cap_ie->mcs.rx_mask[32/8] & 1) - ht_cap->mcs.rx_mask[32/8] |= 1; - - /* - * If user has specified capability over-rides, take care - * of that here. - */ - ieee80211_apply_htcap_overrides(sdata, ht_cap); -} - -void ieee80211_sta_tear_down_BA_sessions(struct sta_info *sta, bool tx) -{ - int i; - - cancel_work_sync(&sta->ampdu_mlme.work); - - for (i = 0; i < STA_TID_NUM; i++) { - __ieee80211_stop_tx_ba_session(sta, i, WLAN_BACK_INITIATOR, tx); - __ieee80211_stop_rx_ba_session(sta, i, WLAN_BACK_RECIPIENT, - WLAN_REASON_QSTA_LEAVE_QBSS, tx); - } -} - -void ieee80211_ba_session_work(struct work_struct *work) -{ - struct sta_info *sta = - container_of(work, struct sta_info, ampdu_mlme.work); - struct tid_ampdu_tx *tid_tx; - int tid; - - /* - * When this flag is set, new sessions should be - * blocked, and existing sessions will be torn - * down by the code that set the flag, so this - * need not run. - */ - if (test_sta_flag(sta, WLAN_STA_BLOCK_BA)) - return; - - mutex_lock(&sta->ampdu_mlme.mtx); - for (tid = 0; tid < STA_TID_NUM; tid++) { - if (test_and_clear_bit(tid, sta->ampdu_mlme.tid_rx_timer_expired)) - ___ieee80211_stop_rx_ba_session( - sta, tid, WLAN_BACK_RECIPIENT, - WLAN_REASON_QSTA_TIMEOUT, true); - - if (test_and_clear_bit(tid, - sta->ampdu_mlme.tid_rx_stop_requested)) - ___ieee80211_stop_rx_ba_session( - sta, tid, WLAN_BACK_RECIPIENT, - WLAN_REASON_UNSPECIFIED, true); - - tid_tx = sta->ampdu_mlme.tid_start_tx[tid]; - if (tid_tx) { - /* - * Assign it over to the normal tid_tx array - * where it "goes live". - */ - spin_lock_bh(&sta->lock); - - sta->ampdu_mlme.tid_start_tx[tid] = NULL; - /* could there be a race? */ - if (sta->ampdu_mlme.tid_tx[tid]) - kfree(tid_tx); - else - ieee80211_assign_tid_tx(sta, tid, tid_tx); - spin_unlock_bh(&sta->lock); - - ieee80211_tx_ba_session_handle_start(sta, tid); - continue; - } - - tid_tx = rcu_dereference_protected_tid_tx(sta, tid); - if (tid_tx && test_and_clear_bit(HT_AGG_STATE_WANT_STOP, - &tid_tx->state)) - ___ieee80211_stop_tx_ba_session(sta, tid, - WLAN_BACK_INITIATOR, - true); - } - mutex_unlock(&sta->ampdu_mlme.mtx); -} - -void ieee80211_send_delba(struct ieee80211_sub_if_data *sdata, - const u8 *da, u16 tid, - u16 initiator, u16 reason_code) -{ - struct ieee80211_local *local = sdata->local; - struct sk_buff *skb; - struct ieee80211_mgmt *mgmt; - u16 params; - - skb = dev_alloc_skb(sizeof(*mgmt) + local->hw.extra_tx_headroom); - if (!skb) - return; - - skb_reserve(skb, local->hw.extra_tx_headroom); - mgmt = (struct ieee80211_mgmt *) skb_put(skb, 24); - memset(mgmt, 0, 24); - memcpy(mgmt->da, da, ETH_ALEN); - memcpy(mgmt->sa, sdata->vif.addr, ETH_ALEN); - if (sdata->vif.type == NL80211_IFTYPE_AP || - sdata->vif.type == NL80211_IFTYPE_AP_VLAN || - sdata->vif.type == NL80211_IFTYPE_MESH_POINT) - memcpy(mgmt->bssid, sdata->vif.addr, ETH_ALEN); - else if (sdata->vif.type == NL80211_IFTYPE_STATION) - memcpy(mgmt->bssid, sdata->u.mgd.bssid, ETH_ALEN); - else if (sdata->vif.type == NL80211_IFTYPE_ADHOC) - memcpy(mgmt->bssid, sdata->u.ibss.bssid, ETH_ALEN); - - mgmt->frame_control = cpu_to_le16(IEEE80211_FTYPE_MGMT | - IEEE80211_STYPE_ACTION); - - skb_put(skb, 1 + sizeof(mgmt->u.action.u.delba)); - - mgmt->u.action.category = WLAN_CATEGORY_BACK; - mgmt->u.action.u.delba.action_code = WLAN_ACTION_DELBA; - params = (u16)(initiator << 11); /* bit 11 initiator */ - params |= (u16)(tid << 12); /* bit 15:12 TID number */ - - mgmt->u.action.u.delba.params = cpu_to_le16(params); - mgmt->u.action.u.delba.reason_code = cpu_to_le16(reason_code); - - ieee80211_tx_skb_tid(sdata, skb, tid); -} - -void ieee80211_process_delba(struct ieee80211_sub_if_data *sdata, - struct sta_info *sta, - struct ieee80211_mgmt *mgmt, size_t len) -{ - u16 tid, params; - u16 initiator; - - params = le16_to_cpu(mgmt->u.action.u.delba.params); - tid = (params & IEEE80211_DELBA_PARAM_TID_MASK) >> 12; - initiator = (params & IEEE80211_DELBA_PARAM_INITIATOR_MASK) >> 11; - -#ifdef CONFIG_MAC80211_HT_DEBUG - if (net_ratelimit()) - printk(KERN_DEBUG "delba from %pM (%s) tid %d reason code %d\n", - mgmt->sa, initiator ? "initiator" : "recipient", tid, - le16_to_cpu(mgmt->u.action.u.delba.reason_code)); -#endif /* CONFIG_MAC80211_HT_DEBUG */ - - if (initiator == WLAN_BACK_INITIATOR) - __ieee80211_stop_rx_ba_session(sta, tid, WLAN_BACK_INITIATOR, 0, - true); - else - __ieee80211_stop_tx_ba_session(sta, tid, WLAN_BACK_RECIPIENT, - true); -} - -int ieee80211_send_smps_action(struct ieee80211_sub_if_data *sdata, - enum ieee80211_smps_mode smps, const u8 *da, - const u8 *bssid) -{ - struct ieee80211_local *local = sdata->local; - struct sk_buff *skb; - struct ieee80211_mgmt *action_frame; - - /* 27 = header + category + action + smps mode */ - skb = dev_alloc_skb(27 + local->hw.extra_tx_headroom); - if (!skb) - return -ENOMEM; - - skb_reserve(skb, local->hw.extra_tx_headroom); - action_frame = (void *)skb_put(skb, 27); - memcpy(action_frame->da, da, ETH_ALEN); - memcpy(action_frame->sa, sdata->dev->dev_addr, ETH_ALEN); - memcpy(action_frame->bssid, bssid, ETH_ALEN); - action_frame->frame_control = cpu_to_le16(IEEE80211_FTYPE_MGMT | - IEEE80211_STYPE_ACTION); - action_frame->u.action.category = WLAN_CATEGORY_HT; - action_frame->u.action.u.ht_smps.action = WLAN_HT_ACTION_SMPS; - switch (smps) { - case IEEE80211_SMPS_AUTOMATIC: - case IEEE80211_SMPS_NUM_MODES: - WARN_ON(1); - case IEEE80211_SMPS_OFF: - action_frame->u.action.u.ht_smps.smps_control = - WLAN_HT_SMPS_CONTROL_DISABLED; - break; - case IEEE80211_SMPS_STATIC: - action_frame->u.action.u.ht_smps.smps_control = - WLAN_HT_SMPS_CONTROL_STATIC; - break; - case IEEE80211_SMPS_DYNAMIC: - action_frame->u.action.u.ht_smps.smps_control = - WLAN_HT_SMPS_CONTROL_DYNAMIC; - break; - } - - /* we'll do more on status of this frame */ - IEEE80211_SKB_CB(skb)->flags |= IEEE80211_TX_CTL_REQ_TX_STATUS; - ieee80211_tx_skb(sdata, skb); - - return 0; -} - -void ieee80211_request_smps_work(struct work_struct *work) -{ - struct ieee80211_sub_if_data *sdata = - container_of(work, struct ieee80211_sub_if_data, - u.mgd.request_smps_work); - - mutex_lock(&sdata->u.mgd.mtx); - __ieee80211_request_smps(sdata, sdata->u.mgd.driver_smps_mode); - mutex_unlock(&sdata->u.mgd.mtx); -} - -void ieee80211_request_smps(struct ieee80211_vif *vif, - enum ieee80211_smps_mode smps_mode) -{ - struct ieee80211_sub_if_data *sdata = vif_to_sdata(vif); - - if (WARN_ON(vif->type != NL80211_IFTYPE_STATION)) - return; - - if (WARN_ON(smps_mode == IEEE80211_SMPS_OFF)) - smps_mode = IEEE80211_SMPS_AUTOMATIC; - - sdata->u.mgd.driver_smps_mode = smps_mode; - - ieee80211_queue_work(&sdata->local->hw, - &sdata->u.mgd.request_smps_work); -} -/* this might change ... don't want non-open drivers using it */ -EXPORT_SYMBOL_GPL(ieee80211_request_smps); diff --git a/openairITS/mac/DOT11/net/mac80211/ibss.c b/openairITS/mac/DOT11/net/mac80211/ibss.c deleted file mode 100644 index 88dcfe625b..0000000000 --- a/openairITS/mac/DOT11/net/mac80211/ibss.c +++ /dev/null @@ -1,1223 +0,0 @@ -/* - * IBSS mode implementation - * Copyright 2003-2008, Jouni Malinen - * Copyright 2004, Instant802 Networks, Inc. - * Copyright 2005, Devicescape Software, Inc. - * Copyright 2006-2007 Jiri Benc - * Copyright 2007, Michael Wu - * Copyright 2009, Johannes Berg - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - */ - -#include -#include -#include -#include -#include -#include -#include -#include - -#include "ieee80211_i.h" -#include "driver-ops.h" -#include "rate.h" - -#define IEEE80211_SCAN_INTERVAL (2 * HZ) -#define IEEE80211_SCAN_INTERVAL_SLOW (15 * HZ) -#define IEEE80211_IBSS_JOIN_TIMEOUT (7 * HZ) - -#define IEEE80211_IBSS_MERGE_INTERVAL (30 * HZ) -#define IEEE80211_IBSS_INACTIVITY_LIMIT (60 * HZ) - -#define IEEE80211_IBSS_MAX_STA_ENTRIES 128 - - -static void __ieee80211_sta_join_ibss(struct ieee80211_sub_if_data *sdata, - const u8 *bssid, const int beacon_int, - struct ieee80211_channel *chan, - const u32 basic_rates, - const u16 capability, u64 tsf) -{ - struct ieee80211_if_ibss *ifibss = &sdata->u.ibss; - struct ieee80211_local *local = sdata->local; - int rates, i; - struct sk_buff *skb; - struct ieee80211_mgmt *mgmt; - u8 *pos; - struct ieee80211_supported_band *sband; - struct cfg80211_bss *bss; - u32 bss_change; - u8 supp_rates[IEEE80211_MAX_SUPP_RATES]; - enum nl80211_channel_type channel_type; - - lockdep_assert_held(&ifibss->mtx); - - /* Reset own TSF to allow time synchronization work. */ - drv_reset_tsf(local, sdata); - - skb = ifibss->skb; - RCU_INIT_POINTER(ifibss->presp, NULL); - synchronize_rcu(); - skb->data = skb->head; - skb->len = 0; - skb_reset_tail_pointer(skb); - skb_reserve(skb, sdata->local->hw.extra_tx_headroom); - - if (compare_ether_addr(ifibss->bssid, bssid)) - sta_info_flush(sdata->local, sdata); - - /* if merging, indicate to driver that we leave the old IBSS */ - if (sdata->vif.bss_conf.ibss_joined) { - sdata->vif.bss_conf.ibss_joined = false; - netif_carrier_off(sdata->dev); - ieee80211_bss_info_change_notify(sdata, BSS_CHANGED_IBSS); - } - - memcpy(ifibss->bssid, bssid, ETH_ALEN); - - sdata->drop_unencrypted = capability & WLAN_CAPABILITY_PRIVACY ? 1 : 0; - - local->oper_channel = chan; - channel_type = ifibss->channel_type; - if (channel_type > NL80211_CHAN_HT20 && - !cfg80211_can_beacon_sec_chan(local->hw.wiphy, chan, channel_type)) - channel_type = NL80211_CHAN_HT20; - if (!ieee80211_set_channel_type(local, sdata, channel_type)) { - /* can only fail due to HT40+/- mismatch */ - channel_type = NL80211_CHAN_HT20; - WARN_ON(!ieee80211_set_channel_type(local, sdata, - NL80211_CHAN_HT20)); - } - ieee80211_hw_config(local, IEEE80211_CONF_CHANGE_CHANNEL); - - sband = local->hw.wiphy->bands[chan->band]; - - /* build supported rates array */ - pos = supp_rates; - for (i = 0; i < sband->n_bitrates; i++) { - int rate = sband->bitrates[i].bitrate; - u8 basic = 0; - if (basic_rates & BIT(i)) - basic = 0x80; - *pos++ = basic | (u8) (rate / 5); - } - - /* Build IBSS probe response */ - mgmt = (void *) skb_put(skb, 24 + sizeof(mgmt->u.beacon)); - memset(mgmt, 0, 24 + sizeof(mgmt->u.beacon)); - mgmt->frame_control = cpu_to_le16(IEEE80211_FTYPE_MGMT | - IEEE80211_STYPE_PROBE_RESP); - memset(mgmt->da, 0xff, ETH_ALEN); - memcpy(mgmt->sa, sdata->vif.addr, ETH_ALEN); - memcpy(mgmt->bssid, ifibss->bssid, ETH_ALEN); - mgmt->u.beacon.beacon_int = cpu_to_le16(beacon_int); - mgmt->u.beacon.timestamp = cpu_to_le64(tsf); - mgmt->u.beacon.capab_info = cpu_to_le16(capability); - - pos = skb_put(skb, 2 + ifibss->ssid_len); - *pos++ = WLAN_EID_SSID; - *pos++ = ifibss->ssid_len; - memcpy(pos, ifibss->ssid, ifibss->ssid_len); - - rates = sband->n_bitrates; - if (rates > 8) - rates = 8; - pos = skb_put(skb, 2 + rates); - *pos++ = WLAN_EID_SUPP_RATES; - *pos++ = rates; - memcpy(pos, supp_rates, rates); - - if (sband->band == IEEE80211_BAND_2GHZ) { - pos = skb_put(skb, 2 + 1); - *pos++ = WLAN_EID_DS_PARAMS; - *pos++ = 1; - *pos++ = ieee80211_frequency_to_channel(chan->center_freq); - } - - pos = skb_put(skb, 2 + 2); - *pos++ = WLAN_EID_IBSS_PARAMS; - *pos++ = 2; - /* FIX: set ATIM window based on scan results */ - *pos++ = 0; - *pos++ = 0; - - if (sband->n_bitrates > 8) { - rates = sband->n_bitrates - 8; - pos = skb_put(skb, 2 + rates); - *pos++ = WLAN_EID_EXT_SUPP_RATES; - *pos++ = rates; - memcpy(pos, &supp_rates[8], rates); - } - - if (ifibss->ie_len) - memcpy(skb_put(skb, ifibss->ie_len), - ifibss->ie, ifibss->ie_len); - - /* add HT capability and information IEs */ - if (channel_type && sband->ht_cap.ht_supported) { - pos = skb_put(skb, 4 + - sizeof(struct ieee80211_ht_cap) + - sizeof(struct ieee80211_ht_info)); - pos = ieee80211_ie_build_ht_cap(pos, &sband->ht_cap, - sband->ht_cap.cap); - pos = ieee80211_ie_build_ht_info(pos, - &sband->ht_cap, - chan, - channel_type); - } - - if (local->hw.queues >= 4) { - pos = skb_put(skb, 9); - *pos++ = WLAN_EID_VENDOR_SPECIFIC; - *pos++ = 7; /* len */ - *pos++ = 0x00; /* Microsoft OUI 00:50:F2 */ - *pos++ = 0x50; - *pos++ = 0xf2; - *pos++ = 2; /* WME */ - *pos++ = 0; /* WME info */ - *pos++ = 1; /* WME ver */ - *pos++ = 0; /* U-APSD no in use */ - } - - rcu_assign_pointer(ifibss->presp, skb); - - sdata->vif.bss_conf.beacon_int = beacon_int; - sdata->vif.bss_conf.basic_rates = basic_rates; - bss_change = BSS_CHANGED_BEACON_INT; - bss_change |= ieee80211_reset_erp_info(sdata); - bss_change |= BSS_CHANGED_BSSID; - bss_change |= BSS_CHANGED_BEACON; - bss_change |= BSS_CHANGED_BEACON_ENABLED; - bss_change |= BSS_CHANGED_BASIC_RATES; - bss_change |= BSS_CHANGED_HT; - bss_change |= BSS_CHANGED_IBSS; - sdata->vif.bss_conf.ibss_joined = true; - ieee80211_bss_info_change_notify(sdata, bss_change); - - ieee80211_sta_def_wmm_params(sdata, sband->n_bitrates, supp_rates); - - ifibss->state = IEEE80211_IBSS_MLME_JOINED; - mod_timer(&ifibss->timer, - round_jiffies(jiffies + IEEE80211_IBSS_MERGE_INTERVAL)); - - bss = cfg80211_inform_bss_frame(local->hw.wiphy, local->hw.conf.channel, - mgmt, skb->len, 0, GFP_KERNEL); - cfg80211_put_bss(bss); - netif_carrier_on(sdata->dev); - cfg80211_ibss_joined(sdata->dev, ifibss->bssid, GFP_KERNEL); -} - -static void ieee80211_sta_join_ibss(struct ieee80211_sub_if_data *sdata, - struct ieee80211_bss *bss) -{ - struct cfg80211_bss *cbss = - container_of((void *)bss, struct cfg80211_bss, priv); - struct ieee80211_supported_band *sband; - u32 basic_rates; - int i, j; - u16 beacon_int = cbss->beacon_interval; - - lockdep_assert_held(&sdata->u.ibss.mtx); - - if (beacon_int < 10) - beacon_int = 10; - - sband = sdata->local->hw.wiphy->bands[cbss->channel->band]; - - basic_rates = 0; - - for (i = 0; i < bss->supp_rates_len; i++) { - int rate = (bss->supp_rates[i] & 0x7f) * 5; - bool is_basic = !!(bss->supp_rates[i] & 0x80); - - for (j = 0; j < sband->n_bitrates; j++) { - if (sband->bitrates[j].bitrate == rate) { - if (is_basic) - basic_rates |= BIT(j); - break; - } - } - } - - __ieee80211_sta_join_ibss(sdata, cbss->bssid, - beacon_int, - cbss->channel, - basic_rates, - cbss->capability, - cbss->tsf); -} - -static struct sta_info *ieee80211_ibss_finish_sta(struct sta_info *sta, - bool auth) - __acquires(RCU) -{ - struct ieee80211_sub_if_data *sdata = sta->sdata; - u8 addr[ETH_ALEN]; - - memcpy(addr, sta->sta.addr, ETH_ALEN); - -#ifdef CONFIG_MAC80211_VERBOSE_DEBUG - wiphy_debug(sdata->local->hw.wiphy, - "Adding new IBSS station %pM (dev=%s)\n", - addr, sdata->name); -#endif - - sta_info_pre_move_state(sta, IEEE80211_STA_AUTH); - sta_info_pre_move_state(sta, IEEE80211_STA_ASSOC); - /* authorize the station only if the network is not RSN protected. If - * not wait for the userspace to authorize it */ - if (!sta->sdata->u.ibss.control_port) - sta_info_pre_move_state(sta, IEEE80211_STA_AUTHORIZED); - - rate_control_rate_init(sta); - - /* If it fails, maybe we raced another insertion? */ - if (sta_info_insert_rcu(sta)) - return sta_info_get(sdata, addr); - if (auth) { -#ifdef CONFIG_MAC80211_IBSS_DEBUG - printk(KERN_DEBUG "TX Auth SA=%pM DA=%pM BSSID=%pM" - "(auth_transaction=1)\n", sdata->vif.addr, - sdata->u.ibss.bssid, addr); -#endif - ieee80211_send_auth(sdata, 1, WLAN_AUTH_OPEN, NULL, 0, - addr, sdata->u.ibss.bssid, NULL, 0, 0); - } - return sta; -} - -static struct sta_info * -ieee80211_ibss_add_sta(struct ieee80211_sub_if_data *sdata, - const u8 *bssid, const u8 *addr, - u32 supp_rates, bool auth) - __acquires(RCU) -{ - struct ieee80211_if_ibss *ifibss = &sdata->u.ibss; - struct ieee80211_local *local = sdata->local; - struct sta_info *sta; - int band = local->hw.conf.channel->band; - - /* - * XXX: Consider removing the least recently used entry and - * allow new one to be added. - */ - if (local->num_sta >= IEEE80211_IBSS_MAX_STA_ENTRIES) { - if (net_ratelimit()) - printk(KERN_DEBUG "%s: No room for a new IBSS STA entry %pM\n", - sdata->name, addr); - rcu_read_lock(); - return NULL; - } - - if (ifibss->state == IEEE80211_IBSS_MLME_SEARCH) { - rcu_read_lock(); - return NULL; - } - - if (compare_ether_addr(bssid, sdata->u.ibss.bssid)) { - rcu_read_lock(); - return NULL; - } - - sta = sta_info_alloc(sdata, addr, GFP_KERNEL); - if (!sta) { - rcu_read_lock(); - return NULL; - } - - sta->last_rx = jiffies; - - /* make sure mandatory rates are always added */ - sta->sta.supp_rates[band] = supp_rates | - ieee80211_mandatory_rates(local, band); - - return ieee80211_ibss_finish_sta(sta, auth); -} - -static void ieee80211_rx_mgmt_auth_ibss(struct ieee80211_sub_if_data *sdata, - struct ieee80211_mgmt *mgmt, - size_t len) -{ - u16 auth_alg, auth_transaction; - - lockdep_assert_held(&sdata->u.ibss.mtx); - - if (len < 24 + 6) - return; - - auth_alg = le16_to_cpu(mgmt->u.auth.auth_alg); - auth_transaction = le16_to_cpu(mgmt->u.auth.auth_transaction); - - if (auth_alg != WLAN_AUTH_OPEN || auth_transaction != 1) - return; -#ifdef CONFIG_MAC80211_IBSS_DEBUG - printk(KERN_DEBUG "%s: RX Auth SA=%pM DA=%pM BSSID=%pM." - "(auth_transaction=%d)\n", - sdata->name, mgmt->sa, mgmt->da, mgmt->bssid, auth_transaction); -#endif - sta_info_destroy_addr(sdata, mgmt->sa); - ieee80211_ibss_add_sta(sdata, mgmt->bssid, mgmt->sa, 0, false); - rcu_read_unlock(); - - /* - * IEEE 802.11 standard does not require authentication in IBSS - * networks and most implementations do not seem to use it. - * However, try to reply to authentication attempts if someone - * has actually implemented this. - */ - ieee80211_send_auth(sdata, 2, WLAN_AUTH_OPEN, NULL, 0, - mgmt->sa, sdata->u.ibss.bssid, NULL, 0, 0); -} - -static void ieee80211_rx_bss_info(struct ieee80211_sub_if_data *sdata, - struct ieee80211_mgmt *mgmt, - size_t len, - struct ieee80211_rx_status *rx_status, - struct ieee802_11_elems *elems, - bool beacon) -{ - struct ieee80211_local *local = sdata->local; - int freq; - struct cfg80211_bss *cbss; - struct ieee80211_bss *bss; - struct sta_info *sta; - struct ieee80211_channel *channel; - u64 beacon_timestamp, rx_timestamp; - u32 supp_rates = 0; - enum ieee80211_band band = rx_status->band; - struct ieee80211_supported_band *sband = local->hw.wiphy->bands[band]; - bool rates_updated = false; - - if (elems->ds_params && elems->ds_params_len == 1) - freq = ieee80211_channel_to_frequency(elems->ds_params[0], - band); - else - freq = rx_status->freq; - - channel = ieee80211_get_channel(local->hw.wiphy, freq); - - if (!channel || channel->flags & IEEE80211_CHAN_DISABLED) - return; - - if (sdata->vif.type == NL80211_IFTYPE_ADHOC && - compare_ether_addr(mgmt->bssid, sdata->u.ibss.bssid) == 0) { - - rcu_read_lock(); - sta = sta_info_get(sdata, mgmt->sa); - - if (elems->supp_rates) { - supp_rates = ieee80211_sta_get_rates(local, elems, - band); - if (sta) { - u32 prev_rates; - - prev_rates = sta->sta.supp_rates[band]; - /* make sure mandatory rates are always added */ - sta->sta.supp_rates[band] = supp_rates | - ieee80211_mandatory_rates(local, band); - - if (sta->sta.supp_rates[band] != prev_rates) { -#ifdef CONFIG_MAC80211_IBSS_DEBUG - printk(KERN_DEBUG - "%s: updated supp_rates set " - "for %pM based on beacon" - "/probe_resp (0x%x -> 0x%x)\n", - sdata->name, sta->sta.addr, - prev_rates, - sta->sta.supp_rates[band]); -#endif - rates_updated = true; - } - } else { - rcu_read_unlock(); - sta = ieee80211_ibss_add_sta(sdata, mgmt->bssid, - mgmt->sa, supp_rates, true); - } - } - - if (sta && elems->wmm_info) - set_sta_flag(sta, WLAN_STA_WME); - - if (sta && elems->ht_info_elem && elems->ht_cap_elem && - sdata->u.ibss.channel_type != NL80211_CHAN_NO_HT) { - /* we both use HT */ - struct ieee80211_sta_ht_cap sta_ht_cap_new; - enum nl80211_channel_type channel_type = - ieee80211_ht_info_to_channel_type( - elems->ht_info_elem); - - ieee80211_ht_cap_ie_to_sta_ht_cap(sdata, sband, - elems->ht_cap_elem, - &sta_ht_cap_new); - - /* - * fall back to HT20 if we don't use or use - * the other extension channel - */ - if ((channel_type == NL80211_CHAN_HT40MINUS || - channel_type == NL80211_CHAN_HT40PLUS) && - channel_type != sdata->u.ibss.channel_type) - sta_ht_cap_new.cap &= - ~IEEE80211_HT_CAP_SUP_WIDTH_20_40; - - if (memcmp(&sta->sta.ht_cap, &sta_ht_cap_new, - sizeof(sta_ht_cap_new))) { - memcpy(&sta->sta.ht_cap, &sta_ht_cap_new, - sizeof(sta_ht_cap_new)); - rates_updated = true; - } - } - - if (sta && rates_updated) - rate_control_rate_init(sta); - - rcu_read_unlock(); - } - - bss = ieee80211_bss_info_update(local, rx_status, mgmt, len, elems, - channel, beacon); - if (!bss) - return; - - cbss = container_of((void *)bss, struct cfg80211_bss, priv); - - /* was just updated in ieee80211_bss_info_update */ - beacon_timestamp = cbss->tsf; - - /* check if we need to merge IBSS */ - - /* we use a fixed BSSID */ - if (sdata->u.ibss.fixed_bssid) - goto put_bss; - - /* not an IBSS */ - if (!(cbss->capability & WLAN_CAPABILITY_IBSS)) - goto put_bss; - - /* different channel */ - if (cbss->channel != local->oper_channel) - goto put_bss; - - /* different SSID */ - if (elems->ssid_len != sdata->u.ibss.ssid_len || - memcmp(elems->ssid, sdata->u.ibss.ssid, - sdata->u.ibss.ssid_len)) - goto put_bss; - - /* same BSSID */ - if (compare_ether_addr(cbss->bssid, sdata->u.ibss.bssid) == 0) - goto put_bss; - - if (rx_status->flag & RX_FLAG_MACTIME_MPDU) { - /* - * For correct IBSS merging we need mactime; since mactime is - * defined as the time the first data symbol of the frame hits - * the PHY, and the timestamp of the beacon is defined as "the - * time that the data symbol containing the first bit of the - * timestamp is transmitted to the PHY plus the transmitting - * STA's delays through its local PHY from the MAC-PHY - * interface to its interface with the WM" (802.11 11.1.2) - * - equals the time this bit arrives at the receiver - we have - * to take into account the offset between the two. - * - * E.g. at 1 MBit that means mactime is 192 usec earlier - * (=24 bytes * 8 usecs/byte) than the beacon timestamp. - */ - int rate; - - if (rx_status->flag & RX_FLAG_HT) - rate = 65; /* TODO: HT rates */ - else - rate = local->hw.wiphy->bands[band]-> - bitrates[rx_status->rate_idx].bitrate; - - rx_timestamp = rx_status->mactime + (24 * 8 * 10 / rate); - } else { - /* - * second best option: get current TSF - * (will return -1 if not supported) - */ - rx_timestamp = drv_get_tsf(local, sdata); - } - -#ifdef CONFIG_MAC80211_IBSS_DEBUG - printk(KERN_DEBUG "RX beacon SA=%pM BSSID=" - "%pM TSF=0x%llx BCN=0x%llx diff=%lld @%lu\n", - mgmt->sa, mgmt->bssid, - (unsigned long long)rx_timestamp, - (unsigned long long)beacon_timestamp, - (unsigned long long)(rx_timestamp - beacon_timestamp), - jiffies); -#endif - - if (beacon_timestamp > rx_timestamp) { -#ifdef CONFIG_MAC80211_IBSS_DEBUG - printk(KERN_DEBUG "%s: beacon TSF higher than " - "local TSF - IBSS merge with BSSID %pM\n", - sdata->name, mgmt->bssid); -#endif - ieee80211_sta_join_ibss(sdata, bss); - supp_rates = ieee80211_sta_get_rates(local, elems, band); - ieee80211_ibss_add_sta(sdata, mgmt->bssid, mgmt->sa, - supp_rates, true); - rcu_read_unlock(); - } - - put_bss: - ieee80211_rx_bss_put(local, bss); -} - -/* - * [PLATA] - This method creates a IBSS station, in the case the STA did not exist upon reception of a packet - * - Yet, this is only used in the context of BSS (iBSS), as when communicating in OCB mode, we do not maintain local sta info - * - hint - the remote sta are also not created and stored when BSS or iBSS using a wildcard BSSID... - */ -void ieee80211_ibss_rx_no_sta(struct ieee80211_sub_if_data *sdata, - const u8 *bssid, const u8 *addr, - u32 supp_rates) -{ - struct ieee80211_if_ibss *ifibss = &sdata->u.ibss; - struct ieee80211_local *local = sdata->local; - struct sta_info *sta; - int band = local->hw.conf.channel->band; - - /* - * XXX: Consider removing the least recently used entry and - * allow new one to be added. - */ - if (local->num_sta >= IEEE80211_IBSS_MAX_STA_ENTRIES) { - if (net_ratelimit()) - printk(KERN_DEBUG "%s: No room for a new IBSS STA entry %pM\n", - sdata->name, addr); - return; - } - - if (ifibss->state == IEEE80211_IBSS_MLME_SEARCH) - return; - - if (compare_ether_addr(bssid, sdata->u.ibss.bssid)) // [PLATA] if we guarantee a wildcard BSSID in packets and in the STA, we should exit here... - else, it means the IBSS sta does not exist - return; - - sta = sta_info_alloc(sdata, addr, GFP_ATOMIC); - if (!sta) - return; - - sta->last_rx = jiffies; - - /* make sure mandatory rates are always added */ - sta->sta.supp_rates[band] = supp_rates | - ieee80211_mandatory_rates(local, band); - - spin_lock(&ifibss->incomplete_lock); - list_add(&sta->list, &ifibss->incomplete_stations); - spin_unlock(&ifibss->incomplete_lock); - ieee80211_queue_work(&local->hw, &sdata->work); -} - -static int ieee80211_sta_active_ibss(struct ieee80211_sub_if_data *sdata) -{ - struct ieee80211_local *local = sdata->local; - int active = 0; - struct sta_info *sta; - - lockdep_assert_held(&sdata->u.ibss.mtx); - - rcu_read_lock(); - - list_for_each_entry_rcu(sta, &local->sta_list, list) { - if (sta->sdata == sdata && - time_after(sta->last_rx + IEEE80211_IBSS_MERGE_INTERVAL, - jiffies)) { - active++; - break; - } - } - - rcu_read_unlock(); - - return active; -} - -/* - * This function is called with state == IEEE80211_IBSS_MLME_JOINED - */ - -static void ieee80211_sta_merge_ibss(struct ieee80211_sub_if_data *sdata) -{ - struct ieee80211_if_ibss *ifibss = &sdata->u.ibss; - - lockdep_assert_held(&ifibss->mtx); - - mod_timer(&ifibss->timer, - round_jiffies(jiffies + IEEE80211_IBSS_MERGE_INTERVAL)); - - ieee80211_sta_expire(sdata, IEEE80211_IBSS_INACTIVITY_LIMIT); - - if (time_before(jiffies, ifibss->last_scan_completed + - IEEE80211_IBSS_MERGE_INTERVAL)) - return; - - if (ieee80211_sta_active_ibss(sdata)) - return; - - if (ifibss->fixed_channel) - return; - - printk(KERN_DEBUG "%s: No active IBSS STAs - trying to scan for other " - "IBSS networks with same SSID (merge)\n", sdata->name); - - ieee80211_request_internal_scan(sdata, - ifibss->ssid, ifibss->ssid_len, NULL); -} - -static void ieee80211_sta_create_ibss(struct ieee80211_sub_if_data *sdata) -{ - struct ieee80211_if_ibss *ifibss = &sdata->u.ibss; - u8 bssid[ETH_ALEN]; - u16 capability; - int i; - - lockdep_assert_held(&ifibss->mtx); - - if (ifibss->fixed_bssid) { - memcpy(bssid, ifibss->bssid, ETH_ALEN); - } else { - /* Generate random, not broadcast, locally administered BSSID. Mix in - * own MAC address to make sure that devices that do not have proper - * random number generator get different BSSID. */ - get_random_bytes(bssid, ETH_ALEN); - for (i = 0; i < ETH_ALEN; i++) - bssid[i] ^= sdata->vif.addr[i]; - bssid[0] &= ~0x01; - bssid[0] |= 0x02; - } - - printk(KERN_DEBUG "%s: Creating new IBSS network, BSSID %pM\n", - sdata->name, bssid); - - capability = WLAN_CAPABILITY_IBSS; - - if (ifibss->privacy) - capability |= WLAN_CAPABILITY_PRIVACY; - else - sdata->drop_unencrypted = 0; - - __ieee80211_sta_join_ibss(sdata, bssid, sdata->vif.bss_conf.beacon_int, - ifibss->channel, ifibss->basic_rates, - capability, 0); -} - -/* - * This function is called with state == IEEE80211_IBSS_MLME_SEARCH - */ - -static void ieee80211_sta_find_ibss(struct ieee80211_sub_if_data *sdata) -{ - struct ieee80211_if_ibss *ifibss = &sdata->u.ibss; - struct ieee80211_local *local = sdata->local; - struct cfg80211_bss *cbss; - struct ieee80211_channel *chan = NULL; - const u8 *bssid = NULL; - int active_ibss; - u16 capability; - - lockdep_assert_held(&ifibss->mtx); - - active_ibss = ieee80211_sta_active_ibss(sdata); -#ifdef CONFIG_MAC80211_IBSS_DEBUG - printk(KERN_DEBUG "%s: sta_find_ibss (active_ibss=%d)\n", - sdata->name, active_ibss); -#endif /* CONFIG_MAC80211_IBSS_DEBUG */ - - if (active_ibss) - return; - - capability = WLAN_CAPABILITY_IBSS; - if (ifibss->privacy) - capability |= WLAN_CAPABILITY_PRIVACY; - if (ifibss->fixed_bssid) - bssid = ifibss->bssid; - if (ifibss->fixed_channel) - chan = ifibss->channel; - if (!is_zero_ether_addr(ifibss->bssid)) - bssid = ifibss->bssid; - cbss = cfg80211_get_bss(local->hw.wiphy, chan, bssid, - ifibss->ssid, ifibss->ssid_len, - WLAN_CAPABILITY_IBSS | WLAN_CAPABILITY_PRIVACY, - capability); - - if (cbss) { - struct ieee80211_bss *bss; - - bss = (void *)cbss->priv; -#ifdef CONFIG_MAC80211_IBSS_DEBUG - printk(KERN_DEBUG " sta_find_ibss: selected %pM current " - "%pM\n", cbss->bssid, ifibss->bssid); -#endif /* CONFIG_MAC80211_IBSS_DEBUG */ - - printk(KERN_DEBUG "%s: Selected IBSS BSSID %pM" - " based on configured SSID\n", - sdata->name, cbss->bssid); - - ieee80211_sta_join_ibss(sdata, bss); - ieee80211_rx_bss_put(local, bss); - return; - } - -#ifdef CONFIG_MAC80211_IBSS_DEBUG - printk(KERN_DEBUG " did not try to join ibss\n"); -#endif /* CONFIG_MAC80211_IBSS_DEBUG */ - - /* Selected IBSS not found in current scan results - try to scan */ - if (time_after(jiffies, ifibss->last_scan_completed + - IEEE80211_SCAN_INTERVAL)) { - printk(KERN_DEBUG "%s: Trigger new scan to find an IBSS to " - "join\n", sdata->name); - - ieee80211_request_internal_scan(sdata, - ifibss->ssid, ifibss->ssid_len, - ifibss->fixed_channel ? ifibss->channel : NULL); - } else { - int interval = IEEE80211_SCAN_INTERVAL; - - if (time_after(jiffies, ifibss->ibss_join_req + - IEEE80211_IBSS_JOIN_TIMEOUT)) { - if (!(local->oper_channel->flags & IEEE80211_CHAN_NO_IBSS)) { - ieee80211_sta_create_ibss(sdata); - return; - } - printk(KERN_DEBUG "%s: IBSS not allowed on" - " %d MHz\n", sdata->name, - local->hw.conf.channel->center_freq); - - /* No IBSS found - decrease scan interval and continue - * scanning. */ - interval = IEEE80211_SCAN_INTERVAL_SLOW; - } - - mod_timer(&ifibss->timer, - round_jiffies(jiffies + interval)); - } -} - -static void ieee80211_rx_mgmt_probe_req(struct ieee80211_sub_if_data *sdata, - struct sk_buff *req) -{ - struct ieee80211_mgmt *mgmt = (void *)req->data; - struct ieee80211_if_ibss *ifibss = &sdata->u.ibss; - struct ieee80211_local *local = sdata->local; - int tx_last_beacon, len = req->len; - struct sk_buff *skb; - struct ieee80211_mgmt *resp; - struct sk_buff *presp; - u8 *pos, *end; - - lockdep_assert_held(&ifibss->mtx); - - presp = rcu_dereference_protected(ifibss->presp, - lockdep_is_held(&ifibss->mtx)); - - if (ifibss->state != IEEE80211_IBSS_MLME_JOINED || - len < 24 + 2 || !presp) - return; - - tx_last_beacon = drv_tx_last_beacon(local); - -#ifdef CONFIG_MAC80211_IBSS_DEBUG - printk(KERN_DEBUG "%s: RX ProbeReq SA=%pM DA=%pM BSSID=%pM" - " (tx_last_beacon=%d)\n", - sdata->name, mgmt->sa, mgmt->da, - mgmt->bssid, tx_last_beacon); -#endif /* CONFIG_MAC80211_IBSS_DEBUG */ - - if (!tx_last_beacon && is_multicast_ether_addr(mgmt->da)) - return; - - if (compare_ether_addr(mgmt->bssid, ifibss->bssid) != 0 && - !is_broadcast_ether_addr(mgmt->bssid)) - return; - - end = ((u8 *) mgmt) + len; - pos = mgmt->u.probe_req.variable; - if (pos[0] != WLAN_EID_SSID || - pos + 2 + pos[1] > end) { -#ifdef CONFIG_MAC80211_IBSS_DEBUG - printk(KERN_DEBUG "%s: Invalid SSID IE in ProbeReq " - "from %pM\n", - sdata->name, mgmt->sa); -#endif - return; - } - if (pos[1] != 0 && - (pos[1] != ifibss->ssid_len || - memcmp(pos + 2, ifibss->ssid, ifibss->ssid_len))) { - /* Ignore ProbeReq for foreign SSID */ - return; - } - - /* Reply with ProbeResp */ - skb = skb_copy(presp, GFP_KERNEL); - if (!skb) - return; - - resp = (struct ieee80211_mgmt *) skb->data; - memcpy(resp->da, mgmt->sa, ETH_ALEN); -#ifdef CONFIG_MAC80211_IBSS_DEBUG - printk(KERN_DEBUG "%s: Sending ProbeResp to %pM\n", - sdata->name, resp->da); -#endif /* CONFIG_MAC80211_IBSS_DEBUG */ - IEEE80211_SKB_CB(skb)->flags |= IEEE80211_TX_INTFL_DONT_ENCRYPT; - ieee80211_tx_skb(sdata, skb); -} - -static void ieee80211_rx_mgmt_probe_resp(struct ieee80211_sub_if_data *sdata, - struct ieee80211_mgmt *mgmt, - size_t len, - struct ieee80211_rx_status *rx_status) -{ - size_t baselen; - struct ieee802_11_elems elems; - - baselen = (u8 *) mgmt->u.probe_resp.variable - (u8 *) mgmt; - if (baselen > len) - return; - - ieee802_11_parse_elems(mgmt->u.probe_resp.variable, len - baselen, - &elems); - - ieee80211_rx_bss_info(sdata, mgmt, len, rx_status, &elems, false); -} - -static void ieee80211_rx_mgmt_beacon(struct ieee80211_sub_if_data *sdata, - struct ieee80211_mgmt *mgmt, - size_t len, - struct ieee80211_rx_status *rx_status) -{ - size_t baselen; - struct ieee802_11_elems elems; - - /* Process beacon from the current BSS */ - baselen = (u8 *) mgmt->u.beacon.variable - (u8 *) mgmt; - if (baselen > len) - return; - - ieee802_11_parse_elems(mgmt->u.beacon.variable, len - baselen, &elems); - - ieee80211_rx_bss_info(sdata, mgmt, len, rx_status, &elems, true); -} - -void ieee80211_ibss_rx_queued_mgmt(struct ieee80211_sub_if_data *sdata, - struct sk_buff *skb) -{ - struct ieee80211_rx_status *rx_status; - struct ieee80211_mgmt *mgmt; - u16 fc; - - rx_status = IEEE80211_SKB_RXCB(skb); - mgmt = (struct ieee80211_mgmt *) skb->data; - fc = le16_to_cpu(mgmt->frame_control); - - mutex_lock(&sdata->u.ibss.mtx); - - if (!sdata->u.ibss.ssid_len) - goto mgmt_out; /* not ready to merge yet */ - - switch (fc & IEEE80211_FCTL_STYPE) { - case IEEE80211_STYPE_PROBE_REQ: - ieee80211_rx_mgmt_probe_req(sdata, skb); - break; - case IEEE80211_STYPE_PROBE_RESP: - ieee80211_rx_mgmt_probe_resp(sdata, mgmt, skb->len, - rx_status); - break; - case IEEE80211_STYPE_BEACON: - ieee80211_rx_mgmt_beacon(sdata, mgmt, skb->len, - rx_status); - break; - case IEEE80211_STYPE_AUTH: - ieee80211_rx_mgmt_auth_ibss(sdata, mgmt, skb->len); - break; - } - - mgmt_out: - mutex_unlock(&sdata->u.ibss.mtx); -} - -void ieee80211_ibss_work(struct ieee80211_sub_if_data *sdata) -{ - struct ieee80211_if_ibss *ifibss = &sdata->u.ibss; - struct sta_info *sta; - - mutex_lock(&ifibss->mtx); - - /* - * Work could be scheduled after scan or similar - * when we aren't even joined (or trying) with a - * network. - */ - if (!ifibss->ssid_len) - goto out; - - spin_lock_bh(&ifibss->incomplete_lock); - while (!list_empty(&ifibss->incomplete_stations)) { - sta = list_first_entry(&ifibss->incomplete_stations, - struct sta_info, list); - list_del(&sta->list); - spin_unlock_bh(&ifibss->incomplete_lock); - - ieee80211_ibss_finish_sta(sta, true); - rcu_read_unlock(); - spin_lock_bh(&ifibss->incomplete_lock); - } - spin_unlock_bh(&ifibss->incomplete_lock); - - switch (ifibss->state) { - case IEEE80211_IBSS_MLME_SEARCH: - ieee80211_sta_find_ibss(sdata); - break; - case IEEE80211_IBSS_MLME_JOINED: - ieee80211_sta_merge_ibss(sdata); - break; - default: - WARN_ON(1); - break; - } - - out: - mutex_unlock(&ifibss->mtx); -} - -static void ieee80211_ibss_timer(unsigned long data) -{ - struct ieee80211_sub_if_data *sdata = - (struct ieee80211_sub_if_data *) data; - struct ieee80211_if_ibss *ifibss = &sdata->u.ibss; - struct ieee80211_local *local = sdata->local; - - if (local->quiescing) { - ifibss->timer_running = true; - return; - } - - ieee80211_queue_work(&local->hw, &sdata->work); -} - -#ifdef CONFIG_PM -void ieee80211_ibss_quiesce(struct ieee80211_sub_if_data *sdata) -{ - struct ieee80211_if_ibss *ifibss = &sdata->u.ibss; - - if (del_timer_sync(&ifibss->timer)) - ifibss->timer_running = true; -} - -void ieee80211_ibss_restart(struct ieee80211_sub_if_data *sdata) -{ - struct ieee80211_if_ibss *ifibss = &sdata->u.ibss; - - if (ifibss->timer_running) { - add_timer(&ifibss->timer); - ifibss->timer_running = false; - } -} -#endif - -void ieee80211_ibss_setup_sdata(struct ieee80211_sub_if_data *sdata) -{ - struct ieee80211_if_ibss *ifibss = &sdata->u.ibss; - - setup_timer(&ifibss->timer, ieee80211_ibss_timer, - (unsigned long) sdata); - mutex_init(&ifibss->mtx); - INIT_LIST_HEAD(&ifibss->incomplete_stations); - spin_lock_init(&ifibss->incomplete_lock); -} - -/* scan finished notification */ -void ieee80211_ibss_notify_scan_completed(struct ieee80211_local *local) -{ - struct ieee80211_sub_if_data *sdata; - - mutex_lock(&local->iflist_mtx); - list_for_each_entry(sdata, &local->interfaces, list) { - if (!ieee80211_sdata_running(sdata)) - continue; - if (sdata->vif.type != NL80211_IFTYPE_ADHOC) - continue; - sdata->u.ibss.last_scan_completed = jiffies; - ieee80211_queue_work(&local->hw, &sdata->work); - } - mutex_unlock(&local->iflist_mtx); -} - -int ieee80211_ibss_join(struct ieee80211_sub_if_data *sdata, - struct cfg80211_ibss_params *params) -{ - struct sk_buff *skb; - u32 changed = 0; - - skb = dev_alloc_skb(sdata->local->hw.extra_tx_headroom + - sizeof(struct ieee80211_hdr_3addr) + - 12 /* struct ieee80211_mgmt.u.beacon */ + - 2 + IEEE80211_MAX_SSID_LEN /* max SSID */ + - 2 + 8 /* max Supported Rates */ + - 3 /* max DS params */ + - 4 /* IBSS params */ + - 2 + (IEEE80211_MAX_SUPP_RATES - 8) + - 2 + sizeof(struct ieee80211_ht_cap) + - 2 + sizeof(struct ieee80211_ht_info) + - params->ie_len); - if (!skb) - return -ENOMEM; - - mutex_lock(&sdata->u.ibss.mtx); - - if (params->bssid) { - memcpy(sdata->u.ibss.bssid, params->bssid, ETH_ALEN); - sdata->u.ibss.fixed_bssid = true; - } else - sdata->u.ibss.fixed_bssid = false; - - sdata->u.ibss.privacy = params->privacy; - sdata->u.ibss.control_port = params->control_port; - sdata->u.ibss.basic_rates = params->basic_rates; - memcpy(sdata->vif.bss_conf.mcast_rate, params->mcast_rate, - sizeof(params->mcast_rate)); - - sdata->vif.bss_conf.beacon_int = params->beacon_interval; - - sdata->u.ibss.channel = params->channel; - sdata->u.ibss.channel_type = params->channel_type; - sdata->u.ibss.fixed_channel = params->channel_fixed; - - /* fix ourselves to that channel now already */ - if (params->channel_fixed) { - sdata->local->oper_channel = params->channel; - if (!ieee80211_set_channel_type(sdata->local, sdata, - params->channel_type)) { - mutex_unlock(&sdata->u.ibss.mtx); - kfree_skb(skb); - return -EINVAL; - } - } - - if (params->ie) { - sdata->u.ibss.ie = kmemdup(params->ie, params->ie_len, - GFP_KERNEL); - if (sdata->u.ibss.ie) - sdata->u.ibss.ie_len = params->ie_len; - } - - sdata->u.ibss.skb = skb; - sdata->u.ibss.state = IEEE80211_IBSS_MLME_SEARCH; - sdata->u.ibss.ibss_join_req = jiffies; - - memcpy(sdata->u.ibss.ssid, params->ssid, IEEE80211_MAX_SSID_LEN); - sdata->u.ibss.ssid_len = params->ssid_len; - - mutex_unlock(&sdata->u.ibss.mtx); - - mutex_lock(&sdata->local->mtx); - ieee80211_recalc_idle(sdata->local); - mutex_unlock(&sdata->local->mtx); - - /* - * 802.11n-2009 9.13.3.1: In an IBSS, the HT Protection field is - * reserved, but an HT STA shall protect HT transmissions as though - * the HT Protection field were set to non-HT mixed mode. - * - * In an IBSS, the RIFS Mode field of the HT Operation element is - * also reserved, but an HT STA shall operate as though this field - * were set to 1. - */ - - sdata->vif.bss_conf.ht_operation_mode |= - IEEE80211_HT_OP_MODE_PROTECTION_NONHT_MIXED - | IEEE80211_HT_PARAM_RIFS_MODE; - - changed |= BSS_CHANGED_HT; - ieee80211_bss_info_change_notify(sdata, changed); - - ieee80211_queue_work(&sdata->local->hw, &sdata->work); - - return 0; -} - -int ieee80211_ibss_leave(struct ieee80211_sub_if_data *sdata) -{ - struct sk_buff *skb; - struct ieee80211_if_ibss *ifibss = &sdata->u.ibss; - struct ieee80211_local *local = sdata->local; - struct cfg80211_bss *cbss; - u16 capability; - int active_ibss; - struct sta_info *sta; - - mutex_lock(&sdata->u.ibss.mtx); - - sdata->u.ibss.state = IEEE80211_IBSS_MLME_SEARCH; - memset(sdata->u.ibss.bssid, 0, ETH_ALEN); - sdata->u.ibss.ssid_len = 0; - - active_ibss = ieee80211_sta_active_ibss(sdata); - - if (!active_ibss && !is_zero_ether_addr(ifibss->bssid)) { - capability = WLAN_CAPABILITY_IBSS; - - if (ifibss->privacy) - capability |= WLAN_CAPABILITY_PRIVACY; - - cbss = cfg80211_get_bss(local->hw.wiphy, ifibss->channel, - ifibss->bssid, ifibss->ssid, - ifibss->ssid_len, WLAN_CAPABILITY_IBSS | - WLAN_CAPABILITY_PRIVACY, - capability); - - if (cbss) { - cfg80211_unlink_bss(local->hw.wiphy, cbss); - cfg80211_put_bss(cbss); - } - } - - sta_info_flush(sdata->local, sdata); - - spin_lock_bh(&ifibss->incomplete_lock); - while (!list_empty(&ifibss->incomplete_stations)) { - sta = list_first_entry(&ifibss->incomplete_stations, - struct sta_info, list); - list_del(&sta->list); - spin_unlock_bh(&ifibss->incomplete_lock); - - sta_info_free(local, sta); - spin_lock_bh(&ifibss->incomplete_lock); - } - spin_unlock_bh(&ifibss->incomplete_lock); - - netif_carrier_off(sdata->dev); - - /* remove beacon */ - kfree(sdata->u.ibss.ie); - skb = rcu_dereference_protected(sdata->u.ibss.presp, - lockdep_is_held(&sdata->u.ibss.mtx)); - RCU_INIT_POINTER(sdata->u.ibss.presp, NULL); - sdata->vif.bss_conf.ibss_joined = false; - ieee80211_bss_info_change_notify(sdata, BSS_CHANGED_BEACON_ENABLED | - BSS_CHANGED_IBSS); - synchronize_rcu(); - kfree_skb(skb); - - skb_queue_purge(&sdata->skb_queue); - - del_timer_sync(&sdata->u.ibss.timer); - - mutex_unlock(&sdata->u.ibss.mtx); - - mutex_lock(&local->mtx); - ieee80211_recalc_idle(sdata->local); - mutex_unlock(&local->mtx); - - return 0; -} diff --git a/openairITS/mac/DOT11/net/mac80211/ieee80211_i.h b/openairITS/mac/DOT11/net/mac80211/ieee80211_i.h deleted file mode 100644 index ba9c815411..0000000000 --- a/openairITS/mac/DOT11/net/mac80211/ieee80211_i.h +++ /dev/null @@ -1,1529 +0,0 @@ -/* - * Copyright 2002-2005, Instant802 Networks, Inc. - * Copyright 2005, Devicescape Software, Inc. - * Copyright 2006-2007 Jiri Benc - * Copyright 2007-2010 Johannes Berg - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - */ - -#ifndef IEEE80211_I_H -#define IEEE80211_I_H - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "key.h" -#include "sta_info.h" - -struct ieee80211_local; - -/* Maximum number of broadcast/multicast frames to buffer when some of the - * associated stations are using power saving. */ -#define AP_MAX_BC_BUFFER 128 - -/* Maximum number of frames buffered to all STAs, including multicast frames. - * Note: increasing this limit increases the potential memory requirement. Each - * frame can be up to about 2 kB long. */ -#define TOTAL_MAX_TX_BUFFER 512 - -/* Required encryption head and tailroom */ -#define IEEE80211_ENCRYPT_HEADROOM 8 -#define IEEE80211_ENCRYPT_TAILROOM 18 - -/* IEEE 802.11 (Ch. 9.5 Defragmentation) requires support for concurrent - * reception of at least three fragmented frames. This limit can be increased - * by changing this define, at the cost of slower frame reassembly and - * increased memory use (about 2 kB of RAM per entry). */ -#define IEEE80211_FRAGMENT_MAX 4 - -#define TU_TO_EXP_TIME(x) (jiffies + usecs_to_jiffies((x) * 1024)) - -#define IEEE80211_DEFAULT_UAPSD_QUEUES \ - (IEEE80211_WMM_IE_STA_QOSINFO_AC_BK | \ - IEEE80211_WMM_IE_STA_QOSINFO_AC_BE | \ - IEEE80211_WMM_IE_STA_QOSINFO_AC_VI | \ - IEEE80211_WMM_IE_STA_QOSINFO_AC_VO) - -#define IEEE80211_DEFAULT_MAX_SP_LEN \ - IEEE80211_WMM_IE_STA_QOSINFO_SP_ALL - -struct ieee80211_fragment_entry { - unsigned long first_frag_time; - unsigned int seq; - unsigned int rx_queue; - unsigned int last_frag; - unsigned int extra_len; - struct sk_buff_head skb_list; - int ccmp; /* Whether fragments were encrypted with CCMP */ - u8 last_pn[6]; /* PN of the last fragment if CCMP was used */ -}; - - -struct ieee80211_bss { - /* don't want to look up all the time */ - size_t ssid_len; - u8 ssid[IEEE80211_MAX_SSID_LEN]; - - u8 dtim_period; - - bool wmm_used; - bool uapsd_supported; - - unsigned long last_probe_resp; - -#ifdef CONFIG_MAC80211_MESH - u8 *mesh_id; - size_t mesh_id_len; - u8 *mesh_cfg; -#endif - -#define IEEE80211_MAX_SUPP_RATES 32 - u8 supp_rates[IEEE80211_MAX_SUPP_RATES]; - size_t supp_rates_len; - - /* - * During association, we save an ERP value from a probe response so - * that we can feed ERP info to the driver when handling the - * association completes. these fields probably won't be up-to-date - * otherwise, you probably don't want to use them. - */ - bool has_erp_value; - u8 erp_value; - - /* Keep track of the corruption of the last beacon/probe response. */ - u8 corrupt_data; - - /* Keep track of what bits of information we have valid info for. */ - u8 valid_data; -}; - -/** - * enum ieee80211_corrupt_data_flags - BSS data corruption flags - * @IEEE80211_BSS_CORRUPT_BEACON: last beacon frame received was corrupted - * @IEEE80211_BSS_CORRUPT_PROBE_RESP: last probe response received was corrupted - * - * These are bss flags that are attached to a bss in the - * @corrupt_data field of &struct ieee80211_bss. - */ -enum ieee80211_bss_corrupt_data_flags { - IEEE80211_BSS_CORRUPT_BEACON = BIT(0), - IEEE80211_BSS_CORRUPT_PROBE_RESP = BIT(1) -}; - -/** - * enum ieee80211_valid_data_flags - BSS valid data flags - * @IEEE80211_BSS_VALID_DTIM: DTIM data was gathered from non-corrupt IE - * @IEEE80211_BSS_VALID_WMM: WMM/UAPSD data was gathered from non-corrupt IE - * @IEEE80211_BSS_VALID_RATES: Supported rates were gathered from non-corrupt IE - * @IEEE80211_BSS_VALID_ERP: ERP flag was gathered from non-corrupt IE - * - * These are bss flags that are attached to a bss in the - * @valid_data field of &struct ieee80211_bss. They show which parts - * of the data structure were recieved as a result of an un-corrupted - * beacon/probe response. - */ -enum ieee80211_bss_valid_data_flags { - IEEE80211_BSS_VALID_DTIM = BIT(0), - IEEE80211_BSS_VALID_WMM = BIT(1), - IEEE80211_BSS_VALID_RATES = BIT(2), - IEEE80211_BSS_VALID_ERP = BIT(3) -}; - -static inline u8 *bss_mesh_cfg(struct ieee80211_bss *bss) -{ -#ifdef CONFIG_MAC80211_MESH - return bss->mesh_cfg; -#endif - return NULL; -} - -static inline u8 *bss_mesh_id(struct ieee80211_bss *bss) -{ -#ifdef CONFIG_MAC80211_MESH - return bss->mesh_id; -#endif - return NULL; -} - -static inline u8 bss_mesh_id_len(struct ieee80211_bss *bss) -{ -#ifdef CONFIG_MAC80211_MESH - return bss->mesh_id_len; -#endif - return 0; -} - - -typedef unsigned __bitwise__ ieee80211_tx_result; -#define TX_CONTINUE ((__force ieee80211_tx_result) 0u) -#define TX_DROP ((__force ieee80211_tx_result) 1u) -#define TX_QUEUED ((__force ieee80211_tx_result) 2u) - -#define IEEE80211_TX_UNICAST BIT(1) -#define IEEE80211_TX_PS_BUFFERED BIT(2) - -struct ieee80211_tx_data { - struct sk_buff *skb; - struct sk_buff_head skbs; - struct ieee80211_local *local; - struct ieee80211_sub_if_data *sdata; - struct sta_info *sta; - struct ieee80211_key *key; - - struct ieee80211_channel *channel; - - unsigned int flags; -}; - - -typedef unsigned __bitwise__ ieee80211_rx_result; -#define RX_CONTINUE ((__force ieee80211_rx_result) 0u) -#define RX_DROP_UNUSABLE ((__force ieee80211_rx_result) 1u) -#define RX_DROP_MONITOR ((__force ieee80211_rx_result) 2u) -#define RX_QUEUED ((__force ieee80211_rx_result) 3u) - -/** - * enum ieee80211_packet_rx_flags - packet RX flags - * @IEEE80211_RX_RA_MATCH: frame is destined to interface currently processed - * (incl. multicast frames) - * @IEEE80211_RX_IN_SCAN: received while scanning - * @IEEE80211_RX_FRAGMENTED: fragmented frame - * @IEEE80211_RX_AMSDU: a-MSDU packet - * @IEEE80211_RX_MALFORMED_ACTION_FRM: action frame is malformed - * @IEEE80211_RX_DEFERRED_RELEASE: frame was subjected to receive reordering - * - * These are per-frame flags that are attached to a frame in the - * @rx_flags field of &struct ieee80211_rx_status. - */ -enum ieee80211_packet_rx_flags { - IEEE80211_RX_IN_SCAN = BIT(0), - IEEE80211_RX_RA_MATCH = BIT(1), - IEEE80211_RX_FRAGMENTED = BIT(2), - IEEE80211_RX_AMSDU = BIT(3), - IEEE80211_RX_MALFORMED_ACTION_FRM = BIT(4), - IEEE80211_RX_DEFERRED_RELEASE = BIT(5), -}; - -/** - * enum ieee80211_rx_flags - RX data flags - * - * @IEEE80211_RX_CMNTR: received on cooked monitor already - * @IEEE80211_RX_BEACON_REPORTED: This frame was already reported - * to cfg80211_report_obss_beacon(). - * - * These flags are used across handling multiple interfaces - * for a single frame. - */ -enum ieee80211_rx_flags { - IEEE80211_RX_CMNTR = BIT(0), - IEEE80211_RX_BEACON_REPORTED = BIT(1), -}; - -/* - * struct ieee80211_rx_data - receiver structure - * - */ -struct ieee80211_rx_data { - struct sk_buff *skb; - struct ieee80211_local *local; - struct ieee80211_sub_if_data *sdata; - struct sta_info *sta; - struct ieee80211_key *key; - - unsigned int flags; - - /* - * Index into sequence numbers array, 0..16 - * since the last (16) is used for non-QoS, - * will be 16 on non-QoS frames. - */ - int seqno_idx; - - /* - * Index into the security IV/PN arrays, 0..16 - * since the last (16) is used for CCMP-encrypted - * management frames, will be set to 16 on mgmt - * frames and 0 on non-QoS frames. - */ - int security_idx; - - u32 tkip_iv32; - u16 tkip_iv16; -}; - -struct beacon_data { - u8 *head, *tail; - int head_len, tail_len; - struct rcu_head rcu_head; -}; - -struct ieee80211_if_ap { - struct beacon_data __rcu *beacon; - struct sk_buff __rcu *probe_resp; - - struct list_head vlans; - - /* yes, this looks ugly, but guarantees that we can later use - * bitmap_empty :) - * NB: don't touch this bitmap, use sta_info_{set,clear}_tim_bit */ - u8 tim[sizeof(unsigned long) * BITS_TO_LONGS(IEEE80211_MAX_AID + 1)]; - struct sk_buff_head ps_bc_buf; - atomic_t num_sta_ps; /* number of stations in PS mode */ - atomic_t num_sta_authorized; /* number of authorized stations */ - int dtim_count; - bool dtim_bc_mc; -}; - -struct ieee80211_if_wds { - struct sta_info *sta; - u8 remote_addr[ETH_ALEN]; -}; - -struct ieee80211_if_vlan { - struct list_head list; - - /* used for all tx if the VLAN is configured to 4-addr mode */ - struct sta_info __rcu *sta; -}; - -struct mesh_stats { - __u32 fwded_mcast; /* Mesh forwarded multicast frames */ - __u32 fwded_unicast; /* Mesh forwarded unicast frames */ - __u32 fwded_frames; /* Mesh total forwarded frames */ - __u32 dropped_frames_ttl; /* Not transmitted since mesh_ttl == 0*/ - __u32 dropped_frames_no_route; /* Not transmitted, no route found */ - __u32 dropped_frames_congestion;/* Not forwarded due to congestion */ - atomic_t estab_plinks; -}; - -#define PREQ_Q_F_START 0x1 -#define PREQ_Q_F_REFRESH 0x2 -struct mesh_preq_queue { - struct list_head list; - u8 dst[ETH_ALEN]; - u8 flags; -}; - -enum ieee80211_work_type { - IEEE80211_WORK_ABORT, - IEEE80211_WORK_REMAIN_ON_CHANNEL, - IEEE80211_WORK_OFFCHANNEL_TX, -}; - -/** - * enum work_done_result - indicates what to do after work was done - * - * @WORK_DONE_DESTROY: This work item is no longer needed, destroy. - * @WORK_DONE_REQUEUE: This work item was reset to be reused, and - * should be requeued. - */ -enum work_done_result { - WORK_DONE_DESTROY, - WORK_DONE_REQUEUE, -}; - -struct ieee80211_work { - struct list_head list; - - struct rcu_head rcu_head; - - struct ieee80211_sub_if_data *sdata; - - enum work_done_result (*done)(struct ieee80211_work *wk, - struct sk_buff *skb); - - struct ieee80211_channel *chan; - enum nl80211_channel_type chan_type; - - unsigned long timeout; - enum ieee80211_work_type type; - - bool started; - - union { - struct { - u32 duration; - } remain; - struct { - struct sk_buff *frame; - u32 wait; - bool status; - } offchan_tx; - }; - - size_t data_len; - u8 data[]; -}; - -/* flags used in struct ieee80211_if_managed.flags */ -enum ieee80211_sta_flags { - IEEE80211_STA_BEACON_POLL = BIT(0), - IEEE80211_STA_CONNECTION_POLL = BIT(1), - IEEE80211_STA_CONTROL_PORT = BIT(2), - IEEE80211_STA_DISABLE_11N = BIT(4), - IEEE80211_STA_CSA_RECEIVED = BIT(5), - IEEE80211_STA_MFP_ENABLED = BIT(6), - IEEE80211_STA_UAPSD_ENABLED = BIT(7), - IEEE80211_STA_NULLFUNC_ACKED = BIT(8), - IEEE80211_STA_RESET_SIGNAL_AVE = BIT(9), -}; - -struct ieee80211_mgd_auth_data { - struct cfg80211_bss *bss; - unsigned long timeout; - int tries; - u16 algorithm, expected_transaction; - - u8 key[WLAN_KEY_LEN_WEP104]; - u8 key_len, key_idx; - bool done; - - size_t ie_len; - u8 ie[]; -}; - -struct ieee80211_mgd_assoc_data { - struct cfg80211_bss *bss; - const u8 *supp_rates; - const u8 *ht_information_ie; - - unsigned long timeout; - int tries; - - u16 capability; - u8 prev_bssid[ETH_ALEN]; - u8 ssid[IEEE80211_MAX_SSID_LEN]; - u8 ssid_len; - u8 supp_rates_len; - bool wmm, uapsd; - bool have_beacon; - bool sent_assoc; - bool synced; - - size_t ie_len; - u8 ie[]; -}; - -struct ieee80211_if_managed { - struct timer_list timer; - struct timer_list conn_mon_timer; - struct timer_list bcn_mon_timer; - struct timer_list chswitch_timer; - struct work_struct monitor_work; - struct work_struct chswitch_work; - struct work_struct beacon_connection_loss_work; - - unsigned long beacon_timeout; - unsigned long probe_timeout; - int probe_send_count; - bool nullfunc_failed; - - struct mutex mtx; - struct cfg80211_bss *associated; - struct ieee80211_mgd_auth_data *auth_data; - struct ieee80211_mgd_assoc_data *assoc_data; - - u8 bssid[ETH_ALEN]; - - u16 aid; - - unsigned long timers_running; /* used for quiesce/restart */ - bool powersave; /* powersave requested for this iface */ - bool broken_ap; /* AP is broken -- turn off powersave */ - enum ieee80211_smps_mode req_smps, /* requested smps mode */ - ap_smps, /* smps mode AP thinks we're in */ - driver_smps_mode; /* smps mode request */ - - struct work_struct request_smps_work; - - unsigned int flags; - - bool beacon_crc_valid; - u32 beacon_crc; - - enum { - IEEE80211_MFP_DISABLED, - IEEE80211_MFP_OPTIONAL, - IEEE80211_MFP_REQUIRED - } mfp; /* management frame protection */ - - /* - * Bitmask of enabled u-apsd queues, - * IEEE80211_WMM_IE_STA_QOSINFO_AC_BE & co. Needs a new association - * to take effect. - */ - unsigned int uapsd_queues; - - /* - * Maximum number of buffered frames AP can deliver during a - * service period, IEEE80211_WMM_IE_STA_QOSINFO_SP_ALL or similar. - * Needs a new association to take effect. - */ - unsigned int uapsd_max_sp_len; - - int wmm_last_param_set; - - u8 use_4addr; - - /* Signal strength from the last Beacon frame in the current BSS. */ - int last_beacon_signal; - - /* - * Weighted average of the signal strength from Beacon frames in the - * current BSS. This is in units of 1/16 of the signal unit to maintain - * accuracy and to speed up calculations, i.e., the value need to be - * divided by 16 to get the actual value. - */ - int ave_beacon_signal; - - /* - * Number of Beacon frames used in ave_beacon_signal. This can be used - * to avoid generating less reliable cqm events that would be based - * only on couple of received frames. - */ - unsigned int count_beacon_signal; - - /* - * Last Beacon frame signal strength average (ave_beacon_signal / 16) - * that triggered a cqm event. 0 indicates that no event has been - * generated for the current association. - */ - int last_cqm_event_signal; - - /* - * State variables for keeping track of RSSI of the AP currently - * connected to and informing driver when RSSI has gone - * below/above a certain threshold. - */ - int rssi_min_thold, rssi_max_thold; - int last_ave_beacon_signal; - - struct ieee80211_ht_cap ht_capa; /* configured ht-cap over-rides */ - struct ieee80211_ht_cap ht_capa_mask; /* Valid parts of ht_capa */ -}; - -struct ieee80211_if_ibss { - struct timer_list timer; - - struct mutex mtx; - - unsigned long last_scan_completed; - - u32 basic_rates; - - bool timer_running; - - bool fixed_bssid; - bool fixed_channel; - bool privacy; - - bool control_port; - - u8 bssid[ETH_ALEN] __aligned(2); - u8 ssid[IEEE80211_MAX_SSID_LEN]; - u8 ssid_len, ie_len; - u8 *ie; - struct ieee80211_channel *channel; - enum nl80211_channel_type channel_type; - - unsigned long ibss_join_req; - /* probe response/beacon for IBSS */ - struct sk_buff __rcu *presp; - struct sk_buff *skb; - - spinlock_t incomplete_lock; - struct list_head incomplete_stations; - - enum { - IEEE80211_IBSS_MLME_SEARCH, - IEEE80211_IBSS_MLME_JOINED, - } state; -}; - -struct ieee80211_if_mesh { - struct timer_list housekeeping_timer; - struct timer_list mesh_path_timer; - struct timer_list mesh_path_root_timer; - - unsigned long timers_running; - - unsigned long wrkq_flags; - - u8 mesh_id[IEEE80211_MAX_MESH_ID_LEN]; - size_t mesh_id_len; - /* Active Path Selection Protocol Identifier */ - u8 mesh_pp_id; - /* Active Path Selection Metric Identifier */ - u8 mesh_pm_id; - /* Congestion Control Mode Identifier */ - u8 mesh_cc_id; - /* Synchronization Protocol Identifier */ - u8 mesh_sp_id; - /* Authentication Protocol Identifier */ - u8 mesh_auth_id; - /* Local mesh Sequence Number */ - u32 sn; - /* Last used PREQ ID */ - u32 preq_id; - atomic_t mpaths; - /* Timestamp of last SN update */ - unsigned long last_sn_update; - /* Time when it's ok to send next PERR */ - unsigned long next_perr; - /* Timestamp of last PREQ sent */ - unsigned long last_preq; - struct mesh_rmc *rmc; - spinlock_t mesh_preq_queue_lock; - struct mesh_preq_queue preq_queue; - int preq_queue_len; - struct mesh_stats mshstats; - struct mesh_config mshcfg; - u32 mesh_seqnum; - bool accepting_plinks; - int num_gates; - const u8 *ie; - u8 ie_len; - enum { - IEEE80211_MESH_SEC_NONE = 0x0, - IEEE80211_MESH_SEC_AUTHED = 0x1, - IEEE80211_MESH_SEC_SECURED = 0x2, - } security; -}; - -#ifdef CONFIG_MAC80211_MESH -#define IEEE80211_IFSTA_MESH_CTR_INC(msh, name) \ - do { (msh)->mshstats.name++; } while (0) -#else -#define IEEE80211_IFSTA_MESH_CTR_INC(msh, name) \ - do { } while (0) -#endif - -/** - * enum ieee80211_sub_if_data_flags - virtual interface flags - * - * @IEEE80211_SDATA_ALLMULTI: interface wants all multicast packets - * @IEEE80211_SDATA_PROMISC: interface is promisc - * @IEEE80211_SDATA_OPERATING_GMODE: operating in G-only mode - * @IEEE80211_SDATA_DONT_BRIDGE_PACKETS: bridge packets between - * associated stations and deliver multicast frames both - * back to wireless media and to the local net stack. - * @IEEE80211_SDATA_DISCONNECT_RESUME: Disconnect after resume. - * @IEEE80211_SDATA_IN_DRIVER: indicates interface was added to driver - */ -enum ieee80211_sub_if_data_flags { - IEEE80211_SDATA_ALLMULTI = BIT(0), - IEEE80211_SDATA_PROMISC = BIT(1), - IEEE80211_SDATA_OPERATING_GMODE = BIT(2), - IEEE80211_SDATA_DONT_BRIDGE_PACKETS = BIT(3), - IEEE80211_SDATA_DISCONNECT_RESUME = BIT(4), - IEEE80211_SDATA_IN_DRIVER = BIT(5), -}; - -/** - * enum ieee80211_sdata_state_bits - virtual interface state bits - * @SDATA_STATE_RUNNING: virtual interface is up & running; this - * mirrors netif_running() but is separate for interface type - * change handling while the interface is up - * @SDATA_STATE_OFFCHANNEL: This interface is currently in offchannel - * mode, so queues are stopped - */ -enum ieee80211_sdata_state_bits { - SDATA_STATE_RUNNING, - SDATA_STATE_OFFCHANNEL, -}; - -struct ieee80211_sub_if_data { - struct list_head list; - - struct wireless_dev wdev; - - /* keys */ - struct list_head key_list; - - /* count for keys needing tailroom space allocation */ - int crypto_tx_tailroom_needed_cnt; - - struct net_device *dev; - struct ieee80211_local *local; - - unsigned int flags; - - unsigned long state; - - int drop_unencrypted; - - char name[IFNAMSIZ]; - - /* - * keep track of whether the HT opmode (stored in - * vif.bss_info.ht_operation_mode) is valid. - */ - bool ht_opmode_valid; - - /* to detect idle changes */ - bool old_idle; - - /* Fragment table for host-based reassembly */ - struct ieee80211_fragment_entry fragments[IEEE80211_FRAGMENT_MAX]; - unsigned int fragment_next; - - /* TID bitmap for NoAck policy */ - u16 noack_map; - - struct ieee80211_key __rcu *keys[NUM_DEFAULT_KEYS + NUM_DEFAULT_MGMT_KEYS]; - struct ieee80211_key __rcu *default_unicast_key; - struct ieee80211_key __rcu *default_multicast_key; - struct ieee80211_key __rcu *default_mgmt_key; - - u16 sequence_number; - __be16 control_port_protocol; - bool control_port_no_encrypt; - - struct ieee80211_tx_queue_params tx_conf[IEEE80211_MAX_QUEUES]; - - struct work_struct work; - struct sk_buff_head skb_queue; - - bool arp_filter_state; - - /* - * AP this belongs to: self in AP mode and - * corresponding AP in VLAN mode, NULL for - * all others (might be needed later in IBSS) - */ - struct ieee80211_if_ap *bss; - - /* bitmap of allowed (non-MCS) rate indexes for rate control */ - u32 rc_rateidx_mask[IEEE80211_NUM_BANDS]; - u8 rc_rateidx_mcs_mask[IEEE80211_NUM_BANDS][IEEE80211_HT_MCS_MASK_LEN]; - - /* - * [PLATA] - TODO - check if we need to add a new struct as we need to be in one of the different states..and in OCB, none of them applies. - */ - union { - struct ieee80211_if_ap ap; - struct ieee80211_if_wds wds; - struct ieee80211_if_vlan vlan; - struct ieee80211_if_managed mgd; - struct ieee80211_if_ibss ibss; - struct ieee80211_if_mesh mesh; - u32 mntr_flags; - } u; - -#ifdef CONFIG_MAC80211_DEBUGFS - struct { - struct dentry *dir; - struct dentry *subdir_stations; - struct dentry *default_unicast_key; - struct dentry *default_multicast_key; - struct dentry *default_mgmt_key; - } debugfs; -#endif - /* must be last, dynamically sized area in this! */ - struct ieee80211_vif vif; -}; - -static inline -struct ieee80211_sub_if_data *vif_to_sdata(struct ieee80211_vif *p) -{ - return container_of(p, struct ieee80211_sub_if_data, vif); -} - -enum sdata_queue_type { - IEEE80211_SDATA_QUEUE_TYPE_FRAME = 0, - IEEE80211_SDATA_QUEUE_AGG_START = 1, - IEEE80211_SDATA_QUEUE_AGG_STOP = 2, -}; - -enum { - IEEE80211_RX_MSG = 1, - IEEE80211_TX_STATUS_MSG = 2, - IEEE80211_EOSP_MSG = 3, -}; - -struct skb_eosp_msg_data { - u8 sta[ETH_ALEN], iface[ETH_ALEN]; -}; - -enum queue_stop_reason { - IEEE80211_QUEUE_STOP_REASON_DRIVER, - IEEE80211_QUEUE_STOP_REASON_PS, - IEEE80211_QUEUE_STOP_REASON_CSA, - IEEE80211_QUEUE_STOP_REASON_AGGREGATION, - IEEE80211_QUEUE_STOP_REASON_SUSPEND, - IEEE80211_QUEUE_STOP_REASON_SKB_ADD, - IEEE80211_QUEUE_STOP_REASON_CHTYPE_CHANGE, -}; - -#ifdef CONFIG_MAC80211_LEDS -struct tpt_led_trigger { - struct led_trigger trig; - char name[32]; - const struct ieee80211_tpt_blink *blink_table; - unsigned int blink_table_len; - struct timer_list timer; - unsigned long prev_traffic; - unsigned long tx_bytes, rx_bytes; - unsigned int active, want; - bool running; -}; -#endif - -/** - * mac80211 scan flags - currently active scan mode - * - * @SCAN_SW_SCANNING: We're currently in the process of scanning but may as - * well be on the operating channel - * @SCAN_HW_SCANNING: The hardware is scanning for us, we have no way to - * determine if we are on the operating channel or not - * @SCAN_COMPLETED: Set for our scan work function when the driver reported - * that the scan completed. - * @SCAN_ABORTED: Set for our scan work function when the driver reported - * a scan complete for an aborted scan. - */ -enum { - SCAN_SW_SCANNING, - SCAN_HW_SCANNING, - SCAN_COMPLETED, - SCAN_ABORTED, -}; - -/** - * enum mac80211_scan_state - scan state machine states - * - * @SCAN_DECISION: Main entry point to the scan state machine, this state - * determines if we should keep on scanning or switch back to the - * operating channel - * @SCAN_SET_CHANNEL: Set the next channel to be scanned - * @SCAN_SEND_PROBE: Send probe requests and wait for probe responses - * @SCAN_SUSPEND: Suspend the scan and go back to operating channel to - * send out data - * @SCAN_RESUME: Resume the scan and scan the next channel - */ -enum mac80211_scan_state { - SCAN_DECISION, - SCAN_SET_CHANNEL, - SCAN_SEND_PROBE, - SCAN_SUSPEND, - SCAN_RESUME, -}; - -struct ieee80211_local { - /* embed the driver visible part. - * don't cast (use the static inlines below), but we keep - * it first anyway so they become a no-op */ - struct ieee80211_hw hw; - - const struct ieee80211_ops *ops; - - /* - * work stuff, potentially off-channel (in the future) - */ - struct list_head work_list; - struct timer_list work_timer; - struct work_struct work_work; - - /* - * private workqueue to mac80211. mac80211 makes this accessible - * via ieee80211_queue_work() - */ - struct workqueue_struct *workqueue; - - unsigned long queue_stop_reasons[IEEE80211_MAX_QUEUES]; - /* also used to protect ampdu_ac_queue and amdpu_ac_stop_refcnt */ - spinlock_t queue_stop_reason_lock; - - int open_count; - int monitors, cooked_mntrs; - /* number of interfaces with corresponding FIF_ flags */ - int fif_fcsfail, fif_plcpfail, fif_control, fif_other_bss, fif_pspoll, - fif_probe_req; - int probe_req_reg; - unsigned int filter_flags; /* FIF_* */ - - bool wiphy_ciphers_allocated; - - /* protects the aggregated multicast list and filter calls */ - spinlock_t filter_lock; - - /* used for uploading changed mc list */ - struct work_struct reconfig_filter; - - /* used to reconfigure hardware SM PS */ - struct work_struct recalc_smps; - - /* aggregated multicast list */ -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35)) - struct netdev_hw_addr_list mc_list; -#else - struct dev_addr_list *mc_list; - int mc_count; -#endif - - bool tim_in_locked_section; /* see ieee80211_beacon_get() */ - - /* - * suspended is true if we finished all the suspend _and_ we have - * not yet come up from resume. This is to be used by mac80211 - * to ensure driver sanity during suspend and mac80211's own - * sanity. It can eventually be used for WoW as well. - */ - bool suspended; - - /* - * Resuming is true while suspended, but when we're reprogramming the - * hardware -- at that time it's allowed to use ieee80211_queue_work() - * again even though some other parts of the stack are still suspended - * and we still drop received frames to avoid waking the stack. - */ - bool resuming; - - /* - * quiescing is true during the suspend process _only_ to - * ease timer cancelling etc. - */ - bool quiescing; - - /* device is started */ - bool started; - - /* wowlan is enabled -- don't reconfig on resume */ - bool wowlan; - - int tx_headroom; /* required headroom for hardware/radiotap */ - - /* Tasklet and skb queue to process calls from IRQ mode. All frames - * added to skb_queue will be processed, but frames in - * skb_queue_unreliable may be dropped if the total length of these - * queues increases over the limit. */ -#define IEEE80211_IRQSAFE_QUEUE_LIMIT 128 - struct tasklet_struct tasklet; - struct sk_buff_head skb_queue; - struct sk_buff_head skb_queue_unreliable; - - /* - * Internal FIFO queue which is shared between multiple rx path - * stages. Its main task is to provide a serialization mechanism, - * so all rx handlers can enjoy having exclusive access to their - * private data structures. - */ - struct sk_buff_head rx_skb_queue; - bool running_rx_handler; /* protected by rx_skb_queue.lock */ - - /* Station data */ - /* - * The mutex only protects the list, hash table and - * counter, reads are done with RCU. - */ - struct mutex sta_mtx; - spinlock_t tim_lock; - unsigned long num_sta; - struct list_head sta_list; - struct sta_info __rcu *sta_hash[STA_HASH_SIZE]; - struct timer_list sta_cleanup; - int sta_generation; - - struct sk_buff_head pending[IEEE80211_MAX_QUEUES]; - struct tasklet_struct tx_pending_tasklet; - - atomic_t agg_queue_stop[IEEE80211_MAX_QUEUES]; - - /* number of interfaces with corresponding IFF_ flags */ - atomic_t iff_allmultis, iff_promiscs; - - struct rate_control_ref *rate_ctrl; - - struct crypto_cipher *wep_tx_tfm; - struct crypto_cipher *wep_rx_tfm; - u32 wep_iv; - - /* see iface.c */ - struct list_head interfaces; - struct mutex iflist_mtx; - - /* - * Key mutex, protects sdata's key_list and sta_info's - * key pointers (write access, they're RCU.) - */ - struct mutex key_mtx; - - /* mutex for scan and work locking */ - struct mutex mtx; - - /* Scanning and BSS list */ - unsigned long scanning; - struct cfg80211_ssid scan_ssid; - struct cfg80211_scan_request *int_scan_req; - struct cfg80211_scan_request *scan_req, *hw_scan_req; - struct ieee80211_channel *scan_channel; - enum ieee80211_band hw_scan_band; - int scan_channel_idx; - int scan_ies_len; - - bool sched_scanning; - struct ieee80211_sched_scan_ies sched_scan_ies; - struct work_struct sched_scan_stopped_work; - - unsigned long leave_oper_channel_time; - enum mac80211_scan_state next_scan_state; - struct delayed_work scan_work; - struct ieee80211_sub_if_data *scan_sdata; - enum nl80211_channel_type _oper_channel_type; - struct ieee80211_channel *oper_channel, *csa_channel; - - /* Temporary remain-on-channel for off-channel operations */ - struct ieee80211_channel *tmp_channel; - enum nl80211_channel_type tmp_channel_type; - - /* SNMP counters */ - /* dot11CountersTable */ - u32 dot11TransmittedFragmentCount; - u32 dot11MulticastTransmittedFrameCount; - u32 dot11FailedCount; - u32 dot11RetryCount; - u32 dot11MultipleRetryCount; - u32 dot11FrameDuplicateCount; - u32 dot11ReceivedFragmentCount; - u32 dot11MulticastReceivedFrameCount; - u32 dot11TransmittedFrameCount; - -#ifdef CONFIG_MAC80211_LEDS - int tx_led_counter, rx_led_counter; - struct led_trigger *tx_led, *rx_led, *assoc_led, *radio_led; - struct tpt_led_trigger *tpt_led_trigger; - char tx_led_name[32], rx_led_name[32], - assoc_led_name[32], radio_led_name[32]; -#endif - -#ifdef CONFIG_MAC80211_DEBUG_COUNTERS - /* TX/RX handler statistics */ - unsigned int tx_handlers_drop; - unsigned int tx_handlers_queued; - unsigned int tx_handlers_drop_unencrypted; - unsigned int tx_handlers_drop_fragment; - unsigned int tx_handlers_drop_wep; - unsigned int tx_handlers_drop_not_assoc; - unsigned int tx_handlers_drop_unauth_port; - unsigned int rx_handlers_drop; - unsigned int rx_handlers_queued; - unsigned int rx_handlers_drop_nullfunc; - unsigned int rx_handlers_drop_defrag; - unsigned int rx_handlers_drop_short; - unsigned int rx_handlers_drop_passive_scan; - unsigned int tx_expand_skb_head; - unsigned int tx_expand_skb_head_cloned; - unsigned int rx_expand_skb_head; - unsigned int rx_expand_skb_head2; - unsigned int rx_handlers_fragments; - unsigned int tx_status_drop; -#define I802_DEBUG_INC(c) (c)++ -#else /* CONFIG_MAC80211_DEBUG_COUNTERS */ -#define I802_DEBUG_INC(c) do { } while (0) -#endif /* CONFIG_MAC80211_DEBUG_COUNTERS */ - - - int total_ps_buffered; /* total number of all buffered unicast and - * multicast packets for power saving stations - */ - unsigned int wmm_acm; /* bit field of ACM bits (BIT(802.1D tag)) */ - - bool pspolling; - bool offchannel_ps_enabled; - /* - * PS can only be enabled when we have exactly one managed - * interface (and monitors) in PS, this then points there. - */ - struct ieee80211_sub_if_data *ps_sdata; - struct work_struct dynamic_ps_enable_work; - struct work_struct dynamic_ps_disable_work; - struct timer_list dynamic_ps_timer; - struct notifier_block network_latency_notifier; - struct notifier_block ifa_notifier; - - /* - * The dynamic ps timeout configured from user space via WEXT - - * this will override whatever chosen by mac80211 internally. - */ - int dynamic_ps_forced_timeout; - int dynamic_ps_user_timeout; - bool disable_dynamic_ps; - - int user_power_level; /* in dBm */ - int power_constr_level; /* in dBm */ - - enum ieee80211_smps_mode smps_mode; - - struct work_struct restart_work; - -#ifdef CONFIG_MAC80211_DEBUGFS - struct local_debugfsdentries { - struct dentry *rcdir; - struct dentry *keys; - } debugfs; -#endif - - struct ieee80211_channel *hw_roc_channel; - struct net_device *hw_roc_dev; - struct sk_buff *hw_roc_skb, *hw_roc_skb_for_status; - struct work_struct hw_roc_start, hw_roc_done; - enum nl80211_channel_type hw_roc_channel_type; - unsigned int hw_roc_duration; - u32 hw_roc_cookie; - bool hw_roc_for_tx; - - struct idr ack_status_frames; - spinlock_t ack_status_lock; - - /* dummy netdev for use w/ NAPI */ - struct net_device napi_dev; - - struct napi_struct napi; -}; - -static inline struct ieee80211_sub_if_data * -IEEE80211_DEV_TO_SUB_IF(struct net_device *dev) -{ - return netdev_priv(dev); -} - -/* this struct represents 802.11n's RA/TID combination */ -struct ieee80211_ra_tid { - u8 ra[ETH_ALEN]; - u16 tid; -}; - -/* Parsed Information Elements */ -struct ieee802_11_elems { - u8 *ie_start; - size_t total_len; - - /* pointers to IEs */ - u8 *ssid; - u8 *supp_rates; - u8 *fh_params; - u8 *ds_params; - u8 *cf_params; - struct ieee80211_tim_ie *tim; - u8 *ibss_params; - u8 *challenge; - u8 *wpa; - u8 *rsn; - u8 *erp_info; - u8 *ext_supp_rates; - u8 *wmm_info; - u8 *wmm_param; - struct ieee80211_ht_cap *ht_cap_elem; - struct ieee80211_ht_info *ht_info_elem; - struct ieee80211_meshconf_ie *mesh_config; - u8 *mesh_id; - u8 *peering; - u8 *preq; - u8 *prep; - u8 *perr; - struct ieee80211_rann_ie *rann; - u8 *ch_switch_elem; - u8 *country_elem; - u8 *pwr_constr_elem; - u8 *quiet_elem; /* first quite element */ - u8 *timeout_int; - - /* length of them, respectively */ - u8 ssid_len; - u8 supp_rates_len; - u8 fh_params_len; - u8 ds_params_len; - u8 cf_params_len; - u8 tim_len; - u8 ibss_params_len; - u8 challenge_len; - u8 wpa_len; - u8 rsn_len; - u8 erp_info_len; - u8 ext_supp_rates_len; - u8 wmm_info_len; - u8 wmm_param_len; - u8 mesh_id_len; - u8 peering_len; - u8 preq_len; - u8 prep_len; - u8 perr_len; - u8 ch_switch_elem_len; - u8 country_elem_len; - u8 pwr_constr_elem_len; - u8 quiet_elem_len; - u8 num_of_quiet_elem; /* can be more the one */ - u8 timeout_int_len; - - /* whether a parse error occurred while retrieving these elements */ - bool parse_error; -}; - -static inline struct ieee80211_local *hw_to_local( - struct ieee80211_hw *hw) -{ - return container_of(hw, struct ieee80211_local, hw); -} - -/* - * checks if the BSS ID is identical OR if the wildcard BSSID has been used - */ -static inline int ieee80211_bssid_match(const u8 *raddr, const u8 *addr) -{ - return compare_ether_addr(raddr, addr) == 0 || - is_broadcast_ether_addr(raddr); -} - - -int ieee80211_hw_config(struct ieee80211_local *local, u32 changed); -void ieee80211_tx_set_protected(struct ieee80211_tx_data *tx); -void ieee80211_bss_info_change_notify(struct ieee80211_sub_if_data *sdata, - u32 changed); -void ieee80211_configure_filter(struct ieee80211_local *local); -u32 ieee80211_reset_erp_info(struct ieee80211_sub_if_data *sdata); - -/* STA code */ -void ieee80211_sta_setup_sdata(struct ieee80211_sub_if_data *sdata); -int ieee80211_mgd_auth(struct ieee80211_sub_if_data *sdata, - struct cfg80211_auth_request *req); -int ieee80211_mgd_assoc(struct ieee80211_sub_if_data *sdata, - struct cfg80211_assoc_request *req); -int ieee80211_mgd_deauth(struct ieee80211_sub_if_data *sdata, - struct cfg80211_deauth_request *req); -int ieee80211_mgd_disassoc(struct ieee80211_sub_if_data *sdata, - struct cfg80211_disassoc_request *req); -void ieee80211_send_pspoll(struct ieee80211_local *local, - struct ieee80211_sub_if_data *sdata); -void ieee80211_recalc_ps(struct ieee80211_local *local, s32 latency); -int ieee80211_max_network_latency(struct notifier_block *nb, - unsigned long data, void *dummy); -int ieee80211_set_arp_filter(struct ieee80211_sub_if_data *sdata); -void ieee80211_sta_process_chanswitch(struct ieee80211_sub_if_data *sdata, - struct ieee80211_channel_sw_ie *sw_elem, - struct ieee80211_bss *bss, - u64 timestamp); -void ieee80211_sta_quiesce(struct ieee80211_sub_if_data *sdata); -void ieee80211_sta_restart(struct ieee80211_sub_if_data *sdata); -void ieee80211_sta_work(struct ieee80211_sub_if_data *sdata); -void ieee80211_sta_rx_queued_mgmt(struct ieee80211_sub_if_data *sdata, - struct sk_buff *skb); -void ieee80211_sta_reset_beacon_monitor(struct ieee80211_sub_if_data *sdata); -void ieee80211_sta_reset_conn_monitor(struct ieee80211_sub_if_data *sdata); -void ieee80211_mgd_teardown(struct ieee80211_sub_if_data *sdata); - -/* IBSS code */ -void ieee80211_ibss_notify_scan_completed(struct ieee80211_local *local); -void ieee80211_ibss_setup_sdata(struct ieee80211_sub_if_data *sdata); -void ieee80211_ibss_rx_no_sta(struct ieee80211_sub_if_data *sdata, - const u8 *bssid, const u8 *addr, u32 supp_rates); -int ieee80211_ibss_join(struct ieee80211_sub_if_data *sdata, - struct cfg80211_ibss_params *params); -int ieee80211_ibss_leave(struct ieee80211_sub_if_data *sdata); -void ieee80211_ibss_quiesce(struct ieee80211_sub_if_data *sdata); -void ieee80211_ibss_restart(struct ieee80211_sub_if_data *sdata); -void ieee80211_ibss_work(struct ieee80211_sub_if_data *sdata); -void ieee80211_ibss_rx_queued_mgmt(struct ieee80211_sub_if_data *sdata, - struct sk_buff *skb); - -/* mesh code */ -void ieee80211_mesh_work(struct ieee80211_sub_if_data *sdata); -void ieee80211_mesh_rx_queued_mgmt(struct ieee80211_sub_if_data *sdata, - struct sk_buff *skb); - -/* scan/BSS handling */ -void ieee80211_scan_work(struct work_struct *work); -int ieee80211_request_internal_scan(struct ieee80211_sub_if_data *sdata, - const u8 *ssid, u8 ssid_len, - struct ieee80211_channel *chan); -int ieee80211_request_scan(struct ieee80211_sub_if_data *sdata, - struct cfg80211_scan_request *req); -void ieee80211_scan_cancel(struct ieee80211_local *local); -ieee80211_rx_result -ieee80211_scan_rx(struct ieee80211_sub_if_data *sdata, struct sk_buff *skb); - -void ieee80211_mlme_notify_scan_completed(struct ieee80211_local *local); -struct ieee80211_bss * -ieee80211_bss_info_update(struct ieee80211_local *local, - struct ieee80211_rx_status *rx_status, - struct ieee80211_mgmt *mgmt, - size_t len, - struct ieee802_11_elems *elems, - struct ieee80211_channel *channel, - bool beacon); -struct ieee80211_bss * -ieee80211_rx_bss_get(struct ieee80211_local *local, u8 *bssid, int freq, - u8 *ssid, u8 ssid_len); -void ieee80211_rx_bss_put(struct ieee80211_local *local, - struct ieee80211_bss *bss); - -/* scheduled scan handling */ -int ieee80211_request_sched_scan_start(struct ieee80211_sub_if_data *sdata, - struct cfg80211_sched_scan_request *req); -int ieee80211_request_sched_scan_stop(struct ieee80211_sub_if_data *sdata); -void ieee80211_sched_scan_stopped_work(struct work_struct *work); - -/* off-channel helpers */ -void ieee80211_offchannel_stop_vifs(struct ieee80211_local *local, - bool offchannel_ps_enable); -void ieee80211_offchannel_return(struct ieee80211_local *local, - bool offchannel_ps_disable); -void ieee80211_hw_roc_setup(struct ieee80211_local *local); - -/* interface handling */ -int ieee80211_iface_init(void); -void ieee80211_iface_exit(void); -int ieee80211_if_add(struct ieee80211_local *local, const char *name, - struct net_device **new_dev, enum nl80211_iftype type, - struct vif_params *params); -int ieee80211_if_change_type(struct ieee80211_sub_if_data *sdata, - enum nl80211_iftype type); -void ieee80211_if_remove(struct ieee80211_sub_if_data *sdata); -void ieee80211_remove_interfaces(struct ieee80211_local *local); -u32 __ieee80211_recalc_idle(struct ieee80211_local *local); -void ieee80211_recalc_idle(struct ieee80211_local *local); -void ieee80211_adjust_monitor_flags(struct ieee80211_sub_if_data *sdata, - const int offset); - -static inline bool ieee80211_sdata_running(struct ieee80211_sub_if_data *sdata) -{ - return test_bit(SDATA_STATE_RUNNING, &sdata->state); -} - -/* tx handling */ -void ieee80211_clear_tx_pending(struct ieee80211_local *local); -void ieee80211_tx_pending(unsigned long data); -netdev_tx_t ieee80211_monitor_start_xmit(struct sk_buff *skb, - struct net_device *dev); -netdev_tx_t ieee80211_subif_start_xmit(struct sk_buff *skb, - struct net_device *dev); - -/* HT */ -bool ieee80111_cfg_override_disables_ht40(struct ieee80211_sub_if_data *sdata); -void ieee80211_apply_htcap_overrides(struct ieee80211_sub_if_data *sdata, - struct ieee80211_sta_ht_cap *ht_cap); -void ieee80211_ht_cap_ie_to_sta_ht_cap(struct ieee80211_sub_if_data *sdata, - struct ieee80211_supported_band *sband, - struct ieee80211_ht_cap *ht_cap_ie, - struct ieee80211_sta_ht_cap *ht_cap); -void ieee80211_send_delba(struct ieee80211_sub_if_data *sdata, - const u8 *da, u16 tid, - u16 initiator, u16 reason_code); -int ieee80211_send_smps_action(struct ieee80211_sub_if_data *sdata, - enum ieee80211_smps_mode smps, const u8 *da, - const u8 *bssid); -void ieee80211_request_smps_work(struct work_struct *work); - -void ___ieee80211_stop_rx_ba_session(struct sta_info *sta, u16 tid, - u16 initiator, u16 reason, bool stop); -void __ieee80211_stop_rx_ba_session(struct sta_info *sta, u16 tid, - u16 initiator, u16 reason, bool stop); -void ieee80211_sta_tear_down_BA_sessions(struct sta_info *sta, bool tx); -void ieee80211_process_delba(struct ieee80211_sub_if_data *sdata, - struct sta_info *sta, - struct ieee80211_mgmt *mgmt, size_t len); -void ieee80211_process_addba_resp(struct ieee80211_local *local, - struct sta_info *sta, - struct ieee80211_mgmt *mgmt, - size_t len); -void ieee80211_process_addba_request(struct ieee80211_local *local, - struct sta_info *sta, - struct ieee80211_mgmt *mgmt, - size_t len); - -int __ieee80211_stop_tx_ba_session(struct sta_info *sta, u16 tid, - enum ieee80211_back_parties initiator, - bool tx); -int ___ieee80211_stop_tx_ba_session(struct sta_info *sta, u16 tid, - enum ieee80211_back_parties initiator, - bool tx); -void ieee80211_start_tx_ba_cb(struct ieee80211_vif *vif, u8 *ra, u16 tid); -void ieee80211_stop_tx_ba_cb(struct ieee80211_vif *vif, u8 *ra, u8 tid); -void ieee80211_ba_session_work(struct work_struct *work); -void ieee80211_tx_ba_session_handle_start(struct sta_info *sta, int tid); -void ieee80211_release_reorder_timeout(struct sta_info *sta, int tid); - -/* Spectrum management */ -void ieee80211_process_measurement_req(struct ieee80211_sub_if_data *sdata, - struct ieee80211_mgmt *mgmt, - size_t len); - -/* Suspend/resume and hw reconfiguration */ -int ieee80211_reconfig(struct ieee80211_local *local); -void ieee80211_stop_device(struct ieee80211_local *local); - -#ifdef CONFIG_PM -int __ieee80211_suspend(struct ieee80211_hw *hw, - struct cfg80211_wowlan *wowlan); - -static inline int __ieee80211_resume(struct ieee80211_hw *hw) -{ - struct ieee80211_local *local = hw_to_local(hw); - - WARN(test_bit(SCAN_HW_SCANNING, &local->scanning), - "%s: resume with hardware scan still in progress\n", - wiphy_name(hw->wiphy)); - - return ieee80211_reconfig(hw_to_local(hw)); -} -#else -static inline int __ieee80211_suspend(struct ieee80211_hw *hw, - struct cfg80211_wowlan *wowlan) -{ - return 0; -} - -static inline int __ieee80211_resume(struct ieee80211_hw *hw) -{ - return 0; -} -#endif - -/* utility functions/constants */ -extern void *mac80211_wiphy_privid; /* for wiphy privid */ -u8 *ieee80211_get_bssid(struct ieee80211_hdr *hdr, size_t len, - enum nl80211_iftype type); -int ieee80211_frame_duration(struct ieee80211_local *local, size_t len, - int rate, int erp, int short_preamble); -void mac80211_ev_michael_mic_failure(struct ieee80211_sub_if_data *sdata, int keyidx, - struct ieee80211_hdr *hdr, const u8 *tsc, - gfp_t gfp); -void ieee80211_set_wmm_default(struct ieee80211_sub_if_data *sdata, - bool bss_notify); -void ieee80211_xmit(struct ieee80211_sub_if_data *sdata, struct sk_buff *skb); - -void ieee80211_tx_skb_tid(struct ieee80211_sub_if_data *sdata, - struct sk_buff *skb, int tid); -static void inline ieee80211_tx_skb(struct ieee80211_sub_if_data *sdata, - struct sk_buff *skb) -{ - /* Send all internal mgmt frames on VO. Accordingly set TID to 7. */ - ieee80211_tx_skb_tid(sdata, skb, 7); -} - -void ieee802_11_parse_elems(u8 *start, size_t len, - struct ieee802_11_elems *elems); -u32 ieee802_11_parse_elems_crc(u8 *start, size_t len, - struct ieee802_11_elems *elems, - u64 filter, u32 crc); -u32 ieee80211_mandatory_rates(struct ieee80211_local *local, - enum ieee80211_band band); - -void ieee80211_dynamic_ps_enable_work(struct work_struct *work); -void ieee80211_dynamic_ps_disable_work(struct work_struct *work); -void ieee80211_dynamic_ps_timer(unsigned long data); -void ieee80211_send_nullfunc(struct ieee80211_local *local, - struct ieee80211_sub_if_data *sdata, - int powersave); -void ieee80211_sta_rx_notify(struct ieee80211_sub_if_data *sdata, - struct ieee80211_hdr *hdr); -void ieee80211_sta_tx_notify(struct ieee80211_sub_if_data *sdata, - struct ieee80211_hdr *hdr, bool ack); -void ieee80211_beacon_connection_loss_work(struct work_struct *work); - -void ieee80211_wake_queues_by_reason(struct ieee80211_hw *hw, - enum queue_stop_reason reason); -void ieee80211_stop_queues_by_reason(struct ieee80211_hw *hw, - enum queue_stop_reason reason); -void ieee80211_wake_queue_by_reason(struct ieee80211_hw *hw, int queue, - enum queue_stop_reason reason); -void ieee80211_stop_queue_by_reason(struct ieee80211_hw *hw, int queue, - enum queue_stop_reason reason); -void ieee80211_add_pending_skb(struct ieee80211_local *local, - struct sk_buff *skb); -void ieee80211_add_pending_skbs(struct ieee80211_local *local, - struct sk_buff_head *skbs); -void ieee80211_add_pending_skbs_fn(struct ieee80211_local *local, - struct sk_buff_head *skbs, - void (*fn)(void *data), void *data); - -void ieee80211_send_auth(struct ieee80211_sub_if_data *sdata, - u16 transaction, u16 auth_alg, - u8 *extra, size_t extra_len, const u8 *bssid, - const u8 *da, const u8 *key, u8 key_len, u8 key_idx); -int ieee80211_build_preq_ies(struct ieee80211_local *local, u8 *buffer, - const u8 *ie, size_t ie_len, - enum ieee80211_band band, u32 rate_mask, - u8 channel); -struct sk_buff *ieee80211_build_probe_req(struct ieee80211_sub_if_data *sdata, - u8 *dst, u32 ratemask, - const u8 *ssid, size_t ssid_len, - const u8 *ie, size_t ie_len, - bool directed); -void ieee80211_send_probe_req(struct ieee80211_sub_if_data *sdata, u8 *dst, - const u8 *ssid, size_t ssid_len, - const u8 *ie, size_t ie_len, - u32 ratemask, bool directed, bool no_cck); - -void ieee80211_sta_def_wmm_params(struct ieee80211_sub_if_data *sdata, - const size_t supp_rates_len, - const u8 *supp_rates); -u32 ieee80211_sta_get_rates(struct ieee80211_local *local, - struct ieee802_11_elems *elems, - enum ieee80211_band band); -int __ieee80211_request_smps(struct ieee80211_sub_if_data *sdata, - enum ieee80211_smps_mode smps_mode); -void ieee80211_recalc_smps(struct ieee80211_local *local); - -size_t ieee80211_ie_split(const u8 *ies, size_t ielen, - const u8 *ids, int n_ids, size_t offset); -size_t ieee80211_ie_split_vendor(const u8 *ies, size_t ielen, size_t offset); -u8 *ieee80211_ie_build_ht_cap(u8 *pos, struct ieee80211_sta_ht_cap *ht_cap, - u16 cap); -u8 *ieee80211_ie_build_ht_info(u8 *pos, - struct ieee80211_sta_ht_cap *ht_cap, - struct ieee80211_channel *channel, - enum nl80211_channel_type channel_type); - -/* internal work items */ -void ieee80211_work_init(struct ieee80211_local *local); -void ieee80211_add_work(struct ieee80211_work *wk); -void free_work(struct ieee80211_work *wk); -void ieee80211_work_purge(struct ieee80211_sub_if_data *sdata); -int ieee80211_wk_remain_on_channel(struct ieee80211_sub_if_data *sdata, - struct ieee80211_channel *chan, - enum nl80211_channel_type channel_type, - unsigned int duration, u64 *cookie); -int ieee80211_wk_cancel_remain_on_channel( - struct ieee80211_sub_if_data *sdata, u64 cookie); - -/* channel management */ -enum ieee80211_chan_mode { - CHAN_MODE_UNDEFINED, - CHAN_MODE_HOPPING, - CHAN_MODE_FIXED, -}; - -enum ieee80211_chan_mode -ieee80211_get_channel_mode(struct ieee80211_local *local, - struct ieee80211_sub_if_data *ignore); -bool ieee80211_set_channel_type(struct ieee80211_local *local, - struct ieee80211_sub_if_data *sdata, - enum nl80211_channel_type chantype); -enum nl80211_channel_type -ieee80211_ht_info_to_channel_type(struct ieee80211_ht_info *ht_info); -enum nl80211_channel_type ieee80211_get_tx_channel_type( - struct ieee80211_local *local, - enum nl80211_channel_type channel_type); - -#ifdef CONFIG_MAC80211_NOINLINE -#define debug_noinline noinline -#else -#define debug_noinline -#endif - -#endif /* IEEE80211_I_H */ diff --git a/openairITS/mac/DOT11/net/mac80211/iface.c b/openairITS/mac/DOT11/net/mac80211/iface.c deleted file mode 100644 index 80a90f68f1..0000000000 --- a/openairITS/mac/DOT11/net/mac80211/iface.c +++ /dev/null @@ -1,1473 +0,0 @@ -/* - * Interface handling (except master interface) - * - * Copyright 2002-2005, Instant802 Networks, Inc. - * Copyright 2005-2006, Devicescape Software, Inc. - * Copyright (c) 2006 Jiri Benc - * Copyright 2008, Johannes Berg - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - */ -#include -#include -#include -#include -#include -#include -#include -#include "ieee80211_i.h" -#include "sta_info.h" -#include "debugfs_netdev.h" -#include "mesh.h" -#include "led.h" -#include "driver-ops.h" -#include "wme.h" -#include "rate.h" - -/** - * DOC: Interface list locking - * - * The interface list in each struct ieee80211_local is protected - * three-fold: - * - * (1) modifications may only be done under the RTNL - * (2) modifications and readers are protected against each other by - * the iflist_mtx. - * (3) modifications are done in an RCU manner so atomic readers - * can traverse the list in RCU-safe blocks. - * - * As a consequence, reads (traversals) of the list can be protected - * by either the RTNL, the iflist_mtx or RCU. - */ - - -static int ieee80211_change_mtu(struct net_device *dev, int new_mtu) -{ - int meshhdrlen; - struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); - - meshhdrlen = (sdata->vif.type == NL80211_IFTYPE_MESH_POINT) ? 5 : 0; - - /* FIX: what would be proper limits for MTU? - * This interface uses 802.3 frames. */ - if (new_mtu < 256 || - new_mtu > IEEE80211_MAX_DATA_LEN - 24 - 6 - meshhdrlen) { - return -EINVAL; - } - -#ifdef CONFIG_MAC80211_VERBOSE_DEBUG - printk(KERN_DEBUG "%s: setting MTU %d\n", dev->name, new_mtu); -#endif /* CONFIG_MAC80211_VERBOSE_DEBUG */ - dev->mtu = new_mtu; - return 0; -} - -static int ieee80211_change_mac(struct net_device *dev, void *addr) -{ - struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); - struct sockaddr *sa = addr; - int ret; - - if (ieee80211_sdata_running(sdata)) - return -EBUSY; - - ret = eth_mac_addr(dev, sa); - - if (ret == 0) - memcpy(sdata->vif.addr, sa->sa_data, ETH_ALEN); - - return ret; -} - -static inline int identical_mac_addr_allowed(int type1, int type2) -{ - return type1 == NL80211_IFTYPE_MONITOR || - type2 == NL80211_IFTYPE_MONITOR || - (type1 == NL80211_IFTYPE_AP && type2 == NL80211_IFTYPE_WDS) || - (type1 == NL80211_IFTYPE_WDS && - (type2 == NL80211_IFTYPE_WDS || - type2 == NL80211_IFTYPE_AP)) || - (type1 == NL80211_IFTYPE_AP && type2 == NL80211_IFTYPE_AP_VLAN) || - (type1 == NL80211_IFTYPE_AP_VLAN && - (type2 == NL80211_IFTYPE_AP || - type2 == NL80211_IFTYPE_AP_VLAN)); -} - -static int ieee80211_check_concurrent_iface(struct ieee80211_sub_if_data *sdata, - enum nl80211_iftype iftype) -{ - struct ieee80211_local *local = sdata->local; - struct ieee80211_sub_if_data *nsdata; - struct net_device *dev = sdata->dev; - - ASSERT_RTNL(); - - /* we hold the RTNL here so can safely walk the list */ - list_for_each_entry(nsdata, &local->interfaces, list) { - struct net_device *ndev = nsdata->dev; - - if (ndev != dev && ieee80211_sdata_running(nsdata)) { - /* - * Allow only a single IBSS interface to be up at any - * time. This is restricted because beacon distribution - * cannot work properly if both are in the same IBSS. - * - * To remove this restriction we'd have to disallow them - * from setting the same SSID on different IBSS interfaces - * belonging to the same hardware. Then, however, we're - * faced with having to adopt two different TSF timers... - */ - if (iftype == NL80211_IFTYPE_ADHOC && - nsdata->vif.type == NL80211_IFTYPE_ADHOC) - return -EBUSY; - - /* - * The remaining checks are only performed for interfaces - * with the same MAC address. - */ - if (compare_ether_addr(dev->dev_addr, ndev->dev_addr)) - continue; - - /* - * check whether it may have the same address - */ - if (!identical_mac_addr_allowed(iftype, - nsdata->vif.type)) - return -ENOTUNIQ; - - /* - * can only add VLANs to enabled APs - */ - if (iftype == NL80211_IFTYPE_AP_VLAN && - nsdata->vif.type == NL80211_IFTYPE_AP) - sdata->bss = &nsdata->u.ap; - } - } - - return 0; -} - -void ieee80211_adjust_monitor_flags(struct ieee80211_sub_if_data *sdata, - const int offset) -{ - struct ieee80211_local *local = sdata->local; - u32 flags = sdata->u.mntr_flags; - -#define ADJUST(_f, _s) do { \ - if (flags & MONITOR_FLAG_##_f) \ - local->fif_##_s += offset; \ - } while (0) - - ADJUST(FCSFAIL, fcsfail); - ADJUST(PLCPFAIL, plcpfail); - ADJUST(CONTROL, control); - ADJUST(CONTROL, pspoll); - ADJUST(OTHER_BSS, other_bss); - -#undef ADJUST -} - -/* - * NOTE: Be very careful when changing this function, it must NOT return - * an error on interface type changes that have been pre-checked, so most - * checks should be in ieee80211_check_concurrent_iface. - */ -static int ieee80211_do_open(struct net_device *dev, bool coming_up) -{ - struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); - struct ieee80211_local *local = sdata->local; - struct sta_info *sta; - u32 changed = 0; - int res; - u32 hw_reconf_flags = 0; - - switch (sdata->vif.type) { - case NL80211_IFTYPE_WDS: - if (!is_valid_ether_addr(sdata->u.wds.remote_addr)) - return -ENOLINK; - break; - case NL80211_IFTYPE_AP_VLAN: { - struct ieee80211_sub_if_data *master; - - if (!sdata->bss) - return -ENOLINK; - - list_add(&sdata->u.vlan.list, &sdata->bss->vlans); - - master = container_of(sdata->bss, - struct ieee80211_sub_if_data, u.ap); - sdata->control_port_protocol = - master->control_port_protocol; - sdata->control_port_no_encrypt = - master->control_port_no_encrypt; - break; - } - case NL80211_IFTYPE_AP: - sdata->bss = &sdata->u.ap; - break; - case NL80211_IFTYPE_MESH_POINT: - case NL80211_IFTYPE_STATION: - case NL80211_IFTYPE_MONITOR: - case NL80211_IFTYPE_ADHOC: - /* no special treatment */ - break; - case NL80211_IFTYPE_UNSPECIFIED: - case NUM_NL80211_IFTYPES: - case NL80211_IFTYPE_P2P_CLIENT: - case NL80211_IFTYPE_P2P_GO: - /* cannot happen */ - WARN_ON(1); - break; - } - - if (local->open_count == 0) { - res = drv_start(local); - if (res) - goto err_del_bss; - if (local->ops->napi_poll) - napi_enable(&local->napi); - /* we're brought up, everything changes */ - hw_reconf_flags = ~0; - ieee80211_led_radio(local, true); - ieee80211_mod_tpt_led_trig(local, - IEEE80211_TPT_LEDTRIG_FL_RADIO, 0); - } - - /* - * Copy the hopefully now-present MAC address to - * this interface, if it has the special null one. - */ - if (is_zero_ether_addr(dev->dev_addr)) { - memcpy(dev->dev_addr, - local->hw.wiphy->perm_addr, - ETH_ALEN); - memcpy(dev->perm_addr, dev->dev_addr, ETH_ALEN); - - if (!is_valid_ether_addr(dev->dev_addr)) { - if (!local->open_count) - drv_stop(local); - return -EADDRNOTAVAIL; - } - } - - switch (sdata->vif.type) { - case NL80211_IFTYPE_AP_VLAN: - /* no need to tell driver */ - break; - case NL80211_IFTYPE_MONITOR: - if (sdata->u.mntr_flags & MONITOR_FLAG_COOK_FRAMES) { - local->cooked_mntrs++; - break; - } - - /* must be before the call to ieee80211_configure_filter */ - local->monitors++; - if (local->monitors == 1) { - local->hw.conf.flags |= IEEE80211_CONF_MONITOR; - hw_reconf_flags |= IEEE80211_CONF_CHANGE_MONITOR; - } - - ieee80211_adjust_monitor_flags(sdata, 1); - ieee80211_configure_filter(local); - - netif_carrier_on(dev); - break; - default: - if (coming_up) { - res = drv_add_interface(local, sdata); - if (res) - goto err_stop; - } - - if (sdata->vif.type == NL80211_IFTYPE_AP) { - local->fif_pspoll++; - local->fif_probe_req++; - - ieee80211_configure_filter(local); - } else if (sdata->vif.type == NL80211_IFTYPE_ADHOC) { - local->fif_probe_req++; - } - - changed |= ieee80211_reset_erp_info(sdata); - ieee80211_bss_info_change_notify(sdata, changed); - - /* - * [PLATA] we should still check that the driver supports the OCBMode... - */ - //if (sdata->vif.type == NL80211_IFTYPE_STATION || - // (sdata->vif.type == NL80211_IFTYPE_ADHOC) && ((local->hw->wiphy.dot11OCBActivated == 0) || !(local->hw.flags & IEEE80211_HW_DOT11OCB_SUPPORTED))) - if ((sdata->vif.type == NL80211_IFTYPE_STATION)||((sdata->vif.type == NL80211_IFTYPE_ADHOC)&&(local->hw.wiphy->dot11OCBActivated==0))) - netif_carrier_off(dev); - else - netif_carrier_on(dev); - - /* - * set default queue parameters so drivers don't - * need to initialise the hardware if the hardware - * doesn't start up with sane defaults - */ - ieee80211_set_wmm_default(sdata, true); - } - - set_bit(SDATA_STATE_RUNNING, &sdata->state); - - if (sdata->vif.type == NL80211_IFTYPE_WDS) { - /* Create STA entry for the WDS peer */ - sta = sta_info_alloc(sdata, sdata->u.wds.remote_addr, - GFP_KERNEL); - if (!sta) { - res = -ENOMEM; - goto err_del_interface; - } - - sta_info_pre_move_state(sta, IEEE80211_STA_AUTH); - sta_info_pre_move_state(sta, IEEE80211_STA_ASSOC); - sta_info_pre_move_state(sta, IEEE80211_STA_AUTHORIZED); - - res = sta_info_insert(sta); - if (res) { - /* STA has been freed */ - goto err_del_interface; - } - - rate_control_rate_init(sta); - } - - /* - * set_multicast_list will be invoked by the networking core - * which will check whether any increments here were done in - * error and sync them down to the hardware as filter flags. - */ - if (sdata->flags & IEEE80211_SDATA_ALLMULTI) - atomic_inc(&local->iff_allmultis); - - if (sdata->flags & IEEE80211_SDATA_PROMISC) - atomic_inc(&local->iff_promiscs); - - mutex_lock(&local->mtx); - hw_reconf_flags |= __ieee80211_recalc_idle(local); - mutex_unlock(&local->mtx); - - if (coming_up) - local->open_count++; - - if (hw_reconf_flags) - ieee80211_hw_config(local, hw_reconf_flags); - - ieee80211_recalc_ps(local, -1); - - netif_tx_start_all_queues(dev); - - return 0; - err_del_interface: - drv_remove_interface(local, sdata); - err_stop: - if (!local->open_count) - drv_stop(local); - err_del_bss: - sdata->bss = NULL; - if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN) - list_del(&sdata->u.vlan.list); - clear_bit(SDATA_STATE_RUNNING, &sdata->state); - return res; -} - -static int ieee80211_open(struct net_device *dev) -{ - struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); - int err; - - /* fail early if user set an invalid address */ - if (!is_valid_ether_addr(dev->dev_addr)) - return -EADDRNOTAVAIL; - - err = ieee80211_check_concurrent_iface(sdata, sdata->vif.type); - if (err) - return err; - - return ieee80211_do_open(dev, true); -} - -static void ieee80211_do_stop(struct ieee80211_sub_if_data *sdata, - bool going_down) -{ - struct ieee80211_local *local = sdata->local; - unsigned long flags; - struct sk_buff *skb, *tmp; - u32 hw_reconf_flags = 0; - int i; - enum nl80211_channel_type orig_ct; - - clear_bit(SDATA_STATE_RUNNING, &sdata->state); - - if (local->scan_sdata == sdata) - ieee80211_scan_cancel(local); - - /* - * Stop TX on this interface first. - */ - netif_tx_stop_all_queues(sdata->dev); - - /* - * Purge work for this interface. - */ - ieee80211_work_purge(sdata); - - /* - * Remove all stations associated with this interface. - * - * This must be done before calling ops->remove_interface() - * because otherwise we can later invoke ops->sta_notify() - * whenever the STAs are removed, and that invalidates driver - * assumptions about always getting a vif pointer that is valid - * (because if we remove a STA after ops->remove_interface() - * the driver will have removed the vif info already!) - * - * This is relevant only in AP, WDS and mesh modes, since in - * all other modes we've already removed all stations when - * disconnecting etc. - */ - sta_info_flush(local, sdata); - - /* - * Don't count this interface for promisc/allmulti while it - * is down. dev_mc_unsync() will invoke set_multicast_list - * on the master interface which will sync these down to the - * hardware as filter flags. - */ - if (sdata->flags & IEEE80211_SDATA_ALLMULTI) - atomic_dec(&local->iff_allmultis); - - if (sdata->flags & IEEE80211_SDATA_PROMISC) - atomic_dec(&local->iff_promiscs); - - if (sdata->vif.type == NL80211_IFTYPE_AP) { - local->fif_pspoll--; - local->fif_probe_req--; - } else if (sdata->vif.type == NL80211_IFTYPE_ADHOC) { - local->fif_probe_req--; - } - - netif_addr_lock_bh(sdata->dev); - spin_lock_bh(&local->filter_lock); -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35)) - __hw_addr_unsync(&local->mc_list, &sdata->dev->mc, - sdata->dev->addr_len); -#else - __dev_addr_unsync(&local->mc_list, &local->mc_count, - &sdata->dev->mc_list, &sdata->dev->mc_count); -#endif - spin_unlock_bh(&local->filter_lock); - netif_addr_unlock_bh(sdata->dev); - - ieee80211_configure_filter(local); - - del_timer_sync(&local->dynamic_ps_timer); - cancel_work_sync(&local->dynamic_ps_enable_work); - - /* APs need special treatment */ - if (sdata->vif.type == NL80211_IFTYPE_AP) { - struct ieee80211_sub_if_data *vlan, *tmpsdata; - struct beacon_data *old_beacon = - rtnl_dereference(sdata->u.ap.beacon); - struct sk_buff *old_probe_resp = - rtnl_dereference(sdata->u.ap.probe_resp); - - /* sdata_running will return false, so this will disable */ - ieee80211_bss_info_change_notify(sdata, - BSS_CHANGED_BEACON_ENABLED); - - /* remove beacon and probe response */ - RCU_INIT_POINTER(sdata->u.ap.beacon, NULL); - RCU_INIT_POINTER(sdata->u.ap.probe_resp, NULL); - synchronize_rcu(); - kfree(old_beacon); - kfree_skb(old_probe_resp); - - /* down all dependent devices, that is VLANs */ - list_for_each_entry_safe(vlan, tmpsdata, &sdata->u.ap.vlans, - u.vlan.list) - dev_close(vlan->dev); - WARN_ON(!list_empty(&sdata->u.ap.vlans)); - - /* free all potentially still buffered bcast frames */ - local->total_ps_buffered -= skb_queue_len(&sdata->u.ap.ps_bc_buf); - skb_queue_purge(&sdata->u.ap.ps_bc_buf); - } - - if (going_down) - local->open_count--; - - switch (sdata->vif.type) { - case NL80211_IFTYPE_AP_VLAN: - list_del(&sdata->u.vlan.list); - /* no need to tell driver */ - break; - case NL80211_IFTYPE_MONITOR: - if (sdata->u.mntr_flags & MONITOR_FLAG_COOK_FRAMES) { - local->cooked_mntrs--; - break; - } - - local->monitors--; - if (local->monitors == 0) { - local->hw.conf.flags &= ~IEEE80211_CONF_MONITOR; - hw_reconf_flags |= IEEE80211_CONF_CHANGE_MONITOR; - } - - ieee80211_adjust_monitor_flags(sdata, -1); - ieee80211_configure_filter(local); - break; - default: - flush_work(&sdata->work); - /* - * When we get here, the interface is marked down. - * Call synchronize_rcu() to wait for the RX path - * should it be using the interface and enqueuing - * frames at this very time on another CPU. - */ - synchronize_rcu(); - skb_queue_purge(&sdata->skb_queue); - - /* - * Disable beaconing here for mesh only, AP and IBSS - * are already taken care of. - */ - if (sdata->vif.type == NL80211_IFTYPE_MESH_POINT) - ieee80211_bss_info_change_notify(sdata, - BSS_CHANGED_BEACON_ENABLED); - - /* - * Free all remaining keys, there shouldn't be any, - * except maybe group keys in AP more or WDS? - */ - ieee80211_free_keys(sdata); - - if (going_down) - drv_remove_interface(local, sdata); - } - - sdata->bss = NULL; - - mutex_lock(&local->mtx); - hw_reconf_flags |= __ieee80211_recalc_idle(local); - mutex_unlock(&local->mtx); - - ieee80211_recalc_ps(local, -1); - - if (local->open_count == 0) { - if (local->ops->napi_poll) - napi_disable(&local->napi); - ieee80211_clear_tx_pending(local); - ieee80211_stop_device(local); - - /* no reconfiguring after stop! */ - hw_reconf_flags = 0; - } - - /* Re-calculate channel-type, in case there are multiple vifs - * on different channel types. - */ - orig_ct = local->_oper_channel_type; - ieee80211_set_channel_type(local, NULL, NL80211_CHAN_NO_HT); - - /* do after stop to avoid reconfiguring when we stop anyway */ - if (hw_reconf_flags || (orig_ct != local->_oper_channel_type)) - ieee80211_hw_config(local, hw_reconf_flags); - - spin_lock_irqsave(&local->queue_stop_reason_lock, flags); - for (i = 0; i < IEEE80211_MAX_QUEUES; i++) { - skb_queue_walk_safe(&local->pending[i], skb, tmp) { - struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb); - if (info->control.vif == &sdata->vif) { - __skb_unlink(skb, &local->pending[i]); - dev_kfree_skb_irq(skb); - } - } - } - spin_unlock_irqrestore(&local->queue_stop_reason_lock, flags); -} - -static int ieee80211_stop(struct net_device *dev) -{ - struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); - - ieee80211_do_stop(sdata, true); - - return 0; -} - -static void ieee80211_set_multicast_list(struct net_device *dev) -{ - struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); - struct ieee80211_local *local = sdata->local; - int allmulti, promisc, sdata_allmulti, sdata_promisc; - - allmulti = !!(dev->flags & IFF_ALLMULTI); - promisc = !!(dev->flags & IFF_PROMISC); - sdata_allmulti = !!(sdata->flags & IEEE80211_SDATA_ALLMULTI); - sdata_promisc = !!(sdata->flags & IEEE80211_SDATA_PROMISC); - - if (allmulti != sdata_allmulti) { - if (dev->flags & IFF_ALLMULTI) - atomic_inc(&local->iff_allmultis); - else - atomic_dec(&local->iff_allmultis); - sdata->flags ^= IEEE80211_SDATA_ALLMULTI; - } - - if (promisc != sdata_promisc) { - if (dev->flags & IFF_PROMISC) - atomic_inc(&local->iff_promiscs); - else - atomic_dec(&local->iff_promiscs); - sdata->flags ^= IEEE80211_SDATA_PROMISC; - } - spin_lock_bh(&local->filter_lock); -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35)) - __hw_addr_sync(&local->mc_list, &dev->mc, dev->addr_len); -#else - __dev_addr_sync(&local->mc_list, &local->mc_count, - &dev->mc_list, &dev->mc_count); -#endif - spin_unlock_bh(&local->filter_lock); - ieee80211_queue_work(&local->hw, &local->reconfig_filter); -} - -/* - * Called when the netdev is removed or, by the code below, before - * the interface type changes. - */ -static void ieee80211_teardown_sdata(struct net_device *dev) -{ - struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); - struct ieee80211_local *local = sdata->local; - int flushed; - int i; - - /* free extra data */ - ieee80211_free_keys(sdata); - - ieee80211_debugfs_remove_netdev(sdata); - - for (i = 0; i < IEEE80211_FRAGMENT_MAX; i++) - __skb_queue_purge(&sdata->fragments[i].skb_list); - sdata->fragment_next = 0; - - if (ieee80211_vif_is_mesh(&sdata->vif)) - mesh_rmc_free(sdata); - else if (sdata->vif.type == NL80211_IFTYPE_STATION) - ieee80211_mgd_teardown(sdata); - - flushed = sta_info_flush(local, sdata); - WARN_ON(flushed); -} - -static u16 ieee80211_netdev_select_queue(struct net_device *dev, - struct sk_buff *skb) -{ - return ieee80211_select_queue(IEEE80211_DEV_TO_SUB_IF(dev), skb); -} - -static const struct net_device_ops ieee80211_dataif_ops = { - .ndo_open = ieee80211_open, - .ndo_stop = ieee80211_stop, - .ndo_uninit = ieee80211_teardown_sdata, - .ndo_start_xmit = ieee80211_subif_start_xmit, - .ndo_set_rx_mode = ieee80211_set_multicast_list, - .ndo_change_mtu = ieee80211_change_mtu, - .ndo_set_mac_address = ieee80211_change_mac, - .ndo_select_queue = ieee80211_netdev_select_queue, -}; - -static u16 ieee80211_monitor_select_queue(struct net_device *dev, - struct sk_buff *skb) -{ - struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); - struct ieee80211_local *local = sdata->local; - struct ieee80211_hdr *hdr; - struct ieee80211_radiotap_header *rtap = (void *)skb->data; - - if (local->hw.queues < 4) - return 0; - - if (skb->len < 4 || - skb->len < le16_to_cpu(rtap->it_len) + 2 /* frame control */) - return 0; /* doesn't matter, frame will be dropped */ - - hdr = (void *)((u8 *)skb->data + le16_to_cpu(rtap->it_len)); - - return ieee80211_select_queue_80211(local, skb, hdr); -} - -static const struct net_device_ops ieee80211_monitorif_ops = { - .ndo_open = ieee80211_open, - .ndo_stop = ieee80211_stop, - .ndo_uninit = ieee80211_teardown_sdata, - .ndo_start_xmit = ieee80211_monitor_start_xmit, - .ndo_set_rx_mode = ieee80211_set_multicast_list, - .ndo_change_mtu = ieee80211_change_mtu, - .ndo_set_mac_address = eth_mac_addr, - .ndo_select_queue = ieee80211_monitor_select_queue, -}; - -static void ieee80211_if_setup(struct net_device *dev) -{ - ether_setup(dev); - dev->priv_flags &= ~IFF_TX_SKB_SHARING; - netdev_attach_ops(dev, &ieee80211_dataif_ops); -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,29)) - /* Do we need this ? */ - /* we will validate the address ourselves in ->open */ - dev->validate_addr = NULL; -#endif - dev->destructor = free_netdev; -} - -static void ieee80211_iface_work(struct work_struct *work) -{ - struct ieee80211_sub_if_data *sdata = - container_of(work, struct ieee80211_sub_if_data, work); - struct ieee80211_local *local = sdata->local; - struct sk_buff *skb; - struct sta_info *sta; - struct ieee80211_ra_tid *ra_tid; - - if (!ieee80211_sdata_running(sdata)) - return; - - if (local->scanning) - return; - - /* - * ieee80211_queue_work() should have picked up most cases, - * here we'll pick the rest. - */ - if (WARN(local->suspended, - "interface work scheduled while going to suspend\n")) - return; - - /* first process frames */ - while ((skb = skb_dequeue(&sdata->skb_queue))) { - struct ieee80211_mgmt *mgmt = (void *)skb->data; - - if (skb->pkt_type == IEEE80211_SDATA_QUEUE_AGG_START) { - ra_tid = (void *)&skb->cb; - ieee80211_start_tx_ba_cb(&sdata->vif, ra_tid->ra, - ra_tid->tid); - } else if (skb->pkt_type == IEEE80211_SDATA_QUEUE_AGG_STOP) { - ra_tid = (void *)&skb->cb; - ieee80211_stop_tx_ba_cb(&sdata->vif, ra_tid->ra, - ra_tid->tid); - } else if (ieee80211_is_action(mgmt->frame_control) && - mgmt->u.action.category == WLAN_CATEGORY_BACK) { - int len = skb->len; - - mutex_lock(&local->sta_mtx); - sta = sta_info_get_bss(sdata, mgmt->sa); - if (sta) { - switch (mgmt->u.action.u.addba_req.action_code) { - case WLAN_ACTION_ADDBA_REQ: - ieee80211_process_addba_request( - local, sta, mgmt, len); - break; - case WLAN_ACTION_ADDBA_RESP: - ieee80211_process_addba_resp(local, sta, - mgmt, len); - break; - case WLAN_ACTION_DELBA: - ieee80211_process_delba(sdata, sta, - mgmt, len); - break; - default: - WARN_ON(1); - break; - } - } - mutex_unlock(&local->sta_mtx); - } else if (ieee80211_is_data_qos(mgmt->frame_control)) { - struct ieee80211_hdr *hdr = (void *)mgmt; - /* - * So the frame isn't mgmt, but frame_control - * is at the right place anyway, of course, so - * the if statement is correct. - * - * Warn if we have other data frame types here, - * they must not get here. - */ - WARN_ON(hdr->frame_control & - cpu_to_le16(IEEE80211_STYPE_NULLFUNC)); - WARN_ON(!(hdr->seq_ctrl & - cpu_to_le16(IEEE80211_SCTL_FRAG))); - /* - * This was a fragment of a frame, received while - * a block-ack session was active. That cannot be - * right, so terminate the session. - */ - mutex_lock(&local->sta_mtx); - sta = sta_info_get_bss(sdata, mgmt->sa); - if (sta) { - u16 tid = *ieee80211_get_qos_ctl(hdr) & - IEEE80211_QOS_CTL_TID_MASK; - - __ieee80211_stop_rx_ba_session( - sta, tid, WLAN_BACK_RECIPIENT, - WLAN_REASON_QSTA_REQUIRE_SETUP, - true); - } - mutex_unlock(&local->sta_mtx); - } else switch (sdata->vif.type) { - case NL80211_IFTYPE_STATION: - ieee80211_sta_rx_queued_mgmt(sdata, skb); - break; - case NL80211_IFTYPE_ADHOC: - ieee80211_ibss_rx_queued_mgmt(sdata, skb); - break; - case NL80211_IFTYPE_MESH_POINT: - if (!ieee80211_vif_is_mesh(&sdata->vif)) - break; - ieee80211_mesh_rx_queued_mgmt(sdata, skb); - break; - default: - WARN(1, "frame for unexpected interface type"); - break; - } - - kfree_skb(skb); - } - - /* then other type-dependent work */ - switch (sdata->vif.type) { - case NL80211_IFTYPE_STATION: - ieee80211_sta_work(sdata); - break; - case NL80211_IFTYPE_ADHOC: - /* - * [PLATA] std work operation for the mounted ADHOC interface. We bypass it if OCB is activated - */ - if ((local->hw.wiphy->dot11OCBActivated == 0) || !(local->hw.flags & IEEE80211_HW_DOT11OCB_SUPPORTED)) - ieee80211_ibss_work(sdata); - break; - case NL80211_IFTYPE_MESH_POINT: - if (!ieee80211_vif_is_mesh(&sdata->vif)) - break; - ieee80211_mesh_work(sdata); - break; - default: - break; - } -} - - -/* - * Helper function to initialise an interface to a specific type. - */ -static void ieee80211_setup_sdata(struct ieee80211_sub_if_data *sdata, - enum nl80211_iftype type) -{ - /* clear type-dependent union */ - memset(&sdata->u, 0, sizeof(sdata->u)); - - /* and set some type-dependent values */ - sdata->vif.type = type; - sdata->vif.p2p = false; - netdev_attach_ops(sdata->dev, &ieee80211_dataif_ops); - sdata->wdev.iftype = type; - - sdata->control_port_protocol = cpu_to_be16(ETH_P_PAE); - sdata->control_port_no_encrypt = false; - - sdata->noack_map = 0; - - /* only monitor differs */ - sdata->dev->type = ARPHRD_ETHER; - - skb_queue_head_init(&sdata->skb_queue); - INIT_WORK(&sdata->work, ieee80211_iface_work); - - switch (type) { - case NL80211_IFTYPE_P2P_GO: - type = NL80211_IFTYPE_AP; - sdata->vif.type = type; - sdata->vif.p2p = true; - /* fall through */ - case NL80211_IFTYPE_AP: - skb_queue_head_init(&sdata->u.ap.ps_bc_buf); - INIT_LIST_HEAD(&sdata->u.ap.vlans); - break; - case NL80211_IFTYPE_P2P_CLIENT: - type = NL80211_IFTYPE_STATION; - sdata->vif.type = type; - sdata->vif.p2p = true; - /* fall through */ - case NL80211_IFTYPE_STATION: - ieee80211_sta_setup_sdata(sdata); - break; - case NL80211_IFTYPE_ADHOC: - ieee80211_ibss_setup_sdata(sdata); - break; - case NL80211_IFTYPE_MESH_POINT: - if (ieee80211_vif_is_mesh(&sdata->vif)) - ieee80211_mesh_init_sdata(sdata); - break; - case NL80211_IFTYPE_MONITOR: - sdata->dev->type = ARPHRD_IEEE80211_RADIOTAP; - netdev_attach_ops(sdata->dev, &ieee80211_monitorif_ops); - sdata->u.mntr_flags = MONITOR_FLAG_CONTROL | - MONITOR_FLAG_OTHER_BSS; - break; - case NL80211_IFTYPE_WDS: - case NL80211_IFTYPE_AP_VLAN: - break; - case NL80211_IFTYPE_UNSPECIFIED: - case NUM_NL80211_IFTYPES: - BUG(); - break; - } - - ieee80211_debugfs_add_netdev(sdata); -} - -static int ieee80211_runtime_change_iftype(struct ieee80211_sub_if_data *sdata, - enum nl80211_iftype type) -{ - struct ieee80211_local *local = sdata->local; - int ret, err; - enum nl80211_iftype internal_type = type; - bool p2p = false; - - ASSERT_RTNL(); - - if (!local->ops->change_interface) - return -EBUSY; - - switch (sdata->vif.type) { - case NL80211_IFTYPE_AP: - case NL80211_IFTYPE_STATION: - case NL80211_IFTYPE_ADHOC: - /* - * Could maybe also all others here? - * Just not sure how that interacts - * with the RX/config path e.g. for - * mesh. - */ - break; - default: - return -EBUSY; - } - - switch (type) { - case NL80211_IFTYPE_AP: - case NL80211_IFTYPE_STATION: - case NL80211_IFTYPE_ADHOC: - /* - * Could probably support everything - * but WDS here (WDS do_open can fail - * under memory pressure, which this - * code isn't prepared to handle). - */ - break; - case NL80211_IFTYPE_P2P_CLIENT: - p2p = true; - internal_type = NL80211_IFTYPE_STATION; - break; - case NL80211_IFTYPE_P2P_GO: - p2p = true; - internal_type = NL80211_IFTYPE_AP; - break; - default: - return -EBUSY; - } - - ret = ieee80211_check_concurrent_iface(sdata, internal_type); - if (ret) - return ret; - - ieee80211_do_stop(sdata, false); - - ieee80211_teardown_sdata(sdata->dev); - - ret = drv_change_interface(local, sdata, internal_type, p2p); - if (ret) - type = sdata->vif.type; - - ieee80211_setup_sdata(sdata, type); - - err = ieee80211_do_open(sdata->dev, false); - WARN(err, "type change: do_open returned %d", err); - - return ret; -} - -int ieee80211_if_change_type(struct ieee80211_sub_if_data *sdata, - enum nl80211_iftype type) -{ - int ret; - - ASSERT_RTNL(); - - if (type == ieee80211_vif_type_p2p(&sdata->vif)) - return 0; - - /* Setting ad-hoc mode on non-IBSS channel is not supported. */ - if (sdata->local->oper_channel->flags & IEEE80211_CHAN_NO_IBSS && - type == NL80211_IFTYPE_ADHOC) - return -EOPNOTSUPP; - - if (ieee80211_sdata_running(sdata)) { - ret = ieee80211_runtime_change_iftype(sdata, type); - if (ret) - return ret; - } else { - /* Purge and reset type-dependent state. */ - ieee80211_teardown_sdata(sdata->dev); - ieee80211_setup_sdata(sdata, type); - } - - /* reset some values that shouldn't be kept across type changes */ - sdata->vif.bss_conf.basic_rates = - ieee80211_mandatory_rates(sdata->local, - sdata->local->hw.conf.channel->band); - sdata->drop_unencrypted = 0; - if (type == NL80211_IFTYPE_STATION) - sdata->u.mgd.use_4addr = false; - - return 0; -} - -static void ieee80211_assign_perm_addr(struct ieee80211_local *local, - struct net_device *dev, - enum nl80211_iftype type) -{ - struct ieee80211_sub_if_data *sdata; - u64 mask, start, addr, val, inc; - u8 *m; - u8 tmp_addr[ETH_ALEN]; - int i; - - /* default ... something at least */ - memcpy(dev->perm_addr, local->hw.wiphy->perm_addr, ETH_ALEN); - - if (is_zero_ether_addr(local->hw.wiphy->addr_mask) && - local->hw.wiphy->n_addresses <= 1) - return; - - - mutex_lock(&local->iflist_mtx); - - switch (type) { - case NL80211_IFTYPE_MONITOR: - /* doesn't matter */ - break; - case NL80211_IFTYPE_WDS: - case NL80211_IFTYPE_AP_VLAN: - /* match up with an AP interface */ - list_for_each_entry(sdata, &local->interfaces, list) { - if (sdata->vif.type != NL80211_IFTYPE_AP) - continue; - memcpy(dev->perm_addr, sdata->vif.addr, ETH_ALEN); - break; - } - /* keep default if no AP interface present */ - break; - default: - /* assign a new address if possible -- try n_addresses first */ - for (i = 0; i < local->hw.wiphy->n_addresses; i++) { - bool used = false; - - list_for_each_entry(sdata, &local->interfaces, list) { - if (memcmp(local->hw.wiphy->addresses[i].addr, - sdata->vif.addr, ETH_ALEN) == 0) { - used = true; - break; - } - } - - if (!used) { - memcpy(dev->perm_addr, - local->hw.wiphy->addresses[i].addr, - ETH_ALEN); - break; - } - } - - /* try mask if available */ - if (is_zero_ether_addr(local->hw.wiphy->addr_mask)) - break; - - m = local->hw.wiphy->addr_mask; - mask = ((u64)m[0] << 5*8) | ((u64)m[1] << 4*8) | - ((u64)m[2] << 3*8) | ((u64)m[3] << 2*8) | - ((u64)m[4] << 1*8) | ((u64)m[5] << 0*8); - - if (__ffs64(mask) + hweight64(mask) != fls64(mask)) { - /* not a contiguous mask ... not handled now! */ - printk(KERN_DEBUG "not contiguous\n"); - break; - } - - m = local->hw.wiphy->perm_addr; - start = ((u64)m[0] << 5*8) | ((u64)m[1] << 4*8) | - ((u64)m[2] << 3*8) | ((u64)m[3] << 2*8) | - ((u64)m[4] << 1*8) | ((u64)m[5] << 0*8); - - inc = 1ULL<<__ffs64(mask); - val = (start & mask); - addr = (start & ~mask) | (val & mask); - do { - bool used = false; - - tmp_addr[5] = addr >> 0*8; - tmp_addr[4] = addr >> 1*8; - tmp_addr[3] = addr >> 2*8; - tmp_addr[2] = addr >> 3*8; - tmp_addr[1] = addr >> 4*8; - tmp_addr[0] = addr >> 5*8; - - val += inc; - - list_for_each_entry(sdata, &local->interfaces, list) { - if (memcmp(tmp_addr, sdata->vif.addr, - ETH_ALEN) == 0) { - used = true; - break; - } - } - - if (!used) { - memcpy(dev->perm_addr, tmp_addr, ETH_ALEN); - break; - } - addr = (start & ~mask) | (val & mask); - } while (addr != start); - - break; - } - - mutex_unlock(&local->iflist_mtx); -} - -int ieee80211_if_add(struct ieee80211_local *local, const char *name, - struct net_device **new_dev, enum nl80211_iftype type, - struct vif_params *params) -{ - struct net_device *ndev; - struct ieee80211_sub_if_data *sdata = NULL; - int ret, i; - - ASSERT_RTNL(); - - ndev = alloc_netdev_mqs(sizeof(*sdata) + local->hw.vif_data_size, - name, ieee80211_if_setup, local->hw.queues, 1); - if (!ndev) - return -ENOMEM; - dev_net_set(ndev, wiphy_net(local->hw.wiphy)); - -/* This is an optimization, just ignore for older kernels */ -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,26)) - ndev->needed_headroom = local->tx_headroom + - 4*6 /* four MAC addresses */ - + 2 + 2 + 2 + 2 /* ctl, dur, seq, qos */ - + 6 /* mesh */ - + 8 /* rfc1042/bridge tunnel */ - - ETH_HLEN /* ethernet hard_header_len */ - + IEEE80211_ENCRYPT_HEADROOM; - ndev->needed_tailroom = IEEE80211_ENCRYPT_TAILROOM; -#endif - - ret = dev_alloc_name(ndev, ndev->name); - if (ret < 0) - goto fail; - - ieee80211_assign_perm_addr(local, ndev, type); - memcpy(ndev->dev_addr, ndev->perm_addr, ETH_ALEN); - SET_NETDEV_DEV(ndev, wiphy_dev(local->hw.wiphy)); - - /* don't use IEEE80211_DEV_TO_SUB_IF because it checks too much */ - sdata = netdev_priv(ndev); - ndev->ieee80211_ptr = &sdata->wdev; - memcpy(sdata->vif.addr, ndev->dev_addr, ETH_ALEN); - memcpy(sdata->name, ndev->name, IFNAMSIZ); - - /* initialise type-independent data */ - sdata->wdev.wiphy = local->hw.wiphy; - sdata->local = local; - sdata->dev = ndev; -#ifdef CONFIG_INET - sdata->arp_filter_state = true; -#endif - - for (i = 0; i < IEEE80211_FRAGMENT_MAX; i++) - skb_queue_head_init(&sdata->fragments[i].skb_list); - - INIT_LIST_HEAD(&sdata->key_list); - - for (i = 0; i < IEEE80211_NUM_BANDS; i++) { - struct ieee80211_supported_band *sband; - sband = local->hw.wiphy->bands[i]; - sdata->rc_rateidx_mask[i] = - sband ? (1 << sband->n_bitrates) - 1 : 0; - if (sband) - memcpy(sdata->rc_rateidx_mcs_mask[i], - sband->ht_cap.mcs.rx_mask, - sizeof(sdata->rc_rateidx_mcs_mask[i])); - else - memset(sdata->rc_rateidx_mcs_mask[i], 0, - sizeof(sdata->rc_rateidx_mcs_mask[i])); - } - - /* setup type-dependent data */ - ieee80211_setup_sdata(sdata, type); - - if (params) { - ndev->ieee80211_ptr->use_4addr = params->use_4addr; - if (type == NL80211_IFTYPE_STATION) - sdata->u.mgd.use_4addr = params->use_4addr; - } - - ret = register_netdevice(ndev); - if (ret) - goto fail; - - mutex_lock(&local->iflist_mtx); - list_add_tail_rcu(&sdata->list, &local->interfaces); - mutex_unlock(&local->iflist_mtx); - - if (new_dev) - *new_dev = ndev; - - return 0; - - fail: - free_netdev(ndev); - return ret; -} - -void ieee80211_if_remove(struct ieee80211_sub_if_data *sdata) -{ - ASSERT_RTNL(); - - mutex_lock(&sdata->local->iflist_mtx); - list_del_rcu(&sdata->list); - mutex_unlock(&sdata->local->iflist_mtx); - - if (ieee80211_vif_is_mesh(&sdata->vif)) - mesh_path_flush_by_iface(sdata); - - synchronize_rcu(); - unregister_netdevice(sdata->dev); -} - -/* - * Remove all interfaces, may only be called at hardware unregistration - * time because it doesn't do RCU-safe list removals. - */ -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,33)) -void ieee80211_remove_interfaces(struct ieee80211_local *local) -{ - struct ieee80211_sub_if_data *sdata, *tmp; - LIST_HEAD(unreg_list); - - ASSERT_RTNL(); - - mutex_lock(&local->iflist_mtx); - list_for_each_entry_safe(sdata, tmp, &local->interfaces, list) { - list_del(&sdata->list); - - if (ieee80211_vif_is_mesh(&sdata->vif)) - mesh_path_flush_by_iface(sdata); - - unregister_netdevice_queue(sdata->dev, &unreg_list); - } - mutex_unlock(&local->iflist_mtx); - unregister_netdevice_many(&unreg_list); - list_del(&unreg_list); -} -#else -void ieee80211_remove_interfaces(struct ieee80211_local *local) -{ - struct ieee80211_sub_if_data *sdata, *tmp; - - ASSERT_RTNL(); - - list_for_each_entry_safe(sdata, tmp, &local->interfaces, list) { - mutex_lock(&local->iflist_mtx); - list_del(&sdata->list); - mutex_unlock(&local->iflist_mtx); - - unregister_netdevice(sdata->dev); - } -} -#endif - -static u32 ieee80211_idle_off(struct ieee80211_local *local, - const char *reason) -{ - if (!(local->hw.conf.flags & IEEE80211_CONF_IDLE)) - return 0; - -#ifdef CONFIG_MAC80211_VERBOSE_DEBUG - wiphy_debug(local->hw.wiphy, "device no longer idle - %s\n", reason); -#endif - - local->hw.conf.flags &= ~IEEE80211_CONF_IDLE; - return IEEE80211_CONF_CHANGE_IDLE; -} - -static u32 ieee80211_idle_on(struct ieee80211_local *local) -{ - if (local->hw.conf.flags & IEEE80211_CONF_IDLE) - return 0; - -#ifdef CONFIG_MAC80211_VERBOSE_DEBUG - wiphy_debug(local->hw.wiphy, "device now idle\n"); -#endif - - drv_flush(local, false); - - local->hw.conf.flags |= IEEE80211_CONF_IDLE; - return IEEE80211_CONF_CHANGE_IDLE; -} - -u32 __ieee80211_recalc_idle(struct ieee80211_local *local) -{ - struct ieee80211_sub_if_data *sdata; - int count = 0; - bool working = false, scanning = false, hw_roc = false; - struct ieee80211_work *wk; - unsigned int led_trig_start = 0, led_trig_stop = 0; - -#ifdef CONFIG_PROVE_LOCKING - WARN_ON(debug_locks && !lockdep_rtnl_is_held() && - !lockdep_is_held(&local->iflist_mtx)); -#endif - lockdep_assert_held(&local->mtx); - - list_for_each_entry(sdata, &local->interfaces, list) { - if (!ieee80211_sdata_running(sdata)) { - sdata->vif.bss_conf.idle = true; - continue; - } - - sdata->old_idle = sdata->vif.bss_conf.idle; - - /* do not count disabled managed interfaces */ - if (sdata->vif.type == NL80211_IFTYPE_STATION && - !sdata->u.mgd.associated && - !sdata->u.mgd.auth_data && - !sdata->u.mgd.assoc_data) { - sdata->vif.bss_conf.idle = true; - continue; - } - /* do not count unused IBSS interfaces */ - if (sdata->vif.type == NL80211_IFTYPE_ADHOC && - !sdata->u.ibss.ssid_len) { - sdata->vif.bss_conf.idle = true; - continue; - } - /* count everything else */ - sdata->vif.bss_conf.idle = false; - count++; - } - - list_for_each_entry(wk, &local->work_list, list) { - working = true; - wk->sdata->vif.bss_conf.idle = false; - } - - if (local->scan_sdata && - !(local->hw.flags & IEEE80211_HW_SCAN_WHILE_IDLE)) { - scanning = true; - local->scan_sdata->vif.bss_conf.idle = false; - } - - if (local->hw_roc_channel) - hw_roc = true; - - list_for_each_entry(sdata, &local->interfaces, list) { - if (sdata->vif.type == NL80211_IFTYPE_MONITOR || - sdata->vif.type == NL80211_IFTYPE_AP_VLAN) - continue; - if (sdata->old_idle == sdata->vif.bss_conf.idle) - continue; - if (!ieee80211_sdata_running(sdata)) - continue; - ieee80211_bss_info_change_notify(sdata, BSS_CHANGED_IDLE); - } - - if (working || scanning || hw_roc) - led_trig_start |= IEEE80211_TPT_LEDTRIG_FL_WORK; - else - led_trig_stop |= IEEE80211_TPT_LEDTRIG_FL_WORK; - - if (count) - led_trig_start |= IEEE80211_TPT_LEDTRIG_FL_CONNECTED; - else - led_trig_stop |= IEEE80211_TPT_LEDTRIG_FL_CONNECTED; - - ieee80211_mod_tpt_led_trig(local, led_trig_start, led_trig_stop); - - if (hw_roc) - return ieee80211_idle_off(local, "hw remain-on-channel"); - if (working) - return ieee80211_idle_off(local, "working"); - if (scanning) - return ieee80211_idle_off(local, "scanning"); - if (!count) - return ieee80211_idle_on(local); - else - return ieee80211_idle_off(local, "in use"); - - return 0; -} - -void ieee80211_recalc_idle(struct ieee80211_local *local) -{ - u32 chg; - - mutex_lock(&local->iflist_mtx); - chg = __ieee80211_recalc_idle(local); - mutex_unlock(&local->iflist_mtx); - if (chg) - ieee80211_hw_config(local, chg); -} - -static int netdev_notify(struct notifier_block *nb, - unsigned long state, - void *ndev) -{ - struct net_device *dev = ndev; - struct ieee80211_sub_if_data *sdata; - - if (state != NETDEV_CHANGENAME) - return 0; - - if (!dev->ieee80211_ptr || !dev->ieee80211_ptr->wiphy) - return 0; - - if (dev->ieee80211_ptr->wiphy->privid != mac80211_wiphy_privid) - return 0; - - sdata = IEEE80211_DEV_TO_SUB_IF(dev); - - memcpy(sdata->name, dev->name, IFNAMSIZ); - - ieee80211_debugfs_rename_netdev(sdata); - return 0; -} - -static struct notifier_block mac80211_netdev_notifier = { - .notifier_call = netdev_notify, -}; - -int ieee80211_iface_init(void) -{ - return register_netdevice_notifier(&mac80211_netdev_notifier); -} - -void ieee80211_iface_exit(void) -{ - unregister_netdevice_notifier(&mac80211_netdev_notifier); -} diff --git a/openairITS/mac/DOT11/net/mac80211/key.c b/openairITS/mac/DOT11/net/mac80211/key.c deleted file mode 100644 index b4dc61464a..0000000000 --- a/openairITS/mac/DOT11/net/mac80211/key.c +++ /dev/null @@ -1,702 +0,0 @@ -/* - * Copyright 2002-2005, Instant802 Networks, Inc. - * Copyright 2005-2006, Devicescape Software, Inc. - * Copyright 2006-2007 Jiri Benc - * Copyright 2007-2008 Johannes Berg - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "ieee80211_i.h" -#include "driver-ops.h" -#include "debugfs_key.h" -#include "aes_ccm.h" -#include "aes_cmac.h" - -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,29)) -#include -#endif - -/** - * DOC: Key handling basics - * - * Key handling in mac80211 is done based on per-interface (sub_if_data) - * keys and per-station keys. Since each station belongs to an interface, - * each station key also belongs to that interface. - * - * Hardware acceleration is done on a best-effort basis for algorithms - * that are implemented in software, for each key the hardware is asked - * to enable that key for offloading but if it cannot do that the key is - * simply kept for software encryption (unless it is for an algorithm - * that isn't implemented in software). - * There is currently no way of knowing whether a key is handled in SW - * or HW except by looking into debugfs. - * - * All key management is internally protected by a mutex. Within all - * other parts of mac80211, key references are, just as STA structure - * references, protected by RCU. Note, however, that some things are - * unprotected, namely the key->sta dereferences within the hardware - * acceleration functions. This means that sta_info_destroy() must - * remove the key which waits for an RCU grace period. - */ - -static const u8 bcast_addr[ETH_ALEN] = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }; - -static void assert_key_lock(struct ieee80211_local *local) -{ - lockdep_assert_held(&local->key_mtx); -} - -static void increment_tailroom_need_count(struct ieee80211_sub_if_data *sdata) -{ - /* - * When this count is zero, SKB resizing for allocating tailroom - * for IV or MMIC is skipped. But, this check has created two race - * cases in xmit path while transiting from zero count to one: - * - * 1. SKB resize was skipped because no key was added but just before - * the xmit key is added and SW encryption kicks off. - * - * 2. SKB resize was skipped because all the keys were hw planted but - * just before xmit one of the key is deleted and SW encryption kicks - * off. - * - * In both the above case SW encryption will find not enough space for - * tailroom and exits with WARN_ON. (See WARN_ONs at wpa.c) - * - * Solution has been explained at - * http://mid.gmane.org/1308590980.4322.19.camel@jlt3.sipsolutions.net - */ - - if (!sdata->crypto_tx_tailroom_needed_cnt++) { - /* - * Flush all XMIT packets currently using HW encryption or no - * encryption at all if the count transition is from 0 -> 1. - */ - synchronize_net(); - } -} - -static int ieee80211_key_enable_hw_accel(struct ieee80211_key *key) -{ - struct ieee80211_sub_if_data *sdata; - struct sta_info *sta; - int ret; - - might_sleep(); - - if (!key->local->ops->set_key) - goto out_unsupported; - - assert_key_lock(key->local); - - sta = key->sta; - - /* - * If this is a per-STA GTK, check if it - * is supported; if not, return. - */ - if (sta && !(key->conf.flags & IEEE80211_KEY_FLAG_PAIRWISE) && - !(key->local->hw.flags & IEEE80211_HW_SUPPORTS_PER_STA_GTK)) - goto out_unsupported; - - if (sta && !sta->uploaded) - goto out_unsupported; - - sdata = key->sdata; - if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN) { - /* - * The driver doesn't know anything about VLAN interfaces. - * Hence, don't send GTKs for VLAN interfaces to the driver. - */ - if (!(key->conf.flags & IEEE80211_KEY_FLAG_PAIRWISE)) - goto out_unsupported; - } - - ret = drv_set_key(key->local, SET_KEY, sdata, - sta ? &sta->sta : NULL, &key->conf); - - if (!ret) { - key->flags |= KEY_FLAG_UPLOADED_TO_HARDWARE; - - if (!((key->conf.flags & IEEE80211_KEY_FLAG_GENERATE_MMIC) || - (key->conf.flags & IEEE80211_KEY_FLAG_GENERATE_IV) || - (key->conf.flags & IEEE80211_KEY_FLAG_PUT_IV_SPACE))) - sdata->crypto_tx_tailroom_needed_cnt--; - - WARN_ON((key->conf.flags & IEEE80211_KEY_FLAG_PUT_IV_SPACE) && - (key->conf.flags & IEEE80211_KEY_FLAG_GENERATE_IV)); - - return 0; - } - - if (ret != -ENOSPC && ret != -EOPNOTSUPP) - wiphy_err(key->local->hw.wiphy, - "failed to set key (%d, %pM) to hardware (%d)\n", - key->conf.keyidx, - sta ? sta->sta.addr : bcast_addr, ret); - - out_unsupported: - switch (key->conf.cipher) { - case WLAN_CIPHER_SUITE_WEP40: - case WLAN_CIPHER_SUITE_WEP104: - case WLAN_CIPHER_SUITE_TKIP: - case WLAN_CIPHER_SUITE_CCMP: - case WLAN_CIPHER_SUITE_AES_CMAC: - /* all of these we can do in software */ - return 0; - default: - return -EINVAL; - } -} - -static void ieee80211_key_disable_hw_accel(struct ieee80211_key *key) -{ - struct ieee80211_sub_if_data *sdata; - struct sta_info *sta; - int ret; - - might_sleep(); - - if (!key || !key->local->ops->set_key) - return; - - assert_key_lock(key->local); - - if (!(key->flags & KEY_FLAG_UPLOADED_TO_HARDWARE)) - return; - - sta = key->sta; - sdata = key->sdata; - - if (!((key->conf.flags & IEEE80211_KEY_FLAG_GENERATE_MMIC) || - (key->conf.flags & IEEE80211_KEY_FLAG_GENERATE_IV) || - (key->conf.flags & IEEE80211_KEY_FLAG_PUT_IV_SPACE))) - increment_tailroom_need_count(sdata); - - ret = drv_set_key(key->local, DISABLE_KEY, sdata, - sta ? &sta->sta : NULL, &key->conf); - - if (ret) - wiphy_err(key->local->hw.wiphy, - "failed to remove key (%d, %pM) from hardware (%d)\n", - key->conf.keyidx, - sta ? sta->sta.addr : bcast_addr, ret); - - key->flags &= ~KEY_FLAG_UPLOADED_TO_HARDWARE; -} - -void ieee80211_key_removed(struct ieee80211_key_conf *key_conf) -{ - struct ieee80211_key *key; - - key = container_of(key_conf, struct ieee80211_key, conf); - - might_sleep(); - assert_key_lock(key->local); - - key->flags &= ~KEY_FLAG_UPLOADED_TO_HARDWARE; - - /* - * Flush TX path to avoid attempts to use this key - * after this function returns. Until then, drivers - * must be prepared to handle the key. - */ - synchronize_rcu(); -} -EXPORT_SYMBOL_GPL(ieee80211_key_removed); - -static void __ieee80211_set_default_key(struct ieee80211_sub_if_data *sdata, - int idx, bool uni, bool multi) -{ - struct ieee80211_key *key = NULL; - - assert_key_lock(sdata->local); - - if (idx >= 0 && idx < NUM_DEFAULT_KEYS) - key = key_mtx_dereference(sdata->local, sdata->keys[idx]); - - if (uni) - rcu_assign_pointer(sdata->default_unicast_key, key); - if (multi) - rcu_assign_pointer(sdata->default_multicast_key, key); - - ieee80211_debugfs_key_update_default(sdata); -} - -void ieee80211_set_default_key(struct ieee80211_sub_if_data *sdata, int idx, - bool uni, bool multi) -{ - mutex_lock(&sdata->local->key_mtx); - __ieee80211_set_default_key(sdata, idx, uni, multi); - mutex_unlock(&sdata->local->key_mtx); -} - -static void -__ieee80211_set_default_mgmt_key(struct ieee80211_sub_if_data *sdata, int idx) -{ - struct ieee80211_key *key = NULL; - - assert_key_lock(sdata->local); - - if (idx >= NUM_DEFAULT_KEYS && - idx < NUM_DEFAULT_KEYS + NUM_DEFAULT_MGMT_KEYS) - key = key_mtx_dereference(sdata->local, sdata->keys[idx]); - - rcu_assign_pointer(sdata->default_mgmt_key, key); - - ieee80211_debugfs_key_update_default(sdata); -} - -void ieee80211_set_default_mgmt_key(struct ieee80211_sub_if_data *sdata, - int idx) -{ - mutex_lock(&sdata->local->key_mtx); - __ieee80211_set_default_mgmt_key(sdata, idx); - mutex_unlock(&sdata->local->key_mtx); -} - - -static void __ieee80211_key_replace(struct ieee80211_sub_if_data *sdata, - struct sta_info *sta, - bool pairwise, - struct ieee80211_key *old, - struct ieee80211_key *new) -{ - int idx; - bool defunikey, defmultikey, defmgmtkey; - - if (new) - list_add_tail(&new->list, &sdata->key_list); - - if (sta && pairwise) { - rcu_assign_pointer(sta->ptk, new); - } else if (sta) { - if (old) - idx = old->conf.keyidx; - else - idx = new->conf.keyidx; - rcu_assign_pointer(sta->gtk[idx], new); - } else { - WARN_ON(new && old && new->conf.keyidx != old->conf.keyidx); - - if (old) - idx = old->conf.keyidx; - else - idx = new->conf.keyidx; - - defunikey = old && - old == key_mtx_dereference(sdata->local, - sdata->default_unicast_key); - defmultikey = old && - old == key_mtx_dereference(sdata->local, - sdata->default_multicast_key); - defmgmtkey = old && - old == key_mtx_dereference(sdata->local, - sdata->default_mgmt_key); - - if (defunikey && !new) - __ieee80211_set_default_key(sdata, -1, true, false); - if (defmultikey && !new) - __ieee80211_set_default_key(sdata, -1, false, true); - if (defmgmtkey && !new) - __ieee80211_set_default_mgmt_key(sdata, -1); - - rcu_assign_pointer(sdata->keys[idx], new); - if (defunikey && new) - __ieee80211_set_default_key(sdata, new->conf.keyidx, - true, false); - if (defmultikey && new) - __ieee80211_set_default_key(sdata, new->conf.keyidx, - false, true); - if (defmgmtkey && new) - __ieee80211_set_default_mgmt_key(sdata, - new->conf.keyidx); - } - - if (old) - list_del(&old->list); -} - -struct ieee80211_key *ieee80211_key_alloc(u32 cipher, int idx, size_t key_len, - const u8 *key_data, - size_t seq_len, const u8 *seq) -{ - struct ieee80211_key *key; - int i, j, err; - - BUG_ON(idx < 0 || idx >= NUM_DEFAULT_KEYS + NUM_DEFAULT_MGMT_KEYS); - - key = kzalloc(sizeof(struct ieee80211_key) + key_len, GFP_KERNEL); - if (!key) - return ERR_PTR(-ENOMEM); - - /* - * Default to software encryption; we'll later upload the - * key to the hardware if possible. - */ - key->conf.flags = 0; - key->flags = 0; - - key->conf.cipher = cipher; - key->conf.keyidx = idx; - key->conf.keylen = key_len; - switch (cipher) { - case WLAN_CIPHER_SUITE_WEP40: - case WLAN_CIPHER_SUITE_WEP104: - key->conf.iv_len = WEP_IV_LEN; - key->conf.icv_len = WEP_ICV_LEN; - break; - case WLAN_CIPHER_SUITE_TKIP: - key->conf.iv_len = TKIP_IV_LEN; - key->conf.icv_len = TKIP_ICV_LEN; - if (seq) { - for (i = 0; i < NUM_RX_DATA_QUEUES; i++) { - key->u.tkip.rx[i].iv32 = - get_unaligned_le32(&seq[2]); - key->u.tkip.rx[i].iv16 = - get_unaligned_le16(seq); - } - } - spin_lock_init(&key->u.tkip.txlock); - break; - case WLAN_CIPHER_SUITE_CCMP: - key->conf.iv_len = CCMP_HDR_LEN; - key->conf.icv_len = CCMP_MIC_LEN; - if (seq) { - for (i = 0; i < NUM_RX_DATA_QUEUES + 1; i++) - for (j = 0; j < CCMP_PN_LEN; j++) - key->u.ccmp.rx_pn[i][j] = - seq[CCMP_PN_LEN - j - 1]; - } - /* - * Initialize AES key state here as an optimization so that - * it does not need to be initialized for every packet. - */ - key->u.ccmp.tfm = ieee80211_aes_key_setup_encrypt(key_data); - if (IS_ERR(key->u.ccmp.tfm)) { - err = PTR_ERR(key->u.ccmp.tfm); - kfree(key); - return ERR_PTR(err); - } - break; - case WLAN_CIPHER_SUITE_AES_CMAC: - key->conf.iv_len = 0; - key->conf.icv_len = sizeof(struct ieee80211_mmie); - if (seq) - for (j = 0; j < 6; j++) - key->u.aes_cmac.rx_pn[j] = seq[6 - j - 1]; - /* - * Initialize AES key state here as an optimization so that - * it does not need to be initialized for every packet. - */ - key->u.aes_cmac.tfm = - ieee80211_aes_cmac_key_setup(key_data); - if (IS_ERR(key->u.aes_cmac.tfm)) { - err = PTR_ERR(key->u.aes_cmac.tfm); - kfree(key); - return ERR_PTR(err); - } - break; - } - memcpy(key->conf.key, key_data, key_len); - INIT_LIST_HEAD(&key->list); - - return key; -} - -static void __ieee80211_key_destroy(struct ieee80211_key *key) -{ - if (!key) - return; - - /* - * Synchronize so the TX path can no longer be using - * this key before we free/remove it. - */ - synchronize_rcu(); - - if (key->local) - ieee80211_key_disable_hw_accel(key); - - if (key->conf.cipher == WLAN_CIPHER_SUITE_CCMP) - ieee80211_aes_key_free(key->u.ccmp.tfm); - if (key->conf.cipher == WLAN_CIPHER_SUITE_AES_CMAC) - ieee80211_aes_cmac_key_free(key->u.aes_cmac.tfm); - if (key->local) { - ieee80211_debugfs_key_remove(key); - key->sdata->crypto_tx_tailroom_needed_cnt--; - } - - kfree(key); -} - -int ieee80211_key_link(struct ieee80211_key *key, - struct ieee80211_sub_if_data *sdata, - struct sta_info *sta) -{ - struct ieee80211_key *old_key; - int idx, ret; - bool pairwise; - - BUG_ON(!sdata); - BUG_ON(!key); - - pairwise = key->conf.flags & IEEE80211_KEY_FLAG_PAIRWISE; - idx = key->conf.keyidx; - key->local = sdata->local; - key->sdata = sdata; - key->sta = sta; - - if (sta) { - /* - * some hardware cannot handle TKIP with QoS, so - * we indicate whether QoS could be in use. - */ - if (test_sta_flag(sta, WLAN_STA_WME)) - key->conf.flags |= IEEE80211_KEY_FLAG_WMM_STA; - } else { - if (sdata->vif.type == NL80211_IFTYPE_STATION) { - struct sta_info *ap; - - /* - * We're getting a sta pointer in, so must be under - * appropriate locking for sta_info_get(). - */ - - /* same here, the AP could be using QoS */ - ap = sta_info_get(key->sdata, key->sdata->u.mgd.bssid); - if (ap) { - if (test_sta_flag(ap, WLAN_STA_WME)) - key->conf.flags |= - IEEE80211_KEY_FLAG_WMM_STA; - } - } - } - - mutex_lock(&sdata->local->key_mtx); - - if (sta && pairwise) - old_key = key_mtx_dereference(sdata->local, sta->ptk); - else if (sta) - old_key = key_mtx_dereference(sdata->local, sta->gtk[idx]); - else - old_key = key_mtx_dereference(sdata->local, sdata->keys[idx]); - - increment_tailroom_need_count(sdata); - - __ieee80211_key_replace(sdata, sta, pairwise, old_key, key); - __ieee80211_key_destroy(old_key); - - ieee80211_debugfs_key_add(key); - - ret = ieee80211_key_enable_hw_accel(key); - - mutex_unlock(&sdata->local->key_mtx); - - return ret; -} - -void __ieee80211_key_free(struct ieee80211_key *key) -{ - if (!key) - return; - - /* - * Replace key with nothingness if it was ever used. - */ - if (key->sdata) - __ieee80211_key_replace(key->sdata, key->sta, - key->conf.flags & IEEE80211_KEY_FLAG_PAIRWISE, - key, NULL); - __ieee80211_key_destroy(key); -} - -void ieee80211_key_free(struct ieee80211_local *local, - struct ieee80211_key *key) -{ - mutex_lock(&local->key_mtx); - __ieee80211_key_free(key); - mutex_unlock(&local->key_mtx); -} - -void ieee80211_enable_keys(struct ieee80211_sub_if_data *sdata) -{ - struct ieee80211_key *key; - - ASSERT_RTNL(); - - if (WARN_ON(!ieee80211_sdata_running(sdata))) - return; - - mutex_lock(&sdata->local->key_mtx); - - sdata->crypto_tx_tailroom_needed_cnt = 0; - - list_for_each_entry(key, &sdata->key_list, list) { - increment_tailroom_need_count(sdata); - ieee80211_key_enable_hw_accel(key); - } - - mutex_unlock(&sdata->local->key_mtx); -} - -void ieee80211_iter_keys(struct ieee80211_hw *hw, - struct ieee80211_vif *vif, - void (*iter)(struct ieee80211_hw *hw, - struct ieee80211_vif *vif, - struct ieee80211_sta *sta, - struct ieee80211_key_conf *key, - void *data), - void *iter_data) -{ - struct ieee80211_local *local = hw_to_local(hw); - struct ieee80211_key *key; - struct ieee80211_sub_if_data *sdata; - - ASSERT_RTNL(); - - mutex_lock(&local->key_mtx); - if (vif) { - sdata = vif_to_sdata(vif); - list_for_each_entry(key, &sdata->key_list, list) - iter(hw, &sdata->vif, - key->sta ? &key->sta->sta : NULL, - &key->conf, iter_data); - } else { - list_for_each_entry(sdata, &local->interfaces, list) - list_for_each_entry(key, &sdata->key_list, list) - iter(hw, &sdata->vif, - key->sta ? &key->sta->sta : NULL, - &key->conf, iter_data); - } - mutex_unlock(&local->key_mtx); -} -EXPORT_SYMBOL(ieee80211_iter_keys); - -void ieee80211_disable_keys(struct ieee80211_sub_if_data *sdata) -{ - struct ieee80211_key *key; - - ASSERT_RTNL(); - - mutex_lock(&sdata->local->key_mtx); - - list_for_each_entry(key, &sdata->key_list, list) - ieee80211_key_disable_hw_accel(key); - - mutex_unlock(&sdata->local->key_mtx); -} - -void ieee80211_free_keys(struct ieee80211_sub_if_data *sdata) -{ - struct ieee80211_key *key, *tmp; - - mutex_lock(&sdata->local->key_mtx); - - ieee80211_debugfs_key_remove_mgmt_default(sdata); - - list_for_each_entry_safe(key, tmp, &sdata->key_list, list) - __ieee80211_key_free(key); - - ieee80211_debugfs_key_update_default(sdata); - - mutex_unlock(&sdata->local->key_mtx); -} - - -void ieee80211_gtk_rekey_notify(struct ieee80211_vif *vif, const u8 *bssid, - const u8 *replay_ctr, gfp_t gfp) -{ - struct ieee80211_sub_if_data *sdata = vif_to_sdata(vif); - - trace_api_gtk_rekey_notify(sdata, bssid, replay_ctr); - - cfg80211_gtk_rekey_notify(sdata->dev, bssid, replay_ctr, gfp); -} -EXPORT_SYMBOL_GPL(ieee80211_gtk_rekey_notify); - -void ieee80211_get_key_tx_seq(struct ieee80211_key_conf *keyconf, - struct ieee80211_key_seq *seq) -{ - struct ieee80211_key *key; - u64 pn64; - - if (WARN_ON(!(keyconf->flags & IEEE80211_KEY_FLAG_GENERATE_IV))) - return; - - key = container_of(keyconf, struct ieee80211_key, conf); - - switch (key->conf.cipher) { - case WLAN_CIPHER_SUITE_TKIP: - seq->tkip.iv32 = key->u.tkip.tx.iv32; - seq->tkip.iv16 = key->u.tkip.tx.iv16; - break; - case WLAN_CIPHER_SUITE_CCMP: - pn64 = atomic64_read(&key->u.ccmp.tx_pn); - seq->ccmp.pn[5] = pn64; - seq->ccmp.pn[4] = pn64 >> 8; - seq->ccmp.pn[3] = pn64 >> 16; - seq->ccmp.pn[2] = pn64 >> 24; - seq->ccmp.pn[1] = pn64 >> 32; - seq->ccmp.pn[0] = pn64 >> 40; - break; - case WLAN_CIPHER_SUITE_AES_CMAC: - pn64 = atomic64_read(&key->u.aes_cmac.tx_pn); - seq->ccmp.pn[5] = pn64; - seq->ccmp.pn[4] = pn64 >> 8; - seq->ccmp.pn[3] = pn64 >> 16; - seq->ccmp.pn[2] = pn64 >> 24; - seq->ccmp.pn[1] = pn64 >> 32; - seq->ccmp.pn[0] = pn64 >> 40; - break; - default: - WARN_ON(1); - } -} -EXPORT_SYMBOL(ieee80211_get_key_tx_seq); - -void ieee80211_get_key_rx_seq(struct ieee80211_key_conf *keyconf, - int tid, struct ieee80211_key_seq *seq) -{ - struct ieee80211_key *key; - const u8 *pn; - - key = container_of(keyconf, struct ieee80211_key, conf); - - switch (key->conf.cipher) { - case WLAN_CIPHER_SUITE_TKIP: - if (WARN_ON(tid < 0 || tid >= NUM_RX_DATA_QUEUES)) - return; - seq->tkip.iv32 = key->u.tkip.rx[tid].iv32; - seq->tkip.iv16 = key->u.tkip.rx[tid].iv16; - break; - case WLAN_CIPHER_SUITE_CCMP: - if (WARN_ON(tid < -1 || tid >= NUM_RX_DATA_QUEUES)) - return; - if (tid < 0) - pn = key->u.ccmp.rx_pn[NUM_RX_DATA_QUEUES]; - else - pn = key->u.ccmp.rx_pn[tid]; - memcpy(seq->ccmp.pn, pn, CCMP_PN_LEN); - break; - case WLAN_CIPHER_SUITE_AES_CMAC: - if (WARN_ON(tid != 0)) - return; - pn = key->u.aes_cmac.rx_pn; - memcpy(seq->aes_cmac.pn, pn, CMAC_PN_LEN); - break; - } -} -EXPORT_SYMBOL(ieee80211_get_key_rx_seq); diff --git a/openairITS/mac/DOT11/net/mac80211/key.h b/openairITS/mac/DOT11/net/mac80211/key.h deleted file mode 100644 index 7d4e31f037..0000000000 --- a/openairITS/mac/DOT11/net/mac80211/key.h +++ /dev/null @@ -1,150 +0,0 @@ -/* - * Copyright 2002-2004, Instant802 Networks, Inc. - * Copyright 2005, Devicescape Software, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - */ - -#ifndef IEEE80211_KEY_H -#define IEEE80211_KEY_H - -#include -#include -#include -#include -#include - -#define NUM_DEFAULT_KEYS 4 -#define NUM_DEFAULT_MGMT_KEYS 2 - -#define WEP_IV_LEN 4 -#define WEP_ICV_LEN 4 -#define ALG_CCMP_KEY_LEN 16 -#define CCMP_HDR_LEN 8 -#define CCMP_MIC_LEN 8 -#define CCMP_TK_LEN 16 -#define CCMP_PN_LEN 6 -#define TKIP_IV_LEN 8 -#define TKIP_ICV_LEN 4 -#define CMAC_PN_LEN 6 - -#define NUM_RX_DATA_QUEUES 16 - -struct ieee80211_local; -struct ieee80211_sub_if_data; -struct sta_info; - -/** - * enum ieee80211_internal_key_flags - internal key flags - * - * @KEY_FLAG_UPLOADED_TO_HARDWARE: Indicates that this key is present - * in the hardware for TX crypto hardware acceleration. - * @KEY_FLAG_TAINTED: Key is tainted and packets should be dropped. - */ -enum ieee80211_internal_key_flags { - KEY_FLAG_UPLOADED_TO_HARDWARE = BIT(0), - KEY_FLAG_TAINTED = BIT(1), -}; - -enum ieee80211_internal_tkip_state { - TKIP_STATE_NOT_INIT, - TKIP_STATE_PHASE1_DONE, - TKIP_STATE_PHASE1_HW_UPLOADED, -}; - -struct tkip_ctx { - u32 iv32; /* current iv32 */ - u16 iv16; /* current iv16 */ - u16 p1k[5]; /* p1k cache */ - u32 p1k_iv32; /* iv32 for which p1k computed */ - enum ieee80211_internal_tkip_state state; -}; - -struct ieee80211_key { - struct ieee80211_local *local; - struct ieee80211_sub_if_data *sdata; - struct sta_info *sta; - - /* for sdata list */ - struct list_head list; - - /* protected by key mutex */ - unsigned int flags; - - union { - struct { - /* protects tx context */ - spinlock_t txlock; - - /* last used TSC */ - struct tkip_ctx tx; - - /* last received RSC */ - struct tkip_ctx rx[NUM_RX_DATA_QUEUES]; - } tkip; - struct { - atomic64_t tx_pn; - /* - * Last received packet number. The first - * NUM_RX_DATA_QUEUES counters are used with Data - * frames and the last counter is used with Robust - * Management frames. - */ - u8 rx_pn[NUM_RX_DATA_QUEUES + 1][CCMP_PN_LEN]; - struct crypto_cipher *tfm; - u32 replays; /* dot11RSNAStatsCCMPReplays */ - } ccmp; - struct { - atomic64_t tx_pn; - u8 rx_pn[CMAC_PN_LEN]; - struct crypto_cipher *tfm; - u32 replays; /* dot11RSNAStatsCMACReplays */ - u32 icverrors; /* dot11RSNAStatsCMACICVErrors */ - } aes_cmac; - } u; - - /* number of times this key has been used */ - int tx_rx_count; - -#ifdef CONFIG_MAC80211_DEBUGFS - struct { - struct dentry *stalink; - struct dentry *dir; - int cnt; - } debugfs; -#endif - - /* - * key config, must be last because it contains key - * material as variable length member - */ - struct ieee80211_key_conf conf; -}; - -struct ieee80211_key *ieee80211_key_alloc(u32 cipher, int idx, size_t key_len, - const u8 *key_data, - size_t seq_len, const u8 *seq); -/* - * Insert a key into data structures (sdata, sta if necessary) - * to make it used, free old key. - */ -int __must_check ieee80211_key_link(struct ieee80211_key *key, - struct ieee80211_sub_if_data *sdata, - struct sta_info *sta); -void __ieee80211_key_free(struct ieee80211_key *key); -void ieee80211_key_free(struct ieee80211_local *local, - struct ieee80211_key *key); -void ieee80211_set_default_key(struct ieee80211_sub_if_data *sdata, int idx, - bool uni, bool multi); -void ieee80211_set_default_mgmt_key(struct ieee80211_sub_if_data *sdata, - int idx); -void ieee80211_free_keys(struct ieee80211_sub_if_data *sdata); -void ieee80211_enable_keys(struct ieee80211_sub_if_data *sdata); -void ieee80211_disable_keys(struct ieee80211_sub_if_data *sdata); - -#define key_mtx_dereference(local, ref) \ - rcu_dereference_protected(ref, lockdep_is_held(&((local)->key_mtx))) - -#endif /* IEEE80211_KEY_H */ diff --git a/openairITS/mac/DOT11/net/mac80211/led.c b/openairITS/mac/DOT11/net/mac80211/led.c deleted file mode 100644 index 1bf7903496..0000000000 --- a/openairITS/mac/DOT11/net/mac80211/led.c +++ /dev/null @@ -1,309 +0,0 @@ -/* - * Copyright 2006, Johannes Berg - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - */ - -/* just for IFNAMSIZ */ -#include -#include -#include -#include "led.h" - -void ieee80211_led_rx(struct ieee80211_local *local) -{ - if (unlikely(!local->rx_led)) - return; - if (local->rx_led_counter++ % 2 == 0) - led_trigger_event(local->rx_led, LED_OFF); - else - led_trigger_event(local->rx_led, LED_FULL); -} - -/* q is 1 if a packet was enqueued, 0 if it has been transmitted */ -void ieee80211_led_tx(struct ieee80211_local *local, int q) -{ - if (unlikely(!local->tx_led)) - return; - /* not sure how this is supposed to work ... */ - local->tx_led_counter += 2*q-1; - if (local->tx_led_counter % 2 == 0) - led_trigger_event(local->tx_led, LED_OFF); - else - led_trigger_event(local->tx_led, LED_FULL); -} - -void ieee80211_led_assoc(struct ieee80211_local *local, bool associated) -{ - if (unlikely(!local->assoc_led)) - return; - if (associated) - led_trigger_event(local->assoc_led, LED_FULL); - else - led_trigger_event(local->assoc_led, LED_OFF); -} - -void ieee80211_led_radio(struct ieee80211_local *local, bool enabled) -{ - if (unlikely(!local->radio_led)) - return; - if (enabled) - led_trigger_event(local->radio_led, LED_FULL); - else - led_trigger_event(local->radio_led, LED_OFF); -} - -void ieee80211_led_names(struct ieee80211_local *local) -{ - snprintf(local->rx_led_name, sizeof(local->rx_led_name), - "%srx", wiphy_name(local->hw.wiphy)); - snprintf(local->tx_led_name, sizeof(local->tx_led_name), - "%stx", wiphy_name(local->hw.wiphy)); - snprintf(local->assoc_led_name, sizeof(local->assoc_led_name), - "%sassoc", wiphy_name(local->hw.wiphy)); - snprintf(local->radio_led_name, sizeof(local->radio_led_name), - "%sradio", wiphy_name(local->hw.wiphy)); -} - -void ieee80211_led_init(struct ieee80211_local *local) -{ - local->rx_led = kzalloc(sizeof(struct led_trigger), GFP_KERNEL); - if (local->rx_led) { - local->rx_led->name = local->rx_led_name; - if (led_trigger_register(local->rx_led)) { - kfree(local->rx_led); - local->rx_led = NULL; - } - } - - local->tx_led = kzalloc(sizeof(struct led_trigger), GFP_KERNEL); - if (local->tx_led) { - local->tx_led->name = local->tx_led_name; - if (led_trigger_register(local->tx_led)) { - kfree(local->tx_led); - local->tx_led = NULL; - } - } - - local->assoc_led = kzalloc(sizeof(struct led_trigger), GFP_KERNEL); - if (local->assoc_led) { - local->assoc_led->name = local->assoc_led_name; - if (led_trigger_register(local->assoc_led)) { - kfree(local->assoc_led); - local->assoc_led = NULL; - } - } - - local->radio_led = kzalloc(sizeof(struct led_trigger), GFP_KERNEL); - if (local->radio_led) { - local->radio_led->name = local->radio_led_name; - if (led_trigger_register(local->radio_led)) { - kfree(local->radio_led); - local->radio_led = NULL; - } - } - - if (local->tpt_led_trigger) { - if (led_trigger_register(&local->tpt_led_trigger->trig)) { - kfree(local->tpt_led_trigger); - local->tpt_led_trigger = NULL; - } - } -} - -void ieee80211_led_exit(struct ieee80211_local *local) -{ - if (local->radio_led) { - led_trigger_unregister(local->radio_led); - kfree(local->radio_led); - } - if (local->assoc_led) { - led_trigger_unregister(local->assoc_led); - kfree(local->assoc_led); - } - if (local->tx_led) { - led_trigger_unregister(local->tx_led); - kfree(local->tx_led); - } - if (local->rx_led) { - led_trigger_unregister(local->rx_led); - kfree(local->rx_led); - } - - if (local->tpt_led_trigger) { - led_trigger_unregister(&local->tpt_led_trigger->trig); - kfree(local->tpt_led_trigger); - } -} - -char *__ieee80211_get_radio_led_name(struct ieee80211_hw *hw) -{ - struct ieee80211_local *local = hw_to_local(hw); - - return local->radio_led_name; -} -EXPORT_SYMBOL(__ieee80211_get_radio_led_name); - -char *__ieee80211_get_assoc_led_name(struct ieee80211_hw *hw) -{ - struct ieee80211_local *local = hw_to_local(hw); - - return local->assoc_led_name; -} -EXPORT_SYMBOL(__ieee80211_get_assoc_led_name); - -char *__ieee80211_get_tx_led_name(struct ieee80211_hw *hw) -{ - struct ieee80211_local *local = hw_to_local(hw); - - return local->tx_led_name; -} -EXPORT_SYMBOL(__ieee80211_get_tx_led_name); - -char *__ieee80211_get_rx_led_name(struct ieee80211_hw *hw) -{ - struct ieee80211_local *local = hw_to_local(hw); - - return local->rx_led_name; -} -EXPORT_SYMBOL(__ieee80211_get_rx_led_name); - -static unsigned long tpt_trig_traffic(struct ieee80211_local *local, - struct tpt_led_trigger *tpt_trig) -{ - unsigned long traffic, delta; - - traffic = tpt_trig->tx_bytes + tpt_trig->rx_bytes; - - delta = traffic - tpt_trig->prev_traffic; - tpt_trig->prev_traffic = traffic; - return DIV_ROUND_UP(delta, 1024 / 8); -} - -static void tpt_trig_timer(unsigned long data) -{ - struct ieee80211_local *local = (void *)data; - struct tpt_led_trigger *tpt_trig = local->tpt_led_trigger; - struct led_classdev *led_cdev; - unsigned long on, off, tpt; - int i; - - if (!tpt_trig->running) - return; - - mod_timer(&tpt_trig->timer, round_jiffies(jiffies + HZ)); - - tpt = tpt_trig_traffic(local, tpt_trig); - - /* default to just solid on */ - on = 1; - off = 0; - - for (i = tpt_trig->blink_table_len - 1; i >= 0; i--) { - if (tpt_trig->blink_table[i].throughput < 0 || - tpt > tpt_trig->blink_table[i].throughput) { - off = tpt_trig->blink_table[i].blink_time / 2; - on = tpt_trig->blink_table[i].blink_time - off; - break; - } - } - - read_lock(&tpt_trig->trig.leddev_list_lock); - list_for_each_entry(led_cdev, &tpt_trig->trig.led_cdevs, trig_list) - led_blink_set(led_cdev, &on, &off); - read_unlock(&tpt_trig->trig.leddev_list_lock); -} - -char *__ieee80211_create_tpt_led_trigger(struct ieee80211_hw *hw, - unsigned int flags, - const struct ieee80211_tpt_blink *blink_table, - unsigned int blink_table_len) -{ - struct ieee80211_local *local = hw_to_local(hw); - struct tpt_led_trigger *tpt_trig; - - if (WARN_ON(local->tpt_led_trigger)) - return NULL; - - tpt_trig = kzalloc(sizeof(struct tpt_led_trigger), GFP_KERNEL); - if (!tpt_trig) - return NULL; - - snprintf(tpt_trig->name, sizeof(tpt_trig->name), - "%stpt", wiphy_name(local->hw.wiphy)); - - tpt_trig->trig.name = tpt_trig->name; - - tpt_trig->blink_table = blink_table; - tpt_trig->blink_table_len = blink_table_len; - tpt_trig->want = flags; - - setup_timer(&tpt_trig->timer, tpt_trig_timer, (unsigned long)local); - - local->tpt_led_trigger = tpt_trig; - - return tpt_trig->name; -} -EXPORT_SYMBOL(__ieee80211_create_tpt_led_trigger); - -static void ieee80211_start_tpt_led_trig(struct ieee80211_local *local) -{ - struct tpt_led_trigger *tpt_trig = local->tpt_led_trigger; - - if (tpt_trig->running) - return; - - /* reset traffic */ - tpt_trig_traffic(local, tpt_trig); - tpt_trig->running = true; - - tpt_trig_timer((unsigned long)local); - mod_timer(&tpt_trig->timer, round_jiffies(jiffies + HZ)); -} - -static void ieee80211_stop_tpt_led_trig(struct ieee80211_local *local) -{ - struct tpt_led_trigger *tpt_trig = local->tpt_led_trigger; - struct led_classdev *led_cdev; - - if (!tpt_trig->running) - return; - - tpt_trig->running = false; - del_timer_sync(&tpt_trig->timer); - - read_lock(&tpt_trig->trig.leddev_list_lock); - list_for_each_entry(led_cdev, &tpt_trig->trig.led_cdevs, trig_list) - led_brightness_set(led_cdev, LED_OFF); - read_unlock(&tpt_trig->trig.leddev_list_lock); -} - -void ieee80211_mod_tpt_led_trig(struct ieee80211_local *local, - unsigned int types_on, unsigned int types_off) -{ - struct tpt_led_trigger *tpt_trig = local->tpt_led_trigger; - bool allowed; - - WARN_ON(types_on & types_off); - - if (!tpt_trig) - return; - - tpt_trig->active &= ~types_off; - tpt_trig->active |= types_on; - - /* - * Regardless of wanted state, we shouldn't blink when - * the radio is disabled -- this can happen due to some - * code ordering issues with __ieee80211_recalc_idle() - * being called before the radio is started. - */ - allowed = tpt_trig->active & IEEE80211_TPT_LEDTRIG_FL_RADIO; - - if (!allowed || !(tpt_trig->active & tpt_trig->want)) - ieee80211_stop_tpt_led_trig(local); - else - ieee80211_start_tpt_led_trig(local); -} diff --git a/openairITS/mac/DOT11/net/mac80211/led.h b/openairITS/mac/DOT11/net/mac80211/led.h deleted file mode 100644 index e0275d9bef..0000000000 --- a/openairITS/mac/DOT11/net/mac80211/led.h +++ /dev/null @@ -1,73 +0,0 @@ -/* - * Copyright 2006, Johannes Berg - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - */ - -#include -#include -#include -#include "ieee80211_i.h" - -#ifdef CONFIG_MAC80211_LEDS -void ieee80211_led_rx(struct ieee80211_local *local); -void ieee80211_led_tx(struct ieee80211_local *local, int q); -void ieee80211_led_assoc(struct ieee80211_local *local, - bool associated); -void ieee80211_led_radio(struct ieee80211_local *local, - bool enabled); -void ieee80211_led_names(struct ieee80211_local *local); -void ieee80211_led_init(struct ieee80211_local *local); -void ieee80211_led_exit(struct ieee80211_local *local); -void ieee80211_mod_tpt_led_trig(struct ieee80211_local *local, - unsigned int types_on, unsigned int types_off); -#else -static inline void ieee80211_led_rx(struct ieee80211_local *local) -{ -} -static inline void ieee80211_led_tx(struct ieee80211_local *local, int q) -{ -} -static inline void ieee80211_led_assoc(struct ieee80211_local *local, - bool associated) -{ -} -static inline void ieee80211_led_radio(struct ieee80211_local *local, - bool enabled) -{ -} -static inline void ieee80211_led_names(struct ieee80211_local *local) -{ -} -static inline void ieee80211_led_init(struct ieee80211_local *local) -{ -} -static inline void ieee80211_led_exit(struct ieee80211_local *local) -{ -} -static inline void ieee80211_mod_tpt_led_trig(struct ieee80211_local *local, - unsigned int types_on, - unsigned int types_off) -{ -} -#endif - -static inline void -ieee80211_tpt_led_trig_tx(struct ieee80211_local *local, __le16 fc, int bytes) -{ -#ifdef CONFIG_MAC80211_LEDS - if (local->tpt_led_trigger && ieee80211_is_data(fc)) - local->tpt_led_trigger->tx_bytes += bytes; -#endif -} - -static inline void -ieee80211_tpt_led_trig_rx(struct ieee80211_local *local, __le16 fc, int bytes) -{ -#ifdef CONFIG_MAC80211_LEDS - if (local->tpt_led_trigger && ieee80211_is_data(fc)) - local->tpt_led_trigger->rx_bytes += bytes; -#endif -} diff --git a/openairITS/mac/DOT11/net/mac80211/main.c b/openairITS/mac/DOT11/net/mac80211/main.c deleted file mode 100644 index d3c6aebdbe..0000000000 --- a/openairITS/mac/DOT11/net/mac80211/main.c +++ /dev/null @@ -1,1124 +0,0 @@ -/* - * Copyright 2002-2005, Instant802 Networks, Inc. - * Copyright 2005-2006, Devicescape Software, Inc. - * Copyright 2006-2007 Jiri Benc - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "ieee80211_i.h" -#include "driver-ops.h" -#include "rate.h" -#include "mesh.h" -#include "wep.h" -#include "led.h" -#include "cfg.h" -#include "debugfs.h" - -static struct lock_class_key ieee80211_rx_skb_queue_class; - -void ieee80211_configure_filter(struct ieee80211_local *local) -{ - u64 mc; - unsigned int changed_flags; - unsigned int new_flags = 0; - - if (atomic_read(&local->iff_promiscs)) - new_flags |= FIF_PROMISC_IN_BSS; - - if (atomic_read(&local->iff_allmultis)) - new_flags |= FIF_ALLMULTI; - - if (local->monitors || test_bit(SCAN_SW_SCANNING, &local->scanning)) - new_flags |= FIF_BCN_PRBRESP_PROMISC; - - if (local->fif_probe_req || local->probe_req_reg) - new_flags |= FIF_PROBE_REQ; - - if (local->fif_fcsfail) - new_flags |= FIF_FCSFAIL; - - if (local->fif_plcpfail) - new_flags |= FIF_PLCPFAIL; - - if (local->fif_control) - new_flags |= FIF_CONTROL; - - if (local->fif_other_bss) - new_flags |= FIF_OTHER_BSS; - - if (local->fif_pspoll) - new_flags |= FIF_PSPOLL; - - spin_lock_bh(&local->filter_lock); - changed_flags = local->filter_flags ^ new_flags; - -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35)) - mc = drv_prepare_multicast(local, &local->mc_list); -#else - mc = drv_prepare_multicast(local, local->mc_count, local->mc_list); -#endif - spin_unlock_bh(&local->filter_lock); - - /* be a bit nasty */ - new_flags |= (1<<31); - - drv_configure_filter(local, changed_flags, &new_flags, mc); - - WARN_ON(new_flags & (1<<31)); - - local->filter_flags = new_flags & ~(1<<31); -} - -static void ieee80211_reconfig_filter(struct work_struct *work) -{ - struct ieee80211_local *local = - container_of(work, struct ieee80211_local, reconfig_filter); - - ieee80211_configure_filter(local); -} - -int ieee80211_hw_config(struct ieee80211_local *local, u32 changed) -{ - struct ieee80211_channel *chan; - int ret = 0; - int power; - enum nl80211_channel_type channel_type; - u32 offchannel_flag; - - might_sleep(); - - offchannel_flag = local->hw.conf.flags & IEEE80211_CONF_OFFCHANNEL; - if (local->scan_channel) { - chan = local->scan_channel; - /* If scanning on oper channel, use whatever channel-type - * is currently in use. - */ - if (chan == local->oper_channel) - channel_type = local->_oper_channel_type; - else - channel_type = NL80211_CHAN_NO_HT; - } else if (local->tmp_channel) { - chan = local->tmp_channel; - channel_type = local->tmp_channel_type; - } else { - chan = local->oper_channel; - channel_type = local->_oper_channel_type; - } - - if (chan != local->oper_channel || - channel_type != local->_oper_channel_type) - local->hw.conf.flags |= IEEE80211_CONF_OFFCHANNEL; - else - local->hw.conf.flags &= ~IEEE80211_CONF_OFFCHANNEL; - - offchannel_flag ^= local->hw.conf.flags & IEEE80211_CONF_OFFCHANNEL; - - if (offchannel_flag || chan != local->hw.conf.channel || - channel_type != local->hw.conf.channel_type) { - local->hw.conf.channel = chan; - local->hw.conf.channel_type = channel_type; - changed |= IEEE80211_CONF_CHANGE_CHANNEL; - } - - if (!conf_is_ht(&local->hw.conf)) { - /* - * mac80211.h documents that this is only valid - * when the channel is set to an HT type, and - * that otherwise STATIC is used. - */ - local->hw.conf.smps_mode = IEEE80211_SMPS_STATIC; - } else if (local->hw.conf.smps_mode != local->smps_mode) { - local->hw.conf.smps_mode = local->smps_mode; - changed |= IEEE80211_CONF_CHANGE_SMPS; - } - - if (test_bit(SCAN_SW_SCANNING, &local->scanning) || - test_bit(SCAN_HW_SCANNING, &local->scanning)) - power = chan->max_power; - else - power = local->power_constr_level ? - min(chan->max_power, - (chan->max_reg_power - local->power_constr_level)) : - chan->max_power; - - if (local->user_power_level >= 0) - power = min(power, local->user_power_level); - - if (local->hw.conf.power_level != power) { - changed |= IEEE80211_CONF_CHANGE_POWER; - local->hw.conf.power_level = power; - } - - if (changed && local->open_count) { - ret = drv_config(local, changed); - /* - * Goal: - * HW reconfiguration should never fail, the driver has told - * us what it can support so it should live up to that promise. - * - * Current status: - * rfkill is not integrated with mac80211 and a - * configuration command can thus fail if hardware rfkill - * is enabled - * - * FIXME: integrate rfkill with mac80211 and then add this - * WARN_ON() back - * - */ - /* WARN_ON(ret); */ - } - - return ret; -} - -void ieee80211_bss_info_change_notify(struct ieee80211_sub_if_data *sdata, - u32 changed) -{ - struct ieee80211_local *local = sdata->local; - static const u8 zero[ETH_ALEN] = { 0 }; - - if (!changed) - return; - - if (sdata->vif.type == NL80211_IFTYPE_STATION) { - sdata->vif.bss_conf.bssid = sdata->u.mgd.bssid; - } else if (sdata->vif.type == NL80211_IFTYPE_ADHOC) - sdata->vif.bss_conf.bssid = sdata->u.ibss.bssid; - else if (sdata->vif.type == NL80211_IFTYPE_AP) - sdata->vif.bss_conf.bssid = sdata->vif.addr; - else if (sdata->vif.type == NL80211_IFTYPE_WDS) - sdata->vif.bss_conf.bssid = NULL; - else if (ieee80211_vif_is_mesh(&sdata->vif)) { - sdata->vif.bss_conf.bssid = zero; - } else { - WARN_ON(1); - return; - } - - switch (sdata->vif.type) { - case NL80211_IFTYPE_AP: - case NL80211_IFTYPE_ADHOC: - case NL80211_IFTYPE_WDS: - case NL80211_IFTYPE_MESH_POINT: - break; - default: - /* do not warn to simplify caller in scan.c */ - changed &= ~BSS_CHANGED_BEACON_ENABLED; - if (WARN_ON(changed & BSS_CHANGED_BEACON)) - return; - break; - } - - if (changed & BSS_CHANGED_BEACON_ENABLED) { - if (local->quiescing || !ieee80211_sdata_running(sdata) || - test_bit(SDATA_STATE_OFFCHANNEL, &sdata->state)) { - sdata->vif.bss_conf.enable_beacon = false; - } else { - /* - * Beacon should be enabled, but AP mode must - * check whether there is a beacon configured. - */ - switch (sdata->vif.type) { - case NL80211_IFTYPE_AP: - sdata->vif.bss_conf.enable_beacon = - !!sdata->u.ap.beacon; - break; - case NL80211_IFTYPE_ADHOC: - sdata->vif.bss_conf.enable_beacon = - !!sdata->u.ibss.presp; - break; -#ifdef CONFIG_MAC80211_MESH - case NL80211_IFTYPE_MESH_POINT: - sdata->vif.bss_conf.enable_beacon = - !!sdata->u.mesh.mesh_id_len; - break; -#endif - default: - /* not reached */ - WARN_ON(1); - break; - } - } - } - - drv_bss_info_changed(local, sdata, &sdata->vif.bss_conf, changed); -} - -u32 ieee80211_reset_erp_info(struct ieee80211_sub_if_data *sdata) -{ - sdata->vif.bss_conf.use_cts_prot = false; - sdata->vif.bss_conf.use_short_preamble = false; - sdata->vif.bss_conf.use_short_slot = false; - return BSS_CHANGED_ERP_CTS_PROT | - BSS_CHANGED_ERP_PREAMBLE | - BSS_CHANGED_ERP_SLOT; -} - -static void ieee80211_tasklet_handler(unsigned long data) -{ - struct ieee80211_local *local = (struct ieee80211_local *) data; - struct sta_info *sta, *tmp; - struct skb_eosp_msg_data *eosp_data; - struct sk_buff *skb; - - while ((skb = skb_dequeue(&local->skb_queue)) || - (skb = skb_dequeue(&local->skb_queue_unreliable))) { - switch (skb->pkt_type) { - case IEEE80211_RX_MSG: - /* Clear skb->pkt_type in order to not confuse kernel - * netstack. */ - skb->pkt_type = 0; - ieee80211_rx(&local->hw, skb); - break; - case IEEE80211_TX_STATUS_MSG: - skb->pkt_type = 0; - ieee80211_tx_status(&local->hw, skb); - break; - case IEEE80211_EOSP_MSG: - eosp_data = (void *)skb->cb; - for_each_sta_info(local, eosp_data->sta, sta, tmp) { - /* skip wrong virtual interface */ - if (memcmp(eosp_data->iface, - sta->sdata->vif.addr, ETH_ALEN)) - continue; - clear_sta_flag(sta, WLAN_STA_SP); - break; - } - dev_kfree_skb(skb); - break; - default: - WARN(1, "mac80211: Packet is of unknown type %d\n", - skb->pkt_type); - dev_kfree_skb(skb); - break; - } - } -} - -static void ieee80211_restart_work(struct work_struct *work) -{ - struct ieee80211_local *local = - container_of(work, struct ieee80211_local, restart_work); - - /* wait for scan work complete */ - flush_workqueue(local->workqueue); - - mutex_lock(&local->mtx); - WARN(test_bit(SCAN_HW_SCANNING, &local->scanning) || - local->sched_scanning, - "%s called with hardware scan in progress\n", __func__); - mutex_unlock(&local->mtx); - - rtnl_lock(); - ieee80211_scan_cancel(local); - ieee80211_reconfig(local); - rtnl_unlock(); -} - -void ieee80211_restart_hw(struct ieee80211_hw *hw) -{ - struct ieee80211_local *local = hw_to_local(hw); - - trace_api_restart_hw(local); - - wiphy_info(hw->wiphy, - "Hardware restart was requested\n"); - - /* use this reason, ieee80211_reconfig will unblock it */ - ieee80211_stop_queues_by_reason(hw, - IEEE80211_QUEUE_STOP_REASON_SUSPEND); - - schedule_work(&local->restart_work); -} -EXPORT_SYMBOL(ieee80211_restart_hw); - -static void ieee80211_recalc_smps_work(struct work_struct *work) -{ - struct ieee80211_local *local = - container_of(work, struct ieee80211_local, recalc_smps); - - mutex_lock(&local->iflist_mtx); - ieee80211_recalc_smps(local); - mutex_unlock(&local->iflist_mtx); -} - -#ifdef CONFIG_INET -static int ieee80211_ifa_changed(struct notifier_block *nb, - unsigned long data, void *arg) -{ - struct in_ifaddr *ifa = arg; - struct ieee80211_local *local = - container_of(nb, struct ieee80211_local, - ifa_notifier); - struct net_device *ndev = ifa->ifa_dev->dev; - struct wireless_dev *wdev = ndev->ieee80211_ptr; - struct in_device *idev; - struct ieee80211_sub_if_data *sdata; - struct ieee80211_bss_conf *bss_conf; - struct ieee80211_if_managed *ifmgd; - int c = 0; - - /* Make sure it's our interface that got changed */ - if (!wdev) - return NOTIFY_DONE; - - if (wdev->wiphy != local->hw.wiphy) - return NOTIFY_DONE; - - sdata = IEEE80211_DEV_TO_SUB_IF(ndev); - bss_conf = &sdata->vif.bss_conf; - - /* ARP filtering is only supported in managed mode */ - if (sdata->vif.type != NL80211_IFTYPE_STATION) - return NOTIFY_DONE; - - idev = __in_dev_get_rtnl(sdata->dev); - if (!idev) - return NOTIFY_DONE; - - ifmgd = &sdata->u.mgd; - mutex_lock(&ifmgd->mtx); - - /* Copy the addresses to the bss_conf list */ - ifa = idev->ifa_list; - while (c < IEEE80211_BSS_ARP_ADDR_LIST_LEN && ifa) { - bss_conf->arp_addr_list[c] = ifa->ifa_address; - ifa = ifa->ifa_next; - c++; - } - - /* If not all addresses fit the list, disable filtering */ - if (ifa) { - sdata->arp_filter_state = false; - c = 0; - } else { - sdata->arp_filter_state = true; - } - bss_conf->arp_addr_cnt = c; - - /* Configure driver only if associated (which also implies it is up) */ - if (ifmgd->associated) { - bss_conf->arp_filter_enabled = sdata->arp_filter_state; - ieee80211_bss_info_change_notify(sdata, - BSS_CHANGED_ARP_FILTER); - } - - mutex_unlock(&ifmgd->mtx); - - return NOTIFY_DONE; -} -#endif - -static int ieee80211_napi_poll(struct napi_struct *napi, int budget) -{ - struct ieee80211_local *local = - container_of(napi, struct ieee80211_local, napi); - - return local->ops->napi_poll(&local->hw, budget); -} - -void ieee80211_napi_schedule(struct ieee80211_hw *hw) -{ - struct ieee80211_local *local = hw_to_local(hw); - - napi_schedule(&local->napi); -} -EXPORT_SYMBOL(ieee80211_napi_schedule); - -void ieee80211_napi_complete(struct ieee80211_hw *hw) -{ - struct ieee80211_local *local = hw_to_local(hw); - - napi_complete(&local->napi); -} -EXPORT_SYMBOL(ieee80211_napi_complete); - -/* There isn't a lot of sense in it, but you can transmit anything you like */ -static const struct ieee80211_txrx_stypes -ieee80211_default_mgmt_stypes[NUM_NL80211_IFTYPES] = { - [NL80211_IFTYPE_ADHOC] = { - .tx = 0xffff, - .rx = BIT(IEEE80211_STYPE_ACTION >> 4), - }, - [NL80211_IFTYPE_STATION] = { - .tx = 0xffff, - .rx = BIT(IEEE80211_STYPE_ACTION >> 4) | - BIT(IEEE80211_STYPE_PROBE_REQ >> 4), - }, - [NL80211_IFTYPE_AP] = { - .tx = 0xffff, - .rx = BIT(IEEE80211_STYPE_ASSOC_REQ >> 4) | - BIT(IEEE80211_STYPE_REASSOC_REQ >> 4) | - BIT(IEEE80211_STYPE_PROBE_REQ >> 4) | - BIT(IEEE80211_STYPE_DISASSOC >> 4) | - BIT(IEEE80211_STYPE_AUTH >> 4) | - BIT(IEEE80211_STYPE_DEAUTH >> 4) | - BIT(IEEE80211_STYPE_ACTION >> 4), - }, - [NL80211_IFTYPE_AP_VLAN] = { - /* copy AP */ - .tx = 0xffff, - .rx = BIT(IEEE80211_STYPE_ASSOC_REQ >> 4) | - BIT(IEEE80211_STYPE_REASSOC_REQ >> 4) | - BIT(IEEE80211_STYPE_PROBE_REQ >> 4) | - BIT(IEEE80211_STYPE_DISASSOC >> 4) | - BIT(IEEE80211_STYPE_AUTH >> 4) | - BIT(IEEE80211_STYPE_DEAUTH >> 4) | - BIT(IEEE80211_STYPE_ACTION >> 4), - }, - [NL80211_IFTYPE_P2P_CLIENT] = { - .tx = 0xffff, - .rx = BIT(IEEE80211_STYPE_ACTION >> 4) | - BIT(IEEE80211_STYPE_PROBE_REQ >> 4), - }, - [NL80211_IFTYPE_P2P_GO] = { - .tx = 0xffff, - .rx = BIT(IEEE80211_STYPE_ASSOC_REQ >> 4) | - BIT(IEEE80211_STYPE_REASSOC_REQ >> 4) | - BIT(IEEE80211_STYPE_PROBE_REQ >> 4) | - BIT(IEEE80211_STYPE_DISASSOC >> 4) | - BIT(IEEE80211_STYPE_AUTH >> 4) | - BIT(IEEE80211_STYPE_DEAUTH >> 4) | - BIT(IEEE80211_STYPE_ACTION >> 4), - }, - [NL80211_IFTYPE_MESH_POINT] = { - .tx = 0xffff, - .rx = BIT(IEEE80211_STYPE_ACTION >> 4) | - BIT(IEEE80211_STYPE_AUTH >> 4) | - BIT(IEEE80211_STYPE_DEAUTH >> 4), - }, -}; - -static const struct ieee80211_ht_cap mac80211_ht_capa_mod_mask = { - .ampdu_params_info = IEEE80211_HT_AMPDU_PARM_FACTOR | - IEEE80211_HT_AMPDU_PARM_DENSITY, - - .cap_info = cpu_to_le16(IEEE80211_HT_CAP_SUP_WIDTH_20_40 | - IEEE80211_HT_CAP_MAX_AMSDU | - IEEE80211_HT_CAP_SGI_40), - .mcs = { - .rx_mask = { 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, }, - }, -}; - -/* - * [PLATA] scan mode here? - */ -struct ieee80211_hw *ieee80211_alloc_hw(size_t priv_data_len, - const struct ieee80211_ops *ops) -{ - struct ieee80211_local *local; - int priv_size, i; - struct wiphy *wiphy; - - if (WARN_ON(ops->sta_state && (ops->sta_add || ops->sta_remove))) - return NULL; - - /* Ensure 32-byte alignment of our private data and hw private data. - * We use the wiphy priv data for both our ieee80211_local and for - * the driver's private data - * - * In memory it'll be like this: - * - * +-------------------------+ - * | struct wiphy | - * +-------------------------+ - * | struct ieee80211_local | - * +-------------------------+ - * | driver's private data | - * +-------------------------+ - * - */ - priv_size = ALIGN(sizeof(*local), NETDEV_ALIGN) + priv_data_len; - - wiphy = wiphy_new(&mac80211_config_ops, priv_size); - - if (!wiphy) - return NULL; - - wiphy->mgmt_stypes = ieee80211_default_mgmt_stypes; - - wiphy->privid = mac80211_wiphy_privid; - - wiphy->flags |= WIPHY_FLAG_NETNS_OK | - WIPHY_FLAG_4ADDR_AP | - WIPHY_FLAG_4ADDR_STATION | - WIPHY_FLAG_REPORTS_OBSS | - WIPHY_FLAG_OFFCHAN_TX | - WIPHY_FLAG_HAS_REMAIN_ON_CHANNEL; - - wiphy->features = NL80211_FEATURE_SK_TX_STATUS | - NL80211_FEATURE_HT_IBSS; - - if (!ops->set_key) - wiphy->flags |= WIPHY_FLAG_IBSS_RSN; - - wiphy->bss_priv_size = sizeof(struct ieee80211_bss); - - local = wiphy_priv(wiphy); - - local->hw.wiphy = wiphy; - - local->hw.priv = (char *)local + ALIGN(sizeof(*local), NETDEV_ALIGN); - - BUG_ON(!ops->tx && !ops->tx_frags); - BUG_ON(!ops->start); - BUG_ON(!ops->stop); - BUG_ON(!ops->config); - BUG_ON(!ops->add_interface); - BUG_ON(!ops->remove_interface); - BUG_ON(!ops->configure_filter); - local->ops = ops; - - /* set up some defaults */ - local->hw.queues = 1; - local->hw.max_rates = 1; - local->hw.max_report_rates = 0; - local->hw.max_rx_aggregation_subframes = IEEE80211_MAX_AMPDU_BUF; - local->hw.max_tx_aggregation_subframes = IEEE80211_MAX_AMPDU_BUF; - local->hw.conf.long_frame_max_tx_count = wiphy->retry_long; - local->hw.conf.short_frame_max_tx_count = wiphy->retry_short; - local->user_power_level = -1; - wiphy->ht_capa_mod_mask = &mac80211_ht_capa_mod_mask; - - INIT_LIST_HEAD(&local->interfaces); -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35)) - - __hw_addr_init(&local->mc_list); - -#endif - mutex_init(&local->iflist_mtx); - mutex_init(&local->mtx); - - mutex_init(&local->key_mtx); - spin_lock_init(&local->filter_lock); - spin_lock_init(&local->queue_stop_reason_lock); - - /* - * The rx_skb_queue is only accessed from tasklets, - * but other SKB queues are used from within IRQ - * context. Therefore, this one needs a different - * locking class so our direct, non-irq-safe use of - * the queue's lock doesn't throw lockdep warnings. - */ - skb_queue_head_init_class(&local->rx_skb_queue, - &ieee80211_rx_skb_queue_class); - - /* - * [PLATA] scan_work called here. So we bypass it if OCB is activated - */ - if ((local->hw.wiphy->dot11OCBActivated == 0) || !(local->hw.flags & IEEE80211_HW_DOT11OCB_SUPPORTED)) - INIT_DELAYED_WORK(&local->scan_work, ieee80211_scan_work); - - ieee80211_work_init(local); - - INIT_WORK(&local->restart_work, ieee80211_restart_work); - - INIT_WORK(&local->reconfig_filter, ieee80211_reconfig_filter); - INIT_WORK(&local->recalc_smps, ieee80211_recalc_smps_work); - local->smps_mode = IEEE80211_SMPS_OFF; - - INIT_WORK(&local->dynamic_ps_enable_work, - ieee80211_dynamic_ps_enable_work); - INIT_WORK(&local->dynamic_ps_disable_work, - ieee80211_dynamic_ps_disable_work); - setup_timer(&local->dynamic_ps_timer, - ieee80211_dynamic_ps_timer, (unsigned long) local); - - INIT_WORK(&local->sched_scan_stopped_work, - ieee80211_sched_scan_stopped_work); - - spin_lock_init(&local->ack_status_lock); - idr_init(&local->ack_status_frames); - /* preallocate at least one entry */ - idr_pre_get(&local->ack_status_frames, GFP_KERNEL); - - sta_info_init(local); - - for (i = 0; i < IEEE80211_MAX_QUEUES; i++) { - skb_queue_head_init(&local->pending[i]); - atomic_set(&local->agg_queue_stop[i], 0); - } - tasklet_init(&local->tx_pending_tasklet, ieee80211_tx_pending, - (unsigned long)local); - - tasklet_init(&local->tasklet, - ieee80211_tasklet_handler, - (unsigned long) local); - - skb_queue_head_init(&local->skb_queue); - skb_queue_head_init(&local->skb_queue_unreliable); - - /* init dummy netdev for use w/ NAPI */ - init_dummy_netdev(&local->napi_dev); - - ieee80211_led_names(local); - - ieee80211_hw_roc_setup(local); - - return &local->hw; -} -EXPORT_SYMBOL(ieee80211_alloc_hw); - -int ieee80211_register_hw(struct ieee80211_hw *hw) -{ - struct ieee80211_local *local = hw_to_local(hw); - int result, i; - enum ieee80211_band band; - int channels, max_bitrates; - bool supp_ht; - static const u32 cipher_suites[] = { - /* keep WEP first, it may be removed below */ - WLAN_CIPHER_SUITE_WEP40, - WLAN_CIPHER_SUITE_WEP104, - WLAN_CIPHER_SUITE_TKIP, - WLAN_CIPHER_SUITE_CCMP, - - /* keep last -- depends on hw flags! */ - WLAN_CIPHER_SUITE_AES_CMAC - }; - - if ((hw->wiphy->wowlan.flags || hw->wiphy->wowlan.n_patterns) -#ifdef CONFIG_PM - && (!local->ops->suspend || !local->ops->resume) -#endif - ) - return -EINVAL; - - if ((hw->flags & IEEE80211_HW_SCAN_WHILE_IDLE) && !local->ops->hw_scan) - return -EINVAL; - - if (hw->max_report_rates == 0) - hw->max_report_rates = hw->max_rates; - - /* - * generic code guarantees at least one band, - * set this very early because much code assumes - * that hw.conf.channel is assigned - */ - channels = 0; - max_bitrates = 0; - supp_ht = false; - for (band = 0; band < IEEE80211_NUM_BANDS; band++) { - struct ieee80211_supported_band *sband; - - sband = local->hw.wiphy->bands[band]; - if (!sband) - continue; - if (!local->oper_channel) { - /* init channel we're on */ - local->hw.conf.channel = - local->oper_channel = &sband->channels[0]; - local->hw.conf.channel_type = NL80211_CHAN_NO_HT; - } - channels += sband->n_channels; - - if (max_bitrates < sband->n_bitrates) - max_bitrates = sband->n_bitrates; - supp_ht = supp_ht || sband->ht_cap.ht_supported; - } - - local->int_scan_req = kzalloc(sizeof(*local->int_scan_req) + - sizeof(void *) * channels, GFP_KERNEL); - if (!local->int_scan_req) - return -ENOMEM; - - for (band = 0; band < IEEE80211_NUM_BANDS; band++) { - if (!local->hw.wiphy->bands[band]) - continue; - local->int_scan_req->rates[band] = (u32) -1; - } - - /* if low-level driver supports AP, we also support VLAN */ - if (local->hw.wiphy->interface_modes & BIT(NL80211_IFTYPE_AP)) { - hw->wiphy->interface_modes |= BIT(NL80211_IFTYPE_AP_VLAN); - hw->wiphy->software_iftypes |= BIT(NL80211_IFTYPE_AP_VLAN); - } - - /* mac80211 always supports monitor */ - hw->wiphy->interface_modes |= BIT(NL80211_IFTYPE_MONITOR); - hw->wiphy->software_iftypes |= BIT(NL80211_IFTYPE_MONITOR); - - /* - * mac80211 doesn't support more than 1 channel, and also not more - * than one IBSS interface - */ - for (i = 0; i < hw->wiphy->n_iface_combinations; i++) { - const struct ieee80211_iface_combination *c; - int j; - - c = &hw->wiphy->iface_combinations[i]; - - if (c->num_different_channels > 1) - return -EINVAL; - - for (j = 0; j < c->n_limits; j++) - if ((c->limits[j].types & BIT(NL80211_IFTYPE_ADHOC)) && - c->limits[j].max > 1) - return -EINVAL; - } - -#ifndef CONFIG_MAC80211_MESH - /* mesh depends on Kconfig, but drivers should set it if they want */ - local->hw.wiphy->interface_modes &= ~BIT(NL80211_IFTYPE_MESH_POINT); -#endif - - /* if the underlying driver supports mesh, mac80211 will (at least) - * provide routing of mesh authentication frames to userspace */ - if (local->hw.wiphy->interface_modes & BIT(NL80211_IFTYPE_MESH_POINT)) - local->hw.wiphy->flags |= WIPHY_FLAG_MESH_AUTH; - - /* mac80211 supports control port protocol changing */ - local->hw.wiphy->flags |= WIPHY_FLAG_CONTROL_PORT_PROTOCOL; - - if (local->hw.flags & IEEE80211_HW_SIGNAL_DBM) - local->hw.wiphy->signal_type = CFG80211_SIGNAL_TYPE_MBM; - else if (local->hw.flags & IEEE80211_HW_SIGNAL_UNSPEC) - local->hw.wiphy->signal_type = CFG80211_SIGNAL_TYPE_UNSPEC; - - WARN((local->hw.flags & IEEE80211_HW_SUPPORTS_UAPSD) - && (local->hw.flags & IEEE80211_HW_PS_NULLFUNC_STACK), - "U-APSD not supported with HW_PS_NULLFUNC_STACK\n"); - - /* - * Calculate scan IE length -- we need this to alloc - * memory and to subtract from the driver limit. It - * includes the DS Params, (extended) supported rates, and HT - * information -- SSID is the driver's responsibility. - */ - local->scan_ies_len = 4 + max_bitrates /* (ext) supp rates */ + - 3 /* DS Params */; - if (supp_ht) - local->scan_ies_len += 2 + sizeof(struct ieee80211_ht_cap); - - if (!local->ops->hw_scan) { - /* For hw_scan, driver needs to set these up. */ - local->hw.wiphy->max_scan_ssids = 4; - local->hw.wiphy->max_scan_ie_len = IEEE80211_MAX_DATA_LEN; - } - - /* - * If the driver supports any scan IEs, then assume the - * limit includes the IEs mac80211 will add, otherwise - * leave it at zero and let the driver sort it out; we - * still pass our IEs to the driver but userspace will - * not be allowed to in that case. - */ - if (local->hw.wiphy->max_scan_ie_len) - local->hw.wiphy->max_scan_ie_len -= local->scan_ies_len; - - /* Set up cipher suites unless driver already did */ - if (!local->hw.wiphy->cipher_suites) { - local->hw.wiphy->cipher_suites = cipher_suites; - local->hw.wiphy->n_cipher_suites = ARRAY_SIZE(cipher_suites); - if (!(local->hw.flags & IEEE80211_HW_MFP_CAPABLE)) - local->hw.wiphy->n_cipher_suites--; - } - if (IS_ERR(local->wep_tx_tfm) || IS_ERR(local->wep_rx_tfm)) { - if (local->hw.wiphy->cipher_suites == cipher_suites) { - local->hw.wiphy->cipher_suites += 2; - local->hw.wiphy->n_cipher_suites -= 2; - } else { - u32 *suites; - int r, w = 0; - - /* Filter out WEP */ - - suites = kmemdup( - local->hw.wiphy->cipher_suites, - sizeof(u32) * local->hw.wiphy->n_cipher_suites, - GFP_KERNEL); - if (!suites) - return -ENOMEM; - for (r = 0; r < local->hw.wiphy->n_cipher_suites; r++) { - u32 suite = local->hw.wiphy->cipher_suites[r]; - if (suite == WLAN_CIPHER_SUITE_WEP40 || - suite == WLAN_CIPHER_SUITE_WEP104) - continue; - suites[w++] = suite; - } - local->hw.wiphy->cipher_suites = suites; - local->hw.wiphy->n_cipher_suites = w; - local->wiphy_ciphers_allocated = true; - } - } - - if (!local->ops->remain_on_channel) - local->hw.wiphy->max_remain_on_channel_duration = 5000; - - if (local->ops->sched_scan_start) - local->hw.wiphy->flags |= WIPHY_FLAG_SUPPORTS_SCHED_SCAN; - - /* mac80211 based drivers don't support internal TDLS setup */ - if (local->hw.wiphy->flags & WIPHY_FLAG_SUPPORTS_TDLS) - local->hw.wiphy->flags |= WIPHY_FLAG_TDLS_EXTERNAL_SETUP; - - result = wiphy_register(local->hw.wiphy); - if (result < 0) - goto fail_wiphy_register; - - /* - * We use the number of queues for feature tests (QoS, HT) internally - * so restrict them appropriately. - */ - if (hw->queues > IEEE80211_MAX_QUEUES) - hw->queues = IEEE80211_MAX_QUEUES; - - local->workqueue = - alloc_ordered_workqueue(wiphy_name(local->hw.wiphy), 0); - if (!local->workqueue) { - result = -ENOMEM; - goto fail_workqueue; - } - - /* - * The hardware needs headroom for sending the frame, - * and we need some headroom for passing the frame to monitor - * interfaces, but never both at the same time. - */ - local->tx_headroom = max_t(unsigned int , local->hw.extra_tx_headroom, - IEEE80211_TX_STATUS_HEADROOM); - - debugfs_hw_add(local); - - /* - * if the driver doesn't specify a max listen interval we - * use 5 which should be a safe default - */ - if (local->hw.max_listen_interval == 0) - local->hw.max_listen_interval = 5; - - local->hw.conf.listen_interval = local->hw.max_listen_interval; - - local->dynamic_ps_forced_timeout = -1; - - result = ieee80211_wep_init(local); - if (result < 0) - wiphy_debug(local->hw.wiphy, "Failed to initialize wep: %d\n", - result); - - ieee80211_led_init(local); - - rtnl_lock(); - - result = ieee80211_init_rate_ctrl_alg(local, - hw->rate_control_algorithm); - if (result < 0) { - wiphy_debug(local->hw.wiphy, - "Failed to initialize rate control algorithm\n"); - goto fail_rate; - } - - /* add one default STA interface if supported */ - if (local->hw.wiphy->interface_modes & BIT(NL80211_IFTYPE_STATION)) { - result = ieee80211_if_add(local, "wlan%d", NULL, - NL80211_IFTYPE_STATION, NULL); - if (result) - wiphy_warn(local->hw.wiphy, - "Failed to add default virtual iface\n"); - } - - rtnl_unlock(); - - local->network_latency_notifier.notifier_call = - ieee80211_max_network_latency; - result = pm_qos_add_notifier(PM_QOS_NETWORK_LATENCY, - &local->network_latency_notifier); - if (result) { - rtnl_lock(); - goto fail_pm_qos; - } - -#ifdef CONFIG_INET - local->ifa_notifier.notifier_call = ieee80211_ifa_changed; - result = register_inetaddr_notifier(&local->ifa_notifier); - if (result) - goto fail_ifa; -#endif - - netif_napi_add(&local->napi_dev, &local->napi, ieee80211_napi_poll, - local->hw.napi_weight); - - return 0; - -#ifdef CONFIG_INET - fail_ifa: - pm_qos_remove_notifier(PM_QOS_NETWORK_LATENCY, - &local->network_latency_notifier); - rtnl_lock(); -#endif - fail_pm_qos: - ieee80211_led_exit(local); - ieee80211_remove_interfaces(local); - fail_rate: - rtnl_unlock(); - ieee80211_wep_free(local); - sta_info_stop(local); - destroy_workqueue(local->workqueue); - fail_workqueue: - wiphy_unregister(local->hw.wiphy); - fail_wiphy_register: - if (local->wiphy_ciphers_allocated) - kfree(local->hw.wiphy->cipher_suites); - kfree(local->int_scan_req); - return result; -} -EXPORT_SYMBOL(ieee80211_register_hw); - -void ieee80211_unregister_hw(struct ieee80211_hw *hw) -{ - struct ieee80211_local *local = hw_to_local(hw); - - tasklet_kill(&local->tx_pending_tasklet); - tasklet_kill(&local->tasklet); - - pm_qos_remove_notifier(PM_QOS_NETWORK_LATENCY, - &local->network_latency_notifier); -#ifdef CONFIG_INET - unregister_inetaddr_notifier(&local->ifa_notifier); -#endif - - rtnl_lock(); - - /* - * At this point, interface list manipulations are fine - * because the driver cannot be handing us frames any - * more and the tasklet is killed. - */ - ieee80211_remove_interfaces(local); - - rtnl_unlock(); - - /* - * Now all work items will be gone, but the - * timer might still be armed, so delete it - */ - del_timer_sync(&local->work_timer); - - cancel_work_sync(&local->restart_work); - cancel_work_sync(&local->reconfig_filter); - - ieee80211_clear_tx_pending(local); - rate_control_deinitialize(local); - - if (skb_queue_len(&local->skb_queue) || - skb_queue_len(&local->skb_queue_unreliable)) - wiphy_warn(local->hw.wiphy, "skb_queue not empty\n"); - skb_queue_purge(&local->skb_queue); - skb_queue_purge(&local->skb_queue_unreliable); - skb_queue_purge(&local->rx_skb_queue); - - destroy_workqueue(local->workqueue); - wiphy_unregister(local->hw.wiphy); - sta_info_stop(local); - ieee80211_wep_free(local); - ieee80211_led_exit(local); - kfree(local->int_scan_req); -} -EXPORT_SYMBOL(ieee80211_unregister_hw); - -static int ieee80211_free_ack_frame(int id, void *p, void *data) -{ - WARN_ONCE(1, "Have pending ack frames!\n"); - kfree_skb(p); - return 0; -} - -void ieee80211_free_hw(struct ieee80211_hw *hw) -{ - struct ieee80211_local *local = hw_to_local(hw); - - mutex_destroy(&local->iflist_mtx); - mutex_destroy(&local->mtx); - - if (local->wiphy_ciphers_allocated) - kfree(local->hw.wiphy->cipher_suites); - - idr_for_each(&local->ack_status_frames, - ieee80211_free_ack_frame, NULL); - idr_destroy(&local->ack_status_frames); - - wiphy_free(local->hw.wiphy); -} -EXPORT_SYMBOL(ieee80211_free_hw); - -static int __init ieee80211_init(void) -{ - struct sk_buff *skb; - int ret; - - BUILD_BUG_ON(sizeof(struct ieee80211_tx_info) > sizeof(skb->cb)); - BUILD_BUG_ON(offsetof(struct ieee80211_tx_info, driver_data) + - IEEE80211_TX_INFO_DRIVER_DATA_SIZE > sizeof(skb->cb)); - - ret = rc80211_minstrel_init(); - if (ret) - return ret; - - ret = rc80211_minstrel_ht_init(); - if (ret) - goto err_minstrel; - - ret = rc80211_pid_init(); - if (ret) - goto err_pid; - - ret = ieee80211_iface_init(); - if (ret) - goto err_netdev; - - return 0; - err_netdev: - rc80211_pid_exit(); - err_pid: - rc80211_minstrel_ht_exit(); - err_minstrel: - rc80211_minstrel_exit(); - - return ret; -} - -static void __exit ieee80211_exit(void) -{ - rc80211_pid_exit(); - rc80211_minstrel_ht_exit(); - rc80211_minstrel_exit(); - -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,37)) - flush_scheduled_work(); -#endif - - if (mesh_allocated) - ieee80211s_stop(); - - ieee80211_iface_exit(); - - rcu_barrier(); -} - - -subsys_initcall(ieee80211_init); -module_exit(ieee80211_exit); - -MODULE_DESCRIPTION("IEEE 802.11 subsystem"); -MODULE_LICENSE("GPL"); diff --git a/openairITS/mac/DOT11/net/mac80211/mesh.c b/openairITS/mac/DOT11/net/mac80211/mesh.c deleted file mode 100644 index e5fbb7cf35..0000000000 --- a/openairITS/mac/DOT11/net/mac80211/mesh.c +++ /dev/null @@ -1,764 +0,0 @@ -/* - * Copyright (c) 2008, 2009 open80211s Ltd. - * Authors: Luis Carlos Cobo - * Javier Cardona - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - */ - -#include -#include -#include "ieee80211_i.h" -#include "mesh.h" - -#define MESHCONF_CAPAB_ACCEPT_PLINKS 0x01 -#define MESHCONF_CAPAB_FORWARDING 0x08 - -#define TMR_RUNNING_HK 0 -#define TMR_RUNNING_MP 1 -#define TMR_RUNNING_MPR 2 - -int mesh_allocated; -static struct kmem_cache *rm_cache; - -#ifdef CONFIG_MAC80211_MESH -bool mesh_action_is_path_sel(struct ieee80211_mgmt *mgmt) -{ - return (mgmt->u.action.u.mesh_action.action_code == - WLAN_MESH_ACTION_HWMP_PATH_SELECTION); -} -#else -bool mesh_action_is_path_sel(struct ieee80211_mgmt *mgmt) -{ return false; } -#endif - -void ieee80211s_init(void) -{ - mesh_pathtbl_init(); - mesh_allocated = 1; - rm_cache = kmem_cache_create("mesh_rmc", sizeof(struct rmc_entry), - 0, 0, NULL); -} - -void ieee80211s_stop(void) -{ - mesh_pathtbl_unregister(); - kmem_cache_destroy(rm_cache); -} - -static void ieee80211_mesh_housekeeping_timer(unsigned long data) -{ - struct ieee80211_sub_if_data *sdata = (void *) data; - struct ieee80211_local *local = sdata->local; - struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh; - - set_bit(MESH_WORK_HOUSEKEEPING, &ifmsh->wrkq_flags); - - if (local->quiescing) { - set_bit(TMR_RUNNING_HK, &ifmsh->timers_running); - return; - } - - ieee80211_queue_work(&local->hw, &sdata->work); -} - -/** - * mesh_matches_local - check if the config of a mesh point matches ours - * - * @ie: information elements of a management frame from the mesh peer - * @sdata: local mesh subif - * - * This function checks if the mesh configuration of a mesh point matches the - * local mesh configuration, i.e. if both nodes belong to the same mesh network. - */ -bool mesh_matches_local(struct ieee802_11_elems *ie, struct ieee80211_sub_if_data *sdata) -{ - struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh; - struct ieee80211_local *local = sdata->local; - - /* - * As support for each feature is added, check for matching - * - On mesh config capabilities - * - Power Save Support En - * - Sync support enabled - * - Sync support active - * - Sync support required from peer - * - MDA enabled - * - Power management control on fc - */ - if (!(ifmsh->mesh_id_len == ie->mesh_id_len && - memcmp(ifmsh->mesh_id, ie->mesh_id, ie->mesh_id_len) == 0 && - (ifmsh->mesh_pp_id == ie->mesh_config->meshconf_psel) && - (ifmsh->mesh_pm_id == ie->mesh_config->meshconf_pmetric) && - (ifmsh->mesh_cc_id == ie->mesh_config->meshconf_congest) && - (ifmsh->mesh_sp_id == ie->mesh_config->meshconf_synch) && - (ifmsh->mesh_auth_id == ie->mesh_config->meshconf_auth))) - goto mismatch; - - /* disallow peering with mismatched channel types for now */ - if (ie->ht_info_elem && - (local->_oper_channel_type != - ieee80211_ht_info_to_channel_type(ie->ht_info_elem))) - goto mismatch; - - return true; -mismatch: - return false; -} - -/** - * mesh_peer_accepts_plinks - check if an mp is willing to establish peer links - * - * @ie: information elements of a management frame from the mesh peer - */ -bool mesh_peer_accepts_plinks(struct ieee802_11_elems *ie) -{ - return (ie->mesh_config->meshconf_cap & - MESHCONF_CAPAB_ACCEPT_PLINKS) != 0; -} - -/** - * mesh_accept_plinks_update: update accepting_plink in local mesh beacons - * - * @sdata: mesh interface in which mesh beacons are going to be updated - */ -void mesh_accept_plinks_update(struct ieee80211_sub_if_data *sdata) -{ - bool free_plinks; - - /* In case mesh_plink_free_count > 0 and mesh_plinktbl_capacity == 0, - * the mesh interface might be able to establish plinks with peers that - * are already on the table but are not on PLINK_ESTAB state. However, - * in general the mesh interface is not accepting peer link requests - * from new peers, and that must be reflected in the beacon - */ - free_plinks = mesh_plink_availables(sdata); - - if (free_plinks != sdata->u.mesh.accepting_plinks) - ieee80211_mesh_housekeeping_timer((unsigned long) sdata); -} - -int mesh_rmc_init(struct ieee80211_sub_if_data *sdata) -{ - int i; - - sdata->u.mesh.rmc = kmalloc(sizeof(struct mesh_rmc), GFP_KERNEL); - if (!sdata->u.mesh.rmc) - return -ENOMEM; - sdata->u.mesh.rmc->idx_mask = RMC_BUCKETS - 1; - for (i = 0; i < RMC_BUCKETS; i++) - INIT_LIST_HEAD(&sdata->u.mesh.rmc->bucket[i].list); - return 0; -} - -void mesh_rmc_free(struct ieee80211_sub_if_data *sdata) -{ - struct mesh_rmc *rmc = sdata->u.mesh.rmc; - struct rmc_entry *p, *n; - int i; - - if (!sdata->u.mesh.rmc) - return; - - for (i = 0; i < RMC_BUCKETS; i++) - list_for_each_entry_safe(p, n, &rmc->bucket[i].list, list) { - list_del(&p->list); - kmem_cache_free(rm_cache, p); - } - - kfree(rmc); - sdata->u.mesh.rmc = NULL; -} - -/** - * mesh_rmc_check - Check frame in recent multicast cache and add if absent. - * - * @sa: source address - * @mesh_hdr: mesh_header - * - * Returns: 0 if the frame is not in the cache, nonzero otherwise. - * - * Checks using the source address and the mesh sequence number if we have - * received this frame lately. If the frame is not in the cache, it is added to - * it. - */ -int mesh_rmc_check(u8 *sa, struct ieee80211s_hdr *mesh_hdr, - struct ieee80211_sub_if_data *sdata) -{ - struct mesh_rmc *rmc = sdata->u.mesh.rmc; - u32 seqnum = 0; - int entries = 0; - u8 idx; - struct rmc_entry *p, *n; - - /* Don't care about endianness since only match matters */ - memcpy(&seqnum, &mesh_hdr->seqnum, sizeof(mesh_hdr->seqnum)); - idx = le32_to_cpu(mesh_hdr->seqnum) & rmc->idx_mask; - list_for_each_entry_safe(p, n, &rmc->bucket[idx].list, list) { - ++entries; - if (time_after(jiffies, p->exp_time) || - (entries == RMC_QUEUE_MAX_LEN)) { - list_del(&p->list); - kmem_cache_free(rm_cache, p); - --entries; - } else if ((seqnum == p->seqnum) && - (compare_ether_addr(sa, p->sa) == 0)) - return -1; - } - - p = kmem_cache_alloc(rm_cache, GFP_ATOMIC); - if (!p) - return 0; - - p->seqnum = seqnum; - p->exp_time = jiffies + RMC_TIMEOUT; - memcpy(p->sa, sa, ETH_ALEN); - list_add(&p->list, &rmc->bucket[idx].list); - return 0; -} - -int -mesh_add_meshconf_ie(struct sk_buff *skb, struct ieee80211_sub_if_data *sdata) -{ - struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh; - u8 *pos, neighbors; - u8 meshconf_len = sizeof(struct ieee80211_meshconf_ie); - - if (skb_tailroom(skb) < 2 + meshconf_len) - return -ENOMEM; - - pos = skb_put(skb, 2 + meshconf_len); - *pos++ = WLAN_EID_MESH_CONFIG; - *pos++ = meshconf_len; - - /* Active path selection protocol ID */ - *pos++ = ifmsh->mesh_pp_id; - /* Active path selection metric ID */ - *pos++ = ifmsh->mesh_pm_id; - /* Congestion control mode identifier */ - *pos++ = ifmsh->mesh_cc_id; - /* Synchronization protocol identifier */ - *pos++ = ifmsh->mesh_sp_id; - /* Authentication Protocol identifier */ - *pos++ = ifmsh->mesh_auth_id; - /* Mesh Formation Info - number of neighbors */ - neighbors = atomic_read(&ifmsh->mshstats.estab_plinks); - /* Number of neighbor mesh STAs or 15 whichever is smaller */ - neighbors = (neighbors > 15) ? 15 : neighbors; - *pos++ = neighbors << 1; - /* Mesh capability */ - ifmsh->accepting_plinks = mesh_plink_availables(sdata); - *pos = MESHCONF_CAPAB_FORWARDING; - *pos++ |= ifmsh->accepting_plinks ? - MESHCONF_CAPAB_ACCEPT_PLINKS : 0x00; - *pos++ = 0x00; - - return 0; -} - -int -mesh_add_meshid_ie(struct sk_buff *skb, struct ieee80211_sub_if_data *sdata) -{ - struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh; - u8 *pos; - - if (skb_tailroom(skb) < 2 + ifmsh->mesh_id_len) - return -ENOMEM; - - pos = skb_put(skb, 2 + ifmsh->mesh_id_len); - *pos++ = WLAN_EID_MESH_ID; - *pos++ = ifmsh->mesh_id_len; - if (ifmsh->mesh_id_len) - memcpy(pos, ifmsh->mesh_id, ifmsh->mesh_id_len); - - return 0; -} - -int -mesh_add_vendor_ies(struct sk_buff *skb, struct ieee80211_sub_if_data *sdata) -{ - struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh; - u8 offset, len; - const u8 *data; - - if (!ifmsh->ie || !ifmsh->ie_len) - return 0; - - /* fast-forward to vendor IEs */ - offset = ieee80211_ie_split_vendor(ifmsh->ie, ifmsh->ie_len, 0); - - if (offset) { - len = ifmsh->ie_len - offset; - data = ifmsh->ie + offset; - if (skb_tailroom(skb) < len) - return -ENOMEM; - memcpy(skb_put(skb, len), data, len); - } - - return 0; -} - -int -mesh_add_rsn_ie(struct sk_buff *skb, struct ieee80211_sub_if_data *sdata) -{ - struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh; - u8 len = 0; - const u8 *data; - - if (!ifmsh->ie || !ifmsh->ie_len) - return 0; - - /* find RSN IE */ - data = ifmsh->ie; - while (data < ifmsh->ie + ifmsh->ie_len) { - if (*data == WLAN_EID_RSN) { - len = data[1] + 2; - break; - } - data++; - } - - if (len) { - if (skb_tailroom(skb) < len) - return -ENOMEM; - memcpy(skb_put(skb, len), data, len); - } - - return 0; -} - -int mesh_add_ds_params_ie(struct sk_buff *skb, - struct ieee80211_sub_if_data *sdata) -{ - struct ieee80211_local *local = sdata->local; - struct ieee80211_supported_band *sband; - u8 *pos; - - if (skb_tailroom(skb) < 3) - return -ENOMEM; - - sband = local->hw.wiphy->bands[local->hw.conf.channel->band]; - if (sband->band == IEEE80211_BAND_2GHZ) { - pos = skb_put(skb, 2 + 1); - *pos++ = WLAN_EID_DS_PARAMS; - *pos++ = 1; - *pos++ = ieee80211_frequency_to_channel(local->hw.conf.channel->center_freq); - } - - return 0; -} - -int mesh_add_ht_cap_ie(struct sk_buff *skb, - struct ieee80211_sub_if_data *sdata) -{ - struct ieee80211_local *local = sdata->local; - struct ieee80211_supported_band *sband; - u8 *pos; - - sband = local->hw.wiphy->bands[local->oper_channel->band]; - if (!sband->ht_cap.ht_supported || - local->_oper_channel_type == NL80211_CHAN_NO_HT) - return 0; - - if (skb_tailroom(skb) < 2 + sizeof(struct ieee80211_ht_cap)) - return -ENOMEM; - - pos = skb_put(skb, 2 + sizeof(struct ieee80211_ht_cap)); - ieee80211_ie_build_ht_cap(pos, &sband->ht_cap, sband->ht_cap.cap); - - return 0; -} - -int mesh_add_ht_info_ie(struct sk_buff *skb, - struct ieee80211_sub_if_data *sdata) -{ - struct ieee80211_local *local = sdata->local; - struct ieee80211_channel *channel = local->oper_channel; - enum nl80211_channel_type channel_type = local->_oper_channel_type; - struct ieee80211_supported_band *sband = - local->hw.wiphy->bands[channel->band]; - struct ieee80211_sta_ht_cap *ht_cap = &sband->ht_cap; - u8 *pos; - - if (!ht_cap->ht_supported || channel_type == NL80211_CHAN_NO_HT) - return 0; - - if (skb_tailroom(skb) < 2 + sizeof(struct ieee80211_ht_info)) - return -ENOMEM; - - pos = skb_put(skb, 2 + sizeof(struct ieee80211_ht_info)); - ieee80211_ie_build_ht_info(pos, ht_cap, channel, channel_type); - - return 0; -} -static void ieee80211_mesh_path_timer(unsigned long data) -{ - struct ieee80211_sub_if_data *sdata = - (struct ieee80211_sub_if_data *) data; - struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh; - struct ieee80211_local *local = sdata->local; - - if (local->quiescing) { - set_bit(TMR_RUNNING_MP, &ifmsh->timers_running); - return; - } - - ieee80211_queue_work(&local->hw, &sdata->work); -} - -static void ieee80211_mesh_path_root_timer(unsigned long data) -{ - struct ieee80211_sub_if_data *sdata = - (struct ieee80211_sub_if_data *) data; - struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh; - struct ieee80211_local *local = sdata->local; - - set_bit(MESH_WORK_ROOT, &ifmsh->wrkq_flags); - - if (local->quiescing) { - set_bit(TMR_RUNNING_MPR, &ifmsh->timers_running); - return; - } - - ieee80211_queue_work(&local->hw, &sdata->work); -} - -void ieee80211_mesh_root_setup(struct ieee80211_if_mesh *ifmsh) -{ - if (ifmsh->mshcfg.dot11MeshHWMPRootMode) - set_bit(MESH_WORK_ROOT, &ifmsh->wrkq_flags); - else { - clear_bit(MESH_WORK_ROOT, &ifmsh->wrkq_flags); - /* stop running timer */ - del_timer_sync(&ifmsh->mesh_path_root_timer); - } -} - -/** - * ieee80211_fill_mesh_addresses - fill addresses of a locally originated mesh frame - * @hdr: 802.11 frame header - * @fc: frame control field - * @meshda: destination address in the mesh - * @meshsa: source address address in the mesh. Same as TA, as frame is - * locally originated. - * - * Return the length of the 802.11 (does not include a mesh control header) - */ -int ieee80211_fill_mesh_addresses(struct ieee80211_hdr *hdr, __le16 *fc, - const u8 *meshda, const u8 *meshsa) -{ - if (is_multicast_ether_addr(meshda)) { - *fc |= cpu_to_le16(IEEE80211_FCTL_FROMDS); - /* DA TA SA */ - memcpy(hdr->addr1, meshda, ETH_ALEN); - memcpy(hdr->addr2, meshsa, ETH_ALEN); - memcpy(hdr->addr3, meshsa, ETH_ALEN); - return 24; - } else { - *fc |= cpu_to_le16(IEEE80211_FCTL_FROMDS | IEEE80211_FCTL_TODS); - /* RA TA DA SA */ - memset(hdr->addr1, 0, ETH_ALEN); /* RA is resolved later */ - memcpy(hdr->addr2, meshsa, ETH_ALEN); - memcpy(hdr->addr3, meshda, ETH_ALEN); - memcpy(hdr->addr4, meshsa, ETH_ALEN); - return 30; - } -} - -/** - * ieee80211_new_mesh_header - create a new mesh header - * @meshhdr: uninitialized mesh header - * @sdata: mesh interface to be used - * @addr4or5: 1st address in the ae header, which may correspond to address 4 - * (if addr6 is NULL) or address 5 (if addr6 is present). It may - * be NULL. - * @addr6: 2nd address in the ae header, which corresponds to addr6 of the - * mesh frame - * - * Return the header length. - */ -int ieee80211_new_mesh_header(struct ieee80211s_hdr *meshhdr, - struct ieee80211_sub_if_data *sdata, char *addr4or5, - char *addr6) -{ - int aelen = 0; - BUG_ON(!addr4or5 && addr6); - memset(meshhdr, 0, sizeof(*meshhdr)); - meshhdr->ttl = sdata->u.mesh.mshcfg.dot11MeshTTL; - put_unaligned(cpu_to_le32(sdata->u.mesh.mesh_seqnum), &meshhdr->seqnum); - sdata->u.mesh.mesh_seqnum++; - if (addr4or5 && !addr6) { - meshhdr->flags |= MESH_FLAGS_AE_A4; - aelen += ETH_ALEN; - memcpy(meshhdr->eaddr1, addr4or5, ETH_ALEN); - } else if (addr4or5 && addr6) { - meshhdr->flags |= MESH_FLAGS_AE_A5_A6; - aelen += 2 * ETH_ALEN; - memcpy(meshhdr->eaddr1, addr4or5, ETH_ALEN); - memcpy(meshhdr->eaddr2, addr6, ETH_ALEN); - } - return 6 + aelen; -} - -static void ieee80211_mesh_housekeeping(struct ieee80211_sub_if_data *sdata, - struct ieee80211_if_mesh *ifmsh) -{ - bool free_plinks; - -#ifdef CONFIG_MAC80211_VERBOSE_DEBUG - printk(KERN_DEBUG "%s: running mesh housekeeping\n", - sdata->name); -#endif - - ieee80211_sta_expire(sdata, IEEE80211_MESH_PEER_INACTIVITY_LIMIT); - mesh_path_expire(sdata); - - free_plinks = mesh_plink_availables(sdata); - if (free_plinks != sdata->u.mesh.accepting_plinks) - ieee80211_bss_info_change_notify(sdata, BSS_CHANGED_BEACON); - - mod_timer(&ifmsh->housekeeping_timer, - round_jiffies(jiffies + IEEE80211_MESH_HOUSEKEEPING_INTERVAL)); -} - -static void ieee80211_mesh_rootpath(struct ieee80211_sub_if_data *sdata) -{ - struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh; - - mesh_path_tx_root_frame(sdata); - mod_timer(&ifmsh->mesh_path_root_timer, - round_jiffies(TU_TO_EXP_TIME( - ifmsh->mshcfg.dot11MeshHWMPRannInterval))); -} - -#ifdef CONFIG_PM -void ieee80211_mesh_quiesce(struct ieee80211_sub_if_data *sdata) -{ - struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh; - - /* use atomic bitops in case all timers fire at the same time */ - - if (del_timer_sync(&ifmsh->housekeeping_timer)) - set_bit(TMR_RUNNING_HK, &ifmsh->timers_running); - if (del_timer_sync(&ifmsh->mesh_path_timer)) - set_bit(TMR_RUNNING_MP, &ifmsh->timers_running); - if (del_timer_sync(&ifmsh->mesh_path_root_timer)) - set_bit(TMR_RUNNING_MPR, &ifmsh->timers_running); -} - -void ieee80211_mesh_restart(struct ieee80211_sub_if_data *sdata) -{ - struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh; - - if (test_and_clear_bit(TMR_RUNNING_HK, &ifmsh->timers_running)) - add_timer(&ifmsh->housekeeping_timer); - if (test_and_clear_bit(TMR_RUNNING_MP, &ifmsh->timers_running)) - add_timer(&ifmsh->mesh_path_timer); - if (test_and_clear_bit(TMR_RUNNING_MPR, &ifmsh->timers_running)) - add_timer(&ifmsh->mesh_path_root_timer); - ieee80211_mesh_root_setup(ifmsh); -} -#endif - -void ieee80211_start_mesh(struct ieee80211_sub_if_data *sdata) -{ - struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh; - struct ieee80211_local *local = sdata->local; - - local->fif_other_bss++; - /* mesh ifaces must set allmulti to forward mcast traffic */ - atomic_inc(&local->iff_allmultis); - ieee80211_configure_filter(local); - - ifmsh->mesh_cc_id = 0; /* Disabled */ - ifmsh->mesh_sp_id = 0; /* Neighbor Offset */ - ifmsh->mesh_auth_id = 0; /* Disabled */ - set_bit(MESH_WORK_HOUSEKEEPING, &ifmsh->wrkq_flags); - ieee80211_mesh_root_setup(ifmsh); - ieee80211_queue_work(&local->hw, &sdata->work); - sdata->vif.bss_conf.beacon_int = MESH_DEFAULT_BEACON_INTERVAL; - ieee80211_bss_info_change_notify(sdata, BSS_CHANGED_BEACON | - BSS_CHANGED_BEACON_ENABLED | - BSS_CHANGED_BEACON_INT); -} - -void ieee80211_stop_mesh(struct ieee80211_sub_if_data *sdata) -{ - struct ieee80211_local *local = sdata->local; - struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh; - - ifmsh->mesh_id_len = 0; - ieee80211_bss_info_change_notify(sdata, BSS_CHANGED_BEACON_ENABLED); - sta_info_flush(local, NULL); - - del_timer_sync(&sdata->u.mesh.housekeeping_timer); - del_timer_sync(&sdata->u.mesh.mesh_path_root_timer); - /* - * If the timer fired while we waited for it, it will have - * requeued the work. Now the work will be running again - * but will not rearm the timer again because it checks - * whether the interface is running, which, at this point, - * it no longer is. - */ - cancel_work_sync(&sdata->work); - - local->fif_other_bss--; - atomic_dec(&local->iff_allmultis); - ieee80211_configure_filter(local); -} - -static void ieee80211_mesh_rx_bcn_presp(struct ieee80211_sub_if_data *sdata, - u16 stype, - struct ieee80211_mgmt *mgmt, - size_t len, - struct ieee80211_rx_status *rx_status) -{ - struct ieee80211_local *local = sdata->local; - struct ieee802_11_elems elems; - struct ieee80211_channel *channel; - u32 supp_rates = 0; - size_t baselen; - int freq; - enum ieee80211_band band = rx_status->band; - - /* ignore ProbeResp to foreign address */ - if (stype == IEEE80211_STYPE_PROBE_RESP && - compare_ether_addr(mgmt->da, sdata->vif.addr)) - return; - - baselen = (u8 *) mgmt->u.probe_resp.variable - (u8 *) mgmt; - if (baselen > len) - return; - - ieee802_11_parse_elems(mgmt->u.probe_resp.variable, len - baselen, - &elems); - - /* ignore beacons from secure mesh peers if our security is off */ - if (elems.rsn_len && sdata->u.mesh.security == IEEE80211_MESH_SEC_NONE) - return; - - if (elems.ds_params && elems.ds_params_len == 1) - freq = ieee80211_channel_to_frequency(elems.ds_params[0], band); - else - freq = rx_status->freq; - - channel = ieee80211_get_channel(local->hw.wiphy, freq); - - if (!channel || channel->flags & IEEE80211_CHAN_DISABLED) - return; - - if (elems.mesh_id && elems.mesh_config && - mesh_matches_local(&elems, sdata)) { - supp_rates = ieee80211_sta_get_rates(local, &elems, band); - mesh_neighbour_update(mgmt->sa, supp_rates, sdata, &elems); - } -} - -static void ieee80211_mesh_rx_mgmt_action(struct ieee80211_sub_if_data *sdata, - struct ieee80211_mgmt *mgmt, - size_t len, - struct ieee80211_rx_status *rx_status) -{ - switch (mgmt->u.action.category) { - case WLAN_CATEGORY_SELF_PROTECTED: - switch (mgmt->u.action.u.self_prot.action_code) { - case WLAN_SP_MESH_PEERING_OPEN: - case WLAN_SP_MESH_PEERING_CLOSE: - case WLAN_SP_MESH_PEERING_CONFIRM: - mesh_rx_plink_frame(sdata, mgmt, len, rx_status); - break; - } - break; - case WLAN_CATEGORY_MESH_ACTION: - if (mesh_action_is_path_sel(mgmt)) - mesh_rx_path_sel_frame(sdata, mgmt, len); - break; - } -} - -void ieee80211_mesh_rx_queued_mgmt(struct ieee80211_sub_if_data *sdata, - struct sk_buff *skb) -{ - struct ieee80211_rx_status *rx_status; - struct ieee80211_mgmt *mgmt; - u16 stype; - - rx_status = IEEE80211_SKB_RXCB(skb); - mgmt = (struct ieee80211_mgmt *) skb->data; - stype = le16_to_cpu(mgmt->frame_control) & IEEE80211_FCTL_STYPE; - - switch (stype) { - case IEEE80211_STYPE_PROBE_RESP: - case IEEE80211_STYPE_BEACON: - ieee80211_mesh_rx_bcn_presp(sdata, stype, mgmt, skb->len, - rx_status); - break; - case IEEE80211_STYPE_ACTION: - ieee80211_mesh_rx_mgmt_action(sdata, mgmt, skb->len, rx_status); - break; - } -} - -void ieee80211_mesh_work(struct ieee80211_sub_if_data *sdata) -{ - struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh; - - if (ifmsh->preq_queue_len && - time_after(jiffies, - ifmsh->last_preq + msecs_to_jiffies(ifmsh->mshcfg.dot11MeshHWMPpreqMinInterval))) - mesh_path_start_discovery(sdata); - - if (test_and_clear_bit(MESH_WORK_GROW_MPATH_TABLE, &ifmsh->wrkq_flags)) - mesh_mpath_table_grow(); - - if (test_and_clear_bit(MESH_WORK_GROW_MPP_TABLE, &ifmsh->wrkq_flags)) - mesh_mpp_table_grow(); - - if (test_and_clear_bit(MESH_WORK_HOUSEKEEPING, &ifmsh->wrkq_flags)) - ieee80211_mesh_housekeeping(sdata, ifmsh); - - if (test_and_clear_bit(MESH_WORK_ROOT, &ifmsh->wrkq_flags)) - ieee80211_mesh_rootpath(sdata); -} - -void ieee80211_mesh_notify_scan_completed(struct ieee80211_local *local) -{ - struct ieee80211_sub_if_data *sdata; - - rcu_read_lock(); - list_for_each_entry_rcu(sdata, &local->interfaces, list) - if (ieee80211_vif_is_mesh(&sdata->vif)) - ieee80211_queue_work(&local->hw, &sdata->work); - rcu_read_unlock(); -} - -void ieee80211_mesh_init_sdata(struct ieee80211_sub_if_data *sdata) -{ - struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh; - - setup_timer(&ifmsh->housekeeping_timer, - ieee80211_mesh_housekeeping_timer, - (unsigned long) sdata); - - ifmsh->accepting_plinks = true; - ifmsh->preq_id = 0; - ifmsh->sn = 0; - ifmsh->num_gates = 0; - atomic_set(&ifmsh->mpaths, 0); - mesh_rmc_init(sdata); - ifmsh->last_preq = jiffies; - ifmsh->next_perr = jiffies; - /* Allocate all mesh structures when creating the first mesh interface. */ - if (!mesh_allocated) - ieee80211s_init(); - setup_timer(&ifmsh->mesh_path_timer, - ieee80211_mesh_path_timer, - (unsigned long) sdata); - setup_timer(&ifmsh->mesh_path_root_timer, - ieee80211_mesh_path_root_timer, - (unsigned long) sdata); - INIT_LIST_HEAD(&ifmsh->preq_queue.list); - spin_lock_init(&ifmsh->mesh_preq_queue_lock); -} diff --git a/openairITS/mac/DOT11/net/mac80211/mesh.h b/openairITS/mac/DOT11/net/mac80211/mesh.h deleted file mode 100644 index 8d53b71378..0000000000 --- a/openairITS/mac/DOT11/net/mac80211/mesh.h +++ /dev/null @@ -1,342 +0,0 @@ -/* - * Copyright (c) 2008, 2009 open80211s Ltd. - * Authors: Luis Carlos Cobo - * Javier Cardona - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - */ - -#ifndef IEEE80211S_H -#define IEEE80211S_H - -#include -#include -#include "ieee80211_i.h" - - -/* Data structures */ - -/** - * enum mesh_path_flags - mac80211 mesh path flags - * - * - * - * @MESH_PATH_ACTIVE: the mesh path can be used for forwarding - * @MESH_PATH_RESOLVING: the discovery process is running for this mesh path - * @MESH_PATH_SN_VALID: the mesh path contains a valid destination sequence - * number - * @MESH_PATH_FIXED: the mesh path has been manually set and should not be - * modified - * @MESH_PATH_RESOLVED: the mesh path can has been resolved - * @MESH_PATH_REQ_QUEUED: there is an unsent path request for this destination - * already queued up, waiting for the discovery process to start. - * - * MESH_PATH_RESOLVED is used by the mesh path timer to - * decide when to stop or cancel the mesh path discovery. - */ -enum mesh_path_flags { - MESH_PATH_ACTIVE = BIT(0), - MESH_PATH_RESOLVING = BIT(1), - MESH_PATH_SN_VALID = BIT(2), - MESH_PATH_FIXED = BIT(3), - MESH_PATH_RESOLVED = BIT(4), - MESH_PATH_REQ_QUEUED = BIT(5), -}; - -/** - * enum mesh_deferred_task_flags - mac80211 mesh deferred tasks - * - * - * - * @MESH_WORK_HOUSEKEEPING: run the periodic mesh housekeeping tasks - * @MESH_WORK_GROW_MPATH_TABLE: the mesh path table is full and needs - * to grow. - * @MESH_WORK_GROW_MPP_TABLE: the mesh portals table is full and needs to - * grow - * @MESH_WORK_ROOT: the mesh root station needs to send a frame - */ -enum mesh_deferred_task_flags { - MESH_WORK_HOUSEKEEPING, - MESH_WORK_GROW_MPATH_TABLE, - MESH_WORK_GROW_MPP_TABLE, - MESH_WORK_ROOT, -}; - -/** - * struct mesh_path - mac80211 mesh path structure - * - * @dst: mesh path destination mac address - * @sdata: mesh subif - * @next_hop: mesh neighbor to which frames for this destination will be - * forwarded - * @timer: mesh path discovery timer - * @frame_queue: pending queue for frames sent to this destination while the - * path is unresolved - * @sn: target sequence number - * @metric: current metric to this destination - * @hop_count: hops to destination - * @exp_time: in jiffies, when the path will expire or when it expired - * @discovery_timeout: timeout (lapse in jiffies) used for the last discovery - * retry - * @discovery_retries: number of discovery retries - * @flags: mesh path flags, as specified on &enum mesh_path_flags - * @state_lock: mesh path state lock used to protect changes to the - * mpath itself. No need to take this lock when adding or removing - * an mpath to a hash bucket on a path table. - * @rann_snd_addr: the RANN sender address - * @is_root: the destination station of this path is a root node - * @is_gate: the destination station of this path is a mesh gate - * - * - * The combination of dst and sdata is unique in the mesh path table. Since the - * next_hop STA is only protected by RCU as well, deleting the STA must also - * remove/substitute the mesh_path structure and wait until that is no longer - * reachable before destroying the STA completely. - */ -struct mesh_path { - u8 dst[ETH_ALEN]; - u8 mpp[ETH_ALEN]; /* used for MPP or MAP */ - struct ieee80211_sub_if_data *sdata; - struct sta_info __rcu *next_hop; - struct timer_list timer; - struct sk_buff_head frame_queue; - struct rcu_head rcu; - u32 sn; - u32 metric; - u8 hop_count; - unsigned long exp_time; - u32 discovery_timeout; - u8 discovery_retries; - enum mesh_path_flags flags; - spinlock_t state_lock; - u8 rann_snd_addr[ETH_ALEN]; - bool is_root; - bool is_gate; -}; - -/** - * struct mesh_table - * - * @hash_buckets: array of hash buckets of the table - * @hashwlock: array of locks to protect write operations, one per bucket - * @hash_mask: 2^size_order - 1, used to compute hash idx - * @hash_rnd: random value used for hash computations - * @entries: number of entries in the table - * @free_node: function to free nodes of the table - * @copy_node: function to copy nodes of the table - * @size_order: determines size of the table, there will be 2^size_order hash - * buckets - * @mean_chain_len: maximum average length for the hash buckets' list, if it is - * reached, the table will grow - * @known_gates: list of known mesh gates and their mpaths by the station. The - * gate's mpath may or may not be resolved and active. - * - * rcu_head: RCU head to free the table - */ -struct mesh_table { - /* Number of buckets will be 2^N */ - struct hlist_head *hash_buckets; - spinlock_t *hashwlock; /* One per bucket, for add/del */ - unsigned int hash_mask; /* (2^size_order) - 1 */ - __u32 hash_rnd; /* Used for hash generation */ - atomic_t entries; /* Up to MAX_MESH_NEIGHBOURS */ - void (*free_node) (struct hlist_node *p, bool free_leafs); - int (*copy_node) (struct hlist_node *p, struct mesh_table *newtbl); - int size_order; - int mean_chain_len; - struct hlist_head *known_gates; - spinlock_t gates_lock; - - struct rcu_head rcu_head; -}; - -/* Recent multicast cache */ -/* RMC_BUCKETS must be a power of 2, maximum 256 */ -#define RMC_BUCKETS 256 -#define RMC_QUEUE_MAX_LEN 4 -#define RMC_TIMEOUT (3 * HZ) - -/** - * struct rmc_entry - entry in the Recent Multicast Cache - * - * @seqnum: mesh sequence number of the frame - * @exp_time: expiration time of the entry, in jiffies - * @sa: source address of the frame - * - * The Recent Multicast Cache keeps track of the latest multicast frames that - * have been received by a mesh interface and discards received multicast frames - * that are found in the cache. - */ -struct rmc_entry { - struct list_head list; - u32 seqnum; - unsigned long exp_time; - u8 sa[ETH_ALEN]; -}; - -struct mesh_rmc { - struct rmc_entry bucket[RMC_BUCKETS]; - u32 idx_mask; -}; - -#define IEEE80211_MESH_PEER_INACTIVITY_LIMIT (1800 * HZ) -#define IEEE80211_MESH_HOUSEKEEPING_INTERVAL (60 * HZ) - -#define MESH_DEFAULT_BEACON_INTERVAL 1000 /* in 1024 us units */ - -#define MESH_PATH_EXPIRE (600 * HZ) - -/* Default maximum number of plinks per interface */ -#define MESH_MAX_PLINKS 256 - -/* Maximum number of paths per interface */ -#define MESH_MAX_MPATHS 1024 - -/* Public interfaces */ -/* Various */ -int ieee80211_fill_mesh_addresses(struct ieee80211_hdr *hdr, __le16 *fc, - const u8 *da, const u8 *sa); -int ieee80211_new_mesh_header(struct ieee80211s_hdr *meshhdr, - struct ieee80211_sub_if_data *sdata, char *addr4or5, - char *addr6); -int mesh_rmc_check(u8 *addr, struct ieee80211s_hdr *mesh_hdr, - struct ieee80211_sub_if_data *sdata); -bool mesh_matches_local(struct ieee802_11_elems *ie, - struct ieee80211_sub_if_data *sdata); -void mesh_ids_set_default(struct ieee80211_if_mesh *mesh); -void mesh_mgmt_ies_add(struct sk_buff *skb, - struct ieee80211_sub_if_data *sdata); -int mesh_add_meshconf_ie(struct sk_buff *skb, - struct ieee80211_sub_if_data *sdata); -int mesh_add_meshid_ie(struct sk_buff *skb, - struct ieee80211_sub_if_data *sdata); -int mesh_add_rsn_ie(struct sk_buff *skb, - struct ieee80211_sub_if_data *sdata); -int mesh_add_vendor_ies(struct sk_buff *skb, - struct ieee80211_sub_if_data *sdata); -int mesh_add_ds_params_ie(struct sk_buff *skb, - struct ieee80211_sub_if_data *sdata); -int mesh_add_ht_cap_ie(struct sk_buff *skb, - struct ieee80211_sub_if_data *sdata); -int mesh_add_ht_info_ie(struct sk_buff *skb, - struct ieee80211_sub_if_data *sdata); -void mesh_rmc_free(struct ieee80211_sub_if_data *sdata); -int mesh_rmc_init(struct ieee80211_sub_if_data *sdata); -void ieee80211s_init(void); -void ieee80211s_update_metric(struct ieee80211_local *local, - struct sta_info *stainfo, struct sk_buff *skb); -void ieee80211s_stop(void); -void ieee80211_mesh_init_sdata(struct ieee80211_sub_if_data *sdata); -void ieee80211_start_mesh(struct ieee80211_sub_if_data *sdata); -void ieee80211_stop_mesh(struct ieee80211_sub_if_data *sdata); -void ieee80211_mesh_root_setup(struct ieee80211_if_mesh *ifmsh); - -/* Mesh paths */ -int mesh_nexthop_lookup(struct sk_buff *skb, - struct ieee80211_sub_if_data *sdata); -int mesh_nexthop_resolve(struct sk_buff *skb, - struct ieee80211_sub_if_data *sdata); -void mesh_path_start_discovery(struct ieee80211_sub_if_data *sdata); -struct mesh_path *mesh_path_lookup(u8 *dst, - struct ieee80211_sub_if_data *sdata); -struct mesh_path *mpp_path_lookup(u8 *dst, - struct ieee80211_sub_if_data *sdata); -int mpp_path_add(u8 *dst, u8 *mpp, struct ieee80211_sub_if_data *sdata); -struct mesh_path *mesh_path_lookup_by_idx(int idx, - struct ieee80211_sub_if_data *sdata); -void mesh_path_fix_nexthop(struct mesh_path *mpath, struct sta_info *next_hop); -void mesh_path_expire(struct ieee80211_sub_if_data *sdata); -void mesh_rx_path_sel_frame(struct ieee80211_sub_if_data *sdata, - struct ieee80211_mgmt *mgmt, size_t len); -int mesh_path_add(u8 *dst, struct ieee80211_sub_if_data *sdata); - -int mesh_path_add_gate(struct mesh_path *mpath); -int mesh_path_send_to_gates(struct mesh_path *mpath); -int mesh_gate_num(struct ieee80211_sub_if_data *sdata); -/* Mesh plinks */ -void mesh_neighbour_update(u8 *hw_addr, u32 rates, - struct ieee80211_sub_if_data *sdata, - struct ieee802_11_elems *ie); -bool mesh_peer_accepts_plinks(struct ieee802_11_elems *ie); -void mesh_accept_plinks_update(struct ieee80211_sub_if_data *sdata); -void mesh_plink_broken(struct sta_info *sta); -void mesh_plink_deactivate(struct sta_info *sta); -int mesh_plink_open(struct sta_info *sta); -void mesh_plink_block(struct sta_info *sta); -void mesh_rx_plink_frame(struct ieee80211_sub_if_data *sdata, - struct ieee80211_mgmt *mgmt, size_t len, - struct ieee80211_rx_status *rx_status); - -/* Private interfaces */ -/* Mesh tables */ -void mesh_mpath_table_grow(void); -void mesh_mpp_table_grow(void); -/* Mesh paths */ -int mesh_path_error_tx(u8 ttl, u8 *target, __le32 target_sn, __le16 target_rcode, - const u8 *ra, struct ieee80211_sub_if_data *sdata); -void mesh_path_assign_nexthop(struct mesh_path *mpath, struct sta_info *sta); -void mesh_path_flush_pending(struct mesh_path *mpath); -void mesh_path_tx_pending(struct mesh_path *mpath); -int mesh_pathtbl_init(void); -void mesh_pathtbl_unregister(void); -int mesh_path_del(u8 *addr, struct ieee80211_sub_if_data *sdata); -void mesh_path_timer(unsigned long data); -void mesh_path_flush_by_nexthop(struct sta_info *sta); -void mesh_path_flush_by_iface(struct ieee80211_sub_if_data *sdata); -void mesh_path_discard_frame(struct sk_buff *skb, - struct ieee80211_sub_if_data *sdata); -void mesh_path_quiesce(struct ieee80211_sub_if_data *sdata); -void mesh_path_restart(struct ieee80211_sub_if_data *sdata); -void mesh_path_tx_root_frame(struct ieee80211_sub_if_data *sdata); - -bool mesh_action_is_path_sel(struct ieee80211_mgmt *mgmt); -extern int mesh_paths_generation; - -#ifdef CONFIG_MAC80211_MESH -extern int mesh_allocated; - -static inline int mesh_plink_free_count(struct ieee80211_sub_if_data *sdata) -{ - return sdata->u.mesh.mshcfg.dot11MeshMaxPeerLinks - - atomic_read(&sdata->u.mesh.mshstats.estab_plinks); -} - -static inline bool mesh_plink_availables(struct ieee80211_sub_if_data *sdata) -{ - return (min_t(long, mesh_plink_free_count(sdata), - MESH_MAX_PLINKS - sdata->local->num_sta)) > 0; -} - -static inline void mesh_path_activate(struct mesh_path *mpath) -{ - mpath->flags |= MESH_PATH_ACTIVE | MESH_PATH_RESOLVED; -} - -static inline bool mesh_path_sel_is_hwmp(struct ieee80211_sub_if_data *sdata) -{ - return sdata->u.mesh.mesh_pp_id == IEEE80211_PATH_PROTOCOL_HWMP; -} - -void ieee80211_mesh_notify_scan_completed(struct ieee80211_local *local); - -void ieee80211_mesh_quiesce(struct ieee80211_sub_if_data *sdata); -void ieee80211_mesh_restart(struct ieee80211_sub_if_data *sdata); -void mesh_plink_quiesce(struct sta_info *sta); -void mesh_plink_restart(struct sta_info *sta); -#else -#define mesh_allocated 0 -static inline void -ieee80211_mesh_notify_scan_completed(struct ieee80211_local *local) {} -static inline void ieee80211_mesh_quiesce(struct ieee80211_sub_if_data *sdata) -{} -static inline void ieee80211_mesh_restart(struct ieee80211_sub_if_data *sdata) -{} -static inline void mesh_plink_quiesce(struct sta_info *sta) {} -static inline void mesh_plink_restart(struct sta_info *sta) {} -static inline bool mesh_path_sel_is_hwmp(struct ieee80211_sub_if_data *sdata) -{ return false; } -#endif - -#endif /* IEEE80211S_H */ diff --git a/openairITS/mac/DOT11/net/mac80211/mesh_hwmp.c b/openairITS/mac/DOT11/net/mac80211/mesh_hwmp.c deleted file mode 100644 index 1c6f3d02ae..0000000000 --- a/openairITS/mac/DOT11/net/mac80211/mesh_hwmp.c +++ /dev/null @@ -1,1153 +0,0 @@ -/* - * Copyright (c) 2008, 2009 open80211s Ltd. - * Author: Luis Carlos Cobo - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - */ - -#include -#include -#include -#include "wme.h" -#include "mesh.h" - -#ifdef CONFIG_MAC80211_VERBOSE_MHWMP_DEBUG -#define mhwmp_dbg(fmt, args...) \ - printk(KERN_DEBUG "Mesh HWMP (%s): " fmt "\n", sdata->name, ##args) -#else -#define mhwmp_dbg(fmt, args...) do { (void)(0); } while (0) -#endif - -#define TEST_FRAME_LEN 8192 -#define MAX_METRIC 0xffffffff -#define ARITH_SHIFT 8 - -/* Number of frames buffered per destination for unresolved destinations */ -#define MESH_FRAME_QUEUE_LEN 10 -#define MAX_PREQ_QUEUE_LEN 64 - -/* Destination only */ -#define MP_F_DO 0x1 -/* Reply and forward */ -#define MP_F_RF 0x2 -/* Unknown Sequence Number */ -#define MP_F_USN 0x01 -/* Reason code Present */ -#define MP_F_RCODE 0x02 - -static void mesh_queue_preq(struct mesh_path *, u8); - -static inline u32 u32_field_get(u8 *preq_elem, int offset, bool ae) -{ - if (ae) - offset += 6; - return get_unaligned_le32(preq_elem + offset); -} - -static inline u32 u16_field_get(u8 *preq_elem, int offset, bool ae) -{ - if (ae) - offset += 6; - return get_unaligned_le16(preq_elem + offset); -} - -/* HWMP IE processing macros */ -#define AE_F (1<<6) -#define AE_F_SET(x) (*x & AE_F) -#define PREQ_IE_FLAGS(x) (*(x)) -#define PREQ_IE_HOPCOUNT(x) (*(x + 1)) -#define PREQ_IE_TTL(x) (*(x + 2)) -#define PREQ_IE_PREQ_ID(x) u32_field_get(x, 3, 0) -#define PREQ_IE_ORIG_ADDR(x) (x + 7) -#define PREQ_IE_ORIG_SN(x) u32_field_get(x, 13, 0) -#define PREQ_IE_LIFETIME(x) u32_field_get(x, 17, AE_F_SET(x)) -#define PREQ_IE_METRIC(x) u32_field_get(x, 21, AE_F_SET(x)) -#define PREQ_IE_TARGET_F(x) (*(AE_F_SET(x) ? x + 32 : x + 26)) -#define PREQ_IE_TARGET_ADDR(x) (AE_F_SET(x) ? x + 33 : x + 27) -#define PREQ_IE_TARGET_SN(x) u32_field_get(x, 33, AE_F_SET(x)) - - -#define PREP_IE_FLAGS(x) PREQ_IE_FLAGS(x) -#define PREP_IE_HOPCOUNT(x) PREQ_IE_HOPCOUNT(x) -#define PREP_IE_TTL(x) PREQ_IE_TTL(x) -#define PREP_IE_ORIG_ADDR(x) (AE_F_SET(x) ? x + 27 : x + 21) -#define PREP_IE_ORIG_SN(x) u32_field_get(x, 27, AE_F_SET(x)) -#define PREP_IE_LIFETIME(x) u32_field_get(x, 13, AE_F_SET(x)) -#define PREP_IE_METRIC(x) u32_field_get(x, 17, AE_F_SET(x)) -#define PREP_IE_TARGET_ADDR(x) (x + 3) -#define PREP_IE_TARGET_SN(x) u32_field_get(x, 9, 0) - -#define PERR_IE_TTL(x) (*(x)) -#define PERR_IE_TARGET_FLAGS(x) (*(x + 2)) -#define PERR_IE_TARGET_ADDR(x) (x + 3) -#define PERR_IE_TARGET_SN(x) u32_field_get(x, 9, 0) -#define PERR_IE_TARGET_RCODE(x) u16_field_get(x, 13, 0) - -#define MSEC_TO_TU(x) (x*1000/1024) -#define SN_GT(x, y) ((long) (y) - (long) (x) < 0) -#define SN_LT(x, y) ((long) (x) - (long) (y) < 0) - -#define net_traversal_jiffies(s) \ - msecs_to_jiffies(s->u.mesh.mshcfg.dot11MeshHWMPnetDiameterTraversalTime) -#define default_lifetime(s) \ - MSEC_TO_TU(s->u.mesh.mshcfg.dot11MeshHWMPactivePathTimeout) -#define min_preq_int_jiff(s) \ - (msecs_to_jiffies(s->u.mesh.mshcfg.dot11MeshHWMPpreqMinInterval)) -#define max_preq_retries(s) (s->u.mesh.mshcfg.dot11MeshHWMPmaxPREQretries) -#define disc_timeout_jiff(s) \ - msecs_to_jiffies(sdata->u.mesh.mshcfg.min_discovery_timeout) - -enum mpath_frame_type { - MPATH_PREQ = 0, - MPATH_PREP, - MPATH_PERR, - MPATH_RANN -}; - -static const u8 broadcast_addr[ETH_ALEN] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; - -static int mesh_path_sel_frame_tx(enum mpath_frame_type action, u8 flags, - u8 *orig_addr, __le32 orig_sn, u8 target_flags, u8 *target, - __le32 target_sn, const u8 *da, u8 hop_count, u8 ttl, - __le32 lifetime, __le32 metric, __le32 preq_id, - struct ieee80211_sub_if_data *sdata) -{ - struct ieee80211_local *local = sdata->local; - struct sk_buff *skb; - struct ieee80211_mgmt *mgmt; - u8 *pos, ie_len; - int hdr_len = offsetof(struct ieee80211_mgmt, u.action.u.mesh_action) + - sizeof(mgmt->u.action.u.mesh_action); - - skb = dev_alloc_skb(local->tx_headroom + - hdr_len + - 2 + 37); /* max HWMP IE */ - if (!skb) - return -1; - skb_reserve(skb, local->tx_headroom); - mgmt = (struct ieee80211_mgmt *) skb_put(skb, hdr_len); - memset(mgmt, 0, hdr_len); - mgmt->frame_control = cpu_to_le16(IEEE80211_FTYPE_MGMT | - IEEE80211_STYPE_ACTION); - - memcpy(mgmt->da, da, ETH_ALEN); - memcpy(mgmt->sa, sdata->vif.addr, ETH_ALEN); - /* BSSID == SA */ - memcpy(mgmt->bssid, sdata->vif.addr, ETH_ALEN); - mgmt->u.action.category = WLAN_CATEGORY_MESH_ACTION; - mgmt->u.action.u.mesh_action.action_code = - WLAN_MESH_ACTION_HWMP_PATH_SELECTION; - - switch (action) { - case MPATH_PREQ: - mhwmp_dbg("sending PREQ to %pM", target); - ie_len = 37; - pos = skb_put(skb, 2 + ie_len); - *pos++ = WLAN_EID_PREQ; - break; - case MPATH_PREP: - mhwmp_dbg("sending PREP to %pM", target); - ie_len = 31; - pos = skb_put(skb, 2 + ie_len); - *pos++ = WLAN_EID_PREP; - break; - case MPATH_RANN: - mhwmp_dbg("sending RANN from %pM", orig_addr); - ie_len = sizeof(struct ieee80211_rann_ie); - pos = skb_put(skb, 2 + ie_len); - *pos++ = WLAN_EID_RANN; - break; - default: - kfree_skb(skb); - return -ENOTSUPP; - break; - } - *pos++ = ie_len; - *pos++ = flags; - *pos++ = hop_count; - *pos++ = ttl; - if (action == MPATH_PREP) { - memcpy(pos, target, ETH_ALEN); - pos += ETH_ALEN; - memcpy(pos, &target_sn, 4); - pos += 4; - } else { - if (action == MPATH_PREQ) { - memcpy(pos, &preq_id, 4); - pos += 4; - } - memcpy(pos, orig_addr, ETH_ALEN); - pos += ETH_ALEN; - memcpy(pos, &orig_sn, 4); - pos += 4; - } - memcpy(pos, &lifetime, 4); /* interval for RANN */ - pos += 4; - memcpy(pos, &metric, 4); - pos += 4; - if (action == MPATH_PREQ) { - *pos++ = 1; /* destination count */ - *pos++ = target_flags; - memcpy(pos, target, ETH_ALEN); - pos += ETH_ALEN; - memcpy(pos, &target_sn, 4); - pos += 4; - } else if (action == MPATH_PREP) { - memcpy(pos, orig_addr, ETH_ALEN); - pos += ETH_ALEN; - memcpy(pos, &orig_sn, 4); - pos += 4; - } - - ieee80211_tx_skb(sdata, skb); - return 0; -} - - -/* Headroom is not adjusted. Caller should ensure that skb has sufficient - * headroom in case the frame is encrypted. */ -static void prepare_frame_for_deferred_tx(struct ieee80211_sub_if_data *sdata, - struct sk_buff *skb) -{ - struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb); - - skb_set_mac_header(skb, 0); - skb_set_network_header(skb, 0); - skb_set_transport_header(skb, 0); - - /* Send all internal mgmt frames on VO. Accordingly set TID to 7. */ - skb_set_queue_mapping(skb, IEEE80211_AC_VO); - skb->priority = 7; - - info->control.vif = &sdata->vif; - ieee80211_set_qos_hdr(sdata, skb); -} - -/** - * mesh_send_path error - Sends a PERR mesh management frame - * - * @target: broken destination - * @target_sn: SN of the broken destination - * @target_rcode: reason code for this PERR - * @ra: node this frame is addressed to - * - * Note: This function may be called with driver locks taken that the driver - * also acquires in the TX path. To avoid a deadlock we don't transmit the - * frame directly but add it to the pending queue instead. - */ -int mesh_path_error_tx(u8 ttl, u8 *target, __le32 target_sn, - __le16 target_rcode, const u8 *ra, - struct ieee80211_sub_if_data *sdata) -{ - struct ieee80211_local *local = sdata->local; - struct sk_buff *skb; - struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh; - struct ieee80211_mgmt *mgmt; - u8 *pos, ie_len; - int hdr_len = offsetof(struct ieee80211_mgmt, u.action.u.mesh_action) + - sizeof(mgmt->u.action.u.mesh_action); - - if (time_before(jiffies, ifmsh->next_perr)) - return -EAGAIN; - - skb = dev_alloc_skb(local->tx_headroom + - hdr_len + - 2 + 15 /* PERR IE */); - if (!skb) - return -1; - skb_reserve(skb, local->tx_headroom); - mgmt = (struct ieee80211_mgmt *) skb_put(skb, hdr_len); - memset(mgmt, 0, hdr_len); - mgmt->frame_control = cpu_to_le16(IEEE80211_FTYPE_MGMT | - IEEE80211_STYPE_ACTION); - - memcpy(mgmt->da, ra, ETH_ALEN); - memcpy(mgmt->sa, sdata->vif.addr, ETH_ALEN); - /* BSSID == SA */ - memcpy(mgmt->bssid, sdata->vif.addr, ETH_ALEN); - mgmt->u.action.category = WLAN_CATEGORY_MESH_ACTION; - mgmt->u.action.u.mesh_action.action_code = - WLAN_MESH_ACTION_HWMP_PATH_SELECTION; - ie_len = 15; - pos = skb_put(skb, 2 + ie_len); - *pos++ = WLAN_EID_PERR; - *pos++ = ie_len; - /* ttl */ - *pos++ = ttl; - /* number of destinations */ - *pos++ = 1; - /* - * flags bit, bit 1 is unset if we know the sequence number and - * bit 2 is set if we have a reason code - */ - *pos = 0; - if (!target_sn) - *pos |= MP_F_USN; - if (target_rcode) - *pos |= MP_F_RCODE; - pos++; - memcpy(pos, target, ETH_ALEN); - pos += ETH_ALEN; - memcpy(pos, &target_sn, 4); - pos += 4; - memcpy(pos, &target_rcode, 2); - - /* see note in function header */ - prepare_frame_for_deferred_tx(sdata, skb); - ifmsh->next_perr = TU_TO_EXP_TIME( - ifmsh->mshcfg.dot11MeshHWMPperrMinInterval); - ieee80211_add_pending_skb(local, skb); - return 0; -} - -void ieee80211s_update_metric(struct ieee80211_local *local, - struct sta_info *stainfo, struct sk_buff *skb) -{ - struct ieee80211_tx_info *txinfo = IEEE80211_SKB_CB(skb); - struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) skb->data; - int failed; - - if (!ieee80211_is_data(hdr->frame_control)) - return; - - failed = !(txinfo->flags & IEEE80211_TX_STAT_ACK); - - /* moving average, scaled to 100 */ - stainfo->fail_avg = ((80 * stainfo->fail_avg + 5) / 100 + 20 * failed); - if (stainfo->fail_avg > 95) - mesh_plink_broken(stainfo); -} - -static u32 airtime_link_metric_get(struct ieee80211_local *local, - struct sta_info *sta) -{ - struct ieee80211_supported_band *sband; - struct rate_info rinfo; - /* This should be adjusted for each device */ - int device_constant = 1 << ARITH_SHIFT; - int test_frame_len = TEST_FRAME_LEN << ARITH_SHIFT; - int s_unit = 1 << ARITH_SHIFT; - int rate, err; - u32 tx_time, estimated_retx; - u64 result; - - sband = local->hw.wiphy->bands[local->hw.conf.channel->band]; - - if (sta->fail_avg >= 100) - return MAX_METRIC; - - sta_set_rate_info_tx(sta, &sta->last_tx_rate, &rinfo); - rate = cfg80211_calculate_bitrate(&rinfo); - if (WARN_ON(!rate)) - return MAX_METRIC; - - err = (sta->fail_avg << ARITH_SHIFT) / 100; - - /* bitrate is in units of 100 Kbps, while we need rate in units of - * 1Mbps. This will be corrected on tx_time computation. - */ - tx_time = (device_constant + 10 * test_frame_len / rate); - estimated_retx = ((1 << (2 * ARITH_SHIFT)) / (s_unit - err)); - result = (tx_time * estimated_retx) >> (2 * ARITH_SHIFT) ; - return (u32)result; -} - -/** - * hwmp_route_info_get - Update routing info to originator and transmitter - * - * @sdata: local mesh subif - * @mgmt: mesh management frame - * @hwmp_ie: hwmp information element (PREP or PREQ) - * - * This function updates the path routing information to the originator and the - * transmitter of a HWMP PREQ or PREP frame. - * - * Returns: metric to frame originator or 0 if the frame should not be further - * processed - * - * Notes: this function is the only place (besides user-provided info) where - * path routing information is updated. - */ -static u32 hwmp_route_info_get(struct ieee80211_sub_if_data *sdata, - struct ieee80211_mgmt *mgmt, - u8 *hwmp_ie, enum mpath_frame_type action) -{ - struct ieee80211_local *local = sdata->local; - struct mesh_path *mpath; - struct sta_info *sta; - bool fresh_info; - u8 *orig_addr, *ta; - u32 orig_sn, orig_metric; - unsigned long orig_lifetime, exp_time; - u32 last_hop_metric, new_metric; - bool process = true; - - rcu_read_lock(); - sta = sta_info_get(sdata, mgmt->sa); - if (!sta) { - rcu_read_unlock(); - return 0; - } - - last_hop_metric = airtime_link_metric_get(local, sta); - /* Update and check originator routing info */ - fresh_info = true; - - switch (action) { - case MPATH_PREQ: - orig_addr = PREQ_IE_ORIG_ADDR(hwmp_ie); - orig_sn = PREQ_IE_ORIG_SN(hwmp_ie); - orig_lifetime = PREQ_IE_LIFETIME(hwmp_ie); - orig_metric = PREQ_IE_METRIC(hwmp_ie); - break; - case MPATH_PREP: - /* Originator here refers to the MP that was the target in the - * Path Request. We divert from the nomenclature in the draft - * so that we can easily use a single function to gather path - * information from both PREQ and PREP frames. - */ - orig_addr = PREP_IE_TARGET_ADDR(hwmp_ie); - orig_sn = PREP_IE_TARGET_SN(hwmp_ie); - orig_lifetime = PREP_IE_LIFETIME(hwmp_ie); - orig_metric = PREP_IE_METRIC(hwmp_ie); - break; - default: - rcu_read_unlock(); - return 0; - } - new_metric = orig_metric + last_hop_metric; - if (new_metric < orig_metric) - new_metric = MAX_METRIC; - exp_time = TU_TO_EXP_TIME(orig_lifetime); - - if (compare_ether_addr(orig_addr, sdata->vif.addr) == 0) { - /* This MP is the originator, we are not interested in this - * frame, except for updating transmitter's path info. - */ - process = false; - fresh_info = false; - } else { - mpath = mesh_path_lookup(orig_addr, sdata); - if (mpath) { - spin_lock_bh(&mpath->state_lock); - if (mpath->flags & MESH_PATH_FIXED) - fresh_info = false; - else if ((mpath->flags & MESH_PATH_ACTIVE) && - (mpath->flags & MESH_PATH_SN_VALID)) { - if (SN_GT(mpath->sn, orig_sn) || - (mpath->sn == orig_sn && - new_metric >= mpath->metric)) { - process = false; - fresh_info = false; - } - } - } else { - mesh_path_add(orig_addr, sdata); - mpath = mesh_path_lookup(orig_addr, sdata); - if (!mpath) { - rcu_read_unlock(); - return 0; - } - spin_lock_bh(&mpath->state_lock); - } - - if (fresh_info) { - mesh_path_assign_nexthop(mpath, sta); - mpath->flags |= MESH_PATH_SN_VALID; - mpath->metric = new_metric; - mpath->sn = orig_sn; - mpath->exp_time = time_after(mpath->exp_time, exp_time) - ? mpath->exp_time : exp_time; - mesh_path_activate(mpath); - spin_unlock_bh(&mpath->state_lock); - mesh_path_tx_pending(mpath); - /* draft says preq_id should be saved to, but there does - * not seem to be any use for it, skipping by now - */ - } else - spin_unlock_bh(&mpath->state_lock); - } - - /* Update and check transmitter routing info */ - ta = mgmt->sa; - if (compare_ether_addr(orig_addr, ta) == 0) - fresh_info = false; - else { - fresh_info = true; - - mpath = mesh_path_lookup(ta, sdata); - if (mpath) { - spin_lock_bh(&mpath->state_lock); - if ((mpath->flags & MESH_PATH_FIXED) || - ((mpath->flags & MESH_PATH_ACTIVE) && - (last_hop_metric > mpath->metric))) - fresh_info = false; - } else { - mesh_path_add(ta, sdata); - mpath = mesh_path_lookup(ta, sdata); - if (!mpath) { - rcu_read_unlock(); - return 0; - } - spin_lock_bh(&mpath->state_lock); - } - - if (fresh_info) { - mesh_path_assign_nexthop(mpath, sta); - mpath->metric = last_hop_metric; - mpath->exp_time = time_after(mpath->exp_time, exp_time) - ? mpath->exp_time : exp_time; - mesh_path_activate(mpath); - spin_unlock_bh(&mpath->state_lock); - mesh_path_tx_pending(mpath); - } else - spin_unlock_bh(&mpath->state_lock); - } - - rcu_read_unlock(); - - return process ? new_metric : 0; -} - -static void hwmp_preq_frame_process(struct ieee80211_sub_if_data *sdata, - struct ieee80211_mgmt *mgmt, - u8 *preq_elem, u32 metric) -{ - struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh; - struct mesh_path *mpath = NULL; - u8 *target_addr, *orig_addr; - const u8 *da; - u8 target_flags, ttl; - u32 orig_sn, target_sn, lifetime; - bool reply = false; - bool forward = true; - - /* Update target SN, if present */ - target_addr = PREQ_IE_TARGET_ADDR(preq_elem); - orig_addr = PREQ_IE_ORIG_ADDR(preq_elem); - target_sn = PREQ_IE_TARGET_SN(preq_elem); - orig_sn = PREQ_IE_ORIG_SN(preq_elem); - target_flags = PREQ_IE_TARGET_F(preq_elem); - - mhwmp_dbg("received PREQ from %pM", orig_addr); - - if (compare_ether_addr(target_addr, sdata->vif.addr) == 0) { - mhwmp_dbg("PREQ is for us"); - forward = false; - reply = true; - metric = 0; - if (time_after(jiffies, ifmsh->last_sn_update + - net_traversal_jiffies(sdata)) || - time_before(jiffies, ifmsh->last_sn_update)) { - target_sn = ++ifmsh->sn; - ifmsh->last_sn_update = jiffies; - } - } else { - rcu_read_lock(); - mpath = mesh_path_lookup(target_addr, sdata); - if (mpath) { - if ((!(mpath->flags & MESH_PATH_SN_VALID)) || - SN_LT(mpath->sn, target_sn)) { - mpath->sn = target_sn; - mpath->flags |= MESH_PATH_SN_VALID; - } else if ((!(target_flags & MP_F_DO)) && - (mpath->flags & MESH_PATH_ACTIVE)) { - reply = true; - metric = mpath->metric; - target_sn = mpath->sn; - if (target_flags & MP_F_RF) - target_flags |= MP_F_DO; - else - forward = false; - } - } - rcu_read_unlock(); - } - - if (reply) { - lifetime = PREQ_IE_LIFETIME(preq_elem); - ttl = ifmsh->mshcfg.element_ttl; - if (ttl != 0) { - mhwmp_dbg("replying to the PREQ"); - mesh_path_sel_frame_tx(MPATH_PREP, 0, orig_addr, - cpu_to_le32(orig_sn), 0, target_addr, - cpu_to_le32(target_sn), mgmt->sa, 0, ttl, - cpu_to_le32(lifetime), cpu_to_le32(metric), - 0, sdata); - } else - ifmsh->mshstats.dropped_frames_ttl++; - } - - if (forward && ifmsh->mshcfg.dot11MeshForwarding) { - u32 preq_id; - u8 hopcount, flags; - - ttl = PREQ_IE_TTL(preq_elem); - lifetime = PREQ_IE_LIFETIME(preq_elem); - if (ttl <= 1) { - ifmsh->mshstats.dropped_frames_ttl++; - return; - } - mhwmp_dbg("forwarding the PREQ from %pM", orig_addr); - --ttl; - flags = PREQ_IE_FLAGS(preq_elem); - preq_id = PREQ_IE_PREQ_ID(preq_elem); - hopcount = PREQ_IE_HOPCOUNT(preq_elem) + 1; - da = (mpath && mpath->is_root) ? - mpath->rann_snd_addr : broadcast_addr; - mesh_path_sel_frame_tx(MPATH_PREQ, flags, orig_addr, - cpu_to_le32(orig_sn), target_flags, target_addr, - cpu_to_le32(target_sn), da, - hopcount, ttl, cpu_to_le32(lifetime), - cpu_to_le32(metric), cpu_to_le32(preq_id), - sdata); - ifmsh->mshstats.fwded_mcast++; - ifmsh->mshstats.fwded_frames++; - } -} - - -static inline struct sta_info * -next_hop_deref_protected(struct mesh_path *mpath) -{ - return rcu_dereference_protected(mpath->next_hop, - lockdep_is_held(&mpath->state_lock)); -} - - -static void hwmp_prep_frame_process(struct ieee80211_sub_if_data *sdata, - struct ieee80211_mgmt *mgmt, - u8 *prep_elem, u32 metric) -{ - struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh; - struct mesh_path *mpath; - u8 *target_addr, *orig_addr; - u8 ttl, hopcount, flags; - u8 next_hop[ETH_ALEN]; - u32 target_sn, orig_sn, lifetime; - - mhwmp_dbg("received PREP from %pM", PREP_IE_ORIG_ADDR(prep_elem)); - - orig_addr = PREP_IE_ORIG_ADDR(prep_elem); - if (compare_ether_addr(orig_addr, sdata->vif.addr) == 0) - /* destination, no forwarding required */ - return; - - if (!ifmsh->mshcfg.dot11MeshForwarding) - return; - - ttl = PREP_IE_TTL(prep_elem); - if (ttl <= 1) { - sdata->u.mesh.mshstats.dropped_frames_ttl++; - return; - } - - rcu_read_lock(); - mpath = mesh_path_lookup(orig_addr, sdata); - if (mpath) - spin_lock_bh(&mpath->state_lock); - else - goto fail; - if (!(mpath->flags & MESH_PATH_ACTIVE)) { - spin_unlock_bh(&mpath->state_lock); - goto fail; - } - memcpy(next_hop, next_hop_deref_protected(mpath)->sta.addr, ETH_ALEN); - spin_unlock_bh(&mpath->state_lock); - --ttl; - flags = PREP_IE_FLAGS(prep_elem); - lifetime = PREP_IE_LIFETIME(prep_elem); - hopcount = PREP_IE_HOPCOUNT(prep_elem) + 1; - target_addr = PREP_IE_TARGET_ADDR(prep_elem); - target_sn = PREP_IE_TARGET_SN(prep_elem); - orig_sn = PREP_IE_ORIG_SN(prep_elem); - - mesh_path_sel_frame_tx(MPATH_PREP, flags, orig_addr, - cpu_to_le32(orig_sn), 0, target_addr, - cpu_to_le32(target_sn), next_hop, hopcount, - ttl, cpu_to_le32(lifetime), cpu_to_le32(metric), - 0, sdata); - rcu_read_unlock(); - - sdata->u.mesh.mshstats.fwded_unicast++; - sdata->u.mesh.mshstats.fwded_frames++; - return; - -fail: - rcu_read_unlock(); - sdata->u.mesh.mshstats.dropped_frames_no_route++; -} - -static void hwmp_perr_frame_process(struct ieee80211_sub_if_data *sdata, - struct ieee80211_mgmt *mgmt, u8 *perr_elem) -{ - struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh; - struct mesh_path *mpath; - u8 ttl; - u8 *ta, *target_addr; - u32 target_sn; - u16 target_rcode; - - ta = mgmt->sa; - ttl = PERR_IE_TTL(perr_elem); - if (ttl <= 1) { - ifmsh->mshstats.dropped_frames_ttl++; - return; - } - ttl--; - target_addr = PERR_IE_TARGET_ADDR(perr_elem); - target_sn = PERR_IE_TARGET_SN(perr_elem); - target_rcode = PERR_IE_TARGET_RCODE(perr_elem); - - rcu_read_lock(); - mpath = mesh_path_lookup(target_addr, sdata); - if (mpath) { - struct sta_info *sta; - - spin_lock_bh(&mpath->state_lock); - sta = next_hop_deref_protected(mpath); - if (mpath->flags & MESH_PATH_ACTIVE && - compare_ether_addr(ta, sta->sta.addr) == 0 && - (!(mpath->flags & MESH_PATH_SN_VALID) || - SN_GT(target_sn, mpath->sn))) { - mpath->flags &= ~MESH_PATH_ACTIVE; - mpath->sn = target_sn; - spin_unlock_bh(&mpath->state_lock); - if (!ifmsh->mshcfg.dot11MeshForwarding) - goto endperr; - mesh_path_error_tx(ttl, target_addr, cpu_to_le32(target_sn), - cpu_to_le16(target_rcode), - broadcast_addr, sdata); - } else - spin_unlock_bh(&mpath->state_lock); - } -endperr: - rcu_read_unlock(); -} - -static void hwmp_rann_frame_process(struct ieee80211_sub_if_data *sdata, - struct ieee80211_mgmt *mgmt, - struct ieee80211_rann_ie *rann) -{ - struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh; - struct mesh_path *mpath; - u8 ttl, flags, hopcount; - u8 *orig_addr; - u32 orig_sn, metric; - u32 interval = ifmsh->mshcfg.dot11MeshHWMPRannInterval; - bool root_is_gate; - - ttl = rann->rann_ttl; - if (ttl <= 1) { - ifmsh->mshstats.dropped_frames_ttl++; - return; - } - ttl--; - flags = rann->rann_flags; - root_is_gate = !!(flags & RANN_FLAG_IS_GATE); - orig_addr = rann->rann_addr; - orig_sn = rann->rann_seq; - hopcount = rann->rann_hopcount; - hopcount++; - metric = rann->rann_metric; - - /* Ignore our own RANNs */ - if (compare_ether_addr(orig_addr, sdata->vif.addr) == 0) - return; - - mhwmp_dbg("received RANN from %pM via neighbour %pM (is_gate=%d)", - orig_addr, mgmt->sa, root_is_gate); - - rcu_read_lock(); - mpath = mesh_path_lookup(orig_addr, sdata); - if (!mpath) { - mesh_path_add(orig_addr, sdata); - mpath = mesh_path_lookup(orig_addr, sdata); - if (!mpath) { - rcu_read_unlock(); - sdata->u.mesh.mshstats.dropped_frames_no_route++; - return; - } - } - - if ((!(mpath->flags & (MESH_PATH_ACTIVE | MESH_PATH_RESOLVING)) || - time_after(jiffies, mpath->exp_time - 1*HZ)) && - !(mpath->flags & MESH_PATH_FIXED)) { - mhwmp_dbg("%s time to refresh root mpath %pM", sdata->name, - orig_addr); - mesh_queue_preq(mpath, PREQ_Q_F_START | PREQ_Q_F_REFRESH); - } - - if (mpath->sn < orig_sn && ifmsh->mshcfg.dot11MeshForwarding) { - mesh_path_sel_frame_tx(MPATH_RANN, flags, orig_addr, - cpu_to_le32(orig_sn), - 0, NULL, 0, broadcast_addr, - hopcount, ttl, cpu_to_le32(interval), - cpu_to_le32(metric + mpath->metric), - 0, sdata); - mpath->sn = orig_sn; - } - - /* Using individually addressed PREQ for root node */ - memcpy(mpath->rann_snd_addr, mgmt->sa, ETH_ALEN); - mpath->is_root = true; - - if (root_is_gate) - mesh_path_add_gate(mpath); - - rcu_read_unlock(); -} - - -void mesh_rx_path_sel_frame(struct ieee80211_sub_if_data *sdata, - struct ieee80211_mgmt *mgmt, - size_t len) -{ - struct ieee802_11_elems elems; - size_t baselen; - u32 last_hop_metric; - struct sta_info *sta; - - /* need action_code */ - if (len < IEEE80211_MIN_ACTION_SIZE + 1) - return; - - rcu_read_lock(); - sta = sta_info_get(sdata, mgmt->sa); - if (!sta || sta->plink_state != NL80211_PLINK_ESTAB) { - rcu_read_unlock(); - return; - } - rcu_read_unlock(); - - baselen = (u8 *) mgmt->u.action.u.mesh_action.variable - (u8 *) mgmt; - ieee802_11_parse_elems(mgmt->u.action.u.mesh_action.variable, - len - baselen, &elems); - - if (elems.preq) { - if (elems.preq_len != 37) - /* Right now we support just 1 destination and no AE */ - return; - last_hop_metric = hwmp_route_info_get(sdata, mgmt, elems.preq, - MPATH_PREQ); - if (last_hop_metric) - hwmp_preq_frame_process(sdata, mgmt, elems.preq, - last_hop_metric); - } - if (elems.prep) { - if (elems.prep_len != 31) - /* Right now we support no AE */ - return; - last_hop_metric = hwmp_route_info_get(sdata, mgmt, elems.prep, - MPATH_PREP); - if (last_hop_metric) - hwmp_prep_frame_process(sdata, mgmt, elems.prep, - last_hop_metric); - } - if (elems.perr) { - if (elems.perr_len != 15) - /* Right now we support only one destination per PERR */ - return; - hwmp_perr_frame_process(sdata, mgmt, elems.perr); - } - if (elems.rann) - hwmp_rann_frame_process(sdata, mgmt, elems.rann); -} - -/** - * mesh_queue_preq - queue a PREQ to a given destination - * - * @mpath: mesh path to discover - * @flags: special attributes of the PREQ to be sent - * - * Locking: the function must be called from within a rcu read lock block. - * - */ -static void mesh_queue_preq(struct mesh_path *mpath, u8 flags) -{ - struct ieee80211_sub_if_data *sdata = mpath->sdata; - struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh; - struct mesh_preq_queue *preq_node; - - preq_node = kmalloc(sizeof(struct mesh_preq_queue), GFP_ATOMIC); - if (!preq_node) { - mhwmp_dbg("could not allocate PREQ node"); - return; - } - - spin_lock_bh(&ifmsh->mesh_preq_queue_lock); - if (ifmsh->preq_queue_len == MAX_PREQ_QUEUE_LEN) { - spin_unlock_bh(&ifmsh->mesh_preq_queue_lock); - kfree(preq_node); - if (printk_ratelimit()) - mhwmp_dbg("PREQ node queue full"); - return; - } - - spin_lock(&mpath->state_lock); - if (mpath->flags & MESH_PATH_REQ_QUEUED) { - spin_unlock(&mpath->state_lock); - spin_unlock_bh(&ifmsh->mesh_preq_queue_lock); - kfree(preq_node); - return; - } - - memcpy(preq_node->dst, mpath->dst, ETH_ALEN); - preq_node->flags = flags; - - mpath->flags |= MESH_PATH_REQ_QUEUED; - spin_unlock(&mpath->state_lock); - - list_add_tail(&preq_node->list, &ifmsh->preq_queue.list); - ++ifmsh->preq_queue_len; - spin_unlock_bh(&ifmsh->mesh_preq_queue_lock); - - if (time_after(jiffies, ifmsh->last_preq + min_preq_int_jiff(sdata))) - ieee80211_queue_work(&sdata->local->hw, &sdata->work); - - else if (time_before(jiffies, ifmsh->last_preq)) { - /* avoid long wait if did not send preqs for a long time - * and jiffies wrapped around - */ - ifmsh->last_preq = jiffies - min_preq_int_jiff(sdata) - 1; - ieee80211_queue_work(&sdata->local->hw, &sdata->work); - } else - mod_timer(&ifmsh->mesh_path_timer, ifmsh->last_preq + - min_preq_int_jiff(sdata)); -} - -/** - * mesh_path_start_discovery - launch a path discovery from the PREQ queue - * - * @sdata: local mesh subif - */ -void mesh_path_start_discovery(struct ieee80211_sub_if_data *sdata) -{ - struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh; - struct mesh_preq_queue *preq_node; - struct mesh_path *mpath; - u8 ttl, target_flags; - const u8 *da; - u32 lifetime; - - spin_lock_bh(&ifmsh->mesh_preq_queue_lock); - if (!ifmsh->preq_queue_len || - time_before(jiffies, ifmsh->last_preq + - min_preq_int_jiff(sdata))) { - spin_unlock_bh(&ifmsh->mesh_preq_queue_lock); - return; - } - - preq_node = list_first_entry(&ifmsh->preq_queue.list, - struct mesh_preq_queue, list); - list_del(&preq_node->list); - --ifmsh->preq_queue_len; - spin_unlock_bh(&ifmsh->mesh_preq_queue_lock); - - rcu_read_lock(); - mpath = mesh_path_lookup(preq_node->dst, sdata); - if (!mpath) - goto enddiscovery; - - spin_lock_bh(&mpath->state_lock); - mpath->flags &= ~MESH_PATH_REQ_QUEUED; - if (preq_node->flags & PREQ_Q_F_START) { - if (mpath->flags & MESH_PATH_RESOLVING) { - spin_unlock_bh(&mpath->state_lock); - goto enddiscovery; - } else { - mpath->flags &= ~MESH_PATH_RESOLVED; - mpath->flags |= MESH_PATH_RESOLVING; - mpath->discovery_retries = 0; - mpath->discovery_timeout = disc_timeout_jiff(sdata); - } - } else if (!(mpath->flags & MESH_PATH_RESOLVING) || - mpath->flags & MESH_PATH_RESOLVED) { - mpath->flags &= ~MESH_PATH_RESOLVING; - spin_unlock_bh(&mpath->state_lock); - goto enddiscovery; - } - - ifmsh->last_preq = jiffies; - - if (time_after(jiffies, ifmsh->last_sn_update + - net_traversal_jiffies(sdata)) || - time_before(jiffies, ifmsh->last_sn_update)) { - ++ifmsh->sn; - sdata->u.mesh.last_sn_update = jiffies; - } - lifetime = default_lifetime(sdata); - ttl = sdata->u.mesh.mshcfg.element_ttl; - if (ttl == 0) { - sdata->u.mesh.mshstats.dropped_frames_ttl++; - spin_unlock_bh(&mpath->state_lock); - goto enddiscovery; - } - - if (preq_node->flags & PREQ_Q_F_REFRESH) - target_flags = MP_F_DO; - else - target_flags = MP_F_RF; - - spin_unlock_bh(&mpath->state_lock); - da = (mpath->is_root) ? mpath->rann_snd_addr : broadcast_addr; - mesh_path_sel_frame_tx(MPATH_PREQ, 0, sdata->vif.addr, - cpu_to_le32(ifmsh->sn), target_flags, mpath->dst, - cpu_to_le32(mpath->sn), da, 0, - ttl, cpu_to_le32(lifetime), 0, - cpu_to_le32(ifmsh->preq_id++), sdata); - mod_timer(&mpath->timer, jiffies + mpath->discovery_timeout); - -enddiscovery: - rcu_read_unlock(); - kfree(preq_node); -} - -/* mesh_nexthop_resolve - lookup next hop for given skb and start path - * discovery if no forwarding information is found. - * - * @skb: 802.11 frame to be sent - * @sdata: network subif the frame will be sent through - * - * Returns: 0 if the next hop was found and -ENOENT if the frame was queued. - * skb is freeed here if no mpath could be allocated. - */ -int mesh_nexthop_resolve(struct sk_buff *skb, - struct ieee80211_sub_if_data *sdata) -{ - struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) skb->data; - struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb); - struct mesh_path *mpath; - struct sk_buff *skb_to_free = NULL; - u8 *target_addr = hdr->addr3; - int err = 0; - - rcu_read_lock(); - err = mesh_nexthop_lookup(skb, sdata); - if (!err) - goto endlookup; - - /* no nexthop found, start resolving */ - mpath = mesh_path_lookup(target_addr, sdata); - if (!mpath) { - mesh_path_add(target_addr, sdata); - mpath = mesh_path_lookup(target_addr, sdata); - if (!mpath) { - mesh_path_discard_frame(skb, sdata); - err = -ENOSPC; - goto endlookup; - } - } - - if (!(mpath->flags & MESH_PATH_RESOLVING)) - mesh_queue_preq(mpath, PREQ_Q_F_START); - - if (skb_queue_len(&mpath->frame_queue) >= MESH_FRAME_QUEUE_LEN) - skb_to_free = skb_dequeue(&mpath->frame_queue); - - info->flags |= IEEE80211_TX_INTFL_NEED_TXPROCESSING; - ieee80211_set_qos_hdr(sdata, skb); - skb_queue_tail(&mpath->frame_queue, skb); - err = -ENOENT; - if (skb_to_free) - mesh_path_discard_frame(skb_to_free, sdata); - -endlookup: - rcu_read_unlock(); - return err; -} -/** - * mesh_nexthop_lookup - put the appropriate next hop on a mesh frame. Calling - * this function is considered "using" the associated mpath, so preempt a path - * refresh if this mpath expires soon. - * - * @skb: 802.11 frame to be sent - * @sdata: network subif the frame will be sent through - * - * Returns: 0 if the next hop was found. Nonzero otherwise. - */ -int mesh_nexthop_lookup(struct sk_buff *skb, - struct ieee80211_sub_if_data *sdata) -{ - struct mesh_path *mpath; - struct sta_info *next_hop; - struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) skb->data; - u8 *target_addr = hdr->addr3; - int err = -ENOENT; - - rcu_read_lock(); - mpath = mesh_path_lookup(target_addr, sdata); - - if (!mpath || !(mpath->flags & MESH_PATH_ACTIVE)) - goto endlookup; - - if (time_after(jiffies, - mpath->exp_time - - msecs_to_jiffies(sdata->u.mesh.mshcfg.path_refresh_time)) && - !compare_ether_addr(sdata->vif.addr, hdr->addr4) && - !(mpath->flags & MESH_PATH_RESOLVING) && - !(mpath->flags & MESH_PATH_FIXED)) - mesh_queue_preq(mpath, PREQ_Q_F_START | PREQ_Q_F_REFRESH); - - next_hop = rcu_dereference(mpath->next_hop); - if (next_hop) { - memcpy(hdr->addr1, next_hop->sta.addr, ETH_ALEN); - memcpy(hdr->addr2, sdata->vif.addr, ETH_ALEN); - err = 0; - } - -endlookup: - rcu_read_unlock(); - return err; -} - -void mesh_path_timer(unsigned long data) -{ - struct mesh_path *mpath = (void *) data; - struct ieee80211_sub_if_data *sdata = mpath->sdata; - int ret; - - if (sdata->local->quiescing) - return; - - spin_lock_bh(&mpath->state_lock); - if (mpath->flags & MESH_PATH_RESOLVED || - (!(mpath->flags & MESH_PATH_RESOLVING))) { - mpath->flags &= ~(MESH_PATH_RESOLVING | MESH_PATH_RESOLVED); - spin_unlock_bh(&mpath->state_lock); - } else if (mpath->discovery_retries < max_preq_retries(sdata)) { - ++mpath->discovery_retries; - mpath->discovery_timeout *= 2; - mpath->flags &= ~MESH_PATH_REQ_QUEUED; - spin_unlock_bh(&mpath->state_lock); - mesh_queue_preq(mpath, 0); - } else { - mpath->flags = 0; - mpath->exp_time = jiffies; - spin_unlock_bh(&mpath->state_lock); - if (!mpath->is_gate && mesh_gate_num(sdata) > 0) { - ret = mesh_path_send_to_gates(mpath); - if (ret) - mhwmp_dbg("no gate was reachable"); - } else - mesh_path_flush_pending(mpath); - } -} - -void -mesh_path_tx_root_frame(struct ieee80211_sub_if_data *sdata) -{ - struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh; - u32 interval = ifmsh->mshcfg.dot11MeshHWMPRannInterval; - u8 flags; - - flags = (ifmsh->mshcfg.dot11MeshGateAnnouncementProtocol) - ? RANN_FLAG_IS_GATE : 0; - mesh_path_sel_frame_tx(MPATH_RANN, flags, sdata->vif.addr, - cpu_to_le32(++ifmsh->sn), - 0, NULL, 0, broadcast_addr, - 0, sdata->u.mesh.mshcfg.element_ttl, - cpu_to_le32(interval), 0, 0, sdata); -} diff --git a/openairITS/mac/DOT11/net/mac80211/mesh_pathtbl.c b/openairITS/mac/DOT11/net/mac80211/mesh_pathtbl.c deleted file mode 100644 index a58c048527..0000000000 --- a/openairITS/mac/DOT11/net/mac80211/mesh_pathtbl.c +++ /dev/null @@ -1,1126 +0,0 @@ -/* - * Copyright (c) 2008, 2009 open80211s Ltd. - * Author: Luis Carlos Cobo - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - */ - -#include -#include -#include -#include -#include -#include -#include -#include "wme.h" -#include "ieee80211_i.h" -#include "mesh.h" - -#define path_lookup general_path_lookup - -#ifdef CONFIG_MAC80211_VERBOSE_MPATH_DEBUG -#define mpath_dbg(fmt, args...) printk(KERN_DEBUG fmt, ##args) -#else -#define mpath_dbg(fmt, args...) do { (void)(0); } while (0) -#endif - -/* There will be initially 2^INIT_PATHS_SIZE_ORDER buckets */ -#define INIT_PATHS_SIZE_ORDER 2 - -/* Keep the mean chain length below this constant */ -#define MEAN_CHAIN_LEN 2 - -#define MPATH_EXPIRED(mpath) ((mpath->flags & MESH_PATH_ACTIVE) && \ - time_after(jiffies, mpath->exp_time) && \ - !(mpath->flags & MESH_PATH_FIXED)) - -struct mpath_node { - struct hlist_node list; - struct rcu_head rcu; - /* This indirection allows two different tables to point to the same - * mesh_path structure, useful when resizing - */ - struct mesh_path *mpath; -}; - -static struct mesh_table __rcu *mesh_paths; -static struct mesh_table __rcu *mpp_paths; /* Store paths for MPP&MAP */ - -int mesh_paths_generation; - -/* This lock will have the grow table function as writer and add / delete nodes - * as readers. RCU provides sufficient protection only when reading the table - * (i.e. doing lookups). Adding or adding or removing nodes requires we take - * the read lock or we risk operating on an old table. The write lock is only - * needed when modifying the number of buckets a table. - */ -static DEFINE_RWLOCK(pathtbl_resize_lock); - - -static inline struct mesh_table *resize_dereference_mesh_paths(void) -{ - return rcu_dereference_protected(mesh_paths, - lockdep_is_held(&pathtbl_resize_lock)); -} - -static inline struct mesh_table *resize_dereference_mpp_paths(void) -{ - return rcu_dereference_protected(mpp_paths, - lockdep_is_held(&pathtbl_resize_lock)); -} - -/* - * CAREFUL -- "tbl" must not be an expression, - * in particular not an rcu_dereference(), since - * it's used twice. So it is illegal to do - * for_each_mesh_entry(rcu_dereference(...), ...) - */ -#define for_each_mesh_entry(tbl, p, node, i) \ - for (i = 0; i <= tbl->hash_mask; i++) \ - hlist_for_each_entry_rcu(node, p, &tbl->hash_buckets[i], list) - - -static struct mesh_table *mesh_table_alloc(int size_order) -{ - int i; - struct mesh_table *newtbl; - - newtbl = kmalloc(sizeof(struct mesh_table), GFP_ATOMIC); - if (!newtbl) - return NULL; - - newtbl->hash_buckets = kzalloc(sizeof(struct hlist_head) * - (1 << size_order), GFP_ATOMIC); - - if (!newtbl->hash_buckets) { - kfree(newtbl); - return NULL; - } - - newtbl->hashwlock = kmalloc(sizeof(spinlock_t) * - (1 << size_order), GFP_ATOMIC); - if (!newtbl->hashwlock) { - kfree(newtbl->hash_buckets); - kfree(newtbl); - return NULL; - } - - newtbl->size_order = size_order; - newtbl->hash_mask = (1 << size_order) - 1; - atomic_set(&newtbl->entries, 0); - get_random_bytes(&newtbl->hash_rnd, - sizeof(newtbl->hash_rnd)); - for (i = 0; i <= newtbl->hash_mask; i++) - spin_lock_init(&newtbl->hashwlock[i]); - spin_lock_init(&newtbl->gates_lock); - - return newtbl; -} - -static void __mesh_table_free(struct mesh_table *tbl) -{ - kfree(tbl->hash_buckets); - kfree(tbl->hashwlock); - kfree(tbl); -} - -static void mesh_table_free(struct mesh_table *tbl, bool free_leafs) -{ - struct hlist_head *mesh_hash; - struct hlist_node *p, *q; - struct mpath_node *gate; - int i; - - mesh_hash = tbl->hash_buckets; - for (i = 0; i <= tbl->hash_mask; i++) { - spin_lock_bh(&tbl->hashwlock[i]); - hlist_for_each_safe(p, q, &mesh_hash[i]) { - tbl->free_node(p, free_leafs); - atomic_dec(&tbl->entries); - } - spin_unlock_bh(&tbl->hashwlock[i]); - } - if (free_leafs) { - spin_lock_bh(&tbl->gates_lock); - hlist_for_each_entry_safe(gate, p, q, - tbl->known_gates, list) { - hlist_del(&gate->list); - kfree(gate); - } - kfree(tbl->known_gates); - spin_unlock_bh(&tbl->gates_lock); - } - - __mesh_table_free(tbl); -} - -static int mesh_table_grow(struct mesh_table *oldtbl, - struct mesh_table *newtbl) -{ - struct hlist_head *oldhash; - struct hlist_node *p, *q; - int i; - - if (atomic_read(&oldtbl->entries) - < oldtbl->mean_chain_len * (oldtbl->hash_mask + 1)) - return -EAGAIN; - - newtbl->free_node = oldtbl->free_node; - newtbl->mean_chain_len = oldtbl->mean_chain_len; - newtbl->copy_node = oldtbl->copy_node; - newtbl->known_gates = oldtbl->known_gates; - atomic_set(&newtbl->entries, atomic_read(&oldtbl->entries)); - - oldhash = oldtbl->hash_buckets; - for (i = 0; i <= oldtbl->hash_mask; i++) - hlist_for_each(p, &oldhash[i]) - if (oldtbl->copy_node(p, newtbl) < 0) - goto errcopy; - - return 0; - -errcopy: - for (i = 0; i <= newtbl->hash_mask; i++) { - hlist_for_each_safe(p, q, &newtbl->hash_buckets[i]) - oldtbl->free_node(p, 0); - } - return -ENOMEM; -} - -static u32 mesh_table_hash(u8 *addr, struct ieee80211_sub_if_data *sdata, - struct mesh_table *tbl) -{ - /* Use last four bytes of hw addr and interface index as hash index */ - return jhash_2words(*(u32 *)(addr+2), sdata->dev->ifindex, tbl->hash_rnd) - & tbl->hash_mask; -} - - -/** - * - * mesh_path_assign_nexthop - update mesh path next hop - * - * @mpath: mesh path to update - * @sta: next hop to assign - * - * Locking: mpath->state_lock must be held when calling this function - */ -void mesh_path_assign_nexthop(struct mesh_path *mpath, struct sta_info *sta) -{ - struct sk_buff *skb; - struct ieee80211_hdr *hdr; - struct sk_buff_head tmpq; - unsigned long flags; - - rcu_assign_pointer(mpath->next_hop, sta); - - __skb_queue_head_init(&tmpq); - - spin_lock_irqsave(&mpath->frame_queue.lock, flags); - - while ((skb = __skb_dequeue(&mpath->frame_queue)) != NULL) { - hdr = (struct ieee80211_hdr *) skb->data; - memcpy(hdr->addr1, sta->sta.addr, ETH_ALEN); - memcpy(hdr->addr2, mpath->sdata->vif.addr, ETH_ALEN); - __skb_queue_tail(&tmpq, skb); - } - - skb_queue_splice(&tmpq, &mpath->frame_queue); - spin_unlock_irqrestore(&mpath->frame_queue.lock, flags); -} - -static void prepare_for_gate(struct sk_buff *skb, char *dst_addr, - struct mesh_path *gate_mpath) -{ - struct ieee80211_hdr *hdr; - struct ieee80211s_hdr *mshdr; - int mesh_hdrlen, hdrlen; - char *next_hop; - - hdr = (struct ieee80211_hdr *) skb->data; - hdrlen = ieee80211_hdrlen(hdr->frame_control); - mshdr = (struct ieee80211s_hdr *) (skb->data + hdrlen); - - if (!(mshdr->flags & MESH_FLAGS_AE)) { - /* size of the fixed part of the mesh header */ - mesh_hdrlen = 6; - - /* make room for the two extended addresses */ - skb_push(skb, 2 * ETH_ALEN); - memmove(skb->data, hdr, hdrlen + mesh_hdrlen); - - hdr = (struct ieee80211_hdr *) skb->data; - - /* we preserve the previous mesh header and only add - * the new addreses */ - mshdr = (struct ieee80211s_hdr *) (skb->data + hdrlen); - mshdr->flags = MESH_FLAGS_AE_A5_A6; - memcpy(mshdr->eaddr1, hdr->addr3, ETH_ALEN); - memcpy(mshdr->eaddr2, hdr->addr4, ETH_ALEN); - } - - /* update next hop */ - hdr = (struct ieee80211_hdr *) skb->data; - rcu_read_lock(); - next_hop = rcu_dereference(gate_mpath->next_hop)->sta.addr; - memcpy(hdr->addr1, next_hop, ETH_ALEN); - rcu_read_unlock(); - memcpy(hdr->addr2, gate_mpath->sdata->vif.addr, ETH_ALEN); - memcpy(hdr->addr3, dst_addr, ETH_ALEN); -} - -/** - * - * mesh_path_move_to_queue - Move or copy frames from one mpath queue to another - * - * This function is used to transfer or copy frames from an unresolved mpath to - * a gate mpath. The function also adds the Address Extension field and - * updates the next hop. - * - * If a frame already has an Address Extension field, only the next hop and - * destination addresses are updated. - * - * The gate mpath must be an active mpath with a valid mpath->next_hop. - * - * @mpath: An active mpath the frames will be sent to (i.e. the gate) - * @from_mpath: The failed mpath - * @copy: When true, copy all the frames to the new mpath queue. When false, - * move them. - */ -static void mesh_path_move_to_queue(struct mesh_path *gate_mpath, - struct mesh_path *from_mpath, - bool copy) -{ - struct sk_buff *skb, *cp_skb = NULL; - struct sk_buff_head gateq, failq; - unsigned long flags; - int num_skbs; - - BUG_ON(gate_mpath == from_mpath); - BUG_ON(!gate_mpath->next_hop); - - __skb_queue_head_init(&gateq); - __skb_queue_head_init(&failq); - - spin_lock_irqsave(&from_mpath->frame_queue.lock, flags); - skb_queue_splice_init(&from_mpath->frame_queue, &failq); - spin_unlock_irqrestore(&from_mpath->frame_queue.lock, flags); - - num_skbs = skb_queue_len(&failq); - - while (num_skbs--) { - skb = __skb_dequeue(&failq); - if (copy) { - cp_skb = skb_copy(skb, GFP_ATOMIC); - if (cp_skb) - __skb_queue_tail(&failq, cp_skb); - } - - prepare_for_gate(skb, gate_mpath->dst, gate_mpath); - __skb_queue_tail(&gateq, skb); - } - - spin_lock_irqsave(&gate_mpath->frame_queue.lock, flags); - skb_queue_splice(&gateq, &gate_mpath->frame_queue); - mpath_dbg("Mpath queue for gate %pM has %d frames\n", - gate_mpath->dst, - skb_queue_len(&gate_mpath->frame_queue)); - spin_unlock_irqrestore(&gate_mpath->frame_queue.lock, flags); - - if (!copy) - return; - - spin_lock_irqsave(&from_mpath->frame_queue.lock, flags); - skb_queue_splice(&failq, &from_mpath->frame_queue); - spin_unlock_irqrestore(&from_mpath->frame_queue.lock, flags); -} - - -static struct mesh_path *mpath_lookup(struct mesh_table *tbl, u8 *dst, - struct ieee80211_sub_if_data *sdata) -{ - struct mesh_path *mpath; - struct hlist_node *n; - struct hlist_head *bucket; - struct mpath_node *node; - - bucket = &tbl->hash_buckets[mesh_table_hash(dst, sdata, tbl)]; - hlist_for_each_entry_rcu(node, n, bucket, list) { - mpath = node->mpath; - if (mpath->sdata == sdata && - compare_ether_addr(dst, mpath->dst) == 0) { - if (MPATH_EXPIRED(mpath)) { - spin_lock_bh(&mpath->state_lock); - mpath->flags &= ~MESH_PATH_ACTIVE; - spin_unlock_bh(&mpath->state_lock); - } - return mpath; - } - } - return NULL; -} - -/** - * mesh_path_lookup - look up a path in the mesh path table - * @dst: hardware address (ETH_ALEN length) of destination - * @sdata: local subif - * - * Returns: pointer to the mesh path structure, or NULL if not found - * - * Locking: must be called within a read rcu section. - */ -struct mesh_path *mesh_path_lookup(u8 *dst, struct ieee80211_sub_if_data *sdata) -{ - return mpath_lookup(rcu_dereference(mesh_paths), dst, sdata); -} - -struct mesh_path *mpp_path_lookup(u8 *dst, struct ieee80211_sub_if_data *sdata) -{ - return mpath_lookup(rcu_dereference(mpp_paths), dst, sdata); -} - - -/** - * mesh_path_lookup_by_idx - look up a path in the mesh path table by its index - * @idx: index - * @sdata: local subif, or NULL for all entries - * - * Returns: pointer to the mesh path structure, or NULL if not found. - * - * Locking: must be called within a read rcu section. - */ -struct mesh_path *mesh_path_lookup_by_idx(int idx, struct ieee80211_sub_if_data *sdata) -{ - struct mesh_table *tbl = rcu_dereference(mesh_paths); - struct mpath_node *node; - struct hlist_node *p; - int i; - int j = 0; - - for_each_mesh_entry(tbl, p, node, i) { - if (sdata && node->mpath->sdata != sdata) - continue; - if (j++ == idx) { - if (MPATH_EXPIRED(node->mpath)) { - spin_lock_bh(&node->mpath->state_lock); - node->mpath->flags &= ~MESH_PATH_ACTIVE; - spin_unlock_bh(&node->mpath->state_lock); - } - return node->mpath; - } - } - - return NULL; -} - -/** - * mesh_path_add_gate - add the given mpath to a mesh gate to our path table - * @mpath: gate path to add to table - */ -int mesh_path_add_gate(struct mesh_path *mpath) -{ - struct mesh_table *tbl; - struct mpath_node *gate, *new_gate; - struct hlist_node *n; - int err; - - rcu_read_lock(); - tbl = rcu_dereference(mesh_paths); - - hlist_for_each_entry_rcu(gate, n, tbl->known_gates, list) - if (gate->mpath == mpath) { - err = -EEXIST; - goto err_rcu; - } - - new_gate = kzalloc(sizeof(struct mpath_node), GFP_ATOMIC); - if (!new_gate) { - err = -ENOMEM; - goto err_rcu; - } - - mpath->is_gate = true; - mpath->sdata->u.mesh.num_gates++; - new_gate->mpath = mpath; - spin_lock_bh(&tbl->gates_lock); - hlist_add_head_rcu(&new_gate->list, tbl->known_gates); - spin_unlock_bh(&tbl->gates_lock); - rcu_read_unlock(); - mpath_dbg("Mesh path (%s): Recorded new gate: %pM. %d known gates\n", - mpath->sdata->name, mpath->dst, - mpath->sdata->u.mesh.num_gates); - return 0; -err_rcu: - rcu_read_unlock(); - return err; -} - -/** - * mesh_gate_del - remove a mesh gate from the list of known gates - * @tbl: table which holds our list of known gates - * @mpath: gate mpath - * - * Returns: 0 on success - * - * Locking: must be called inside rcu_read_lock() section - */ -static int mesh_gate_del(struct mesh_table *tbl, struct mesh_path *mpath) -{ - struct mpath_node *gate; - struct hlist_node *p, *q; - - hlist_for_each_entry_safe(gate, p, q, tbl->known_gates, list) - if (gate->mpath == mpath) { - spin_lock_bh(&tbl->gates_lock); - hlist_del_rcu(&gate->list); - kfree_rcu(gate, rcu); - spin_unlock_bh(&tbl->gates_lock); - mpath->sdata->u.mesh.num_gates--; - mpath->is_gate = false; - mpath_dbg("Mesh path (%s): Deleted gate: %pM. " - "%d known gates\n", mpath->sdata->name, - mpath->dst, mpath->sdata->u.mesh.num_gates); - break; - } - - return 0; -} - -/** - * mesh_gate_num - number of gates known to this interface - * @sdata: subif data - */ -int mesh_gate_num(struct ieee80211_sub_if_data *sdata) -{ - return sdata->u.mesh.num_gates; -} - -/** - * mesh_path_add - allocate and add a new path to the mesh path table - * @addr: destination address of the path (ETH_ALEN length) - * @sdata: local subif - * - * Returns: 0 on success - * - * State: the initial state of the new path is set to 0 - */ -int mesh_path_add(u8 *dst, struct ieee80211_sub_if_data *sdata) -{ - struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh; - struct ieee80211_local *local = sdata->local; - struct mesh_table *tbl; - struct mesh_path *mpath, *new_mpath; - struct mpath_node *node, *new_node; - struct hlist_head *bucket; - struct hlist_node *n; - int grow = 0; - int err = 0; - u32 hash_idx; - - if (compare_ether_addr(dst, sdata->vif.addr) == 0) - /* never add ourselves as neighbours */ - return -ENOTSUPP; - - if (is_multicast_ether_addr(dst)) - return -ENOTSUPP; - - if (atomic_add_unless(&sdata->u.mesh.mpaths, 1, MESH_MAX_MPATHS) == 0) - return -ENOSPC; - - err = -ENOMEM; - new_mpath = kzalloc(sizeof(struct mesh_path), GFP_ATOMIC); - if (!new_mpath) - goto err_path_alloc; - - new_node = kmalloc(sizeof(struct mpath_node), GFP_ATOMIC); - if (!new_node) - goto err_node_alloc; - - read_lock_bh(&pathtbl_resize_lock); - memcpy(new_mpath->dst, dst, ETH_ALEN); - new_mpath->sdata = sdata; - new_mpath->flags = 0; - skb_queue_head_init(&new_mpath->frame_queue); - new_node->mpath = new_mpath; - new_mpath->timer.data = (unsigned long) new_mpath; - new_mpath->timer.function = mesh_path_timer; - new_mpath->exp_time = jiffies; - spin_lock_init(&new_mpath->state_lock); - init_timer(&new_mpath->timer); - - tbl = resize_dereference_mesh_paths(); - - hash_idx = mesh_table_hash(dst, sdata, tbl); - bucket = &tbl->hash_buckets[hash_idx]; - - spin_lock(&tbl->hashwlock[hash_idx]); - - err = -EEXIST; - hlist_for_each_entry(node, n, bucket, list) { - mpath = node->mpath; - if (mpath->sdata == sdata && - compare_ether_addr(dst, mpath->dst) == 0) - goto err_exists; - } - - hlist_add_head_rcu(&new_node->list, bucket); - if (atomic_inc_return(&tbl->entries) >= - tbl->mean_chain_len * (tbl->hash_mask + 1)) - grow = 1; - - mesh_paths_generation++; - - spin_unlock(&tbl->hashwlock[hash_idx]); - read_unlock_bh(&pathtbl_resize_lock); - if (grow) { - set_bit(MESH_WORK_GROW_MPATH_TABLE, &ifmsh->wrkq_flags); - ieee80211_queue_work(&local->hw, &sdata->work); - } - return 0; - -err_exists: - spin_unlock(&tbl->hashwlock[hash_idx]); - read_unlock_bh(&pathtbl_resize_lock); - kfree(new_node); -err_node_alloc: - kfree(new_mpath); -err_path_alloc: - atomic_dec(&sdata->u.mesh.mpaths); - return err; -} - -static void mesh_table_free_rcu(struct rcu_head *rcu) -{ - struct mesh_table *tbl = container_of(rcu, struct mesh_table, rcu_head); - - mesh_table_free(tbl, false); -} - -void mesh_mpath_table_grow(void) -{ - struct mesh_table *oldtbl, *newtbl; - - write_lock_bh(&pathtbl_resize_lock); - oldtbl = resize_dereference_mesh_paths(); - newtbl = mesh_table_alloc(oldtbl->size_order + 1); - if (!newtbl) - goto out; - if (mesh_table_grow(oldtbl, newtbl) < 0) { - __mesh_table_free(newtbl); - goto out; - } - rcu_assign_pointer(mesh_paths, newtbl); - - call_rcu(&oldtbl->rcu_head, mesh_table_free_rcu); - - out: - write_unlock_bh(&pathtbl_resize_lock); -} - -void mesh_mpp_table_grow(void) -{ - struct mesh_table *oldtbl, *newtbl; - - write_lock_bh(&pathtbl_resize_lock); - oldtbl = resize_dereference_mpp_paths(); - newtbl = mesh_table_alloc(oldtbl->size_order + 1); - if (!newtbl) - goto out; - if (mesh_table_grow(oldtbl, newtbl) < 0) { - __mesh_table_free(newtbl); - goto out; - } - rcu_assign_pointer(mpp_paths, newtbl); - call_rcu(&oldtbl->rcu_head, mesh_table_free_rcu); - - out: - write_unlock_bh(&pathtbl_resize_lock); -} - -int mpp_path_add(u8 *dst, u8 *mpp, struct ieee80211_sub_if_data *sdata) -{ - struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh; - struct ieee80211_local *local = sdata->local; - struct mesh_table *tbl; - struct mesh_path *mpath, *new_mpath; - struct mpath_node *node, *new_node; - struct hlist_head *bucket; - struct hlist_node *n; - int grow = 0; - int err = 0; - u32 hash_idx; - - if (compare_ether_addr(dst, sdata->vif.addr) == 0) - /* never add ourselves as neighbours */ - return -ENOTSUPP; - - if (is_multicast_ether_addr(dst)) - return -ENOTSUPP; - - err = -ENOMEM; - new_mpath = kzalloc(sizeof(struct mesh_path), GFP_ATOMIC); - if (!new_mpath) - goto err_path_alloc; - - new_node = kmalloc(sizeof(struct mpath_node), GFP_ATOMIC); - if (!new_node) - goto err_node_alloc; - - read_lock_bh(&pathtbl_resize_lock); - memcpy(new_mpath->dst, dst, ETH_ALEN); - memcpy(new_mpath->mpp, mpp, ETH_ALEN); - new_mpath->sdata = sdata; - new_mpath->flags = 0; - skb_queue_head_init(&new_mpath->frame_queue); - new_node->mpath = new_mpath; - init_timer(&new_mpath->timer); - new_mpath->exp_time = jiffies; - spin_lock_init(&new_mpath->state_lock); - - tbl = resize_dereference_mpp_paths(); - - hash_idx = mesh_table_hash(dst, sdata, tbl); - bucket = &tbl->hash_buckets[hash_idx]; - - spin_lock(&tbl->hashwlock[hash_idx]); - - err = -EEXIST; - hlist_for_each_entry(node, n, bucket, list) { - mpath = node->mpath; - if (mpath->sdata == sdata && - compare_ether_addr(dst, mpath->dst) == 0) - goto err_exists; - } - - hlist_add_head_rcu(&new_node->list, bucket); - if (atomic_inc_return(&tbl->entries) >= - tbl->mean_chain_len * (tbl->hash_mask + 1)) - grow = 1; - - spin_unlock(&tbl->hashwlock[hash_idx]); - read_unlock_bh(&pathtbl_resize_lock); - if (grow) { - set_bit(MESH_WORK_GROW_MPP_TABLE, &ifmsh->wrkq_flags); - ieee80211_queue_work(&local->hw, &sdata->work); - } - return 0; - -err_exists: - spin_unlock(&tbl->hashwlock[hash_idx]); - read_unlock_bh(&pathtbl_resize_lock); - kfree(new_node); -err_node_alloc: - kfree(new_mpath); -err_path_alloc: - return err; -} - - -/** - * mesh_plink_broken - deactivates paths and sends perr when a link breaks - * - * @sta: broken peer link - * - * This function must be called from the rate control algorithm if enough - * delivery errors suggest that a peer link is no longer usable. - */ -void mesh_plink_broken(struct sta_info *sta) -{ - struct mesh_table *tbl; - static const u8 bcast[ETH_ALEN] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; - struct mesh_path *mpath; - struct mpath_node *node; - struct hlist_node *p; - struct ieee80211_sub_if_data *sdata = sta->sdata; - int i; - __le16 reason = cpu_to_le16(WLAN_REASON_MESH_PATH_DEST_UNREACHABLE); - - rcu_read_lock(); - tbl = rcu_dereference(mesh_paths); - for_each_mesh_entry(tbl, p, node, i) { - mpath = node->mpath; - if (rcu_dereference(mpath->next_hop) == sta && - mpath->flags & MESH_PATH_ACTIVE && - !(mpath->flags & MESH_PATH_FIXED)) { - spin_lock_bh(&mpath->state_lock); - mpath->flags &= ~MESH_PATH_ACTIVE; - ++mpath->sn; - spin_unlock_bh(&mpath->state_lock); - mesh_path_error_tx(sdata->u.mesh.mshcfg.element_ttl, - mpath->dst, cpu_to_le32(mpath->sn), - reason, bcast, sdata); - } - } - rcu_read_unlock(); -} - -static void mesh_path_node_reclaim(struct rcu_head *rp) -{ - struct mpath_node *node = container_of(rp, struct mpath_node, rcu); - struct ieee80211_sub_if_data *sdata = node->mpath->sdata; - - del_timer_sync(&node->mpath->timer); - atomic_dec(&sdata->u.mesh.mpaths); - kfree(node->mpath); - kfree(node); -} - -/* needs to be called with the corresponding hashwlock taken */ -static void __mesh_path_del(struct mesh_table *tbl, struct mpath_node *node) -{ - struct mesh_path *mpath; - mpath = node->mpath; - spin_lock(&mpath->state_lock); - mpath->flags |= MESH_PATH_RESOLVING; - if (mpath->is_gate) - mesh_gate_del(tbl, mpath); - hlist_del_rcu(&node->list); - call_rcu(&node->rcu, mesh_path_node_reclaim); - spin_unlock(&mpath->state_lock); - atomic_dec(&tbl->entries); -} - -/** - * mesh_path_flush_by_nexthop - Deletes mesh paths if their next hop matches - * - * @sta - mesh peer to match - * - * RCU notes: this function is called when a mesh plink transitions from - * PLINK_ESTAB to any other state, since PLINK_ESTAB state is the only one that - * allows path creation. This will happen before the sta can be freed (because - * sta_info_destroy() calls this) so any reader in a rcu read block will be - * protected against the plink disappearing. - */ -void mesh_path_flush_by_nexthop(struct sta_info *sta) -{ - struct mesh_table *tbl; - struct mesh_path *mpath; - struct mpath_node *node; - struct hlist_node *p; - int i; - - rcu_read_lock(); - read_lock_bh(&pathtbl_resize_lock); - tbl = resize_dereference_mesh_paths(); - for_each_mesh_entry(tbl, p, node, i) { - mpath = node->mpath; - if (rcu_dereference(mpath->next_hop) == sta) { - spin_lock(&tbl->hashwlock[i]); - __mesh_path_del(tbl, node); - spin_unlock(&tbl->hashwlock[i]); - } - } - read_unlock_bh(&pathtbl_resize_lock); - rcu_read_unlock(); -} - -static void table_flush_by_iface(struct mesh_table *tbl, - struct ieee80211_sub_if_data *sdata) -{ - struct mesh_path *mpath; - struct mpath_node *node; - struct hlist_node *p; - int i; - - WARN_ON(!rcu_read_lock_held()); - for_each_mesh_entry(tbl, p, node, i) { - mpath = node->mpath; - if (mpath->sdata != sdata) - continue; - spin_lock_bh(&tbl->hashwlock[i]); - __mesh_path_del(tbl, node); - spin_unlock_bh(&tbl->hashwlock[i]); - } -} - -/** - * mesh_path_flush_by_iface - Deletes all mesh paths associated with a given iface - * - * This function deletes both mesh paths as well as mesh portal paths. - * - * @sdata - interface data to match - * - */ -void mesh_path_flush_by_iface(struct ieee80211_sub_if_data *sdata) -{ - struct mesh_table *tbl; - - rcu_read_lock(); - read_lock_bh(&pathtbl_resize_lock); - tbl = resize_dereference_mesh_paths(); - table_flush_by_iface(tbl, sdata); - tbl = resize_dereference_mpp_paths(); - table_flush_by_iface(tbl, sdata); - read_unlock_bh(&pathtbl_resize_lock); - rcu_read_unlock(); -} - -/** - * mesh_path_del - delete a mesh path from the table - * - * @addr: dst address (ETH_ALEN length) - * @sdata: local subif - * - * Returns: 0 if successful - */ -int mesh_path_del(u8 *addr, struct ieee80211_sub_if_data *sdata) -{ - struct mesh_table *tbl; - struct mesh_path *mpath; - struct mpath_node *node; - struct hlist_head *bucket; - struct hlist_node *n; - int hash_idx; - int err = 0; - - read_lock_bh(&pathtbl_resize_lock); - tbl = resize_dereference_mesh_paths(); - hash_idx = mesh_table_hash(addr, sdata, tbl); - bucket = &tbl->hash_buckets[hash_idx]; - - spin_lock(&tbl->hashwlock[hash_idx]); - hlist_for_each_entry(node, n, bucket, list) { - mpath = node->mpath; - if (mpath->sdata == sdata && - compare_ether_addr(addr, mpath->dst) == 0) { - __mesh_path_del(tbl, node); - goto enddel; - } - } - - err = -ENXIO; -enddel: - mesh_paths_generation++; - spin_unlock(&tbl->hashwlock[hash_idx]); - read_unlock_bh(&pathtbl_resize_lock); - return err; -} - -/** - * mesh_path_tx_pending - sends pending frames in a mesh path queue - * - * @mpath: mesh path to activate - * - * Locking: the state_lock of the mpath structure must NOT be held when calling - * this function. - */ -void mesh_path_tx_pending(struct mesh_path *mpath) -{ - if (mpath->flags & MESH_PATH_ACTIVE) - ieee80211_add_pending_skbs(mpath->sdata->local, - &mpath->frame_queue); -} - -/** - * mesh_path_send_to_gates - sends pending frames to all known mesh gates - * - * @mpath: mesh path whose queue will be emptied - * - * If there is only one gate, the frames are transferred from the failed mpath - * queue to that gate's queue. If there are more than one gates, the frames - * are copied from each gate to the next. After frames are copied, the - * mpath queues are emptied onto the transmission queue. - */ -int mesh_path_send_to_gates(struct mesh_path *mpath) -{ - struct ieee80211_sub_if_data *sdata = mpath->sdata; - struct hlist_node *n; - struct mesh_table *tbl; - struct mesh_path *from_mpath = mpath; - struct mpath_node *gate = NULL; - bool copy = false; - struct hlist_head *known_gates; - - rcu_read_lock(); - tbl = rcu_dereference(mesh_paths); - known_gates = tbl->known_gates; - rcu_read_unlock(); - - if (!known_gates) - return -EHOSTUNREACH; - - hlist_for_each_entry_rcu(gate, n, known_gates, list) { - if (gate->mpath->sdata != sdata) - continue; - - if (gate->mpath->flags & MESH_PATH_ACTIVE) { - mpath_dbg("Forwarding to %pM\n", gate->mpath->dst); - mesh_path_move_to_queue(gate->mpath, from_mpath, copy); - from_mpath = gate->mpath; - copy = true; - } else { - mpath_dbg("Not forwarding %p\n", gate->mpath); - mpath_dbg("flags %x\n", gate->mpath->flags); - } - } - - hlist_for_each_entry_rcu(gate, n, known_gates, list) - if (gate->mpath->sdata == sdata) { - mpath_dbg("Sending to %pM\n", gate->mpath->dst); - mesh_path_tx_pending(gate->mpath); - } - - return (from_mpath == mpath) ? -EHOSTUNREACH : 0; -} - -/** - * mesh_path_discard_frame - discard a frame whose path could not be resolved - * - * @skb: frame to discard - * @sdata: network subif the frame was to be sent through - * - * Locking: the function must me called within a rcu_read_lock region - */ -void mesh_path_discard_frame(struct sk_buff *skb, - struct ieee80211_sub_if_data *sdata) -{ - kfree_skb(skb); - sdata->u.mesh.mshstats.dropped_frames_no_route++; -} - -/** - * mesh_path_flush_pending - free the pending queue of a mesh path - * - * @mpath: mesh path whose queue has to be freed - * - * Locking: the function must me called within a rcu_read_lock region - */ -void mesh_path_flush_pending(struct mesh_path *mpath) -{ - struct sk_buff *skb; - - while ((skb = skb_dequeue(&mpath->frame_queue)) != NULL) - mesh_path_discard_frame(skb, mpath->sdata); -} - -/** - * mesh_path_fix_nexthop - force a specific next hop for a mesh path - * - * @mpath: the mesh path to modify - * @next_hop: the next hop to force - * - * Locking: this function must be called holding mpath->state_lock - */ -void mesh_path_fix_nexthop(struct mesh_path *mpath, struct sta_info *next_hop) -{ - spin_lock_bh(&mpath->state_lock); - mesh_path_assign_nexthop(mpath, next_hop); - mpath->sn = 0xffff; - mpath->metric = 0; - mpath->hop_count = 0; - mpath->exp_time = 0; - mpath->flags |= MESH_PATH_FIXED; - mesh_path_activate(mpath); - spin_unlock_bh(&mpath->state_lock); - mesh_path_tx_pending(mpath); -} - -static void mesh_path_node_free(struct hlist_node *p, bool free_leafs) -{ - struct mesh_path *mpath; - struct mpath_node *node = hlist_entry(p, struct mpath_node, list); - mpath = node->mpath; - hlist_del_rcu(p); - if (free_leafs) { - del_timer_sync(&mpath->timer); - kfree(mpath); - } - kfree(node); -} - -static int mesh_path_node_copy(struct hlist_node *p, struct mesh_table *newtbl) -{ - struct mesh_path *mpath; - struct mpath_node *node, *new_node; - u32 hash_idx; - - new_node = kmalloc(sizeof(struct mpath_node), GFP_ATOMIC); - if (new_node == NULL) - return -ENOMEM; - - node = hlist_entry(p, struct mpath_node, list); - mpath = node->mpath; - new_node->mpath = mpath; - hash_idx = mesh_table_hash(mpath->dst, mpath->sdata, newtbl); - hlist_add_head(&new_node->list, - &newtbl->hash_buckets[hash_idx]); - return 0; -} - -int mesh_pathtbl_init(void) -{ - struct mesh_table *tbl_path, *tbl_mpp; - int ret; - - tbl_path = mesh_table_alloc(INIT_PATHS_SIZE_ORDER); - if (!tbl_path) - return -ENOMEM; - tbl_path->free_node = &mesh_path_node_free; - tbl_path->copy_node = &mesh_path_node_copy; - tbl_path->mean_chain_len = MEAN_CHAIN_LEN; - tbl_path->known_gates = kzalloc(sizeof(struct hlist_head), GFP_ATOMIC); - if (!tbl_path->known_gates) { - ret = -ENOMEM; - goto free_path; - } - INIT_HLIST_HEAD(tbl_path->known_gates); - - - tbl_mpp = mesh_table_alloc(INIT_PATHS_SIZE_ORDER); - if (!tbl_mpp) { - ret = -ENOMEM; - goto free_path; - } - tbl_mpp->free_node = &mesh_path_node_free; - tbl_mpp->copy_node = &mesh_path_node_copy; - tbl_mpp->mean_chain_len = MEAN_CHAIN_LEN; - tbl_mpp->known_gates = kzalloc(sizeof(struct hlist_head), GFP_ATOMIC); - if (!tbl_mpp->known_gates) { - ret = -ENOMEM; - goto free_mpp; - } - INIT_HLIST_HEAD(tbl_mpp->known_gates); - - /* Need no locking since this is during init */ - RCU_INIT_POINTER(mesh_paths, tbl_path); - RCU_INIT_POINTER(mpp_paths, tbl_mpp); - - return 0; - -free_mpp: - mesh_table_free(tbl_mpp, true); -free_path: - mesh_table_free(tbl_path, true); - return ret; -} - -void mesh_path_expire(struct ieee80211_sub_if_data *sdata) -{ - struct mesh_table *tbl; - struct mesh_path *mpath; - struct mpath_node *node; - struct hlist_node *p; - int i; - - rcu_read_lock(); - tbl = rcu_dereference(mesh_paths); - for_each_mesh_entry(tbl, p, node, i) { - if (node->mpath->sdata != sdata) - continue; - mpath = node->mpath; - if ((!(mpath->flags & MESH_PATH_RESOLVING)) && - (!(mpath->flags & MESH_PATH_FIXED)) && - time_after(jiffies, mpath->exp_time + MESH_PATH_EXPIRE)) - mesh_path_del(mpath->dst, mpath->sdata); - } - rcu_read_unlock(); -} - -void mesh_pathtbl_unregister(void) -{ - /* no need for locking during exit path */ - mesh_table_free(rcu_dereference_protected(mesh_paths, 1), true); - mesh_table_free(rcu_dereference_protected(mpp_paths, 1), true); -} diff --git a/openairITS/mac/DOT11/net/mac80211/mesh_plink.c b/openairITS/mac/DOT11/net/mac80211/mesh_plink.c deleted file mode 100644 index 4e53c4cbca..0000000000 --- a/openairITS/mac/DOT11/net/mac80211/mesh_plink.c +++ /dev/null @@ -1,867 +0,0 @@ -/* - * Copyright (c) 2008, 2009 open80211s Ltd. - * Author: Luis Carlos Cobo - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - */ -#include -#include -#include -#include "ieee80211_i.h" -#include "rate.h" -#include "mesh.h" - -#ifdef CONFIG_MAC80211_VERBOSE_MPL_DEBUG -#define mpl_dbg(fmt, args...) printk(KERN_DEBUG fmt, ##args) -#else -#define mpl_dbg(fmt, args...) do { (void)(0); } while (0) -#endif - -#define PLINK_GET_LLID(p) (p + 2) -#define PLINK_GET_PLID(p) (p + 4) - -#define mod_plink_timer(s, t) (mod_timer(&s->plink_timer, \ - jiffies + HZ * t / 1000)) - -#define dot11MeshMaxRetries(s) (s->u.mesh.mshcfg.dot11MeshMaxRetries) -#define dot11MeshRetryTimeout(s) (s->u.mesh.mshcfg.dot11MeshRetryTimeout) -#define dot11MeshConfirmTimeout(s) (s->u.mesh.mshcfg.dot11MeshConfirmTimeout) -#define dot11MeshHoldingTimeout(s) (s->u.mesh.mshcfg.dot11MeshHoldingTimeout) -#define dot11MeshMaxPeerLinks(s) (s->u.mesh.mshcfg.dot11MeshMaxPeerLinks) - -/* We only need a valid sta if user configured a minimum rssi_threshold. */ -#define rssi_threshold_check(sta, sdata) \ - (sdata->u.mesh.mshcfg.rssi_threshold == 0 ||\ - (sta && (s8) -ewma_read(&sta->avg_signal) > \ - sdata->u.mesh.mshcfg.rssi_threshold)) - -enum plink_event { - PLINK_UNDEFINED, - OPN_ACPT, - OPN_RJCT, - OPN_IGNR, - CNF_ACPT, - CNF_RJCT, - CNF_IGNR, - CLS_ACPT, - CLS_IGNR -}; - -static int mesh_plink_frame_tx(struct ieee80211_sub_if_data *sdata, - enum ieee80211_self_protected_actioncode action, - u8 *da, __le16 llid, __le16 plid, __le16 reason); - -static inline -void mesh_plink_inc_estab_count(struct ieee80211_sub_if_data *sdata) -{ - atomic_inc(&sdata->u.mesh.mshstats.estab_plinks); - mesh_accept_plinks_update(sdata); -} - -static inline -void mesh_plink_dec_estab_count(struct ieee80211_sub_if_data *sdata) -{ - atomic_dec(&sdata->u.mesh.mshstats.estab_plinks); - mesh_accept_plinks_update(sdata); -} - -/** - * mesh_plink_fsm_restart - restart a mesh peer link finite state machine - * - * @sta: mesh peer link to restart - * - * Locking: this function must be called holding sta->lock - */ -static inline void mesh_plink_fsm_restart(struct sta_info *sta) -{ - sta->plink_state = NL80211_PLINK_LISTEN; - sta->llid = sta->plid = sta->reason = 0; - sta->plink_retries = 0; -} - -/* - * NOTE: This is just an alias for sta_info_alloc(), see notes - * on it in the lifecycle management section! - */ -static struct sta_info *mesh_plink_alloc(struct ieee80211_sub_if_data *sdata, - u8 *hw_addr, u32 rates, - struct ieee802_11_elems *elems) -{ - struct ieee80211_local *local = sdata->local; - struct ieee80211_supported_band *sband; - struct sta_info *sta; - - sband = local->hw.wiphy->bands[local->oper_channel->band]; - - if (local->num_sta >= MESH_MAX_PLINKS) - return NULL; - - sta = sta_info_alloc(sdata, hw_addr, GFP_KERNEL); - if (!sta) - return NULL; - - sta_info_pre_move_state(sta, IEEE80211_STA_AUTH); - sta_info_pre_move_state(sta, IEEE80211_STA_ASSOC); - sta_info_pre_move_state(sta, IEEE80211_STA_AUTHORIZED); - - set_sta_flag(sta, WLAN_STA_WME); - - sta->sta.supp_rates[local->hw.conf.channel->band] = rates; - if (elems->ht_cap_elem) - ieee80211_ht_cap_ie_to_sta_ht_cap(sdata, sband, - elems->ht_cap_elem, - &sta->sta.ht_cap); - rate_control_rate_init(sta); - - return sta; -} - -/** - * __mesh_plink_deactivate - deactivate mesh peer link - * - * @sta: mesh peer link to deactivate - * - * All mesh paths with this peer as next hop will be flushed - * - * Locking: the caller must hold sta->lock - */ -static bool __mesh_plink_deactivate(struct sta_info *sta) -{ - struct ieee80211_sub_if_data *sdata = sta->sdata; - bool deactivated = false; - - if (sta->plink_state == NL80211_PLINK_ESTAB) { - mesh_plink_dec_estab_count(sdata); - deactivated = true; - } - sta->plink_state = NL80211_PLINK_BLOCKED; - mesh_path_flush_by_nexthop(sta); - - return deactivated; -} - -/** - * mesh_plink_deactivate - deactivate mesh peer link - * - * @sta: mesh peer link to deactivate - * - * All mesh paths with this peer as next hop will be flushed - */ -void mesh_plink_deactivate(struct sta_info *sta) -{ - struct ieee80211_sub_if_data *sdata = sta->sdata; - bool deactivated; - - spin_lock_bh(&sta->lock); - deactivated = __mesh_plink_deactivate(sta); - sta->reason = cpu_to_le16(WLAN_REASON_MESH_PEER_CANCELED); - mesh_plink_frame_tx(sdata, WLAN_SP_MESH_PEERING_CLOSE, - sta->sta.addr, sta->llid, sta->plid, - sta->reason); - spin_unlock_bh(&sta->lock); - - if (deactivated) - ieee80211_bss_info_change_notify(sdata, BSS_CHANGED_BEACON); -} - -static int mesh_plink_frame_tx(struct ieee80211_sub_if_data *sdata, - enum ieee80211_self_protected_actioncode action, - u8 *da, __le16 llid, __le16 plid, __le16 reason) { - struct ieee80211_local *local = sdata->local; - struct sk_buff *skb; - struct ieee80211_mgmt *mgmt; - bool include_plid = false; - u16 peering_proto = 0; - u8 *pos, ie_len = 4; - int hdr_len = offsetof(struct ieee80211_mgmt, u.action.u.self_prot) + - sizeof(mgmt->u.action.u.self_prot); - - skb = dev_alloc_skb(local->tx_headroom + - hdr_len + - 2 + /* capability info */ - 2 + /* AID */ - 2 + 8 + /* supported rates */ - 2 + (IEEE80211_MAX_SUPP_RATES - 8) + - 2 + sdata->u.mesh.mesh_id_len + - 2 + sizeof(struct ieee80211_meshconf_ie) + - 2 + sizeof(struct ieee80211_ht_cap) + - 2 + sizeof(struct ieee80211_ht_info) + - 2 + 8 + /* peering IE */ - sdata->u.mesh.ie_len); - if (!skb) - return -1; - skb_reserve(skb, local->tx_headroom); - mgmt = (struct ieee80211_mgmt *) skb_put(skb, hdr_len); - memset(mgmt, 0, hdr_len); - mgmt->frame_control = cpu_to_le16(IEEE80211_FTYPE_MGMT | - IEEE80211_STYPE_ACTION); - memcpy(mgmt->da, da, ETH_ALEN); - memcpy(mgmt->sa, sdata->vif.addr, ETH_ALEN); - memcpy(mgmt->bssid, sdata->vif.addr, ETH_ALEN); - mgmt->u.action.category = WLAN_CATEGORY_SELF_PROTECTED; - mgmt->u.action.u.self_prot.action_code = action; - - if (action != WLAN_SP_MESH_PEERING_CLOSE) { - /* capability info */ - pos = skb_put(skb, 2); - memset(pos, 0, 2); - if (action == WLAN_SP_MESH_PEERING_CONFIRM) { - /* AID */ - pos = skb_put(skb, 2); - memcpy(pos + 2, &plid, 2); - } - if (ieee80211_add_srates_ie(&sdata->vif, skb) || - ieee80211_add_ext_srates_ie(&sdata->vif, skb) || - mesh_add_rsn_ie(skb, sdata) || - mesh_add_meshid_ie(skb, sdata) || - mesh_add_meshconf_ie(skb, sdata)) - return -1; - } else { /* WLAN_SP_MESH_PEERING_CLOSE */ - if (mesh_add_meshid_ie(skb, sdata)) - return -1; - } - - /* Add Mesh Peering Management element */ - switch (action) { - case WLAN_SP_MESH_PEERING_OPEN: - break; - case WLAN_SP_MESH_PEERING_CONFIRM: - ie_len += 2; - include_plid = true; - break; - case WLAN_SP_MESH_PEERING_CLOSE: - if (plid) { - ie_len += 2; - include_plid = true; - } - ie_len += 2; /* reason code */ - break; - default: - return -EINVAL; - } - - if (WARN_ON(skb_tailroom(skb) < 2 + ie_len)) - return -ENOMEM; - - pos = skb_put(skb, 2 + ie_len); - *pos++ = WLAN_EID_PEER_MGMT; - *pos++ = ie_len; - memcpy(pos, &peering_proto, 2); - pos += 2; - memcpy(pos, &llid, 2); - pos += 2; - if (include_plid) { - memcpy(pos, &plid, 2); - pos += 2; - } - if (action == WLAN_SP_MESH_PEERING_CLOSE) { - memcpy(pos, &reason, 2); - pos += 2; - } - - if (action != WLAN_SP_MESH_PEERING_CLOSE) { - if (mesh_add_ht_cap_ie(skb, sdata) || - mesh_add_ht_info_ie(skb, sdata)) - return -1; - } - - if (mesh_add_vendor_ies(skb, sdata)) - return -1; - - ieee80211_tx_skb(sdata, skb); - return 0; -} - -void mesh_neighbour_update(u8 *hw_addr, u32 rates, - struct ieee80211_sub_if_data *sdata, - struct ieee802_11_elems *elems) -{ - struct ieee80211_local *local = sdata->local; - struct sta_info *sta; - - rcu_read_lock(); - - sta = sta_info_get(sdata, hw_addr); - if (!sta) { - rcu_read_unlock(); - /* Userspace handles peer allocation when security is enabled - * */ - if (sdata->u.mesh.security & IEEE80211_MESH_SEC_AUTHED) - cfg80211_notify_new_peer_candidate(sdata->dev, hw_addr, - elems->ie_start, elems->total_len, - GFP_KERNEL); - else - sta = mesh_plink_alloc(sdata, hw_addr, rates, elems); - if (!sta) - return; - if (sta_info_insert_rcu(sta)) { - rcu_read_unlock(); - return; - } - } - - sta->last_rx = jiffies; - sta->sta.supp_rates[local->hw.conf.channel->band] = rates; - if (mesh_peer_accepts_plinks(elems) && - sta->plink_state == NL80211_PLINK_LISTEN && - sdata->u.mesh.accepting_plinks && - sdata->u.mesh.mshcfg.auto_open_plinks && - rssi_threshold_check(sta, sdata)) - mesh_plink_open(sta); - - rcu_read_unlock(); -} - -static void mesh_plink_timer(unsigned long data) -{ - struct sta_info *sta; - __le16 llid, plid, reason; - struct ieee80211_sub_if_data *sdata; - - /* - * This STA is valid because sta_info_destroy() will - * del_timer_sync() this timer after having made sure - * it cannot be readded (by deleting the plink.) - */ - sta = (struct sta_info *) data; - - if (sta->sdata->local->quiescing) { - sta->plink_timer_was_running = true; - return; - } - - spin_lock_bh(&sta->lock); - if (sta->ignore_plink_timer) { - sta->ignore_plink_timer = false; - spin_unlock_bh(&sta->lock); - return; - } - mpl_dbg("Mesh plink timer for %pM fired on state %d\n", - sta->sta.addr, sta->plink_state); - reason = 0; - llid = sta->llid; - plid = sta->plid; - sdata = sta->sdata; - - switch (sta->plink_state) { - case NL80211_PLINK_OPN_RCVD: - case NL80211_PLINK_OPN_SNT: - /* retry timer */ - if (sta->plink_retries < dot11MeshMaxRetries(sdata)) { - u32 rand; - mpl_dbg("Mesh plink for %pM (retry, timeout): %d %d\n", - sta->sta.addr, sta->plink_retries, - sta->plink_timeout); - get_random_bytes(&rand, sizeof(u32)); - sta->plink_timeout = sta->plink_timeout + - rand % sta->plink_timeout; - ++sta->plink_retries; - mod_plink_timer(sta, sta->plink_timeout); - spin_unlock_bh(&sta->lock); - mesh_plink_frame_tx(sdata, WLAN_SP_MESH_PEERING_OPEN, - sta->sta.addr, llid, 0, 0); - break; - } - reason = cpu_to_le16(WLAN_REASON_MESH_MAX_RETRIES); - /* fall through on else */ - case NL80211_PLINK_CNF_RCVD: - /* confirm timer */ - if (!reason) - reason = cpu_to_le16(WLAN_REASON_MESH_CONFIRM_TIMEOUT); - sta->plink_state = NL80211_PLINK_HOLDING; - mod_plink_timer(sta, dot11MeshHoldingTimeout(sdata)); - spin_unlock_bh(&sta->lock); - mesh_plink_frame_tx(sdata, WLAN_SP_MESH_PEERING_CLOSE, - sta->sta.addr, llid, plid, reason); - break; - case NL80211_PLINK_HOLDING: - /* holding timer */ - del_timer(&sta->plink_timer); - mesh_plink_fsm_restart(sta); - spin_unlock_bh(&sta->lock); - break; - default: - spin_unlock_bh(&sta->lock); - break; - } -} - -#ifdef CONFIG_PM -void mesh_plink_quiesce(struct sta_info *sta) -{ - if (del_timer_sync(&sta->plink_timer)) - sta->plink_timer_was_running = true; -} - -void mesh_plink_restart(struct sta_info *sta) -{ - if (sta->plink_timer_was_running) { - add_timer(&sta->plink_timer); - sta->plink_timer_was_running = false; - } -} -#endif - -static inline void mesh_plink_timer_set(struct sta_info *sta, int timeout) -{ - sta->plink_timer.expires = jiffies + (HZ * timeout / 1000); - sta->plink_timer.data = (unsigned long) sta; - sta->plink_timer.function = mesh_plink_timer; - sta->plink_timeout = timeout; - add_timer(&sta->plink_timer); -} - -int mesh_plink_open(struct sta_info *sta) -{ - __le16 llid; - struct ieee80211_sub_if_data *sdata = sta->sdata; - - if (!test_sta_flag(sta, WLAN_STA_AUTH)) - return -EPERM; - - spin_lock_bh(&sta->lock); - get_random_bytes(&llid, 2); - sta->llid = llid; - if (sta->plink_state != NL80211_PLINK_LISTEN) { - spin_unlock_bh(&sta->lock); - return -EBUSY; - } - sta->plink_state = NL80211_PLINK_OPN_SNT; - mesh_plink_timer_set(sta, dot11MeshRetryTimeout(sdata)); - spin_unlock_bh(&sta->lock); - mpl_dbg("Mesh plink: starting establishment with %pM\n", - sta->sta.addr); - - return mesh_plink_frame_tx(sdata, WLAN_SP_MESH_PEERING_OPEN, - sta->sta.addr, llid, 0, 0); -} - -void mesh_plink_block(struct sta_info *sta) -{ - struct ieee80211_sub_if_data *sdata = sta->sdata; - bool deactivated; - - spin_lock_bh(&sta->lock); - deactivated = __mesh_plink_deactivate(sta); - sta->plink_state = NL80211_PLINK_BLOCKED; - spin_unlock_bh(&sta->lock); - - if (deactivated) - ieee80211_bss_info_change_notify(sdata, BSS_CHANGED_BEACON); -} - - -void mesh_rx_plink_frame(struct ieee80211_sub_if_data *sdata, struct ieee80211_mgmt *mgmt, - size_t len, struct ieee80211_rx_status *rx_status) -{ - struct ieee80211_local *local = sdata->local; - struct ieee802_11_elems elems; - struct sta_info *sta; - enum plink_event event; - enum ieee80211_self_protected_actioncode ftype; - size_t baselen; - bool deactivated, matches_local = true; - u8 ie_len; - u8 *baseaddr; - __le16 plid, llid, reason; -#ifdef CONFIG_MAC80211_VERBOSE_MPL_DEBUG - static const char *mplstates[] = { - [NL80211_PLINK_LISTEN] = "LISTEN", - [NL80211_PLINK_OPN_SNT] = "OPN-SNT", - [NL80211_PLINK_OPN_RCVD] = "OPN-RCVD", - [NL80211_PLINK_CNF_RCVD] = "CNF_RCVD", - [NL80211_PLINK_ESTAB] = "ESTAB", - [NL80211_PLINK_HOLDING] = "HOLDING", - [NL80211_PLINK_BLOCKED] = "BLOCKED" - }; -#endif - - /* need action_code, aux */ - if (len < IEEE80211_MIN_ACTION_SIZE + 3) - return; - - if (is_multicast_ether_addr(mgmt->da)) { - mpl_dbg("Mesh plink: ignore frame from multicast address"); - return; - } - - baseaddr = mgmt->u.action.u.self_prot.variable; - baselen = (u8 *) mgmt->u.action.u.self_prot.variable - (u8 *) mgmt; - if (mgmt->u.action.u.self_prot.action_code == - WLAN_SP_MESH_PEERING_CONFIRM) { - baseaddr += 4; - baselen += 4; - } - ieee802_11_parse_elems(baseaddr, len - baselen, &elems); - if (!elems.peering) { - mpl_dbg("Mesh plink: missing necessary peer link ie\n"); - return; - } - if (elems.rsn_len && - sdata->u.mesh.security == IEEE80211_MESH_SEC_NONE) { - mpl_dbg("Mesh plink: can't establish link with secure peer\n"); - return; - } - - ftype = mgmt->u.action.u.self_prot.action_code; - ie_len = elems.peering_len; - if ((ftype == WLAN_SP_MESH_PEERING_OPEN && ie_len != 4) || - (ftype == WLAN_SP_MESH_PEERING_CONFIRM && ie_len != 6) || - (ftype == WLAN_SP_MESH_PEERING_CLOSE && ie_len != 6 - && ie_len != 8)) { - mpl_dbg("Mesh plink: incorrect plink ie length %d %d\n", - ftype, ie_len); - return; - } - - if (ftype != WLAN_SP_MESH_PEERING_CLOSE && - (!elems.mesh_id || !elems.mesh_config)) { - mpl_dbg("Mesh plink: missing necessary ie\n"); - return; - } - /* Note the lines below are correct, the llid in the frame is the plid - * from the point of view of this host. - */ - memcpy(&plid, PLINK_GET_LLID(elems.peering), 2); - if (ftype == WLAN_SP_MESH_PEERING_CONFIRM || - (ftype == WLAN_SP_MESH_PEERING_CLOSE && ie_len == 8)) - memcpy(&llid, PLINK_GET_PLID(elems.peering), 2); - - rcu_read_lock(); - - sta = sta_info_get(sdata, mgmt->sa); - if (!sta && ftype != WLAN_SP_MESH_PEERING_OPEN) { - mpl_dbg("Mesh plink: cls or cnf from unknown peer\n"); - rcu_read_unlock(); - return; - } - - if (ftype == WLAN_SP_MESH_PEERING_OPEN && - !rssi_threshold_check(sta, sdata)) { - mpl_dbg("Mesh plink: %pM does not meet rssi threshold\n", - mgmt->sa); - rcu_read_unlock(); - return; - } - - if (sta && !test_sta_flag(sta, WLAN_STA_AUTH)) { - mpl_dbg("Mesh plink: Action frame from non-authed peer\n"); - rcu_read_unlock(); - return; - } - - if (sta && sta->plink_state == NL80211_PLINK_BLOCKED) { - rcu_read_unlock(); - return; - } - - /* Now we will figure out the appropriate event... */ - event = PLINK_UNDEFINED; - if (ftype != WLAN_SP_MESH_PEERING_CLOSE && - (!mesh_matches_local(&elems, sdata))) { - matches_local = false; - switch (ftype) { - case WLAN_SP_MESH_PEERING_OPEN: - event = OPN_RJCT; - break; - case WLAN_SP_MESH_PEERING_CONFIRM: - event = CNF_RJCT; - break; - default: - break; - } - } - - if (!sta && !matches_local) { - rcu_read_unlock(); - reason = cpu_to_le16(WLAN_REASON_MESH_CONFIG); - llid = 0; - mesh_plink_frame_tx(sdata, WLAN_SP_MESH_PEERING_CLOSE, - mgmt->sa, llid, plid, reason); - return; - } else if (!sta) { - /* ftype == WLAN_SP_MESH_PEERING_OPEN */ - u32 rates; - - rcu_read_unlock(); - - if (!mesh_plink_free_count(sdata)) { - mpl_dbg("Mesh plink error: no more free plinks\n"); - return; - } - - rates = ieee80211_sta_get_rates(local, &elems, rx_status->band); - sta = mesh_plink_alloc(sdata, mgmt->sa, rates, &elems); - if (!sta) { - mpl_dbg("Mesh plink error: plink table full\n"); - return; - } - if (sta_info_insert_rcu(sta)) { - rcu_read_unlock(); - return; - } - event = OPN_ACPT; - spin_lock_bh(&sta->lock); - } else if (matches_local) { - spin_lock_bh(&sta->lock); - switch (ftype) { - case WLAN_SP_MESH_PEERING_OPEN: - if (!mesh_plink_free_count(sdata) || - (sta->plid && sta->plid != plid)) - event = OPN_IGNR; - else - event = OPN_ACPT; - break; - case WLAN_SP_MESH_PEERING_CONFIRM: - if (!mesh_plink_free_count(sdata) || - (sta->llid != llid || sta->plid != plid)) - event = CNF_IGNR; - else - event = CNF_ACPT; - break; - case WLAN_SP_MESH_PEERING_CLOSE: - if (sta->plink_state == NL80211_PLINK_ESTAB) - /* Do not check for llid or plid. This does not - * follow the standard but since multiple plinks - * per sta are not supported, it is necessary in - * order to avoid a livelock when MP A sees an - * establish peer link to MP B but MP B does not - * see it. This can be caused by a timeout in - * B's peer link establishment or B beign - * restarted. - */ - event = CLS_ACPT; - else if (sta->plid != plid) - event = CLS_IGNR; - else if (ie_len == 7 && sta->llid != llid) - event = CLS_IGNR; - else - event = CLS_ACPT; - break; - default: - mpl_dbg("Mesh plink: unknown frame subtype\n"); - spin_unlock_bh(&sta->lock); - rcu_read_unlock(); - return; - } - } else { - spin_lock_bh(&sta->lock); - } - - mpl_dbg("Mesh plink (peer, state, llid, plid, event): %pM %s %d %d %d\n", - mgmt->sa, mplstates[sta->plink_state], - le16_to_cpu(sta->llid), le16_to_cpu(sta->plid), - event); - reason = 0; - switch (sta->plink_state) { - /* spin_unlock as soon as state is updated at each case */ - case NL80211_PLINK_LISTEN: - switch (event) { - case CLS_ACPT: - mesh_plink_fsm_restart(sta); - spin_unlock_bh(&sta->lock); - break; - case OPN_ACPT: - sta->plink_state = NL80211_PLINK_OPN_RCVD; - sta->plid = plid; - get_random_bytes(&llid, 2); - sta->llid = llid; - mesh_plink_timer_set(sta, dot11MeshRetryTimeout(sdata)); - spin_unlock_bh(&sta->lock); - mesh_plink_frame_tx(sdata, - WLAN_SP_MESH_PEERING_OPEN, - sta->sta.addr, llid, 0, 0); - mesh_plink_frame_tx(sdata, - WLAN_SP_MESH_PEERING_CONFIRM, - sta->sta.addr, llid, plid, 0); - break; - default: - spin_unlock_bh(&sta->lock); - break; - } - break; - - case NL80211_PLINK_OPN_SNT: - switch (event) { - case OPN_RJCT: - case CNF_RJCT: - reason = cpu_to_le16(WLAN_REASON_MESH_CONFIG); - case CLS_ACPT: - if (!reason) - reason = cpu_to_le16(WLAN_REASON_MESH_CLOSE); - sta->reason = reason; - sta->plink_state = NL80211_PLINK_HOLDING; - if (!mod_plink_timer(sta, - dot11MeshHoldingTimeout(sdata))) - sta->ignore_plink_timer = true; - - llid = sta->llid; - spin_unlock_bh(&sta->lock); - mesh_plink_frame_tx(sdata, - WLAN_SP_MESH_PEERING_CLOSE, - sta->sta.addr, llid, plid, reason); - break; - case OPN_ACPT: - /* retry timer is left untouched */ - sta->plink_state = NL80211_PLINK_OPN_RCVD; - sta->plid = plid; - llid = sta->llid; - spin_unlock_bh(&sta->lock); - mesh_plink_frame_tx(sdata, - WLAN_SP_MESH_PEERING_CONFIRM, - sta->sta.addr, llid, plid, 0); - break; - case CNF_ACPT: - sta->plink_state = NL80211_PLINK_CNF_RCVD; - if (!mod_plink_timer(sta, - dot11MeshConfirmTimeout(sdata))) - sta->ignore_plink_timer = true; - - spin_unlock_bh(&sta->lock); - break; - default: - spin_unlock_bh(&sta->lock); - break; - } - break; - - case NL80211_PLINK_OPN_RCVD: - switch (event) { - case OPN_RJCT: - case CNF_RJCT: - reason = cpu_to_le16(WLAN_REASON_MESH_CONFIG); - case CLS_ACPT: - if (!reason) - reason = cpu_to_le16(WLAN_REASON_MESH_CLOSE); - sta->reason = reason; - sta->plink_state = NL80211_PLINK_HOLDING; - if (!mod_plink_timer(sta, - dot11MeshHoldingTimeout(sdata))) - sta->ignore_plink_timer = true; - - llid = sta->llid; - spin_unlock_bh(&sta->lock); - mesh_plink_frame_tx(sdata, WLAN_SP_MESH_PEERING_CLOSE, - sta->sta.addr, llid, plid, reason); - break; - case OPN_ACPT: - llid = sta->llid; - spin_unlock_bh(&sta->lock); - mesh_plink_frame_tx(sdata, - WLAN_SP_MESH_PEERING_CONFIRM, - sta->sta.addr, llid, plid, 0); - break; - case CNF_ACPT: - del_timer(&sta->plink_timer); - sta->plink_state = NL80211_PLINK_ESTAB; - spin_unlock_bh(&sta->lock); - mesh_plink_inc_estab_count(sdata); - ieee80211_bss_info_change_notify(sdata, BSS_CHANGED_BEACON); - mpl_dbg("Mesh plink with %pM ESTABLISHED\n", - sta->sta.addr); - break; - default: - spin_unlock_bh(&sta->lock); - break; - } - break; - - case NL80211_PLINK_CNF_RCVD: - switch (event) { - case OPN_RJCT: - case CNF_RJCT: - reason = cpu_to_le16(WLAN_REASON_MESH_CONFIG); - case CLS_ACPT: - if (!reason) - reason = cpu_to_le16(WLAN_REASON_MESH_CLOSE); - sta->reason = reason; - sta->plink_state = NL80211_PLINK_HOLDING; - if (!mod_plink_timer(sta, - dot11MeshHoldingTimeout(sdata))) - sta->ignore_plink_timer = true; - - llid = sta->llid; - spin_unlock_bh(&sta->lock); - mesh_plink_frame_tx(sdata, - WLAN_SP_MESH_PEERING_CLOSE, - sta->sta.addr, llid, plid, reason); - break; - case OPN_ACPT: - del_timer(&sta->plink_timer); - sta->plink_state = NL80211_PLINK_ESTAB; - spin_unlock_bh(&sta->lock); - mesh_plink_inc_estab_count(sdata); - ieee80211_bss_info_change_notify(sdata, BSS_CHANGED_BEACON); - mpl_dbg("Mesh plink with %pM ESTABLISHED\n", - sta->sta.addr); - mesh_plink_frame_tx(sdata, - WLAN_SP_MESH_PEERING_CONFIRM, - sta->sta.addr, llid, plid, 0); - break; - default: - spin_unlock_bh(&sta->lock); - break; - } - break; - - case NL80211_PLINK_ESTAB: - switch (event) { - case CLS_ACPT: - reason = cpu_to_le16(WLAN_REASON_MESH_CLOSE); - sta->reason = reason; - deactivated = __mesh_plink_deactivate(sta); - sta->plink_state = NL80211_PLINK_HOLDING; - llid = sta->llid; - mod_plink_timer(sta, dot11MeshHoldingTimeout(sdata)); - spin_unlock_bh(&sta->lock); - if (deactivated) - ieee80211_bss_info_change_notify(sdata, BSS_CHANGED_BEACON); - mesh_plink_frame_tx(sdata, WLAN_SP_MESH_PEERING_CLOSE, - sta->sta.addr, llid, plid, reason); - break; - case OPN_ACPT: - llid = sta->llid; - spin_unlock_bh(&sta->lock); - mesh_plink_frame_tx(sdata, - WLAN_SP_MESH_PEERING_CONFIRM, - sta->sta.addr, llid, plid, 0); - break; - default: - spin_unlock_bh(&sta->lock); - break; - } - break; - case NL80211_PLINK_HOLDING: - switch (event) { - case CLS_ACPT: - if (del_timer(&sta->plink_timer)) - sta->ignore_plink_timer = 1; - mesh_plink_fsm_restart(sta); - spin_unlock_bh(&sta->lock); - break; - case OPN_ACPT: - case CNF_ACPT: - case OPN_RJCT: - case CNF_RJCT: - llid = sta->llid; - reason = sta->reason; - spin_unlock_bh(&sta->lock); - mesh_plink_frame_tx(sdata, WLAN_SP_MESH_PEERING_CLOSE, - sta->sta.addr, llid, plid, reason); - break; - default: - spin_unlock_bh(&sta->lock); - } - break; - default: - /* should not get here, PLINK_BLOCKED is dealt with at the - * beginning of the function - */ - spin_unlock_bh(&sta->lock); - break; - } - - rcu_read_unlock(); -} diff --git a/openairITS/mac/DOT11/net/mac80211/michael.c b/openairITS/mac/DOT11/net/mac80211/michael.c deleted file mode 100644 index 408649bd47..0000000000 --- a/openairITS/mac/DOT11/net/mac80211/michael.c +++ /dev/null @@ -1,86 +0,0 @@ -/* - * Michael MIC implementation - optimized for TKIP MIC operations - * Copyright 2002-2003, Instant802 Networks, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - */ -#include -#include -#include -#include - -#include "michael.h" - -static void michael_block(struct michael_mic_ctx *mctx, u32 val) -{ - mctx->l ^= val; - mctx->r ^= rol32(mctx->l, 17); - mctx->l += mctx->r; - mctx->r ^= ((mctx->l & 0xff00ff00) >> 8) | - ((mctx->l & 0x00ff00ff) << 8); - mctx->l += mctx->r; - mctx->r ^= rol32(mctx->l, 3); - mctx->l += mctx->r; - mctx->r ^= ror32(mctx->l, 2); - mctx->l += mctx->r; -} - -static void michael_mic_hdr(struct michael_mic_ctx *mctx, const u8 *key, - struct ieee80211_hdr *hdr) -{ - u8 *da, *sa, tid; - - da = ieee80211_get_DA(hdr); - sa = ieee80211_get_SA(hdr); - if (ieee80211_is_data_qos(hdr->frame_control)) - tid = *ieee80211_get_qos_ctl(hdr) & IEEE80211_QOS_CTL_TID_MASK; - else - tid = 0; - - mctx->l = get_unaligned_le32(key); - mctx->r = get_unaligned_le32(key + 4); - - /* - * A pseudo header (DA, SA, Priority, 0, 0, 0) is used in Michael MIC - * calculation, but it is _not_ transmitted - */ - michael_block(mctx, get_unaligned_le32(da)); - michael_block(mctx, get_unaligned_le16(&da[4]) | - (get_unaligned_le16(sa) << 16)); - michael_block(mctx, get_unaligned_le32(&sa[2])); - michael_block(mctx, tid); -} - -void michael_mic(const u8 *key, struct ieee80211_hdr *hdr, - const u8 *data, size_t data_len, u8 *mic) -{ - u32 val; - size_t block, blocks, left; - struct michael_mic_ctx mctx; - - michael_mic_hdr(&mctx, key, hdr); - - /* Real data */ - blocks = data_len / 4; - left = data_len % 4; - - for (block = 0; block < blocks; block++) - michael_block(&mctx, get_unaligned_le32(&data[block * 4])); - - /* Partial block of 0..3 bytes and padding: 0x5a + 4..7 zeros to make - * total length a multiple of 4. */ - val = 0x5a; - while (left > 0) { - val <<= 8; - left--; - val |= data[blocks * 4 + left]; - } - - michael_block(&mctx, val); - michael_block(&mctx, 0); - - put_unaligned_le32(mctx.l, mic); - put_unaligned_le32(mctx.r, mic + 4); -} diff --git a/openairITS/mac/DOT11/net/mac80211/michael.h b/openairITS/mac/DOT11/net/mac80211/michael.h deleted file mode 100644 index 3b848dad95..0000000000 --- a/openairITS/mac/DOT11/net/mac80211/michael.h +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Michael MIC implementation - optimized for TKIP MIC operations - * Copyright 2002-2003, Instant802 Networks, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - */ - -#ifndef MICHAEL_H -#define MICHAEL_H - -#include - -#define MICHAEL_MIC_LEN 8 - -struct michael_mic_ctx { - u32 l, r; -}; - -void michael_mic(const u8 *key, struct ieee80211_hdr *hdr, - const u8 *data, size_t data_len, u8 *mic); - -#endif /* MICHAEL_H */ diff --git a/openairITS/mac/DOT11/net/mac80211/mlme.c b/openairITS/mac/DOT11/net/mac80211/mlme.c deleted file mode 100644 index f823aa39ee..0000000000 --- a/openairITS/mac/DOT11/net/mac80211/mlme.c +++ /dev/null @@ -1,3534 +0,0 @@ -/* - * BSS client mode implementation - * Copyright 2003-2008, Jouni Malinen - * Copyright 2004, Instant802 Networks, Inc. - * Copyright 2005, Devicescape Software, Inc. - * Copyright 2006-2007 Jiri Benc - * Copyright 2007, Michael Wu - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "ieee80211_i.h" -#include "driver-ops.h" -#include "rate.h" -#include "led.h" - -#define IEEE80211_AUTH_TIMEOUT (HZ / 5) -#define IEEE80211_AUTH_MAX_TRIES 3 -#define IEEE80211_AUTH_WAIT_ASSOC (HZ * 5) -#define IEEE80211_ASSOC_TIMEOUT (HZ / 5) -#define IEEE80211_ASSOC_MAX_TRIES 3 - -static int max_nullfunc_tries = 2; -module_param(max_nullfunc_tries, int, 0644); -MODULE_PARM_DESC(max_nullfunc_tries, - "Maximum nullfunc tx tries before disconnecting (reason 4)."); - -static int max_probe_tries = 5; -module_param(max_probe_tries, int, 0644); -MODULE_PARM_DESC(max_probe_tries, - "Maximum probe tries before disconnecting (reason 4)."); - -/* - * Beacon loss timeout is calculated as N frames times the - * advertised beacon interval. This may need to be somewhat - * higher than what hardware might detect to account for - * delays in the host processing frames. But since we also - * probe on beacon miss before declaring the connection lost - * default to what we want. - */ -#define IEEE80211_BEACON_LOSS_COUNT 7 - -/* - * Time the connection can be idle before we probe - * it to see if we can still talk to the AP. - */ -#define IEEE80211_CONNECTION_IDLE_TIME (30 * HZ) -/* - * Time we wait for a probe response after sending - * a probe request because of beacon loss or for - * checking the connection still works. - */ -static int probe_wait_ms = 500; -module_param(probe_wait_ms, int, 0644); -MODULE_PARM_DESC(probe_wait_ms, - "Maximum time(ms) to wait for probe response" - " before disconnecting (reason 4)."); - -/* - * Weight given to the latest Beacon frame when calculating average signal - * strength for Beacon frames received in the current BSS. This must be - * between 1 and 15. - */ -#define IEEE80211_SIGNAL_AVE_WEIGHT 3 - -/* - * How many Beacon frames need to have been used in average signal strength - * before starting to indicate signal change events. - */ -#define IEEE80211_SIGNAL_AVE_MIN_COUNT 4 - -#define TMR_RUNNING_TIMER 0 -#define TMR_RUNNING_CHANSW 1 - -#define DEAUTH_DISASSOC_LEN (24 /* hdr */ + 2 /* reason */) - -/* - * All cfg80211 functions have to be called outside a locked - * section so that they can acquire a lock themselves... This - * is much simpler than queuing up things in cfg80211, but we - * do need some indirection for that here. - */ -enum rx_mgmt_action { - /* no action required */ - RX_MGMT_NONE, - - /* caller must call cfg80211_send_deauth() */ - RX_MGMT_CFG80211_DEAUTH, - - /* caller must call cfg80211_send_disassoc() */ - RX_MGMT_CFG80211_DISASSOC, - - /* caller must call cfg80211_send_rx_auth() */ - RX_MGMT_CFG80211_RX_AUTH, - - /* caller must call cfg80211_send_rx_assoc() */ - RX_MGMT_CFG80211_RX_ASSOC, - - /* caller must call cfg80211_send_assoc_timeout() */ - RX_MGMT_CFG80211_ASSOC_TIMEOUT, -}; - -/* utils */ -static inline void ASSERT_MGD_MTX(struct ieee80211_if_managed *ifmgd) -{ - lockdep_assert_held(&ifmgd->mtx); -} - -/* - * We can have multiple work items (and connection probing) - * scheduling this timer, but we need to take care to only - * reschedule it when it should fire _earlier_ than it was - * asked for before, or if it's not pending right now. This - * function ensures that. Note that it then is required to - * run this function for all timeouts after the first one - * has happened -- the work that runs from this timer will - * do that. - */ -static void run_again(struct ieee80211_if_managed *ifmgd, unsigned long timeout) -{ - ASSERT_MGD_MTX(ifmgd); - - if (!timer_pending(&ifmgd->timer) || - time_before(timeout, ifmgd->timer.expires)) - mod_timer(&ifmgd->timer, timeout); -} - -void ieee80211_sta_reset_beacon_monitor(struct ieee80211_sub_if_data *sdata) -{ - if (sdata->vif.driver_flags & IEEE80211_VIF_BEACON_FILTER) - return; - - mod_timer(&sdata->u.mgd.bcn_mon_timer, - round_jiffies_up(jiffies + sdata->u.mgd.beacon_timeout)); -} - -void ieee80211_sta_reset_conn_monitor(struct ieee80211_sub_if_data *sdata) -{ - struct ieee80211_if_managed *ifmgd = &sdata->u.mgd; - - if (unlikely(!sdata->u.mgd.associated)) - return; - - if (sdata->local->hw.flags & IEEE80211_HW_CONNECTION_MONITOR) - return; - - mod_timer(&sdata->u.mgd.conn_mon_timer, - round_jiffies_up(jiffies + IEEE80211_CONNECTION_IDLE_TIME)); - - ifmgd->probe_send_count = 0; -} - -static int ecw2cw(int ecw) -{ - return (1 << ecw) - 1; -} - -/* - * ieee80211_enable_ht should be called only after the operating band - * has been determined as ht configuration depends on the hw's - * HT abilities for a specific band. - */ -static u32 ieee80211_enable_ht(struct ieee80211_sub_if_data *sdata, - struct ieee80211_ht_info *hti, - const u8 *bssid, u16 ap_ht_cap_flags, - bool beacon_htcap_ie) -{ - struct ieee80211_local *local = sdata->local; - struct ieee80211_supported_band *sband; - struct sta_info *sta; - u32 changed = 0; - int hti_cfreq; - u16 ht_opmode; - bool enable_ht = true; - enum nl80211_channel_type prev_chantype; - enum nl80211_channel_type rx_channel_type = NL80211_CHAN_NO_HT; - enum nl80211_channel_type tx_channel_type; - - sband = local->hw.wiphy->bands[local->hw.conf.channel->band]; - prev_chantype = sdata->vif.bss_conf.channel_type; - - - hti_cfreq = ieee80211_channel_to_frequency(hti->control_chan, - sband->band); - /* check that channel matches the right operating channel */ - if (local->hw.conf.channel->center_freq != hti_cfreq) { - /* Some APs mess this up, evidently. - * Netgear WNDR3700 sometimes reports 4 higher than - * the actual channel, for instance. - */ - printk(KERN_DEBUG - "%s: Wrong control channel in association" - " response: configured center-freq: %d" - " hti-cfreq: %d hti->control_chan: %d" - " band: %d. Disabling HT.\n", - sdata->name, - local->hw.conf.channel->center_freq, - hti_cfreq, hti->control_chan, - sband->band); - enable_ht = false; - } - - if (enable_ht) { - rx_channel_type = NL80211_CHAN_HT20; - - if (!(ap_ht_cap_flags & IEEE80211_HT_CAP_40MHZ_INTOLERANT) && - !ieee80111_cfg_override_disables_ht40(sdata) && - (sband->ht_cap.cap & IEEE80211_HT_CAP_SUP_WIDTH_20_40) && - (hti->ht_param & IEEE80211_HT_PARAM_CHAN_WIDTH_ANY)) { - switch(hti->ht_param & IEEE80211_HT_PARAM_CHA_SEC_OFFSET) { - case IEEE80211_HT_PARAM_CHA_SEC_ABOVE: - rx_channel_type = NL80211_CHAN_HT40PLUS; - break; - case IEEE80211_HT_PARAM_CHA_SEC_BELOW: - rx_channel_type = NL80211_CHAN_HT40MINUS; - break; - } - } - } - - tx_channel_type = ieee80211_get_tx_channel_type(local, rx_channel_type); - - if (local->tmp_channel) - local->tmp_channel_type = rx_channel_type; - - if (!ieee80211_set_channel_type(local, sdata, rx_channel_type)) { - /* can only fail due to HT40+/- mismatch */ - rx_channel_type = NL80211_CHAN_HT20; - WARN_ON(!ieee80211_set_channel_type(local, sdata, - rx_channel_type)); - } - - if (beacon_htcap_ie && (prev_chantype != rx_channel_type)) { - /* - * Whenever the AP announces the HT mode change that can be - * 40MHz intolerant or etc., it would be safer to stop tx - * queues before doing hw config to avoid buffer overflow. - */ - ieee80211_stop_queues_by_reason(&sdata->local->hw, - IEEE80211_QUEUE_STOP_REASON_CHTYPE_CHANGE); - - /* flush out all packets */ - synchronize_net(); - - drv_flush(local, false); - } - - /* channel_type change automatically detected */ - ieee80211_hw_config(local, 0); - - if (prev_chantype != tx_channel_type) { - rcu_read_lock(); - sta = sta_info_get(sdata, bssid); - if (sta) - rate_control_rate_update(local, sband, sta, - IEEE80211_RC_HT_CHANGED, - tx_channel_type); - rcu_read_unlock(); - - if (beacon_htcap_ie) - ieee80211_wake_queues_by_reason(&sdata->local->hw, - IEEE80211_QUEUE_STOP_REASON_CHTYPE_CHANGE); - } - - ht_opmode = le16_to_cpu(hti->operation_mode); - - /* if bss configuration changed store the new one */ - if (sdata->ht_opmode_valid != enable_ht || - sdata->vif.bss_conf.ht_operation_mode != ht_opmode || - prev_chantype != rx_channel_type) { - changed |= BSS_CHANGED_HT; - sdata->vif.bss_conf.ht_operation_mode = ht_opmode; - sdata->ht_opmode_valid = enable_ht; - } - - return changed; -} - -/* frame sending functions */ - -static int ieee80211_compatible_rates(const u8 *supp_rates, int supp_rates_len, - struct ieee80211_supported_band *sband, - u32 *rates) -{ - int i, j, count; - *rates = 0; - count = 0; - for (i = 0; i < supp_rates_len; i++) { - int rate = (supp_rates[i] & 0x7F) * 5; - - for (j = 0; j < sband->n_bitrates; j++) - if (sband->bitrates[j].bitrate == rate) { - *rates |= BIT(j); - count++; - break; - } - } - - return count; -} - -static void ieee80211_add_ht_ie(struct ieee80211_sub_if_data *sdata, - struct sk_buff *skb, const u8 *ht_info_ie, - struct ieee80211_supported_band *sband, - struct ieee80211_channel *channel, - enum ieee80211_smps_mode smps) -{ - struct ieee80211_ht_info *ht_info; - u8 *pos; - u32 flags = channel->flags; - u16 cap; - struct ieee80211_sta_ht_cap ht_cap; - - BUILD_BUG_ON(sizeof(ht_cap) != sizeof(sband->ht_cap)); - - if (!ht_info_ie) - return; - - if (ht_info_ie[1] < sizeof(struct ieee80211_ht_info)) - return; - - memcpy(&ht_cap, &sband->ht_cap, sizeof(ht_cap)); - ieee80211_apply_htcap_overrides(sdata, &ht_cap); - - ht_info = (struct ieee80211_ht_info *)(ht_info_ie + 2); - - /* determine capability flags */ - cap = ht_cap.cap; - - switch (ht_info->ht_param & IEEE80211_HT_PARAM_CHA_SEC_OFFSET) { - case IEEE80211_HT_PARAM_CHA_SEC_ABOVE: - if (flags & IEEE80211_CHAN_NO_HT40PLUS) { - cap &= ~IEEE80211_HT_CAP_SUP_WIDTH_20_40; - cap &= ~IEEE80211_HT_CAP_SGI_40; - } - break; - case IEEE80211_HT_PARAM_CHA_SEC_BELOW: - if (flags & IEEE80211_CHAN_NO_HT40MINUS) { - cap &= ~IEEE80211_HT_CAP_SUP_WIDTH_20_40; - cap &= ~IEEE80211_HT_CAP_SGI_40; - } - break; - } - - /* set SM PS mode properly */ - cap &= ~IEEE80211_HT_CAP_SM_PS; - switch (smps) { - case IEEE80211_SMPS_AUTOMATIC: - case IEEE80211_SMPS_NUM_MODES: - WARN_ON(1); - case IEEE80211_SMPS_OFF: - cap |= WLAN_HT_CAP_SM_PS_DISABLED << - IEEE80211_HT_CAP_SM_PS_SHIFT; - break; - case IEEE80211_SMPS_STATIC: - cap |= WLAN_HT_CAP_SM_PS_STATIC << - IEEE80211_HT_CAP_SM_PS_SHIFT; - break; - case IEEE80211_SMPS_DYNAMIC: - cap |= WLAN_HT_CAP_SM_PS_DYNAMIC << - IEEE80211_HT_CAP_SM_PS_SHIFT; - break; - } - - /* reserve and fill IE */ - pos = skb_put(skb, sizeof(struct ieee80211_ht_cap) + 2); - ieee80211_ie_build_ht_cap(pos, &ht_cap, cap); -} - -static void ieee80211_send_assoc(struct ieee80211_sub_if_data *sdata) -{ - struct ieee80211_local *local = sdata->local; - struct ieee80211_if_managed *ifmgd = &sdata->u.mgd; - struct ieee80211_mgd_assoc_data *assoc_data = ifmgd->assoc_data; - struct sk_buff *skb; - struct ieee80211_mgmt *mgmt; - u8 *pos, qos_info; - size_t offset = 0, noffset; - int i, count, rates_len, supp_rates_len; - u16 capab; - struct ieee80211_supported_band *sband; - u32 rates = 0; - - lockdep_assert_held(&ifmgd->mtx); - - sband = local->hw.wiphy->bands[local->oper_channel->band]; - - if (assoc_data->supp_rates_len) { - /* - * Get all rates supported by the device and the AP as - * some APs don't like getting a superset of their rates - * in the association request (e.g. D-Link DAP 1353 in - * b-only mode)... - */ - rates_len = ieee80211_compatible_rates(assoc_data->supp_rates, - assoc_data->supp_rates_len, - sband, &rates); - } else { - /* - * In case AP not provide any supported rates information - * before association, we send information element(s) with - * all rates that we support. - */ - rates = ~0; - rates_len = sband->n_bitrates; - } - - skb = alloc_skb(local->hw.extra_tx_headroom + - sizeof(*mgmt) + /* bit too much but doesn't matter */ - 2 + assoc_data->ssid_len + /* SSID */ - 4 + rates_len + /* (extended) rates */ - 4 + /* power capability */ - 2 + 2 * sband->n_channels + /* supported channels */ - 2 + sizeof(struct ieee80211_ht_cap) + /* HT */ - assoc_data->ie_len + /* extra IEs */ - 9, /* WMM */ - GFP_KERNEL); - if (!skb) - return; - - skb_reserve(skb, local->hw.extra_tx_headroom); - - capab = WLAN_CAPABILITY_ESS; - - if (sband->band == IEEE80211_BAND_2GHZ) { - if (!(local->hw.flags & IEEE80211_HW_2GHZ_SHORT_SLOT_INCAPABLE)) - capab |= WLAN_CAPABILITY_SHORT_SLOT_TIME; - if (!(local->hw.flags & IEEE80211_HW_2GHZ_SHORT_PREAMBLE_INCAPABLE)) - capab |= WLAN_CAPABILITY_SHORT_PREAMBLE; - } - - if (assoc_data->capability & WLAN_CAPABILITY_PRIVACY) - capab |= WLAN_CAPABILITY_PRIVACY; - - if ((assoc_data->capability & WLAN_CAPABILITY_SPECTRUM_MGMT) && - (local->hw.flags & IEEE80211_HW_SPECTRUM_MGMT)) - capab |= WLAN_CAPABILITY_SPECTRUM_MGMT; - - mgmt = (struct ieee80211_mgmt *) skb_put(skb, 24); - memset(mgmt, 0, 24); - memcpy(mgmt->da, assoc_data->bss->bssid, ETH_ALEN); - memcpy(mgmt->sa, sdata->vif.addr, ETH_ALEN); - memcpy(mgmt->bssid, assoc_data->bss->bssid, ETH_ALEN); - - if (!is_zero_ether_addr(assoc_data->prev_bssid)) { - skb_put(skb, 10); - mgmt->frame_control = cpu_to_le16(IEEE80211_FTYPE_MGMT | - IEEE80211_STYPE_REASSOC_REQ); - mgmt->u.reassoc_req.capab_info = cpu_to_le16(capab); - mgmt->u.reassoc_req.listen_interval = - cpu_to_le16(local->hw.conf.listen_interval); - memcpy(mgmt->u.reassoc_req.current_ap, assoc_data->prev_bssid, - ETH_ALEN); - } else { - skb_put(skb, 4); - mgmt->frame_control = cpu_to_le16(IEEE80211_FTYPE_MGMT | - IEEE80211_STYPE_ASSOC_REQ); - mgmt->u.assoc_req.capab_info = cpu_to_le16(capab); - mgmt->u.assoc_req.listen_interval = - cpu_to_le16(local->hw.conf.listen_interval); - } - - /* SSID */ - pos = skb_put(skb, 2 + assoc_data->ssid_len); - *pos++ = WLAN_EID_SSID; - *pos++ = assoc_data->ssid_len; - memcpy(pos, assoc_data->ssid, assoc_data->ssid_len); - - /* add all rates which were marked to be used above */ - supp_rates_len = rates_len; - if (supp_rates_len > 8) - supp_rates_len = 8; - - pos = skb_put(skb, supp_rates_len + 2); - *pos++ = WLAN_EID_SUPP_RATES; - *pos++ = supp_rates_len; - - count = 0; - for (i = 0; i < sband->n_bitrates; i++) { - if (BIT(i) & rates) { - int rate = sband->bitrates[i].bitrate; - *pos++ = (u8) (rate / 5); - if (++count == 8) - break; - } - } - - if (rates_len > count) { - pos = skb_put(skb, rates_len - count + 2); - *pos++ = WLAN_EID_EXT_SUPP_RATES; - *pos++ = rates_len - count; - - for (i++; i < sband->n_bitrates; i++) { - if (BIT(i) & rates) { - int rate = sband->bitrates[i].bitrate; - *pos++ = (u8) (rate / 5); - } - } - } - - if (capab & WLAN_CAPABILITY_SPECTRUM_MGMT) { - /* 1. power capabilities */ - pos = skb_put(skb, 4); - *pos++ = WLAN_EID_PWR_CAPABILITY; - *pos++ = 2; - *pos++ = 0; /* min tx power */ - *pos++ = local->oper_channel->max_power; /* max tx power */ - - /* 2. supported channels */ - /* TODO: get this in reg domain format */ - pos = skb_put(skb, 2 * sband->n_channels + 2); - *pos++ = WLAN_EID_SUPPORTED_CHANNELS; - *pos++ = 2 * sband->n_channels; - for (i = 0; i < sband->n_channels; i++) { - *pos++ = ieee80211_frequency_to_channel( - sband->channels[i].center_freq); - *pos++ = 1; /* one channel in the subband*/ - } - } - - /* if present, add any custom IEs that go before HT */ - if (assoc_data->ie_len && assoc_data->ie) { - static const u8 before_ht[] = { - WLAN_EID_SSID, - WLAN_EID_SUPP_RATES, - WLAN_EID_EXT_SUPP_RATES, - WLAN_EID_PWR_CAPABILITY, - WLAN_EID_SUPPORTED_CHANNELS, - WLAN_EID_RSN, - WLAN_EID_QOS_CAPA, - WLAN_EID_RRM_ENABLED_CAPABILITIES, - WLAN_EID_MOBILITY_DOMAIN, - WLAN_EID_SUPPORTED_REGULATORY_CLASSES, - }; - noffset = ieee80211_ie_split(assoc_data->ie, assoc_data->ie_len, - before_ht, ARRAY_SIZE(before_ht), - offset); - pos = skb_put(skb, noffset - offset); - memcpy(pos, assoc_data->ie + offset, noffset - offset); - offset = noffset; - } - - if (!(ifmgd->flags & IEEE80211_STA_DISABLE_11N)) - ieee80211_add_ht_ie(sdata, skb, assoc_data->ht_information_ie, - sband, local->oper_channel, ifmgd->ap_smps); - - /* if present, add any custom non-vendor IEs that go after HT */ - if (assoc_data->ie_len && assoc_data->ie) { - noffset = ieee80211_ie_split_vendor(assoc_data->ie, - assoc_data->ie_len, - offset); - pos = skb_put(skb, noffset - offset); - memcpy(pos, assoc_data->ie + offset, noffset - offset); - offset = noffset; - } - - if (assoc_data->wmm) { - if (assoc_data->uapsd) { - qos_info = ifmgd->uapsd_queues; - qos_info |= (ifmgd->uapsd_max_sp_len << - IEEE80211_WMM_IE_STA_QOSINFO_SP_SHIFT); - } else { - qos_info = 0; - } - - pos = skb_put(skb, 9); - *pos++ = WLAN_EID_VENDOR_SPECIFIC; - *pos++ = 7; /* len */ - *pos++ = 0x00; /* Microsoft OUI 00:50:F2 */ - *pos++ = 0x50; - *pos++ = 0xf2; - *pos++ = 2; /* WME */ - *pos++ = 0; /* WME info */ - *pos++ = 1; /* WME ver */ - *pos++ = qos_info; - } - - /* add any remaining custom (i.e. vendor specific here) IEs */ - if (assoc_data->ie_len && assoc_data->ie) { - noffset = assoc_data->ie_len; - pos = skb_put(skb, noffset - offset); - memcpy(pos, assoc_data->ie + offset, noffset - offset); - } - - IEEE80211_SKB_CB(skb)->flags |= IEEE80211_TX_INTFL_DONT_ENCRYPT; - ieee80211_tx_skb(sdata, skb); -} - -static void ieee80211_send_deauth_disassoc(struct ieee80211_sub_if_data *sdata, - const u8 *bssid, u16 stype, - u16 reason, bool send_frame, - u8 *frame_buf) -{ - struct ieee80211_local *local = sdata->local; - struct ieee80211_if_managed *ifmgd = &sdata->u.mgd; - struct sk_buff *skb; - struct ieee80211_mgmt *mgmt = (void *)frame_buf; - - /* build frame */ - mgmt->frame_control = cpu_to_le16(IEEE80211_FTYPE_MGMT | stype); - mgmt->duration = 0; /* initialize only */ - mgmt->seq_ctrl = 0; /* initialize only */ - memcpy(mgmt->da, bssid, ETH_ALEN); - memcpy(mgmt->sa, sdata->vif.addr, ETH_ALEN); - memcpy(mgmt->bssid, bssid, ETH_ALEN); - /* u.deauth.reason_code == u.disassoc.reason_code */ - mgmt->u.deauth.reason_code = cpu_to_le16(reason); - - if (send_frame) { - skb = dev_alloc_skb(local->hw.extra_tx_headroom + - DEAUTH_DISASSOC_LEN); - if (!skb) - return; - - skb_reserve(skb, local->hw.extra_tx_headroom); - - /* copy in frame */ - memcpy(skb_put(skb, DEAUTH_DISASSOC_LEN), - mgmt, DEAUTH_DISASSOC_LEN); - - if (!(ifmgd->flags & IEEE80211_STA_MFP_ENABLED)) - IEEE80211_SKB_CB(skb)->flags |= - IEEE80211_TX_INTFL_DONT_ENCRYPT; - ieee80211_tx_skb(sdata, skb); - } -} - -void ieee80211_send_pspoll(struct ieee80211_local *local, - struct ieee80211_sub_if_data *sdata) -{ - struct ieee80211_pspoll *pspoll; - struct sk_buff *skb; - - skb = ieee80211_pspoll_get(&local->hw, &sdata->vif); - if (!skb) - return; - - pspoll = (struct ieee80211_pspoll *) skb->data; - pspoll->frame_control |= cpu_to_le16(IEEE80211_FCTL_PM); - - IEEE80211_SKB_CB(skb)->flags |= IEEE80211_TX_INTFL_DONT_ENCRYPT; - ieee80211_tx_skb(sdata, skb); -} - -void ieee80211_send_nullfunc(struct ieee80211_local *local, - struct ieee80211_sub_if_data *sdata, - int powersave) -{ - struct sk_buff *skb; - struct ieee80211_hdr_3addr *nullfunc; - struct ieee80211_if_managed *ifmgd = &sdata->u.mgd; - - skb = ieee80211_nullfunc_get(&local->hw, &sdata->vif); - if (!skb) - return; - - nullfunc = (struct ieee80211_hdr_3addr *) skb->data; - if (powersave) - nullfunc->frame_control |= cpu_to_le16(IEEE80211_FCTL_PM); - - IEEE80211_SKB_CB(skb)->flags |= IEEE80211_TX_INTFL_DONT_ENCRYPT; - if (ifmgd->flags & (IEEE80211_STA_BEACON_POLL | - IEEE80211_STA_CONNECTION_POLL)) - IEEE80211_SKB_CB(skb)->flags |= IEEE80211_TX_CTL_USE_MINRATE; - - ieee80211_tx_skb(sdata, skb); -} - -static void ieee80211_send_4addr_nullfunc(struct ieee80211_local *local, - struct ieee80211_sub_if_data *sdata) -{ - struct sk_buff *skb; - struct ieee80211_hdr *nullfunc; - __le16 fc; - - if (WARN_ON(sdata->vif.type != NL80211_IFTYPE_STATION)) - return; - - skb = dev_alloc_skb(local->hw.extra_tx_headroom + 30); - if (!skb) - return; - - skb_reserve(skb, local->hw.extra_tx_headroom); - - nullfunc = (struct ieee80211_hdr *) skb_put(skb, 30); - memset(nullfunc, 0, 30); - fc = cpu_to_le16(IEEE80211_FTYPE_DATA | IEEE80211_STYPE_NULLFUNC | - IEEE80211_FCTL_FROMDS | IEEE80211_FCTL_TODS); - nullfunc->frame_control = fc; - memcpy(nullfunc->addr1, sdata->u.mgd.bssid, ETH_ALEN); - memcpy(nullfunc->addr2, sdata->vif.addr, ETH_ALEN); - memcpy(nullfunc->addr3, sdata->u.mgd.bssid, ETH_ALEN); - memcpy(nullfunc->addr4, sdata->vif.addr, ETH_ALEN); - - IEEE80211_SKB_CB(skb)->flags |= IEEE80211_TX_INTFL_DONT_ENCRYPT; - ieee80211_tx_skb(sdata, skb); -} - -/* spectrum management related things */ -static void ieee80211_chswitch_work(struct work_struct *work) -{ - struct ieee80211_sub_if_data *sdata = - container_of(work, struct ieee80211_sub_if_data, u.mgd.chswitch_work); - struct ieee80211_if_managed *ifmgd = &sdata->u.mgd; - - if (!ieee80211_sdata_running(sdata)) - return; - - mutex_lock(&ifmgd->mtx); - if (!ifmgd->associated) - goto out; - - sdata->local->oper_channel = sdata->local->csa_channel; - if (!sdata->local->ops->channel_switch) { - /* call "hw_config" only if doing sw channel switch */ - ieee80211_hw_config(sdata->local, - IEEE80211_CONF_CHANGE_CHANNEL); - } else { - /* update the device channel directly */ - sdata->local->hw.conf.channel = sdata->local->oper_channel; - } - - /* XXX: shouldn't really modify cfg80211-owned data! */ - ifmgd->associated->channel = sdata->local->oper_channel; - - ieee80211_wake_queues_by_reason(&sdata->local->hw, - IEEE80211_QUEUE_STOP_REASON_CSA); - out: - ifmgd->flags &= ~IEEE80211_STA_CSA_RECEIVED; - mutex_unlock(&ifmgd->mtx); -} - -void ieee80211_chswitch_done(struct ieee80211_vif *vif, bool success) -{ - struct ieee80211_sub_if_data *sdata; - struct ieee80211_if_managed *ifmgd; - - sdata = vif_to_sdata(vif); - ifmgd = &sdata->u.mgd; - - trace_api_chswitch_done(sdata, success); - if (!success) { - /* - * If the channel switch was not successful, stay - * around on the old channel. We currently lack - * good handling of this situation, possibly we - * should just drop the association. - */ - sdata->local->csa_channel = sdata->local->oper_channel; - } - - ieee80211_queue_work(&sdata->local->hw, &ifmgd->chswitch_work); -} -EXPORT_SYMBOL(ieee80211_chswitch_done); - -static void ieee80211_chswitch_timer(unsigned long data) -{ - struct ieee80211_sub_if_data *sdata = - (struct ieee80211_sub_if_data *) data; - struct ieee80211_if_managed *ifmgd = &sdata->u.mgd; - - if (sdata->local->quiescing) { - set_bit(TMR_RUNNING_CHANSW, &ifmgd->timers_running); - return; - } - - ieee80211_queue_work(&sdata->local->hw, &ifmgd->chswitch_work); -} - -void ieee80211_sta_process_chanswitch(struct ieee80211_sub_if_data *sdata, - struct ieee80211_channel_sw_ie *sw_elem, - struct ieee80211_bss *bss, - u64 timestamp) -{ - struct cfg80211_bss *cbss = - container_of((void *)bss, struct cfg80211_bss, priv); - struct ieee80211_channel *new_ch; - struct ieee80211_if_managed *ifmgd = &sdata->u.mgd; - int new_freq = ieee80211_channel_to_frequency(sw_elem->new_ch_num, - cbss->channel->band); - - ASSERT_MGD_MTX(ifmgd); - - if (!ifmgd->associated) - return; - - if (sdata->local->scanning) - return; - - /* Disregard subsequent beacons if we are already running a timer - processing a CSA */ - - if (ifmgd->flags & IEEE80211_STA_CSA_RECEIVED) - return; - - new_ch = ieee80211_get_channel(sdata->local->hw.wiphy, new_freq); - if (!new_ch || new_ch->flags & IEEE80211_CHAN_DISABLED) - return; - - sdata->local->csa_channel = new_ch; - - if (sdata->local->ops->channel_switch) { - /* use driver's channel switch callback */ - struct ieee80211_channel_switch ch_switch; - memset(&ch_switch, 0, sizeof(ch_switch)); - ch_switch.timestamp = timestamp; - if (sw_elem->mode) { - ch_switch.block_tx = true; - ieee80211_stop_queues_by_reason(&sdata->local->hw, - IEEE80211_QUEUE_STOP_REASON_CSA); - } - ch_switch.channel = new_ch; - ch_switch.count = sw_elem->count; - ifmgd->flags |= IEEE80211_STA_CSA_RECEIVED; - drv_channel_switch(sdata->local, &ch_switch); - return; - } - - /* channel switch handled in software */ - if (sw_elem->count <= 1) { - ieee80211_queue_work(&sdata->local->hw, &ifmgd->chswitch_work); - } else { - if (sw_elem->mode) - ieee80211_stop_queues_by_reason(&sdata->local->hw, - IEEE80211_QUEUE_STOP_REASON_CSA); - ifmgd->flags |= IEEE80211_STA_CSA_RECEIVED; - mod_timer(&ifmgd->chswitch_timer, - jiffies + - msecs_to_jiffies(sw_elem->count * - cbss->beacon_interval)); - } -} - -static void ieee80211_handle_pwr_constr(struct ieee80211_sub_if_data *sdata, - u16 capab_info, u8 *pwr_constr_elem, - u8 pwr_constr_elem_len) -{ - struct ieee80211_conf *conf = &sdata->local->hw.conf; - - if (!(capab_info & WLAN_CAPABILITY_SPECTRUM_MGMT)) - return; - - /* Power constraint IE length should be 1 octet */ - if (pwr_constr_elem_len != 1) - return; - - if ((*pwr_constr_elem <= conf->channel->max_reg_power) && - (*pwr_constr_elem != sdata->local->power_constr_level)) { - sdata->local->power_constr_level = *pwr_constr_elem; - ieee80211_hw_config(sdata->local, 0); - } -} - -void ieee80211_enable_dyn_ps(struct ieee80211_vif *vif) -{ - struct ieee80211_sub_if_data *sdata = vif_to_sdata(vif); - struct ieee80211_local *local = sdata->local; - struct ieee80211_conf *conf = &local->hw.conf; - - WARN_ON(sdata->vif.type != NL80211_IFTYPE_STATION || - !(local->hw.flags & IEEE80211_HW_SUPPORTS_PS) || - (local->hw.flags & IEEE80211_HW_SUPPORTS_DYNAMIC_PS)); - - local->disable_dynamic_ps = false; - conf->dynamic_ps_timeout = local->dynamic_ps_user_timeout; -} -EXPORT_SYMBOL(ieee80211_enable_dyn_ps); - -void ieee80211_disable_dyn_ps(struct ieee80211_vif *vif) -{ - struct ieee80211_sub_if_data *sdata = vif_to_sdata(vif); - struct ieee80211_local *local = sdata->local; - struct ieee80211_conf *conf = &local->hw.conf; - - WARN_ON(sdata->vif.type != NL80211_IFTYPE_STATION || - !(local->hw.flags & IEEE80211_HW_SUPPORTS_PS) || - (local->hw.flags & IEEE80211_HW_SUPPORTS_DYNAMIC_PS)); - - local->disable_dynamic_ps = true; - conf->dynamic_ps_timeout = 0; - del_timer_sync(&local->dynamic_ps_timer); - ieee80211_queue_work(&local->hw, - &local->dynamic_ps_enable_work); -} -EXPORT_SYMBOL(ieee80211_disable_dyn_ps); - -/* powersave */ -static void ieee80211_enable_ps(struct ieee80211_local *local, - struct ieee80211_sub_if_data *sdata) -{ - struct ieee80211_conf *conf = &local->hw.conf; - - /* - * If we are scanning right now then the parameters will - * take effect when scan finishes. - */ - if (local->scanning) - return; - - if (conf->dynamic_ps_timeout > 0 && - !(local->hw.flags & IEEE80211_HW_SUPPORTS_DYNAMIC_PS)) { - mod_timer(&local->dynamic_ps_timer, jiffies + - msecs_to_jiffies(conf->dynamic_ps_timeout)); - } else { - if (local->hw.flags & IEEE80211_HW_PS_NULLFUNC_STACK) - ieee80211_send_nullfunc(local, sdata, 1); - - if ((local->hw.flags & IEEE80211_HW_PS_NULLFUNC_STACK) && - (local->hw.flags & IEEE80211_HW_REPORTS_TX_ACK_STATUS)) - return; - - conf->flags |= IEEE80211_CONF_PS; - ieee80211_hw_config(local, IEEE80211_CONF_CHANGE_PS); - } -} - -static void ieee80211_change_ps(struct ieee80211_local *local) -{ - struct ieee80211_conf *conf = &local->hw.conf; - - if (local->ps_sdata) { - ieee80211_enable_ps(local, local->ps_sdata); - } else if (conf->flags & IEEE80211_CONF_PS) { - conf->flags &= ~IEEE80211_CONF_PS; - ieee80211_hw_config(local, IEEE80211_CONF_CHANGE_PS); - del_timer_sync(&local->dynamic_ps_timer); - cancel_work_sync(&local->dynamic_ps_enable_work); - } -} - -static bool ieee80211_powersave_allowed(struct ieee80211_sub_if_data *sdata) -{ - struct ieee80211_if_managed *mgd = &sdata->u.mgd; - struct sta_info *sta = NULL; - bool authorized = false; - - if (!mgd->powersave) - return false; - - if (mgd->broken_ap) - return false; - - if (!mgd->associated) - return false; - - if (!mgd->associated->beacon_ies) - return false; - - if (mgd->flags & (IEEE80211_STA_BEACON_POLL | - IEEE80211_STA_CONNECTION_POLL)) - return false; - - rcu_read_lock(); - sta = sta_info_get(sdata, mgd->bssid); - if (sta) - authorized = test_sta_flag(sta, WLAN_STA_AUTHORIZED); - rcu_read_unlock(); - - return authorized; -} - -/* need to hold RTNL or interface lock */ -void ieee80211_recalc_ps(struct ieee80211_local *local, s32 latency) -{ - struct ieee80211_sub_if_data *sdata, *found = NULL; - int count = 0; - int timeout; - - if (!(local->hw.flags & IEEE80211_HW_SUPPORTS_PS)) { - local->ps_sdata = NULL; - return; - } - - if (!list_empty(&local->work_list)) { - local->ps_sdata = NULL; - goto change; - } - - list_for_each_entry(sdata, &local->interfaces, list) { - if (!ieee80211_sdata_running(sdata)) - continue; - if (sdata->vif.type == NL80211_IFTYPE_AP) { - /* If an AP vif is found, then disable PS - * by setting the count to zero thereby setting - * ps_sdata to NULL. - */ - count = 0; - break; - } - if (sdata->vif.type != NL80211_IFTYPE_STATION) - continue; - found = sdata; - count++; - } - - if (count == 1 && ieee80211_powersave_allowed(found)) { - struct ieee80211_conf *conf = &local->hw.conf; - s32 beaconint_us; - - if (latency < 0) - latency = pm_qos_request(PM_QOS_NETWORK_LATENCY); - - beaconint_us = ieee80211_tu_to_usec( - found->vif.bss_conf.beacon_int); - - timeout = local->dynamic_ps_forced_timeout; - if (timeout < 0) { - /* - * Go to full PSM if the user configures a very low - * latency requirement. - * The 2000 second value is there for compatibility - * until the PM_QOS_NETWORK_LATENCY is configured - * with real values. - */ - if (latency > (1900 * USEC_PER_MSEC) && - latency != (2000 * USEC_PER_SEC)) - timeout = 0; - else - timeout = 100; - } - local->dynamic_ps_user_timeout = timeout; - if (!local->disable_dynamic_ps) - conf->dynamic_ps_timeout = - local->dynamic_ps_user_timeout; - - if (beaconint_us > latency) { - local->ps_sdata = NULL; - } else { - struct ieee80211_bss *bss; - int maxslp = 1; - u8 dtimper; - - bss = (void *)found->u.mgd.associated->priv; - dtimper = bss->dtim_period; - - /* If the TIM IE is invalid, pretend the value is 1 */ - if (!dtimper) - dtimper = 1; - else if (dtimper > 1) - maxslp = min_t(int, dtimper, - latency / beaconint_us); - - local->hw.conf.max_sleep_period = maxslp; - local->hw.conf.ps_dtim_period = dtimper; - local->ps_sdata = found; - } - } else { - local->ps_sdata = NULL; - } - - change: - ieee80211_change_ps(local); -} - -void ieee80211_dynamic_ps_disable_work(struct work_struct *work) -{ - struct ieee80211_local *local = - container_of(work, struct ieee80211_local, - dynamic_ps_disable_work); - - if (local->hw.conf.flags & IEEE80211_CONF_PS) { - local->hw.conf.flags &= ~IEEE80211_CONF_PS; - ieee80211_hw_config(local, IEEE80211_CONF_CHANGE_PS); - } - - ieee80211_wake_queues_by_reason(&local->hw, - IEEE80211_QUEUE_STOP_REASON_PS); -} - -void ieee80211_dynamic_ps_enable_work(struct work_struct *work) -{ - struct ieee80211_local *local = - container_of(work, struct ieee80211_local, - dynamic_ps_enable_work); - struct ieee80211_sub_if_data *sdata = local->ps_sdata; - struct ieee80211_if_managed *ifmgd; - unsigned long flags; - int q; - - /* can only happen when PS was just disabled anyway */ - if (!sdata) - return; - - ifmgd = &sdata->u.mgd; - - if (local->hw.conf.flags & IEEE80211_CONF_PS) - return; - - if (!local->disable_dynamic_ps && - local->hw.conf.dynamic_ps_timeout > 0) { - /* don't enter PS if TX frames are pending */ - if (drv_tx_frames_pending(local)) { - mod_timer(&local->dynamic_ps_timer, jiffies + - msecs_to_jiffies( - local->hw.conf.dynamic_ps_timeout)); - return; - } - - /* - * transmission can be stopped by others which leads to - * dynamic_ps_timer expiry. Postpone the ps timer if it - * is not the actual idle state. - */ - spin_lock_irqsave(&local->queue_stop_reason_lock, flags); - for (q = 0; q < local->hw.queues; q++) { - if (local->queue_stop_reasons[q]) { - spin_unlock_irqrestore(&local->queue_stop_reason_lock, - flags); - mod_timer(&local->dynamic_ps_timer, jiffies + - msecs_to_jiffies( - local->hw.conf.dynamic_ps_timeout)); - return; - } - } - spin_unlock_irqrestore(&local->queue_stop_reason_lock, flags); - } - - if ((local->hw.flags & IEEE80211_HW_PS_NULLFUNC_STACK) && - !(ifmgd->flags & IEEE80211_STA_NULLFUNC_ACKED)) { - netif_tx_stop_all_queues(sdata->dev); - - if (drv_tx_frames_pending(local)) - mod_timer(&local->dynamic_ps_timer, jiffies + - msecs_to_jiffies( - local->hw.conf.dynamic_ps_timeout)); - else { - ieee80211_send_nullfunc(local, sdata, 1); - /* Flush to get the tx status of nullfunc frame */ - drv_flush(local, false); - } - } - - if (!((local->hw.flags & IEEE80211_HW_REPORTS_TX_ACK_STATUS) && - (local->hw.flags & IEEE80211_HW_PS_NULLFUNC_STACK)) || - (ifmgd->flags & IEEE80211_STA_NULLFUNC_ACKED)) { - ifmgd->flags &= ~IEEE80211_STA_NULLFUNC_ACKED; - local->hw.conf.flags |= IEEE80211_CONF_PS; - ieee80211_hw_config(local, IEEE80211_CONF_CHANGE_PS); - } - - if (local->hw.flags & IEEE80211_HW_PS_NULLFUNC_STACK) - netif_tx_wake_all_queues(sdata->dev); -} - -void ieee80211_dynamic_ps_timer(unsigned long data) -{ - struct ieee80211_local *local = (void *) data; - - if (local->quiescing || local->suspended) - return; - - ieee80211_queue_work(&local->hw, &local->dynamic_ps_enable_work); -} - -/* MLME */ -static void ieee80211_sta_wmm_params(struct ieee80211_local *local, - struct ieee80211_sub_if_data *sdata, - u8 *wmm_param, size_t wmm_param_len) -{ - struct ieee80211_tx_queue_params params; - struct ieee80211_if_managed *ifmgd = &sdata->u.mgd; - size_t left; - int count; - u8 *pos, uapsd_queues = 0; - - if (!local->ops->conf_tx) - return; - - if (local->hw.queues < 4) - return; - - if (!wmm_param) - return; - - if (wmm_param_len < 8 || wmm_param[5] /* version */ != 1) - return; - - if (ifmgd->flags & IEEE80211_STA_UAPSD_ENABLED) - uapsd_queues = ifmgd->uapsd_queues; - - count = wmm_param[6] & 0x0f; - if (count == ifmgd->wmm_last_param_set) - return; - ifmgd->wmm_last_param_set = count; - - pos = wmm_param + 8; - left = wmm_param_len - 8; - - memset(¶ms, 0, sizeof(params)); - - local->wmm_acm = 0; - for (; left >= 4; left -= 4, pos += 4) { - int aci = (pos[0] >> 5) & 0x03; - int acm = (pos[0] >> 4) & 0x01; - bool uapsd = false; - int queue; - - switch (aci) { - case 1: /* AC_BK */ - queue = 3; - if (acm) - local->wmm_acm |= BIT(1) | BIT(2); /* BK/- */ - if (uapsd_queues & IEEE80211_WMM_IE_STA_QOSINFO_AC_BK) - uapsd = true; - break; - case 2: /* AC_VI */ - queue = 1; - if (acm) - local->wmm_acm |= BIT(4) | BIT(5); /* CL/VI */ - if (uapsd_queues & IEEE80211_WMM_IE_STA_QOSINFO_AC_VI) - uapsd = true; - break; - case 3: /* AC_VO */ - queue = 0; - if (acm) - local->wmm_acm |= BIT(6) | BIT(7); /* VO/NC */ - if (uapsd_queues & IEEE80211_WMM_IE_STA_QOSINFO_AC_VO) - uapsd = true; - break; - case 0: /* AC_BE */ - default: - queue = 2; - if (acm) - local->wmm_acm |= BIT(0) | BIT(3); /* BE/EE */ - if (uapsd_queues & IEEE80211_WMM_IE_STA_QOSINFO_AC_BE) - uapsd = true; - break; - } - - params.aifs = pos[0] & 0x0f; - params.cw_max = ecw2cw((pos[1] & 0xf0) >> 4); - params.cw_min = ecw2cw(pos[1] & 0x0f); - params.txop = get_unaligned_le16(pos + 2); - params.uapsd = uapsd; - -#ifdef CONFIG_MAC80211_VERBOSE_DEBUG - wiphy_debug(local->hw.wiphy, - "WMM queue=%d aci=%d acm=%d aifs=%d " - "cWmin=%d cWmax=%d txop=%d uapsd=%d\n", - queue, aci, acm, - params.aifs, params.cw_min, params.cw_max, - params.txop, params.uapsd); -#endif - sdata->tx_conf[queue] = params; - if (drv_conf_tx(local, sdata, queue, ¶ms)) - wiphy_debug(local->hw.wiphy, - "failed to set TX queue parameters for queue %d\n", - queue); - } - - /* enable WMM or activate new settings */ - sdata->vif.bss_conf.qos = true; -} - -static u32 ieee80211_handle_bss_capability(struct ieee80211_sub_if_data *sdata, - u16 capab, bool erp_valid, u8 erp) -{ - struct ieee80211_bss_conf *bss_conf = &sdata->vif.bss_conf; - u32 changed = 0; - bool use_protection; - bool use_short_preamble; - bool use_short_slot; - - if (erp_valid) { - use_protection = (erp & WLAN_ERP_USE_PROTECTION) != 0; - use_short_preamble = (erp & WLAN_ERP_BARKER_PREAMBLE) == 0; - } else { - use_protection = false; - use_short_preamble = !!(capab & WLAN_CAPABILITY_SHORT_PREAMBLE); - } - - use_short_slot = !!(capab & WLAN_CAPABILITY_SHORT_SLOT_TIME); - if (sdata->local->hw.conf.channel->band == IEEE80211_BAND_5GHZ) - use_short_slot = true; - - if (use_protection != bss_conf->use_cts_prot) { - bss_conf->use_cts_prot = use_protection; - changed |= BSS_CHANGED_ERP_CTS_PROT; - } - - if (use_short_preamble != bss_conf->use_short_preamble) { - bss_conf->use_short_preamble = use_short_preamble; - changed |= BSS_CHANGED_ERP_PREAMBLE; - } - - if (use_short_slot != bss_conf->use_short_slot) { - bss_conf->use_short_slot = use_short_slot; - changed |= BSS_CHANGED_ERP_SLOT; - } - - return changed; -} - -static void ieee80211_set_associated(struct ieee80211_sub_if_data *sdata, - struct cfg80211_bss *cbss, - u32 bss_info_changed) -{ - struct ieee80211_bss *bss = (void *)cbss->priv; - struct ieee80211_local *local = sdata->local; - struct ieee80211_bss_conf *bss_conf = &sdata->vif.bss_conf; - - bss_info_changed |= BSS_CHANGED_ASSOC; - /* set timing information */ - bss_conf->beacon_int = cbss->beacon_interval; - bss_conf->last_tsf = cbss->tsf; - - bss_info_changed |= BSS_CHANGED_BEACON_INT; - bss_info_changed |= ieee80211_handle_bss_capability(sdata, - cbss->capability, bss->has_erp_value, bss->erp_value); - - sdata->u.mgd.beacon_timeout = usecs_to_jiffies(ieee80211_tu_to_usec( - IEEE80211_BEACON_LOSS_COUNT * bss_conf->beacon_int)); - - sdata->u.mgd.associated = cbss; - memcpy(sdata->u.mgd.bssid, cbss->bssid, ETH_ALEN); - - sdata->u.mgd.flags |= IEEE80211_STA_RESET_SIGNAL_AVE; - - /* just to be sure */ - sdata->u.mgd.flags &= ~(IEEE80211_STA_CONNECTION_POLL | - IEEE80211_STA_BEACON_POLL); - - ieee80211_led_assoc(local, 1); - - if (local->hw.flags & IEEE80211_HW_NEED_DTIM_PERIOD) - bss_conf->dtim_period = bss->dtim_period; - else - bss_conf->dtim_period = 0; - - bss_conf->assoc = 1; - - /* Tell the driver to monitor connection quality (if supported) */ - if (sdata->vif.driver_flags & IEEE80211_VIF_SUPPORTS_CQM_RSSI && - bss_conf->cqm_rssi_thold) - bss_info_changed |= BSS_CHANGED_CQM; - - /* Enable ARP filtering */ - if (bss_conf->arp_filter_enabled != sdata->arp_filter_state) { - bss_conf->arp_filter_enabled = sdata->arp_filter_state; - bss_info_changed |= BSS_CHANGED_ARP_FILTER; - } - - ieee80211_bss_info_change_notify(sdata, bss_info_changed); - - mutex_lock(&local->iflist_mtx); - ieee80211_recalc_ps(local, -1); - ieee80211_recalc_smps(local); - mutex_unlock(&local->iflist_mtx); - - netif_tx_start_all_queues(sdata->dev); - netif_carrier_on(sdata->dev); -} - -static void ieee80211_set_disassoc(struct ieee80211_sub_if_data *sdata, - u16 stype, u16 reason, bool tx, - u8 *frame_buf) -{ - struct ieee80211_if_managed *ifmgd = &sdata->u.mgd; - struct ieee80211_local *local = sdata->local; - struct sta_info *sta; - u32 changed = 0; - u8 bssid[ETH_ALEN]; - - ASSERT_MGD_MTX(ifmgd); - - if (WARN_ON_ONCE(tx && !frame_buf)) - return; - - if (WARN_ON(!ifmgd->associated)) - return; - - memcpy(bssid, ifmgd->associated->bssid, ETH_ALEN); - - ifmgd->associated = NULL; - memset(ifmgd->bssid, 0, ETH_ALEN); - - /* - * we need to commit the associated = NULL change because the - * scan code uses that to determine whether this iface should - * go to/wake up from powersave or not -- and could otherwise - * wake the queues erroneously. - */ - smp_mb(); - - /* - * Thus, we can only afterwards stop the queues -- to account - * for the case where another CPU is finishing a scan at this - * time -- we don't want the scan code to enable queues. - */ - - netif_tx_stop_all_queues(sdata->dev); - netif_carrier_off(sdata->dev); - - mutex_lock(&local->sta_mtx); - sta = sta_info_get(sdata, bssid); - if (sta) { - set_sta_flag(sta, WLAN_STA_BLOCK_BA); - ieee80211_sta_tear_down_BA_sessions(sta, tx); - } - mutex_unlock(&local->sta_mtx); - - /* deauthenticate/disassociate now */ - if (tx || frame_buf) - ieee80211_send_deauth_disassoc(sdata, bssid, stype, reason, - tx, frame_buf); - - /* flush out frame */ - if (tx) - drv_flush(local, false); - - /* remove AP and TDLS peers */ - sta_info_flush(local, sdata); - - /* finally reset all BSS / config parameters */ - changed |= ieee80211_reset_erp_info(sdata); - - ieee80211_led_assoc(local, 0); - changed |= BSS_CHANGED_ASSOC; - sdata->vif.bss_conf.assoc = false; - - /* on the next assoc, re-program HT parameters */ - sdata->ht_opmode_valid = false; - memset(&ifmgd->ht_capa, 0, sizeof(ifmgd->ht_capa)); - memset(&ifmgd->ht_capa_mask, 0, sizeof(ifmgd->ht_capa_mask)); - - local->power_constr_level = 0; - - del_timer_sync(&local->dynamic_ps_timer); - cancel_work_sync(&local->dynamic_ps_enable_work); - - if (local->hw.conf.flags & IEEE80211_CONF_PS) { - local->hw.conf.flags &= ~IEEE80211_CONF_PS; - ieee80211_hw_config(local, IEEE80211_CONF_CHANGE_PS); - } - local->ps_sdata = NULL; - - /* Disable ARP filtering */ - if (sdata->vif.bss_conf.arp_filter_enabled) { - sdata->vif.bss_conf.arp_filter_enabled = false; - changed |= BSS_CHANGED_ARP_FILTER; - } - - sdata->vif.bss_conf.qos = false; - changed |= BSS_CHANGED_QOS; - - /* The BSSID (not really interesting) and HT changed */ - changed |= BSS_CHANGED_BSSID | BSS_CHANGED_HT; - ieee80211_bss_info_change_notify(sdata, changed); - - /* channel(_type) changes are handled by ieee80211_hw_config */ - WARN_ON(!ieee80211_set_channel_type(local, sdata, NL80211_CHAN_NO_HT)); - ieee80211_hw_config(local, 0); - - /* disassociated - set to defaults now */ - ieee80211_set_wmm_default(sdata, false); - - del_timer_sync(&sdata->u.mgd.conn_mon_timer); - del_timer_sync(&sdata->u.mgd.bcn_mon_timer); - del_timer_sync(&sdata->u.mgd.timer); - del_timer_sync(&sdata->u.mgd.chswitch_timer); -} - -void ieee80211_sta_rx_notify(struct ieee80211_sub_if_data *sdata, - struct ieee80211_hdr *hdr) -{ - /* - * We can postpone the mgd.timer whenever receiving unicast frames - * from AP because we know that the connection is working both ways - * at that time. But multicast frames (and hence also beacons) must - * be ignored here, because we need to trigger the timer during - * data idle periods for sending the periodic probe request to the - * AP we're connected to. - */ - if (is_multicast_ether_addr(hdr->addr1)) - return; - - ieee80211_sta_reset_conn_monitor(sdata); -} - -static void ieee80211_reset_ap_probe(struct ieee80211_sub_if_data *sdata) -{ - struct ieee80211_if_managed *ifmgd = &sdata->u.mgd; - - if (!(ifmgd->flags & (IEEE80211_STA_BEACON_POLL | - IEEE80211_STA_CONNECTION_POLL))) - return; - - ifmgd->flags &= ~(IEEE80211_STA_CONNECTION_POLL | - IEEE80211_STA_BEACON_POLL); - mutex_lock(&sdata->local->iflist_mtx); - ieee80211_recalc_ps(sdata->local, -1); - mutex_unlock(&sdata->local->iflist_mtx); - - if (sdata->local->hw.flags & IEEE80211_HW_CONNECTION_MONITOR) - return; - - /* - * We've received a probe response, but are not sure whether - * we have or will be receiving any beacons or data, so let's - * schedule the timers again, just in case. - */ - ieee80211_sta_reset_beacon_monitor(sdata); - - mod_timer(&ifmgd->conn_mon_timer, - round_jiffies_up(jiffies + - IEEE80211_CONNECTION_IDLE_TIME)); -} - -void ieee80211_sta_tx_notify(struct ieee80211_sub_if_data *sdata, - struct ieee80211_hdr *hdr, bool ack) -{ - if (!ieee80211_is_data(hdr->frame_control)) - return; - - if (ack) - ieee80211_sta_reset_conn_monitor(sdata); - - if (ieee80211_is_nullfunc(hdr->frame_control) && - sdata->u.mgd.probe_send_count > 0) { - if (ack) - sdata->u.mgd.probe_send_count = 0; - else - sdata->u.mgd.nullfunc_failed = true; - ieee80211_queue_work(&sdata->local->hw, &sdata->work); - } -} - -static void ieee80211_mgd_probe_ap_send(struct ieee80211_sub_if_data *sdata) -{ - struct ieee80211_if_managed *ifmgd = &sdata->u.mgd; - const u8 *ssid; - u8 *dst = ifmgd->associated->bssid; - u8 unicast_limit = max(1, max_probe_tries - 3); - - /* - * Try sending broadcast probe requests for the last three - * probe requests after the first ones failed since some - * buggy APs only support broadcast probe requests. - */ - if (ifmgd->probe_send_count >= unicast_limit) - dst = NULL; - - /* - * When the hardware reports an accurate Tx ACK status, it's - * better to send a nullfunc frame instead of a probe request, - * as it will kick us off the AP quickly if we aren't associated - * anymore. The timeout will be reset if the frame is ACKed by - * the AP. - */ - if (sdata->local->hw.flags & IEEE80211_HW_REPORTS_TX_ACK_STATUS) { - ifmgd->nullfunc_failed = false; - ieee80211_send_nullfunc(sdata->local, sdata, 0); - } else { - ssid = ieee80211_bss_get_ie(ifmgd->associated, WLAN_EID_SSID); - ieee80211_send_probe_req(sdata, dst, ssid + 2, ssid[1], NULL, 0, - (u32) -1, true, false); - } - - ifmgd->probe_send_count++; - ifmgd->probe_timeout = jiffies + msecs_to_jiffies(probe_wait_ms); - run_again(ifmgd, ifmgd->probe_timeout); -} - -static void ieee80211_mgd_probe_ap(struct ieee80211_sub_if_data *sdata, - bool beacon) -{ - struct ieee80211_if_managed *ifmgd = &sdata->u.mgd; - bool already = false; - - if (!ieee80211_sdata_running(sdata)) - return; - - if (sdata->local->scanning) - return; - - if (sdata->local->tmp_channel) - return; - - mutex_lock(&ifmgd->mtx); - - if (!ifmgd->associated) - goto out; - -#ifdef CONFIG_MAC80211_VERBOSE_DEBUG - if (beacon && net_ratelimit()) - printk(KERN_DEBUG "%s: detected beacon loss from AP " - "- sending probe request\n", sdata->name); -#endif - - /* - * The driver/our work has already reported this event or the - * connection monitoring has kicked in and we have already sent - * a probe request. Or maybe the AP died and the driver keeps - * reporting until we disassociate... - * - * In either case we have to ignore the current call to this - * function (except for setting the correct probe reason bit) - * because otherwise we would reset the timer every time and - * never check whether we received a probe response! - */ - if (ifmgd->flags & (IEEE80211_STA_BEACON_POLL | - IEEE80211_STA_CONNECTION_POLL)) - already = true; - - if (beacon) - ifmgd->flags |= IEEE80211_STA_BEACON_POLL; - else - ifmgd->flags |= IEEE80211_STA_CONNECTION_POLL; - - if (already) - goto out; - - mutex_lock(&sdata->local->iflist_mtx); - ieee80211_recalc_ps(sdata->local, -1); - mutex_unlock(&sdata->local->iflist_mtx); - - ifmgd->probe_send_count = 0; - ieee80211_mgd_probe_ap_send(sdata); - out: - mutex_unlock(&ifmgd->mtx); -} - -struct sk_buff *ieee80211_ap_probereq_get(struct ieee80211_hw *hw, - struct ieee80211_vif *vif) -{ - struct ieee80211_sub_if_data *sdata = vif_to_sdata(vif); - struct ieee80211_if_managed *ifmgd = &sdata->u.mgd; - struct sk_buff *skb; - const u8 *ssid; - - if (WARN_ON(sdata->vif.type != NL80211_IFTYPE_STATION)) - return NULL; - - ASSERT_MGD_MTX(ifmgd); - - if (!ifmgd->associated) - return NULL; - - ssid = ieee80211_bss_get_ie(ifmgd->associated, WLAN_EID_SSID); - skb = ieee80211_build_probe_req(sdata, ifmgd->associated->bssid, - (u32) -1, ssid + 2, ssid[1], - NULL, 0, true); - - return skb; -} -EXPORT_SYMBOL(ieee80211_ap_probereq_get); - -static void __ieee80211_connection_loss(struct ieee80211_sub_if_data *sdata) -{ - struct ieee80211_if_managed *ifmgd = &sdata->u.mgd; - struct ieee80211_local *local = sdata->local; - u8 bssid[ETH_ALEN]; - u8 frame_buf[DEAUTH_DISASSOC_LEN]; - - mutex_lock(&ifmgd->mtx); - if (!ifmgd->associated) { - mutex_unlock(&ifmgd->mtx); - return; - } - - memcpy(bssid, ifmgd->associated->bssid, ETH_ALEN); - - printk(KERN_DEBUG "%s: Connection to AP %pM lost.\n", - sdata->name, bssid); - - ieee80211_set_disassoc(sdata, IEEE80211_STYPE_DEAUTH, - WLAN_REASON_DISASSOC_DUE_TO_INACTIVITY, - false, frame_buf); - mutex_unlock(&ifmgd->mtx); - - /* - * must be outside lock due to cfg80211, - * but that's not a problem. - */ - cfg80211_send_deauth(sdata->dev, frame_buf, DEAUTH_DISASSOC_LEN); - - mutex_lock(&local->mtx); - ieee80211_recalc_idle(local); - mutex_unlock(&local->mtx); -} - -void ieee80211_beacon_connection_loss_work(struct work_struct *work) -{ - struct ieee80211_sub_if_data *sdata = - container_of(work, struct ieee80211_sub_if_data, - u.mgd.beacon_connection_loss_work); - struct ieee80211_if_managed *ifmgd = &sdata->u.mgd; - struct sta_info *sta; - - if (ifmgd->associated) { - rcu_read_lock(); - sta = sta_info_get(sdata, ifmgd->bssid); - if (sta) - sta->beacon_loss_count++; - rcu_read_unlock(); - } - - if (sdata->local->hw.flags & IEEE80211_HW_CONNECTION_MONITOR) - __ieee80211_connection_loss(sdata); - else - ieee80211_mgd_probe_ap(sdata, true); -} - -void ieee80211_beacon_loss(struct ieee80211_vif *vif) -{ - struct ieee80211_sub_if_data *sdata = vif_to_sdata(vif); - struct ieee80211_hw *hw = &sdata->local->hw; - - trace_api_beacon_loss(sdata); - - WARN_ON(hw->flags & IEEE80211_HW_CONNECTION_MONITOR); - ieee80211_queue_work(hw, &sdata->u.mgd.beacon_connection_loss_work); -} -EXPORT_SYMBOL(ieee80211_beacon_loss); - -void ieee80211_connection_loss(struct ieee80211_vif *vif) -{ - struct ieee80211_sub_if_data *sdata = vif_to_sdata(vif); - struct ieee80211_hw *hw = &sdata->local->hw; - - trace_api_connection_loss(sdata); - - WARN_ON(!(hw->flags & IEEE80211_HW_CONNECTION_MONITOR)); - ieee80211_queue_work(hw, &sdata->u.mgd.beacon_connection_loss_work); -} -EXPORT_SYMBOL(ieee80211_connection_loss); - - -static void ieee80211_destroy_auth_data(struct ieee80211_sub_if_data *sdata, - bool assoc) -{ - struct ieee80211_mgd_auth_data *auth_data = sdata->u.mgd.auth_data; - - lockdep_assert_held(&sdata->u.mgd.mtx); - - if (!assoc) { - sta_info_destroy_addr(sdata, auth_data->bss->bssid); - - memset(sdata->u.mgd.bssid, 0, ETH_ALEN); - ieee80211_bss_info_change_notify(sdata, BSS_CHANGED_BSSID); - } - - cfg80211_put_bss(auth_data->bss); - kfree(auth_data); - sdata->u.mgd.auth_data = NULL; -} - -static void ieee80211_auth_challenge(struct ieee80211_sub_if_data *sdata, - struct ieee80211_mgmt *mgmt, size_t len) -{ - struct ieee80211_mgd_auth_data *auth_data = sdata->u.mgd.auth_data; - u8 *pos; - struct ieee802_11_elems elems; - - pos = mgmt->u.auth.variable; - ieee802_11_parse_elems(pos, len - (pos - (u8 *) mgmt), &elems); - if (!elems.challenge) - return; - auth_data->expected_transaction = 4; - ieee80211_send_auth(sdata, 3, auth_data->algorithm, - elems.challenge - 2, elems.challenge_len + 2, - auth_data->bss->bssid, auth_data->bss->bssid, - auth_data->key, auth_data->key_len, - auth_data->key_idx); -} - -static enum rx_mgmt_action __must_check -ieee80211_rx_mgmt_auth(struct ieee80211_sub_if_data *sdata, - struct ieee80211_mgmt *mgmt, size_t len) -{ - struct ieee80211_if_managed *ifmgd = &sdata->u.mgd; - u8 bssid[ETH_ALEN]; - u16 auth_alg, auth_transaction, status_code; - struct sta_info *sta; - - lockdep_assert_held(&ifmgd->mtx); - - if (len < 24 + 6) - return RX_MGMT_NONE; - - if (!ifmgd->auth_data || ifmgd->auth_data->done) - return RX_MGMT_NONE; - - memcpy(bssid, ifmgd->auth_data->bss->bssid, ETH_ALEN); - - if (compare_ether_addr(bssid, mgmt->bssid)) - return RX_MGMT_NONE; - - auth_alg = le16_to_cpu(mgmt->u.auth.auth_alg); - auth_transaction = le16_to_cpu(mgmt->u.auth.auth_transaction); - status_code = le16_to_cpu(mgmt->u.auth.status_code); - - if (auth_alg != ifmgd->auth_data->algorithm || - auth_transaction != ifmgd->auth_data->expected_transaction) - return RX_MGMT_NONE; - - if (status_code != WLAN_STATUS_SUCCESS) { - printk(KERN_DEBUG "%s: %pM denied authentication (status %d)\n", - sdata->name, mgmt->sa, status_code); - goto out; - } - - switch (ifmgd->auth_data->algorithm) { - case WLAN_AUTH_OPEN: - case WLAN_AUTH_LEAP: - case WLAN_AUTH_FT: - break; - case WLAN_AUTH_SHARED_KEY: - if (ifmgd->auth_data->expected_transaction != 4) { - ieee80211_auth_challenge(sdata, mgmt, len); - /* need another frame */ - return RX_MGMT_NONE; - } - break; - default: - WARN_ONCE(1, "invalid auth alg %d", - ifmgd->auth_data->algorithm); - return RX_MGMT_NONE; - } - - printk(KERN_DEBUG "%s: authenticated\n", sdata->name); - out: - ifmgd->auth_data->done = true; - ifmgd->auth_data->timeout = jiffies + IEEE80211_AUTH_WAIT_ASSOC; - run_again(ifmgd, ifmgd->auth_data->timeout); - - /* move station state to auth */ - mutex_lock(&sdata->local->sta_mtx); - sta = sta_info_get(sdata, bssid); - if (!sta) { - WARN_ONCE(1, "%s: STA %pM not found", sdata->name, bssid); - goto out_err; - } - if (sta_info_move_state(sta, IEEE80211_STA_AUTH)) { - printk(KERN_DEBUG "%s: failed moving %pM to auth\n", - sdata->name, bssid); - goto out_err; - } - mutex_unlock(&sdata->local->sta_mtx); - - return RX_MGMT_CFG80211_RX_AUTH; - out_err: - mutex_unlock(&sdata->local->sta_mtx); - /* ignore frame -- wait for timeout */ - return RX_MGMT_NONE; -} - - -static enum rx_mgmt_action __must_check -ieee80211_rx_mgmt_deauth(struct ieee80211_sub_if_data *sdata, - struct ieee80211_mgmt *mgmt, size_t len) -{ - struct ieee80211_if_managed *ifmgd = &sdata->u.mgd; - const u8 *bssid = NULL; - u16 reason_code; - - lockdep_assert_held(&ifmgd->mtx); - - if (len < 24 + 2) - return RX_MGMT_NONE; - - if (!ifmgd->associated || - compare_ether_addr(mgmt->bssid, ifmgd->associated->bssid)) - return RX_MGMT_NONE; - - bssid = ifmgd->associated->bssid; - - reason_code = le16_to_cpu(mgmt->u.deauth.reason_code); - - printk(KERN_DEBUG "%s: deauthenticated from %pM (Reason: %u)\n", - sdata->name, bssid, reason_code); - - ieee80211_set_disassoc(sdata, 0, 0, false, NULL); - - mutex_lock(&sdata->local->mtx); - ieee80211_recalc_idle(sdata->local); - mutex_unlock(&sdata->local->mtx); - - return RX_MGMT_CFG80211_DEAUTH; -} - - -static enum rx_mgmt_action __must_check -ieee80211_rx_mgmt_disassoc(struct ieee80211_sub_if_data *sdata, - struct ieee80211_mgmt *mgmt, size_t len) -{ - struct ieee80211_if_managed *ifmgd = &sdata->u.mgd; - u16 reason_code; - - lockdep_assert_held(&ifmgd->mtx); - - if (len < 24 + 2) - return RX_MGMT_NONE; - - if (!ifmgd->associated || - compare_ether_addr(mgmt->bssid, ifmgd->associated->bssid)) - return RX_MGMT_NONE; - - reason_code = le16_to_cpu(mgmt->u.disassoc.reason_code); - - printk(KERN_DEBUG "%s: disassociated from %pM (Reason: %u)\n", - sdata->name, mgmt->sa, reason_code); - - ieee80211_set_disassoc(sdata, 0, 0, false, NULL); - - mutex_lock(&sdata->local->mtx); - ieee80211_recalc_idle(sdata->local); - mutex_unlock(&sdata->local->mtx); - - return RX_MGMT_CFG80211_DISASSOC; -} - -static void ieee80211_get_rates(struct ieee80211_supported_band *sband, - u8 *supp_rates, unsigned int supp_rates_len, - u32 *rates, u32 *basic_rates, - bool *have_higher_than_11mbit, - int *min_rate, int *min_rate_index) -{ - int i, j; - - for (i = 0; i < supp_rates_len; i++) { - int rate = (supp_rates[i] & 0x7f) * 5; - bool is_basic = !!(supp_rates[i] & 0x80); - - if (rate > 110) - *have_higher_than_11mbit = true; - - /* - * BSS_MEMBERSHIP_SELECTOR_HT_PHY is defined in 802.11n-2009 - * 7.3.2.2 as a magic value instead of a rate. Hence, skip it. - * - * Note: Even through the membership selector and the basic - * rate flag share the same bit, they are not exactly - * the same. - */ - if (!!(supp_rates[i] & 0x80) && - (supp_rates[i] & 0x7f) == BSS_MEMBERSHIP_SELECTOR_HT_PHY) - continue; - - for (j = 0; j < sband->n_bitrates; j++) { - if (sband->bitrates[j].bitrate == rate) { - *rates |= BIT(j); - if (is_basic) - *basic_rates |= BIT(j); - if (rate < *min_rate) { - *min_rate = rate; - *min_rate_index = j; - } - break; - } - } - } -} - -static void ieee80211_destroy_assoc_data(struct ieee80211_sub_if_data *sdata, - bool assoc) -{ - struct ieee80211_mgd_assoc_data *assoc_data = sdata->u.mgd.assoc_data; - - lockdep_assert_held(&sdata->u.mgd.mtx); - - if (!assoc) { - sta_info_destroy_addr(sdata, assoc_data->bss->bssid); - - memset(sdata->u.mgd.bssid, 0, ETH_ALEN); - ieee80211_bss_info_change_notify(sdata, BSS_CHANGED_BSSID); - } - - kfree(assoc_data); - sdata->u.mgd.assoc_data = NULL; -} - -/* - * [PLATA] after a association success - the state machine is changed...how to do this for the OCB mode? - * probably the station should directly be in mode 'authorized' - */ -static bool ieee80211_assoc_success(struct ieee80211_sub_if_data *sdata, - struct cfg80211_bss *cbss, - struct ieee80211_mgmt *mgmt, size_t len) -{ - struct ieee80211_if_managed *ifmgd = &sdata->u.mgd; - struct ieee80211_local *local = sdata->local; - struct ieee80211_supported_band *sband; - struct sta_info *sta; - u8 *pos; - u16 capab_info, aid; - struct ieee802_11_elems elems; - struct ieee80211_bss_conf *bss_conf = &sdata->vif.bss_conf; - u32 changed = 0; - int err; - u16 ap_ht_cap_flags; - - /* AssocResp and ReassocResp have identical structure */ - - aid = le16_to_cpu(mgmt->u.assoc_resp.aid); - capab_info = le16_to_cpu(mgmt->u.assoc_resp.capab_info); - - if ((aid & (BIT(15) | BIT(14))) != (BIT(15) | BIT(14))) - printk(KERN_DEBUG - "%s: invalid AID value 0x%x; bits 15:14 not set\n", - sdata->name, aid); - aid &= ~(BIT(15) | BIT(14)); - - ifmgd->broken_ap = false; - - if (aid == 0 || aid > IEEE80211_MAX_AID) { - printk(KERN_DEBUG - "%s: invalid AID value %d (out of range), turn off PS\n", - sdata->name, aid); - aid = 0; - ifmgd->broken_ap = true; - } - - pos = mgmt->u.assoc_resp.variable; - ieee802_11_parse_elems(pos, len - (pos - (u8 *) mgmt), &elems); - - if (!elems.supp_rates) { - printk(KERN_DEBUG "%s: no SuppRates element in AssocResp\n", - sdata->name); - return false; - } - - ifmgd->aid = aid; - - mutex_lock(&sdata->local->sta_mtx); - /* - * station info was already allocated and inserted before - * the association and should be available to us - */ - sta = sta_info_get(sdata, cbss->bssid); - if (WARN_ON(!sta)) { - mutex_unlock(&sdata->local->sta_mtx); - return false; - } - - sband = local->hw.wiphy->bands[local->oper_channel->band]; - - if (elems.ht_cap_elem && !(ifmgd->flags & IEEE80211_STA_DISABLE_11N)) - ieee80211_ht_cap_ie_to_sta_ht_cap(sdata, sband, - elems.ht_cap_elem, &sta->sta.ht_cap); - - ap_ht_cap_flags = sta->sta.ht_cap.cap; - - rate_control_rate_init(sta); - - if (ifmgd->flags & IEEE80211_STA_MFP_ENABLED) - set_sta_flag(sta, WLAN_STA_MFP); - - if (elems.wmm_param) - set_sta_flag(sta, WLAN_STA_WME); - - err = sta_info_move_state(sta, IEEE80211_STA_AUTH); - if (!err) - err = sta_info_move_state(sta, IEEE80211_STA_ASSOC); - if (!err && !(ifmgd->flags & IEEE80211_STA_CONTROL_PORT)) - err = sta_info_move_state(sta, IEEE80211_STA_AUTHORIZED); - if (err) { - printk(KERN_DEBUG - "%s: failed to move station %pM to desired state\n", - sdata->name, sta->sta.addr); - WARN_ON(__sta_info_destroy(sta)); - mutex_unlock(&sdata->local->sta_mtx); - return false; - } - - mutex_unlock(&sdata->local->sta_mtx); - - /* - * Always handle WMM once after association regardless - * of the first value the AP uses. Setting -1 here has - * that effect because the AP values is an unsigned - * 4-bit value. - */ - ifmgd->wmm_last_param_set = -1; - - if (elems.wmm_param) - ieee80211_sta_wmm_params(local, sdata, elems.wmm_param, - elems.wmm_param_len); - else - ieee80211_set_wmm_default(sdata, false); - changed |= BSS_CHANGED_QOS; - - if (elems.ht_info_elem && elems.wmm_param && - !(ifmgd->flags & IEEE80211_STA_DISABLE_11N)) - changed |= ieee80211_enable_ht(sdata, elems.ht_info_elem, - cbss->bssid, ap_ht_cap_flags, - false); - - /* set AID and assoc capability, - * ieee80211_set_associated() will tell the driver */ - bss_conf->aid = aid; - bss_conf->assoc_capability = capab_info; - ieee80211_set_associated(sdata, cbss, changed); - - /* - * If we're using 4-addr mode, let the AP know that we're - * doing so, so that it can create the STA VLAN on its side - */ - if (ifmgd->use_4addr) - ieee80211_send_4addr_nullfunc(local, sdata); - - /* - * Start timer to probe the connection to the AP now. - * Also start the timer that will detect beacon loss. - */ - ieee80211_sta_rx_notify(sdata, (struct ieee80211_hdr *)mgmt); - ieee80211_sta_reset_beacon_monitor(sdata); - - return true; -} - -static enum rx_mgmt_action __must_check -ieee80211_rx_mgmt_assoc_resp(struct ieee80211_sub_if_data *sdata, - struct ieee80211_mgmt *mgmt, size_t len, - struct cfg80211_bss **bss) -{ - struct ieee80211_if_managed *ifmgd = &sdata->u.mgd; - struct ieee80211_mgd_assoc_data *assoc_data = ifmgd->assoc_data; - u16 capab_info, status_code, aid; - struct ieee802_11_elems elems; - u8 *pos; - bool reassoc; - - lockdep_assert_held(&ifmgd->mtx); - - if (!assoc_data) - return RX_MGMT_NONE; - if (compare_ether_addr(assoc_data->bss->bssid, mgmt->bssid)) - return RX_MGMT_NONE; - - /* - * AssocResp and ReassocResp have identical structure, so process both - * of them in this function. - */ - - if (len < 24 + 6) - return RX_MGMT_NONE; - - reassoc = ieee80211_is_reassoc_req(mgmt->frame_control); - capab_info = le16_to_cpu(mgmt->u.assoc_resp.capab_info); - status_code = le16_to_cpu(mgmt->u.assoc_resp.status_code); - aid = le16_to_cpu(mgmt->u.assoc_resp.aid); - - printk(KERN_DEBUG "%s: RX %sssocResp from %pM (capab=0x%x " - "status=%d aid=%d)\n", - sdata->name, reassoc ? "Rea" : "A", mgmt->sa, - capab_info, status_code, (u16)(aid & ~(BIT(15) | BIT(14)))); - - pos = mgmt->u.assoc_resp.variable; - ieee802_11_parse_elems(pos, len - (pos - (u8 *) mgmt), &elems); - - if (status_code == WLAN_STATUS_ASSOC_REJECTED_TEMPORARILY && - elems.timeout_int && elems.timeout_int_len == 5 && - elems.timeout_int[0] == WLAN_TIMEOUT_ASSOC_COMEBACK) { - u32 tu, ms; - tu = get_unaligned_le32(elems.timeout_int + 1); - ms = tu * 1024 / 1000; - printk(KERN_DEBUG "%s: %pM rejected association temporarily; " - "comeback duration %u TU (%u ms)\n", - sdata->name, mgmt->sa, tu, ms); - assoc_data->timeout = jiffies + msecs_to_jiffies(ms); - if (ms > IEEE80211_ASSOC_TIMEOUT) - run_again(ifmgd, assoc_data->timeout); - return RX_MGMT_NONE; - } - - *bss = assoc_data->bss; - - if (status_code != WLAN_STATUS_SUCCESS) { - printk(KERN_DEBUG "%s: %pM denied association (code=%d)\n", - sdata->name, mgmt->sa, status_code); - ieee80211_destroy_assoc_data(sdata, false); - } else { - printk(KERN_DEBUG "%s: associated\n", sdata->name); - - if (!ieee80211_assoc_success(sdata, *bss, mgmt, len)) { - /* oops -- internal error -- send timeout for now */ - ieee80211_destroy_assoc_data(sdata, true); - sta_info_destroy_addr(sdata, mgmt->bssid); - cfg80211_put_bss(*bss); - return RX_MGMT_CFG80211_ASSOC_TIMEOUT; - } - - /* - * destroy assoc_data afterwards, as otherwise an idle - * recalc after assoc_data is NULL but before associated - * is set can cause the interface to go idle - */ - ieee80211_destroy_assoc_data(sdata, true); - } - - return RX_MGMT_CFG80211_RX_ASSOC; -} -static void ieee80211_rx_bss_info(struct ieee80211_sub_if_data *sdata, - struct ieee80211_mgmt *mgmt, - size_t len, - struct ieee80211_rx_status *rx_status, - struct ieee802_11_elems *elems, - bool beacon) -{ - struct ieee80211_local *local = sdata->local; - int freq; - struct ieee80211_bss *bss; - struct ieee80211_channel *channel; - bool need_ps = false; - - if (sdata->u.mgd.associated && - compare_ether_addr(mgmt->bssid, sdata->u.mgd.associated->bssid) - == 0) { - bss = (void *)sdata->u.mgd.associated->priv; - /* not previously set so we may need to recalc */ - need_ps = !bss->dtim_period; - } - - if (elems->ds_params && elems->ds_params_len == 1) - freq = ieee80211_channel_to_frequency(elems->ds_params[0], - rx_status->band); - else - freq = rx_status->freq; - - channel = ieee80211_get_channel(local->hw.wiphy, freq); - - if (!channel || channel->flags & IEEE80211_CHAN_DISABLED) - return; - - bss = ieee80211_bss_info_update(local, rx_status, mgmt, len, elems, - channel, beacon); - if (bss) - ieee80211_rx_bss_put(local, bss); - - if (!sdata->u.mgd.associated) - return; - - if (need_ps) { - mutex_lock(&local->iflist_mtx); - ieee80211_recalc_ps(local, -1); - mutex_unlock(&local->iflist_mtx); - } - - if (elems->ch_switch_elem && (elems->ch_switch_elem_len == 3) && - (memcmp(mgmt->bssid, sdata->u.mgd.associated->bssid, - ETH_ALEN) == 0)) { - struct ieee80211_channel_sw_ie *sw_elem = - (struct ieee80211_channel_sw_ie *)elems->ch_switch_elem; - ieee80211_sta_process_chanswitch(sdata, sw_elem, - bss, rx_status->mactime); - } -} - - -static void ieee80211_rx_mgmt_probe_resp(struct ieee80211_sub_if_data *sdata, - struct sk_buff *skb) -{ - struct ieee80211_mgmt *mgmt = (void *)skb->data; - struct ieee80211_if_managed *ifmgd; - struct ieee80211_rx_status *rx_status = (void *) skb->cb; - size_t baselen, len = skb->len; - struct ieee802_11_elems elems; - - ifmgd = &sdata->u.mgd; - - ASSERT_MGD_MTX(ifmgd); - - if (compare_ether_addr(mgmt->da, sdata->vif.addr)) - return; /* ignore ProbeResp to foreign address */ - - baselen = (u8 *) mgmt->u.probe_resp.variable - (u8 *) mgmt; - if (baselen > len) - return; - - ieee802_11_parse_elems(mgmt->u.probe_resp.variable, len - baselen, - &elems); - - ieee80211_rx_bss_info(sdata, mgmt, len, rx_status, &elems, false); - - if (ifmgd->associated && - compare_ether_addr(mgmt->bssid, ifmgd->associated->bssid) == 0) - ieee80211_reset_ap_probe(sdata); - - if (ifmgd->auth_data && !ifmgd->auth_data->bss->proberesp_ies && - compare_ether_addr(mgmt->bssid, ifmgd->auth_data->bss->bssid) - == 0) { - /* got probe response, continue with auth */ - printk(KERN_DEBUG "%s: direct probe responded\n", sdata->name); - ifmgd->auth_data->tries = 0; - ifmgd->auth_data->timeout = jiffies; - run_again(ifmgd, ifmgd->auth_data->timeout); - } -} - -/* - * This is the canonical list of information elements we care about, - * the filter code also gives us all changes to the Microsoft OUI - * (00:50:F2) vendor IE which is used for WMM which we need to track. - * - * We implement beacon filtering in software since that means we can - * avoid processing the frame here and in cfg80211, and userspace - * will not be able to tell whether the hardware supports it or not. - * - * XXX: This list needs to be dynamic -- userspace needs to be able to - * add items it requires. It also needs to be able to tell us to - * look out for other vendor IEs. - */ -static const u64 care_about_ies = - (1ULL << WLAN_EID_COUNTRY) | - (1ULL << WLAN_EID_ERP_INFO) | - (1ULL << WLAN_EID_CHANNEL_SWITCH) | - (1ULL << WLAN_EID_PWR_CONSTRAINT) | - (1ULL << WLAN_EID_HT_CAPABILITY) | - (1ULL << WLAN_EID_HT_INFORMATION); - -static void ieee80211_rx_mgmt_beacon(struct ieee80211_sub_if_data *sdata, - struct ieee80211_mgmt *mgmt, - size_t len, - struct ieee80211_rx_status *rx_status) -{ - struct ieee80211_if_managed *ifmgd = &sdata->u.mgd; - struct ieee80211_bss_conf *bss_conf = &sdata->vif.bss_conf; - size_t baselen; - struct ieee802_11_elems elems; - struct ieee80211_local *local = sdata->local; - u32 changed = 0; - bool erp_valid, directed_tim = false; - u8 erp_value = 0; - u32 ncrc; - u8 *bssid; - - lockdep_assert_held(&ifmgd->mtx); - - /* Process beacon from the current BSS */ - baselen = (u8 *) mgmt->u.beacon.variable - (u8 *) mgmt; - if (baselen > len) - return; - - if (rx_status->freq != local->hw.conf.channel->center_freq) - return; - - if (ifmgd->assoc_data && !ifmgd->assoc_data->have_beacon && - compare_ether_addr(mgmt->bssid, ifmgd->assoc_data->bss->bssid) - == 0) { - ieee802_11_parse_elems(mgmt->u.beacon.variable, - len - baselen, &elems); - - ieee80211_rx_bss_info(sdata, mgmt, len, rx_status, &elems, - false); - ifmgd->assoc_data->have_beacon = true; - ifmgd->assoc_data->sent_assoc = false; - /* continue assoc process */ - ifmgd->assoc_data->timeout = jiffies; - run_again(ifmgd, ifmgd->assoc_data->timeout); - return; - } - - if (!ifmgd->associated || - compare_ether_addr(mgmt->bssid, ifmgd->associated->bssid)) - return; - bssid = ifmgd->associated->bssid; - - /* Track average RSSI from the Beacon frames of the current AP */ - ifmgd->last_beacon_signal = rx_status->signal; - if (ifmgd->flags & IEEE80211_STA_RESET_SIGNAL_AVE) { - ifmgd->flags &= ~IEEE80211_STA_RESET_SIGNAL_AVE; - ifmgd->ave_beacon_signal = rx_status->signal * 16; - ifmgd->last_cqm_event_signal = 0; - ifmgd->count_beacon_signal = 1; - ifmgd->last_ave_beacon_signal = 0; - } else { - ifmgd->ave_beacon_signal = - (IEEE80211_SIGNAL_AVE_WEIGHT * rx_status->signal * 16 + - (16 - IEEE80211_SIGNAL_AVE_WEIGHT) * - ifmgd->ave_beacon_signal) / 16; - ifmgd->count_beacon_signal++; - } - - if (ifmgd->rssi_min_thold != ifmgd->rssi_max_thold && - ifmgd->count_beacon_signal >= IEEE80211_SIGNAL_AVE_MIN_COUNT) { - int sig = ifmgd->ave_beacon_signal; - int last_sig = ifmgd->last_ave_beacon_signal; - - /* - * if signal crosses either of the boundaries, invoke callback - * with appropriate parameters - */ - if (sig > ifmgd->rssi_max_thold && - (last_sig <= ifmgd->rssi_min_thold || last_sig == 0)) { - ifmgd->last_ave_beacon_signal = sig; - drv_rssi_callback(local, RSSI_EVENT_HIGH); - } else if (sig < ifmgd->rssi_min_thold && - (last_sig >= ifmgd->rssi_max_thold || - last_sig == 0)) { - ifmgd->last_ave_beacon_signal = sig; - drv_rssi_callback(local, RSSI_EVENT_LOW); - } - } - - if (bss_conf->cqm_rssi_thold && - ifmgd->count_beacon_signal >= IEEE80211_SIGNAL_AVE_MIN_COUNT && - !(sdata->vif.driver_flags & IEEE80211_VIF_SUPPORTS_CQM_RSSI)) { - int sig = ifmgd->ave_beacon_signal / 16; - int last_event = ifmgd->last_cqm_event_signal; - int thold = bss_conf->cqm_rssi_thold; - int hyst = bss_conf->cqm_rssi_hyst; - if (sig < thold && - (last_event == 0 || sig < last_event - hyst)) { - ifmgd->last_cqm_event_signal = sig; - ieee80211_cqm_rssi_notify( - &sdata->vif, - NL80211_CQM_RSSI_THRESHOLD_EVENT_LOW, - GFP_KERNEL); - } else if (sig > thold && - (last_event == 0 || sig > last_event + hyst)) { - ifmgd->last_cqm_event_signal = sig; - ieee80211_cqm_rssi_notify( - &sdata->vif, - NL80211_CQM_RSSI_THRESHOLD_EVENT_HIGH, - GFP_KERNEL); - } - } - - if (ifmgd->flags & IEEE80211_STA_BEACON_POLL) { -#ifdef CONFIG_MAC80211_VERBOSE_DEBUG - if (net_ratelimit()) { - printk(KERN_DEBUG "%s: cancelling probereq poll due " - "to a received beacon\n", sdata->name); - } -#endif - ifmgd->flags &= ~IEEE80211_STA_BEACON_POLL; - mutex_lock(&local->iflist_mtx); - ieee80211_recalc_ps(local, -1); - mutex_unlock(&local->iflist_mtx); - } - - /* - * Push the beacon loss detection into the future since - * we are processing a beacon from the AP just now. - */ - ieee80211_sta_reset_beacon_monitor(sdata); - - ncrc = crc32_be(0, (void *)&mgmt->u.beacon.beacon_int, 4); - ncrc = ieee802_11_parse_elems_crc(mgmt->u.beacon.variable, - len - baselen, &elems, - care_about_ies, ncrc); - - if (local->hw.flags & IEEE80211_HW_PS_NULLFUNC_STACK) - directed_tim = ieee80211_check_tim(elems.tim, elems.tim_len, - ifmgd->aid); - - if (ncrc != ifmgd->beacon_crc || !ifmgd->beacon_crc_valid) { - ieee80211_rx_bss_info(sdata, mgmt, len, rx_status, &elems, - true); - - ieee80211_sta_wmm_params(local, sdata, elems.wmm_param, - elems.wmm_param_len); - } - - if (local->hw.flags & IEEE80211_HW_PS_NULLFUNC_STACK) { - if (directed_tim) { - if (local->hw.conf.dynamic_ps_timeout > 0) { - local->hw.conf.flags &= ~IEEE80211_CONF_PS; - ieee80211_hw_config(local, - IEEE80211_CONF_CHANGE_PS); - ieee80211_send_nullfunc(local, sdata, 0); - } else { - local->pspolling = true; - - /* - * Here is assumed that the driver will be - * able to send ps-poll frame and receive a - * response even though power save mode is - * enabled, but some drivers might require - * to disable power save here. This needs - * to be investigated. - */ - ieee80211_send_pspoll(local, sdata); - } - } - } - - if (ncrc == ifmgd->beacon_crc && ifmgd->beacon_crc_valid) - return; - ifmgd->beacon_crc = ncrc; - ifmgd->beacon_crc_valid = true; - - if (elems.erp_info && elems.erp_info_len >= 1) { - erp_valid = true; - erp_value = elems.erp_info[0]; - } else { - erp_valid = false; - } - changed |= ieee80211_handle_bss_capability(sdata, - le16_to_cpu(mgmt->u.beacon.capab_info), - erp_valid, erp_value); - - - if (elems.ht_cap_elem && elems.ht_info_elem && elems.wmm_param && - !(ifmgd->flags & IEEE80211_STA_DISABLE_11N)) { - struct sta_info *sta; - struct ieee80211_supported_band *sband; - u16 ap_ht_cap_flags; - - rcu_read_lock(); - - sta = sta_info_get(sdata, bssid); - if (WARN_ON(!sta)) { - rcu_read_unlock(); - return; - } - - sband = local->hw.wiphy->bands[local->hw.conf.channel->band]; - - ieee80211_ht_cap_ie_to_sta_ht_cap(sdata, sband, - elems.ht_cap_elem, &sta->sta.ht_cap); - - ap_ht_cap_flags = sta->sta.ht_cap.cap; - - rcu_read_unlock(); - - changed |= ieee80211_enable_ht(sdata, elems.ht_info_elem, - bssid, ap_ht_cap_flags, true); - } - - /* Note: country IE parsing is done for us by cfg80211 */ - if (elems.country_elem) { - /* TODO: IBSS also needs this */ - if (elems.pwr_constr_elem) - ieee80211_handle_pwr_constr(sdata, - le16_to_cpu(mgmt->u.probe_resp.capab_info), - elems.pwr_constr_elem, - elems.pwr_constr_elem_len); - } - - ieee80211_bss_info_change_notify(sdata, changed); -} - -void ieee80211_sta_rx_queued_mgmt(struct ieee80211_sub_if_data *sdata, - struct sk_buff *skb) -{ - struct ieee80211_if_managed *ifmgd = &sdata->u.mgd; - struct ieee80211_rx_status *rx_status; - struct ieee80211_mgmt *mgmt; - struct cfg80211_bss *bss = NULL; - enum rx_mgmt_action rma = RX_MGMT_NONE; - u16 fc; - - rx_status = (struct ieee80211_rx_status *) skb->cb; - mgmt = (struct ieee80211_mgmt *) skb->data; - fc = le16_to_cpu(mgmt->frame_control); - - mutex_lock(&ifmgd->mtx); - - switch (fc & IEEE80211_FCTL_STYPE) { - case IEEE80211_STYPE_BEACON: - ieee80211_rx_mgmt_beacon(sdata, mgmt, skb->len, rx_status); - break; - case IEEE80211_STYPE_PROBE_RESP: - ieee80211_rx_mgmt_probe_resp(sdata, skb); - break; - case IEEE80211_STYPE_AUTH: - rma = ieee80211_rx_mgmt_auth(sdata, mgmt, skb->len); - break; - case IEEE80211_STYPE_DEAUTH: - rma = ieee80211_rx_mgmt_deauth(sdata, mgmt, skb->len); - break; - case IEEE80211_STYPE_DISASSOC: - rma = ieee80211_rx_mgmt_disassoc(sdata, mgmt, skb->len); - break; - case IEEE80211_STYPE_ASSOC_RESP: - case IEEE80211_STYPE_REASSOC_RESP: - rma = ieee80211_rx_mgmt_assoc_resp(sdata, mgmt, skb->len, &bss); - break; - case IEEE80211_STYPE_ACTION: - switch (mgmt->u.action.category) { - case WLAN_CATEGORY_SPECTRUM_MGMT: - ieee80211_sta_process_chanswitch(sdata, - &mgmt->u.action.u.chan_switch.sw_elem, - (void *)ifmgd->associated->priv, - rx_status->mactime); - break; - } - } - mutex_unlock(&ifmgd->mtx); - - switch (rma) { - case RX_MGMT_NONE: - /* no action */ - break; - case RX_MGMT_CFG80211_DEAUTH: - cfg80211_send_deauth(sdata->dev, (u8 *)mgmt, skb->len); - break; - case RX_MGMT_CFG80211_DISASSOC: - cfg80211_send_disassoc(sdata->dev, (u8 *)mgmt, skb->len); - break; - case RX_MGMT_CFG80211_RX_AUTH: - cfg80211_send_rx_auth(sdata->dev, (u8 *)mgmt, skb->len); - break; - case RX_MGMT_CFG80211_RX_ASSOC: - cfg80211_send_rx_assoc(sdata->dev, bss, (u8 *)mgmt, skb->len); - break; - case RX_MGMT_CFG80211_ASSOC_TIMEOUT: - cfg80211_send_assoc_timeout(sdata->dev, mgmt->bssid); - break; - default: - WARN(1, "unexpected: %d", rma); - } -} - -static void ieee80211_sta_timer(unsigned long data) -{ - struct ieee80211_sub_if_data *sdata = - (struct ieee80211_sub_if_data *) data; - struct ieee80211_if_managed *ifmgd = &sdata->u.mgd; - struct ieee80211_local *local = sdata->local; - - if (local->quiescing) { - set_bit(TMR_RUNNING_TIMER, &ifmgd->timers_running); - return; - } - - ieee80211_queue_work(&local->hw, &sdata->work); -} - -static void ieee80211_sta_connection_lost(struct ieee80211_sub_if_data *sdata, - u8 *bssid, u8 reason) -{ - struct ieee80211_local *local = sdata->local; - struct ieee80211_if_managed *ifmgd = &sdata->u.mgd; - u8 frame_buf[DEAUTH_DISASSOC_LEN]; - - ifmgd->flags &= ~(IEEE80211_STA_CONNECTION_POLL | - IEEE80211_STA_BEACON_POLL); - - ieee80211_set_disassoc(sdata, IEEE80211_STYPE_DEAUTH, reason, - false, frame_buf); - mutex_unlock(&ifmgd->mtx); - - /* - * must be outside lock due to cfg80211, - * but that's not a problem. - */ - cfg80211_send_deauth(sdata->dev, frame_buf, DEAUTH_DISASSOC_LEN); - - mutex_lock(&local->mtx); - ieee80211_recalc_idle(local); - mutex_unlock(&local->mtx); - - mutex_lock(&ifmgd->mtx); -} - -static int ieee80211_probe_auth(struct ieee80211_sub_if_data *sdata) -{ - struct ieee80211_local *local = sdata->local; - struct ieee80211_if_managed *ifmgd = &sdata->u.mgd; - struct ieee80211_mgd_auth_data *auth_data = ifmgd->auth_data; - - lockdep_assert_held(&ifmgd->mtx); - - if (WARN_ON_ONCE(!auth_data)) - return -EINVAL; - - auth_data->tries++; - - if (auth_data->tries > IEEE80211_AUTH_MAX_TRIES) { - printk(KERN_DEBUG "%s: authentication with %pM timed out\n", - sdata->name, auth_data->bss->bssid); - - /* - * Most likely AP is not in the range so remove the - * bss struct for that AP. - */ - cfg80211_unlink_bss(local->hw.wiphy, auth_data->bss); - - return -ETIMEDOUT; - } - - if (auth_data->bss->proberesp_ies) { - printk(KERN_DEBUG "%s: send auth to %pM (try %d/%d)\n", - sdata->name, auth_data->bss->bssid, auth_data->tries, - IEEE80211_AUTH_MAX_TRIES); - - auth_data->expected_transaction = 2; - ieee80211_send_auth(sdata, 1, auth_data->algorithm, - auth_data->ie, auth_data->ie_len, - auth_data->bss->bssid, - auth_data->bss->bssid, NULL, 0, 0); - } else { - const u8 *ssidie; - - printk(KERN_DEBUG "%s: direct probe to %pM (try %d/%i)\n", - sdata->name, auth_data->bss->bssid, auth_data->tries, - IEEE80211_AUTH_MAX_TRIES); - - ssidie = ieee80211_bss_get_ie(auth_data->bss, WLAN_EID_SSID); - if (!ssidie) - return -EINVAL; - /* - * Direct probe is sent to broadcast address as some APs - * will not answer to direct packet in unassociated state. - */ - ieee80211_send_probe_req(sdata, NULL, ssidie + 2, ssidie[1], - NULL, 0, (u32) -1, true, false); - } - - auth_data->timeout = jiffies + IEEE80211_AUTH_TIMEOUT; - run_again(ifmgd, auth_data->timeout); - - return 0; -} - -static int ieee80211_do_assoc(struct ieee80211_sub_if_data *sdata) -{ - struct ieee80211_mgd_assoc_data *assoc_data = sdata->u.mgd.assoc_data; - struct ieee80211_local *local = sdata->local; - - lockdep_assert_held(&sdata->u.mgd.mtx); - - assoc_data->tries++; - if (assoc_data->tries > IEEE80211_ASSOC_MAX_TRIES) { - printk(KERN_DEBUG "%s: association with %pM timed out\n", - sdata->name, assoc_data->bss->bssid); - - /* - * Most likely AP is not in the range so remove the - * bss struct for that AP. - */ - cfg80211_unlink_bss(local->hw.wiphy, assoc_data->bss); - - return -ETIMEDOUT; - } - - printk(KERN_DEBUG "%s: associate with %pM (try %d/%d)\n", - sdata->name, assoc_data->bss->bssid, assoc_data->tries, - IEEE80211_ASSOC_MAX_TRIES); - ieee80211_send_assoc(sdata); - - assoc_data->timeout = jiffies + IEEE80211_ASSOC_TIMEOUT; - run_again(&sdata->u.mgd, assoc_data->timeout); - - return 0; -} - -void ieee80211_sta_work(struct ieee80211_sub_if_data *sdata) -{ - struct ieee80211_local *local = sdata->local; - struct ieee80211_if_managed *ifmgd = &sdata->u.mgd; - - mutex_lock(&ifmgd->mtx); - - if (ifmgd->auth_data && - time_after(jiffies, ifmgd->auth_data->timeout)) { - if (ifmgd->auth_data->done) { - /* - * ok ... we waited for assoc but userspace didn't, - * so let's just kill the auth data - */ - ieee80211_destroy_auth_data(sdata, false); - } else if (ieee80211_probe_auth(sdata)) { - u8 bssid[ETH_ALEN]; - - memcpy(bssid, ifmgd->auth_data->bss->bssid, ETH_ALEN); - - ieee80211_destroy_auth_data(sdata, false); - - mutex_unlock(&ifmgd->mtx); - cfg80211_send_auth_timeout(sdata->dev, bssid); - mutex_lock(&ifmgd->mtx); - } - } else if (ifmgd->auth_data) - run_again(ifmgd, ifmgd->auth_data->timeout); - - if (ifmgd->assoc_data && - time_after(jiffies, ifmgd->assoc_data->timeout)) { - if (!ifmgd->assoc_data->have_beacon || - ieee80211_do_assoc(sdata)) { - u8 bssid[ETH_ALEN]; - - memcpy(bssid, ifmgd->assoc_data->bss->bssid, ETH_ALEN); - - ieee80211_destroy_assoc_data(sdata, false); - - mutex_unlock(&ifmgd->mtx); - cfg80211_send_assoc_timeout(sdata->dev, bssid); - mutex_lock(&ifmgd->mtx); - } - } else if (ifmgd->assoc_data) - run_again(ifmgd, ifmgd->assoc_data->timeout); - - if (ifmgd->flags & (IEEE80211_STA_BEACON_POLL | - IEEE80211_STA_CONNECTION_POLL) && - ifmgd->associated) { - u8 bssid[ETH_ALEN]; - int max_tries; - - memcpy(bssid, ifmgd->associated->bssid, ETH_ALEN); - - if (local->hw.flags & IEEE80211_HW_REPORTS_TX_ACK_STATUS) - max_tries = max_nullfunc_tries; - else - max_tries = max_probe_tries; - - /* ACK received for nullfunc probing frame */ - if (!ifmgd->probe_send_count) - ieee80211_reset_ap_probe(sdata); - else if (ifmgd->nullfunc_failed) { - if (ifmgd->probe_send_count < max_tries) { -#ifdef CONFIG_MAC80211_VERBOSE_DEBUG - wiphy_debug(local->hw.wiphy, - "%s: No ack for nullfunc frame to" - " AP %pM, try %d/%i\n", - sdata->name, bssid, - ifmgd->probe_send_count, max_tries); -#endif - ieee80211_mgd_probe_ap_send(sdata); - } else { -#ifdef CONFIG_MAC80211_VERBOSE_DEBUG - wiphy_debug(local->hw.wiphy, - "%s: No ack for nullfunc frame to" - " AP %pM, disconnecting.\n", - sdata->name, bssid); -#endif - ieee80211_sta_connection_lost(sdata, bssid, - WLAN_REASON_DISASSOC_DUE_TO_INACTIVITY); - } - } else if (time_is_after_jiffies(ifmgd->probe_timeout)) - run_again(ifmgd, ifmgd->probe_timeout); - else if (local->hw.flags & IEEE80211_HW_REPORTS_TX_ACK_STATUS) { -#ifdef CONFIG_MAC80211_VERBOSE_DEBUG - wiphy_debug(local->hw.wiphy, - "%s: Failed to send nullfunc to AP %pM" - " after %dms, disconnecting.\n", - sdata->name, - bssid, probe_wait_ms); -#endif - ieee80211_sta_connection_lost(sdata, bssid, - WLAN_REASON_DISASSOC_DUE_TO_INACTIVITY); - } else if (ifmgd->probe_send_count < max_tries) { -#ifdef CONFIG_MAC80211_VERBOSE_DEBUG - wiphy_debug(local->hw.wiphy, - "%s: No probe response from AP %pM" - " after %dms, try %d/%i\n", - sdata->name, - bssid, probe_wait_ms, - ifmgd->probe_send_count, max_tries); -#endif - ieee80211_mgd_probe_ap_send(sdata); - } else { - /* - * We actually lost the connection ... or did we? - * Let's make sure! - */ - wiphy_debug(local->hw.wiphy, - "%s: No probe response from AP %pM" - " after %dms, disconnecting.\n", - sdata->name, - bssid, probe_wait_ms); - - ieee80211_sta_connection_lost(sdata, bssid, - WLAN_REASON_DISASSOC_DUE_TO_INACTIVITY); - } - } - - mutex_unlock(&ifmgd->mtx); - - mutex_lock(&local->mtx); - ieee80211_recalc_idle(local); - mutex_unlock(&local->mtx); -} - -static void ieee80211_sta_bcn_mon_timer(unsigned long data) -{ - struct ieee80211_sub_if_data *sdata = - (struct ieee80211_sub_if_data *) data; - struct ieee80211_local *local = sdata->local; - - if (local->quiescing) - return; - - ieee80211_queue_work(&sdata->local->hw, - &sdata->u.mgd.beacon_connection_loss_work); -} - -static void ieee80211_sta_conn_mon_timer(unsigned long data) -{ - struct ieee80211_sub_if_data *sdata = - (struct ieee80211_sub_if_data *) data; - struct ieee80211_if_managed *ifmgd = &sdata->u.mgd; - struct ieee80211_local *local = sdata->local; - - if (local->quiescing) - return; - - ieee80211_queue_work(&local->hw, &ifmgd->monitor_work); -} - -static void ieee80211_sta_monitor_work(struct work_struct *work) -{ - struct ieee80211_sub_if_data *sdata = - container_of(work, struct ieee80211_sub_if_data, - u.mgd.monitor_work); - - ieee80211_mgd_probe_ap(sdata, false); -} - -static void ieee80211_restart_sta_timer(struct ieee80211_sub_if_data *sdata) -{ - u32 flags; - - if (sdata->vif.type == NL80211_IFTYPE_STATION) { - sdata->u.mgd.flags &= ~(IEEE80211_STA_BEACON_POLL | - IEEE80211_STA_CONNECTION_POLL); - - /* let's probe the connection once */ - flags = sdata->local->hw.flags; - if (!(flags & IEEE80211_HW_CONNECTION_MONITOR)) - ieee80211_queue_work(&sdata->local->hw, - &sdata->u.mgd.monitor_work); - /* and do all the other regular work too */ - ieee80211_queue_work(&sdata->local->hw, &sdata->work); - } -} - -#ifdef CONFIG_PM -void ieee80211_sta_quiesce(struct ieee80211_sub_if_data *sdata) -{ - struct ieee80211_if_managed *ifmgd = &sdata->u.mgd; - - /* - * we need to use atomic bitops for the running bits - * only because both timers might fire at the same - * time -- the code here is properly synchronised. - */ - - cancel_work_sync(&ifmgd->request_smps_work); - - cancel_work_sync(&ifmgd->monitor_work); - cancel_work_sync(&ifmgd->beacon_connection_loss_work); - if (del_timer_sync(&ifmgd->timer)) - set_bit(TMR_RUNNING_TIMER, &ifmgd->timers_running); - - cancel_work_sync(&ifmgd->chswitch_work); - if (del_timer_sync(&ifmgd->chswitch_timer)) - set_bit(TMR_RUNNING_CHANSW, &ifmgd->timers_running); - - /* these will just be re-established on connection */ - del_timer_sync(&ifmgd->conn_mon_timer); - del_timer_sync(&ifmgd->bcn_mon_timer); -} - -void ieee80211_sta_restart(struct ieee80211_sub_if_data *sdata) -{ - struct ieee80211_if_managed *ifmgd = &sdata->u.mgd; - - if (!ifmgd->associated) - return; - - if (sdata->flags & IEEE80211_SDATA_DISCONNECT_RESUME) { - sdata->flags &= ~IEEE80211_SDATA_DISCONNECT_RESUME; - mutex_lock(&ifmgd->mtx); - if (ifmgd->associated) { -#ifdef CONFIG_MAC80211_VERBOSE_DEBUG - wiphy_debug(sdata->local->hw.wiphy, - "%s: driver requested disconnect after resume.\n", - sdata->name); -#endif - ieee80211_sta_connection_lost(sdata, - ifmgd->associated->bssid, - WLAN_REASON_UNSPECIFIED); - mutex_unlock(&ifmgd->mtx); - return; - } - mutex_unlock(&ifmgd->mtx); - } - - if (test_and_clear_bit(TMR_RUNNING_TIMER, &ifmgd->timers_running)) - add_timer(&ifmgd->timer); - if (test_and_clear_bit(TMR_RUNNING_CHANSW, &ifmgd->timers_running)) - add_timer(&ifmgd->chswitch_timer); - ieee80211_sta_reset_beacon_monitor(sdata); - ieee80211_restart_sta_timer(sdata); -} -#endif - -/* interface setup */ -void ieee80211_sta_setup_sdata(struct ieee80211_sub_if_data *sdata) -{ - struct ieee80211_if_managed *ifmgd; - - ifmgd = &sdata->u.mgd; - INIT_WORK(&ifmgd->monitor_work, ieee80211_sta_monitor_work); - INIT_WORK(&ifmgd->chswitch_work, ieee80211_chswitch_work); - INIT_WORK(&ifmgd->beacon_connection_loss_work, - ieee80211_beacon_connection_loss_work); - INIT_WORK(&ifmgd->request_smps_work, ieee80211_request_smps_work); - setup_timer(&ifmgd->timer, ieee80211_sta_timer, - (unsigned long) sdata); - setup_timer(&ifmgd->bcn_mon_timer, ieee80211_sta_bcn_mon_timer, - (unsigned long) sdata); - setup_timer(&ifmgd->conn_mon_timer, ieee80211_sta_conn_mon_timer, - (unsigned long) sdata); - setup_timer(&ifmgd->chswitch_timer, ieee80211_chswitch_timer, - (unsigned long) sdata); - - ifmgd->flags = 0; - ifmgd->powersave = sdata->wdev.ps; - ifmgd->uapsd_queues = IEEE80211_DEFAULT_UAPSD_QUEUES; - ifmgd->uapsd_max_sp_len = IEEE80211_DEFAULT_MAX_SP_LEN; - - mutex_init(&ifmgd->mtx); - - if (sdata->local->hw.flags & IEEE80211_HW_SUPPORTS_DYNAMIC_SMPS) - ifmgd->req_smps = IEEE80211_SMPS_AUTOMATIC; - else - ifmgd->req_smps = IEEE80211_SMPS_OFF; -} - -/* scan finished notification */ -void ieee80211_mlme_notify_scan_completed(struct ieee80211_local *local) -{ - struct ieee80211_sub_if_data *sdata = local->scan_sdata; - - /* Restart STA timers */ - rcu_read_lock(); - list_for_each_entry_rcu(sdata, &local->interfaces, list) - ieee80211_restart_sta_timer(sdata); - rcu_read_unlock(); -} - -int ieee80211_max_network_latency(struct notifier_block *nb, - unsigned long data, void *dummy) -{ - s32 latency_usec = (s32) data; - struct ieee80211_local *local = - container_of(nb, struct ieee80211_local, - network_latency_notifier); - - mutex_lock(&local->iflist_mtx); - ieee80211_recalc_ps(local, latency_usec); - mutex_unlock(&local->iflist_mtx); - - return 0; -} - -static int ieee80211_prep_connection(struct ieee80211_sub_if_data *sdata, - struct cfg80211_bss *cbss, bool assoc) -{ - struct ieee80211_local *local = sdata->local; - struct ieee80211_if_managed *ifmgd = &sdata->u.mgd; - struct ieee80211_bss *bss = (void *)cbss->priv; - struct sta_info *sta; - bool have_sta = false; - int err; - - if (WARN_ON(!ifmgd->auth_data && !ifmgd->assoc_data)) - return -EINVAL; - - if (assoc) { - rcu_read_lock(); - have_sta = sta_info_get(sdata, cbss->bssid); - rcu_read_unlock(); - } - - if (!have_sta) { - sta = sta_info_alloc(sdata, cbss->bssid, GFP_KERNEL); - if (!sta) - return -ENOMEM; - } - - mutex_lock(&local->mtx); - ieee80211_recalc_idle(sdata->local); - mutex_unlock(&local->mtx); - - /* switch to the right channel */ - local->oper_channel = cbss->channel; - ieee80211_hw_config(local, IEEE80211_CONF_CHANGE_CHANNEL); - - if (!have_sta) { - struct ieee80211_supported_band *sband; - u32 rates = 0, basic_rates = 0; - bool have_higher_than_11mbit; - int min_rate = INT_MAX, min_rate_index = -1; - - sband = sdata->local->hw.wiphy->bands[cbss->channel->band]; - - ieee80211_get_rates(sband, bss->supp_rates, - bss->supp_rates_len, - &rates, &basic_rates, - &have_higher_than_11mbit, - &min_rate, &min_rate_index); - - /* - * This used to be a workaround for basic rates missing - * in the association response frame. Now that we no - * longer use the basic rates from there, it probably - * doesn't happen any more, but keep the workaround so - * in case some *other* APs are buggy in different ways - * we can connect -- with a warning. - */ - if (!basic_rates && min_rate_index >= 0) { - printk(KERN_DEBUG - "%s: No basic rates, using min rate instead.\n", - sdata->name); - basic_rates = BIT(min_rate_index); - } - - sta->sta.supp_rates[cbss->channel->band] = rates; - sdata->vif.bss_conf.basic_rates = basic_rates; - - /* cf. IEEE 802.11 9.2.12 */ - if (local->oper_channel->band == IEEE80211_BAND_2GHZ && - have_higher_than_11mbit) - sdata->flags |= IEEE80211_SDATA_OPERATING_GMODE; - else - sdata->flags &= ~IEEE80211_SDATA_OPERATING_GMODE; - - memcpy(ifmgd->bssid, cbss->bssid, ETH_ALEN); - - /* tell driver about BSSID and basic rates */ - ieee80211_bss_info_change_notify(sdata, - BSS_CHANGED_BSSID | BSS_CHANGED_BASIC_RATES); - - if (assoc) - sta_info_pre_move_state(sta, IEEE80211_STA_AUTH); - - err = sta_info_insert(sta); - sta = NULL; - if (err) { - printk(KERN_DEBUG - "%s: failed to insert STA entry for the AP (error %d)\n", - sdata->name, err); - return err; - } - } else - WARN_ON_ONCE(compare_ether_addr(ifmgd->bssid, cbss->bssid)); - - return 0; -} - -/* config hooks */ -int ieee80211_mgd_auth(struct ieee80211_sub_if_data *sdata, - struct cfg80211_auth_request *req) -{ - struct ieee80211_local *local = sdata->local; - struct ieee80211_if_managed *ifmgd = &sdata->u.mgd; - struct ieee80211_mgd_auth_data *auth_data; - u16 auth_alg; - int err; - - /* prepare auth data structure */ - - switch (req->auth_type) { - case NL80211_AUTHTYPE_OPEN_SYSTEM: - auth_alg = WLAN_AUTH_OPEN; - break; - case NL80211_AUTHTYPE_SHARED_KEY: - if (IS_ERR(local->wep_tx_tfm)) - return -EOPNOTSUPP; - auth_alg = WLAN_AUTH_SHARED_KEY; - break; - case NL80211_AUTHTYPE_FT: - auth_alg = WLAN_AUTH_FT; - break; - case NL80211_AUTHTYPE_NETWORK_EAP: - auth_alg = WLAN_AUTH_LEAP; - break; - default: - return -EOPNOTSUPP; - } - - auth_data = kzalloc(sizeof(*auth_data) + req->ie_len, GFP_KERNEL); - if (!auth_data) - return -ENOMEM; - - auth_data->bss = req->bss; - - if (req->ie && req->ie_len) { - memcpy(auth_data->ie, req->ie, req->ie_len); - auth_data->ie_len = req->ie_len; - } - - if (req->key && req->key_len) { - auth_data->key_len = req->key_len; - auth_data->key_idx = req->key_idx; - memcpy(auth_data->key, req->key, req->key_len); - } - - auth_data->algorithm = auth_alg; - - /* try to authenticate/probe */ - - mutex_lock(&ifmgd->mtx); - - if ((ifmgd->auth_data && !ifmgd->auth_data->done) || - ifmgd->assoc_data) { - err = -EBUSY; - goto err_free; - } - - if (ifmgd->auth_data) - ieee80211_destroy_auth_data(sdata, false); - - /* prep auth_data so we don't go into idle on disassoc */ - ifmgd->auth_data = auth_data; - - if (ifmgd->associated) - ieee80211_set_disassoc(sdata, 0, 0, false, NULL); - - printk(KERN_DEBUG "%s: authenticate with %pM\n", - sdata->name, req->bss->bssid); - - err = ieee80211_prep_connection(sdata, req->bss, false); - if (err) - goto err_clear; - - err = ieee80211_probe_auth(sdata); - if (err) { - sta_info_destroy_addr(sdata, req->bss->bssid); - goto err_clear; - } - - /* hold our own reference */ - cfg80211_ref_bss(auth_data->bss); - err = 0; - goto out_unlock; - - err_clear: - ifmgd->auth_data = NULL; - err_free: - kfree(auth_data); - out_unlock: - mutex_unlock(&ifmgd->mtx); - - return err; -} - -int ieee80211_mgd_assoc(struct ieee80211_sub_if_data *sdata, - struct cfg80211_assoc_request *req) -{ - struct ieee80211_local *local = sdata->local; - struct ieee80211_if_managed *ifmgd = &sdata->u.mgd; - struct ieee80211_bss *bss = (void *)req->bss->priv; - struct ieee80211_mgd_assoc_data *assoc_data; - struct ieee80211_supported_band *sband; - const u8 *ssidie; - int i, err; - - ssidie = ieee80211_bss_get_ie(req->bss, WLAN_EID_SSID); - if (!ssidie) - return -EINVAL; - - assoc_data = kzalloc(sizeof(*assoc_data) + req->ie_len, GFP_KERNEL); - if (!assoc_data) - return -ENOMEM; - - mutex_lock(&ifmgd->mtx); - - if (ifmgd->associated) - ieee80211_set_disassoc(sdata, 0, 0, false, NULL); - - if (ifmgd->auth_data && !ifmgd->auth_data->done) { - err = -EBUSY; - goto err_free; - } - - if (ifmgd->assoc_data) { - err = -EBUSY; - goto err_free; - } - - if (ifmgd->auth_data) { - bool match; - - /* keep sta info, bssid if matching */ - match = compare_ether_addr(ifmgd->bssid, req->bss->bssid) == 0; - ieee80211_destroy_auth_data(sdata, match); - } - - /* prepare assoc data */ - - ifmgd->flags &= ~IEEE80211_STA_DISABLE_11N; - ifmgd->flags &= ~IEEE80211_STA_NULLFUNC_ACKED; - - ifmgd->beacon_crc_valid = false; - - /* - * IEEE802.11n does not allow TKIP/WEP as pairwise ciphers in HT mode. - * We still associate in non-HT mode (11a/b/g) if any one of these - * ciphers is configured as pairwise. - * We can set this to true for non-11n hardware, that'll be checked - * separately along with the peer capabilities. - */ - for (i = 0; i < req->crypto.n_ciphers_pairwise; i++) - if (req->crypto.ciphers_pairwise[i] == WLAN_CIPHER_SUITE_WEP40 || - req->crypto.ciphers_pairwise[i] == WLAN_CIPHER_SUITE_TKIP || - req->crypto.ciphers_pairwise[i] == WLAN_CIPHER_SUITE_WEP104) - ifmgd->flags |= IEEE80211_STA_DISABLE_11N; - - if (req->flags & ASSOC_REQ_DISABLE_HT) - ifmgd->flags |= IEEE80211_STA_DISABLE_11N; - - /* Also disable HT if we don't support it or the AP doesn't use WMM */ - sband = local->hw.wiphy->bands[req->bss->channel->band]; - if (!sband->ht_cap.ht_supported || - local->hw.queues < 4 || !bss->wmm_used) - ifmgd->flags |= IEEE80211_STA_DISABLE_11N; - - memcpy(&ifmgd->ht_capa, &req->ht_capa, sizeof(ifmgd->ht_capa)); - memcpy(&ifmgd->ht_capa_mask, &req->ht_capa_mask, - sizeof(ifmgd->ht_capa_mask)); - - if (req->ie && req->ie_len) { - memcpy(assoc_data->ie, req->ie, req->ie_len); - assoc_data->ie_len = req->ie_len; - } - - assoc_data->bss = req->bss; - - if (ifmgd->req_smps == IEEE80211_SMPS_AUTOMATIC) { - if (ifmgd->powersave) - ifmgd->ap_smps = IEEE80211_SMPS_DYNAMIC; - else - ifmgd->ap_smps = IEEE80211_SMPS_OFF; - } else - ifmgd->ap_smps = ifmgd->req_smps; - - assoc_data->capability = req->bss->capability; - assoc_data->wmm = bss->wmm_used && (local->hw.queues >= 4); - assoc_data->supp_rates = bss->supp_rates; - assoc_data->supp_rates_len = bss->supp_rates_len; - assoc_data->ht_information_ie = - ieee80211_bss_get_ie(req->bss, WLAN_EID_HT_INFORMATION); - - if (bss->wmm_used && bss->uapsd_supported && - (sdata->local->hw.flags & IEEE80211_HW_SUPPORTS_UAPSD)) { - assoc_data->uapsd = true; - ifmgd->flags |= IEEE80211_STA_UAPSD_ENABLED; - } else { - assoc_data->uapsd = false; - ifmgd->flags &= ~IEEE80211_STA_UAPSD_ENABLED; - } - - memcpy(assoc_data->ssid, ssidie + 2, ssidie[1]); - assoc_data->ssid_len = ssidie[1]; - - if (req->prev_bssid) - memcpy(assoc_data->prev_bssid, req->prev_bssid, ETH_ALEN); - - if (req->use_mfp) { - ifmgd->mfp = IEEE80211_MFP_REQUIRED; - ifmgd->flags |= IEEE80211_STA_MFP_ENABLED; - } else { - ifmgd->mfp = IEEE80211_MFP_DISABLED; - ifmgd->flags &= ~IEEE80211_STA_MFP_ENABLED; - } - - if (req->crypto.control_port) - ifmgd->flags |= IEEE80211_STA_CONTROL_PORT; - else - ifmgd->flags &= ~IEEE80211_STA_CONTROL_PORT; - - sdata->control_port_protocol = req->crypto.control_port_ethertype; - sdata->control_port_no_encrypt = req->crypto.control_port_no_encrypt; - - /* kick off associate process */ - - ifmgd->assoc_data = assoc_data; - - err = ieee80211_prep_connection(sdata, req->bss, true); - if (err) - goto err_clear; - - if (!bss->dtim_period && - sdata->local->hw.flags & IEEE80211_HW_NEED_DTIM_PERIOD) { - /* - * Wait up to one beacon interval ... - * should this be more if we miss one? - */ - printk(KERN_DEBUG "%s: waiting for beacon from %pM\n", - sdata->name, ifmgd->bssid); - assoc_data->timeout = TU_TO_EXP_TIME(req->bss->beacon_interval); - } else { - assoc_data->have_beacon = true; - assoc_data->sent_assoc = false; - assoc_data->timeout = jiffies; - } - run_again(ifmgd, assoc_data->timeout); - - if (bss->corrupt_data) { - char *corrupt_type = "data"; - if (bss->corrupt_data & IEEE80211_BSS_CORRUPT_BEACON) { - if (bss->corrupt_data & - IEEE80211_BSS_CORRUPT_PROBE_RESP) - corrupt_type = "beacon and probe response"; - else - corrupt_type = "beacon"; - } else if (bss->corrupt_data & IEEE80211_BSS_CORRUPT_PROBE_RESP) - corrupt_type = "probe response"; - printk(KERN_DEBUG "%s: associating with AP with corrupt %s\n", - sdata->name, corrupt_type); - } - - err = 0; - goto out; - err_clear: - ifmgd->assoc_data = NULL; - err_free: - kfree(assoc_data); - out: - mutex_unlock(&ifmgd->mtx); - - return err; -} - -int ieee80211_mgd_deauth(struct ieee80211_sub_if_data *sdata, - struct cfg80211_deauth_request *req) -{ - struct ieee80211_if_managed *ifmgd = &sdata->u.mgd; - u8 frame_buf[DEAUTH_DISASSOC_LEN]; - - mutex_lock(&ifmgd->mtx); - - if (ifmgd->auth_data) { - ieee80211_destroy_auth_data(sdata, false); - mutex_unlock(&ifmgd->mtx); - return 0; - } - - printk(KERN_DEBUG - "%s: deauthenticating from %pM by local choice (reason=%d)\n", - sdata->name, req->bssid, req->reason_code); - - if (ifmgd->associated && - compare_ether_addr(ifmgd->associated->bssid, req->bssid) == 0) - ieee80211_set_disassoc(sdata, IEEE80211_STYPE_DEAUTH, - req->reason_code, true, frame_buf); - else - ieee80211_send_deauth_disassoc(sdata, req->bssid, - IEEE80211_STYPE_DEAUTH, - req->reason_code, true, - frame_buf); - mutex_unlock(&ifmgd->mtx); - - __cfg80211_send_deauth(sdata->dev, frame_buf, DEAUTH_DISASSOC_LEN); - - mutex_lock(&sdata->local->mtx); - ieee80211_recalc_idle(sdata->local); - mutex_unlock(&sdata->local->mtx); - - return 0; -} - -int ieee80211_mgd_disassoc(struct ieee80211_sub_if_data *sdata, - struct cfg80211_disassoc_request *req) -{ - struct ieee80211_if_managed *ifmgd = &sdata->u.mgd; - u8 bssid[ETH_ALEN]; - u8 frame_buf[DEAUTH_DISASSOC_LEN]; - - mutex_lock(&ifmgd->mtx); - - /* - * cfg80211 should catch this ... but it's racy since - * we can receive a disassoc frame, process it, hand it - * to cfg80211 while that's in a locked section already - * trying to tell us that the user wants to disconnect. - */ - if (ifmgd->associated != req->bss) { - mutex_unlock(&ifmgd->mtx); - return -ENOLINK; - } - - printk(KERN_DEBUG "%s: disassociating from %pM by local choice (reason=%d)\n", - sdata->name, req->bss->bssid, req->reason_code); - - memcpy(bssid, req->bss->bssid, ETH_ALEN); - ieee80211_set_disassoc(sdata, IEEE80211_STYPE_DISASSOC, - req->reason_code, !req->local_state_change, - frame_buf); - mutex_unlock(&ifmgd->mtx); - - __cfg80211_send_disassoc(sdata->dev, frame_buf, DEAUTH_DISASSOC_LEN); - - mutex_lock(&sdata->local->mtx); - ieee80211_recalc_idle(sdata->local); - mutex_unlock(&sdata->local->mtx); - - return 0; -} - -void ieee80211_mgd_teardown(struct ieee80211_sub_if_data *sdata) -{ - struct ieee80211_if_managed *ifmgd = &sdata->u.mgd; - - mutex_lock(&ifmgd->mtx); - if (ifmgd->assoc_data) - ieee80211_destroy_assoc_data(sdata, false); - if (ifmgd->auth_data) - ieee80211_destroy_auth_data(sdata, false); - del_timer_sync(&ifmgd->timer); - mutex_unlock(&ifmgd->mtx); -} - -void ieee80211_cqm_rssi_notify(struct ieee80211_vif *vif, - enum nl80211_cqm_rssi_threshold_event rssi_event, - gfp_t gfp) -{ - struct ieee80211_sub_if_data *sdata = vif_to_sdata(vif); - - trace_api_cqm_rssi_notify(sdata, rssi_event); - - cfg80211_cqm_rssi_notify(sdata->dev, rssi_event, gfp); -} -EXPORT_SYMBOL(ieee80211_cqm_rssi_notify); - -unsigned char ieee80211_get_operstate(struct ieee80211_vif *vif) -{ - struct ieee80211_sub_if_data *sdata = vif_to_sdata(vif); - return sdata->dev->operstate; -} -EXPORT_SYMBOL(ieee80211_get_operstate); diff --git a/openairITS/mac/DOT11/net/mac80211/modules.order b/openairITS/mac/DOT11/net/mac80211/modules.order deleted file mode 100644 index c3b62d6bdb..0000000000 --- a/openairITS/mac/DOT11/net/mac80211/modules.order +++ /dev/null @@ -1 +0,0 @@ -kernel//home/thales/openair4G/openairITS/mac/DOT11/net/mac80211/mac80211_eurecom.ko diff --git a/openairITS/mac/DOT11/net/mac80211/offchannel.c b/openairITS/mac/DOT11/net/mac80211/offchannel.c deleted file mode 100644 index f054e94901..0000000000 --- a/openairITS/mac/DOT11/net/mac80211/offchannel.c +++ /dev/null @@ -1,266 +0,0 @@ -/* - * Off-channel operation helpers - * - * Copyright 2003, Jouni Malinen - * Copyright 2004, Instant802 Networks, Inc. - * Copyright 2005, Devicescape Software, Inc. - * Copyright 2006-2007 Jiri Benc - * Copyright 2007, Michael Wu - * Copyright 2009 Johannes Berg - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - */ -#include -#include -#include "ieee80211_i.h" -#include "driver-trace.h" - -/* - * Tell our hardware to disable PS. - * Optionally inform AP that we will go to sleep so that it will buffer - * the frames while we are doing off-channel work. This is optional - * because we *may* be doing work on-operating channel, and want our - * hardware unconditionally awake, but still let the AP send us normal frames. - */ -static void ieee80211_offchannel_ps_enable(struct ieee80211_sub_if_data *sdata, - bool tell_ap) -{ - struct ieee80211_local *local = sdata->local; - struct ieee80211_if_managed *ifmgd = &sdata->u.mgd; - - local->offchannel_ps_enabled = false; - - /* FIXME: what to do when local->pspolling is true? */ - - del_timer_sync(&local->dynamic_ps_timer); - del_timer_sync(&ifmgd->bcn_mon_timer); - del_timer_sync(&ifmgd->conn_mon_timer); - - cancel_work_sync(&local->dynamic_ps_enable_work); - - if (local->hw.conf.flags & IEEE80211_CONF_PS) { - local->offchannel_ps_enabled = true; - local->hw.conf.flags &= ~IEEE80211_CONF_PS; - ieee80211_hw_config(local, IEEE80211_CONF_CHANGE_PS); - } - - if (tell_ap && (!local->offchannel_ps_enabled || - !(local->hw.flags & IEEE80211_HW_PS_NULLFUNC_STACK))) - /* - * If power save was enabled, no need to send a nullfunc - * frame because AP knows that we are sleeping. But if the - * hardware is creating the nullfunc frame for power save - * status (ie. IEEE80211_HW_PS_NULLFUNC_STACK is not - * enabled) and power save was enabled, the firmware just - * sent a null frame with power save disabled. So we need - * to send a new nullfunc frame to inform the AP that we - * are again sleeping. - */ - ieee80211_send_nullfunc(local, sdata, 1); -} - -/* inform AP that we are awake again, unless power save is enabled */ -static void ieee80211_offchannel_ps_disable(struct ieee80211_sub_if_data *sdata) -{ - struct ieee80211_local *local = sdata->local; - - if (!local->ps_sdata) - ieee80211_send_nullfunc(local, sdata, 0); - else if (local->offchannel_ps_enabled) { - /* - * In !IEEE80211_HW_PS_NULLFUNC_STACK case the hardware - * will send a nullfunc frame with the powersave bit set - * even though the AP already knows that we are sleeping. - * This could be avoided by sending a null frame with power - * save bit disabled before enabling the power save, but - * this doesn't gain anything. - * - * When IEEE80211_HW_PS_NULLFUNC_STACK is enabled, no need - * to send a nullfunc frame because AP already knows that - * we are sleeping, let's just enable power save mode in - * hardware. - */ - /* TODO: Only set hardware if CONF_PS changed? - * TODO: Should we set offchannel_ps_enabled to false? - */ - local->hw.conf.flags |= IEEE80211_CONF_PS; - ieee80211_hw_config(local, IEEE80211_CONF_CHANGE_PS); - } else if (local->hw.conf.dynamic_ps_timeout > 0) { - /* - * If IEEE80211_CONF_PS was not set and the dynamic_ps_timer - * had been running before leaving the operating channel, - * restart the timer now and send a nullfunc frame to inform - * the AP that we are awake. - */ - ieee80211_send_nullfunc(local, sdata, 0); - mod_timer(&local->dynamic_ps_timer, jiffies + - msecs_to_jiffies(local->hw.conf.dynamic_ps_timeout)); - } - - ieee80211_sta_reset_beacon_monitor(sdata); - ieee80211_sta_reset_conn_monitor(sdata); -} - -void ieee80211_offchannel_stop_vifs(struct ieee80211_local *local, - bool offchannel_ps_enable) -{ - struct ieee80211_sub_if_data *sdata; - - /* - * notify the AP about us leaving the channel and stop all - * STA interfaces. - */ - mutex_lock(&local->iflist_mtx); - list_for_each_entry(sdata, &local->interfaces, list) { - if (!ieee80211_sdata_running(sdata)) - continue; - - if (sdata->vif.type != NL80211_IFTYPE_MONITOR) - set_bit(SDATA_STATE_OFFCHANNEL, &sdata->state); - - /* Check to see if we should disable beaconing. */ - if (sdata->vif.type == NL80211_IFTYPE_AP || - sdata->vif.type == NL80211_IFTYPE_ADHOC || - sdata->vif.type == NL80211_IFTYPE_MESH_POINT) - ieee80211_bss_info_change_notify( - sdata, BSS_CHANGED_BEACON_ENABLED); - - if (sdata->vif.type != NL80211_IFTYPE_MONITOR) { - netif_tx_stop_all_queues(sdata->dev); - if (offchannel_ps_enable && - (sdata->vif.type == NL80211_IFTYPE_STATION) && - sdata->u.mgd.associated) - ieee80211_offchannel_ps_enable(sdata, true); - } - } - mutex_unlock(&local->iflist_mtx); -} - -void ieee80211_offchannel_return(struct ieee80211_local *local, - bool offchannel_ps_disable) -{ - struct ieee80211_sub_if_data *sdata; - - mutex_lock(&local->iflist_mtx); - list_for_each_entry(sdata, &local->interfaces, list) { - if (sdata->vif.type != NL80211_IFTYPE_MONITOR) - clear_bit(SDATA_STATE_OFFCHANNEL, &sdata->state); - - if (!ieee80211_sdata_running(sdata)) - continue; - - /* Tell AP we're back */ - if (offchannel_ps_disable && - sdata->vif.type == NL80211_IFTYPE_STATION) { - if (sdata->u.mgd.associated) - ieee80211_offchannel_ps_disable(sdata); - } - - if (sdata->vif.type != NL80211_IFTYPE_MONITOR) { - /* - * This may wake up queues even though the driver - * currently has them stopped. This is not very - * likely, since the driver won't have gotten any - * (or hardly any) new packets while we weren't - * on the right channel, and even if it happens - * it will at most lead to queueing up one more - * packet per queue in mac80211 rather than on - * the interface qdisc. - */ - netif_tx_wake_all_queues(sdata->dev); - } - - if (sdata->vif.type == NL80211_IFTYPE_AP || - sdata->vif.type == NL80211_IFTYPE_ADHOC || - sdata->vif.type == NL80211_IFTYPE_MESH_POINT) - ieee80211_bss_info_change_notify( - sdata, BSS_CHANGED_BEACON_ENABLED); - } - mutex_unlock(&local->iflist_mtx); -} - -static void ieee80211_hw_roc_start(struct work_struct *work) -{ - struct ieee80211_local *local = - container_of(work, struct ieee80211_local, hw_roc_start); - struct ieee80211_sub_if_data *sdata; - - mutex_lock(&local->mtx); - - if (!local->hw_roc_channel) { - mutex_unlock(&local->mtx); - return; - } - - if (local->hw_roc_skb) { - sdata = IEEE80211_DEV_TO_SUB_IF(local->hw_roc_dev); - ieee80211_tx_skb(sdata, local->hw_roc_skb); - local->hw_roc_skb = NULL; - } else { - cfg80211_ready_on_channel(local->hw_roc_dev, - local->hw_roc_cookie, - local->hw_roc_channel, - local->hw_roc_channel_type, - local->hw_roc_duration, - GFP_KERNEL); - } - - ieee80211_recalc_idle(local); - - mutex_unlock(&local->mtx); -} - -void ieee80211_ready_on_channel(struct ieee80211_hw *hw) -{ - struct ieee80211_local *local = hw_to_local(hw); - - trace_api_ready_on_channel(local); - - ieee80211_queue_work(hw, &local->hw_roc_start); -} -EXPORT_SYMBOL_GPL(ieee80211_ready_on_channel); - -static void ieee80211_hw_roc_done(struct work_struct *work) -{ - struct ieee80211_local *local = - container_of(work, struct ieee80211_local, hw_roc_done); - - mutex_lock(&local->mtx); - - if (!local->hw_roc_channel) { - mutex_unlock(&local->mtx); - return; - } - - if (!local->hw_roc_for_tx) - cfg80211_remain_on_channel_expired(local->hw_roc_dev, - local->hw_roc_cookie, - local->hw_roc_channel, - local->hw_roc_channel_type, - GFP_KERNEL); - - local->hw_roc_channel = NULL; - local->hw_roc_cookie = 0; - - ieee80211_recalc_idle(local); - - mutex_unlock(&local->mtx); -} - -void ieee80211_remain_on_channel_expired(struct ieee80211_hw *hw) -{ - struct ieee80211_local *local = hw_to_local(hw); - - trace_api_remain_on_channel_expired(local); - - ieee80211_queue_work(hw, &local->hw_roc_done); -} -EXPORT_SYMBOL_GPL(ieee80211_remain_on_channel_expired); - -void ieee80211_hw_roc_setup(struct ieee80211_local *local) -{ - INIT_WORK(&local->hw_roc_start, ieee80211_hw_roc_start); - INIT_WORK(&local->hw_roc_done, ieee80211_hw_roc_done); -} diff --git a/openairITS/mac/DOT11/net/mac80211/pm.c b/openairITS/mac/DOT11/net/mac80211/pm.c deleted file mode 100644 index ef8eba1d73..0000000000 --- a/openairITS/mac/DOT11/net/mac80211/pm.c +++ /dev/null @@ -1,147 +0,0 @@ -#include -#include - -#include "ieee80211_i.h" -#include "mesh.h" -#include "driver-ops.h" -#include "led.h" - -/* return value indicates whether the driver should be further notified */ -static bool ieee80211_quiesce(struct ieee80211_sub_if_data *sdata) -{ - switch (sdata->vif.type) { - case NL80211_IFTYPE_STATION: - ieee80211_sta_quiesce(sdata); - return true; - case NL80211_IFTYPE_ADHOC: - ieee80211_ibss_quiesce(sdata); - return true; - case NL80211_IFTYPE_MESH_POINT: - ieee80211_mesh_quiesce(sdata); - return true; - case NL80211_IFTYPE_AP_VLAN: - case NL80211_IFTYPE_MONITOR: - /* don't tell driver about this */ - return false; - default: - return true; - } -} - -int __ieee80211_suspend(struct ieee80211_hw *hw, struct cfg80211_wowlan *wowlan) -{ - struct ieee80211_local *local = hw_to_local(hw); - struct ieee80211_sub_if_data *sdata; - struct sta_info *sta; - - if (!local->open_count) - goto suspend; - - ieee80211_scan_cancel(local); - - if (hw->flags & IEEE80211_HW_AMPDU_AGGREGATION) { - mutex_lock(&local->sta_mtx); - list_for_each_entry(sta, &local->sta_list, list) { - set_sta_flag(sta, WLAN_STA_BLOCK_BA); - ieee80211_sta_tear_down_BA_sessions(sta, true); - } - mutex_unlock(&local->sta_mtx); - } - - ieee80211_stop_queues_by_reason(hw, - IEEE80211_QUEUE_STOP_REASON_SUSPEND); - - /* flush out all packets */ - synchronize_net(); - - drv_flush(local, false); - - local->quiescing = true; - /* make quiescing visible to timers everywhere */ - mb(); - - flush_workqueue(local->workqueue); - - /* Don't try to run timers while suspended. */ - del_timer_sync(&local->sta_cleanup); - - /* - * Note that this particular timer doesn't need to be - * restarted at resume. - */ - cancel_work_sync(&local->dynamic_ps_enable_work); - del_timer_sync(&local->dynamic_ps_timer); - - local->wowlan = wowlan && local->open_count; - if (local->wowlan) { - int err = drv_suspend(local, wowlan); - if (err < 0) { - local->quiescing = false; - return err; - } else if (err > 0) { - WARN_ON(err != 1); - local->wowlan = false; - } else { - list_for_each_entry(sdata, &local->interfaces, list) { - cancel_work_sync(&sdata->work); - ieee80211_quiesce(sdata); - } - goto suspend; - } - } - - /* disable keys */ - list_for_each_entry(sdata, &local->interfaces, list) - ieee80211_disable_keys(sdata); - - /* tear down aggregation sessions and remove STAs */ - mutex_lock(&local->sta_mtx); - list_for_each_entry(sta, &local->sta_list, list) { - if (sta->uploaded) { - enum ieee80211_sta_state state; - - state = sta->sta_state; - for (; state > IEEE80211_STA_NOTEXIST; state--) - WARN_ON(drv_sta_state(local, sta->sdata, sta, - state, state - 1)); - } - - mesh_plink_quiesce(sta); - } - mutex_unlock(&local->sta_mtx); - - /* remove all interfaces */ - list_for_each_entry(sdata, &local->interfaces, list) { - cancel_work_sync(&sdata->work); - - if (!ieee80211_quiesce(sdata)) - continue; - - if (!ieee80211_sdata_running(sdata)) - continue; - - /* disable beaconing */ - ieee80211_bss_info_change_notify(sdata, - BSS_CHANGED_BEACON_ENABLED); - - drv_remove_interface(local, sdata); - } - - /* stop hardware - this must stop RX */ - if (local->open_count) - ieee80211_stop_device(local); - - suspend: - local->suspended = true; - /* need suspended to be visible before quiescing is false */ - barrier(); - local->quiescing = false; - - return 0; -} - -/* - * __ieee80211_resume() is a static inline which just calls - * ieee80211_reconfig(), which is also needed for hardware - * hang/firmware failure/etc. recovery. - */ diff --git a/openairITS/mac/DOT11/net/mac80211/rate.c b/openairITS/mac/DOT11/net/mac80211/rate.c deleted file mode 100644 index da85baff8f..0000000000 --- a/openairITS/mac/DOT11/net/mac80211/rate.c +++ /dev/null @@ -1,534 +0,0 @@ -/* - * Copyright 2002-2005, Instant802 Networks, Inc. - * Copyright 2005-2006, Devicescape Software, Inc. - * Copyright (c) 2006 Jiri Benc - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - */ - -#include -#include -#include -#include -#include "rate.h" -#include "ieee80211_i.h" -#include "debugfs.h" - -struct rate_control_alg { - struct list_head list; - struct rate_control_ops *ops; -}; - -static LIST_HEAD(rate_ctrl_algs); -static DEFINE_MUTEX(rate_ctrl_mutex); - -static char *ieee80211_default_rc_algo = CONFIG_COMPAT_MAC80211_RC_DEFAULT; -module_param(ieee80211_default_rc_algo, charp, 0644); -MODULE_PARM_DESC(ieee80211_default_rc_algo, - "Default rate control algorithm for mac80211 to use"); - -int ieee80211_rate_control_register(struct rate_control_ops *ops) -{ - struct rate_control_alg *alg; - - if (!ops->name) - return -EINVAL; - - mutex_lock(&rate_ctrl_mutex); - list_for_each_entry(alg, &rate_ctrl_algs, list) { - if (!strcmp(alg->ops->name, ops->name)) { - /* don't register an algorithm twice */ - WARN_ON(1); - mutex_unlock(&rate_ctrl_mutex); - return -EALREADY; - } - } - - alg = kzalloc(sizeof(*alg), GFP_KERNEL); - if (alg == NULL) { - mutex_unlock(&rate_ctrl_mutex); - return -ENOMEM; - } - alg->ops = ops; - - list_add_tail(&alg->list, &rate_ctrl_algs); - mutex_unlock(&rate_ctrl_mutex); - - return 0; -} -EXPORT_SYMBOL(ieee80211_rate_control_register); - -void ieee80211_rate_control_unregister(struct rate_control_ops *ops) -{ - struct rate_control_alg *alg; - - mutex_lock(&rate_ctrl_mutex); - list_for_each_entry(alg, &rate_ctrl_algs, list) { - if (alg->ops == ops) { - list_del(&alg->list); - kfree(alg); - break; - } - } - mutex_unlock(&rate_ctrl_mutex); -} -EXPORT_SYMBOL(ieee80211_rate_control_unregister); - -static struct rate_control_ops * -ieee80211_try_rate_control_ops_get(const char *name) -{ - struct rate_control_alg *alg; - struct rate_control_ops *ops = NULL; - - if (!name) - return NULL; - - mutex_lock(&rate_ctrl_mutex); - list_for_each_entry(alg, &rate_ctrl_algs, list) { - if (!strcmp(alg->ops->name, name)) - if (try_module_get(alg->ops->module)) { - ops = alg->ops; - break; - } - } - mutex_unlock(&rate_ctrl_mutex); - return ops; -} - -/* Get the rate control algorithm. */ -static struct rate_control_ops * -ieee80211_rate_control_ops_get(const char *name) -{ - struct rate_control_ops *ops; - const char *alg_name; - - kparam_block_sysfs_write(ieee80211_default_rc_algo); - if (!name) - alg_name = ieee80211_default_rc_algo; - else - alg_name = name; - - ops = ieee80211_try_rate_control_ops_get(alg_name); - if (!ops) { - request_module("rc80211_%s", alg_name); - ops = ieee80211_try_rate_control_ops_get(alg_name); - } - if (!ops && name) - /* try default if specific alg requested but not found */ - ops = ieee80211_try_rate_control_ops_get(ieee80211_default_rc_algo); - - /* try built-in one if specific alg requested but not found */ - if (!ops && strlen(CONFIG_COMPAT_MAC80211_RC_DEFAULT)) - ops = ieee80211_try_rate_control_ops_get(CONFIG_COMPAT_MAC80211_RC_DEFAULT); - kparam_unblock_sysfs_write(ieee80211_default_rc_algo); - - return ops; -} - -static void ieee80211_rate_control_ops_put(struct rate_control_ops *ops) -{ - module_put(ops->module); -} - -#ifdef CONFIG_MAC80211_DEBUGFS -static ssize_t rcname_read(struct file *file, char __user *userbuf, - size_t count, loff_t *ppos) -{ - struct rate_control_ref *ref = file->private_data; - int len = strlen(ref->ops->name); - - return simple_read_from_buffer(userbuf, count, ppos, - ref->ops->name, len); -} - -static const struct file_operations rcname_ops = { - .read = rcname_read, - .open = simple_open, - .llseek = default_llseek, -}; -#endif - -static struct rate_control_ref *rate_control_alloc(const char *name, - struct ieee80211_local *local) -{ - struct dentry *debugfsdir = NULL; - struct rate_control_ref *ref; - - ref = kmalloc(sizeof(struct rate_control_ref), GFP_KERNEL); - if (!ref) - goto fail_ref; - ref->local = local; - ref->ops = ieee80211_rate_control_ops_get(name); - if (!ref->ops) - goto fail_ops; - -#ifdef CONFIG_MAC80211_DEBUGFS - debugfsdir = debugfs_create_dir("rc", local->hw.wiphy->debugfsdir); - local->debugfs.rcdir = debugfsdir; - debugfs_create_file("name", 0400, debugfsdir, ref, &rcname_ops); -#endif - - ref->priv = ref->ops->alloc(&local->hw, debugfsdir); - if (!ref->priv) - goto fail_priv; - return ref; - -fail_priv: - ieee80211_rate_control_ops_put(ref->ops); -fail_ops: - kfree(ref); -fail_ref: - return NULL; -} - -static void rate_control_free(struct rate_control_ref *ctrl_ref) -{ - ctrl_ref->ops->free(ctrl_ref->priv); - -#ifdef CONFIG_MAC80211_DEBUGFS - debugfs_remove_recursive(ctrl_ref->local->debugfs.rcdir); - ctrl_ref->local->debugfs.rcdir = NULL; -#endif - - ieee80211_rate_control_ops_put(ctrl_ref->ops); - kfree(ctrl_ref); -} - -static bool rc_no_data_or_no_ack_use_min(struct ieee80211_tx_rate_control *txrc) -{ - struct sk_buff *skb = txrc->skb; - struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) skb->data; - struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb); - __le16 fc; - - fc = hdr->frame_control; - - return (info->flags & (IEEE80211_TX_CTL_NO_ACK | - IEEE80211_TX_CTL_USE_MINRATE)) || - !ieee80211_is_data(fc); -} - -static void rc_send_low_broadcast(s8 *idx, u32 basic_rates, - struct ieee80211_supported_band *sband) -{ - u8 i; - - if (basic_rates == 0) - return; /* assume basic rates unknown and accept rate */ - if (*idx < 0) - return; - if (basic_rates & (1 << *idx)) - return; /* selected rate is a basic rate */ - - for (i = *idx + 1; i <= sband->n_bitrates; i++) { - if (basic_rates & (1 << i)) { - *idx = i; - return; - } - } - - /* could not find a basic rate; use original selection */ -} - -static inline s8 -rate_lowest_non_cck_index(struct ieee80211_supported_band *sband, - struct ieee80211_sta *sta) -{ - int i; - - for (i = 0; i < sband->n_bitrates; i++) { - struct ieee80211_rate *srate = &sband->bitrates[i]; - if ((srate->bitrate == 10) || (srate->bitrate == 20) || - (srate->bitrate == 55) || (srate->bitrate == 110)) - continue; - - if (rate_supported(sta, sband->band, i)) - return i; - } - - /* No matching rate found */ - return 0; -} - - -bool rate_control_send_low(struct ieee80211_sta *sta, - void *priv_sta, - struct ieee80211_tx_rate_control *txrc) -{ - struct ieee80211_tx_info *info = IEEE80211_SKB_CB(txrc->skb); - struct ieee80211_supported_band *sband = txrc->sband; - int mcast_rate; - - if (!sta || !priv_sta || rc_no_data_or_no_ack_use_min(txrc)) { - if ((sband->band != IEEE80211_BAND_2GHZ) || - !(info->flags & IEEE80211_TX_CTL_NO_CCK_RATE)) - info->control.rates[0].idx = - rate_lowest_index(txrc->sband, sta); - else - info->control.rates[0].idx = - rate_lowest_non_cck_index(txrc->sband, sta); - info->control.rates[0].count = - (info->flags & IEEE80211_TX_CTL_NO_ACK) ? - 1 : txrc->hw->max_rate_tries; - if (!sta && txrc->bss) { - mcast_rate = txrc->bss_conf->mcast_rate[sband->band]; - if (mcast_rate > 0) { - info->control.rates[0].idx = mcast_rate - 1; - return true; - } - - rc_send_low_broadcast(&info->control.rates[0].idx, - txrc->bss_conf->basic_rates, - sband); - } - return true; - } - return false; -} -EXPORT_SYMBOL(rate_control_send_low); - -static bool rate_idx_match_legacy_mask(struct ieee80211_tx_rate *rate, - int n_bitrates, u32 mask) -{ - int j; - - /* See whether the selected rate or anything below it is allowed. */ - for (j = rate->idx; j >= 0; j--) { - if (mask & (1 << j)) { - /* Okay, found a suitable rate. Use it. */ - rate->idx = j; - return true; - } - } - - /* Try to find a higher rate that would be allowed */ - for (j = rate->idx + 1; j < n_bitrates; j++) { - if (mask & (1 << j)) { - /* Okay, found a suitable rate. Use it. */ - rate->idx = j; - return true; - } - } - return false; -} - -static bool rate_idx_match_mcs_mask(struct ieee80211_tx_rate *rate, - u8 mcs_mask[IEEE80211_HT_MCS_MASK_LEN]) -{ - int i, j; - int ridx, rbit; - - ridx = rate->idx / 8; - rbit = rate->idx % 8; - - /* sanity check */ - if (ridx < 0 || ridx >= IEEE80211_HT_MCS_MASK_LEN) - return false; - - /* See whether the selected rate or anything below it is allowed. */ - for (i = ridx; i >= 0; i--) { - for (j = rbit; j >= 0; j--) - if (mcs_mask[i] & BIT(j)) { - rate->idx = i * 8 + j; - return true; - } - rbit = 7; - } - - /* Try to find a higher rate that would be allowed */ - ridx = (rate->idx + 1) / 8; - rbit = (rate->idx + 1) % 8; - - for (i = ridx; i < IEEE80211_HT_MCS_MASK_LEN; i++) { - for (j = rbit; j < 8; j++) - if (mcs_mask[i] & BIT(j)) { - rate->idx = i * 8 + j; - return true; - } - rbit = 0; - } - return false; -} - - - -static void rate_idx_match_mask(struct ieee80211_tx_rate *rate, - struct ieee80211_tx_rate_control *txrc, - u32 mask, - u8 mcs_mask[IEEE80211_HT_MCS_MASK_LEN]) -{ - struct ieee80211_tx_rate alt_rate; - - /* handle HT rates */ - if (rate->flags & IEEE80211_TX_RC_MCS) { - if (rate_idx_match_mcs_mask(rate, mcs_mask)) - return; - - /* also try the legacy rates. */ - alt_rate.idx = 0; - /* keep protection flags */ - alt_rate.flags = rate->flags & - (IEEE80211_TX_RC_USE_RTS_CTS | - IEEE80211_TX_RC_USE_CTS_PROTECT | - IEEE80211_TX_RC_USE_SHORT_PREAMBLE); - alt_rate.count = rate->count; - if (rate_idx_match_legacy_mask(&alt_rate, - txrc->sband->n_bitrates, - mask)) { - *rate = alt_rate; - return; - } - } else { - struct sk_buff *skb = txrc->skb; - struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) skb->data; - __le16 fc; - - /* handle legacy rates */ - if (rate_idx_match_legacy_mask(rate, txrc->sband->n_bitrates, - mask)) - return; - - /* if HT BSS, and we handle a data frame, also try HT rates */ - if (txrc->bss_conf->channel_type == NL80211_CHAN_NO_HT) - return; - - fc = hdr->frame_control; - if (!ieee80211_is_data(fc)) - return; - - alt_rate.idx = 0; - /* keep protection flags */ - alt_rate.flags = rate->flags & - (IEEE80211_TX_RC_USE_RTS_CTS | - IEEE80211_TX_RC_USE_CTS_PROTECT | - IEEE80211_TX_RC_USE_SHORT_PREAMBLE); - alt_rate.count = rate->count; - - alt_rate.flags |= IEEE80211_TX_RC_MCS; - - if ((txrc->bss_conf->channel_type == NL80211_CHAN_HT40MINUS) || - (txrc->bss_conf->channel_type == NL80211_CHAN_HT40PLUS)) - alt_rate.flags |= IEEE80211_TX_RC_40_MHZ_WIDTH; - - if (rate_idx_match_mcs_mask(&alt_rate, mcs_mask)) { - *rate = alt_rate; - return; - } - } - - /* - * Uh.. No suitable rate exists. This should not really happen with - * sane TX rate mask configurations. However, should someone manage to - * configure supported rates and TX rate mask in incompatible way, - * allow the frame to be transmitted with whatever the rate control - * selected. - */ -} - -void rate_control_get_rate(struct ieee80211_sub_if_data *sdata, - struct sta_info *sta, - struct ieee80211_tx_rate_control *txrc) -{ - struct rate_control_ref *ref = sdata->local->rate_ctrl; - void *priv_sta = NULL; - struct ieee80211_sta *ista = NULL; - struct ieee80211_tx_info *info = IEEE80211_SKB_CB(txrc->skb); - int i; - u32 mask; - u8 mcs_mask[IEEE80211_HT_MCS_MASK_LEN]; - - if (sta && test_sta_flag(sta, WLAN_STA_RATE_CONTROL)) { - ista = &sta->sta; - priv_sta = sta->rate_ctrl_priv; - } - - for (i = 0; i < IEEE80211_TX_MAX_RATES; i++) { - info->control.rates[i].idx = -1; - info->control.rates[i].flags = 0; - info->control.rates[i].count = 0; - } - - if (sdata->local->hw.flags & IEEE80211_HW_HAS_RATE_CONTROL) - return; - - ref->ops->get_rate(ref->priv, ista, priv_sta, txrc); - - /* - * Try to enforce the rateidx mask the user wanted. skip this if the - * default mask (allow all rates) is used to save some processing for - * the common case. - */ - mask = sdata->rc_rateidx_mask[info->band]; - memcpy(mcs_mask, sdata->rc_rateidx_mcs_mask[info->band], - sizeof(mcs_mask)); - if (mask != (1 << txrc->sband->n_bitrates) - 1) { - if (sta) { - /* Filter out rates that the STA does not support */ - mask &= sta->sta.supp_rates[info->band]; - for (i = 0; i < sizeof(mcs_mask); i++) - mcs_mask[i] &= sta->sta.ht_cap.mcs.rx_mask[i]; - } - /* - * Make sure the rate index selected for each TX rate is - * included in the configured mask and change the rate indexes - * if needed. - */ - for (i = 0; i < IEEE80211_TX_MAX_RATES; i++) { - /* Skip invalid rates */ - if (info->control.rates[i].idx < 0) - break; - rate_idx_match_mask(&info->control.rates[i], txrc, - mask, mcs_mask); - } - } - - BUG_ON(info->control.rates[0].idx < 0); -} - -int ieee80211_init_rate_ctrl_alg(struct ieee80211_local *local, - const char *name) -{ - struct rate_control_ref *ref; - - ASSERT_RTNL(); - - if (local->open_count) - return -EBUSY; - - if (local->hw.flags & IEEE80211_HW_HAS_RATE_CONTROL) { - if (WARN_ON(!local->ops->set_rts_threshold)) - return -EINVAL; - return 0; - } - - ref = rate_control_alloc(name, local); - if (!ref) { - wiphy_warn(local->hw.wiphy, - "Failed to select rate control algorithm\n"); - return -ENOENT; - } - - WARN_ON(local->rate_ctrl); - local->rate_ctrl = ref; - - wiphy_debug(local->hw.wiphy, "Selected rate control algorithm '%s'\n", - ref->ops->name); - - return 0; -} - -void rate_control_deinitialize(struct ieee80211_local *local) -{ - struct rate_control_ref *ref; - - ref = local->rate_ctrl; - - if (!ref) - return; - - local->rate_ctrl = NULL; - rate_control_free(ref); -} - diff --git a/openairITS/mac/DOT11/net/mac80211/rate.h b/openairITS/mac/DOT11/net/mac80211/rate.h deleted file mode 100644 index fbb1efdc4d..0000000000 --- a/openairITS/mac/DOT11/net/mac80211/rate.h +++ /dev/null @@ -1,161 +0,0 @@ -/* - * Copyright 2002-2005, Instant802 Networks, Inc. - * Copyright 2005, Devicescape Software, Inc. - * Copyright (c) 2006 Jiri Benc - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - */ - -#ifndef IEEE80211_RATE_H -#define IEEE80211_RATE_H - -#include -#include -#include -#include -#include "ieee80211_i.h" -#include "sta_info.h" - -struct rate_control_ref { - struct ieee80211_local *local; - struct rate_control_ops *ops; - void *priv; -}; - -void rate_control_get_rate(struct ieee80211_sub_if_data *sdata, - struct sta_info *sta, - struct ieee80211_tx_rate_control *txrc); - -static inline void rate_control_tx_status(struct ieee80211_local *local, - struct ieee80211_supported_band *sband, - struct sta_info *sta, - struct sk_buff *skb) -{ - struct rate_control_ref *ref = local->rate_ctrl; - struct ieee80211_sta *ista = &sta->sta; - void *priv_sta = sta->rate_ctrl_priv; - - if (!ref || !test_sta_flag(sta, WLAN_STA_RATE_CONTROL)) - return; - - ref->ops->tx_status(ref->priv, sband, ista, priv_sta, skb); -} - - -static inline void rate_control_rate_init(struct sta_info *sta) -{ - struct ieee80211_local *local = sta->sdata->local; - struct rate_control_ref *ref = sta->rate_ctrl; - struct ieee80211_sta *ista = &sta->sta; - void *priv_sta = sta->rate_ctrl_priv; - struct ieee80211_supported_band *sband; - - if (!ref) - return; - - sband = local->hw.wiphy->bands[local->hw.conf.channel->band]; - - ref->ops->rate_init(ref->priv, sband, ista, priv_sta); - set_sta_flag(sta, WLAN_STA_RATE_CONTROL); -} - -static inline void rate_control_rate_update(struct ieee80211_local *local, - struct ieee80211_supported_band *sband, - struct sta_info *sta, u32 changed, - enum nl80211_channel_type oper_chan_type) -{ - struct rate_control_ref *ref = local->rate_ctrl; - struct ieee80211_sta *ista = &sta->sta; - void *priv_sta = sta->rate_ctrl_priv; - - if (ref && ref->ops->rate_update) - ref->ops->rate_update(ref->priv, sband, ista, - priv_sta, changed, oper_chan_type); -} - -static inline void *rate_control_alloc_sta(struct rate_control_ref *ref, - struct ieee80211_sta *sta, - gfp_t gfp) -{ - return ref->ops->alloc_sta(ref->priv, sta, gfp); -} - -static inline void rate_control_free_sta(struct sta_info *sta) -{ - struct rate_control_ref *ref = sta->rate_ctrl; - struct ieee80211_sta *ista = &sta->sta; - void *priv_sta = sta->rate_ctrl_priv; - - ref->ops->free_sta(ref->priv, ista, priv_sta); -} - -static inline void rate_control_add_sta_debugfs(struct sta_info *sta) -{ -#ifdef CONFIG_MAC80211_DEBUGFS - struct rate_control_ref *ref = sta->rate_ctrl; - if (ref && sta->debugfs.dir && ref->ops->add_sta_debugfs) - ref->ops->add_sta_debugfs(ref->priv, sta->rate_ctrl_priv, - sta->debugfs.dir); -#endif -} - -static inline void rate_control_remove_sta_debugfs(struct sta_info *sta) -{ -#ifdef CONFIG_MAC80211_DEBUGFS - struct rate_control_ref *ref = sta->rate_ctrl; - if (ref && ref->ops->remove_sta_debugfs) - ref->ops->remove_sta_debugfs(ref->priv, sta->rate_ctrl_priv); -#endif -} - -/* Get a reference to the rate control algorithm. If `name' is NULL, get the - * first available algorithm. */ -int ieee80211_init_rate_ctrl_alg(struct ieee80211_local *local, - const char *name); -void rate_control_deinitialize(struct ieee80211_local *local); - - -/* Rate control algorithms */ -#ifdef CONFIG_MAC80211_RC_PID -extern int rc80211_pid_init(void); -extern void rc80211_pid_exit(void); -#else -static inline int rc80211_pid_init(void) -{ - return 0; -} -static inline void rc80211_pid_exit(void) -{ -} -#endif - -#ifdef CONFIG_MAC80211_RC_MINSTREL -extern int rc80211_minstrel_init(void); -extern void rc80211_minstrel_exit(void); -#else -static inline int rc80211_minstrel_init(void) -{ - return 0; -} -static inline void rc80211_minstrel_exit(void) -{ -} -#endif - -#ifdef CONFIG_MAC80211_RC_MINSTREL_HT -extern int rc80211_minstrel_ht_init(void); -extern void rc80211_minstrel_ht_exit(void); -#else -static inline int rc80211_minstrel_ht_init(void) -{ - return 0; -} -static inline void rc80211_minstrel_ht_exit(void) -{ -} -#endif - - -#endif /* IEEE80211_RATE_H */ diff --git a/openairITS/mac/DOT11/net/mac80211/rc80211_minstrel.c b/openairITS/mac/DOT11/net/mac80211/rc80211_minstrel.c deleted file mode 100644 index b39dda523f..0000000000 --- a/openairITS/mac/DOT11/net/mac80211/rc80211_minstrel.c +++ /dev/null @@ -1,578 +0,0 @@ -/* - * Copyright (C) 2008 Felix Fietkau - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - * - * Based on minstrel.c: - * Copyright (C) 2005-2007 Derek Smithies - * Sponsored by Indranet Technologies Ltd - * - * Based on sample.c: - * Copyright (c) 2005 John Bicket - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer, - * without modification. - * 2. Redistributions in binary form must reproduce at minimum a disclaimer - * similar to the "NO WARRANTY" disclaimer below ("Disclaimer") and any - * redistribution must be conditioned upon including a substantially - * similar Disclaimer requirement for further binary redistribution. - * 3. Neither the names of the above-listed copyright holders nor the names - * of any contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * Alternatively, this software may be distributed under the terms of the - * GNU General Public License ("GPL") version 2 as published by the Free - * Software Foundation. - * - * NO WARRANTY - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF NONINFRINGEMENT, MERCHANTIBILITY - * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL - * THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, - * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF - * THE POSSIBILITY OF SUCH DAMAGES. - */ -#include -#include -#include -#include -#include -#include -#include -#include -#include "rate.h" -#include "rc80211_minstrel.h" - -#define SAMPLE_COLUMNS 10 -#define SAMPLE_TBL(_mi, _idx, _col) \ - _mi->sample_table[(_idx * SAMPLE_COLUMNS) + _col] - -/* convert mac80211 rate index to local array index */ -static inline int -rix_to_ndx(struct minstrel_sta_info *mi, int rix) -{ - int i = rix; - for (i = rix; i >= 0; i--) - if (mi->r[i].rix == rix) - break; - return i; -} - -static void -minstrel_update_stats(struct minstrel_priv *mp, struct minstrel_sta_info *mi) -{ - u32 max_tp = 0, index_max_tp = 0, index_max_tp2 = 0; - u32 max_prob = 0, index_max_prob = 0; - u32 usecs; - u32 p; - int i; - - mi->stats_update = jiffies; - for (i = 0; i < mi->n_rates; i++) { - struct minstrel_rate *mr = &mi->r[i]; - - usecs = mr->perfect_tx_time; - if (!usecs) - usecs = 1000000; - - /* To avoid rounding issues, probabilities scale from 0 (0%) - * to 18000 (100%) */ - if (mr->attempts) { - p = (mr->success * 18000) / mr->attempts; - mr->succ_hist += mr->success; - mr->att_hist += mr->attempts; - mr->cur_prob = p; - p = ((p * (100 - mp->ewma_level)) + (mr->probability * - mp->ewma_level)) / 100; - mr->probability = p; - mr->cur_tp = p * (1000000 / usecs); - } - - mr->last_success = mr->success; - mr->last_attempts = mr->attempts; - mr->success = 0; - mr->attempts = 0; - - /* Sample less often below the 10% chance of success. - * Sample less often above the 95% chance of success. */ - if ((mr->probability > 17100) || (mr->probability < 1800)) { - mr->adjusted_retry_count = mr->retry_count >> 1; - if (mr->adjusted_retry_count > 2) - mr->adjusted_retry_count = 2; - mr->sample_limit = 4; - } else { - mr->sample_limit = -1; - mr->adjusted_retry_count = mr->retry_count; - } - if (!mr->adjusted_retry_count) - mr->adjusted_retry_count = 2; - } - - for (i = 0; i < mi->n_rates; i++) { - struct minstrel_rate *mr = &mi->r[i]; - if (max_tp < mr->cur_tp) { - index_max_tp = i; - max_tp = mr->cur_tp; - } - if (max_prob < mr->probability) { - index_max_prob = i; - max_prob = mr->probability; - } - } - - max_tp = 0; - for (i = 0; i < mi->n_rates; i++) { - struct minstrel_rate *mr = &mi->r[i]; - - if (i == index_max_tp) - continue; - - if (max_tp < mr->cur_tp) { - index_max_tp2 = i; - max_tp = mr->cur_tp; - } - } - mi->max_tp_rate = index_max_tp; - mi->max_tp_rate2 = index_max_tp2; - mi->max_prob_rate = index_max_prob; -} - -static void -minstrel_tx_status(void *priv, struct ieee80211_supported_band *sband, - struct ieee80211_sta *sta, void *priv_sta, - struct sk_buff *skb) -{ - struct minstrel_sta_info *mi = priv_sta; - struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb); - struct ieee80211_tx_rate *ar = info->status.rates; - int i, ndx; - int success; - - success = !!(info->flags & IEEE80211_TX_STAT_ACK); - - for (i = 0; i < IEEE80211_TX_MAX_RATES; i++) { - if (ar[i].idx < 0) - break; - - ndx = rix_to_ndx(mi, ar[i].idx); - if (ndx < 0) - continue; - - mi->r[ndx].attempts += ar[i].count; - - if ((i != IEEE80211_TX_MAX_RATES - 1) && (ar[i + 1].idx < 0)) - mi->r[ndx].success += success; - } - - if ((info->flags & IEEE80211_TX_CTL_RATE_CTRL_PROBE) && (i >= 0)) - mi->sample_count++; - - if (mi->sample_deferred > 0) - mi->sample_deferred--; -} - - -static inline unsigned int -minstrel_get_retry_count(struct minstrel_rate *mr, - struct ieee80211_tx_info *info) -{ - unsigned int retry = mr->adjusted_retry_count; - - if (info->control.rates[0].flags & IEEE80211_TX_RC_USE_RTS_CTS) - retry = max(2U, min(mr->retry_count_rtscts, retry)); - else if (info->control.rates[0].flags & IEEE80211_TX_RC_USE_CTS_PROTECT) - retry = max(2U, min(mr->retry_count_cts, retry)); - return retry; -} - - -static int -minstrel_get_next_sample(struct minstrel_sta_info *mi) -{ - unsigned int sample_ndx; - sample_ndx = SAMPLE_TBL(mi, mi->sample_idx, mi->sample_column); - mi->sample_idx++; - if ((int) mi->sample_idx > (mi->n_rates - 2)) { - mi->sample_idx = 0; - mi->sample_column++; - if (mi->sample_column >= SAMPLE_COLUMNS) - mi->sample_column = 0; - } - return sample_ndx; -} - -static void -minstrel_get_rate(void *priv, struct ieee80211_sta *sta, - void *priv_sta, struct ieee80211_tx_rate_control *txrc) -{ - struct sk_buff *skb = txrc->skb; - struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb); - struct minstrel_sta_info *mi = priv_sta; - struct minstrel_priv *mp = priv; - struct ieee80211_tx_rate *ar = info->control.rates; - unsigned int ndx, sample_ndx = 0; - bool mrr; - bool sample_slower = false; - bool sample = false; - int i, delta; - int mrr_ndx[3]; - int sample_rate; - - if (rate_control_send_low(sta, priv_sta, txrc)) - return; - - mrr = mp->has_mrr && !txrc->rts && !txrc->bss_conf->use_cts_prot; - - if (time_after(jiffies, mi->stats_update + (mp->update_interval * - HZ) / 1000)) - minstrel_update_stats(mp, mi); - - ndx = mi->max_tp_rate; - - if (mrr) - sample_rate = mp->lookaround_rate_mrr; - else - sample_rate = mp->lookaround_rate; - - mi->packet_count++; - delta = (mi->packet_count * sample_rate / 100) - - (mi->sample_count + mi->sample_deferred / 2); - - /* delta > 0: sampling required */ - if ((delta > 0) && (mrr || !mi->prev_sample)) { - struct minstrel_rate *msr; - if (mi->packet_count >= 10000) { - mi->sample_deferred = 0; - mi->sample_count = 0; - mi->packet_count = 0; - } else if (delta > mi->n_rates * 2) { - /* With multi-rate retry, not every planned sample - * attempt actually gets used, due to the way the retry - * chain is set up - [max_tp,sample,prob,lowest] for - * sample_rate < max_tp. - * - * If there's too much sampling backlog and the link - * starts getting worse, minstrel would start bursting - * out lots of sampling frames, which would result - * in a large throughput loss. */ - mi->sample_count += (delta - mi->n_rates * 2); - } - - sample_ndx = minstrel_get_next_sample(mi); - msr = &mi->r[sample_ndx]; - sample = true; - sample_slower = mrr && (msr->perfect_tx_time > - mi->r[ndx].perfect_tx_time); - - if (!sample_slower) { - if (msr->sample_limit != 0) { - ndx = sample_ndx; - mi->sample_count++; - if (msr->sample_limit > 0) - msr->sample_limit--; - } else { - sample = false; - } - } else { - /* Only use IEEE80211_TX_CTL_RATE_CTRL_PROBE to mark - * packets that have the sampling rate deferred to the - * second MRR stage. Increase the sample counter only - * if the deferred sample rate was actually used. - * Use the sample_deferred counter to make sure that - * the sampling is not done in large bursts */ - info->flags |= IEEE80211_TX_CTL_RATE_CTRL_PROBE; - mi->sample_deferred++; - } - } - mi->prev_sample = sample; - - /* If we're not using MRR and the sampling rate already - * has a probability of >95%, we shouldn't be attempting - * to use it, as this only wastes precious airtime */ - if (!mrr && sample && (mi->r[ndx].probability > 17100)) - ndx = mi->max_tp_rate; - - ar[0].idx = mi->r[ndx].rix; - ar[0].count = minstrel_get_retry_count(&mi->r[ndx], info); - - if (!mrr) { - if (!sample) - ar[0].count = mp->max_retry; - ar[1].idx = mi->lowest_rix; - ar[1].count = mp->max_retry; - return; - } - - /* MRR setup */ - if (sample) { - if (sample_slower) - mrr_ndx[0] = sample_ndx; - else - mrr_ndx[0] = mi->max_tp_rate; - } else { - mrr_ndx[0] = mi->max_tp_rate2; - } - mrr_ndx[1] = mi->max_prob_rate; - mrr_ndx[2] = 0; - for (i = 1; i < 4; i++) { - ar[i].idx = mi->r[mrr_ndx[i - 1]].rix; - ar[i].count = mi->r[mrr_ndx[i - 1]].adjusted_retry_count; - } -} - - -static void -calc_rate_durations(struct ieee80211_local *local, struct minstrel_rate *d, - struct ieee80211_rate *rate) -{ - int erp = !!(rate->flags & IEEE80211_RATE_ERP_G); - - d->perfect_tx_time = ieee80211_frame_duration(local, 1200, - rate->bitrate, erp, 1); - d->ack_time = ieee80211_frame_duration(local, 10, - rate->bitrate, erp, 1); -} - -static void -init_sample_table(struct minstrel_sta_info *mi) -{ - unsigned int i, col, new_idx; - unsigned int n_srates = mi->n_rates - 1; - u8 rnd[8]; - - mi->sample_column = 0; - mi->sample_idx = 0; - memset(mi->sample_table, 0, SAMPLE_COLUMNS * mi->n_rates); - - for (col = 0; col < SAMPLE_COLUMNS; col++) { - for (i = 0; i < n_srates; i++) { - get_random_bytes(rnd, sizeof(rnd)); - new_idx = (i + rnd[i & 7]) % n_srates; - - while (SAMPLE_TBL(mi, new_idx, col) != 0) - new_idx = (new_idx + 1) % n_srates; - - /* Don't sample the slowest rate (i.e. slowest base - * rate). We must presume that the slowest rate works - * fine, or else other management frames will also be - * failing and the link will break */ - SAMPLE_TBL(mi, new_idx, col) = i + 1; - } - } -} - -static void -minstrel_rate_init(void *priv, struct ieee80211_supported_band *sband, - struct ieee80211_sta *sta, void *priv_sta) -{ - struct minstrel_sta_info *mi = priv_sta; - struct minstrel_priv *mp = priv; - struct ieee80211_local *local = hw_to_local(mp->hw); - struct ieee80211_rate *ctl_rate; - unsigned int i, n = 0; - unsigned int t_slot = 9; /* FIXME: get real slot time */ - - mi->lowest_rix = rate_lowest_index(sband, sta); - ctl_rate = &sband->bitrates[mi->lowest_rix]; - mi->sp_ack_dur = ieee80211_frame_duration(local, 10, ctl_rate->bitrate, - !!(ctl_rate->flags & IEEE80211_RATE_ERP_G), 1); - - for (i = 0; i < sband->n_bitrates; i++) { - struct minstrel_rate *mr = &mi->r[n]; - unsigned int tx_time = 0, tx_time_cts = 0, tx_time_rtscts = 0; - unsigned int tx_time_single; - unsigned int cw = mp->cw_min; - - if (!rate_supported(sta, sband->band, i)) - continue; - n++; - memset(mr, 0, sizeof(*mr)); - - mr->rix = i; - mr->bitrate = sband->bitrates[i].bitrate / 5; - calc_rate_durations(local, mr, &sband->bitrates[i]); - - /* calculate maximum number of retransmissions before - * fallback (based on maximum segment size) */ - mr->sample_limit = -1; - mr->retry_count = 1; - mr->retry_count_cts = 1; - mr->retry_count_rtscts = 1; - tx_time = mr->perfect_tx_time + mi->sp_ack_dur; - do { - /* add one retransmission */ - tx_time_single = mr->ack_time + mr->perfect_tx_time; - - /* contention window */ - tx_time_single += (t_slot * cw) >> 1; - cw = min((cw << 1) | 1, mp->cw_max); - - tx_time += tx_time_single; - tx_time_cts += tx_time_single + mi->sp_ack_dur; - tx_time_rtscts += tx_time_single + 2 * mi->sp_ack_dur; - if ((tx_time_cts < mp->segment_size) && - (mr->retry_count_cts < mp->max_retry)) - mr->retry_count_cts++; - if ((tx_time_rtscts < mp->segment_size) && - (mr->retry_count_rtscts < mp->max_retry)) - mr->retry_count_rtscts++; - } while ((tx_time < mp->segment_size) && - (++mr->retry_count < mp->max_retry)); - mr->adjusted_retry_count = mr->retry_count; - } - - for (i = n; i < sband->n_bitrates; i++) { - struct minstrel_rate *mr = &mi->r[i]; - mr->rix = -1; - } - - mi->n_rates = n; - mi->stats_update = jiffies; - - init_sample_table(mi); -} - -static void * -minstrel_alloc_sta(void *priv, struct ieee80211_sta *sta, gfp_t gfp) -{ - struct ieee80211_supported_band *sband; - struct minstrel_sta_info *mi; - struct minstrel_priv *mp = priv; - struct ieee80211_hw *hw = mp->hw; - int max_rates = 0; - int i; - - mi = kzalloc(sizeof(struct minstrel_sta_info), gfp); - if (!mi) - return NULL; - - for (i = 0; i < IEEE80211_NUM_BANDS; i++) { - sband = hw->wiphy->bands[i]; - if (sband && sband->n_bitrates > max_rates) - max_rates = sband->n_bitrates; - } - - mi->r = kzalloc(sizeof(struct minstrel_rate) * max_rates, gfp); - if (!mi->r) - goto error; - - mi->sample_table = kmalloc(SAMPLE_COLUMNS * max_rates, gfp); - if (!mi->sample_table) - goto error1; - - mi->stats_update = jiffies; - return mi; - -error1: - kfree(mi->r); -error: - kfree(mi); - return NULL; -} - -static void -minstrel_free_sta(void *priv, struct ieee80211_sta *sta, void *priv_sta) -{ - struct minstrel_sta_info *mi = priv_sta; - - kfree(mi->sample_table); - kfree(mi->r); - kfree(mi); -} - -static void * -minstrel_alloc(struct ieee80211_hw *hw, struct dentry *debugfsdir) -{ - struct minstrel_priv *mp; - - mp = kzalloc(sizeof(struct minstrel_priv), GFP_ATOMIC); - if (!mp) - return NULL; - - /* contention window settings - * Just an approximation. Using the per-queue values would complicate - * the calculations and is probably unnecessary */ - mp->cw_min = 15; - mp->cw_max = 1023; - - /* number of packets (in %) to use for sampling other rates - * sample less often for non-mrr packets, because the overhead - * is much higher than with mrr */ - mp->lookaround_rate = 5; - mp->lookaround_rate_mrr = 10; - - /* moving average weight for EWMA */ - mp->ewma_level = 75; - - /* maximum time that the hw is allowed to stay in one MRR segment */ - mp->segment_size = 6000; - - if (hw->max_rate_tries > 0) - mp->max_retry = hw->max_rate_tries; - else - /* safe default, does not necessarily have to match hw properties */ - mp->max_retry = 7; - - if (hw->max_rates >= 4) - mp->has_mrr = true; - - mp->hw = hw; - mp->update_interval = 100; - -#ifdef CONFIG_MAC80211_DEBUGFS - mp->fixed_rate_idx = (u32) -1; - mp->dbg_fixed_rate = debugfs_create_u32("fixed_rate_idx", - S_IRUGO | S_IWUGO, debugfsdir, &mp->fixed_rate_idx); -#endif - - return mp; -} - -static void -minstrel_free(void *priv) -{ -#ifdef CONFIG_MAC80211_DEBUGFS - debugfs_remove(((struct minstrel_priv *)priv)->dbg_fixed_rate); -#endif - kfree(priv); -} - -struct rate_control_ops mac80211_minstrel = { - .name = "minstrel", - .tx_status = minstrel_tx_status, - .get_rate = minstrel_get_rate, - .rate_init = minstrel_rate_init, - .alloc = minstrel_alloc, - .free = minstrel_free, - .alloc_sta = minstrel_alloc_sta, - .free_sta = minstrel_free_sta, -#ifdef CONFIG_MAC80211_DEBUGFS - .add_sta_debugfs = minstrel_add_sta_debugfs, - .remove_sta_debugfs = minstrel_remove_sta_debugfs, -#endif -}; - -int __init -rc80211_minstrel_init(void) -{ - return ieee80211_rate_control_register(&mac80211_minstrel); -} - -void -rc80211_minstrel_exit(void) -{ - ieee80211_rate_control_unregister(&mac80211_minstrel); -} - diff --git a/openairITS/mac/DOT11/net/mac80211/rc80211_minstrel.h b/openairITS/mac/DOT11/net/mac80211/rc80211_minstrel.h deleted file mode 100644 index 5d278eccae..0000000000 --- a/openairITS/mac/DOT11/net/mac80211/rc80211_minstrel.h +++ /dev/null @@ -1,109 +0,0 @@ -/* - * Copyright (C) 2008 Felix Fietkau - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - */ - -#ifndef __RC_MINSTREL_H -#define __RC_MINSTREL_H - -struct minstrel_rate { - int bitrate; - int rix; - - unsigned int perfect_tx_time; - unsigned int ack_time; - - int sample_limit; - unsigned int retry_count; - unsigned int retry_count_cts; - unsigned int retry_count_rtscts; - unsigned int adjusted_retry_count; - - u32 success; - u32 attempts; - u32 last_attempts; - u32 last_success; - - /* parts per thousand */ - u32 cur_prob; - u32 probability; - - /* per-rate throughput */ - u32 cur_tp; - - u64 succ_hist; - u64 att_hist; -}; - -struct minstrel_sta_info { - unsigned long stats_update; - unsigned int sp_ack_dur; - unsigned int rate_avg; - - unsigned int lowest_rix; - - unsigned int max_tp_rate; - unsigned int max_tp_rate2; - unsigned int max_prob_rate; - unsigned int packet_count; - unsigned int sample_count; - int sample_deferred; - - unsigned int sample_idx; - unsigned int sample_column; - - int n_rates; - struct minstrel_rate *r; - bool prev_sample; - - /* sampling table */ - u8 *sample_table; - -#ifdef CONFIG_MAC80211_DEBUGFS - struct dentry *dbg_stats; -#endif -}; - -struct minstrel_priv { - struct ieee80211_hw *hw; - bool has_mrr; - unsigned int cw_min; - unsigned int cw_max; - unsigned int max_retry; - unsigned int ewma_level; - unsigned int segment_size; - unsigned int update_interval; - unsigned int lookaround_rate; - unsigned int lookaround_rate_mrr; - -#ifdef CONFIG_MAC80211_DEBUGFS - /* - * enable fixed rate processing per RC - * - write static index to debugfs:ieee80211/phyX/rc/fixed_rate_idx - * - write -1 to enable RC processing again - * - setting will be applied on next update - */ - u32 fixed_rate_idx; - struct dentry *dbg_fixed_rate; -#endif - -}; - -struct minstrel_debugfs_info { - size_t len; - char buf[]; -}; - -extern struct rate_control_ops mac80211_minstrel; -void minstrel_add_sta_debugfs(void *priv, void *priv_sta, struct dentry *dir); -void minstrel_remove_sta_debugfs(void *priv, void *priv_sta); - -/* debugfs */ -int minstrel_stats_open(struct inode *inode, struct file *file); -ssize_t minstrel_stats_read(struct file *file, char __user *buf, size_t len, loff_t *ppos); -int minstrel_stats_release(struct inode *inode, struct file *file); - -#endif diff --git a/openairITS/mac/DOT11/net/mac80211/rc80211_minstrel_debugfs.c b/openairITS/mac/DOT11/net/mac80211/rc80211_minstrel_debugfs.c deleted file mode 100644 index d5a56226e6..0000000000 --- a/openairITS/mac/DOT11/net/mac80211/rc80211_minstrel_debugfs.c +++ /dev/null @@ -1,144 +0,0 @@ -/* - * Copyright (C) 2008 Felix Fietkau - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - * - * Based on minstrel.c: - * Copyright (C) 2005-2007 Derek Smithies - * Sponsored by Indranet Technologies Ltd - * - * Based on sample.c: - * Copyright (c) 2005 John Bicket - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer, - * without modification. - * 2. Redistributions in binary form must reproduce at minimum a disclaimer - * similar to the "NO WARRANTY" disclaimer below ("Disclaimer") and any - * redistribution must be conditioned upon including a substantially - * similar Disclaimer requirement for further binary redistribution. - * 3. Neither the names of the above-listed copyright holders nor the names - * of any contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * Alternatively, this software may be distributed under the terms of the - * GNU General Public License ("GPL") version 2 as published by the Free - * Software Foundation. - * - * NO WARRANTY - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF NONINFRINGEMENT, MERCHANTIBILITY - * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL - * THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, - * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF - * THE POSSIBILITY OF SUCH DAMAGES. - */ -#include -#include -#include -#include -#include -#include -#include -#include -#include "rc80211_minstrel.h" - -int -minstrel_stats_open(struct inode *inode, struct file *file) -{ - struct minstrel_sta_info *mi = inode->i_private; - struct minstrel_debugfs_info *ms; - unsigned int i, tp, prob, eprob; - char *p; - - ms = kmalloc(sizeof(*ms) + 4096, GFP_KERNEL); - if (!ms) - return -ENOMEM; - - file->private_data = ms; - p = ms->buf; - p += sprintf(p, "rate throughput ewma prob this prob " - "this succ/attempt success attempts\n"); - for (i = 0; i < mi->n_rates; i++) { - struct minstrel_rate *mr = &mi->r[i]; - - *(p++) = (i == mi->max_tp_rate) ? 'T' : ' '; - *(p++) = (i == mi->max_tp_rate2) ? 't' : ' '; - *(p++) = (i == mi->max_prob_rate) ? 'P' : ' '; - p += sprintf(p, "%3u%s", mr->bitrate / 2, - (mr->bitrate & 1 ? ".5" : " ")); - - tp = mr->cur_tp / ((18000 << 10) / 96); - prob = mr->cur_prob / 18; - eprob = mr->probability / 18; - - p += sprintf(p, " %6u.%1u %6u.%1u %6u.%1u " - "%3u(%3u) %8llu %8llu\n", - tp / 10, tp % 10, - eprob / 10, eprob % 10, - prob / 10, prob % 10, - mr->last_success, - mr->last_attempts, - (unsigned long long)mr->succ_hist, - (unsigned long long)mr->att_hist); - } - p += sprintf(p, "\nTotal packet count:: ideal %d " - "lookaround %d\n\n", - mi->packet_count - mi->sample_count, - mi->sample_count); - ms->len = p - ms->buf; - - return 0; -} - -ssize_t -minstrel_stats_read(struct file *file, char __user *buf, size_t len, loff_t *ppos) -{ - struct minstrel_debugfs_info *ms; - - ms = file->private_data; - return simple_read_from_buffer(buf, len, ppos, ms->buf, ms->len); -} - -int -minstrel_stats_release(struct inode *inode, struct file *file) -{ - kfree(file->private_data); - return 0; -} - -static const struct file_operations minstrel_stat_fops = { - .owner = THIS_MODULE, - .open = minstrel_stats_open, - .read = minstrel_stats_read, - .release = minstrel_stats_release, - .llseek = default_llseek, -}; - -void -minstrel_add_sta_debugfs(void *priv, void *priv_sta, struct dentry *dir) -{ - struct minstrel_sta_info *mi = priv_sta; - - mi->dbg_stats = debugfs_create_file("rc_stats", S_IRUGO, dir, mi, - &minstrel_stat_fops); -} - -void -minstrel_remove_sta_debugfs(void *priv, void *priv_sta) -{ - struct minstrel_sta_info *mi = priv_sta; - - debugfs_remove(mi->dbg_stats); -} diff --git a/openairITS/mac/DOT11/net/mac80211/rc80211_minstrel_ht.c b/openairITS/mac/DOT11/net/mac80211/rc80211_minstrel_ht.c deleted file mode 100644 index 16e0b277b9..0000000000 --- a/openairITS/mac/DOT11/net/mac80211/rc80211_minstrel_ht.c +++ /dev/null @@ -1,911 +0,0 @@ -/* - * Copyright (C) 2010 Felix Fietkau - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - */ -#include -#include -#include -#include -#include -#include -#include -#include "rate.h" -#include "rc80211_minstrel.h" -#include "rc80211_minstrel_ht.h" - -#define AVG_PKT_SIZE 1200 -#define SAMPLE_COLUMNS 10 -#define EWMA_LEVEL 75 - -/* Number of bits for an average sized packet */ -#define MCS_NBITS (AVG_PKT_SIZE << 3) - -/* Number of symbols for a packet with (bps) bits per symbol */ -#define MCS_NSYMS(bps) ((MCS_NBITS + (bps) - 1) / (bps)) - -/* Transmission time for a packet containing (syms) symbols */ -#define MCS_SYMBOL_TIME(sgi, syms) \ - (sgi ? \ - ((syms) * 18 + 4) / 5 : /* syms * 3.6 us */ \ - (syms) << 2 /* syms * 4 us */ \ - ) - -/* Transmit duration for the raw data part of an average sized packet */ -#define MCS_DURATION(streams, sgi, bps) MCS_SYMBOL_TIME(sgi, MCS_NSYMS((streams) * (bps))) - -/* - * Define group sort order: HT40 -> SGI -> #streams - */ -#define GROUP_IDX(_streams, _sgi, _ht40) \ - MINSTREL_MAX_STREAMS * 2 * _ht40 + \ - MINSTREL_MAX_STREAMS * _sgi + \ - _streams - 1 - -/* MCS rate information for an MCS group */ -#define MCS_GROUP(_streams, _sgi, _ht40) \ - [GROUP_IDX(_streams, _sgi, _ht40)] = { \ - .streams = _streams, \ - .flags = \ - (_sgi ? IEEE80211_TX_RC_SHORT_GI : 0) | \ - (_ht40 ? IEEE80211_TX_RC_40_MHZ_WIDTH : 0), \ - .duration = { \ - MCS_DURATION(_streams, _sgi, _ht40 ? 54 : 26), \ - MCS_DURATION(_streams, _sgi, _ht40 ? 108 : 52), \ - MCS_DURATION(_streams, _sgi, _ht40 ? 162 : 78), \ - MCS_DURATION(_streams, _sgi, _ht40 ? 216 : 104), \ - MCS_DURATION(_streams, _sgi, _ht40 ? 324 : 156), \ - MCS_DURATION(_streams, _sgi, _ht40 ? 432 : 208), \ - MCS_DURATION(_streams, _sgi, _ht40 ? 486 : 234), \ - MCS_DURATION(_streams, _sgi, _ht40 ? 540 : 260) \ - } \ -} - -/* - * To enable sufficiently targeted rate sampling, MCS rates are divided into - * groups, based on the number of streams and flags (HT40, SGI) that they - * use. - * - * Sortorder has to be fixed for GROUP_IDX macro to be applicable: - * HT40 -> SGI -> #streams - */ -const struct mcs_group minstrel_mcs_groups[] = { - MCS_GROUP(1, 0, 0), - MCS_GROUP(2, 0, 0), -#if MINSTREL_MAX_STREAMS >= 3 - MCS_GROUP(3, 0, 0), -#endif - - MCS_GROUP(1, 1, 0), - MCS_GROUP(2, 1, 0), -#if MINSTREL_MAX_STREAMS >= 3 - MCS_GROUP(3, 1, 0), -#endif - - MCS_GROUP(1, 0, 1), - MCS_GROUP(2, 0, 1), -#if MINSTREL_MAX_STREAMS >= 3 - MCS_GROUP(3, 0, 1), -#endif - - MCS_GROUP(1, 1, 1), - MCS_GROUP(2, 1, 1), -#if MINSTREL_MAX_STREAMS >= 3 - MCS_GROUP(3, 1, 1), -#endif -}; - -static u8 sample_table[SAMPLE_COLUMNS][MCS_GROUP_RATES]; - -/* - * Perform EWMA (Exponentially Weighted Moving Average) calculation - */ -static int -minstrel_ewma(int old, int new, int weight) -{ - return (new * (100 - weight) + old * weight) / 100; -} - -/* - * Look up an MCS group index based on mac80211 rate information - */ -static int -minstrel_ht_get_group_idx(struct ieee80211_tx_rate *rate) -{ - return GROUP_IDX((rate->idx / MCS_GROUP_RATES) + 1, - !!(rate->flags & IEEE80211_TX_RC_SHORT_GI), - !!(rate->flags & IEEE80211_TX_RC_40_MHZ_WIDTH)); -} - -static inline struct minstrel_rate_stats * -minstrel_get_ratestats(struct minstrel_ht_sta *mi, int index) -{ - return &mi->groups[index / MCS_GROUP_RATES].rates[index % MCS_GROUP_RATES]; -} - - -/* - * Recalculate success probabilities and counters for a rate using EWMA - */ -static void -minstrel_calc_rate_ewma(struct minstrel_rate_stats *mr) -{ - if (unlikely(mr->attempts > 0)) { - mr->sample_skipped = 0; - mr->cur_prob = MINSTREL_FRAC(mr->success, mr->attempts); - if (!mr->att_hist) - mr->probability = mr->cur_prob; - else - mr->probability = minstrel_ewma(mr->probability, - mr->cur_prob, EWMA_LEVEL); - mr->att_hist += mr->attempts; - mr->succ_hist += mr->success; - } else { - mr->sample_skipped++; - } - mr->last_success = mr->success; - mr->last_attempts = mr->attempts; - mr->success = 0; - mr->attempts = 0; -} - -/* - * Calculate throughput based on the average A-MPDU length, taking into account - * the expected number of retransmissions and their expected length - */ -static void -minstrel_ht_calc_tp(struct minstrel_ht_sta *mi, int group, int rate) -{ - struct minstrel_rate_stats *mr; - unsigned int usecs; - - mr = &mi->groups[group].rates[rate]; - - if (mr->probability < MINSTREL_FRAC(1, 10)) { - mr->cur_tp = 0; - return; - } - - usecs = mi->overhead / MINSTREL_TRUNC(mi->avg_ampdu_len); - usecs += minstrel_mcs_groups[group].duration[rate]; - mr->cur_tp = MINSTREL_TRUNC((1000000 / usecs) * mr->probability); -} - -/* - * Update rate statistics and select new primary rates - * - * Rules for rate selection: - * - max_prob_rate must use only one stream, as a tradeoff between delivery - * probability and throughput during strong fluctuations - * - as long as the max prob rate has a probability of more than 3/4, pick - * higher throughput rates, even if the probablity is a bit lower - */ -static void -minstrel_ht_update_stats(struct minstrel_priv *mp, struct minstrel_ht_sta *mi) -{ - struct minstrel_mcs_group_data *mg; - struct minstrel_rate_stats *mr; - int cur_prob, cur_prob_tp, cur_tp, cur_tp2; - int group, i, index; - - if (mi->ampdu_packets > 0) { - mi->avg_ampdu_len = minstrel_ewma(mi->avg_ampdu_len, - MINSTREL_FRAC(mi->ampdu_len, mi->ampdu_packets), EWMA_LEVEL); - mi->ampdu_len = 0; - mi->ampdu_packets = 0; - } - - mi->sample_slow = 0; - mi->sample_count = 0; - mi->max_tp_rate = 0; - mi->max_tp_rate2 = 0; - mi->max_prob_rate = 0; - - for (group = 0; group < ARRAY_SIZE(minstrel_mcs_groups); group++) { - cur_prob = 0; - cur_prob_tp = 0; - cur_tp = 0; - cur_tp2 = 0; - - mg = &mi->groups[group]; - if (!mg->supported) - continue; - - mg->max_tp_rate = 0; - mg->max_tp_rate2 = 0; - mg->max_prob_rate = 0; - mi->sample_count++; - - for (i = 0; i < MCS_GROUP_RATES; i++) { - if (!(mg->supported & BIT(i))) - continue; - - mr = &mg->rates[i]; - mr->retry_updated = false; - index = MCS_GROUP_RATES * group + i; - minstrel_calc_rate_ewma(mr); - minstrel_ht_calc_tp(mi, group, i); - - if (!mr->cur_tp) - continue; - - /* ignore the lowest rate of each single-stream group */ - if (!i && minstrel_mcs_groups[group].streams == 1) - continue; - - if ((mr->cur_tp > cur_prob_tp && mr->probability > - MINSTREL_FRAC(3, 4)) || mr->probability > cur_prob) { - mg->max_prob_rate = index; - cur_prob = mr->probability; - cur_prob_tp = mr->cur_tp; - } - - if (mr->cur_tp > cur_tp) { - swap(index, mg->max_tp_rate); - cur_tp = mr->cur_tp; - mr = minstrel_get_ratestats(mi, index); - } - - if (index >= mg->max_tp_rate) - continue; - - if (mr->cur_tp > cur_tp2) { - mg->max_tp_rate2 = index; - cur_tp2 = mr->cur_tp; - } - } - } - - /* try to sample up to half of the available rates during each interval */ - mi->sample_count *= 4; - - cur_prob = 0; - cur_prob_tp = 0; - cur_tp = 0; - cur_tp2 = 0; - for (group = 0; group < ARRAY_SIZE(minstrel_mcs_groups); group++) { - mg = &mi->groups[group]; - if (!mg->supported) - continue; - - mr = minstrel_get_ratestats(mi, mg->max_prob_rate); - if (cur_prob_tp < mr->cur_tp && - minstrel_mcs_groups[group].streams == 1) { - mi->max_prob_rate = mg->max_prob_rate; - cur_prob = mr->cur_prob; - cur_prob_tp = mr->cur_tp; - } - - mr = minstrel_get_ratestats(mi, mg->max_tp_rate); - if (cur_tp < mr->cur_tp) { - mi->max_tp_rate2 = mi->max_tp_rate; - cur_tp2 = cur_tp; - mi->max_tp_rate = mg->max_tp_rate; - cur_tp = mr->cur_tp; - } - - mr = minstrel_get_ratestats(mi, mg->max_tp_rate2); - if (cur_tp2 < mr->cur_tp) { - mi->max_tp_rate2 = mg->max_tp_rate2; - cur_tp2 = mr->cur_tp; - } - } - - mi->stats_update = jiffies; -} - -static bool -minstrel_ht_txstat_valid(struct ieee80211_tx_rate *rate) -{ - if (rate->idx < 0) - return false; - - if (!rate->count) - return false; - - return !!(rate->flags & IEEE80211_TX_RC_MCS); -} - -static void -minstrel_next_sample_idx(struct minstrel_ht_sta *mi) -{ - struct minstrel_mcs_group_data *mg; - - for (;;) { - mi->sample_group++; - mi->sample_group %= ARRAY_SIZE(minstrel_mcs_groups); - mg = &mi->groups[mi->sample_group]; - - if (!mg->supported) - continue; - - if (++mg->index >= MCS_GROUP_RATES) { - mg->index = 0; - if (++mg->column >= ARRAY_SIZE(sample_table)) - mg->column = 0; - } - break; - } -} - -static void -minstrel_downgrade_rate(struct minstrel_ht_sta *mi, unsigned int *idx, - bool primary) -{ - int group, orig_group; - - orig_group = group = *idx / MCS_GROUP_RATES; - while (group > 0) { - group--; - - if (!mi->groups[group].supported) - continue; - - if (minstrel_mcs_groups[group].streams > - minstrel_mcs_groups[orig_group].streams) - continue; - - if (primary) - *idx = mi->groups[group].max_tp_rate; - else - *idx = mi->groups[group].max_tp_rate2; - break; - } -} - -static void -minstrel_aggr_check(struct ieee80211_sta *pubsta, struct sk_buff *skb) -{ - struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) skb->data; - struct sta_info *sta = container_of(pubsta, struct sta_info, sta); - u16 tid; - - if (unlikely(!ieee80211_is_data_qos(hdr->frame_control))) - return; - - if (unlikely(skb->protocol == cpu_to_be16(ETH_P_PAE))) - return; - - tid = *ieee80211_get_qos_ctl(hdr) & IEEE80211_QOS_CTL_TID_MASK; - if (likely(sta->ampdu_mlme.tid_tx[tid])) - return; - - if (skb_get_queue_mapping(skb) == IEEE80211_AC_VO) - return; - - ieee80211_start_tx_ba_session(pubsta, tid, 5000); -} - -static void -minstrel_ht_tx_status(void *priv, struct ieee80211_supported_band *sband, - struct ieee80211_sta *sta, void *priv_sta, - struct sk_buff *skb) -{ - struct minstrel_ht_sta_priv *msp = priv_sta; - struct minstrel_ht_sta *mi = &msp->ht; - struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb); - struct ieee80211_tx_rate *ar = info->status.rates; - struct minstrel_rate_stats *rate, *rate2; - struct minstrel_priv *mp = priv; - bool last = false; - int group; - int i = 0; - - if (!msp->is_ht) - return mac80211_minstrel.tx_status(priv, sband, sta, &msp->legacy, skb); - - /* This packet was aggregated but doesn't carry status info */ - if ((info->flags & IEEE80211_TX_CTL_AMPDU) && - !(info->flags & IEEE80211_TX_STAT_AMPDU)) - return; - - if (!(info->flags & IEEE80211_TX_STAT_AMPDU)) { - info->status.ampdu_ack_len = - (info->flags & IEEE80211_TX_STAT_ACK ? 1 : 0); - info->status.ampdu_len = 1; - } - - mi->ampdu_packets++; - mi->ampdu_len += info->status.ampdu_len; - - if (!mi->sample_wait && !mi->sample_tries && mi->sample_count > 0) { - mi->sample_wait = 16 + 2 * MINSTREL_TRUNC(mi->avg_ampdu_len); - mi->sample_tries = 2; - mi->sample_count--; - } - - if (info->flags & IEEE80211_TX_CTL_RATE_CTRL_PROBE) - mi->sample_packets += info->status.ampdu_len; - - for (i = 0; !last; i++) { - last = (i == IEEE80211_TX_MAX_RATES - 1) || - !minstrel_ht_txstat_valid(&ar[i + 1]); - - if (!minstrel_ht_txstat_valid(&ar[i])) - break; - - group = minstrel_ht_get_group_idx(&ar[i]); - rate = &mi->groups[group].rates[ar[i].idx % 8]; - - if (last) - rate->success += info->status.ampdu_ack_len; - - rate->attempts += ar[i].count * info->status.ampdu_len; - } - - /* - * check for sudden death of spatial multiplexing, - * downgrade to a lower number of streams if necessary. - */ - rate = minstrel_get_ratestats(mi, mi->max_tp_rate); - if (rate->attempts > 30 && - MINSTREL_FRAC(rate->success, rate->attempts) < - MINSTREL_FRAC(20, 100)) - minstrel_downgrade_rate(mi, &mi->max_tp_rate, true); - - rate2 = minstrel_get_ratestats(mi, mi->max_tp_rate2); - if (rate2->attempts > 30 && - MINSTREL_FRAC(rate2->success, rate2->attempts) < - MINSTREL_FRAC(20, 100)) - minstrel_downgrade_rate(mi, &mi->max_tp_rate2, false); - - if (time_after(jiffies, mi->stats_update + (mp->update_interval / 2 * HZ) / 1000)) { - minstrel_ht_update_stats(mp, mi); - if (!(info->flags & IEEE80211_TX_CTL_AMPDU)) - minstrel_aggr_check(sta, skb); - } -} - -static void -minstrel_calc_retransmit(struct minstrel_priv *mp, struct minstrel_ht_sta *mi, - int index) -{ - struct minstrel_rate_stats *mr; - const struct mcs_group *group; - unsigned int tx_time, tx_time_rtscts, tx_time_data; - unsigned int cw = mp->cw_min; - unsigned int ctime = 0; - unsigned int t_slot = 9; /* FIXME */ - unsigned int ampdu_len = MINSTREL_TRUNC(mi->avg_ampdu_len); - - mr = minstrel_get_ratestats(mi, index); - if (mr->probability < MINSTREL_FRAC(1, 10)) { - mr->retry_count = 1; - mr->retry_count_rtscts = 1; - return; - } - - mr->retry_count = 2; - mr->retry_count_rtscts = 2; - mr->retry_updated = true; - - group = &minstrel_mcs_groups[index / MCS_GROUP_RATES]; - tx_time_data = group->duration[index % MCS_GROUP_RATES] * ampdu_len; - - /* Contention time for first 2 tries */ - ctime = (t_slot * cw) >> 1; - cw = min((cw << 1) | 1, mp->cw_max); - ctime += (t_slot * cw) >> 1; - cw = min((cw << 1) | 1, mp->cw_max); - - /* Total TX time for data and Contention after first 2 tries */ - tx_time = ctime + 2 * (mi->overhead + tx_time_data); - tx_time_rtscts = ctime + 2 * (mi->overhead_rtscts + tx_time_data); - - /* See how many more tries we can fit inside segment size */ - do { - /* Contention time for this try */ - ctime = (t_slot * cw) >> 1; - cw = min((cw << 1) | 1, mp->cw_max); - - /* Total TX time after this try */ - tx_time += ctime + mi->overhead + tx_time_data; - tx_time_rtscts += ctime + mi->overhead_rtscts + tx_time_data; - - if (tx_time_rtscts < mp->segment_size) - mr->retry_count_rtscts++; - } while ((tx_time < mp->segment_size) && - (++mr->retry_count < mp->max_retry)); -} - - -static void -minstrel_ht_set_rate(struct minstrel_priv *mp, struct minstrel_ht_sta *mi, - struct ieee80211_tx_rate *rate, int index, - bool sample, bool rtscts) -{ - const struct mcs_group *group = &minstrel_mcs_groups[index / MCS_GROUP_RATES]; - struct minstrel_rate_stats *mr; - - mr = minstrel_get_ratestats(mi, index); - if (!mr->retry_updated) - minstrel_calc_retransmit(mp, mi, index); - - if (sample) - rate->count = 1; - else if (mr->probability < MINSTREL_FRAC(20, 100)) - rate->count = 2; - else if (rtscts) - rate->count = mr->retry_count_rtscts; - else - rate->count = mr->retry_count; - - rate->flags = IEEE80211_TX_RC_MCS | group->flags; - if (rtscts) - rate->flags |= IEEE80211_TX_RC_USE_RTS_CTS; - rate->idx = index % MCS_GROUP_RATES + (group->streams - 1) * MCS_GROUP_RATES; -} - -static inline int -minstrel_get_duration(int index) -{ - const struct mcs_group *group = &minstrel_mcs_groups[index / MCS_GROUP_RATES]; - return group->duration[index % MCS_GROUP_RATES]; -} - -static int -minstrel_get_sample_rate(struct minstrel_priv *mp, struct minstrel_ht_sta *mi) -{ - struct minstrel_rate_stats *mr; - struct minstrel_mcs_group_data *mg; - int sample_idx = 0; - - if (mi->sample_wait > 0) { - mi->sample_wait--; - return -1; - } - - if (!mi->sample_tries) - return -1; - - mi->sample_tries--; - mg = &mi->groups[mi->sample_group]; - sample_idx = sample_table[mg->column][mg->index]; - mr = &mg->rates[sample_idx]; - sample_idx += mi->sample_group * MCS_GROUP_RATES; - minstrel_next_sample_idx(mi); - - /* - * Sampling might add some overhead (RTS, no aggregation) - * to the frame. Hence, don't use sampling for the currently - * used max TP rate. - */ - if (sample_idx == mi->max_tp_rate) - return -1; - /* - * When not using MRR, do not sample if the probability is already - * higher than 95% to avoid wasting airtime - */ - if (!mp->has_mrr && (mr->probability > MINSTREL_FRAC(95, 100))) - return -1; - - /* - * Make sure that lower rates get sampled only occasionally, - * if the link is working perfectly. - */ - if (minstrel_get_duration(sample_idx) > - minstrel_get_duration(mi->max_tp_rate)) { - if (mr->sample_skipped < 20) - return -1; - - if (mi->sample_slow++ > 2) - return -1; - } - - return sample_idx; -} - -static void -minstrel_ht_get_rate(void *priv, struct ieee80211_sta *sta, void *priv_sta, - struct ieee80211_tx_rate_control *txrc) -{ - struct ieee80211_tx_info *info = IEEE80211_SKB_CB(txrc->skb); - struct ieee80211_tx_rate *ar = info->status.rates; - struct minstrel_ht_sta_priv *msp = priv_sta; - struct minstrel_ht_sta *mi = &msp->ht; - struct minstrel_priv *mp = priv; - int sample_idx; - bool sample = false; - - if (rate_control_send_low(sta, priv_sta, txrc)) - return; - - if (!msp->is_ht) - return mac80211_minstrel.get_rate(priv, sta, &msp->legacy, txrc); - - info->flags |= mi->tx_flags; - - /* Don't use EAPOL frames for sampling on non-mrr hw */ - if (mp->hw->max_rates == 1 && - txrc->skb->protocol == cpu_to_be16(ETH_P_PAE)) - sample_idx = -1; - else - sample_idx = minstrel_get_sample_rate(mp, mi); - -#ifdef CONFIG_MAC80211_DEBUGFS - /* use fixed index if set */ - if (mp->fixed_rate_idx != -1) - sample_idx = mp->fixed_rate_idx; -#endif - - if (sample_idx >= 0) { - sample = true; - minstrel_ht_set_rate(mp, mi, &ar[0], sample_idx, - true, false); - info->flags |= IEEE80211_TX_CTL_RATE_CTRL_PROBE; - } else { - minstrel_ht_set_rate(mp, mi, &ar[0], mi->max_tp_rate, - false, false); - } - - if (mp->hw->max_rates >= 3) { - /* - * At least 3 tx rates supported, use - * sample_rate -> max_tp_rate -> max_prob_rate for sampling and - * max_tp_rate -> max_tp_rate2 -> max_prob_rate by default. - */ - if (sample_idx >= 0) - minstrel_ht_set_rate(mp, mi, &ar[1], mi->max_tp_rate, - false, false); - else - minstrel_ht_set_rate(mp, mi, &ar[1], mi->max_tp_rate2, - false, true); - - minstrel_ht_set_rate(mp, mi, &ar[2], mi->max_prob_rate, - false, !sample); - - ar[3].count = 0; - ar[3].idx = -1; - } else if (mp->hw->max_rates == 2) { - /* - * Only 2 tx rates supported, use - * sample_rate -> max_prob_rate for sampling and - * max_tp_rate -> max_prob_rate by default. - */ - minstrel_ht_set_rate(mp, mi, &ar[1], mi->max_prob_rate, - false, !sample); - - ar[2].count = 0; - ar[2].idx = -1; - } else { - /* Not using MRR, only use the first rate */ - ar[1].count = 0; - ar[1].idx = -1; - } - - mi->total_packets++; - - /* wraparound */ - if (mi->total_packets == ~0) { - mi->total_packets = 0; - mi->sample_packets = 0; - } -} - -static void -minstrel_ht_update_caps(void *priv, struct ieee80211_supported_band *sband, - struct ieee80211_sta *sta, void *priv_sta, - enum nl80211_channel_type oper_chan_type) -{ - struct minstrel_priv *mp = priv; - struct minstrel_ht_sta_priv *msp = priv_sta; - struct minstrel_ht_sta *mi = &msp->ht; - struct ieee80211_mcs_info *mcs = &sta->ht_cap.mcs; - struct ieee80211_local *local = hw_to_local(mp->hw); - u16 sta_cap = sta->ht_cap.cap; - int n_supported = 0; - int ack_dur; - int stbc; - int i; - unsigned int smps; - - /* fall back to the old minstrel for legacy stations */ - if (!sta->ht_cap.ht_supported) - goto use_legacy; - - BUILD_BUG_ON(ARRAY_SIZE(minstrel_mcs_groups) != - MINSTREL_MAX_STREAMS * MINSTREL_STREAM_GROUPS); - - msp->is_ht = true; - memset(mi, 0, sizeof(*mi)); - mi->stats_update = jiffies; - - ack_dur = ieee80211_frame_duration(local, 10, 60, 1, 1); - mi->overhead = ieee80211_frame_duration(local, 0, 60, 1, 1) + ack_dur; - mi->overhead_rtscts = mi->overhead + 2 * ack_dur; - - mi->avg_ampdu_len = MINSTREL_FRAC(1, 1); - - /* When using MRR, sample more on the first attempt, without delay */ - if (mp->has_mrr) { - mi->sample_count = 16; - mi->sample_wait = 0; - } else { - mi->sample_count = 8; - mi->sample_wait = 8; - } - mi->sample_tries = 4; - - stbc = (sta_cap & IEEE80211_HT_CAP_RX_STBC) >> - IEEE80211_HT_CAP_RX_STBC_SHIFT; - mi->tx_flags |= stbc << IEEE80211_TX_CTL_STBC_SHIFT; - - if (sta_cap & IEEE80211_HT_CAP_LDPC_CODING) - mi->tx_flags |= IEEE80211_TX_CTL_LDPC; - - if (oper_chan_type != NL80211_CHAN_HT40MINUS && - oper_chan_type != NL80211_CHAN_HT40PLUS) - sta_cap &= ~IEEE80211_HT_CAP_SUP_WIDTH_20_40; - - smps = (sta_cap & IEEE80211_HT_CAP_SM_PS) >> - IEEE80211_HT_CAP_SM_PS_SHIFT; - - for (i = 0; i < ARRAY_SIZE(mi->groups); i++) { - u16 req = 0; - - mi->groups[i].supported = 0; - if (minstrel_mcs_groups[i].flags & IEEE80211_TX_RC_SHORT_GI) { - if (minstrel_mcs_groups[i].flags & IEEE80211_TX_RC_40_MHZ_WIDTH) - req |= IEEE80211_HT_CAP_SGI_40; - else - req |= IEEE80211_HT_CAP_SGI_20; - } - - if (minstrel_mcs_groups[i].flags & IEEE80211_TX_RC_40_MHZ_WIDTH) - req |= IEEE80211_HT_CAP_SUP_WIDTH_20_40; - - if ((sta_cap & req) != req) - continue; - - /* Mark MCS > 7 as unsupported if STA is in static SMPS mode */ - if (smps == WLAN_HT_CAP_SM_PS_STATIC && - minstrel_mcs_groups[i].streams > 1) - continue; - - mi->groups[i].supported = - mcs->rx_mask[minstrel_mcs_groups[i].streams - 1]; - - if (mi->groups[i].supported) - n_supported++; - } - - if (!n_supported) - goto use_legacy; - - return; - -use_legacy: - msp->is_ht = false; - memset(&msp->legacy, 0, sizeof(msp->legacy)); - msp->legacy.r = msp->ratelist; - msp->legacy.sample_table = msp->sample_table; - return mac80211_minstrel.rate_init(priv, sband, sta, &msp->legacy); -} - -static void -minstrel_ht_rate_init(void *priv, struct ieee80211_supported_band *sband, - struct ieee80211_sta *sta, void *priv_sta) -{ - struct minstrel_priv *mp = priv; - - minstrel_ht_update_caps(priv, sband, sta, priv_sta, mp->hw->conf.channel_type); -} - -static void -minstrel_ht_rate_update(void *priv, struct ieee80211_supported_band *sband, - struct ieee80211_sta *sta, void *priv_sta, - u32 changed, enum nl80211_channel_type oper_chan_type) -{ - minstrel_ht_update_caps(priv, sband, sta, priv_sta, oper_chan_type); -} - -static void * -minstrel_ht_alloc_sta(void *priv, struct ieee80211_sta *sta, gfp_t gfp) -{ - struct ieee80211_supported_band *sband; - struct minstrel_ht_sta_priv *msp; - struct minstrel_priv *mp = priv; - struct ieee80211_hw *hw = mp->hw; - int max_rates = 0; - int i; - - for (i = 0; i < IEEE80211_NUM_BANDS; i++) { - sband = hw->wiphy->bands[i]; - if (sband && sband->n_bitrates > max_rates) - max_rates = sband->n_bitrates; - } - - msp = kzalloc(sizeof(struct minstrel_ht_sta), gfp); - if (!msp) - return NULL; - - msp->ratelist = kzalloc(sizeof(struct minstrel_rate) * max_rates, gfp); - if (!msp->ratelist) - goto error; - - msp->sample_table = kmalloc(SAMPLE_COLUMNS * max_rates, gfp); - if (!msp->sample_table) - goto error1; - - return msp; - -error1: - kfree(msp->ratelist); -error: - kfree(msp); - return NULL; -} - -static void -minstrel_ht_free_sta(void *priv, struct ieee80211_sta *sta, void *priv_sta) -{ - struct minstrel_ht_sta_priv *msp = priv_sta; - - kfree(msp->sample_table); - kfree(msp->ratelist); - kfree(msp); -} - -static void * -minstrel_ht_alloc(struct ieee80211_hw *hw, struct dentry *debugfsdir) -{ - return mac80211_minstrel.alloc(hw, debugfsdir); -} - -static void -minstrel_ht_free(void *priv) -{ - mac80211_minstrel.free(priv); -} - -static struct rate_control_ops mac80211_minstrel_ht = { - .name = "minstrel_ht", - .tx_status = minstrel_ht_tx_status, - .get_rate = minstrel_ht_get_rate, - .rate_init = minstrel_ht_rate_init, - .rate_update = minstrel_ht_rate_update, - .alloc_sta = minstrel_ht_alloc_sta, - .free_sta = minstrel_ht_free_sta, - .alloc = minstrel_ht_alloc, - .free = minstrel_ht_free, -#ifdef CONFIG_MAC80211_DEBUGFS - .add_sta_debugfs = minstrel_ht_add_sta_debugfs, - .remove_sta_debugfs = minstrel_ht_remove_sta_debugfs, -#endif -}; - - -static void -init_sample_table(void) -{ - int col, i, new_idx; - u8 rnd[MCS_GROUP_RATES]; - - memset(sample_table, 0xff, sizeof(sample_table)); - for (col = 0; col < SAMPLE_COLUMNS; col++) { - for (i = 0; i < MCS_GROUP_RATES; i++) { - get_random_bytes(rnd, sizeof(rnd)); - new_idx = (i + rnd[i]) % MCS_GROUP_RATES; - - while (sample_table[col][new_idx] != 0xff) - new_idx = (new_idx + 1) % MCS_GROUP_RATES; - - sample_table[col][new_idx] = i; - } - } -} - -int __init -rc80211_minstrel_ht_init(void) -{ - init_sample_table(); - return ieee80211_rate_control_register(&mac80211_minstrel_ht); -} - -void -rc80211_minstrel_ht_exit(void) -{ - ieee80211_rate_control_unregister(&mac80211_minstrel_ht); -} diff --git a/openairITS/mac/DOT11/net/mac80211/rc80211_minstrel_ht.h b/openairITS/mac/DOT11/net/mac80211/rc80211_minstrel_ht.h deleted file mode 100644 index 462d2b227e..0000000000 --- a/openairITS/mac/DOT11/net/mac80211/rc80211_minstrel_ht.h +++ /dev/null @@ -1,130 +0,0 @@ -/* - * Copyright (C) 2010 Felix Fietkau - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - */ - -#ifndef __RC_MINSTREL_HT_H -#define __RC_MINSTREL_HT_H - -/* - * The number of streams can be changed to 2 to reduce code - * size and memory footprint. - */ -#define MINSTREL_MAX_STREAMS 3 -#define MINSTREL_STREAM_GROUPS 4 - -/* scaled fraction values */ -#define MINSTREL_SCALE 16 -#define MINSTREL_FRAC(val, div) (((val) << MINSTREL_SCALE) / div) -#define MINSTREL_TRUNC(val) ((val) >> MINSTREL_SCALE) - -#define MCS_GROUP_RATES 8 - -struct mcs_group { - u32 flags; - unsigned int streams; - unsigned int duration[MCS_GROUP_RATES]; -}; - -extern const struct mcs_group minstrel_mcs_groups[]; - -struct minstrel_rate_stats { - /* current / last sampling period attempts/success counters */ - unsigned int attempts, last_attempts; - unsigned int success, last_success; - - /* total attempts/success counters */ - u64 att_hist, succ_hist; - - /* current throughput */ - unsigned int cur_tp; - - /* packet delivery probabilities */ - unsigned int cur_prob, probability; - - /* maximum retry counts */ - unsigned int retry_count; - unsigned int retry_count_rtscts; - - bool retry_updated; - u8 sample_skipped; -}; - -struct minstrel_mcs_group_data { - u8 index; - u8 column; - - /* bitfield of supported MCS rates of this group */ - u8 supported; - - /* selected primary rates */ - unsigned int max_tp_rate; - unsigned int max_tp_rate2; - unsigned int max_prob_rate; - - /* MCS rate statistics */ - struct minstrel_rate_stats rates[MCS_GROUP_RATES]; -}; - -struct minstrel_ht_sta { - /* ampdu length (average, per sampling interval) */ - unsigned int ampdu_len; - unsigned int ampdu_packets; - - /* ampdu length (EWMA) */ - unsigned int avg_ampdu_len; - - /* best throughput rate */ - unsigned int max_tp_rate; - - /* second best throughput rate */ - unsigned int max_tp_rate2; - - /* best probability rate */ - unsigned int max_prob_rate; - - /* time of last status update */ - unsigned long stats_update; - - /* overhead time in usec for each frame */ - unsigned int overhead; - unsigned int overhead_rtscts; - - unsigned int total_packets; - unsigned int sample_packets; - - /* tx flags to add for frames for this sta */ - u32 tx_flags; - - u8 sample_wait; - u8 sample_tries; - u8 sample_count; - u8 sample_slow; - - /* current MCS group to be sampled */ - u8 sample_group; - - /* MCS rate group info and statistics */ - struct minstrel_mcs_group_data groups[MINSTREL_MAX_STREAMS * MINSTREL_STREAM_GROUPS]; -}; - -struct minstrel_ht_sta_priv { - union { - struct minstrel_ht_sta ht; - struct minstrel_sta_info legacy; - }; -#ifdef CONFIG_MAC80211_DEBUGFS - struct dentry *dbg_stats; -#endif - void *ratelist; - void *sample_table; - bool is_ht; -}; - -void minstrel_ht_add_sta_debugfs(void *priv, void *priv_sta, struct dentry *dir); -void minstrel_ht_remove_sta_debugfs(void *priv, void *priv_sta); - -#endif diff --git a/openairITS/mac/DOT11/net/mac80211/rc80211_minstrel_ht_debugfs.c b/openairITS/mac/DOT11/net/mac80211/rc80211_minstrel_ht_debugfs.c deleted file mode 100644 index e788f76a1d..0000000000 --- a/openairITS/mac/DOT11/net/mac80211/rc80211_minstrel_ht_debugfs.c +++ /dev/null @@ -1,120 +0,0 @@ -/* - * Copyright (C) 2010 Felix Fietkau - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - */ -#include -#include -#include -#include -#include -#include -#include -#include "rc80211_minstrel.h" -#include "rc80211_minstrel_ht.h" - -static int -minstrel_ht_stats_open(struct inode *inode, struct file *file) -{ - struct minstrel_ht_sta_priv *msp = inode->i_private; - struct minstrel_ht_sta *mi = &msp->ht; - struct minstrel_debugfs_info *ms; - unsigned int i, j, tp, prob, eprob; - char *p; - int ret; - - if (!msp->is_ht) { - inode->i_private = &msp->legacy; - ret = minstrel_stats_open(inode, file); - inode->i_private = msp; - return ret; - } - - ms = kmalloc(sizeof(*ms) + 8192, GFP_KERNEL); - if (!ms) - return -ENOMEM; - - file->private_data = ms; - p = ms->buf; - p += sprintf(p, "type rate throughput ewma prob this prob " - "this succ/attempt success attempts\n"); - for (i = 0; i < MINSTREL_MAX_STREAMS * MINSTREL_STREAM_GROUPS; i++) { - char htmode = '2'; - char gimode = 'L'; - - if (!mi->groups[i].supported) - continue; - - if (minstrel_mcs_groups[i].flags & IEEE80211_TX_RC_40_MHZ_WIDTH) - htmode = '4'; - if (minstrel_mcs_groups[i].flags & IEEE80211_TX_RC_SHORT_GI) - gimode = 'S'; - - for (j = 0; j < MCS_GROUP_RATES; j++) { - struct minstrel_rate_stats *mr = &mi->groups[i].rates[j]; - int idx = i * MCS_GROUP_RATES + j; - - if (!(mi->groups[i].supported & BIT(j))) - continue; - - p += sprintf(p, "HT%c0/%cGI ", htmode, gimode); - - *(p++) = (idx == mi->max_tp_rate) ? 'T' : ' '; - *(p++) = (idx == mi->max_tp_rate2) ? 't' : ' '; - *(p++) = (idx == mi->max_prob_rate) ? 'P' : ' '; - p += sprintf(p, "MCS%-2u", (minstrel_mcs_groups[i].streams - 1) * - MCS_GROUP_RATES + j); - - tp = mr->cur_tp / 10; - prob = MINSTREL_TRUNC(mr->cur_prob * 1000); - eprob = MINSTREL_TRUNC(mr->probability * 1000); - - p += sprintf(p, " %6u.%1u %6u.%1u %6u.%1u " - "%3u(%3u) %8llu %8llu\n", - tp / 10, tp % 10, - eprob / 10, eprob % 10, - prob / 10, prob % 10, - mr->last_success, - mr->last_attempts, - (unsigned long long)mr->succ_hist, - (unsigned long long)mr->att_hist); - } - } - p += sprintf(p, "\nTotal packet count:: ideal %d " - "lookaround %d\n", - max(0, (int) mi->total_packets - (int) mi->sample_packets), - mi->sample_packets); - p += sprintf(p, "Average A-MPDU length: %d.%d\n", - MINSTREL_TRUNC(mi->avg_ampdu_len), - MINSTREL_TRUNC(mi->avg_ampdu_len * 10) % 10); - ms->len = p - ms->buf; - - return nonseekable_open(inode, file); -} - -static const struct file_operations minstrel_ht_stat_fops = { - .owner = THIS_MODULE, - .open = minstrel_ht_stats_open, - .read = minstrel_stats_read, - .release = minstrel_stats_release, - .llseek = no_llseek, -}; - -void -minstrel_ht_add_sta_debugfs(void *priv, void *priv_sta, struct dentry *dir) -{ - struct minstrel_ht_sta_priv *msp = priv_sta; - - msp->dbg_stats = debugfs_create_file("rc_stats", S_IRUGO, dir, msp, - &minstrel_ht_stat_fops); -} - -void -minstrel_ht_remove_sta_debugfs(void *priv, void *priv_sta) -{ - struct minstrel_ht_sta_priv *msp = priv_sta; - - debugfs_remove(msp->dbg_stats); -} diff --git a/openairITS/mac/DOT11/net/mac80211/rc80211_pid.h b/openairITS/mac/DOT11/net/mac80211/rc80211_pid.h deleted file mode 100644 index 19111c7bf4..0000000000 --- a/openairITS/mac/DOT11/net/mac80211/rc80211_pid.h +++ /dev/null @@ -1,278 +0,0 @@ -/* - * Copyright 2007, Mattias Nissler - * Copyright 2007, Stefano Brivio - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - */ - -#ifndef RC80211_PID_H -#define RC80211_PID_H - -/* Sampling period for measuring percentage of failed frames in ms. */ -#define RC_PID_INTERVAL 125 - -/* Exponential averaging smoothness (used for I part of PID controller) */ -#define RC_PID_SMOOTHING_SHIFT 3 -#define RC_PID_SMOOTHING (1 << RC_PID_SMOOTHING_SHIFT) - -/* Sharpening factor (used for D part of PID controller) */ -#define RC_PID_SHARPENING_FACTOR 0 -#define RC_PID_SHARPENING_DURATION 0 - -/* Fixed point arithmetic shifting amount. */ -#define RC_PID_ARITH_SHIFT 8 - -/* Proportional PID component coefficient. */ -#define RC_PID_COEFF_P 15 -/* Integral PID component coefficient. */ -#define RC_PID_COEFF_I 9 -/* Derivative PID component coefficient. */ -#define RC_PID_COEFF_D 15 - -/* Target failed frames rate for the PID controller. NB: This effectively gives - * maximum failed frames percentage we're willing to accept. If the wireless - * link quality is good, the controller will fail to adjust failed frames - * percentage to the target. This is intentional. - */ -#define RC_PID_TARGET_PF 14 - -/* Rate behaviour normalization quantity over time. */ -#define RC_PID_NORM_OFFSET 3 - -/* Push high rates right after loading. */ -#define RC_PID_FAST_START 0 - -/* Arithmetic right shift for positive and negative values for ISO C. */ -#define RC_PID_DO_ARITH_RIGHT_SHIFT(x, y) \ - ((x) < 0 ? -((-(x)) >> (y)) : (x) >> (y)) - -enum rc_pid_event_type { - RC_PID_EVENT_TYPE_TX_STATUS, - RC_PID_EVENT_TYPE_RATE_CHANGE, - RC_PID_EVENT_TYPE_TX_RATE, - RC_PID_EVENT_TYPE_PF_SAMPLE, -}; - -union rc_pid_event_data { - /* RC_PID_EVENT_TX_STATUS */ - struct { - u32 flags; - struct ieee80211_tx_info tx_status; - }; - /* RC_PID_EVENT_TYPE_RATE_CHANGE */ - /* RC_PID_EVENT_TYPE_TX_RATE */ - struct { - int index; - int rate; - }; - /* RC_PID_EVENT_TYPE_PF_SAMPLE */ - struct { - s32 pf_sample; - s32 prop_err; - s32 int_err; - s32 der_err; - }; -}; - -struct rc_pid_event { - /* The time when the event occurred */ - unsigned long timestamp; - - /* Event ID number */ - unsigned int id; - - /* Type of event */ - enum rc_pid_event_type type; - - /* type specific data */ - union rc_pid_event_data data; -}; - -/* Size of the event ring buffer. */ -#define RC_PID_EVENT_RING_SIZE 32 - -struct rc_pid_event_buffer { - /* Counter that generates event IDs */ - unsigned int ev_count; - - /* Ring buffer of events */ - struct rc_pid_event ring[RC_PID_EVENT_RING_SIZE]; - - /* Index to the entry in events_buf to be reused */ - unsigned int next_entry; - - /* Lock that guards against concurrent access to this buffer struct */ - spinlock_t lock; - - /* Wait queue for poll/select and blocking I/O */ - wait_queue_head_t waitqueue; -}; - -struct rc_pid_events_file_info { - /* The event buffer we read */ - struct rc_pid_event_buffer *events; - - /* The entry we have should read next */ - unsigned int next_entry; -}; - -/** - * struct rc_pid_debugfs_entries - tunable parameters - * - * Algorithm parameters, tunable via debugfs. - * @target: target percentage for failed frames - * @sampling_period: error sampling interval in milliseconds - * @coeff_p: absolute value of the proportional coefficient - * @coeff_i: absolute value of the integral coefficient - * @coeff_d: absolute value of the derivative coefficient - * @smoothing_shift: absolute value of the integral smoothing factor (i.e. - * amount of smoothing introduced by the exponential moving average) - * @sharpen_factor: absolute value of the derivative sharpening factor (i.e. - * amount of emphasis given to the derivative term after low activity - * events) - * @sharpen_duration: duration of the sharpening effect after the detected low - * activity event, relative to sampling_period - * @norm_offset: amount of normalization periodically performed on the learnt - * rate behaviour values (lower means we should trust more what we learnt - * about behaviour of rates, higher means we should trust more the natural - * ordering of rates) - */ -struct rc_pid_debugfs_entries { - struct dentry *target; - struct dentry *sampling_period; - struct dentry *coeff_p; - struct dentry *coeff_i; - struct dentry *coeff_d; - struct dentry *smoothing_shift; - struct dentry *sharpen_factor; - struct dentry *sharpen_duration; - struct dentry *norm_offset; -}; - -void rate_control_pid_event_tx_status(struct rc_pid_event_buffer *buf, - struct ieee80211_tx_info *stat); - -void rate_control_pid_event_rate_change(struct rc_pid_event_buffer *buf, - int index, int rate); - -void rate_control_pid_event_tx_rate(struct rc_pid_event_buffer *buf, - int index, int rate); - -void rate_control_pid_event_pf_sample(struct rc_pid_event_buffer *buf, - s32 pf_sample, s32 prop_err, - s32 int_err, s32 der_err); - -void rate_control_pid_add_sta_debugfs(void *priv, void *priv_sta, - struct dentry *dir); - -void rate_control_pid_remove_sta_debugfs(void *priv, void *priv_sta); - -struct rc_pid_sta_info { - unsigned long last_change; - unsigned long last_sample; - - u32 tx_num_failed; - u32 tx_num_xmit; - - int txrate_idx; - - /* Average failed frames percentage error (i.e. actual vs. target - * percentage), scaled by RC_PID_SMOOTHING. This value is computed - * using using an exponential weighted average technique: - * - * (RC_PID_SMOOTHING - 1) * err_avg_old + err - * err_avg = ------------------------------------------ - * RC_PID_SMOOTHING - * - * where err_avg is the new approximation, err_avg_old the previous one - * and err is the error w.r.t. to the current failed frames percentage - * sample. Note that the bigger RC_PID_SMOOTHING the more weight is - * given to the previous estimate, resulting in smoother behavior (i.e. - * corresponding to a longer integration window). - * - * For computation, we actually don't use the above formula, but this - * one: - * - * err_avg_scaled = err_avg_old_scaled - err_avg_old + err - * - * where: - * err_avg_scaled = err * RC_PID_SMOOTHING - * err_avg_old_scaled = err_avg_old * RC_PID_SMOOTHING - * - * This avoids floating point numbers and the per_failed_old value can - * easily be obtained by shifting per_failed_old_scaled right by - * RC_PID_SMOOTHING_SHIFT. - */ - s32 err_avg_sc; - - /* Last framed failes percentage sample. */ - u32 last_pf; - - /* Sharpening needed. */ - u8 sharp_cnt; - -#ifdef CONFIG_MAC80211_DEBUGFS - /* Event buffer */ - struct rc_pid_event_buffer events; - - /* Events debugfs file entry */ - struct dentry *events_entry; -#endif -}; - -/* Algorithm parameters. We keep them on a per-algorithm approach, so they can - * be tuned individually for each interface. - */ -struct rc_pid_rateinfo { - - /* Map sorted rates to rates in ieee80211_hw_mode. */ - int index; - - /* Map rates in ieee80211_hw_mode to sorted rates. */ - int rev_index; - - /* Did we do any measurement on this rate? */ - bool valid; - - /* Comparison with the lowest rate. */ - int diff; -}; - -struct rc_pid_info { - - /* The failed frames percentage target. */ - unsigned int target; - - /* Rate at which failed frames percentage is sampled in 0.001s. */ - unsigned int sampling_period; - - /* P, I and D coefficients. */ - int coeff_p; - int coeff_i; - int coeff_d; - - /* Exponential averaging shift. */ - unsigned int smoothing_shift; - - /* Sharpening factor and duration. */ - unsigned int sharpen_factor; - unsigned int sharpen_duration; - - /* Normalization offset. */ - unsigned int norm_offset; - - /* Rates information. */ - struct rc_pid_rateinfo *rinfo; - - /* Index of the last used rate. */ - int oldrate; - -#ifdef CONFIG_MAC80211_DEBUGFS - /* Debugfs entries created for the parameters above. */ - struct rc_pid_debugfs_entries dentries; -#endif -}; - -#endif /* RC80211_PID_H */ diff --git a/openairITS/mac/DOT11/net/mac80211/rc80211_pid_algo.c b/openairITS/mac/DOT11/net/mac80211/rc80211_pid_algo.c deleted file mode 100644 index 502d3ecc4a..0000000000 --- a/openairITS/mac/DOT11/net/mac80211/rc80211_pid_algo.c +++ /dev/null @@ -1,477 +0,0 @@ -/* - * Copyright 2002-2005, Instant802 Networks, Inc. - * Copyright 2005, Devicescape Software, Inc. - * Copyright 2007, Mattias Nissler - * Copyright 2007-2008, Stefano Brivio - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - */ - -#include -#include -#include -#include -#include -#include -#include "rate.h" -#include "mesh.h" -#include "rc80211_pid.h" - - -/* This is an implementation of a TX rate control algorithm that uses a PID - * controller. Given a target failed frames rate, the controller decides about - * TX rate changes to meet the target failed frames rate. - * - * The controller basically computes the following: - * - * adj = CP * err + CI * err_avg + CD * (err - last_err) * (1 + sharpening) - * - * where - * adj adjustment value that is used to switch TX rate (see below) - * err current error: target vs. current failed frames percentage - * last_err last error - * err_avg average (i.e. poor man's integral) of recent errors - * sharpening non-zero when fast response is needed (i.e. right after - * association or no frames sent for a long time), heading - * to zero over time - * CP Proportional coefficient - * CI Integral coefficient - * CD Derivative coefficient - * - * CP, CI, CD are subject to careful tuning. - * - * The integral component uses a exponential moving average approach instead of - * an actual sliding window. The advantage is that we don't need to keep an - * array of the last N error values and computation is easier. - * - * Once we have the adj value, we map it to a rate by means of a learning - * algorithm. This algorithm keeps the state of the percentual failed frames - * difference between rates. The behaviour of the lowest available rate is kept - * as a reference value, and every time we switch between two rates, we compute - * the difference between the failed frames each rate exhibited. By doing so, - * we compare behaviours which different rates exhibited in adjacent timeslices, - * thus the comparison is minimally affected by external conditions. This - * difference gets propagated to the whole set of measurements, so that the - * reference is always the same. Periodically, we normalize this set so that - * recent events weigh the most. By comparing the adj value with this set, we - * avoid pejorative switches to lower rates and allow for switches to higher - * rates if they behaved well. - * - * Note that for the computations we use a fixed-point representation to avoid - * floating point arithmetic. Hence, all values are shifted left by - * RC_PID_ARITH_SHIFT. - */ - - -/* Adjust the rate while ensuring that we won't switch to a lower rate if it - * exhibited a worse failed frames behaviour and we'll choose the highest rate - * whose failed frames behaviour is not worse than the one of the original rate - * target. While at it, check that the new rate is valid. */ -static void rate_control_pid_adjust_rate(struct ieee80211_supported_band *sband, - struct ieee80211_sta *sta, - struct rc_pid_sta_info *spinfo, int adj, - struct rc_pid_rateinfo *rinfo) -{ - int cur_sorted, new_sorted, probe, tmp, n_bitrates, band; - int cur = spinfo->txrate_idx; - - band = sband->band; - n_bitrates = sband->n_bitrates; - - /* Map passed arguments to sorted values. */ - cur_sorted = rinfo[cur].rev_index; - new_sorted = cur_sorted + adj; - - /* Check limits. */ - if (new_sorted < 0) - new_sorted = rinfo[0].rev_index; - else if (new_sorted >= n_bitrates) - new_sorted = rinfo[n_bitrates - 1].rev_index; - - tmp = new_sorted; - - if (adj < 0) { - /* Ensure that the rate decrease isn't disadvantageous. */ - for (probe = cur_sorted; probe >= new_sorted; probe--) - if (rinfo[probe].diff <= rinfo[cur_sorted].diff && - rate_supported(sta, band, rinfo[probe].index)) - tmp = probe; - } else { - /* Look for rate increase with zero (or below) cost. */ - for (probe = new_sorted + 1; probe < n_bitrates; probe++) - if (rinfo[probe].diff <= rinfo[new_sorted].diff && - rate_supported(sta, band, rinfo[probe].index)) - tmp = probe; - } - - /* Fit the rate found to the nearest supported rate. */ - do { - if (rate_supported(sta, band, rinfo[tmp].index)) { - spinfo->txrate_idx = rinfo[tmp].index; - break; - } - if (adj < 0) - tmp--; - else - tmp++; - } while (tmp < n_bitrates && tmp >= 0); - -#ifdef CONFIG_MAC80211_DEBUGFS - rate_control_pid_event_rate_change(&spinfo->events, - spinfo->txrate_idx, - sband->bitrates[spinfo->txrate_idx].bitrate); -#endif -} - -/* Normalize the failed frames per-rate differences. */ -static void rate_control_pid_normalize(struct rc_pid_info *pinfo, int l) -{ - int i, norm_offset = pinfo->norm_offset; - struct rc_pid_rateinfo *r = pinfo->rinfo; - - if (r[0].diff > norm_offset) - r[0].diff -= norm_offset; - else if (r[0].diff < -norm_offset) - r[0].diff += norm_offset; - for (i = 0; i < l - 1; i++) - if (r[i + 1].diff > r[i].diff + norm_offset) - r[i + 1].diff -= norm_offset; - else if (r[i + 1].diff <= r[i].diff) - r[i + 1].diff += norm_offset; -} - -static void rate_control_pid_sample(struct rc_pid_info *pinfo, - struct ieee80211_supported_band *sband, - struct ieee80211_sta *sta, - struct rc_pid_sta_info *spinfo) -{ - struct rc_pid_rateinfo *rinfo = pinfo->rinfo; - u32 pf; - s32 err_avg; - u32 err_prop; - u32 err_int; - u32 err_der; - int adj, i, j, tmp; - unsigned long period; - - /* In case nothing happened during the previous control interval, turn - * the sharpening factor on. */ - period = msecs_to_jiffies(pinfo->sampling_period); - if (jiffies - spinfo->last_sample > 2 * period) - spinfo->sharp_cnt = pinfo->sharpen_duration; - - spinfo->last_sample = jiffies; - - /* This should never happen, but in case, we assume the old sample is - * still a good measurement and copy it. */ - if (unlikely(spinfo->tx_num_xmit == 0)) - pf = spinfo->last_pf; - else - pf = spinfo->tx_num_failed * 100 / spinfo->tx_num_xmit; - - spinfo->tx_num_xmit = 0; - spinfo->tx_num_failed = 0; - - /* If we just switched rate, update the rate behaviour info. */ - if (pinfo->oldrate != spinfo->txrate_idx) { - - i = rinfo[pinfo->oldrate].rev_index; - j = rinfo[spinfo->txrate_idx].rev_index; - - tmp = (pf - spinfo->last_pf); - tmp = RC_PID_DO_ARITH_RIGHT_SHIFT(tmp, RC_PID_ARITH_SHIFT); - - rinfo[j].diff = rinfo[i].diff + tmp; - pinfo->oldrate = spinfo->txrate_idx; - } - rate_control_pid_normalize(pinfo, sband->n_bitrates); - - /* Compute the proportional, integral and derivative errors. */ - err_prop = (pinfo->target - pf) << RC_PID_ARITH_SHIFT; - - err_avg = spinfo->err_avg_sc >> pinfo->smoothing_shift; - spinfo->err_avg_sc = spinfo->err_avg_sc - err_avg + err_prop; - err_int = spinfo->err_avg_sc >> pinfo->smoothing_shift; - - err_der = (pf - spinfo->last_pf) * - (1 + pinfo->sharpen_factor * spinfo->sharp_cnt); - spinfo->last_pf = pf; - if (spinfo->sharp_cnt) - spinfo->sharp_cnt--; - -#ifdef CONFIG_MAC80211_DEBUGFS - rate_control_pid_event_pf_sample(&spinfo->events, pf, err_prop, err_int, - err_der); -#endif - - /* Compute the controller output. */ - adj = (err_prop * pinfo->coeff_p + err_int * pinfo->coeff_i - + err_der * pinfo->coeff_d); - adj = RC_PID_DO_ARITH_RIGHT_SHIFT(adj, 2 * RC_PID_ARITH_SHIFT); - - /* Change rate. */ - if (adj) - rate_control_pid_adjust_rate(sband, sta, spinfo, adj, rinfo); -} - -static void rate_control_pid_tx_status(void *priv, struct ieee80211_supported_band *sband, - struct ieee80211_sta *sta, void *priv_sta, - struct sk_buff *skb) -{ - struct rc_pid_info *pinfo = priv; - struct rc_pid_sta_info *spinfo = priv_sta; - unsigned long period; - struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb); - - if (!spinfo) - return; - - /* Ignore all frames that were sent with a different rate than the rate - * we currently advise mac80211 to use. */ - if (info->status.rates[0].idx != spinfo->txrate_idx) - return; - - spinfo->tx_num_xmit++; - -#ifdef CONFIG_MAC80211_DEBUGFS - rate_control_pid_event_tx_status(&spinfo->events, info); -#endif - - /* We count frames that totally failed to be transmitted as two bad - * frames, those that made it out but had some retries as one good and - * one bad frame. */ - if (!(info->flags & IEEE80211_TX_STAT_ACK)) { - spinfo->tx_num_failed += 2; - spinfo->tx_num_xmit++; - } else if (info->status.rates[0].count > 1) { - spinfo->tx_num_failed++; - spinfo->tx_num_xmit++; - } - - /* Update PID controller state. */ - period = msecs_to_jiffies(pinfo->sampling_period); - if (time_after(jiffies, spinfo->last_sample + period)) - rate_control_pid_sample(pinfo, sband, sta, spinfo); -} - -static void -rate_control_pid_get_rate(void *priv, struct ieee80211_sta *sta, - void *priv_sta, - struct ieee80211_tx_rate_control *txrc) -{ - struct sk_buff *skb = txrc->skb; - struct ieee80211_supported_band *sband = txrc->sband; - struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb); - struct rc_pid_sta_info *spinfo = priv_sta; - int rateidx; - - if (txrc->rts) - info->control.rates[0].count = - txrc->hw->conf.long_frame_max_tx_count; - else - info->control.rates[0].count = - txrc->hw->conf.short_frame_max_tx_count; - - /* Send management frames and NO_ACK data using lowest rate. */ - if (rate_control_send_low(sta, priv_sta, txrc)) - return; - - rateidx = spinfo->txrate_idx; - - if (rateidx >= sband->n_bitrates) - rateidx = sband->n_bitrates - 1; - - info->control.rates[0].idx = rateidx; - -#ifdef CONFIG_MAC80211_DEBUGFS - rate_control_pid_event_tx_rate(&spinfo->events, - rateidx, sband->bitrates[rateidx].bitrate); -#endif -} - -static void -rate_control_pid_rate_init(void *priv, struct ieee80211_supported_band *sband, - struct ieee80211_sta *sta, void *priv_sta) -{ - struct rc_pid_sta_info *spinfo = priv_sta; - struct rc_pid_info *pinfo = priv; - struct rc_pid_rateinfo *rinfo = pinfo->rinfo; - int i, j, tmp; - bool s; - - /* TODO: This routine should consider using RSSI from previous packets - * as we need to have IEEE 802.1X auth succeed immediately after assoc.. - * Until that method is implemented, we will use the lowest supported - * rate as a workaround. */ - - /* Sort the rates. This is optimized for the most common case (i.e. - * almost-sorted CCK+OFDM rates). Kind of bubble-sort with reversed - * mapping too. */ - for (i = 0; i < sband->n_bitrates; i++) { - rinfo[i].index = i; - rinfo[i].rev_index = i; - if (RC_PID_FAST_START) - rinfo[i].diff = 0; - else - rinfo[i].diff = i * pinfo->norm_offset; - } - for (i = 1; i < sband->n_bitrates; i++) { - s = false; - for (j = 0; j < sband->n_bitrates - i; j++) - if (unlikely(sband->bitrates[rinfo[j].index].bitrate > - sband->bitrates[rinfo[j + 1].index].bitrate)) { - tmp = rinfo[j].index; - rinfo[j].index = rinfo[j + 1].index; - rinfo[j + 1].index = tmp; - rinfo[rinfo[j].index].rev_index = j; - rinfo[rinfo[j + 1].index].rev_index = j + 1; - s = true; - } - if (!s) - break; - } - - spinfo->txrate_idx = rate_lowest_index(sband, sta); -} - -static void *rate_control_pid_alloc(struct ieee80211_hw *hw, - struct dentry *debugfsdir) -{ - struct rc_pid_info *pinfo; - struct rc_pid_rateinfo *rinfo; - struct ieee80211_supported_band *sband; - int i, max_rates = 0; -#ifdef CONFIG_MAC80211_DEBUGFS - struct rc_pid_debugfs_entries *de; -#endif - - pinfo = kmalloc(sizeof(*pinfo), GFP_ATOMIC); - if (!pinfo) - return NULL; - - for (i = 0; i < IEEE80211_NUM_BANDS; i++) { - sband = hw->wiphy->bands[i]; - if (sband && sband->n_bitrates > max_rates) - max_rates = sband->n_bitrates; - } - - rinfo = kmalloc(sizeof(*rinfo) * max_rates, GFP_ATOMIC); - if (!rinfo) { - kfree(pinfo); - return NULL; - } - - pinfo->target = RC_PID_TARGET_PF; - pinfo->sampling_period = RC_PID_INTERVAL; - pinfo->coeff_p = RC_PID_COEFF_P; - pinfo->coeff_i = RC_PID_COEFF_I; - pinfo->coeff_d = RC_PID_COEFF_D; - pinfo->smoothing_shift = RC_PID_SMOOTHING_SHIFT; - pinfo->sharpen_factor = RC_PID_SHARPENING_FACTOR; - pinfo->sharpen_duration = RC_PID_SHARPENING_DURATION; - pinfo->norm_offset = RC_PID_NORM_OFFSET; - pinfo->rinfo = rinfo; - pinfo->oldrate = 0; - -#ifdef CONFIG_MAC80211_DEBUGFS - de = &pinfo->dentries; - de->target = debugfs_create_u32("target_pf", S_IRUSR | S_IWUSR, - debugfsdir, &pinfo->target); - de->sampling_period = debugfs_create_u32("sampling_period", - S_IRUSR | S_IWUSR, debugfsdir, - &pinfo->sampling_period); - de->coeff_p = debugfs_create_u32("coeff_p", S_IRUSR | S_IWUSR, - debugfsdir, (u32 *)&pinfo->coeff_p); - de->coeff_i = debugfs_create_u32("coeff_i", S_IRUSR | S_IWUSR, - debugfsdir, (u32 *)&pinfo->coeff_i); - de->coeff_d = debugfs_create_u32("coeff_d", S_IRUSR | S_IWUSR, - debugfsdir, (u32 *)&pinfo->coeff_d); - de->smoothing_shift = debugfs_create_u32("smoothing_shift", - S_IRUSR | S_IWUSR, debugfsdir, - &pinfo->smoothing_shift); - de->sharpen_factor = debugfs_create_u32("sharpen_factor", - S_IRUSR | S_IWUSR, debugfsdir, - &pinfo->sharpen_factor); - de->sharpen_duration = debugfs_create_u32("sharpen_duration", - S_IRUSR | S_IWUSR, debugfsdir, - &pinfo->sharpen_duration); - de->norm_offset = debugfs_create_u32("norm_offset", - S_IRUSR | S_IWUSR, debugfsdir, - &pinfo->norm_offset); -#endif - - return pinfo; -} - -static void rate_control_pid_free(void *priv) -{ - struct rc_pid_info *pinfo = priv; -#ifdef CONFIG_MAC80211_DEBUGFS - struct rc_pid_debugfs_entries *de = &pinfo->dentries; - - debugfs_remove(de->norm_offset); - debugfs_remove(de->sharpen_duration); - debugfs_remove(de->sharpen_factor); - debugfs_remove(de->smoothing_shift); - debugfs_remove(de->coeff_d); - debugfs_remove(de->coeff_i); - debugfs_remove(de->coeff_p); - debugfs_remove(de->sampling_period); - debugfs_remove(de->target); -#endif - - kfree(pinfo->rinfo); - kfree(pinfo); -} - -static void *rate_control_pid_alloc_sta(void *priv, struct ieee80211_sta *sta, - gfp_t gfp) -{ - struct rc_pid_sta_info *spinfo; - - spinfo = kzalloc(sizeof(*spinfo), gfp); - if (spinfo == NULL) - return NULL; - - spinfo->last_sample = jiffies; - -#ifdef CONFIG_MAC80211_DEBUGFS - spin_lock_init(&spinfo->events.lock); - init_waitqueue_head(&spinfo->events.waitqueue); -#endif - - return spinfo; -} - -static void rate_control_pid_free_sta(void *priv, struct ieee80211_sta *sta, - void *priv_sta) -{ - kfree(priv_sta); -} - -static struct rate_control_ops mac80211_rcpid = { - .name = "pid", - .tx_status = rate_control_pid_tx_status, - .get_rate = rate_control_pid_get_rate, - .rate_init = rate_control_pid_rate_init, - .alloc = rate_control_pid_alloc, - .free = rate_control_pid_free, - .alloc_sta = rate_control_pid_alloc_sta, - .free_sta = rate_control_pid_free_sta, -#ifdef CONFIG_MAC80211_DEBUGFS - .add_sta_debugfs = rate_control_pid_add_sta_debugfs, - .remove_sta_debugfs = rate_control_pid_remove_sta_debugfs, -#endif -}; - -int __init rc80211_pid_init(void) -{ - return ieee80211_rate_control_register(&mac80211_rcpid); -} - -void rc80211_pid_exit(void) -{ - ieee80211_rate_control_unregister(&mac80211_rcpid); -} diff --git a/openairITS/mac/DOT11/net/mac80211/rc80211_pid_debugfs.c b/openairITS/mac/DOT11/net/mac80211/rc80211_pid_debugfs.c deleted file mode 100644 index c97a0657c0..0000000000 --- a/openairITS/mac/DOT11/net/mac80211/rc80211_pid_debugfs.c +++ /dev/null @@ -1,228 +0,0 @@ -/* - * Copyright 2007, Mattias Nissler - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - */ - -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include "rate.h" - -#include "rc80211_pid.h" - -static void rate_control_pid_event(struct rc_pid_event_buffer *buf, - enum rc_pid_event_type type, - union rc_pid_event_data *data) -{ - struct rc_pid_event *ev; - unsigned long status; - - spin_lock_irqsave(&buf->lock, status); - ev = &(buf->ring[buf->next_entry]); - buf->next_entry = (buf->next_entry + 1) % RC_PID_EVENT_RING_SIZE; - - ev->timestamp = jiffies; - ev->id = buf->ev_count++; - ev->type = type; - ev->data = *data; - - spin_unlock_irqrestore(&buf->lock, status); - - wake_up_all(&buf->waitqueue); -} - -void rate_control_pid_event_tx_status(struct rc_pid_event_buffer *buf, - struct ieee80211_tx_info *stat) -{ - union rc_pid_event_data evd; - - evd.flags = stat->flags; - memcpy(&evd.tx_status, stat, sizeof(struct ieee80211_tx_info)); - rate_control_pid_event(buf, RC_PID_EVENT_TYPE_TX_STATUS, &evd); -} - -void rate_control_pid_event_rate_change(struct rc_pid_event_buffer *buf, - int index, int rate) -{ - union rc_pid_event_data evd; - - evd.index = index; - evd.rate = rate; - rate_control_pid_event(buf, RC_PID_EVENT_TYPE_RATE_CHANGE, &evd); -} - -void rate_control_pid_event_tx_rate(struct rc_pid_event_buffer *buf, - int index, int rate) -{ - union rc_pid_event_data evd; - - evd.index = index; - evd.rate = rate; - rate_control_pid_event(buf, RC_PID_EVENT_TYPE_TX_RATE, &evd); -} - -void rate_control_pid_event_pf_sample(struct rc_pid_event_buffer *buf, - s32 pf_sample, s32 prop_err, - s32 int_err, s32 der_err) -{ - union rc_pid_event_data evd; - - evd.pf_sample = pf_sample; - evd.prop_err = prop_err; - evd.int_err = int_err; - evd.der_err = der_err; - rate_control_pid_event(buf, RC_PID_EVENT_TYPE_PF_SAMPLE, &evd); -} - -static int rate_control_pid_events_open(struct inode *inode, struct file *file) -{ - struct rc_pid_sta_info *sinfo = inode->i_private; - struct rc_pid_event_buffer *events = &sinfo->events; - struct rc_pid_events_file_info *file_info; - unsigned long status; - - /* Allocate a state struct */ - file_info = kmalloc(sizeof(*file_info), GFP_KERNEL); - if (file_info == NULL) - return -ENOMEM; - - spin_lock_irqsave(&events->lock, status); - - file_info->next_entry = events->next_entry; - file_info->events = events; - - spin_unlock_irqrestore(&events->lock, status); - - file->private_data = file_info; - - return 0; -} - -static int rate_control_pid_events_release(struct inode *inode, - struct file *file) -{ - struct rc_pid_events_file_info *file_info = file->private_data; - - kfree(file_info); - - return 0; -} - -static unsigned int rate_control_pid_events_poll(struct file *file, - poll_table *wait) -{ - struct rc_pid_events_file_info *file_info = file->private_data; - - poll_wait(file, &file_info->events->waitqueue, wait); - - return POLLIN | POLLRDNORM; -} - -#define RC_PID_PRINT_BUF_SIZE 64 - -static ssize_t rate_control_pid_events_read(struct file *file, char __user *buf, - size_t length, loff_t *offset) -{ - struct rc_pid_events_file_info *file_info = file->private_data; - struct rc_pid_event_buffer *events = file_info->events; - struct rc_pid_event *ev; - char pb[RC_PID_PRINT_BUF_SIZE]; - int ret; - int p; - unsigned long status; - - /* Check if there is something to read. */ - if (events->next_entry == file_info->next_entry) { - if (file->f_flags & O_NONBLOCK) - return -EAGAIN; - - /* Wait */ - ret = wait_event_interruptible(events->waitqueue, - events->next_entry != file_info->next_entry); - - if (ret) - return ret; - } - - /* Write out one event per call. I don't care whether it's a little - * inefficient, this is debugging code anyway. */ - spin_lock_irqsave(&events->lock, status); - - /* Get an event */ - ev = &(events->ring[file_info->next_entry]); - file_info->next_entry = (file_info->next_entry + 1) % - RC_PID_EVENT_RING_SIZE; - - /* Print information about the event. Note that userspace needs to - * provide large enough buffers. */ - length = length < RC_PID_PRINT_BUF_SIZE ? - length : RC_PID_PRINT_BUF_SIZE; - p = snprintf(pb, length, "%u %lu ", ev->id, ev->timestamp); - switch (ev->type) { - case RC_PID_EVENT_TYPE_TX_STATUS: - p += snprintf(pb + p, length - p, "tx_status %u %u", - !(ev->data.flags & IEEE80211_TX_STAT_ACK), - ev->data.tx_status.status.rates[0].idx); - break; - case RC_PID_EVENT_TYPE_RATE_CHANGE: - p += snprintf(pb + p, length - p, "rate_change %d %d", - ev->data.index, ev->data.rate); - break; - case RC_PID_EVENT_TYPE_TX_RATE: - p += snprintf(pb + p, length - p, "tx_rate %d %d", - ev->data.index, ev->data.rate); - break; - case RC_PID_EVENT_TYPE_PF_SAMPLE: - p += snprintf(pb + p, length - p, - "pf_sample %d %d %d %d", - ev->data.pf_sample, ev->data.prop_err, - ev->data.int_err, ev->data.der_err); - break; - } - p += snprintf(pb + p, length - p, "\n"); - - spin_unlock_irqrestore(&events->lock, status); - - if (copy_to_user(buf, pb, p)) - return -EFAULT; - - return p; -} - -#undef RC_PID_PRINT_BUF_SIZE - -static const struct file_operations rc_pid_fop_events = { - .owner = THIS_MODULE, - .read = rate_control_pid_events_read, - .poll = rate_control_pid_events_poll, - .open = rate_control_pid_events_open, - .release = rate_control_pid_events_release, - .llseek = noop_llseek, -}; - -void rate_control_pid_add_sta_debugfs(void *priv, void *priv_sta, - struct dentry *dir) -{ - struct rc_pid_sta_info *spinfo = priv_sta; - - spinfo->events_entry = debugfs_create_file("rc_pid_events", S_IRUGO, - dir, spinfo, - &rc_pid_fop_events); -} - -void rate_control_pid_remove_sta_debugfs(void *priv, void *priv_sta) -{ - struct rc_pid_sta_info *spinfo = priv_sta; - - debugfs_remove(spinfo->events_entry); -} diff --git a/openairITS/mac/DOT11/net/mac80211/rx.c b/openairITS/mac/DOT11/net/mac80211/rx.c deleted file mode 100644 index 6d5c3d5c20..0000000000 --- a/openairITS/mac/DOT11/net/mac80211/rx.c +++ /dev/null @@ -1,3320 +0,0 @@ -/* - * Copyright 2002-2005, Instant802 Networks, Inc. - * Copyright 2005-2006, Devicescape Software, Inc. - * Copyright 2006-2007 Jiri Benc - * Copyright 2007-2010 Johannes Berg - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "ieee80211_i.h" -#include "driver-ops.h" -#include "led.h" -#include "mesh.h" -#include "wep.h" -#include "wpa.h" -#include "tkip.h" -#include "wme.h" -#include "rate.h" - -/* - * monitor mode reception - * - * This function cleans up the SKB, i.e. it removes all the stuff - * only useful for monitoring. - */ -static struct sk_buff *remove_monitor_info(struct ieee80211_local *local, - struct sk_buff *skb) -{ - if (local->hw.flags & IEEE80211_HW_RX_INCLUDES_FCS) { - if (likely(skb->len > FCS_LEN)) - __pskb_trim(skb, skb->len - FCS_LEN); - else { - /* driver bug */ - WARN_ON(1); - dev_kfree_skb(skb); - skb = NULL; - } - } - - return skb; -} - -static inline int should_drop_frame(struct sk_buff *skb, - int present_fcs_len) -{ - struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb); - struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data; - - if (status->flag & (RX_FLAG_FAILED_FCS_CRC | RX_FLAG_FAILED_PLCP_CRC)) - return 1; - if (unlikely(skb->len < 16 + present_fcs_len)) - return 1; - if (ieee80211_is_ctl(hdr->frame_control) && - !ieee80211_is_pspoll(hdr->frame_control) && - !ieee80211_is_back_req(hdr->frame_control)) - return 1; - return 0; -} - -static int -ieee80211_rx_radiotap_len(struct ieee80211_local *local, - struct ieee80211_rx_status *status) -{ - int len; - - /* always present fields */ - len = sizeof(struct ieee80211_radiotap_header) + 9; - - if (status->flag & RX_FLAG_MACTIME_MPDU) - len += 8; - if (local->hw.flags & IEEE80211_HW_SIGNAL_DBM) - len += 1; - - if (len & 1) /* padding for RX_FLAGS if necessary */ - len++; - - if (status->flag & RX_FLAG_HT) /* HT info */ - len += 3; - - return len; -} - -/* - * ieee80211_add_rx_radiotap_header - add radiotap header - * - * add a radiotap header containing all the fields which the hardware provided. - * - * [PLATA] - check the harmonization with the PHY header from the driver... - */ -static void -ieee80211_add_rx_radiotap_header(struct ieee80211_local *local, - struct sk_buff *skb, - struct ieee80211_rate *rate, - int rtap_len) -{ - struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb); - struct ieee80211_radiotap_header *rthdr; - unsigned char *pos; - u16 rx_flags = 0; - - rthdr = (struct ieee80211_radiotap_header *)skb_push(skb, rtap_len); - memset(rthdr, 0, rtap_len); - - /* radiotap header, set always present flags */ - rthdr->it_present = - cpu_to_le32((1 << IEEE80211_RADIOTAP_FLAGS) | - (1 << IEEE80211_RADIOTAP_CHANNEL) | - (1 << IEEE80211_RADIOTAP_ANTENNA) | - (1 << IEEE80211_RADIOTAP_RX_FLAGS)); - rthdr->it_len = cpu_to_le16(rtap_len); - - pos = (unsigned char *)(rthdr+1); - - /* the order of the following fields is important */ - - /* IEEE80211_RADIOTAP_TSFT */ - if (status->flag & RX_FLAG_MACTIME_MPDU) { - put_unaligned_le64(status->mactime, pos); - rthdr->it_present |= - cpu_to_le32(1 << IEEE80211_RADIOTAP_TSFT); - pos += 8; - } - - /* IEEE80211_RADIOTAP_FLAGS */ - if (local->hw.flags & IEEE80211_HW_RX_INCLUDES_FCS) - *pos |= IEEE80211_RADIOTAP_F_FCS; - if (status->flag & (RX_FLAG_FAILED_FCS_CRC | RX_FLAG_FAILED_PLCP_CRC)) - *pos |= IEEE80211_RADIOTAP_F_BADFCS; - if (status->flag & RX_FLAG_SHORTPRE) - *pos |= IEEE80211_RADIOTAP_F_SHORTPRE; - pos++; - - /* IEEE80211_RADIOTAP_RATE */ - if (!rate || status->flag & RX_FLAG_HT) { - /* - * Without rate information don't add it. If we have, - * MCS information is a separate field in radiotap, - * added below. The byte here is needed as padding - * for the channel though, so initialise it to 0. - */ - *pos = 0; - } else { - rthdr->it_present |= cpu_to_le32(1 << IEEE80211_RADIOTAP_RATE); - *pos = rate->bitrate / 5; - } - pos++; - - /* IEEE80211_RADIOTAP_CHANNEL */ - put_unaligned_le16(status->freq, pos); - pos += 2; - if (status->band == IEEE80211_BAND_5GHZ) - put_unaligned_le16(IEEE80211_CHAN_OFDM | IEEE80211_CHAN_5GHZ, - pos); - else if (status->band == IEEE80211_BAND_5_9GHZ) // [PLATA] - the PHY header mentions OFDM for the 802.11p PHY mode - put_unaligned_le16(IEEE80211_CHAN_OFDM | IEEE80211_CHAN_5_9GHZ, - pos); - else if (status->band == IEEE80211_BAND_0_8GHZ) // [PLATA] - the PHY header mentions OFDM for the 802.11p PHY mode - put_unaligned_le16(IEEE80211_CHAN_OFDM | IEEE80211_CHAN_0_8GHZ, - pos); - else if (status->flag & RX_FLAG_HT) - put_unaligned_le16(IEEE80211_CHAN_DYN | IEEE80211_CHAN_2GHZ, - pos); - else if (rate && rate->flags & IEEE80211_RATE_ERP_G) - put_unaligned_le16(IEEE80211_CHAN_OFDM | IEEE80211_CHAN_2GHZ, - pos); - else if (rate) - put_unaligned_le16(IEEE80211_CHAN_CCK | IEEE80211_CHAN_2GHZ, - pos); - else - put_unaligned_le16(IEEE80211_CHAN_2GHZ, pos); - pos += 2; - - /* IEEE80211_RADIOTAP_DBM_ANTSIGNAL */ - if (local->hw.flags & IEEE80211_HW_SIGNAL_DBM && - !(status->flag & RX_FLAG_NO_SIGNAL_VAL)) { - *pos = status->signal; - rthdr->it_present |= - cpu_to_le32(1 << IEEE80211_RADIOTAP_DBM_ANTSIGNAL); - pos++; - } - - /* IEEE80211_RADIOTAP_LOCK_QUALITY is missing */ - - /* IEEE80211_RADIOTAP_ANTENNA */ - *pos = status->antenna; - pos++; - - /* IEEE80211_RADIOTAP_DB_ANTNOISE is not used */ - - /* IEEE80211_RADIOTAP_RX_FLAGS */ - /* ensure 2 byte alignment for the 2 byte field as required */ - if ((pos - (u8 *)rthdr) & 1) - pos++; - if (status->flag & RX_FLAG_FAILED_PLCP_CRC) - rx_flags |= IEEE80211_RADIOTAP_F_RX_BADPLCP; - put_unaligned_le16(rx_flags, pos); - pos += 2; - - if (status->flag & RX_FLAG_HT) { - rthdr->it_present |= cpu_to_le32(1 << IEEE80211_RADIOTAP_MCS); - *pos++ = IEEE80211_RADIOTAP_MCS_HAVE_MCS | - IEEE80211_RADIOTAP_MCS_HAVE_GI | - IEEE80211_RADIOTAP_MCS_HAVE_BW; - *pos = 0; - if (status->flag & RX_FLAG_SHORT_GI) - *pos |= IEEE80211_RADIOTAP_MCS_SGI; - if (status->flag & RX_FLAG_40MHZ) - *pos |= IEEE80211_RADIOTAP_MCS_BW_40; - pos++; - *pos++ = status->rate_idx; - } -} - -/* - * This function copies a received frame to all monitor interfaces and - * returns a cleaned-up SKB that no longer includes the FCS nor the - * radiotap header the driver might have added. - */ -static struct sk_buff * -ieee80211_rx_monitor(struct ieee80211_local *local, struct sk_buff *origskb, - struct ieee80211_rate *rate) -{ - struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(origskb); - struct ieee80211_sub_if_data *sdata; - int needed_headroom; - struct sk_buff *skb, *skb2; - struct net_device *prev_dev = NULL; - int present_fcs_len = 0; - -#ifdef CONFIG_MAC80211_VERBOSE_DEBUG - printk(KERN_DEBUG "-- ieee80211_rx_monitor \n"); -#endif - - /* - * First, we may need to make a copy of the skb because - * (1) we need to modify it for radiotap (if not present), and - * (2) the other RX handlers will modify the skb we got. - * - * We don't need to, of course, if we aren't going to return - * the SKB because it has a bad FCS/PLCP checksum. - */ - - /* room for the radiotap header based on driver features */ - needed_headroom = ieee80211_rx_radiotap_len(local, status); - - if (local->hw.flags & IEEE80211_HW_RX_INCLUDES_FCS) - present_fcs_len = FCS_LEN; - - /* make sure hdr->frame_control is on the linear part */ - if (!pskb_may_pull(origskb, 2)) { - dev_kfree_skb(origskb); - return NULL; - } - - /* - * [PLATA] - When OCBMode is activated, we do not monitor, so we should not enter here...(the SKB should NOT have monitoring info) - */ - if ((!local->monitors) || ((local->hw.wiphy->dot11OCBActivated == 1) && (local->hw.flags & IEEE80211_HW_DOT11OCB_SUPPORTED))) { - if (should_drop_frame(origskb, present_fcs_len)) { - dev_kfree_skb(origskb); - return NULL; - } - -#ifdef CONFIG_MAC80211_VERBOSE_DEBUG - printk(KERN_DEBUG "-- -- OCBActivated and Monitoring mode not supported - exiting here \n"); -#endif - return remove_monitor_info(local, origskb); - } - - if (should_drop_frame(origskb, present_fcs_len)) { - /* only need to expand headroom if necessary */ - skb = origskb; - origskb = NULL; - - /* - * This shouldn't trigger often because most devices have an - * RX header they pull before we get here, and that should - * be big enough for our radiotap information. We should - * probably export the length to drivers so that we can have - * them allocate enough headroom to start with. - */ - if (skb_headroom(skb) < needed_headroom && - pskb_expand_head(skb, needed_headroom, 0, GFP_ATOMIC)) { - dev_kfree_skb(skb); - return NULL; - } - } else { - /* - * Need to make a copy and possibly remove radiotap header - * and FCS from the original. - */ - skb = skb_copy_expand(origskb, needed_headroom, 0, GFP_ATOMIC); - - origskb = remove_monitor_info(local, origskb); - - if (!skb) - return origskb; - } - - /* prepend radiotap information */ - /* - * [PLATA] method is entered and used to build the PHY header - need to harmonize with the driver - */ - ieee80211_add_rx_radiotap_header(local, skb, rate, needed_headroom); - - skb_reset_mac_header(skb); - skb->ip_summed = CHECKSUM_UNNECESSARY; - skb->pkt_type = PACKET_OTHERHOST; - skb->protocol = htons(ETH_P_802_2); - - /* - * [PLATA] - check what it does... - */ - list_for_each_entry_rcu(sdata, &local->interfaces, list) { - if (sdata->vif.type != NL80211_IFTYPE_MONITOR) - continue; - - if (sdata->u.mntr_flags & MONITOR_FLAG_COOK_FRAMES) - continue; - - if (!ieee80211_sdata_running(sdata)) - continue; - - if (prev_dev) { - skb2 = skb_clone(skb, GFP_ATOMIC); - if (skb2) { - skb2->dev = prev_dev; - netif_receive_skb(skb2); - } - } - - prev_dev = sdata->dev; - sdata->dev->stats.rx_packets++; - sdata->dev->stats.rx_bytes += skb->len; - } - - if (prev_dev) { - skb->dev = prev_dev; - netif_receive_skb(skb); - } else - dev_kfree_skb(skb); - - return origskb; -} - - -static void ieee80211_parse_qos(struct ieee80211_rx_data *rx) -{ - struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)rx->skb->data; - struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(rx->skb); - int tid, seqno_idx, security_idx; - - /* does the frame have a qos control field? */ - if (ieee80211_is_data_qos(hdr->frame_control)) { - u8 *qc = ieee80211_get_qos_ctl(hdr); - /* frame has qos control */ - tid = *qc & IEEE80211_QOS_CTL_TID_MASK; - if (*qc & IEEE80211_QOS_CTL_A_MSDU_PRESENT) - status->rx_flags |= IEEE80211_RX_AMSDU; - - seqno_idx = tid; - security_idx = tid; - } else { - /* - * IEEE 802.11-2007, 7.1.3.4.1 ("Sequence Number field"): - * - * Sequence numbers for management frames, QoS data - * frames with a broadcast/multicast address in the - * Address 1 field, and all non-QoS data frames sent - * by QoS STAs are assigned using an additional single - * modulo-4096 counter, [...] - * - * We also use that counter for non-QoS STAs. - */ - /* - * [PLATA] - NUM_RX_DATA_QUEUES is 1 for this version of PLATA. Must be harmonized with the driver. - */ - seqno_idx = NUM_RX_DATA_QUEUES; - security_idx = 0; - if (ieee80211_is_mgmt(hdr->frame_control)) - security_idx = NUM_RX_DATA_QUEUES; - tid = 0; - } - - rx->seqno_idx = seqno_idx; - rx->security_idx = security_idx; - /* Set skb->priority to 1d tag if highest order bit of TID is not set. - * For now, set skb->priority to 0 for other cases. */ - rx->skb->priority = (tid > 7) ? 0 : tid; -} - -/** - * DOC: Packet alignment - * - * Drivers always need to pass packets that are aligned to two-byte boundaries - * to the stack. - * - * Additionally, should, if possible, align the payload data in a way that - * guarantees that the contained IP header is aligned to a four-byte - * boundary. In the case of regular frames, this simply means aligning the - * payload to a four-byte boundary (because either the IP header is directly - * contained, or IV/RFC1042 headers that have a length divisible by four are - * in front of it). If the payload data is not properly aligned and the - * architecture doesn't support efficient unaligned operations, mac80211 - * will align the data. - * - * With A-MSDU frames, however, the payload data address must yield two modulo - * four because there are 14-byte 802.3 headers within the A-MSDU frames that - * push the IP header further back to a multiple of four again. Thankfully, the - * specs were sane enough this time around to require padding each A-MSDU - * subframe to a length that is a multiple of four. - * - * Padding like Atheros hardware adds which is between the 802.11 header and - * the payload is not supported, the driver is required to move the 802.11 - * header to be directly in front of the payload in that case. - */ -static void ieee80211_verify_alignment(struct ieee80211_rx_data *rx) -{ -#ifdef CONFIG_MAC80211_VERBOSE_DEBUG - WARN_ONCE((unsigned long)rx->skb->data & 1, - "unaligned packet at 0x%p\n", rx->skb->data); -#endif -} - - -/* rx handlers */ - -static ieee80211_rx_result debug_noinline -ieee80211_rx_h_passive_scan(struct ieee80211_rx_data *rx) -{ - struct ieee80211_local *local = rx->local; - struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(rx->skb); - struct sk_buff *skb = rx->skb; - -#ifdef CONFIG_MAC80211_VERBOSE_DEBUG - printk(KERN_DEBUG "-- -- -- ieee80211_rx_h_passive_scan \n"); -#endif - /* - * [PLATA] - we exit immediately if OCB is activated - */ - if ((likely(!(status->rx_flags & IEEE80211_RX_IN_SCAN) && - !local->sched_scanning)) || ((rx->local->hw.wiphy->dot11OCBActivated == 1) && (rx->local->hw.flags & IEEE80211_HW_DOT11OCB_SUPPORTED))) { -#ifdef CONFIG_MAC80211_VERBOSE_DEBUG - printk(KERN_DEBUG "-- -- -- ieee80211_rx_h_passive_scan OCB Activated...exiting immediately\n"); -#endif - return RX_CONTINUE; - } - - if (test_bit(SCAN_HW_SCANNING, &local->scanning) || - test_bit(SCAN_SW_SCANNING, &local->scanning) || - local->sched_scanning) - return ieee80211_scan_rx(rx->sdata, skb); - - /* scanning finished during invoking of handlers */ - I802_DEBUG_INC(local->rx_handlers_drop_passive_scan); - return RX_DROP_UNUSABLE; -} - - -static int ieee80211_is_unicast_robust_mgmt_frame(struct sk_buff *skb) -{ - struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) skb->data; - - if (skb->len < 24 || is_multicast_ether_addr(hdr->addr1)) - return 0; - - return ieee80211_is_robust_mgmt_frame(hdr); -} - - -static int ieee80211_is_multicast_robust_mgmt_frame(struct sk_buff *skb) -{ - struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) skb->data; - - if (skb->len < 24 || !is_multicast_ether_addr(hdr->addr1)) - return 0; - - return ieee80211_is_robust_mgmt_frame(hdr); -} - - -/* Get the BIP key index from MMIE; return -1 if this is not a BIP frame */ -static int ieee80211_get_mmie_keyidx(struct sk_buff *skb) -{ - struct ieee80211_mgmt *hdr = (struct ieee80211_mgmt *) skb->data; - struct ieee80211_mmie *mmie; - - if (skb->len < 24 + sizeof(*mmie) || - !is_multicast_ether_addr(hdr->da)) - return -1; - - if (!ieee80211_is_robust_mgmt_frame((struct ieee80211_hdr *) hdr)) - return -1; /* not a robust management frame */ - - mmie = (struct ieee80211_mmie *) - (skb->data + skb->len - sizeof(*mmie)); - if (mmie->element_id != WLAN_EID_MMIE || - mmie->length != sizeof(*mmie) - 2) - return -1; - - return le16_to_cpu(mmie->key_id); -} - - -static ieee80211_rx_result -ieee80211_rx_mesh_check(struct ieee80211_rx_data *rx) -{ - struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)rx->skb->data; - char *dev_addr = rx->sdata->vif.addr; - - if (ieee80211_is_data(hdr->frame_control)) { - if (is_multicast_ether_addr(hdr->addr1)) { - if (ieee80211_has_tods(hdr->frame_control) || - !ieee80211_has_fromds(hdr->frame_control)) - return RX_DROP_MONITOR; - if (compare_ether_addr(hdr->addr3, dev_addr) == 0) - return RX_DROP_MONITOR; - } else { - if (!ieee80211_has_a4(hdr->frame_control)) - return RX_DROP_MONITOR; - if (compare_ether_addr(hdr->addr4, dev_addr) == 0) - return RX_DROP_MONITOR; - } - } - - /* If there is not an established peer link and this is not a peer link - * establisment frame, beacon or probe, drop the frame. - */ - - if (!rx->sta || sta_plink_state(rx->sta) != NL80211_PLINK_ESTAB) { - struct ieee80211_mgmt *mgmt; - - if (!ieee80211_is_mgmt(hdr->frame_control)) - return RX_DROP_MONITOR; - - if (ieee80211_is_action(hdr->frame_control)) { - u8 category; - mgmt = (struct ieee80211_mgmt *)hdr; - category = mgmt->u.action.category; - if (category != WLAN_CATEGORY_MESH_ACTION && - category != WLAN_CATEGORY_SELF_PROTECTED) - return RX_DROP_MONITOR; - return RX_CONTINUE; - } - - if (ieee80211_is_probe_req(hdr->frame_control) || - ieee80211_is_probe_resp(hdr->frame_control) || - ieee80211_is_beacon(hdr->frame_control) || - ieee80211_is_auth(hdr->frame_control)) - return RX_CONTINUE; - - return RX_DROP_MONITOR; - - } - - return RX_CONTINUE; -} - -#define SEQ_MODULO 0x1000 -#define SEQ_MASK 0xfff - -static inline int seq_less(u16 sq1, u16 sq2) -{ - return ((sq1 - sq2) & SEQ_MASK) > (SEQ_MODULO >> 1); -} - -static inline u16 seq_inc(u16 sq) -{ - return (sq + 1) & SEQ_MASK; -} - -static inline u16 seq_sub(u16 sq1, u16 sq2) -{ - return (sq1 - sq2) & SEQ_MASK; -} - - -static void ieee80211_release_reorder_frame(struct ieee80211_hw *hw, - struct tid_ampdu_rx *tid_agg_rx, - int index) -{ - struct ieee80211_local *local = hw_to_local(hw); - struct sk_buff *skb = tid_agg_rx->reorder_buf[index]; - struct ieee80211_rx_status *status; - - lockdep_assert_held(&tid_agg_rx->reorder_lock); - - if (!skb) - goto no_frame; - - /* release the frame from the reorder ring buffer */ - tid_agg_rx->stored_mpdu_num--; - tid_agg_rx->reorder_buf[index] = NULL; - status = IEEE80211_SKB_RXCB(skb); - status->rx_flags |= IEEE80211_RX_DEFERRED_RELEASE; - skb_queue_tail(&local->rx_skb_queue, skb); - -no_frame: - tid_agg_rx->head_seq_num = seq_inc(tid_agg_rx->head_seq_num); -} - -static void ieee80211_release_reorder_frames(struct ieee80211_hw *hw, - struct tid_ampdu_rx *tid_agg_rx, - u16 head_seq_num) -{ - int index; - - lockdep_assert_held(&tid_agg_rx->reorder_lock); - - while (seq_less(tid_agg_rx->head_seq_num, head_seq_num)) { - index = seq_sub(tid_agg_rx->head_seq_num, tid_agg_rx->ssn) % - tid_agg_rx->buf_size; - ieee80211_release_reorder_frame(hw, tid_agg_rx, index); - } -} - -/* - * Timeout (in jiffies) for skb's that are waiting in the RX reorder buffer. If - * the skb was added to the buffer longer than this time ago, the earlier - * frames that have not yet been received are assumed to be lost and the skb - * can be released for processing. This may also release other skb's from the - * reorder buffer if there are no additional gaps between the frames. - * - * Callers must hold tid_agg_rx->reorder_lock. - */ -#define HT_RX_REORDER_BUF_TIMEOUT (HZ / 10) - -static void ieee80211_sta_reorder_release(struct ieee80211_hw *hw, - struct tid_ampdu_rx *tid_agg_rx) -{ - int index, j; - - lockdep_assert_held(&tid_agg_rx->reorder_lock); - - /* release the buffer until next missing frame */ - index = seq_sub(tid_agg_rx->head_seq_num, tid_agg_rx->ssn) % - tid_agg_rx->buf_size; - if (!tid_agg_rx->reorder_buf[index] && - tid_agg_rx->stored_mpdu_num) { - /* - * No buffers ready to be released, but check whether any - * frames in the reorder buffer have timed out. - */ - int skipped = 1; - for (j = (index + 1) % tid_agg_rx->buf_size; j != index; - j = (j + 1) % tid_agg_rx->buf_size) { - if (!tid_agg_rx->reorder_buf[j]) { - skipped++; - continue; - } - if (skipped && - !time_after(jiffies, tid_agg_rx->reorder_time[j] + - HT_RX_REORDER_BUF_TIMEOUT)) - goto set_release_timer; - -#ifdef CONFIG_MAC80211_HT_DEBUG - if (net_ratelimit()) - wiphy_debug(hw->wiphy, - "release an RX reorder frame due to timeout on earlier frames\n"); -#endif - ieee80211_release_reorder_frame(hw, tid_agg_rx, j); - - /* - * Increment the head seq# also for the skipped slots. - */ - tid_agg_rx->head_seq_num = - (tid_agg_rx->head_seq_num + skipped) & SEQ_MASK; - skipped = 0; - } - } else while (tid_agg_rx->reorder_buf[index]) { - ieee80211_release_reorder_frame(hw, tid_agg_rx, index); - index = seq_sub(tid_agg_rx->head_seq_num, tid_agg_rx->ssn) % - tid_agg_rx->buf_size; - } - - if (tid_agg_rx->stored_mpdu_num) { - j = index = seq_sub(tid_agg_rx->head_seq_num, - tid_agg_rx->ssn) % tid_agg_rx->buf_size; - - for (; j != (index - 1) % tid_agg_rx->buf_size; - j = (j + 1) % tid_agg_rx->buf_size) { - if (tid_agg_rx->reorder_buf[j]) - break; - } - - set_release_timer: - - mod_timer(&tid_agg_rx->reorder_timer, - tid_agg_rx->reorder_time[j] + 1 + - HT_RX_REORDER_BUF_TIMEOUT); - } else { - del_timer(&tid_agg_rx->reorder_timer); - } -} - -/* - * As this function belongs to the RX path it must be under - * rcu_read_lock protection. It returns false if the frame - * can be processed immediately, true if it was consumed. - */ -static bool ieee80211_sta_manage_reorder_buf(struct ieee80211_hw *hw, - struct tid_ampdu_rx *tid_agg_rx, - struct sk_buff *skb) -{ - struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) skb->data; - u16 sc = le16_to_cpu(hdr->seq_ctrl); - u16 mpdu_seq_num = (sc & IEEE80211_SCTL_SEQ) >> 4; - u16 head_seq_num, buf_size; - int index; - bool ret = true; - - spin_lock(&tid_agg_rx->reorder_lock); - - buf_size = tid_agg_rx->buf_size; - head_seq_num = tid_agg_rx->head_seq_num; - - /* frame with out of date sequence number */ - if (seq_less(mpdu_seq_num, head_seq_num)) { - dev_kfree_skb(skb); - goto out; - } - - /* - * If frame the sequence number exceeds our buffering window - * size release some previous frames to make room for this one. - */ - if (!seq_less(mpdu_seq_num, head_seq_num + buf_size)) { - head_seq_num = seq_inc(seq_sub(mpdu_seq_num, buf_size)); - /* release stored frames up to new head to stack */ - ieee80211_release_reorder_frames(hw, tid_agg_rx, head_seq_num); - } - - /* Now the new frame is always in the range of the reordering buffer */ - - index = seq_sub(mpdu_seq_num, tid_agg_rx->ssn) % tid_agg_rx->buf_size; - - /* check if we already stored this frame */ - if (tid_agg_rx->reorder_buf[index]) { - dev_kfree_skb(skb); - goto out; - } - - /* - * If the current MPDU is in the right order and nothing else - * is stored we can process it directly, no need to buffer it. - * If it is first but there's something stored, we may be able - * to release frames after this one. - */ - if (mpdu_seq_num == tid_agg_rx->head_seq_num && - tid_agg_rx->stored_mpdu_num == 0) { - tid_agg_rx->head_seq_num = seq_inc(tid_agg_rx->head_seq_num); - ret = false; - goto out; - } - - /* put the frame in the reordering buffer */ - tid_agg_rx->reorder_buf[index] = skb; - tid_agg_rx->reorder_time[index] = jiffies; - tid_agg_rx->stored_mpdu_num++; - ieee80211_sta_reorder_release(hw, tid_agg_rx); - - out: - spin_unlock(&tid_agg_rx->reorder_lock); - return ret; -} - -/* - * Reorder MPDUs from A-MPDUs, keeping them on a buffer. Returns - * true if the MPDU was buffered, false if it should be processed. - */ -static void ieee80211_rx_reorder_ampdu(struct ieee80211_rx_data *rx) -{ - struct sk_buff *skb = rx->skb; - struct ieee80211_local *local = rx->local; - struct ieee80211_hw *hw = &local->hw; - struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) skb->data; - struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb); - struct sta_info *sta = rx->sta; - struct tid_ampdu_rx *tid_agg_rx; - u16 sc; - u8 tid, ack_policy; - - if (!ieee80211_is_data_qos(hdr->frame_control)) { -#ifdef CONFIG_MAC80211_VERBOSE_DEBUG - printk(KERN_DEBUG "-- -- -- ieee80211_rx_reorder_ampdu - OCBActivated -- exit immediately\n"); -#endif - goto dont_reorder; - } - /* - * filter the QoS data rx stream according to - * STA/TID and check if this STA/TID is on aggregation - */ - - if (!sta) - goto dont_reorder; - - ack_policy = *ieee80211_get_qos_ctl(hdr) & - IEEE80211_QOS_CTL_ACK_POLICY_MASK; - tid = *ieee80211_get_qos_ctl(hdr) & IEEE80211_QOS_CTL_TID_MASK; - - tid_agg_rx = rcu_dereference(sta->ampdu_mlme.tid_rx[tid]); - if (!tid_agg_rx) - goto dont_reorder; - - /* qos null data frames are excluded */ - if (unlikely(hdr->frame_control & cpu_to_le16(IEEE80211_STYPE_NULLFUNC))) - goto dont_reorder; - - /* not part of a BA session */ - if (ack_policy != IEEE80211_QOS_CTL_ACK_POLICY_BLOCKACK && - ack_policy != IEEE80211_QOS_CTL_ACK_POLICY_NORMAL) - goto dont_reorder; - - /* not actually part of this BA session */ - if (!(status->rx_flags & IEEE80211_RX_RA_MATCH)) - goto dont_reorder; - - /* new, potentially un-ordered, ampdu frame - process it */ - - /* reset session timer */ - if (tid_agg_rx->timeout) - mod_timer(&tid_agg_rx->session_timer, - TU_TO_EXP_TIME(tid_agg_rx->timeout)); - - /* if this mpdu is fragmented - terminate rx aggregation session */ - sc = le16_to_cpu(hdr->seq_ctrl); - if (sc & IEEE80211_SCTL_FRAG) { - skb->pkt_type = IEEE80211_SDATA_QUEUE_TYPE_FRAME; - skb_queue_tail(&rx->sdata->skb_queue, skb); - ieee80211_queue_work(&local->hw, &rx->sdata->work); - return; - } - - /* - * No locking needed -- we will only ever process one - * RX packet at a time, and thus own tid_agg_rx. All - * other code manipulating it needs to (and does) make - * sure that we cannot get to it any more before doing - * anything with it. - */ - if (ieee80211_sta_manage_reorder_buf(hw, tid_agg_rx, skb)) - return; - - dont_reorder: - skb_queue_tail(&local->rx_skb_queue, skb); -} - -static ieee80211_rx_result debug_noinline -ieee80211_rx_h_check(struct ieee80211_rx_data *rx) -{ - struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)rx->skb->data; - struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(rx->skb); - -#ifdef CONFIG_MAC80211_VERBOSE_DEBUG - printk(KERN_DEBUG "-- -- -- ieee80211_rx_h_check \n"); -#endif - - /* Drop duplicate 802.11 retransmissions (IEEE 802.11 Chap. 9.2.9) */ - /* - * [PLATA] do not enter here (on the first reception as we do not have a rx->sta and probably for all other reception).. - * - */ - if (rx->sta && !is_multicast_ether_addr(hdr->addr1)) { - if (unlikely(ieee80211_has_retry(hdr->frame_control) && - rx->sta->last_seq_ctrl[rx->seqno_idx] == - hdr->seq_ctrl)) { - if (status->rx_flags & IEEE80211_RX_RA_MATCH) { - rx->local->dot11FrameDuplicateCount++; - rx->sta->num_duplicates++; - } - return RX_DROP_UNUSABLE; - } else - rx->sta->last_seq_ctrl[rx->seqno_idx] = hdr->seq_ctrl; - } - - if (unlikely(rx->skb->len < 16)) { - I802_DEBUG_INC(rx->local->rx_handlers_drop_short); - return RX_DROP_MONITOR; - } - - /* Drop disallowed frame classes based on STA auth/assoc state; - * IEEE 802.11, Chap 5.5. - * - * mac80211 filters only based on association state, i.e. it drops - * Class 3 frames from not associated stations. hostapd sends - * deauth/disassoc frames when needed. In addition, hostapd is - * responsible for filtering on both auth and assoc states. - */ - - if (ieee80211_vif_is_mesh(&rx->sdata->vif)) - return ieee80211_rx_mesh_check(rx); - - /* - * [PLATA] we do not enter here, as we are in ADHOC mode - */ - if (unlikely((ieee80211_is_data(hdr->frame_control) || - ieee80211_is_pspoll(hdr->frame_control)) && - rx->sdata->vif.type != NL80211_IFTYPE_ADHOC && - rx->sdata->vif.type != NL80211_IFTYPE_WDS && - (!rx->sta || !test_sta_flag(rx->sta, WLAN_STA_ASSOC)))) { // [PLATA] - either data or PS poll and not ADHOC and either no station or not associated -#ifdef CONFIG_MAC80211_VERBOSE_DEBUG - printk(KERN_DEBUG "-- -- -- OCB Activated...should not enter here..\n"); -#endif - /* - * accept port control frames from the AP even when it's not - * yet marked ASSOC to prevent a race where we don't set the - * assoc bit quickly enough before it sends the first frame - */ - if (rx->sta && rx->sdata->vif.type == NL80211_IFTYPE_STATION && - ieee80211_is_data_present(hdr->frame_control)) { - u16 ethertype; - u8 *payload; - - payload = rx->skb->data + - ieee80211_hdrlen(hdr->frame_control); - ethertype = (payload[6] << 8) | payload[7]; - if (cpu_to_be16(ethertype) == - rx->sdata->control_port_protocol) - return RX_CONTINUE; - } - - if (rx->sdata->vif.type == NL80211_IFTYPE_AP && - cfg80211_rx_spurious_frame(rx->sdata->dev, - hdr->addr2, - GFP_ATOMIC)) - return RX_DROP_UNUSABLE; - - return RX_DROP_MONITOR; - } - - return RX_CONTINUE; -} - - -static ieee80211_rx_result debug_noinline -ieee80211_rx_h_decrypt(struct ieee80211_rx_data *rx) -{ - struct sk_buff *skb = rx->skb; - struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb); - struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data; - int keyidx; - int hdrlen; - ieee80211_rx_result result = RX_DROP_UNUSABLE; - struct ieee80211_key *sta_ptk = NULL; - int mmie_keyidx = -1; - __le16 fc; - - /* - * Key selection 101 - * - * There are four types of keys: - * - GTK (group keys) - * - IGTK (group keys for management frames) - * - PTK (pairwise keys) - * - STK (station-to-station pairwise keys) - * - * When selecting a key, we have to distinguish between multicast - * (including broadcast) and unicast frames, the latter can only - * use PTKs and STKs while the former always use GTKs and IGTKs. - * Unless, of course, actual WEP keys ("pre-RSNA") are used, then - * unicast frames can also use key indices like GTKs. Hence, if we - * don't have a PTK/STK we check the key index for a WEP key. - * - * Note that in a regular BSS, multicast frames are sent by the - * AP only, associated stations unicast the frame to the AP first - * which then multicasts it on their behalf. - * - * There is also a slight problem in IBSS mode: GTKs are negotiated - * with each station, that is something we don't currently handle. - * The spec seems to expect that one negotiates the same key with - * every station but there's no such requirement; VLANs could be - * possible. - */ - - /* - * No point in finding a key and decrypting if the frame is neither - * addressed to us nor a multicast frame. - */ - if (!(status->rx_flags & IEEE80211_RX_RA_MATCH)) - return RX_CONTINUE; - - /* start without a key */ - rx->key = NULL; - - if (rx->sta) - sta_ptk = rcu_dereference(rx->sta->ptk); - - fc = hdr->frame_control; - - if (!ieee80211_has_protected(fc)) - mmie_keyidx = ieee80211_get_mmie_keyidx(rx->skb); - - if (!is_multicast_ether_addr(hdr->addr1) && sta_ptk) { - rx->key = sta_ptk; - if ((status->flag & RX_FLAG_DECRYPTED) && - (status->flag & RX_FLAG_IV_STRIPPED)) - return RX_CONTINUE; - /* Skip decryption if the frame is not protected. */ - if (!ieee80211_has_protected(fc)) - return RX_CONTINUE; - } else if (mmie_keyidx >= 0) { - /* Broadcast/multicast robust management frame / BIP */ - if ((status->flag & RX_FLAG_DECRYPTED) && - (status->flag & RX_FLAG_IV_STRIPPED)) - return RX_CONTINUE; - - if (mmie_keyidx < NUM_DEFAULT_KEYS || - mmie_keyidx >= NUM_DEFAULT_KEYS + NUM_DEFAULT_MGMT_KEYS) - return RX_DROP_MONITOR; /* unexpected BIP keyidx */ - if (rx->sta) - rx->key = rcu_dereference(rx->sta->gtk[mmie_keyidx]); - if (!rx->key) - rx->key = rcu_dereference(rx->sdata->keys[mmie_keyidx]); - } else if (!ieee80211_has_protected(fc)) { - /* - * The frame was not protected, so skip decryption. However, we - * need to set rx->key if there is a key that could have been - * used so that the frame may be dropped if encryption would - * have been expected. - */ - struct ieee80211_key *key = NULL; - struct ieee80211_sub_if_data *sdata = rx->sdata; - int i; - - if (ieee80211_is_mgmt(fc) && - is_multicast_ether_addr(hdr->addr1) && - (key = rcu_dereference(rx->sdata->default_mgmt_key))) - rx->key = key; - else { - if (rx->sta) { - for (i = 0; i < NUM_DEFAULT_KEYS; i++) { - key = rcu_dereference(rx->sta->gtk[i]); - if (key) - break; - } - } - if (!key) { - for (i = 0; i < NUM_DEFAULT_KEYS; i++) { - key = rcu_dereference(sdata->keys[i]); - if (key) - break; - } - } - if (key) - rx->key = key; - } - return RX_CONTINUE; - } else { - u8 keyid; - /* - * The device doesn't give us the IV so we won't be - * able to look up the key. That's ok though, we - * don't need to decrypt the frame, we just won't - * be able to keep statistics accurate. - * Except for key threshold notifications, should - * we somehow allow the driver to tell us which key - * the hardware used if this flag is set? - */ - if ((status->flag & RX_FLAG_DECRYPTED) && - (status->flag & RX_FLAG_IV_STRIPPED)) - return RX_CONTINUE; - - hdrlen = ieee80211_hdrlen(fc); - - if (rx->skb->len < 8 + hdrlen) - return RX_DROP_UNUSABLE; /* TODO: count this? */ - - /* - * no need to call ieee80211_wep_get_keyidx, - * it verifies a bunch of things we've done already - */ - skb_copy_bits(rx->skb, hdrlen + 3, &keyid, 1); - keyidx = keyid >> 6; - - /* check per-station GTK first, if multicast packet */ - if (is_multicast_ether_addr(hdr->addr1) && rx->sta) - rx->key = rcu_dereference(rx->sta->gtk[keyidx]); - - /* if not found, try default key */ - if (!rx->key) { - rx->key = rcu_dereference(rx->sdata->keys[keyidx]); - - /* - * RSNA-protected unicast frames should always be - * sent with pairwise or station-to-station keys, - * but for WEP we allow using a key index as well. - */ - if (rx->key && - rx->key->conf.cipher != WLAN_CIPHER_SUITE_WEP40 && - rx->key->conf.cipher != WLAN_CIPHER_SUITE_WEP104 && - !is_multicast_ether_addr(hdr->addr1)) - rx->key = NULL; - } - } - - if (rx->key) { - if (unlikely(rx->key->flags & KEY_FLAG_TAINTED)) - return RX_DROP_MONITOR; - - rx->key->tx_rx_count++; - /* TODO: add threshold stuff again */ - } else { - return RX_DROP_MONITOR; - } - - switch (rx->key->conf.cipher) { - case WLAN_CIPHER_SUITE_WEP40: - case WLAN_CIPHER_SUITE_WEP104: - result = ieee80211_crypto_wep_decrypt(rx); - break; - case WLAN_CIPHER_SUITE_TKIP: - result = ieee80211_crypto_tkip_decrypt(rx); - break; - case WLAN_CIPHER_SUITE_CCMP: - result = ieee80211_crypto_ccmp_decrypt(rx); - break; - case WLAN_CIPHER_SUITE_AES_CMAC: - result = ieee80211_crypto_aes_cmac_decrypt(rx); - break; - default: - /* - * We can reach here only with HW-only algorithms - * but why didn't it decrypt the frame?! - */ - return RX_DROP_UNUSABLE; - } - - /* the hdr variable is invalid after the decrypt handlers */ - - /* either the frame has been decrypted or will be dropped */ - status->flag |= RX_FLAG_DECRYPTED; - - return result; -} - -static ieee80211_rx_result debug_noinline -ieee80211_rx_h_check_more_data(struct ieee80211_rx_data *rx) -{ - struct ieee80211_local *local; - struct ieee80211_hdr *hdr; - struct sk_buff *skb; - - local = rx->local; - skb = rx->skb; - hdr = (struct ieee80211_hdr *) skb->data; - - if (!local->pspolling) - return RX_CONTINUE; - - if (!ieee80211_has_fromds(hdr->frame_control)) - /* this is not from AP */ - return RX_CONTINUE; - - if (!ieee80211_is_data(hdr->frame_control)) - return RX_CONTINUE; - - if (!ieee80211_has_moredata(hdr->frame_control)) { - /* AP has no more frames buffered for us */ - local->pspolling = false; - return RX_CONTINUE; - } - - /* more data bit is set, let's request a new frame from the AP */ - ieee80211_send_pspoll(local, rx->sdata); - - return RX_CONTINUE; -} - -static void ap_sta_ps_start(struct sta_info *sta) -{ - struct ieee80211_sub_if_data *sdata = sta->sdata; - struct ieee80211_local *local = sdata->local; - - atomic_inc(&sdata->bss->num_sta_ps); - set_sta_flag(sta, WLAN_STA_PS_STA); - if (!(local->hw.flags & IEEE80211_HW_AP_LINK_PS)) - drv_sta_notify(local, sdata, STA_NOTIFY_SLEEP, &sta->sta); -#ifdef CONFIG_MAC80211_VERBOSE_PS_DEBUG - printk(KERN_DEBUG "%s: STA %pM aid %d enters power save mode\n", - sdata->name, sta->sta.addr, sta->sta.aid); -#endif /* CONFIG_MAC80211_VERBOSE_PS_DEBUG */ -} - -static void ap_sta_ps_end(struct sta_info *sta) -{ -#ifdef CONFIG_MAC80211_VERBOSE_PS_DEBUG - printk(KERN_DEBUG "%s: STA %pM aid %d exits power save mode\n", - sta->sdata->name, sta->sta.addr, sta->sta.aid); -#endif /* CONFIG_MAC80211_VERBOSE_PS_DEBUG */ - - if (test_sta_flag(sta, WLAN_STA_PS_DRIVER)) { -#ifdef CONFIG_MAC80211_VERBOSE_PS_DEBUG - printk(KERN_DEBUG "%s: STA %pM aid %d driver-ps-blocked\n", - sta->sdata->name, sta->sta.addr, sta->sta.aid); -#endif /* CONFIG_MAC80211_VERBOSE_PS_DEBUG */ - return; - } - - ieee80211_sta_ps_deliver_wakeup(sta); -} - -int ieee80211_sta_ps_transition(struct ieee80211_sta *sta, bool start) -{ - struct sta_info *sta_inf = container_of(sta, struct sta_info, sta); - bool in_ps; - - WARN_ON(!(sta_inf->local->hw.flags & IEEE80211_HW_AP_LINK_PS)); - - /* Don't let the same PS state be set twice */ - in_ps = test_sta_flag(sta_inf, WLAN_STA_PS_STA); - if ((start && in_ps) || (!start && !in_ps)) - return -EINVAL; - - if (start) - ap_sta_ps_start(sta_inf); - else - ap_sta_ps_end(sta_inf); - - return 0; -} -EXPORT_SYMBOL(ieee80211_sta_ps_transition); - -static ieee80211_rx_result debug_noinline -ieee80211_rx_h_uapsd_and_pspoll(struct ieee80211_rx_data *rx) -{ - struct ieee80211_sub_if_data *sdata = rx->sdata; - struct ieee80211_hdr *hdr = (void *)rx->skb->data; - struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(rx->skb); - int tid, ac; - - if (!rx->sta || !(status->rx_flags & IEEE80211_RX_RA_MATCH)) - return RX_CONTINUE; - - if (sdata->vif.type != NL80211_IFTYPE_AP && - sdata->vif.type != NL80211_IFTYPE_AP_VLAN) - return RX_CONTINUE; - - /* - * The device handles station powersave, so don't do anything about - * uAPSD and PS-Poll frames (the latter shouldn't even come up from - * it to mac80211 since they're handled.) - */ - if (sdata->local->hw.flags & IEEE80211_HW_AP_LINK_PS) - return RX_CONTINUE; - - /* - * Don't do anything if the station isn't already asleep. In - * the uAPSD case, the station will probably be marked asleep, - * in the PS-Poll case the station must be confused ... - */ - if (!test_sta_flag(rx->sta, WLAN_STA_PS_STA)) - return RX_CONTINUE; - - if (unlikely(ieee80211_is_pspoll(hdr->frame_control))) { - if (!test_sta_flag(rx->sta, WLAN_STA_SP)) { - if (!test_sta_flag(rx->sta, WLAN_STA_PS_DRIVER)) - ieee80211_sta_ps_deliver_poll_response(rx->sta); - else - set_sta_flag(rx->sta, WLAN_STA_PSPOLL); - } - - /* Free PS Poll skb here instead of returning RX_DROP that would - * count as an dropped frame. */ - dev_kfree_skb(rx->skb); - - return RX_QUEUED; - } else if (!ieee80211_has_morefrags(hdr->frame_control) && - !(status->rx_flags & IEEE80211_RX_DEFERRED_RELEASE) && - ieee80211_has_pm(hdr->frame_control) && - (ieee80211_is_data_qos(hdr->frame_control) || - ieee80211_is_qos_nullfunc(hdr->frame_control))) { - tid = *ieee80211_get_qos_ctl(hdr) & IEEE80211_QOS_CTL_TID_MASK; - ac = ieee802_1d_to_ac[tid & 7]; - - /* - * If this AC is not trigger-enabled do nothing. - * - * NB: This could/should check a separate bitmap of trigger- - * enabled queues, but for now we only implement uAPSD w/o - * TSPEC changes to the ACs, so they're always the same. - */ - if (!(rx->sta->sta.uapsd_queues & BIT(ac))) - return RX_CONTINUE; - - /* if we are in a service period, do nothing */ - if (test_sta_flag(rx->sta, WLAN_STA_SP)) - return RX_CONTINUE; - - if (!test_sta_flag(rx->sta, WLAN_STA_PS_DRIVER)) - ieee80211_sta_ps_deliver_uapsd(rx->sta); - else - set_sta_flag(rx->sta, WLAN_STA_UAPSD); - } - - return RX_CONTINUE; -} - -static ieee80211_rx_result debug_noinline -ieee80211_rx_h_sta_process(struct ieee80211_rx_data *rx) -{ - struct sta_info *sta = rx->sta; - struct sk_buff *skb = rx->skb; - struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb); - struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data; - -#ifdef CONFIG_MAC80211_VERBOSE_DEBUG - printk(KERN_DEBUG "-- -- -- ieee80211_rx_h_sta_process \n"); -#endif - - if (!sta) - return RX_CONTINUE; - - /* - * Update last_rx only for IBSS packets which are for the current - * BSSID to avoid keeping the current IBSS network alive in cases - * where other STAs start using different BSSID. - */ - if (rx->sdata->vif.type == NL80211_IFTYPE_ADHOC) { - u8 *bssid = ieee80211_get_bssid(hdr, rx->skb->len, - NL80211_IFTYPE_ADHOC); - if (compare_ether_addr(bssid, rx->sdata->u.ibss.bssid) == 0) { - sta->last_rx = jiffies; - if (ieee80211_is_data(hdr->frame_control)) { -#ifdef CONFIG_MAC80211_VERBOSE_DEBUG - printk(KERN_DEBUG "-- -- -- ADHOC and OCBActivated -- updating the RX statistics \n"); -#endif - sta->last_rx_rate_idx = status->rate_idx; - sta->last_rx_rate_flag = status->flag; - } - } - } else if (!is_multicast_ether_addr(hdr->addr1)) { - /* - * Mesh beacons will update last_rx when if they are found to - * match the current local configuration when processed. - */ - sta->last_rx = jiffies; - if (ieee80211_is_data(hdr->frame_control)) { - sta->last_rx_rate_idx = status->rate_idx; - sta->last_rx_rate_flag = status->flag; - } - } - - if (!(status->rx_flags & IEEE80211_RX_RA_MATCH)) - return RX_CONTINUE; - - if (rx->sdata->vif.type == NL80211_IFTYPE_STATION) - ieee80211_sta_rx_notify(rx->sdata, hdr); - - sta->rx_fragments++; - sta->rx_bytes += rx->skb->len; - if (!(status->flag & RX_FLAG_NO_SIGNAL_VAL)) { - sta->last_signal = status->signal; - ewma_add(&sta->avg_signal, -status->signal); - } - - /* - * Change STA power saving mode only at the end of a frame - * exchange sequence. - */ - if (!(sta->local->hw.flags & IEEE80211_HW_AP_LINK_PS) && - !ieee80211_has_morefrags(hdr->frame_control) && - !(status->rx_flags & IEEE80211_RX_DEFERRED_RELEASE) && - (rx->sdata->vif.type == NL80211_IFTYPE_AP || - rx->sdata->vif.type == NL80211_IFTYPE_AP_VLAN)) { - if (test_sta_flag(sta, WLAN_STA_PS_STA)) { - /* - * Ignore doze->wake transitions that are - * indicated by non-data frames, the standard - * is unclear here, but for example going to - * PS mode and then scanning would cause a - * doze->wake transition for the probe request, - * and that is clearly undesirable. - */ - if (ieee80211_is_data(hdr->frame_control) && - !ieee80211_has_pm(hdr->frame_control)) - ap_sta_ps_end(sta); - } else { - if (ieee80211_has_pm(hdr->frame_control)) - ap_sta_ps_start(sta); - } - } - - /* - * Drop (qos-)data::nullfunc frames silently, since they - * are used only to control station power saving mode. - */ - if (ieee80211_is_nullfunc(hdr->frame_control) || - ieee80211_is_qos_nullfunc(hdr->frame_control)) { - I802_DEBUG_INC(rx->local->rx_handlers_drop_nullfunc); - - /* - * If we receive a 4-addr nullfunc frame from a STA - * that was not moved to a 4-addr STA vlan yet send - * the event to userspace and for older hostapd drop - * the frame to the monitor interface. - */ - if (ieee80211_has_a4(hdr->frame_control) && - (rx->sdata->vif.type == NL80211_IFTYPE_AP || - (rx->sdata->vif.type == NL80211_IFTYPE_AP_VLAN && - !rx->sdata->u.vlan.sta))) { - if (!test_and_set_sta_flag(sta, WLAN_STA_4ADDR_EVENT)) - cfg80211_rx_unexpected_4addr_frame( - rx->sdata->dev, sta->sta.addr, - GFP_ATOMIC); - return RX_DROP_MONITOR; - } - /* - * Update counter and free packet here to avoid - * counting this as a dropped packed. - */ - sta->rx_packets++; - dev_kfree_skb(rx->skb); - return RX_QUEUED; - } - - return RX_CONTINUE; -} /* ieee80211_rx_h_sta_process */ - -static inline struct ieee80211_fragment_entry * -ieee80211_reassemble_add(struct ieee80211_sub_if_data *sdata, - unsigned int frag, unsigned int seq, int rx_queue, - struct sk_buff **skb) -{ - struct ieee80211_fragment_entry *entry; - int idx; - - idx = sdata->fragment_next; - entry = &sdata->fragments[sdata->fragment_next++]; - if (sdata->fragment_next >= IEEE80211_FRAGMENT_MAX) - sdata->fragment_next = 0; - - if (!skb_queue_empty(&entry->skb_list)) { -#ifdef CONFIG_MAC80211_VERBOSE_DEBUG - struct ieee80211_hdr *hdr = - (struct ieee80211_hdr *) entry->skb_list.next->data; - printk(KERN_DEBUG "%s: RX reassembly removed oldest " - "fragment entry (idx=%d age=%lu seq=%d last_frag=%d " - "addr1=%pM addr2=%pM\n", - sdata->name, idx, - jiffies - entry->first_frag_time, entry->seq, - entry->last_frag, hdr->addr1, hdr->addr2); -#endif - __skb_queue_purge(&entry->skb_list); - } - - __skb_queue_tail(&entry->skb_list, *skb); /* no need for locking */ - *skb = NULL; - entry->first_frag_time = jiffies; - entry->seq = seq; - entry->rx_queue = rx_queue; - entry->last_frag = frag; - entry->ccmp = 0; - entry->extra_len = 0; - - return entry; -} - -static inline struct ieee80211_fragment_entry * -ieee80211_reassemble_find(struct ieee80211_sub_if_data *sdata, - unsigned int frag, unsigned int seq, - int rx_queue, struct ieee80211_hdr *hdr) -{ - struct ieee80211_fragment_entry *entry; - int i, idx; - - idx = sdata->fragment_next; - for (i = 0; i < IEEE80211_FRAGMENT_MAX; i++) { - struct ieee80211_hdr *f_hdr; - - idx--; - if (idx < 0) - idx = IEEE80211_FRAGMENT_MAX - 1; - - entry = &sdata->fragments[idx]; - if (skb_queue_empty(&entry->skb_list) || entry->seq != seq || - entry->rx_queue != rx_queue || - entry->last_frag + 1 != frag) - continue; - - f_hdr = (struct ieee80211_hdr *)entry->skb_list.next->data; - - /* - * Check ftype and addresses are equal, else check next fragment - */ - if (((hdr->frame_control ^ f_hdr->frame_control) & - cpu_to_le16(IEEE80211_FCTL_FTYPE)) || - compare_ether_addr(hdr->addr1, f_hdr->addr1) != 0 || - compare_ether_addr(hdr->addr2, f_hdr->addr2) != 0) - continue; - - if (time_after(jiffies, entry->first_frag_time + 2 * HZ)) { - __skb_queue_purge(&entry->skb_list); - continue; - } - return entry; - } - - return NULL; -} - -static ieee80211_rx_result debug_noinline -ieee80211_rx_h_defragment(struct ieee80211_rx_data *rx) -{ - struct ieee80211_hdr *hdr; - u16 sc; - __le16 fc; - unsigned int frag, seq; - struct ieee80211_fragment_entry *entry; - struct sk_buff *skb; - struct ieee80211_rx_status *status; - - hdr = (struct ieee80211_hdr *)rx->skb->data; - fc = hdr->frame_control; - sc = le16_to_cpu(hdr->seq_ctrl); - frag = sc & IEEE80211_SCTL_FRAG; - - if (likely((!ieee80211_has_morefrags(fc) && frag == 0) || - (rx->skb)->len < 24 || - is_multicast_ether_addr(hdr->addr1))) { - /* not fragmented */ - goto out; - } - I802_DEBUG_INC(rx->local->rx_handlers_fragments); - - if (skb_linearize(rx->skb)) - return RX_DROP_UNUSABLE; - - /* - * skb_linearize() might change the skb->data and - * previously cached variables (in this case, hdr) need to - * be refreshed with the new data. - */ - hdr = (struct ieee80211_hdr *)rx->skb->data; - seq = (sc & IEEE80211_SCTL_SEQ) >> 4; - - if (frag == 0) { - /* This is the first fragment of a new frame. */ - entry = ieee80211_reassemble_add(rx->sdata, frag, seq, - rx->seqno_idx, &(rx->skb)); - if (rx->key && rx->key->conf.cipher == WLAN_CIPHER_SUITE_CCMP && - ieee80211_has_protected(fc)) { - int queue = rx->security_idx; - /* Store CCMP PN so that we can verify that the next - * fragment has a sequential PN value. */ - entry->ccmp = 1; - memcpy(entry->last_pn, - rx->key->u.ccmp.rx_pn[queue], - CCMP_PN_LEN); - } - return RX_QUEUED; - } - - /* This is a fragment for a frame that should already be pending in - * fragment cache. Add this fragment to the end of the pending entry. - */ - entry = ieee80211_reassemble_find(rx->sdata, frag, seq, - rx->seqno_idx, hdr); - if (!entry) { - I802_DEBUG_INC(rx->local->rx_handlers_drop_defrag); - return RX_DROP_MONITOR; - } - - /* Verify that MPDUs within one MSDU have sequential PN values. - * (IEEE 802.11i, 8.3.3.4.5) */ - if (entry->ccmp) { - int i; - u8 pn[CCMP_PN_LEN], *rpn; - int queue; - if (!rx->key || rx->key->conf.cipher != WLAN_CIPHER_SUITE_CCMP) - return RX_DROP_UNUSABLE; - memcpy(pn, entry->last_pn, CCMP_PN_LEN); - for (i = CCMP_PN_LEN - 1; i >= 0; i--) { - pn[i]++; - if (pn[i]) - break; - } - queue = rx->security_idx; - rpn = rx->key->u.ccmp.rx_pn[queue]; - if (memcmp(pn, rpn, CCMP_PN_LEN)) - return RX_DROP_UNUSABLE; - memcpy(entry->last_pn, pn, CCMP_PN_LEN); - } - - skb_pull(rx->skb, ieee80211_hdrlen(fc)); - __skb_queue_tail(&entry->skb_list, rx->skb); - entry->last_frag = frag; - entry->extra_len += rx->skb->len; - if (ieee80211_has_morefrags(fc)) { - rx->skb = NULL; - return RX_QUEUED; - } - - rx->skb = __skb_dequeue(&entry->skb_list); - if (skb_tailroom(rx->skb) < entry->extra_len) { - I802_DEBUG_INC(rx->local->rx_expand_skb_head2); - if (unlikely(pskb_expand_head(rx->skb, 0, entry->extra_len, - GFP_ATOMIC))) { - I802_DEBUG_INC(rx->local->rx_handlers_drop_defrag); - __skb_queue_purge(&entry->skb_list); - return RX_DROP_UNUSABLE; - } - } - while ((skb = __skb_dequeue(&entry->skb_list))) { - memcpy(skb_put(rx->skb, skb->len), skb->data, skb->len); - dev_kfree_skb(skb); - } - - /* Complete frame has been reassembled - process it now */ - status = IEEE80211_SKB_RXCB(rx->skb); - status->rx_flags |= IEEE80211_RX_FRAGMENTED; - - out: - if (rx->sta) - rx->sta->rx_packets++; - if (is_multicast_ether_addr(hdr->addr1)) - rx->local->dot11MulticastReceivedFrameCount++; - else - ieee80211_led_rx(rx->local); - return RX_CONTINUE; -} - -static int -ieee80211_802_1x_port_control(struct ieee80211_rx_data *rx) -{ - /* - * [PLATA] allow frames here even if we are not authorized, under the condition we are in the OCB mode... - */ - if (unlikely(!rx->sta || - (!test_sta_flag(rx->sta, WLAN_STA_AUTHORIZED) && !test_sta_flag(rx->sta, WLAN_STA_OCB)) )) - return -EACCES; - - return 0; -} - -static int -ieee80211_drop_unencrypted(struct ieee80211_rx_data *rx, __le16 fc) -{ - struct sk_buff *skb = rx->skb; - struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb); - - /* - * Pass through unencrypted frames if the hardware has - * decrypted them already. - */ - if (status->flag & RX_FLAG_DECRYPTED) - return 0; - - /* - * [PLATA] Pass through unencrypted frames when the OCB is activated - * first in this version of PLATA we do not support encryption - * second, the encryption is done at a higher layer - */ - if ((rx->local->hw.wiphy->dot11OCBActivated == 1) && (rx->local->hw.flags & IEEE80211_HW_DOT11OCB_SUPPORTED)) - return 0; - - /* Drop unencrypted frames if key is set. */ - if (unlikely(!ieee80211_has_protected(fc) && - !ieee80211_is_nullfunc(fc) && - ieee80211_is_data(fc) && - (rx->key || rx->sdata->drop_unencrypted))) - return -EACCES; - - return 0; -} - -static int -ieee80211_drop_unencrypted_mgmt(struct ieee80211_rx_data *rx) -{ - struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)rx->skb->data; - struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(rx->skb); - __le16 fc = hdr->frame_control; - - /* - * Pass through unencrypted frames if the hardware has - * decrypted them already. - */ - if (status->flag & RX_FLAG_DECRYPTED) - return 0; - - if (rx->sta && test_sta_flag(rx->sta, WLAN_STA_MFP)) { - if (unlikely(!ieee80211_has_protected(fc) && - ieee80211_is_unicast_robust_mgmt_frame(rx->skb) && - rx->key)) { - if (ieee80211_is_deauth(fc)) - cfg80211_send_unprot_deauth(rx->sdata->dev, - rx->skb->data, - rx->skb->len); - else if (ieee80211_is_disassoc(fc)) - cfg80211_send_unprot_disassoc(rx->sdata->dev, - rx->skb->data, - rx->skb->len); - return -EACCES; - } - /* BIP does not use Protected field, so need to check MMIE */ - if (unlikely(ieee80211_is_multicast_robust_mgmt_frame(rx->skb) && - ieee80211_get_mmie_keyidx(rx->skb) < 0)) { - if (ieee80211_is_deauth(fc)) - cfg80211_send_unprot_deauth(rx->sdata->dev, - rx->skb->data, - rx->skb->len); - else if (ieee80211_is_disassoc(fc)) - cfg80211_send_unprot_disassoc(rx->sdata->dev, - rx->skb->data, - rx->skb->len); - return -EACCES; - } - /* - * When using MFP, Action frames are not allowed prior to - * having configured keys. - */ - if (unlikely(ieee80211_is_action(fc) && !rx->key && - ieee80211_is_robust_mgmt_frame( - (struct ieee80211_hdr *) rx->skb->data))) - return -EACCES; - } - - return 0; -} - -static int -__ieee80211_data_to_8023(struct ieee80211_rx_data *rx, bool *port_control) -{ - struct ieee80211_sub_if_data *sdata = rx->sdata; - struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)rx->skb->data; - bool check_port_control = false; - struct ethhdr *ehdr; - int ret; - - *port_control = false; - if (ieee80211_has_a4(hdr->frame_control) && - sdata->vif.type == NL80211_IFTYPE_AP_VLAN && !sdata->u.vlan.sta) - return -1; - - if (sdata->vif.type == NL80211_IFTYPE_STATION && - !!sdata->u.mgd.use_4addr != !!ieee80211_has_a4(hdr->frame_control)) { - - if (!sdata->u.mgd.use_4addr) - return -1; - else - check_port_control = true; - } - - if (is_multicast_ether_addr(hdr->addr1) && - sdata->vif.type == NL80211_IFTYPE_AP_VLAN && sdata->u.vlan.sta) - return -1; - - ret = ieee80211_data_to_8023(rx->skb, sdata->vif.addr, sdata->vif.type); - if (ret < 0) - return ret; - - ehdr = (struct ethhdr *) rx->skb->data; - if (ehdr->h_proto == rx->sdata->control_port_protocol) - *port_control = true; - else if (check_port_control) - return -1; - - return 0; -} - -/* - * requires that rx->skb is a frame with ethernet header - */ -static bool ieee80211_frame_allowed(struct ieee80211_rx_data *rx, __le16 fc) -{ - static const u8 pae_group_addr[ETH_ALEN] __aligned(2) - = { 0x01, 0x80, 0xC2, 0x00, 0x00, 0x03 }; - struct ethhdr *ehdr = (struct ethhdr *) rx->skb->data; - - /* - * Allow EAPOL frames to us/the PAE group address regardless - * of whether the frame was encrypted or not. - */ - /* - * [PLATA] - we need to initialize these values otherwise we might drop the frame - * - we keep it here, if the frame if for us - */ - if (ehdr->h_proto == rx->sdata->control_port_protocol && - (compare_ether_addr(ehdr->h_dest, rx->sdata->vif.addr) == 0 || - compare_ether_addr(ehdr->h_dest, pae_group_addr) == 0)) - return true; - - /* - * [PLATA] added some flags - we allow the frame even if not in AUTHORIZED mode (but in the OCB mode) or if unencrypted but with OCB activated - */ - if (ieee80211_802_1x_port_control(rx) || - ieee80211_drop_unencrypted(rx, fc)) - return false; - - return true; -} - -/* - * requires that rx->skb is a frame with ethernet header - * - * [PLATA] TODO - check what it means for the ADHOC mode with OCB activated - * - as we only communicate directly, no relaying (no turn back to wireless) - * - this method should not do anything. But we may have to bypass it - */ -static void -ieee80211_deliver_skb(struct ieee80211_rx_data *rx) -{ - struct ieee80211_sub_if_data *sdata = rx->sdata; - struct net_device *dev = sdata->dev; - struct sk_buff *skb, *xmit_skb; - struct ethhdr *ehdr = (struct ethhdr *) rx->skb->data; - struct sta_info *dsta; - struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(rx->skb); - - skb = rx->skb; - xmit_skb = NULL; - -#ifdef CONFIG_MAC80211_VERBOSE_DEBUG - printk(KERN_DEBUG "-- -- -- ieee80211_deliver_skb -- in case the MAC should relay it -- with OCBActivated, it should never... \n"); -#endif - - if ((sdata->vif.type == NL80211_IFTYPE_AP || - sdata->vif.type == NL80211_IFTYPE_AP_VLAN) && - !(sdata->flags & IEEE80211_SDATA_DONT_BRIDGE_PACKETS) && - (status->rx_flags & IEEE80211_RX_RA_MATCH) && - (sdata->vif.type != NL80211_IFTYPE_AP_VLAN || !sdata->u.vlan.sta)) { - if (is_multicast_ether_addr(ehdr->h_dest)) { - /* - * send multicast frames both to higher layers in - * local net stack and back to the wireless medium - */ - xmit_skb = skb_copy(skb, GFP_ATOMIC); - if (!xmit_skb && net_ratelimit()) - printk(KERN_DEBUG "%s: failed to clone " - "multicast frame\n", dev->name); - } else { - dsta = sta_info_get(sdata, skb->data); - if (dsta) { - /* - * The destination station is associated to - * this AP (in this VLAN), so send the frame - * directly to it and do not pass it to local - * net stack. - */ - xmit_skb = skb; - skb = NULL; - } - } - } - - if (skb) { - int align __maybe_unused; - -#ifndef CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS - /* - * 'align' will only take the values 0 or 2 here - * since all frames are required to be aligned - * to 2-byte boundaries when being passed to - * mac80211. That also explains the __skb_push() - * below. - */ - align = ((unsigned long)(skb->data + sizeof(struct ethhdr))) & 3; - if (align) { - if (WARN_ON(skb_headroom(skb) < 3)) { - dev_kfree_skb(skb); - skb = NULL; - } else { - u8 *data = skb->data; - size_t len = skb_headlen(skb); - skb->data -= align; - memmove(skb->data, data, len); - skb_set_tail_pointer(skb, len); - } - } -#endif - - if (skb) { - /* deliver to local stack */ - skb->protocol = eth_type_trans(skb, dev); - memset(skb->cb, 0, sizeof(skb->cb)); - netif_receive_skb(skb); - } - } - - if (xmit_skb) { - /* - * Send to wireless media and increase priority by 256 to - * keep the received priority instead of reclassifying - * the frame (see cfg80211_classify8021d). - */ - xmit_skb->priority += 256; - xmit_skb->protocol = htons(ETH_P_802_3); - skb_reset_network_header(xmit_skb); - skb_reset_mac_header(xmit_skb); - dev_queue_xmit(xmit_skb); - } -} - -static ieee80211_rx_result debug_noinline -ieee80211_rx_h_amsdu(struct ieee80211_rx_data *rx) -{ - struct net_device *dev = rx->sdata->dev; - struct sk_buff *skb = rx->skb; - struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data; - __le16 fc = hdr->frame_control; - struct sk_buff_head frame_list; - struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(rx->skb); - - if (unlikely(!ieee80211_is_data(fc))) - return RX_CONTINUE; - - if (unlikely(!ieee80211_is_data_present(fc))) - return RX_DROP_MONITOR; - - if (!(status->rx_flags & IEEE80211_RX_AMSDU)) - return RX_CONTINUE; - - if (ieee80211_has_a4(hdr->frame_control) && - rx->sdata->vif.type == NL80211_IFTYPE_AP_VLAN && - !rx->sdata->u.vlan.sta) - return RX_DROP_UNUSABLE; - - if (is_multicast_ether_addr(hdr->addr1) && - ((rx->sdata->vif.type == NL80211_IFTYPE_AP_VLAN && - rx->sdata->u.vlan.sta) || - (rx->sdata->vif.type == NL80211_IFTYPE_STATION && - rx->sdata->u.mgd.use_4addr))) - return RX_DROP_UNUSABLE; - - skb->dev = dev; - __skb_queue_head_init(&frame_list); - - if (skb_linearize(skb)) - return RX_DROP_UNUSABLE; - - ieee80211_amsdu_to_8023s(skb, &frame_list, dev->dev_addr, - rx->sdata->vif.type, - rx->local->hw.extra_tx_headroom, true); - - while (!skb_queue_empty(&frame_list)) { - rx->skb = __skb_dequeue(&frame_list); - - if (!ieee80211_frame_allowed(rx, fc)) { - dev_kfree_skb(rx->skb); - continue; - } - dev->stats.rx_packets++; - dev->stats.rx_bytes += rx->skb->len; - - ieee80211_deliver_skb(rx); - } - - return RX_QUEUED; -} - -#ifdef CONFIG_MAC80211_MESH -static ieee80211_rx_result -ieee80211_rx_h_mesh_fwding(struct ieee80211_rx_data *rx) -{ - struct ieee80211_hdr *fwd_hdr, *hdr; - struct ieee80211_tx_info *info; - struct ieee80211s_hdr *mesh_hdr; - struct sk_buff *skb = rx->skb, *fwd_skb; - struct ieee80211_local *local = rx->local; - struct ieee80211_sub_if_data *sdata = rx->sdata; - struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb); - struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh; - __le16 reason = cpu_to_le16(WLAN_REASON_MESH_PATH_NOFORWARD); - u16 q, hdrlen; - - hdr = (struct ieee80211_hdr *) skb->data; - hdrlen = ieee80211_hdrlen(hdr->frame_control); - mesh_hdr = (struct ieee80211s_hdr *) (skb->data + hdrlen); - - /* frame is in RMC, don't forward */ - if (ieee80211_is_data(hdr->frame_control) && - is_multicast_ether_addr(hdr->addr1) && - mesh_rmc_check(hdr->addr3, mesh_hdr, rx->sdata)) - return RX_DROP_MONITOR; - - if (!ieee80211_is_data(hdr->frame_control)) - return RX_CONTINUE; - - if (!mesh_hdr->ttl) - return RX_DROP_MONITOR; - - if (mesh_hdr->flags & MESH_FLAGS_AE) { - struct mesh_path *mppath; - char *proxied_addr; - char *mpp_addr; - - if (is_multicast_ether_addr(hdr->addr1)) { - mpp_addr = hdr->addr3; - proxied_addr = mesh_hdr->eaddr1; - } else { - mpp_addr = hdr->addr4; - proxied_addr = mesh_hdr->eaddr2; - } - - rcu_read_lock(); - mppath = mpp_path_lookup(proxied_addr, sdata); - if (!mppath) { - mpp_path_add(proxied_addr, mpp_addr, sdata); - } else { - spin_lock_bh(&mppath->state_lock); - if (compare_ether_addr(mppath->mpp, mpp_addr) != 0) - memcpy(mppath->mpp, mpp_addr, ETH_ALEN); - spin_unlock_bh(&mppath->state_lock); - } - rcu_read_unlock(); - } - - /* Frame has reached destination. Don't forward */ - if (!is_multicast_ether_addr(hdr->addr1) && - compare_ether_addr(sdata->vif.addr, hdr->addr3) == 0) - return RX_CONTINUE; - - q = ieee80211_select_queue_80211(local, skb, hdr); - if (ieee80211_queue_stopped(&local->hw, q)) { - IEEE80211_IFSTA_MESH_CTR_INC(ifmsh, dropped_frames_congestion); - return RX_DROP_MONITOR; - } - skb_set_queue_mapping(skb, q); - - if (!(status->rx_flags & IEEE80211_RX_RA_MATCH)) - goto out; - - if (!--mesh_hdr->ttl) { - IEEE80211_IFSTA_MESH_CTR_INC(ifmsh, dropped_frames_ttl); - return RX_DROP_MONITOR; - } - - if (!ifmsh->mshcfg.dot11MeshForwarding) - goto out; - - fwd_skb = skb_copy(skb, GFP_ATOMIC); - if (!fwd_skb) { - if (net_ratelimit()) - printk(KERN_DEBUG "%s: failed to clone mesh frame\n", - sdata->name); - goto out; - } - - fwd_hdr = (struct ieee80211_hdr *) fwd_skb->data; - info = IEEE80211_SKB_CB(fwd_skb); - memset(info, 0, sizeof(*info)); - info->flags |= IEEE80211_TX_INTFL_NEED_TXPROCESSING; - info->control.vif = &rx->sdata->vif; - info->control.jiffies = jiffies; - if (is_multicast_ether_addr(fwd_hdr->addr1)) { - IEEE80211_IFSTA_MESH_CTR_INC(ifmsh, fwded_mcast); - memcpy(fwd_hdr->addr2, sdata->vif.addr, ETH_ALEN); - } else if (!mesh_nexthop_lookup(fwd_skb, sdata)) { - IEEE80211_IFSTA_MESH_CTR_INC(ifmsh, fwded_unicast); - } else { - /* unable to resolve next hop */ - mesh_path_error_tx(ifmsh->mshcfg.element_ttl, fwd_hdr->addr3, - 0, reason, fwd_hdr->addr2, sdata); - IEEE80211_IFSTA_MESH_CTR_INC(ifmsh, dropped_frames_no_route); - kfree_skb(fwd_skb); - return RX_DROP_MONITOR; - } - - IEEE80211_IFSTA_MESH_CTR_INC(ifmsh, fwded_frames); - ieee80211_add_pending_skb(local, fwd_skb); - out: - if (is_multicast_ether_addr(hdr->addr1) || - sdata->dev->flags & IFF_PROMISC) - return RX_CONTINUE; - else - return RX_DROP_MONITOR; -} -#endif - -static ieee80211_rx_result debug_noinline -ieee80211_rx_h_data(struct ieee80211_rx_data *rx) -{ - struct ieee80211_sub_if_data *sdata = rx->sdata; - struct ieee80211_local *local = rx->local; - struct net_device *dev = sdata->dev; - struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)rx->skb->data; - __le16 fc = hdr->frame_control; - bool port_control; - int err; - - if (unlikely(!ieee80211_is_data(hdr->frame_control))) - return RX_CONTINUE; - - if (unlikely(!ieee80211_is_data_present(hdr->frame_control))) - return RX_DROP_MONITOR; - -#ifdef CONFIG_MAC80211_VERBOSE_DEBUG - printk(KERN_DEBUG "-- -- -- ieee80211_rx_h_data \n"); -#endif - - /* - * Send unexpected-4addr-frame event to hostapd. For older versions, - * also drop the frame to cooked monitor interfaces. - */ - /* - * [PLATA] when OCB is activated, we cannot use 4addr mode...(only three) - * - in this method, we configured the interface for NOT using 4-addr - */ - if (ieee80211_has_a4(hdr->frame_control) && - sdata->vif.type == NL80211_IFTYPE_AP) { - if (rx->sta && - !test_and_set_sta_flag(rx->sta, WLAN_STA_4ADDR_EVENT)) - cfg80211_rx_unexpected_4addr_frame( - rx->sdata->dev, rx->sta->sta.addr, GFP_ATOMIC); - return RX_DROP_MONITOR; - } - - err = __ieee80211_data_to_8023(rx, &port_control); - if (unlikely(err)) { - return RX_DROP_UNUSABLE; - } - - /* [PLATA] Don't need to check for authorization when OCB mode is activated */ - if ((local->hw.wiphy->dot11OCBActivated == 0) && !(local->hw.flags & IEEE80211_HW_DOT11OCB_SUPPORTED)) { - - if (!ieee80211_frame_allowed(rx, fc)) { - return RX_DROP_MONITOR; - } - } - - if (rx->sdata->vif.type == NL80211_IFTYPE_AP_VLAN && - unlikely(port_control) && sdata->bss) { - sdata = container_of(sdata->bss, struct ieee80211_sub_if_data, - u.ap); - dev = sdata->dev; - rx->sdata = sdata; - } - - rx->skb->dev = dev; - - dev->stats.rx_packets++; - dev->stats.rx_bytes += rx->skb->len; - - if (local->ps_sdata && local->hw.conf.dynamic_ps_timeout > 0 && - !is_multicast_ether_addr( - ((struct ethhdr *)rx->skb->data)->h_dest) && - (!local->scanning && - !test_bit(SDATA_STATE_OFFCHANNEL, &sdata->state))) { - mod_timer(&local->dynamic_ps_timer, jiffies + - msecs_to_jiffies(local->hw.conf.dynamic_ps_timeout)); - } - -#ifdef CONFIG_MAC80211_VERBOSE_DEBUG - printk(KERN_DEBUG "-- -- -- RX almost completed -- delivering the packet to SKB \n"); -#endif - ieee80211_deliver_skb(rx); - - return RX_QUEUED; -} - -static ieee80211_rx_result debug_noinline -ieee80211_rx_h_ctrl(struct ieee80211_rx_data *rx) -{ - struct ieee80211_local *local = rx->local; - struct ieee80211_hw *hw = &local->hw; - struct sk_buff *skb = rx->skb; - struct ieee80211_bar *bar = (struct ieee80211_bar *)skb->data; - struct tid_ampdu_rx *tid_agg_rx; - u16 start_seq_num; - u16 tid; - - if (likely(!ieee80211_is_ctl(bar->frame_control))) - return RX_CONTINUE; - - if (ieee80211_is_back_req(bar->frame_control)) { - struct { - __le16 control, start_seq_num; - } __packed bar_data; - - if (!rx->sta) - return RX_DROP_MONITOR; - - if (skb_copy_bits(skb, offsetof(struct ieee80211_bar, control), - &bar_data, sizeof(bar_data))) - return RX_DROP_MONITOR; - - tid = le16_to_cpu(bar_data.control) >> 12; - - tid_agg_rx = rcu_dereference(rx->sta->ampdu_mlme.tid_rx[tid]); - if (!tid_agg_rx) - return RX_DROP_MONITOR; - - start_seq_num = le16_to_cpu(bar_data.start_seq_num) >> 4; - - /* reset session timer */ - if (tid_agg_rx->timeout) - mod_timer(&tid_agg_rx->session_timer, - TU_TO_EXP_TIME(tid_agg_rx->timeout)); - - spin_lock(&tid_agg_rx->reorder_lock); - /* release stored frames up to start of BAR */ - ieee80211_release_reorder_frames(hw, tid_agg_rx, start_seq_num); - spin_unlock(&tid_agg_rx->reorder_lock); - - kfree_skb(skb); - return RX_QUEUED; - } - - /* - * After this point, we only want management frames, - * so we can drop all remaining control frames to - * cooked monitor interfaces. - */ - return RX_DROP_MONITOR; -} - -static void ieee80211_process_sa_query_req(struct ieee80211_sub_if_data *sdata, - struct ieee80211_mgmt *mgmt, - size_t len) -{ - struct ieee80211_local *local = sdata->local; - struct sk_buff *skb; - struct ieee80211_mgmt *resp; - - if (compare_ether_addr(mgmt->da, sdata->vif.addr) != 0) { - /* Not to own unicast address */ - return; - } - - if (compare_ether_addr(mgmt->sa, sdata->u.mgd.bssid) != 0 || - compare_ether_addr(mgmt->bssid, sdata->u.mgd.bssid) != 0) { - /* Not from the current AP or not associated yet. */ - return; - } - - if (len < 24 + 1 + sizeof(resp->u.action.u.sa_query)) { - /* Too short SA Query request frame */ - return; - } - - skb = dev_alloc_skb(sizeof(*resp) + local->hw.extra_tx_headroom); - if (skb == NULL) - return; - - skb_reserve(skb, local->hw.extra_tx_headroom); - resp = (struct ieee80211_mgmt *) skb_put(skb, 24); - memset(resp, 0, 24); - memcpy(resp->da, mgmt->sa, ETH_ALEN); - memcpy(resp->sa, sdata->vif.addr, ETH_ALEN); - memcpy(resp->bssid, sdata->u.mgd.bssid, ETH_ALEN); - resp->frame_control = cpu_to_le16(IEEE80211_FTYPE_MGMT | - IEEE80211_STYPE_ACTION); - skb_put(skb, 1 + sizeof(resp->u.action.u.sa_query)); - resp->u.action.category = WLAN_CATEGORY_SA_QUERY; - resp->u.action.u.sa_query.action = WLAN_ACTION_SA_QUERY_RESPONSE; - memcpy(resp->u.action.u.sa_query.trans_id, - mgmt->u.action.u.sa_query.trans_id, - WLAN_SA_QUERY_TR_ID_LEN); - - ieee80211_tx_skb(sdata, skb); -} - -static ieee80211_rx_result debug_noinline -ieee80211_rx_h_mgmt_check(struct ieee80211_rx_data *rx) -{ - struct ieee80211_mgmt *mgmt = (struct ieee80211_mgmt *) rx->skb->data; - struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(rx->skb); - - /* - * From here on, look only at management frames. - * Data and control frames are already handled, - * and unknown (reserved) frames are useless. - */ - if (rx->skb->len < 24) - return RX_DROP_MONITOR; - - if (!ieee80211_is_mgmt(mgmt->frame_control)) - return RX_DROP_MONITOR; - - if (rx->sdata->vif.type == NL80211_IFTYPE_AP && - ieee80211_is_beacon(mgmt->frame_control) && - !(rx->flags & IEEE80211_RX_BEACON_REPORTED)) { - int sig = 0; - - if (rx->local->hw.flags & IEEE80211_HW_SIGNAL_DBM) - sig = status->signal; - - cfg80211_report_obss_beacon(rx->local->hw.wiphy, - rx->skb->data, rx->skb->len, - status->freq, sig, GFP_ATOMIC); - rx->flags |= IEEE80211_RX_BEACON_REPORTED; - } - - if (!(status->rx_flags & IEEE80211_RX_RA_MATCH)) - return RX_DROP_MONITOR; - - if (ieee80211_drop_unencrypted_mgmt(rx)) - return RX_DROP_UNUSABLE; - - return RX_CONTINUE; -} - -static ieee80211_rx_result debug_noinline -ieee80211_rx_h_action(struct ieee80211_rx_data *rx) -{ - struct ieee80211_local *local = rx->local; - struct ieee80211_sub_if_data *sdata = rx->sdata; - struct ieee80211_mgmt *mgmt = (struct ieee80211_mgmt *) rx->skb->data; - struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(rx->skb); - int len = rx->skb->len; - - if (!ieee80211_is_action(mgmt->frame_control)) - return RX_CONTINUE; - - /* drop too small frames */ - if (len < IEEE80211_MIN_ACTION_SIZE) - return RX_DROP_UNUSABLE; - - if (!rx->sta && mgmt->u.action.category != WLAN_CATEGORY_PUBLIC) - return RX_DROP_UNUSABLE; - - if (!(status->rx_flags & IEEE80211_RX_RA_MATCH)) - return RX_DROP_UNUSABLE; - - switch (mgmt->u.action.category) { - case WLAN_CATEGORY_HT: - /* reject HT action frames from stations not supporting HT */ - if (!rx->sta->sta.ht_cap.ht_supported) - goto invalid; - - if (sdata->vif.type != NL80211_IFTYPE_STATION && - sdata->vif.type != NL80211_IFTYPE_MESH_POINT && - sdata->vif.type != NL80211_IFTYPE_AP_VLAN && - sdata->vif.type != NL80211_IFTYPE_AP && - sdata->vif.type != NL80211_IFTYPE_ADHOC) - break; - - /* verify action & smps_control are present */ - if (len < IEEE80211_MIN_ACTION_SIZE + 2) - goto invalid; - - switch (mgmt->u.action.u.ht_smps.action) { - case WLAN_HT_ACTION_SMPS: { - struct ieee80211_supported_band *sband; - u8 smps; - - /* convert to HT capability */ - switch (mgmt->u.action.u.ht_smps.smps_control) { - case WLAN_HT_SMPS_CONTROL_DISABLED: - smps = WLAN_HT_CAP_SM_PS_DISABLED; - break; - case WLAN_HT_SMPS_CONTROL_STATIC: - smps = WLAN_HT_CAP_SM_PS_STATIC; - break; - case WLAN_HT_SMPS_CONTROL_DYNAMIC: - smps = WLAN_HT_CAP_SM_PS_DYNAMIC; - break; - default: - goto invalid; - } - smps <<= IEEE80211_HT_CAP_SM_PS_SHIFT; - - /* if no change do nothing */ - if ((rx->sta->sta.ht_cap.cap & - IEEE80211_HT_CAP_SM_PS) == smps) - goto handled; - - rx->sta->sta.ht_cap.cap &= ~IEEE80211_HT_CAP_SM_PS; - rx->sta->sta.ht_cap.cap |= smps; - - sband = rx->local->hw.wiphy->bands[status->band]; - - rate_control_rate_update( - local, sband, rx->sta, - IEEE80211_RC_SMPS_CHANGED, - ieee80211_get_tx_channel_type( - local, local->_oper_channel_type)); - goto handled; - } - default: - goto invalid; - } - - break; - case WLAN_CATEGORY_BACK: - if (sdata->vif.type != NL80211_IFTYPE_STATION && - sdata->vif.type != NL80211_IFTYPE_MESH_POINT && - sdata->vif.type != NL80211_IFTYPE_AP_VLAN && - sdata->vif.type != NL80211_IFTYPE_AP && - sdata->vif.type != NL80211_IFTYPE_ADHOC) - break; - - /* verify action_code is present */ - if (len < IEEE80211_MIN_ACTION_SIZE + 1) - break; - - switch (mgmt->u.action.u.addba_req.action_code) { - case WLAN_ACTION_ADDBA_REQ: - if (len < (IEEE80211_MIN_ACTION_SIZE + - sizeof(mgmt->u.action.u.addba_req))) - goto invalid; - break; - case WLAN_ACTION_ADDBA_RESP: - if (len < (IEEE80211_MIN_ACTION_SIZE + - sizeof(mgmt->u.action.u.addba_resp))) - goto invalid; - break; - case WLAN_ACTION_DELBA: - if (len < (IEEE80211_MIN_ACTION_SIZE + - sizeof(mgmt->u.action.u.delba))) - goto invalid; - break; - default: - goto invalid; - } - - goto queue; - case WLAN_CATEGORY_SPECTRUM_MGMT: - if (local->hw.conf.channel->band != IEEE80211_BAND_5GHZ) - break; - - if (sdata->vif.type != NL80211_IFTYPE_STATION) - break; - - /* verify action_code is present */ - if (len < IEEE80211_MIN_ACTION_SIZE + 1) - break; - - switch (mgmt->u.action.u.measurement.action_code) { - case WLAN_ACTION_SPCT_MSR_REQ: - if (len < (IEEE80211_MIN_ACTION_SIZE + - sizeof(mgmt->u.action.u.measurement))) - break; - ieee80211_process_measurement_req(sdata, mgmt, len); - goto handled; - case WLAN_ACTION_SPCT_CHL_SWITCH: - if (len < (IEEE80211_MIN_ACTION_SIZE + - sizeof(mgmt->u.action.u.chan_switch))) - break; - - if (sdata->vif.type != NL80211_IFTYPE_STATION) - break; - - if (compare_ether_addr(mgmt->bssid, sdata->u.mgd.bssid)) - break; - - goto queue; - } - break; - case WLAN_CATEGORY_SA_QUERY: - if (len < (IEEE80211_MIN_ACTION_SIZE + - sizeof(mgmt->u.action.u.sa_query))) - break; - - switch (mgmt->u.action.u.sa_query.action) { - case WLAN_ACTION_SA_QUERY_REQUEST: - if (sdata->vif.type != NL80211_IFTYPE_STATION) - break; - ieee80211_process_sa_query_req(sdata, mgmt, len); - goto handled; - } - break; - case WLAN_CATEGORY_SELF_PROTECTED: - switch (mgmt->u.action.u.self_prot.action_code) { - case WLAN_SP_MESH_PEERING_OPEN: - case WLAN_SP_MESH_PEERING_CLOSE: - case WLAN_SP_MESH_PEERING_CONFIRM: - if (!ieee80211_vif_is_mesh(&sdata->vif)) - goto invalid; - if (sdata->u.mesh.security != IEEE80211_MESH_SEC_NONE) - /* userspace handles this frame */ - break; - goto queue; - case WLAN_SP_MGK_INFORM: - case WLAN_SP_MGK_ACK: - if (!ieee80211_vif_is_mesh(&sdata->vif)) - goto invalid; - break; - } - break; - case WLAN_CATEGORY_MESH_ACTION: - if (!ieee80211_vif_is_mesh(&sdata->vif)) - break; - if (mesh_action_is_path_sel(mgmt) && - (!mesh_path_sel_is_hwmp(sdata))) - break; - goto queue; - } - - return RX_CONTINUE; - - invalid: - status->rx_flags |= IEEE80211_RX_MALFORMED_ACTION_FRM; - /* will return in the next handlers */ - return RX_CONTINUE; - - handled: - if (rx->sta) - rx->sta->rx_packets++; - dev_kfree_skb(rx->skb); - return RX_QUEUED; - - queue: - rx->skb->pkt_type = IEEE80211_SDATA_QUEUE_TYPE_FRAME; - skb_queue_tail(&sdata->skb_queue, rx->skb); - ieee80211_queue_work(&local->hw, &sdata->work); - if (rx->sta) - rx->sta->rx_packets++; - return RX_QUEUED; -} - -static ieee80211_rx_result debug_noinline -ieee80211_rx_h_userspace_mgmt(struct ieee80211_rx_data *rx) -{ - struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(rx->skb); - int sig = 0; - - /* skip known-bad action frames and return them in the next handler */ - if (status->rx_flags & IEEE80211_RX_MALFORMED_ACTION_FRM) - return RX_CONTINUE; - - /* - * Getting here means the kernel doesn't know how to handle - * it, but maybe userspace does ... include returned frames - * so userspace can register for those to know whether ones - * it transmitted were processed or returned. - */ - - if (rx->local->hw.flags & IEEE80211_HW_SIGNAL_DBM) - sig = status->signal; - - if (cfg80211_rx_mgmt(rx->sdata->dev, status->freq, sig, - rx->skb->data, rx->skb->len, - GFP_ATOMIC)) { - if (rx->sta) - rx->sta->rx_packets++; - dev_kfree_skb(rx->skb); - return RX_QUEUED; - } - - - return RX_CONTINUE; -} - -static ieee80211_rx_result debug_noinline -ieee80211_rx_h_action_return(struct ieee80211_rx_data *rx) -{ - struct ieee80211_local *local = rx->local; - struct ieee80211_mgmt *mgmt = (struct ieee80211_mgmt *) rx->skb->data; - struct sk_buff *nskb; - struct ieee80211_sub_if_data *sdata = rx->sdata; - struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(rx->skb); - - if (!ieee80211_is_action(mgmt->frame_control)) - return RX_CONTINUE; - - /* - * For AP mode, hostapd is responsible for handling any action - * frames that we didn't handle, including returning unknown - * ones. For all other modes we will return them to the sender, - * setting the 0x80 bit in the action category, as required by - * 802.11-2007 7.3.1.11. - * Newer versions of hostapd shall also use the management frame - * registration mechanisms, but older ones still use cooked - * monitor interfaces so push all frames there. - */ - if (!(status->rx_flags & IEEE80211_RX_MALFORMED_ACTION_FRM) && - (sdata->vif.type == NL80211_IFTYPE_AP || - sdata->vif.type == NL80211_IFTYPE_AP_VLAN)) - return RX_DROP_MONITOR; - - /* do not return rejected action frames */ - if (mgmt->u.action.category & 0x80) - return RX_DROP_UNUSABLE; - - nskb = skb_copy_expand(rx->skb, local->hw.extra_tx_headroom, 0, - GFP_ATOMIC); - if (nskb) { - struct ieee80211_mgmt *nmgmt = (void *)nskb->data; - - nmgmt->u.action.category |= 0x80; - memcpy(nmgmt->da, nmgmt->sa, ETH_ALEN); - memcpy(nmgmt->sa, rx->sdata->vif.addr, ETH_ALEN); - - memset(nskb->cb, 0, sizeof(nskb->cb)); - - ieee80211_tx_skb(rx->sdata, nskb); - } - dev_kfree_skb(rx->skb); - return RX_QUEUED; -} - -static ieee80211_rx_result debug_noinline -ieee80211_rx_h_mgmt(struct ieee80211_rx_data *rx) -{ - struct ieee80211_sub_if_data *sdata = rx->sdata; - struct ieee80211_mgmt *mgmt = (void *)rx->skb->data; - __le16 stype; - - stype = mgmt->frame_control & cpu_to_le16(IEEE80211_FCTL_STYPE); - - if (!ieee80211_vif_is_mesh(&sdata->vif) && - sdata->vif.type != NL80211_IFTYPE_ADHOC && - sdata->vif.type != NL80211_IFTYPE_STATION) - return RX_DROP_MONITOR; - - switch (stype) { - case cpu_to_le16(IEEE80211_STYPE_AUTH): - case cpu_to_le16(IEEE80211_STYPE_BEACON): - case cpu_to_le16(IEEE80211_STYPE_PROBE_RESP): - /* process for all: mesh, mlme, ibss */ - break; - case cpu_to_le16(IEEE80211_STYPE_ASSOC_RESP): - case cpu_to_le16(IEEE80211_STYPE_REASSOC_RESP): - case cpu_to_le16(IEEE80211_STYPE_DEAUTH): - case cpu_to_le16(IEEE80211_STYPE_DISASSOC): - if (is_multicast_ether_addr(mgmt->da) && - !is_broadcast_ether_addr(mgmt->da)) - return RX_DROP_MONITOR; - - /* process only for station */ - if (sdata->vif.type != NL80211_IFTYPE_STATION) - return RX_DROP_MONITOR; - break; - case cpu_to_le16(IEEE80211_STYPE_PROBE_REQ): - /* process only for ibss */ - if (sdata->vif.type != NL80211_IFTYPE_ADHOC) - return RX_DROP_MONITOR; - break; - default: - return RX_DROP_MONITOR; - } - - /* queue up frame and kick off work to process it */ - rx->skb->pkt_type = IEEE80211_SDATA_QUEUE_TYPE_FRAME; - skb_queue_tail(&sdata->skb_queue, rx->skb); - ieee80211_queue_work(&rx->local->hw, &sdata->work); - if (rx->sta) - rx->sta->rx_packets++; - - return RX_QUEUED; -} - -/* TODO: use IEEE80211_RX_FRAGMENTED */ -static void ieee80211_rx_cooked_monitor(struct ieee80211_rx_data *rx, - struct ieee80211_rate *rate) -{ - struct ieee80211_sub_if_data *sdata; - struct ieee80211_local *local = rx->local; - struct sk_buff *skb = rx->skb, *skb2; - struct net_device *prev_dev = NULL; - struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb); - int needed_headroom; - - /* - * If cooked monitor has been processed already, then - * don't do it again. If not, set the flag. - */ - if (rx->flags & IEEE80211_RX_CMNTR) - goto out_free_skb; - rx->flags |= IEEE80211_RX_CMNTR; - - /* If there are no cooked monitor interfaces, just free the SKB */ - if (!local->cooked_mntrs) - goto out_free_skb; - - /* room for the radiotap header based on driver features */ - needed_headroom = ieee80211_rx_radiotap_len(local, status); - - if (skb_headroom(skb) < needed_headroom && - pskb_expand_head(skb, needed_headroom, 0, GFP_ATOMIC)) - goto out_free_skb; - - /* prepend radiotap information */ - ieee80211_add_rx_radiotap_header(local, skb, rate, needed_headroom); - - skb_set_mac_header(skb, 0); - skb->ip_summed = CHECKSUM_UNNECESSARY; - skb->pkt_type = PACKET_OTHERHOST; - skb->protocol = htons(ETH_P_802_2); - - list_for_each_entry_rcu(sdata, &local->interfaces, list) { - if (!ieee80211_sdata_running(sdata)) - continue; - - if (sdata->vif.type != NL80211_IFTYPE_MONITOR || - !(sdata->u.mntr_flags & MONITOR_FLAG_COOK_FRAMES)) - continue; - - if (prev_dev) { - skb2 = skb_clone(skb, GFP_ATOMIC); - if (skb2) { - skb2->dev = prev_dev; - netif_receive_skb(skb2); - } - } - - prev_dev = sdata->dev; - sdata->dev->stats.rx_packets++; - sdata->dev->stats.rx_bytes += skb->len; - } - - if (prev_dev) { - skb->dev = prev_dev; - netif_receive_skb(skb); - return; - } - - out_free_skb: - dev_kfree_skb(skb); -} - -static void ieee80211_rx_handlers_result(struct ieee80211_rx_data *rx, - ieee80211_rx_result res) -{ - switch (res) { - case RX_DROP_MONITOR: - I802_DEBUG_INC(rx->sdata->local->rx_handlers_drop); - if (rx->sta) - rx->sta->rx_dropped++; - /* fall through */ - case RX_CONTINUE: { - struct ieee80211_rate *rate = NULL; - struct ieee80211_supported_band *sband; - struct ieee80211_rx_status *status; - - status = IEEE80211_SKB_RXCB((rx->skb)); - - sband = rx->local->hw.wiphy->bands[status->band]; - if (!(status->flag & RX_FLAG_HT)) - rate = &sband->bitrates[status->rate_idx]; - - ieee80211_rx_cooked_monitor(rx, rate); - break; - } - case RX_DROP_UNUSABLE: - I802_DEBUG_INC(rx->sdata->local->rx_handlers_drop); - if (rx->sta) - rx->sta->rx_dropped++; - dev_kfree_skb(rx->skb); - break; - case RX_QUEUED: - I802_DEBUG_INC(rx->sdata->local->rx_handlers_queued); - break; - } -} - -static void ieee80211_rx_handlers(struct ieee80211_rx_data *rx) -{ - ieee80211_rx_result res = RX_DROP_MONITOR; - struct sk_buff *skb; - -#ifdef CONFIG_MAC80211_VERBOSE_DEBUG - printk(KERN_DEBUG "-- -- -- ieee80211_rx_handlers \n"); -#endif - -#define CALL_RXH(rxh) \ - do { \ - res = rxh(rx); \ - if (res != RX_CONTINUE) \ - goto rxh_next; \ - } while (0); - - spin_lock(&rx->local->rx_skb_queue.lock); - if (rx->local->running_rx_handler) - goto unlock; - - rx->local->running_rx_handler = true; - - while ((skb = __skb_dequeue(&rx->local->rx_skb_queue))) { - spin_unlock(&rx->local->rx_skb_queue.lock); - - /* - * all the other fields are valid across frames - * that belong to an aMPDU since they are on the - * same TID from the same station - */ - rx->skb = skb; - if((rx->local->hw.wiphy->dot11OCBActivated == 0) || !(rx->local->hw.flags & IEEE80211_HW_DOT11OCB_SUPPORTED)) - { - CALL_RXH(ieee80211_rx_h_decrypt) // [PLATA] - no use for the OCB mode - CALL_RXH(ieee80211_rx_h_check_more_data) // [PLATA] - no use as we do not POLL in OCB - CALL_RXH(ieee80211_rx_h_uapsd_and_pspoll) // [PLATA] - no use as we do not poll (if AD_HOC, return) - } - CALL_RXH(ieee80211_rx_h_sta_process) // [PLATA]: does not do much but should not interfer.. - - if((rx->local->hw.wiphy->dot11OCBActivated == 0) || !(rx->local->hw.flags & IEEE80211_HW_DOT11OCB_SUPPORTED)) - { - CALL_RXH(ieee80211_rx_h_defragment) // [PLATA] - fragmentation NOT supported so far.. - } - - if((rx->local->hw.wiphy->dot11OCBActivated == 0) || !(rx->local->hw.flags & IEEE80211_HW_DOT11OCB_SUPPORTED)) - { - CALL_RXH(ieee80211_rx_h_michael_mic_verify) // [PLATA]: probably not necessary as no encryption - } - /* must be after MMIC verify so header is counted in MPDU mic */ -#ifdef CONFIG_MAC80211_MESH - if (ieee80211_vif_is_mesh(&rx->sdata->vif)) - CALL_RXH(ieee80211_rx_h_mesh_fwding); -#endif - CALL_RXH(ieee80211_rx_h_amsdu) // [PLATA]: can be left here..no change - // [PLATA] should probably avoid this method...as only used to put back a packet to the skb for AP relaying.. - CALL_RXH(ieee80211_rx_h_data) // [PLATA]: to double check..important calls (to deliver_skb notably - uncompleted part...TBC - /* - * [PLATA] - in this version of PLATA, we do not support these frames...or the OCB activated ignores management frames - * - * !!!! IMPORTANT !!!! - the previous call will exist in case of data packets (it returns RX_QUEUED and as such jumps to rxh_next) - * - so the rest of the code should always be ignored in this version of PLATA (we only support DATA packets) - */ - if((rx->local->hw.wiphy->dot11OCBActivated == 0) || !(rx->local->hw.flags & IEEE80211_HW_DOT11OCB_SUPPORTED)) - { - CALL_RXH(ieee80211_rx_h_ctrl); // [PLATA] - not important, we do not have control frames - CALL_RXH(ieee80211_rx_h_mgmt_check) // [PLATA] - if OCB is activated, ignore as we do not have management frames (we do not monitor using beacons..) - CALL_RXH(ieee80211_rx_h_action) // [PLATA] - not sure..probably not useful - CALL_RXH(ieee80211_rx_h_userspace_mgmt) // [PLATA] - can be ignored...we do not use managmenet at userspace yet - - CALL_RXH(ieee80211_rx_h_action_return) // [PLATA] - linked to the action method..not useful here - - CALL_RXH(ieee80211_rx_h_mgmt) // [PLATA] - when OCB is activated, we shall not enter this method (we do not process mgmt frames such as auth, beacons, assoc etc.. - } - - rxh_next: - ieee80211_rx_handlers_result(rx, res); -#ifdef CONFIG_MAC80211_VERBOSE_DEBUG - printk(KERN_DEBUG "-- -- -- ieee80211_rx_handlers -- RX completed at MAC -- finishing process \n"); -#endif - spin_lock(&rx->local->rx_skb_queue.lock); -#undef CALL_RXH - } - - rx->local->running_rx_handler = false; - - unlock: - spin_unlock(&rx->local->rx_skb_queue.lock); -} - -static void ieee80211_invoke_rx_handlers(struct ieee80211_rx_data *rx) -{ - ieee80211_rx_result res = RX_DROP_MONITOR; - -#ifdef CONFIG_MAC80211_VERBOSE_DEBUG - printk(KERN_DEBUG "-- -- -- ieee80211_invoke_rx_handers \n"); -#endif - -#define CALL_RXH(rxh) \ - do { \ - res = rxh(rx); \ - if (res != RX_CONTINUE) \ - goto rxh_next; \ - } while (0); - - /* - * [PLATA] - we exit immediately if OCB is activated - */ - CALL_RXH(ieee80211_rx_h_passive_scan) - /* - * [PLATA] we do not do much in this part, as we do not do retransmission (and we most probably do not have a rx->sta) and we are ADHOC mode. - * - worst case: we update the receiving statistics.. - */ - CALL_RXH(ieee80211_rx_h_check) - - ieee80211_rx_reorder_ampdu(rx); - - ieee80211_rx_handlers(rx); - return; - - rxh_next: - ieee80211_rx_handlers_result(rx, res); - -#undef CALL_RXH -} - -/* - * This function makes calls into the RX path, therefore - * it has to be invoked under RCU read lock. - */ -void ieee80211_release_reorder_timeout(struct sta_info *sta, int tid) -{ - struct ieee80211_rx_data rx = { - .sta = sta, - .sdata = sta->sdata, - .local = sta->local, - /* This is OK -- must be QoS data frame */ - .security_idx = tid, - .seqno_idx = tid, - .flags = 0, - }; - struct tid_ampdu_rx *tid_agg_rx; - - tid_agg_rx = rcu_dereference(sta->ampdu_mlme.tid_rx[tid]); - if (!tid_agg_rx) - return; - - spin_lock(&tid_agg_rx->reorder_lock); - ieee80211_sta_reorder_release(&sta->local->hw, tid_agg_rx); - spin_unlock(&tid_agg_rx->reorder_lock); - - ieee80211_rx_handlers(&rx); -} - -/* main receive path */ -/* - * [PLATA] - considering the ADHOC mode and OCB activated, we - */ - -static int prepare_for_handlers(struct ieee80211_rx_data *rx, - struct ieee80211_hdr *hdr) -{ - struct ieee80211_sub_if_data *sdata = rx->sdata; - struct sk_buff *skb = rx->skb; - struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb); - u8 *bssid = ieee80211_get_bssid(hdr, skb->len, sdata->vif.type); // [PLATA] - should return the WildCard BSSID - int multicast = is_multicast_ether_addr(hdr->addr1); - - switch (sdata->vif.type) { - case NL80211_IFTYPE_STATION: - if (!bssid && !sdata->u.mgd.use_4addr) // no BSSID and not using all 4 addresses (as we would not have a BSSID in that case) - return 0; - if (!multicast && - compare_ether_addr(sdata->vif.addr, hdr->addr1) != 0) { // packet NOT for me - if (!(sdata->dev->flags & IFF_PROMISC) || - sdata->u.mgd.use_4addr) // if not Promi. mode OR if I use all four addresses - return 0; - status->rx_flags &= ~IEEE80211_RX_RA_MATCH; - } - break; - case NL80211_IFTYPE_ADHOC: - if (!bssid) - return 0; - if (ieee80211_is_beacon(hdr->frame_control)) { - return 1; - } - else if (!ieee80211_bssid_match(bssid, sdata->u.ibss.bssid)) { // do not have the same BSSID - [PLATA] - should not enter here as the wildcard BSSID makes it return true - if (!(status->rx_flags & IEEE80211_RX_IN_SCAN)) // not in SCAN MODE - return 0; - status->rx_flags &= ~IEEE80211_RX_RA_MATCH; - } else if (!multicast && - compare_ether_addr(sdata->vif.addr, - hdr->addr1) != 0) { // [PLATA]: not a multicast and packet is NOT for me TODO what about broadcast?? - if (!(sdata->dev->flags & IFF_PROMISC)) // not in Promisc Mode - return 0; - status->rx_flags &= ~IEEE80211_RX_RA_MATCH; - } else if (!rx->sta) { // [PLATA] do we enter here?? ...probably upon a first receive from an uknown IF, and if multicast, or broadcast or unicast and packet for me - int rate_idx; - if (status->flag & RX_FLAG_HT) // [PLATA] - we do not enter here... - rate_idx = 0; /* TODO: HT rates */ - else - rate_idx = status->rate_idx; - /* - * [PLATA] In OCB Mode, as we do not use Beacon, there is a high chance that a receiving STA does not have a reference to the sender STA - * - we enter here, even though we will not do much - * - as in OCB (similary to the IBSS and BSS using a wildcard BSSID), we have spontaneous communication and as such do not create an entry for remote sta - */ - - ieee80211_ibss_rx_no_sta(sdata, bssid, hdr->addr2, - BIT(rate_idx)); // trigger an IBSS receive...in case the local STA does not have a sta reference for the original sender in this IBSS (said differently, it means this sender was not part of the IBSS)... - } - break; - case NL80211_IFTYPE_MESH_POINT: - if (!multicast && - compare_ether_addr(sdata->vif.addr, - hdr->addr1) != 0) { - if (!(sdata->dev->flags & IFF_PROMISC)) - return 0; - - status->rx_flags &= ~IEEE80211_RX_RA_MATCH; - } - break; - case NL80211_IFTYPE_AP_VLAN: - case NL80211_IFTYPE_AP: - if (!bssid) { - if (compare_ether_addr(sdata->vif.addr, - hdr->addr1)) - return 0; - } else if (!ieee80211_bssid_match(bssid, - sdata->vif.addr)) { - /* - * Accept public action frames even when the - * BSSID doesn't match, this is used for P2P - * and location updates. Note that mac80211 - * itself never looks at these frames. - */ - if (!(status->rx_flags & IEEE80211_RX_IN_SCAN) && - ieee80211_is_public_action(hdr, skb->len)) - return 1; - if (!(status->rx_flags & IEEE80211_RX_IN_SCAN) && - !ieee80211_is_beacon(hdr->frame_control)) - return 0; - status->rx_flags &= ~IEEE80211_RX_RA_MATCH; - } - break; - case NL80211_IFTYPE_WDS: - if (bssid || !ieee80211_is_data(hdr->frame_control)) - return 0; - if (compare_ether_addr(sdata->u.wds.remote_addr, hdr->addr2)) - return 0; - break; - default: - /* should never get here */ - WARN_ON(1); - break; - } - - return 1; -} - -/* - * This function returns whether or not the SKB - * was destined for RX processing or not, which, - * if consume is true, is equivalent to whether - * or not the skb was consumed. - */ -static bool ieee80211_prepare_and_rx_handle(struct ieee80211_rx_data *rx, - struct sk_buff *skb, bool consume) -{ - struct ieee80211_local *local = rx->local; - struct ieee80211_sub_if_data *sdata = rx->sdata; - struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb); - struct ieee80211_hdr *hdr = (void *)skb->data; - int prepares; - -#ifdef CONFIG_MAC80211_VERBOSE_DEBUG - printk(KERN_DEBUG "-- -- %s ieee80211_prepare_and_rx_handle \n", sdata->name); -#endif - - rx->skb = skb; - status->rx_flags |= IEEE80211_RX_RA_MATCH; - prepares = prepare_for_handlers(rx, hdr); // [PLATA] - check to be completed..important filter flags - - if (!prepares) - return false; - - if (!consume) { // [PLATA] - first time we call it (we did not consume the SKB so far) - very likely in case of BROADCAST - skb = skb_copy(skb, GFP_ATOMIC); - if (!skb) { - if (net_ratelimit()) - wiphy_debug(local->hw.wiphy, - "failed to copy skb for %s\n", - sdata->name); - return true; - } - - rx->skb = skb; - } - - ieee80211_invoke_rx_handlers(rx); - return true; -} - -/* - * This is the actual Rx frames handler. as it blongs to Rx path it must - * be called with rcu_read_lock protection. - */ -static void __ieee80211_rx_handle_packet(struct ieee80211_hw *hw, - struct sk_buff *skb) -{ - struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb); - struct ieee80211_local *local = hw_to_local(hw); - struct ieee80211_sub_if_data *sdata; - struct ieee80211_hdr *hdr; - __le16 fc; - struct ieee80211_rx_data rx; - struct ieee80211_sub_if_data *prev; - struct sta_info *sta, *tmp, *prev_sta; - int err = 0; - -#ifdef CONFIG_MAC80211_VERBOSE_DEBUG - printk(KERN_DEBUG "-- __ieee80211_rx_handle_packet \n"); -#endif - - fc = ((struct ieee80211_hdr *)skb->data)->frame_control; - memset(&rx, 0, sizeof(rx)); - rx.skb = skb; - rx.local = local; - - if (ieee80211_is_data(fc) || ieee80211_is_mgmt(fc)) - local->dot11ReceivedFragmentCount++; - - if (unlikely(test_bit(SCAN_HW_SCANNING, &local->scanning) || - test_bit(SCAN_SW_SCANNING, &local->scanning))) - status->rx_flags |= IEEE80211_RX_IN_SCAN; - - if (ieee80211_is_mgmt(fc)) - err = skb_linearize(skb); - else - err = !pskb_may_pull(skb, ieee80211_hdrlen(fc)); - - if (err) { - dev_kfree_skb(skb); - return; - } - - hdr = (struct ieee80211_hdr *)skb->data; - /* - * [PLATA] even for non-QoS packet, we still need to get a queue priority (here 0 as we only have one queue) - */ - ieee80211_parse_qos(&rx); - ieee80211_verify_alignment(&rx); - - if (ieee80211_is_data(fc)) { - prev_sta = NULL; - - /* - * [PLATA] - hdr->addr2 is the source address - check if the STA has already been registered by this local sta - */ - for_each_sta_info(local, hdr->addr2, sta, tmp) { - if (!prev_sta) { - prev_sta = sta; - continue; - } - - rx.sta = prev_sta; - rx.sdata = prev_sta->sdata; -#ifdef CONFIG_MAC80211_VERBOSE_DEBUG - printk(KERN_DEBUG "-- -- %s cycling over all known remote sta for address %pM \n", sdata->name, hdr->addr2); -#endif - ieee80211_prepare_and_rx_handle(&rx, skb, false); - - prev_sta = sta; - } - - if (prev_sta) { - rx.sta = prev_sta; - rx.sdata = prev_sta->sdata; - -#ifdef CONFIG_MAC80211_VERBOSE_DEBUG - printk(KERN_DEBUG "-- -- %s LAST cycling over all known remote sta for address %pM \n", sdata->name, hdr->addr2); -#endif - if (ieee80211_prepare_and_rx_handle(&rx, skb, true)) - return; - goto out; - } - } - - prev = NULL; - - list_for_each_entry_rcu(sdata, &local->interfaces, list) { - if (!ieee80211_sdata_running(sdata)) - continue; - - if (sdata->vif.type == NL80211_IFTYPE_MONITOR || - sdata->vif.type == NL80211_IFTYPE_AP_VLAN) - continue; - - /* - * frame is destined for this interface, but if it's - * not also for the previous one we handle that after - * the loop to avoid copying the SKB once too much - */ - - if (!prev) { - prev = sdata; - continue; - } - -#ifdef CONFIG_MAC80211_VERBOSE_DEBUG - printk(KERN_DEBUG "-- -- %s cycling over all interfaces attached \n", sdata->name); -#endif - - rx.sta = sta_info_get_bss(prev, hdr->addr2); - rx.sdata = prev; - ieee80211_prepare_and_rx_handle(&rx, skb, false); - - prev = sdata; - } - - if (prev) { - rx.sta = sta_info_get_bss(prev, hdr->addr2); - rx.sdata = prev; - -#ifdef CONFIG_MAC80211_VERBOSE_DEBUG - printk(KERN_DEBUG "-- -- %s LAST cycling over all interfaces attached \n", sdata->name); -#endif - - if (ieee80211_prepare_and_rx_handle(&rx, skb, true)) - return; - } - - out: - dev_kfree_skb(skb); -} - -/* - * This is the receive path handler. It is called by a low level driver when an - * 802.11 MPDU is received from the hardware. - */ -void ieee80211_rx(struct ieee80211_hw *hw, struct sk_buff *skb) -{ - struct ieee80211_local *local = hw_to_local(hw); - struct ieee80211_rate *rate = NULL; - struct ieee80211_supported_band *sband; - struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb); - - WARN_ON_ONCE(softirq_count() == 0); - -#ifdef CONFIG_MAC80211_VERBOSE_DEBUG - printk(KERN_DEBUG "-- -- DRIVER Called ieee80211_rx - Entering MAC for RX mode -- \n"); -#endif - - if (WARN_ON(status->band < 0 || - status->band >= IEEE80211_NUM_BANDS)) - goto drop; - - sband = local->hw.wiphy->bands[status->band]; - if (WARN_ON(!sband)) - goto drop; - - /* - * If we're suspending, it is possible although not too likely - * that we'd be receiving frames after having already partially - * quiesced the stack. We can't process such frames then since - * that might, for example, cause stations to be added or other - * driver callbacks be invoked. - */ - if (unlikely(local->quiescing || local->suspended)) - goto drop; - - /* - * The same happens when we're not even started, - * but that's worth a warning. - */ - if (WARN_ON(!local->started)) - goto drop; - - if (likely(!(status->flag & RX_FLAG_FAILED_PLCP_CRC))) { - /* - * Validate the rate, unless a PLCP error means that - * we probably can't have a valid rate here anyway. - */ - - if (status->flag & RX_FLAG_HT) { - /* - * rate_idx is MCS index, which can be [0-76] - * as documented on: - * - * http://wireless.kernel.org/en/developers/Documentation/ieee80211/802.11n - * - * Anything else would be some sort of driver or - * hardware error. The driver should catch hardware - * errors. - */ - if (WARN((status->rate_idx < 0 || - status->rate_idx > 76), - "Rate marked as an HT rate but passed " - "status->rate_idx is not " - "an MCS index [0-76]: %d (0x%02x)\n", - status->rate_idx, - status->rate_idx)) - goto drop; - } else { - if (WARN_ON(status->rate_idx < 0 || - status->rate_idx >= sband->n_bitrates)) - goto drop; - rate = &sband->bitrates[status->rate_idx]; - } - } - - status->rx_flags = 0; - - /* - * key references and virtual interfaces are protected using RCU - * and this requires that we are in a read-side RCU section during - * receive processing - */ - rcu_read_lock(); - - /* - * Frames with failed FCS/PLCP checksum are not returned, - * all other frames are returned without radiotap header - * if it was previously present. - * Also, frames with less than 16 bytes are dropped. - */ - /* - * [PLATA] - we do not support monitoring in this version of PLATA - * - we should bypass it... - */ - /*skb = ieee80211_rx_monitor(local, skb, rate); - if (!skb) { - rcu_read_unlock(); - return; - }*/ - - ieee80211_tpt_led_trig_rx(local, - ((struct ieee80211_hdr *)skb->data)->frame_control, - skb->len); - __ieee80211_rx_handle_packet(hw, skb); - - rcu_read_unlock(); - -#ifdef CONFIG_MAC80211_VERBOSE_DEBUG - printk(KERN_DEBUG "-- RX Process at MAC -- Complete\n"); -#endif - return; - drop: - printk(KERN_DEBUG "-- RX Process at MAC -- Drop\n"); - kfree_skb(skb); -} -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,32)) -EXPORT_SYMBOL(ieee80211_rx); -#else -EXPORT_SYMBOL(mac80211_ieee80211_rx); -#endif - - -/* This is a version of the rx handler that can be called from hard irq - * context. Post the skb on the queue and schedule the tasklet */ -void ieee80211_rx_irqsafe(struct ieee80211_hw *hw, struct sk_buff *skb) -{ - struct ieee80211_local *local = hw_to_local(hw); - - BUILD_BUG_ON(sizeof(struct ieee80211_rx_status) > sizeof(skb->cb)); - - skb->pkt_type = IEEE80211_RX_MSG; - skb_queue_tail(&local->skb_queue, skb); - tasklet_schedule(&local->tasklet); -} -EXPORT_SYMBOL(ieee80211_rx_irqsafe); diff --git a/openairITS/mac/DOT11/net/mac80211/scan.c b/openairITS/mac/DOT11/net/mac80211/scan.c deleted file mode 100644 index c70e176771..0000000000 --- a/openairITS/mac/DOT11/net/mac80211/scan.c +++ /dev/null @@ -1,974 +0,0 @@ -/* - * Scanning implementation - * - * Copyright 2003, Jouni Malinen - * Copyright 2004, Instant802 Networks, Inc. - * Copyright 2005, Devicescape Software, Inc. - * Copyright 2006-2007 Jiri Benc - * Copyright 2007, Michael Wu - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - */ - -#include -#include -#include -#include -#include -#include -#include -#include - -#include "ieee80211_i.h" -#include "driver-ops.h" -#include "mesh.h" - -#define IEEE80211_PROBE_DELAY (HZ / 33) -#define IEEE80211_CHANNEL_TIME (HZ / 33) -#define IEEE80211_PASSIVE_CHANNEL_TIME (HZ / 8) - -struct ieee80211_bss * -ieee80211_rx_bss_get(struct ieee80211_local *local, u8 *bssid, int freq, - u8 *ssid, u8 ssid_len) -{ - struct cfg80211_bss *cbss; - - cbss = cfg80211_get_bss(local->hw.wiphy, - ieee80211_get_channel(local->hw.wiphy, freq), - bssid, ssid, ssid_len, 0, 0); - if (!cbss) - return NULL; - return (void *)cbss->priv; -} - -static void ieee80211_rx_bss_free(struct cfg80211_bss *cbss) -{ - struct ieee80211_bss *bss = (void *)cbss->priv; - - kfree(bss_mesh_id(bss)); - kfree(bss_mesh_cfg(bss)); -} - -void ieee80211_rx_bss_put(struct ieee80211_local *local, - struct ieee80211_bss *bss) -{ - if (!bss) - return; - cfg80211_put_bss(container_of((void *)bss, struct cfg80211_bss, priv)); -} - -static bool is_uapsd_supported(struct ieee802_11_elems *elems) -{ - u8 qos_info; - - if (elems->wmm_info && elems->wmm_info_len == 7 - && elems->wmm_info[5] == 1) - qos_info = elems->wmm_info[6]; - else if (elems->wmm_param && elems->wmm_param_len == 24 - && elems->wmm_param[5] == 1) - qos_info = elems->wmm_param[6]; - else - /* no valid wmm information or parameter element found */ - return false; - - return qos_info & IEEE80211_WMM_IE_AP_QOSINFO_UAPSD; -} - -struct ieee80211_bss * -ieee80211_bss_info_update(struct ieee80211_local *local, - struct ieee80211_rx_status *rx_status, - struct ieee80211_mgmt *mgmt, - size_t len, - struct ieee802_11_elems *elems, - struct ieee80211_channel *channel, - bool beacon) -{ - struct cfg80211_bss *cbss; - struct ieee80211_bss *bss; - int clen, srlen; - s32 signal = 0; - - if (local->hw.flags & IEEE80211_HW_SIGNAL_DBM) - signal = rx_status->signal * 100; - else if (local->hw.flags & IEEE80211_HW_SIGNAL_UNSPEC) - signal = (rx_status->signal * 100) / local->hw.max_signal; - - cbss = cfg80211_inform_bss_frame(local->hw.wiphy, channel, - mgmt, len, signal, GFP_ATOMIC); - - if (!cbss) - return NULL; - - cbss->free_priv = ieee80211_rx_bss_free; - bss = (void *)cbss->priv; - - if (elems->parse_error) { - if (beacon) - bss->corrupt_data |= IEEE80211_BSS_CORRUPT_BEACON; - else - bss->corrupt_data |= IEEE80211_BSS_CORRUPT_PROBE_RESP; - } else { - if (beacon) - bss->corrupt_data &= ~IEEE80211_BSS_CORRUPT_BEACON; - else - bss->corrupt_data &= ~IEEE80211_BSS_CORRUPT_PROBE_RESP; - } - - /* save the ERP value so that it is available at association time */ - if (elems->erp_info && elems->erp_info_len >= 1 && - (!elems->parse_error || - !(bss->valid_data & IEEE80211_BSS_VALID_ERP))) { - bss->erp_value = elems->erp_info[0]; - bss->has_erp_value = true; - if (!elems->parse_error) - bss->valid_data |= IEEE80211_BSS_VALID_ERP; - } - - if (elems->tim && (!elems->parse_error || - !(bss->valid_data & IEEE80211_BSS_VALID_DTIM))) { - struct ieee80211_tim_ie *tim_ie = - (struct ieee80211_tim_ie *)elems->tim; - bss->dtim_period = tim_ie->dtim_period; - if (!elems->parse_error) - bss->valid_data |= IEEE80211_BSS_VALID_DTIM; - } - - /* If the beacon had no TIM IE, or it was invalid, use 1 */ - if (beacon && !bss->dtim_period) - bss->dtim_period = 1; - - /* replace old supported rates if we get new values */ - if (!elems->parse_error || - !(bss->valid_data & IEEE80211_BSS_VALID_RATES)) { - srlen = 0; - if (elems->supp_rates) { - clen = IEEE80211_MAX_SUPP_RATES; - if (clen > elems->supp_rates_len) - clen = elems->supp_rates_len; - memcpy(bss->supp_rates, elems->supp_rates, clen); - srlen += clen; - } - if (elems->ext_supp_rates) { - clen = IEEE80211_MAX_SUPP_RATES - srlen; - if (clen > elems->ext_supp_rates_len) - clen = elems->ext_supp_rates_len; - memcpy(bss->supp_rates + srlen, elems->ext_supp_rates, - clen); - srlen += clen; - } - if (srlen) { - bss->supp_rates_len = srlen; - if (!elems->parse_error) - bss->valid_data |= IEEE80211_BSS_VALID_RATES; - } - } - - if (!elems->parse_error || - !(bss->valid_data & IEEE80211_BSS_VALID_WMM)) { - bss->wmm_used = elems->wmm_param || elems->wmm_info; - bss->uapsd_supported = is_uapsd_supported(elems); - if (!elems->parse_error) - bss->valid_data |= IEEE80211_BSS_VALID_WMM; - } - - if (!beacon) - bss->last_probe_resp = jiffies; - - return bss; -} - -ieee80211_rx_result -ieee80211_scan_rx(struct ieee80211_sub_if_data *sdata, struct sk_buff *skb) -{ - struct ieee80211_rx_status *rx_status = IEEE80211_SKB_RXCB(skb); - struct ieee80211_mgmt *mgmt; - struct ieee80211_bss *bss; - u8 *elements; - struct ieee80211_channel *channel; - size_t baselen; - int freq; - __le16 fc; - bool presp, beacon = false; - struct ieee802_11_elems elems; - - if (skb->len < 2) - return RX_DROP_UNUSABLE; - - mgmt = (struct ieee80211_mgmt *) skb->data; - fc = mgmt->frame_control; - - if (ieee80211_is_ctl(fc)) - return RX_CONTINUE; - - if (skb->len < 24) - return RX_CONTINUE; - - presp = ieee80211_is_probe_resp(fc); - if (presp) { - /* ignore ProbeResp to foreign address */ - if (compare_ether_addr(mgmt->da, sdata->vif.addr)) - return RX_DROP_MONITOR; - - presp = true; - elements = mgmt->u.probe_resp.variable; - baselen = offsetof(struct ieee80211_mgmt, u.probe_resp.variable); - } else { - beacon = ieee80211_is_beacon(fc); - baselen = offsetof(struct ieee80211_mgmt, u.beacon.variable); - elements = mgmt->u.beacon.variable; - } - - if (!presp && !beacon) - return RX_CONTINUE; - - if (baselen > skb->len) - return RX_DROP_MONITOR; - - ieee802_11_parse_elems(elements, skb->len - baselen, &elems); - - if (elems.ds_params && elems.ds_params_len == 1) - freq = ieee80211_channel_to_frequency(elems.ds_params[0], - rx_status->band); - else - freq = rx_status->freq; - - channel = ieee80211_get_channel(sdata->local->hw.wiphy, freq); - - if (!channel || channel->flags & IEEE80211_CHAN_DISABLED) - return RX_DROP_MONITOR; - - bss = ieee80211_bss_info_update(sdata->local, rx_status, - mgmt, skb->len, &elems, - channel, beacon); - if (bss) - ieee80211_rx_bss_put(sdata->local, bss); - - if (channel == sdata->local->oper_channel) - return RX_CONTINUE; - - dev_kfree_skb(skb); - return RX_QUEUED; -} - -/* return false if no more work */ -static bool ieee80211_prep_hw_scan(struct ieee80211_local *local) -{ - struct cfg80211_scan_request *req = local->scan_req; - enum ieee80211_band band; - int i, ielen, n_chans; - - do { - if (local->hw_scan_band == IEEE80211_NUM_BANDS) - return false; - - band = local->hw_scan_band; - n_chans = 0; - for (i = 0; i < req->n_channels; i++) { - if (req->channels[i]->band == band) { - local->hw_scan_req->channels[n_chans] = - req->channels[i]; - n_chans++; - } - } - - local->hw_scan_band++; - } while (!n_chans); - - local->hw_scan_req->n_channels = n_chans; - - ielen = ieee80211_build_preq_ies(local, (u8 *)local->hw_scan_req->ie, - req->ie, req->ie_len, band, - req->rates[band], 0); - local->hw_scan_req->ie_len = ielen; - local->hw_scan_req->no_cck = req->no_cck; - - return true; -} - -static void __ieee80211_scan_completed(struct ieee80211_hw *hw, bool aborted, - bool was_hw_scan) -{ - struct ieee80211_local *local = hw_to_local(hw); - - lockdep_assert_held(&local->mtx); - - /* - * It's ok to abort a not-yet-running scan (that - * we have one at all will be verified by checking - * local->scan_req next), but not to complete it - * successfully. - */ - if (WARN_ON(!local->scanning && !aborted)) - aborted = true; - - if (WARN_ON(!local->scan_req)) - return; - - if (was_hw_scan && !aborted && ieee80211_prep_hw_scan(local)) { - int rc = drv_hw_scan(local, local->scan_sdata, local->hw_scan_req); - if (rc == 0) - return; - } - - kfree(local->hw_scan_req); - local->hw_scan_req = NULL; - - if (local->scan_req != local->int_scan_req) - cfg80211_scan_done(local->scan_req, aborted); - local->scan_req = NULL; - local->scan_sdata = NULL; - - local->scanning = 0; - local->scan_channel = NULL; - - /* Set power back to normal operating levels. */ - ieee80211_hw_config(local, 0); - - if (!was_hw_scan) { - ieee80211_configure_filter(local); - drv_sw_scan_complete(local); - ieee80211_offchannel_return(local, true); - } - - ieee80211_recalc_idle(local); - - ieee80211_mlme_notify_scan_completed(local); - ieee80211_ibss_notify_scan_completed(local); - ieee80211_mesh_notify_scan_completed(local); - ieee80211_queue_work(&local->hw, &local->work_work); -} - -void ieee80211_scan_completed(struct ieee80211_hw *hw, bool aborted) -{ - struct ieee80211_local *local = hw_to_local(hw); - - trace_api_scan_completed(local, aborted); - - set_bit(SCAN_COMPLETED, &local->scanning); - if (aborted) - set_bit(SCAN_ABORTED, &local->scanning); - ieee80211_queue_delayed_work(&local->hw, &local->scan_work, 0); -} -EXPORT_SYMBOL(ieee80211_scan_completed); - -static int ieee80211_start_sw_scan(struct ieee80211_local *local) -{ - /* - * Hardware/driver doesn't support hw_scan, so use software - * scanning instead. First send a nullfunc frame with power save - * bit on so that AP will buffer the frames for us while we are not - * listening, then send probe requests to each channel and wait for - * the responses. After all channels are scanned, tune back to the - * original channel and send a nullfunc frame with power save bit - * off to trigger the AP to send us all the buffered frames. - * - * Note that while local->sw_scanning is true everything else but - * nullfunc frames and probe requests will be dropped in - * ieee80211_tx_h_check_assoc(). - */ - drv_sw_scan_start(local); - - local->leave_oper_channel_time = jiffies; - local->next_scan_state = SCAN_DECISION; - local->scan_channel_idx = 0; - - ieee80211_offchannel_stop_vifs(local, true); - - ieee80211_configure_filter(local); - - /* We need to set power level at maximum rate for scanning. */ - ieee80211_hw_config(local, 0); - - ieee80211_queue_delayed_work(&local->hw, - &local->scan_work, 0); - - return 0; -} - - -static int __ieee80211_start_scan(struct ieee80211_sub_if_data *sdata, - struct cfg80211_scan_request *req) -{ - struct ieee80211_local *local = sdata->local; - int rc; - - lockdep_assert_held(&local->mtx); - - if (local->scan_req) - return -EBUSY; - - if (!list_empty(&local->work_list)) { - /* wait for the work to finish/time out */ - local->scan_req = req; - local->scan_sdata = sdata; - return 0; - } - - if (local->ops->hw_scan) { - u8 *ies; - - local->hw_scan_req = kmalloc( - sizeof(*local->hw_scan_req) + - req->n_channels * sizeof(req->channels[0]) + - 2 + IEEE80211_MAX_SSID_LEN + local->scan_ies_len + - req->ie_len, GFP_KERNEL); - if (!local->hw_scan_req) - return -ENOMEM; - - local->hw_scan_req->ssids = req->ssids; - local->hw_scan_req->n_ssids = req->n_ssids; - ies = (u8 *)local->hw_scan_req + - sizeof(*local->hw_scan_req) + - req->n_channels * sizeof(req->channels[0]); - local->hw_scan_req->ie = ies; - - local->hw_scan_band = 0; - - /* - * After allocating local->hw_scan_req, we must - * go through until ieee80211_prep_hw_scan(), so - * anything that might be changed here and leave - * this function early must not go after this - * allocation. - */ - } - - local->scan_req = req; - local->scan_sdata = sdata; - - if (local->ops->hw_scan) - __set_bit(SCAN_HW_SCANNING, &local->scanning); - else - __set_bit(SCAN_SW_SCANNING, &local->scanning); - - ieee80211_recalc_idle(local); - - if (local->ops->hw_scan) { - WARN_ON(!ieee80211_prep_hw_scan(local)); - rc = drv_hw_scan(local, sdata, local->hw_scan_req); - } else - rc = ieee80211_start_sw_scan(local); - - if (rc) { - kfree(local->hw_scan_req); - local->hw_scan_req = NULL; - local->scanning = 0; - - ieee80211_recalc_idle(local); - - local->scan_req = NULL; - local->scan_sdata = NULL; - } - - return rc; -} - -static unsigned long -ieee80211_scan_get_channel_time(struct ieee80211_channel *chan) -{ - /* - * TODO: channel switching also consumes quite some time, - * add that delay as well to get a better estimation - */ - if (chan->flags & IEEE80211_CHAN_PASSIVE_SCAN) - return IEEE80211_PASSIVE_CHANNEL_TIME; - return IEEE80211_PROBE_DELAY + IEEE80211_CHANNEL_TIME; -} - -static void ieee80211_scan_state_decision(struct ieee80211_local *local, - unsigned long *next_delay) -{ - bool associated = false; - bool tx_empty = true; - bool bad_latency; - bool listen_int_exceeded; - unsigned long min_beacon_int = 0; - struct ieee80211_sub_if_data *sdata; - struct ieee80211_channel *next_chan; - - /* - * check if at least one STA interface is associated, - * check if at least one STA interface has pending tx frames - * and grab the lowest used beacon interval - */ - mutex_lock(&local->iflist_mtx); - list_for_each_entry(sdata, &local->interfaces, list) { - if (!ieee80211_sdata_running(sdata)) - continue; - - if (sdata->vif.type == NL80211_IFTYPE_STATION) { - if (sdata->u.mgd.associated) { - associated = true; - - if (sdata->vif.bss_conf.beacon_int < - min_beacon_int || min_beacon_int == 0) - min_beacon_int = - sdata->vif.bss_conf.beacon_int; - - if (!qdisc_all_tx_empty(sdata->dev)) { - tx_empty = false; - break; - } - } - } - } - mutex_unlock(&local->iflist_mtx); - - next_chan = local->scan_req->channels[local->scan_channel_idx]; - - /* - * we're currently scanning a different channel, let's - * see if we can scan another channel without interfering - * with the current traffic situation. - * - * Since we don't know if the AP has pending frames for us - * we can only check for our tx queues and use the current - * pm_qos requirements for rx. Hence, if no tx traffic occurs - * at all we will scan as many channels in a row as the pm_qos - * latency allows us to. Additionally we also check for the - * currently negotiated listen interval to prevent losing - * frames unnecessarily. - * - * Otherwise switch back to the operating channel. - */ - - bad_latency = time_after(jiffies + - ieee80211_scan_get_channel_time(next_chan), - local->leave_oper_channel_time + - usecs_to_jiffies(pm_qos_request(PM_QOS_NETWORK_LATENCY))); - - listen_int_exceeded = time_after(jiffies + - ieee80211_scan_get_channel_time(next_chan), - local->leave_oper_channel_time + - usecs_to_jiffies(min_beacon_int * 1024) * - local->hw.conf.listen_interval); - - if (associated && (!tx_empty || bad_latency || listen_int_exceeded)) - local->next_scan_state = SCAN_SUSPEND; - else - local->next_scan_state = SCAN_SET_CHANNEL; - - *next_delay = 0; -} - -static void ieee80211_scan_state_set_channel(struct ieee80211_local *local, - unsigned long *next_delay) -{ - int skip; - struct ieee80211_channel *chan; - - skip = 0; - chan = local->scan_req->channels[local->scan_channel_idx]; - - local->scan_channel = chan; - - if (ieee80211_hw_config(local, IEEE80211_CONF_CHANGE_CHANNEL)) - skip = 1; - - /* advance state machine to next channel/band */ - local->scan_channel_idx++; - - if (skip) { - /* if we skip this channel return to the decision state */ - local->next_scan_state = SCAN_DECISION; - return; - } - - /* - * Probe delay is used to update the NAV, cf. 11.1.3.2.2 - * (which unfortunately doesn't say _why_ step a) is done, - * but it waits for the probe delay or until a frame is - * received - and the received frame would update the NAV). - * For now, we do not support waiting until a frame is - * received. - * - * In any case, it is not necessary for a passive scan. - */ - if (chan->flags & IEEE80211_CHAN_PASSIVE_SCAN || - !local->scan_req->n_ssids) { - *next_delay = IEEE80211_PASSIVE_CHANNEL_TIME; - local->next_scan_state = SCAN_DECISION; - return; - } - - /* active scan, send probes */ - *next_delay = IEEE80211_PROBE_DELAY; - local->next_scan_state = SCAN_SEND_PROBE; -} - -static void ieee80211_scan_state_send_probe(struct ieee80211_local *local, - unsigned long *next_delay) -{ - int i; - struct ieee80211_sub_if_data *sdata = local->scan_sdata; - enum ieee80211_band band = local->hw.conf.channel->band; - - for (i = 0; i < local->scan_req->n_ssids; i++) - ieee80211_send_probe_req( - sdata, NULL, - local->scan_req->ssids[i].ssid, - local->scan_req->ssids[i].ssid_len, - local->scan_req->ie, local->scan_req->ie_len, - local->scan_req->rates[band], false, - local->scan_req->no_cck); - - /* - * After sending probe requests, wait for probe responses - * on the channel. - */ - *next_delay = IEEE80211_CHANNEL_TIME; - local->next_scan_state = SCAN_DECISION; -} - -static void ieee80211_scan_state_suspend(struct ieee80211_local *local, - unsigned long *next_delay) -{ - /* switch back to the operating channel */ - local->scan_channel = NULL; - ieee80211_hw_config(local, IEEE80211_CONF_CHANGE_CHANNEL); - - /* - * Re-enable vifs and beaconing. Leave PS - * in off-channel state..will put that back - * on-channel at the end of scanning. - */ - ieee80211_offchannel_return(local, false); - - *next_delay = HZ / 5; - /* afterwards, resume scan & go to next channel */ - local->next_scan_state = SCAN_RESUME; -} - -static void ieee80211_scan_state_resume(struct ieee80211_local *local, - unsigned long *next_delay) -{ - /* PS already is in off-channel mode */ - ieee80211_offchannel_stop_vifs(local, false); - - if (local->ops->flush) { - drv_flush(local, false); - *next_delay = 0; - } else - *next_delay = HZ / 10; - - /* remember when we left the operating channel */ - local->leave_oper_channel_time = jiffies; - - /* advance to the next channel to be scanned */ - local->next_scan_state = SCAN_SET_CHANNEL; -} - -void ieee80211_scan_work(struct work_struct *work) -{ - struct ieee80211_local *local = - container_of(work, struct ieee80211_local, scan_work.work); - struct ieee80211_sub_if_data *sdata; - unsigned long next_delay = 0; - bool aborted, hw_scan; - - mutex_lock(&local->mtx); - - sdata = local->scan_sdata; - - if (test_and_clear_bit(SCAN_COMPLETED, &local->scanning)) { - aborted = test_and_clear_bit(SCAN_ABORTED, &local->scanning); - goto out_complete; - } - - if (!sdata || !local->scan_req) - goto out; - - if (local->scan_req && !local->scanning) { - struct cfg80211_scan_request *req = local->scan_req; - int rc; - - local->scan_req = NULL; - local->scan_sdata = NULL; - - rc = __ieee80211_start_scan(sdata, req); - if (rc) { - /* need to complete scan in cfg80211 */ - local->scan_req = req; - aborted = true; - goto out_complete; - } else - goto out; - } - - /* - * Avoid re-scheduling when the sdata is going away. - */ - if (!ieee80211_sdata_running(sdata)) { - aborted = true; - goto out_complete; - } - - /* - * as long as no delay is required advance immediately - * without scheduling a new work - */ - do { - if (!ieee80211_sdata_running(sdata)) { - aborted = true; - goto out_complete; - } - - switch (local->next_scan_state) { - case SCAN_DECISION: - /* if no more bands/channels left, complete scan */ - if (local->scan_channel_idx >= local->scan_req->n_channels) { - aborted = false; - goto out_complete; - } - ieee80211_scan_state_decision(local, &next_delay); - break; - case SCAN_SET_CHANNEL: - ieee80211_scan_state_set_channel(local, &next_delay); - break; - case SCAN_SEND_PROBE: - ieee80211_scan_state_send_probe(local, &next_delay); - break; - case SCAN_SUSPEND: - ieee80211_scan_state_suspend(local, &next_delay); - break; - case SCAN_RESUME: - ieee80211_scan_state_resume(local, &next_delay); - break; - } - } while (next_delay == 0); - - ieee80211_queue_delayed_work(&local->hw, &local->scan_work, next_delay); - goto out; - -out_complete: - hw_scan = test_bit(SCAN_HW_SCANNING, &local->scanning); - __ieee80211_scan_completed(&local->hw, aborted, hw_scan); -out: - mutex_unlock(&local->mtx); -} - -int ieee80211_request_scan(struct ieee80211_sub_if_data *sdata, - struct cfg80211_scan_request *req) -{ - int res; - - mutex_lock(&sdata->local->mtx); - res = __ieee80211_start_scan(sdata, req); - mutex_unlock(&sdata->local->mtx); - - return res; -} - -int ieee80211_request_internal_scan(struct ieee80211_sub_if_data *sdata, - const u8 *ssid, u8 ssid_len, - struct ieee80211_channel *chan) -{ - struct ieee80211_local *local = sdata->local; - int ret = -EBUSY; - enum ieee80211_band band; - - mutex_lock(&local->mtx); - - /* busy scanning */ - if (local->scan_req) - goto unlock; - - /* fill internal scan request */ - if (!chan) { - int i, nchan = 0; - - for (band = 0; band < IEEE80211_NUM_BANDS; band++) { - if (!local->hw.wiphy->bands[band]) - continue; - for (i = 0; - i < local->hw.wiphy->bands[band]->n_channels; - i++) { - local->int_scan_req->channels[nchan] = - &local->hw.wiphy->bands[band]->channels[i]; - nchan++; - } - } - - local->int_scan_req->n_channels = nchan; - } else { - local->int_scan_req->channels[0] = chan; - local->int_scan_req->n_channels = 1; - } - - local->int_scan_req->ssids = &local->scan_ssid; - local->int_scan_req->n_ssids = 1; - memcpy(local->int_scan_req->ssids[0].ssid, ssid, IEEE80211_MAX_SSID_LEN); - local->int_scan_req->ssids[0].ssid_len = ssid_len; - - ret = __ieee80211_start_scan(sdata, sdata->local->int_scan_req); - unlock: - mutex_unlock(&local->mtx); - return ret; -} - -/* - * Only call this function when a scan can't be queued -- under RTNL. - */ -void ieee80211_scan_cancel(struct ieee80211_local *local) -{ - /* - * We are canceling software scan, or deferred scan that was not - * yet really started (see __ieee80211_start_scan ). - * - * Regarding hardware scan: - * - we can not call __ieee80211_scan_completed() as when - * SCAN_HW_SCANNING bit is set this function change - * local->hw_scan_req to operate on 5G band, what race with - * driver which can use local->hw_scan_req - * - * - we can not cancel scan_work since driver can schedule it - * by ieee80211_scan_completed(..., true) to finish scan - * - * Hence we only call the cancel_hw_scan() callback, but the low-level - * driver is still responsible for calling ieee80211_scan_completed() - * after the scan was completed/aborted. - */ - - mutex_lock(&local->mtx); - if (!local->scan_req) - goto out; - - if (test_bit(SCAN_HW_SCANNING, &local->scanning)) { - if (local->ops->cancel_hw_scan) - drv_cancel_hw_scan(local, local->scan_sdata); - goto out; - } - - /* - * If the work is currently running, it must be blocked on - * the mutex, but we'll set scan_sdata = NULL and it'll - * simply exit once it acquires the mutex. - */ - cancel_delayed_work(&local->scan_work); - /* and clean up */ - __ieee80211_scan_completed(&local->hw, true, false); -out: - mutex_unlock(&local->mtx); -} - -int ieee80211_request_sched_scan_start(struct ieee80211_sub_if_data *sdata, - struct cfg80211_sched_scan_request *req) -{ - struct ieee80211_local *local = sdata->local; - int ret, i; - - mutex_lock(&sdata->local->mtx); - - if (local->sched_scanning) { - ret = -EBUSY; - goto out; - } - - if (!local->ops->sched_scan_start) { - ret = -ENOTSUPP; - goto out; - } - - for (i = 0; i < IEEE80211_NUM_BANDS; i++) { - local->sched_scan_ies.ie[i] = kzalloc(2 + - IEEE80211_MAX_SSID_LEN + - local->scan_ies_len + - req->ie_len, - GFP_KERNEL); - if (!local->sched_scan_ies.ie[i]) { - ret = -ENOMEM; - goto out_free; - } - - local->sched_scan_ies.len[i] = - ieee80211_build_preq_ies(local, - local->sched_scan_ies.ie[i], - req->ie, req->ie_len, i, - (u32) -1, 0); - } - - ret = drv_sched_scan_start(local, sdata, req, - &local->sched_scan_ies); - if (ret == 0) { - local->sched_scanning = true; - goto out; - } - -out_free: - while (i > 0) - kfree(local->sched_scan_ies.ie[--i]); -out: - mutex_unlock(&sdata->local->mtx); - return ret; -} - -int ieee80211_request_sched_scan_stop(struct ieee80211_sub_if_data *sdata) -{ - struct ieee80211_local *local = sdata->local; - int ret = 0, i; - - mutex_lock(&sdata->local->mtx); - - if (!local->ops->sched_scan_stop) { - ret = -ENOTSUPP; - goto out; - } - - if (local->sched_scanning) { - for (i = 0; i < IEEE80211_NUM_BANDS; i++) - kfree(local->sched_scan_ies.ie[i]); - - drv_sched_scan_stop(local, sdata); - local->sched_scanning = false; - } -out: - mutex_unlock(&sdata->local->mtx); - - return ret; -} - -void ieee80211_sched_scan_results(struct ieee80211_hw *hw) -{ - struct ieee80211_local *local = hw_to_local(hw); - - trace_api_sched_scan_results(local); - - cfg80211_sched_scan_results(hw->wiphy); -} -EXPORT_SYMBOL(ieee80211_sched_scan_results); - -void ieee80211_sched_scan_stopped_work(struct work_struct *work) -{ - struct ieee80211_local *local = - container_of(work, struct ieee80211_local, - sched_scan_stopped_work); - int i; - - mutex_lock(&local->mtx); - - if (!local->sched_scanning) { - mutex_unlock(&local->mtx); - return; - } - - for (i = 0; i < IEEE80211_NUM_BANDS; i++) - kfree(local->sched_scan_ies.ie[i]); - - local->sched_scanning = false; - - mutex_unlock(&local->mtx); - - cfg80211_sched_scan_stopped(local->hw.wiphy); -} - -void ieee80211_sched_scan_stopped(struct ieee80211_hw *hw) -{ - struct ieee80211_local *local = hw_to_local(hw); - - trace_api_sched_scan_stopped(local); - - ieee80211_queue_work(&local->hw, &local->sched_scan_stopped_work); -} -EXPORT_SYMBOL(ieee80211_sched_scan_stopped); diff --git a/openairITS/mac/DOT11/net/mac80211/spectmgmt.c b/openairITS/mac/DOT11/net/mac80211/spectmgmt.c deleted file mode 100644 index 578eea3fc0..0000000000 --- a/openairITS/mac/DOT11/net/mac80211/spectmgmt.c +++ /dev/null @@ -1,82 +0,0 @@ -/* - * spectrum management - * - * Copyright 2003, Jouni Malinen - * Copyright 2002-2005, Instant802 Networks, Inc. - * Copyright 2005-2006, Devicescape Software, Inc. - * Copyright 2006-2007 Jiri Benc - * Copyright 2007, Michael Wu - * Copyright 2007-2008, Intel Corporation - * Copyright 2008, Johannes Berg - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - */ - -#include -#include -#include -#include "ieee80211_i.h" -#include "sta_info.h" -#include "wme.h" - -static void ieee80211_send_refuse_measurement_request(struct ieee80211_sub_if_data *sdata, - struct ieee80211_msrment_ie *request_ie, - const u8 *da, const u8 *bssid, - u8 dialog_token) -{ - struct ieee80211_local *local = sdata->local; - struct sk_buff *skb; - struct ieee80211_mgmt *msr_report; - - skb = dev_alloc_skb(sizeof(*msr_report) + local->hw.extra_tx_headroom + - sizeof(struct ieee80211_msrment_ie)); - if (!skb) - return; - - skb_reserve(skb, local->hw.extra_tx_headroom); - msr_report = (struct ieee80211_mgmt *)skb_put(skb, 24); - memset(msr_report, 0, 24); - memcpy(msr_report->da, da, ETH_ALEN); - memcpy(msr_report->sa, sdata->vif.addr, ETH_ALEN); - memcpy(msr_report->bssid, bssid, ETH_ALEN); - msr_report->frame_control = cpu_to_le16(IEEE80211_FTYPE_MGMT | - IEEE80211_STYPE_ACTION); - - skb_put(skb, 1 + sizeof(msr_report->u.action.u.measurement)); - msr_report->u.action.category = WLAN_CATEGORY_SPECTRUM_MGMT; - msr_report->u.action.u.measurement.action_code = - WLAN_ACTION_SPCT_MSR_RPRT; - msr_report->u.action.u.measurement.dialog_token = dialog_token; - - msr_report->u.action.u.measurement.element_id = WLAN_EID_MEASURE_REPORT; - msr_report->u.action.u.measurement.length = - sizeof(struct ieee80211_msrment_ie); - - memset(&msr_report->u.action.u.measurement.msr_elem, 0, - sizeof(struct ieee80211_msrment_ie)); - msr_report->u.action.u.measurement.msr_elem.token = request_ie->token; - msr_report->u.action.u.measurement.msr_elem.mode |= - IEEE80211_SPCT_MSR_RPRT_MODE_REFUSED; - msr_report->u.action.u.measurement.msr_elem.type = request_ie->type; - - ieee80211_tx_skb(sdata, skb); -} - -void ieee80211_process_measurement_req(struct ieee80211_sub_if_data *sdata, - struct ieee80211_mgmt *mgmt, - size_t len) -{ - /* - * Ignoring measurement request is spec violation. - * Mandatory measurements must be reported optional - * measurements might be refused or reported incapable - * For now just refuse - * TODO: Answer basic measurement as unmeasured - */ - ieee80211_send_refuse_measurement_request(sdata, - &mgmt->u.action.u.measurement.msr_elem, - mgmt->sa, mgmt->bssid, - mgmt->u.action.u.measurement.dialog_token); -} diff --git a/openairITS/mac/DOT11/net/mac80211/sta_info.c b/openairITS/mac/DOT11/net/mac80211/sta_info.c deleted file mode 100644 index 045fdaa75e..0000000000 --- a/openairITS/mac/DOT11/net/mac80211/sta_info.c +++ /dev/null @@ -1,1443 +0,0 @@ -/* - * Copyright 2002-2005, Instant802 Networks, Inc. - * Copyright 2006-2007 Jiri Benc - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include "ieee80211_i.h" -#include "driver-ops.h" -#include "rate.h" -#include "sta_info.h" -#include "debugfs_sta.h" -#include "mesh.h" -#include "wme.h" - -/** - * DOC: STA information lifetime rules - * - * STA info structures (&struct sta_info) are managed in a hash table - * for faster lookup and a list for iteration. They are managed using - * RCU, i.e. access to the list and hash table is protected by RCU. - * - * Upon allocating a STA info structure with sta_info_alloc(), the caller - * owns that structure. It must then insert it into the hash table using - * either sta_info_insert() or sta_info_insert_rcu(); only in the latter - * case (which acquires an rcu read section but must not be called from - * within one) will the pointer still be valid after the call. Note that - * the caller may not do much with the STA info before inserting it, in - * particular, it may not start any mesh peer link management or add - * encryption keys. - * - * When the insertion fails (sta_info_insert()) returns non-zero), the - * structure will have been freed by sta_info_insert()! - * - * Station entries are added by mac80211 when you establish a link with a - * peer. This means different things for the different type of interfaces - * we support. For a regular station this mean we add the AP sta when we - * receive an association response from the AP. For IBSS this occurs when - * get to know about a peer on the same IBSS. For WDS we add the sta for - * the peer immediately upon device open. When using AP mode we add stations - * for each respective station upon request from userspace through nl80211. - * - * In order to remove a STA info structure, various sta_info_destroy_*() - * calls are available. - * - * There is no concept of ownership on a STA entry, each structure is - * owned by the global hash table/list until it is removed. All users of - * the structure need to be RCU protected so that the structure won't be - * freed before they are done using it. - */ - -/* Caller must hold local->sta_mtx */ -static int sta_info_hash_del(struct ieee80211_local *local, - struct sta_info *sta) -{ - struct sta_info *s; - - s = rcu_dereference_protected(local->sta_hash[STA_HASH(sta->sta.addr)], - lockdep_is_held(&local->sta_mtx)); - if (!s) - return -ENOENT; - if (s == sta) { - rcu_assign_pointer(local->sta_hash[STA_HASH(sta->sta.addr)], - s->hnext); - return 0; - } - - while (rcu_access_pointer(s->hnext) && - rcu_access_pointer(s->hnext) != sta) - s = rcu_dereference_protected(s->hnext, - lockdep_is_held(&local->sta_mtx)); - if (rcu_access_pointer(s->hnext)) { - rcu_assign_pointer(s->hnext, sta->hnext); - return 0; - } - - return -ENOENT; -} - -/* protected by RCU */ -struct sta_info *sta_info_get(struct ieee80211_sub_if_data *sdata, - const u8 *addr) -{ - struct ieee80211_local *local = sdata->local; - struct sta_info *sta; - - sta = rcu_dereference_check(local->sta_hash[STA_HASH(addr)], - lockdep_is_held(&local->sta_mtx)); - while (sta) { - if (sta->sdata == sdata && - compare_ether_addr(sta->sta.addr, addr) == 0) - break; - sta = rcu_dereference_check(sta->hnext, - lockdep_is_held(&local->sta_mtx)); - } - return sta; -} - -/* - * Get sta info either from the specified interface - * or from one of its vlans - * - * [PLATA] - checks that the interface BSS is the same as the BSS in the packet. - * - here, if we have a BSS ID Wildcard BSSID in the sta AND in each packet, we should pass - */ -struct sta_info *sta_info_get_bss(struct ieee80211_sub_if_data *sdata, - const u8 *addr) -{ - struct ieee80211_local *local = sdata->local; - struct sta_info *sta; - - sta = rcu_dereference_check(local->sta_hash[STA_HASH(addr)], - lockdep_is_held(&local->sta_mtx)); - while (sta) { - if ((sta->sdata == sdata || - (sta->sdata->bss && sta->sdata->bss == sdata->bss)) && - compare_ether_addr(sta->sta.addr, addr) == 0) - break; - sta = rcu_dereference_check(sta->hnext, - lockdep_is_held(&local->sta_mtx)); - } - return sta; -} - -struct sta_info *sta_info_get_by_idx(struct ieee80211_sub_if_data *sdata, - int idx) -{ - struct ieee80211_local *local = sdata->local; - struct sta_info *sta; - int i = 0; - - list_for_each_entry_rcu(sta, &local->sta_list, list) { - if (sdata != sta->sdata) - continue; - if (i < idx) { - ++i; - continue; - } - return sta; - } - - return NULL; -} - -/** - * sta_info_free - free STA - * - * @local: pointer to the global information - * @sta: STA info to free - * - * This function must undo everything done by sta_info_alloc() - * that may happen before sta_info_insert(). It may only be - * called when sta_info_insert() has not been attempted (and - * if that fails, the station is freed anyway.) - */ -void sta_info_free(struct ieee80211_local *local, struct sta_info *sta) -{ - if (sta->rate_ctrl) - rate_control_free_sta(sta); - -#ifdef CONFIG_MAC80211_VERBOSE_DEBUG - wiphy_debug(local->hw.wiphy, "Destroyed STA %pM\n", sta->sta.addr); -#endif /* CONFIG_MAC80211_VERBOSE_DEBUG */ - - kfree(sta); -} - -/* Caller must hold local->sta_mtx */ -static void sta_info_hash_add(struct ieee80211_local *local, - struct sta_info *sta) -{ - lockdep_assert_held(&local->sta_mtx); - sta->hnext = local->sta_hash[STA_HASH(sta->sta.addr)]; - rcu_assign_pointer(local->sta_hash[STA_HASH(sta->sta.addr)], sta); -} - -static void sta_unblock(struct work_struct *wk) -{ - struct sta_info *sta; - - sta = container_of(wk, struct sta_info, drv_unblock_wk); - - if (sta->dead) - return; - - if (!test_sta_flag(sta, WLAN_STA_PS_STA)) { - local_bh_disable(); - ieee80211_sta_ps_deliver_wakeup(sta); - local_bh_enable(); - } else if (test_and_clear_sta_flag(sta, WLAN_STA_PSPOLL)) { - clear_sta_flag(sta, WLAN_STA_PS_DRIVER); - - local_bh_disable(); - ieee80211_sta_ps_deliver_poll_response(sta); - local_bh_enable(); - } else if (test_and_clear_sta_flag(sta, WLAN_STA_UAPSD)) { - clear_sta_flag(sta, WLAN_STA_PS_DRIVER); - - local_bh_disable(); - ieee80211_sta_ps_deliver_uapsd(sta); - local_bh_enable(); - } else - clear_sta_flag(sta, WLAN_STA_PS_DRIVER); -} - -static int sta_prepare_rate_control(struct ieee80211_local *local, - struct sta_info *sta, gfp_t gfp) -{ - if (local->hw.flags & IEEE80211_HW_HAS_RATE_CONTROL) - return 0; - - sta->rate_ctrl = local->rate_ctrl; - sta->rate_ctrl_priv = rate_control_alloc_sta(sta->rate_ctrl, - &sta->sta, gfp); - if (!sta->rate_ctrl_priv) - return -ENOMEM; - - return 0; -} - -struct sta_info *sta_info_alloc(struct ieee80211_sub_if_data *sdata, - const u8 *addr, gfp_t gfp) -{ - struct ieee80211_local *local = sdata->local; - struct sta_info *sta; - struct timespec uptime; - int i; - - sta = kzalloc(sizeof(*sta) + local->hw.sta_data_size, gfp); - if (!sta) - return NULL; - - spin_lock_init(&sta->lock); - INIT_WORK(&sta->drv_unblock_wk, sta_unblock); - INIT_WORK(&sta->ampdu_mlme.work, ieee80211_ba_session_work); - mutex_init(&sta->ampdu_mlme.mtx); - - memcpy(sta->sta.addr, addr, ETH_ALEN); - sta->local = local; - sta->sdata = sdata; - sta->last_rx = jiffies; - - sta->sta_state = IEEE80211_STA_NONE; - - do_posix_clock_monotonic_gettime(&uptime); - sta->last_connected = uptime.tv_sec; - ewma_init(&sta->avg_signal, 1024, 8); - - if (sta_prepare_rate_control(local, sta, gfp)) { - kfree(sta); - return NULL; - } - - for (i = 0; i < STA_TID_NUM; i++) { - /* - * timer_to_tid must be initialized with identity mapping - * to enable session_timer's data differentiation. See - * sta_rx_agg_session_timer_expired for usage. - */ - sta->timer_to_tid[i] = i; - } - for (i = 0; i < IEEE80211_NUM_ACS; i++) { - skb_queue_head_init(&sta->ps_tx_buf[i]); - skb_queue_head_init(&sta->tx_filtered[i]); - } - - for (i = 0; i < NUM_RX_DATA_QUEUES; i++) - sta->last_seq_ctrl[i] = cpu_to_le16(USHRT_MAX); - -#ifdef CONFIG_MAC80211_VERBOSE_DEBUG - wiphy_debug(local->hw.wiphy, "Allocated STA %pM\n", sta->sta.addr); -#endif /* CONFIG_MAC80211_VERBOSE_DEBUG */ - -#ifdef CONFIG_MAC80211_MESH - sta->plink_state = NL80211_PLINK_LISTEN; - init_timer(&sta->plink_timer); -#endif - - return sta; -} - -static int sta_info_insert_check(struct sta_info *sta) -{ - struct ieee80211_sub_if_data *sdata = sta->sdata; - - /* - * Can't be a WARN_ON because it can be triggered through a race: - * something inserts a STA (on one CPU) without holding the RTNL - * and another CPU turns off the net device. - */ - if (unlikely(!ieee80211_sdata_running(sdata))) - return -ENETDOWN; - - if (WARN_ON(compare_ether_addr(sta->sta.addr, sdata->vif.addr) == 0 || - is_multicast_ether_addr(sta->sta.addr))) - return -EINVAL; - - return 0; -} - -static int sta_info_insert_drv_state(struct ieee80211_local *local, - struct ieee80211_sub_if_data *sdata, - struct sta_info *sta) -{ - enum ieee80211_sta_state state; - int err = 0; - - for (state = IEEE80211_STA_NOTEXIST; state < sta->sta_state; state++) { - err = drv_sta_state(local, sdata, sta, state, state + 1); - if (err) - break; - } - - if (!err) { - /* - * Drivers using legacy sta_add/sta_remove callbacks only - * get uploaded set to true after sta_add is called. - */ - if (!local->ops->sta_add) - sta->uploaded = true; - return 0; - } - - if (sdata->vif.type == NL80211_IFTYPE_ADHOC) { - printk(KERN_DEBUG - "%s: failed to move IBSS STA %pM to state %d (%d) - keeping it anyway.\n", - sdata->name, sta->sta.addr, state + 1, err); - err = 0; - } - - /* unwind on error */ - for (; state > IEEE80211_STA_NOTEXIST; state--) - WARN_ON(drv_sta_state(local, sdata, sta, state, state - 1)); - - return err; -} - -/* - * should be called with sta_mtx locked - * this function replaces the mutex lock - * with a RCU lock - */ -static int sta_info_insert_finish(struct sta_info *sta) __acquires(RCU) -{ - struct ieee80211_local *local = sta->local; - struct ieee80211_sub_if_data *sdata = sta->sdata; - struct station_info sinfo; - int err = 0; - - lockdep_assert_held(&local->sta_mtx); - - /* check if STA exists already */ - if (sta_info_get_bss(sdata, sta->sta.addr)) { - err = -EEXIST; - goto out_err; - } - - /* notify driver */ - err = sta_info_insert_drv_state(local, sdata, sta); - if (err) - goto out_err; - - local->num_sta++; - local->sta_generation++; - smp_mb(); - - /* make the station visible */ - sta_info_hash_add(local, sta); - - list_add(&sta->list, &local->sta_list); - - set_sta_flag(sta, WLAN_STA_INSERTED); - - ieee80211_sta_debugfs_add(sta); - rate_control_add_sta_debugfs(sta); - - memset(&sinfo, 0, sizeof(sinfo)); - sinfo.filled = 0; - sinfo.generation = local->sta_generation; - cfg80211_new_sta(sdata->dev, sta->sta.addr, &sinfo, GFP_KERNEL); - -#ifdef CONFIG_MAC80211_VERBOSE_DEBUG - wiphy_debug(local->hw.wiphy, "Inserted STA %pM\n", sta->sta.addr); -#endif /* CONFIG_MAC80211_VERBOSE_DEBUG */ - - /* move reference to rcu-protected */ - rcu_read_lock(); - mutex_unlock(&local->sta_mtx); - - if (ieee80211_vif_is_mesh(&sdata->vif)) - mesh_accept_plinks_update(sdata); - - return 0; - out_err: - mutex_unlock(&local->sta_mtx); - rcu_read_lock(); - return err; -} - -int sta_info_insert_rcu(struct sta_info *sta) __acquires(RCU) -{ - struct ieee80211_local *local = sta->local; - int err = 0; - - might_sleep(); - - err = sta_info_insert_check(sta); - if (err) { - rcu_read_lock(); - goto out_free; - } - - mutex_lock(&local->sta_mtx); - - err = sta_info_insert_finish(sta); - if (err) - goto out_free; - - return 0; - out_free: - BUG_ON(!err); - sta_info_free(local, sta); - return err; -} - -int sta_info_insert(struct sta_info *sta) -{ - int err = sta_info_insert_rcu(sta); - - rcu_read_unlock(); - - return err; -} - -static inline void __bss_tim_set(struct ieee80211_if_ap *bss, u16 aid) -{ - /* - * This format has been mandated by the IEEE specifications, - * so this line may not be changed to use the __set_bit() format. - */ - bss->tim[aid / 8] |= (1 << (aid % 8)); -} - -static inline void __bss_tim_clear(struct ieee80211_if_ap *bss, u16 aid) -{ - /* - * This format has been mandated by the IEEE specifications, - * so this line may not be changed to use the __clear_bit() format. - */ - bss->tim[aid / 8] &= ~(1 << (aid % 8)); -} - -static unsigned long ieee80211_tids_for_ac(int ac) -{ - /* If we ever support TIDs > 7, this obviously needs to be adjusted */ - switch (ac) { - case IEEE80211_AC_VO: - return BIT(6) | BIT(7); - case IEEE80211_AC_VI: - return BIT(4) | BIT(5); - case IEEE80211_AC_BE: - return BIT(0) | BIT(3); - case IEEE80211_AC_BK: - return BIT(1) | BIT(2); - default: - WARN_ON(1); - return 0; - } -} - -void sta_info_recalc_tim(struct sta_info *sta) -{ - struct ieee80211_local *local = sta->local; - struct ieee80211_if_ap *bss = sta->sdata->bss; - unsigned long flags; - bool indicate_tim = false; - u8 ignore_for_tim = sta->sta.uapsd_queues; - int ac; - - if (WARN_ON_ONCE(!sta->sdata->bss)) - return; - - /* No need to do anything if the driver does all */ - if (local->hw.flags & IEEE80211_HW_AP_LINK_PS) - return; - - if (sta->dead) - goto done; - - /* - * If all ACs are delivery-enabled then we should build - * the TIM bit for all ACs anyway; if only some are then - * we ignore those and build the TIM bit using only the - * non-enabled ones. - */ - if (ignore_for_tim == BIT(IEEE80211_NUM_ACS) - 1) - ignore_for_tim = 0; - - for (ac = 0; ac < IEEE80211_NUM_ACS; ac++) { - unsigned long tids; - - if (ignore_for_tim & BIT(ac)) - continue; - - indicate_tim |= !skb_queue_empty(&sta->tx_filtered[ac]) || - !skb_queue_empty(&sta->ps_tx_buf[ac]); - if (indicate_tim) - break; - - tids = ieee80211_tids_for_ac(ac); - - indicate_tim |= - sta->driver_buffered_tids & tids; - } - - done: - spin_lock_irqsave(&local->tim_lock, flags); - - if (indicate_tim) - __bss_tim_set(bss, sta->sta.aid); - else - __bss_tim_clear(bss, sta->sta.aid); - - if (local->ops->set_tim) { - local->tim_in_locked_section = true; - drv_set_tim(local, &sta->sta, indicate_tim); - local->tim_in_locked_section = false; - } - - spin_unlock_irqrestore(&local->tim_lock, flags); -} - -static bool sta_info_buffer_expired(struct sta_info *sta, struct sk_buff *skb) -{ - struct ieee80211_tx_info *info; - int timeout; - - if (!skb) - return false; - - info = IEEE80211_SKB_CB(skb); - - /* Timeout: (2 * listen_interval * beacon_int * 1024 / 1000000) sec */ - timeout = (sta->listen_interval * - sta->sdata->vif.bss_conf.beacon_int * - 32 / 15625) * HZ; - if (timeout < STA_TX_BUFFER_EXPIRE) - timeout = STA_TX_BUFFER_EXPIRE; - return time_after(jiffies, info->control.jiffies + timeout); -} - - -static bool sta_info_cleanup_expire_buffered_ac(struct ieee80211_local *local, - struct sta_info *sta, int ac) -{ - unsigned long flags; - struct sk_buff *skb; - - /* - * First check for frames that should expire on the filtered - * queue. Frames here were rejected by the driver and are on - * a separate queue to avoid reordering with normal PS-buffered - * frames. They also aren't accounted for right now in the - * total_ps_buffered counter. - */ - for (;;) { - spin_lock_irqsave(&sta->tx_filtered[ac].lock, flags); - skb = skb_peek(&sta->tx_filtered[ac]); - if (sta_info_buffer_expired(sta, skb)) - skb = __skb_dequeue(&sta->tx_filtered[ac]); - else - skb = NULL; - spin_unlock_irqrestore(&sta->tx_filtered[ac].lock, flags); - - /* - * Frames are queued in order, so if this one - * hasn't expired yet we can stop testing. If - * we actually reached the end of the queue we - * also need to stop, of course. - */ - if (!skb) - break; - dev_kfree_skb(skb); - } - - /* - * Now also check the normal PS-buffered queue, this will - * only find something if the filtered queue was emptied - * since the filtered frames are all before the normal PS - * buffered frames. - */ - for (;;) { - spin_lock_irqsave(&sta->ps_tx_buf[ac].lock, flags); - skb = skb_peek(&sta->ps_tx_buf[ac]); - if (sta_info_buffer_expired(sta, skb)) - skb = __skb_dequeue(&sta->ps_tx_buf[ac]); - else - skb = NULL; - spin_unlock_irqrestore(&sta->ps_tx_buf[ac].lock, flags); - - /* - * frames are queued in order, so if this one - * hasn't expired yet (or we reached the end of - * the queue) we can stop testing - */ - if (!skb) - break; - - local->total_ps_buffered--; -#ifdef CONFIG_MAC80211_VERBOSE_PS_DEBUG - printk(KERN_DEBUG "Buffered frame expired (STA %pM)\n", - sta->sta.addr); -#endif - dev_kfree_skb(skb); - } - - /* - * Finally, recalculate the TIM bit for this station -- it might - * now be clear because the station was too slow to retrieve its - * frames. - */ - sta_info_recalc_tim(sta); - - /* - * Return whether there are any frames still buffered, this is - * used to check whether the cleanup timer still needs to run, - * if there are no frames we don't need to rearm the timer. - */ - return !(skb_queue_empty(&sta->ps_tx_buf[ac]) && - skb_queue_empty(&sta->tx_filtered[ac])); -} - -static bool sta_info_cleanup_expire_buffered(struct ieee80211_local *local, - struct sta_info *sta) -{ - bool have_buffered = false; - int ac; - - /* This is only necessary for stations on BSS interfaces */ - if (!sta->sdata->bss) - return false; - - for (ac = 0; ac < IEEE80211_NUM_ACS; ac++) - have_buffered |= - sta_info_cleanup_expire_buffered_ac(local, sta, ac); - - return have_buffered; -} - -int __must_check __sta_info_destroy(struct sta_info *sta) -{ - struct ieee80211_local *local; - struct ieee80211_sub_if_data *sdata; - int ret, i, ac; - struct tid_ampdu_tx *tid_tx; - - might_sleep(); - - if (!sta) - return -ENOENT; - - local = sta->local; - sdata = sta->sdata; - - lockdep_assert_held(&local->sta_mtx); - - /* - * Before removing the station from the driver and - * rate control, it might still start new aggregation - * sessions -- block that to make sure the tear-down - * will be sufficient. - */ - set_sta_flag(sta, WLAN_STA_BLOCK_BA); - ieee80211_sta_tear_down_BA_sessions(sta, true); - - ret = sta_info_hash_del(local, sta); - if (ret) - return ret; - - list_del(&sta->list); - - mutex_lock(&local->key_mtx); - for (i = 0; i < NUM_DEFAULT_KEYS; i++) - __ieee80211_key_free(key_mtx_dereference(local, sta->gtk[i])); - if (sta->ptk) - __ieee80211_key_free(key_mtx_dereference(local, sta->ptk)); - mutex_unlock(&local->key_mtx); - - sta->dead = true; - - local->num_sta--; - local->sta_generation++; - - if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN) - RCU_INIT_POINTER(sdata->u.vlan.sta, NULL); - - while (sta->sta_state > IEEE80211_STA_NONE) { - ret = sta_info_move_state(sta, sta->sta_state - 1); - if (ret) { - WARN_ON_ONCE(1); - break; - } - } - - if (sta->uploaded) { - ret = drv_sta_state(local, sdata, sta, IEEE80211_STA_NONE, - IEEE80211_STA_NOTEXIST); - WARN_ON_ONCE(ret != 0); - } - - /* - * At this point, after we wait for an RCU grace period, - * neither mac80211 nor the driver can reference this - * sta struct any more except by still existing timers - * associated with this station that we clean up below. - */ - synchronize_rcu(); - - if (test_sta_flag(sta, WLAN_STA_PS_STA)) { - BUG_ON(!sdata->bss); - - clear_sta_flag(sta, WLAN_STA_PS_STA); - - atomic_dec(&sdata->bss->num_sta_ps); - sta_info_recalc_tim(sta); - } - - for (ac = 0; ac < IEEE80211_NUM_ACS; ac++) { - local->total_ps_buffered -= skb_queue_len(&sta->ps_tx_buf[ac]); - __skb_queue_purge(&sta->ps_tx_buf[ac]); - __skb_queue_purge(&sta->tx_filtered[ac]); - } - -#ifdef CONFIG_MAC80211_MESH - if (ieee80211_vif_is_mesh(&sdata->vif)) - mesh_accept_plinks_update(sdata); -#endif - -#ifdef CONFIG_MAC80211_VERBOSE_DEBUG - wiphy_debug(local->hw.wiphy, "Removed STA %pM\n", sta->sta.addr); -#endif /* CONFIG_MAC80211_VERBOSE_DEBUG */ - cancel_work_sync(&sta->drv_unblock_wk); - - cfg80211_del_sta(sdata->dev, sta->sta.addr, GFP_KERNEL); - - rate_control_remove_sta_debugfs(sta); - ieee80211_sta_debugfs_remove(sta); - -#ifdef CONFIG_MAC80211_MESH - if (ieee80211_vif_is_mesh(&sta->sdata->vif)) { - mesh_plink_deactivate(sta); - del_timer_sync(&sta->plink_timer); - } -#endif - - /* - * Destroy aggregation state here. It would be nice to wait for the - * driver to finish aggregation stop and then clean up, but for now - * drivers have to handle aggregation stop being requested, followed - * directly by station destruction. - */ - for (i = 0; i < STA_TID_NUM; i++) { - tid_tx = rcu_dereference_raw(sta->ampdu_mlme.tid_tx[i]); - if (!tid_tx) - continue; - __skb_queue_purge(&tid_tx->pending); - kfree(tid_tx); - } - - sta_info_free(local, sta); - - return 0; -} - -int sta_info_destroy_addr(struct ieee80211_sub_if_data *sdata, const u8 *addr) -{ - struct sta_info *sta; - int ret; - - mutex_lock(&sdata->local->sta_mtx); - sta = sta_info_get(sdata, addr); - ret = __sta_info_destroy(sta); - mutex_unlock(&sdata->local->sta_mtx); - - return ret; -} - -int sta_info_destroy_addr_bss(struct ieee80211_sub_if_data *sdata, - const u8 *addr) -{ - struct sta_info *sta; - int ret; - - mutex_lock(&sdata->local->sta_mtx); - sta = sta_info_get_bss(sdata, addr); - ret = __sta_info_destroy(sta); - mutex_unlock(&sdata->local->sta_mtx); - - return ret; -} - -static void sta_info_cleanup(unsigned long data) -{ - struct ieee80211_local *local = (struct ieee80211_local *) data; - struct sta_info *sta; - bool timer_needed = false; - - rcu_read_lock(); - list_for_each_entry_rcu(sta, &local->sta_list, list) - if (sta_info_cleanup_expire_buffered(local, sta)) - timer_needed = true; - rcu_read_unlock(); - - if (local->quiescing) - return; - - if (!timer_needed) - return; - - mod_timer(&local->sta_cleanup, - round_jiffies(jiffies + STA_INFO_CLEANUP_INTERVAL)); -} - -void sta_info_init(struct ieee80211_local *local) -{ - spin_lock_init(&local->tim_lock); - mutex_init(&local->sta_mtx); - INIT_LIST_HEAD(&local->sta_list); - - setup_timer(&local->sta_cleanup, sta_info_cleanup, - (unsigned long)local); -} - -void sta_info_stop(struct ieee80211_local *local) -{ - del_timer(&local->sta_cleanup); - sta_info_flush(local, NULL); -} - -/** - * sta_info_flush - flush matching STA entries from the STA table - * - * Returns the number of removed STA entries. - * - * @local: local interface data - * @sdata: matching rule for the net device (sta->dev) or %NULL to match all STAs - */ -int sta_info_flush(struct ieee80211_local *local, - struct ieee80211_sub_if_data *sdata) -{ - struct sta_info *sta, *tmp; - int ret = 0; - - might_sleep(); - - mutex_lock(&local->sta_mtx); - list_for_each_entry_safe(sta, tmp, &local->sta_list, list) { - if (!sdata || sdata == sta->sdata) { - WARN_ON(__sta_info_destroy(sta)); - ret++; - } - } - mutex_unlock(&local->sta_mtx); - - return ret; -} - -void ieee80211_sta_expire(struct ieee80211_sub_if_data *sdata, - unsigned long exp_time) -{ - struct ieee80211_local *local = sdata->local; - struct sta_info *sta, *tmp; - - mutex_lock(&local->sta_mtx); - - list_for_each_entry_safe(sta, tmp, &local->sta_list, list) { - if (sdata != sta->sdata) - continue; - - if (time_after(jiffies, sta->last_rx + exp_time)) { -#ifdef CONFIG_MAC80211_IBSS_DEBUG - printk(KERN_DEBUG "%s: expiring inactive STA %pM\n", - sdata->name, sta->sta.addr); -#endif - WARN_ON(__sta_info_destroy(sta)); - } - } - - mutex_unlock(&local->sta_mtx); -} - -struct ieee80211_sta *ieee80211_find_sta_by_ifaddr(struct ieee80211_hw *hw, - const u8 *addr, - const u8 *localaddr) -{ - struct sta_info *sta, *nxt; - - /* - * Just return a random station if localaddr is NULL - * ... first in list. - */ - for_each_sta_info(hw_to_local(hw), addr, sta, nxt) { - if (localaddr && - compare_ether_addr(sta->sdata->vif.addr, localaddr) != 0) - continue; - if (!sta->uploaded) - return NULL; - return &sta->sta; - } - - return NULL; -} -EXPORT_SYMBOL_GPL(ieee80211_find_sta_by_ifaddr); - -struct ieee80211_sta *ieee80211_find_sta(struct ieee80211_vif *vif, - const u8 *addr) -{ - struct sta_info *sta; - - if (!vif) - return NULL; - - sta = sta_info_get_bss(vif_to_sdata(vif), addr); - if (!sta) - return NULL; - - if (!sta->uploaded) - return NULL; - - return &sta->sta; -} -EXPORT_SYMBOL(ieee80211_find_sta); - -static void clear_sta_ps_flags(void *_sta) -{ - struct sta_info *sta = _sta; - struct ieee80211_sub_if_data *sdata = sta->sdata; - - clear_sta_flag(sta, WLAN_STA_PS_DRIVER); - if (test_and_clear_sta_flag(sta, WLAN_STA_PS_STA)) - atomic_dec(&sdata->bss->num_sta_ps); -} - -/* powersave support code */ -void ieee80211_sta_ps_deliver_wakeup(struct sta_info *sta) -{ - struct ieee80211_sub_if_data *sdata = sta->sdata; - struct ieee80211_local *local = sdata->local; - struct sk_buff_head pending; - int filtered = 0, buffered = 0, ac; - - clear_sta_flag(sta, WLAN_STA_SP); - - BUILD_BUG_ON(BITS_TO_LONGS(STA_TID_NUM) > 1); - sta->driver_buffered_tids = 0; - - if (!(local->hw.flags & IEEE80211_HW_AP_LINK_PS)) - drv_sta_notify(local, sdata, STA_NOTIFY_AWAKE, &sta->sta); - - skb_queue_head_init(&pending); - - /* Send all buffered frames to the station */ - for (ac = 0; ac < IEEE80211_NUM_ACS; ac++) { - int count = skb_queue_len(&pending), tmp; - - skb_queue_splice_tail_init(&sta->tx_filtered[ac], &pending); - tmp = skb_queue_len(&pending); - filtered += tmp - count; - count = tmp; - - skb_queue_splice_tail_init(&sta->ps_tx_buf[ac], &pending); - tmp = skb_queue_len(&pending); - buffered += tmp - count; - } - - ieee80211_add_pending_skbs_fn(local, &pending, clear_sta_ps_flags, sta); - - local->total_ps_buffered -= buffered; - - sta_info_recalc_tim(sta); - -#ifdef CONFIG_MAC80211_VERBOSE_PS_DEBUG - printk(KERN_DEBUG "%s: STA %pM aid %d sending %d filtered/%d PS frames " - "since STA not sleeping anymore\n", sdata->name, - sta->sta.addr, sta->sta.aid, filtered, buffered); -#endif /* CONFIG_MAC80211_VERBOSE_PS_DEBUG */ -} - -static void ieee80211_send_null_response(struct ieee80211_sub_if_data *sdata, - struct sta_info *sta, int tid, - enum ieee80211_frame_release_type reason) -{ - struct ieee80211_local *local = sdata->local; - struct ieee80211_qos_hdr *nullfunc; - struct sk_buff *skb; - int size = sizeof(*nullfunc); - __le16 fc; - bool qos = test_sta_flag(sta, WLAN_STA_WME); - struct ieee80211_tx_info *info; - - if (qos) { - fc = cpu_to_le16(IEEE80211_FTYPE_DATA | - IEEE80211_STYPE_QOS_NULLFUNC | - IEEE80211_FCTL_FROMDS); - } else { - size -= 2; - fc = cpu_to_le16(IEEE80211_FTYPE_DATA | - IEEE80211_STYPE_NULLFUNC | - IEEE80211_FCTL_FROMDS); - } - - skb = dev_alloc_skb(local->hw.extra_tx_headroom + size); - if (!skb) - return; - - skb_reserve(skb, local->hw.extra_tx_headroom); - - nullfunc = (void *) skb_put(skb, size); - nullfunc->frame_control = fc; - nullfunc->duration_id = 0; - memcpy(nullfunc->addr1, sta->sta.addr, ETH_ALEN); - memcpy(nullfunc->addr2, sdata->vif.addr, ETH_ALEN); - memcpy(nullfunc->addr3, sdata->vif.addr, ETH_ALEN); - - skb->priority = tid; - skb_set_queue_mapping(skb, ieee802_1d_to_ac[tid]); - if (qos) { - nullfunc->qos_ctrl = cpu_to_le16(tid); - - if (reason == IEEE80211_FRAME_RELEASE_UAPSD) - nullfunc->qos_ctrl |= - cpu_to_le16(IEEE80211_QOS_CTL_EOSP); - } - - info = IEEE80211_SKB_CB(skb); - - /* - * Tell TX path to send this frame even though the - * STA may still remain is PS mode after this frame - * exchange. Also set EOSP to indicate this packet - * ends the poll/service period. - */ - info->flags |= IEEE80211_TX_CTL_NO_PS_BUFFER | - IEEE80211_TX_STATUS_EOSP | - IEEE80211_TX_CTL_REQ_TX_STATUS; - - drv_allow_buffered_frames(local, sta, BIT(tid), 1, reason, false); - - ieee80211_xmit(sdata, skb); -} - -static void -ieee80211_sta_ps_deliver_response(struct sta_info *sta, - int n_frames, u8 ignored_acs, - enum ieee80211_frame_release_type reason) -{ - struct ieee80211_sub_if_data *sdata = sta->sdata; - struct ieee80211_local *local = sdata->local; - bool found = false; - bool more_data = false; - int ac; - unsigned long driver_release_tids = 0; - struct sk_buff_head frames; - - /* Service or PS-Poll period starts */ - set_sta_flag(sta, WLAN_STA_SP); - - __skb_queue_head_init(&frames); - - /* - * Get response frame(s) and more data bit for it. - */ - for (ac = 0; ac < IEEE80211_NUM_ACS; ac++) { - unsigned long tids; - - if (ignored_acs & BIT(ac)) - continue; - - tids = ieee80211_tids_for_ac(ac); - - if (!found) { - driver_release_tids = sta->driver_buffered_tids & tids; - if (driver_release_tids) { - found = true; - } else { - struct sk_buff *skb; - - while (n_frames > 0) { - skb = skb_dequeue(&sta->tx_filtered[ac]); - if (!skb) { - skb = skb_dequeue( - &sta->ps_tx_buf[ac]); - if (skb) - local->total_ps_buffered--; - } - if (!skb) - break; - n_frames--; - found = true; - __skb_queue_tail(&frames, skb); - } - } - - /* - * If the driver has data on more than one TID then - * certainly there's more data if we release just a - * single frame now (from a single TID). - */ - if (reason == IEEE80211_FRAME_RELEASE_PSPOLL && - hweight16(driver_release_tids) > 1) { - more_data = true; - driver_release_tids = - BIT(ffs(driver_release_tids) - 1); - break; - } - } - - if (!skb_queue_empty(&sta->tx_filtered[ac]) || - !skb_queue_empty(&sta->ps_tx_buf[ac])) { - more_data = true; - break; - } - } - - if (!found) { - int tid; - - /* - * For PS-Poll, this can only happen due to a race condition - * when we set the TIM bit and the station notices it, but - * before it can poll for the frame we expire it. - * - * For uAPSD, this is said in the standard (11.2.1.5 h): - * At each unscheduled SP for a non-AP STA, the AP shall - * attempt to transmit at least one MSDU or MMPDU, but no - * more than the value specified in the Max SP Length field - * in the QoS Capability element from delivery-enabled ACs, - * that are destined for the non-AP STA. - * - * Since we have no other MSDU/MMPDU, transmit a QoS null frame. - */ - - /* This will evaluate to 1, 3, 5 or 7. */ - tid = 7 - ((ffs(~ignored_acs) - 1) << 1); - - ieee80211_send_null_response(sdata, sta, tid, reason); - return; - } - - if (!driver_release_tids) { - struct sk_buff_head pending; - struct sk_buff *skb; - int num = 0; - u16 tids = 0; - - skb_queue_head_init(&pending); - - while ((skb = __skb_dequeue(&frames))) { - struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb); - struct ieee80211_hdr *hdr = (void *) skb->data; - u8 *qoshdr = NULL; - - num++; - - /* - * Tell TX path to send this frame even though the - * STA may still remain is PS mode after this frame - * exchange. - */ - info->flags |= IEEE80211_TX_CTL_NO_PS_BUFFER; - - /* - * Use MoreData flag to indicate whether there are - * more buffered frames for this STA - */ - if (more_data || !skb_queue_empty(&frames)) - hdr->frame_control |= - cpu_to_le16(IEEE80211_FCTL_MOREDATA); - else - hdr->frame_control &= - cpu_to_le16(~IEEE80211_FCTL_MOREDATA); - - if (ieee80211_is_data_qos(hdr->frame_control) || - ieee80211_is_qos_nullfunc(hdr->frame_control)) - qoshdr = ieee80211_get_qos_ctl(hdr); - - /* set EOSP for the frame */ - if (reason == IEEE80211_FRAME_RELEASE_UAPSD && - qoshdr && skb_queue_empty(&frames)) - *qoshdr |= IEEE80211_QOS_CTL_EOSP; - - info->flags |= IEEE80211_TX_STATUS_EOSP | - IEEE80211_TX_CTL_REQ_TX_STATUS; - - if (qoshdr) - tids |= BIT(*qoshdr & IEEE80211_QOS_CTL_TID_MASK); - else - tids |= BIT(0); - - __skb_queue_tail(&pending, skb); - } - - drv_allow_buffered_frames(local, sta, tids, num, - reason, more_data); - - ieee80211_add_pending_skbs(local, &pending); - - sta_info_recalc_tim(sta); - } else { - /* - * We need to release a frame that is buffered somewhere in the - * driver ... it'll have to handle that. - * Note that, as per the comment above, it'll also have to see - * if there is more than just one frame on the specific TID that - * we're releasing from, and it needs to set the more-data bit - * accordingly if we tell it that there's no more data. If we do - * tell it there's more data, then of course the more-data bit - * needs to be set anyway. - */ - drv_release_buffered_frames(local, sta, driver_release_tids, - n_frames, reason, more_data); - - /* - * Note that we don't recalculate the TIM bit here as it would - * most likely have no effect at all unless the driver told us - * that the TID became empty before returning here from the - * release function. - * Either way, however, when the driver tells us that the TID - * became empty we'll do the TIM recalculation. - */ - } -} - -void ieee80211_sta_ps_deliver_poll_response(struct sta_info *sta) -{ - u8 ignore_for_response = sta->sta.uapsd_queues; - - /* - * If all ACs are delivery-enabled then we should reply - * from any of them, if only some are enabled we reply - * only from the non-enabled ones. - */ - if (ignore_for_response == BIT(IEEE80211_NUM_ACS) - 1) - ignore_for_response = 0; - - ieee80211_sta_ps_deliver_response(sta, 1, ignore_for_response, - IEEE80211_FRAME_RELEASE_PSPOLL); -} - -void ieee80211_sta_ps_deliver_uapsd(struct sta_info *sta) -{ - int n_frames = sta->sta.max_sp; - u8 delivery_enabled = sta->sta.uapsd_queues; - - /* - * If we ever grow support for TSPEC this might happen if - * the TSPEC update from hostapd comes in between a trigger - * frame setting WLAN_STA_UAPSD in the RX path and this - * actually getting called. - */ - if (!delivery_enabled) - return; - - switch (sta->sta.max_sp) { - case 1: - n_frames = 2; - break; - case 2: - n_frames = 4; - break; - case 3: - n_frames = 6; - break; - case 0: - /* XXX: what is a good value? */ - n_frames = 8; - break; - } - - ieee80211_sta_ps_deliver_response(sta, n_frames, ~delivery_enabled, - IEEE80211_FRAME_RELEASE_UAPSD); -} - -void ieee80211_sta_block_awake(struct ieee80211_hw *hw, - struct ieee80211_sta *pubsta, bool block) -{ - struct sta_info *sta = container_of(pubsta, struct sta_info, sta); - - trace_api_sta_block_awake(sta->local, pubsta, block); - - if (block) - set_sta_flag(sta, WLAN_STA_PS_DRIVER); - else if (test_sta_flag(sta, WLAN_STA_PS_DRIVER)) - ieee80211_queue_work(hw, &sta->drv_unblock_wk); -} -EXPORT_SYMBOL(ieee80211_sta_block_awake); - -void ieee80211_sta_eosp_irqsafe(struct ieee80211_sta *pubsta) -{ - struct sta_info *sta = container_of(pubsta, struct sta_info, sta); - struct ieee80211_local *local = sta->local; - struct sk_buff *skb; - struct skb_eosp_msg_data *data; - - trace_api_eosp(local, pubsta); - - skb = alloc_skb(0, GFP_ATOMIC); - if (!skb) { - /* too bad ... but race is better than loss */ - clear_sta_flag(sta, WLAN_STA_SP); - return; - } - - data = (void *)skb->cb; - memcpy(data->sta, pubsta->addr, ETH_ALEN); - memcpy(data->iface, sta->sdata->vif.addr, ETH_ALEN); - skb->pkt_type = IEEE80211_EOSP_MSG; - skb_queue_tail(&local->skb_queue, skb); - tasklet_schedule(&local->tasklet); -} -EXPORT_SYMBOL(ieee80211_sta_eosp_irqsafe); - -void ieee80211_sta_set_buffered(struct ieee80211_sta *pubsta, - u8 tid, bool buffered) -{ - struct sta_info *sta = container_of(pubsta, struct sta_info, sta); - - if (WARN_ON(tid >= STA_TID_NUM)) - return; - - if (buffered) - set_bit(tid, &sta->driver_buffered_tids); - else - clear_bit(tid, &sta->driver_buffered_tids); - - sta_info_recalc_tim(sta); -} -EXPORT_SYMBOL(ieee80211_sta_set_buffered); - -/* - * [PLATA] - to check the impact of the OCB mode in this... - */ -int sta_info_move_state(struct sta_info *sta, - enum ieee80211_sta_state new_state) -{ - might_sleep(); - - if (sta->sta_state == new_state) - return 0; - - /* check allowed transitions first */ - - switch (new_state) { - case IEEE80211_STA_NONE: - if (sta->sta_state != IEEE80211_STA_AUTH) - return -EINVAL; - break; - case IEEE80211_STA_AUTH: - if (sta->sta_state != IEEE80211_STA_NONE && - sta->sta_state != IEEE80211_STA_ASSOC) - return -EINVAL; - break; - case IEEE80211_STA_ASSOC: - if (sta->sta_state != IEEE80211_STA_AUTH && - sta->sta_state != IEEE80211_STA_AUTHORIZED) - return -EINVAL; - break; - case IEEE80211_STA_AUTHORIZED: - if (sta->sta_state != IEEE80211_STA_ASSOC) - return -EINVAL; - break; - default: - WARN(1, "invalid state %d", new_state); - return -EINVAL; - } - -#ifdef CONFIG_MAC80211_VERBOSE_DEBUG - printk(KERN_DEBUG "%s: moving STA %pM to state %d\n", - sta->sdata->name, sta->sta.addr, new_state); -#endif - - /* - * notify the driver before the actual changes so it can - * fail the transition - */ - if (test_sta_flag(sta, WLAN_STA_INSERTED)) { - int err = drv_sta_state(sta->local, sta->sdata, sta, - sta->sta_state, new_state); - if (err) - return err; - } - - /* reflect the change in all state variables */ - - switch (new_state) { - case IEEE80211_STA_NONE: - if (sta->sta_state == IEEE80211_STA_AUTH) - clear_bit(WLAN_STA_AUTH, &sta->_flags); - break; - case IEEE80211_STA_AUTH: - if (sta->sta_state == IEEE80211_STA_NONE) - set_bit(WLAN_STA_AUTH, &sta->_flags); - else if (sta->sta_state == IEEE80211_STA_ASSOC) - clear_bit(WLAN_STA_ASSOC, &sta->_flags); - break; - case IEEE80211_STA_ASSOC: - if (sta->sta_state == IEEE80211_STA_AUTH) { - set_bit(WLAN_STA_ASSOC, &sta->_flags); - } else if (sta->sta_state == IEEE80211_STA_AUTHORIZED) { - if (sta->sdata->vif.type == NL80211_IFTYPE_AP) - atomic_dec(&sta->sdata->u.ap.num_sta_authorized); - clear_bit(WLAN_STA_AUTHORIZED, &sta->_flags); - } - break; - case IEEE80211_STA_AUTHORIZED: - if (sta->sta_state == IEEE80211_STA_ASSOC) { - if (sta->sdata->vif.type == NL80211_IFTYPE_AP) - atomic_inc(&sta->sdata->u.ap.num_sta_authorized); - set_bit(WLAN_STA_AUTHORIZED, &sta->_flags); - } - break; - default: - break; - } - - sta->sta_state = new_state; - - return 0; -} diff --git a/openairITS/mac/DOT11/net/mac80211/sta_info.h b/openairITS/mac/DOT11/net/mac80211/sta_info.h deleted file mode 100644 index 21d92a1eb3..0000000000 --- a/openairITS/mac/DOT11/net/mac80211/sta_info.h +++ /dev/null @@ -1,544 +0,0 @@ -/* - * Copyright 2002-2005, Devicescape Software, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - */ - -#ifndef STA_INFO_H -#define STA_INFO_H - -#include -#include -#include -#include -#include -#include -#include "key.h" - -/** - * enum ieee80211_sta_info_flags - Stations flags - * - * These flags are used with &struct sta_info's @flags member, but - * only indirectly with set_sta_flag() and friends. - * - * @WLAN_STA_AUTH: Station is authenticated. - * @WLAN_STA_ASSOC: Station is associated. - * @WLAN_STA_PS_STA: Station is in power-save mode - * @WLAN_STA_AUTHORIZED: Station is authorized to send/receive traffic. - * This bit is always checked so needs to be enabled for all stations - * when virtual port control is not in use. - * @WLAN_STA_SHORT_PREAMBLE: Station is capable of receiving short-preamble - * frames. - * @WLAN_STA_WME: Station is a QoS-STA. - * @WLAN_STA_WDS: Station is one of our WDS peers. - * @WLAN_STA_CLEAR_PS_FILT: Clear PS filter in hardware (using the - * IEEE80211_TX_CTL_CLEAR_PS_FILT control flag) when the next - * frame to this station is transmitted. - * @WLAN_STA_MFP: Management frame protection is used with this STA. - * @WLAN_STA_BLOCK_BA: Used to deny ADDBA requests (both TX and RX) - * during suspend/resume and station removal. - * @WLAN_STA_PS_DRIVER: driver requires keeping this station in - * power-save mode logically to flush frames that might still - * be in the queues - * @WLAN_STA_PSPOLL: Station sent PS-poll while driver was keeping - * station in power-save mode, reply when the driver unblocks. - * @WLAN_STA_TDLS_PEER: Station is a TDLS peer. - * @WLAN_STA_TDLS_PEER_AUTH: This TDLS peer is authorized to send direct - * packets. This means the link is enabled. - * @WLAN_STA_UAPSD: Station requested unscheduled SP while driver was - * keeping station in power-save mode, reply when the driver - * unblocks the station. - * @WLAN_STA_SP: Station is in a service period, so don't try to - * reply to other uAPSD trigger frames or PS-Poll. - * @WLAN_STA_4ADDR_EVENT: 4-addr event was already sent for this frame. - * @WLAN_STA_INSERTED: This station is inserted into the hash table. - * @WLAN_STA_RATE_CONTROL: rate control was initialized for this station. - * @WLAN_STA_OCB: station is with the OCB activated - means none of the previous states - */ -enum ieee80211_sta_info_flags { - WLAN_STA_AUTH, - WLAN_STA_ASSOC, - WLAN_STA_PS_STA, - WLAN_STA_AUTHORIZED, - WLAN_STA_SHORT_PREAMBLE, - WLAN_STA_WME, - WLAN_STA_WDS, - WLAN_STA_CLEAR_PS_FILT, - WLAN_STA_MFP, - WLAN_STA_BLOCK_BA, - WLAN_STA_PS_DRIVER, - WLAN_STA_PSPOLL, - WLAN_STA_TDLS_PEER, - WLAN_STA_TDLS_PEER_AUTH, - WLAN_STA_UAPSD, - WLAN_STA_SP, - WLAN_STA_4ADDR_EVENT, - WLAN_STA_INSERTED, - WLAN_STA_RATE_CONTROL, - WLAN_STA_OCB, //[PLATA] - added this flag to show that we are not in one of the previous states... TODO initialize it... -}; - -#define STA_TID_NUM 16 -#define ADDBA_RESP_INTERVAL HZ -#define HT_AGG_MAX_RETRIES 15 -#define HT_AGG_BURST_RETRIES 3 -#define HT_AGG_RETRIES_PERIOD (15 * HZ) - -#define HT_AGG_STATE_DRV_READY 0 -#define HT_AGG_STATE_RESPONSE_RECEIVED 1 -#define HT_AGG_STATE_OPERATIONAL 2 -#define HT_AGG_STATE_STOPPING 3 -#define HT_AGG_STATE_WANT_START 4 -#define HT_AGG_STATE_WANT_STOP 5 - -/** - * struct tid_ampdu_tx - TID aggregation information (Tx). - * - * @rcu_head: rcu head for freeing structure - * @session_timer: check if we keep Tx-ing on the TID (by timeout value) - * @addba_resp_timer: timer for peer's response to addba request - * @pending: pending frames queue -- use sta's spinlock to protect - * @dialog_token: dialog token for aggregation session - * @timeout: session timeout value to be filled in ADDBA requests - * @state: session state (see above) - * @stop_initiator: initiator of a session stop - * @tx_stop: TX DelBA frame when stopping - * @buf_size: reorder buffer size at receiver - * @failed_bar_ssn: ssn of the last failed BAR tx attempt - * @bar_pending: BAR needs to be re-sent - * - * This structure's lifetime is managed by RCU, assignments to - * the array holding it must hold the aggregation mutex. - * - * The TX path can access it under RCU lock-free if, and - * only if, the state has the flag %HT_AGG_STATE_OPERATIONAL - * set. Otherwise, the TX path must also acquire the spinlock - * and re-check the state, see comments in the tx code - * touching it. - */ -struct tid_ampdu_tx { - struct rcu_head rcu_head; - struct timer_list session_timer; - struct timer_list addba_resp_timer; - struct sk_buff_head pending; - unsigned long state; - u16 timeout; - u8 dialog_token; - u8 stop_initiator; - bool tx_stop; - u8 buf_size; - - u16 failed_bar_ssn; - bool bar_pending; -}; - -/** - * struct tid_ampdu_rx - TID aggregation information (Rx). - * - * @reorder_buf: buffer to reorder incoming aggregated MPDUs - * @reorder_time: jiffies when skb was added - * @session_timer: check if peer keeps Tx-ing on the TID (by timeout value) - * @reorder_timer: releases expired frames from the reorder buffer. - * @head_seq_num: head sequence number in reordering buffer. - * @stored_mpdu_num: number of MPDUs in reordering buffer - * @ssn: Starting Sequence Number expected to be aggregated. - * @buf_size: buffer size for incoming A-MPDUs - * @timeout: reset timer value (in TUs). - * @dialog_token: dialog token for aggregation session - * @rcu_head: RCU head used for freeing this struct - * @reorder_lock: serializes access to reorder buffer, see below. - * - * This structure's lifetime is managed by RCU, assignments to - * the array holding it must hold the aggregation mutex. - * - * The @reorder_lock is used to protect the members of this - * struct, except for @timeout, @buf_size and @dialog_token, - * which are constant across the lifetime of the struct (the - * dialog token being used only for debugging). - */ -struct tid_ampdu_rx { - struct rcu_head rcu_head; - spinlock_t reorder_lock; - struct sk_buff **reorder_buf; - unsigned long *reorder_time; - struct timer_list session_timer; - struct timer_list reorder_timer; - u16 head_seq_num; - u16 stored_mpdu_num; - u16 ssn; - u16 buf_size; - u16 timeout; - u8 dialog_token; -}; - -/** - * struct sta_ampdu_mlme - STA aggregation information. - * - * @tid_rx: aggregation info for Rx per TID -- RCU protected - * @tid_tx: aggregation info for Tx per TID - * @tid_start_tx: sessions where start was requested - * @addba_req_num: number of times addBA request has been sent. - * @last_addba_req_time: timestamp of the last addBA request. - * @dialog_token_allocator: dialog token enumerator for each new session; - * @work: work struct for starting/stopping aggregation - * @tid_rx_timer_expired: bitmap indicating on which TIDs the - * RX timer expired until the work for it runs - * @tid_rx_stop_requested: bitmap indicating which BA sessions per TID the - * driver requested to close until the work for it runs - * @mtx: mutex to protect all TX data (except non-NULL assignments - * to tid_tx[idx], which are protected by the sta spinlock) - */ -struct sta_ampdu_mlme { - struct mutex mtx; - /* rx */ - struct tid_ampdu_rx __rcu *tid_rx[STA_TID_NUM]; - unsigned long tid_rx_timer_expired[BITS_TO_LONGS(STA_TID_NUM)]; - unsigned long tid_rx_stop_requested[BITS_TO_LONGS(STA_TID_NUM)]; - /* tx */ - struct work_struct work; - struct tid_ampdu_tx __rcu *tid_tx[STA_TID_NUM]; - struct tid_ampdu_tx *tid_start_tx[STA_TID_NUM]; - unsigned long last_addba_req_time[STA_TID_NUM]; - u8 addba_req_num[STA_TID_NUM]; - u8 dialog_token_allocator; -}; - - -/** - * struct sta_info - STA information - * - * This structure collects information about a station that - * mac80211 is communicating with. - * - * @list: global linked list entry - * @hnext: hash table linked list pointer - * @local: pointer to the global information - * @sdata: virtual interface this station belongs to - * @ptk: peer key negotiated with this station, if any - * @gtk: group keys negotiated with this station, if any - * @rate_ctrl: rate control algorithm reference - * @rate_ctrl_priv: rate control private per-STA pointer - * @last_tx_rate: rate used for last transmit, to report to userspace as - * "the" transmit rate - * @last_rx_rate_idx: rx status rate index of the last data packet - * @last_rx_rate_flag: rx status flag of the last data packet - * @lock: used for locking all fields that require locking, see comments - * in the header file. - * @drv_unblock_wk: used for driver PS unblocking - * @listen_interval: listen interval of this station, when we're acting as AP - * @_flags: STA flags, see &enum ieee80211_sta_info_flags, do not use directly - * @ps_tx_buf: buffers (per AC) of frames to transmit to this station - * when it leaves power saving state or polls - * @tx_filtered: buffers (per AC) of frames we already tried to - * transmit but were filtered by hardware due to STA having - * entered power saving state, these are also delivered to - * the station when it leaves powersave or polls for frames - * @driver_buffered_tids: bitmap of TIDs the driver has data buffered on - * @rx_packets: Number of MSDUs received from this STA - * @rx_bytes: Number of bytes received from this STA - * @wep_weak_iv_count: number of weak WEP IVs received from this station - * @last_rx: time (in jiffies) when last frame was received from this STA - * @last_connected: time (in seconds) when a station got connected - * @num_duplicates: number of duplicate frames received from this STA - * @rx_fragments: number of received MPDUs - * @rx_dropped: number of dropped MPDUs from this STA - * @last_signal: signal of last received frame from this STA - * @avg_signal: moving average of signal of received frames from this STA - * @last_seq_ctrl: last received seq/frag number from this STA (per RX queue) - * @tx_filtered_count: number of frames the hardware filtered for this STA - * @tx_retry_failed: number of frames that failed retry - * @tx_retry_count: total number of retries for frames to this STA - * @fail_avg: moving percentage of failed MSDUs - * @tx_packets: number of RX/TX MSDUs - * @tx_bytes: number of bytes transmitted to this STA - * @tx_fragments: number of transmitted MPDUs - * @tid_seq: per-TID sequence numbers for sending to this STA - * @ampdu_mlme: A-MPDU state machine state - * @timer_to_tid: identity mapping to ID timers - * @llid: Local link ID - * @plid: Peer link ID - * @reason: Cancel reason on PLINK_HOLDING state - * @plink_retries: Retries in establishment - * @ignore_plink_timer: ignore the peer-link timer (used internally) - * @plink_state: peer link state - * @plink_timeout: timeout of peer link - * @plink_timer: peer link watch timer - * @plink_timer_was_running: used by suspend/resume to restore timers - * @debugfs: debug filesystem info - * @dead: set to true when sta is unlinked - * @uploaded: set to true when sta is uploaded to the driver - * @lost_packets: number of consecutive lost packets - * @sta: station information we share with the driver - * @sta_state: duplicates information about station state (for debug) - * @beacon_loss_count: number of times beacon loss has triggered - */ -struct sta_info { - /* General information, mostly static */ - struct list_head list; - struct sta_info __rcu *hnext; - struct ieee80211_local *local; - struct ieee80211_sub_if_data *sdata; - struct ieee80211_key __rcu *gtk[NUM_DEFAULT_KEYS + NUM_DEFAULT_MGMT_KEYS]; - struct ieee80211_key __rcu *ptk; - struct rate_control_ref *rate_ctrl; - void *rate_ctrl_priv; - spinlock_t lock; - - struct work_struct drv_unblock_wk; - - u16 listen_interval; - - bool dead; - - bool uploaded; - - enum ieee80211_sta_state sta_state; - - /* use the accessors defined below */ - unsigned long _flags; - - /* - * STA powersave frame queues, no more than the internal - * locking required. - */ - struct sk_buff_head ps_tx_buf[IEEE80211_NUM_ACS]; - struct sk_buff_head tx_filtered[IEEE80211_NUM_ACS]; - unsigned long driver_buffered_tids; - - /* Updated from RX path only, no locking requirements */ - unsigned long rx_packets, rx_bytes; - unsigned long wep_weak_iv_count; - unsigned long last_rx; - long last_connected; - unsigned long num_duplicates; - unsigned long rx_fragments; - unsigned long rx_dropped; - int last_signal; - struct ewma avg_signal; - /* Plus 1 for non-QoS frames */ - __le16 last_seq_ctrl[NUM_RX_DATA_QUEUES + 1]; - - /* Updated from TX status path only, no locking requirements */ - unsigned long tx_filtered_count; - unsigned long tx_retry_failed, tx_retry_count; - /* moving percentage of failed MSDUs */ - unsigned int fail_avg; - - /* Updated from TX path only, no locking requirements */ - unsigned long tx_packets; - unsigned long tx_bytes; - unsigned long tx_fragments; - struct ieee80211_tx_rate last_tx_rate; - int last_rx_rate_idx; - int last_rx_rate_flag; - u16 tid_seq[IEEE80211_QOS_CTL_TID_MASK + 1]; - - /* - * Aggregation information, locked with lock. - */ - struct sta_ampdu_mlme ampdu_mlme; - u8 timer_to_tid[STA_TID_NUM]; - -#ifdef CONFIG_MAC80211_MESH - /* - * Mesh peer link attributes - * TODO: move to a sub-structure that is referenced with pointer? - */ - __le16 llid; - __le16 plid; - __le16 reason; - u8 plink_retries; - bool ignore_plink_timer; - bool plink_timer_was_running; - enum nl80211_plink_state plink_state; - u32 plink_timeout; - struct timer_list plink_timer; -#endif - -#ifdef CONFIG_MAC80211_DEBUGFS - struct sta_info_debugfsdentries { - struct dentry *dir; - bool add_has_run; - } debugfs; -#endif - - unsigned int lost_packets; - unsigned int beacon_loss_count; - - /* keep last! */ - struct ieee80211_sta sta; -}; - -static inline enum nl80211_plink_state sta_plink_state(struct sta_info *sta) -{ -#ifdef CONFIG_MAC80211_MESH - return sta->plink_state; -#endif - return NL80211_PLINK_LISTEN; -} - -static inline void set_sta_flag(struct sta_info *sta, - enum ieee80211_sta_info_flags flag) -{ - WARN_ON(flag == WLAN_STA_AUTH || - flag == WLAN_STA_ASSOC || - flag == WLAN_STA_AUTHORIZED); - set_bit(flag, &sta->_flags); -} - -static inline void clear_sta_flag(struct sta_info *sta, - enum ieee80211_sta_info_flags flag) -{ - WARN_ON(flag == WLAN_STA_AUTH || - flag == WLAN_STA_ASSOC || - flag == WLAN_STA_AUTHORIZED); - clear_bit(flag, &sta->_flags); -} - -static inline int test_sta_flag(struct sta_info *sta, - enum ieee80211_sta_info_flags flag) -{ - return test_bit(flag, &sta->_flags); -} - -static inline int test_and_clear_sta_flag(struct sta_info *sta, - enum ieee80211_sta_info_flags flag) -{ - WARN_ON(flag == WLAN_STA_AUTH || - flag == WLAN_STA_ASSOC || - flag == WLAN_STA_AUTHORIZED); - return test_and_clear_bit(flag, &sta->_flags); -} - -static inline int test_and_set_sta_flag(struct sta_info *sta, - enum ieee80211_sta_info_flags flag) -{ - WARN_ON(flag == WLAN_STA_AUTH || - flag == WLAN_STA_ASSOC || - flag == WLAN_STA_AUTHORIZED); - return test_and_set_bit(flag, &sta->_flags); -} - -int sta_info_move_state(struct sta_info *sta, - enum ieee80211_sta_state new_state); - -static inline void sta_info_pre_move_state(struct sta_info *sta, - enum ieee80211_sta_state new_state) -{ - int ret; - - WARN_ON_ONCE(test_sta_flag(sta, WLAN_STA_INSERTED)); - - ret = sta_info_move_state(sta, new_state); - WARN_ON_ONCE(ret); -} - - -void ieee80211_assign_tid_tx(struct sta_info *sta, int tid, - struct tid_ampdu_tx *tid_tx); - -static inline struct tid_ampdu_tx * -rcu_dereference_protected_tid_tx(struct sta_info *sta, int tid) -{ - return rcu_dereference_protected(sta->ampdu_mlme.tid_tx[tid], - lockdep_is_held(&sta->lock) || - lockdep_is_held(&sta->ampdu_mlme.mtx)); -} - -#define STA_HASH_SIZE 256 -#define STA_HASH(sta) (sta[5]) - - -/* Maximum number of frames to buffer per power saving station per AC */ -#define STA_MAX_TX_BUFFER 64 - -/* Minimum buffered frame expiry time. If STA uses listen interval that is - * smaller than this value, the minimum value here is used instead. */ -#define STA_TX_BUFFER_EXPIRE (10 * HZ) - -/* How often station data is cleaned up (e.g., expiration of buffered frames) - */ -#define STA_INFO_CLEANUP_INTERVAL (10 * HZ) - -/* - * Get a STA info, must be under RCU read lock. - */ -struct sta_info *sta_info_get(struct ieee80211_sub_if_data *sdata, - const u8 *addr); - -struct sta_info *sta_info_get_bss(struct ieee80211_sub_if_data *sdata, - const u8 *addr); - -static inline -void for_each_sta_info_type_check(struct ieee80211_local *local, - const u8 *addr, - struct sta_info *sta, - struct sta_info *nxt) -{ -} - -#define for_each_sta_info(local, _addr, _sta, nxt) \ - for ( /* initialise loop */ \ - _sta = rcu_dereference(local->sta_hash[STA_HASH(_addr)]),\ - nxt = _sta ? rcu_dereference(_sta->hnext) : NULL; \ - /* typecheck */ \ - for_each_sta_info_type_check(local, (_addr), _sta, nxt),\ - /* continue condition */ \ - _sta; \ - /* advance loop */ \ - _sta = nxt, \ - nxt = _sta ? rcu_dereference(_sta->hnext) : NULL \ - ) \ - /* compare address and run code only if it matches */ \ - if (compare_ether_addr(_sta->sta.addr, (_addr)) == 0) - -/* - * Get STA info by index, BROKEN! - */ -struct sta_info *sta_info_get_by_idx(struct ieee80211_sub_if_data *sdata, - int idx); -/* - * Create a new STA info, caller owns returned structure - * until sta_info_insert(). - */ -struct sta_info *sta_info_alloc(struct ieee80211_sub_if_data *sdata, - const u8 *addr, gfp_t gfp); - -void sta_info_free(struct ieee80211_local *local, struct sta_info *sta); - -/* - * Insert STA info into hash table/list, returns zero or a - * -EEXIST if (if the same MAC address is already present). - * - * Calling the non-rcu version makes the caller relinquish, - * the _rcu version calls read_lock_rcu() and must be called - * without it held. - */ -int sta_info_insert(struct sta_info *sta); -int sta_info_insert_rcu(struct sta_info *sta) __acquires(RCU); - -int __must_check __sta_info_destroy(struct sta_info *sta); -int sta_info_destroy_addr(struct ieee80211_sub_if_data *sdata, - const u8 *addr); -int sta_info_destroy_addr_bss(struct ieee80211_sub_if_data *sdata, - const u8 *addr); - -void sta_info_recalc_tim(struct sta_info *sta); - -void sta_info_init(struct ieee80211_local *local); -void sta_info_stop(struct ieee80211_local *local); -int sta_info_flush(struct ieee80211_local *local, - struct ieee80211_sub_if_data *sdata); -void sta_set_rate_info_tx(struct sta_info *sta, - const struct ieee80211_tx_rate *rate, - struct rate_info *rinfo); -void ieee80211_sta_expire(struct ieee80211_sub_if_data *sdata, - unsigned long exp_time); - -void ieee80211_sta_ps_deliver_wakeup(struct sta_info *sta); -void ieee80211_sta_ps_deliver_poll_response(struct sta_info *sta); -void ieee80211_sta_ps_deliver_uapsd(struct sta_info *sta); - -#endif /* STA_INFO_H */ diff --git a/openairITS/mac/DOT11/net/mac80211/status.c b/openairITS/mac/DOT11/net/mac80211/status.c deleted file mode 100644 index 5f8f89e89d..0000000000 --- a/openairITS/mac/DOT11/net/mac80211/status.c +++ /dev/null @@ -1,662 +0,0 @@ -/* - * Copyright 2002-2005, Instant802 Networks, Inc. - * Copyright 2005-2006, Devicescape Software, Inc. - * Copyright 2006-2007 Jiri Benc - * Copyright 2008-2010 Johannes Berg - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - */ - -#include -#include -#include -#include -#include "ieee80211_i.h" -#include "rate.h" -#include "mesh.h" -#include "led.h" -#include "wme.h" - - -void ieee80211_tx_status_irqsafe(struct ieee80211_hw *hw, - struct sk_buff *skb) -{ - struct ieee80211_local *local = hw_to_local(hw); - struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb); - int tmp; - - skb->pkt_type = IEEE80211_TX_STATUS_MSG; - skb_queue_tail(info->flags & IEEE80211_TX_CTL_REQ_TX_STATUS ? - &local->skb_queue : &local->skb_queue_unreliable, skb); - tmp = skb_queue_len(&local->skb_queue) + - skb_queue_len(&local->skb_queue_unreliable); - while (tmp > IEEE80211_IRQSAFE_QUEUE_LIMIT && - (skb = skb_dequeue(&local->skb_queue_unreliable))) { - dev_kfree_skb_irq(skb); - tmp--; - I802_DEBUG_INC(local->tx_status_drop); - } - tasklet_schedule(&local->tasklet); -} -EXPORT_SYMBOL(ieee80211_tx_status_irqsafe); - -static void ieee80211_handle_filtered_frame(struct ieee80211_local *local, - struct sta_info *sta, - struct sk_buff *skb) -{ - struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb); - struct ieee80211_hdr *hdr = (void *)skb->data; - int ac; - - /* - * This skb 'survived' a round-trip through the driver, and - * hopefully the driver didn't mangle it too badly. However, - * we can definitely not rely on the control information - * being correct. Clear it so we don't get junk there, and - * indicate that it needs new processing, but must not be - * modified/encrypted again. - */ - memset(&info->control, 0, sizeof(info->control)); - - info->control.jiffies = jiffies; - info->control.vif = &sta->sdata->vif; - info->flags |= IEEE80211_TX_INTFL_NEED_TXPROCESSING | - IEEE80211_TX_INTFL_RETRANSMISSION; - info->flags &= ~IEEE80211_TX_TEMPORARY_FLAGS; - - sta->tx_filtered_count++; - - /* - * Clear more-data bit on filtered frames, it might be set - * but later frames might time out so it might have to be - * clear again ... It's all rather unlikely (this frame - * should time out first, right?) but let's not confuse - * peers unnecessarily. - */ - if (hdr->frame_control & cpu_to_le16(IEEE80211_FCTL_MOREDATA)) - hdr->frame_control &= ~cpu_to_le16(IEEE80211_FCTL_MOREDATA); - - if (ieee80211_is_data_qos(hdr->frame_control)) { - u8 *p = ieee80211_get_qos_ctl(hdr); - int tid = *p & IEEE80211_QOS_CTL_TID_MASK; - - /* - * Clear EOSP if set, this could happen e.g. - * if an absence period (us being a P2P GO) - * shortens the SP. - */ - if (*p & IEEE80211_QOS_CTL_EOSP) - *p &= ~IEEE80211_QOS_CTL_EOSP; - ac = ieee802_1d_to_ac[tid & 7]; - } else { - ac = IEEE80211_AC_BE; - } - - /* - * Clear the TX filter mask for this STA when sending the next - * packet. If the STA went to power save mode, this will happen - * when it wakes up for the next time. - */ - set_sta_flag(sta, WLAN_STA_CLEAR_PS_FILT); - - /* - * This code races in the following way: - * - * (1) STA sends frame indicating it will go to sleep and does so - * (2) hardware/firmware adds STA to filter list, passes frame up - * (3) hardware/firmware processes TX fifo and suppresses a frame - * (4) we get TX status before having processed the frame and - * knowing that the STA has gone to sleep. - * - * This is actually quite unlikely even when both those events are - * processed from interrupts coming in quickly after one another or - * even at the same time because we queue both TX status events and - * RX frames to be processed by a tasklet and process them in the - * same order that they were received or TX status last. Hence, there - * is no race as long as the frame RX is processed before the next TX - * status, which drivers can ensure, see below. - * - * Note that this can only happen if the hardware or firmware can - * actually add STAs to the filter list, if this is done by the - * driver in response to set_tim() (which will only reduce the race - * this whole filtering tries to solve, not completely solve it) - * this situation cannot happen. - * - * To completely solve this race drivers need to make sure that they - * (a) don't mix the irq-safe/not irq-safe TX status/RX processing - * functions and - * (b) always process RX events before TX status events if ordering - * can be unknown, for example with different interrupt status - * bits. - * (c) if PS mode transitions are manual (i.e. the flag - * %IEEE80211_HW_AP_LINK_PS is set), always process PS state - * changes before calling TX status events if ordering can be - * unknown. - */ - if (test_sta_flag(sta, WLAN_STA_PS_STA) && - skb_queue_len(&sta->tx_filtered[ac]) < STA_MAX_TX_BUFFER) { - skb_queue_tail(&sta->tx_filtered[ac], skb); - sta_info_recalc_tim(sta); - - if (!timer_pending(&local->sta_cleanup)) - mod_timer(&local->sta_cleanup, - round_jiffies(jiffies + - STA_INFO_CLEANUP_INTERVAL)); - return; - } - - if (!test_sta_flag(sta, WLAN_STA_PS_STA) && - !(info->flags & IEEE80211_TX_INTFL_RETRIED)) { - /* Software retry the packet once */ - info->flags |= IEEE80211_TX_INTFL_RETRIED; - ieee80211_add_pending_skb(local, skb); - return; - } - -#ifdef CONFIG_MAC80211_VERBOSE_DEBUG - if (net_ratelimit()) - wiphy_debug(local->hw.wiphy, - "dropped TX filtered frame, queue_len=%d PS=%d @%lu\n", - skb_queue_len(&sta->tx_filtered[ac]), - !!test_sta_flag(sta, WLAN_STA_PS_STA), jiffies); -#endif - dev_kfree_skb(skb); -} - -static void ieee80211_check_pending_bar(struct sta_info *sta, u8 *addr, u8 tid) -{ - struct tid_ampdu_tx *tid_tx; - - tid_tx = rcu_dereference(sta->ampdu_mlme.tid_tx[tid]); - if (!tid_tx || !tid_tx->bar_pending) - return; - - tid_tx->bar_pending = false; - ieee80211_send_bar(&sta->sdata->vif, addr, tid, tid_tx->failed_bar_ssn); -} - -static void ieee80211_frame_acked(struct sta_info *sta, struct sk_buff *skb) -{ - struct ieee80211_mgmt *mgmt = (void *) skb->data; - struct ieee80211_local *local = sta->local; - struct ieee80211_sub_if_data *sdata = sta->sdata; - - if (ieee80211_is_data_qos(mgmt->frame_control)) { - struct ieee80211_hdr *hdr = (void *) skb->data; - u8 *qc = ieee80211_get_qos_ctl(hdr); - u16 tid = qc[0] & 0xf; - - ieee80211_check_pending_bar(sta, hdr->addr1, tid); - } - - if (ieee80211_is_action(mgmt->frame_control) && - sdata->vif.type == NL80211_IFTYPE_STATION && - mgmt->u.action.category == WLAN_CATEGORY_HT && - mgmt->u.action.u.ht_smps.action == WLAN_HT_ACTION_SMPS) { - /* - * This update looks racy, but isn't -- if we come - * here we've definitely got a station that we're - * talking to, and on a managed interface that can - * only be the AP. And the only other place updating - * this variable is before we're associated. - */ - switch (mgmt->u.action.u.ht_smps.smps_control) { - case WLAN_HT_SMPS_CONTROL_DYNAMIC: - sta->sdata->u.mgd.ap_smps = IEEE80211_SMPS_DYNAMIC; - break; - case WLAN_HT_SMPS_CONTROL_STATIC: - sta->sdata->u.mgd.ap_smps = IEEE80211_SMPS_STATIC; - break; - case WLAN_HT_SMPS_CONTROL_DISABLED: - default: /* shouldn't happen since we don't send that */ - sta->sdata->u.mgd.ap_smps = IEEE80211_SMPS_OFF; - break; - } - - ieee80211_queue_work(&local->hw, &local->recalc_smps); - } -} - -static void ieee80211_set_bar_pending(struct sta_info *sta, u8 tid, u16 ssn) -{ - struct tid_ampdu_tx *tid_tx; - - tid_tx = rcu_dereference(sta->ampdu_mlme.tid_tx[tid]); - if (!tid_tx) - return; - - tid_tx->failed_bar_ssn = ssn; - tid_tx->bar_pending = true; -} - -static int ieee80211_tx_radiotap_len(struct ieee80211_tx_info *info) -{ - int len = sizeof(struct ieee80211_radiotap_header); - - /* IEEE80211_RADIOTAP_RATE rate */ - if (info->status.rates[0].idx >= 0 && - !(info->status.rates[0].flags & IEEE80211_TX_RC_MCS)) - len += 2; - - /* IEEE80211_RADIOTAP_TX_FLAGS */ - len += 2; - - /* IEEE80211_RADIOTAP_DATA_RETRIES */ - len += 1; - - /* IEEE80211_TX_RC_MCS */ - if (info->status.rates[0].idx >= 0 && - info->status.rates[0].flags & IEEE80211_TX_RC_MCS) - len += 3; - - return len; -} - -static void ieee80211_add_tx_radiotap_header(struct ieee80211_supported_band - *sband, struct sk_buff *skb, - int retry_count, int rtap_len) -{ - struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb); - struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) skb->data; - struct ieee80211_radiotap_header *rthdr; - unsigned char *pos; - u16 txflags; - - rthdr = (struct ieee80211_radiotap_header *) skb_push(skb, rtap_len); - - memset(rthdr, 0, rtap_len); - rthdr->it_len = cpu_to_le16(rtap_len); - rthdr->it_present = - cpu_to_le32((1 << IEEE80211_RADIOTAP_TX_FLAGS) | - (1 << IEEE80211_RADIOTAP_DATA_RETRIES)); - pos = (unsigned char *)(rthdr + 1); - - /* - * XXX: Once radiotap gets the bitmap reset thing the vendor - * extensions proposal contains, we can actually report - * the whole set of tries we did. - */ - - /* IEEE80211_RADIOTAP_RATE */ - if (info->status.rates[0].idx >= 0 && - !(info->status.rates[0].flags & IEEE80211_TX_RC_MCS)) { - rthdr->it_present |= cpu_to_le32(1 << IEEE80211_RADIOTAP_RATE); - *pos = sband->bitrates[info->status.rates[0].idx].bitrate / 5; - /* padding for tx flags */ - pos += 2; - } - - /* IEEE80211_RADIOTAP_TX_FLAGS */ - txflags = 0; - if (!(info->flags & IEEE80211_TX_STAT_ACK) && - !is_multicast_ether_addr(hdr->addr1)) - txflags |= IEEE80211_RADIOTAP_F_TX_FAIL; - - if ((info->status.rates[0].flags & IEEE80211_TX_RC_USE_RTS_CTS) || - (info->status.rates[0].flags & IEEE80211_TX_RC_USE_CTS_PROTECT)) - txflags |= IEEE80211_RADIOTAP_F_TX_CTS; - else if (info->status.rates[0].flags & IEEE80211_TX_RC_USE_RTS_CTS) - txflags |= IEEE80211_RADIOTAP_F_TX_RTS; - - put_unaligned_le16(txflags, pos); - pos += 2; - - /* IEEE80211_RADIOTAP_DATA_RETRIES */ - /* for now report the total retry_count */ - *pos = retry_count; - pos++; - - /* IEEE80211_TX_RC_MCS */ - if (info->status.rates[0].idx >= 0 && - info->status.rates[0].flags & IEEE80211_TX_RC_MCS) { - rthdr->it_present |= cpu_to_le32(1 << IEEE80211_RADIOTAP_MCS); - pos[0] = IEEE80211_RADIOTAP_MCS_HAVE_MCS | - IEEE80211_RADIOTAP_MCS_HAVE_GI | - IEEE80211_RADIOTAP_MCS_HAVE_BW; - if (info->status.rates[0].flags & IEEE80211_TX_RC_SHORT_GI) - pos[1] |= IEEE80211_RADIOTAP_MCS_SGI; - if (info->status.rates[0].flags & IEEE80211_TX_RC_40_MHZ_WIDTH) - pos[1] |= IEEE80211_RADIOTAP_MCS_BW_40; - if (info->status.rates[0].flags & IEEE80211_TX_RC_GREEN_FIELD) - pos[1] |= IEEE80211_RADIOTAP_MCS_FMT_GF; - pos[2] = info->status.rates[0].idx; - pos += 3; - } - -} - -/* - * Use a static threshold for now, best value to be determined - * by testing ... - * Should it depend on: - * - on # of retransmissions - * - current throughput (higher value for higher tpt)? - */ -#define STA_LOST_PKT_THRESHOLD 50 - -void ieee80211_tx_status(struct ieee80211_hw *hw, struct sk_buff *skb) -{ - struct sk_buff *skb2; - struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) skb->data; - struct ieee80211_local *local = hw_to_local(hw); - struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb); - __le16 fc; - struct ieee80211_supported_band *sband; - struct ieee80211_sub_if_data *sdata; - struct net_device *prev_dev = NULL; - struct sta_info *sta, *tmp; - int retry_count = -1, i; - int rates_idx = -1; - bool send_to_cooked; - bool acked; - struct ieee80211_bar *bar; - int rtap_len; - - for (i = 0; i < IEEE80211_TX_MAX_RATES; i++) { - if (info->status.rates[i].idx < 0) { - break; - } else if (i >= hw->max_report_rates) { - /* the HW cannot have attempted that rate */ - info->status.rates[i].idx = -1; - info->status.rates[i].count = 0; - break; - } - - retry_count += info->status.rates[i].count; - } - rates_idx = i - 1; - - if (retry_count < 0) - retry_count = 0; - - rcu_read_lock(); - - sband = local->hw.wiphy->bands[info->band]; - fc = hdr->frame_control; - - for_each_sta_info(local, hdr->addr1, sta, tmp) { - /* skip wrong virtual interface */ - if (compare_ether_addr(hdr->addr2, sta->sdata->vif.addr)) - continue; - - if (info->flags & IEEE80211_TX_STATUS_EOSP) - clear_sta_flag(sta, WLAN_STA_SP); - - acked = !!(info->flags & IEEE80211_TX_STAT_ACK); - if (!acked && test_sta_flag(sta, WLAN_STA_PS_STA)) { - /* - * The STA is in power save mode, so assume - * that this TX packet failed because of that. - */ - ieee80211_handle_filtered_frame(local, sta, skb); - rcu_read_unlock(); - return; - } - - if ((local->hw.flags & IEEE80211_HW_HAS_RATE_CONTROL) && - (rates_idx != -1)) - sta->last_tx_rate = info->status.rates[rates_idx]; - - if ((info->flags & IEEE80211_TX_STAT_AMPDU_NO_BACK) && - (ieee80211_is_data_qos(fc))) { - u16 tid, ssn; - u8 *qc; - - qc = ieee80211_get_qos_ctl(hdr); - tid = qc[0] & 0xf; - ssn = ((le16_to_cpu(hdr->seq_ctrl) + 0x10) - & IEEE80211_SCTL_SEQ); - ieee80211_send_bar(&sta->sdata->vif, hdr->addr1, - tid, ssn); - } - - if (!acked && ieee80211_is_back_req(fc)) { - u16 tid, control; - - /* - * BAR failed, store the last SSN and retry sending - * the BAR when the next unicast transmission on the - * same TID succeeds. - */ - bar = (struct ieee80211_bar *) skb->data; - control = le16_to_cpu(bar->control); - if (!(control & IEEE80211_BAR_CTRL_MULTI_TID)) { - u16 ssn = le16_to_cpu(bar->start_seq_num); - - tid = (control & - IEEE80211_BAR_CTRL_TID_INFO_MASK) >> - IEEE80211_BAR_CTRL_TID_INFO_SHIFT; - - ieee80211_set_bar_pending(sta, tid, ssn); - } - } - - if (info->flags & IEEE80211_TX_STAT_TX_FILTERED) { - ieee80211_handle_filtered_frame(local, sta, skb); - rcu_read_unlock(); - return; - } else { - if (!acked) - sta->tx_retry_failed++; - sta->tx_retry_count += retry_count; - } - - rate_control_tx_status(local, sband, sta, skb); - if (ieee80211_vif_is_mesh(&sta->sdata->vif)) - ieee80211s_update_metric(local, sta, skb); - - if (!(info->flags & IEEE80211_TX_CTL_INJECTED) && acked) - ieee80211_frame_acked(sta, skb); - - if ((sta->sdata->vif.type == NL80211_IFTYPE_STATION) && - (local->hw.flags & IEEE80211_HW_REPORTS_TX_ACK_STATUS)) - ieee80211_sta_tx_notify(sta->sdata, (void *) skb->data, acked); - - if (local->hw.flags & IEEE80211_HW_REPORTS_TX_ACK_STATUS) { - if (info->flags & IEEE80211_TX_STAT_ACK) { - if (sta->lost_packets) - sta->lost_packets = 0; - } else if (++sta->lost_packets >= STA_LOST_PKT_THRESHOLD) { - cfg80211_cqm_pktloss_notify(sta->sdata->dev, - sta->sta.addr, - sta->lost_packets, - GFP_ATOMIC); - sta->lost_packets = 0; - } - } - } - - rcu_read_unlock(); - - ieee80211_led_tx(local, 0); - - /* SNMP counters - * Fragments are passed to low-level drivers as separate skbs, so these - * are actually fragments, not frames. Update frame counters only for - * the first fragment of the frame. */ - if (info->flags & IEEE80211_TX_STAT_ACK) { - if (ieee80211_is_first_frag(hdr->seq_ctrl)) { - local->dot11TransmittedFrameCount++; - if (is_multicast_ether_addr(hdr->addr1)) - local->dot11MulticastTransmittedFrameCount++; - if (retry_count > 0) - local->dot11RetryCount++; - if (retry_count > 1) - local->dot11MultipleRetryCount++; - } - - /* This counter shall be incremented for an acknowledged MPDU - * with an individual address in the address 1 field or an MPDU - * with a multicast address in the address 1 field of type Data - * or Management. */ - if (!is_multicast_ether_addr(hdr->addr1) || - ieee80211_is_data(fc) || - ieee80211_is_mgmt(fc)) - local->dot11TransmittedFragmentCount++; - } else { - if (ieee80211_is_first_frag(hdr->seq_ctrl)) - local->dot11FailedCount++; - } - - if (ieee80211_is_nullfunc(fc) && ieee80211_has_pm(fc) && - (local->hw.flags & IEEE80211_HW_REPORTS_TX_ACK_STATUS) && - !(info->flags & IEEE80211_TX_CTL_INJECTED) && - local->ps_sdata && !(local->scanning)) { - if (info->flags & IEEE80211_TX_STAT_ACK) { - local->ps_sdata->u.mgd.flags |= - IEEE80211_STA_NULLFUNC_ACKED; - } else - mod_timer(&local->dynamic_ps_timer, jiffies + - msecs_to_jiffies(10)); - } - - if (info->flags & IEEE80211_TX_INTFL_NL80211_FRAME_TX) { - u64 cookie = (unsigned long)skb; - - if (ieee80211_is_nullfunc(hdr->frame_control) || - ieee80211_is_qos_nullfunc(hdr->frame_control)) { - acked = info->flags & IEEE80211_TX_STAT_ACK; - - cfg80211_probe_status(skb->dev, hdr->addr1, - cookie, acked, GFP_ATOMIC); - } else { - struct ieee80211_work *wk; - - rcu_read_lock(); - list_for_each_entry_rcu(wk, &local->work_list, list) { - if (wk->type != IEEE80211_WORK_OFFCHANNEL_TX) - continue; - if (wk->offchan_tx.frame != skb) - continue; - wk->offchan_tx.status = true; - break; - } - rcu_read_unlock(); - if (local->hw_roc_skb_for_status == skb) { - cookie = local->hw_roc_cookie ^ 2; - local->hw_roc_skb_for_status = NULL; - } - - cfg80211_mgmt_tx_status( - skb->dev, cookie, skb->data, skb->len, - !!(info->flags & IEEE80211_TX_STAT_ACK), - GFP_ATOMIC); - } - } - - if (unlikely(info->ack_frame_id)) { - struct sk_buff *ack_skb; - unsigned long flags; - - spin_lock_irqsave(&local->ack_status_lock, flags); - ack_skb = idr_find(&local->ack_status_frames, - info->ack_frame_id); - if (ack_skb) - idr_remove(&local->ack_status_frames, - info->ack_frame_id); - spin_unlock_irqrestore(&local->ack_status_lock, flags); - - /* consumes ack_skb */ - if (ack_skb) - skb_complete_wifi_ack(ack_skb, - info->flags & IEEE80211_TX_STAT_ACK); - } - - /* this was a transmitted frame, but now we want to reuse it */ - skb_orphan(skb); - - /* Need to make a copy before skb->cb gets cleared */ - send_to_cooked = !!(info->flags & IEEE80211_TX_CTL_INJECTED) || - !(ieee80211_is_data(fc)); - - /* - * This is a bit racy but we can avoid a lot of work - * with this test... - */ - if (!local->monitors && (!send_to_cooked || !local->cooked_mntrs)) { - dev_kfree_skb(skb); - return; - } - - /* send frame to monitor interfaces now */ - rtap_len = ieee80211_tx_radiotap_len(info); - if (WARN_ON_ONCE(skb_headroom(skb) < rtap_len)) { - printk(KERN_ERR "ieee80211_tx_status: headroom too small\n"); - dev_kfree_skb(skb); - return; - } - ieee80211_add_tx_radiotap_header(sband, skb, retry_count, rtap_len); - - /* XXX: is this sufficient for BPF? */ - skb_set_mac_header(skb, 0); - skb->ip_summed = CHECKSUM_UNNECESSARY; - skb->pkt_type = PACKET_OTHERHOST; - skb->protocol = htons(ETH_P_802_2); - memset(skb->cb, 0, sizeof(skb->cb)); - - rcu_read_lock(); - list_for_each_entry_rcu(sdata, &local->interfaces, list) { - if (sdata->vif.type == NL80211_IFTYPE_MONITOR) { - if (!ieee80211_sdata_running(sdata)) - continue; - - if ((sdata->u.mntr_flags & MONITOR_FLAG_COOK_FRAMES) && - !send_to_cooked) - continue; - - if (prev_dev) { - skb2 = skb_clone(skb, GFP_ATOMIC); - if (skb2) { - skb2->dev = prev_dev; - netif_rx(skb2); - } - } - - prev_dev = sdata->dev; - } - } - if (prev_dev) { - skb->dev = prev_dev; - netif_rx(skb); - skb = NULL; - } - rcu_read_unlock(); - dev_kfree_skb(skb); -} -EXPORT_SYMBOL(ieee80211_tx_status); - -void ieee80211_report_low_ack(struct ieee80211_sta *pubsta, u32 num_packets) -{ - struct sta_info *sta = container_of(pubsta, struct sta_info, sta); - cfg80211_cqm_pktloss_notify(sta->sdata->dev, sta->sta.addr, - num_packets, GFP_ATOMIC); -} -EXPORT_SYMBOL(ieee80211_report_low_ack); - -void ieee80211_free_txskb(struct ieee80211_hw *hw, struct sk_buff *skb) -{ - struct ieee80211_local *local = hw_to_local(hw); - struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb); - - if (unlikely(info->ack_frame_id)) { - struct sk_buff *ack_skb; - unsigned long flags; - - spin_lock_irqsave(&local->ack_status_lock, flags); - ack_skb = idr_find(&local->ack_status_frames, - info->ack_frame_id); - if (ack_skb) - idr_remove(&local->ack_status_frames, - info->ack_frame_id); - spin_unlock_irqrestore(&local->ack_status_lock, flags); - - /* consumes ack_skb */ - if (ack_skb) - dev_kfree_skb_any(ack_skb); - } - - dev_kfree_skb_any(skb); -} -EXPORT_SYMBOL(ieee80211_free_txskb); diff --git a/openairITS/mac/DOT11/net/mac80211/tkip.c b/openairITS/mac/DOT11/net/mac80211/tkip.c deleted file mode 100644 index 51077a956a..0000000000 --- a/openairITS/mac/DOT11/net/mac80211/tkip.c +++ /dev/null @@ -1,360 +0,0 @@ -/* - * Copyright 2002-2004, Instant802 Networks, Inc. - * Copyright 2005, Devicescape Software, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - */ -#include -#include -#include -#include -#include -#include - -#include -#include "driver-ops.h" -#include "key.h" -#include "tkip.h" -#include "wep.h" - -#define PHASE1_LOOP_COUNT 8 - -/* - * 2-byte by 2-byte subset of the full AES S-box table; second part of this - * table is identical to first part but byte-swapped - */ -static const u16 tkip_sbox[256] = -{ - 0xC6A5, 0xF884, 0xEE99, 0xF68D, 0xFF0D, 0xD6BD, 0xDEB1, 0x9154, - 0x6050, 0x0203, 0xCEA9, 0x567D, 0xE719, 0xB562, 0x4DE6, 0xEC9A, - 0x8F45, 0x1F9D, 0x8940, 0xFA87, 0xEF15, 0xB2EB, 0x8EC9, 0xFB0B, - 0x41EC, 0xB367, 0x5FFD, 0x45EA, 0x23BF, 0x53F7, 0xE496, 0x9B5B, - 0x75C2, 0xE11C, 0x3DAE, 0x4C6A, 0x6C5A, 0x7E41, 0xF502, 0x834F, - 0x685C, 0x51F4, 0xD134, 0xF908, 0xE293, 0xAB73, 0x6253, 0x2A3F, - 0x080C, 0x9552, 0x4665, 0x9D5E, 0x3028, 0x37A1, 0x0A0F, 0x2FB5, - 0x0E09, 0x2436, 0x1B9B, 0xDF3D, 0xCD26, 0x4E69, 0x7FCD, 0xEA9F, - 0x121B, 0x1D9E, 0x5874, 0x342E, 0x362D, 0xDCB2, 0xB4EE, 0x5BFB, - 0xA4F6, 0x764D, 0xB761, 0x7DCE, 0x527B, 0xDD3E, 0x5E71, 0x1397, - 0xA6F5, 0xB968, 0x0000, 0xC12C, 0x4060, 0xE31F, 0x79C8, 0xB6ED, - 0xD4BE, 0x8D46, 0x67D9, 0x724B, 0x94DE, 0x98D4, 0xB0E8, 0x854A, - 0xBB6B, 0xC52A, 0x4FE5, 0xED16, 0x86C5, 0x9AD7, 0x6655, 0x1194, - 0x8ACF, 0xE910, 0x0406, 0xFE81, 0xA0F0, 0x7844, 0x25BA, 0x4BE3, - 0xA2F3, 0x5DFE, 0x80C0, 0x058A, 0x3FAD, 0x21BC, 0x7048, 0xF104, - 0x63DF, 0x77C1, 0xAF75, 0x4263, 0x2030, 0xE51A, 0xFD0E, 0xBF6D, - 0x814C, 0x1814, 0x2635, 0xC32F, 0xBEE1, 0x35A2, 0x88CC, 0x2E39, - 0x9357, 0x55F2, 0xFC82, 0x7A47, 0xC8AC, 0xBAE7, 0x322B, 0xE695, - 0xC0A0, 0x1998, 0x9ED1, 0xA37F, 0x4466, 0x547E, 0x3BAB, 0x0B83, - 0x8CCA, 0xC729, 0x6BD3, 0x283C, 0xA779, 0xBCE2, 0x161D, 0xAD76, - 0xDB3B, 0x6456, 0x744E, 0x141E, 0x92DB, 0x0C0A, 0x486C, 0xB8E4, - 0x9F5D, 0xBD6E, 0x43EF, 0xC4A6, 0x39A8, 0x31A4, 0xD337, 0xF28B, - 0xD532, 0x8B43, 0x6E59, 0xDAB7, 0x018C, 0xB164, 0x9CD2, 0x49E0, - 0xD8B4, 0xACFA, 0xF307, 0xCF25, 0xCAAF, 0xF48E, 0x47E9, 0x1018, - 0x6FD5, 0xF088, 0x4A6F, 0x5C72, 0x3824, 0x57F1, 0x73C7, 0x9751, - 0xCB23, 0xA17C, 0xE89C, 0x3E21, 0x96DD, 0x61DC, 0x0D86, 0x0F85, - 0xE090, 0x7C42, 0x71C4, 0xCCAA, 0x90D8, 0x0605, 0xF701, 0x1C12, - 0xC2A3, 0x6A5F, 0xAEF9, 0x69D0, 0x1791, 0x9958, 0x3A27, 0x27B9, - 0xD938, 0xEB13, 0x2BB3, 0x2233, 0xD2BB, 0xA970, 0x0789, 0x33A7, - 0x2DB6, 0x3C22, 0x1592, 0xC920, 0x8749, 0xAAFF, 0x5078, 0xA57A, - 0x038F, 0x59F8, 0x0980, 0x1A17, 0x65DA, 0xD731, 0x84C6, 0xD0B8, - 0x82C3, 0x29B0, 0x5A77, 0x1E11, 0x7BCB, 0xA8FC, 0x6DD6, 0x2C3A, -}; - -static u16 tkipS(u16 val) -{ - return tkip_sbox[val & 0xff] ^ swab16(tkip_sbox[val >> 8]); -} - -static u8 *write_tkip_iv(u8 *pos, u16 iv16) -{ - *pos++ = iv16 >> 8; - *pos++ = ((iv16 >> 8) | 0x20) & 0x7f; - *pos++ = iv16 & 0xFF; - return pos; -} - -/* - * P1K := Phase1(TA, TK, TSC) - * TA = transmitter address (48 bits) - * TK = dot11DefaultKeyValue or dot11KeyMappingValue (128 bits) - * TSC = TKIP sequence counter (48 bits, only 32 msb bits used) - * P1K: 80 bits - */ -static void tkip_mixing_phase1(const u8 *tk, struct tkip_ctx *ctx, - const u8 *ta, u32 tsc_IV32) -{ - int i, j; - u16 *p1k = ctx->p1k; - - p1k[0] = tsc_IV32 & 0xFFFF; - p1k[1] = tsc_IV32 >> 16; - p1k[2] = get_unaligned_le16(ta + 0); - p1k[3] = get_unaligned_le16(ta + 2); - p1k[4] = get_unaligned_le16(ta + 4); - - for (i = 0; i < PHASE1_LOOP_COUNT; i++) { - j = 2 * (i & 1); - p1k[0] += tkipS(p1k[4] ^ get_unaligned_le16(tk + 0 + j)); - p1k[1] += tkipS(p1k[0] ^ get_unaligned_le16(tk + 4 + j)); - p1k[2] += tkipS(p1k[1] ^ get_unaligned_le16(tk + 8 + j)); - p1k[3] += tkipS(p1k[2] ^ get_unaligned_le16(tk + 12 + j)); - p1k[4] += tkipS(p1k[3] ^ get_unaligned_le16(tk + 0 + j)) + i; - } - ctx->state = TKIP_STATE_PHASE1_DONE; - ctx->p1k_iv32 = tsc_IV32; -} - -static void tkip_mixing_phase2(const u8 *tk, struct tkip_ctx *ctx, - u16 tsc_IV16, u8 *rc4key) -{ - u16 ppk[6]; - const u16 *p1k = ctx->p1k; - int i; - - ppk[0] = p1k[0]; - ppk[1] = p1k[1]; - ppk[2] = p1k[2]; - ppk[3] = p1k[3]; - ppk[4] = p1k[4]; - ppk[5] = p1k[4] + tsc_IV16; - - ppk[0] += tkipS(ppk[5] ^ get_unaligned_le16(tk + 0)); - ppk[1] += tkipS(ppk[0] ^ get_unaligned_le16(tk + 2)); - ppk[2] += tkipS(ppk[1] ^ get_unaligned_le16(tk + 4)); - ppk[3] += tkipS(ppk[2] ^ get_unaligned_le16(tk + 6)); - ppk[4] += tkipS(ppk[3] ^ get_unaligned_le16(tk + 8)); - ppk[5] += tkipS(ppk[4] ^ get_unaligned_le16(tk + 10)); - ppk[0] += ror16(ppk[5] ^ get_unaligned_le16(tk + 12), 1); - ppk[1] += ror16(ppk[0] ^ get_unaligned_le16(tk + 14), 1); - ppk[2] += ror16(ppk[1], 1); - ppk[3] += ror16(ppk[2], 1); - ppk[4] += ror16(ppk[3], 1); - ppk[5] += ror16(ppk[4], 1); - - rc4key = write_tkip_iv(rc4key, tsc_IV16); - *rc4key++ = ((ppk[5] ^ get_unaligned_le16(tk)) >> 1) & 0xFF; - - for (i = 0; i < 6; i++) - put_unaligned_le16(ppk[i], rc4key + 2 * i); -} - -/* Add TKIP IV and Ext. IV at @pos. @iv0, @iv1, and @iv2 are the first octets - * of the IV. Returns pointer to the octet following IVs (i.e., beginning of - * the packet payload). */ -u8 *ieee80211_tkip_add_iv(u8 *pos, struct ieee80211_key *key) -{ - lockdep_assert_held(&key->u.tkip.txlock); - - pos = write_tkip_iv(pos, key->u.tkip.tx.iv16); - *pos++ = (key->conf.keyidx << 6) | (1 << 5) /* Ext IV */; - put_unaligned_le32(key->u.tkip.tx.iv32, pos); - return pos + 4; -} - -static void ieee80211_compute_tkip_p1k(struct ieee80211_key *key, u32 iv32) -{ - struct ieee80211_sub_if_data *sdata = key->sdata; - struct tkip_ctx *ctx = &key->u.tkip.tx; - const u8 *tk = &key->conf.key[NL80211_TKIP_DATA_OFFSET_ENCR_KEY]; - - lockdep_assert_held(&key->u.tkip.txlock); - - /* - * Update the P1K when the IV32 is different from the value it - * had when we last computed it (or when not initialised yet). - * This might flip-flop back and forth if packets are processed - * out-of-order due to the different ACs, but then we have to - * just compute the P1K more often. - */ - if (ctx->p1k_iv32 != iv32 || ctx->state == TKIP_STATE_NOT_INIT) - tkip_mixing_phase1(tk, ctx, sdata->vif.addr, iv32); -} - -void ieee80211_get_tkip_p1k_iv(struct ieee80211_key_conf *keyconf, - u32 iv32, u16 *p1k) -{ - struct ieee80211_key *key = (struct ieee80211_key *) - container_of(keyconf, struct ieee80211_key, conf); - struct tkip_ctx *ctx = &key->u.tkip.tx; - unsigned long flags; - - spin_lock_irqsave(&key->u.tkip.txlock, flags); - ieee80211_compute_tkip_p1k(key, iv32); - memcpy(p1k, ctx->p1k, sizeof(ctx->p1k)); - spin_unlock_irqrestore(&key->u.tkip.txlock, flags); -} -EXPORT_SYMBOL(ieee80211_get_tkip_p1k_iv); - -void ieee80211_get_tkip_rx_p1k(struct ieee80211_key_conf *keyconf, - const u8 *ta, u32 iv32, u16 *p1k) -{ - const u8 *tk = &keyconf->key[NL80211_TKIP_DATA_OFFSET_ENCR_KEY]; - struct tkip_ctx ctx; - - tkip_mixing_phase1(tk, &ctx, ta, iv32); - memcpy(p1k, ctx.p1k, sizeof(ctx.p1k)); -} -EXPORT_SYMBOL(ieee80211_get_tkip_rx_p1k); - -void ieee80211_get_tkip_p2k(struct ieee80211_key_conf *keyconf, - struct sk_buff *skb, u8 *p2k) -{ - struct ieee80211_key *key = (struct ieee80211_key *) - container_of(keyconf, struct ieee80211_key, conf); - const u8 *tk = &key->conf.key[NL80211_TKIP_DATA_OFFSET_ENCR_KEY]; - struct tkip_ctx *ctx = &key->u.tkip.tx; - struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data; - const u8 *data = (u8 *)hdr + ieee80211_hdrlen(hdr->frame_control); - u32 iv32 = get_unaligned_le32(&data[4]); - u16 iv16 = data[2] | (data[0] << 8); - unsigned long flags; - - spin_lock_irqsave(&key->u.tkip.txlock, flags); - ieee80211_compute_tkip_p1k(key, iv32); - tkip_mixing_phase2(tk, ctx, iv16, p2k); - spin_unlock_irqrestore(&key->u.tkip.txlock, flags); -} -EXPORT_SYMBOL(ieee80211_get_tkip_p2k); - -/* - * Encrypt packet payload with TKIP using @key. @pos is a pointer to the - * beginning of the buffer containing payload. This payload must include - * the IV/Ext.IV and space for (taildroom) four octets for ICV. - * @payload_len is the length of payload (_not_ including IV/ICV length). - * @ta is the transmitter addresses. - */ -int ieee80211_tkip_encrypt_data(struct crypto_cipher *tfm, - struct ieee80211_key *key, - struct sk_buff *skb, - u8 *payload, size_t payload_len) -{ - u8 rc4key[16]; - - ieee80211_get_tkip_p2k(&key->conf, skb, rc4key); - - return ieee80211_wep_encrypt_data(tfm, rc4key, 16, - payload, payload_len); -} - -/* Decrypt packet payload with TKIP using @key. @pos is a pointer to the - * beginning of the buffer containing IEEE 802.11 header payload, i.e., - * including IV, Ext. IV, real data, Michael MIC, ICV. @payload_len is the - * length of payload, including IV, Ext. IV, MIC, ICV. */ -int ieee80211_tkip_decrypt_data(struct crypto_cipher *tfm, - struct ieee80211_key *key, - u8 *payload, size_t payload_len, u8 *ta, - u8 *ra, int only_iv, int queue, - u32 *out_iv32, u16 *out_iv16) -{ - u32 iv32; - u32 iv16; - u8 rc4key[16], keyid, *pos = payload; - int res; - const u8 *tk = &key->conf.key[NL80211_TKIP_DATA_OFFSET_ENCR_KEY]; - - if (payload_len < 12) - return -1; - - iv16 = (pos[0] << 8) | pos[2]; - keyid = pos[3]; - iv32 = get_unaligned_le32(pos + 4); - pos += 8; -#ifdef CONFIG_MAC80211_TKIP_DEBUG - { - int i; - printk(KERN_DEBUG "TKIP decrypt: data(len=%zd)", payload_len); - for (i = 0; i < payload_len; i++) - printk(" %02x", payload[i]); - printk("\n"); - printk(KERN_DEBUG "TKIP decrypt: iv16=%04x iv32=%08x\n", - iv16, iv32); - } -#endif - - if (!(keyid & (1 << 5))) - return TKIP_DECRYPT_NO_EXT_IV; - - if ((keyid >> 6) != key->conf.keyidx) - return TKIP_DECRYPT_INVALID_KEYIDX; - - if (key->u.tkip.rx[queue].state != TKIP_STATE_NOT_INIT && - (iv32 < key->u.tkip.rx[queue].iv32 || - (iv32 == key->u.tkip.rx[queue].iv32 && - iv16 <= key->u.tkip.rx[queue].iv16))) { -#ifdef CONFIG_MAC80211_TKIP_DEBUG - printk(KERN_DEBUG "TKIP replay detected for RX frame from " - "%pM (RX IV (%04x,%02x) <= prev. IV (%04x,%02x)\n", - ta, - iv32, iv16, key->u.tkip.rx[queue].iv32, - key->u.tkip.rx[queue].iv16); -#endif - return TKIP_DECRYPT_REPLAY; - } - - if (only_iv) { - res = TKIP_DECRYPT_OK; - key->u.tkip.rx[queue].state = TKIP_STATE_PHASE1_HW_UPLOADED; - goto done; - } - - if (key->u.tkip.rx[queue].state == TKIP_STATE_NOT_INIT || - key->u.tkip.rx[queue].iv32 != iv32) { - /* IV16 wrapped around - perform TKIP phase 1 */ - tkip_mixing_phase1(tk, &key->u.tkip.rx[queue], ta, iv32); -#ifdef CONFIG_MAC80211_TKIP_DEBUG - { - int i; - u8 key_offset = NL80211_TKIP_DATA_OFFSET_ENCR_KEY; - printk(KERN_DEBUG "TKIP decrypt: Phase1 TA=%pM" - " TK=", ta); - for (i = 0; i < 16; i++) - printk("%02x ", - key->conf.key[key_offset + i]); - printk("\n"); - printk(KERN_DEBUG "TKIP decrypt: P1K="); - for (i = 0; i < 5; i++) - printk("%04x ", key->u.tkip.rx[queue].p1k[i]); - printk("\n"); - } -#endif - } - if (key->local->ops->update_tkip_key && - key->flags & KEY_FLAG_UPLOADED_TO_HARDWARE && - key->u.tkip.rx[queue].state != TKIP_STATE_PHASE1_HW_UPLOADED) { - struct ieee80211_sub_if_data *sdata = key->sdata; - - if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN) - sdata = container_of(key->sdata->bss, - struct ieee80211_sub_if_data, u.ap); - drv_update_tkip_key(key->local, sdata, &key->conf, key->sta, - iv32, key->u.tkip.rx[queue].p1k); - key->u.tkip.rx[queue].state = TKIP_STATE_PHASE1_HW_UPLOADED; - } - - tkip_mixing_phase2(tk, &key->u.tkip.rx[queue], iv16, rc4key); -#ifdef CONFIG_MAC80211_TKIP_DEBUG - { - int i; - printk(KERN_DEBUG "TKIP decrypt: Phase2 rc4key="); - for (i = 0; i < 16; i++) - printk("%02x ", rc4key[i]); - printk("\n"); - } -#endif - - res = ieee80211_wep_decrypt_data(tfm, rc4key, 16, pos, payload_len - 12); - done: - if (res == TKIP_DECRYPT_OK) { - /* - * Record previously received IV, will be copied into the - * key information after MIC verification. It is possible - * that we don't catch replays of fragments but that's ok - * because the Michael MIC verication will then fail. - */ - *out_iv32 = iv32; - *out_iv16 = iv16; - } - - return res; -} diff --git a/openairITS/mac/DOT11/net/mac80211/tkip.h b/openairITS/mac/DOT11/net/mac80211/tkip.h deleted file mode 100644 index e3ecb659b9..0000000000 --- a/openairITS/mac/DOT11/net/mac80211/tkip.h +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright 2002-2004, Instant802 Networks, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - */ - -#ifndef TKIP_H -#define TKIP_H - -#include -#include -#include "key.h" - -u8 *ieee80211_tkip_add_iv(u8 *pos, struct ieee80211_key *key); - -int ieee80211_tkip_encrypt_data(struct crypto_cipher *tfm, - struct ieee80211_key *key, - struct sk_buff *skb, - u8 *payload, size_t payload_len); - -enum { - TKIP_DECRYPT_OK = 0, - TKIP_DECRYPT_NO_EXT_IV = -1, - TKIP_DECRYPT_INVALID_KEYIDX = -2, - TKIP_DECRYPT_REPLAY = -3, -}; -int ieee80211_tkip_decrypt_data(struct crypto_cipher *tfm, - struct ieee80211_key *key, - u8 *payload, size_t payload_len, u8 *ta, - u8 *ra, int only_iv, int queue, - u32 *out_iv32, u16 *out_iv16); - -#endif /* TKIP_H */ diff --git a/openairITS/mac/DOT11/net/mac80211/tx.c b/openairITS/mac/DOT11/net/mac80211/tx.c deleted file mode 100644 index 612c6f962a..0000000000 --- a/openairITS/mac/DOT11/net/mac80211/tx.c +++ /dev/null @@ -1,2886 +0,0 @@ -/* - * Copyright 2002-2005, Instant802 Networks, Inc. - * Copyright 2005-2006, Devicescape Software, Inc. - * Copyright 2006-2007 Jiri Benc - * Copyright 2007 Johannes Berg - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - * - * - * Transmit and frame generation functions. - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "ieee80211_i.h" -#include "driver-ops.h" -#include "led.h" -#include "mesh.h" -#include "wep.h" -#include "wpa.h" -#include "wme.h" -#include "rate.h" - -/* misc utils */ - -static __le16 ieee80211_duration(struct ieee80211_tx_data *tx, - struct sk_buff *skb, int group_addr, - int next_frag_len) -{ - int rate, mrate, erp, dur, i; - struct ieee80211_rate *txrate; - struct ieee80211_local *local = tx->local; - struct ieee80211_supported_band *sband; - struct ieee80211_hdr *hdr; - struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb); - - /* assume HW handles this */ - if (info->control.rates[0].flags & IEEE80211_TX_RC_MCS) - return 0; - - /* uh huh? */ - if (WARN_ON_ONCE(info->control.rates[0].idx < 0)) - return 0; - - sband = local->hw.wiphy->bands[tx->channel->band]; - txrate = &sband->bitrates[info->control.rates[0].idx]; - - erp = txrate->flags & IEEE80211_RATE_ERP_G; - - /* - * data and mgmt (except PS Poll): - * - during CFP: 32768 - * - during contention period: - * if addr1 is group address: 0 - * if more fragments = 0 and addr1 is individual address: time to - * transmit one ACK plus SIFS - * if more fragments = 1 and addr1 is individual address: time to - * transmit next fragment plus 2 x ACK plus 3 x SIFS - * - * IEEE 802.11, 9.6: - * - control response frame (CTS or ACK) shall be transmitted using the - * same rate as the immediately previous frame in the frame exchange - * sequence, if this rate belongs to the PHY mandatory rates, or else - * at the highest possible rate belonging to the PHY rates in the - * BSSBasicRateSet - */ - hdr = (struct ieee80211_hdr *)skb->data; - if (ieee80211_is_ctl(hdr->frame_control)) { - /* TODO: These control frames are not currently sent by - * mac80211, but should they be implemented, this function - * needs to be updated to support duration field calculation. - * - * RTS: time needed to transmit pending data/mgmt frame plus - * one CTS frame plus one ACK frame plus 3 x SIFS - * CTS: duration of immediately previous RTS minus time - * required to transmit CTS and its SIFS - * ACK: 0 if immediately previous directed data/mgmt had - * more=0, with more=1 duration in ACK frame is duration - * from previous frame minus time needed to transmit ACK - * and its SIFS - * PS Poll: BIT(15) | BIT(14) | aid - */ - return 0; - } - - /* data/mgmt */ - if (0 /* FIX: data/mgmt during CFP */) - return cpu_to_le16(32768); - - if (group_addr) /* Group address as the destination - no ACK */ - return 0; - - /* Individual destination address: - * IEEE 802.11, Ch. 9.6 (after IEEE 802.11g changes) - * CTS and ACK frames shall be transmitted using the highest rate in - * basic rate set that is less than or equal to the rate of the - * immediately previous frame and that is using the same modulation - * (CCK or OFDM). If no basic rate set matches with these requirements, - * the highest mandatory rate of the PHY that is less than or equal to - * the rate of the previous frame is used. - * Mandatory rates for IEEE 802.11g PHY: 1, 2, 5.5, 11, 6, 12, 24 Mbps - */ - rate = -1; - /* use lowest available if everything fails */ - mrate = sband->bitrates[0].bitrate; - for (i = 0; i < sband->n_bitrates; i++) { - struct ieee80211_rate *r = &sband->bitrates[i]; - - if (r->bitrate > txrate->bitrate) - break; - - if (tx->sdata->vif.bss_conf.basic_rates & BIT(i)) - rate = r->bitrate; - - /* - * [PLATA] to check what to do with the two other bands. My feeling is that we should - * 1) define a flag IEEE80211_RATE_MANDATORY_P to 6Mbps - * 2) assigns it for the flag... - * Note: to check the mandatory rate for 800MHz - */ - switch (sband->band) { - case IEEE80211_BAND_5_9GHZ: - if (r->flags & IEEE80211_RATE_MANDATORY_P) - mrate = r->bitrate; - break; - case IEEE80211_BAND_0_8GHZ: - if (r->flags & IEEE80211_RATE_MANDATORY_P) - mrate = r->bitrate; - break; - case IEEE80211_BAND_2GHZ: { - u32 flag; - if (tx->sdata->flags & IEEE80211_SDATA_OPERATING_GMODE) - flag = IEEE80211_RATE_MANDATORY_G; - else - flag = IEEE80211_RATE_MANDATORY_B; - if (r->flags & flag) - mrate = r->bitrate; - break; - } - case IEEE80211_BAND_5GHZ: - if (r->flags & IEEE80211_RATE_MANDATORY_A) - mrate = r->bitrate; - break; - case IEEE80211_NUM_BANDS: - WARN_ON(1); - break; - } - } - if (rate == -1) { - /* No matching basic rate found; use highest suitable mandatory - * PHY rate */ - rate = mrate; - } - - /* Don't calculate ACKs for QoS Frames with NoAck Policy set */ - if (ieee80211_is_data_qos(hdr->frame_control) && - *(ieee80211_get_qos_ctl(hdr)) | IEEE80211_QOS_CTL_ACK_POLICY_NOACK) - dur = 0; - else - /* Time needed to transmit ACK - * (10 bytes + 4-byte FCS = 112 bits) plus SIFS; rounded up - * to closest integer */ - dur = ieee80211_frame_duration(local, 10, rate, erp, - tx->sdata->vif.bss_conf.use_short_preamble); - - if (next_frag_len) { - /* Frame is fragmented: duration increases with time needed to - * transmit next fragment plus ACK and 2 x SIFS. */ - dur *= 2; /* ACK + SIFS */ - /* next fragment */ - dur += ieee80211_frame_duration(local, next_frag_len, - txrate->bitrate, erp, - tx->sdata->vif.bss_conf.use_short_preamble); - } - - return cpu_to_le16(dur); -} - -static inline int is_ieee80211_device(struct ieee80211_local *local, - struct net_device *dev) -{ - return local == wdev_priv(dev->ieee80211_ptr); -} - -/* tx handlers */ -static ieee80211_tx_result debug_noinline -ieee80211_tx_h_dynamic_ps(struct ieee80211_tx_data *tx) -{ - struct ieee80211_local *local = tx->local; - struct ieee80211_if_managed *ifmgd; - - /* driver doesn't support power save */ - if (!(local->hw.flags & IEEE80211_HW_SUPPORTS_PS)) - return TX_CONTINUE; - - /* hardware does dynamic power save */ - if (local->hw.flags & IEEE80211_HW_SUPPORTS_DYNAMIC_PS) - return TX_CONTINUE; - - /* dynamic power save disabled */ - if (local->hw.conf.dynamic_ps_timeout <= 0) - return TX_CONTINUE; - - /* we are scanning, don't enable power save */ - if (local->scanning) - return TX_CONTINUE; - - if (!local->ps_sdata) - return TX_CONTINUE; - - /* No point if we're going to suspend */ - if (local->quiescing) - return TX_CONTINUE; - - /* dynamic ps is supported only in managed mode */ - if (tx->sdata->vif.type != NL80211_IFTYPE_STATION) - return TX_CONTINUE; - - ifmgd = &tx->sdata->u.mgd; - - /* - * Don't wakeup from power save if u-apsd is enabled, voip ac has - * u-apsd enabled and the frame is in voip class. This effectively - * means that even if all access categories have u-apsd enabled, in - * practise u-apsd is only used with the voip ac. This is a - * workaround for the case when received voip class packets do not - * have correct qos tag for some reason, due the network or the - * peer application. - * - * Note: ifmgd->uapsd_queues access is racy here. If the value is - * changed via debugfs, user needs to reassociate manually to have - * everything in sync. - */ - if ((ifmgd->flags & IEEE80211_STA_UAPSD_ENABLED) - && (ifmgd->uapsd_queues & IEEE80211_WMM_IE_STA_QOSINFO_AC_VO) - && skb_get_queue_mapping(tx->skb) == 0) - return TX_CONTINUE; - - if (local->hw.conf.flags & IEEE80211_CONF_PS) { - ieee80211_stop_queues_by_reason(&local->hw, - IEEE80211_QUEUE_STOP_REASON_PS); - ifmgd->flags &= ~IEEE80211_STA_NULLFUNC_ACKED; - ieee80211_queue_work(&local->hw, - &local->dynamic_ps_disable_work); - } - - /* Don't restart the timer if we're not disassociated */ - if (!ifmgd->associated) - return TX_CONTINUE; - - mod_timer(&local->dynamic_ps_timer, jiffies + - msecs_to_jiffies(local->hw.conf.dynamic_ps_timeout)); - - return TX_CONTINUE; -} - -/* - * [PLATA] - when OCB is activated, this method should either not be called, or not do anything... - */ -static ieee80211_tx_result debug_noinline -ieee80211_tx_h_check_assoc(struct ieee80211_tx_data *tx) -{ - - struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)tx->skb->data; - struct ieee80211_tx_info *info = IEEE80211_SKB_CB(tx->skb); - bool assoc = false; - -#ifdef CONFIG_MAC80211_VERBOSE_DEBUG - printk(KERN_DEBUG "-- -- handlers -- ieee80211_tx_h_check_assoc \n"); -#endif - - if (unlikely(info->flags & IEEE80211_TX_CTL_INJECTED)) - return TX_CONTINUE; - - if (unlikely(test_bit(SCAN_SW_SCANNING, &tx->local->scanning)) && - test_bit(SDATA_STATE_OFFCHANNEL, &tx->sdata->state) && - !ieee80211_is_probe_req(hdr->frame_control) && - !ieee80211_is_nullfunc(hdr->frame_control)) - /* - * When software scanning only nullfunc frames (to notify - * the sleep state to the AP) and probe requests (for the - * active scan) are allowed, all other frames should not be - * sent and we should not get here, but if we do - * nonetheless, drop them to avoid sending them - * off-channel. See the link below and - * ieee80211_start_scan() for more. - * - * http://article.gmane.org/gmane.linux.kernel.wireless.general/30089 - */ - return TX_DROP; - - if (tx->sdata->vif.type == NL80211_IFTYPE_WDS) - return TX_CONTINUE; - - if (tx->sdata->vif.type == NL80211_IFTYPE_MESH_POINT) - return TX_CONTINUE; - - if (tx->flags & IEEE80211_TX_PS_BUFFERED) - return TX_CONTINUE; - - if (tx->sta) - assoc = test_sta_flag(tx->sta, WLAN_STA_ASSOC); - - if (likely(tx->flags & IEEE80211_TX_UNICAST)) { - if (unlikely(!assoc && - ieee80211_is_data(hdr->frame_control))) { -#ifdef CONFIG_MAC80211_VERBOSE_DEBUG - printk(KERN_DEBUG "%s: dropped data frame to not " - "associated station %pM\n", - tx->sdata->name, hdr->addr1); -#endif /* CONFIG_MAC80211_VERBOSE_DEBUG */ - I802_DEBUG_INC(tx->local->tx_handlers_drop_not_assoc); - return TX_DROP; - } - } else if (unlikely(tx->sdata->vif.type == NL80211_IFTYPE_AP && - ieee80211_is_data(hdr->frame_control) && - !atomic_read(&tx->sdata->u.ap.num_sta_authorized))) { - /* - * No associated STAs - no need to send multicast - * frames. - */ - return TX_DROP; - } - - // [PLATA]: to clarify here: if I read well, if I am AD-HOC and BROADCAST, no change are required (no need to be associated...)...,right? - return TX_CONTINUE; -} - -/* This function is called whenever the AP is about to exceed the maximum limit - * of buffered frames for power saving STAs. This situation should not really - * happen often during normal operation, so dropping the oldest buffered packet - * from each queue should be OK to make some room for new frames. */ -static void purge_old_ps_buffers(struct ieee80211_local *local) -{ - int total = 0, purged = 0; - struct sk_buff *skb; - struct ieee80211_sub_if_data *sdata; - struct sta_info *sta; - - /* - * virtual interfaces are protected by RCU - */ - rcu_read_lock(); - - list_for_each_entry_rcu(sdata, &local->interfaces, list) { - struct ieee80211_if_ap *ap; - if (sdata->vif.type != NL80211_IFTYPE_AP) - continue; - ap = &sdata->u.ap; - skb = skb_dequeue(&ap->ps_bc_buf); - if (skb) { - purged++; - dev_kfree_skb(skb); - } - total += skb_queue_len(&ap->ps_bc_buf); - } - - /* - * Drop one frame from each station from the lowest-priority - * AC that has frames at all. - */ - list_for_each_entry_rcu(sta, &local->sta_list, list) { - int ac; - - for (ac = IEEE80211_AC_BK; ac >= IEEE80211_AC_VO; ac--) { - skb = skb_dequeue(&sta->ps_tx_buf[ac]); - total += skb_queue_len(&sta->ps_tx_buf[ac]); - if (skb) { - purged++; - dev_kfree_skb(skb); - break; - } - } - } - - rcu_read_unlock(); - - local->total_ps_buffered = total; -#ifdef CONFIG_MAC80211_VERBOSE_PS_DEBUG - wiphy_debug(local->hw.wiphy, "PS buffers full - purged %d frames\n", - purged); -#endif -} - -static ieee80211_tx_result -ieee80211_tx_h_multicast_ps_buf(struct ieee80211_tx_data *tx) -{ - struct ieee80211_tx_info *info = IEEE80211_SKB_CB(tx->skb); - struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)tx->skb->data; - - /* - * broadcast/multicast frame - * - * If any of the associated stations is in power save mode, - * the frame is buffered to be sent after DTIM beacon frame. - * This is done either by the hardware or us. - */ - - /* powersaving STAs only in AP/VLAN mode */ - if (!tx->sdata->bss) - return TX_CONTINUE; - - /* no buffering for ordered frames */ - if (ieee80211_has_order(hdr->frame_control)) - return TX_CONTINUE; - - /* no stations in PS mode */ - if (!atomic_read(&tx->sdata->bss->num_sta_ps)) - return TX_CONTINUE; - - info->flags |= IEEE80211_TX_CTL_SEND_AFTER_DTIM; - - /* device releases frame after DTIM beacon */ - if (!(tx->local->hw.flags & IEEE80211_HW_HOST_BROADCAST_PS_BUFFERING)) - return TX_CONTINUE; - - /* buffered in mac80211 */ - if (tx->local->total_ps_buffered >= TOTAL_MAX_TX_BUFFER) - purge_old_ps_buffers(tx->local); - - if (skb_queue_len(&tx->sdata->bss->ps_bc_buf) >= AP_MAX_BC_BUFFER) { -#ifdef CONFIG_MAC80211_VERBOSE_PS_DEBUG - if (net_ratelimit()) - printk(KERN_DEBUG "%s: BC TX buffer full - dropping the oldest frame\n", - tx->sdata->name); -#endif - dev_kfree_skb(skb_dequeue(&tx->sdata->bss->ps_bc_buf)); - } else - tx->local->total_ps_buffered++; - - skb_queue_tail(&tx->sdata->bss->ps_bc_buf, tx->skb); - - return TX_QUEUED; -} - -static int ieee80211_use_mfp(__le16 fc, struct sta_info *sta, - struct sk_buff *skb) -{ - if (!ieee80211_is_mgmt(fc)) - return 0; - - if (sta == NULL || !test_sta_flag(sta, WLAN_STA_MFP)) - return 0; - - if (!ieee80211_is_robust_mgmt_frame((struct ieee80211_hdr *) - skb->data)) - return 0; - - return 1; -} - -static ieee80211_tx_result -ieee80211_tx_h_unicast_ps_buf(struct ieee80211_tx_data *tx) -{ - struct sta_info *sta = tx->sta; - struct ieee80211_tx_info *info = IEEE80211_SKB_CB(tx->skb); - struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)tx->skb->data; - struct ieee80211_local *local = tx->local; - - if (unlikely(!sta)) - return TX_CONTINUE; - - if (unlikely((test_sta_flag(sta, WLAN_STA_PS_STA) || - test_sta_flag(sta, WLAN_STA_PS_DRIVER)) && - !(info->flags & IEEE80211_TX_CTL_NO_PS_BUFFER))) { - int ac = skb_get_queue_mapping(tx->skb); - - /* only deauth, disassoc and action are bufferable MMPDUs */ - if (ieee80211_is_mgmt(hdr->frame_control) && - !ieee80211_is_deauth(hdr->frame_control) && - !ieee80211_is_disassoc(hdr->frame_control) && - !ieee80211_is_action(hdr->frame_control)) { - info->flags |= IEEE80211_TX_CTL_NO_PS_BUFFER; - return TX_CONTINUE; - } - -#ifdef CONFIG_MAC80211_VERBOSE_PS_DEBUG - printk(KERN_DEBUG "STA %pM aid %d: PS buffer for AC %d\n", - sta->sta.addr, sta->sta.aid, ac); -#endif /* CONFIG_MAC80211_VERBOSE_PS_DEBUG */ - if (tx->local->total_ps_buffered >= TOTAL_MAX_TX_BUFFER) - purge_old_ps_buffers(tx->local); - if (skb_queue_len(&sta->ps_tx_buf[ac]) >= STA_MAX_TX_BUFFER) { - struct sk_buff *old = skb_dequeue(&sta->ps_tx_buf[ac]); -#ifdef CONFIG_MAC80211_VERBOSE_PS_DEBUG - if (net_ratelimit()) - printk(KERN_DEBUG "%s: STA %pM TX buffer for " - "AC %d full - dropping oldest frame\n", - tx->sdata->name, sta->sta.addr, ac); -#endif - dev_kfree_skb(old); - } else - tx->local->total_ps_buffered++; - - info->control.jiffies = jiffies; - info->control.vif = &tx->sdata->vif; - info->flags |= IEEE80211_TX_INTFL_NEED_TXPROCESSING; - skb_queue_tail(&sta->ps_tx_buf[ac], tx->skb); - - if (!timer_pending(&local->sta_cleanup)) - mod_timer(&local->sta_cleanup, - round_jiffies(jiffies + - STA_INFO_CLEANUP_INTERVAL)); - - /* - * We queued up some frames, so the TIM bit might - * need to be set, recalculate it. - */ - sta_info_recalc_tim(sta); - - return TX_QUEUED; - } -#ifdef CONFIG_MAC80211_VERBOSE_PS_DEBUG - else if (unlikely(test_sta_flag(sta, WLAN_STA_PS_STA))) { - printk(KERN_DEBUG - "%s: STA %pM in PS mode, but polling/in SP -> send frame\n", - tx->sdata->name, sta->sta.addr); - } -#endif /* CONFIG_MAC80211_VERBOSE_PS_DEBUG */ - - return TX_CONTINUE; -} - -static ieee80211_tx_result debug_noinline -ieee80211_tx_h_ps_buf(struct ieee80211_tx_data *tx) -{ - if (unlikely(tx->flags & IEEE80211_TX_PS_BUFFERED)) - return TX_CONTINUE; - - if (tx->flags & IEEE80211_TX_UNICAST) - return ieee80211_tx_h_unicast_ps_buf(tx); - else - return ieee80211_tx_h_multicast_ps_buf(tx); -} - -static ieee80211_tx_result debug_noinline -ieee80211_tx_h_check_control_port_protocol(struct ieee80211_tx_data *tx) -{ - struct ieee80211_tx_info *info = IEEE80211_SKB_CB(tx->skb); - - if (unlikely(tx->sdata->control_port_protocol == tx->skb->protocol && - tx->sdata->control_port_no_encrypt)) - info->flags |= IEEE80211_TX_INTFL_DONT_ENCRYPT; - - return TX_CONTINUE; -} - -static ieee80211_tx_result debug_noinline -ieee80211_tx_h_select_key(struct ieee80211_tx_data *tx) -{ - struct ieee80211_key *key = NULL; - struct ieee80211_tx_info *info = IEEE80211_SKB_CB(tx->skb); - struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)tx->skb->data; - - if (unlikely(info->flags & IEEE80211_TX_INTFL_DONT_ENCRYPT)) - tx->key = NULL; - else if (tx->sta && (key = rcu_dereference(tx->sta->ptk))) - tx->key = key; - else if (ieee80211_is_mgmt(hdr->frame_control) && - is_multicast_ether_addr(hdr->addr1) && - ieee80211_is_robust_mgmt_frame(hdr) && - (key = rcu_dereference(tx->sdata->default_mgmt_key))) - tx->key = key; - else if (is_multicast_ether_addr(hdr->addr1) && - (key = rcu_dereference(tx->sdata->default_multicast_key))) - tx->key = key; - else if (!is_multicast_ether_addr(hdr->addr1) && - (key = rcu_dereference(tx->sdata->default_unicast_key))) - tx->key = key; - else if (tx->sdata->drop_unencrypted && - (tx->skb->protocol != tx->sdata->control_port_protocol) && - !(info->flags & IEEE80211_TX_CTL_INJECTED) && - (!ieee80211_is_robust_mgmt_frame(hdr) || - (ieee80211_is_action(hdr->frame_control) && - tx->sta && test_sta_flag(tx->sta, WLAN_STA_MFP)))) { - I802_DEBUG_INC(tx->local->tx_handlers_drop_unencrypted); - return TX_DROP; - } else - tx->key = NULL; - - if (tx->key) { - bool skip_hw = false; - - tx->key->tx_rx_count++; - /* TODO: add threshold stuff again */ - - switch (tx->key->conf.cipher) { - case WLAN_CIPHER_SUITE_WEP40: - case WLAN_CIPHER_SUITE_WEP104: - case WLAN_CIPHER_SUITE_TKIP: - if (!ieee80211_is_data_present(hdr->frame_control)) - tx->key = NULL; - break; - case WLAN_CIPHER_SUITE_CCMP: - if (!ieee80211_is_data_present(hdr->frame_control) && - !ieee80211_use_mfp(hdr->frame_control, tx->sta, - tx->skb)) - tx->key = NULL; - else - skip_hw = (tx->key->conf.flags & - IEEE80211_KEY_FLAG_SW_MGMT) && - ieee80211_is_mgmt(hdr->frame_control); - break; - case WLAN_CIPHER_SUITE_AES_CMAC: - if (!ieee80211_is_mgmt(hdr->frame_control)) - tx->key = NULL; - break; - } - - if (unlikely(tx->key && tx->key->flags & KEY_FLAG_TAINTED)) - return TX_DROP; - - if (!skip_hw && tx->key && - tx->key->flags & KEY_FLAG_UPLOADED_TO_HARDWARE) - info->control.hw_key = &tx->key->conf; - } - - return TX_CONTINUE; -} - -static ieee80211_tx_result debug_noinline -ieee80211_tx_h_rate_ctrl(struct ieee80211_tx_data *tx) -{ - struct ieee80211_tx_info *info = IEEE80211_SKB_CB(tx->skb); - struct ieee80211_hdr *hdr = (void *)tx->skb->data; - struct ieee80211_supported_band *sband; - struct ieee80211_rate *rate; - int i; - u32 len; - bool inval = false, rts = false, short_preamble = false; - struct ieee80211_tx_rate_control txrc; - bool assoc = false; - - memset(&txrc, 0, sizeof(txrc)); - - sband = tx->local->hw.wiphy->bands[tx->channel->band]; - - len = min_t(u32, tx->skb->len + FCS_LEN, - tx->local->hw.wiphy->frag_threshold); - - /* set up the tx rate control struct we give the RC algo */ - txrc.hw = &tx->local->hw; - txrc.sband = sband; - txrc.bss_conf = &tx->sdata->vif.bss_conf; - txrc.skb = tx->skb; - txrc.reported_rate.idx = -1; - txrc.rate_idx_mask = tx->sdata->rc_rateidx_mask[tx->channel->band]; - if (txrc.rate_idx_mask == (1 << sband->n_bitrates) - 1) - txrc.max_rate_idx = -1; - else - txrc.max_rate_idx = fls(txrc.rate_idx_mask) - 1; - memcpy(txrc.rate_idx_mcs_mask, - tx->sdata->rc_rateidx_mcs_mask[tx->channel->band], - sizeof(txrc.rate_idx_mcs_mask)); - txrc.bss = (tx->sdata->vif.type == NL80211_IFTYPE_AP || - tx->sdata->vif.type == NL80211_IFTYPE_MESH_POINT || - tx->sdata->vif.type == NL80211_IFTYPE_ADHOC); - - /* set up RTS protection if desired */ - if (len > tx->local->hw.wiphy->rts_threshold) { - txrc.rts = rts = true; - } - - /* - * Use short preamble if the BSS can handle it, but not for - * management frames unless we know the receiver can handle - * that -- the management frame might be to a station that - * just wants a probe response. - */ - if (tx->sdata->vif.bss_conf.use_short_preamble && - (ieee80211_is_data(hdr->frame_control) || - (tx->sta && test_sta_flag(tx->sta, WLAN_STA_SHORT_PREAMBLE)))) - txrc.short_preamble = short_preamble = true; - - if (tx->sta) - assoc = test_sta_flag(tx->sta, WLAN_STA_ASSOC); - - /* - * Lets not bother rate control if we're associated and cannot - * talk to the sta. This should not happen. - */ - if (WARN(test_bit(SCAN_SW_SCANNING, &tx->local->scanning) && assoc && - !rate_usable_index_exists(sband, &tx->sta->sta), - "%s: Dropped data frame as no usable bitrate found while " - "scanning and associated. Target station: " - "%pM on %d GHz band\n", - tx->sdata->name, hdr->addr1, - tx->channel->band ? 5 : 2)) - return TX_DROP; - - /* - * If we're associated with the sta at this point we know we can at - * least send the frame at the lowest bit rate. - */ - rate_control_get_rate(tx->sdata, tx->sta, &txrc); - - if (unlikely(info->control.rates[0].idx < 0)) - return TX_DROP; - - if (txrc.reported_rate.idx < 0) { - txrc.reported_rate = info->control.rates[0]; - if (tx->sta && ieee80211_is_data(hdr->frame_control)) - tx->sta->last_tx_rate = txrc.reported_rate; - } else if (tx->sta) - tx->sta->last_tx_rate = txrc.reported_rate; - - if (unlikely(!info->control.rates[0].count)) - info->control.rates[0].count = 1; - - if (WARN_ON_ONCE((info->control.rates[0].count > 1) && - (info->flags & IEEE80211_TX_CTL_NO_ACK))) - info->control.rates[0].count = 1; - - if (is_multicast_ether_addr(hdr->addr1)) { - /* - * XXX: verify the rate is in the basic rateset - */ - return TX_CONTINUE; - } - - /* - * set up the RTS/CTS rate as the fastest basic rate - * that is not faster than the data rate - * - * XXX: Should this check all retry rates? - */ - if (!(info->control.rates[0].flags & IEEE80211_TX_RC_MCS)) { - s8 baserate = 0; - - rate = &sband->bitrates[info->control.rates[0].idx]; - - for (i = 0; i < sband->n_bitrates; i++) { - /* must be a basic rate */ - if (!(tx->sdata->vif.bss_conf.basic_rates & BIT(i))) - continue; - /* must not be faster than the data rate */ - if (sband->bitrates[i].bitrate > rate->bitrate) - continue; - /* maximum */ - if (sband->bitrates[baserate].bitrate < - sband->bitrates[i].bitrate) - baserate = i; - } - - info->control.rts_cts_rate_idx = baserate; - } - - for (i = 0; i < IEEE80211_TX_MAX_RATES; i++) { - /* - * make sure there's no valid rate following - * an invalid one, just in case drivers don't - * take the API seriously to stop at -1. - */ - if (inval) { - info->control.rates[i].idx = -1; - continue; - } - if (info->control.rates[i].idx < 0) { - inval = true; - continue; - } - - /* - * For now assume MCS is already set up correctly, this - * needs to be fixed. - */ - if (info->control.rates[i].flags & IEEE80211_TX_RC_MCS) { - WARN_ON(info->control.rates[i].idx > 76); - continue; - } - - /* set up RTS protection if desired */ - if (rts) - info->control.rates[i].flags |= - IEEE80211_TX_RC_USE_RTS_CTS; - - /* RC is busted */ - if (WARN_ON_ONCE(info->control.rates[i].idx >= - sband->n_bitrates)) { - info->control.rates[i].idx = -1; - continue; - } - - rate = &sband->bitrates[info->control.rates[i].idx]; - - /* set up short preamble */ - if (short_preamble && - rate->flags & IEEE80211_RATE_SHORT_PREAMBLE) - info->control.rates[i].flags |= - IEEE80211_TX_RC_USE_SHORT_PREAMBLE; - - /* set up G protection */ - if (!rts && tx->sdata->vif.bss_conf.use_cts_prot && - rate->flags & IEEE80211_RATE_ERP_G) - info->control.rates[i].flags |= - IEEE80211_TX_RC_USE_CTS_PROTECT; - } - - return TX_CONTINUE; -} - -static ieee80211_tx_result debug_noinline -ieee80211_tx_h_sequence(struct ieee80211_tx_data *tx) -{ - struct ieee80211_tx_info *info = IEEE80211_SKB_CB(tx->skb); - struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)tx->skb->data; - u16 *seq; - u8 *qc; - int tid; - - /* - * Packet injection may want to control the sequence - * number, if we have no matching interface then we - * neither assign one ourselves nor ask the driver to. - */ - if (unlikely(info->control.vif->type == NL80211_IFTYPE_MONITOR)) - return TX_CONTINUE; - - if (unlikely(ieee80211_is_ctl(hdr->frame_control))) - return TX_CONTINUE; - - if (ieee80211_hdrlen(hdr->frame_control) < 24) - return TX_CONTINUE; - - if (ieee80211_is_qos_nullfunc(hdr->frame_control)) - return TX_CONTINUE; - - /* - * Anything but QoS data that has a sequence number field - * (is long enough) gets a sequence number from the global - * counter. - */ - if (!ieee80211_is_data_qos(hdr->frame_control)) { - /* driver should assign sequence number */ - info->flags |= IEEE80211_TX_CTL_ASSIGN_SEQ; - /* for pure STA mode without beacons, we can do it */ - hdr->seq_ctrl = cpu_to_le16(tx->sdata->sequence_number); - tx->sdata->sequence_number += 0x10; - return TX_CONTINUE; - } - - /* - * This should be true for injected/management frames only, for - * management frames we have set the IEEE80211_TX_CTL_ASSIGN_SEQ - * above since they are not QoS-data frames. - */ - if (!tx->sta) - return TX_CONTINUE; - - /* include per-STA, per-TID sequence counter */ - - qc = ieee80211_get_qos_ctl(hdr); - tid = *qc & IEEE80211_QOS_CTL_TID_MASK; - seq = &tx->sta->tid_seq[tid]; - - hdr->seq_ctrl = cpu_to_le16(*seq); - - /* Increase the sequence number. */ - *seq = (*seq + 0x10) & IEEE80211_SCTL_SEQ; - - return TX_CONTINUE; -} - -static int ieee80211_fragment(struct ieee80211_tx_data *tx, - struct sk_buff *skb, int hdrlen, - int frag_threshold) -{ - struct ieee80211_local *local = tx->local; - struct ieee80211_tx_info *info; - struct sk_buff *tmp; - int per_fragm = frag_threshold - hdrlen - FCS_LEN; - int pos = hdrlen + per_fragm; - int rem = skb->len - hdrlen - per_fragm; - - if (WARN_ON(rem < 0)) - return -EINVAL; - - /* first fragment was already added to queue by caller */ - - while (rem) { - int fraglen = per_fragm; - - if (fraglen > rem) - fraglen = rem; - rem -= fraglen; - tmp = dev_alloc_skb(local->tx_headroom + - frag_threshold + - IEEE80211_ENCRYPT_HEADROOM + - IEEE80211_ENCRYPT_TAILROOM); - if (!tmp) - return -ENOMEM; - - __skb_queue_tail(&tx->skbs, tmp); - - skb_reserve(tmp, local->tx_headroom + - IEEE80211_ENCRYPT_HEADROOM); - /* copy control information */ - memcpy(tmp->cb, skb->cb, sizeof(tmp->cb)); - - info = IEEE80211_SKB_CB(tmp); - info->flags &= ~(IEEE80211_TX_CTL_CLEAR_PS_FILT | - IEEE80211_TX_CTL_FIRST_FRAGMENT); - - if (rem) - info->flags |= IEEE80211_TX_CTL_MORE_FRAMES; - - skb_copy_queue_mapping(tmp, skb); - tmp->priority = skb->priority; - tmp->dev = skb->dev; - - /* copy header and data */ - memcpy(skb_put(tmp, hdrlen), skb->data, hdrlen); - memcpy(skb_put(tmp, fraglen), skb->data + pos, fraglen); - - pos += fraglen; - } - - /* adjust first fragment's length */ - skb->len = hdrlen + per_fragm; - return 0; -} - -static ieee80211_tx_result debug_noinline -ieee80211_tx_h_fragment(struct ieee80211_tx_data *tx) -{ - struct sk_buff *skb = tx->skb; - struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb); - struct ieee80211_hdr *hdr = (void *)skb->data; - int frag_threshold = tx->local->hw.wiphy->frag_threshold; - int hdrlen; - int fragnum; - - /* no matter what happens, tx->skb moves to tx->skbs */ - __skb_queue_tail(&tx->skbs, skb); - tx->skb = NULL; - - if (info->flags & IEEE80211_TX_CTL_DONTFRAG) - return TX_CONTINUE; - - if (tx->local->ops->set_frag_threshold) - return TX_CONTINUE; - - /* - * Warn when submitting a fragmented A-MPDU frame and drop it. - * This scenario is handled in ieee80211_tx_prepare but extra - * caution taken here as fragmented ampdu may cause Tx stop. - */ - if (WARN_ON(info->flags & IEEE80211_TX_CTL_AMPDU)) - return TX_DROP; - - hdrlen = ieee80211_hdrlen(hdr->frame_control); - - /* internal error, why isn't DONTFRAG set? */ - if (WARN_ON(skb->len + FCS_LEN <= frag_threshold)) - return TX_DROP; - - /* - * Now fragment the frame. This will allocate all the fragments and - * chain them (using skb as the first fragment) to skb->next. - * During transmission, we will remove the successfully transmitted - * fragments from this list. When the low-level driver rejects one - * of the fragments then we will simply pretend to accept the skb - * but store it away as pending. - */ - if (ieee80211_fragment(tx, skb, hdrlen, frag_threshold)) - return TX_DROP; - - /* update duration/seq/flags of fragments */ - fragnum = 0; - - skb_queue_walk(&tx->skbs, skb) { - int next_len; - const __le16 morefrags = cpu_to_le16(IEEE80211_FCTL_MOREFRAGS); - - hdr = (void *)skb->data; - info = IEEE80211_SKB_CB(skb); - - if (!skb_queue_is_last(&tx->skbs, skb)) { - hdr->frame_control |= morefrags; - /* - * No multi-rate retries for fragmented frames, that - * would completely throw off the NAV at other STAs. - */ - info->control.rates[1].idx = -1; - info->control.rates[2].idx = -1; - info->control.rates[3].idx = -1; - info->control.rates[4].idx = -1; - BUILD_BUG_ON(IEEE80211_TX_MAX_RATES != 5); - info->flags &= ~IEEE80211_TX_CTL_RATE_CTRL_PROBE; - } else { - hdr->frame_control &= ~morefrags; - next_len = 0; - } - hdr->seq_ctrl |= cpu_to_le16(fragnum & IEEE80211_SCTL_FRAG); - fragnum++; - } - - return TX_CONTINUE; -} - -static ieee80211_tx_result debug_noinline -ieee80211_tx_h_stats(struct ieee80211_tx_data *tx) -{ - struct sk_buff *skb; - - if (!tx->sta) - return TX_CONTINUE; - - tx->sta->tx_packets++; - skb_queue_walk(&tx->skbs, skb) { - tx->sta->tx_fragments++; - tx->sta->tx_bytes += skb->len; - } - - return TX_CONTINUE; -} - -static ieee80211_tx_result debug_noinline -ieee80211_tx_h_encrypt(struct ieee80211_tx_data *tx) -{ - if (!tx->key) - return TX_CONTINUE; - - switch (tx->key->conf.cipher) { - case WLAN_CIPHER_SUITE_WEP40: - case WLAN_CIPHER_SUITE_WEP104: - return ieee80211_crypto_wep_encrypt(tx); - case WLAN_CIPHER_SUITE_TKIP: - return ieee80211_crypto_tkip_encrypt(tx); - case WLAN_CIPHER_SUITE_CCMP: - return ieee80211_crypto_ccmp_encrypt(tx); - case WLAN_CIPHER_SUITE_AES_CMAC: - return ieee80211_crypto_aes_cmac_encrypt(tx); - default: - return ieee80211_crypto_hw_encrypt(tx); - } - - return TX_DROP; -} - -static ieee80211_tx_result debug_noinline -ieee80211_tx_h_calculate_duration(struct ieee80211_tx_data *tx) -{ - struct sk_buff *skb; - struct ieee80211_hdr *hdr; - int next_len; - bool group_addr; - - skb_queue_walk(&tx->skbs, skb) { - hdr = (void *) skb->data; - if (unlikely(ieee80211_is_pspoll(hdr->frame_control))) - break; /* must not overwrite AID */ - if (!skb_queue_is_last(&tx->skbs, skb)) { - struct sk_buff *next = skb_queue_next(&tx->skbs, skb); - next_len = next->len; - } else - next_len = 0; - group_addr = is_multicast_ether_addr(hdr->addr1); - - hdr->duration_id = - ieee80211_duration(tx, skb, group_addr, next_len); - } - - return TX_CONTINUE; -} - -/* actual transmit path */ - -static bool ieee80211_tx_prep_agg(struct ieee80211_tx_data *tx, - struct sk_buff *skb, - struct ieee80211_tx_info *info, - struct tid_ampdu_tx *tid_tx, - int tid) -{ - bool queued = false; - bool reset_agg_timer = false; - struct sk_buff *purge_skb = NULL; - - if (test_bit(HT_AGG_STATE_OPERATIONAL, &tid_tx->state)) { - info->flags |= IEEE80211_TX_CTL_AMPDU; - reset_agg_timer = true; - } else if (test_bit(HT_AGG_STATE_WANT_START, &tid_tx->state)) { - /* - * nothing -- this aggregation session is being started - * but that might still fail with the driver - */ - } else { - spin_lock(&tx->sta->lock); - /* - * Need to re-check now, because we may get here - * - * 1) in the window during which the setup is actually - * already done, but not marked yet because not all - * packets are spliced over to the driver pending - * queue yet -- if this happened we acquire the lock - * either before or after the splice happens, but - * need to recheck which of these cases happened. - * - * 2) during session teardown, if the OPERATIONAL bit - * was cleared due to the teardown but the pointer - * hasn't been assigned NULL yet (or we loaded it - * before it was assigned) -- in this case it may - * now be NULL which means we should just let the - * packet pass through because splicing the frames - * back is already done. - */ - tid_tx = rcu_dereference_protected_tid_tx(tx->sta, tid); - - if (!tid_tx) { - /* do nothing, let packet pass through */ - } else if (test_bit(HT_AGG_STATE_OPERATIONAL, &tid_tx->state)) { - info->flags |= IEEE80211_TX_CTL_AMPDU; - reset_agg_timer = true; - } else { - queued = true; - info->control.vif = &tx->sdata->vif; - info->flags |= IEEE80211_TX_INTFL_NEED_TXPROCESSING; - __skb_queue_tail(&tid_tx->pending, skb); - if (skb_queue_len(&tid_tx->pending) > STA_MAX_TX_BUFFER) - purge_skb = __skb_dequeue(&tid_tx->pending); - } - spin_unlock(&tx->sta->lock); - - if (purge_skb) - dev_kfree_skb(purge_skb); - } - - /* reset session timer */ - if (reset_agg_timer && tid_tx->timeout) - mod_timer(&tid_tx->session_timer, - TU_TO_EXP_TIME(tid_tx->timeout)); - - return queued; -} - -/* - * initialises @tx - */ -static ieee80211_tx_result -ieee80211_tx_prepare(struct ieee80211_sub_if_data *sdata, - struct ieee80211_tx_data *tx, - struct sk_buff *skb) -{ - struct ieee80211_local *local = sdata->local; - struct ieee80211_hdr *hdr; - struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb); - int tid; - u8 *qc; - -#ifdef CONFIG_MAC80211_VERBOSE_DEBUG - printk(KERN_DEBUG "--ieee80211_tx_prepare \n"); -#endif - - memset(tx, 0, sizeof(*tx)); - tx->skb = skb; - tx->local = local; - tx->sdata = sdata; - tx->channel = local->hw.conf.channel; - __skb_queue_head_init(&tx->skbs); - - /* - * If this flag is set to true anywhere, and we get here, - * we are doing the needed processing, so remove the flag - * now. - */ - info->flags &= ~IEEE80211_TX_INTFL_NEED_TXPROCESSING; - - hdr = (struct ieee80211_hdr *) skb->data; - - if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN) { - tx->sta = rcu_dereference(sdata->u.vlan.sta); - if (!tx->sta && sdata->dev->ieee80211_ptr->use_4addr) - return TX_DROP; - } else if (info->flags & IEEE80211_TX_CTL_INJECTED) { - tx->sta = sta_info_get_bss(sdata, hdr->addr1); - } - /* - * [PLATA] - in OCBActivated we should very likely enter here - */ - if (!tx->sta) - tx->sta = sta_info_get(sdata, hdr->addr1); - - if (tx->sta && ieee80211_is_data_qos(hdr->frame_control) && - !ieee80211_is_qos_nullfunc(hdr->frame_control) && - (local->hw.flags & IEEE80211_HW_AMPDU_AGGREGATION) && - !(local->hw.flags & IEEE80211_HW_TX_AMPDU_SETUP_IN_HW)) { - struct tid_ampdu_tx *tid_tx; - - qc = ieee80211_get_qos_ctl(hdr); - tid = *qc & IEEE80211_QOS_CTL_TID_MASK; - - tid_tx = rcu_dereference(tx->sta->ampdu_mlme.tid_tx[tid]); - if (tid_tx) { - bool queued; - - queued = ieee80211_tx_prep_agg(tx, skb, info, - tid_tx, tid); - - if (unlikely(queued)) - return TX_QUEUED; - } - } - - if (is_multicast_ether_addr(hdr->addr1)) { - tx->flags &= ~IEEE80211_TX_UNICAST; - info->flags |= IEEE80211_TX_CTL_NO_ACK; - } else - tx->flags |= IEEE80211_TX_UNICAST; - - if (!(info->flags & IEEE80211_TX_CTL_DONTFRAG)) { - if (!(tx->flags & IEEE80211_TX_UNICAST) || - skb->len + FCS_LEN <= local->hw.wiphy->frag_threshold || - info->flags & IEEE80211_TX_CTL_AMPDU) - info->flags |= IEEE80211_TX_CTL_DONTFRAG; - } - - if (!tx->sta) - info->flags |= IEEE80211_TX_CTL_CLEAR_PS_FILT; - else if (test_and_clear_sta_flag(tx->sta, WLAN_STA_CLEAR_PS_FILT)) - info->flags |= IEEE80211_TX_CTL_CLEAR_PS_FILT; - - info->flags |= IEEE80211_TX_CTL_FIRST_FRAGMENT; - - return TX_CONTINUE; -} - -static bool ieee80211_tx_frags(struct ieee80211_local *local, - struct ieee80211_vif *vif, - struct ieee80211_sta *sta, - struct sk_buff_head *skbs, - bool txpending) -{ - struct sk_buff *skb, *tmp; - struct ieee80211_tx_info *info; - unsigned long flags; - -#ifdef CONFIG_MAC80211_VERBOSE_DEBUG - printk(KERN_DEBUG "-- -- -- ieee80211_tx_frags \n"); -#endif - - skb_queue_walk_safe(skbs, skb, tmp) { - int q = skb_get_queue_mapping(skb); - - spin_lock_irqsave(&local->queue_stop_reason_lock, flags); - if (local->queue_stop_reasons[q] || - (!txpending && !skb_queue_empty(&local->pending[q]))) { - /* - * Since queue is stopped, queue up frames for later - * transmission from the tx-pending tasklet when the - * queue is woken again. - */ - if (txpending) - skb_queue_splice_init(skbs, &local->pending[q]); - else - skb_queue_splice_tail_init(skbs, - &local->pending[q]); - - spin_unlock_irqrestore(&local->queue_stop_reason_lock, - flags); - return false; - } - spin_unlock_irqrestore(&local->queue_stop_reason_lock, flags); - - info = IEEE80211_SKB_CB(skb); - info->control.vif = vif; - info->control.sta = sta; - - __skb_unlink(skb, skbs); - -#ifdef CONFIG_MAC80211_VERBOSE_DEBUG - printk(KERN_DEBUG "-- TX Completed at MAC -- calling the Driver -- -- \n"); -#endif - drv_tx(local, skb); - } - - return true; -} - -/* - * Returns false if the frame couldn't be transmitted but was queued instead. - */ -static bool __ieee80211_tx(struct ieee80211_local *local, - struct sk_buff_head *skbs, int led_len, - struct sta_info *sta, bool txpending) -{ - struct ieee80211_tx_info *info; - struct ieee80211_sub_if_data *sdata; - struct ieee80211_vif *vif; - struct ieee80211_sta *pubsta; - struct sk_buff *skb; - bool result = true; - __le16 fc; - -#ifdef CONFIG_MAC80211_VERBOSE_DEBUG - printk(KERN_DEBUG "-- -- __ieee80211_tx \n"); -#endif - - if (WARN_ON(skb_queue_empty(skbs))) - return true; - - skb = skb_peek(skbs); - fc = ((struct ieee80211_hdr *)skb->data)->frame_control; - info = IEEE80211_SKB_CB(skb); - sdata = vif_to_sdata(info->control.vif); - if (sta && !sta->uploaded) - sta = NULL; - - if (sta) - pubsta = &sta->sta; - else - pubsta = NULL; - - switch (sdata->vif.type) { - case NL80211_IFTYPE_MONITOR: - sdata = NULL; - vif = NULL; - break; - case NL80211_IFTYPE_AP_VLAN: - sdata = container_of(sdata->bss, - struct ieee80211_sub_if_data, u.ap); - /* fall through */ - default: - vif = &sdata->vif; - break; - } - - if (local->ops->tx_frags) - drv_tx_frags(local, vif, pubsta, skbs); - else - result = ieee80211_tx_frags(local, vif, pubsta, skbs, - txpending); - - ieee80211_tpt_led_trig_tx(local, fc, led_len); - ieee80211_led_tx(local, 1); - - WARN_ON_ONCE(!skb_queue_empty(skbs)); - - return result; -} - -/* - * Invoke TX handlers, return 0 on success and non-zero if the - * frame was dropped or queued. - * - * [PLATA] - main method to be modified when OCB is activated - */ -static int invoke_tx_handlers(struct ieee80211_tx_data *tx) -{ - struct ieee80211_tx_info *info = IEEE80211_SKB_CB(tx->skb); - ieee80211_tx_result res = TX_DROP; - -#ifdef CONFIG_MAC80211_VERBOSE_DEBUG - printk(KERN_DEBUG "-- -- invoke_tx_handlers \n"); -#endif - -#define CALL_TXH(txh) \ - do { \ - res = txh(tx); \ - if (res != TX_CONTINUE) \ - goto txh_done; \ - } while (0) - - // no power saving mode when OCB is activated - if((tx->local->hw.wiphy->dot11OCBActivated == 0) || !(tx->local->hw.flags & IEEE80211_HW_DOT11OCB_SUPPORTED)) { - /* - * [PLATA] - not necessary (we do not do Power saving so far) - */ - CALL_TXH(ieee80211_tx_h_dynamic_ps); - } - - /* - * [PLATA] - check that scanning is false, check that if unicast and not assoc, we return true; for broadcast and AD_HOC, it is always true - */ - if((tx->local->hw.wiphy->dot11OCBActivated == 0) || !(tx->local->hw.flags & IEEE80211_HW_DOT11OCB_SUPPORTED)) { - CALL_TXH(ieee80211_tx_h_check_assoc); - } - - // no power saving and no key management - if((tx->local->hw.wiphy->dot11OCBActivated == 0) || !(tx->local->hw.flags & IEEE80211_HW_DOT11OCB_SUPPORTED)) { - CALL_TXH(ieee80211_tx_h_ps_buf); // [PLATA] - bypass as no PS - CALL_TXH(ieee80211_tx_h_check_control_port_protocol); // [PLATA] ignoring with the right flags...as we do not encrypt anyways - CALL_TXH(ieee80211_tx_h_select_key); // [PLATA] - directly (test OCBActivated..) - } - - if (!(tx->local->hw.flags & IEEE80211_HW_HAS_RATE_CONTROL)) { - CALL_TXH(ieee80211_tx_h_rate_ctrl); - } - - if (unlikely(info->flags & IEEE80211_TX_INTFL_RETRANSMISSION)) { - __skb_queue_tail(&tx->skbs, tx->skb); - tx->skb = NULL; - goto txh_done; - } - - if((tx->local->hw.wiphy->dot11OCBActivated == 0) || !(tx->local->hw.flags & IEEE80211_HW_DOT11OCB_SUPPORTED)) { - CALL_TXH(ieee80211_tx_h_michael_mic_add); // [PLATA] - ignore - } - CALL_TXH(ieee80211_tx_h_sequence); // [PLATA] - keep it for statistics, as no impact - CALL_TXH(ieee80211_tx_h_fragment); // [PLATA] - keep it, no impact if flags correctly set (IEEE80211_TX_CTL_DONTFRAG) - /* handlers after fragment must be aware of tx info fragmentation! */ - CALL_TXH(ieee80211_tx_h_stats); // [PLATA] - keep it for statistics: no impact - - if((tx->local->hw.wiphy->dot11OCBActivated == 0) || !(tx->local->hw.flags & IEEE80211_HW_DOT11OCB_SUPPORTED)) { - CALL_TXH(ieee80211_tx_h_encrypt); // [PLATA] - bypass if with check on OCBActivated - } - if (!(tx->local->hw.flags & IEEE80211_HW_HAS_RATE_CONTROL)) - CALL_TXH(ieee80211_tx_h_calculate_duration); -#undef CALL_TXH - - txh_done: - if (unlikely(res == TX_DROP)) { - I802_DEBUG_INC(tx->local->tx_handlers_drop); - if (tx->skb) - dev_kfree_skb(tx->skb); - else - __skb_queue_purge(&tx->skbs); - return -1; - } else if (unlikely(res == TX_QUEUED)) { - I802_DEBUG_INC(tx->local->tx_handlers_queued); - return -1; - } - - return 0; -} - -/* - * Returns false if the frame couldn't be transmitted but was queued instead. - */ -static bool ieee80211_tx(struct ieee80211_sub_if_data *sdata, - struct sk_buff *skb, bool txpending) -{ - struct ieee80211_local *local = sdata->local; - struct ieee80211_tx_data tx; - ieee80211_tx_result res_prepare; - struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb); - bool result = true; - int led_len; - - if (unlikely(skb->len < 10)) { - dev_kfree_skb(skb); - return true; - } - - rcu_read_lock(); - -#ifdef CONFIG_MAC80211_VERBOSE_DEBUG - printk(KERN_DEBUG "--ieee80211_tx\n"); -#endif - - /* initialises tx */ - led_len = skb->len; - /* - * [PLATA] - nothing specific if we set the right flags... - */ - res_prepare = ieee80211_tx_prepare(sdata, &tx, skb); - - if (unlikely(res_prepare == TX_DROP)) { - dev_kfree_skb(skb); - goto out; - } else if (unlikely(res_prepare == TX_QUEUED)) { - goto out; - } - - tx.channel = local->hw.conf.channel; - info->band = tx.channel->band; - - /* - * [PLATA] in the next method, we shortcut the 802.11 state machine - */ - if (!invoke_tx_handlers(&tx)) - result = __ieee80211_tx(local, &tx.skbs, led_len, - tx.sta, txpending); - out: - rcu_read_unlock(); - return result; -} - -/* device xmit handlers */ - -static int ieee80211_skb_resize(struct ieee80211_sub_if_data *sdata, - struct sk_buff *skb, - int head_need, bool may_encrypt) -{ - struct ieee80211_local *local = sdata->local; - int tail_need = 0; - - if (may_encrypt && sdata->crypto_tx_tailroom_needed_cnt) { - tail_need = IEEE80211_ENCRYPT_TAILROOM; - tail_need -= skb_tailroom(skb); - tail_need = max_t(int, tail_need, 0); - } - - if (skb_cloned(skb)) - I802_DEBUG_INC(local->tx_expand_skb_head_cloned); - else if (head_need || tail_need) - I802_DEBUG_INC(local->tx_expand_skb_head); - else - return 0; - - if (pskb_expand_head(skb, head_need, tail_need, GFP_ATOMIC)) { - wiphy_debug(local->hw.wiphy, - "failed to reallocate TX buffer\n"); - return -ENOMEM; - } - - return 0; -} - -void ieee80211_xmit(struct ieee80211_sub_if_data *sdata, struct sk_buff *skb) -{ - struct ieee80211_local *local = sdata->local; - struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb); - struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) skb->data; - int headroom; - bool may_encrypt; - - rcu_read_lock(); - -#ifdef CONFIG_MAC80211_VERBOSE_DEBUG - printk(KERN_DEBUG "-- ieee80211_xmit \n"); -#endif - - /* - * [PLATA] - should be false - DONE in driver... - */ - may_encrypt = !(info->flags & IEEE80211_TX_INTFL_DONT_ENCRYPT); - - headroom = local->tx_headroom; - if (may_encrypt) - headroom += IEEE80211_ENCRYPT_HEADROOM; - headroom -= skb_headroom(skb); - headroom = max_t(int, 0, headroom); - - if (ieee80211_skb_resize(sdata, skb, headroom, may_encrypt)) { - dev_kfree_skb(skb); - rcu_read_unlock(); - return; - } - - hdr = (struct ieee80211_hdr *) skb->data; - - info->control.vif = &sdata->vif; - - if (ieee80211_vif_is_mesh(&sdata->vif) && - ieee80211_is_data(hdr->frame_control) && - !is_multicast_ether_addr(hdr->addr1)) - if (mesh_nexthop_resolve(skb, sdata)) { - /* skb queued: don't free */ - rcu_read_unlock(); - return; - } - -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,27)) - /* Older kernels do not have the select_queue callback */ - skb_set_queue_mapping(skb, ieee80211_select_queue(sdata, skb)); -#endif - /* - * [PLATA] - if we have the flag that QoS is not enable, we bypass this - * - for this version of PLATA - we do not allow QoS Data (MUST be done in frame control of the packet) - * - as such, next method returns immediately - */ - ieee80211_set_qos_hdr(sdata, skb); - ieee80211_tx(sdata, skb, false); - rcu_read_unlock(); -} - -static bool ieee80211_parse_tx_radiotap(struct sk_buff *skb) -{ - struct ieee80211_radiotap_iterator iterator; - struct ieee80211_radiotap_header *rthdr = - (struct ieee80211_radiotap_header *) skb->data; - struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb); - int ret = ieee80211_radiotap_iterator_init(&iterator, rthdr, skb->len, - NULL); - u16 txflags; - - info->flags |= IEEE80211_TX_INTFL_DONT_ENCRYPT | - IEEE80211_TX_CTL_DONTFRAG; - - /* - * for every radiotap entry that is present - * (ieee80211_radiotap_iterator_next returns -ENOENT when no more - * entries present, or -EINVAL on error) - */ - - while (!ret) { - ret = ieee80211_radiotap_iterator_next(&iterator); - - if (ret) - continue; - - /* see if this argument is something we can use */ - switch (iterator.this_arg_index) { - /* - * You must take care when dereferencing iterator.this_arg - * for multibyte types... the pointer is not aligned. Use - * get_unaligned((type *)iterator.this_arg) to dereference - * iterator.this_arg for type "type" safely on all arches. - */ - case IEEE80211_RADIOTAP_FLAGS: - if (*iterator.this_arg & IEEE80211_RADIOTAP_F_FCS) { - /* - * this indicates that the skb we have been - * handed has the 32-bit FCS CRC at the end... - * we should react to that by snipping it off - * because it will be recomputed and added - * on transmission - */ - if (skb->len < (iterator._max_length + FCS_LEN)) - return false; - - skb_trim(skb, skb->len - FCS_LEN); - } - if (*iterator.this_arg & IEEE80211_RADIOTAP_F_WEP) - info->flags &= ~IEEE80211_TX_INTFL_DONT_ENCRYPT; - if (*iterator.this_arg & IEEE80211_RADIOTAP_F_FRAG) - info->flags &= ~IEEE80211_TX_CTL_DONTFRAG; - break; - - case IEEE80211_RADIOTAP_TX_FLAGS: - txflags = get_unaligned_le16(iterator.this_arg); - if (txflags & IEEE80211_RADIOTAP_F_TX_NOACK) - info->flags |= IEEE80211_TX_CTL_NO_ACK; - break; - - /* - * Please update the file - * Documentation/networking/mac80211-injection.txt - * when parsing new fields here. - */ - - default: - break; - } - } - - if (ret != -ENOENT) /* ie, if we didn't simply run out of fields */ - return false; - - /* - * remove the radiotap header - * iterator->_max_length was sanity-checked against - * skb->len by iterator init - */ - skb_pull(skb, iterator._max_length); - - return true; -} - -netdev_tx_t ieee80211_monitor_start_xmit(struct sk_buff *skb, - struct net_device *dev) -{ - struct ieee80211_local *local = wdev_priv(dev->ieee80211_ptr); - struct ieee80211_channel *chan = local->hw.conf.channel; - struct ieee80211_radiotap_header *prthdr = - (struct ieee80211_radiotap_header *)skb->data; - struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb); - struct ieee80211_hdr *hdr; - struct ieee80211_sub_if_data *tmp_sdata, *sdata; - u16 len_rthdr; - int hdrlen; - - /* - * Frame injection is not allowed if beaconing is not allowed - * or if we need radar detection. Beaconing is usually not allowed when - * the mode or operation (Adhoc, AP, Mesh) does not support DFS. - * Passive scan is also used in world regulatory domains where - * your country is not known and as such it should be treated as - * NO TX unless the channel is explicitly allowed in which case - * your current regulatory domain would not have the passive scan - * flag. - * - * Since AP mode uses monitor interfaces to inject/TX management - * frames we can make AP mode the exception to this rule once it - * supports radar detection as its implementation can deal with - * radar detection by itself. We can do that later by adding a - * monitor flag interfaces used for AP support. - */ - if ((chan->flags & (IEEE80211_CHAN_NO_IBSS | IEEE80211_CHAN_RADAR | - IEEE80211_CHAN_PASSIVE_SCAN))) - goto fail; - - /* check for not even having the fixed radiotap header part */ - if (unlikely(skb->len < sizeof(struct ieee80211_radiotap_header))) - goto fail; /* too short to be possibly valid */ - - /* is it a header version we can trust to find length from? */ - if (unlikely(prthdr->it_version)) - goto fail; /* only version 0 is supported */ - - /* then there must be a radiotap header with a length we can use */ - len_rthdr = ieee80211_get_radiotap_len(skb->data); - - /* does the skb contain enough to deliver on the alleged length? */ - if (unlikely(skb->len < len_rthdr)) - goto fail; /* skb too short for claimed rt header extent */ - - /* - * fix up the pointers accounting for the radiotap - * header still being in there. We are being given - * a precooked IEEE80211 header so no need for - * normal processing - */ - skb_set_mac_header(skb, len_rthdr); - /* - * these are just fixed to the end of the rt area since we - * don't have any better information and at this point, nobody cares - */ - skb_set_network_header(skb, len_rthdr); - skb_set_transport_header(skb, len_rthdr); - - if (skb->len < len_rthdr + 2) - goto fail; - - hdr = (struct ieee80211_hdr *)(skb->data + len_rthdr); - hdrlen = ieee80211_hdrlen(hdr->frame_control); - - if (skb->len < len_rthdr + hdrlen) - goto fail; - - /* - * Initialize skb->protocol if the injected frame is a data frame - * carrying a rfc1042 header - */ - if (ieee80211_is_data(hdr->frame_control) && - skb->len >= len_rthdr + hdrlen + sizeof(rfc1042_header) + 2) { - u8 *payload = (u8 *)hdr + hdrlen; - - if (compare_ether_addr(payload, rfc1042_header) == 0) - skb->protocol = cpu_to_be16((payload[6] << 8) | - payload[7]); - } - - memset(info, 0, sizeof(*info)); - - info->flags = IEEE80211_TX_CTL_REQ_TX_STATUS | - IEEE80211_TX_CTL_INJECTED; - - /* process and remove the injection radiotap header */ - if (!ieee80211_parse_tx_radiotap(skb)) - goto fail; - - rcu_read_lock(); - - /* - * We process outgoing injected frames that have a local address - * we handle as though they are non-injected frames. - * This code here isn't entirely correct, the local MAC address - * isn't always enough to find the interface to use; for proper - * VLAN/WDS support we will need a different mechanism (which - * likely isn't going to be monitor interfaces). - */ - sdata = IEEE80211_DEV_TO_SUB_IF(dev); - - list_for_each_entry_rcu(tmp_sdata, &local->interfaces, list) { - if (!ieee80211_sdata_running(tmp_sdata)) - continue; - if (tmp_sdata->vif.type == NL80211_IFTYPE_MONITOR || - tmp_sdata->vif.type == NL80211_IFTYPE_AP_VLAN || - tmp_sdata->vif.type == NL80211_IFTYPE_WDS) - continue; - if (compare_ether_addr(tmp_sdata->vif.addr, hdr->addr2) == 0) { - sdata = tmp_sdata; - break; - } - } - - ieee80211_xmit(sdata, skb); - rcu_read_unlock(); - - return NETDEV_TX_OK; - -fail: - dev_kfree_skb(skb); - return NETDEV_TX_OK; /* meaning, we dealt with the skb */ -} - -/** - * ieee80211_subif_start_xmit - netif start_xmit function for Ethernet-type - * subinterfaces (wlan#, WDS, and VLAN interfaces) - * @skb: packet to be sent - * @dev: incoming interface - * - * Returns: 0 on success (and frees skb in this case) or 1 on failure (skb will - * not be freed, and caller is responsible for either retrying later or freeing - * skb). - * - * This function takes in an Ethernet header and encapsulates it with suitable - * IEEE 802.11 header based on which interface the packet is coming in. The - * encapsulated packet will then be passed to master interface, wlan#.11, for - * transmission (through low-level driver). - */ -/* - * [PLATA] we start here... - */ -netdev_tx_t ieee80211_subif_start_xmit(struct sk_buff *skb, - struct net_device *dev) -{ - struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); - struct ieee80211_local *local = sdata->local; - struct ieee80211_tx_info *info; - int ret = NETDEV_TX_BUSY, head_need; - u16 ethertype, hdrlen, meshhdrlen = 0; - __le16 fc; - struct ieee80211_hdr hdr; - struct ieee80211s_hdr mesh_hdr __maybe_unused; - struct mesh_path __maybe_unused *mppath = NULL; - const u8 *encaps_data; - int encaps_len, skip_header_bytes; - int nh_pos, h_pos; - struct sta_info *sta = NULL; - bool wme_sta = false, authorized = false, tdls_auth = false; - bool tdls_direct = false; - bool multicast; - u32 info_flags = 0; - u16 info_id = 0; - char wildcard_bssid_init = 0xFF; - - if (unlikely(skb->len < ETH_HLEN)) { - ret = NETDEV_TX_OK; - goto fail; - } - - /* convert Ethernet header to proper 802.11 header (based on - * operation mode) */ - ethertype = (skb->data[12] << 8) | skb->data[13]; - fc = cpu_to_le16(IEEE80211_FTYPE_DATA | IEEE80211_STYPE_DATA); - -#ifdef CONFIG_MAC80211_VERBOSE_DEBUG - printk(KERN_DEBUG "-- ieee80211_subif_start_xmit \n"); -#endif - - switch (sdata->vif.type) { - case NL80211_IFTYPE_AP_VLAN: - rcu_read_lock(); - sta = rcu_dereference(sdata->u.vlan.sta); - if (sta) { - fc |= cpu_to_le16(IEEE80211_FCTL_FROMDS | IEEE80211_FCTL_TODS); - /* RA TA DA SA */ - memcpy(hdr.addr1, sta->sta.addr, ETH_ALEN); - memcpy(hdr.addr2, sdata->vif.addr, ETH_ALEN); - memcpy(hdr.addr3, skb->data, ETH_ALEN); - memcpy(hdr.addr4, skb->data + ETH_ALEN, ETH_ALEN); - hdrlen = 30; - authorized = test_sta_flag(sta, WLAN_STA_AUTHORIZED); - wme_sta = test_sta_flag(sta, WLAN_STA_WME); - } - rcu_read_unlock(); - if (sta) - break; - /* fall through */ - case NL80211_IFTYPE_AP: - fc |= cpu_to_le16(IEEE80211_FCTL_FROMDS); - /* DA BSSID SA */ - memcpy(hdr.addr1, skb->data, ETH_ALEN); - memcpy(hdr.addr2, sdata->vif.addr, ETH_ALEN); - memcpy(hdr.addr3, skb->data + ETH_ALEN, ETH_ALEN); - hdrlen = 24; - break; - case NL80211_IFTYPE_WDS: - fc |= cpu_to_le16(IEEE80211_FCTL_FROMDS | IEEE80211_FCTL_TODS); - /* RA TA DA SA */ - memcpy(hdr.addr1, sdata->u.wds.remote_addr, ETH_ALEN); - memcpy(hdr.addr2, sdata->vif.addr, ETH_ALEN); - memcpy(hdr.addr3, skb->data, ETH_ALEN); - memcpy(hdr.addr4, skb->data + ETH_ALEN, ETH_ALEN); - hdrlen = 30; - break; -#ifdef CONFIG_MAC80211_MESH - case NL80211_IFTYPE_MESH_POINT: - if (!sdata->u.mesh.mshcfg.dot11MeshTTL) { - /* Do not send frames with mesh_ttl == 0 */ - sdata->u.mesh.mshstats.dropped_frames_ttl++; - ret = NETDEV_TX_OK; - goto fail; - } - rcu_read_lock(); - if (!is_multicast_ether_addr(skb->data)) - mppath = mpp_path_lookup(skb->data, sdata); - - /* - * Use address extension if it is a packet from - * another interface or if we know the destination - * is being proxied by a portal (i.e. portal address - * differs from proxied address) - */ - if (compare_ether_addr(sdata->vif.addr, - skb->data + ETH_ALEN) == 0 && - !(mppath && compare_ether_addr(mppath->mpp, skb->data))) { - hdrlen = ieee80211_fill_mesh_addresses(&hdr, &fc, - skb->data, skb->data + ETH_ALEN); - rcu_read_unlock(); - meshhdrlen = ieee80211_new_mesh_header(&mesh_hdr, - sdata, NULL, NULL); - } else { - int is_mesh_mcast = 1; - const u8 *mesh_da; - - if (is_multicast_ether_addr(skb->data)) - /* DA TA mSA AE:SA */ - mesh_da = skb->data; - else { - static const u8 bcast[ETH_ALEN] = - { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }; - if (mppath) { - /* RA TA mDA mSA AE:DA SA */ - mesh_da = mppath->mpp; - is_mesh_mcast = 0; - } else { - /* DA TA mSA AE:SA */ - mesh_da = bcast; - } - } - hdrlen = ieee80211_fill_mesh_addresses(&hdr, &fc, - mesh_da, sdata->vif.addr); - rcu_read_unlock(); - if (is_mesh_mcast) - meshhdrlen = - ieee80211_new_mesh_header(&mesh_hdr, - sdata, - skb->data + ETH_ALEN, - NULL); - else - meshhdrlen = - ieee80211_new_mesh_header(&mesh_hdr, - sdata, - skb->data, - skb->data + ETH_ALEN); - - } - break; -#endif - case NL80211_IFTYPE_STATION: - if (sdata->wdev.wiphy->flags & WIPHY_FLAG_SUPPORTS_TDLS) { - bool tdls_peer = false; - - rcu_read_lock(); - sta = sta_info_get(sdata, skb->data); - if (sta) { - authorized = test_sta_flag(sta, - WLAN_STA_AUTHORIZED); - wme_sta = test_sta_flag(sta, WLAN_STA_WME); - tdls_peer = test_sta_flag(sta, - WLAN_STA_TDLS_PEER); - tdls_auth = test_sta_flag(sta, - WLAN_STA_TDLS_PEER_AUTH); - } - rcu_read_unlock(); - - /* - * If the TDLS link is enabled, send everything - * directly. Otherwise, allow TDLS setup frames - * to be transmitted indirectly. - */ - tdls_direct = tdls_peer && (tdls_auth || - !(ethertype == ETH_P_TDLS && skb->len > 14 && - skb->data[14] == WLAN_TDLS_SNAP_RFTYPE)); - } - - if (tdls_direct) { - /* link during setup - throw out frames to peer */ - if (!tdls_auth) { - ret = NETDEV_TX_OK; - goto fail; - } - - /* DA SA BSSID */ - memcpy(hdr.addr1, skb->data, ETH_ALEN); - memcpy(hdr.addr2, skb->data + ETH_ALEN, ETH_ALEN); - memcpy(hdr.addr3, sdata->u.mgd.bssid, ETH_ALEN); - hdrlen = 24; - } else if (sdata->u.mgd.use_4addr && - cpu_to_be16(ethertype) != sdata->control_port_protocol) { - fc |= cpu_to_le16(IEEE80211_FCTL_FROMDS | - IEEE80211_FCTL_TODS); - /* RA TA DA SA */ - memcpy(hdr.addr1, sdata->u.mgd.bssid, ETH_ALEN); - memcpy(hdr.addr2, sdata->vif.addr, ETH_ALEN); - memcpy(hdr.addr3, skb->data, ETH_ALEN); - memcpy(hdr.addr4, skb->data + ETH_ALEN, ETH_ALEN); - hdrlen = 30; - } else { - fc |= cpu_to_le16(IEEE80211_FCTL_TODS); - /* BSSID SA DA */ - memcpy(hdr.addr1, sdata->u.mgd.bssid, ETH_ALEN); - memcpy(hdr.addr2, skb->data + ETH_ALEN, ETH_ALEN); - memcpy(hdr.addr3, skb->data, ETH_ALEN); - hdrlen = 24; - } - break; - case NL80211_IFTYPE_ADHOC: - /* DA SA BSSID */ - memcpy(hdr.addr1, skb->data, ETH_ALEN); - memcpy(hdr.addr2, skb->data + ETH_ALEN, ETH_ALEN); -#ifdef CONFIG_MAC80211_VERBOSE_DEBUG - printk(KERN_DEBUG "-- ieee80211_subif_start_xmit - ADHOC mode \n"); -#endif - //[PLATA]: bug fix, & IEEE80211_HW_DOT11OCB_SUPPORTED insted of &= and - //[PLATA]: changes made in tx.c, rx.c, iface.c, cfg.c and main.c - if ((local->hw.wiphy->dot11OCBActivated == 1) && (local->hw.flags & IEEE80211_HW_DOT11OCB_SUPPORTED)) { -#ifdef CONFIG_MAC80211_VERBOSE_DEBUG - printk(KERN_DEBUG "-- -- ieee80211_subif_start_xmit - OCB Enable \n"); -#endif - memset(hdr.addr3,wildcard_bssid_init,ETH_ALEN); //[PLATA]: bug fix, memset to be used instead of memcpy - //fc |= cpu_to_le16(~IEEE80211_FCTL_FROMDS | ~IEEE80211_FCTL_TODS); // [PLATA] we make sure that FROMDS and TODS are both 0 - } - else - memcpy(hdr.addr3, sdata->u.ibss.bssid, ETH_ALEN); - hdrlen = 24; - break; - default: - ret = NETDEV_TX_OK; - goto fail; - } - - /* - * There's no need to try to look up the destination - * if it is a multicast address (which can only happen - * in AP mode) - */ - multicast = is_multicast_ether_addr(hdr.addr1); - if (!multicast) { - rcu_read_lock(); - sta = sta_info_get(sdata, hdr.addr1); - if (sta) { - /* - * [PLATA] if in OCB mode, we are implicitely authorized - */ - if ((local->hw.wiphy->dot11OCBActivated == 1) && (local->hw.flags & IEEE80211_HW_DOT11OCB_SUPPORTED)) { -#ifdef CONFIG_MAC80211_VERBOSE_DEBUG - printk(KERN_DEBUG "-- -- ieee80211_subif_start_xmit - TX Config for OCB Activated \n"); -#endif - authorized = 1; - wme_sta = 0; // [PLATA] on this version of PLATA, we do not support WME - set_sta_flag(sta,WLAN_STA_AUTHORIZED); // do we need these actually? - set_sta_flag(sta,WLAN_STA_AUTH); - set_sta_flag(sta,WLAN_STA_ASSOC); - set_sta_flag(sta,WLAN_STA_OCB); // [PLATA] we block the STA to be in the OCB mode (as not compatible with none of the other states) - we might have to put it to AUTHORIZED - } - else { - authorized = test_sta_flag(sta, WLAN_STA_AUTHORIZED); - wme_sta = test_sta_flag(sta, WLAN_STA_WME); - } - } - rcu_read_unlock(); - } - - /* For mesh, the use of the QoS header is mandatory */ - if (ieee80211_vif_is_mesh(&sdata->vif)) - wme_sta = true; - - /* receiver and we are QoS enabled, use a QoS type frame */ - if (wme_sta && local->hw.queues >= 4) { // [PLATA]: this version of PLATA does not support QoS data frames...with wme_sta 0 and 1 single queue, we cannot be QoS - fc |= cpu_to_le16(IEEE80211_STYPE_QOS_DATA); - hdrlen += 2; - } - - /* - * Drop unicast frames to unauthorised stations unless they are - * EAPOL frames from the local station. - */ - /* - * [PLATA] - should pass here, as we are implicitly authorized. - */ - /* [PLATA] - Bug fix, unicast frames to unauthorised stations dropped only when OCB is not activated */ - if ((local->hw.wiphy->dot11OCBActivated == 0) && !(local->hw.flags & IEEE80211_HW_DOT11OCB_SUPPORTED)) { - - if (unlikely(!ieee80211_vif_is_mesh(&sdata->vif) && - !is_multicast_ether_addr(hdr.addr1) && !authorized && - (cpu_to_be16(ethertype) != sdata->control_port_protocol || - compare_ether_addr(sdata->vif.addr, skb->data + ETH_ALEN)))) { -#ifdef CONFIG_MAC80211_VERBOSE_DEBUG - if (net_ratelimit()) - printk(KERN_DEBUG "%s: dropped frame to %pM" - " (unauthorized port)\n", dev->name, - hdr.addr1); -#endif - - I802_DEBUG_INC(local->tx_handlers_drop_unauth_port); - - ret = NETDEV_TX_OK; - goto fail; - } - } - -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,3,0)) - if (unlikely(!multicast && skb->sk && - skb_shinfo(skb)->tx_flags & SKBTX_WIFI_STATUS)) { - struct sk_buff *orig_skb = skb; - - skb = skb_clone(skb, GFP_ATOMIC); - if (skb) { - unsigned long flags; - int id, r; - - spin_lock_irqsave(&local->ack_status_lock, flags); - r = idr_get_new_above(&local->ack_status_frames, - orig_skb, 1, &id); - if (r == -EAGAIN) { - idr_pre_get(&local->ack_status_frames, - GFP_ATOMIC); - r = idr_get_new_above(&local->ack_status_frames, - orig_skb, 1, &id); - } - if (WARN_ON(!id) || id > 0xffff) { - idr_remove(&local->ack_status_frames, id); - r = -ERANGE; - } - spin_unlock_irqrestore(&local->ack_status_lock, flags); - - if (!r) { - info_id = id; - info_flags |= IEEE80211_TX_CTL_REQ_TX_STATUS; - } else if (skb_shared(skb)) { - kfree_skb(orig_skb); - } else { - kfree_skb(skb); - skb = orig_skb; - } - } else { - /* couldn't clone -- lose tx status ... */ - skb = orig_skb; - } - } -#endif - - /* - * If the skb is shared we need to obtain our own copy. - */ - if (skb_shared(skb)) { - struct sk_buff *tmp_skb = skb; - - /* can't happen -- skb is a clone if info_id != 0 */ - WARN_ON(info_id); - - skb = skb_clone(skb, GFP_ATOMIC); - kfree_skb(tmp_skb); - - if (!skb) { - ret = NETDEV_TX_OK; - goto fail; - } - } - - hdr.frame_control = fc; - hdr.duration_id = 0; - hdr.seq_ctrl = 0; - - skip_header_bytes = ETH_HLEN; - if (ethertype == ETH_P_AARP || ethertype == ETH_P_IPX) { - encaps_data = bridge_tunnel_header; - encaps_len = sizeof(bridge_tunnel_header); - skip_header_bytes -= 2; - } else if (ethertype >= 0x600) { - encaps_data = rfc1042_header; - encaps_len = sizeof(rfc1042_header); - skip_header_bytes -= 2; - } else { - encaps_data = NULL; - encaps_len = 0; - } - - nh_pos = skb_network_header(skb) - skb->data; - h_pos = skb_transport_header(skb) - skb->data; - - skb_pull(skb, skip_header_bytes); - nh_pos -= skip_header_bytes; - h_pos -= skip_header_bytes; - - head_need = hdrlen + encaps_len + meshhdrlen - skb_headroom(skb); - - /* - * So we need to modify the skb header and hence need a copy of - * that. The head_need variable above doesn't, so far, include - * the needed header space that we don't need right away. If we - * can, then we don't reallocate right now but only after the - * frame arrives at the master device (if it does...) - * - * If we cannot, however, then we will reallocate to include all - * the ever needed space. Also, if we need to reallocate it anyway, - * make it big enough for everything we may ever need. - */ - - if (head_need > 0 || skb_cloned(skb)) { - head_need += IEEE80211_ENCRYPT_HEADROOM; - head_need += local->tx_headroom; - head_need = max_t(int, 0, head_need); - if (ieee80211_skb_resize(sdata, skb, head_need, true)) - goto fail; - } - - if (encaps_data) { - memcpy(skb_push(skb, encaps_len), encaps_data, encaps_len); - nh_pos += encaps_len; - h_pos += encaps_len; - } - -#ifdef CONFIG_MAC80211_MESH - if (meshhdrlen > 0) { - memcpy(skb_push(skb, meshhdrlen), &mesh_hdr, meshhdrlen); - nh_pos += meshhdrlen; - h_pos += meshhdrlen; - } -#endif - - if (ieee80211_is_data_qos(fc)) { //[PLATA] - this version of PLATA does not support QoS frame - MUST be false - __le16 *qos_control; - - qos_control = (__le16*) skb_push(skb, 2); - memcpy(skb_push(skb, hdrlen - 2), &hdr, hdrlen - 2); - /* - * Maybe we could actually set some fields here, for now just - * initialise to zero to indicate no special operation. - */ - *qos_control = 0; - } else - memcpy(skb_push(skb, hdrlen), &hdr, hdrlen); - - nh_pos += hdrlen; - h_pos += hdrlen; - - dev->stats.tx_packets++; - dev->stats.tx_bytes += skb->len; - - /* Update skb pointers to various headers since this modified frame - * is going to go through Linux networking code that may potentially - * need things like pointer to IP header. */ - skb_set_mac_header(skb, 0); - skb_set_network_header(skb, nh_pos); - skb_set_transport_header(skb, h_pos); - - info = IEEE80211_SKB_CB(skb); - memset(info, 0, sizeof(*info)); - - dev->trans_start = jiffies; - - /* - * [PLATA] - last flag adjustments to bypass the state machine (according to the PLATA Spec.) - */ - if ((local->hw.wiphy->dot11OCBActivated == 1) && (local->hw.flags & IEEE80211_HW_DOT11OCB_SUPPORTED)) { - info_flags |= IEEE80211_TX_INTFL_DONT_ENCRYPT; - info_flags |= IEEE80211_TX_CTL_DONTFRAG; - info_flags |= IEEE80211_TX_CTL_NO_ACK; - } - info->flags = info_flags; - info->ack_frame_id = info_id; - - ieee80211_xmit(sdata, skb); - - return NETDEV_TX_OK; - - fail: - if (ret == NETDEV_TX_OK) - dev_kfree_skb(skb); - - return ret; -} - - -/* - * ieee80211_clear_tx_pending may not be called in a context where - * it is possible that it packets could come in again. - */ -void ieee80211_clear_tx_pending(struct ieee80211_local *local) -{ - int i; - - for (i = 0; i < local->hw.queues; i++) - skb_queue_purge(&local->pending[i]); -} - -/* - * Returns false if the frame couldn't be transmitted but was queued instead, - * which in this case means re-queued -- take as an indication to stop sending - * more pending frames. - */ -static bool ieee80211_tx_pending_skb(struct ieee80211_local *local, - struct sk_buff *skb) -{ - struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb); - struct ieee80211_sub_if_data *sdata; - struct sta_info *sta; - struct ieee80211_hdr *hdr; - bool result; - - sdata = vif_to_sdata(info->control.vif); - - if (info->flags & IEEE80211_TX_INTFL_NEED_TXPROCESSING) { - result = ieee80211_tx(sdata, skb, true); - } else { - struct sk_buff_head skbs; - - __skb_queue_head_init(&skbs); - __skb_queue_tail(&skbs, skb); - - hdr = (struct ieee80211_hdr *)skb->data; - sta = sta_info_get(sdata, hdr->addr1); - - result = __ieee80211_tx(local, &skbs, skb->len, sta, true); - } - - return result; -} - -/* - * Transmit all pending packets. Called from tasklet. - */ -void ieee80211_tx_pending(unsigned long data) -{ - struct ieee80211_local *local = (struct ieee80211_local *)data; - struct ieee80211_sub_if_data *sdata; - unsigned long flags; - int i; - bool txok; - - rcu_read_lock(); - - spin_lock_irqsave(&local->queue_stop_reason_lock, flags); - for (i = 0; i < local->hw.queues; i++) { - /* - * If queue is stopped by something other than due to pending - * frames, or we have no pending frames, proceed to next queue. - */ - if (local->queue_stop_reasons[i] || - skb_queue_empty(&local->pending[i])) - continue; - - while (!skb_queue_empty(&local->pending[i])) { - struct sk_buff *skb = __skb_dequeue(&local->pending[i]); - struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb); - - if (WARN_ON(!info->control.vif)) { - kfree_skb(skb); - continue; - } - - spin_unlock_irqrestore(&local->queue_stop_reason_lock, - flags); - - txok = ieee80211_tx_pending_skb(local, skb); - spin_lock_irqsave(&local->queue_stop_reason_lock, - flags); - if (!txok) - break; - } - - if (skb_queue_empty(&local->pending[i])) - list_for_each_entry_rcu(sdata, &local->interfaces, list) -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,27)) - netif_wake_subqueue(sdata->dev, i); -#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,23)) - netif_start_subqueue(sdata->dev, i); -#else - if (ieee80211_all_queues_started(hw)) - netif_wake_queue(sdata->dev); -#endif - } - spin_unlock_irqrestore(&local->queue_stop_reason_lock, flags); - - rcu_read_unlock(); -} - -/* functions for drivers to get certain frames */ - -static void ieee80211_beacon_add_tim(struct ieee80211_sub_if_data *sdata, - struct ieee80211_if_ap *bss, - struct sk_buff *skb, - struct beacon_data *beacon) -{ - u8 *pos, *tim; - int aid0 = 0; - int i, have_bits = 0, n1, n2; - - /* Generate bitmap for TIM only if there are any STAs in power save - * mode. */ - if (atomic_read(&bss->num_sta_ps) > 0) - /* in the hope that this is faster than - * checking byte-for-byte */ - have_bits = !bitmap_empty((unsigned long*)bss->tim, - IEEE80211_MAX_AID+1); - - if (bss->dtim_count == 0) - bss->dtim_count = sdata->vif.bss_conf.dtim_period - 1; - else - bss->dtim_count--; - - tim = pos = (u8 *) skb_put(skb, 6); - *pos++ = WLAN_EID_TIM; - *pos++ = 4; - *pos++ = bss->dtim_count; - *pos++ = sdata->vif.bss_conf.dtim_period; - - if (bss->dtim_count == 0 && !skb_queue_empty(&bss->ps_bc_buf)) - aid0 = 1; - - bss->dtim_bc_mc = aid0 == 1; - - if (have_bits) { - /* Find largest even number N1 so that bits numbered 1 through - * (N1 x 8) - 1 in the bitmap are 0 and number N2 so that bits - * (N2 + 1) x 8 through 2007 are 0. */ - n1 = 0; - for (i = 0; i < IEEE80211_MAX_TIM_LEN; i++) { - if (bss->tim[i]) { - n1 = i & 0xfe; - break; - } - } - n2 = n1; - for (i = IEEE80211_MAX_TIM_LEN - 1; i >= n1; i--) { - if (bss->tim[i]) { - n2 = i; - break; - } - } - - /* Bitmap control */ - *pos++ = n1 | aid0; - /* Part Virt Bitmap */ - skb_put(skb, n2 - n1); - memcpy(pos, bss->tim + n1, n2 - n1 + 1); - - tim[1] = n2 - n1 + 4; - } else { - *pos++ = aid0; /* Bitmap control */ - *pos++ = 0; /* Part Virt Bitmap */ - } -} - -struct sk_buff *ieee80211_beacon_get_tim(struct ieee80211_hw *hw, - struct ieee80211_vif *vif, - u16 *tim_offset, u16 *tim_length) -{ - struct ieee80211_local *local = hw_to_local(hw); - struct sk_buff *skb = NULL; - struct ieee80211_tx_info *info; - struct ieee80211_sub_if_data *sdata = NULL; - struct ieee80211_if_ap *ap = NULL; - struct beacon_data *beacon; - struct ieee80211_supported_band *sband; - enum ieee80211_band band = local->hw.conf.channel->band; - struct ieee80211_tx_rate_control txrc; - - sband = local->hw.wiphy->bands[band]; - - rcu_read_lock(); - - sdata = vif_to_sdata(vif); - - if (!ieee80211_sdata_running(sdata)) - goto out; - - if (tim_offset) - *tim_offset = 0; - if (tim_length) - *tim_length = 0; - - if (sdata->vif.type == NL80211_IFTYPE_AP) { - ap = &sdata->u.ap; - beacon = rcu_dereference(ap->beacon); - if (beacon) { - /* - * headroom, head length, - * tail length and maximum TIM length - */ - skb = dev_alloc_skb(local->tx_headroom + - beacon->head_len + - beacon->tail_len + 256); - if (!skb) - goto out; - - skb_reserve(skb, local->tx_headroom); - memcpy(skb_put(skb, beacon->head_len), beacon->head, - beacon->head_len); - - /* - * Not very nice, but we want to allow the driver to call - * ieee80211_beacon_get() as a response to the set_tim() - * callback. That, however, is already invoked under the - * sta_lock to guarantee consistent and race-free update - * of the tim bitmap in mac80211 and the driver. - */ - if (local->tim_in_locked_section) { - ieee80211_beacon_add_tim(sdata, ap, skb, - beacon); - } else { - unsigned long flags; - - spin_lock_irqsave(&local->tim_lock, flags); - ieee80211_beacon_add_tim(sdata, ap, skb, - beacon); - spin_unlock_irqrestore(&local->tim_lock, flags); - } - - if (tim_offset) - *tim_offset = beacon->head_len; - if (tim_length) - *tim_length = skb->len - beacon->head_len; - - if (beacon->tail) - memcpy(skb_put(skb, beacon->tail_len), - beacon->tail, beacon->tail_len); - } else - goto out; - } else if (sdata->vif.type == NL80211_IFTYPE_ADHOC) { - struct ieee80211_if_ibss *ifibss = &sdata->u.ibss; - struct ieee80211_hdr *hdr; - struct sk_buff *presp = rcu_dereference(ifibss->presp); - - if (!presp) - goto out; - - skb = skb_copy(presp, GFP_ATOMIC); - if (!skb) - goto out; - - hdr = (struct ieee80211_hdr *) skb->data; - hdr->frame_control = cpu_to_le16(IEEE80211_FTYPE_MGMT | - IEEE80211_STYPE_BEACON); - } else if (ieee80211_vif_is_mesh(&sdata->vif)) { - struct ieee80211_mgmt *mgmt; - u8 *pos; - int hdr_len = offsetof(struct ieee80211_mgmt, u.beacon) + - sizeof(mgmt->u.beacon); - -#ifdef CONFIG_MAC80211_MESH - if (!sdata->u.mesh.mesh_id_len) - goto out; -#endif - - skb = dev_alloc_skb(local->tx_headroom + - hdr_len + - 2 + /* NULL SSID */ - 2 + 8 + /* supported rates */ - 2 + 3 + /* DS params */ - 2 + (IEEE80211_MAX_SUPP_RATES - 8) + - 2 + sizeof(struct ieee80211_ht_cap) + - 2 + sizeof(struct ieee80211_ht_info) + - 2 + sdata->u.mesh.mesh_id_len + - 2 + sizeof(struct ieee80211_meshconf_ie) + - sdata->u.mesh.ie_len); - if (!skb) - goto out; - - skb_reserve(skb, local->hw.extra_tx_headroom); - mgmt = (struct ieee80211_mgmt *) skb_put(skb, hdr_len); - memset(mgmt, 0, hdr_len); - mgmt->frame_control = - cpu_to_le16(IEEE80211_FTYPE_MGMT | IEEE80211_STYPE_BEACON); - memset(mgmt->da, 0xff, ETH_ALEN); - memcpy(mgmt->sa, sdata->vif.addr, ETH_ALEN); - memcpy(mgmt->bssid, sdata->vif.addr, ETH_ALEN); - mgmt->u.beacon.beacon_int = - cpu_to_le16(sdata->vif.bss_conf.beacon_int); - mgmt->u.beacon.capab_info |= cpu_to_le16( - sdata->u.mesh.security ? WLAN_CAPABILITY_PRIVACY : 0); - - pos = skb_put(skb, 2); - *pos++ = WLAN_EID_SSID; - *pos++ = 0x0; - - if (ieee80211_add_srates_ie(&sdata->vif, skb) || - mesh_add_ds_params_ie(skb, sdata) || - ieee80211_add_ext_srates_ie(&sdata->vif, skb) || - mesh_add_rsn_ie(skb, sdata) || - mesh_add_ht_cap_ie(skb, sdata) || - mesh_add_ht_info_ie(skb, sdata) || - mesh_add_meshid_ie(skb, sdata) || - mesh_add_meshconf_ie(skb, sdata) || - mesh_add_vendor_ies(skb, sdata)) { - pr_err("o11s: couldn't add ies!\n"); - goto out; - } - } else { - WARN_ON(1); - goto out; - } - - info = IEEE80211_SKB_CB(skb); - - info->flags |= IEEE80211_TX_INTFL_DONT_ENCRYPT; - info->flags |= IEEE80211_TX_CTL_NO_ACK; - info->band = band; - - memset(&txrc, 0, sizeof(txrc)); - txrc.hw = hw; - txrc.sband = sband; - txrc.bss_conf = &sdata->vif.bss_conf; - txrc.skb = skb; - txrc.reported_rate.idx = -1; - txrc.rate_idx_mask = sdata->rc_rateidx_mask[band]; - if (txrc.rate_idx_mask == (1 << sband->n_bitrates) - 1) - txrc.max_rate_idx = -1; - else - txrc.max_rate_idx = fls(txrc.rate_idx_mask) - 1; - memcpy(txrc.rate_idx_mcs_mask, sdata->rc_rateidx_mcs_mask[band], - sizeof(txrc.rate_idx_mcs_mask)); - txrc.bss = true; - rate_control_get_rate(sdata, NULL, &txrc); - - info->control.vif = vif; - - info->flags |= IEEE80211_TX_CTL_CLEAR_PS_FILT | - IEEE80211_TX_CTL_ASSIGN_SEQ | - IEEE80211_TX_CTL_FIRST_FRAGMENT; - out: - rcu_read_unlock(); - return skb; -} -EXPORT_SYMBOL(ieee80211_beacon_get_tim); - -struct sk_buff *ieee80211_proberesp_get(struct ieee80211_hw *hw, - struct ieee80211_vif *vif) -{ - struct ieee80211_if_ap *ap = NULL; - struct sk_buff *presp = NULL, *skb = NULL; - struct ieee80211_hdr *hdr; - struct ieee80211_sub_if_data *sdata = vif_to_sdata(vif); - - if (sdata->vif.type != NL80211_IFTYPE_AP) - return NULL; - - rcu_read_lock(); - - ap = &sdata->u.ap; - presp = rcu_dereference(ap->probe_resp); - if (!presp) - goto out; - - skb = skb_copy(presp, GFP_ATOMIC); - if (!skb) - goto out; - - hdr = (struct ieee80211_hdr *) skb->data; - memset(hdr->addr1, 0, sizeof(hdr->addr1)); - -out: - rcu_read_unlock(); - return skb; -} -EXPORT_SYMBOL(ieee80211_proberesp_get); - -struct sk_buff *ieee80211_pspoll_get(struct ieee80211_hw *hw, - struct ieee80211_vif *vif) -{ - struct ieee80211_sub_if_data *sdata; - struct ieee80211_if_managed *ifmgd; - struct ieee80211_pspoll *pspoll; - struct ieee80211_local *local; - struct sk_buff *skb; - - if (WARN_ON(vif->type != NL80211_IFTYPE_STATION)) - return NULL; - - sdata = vif_to_sdata(vif); - ifmgd = &sdata->u.mgd; - local = sdata->local; - - skb = dev_alloc_skb(local->hw.extra_tx_headroom + sizeof(*pspoll)); - if (!skb) - return NULL; - - skb_reserve(skb, local->hw.extra_tx_headroom); - - pspoll = (struct ieee80211_pspoll *) skb_put(skb, sizeof(*pspoll)); - memset(pspoll, 0, sizeof(*pspoll)); - pspoll->frame_control = cpu_to_le16(IEEE80211_FTYPE_CTL | - IEEE80211_STYPE_PSPOLL); - pspoll->aid = cpu_to_le16(ifmgd->aid); - - /* aid in PS-Poll has its two MSBs each set to 1 */ - pspoll->aid |= cpu_to_le16(1 << 15 | 1 << 14); - - memcpy(pspoll->bssid, ifmgd->bssid, ETH_ALEN); - memcpy(pspoll->ta, vif->addr, ETH_ALEN); - - return skb; -} -EXPORT_SYMBOL(ieee80211_pspoll_get); - -struct sk_buff *ieee80211_nullfunc_get(struct ieee80211_hw *hw, - struct ieee80211_vif *vif) -{ - struct ieee80211_hdr_3addr *nullfunc; - struct ieee80211_sub_if_data *sdata; - struct ieee80211_if_managed *ifmgd; - struct ieee80211_local *local; - struct sk_buff *skb; - - if (WARN_ON(vif->type != NL80211_IFTYPE_STATION)) - return NULL; - - sdata = vif_to_sdata(vif); - ifmgd = &sdata->u.mgd; - local = sdata->local; - - skb = dev_alloc_skb(local->hw.extra_tx_headroom + sizeof(*nullfunc)); - if (!skb) - return NULL; - - skb_reserve(skb, local->hw.extra_tx_headroom); - - nullfunc = (struct ieee80211_hdr_3addr *) skb_put(skb, - sizeof(*nullfunc)); - memset(nullfunc, 0, sizeof(*nullfunc)); - nullfunc->frame_control = cpu_to_le16(IEEE80211_FTYPE_DATA | - IEEE80211_STYPE_NULLFUNC | - IEEE80211_FCTL_TODS); - memcpy(nullfunc->addr1, ifmgd->bssid, ETH_ALEN); - memcpy(nullfunc->addr2, vif->addr, ETH_ALEN); - memcpy(nullfunc->addr3, ifmgd->bssid, ETH_ALEN); - - return skb; -} -EXPORT_SYMBOL(ieee80211_nullfunc_get); - -struct sk_buff *ieee80211_probereq_get(struct ieee80211_hw *hw, - struct ieee80211_vif *vif, - const u8 *ssid, size_t ssid_len, - const u8 *ie, size_t ie_len) -{ - struct ieee80211_sub_if_data *sdata; - struct ieee80211_local *local; - struct ieee80211_hdr_3addr *hdr; - struct sk_buff *skb; - size_t ie_ssid_len; - u8 *pos; - - sdata = vif_to_sdata(vif); - local = sdata->local; - ie_ssid_len = 2 + ssid_len; - - skb = dev_alloc_skb(local->hw.extra_tx_headroom + sizeof(*hdr) + - ie_ssid_len + ie_len); - if (!skb) - return NULL; - - skb_reserve(skb, local->hw.extra_tx_headroom); - - hdr = (struct ieee80211_hdr_3addr *) skb_put(skb, sizeof(*hdr)); - memset(hdr, 0, sizeof(*hdr)); - hdr->frame_control = cpu_to_le16(IEEE80211_FTYPE_MGMT | - IEEE80211_STYPE_PROBE_REQ); - memset(hdr->addr1, 0xff, ETH_ALEN); - memcpy(hdr->addr2, vif->addr, ETH_ALEN); - memset(hdr->addr3, 0xff, ETH_ALEN); - - pos = skb_put(skb, ie_ssid_len); - *pos++ = WLAN_EID_SSID; - *pos++ = ssid_len; - if (ssid) - memcpy(pos, ssid, ssid_len); - pos += ssid_len; - - if (ie) { - pos = skb_put(skb, ie_len); - memcpy(pos, ie, ie_len); - } - - return skb; -} -EXPORT_SYMBOL(ieee80211_probereq_get); - -void ieee80211_rts_get(struct ieee80211_hw *hw, struct ieee80211_vif *vif, - const void *frame, size_t frame_len, - const struct ieee80211_tx_info *frame_txctl, - struct ieee80211_rts *rts) -{ - const struct ieee80211_hdr *hdr = frame; - - rts->frame_control = - cpu_to_le16(IEEE80211_FTYPE_CTL | IEEE80211_STYPE_RTS); - rts->duration = ieee80211_rts_duration(hw, vif, frame_len, - frame_txctl); - memcpy(rts->ra, hdr->addr1, sizeof(rts->ra)); - memcpy(rts->ta, hdr->addr2, sizeof(rts->ta)); -} -EXPORT_SYMBOL(ieee80211_rts_get); - -void ieee80211_ctstoself_get(struct ieee80211_hw *hw, struct ieee80211_vif *vif, - const void *frame, size_t frame_len, - const struct ieee80211_tx_info *frame_txctl, - struct ieee80211_cts *cts) -{ - const struct ieee80211_hdr *hdr = frame; - - cts->frame_control = - cpu_to_le16(IEEE80211_FTYPE_CTL | IEEE80211_STYPE_CTS); - cts->duration = ieee80211_ctstoself_duration(hw, vif, - frame_len, frame_txctl); - memcpy(cts->ra, hdr->addr1, sizeof(cts->ra)); -} -EXPORT_SYMBOL(ieee80211_ctstoself_get); - -struct sk_buff * -ieee80211_get_buffered_bc(struct ieee80211_hw *hw, - struct ieee80211_vif *vif) -{ - struct ieee80211_local *local = hw_to_local(hw); - struct sk_buff *skb = NULL; - struct ieee80211_tx_data tx; - struct ieee80211_sub_if_data *sdata; - struct ieee80211_if_ap *bss = NULL; - struct beacon_data *beacon; - struct ieee80211_tx_info *info; - - sdata = vif_to_sdata(vif); - bss = &sdata->u.ap; - - rcu_read_lock(); - beacon = rcu_dereference(bss->beacon); - - if (sdata->vif.type != NL80211_IFTYPE_AP || !beacon || !beacon->head) - goto out; - - if (bss->dtim_count != 0 || !bss->dtim_bc_mc) - goto out; /* send buffered bc/mc only after DTIM beacon */ - - while (1) { - skb = skb_dequeue(&bss->ps_bc_buf); - if (!skb) - goto out; - local->total_ps_buffered--; - - if (!skb_queue_empty(&bss->ps_bc_buf) && skb->len >= 2) { - struct ieee80211_hdr *hdr = - (struct ieee80211_hdr *) skb->data; - /* more buffered multicast/broadcast frames ==> set - * MoreData flag in IEEE 802.11 header to inform PS - * STAs */ - hdr->frame_control |= - cpu_to_le16(IEEE80211_FCTL_MOREDATA); - } - - if (!ieee80211_tx_prepare(sdata, &tx, skb)) - break; - dev_kfree_skb_any(skb); - } - - info = IEEE80211_SKB_CB(skb); - - tx.flags |= IEEE80211_TX_PS_BUFFERED; - tx.channel = local->hw.conf.channel; - info->band = tx.channel->band; - - if (invoke_tx_handlers(&tx)) - skb = NULL; - out: - rcu_read_unlock(); - - return skb; -} -EXPORT_SYMBOL(ieee80211_get_buffered_bc); - -void ieee80211_tx_skb_tid(struct ieee80211_sub_if_data *sdata, - struct sk_buff *skb, int tid) -{ - skb_set_mac_header(skb, 0); - skb_set_network_header(skb, 0); - skb_set_transport_header(skb, 0); - - skb_set_queue_mapping(skb, ieee802_1d_to_ac[tid]); - skb->priority = tid; - - /* - * The other path calling ieee80211_xmit is from the tasklet, - * and while we can handle concurrent transmissions locking - * requirements are that we do not come into tx with bhs on. - */ - local_bh_disable(); - ieee80211_xmit(sdata, skb); - local_bh_enable(); -} diff --git a/openairITS/mac/DOT11/net/mac80211/util.c b/openairITS/mac/DOT11/net/mac80211/util.c deleted file mode 100644 index a9682a66eb..0000000000 --- a/openairITS/mac/DOT11/net/mac80211/util.c +++ /dev/null @@ -1,1761 +0,0 @@ -/* - * Copyright 2002-2005, Instant802 Networks, Inc. - * Copyright 2005-2006, Devicescape Software, Inc. - * Copyright 2006-2007 Jiri Benc - * Copyright 2007 Johannes Berg - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - * - * utilities for mac80211 - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "ieee80211_i.h" -#include "driver-ops.h" -#include "rate.h" -#include "mesh.h" -#include "wme.h" -#include "led.h" -#include "wep.h" - -/* privid for wiphys to determine whether they belong to us or not */ -void *mac80211_wiphy_privid = &mac80211_wiphy_privid; - -struct ieee80211_hw *wiphy_to_ieee80211_hw(struct wiphy *wiphy) -{ - struct ieee80211_local *local; - BUG_ON(!wiphy); - - local = wiphy_priv(wiphy); - return &local->hw; -} -EXPORT_SYMBOL(wiphy_to_ieee80211_hw); - -u8 *ieee80211_get_bssid(struct ieee80211_hdr *hdr, size_t len, - enum nl80211_iftype type) -{ - __le16 fc = hdr->frame_control; - - /* drop ACK/CTS frames and incorrect hdr len (ctrl) */ - if (len < 16) - return NULL; - - if (ieee80211_is_data(fc)) { - if (len < 24) /* drop incorrect hdr len (data) */ - return NULL; - - if (ieee80211_has_a4(fc)) - return NULL; - if (ieee80211_has_tods(fc)) - return hdr->addr1; - if (ieee80211_has_fromds(fc)) - return hdr->addr2; - - return hdr->addr3; - } - - if (ieee80211_is_mgmt(fc)) { - if (len < 24) /* drop incorrect hdr len (mgmt) */ - return NULL; - return hdr->addr3; - } - - if (ieee80211_is_ctl(fc)) { - if(ieee80211_is_pspoll(fc)) - return hdr->addr1; - - if (ieee80211_is_back_req(fc)) { - switch (type) { - case NL80211_IFTYPE_STATION: - return hdr->addr2; - case NL80211_IFTYPE_AP: - case NL80211_IFTYPE_AP_VLAN: - return hdr->addr1; - default: - break; /* fall through to the return */ - } - } - } - - return NULL; -} - -void ieee80211_tx_set_protected(struct ieee80211_tx_data *tx) -{ - struct sk_buff *skb; - struct ieee80211_hdr *hdr; - - skb_queue_walk(&tx->skbs, skb) { - hdr = (struct ieee80211_hdr *) skb->data; - hdr->frame_control |= cpu_to_le16(IEEE80211_FCTL_PROTECTED); - } -} - -int ieee80211_frame_duration(struct ieee80211_local *local, size_t len, - int rate, int erp, int short_preamble) -{ - int dur; - - /* calculate duration (in microseconds, rounded up to next higher - * integer if it includes a fractional microsecond) to send frame of - * len bytes (does not include FCS) at the given rate. Duration will - * also include SIFS. - * - * rate is in 100 kbps, so divident is multiplied by 10 in the - * DIV_ROUND_UP() operations. - */ - - if (local->hw.conf.channel->band == IEEE80211_BAND_5GHZ || erp) { - /* - * OFDM: - * - * N_DBPS = DATARATE x 4 - * N_SYM = Ceiling((16+8xLENGTH+6) / N_DBPS) - * (16 = SIGNAL time, 6 = tail bits) - * TXTIME = T_PREAMBLE + T_SIGNAL + T_SYM x N_SYM + Signal Ext - * - * T_SYM = 4 usec - * 802.11a - 17.5.2: aSIFSTime = 16 usec - * 802.11g - 19.8.4: aSIFSTime = 10 usec + - * signal ext = 6 usec - */ - dur = 16; /* SIFS + signal ext */ - dur += 16; /* 17.3.2.3: T_PREAMBLE = 16 usec */ - dur += 4; /* 17.3.2.3: T_SIGNAL = 4 usec */ - dur += 4 * DIV_ROUND_UP((16 + 8 * (len + 4) + 6) * 10, - 4 * rate); /* T_SYM x N_SYM */ - } else { - /* - * 802.11b or 802.11g with 802.11b compatibility: - * 18.3.4: TXTIME = PreambleLength + PLCPHeaderTime + - * Ceiling(((LENGTH+PBCC)x8)/DATARATE). PBCC=0. - * - * 802.11 (DS): 15.3.3, 802.11b: 18.3.4 - * aSIFSTime = 10 usec - * aPreambleLength = 144 usec or 72 usec with short preamble - * aPLCPHeaderLength = 48 usec or 24 usec with short preamble - */ - dur = 10; /* aSIFSTime = 10 usec */ - dur += short_preamble ? (72 + 24) : (144 + 48); - - dur += DIV_ROUND_UP(8 * (len + 4) * 10, rate); - } - - return dur; -} - -/* Exported duration function for driver use */ -__le16 ieee80211_generic_frame_duration(struct ieee80211_hw *hw, - struct ieee80211_vif *vif, - size_t frame_len, - struct ieee80211_rate *rate) -{ - struct ieee80211_local *local = hw_to_local(hw); - struct ieee80211_sub_if_data *sdata; - u16 dur; - int erp; - bool short_preamble = false; - - erp = 0; - if (vif) { - sdata = vif_to_sdata(vif); - short_preamble = sdata->vif.bss_conf.use_short_preamble; - if (sdata->flags & IEEE80211_SDATA_OPERATING_GMODE) - erp = rate->flags & IEEE80211_RATE_ERP_G; - } - - dur = ieee80211_frame_duration(local, frame_len, rate->bitrate, erp, - short_preamble); - - return cpu_to_le16(dur); -} -EXPORT_SYMBOL(ieee80211_generic_frame_duration); - -__le16 ieee80211_rts_duration(struct ieee80211_hw *hw, - struct ieee80211_vif *vif, size_t frame_len, - const struct ieee80211_tx_info *frame_txctl) -{ - struct ieee80211_local *local = hw_to_local(hw); - struct ieee80211_rate *rate; - struct ieee80211_sub_if_data *sdata; - bool short_preamble; - int erp; - u16 dur; - struct ieee80211_supported_band *sband; - - sband = local->hw.wiphy->bands[local->hw.conf.channel->band]; - - short_preamble = false; - - rate = &sband->bitrates[frame_txctl->control.rts_cts_rate_idx]; - - erp = 0; - if (vif) { - sdata = vif_to_sdata(vif); - short_preamble = sdata->vif.bss_conf.use_short_preamble; - if (sdata->flags & IEEE80211_SDATA_OPERATING_GMODE) - erp = rate->flags & IEEE80211_RATE_ERP_G; - } - - /* CTS duration */ - dur = ieee80211_frame_duration(local, 10, rate->bitrate, - erp, short_preamble); - /* Data frame duration */ - dur += ieee80211_frame_duration(local, frame_len, rate->bitrate, - erp, short_preamble); - /* ACK duration */ - dur += ieee80211_frame_duration(local, 10, rate->bitrate, - erp, short_preamble); - - return cpu_to_le16(dur); -} -EXPORT_SYMBOL(ieee80211_rts_duration); - -__le16 ieee80211_ctstoself_duration(struct ieee80211_hw *hw, - struct ieee80211_vif *vif, - size_t frame_len, - const struct ieee80211_tx_info *frame_txctl) -{ - struct ieee80211_local *local = hw_to_local(hw); - struct ieee80211_rate *rate; - struct ieee80211_sub_if_data *sdata; - bool short_preamble; - int erp; - u16 dur; - struct ieee80211_supported_band *sband; - - sband = local->hw.wiphy->bands[local->hw.conf.channel->band]; - - short_preamble = false; - - rate = &sband->bitrates[frame_txctl->control.rts_cts_rate_idx]; - erp = 0; - if (vif) { - sdata = vif_to_sdata(vif); - short_preamble = sdata->vif.bss_conf.use_short_preamble; - if (sdata->flags & IEEE80211_SDATA_OPERATING_GMODE) - erp = rate->flags & IEEE80211_RATE_ERP_G; - } - - /* Data frame duration */ - dur = ieee80211_frame_duration(local, frame_len, rate->bitrate, - erp, short_preamble); - if (!(frame_txctl->flags & IEEE80211_TX_CTL_NO_ACK)) { - /* ACK duration */ - dur += ieee80211_frame_duration(local, 10, rate->bitrate, - erp, short_preamble); - } - - return cpu_to_le16(dur); -} -EXPORT_SYMBOL(ieee80211_ctstoself_duration); - -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,23)) -static bool ieee80211_all_queues_started(struct ieee80211_hw *hw) -{ - unsigned int queue; - - for (queue = 0; queue < hw->queues; queue++) - if (ieee80211_queue_stopped(hw, queue)) - return false; - return true; -} -#endif - -static void __ieee80211_wake_queue(struct ieee80211_hw *hw, int queue, - enum queue_stop_reason reason) -{ - struct ieee80211_local *local = hw_to_local(hw); - struct ieee80211_sub_if_data *sdata; - - trace_wake_queue(local, queue, reason); - - if (WARN_ON(queue >= hw->queues)) - return; - - __clear_bit(reason, &local->queue_stop_reasons[queue]); - - if (local->queue_stop_reasons[queue] != 0) - /* someone still has this queue stopped */ - return; - - if (skb_queue_empty(&local->pending[queue])) { - rcu_read_lock(); - list_for_each_entry_rcu(sdata, &local->interfaces, list) { - if (test_bit(SDATA_STATE_OFFCHANNEL, &sdata->state)) - continue; -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,27)) - netif_wake_subqueue(sdata->dev, queue); -#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,23)) - netif_start_subqueue(sdata->dev, queue); -#else - if (ieee80211_all_queues_started(hw)) - netif_wake_queue(sdata->dev); -#endif - } - rcu_read_unlock(); - } else - tasklet_schedule(&local->tx_pending_tasklet); -} - -void ieee80211_wake_queue_by_reason(struct ieee80211_hw *hw, int queue, - enum queue_stop_reason reason) -{ - struct ieee80211_local *local = hw_to_local(hw); - unsigned long flags; - - spin_lock_irqsave(&local->queue_stop_reason_lock, flags); - __ieee80211_wake_queue(hw, queue, reason); - spin_unlock_irqrestore(&local->queue_stop_reason_lock, flags); -} - -void ieee80211_wake_queue(struct ieee80211_hw *hw, int queue) -{ - ieee80211_wake_queue_by_reason(hw, queue, - IEEE80211_QUEUE_STOP_REASON_DRIVER); -} -EXPORT_SYMBOL(ieee80211_wake_queue); - -static void __ieee80211_stop_queue(struct ieee80211_hw *hw, int queue, - enum queue_stop_reason reason) -{ - struct ieee80211_local *local = hw_to_local(hw); - struct ieee80211_sub_if_data *sdata; - - trace_stop_queue(local, queue, reason); - - if (WARN_ON(queue >= hw->queues)) - return; - - __set_bit(reason, &local->queue_stop_reasons[queue]); - - rcu_read_lock(); - list_for_each_entry_rcu(sdata, &local->interfaces, list) -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,27)) - netif_stop_subqueue(sdata->dev, queue); -#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,23)) - netif_stop_subqueue(sdata->dev, queue); -#else - netif_stop_queue(sdata->dev); -#endif - rcu_read_unlock(); -} - -void ieee80211_stop_queue_by_reason(struct ieee80211_hw *hw, int queue, - enum queue_stop_reason reason) -{ - struct ieee80211_local *local = hw_to_local(hw); - unsigned long flags; - - spin_lock_irqsave(&local->queue_stop_reason_lock, flags); - __ieee80211_stop_queue(hw, queue, reason); - spin_unlock_irqrestore(&local->queue_stop_reason_lock, flags); -} - -void ieee80211_stop_queue(struct ieee80211_hw *hw, int queue) -{ - ieee80211_stop_queue_by_reason(hw, queue, - IEEE80211_QUEUE_STOP_REASON_DRIVER); -} -EXPORT_SYMBOL(ieee80211_stop_queue); - -void ieee80211_add_pending_skb(struct ieee80211_local *local, - struct sk_buff *skb) -{ - struct ieee80211_hw *hw = &local->hw; - unsigned long flags; - int queue = skb_get_queue_mapping(skb); - struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb); - - if (WARN_ON(!info->control.vif)) { - kfree_skb(skb); - return; - } - - spin_lock_irqsave(&local->queue_stop_reason_lock, flags); - __ieee80211_stop_queue(hw, queue, IEEE80211_QUEUE_STOP_REASON_SKB_ADD); - __skb_queue_tail(&local->pending[queue], skb); - __ieee80211_wake_queue(hw, queue, IEEE80211_QUEUE_STOP_REASON_SKB_ADD); - spin_unlock_irqrestore(&local->queue_stop_reason_lock, flags); -} - -void ieee80211_add_pending_skbs_fn(struct ieee80211_local *local, - struct sk_buff_head *skbs, - void (*fn)(void *data), void *data) -{ - struct ieee80211_hw *hw = &local->hw; - struct sk_buff *skb; - unsigned long flags; - int queue, i; - - spin_lock_irqsave(&local->queue_stop_reason_lock, flags); - for (i = 0; i < hw->queues; i++) - __ieee80211_stop_queue(hw, i, - IEEE80211_QUEUE_STOP_REASON_SKB_ADD); - - while ((skb = skb_dequeue(skbs))) { - struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb); - - if (WARN_ON(!info->control.vif)) { - kfree_skb(skb); - continue; - } - - queue = skb_get_queue_mapping(skb); - __skb_queue_tail(&local->pending[queue], skb); - } - - if (fn) - fn(data); - - for (i = 0; i < hw->queues; i++) - __ieee80211_wake_queue(hw, i, - IEEE80211_QUEUE_STOP_REASON_SKB_ADD); - spin_unlock_irqrestore(&local->queue_stop_reason_lock, flags); -} - -void ieee80211_add_pending_skbs(struct ieee80211_local *local, - struct sk_buff_head *skbs) -{ - ieee80211_add_pending_skbs_fn(local, skbs, NULL, NULL); -} - -void ieee80211_stop_queues_by_reason(struct ieee80211_hw *hw, - enum queue_stop_reason reason) -{ - struct ieee80211_local *local = hw_to_local(hw); - unsigned long flags; - int i; - - spin_lock_irqsave(&local->queue_stop_reason_lock, flags); - - for (i = 0; i < hw->queues; i++) - __ieee80211_stop_queue(hw, i, reason); - - spin_unlock_irqrestore(&local->queue_stop_reason_lock, flags); -} - -void ieee80211_stop_queues(struct ieee80211_hw *hw) -{ - ieee80211_stop_queues_by_reason(hw, - IEEE80211_QUEUE_STOP_REASON_DRIVER); -} -EXPORT_SYMBOL(ieee80211_stop_queues); - -int ieee80211_queue_stopped(struct ieee80211_hw *hw, int queue) -{ - struct ieee80211_local *local = hw_to_local(hw); - unsigned long flags; - int ret; - - if (WARN_ON(queue >= hw->queues)) - return true; - - spin_lock_irqsave(&local->queue_stop_reason_lock, flags); - ret = !!local->queue_stop_reasons[queue]; - spin_unlock_irqrestore(&local->queue_stop_reason_lock, flags); - return ret; -} -EXPORT_SYMBOL(ieee80211_queue_stopped); - -void ieee80211_wake_queues_by_reason(struct ieee80211_hw *hw, - enum queue_stop_reason reason) -{ - struct ieee80211_local *local = hw_to_local(hw); - unsigned long flags; - int i; - - spin_lock_irqsave(&local->queue_stop_reason_lock, flags); - - for (i = 0; i < hw->queues; i++) - __ieee80211_wake_queue(hw, i, reason); - - spin_unlock_irqrestore(&local->queue_stop_reason_lock, flags); -} - -void ieee80211_wake_queues(struct ieee80211_hw *hw) -{ - ieee80211_wake_queues_by_reason(hw, IEEE80211_QUEUE_STOP_REASON_DRIVER); -} -EXPORT_SYMBOL(ieee80211_wake_queues); - -void ieee80211_iterate_active_interfaces( - struct ieee80211_hw *hw, - void (*iterator)(void *data, u8 *mac, - struct ieee80211_vif *vif), - void *data) -{ - struct ieee80211_local *local = hw_to_local(hw); - struct ieee80211_sub_if_data *sdata; - - mutex_lock(&local->iflist_mtx); - - list_for_each_entry(sdata, &local->interfaces, list) { - switch (sdata->vif.type) { - case NL80211_IFTYPE_MONITOR: - case NL80211_IFTYPE_AP_VLAN: - continue; - default: - break; - } - if (ieee80211_sdata_running(sdata)) - iterator(data, sdata->vif.addr, - &sdata->vif); - } - - mutex_unlock(&local->iflist_mtx); -} -EXPORT_SYMBOL_GPL(ieee80211_iterate_active_interfaces); - -void ieee80211_iterate_active_interfaces_atomic( - struct ieee80211_hw *hw, - void (*iterator)(void *data, u8 *mac, - struct ieee80211_vif *vif), - void *data) -{ - struct ieee80211_local *local = hw_to_local(hw); - struct ieee80211_sub_if_data *sdata; - - rcu_read_lock(); - - list_for_each_entry_rcu(sdata, &local->interfaces, list) { - switch (sdata->vif.type) { - case NL80211_IFTYPE_MONITOR: - case NL80211_IFTYPE_AP_VLAN: - continue; - default: - break; - } - if (ieee80211_sdata_running(sdata)) - iterator(data, sdata->vif.addr, - &sdata->vif); - } - - rcu_read_unlock(); -} -EXPORT_SYMBOL_GPL(ieee80211_iterate_active_interfaces_atomic); - -/* - * Nothing should have been stuffed into the workqueue during - * the suspend->resume cycle. If this WARN is seen then there - * is a bug with either the driver suspend or something in - * mac80211 stuffing into the workqueue which we haven't yet - * cleared during mac80211's suspend cycle. - */ -static bool ieee80211_can_queue_work(struct ieee80211_local *local) -{ - if (WARN(local->suspended && !local->resuming, - "queueing ieee80211 work while going to suspend\n")) - return false; - - return true; -} - -void ieee80211_queue_work(struct ieee80211_hw *hw, struct work_struct *work) -{ - struct ieee80211_local *local = hw_to_local(hw); - - if (!ieee80211_can_queue_work(local)) - return; - - queue_work(local->workqueue, work); -} -EXPORT_SYMBOL(ieee80211_queue_work); - -void ieee80211_queue_delayed_work(struct ieee80211_hw *hw, - struct delayed_work *dwork, - unsigned long delay) -{ - struct ieee80211_local *local = hw_to_local(hw); - - if (!ieee80211_can_queue_work(local)) - return; - - queue_delayed_work(local->workqueue, dwork, delay); -} -EXPORT_SYMBOL(ieee80211_queue_delayed_work); - -u32 ieee802_11_parse_elems_crc(u8 *start, size_t len, - struct ieee802_11_elems *elems, - u64 filter, u32 crc) -{ - size_t left = len; - u8 *pos = start; - bool calc_crc = filter != 0; - DECLARE_BITMAP(seen_elems, 256); - - bitmap_zero(seen_elems, 256); - memset(elems, 0, sizeof(*elems)); - elems->ie_start = start; - elems->total_len = len; - - while (left >= 2) { - u8 id, elen; - bool elem_parse_failed; - - id = *pos++; - elen = *pos++; - left -= 2; - - if (elen > left) { - elems->parse_error = true; - break; - } - - if (id != WLAN_EID_VENDOR_SPECIFIC && - id != WLAN_EID_QUIET && - test_bit(id, seen_elems)) { - elems->parse_error = true; - left -= elen; - pos += elen; - continue; - } - - if (calc_crc && id < 64 && (filter & (1ULL << id))) - crc = crc32_be(crc, pos - 2, elen + 2); - - elem_parse_failed = false; - - switch (id) { - case WLAN_EID_SSID: - elems->ssid = pos; - elems->ssid_len = elen; - break; - case WLAN_EID_SUPP_RATES: - elems->supp_rates = pos; - elems->supp_rates_len = elen; - break; - case WLAN_EID_FH_PARAMS: - elems->fh_params = pos; - elems->fh_params_len = elen; - break; - case WLAN_EID_DS_PARAMS: - elems->ds_params = pos; - elems->ds_params_len = elen; - break; - case WLAN_EID_CF_PARAMS: - elems->cf_params = pos; - elems->cf_params_len = elen; - break; - case WLAN_EID_TIM: - if (elen >= sizeof(struct ieee80211_tim_ie)) { - elems->tim = (void *)pos; - elems->tim_len = elen; - } else - elem_parse_failed = true; - break; - case WLAN_EID_IBSS_PARAMS: - elems->ibss_params = pos; - elems->ibss_params_len = elen; - break; - case WLAN_EID_CHALLENGE: - elems->challenge = pos; - elems->challenge_len = elen; - break; - case WLAN_EID_VENDOR_SPECIFIC: - if (elen >= 4 && pos[0] == 0x00 && pos[1] == 0x50 && - pos[2] == 0xf2) { - /* Microsoft OUI (00:50:F2) */ - - if (calc_crc) - crc = crc32_be(crc, pos - 2, elen + 2); - - if (pos[3] == 1) { - /* OUI Type 1 - WPA IE */ - elems->wpa = pos; - elems->wpa_len = elen; - } else if (elen >= 5 && pos[3] == 2) { - /* OUI Type 2 - WMM IE */ - if (pos[4] == 0) { - elems->wmm_info = pos; - elems->wmm_info_len = elen; - } else if (pos[4] == 1) { - elems->wmm_param = pos; - elems->wmm_param_len = elen; - } - } - } - break; - case WLAN_EID_RSN: - elems->rsn = pos; - elems->rsn_len = elen; - break; - case WLAN_EID_ERP_INFO: - elems->erp_info = pos; - elems->erp_info_len = elen; - break; - case WLAN_EID_EXT_SUPP_RATES: - elems->ext_supp_rates = pos; - elems->ext_supp_rates_len = elen; - break; - case WLAN_EID_HT_CAPABILITY: - if (elen >= sizeof(struct ieee80211_ht_cap)) - elems->ht_cap_elem = (void *)pos; - else - elem_parse_failed = true; - break; - case WLAN_EID_HT_INFORMATION: - if (elen >= sizeof(struct ieee80211_ht_info)) - elems->ht_info_elem = (void *)pos; - else - elem_parse_failed = true; - break; - case WLAN_EID_MESH_ID: - elems->mesh_id = pos; - elems->mesh_id_len = elen; - break; - case WLAN_EID_MESH_CONFIG: - if (elen >= sizeof(struct ieee80211_meshconf_ie)) - elems->mesh_config = (void *)pos; - else - elem_parse_failed = true; - break; - case WLAN_EID_PEER_MGMT: - elems->peering = pos; - elems->peering_len = elen; - break; - case WLAN_EID_PREQ: - elems->preq = pos; - elems->preq_len = elen; - break; - case WLAN_EID_PREP: - elems->prep = pos; - elems->prep_len = elen; - break; - case WLAN_EID_PERR: - elems->perr = pos; - elems->perr_len = elen; - break; - case WLAN_EID_RANN: - if (elen >= sizeof(struct ieee80211_rann_ie)) - elems->rann = (void *)pos; - else - elem_parse_failed = true; - break; - case WLAN_EID_CHANNEL_SWITCH: - elems->ch_switch_elem = pos; - elems->ch_switch_elem_len = elen; - break; - case WLAN_EID_QUIET: - if (!elems->quiet_elem) { - elems->quiet_elem = pos; - elems->quiet_elem_len = elen; - } - elems->num_of_quiet_elem++; - break; - case WLAN_EID_COUNTRY: - elems->country_elem = pos; - elems->country_elem_len = elen; - break; - case WLAN_EID_PWR_CONSTRAINT: - elems->pwr_constr_elem = pos; - elems->pwr_constr_elem_len = elen; - break; - case WLAN_EID_TIMEOUT_INTERVAL: - elems->timeout_int = pos; - elems->timeout_int_len = elen; - break; - default: - break; - } - - if (elem_parse_failed) - elems->parse_error = true; - else - set_bit(id, seen_elems); - - left -= elen; - pos += elen; - } - - if (left != 0) - elems->parse_error = true; - - return crc; -} - -void ieee802_11_parse_elems(u8 *start, size_t len, - struct ieee802_11_elems *elems) -{ - ieee802_11_parse_elems_crc(start, len, elems, 0, 0); -} - -void ieee80211_set_wmm_default(struct ieee80211_sub_if_data *sdata, - bool bss_notify) -{ - struct ieee80211_local *local = sdata->local; - struct ieee80211_tx_queue_params qparam; - int queue; - bool use_11b; - int aCWmin, aCWmax; - - if (!local->ops->conf_tx) - return; - - memset(&qparam, 0, sizeof(qparam)); - - use_11b = (local->hw.conf.channel->band == IEEE80211_BAND_2GHZ) && - !(sdata->flags & IEEE80211_SDATA_OPERATING_GMODE); - - for (queue = 0; queue < local->hw.queues; queue++) { - /* Set defaults according to 802.11-2007 Table 7-37 */ - aCWmax = 1023; - if (use_11b) - aCWmin = 31; - else - aCWmin = 15; - - switch (queue) { - case 3: /* AC_BK */ - qparam.cw_max = aCWmax; - qparam.cw_min = aCWmin; - qparam.txop = 0; - qparam.aifs = 7; - break; - default: /* never happens but let's not leave undefined */ - case 2: /* AC_BE */ - qparam.cw_max = aCWmax; - qparam.cw_min = aCWmin; - qparam.txop = 0; - qparam.aifs = 3; - break; - case 1: /* AC_VI */ - qparam.cw_max = aCWmin; - qparam.cw_min = (aCWmin + 1) / 2 - 1; - if (use_11b) - qparam.txop = 6016/32; - else - qparam.txop = 3008/32; - qparam.aifs = 2; - break; - case 0: /* AC_VO */ - qparam.cw_max = (aCWmin + 1) / 2 - 1; - qparam.cw_min = (aCWmin + 1) / 4 - 1; - if (use_11b) - qparam.txop = 3264/32; - else - qparam.txop = 1504/32; - qparam.aifs = 2; - break; - } - - qparam.uapsd = false; - - sdata->tx_conf[queue] = qparam; - drv_conf_tx(local, sdata, queue, &qparam); - } - - /* after reinitialize QoS TX queues setting to default, - * disable QoS at all */ - - if (sdata->vif.type != NL80211_IFTYPE_MONITOR) { - sdata->vif.bss_conf.qos = - sdata->vif.type != NL80211_IFTYPE_STATION; - if (bss_notify) - ieee80211_bss_info_change_notify(sdata, - BSS_CHANGED_QOS); - } -} - -void ieee80211_sta_def_wmm_params(struct ieee80211_sub_if_data *sdata, - const size_t supp_rates_len, - const u8 *supp_rates) -{ - struct ieee80211_local *local = sdata->local; - int i, have_higher_than_11mbit = 0; - - /* cf. IEEE 802.11 9.2.12 */ - for (i = 0; i < supp_rates_len; i++) - if ((supp_rates[i] & 0x7f) * 5 > 110) - have_higher_than_11mbit = 1; - - if (local->hw.conf.channel->band == IEEE80211_BAND_2GHZ && - have_higher_than_11mbit) - sdata->flags |= IEEE80211_SDATA_OPERATING_GMODE; - else - sdata->flags &= ~IEEE80211_SDATA_OPERATING_GMODE; - - ieee80211_set_wmm_default(sdata, true); -} - -u32 ieee80211_mandatory_rates(struct ieee80211_local *local, - enum ieee80211_band band) -{ - struct ieee80211_supported_band *sband; - struct ieee80211_rate *bitrates; - u32 mandatory_rates; - enum ieee80211_rate_flags mandatory_flag; - int i; - - sband = local->hw.wiphy->bands[band]; - if (!sband) { - WARN_ON(1); - sband = local->hw.wiphy->bands[local->hw.conf.channel->band]; - } - - if (band == IEEE80211_BAND_2GHZ) - mandatory_flag = IEEE80211_RATE_MANDATORY_B; - else - mandatory_flag = IEEE80211_RATE_MANDATORY_A; - - bitrates = sband->bitrates; - mandatory_rates = 0; - for (i = 0; i < sband->n_bitrates; i++) - if (bitrates[i].flags & mandatory_flag) - mandatory_rates |= BIT(i); - return mandatory_rates; -} - -void ieee80211_send_auth(struct ieee80211_sub_if_data *sdata, - u16 transaction, u16 auth_alg, - u8 *extra, size_t extra_len, const u8 *da, - const u8 *bssid, const u8 *key, u8 key_len, u8 key_idx) -{ - struct ieee80211_local *local = sdata->local; - struct sk_buff *skb; - struct ieee80211_mgmt *mgmt; - int err; - - skb = dev_alloc_skb(local->hw.extra_tx_headroom + - sizeof(*mgmt) + 6 + extra_len); - if (!skb) - return; - - skb_reserve(skb, local->hw.extra_tx_headroom); - - mgmt = (struct ieee80211_mgmt *) skb_put(skb, 24 + 6); - memset(mgmt, 0, 24 + 6); - mgmt->frame_control = cpu_to_le16(IEEE80211_FTYPE_MGMT | - IEEE80211_STYPE_AUTH); - memcpy(mgmt->da, da, ETH_ALEN); - memcpy(mgmt->sa, sdata->vif.addr, ETH_ALEN); - memcpy(mgmt->bssid, bssid, ETH_ALEN); - mgmt->u.auth.auth_alg = cpu_to_le16(auth_alg); - mgmt->u.auth.auth_transaction = cpu_to_le16(transaction); - mgmt->u.auth.status_code = cpu_to_le16(0); - if (extra) - memcpy(skb_put(skb, extra_len), extra, extra_len); - - if (auth_alg == WLAN_AUTH_SHARED_KEY && transaction == 3) { - mgmt->frame_control |= cpu_to_le16(IEEE80211_FCTL_PROTECTED); - err = ieee80211_wep_encrypt(local, skb, key, key_len, key_idx); - WARN_ON(err); - } - - IEEE80211_SKB_CB(skb)->flags |= IEEE80211_TX_INTFL_DONT_ENCRYPT; - ieee80211_tx_skb(sdata, skb); -} - -int ieee80211_build_preq_ies(struct ieee80211_local *local, u8 *buffer, - const u8 *ie, size_t ie_len, - enum ieee80211_band band, u32 rate_mask, - u8 channel) -{ - struct ieee80211_supported_band *sband; - u8 *pos; - size_t offset = 0, noffset; - int supp_rates_len, i; - u8 rates[32]; - int num_rates; - int ext_rates_len; - - sband = local->hw.wiphy->bands[band]; - - pos = buffer; - - num_rates = 0; - for (i = 0; i < sband->n_bitrates; i++) { - if ((BIT(i) & rate_mask) == 0) - continue; /* skip rate */ - rates[num_rates++] = (u8) (sband->bitrates[i].bitrate / 5); - } - - supp_rates_len = min_t(int, num_rates, 8); - - *pos++ = WLAN_EID_SUPP_RATES; - *pos++ = supp_rates_len; - memcpy(pos, rates, supp_rates_len); - pos += supp_rates_len; - - /* insert "request information" if in custom IEs */ - if (ie && ie_len) { - static const u8 before_extrates[] = { - WLAN_EID_SSID, - WLAN_EID_SUPP_RATES, - WLAN_EID_REQUEST, - }; - noffset = ieee80211_ie_split(ie, ie_len, - before_extrates, - ARRAY_SIZE(before_extrates), - offset); - memcpy(pos, ie + offset, noffset - offset); - pos += noffset - offset; - offset = noffset; - } - - ext_rates_len = num_rates - supp_rates_len; - if (ext_rates_len > 0) { - *pos++ = WLAN_EID_EXT_SUPP_RATES; - *pos++ = ext_rates_len; - memcpy(pos, rates + supp_rates_len, ext_rates_len); - pos += ext_rates_len; - } - - if (channel && sband->band == IEEE80211_BAND_2GHZ) { - *pos++ = WLAN_EID_DS_PARAMS; - *pos++ = 1; - *pos++ = channel; - } - - /* insert custom IEs that go before HT */ - if (ie && ie_len) { - static const u8 before_ht[] = { - WLAN_EID_SSID, - WLAN_EID_SUPP_RATES, - WLAN_EID_REQUEST, - WLAN_EID_EXT_SUPP_RATES, - WLAN_EID_DS_PARAMS, - WLAN_EID_SUPPORTED_REGULATORY_CLASSES, - }; - noffset = ieee80211_ie_split(ie, ie_len, - before_ht, ARRAY_SIZE(before_ht), - offset); - memcpy(pos, ie + offset, noffset - offset); - pos += noffset - offset; - offset = noffset; - } - - if (sband->ht_cap.ht_supported) - pos = ieee80211_ie_build_ht_cap(pos, &sband->ht_cap, - sband->ht_cap.cap); - - /* - * If adding more here, adjust code in main.c - * that calculates local->scan_ies_len. - */ - - /* add any remaining custom IEs */ - if (ie && ie_len) { - noffset = ie_len; - memcpy(pos, ie + offset, noffset - offset); - pos += noffset - offset; - } - - return pos - buffer; -} - -struct sk_buff *ieee80211_build_probe_req(struct ieee80211_sub_if_data *sdata, - u8 *dst, u32 ratemask, - const u8 *ssid, size_t ssid_len, - const u8 *ie, size_t ie_len, - bool directed) -{ - struct ieee80211_local *local = sdata->local; - struct sk_buff *skb; - struct ieee80211_mgmt *mgmt; - size_t buf_len; - u8 *buf; - u8 chan; - - /* FIXME: come up with a proper value */ - buf = kmalloc(200 + ie_len, GFP_KERNEL); - if (!buf) - return NULL; - - /* - * Do not send DS Channel parameter for directed probe requests - * in order to maximize the chance that we get a response. Some - * badly-behaved APs don't respond when this parameter is included. - */ - if (directed) - chan = 0; - else - chan = ieee80211_frequency_to_channel( - local->hw.conf.channel->center_freq); - - buf_len = ieee80211_build_preq_ies(local, buf, ie, ie_len, - local->hw.conf.channel->band, - ratemask, chan); - - skb = ieee80211_probereq_get(&local->hw, &sdata->vif, - ssid, ssid_len, - buf, buf_len); - if (!skb) - goto out; - - if (dst) { - mgmt = (struct ieee80211_mgmt *) skb->data; - memcpy(mgmt->da, dst, ETH_ALEN); - memcpy(mgmt->bssid, dst, ETH_ALEN); - } - - IEEE80211_SKB_CB(skb)->flags |= IEEE80211_TX_INTFL_DONT_ENCRYPT; - - out: - kfree(buf); - - return skb; -} - -void ieee80211_send_probe_req(struct ieee80211_sub_if_data *sdata, u8 *dst, - const u8 *ssid, size_t ssid_len, - const u8 *ie, size_t ie_len, - u32 ratemask, bool directed, bool no_cck) -{ - struct sk_buff *skb; - - skb = ieee80211_build_probe_req(sdata, dst, ratemask, ssid, ssid_len, - ie, ie_len, directed); - if (skb) { - if (no_cck) - IEEE80211_SKB_CB(skb)->flags |= - IEEE80211_TX_CTL_NO_CCK_RATE; - ieee80211_tx_skb(sdata, skb); - } -} - -u32 ieee80211_sta_get_rates(struct ieee80211_local *local, - struct ieee802_11_elems *elems, - enum ieee80211_band band) -{ - struct ieee80211_supported_band *sband; - struct ieee80211_rate *bitrates; - size_t num_rates; - u32 supp_rates; - int i, j; - sband = local->hw.wiphy->bands[band]; - - if (!sband) { - WARN_ON(1); - sband = local->hw.wiphy->bands[local->hw.conf.channel->band]; - } - - bitrates = sband->bitrates; - num_rates = sband->n_bitrates; - supp_rates = 0; - for (i = 0; i < elems->supp_rates_len + - elems->ext_supp_rates_len; i++) { - u8 rate = 0; - int own_rate; - if (i < elems->supp_rates_len) - rate = elems->supp_rates[i]; - else if (elems->ext_supp_rates) - rate = elems->ext_supp_rates - [i - elems->supp_rates_len]; - own_rate = 5 * (rate & 0x7f); - for (j = 0; j < num_rates; j++) - if (bitrates[j].bitrate == own_rate) - supp_rates |= BIT(j); - } - return supp_rates; -} - -void ieee80211_stop_device(struct ieee80211_local *local) -{ - ieee80211_led_radio(local, false); - ieee80211_mod_tpt_led_trig(local, 0, IEEE80211_TPT_LEDTRIG_FL_RADIO); - - cancel_work_sync(&local->reconfig_filter); - - flush_workqueue(local->workqueue); - drv_stop(local); -} - -int ieee80211_reconfig(struct ieee80211_local *local) -{ - struct ieee80211_hw *hw = &local->hw; - struct ieee80211_sub_if_data *sdata; - struct sta_info *sta; - int res, i; - -#ifdef CONFIG_PM - if (local->suspended) - local->resuming = true; - - if (local->wowlan) { - local->wowlan = false; - res = drv_resume(local); - if (res < 0) { - local->resuming = false; - return res; - } - if (res == 0) - goto wake_up; - WARN_ON(res > 1); - /* - * res is 1, which means the driver requested - * to go through a regular reset on wakeup. - */ - } -#endif - /* everything else happens only if HW was up & running */ - if (!local->open_count) - goto wake_up; - - /* - * Upon resume hardware can sometimes be goofy due to - * various platform / driver / bus issues, so restarting - * the device may at times not work immediately. Propagate - * the error. - */ - res = drv_start(local); - if (res) { - WARN(local->suspended, "Hardware became unavailable " - "upon resume. This could be a software issue " - "prior to suspend or a hardware issue.\n"); - return res; - } - - /* setup fragmentation threshold */ - drv_set_frag_threshold(local, hw->wiphy->frag_threshold); - - /* setup RTS threshold */ - drv_set_rts_threshold(local, hw->wiphy->rts_threshold); - - /* reset coverage class */ - drv_set_coverage_class(local, hw->wiphy->coverage_class); - - ieee80211_led_radio(local, true); - ieee80211_mod_tpt_led_trig(local, - IEEE80211_TPT_LEDTRIG_FL_RADIO, 0); - - /* add interfaces */ - list_for_each_entry(sdata, &local->interfaces, list) { - if (sdata->vif.type != NL80211_IFTYPE_AP_VLAN && - sdata->vif.type != NL80211_IFTYPE_MONITOR && - ieee80211_sdata_running(sdata)) - res = drv_add_interface(local, sdata); - } - - /* add STAs back */ - mutex_lock(&local->sta_mtx); - list_for_each_entry(sta, &local->sta_list, list) { - if (sta->uploaded) { - enum ieee80211_sta_state state; - - for (state = IEEE80211_STA_NOTEXIST; - state < sta->sta_state - 1; state++) - WARN_ON(drv_sta_state(local, sta->sdata, sta, - state, state + 1)); - } - } - mutex_unlock(&local->sta_mtx); - - /* reconfigure tx conf */ - list_for_each_entry(sdata, &local->interfaces, list) { - if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN || - sdata->vif.type == NL80211_IFTYPE_MONITOR || - !ieee80211_sdata_running(sdata)) - continue; - - for (i = 0; i < hw->queues; i++) - drv_conf_tx(local, sdata, i, &sdata->tx_conf[i]); - } - - /* reconfigure hardware */ - ieee80211_hw_config(local, ~0); - - ieee80211_configure_filter(local); - - /* Finally also reconfigure all the BSS information */ - list_for_each_entry(sdata, &local->interfaces, list) { - u32 changed; - - if (!ieee80211_sdata_running(sdata)) - continue; - - /* common change flags for all interface types */ - changed = BSS_CHANGED_ERP_CTS_PROT | - BSS_CHANGED_ERP_PREAMBLE | - BSS_CHANGED_ERP_SLOT | - BSS_CHANGED_HT | - BSS_CHANGED_BASIC_RATES | - BSS_CHANGED_BEACON_INT | - BSS_CHANGED_BSSID | - BSS_CHANGED_CQM | - BSS_CHANGED_QOS | - BSS_CHANGED_IDLE; - - switch (sdata->vif.type) { - case NL80211_IFTYPE_STATION: - changed |= BSS_CHANGED_ASSOC | - BSS_CHANGED_ARP_FILTER; - mutex_lock(&sdata->u.mgd.mtx); - ieee80211_bss_info_change_notify(sdata, changed); - mutex_unlock(&sdata->u.mgd.mtx); - break; - case NL80211_IFTYPE_ADHOC: - changed |= BSS_CHANGED_IBSS; - /* fall through */ - case NL80211_IFTYPE_AP: - changed |= BSS_CHANGED_SSID; - - if (sdata->vif.type == NL80211_IFTYPE_AP) - changed |= BSS_CHANGED_AP_PROBE_RESP; - - /* fall through */ - case NL80211_IFTYPE_MESH_POINT: - changed |= BSS_CHANGED_BEACON | - BSS_CHANGED_BEACON_ENABLED; - ieee80211_bss_info_change_notify(sdata, changed); - break; - case NL80211_IFTYPE_WDS: - break; - case NL80211_IFTYPE_AP_VLAN: - case NL80211_IFTYPE_MONITOR: - /* ignore virtual */ - break; - case NL80211_IFTYPE_UNSPECIFIED: - case NUM_NL80211_IFTYPES: - case NL80211_IFTYPE_P2P_CLIENT: - case NL80211_IFTYPE_P2P_GO: - WARN_ON(1); - break; - } - } - - ieee80211_recalc_ps(local, -1); - - /* - * The sta might be in psm against the ap (e.g. because - * this was the state before a hw restart), so we - * explicitly send a null packet in order to make sure - * it'll sync against the ap (and get out of psm). - */ - if (!(local->hw.conf.flags & IEEE80211_CONF_PS)) { - list_for_each_entry(sdata, &local->interfaces, list) { - if (sdata->vif.type != NL80211_IFTYPE_STATION) - continue; - - ieee80211_send_nullfunc(local, sdata, 0); - } - } - - /* - * Clear the WLAN_STA_BLOCK_BA flag so new aggregation - * sessions can be established after a resume. - * - * Also tear down aggregation sessions since reconfiguring - * them in a hardware restart scenario is not easily done - * right now, and the hardware will have lost information - * about the sessions, but we and the AP still think they - * are active. This is really a workaround though. - */ - if (hw->flags & IEEE80211_HW_AMPDU_AGGREGATION) { - mutex_lock(&local->sta_mtx); - - list_for_each_entry(sta, &local->sta_list, list) { - ieee80211_sta_tear_down_BA_sessions(sta, true); - clear_sta_flag(sta, WLAN_STA_BLOCK_BA); - } - - mutex_unlock(&local->sta_mtx); - } - - /* add back keys */ - list_for_each_entry(sdata, &local->interfaces, list) - if (ieee80211_sdata_running(sdata)) - ieee80211_enable_keys(sdata); - - wake_up: - ieee80211_wake_queues_by_reason(hw, - IEEE80211_QUEUE_STOP_REASON_SUSPEND); - - /* - * If this is for hw restart things are still running. - * We may want to change that later, however. - */ - if (!local->suspended) - return 0; - -#ifdef CONFIG_PM - /* first set suspended false, then resuming */ - local->suspended = false; - mb(); - local->resuming = false; - - list_for_each_entry(sdata, &local->interfaces, list) { - switch(sdata->vif.type) { - case NL80211_IFTYPE_STATION: - ieee80211_sta_restart(sdata); - break; - case NL80211_IFTYPE_ADHOC: - ieee80211_ibss_restart(sdata); - break; - case NL80211_IFTYPE_MESH_POINT: - ieee80211_mesh_restart(sdata); - break; - default: - break; - } - } - - mod_timer(&local->sta_cleanup, jiffies + 1); - - mutex_lock(&local->sta_mtx); - list_for_each_entry(sta, &local->sta_list, list) - mesh_plink_restart(sta); - mutex_unlock(&local->sta_mtx); -#else - WARN_ON(1); -#endif - return 0; -} - -void ieee80211_resume_disconnect(struct ieee80211_vif *vif) -{ - struct ieee80211_sub_if_data *sdata; - struct ieee80211_local *local; - struct ieee80211_key *key; - - if (WARN_ON(!vif)) - return; - - sdata = vif_to_sdata(vif); - local = sdata->local; - - if (WARN_ON(!local->resuming)) - return; - - if (WARN_ON(vif->type != NL80211_IFTYPE_STATION)) - return; - - sdata->flags |= IEEE80211_SDATA_DISCONNECT_RESUME; - - mutex_lock(&local->key_mtx); - list_for_each_entry(key, &sdata->key_list, list) - key->flags |= KEY_FLAG_TAINTED; - mutex_unlock(&local->key_mtx); -} -EXPORT_SYMBOL_GPL(ieee80211_resume_disconnect); - -static int check_mgd_smps(struct ieee80211_if_managed *ifmgd, - enum ieee80211_smps_mode *smps_mode) -{ - if (ifmgd->associated) { - *smps_mode = ifmgd->ap_smps; - - if (*smps_mode == IEEE80211_SMPS_AUTOMATIC) { - if (ifmgd->powersave) - *smps_mode = IEEE80211_SMPS_DYNAMIC; - else - *smps_mode = IEEE80211_SMPS_OFF; - } - - return 1; - } - - return 0; -} - -/* must hold iflist_mtx */ -void ieee80211_recalc_smps(struct ieee80211_local *local) -{ - struct ieee80211_sub_if_data *sdata; - enum ieee80211_smps_mode smps_mode = IEEE80211_SMPS_OFF; - int count = 0; - - lockdep_assert_held(&local->iflist_mtx); - - /* - * This function could be improved to handle multiple - * interfaces better, but right now it makes any - * non-station interfaces force SM PS to be turned - * off. If there are multiple station interfaces it - * could also use the best possible mode, e.g. if - * one is in static and the other in dynamic then - * dynamic is ok. - */ - - list_for_each_entry(sdata, &local->interfaces, list) { - if (!ieee80211_sdata_running(sdata)) - continue; - if (sdata->vif.type != NL80211_IFTYPE_STATION) - goto set; - - count += check_mgd_smps(&sdata->u.mgd, &smps_mode); - - if (count > 1) { - smps_mode = IEEE80211_SMPS_OFF; - break; - } - } - - if (smps_mode == local->smps_mode) - return; - - set: - local->smps_mode = smps_mode; - /* changed flag is auto-detected for this */ - ieee80211_hw_config(local, 0); -} - -static bool ieee80211_id_in_list(const u8 *ids, int n_ids, u8 id) -{ - int i; - - for (i = 0; i < n_ids; i++) - if (ids[i] == id) - return true; - return false; -} - -/** - * ieee80211_ie_split - split an IE buffer according to ordering - * - * @ies: the IE buffer - * @ielen: the length of the IE buffer - * @ids: an array with element IDs that are allowed before - * the split - * @n_ids: the size of the element ID array - * @offset: offset where to start splitting in the buffer - * - * This function splits an IE buffer by updating the @offset - * variable to point to the location where the buffer should be - * split. - * - * It assumes that the given IE buffer is well-formed, this - * has to be guaranteed by the caller! - * - * It also assumes that the IEs in the buffer are ordered - * correctly, if not the result of using this function will not - * be ordered correctly either, i.e. it does no reordering. - * - * The function returns the offset where the next part of the - * buffer starts, which may be @ielen if the entire (remainder) - * of the buffer should be used. - */ -size_t ieee80211_ie_split(const u8 *ies, size_t ielen, - const u8 *ids, int n_ids, size_t offset) -{ - size_t pos = offset; - - while (pos < ielen && ieee80211_id_in_list(ids, n_ids, ies[pos])) - pos += 2 + ies[pos + 1]; - - return pos; -} - -size_t ieee80211_ie_split_vendor(const u8 *ies, size_t ielen, size_t offset) -{ - size_t pos = offset; - - while (pos < ielen && ies[pos] != WLAN_EID_VENDOR_SPECIFIC) - pos += 2 + ies[pos + 1]; - - return pos; -} - -static void _ieee80211_enable_rssi_reports(struct ieee80211_sub_if_data *sdata, - int rssi_min_thold, - int rssi_max_thold) -{ - trace_api_enable_rssi_reports(sdata, rssi_min_thold, rssi_max_thold); - - if (WARN_ON(sdata->vif.type != NL80211_IFTYPE_STATION)) - return; - - /* - * Scale up threshold values before storing it, as the RSSI averaging - * algorithm uses a scaled up value as well. Change this scaling - * factor if the RSSI averaging algorithm changes. - */ - sdata->u.mgd.rssi_min_thold = rssi_min_thold*16; - sdata->u.mgd.rssi_max_thold = rssi_max_thold*16; -} - -void ieee80211_enable_rssi_reports(struct ieee80211_vif *vif, - int rssi_min_thold, - int rssi_max_thold) -{ - struct ieee80211_sub_if_data *sdata = vif_to_sdata(vif); - - WARN_ON(rssi_min_thold == rssi_max_thold || - rssi_min_thold > rssi_max_thold); - - _ieee80211_enable_rssi_reports(sdata, rssi_min_thold, - rssi_max_thold); -} -EXPORT_SYMBOL(ieee80211_enable_rssi_reports); - -void ieee80211_disable_rssi_reports(struct ieee80211_vif *vif) -{ - struct ieee80211_sub_if_data *sdata = vif_to_sdata(vif); - - _ieee80211_enable_rssi_reports(sdata, 0, 0); -} -EXPORT_SYMBOL(ieee80211_disable_rssi_reports); - -u8 *ieee80211_ie_build_ht_cap(u8 *pos, struct ieee80211_sta_ht_cap *ht_cap, - u16 cap) -{ - __le16 tmp; - - *pos++ = WLAN_EID_HT_CAPABILITY; - *pos++ = sizeof(struct ieee80211_ht_cap); - memset(pos, 0, sizeof(struct ieee80211_ht_cap)); - - /* capability flags */ - tmp = cpu_to_le16(cap); - memcpy(pos, &tmp, sizeof(u16)); - pos += sizeof(u16); - - /* AMPDU parameters */ - *pos++ = ht_cap->ampdu_factor | - (ht_cap->ampdu_density << - IEEE80211_HT_AMPDU_PARM_DENSITY_SHIFT); - - /* MCS set */ - memcpy(pos, &ht_cap->mcs, sizeof(ht_cap->mcs)); - pos += sizeof(ht_cap->mcs); - - /* extended capabilities */ - pos += sizeof(__le16); - - /* BF capabilities */ - pos += sizeof(__le32); - - /* antenna selection */ - pos += sizeof(u8); - - return pos; -} - -u8 *ieee80211_ie_build_ht_info(u8 *pos, - struct ieee80211_sta_ht_cap *ht_cap, - struct ieee80211_channel *channel, - enum nl80211_channel_type channel_type) -{ - struct ieee80211_ht_info *ht_info; - /* Build HT Information */ - *pos++ = WLAN_EID_HT_INFORMATION; - *pos++ = sizeof(struct ieee80211_ht_info); - ht_info = (struct ieee80211_ht_info *)pos; - ht_info->control_chan = - ieee80211_frequency_to_channel(channel->center_freq); - switch (channel_type) { - case NL80211_CHAN_HT40MINUS: - ht_info->ht_param = IEEE80211_HT_PARAM_CHA_SEC_BELOW; - break; - case NL80211_CHAN_HT40PLUS: - ht_info->ht_param = IEEE80211_HT_PARAM_CHA_SEC_ABOVE; - break; - case NL80211_CHAN_HT20: - default: - ht_info->ht_param = IEEE80211_HT_PARAM_CHA_SEC_NONE; - break; - } - if (ht_cap->cap & IEEE80211_HT_CAP_SUP_WIDTH_20_40) - ht_info->ht_param |= IEEE80211_HT_PARAM_CHAN_WIDTH_ANY; - - /* - * Note: According to 802.11n-2009 9.13.3.1, HT Protection field and - * RIFS Mode are reserved in IBSS mode, therefore keep them at 0 - */ - ht_info->operation_mode = 0x0000; - ht_info->stbc_param = 0x0000; - - /* It seems that Basic MCS set and Supported MCS set - are identical for the first 10 bytes */ - memset(&ht_info->basic_set, 0, 16); - memcpy(&ht_info->basic_set, &ht_cap->mcs, 10); - - return pos + sizeof(struct ieee80211_ht_info); -} - -enum nl80211_channel_type -ieee80211_ht_info_to_channel_type(struct ieee80211_ht_info *ht_info) -{ - enum nl80211_channel_type channel_type; - - if (!ht_info) - return NL80211_CHAN_NO_HT; - - switch (ht_info->ht_param & IEEE80211_HT_PARAM_CHA_SEC_OFFSET) { - case IEEE80211_HT_PARAM_CHA_SEC_NONE: - channel_type = NL80211_CHAN_HT20; - break; - case IEEE80211_HT_PARAM_CHA_SEC_ABOVE: - channel_type = NL80211_CHAN_HT40PLUS; - break; - case IEEE80211_HT_PARAM_CHA_SEC_BELOW: - channel_type = NL80211_CHAN_HT40MINUS; - break; - default: - channel_type = NL80211_CHAN_NO_HT; - } - - return channel_type; -} - -int ieee80211_add_srates_ie(struct ieee80211_vif *vif, struct sk_buff *skb) -{ - struct ieee80211_sub_if_data *sdata = vif_to_sdata(vif); - struct ieee80211_local *local = sdata->local; - struct ieee80211_supported_band *sband; - int rate; - u8 i, rates, *pos; - - sband = local->hw.wiphy->bands[local->hw.conf.channel->band]; - rates = sband->n_bitrates; - if (rates > 8) - rates = 8; - - if (skb_tailroom(skb) < rates + 2) - return -ENOMEM; - - pos = skb_put(skb, rates + 2); - *pos++ = WLAN_EID_SUPP_RATES; - *pos++ = rates; - for (i = 0; i < rates; i++) { - rate = sband->bitrates[i].bitrate; - *pos++ = (u8) (rate / 5); - } - - return 0; -} - -int ieee80211_add_ext_srates_ie(struct ieee80211_vif *vif, struct sk_buff *skb) -{ - struct ieee80211_sub_if_data *sdata = vif_to_sdata(vif); - struct ieee80211_local *local = sdata->local; - struct ieee80211_supported_band *sband; - int rate; - u8 i, exrates, *pos; - - sband = local->hw.wiphy->bands[local->hw.conf.channel->band]; - exrates = sband->n_bitrates; - if (exrates > 8) - exrates -= 8; - else - exrates = 0; - - if (skb_tailroom(skb) < exrates + 2) - return -ENOMEM; - - if (exrates) { - pos = skb_put(skb, exrates + 2); - *pos++ = WLAN_EID_EXT_SUPP_RATES; - *pos++ = exrates; - for (i = 8; i < sband->n_bitrates; i++) { - rate = sband->bitrates[i].bitrate; - *pos++ = (u8) (rate / 5); - } - } - return 0; -} diff --git a/openairITS/mac/DOT11/net/mac80211/wep.c b/openairITS/mac/DOT11/net/mac80211/wep.c deleted file mode 100644 index 7aa31bbfaa..0000000000 --- a/openairITS/mac/DOT11/net/mac80211/wep.c +++ /dev/null @@ -1,348 +0,0 @@ -/* - * Software WEP encryption implementation - * Copyright 2002, Jouni Malinen - * Copyright 2003, Instant802 Networks, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include "ieee80211_i.h" -#include "wep.h" - - -int ieee80211_wep_init(struct ieee80211_local *local) -{ - /* start WEP IV from a random value */ - get_random_bytes(&local->wep_iv, WEP_IV_LEN); - - local->wep_tx_tfm = crypto_alloc_cipher("arc4", 0, CRYPTO_ALG_ASYNC); - if (IS_ERR(local->wep_tx_tfm)) { - local->wep_rx_tfm = ERR_PTR(-EINVAL); - return PTR_ERR(local->wep_tx_tfm); - } - - local->wep_rx_tfm = crypto_alloc_cipher("arc4", 0, CRYPTO_ALG_ASYNC); - if (IS_ERR(local->wep_rx_tfm)) { - crypto_free_cipher(local->wep_tx_tfm); - local->wep_tx_tfm = ERR_PTR(-EINVAL); - return PTR_ERR(local->wep_rx_tfm); - } - - return 0; -} - -void ieee80211_wep_free(struct ieee80211_local *local) -{ - if (!IS_ERR(local->wep_tx_tfm)) - crypto_free_cipher(local->wep_tx_tfm); - if (!IS_ERR(local->wep_rx_tfm)) - crypto_free_cipher(local->wep_rx_tfm); -} - -static inline bool ieee80211_wep_weak_iv(u32 iv, int keylen) -{ - /* - * Fluhrer, Mantin, and Shamir have reported weaknesses in the - * key scheduling algorithm of RC4. At least IVs (KeyByte + 3, - * 0xff, N) can be used to speedup attacks, so avoid using them. - */ - if ((iv & 0xff00) == 0xff00) { - u8 B = (iv >> 16) & 0xff; - if (B >= 3 && B < 3 + keylen) - return true; - } - return false; -} - - -static void ieee80211_wep_get_iv(struct ieee80211_local *local, - int keylen, int keyidx, u8 *iv) -{ - local->wep_iv++; - if (ieee80211_wep_weak_iv(local->wep_iv, keylen)) - local->wep_iv += 0x0100; - - if (!iv) - return; - - *iv++ = (local->wep_iv >> 16) & 0xff; - *iv++ = (local->wep_iv >> 8) & 0xff; - *iv++ = local->wep_iv & 0xff; - *iv++ = keyidx << 6; -} - - -static u8 *ieee80211_wep_add_iv(struct ieee80211_local *local, - struct sk_buff *skb, - int keylen, int keyidx) -{ - struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data; - unsigned int hdrlen; - u8 *newhdr; - - hdr->frame_control |= cpu_to_le16(IEEE80211_FCTL_PROTECTED); - - if (WARN_ON(skb_tailroom(skb) < WEP_ICV_LEN || - skb_headroom(skb) < WEP_IV_LEN)) - return NULL; - - hdrlen = ieee80211_hdrlen(hdr->frame_control); - newhdr = skb_push(skb, WEP_IV_LEN); - memmove(newhdr, newhdr + WEP_IV_LEN, hdrlen); - ieee80211_wep_get_iv(local, keylen, keyidx, newhdr + hdrlen); - return newhdr + hdrlen; -} - - -static void ieee80211_wep_remove_iv(struct ieee80211_local *local, - struct sk_buff *skb, - struct ieee80211_key *key) -{ - struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data; - unsigned int hdrlen; - - hdrlen = ieee80211_hdrlen(hdr->frame_control); - memmove(skb->data + WEP_IV_LEN, skb->data, hdrlen); - skb_pull(skb, WEP_IV_LEN); -} - - -/* Perform WEP encryption using given key. data buffer must have tailroom - * for 4-byte ICV. data_len must not include this ICV. Note: this function - * does _not_ add IV. data = RC4(data | CRC32(data)) */ -int ieee80211_wep_encrypt_data(struct crypto_cipher *tfm, u8 *rc4key, - size_t klen, u8 *data, size_t data_len) -{ - __le32 icv; - int i; - - if (IS_ERR(tfm)) - return -1; - - icv = cpu_to_le32(~crc32_le(~0, data, data_len)); - put_unaligned(icv, (__le32 *)(data + data_len)); - - crypto_cipher_setkey(tfm, rc4key, klen); - for (i = 0; i < data_len + WEP_ICV_LEN; i++) - crypto_cipher_encrypt_one(tfm, data + i, data + i); - - return 0; -} - - -/* Perform WEP encryption on given skb. 4 bytes of extra space (IV) in the - * beginning of the buffer 4 bytes of extra space (ICV) in the end of the - * buffer will be added. Both IV and ICV will be transmitted, so the - * payload length increases with 8 bytes. - * - * WEP frame payload: IV + TX key idx, RC4(data), ICV = RC4(CRC32(data)) - */ -int ieee80211_wep_encrypt(struct ieee80211_local *local, - struct sk_buff *skb, - const u8 *key, int keylen, int keyidx) -{ - u8 *iv; - size_t len; - u8 rc4key[3 + WLAN_KEY_LEN_WEP104]; - - iv = ieee80211_wep_add_iv(local, skb, keylen, keyidx); - if (!iv) - return -1; - - len = skb->len - (iv + WEP_IV_LEN - skb->data); - - /* Prepend 24-bit IV to RC4 key */ - memcpy(rc4key, iv, 3); - - /* Copy rest of the WEP key (the secret part) */ - memcpy(rc4key + 3, key, keylen); - - /* Add room for ICV */ - skb_put(skb, WEP_ICV_LEN); - - return ieee80211_wep_encrypt_data(local->wep_tx_tfm, rc4key, keylen + 3, - iv + WEP_IV_LEN, len); -} - - -/* Perform WEP decryption using given key. data buffer includes encrypted - * payload, including 4-byte ICV, but _not_ IV. data_len must not include ICV. - * Return 0 on success and -1 on ICV mismatch. */ -int ieee80211_wep_decrypt_data(struct crypto_cipher *tfm, u8 *rc4key, - size_t klen, u8 *data, size_t data_len) -{ - __le32 crc; - int i; - - if (IS_ERR(tfm)) - return -1; - - crypto_cipher_setkey(tfm, rc4key, klen); - for (i = 0; i < data_len + WEP_ICV_LEN; i++) - crypto_cipher_decrypt_one(tfm, data + i, data + i); - - crc = cpu_to_le32(~crc32_le(~0, data, data_len)); - if (memcmp(&crc, data + data_len, WEP_ICV_LEN) != 0) - /* ICV mismatch */ - return -1; - - return 0; -} - - -/* Perform WEP decryption on given skb. Buffer includes whole WEP part of - * the frame: IV (4 bytes), encrypted payload (including SNAP header), - * ICV (4 bytes). skb->len includes both IV and ICV. - * - * Returns 0 if frame was decrypted successfully and ICV was correct and -1 on - * failure. If frame is OK, IV and ICV will be removed, i.e., decrypted payload - * is moved to the beginning of the skb and skb length will be reduced. - */ -static int ieee80211_wep_decrypt(struct ieee80211_local *local, - struct sk_buff *skb, - struct ieee80211_key *key) -{ - u32 klen; - u8 rc4key[3 + WLAN_KEY_LEN_WEP104]; - u8 keyidx; - struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data; - unsigned int hdrlen; - size_t len; - int ret = 0; - - if (!ieee80211_has_protected(hdr->frame_control)) - return -1; - - hdrlen = ieee80211_hdrlen(hdr->frame_control); - if (skb->len < hdrlen + WEP_IV_LEN + WEP_ICV_LEN) - return -1; - - len = skb->len - hdrlen - WEP_IV_LEN - WEP_ICV_LEN; - - keyidx = skb->data[hdrlen + 3] >> 6; - - if (!key || keyidx != key->conf.keyidx) - return -1; - - klen = 3 + key->conf.keylen; - - /* Prepend 24-bit IV to RC4 key */ - memcpy(rc4key, skb->data + hdrlen, 3); - - /* Copy rest of the WEP key (the secret part) */ - memcpy(rc4key + 3, key->conf.key, key->conf.keylen); - - if (ieee80211_wep_decrypt_data(local->wep_rx_tfm, rc4key, klen, - skb->data + hdrlen + WEP_IV_LEN, - len)) - ret = -1; - - /* Trim ICV */ - skb_trim(skb, skb->len - WEP_ICV_LEN); - - /* Remove IV */ - memmove(skb->data + WEP_IV_LEN, skb->data, hdrlen); - skb_pull(skb, WEP_IV_LEN); - - return ret; -} - - -static bool ieee80211_wep_is_weak_iv(struct sk_buff *skb, - struct ieee80211_key *key) -{ - struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data; - unsigned int hdrlen; - u8 *ivpos; - u32 iv; - - hdrlen = ieee80211_hdrlen(hdr->frame_control); - ivpos = skb->data + hdrlen; - iv = (ivpos[0] << 16) | (ivpos[1] << 8) | ivpos[2]; - - return ieee80211_wep_weak_iv(iv, key->conf.keylen); -} - -ieee80211_rx_result -ieee80211_crypto_wep_decrypt(struct ieee80211_rx_data *rx) -{ - struct sk_buff *skb = rx->skb; - struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb); - struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data; - __le16 fc = hdr->frame_control; - - if (!ieee80211_is_data(fc) && !ieee80211_is_auth(fc)) - return RX_CONTINUE; - - if (!(status->flag & RX_FLAG_DECRYPTED)) { - if (skb_linearize(rx->skb)) - return RX_DROP_UNUSABLE; - if (rx->sta && ieee80211_wep_is_weak_iv(rx->skb, rx->key)) - rx->sta->wep_weak_iv_count++; - if (ieee80211_wep_decrypt(rx->local, rx->skb, rx->key)) - return RX_DROP_UNUSABLE; - } else if (!(status->flag & RX_FLAG_IV_STRIPPED)) { - if (!pskb_may_pull(rx->skb, ieee80211_hdrlen(fc) + WEP_IV_LEN)) - return RX_DROP_UNUSABLE; - if (rx->sta && ieee80211_wep_is_weak_iv(rx->skb, rx->key)) - rx->sta->wep_weak_iv_count++; - ieee80211_wep_remove_iv(rx->local, rx->skb, rx->key); - /* remove ICV */ - if (pskb_trim(rx->skb, rx->skb->len - WEP_ICV_LEN)) - return RX_DROP_UNUSABLE; - } - - return RX_CONTINUE; -} - -static int wep_encrypt_skb(struct ieee80211_tx_data *tx, struct sk_buff *skb) -{ - struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb); - - if (!info->control.hw_key) { - if (ieee80211_wep_encrypt(tx->local, skb, tx->key->conf.key, - tx->key->conf.keylen, - tx->key->conf.keyidx)) - return -1; - } else if (info->control.hw_key->flags & - IEEE80211_KEY_FLAG_GENERATE_IV) { - if (!ieee80211_wep_add_iv(tx->local, skb, - tx->key->conf.keylen, - tx->key->conf.keyidx)) - return -1; - } - - return 0; -} - -ieee80211_tx_result -ieee80211_crypto_wep_encrypt(struct ieee80211_tx_data *tx) -{ - struct sk_buff *skb; - - ieee80211_tx_set_protected(tx); - - skb_queue_walk(&tx->skbs, skb) { - if (wep_encrypt_skb(tx, skb) < 0) { - I802_DEBUG_INC(tx->local->tx_handlers_drop_wep); - return TX_DROP; - } - } - - return TX_CONTINUE; -} diff --git a/openairITS/mac/DOT11/net/mac80211/wep.h b/openairITS/mac/DOT11/net/mac80211/wep.h deleted file mode 100644 index 9615749d1f..0000000000 --- a/openairITS/mac/DOT11/net/mac80211/wep.h +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Software WEP encryption implementation - * Copyright 2002, Jouni Malinen - * Copyright 2003, Instant802 Networks, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - */ - -#ifndef WEP_H -#define WEP_H - -#include -#include -#include "ieee80211_i.h" -#include "key.h" - -int ieee80211_wep_init(struct ieee80211_local *local); -void ieee80211_wep_free(struct ieee80211_local *local); -int ieee80211_wep_encrypt_data(struct crypto_cipher *tfm, u8 *rc4key, - size_t klen, u8 *data, size_t data_len); -int ieee80211_wep_encrypt(struct ieee80211_local *local, - struct sk_buff *skb, - const u8 *key, int keylen, int keyidx); -int ieee80211_wep_decrypt_data(struct crypto_cipher *tfm, u8 *rc4key, - size_t klen, u8 *data, size_t data_len); - -ieee80211_rx_result -ieee80211_crypto_wep_decrypt(struct ieee80211_rx_data *rx); -ieee80211_tx_result -ieee80211_crypto_wep_encrypt(struct ieee80211_tx_data *tx); - -#endif /* WEP_H */ diff --git a/openairITS/mac/DOT11/net/mac80211/wme.c b/openairITS/mac/DOT11/net/mac80211/wme.c deleted file mode 100644 index 3ba8b19fda..0000000000 --- a/openairITS/mac/DOT11/net/mac80211/wme.c +++ /dev/null @@ -1,193 +0,0 @@ -/* - * Copyright 2004, Instant802 Networks, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - */ - -#include -#include -#include -#include -#include -#include -#include - -#include -#include "ieee80211_i.h" -#include "wme.h" - -/* Default mapping in classifier to work with default - * queue setup. - */ -const int ieee802_1d_to_ac[8] = { - IEEE80211_AC_BE, - IEEE80211_AC_BK, - IEEE80211_AC_BK, - IEEE80211_AC_BE, - IEEE80211_AC_VI, - IEEE80211_AC_VI, - IEEE80211_AC_VO, - IEEE80211_AC_VO -}; - -static int wme_downgrade_ac(struct sk_buff *skb) -{ - switch (skb->priority) { - case 6: - case 7: - skb->priority = 5; /* VO -> VI */ - return 0; - case 4: - case 5: - skb->priority = 3; /* VI -> BE */ - return 0; - case 0: - case 3: - skb->priority = 2; /* BE -> BK */ - return 0; - default: - return -1; - } -} - -/* Indicate which queue to use for this fully formed 802.11 frame */ -u16 ieee80211_select_queue_80211(struct ieee80211_local *local, - struct sk_buff *skb, - struct ieee80211_hdr *hdr) -{ - u8 *p; - - if (local->hw.queues < 4) - return 0; - - if (!ieee80211_is_data(hdr->frame_control)) { - skb->priority = 7; - return ieee802_1d_to_ac[skb->priority]; - } - if (!ieee80211_is_data_qos(hdr->frame_control)) { - skb->priority = 0; - return ieee802_1d_to_ac[skb->priority]; - } - - p = ieee80211_get_qos_ctl(hdr); - skb->priority = *p & IEEE80211_QOS_CTL_TAG1D_MASK; - - return ieee80211_downgrade_queue(local, skb); -} - -/* Indicate which queue to use. */ -u16 ieee80211_select_queue(struct ieee80211_sub_if_data *sdata, - struct sk_buff *skb) -{ - struct ieee80211_local *local = sdata->local; - struct sta_info *sta = NULL; - const u8 *ra = NULL; - bool qos = false; - - if (local->hw.queues < 4 || skb->len < 6) { - skb->priority = 0; /* required for correct WPA/11i MIC */ - return min_t(u16, local->hw.queues - 1, IEEE80211_AC_BE); - } - - rcu_read_lock(); - switch (sdata->vif.type) { - case NL80211_IFTYPE_AP_VLAN: - sta = rcu_dereference(sdata->u.vlan.sta); - if (sta) { - qos = test_sta_flag(sta, WLAN_STA_WME); - break; - } - case NL80211_IFTYPE_AP: - ra = skb->data; - break; - case NL80211_IFTYPE_WDS: - ra = sdata->u.wds.remote_addr; - break; -#ifdef CONFIG_MAC80211_MESH - case NL80211_IFTYPE_MESH_POINT: - qos = true; - break; -#endif - case NL80211_IFTYPE_STATION: - ra = sdata->u.mgd.bssid; - break; - case NL80211_IFTYPE_ADHOC: - ra = skb->data; - break; - default: - break; - } - - if (!sta && ra && !is_multicast_ether_addr(ra)) { - sta = sta_info_get(sdata, ra); - if (sta) - qos = test_sta_flag(sta, WLAN_STA_WME); - } - rcu_read_unlock(); - - if (!qos) { - skb->priority = 0; /* required for correct WPA/11i MIC */ - return IEEE80211_AC_BE; - } - - /* use the data classifier to determine what 802.1d tag the - * data frame has */ - skb->priority = cfg80211_classify8021d(skb); - - return ieee80211_downgrade_queue(local, skb); -} - -u16 ieee80211_downgrade_queue(struct ieee80211_local *local, - struct sk_buff *skb) -{ - /* in case we are a client verify acm is not set for this ac */ - while (unlikely(local->wmm_acm & BIT(skb->priority))) { - if (wme_downgrade_ac(skb)) { - /* - * This should not really happen. The AP has marked all - * lower ACs to require admission control which is not - * a reasonable configuration. Allow the frame to be - * transmitted using AC_BK as a workaround. - */ - break; - } - } - - /* look up which queue to use for frames with this 1d tag */ - return ieee802_1d_to_ac[skb->priority]; -} - -void ieee80211_set_qos_hdr(struct ieee80211_sub_if_data *sdata, - struct sk_buff *skb) -{ - struct ieee80211_hdr *hdr = (void *)skb->data; - struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb); - -#ifdef CONFIG_MAC80211_VERBOSE_DEBUG - printk(KERN_DEBUG "-- -- ieee80211_set_qos_hdr \n"); -#endif - - /* Fill in the QoS header if there is one. */ - if (ieee80211_is_data_qos(hdr->frame_control)) { - u8 *p = ieee80211_get_qos_ctl(hdr); - u8 ack_policy, tid; - - tid = skb->priority & IEEE80211_QOS_CTL_TAG1D_MASK; - - /* preserve EOSP bit */ - ack_policy = *p & IEEE80211_QOS_CTL_EOSP; - - if (is_multicast_ether_addr(hdr->addr1) || - sdata->noack_map & BIT(tid)) { - ack_policy |= IEEE80211_QOS_CTL_ACK_POLICY_NOACK; - info->flags |= IEEE80211_TX_CTL_NO_ACK; - } - - /* qos header is 2 bytes */ - *p++ = ack_policy | tid; - *p = ieee80211_vif_is_mesh(&sdata->vif) ? - (IEEE80211_QOS_CTL_MESH_CONTROL_PRESENT >> 8) : 0; - } -} diff --git a/openairITS/mac/DOT11/net/mac80211/wme.h b/openairITS/mac/DOT11/net/mac80211/wme.h deleted file mode 100644 index 94edceb617..0000000000 --- a/openairITS/mac/DOT11/net/mac80211/wme.h +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright 2004, Instant802 Networks, Inc. - * Copyright 2005, Devicescape Software, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - */ - -#ifndef _WME_H -#define _WME_H - -#include -#include "ieee80211_i.h" - -extern const int ieee802_1d_to_ac[8]; - -u16 ieee80211_select_queue_80211(struct ieee80211_local *local, - struct sk_buff *skb, - struct ieee80211_hdr *hdr); -u16 ieee80211_select_queue(struct ieee80211_sub_if_data *sdata, - struct sk_buff *skb); -void ieee80211_set_qos_hdr(struct ieee80211_sub_if_data *sdata, - struct sk_buff *skb); -u16 ieee80211_downgrade_queue(struct ieee80211_local *local, - struct sk_buff *skb); - - -#endif /* _WME_H */ diff --git a/openairITS/mac/DOT11/net/mac80211/work.c b/openairITS/mac/DOT11/net/mac80211/work.c deleted file mode 100644 index c6e230efa0..0000000000 --- a/openairITS/mac/DOT11/net/mac80211/work.c +++ /dev/null @@ -1,373 +0,0 @@ -/* - * mac80211 work implementation - * - * Copyright 2003-2008, Jouni Malinen - * Copyright 2004, Instant802 Networks, Inc. - * Copyright 2005, Devicescape Software, Inc. - * Copyright 2006-2007 Jiri Benc - * Copyright 2007, Michael Wu - * Copyright 2009, Johannes Berg - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "ieee80211_i.h" -#include "rate.h" -#include "driver-ops.h" - -enum work_action { - WORK_ACT_NONE, - WORK_ACT_TIMEOUT, -}; - - -/* utils */ -static inline void ASSERT_WORK_MTX(struct ieee80211_local *local) -{ - lockdep_assert_held(&local->mtx); -} - -/* - * We can have multiple work items (and connection probing) - * scheduling this timer, but we need to take care to only - * reschedule it when it should fire _earlier_ than it was - * asked for before, or if it's not pending right now. This - * function ensures that. Note that it then is required to - * run this function for all timeouts after the first one - * has happened -- the work that runs from this timer will - * do that. - */ -static void run_again(struct ieee80211_local *local, - unsigned long timeout) -{ - ASSERT_WORK_MTX(local); - - if (!timer_pending(&local->work_timer) || - time_before(timeout, local->work_timer.expires)) - mod_timer(&local->work_timer, timeout); -} - -void free_work(struct ieee80211_work *wk) -{ - kfree_rcu(wk, rcu_head); -} - -static enum work_action __must_check -ieee80211_remain_on_channel_timeout(struct ieee80211_work *wk) -{ - /* - * First time we run, do nothing -- the generic code will - * have switched to the right channel etc. - */ - if (!wk->started) { - wk->timeout = jiffies + msecs_to_jiffies(wk->remain.duration); - - cfg80211_ready_on_channel(wk->sdata->dev, (unsigned long) wk, - wk->chan, wk->chan_type, - wk->remain.duration, GFP_KERNEL); - - return WORK_ACT_NONE; - } - - return WORK_ACT_TIMEOUT; -} - -static enum work_action __must_check -ieee80211_offchannel_tx(struct ieee80211_work *wk) -{ - if (!wk->started) { - wk->timeout = jiffies + msecs_to_jiffies(wk->offchan_tx.wait); - - /* - * After this, offchan_tx.frame remains but now is no - * longer a valid pointer -- we still need it as the - * cookie for canceling this work/status matching. - */ - ieee80211_tx_skb(wk->sdata, wk->offchan_tx.frame); - - return WORK_ACT_NONE; - } - - return WORK_ACT_TIMEOUT; -} - -static void ieee80211_work_timer(unsigned long data) -{ - struct ieee80211_local *local = (void *) data; - - if (local->quiescing) - return; - - ieee80211_queue_work(&local->hw, &local->work_work); -} - -static void ieee80211_work_work(struct work_struct *work) -{ - struct ieee80211_local *local = - container_of(work, struct ieee80211_local, work_work); - struct ieee80211_work *wk, *tmp; - LIST_HEAD(free_work); - enum work_action rma; - bool remain_off_channel = false; - - if (local->scanning) - return; - - /* - * ieee80211_queue_work() should have picked up most cases, - * here we'll pick the rest. - */ - if (WARN(local->suspended, "work scheduled while going to suspend\n")) - return; - - mutex_lock(&local->mtx); - - ieee80211_recalc_idle(local); - - list_for_each_entry_safe(wk, tmp, &local->work_list, list) { - bool started = wk->started; - - /* mark work as started if it's on the current off-channel */ - if (!started && local->tmp_channel && - wk->chan == local->tmp_channel && - wk->chan_type == local->tmp_channel_type) { - started = true; - wk->timeout = jiffies; - } - - if (!started && !local->tmp_channel) { - ieee80211_offchannel_stop_vifs(local, true); - - local->tmp_channel = wk->chan; - local->tmp_channel_type = wk->chan_type; - - ieee80211_hw_config(local, 0); - - started = true; - wk->timeout = jiffies; - } - - /* don't try to work with items that aren't started */ - if (!started) - continue; - - if (time_is_after_jiffies(wk->timeout)) { - /* - * This work item isn't supposed to be worked on - * right now, but take care to adjust the timer - * properly. - */ - run_again(local, wk->timeout); - continue; - } - - switch (wk->type) { - default: - WARN_ON(1); - /* nothing */ - rma = WORK_ACT_NONE; - break; - case IEEE80211_WORK_ABORT: - rma = WORK_ACT_TIMEOUT; - break; - case IEEE80211_WORK_REMAIN_ON_CHANNEL: - rma = ieee80211_remain_on_channel_timeout(wk); - break; - case IEEE80211_WORK_OFFCHANNEL_TX: - rma = ieee80211_offchannel_tx(wk); - break; - } - - wk->started = started; - - switch (rma) { - case WORK_ACT_NONE: - /* might have changed the timeout */ - run_again(local, wk->timeout); - break; - case WORK_ACT_TIMEOUT: - list_del_rcu(&wk->list); - synchronize_rcu(); - list_add(&wk->list, &free_work); - break; - default: - WARN(1, "unexpected: %d", rma); - } - } - - list_for_each_entry(wk, &local->work_list, list) { - if (!wk->started) - continue; - if (wk->chan != local->tmp_channel || - wk->chan_type != local->tmp_channel_type) - continue; - remain_off_channel = true; - } - - if (!remain_off_channel && local->tmp_channel) { - local->tmp_channel = NULL; - ieee80211_hw_config(local, 0); - - ieee80211_offchannel_return(local, true); - - /* give connection some time to breathe */ - run_again(local, jiffies + HZ/2); - } - - if (list_empty(&local->work_list) && local->scan_req && - !local->scanning) - ieee80211_queue_delayed_work(&local->hw, - &local->scan_work, - round_jiffies_relative(0)); - - ieee80211_recalc_idle(local); - - mutex_unlock(&local->mtx); - - list_for_each_entry_safe(wk, tmp, &free_work, list) { - wk->done(wk, NULL); - list_del(&wk->list); - kfree(wk); - } -} - -void ieee80211_add_work(struct ieee80211_work *wk) -{ - struct ieee80211_local *local; - - if (WARN_ON(!wk->chan)) - return; - - if (WARN_ON(!wk->sdata)) - return; - - if (WARN_ON(!wk->done)) - return; - - if (WARN_ON(!ieee80211_sdata_running(wk->sdata))) - return; - - wk->started = false; - - local = wk->sdata->local; - mutex_lock(&local->mtx); - list_add_tail(&wk->list, &local->work_list); - mutex_unlock(&local->mtx); - - ieee80211_queue_work(&local->hw, &local->work_work); -} - -void ieee80211_work_init(struct ieee80211_local *local) -{ - INIT_LIST_HEAD(&local->work_list); - setup_timer(&local->work_timer, ieee80211_work_timer, - (unsigned long)local); - INIT_WORK(&local->work_work, ieee80211_work_work); -} - -void ieee80211_work_purge(struct ieee80211_sub_if_data *sdata) -{ - struct ieee80211_local *local = sdata->local; - struct ieee80211_work *wk; - bool cleanup = false; - - mutex_lock(&local->mtx); - list_for_each_entry(wk, &local->work_list, list) { - if (wk->sdata != sdata) - continue; - cleanup = true; - wk->type = IEEE80211_WORK_ABORT; - wk->started = true; - wk->timeout = jiffies; - } - mutex_unlock(&local->mtx); - - /* run cleanups etc. */ - if (cleanup) - ieee80211_work_work(&local->work_work); - - mutex_lock(&local->mtx); - list_for_each_entry(wk, &local->work_list, list) { - if (wk->sdata != sdata) - continue; - WARN_ON(1); - break; - } - mutex_unlock(&local->mtx); -} - -static enum work_done_result ieee80211_remain_done(struct ieee80211_work *wk, - struct sk_buff *skb) -{ - /* - * We are done serving the remain-on-channel command. - */ - cfg80211_remain_on_channel_expired(wk->sdata->dev, (unsigned long) wk, - wk->chan, wk->chan_type, - GFP_KERNEL); - - return WORK_DONE_DESTROY; -} - -int ieee80211_wk_remain_on_channel(struct ieee80211_sub_if_data *sdata, - struct ieee80211_channel *chan, - enum nl80211_channel_type channel_type, - unsigned int duration, u64 *cookie) -{ - struct ieee80211_work *wk; - - wk = kzalloc(sizeof(*wk), GFP_KERNEL); - if (!wk) - return -ENOMEM; - - wk->type = IEEE80211_WORK_REMAIN_ON_CHANNEL; - wk->chan = chan; - wk->chan_type = channel_type; - wk->sdata = sdata; - wk->done = ieee80211_remain_done; - - wk->remain.duration = duration; - - *cookie = (unsigned long) wk; - - ieee80211_add_work(wk); - - return 0; -} - -int ieee80211_wk_cancel_remain_on_channel(struct ieee80211_sub_if_data *sdata, - u64 cookie) -{ - struct ieee80211_local *local = sdata->local; - struct ieee80211_work *wk, *tmp; - bool found = false; - - mutex_lock(&local->mtx); - list_for_each_entry_safe(wk, tmp, &local->work_list, list) { - if ((unsigned long) wk == cookie) { - wk->timeout = jiffies; - found = true; - break; - } - } - mutex_unlock(&local->mtx); - - if (!found) - return -ENOENT; - - ieee80211_queue_work(&local->hw, &local->work_work); - - return 0; -} diff --git a/openairITS/mac/DOT11/net/mac80211/wpa.c b/openairITS/mac/DOT11/net/mac80211/wpa.c deleted file mode 100644 index 0ae23c6096..0000000000 --- a/openairITS/mac/DOT11/net/mac80211/wpa.c +++ /dev/null @@ -1,684 +0,0 @@ -/* - * Copyright 2002-2004, Instant802 Networks, Inc. - * Copyright 2008, Jouni Malinen - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "ieee80211_i.h" -#include "michael.h" -#include "tkip.h" -#include "aes_ccm.h" -#include "aes_cmac.h" -#include "wpa.h" - -ieee80211_tx_result -ieee80211_tx_h_michael_mic_add(struct ieee80211_tx_data *tx) -{ - u8 *data, *key, *mic; - size_t data_len; - unsigned int hdrlen; - struct ieee80211_hdr *hdr; - struct sk_buff *skb = tx->skb; - struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb); - int tail; - - hdr = (struct ieee80211_hdr *)skb->data; - if (!tx->key || tx->key->conf.cipher != WLAN_CIPHER_SUITE_TKIP || - skb->len < 24 || !ieee80211_is_data_present(hdr->frame_control)) - return TX_CONTINUE; - - hdrlen = ieee80211_hdrlen(hdr->frame_control); - if (skb->len < hdrlen) - return TX_DROP; - - data = skb->data + hdrlen; - data_len = skb->len - hdrlen; - - if (unlikely(info->flags & IEEE80211_TX_INTFL_TKIP_MIC_FAILURE)) { - /* Need to use software crypto for the test */ - info->control.hw_key = NULL; - } - - if (info->control.hw_key && - (info->flags & IEEE80211_TX_CTL_DONTFRAG || - tx->local->ops->set_frag_threshold) && - !(tx->key->conf.flags & IEEE80211_KEY_FLAG_GENERATE_MMIC)) { - /* hwaccel - with no need for SW-generated MMIC */ - return TX_CONTINUE; - } - - tail = MICHAEL_MIC_LEN; - if (!info->control.hw_key) - tail += TKIP_ICV_LEN; - - if (WARN_ON(skb_tailroom(skb) < tail || - skb_headroom(skb) < TKIP_IV_LEN)) - return TX_DROP; - - key = &tx->key->conf.key[NL80211_TKIP_DATA_OFFSET_TX_MIC_KEY]; - mic = skb_put(skb, MICHAEL_MIC_LEN); - michael_mic(key, hdr, data, data_len, mic); - if (unlikely(info->flags & IEEE80211_TX_INTFL_TKIP_MIC_FAILURE)) - mic[0]++; - - return TX_CONTINUE; -} - - -ieee80211_rx_result -ieee80211_rx_h_michael_mic_verify(struct ieee80211_rx_data *rx) -{ - u8 *data, *key = NULL; - size_t data_len; - unsigned int hdrlen; - u8 mic[MICHAEL_MIC_LEN]; - struct sk_buff *skb = rx->skb; - struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb); - struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data; - - /* - * it makes no sense to check for MIC errors on anything other - * than data frames. - */ - if (!ieee80211_is_data_present(hdr->frame_control)) - return RX_CONTINUE; - - /* - * No way to verify the MIC if the hardware stripped it or - * the IV with the key index. In this case we have solely rely - * on the driver to set RX_FLAG_MMIC_ERROR in the event of a - * MIC failure report. - */ - if (status->flag & (RX_FLAG_MMIC_STRIPPED | RX_FLAG_IV_STRIPPED)) { - if (status->flag & RX_FLAG_MMIC_ERROR) - goto mic_fail; - - if (!(status->flag & RX_FLAG_IV_STRIPPED) && rx->key) - goto update_iv; - - return RX_CONTINUE; - } - - /* - * Some hardware seems to generate Michael MIC failure reports; even - * though, the frame was not encrypted with TKIP and therefore has no - * MIC. Ignore the flag them to avoid triggering countermeasures. - */ - if (!rx->key || rx->key->conf.cipher != WLAN_CIPHER_SUITE_TKIP || - !(status->flag & RX_FLAG_DECRYPTED)) - return RX_CONTINUE; - - if (rx->sdata->vif.type == NL80211_IFTYPE_AP && rx->key->conf.keyidx) { - /* - * APs with pairwise keys should never receive Michael MIC - * errors for non-zero keyidx because these are reserved for - * group keys and only the AP is sending real multicast - * frames in the BSS. ( - */ - return RX_DROP_UNUSABLE; - } - - if (status->flag & RX_FLAG_MMIC_ERROR) - goto mic_fail; - - hdrlen = ieee80211_hdrlen(hdr->frame_control); - if (skb->len < hdrlen + MICHAEL_MIC_LEN) - return RX_DROP_UNUSABLE; - - if (skb_linearize(rx->skb)) - return RX_DROP_UNUSABLE; - hdr = (void *)skb->data; - - data = skb->data + hdrlen; - data_len = skb->len - hdrlen - MICHAEL_MIC_LEN; - key = &rx->key->conf.key[NL80211_TKIP_DATA_OFFSET_RX_MIC_KEY]; - michael_mic(key, hdr, data, data_len, mic); - if (memcmp(mic, data + data_len, MICHAEL_MIC_LEN) != 0) - goto mic_fail; - - /* remove Michael MIC from payload */ - skb_trim(skb, skb->len - MICHAEL_MIC_LEN); - -update_iv: - /* update IV in key information to be able to detect replays */ - rx->key->u.tkip.rx[rx->security_idx].iv32 = rx->tkip_iv32; - rx->key->u.tkip.rx[rx->security_idx].iv16 = rx->tkip_iv16; - - return RX_CONTINUE; - -mic_fail: - /* - * In some cases the key can be unset - e.g. a multicast packet, in - * a driver that supports HW encryption. Send up the key idx only if - * the key is set. - */ - mac80211_ev_michael_mic_failure(rx->sdata, - rx->key ? rx->key->conf.keyidx : -1, - (void *) skb->data, NULL, GFP_ATOMIC); - return RX_DROP_UNUSABLE; -} - - -static int tkip_encrypt_skb(struct ieee80211_tx_data *tx, struct sk_buff *skb) -{ - struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) skb->data; - struct ieee80211_key *key = tx->key; - struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb); - unsigned long flags; - unsigned int hdrlen; - int len, tail; - u8 *pos; - - if (info->control.hw_key && - !(info->control.hw_key->flags & IEEE80211_KEY_FLAG_GENERATE_IV)) { - /* hwaccel - with no need for software-generated IV */ - return 0; - } - - hdrlen = ieee80211_hdrlen(hdr->frame_control); - len = skb->len - hdrlen; - - if (info->control.hw_key) - tail = 0; - else - tail = TKIP_ICV_LEN; - - if (WARN_ON(skb_tailroom(skb) < tail || - skb_headroom(skb) < TKIP_IV_LEN)) - return -1; - - pos = skb_push(skb, TKIP_IV_LEN); - memmove(pos, pos + TKIP_IV_LEN, hdrlen); - pos += hdrlen; - - /* Increase IV for the frame */ - spin_lock_irqsave(&key->u.tkip.txlock, flags); - key->u.tkip.tx.iv16++; - if (key->u.tkip.tx.iv16 == 0) - key->u.tkip.tx.iv32++; - pos = ieee80211_tkip_add_iv(pos, key); - spin_unlock_irqrestore(&key->u.tkip.txlock, flags); - - /* hwaccel - with software IV */ - if (info->control.hw_key) - return 0; - - /* Add room for ICV */ - skb_put(skb, TKIP_ICV_LEN); - - return ieee80211_tkip_encrypt_data(tx->local->wep_tx_tfm, - key, skb, pos, len); -} - - -ieee80211_tx_result -ieee80211_crypto_tkip_encrypt(struct ieee80211_tx_data *tx) -{ - struct sk_buff *skb; - - ieee80211_tx_set_protected(tx); - - skb_queue_walk(&tx->skbs, skb) { - if (tkip_encrypt_skb(tx, skb) < 0) - return TX_DROP; - } - - return TX_CONTINUE; -} - - -ieee80211_rx_result -ieee80211_crypto_tkip_decrypt(struct ieee80211_rx_data *rx) -{ - struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) rx->skb->data; - int hdrlen, res, hwaccel = 0; - struct ieee80211_key *key = rx->key; - struct sk_buff *skb = rx->skb; - struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb); - - hdrlen = ieee80211_hdrlen(hdr->frame_control); - - if (!ieee80211_is_data(hdr->frame_control)) - return RX_CONTINUE; - - if (!rx->sta || skb->len - hdrlen < 12) - return RX_DROP_UNUSABLE; - - /* it may be possible to optimize this a bit more */ - if (skb_linearize(rx->skb)) - return RX_DROP_UNUSABLE; - hdr = (void *)skb->data; - - /* - * Let TKIP code verify IV, but skip decryption. - * In the case where hardware checks the IV as well, - * we don't even get here, see ieee80211_rx_h_decrypt() - */ - if (status->flag & RX_FLAG_DECRYPTED) - hwaccel = 1; - - res = ieee80211_tkip_decrypt_data(rx->local->wep_rx_tfm, - key, skb->data + hdrlen, - skb->len - hdrlen, rx->sta->sta.addr, - hdr->addr1, hwaccel, rx->security_idx, - &rx->tkip_iv32, - &rx->tkip_iv16); - if (res != TKIP_DECRYPT_OK) - return RX_DROP_UNUSABLE; - - /* Trim ICV */ - skb_trim(skb, skb->len - TKIP_ICV_LEN); - - /* Remove IV */ - memmove(skb->data + TKIP_IV_LEN, skb->data, hdrlen); - skb_pull(skb, TKIP_IV_LEN); - - return RX_CONTINUE; -} - - -static void ccmp_special_blocks(struct sk_buff *skb, u8 *pn, u8 *scratch, - int encrypted) -{ - __le16 mask_fc; - int a4_included, mgmt; - u8 qos_tid; - u8 *b_0, *aad; - u16 data_len, len_a; - unsigned int hdrlen; - struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data; - - memset(scratch, 0, 6 * AES_BLOCK_SIZE); - - b_0 = scratch + 3 * AES_BLOCK_SIZE; - aad = scratch + 4 * AES_BLOCK_SIZE; - - /* - * Mask FC: zero subtype b4 b5 b6 (if not mgmt) - * Retry, PwrMgt, MoreData; set Protected - */ - mgmt = ieee80211_is_mgmt(hdr->frame_control); - mask_fc = hdr->frame_control; - mask_fc &= ~cpu_to_le16(IEEE80211_FCTL_RETRY | - IEEE80211_FCTL_PM | IEEE80211_FCTL_MOREDATA); - if (!mgmt) - mask_fc &= ~cpu_to_le16(0x0070); - mask_fc |= cpu_to_le16(IEEE80211_FCTL_PROTECTED); - - hdrlen = ieee80211_hdrlen(hdr->frame_control); - len_a = hdrlen - 2; - a4_included = ieee80211_has_a4(hdr->frame_control); - - if (ieee80211_is_data_qos(hdr->frame_control)) - qos_tid = *ieee80211_get_qos_ctl(hdr) & IEEE80211_QOS_CTL_TID_MASK; - else - qos_tid = 0; - - data_len = skb->len - hdrlen - CCMP_HDR_LEN; - if (encrypted) - data_len -= CCMP_MIC_LEN; - - /* First block, b_0 */ - b_0[0] = 0x59; /* flags: Adata: 1, M: 011, L: 001 */ - /* Nonce: Nonce Flags | A2 | PN - * Nonce Flags: Priority (b0..b3) | Management (b4) | Reserved (b5..b7) - */ - b_0[1] = qos_tid | (mgmt << 4); - memcpy(&b_0[2], hdr->addr2, ETH_ALEN); - memcpy(&b_0[8], pn, CCMP_PN_LEN); - /* l(m) */ - put_unaligned_be16(data_len, &b_0[14]); - - /* AAD (extra authenticate-only data) / masked 802.11 header - * FC | A1 | A2 | A3 | SC | [A4] | [QC] */ - put_unaligned_be16(len_a, &aad[0]); - put_unaligned(mask_fc, (__le16 *)&aad[2]); - memcpy(&aad[4], &hdr->addr1, 3 * ETH_ALEN); - - /* Mask Seq#, leave Frag# */ - aad[22] = *((u8 *) &hdr->seq_ctrl) & 0x0f; - aad[23] = 0; - - if (a4_included) { - memcpy(&aad[24], hdr->addr4, ETH_ALEN); - aad[30] = qos_tid; - aad[31] = 0; - } else { - memset(&aad[24], 0, ETH_ALEN + IEEE80211_QOS_CTL_LEN); - aad[24] = qos_tid; - } -} - - -static inline void ccmp_pn2hdr(u8 *hdr, u8 *pn, int key_id) -{ - hdr[0] = pn[5]; - hdr[1] = pn[4]; - hdr[2] = 0; - hdr[3] = 0x20 | (key_id << 6); - hdr[4] = pn[3]; - hdr[5] = pn[2]; - hdr[6] = pn[1]; - hdr[7] = pn[0]; -} - - -static inline void ccmp_hdr2pn(u8 *pn, u8 *hdr) -{ - pn[0] = hdr[7]; - pn[1] = hdr[6]; - pn[2] = hdr[5]; - pn[3] = hdr[4]; - pn[4] = hdr[1]; - pn[5] = hdr[0]; -} - - -static int ccmp_encrypt_skb(struct ieee80211_tx_data *tx, struct sk_buff *skb) -{ - struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) skb->data; - struct ieee80211_key *key = tx->key; - struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb); - int hdrlen, len, tail; - u8 *pos; - u8 pn[6]; - u64 pn64; - u8 scratch[6 * AES_BLOCK_SIZE]; - - if (info->control.hw_key && - !(info->control.hw_key->flags & IEEE80211_KEY_FLAG_GENERATE_IV) && - !(info->control.hw_key->flags & IEEE80211_KEY_FLAG_PUT_IV_SPACE)) { - /* - * hwaccel has no need for preallocated room for CCMP - * header or MIC fields - */ - return 0; - } - - hdrlen = ieee80211_hdrlen(hdr->frame_control); - len = skb->len - hdrlen; - - if (info->control.hw_key) - tail = 0; - else - tail = CCMP_MIC_LEN; - - if (WARN_ON(skb_tailroom(skb) < tail || - skb_headroom(skb) < CCMP_HDR_LEN)) - return -1; - - pos = skb_push(skb, CCMP_HDR_LEN); - memmove(pos, pos + CCMP_HDR_LEN, hdrlen); - - /* the HW only needs room for the IV, but not the actual IV */ - if (info->control.hw_key && - (info->control.hw_key->flags & IEEE80211_KEY_FLAG_PUT_IV_SPACE)) - return 0; - - hdr = (struct ieee80211_hdr *) pos; - pos += hdrlen; - - pn64 = atomic64_inc_return(&key->u.ccmp.tx_pn); - - pn[5] = pn64; - pn[4] = pn64 >> 8; - pn[3] = pn64 >> 16; - pn[2] = pn64 >> 24; - pn[1] = pn64 >> 32; - pn[0] = pn64 >> 40; - - ccmp_pn2hdr(pos, pn, key->conf.keyidx); - - /* hwaccel - with software CCMP header */ - if (info->control.hw_key) - return 0; - - pos += CCMP_HDR_LEN; - ccmp_special_blocks(skb, pn, scratch, 0); - ieee80211_aes_ccm_encrypt(key->u.ccmp.tfm, scratch, pos, len, - pos, skb_put(skb, CCMP_MIC_LEN)); - - return 0; -} - - -ieee80211_tx_result -ieee80211_crypto_ccmp_encrypt(struct ieee80211_tx_data *tx) -{ - struct sk_buff *skb; - - ieee80211_tx_set_protected(tx); - - skb_queue_walk(&tx->skbs, skb) { - if (ccmp_encrypt_skb(tx, skb) < 0) - return TX_DROP; - } - - return TX_CONTINUE; -} - - -ieee80211_rx_result -ieee80211_crypto_ccmp_decrypt(struct ieee80211_rx_data *rx) -{ - struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)rx->skb->data; - int hdrlen; - struct ieee80211_key *key = rx->key; - struct sk_buff *skb = rx->skb; - struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb); - u8 pn[CCMP_PN_LEN]; - int data_len; - int queue; - - hdrlen = ieee80211_hdrlen(hdr->frame_control); - - if (!ieee80211_is_data(hdr->frame_control) && - !ieee80211_is_robust_mgmt_frame(hdr)) - return RX_CONTINUE; - - data_len = skb->len - hdrlen - CCMP_HDR_LEN - CCMP_MIC_LEN; - if (!rx->sta || data_len < 0) - return RX_DROP_UNUSABLE; - - if (status->flag & RX_FLAG_DECRYPTED) { - if (!pskb_may_pull(rx->skb, hdrlen + CCMP_HDR_LEN)) - return RX_DROP_UNUSABLE; - } else { - if (skb_linearize(rx->skb)) - return RX_DROP_UNUSABLE; - } - - ccmp_hdr2pn(pn, skb->data + hdrlen); - - queue = rx->security_idx; - - if (memcmp(pn, key->u.ccmp.rx_pn[queue], CCMP_PN_LEN) <= 0) { - key->u.ccmp.replays++; - return RX_DROP_UNUSABLE; - } - - if (!(status->flag & RX_FLAG_DECRYPTED)) { - u8 scratch[6 * AES_BLOCK_SIZE]; - /* hardware didn't decrypt/verify MIC */ - ccmp_special_blocks(skb, pn, scratch, 1); - - if (ieee80211_aes_ccm_decrypt( - key->u.ccmp.tfm, scratch, - skb->data + hdrlen + CCMP_HDR_LEN, data_len, - skb->data + skb->len - CCMP_MIC_LEN, - skb->data + hdrlen + CCMP_HDR_LEN)) - return RX_DROP_UNUSABLE; - } - - memcpy(key->u.ccmp.rx_pn[queue], pn, CCMP_PN_LEN); - - /* Remove CCMP header and MIC */ - if (pskb_trim(skb, skb->len - CCMP_MIC_LEN)) - return RX_DROP_UNUSABLE; - memmove(skb->data + CCMP_HDR_LEN, skb->data, hdrlen); - skb_pull(skb, CCMP_HDR_LEN); - - return RX_CONTINUE; -} - - -static void bip_aad(struct sk_buff *skb, u8 *aad) -{ - /* BIP AAD: FC(masked) || A1 || A2 || A3 */ - - /* FC type/subtype */ - aad[0] = skb->data[0]; - /* Mask FC Retry, PwrMgt, MoreData flags to zero */ - aad[1] = skb->data[1] & ~(BIT(4) | BIT(5) | BIT(6)); - /* A1 || A2 || A3 */ - memcpy(aad + 2, skb->data + 4, 3 * ETH_ALEN); -} - - -static inline void bip_ipn_set64(u8 *d, u64 pn) -{ - *d++ = pn; - *d++ = pn >> 8; - *d++ = pn >> 16; - *d++ = pn >> 24; - *d++ = pn >> 32; - *d = pn >> 40; -} - -static inline void bip_ipn_swap(u8 *d, const u8 *s) -{ - *d++ = s[5]; - *d++ = s[4]; - *d++ = s[3]; - *d++ = s[2]; - *d++ = s[1]; - *d = s[0]; -} - - -ieee80211_tx_result -ieee80211_crypto_aes_cmac_encrypt(struct ieee80211_tx_data *tx) -{ - struct sk_buff *skb; - struct ieee80211_tx_info *info; - struct ieee80211_key *key = tx->key; - struct ieee80211_mmie *mmie; - u8 aad[20]; - u64 pn64; - - if (WARN_ON(skb_queue_len(&tx->skbs) != 1)) - return TX_DROP; - - skb = skb_peek(&tx->skbs); - - info = IEEE80211_SKB_CB(skb); - - if (info->control.hw_key) - return TX_CONTINUE; - - if (WARN_ON(skb_tailroom(skb) < sizeof(*mmie))) - return TX_DROP; - - mmie = (struct ieee80211_mmie *) skb_put(skb, sizeof(*mmie)); - mmie->element_id = WLAN_EID_MMIE; - mmie->length = sizeof(*mmie) - 2; - mmie->key_id = cpu_to_le16(key->conf.keyidx); - - /* PN = PN + 1 */ - pn64 = atomic64_inc_return(&key->u.aes_cmac.tx_pn); - - bip_ipn_set64(mmie->sequence_number, pn64); - - bip_aad(skb, aad); - - /* - * MIC = AES-128-CMAC(IGTK, AAD || Management Frame Body || MMIE, 64) - */ - ieee80211_aes_cmac(key->u.aes_cmac.tfm, aad, - skb->data + 24, skb->len - 24, mmie->mic); - - return TX_CONTINUE; -} - - -ieee80211_rx_result -ieee80211_crypto_aes_cmac_decrypt(struct ieee80211_rx_data *rx) -{ - struct sk_buff *skb = rx->skb; - struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb); - struct ieee80211_key *key = rx->key; - struct ieee80211_mmie *mmie; - u8 aad[20], mic[8], ipn[6]; - struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) skb->data; - - if (!ieee80211_is_mgmt(hdr->frame_control)) - return RX_CONTINUE; - - /* management frames are already linear */ - - if (skb->len < 24 + sizeof(*mmie)) - return RX_DROP_UNUSABLE; - - mmie = (struct ieee80211_mmie *) - (skb->data + skb->len - sizeof(*mmie)); - if (mmie->element_id != WLAN_EID_MMIE || - mmie->length != sizeof(*mmie) - 2) - return RX_DROP_UNUSABLE; /* Invalid MMIE */ - - bip_ipn_swap(ipn, mmie->sequence_number); - - if (memcmp(ipn, key->u.aes_cmac.rx_pn, 6) <= 0) { - key->u.aes_cmac.replays++; - return RX_DROP_UNUSABLE; - } - - if (!(status->flag & RX_FLAG_DECRYPTED)) { - /* hardware didn't decrypt/verify MIC */ - bip_aad(skb, aad); - ieee80211_aes_cmac(key->u.aes_cmac.tfm, aad, - skb->data + 24, skb->len - 24, mic); - if (memcmp(mic, mmie->mic, sizeof(mmie->mic)) != 0) { - key->u.aes_cmac.icverrors++; - return RX_DROP_UNUSABLE; - } - } - - memcpy(key->u.aes_cmac.rx_pn, ipn, 6); - - /* Remove MMIE */ - skb_trim(skb, skb->len - sizeof(*mmie)); - - return RX_CONTINUE; -} - -ieee80211_tx_result -ieee80211_crypto_hw_encrypt(struct ieee80211_tx_data *tx) -{ - struct sk_buff *skb; - struct ieee80211_tx_info *info = NULL; - - skb_queue_walk(&tx->skbs, skb) { - info = IEEE80211_SKB_CB(skb); - - /* handle hw-only algorithm */ - if (!info->control.hw_key) - return TX_DROP; - } - - ieee80211_tx_set_protected(tx); - - return TX_CONTINUE; -} diff --git a/openairITS/mac/DOT11/net/mac80211/wpa.h b/openairITS/mac/DOT11/net/mac80211/wpa.h deleted file mode 100644 index 07e33f899c..0000000000 --- a/openairITS/mac/DOT11/net/mac80211/wpa.h +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright 2002-2004, Instant802 Networks, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - */ - -#ifndef WPA_H -#define WPA_H - -#include -#include -#include "ieee80211_i.h" - -ieee80211_tx_result -ieee80211_tx_h_michael_mic_add(struct ieee80211_tx_data *tx); -ieee80211_rx_result -ieee80211_rx_h_michael_mic_verify(struct ieee80211_rx_data *rx); - -ieee80211_tx_result -ieee80211_crypto_tkip_encrypt(struct ieee80211_tx_data *tx); -ieee80211_rx_result -ieee80211_crypto_tkip_decrypt(struct ieee80211_rx_data *rx); - -ieee80211_tx_result -ieee80211_crypto_ccmp_encrypt(struct ieee80211_tx_data *tx); -ieee80211_rx_result -ieee80211_crypto_ccmp_decrypt(struct ieee80211_rx_data *rx); - -ieee80211_tx_result -ieee80211_crypto_aes_cmac_encrypt(struct ieee80211_tx_data *tx); -ieee80211_rx_result -ieee80211_crypto_aes_cmac_decrypt(struct ieee80211_rx_data *rx); -ieee80211_tx_result -ieee80211_crypto_hw_encrypt(struct ieee80211_tx_data *tx); - -#endif /* WPA_H */ diff --git a/openairITS/mac/DOT11/net/wireless/Makefile b/openairITS/mac/DOT11/net/wireless/Makefile deleted file mode 100644 index 2e7ed5e408..0000000000 --- a/openairITS/mac/DOT11/net/wireless/Makefile +++ /dev/null @@ -1,42 +0,0 @@ -ifdef MAC -obj-$(CONFIG_CFG80211) += cfg80211.o -#obj-$(CONFIG_LIB80211) += lib80211.o -#obj-$(CONFIG_LIB80211_CRYPT_WEP) += lib80211_crypt_wep.o -#obj-$(CONFIG_LIB80211_CRYPT_CCMP) += lib80211_crypt_ccmp.o -#obj-$(CONFIG_LIB80211_CRYPT_TKIP) += lib80211_crypt_tkip.o - -cfg80211-y += core.o sysfs.o radiotap.o util.o reg.o scan.o nl80211.o -cfg80211-y += mlme.o ibss.o sme.o chan.o ethtool.o mesh.o -cfg80211-$(CONFIG_CFG80211_DEBUGFS) += debugfs.o -cfg80211-$(CONFIG_CFG80211_WEXT) += wext-compat.o wext-sme.o -cfg80211-$(CONFIG_CFG80211_INTERNAL_REGDB) += regdb.o - -ccflags-y += -D__CHECK_ENDIAN__ - -$(obj)/regdb.c: $(src)/db.txt $(src)/genregdb.awk - @$(AWK) -f $(src)/genregdb.awk < $< > $@ - -clean-files := regdb.c -endif - -ifdef ALL -obj-$(CONFIG_CFG80211) += cfg80211.o -obj-$(CONFIG_LIB80211) += lib80211.o -obj-$(CONFIG_LIB80211_CRYPT_WEP) += lib80211_crypt_wep.o -obj-$(CONFIG_LIB80211_CRYPT_CCMP) += lib80211_crypt_ccmp.o -obj-$(CONFIG_LIB80211_CRYPT_TKIP) += lib80211_crypt_tkip.o - -cfg80211-y += core.o sysfs.o radiotap.o util.o reg.o scan.o nl80211.o -cfg80211-y += mlme.o ibss.o sme.o chan.o ethtool.o mesh.o -cfg80211-$(CONFIG_CFG80211_DEBUGFS) += debugfs.o -cfg80211-$(CONFIG_CFG80211_WEXT) += wext-compat.o wext-sme.o -cfg80211-$(CONFIG_CFG80211_INTERNAL_REGDB) += regdb.o - -ccflags-y += -D__CHECK_ENDIAN__ - -$(obj)/regdb.c: $(src)/db.txt $(src)/genregdb.awk - @$(AWK) -f $(src)/genregdb.awk < $< > $@ - -clean-files := regdb.c -endif - diff --git a/openairITS/mac/DOT11/net/wireless/chan.c b/openairITS/mac/DOT11/net/wireless/chan.c deleted file mode 100644 index 2fcfe0993c..0000000000 --- a/openairITS/mac/DOT11/net/wireless/chan.c +++ /dev/null @@ -1,137 +0,0 @@ -/* - * This file contains helper code to handle channel - * settings and keeping track of what is possible at - * any point in time. - * - * Copyright 2009 Johannes Berg - */ - -#include -#include -#include "core.h" - -struct ieee80211_channel * -rdev_freq_to_chan(struct cfg80211_registered_device *rdev, - int freq, enum nl80211_channel_type channel_type) -{ - struct ieee80211_channel *chan; - struct ieee80211_sta_ht_cap *ht_cap; - - chan = ieee80211_get_channel(&rdev->wiphy, freq); - - /* Primary channel not allowed */ - if (!chan || chan->flags & IEEE80211_CHAN_DISABLED) - return NULL; - - if (channel_type == NL80211_CHAN_HT40MINUS && - chan->flags & IEEE80211_CHAN_NO_HT40MINUS) - return NULL; - else if (channel_type == NL80211_CHAN_HT40PLUS && - chan->flags & IEEE80211_CHAN_NO_HT40PLUS) - return NULL; - - ht_cap = &rdev->wiphy.bands[chan->band]->ht_cap; - - if (channel_type != NL80211_CHAN_NO_HT) { - if (!ht_cap->ht_supported) - return NULL; - - if (channel_type != NL80211_CHAN_HT20 && - (!(ht_cap->cap & IEEE80211_HT_CAP_SUP_WIDTH_20_40) || - ht_cap->cap & IEEE80211_HT_CAP_40MHZ_INTOLERANT)) - return NULL; - } - - return chan; -} - -int cfg80211_can_beacon_sec_chan(struct wiphy *wiphy, - struct ieee80211_channel *chan, - enum nl80211_channel_type channel_type) -{ - struct ieee80211_channel *sec_chan; - int diff; - - switch (channel_type) { - case NL80211_CHAN_HT40PLUS: - diff = 20; - break; - case NL80211_CHAN_HT40MINUS: - diff = -20; - break; - default: - return false; - } - - sec_chan = ieee80211_get_channel(wiphy, chan->center_freq + diff); - if (!sec_chan) - return false; - - /* we'll need a DFS capability later */ - if (sec_chan->flags & (IEEE80211_CHAN_DISABLED | - IEEE80211_CHAN_PASSIVE_SCAN | - IEEE80211_CHAN_NO_IBSS | - IEEE80211_CHAN_RADAR)) - return false; - - return true; -} -EXPORT_SYMBOL(cfg80211_can_beacon_sec_chan); - -int cfg80211_set_freq(struct cfg80211_registered_device *rdev, - struct wireless_dev *wdev, int freq, - enum nl80211_channel_type channel_type) -{ - struct ieee80211_channel *chan; - int result; - - if (wdev && wdev->iftype == NL80211_IFTYPE_MONITOR) - wdev = NULL; - - if (wdev) { - ASSERT_WDEV_LOCK(wdev); - - if (!netif_running(wdev->netdev)) - return -ENETDOWN; - } - - if (!rdev->ops->set_channel) - return -EOPNOTSUPP; - - chan = rdev_freq_to_chan(rdev, freq, channel_type); - if (!chan) - return -EINVAL; - - /* Both channels should be able to initiate communication */ - if (wdev && (wdev->iftype == NL80211_IFTYPE_ADHOC || - wdev->iftype == NL80211_IFTYPE_AP || - wdev->iftype == NL80211_IFTYPE_AP_VLAN || - wdev->iftype == NL80211_IFTYPE_MESH_POINT || - wdev->iftype == NL80211_IFTYPE_P2P_GO)) { - switch (channel_type) { - case NL80211_CHAN_HT40PLUS: - case NL80211_CHAN_HT40MINUS: - if (!cfg80211_can_beacon_sec_chan(&rdev->wiphy, chan, - channel_type)) { - printk(KERN_DEBUG - "cfg80211: Secondary channel not " - "allowed to initiate communication\n"); - return -EINVAL; - } - break; - default: - break; - } - } - - result = rdev->ops->set_channel(&rdev->wiphy, - wdev ? wdev->netdev : NULL, - chan, channel_type); - if (result) - return result; - - if (wdev) - wdev->channel = chan; - - return 0; -} diff --git a/openairITS/mac/DOT11/net/wireless/core.c b/openairITS/mac/DOT11/net/wireless/core.c deleted file mode 100644 index ba21a0136b..0000000000 --- a/openairITS/mac/DOT11/net/wireless/core.c +++ /dev/null @@ -1,1107 +0,0 @@ -/* - * This is the linux wireless configuration interface. - * - * Copyright 2006-2010 Johannes Berg - */ - -#undef pr_fmt -#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "nl80211.h" -#include "core.h" -#include "sysfs.h" -#include "debugfs.h" -#include "wext-compat.h" -#include "ethtool.h" - -/* name for sysfs, %d is appended */ -#define PHY_NAME "phy" - -MODULE_AUTHOR("Johannes Berg"); -MODULE_LICENSE("GPL"); -MODULE_DESCRIPTION("wireless configuration support"); - -/* RCU-protected (and cfg80211_mutex for writers) */ -LIST_HEAD(cfg80211_rdev_list); -int cfg80211_rdev_list_generation; - -DEFINE_MUTEX(cfg80211_mutex); - -/* for debugfs */ -static struct dentry *ieee80211_debugfs_dir; - -/* for the cleanup, scan and event works */ -struct workqueue_struct *cfg80211_wq; - -static bool cfg80211_disable_40mhz_24ghz; -module_param(cfg80211_disable_40mhz_24ghz, bool, 0644); -MODULE_PARM_DESC(cfg80211_disable_40mhz_24ghz, - "Disable 40MHz support in the 2.4GHz band"); - -/* requires cfg80211_mutex to be held! */ -struct cfg80211_registered_device *cfg80211_rdev_by_wiphy_idx(int wiphy_idx) -{ - struct cfg80211_registered_device *result = NULL, *rdev; - - if (!wiphy_idx_valid(wiphy_idx)) - return NULL; - - assert_cfg80211_lock(); - - list_for_each_entry(rdev, &cfg80211_rdev_list, list) { - if (rdev->wiphy_idx == wiphy_idx) { - result = rdev; - break; - } - } - - return result; -} - -int get_wiphy_idx(struct wiphy *wiphy) -{ - struct cfg80211_registered_device *rdev; - if (!wiphy) - return WIPHY_IDX_STALE; - rdev = wiphy_to_dev(wiphy); - return rdev->wiphy_idx; -} - -/* requires cfg80211_rdev_mutex to be held! */ -struct wiphy *wiphy_idx_to_wiphy(int wiphy_idx) -{ - struct cfg80211_registered_device *rdev; - - if (!wiphy_idx_valid(wiphy_idx)) - return NULL; - - assert_cfg80211_lock(); - - rdev = cfg80211_rdev_by_wiphy_idx(wiphy_idx); - if (!rdev) - return NULL; - return &rdev->wiphy; -} - -/* requires cfg80211_mutex to be held! */ -struct cfg80211_registered_device * -__cfg80211_rdev_from_info(struct genl_info *info) -{ - int ifindex; - struct cfg80211_registered_device *bywiphyidx = NULL, *byifidx = NULL; - struct net_device *dev; - int err = -EINVAL; - - assert_cfg80211_lock(); - - if (info->attrs[NL80211_ATTR_WIPHY]) { - bywiphyidx = cfg80211_rdev_by_wiphy_idx( - nla_get_u32(info->attrs[NL80211_ATTR_WIPHY])); - err = -ENODEV; - } - - if (info->attrs[NL80211_ATTR_IFINDEX]) { - ifindex = nla_get_u32(info->attrs[NL80211_ATTR_IFINDEX]); - dev = dev_get_by_index(genl_info_net(info), ifindex); - if (dev) { - if (dev->ieee80211_ptr) - byifidx = - wiphy_to_dev(dev->ieee80211_ptr->wiphy); - dev_put(dev); - } - err = -ENODEV; - } - - if (bywiphyidx && byifidx) { - if (bywiphyidx != byifidx) - return ERR_PTR(-EINVAL); - else - return bywiphyidx; /* == byifidx */ - } - if (bywiphyidx) - return bywiphyidx; - - if (byifidx) - return byifidx; - - return ERR_PTR(err); -} - -struct cfg80211_registered_device * -cfg80211_get_dev_from_info(struct genl_info *info) -{ - struct cfg80211_registered_device *rdev; - - mutex_lock(&cfg80211_mutex); - rdev = __cfg80211_rdev_from_info(info); - - /* if it is not an error we grab the lock on - * it to assure it won't be going away while - * we operate on it */ - if (!IS_ERR(rdev)) - mutex_lock(&rdev->mtx); - - mutex_unlock(&cfg80211_mutex); - - return rdev; -} - -struct cfg80211_registered_device * -cfg80211_get_dev_from_ifindex(struct net *net, int ifindex) -{ - struct cfg80211_registered_device *rdev = ERR_PTR(-ENODEV); - struct net_device *dev; - - mutex_lock(&cfg80211_mutex); - dev = dev_get_by_index(net, ifindex); - if (!dev) - goto out; - if (dev->ieee80211_ptr) { - rdev = wiphy_to_dev(dev->ieee80211_ptr->wiphy); - mutex_lock(&rdev->mtx); - } else - rdev = ERR_PTR(-ENODEV); - dev_put(dev); - out: - mutex_unlock(&cfg80211_mutex); - return rdev; -} - -/* requires cfg80211_mutex to be held */ -int cfg80211_dev_rename(struct cfg80211_registered_device *rdev, - char *newname) -{ - struct cfg80211_registered_device *rdev2; - int wiphy_idx, taken = -1, result, digits; - - assert_cfg80211_lock(); - - /* prohibit calling the thing phy%d when %d is not its number */ - sscanf(newname, PHY_NAME "%d%n", &wiphy_idx, &taken); - if (taken == strlen(newname) && wiphy_idx != rdev->wiphy_idx) { - /* count number of places needed to print wiphy_idx */ - digits = 1; - while (wiphy_idx /= 10) - digits++; - /* - * deny the name if it is phy where is printed - * without leading zeroes. taken == strlen(newname) here - */ - if (taken == strlen(PHY_NAME) + digits) - return -EINVAL; - } - - - /* Ignore nop renames */ - if (strcmp(newname, dev_name(&rdev->wiphy.dev)) == 0) - return 0; - - /* Ensure another device does not already have this name. */ - list_for_each_entry(rdev2, &cfg80211_rdev_list, list) - if (strcmp(newname, dev_name(&rdev2->wiphy.dev)) == 0) - return -EINVAL; - - result = device_rename(&rdev->wiphy.dev, newname); - if (result) - return result; - - if (rdev->wiphy.debugfsdir && - !debugfs_rename(rdev->wiphy.debugfsdir->d_parent, - rdev->wiphy.debugfsdir, - rdev->wiphy.debugfsdir->d_parent, - newname)) - pr_err("failed to rename debugfs dir to %s!\n", newname); - - nl80211_notify_dev_rename(rdev); - - return 0; -} - -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24)) -int cfg80211_switch_netns(struct cfg80211_registered_device *rdev, - struct net *net) -{ - struct wireless_dev *wdev; - int err = 0; - - if (!(rdev->wiphy.flags & WIPHY_FLAG_NETNS_OK)) - return -EOPNOTSUPP; - - list_for_each_entry(wdev, &rdev->netdev_list, list) { - wdev->netdev->features &= ~NETIF_F_NETNS_LOCAL; - err = dev_change_net_namespace(wdev->netdev, net, "wlan%d"); - if (err) - break; - wdev->netdev->features |= NETIF_F_NETNS_LOCAL; - } - - if (err) { - /* failed -- clean up to old netns */ - net = wiphy_net(&rdev->wiphy); - - list_for_each_entry_continue_reverse(wdev, &rdev->netdev_list, - list) { - wdev->netdev->features &= ~NETIF_F_NETNS_LOCAL; - err = dev_change_net_namespace(wdev->netdev, net, - "wlan%d"); - WARN_ON(err); - wdev->netdev->features |= NETIF_F_NETNS_LOCAL; - } - - return err; - } - - wiphy_net_set(&rdev->wiphy, net); - - err = device_rename(&rdev->wiphy.dev, dev_name(&rdev->wiphy.dev)); - WARN_ON(err); - - return 0; -} -#endif - -static void cfg80211_rfkill_poll(struct rfkill *rfkill, void *data) -{ - struct cfg80211_registered_device *rdev = data; - - rdev->ops->rfkill_poll(&rdev->wiphy); -} - -static int cfg80211_rfkill_set_block(void *data, bool blocked) -{ - struct cfg80211_registered_device *rdev = data; - struct wireless_dev *wdev; - - if (!blocked) - return 0; - - rtnl_lock(); - mutex_lock(&rdev->devlist_mtx); - - list_for_each_entry(wdev, &rdev->netdev_list, list) - dev_close(wdev->netdev); - - mutex_unlock(&rdev->devlist_mtx); - rtnl_unlock(); - - return 0; -} - -static void cfg80211_rfkill_sync_work(struct work_struct *work) -{ - struct cfg80211_registered_device *rdev; - - rdev = container_of(work, struct cfg80211_registered_device, rfkill_sync); - cfg80211_rfkill_set_block(rdev, rfkill_blocked(rdev->rfkill)); -} - -static void cfg80211_event_work(struct work_struct *work) -{ - struct cfg80211_registered_device *rdev; - - rdev = container_of(work, struct cfg80211_registered_device, - event_work); - - rtnl_lock(); - cfg80211_lock_rdev(rdev); - - cfg80211_process_rdev_events(rdev); - cfg80211_unlock_rdev(rdev); - rtnl_unlock(); -} - -/* exported functions */ - -struct wiphy *wiphy_new(const struct cfg80211_ops *ops, int sizeof_priv) -{ - static int wiphy_counter; - - struct cfg80211_registered_device *rdev; - int alloc_size; - - /* - * Make sure the padding is >= the rest of the struct so that we - * always keep it large enough to pad out the entire original - * kernel's struct. We really only need to make sure it's larger - * than the kernel compat is compiled against, but since it'll - * only increase in size make sure it's larger than the current - * version of it. Subtract since it's included. - */ - BUILD_BUG_ON(WIPHY_COMPAT_PAD_SIZE < - sizeof(struct wiphy) - WIPHY_COMPAT_PAD_SIZE); - - WARN_ON(ops->add_key && (!ops->del_key || !ops->set_default_key)); - WARN_ON(ops->auth && (!ops->assoc || !ops->deauth || !ops->disassoc)); - WARN_ON(ops->connect && !ops->disconnect); - WARN_ON(ops->join_ibss && !ops->leave_ibss); - WARN_ON(ops->add_virtual_intf && !ops->del_virtual_intf); - WARN_ON(ops->add_station && !ops->del_station); - WARN_ON(ops->add_mpath && !ops->del_mpath); - WARN_ON(ops->join_mesh && !ops->leave_mesh); - - alloc_size = sizeof(*rdev) + sizeof_priv; - - rdev = kzalloc(alloc_size, GFP_KERNEL); - if (!rdev) - return NULL; - - rdev->ops = ops; - - mutex_lock(&cfg80211_mutex); - - rdev->wiphy_idx = wiphy_counter++; - - if (unlikely(!wiphy_idx_valid(rdev->wiphy_idx))) { - wiphy_counter--; - mutex_unlock(&cfg80211_mutex); - /* ugh, wrapped! */ - kfree(rdev); - return NULL; - } - - mutex_unlock(&cfg80211_mutex); - - /* give it a proper name */ - dev_set_name(&rdev->wiphy.dev, PHY_NAME "%d", rdev->wiphy_idx); - - mutex_init(&rdev->mtx); - mutex_init(&rdev->devlist_mtx); - mutex_init(&rdev->sched_scan_mtx); - INIT_LIST_HEAD(&rdev->netdev_list); - spin_lock_init(&rdev->bss_lock); - INIT_LIST_HEAD(&rdev->bss_list); - INIT_WORK(&rdev->scan_done_wk, __cfg80211_scan_done); - INIT_WORK(&rdev->sched_scan_results_wk, __cfg80211_sched_scan_results); - device_initialize(&rdev->wiphy.dev); - rdev->wiphy.dev.class = &ieee80211_class; - rdev->wiphy.dev.platform_data = rdev; - -#ifdef CONFIG_CFG80211_DEFAULT_PS - rdev->wiphy.flags |= WIPHY_FLAG_PS_ON_BY_DEFAULT; -#endif - -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24)) - wiphy_net_set(&rdev->wiphy, &init_net); -#endif - - rdev->rfkill_ops.set_block = cfg80211_rfkill_set_block; - rdev->rfkill = rfkill_alloc(dev_name(&rdev->wiphy.dev), - &rdev->wiphy.dev, RFKILL_TYPE_WLAN, - &rdev->rfkill_ops, rdev); - - if (!rdev->rfkill) { - kfree(rdev); - return NULL; - } - - INIT_WORK(&rdev->rfkill_sync, cfg80211_rfkill_sync_work); - INIT_WORK(&rdev->conn_work, cfg80211_conn_work); - INIT_WORK(&rdev->event_work, cfg80211_event_work); - - init_waitqueue_head(&rdev->dev_wait); - - /* - * Initialize wiphy parameters to IEEE 802.11 MIB default values. - * Fragmentation and RTS threshold are disabled by default with the - * special -1 value. - */ - rdev->wiphy.retry_short = 7; - rdev->wiphy.retry_long = 4; - rdev->wiphy.frag_threshold = (u32) -1; - rdev->wiphy.rts_threshold = (u32) -1; - rdev->wiphy.coverage_class = 0; - - return &rdev->wiphy; -} -EXPORT_SYMBOL(wiphy_new); - -static int wiphy_verify_combinations(struct wiphy *wiphy) -{ - const struct ieee80211_iface_combination *c; - int i, j; - - /* If we have combinations enforce them */ - if (wiphy->n_iface_combinations) - wiphy->flags |= WIPHY_FLAG_ENFORCE_COMBINATIONS; - - for (i = 0; i < wiphy->n_iface_combinations; i++) { - u32 cnt = 0; - u16 all_iftypes = 0; - - c = &wiphy->iface_combinations[i]; - - /* Combinations with just one interface aren't real */ - if (WARN_ON(c->max_interfaces < 2)) - return -EINVAL; - - /* Need at least one channel */ - if (WARN_ON(!c->num_different_channels)) - return -EINVAL; - - if (WARN_ON(!c->n_limits)) - return -EINVAL; - - for (j = 0; j < c->n_limits; j++) { - u16 types = c->limits[j].types; - - /* - * interface types shouldn't overlap, this is - * used in cfg80211_can_change_interface() - */ - if (WARN_ON(types & all_iftypes)) - return -EINVAL; - all_iftypes |= types; - - if (WARN_ON(!c->limits[j].max)) - return -EINVAL; - - /* Shouldn't list software iftypes in combinations! */ - if (WARN_ON(wiphy->software_iftypes & types)) - return -EINVAL; - - cnt += c->limits[j].max; - /* - * Don't advertise an unsupported type - * in a combination. - */ - if (WARN_ON((wiphy->interface_modes & types) != types)) - return -EINVAL; - } - - /* You can't even choose that many! */ - if (WARN_ON(cnt < c->max_interfaces)) - return -EINVAL; - } - - return 0; -} - -int wiphy_register(struct wiphy *wiphy) -{ - struct cfg80211_registered_device *rdev = wiphy_to_dev(wiphy); - int res; - enum ieee80211_band band; - struct ieee80211_supported_band *sband; - bool have_band = false; - int i; - u16 ifmodes = wiphy->interface_modes; - - if (WARN_ON((wiphy->wowlan.flags & WIPHY_WOWLAN_GTK_REKEY_FAILURE) && - !(wiphy->wowlan.flags & WIPHY_WOWLAN_SUPPORTS_GTK_REKEY))) - return -EINVAL; - - if (WARN_ON(wiphy->ap_sme_capa && - !(wiphy->flags & WIPHY_FLAG_HAVE_AP_SME))) - return -EINVAL; - - if (WARN_ON(wiphy->addresses && !wiphy->n_addresses)) - return -EINVAL; - - if (WARN_ON(wiphy->addresses && - !is_zero_ether_addr(wiphy->perm_addr) && - memcmp(wiphy->perm_addr, wiphy->addresses[0].addr, - ETH_ALEN))) - return -EINVAL; - - if (wiphy->addresses) - memcpy(wiphy->perm_addr, wiphy->addresses[0].addr, ETH_ALEN); - - /* sanity check ifmodes */ - WARN_ON(!ifmodes); - ifmodes &= ((1 << NUM_NL80211_IFTYPES) - 1) & ~1; - if (WARN_ON(ifmodes != wiphy->interface_modes)) - wiphy->interface_modes = ifmodes; - - res = wiphy_verify_combinations(wiphy); - if (res) - return res; - - /* sanity check supported bands/channels */ - for (band = 0; band < IEEE80211_NUM_BANDS; band++) { - sband = wiphy->bands[band]; - if (!sband) - continue; - - sband->band = band; - - if (WARN_ON(!sband->n_channels || !sband->n_bitrates)) - return -EINVAL; - - /* - * Since cfg80211_disable_40mhz_24ghz is global, we can - * modify the sband's ht data even if the driver uses a - * global structure for that. - */ - if (cfg80211_disable_40mhz_24ghz && - band == IEEE80211_BAND_2GHZ && - sband->ht_cap.ht_supported) { - sband->ht_cap.cap &= ~IEEE80211_HT_CAP_SUP_WIDTH_20_40; - sband->ht_cap.cap &= ~IEEE80211_HT_CAP_SGI_40; - } - - /* - * Since we use a u32 for rate bitmaps in - * ieee80211_get_response_rate, we cannot - * have more than 32 legacy rates. - */ - if (WARN_ON(sband->n_bitrates > 32)) - return -EINVAL; - - for (i = 0; i < sband->n_channels; i++) { - sband->channels[i].orig_flags = - sband->channels[i].flags; - sband->channels[i].orig_mag = - sband->channels[i].max_antenna_gain; - sband->channels[i].orig_mpwr = - sband->channels[i].max_power; - sband->channels[i].band = band; - } - - have_band = true; - } - - if (!have_band) { - WARN_ON(1); - return -EINVAL; - } - - if (rdev->wiphy.wowlan.n_patterns) { - if (WARN_ON(!rdev->wiphy.wowlan.pattern_min_len || - rdev->wiphy.wowlan.pattern_min_len > - rdev->wiphy.wowlan.pattern_max_len)) - return -EINVAL; - } - - /* check and set up bitrates */ - ieee80211_set_bitrate_flags(wiphy); - - mutex_lock(&cfg80211_mutex); - - res = device_add(&rdev->wiphy.dev); - if (res) { - mutex_unlock(&cfg80211_mutex); - return res; - } - - /* set up regulatory info */ - regulatory_update(wiphy, NL80211_REGDOM_SET_BY_CORE); - - list_add_rcu(&rdev->list, &cfg80211_rdev_list); - cfg80211_rdev_list_generation++; - - /* add to debugfs */ - rdev->wiphy.debugfsdir = - debugfs_create_dir(wiphy_name(&rdev->wiphy), - ieee80211_debugfs_dir); - if (IS_ERR(rdev->wiphy.debugfsdir)) - rdev->wiphy.debugfsdir = NULL; - - if (wiphy->flags & WIPHY_FLAG_CUSTOM_REGULATORY) { - struct regulatory_request request; - - request.wiphy_idx = get_wiphy_idx(wiphy); - request.initiator = NL80211_REGDOM_SET_BY_DRIVER; - request.alpha2[0] = '9'; - request.alpha2[1] = '9'; - - nl80211_send_reg_change_event(&request); - } - - cfg80211_debugfs_rdev_add(rdev); - mutex_unlock(&cfg80211_mutex); - - /* - * due to a locking dependency this has to be outside of the - * cfg80211_mutex lock - */ - res = rfkill_register(rdev->rfkill); - if (res) - goto out_rm_dev; - - rtnl_lock(); - rdev->wiphy.registered = true; - rtnl_unlock(); - return 0; - -out_rm_dev: - device_del(&rdev->wiphy.dev); - return res; -} -EXPORT_SYMBOL(wiphy_register); - -void wiphy_rfkill_start_polling(struct wiphy *wiphy) -{ - struct cfg80211_registered_device *rdev = wiphy_to_dev(wiphy); - - if (!rdev->ops->rfkill_poll) - return; - rdev->rfkill_ops.poll = cfg80211_rfkill_poll; - rfkill_resume_polling(rdev->rfkill); -} -EXPORT_SYMBOL(wiphy_rfkill_start_polling); - -void wiphy_rfkill_stop_polling(struct wiphy *wiphy) -{ - struct cfg80211_registered_device *rdev = wiphy_to_dev(wiphy); - - rfkill_pause_polling(rdev->rfkill); -} -EXPORT_SYMBOL(wiphy_rfkill_stop_polling); - -void wiphy_unregister(struct wiphy *wiphy) -{ - struct cfg80211_registered_device *rdev = wiphy_to_dev(wiphy); - - rtnl_lock(); - rdev->wiphy.registered = false; - rtnl_unlock(); - - rfkill_unregister(rdev->rfkill); - - /* protect the device list */ - mutex_lock(&cfg80211_mutex); - - wait_event(rdev->dev_wait, ({ - int __count; - mutex_lock(&rdev->devlist_mtx); - __count = rdev->opencount; - mutex_unlock(&rdev->devlist_mtx); - __count == 0;})); - - mutex_lock(&rdev->devlist_mtx); - BUG_ON(!list_empty(&rdev->netdev_list)); - mutex_unlock(&rdev->devlist_mtx); - - /* - * First remove the hardware from everywhere, this makes - * it impossible to find from userspace. - */ - debugfs_remove_recursive(rdev->wiphy.debugfsdir); - list_del_rcu(&rdev->list); - synchronize_rcu(); - - /* - * Try to grab rdev->mtx. If a command is still in progress, - * hopefully the driver will refuse it since it's tearing - * down the device already. We wait for this command to complete - * before unlinking the item from the list. - * Note: as codified by the BUG_ON above we cannot get here if - * a virtual interface is still present. Hence, we can only get - * to lock contention here if userspace issues a command that - * identified the hardware by wiphy index. - */ - cfg80211_lock_rdev(rdev); - /* nothing */ - cfg80211_unlock_rdev(rdev); - - /* If this device got a regulatory hint tell core its - * free to listen now to a new shiny device regulatory hint */ - reg_device_remove(wiphy); - - cfg80211_rdev_list_generation++; - device_del(&rdev->wiphy.dev); - - mutex_unlock(&cfg80211_mutex); - - flush_work(&rdev->scan_done_wk); - cancel_work_sync(&rdev->conn_work); - flush_work(&rdev->event_work); -} -EXPORT_SYMBOL(wiphy_unregister); - -void cfg80211_dev_free(struct cfg80211_registered_device *rdev) -{ - struct cfg80211_internal_bss *scan, *tmp; - rfkill_destroy(rdev->rfkill); - mutex_destroy(&rdev->mtx); - mutex_destroy(&rdev->devlist_mtx); - mutex_destroy(&rdev->sched_scan_mtx); - list_for_each_entry_safe(scan, tmp, &rdev->bss_list, list) - cfg80211_put_bss(&scan->pub); - cfg80211_rdev_free_wowlan(rdev); - kfree(rdev); -} - -void wiphy_free(struct wiphy *wiphy) -{ - put_device(&wiphy->dev); -} -EXPORT_SYMBOL(wiphy_free); - -void wiphy_rfkill_set_hw_state(struct wiphy *wiphy, bool blocked) -{ - struct cfg80211_registered_device *rdev = wiphy_to_dev(wiphy); - - if (rfkill_set_hw_state(rdev->rfkill, blocked)) - schedule_work(&rdev->rfkill_sync); -} -EXPORT_SYMBOL(wiphy_rfkill_set_hw_state); - -static void wdev_cleanup_work(struct work_struct *work) -{ - struct wireless_dev *wdev; - struct cfg80211_registered_device *rdev; - - wdev = container_of(work, struct wireless_dev, cleanup_work); - rdev = wiphy_to_dev(wdev->wiphy); - - cfg80211_lock_rdev(rdev); - - if (WARN_ON(rdev->scan_req && rdev->scan_req->dev == wdev->netdev)) { - rdev->scan_req->aborted = true; - ___cfg80211_scan_done(rdev, true); - } - - cfg80211_unlock_rdev(rdev); - - mutex_lock(&rdev->sched_scan_mtx); - - if (WARN_ON(rdev->sched_scan_req && - rdev->sched_scan_req->dev == wdev->netdev)) { - __cfg80211_stop_sched_scan(rdev, false); - } - - mutex_unlock(&rdev->sched_scan_mtx); - - mutex_lock(&rdev->devlist_mtx); - rdev->opencount--; - mutex_unlock(&rdev->devlist_mtx); - wake_up(&rdev->dev_wait); - - dev_put(wdev->netdev); -} - -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,32)) -static struct device_type wiphy_type = { - .name = "wlan", -}; -#endif - -static int cfg80211_netdev_notifier_call(struct notifier_block * nb, - unsigned long state, - void *ndev) -{ - struct net_device *dev = ndev; - struct wireless_dev *wdev = dev->ieee80211_ptr; - struct cfg80211_registered_device *rdev; - int ret; - - if (!wdev) - return NOTIFY_DONE; - - rdev = wiphy_to_dev(wdev->wiphy); - - WARN_ON(wdev->iftype == NL80211_IFTYPE_UNSPECIFIED); - - switch (state) { - case NETDEV_POST_INIT: - SET_NETDEV_DEVTYPE(dev, &wiphy_type); - break; - case NETDEV_REGISTER: - /* - * NB: cannot take rdev->mtx here because this may be - * called within code protected by it when interfaces - * are added with nl80211. - */ - mutex_init(&wdev->mtx); - INIT_WORK(&wdev->cleanup_work, wdev_cleanup_work); - INIT_LIST_HEAD(&wdev->event_list); - spin_lock_init(&wdev->event_lock); - INIT_LIST_HEAD(&wdev->mgmt_registrations); - spin_lock_init(&wdev->mgmt_registrations_lock); - - mutex_lock(&rdev->devlist_mtx); - list_add_rcu(&wdev->list, &rdev->netdev_list); - rdev->devlist_generation++; -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24)) - /* can only change netns with wiphy */ - dev->features |= NETIF_F_NETNS_LOCAL; -#endif - - if (sysfs_create_link(&dev->dev.kobj, &rdev->wiphy.dev.kobj, - "phy80211")) { - pr_err("failed to add phy80211 symlink to netdev!\n"); - } - wdev->netdev = dev; - wdev->sme_state = CFG80211_SME_IDLE; - mutex_unlock(&rdev->devlist_mtx); -#ifdef CONFIG_CFG80211_WEXT -#ifdef CONFIG_WIRELESS_EXT - if (!dev->wireless_handlers) - dev->wireless_handlers = &cfg80211_wext_handler; -#else - printk_once(KERN_WARNING "cfg80211: wext will not work because " - "kernel was compiled with CONFIG_WIRELESS_EXT=n. " - "Tools using wext interface, like iwconfig will " - "not work.\n"); -#endif - wdev->wext.default_key = -1; - wdev->wext.default_mgmt_key = -1; - wdev->wext.connect.auth_type = NL80211_AUTHTYPE_AUTOMATIC; -#endif - - if (wdev->wiphy->flags & WIPHY_FLAG_PS_ON_BY_DEFAULT) - wdev->ps = true; - else - wdev->ps = false; - /* allow mac80211 to determine the timeout */ - wdev->ps_timeout = -1; - - if (!dev->ethtool_ops) - dev->ethtool_ops = &cfg80211_ethtool_ops; - - if ((wdev->iftype == NL80211_IFTYPE_STATION || - wdev->iftype == NL80211_IFTYPE_P2P_CLIENT || - wdev->iftype == NL80211_IFTYPE_ADHOC) && !wdev->use_4addr) - dev->priv_flags |= IFF_DONT_BRIDGE; - break; - case NETDEV_GOING_DOWN: - switch (wdev->iftype) { - case NL80211_IFTYPE_ADHOC: - cfg80211_leave_ibss(rdev, dev, true); - break; - case NL80211_IFTYPE_P2P_CLIENT: - case NL80211_IFTYPE_STATION: - mutex_lock(&rdev->sched_scan_mtx); - __cfg80211_stop_sched_scan(rdev, false); - mutex_unlock(&rdev->sched_scan_mtx); - - wdev_lock(wdev); -#ifdef CONFIG_CFG80211_WEXT - kfree(wdev->wext.ie); - wdev->wext.ie = NULL; - wdev->wext.ie_len = 0; - wdev->wext.connect.auth_type = NL80211_AUTHTYPE_AUTOMATIC; -#endif - __cfg80211_disconnect(rdev, dev, - WLAN_REASON_DEAUTH_LEAVING, true); - cfg80211_mlme_down(rdev, dev); - wdev_unlock(wdev); - break; - case NL80211_IFTYPE_MESH_POINT: - cfg80211_leave_mesh(rdev, dev); - break; - default: - break; - } - wdev->beacon_interval = 0; - break; - case NETDEV_DOWN: - dev_hold(dev); - queue_work(cfg80211_wq, &wdev->cleanup_work); - break; - case NETDEV_UP: - /* - * If we have a really quick DOWN/UP succession we may - * have this work still pending ... cancel it and see - * if it was pending, in which case we need to account - * for some of the work it would have done. - */ - if (cancel_work_sync(&wdev->cleanup_work)) { - mutex_lock(&rdev->devlist_mtx); - rdev->opencount--; - mutex_unlock(&rdev->devlist_mtx); - dev_put(dev); - } - cfg80211_lock_rdev(rdev); - mutex_lock(&rdev->devlist_mtx); - wdev_lock(wdev); - switch (wdev->iftype) { -#ifdef CONFIG_CFG80211_WEXT - case NL80211_IFTYPE_ADHOC: - cfg80211_ibss_wext_join(rdev, wdev); - break; - case NL80211_IFTYPE_STATION: - cfg80211_mgd_wext_connect(rdev, wdev); - break; -#endif -#ifdef CONFIG_MAC80211_MESH - case NL80211_IFTYPE_MESH_POINT: - { - /* backward compat code... */ - struct mesh_setup setup; - memcpy(&setup, &default_mesh_setup, - sizeof(setup)); - /* back compat only needed for mesh_id */ - setup.mesh_id = wdev->ssid; - setup.mesh_id_len = wdev->mesh_id_up_len; - if (wdev->mesh_id_up_len) - __cfg80211_join_mesh(rdev, dev, - &setup, - &default_mesh_config); - break; - } -#endif - default: - break; - } - wdev_unlock(wdev); - rdev->opencount++; - mutex_unlock(&rdev->devlist_mtx); - cfg80211_unlock_rdev(rdev); - - /* - * Configure power management to the driver here so that its - * correctly set also after interface type changes etc. - */ - if ((wdev->iftype == NL80211_IFTYPE_STATION || - wdev->iftype == NL80211_IFTYPE_P2P_CLIENT) && - rdev->ops->set_power_mgmt) - if (rdev->ops->set_power_mgmt(wdev->wiphy, dev, - wdev->ps, - wdev->ps_timeout)) { - /* assume this means it's off */ - wdev->ps = false; - } - break; - case NETDEV_UNREGISTER: - /* - * NB: cannot take rdev->mtx here because this may be - * called within code protected by it when interfaces - * are removed with nl80211. - */ - mutex_lock(&rdev->devlist_mtx); - /* - * It is possible to get NETDEV_UNREGISTER - * multiple times. To detect that, check - * that the interface is still on the list - * of registered interfaces, and only then - * remove and clean it up. - */ - if (!list_empty(&wdev->list)) { - sysfs_remove_link(&dev->dev.kobj, "phy80211"); - list_del_rcu(&wdev->list); - rdev->devlist_generation++; - cfg80211_mlme_purge_registrations(wdev); -#ifdef CONFIG_CFG80211_WEXT - kfree(wdev->wext.keys); -#endif - } - mutex_unlock(&rdev->devlist_mtx); - /* - * synchronise (so that we won't find this netdev - * from other code any more) and then clear the list - * head so that the above code can safely check for - * !list_empty() to avoid double-cleanup. - */ - synchronize_rcu(); - INIT_LIST_HEAD(&wdev->list); - break; - case NETDEV_PRE_UP: - if (!(wdev->wiphy->interface_modes & BIT(wdev->iftype))) - return notifier_from_errno(-EOPNOTSUPP); - if (rfkill_blocked(rdev->rfkill)) - return notifier_from_errno(-ERFKILL); - ret = cfg80211_can_add_interface(rdev, wdev->iftype); - if (ret) - return notifier_from_errno(ret); - break; - } - - return NOTIFY_DONE; -} - -static struct notifier_block cfg80211_netdev_notifier = { - .notifier_call = cfg80211_netdev_notifier_call, -}; - -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24)) -static void __net_exit cfg80211_pernet_exit(struct net *net) -{ - struct cfg80211_registered_device *rdev; - - rtnl_lock(); - mutex_lock(&cfg80211_mutex); - list_for_each_entry(rdev, &cfg80211_rdev_list, list) { - if (net_eq(wiphy_net(&rdev->wiphy), net)) - WARN_ON(cfg80211_switch_netns(rdev, &init_net)); - } - mutex_unlock(&cfg80211_mutex); - rtnl_unlock(); -} - -static struct pernet_operations cfg80211_pernet_ops = { - .exit = cfg80211_pernet_exit, -}; -#endif - -static int __init cfg80211_init(void) -{ - int err; - -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24)) - err = register_pernet_device(&cfg80211_pernet_ops); - if (err) - goto out_fail_pernet; -#endif - - err = wiphy_sysfs_init(); - if (err) - goto out_fail_sysfs; - - err = register_netdevice_notifier(&cfg80211_netdev_notifier); - if (err) - goto out_fail_notifier; - - err = nl80211_init(); - if (err) - goto out_fail_nl80211; - - ieee80211_debugfs_dir = debugfs_create_dir("ieee80211", NULL); - - err = regulatory_init(); - if (err) - goto out_fail_reg; - - cfg80211_wq = create_singlethread_workqueue("cfg80211"); - if (!cfg80211_wq) - goto out_fail_wq; - - return 0; - -out_fail_wq: - regulatory_exit(); -out_fail_reg: - debugfs_remove(ieee80211_debugfs_dir); -out_fail_nl80211: - unregister_netdevice_notifier(&cfg80211_netdev_notifier); -out_fail_notifier: - wiphy_sysfs_exit(); -out_fail_sysfs: -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24)) - unregister_pernet_device(&cfg80211_pernet_ops); -out_fail_pernet: -#endif - return err; -} -subsys_initcall(cfg80211_init); - -static void __exit cfg80211_exit(void) -{ - debugfs_remove(ieee80211_debugfs_dir); - nl80211_exit(); - unregister_netdevice_notifier(&cfg80211_netdev_notifier); - wiphy_sysfs_exit(); - regulatory_exit(); -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24)) - unregister_pernet_device(&cfg80211_pernet_ops); -#endif - destroy_workqueue(cfg80211_wq); -} -module_exit(cfg80211_exit); diff --git a/openairITS/mac/DOT11/net/wireless/core.h b/openairITS/mac/DOT11/net/wireless/core.h deleted file mode 100644 index 3ac2dd00d7..0000000000 --- a/openairITS/mac/DOT11/net/wireless/core.h +++ /dev/null @@ -1,468 +0,0 @@ -/* - * Wireless configuration interface internals. - * - * Copyright 2006-2010 Johannes Berg - */ -#ifndef __NET_WIRELESS_CORE_H -#define __NET_WIRELESS_CORE_H -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "reg.h" - -struct cfg80211_registered_device { - const struct cfg80211_ops *ops; - struct list_head list; - /* we hold this mutex during any call so that - * we cannot do multiple calls at once, and also - * to avoid the deregister call to proceed while - * any call is in progress */ - struct mutex mtx; - - /* rfkill support */ - struct rfkill_ops rfkill_ops; - struct rfkill *rfkill; - struct work_struct rfkill_sync; - - /* ISO / IEC 3166 alpha2 for which this device is receiving - * country IEs on, this can help disregard country IEs from APs - * on the same alpha2 quickly. The alpha2 may differ from - * cfg80211_regdomain's alpha2 when an intersection has occurred. - * If the AP is reconfigured this can also be used to tell us if - * the country on the country IE changed. */ - char country_ie_alpha2[2]; - - /* If a Country IE has been received this tells us the environment - * which its telling us its in. This defaults to ENVIRON_ANY */ - enum environment_cap env; - - /* wiphy index, internal only */ - int wiphy_idx; - - /* associate netdev list */ - struct mutex devlist_mtx; - /* protected by devlist_mtx or RCU */ - struct list_head netdev_list; - int devlist_generation; - int opencount; /* also protected by devlist_mtx */ - wait_queue_head_t dev_wait; - - u32 ap_beacons_nlpid; - - /* BSSes/scanning */ - spinlock_t bss_lock; - struct list_head bss_list; - struct rb_root bss_tree; - u32 bss_generation; - struct cfg80211_scan_request *scan_req; /* protected by RTNL */ - struct cfg80211_sched_scan_request *sched_scan_req; - unsigned long suspend_at; - struct work_struct scan_done_wk; - struct work_struct sched_scan_results_wk; - - struct mutex sched_scan_mtx; - -#ifdef CONFIG_NL80211_TESTMODE - struct genl_info *testmode_info; -#endif - - struct work_struct conn_work; - struct work_struct event_work; - - struct cfg80211_wowlan *wowlan; - - /* must be last because of the way we do wiphy_priv(), - * and it should at least be aligned to NETDEV_ALIGN */ - struct wiphy wiphy __attribute__((__aligned__(NETDEV_ALIGN))); -}; - -static inline -struct cfg80211_registered_device *wiphy_to_dev(struct wiphy *wiphy) -{ - BUG_ON(!wiphy); - return container_of(wiphy, struct cfg80211_registered_device, wiphy); -} - -/* Note 0 is valid, hence phy0 */ -static inline -bool wiphy_idx_valid(int wiphy_idx) -{ - return wiphy_idx >= 0; -} - -static inline void -cfg80211_rdev_free_wowlan(struct cfg80211_registered_device *rdev) -{ - int i; - - if (!rdev->wowlan) - return; - for (i = 0; i < rdev->wowlan->n_patterns; i++) - kfree(rdev->wowlan->patterns[i].mask); - kfree(rdev->wowlan->patterns); - kfree(rdev->wowlan); -} - -extern struct workqueue_struct *cfg80211_wq; -extern struct mutex cfg80211_mutex; -extern struct list_head cfg80211_rdev_list; -extern int cfg80211_rdev_list_generation; - -static inline void assert_cfg80211_lock(void) -{ - lockdep_assert_held(&cfg80211_mutex); -} - -/* - * You can use this to mark a wiphy_idx as not having an associated wiphy. - * It guarantees cfg80211_rdev_by_wiphy_idx(wiphy_idx) will return NULL - */ -#define WIPHY_IDX_STALE -1 - -struct cfg80211_internal_bss { - struct list_head list; - struct rb_node rbn; - unsigned long ts; - struct kref ref; - atomic_t hold; - bool beacon_ies_allocated; - bool proberesp_ies_allocated; - - /* must be last because of priv member */ - struct cfg80211_bss pub; -}; - -static inline struct cfg80211_internal_bss *bss_from_pub(struct cfg80211_bss *pub) -{ - return container_of(pub, struct cfg80211_internal_bss, pub); -} - -static inline void cfg80211_hold_bss(struct cfg80211_internal_bss *bss) -{ - atomic_inc(&bss->hold); -} - -static inline void cfg80211_unhold_bss(struct cfg80211_internal_bss *bss) -{ - int r = atomic_dec_return(&bss->hold); - WARN_ON(r < 0); -} - - -struct cfg80211_registered_device *cfg80211_rdev_by_wiphy_idx(int wiphy_idx); -int get_wiphy_idx(struct wiphy *wiphy); - -struct cfg80211_registered_device * -__cfg80211_rdev_from_info(struct genl_info *info); - -/* - * This function returns a pointer to the driver - * that the genl_info item that is passed refers to. - * If successful, it returns non-NULL and also locks - * the driver's mutex! - * - * This means that you need to call cfg80211_unlock_rdev() - * before being allowed to acquire &cfg80211_mutex! - * - * This is necessary because we need to lock the global - * mutex to get an item off the list safely, and then - * we lock the rdev mutex so it doesn't go away under us. - * - * We don't want to keep cfg80211_mutex locked - * for all the time in order to allow requests on - * other interfaces to go through at the same time. - * - * The result of this can be a PTR_ERR and hence must - * be checked with IS_ERR() for errors. - */ -extern struct cfg80211_registered_device * -cfg80211_get_dev_from_info(struct genl_info *info); - -/* requires cfg80211_rdev_mutex to be held! */ -struct wiphy *wiphy_idx_to_wiphy(int wiphy_idx); - -/* identical to cfg80211_get_dev_from_info but only operate on ifindex */ -extern struct cfg80211_registered_device * -cfg80211_get_dev_from_ifindex(struct net *net, int ifindex); - -int cfg80211_switch_netns(struct cfg80211_registered_device *rdev, - struct net *net); - -static inline void cfg80211_lock_rdev(struct cfg80211_registered_device *rdev) -{ - mutex_lock(&rdev->mtx); -} - -static inline void cfg80211_unlock_rdev(struct cfg80211_registered_device *rdev) -{ - BUG_ON(IS_ERR(rdev) || !rdev); - mutex_unlock(&rdev->mtx); -} - -static inline void wdev_lock(struct wireless_dev *wdev) - __acquires(wdev) -{ - mutex_lock(&wdev->mtx); - __acquire(wdev->mtx); -} - -static inline void wdev_unlock(struct wireless_dev *wdev) - __releases(wdev) -{ - __release(wdev->mtx); - mutex_unlock(&wdev->mtx); -} - -#define ASSERT_RDEV_LOCK(rdev) lockdep_assert_held(&(rdev)->mtx) -#define ASSERT_WDEV_LOCK(wdev) lockdep_assert_held(&(wdev)->mtx) - -enum cfg80211_event_type { - EVENT_CONNECT_RESULT, - EVENT_ROAMED, - EVENT_DISCONNECTED, - EVENT_IBSS_JOINED, -}; - -struct cfg80211_event { - struct list_head list; - enum cfg80211_event_type type; - - union { - struct { - u8 bssid[ETH_ALEN]; - const u8 *req_ie; - const u8 *resp_ie; - size_t req_ie_len; - size_t resp_ie_len; - u16 status; - } cr; - struct { - const u8 *req_ie; - const u8 *resp_ie; - size_t req_ie_len; - size_t resp_ie_len; - struct cfg80211_bss *bss; - } rm; - struct { - const u8 *ie; - size_t ie_len; - u16 reason; - } dc; - struct { - u8 bssid[ETH_ALEN]; - } ij; - }; -}; - -struct cfg80211_cached_keys { - struct key_params params[6]; - u8 data[6][WLAN_MAX_KEY_LEN]; - int def, defmgmt; -}; - - -/* free object */ -extern void cfg80211_dev_free(struct cfg80211_registered_device *rdev); - -extern int cfg80211_dev_rename(struct cfg80211_registered_device *rdev, - char *newname); - -void ieee80211_set_bitrate_flags(struct wiphy *wiphy); - -void cfg80211_bss_expire(struct cfg80211_registered_device *dev); -void cfg80211_bss_age(struct cfg80211_registered_device *dev, - unsigned long age_secs); - -/* IBSS */ -int __cfg80211_join_ibss(struct cfg80211_registered_device *rdev, - struct net_device *dev, - struct cfg80211_ibss_params *params, - struct cfg80211_cached_keys *connkeys); -int cfg80211_join_ibss(struct cfg80211_registered_device *rdev, - struct net_device *dev, - struct cfg80211_ibss_params *params, - struct cfg80211_cached_keys *connkeys); -void cfg80211_clear_ibss(struct net_device *dev, bool nowext); -int __cfg80211_leave_ibss(struct cfg80211_registered_device *rdev, - struct net_device *dev, bool nowext); -int cfg80211_leave_ibss(struct cfg80211_registered_device *rdev, - struct net_device *dev, bool nowext); -void __cfg80211_ibss_joined(struct net_device *dev, const u8 *bssid); -int cfg80211_ibss_wext_join(struct cfg80211_registered_device *rdev, - struct wireless_dev *wdev); - -/* mesh */ -extern const struct mesh_config default_mesh_config; -extern const struct mesh_setup default_mesh_setup; -int __cfg80211_join_mesh(struct cfg80211_registered_device *rdev, - struct net_device *dev, - const struct mesh_setup *setup, - const struct mesh_config *conf); -int cfg80211_join_mesh(struct cfg80211_registered_device *rdev, - struct net_device *dev, - const struct mesh_setup *setup, - const struct mesh_config *conf); -int cfg80211_leave_mesh(struct cfg80211_registered_device *rdev, - struct net_device *dev); - -/* MLME */ -int __cfg80211_mlme_auth(struct cfg80211_registered_device *rdev, - struct net_device *dev, - struct ieee80211_channel *chan, - enum nl80211_auth_type auth_type, - const u8 *bssid, - const u8 *ssid, int ssid_len, - const u8 *ie, int ie_len, - const u8 *key, int key_len, int key_idx); -int cfg80211_mlme_auth(struct cfg80211_registered_device *rdev, - struct net_device *dev, struct ieee80211_channel *chan, - enum nl80211_auth_type auth_type, const u8 *bssid, - const u8 *ssid, int ssid_len, - const u8 *ie, int ie_len, - const u8 *key, int key_len, int key_idx); -int __cfg80211_mlme_assoc(struct cfg80211_registered_device *rdev, - struct net_device *dev, - struct ieee80211_channel *chan, - const u8 *bssid, const u8 *prev_bssid, - const u8 *ssid, int ssid_len, - const u8 *ie, int ie_len, bool use_mfp, - struct cfg80211_crypto_settings *crypt, - u32 assoc_flags, struct ieee80211_ht_cap *ht_capa, - struct ieee80211_ht_cap *ht_capa_mask); -int cfg80211_mlme_assoc(struct cfg80211_registered_device *rdev, - struct net_device *dev, struct ieee80211_channel *chan, - const u8 *bssid, const u8 *prev_bssid, - const u8 *ssid, int ssid_len, - const u8 *ie, int ie_len, bool use_mfp, - struct cfg80211_crypto_settings *crypt, - u32 assoc_flags, struct ieee80211_ht_cap *ht_capa, - struct ieee80211_ht_cap *ht_capa_mask); -int __cfg80211_mlme_deauth(struct cfg80211_registered_device *rdev, - struct net_device *dev, const u8 *bssid, - const u8 *ie, int ie_len, u16 reason, - bool local_state_change); -int cfg80211_mlme_deauth(struct cfg80211_registered_device *rdev, - struct net_device *dev, const u8 *bssid, - const u8 *ie, int ie_len, u16 reason, - bool local_state_change); -int cfg80211_mlme_disassoc(struct cfg80211_registered_device *rdev, - struct net_device *dev, const u8 *bssid, - const u8 *ie, int ie_len, u16 reason, - bool local_state_change); -void cfg80211_mlme_down(struct cfg80211_registered_device *rdev, - struct net_device *dev); -void __cfg80211_connect_result(struct net_device *dev, const u8 *bssid, - const u8 *req_ie, size_t req_ie_len, - const u8 *resp_ie, size_t resp_ie_len, - u16 status, bool wextev, - struct cfg80211_bss *bss); -int cfg80211_mlme_register_mgmt(struct wireless_dev *wdev, u32 snd_pid, - u16 frame_type, const u8 *match_data, - int match_len); -void cfg80211_mlme_unregister_socket(struct wireless_dev *wdev, u32 nlpid); -void cfg80211_mlme_purge_registrations(struct wireless_dev *wdev); -int cfg80211_mlme_mgmt_tx(struct cfg80211_registered_device *rdev, - struct net_device *dev, - struct ieee80211_channel *chan, bool offchan, - enum nl80211_channel_type channel_type, - bool channel_type_valid, unsigned int wait, - const u8 *buf, size_t len, bool no_cck, - bool dont_wait_for_ack, u64 *cookie); -void cfg80211_oper_and_ht_capa(struct ieee80211_ht_cap *ht_capa, - const struct ieee80211_ht_cap *ht_capa_mask); - -/* SME */ -int __cfg80211_connect(struct cfg80211_registered_device *rdev, - struct net_device *dev, - struct cfg80211_connect_params *connect, - struct cfg80211_cached_keys *connkeys, - const u8 *prev_bssid); -int cfg80211_connect(struct cfg80211_registered_device *rdev, - struct net_device *dev, - struct cfg80211_connect_params *connect, - struct cfg80211_cached_keys *connkeys); -int __cfg80211_disconnect(struct cfg80211_registered_device *rdev, - struct net_device *dev, u16 reason, - bool wextev); -int cfg80211_disconnect(struct cfg80211_registered_device *rdev, - struct net_device *dev, u16 reason, - bool wextev); -void __cfg80211_roamed(struct wireless_dev *wdev, - struct cfg80211_bss *bss, - const u8 *req_ie, size_t req_ie_len, - const u8 *resp_ie, size_t resp_ie_len); -int cfg80211_mgd_wext_connect(struct cfg80211_registered_device *rdev, - struct wireless_dev *wdev); - -void cfg80211_conn_work(struct work_struct *work); -void cfg80211_sme_failed_assoc(struct wireless_dev *wdev); -bool cfg80211_sme_failed_reassoc(struct wireless_dev *wdev); - -/* internal helpers */ -bool cfg80211_supported_cipher_suite(struct wiphy *wiphy, u32 cipher); -int cfg80211_validate_key_settings(struct cfg80211_registered_device *rdev, - struct key_params *params, int key_idx, - bool pairwise, const u8 *mac_addr); -void __cfg80211_disconnected(struct net_device *dev, const u8 *ie, - size_t ie_len, u16 reason, bool from_ap); -void cfg80211_sme_scan_done(struct net_device *dev); -void cfg80211_sme_rx_auth(struct net_device *dev, const u8 *buf, size_t len); -void cfg80211_sme_disassoc(struct net_device *dev, - struct cfg80211_internal_bss *bss); -void __cfg80211_scan_done(struct work_struct *wk); -void ___cfg80211_scan_done(struct cfg80211_registered_device *rdev, bool leak); -void __cfg80211_sched_scan_results(struct work_struct *wk); -int __cfg80211_stop_sched_scan(struct cfg80211_registered_device *rdev, - bool driver_initiated); -void cfg80211_upload_connect_keys(struct wireless_dev *wdev); -int cfg80211_change_iface(struct cfg80211_registered_device *rdev, - struct net_device *dev, enum nl80211_iftype ntype, - u32 *flags, struct vif_params *params); -void cfg80211_process_rdev_events(struct cfg80211_registered_device *rdev); - -int cfg80211_can_change_interface(struct cfg80211_registered_device *rdev, - struct wireless_dev *wdev, - enum nl80211_iftype iftype); - -static inline int -cfg80211_can_add_interface(struct cfg80211_registered_device *rdev, - enum nl80211_iftype iftype) -{ - return cfg80211_can_change_interface(rdev, NULL, iftype); -} - -struct ieee80211_channel * -rdev_freq_to_chan(struct cfg80211_registered_device *rdev, - int freq, enum nl80211_channel_type channel_type); -int cfg80211_set_freq(struct cfg80211_registered_device *rdev, - struct wireless_dev *wdev, int freq, - enum nl80211_channel_type channel_type); - -u16 cfg80211_calculate_bitrate(struct rate_info *rate); - -int ieee80211_get_ratemask(struct ieee80211_supported_band *sband, - const u8 *rates, unsigned int n_rates, - u32 *mask); - -int cfg80211_validate_beacon_int(struct cfg80211_registered_device *rdev, - u32 beacon_int); - -#ifdef CONFIG_CFG80211_DEVELOPER_WARNINGS -#define CFG80211_DEV_WARN_ON(cond) WARN_ON(cond) -#else -/* - * Trick to enable using it as a condition, - * and also not give a warning when it's - * not used that way. - */ -#define CFG80211_DEV_WARN_ON(cond) ({bool __r = (cond); __r; }) -#endif - -#endif /* __NET_WIRELESS_CORE_H */ diff --git a/openairITS/mac/DOT11/net/wireless/db.txt b/openairITS/mac/DOT11/net/wireless/db.txt deleted file mode 100644 index a2fc3a09cc..0000000000 --- a/openairITS/mac/DOT11/net/wireless/db.txt +++ /dev/null @@ -1,17 +0,0 @@ -# -# This file is a placeholder to prevent accidental build breakage if someone -# enables CONFIG_CFG80211_INTERNAL_REGDB. Almost no one actually needs to -# enable that build option. -# -# You should be using CRDA instead. It is even better if you use the CRDA -# package provided by your distribution, since they will probably keep it -# up-to-date on your behalf. -# -# If you _really_ intend to use CONFIG_CFG80211_INTERNAL_REGDB then you will -# need to replace this file with one containing appropriately formatted -# regulatory rules that cover the regulatory domains you will be using. Your -# best option is to extract the db.txt file from the wireless-regdb git -# repository: -# -# git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-regdb.git -# diff --git a/openairITS/mac/DOT11/net/wireless/debugfs.c b/openairITS/mac/DOT11/net/wireless/debugfs.c deleted file mode 100644 index 920cabe046..0000000000 --- a/openairITS/mac/DOT11/net/wireless/debugfs.c +++ /dev/null @@ -1,115 +0,0 @@ -/* - * cfg80211 debugfs - * - * Copyright 2009 Luis R. Rodriguez - * Copyright 2007 Johannes Berg - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - */ - -#include -#include "core.h" -#include "debugfs.h" - -#define DEBUGFS_READONLY_FILE(name, buflen, fmt, value...) \ -static ssize_t name## _read(struct file *file, char __user *userbuf, \ - size_t count, loff_t *ppos) \ -{ \ - struct wiphy *wiphy= file->private_data; \ - char buf[buflen]; \ - int res; \ - \ - res = scnprintf(buf, buflen, fmt "\n", ##value); \ - return simple_read_from_buffer(userbuf, count, ppos, buf, res); \ -} \ - \ -static const struct file_operations name## _ops = { \ - .read = name## _read, \ - .open = simple_open, \ - .llseek = generic_file_llseek, \ -}; - -DEBUGFS_READONLY_FILE(rts_threshold, 20, "%d", - wiphy->rts_threshold) -DEBUGFS_READONLY_FILE(fragmentation_threshold, 20, "%d", - wiphy->frag_threshold); -DEBUGFS_READONLY_FILE(short_retry_limit, 20, "%d", - wiphy->retry_short) -DEBUGFS_READONLY_FILE(long_retry_limit, 20, "%d", - wiphy->retry_long); - -static int ht_print_chan(struct ieee80211_channel *chan, - char *buf, int buf_size, int offset) -{ - if (WARN_ON(offset > buf_size)) - return 0; - - if (chan->flags & IEEE80211_CHAN_DISABLED) - return snprintf(buf + offset, - buf_size - offset, - "%d Disabled\n", - chan->center_freq); - - return snprintf(buf + offset, - buf_size - offset, - "%d HT40 %c%c\n", - chan->center_freq, - (chan->flags & IEEE80211_CHAN_NO_HT40MINUS) ? ' ' : '-', - (chan->flags & IEEE80211_CHAN_NO_HT40PLUS) ? ' ' : '+'); -} - -static ssize_t ht40allow_map_read(struct file *file, - char __user *user_buf, - size_t count, loff_t *ppos) -{ - struct wiphy *wiphy = file->private_data; - char *buf; - unsigned int offset = 0, buf_size = PAGE_SIZE, i, r; - enum ieee80211_band band; - struct ieee80211_supported_band *sband; - - buf = kzalloc(buf_size, GFP_KERNEL); - if (!buf) - return -ENOMEM; - - mutex_lock(&cfg80211_mutex); - - for (band = 0; band < IEEE80211_NUM_BANDS; band++) { - sband = wiphy->bands[band]; - if (!sband) - continue; - for (i = 0; i < sband->n_channels; i++) - offset += ht_print_chan(&sband->channels[i], - buf, buf_size, offset); - } - - mutex_unlock(&cfg80211_mutex); - - r = simple_read_from_buffer(user_buf, count, ppos, buf, offset); - - kfree(buf); - - return r; -} - -static const struct file_operations ht40allow_map_ops = { - .read = ht40allow_map_read, - .open = simple_open, - .llseek = default_llseek, -}; - -#define DEBUGFS_ADD(name) \ - debugfs_create_file(#name, S_IRUGO, phyd, &rdev->wiphy, &name## _ops); - -void cfg80211_debugfs_rdev_add(struct cfg80211_registered_device *rdev) -{ - struct dentry *phyd = rdev->wiphy.debugfsdir; - - DEBUGFS_ADD(rts_threshold); - DEBUGFS_ADD(fragmentation_threshold); - DEBUGFS_ADD(short_retry_limit); - DEBUGFS_ADD(long_retry_limit); - DEBUGFS_ADD(ht40allow_map); -} diff --git a/openairITS/mac/DOT11/net/wireless/debugfs.h b/openairITS/mac/DOT11/net/wireless/debugfs.h deleted file mode 100644 index 74fdd38114..0000000000 --- a/openairITS/mac/DOT11/net/wireless/debugfs.h +++ /dev/null @@ -1,11 +0,0 @@ -#ifndef __CFG80211_DEBUGFS_H -#define __CFG80211_DEBUGFS_H - -#ifdef CONFIG_CFG80211_DEBUGFS -void cfg80211_debugfs_rdev_add(struct cfg80211_registered_device *rdev); -#else -static inline -void cfg80211_debugfs_rdev_add(struct cfg80211_registered_device *rdev) {} -#endif - -#endif /* __CFG80211_DEBUGFS_H */ diff --git a/openairITS/mac/DOT11/net/wireless/ethtool.c b/openairITS/mac/DOT11/net/wireless/ethtool.c deleted file mode 100644 index 9bde4d1d3e..0000000000 --- a/openairITS/mac/DOT11/net/wireless/ethtool.c +++ /dev/null @@ -1,78 +0,0 @@ -#include -#include -#include "core.h" -#include "ethtool.h" - -static void cfg80211_get_drvinfo(struct net_device *dev, - struct ethtool_drvinfo *info) -{ - struct wireless_dev *wdev = dev->ieee80211_ptr; - - strlcpy(info->driver, wiphy_dev(wdev->wiphy)->driver->name, - sizeof(info->driver)); - - strlcpy(info->version, init_utsname()->release, sizeof(info->version)); - - if (wdev->wiphy->fw_version[0]) - strncpy(info->fw_version, wdev->wiphy->fw_version, - sizeof(info->fw_version)); - else - strncpy(info->fw_version, "N/A", sizeof(info->fw_version)); - - strlcpy(info->bus_info, dev_name(wiphy_dev(wdev->wiphy)), - sizeof(info->bus_info)); -} - -static int cfg80211_get_regs_len(struct net_device *dev) -{ - /* For now, return 0... */ - return 0; -} - -static void cfg80211_get_regs(struct net_device *dev, struct ethtool_regs *regs, - void *data) -{ - struct wireless_dev *wdev = dev->ieee80211_ptr; - - regs->version = wdev->wiphy->hw_version; - regs->len = 0; -} - -static void cfg80211_get_ringparam(struct net_device *dev, - struct ethtool_ringparam *rp) -{ - struct wireless_dev *wdev = dev->ieee80211_ptr; - struct cfg80211_registered_device *rdev = wiphy_to_dev(wdev->wiphy); - - memset(rp, 0, sizeof(*rp)); - - if (rdev->ops->get_ringparam) - rdev->ops->get_ringparam(wdev->wiphy, - &rp->tx_pending, &rp->tx_max_pending, - &rp->rx_pending, &rp->rx_max_pending); -} - -static int cfg80211_set_ringparam(struct net_device *dev, - struct ethtool_ringparam *rp) -{ - struct wireless_dev *wdev = dev->ieee80211_ptr; - struct cfg80211_registered_device *rdev = wiphy_to_dev(wdev->wiphy); - - if (rp->rx_mini_pending != 0 || rp->rx_jumbo_pending != 0) - return -EINVAL; - - if (rdev->ops->set_ringparam) - return rdev->ops->set_ringparam(wdev->wiphy, - rp->tx_pending, rp->rx_pending); - - return -ENOTSUPP; -} - -const struct ethtool_ops cfg80211_ethtool_ops = { - .get_drvinfo = cfg80211_get_drvinfo, - .get_regs_len = cfg80211_get_regs_len, - .get_regs = cfg80211_get_regs, - .get_link = ethtool_op_get_link, - .get_ringparam = cfg80211_get_ringparam, - .set_ringparam = cfg80211_set_ringparam, -}; diff --git a/openairITS/mac/DOT11/net/wireless/ethtool.h b/openairITS/mac/DOT11/net/wireless/ethtool.h deleted file mode 100644 index 695ecad20b..0000000000 --- a/openairITS/mac/DOT11/net/wireless/ethtool.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef __CFG80211_ETHTOOL__ -#define __CFG80211_ETHTOOL__ - -extern const struct ethtool_ops cfg80211_ethtool_ops; - -#endif /* __CFG80211_ETHTOOL__ */ diff --git a/openairITS/mac/DOT11/net/wireless/genregdb.awk b/openairITS/mac/DOT11/net/wireless/genregdb.awk deleted file mode 100644 index 9392f8cbb9..0000000000 --- a/openairITS/mac/DOT11/net/wireless/genregdb.awk +++ /dev/null @@ -1,126 +0,0 @@ -#!/usr/bin/awk -f -# -# genregdb.awk -- generate regdb.c from db.txt -# -# Actually, it reads from stdin (presumed to be db.txt) and writes -# to stdout (presumed to be regdb.c), but close enough... -# -# Copyright 2009 John W. Linville -# -# Permission to use, copy, modify, and/or distribute this software for any -# purpose with or without fee is hereby granted, provided that the above -# copyright notice and this permission notice appear in all copies. -# -# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - -BEGIN { - active = 0 - rules = 0; - print "/*" - print " * DO NOT EDIT -- file generated from data in db.txt" - print " */" - print "" - print "#include " - print "#include " - print "#include \"regdb.h\"" - print "" - regdb = "const struct ieee80211_regdomain *reg_regdb[] = {\n" -} - -/^[ \t]*#/ { - # Ignore -} - -!active && /^[ \t]*$/ { - # Ignore -} - -!active && /country/ { - country=$2 - sub(/:/, "", country) - printf "static const struct ieee80211_regdomain regdom_%s = {\n", country - printf "\t.alpha2 = \"%s\",\n", country - printf "\t.reg_rules = {\n" - active = 1 - regdb = regdb "\t®dom_" country ",\n" -} - -active && /^[ \t]*\(/ { - start = $1 - sub(/\(/, "", start) - end = $3 - bw = $5 - sub(/\),/, "", bw) - gain = $6 - sub(/\(/, "", gain) - sub(/,/, "", gain) - power = $7 - sub(/\)/, "", power) - sub(/,/, "", power) - # power might be in mW... - units = $8 - sub(/\)/, "", units) - sub(/,/, "", units) - if (units == "mW") { - if (power == 100) { - power = 20 - } else if (power == 200) { - power = 23 - } else if (power == 500) { - power = 27 - } else if (power == 1000) { - power = 30 - } else { - print "Unknown power value in database!" - } - } - flagstr = "" - for (i=8; i<=NF; i++) - flagstr = flagstr $i - split(flagstr, flagarray, ",") - flags = "" - for (arg in flagarray) { - if (flagarray[arg] == "NO-OFDM") { - flags = flags "\n\t\t\tNL80211_RRF_NO_OFDM | " - } else if (flagarray[arg] == "NO-CCK") { - flags = flags "\n\t\t\tNL80211_RRF_NO_CCK | " - } else if (flagarray[arg] == "NO-INDOOR") { - flags = flags "\n\t\t\tNL80211_RRF_NO_INDOOR | " - } else if (flagarray[arg] == "NO-OUTDOOR") { - flags = flags "\n\t\t\tNL80211_RRF_NO_OUTDOOR | " - } else if (flagarray[arg] == "DFS") { - flags = flags "\n\t\t\tNL80211_RRF_DFS | " - } else if (flagarray[arg] == "PTP-ONLY") { - flags = flags "\n\t\t\tNL80211_RRF_PTP_ONLY | " - } else if (flagarray[arg] == "PTMP-ONLY") { - flags = flags "\n\t\t\tNL80211_RRF_PTMP_ONLY | " - } else if (flagarray[arg] == "PASSIVE-SCAN") { - flags = flags "\n\t\t\tNL80211_RRF_PASSIVE_SCAN | " - } else if (flagarray[arg] == "NO-IBSS") { - flags = flags "\n\t\t\tNL80211_RRF_NO_IBSS | " - } - } - flags = flags "0" - printf "\t\tREG_RULE(%d, %d, %d, %d, %d, %s),\n", start, end, bw, gain, power, flags - rules++ -} - -active && /^[ \t]*$/ { - active = 0 - printf "\t},\n" - printf "\t.n_reg_rules = %d\n", rules - printf "};\n\n" - rules = 0; -} - -END { - print regdb "};" - print "" - print "int reg_regdb_size = ARRAY_SIZE(reg_regdb);" -} diff --git a/openairITS/mac/DOT11/net/wireless/ibss.c b/openairITS/mac/DOT11/net/wireless/ibss.c deleted file mode 100644 index 30f20fe4a5..0000000000 --- a/openairITS/mac/DOT11/net/wireless/ibss.c +++ /dev/null @@ -1,527 +0,0 @@ -/* - * Some IBSS support code for cfg80211. - * - * Copyright 2009 Johannes Berg - */ - -#include -#include -#include -#include -#include -#include "wext-compat.h" -#include "nl80211.h" - - -void __cfg80211_ibss_joined(struct net_device *dev, const u8 *bssid) -{ - struct wireless_dev *wdev = dev->ieee80211_ptr; - struct cfg80211_bss *bss; -#ifdef CONFIG_CFG80211_WEXT - union iwreq_data wrqu; -#endif - - if (WARN_ON(wdev->iftype != NL80211_IFTYPE_ADHOC)) - return; - - if (!wdev->ssid_len) - return; - - bss = cfg80211_get_bss(wdev->wiphy, NULL, bssid, - wdev->ssid, wdev->ssid_len, - WLAN_CAPABILITY_IBSS, WLAN_CAPABILITY_IBSS); - - if (WARN_ON(!bss)) - return; - - if (wdev->current_bss) { - cfg80211_unhold_bss(wdev->current_bss); - cfg80211_put_bss(&wdev->current_bss->pub); - } - - cfg80211_hold_bss(bss_from_pub(bss)); - wdev->current_bss = bss_from_pub(bss); - - cfg80211_upload_connect_keys(wdev); - - nl80211_send_ibss_bssid(wiphy_to_dev(wdev->wiphy), dev, bssid, - GFP_KERNEL); -#ifdef CONFIG_CFG80211_WEXT - memset(&wrqu, 0, sizeof(wrqu)); - memcpy(wrqu.ap_addr.sa_data, bssid, ETH_ALEN); - wireless_send_event(dev, SIOCGIWAP, &wrqu, NULL); -#endif -} - -void cfg80211_ibss_joined(struct net_device *dev, const u8 *bssid, gfp_t gfp) -{ - struct wireless_dev *wdev = dev->ieee80211_ptr; - struct cfg80211_registered_device *rdev = wiphy_to_dev(wdev->wiphy); - struct cfg80211_event *ev; - unsigned long flags; - - CFG80211_DEV_WARN_ON(!wdev->ssid_len); - - ev = kzalloc(sizeof(*ev), gfp); - if (!ev) - return; - - ev->type = EVENT_IBSS_JOINED; - memcpy(ev->cr.bssid, bssid, ETH_ALEN); - - spin_lock_irqsave(&wdev->event_lock, flags); - list_add_tail(&ev->list, &wdev->event_list); - spin_unlock_irqrestore(&wdev->event_lock, flags); - queue_work(cfg80211_wq, &rdev->event_work); -} -EXPORT_SYMBOL(cfg80211_ibss_joined); - -int __cfg80211_join_ibss(struct cfg80211_registered_device *rdev, - struct net_device *dev, - struct cfg80211_ibss_params *params, - struct cfg80211_cached_keys *connkeys) -{ - struct wireless_dev *wdev = dev->ieee80211_ptr; - int err; - - ASSERT_WDEV_LOCK(wdev); - - if (wdev->ssid_len) - return -EALREADY; - - if (!params->basic_rates) { - /* - * If no rates were explicitly configured, - * use the mandatory rate set for 11b or - * 11a for maximum compatibility. - */ - struct ieee80211_supported_band *sband = - rdev->wiphy.bands[params->channel->band]; - int j; - u32 flag = params->channel->band == IEEE80211_BAND_5GHZ ? - IEEE80211_RATE_MANDATORY_A : - IEEE80211_RATE_MANDATORY_B; - - for (j = 0; j < sband->n_bitrates; j++) { - if (sband->bitrates[j].flags & flag) - params->basic_rates |= BIT(j); - } - } - - if (WARN_ON(wdev->connect_keys)) - kfree(wdev->connect_keys); - wdev->connect_keys = connkeys; - -#ifdef CONFIG_CFG80211_WEXT - wdev->wext.ibss.channel = params->channel; -#endif - err = rdev->ops->join_ibss(&rdev->wiphy, dev, params); - if (err) { - wdev->connect_keys = NULL; - return err; - } - - memcpy(wdev->ssid, params->ssid, params->ssid_len); - wdev->ssid_len = params->ssid_len; - - return 0; -} - -int cfg80211_join_ibss(struct cfg80211_registered_device *rdev, - struct net_device *dev, - struct cfg80211_ibss_params *params, - struct cfg80211_cached_keys *connkeys) -{ - struct wireless_dev *wdev = dev->ieee80211_ptr; - int err; - - mutex_lock(&rdev->devlist_mtx); - wdev_lock(wdev); - err = __cfg80211_join_ibss(rdev, dev, params, connkeys); - wdev_unlock(wdev); - mutex_unlock(&rdev->devlist_mtx); - - return err; -} - -static void __cfg80211_clear_ibss(struct net_device *dev, bool nowext) -{ - struct wireless_dev *wdev = dev->ieee80211_ptr; - struct cfg80211_registered_device *rdev = wiphy_to_dev(wdev->wiphy); - int i; - - ASSERT_WDEV_LOCK(wdev); - - kfree(wdev->connect_keys); - wdev->connect_keys = NULL; - - /* - * Delete all the keys ... pairwise keys can't really - * exist any more anyway, but default keys might. - */ - if (rdev->ops->del_key) - for (i = 0; i < 6; i++) - rdev->ops->del_key(wdev->wiphy, dev, i, false, NULL); - - if (wdev->current_bss) { - cfg80211_unhold_bss(wdev->current_bss); - cfg80211_put_bss(&wdev->current_bss->pub); - } - - wdev->current_bss = NULL; - wdev->ssid_len = 0; -#ifdef CONFIG_CFG80211_WEXT - if (!nowext) - wdev->wext.ibss.ssid_len = 0; -#endif -} - -void cfg80211_clear_ibss(struct net_device *dev, bool nowext) -{ - struct wireless_dev *wdev = dev->ieee80211_ptr; - - wdev_lock(wdev); - __cfg80211_clear_ibss(dev, nowext); - wdev_unlock(wdev); -} - -int __cfg80211_leave_ibss(struct cfg80211_registered_device *rdev, - struct net_device *dev, bool nowext) -{ - struct wireless_dev *wdev = dev->ieee80211_ptr; - int err; - - ASSERT_WDEV_LOCK(wdev); - - if (!wdev->ssid_len) - return -ENOLINK; - - err = rdev->ops->leave_ibss(&rdev->wiphy, dev); - - if (err) - return err; - - __cfg80211_clear_ibss(dev, nowext); - - return 0; -} - -int cfg80211_leave_ibss(struct cfg80211_registered_device *rdev, - struct net_device *dev, bool nowext) -{ - struct wireless_dev *wdev = dev->ieee80211_ptr; - int err; - - wdev_lock(wdev); - err = __cfg80211_leave_ibss(rdev, dev, nowext); - wdev_unlock(wdev); - - return err; -} - -#ifdef CONFIG_CFG80211_WEXT -int cfg80211_ibss_wext_join(struct cfg80211_registered_device *rdev, - struct wireless_dev *wdev) -{ - struct cfg80211_cached_keys *ck = NULL; - enum ieee80211_band band; - int i, err; - - ASSERT_WDEV_LOCK(wdev); - - if (!wdev->wext.ibss.beacon_interval) - wdev->wext.ibss.beacon_interval = 100; - - /* try to find an IBSS channel if none requested ... */ - if (!wdev->wext.ibss.channel) { - for (band = 0; band < IEEE80211_NUM_BANDS; band++) { - struct ieee80211_supported_band *sband; - struct ieee80211_channel *chan; - - sband = rdev->wiphy.bands[band]; - if (!sband) - continue; - - for (i = 0; i < sband->n_channels; i++) { - chan = &sband->channels[i]; - if (chan->flags & IEEE80211_CHAN_NO_IBSS) - continue; - if (chan->flags & IEEE80211_CHAN_DISABLED) - continue; - wdev->wext.ibss.channel = chan; - break; - } - - if (wdev->wext.ibss.channel) - break; - } - - if (!wdev->wext.ibss.channel) - return -EINVAL; - } - - /* don't join -- SSID is not there */ - if (!wdev->wext.ibss.ssid_len) - return 0; - - if (!netif_running(wdev->netdev)) - return 0; - - if (wdev->wext.keys) { - wdev->wext.keys->def = wdev->wext.default_key; - wdev->wext.keys->defmgmt = wdev->wext.default_mgmt_key; - } - - wdev->wext.ibss.privacy = wdev->wext.default_key != -1; - - if (wdev->wext.keys) { - ck = kmemdup(wdev->wext.keys, sizeof(*ck), GFP_KERNEL); - if (!ck) - return -ENOMEM; - for (i = 0; i < 6; i++) - ck->params[i].key = ck->data[i]; - } - err = __cfg80211_join_ibss(rdev, wdev->netdev, - &wdev->wext.ibss, ck); - if (err) - kfree(ck); - - return err; -} - -int cfg80211_ibss_wext_siwfreq(struct net_device *dev, - struct iw_request_info *info, - struct iw_freq *wextfreq, char *extra) -{ - struct wireless_dev *wdev = dev->ieee80211_ptr; - struct cfg80211_registered_device *rdev = wiphy_to_dev(wdev->wiphy); - struct ieee80211_channel *chan = NULL; - int err, freq; - - /* call only for ibss! */ - if (WARN_ON(wdev->iftype != NL80211_IFTYPE_ADHOC)) - return -EINVAL; - - if (!rdev->ops->join_ibss) - return -EOPNOTSUPP; - - freq = cfg80211_wext_freq(wdev->wiphy, wextfreq); - if (freq < 0) - return freq; - - if (freq) { - chan = ieee80211_get_channel(wdev->wiphy, freq); - if (!chan) - return -EINVAL; - if (chan->flags & IEEE80211_CHAN_NO_IBSS || - chan->flags & IEEE80211_CHAN_DISABLED) - return -EINVAL; - } - - if (wdev->wext.ibss.channel == chan) - return 0; - - wdev_lock(wdev); - err = 0; - if (wdev->ssid_len) - err = __cfg80211_leave_ibss(rdev, dev, true); - wdev_unlock(wdev); - - if (err) - return err; - - if (chan) { - wdev->wext.ibss.channel = chan; - wdev->wext.ibss.channel_fixed = true; - } else { - /* cfg80211_ibss_wext_join will pick one if needed */ - wdev->wext.ibss.channel_fixed = false; - } - - mutex_lock(&rdev->devlist_mtx); - wdev_lock(wdev); - err = cfg80211_ibss_wext_join(rdev, wdev); - wdev_unlock(wdev); - mutex_unlock(&rdev->devlist_mtx); - - return err; -} - -int cfg80211_ibss_wext_giwfreq(struct net_device *dev, - struct iw_request_info *info, - struct iw_freq *freq, char *extra) -{ - struct wireless_dev *wdev = dev->ieee80211_ptr; - struct ieee80211_channel *chan = NULL; - - /* call only for ibss! */ - if (WARN_ON(wdev->iftype != NL80211_IFTYPE_ADHOC)) - return -EINVAL; - - wdev_lock(wdev); - if (wdev->current_bss) - chan = wdev->current_bss->pub.channel; - else if (wdev->wext.ibss.channel) - chan = wdev->wext.ibss.channel; - wdev_unlock(wdev); - - if (chan) { - freq->m = chan->center_freq; - freq->e = 6; - return 0; - } - - /* no channel if not joining */ - return -EINVAL; -} - -int cfg80211_ibss_wext_siwessid(struct net_device *dev, - struct iw_request_info *info, - struct iw_point *data, char *ssid) -{ - struct wireless_dev *wdev = dev->ieee80211_ptr; - struct cfg80211_registered_device *rdev = wiphy_to_dev(wdev->wiphy); - size_t len = data->length; - int err; - - /* call only for ibss! */ - if (WARN_ON(wdev->iftype != NL80211_IFTYPE_ADHOC)) - return -EINVAL; - - if (!rdev->ops->join_ibss) - return -EOPNOTSUPP; - - wdev_lock(wdev); - err = 0; - if (wdev->ssid_len) - err = __cfg80211_leave_ibss(rdev, dev, true); - wdev_unlock(wdev); - - if (err) - return err; - - /* iwconfig uses nul termination in SSID.. */ - if (len > 0 && ssid[len - 1] == '\0') - len--; - - wdev->wext.ibss.ssid = wdev->ssid; - memcpy(wdev->wext.ibss.ssid, ssid, len); - wdev->wext.ibss.ssid_len = len; - - mutex_lock(&rdev->devlist_mtx); - wdev_lock(wdev); - err = cfg80211_ibss_wext_join(rdev, wdev); - wdev_unlock(wdev); - mutex_unlock(&rdev->devlist_mtx); - - return err; -} - -int cfg80211_ibss_wext_giwessid(struct net_device *dev, - struct iw_request_info *info, - struct iw_point *data, char *ssid) -{ - struct wireless_dev *wdev = dev->ieee80211_ptr; - - /* call only for ibss! */ - if (WARN_ON(wdev->iftype != NL80211_IFTYPE_ADHOC)) - return -EINVAL; - - data->flags = 0; - - wdev_lock(wdev); - if (wdev->ssid_len) { - data->flags = 1; - data->length = wdev->ssid_len; - memcpy(ssid, wdev->ssid, data->length); - } else if (wdev->wext.ibss.ssid && wdev->wext.ibss.ssid_len) { - data->flags = 1; - data->length = wdev->wext.ibss.ssid_len; - memcpy(ssid, wdev->wext.ibss.ssid, data->length); - } - wdev_unlock(wdev); - - return 0; -} - -int cfg80211_ibss_wext_siwap(struct net_device *dev, - struct iw_request_info *info, - struct sockaddr *ap_addr, char *extra) -{ - struct wireless_dev *wdev = dev->ieee80211_ptr; - struct cfg80211_registered_device *rdev = wiphy_to_dev(wdev->wiphy); - u8 *bssid = ap_addr->sa_data; - int err; - - /* call only for ibss! */ - if (WARN_ON(wdev->iftype != NL80211_IFTYPE_ADHOC)) - return -EINVAL; - - if (!rdev->ops->join_ibss) - return -EOPNOTSUPP; - - if (ap_addr->sa_family != ARPHRD_ETHER) - return -EINVAL; - - /* automatic mode */ - if (is_zero_ether_addr(bssid) || is_broadcast_ether_addr(bssid)) - bssid = NULL; - - /* both automatic */ - if (!bssid && !wdev->wext.ibss.bssid) - return 0; - - /* fixed already - and no change */ - if (wdev->wext.ibss.bssid && bssid && - compare_ether_addr(bssid, wdev->wext.ibss.bssid) == 0) - return 0; - - wdev_lock(wdev); - err = 0; - if (wdev->ssid_len) - err = __cfg80211_leave_ibss(rdev, dev, true); - wdev_unlock(wdev); - - if (err) - return err; - - if (bssid) { - memcpy(wdev->wext.bssid, bssid, ETH_ALEN); - wdev->wext.ibss.bssid = wdev->wext.bssid; - } else - wdev->wext.ibss.bssid = NULL; - - mutex_lock(&rdev->devlist_mtx); - wdev_lock(wdev); - err = cfg80211_ibss_wext_join(rdev, wdev); - wdev_unlock(wdev); - mutex_unlock(&rdev->devlist_mtx); - - return err; -} - -int cfg80211_ibss_wext_giwap(struct net_device *dev, - struct iw_request_info *info, - struct sockaddr *ap_addr, char *extra) -{ - struct wireless_dev *wdev = dev->ieee80211_ptr; - - /* call only for ibss! */ - if (WARN_ON(wdev->iftype != NL80211_IFTYPE_ADHOC)) - return -EINVAL; - - ap_addr->sa_family = ARPHRD_ETHER; - - wdev_lock(wdev); - if (wdev->current_bss) - memcpy(ap_addr->sa_data, wdev->current_bss->pub.bssid, ETH_ALEN); - else if (wdev->wext.ibss.bssid) - memcpy(ap_addr->sa_data, wdev->wext.ibss.bssid, ETH_ALEN); - else - memset(ap_addr->sa_data, 0, ETH_ALEN); - - wdev_unlock(wdev); - - return 0; -} -#endif diff --git a/openairITS/mac/DOT11/net/wireless/lib80211.c b/openairITS/mac/DOT11/net/wireless/lib80211.c deleted file mode 100644 index 5451fa4e90..0000000000 --- a/openairITS/mac/DOT11/net/wireless/lib80211.c +++ /dev/null @@ -1,292 +0,0 @@ -/* - * lib80211 -- common bits for IEEE802.11 drivers - * - * Copyright(c) 2008 John W. Linville - * - * Portions copied from old ieee80211 component, w/ original copyright - * notices below: - * - * Host AP crypto routines - * - * Copyright (c) 2002-2003, Jouni Malinen - * Portions Copyright (C) 2004, Intel Corporation - * - */ - -#undef pr_fmt -#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -#define DRV_NAME "lib80211" - -#define DRV_DESCRIPTION "common routines for IEEE802.11 drivers" - -MODULE_DESCRIPTION(DRV_DESCRIPTION); -MODULE_AUTHOR("John W. Linville "); -MODULE_LICENSE("GPL"); - -struct lib80211_crypto_alg { - struct list_head list; - struct lib80211_crypto_ops *ops; -}; - -static LIST_HEAD(lib80211_crypto_algs); -static DEFINE_SPINLOCK(lib80211_crypto_lock); - -static void lib80211_crypt_deinit_entries(struct lib80211_crypt_info *info, - int force); -static void lib80211_crypt_quiescing(struct lib80211_crypt_info *info); -static void lib80211_crypt_deinit_handler(unsigned long data); - -const char *print_ssid(char *buf, const char *ssid, u8 ssid_len) -{ - const char *s = ssid; - char *d = buf; - - ssid_len = min_t(u8, ssid_len, IEEE80211_MAX_SSID_LEN); - while (ssid_len--) { - if (isprint(*s)) { - *d++ = *s++; - continue; - } - - *d++ = '\\'; - if (*s == '\0') - *d++ = '0'; - else if (*s == '\n') - *d++ = 'n'; - else if (*s == '\r') - *d++ = 'r'; - else if (*s == '\t') - *d++ = 't'; - else if (*s == '\\') - *d++ = '\\'; - else - d += snprintf(d, 3, "%03o", *s); - s++; - } - *d = '\0'; - return buf; -} -EXPORT_SYMBOL(print_ssid); - -int lib80211_crypt_info_init(struct lib80211_crypt_info *info, char *name, - spinlock_t *lock) -{ - memset(info, 0, sizeof(*info)); - - info->name = name; - info->lock = lock; - - INIT_LIST_HEAD(&info->crypt_deinit_list); - setup_timer(&info->crypt_deinit_timer, lib80211_crypt_deinit_handler, - (unsigned long)info); - - return 0; -} -EXPORT_SYMBOL(lib80211_crypt_info_init); - -void lib80211_crypt_info_free(struct lib80211_crypt_info *info) -{ - int i; - - lib80211_crypt_quiescing(info); - del_timer_sync(&info->crypt_deinit_timer); - lib80211_crypt_deinit_entries(info, 1); - - for (i = 0; i < NUM_WEP_KEYS; i++) { - struct lib80211_crypt_data *crypt = info->crypt[i]; - if (crypt) { - if (crypt->ops) { - crypt->ops->deinit(crypt->priv); - module_put(crypt->ops->owner); - } - kfree(crypt); - info->crypt[i] = NULL; - } - } -} -EXPORT_SYMBOL(lib80211_crypt_info_free); - -static void lib80211_crypt_deinit_entries(struct lib80211_crypt_info *info, - int force) -{ - struct lib80211_crypt_data *entry, *next; - unsigned long flags; - - spin_lock_irqsave(info->lock, flags); - list_for_each_entry_safe(entry, next, &info->crypt_deinit_list, list) { - if (atomic_read(&entry->refcnt) != 0 && !force) - continue; - - list_del(&entry->list); - - if (entry->ops) { - entry->ops->deinit(entry->priv); - module_put(entry->ops->owner); - } - kfree(entry); - } - spin_unlock_irqrestore(info->lock, flags); -} - -/* After this, crypt_deinit_list won't accept new members */ -static void lib80211_crypt_quiescing(struct lib80211_crypt_info *info) -{ - unsigned long flags; - - spin_lock_irqsave(info->lock, flags); - info->crypt_quiesced = 1; - spin_unlock_irqrestore(info->lock, flags); -} - -static void lib80211_crypt_deinit_handler(unsigned long data) -{ - struct lib80211_crypt_info *info = (struct lib80211_crypt_info *)data; - unsigned long flags; - - lib80211_crypt_deinit_entries(info, 0); - - spin_lock_irqsave(info->lock, flags); - if (!list_empty(&info->crypt_deinit_list) && !info->crypt_quiesced) { - printk(KERN_DEBUG "%s: entries remaining in delayed crypt " - "deletion list\n", info->name); - info->crypt_deinit_timer.expires = jiffies + HZ; - add_timer(&info->crypt_deinit_timer); - } - spin_unlock_irqrestore(info->lock, flags); -} - -void lib80211_crypt_delayed_deinit(struct lib80211_crypt_info *info, - struct lib80211_crypt_data **crypt) -{ - struct lib80211_crypt_data *tmp; - unsigned long flags; - - if (*crypt == NULL) - return; - - tmp = *crypt; - *crypt = NULL; - - /* must not run ops->deinit() while there may be pending encrypt or - * decrypt operations. Use a list of delayed deinits to avoid needing - * locking. */ - - spin_lock_irqsave(info->lock, flags); - if (!info->crypt_quiesced) { - list_add(&tmp->list, &info->crypt_deinit_list); - if (!timer_pending(&info->crypt_deinit_timer)) { - info->crypt_deinit_timer.expires = jiffies + HZ; - add_timer(&info->crypt_deinit_timer); - } - } - spin_unlock_irqrestore(info->lock, flags); -} -EXPORT_SYMBOL(lib80211_crypt_delayed_deinit); - -int lib80211_register_crypto_ops(struct lib80211_crypto_ops *ops) -{ - unsigned long flags; - struct lib80211_crypto_alg *alg; - - alg = kzalloc(sizeof(*alg), GFP_KERNEL); - if (alg == NULL) - return -ENOMEM; - - alg->ops = ops; - - spin_lock_irqsave(&lib80211_crypto_lock, flags); - list_add(&alg->list, &lib80211_crypto_algs); - spin_unlock_irqrestore(&lib80211_crypto_lock, flags); - - printk(KERN_DEBUG "lib80211_crypt: registered algorithm '%s'\n", - ops->name); - - return 0; -} -EXPORT_SYMBOL(lib80211_register_crypto_ops); - -int lib80211_unregister_crypto_ops(struct lib80211_crypto_ops *ops) -{ - struct lib80211_crypto_alg *alg; - unsigned long flags; - - spin_lock_irqsave(&lib80211_crypto_lock, flags); - list_for_each_entry(alg, &lib80211_crypto_algs, list) { - if (alg->ops == ops) - goto found; - } - spin_unlock_irqrestore(&lib80211_crypto_lock, flags); - return -EINVAL; - - found: - printk(KERN_DEBUG "lib80211_crypt: unregistered algorithm '%s'\n", - ops->name); - list_del(&alg->list); - spin_unlock_irqrestore(&lib80211_crypto_lock, flags); - kfree(alg); - return 0; -} -EXPORT_SYMBOL(lib80211_unregister_crypto_ops); - -struct lib80211_crypto_ops *lib80211_get_crypto_ops(const char *name) -{ - struct lib80211_crypto_alg *alg; - unsigned long flags; - - spin_lock_irqsave(&lib80211_crypto_lock, flags); - list_for_each_entry(alg, &lib80211_crypto_algs, list) { - if (strcmp(alg->ops->name, name) == 0) - goto found; - } - spin_unlock_irqrestore(&lib80211_crypto_lock, flags); - return NULL; - - found: - spin_unlock_irqrestore(&lib80211_crypto_lock, flags); - return alg->ops; -} -EXPORT_SYMBOL(lib80211_get_crypto_ops); - -static void *lib80211_crypt_null_init(int keyidx) -{ - return (void *)1; -} - -static void lib80211_crypt_null_deinit(void *priv) -{ -} - -static struct lib80211_crypto_ops lib80211_crypt_null = { - .name = "NULL", - .init = lib80211_crypt_null_init, - .deinit = lib80211_crypt_null_deinit, - .owner = THIS_MODULE, -}; - -static int __init lib80211_init(void) -{ - pr_info(DRV_DESCRIPTION "\n"); - return lib80211_register_crypto_ops(&lib80211_crypt_null); -} - -static void __exit lib80211_exit(void) -{ - lib80211_unregister_crypto_ops(&lib80211_crypt_null); - BUG_ON(!list_empty(&lib80211_crypto_algs)); -} - -module_init(lib80211_init); -module_exit(lib80211_exit); diff --git a/openairITS/mac/DOT11/net/wireless/lib80211_crypt_ccmp.c b/openairITS/mac/DOT11/net/wireless/lib80211_crypt_ccmp.c deleted file mode 100644 index 755738d26b..0000000000 --- a/openairITS/mac/DOT11/net/wireless/lib80211_crypt_ccmp.c +++ /dev/null @@ -1,491 +0,0 @@ -/* - * lib80211 crypt: host-based CCMP encryption implementation for lib80211 - * - * Copyright (c) 2003-2004, Jouni Malinen - * Copyright (c) 2008, John W. Linville - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. See README and COPYING for - * more details. - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -#include - -#include - -MODULE_AUTHOR("Jouni Malinen"); -MODULE_DESCRIPTION("Host AP crypt: CCMP"); -MODULE_LICENSE("GPL"); - -#define AES_BLOCK_LEN 16 -#define CCMP_HDR_LEN 8 -#define CCMP_MIC_LEN 8 -#define CCMP_TK_LEN 16 -#define CCMP_PN_LEN 6 - -struct lib80211_ccmp_data { - u8 key[CCMP_TK_LEN]; - int key_set; - - u8 tx_pn[CCMP_PN_LEN]; - u8 rx_pn[CCMP_PN_LEN]; - - u32 dot11RSNAStatsCCMPFormatErrors; - u32 dot11RSNAStatsCCMPReplays; - u32 dot11RSNAStatsCCMPDecryptErrors; - - int key_idx; - - struct crypto_cipher *tfm; - - /* scratch buffers for virt_to_page() (crypto API) */ - u8 tx_b0[AES_BLOCK_LEN], tx_b[AES_BLOCK_LEN], - tx_e[AES_BLOCK_LEN], tx_s0[AES_BLOCK_LEN]; - u8 rx_b0[AES_BLOCK_LEN], rx_b[AES_BLOCK_LEN], rx_a[AES_BLOCK_LEN]; -}; - -static inline void lib80211_ccmp_aes_encrypt(struct crypto_cipher *tfm, - const u8 pt[16], u8 ct[16]) -{ - crypto_cipher_encrypt_one(tfm, ct, pt); -} - -static void *lib80211_ccmp_init(int key_idx) -{ - struct lib80211_ccmp_data *priv; - - priv = kzalloc(sizeof(*priv), GFP_ATOMIC); - if (priv == NULL) - goto fail; - priv->key_idx = key_idx; - - priv->tfm = crypto_alloc_cipher("aes", 0, CRYPTO_ALG_ASYNC); - if (IS_ERR(priv->tfm)) { - priv->tfm = NULL; - goto fail; - } - - return priv; - - fail: - if (priv) { - if (priv->tfm) - crypto_free_cipher(priv->tfm); - kfree(priv); - } - - return NULL; -} - -static void lib80211_ccmp_deinit(void *priv) -{ - struct lib80211_ccmp_data *_priv = priv; - if (_priv && _priv->tfm) - crypto_free_cipher(_priv->tfm); - kfree(priv); -} - -static inline void xor_block(u8 * b, u8 * a, size_t len) -{ - int i; - for (i = 0; i < len; i++) - b[i] ^= a[i]; -} - -static void ccmp_init_blocks(struct crypto_cipher *tfm, - struct ieee80211_hdr *hdr, - u8 * pn, size_t dlen, u8 * b0, u8 * auth, u8 * s0) -{ - u8 *pos, qc = 0; - size_t aad_len; - int a4_included, qc_included; - u8 aad[2 * AES_BLOCK_LEN]; - - a4_included = ieee80211_has_a4(hdr->frame_control); - qc_included = ieee80211_is_data_qos(hdr->frame_control); - - aad_len = 22; - if (a4_included) - aad_len += 6; - if (qc_included) { - pos = (u8 *) & hdr->addr4; - if (a4_included) - pos += 6; - qc = *pos & 0x0f; - aad_len += 2; - } - - /* CCM Initial Block: - * Flag (Include authentication header, M=3 (8-octet MIC), - * L=1 (2-octet Dlen)) - * Nonce: 0x00 | A2 | PN - * Dlen */ - b0[0] = 0x59; - b0[1] = qc; - memcpy(b0 + 2, hdr->addr2, ETH_ALEN); - memcpy(b0 + 8, pn, CCMP_PN_LEN); - b0[14] = (dlen >> 8) & 0xff; - b0[15] = dlen & 0xff; - - /* AAD: - * FC with bits 4..6 and 11..13 masked to zero; 14 is always one - * A1 | A2 | A3 - * SC with bits 4..15 (seq#) masked to zero - * A4 (if present) - * QC (if present) - */ - pos = (u8 *) hdr; - aad[0] = 0; /* aad_len >> 8 */ - aad[1] = aad_len & 0xff; - aad[2] = pos[0] & 0x8f; - aad[3] = pos[1] & 0xc7; - memcpy(aad + 4, hdr->addr1, 3 * ETH_ALEN); - pos = (u8 *) & hdr->seq_ctrl; - aad[22] = pos[0] & 0x0f; - aad[23] = 0; /* all bits masked */ - memset(aad + 24, 0, 8); - if (a4_included) - memcpy(aad + 24, hdr->addr4, ETH_ALEN); - if (qc_included) { - aad[a4_included ? 30 : 24] = qc; - /* rest of QC masked */ - } - - /* Start with the first block and AAD */ - lib80211_ccmp_aes_encrypt(tfm, b0, auth); - xor_block(auth, aad, AES_BLOCK_LEN); - lib80211_ccmp_aes_encrypt(tfm, auth, auth); - xor_block(auth, &aad[AES_BLOCK_LEN], AES_BLOCK_LEN); - lib80211_ccmp_aes_encrypt(tfm, auth, auth); - b0[0] &= 0x07; - b0[14] = b0[15] = 0; - lib80211_ccmp_aes_encrypt(tfm, b0, s0); -} - -static int lib80211_ccmp_hdr(struct sk_buff *skb, int hdr_len, - u8 *aeskey, int keylen, void *priv) -{ - struct lib80211_ccmp_data *key = priv; - int i; - u8 *pos; - - if (skb_headroom(skb) < CCMP_HDR_LEN || skb->len < hdr_len) - return -1; - - if (aeskey != NULL && keylen >= CCMP_TK_LEN) - memcpy(aeskey, key->key, CCMP_TK_LEN); - - pos = skb_push(skb, CCMP_HDR_LEN); - memmove(pos, pos + CCMP_HDR_LEN, hdr_len); - pos += hdr_len; - - i = CCMP_PN_LEN - 1; - while (i >= 0) { - key->tx_pn[i]++; - if (key->tx_pn[i] != 0) - break; - i--; - } - - *pos++ = key->tx_pn[5]; - *pos++ = key->tx_pn[4]; - *pos++ = 0; - *pos++ = (key->key_idx << 6) | (1 << 5) /* Ext IV included */ ; - *pos++ = key->tx_pn[3]; - *pos++ = key->tx_pn[2]; - *pos++ = key->tx_pn[1]; - *pos++ = key->tx_pn[0]; - - return CCMP_HDR_LEN; -} - -static int lib80211_ccmp_encrypt(struct sk_buff *skb, int hdr_len, void *priv) -{ - struct lib80211_ccmp_data *key = priv; - int data_len, i, blocks, last, len; - u8 *pos, *mic; - struct ieee80211_hdr *hdr; - u8 *b0 = key->tx_b0; - u8 *b = key->tx_b; - u8 *e = key->tx_e; - u8 *s0 = key->tx_s0; - - if (skb_tailroom(skb) < CCMP_MIC_LEN || skb->len < hdr_len) - return -1; - - data_len = skb->len - hdr_len; - len = lib80211_ccmp_hdr(skb, hdr_len, NULL, 0, priv); - if (len < 0) - return -1; - - pos = skb->data + hdr_len + CCMP_HDR_LEN; - hdr = (struct ieee80211_hdr *)skb->data; - ccmp_init_blocks(key->tfm, hdr, key->tx_pn, data_len, b0, b, s0); - - blocks = DIV_ROUND_UP(data_len, AES_BLOCK_LEN); - last = data_len % AES_BLOCK_LEN; - - for (i = 1; i <= blocks; i++) { - len = (i == blocks && last) ? last : AES_BLOCK_LEN; - /* Authentication */ - xor_block(b, pos, len); - lib80211_ccmp_aes_encrypt(key->tfm, b, b); - /* Encryption, with counter */ - b0[14] = (i >> 8) & 0xff; - b0[15] = i & 0xff; - lib80211_ccmp_aes_encrypt(key->tfm, b0, e); - xor_block(pos, e, len); - pos += len; - } - - mic = skb_put(skb, CCMP_MIC_LEN); - for (i = 0; i < CCMP_MIC_LEN; i++) - mic[i] = b[i] ^ s0[i]; - - return 0; -} - -/* - * deal with seq counter wrapping correctly. - * refer to timer_after() for jiffies wrapping handling - */ -static inline int ccmp_replay_check(u8 *pn_n, u8 *pn_o) -{ - u32 iv32_n, iv16_n; - u32 iv32_o, iv16_o; - - iv32_n = (pn_n[0] << 24) | (pn_n[1] << 16) | (pn_n[2] << 8) | pn_n[3]; - iv16_n = (pn_n[4] << 8) | pn_n[5]; - - iv32_o = (pn_o[0] << 24) | (pn_o[1] << 16) | (pn_o[2] << 8) | pn_o[3]; - iv16_o = (pn_o[4] << 8) | pn_o[5]; - - if ((s32)iv32_n - (s32)iv32_o < 0 || - (iv32_n == iv32_o && iv16_n <= iv16_o)) - return 1; - return 0; -} - -static int lib80211_ccmp_decrypt(struct sk_buff *skb, int hdr_len, void *priv) -{ - struct lib80211_ccmp_data *key = priv; - u8 keyidx, *pos; - struct ieee80211_hdr *hdr; - u8 *b0 = key->rx_b0; - u8 *b = key->rx_b; - u8 *a = key->rx_a; - u8 pn[6]; - int i, blocks, last, len; - size_t data_len = skb->len - hdr_len - CCMP_HDR_LEN - CCMP_MIC_LEN; - u8 *mic = skb->data + skb->len - CCMP_MIC_LEN; - - if (skb->len < hdr_len + CCMP_HDR_LEN + CCMP_MIC_LEN) { - key->dot11RSNAStatsCCMPFormatErrors++; - return -1; - } - - hdr = (struct ieee80211_hdr *)skb->data; - pos = skb->data + hdr_len; - keyidx = pos[3]; - if (!(keyidx & (1 << 5))) { - if (net_ratelimit()) { - printk(KERN_DEBUG "CCMP: received packet without ExtIV" - " flag from %pM\n", hdr->addr2); - } - key->dot11RSNAStatsCCMPFormatErrors++; - return -2; - } - keyidx >>= 6; - if (key->key_idx != keyidx) { - printk(KERN_DEBUG "CCMP: RX tkey->key_idx=%d frame " - "keyidx=%d priv=%p\n", key->key_idx, keyidx, priv); - return -6; - } - if (!key->key_set) { - if (net_ratelimit()) { - printk(KERN_DEBUG "CCMP: received packet from %pM" - " with keyid=%d that does not have a configured" - " key\n", hdr->addr2, keyidx); - } - return -3; - } - - pn[0] = pos[7]; - pn[1] = pos[6]; - pn[2] = pos[5]; - pn[3] = pos[4]; - pn[4] = pos[1]; - pn[5] = pos[0]; - pos += 8; - - if (ccmp_replay_check(pn, key->rx_pn)) { -#ifdef CONFIG_LIB80211_DEBUG - if (net_ratelimit()) { - printk(KERN_DEBUG "CCMP: replay detected: STA=%pM " - "previous PN %02x%02x%02x%02x%02x%02x " - "received PN %02x%02x%02x%02x%02x%02x\n", - hdr->addr2, - key->rx_pn[0], key->rx_pn[1], key->rx_pn[2], - key->rx_pn[3], key->rx_pn[4], key->rx_pn[5], - pn[0], pn[1], pn[2], pn[3], pn[4], pn[5]); - } -#endif - key->dot11RSNAStatsCCMPReplays++; - return -4; - } - - ccmp_init_blocks(key->tfm, hdr, pn, data_len, b0, a, b); - xor_block(mic, b, CCMP_MIC_LEN); - - blocks = DIV_ROUND_UP(data_len, AES_BLOCK_LEN); - last = data_len % AES_BLOCK_LEN; - - for (i = 1; i <= blocks; i++) { - len = (i == blocks && last) ? last : AES_BLOCK_LEN; - /* Decrypt, with counter */ - b0[14] = (i >> 8) & 0xff; - b0[15] = i & 0xff; - lib80211_ccmp_aes_encrypt(key->tfm, b0, b); - xor_block(pos, b, len); - /* Authentication */ - xor_block(a, pos, len); - lib80211_ccmp_aes_encrypt(key->tfm, a, a); - pos += len; - } - - if (memcmp(mic, a, CCMP_MIC_LEN) != 0) { - if (net_ratelimit()) { - printk(KERN_DEBUG "CCMP: decrypt failed: STA=" - "%pM\n", hdr->addr2); - } - key->dot11RSNAStatsCCMPDecryptErrors++; - return -5; - } - - memcpy(key->rx_pn, pn, CCMP_PN_LEN); - - /* Remove hdr and MIC */ - memmove(skb->data + CCMP_HDR_LEN, skb->data, hdr_len); - skb_pull(skb, CCMP_HDR_LEN); - skb_trim(skb, skb->len - CCMP_MIC_LEN); - - return keyidx; -} - -static int lib80211_ccmp_set_key(void *key, int len, u8 * seq, void *priv) -{ - struct lib80211_ccmp_data *data = priv; - int keyidx; - struct crypto_cipher *tfm = data->tfm; - - keyidx = data->key_idx; - memset(data, 0, sizeof(*data)); - data->key_idx = keyidx; - data->tfm = tfm; - if (len == CCMP_TK_LEN) { - memcpy(data->key, key, CCMP_TK_LEN); - data->key_set = 1; - if (seq) { - data->rx_pn[0] = seq[5]; - data->rx_pn[1] = seq[4]; - data->rx_pn[2] = seq[3]; - data->rx_pn[3] = seq[2]; - data->rx_pn[4] = seq[1]; - data->rx_pn[5] = seq[0]; - } - crypto_cipher_setkey(data->tfm, data->key, CCMP_TK_LEN); - } else if (len == 0) - data->key_set = 0; - else - return -1; - - return 0; -} - -static int lib80211_ccmp_get_key(void *key, int len, u8 * seq, void *priv) -{ - struct lib80211_ccmp_data *data = priv; - - if (len < CCMP_TK_LEN) - return -1; - - if (!data->key_set) - return 0; - memcpy(key, data->key, CCMP_TK_LEN); - - if (seq) { - seq[0] = data->tx_pn[5]; - seq[1] = data->tx_pn[4]; - seq[2] = data->tx_pn[3]; - seq[3] = data->tx_pn[2]; - seq[4] = data->tx_pn[1]; - seq[5] = data->tx_pn[0]; - } - - return CCMP_TK_LEN; -} - -static char *lib80211_ccmp_print_stats(char *p, void *priv) -{ - struct lib80211_ccmp_data *ccmp = priv; - - p += sprintf(p, "key[%d] alg=CCMP key_set=%d " - "tx_pn=%02x%02x%02x%02x%02x%02x " - "rx_pn=%02x%02x%02x%02x%02x%02x " - "format_errors=%d replays=%d decrypt_errors=%d\n", - ccmp->key_idx, ccmp->key_set, - ccmp->tx_pn[0], ccmp->tx_pn[1], ccmp->tx_pn[2], - ccmp->tx_pn[3], ccmp->tx_pn[4], ccmp->tx_pn[5], - ccmp->rx_pn[0], ccmp->rx_pn[1], ccmp->rx_pn[2], - ccmp->rx_pn[3], ccmp->rx_pn[4], ccmp->rx_pn[5], - ccmp->dot11RSNAStatsCCMPFormatErrors, - ccmp->dot11RSNAStatsCCMPReplays, - ccmp->dot11RSNAStatsCCMPDecryptErrors); - - return p; -} - -static struct lib80211_crypto_ops lib80211_crypt_ccmp = { - .name = "CCMP", - .init = lib80211_ccmp_init, - .deinit = lib80211_ccmp_deinit, - .encrypt_mpdu = lib80211_ccmp_encrypt, - .decrypt_mpdu = lib80211_ccmp_decrypt, - .encrypt_msdu = NULL, - .decrypt_msdu = NULL, - .set_key = lib80211_ccmp_set_key, - .get_key = lib80211_ccmp_get_key, - .print_stats = lib80211_ccmp_print_stats, - .extra_mpdu_prefix_len = CCMP_HDR_LEN, - .extra_mpdu_postfix_len = CCMP_MIC_LEN, - .owner = THIS_MODULE, -}; - -static int __init lib80211_crypto_ccmp_init(void) -{ - return lib80211_register_crypto_ops(&lib80211_crypt_ccmp); -} - -static void __exit lib80211_crypto_ccmp_exit(void) -{ - lib80211_unregister_crypto_ops(&lib80211_crypt_ccmp); -} - -module_init(lib80211_crypto_ccmp_init); -module_exit(lib80211_crypto_ccmp_exit); diff --git a/openairITS/mac/DOT11/net/wireless/lib80211_crypt_tkip.c b/openairITS/mac/DOT11/net/wireless/lib80211_crypt_tkip.c deleted file mode 100644 index 0b5be8c660..0000000000 --- a/openairITS/mac/DOT11/net/wireless/lib80211_crypt_tkip.c +++ /dev/null @@ -1,783 +0,0 @@ -/* - * lib80211 crypt: host-based TKIP encryption implementation for lib80211 - * - * Copyright (c) 2003-2004, Jouni Malinen - * Copyright (c) 2008, John W. Linville - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. See README and COPYING for - * more details. - */ - -#undef pr_fmt -#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include - -#include -#include - -#include - -MODULE_AUTHOR("Jouni Malinen"); -MODULE_DESCRIPTION("lib80211 crypt: TKIP"); -MODULE_LICENSE("GPL"); - -#define TKIP_HDR_LEN 8 - -struct lib80211_tkip_data { -#define TKIP_KEY_LEN 32 - u8 key[TKIP_KEY_LEN]; - int key_set; - - u32 tx_iv32; - u16 tx_iv16; - u16 tx_ttak[5]; - int tx_phase1_done; - - u32 rx_iv32; - u16 rx_iv16; - u16 rx_ttak[5]; - int rx_phase1_done; - u32 rx_iv32_new; - u16 rx_iv16_new; - - u32 dot11RSNAStatsTKIPReplays; - u32 dot11RSNAStatsTKIPICVErrors; - u32 dot11RSNAStatsTKIPLocalMICFailures; - - int key_idx; - - struct crypto_blkcipher *rx_tfm_arc4; - struct crypto_hash *rx_tfm_michael; - struct crypto_blkcipher *tx_tfm_arc4; - struct crypto_hash *tx_tfm_michael; - - /* scratch buffers for virt_to_page() (crypto API) */ - u8 rx_hdr[16], tx_hdr[16]; - - unsigned long flags; -}; - -static unsigned long lib80211_tkip_set_flags(unsigned long flags, void *priv) -{ - struct lib80211_tkip_data *_priv = priv; - unsigned long old_flags = _priv->flags; - _priv->flags = flags; - return old_flags; -} - -static unsigned long lib80211_tkip_get_flags(void *priv) -{ - struct lib80211_tkip_data *_priv = priv; - return _priv->flags; -} - -static void *lib80211_tkip_init(int key_idx) -{ - struct lib80211_tkip_data *priv; - - priv = kzalloc(sizeof(*priv), GFP_ATOMIC); - if (priv == NULL) - goto fail; - - priv->key_idx = key_idx; - - priv->tx_tfm_arc4 = crypto_alloc_blkcipher("ecb(arc4)", 0, - CRYPTO_ALG_ASYNC); - if (IS_ERR(priv->tx_tfm_arc4)) { - priv->tx_tfm_arc4 = NULL; - goto fail; - } - - priv->tx_tfm_michael = crypto_alloc_hash("michael_mic", 0, - CRYPTO_ALG_ASYNC); - if (IS_ERR(priv->tx_tfm_michael)) { - priv->tx_tfm_michael = NULL; - goto fail; - } - - priv->rx_tfm_arc4 = crypto_alloc_blkcipher("ecb(arc4)", 0, - CRYPTO_ALG_ASYNC); - if (IS_ERR(priv->rx_tfm_arc4)) { - priv->rx_tfm_arc4 = NULL; - goto fail; - } - - priv->rx_tfm_michael = crypto_alloc_hash("michael_mic", 0, - CRYPTO_ALG_ASYNC); - if (IS_ERR(priv->rx_tfm_michael)) { - priv->rx_tfm_michael = NULL; - goto fail; - } - - return priv; - - fail: - if (priv) { - if (priv->tx_tfm_michael) - crypto_free_hash(priv->tx_tfm_michael); - if (priv->tx_tfm_arc4) - crypto_free_blkcipher(priv->tx_tfm_arc4); - if (priv->rx_tfm_michael) - crypto_free_hash(priv->rx_tfm_michael); - if (priv->rx_tfm_arc4) - crypto_free_blkcipher(priv->rx_tfm_arc4); - kfree(priv); - } - - return NULL; -} - -static void lib80211_tkip_deinit(void *priv) -{ - struct lib80211_tkip_data *_priv = priv; - if (_priv) { - if (_priv->tx_tfm_michael) - crypto_free_hash(_priv->tx_tfm_michael); - if (_priv->tx_tfm_arc4) - crypto_free_blkcipher(_priv->tx_tfm_arc4); - if (_priv->rx_tfm_michael) - crypto_free_hash(_priv->rx_tfm_michael); - if (_priv->rx_tfm_arc4) - crypto_free_blkcipher(_priv->rx_tfm_arc4); - } - kfree(priv); -} - -static inline u16 RotR1(u16 val) -{ - return (val >> 1) | (val << 15); -} - -static inline u8 Lo8(u16 val) -{ - return val & 0xff; -} - -static inline u8 Hi8(u16 val) -{ - return val >> 8; -} - -static inline u16 Lo16(u32 val) -{ - return val & 0xffff; -} - -static inline u16 Hi16(u32 val) -{ - return val >> 16; -} - -static inline u16 Mk16(u8 hi, u8 lo) -{ - return lo | (((u16) hi) << 8); -} - -static inline u16 Mk16_le(__le16 * v) -{ - return le16_to_cpu(*v); -} - -static const u16 Sbox[256] = { - 0xC6A5, 0xF884, 0xEE99, 0xF68D, 0xFF0D, 0xD6BD, 0xDEB1, 0x9154, - 0x6050, 0x0203, 0xCEA9, 0x567D, 0xE719, 0xB562, 0x4DE6, 0xEC9A, - 0x8F45, 0x1F9D, 0x8940, 0xFA87, 0xEF15, 0xB2EB, 0x8EC9, 0xFB0B, - 0x41EC, 0xB367, 0x5FFD, 0x45EA, 0x23BF, 0x53F7, 0xE496, 0x9B5B, - 0x75C2, 0xE11C, 0x3DAE, 0x4C6A, 0x6C5A, 0x7E41, 0xF502, 0x834F, - 0x685C, 0x51F4, 0xD134, 0xF908, 0xE293, 0xAB73, 0x6253, 0x2A3F, - 0x080C, 0x9552, 0x4665, 0x9D5E, 0x3028, 0x37A1, 0x0A0F, 0x2FB5, - 0x0E09, 0x2436, 0x1B9B, 0xDF3D, 0xCD26, 0x4E69, 0x7FCD, 0xEA9F, - 0x121B, 0x1D9E, 0x5874, 0x342E, 0x362D, 0xDCB2, 0xB4EE, 0x5BFB, - 0xA4F6, 0x764D, 0xB761, 0x7DCE, 0x527B, 0xDD3E, 0x5E71, 0x1397, - 0xA6F5, 0xB968, 0x0000, 0xC12C, 0x4060, 0xE31F, 0x79C8, 0xB6ED, - 0xD4BE, 0x8D46, 0x67D9, 0x724B, 0x94DE, 0x98D4, 0xB0E8, 0x854A, - 0xBB6B, 0xC52A, 0x4FE5, 0xED16, 0x86C5, 0x9AD7, 0x6655, 0x1194, - 0x8ACF, 0xE910, 0x0406, 0xFE81, 0xA0F0, 0x7844, 0x25BA, 0x4BE3, - 0xA2F3, 0x5DFE, 0x80C0, 0x058A, 0x3FAD, 0x21BC, 0x7048, 0xF104, - 0x63DF, 0x77C1, 0xAF75, 0x4263, 0x2030, 0xE51A, 0xFD0E, 0xBF6D, - 0x814C, 0x1814, 0x2635, 0xC32F, 0xBEE1, 0x35A2, 0x88CC, 0x2E39, - 0x9357, 0x55F2, 0xFC82, 0x7A47, 0xC8AC, 0xBAE7, 0x322B, 0xE695, - 0xC0A0, 0x1998, 0x9ED1, 0xA37F, 0x4466, 0x547E, 0x3BAB, 0x0B83, - 0x8CCA, 0xC729, 0x6BD3, 0x283C, 0xA779, 0xBCE2, 0x161D, 0xAD76, - 0xDB3B, 0x6456, 0x744E, 0x141E, 0x92DB, 0x0C0A, 0x486C, 0xB8E4, - 0x9F5D, 0xBD6E, 0x43EF, 0xC4A6, 0x39A8, 0x31A4, 0xD337, 0xF28B, - 0xD532, 0x8B43, 0x6E59, 0xDAB7, 0x018C, 0xB164, 0x9CD2, 0x49E0, - 0xD8B4, 0xACFA, 0xF307, 0xCF25, 0xCAAF, 0xF48E, 0x47E9, 0x1018, - 0x6FD5, 0xF088, 0x4A6F, 0x5C72, 0x3824, 0x57F1, 0x73C7, 0x9751, - 0xCB23, 0xA17C, 0xE89C, 0x3E21, 0x96DD, 0x61DC, 0x0D86, 0x0F85, - 0xE090, 0x7C42, 0x71C4, 0xCCAA, 0x90D8, 0x0605, 0xF701, 0x1C12, - 0xC2A3, 0x6A5F, 0xAEF9, 0x69D0, 0x1791, 0x9958, 0x3A27, 0x27B9, - 0xD938, 0xEB13, 0x2BB3, 0x2233, 0xD2BB, 0xA970, 0x0789, 0x33A7, - 0x2DB6, 0x3C22, 0x1592, 0xC920, 0x8749, 0xAAFF, 0x5078, 0xA57A, - 0x038F, 0x59F8, 0x0980, 0x1A17, 0x65DA, 0xD731, 0x84C6, 0xD0B8, - 0x82C3, 0x29B0, 0x5A77, 0x1E11, 0x7BCB, 0xA8FC, 0x6DD6, 0x2C3A, -}; - -static inline u16 _S_(u16 v) -{ - u16 t = Sbox[Hi8(v)]; - return Sbox[Lo8(v)] ^ ((t << 8) | (t >> 8)); -} - -#define PHASE1_LOOP_COUNT 8 - -static void tkip_mixing_phase1(u16 * TTAK, const u8 * TK, const u8 * TA, - u32 IV32) -{ - int i, j; - - /* Initialize the 80-bit TTAK from TSC (IV32) and TA[0..5] */ - TTAK[0] = Lo16(IV32); - TTAK[1] = Hi16(IV32); - TTAK[2] = Mk16(TA[1], TA[0]); - TTAK[3] = Mk16(TA[3], TA[2]); - TTAK[4] = Mk16(TA[5], TA[4]); - - for (i = 0; i < PHASE1_LOOP_COUNT; i++) { - j = 2 * (i & 1); - TTAK[0] += _S_(TTAK[4] ^ Mk16(TK[1 + j], TK[0 + j])); - TTAK[1] += _S_(TTAK[0] ^ Mk16(TK[5 + j], TK[4 + j])); - TTAK[2] += _S_(TTAK[1] ^ Mk16(TK[9 + j], TK[8 + j])); - TTAK[3] += _S_(TTAK[2] ^ Mk16(TK[13 + j], TK[12 + j])); - TTAK[4] += _S_(TTAK[3] ^ Mk16(TK[1 + j], TK[0 + j])) + i; - } -} - -static void tkip_mixing_phase2(u8 * WEPSeed, const u8 * TK, const u16 * TTAK, - u16 IV16) -{ - /* Make temporary area overlap WEP seed so that the final copy can be - * avoided on little endian hosts. */ - u16 *PPK = (u16 *) & WEPSeed[4]; - - /* Step 1 - make copy of TTAK and bring in TSC */ - PPK[0] = TTAK[0]; - PPK[1] = TTAK[1]; - PPK[2] = TTAK[2]; - PPK[3] = TTAK[3]; - PPK[4] = TTAK[4]; - PPK[5] = TTAK[4] + IV16; - - /* Step 2 - 96-bit bijective mixing using S-box */ - PPK[0] += _S_(PPK[5] ^ Mk16_le((__le16 *) & TK[0])); - PPK[1] += _S_(PPK[0] ^ Mk16_le((__le16 *) & TK[2])); - PPK[2] += _S_(PPK[1] ^ Mk16_le((__le16 *) & TK[4])); - PPK[3] += _S_(PPK[2] ^ Mk16_le((__le16 *) & TK[6])); - PPK[4] += _S_(PPK[3] ^ Mk16_le((__le16 *) & TK[8])); - PPK[5] += _S_(PPK[4] ^ Mk16_le((__le16 *) & TK[10])); - - PPK[0] += RotR1(PPK[5] ^ Mk16_le((__le16 *) & TK[12])); - PPK[1] += RotR1(PPK[0] ^ Mk16_le((__le16 *) & TK[14])); - PPK[2] += RotR1(PPK[1]); - PPK[3] += RotR1(PPK[2]); - PPK[4] += RotR1(PPK[3]); - PPK[5] += RotR1(PPK[4]); - - /* Step 3 - bring in last of TK bits, assign 24-bit WEP IV value - * WEPSeed[0..2] is transmitted as WEP IV */ - WEPSeed[0] = Hi8(IV16); - WEPSeed[1] = (Hi8(IV16) | 0x20) & 0x7F; - WEPSeed[2] = Lo8(IV16); - WEPSeed[3] = Lo8((PPK[5] ^ Mk16_le((__le16 *) & TK[0])) >> 1); - -#ifdef __BIG_ENDIAN - { - int i; - for (i = 0; i < 6; i++) - PPK[i] = (PPK[i] << 8) | (PPK[i] >> 8); - } -#endif -} - -static int lib80211_tkip_hdr(struct sk_buff *skb, int hdr_len, - u8 * rc4key, int keylen, void *priv) -{ - struct lib80211_tkip_data *tkey = priv; - u8 *pos; - struct ieee80211_hdr *hdr; - - hdr = (struct ieee80211_hdr *)skb->data; - - if (skb_headroom(skb) < TKIP_HDR_LEN || skb->len < hdr_len) - return -1; - - if (rc4key == NULL || keylen < 16) - return -1; - - if (!tkey->tx_phase1_done) { - tkip_mixing_phase1(tkey->tx_ttak, tkey->key, hdr->addr2, - tkey->tx_iv32); - tkey->tx_phase1_done = 1; - } - tkip_mixing_phase2(rc4key, tkey->key, tkey->tx_ttak, tkey->tx_iv16); - - pos = skb_push(skb, TKIP_HDR_LEN); - memmove(pos, pos + TKIP_HDR_LEN, hdr_len); - pos += hdr_len; - - *pos++ = *rc4key; - *pos++ = *(rc4key + 1); - *pos++ = *(rc4key + 2); - *pos++ = (tkey->key_idx << 6) | (1 << 5) /* Ext IV included */ ; - *pos++ = tkey->tx_iv32 & 0xff; - *pos++ = (tkey->tx_iv32 >> 8) & 0xff; - *pos++ = (tkey->tx_iv32 >> 16) & 0xff; - *pos++ = (tkey->tx_iv32 >> 24) & 0xff; - - tkey->tx_iv16++; - if (tkey->tx_iv16 == 0) { - tkey->tx_phase1_done = 0; - tkey->tx_iv32++; - } - - return TKIP_HDR_LEN; -} - -static int lib80211_tkip_encrypt(struct sk_buff *skb, int hdr_len, void *priv) -{ - struct lib80211_tkip_data *tkey = priv; - struct blkcipher_desc desc = { .tfm = tkey->tx_tfm_arc4 }; - int len; - u8 rc4key[16], *pos, *icv; - u32 crc; - struct scatterlist sg; - - if (tkey->flags & IEEE80211_CRYPTO_TKIP_COUNTERMEASURES) { - if (net_ratelimit()) { - struct ieee80211_hdr *hdr = - (struct ieee80211_hdr *)skb->data; - printk(KERN_DEBUG ": TKIP countermeasures: dropped " - "TX packet to %pM\n", hdr->addr1); - } - return -1; - } - - if (skb_tailroom(skb) < 4 || skb->len < hdr_len) - return -1; - - len = skb->len - hdr_len; - pos = skb->data + hdr_len; - - if ((lib80211_tkip_hdr(skb, hdr_len, rc4key, 16, priv)) < 0) - return -1; - - crc = ~crc32_le(~0, pos, len); - icv = skb_put(skb, 4); - icv[0] = crc; - icv[1] = crc >> 8; - icv[2] = crc >> 16; - icv[3] = crc >> 24; - - crypto_blkcipher_setkey(tkey->tx_tfm_arc4, rc4key, 16); - sg_init_one(&sg, pos, len + 4); - return crypto_blkcipher_encrypt(&desc, &sg, &sg, len + 4); -} - -/* - * deal with seq counter wrapping correctly. - * refer to timer_after() for jiffies wrapping handling - */ -static inline int tkip_replay_check(u32 iv32_n, u16 iv16_n, - u32 iv32_o, u16 iv16_o) -{ - if ((s32)iv32_n - (s32)iv32_o < 0 || - (iv32_n == iv32_o && iv16_n <= iv16_o)) - return 1; - return 0; -} - -static int lib80211_tkip_decrypt(struct sk_buff *skb, int hdr_len, void *priv) -{ - struct lib80211_tkip_data *tkey = priv; - struct blkcipher_desc desc = { .tfm = tkey->rx_tfm_arc4 }; - u8 rc4key[16]; - u8 keyidx, *pos; - u32 iv32; - u16 iv16; - struct ieee80211_hdr *hdr; - u8 icv[4]; - u32 crc; - struct scatterlist sg; - int plen; - - hdr = (struct ieee80211_hdr *)skb->data; - - if (tkey->flags & IEEE80211_CRYPTO_TKIP_COUNTERMEASURES) { - if (net_ratelimit()) { - printk(KERN_DEBUG ": TKIP countermeasures: dropped " - "received packet from %pM\n", hdr->addr2); - } - return -1; - } - - if (skb->len < hdr_len + TKIP_HDR_LEN + 4) - return -1; - - pos = skb->data + hdr_len; - keyidx = pos[3]; - if (!(keyidx & (1 << 5))) { - if (net_ratelimit()) { - printk(KERN_DEBUG "TKIP: received packet without ExtIV" - " flag from %pM\n", hdr->addr2); - } - return -2; - } - keyidx >>= 6; - if (tkey->key_idx != keyidx) { - printk(KERN_DEBUG "TKIP: RX tkey->key_idx=%d frame " - "keyidx=%d priv=%p\n", tkey->key_idx, keyidx, priv); - return -6; - } - if (!tkey->key_set) { - if (net_ratelimit()) { - printk(KERN_DEBUG "TKIP: received packet from %pM" - " with keyid=%d that does not have a configured" - " key\n", hdr->addr2, keyidx); - } - return -3; - } - iv16 = (pos[0] << 8) | pos[2]; - iv32 = pos[4] | (pos[5] << 8) | (pos[6] << 16) | (pos[7] << 24); - pos += TKIP_HDR_LEN; - - if (tkip_replay_check(iv32, iv16, tkey->rx_iv32, tkey->rx_iv16)) { -#ifdef CONFIG_LIB80211_DEBUG - if (net_ratelimit()) { - printk(KERN_DEBUG "TKIP: replay detected: STA=%pM" - " previous TSC %08x%04x received TSC " - "%08x%04x\n", hdr->addr2, - tkey->rx_iv32, tkey->rx_iv16, iv32, iv16); - } -#endif - tkey->dot11RSNAStatsTKIPReplays++; - return -4; - } - - if (iv32 != tkey->rx_iv32 || !tkey->rx_phase1_done) { - tkip_mixing_phase1(tkey->rx_ttak, tkey->key, hdr->addr2, iv32); - tkey->rx_phase1_done = 1; - } - tkip_mixing_phase2(rc4key, tkey->key, tkey->rx_ttak, iv16); - - plen = skb->len - hdr_len - 12; - - crypto_blkcipher_setkey(tkey->rx_tfm_arc4, rc4key, 16); - sg_init_one(&sg, pos, plen + 4); - if (crypto_blkcipher_decrypt(&desc, &sg, &sg, plen + 4)) { - if (net_ratelimit()) { - printk(KERN_DEBUG ": TKIP: failed to decrypt " - "received packet from %pM\n", - hdr->addr2); - } - return -7; - } - - crc = ~crc32_le(~0, pos, plen); - icv[0] = crc; - icv[1] = crc >> 8; - icv[2] = crc >> 16; - icv[3] = crc >> 24; - if (memcmp(icv, pos + plen, 4) != 0) { - if (iv32 != tkey->rx_iv32) { - /* Previously cached Phase1 result was already lost, so - * it needs to be recalculated for the next packet. */ - tkey->rx_phase1_done = 0; - } -#ifdef CONFIG_LIB80211_DEBUG - if (net_ratelimit()) { - printk(KERN_DEBUG "TKIP: ICV error detected: STA=" - "%pM\n", hdr->addr2); - } -#endif - tkey->dot11RSNAStatsTKIPICVErrors++; - return -5; - } - - /* Update real counters only after Michael MIC verification has - * completed */ - tkey->rx_iv32_new = iv32; - tkey->rx_iv16_new = iv16; - - /* Remove IV and ICV */ - memmove(skb->data + TKIP_HDR_LEN, skb->data, hdr_len); - skb_pull(skb, TKIP_HDR_LEN); - skb_trim(skb, skb->len - 4); - - return keyidx; -} - -static int michael_mic(struct crypto_hash *tfm_michael, u8 * key, u8 * hdr, - u8 * data, size_t data_len, u8 * mic) -{ - struct hash_desc desc; - struct scatterlist sg[2]; - - if (tfm_michael == NULL) { - pr_warn("%s(): tfm_michael == NULL\n", __func__); - return -1; - } - sg_init_table(sg, 2); - sg_set_buf(&sg[0], hdr, 16); - sg_set_buf(&sg[1], data, data_len); - - if (crypto_hash_setkey(tfm_michael, key, 8)) - return -1; - - desc.tfm = tfm_michael; - desc.flags = 0; - return crypto_hash_digest(&desc, sg, data_len + 16, mic); -} - -static void michael_mic_hdr(struct sk_buff *skb, u8 * hdr) -{ - struct ieee80211_hdr *hdr11; - - hdr11 = (struct ieee80211_hdr *)skb->data; - - switch (le16_to_cpu(hdr11->frame_control) & - (IEEE80211_FCTL_FROMDS | IEEE80211_FCTL_TODS)) { - case IEEE80211_FCTL_TODS: - memcpy(hdr, hdr11->addr3, ETH_ALEN); /* DA */ - memcpy(hdr + ETH_ALEN, hdr11->addr2, ETH_ALEN); /* SA */ - break; - case IEEE80211_FCTL_FROMDS: - memcpy(hdr, hdr11->addr1, ETH_ALEN); /* DA */ - memcpy(hdr + ETH_ALEN, hdr11->addr3, ETH_ALEN); /* SA */ - break; - case IEEE80211_FCTL_FROMDS | IEEE80211_FCTL_TODS: - memcpy(hdr, hdr11->addr3, ETH_ALEN); /* DA */ - memcpy(hdr + ETH_ALEN, hdr11->addr4, ETH_ALEN); /* SA */ - break; - case 0: - memcpy(hdr, hdr11->addr1, ETH_ALEN); /* DA */ - memcpy(hdr + ETH_ALEN, hdr11->addr2, ETH_ALEN); /* SA */ - break; - } - - if (ieee80211_is_data_qos(hdr11->frame_control)) { - hdr[12] = le16_to_cpu(*((__le16 *)ieee80211_get_qos_ctl(hdr11))) - & IEEE80211_QOS_CTL_TID_MASK; - } else - hdr[12] = 0; /* priority */ - - hdr[13] = hdr[14] = hdr[15] = 0; /* reserved */ -} - -static int lib80211_michael_mic_add(struct sk_buff *skb, int hdr_len, - void *priv) -{ - struct lib80211_tkip_data *tkey = priv; - u8 *pos; - - if (skb_tailroom(skb) < 8 || skb->len < hdr_len) { - printk(KERN_DEBUG "Invalid packet for Michael MIC add " - "(tailroom=%d hdr_len=%d skb->len=%d)\n", - skb_tailroom(skb), hdr_len, skb->len); - return -1; - } - - michael_mic_hdr(skb, tkey->tx_hdr); - pos = skb_put(skb, 8); - if (michael_mic(tkey->tx_tfm_michael, &tkey->key[16], tkey->tx_hdr, - skb->data + hdr_len, skb->len - 8 - hdr_len, pos)) - return -1; - - return 0; -} - -static void lib80211_michael_mic_failure(struct net_device *dev, - struct ieee80211_hdr *hdr, - int keyidx) -{ - union iwreq_data wrqu; - struct iw_michaelmicfailure ev; - - /* TODO: needed parameters: count, keyid, key type, TSC */ - memset(&ev, 0, sizeof(ev)); - ev.flags = keyidx & IW_MICFAILURE_KEY_ID; - if (hdr->addr1[0] & 0x01) - ev.flags |= IW_MICFAILURE_GROUP; - else - ev.flags |= IW_MICFAILURE_PAIRWISE; - ev.src_addr.sa_family = ARPHRD_ETHER; - memcpy(ev.src_addr.sa_data, hdr->addr2, ETH_ALEN); - memset(&wrqu, 0, sizeof(wrqu)); - wrqu.data.length = sizeof(ev); - wireless_send_event(dev, IWEVMICHAELMICFAILURE, &wrqu, (char *)&ev); -} - -static int lib80211_michael_mic_verify(struct sk_buff *skb, int keyidx, - int hdr_len, void *priv) -{ - struct lib80211_tkip_data *tkey = priv; - u8 mic[8]; - - if (!tkey->key_set) - return -1; - - michael_mic_hdr(skb, tkey->rx_hdr); - if (michael_mic(tkey->rx_tfm_michael, &tkey->key[24], tkey->rx_hdr, - skb->data + hdr_len, skb->len - 8 - hdr_len, mic)) - return -1; - if (memcmp(mic, skb->data + skb->len - 8, 8) != 0) { - struct ieee80211_hdr *hdr; - hdr = (struct ieee80211_hdr *)skb->data; - printk(KERN_DEBUG "%s: Michael MIC verification failed for " - "MSDU from %pM keyidx=%d\n", - skb->dev ? skb->dev->name : "N/A", hdr->addr2, - keyidx); - if (skb->dev) - lib80211_michael_mic_failure(skb->dev, hdr, keyidx); - tkey->dot11RSNAStatsTKIPLocalMICFailures++; - return -1; - } - - /* Update TSC counters for RX now that the packet verification has - * completed. */ - tkey->rx_iv32 = tkey->rx_iv32_new; - tkey->rx_iv16 = tkey->rx_iv16_new; - - skb_trim(skb, skb->len - 8); - - return 0; -} - -static int lib80211_tkip_set_key(void *key, int len, u8 * seq, void *priv) -{ - struct lib80211_tkip_data *tkey = priv; - int keyidx; - struct crypto_hash *tfm = tkey->tx_tfm_michael; - struct crypto_blkcipher *tfm2 = tkey->tx_tfm_arc4; - struct crypto_hash *tfm3 = tkey->rx_tfm_michael; - struct crypto_blkcipher *tfm4 = tkey->rx_tfm_arc4; - - keyidx = tkey->key_idx; - memset(tkey, 0, sizeof(*tkey)); - tkey->key_idx = keyidx; - tkey->tx_tfm_michael = tfm; - tkey->tx_tfm_arc4 = tfm2; - tkey->rx_tfm_michael = tfm3; - tkey->rx_tfm_arc4 = tfm4; - if (len == TKIP_KEY_LEN) { - memcpy(tkey->key, key, TKIP_KEY_LEN); - tkey->key_set = 1; - tkey->tx_iv16 = 1; /* TSC is initialized to 1 */ - if (seq) { - tkey->rx_iv32 = (seq[5] << 24) | (seq[4] << 16) | - (seq[3] << 8) | seq[2]; - tkey->rx_iv16 = (seq[1] << 8) | seq[0]; - } - } else if (len == 0) - tkey->key_set = 0; - else - return -1; - - return 0; -} - -static int lib80211_tkip_get_key(void *key, int len, u8 * seq, void *priv) -{ - struct lib80211_tkip_data *tkey = priv; - - if (len < TKIP_KEY_LEN) - return -1; - - if (!tkey->key_set) - return 0; - memcpy(key, tkey->key, TKIP_KEY_LEN); - - if (seq) { - /* Return the sequence number of the last transmitted frame. */ - u16 iv16 = tkey->tx_iv16; - u32 iv32 = tkey->tx_iv32; - if (iv16 == 0) - iv32--; - iv16--; - seq[0] = tkey->tx_iv16; - seq[1] = tkey->tx_iv16 >> 8; - seq[2] = tkey->tx_iv32; - seq[3] = tkey->tx_iv32 >> 8; - seq[4] = tkey->tx_iv32 >> 16; - seq[5] = tkey->tx_iv32 >> 24; - } - - return TKIP_KEY_LEN; -} - -static char *lib80211_tkip_print_stats(char *p, void *priv) -{ - struct lib80211_tkip_data *tkip = priv; - p += sprintf(p, "key[%d] alg=TKIP key_set=%d " - "tx_pn=%02x%02x%02x%02x%02x%02x " - "rx_pn=%02x%02x%02x%02x%02x%02x " - "replays=%d icv_errors=%d local_mic_failures=%d\n", - tkip->key_idx, tkip->key_set, - (tkip->tx_iv32 >> 24) & 0xff, - (tkip->tx_iv32 >> 16) & 0xff, - (tkip->tx_iv32 >> 8) & 0xff, - tkip->tx_iv32 & 0xff, - (tkip->tx_iv16 >> 8) & 0xff, - tkip->tx_iv16 & 0xff, - (tkip->rx_iv32 >> 24) & 0xff, - (tkip->rx_iv32 >> 16) & 0xff, - (tkip->rx_iv32 >> 8) & 0xff, - tkip->rx_iv32 & 0xff, - (tkip->rx_iv16 >> 8) & 0xff, - tkip->rx_iv16 & 0xff, - tkip->dot11RSNAStatsTKIPReplays, - tkip->dot11RSNAStatsTKIPICVErrors, - tkip->dot11RSNAStatsTKIPLocalMICFailures); - return p; -} - -static struct lib80211_crypto_ops lib80211_crypt_tkip = { - .name = "TKIP", - .init = lib80211_tkip_init, - .deinit = lib80211_tkip_deinit, - .encrypt_mpdu = lib80211_tkip_encrypt, - .decrypt_mpdu = lib80211_tkip_decrypt, - .encrypt_msdu = lib80211_michael_mic_add, - .decrypt_msdu = lib80211_michael_mic_verify, - .set_key = lib80211_tkip_set_key, - .get_key = lib80211_tkip_get_key, - .print_stats = lib80211_tkip_print_stats, - .extra_mpdu_prefix_len = 4 + 4, /* IV + ExtIV */ - .extra_mpdu_postfix_len = 4, /* ICV */ - .extra_msdu_postfix_len = 8, /* MIC */ - .get_flags = lib80211_tkip_get_flags, - .set_flags = lib80211_tkip_set_flags, - .owner = THIS_MODULE, -}; - -static int __init lib80211_crypto_tkip_init(void) -{ - return lib80211_register_crypto_ops(&lib80211_crypt_tkip); -} - -static void __exit lib80211_crypto_tkip_exit(void) -{ - lib80211_unregister_crypto_ops(&lib80211_crypt_tkip); -} - -module_init(lib80211_crypto_tkip_init); -module_exit(lib80211_crypto_tkip_exit); diff --git a/openairITS/mac/DOT11/net/wireless/lib80211_crypt_wep.c b/openairITS/mac/DOT11/net/wireless/lib80211_crypt_wep.c deleted file mode 100644 index c1304018fc..0000000000 --- a/openairITS/mac/DOT11/net/wireless/lib80211_crypt_wep.c +++ /dev/null @@ -1,290 +0,0 @@ -/* - * lib80211 crypt: host-based WEP encryption implementation for lib80211 - * - * Copyright (c) 2002-2004, Jouni Malinen - * Copyright (c) 2008, John W. Linville - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. See README and COPYING for - * more details. - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -#include -#include - -MODULE_AUTHOR("Jouni Malinen"); -MODULE_DESCRIPTION("lib80211 crypt: WEP"); -MODULE_LICENSE("GPL"); - -struct lib80211_wep_data { - u32 iv; -#define WEP_KEY_LEN 13 - u8 key[WEP_KEY_LEN + 1]; - u8 key_len; - u8 key_idx; - struct crypto_blkcipher *tx_tfm; - struct crypto_blkcipher *rx_tfm; -}; - -static void *lib80211_wep_init(int keyidx) -{ - struct lib80211_wep_data *priv; - - priv = kzalloc(sizeof(*priv), GFP_ATOMIC); - if (priv == NULL) - goto fail; - priv->key_idx = keyidx; - - priv->tx_tfm = crypto_alloc_blkcipher("ecb(arc4)", 0, CRYPTO_ALG_ASYNC); - if (IS_ERR(priv->tx_tfm)) { - priv->tx_tfm = NULL; - goto fail; - } - - priv->rx_tfm = crypto_alloc_blkcipher("ecb(arc4)", 0, CRYPTO_ALG_ASYNC); - if (IS_ERR(priv->rx_tfm)) { - priv->rx_tfm = NULL; - goto fail; - } - /* start WEP IV from a random value */ - get_random_bytes(&priv->iv, 4); - - return priv; - - fail: - if (priv) { - if (priv->tx_tfm) - crypto_free_blkcipher(priv->tx_tfm); - if (priv->rx_tfm) - crypto_free_blkcipher(priv->rx_tfm); - kfree(priv); - } - return NULL; -} - -static void lib80211_wep_deinit(void *priv) -{ - struct lib80211_wep_data *_priv = priv; - if (_priv) { - if (_priv->tx_tfm) - crypto_free_blkcipher(_priv->tx_tfm); - if (_priv->rx_tfm) - crypto_free_blkcipher(_priv->rx_tfm); - } - kfree(priv); -} - -/* Add WEP IV/key info to a frame that has at least 4 bytes of headroom */ -static int lib80211_wep_build_iv(struct sk_buff *skb, int hdr_len, - u8 *key, int keylen, void *priv) -{ - struct lib80211_wep_data *wep = priv; - u32 klen; - u8 *pos; - - if (skb_headroom(skb) < 4 || skb->len < hdr_len) - return -1; - - pos = skb_push(skb, 4); - memmove(pos, pos + 4, hdr_len); - pos += hdr_len; - - klen = 3 + wep->key_len; - - wep->iv++; - - /* Fluhrer, Mantin, and Shamir have reported weaknesses in the key - * scheduling algorithm of RC4. At least IVs (KeyByte + 3, 0xff, N) - * can be used to speedup attacks, so avoid using them. */ - if ((wep->iv & 0xff00) == 0xff00) { - u8 B = (wep->iv >> 16) & 0xff; - if (B >= 3 && B < klen) - wep->iv += 0x0100; - } - - /* Prepend 24-bit IV to RC4 key and TX frame */ - *pos++ = (wep->iv >> 16) & 0xff; - *pos++ = (wep->iv >> 8) & 0xff; - *pos++ = wep->iv & 0xff; - *pos++ = wep->key_idx << 6; - - return 0; -} - -/* Perform WEP encryption on given skb that has at least 4 bytes of headroom - * for IV and 4 bytes of tailroom for ICV. Both IV and ICV will be transmitted, - * so the payload length increases with 8 bytes. - * - * WEP frame payload: IV + TX key idx, RC4(data), ICV = RC4(CRC32(data)) - */ -static int lib80211_wep_encrypt(struct sk_buff *skb, int hdr_len, void *priv) -{ - struct lib80211_wep_data *wep = priv; - struct blkcipher_desc desc = { .tfm = wep->tx_tfm }; - u32 crc, klen, len; - u8 *pos, *icv; - struct scatterlist sg; - u8 key[WEP_KEY_LEN + 3]; - - /* other checks are in lib80211_wep_build_iv */ - if (skb_tailroom(skb) < 4) - return -1; - - /* add the IV to the frame */ - if (lib80211_wep_build_iv(skb, hdr_len, NULL, 0, priv)) - return -1; - - /* Copy the IV into the first 3 bytes of the key */ - skb_copy_from_linear_data_offset(skb, hdr_len, key, 3); - - /* Copy rest of the WEP key (the secret part) */ - memcpy(key + 3, wep->key, wep->key_len); - - len = skb->len - hdr_len - 4; - pos = skb->data + hdr_len + 4; - klen = 3 + wep->key_len; - - /* Append little-endian CRC32 over only the data and encrypt it to produce ICV */ - crc = ~crc32_le(~0, pos, len); - icv = skb_put(skb, 4); - icv[0] = crc; - icv[1] = crc >> 8; - icv[2] = crc >> 16; - icv[3] = crc >> 24; - - crypto_blkcipher_setkey(wep->tx_tfm, key, klen); - sg_init_one(&sg, pos, len + 4); - return crypto_blkcipher_encrypt(&desc, &sg, &sg, len + 4); -} - -/* Perform WEP decryption on given buffer. Buffer includes whole WEP part of - * the frame: IV (4 bytes), encrypted payload (including SNAP header), - * ICV (4 bytes). len includes both IV and ICV. - * - * Returns 0 if frame was decrypted successfully and ICV was correct and -1 on - * failure. If frame is OK, IV and ICV will be removed. - */ -static int lib80211_wep_decrypt(struct sk_buff *skb, int hdr_len, void *priv) -{ - struct lib80211_wep_data *wep = priv; - struct blkcipher_desc desc = { .tfm = wep->rx_tfm }; - u32 crc, klen, plen; - u8 key[WEP_KEY_LEN + 3]; - u8 keyidx, *pos, icv[4]; - struct scatterlist sg; - - if (skb->len < hdr_len + 8) - return -1; - - pos = skb->data + hdr_len; - key[0] = *pos++; - key[1] = *pos++; - key[2] = *pos++; - keyidx = *pos++ >> 6; - if (keyidx != wep->key_idx) - return -1; - - klen = 3 + wep->key_len; - - /* Copy rest of the WEP key (the secret part) */ - memcpy(key + 3, wep->key, wep->key_len); - - /* Apply RC4 to data and compute CRC32 over decrypted data */ - plen = skb->len - hdr_len - 8; - - crypto_blkcipher_setkey(wep->rx_tfm, key, klen); - sg_init_one(&sg, pos, plen + 4); - if (crypto_blkcipher_decrypt(&desc, &sg, &sg, plen + 4)) - return -7; - - crc = ~crc32_le(~0, pos, plen); - icv[0] = crc; - icv[1] = crc >> 8; - icv[2] = crc >> 16; - icv[3] = crc >> 24; - if (memcmp(icv, pos + plen, 4) != 0) { - /* ICV mismatch - drop frame */ - return -2; - } - - /* Remove IV and ICV */ - memmove(skb->data + 4, skb->data, hdr_len); - skb_pull(skb, 4); - skb_trim(skb, skb->len - 4); - - return 0; -} - -static int lib80211_wep_set_key(void *key, int len, u8 * seq, void *priv) -{ - struct lib80211_wep_data *wep = priv; - - if (len < 0 || len > WEP_KEY_LEN) - return -1; - - memcpy(wep->key, key, len); - wep->key_len = len; - - return 0; -} - -static int lib80211_wep_get_key(void *key, int len, u8 * seq, void *priv) -{ - struct lib80211_wep_data *wep = priv; - - if (len < wep->key_len) - return -1; - - memcpy(key, wep->key, wep->key_len); - - return wep->key_len; -} - -static char *lib80211_wep_print_stats(char *p, void *priv) -{ - struct lib80211_wep_data *wep = priv; - p += sprintf(p, "key[%d] alg=WEP len=%d\n", wep->key_idx, wep->key_len); - return p; -} - -static struct lib80211_crypto_ops lib80211_crypt_wep = { - .name = "WEP", - .init = lib80211_wep_init, - .deinit = lib80211_wep_deinit, - .encrypt_mpdu = lib80211_wep_encrypt, - .decrypt_mpdu = lib80211_wep_decrypt, - .encrypt_msdu = NULL, - .decrypt_msdu = NULL, - .set_key = lib80211_wep_set_key, - .get_key = lib80211_wep_get_key, - .print_stats = lib80211_wep_print_stats, - .extra_mpdu_prefix_len = 4, /* IV */ - .extra_mpdu_postfix_len = 4, /* ICV */ - .owner = THIS_MODULE, -}; - -static int __init lib80211_crypto_wep_init(void) -{ - return lib80211_register_crypto_ops(&lib80211_crypt_wep); -} - -static void __exit lib80211_crypto_wep_exit(void) -{ - lib80211_unregister_crypto_ops(&lib80211_crypt_wep); -} - -module_init(lib80211_crypto_wep_init); -module_exit(lib80211_crypto_wep_exit); diff --git a/openairITS/mac/DOT11/net/wireless/mesh.c b/openairITS/mac/DOT11/net/wireless/mesh.c deleted file mode 100644 index ba21ab2218..0000000000 --- a/openairITS/mac/DOT11/net/wireless/mesh.c +++ /dev/null @@ -1,171 +0,0 @@ -#include -#include -#include -#include "nl80211.h" -#include "core.h" - -/* Default values, timeouts in ms */ -#define MESH_TTL 31 -#define MESH_DEFAULT_ELEMENT_TTL 31 -#define MESH_MAX_RETR 3 -#define MESH_RET_T 100 -#define MESH_CONF_T 100 -#define MESH_HOLD_T 100 - -#define MESH_PATH_TIMEOUT 5000 -#define MESH_RANN_INTERVAL 5000 - -/* - * Minimum interval between two consecutive PREQs originated by the same - * interface - */ -#define MESH_PREQ_MIN_INT 10 -#define MESH_PERR_MIN_INT 100 -#define MESH_DIAM_TRAVERSAL_TIME 50 - -#define MESH_RSSI_THRESHOLD 0 - -/* - * A path will be refreshed if it is used PATH_REFRESH_TIME milliseconds - * before timing out. This way it will remain ACTIVE and no data frames - * will be unnecessarily held in the pending queue. - */ -#define MESH_PATH_REFRESH_TIME 1000 -#define MESH_MIN_DISCOVERY_TIMEOUT (2 * MESH_DIAM_TRAVERSAL_TIME) - -/* Default maximum number of established plinks per interface */ -#define MESH_MAX_ESTAB_PLINKS 32 - -#define MESH_MAX_PREQ_RETRIES 4 - - -const struct mesh_config default_mesh_config = { - .dot11MeshRetryTimeout = MESH_RET_T, - .dot11MeshConfirmTimeout = MESH_CONF_T, - .dot11MeshHoldingTimeout = MESH_HOLD_T, - .dot11MeshMaxRetries = MESH_MAX_RETR, - .dot11MeshTTL = MESH_TTL, - .element_ttl = MESH_DEFAULT_ELEMENT_TTL, - .auto_open_plinks = true, - .dot11MeshMaxPeerLinks = MESH_MAX_ESTAB_PLINKS, - .dot11MeshHWMPactivePathTimeout = MESH_PATH_TIMEOUT, - .dot11MeshHWMPpreqMinInterval = MESH_PREQ_MIN_INT, - .dot11MeshHWMPperrMinInterval = MESH_PERR_MIN_INT, - .dot11MeshHWMPnetDiameterTraversalTime = MESH_DIAM_TRAVERSAL_TIME, - .dot11MeshHWMPmaxPREQretries = MESH_MAX_PREQ_RETRIES, - .path_refresh_time = MESH_PATH_REFRESH_TIME, - .min_discovery_timeout = MESH_MIN_DISCOVERY_TIMEOUT, - .dot11MeshHWMPRannInterval = MESH_RANN_INTERVAL, - .dot11MeshGateAnnouncementProtocol = false, - .dot11MeshForwarding = true, - .rssi_threshold = MESH_RSSI_THRESHOLD, -}; - -const struct mesh_setup default_mesh_setup = { - .path_sel_proto = IEEE80211_PATH_PROTOCOL_HWMP, - .path_metric = IEEE80211_PATH_METRIC_AIRTIME, - .ie = NULL, - .ie_len = 0, - .is_secure = false, -}; - -int __cfg80211_join_mesh(struct cfg80211_registered_device *rdev, - struct net_device *dev, - const struct mesh_setup *setup, - const struct mesh_config *conf) -{ - struct wireless_dev *wdev = dev->ieee80211_ptr; - int err; - - BUILD_BUG_ON(IEEE80211_MAX_SSID_LEN != IEEE80211_MAX_MESH_ID_LEN); - - ASSERT_WDEV_LOCK(wdev); - - if (dev->ieee80211_ptr->iftype != NL80211_IFTYPE_MESH_POINT) - return -EOPNOTSUPP; - - if (!(rdev->wiphy.flags & WIPHY_FLAG_MESH_AUTH) && - setup->is_secure) - return -EOPNOTSUPP; - - if (wdev->mesh_id_len) - return -EALREADY; - - if (!setup->mesh_id_len) - return -EINVAL; - - if (!rdev->ops->join_mesh) - return -EOPNOTSUPP; - - err = rdev->ops->join_mesh(&rdev->wiphy, dev, conf, setup); - if (!err) { - memcpy(wdev->ssid, setup->mesh_id, setup->mesh_id_len); - wdev->mesh_id_len = setup->mesh_id_len; - } - - return err; -} - -int cfg80211_join_mesh(struct cfg80211_registered_device *rdev, - struct net_device *dev, - const struct mesh_setup *setup, - const struct mesh_config *conf) -{ - struct wireless_dev *wdev = dev->ieee80211_ptr; - int err; - - wdev_lock(wdev); - err = __cfg80211_join_mesh(rdev, dev, setup, conf); - wdev_unlock(wdev); - - return err; -} - -void cfg80211_notify_new_peer_candidate(struct net_device *dev, - const u8 *macaddr, const u8* ie, u8 ie_len, gfp_t gfp) -{ - struct wireless_dev *wdev = dev->ieee80211_ptr; - - if (WARN_ON(wdev->iftype != NL80211_IFTYPE_MESH_POINT)) - return; - - nl80211_send_new_peer_candidate(wiphy_to_dev(wdev->wiphy), dev, - macaddr, ie, ie_len, gfp); -} -EXPORT_SYMBOL(cfg80211_notify_new_peer_candidate); - -static int __cfg80211_leave_mesh(struct cfg80211_registered_device *rdev, - struct net_device *dev) -{ - struct wireless_dev *wdev = dev->ieee80211_ptr; - int err; - - ASSERT_WDEV_LOCK(wdev); - - if (dev->ieee80211_ptr->iftype != NL80211_IFTYPE_MESH_POINT) - return -EOPNOTSUPP; - - if (!rdev->ops->leave_mesh) - return -EOPNOTSUPP; - - if (!wdev->mesh_id_len) - return -ENOTCONN; - - err = rdev->ops->leave_mesh(&rdev->wiphy, dev); - if (!err) - wdev->mesh_id_len = 0; - return err; -} - -int cfg80211_leave_mesh(struct cfg80211_registered_device *rdev, - struct net_device *dev) -{ - struct wireless_dev *wdev = dev->ieee80211_ptr; - int err; - - wdev_lock(wdev); - err = __cfg80211_leave_mesh(rdev, dev); - wdev_unlock(wdev); - - return err; -} diff --git a/openairITS/mac/DOT11/net/wireless/mlme.c b/openairITS/mac/DOT11/net/wireless/mlme.c deleted file mode 100644 index f5a7ac3a09..0000000000 --- a/openairITS/mac/DOT11/net/wireless/mlme.c +++ /dev/null @@ -1,956 +0,0 @@ -/* - * cfg80211 MLME SAP interface - * - * Copyright (c) 2009, Jouni Malinen - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include "core.h" -#include "nl80211.h" - -void cfg80211_send_rx_auth(struct net_device *dev, const u8 *buf, size_t len) -{ - struct wireless_dev *wdev = dev->ieee80211_ptr; - struct wiphy *wiphy = wdev->wiphy; - struct cfg80211_registered_device *rdev = wiphy_to_dev(wiphy); - - wdev_lock(wdev); - - nl80211_send_rx_auth(rdev, dev, buf, len, GFP_KERNEL); - cfg80211_sme_rx_auth(dev, buf, len); - - wdev_unlock(wdev); -} -EXPORT_SYMBOL(cfg80211_send_rx_auth); - -void cfg80211_send_rx_assoc(struct net_device *dev, struct cfg80211_bss *bss, - const u8 *buf, size_t len) -{ - u16 status_code; - struct wireless_dev *wdev = dev->ieee80211_ptr; - struct wiphy *wiphy = wdev->wiphy; - struct cfg80211_registered_device *rdev = wiphy_to_dev(wiphy); - struct ieee80211_mgmt *mgmt = (struct ieee80211_mgmt *)buf; - u8 *ie = mgmt->u.assoc_resp.variable; - int ieoffs = offsetof(struct ieee80211_mgmt, u.assoc_resp.variable); - - wdev_lock(wdev); - - status_code = le16_to_cpu(mgmt->u.assoc_resp.status_code); - - /* - * This is a bit of a hack, we don't notify userspace of - * a (re-)association reply if we tried to send a reassoc - * and got a reject -- we only try again with an assoc - * frame instead of reassoc. - */ - if (status_code != WLAN_STATUS_SUCCESS && wdev->conn && - cfg80211_sme_failed_reassoc(wdev)) { - cfg80211_put_bss(bss); - goto out; - } - - nl80211_send_rx_assoc(rdev, dev, buf, len, GFP_KERNEL); - - if (status_code != WLAN_STATUS_SUCCESS && wdev->conn) { - cfg80211_sme_failed_assoc(wdev); - /* - * do not call connect_result() now because the - * sme will schedule work that does it later. - */ - cfg80211_put_bss(bss); - goto out; - } - - if (!wdev->conn && wdev->sme_state == CFG80211_SME_IDLE) { - /* - * This is for the userspace SME, the CONNECTING - * state will be changed to CONNECTED by - * __cfg80211_connect_result() below. - */ - wdev->sme_state = CFG80211_SME_CONNECTING; - } - - /* this consumes the bss reference */ - __cfg80211_connect_result(dev, mgmt->bssid, NULL, 0, ie, len - ieoffs, - status_code, - status_code == WLAN_STATUS_SUCCESS, bss); - out: - wdev_unlock(wdev); -} -EXPORT_SYMBOL(cfg80211_send_rx_assoc); - -void __cfg80211_send_deauth(struct net_device *dev, - const u8 *buf, size_t len) -{ - struct wireless_dev *wdev = dev->ieee80211_ptr; - struct wiphy *wiphy = wdev->wiphy; - struct cfg80211_registered_device *rdev = wiphy_to_dev(wiphy); - struct ieee80211_mgmt *mgmt = (struct ieee80211_mgmt *)buf; - const u8 *bssid = mgmt->bssid; - bool was_current = false; - - ASSERT_WDEV_LOCK(wdev); - - if (wdev->current_bss && - memcmp(wdev->current_bss->pub.bssid, bssid, ETH_ALEN) == 0) { - cfg80211_unhold_bss(wdev->current_bss); - cfg80211_put_bss(&wdev->current_bss->pub); - wdev->current_bss = NULL; - was_current = true; - } - - nl80211_send_deauth(rdev, dev, buf, len, GFP_KERNEL); - - if (wdev->sme_state == CFG80211_SME_CONNECTED && was_current) { - u16 reason_code; - bool from_ap; - - reason_code = le16_to_cpu(mgmt->u.deauth.reason_code); - - from_ap = memcmp(mgmt->sa, dev->dev_addr, ETH_ALEN) != 0; - __cfg80211_disconnected(dev, NULL, 0, reason_code, from_ap); - } else if (wdev->sme_state == CFG80211_SME_CONNECTING) { - __cfg80211_connect_result(dev, mgmt->bssid, NULL, 0, NULL, 0, - WLAN_STATUS_UNSPECIFIED_FAILURE, - false, NULL); - } -} -EXPORT_SYMBOL(__cfg80211_send_deauth); - -void cfg80211_send_deauth(struct net_device *dev, const u8 *buf, size_t len) -{ - struct wireless_dev *wdev = dev->ieee80211_ptr; - - wdev_lock(wdev); - __cfg80211_send_deauth(dev, buf, len); - wdev_unlock(wdev); -} -EXPORT_SYMBOL(cfg80211_send_deauth); - -void __cfg80211_send_disassoc(struct net_device *dev, - const u8 *buf, size_t len) -{ - struct wireless_dev *wdev = dev->ieee80211_ptr; - struct wiphy *wiphy = wdev->wiphy; - struct cfg80211_registered_device *rdev = wiphy_to_dev(wiphy); - struct ieee80211_mgmt *mgmt = (struct ieee80211_mgmt *)buf; - const u8 *bssid = mgmt->bssid; - u16 reason_code; - bool from_ap; - - ASSERT_WDEV_LOCK(wdev); - - nl80211_send_disassoc(rdev, dev, buf, len, GFP_KERNEL); - - if (wdev->sme_state != CFG80211_SME_CONNECTED) - return; - - if (wdev->current_bss && - memcmp(wdev->current_bss->pub.bssid, bssid, ETH_ALEN) == 0) { - cfg80211_sme_disassoc(dev, wdev->current_bss); - cfg80211_unhold_bss(wdev->current_bss); - cfg80211_put_bss(&wdev->current_bss->pub); - wdev->current_bss = NULL; - } else - WARN_ON(1); - - - reason_code = le16_to_cpu(mgmt->u.disassoc.reason_code); - - from_ap = memcmp(mgmt->sa, dev->dev_addr, ETH_ALEN) != 0; - __cfg80211_disconnected(dev, NULL, 0, reason_code, from_ap); -} -EXPORT_SYMBOL(__cfg80211_send_disassoc); - -void cfg80211_send_disassoc(struct net_device *dev, const u8 *buf, size_t len) -{ - struct wireless_dev *wdev = dev->ieee80211_ptr; - - wdev_lock(wdev); - __cfg80211_send_disassoc(dev, buf, len); - wdev_unlock(wdev); -} -EXPORT_SYMBOL(cfg80211_send_disassoc); - -void cfg80211_send_unprot_deauth(struct net_device *dev, const u8 *buf, - size_t len) -{ - struct wireless_dev *wdev = dev->ieee80211_ptr; - struct wiphy *wiphy = wdev->wiphy; - struct cfg80211_registered_device *rdev = wiphy_to_dev(wiphy); - - nl80211_send_unprot_deauth(rdev, dev, buf, len, GFP_ATOMIC); -} -EXPORT_SYMBOL(cfg80211_send_unprot_deauth); - -void cfg80211_send_unprot_disassoc(struct net_device *dev, const u8 *buf, - size_t len) -{ - struct wireless_dev *wdev = dev->ieee80211_ptr; - struct wiphy *wiphy = wdev->wiphy; - struct cfg80211_registered_device *rdev = wiphy_to_dev(wiphy); - - nl80211_send_unprot_disassoc(rdev, dev, buf, len, GFP_ATOMIC); -} -EXPORT_SYMBOL(cfg80211_send_unprot_disassoc); - -void cfg80211_send_auth_timeout(struct net_device *dev, const u8 *addr) -{ - struct wireless_dev *wdev = dev->ieee80211_ptr; - struct wiphy *wiphy = wdev->wiphy; - struct cfg80211_registered_device *rdev = wiphy_to_dev(wiphy); - - wdev_lock(wdev); - - nl80211_send_auth_timeout(rdev, dev, addr, GFP_KERNEL); - if (wdev->sme_state == CFG80211_SME_CONNECTING) - __cfg80211_connect_result(dev, addr, NULL, 0, NULL, 0, - WLAN_STATUS_UNSPECIFIED_FAILURE, - false, NULL); - - wdev_unlock(wdev); -} -EXPORT_SYMBOL(cfg80211_send_auth_timeout); - -void cfg80211_send_assoc_timeout(struct net_device *dev, const u8 *addr) -{ - struct wireless_dev *wdev = dev->ieee80211_ptr; - struct wiphy *wiphy = wdev->wiphy; - struct cfg80211_registered_device *rdev = wiphy_to_dev(wiphy); - - wdev_lock(wdev); - - nl80211_send_assoc_timeout(rdev, dev, addr, GFP_KERNEL); - if (wdev->sme_state == CFG80211_SME_CONNECTING) - __cfg80211_connect_result(dev, addr, NULL, 0, NULL, 0, - WLAN_STATUS_UNSPECIFIED_FAILURE, - false, NULL); - - wdev_unlock(wdev); -} -EXPORT_SYMBOL(cfg80211_send_assoc_timeout); - -void cfg80211_michael_mic_failure(struct net_device *dev, const u8 *addr, - enum nl80211_key_type key_type, int key_id, - const u8 *tsc, gfp_t gfp) -{ - struct wiphy *wiphy = dev->ieee80211_ptr->wiphy; - struct cfg80211_registered_device *rdev = wiphy_to_dev(wiphy); -#ifdef CONFIG_CFG80211_WEXT - union iwreq_data wrqu; - char *buf = kmalloc(128, gfp); - - if (buf) { - sprintf(buf, "MLME-MICHAELMICFAILURE.indication(" - "keyid=%d %scast addr=%pM)", key_id, - key_type == NL80211_KEYTYPE_GROUP ? "broad" : "uni", - addr); - memset(&wrqu, 0, sizeof(wrqu)); - wrqu.data.length = strlen(buf); - wireless_send_event(dev, IWEVCUSTOM, &wrqu, buf); - kfree(buf); - } -#endif - - nl80211_michael_mic_failure(rdev, dev, addr, key_type, key_id, tsc, gfp); -} -EXPORT_SYMBOL(cfg80211_michael_mic_failure); - -/* some MLME handling for userspace SME */ -int __cfg80211_mlme_auth(struct cfg80211_registered_device *rdev, - struct net_device *dev, - struct ieee80211_channel *chan, - enum nl80211_auth_type auth_type, - const u8 *bssid, - const u8 *ssid, int ssid_len, - const u8 *ie, int ie_len, - const u8 *key, int key_len, int key_idx) -{ - struct wireless_dev *wdev = dev->ieee80211_ptr; - struct cfg80211_auth_request req; - int err; - - ASSERT_WDEV_LOCK(wdev); - - if (auth_type == NL80211_AUTHTYPE_SHARED_KEY) - if (!key || !key_len || key_idx < 0 || key_idx > 4) - return -EINVAL; - - if (wdev->current_bss && - memcmp(bssid, wdev->current_bss->pub.bssid, ETH_ALEN) == 0) - return -EALREADY; - - memset(&req, 0, sizeof(req)); - - req.ie = ie; - req.ie_len = ie_len; - req.auth_type = auth_type; - req.bss = cfg80211_get_bss(&rdev->wiphy, chan, bssid, ssid, ssid_len, - WLAN_CAPABILITY_ESS, WLAN_CAPABILITY_ESS); - req.key = key; - req.key_len = key_len; - req.key_idx = key_idx; - if (!req.bss) - return -ENOENT; - - err = rdev->ops->auth(&rdev->wiphy, dev, &req); - - cfg80211_put_bss(req.bss); - return err; -} - -int cfg80211_mlme_auth(struct cfg80211_registered_device *rdev, - struct net_device *dev, struct ieee80211_channel *chan, - enum nl80211_auth_type auth_type, const u8 *bssid, - const u8 *ssid, int ssid_len, - const u8 *ie, int ie_len, - const u8 *key, int key_len, int key_idx) -{ - int err; - - wdev_lock(dev->ieee80211_ptr); - err = __cfg80211_mlme_auth(rdev, dev, chan, auth_type, bssid, - ssid, ssid_len, ie, ie_len, - key, key_len, key_idx); - wdev_unlock(dev->ieee80211_ptr); - - return err; -} - -/* Do a logical ht_capa &= ht_capa_mask. */ -void cfg80211_oper_and_ht_capa(struct ieee80211_ht_cap *ht_capa, - const struct ieee80211_ht_cap *ht_capa_mask) -{ - int i; - u8 *p1, *p2; - if (!ht_capa_mask) { - memset(ht_capa, 0, sizeof(*ht_capa)); - return; - } - - p1 = (u8*)(ht_capa); - p2 = (u8*)(ht_capa_mask); - for (i = 0; iieee80211_ptr; - struct cfg80211_assoc_request req; - int err; - bool was_connected = false; - - ASSERT_WDEV_LOCK(wdev); - - memset(&req, 0, sizeof(req)); - - if (wdev->current_bss && prev_bssid && - memcmp(wdev->current_bss->pub.bssid, prev_bssid, ETH_ALEN) == 0) { - /* - * Trying to reassociate: Allow this to proceed and let the old - * association to be dropped when the new one is completed. - */ - if (wdev->sme_state == CFG80211_SME_CONNECTED) { - was_connected = true; - wdev->sme_state = CFG80211_SME_CONNECTING; - } - } else if (wdev->current_bss) - return -EALREADY; - - req.ie = ie; - req.ie_len = ie_len; - memcpy(&req.crypto, crypt, sizeof(req.crypto)); - req.use_mfp = use_mfp; - req.prev_bssid = prev_bssid; - req.flags = assoc_flags; - if (ht_capa) - memcpy(&req.ht_capa, ht_capa, sizeof(req.ht_capa)); - if (ht_capa_mask) - memcpy(&req.ht_capa_mask, ht_capa_mask, - sizeof(req.ht_capa_mask)); - cfg80211_oper_and_ht_capa(&req.ht_capa_mask, - rdev->wiphy.ht_capa_mod_mask); - - req.bss = cfg80211_get_bss(&rdev->wiphy, chan, bssid, ssid, ssid_len, - WLAN_CAPABILITY_ESS, WLAN_CAPABILITY_ESS); - if (!req.bss) { - if (was_connected) - wdev->sme_state = CFG80211_SME_CONNECTED; - return -ENOENT; - } - - err = rdev->ops->assoc(&rdev->wiphy, dev, &req); - - if (err) { - if (was_connected) - wdev->sme_state = CFG80211_SME_CONNECTED; - cfg80211_put_bss(req.bss); - } - - return err; -} - -int cfg80211_mlme_assoc(struct cfg80211_registered_device *rdev, - struct net_device *dev, - struct ieee80211_channel *chan, - const u8 *bssid, const u8 *prev_bssid, - const u8 *ssid, int ssid_len, - const u8 *ie, int ie_len, bool use_mfp, - struct cfg80211_crypto_settings *crypt, - u32 assoc_flags, struct ieee80211_ht_cap *ht_capa, - struct ieee80211_ht_cap *ht_capa_mask) -{ - struct wireless_dev *wdev = dev->ieee80211_ptr; - int err; - - wdev_lock(wdev); - err = __cfg80211_mlme_assoc(rdev, dev, chan, bssid, prev_bssid, - ssid, ssid_len, ie, ie_len, use_mfp, crypt, - assoc_flags, ht_capa, ht_capa_mask); - wdev_unlock(wdev); - - return err; -} - -int __cfg80211_mlme_deauth(struct cfg80211_registered_device *rdev, - struct net_device *dev, const u8 *bssid, - const u8 *ie, int ie_len, u16 reason, - bool local_state_change) -{ - struct wireless_dev *wdev = dev->ieee80211_ptr; - struct cfg80211_deauth_request req = { - .bssid = bssid, - .reason_code = reason, - .ie = ie, - .ie_len = ie_len, - }; - - ASSERT_WDEV_LOCK(wdev); - - if (local_state_change) { - if (wdev->current_bss && - memcmp(wdev->current_bss->pub.bssid, bssid, ETH_ALEN) == 0) { - cfg80211_unhold_bss(wdev->current_bss); - cfg80211_put_bss(&wdev->current_bss->pub); - wdev->current_bss = NULL; - } - - return 0; - } - - return rdev->ops->deauth(&rdev->wiphy, dev, &req); -} - -int cfg80211_mlme_deauth(struct cfg80211_registered_device *rdev, - struct net_device *dev, const u8 *bssid, - const u8 *ie, int ie_len, u16 reason, - bool local_state_change) -{ - struct wireless_dev *wdev = dev->ieee80211_ptr; - int err; - - wdev_lock(wdev); - err = __cfg80211_mlme_deauth(rdev, dev, bssid, ie, ie_len, reason, - local_state_change); - wdev_unlock(wdev); - - return err; -} - -static int __cfg80211_mlme_disassoc(struct cfg80211_registered_device *rdev, - struct net_device *dev, const u8 *bssid, - const u8 *ie, int ie_len, u16 reason, - bool local_state_change) -{ - struct wireless_dev *wdev = dev->ieee80211_ptr; - struct cfg80211_disassoc_request req; - - ASSERT_WDEV_LOCK(wdev); - - if (wdev->sme_state != CFG80211_SME_CONNECTED) - return -ENOTCONN; - - if (WARN_ON(!wdev->current_bss)) - return -ENOTCONN; - - memset(&req, 0, sizeof(req)); - req.reason_code = reason; - req.local_state_change = local_state_change; - req.ie = ie; - req.ie_len = ie_len; - if (memcmp(wdev->current_bss->pub.bssid, bssid, ETH_ALEN) == 0) - req.bss = &wdev->current_bss->pub; - else - return -ENOTCONN; - - return rdev->ops->disassoc(&rdev->wiphy, dev, &req); -} - -int cfg80211_mlme_disassoc(struct cfg80211_registered_device *rdev, - struct net_device *dev, const u8 *bssid, - const u8 *ie, int ie_len, u16 reason, - bool local_state_change) -{ - struct wireless_dev *wdev = dev->ieee80211_ptr; - int err; - - wdev_lock(wdev); - err = __cfg80211_mlme_disassoc(rdev, dev, bssid, ie, ie_len, reason, - local_state_change); - wdev_unlock(wdev); - - return err; -} - -void cfg80211_mlme_down(struct cfg80211_registered_device *rdev, - struct net_device *dev) -{ - struct wireless_dev *wdev = dev->ieee80211_ptr; - struct cfg80211_deauth_request req; - u8 bssid[ETH_ALEN]; - - ASSERT_WDEV_LOCK(wdev); - - if (!rdev->ops->deauth) - return; - - memset(&req, 0, sizeof(req)); - req.reason_code = WLAN_REASON_DEAUTH_LEAVING; - req.ie = NULL; - req.ie_len = 0; - - if (!wdev->current_bss) - return; - - memcpy(bssid, wdev->current_bss->pub.bssid, ETH_ALEN); - req.bssid = bssid; - rdev->ops->deauth(&rdev->wiphy, dev, &req); - - if (wdev->current_bss) { - cfg80211_unhold_bss(wdev->current_bss); - cfg80211_put_bss(&wdev->current_bss->pub); - wdev->current_bss = NULL; - } -} - -void cfg80211_ready_on_channel(struct net_device *dev, u64 cookie, - struct ieee80211_channel *chan, - enum nl80211_channel_type channel_type, - unsigned int duration, gfp_t gfp) -{ - struct wiphy *wiphy = dev->ieee80211_ptr->wiphy; - struct cfg80211_registered_device *rdev = wiphy_to_dev(wiphy); - - nl80211_send_remain_on_channel(rdev, dev, cookie, chan, channel_type, - duration, gfp); -} -EXPORT_SYMBOL(cfg80211_ready_on_channel); - -void cfg80211_remain_on_channel_expired(struct net_device *dev, - u64 cookie, - struct ieee80211_channel *chan, - enum nl80211_channel_type channel_type, - gfp_t gfp) -{ - struct wiphy *wiphy = dev->ieee80211_ptr->wiphy; - struct cfg80211_registered_device *rdev = wiphy_to_dev(wiphy); - - nl80211_send_remain_on_channel_cancel(rdev, dev, cookie, chan, - channel_type, gfp); -} -EXPORT_SYMBOL(cfg80211_remain_on_channel_expired); - -void cfg80211_new_sta(struct net_device *dev, const u8 *mac_addr, - struct station_info *sinfo, gfp_t gfp) -{ - struct wiphy *wiphy = dev->ieee80211_ptr->wiphy; - struct cfg80211_registered_device *rdev = wiphy_to_dev(wiphy); - - nl80211_send_sta_event(rdev, dev, mac_addr, sinfo, gfp); -} -EXPORT_SYMBOL(cfg80211_new_sta); - -void cfg80211_del_sta(struct net_device *dev, const u8 *mac_addr, gfp_t gfp) -{ - struct wiphy *wiphy = dev->ieee80211_ptr->wiphy; - struct cfg80211_registered_device *rdev = wiphy_to_dev(wiphy); - - nl80211_send_sta_del_event(rdev, dev, mac_addr, gfp); -} -EXPORT_SYMBOL(cfg80211_del_sta); - -struct cfg80211_mgmt_registration { - struct list_head list; - - u32 nlpid; - - int match_len; - - __le16 frame_type; - - u8 match[]; -}; - -int cfg80211_mlme_register_mgmt(struct wireless_dev *wdev, u32 snd_pid, - u16 frame_type, const u8 *match_data, - int match_len) -{ - struct wiphy *wiphy = wdev->wiphy; - struct cfg80211_registered_device *rdev = wiphy_to_dev(wiphy); - struct cfg80211_mgmt_registration *reg, *nreg; - int err = 0; - u16 mgmt_type; - - if (!wdev->wiphy->mgmt_stypes) - return -EOPNOTSUPP; - - if ((frame_type & IEEE80211_FCTL_FTYPE) != IEEE80211_FTYPE_MGMT) - return -EINVAL; - - if (frame_type & ~(IEEE80211_FCTL_FTYPE | IEEE80211_FCTL_STYPE)) - return -EINVAL; - - mgmt_type = (frame_type & IEEE80211_FCTL_STYPE) >> 4; - if (!(wdev->wiphy->mgmt_stypes[wdev->iftype].rx & BIT(mgmt_type))) - return -EINVAL; - - nreg = kzalloc(sizeof(*reg) + match_len, GFP_KERNEL); - if (!nreg) - return -ENOMEM; - - spin_lock_bh(&wdev->mgmt_registrations_lock); - - list_for_each_entry(reg, &wdev->mgmt_registrations, list) { - int mlen = min(match_len, reg->match_len); - - if (frame_type != le16_to_cpu(reg->frame_type)) - continue; - - if (memcmp(reg->match, match_data, mlen) == 0) { - err = -EALREADY; - break; - } - } - - if (err) { - kfree(nreg); - goto out; - } - - memcpy(nreg->match, match_data, match_len); - nreg->match_len = match_len; - nreg->nlpid = snd_pid; - nreg->frame_type = cpu_to_le16(frame_type); - list_add(&nreg->list, &wdev->mgmt_registrations); - - if (rdev->ops->mgmt_frame_register) - rdev->ops->mgmt_frame_register(wiphy, wdev->netdev, - frame_type, true); - - out: - spin_unlock_bh(&wdev->mgmt_registrations_lock); - - return err; -} - -void cfg80211_mlme_unregister_socket(struct wireless_dev *wdev, u32 nlpid) -{ - struct wiphy *wiphy = wdev->wiphy; - struct cfg80211_registered_device *rdev = wiphy_to_dev(wiphy); - struct cfg80211_mgmt_registration *reg, *tmp; - - spin_lock_bh(&wdev->mgmt_registrations_lock); - - list_for_each_entry_safe(reg, tmp, &wdev->mgmt_registrations, list) { - if (reg->nlpid != nlpid) - continue; - - if (rdev->ops->mgmt_frame_register) { - u16 frame_type = le16_to_cpu(reg->frame_type); - - rdev->ops->mgmt_frame_register(wiphy, wdev->netdev, - frame_type, false); - } - - list_del(®->list); - kfree(reg); - } - - spin_unlock_bh(&wdev->mgmt_registrations_lock); - - if (nlpid == wdev->ap_unexpected_nlpid) - wdev->ap_unexpected_nlpid = 0; -} - -void cfg80211_mlme_purge_registrations(struct wireless_dev *wdev) -{ - struct cfg80211_mgmt_registration *reg, *tmp; - - spin_lock_bh(&wdev->mgmt_registrations_lock); - - list_for_each_entry_safe(reg, tmp, &wdev->mgmt_registrations, list) { - list_del(®->list); - kfree(reg); - } - - spin_unlock_bh(&wdev->mgmt_registrations_lock); -} - -int cfg80211_mlme_mgmt_tx(struct cfg80211_registered_device *rdev, - struct net_device *dev, - struct ieee80211_channel *chan, bool offchan, - enum nl80211_channel_type channel_type, - bool channel_type_valid, unsigned int wait, - const u8 *buf, size_t len, bool no_cck, - bool dont_wait_for_ack, u64 *cookie) -{ - struct wireless_dev *wdev = dev->ieee80211_ptr; - const struct ieee80211_mgmt *mgmt; - u16 stype; - - if (!wdev->wiphy->mgmt_stypes) - return -EOPNOTSUPP; - - if (!rdev->ops->mgmt_tx) - return -EOPNOTSUPP; - - if (len < 24 + 1) - return -EINVAL; - - mgmt = (const struct ieee80211_mgmt *) buf; - - if (!ieee80211_is_mgmt(mgmt->frame_control)) - return -EINVAL; - - stype = le16_to_cpu(mgmt->frame_control) & IEEE80211_FCTL_STYPE; - if (!(wdev->wiphy->mgmt_stypes[wdev->iftype].tx & BIT(stype >> 4))) - return -EINVAL; - - if (ieee80211_is_action(mgmt->frame_control) && - mgmt->u.action.category != WLAN_CATEGORY_PUBLIC) { - int err = 0; - - wdev_lock(wdev); - - switch (wdev->iftype) { - case NL80211_IFTYPE_ADHOC: - case NL80211_IFTYPE_STATION: - case NL80211_IFTYPE_P2P_CLIENT: - if (!wdev->current_bss) { - err = -ENOTCONN; - break; - } - - if (memcmp(wdev->current_bss->pub.bssid, - mgmt->bssid, ETH_ALEN)) { - err = -ENOTCONN; - break; - } - - /* - * check for IBSS DA must be done by driver as - * cfg80211 doesn't track the stations - */ - if (wdev->iftype == NL80211_IFTYPE_ADHOC) - break; - - /* for station, check that DA is the AP */ - if (memcmp(wdev->current_bss->pub.bssid, - mgmt->da, ETH_ALEN)) { - err = -ENOTCONN; - break; - } - break; - case NL80211_IFTYPE_AP: - case NL80211_IFTYPE_P2P_GO: - case NL80211_IFTYPE_AP_VLAN: - if (memcmp(mgmt->bssid, dev->dev_addr, ETH_ALEN)) - err = -EINVAL; - break; - case NL80211_IFTYPE_MESH_POINT: - if (memcmp(mgmt->sa, mgmt->bssid, ETH_ALEN)) { - err = -EINVAL; - break; - } - /* - * check for mesh DA must be done by driver as - * cfg80211 doesn't track the stations - */ - break; - default: - err = -EOPNOTSUPP; - break; - } - wdev_unlock(wdev); - - if (err) - return err; - } - - if (memcmp(mgmt->sa, dev->dev_addr, ETH_ALEN) != 0) - return -EINVAL; - - /* Transmit the Action frame as requested by user space */ - return rdev->ops->mgmt_tx(&rdev->wiphy, dev, chan, offchan, - channel_type, channel_type_valid, - wait, buf, len, no_cck, dont_wait_for_ack, - cookie); -} - -bool cfg80211_rx_mgmt(struct net_device *dev, int freq, int sig_mbm, - const u8 *buf, size_t len, gfp_t gfp) -{ - struct wireless_dev *wdev = dev->ieee80211_ptr; - struct wiphy *wiphy = wdev->wiphy; - struct cfg80211_registered_device *rdev = wiphy_to_dev(wiphy); - struct cfg80211_mgmt_registration *reg; - const struct ieee80211_txrx_stypes *stypes = - &wiphy->mgmt_stypes[wdev->iftype]; - struct ieee80211_mgmt *mgmt = (void *)buf; - const u8 *data; - int data_len; - bool result = false; - __le16 ftype = mgmt->frame_control & - cpu_to_le16(IEEE80211_FCTL_FTYPE | IEEE80211_FCTL_STYPE); - u16 stype; - - stype = (le16_to_cpu(mgmt->frame_control) & IEEE80211_FCTL_STYPE) >> 4; - - if (!(stypes->rx & BIT(stype))) - return false; - - data = buf + ieee80211_hdrlen(mgmt->frame_control); - data_len = len - ieee80211_hdrlen(mgmt->frame_control); - - spin_lock_bh(&wdev->mgmt_registrations_lock); - - list_for_each_entry(reg, &wdev->mgmt_registrations, list) { - if (reg->frame_type != ftype) - continue; - - if (reg->match_len > data_len) - continue; - - if (memcmp(reg->match, data, reg->match_len)) - continue; - - /* found match! */ - - /* Indicate the received Action frame to user space */ - if (nl80211_send_mgmt(rdev, dev, reg->nlpid, - freq, sig_mbm, - buf, len, gfp)) - continue; - - result = true; - break; - } - - spin_unlock_bh(&wdev->mgmt_registrations_lock); - - return result; -} -EXPORT_SYMBOL(cfg80211_rx_mgmt); - -void cfg80211_mgmt_tx_status(struct net_device *dev, u64 cookie, - const u8 *buf, size_t len, bool ack, gfp_t gfp) -{ - struct wireless_dev *wdev = dev->ieee80211_ptr; - struct wiphy *wiphy = wdev->wiphy; - struct cfg80211_registered_device *rdev = wiphy_to_dev(wiphy); - - /* Indicate TX status of the Action frame to user space */ - nl80211_send_mgmt_tx_status(rdev, dev, cookie, buf, len, ack, gfp); -} -EXPORT_SYMBOL(cfg80211_mgmt_tx_status); - -void cfg80211_cqm_rssi_notify(struct net_device *dev, - enum nl80211_cqm_rssi_threshold_event rssi_event, - gfp_t gfp) -{ - struct wireless_dev *wdev = dev->ieee80211_ptr; - struct wiphy *wiphy = wdev->wiphy; - struct cfg80211_registered_device *rdev = wiphy_to_dev(wiphy); - - /* Indicate roaming trigger event to user space */ - nl80211_send_cqm_rssi_notify(rdev, dev, rssi_event, gfp); -} -EXPORT_SYMBOL(cfg80211_cqm_rssi_notify); - -void cfg80211_cqm_pktloss_notify(struct net_device *dev, - const u8 *peer, u32 num_packets, gfp_t gfp) -{ - struct wireless_dev *wdev = dev->ieee80211_ptr; - struct wiphy *wiphy = wdev->wiphy; - struct cfg80211_registered_device *rdev = wiphy_to_dev(wiphy); - - /* Indicate roaming trigger event to user space */ - nl80211_send_cqm_pktloss_notify(rdev, dev, peer, num_packets, gfp); -} -EXPORT_SYMBOL(cfg80211_cqm_pktloss_notify); - -void cfg80211_gtk_rekey_notify(struct net_device *dev, const u8 *bssid, - const u8 *replay_ctr, gfp_t gfp) -{ - struct wireless_dev *wdev = dev->ieee80211_ptr; - struct wiphy *wiphy = wdev->wiphy; - struct cfg80211_registered_device *rdev = wiphy_to_dev(wiphy); - - nl80211_gtk_rekey_notify(rdev, dev, bssid, replay_ctr, gfp); -} -EXPORT_SYMBOL(cfg80211_gtk_rekey_notify); - -void cfg80211_pmksa_candidate_notify(struct net_device *dev, int index, - const u8 *bssid, bool preauth, gfp_t gfp) -{ - struct wireless_dev *wdev = dev->ieee80211_ptr; - struct wiphy *wiphy = wdev->wiphy; - struct cfg80211_registered_device *rdev = wiphy_to_dev(wiphy); - - nl80211_pmksa_candidate_notify(rdev, dev, index, bssid, preauth, gfp); -} -EXPORT_SYMBOL(cfg80211_pmksa_candidate_notify); - -bool cfg80211_rx_spurious_frame(struct net_device *dev, - const u8 *addr, gfp_t gfp) -{ - struct wireless_dev *wdev = dev->ieee80211_ptr; - - if (WARN_ON(wdev->iftype != NL80211_IFTYPE_AP && - wdev->iftype != NL80211_IFTYPE_P2P_GO)) - return false; - - return nl80211_unexpected_frame(dev, addr, gfp); -} -EXPORT_SYMBOL(cfg80211_rx_spurious_frame); - -bool cfg80211_rx_unexpected_4addr_frame(struct net_device *dev, - const u8 *addr, gfp_t gfp) -{ - struct wireless_dev *wdev = dev->ieee80211_ptr; - - if (WARN_ON(wdev->iftype != NL80211_IFTYPE_AP && - wdev->iftype != NL80211_IFTYPE_P2P_GO && - wdev->iftype != NL80211_IFTYPE_AP_VLAN)) - return false; - - return nl80211_unexpected_4addr_frame(dev, addr, gfp); -} -EXPORT_SYMBOL(cfg80211_rx_unexpected_4addr_frame); diff --git a/openairITS/mac/DOT11/net/wireless/modules.order b/openairITS/mac/DOT11/net/wireless/modules.order deleted file mode 100644 index 213b6d0453..0000000000 --- a/openairITS/mac/DOT11/net/wireless/modules.order +++ /dev/null @@ -1 +0,0 @@ -kernel//home/thales/openair4G/openairITS/mac/DOT11/net/wireless/cfg80211.ko diff --git a/openairITS/mac/DOT11/net/wireless/nl80211.c b/openairITS/mac/DOT11/net/wireless/nl80211.c deleted file mode 100644 index 0ea8f3256c..0000000000 --- a/openairITS/mac/DOT11/net/wireless/nl80211.c +++ /dev/null @@ -1,8117 +0,0 @@ -/* - * This is the new netlink-based wireless configuration interface. - * - * Copyright 2006-2010 Johannes Berg - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "core.h" -#include "nl80211.h" -#include "reg.h" - -static bool nl80211_valid_auth_type(enum nl80211_auth_type auth_type); -static int nl80211_crypto_settings(struct cfg80211_registered_device *rdev, - struct genl_info *info, - struct cfg80211_crypto_settings *settings, - int cipher_limit); - -static int nl80211_pre_doit(struct genl_ops *ops, struct sk_buff *skb, - struct genl_info *info); -static void nl80211_post_doit(struct genl_ops *ops, struct sk_buff *skb, - struct genl_info *info); - -/* the netlink family */ -static struct genl_family nl80211_fam = { - .id = GENL_ID_GENERATE, /* don't bother with a hardcoded ID */ - .name = "nl80211", /* have users key off the name instead */ - .hdrsize = 0, /* no private header */ - .version = 1, /* no particular meaning now */ - .maxattr = NL80211_ATTR_MAX, - .netnsok = true, - .pre_doit = nl80211_pre_doit, - .post_doit = nl80211_post_doit, -}; - -/* internal helper: get rdev and dev */ -static int get_rdev_dev_by_ifindex(struct net *netns, struct nlattr **attrs, - struct cfg80211_registered_device **rdev, - struct net_device **dev) -{ - int ifindex; - - if (!attrs[NL80211_ATTR_IFINDEX]) - return -EINVAL; - - ifindex = nla_get_u32(attrs[NL80211_ATTR_IFINDEX]); - *dev = dev_get_by_index(netns, ifindex); - if (!*dev) - return -ENODEV; - - *rdev = cfg80211_get_dev_from_ifindex(netns, ifindex); - if (IS_ERR(*rdev)) { - dev_put(*dev); - return PTR_ERR(*rdev); - } - - return 0; -} - -/* policy for the attributes */ -static const struct nla_policy nl80211_policy[NL80211_ATTR_MAX+1] = { - [NL80211_ATTR_WIPHY] = { .type = NLA_U32 }, - [NL80211_ATTR_WIPHY_NAME] = { .type = NLA_NUL_STRING, - .len = 20-1 }, - [NL80211_ATTR_WIPHY_TXQ_PARAMS] = { .type = NLA_NESTED }, - [NL80211_ATTR_WIPHY_FREQ] = { .type = NLA_U32 }, - [NL80211_ATTR_WIPHY_CHANNEL_TYPE] = { .type = NLA_U32 }, - [NL80211_ATTR_WIPHY_RETRY_SHORT] = { .type = NLA_U8 }, - [NL80211_ATTR_WIPHY_RETRY_LONG] = { .type = NLA_U8 }, - [NL80211_ATTR_WIPHY_FRAG_THRESHOLD] = { .type = NLA_U32 }, - [NL80211_ATTR_WIPHY_RTS_THRESHOLD] = { .type = NLA_U32 }, - [NL80211_ATTR_WIPHY_COVERAGE_CLASS] = { .type = NLA_U8 }, - - [NL80211_ATTR_IFTYPE] = { .type = NLA_U32 }, - [NL80211_ATTR_IFINDEX] = { .type = NLA_U32 }, - [NL80211_ATTR_IFNAME] = { .type = NLA_NUL_STRING, .len = IFNAMSIZ-1 }, - - [NL80211_ATTR_MAC] = { .len = ETH_ALEN }, - [NL80211_ATTR_PREV_BSSID] = { .len = ETH_ALEN }, - - [NL80211_ATTR_KEY] = { .type = NLA_NESTED, }, - [NL80211_ATTR_KEY_DATA] = { .type = NLA_BINARY, - .len = WLAN_MAX_KEY_LEN }, - [NL80211_ATTR_KEY_IDX] = { .type = NLA_U8 }, - [NL80211_ATTR_KEY_CIPHER] = { .type = NLA_U32 }, - [NL80211_ATTR_KEY_DEFAULT] = { .type = NLA_FLAG }, - [NL80211_ATTR_KEY_SEQ] = { .type = NLA_BINARY, .len = 16 }, - [NL80211_ATTR_KEY_TYPE] = { .type = NLA_U32 }, - - [NL80211_ATTR_BEACON_INTERVAL] = { .type = NLA_U32 }, - [NL80211_ATTR_DTIM_PERIOD] = { .type = NLA_U32 }, - [NL80211_ATTR_BEACON_HEAD] = { .type = NLA_BINARY, - .len = IEEE80211_MAX_DATA_LEN }, - [NL80211_ATTR_BEACON_TAIL] = { .type = NLA_BINARY, - .len = IEEE80211_MAX_DATA_LEN }, - [NL80211_ATTR_STA_AID] = { .type = NLA_U16 }, - [NL80211_ATTR_STA_FLAGS] = { .type = NLA_NESTED }, - [NL80211_ATTR_STA_LISTEN_INTERVAL] = { .type = NLA_U16 }, - [NL80211_ATTR_STA_SUPPORTED_RATES] = { .type = NLA_BINARY, - .len = NL80211_MAX_SUPP_RATES }, - [NL80211_ATTR_STA_PLINK_ACTION] = { .type = NLA_U8 }, - [NL80211_ATTR_STA_VLAN] = { .type = NLA_U32 }, - [NL80211_ATTR_MNTR_FLAGS] = { /* NLA_NESTED can't be empty */ }, - [NL80211_ATTR_MESH_ID] = { .type = NLA_BINARY, - .len = IEEE80211_MAX_MESH_ID_LEN }, - [NL80211_ATTR_MPATH_NEXT_HOP] = { .type = NLA_U32 }, - - [NL80211_ATTR_REG_ALPHA2] = { .type = NLA_STRING, .len = 2 }, - [NL80211_ATTR_REG_RULES] = { .type = NLA_NESTED }, - - [NL80211_ATTR_BSS_CTS_PROT] = { .type = NLA_U8 }, - [NL80211_ATTR_BSS_SHORT_PREAMBLE] = { .type = NLA_U8 }, - [NL80211_ATTR_BSS_SHORT_SLOT_TIME] = { .type = NLA_U8 }, - [NL80211_ATTR_BSS_BASIC_RATES] = { .type = NLA_BINARY, - .len = NL80211_MAX_SUPP_RATES }, - [NL80211_ATTR_BSS_HT_OPMODE] = { .type = NLA_U16 }, - - [NL80211_ATTR_MESH_CONFIG] = { .type = NLA_NESTED }, - [NL80211_ATTR_SUPPORT_MESH_AUTH] = { .type = NLA_FLAG }, - - [NL80211_ATTR_HT_CAPABILITY] = { .len = NL80211_HT_CAPABILITY_LEN }, - - [NL80211_ATTR_MGMT_SUBTYPE] = { .type = NLA_U8 }, - [NL80211_ATTR_IE] = { .type = NLA_BINARY, - .len = IEEE80211_MAX_DATA_LEN }, - [NL80211_ATTR_SCAN_FREQUENCIES] = { .type = NLA_NESTED }, - [NL80211_ATTR_SCAN_SSIDS] = { .type = NLA_NESTED }, - - [NL80211_ATTR_SSID] = { .type = NLA_BINARY, - .len = IEEE80211_MAX_SSID_LEN }, - [NL80211_ATTR_AUTH_TYPE] = { .type = NLA_U32 }, - [NL80211_ATTR_REASON_CODE] = { .type = NLA_U16 }, - [NL80211_ATTR_FREQ_FIXED] = { .type = NLA_FLAG }, - [NL80211_ATTR_TIMED_OUT] = { .type = NLA_FLAG }, - [NL80211_ATTR_USE_MFP] = { .type = NLA_U32 }, - [NL80211_ATTR_STA_FLAGS2] = { - .len = sizeof(struct nl80211_sta_flag_update), - }, - [NL80211_ATTR_CONTROL_PORT] = { .type = NLA_FLAG }, - [NL80211_ATTR_CONTROL_PORT_ETHERTYPE] = { .type = NLA_U16 }, - [NL80211_ATTR_CONTROL_PORT_NO_ENCRYPT] = { .type = NLA_FLAG }, - [NL80211_ATTR_PRIVACY] = { .type = NLA_FLAG }, - [NL80211_ATTR_CIPHER_SUITE_GROUP] = { .type = NLA_U32 }, - [NL80211_ATTR_WPA_VERSIONS] = { .type = NLA_U32 }, - [NL80211_ATTR_PID] = { .type = NLA_U32 }, - [NL80211_ATTR_4ADDR] = { .type = NLA_U8 }, - [NL80211_ATTR_PMKID] = { .type = NLA_BINARY, - .len = WLAN_PMKID_LEN }, - [NL80211_ATTR_DURATION] = { .type = NLA_U32 }, - [NL80211_ATTR_COOKIE] = { .type = NLA_U64 }, - [NL80211_ATTR_TX_RATES] = { .type = NLA_NESTED }, - [NL80211_ATTR_FRAME] = { .type = NLA_BINARY, - .len = IEEE80211_MAX_DATA_LEN }, - [NL80211_ATTR_FRAME_MATCH] = { .type = NLA_BINARY, }, - [NL80211_ATTR_PS_STATE] = { .type = NLA_U32 }, - [NL80211_ATTR_CQM] = { .type = NLA_NESTED, }, - [NL80211_ATTR_LOCAL_STATE_CHANGE] = { .type = NLA_FLAG }, - [NL80211_ATTR_AP_ISOLATE] = { .type = NLA_U8 }, - [NL80211_ATTR_WIPHY_TX_POWER_SETTING] = { .type = NLA_U32 }, - [NL80211_ATTR_WIPHY_TX_POWER_LEVEL] = { .type = NLA_U32 }, - [NL80211_ATTR_FRAME_TYPE] = { .type = NLA_U16 }, - [NL80211_ATTR_WIPHY_ANTENNA_TX] = { .type = NLA_U32 }, - [NL80211_ATTR_WIPHY_ANTENNA_RX] = { .type = NLA_U32 }, - [NL80211_ATTR_MCAST_RATE] = { .type = NLA_U32 }, - [NL80211_ATTR_OFFCHANNEL_TX_OK] = { .type = NLA_FLAG }, - [NL80211_ATTR_KEY_DEFAULT_TYPES] = { .type = NLA_NESTED }, - [NL80211_ATTR_WOWLAN_TRIGGERS] = { .type = NLA_NESTED }, - [NL80211_ATTR_STA_PLINK_STATE] = { .type = NLA_U8 }, - [NL80211_ATTR_SCHED_SCAN_INTERVAL] = { .type = NLA_U32 }, - [NL80211_ATTR_REKEY_DATA] = { .type = NLA_NESTED }, - [NL80211_ATTR_SCAN_SUPP_RATES] = { .type = NLA_NESTED }, - [NL80211_ATTR_HIDDEN_SSID] = { .type = NLA_U32 }, - [NL80211_ATTR_IE_PROBE_RESP] = { .type = NLA_BINARY, - .len = IEEE80211_MAX_DATA_LEN }, - [NL80211_ATTR_IE_ASSOC_RESP] = { .type = NLA_BINARY, - .len = IEEE80211_MAX_DATA_LEN }, - [NL80211_ATTR_ROAM_SUPPORT] = { .type = NLA_FLAG }, - [NL80211_ATTR_SCHED_SCAN_MATCH] = { .type = NLA_NESTED }, - [NL80211_ATTR_TX_NO_CCK_RATE] = { .type = NLA_FLAG }, - [NL80211_ATTR_TDLS_ACTION] = { .type = NLA_U8 }, - [NL80211_ATTR_TDLS_DIALOG_TOKEN] = { .type = NLA_U8 }, - [NL80211_ATTR_TDLS_OPERATION] = { .type = NLA_U8 }, - [NL80211_ATTR_TDLS_SUPPORT] = { .type = NLA_FLAG }, - [NL80211_ATTR_TDLS_EXTERNAL_SETUP] = { .type = NLA_FLAG }, - [NL80211_ATTR_DONT_WAIT_FOR_ACK] = { .type = NLA_FLAG }, - [NL80211_ATTR_PROBE_RESP] = { .type = NLA_BINARY, - .len = IEEE80211_MAX_DATA_LEN }, - [NL80211_ATTR_DFS_REGION] = { .type = NLA_U8 }, - [NL80211_ATTR_DISABLE_HT] = { .type = NLA_FLAG }, - [NL80211_ATTR_HT_CAPABILITY_MASK] = { - .len = NL80211_HT_CAPABILITY_LEN - }, - [NL80211_ATTR_NOACK_MAP] = { .type = NLA_U16 }, - [NL80211_ATTR_INACTIVITY_TIMEOUT] = { .type = NLA_U16 }, - [NL80211_ATTR_BG_SCAN_PERIOD] = { .type = NLA_U16 }, -}; - -/* policy for the key attributes */ -static const struct nla_policy nl80211_key_policy[NL80211_KEY_MAX + 1] = { - [NL80211_KEY_DATA] = { .type = NLA_BINARY, .len = WLAN_MAX_KEY_LEN }, - [NL80211_KEY_IDX] = { .type = NLA_U8 }, - [NL80211_KEY_CIPHER] = { .type = NLA_U32 }, - [NL80211_KEY_SEQ] = { .type = NLA_BINARY, .len = 16 }, - [NL80211_KEY_DEFAULT] = { .type = NLA_FLAG }, - [NL80211_KEY_DEFAULT_MGMT] = { .type = NLA_FLAG }, - [NL80211_KEY_TYPE] = { .type = NLA_U32 }, - [NL80211_KEY_DEFAULT_TYPES] = { .type = NLA_NESTED }, -}; - -/* policy for the key default flags */ -static const struct nla_policy -nl80211_key_default_policy[NUM_NL80211_KEY_DEFAULT_TYPES] = { - [NL80211_KEY_DEFAULT_TYPE_UNICAST] = { .type = NLA_FLAG }, - [NL80211_KEY_DEFAULT_TYPE_MULTICAST] = { .type = NLA_FLAG }, -}; - -/* policy for WoWLAN attributes */ -static const struct nla_policy -nl80211_wowlan_policy[NUM_NL80211_WOWLAN_TRIG] = { - [NL80211_WOWLAN_TRIG_ANY] = { .type = NLA_FLAG }, - [NL80211_WOWLAN_TRIG_DISCONNECT] = { .type = NLA_FLAG }, - [NL80211_WOWLAN_TRIG_MAGIC_PKT] = { .type = NLA_FLAG }, - [NL80211_WOWLAN_TRIG_PKT_PATTERN] = { .type = NLA_NESTED }, - [NL80211_WOWLAN_TRIG_GTK_REKEY_FAILURE] = { .type = NLA_FLAG }, - [NL80211_WOWLAN_TRIG_EAP_IDENT_REQUEST] = { .type = NLA_FLAG }, - [NL80211_WOWLAN_TRIG_4WAY_HANDSHAKE] = { .type = NLA_FLAG }, - [NL80211_WOWLAN_TRIG_RFKILL_RELEASE] = { .type = NLA_FLAG }, -}; - -/* policy for GTK rekey offload attributes */ -static const struct nla_policy -nl80211_rekey_policy[NUM_NL80211_REKEY_DATA] = { - [NL80211_REKEY_DATA_KEK] = { .len = NL80211_KEK_LEN }, - [NL80211_REKEY_DATA_KCK] = { .len = NL80211_KCK_LEN }, - [NL80211_REKEY_DATA_REPLAY_CTR] = { .len = NL80211_REPLAY_CTR_LEN }, -}; - -static const struct nla_policy -nl80211_match_policy[NL80211_SCHED_SCAN_MATCH_ATTR_MAX + 1] = { - [NL80211_ATTR_SCHED_SCAN_MATCH_SSID] = { .type = NLA_BINARY, - .len = IEEE80211_MAX_SSID_LEN }, -}; - -/* ifidx get helper */ -static int nl80211_get_ifidx(struct netlink_callback *cb) -{ - int res; - - res = nlmsg_parse(cb->nlh, GENL_HDRLEN + nl80211_fam.hdrsize, - nl80211_fam.attrbuf, nl80211_fam.maxattr, - nl80211_policy); - if (res) - return res; - - if (!nl80211_fam.attrbuf[NL80211_ATTR_IFINDEX]) - return -EINVAL; - - res = nla_get_u32(nl80211_fam.attrbuf[NL80211_ATTR_IFINDEX]); - if (!res) - return -EINVAL; - return res; -} - -static int nl80211_prepare_netdev_dump(struct sk_buff *skb, - struct netlink_callback *cb, - struct cfg80211_registered_device **rdev, - struct net_device **dev) -{ - int ifidx = cb->args[0]; - int err; - - if (!ifidx) - ifidx = nl80211_get_ifidx(cb); - if (ifidx < 0) - return ifidx; - - cb->args[0] = ifidx; - - rtnl_lock(); - - *dev = __dev_get_by_index(sock_net(skb->sk), ifidx); - if (!*dev) { - err = -ENODEV; - goto out_rtnl; - } - - *rdev = cfg80211_get_dev_from_ifindex(sock_net(skb->sk), ifidx); - if (IS_ERR(*rdev)) { - err = PTR_ERR(*rdev); - goto out_rtnl; - } - - return 0; - out_rtnl: - rtnl_unlock(); - return err; -} - -static void nl80211_finish_netdev_dump(struct cfg80211_registered_device *rdev) -{ - cfg80211_unlock_rdev(rdev); - rtnl_unlock(); -} - -/* IE validation */ -static bool is_valid_ie_attr(const struct nlattr *attr) -{ - const u8 *pos; - int len; - - if (!attr) - return true; - - pos = nla_data(attr); - len = nla_len(attr); - - while (len) { - u8 elemlen; - - if (len < 2) - return false; - len -= 2; - - elemlen = pos[1]; - if (elemlen > len) - return false; - - len -= elemlen; - pos += 2 + elemlen; - } - - return true; -} - -/* message building helper */ -static inline void *nl80211hdr_put(struct sk_buff *skb, u32 pid, u32 seq, - int flags, u8 cmd) -{ - /* since there is no private header just add the generic one */ - return genlmsg_put(skb, pid, seq, &nl80211_fam, flags, cmd); -} - -static int nl80211_msg_put_channel(struct sk_buff *msg, - struct ieee80211_channel *chan) -{ - NLA_PUT_U32(msg, NL80211_FREQUENCY_ATTR_FREQ, - chan->center_freq); - - if (chan->flags & IEEE80211_CHAN_DISABLED) - NLA_PUT_FLAG(msg, NL80211_FREQUENCY_ATTR_DISABLED); - if (chan->flags & IEEE80211_CHAN_PASSIVE_SCAN) - NLA_PUT_FLAG(msg, NL80211_FREQUENCY_ATTR_PASSIVE_SCAN); - if (chan->flags & IEEE80211_CHAN_NO_IBSS) - NLA_PUT_FLAG(msg, NL80211_FREQUENCY_ATTR_NO_IBSS); - if (chan->flags & IEEE80211_CHAN_RADAR) - NLA_PUT_FLAG(msg, NL80211_FREQUENCY_ATTR_RADAR); - - NLA_PUT_U32(msg, NL80211_FREQUENCY_ATTR_MAX_TX_POWER, - DBM_TO_MBM(chan->max_power)); - - return 0; - - nla_put_failure: - return -ENOBUFS; -} - -/* netlink command implementations */ - -struct key_parse { - struct key_params p; - int idx; - int type; - bool def, defmgmt; - bool def_uni, def_multi; -}; - -static int nl80211_parse_key_new(struct nlattr *key, struct key_parse *k) -{ - struct nlattr *tb[NL80211_KEY_MAX + 1]; - int err = nla_parse_nested(tb, NL80211_KEY_MAX, key, - nl80211_key_policy); - if (err) - return err; - - k->def = !!tb[NL80211_KEY_DEFAULT]; - k->defmgmt = !!tb[NL80211_KEY_DEFAULT_MGMT]; - - if (k->def) { - k->def_uni = true; - k->def_multi = true; - } - if (k->defmgmt) - k->def_multi = true; - - if (tb[NL80211_KEY_IDX]) - k->idx = nla_get_u8(tb[NL80211_KEY_IDX]); - - if (tb[NL80211_KEY_DATA]) { - k->p.key = nla_data(tb[NL80211_KEY_DATA]); - k->p.key_len = nla_len(tb[NL80211_KEY_DATA]); - } - - if (tb[NL80211_KEY_SEQ]) { - k->p.seq = nla_data(tb[NL80211_KEY_SEQ]); - k->p.seq_len = nla_len(tb[NL80211_KEY_SEQ]); - } - - if (tb[NL80211_KEY_CIPHER]) - k->p.cipher = nla_get_u32(tb[NL80211_KEY_CIPHER]); - - if (tb[NL80211_KEY_TYPE]) { - k->type = nla_get_u32(tb[NL80211_KEY_TYPE]); - if (k->type < 0 || k->type >= NUM_NL80211_KEYTYPES) - return -EINVAL; - } - - if (tb[NL80211_KEY_DEFAULT_TYPES]) { - struct nlattr *kdt[NUM_NL80211_KEY_DEFAULT_TYPES]; - err = nla_parse_nested(kdt, NUM_NL80211_KEY_DEFAULT_TYPES - 1, - tb[NL80211_KEY_DEFAULT_TYPES], - nl80211_key_default_policy); - if (err) - return err; - - k->def_uni = kdt[NL80211_KEY_DEFAULT_TYPE_UNICAST]; - k->def_multi = kdt[NL80211_KEY_DEFAULT_TYPE_MULTICAST]; - } - - return 0; -} - -static int nl80211_parse_key_old(struct genl_info *info, struct key_parse *k) -{ - if (info->attrs[NL80211_ATTR_KEY_DATA]) { - k->p.key = nla_data(info->attrs[NL80211_ATTR_KEY_DATA]); - k->p.key_len = nla_len(info->attrs[NL80211_ATTR_KEY_DATA]); - } - - if (info->attrs[NL80211_ATTR_KEY_SEQ]) { - k->p.seq = nla_data(info->attrs[NL80211_ATTR_KEY_SEQ]); - k->p.seq_len = nla_len(info->attrs[NL80211_ATTR_KEY_SEQ]); - } - - if (info->attrs[NL80211_ATTR_KEY_IDX]) - k->idx = nla_get_u8(info->attrs[NL80211_ATTR_KEY_IDX]); - - if (info->attrs[NL80211_ATTR_KEY_CIPHER]) - k->p.cipher = nla_get_u32(info->attrs[NL80211_ATTR_KEY_CIPHER]); - - k->def = !!info->attrs[NL80211_ATTR_KEY_DEFAULT]; - k->defmgmt = !!info->attrs[NL80211_ATTR_KEY_DEFAULT_MGMT]; - - if (k->def) { - k->def_uni = true; - k->def_multi = true; - } - if (k->defmgmt) - k->def_multi = true; - - if (info->attrs[NL80211_ATTR_KEY_TYPE]) { - k->type = nla_get_u32(info->attrs[NL80211_ATTR_KEY_TYPE]); - if (k->type < 0 || k->type >= NUM_NL80211_KEYTYPES) - return -EINVAL; - } - - if (info->attrs[NL80211_ATTR_KEY_DEFAULT_TYPES]) { - struct nlattr *kdt[NUM_NL80211_KEY_DEFAULT_TYPES]; - int err = nla_parse_nested( - kdt, NUM_NL80211_KEY_DEFAULT_TYPES - 1, - info->attrs[NL80211_ATTR_KEY_DEFAULT_TYPES], - nl80211_key_default_policy); - if (err) - return err; - - k->def_uni = kdt[NL80211_KEY_DEFAULT_TYPE_UNICAST]; - k->def_multi = kdt[NL80211_KEY_DEFAULT_TYPE_MULTICAST]; - } - - return 0; -} - -static int nl80211_parse_key(struct genl_info *info, struct key_parse *k) -{ - int err; - - memset(k, 0, sizeof(*k)); - k->idx = -1; - k->type = -1; - - if (info->attrs[NL80211_ATTR_KEY]) - err = nl80211_parse_key_new(info->attrs[NL80211_ATTR_KEY], k); - else - err = nl80211_parse_key_old(info, k); - - if (err) - return err; - - if (k->def && k->defmgmt) - return -EINVAL; - - if (k->defmgmt) { - if (k->def_uni || !k->def_multi) - return -EINVAL; - } - - if (k->idx != -1) { - if (k->defmgmt) { - if (k->idx < 4 || k->idx > 5) - return -EINVAL; - } else if (k->def) { - if (k->idx < 0 || k->idx > 3) - return -EINVAL; - } else { - if (k->idx < 0 || k->idx > 5) - return -EINVAL; - } - } - - return 0; -} - -static struct cfg80211_cached_keys * -nl80211_parse_connkeys(struct cfg80211_registered_device *rdev, - struct nlattr *keys) -{ - struct key_parse parse; - struct nlattr *key; - struct cfg80211_cached_keys *result; - int rem, err, def = 0; - - result = kzalloc(sizeof(*result), GFP_KERNEL); - if (!result) - return ERR_PTR(-ENOMEM); - - result->def = -1; - result->defmgmt = -1; - - nla_for_each_nested(key, keys, rem) { - memset(&parse, 0, sizeof(parse)); - parse.idx = -1; - - err = nl80211_parse_key_new(key, &parse); - if (err) - goto error; - err = -EINVAL; - if (!parse.p.key) - goto error; - if (parse.idx < 0 || parse.idx > 4) - goto error; - if (parse.def) { - if (def) - goto error; - def = 1; - result->def = parse.idx; - if (!parse.def_uni || !parse.def_multi) - goto error; - } else if (parse.defmgmt) - goto error; - err = cfg80211_validate_key_settings(rdev, &parse.p, - parse.idx, false, NULL); - if (err) - goto error; - result->params[parse.idx].cipher = parse.p.cipher; - result->params[parse.idx].key_len = parse.p.key_len; - result->params[parse.idx].key = result->data[parse.idx]; - memcpy(result->data[parse.idx], parse.p.key, parse.p.key_len); - } - - return result; - error: - kfree(result); - return ERR_PTR(err); -} - -static int nl80211_key_allowed(struct wireless_dev *wdev) -{ - ASSERT_WDEV_LOCK(wdev); - - switch (wdev->iftype) { - case NL80211_IFTYPE_AP: - case NL80211_IFTYPE_AP_VLAN: - case NL80211_IFTYPE_P2P_GO: - case NL80211_IFTYPE_MESH_POINT: - break; - case NL80211_IFTYPE_ADHOC: - if (!wdev->current_bss) - return -ENOLINK; - break; - case NL80211_IFTYPE_STATION: - case NL80211_IFTYPE_P2P_CLIENT: - if (wdev->sme_state != CFG80211_SME_CONNECTED) - return -ENOLINK; - break; - default: - return -EINVAL; - } - - return 0; -} - -static int nl80211_put_iftypes(struct sk_buff *msg, u32 attr, u16 ifmodes) -{ - struct nlattr *nl_modes = nla_nest_start(msg, attr); - int i; - - if (!nl_modes) - goto nla_put_failure; - - i = 0; - while (ifmodes) { - if (ifmodes & 1) - NLA_PUT_FLAG(msg, i); - ifmodes >>= 1; - i++; - } - - nla_nest_end(msg, nl_modes); - return 0; - -nla_put_failure: - return -ENOBUFS; -} - -static int nl80211_put_iface_combinations(struct wiphy *wiphy, - struct sk_buff *msg) -{ - struct nlattr *nl_combis; - int i, j; - - nl_combis = nla_nest_start(msg, - NL80211_ATTR_INTERFACE_COMBINATIONS); - if (!nl_combis) - goto nla_put_failure; - - for (i = 0; i < wiphy->n_iface_combinations; i++) { - const struct ieee80211_iface_combination *c; - struct nlattr *nl_combi, *nl_limits; - - c = &wiphy->iface_combinations[i]; - - nl_combi = nla_nest_start(msg, i + 1); - if (!nl_combi) - goto nla_put_failure; - - nl_limits = nla_nest_start(msg, NL80211_IFACE_COMB_LIMITS); - if (!nl_limits) - goto nla_put_failure; - - for (j = 0; j < c->n_limits; j++) { - struct nlattr *nl_limit; - - nl_limit = nla_nest_start(msg, j + 1); - if (!nl_limit) - goto nla_put_failure; - NLA_PUT_U32(msg, NL80211_IFACE_LIMIT_MAX, - c->limits[j].max); - if (nl80211_put_iftypes(msg, NL80211_IFACE_LIMIT_TYPES, - c->limits[j].types)) - goto nla_put_failure; - nla_nest_end(msg, nl_limit); - } - - nla_nest_end(msg, nl_limits); - - if (c->beacon_int_infra_match) - NLA_PUT_FLAG(msg, - NL80211_IFACE_COMB_STA_AP_BI_MATCH); - NLA_PUT_U32(msg, NL80211_IFACE_COMB_NUM_CHANNELS, - c->num_different_channels); - NLA_PUT_U32(msg, NL80211_IFACE_COMB_MAXNUM, - c->max_interfaces); - - nla_nest_end(msg, nl_combi); - } - - nla_nest_end(msg, nl_combis); - - return 0; -nla_put_failure: - return -ENOBUFS; -} - -static int nl80211_send_wiphy(struct sk_buff *msg, u32 pid, u32 seq, int flags, - struct cfg80211_registered_device *dev) -{ - void *hdr; - struct nlattr *nl_bands, *nl_band; - struct nlattr *nl_freqs, *nl_freq; - struct nlattr *nl_rates, *nl_rate; - struct nlattr *nl_cmds; - enum ieee80211_band band; - struct ieee80211_channel *chan; - struct ieee80211_rate *rate; - int i; - const struct ieee80211_txrx_stypes *mgmt_stypes = - dev->wiphy.mgmt_stypes; - - hdr = nl80211hdr_put(msg, pid, seq, flags, NL80211_CMD_NEW_WIPHY); - if (!hdr) - return -1; - - NLA_PUT_U32(msg, NL80211_ATTR_WIPHY, dev->wiphy_idx); - NLA_PUT_STRING(msg, NL80211_ATTR_WIPHY_NAME, wiphy_name(&dev->wiphy)); - - NLA_PUT_U32(msg, NL80211_ATTR_GENERATION, - cfg80211_rdev_list_generation); - - NLA_PUT_U8(msg, NL80211_ATTR_WIPHY_RETRY_SHORT, - dev->wiphy.retry_short); - NLA_PUT_U8(msg, NL80211_ATTR_WIPHY_RETRY_LONG, - dev->wiphy.retry_long); - NLA_PUT_U32(msg, NL80211_ATTR_WIPHY_FRAG_THRESHOLD, - dev->wiphy.frag_threshold); - NLA_PUT_U32(msg, NL80211_ATTR_WIPHY_RTS_THRESHOLD, - dev->wiphy.rts_threshold); - NLA_PUT_U8(msg, NL80211_ATTR_WIPHY_COVERAGE_CLASS, - dev->wiphy.coverage_class); - NLA_PUT_U8(msg, NL80211_ATTR_MAX_NUM_SCAN_SSIDS, - dev->wiphy.max_scan_ssids); - NLA_PUT_U8(msg, NL80211_ATTR_MAX_NUM_SCHED_SCAN_SSIDS, - dev->wiphy.max_sched_scan_ssids); - NLA_PUT_U16(msg, NL80211_ATTR_MAX_SCAN_IE_LEN, - dev->wiphy.max_scan_ie_len); - NLA_PUT_U16(msg, NL80211_ATTR_MAX_SCHED_SCAN_IE_LEN, - dev->wiphy.max_sched_scan_ie_len); - NLA_PUT_U8(msg, NL80211_ATTR_MAX_MATCH_SETS, - dev->wiphy.max_match_sets); - - if (dev->wiphy.flags & WIPHY_FLAG_IBSS_RSN) - NLA_PUT_FLAG(msg, NL80211_ATTR_SUPPORT_IBSS_RSN); - if (dev->wiphy.flags & WIPHY_FLAG_MESH_AUTH) - NLA_PUT_FLAG(msg, NL80211_ATTR_SUPPORT_MESH_AUTH); - if (dev->wiphy.flags & WIPHY_FLAG_AP_UAPSD) - NLA_PUT_FLAG(msg, NL80211_ATTR_SUPPORT_AP_UAPSD); - if (dev->wiphy.flags & WIPHY_FLAG_SUPPORTS_FW_ROAM) - NLA_PUT_FLAG(msg, NL80211_ATTR_ROAM_SUPPORT); - if (dev->wiphy.flags & WIPHY_FLAG_SUPPORTS_TDLS) - NLA_PUT_FLAG(msg, NL80211_ATTR_TDLS_SUPPORT); - if (dev->wiphy.flags & WIPHY_FLAG_TDLS_EXTERNAL_SETUP) - NLA_PUT_FLAG(msg, NL80211_ATTR_TDLS_EXTERNAL_SETUP); - - NLA_PUT(msg, NL80211_ATTR_CIPHER_SUITES, - sizeof(u32) * dev->wiphy.n_cipher_suites, - dev->wiphy.cipher_suites); - - NLA_PUT_U8(msg, NL80211_ATTR_MAX_NUM_PMKIDS, - dev->wiphy.max_num_pmkids); - - if (dev->wiphy.flags & WIPHY_FLAG_CONTROL_PORT_PROTOCOL) - NLA_PUT_FLAG(msg, NL80211_ATTR_CONTROL_PORT_ETHERTYPE); - - NLA_PUT_U32(msg, NL80211_ATTR_WIPHY_ANTENNA_AVAIL_TX, - dev->wiphy.available_antennas_tx); - NLA_PUT_U32(msg, NL80211_ATTR_WIPHY_ANTENNA_AVAIL_RX, - dev->wiphy.available_antennas_rx); - - if (dev->wiphy.flags & WIPHY_FLAG_AP_PROBE_RESP_OFFLOAD) - NLA_PUT_U32(msg, NL80211_ATTR_PROBE_RESP_OFFLOAD, - dev->wiphy.probe_resp_offload); - - if ((dev->wiphy.available_antennas_tx || - dev->wiphy.available_antennas_rx) && dev->ops->get_antenna) { - u32 tx_ant = 0, rx_ant = 0; - int res; - res = dev->ops->get_antenna(&dev->wiphy, &tx_ant, &rx_ant); - if (!res) { - NLA_PUT_U32(msg, NL80211_ATTR_WIPHY_ANTENNA_TX, tx_ant); - NLA_PUT_U32(msg, NL80211_ATTR_WIPHY_ANTENNA_RX, rx_ant); - } - } - - if (nl80211_put_iftypes(msg, NL80211_ATTR_SUPPORTED_IFTYPES, - dev->wiphy.interface_modes)) - goto nla_put_failure; - - nl_bands = nla_nest_start(msg, NL80211_ATTR_WIPHY_BANDS); - if (!nl_bands) - goto nla_put_failure; - - for (band = 0; band < IEEE80211_NUM_BANDS; band++) { - if (!dev->wiphy.bands[band]) - continue; - - nl_band = nla_nest_start(msg, band); - if (!nl_band) - goto nla_put_failure; - - /* add HT info */ - if (dev->wiphy.bands[band]->ht_cap.ht_supported) { - NLA_PUT(msg, NL80211_BAND_ATTR_HT_MCS_SET, - sizeof(dev->wiphy.bands[band]->ht_cap.mcs), - &dev->wiphy.bands[band]->ht_cap.mcs); - NLA_PUT_U16(msg, NL80211_BAND_ATTR_HT_CAPA, - dev->wiphy.bands[band]->ht_cap.cap); - NLA_PUT_U8(msg, NL80211_BAND_ATTR_HT_AMPDU_FACTOR, - dev->wiphy.bands[band]->ht_cap.ampdu_factor); - NLA_PUT_U8(msg, NL80211_BAND_ATTR_HT_AMPDU_DENSITY, - dev->wiphy.bands[band]->ht_cap.ampdu_density); - } - - /* add frequencies */ - nl_freqs = nla_nest_start(msg, NL80211_BAND_ATTR_FREQS); - if (!nl_freqs) - goto nla_put_failure; - - for (i = 0; i < dev->wiphy.bands[band]->n_channels; i++) { - nl_freq = nla_nest_start(msg, i); - if (!nl_freq) - goto nla_put_failure; - - chan = &dev->wiphy.bands[band]->channels[i]; - - if (nl80211_msg_put_channel(msg, chan)) - goto nla_put_failure; - - nla_nest_end(msg, nl_freq); - } - - nla_nest_end(msg, nl_freqs); - - /* add bitrates */ - nl_rates = nla_nest_start(msg, NL80211_BAND_ATTR_RATES); - if (!nl_rates) - goto nla_put_failure; - - for (i = 0; i < dev->wiphy.bands[band]->n_bitrates; i++) { - nl_rate = nla_nest_start(msg, i); - if (!nl_rate) - goto nla_put_failure; - - rate = &dev->wiphy.bands[band]->bitrates[i]; - NLA_PUT_U32(msg, NL80211_BITRATE_ATTR_RATE, - rate->bitrate); - if (rate->flags & IEEE80211_RATE_SHORT_PREAMBLE) - NLA_PUT_FLAG(msg, - NL80211_BITRATE_ATTR_2GHZ_SHORTPREAMBLE); - - nla_nest_end(msg, nl_rate); - } - - nla_nest_end(msg, nl_rates); - - nla_nest_end(msg, nl_band); - } - nla_nest_end(msg, nl_bands); - - nl_cmds = nla_nest_start(msg, NL80211_ATTR_SUPPORTED_COMMANDS); - if (!nl_cmds) - goto nla_put_failure; - - i = 0; -#define CMD(op, n) \ - do { \ - if (dev->ops->op) { \ - i++; \ - NLA_PUT_U32(msg, i, NL80211_CMD_ ## n); \ - } \ - } while (0) - - CMD(add_virtual_intf, NEW_INTERFACE); - CMD(change_virtual_intf, SET_INTERFACE); - CMD(add_key, NEW_KEY); - CMD(start_ap, START_AP); - CMD(add_station, NEW_STATION); - CMD(add_mpath, NEW_MPATH); - CMD(update_mesh_config, SET_MESH_CONFIG); - CMD(change_bss, SET_BSS); - CMD(auth, AUTHENTICATE); - CMD(assoc, ASSOCIATE); - CMD(deauth, DEAUTHENTICATE); - CMD(disassoc, DISASSOCIATE); - CMD(join_ibss, JOIN_IBSS); - CMD(join_mesh, JOIN_MESH); - CMD(set_pmksa, SET_PMKSA); - CMD(del_pmksa, DEL_PMKSA); - CMD(flush_pmksa, FLUSH_PMKSA); - if (dev->wiphy.flags & WIPHY_FLAG_HAS_REMAIN_ON_CHANNEL) - CMD(remain_on_channel, REMAIN_ON_CHANNEL); - CMD(set_bitrate_mask, SET_TX_BITRATE_MASK); - CMD(mgmt_tx, FRAME); - CMD(mgmt_tx_cancel_wait, FRAME_WAIT_CANCEL); - if (dev->wiphy.flags & WIPHY_FLAG_NETNS_OK) { - i++; - NLA_PUT_U32(msg, i, NL80211_CMD_SET_WIPHY_NETNS); - } - CMD(set_channel, SET_CHANNEL); - CMD(set_wds_peer, SET_WDS_PEER); - if (dev->wiphy.flags & WIPHY_FLAG_SUPPORTS_TDLS) { - CMD(tdls_mgmt, TDLS_MGMT); - CMD(tdls_oper, TDLS_OPER); - } - if (dev->wiphy.flags & WIPHY_FLAG_SUPPORTS_SCHED_SCAN) - CMD(sched_scan_start, START_SCHED_SCAN); - CMD(probe_client, PROBE_CLIENT); - CMD(set_noack_map, SET_NOACK_MAP); - if (dev->wiphy.flags & WIPHY_FLAG_REPORTS_OBSS) { - i++; - NLA_PUT_U32(msg, i, NL80211_CMD_REGISTER_BEACONS); - } - -#ifdef CONFIG_NL80211_TESTMODE - CMD(testmode_cmd, TESTMODE); -#endif - -#undef CMD - - if (dev->ops->connect || dev->ops->auth) { - i++; - NLA_PUT_U32(msg, i, NL80211_CMD_CONNECT); - } - - if (dev->ops->disconnect || dev->ops->deauth) { - i++; - NLA_PUT_U32(msg, i, NL80211_CMD_DISCONNECT); - } - - nla_nest_end(msg, nl_cmds); - - if (dev->ops->remain_on_channel && - dev->wiphy.flags & WIPHY_FLAG_HAS_REMAIN_ON_CHANNEL) - NLA_PUT_U32(msg, NL80211_ATTR_MAX_REMAIN_ON_CHANNEL_DURATION, - dev->wiphy.max_remain_on_channel_duration); - - if (dev->wiphy.flags & WIPHY_FLAG_OFFCHAN_TX) - NLA_PUT_FLAG(msg, NL80211_ATTR_OFFCHANNEL_TX_OK); - - if (mgmt_stypes) { - u16 stypes; - struct nlattr *nl_ftypes, *nl_ifs; - enum nl80211_iftype ift; - - nl_ifs = nla_nest_start(msg, NL80211_ATTR_TX_FRAME_TYPES); - if (!nl_ifs) - goto nla_put_failure; - - for (ift = 0; ift < NUM_NL80211_IFTYPES; ift++) { - nl_ftypes = nla_nest_start(msg, ift); - if (!nl_ftypes) - goto nla_put_failure; - i = 0; - stypes = mgmt_stypes[ift].tx; - while (stypes) { - if (stypes & 1) - NLA_PUT_U16(msg, NL80211_ATTR_FRAME_TYPE, - (i << 4) | IEEE80211_FTYPE_MGMT); - stypes >>= 1; - i++; - } - nla_nest_end(msg, nl_ftypes); - } - - nla_nest_end(msg, nl_ifs); - - nl_ifs = nla_nest_start(msg, NL80211_ATTR_RX_FRAME_TYPES); - if (!nl_ifs) - goto nla_put_failure; - - for (ift = 0; ift < NUM_NL80211_IFTYPES; ift++) { - nl_ftypes = nla_nest_start(msg, ift); - if (!nl_ftypes) - goto nla_put_failure; - i = 0; - stypes = mgmt_stypes[ift].rx; - while (stypes) { - if (stypes & 1) - NLA_PUT_U16(msg, NL80211_ATTR_FRAME_TYPE, - (i << 4) | IEEE80211_FTYPE_MGMT); - stypes >>= 1; - i++; - } - nla_nest_end(msg, nl_ftypes); - } - nla_nest_end(msg, nl_ifs); - } - - if (dev->wiphy.wowlan.flags || dev->wiphy.wowlan.n_patterns) { - struct nlattr *nl_wowlan; - - nl_wowlan = nla_nest_start(msg, - NL80211_ATTR_WOWLAN_TRIGGERS_SUPPORTED); - if (!nl_wowlan) - goto nla_put_failure; - - if (dev->wiphy.wowlan.flags & WIPHY_WOWLAN_ANY) - NLA_PUT_FLAG(msg, NL80211_WOWLAN_TRIG_ANY); - if (dev->wiphy.wowlan.flags & WIPHY_WOWLAN_DISCONNECT) - NLA_PUT_FLAG(msg, NL80211_WOWLAN_TRIG_DISCONNECT); - if (dev->wiphy.wowlan.flags & WIPHY_WOWLAN_MAGIC_PKT) - NLA_PUT_FLAG(msg, NL80211_WOWLAN_TRIG_MAGIC_PKT); - if (dev->wiphy.wowlan.flags & WIPHY_WOWLAN_SUPPORTS_GTK_REKEY) - NLA_PUT_FLAG(msg, NL80211_WOWLAN_TRIG_GTK_REKEY_SUPPORTED); - if (dev->wiphy.wowlan.flags & WIPHY_WOWLAN_GTK_REKEY_FAILURE) - NLA_PUT_FLAG(msg, NL80211_WOWLAN_TRIG_GTK_REKEY_FAILURE); - if (dev->wiphy.wowlan.flags & WIPHY_WOWLAN_EAP_IDENTITY_REQ) - NLA_PUT_FLAG(msg, NL80211_WOWLAN_TRIG_EAP_IDENT_REQUEST); - if (dev->wiphy.wowlan.flags & WIPHY_WOWLAN_4WAY_HANDSHAKE) - NLA_PUT_FLAG(msg, NL80211_WOWLAN_TRIG_4WAY_HANDSHAKE); - if (dev->wiphy.wowlan.flags & WIPHY_WOWLAN_RFKILL_RELEASE) - NLA_PUT_FLAG(msg, NL80211_WOWLAN_TRIG_RFKILL_RELEASE); - if (dev->wiphy.wowlan.n_patterns) { - struct nl80211_wowlan_pattern_support pat = { - .max_patterns = dev->wiphy.wowlan.n_patterns, - .min_pattern_len = - dev->wiphy.wowlan.pattern_min_len, - .max_pattern_len = - dev->wiphy.wowlan.pattern_max_len, - }; - NLA_PUT(msg, NL80211_WOWLAN_TRIG_PKT_PATTERN, - sizeof(pat), &pat); - } - - nla_nest_end(msg, nl_wowlan); - } - - if (nl80211_put_iftypes(msg, NL80211_ATTR_SOFTWARE_IFTYPES, - dev->wiphy.software_iftypes)) - goto nla_put_failure; - - if (nl80211_put_iface_combinations(&dev->wiphy, msg)) - goto nla_put_failure; - - if (dev->wiphy.flags & WIPHY_FLAG_HAVE_AP_SME) - NLA_PUT_U32(msg, NL80211_ATTR_DEVICE_AP_SME, - dev->wiphy.ap_sme_capa); - - NLA_PUT_U32(msg, NL80211_ATTR_FEATURE_FLAGS, dev->wiphy.features); - - if (dev->wiphy.ht_capa_mod_mask) - NLA_PUT(msg, NL80211_ATTR_HT_CAPABILITY_MASK, - sizeof(*dev->wiphy.ht_capa_mod_mask), - dev->wiphy.ht_capa_mod_mask); - - return genlmsg_end(msg, hdr); - - nla_put_failure: - genlmsg_cancel(msg, hdr); - return -EMSGSIZE; -} - -static int nl80211_dump_wiphy(struct sk_buff *skb, struct netlink_callback *cb) -{ - int idx = 0; - int start = cb->args[0]; - struct cfg80211_registered_device *dev; - - mutex_lock(&cfg80211_mutex); - list_for_each_entry(dev, &cfg80211_rdev_list, list) { - if (!net_eq(wiphy_net(&dev->wiphy), sock_net(skb->sk))) - continue; - if (++idx <= start) - continue; - if (nl80211_send_wiphy(skb, NETLINK_CB(cb->skb).pid, - cb->nlh->nlmsg_seq, NLM_F_MULTI, - dev) < 0) { - idx--; - break; - } - } - mutex_unlock(&cfg80211_mutex); - - cb->args[0] = idx; - - return skb->len; -} - -static int nl80211_get_wiphy(struct sk_buff *skb, struct genl_info *info) -{ - struct sk_buff *msg; - struct cfg80211_registered_device *dev = info->user_ptr[0]; - - msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL); - if (!msg) - return -ENOMEM; - - if (nl80211_send_wiphy(msg, info->snd_pid, info->snd_seq, 0, dev) < 0) { - nlmsg_free(msg); - return -ENOBUFS; - } - - return genlmsg_reply(msg, info); -} - -static const struct nla_policy txq_params_policy[NL80211_TXQ_ATTR_MAX + 1] = { - [NL80211_TXQ_ATTR_QUEUE] = { .type = NLA_U8 }, - [NL80211_TXQ_ATTR_TXOP] = { .type = NLA_U16 }, - [NL80211_TXQ_ATTR_CWMIN] = { .type = NLA_U16 }, - [NL80211_TXQ_ATTR_CWMAX] = { .type = NLA_U16 }, - [NL80211_TXQ_ATTR_AIFS] = { .type = NLA_U8 }, -}; - -static int parse_txq_params(struct nlattr *tb[], - struct ieee80211_txq_params *txq_params) -{ - if (!tb[NL80211_TXQ_ATTR_QUEUE] || !tb[NL80211_TXQ_ATTR_TXOP] || - !tb[NL80211_TXQ_ATTR_CWMIN] || !tb[NL80211_TXQ_ATTR_CWMAX] || - !tb[NL80211_TXQ_ATTR_AIFS]) - return -EINVAL; - - txq_params->queue = nla_get_u8(tb[NL80211_TXQ_ATTR_QUEUE]); - txq_params->txop = nla_get_u16(tb[NL80211_TXQ_ATTR_TXOP]); - txq_params->cwmin = nla_get_u16(tb[NL80211_TXQ_ATTR_CWMIN]); - txq_params->cwmax = nla_get_u16(tb[NL80211_TXQ_ATTR_CWMAX]); - txq_params->aifs = nla_get_u8(tb[NL80211_TXQ_ATTR_AIFS]); - - return 0; -} - -static bool nl80211_can_set_dev_channel(struct wireless_dev *wdev) -{ - /* - * You can only set the channel explicitly for AP, mesh - * and WDS type interfaces; all others have their channel - * managed via their respective "establish a connection" - * command (connect, join, ...) - * - * Monitors are special as they are normally slaved to - * whatever else is going on, so they behave as though - * you tried setting the wiphy channel itself. - */ - return !wdev || - wdev->iftype == NL80211_IFTYPE_AP || - wdev->iftype == NL80211_IFTYPE_WDS || - wdev->iftype == NL80211_IFTYPE_MESH_POINT || - wdev->iftype == NL80211_IFTYPE_MONITOR || - wdev->iftype == NL80211_IFTYPE_P2P_GO; -} - -static int __nl80211_set_channel(struct cfg80211_registered_device *rdev, - struct wireless_dev *wdev, - struct genl_info *info) -{ - enum nl80211_channel_type channel_type = NL80211_CHAN_NO_HT; - u32 freq; - int result; - - if (!info->attrs[NL80211_ATTR_WIPHY_FREQ]) - return -EINVAL; - - if (!nl80211_can_set_dev_channel(wdev)) - return -EOPNOTSUPP; - - if (info->attrs[NL80211_ATTR_WIPHY_CHANNEL_TYPE]) { - channel_type = nla_get_u32(info->attrs[ - NL80211_ATTR_WIPHY_CHANNEL_TYPE]); - if (channel_type != NL80211_CHAN_NO_HT && - channel_type != NL80211_CHAN_HT20 && - channel_type != NL80211_CHAN_HT40PLUS && - channel_type != NL80211_CHAN_HT40MINUS) - return -EINVAL; - } - - freq = nla_get_u32(info->attrs[NL80211_ATTR_WIPHY_FREQ]); - - mutex_lock(&rdev->devlist_mtx); - if (wdev) { - wdev_lock(wdev); - result = cfg80211_set_freq(rdev, wdev, freq, channel_type); - wdev_unlock(wdev); - } else { - result = cfg80211_set_freq(rdev, NULL, freq, channel_type); - } - mutex_unlock(&rdev->devlist_mtx); - - return result; -} - -static int nl80211_set_channel(struct sk_buff *skb, struct genl_info *info) -{ - struct cfg80211_registered_device *rdev = info->user_ptr[0]; - struct net_device *netdev = info->user_ptr[1]; - - return __nl80211_set_channel(rdev, netdev->ieee80211_ptr, info); -} - -static int nl80211_set_wds_peer(struct sk_buff *skb, struct genl_info *info) -{ - struct cfg80211_registered_device *rdev = info->user_ptr[0]; - struct net_device *dev = info->user_ptr[1]; - struct wireless_dev *wdev = dev->ieee80211_ptr; - const u8 *bssid; - - if (!info->attrs[NL80211_ATTR_MAC]) - return -EINVAL; - - if (netif_running(dev)) - return -EBUSY; - - if (!rdev->ops->set_wds_peer) - return -EOPNOTSUPP; - - if (wdev->iftype != NL80211_IFTYPE_WDS) - return -EOPNOTSUPP; - - bssid = nla_data(info->attrs[NL80211_ATTR_MAC]); - return rdev->ops->set_wds_peer(wdev->wiphy, dev, bssid); -} - - -static int nl80211_set_wiphy(struct sk_buff *skb, struct genl_info *info) -{ - struct cfg80211_registered_device *rdev; - struct net_device *netdev = NULL; - struct wireless_dev *wdev; - int result = 0, rem_txq_params = 0; - struct nlattr *nl_txq_params; - u32 changed; - u8 retry_short = 0, retry_long = 0; - u32 frag_threshold = 0, rts_threshold = 0; - u8 coverage_class = 0; - - /* - * Try to find the wiphy and netdev. Normally this - * function shouldn't need the netdev, but this is - * done for backward compatibility -- previously - * setting the channel was done per wiphy, but now - * it is per netdev. Previous userland like hostapd - * also passed a netdev to set_wiphy, so that it is - * possible to let that go to the right netdev! - */ - mutex_lock(&cfg80211_mutex); - - if (info->attrs[NL80211_ATTR_IFINDEX]) { - int ifindex = nla_get_u32(info->attrs[NL80211_ATTR_IFINDEX]); - - netdev = dev_get_by_index(genl_info_net(info), ifindex); - if (netdev && netdev->ieee80211_ptr) { - rdev = wiphy_to_dev(netdev->ieee80211_ptr->wiphy); - mutex_lock(&rdev->mtx); - } else - netdev = NULL; - } - - if (!netdev) { - rdev = __cfg80211_rdev_from_info(info); - if (IS_ERR(rdev)) { - mutex_unlock(&cfg80211_mutex); - return PTR_ERR(rdev); - } - wdev = NULL; - netdev = NULL; - result = 0; - - mutex_lock(&rdev->mtx); - } else if (netif_running(netdev) && - nl80211_can_set_dev_channel(netdev->ieee80211_ptr)) - wdev = netdev->ieee80211_ptr; - else - wdev = NULL; - - /* - * end workaround code, by now the rdev is available - * and locked, and wdev may or may not be NULL. - */ - - if (info->attrs[NL80211_ATTR_WIPHY_NAME]) - result = cfg80211_dev_rename( - rdev, nla_data(info->attrs[NL80211_ATTR_WIPHY_NAME])); - - mutex_unlock(&cfg80211_mutex); - - if (result) - goto bad_res; - - if (info->attrs[NL80211_ATTR_WIPHY_TXQ_PARAMS]) { - struct ieee80211_txq_params txq_params; - struct nlattr *tb[NL80211_TXQ_ATTR_MAX + 1]; - - if (!rdev->ops->set_txq_params) { - result = -EOPNOTSUPP; - goto bad_res; - } - - if (!netdev) { - result = -EINVAL; - goto bad_res; - } - - if (netdev->ieee80211_ptr->iftype != NL80211_IFTYPE_AP && - netdev->ieee80211_ptr->iftype != NL80211_IFTYPE_P2P_GO) { - result = -EINVAL; - goto bad_res; - } - - if (!netif_running(netdev)) { - result = -ENETDOWN; - goto bad_res; - } - - nla_for_each_nested(nl_txq_params, - info->attrs[NL80211_ATTR_WIPHY_TXQ_PARAMS], - rem_txq_params) { - nla_parse(tb, NL80211_TXQ_ATTR_MAX, - nla_data(nl_txq_params), - nla_len(nl_txq_params), - txq_params_policy); - result = parse_txq_params(tb, &txq_params); - if (result) - goto bad_res; - - result = rdev->ops->set_txq_params(&rdev->wiphy, - netdev, - &txq_params); - if (result) - goto bad_res; - } - } - - if (info->attrs[NL80211_ATTR_WIPHY_FREQ]) { - result = __nl80211_set_channel(rdev, wdev, info); - if (result) - goto bad_res; - } - - if (info->attrs[NL80211_ATTR_WIPHY_TX_POWER_SETTING]) { - enum nl80211_tx_power_setting type; - int idx, mbm = 0; - - if (!rdev->ops->set_tx_power) { - result = -EOPNOTSUPP; - goto bad_res; - } - - idx = NL80211_ATTR_WIPHY_TX_POWER_SETTING; - type = nla_get_u32(info->attrs[idx]); - - if (!info->attrs[NL80211_ATTR_WIPHY_TX_POWER_LEVEL] && - (type != NL80211_TX_POWER_AUTOMATIC)) { - result = -EINVAL; - goto bad_res; - } - - if (type != NL80211_TX_POWER_AUTOMATIC) { - idx = NL80211_ATTR_WIPHY_TX_POWER_LEVEL; - mbm = nla_get_u32(info->attrs[idx]); - } - - result = rdev->ops->set_tx_power(&rdev->wiphy, type, mbm); - if (result) - goto bad_res; - } - - if (info->attrs[NL80211_ATTR_WIPHY_ANTENNA_TX] && - info->attrs[NL80211_ATTR_WIPHY_ANTENNA_RX]) { - u32 tx_ant, rx_ant; - if ((!rdev->wiphy.available_antennas_tx && - !rdev->wiphy.available_antennas_rx) || - !rdev->ops->set_antenna) { - result = -EOPNOTSUPP; - goto bad_res; - } - - tx_ant = nla_get_u32(info->attrs[NL80211_ATTR_WIPHY_ANTENNA_TX]); - rx_ant = nla_get_u32(info->attrs[NL80211_ATTR_WIPHY_ANTENNA_RX]); - - /* reject antenna configurations which don't match the - * available antenna masks, except for the "all" mask */ - if ((~tx_ant && (tx_ant & ~rdev->wiphy.available_antennas_tx)) || - (~rx_ant && (rx_ant & ~rdev->wiphy.available_antennas_rx))) { - result = -EINVAL; - goto bad_res; - } - - tx_ant = tx_ant & rdev->wiphy.available_antennas_tx; - rx_ant = rx_ant & rdev->wiphy.available_antennas_rx; - - result = rdev->ops->set_antenna(&rdev->wiphy, tx_ant, rx_ant); - if (result) - goto bad_res; - } - - changed = 0; - - if (info->attrs[NL80211_ATTR_WIPHY_RETRY_SHORT]) { - retry_short = nla_get_u8( - info->attrs[NL80211_ATTR_WIPHY_RETRY_SHORT]); - if (retry_short == 0) { - result = -EINVAL; - goto bad_res; - } - changed |= WIPHY_PARAM_RETRY_SHORT; - } - - if (info->attrs[NL80211_ATTR_WIPHY_RETRY_LONG]) { - retry_long = nla_get_u8( - info->attrs[NL80211_ATTR_WIPHY_RETRY_LONG]); - if (retry_long == 0) { - result = -EINVAL; - goto bad_res; - } - changed |= WIPHY_PARAM_RETRY_LONG; - } - - if (info->attrs[NL80211_ATTR_WIPHY_FRAG_THRESHOLD]) { - frag_threshold = nla_get_u32( - info->attrs[NL80211_ATTR_WIPHY_FRAG_THRESHOLD]); - if (frag_threshold < 256) { - result = -EINVAL; - goto bad_res; - } - if (frag_threshold != (u32) -1) { - /* - * Fragments (apart from the last one) are required to - * have even length. Make the fragmentation code - * simpler by stripping LSB should someone try to use - * odd threshold value. - */ - frag_threshold &= ~0x1; - } - changed |= WIPHY_PARAM_FRAG_THRESHOLD; - } - - if (info->attrs[NL80211_ATTR_WIPHY_RTS_THRESHOLD]) { - rts_threshold = nla_get_u32( - info->attrs[NL80211_ATTR_WIPHY_RTS_THRESHOLD]); - changed |= WIPHY_PARAM_RTS_THRESHOLD; - } - - if (info->attrs[NL80211_ATTR_WIPHY_COVERAGE_CLASS]) { - coverage_class = nla_get_u8( - info->attrs[NL80211_ATTR_WIPHY_COVERAGE_CLASS]); - changed |= WIPHY_PARAM_COVERAGE_CLASS; - } - - if (changed) { - u8 old_retry_short, old_retry_long; - u32 old_frag_threshold, old_rts_threshold; - u8 old_coverage_class; - - if (!rdev->ops->set_wiphy_params) { - result = -EOPNOTSUPP; - goto bad_res; - } - - old_retry_short = rdev->wiphy.retry_short; - old_retry_long = rdev->wiphy.retry_long; - old_frag_threshold = rdev->wiphy.frag_threshold; - old_rts_threshold = rdev->wiphy.rts_threshold; - old_coverage_class = rdev->wiphy.coverage_class; - - if (changed & WIPHY_PARAM_RETRY_SHORT) - rdev->wiphy.retry_short = retry_short; - if (changed & WIPHY_PARAM_RETRY_LONG) - rdev->wiphy.retry_long = retry_long; - if (changed & WIPHY_PARAM_FRAG_THRESHOLD) - rdev->wiphy.frag_threshold = frag_threshold; - if (changed & WIPHY_PARAM_RTS_THRESHOLD) - rdev->wiphy.rts_threshold = rts_threshold; - if (changed & WIPHY_PARAM_COVERAGE_CLASS) - rdev->wiphy.coverage_class = coverage_class; - - result = rdev->ops->set_wiphy_params(&rdev->wiphy, changed); - if (result) { - rdev->wiphy.retry_short = old_retry_short; - rdev->wiphy.retry_long = old_retry_long; - rdev->wiphy.frag_threshold = old_frag_threshold; - rdev->wiphy.rts_threshold = old_rts_threshold; - rdev->wiphy.coverage_class = old_coverage_class; - } - } - - bad_res: - mutex_unlock(&rdev->mtx); - if (netdev) - dev_put(netdev); - return result; -} - - -static int nl80211_send_iface(struct sk_buff *msg, u32 pid, u32 seq, int flags, - struct cfg80211_registered_device *rdev, - struct net_device *dev) -{ - void *hdr; - - hdr = nl80211hdr_put(msg, pid, seq, flags, NL80211_CMD_NEW_INTERFACE); - if (!hdr) - return -1; - - NLA_PUT_U32(msg, NL80211_ATTR_IFINDEX, dev->ifindex); - NLA_PUT_U32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx); - NLA_PUT_STRING(msg, NL80211_ATTR_IFNAME, dev->name); - NLA_PUT_U32(msg, NL80211_ATTR_IFTYPE, dev->ieee80211_ptr->iftype); - - NLA_PUT_U32(msg, NL80211_ATTR_GENERATION, - rdev->devlist_generation ^ - (cfg80211_rdev_list_generation << 2)); - - return genlmsg_end(msg, hdr); - - nla_put_failure: - genlmsg_cancel(msg, hdr); - return -EMSGSIZE; -} - -static int nl80211_dump_interface(struct sk_buff *skb, struct netlink_callback *cb) -{ - int wp_idx = 0; - int if_idx = 0; - int wp_start = cb->args[0]; - int if_start = cb->args[1]; - struct cfg80211_registered_device *rdev; - struct wireless_dev *wdev; - - mutex_lock(&cfg80211_mutex); - list_for_each_entry(rdev, &cfg80211_rdev_list, list) { - if (!net_eq(wiphy_net(&rdev->wiphy), sock_net(skb->sk))) - continue; - if (wp_idx < wp_start) { - wp_idx++; - continue; - } - if_idx = 0; - - mutex_lock(&rdev->devlist_mtx); - list_for_each_entry(wdev, &rdev->netdev_list, list) { - if (if_idx < if_start) { - if_idx++; - continue; - } - if (nl80211_send_iface(skb, NETLINK_CB(cb->skb).pid, - cb->nlh->nlmsg_seq, NLM_F_MULTI, - rdev, wdev->netdev) < 0) { - mutex_unlock(&rdev->devlist_mtx); - goto out; - } - if_idx++; - } - mutex_unlock(&rdev->devlist_mtx); - - wp_idx++; - } - out: - mutex_unlock(&cfg80211_mutex); - - cb->args[0] = wp_idx; - cb->args[1] = if_idx; - - return skb->len; -} - -static int nl80211_get_interface(struct sk_buff *skb, struct genl_info *info) -{ - struct sk_buff *msg; - struct cfg80211_registered_device *dev = info->user_ptr[0]; - struct net_device *netdev = info->user_ptr[1]; - - msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL); - if (!msg) - return -ENOMEM; - - if (nl80211_send_iface(msg, info->snd_pid, info->snd_seq, 0, - dev, netdev) < 0) { - nlmsg_free(msg); - return -ENOBUFS; - } - - return genlmsg_reply(msg, info); -} - -static const struct nla_policy mntr_flags_policy[NL80211_MNTR_FLAG_MAX + 1] = { - [NL80211_MNTR_FLAG_FCSFAIL] = { .type = NLA_FLAG }, - [NL80211_MNTR_FLAG_PLCPFAIL] = { .type = NLA_FLAG }, - [NL80211_MNTR_FLAG_CONTROL] = { .type = NLA_FLAG }, - [NL80211_MNTR_FLAG_OTHER_BSS] = { .type = NLA_FLAG }, - [NL80211_MNTR_FLAG_COOK_FRAMES] = { .type = NLA_FLAG }, -}; - -static int parse_monitor_flags(struct nlattr *nla, u32 *mntrflags) -{ - struct nlattr *flags[NL80211_MNTR_FLAG_MAX + 1]; - int flag; - - *mntrflags = 0; - - if (!nla) - return -EINVAL; - - if (nla_parse_nested(flags, NL80211_MNTR_FLAG_MAX, - nla, mntr_flags_policy)) - return -EINVAL; - - for (flag = 1; flag <= NL80211_MNTR_FLAG_MAX; flag++) - if (flags[flag]) - *mntrflags |= (1<wiphy.flags & WIPHY_FLAG_4ADDR_AP) - return 0; - break; - case NL80211_IFTYPE_STATION: - if (rdev->wiphy.flags & WIPHY_FLAG_4ADDR_STATION) - return 0; - break; - default: - break; - } - - return -EOPNOTSUPP; -} - -static int nl80211_set_interface(struct sk_buff *skb, struct genl_info *info) -{ - struct cfg80211_registered_device *rdev = info->user_ptr[0]; - struct vif_params params; - int err; - enum nl80211_iftype otype, ntype; - struct net_device *dev = info->user_ptr[1]; - u32 _flags, *flags = NULL; - bool change = false; - - memset(¶ms, 0, sizeof(params)); - - otype = ntype = dev->ieee80211_ptr->iftype; - - if (info->attrs[NL80211_ATTR_IFTYPE]) { - ntype = nla_get_u32(info->attrs[NL80211_ATTR_IFTYPE]); - if (otype != ntype) - change = true; - if (ntype > NL80211_IFTYPE_MAX) - return -EINVAL; - } - - if (info->attrs[NL80211_ATTR_MESH_ID]) { - struct wireless_dev *wdev = dev->ieee80211_ptr; - - if (ntype != NL80211_IFTYPE_MESH_POINT) - return -EINVAL; - if (netif_running(dev)) - return -EBUSY; - - wdev_lock(wdev); - BUILD_BUG_ON(IEEE80211_MAX_SSID_LEN != - IEEE80211_MAX_MESH_ID_LEN); - wdev->mesh_id_up_len = - nla_len(info->attrs[NL80211_ATTR_MESH_ID]); - memcpy(wdev->ssid, nla_data(info->attrs[NL80211_ATTR_MESH_ID]), - wdev->mesh_id_up_len); - wdev_unlock(wdev); - } - - if (info->attrs[NL80211_ATTR_4ADDR]) { - params.use_4addr = !!nla_get_u8(info->attrs[NL80211_ATTR_4ADDR]); - change = true; - err = nl80211_valid_4addr(rdev, dev, params.use_4addr, ntype); - if (err) - return err; - } else { - params.use_4addr = -1; - } - - if (info->attrs[NL80211_ATTR_MNTR_FLAGS]) { - if (ntype != NL80211_IFTYPE_MONITOR) - return -EINVAL; - err = parse_monitor_flags(info->attrs[NL80211_ATTR_MNTR_FLAGS], - &_flags); - if (err) - return err; - - flags = &_flags; - change = true; - } - - if (change) - err = cfg80211_change_iface(rdev, dev, ntype, flags, ¶ms); - else - err = 0; - - if (!err && params.use_4addr != -1) - dev->ieee80211_ptr->use_4addr = params.use_4addr; - - return err; -} - -static int nl80211_new_interface(struct sk_buff *skb, struct genl_info *info) -{ - struct cfg80211_registered_device *rdev = info->user_ptr[0]; - struct vif_params params; - struct net_device *dev; - int err; - enum nl80211_iftype type = NL80211_IFTYPE_UNSPECIFIED; - u32 flags; - - memset(¶ms, 0, sizeof(params)); - - if (!info->attrs[NL80211_ATTR_IFNAME]) - return -EINVAL; - - if (info->attrs[NL80211_ATTR_IFTYPE]) { - type = nla_get_u32(info->attrs[NL80211_ATTR_IFTYPE]); - if (type > NL80211_IFTYPE_MAX) - return -EINVAL; - } - - if (!rdev->ops->add_virtual_intf || - !(rdev->wiphy.interface_modes & (1 << type))) - return -EOPNOTSUPP; - - if (info->attrs[NL80211_ATTR_4ADDR]) { - params.use_4addr = !!nla_get_u8(info->attrs[NL80211_ATTR_4ADDR]); - err = nl80211_valid_4addr(rdev, NULL, params.use_4addr, type); - if (err) - return err; - } - - err = parse_monitor_flags(type == NL80211_IFTYPE_MONITOR ? - info->attrs[NL80211_ATTR_MNTR_FLAGS] : NULL, - &flags); - dev = rdev->ops->add_virtual_intf(&rdev->wiphy, - nla_data(info->attrs[NL80211_ATTR_IFNAME]), - type, err ? NULL : &flags, ¶ms); - if (IS_ERR(dev)) - return PTR_ERR(dev); - - if (type == NL80211_IFTYPE_MESH_POINT && - info->attrs[NL80211_ATTR_MESH_ID]) { - struct wireless_dev *wdev = dev->ieee80211_ptr; - - wdev_lock(wdev); - BUILD_BUG_ON(IEEE80211_MAX_SSID_LEN != - IEEE80211_MAX_MESH_ID_LEN); - wdev->mesh_id_up_len = - nla_len(info->attrs[NL80211_ATTR_MESH_ID]); - memcpy(wdev->ssid, nla_data(info->attrs[NL80211_ATTR_MESH_ID]), - wdev->mesh_id_up_len); - wdev_unlock(wdev); - } - - return 0; -} - -static int nl80211_del_interface(struct sk_buff *skb, struct genl_info *info) -{ - struct cfg80211_registered_device *rdev = info->user_ptr[0]; - struct net_device *dev = info->user_ptr[1]; - - if (!rdev->ops->del_virtual_intf) - return -EOPNOTSUPP; - - return rdev->ops->del_virtual_intf(&rdev->wiphy, dev); -} - -static int nl80211_set_noack_map(struct sk_buff *skb, struct genl_info *info) -{ - struct cfg80211_registered_device *rdev = info->user_ptr[0]; - struct net_device *dev = info->user_ptr[1]; - u16 noack_map; - - if (!info->attrs[NL80211_ATTR_NOACK_MAP]) - return -EINVAL; - - if (!rdev->ops->set_noack_map) - return -EOPNOTSUPP; - - noack_map = nla_get_u16(info->attrs[NL80211_ATTR_NOACK_MAP]); - - return rdev->ops->set_noack_map(&rdev->wiphy, dev, noack_map); -} - -struct get_key_cookie { - struct sk_buff *msg; - int error; - int idx; -}; - -static void get_key_callback(void *c, struct key_params *params) -{ - struct nlattr *key; - struct get_key_cookie *cookie = c; - - if (params->key) - NLA_PUT(cookie->msg, NL80211_ATTR_KEY_DATA, - params->key_len, params->key); - - if (params->seq) - NLA_PUT(cookie->msg, NL80211_ATTR_KEY_SEQ, - params->seq_len, params->seq); - - if (params->cipher) - NLA_PUT_U32(cookie->msg, NL80211_ATTR_KEY_CIPHER, - params->cipher); - - key = nla_nest_start(cookie->msg, NL80211_ATTR_KEY); - if (!key) - goto nla_put_failure; - - if (params->key) - NLA_PUT(cookie->msg, NL80211_KEY_DATA, - params->key_len, params->key); - - if (params->seq) - NLA_PUT(cookie->msg, NL80211_KEY_SEQ, - params->seq_len, params->seq); - - if (params->cipher) - NLA_PUT_U32(cookie->msg, NL80211_KEY_CIPHER, - params->cipher); - - NLA_PUT_U8(cookie->msg, NL80211_ATTR_KEY_IDX, cookie->idx); - - nla_nest_end(cookie->msg, key); - - return; - nla_put_failure: - cookie->error = 1; -} - -static int nl80211_get_key(struct sk_buff *skb, struct genl_info *info) -{ - struct cfg80211_registered_device *rdev = info->user_ptr[0]; - int err; - struct net_device *dev = info->user_ptr[1]; - u8 key_idx = 0; - const u8 *mac_addr = NULL; - bool pairwise; - struct get_key_cookie cookie = { - .error = 0, - }; - void *hdr; - struct sk_buff *msg; - - if (info->attrs[NL80211_ATTR_KEY_IDX]) - key_idx = nla_get_u8(info->attrs[NL80211_ATTR_KEY_IDX]); - - if (key_idx > 5) - return -EINVAL; - - if (info->attrs[NL80211_ATTR_MAC]) - mac_addr = nla_data(info->attrs[NL80211_ATTR_MAC]); - - pairwise = !!mac_addr; - if (info->attrs[NL80211_ATTR_KEY_TYPE]) { - u32 kt = nla_get_u32(info->attrs[NL80211_ATTR_KEY_TYPE]); - if (kt >= NUM_NL80211_KEYTYPES) - return -EINVAL; - if (kt != NL80211_KEYTYPE_GROUP && - kt != NL80211_KEYTYPE_PAIRWISE) - return -EINVAL; - pairwise = kt == NL80211_KEYTYPE_PAIRWISE; - } - - if (!rdev->ops->get_key) - return -EOPNOTSUPP; - - msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL); - if (!msg) - return -ENOMEM; - - hdr = nl80211hdr_put(msg, info->snd_pid, info->snd_seq, 0, - NL80211_CMD_NEW_KEY); - if (IS_ERR(hdr)) - return PTR_ERR(hdr); - - cookie.msg = msg; - cookie.idx = key_idx; - - NLA_PUT_U32(msg, NL80211_ATTR_IFINDEX, dev->ifindex); - NLA_PUT_U8(msg, NL80211_ATTR_KEY_IDX, key_idx); - if (mac_addr) - NLA_PUT(msg, NL80211_ATTR_MAC, ETH_ALEN, mac_addr); - - if (pairwise && mac_addr && - !(rdev->wiphy.flags & WIPHY_FLAG_IBSS_RSN)) - return -ENOENT; - - err = rdev->ops->get_key(&rdev->wiphy, dev, key_idx, pairwise, - mac_addr, &cookie, get_key_callback); - - if (err) - goto free_msg; - - if (cookie.error) - goto nla_put_failure; - - genlmsg_end(msg, hdr); - return genlmsg_reply(msg, info); - - nla_put_failure: - err = -ENOBUFS; - free_msg: - nlmsg_free(msg); - return err; -} - -static int nl80211_set_key(struct sk_buff *skb, struct genl_info *info) -{ - struct cfg80211_registered_device *rdev = info->user_ptr[0]; - struct key_parse key; - int err; - struct net_device *dev = info->user_ptr[1]; - - err = nl80211_parse_key(info, &key); - if (err) - return err; - - if (key.idx < 0) - return -EINVAL; - - /* only support setting default key */ - if (!key.def && !key.defmgmt) - return -EINVAL; - - wdev_lock(dev->ieee80211_ptr); - - if (key.def) { - if (!rdev->ops->set_default_key) { - err = -EOPNOTSUPP; - goto out; - } - - err = nl80211_key_allowed(dev->ieee80211_ptr); - if (err) - goto out; - - err = rdev->ops->set_default_key(&rdev->wiphy, dev, key.idx, - key.def_uni, key.def_multi); - - if (err) - goto out; - -#ifdef CONFIG_CFG80211_WEXT - dev->ieee80211_ptr->wext.default_key = key.idx; -#endif - } else { - if (key.def_uni || !key.def_multi) { - err = -EINVAL; - goto out; - } - - if (!rdev->ops->set_default_mgmt_key) { - err = -EOPNOTSUPP; - goto out; - } - - err = nl80211_key_allowed(dev->ieee80211_ptr); - if (err) - goto out; - - err = rdev->ops->set_default_mgmt_key(&rdev->wiphy, - dev, key.idx); - if (err) - goto out; - -#ifdef CONFIG_CFG80211_WEXT - dev->ieee80211_ptr->wext.default_mgmt_key = key.idx; -#endif - } - - out: - wdev_unlock(dev->ieee80211_ptr); - - return err; -} - -static int nl80211_new_key(struct sk_buff *skb, struct genl_info *info) -{ - struct cfg80211_registered_device *rdev = info->user_ptr[0]; - int err; - struct net_device *dev = info->user_ptr[1]; - struct key_parse key; - const u8 *mac_addr = NULL; - - err = nl80211_parse_key(info, &key); - if (err) - return err; - - if (!key.p.key) - return -EINVAL; - - if (info->attrs[NL80211_ATTR_MAC]) - mac_addr = nla_data(info->attrs[NL80211_ATTR_MAC]); - - if (key.type == -1) { - if (mac_addr) - key.type = NL80211_KEYTYPE_PAIRWISE; - else - key.type = NL80211_KEYTYPE_GROUP; - } - - /* for now */ - if (key.type != NL80211_KEYTYPE_PAIRWISE && - key.type != NL80211_KEYTYPE_GROUP) - return -EINVAL; - - if (!rdev->ops->add_key) - return -EOPNOTSUPP; - - if (cfg80211_validate_key_settings(rdev, &key.p, key.idx, - key.type == NL80211_KEYTYPE_PAIRWISE, - mac_addr)) - return -EINVAL; - - wdev_lock(dev->ieee80211_ptr); - err = nl80211_key_allowed(dev->ieee80211_ptr); - if (!err) - err = rdev->ops->add_key(&rdev->wiphy, dev, key.idx, - key.type == NL80211_KEYTYPE_PAIRWISE, - mac_addr, &key.p); - wdev_unlock(dev->ieee80211_ptr); - - return err; -} - -static int nl80211_del_key(struct sk_buff *skb, struct genl_info *info) -{ - struct cfg80211_registered_device *rdev = info->user_ptr[0]; - int err; - struct net_device *dev = info->user_ptr[1]; - u8 *mac_addr = NULL; - struct key_parse key; - - err = nl80211_parse_key(info, &key); - if (err) - return err; - - if (info->attrs[NL80211_ATTR_MAC]) - mac_addr = nla_data(info->attrs[NL80211_ATTR_MAC]); - - if (key.type == -1) { - if (mac_addr) - key.type = NL80211_KEYTYPE_PAIRWISE; - else - key.type = NL80211_KEYTYPE_GROUP; - } - - /* for now */ - if (key.type != NL80211_KEYTYPE_PAIRWISE && - key.type != NL80211_KEYTYPE_GROUP) - return -EINVAL; - - if (!rdev->ops->del_key) - return -EOPNOTSUPP; - - wdev_lock(dev->ieee80211_ptr); - err = nl80211_key_allowed(dev->ieee80211_ptr); - - if (key.type == NL80211_KEYTYPE_PAIRWISE && mac_addr && - !(rdev->wiphy.flags & WIPHY_FLAG_IBSS_RSN)) - err = -ENOENT; - - if (!err) - err = rdev->ops->del_key(&rdev->wiphy, dev, key.idx, - key.type == NL80211_KEYTYPE_PAIRWISE, - mac_addr); - -#ifdef CONFIG_CFG80211_WEXT - if (!err) { - if (key.idx == dev->ieee80211_ptr->wext.default_key) - dev->ieee80211_ptr->wext.default_key = -1; - else if (key.idx == dev->ieee80211_ptr->wext.default_mgmt_key) - dev->ieee80211_ptr->wext.default_mgmt_key = -1; - } -#endif - wdev_unlock(dev->ieee80211_ptr); - - return err; -} - -static int nl80211_parse_beacon(struct genl_info *info, - struct cfg80211_beacon_data *bcn) -{ - bool haveinfo = false; - - if (!is_valid_ie_attr(info->attrs[NL80211_ATTR_BEACON_TAIL]) || - !is_valid_ie_attr(info->attrs[NL80211_ATTR_IE]) || - !is_valid_ie_attr(info->attrs[NL80211_ATTR_IE_PROBE_RESP]) || - !is_valid_ie_attr(info->attrs[NL80211_ATTR_IE_ASSOC_RESP])) - return -EINVAL; - - memset(bcn, 0, sizeof(*bcn)); - - if (info->attrs[NL80211_ATTR_BEACON_HEAD]) { - bcn->head = nla_data(info->attrs[NL80211_ATTR_BEACON_HEAD]); - bcn->head_len = nla_len(info->attrs[NL80211_ATTR_BEACON_HEAD]); - if (!bcn->head_len) - return -EINVAL; - haveinfo = true; - } - - if (info->attrs[NL80211_ATTR_BEACON_TAIL]) { - bcn->tail = nla_data(info->attrs[NL80211_ATTR_BEACON_TAIL]); - bcn->tail_len = - nla_len(info->attrs[NL80211_ATTR_BEACON_TAIL]); - haveinfo = true; - } - - if (!haveinfo) - return -EINVAL; - - if (info->attrs[NL80211_ATTR_IE]) { - bcn->beacon_ies = nla_data(info->attrs[NL80211_ATTR_IE]); - bcn->beacon_ies_len = nla_len(info->attrs[NL80211_ATTR_IE]); - } - - if (info->attrs[NL80211_ATTR_IE_PROBE_RESP]) { - bcn->proberesp_ies = - nla_data(info->attrs[NL80211_ATTR_IE_PROBE_RESP]); - bcn->proberesp_ies_len = - nla_len(info->attrs[NL80211_ATTR_IE_PROBE_RESP]); - } - - if (info->attrs[NL80211_ATTR_IE_ASSOC_RESP]) { - bcn->assocresp_ies = - nla_data(info->attrs[NL80211_ATTR_IE_ASSOC_RESP]); - bcn->assocresp_ies_len = - nla_len(info->attrs[NL80211_ATTR_IE_ASSOC_RESP]); - } - - if (info->attrs[NL80211_ATTR_PROBE_RESP]) { - bcn->probe_resp = - nla_data(info->attrs[NL80211_ATTR_PROBE_RESP]); - bcn->probe_resp_len = - nla_len(info->attrs[NL80211_ATTR_PROBE_RESP]); - } - - return 0; -} - -static int nl80211_start_ap(struct sk_buff *skb, struct genl_info *info) -{ - struct cfg80211_registered_device *rdev = info->user_ptr[0]; - struct net_device *dev = info->user_ptr[1]; - struct wireless_dev *wdev = dev->ieee80211_ptr; - struct cfg80211_ap_settings params; - int err; - - if (dev->ieee80211_ptr->iftype != NL80211_IFTYPE_AP && - dev->ieee80211_ptr->iftype != NL80211_IFTYPE_P2P_GO) - return -EOPNOTSUPP; - - if (!rdev->ops->start_ap) - return -EOPNOTSUPP; - - if (wdev->beacon_interval) - return -EALREADY; - - memset(¶ms, 0, sizeof(params)); - - /* these are required for START_AP */ - if (!info->attrs[NL80211_ATTR_BEACON_INTERVAL] || - !info->attrs[NL80211_ATTR_DTIM_PERIOD] || - !info->attrs[NL80211_ATTR_BEACON_HEAD]) - return -EINVAL; - - err = nl80211_parse_beacon(info, ¶ms.beacon); - if (err) - return err; - - params.beacon_interval = - nla_get_u32(info->attrs[NL80211_ATTR_BEACON_INTERVAL]); - params.dtim_period = - nla_get_u32(info->attrs[NL80211_ATTR_DTIM_PERIOD]); - - err = cfg80211_validate_beacon_int(rdev, params.beacon_interval); - if (err) - return err; - - /* - * In theory, some of these attributes should be required here - * but since they were not used when the command was originally - * added, keep them optional for old user space programs to let - * them continue to work with drivers that do not need the - * additional information -- drivers must check! - */ - if (info->attrs[NL80211_ATTR_SSID]) { - params.ssid = nla_data(info->attrs[NL80211_ATTR_SSID]); - params.ssid_len = - nla_len(info->attrs[NL80211_ATTR_SSID]); - if (params.ssid_len == 0 || - params.ssid_len > IEEE80211_MAX_SSID_LEN) - return -EINVAL; - } - - if (info->attrs[NL80211_ATTR_HIDDEN_SSID]) { - params.hidden_ssid = nla_get_u32( - info->attrs[NL80211_ATTR_HIDDEN_SSID]); - if (params.hidden_ssid != NL80211_HIDDEN_SSID_NOT_IN_USE && - params.hidden_ssid != NL80211_HIDDEN_SSID_ZERO_LEN && - params.hidden_ssid != NL80211_HIDDEN_SSID_ZERO_CONTENTS) - return -EINVAL; - } - - params.privacy = !!info->attrs[NL80211_ATTR_PRIVACY]; - - if (info->attrs[NL80211_ATTR_AUTH_TYPE]) { - params.auth_type = nla_get_u32( - info->attrs[NL80211_ATTR_AUTH_TYPE]); - if (!nl80211_valid_auth_type(params.auth_type)) - return -EINVAL; - } else - params.auth_type = NL80211_AUTHTYPE_AUTOMATIC; - - err = nl80211_crypto_settings(rdev, info, ¶ms.crypto, - NL80211_MAX_NR_CIPHER_SUITES); - if (err) - return err; - - if (info->attrs[NL80211_ATTR_INACTIVITY_TIMEOUT]) { - if (!(rdev->wiphy.features & NL80211_FEATURE_INACTIVITY_TIMER)) - return -EOPNOTSUPP; - params.inactivity_timeout = nla_get_u16( - info->attrs[NL80211_ATTR_INACTIVITY_TIMEOUT]); - } - - err = rdev->ops->start_ap(&rdev->wiphy, dev, ¶ms); - if (!err) - wdev->beacon_interval = params.beacon_interval; - return err; -} - -static int nl80211_set_beacon(struct sk_buff *skb, struct genl_info *info) -{ - struct cfg80211_registered_device *rdev = info->user_ptr[0]; - struct net_device *dev = info->user_ptr[1]; - struct wireless_dev *wdev = dev->ieee80211_ptr; - struct cfg80211_beacon_data params; - int err; - - if (dev->ieee80211_ptr->iftype != NL80211_IFTYPE_AP && - dev->ieee80211_ptr->iftype != NL80211_IFTYPE_P2P_GO) - return -EOPNOTSUPP; - - if (!rdev->ops->change_beacon) - return -EOPNOTSUPP; - - if (!wdev->beacon_interval) - return -EINVAL; - - err = nl80211_parse_beacon(info, ¶ms); - if (err) - return err; - - return rdev->ops->change_beacon(&rdev->wiphy, dev, ¶ms); -} - -static int nl80211_stop_ap(struct sk_buff *skb, struct genl_info *info) -{ - struct cfg80211_registered_device *rdev = info->user_ptr[0]; - struct net_device *dev = info->user_ptr[1]; - struct wireless_dev *wdev = dev->ieee80211_ptr; - int err; - - if (!rdev->ops->stop_ap) - return -EOPNOTSUPP; - - if (dev->ieee80211_ptr->iftype != NL80211_IFTYPE_AP && - dev->ieee80211_ptr->iftype != NL80211_IFTYPE_P2P_GO) - return -EOPNOTSUPP; - - if (!wdev->beacon_interval) - return -ENOENT; - - err = rdev->ops->stop_ap(&rdev->wiphy, dev); - if (!err) - wdev->beacon_interval = 0; - return err; -} - -static const struct nla_policy sta_flags_policy[NL80211_STA_FLAG_MAX + 1] = { - [NL80211_STA_FLAG_AUTHORIZED] = { .type = NLA_FLAG }, - [NL80211_STA_FLAG_SHORT_PREAMBLE] = { .type = NLA_FLAG }, - [NL80211_STA_FLAG_WME] = { .type = NLA_FLAG }, - [NL80211_STA_FLAG_MFP] = { .type = NLA_FLAG }, - [NL80211_STA_FLAG_AUTHENTICATED] = { .type = NLA_FLAG }, - [NL80211_STA_FLAG_TDLS_PEER] = { .type = NLA_FLAG }, -}; - -static int parse_station_flags(struct genl_info *info, - enum nl80211_iftype iftype, - struct station_parameters *params) -{ - struct nlattr *flags[NL80211_STA_FLAG_MAX + 1]; - struct nlattr *nla; - int flag; - - /* - * Try parsing the new attribute first so userspace - * can specify both for older kernels. - */ - nla = info->attrs[NL80211_ATTR_STA_FLAGS2]; - if (nla) { - struct nl80211_sta_flag_update *sta_flags; - - sta_flags = nla_data(nla); - params->sta_flags_mask = sta_flags->mask; - params->sta_flags_set = sta_flags->set; - if ((params->sta_flags_mask | - params->sta_flags_set) & BIT(__NL80211_STA_FLAG_INVALID)) - return -EINVAL; - return 0; - } - - /* if present, parse the old attribute */ - - nla = info->attrs[NL80211_ATTR_STA_FLAGS]; - if (!nla) - return 0; - - if (nla_parse_nested(flags, NL80211_STA_FLAG_MAX, - nla, sta_flags_policy)) - return -EINVAL; - - /* - * Only allow certain flags for interface types so that - * other attributes are silently ignored. Remember that - * this is backward compatibility code with old userspace - * and shouldn't be hit in other cases anyway. - */ - switch (iftype) { - case NL80211_IFTYPE_AP: - case NL80211_IFTYPE_AP_VLAN: - case NL80211_IFTYPE_P2P_GO: - params->sta_flags_mask = BIT(NL80211_STA_FLAG_AUTHORIZED) | - BIT(NL80211_STA_FLAG_SHORT_PREAMBLE) | - BIT(NL80211_STA_FLAG_WME) | - BIT(NL80211_STA_FLAG_MFP); - break; - case NL80211_IFTYPE_P2P_CLIENT: - case NL80211_IFTYPE_STATION: - params->sta_flags_mask = BIT(NL80211_STA_FLAG_AUTHORIZED) | - BIT(NL80211_STA_FLAG_TDLS_PEER); - break; - case NL80211_IFTYPE_MESH_POINT: - params->sta_flags_mask = BIT(NL80211_STA_FLAG_AUTHENTICATED) | - BIT(NL80211_STA_FLAG_MFP) | - BIT(NL80211_STA_FLAG_AUTHORIZED); - default: - return -EINVAL; - } - - for (flag = 1; flag <= NL80211_STA_FLAG_MAX; flag++) - if (flags[flag]) - params->sta_flags_set |= (1<= 32 */ - bitrate = cfg80211_calculate_bitrate(info); - if (bitrate > 0) - NLA_PUT_U16(msg, NL80211_RATE_INFO_BITRATE, bitrate); - - if (info->flags & RATE_INFO_FLAGS_MCS) - NLA_PUT_U8(msg, NL80211_RATE_INFO_MCS, info->mcs); - if (info->flags & RATE_INFO_FLAGS_40_MHZ_WIDTH) - NLA_PUT_FLAG(msg, NL80211_RATE_INFO_40_MHZ_WIDTH); - if (info->flags & RATE_INFO_FLAGS_SHORT_GI) - NLA_PUT_FLAG(msg, NL80211_RATE_INFO_SHORT_GI); - - nla_nest_end(msg, rate); - return true; - -nla_put_failure: - return false; -} - -static int nl80211_send_station(struct sk_buff *msg, u32 pid, u32 seq, - int flags, - struct cfg80211_registered_device *rdev, - struct net_device *dev, - const u8 *mac_addr, struct station_info *sinfo) -{ - void *hdr; - struct nlattr *sinfoattr, *bss_param; - - hdr = nl80211hdr_put(msg, pid, seq, flags, NL80211_CMD_NEW_STATION); - if (!hdr) - return -1; - - NLA_PUT_U32(msg, NL80211_ATTR_IFINDEX, dev->ifindex); - NLA_PUT(msg, NL80211_ATTR_MAC, ETH_ALEN, mac_addr); - - NLA_PUT_U32(msg, NL80211_ATTR_GENERATION, sinfo->generation); - - sinfoattr = nla_nest_start(msg, NL80211_ATTR_STA_INFO); - if (!sinfoattr) - goto nla_put_failure; - if (sinfo->filled & STATION_INFO_CONNECTED_TIME) - NLA_PUT_U32(msg, NL80211_STA_INFO_CONNECTED_TIME, - sinfo->connected_time); - if (sinfo->filled & STATION_INFO_INACTIVE_TIME) - NLA_PUT_U32(msg, NL80211_STA_INFO_INACTIVE_TIME, - sinfo->inactive_time); - if (sinfo->filled & STATION_INFO_RX_BYTES) - NLA_PUT_U32(msg, NL80211_STA_INFO_RX_BYTES, - sinfo->rx_bytes); - if (sinfo->filled & STATION_INFO_TX_BYTES) - NLA_PUT_U32(msg, NL80211_STA_INFO_TX_BYTES, - sinfo->tx_bytes); - if (sinfo->filled & STATION_INFO_LLID) - NLA_PUT_U16(msg, NL80211_STA_INFO_LLID, - sinfo->llid); - if (sinfo->filled & STATION_INFO_PLID) - NLA_PUT_U16(msg, NL80211_STA_INFO_PLID, - sinfo->plid); - if (sinfo->filled & STATION_INFO_PLINK_STATE) - NLA_PUT_U8(msg, NL80211_STA_INFO_PLINK_STATE, - sinfo->plink_state); - switch (rdev->wiphy.signal_type) { - case CFG80211_SIGNAL_TYPE_MBM: - if (sinfo->filled & STATION_INFO_SIGNAL) - NLA_PUT_U8(msg, NL80211_STA_INFO_SIGNAL, - sinfo->signal); - if (sinfo->filled & STATION_INFO_SIGNAL_AVG) - NLA_PUT_U8(msg, NL80211_STA_INFO_SIGNAL_AVG, - sinfo->signal_avg); - break; - default: - break; - } - if (sinfo->filled & STATION_INFO_TX_BITRATE) { - if (!nl80211_put_sta_rate(msg, &sinfo->txrate, - NL80211_STA_INFO_TX_BITRATE)) - goto nla_put_failure; - } - if (sinfo->filled & STATION_INFO_RX_BITRATE) { - if (!nl80211_put_sta_rate(msg, &sinfo->rxrate, - NL80211_STA_INFO_RX_BITRATE)) - goto nla_put_failure; - } - if (sinfo->filled & STATION_INFO_RX_PACKETS) - NLA_PUT_U32(msg, NL80211_STA_INFO_RX_PACKETS, - sinfo->rx_packets); - if (sinfo->filled & STATION_INFO_TX_PACKETS) - NLA_PUT_U32(msg, NL80211_STA_INFO_TX_PACKETS, - sinfo->tx_packets); - if (sinfo->filled & STATION_INFO_TX_RETRIES) - NLA_PUT_U32(msg, NL80211_STA_INFO_TX_RETRIES, - sinfo->tx_retries); - if (sinfo->filled & STATION_INFO_TX_FAILED) - NLA_PUT_U32(msg, NL80211_STA_INFO_TX_FAILED, - sinfo->tx_failed); - if (sinfo->filled & STATION_INFO_BEACON_LOSS_COUNT) - NLA_PUT_U32(msg, NL80211_STA_INFO_BEACON_LOSS, - sinfo->beacon_loss_count); - if (sinfo->filled & STATION_INFO_BSS_PARAM) { - bss_param = nla_nest_start(msg, NL80211_STA_INFO_BSS_PARAM); - if (!bss_param) - goto nla_put_failure; - - if (sinfo->bss_param.flags & BSS_PARAM_FLAGS_CTS_PROT) - NLA_PUT_FLAG(msg, NL80211_STA_BSS_PARAM_CTS_PROT); - if (sinfo->bss_param.flags & BSS_PARAM_FLAGS_SHORT_PREAMBLE) - NLA_PUT_FLAG(msg, NL80211_STA_BSS_PARAM_SHORT_PREAMBLE); - if (sinfo->bss_param.flags & BSS_PARAM_FLAGS_SHORT_SLOT_TIME) - NLA_PUT_FLAG(msg, - NL80211_STA_BSS_PARAM_SHORT_SLOT_TIME); - NLA_PUT_U8(msg, NL80211_STA_BSS_PARAM_DTIM_PERIOD, - sinfo->bss_param.dtim_period); - NLA_PUT_U16(msg, NL80211_STA_BSS_PARAM_BEACON_INTERVAL, - sinfo->bss_param.beacon_interval); - - nla_nest_end(msg, bss_param); - } - if (sinfo->filled & STATION_INFO_STA_FLAGS) - NLA_PUT(msg, NL80211_STA_INFO_STA_FLAGS, - sizeof(struct nl80211_sta_flag_update), - &sinfo->sta_flags); - nla_nest_end(msg, sinfoattr); - - if (sinfo->filled & STATION_INFO_ASSOC_REQ_IES) - NLA_PUT(msg, NL80211_ATTR_IE, sinfo->assoc_req_ies_len, - sinfo->assoc_req_ies); - - return genlmsg_end(msg, hdr); - - nla_put_failure: - genlmsg_cancel(msg, hdr); - return -EMSGSIZE; -} - -static int nl80211_dump_station(struct sk_buff *skb, - struct netlink_callback *cb) -{ - struct station_info sinfo; - struct cfg80211_registered_device *dev; - struct net_device *netdev; - u8 mac_addr[ETH_ALEN]; - int sta_idx = cb->args[1]; - int err; - - err = nl80211_prepare_netdev_dump(skb, cb, &dev, &netdev); - if (err) - return err; - - if (!dev->ops->dump_station) { - err = -EOPNOTSUPP; - goto out_err; - } - - while (1) { - memset(&sinfo, 0, sizeof(sinfo)); - err = dev->ops->dump_station(&dev->wiphy, netdev, sta_idx, - mac_addr, &sinfo); - if (err == -ENOENT) - break; - if (err) - goto out_err; - - if (nl80211_send_station(skb, - NETLINK_CB(cb->skb).pid, - cb->nlh->nlmsg_seq, NLM_F_MULTI, - dev, netdev, mac_addr, - &sinfo) < 0) - goto out; - - sta_idx++; - } - - - out: - cb->args[1] = sta_idx; - err = skb->len; - out_err: - nl80211_finish_netdev_dump(dev); - - return err; -} - -static int nl80211_get_station(struct sk_buff *skb, struct genl_info *info) -{ - struct cfg80211_registered_device *rdev = info->user_ptr[0]; - struct net_device *dev = info->user_ptr[1]; - struct station_info sinfo; - struct sk_buff *msg; - u8 *mac_addr = NULL; - int err; - - memset(&sinfo, 0, sizeof(sinfo)); - - if (!info->attrs[NL80211_ATTR_MAC]) - return -EINVAL; - - mac_addr = nla_data(info->attrs[NL80211_ATTR_MAC]); - - if (!rdev->ops->get_station) - return -EOPNOTSUPP; - - err = rdev->ops->get_station(&rdev->wiphy, dev, mac_addr, &sinfo); - if (err) - return err; - - msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL); - if (!msg) - return -ENOMEM; - - if (nl80211_send_station(msg, info->snd_pid, info->snd_seq, 0, - rdev, dev, mac_addr, &sinfo) < 0) { - nlmsg_free(msg); - return -ENOBUFS; - } - - return genlmsg_reply(msg, info); -} - -/* - * Get vlan interface making sure it is running and on the right wiphy. - */ -static struct net_device *get_vlan(struct genl_info *info, - struct cfg80211_registered_device *rdev) -{ - struct nlattr *vlanattr = info->attrs[NL80211_ATTR_STA_VLAN]; - struct net_device *v; - int ret; - - if (!vlanattr) - return NULL; - - v = dev_get_by_index(genl_info_net(info), nla_get_u32(vlanattr)); - if (!v) - return ERR_PTR(-ENODEV); - - if (!v->ieee80211_ptr || v->ieee80211_ptr->wiphy != &rdev->wiphy) { - ret = -EINVAL; - goto error; - } - - if (!netif_running(v)) { - ret = -ENETDOWN; - goto error; - } - - return v; - error: - dev_put(v); - return ERR_PTR(ret); -} - -static int nl80211_set_station(struct sk_buff *skb, struct genl_info *info) -{ - struct cfg80211_registered_device *rdev = info->user_ptr[0]; - int err; - struct net_device *dev = info->user_ptr[1]; - struct station_parameters params; - u8 *mac_addr = NULL; - - memset(¶ms, 0, sizeof(params)); - - params.listen_interval = -1; - params.plink_state = -1; - - if (info->attrs[NL80211_ATTR_STA_AID]) - return -EINVAL; - - if (!info->attrs[NL80211_ATTR_MAC]) - return -EINVAL; - - mac_addr = nla_data(info->attrs[NL80211_ATTR_MAC]); - - if (info->attrs[NL80211_ATTR_STA_SUPPORTED_RATES]) { - params.supported_rates = - nla_data(info->attrs[NL80211_ATTR_STA_SUPPORTED_RATES]); - params.supported_rates_len = - nla_len(info->attrs[NL80211_ATTR_STA_SUPPORTED_RATES]); - } - - if (info->attrs[NL80211_ATTR_STA_LISTEN_INTERVAL]) - params.listen_interval = - nla_get_u16(info->attrs[NL80211_ATTR_STA_LISTEN_INTERVAL]); - - if (info->attrs[NL80211_ATTR_HT_CAPABILITY]) - params.ht_capa = - nla_data(info->attrs[NL80211_ATTR_HT_CAPABILITY]); - - if (!rdev->ops->change_station) - return -EOPNOTSUPP; - - if (parse_station_flags(info, dev->ieee80211_ptr->iftype, ¶ms)) - return -EINVAL; - - if (info->attrs[NL80211_ATTR_STA_PLINK_ACTION]) - params.plink_action = - nla_get_u8(info->attrs[NL80211_ATTR_STA_PLINK_ACTION]); - - if (info->attrs[NL80211_ATTR_STA_PLINK_STATE]) - params.plink_state = - nla_get_u8(info->attrs[NL80211_ATTR_STA_PLINK_STATE]); - - switch (dev->ieee80211_ptr->iftype) { - case NL80211_IFTYPE_AP: - case NL80211_IFTYPE_AP_VLAN: - case NL80211_IFTYPE_P2P_GO: - /* disallow mesh-specific things */ - if (params.plink_action) - return -EINVAL; - - /* TDLS can't be set, ... */ - if (params.sta_flags_set & BIT(NL80211_STA_FLAG_TDLS_PEER)) - return -EINVAL; - /* - * ... but don't bother the driver with it. This works around - * a hostapd/wpa_supplicant issue -- it always includes the - * TLDS_PEER flag in the mask even for AP mode. - */ - params.sta_flags_mask &= ~BIT(NL80211_STA_FLAG_TDLS_PEER); - - /* accept only the listed bits */ - if (params.sta_flags_mask & - ~(BIT(NL80211_STA_FLAG_AUTHORIZED) | - BIT(NL80211_STA_FLAG_SHORT_PREAMBLE) | - BIT(NL80211_STA_FLAG_WME) | - BIT(NL80211_STA_FLAG_MFP))) - return -EINVAL; - - /* must be last in here for error handling */ - params.vlan = get_vlan(info, rdev); - if (IS_ERR(params.vlan)) - return PTR_ERR(params.vlan); - break; - case NL80211_IFTYPE_P2P_CLIENT: - case NL80211_IFTYPE_STATION: - /* - * Don't allow userspace to change the TDLS_PEER flag, - * but silently ignore attempts to change it since we - * don't have state here to verify that it doesn't try - * to change the flag. - */ - params.sta_flags_mask &= ~BIT(NL80211_STA_FLAG_TDLS_PEER); - /* fall through */ - case NL80211_IFTYPE_ADHOC: - /* disallow things sta doesn't support */ - if (params.plink_action) - return -EINVAL; - if (params.ht_capa) - return -EINVAL; - if (params.listen_interval >= 0) - return -EINVAL; - /* reject any changes other than AUTHORIZED */ - if (params.sta_flags_mask & ~BIT(NL80211_STA_FLAG_AUTHORIZED)) - return -EINVAL; - break; - case NL80211_IFTYPE_MESH_POINT: - /* disallow things mesh doesn't support */ - if (params.vlan) - return -EINVAL; - if (params.ht_capa) - return -EINVAL; - if (params.listen_interval >= 0) - return -EINVAL; - /* - * No special handling for TDLS here -- the userspace - * mesh code doesn't have this bug. - */ - if (params.sta_flags_mask & - ~(BIT(NL80211_STA_FLAG_AUTHENTICATED) | - BIT(NL80211_STA_FLAG_MFP) | - BIT(NL80211_STA_FLAG_AUTHORIZED))) - return -EINVAL; - break; - default: - return -EOPNOTSUPP; - } - - /* be aware of params.vlan when changing code here */ - - err = rdev->ops->change_station(&rdev->wiphy, dev, mac_addr, ¶ms); - - if (params.vlan) - dev_put(params.vlan); - - return err; -} - -static struct nla_policy -nl80211_sta_wme_policy[NL80211_STA_WME_MAX + 1] __read_mostly = { - [NL80211_STA_WME_UAPSD_QUEUES] = { .type = NLA_U8 }, - [NL80211_STA_WME_MAX_SP] = { .type = NLA_U8 }, -}; - -static int nl80211_new_station(struct sk_buff *skb, struct genl_info *info) -{ - struct cfg80211_registered_device *rdev = info->user_ptr[0]; - int err; - struct net_device *dev = info->user_ptr[1]; - struct station_parameters params; - u8 *mac_addr = NULL; - - memset(¶ms, 0, sizeof(params)); - - if (!info->attrs[NL80211_ATTR_MAC]) - return -EINVAL; - - if (!info->attrs[NL80211_ATTR_STA_LISTEN_INTERVAL]) - return -EINVAL; - - if (!info->attrs[NL80211_ATTR_STA_SUPPORTED_RATES]) - return -EINVAL; - - if (!info->attrs[NL80211_ATTR_STA_AID]) - return -EINVAL; - - mac_addr = nla_data(info->attrs[NL80211_ATTR_MAC]); - params.supported_rates = - nla_data(info->attrs[NL80211_ATTR_STA_SUPPORTED_RATES]); - params.supported_rates_len = - nla_len(info->attrs[NL80211_ATTR_STA_SUPPORTED_RATES]); - params.listen_interval = - nla_get_u16(info->attrs[NL80211_ATTR_STA_LISTEN_INTERVAL]); - - params.aid = nla_get_u16(info->attrs[NL80211_ATTR_STA_AID]); - if (!params.aid || params.aid > IEEE80211_MAX_AID) - return -EINVAL; - - if (info->attrs[NL80211_ATTR_HT_CAPABILITY]) - params.ht_capa = - nla_data(info->attrs[NL80211_ATTR_HT_CAPABILITY]); - - if (info->attrs[NL80211_ATTR_STA_PLINK_ACTION]) - params.plink_action = - nla_get_u8(info->attrs[NL80211_ATTR_STA_PLINK_ACTION]); - - if (!rdev->ops->add_station) - return -EOPNOTSUPP; - - if (parse_station_flags(info, dev->ieee80211_ptr->iftype, ¶ms)) - return -EINVAL; - - switch (dev->ieee80211_ptr->iftype) { - case NL80211_IFTYPE_AP: - case NL80211_IFTYPE_AP_VLAN: - case NL80211_IFTYPE_P2P_GO: - /* parse WME attributes if sta is WME capable */ - if ((rdev->wiphy.flags & WIPHY_FLAG_AP_UAPSD) && - (params.sta_flags_set & BIT(NL80211_STA_FLAG_WME)) && - info->attrs[NL80211_ATTR_STA_WME]) { - struct nlattr *tb[NL80211_STA_WME_MAX + 1]; - struct nlattr *nla; - - nla = info->attrs[NL80211_ATTR_STA_WME]; - err = nla_parse_nested(tb, NL80211_STA_WME_MAX, nla, - nl80211_sta_wme_policy); - if (err) - return err; - - if (tb[NL80211_STA_WME_UAPSD_QUEUES]) - params.uapsd_queues = - nla_get_u8(tb[NL80211_STA_WME_UAPSD_QUEUES]); - if (params.uapsd_queues & - ~IEEE80211_WMM_IE_STA_QOSINFO_AC_MASK) - return -EINVAL; - - if (tb[NL80211_STA_WME_MAX_SP]) - params.max_sp = - nla_get_u8(tb[NL80211_STA_WME_MAX_SP]); - - if (params.max_sp & - ~IEEE80211_WMM_IE_STA_QOSINFO_SP_MASK) - return -EINVAL; - - params.sta_modify_mask |= STATION_PARAM_APPLY_UAPSD; - } - /* TDLS peers cannot be added */ - if (params.sta_flags_set & BIT(NL80211_STA_FLAG_TDLS_PEER)) - return -EINVAL; - /* but don't bother the driver with it */ - params.sta_flags_mask &= ~BIT(NL80211_STA_FLAG_TDLS_PEER); - - /* must be last in here for error handling */ - params.vlan = get_vlan(info, rdev); - if (IS_ERR(params.vlan)) - return PTR_ERR(params.vlan); - break; - case NL80211_IFTYPE_MESH_POINT: - /* TDLS peers cannot be added */ - if (params.sta_flags_set & BIT(NL80211_STA_FLAG_TDLS_PEER)) - return -EINVAL; - break; - case NL80211_IFTYPE_STATION: - /* Only TDLS peers can be added */ - if (!(params.sta_flags_set & BIT(NL80211_STA_FLAG_TDLS_PEER))) - return -EINVAL; - /* Can only add if TDLS ... */ - if (!(rdev->wiphy.flags & WIPHY_FLAG_SUPPORTS_TDLS)) - return -EOPNOTSUPP; - /* ... with external setup is supported */ - if (!(rdev->wiphy.flags & WIPHY_FLAG_TDLS_EXTERNAL_SETUP)) - return -EOPNOTSUPP; - break; - default: - return -EOPNOTSUPP; - } - - /* be aware of params.vlan when changing code here */ - - err = rdev->ops->add_station(&rdev->wiphy, dev, mac_addr, ¶ms); - - if (params.vlan) - dev_put(params.vlan); - return err; -} - -static int nl80211_del_station(struct sk_buff *skb, struct genl_info *info) -{ - struct cfg80211_registered_device *rdev = info->user_ptr[0]; - struct net_device *dev = info->user_ptr[1]; - u8 *mac_addr = NULL; - - if (info->attrs[NL80211_ATTR_MAC]) - mac_addr = nla_data(info->attrs[NL80211_ATTR_MAC]); - - if (dev->ieee80211_ptr->iftype != NL80211_IFTYPE_AP && - dev->ieee80211_ptr->iftype != NL80211_IFTYPE_AP_VLAN && - dev->ieee80211_ptr->iftype != NL80211_IFTYPE_MESH_POINT && - dev->ieee80211_ptr->iftype != NL80211_IFTYPE_P2P_GO) - return -EINVAL; - - if (!rdev->ops->del_station) - return -EOPNOTSUPP; - - return rdev->ops->del_station(&rdev->wiphy, dev, mac_addr); -} - -static int nl80211_send_mpath(struct sk_buff *msg, u32 pid, u32 seq, - int flags, struct net_device *dev, - u8 *dst, u8 *next_hop, - struct mpath_info *pinfo) -{ - void *hdr; - struct nlattr *pinfoattr; - - hdr = nl80211hdr_put(msg, pid, seq, flags, NL80211_CMD_NEW_STATION); - if (!hdr) - return -1; - - NLA_PUT_U32(msg, NL80211_ATTR_IFINDEX, dev->ifindex); - NLA_PUT(msg, NL80211_ATTR_MAC, ETH_ALEN, dst); - NLA_PUT(msg, NL80211_ATTR_MPATH_NEXT_HOP, ETH_ALEN, next_hop); - - NLA_PUT_U32(msg, NL80211_ATTR_GENERATION, pinfo->generation); - - pinfoattr = nla_nest_start(msg, NL80211_ATTR_MPATH_INFO); - if (!pinfoattr) - goto nla_put_failure; - if (pinfo->filled & MPATH_INFO_FRAME_QLEN) - NLA_PUT_U32(msg, NL80211_MPATH_INFO_FRAME_QLEN, - pinfo->frame_qlen); - if (pinfo->filled & MPATH_INFO_SN) - NLA_PUT_U32(msg, NL80211_MPATH_INFO_SN, - pinfo->sn); - if (pinfo->filled & MPATH_INFO_METRIC) - NLA_PUT_U32(msg, NL80211_MPATH_INFO_METRIC, - pinfo->metric); - if (pinfo->filled & MPATH_INFO_EXPTIME) - NLA_PUT_U32(msg, NL80211_MPATH_INFO_EXPTIME, - pinfo->exptime); - if (pinfo->filled & MPATH_INFO_FLAGS) - NLA_PUT_U8(msg, NL80211_MPATH_INFO_FLAGS, - pinfo->flags); - if (pinfo->filled & MPATH_INFO_DISCOVERY_TIMEOUT) - NLA_PUT_U32(msg, NL80211_MPATH_INFO_DISCOVERY_TIMEOUT, - pinfo->discovery_timeout); - if (pinfo->filled & MPATH_INFO_DISCOVERY_RETRIES) - NLA_PUT_U8(msg, NL80211_MPATH_INFO_DISCOVERY_RETRIES, - pinfo->discovery_retries); - - nla_nest_end(msg, pinfoattr); - - return genlmsg_end(msg, hdr); - - nla_put_failure: - genlmsg_cancel(msg, hdr); - return -EMSGSIZE; -} - -static int nl80211_dump_mpath(struct sk_buff *skb, - struct netlink_callback *cb) -{ - struct mpath_info pinfo; - struct cfg80211_registered_device *dev; - struct net_device *netdev; - u8 dst[ETH_ALEN]; - u8 next_hop[ETH_ALEN]; - int path_idx = cb->args[1]; - int err; - - err = nl80211_prepare_netdev_dump(skb, cb, &dev, &netdev); - if (err) - return err; - - if (!dev->ops->dump_mpath) { - err = -EOPNOTSUPP; - goto out_err; - } - - if (netdev->ieee80211_ptr->iftype != NL80211_IFTYPE_MESH_POINT) { - err = -EOPNOTSUPP; - goto out_err; - } - - while (1) { - err = dev->ops->dump_mpath(&dev->wiphy, netdev, path_idx, - dst, next_hop, &pinfo); - if (err == -ENOENT) - break; - if (err) - goto out_err; - - if (nl80211_send_mpath(skb, NETLINK_CB(cb->skb).pid, - cb->nlh->nlmsg_seq, NLM_F_MULTI, - netdev, dst, next_hop, - &pinfo) < 0) - goto out; - - path_idx++; - } - - - out: - cb->args[1] = path_idx; - err = skb->len; - out_err: - nl80211_finish_netdev_dump(dev); - return err; -} - -static int nl80211_get_mpath(struct sk_buff *skb, struct genl_info *info) -{ - struct cfg80211_registered_device *rdev = info->user_ptr[0]; - int err; - struct net_device *dev = info->user_ptr[1]; - struct mpath_info pinfo; - struct sk_buff *msg; - u8 *dst = NULL; - u8 next_hop[ETH_ALEN]; - - memset(&pinfo, 0, sizeof(pinfo)); - - if (!info->attrs[NL80211_ATTR_MAC]) - return -EINVAL; - - dst = nla_data(info->attrs[NL80211_ATTR_MAC]); - - if (!rdev->ops->get_mpath) - return -EOPNOTSUPP; - - if (dev->ieee80211_ptr->iftype != NL80211_IFTYPE_MESH_POINT) - return -EOPNOTSUPP; - - err = rdev->ops->get_mpath(&rdev->wiphy, dev, dst, next_hop, &pinfo); - if (err) - return err; - - msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL); - if (!msg) - return -ENOMEM; - - if (nl80211_send_mpath(msg, info->snd_pid, info->snd_seq, 0, - dev, dst, next_hop, &pinfo) < 0) { - nlmsg_free(msg); - return -ENOBUFS; - } - - return genlmsg_reply(msg, info); -} - -static int nl80211_set_mpath(struct sk_buff *skb, struct genl_info *info) -{ - struct cfg80211_registered_device *rdev = info->user_ptr[0]; - struct net_device *dev = info->user_ptr[1]; - u8 *dst = NULL; - u8 *next_hop = NULL; - - if (!info->attrs[NL80211_ATTR_MAC]) - return -EINVAL; - - if (!info->attrs[NL80211_ATTR_MPATH_NEXT_HOP]) - return -EINVAL; - - dst = nla_data(info->attrs[NL80211_ATTR_MAC]); - next_hop = nla_data(info->attrs[NL80211_ATTR_MPATH_NEXT_HOP]); - - if (!rdev->ops->change_mpath) - return -EOPNOTSUPP; - - if (dev->ieee80211_ptr->iftype != NL80211_IFTYPE_MESH_POINT) - return -EOPNOTSUPP; - - return rdev->ops->change_mpath(&rdev->wiphy, dev, dst, next_hop); -} - -static int nl80211_new_mpath(struct sk_buff *skb, struct genl_info *info) -{ - struct cfg80211_registered_device *rdev = info->user_ptr[0]; - struct net_device *dev = info->user_ptr[1]; - u8 *dst = NULL; - u8 *next_hop = NULL; - - if (!info->attrs[NL80211_ATTR_MAC]) - return -EINVAL; - - if (!info->attrs[NL80211_ATTR_MPATH_NEXT_HOP]) - return -EINVAL; - - dst = nla_data(info->attrs[NL80211_ATTR_MAC]); - next_hop = nla_data(info->attrs[NL80211_ATTR_MPATH_NEXT_HOP]); - - if (!rdev->ops->add_mpath) - return -EOPNOTSUPP; - - if (dev->ieee80211_ptr->iftype != NL80211_IFTYPE_MESH_POINT) - return -EOPNOTSUPP; - - return rdev->ops->add_mpath(&rdev->wiphy, dev, dst, next_hop); -} - -static int nl80211_del_mpath(struct sk_buff *skb, struct genl_info *info) -{ - struct cfg80211_registered_device *rdev = info->user_ptr[0]; - struct net_device *dev = info->user_ptr[1]; - u8 *dst = NULL; - - if (info->attrs[NL80211_ATTR_MAC]) - dst = nla_data(info->attrs[NL80211_ATTR_MAC]); - - if (!rdev->ops->del_mpath) - return -EOPNOTSUPP; - - return rdev->ops->del_mpath(&rdev->wiphy, dev, dst); -} - -static int nl80211_set_bss(struct sk_buff *skb, struct genl_info *info) -{ - struct cfg80211_registered_device *rdev = info->user_ptr[0]; - struct net_device *dev = info->user_ptr[1]; - struct bss_parameters params; - - memset(¶ms, 0, sizeof(params)); - /* default to not changing parameters */ - params.use_cts_prot = -1; - params.use_short_preamble = -1; - params.use_short_slot_time = -1; - params.ap_isolate = -1; - params.ht_opmode = -1; - - if (info->attrs[NL80211_ATTR_BSS_CTS_PROT]) - params.use_cts_prot = - nla_get_u8(info->attrs[NL80211_ATTR_BSS_CTS_PROT]); - if (info->attrs[NL80211_ATTR_BSS_SHORT_PREAMBLE]) - params.use_short_preamble = - nla_get_u8(info->attrs[NL80211_ATTR_BSS_SHORT_PREAMBLE]); - if (info->attrs[NL80211_ATTR_BSS_SHORT_SLOT_TIME]) - params.use_short_slot_time = - nla_get_u8(info->attrs[NL80211_ATTR_BSS_SHORT_SLOT_TIME]); - if (info->attrs[NL80211_ATTR_BSS_BASIC_RATES]) { - params.basic_rates = - nla_data(info->attrs[NL80211_ATTR_BSS_BASIC_RATES]); - params.basic_rates_len = - nla_len(info->attrs[NL80211_ATTR_BSS_BASIC_RATES]); - } - if (info->attrs[NL80211_ATTR_AP_ISOLATE]) - params.ap_isolate = !!nla_get_u8(info->attrs[NL80211_ATTR_AP_ISOLATE]); - if (info->attrs[NL80211_ATTR_BSS_HT_OPMODE]) - params.ht_opmode = - nla_get_u16(info->attrs[NL80211_ATTR_BSS_HT_OPMODE]); - - if (!rdev->ops->change_bss) - return -EOPNOTSUPP; - - if (dev->ieee80211_ptr->iftype != NL80211_IFTYPE_AP && - dev->ieee80211_ptr->iftype != NL80211_IFTYPE_P2P_GO) - return -EOPNOTSUPP; - - return rdev->ops->change_bss(&rdev->wiphy, dev, ¶ms); -} - -static const struct nla_policy reg_rule_policy[NL80211_REG_RULE_ATTR_MAX + 1] = { - [NL80211_ATTR_REG_RULE_FLAGS] = { .type = NLA_U32 }, - [NL80211_ATTR_FREQ_RANGE_START] = { .type = NLA_U32 }, - [NL80211_ATTR_FREQ_RANGE_END] = { .type = NLA_U32 }, - [NL80211_ATTR_FREQ_RANGE_MAX_BW] = { .type = NLA_U32 }, - [NL80211_ATTR_POWER_RULE_MAX_ANT_GAIN] = { .type = NLA_U32 }, - [NL80211_ATTR_POWER_RULE_MAX_EIRP] = { .type = NLA_U32 }, -}; - -static int parse_reg_rule(struct nlattr *tb[], - struct ieee80211_reg_rule *reg_rule) -{ - struct ieee80211_freq_range *freq_range = ®_rule->freq_range; - struct ieee80211_power_rule *power_rule = ®_rule->power_rule; - - if (!tb[NL80211_ATTR_REG_RULE_FLAGS]) - return -EINVAL; - if (!tb[NL80211_ATTR_FREQ_RANGE_START]) - return -EINVAL; - if (!tb[NL80211_ATTR_FREQ_RANGE_END]) - return -EINVAL; - if (!tb[NL80211_ATTR_FREQ_RANGE_MAX_BW]) - return -EINVAL; - if (!tb[NL80211_ATTR_POWER_RULE_MAX_EIRP]) - return -EINVAL; - - reg_rule->flags = nla_get_u32(tb[NL80211_ATTR_REG_RULE_FLAGS]); - - freq_range->start_freq_khz = - nla_get_u32(tb[NL80211_ATTR_FREQ_RANGE_START]); - freq_range->end_freq_khz = - nla_get_u32(tb[NL80211_ATTR_FREQ_RANGE_END]); - freq_range->max_bandwidth_khz = - nla_get_u32(tb[NL80211_ATTR_FREQ_RANGE_MAX_BW]); - - power_rule->max_eirp = - nla_get_u32(tb[NL80211_ATTR_POWER_RULE_MAX_EIRP]); - - if (tb[NL80211_ATTR_POWER_RULE_MAX_ANT_GAIN]) - power_rule->max_antenna_gain = - nla_get_u32(tb[NL80211_ATTR_POWER_RULE_MAX_ANT_GAIN]); - - return 0; -} - -static int nl80211_req_set_reg(struct sk_buff *skb, struct genl_info *info) -{ - int r; - char *data = NULL; - - /* - * You should only get this when cfg80211 hasn't yet initialized - * completely when built-in to the kernel right between the time - * window between nl80211_init() and regulatory_init(), if that is - * even possible. - */ - mutex_lock(&cfg80211_mutex); - if (unlikely(!cfg80211_regdomain)) { - mutex_unlock(&cfg80211_mutex); - return -EINPROGRESS; - } - mutex_unlock(&cfg80211_mutex); - - if (!info->attrs[NL80211_ATTR_REG_ALPHA2]) - return -EINVAL; - - data = nla_data(info->attrs[NL80211_ATTR_REG_ALPHA2]); - - r = regulatory_hint_user(data); - - return r; -} - -static int nl80211_get_mesh_config(struct sk_buff *skb, - struct genl_info *info) -{ - struct cfg80211_registered_device *rdev = info->user_ptr[0]; - struct net_device *dev = info->user_ptr[1]; - struct wireless_dev *wdev = dev->ieee80211_ptr; - struct mesh_config cur_params; - int err = 0; - void *hdr; - struct nlattr *pinfoattr; - struct sk_buff *msg; - - if (wdev->iftype != NL80211_IFTYPE_MESH_POINT) - return -EOPNOTSUPP; - - if (!rdev->ops->get_mesh_config) - return -EOPNOTSUPP; - - wdev_lock(wdev); - /* If not connected, get default parameters */ - if (!wdev->mesh_id_len) - memcpy(&cur_params, &default_mesh_config, sizeof(cur_params)); - else - err = rdev->ops->get_mesh_config(&rdev->wiphy, dev, - &cur_params); - wdev_unlock(wdev); - - if (err) - return err; - - /* Draw up a netlink message to send back */ - msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL); - if (!msg) - return -ENOMEM; - hdr = nl80211hdr_put(msg, info->snd_pid, info->snd_seq, 0, - NL80211_CMD_GET_MESH_CONFIG); - if (!hdr) - goto out; - pinfoattr = nla_nest_start(msg, NL80211_ATTR_MESH_CONFIG); - if (!pinfoattr) - goto nla_put_failure; - NLA_PUT_U32(msg, NL80211_ATTR_IFINDEX, dev->ifindex); - NLA_PUT_U16(msg, NL80211_MESHCONF_RETRY_TIMEOUT, - cur_params.dot11MeshRetryTimeout); - NLA_PUT_U16(msg, NL80211_MESHCONF_CONFIRM_TIMEOUT, - cur_params.dot11MeshConfirmTimeout); - NLA_PUT_U16(msg, NL80211_MESHCONF_HOLDING_TIMEOUT, - cur_params.dot11MeshHoldingTimeout); - NLA_PUT_U16(msg, NL80211_MESHCONF_MAX_PEER_LINKS, - cur_params.dot11MeshMaxPeerLinks); - NLA_PUT_U8(msg, NL80211_MESHCONF_MAX_RETRIES, - cur_params.dot11MeshMaxRetries); - NLA_PUT_U8(msg, NL80211_MESHCONF_TTL, - cur_params.dot11MeshTTL); - NLA_PUT_U8(msg, NL80211_MESHCONF_ELEMENT_TTL, - cur_params.element_ttl); - NLA_PUT_U8(msg, NL80211_MESHCONF_AUTO_OPEN_PLINKS, - cur_params.auto_open_plinks); - NLA_PUT_U8(msg, NL80211_MESHCONF_HWMP_MAX_PREQ_RETRIES, - cur_params.dot11MeshHWMPmaxPREQretries); - NLA_PUT_U32(msg, NL80211_MESHCONF_PATH_REFRESH_TIME, - cur_params.path_refresh_time); - NLA_PUT_U16(msg, NL80211_MESHCONF_MIN_DISCOVERY_TIMEOUT, - cur_params.min_discovery_timeout); - NLA_PUT_U32(msg, NL80211_MESHCONF_HWMP_ACTIVE_PATH_TIMEOUT, - cur_params.dot11MeshHWMPactivePathTimeout); - NLA_PUT_U16(msg, NL80211_MESHCONF_HWMP_PREQ_MIN_INTERVAL, - cur_params.dot11MeshHWMPpreqMinInterval); - NLA_PUT_U16(msg, NL80211_MESHCONF_HWMP_PERR_MIN_INTERVAL, - cur_params.dot11MeshHWMPperrMinInterval); - NLA_PUT_U16(msg, NL80211_MESHCONF_HWMP_NET_DIAM_TRVS_TIME, - cur_params.dot11MeshHWMPnetDiameterTraversalTime); - NLA_PUT_U8(msg, NL80211_MESHCONF_HWMP_ROOTMODE, - cur_params.dot11MeshHWMPRootMode); - NLA_PUT_U16(msg, NL80211_MESHCONF_HWMP_RANN_INTERVAL, - cur_params.dot11MeshHWMPRannInterval); - NLA_PUT_U8(msg, NL80211_MESHCONF_GATE_ANNOUNCEMENTS, - cur_params.dot11MeshGateAnnouncementProtocol); - NLA_PUT_U8(msg, NL80211_MESHCONF_FORWARDING, - cur_params.dot11MeshForwarding); - NLA_PUT_U32(msg, NL80211_MESHCONF_RSSI_THRESHOLD, - cur_params.rssi_threshold); - nla_nest_end(msg, pinfoattr); - genlmsg_end(msg, hdr); - return genlmsg_reply(msg, info); - - nla_put_failure: - genlmsg_cancel(msg, hdr); - out: - nlmsg_free(msg); - return -ENOBUFS; -} - -static const struct nla_policy nl80211_meshconf_params_policy[NL80211_MESHCONF_ATTR_MAX+1] = { - [NL80211_MESHCONF_RETRY_TIMEOUT] = { .type = NLA_U16 }, - [NL80211_MESHCONF_CONFIRM_TIMEOUT] = { .type = NLA_U16 }, - [NL80211_MESHCONF_HOLDING_TIMEOUT] = { .type = NLA_U16 }, - [NL80211_MESHCONF_MAX_PEER_LINKS] = { .type = NLA_U16 }, - [NL80211_MESHCONF_MAX_RETRIES] = { .type = NLA_U8 }, - [NL80211_MESHCONF_TTL] = { .type = NLA_U8 }, - [NL80211_MESHCONF_ELEMENT_TTL] = { .type = NLA_U8 }, - [NL80211_MESHCONF_AUTO_OPEN_PLINKS] = { .type = NLA_U8 }, - - [NL80211_MESHCONF_HWMP_MAX_PREQ_RETRIES] = { .type = NLA_U8 }, - [NL80211_MESHCONF_PATH_REFRESH_TIME] = { .type = NLA_U32 }, - [NL80211_MESHCONF_MIN_DISCOVERY_TIMEOUT] = { .type = NLA_U16 }, - [NL80211_MESHCONF_HWMP_ACTIVE_PATH_TIMEOUT] = { .type = NLA_U32 }, - [NL80211_MESHCONF_HWMP_PREQ_MIN_INTERVAL] = { .type = NLA_U16 }, - [NL80211_MESHCONF_HWMP_PERR_MIN_INTERVAL] = { .type = NLA_U16 }, - [NL80211_MESHCONF_HWMP_NET_DIAM_TRVS_TIME] = { .type = NLA_U16 }, - [NL80211_MESHCONF_HWMP_ROOTMODE] = { .type = NLA_U8 }, - [NL80211_MESHCONF_HWMP_RANN_INTERVAL] = { .type = NLA_U16 }, - [NL80211_MESHCONF_GATE_ANNOUNCEMENTS] = { .type = NLA_U8 }, - [NL80211_MESHCONF_FORWARDING] = { .type = NLA_U8 }, - [NL80211_MESHCONF_RSSI_THRESHOLD] = { .type = NLA_U32}, -}; - -static const struct nla_policy - nl80211_mesh_setup_params_policy[NL80211_MESH_SETUP_ATTR_MAX+1] = { - [NL80211_MESH_SETUP_ENABLE_VENDOR_PATH_SEL] = { .type = NLA_U8 }, - [NL80211_MESH_SETUP_ENABLE_VENDOR_METRIC] = { .type = NLA_U8 }, - [NL80211_MESH_SETUP_USERSPACE_AUTH] = { .type = NLA_FLAG }, - [NL80211_MESH_SETUP_IE] = { .type = NLA_BINARY, - .len = IEEE80211_MAX_DATA_LEN }, - [NL80211_MESH_SETUP_USERSPACE_AMPE] = { .type = NLA_FLAG }, -}; - -static int nl80211_parse_mesh_config(struct genl_info *info, - struct mesh_config *cfg, - u32 *mask_out) -{ - struct nlattr *tb[NL80211_MESHCONF_ATTR_MAX + 1]; - u32 mask = 0; - -#define FILL_IN_MESH_PARAM_IF_SET(table, cfg, param, mask, attr_num, nla_fn) \ -do {\ - if (table[attr_num]) {\ - cfg->param = nla_fn(table[attr_num]); \ - mask |= (1 << (attr_num - 1)); \ - } \ -} while (0);\ - - - if (!info->attrs[NL80211_ATTR_MESH_CONFIG]) - return -EINVAL; - if (nla_parse_nested(tb, NL80211_MESHCONF_ATTR_MAX, - info->attrs[NL80211_ATTR_MESH_CONFIG], - nl80211_meshconf_params_policy)) - return -EINVAL; - - /* This makes sure that there aren't more than 32 mesh config - * parameters (otherwise our bitfield scheme would not work.) */ - BUILD_BUG_ON(NL80211_MESHCONF_ATTR_MAX > 32); - - /* Fill in the params struct */ - FILL_IN_MESH_PARAM_IF_SET(tb, cfg, dot11MeshRetryTimeout, - mask, NL80211_MESHCONF_RETRY_TIMEOUT, nla_get_u16); - FILL_IN_MESH_PARAM_IF_SET(tb, cfg, dot11MeshConfirmTimeout, - mask, NL80211_MESHCONF_CONFIRM_TIMEOUT, nla_get_u16); - FILL_IN_MESH_PARAM_IF_SET(tb, cfg, dot11MeshHoldingTimeout, - mask, NL80211_MESHCONF_HOLDING_TIMEOUT, nla_get_u16); - FILL_IN_MESH_PARAM_IF_SET(tb, cfg, dot11MeshMaxPeerLinks, - mask, NL80211_MESHCONF_MAX_PEER_LINKS, nla_get_u16); - FILL_IN_MESH_PARAM_IF_SET(tb, cfg, dot11MeshMaxRetries, - mask, NL80211_MESHCONF_MAX_RETRIES, nla_get_u8); - FILL_IN_MESH_PARAM_IF_SET(tb, cfg, dot11MeshTTL, - mask, NL80211_MESHCONF_TTL, nla_get_u8); - FILL_IN_MESH_PARAM_IF_SET(tb, cfg, element_ttl, - mask, NL80211_MESHCONF_ELEMENT_TTL, nla_get_u8); - FILL_IN_MESH_PARAM_IF_SET(tb, cfg, auto_open_plinks, - mask, NL80211_MESHCONF_AUTO_OPEN_PLINKS, nla_get_u8); - FILL_IN_MESH_PARAM_IF_SET(tb, cfg, dot11MeshHWMPmaxPREQretries, - mask, NL80211_MESHCONF_HWMP_MAX_PREQ_RETRIES, - nla_get_u8); - FILL_IN_MESH_PARAM_IF_SET(tb, cfg, path_refresh_time, - mask, NL80211_MESHCONF_PATH_REFRESH_TIME, nla_get_u32); - FILL_IN_MESH_PARAM_IF_SET(tb, cfg, min_discovery_timeout, - mask, NL80211_MESHCONF_MIN_DISCOVERY_TIMEOUT, - nla_get_u16); - FILL_IN_MESH_PARAM_IF_SET(tb, cfg, dot11MeshHWMPactivePathTimeout, - mask, NL80211_MESHCONF_HWMP_ACTIVE_PATH_TIMEOUT, - nla_get_u32); - FILL_IN_MESH_PARAM_IF_SET(tb, cfg, dot11MeshHWMPpreqMinInterval, - mask, NL80211_MESHCONF_HWMP_PREQ_MIN_INTERVAL, - nla_get_u16); - FILL_IN_MESH_PARAM_IF_SET(tb, cfg, dot11MeshHWMPperrMinInterval, - mask, NL80211_MESHCONF_HWMP_PERR_MIN_INTERVAL, - nla_get_u16); - FILL_IN_MESH_PARAM_IF_SET(tb, cfg, - dot11MeshHWMPnetDiameterTraversalTime, - mask, NL80211_MESHCONF_HWMP_NET_DIAM_TRVS_TIME, - nla_get_u16); - FILL_IN_MESH_PARAM_IF_SET(tb, cfg, - dot11MeshHWMPRootMode, mask, - NL80211_MESHCONF_HWMP_ROOTMODE, - nla_get_u8); - FILL_IN_MESH_PARAM_IF_SET(tb, cfg, - dot11MeshHWMPRannInterval, mask, - NL80211_MESHCONF_HWMP_RANN_INTERVAL, - nla_get_u16); - FILL_IN_MESH_PARAM_IF_SET(tb, cfg, - dot11MeshGateAnnouncementProtocol, mask, - NL80211_MESHCONF_GATE_ANNOUNCEMENTS, - nla_get_u8); - FILL_IN_MESH_PARAM_IF_SET(tb, cfg, dot11MeshForwarding, - mask, NL80211_MESHCONF_FORWARDING, nla_get_u8); - FILL_IN_MESH_PARAM_IF_SET(tb, cfg, rssi_threshold, - mask, NL80211_MESHCONF_RSSI_THRESHOLD, nla_get_u32); - if (mask_out) - *mask_out = mask; - - return 0; - -#undef FILL_IN_MESH_PARAM_IF_SET -} - -static int nl80211_parse_mesh_setup(struct genl_info *info, - struct mesh_setup *setup) -{ - struct nlattr *tb[NL80211_MESH_SETUP_ATTR_MAX + 1]; - - if (!info->attrs[NL80211_ATTR_MESH_SETUP]) - return -EINVAL; - if (nla_parse_nested(tb, NL80211_MESH_SETUP_ATTR_MAX, - info->attrs[NL80211_ATTR_MESH_SETUP], - nl80211_mesh_setup_params_policy)) - return -EINVAL; - - if (tb[NL80211_MESH_SETUP_ENABLE_VENDOR_PATH_SEL]) - setup->path_sel_proto = - (nla_get_u8(tb[NL80211_MESH_SETUP_ENABLE_VENDOR_PATH_SEL])) ? - IEEE80211_PATH_PROTOCOL_VENDOR : - IEEE80211_PATH_PROTOCOL_HWMP; - - if (tb[NL80211_MESH_SETUP_ENABLE_VENDOR_METRIC]) - setup->path_metric = - (nla_get_u8(tb[NL80211_MESH_SETUP_ENABLE_VENDOR_METRIC])) ? - IEEE80211_PATH_METRIC_VENDOR : - IEEE80211_PATH_METRIC_AIRTIME; - - - if (tb[NL80211_MESH_SETUP_IE]) { - struct nlattr *ieattr = - tb[NL80211_MESH_SETUP_IE]; - if (!is_valid_ie_attr(ieattr)) - return -EINVAL; - setup->ie = nla_data(ieattr); - setup->ie_len = nla_len(ieattr); - } - setup->is_authenticated = nla_get_flag(tb[NL80211_MESH_SETUP_USERSPACE_AUTH]); - setup->is_secure = nla_get_flag(tb[NL80211_MESH_SETUP_USERSPACE_AMPE]); - - return 0; -} - -static int nl80211_update_mesh_config(struct sk_buff *skb, - struct genl_info *info) -{ - struct cfg80211_registered_device *rdev = info->user_ptr[0]; - struct net_device *dev = info->user_ptr[1]; - struct wireless_dev *wdev = dev->ieee80211_ptr; - struct mesh_config cfg; - u32 mask; - int err; - - if (wdev->iftype != NL80211_IFTYPE_MESH_POINT) - return -EOPNOTSUPP; - - if (!rdev->ops->update_mesh_config) - return -EOPNOTSUPP; - - err = nl80211_parse_mesh_config(info, &cfg, &mask); - if (err) - return err; - - wdev_lock(wdev); - if (!wdev->mesh_id_len) - err = -ENOLINK; - - if (!err) - err = rdev->ops->update_mesh_config(&rdev->wiphy, dev, - mask, &cfg); - - wdev_unlock(wdev); - - return err; -} - -static int nl80211_get_reg(struct sk_buff *skb, struct genl_info *info) -{ - struct sk_buff *msg; - void *hdr = NULL; - struct nlattr *nl_reg_rules; - unsigned int i; - int err = -EINVAL; - - mutex_lock(&cfg80211_mutex); - - if (!cfg80211_regdomain) - goto out; - - msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL); - if (!msg) { - err = -ENOBUFS; - goto out; - } - - hdr = nl80211hdr_put(msg, info->snd_pid, info->snd_seq, 0, - NL80211_CMD_GET_REG); - if (!hdr) - goto put_failure; - - NLA_PUT_STRING(msg, NL80211_ATTR_REG_ALPHA2, - cfg80211_regdomain->alpha2); - if (cfg80211_regdomain->dfs_region) - NLA_PUT_U8(msg, NL80211_ATTR_DFS_REGION, - cfg80211_regdomain->dfs_region); - - nl_reg_rules = nla_nest_start(msg, NL80211_ATTR_REG_RULES); - if (!nl_reg_rules) - goto nla_put_failure; - - for (i = 0; i < cfg80211_regdomain->n_reg_rules; i++) { - struct nlattr *nl_reg_rule; - const struct ieee80211_reg_rule *reg_rule; - const struct ieee80211_freq_range *freq_range; - const struct ieee80211_power_rule *power_rule; - - reg_rule = &cfg80211_regdomain->reg_rules[i]; - freq_range = ®_rule->freq_range; - power_rule = ®_rule->power_rule; - - nl_reg_rule = nla_nest_start(msg, i); - if (!nl_reg_rule) - goto nla_put_failure; - - NLA_PUT_U32(msg, NL80211_ATTR_REG_RULE_FLAGS, - reg_rule->flags); - NLA_PUT_U32(msg, NL80211_ATTR_FREQ_RANGE_START, - freq_range->start_freq_khz); - NLA_PUT_U32(msg, NL80211_ATTR_FREQ_RANGE_END, - freq_range->end_freq_khz); - NLA_PUT_U32(msg, NL80211_ATTR_FREQ_RANGE_MAX_BW, - freq_range->max_bandwidth_khz); - NLA_PUT_U32(msg, NL80211_ATTR_POWER_RULE_MAX_ANT_GAIN, - power_rule->max_antenna_gain); - NLA_PUT_U32(msg, NL80211_ATTR_POWER_RULE_MAX_EIRP, - power_rule->max_eirp); - - nla_nest_end(msg, nl_reg_rule); - } - - nla_nest_end(msg, nl_reg_rules); - - genlmsg_end(msg, hdr); - err = genlmsg_reply(msg, info); - goto out; - -nla_put_failure: - genlmsg_cancel(msg, hdr); -put_failure: - nlmsg_free(msg); - err = -EMSGSIZE; -out: - mutex_unlock(&cfg80211_mutex); - return err; -} - -static int nl80211_set_reg(struct sk_buff *skb, struct genl_info *info) -{ - struct nlattr *tb[NL80211_REG_RULE_ATTR_MAX + 1]; - struct nlattr *nl_reg_rule; - char *alpha2 = NULL; - int rem_reg_rules = 0, r = 0; - u32 num_rules = 0, rule_idx = 0, size_of_regd; - u8 dfs_region = 0; - struct ieee80211_regdomain *rd = NULL; - - if (!info->attrs[NL80211_ATTR_REG_ALPHA2]) - return -EINVAL; - - if (!info->attrs[NL80211_ATTR_REG_RULES]) - return -EINVAL; - - alpha2 = nla_data(info->attrs[NL80211_ATTR_REG_ALPHA2]); - - if (info->attrs[NL80211_ATTR_DFS_REGION]) - dfs_region = nla_get_u8(info->attrs[NL80211_ATTR_DFS_REGION]); - - nla_for_each_nested(nl_reg_rule, info->attrs[NL80211_ATTR_REG_RULES], - rem_reg_rules) { - num_rules++; - if (num_rules > NL80211_MAX_SUPP_REG_RULES) - return -EINVAL; - } - - mutex_lock(&cfg80211_mutex); - - if (!reg_is_valid_request(alpha2)) { - r = -EINVAL; - goto bad_reg; - } - - size_of_regd = sizeof(struct ieee80211_regdomain) + - (num_rules * sizeof(struct ieee80211_reg_rule)); - - rd = kzalloc(size_of_regd, GFP_KERNEL); - if (!rd) { - r = -ENOMEM; - goto bad_reg; - } - - rd->n_reg_rules = num_rules; - rd->alpha2[0] = alpha2[0]; - rd->alpha2[1] = alpha2[1]; - - /* - * Disable DFS master mode if the DFS region was - * not supported or known on this kernel. - */ - if (reg_supported_dfs_region(dfs_region)) - rd->dfs_region = dfs_region; - - nla_for_each_nested(nl_reg_rule, info->attrs[NL80211_ATTR_REG_RULES], - rem_reg_rules) { - nla_parse(tb, NL80211_REG_RULE_ATTR_MAX, - nla_data(nl_reg_rule), nla_len(nl_reg_rule), - reg_rule_policy); - r = parse_reg_rule(tb, &rd->reg_rules[rule_idx]); - if (r) - goto bad_reg; - - rule_idx++; - - if (rule_idx > NL80211_MAX_SUPP_REG_RULES) { - r = -EINVAL; - goto bad_reg; - } - } - - BUG_ON(rule_idx != num_rules); - - r = set_regdom(rd); - - mutex_unlock(&cfg80211_mutex); - - return r; - - bad_reg: - mutex_unlock(&cfg80211_mutex); - kfree(rd); - return r; -} - -static int validate_scan_freqs(struct nlattr *freqs) -{ - struct nlattr *attr1, *attr2; - int n_channels = 0, tmp1, tmp2; - - nla_for_each_nested(attr1, freqs, tmp1) { - n_channels++; - /* - * Some hardware has a limited channel list for - * scanning, and it is pretty much nonsensical - * to scan for a channel twice, so disallow that - * and don't require drivers to check that the - * channel list they get isn't longer than what - * they can scan, as long as they can scan all - * the channels they registered at once. - */ - nla_for_each_nested(attr2, freqs, tmp2) - if (attr1 != attr2 && - nla_get_u32(attr1) == nla_get_u32(attr2)) - return 0; - } - - return n_channels; -} - -/* - * [PLATA] qui appelle cette fonction? - */ -static int nl80211_trigger_scan(struct sk_buff *skb, struct genl_info *info) -{ - struct cfg80211_registered_device *rdev = info->user_ptr[0]; - struct net_device *dev = info->user_ptr[1]; - struct cfg80211_scan_request *request; - struct nlattr *attr; - struct wiphy *wiphy; - int err, tmp, n_ssids = 0, n_channels, i; - size_t ie_len; - - if (!is_valid_ie_attr(info->attrs[NL80211_ATTR_IE])) - return -EINVAL; - - wiphy = &rdev->wiphy; - - /* - * [PLATA] - this method is called and it is hard to block it. But if the next if clause returns 0, then we also exit without scanning - */ - if (!rdev->ops->scan) - return -EOPNOTSUPP; - - if (rdev->scan_req) - return -EBUSY; - - if (info->attrs[NL80211_ATTR_SCAN_FREQUENCIES]) { - n_channels = validate_scan_freqs( - info->attrs[NL80211_ATTR_SCAN_FREQUENCIES]); - if (!n_channels) - return -EINVAL; - } else { - enum ieee80211_band band; - n_channels = 0; - - for (band = 0; band < IEEE80211_NUM_BANDS; band++) - if (wiphy->bands[band]) - n_channels += wiphy->bands[band]->n_channels; - } - - if (info->attrs[NL80211_ATTR_SCAN_SSIDS]) - nla_for_each_nested(attr, info->attrs[NL80211_ATTR_SCAN_SSIDS], tmp) - n_ssids++; - - if (n_ssids > wiphy->max_scan_ssids) - return -EINVAL; - - if (info->attrs[NL80211_ATTR_IE]) - ie_len = nla_len(info->attrs[NL80211_ATTR_IE]); - else - ie_len = 0; - - if (ie_len > wiphy->max_scan_ie_len) - return -EINVAL; - - request = kzalloc(sizeof(*request) - + sizeof(*request->ssids) * n_ssids - + sizeof(*request->channels) * n_channels - + ie_len, GFP_KERNEL); - if (!request) - return -ENOMEM; - - if (n_ssids) - request->ssids = (void *)&request->channels[n_channels]; - request->n_ssids = n_ssids; - if (ie_len) { - if (request->ssids) - request->ie = (void *)(request->ssids + n_ssids); - else - request->ie = (void *)(request->channels + n_channels); - } - - i = 0; - if (info->attrs[NL80211_ATTR_SCAN_FREQUENCIES]) { - /* user specified, bail out if channel not found */ - nla_for_each_nested(attr, info->attrs[NL80211_ATTR_SCAN_FREQUENCIES], tmp) { - struct ieee80211_channel *chan; - - chan = ieee80211_get_channel(wiphy, nla_get_u32(attr)); - - if (!chan) { - err = -EINVAL; - goto out_free; - } - - /* ignore disabled channels */ - if (chan->flags & IEEE80211_CHAN_DISABLED) - continue; - - request->channels[i] = chan; - i++; - } - } else { - enum ieee80211_band band; - - /* all channels */ - for (band = 0; band < IEEE80211_NUM_BANDS; band++) { - int j; - if (!wiphy->bands[band]) - continue; - for (j = 0; j < wiphy->bands[band]->n_channels; j++) { - struct ieee80211_channel *chan; - - chan = &wiphy->bands[band]->channels[j]; - - if (chan->flags & IEEE80211_CHAN_DISABLED) - continue; - - request->channels[i] = chan; - i++; - } - } - } - - if (!i) { - err = -EINVAL; - goto out_free; - } - - request->n_channels = i; - - i = 0; - if (info->attrs[NL80211_ATTR_SCAN_SSIDS]) { - nla_for_each_nested(attr, info->attrs[NL80211_ATTR_SCAN_SSIDS], tmp) { - if (nla_len(attr) > IEEE80211_MAX_SSID_LEN) { - err = -EINVAL; - goto out_free; - } - request->ssids[i].ssid_len = nla_len(attr); - memcpy(request->ssids[i].ssid, nla_data(attr), nla_len(attr)); - i++; - } - } - - if (info->attrs[NL80211_ATTR_IE]) { - request->ie_len = nla_len(info->attrs[NL80211_ATTR_IE]); - memcpy((void *)request->ie, - nla_data(info->attrs[NL80211_ATTR_IE]), - request->ie_len); - } - - for (i = 0; i < IEEE80211_NUM_BANDS; i++) - if (wiphy->bands[i]) - request->rates[i] = - (1 << wiphy->bands[i]->n_bitrates) - 1; - - if (info->attrs[NL80211_ATTR_SCAN_SUPP_RATES]) { - nla_for_each_nested(attr, - info->attrs[NL80211_ATTR_SCAN_SUPP_RATES], - tmp) { - enum ieee80211_band band = nla_type(attr); - - if (band < 0 || band >= IEEE80211_NUM_BANDS) { - err = -EINVAL; - goto out_free; - } - err = ieee80211_get_ratemask(wiphy->bands[band], - nla_data(attr), - nla_len(attr), - &request->rates[band]); - if (err) - goto out_free; - } - } - - request->no_cck = - nla_get_flag(info->attrs[NL80211_ATTR_TX_NO_CCK_RATE]); - - request->dev = dev; - request->wiphy = &rdev->wiphy; - - rdev->scan_req = request; - err = rdev->ops->scan(&rdev->wiphy, dev, request); - - if (!err) { - nl80211_send_scan_start(rdev, dev); - dev_hold(dev); - } else { - out_free: - rdev->scan_req = NULL; - kfree(request); - } - - return err; -} - -static int nl80211_start_sched_scan(struct sk_buff *skb, - struct genl_info *info) -{ - struct cfg80211_sched_scan_request *request; - struct cfg80211_registered_device *rdev = info->user_ptr[0]; - struct net_device *dev = info->user_ptr[1]; - struct nlattr *attr; - struct wiphy *wiphy; - int err, tmp, n_ssids = 0, n_match_sets = 0, n_channels, i; - u32 interval; - enum ieee80211_band band; - size_t ie_len; - struct nlattr *tb[NL80211_SCHED_SCAN_MATCH_ATTR_MAX + 1]; - - if (!(rdev->wiphy.flags & WIPHY_FLAG_SUPPORTS_SCHED_SCAN) || - !rdev->ops->sched_scan_start) - return -EOPNOTSUPP; - - if (!is_valid_ie_attr(info->attrs[NL80211_ATTR_IE])) - return -EINVAL; - - if (!info->attrs[NL80211_ATTR_SCHED_SCAN_INTERVAL]) - return -EINVAL; - - interval = nla_get_u32(info->attrs[NL80211_ATTR_SCHED_SCAN_INTERVAL]); - if (interval == 0) - return -EINVAL; - - wiphy = &rdev->wiphy; - - if (info->attrs[NL80211_ATTR_SCAN_FREQUENCIES]) { - n_channels = validate_scan_freqs( - info->attrs[NL80211_ATTR_SCAN_FREQUENCIES]); - if (!n_channels) - return -EINVAL; - } else { - n_channels = 0; - - for (band = 0; band < IEEE80211_NUM_BANDS; band++) - if (wiphy->bands[band]) - n_channels += wiphy->bands[band]->n_channels; - } - - if (info->attrs[NL80211_ATTR_SCAN_SSIDS]) - nla_for_each_nested(attr, info->attrs[NL80211_ATTR_SCAN_SSIDS], - tmp) - n_ssids++; - - if (n_ssids > wiphy->max_sched_scan_ssids) - return -EINVAL; - - if (info->attrs[NL80211_ATTR_SCHED_SCAN_MATCH]) - nla_for_each_nested(attr, - info->attrs[NL80211_ATTR_SCHED_SCAN_MATCH], - tmp) - n_match_sets++; - - if (n_match_sets > wiphy->max_match_sets) - return -EINVAL; - - if (info->attrs[NL80211_ATTR_IE]) - ie_len = nla_len(info->attrs[NL80211_ATTR_IE]); - else - ie_len = 0; - - if (ie_len > wiphy->max_sched_scan_ie_len) - return -EINVAL; - - mutex_lock(&rdev->sched_scan_mtx); - - if (rdev->sched_scan_req) { - err = -EINPROGRESS; - goto out; - } - - request = kzalloc(sizeof(*request) - + sizeof(*request->ssids) * n_ssids - + sizeof(*request->match_sets) * n_match_sets - + sizeof(*request->channels) * n_channels - + ie_len, GFP_KERNEL); - if (!request) { - err = -ENOMEM; - goto out; - } - - if (n_ssids) - request->ssids = (void *)&request->channels[n_channels]; - request->n_ssids = n_ssids; - if (ie_len) { - if (request->ssids) - request->ie = (void *)(request->ssids + n_ssids); - else - request->ie = (void *)(request->channels + n_channels); - } - - if (n_match_sets) { - if (request->ie) - request->match_sets = (void *)(request->ie + ie_len); - else if (request->ssids) - request->match_sets = - (void *)(request->ssids + n_ssids); - else - request->match_sets = - (void *)(request->channels + n_channels); - } - request->n_match_sets = n_match_sets; - - i = 0; - if (info->attrs[NL80211_ATTR_SCAN_FREQUENCIES]) { - /* user specified, bail out if channel not found */ - nla_for_each_nested(attr, - info->attrs[NL80211_ATTR_SCAN_FREQUENCIES], - tmp) { - struct ieee80211_channel *chan; - - chan = ieee80211_get_channel(wiphy, nla_get_u32(attr)); - - if (!chan) { - err = -EINVAL; - goto out_free; - } - - /* ignore disabled channels */ - if (chan->flags & IEEE80211_CHAN_DISABLED) - continue; - - request->channels[i] = chan; - i++; - } - } else { - /* all channels */ - for (band = 0; band < IEEE80211_NUM_BANDS; band++) { - int j; - if (!wiphy->bands[band]) - continue; - for (j = 0; j < wiphy->bands[band]->n_channels; j++) { - struct ieee80211_channel *chan; - - chan = &wiphy->bands[band]->channels[j]; - - if (chan->flags & IEEE80211_CHAN_DISABLED) - continue; - - request->channels[i] = chan; - i++; - } - } - } - - if (!i) { - err = -EINVAL; - goto out_free; - } - - request->n_channels = i; - - i = 0; - if (info->attrs[NL80211_ATTR_SCAN_SSIDS]) { - nla_for_each_nested(attr, info->attrs[NL80211_ATTR_SCAN_SSIDS], - tmp) { - if (nla_len(attr) > IEEE80211_MAX_SSID_LEN) { - err = -EINVAL; - goto out_free; - } - request->ssids[i].ssid_len = nla_len(attr); - memcpy(request->ssids[i].ssid, nla_data(attr), - nla_len(attr)); - i++; - } - } - - i = 0; - if (info->attrs[NL80211_ATTR_SCHED_SCAN_MATCH]) { - nla_for_each_nested(attr, - info->attrs[NL80211_ATTR_SCHED_SCAN_MATCH], - tmp) { - struct nlattr *ssid; - - nla_parse(tb, NL80211_SCHED_SCAN_MATCH_ATTR_MAX, - nla_data(attr), nla_len(attr), - nl80211_match_policy); - ssid = tb[NL80211_ATTR_SCHED_SCAN_MATCH_SSID]; - if (ssid) { - if (nla_len(ssid) > IEEE80211_MAX_SSID_LEN) { - err = -EINVAL; - goto out_free; - } - memcpy(request->match_sets[i].ssid.ssid, - nla_data(ssid), nla_len(ssid)); - request->match_sets[i].ssid.ssid_len = - nla_len(ssid); - } - i++; - } - } - - if (info->attrs[NL80211_ATTR_IE]) { - request->ie_len = nla_len(info->attrs[NL80211_ATTR_IE]); - memcpy((void *)request->ie, - nla_data(info->attrs[NL80211_ATTR_IE]), - request->ie_len); - } - - request->dev = dev; - request->wiphy = &rdev->wiphy; - request->interval = interval; - - err = rdev->ops->sched_scan_start(&rdev->wiphy, dev, request); - if (!err) { - rdev->sched_scan_req = request; - nl80211_send_sched_scan(rdev, dev, - NL80211_CMD_START_SCHED_SCAN); - goto out; - } - -out_free: - kfree(request); -out: - mutex_unlock(&rdev->sched_scan_mtx); - return err; -} - -static int nl80211_stop_sched_scan(struct sk_buff *skb, - struct genl_info *info) -{ - struct cfg80211_registered_device *rdev = info->user_ptr[0]; - int err; - - if (!(rdev->wiphy.flags & WIPHY_FLAG_SUPPORTS_SCHED_SCAN) || - !rdev->ops->sched_scan_stop) - return -EOPNOTSUPP; - - mutex_lock(&rdev->sched_scan_mtx); - err = __cfg80211_stop_sched_scan(rdev, false); - mutex_unlock(&rdev->sched_scan_mtx); - - return err; -} - -static int nl80211_send_bss(struct sk_buff *msg, struct netlink_callback *cb, - u32 seq, int flags, - struct cfg80211_registered_device *rdev, - struct wireless_dev *wdev, - struct cfg80211_internal_bss *intbss) -{ - struct cfg80211_bss *res = &intbss->pub; - void *hdr; - struct nlattr *bss; - - ASSERT_WDEV_LOCK(wdev); - - hdr = nl80211hdr_put(msg, NETLINK_CB(cb->skb).pid, seq, flags, - NL80211_CMD_NEW_SCAN_RESULTS); - if (!hdr) - return -1; - - genl_dump_check_consistent(cb, hdr, &nl80211_fam); - - NLA_PUT_U32(msg, NL80211_ATTR_GENERATION, rdev->bss_generation); - NLA_PUT_U32(msg, NL80211_ATTR_IFINDEX, wdev->netdev->ifindex); - - bss = nla_nest_start(msg, NL80211_ATTR_BSS); - if (!bss) - goto nla_put_failure; - if (!is_zero_ether_addr(res->bssid)) - NLA_PUT(msg, NL80211_BSS_BSSID, ETH_ALEN, res->bssid); - if (res->information_elements && res->len_information_elements) - NLA_PUT(msg, NL80211_BSS_INFORMATION_ELEMENTS, - res->len_information_elements, - res->information_elements); - if (res->beacon_ies && res->len_beacon_ies && - res->beacon_ies != res->information_elements) - NLA_PUT(msg, NL80211_BSS_BEACON_IES, - res->len_beacon_ies, res->beacon_ies); - if (res->tsf) - NLA_PUT_U64(msg, NL80211_BSS_TSF, res->tsf); - if (res->beacon_interval) - NLA_PUT_U16(msg, NL80211_BSS_BEACON_INTERVAL, res->beacon_interval); - NLA_PUT_U16(msg, NL80211_BSS_CAPABILITY, res->capability); - NLA_PUT_U32(msg, NL80211_BSS_FREQUENCY, res->channel->center_freq); - NLA_PUT_U32(msg, NL80211_BSS_SEEN_MS_AGO, - jiffies_to_msecs(jiffies - intbss->ts)); - - switch (rdev->wiphy.signal_type) { - case CFG80211_SIGNAL_TYPE_MBM: - NLA_PUT_U32(msg, NL80211_BSS_SIGNAL_MBM, res->signal); - break; - case CFG80211_SIGNAL_TYPE_UNSPEC: - NLA_PUT_U8(msg, NL80211_BSS_SIGNAL_UNSPEC, res->signal); - break; - default: - break; - } - - switch (wdev->iftype) { - case NL80211_IFTYPE_P2P_CLIENT: - case NL80211_IFTYPE_STATION: - if (intbss == wdev->current_bss) - NLA_PUT_U32(msg, NL80211_BSS_STATUS, - NL80211_BSS_STATUS_ASSOCIATED); - break; - case NL80211_IFTYPE_ADHOC: - if (intbss == wdev->current_bss) - NLA_PUT_U32(msg, NL80211_BSS_STATUS, - NL80211_BSS_STATUS_IBSS_JOINED); - break; - default: - break; - } - - nla_nest_end(msg, bss); - - return genlmsg_end(msg, hdr); - - nla_put_failure: - genlmsg_cancel(msg, hdr); - return -EMSGSIZE; -} - -static int nl80211_dump_scan(struct sk_buff *skb, - struct netlink_callback *cb) -{ - struct cfg80211_registered_device *rdev; - struct net_device *dev; - struct cfg80211_internal_bss *scan; - struct wireless_dev *wdev; - int start = cb->args[1], idx = 0; - int err; - - err = nl80211_prepare_netdev_dump(skb, cb, &rdev, &dev); - if (err) - return err; - - wdev = dev->ieee80211_ptr; - - wdev_lock(wdev); - spin_lock_bh(&rdev->bss_lock); - cfg80211_bss_expire(rdev); - -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,1,0)) - cb->seq = rdev->bss_generation; -#endif - - list_for_each_entry(scan, &rdev->bss_list, list) { - if (++idx <= start) - continue; - if (nl80211_send_bss(skb, cb, - cb->nlh->nlmsg_seq, NLM_F_MULTI, - rdev, wdev, scan) < 0) { - idx--; - break; - } - } - - spin_unlock_bh(&rdev->bss_lock); - wdev_unlock(wdev); - - cb->args[1] = idx; - nl80211_finish_netdev_dump(rdev); - - return skb->len; -} - -static int nl80211_send_survey(struct sk_buff *msg, u32 pid, u32 seq, - int flags, struct net_device *dev, - struct survey_info *survey) -{ - void *hdr; - struct nlattr *infoattr; - - hdr = nl80211hdr_put(msg, pid, seq, flags, - NL80211_CMD_NEW_SURVEY_RESULTS); - if (!hdr) - return -ENOMEM; - - NLA_PUT_U32(msg, NL80211_ATTR_IFINDEX, dev->ifindex); - - infoattr = nla_nest_start(msg, NL80211_ATTR_SURVEY_INFO); - if (!infoattr) - goto nla_put_failure; - - NLA_PUT_U32(msg, NL80211_SURVEY_INFO_FREQUENCY, - survey->channel->center_freq); - if (survey->filled & SURVEY_INFO_NOISE_DBM) - NLA_PUT_U8(msg, NL80211_SURVEY_INFO_NOISE, - survey->noise); - if (survey->filled & SURVEY_INFO_IN_USE) - NLA_PUT_FLAG(msg, NL80211_SURVEY_INFO_IN_USE); - if (survey->filled & SURVEY_INFO_CHANNEL_TIME) - NLA_PUT_U64(msg, NL80211_SURVEY_INFO_CHANNEL_TIME, - survey->channel_time); - if (survey->filled & SURVEY_INFO_CHANNEL_TIME_BUSY) - NLA_PUT_U64(msg, NL80211_SURVEY_INFO_CHANNEL_TIME_BUSY, - survey->channel_time_busy); - if (survey->filled & SURVEY_INFO_CHANNEL_TIME_EXT_BUSY) - NLA_PUT_U64(msg, NL80211_SURVEY_INFO_CHANNEL_TIME_EXT_BUSY, - survey->channel_time_ext_busy); - if (survey->filled & SURVEY_INFO_CHANNEL_TIME_RX) - NLA_PUT_U64(msg, NL80211_SURVEY_INFO_CHANNEL_TIME_RX, - survey->channel_time_rx); - if (survey->filled & SURVEY_INFO_CHANNEL_TIME_TX) - NLA_PUT_U64(msg, NL80211_SURVEY_INFO_CHANNEL_TIME_TX, - survey->channel_time_tx); - - nla_nest_end(msg, infoattr); - - return genlmsg_end(msg, hdr); - - nla_put_failure: - genlmsg_cancel(msg, hdr); - return -EMSGSIZE; -} - -static int nl80211_dump_survey(struct sk_buff *skb, - struct netlink_callback *cb) -{ - struct survey_info survey; - struct cfg80211_registered_device *dev; - struct net_device *netdev; - int survey_idx = cb->args[1]; - int res; - - res = nl80211_prepare_netdev_dump(skb, cb, &dev, &netdev); - if (res) - return res; - - if (!dev->ops->dump_survey) { - res = -EOPNOTSUPP; - goto out_err; - } - - while (1) { - struct ieee80211_channel *chan; - - res = dev->ops->dump_survey(&dev->wiphy, netdev, survey_idx, - &survey); - if (res == -ENOENT) - break; - if (res) - goto out_err; - - /* Survey without a channel doesn't make sense */ - if (!survey.channel) { - res = -EINVAL; - goto out; - } - - chan = ieee80211_get_channel(&dev->wiphy, - survey.channel->center_freq); - if (!chan || chan->flags & IEEE80211_CHAN_DISABLED) { - survey_idx++; - continue; - } - - if (nl80211_send_survey(skb, - NETLINK_CB(cb->skb).pid, - cb->nlh->nlmsg_seq, NLM_F_MULTI, - netdev, - &survey) < 0) - goto out; - survey_idx++; - } - - out: - cb->args[1] = survey_idx; - res = skb->len; - out_err: - nl80211_finish_netdev_dump(dev); - return res; -} - -static bool nl80211_valid_auth_type(enum nl80211_auth_type auth_type) -{ - return auth_type <= NL80211_AUTHTYPE_MAX; -} - -static bool nl80211_valid_wpa_versions(u32 wpa_versions) -{ - return !(wpa_versions & ~(NL80211_WPA_VERSION_1 | - NL80211_WPA_VERSION_2)); -} - -static int nl80211_authenticate(struct sk_buff *skb, struct genl_info *info) -{ - struct cfg80211_registered_device *rdev = info->user_ptr[0]; - struct net_device *dev = info->user_ptr[1]; - struct ieee80211_channel *chan; - const u8 *bssid, *ssid, *ie = NULL; - int err, ssid_len, ie_len = 0; - enum nl80211_auth_type auth_type; - struct key_parse key; - bool local_state_change; - - if (!is_valid_ie_attr(info->attrs[NL80211_ATTR_IE])) - return -EINVAL; - - if (!info->attrs[NL80211_ATTR_MAC]) - return -EINVAL; - - if (!info->attrs[NL80211_ATTR_AUTH_TYPE]) - return -EINVAL; - - if (!info->attrs[NL80211_ATTR_SSID]) - return -EINVAL; - - if (!info->attrs[NL80211_ATTR_WIPHY_FREQ]) - return -EINVAL; - - err = nl80211_parse_key(info, &key); - if (err) - return err; - - if (key.idx >= 0) { - if (key.type != -1 && key.type != NL80211_KEYTYPE_GROUP) - return -EINVAL; - if (!key.p.key || !key.p.key_len) - return -EINVAL; - if ((key.p.cipher != WLAN_CIPHER_SUITE_WEP40 || - key.p.key_len != WLAN_KEY_LEN_WEP40) && - (key.p.cipher != WLAN_CIPHER_SUITE_WEP104 || - key.p.key_len != WLAN_KEY_LEN_WEP104)) - return -EINVAL; - if (key.idx > 4) - return -EINVAL; - } else { - key.p.key_len = 0; - key.p.key = NULL; - } - - if (key.idx >= 0) { - int i; - bool ok = false; - for (i = 0; i < rdev->wiphy.n_cipher_suites; i++) { - if (key.p.cipher == rdev->wiphy.cipher_suites[i]) { - ok = true; - break; - } - } - if (!ok) - return -EINVAL; - } - - if (!rdev->ops->auth) - return -EOPNOTSUPP; - - if (dev->ieee80211_ptr->iftype != NL80211_IFTYPE_STATION && - dev->ieee80211_ptr->iftype != NL80211_IFTYPE_P2P_CLIENT) - return -EOPNOTSUPP; - - bssid = nla_data(info->attrs[NL80211_ATTR_MAC]); - chan = ieee80211_get_channel(&rdev->wiphy, - nla_get_u32(info->attrs[NL80211_ATTR_WIPHY_FREQ])); - if (!chan || (chan->flags & IEEE80211_CHAN_DISABLED)) - return -EINVAL; - - ssid = nla_data(info->attrs[NL80211_ATTR_SSID]); - ssid_len = nla_len(info->attrs[NL80211_ATTR_SSID]); - - if (info->attrs[NL80211_ATTR_IE]) { - ie = nla_data(info->attrs[NL80211_ATTR_IE]); - ie_len = nla_len(info->attrs[NL80211_ATTR_IE]); - } - - auth_type = nla_get_u32(info->attrs[NL80211_ATTR_AUTH_TYPE]); - if (!nl80211_valid_auth_type(auth_type)) - return -EINVAL; - - local_state_change = !!info->attrs[NL80211_ATTR_LOCAL_STATE_CHANGE]; - - /* - * Since we no longer track auth state, ignore - * requests to only change local state. - */ - if (local_state_change) - return 0; - - return cfg80211_mlme_auth(rdev, dev, chan, auth_type, bssid, - ssid, ssid_len, ie, ie_len, - key.p.key, key.p.key_len, key.idx); -} - -static int nl80211_crypto_settings(struct cfg80211_registered_device *rdev, - struct genl_info *info, - struct cfg80211_crypto_settings *settings, - int cipher_limit) -{ - memset(settings, 0, sizeof(*settings)); - - settings->control_port = info->attrs[NL80211_ATTR_CONTROL_PORT]; - - if (info->attrs[NL80211_ATTR_CONTROL_PORT_ETHERTYPE]) { - u16 proto; - proto = nla_get_u16( - info->attrs[NL80211_ATTR_CONTROL_PORT_ETHERTYPE]); - settings->control_port_ethertype = cpu_to_be16(proto); - if (!(rdev->wiphy.flags & WIPHY_FLAG_CONTROL_PORT_PROTOCOL) && - proto != ETH_P_PAE) - return -EINVAL; - if (info->attrs[NL80211_ATTR_CONTROL_PORT_NO_ENCRYPT]) - settings->control_port_no_encrypt = true; - } else - settings->control_port_ethertype = cpu_to_be16(ETH_P_PAE); - - if (info->attrs[NL80211_ATTR_CIPHER_SUITES_PAIRWISE]) { - void *data; - int len, i; - - data = nla_data(info->attrs[NL80211_ATTR_CIPHER_SUITES_PAIRWISE]); - len = nla_len(info->attrs[NL80211_ATTR_CIPHER_SUITES_PAIRWISE]); - settings->n_ciphers_pairwise = len / sizeof(u32); - - if (len % sizeof(u32)) - return -EINVAL; - - if (settings->n_ciphers_pairwise > cipher_limit) - return -EINVAL; - - memcpy(settings->ciphers_pairwise, data, len); - - for (i = 0; i < settings->n_ciphers_pairwise; i++) - if (!cfg80211_supported_cipher_suite( - &rdev->wiphy, - settings->ciphers_pairwise[i])) - return -EINVAL; - } - - if (info->attrs[NL80211_ATTR_CIPHER_SUITE_GROUP]) { - settings->cipher_group = - nla_get_u32(info->attrs[NL80211_ATTR_CIPHER_SUITE_GROUP]); - if (!cfg80211_supported_cipher_suite(&rdev->wiphy, - settings->cipher_group)) - return -EINVAL; - } - - if (info->attrs[NL80211_ATTR_WPA_VERSIONS]) { - settings->wpa_versions = - nla_get_u32(info->attrs[NL80211_ATTR_WPA_VERSIONS]); - if (!nl80211_valid_wpa_versions(settings->wpa_versions)) - return -EINVAL; - } - - if (info->attrs[NL80211_ATTR_AKM_SUITES]) { - void *data; - int len; - - data = nla_data(info->attrs[NL80211_ATTR_AKM_SUITES]); - len = nla_len(info->attrs[NL80211_ATTR_AKM_SUITES]); - settings->n_akm_suites = len / sizeof(u32); - - if (len % sizeof(u32)) - return -EINVAL; - - if (settings->n_akm_suites > NL80211_MAX_NR_AKM_SUITES) - return -EINVAL; - - memcpy(settings->akm_suites, data, len); - } - - return 0; -} - -static int nl80211_associate(struct sk_buff *skb, struct genl_info *info) -{ - struct cfg80211_registered_device *rdev = info->user_ptr[0]; - struct net_device *dev = info->user_ptr[1]; - struct cfg80211_crypto_settings crypto; - struct ieee80211_channel *chan; - const u8 *bssid, *ssid, *ie = NULL, *prev_bssid = NULL; - int err, ssid_len, ie_len = 0; - bool use_mfp = false; - u32 flags = 0; - struct ieee80211_ht_cap *ht_capa = NULL; - struct ieee80211_ht_cap *ht_capa_mask = NULL; - - if (!is_valid_ie_attr(info->attrs[NL80211_ATTR_IE])) - return -EINVAL; - - if (!info->attrs[NL80211_ATTR_MAC] || - !info->attrs[NL80211_ATTR_SSID] || - !info->attrs[NL80211_ATTR_WIPHY_FREQ]) // JHNOTE: should maybe add the OCB here...as we would directly return... - return -EINVAL; - - if (!rdev->ops->assoc) - return -EOPNOTSUPP; - - if (dev->ieee80211_ptr->iftype != NL80211_IFTYPE_STATION && - dev->ieee80211_ptr->iftype != NL80211_IFTYPE_P2P_CLIENT) - return -EOPNOTSUPP; - - bssid = nla_data(info->attrs[NL80211_ATTR_MAC]); - - chan = ieee80211_get_channel(&rdev->wiphy, - nla_get_u32(info->attrs[NL80211_ATTR_WIPHY_FREQ])); - if (!chan || (chan->flags & IEEE80211_CHAN_DISABLED)) - return -EINVAL; - - ssid = nla_data(info->attrs[NL80211_ATTR_SSID]); - ssid_len = nla_len(info->attrs[NL80211_ATTR_SSID]); - - if (info->attrs[NL80211_ATTR_IE]) { - ie = nla_data(info->attrs[NL80211_ATTR_IE]); - ie_len = nla_len(info->attrs[NL80211_ATTR_IE]); - } - - if (info->attrs[NL80211_ATTR_USE_MFP]) { - enum nl80211_mfp mfp = - nla_get_u32(info->attrs[NL80211_ATTR_USE_MFP]); - if (mfp == NL80211_MFP_REQUIRED) - use_mfp = true; - else if (mfp != NL80211_MFP_NO) - return -EINVAL; - } - - if (info->attrs[NL80211_ATTR_PREV_BSSID]) - prev_bssid = nla_data(info->attrs[NL80211_ATTR_PREV_BSSID]); - - if (nla_get_flag(info->attrs[NL80211_ATTR_DISABLE_HT])) - flags |= ASSOC_REQ_DISABLE_HT; - - if (info->attrs[NL80211_ATTR_HT_CAPABILITY_MASK]) - ht_capa_mask = - nla_data(info->attrs[NL80211_ATTR_HT_CAPABILITY_MASK]); - - if (info->attrs[NL80211_ATTR_HT_CAPABILITY]) { - if (!ht_capa_mask) - return -EINVAL; - ht_capa = nla_data(info->attrs[NL80211_ATTR_HT_CAPABILITY]); - } - - err = nl80211_crypto_settings(rdev, info, &crypto, 1); - if (!err) - err = cfg80211_mlme_assoc(rdev, dev, chan, bssid, prev_bssid, - ssid, ssid_len, ie, ie_len, use_mfp, - &crypto, flags, ht_capa, - ht_capa_mask); - - return err; -} - -static int nl80211_deauthenticate(struct sk_buff *skb, struct genl_info *info) -{ - struct cfg80211_registered_device *rdev = info->user_ptr[0]; - struct net_device *dev = info->user_ptr[1]; - const u8 *ie = NULL, *bssid; - int ie_len = 0; - u16 reason_code; - bool local_state_change; - - if (!is_valid_ie_attr(info->attrs[NL80211_ATTR_IE])) - return -EINVAL; - - if (!info->attrs[NL80211_ATTR_MAC]) - return -EINVAL; - - if (!info->attrs[NL80211_ATTR_REASON_CODE]) - return -EINVAL; - - if (!rdev->ops->deauth) - return -EOPNOTSUPP; - - if (dev->ieee80211_ptr->iftype != NL80211_IFTYPE_STATION && - dev->ieee80211_ptr->iftype != NL80211_IFTYPE_P2P_CLIENT) - return -EOPNOTSUPP; - - bssid = nla_data(info->attrs[NL80211_ATTR_MAC]); - - reason_code = nla_get_u16(info->attrs[NL80211_ATTR_REASON_CODE]); - if (reason_code == 0) { - /* Reason Code 0 is reserved */ - return -EINVAL; - } - - if (info->attrs[NL80211_ATTR_IE]) { - ie = nla_data(info->attrs[NL80211_ATTR_IE]); - ie_len = nla_len(info->attrs[NL80211_ATTR_IE]); - } - - local_state_change = !!info->attrs[NL80211_ATTR_LOCAL_STATE_CHANGE]; - - return cfg80211_mlme_deauth(rdev, dev, bssid, ie, ie_len, reason_code, - local_state_change); -} - -static int nl80211_disassociate(struct sk_buff *skb, struct genl_info *info) -{ - struct cfg80211_registered_device *rdev = info->user_ptr[0]; - struct net_device *dev = info->user_ptr[1]; - const u8 *ie = NULL, *bssid; - int ie_len = 0; - u16 reason_code; - bool local_state_change; - - if (!is_valid_ie_attr(info->attrs[NL80211_ATTR_IE])) - return -EINVAL; - - if (!info->attrs[NL80211_ATTR_MAC]) - return -EINVAL; - - if (!info->attrs[NL80211_ATTR_REASON_CODE]) - return -EINVAL; - - if (!rdev->ops->disassoc) - return -EOPNOTSUPP; - - if (dev->ieee80211_ptr->iftype != NL80211_IFTYPE_STATION && - dev->ieee80211_ptr->iftype != NL80211_IFTYPE_P2P_CLIENT) - return -EOPNOTSUPP; - - bssid = nla_data(info->attrs[NL80211_ATTR_MAC]); - - reason_code = nla_get_u16(info->attrs[NL80211_ATTR_REASON_CODE]); - if (reason_code == 0) { - /* Reason Code 0 is reserved */ - return -EINVAL; - } - - if (info->attrs[NL80211_ATTR_IE]) { - ie = nla_data(info->attrs[NL80211_ATTR_IE]); - ie_len = nla_len(info->attrs[NL80211_ATTR_IE]); - } - - local_state_change = !!info->attrs[NL80211_ATTR_LOCAL_STATE_CHANGE]; - - return cfg80211_mlme_disassoc(rdev, dev, bssid, ie, ie_len, reason_code, - local_state_change); -} - -static bool -nl80211_parse_mcast_rate(struct cfg80211_registered_device *rdev, - int mcast_rate[IEEE80211_NUM_BANDS], - int rateval) -{ - struct wiphy *wiphy = &rdev->wiphy; - bool found = false; - int band, i; - - for (band = 0; band < IEEE80211_NUM_BANDS; band++) { - struct ieee80211_supported_band *sband; - - sband = wiphy->bands[band]; - if (!sband) - continue; - - for (i = 0; i < sband->n_bitrates; i++) { - if (sband->bitrates[i].bitrate == rateval) { - mcast_rate[band] = i + 1; - found = true; - break; - } - } - } - - return found; -} - -static int nl80211_join_ibss(struct sk_buff *skb, struct genl_info *info) -{ - struct cfg80211_registered_device *rdev = info->user_ptr[0]; - struct net_device *dev = info->user_ptr[1]; - struct cfg80211_ibss_params ibss; - struct wiphy *wiphy; - struct cfg80211_cached_keys *connkeys = NULL; - int err; - - memset(&ibss, 0, sizeof(ibss)); - - if (!is_valid_ie_attr(info->attrs[NL80211_ATTR_IE])) - return -EINVAL; - - if (!info->attrs[NL80211_ATTR_WIPHY_FREQ] || - !info->attrs[NL80211_ATTR_SSID] || - !nla_len(info->attrs[NL80211_ATTR_SSID])) - return -EINVAL; - - ibss.beacon_interval = 100; - - if (info->attrs[NL80211_ATTR_BEACON_INTERVAL]) { - ibss.beacon_interval = - nla_get_u32(info->attrs[NL80211_ATTR_BEACON_INTERVAL]); - if (ibss.beacon_interval < 1 || ibss.beacon_interval > 10000) - return -EINVAL; - } - - if (!rdev->ops->join_ibss) - return -EOPNOTSUPP; - - if (dev->ieee80211_ptr->iftype != NL80211_IFTYPE_ADHOC) - return -EOPNOTSUPP; - - wiphy = &rdev->wiphy; - - if (info->attrs[NL80211_ATTR_MAC]) { - ibss.bssid = nla_data(info->attrs[NL80211_ATTR_MAC]); - - if (!is_valid_ether_addr(ibss.bssid)) - return -EINVAL; - } - ibss.ssid = nla_data(info->attrs[NL80211_ATTR_SSID]); - ibss.ssid_len = nla_len(info->attrs[NL80211_ATTR_SSID]); - - if (info->attrs[NL80211_ATTR_IE]) { - ibss.ie = nla_data(info->attrs[NL80211_ATTR_IE]); - ibss.ie_len = nla_len(info->attrs[NL80211_ATTR_IE]); - } - - if (info->attrs[NL80211_ATTR_WIPHY_CHANNEL_TYPE]) { - enum nl80211_channel_type channel_type; - - channel_type = nla_get_u32( - info->attrs[NL80211_ATTR_WIPHY_CHANNEL_TYPE]); - if (channel_type != NL80211_CHAN_NO_HT && - channel_type != NL80211_CHAN_HT20 && - channel_type != NL80211_CHAN_HT40MINUS && - channel_type != NL80211_CHAN_HT40PLUS) - return -EINVAL; - - if (channel_type != NL80211_CHAN_NO_HT && - !(wiphy->features & NL80211_FEATURE_HT_IBSS)) - return -EINVAL; - - ibss.channel_type = channel_type; - } else { - ibss.channel_type = NL80211_CHAN_NO_HT; - } - - ibss.channel = rdev_freq_to_chan(rdev, - nla_get_u32(info->attrs[NL80211_ATTR_WIPHY_FREQ]), - ibss.channel_type); - if (!ibss.channel || - ibss.channel->flags & IEEE80211_CHAN_NO_IBSS || - ibss.channel->flags & IEEE80211_CHAN_DISABLED) - return -EINVAL; - - /* Both channels should be able to initiate communication */ - if ((ibss.channel_type == NL80211_CHAN_HT40PLUS || - ibss.channel_type == NL80211_CHAN_HT40MINUS) && - !cfg80211_can_beacon_sec_chan(&rdev->wiphy, ibss.channel, - ibss.channel_type)) - return -EINVAL; - - ibss.channel_fixed = !!info->attrs[NL80211_ATTR_FREQ_FIXED]; - ibss.privacy = !!info->attrs[NL80211_ATTR_PRIVACY]; - - if (info->attrs[NL80211_ATTR_BSS_BASIC_RATES]) { - u8 *rates = - nla_data(info->attrs[NL80211_ATTR_BSS_BASIC_RATES]); - int n_rates = - nla_len(info->attrs[NL80211_ATTR_BSS_BASIC_RATES]); - struct ieee80211_supported_band *sband = - wiphy->bands[ibss.channel->band]; - - err = ieee80211_get_ratemask(sband, rates, n_rates, - &ibss.basic_rates); - if (err) - return err; - } - - if (info->attrs[NL80211_ATTR_MCAST_RATE] && - !nl80211_parse_mcast_rate(rdev, ibss.mcast_rate, - nla_get_u32(info->attrs[NL80211_ATTR_MCAST_RATE]))) - return -EINVAL; - - if (ibss.privacy && info->attrs[NL80211_ATTR_KEYS]) { - connkeys = nl80211_parse_connkeys(rdev, - info->attrs[NL80211_ATTR_KEYS]); - if (IS_ERR(connkeys)) - return PTR_ERR(connkeys); - } - - ibss.control_port = - nla_get_flag(info->attrs[NL80211_ATTR_CONTROL_PORT]); - - err = cfg80211_join_ibss(rdev, dev, &ibss, connkeys); - if (err) - kfree(connkeys); - return err; -} - -static int nl80211_leave_ibss(struct sk_buff *skb, struct genl_info *info) -{ - struct cfg80211_registered_device *rdev = info->user_ptr[0]; - struct net_device *dev = info->user_ptr[1]; - - if (!rdev->ops->leave_ibss) - return -EOPNOTSUPP; - - if (dev->ieee80211_ptr->iftype != NL80211_IFTYPE_ADHOC) - return -EOPNOTSUPP; - - return cfg80211_leave_ibss(rdev, dev, false); -} - -#ifdef CONFIG_NL80211_TESTMODE -static struct genl_multicast_group nl80211_testmode_mcgrp = { - .name = "testmode", -}; - -static int nl80211_testmode_do(struct sk_buff *skb, struct genl_info *info) -{ - struct cfg80211_registered_device *rdev = info->user_ptr[0]; - int err; - - if (!info->attrs[NL80211_ATTR_TESTDATA]) - return -EINVAL; - - err = -EOPNOTSUPP; - if (rdev->ops->testmode_cmd) { - rdev->testmode_info = info; - err = rdev->ops->testmode_cmd(&rdev->wiphy, - nla_data(info->attrs[NL80211_ATTR_TESTDATA]), - nla_len(info->attrs[NL80211_ATTR_TESTDATA])); - rdev->testmode_info = NULL; - } - - return err; -} - -static int nl80211_testmode_dump(struct sk_buff *skb, - struct netlink_callback *cb) -{ - struct cfg80211_registered_device *rdev; - int err; - long phy_idx; - void *data = NULL; - int data_len = 0; - - if (cb->args[0]) { - /* - * 0 is a valid index, but not valid for args[0], - * so we need to offset by 1. - */ - phy_idx = cb->args[0] - 1; - } else { - err = nlmsg_parse(cb->nlh, GENL_HDRLEN + nl80211_fam.hdrsize, - nl80211_fam.attrbuf, nl80211_fam.maxattr, - nl80211_policy); - if (err) - return err; - if (nl80211_fam.attrbuf[NL80211_ATTR_WIPHY]) { - phy_idx = nla_get_u32( - nl80211_fam.attrbuf[NL80211_ATTR_WIPHY]); - } else { - struct net_device *netdev; - - err = get_rdev_dev_by_ifindex(sock_net(skb->sk), - nl80211_fam.attrbuf, - &rdev, &netdev); - if (err) - return err; - dev_put(netdev); - phy_idx = rdev->wiphy_idx; - cfg80211_unlock_rdev(rdev); - } - if (nl80211_fam.attrbuf[NL80211_ATTR_TESTDATA]) - cb->args[1] = - (long)nl80211_fam.attrbuf[NL80211_ATTR_TESTDATA]; - } - - if (cb->args[1]) { - data = nla_data((void *)cb->args[1]); - data_len = nla_len((void *)cb->args[1]); - } - - mutex_lock(&cfg80211_mutex); - rdev = cfg80211_rdev_by_wiphy_idx(phy_idx); - if (!rdev) { - mutex_unlock(&cfg80211_mutex); - return -ENOENT; - } - cfg80211_lock_rdev(rdev); - mutex_unlock(&cfg80211_mutex); - - if (!rdev->ops->testmode_dump) { - err = -EOPNOTSUPP; - goto out_err; - } - - while (1) { - void *hdr = nl80211hdr_put(skb, NETLINK_CB(cb->skb).pid, - cb->nlh->nlmsg_seq, NLM_F_MULTI, - NL80211_CMD_TESTMODE); - struct nlattr *tmdata; - - if (nla_put_u32(skb, NL80211_ATTR_WIPHY, phy_idx) < 0) { - genlmsg_cancel(skb, hdr); - break; - } - - tmdata = nla_nest_start(skb, NL80211_ATTR_TESTDATA); - if (!tmdata) { - genlmsg_cancel(skb, hdr); - break; - } - err = rdev->ops->testmode_dump(&rdev->wiphy, skb, cb, - data, data_len); - nla_nest_end(skb, tmdata); - - if (err == -ENOBUFS || err == -ENOENT) { - genlmsg_cancel(skb, hdr); - break; - } else if (err) { - genlmsg_cancel(skb, hdr); - goto out_err; - } - - genlmsg_end(skb, hdr); - } - - err = skb->len; - /* see above */ - cb->args[0] = phy_idx + 1; - out_err: - cfg80211_unlock_rdev(rdev); - return err; -} - -static struct sk_buff * -__cfg80211_testmode_alloc_skb(struct cfg80211_registered_device *rdev, - int approxlen, u32 pid, u32 seq, gfp_t gfp) -{ - struct sk_buff *skb; - void *hdr; - struct nlattr *data; - - skb = nlmsg_new(approxlen + 100, gfp); - if (!skb) - return NULL; - - hdr = nl80211hdr_put(skb, pid, seq, 0, NL80211_CMD_TESTMODE); - if (!hdr) { - kfree_skb(skb); - return NULL; - } - - NLA_PUT_U32(skb, NL80211_ATTR_WIPHY, rdev->wiphy_idx); - data = nla_nest_start(skb, NL80211_ATTR_TESTDATA); - - ((void **)skb->cb)[0] = rdev; - ((void **)skb->cb)[1] = hdr; - ((void **)skb->cb)[2] = data; - - return skb; - - nla_put_failure: - kfree_skb(skb); - return NULL; -} - -struct sk_buff *cfg80211_testmode_alloc_reply_skb(struct wiphy *wiphy, - int approxlen) -{ - struct cfg80211_registered_device *rdev = wiphy_to_dev(wiphy); - - if (WARN_ON(!rdev->testmode_info)) - return NULL; - - return __cfg80211_testmode_alloc_skb(rdev, approxlen, - rdev->testmode_info->snd_pid, - rdev->testmode_info->snd_seq, - GFP_KERNEL); -} -EXPORT_SYMBOL(cfg80211_testmode_alloc_reply_skb); - -int cfg80211_testmode_reply(struct sk_buff *skb) -{ - struct cfg80211_registered_device *rdev = ((void **)skb->cb)[0]; - void *hdr = ((void **)skb->cb)[1]; - struct nlattr *data = ((void **)skb->cb)[2]; - - if (WARN_ON(!rdev->testmode_info)) { - kfree_skb(skb); - return -EINVAL; - } - - nla_nest_end(skb, data); - genlmsg_end(skb, hdr); - return genlmsg_reply(skb, rdev->testmode_info); -} -EXPORT_SYMBOL(cfg80211_testmode_reply); - -struct sk_buff *cfg80211_testmode_alloc_event_skb(struct wiphy *wiphy, - int approxlen, gfp_t gfp) -{ - struct cfg80211_registered_device *rdev = wiphy_to_dev(wiphy); - - return __cfg80211_testmode_alloc_skb(rdev, approxlen, 0, 0, gfp); -} -EXPORT_SYMBOL(cfg80211_testmode_alloc_event_skb); - -void cfg80211_testmode_event(struct sk_buff *skb, gfp_t gfp) -{ - void *hdr = ((void **)skb->cb)[1]; - struct nlattr *data = ((void **)skb->cb)[2]; - - nla_nest_end(skb, data); - genlmsg_end(skb, hdr); - genlmsg_multicast(skb, 0, nl80211_testmode_mcgrp.id, gfp); -} -EXPORT_SYMBOL(cfg80211_testmode_event); -#endif - -static int nl80211_connect(struct sk_buff *skb, struct genl_info *info) -{ - struct cfg80211_registered_device *rdev = info->user_ptr[0]; - struct net_device *dev = info->user_ptr[1]; - struct cfg80211_connect_params connect; - struct wiphy *wiphy; - struct cfg80211_cached_keys *connkeys = NULL; - int err; - - memset(&connect, 0, sizeof(connect)); - - if (!is_valid_ie_attr(info->attrs[NL80211_ATTR_IE])) - return -EINVAL; - - if (!info->attrs[NL80211_ATTR_SSID] || - !nla_len(info->attrs[NL80211_ATTR_SSID])) - return -EINVAL; - - if (info->attrs[NL80211_ATTR_AUTH_TYPE]) { - connect.auth_type = - nla_get_u32(info->attrs[NL80211_ATTR_AUTH_TYPE]); - if (!nl80211_valid_auth_type(connect.auth_type)) - return -EINVAL; - } else - connect.auth_type = NL80211_AUTHTYPE_AUTOMATIC; - - connect.privacy = info->attrs[NL80211_ATTR_PRIVACY]; - - err = nl80211_crypto_settings(rdev, info, &connect.crypto, - NL80211_MAX_NR_CIPHER_SUITES); - if (err) - return err; - - if (dev->ieee80211_ptr->iftype != NL80211_IFTYPE_STATION && - dev->ieee80211_ptr->iftype != NL80211_IFTYPE_P2P_CLIENT) - return -EOPNOTSUPP; - - wiphy = &rdev->wiphy; - - connect.bg_scan_period = -1; - if (info->attrs[NL80211_ATTR_BG_SCAN_PERIOD] && - (wiphy->flags & WIPHY_FLAG_SUPPORTS_FW_ROAM)) { - connect.bg_scan_period = - nla_get_u16(info->attrs[NL80211_ATTR_BG_SCAN_PERIOD]); - } - - if (info->attrs[NL80211_ATTR_MAC]) - connect.bssid = nla_data(info->attrs[NL80211_ATTR_MAC]); - connect.ssid = nla_data(info->attrs[NL80211_ATTR_SSID]); - connect.ssid_len = nla_len(info->attrs[NL80211_ATTR_SSID]); - - if (info->attrs[NL80211_ATTR_IE]) { - connect.ie = nla_data(info->attrs[NL80211_ATTR_IE]); - connect.ie_len = nla_len(info->attrs[NL80211_ATTR_IE]); - } - - if (info->attrs[NL80211_ATTR_WIPHY_FREQ]) { - connect.channel = - ieee80211_get_channel(wiphy, - nla_get_u32(info->attrs[NL80211_ATTR_WIPHY_FREQ])); - if (!connect.channel || - connect.channel->flags & IEEE80211_CHAN_DISABLED) - return -EINVAL; - } - - if (connect.privacy && info->attrs[NL80211_ATTR_KEYS]) { - connkeys = nl80211_parse_connkeys(rdev, - info->attrs[NL80211_ATTR_KEYS]); - if (IS_ERR(connkeys)) - return PTR_ERR(connkeys); - } - - if (nla_get_flag(info->attrs[NL80211_ATTR_DISABLE_HT])) - connect.flags |= ASSOC_REQ_DISABLE_HT; - - if (info->attrs[NL80211_ATTR_HT_CAPABILITY_MASK]) - memcpy(&connect.ht_capa_mask, - nla_data(info->attrs[NL80211_ATTR_HT_CAPABILITY_MASK]), - sizeof(connect.ht_capa_mask)); - - if (info->attrs[NL80211_ATTR_HT_CAPABILITY]) { - if (!info->attrs[NL80211_ATTR_HT_CAPABILITY_MASK]) - return -EINVAL; - memcpy(&connect.ht_capa, - nla_data(info->attrs[NL80211_ATTR_HT_CAPABILITY]), - sizeof(connect.ht_capa)); - } - - err = cfg80211_connect(rdev, dev, &connect, connkeys); - if (err) - kfree(connkeys); - return err; -} - -static int nl80211_disconnect(struct sk_buff *skb, struct genl_info *info) -{ - struct cfg80211_registered_device *rdev = info->user_ptr[0]; - struct net_device *dev = info->user_ptr[1]; - u16 reason; - - if (!info->attrs[NL80211_ATTR_REASON_CODE]) - reason = WLAN_REASON_DEAUTH_LEAVING; - else - reason = nla_get_u16(info->attrs[NL80211_ATTR_REASON_CODE]); - - if (reason == 0) - return -EINVAL; - - if (dev->ieee80211_ptr->iftype != NL80211_IFTYPE_STATION && - dev->ieee80211_ptr->iftype != NL80211_IFTYPE_P2P_CLIENT) - return -EOPNOTSUPP; - - return cfg80211_disconnect(rdev, dev, reason, true); -} - -static int nl80211_wiphy_netns(struct sk_buff *skb, struct genl_info *info) -{ - struct cfg80211_registered_device *rdev = info->user_ptr[0]; - struct net *net; - int err; - u32 pid; - - if (!info->attrs[NL80211_ATTR_PID]) - return -EINVAL; - - pid = nla_get_u32(info->attrs[NL80211_ATTR_PID]); - - net = get_net_ns_by_pid(pid); - if (IS_ERR(net)) - return PTR_ERR(net); - - err = 0; - - /* check if anything to do */ - if (!net_eq(wiphy_net(&rdev->wiphy), net)) - err = cfg80211_switch_netns(rdev, net); - -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24)) - put_net(net); -#endif - return err; -} - -static int nl80211_setdel_pmksa(struct sk_buff *skb, struct genl_info *info) -{ - struct cfg80211_registered_device *rdev = info->user_ptr[0]; - int (*rdev_ops)(struct wiphy *wiphy, struct net_device *dev, - struct cfg80211_pmksa *pmksa) = NULL; - struct net_device *dev = info->user_ptr[1]; - struct cfg80211_pmksa pmksa; - - memset(&pmksa, 0, sizeof(struct cfg80211_pmksa)); - - if (!info->attrs[NL80211_ATTR_MAC]) - return -EINVAL; - - if (!info->attrs[NL80211_ATTR_PMKID]) - return -EINVAL; - - pmksa.pmkid = nla_data(info->attrs[NL80211_ATTR_PMKID]); - pmksa.bssid = nla_data(info->attrs[NL80211_ATTR_MAC]); - - if (dev->ieee80211_ptr->iftype != NL80211_IFTYPE_STATION && - dev->ieee80211_ptr->iftype != NL80211_IFTYPE_P2P_CLIENT) - return -EOPNOTSUPP; - - switch (info->genlhdr->cmd) { - case NL80211_CMD_SET_PMKSA: - rdev_ops = rdev->ops->set_pmksa; - break; - case NL80211_CMD_DEL_PMKSA: - rdev_ops = rdev->ops->del_pmksa; - break; - default: - WARN_ON(1); - break; - } - - if (!rdev_ops) - return -EOPNOTSUPP; - - return rdev_ops(&rdev->wiphy, dev, &pmksa); -} - -static int nl80211_flush_pmksa(struct sk_buff *skb, struct genl_info *info) -{ - struct cfg80211_registered_device *rdev = info->user_ptr[0]; - struct net_device *dev = info->user_ptr[1]; - - if (dev->ieee80211_ptr->iftype != NL80211_IFTYPE_STATION && - dev->ieee80211_ptr->iftype != NL80211_IFTYPE_P2P_CLIENT) - return -EOPNOTSUPP; - - if (!rdev->ops->flush_pmksa) - return -EOPNOTSUPP; - - return rdev->ops->flush_pmksa(&rdev->wiphy, dev); -} - -static int nl80211_tdls_mgmt(struct sk_buff *skb, struct genl_info *info) -{ - struct cfg80211_registered_device *rdev = info->user_ptr[0]; - struct net_device *dev = info->user_ptr[1]; - u8 action_code, dialog_token; - u16 status_code; - u8 *peer; - - if (!(rdev->wiphy.flags & WIPHY_FLAG_SUPPORTS_TDLS) || - !rdev->ops->tdls_mgmt) - return -EOPNOTSUPP; - - if (!info->attrs[NL80211_ATTR_TDLS_ACTION] || - !info->attrs[NL80211_ATTR_STATUS_CODE] || - !info->attrs[NL80211_ATTR_TDLS_DIALOG_TOKEN] || - !info->attrs[NL80211_ATTR_IE] || - !info->attrs[NL80211_ATTR_MAC]) - return -EINVAL; - - peer = nla_data(info->attrs[NL80211_ATTR_MAC]); - action_code = nla_get_u8(info->attrs[NL80211_ATTR_TDLS_ACTION]); - status_code = nla_get_u16(info->attrs[NL80211_ATTR_STATUS_CODE]); - dialog_token = nla_get_u8(info->attrs[NL80211_ATTR_TDLS_DIALOG_TOKEN]); - - return rdev->ops->tdls_mgmt(&rdev->wiphy, dev, peer, action_code, - dialog_token, status_code, - nla_data(info->attrs[NL80211_ATTR_IE]), - nla_len(info->attrs[NL80211_ATTR_IE])); -} - -static int nl80211_tdls_oper(struct sk_buff *skb, struct genl_info *info) -{ - struct cfg80211_registered_device *rdev = info->user_ptr[0]; - struct net_device *dev = info->user_ptr[1]; - enum nl80211_tdls_operation operation; - u8 *peer; - - if (!(rdev->wiphy.flags & WIPHY_FLAG_SUPPORTS_TDLS) || - !rdev->ops->tdls_oper) - return -EOPNOTSUPP; - - if (!info->attrs[NL80211_ATTR_TDLS_OPERATION] || - !info->attrs[NL80211_ATTR_MAC]) - return -EINVAL; - - operation = nla_get_u8(info->attrs[NL80211_ATTR_TDLS_OPERATION]); - peer = nla_data(info->attrs[NL80211_ATTR_MAC]); - - return rdev->ops->tdls_oper(&rdev->wiphy, dev, peer, operation); -} - -static int nl80211_remain_on_channel(struct sk_buff *skb, - struct genl_info *info) -{ - struct cfg80211_registered_device *rdev = info->user_ptr[0]; - struct net_device *dev = info->user_ptr[1]; - struct ieee80211_channel *chan; - struct sk_buff *msg; - void *hdr; - u64 cookie; - enum nl80211_channel_type channel_type = NL80211_CHAN_NO_HT; - u32 freq, duration; - int err; - - if (!info->attrs[NL80211_ATTR_WIPHY_FREQ] || - !info->attrs[NL80211_ATTR_DURATION]) - return -EINVAL; - - duration = nla_get_u32(info->attrs[NL80211_ATTR_DURATION]); - - /* - * We should be on that channel for at least one jiffie, - * and more than 5 seconds seems excessive. - */ - if (!duration || !msecs_to_jiffies(duration) || - duration > rdev->wiphy.max_remain_on_channel_duration) - return -EINVAL; - - if (!rdev->ops->remain_on_channel || - !(rdev->wiphy.flags & WIPHY_FLAG_HAS_REMAIN_ON_CHANNEL)) - return -EOPNOTSUPP; - - if (info->attrs[NL80211_ATTR_WIPHY_CHANNEL_TYPE]) { - channel_type = nla_get_u32( - info->attrs[NL80211_ATTR_WIPHY_CHANNEL_TYPE]); - if (channel_type != NL80211_CHAN_NO_HT && - channel_type != NL80211_CHAN_HT20 && - channel_type != NL80211_CHAN_HT40PLUS && - channel_type != NL80211_CHAN_HT40MINUS) - return -EINVAL; - } - - freq = nla_get_u32(info->attrs[NL80211_ATTR_WIPHY_FREQ]); - chan = rdev_freq_to_chan(rdev, freq, channel_type); - if (chan == NULL) - return -EINVAL; - - msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL); - if (!msg) - return -ENOMEM; - - hdr = nl80211hdr_put(msg, info->snd_pid, info->snd_seq, 0, - NL80211_CMD_REMAIN_ON_CHANNEL); - - if (IS_ERR(hdr)) { - err = PTR_ERR(hdr); - goto free_msg; - } - - err = rdev->ops->remain_on_channel(&rdev->wiphy, dev, chan, - channel_type, duration, &cookie); - - if (err) - goto free_msg; - - NLA_PUT_U64(msg, NL80211_ATTR_COOKIE, cookie); - - genlmsg_end(msg, hdr); - - return genlmsg_reply(msg, info); - - nla_put_failure: - err = -ENOBUFS; - free_msg: - nlmsg_free(msg); - return err; -} - -static int nl80211_cancel_remain_on_channel(struct sk_buff *skb, - struct genl_info *info) -{ - struct cfg80211_registered_device *rdev = info->user_ptr[0]; - struct net_device *dev = info->user_ptr[1]; - u64 cookie; - - if (!info->attrs[NL80211_ATTR_COOKIE]) - return -EINVAL; - - if (!rdev->ops->cancel_remain_on_channel) - return -EOPNOTSUPP; - - cookie = nla_get_u64(info->attrs[NL80211_ATTR_COOKIE]); - - return rdev->ops->cancel_remain_on_channel(&rdev->wiphy, dev, cookie); -} - -static u32 rateset_to_mask(struct ieee80211_supported_band *sband, - u8 *rates, u8 rates_len) -{ - u8 i; - u32 mask = 0; - - for (i = 0; i < rates_len; i++) { - int rate = (rates[i] & 0x7f) * 5; - int ridx; - for (ridx = 0; ridx < sband->n_bitrates; ridx++) { - struct ieee80211_rate *srate = - &sband->bitrates[ridx]; - if (rate == srate->bitrate) { - mask |= 1 << ridx; - break; - } - } - if (ridx == sband->n_bitrates) - return 0; /* rate not found */ - } - - return mask; -} - -static bool ht_rateset_to_mask(struct ieee80211_supported_band *sband, - u8 *rates, u8 rates_len, - u8 mcs[IEEE80211_HT_MCS_MASK_LEN]) -{ - u8 i; - - memset(mcs, 0, IEEE80211_HT_MCS_MASK_LEN); - - for (i = 0; i < rates_len; i++) { - int ridx, rbit; - - ridx = rates[i] / 8; - rbit = BIT(rates[i] % 8); - - /* check validity */ - if ((ridx < 0) || (ridx >= IEEE80211_HT_MCS_MASK_LEN)) - return false; - - /* check availability */ - if (sband->ht_cap.mcs.rx_mask[ridx] & rbit) - mcs[ridx] |= rbit; - else - return false; - } - - return true; -} - -static const struct nla_policy nl80211_txattr_policy[NL80211_TXRATE_MAX + 1] = { - [NL80211_TXRATE_LEGACY] = { .type = NLA_BINARY, - .len = NL80211_MAX_SUPP_RATES }, - [NL80211_TXRATE_MCS] = { .type = NLA_BINARY, - .len = NL80211_MAX_SUPP_HT_RATES }, -}; - -static int nl80211_set_tx_bitrate_mask(struct sk_buff *skb, - struct genl_info *info) -{ - struct nlattr *tb[NL80211_TXRATE_MAX + 1]; - struct cfg80211_registered_device *rdev = info->user_ptr[0]; - struct cfg80211_bitrate_mask mask; - int rem, i; - struct net_device *dev = info->user_ptr[1]; - struct nlattr *tx_rates; - struct ieee80211_supported_band *sband; - - if (info->attrs[NL80211_ATTR_TX_RATES] == NULL) - return -EINVAL; - - if (!rdev->ops->set_bitrate_mask) - return -EOPNOTSUPP; - - memset(&mask, 0, sizeof(mask)); - /* Default to all rates enabled */ - for (i = 0; i < IEEE80211_NUM_BANDS; i++) { - sband = rdev->wiphy.bands[i]; - mask.control[i].legacy = - sband ? (1 << sband->n_bitrates) - 1 : 0; - if (sband) - memcpy(mask.control[i].mcs, - sband->ht_cap.mcs.rx_mask, - sizeof(mask.control[i].mcs)); - else - memset(mask.control[i].mcs, 0, - sizeof(mask.control[i].mcs)); - } - - /* - * The nested attribute uses enum nl80211_band as the index. This maps - * directly to the enum ieee80211_band values used in cfg80211. - */ - BUILD_BUG_ON(NL80211_MAX_SUPP_HT_RATES > IEEE80211_HT_MCS_MASK_LEN * 8); - nla_for_each_nested(tx_rates, info->attrs[NL80211_ATTR_TX_RATES], rem) - { - enum ieee80211_band band = nla_type(tx_rates); - if (band < 0 || band >= IEEE80211_NUM_BANDS) - return -EINVAL; - sband = rdev->wiphy.bands[band]; - if (sband == NULL) - return -EINVAL; - nla_parse(tb, NL80211_TXRATE_MAX, nla_data(tx_rates), - nla_len(tx_rates), nl80211_txattr_policy); - if (tb[NL80211_TXRATE_LEGACY]) { - mask.control[band].legacy = rateset_to_mask( - sband, - nla_data(tb[NL80211_TXRATE_LEGACY]), - nla_len(tb[NL80211_TXRATE_LEGACY])); - } - if (tb[NL80211_TXRATE_MCS]) { - if (!ht_rateset_to_mask( - sband, - nla_data(tb[NL80211_TXRATE_MCS]), - nla_len(tb[NL80211_TXRATE_MCS]), - mask.control[band].mcs)) - return -EINVAL; - } - - if (mask.control[band].legacy == 0) { - /* don't allow empty legacy rates if HT - * is not even supported. */ - if (!rdev->wiphy.bands[band]->ht_cap.ht_supported) - return -EINVAL; - - for (i = 0; i < IEEE80211_HT_MCS_MASK_LEN; i++) - if (mask.control[band].mcs[i]) - break; - - /* legacy and mcs rates may not be both empty */ - if (i == IEEE80211_HT_MCS_MASK_LEN) - return -EINVAL; - } - } - - return rdev->ops->set_bitrate_mask(&rdev->wiphy, dev, NULL, &mask); -} - -static int nl80211_register_mgmt(struct sk_buff *skb, struct genl_info *info) -{ - struct cfg80211_registered_device *rdev = info->user_ptr[0]; - struct net_device *dev = info->user_ptr[1]; - u16 frame_type = IEEE80211_FTYPE_MGMT | IEEE80211_STYPE_ACTION; - - if (!info->attrs[NL80211_ATTR_FRAME_MATCH]) - return -EINVAL; - - if (info->attrs[NL80211_ATTR_FRAME_TYPE]) - frame_type = nla_get_u16(info->attrs[NL80211_ATTR_FRAME_TYPE]); - - if (dev->ieee80211_ptr->iftype != NL80211_IFTYPE_STATION && - dev->ieee80211_ptr->iftype != NL80211_IFTYPE_ADHOC && - dev->ieee80211_ptr->iftype != NL80211_IFTYPE_P2P_CLIENT && - dev->ieee80211_ptr->iftype != NL80211_IFTYPE_AP && - dev->ieee80211_ptr->iftype != NL80211_IFTYPE_AP_VLAN && - dev->ieee80211_ptr->iftype != NL80211_IFTYPE_MESH_POINT && - dev->ieee80211_ptr->iftype != NL80211_IFTYPE_P2P_GO) - return -EOPNOTSUPP; - - /* not much point in registering if we can't reply */ - if (!rdev->ops->mgmt_tx) - return -EOPNOTSUPP; - - return cfg80211_mlme_register_mgmt(dev->ieee80211_ptr, info->snd_pid, - frame_type, - nla_data(info->attrs[NL80211_ATTR_FRAME_MATCH]), - nla_len(info->attrs[NL80211_ATTR_FRAME_MATCH])); -} - -static int nl80211_tx_mgmt(struct sk_buff *skb, struct genl_info *info) -{ - struct cfg80211_registered_device *rdev = info->user_ptr[0]; - struct net_device *dev = info->user_ptr[1]; - struct ieee80211_channel *chan; - enum nl80211_channel_type channel_type = NL80211_CHAN_NO_HT; - bool channel_type_valid = false; - u32 freq; - int err; - void *hdr = NULL; - u64 cookie; - struct sk_buff *msg = NULL; - unsigned int wait = 0; - bool offchan, no_cck, dont_wait_for_ack; - - dont_wait_for_ack = info->attrs[NL80211_ATTR_DONT_WAIT_FOR_ACK]; - - if (!info->attrs[NL80211_ATTR_FRAME] || - !info->attrs[NL80211_ATTR_WIPHY_FREQ]) - return -EINVAL; - - if (!rdev->ops->mgmt_tx) - return -EOPNOTSUPP; - - if (dev->ieee80211_ptr->iftype != NL80211_IFTYPE_STATION && - dev->ieee80211_ptr->iftype != NL80211_IFTYPE_ADHOC && - dev->ieee80211_ptr->iftype != NL80211_IFTYPE_P2P_CLIENT && - dev->ieee80211_ptr->iftype != NL80211_IFTYPE_AP && - dev->ieee80211_ptr->iftype != NL80211_IFTYPE_AP_VLAN && - dev->ieee80211_ptr->iftype != NL80211_IFTYPE_MESH_POINT && - dev->ieee80211_ptr->iftype != NL80211_IFTYPE_P2P_GO) - return -EOPNOTSUPP; - - if (info->attrs[NL80211_ATTR_DURATION]) { - if (!(rdev->wiphy.flags & WIPHY_FLAG_OFFCHAN_TX)) - return -EINVAL; - wait = nla_get_u32(info->attrs[NL80211_ATTR_DURATION]); - } - - if (info->attrs[NL80211_ATTR_WIPHY_CHANNEL_TYPE]) { - channel_type = nla_get_u32( - info->attrs[NL80211_ATTR_WIPHY_CHANNEL_TYPE]); - if (channel_type != NL80211_CHAN_NO_HT && - channel_type != NL80211_CHAN_HT20 && - channel_type != NL80211_CHAN_HT40PLUS && - channel_type != NL80211_CHAN_HT40MINUS) - return -EINVAL; - channel_type_valid = true; - } - - offchan = info->attrs[NL80211_ATTR_OFFCHANNEL_TX_OK]; - - if (offchan && !(rdev->wiphy.flags & WIPHY_FLAG_OFFCHAN_TX)) - return -EINVAL; - - no_cck = nla_get_flag(info->attrs[NL80211_ATTR_TX_NO_CCK_RATE]); - - freq = nla_get_u32(info->attrs[NL80211_ATTR_WIPHY_FREQ]); - chan = rdev_freq_to_chan(rdev, freq, channel_type); - if (chan == NULL) - return -EINVAL; - - if (!dont_wait_for_ack) { - msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL); - if (!msg) - return -ENOMEM; - - hdr = nl80211hdr_put(msg, info->snd_pid, info->snd_seq, 0, - NL80211_CMD_FRAME); - - if (IS_ERR(hdr)) { - err = PTR_ERR(hdr); - goto free_msg; - } - } - - err = cfg80211_mlme_mgmt_tx(rdev, dev, chan, offchan, channel_type, - channel_type_valid, wait, - nla_data(info->attrs[NL80211_ATTR_FRAME]), - nla_len(info->attrs[NL80211_ATTR_FRAME]), - no_cck, dont_wait_for_ack, &cookie); - if (err) - goto free_msg; - - if (msg) { - NLA_PUT_U64(msg, NL80211_ATTR_COOKIE, cookie); - - genlmsg_end(msg, hdr); - return genlmsg_reply(msg, info); - } - - return 0; - - nla_put_failure: - err = -ENOBUFS; - free_msg: - nlmsg_free(msg); - return err; -} - -static int nl80211_tx_mgmt_cancel_wait(struct sk_buff *skb, struct genl_info *info) -{ - struct cfg80211_registered_device *rdev = info->user_ptr[0]; - struct net_device *dev = info->user_ptr[1]; - u64 cookie; - - if (!info->attrs[NL80211_ATTR_COOKIE]) - return -EINVAL; - - if (!rdev->ops->mgmt_tx_cancel_wait) - return -EOPNOTSUPP; - - if (dev->ieee80211_ptr->iftype != NL80211_IFTYPE_STATION && - dev->ieee80211_ptr->iftype != NL80211_IFTYPE_ADHOC && - dev->ieee80211_ptr->iftype != NL80211_IFTYPE_P2P_CLIENT && - dev->ieee80211_ptr->iftype != NL80211_IFTYPE_AP && - dev->ieee80211_ptr->iftype != NL80211_IFTYPE_AP_VLAN && - dev->ieee80211_ptr->iftype != NL80211_IFTYPE_P2P_GO) - return -EOPNOTSUPP; - - cookie = nla_get_u64(info->attrs[NL80211_ATTR_COOKIE]); - - return rdev->ops->mgmt_tx_cancel_wait(&rdev->wiphy, dev, cookie); -} - -static int nl80211_set_power_save(struct sk_buff *skb, struct genl_info *info) -{ - struct cfg80211_registered_device *rdev = info->user_ptr[0]; - struct wireless_dev *wdev; - struct net_device *dev = info->user_ptr[1]; - u8 ps_state; - bool state; - int err; - - if (!info->attrs[NL80211_ATTR_PS_STATE]) - return -EINVAL; - - ps_state = nla_get_u32(info->attrs[NL80211_ATTR_PS_STATE]); - - if (ps_state != NL80211_PS_DISABLED && ps_state != NL80211_PS_ENABLED) - return -EINVAL; - - wdev = dev->ieee80211_ptr; - - if (!rdev->ops->set_power_mgmt) - return -EOPNOTSUPP; - - state = (ps_state == NL80211_PS_ENABLED) ? true : false; - - if (state == wdev->ps) - return 0; - - err = rdev->ops->set_power_mgmt(wdev->wiphy, dev, state, - wdev->ps_timeout); - if (!err) - wdev->ps = state; - return err; -} - -static int nl80211_get_power_save(struct sk_buff *skb, struct genl_info *info) -{ - struct cfg80211_registered_device *rdev = info->user_ptr[0]; - enum nl80211_ps_state ps_state; - struct wireless_dev *wdev; - struct net_device *dev = info->user_ptr[1]; - struct sk_buff *msg; - void *hdr; - int err; - - wdev = dev->ieee80211_ptr; - - if (!rdev->ops->set_power_mgmt) - return -EOPNOTSUPP; - - msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL); - if (!msg) - return -ENOMEM; - - hdr = nl80211hdr_put(msg, info->snd_pid, info->snd_seq, 0, - NL80211_CMD_GET_POWER_SAVE); - if (!hdr) { - err = -ENOBUFS; - goto free_msg; - } - - if (wdev->ps) - ps_state = NL80211_PS_ENABLED; - else - ps_state = NL80211_PS_DISABLED; - - NLA_PUT_U32(msg, NL80211_ATTR_PS_STATE, ps_state); - - genlmsg_end(msg, hdr); - return genlmsg_reply(msg, info); - - nla_put_failure: - err = -ENOBUFS; - free_msg: - nlmsg_free(msg); - return err; -} - -static struct nla_policy -nl80211_attr_cqm_policy[NL80211_ATTR_CQM_MAX + 1] __read_mostly = { - [NL80211_ATTR_CQM_RSSI_THOLD] = { .type = NLA_U32 }, - [NL80211_ATTR_CQM_RSSI_HYST] = { .type = NLA_U32 }, - [NL80211_ATTR_CQM_RSSI_THRESHOLD_EVENT] = { .type = NLA_U32 }, -}; - -static int nl80211_set_cqm_rssi(struct genl_info *info, - s32 threshold, u32 hysteresis) -{ - struct cfg80211_registered_device *rdev = info->user_ptr[0]; - struct wireless_dev *wdev; - struct net_device *dev = info->user_ptr[1]; - - if (threshold > 0) - return -EINVAL; - - wdev = dev->ieee80211_ptr; - - if (!rdev->ops->set_cqm_rssi_config) - return -EOPNOTSUPP; - - if (wdev->iftype != NL80211_IFTYPE_STATION && - wdev->iftype != NL80211_IFTYPE_P2P_CLIENT) - return -EOPNOTSUPP; - - return rdev->ops->set_cqm_rssi_config(wdev->wiphy, dev, - threshold, hysteresis); -} - -static int nl80211_set_cqm(struct sk_buff *skb, struct genl_info *info) -{ - struct nlattr *attrs[NL80211_ATTR_CQM_MAX + 1]; - struct nlattr *cqm; - int err; - - cqm = info->attrs[NL80211_ATTR_CQM]; - if (!cqm) { - err = -EINVAL; - goto out; - } - - err = nla_parse_nested(attrs, NL80211_ATTR_CQM_MAX, cqm, - nl80211_attr_cqm_policy); - if (err) - goto out; - - if (attrs[NL80211_ATTR_CQM_RSSI_THOLD] && - attrs[NL80211_ATTR_CQM_RSSI_HYST]) { - s32 threshold; - u32 hysteresis; - threshold = nla_get_u32(attrs[NL80211_ATTR_CQM_RSSI_THOLD]); - hysteresis = nla_get_u32(attrs[NL80211_ATTR_CQM_RSSI_HYST]); - err = nl80211_set_cqm_rssi(info, threshold, hysteresis); - } else - err = -EINVAL; - -out: - return err; -} - -static int nl80211_join_mesh(struct sk_buff *skb, struct genl_info *info) -{ - struct cfg80211_registered_device *rdev = info->user_ptr[0]; - struct net_device *dev = info->user_ptr[1]; - struct mesh_config cfg; - struct mesh_setup setup; - int err; - - /* start with default */ - memcpy(&cfg, &default_mesh_config, sizeof(cfg)); - memcpy(&setup, &default_mesh_setup, sizeof(setup)); - - if (info->attrs[NL80211_ATTR_MESH_CONFIG]) { - /* and parse parameters if given */ - err = nl80211_parse_mesh_config(info, &cfg, NULL); - if (err) - return err; - } - - if (!info->attrs[NL80211_ATTR_MESH_ID] || - !nla_len(info->attrs[NL80211_ATTR_MESH_ID])) - return -EINVAL; - - setup.mesh_id = nla_data(info->attrs[NL80211_ATTR_MESH_ID]); - setup.mesh_id_len = nla_len(info->attrs[NL80211_ATTR_MESH_ID]); - - if (info->attrs[NL80211_ATTR_MCAST_RATE] && - !nl80211_parse_mcast_rate(rdev, setup.mcast_rate, - nla_get_u32(info->attrs[NL80211_ATTR_MCAST_RATE]))) - return -EINVAL; - - if (info->attrs[NL80211_ATTR_MESH_SETUP]) { - /* parse additional setup parameters if given */ - err = nl80211_parse_mesh_setup(info, &setup); - if (err) - return err; - } - - return cfg80211_join_mesh(rdev, dev, &setup, &cfg); -} - -static int nl80211_leave_mesh(struct sk_buff *skb, struct genl_info *info) -{ - struct cfg80211_registered_device *rdev = info->user_ptr[0]; - struct net_device *dev = info->user_ptr[1]; - - return cfg80211_leave_mesh(rdev, dev); -} - -static int nl80211_get_wowlan(struct sk_buff *skb, struct genl_info *info) -{ - struct cfg80211_registered_device *rdev = info->user_ptr[0]; - struct sk_buff *msg; - void *hdr; - - if (!rdev->wiphy.wowlan.flags && !rdev->wiphy.wowlan.n_patterns) - return -EOPNOTSUPP; - - msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL); - if (!msg) - return -ENOMEM; - - hdr = nl80211hdr_put(msg, info->snd_pid, info->snd_seq, 0, - NL80211_CMD_GET_WOWLAN); - if (!hdr) - goto nla_put_failure; - - if (rdev->wowlan) { - struct nlattr *nl_wowlan; - - nl_wowlan = nla_nest_start(msg, NL80211_ATTR_WOWLAN_TRIGGERS); - if (!nl_wowlan) - goto nla_put_failure; - - if (rdev->wowlan->any) - NLA_PUT_FLAG(msg, NL80211_WOWLAN_TRIG_ANY); - if (rdev->wowlan->disconnect) - NLA_PUT_FLAG(msg, NL80211_WOWLAN_TRIG_DISCONNECT); - if (rdev->wowlan->magic_pkt) - NLA_PUT_FLAG(msg, NL80211_WOWLAN_TRIG_MAGIC_PKT); - if (rdev->wowlan->gtk_rekey_failure) - NLA_PUT_FLAG(msg, NL80211_WOWLAN_TRIG_GTK_REKEY_FAILURE); - if (rdev->wowlan->eap_identity_req) - NLA_PUT_FLAG(msg, NL80211_WOWLAN_TRIG_EAP_IDENT_REQUEST); - if (rdev->wowlan->four_way_handshake) - NLA_PUT_FLAG(msg, NL80211_WOWLAN_TRIG_4WAY_HANDSHAKE); - if (rdev->wowlan->rfkill_release) - NLA_PUT_FLAG(msg, NL80211_WOWLAN_TRIG_RFKILL_RELEASE); - if (rdev->wowlan->n_patterns) { - struct nlattr *nl_pats, *nl_pat; - int i, pat_len; - - nl_pats = nla_nest_start(msg, - NL80211_WOWLAN_TRIG_PKT_PATTERN); - if (!nl_pats) - goto nla_put_failure; - - for (i = 0; i < rdev->wowlan->n_patterns; i++) { - nl_pat = nla_nest_start(msg, i + 1); - if (!nl_pat) - goto nla_put_failure; - pat_len = rdev->wowlan->patterns[i].pattern_len; - NLA_PUT(msg, NL80211_WOWLAN_PKTPAT_MASK, - DIV_ROUND_UP(pat_len, 8), - rdev->wowlan->patterns[i].mask); - NLA_PUT(msg, NL80211_WOWLAN_PKTPAT_PATTERN, - pat_len, - rdev->wowlan->patterns[i].pattern); - nla_nest_end(msg, nl_pat); - } - nla_nest_end(msg, nl_pats); - } - - nla_nest_end(msg, nl_wowlan); - } - - genlmsg_end(msg, hdr); - return genlmsg_reply(msg, info); - -nla_put_failure: - nlmsg_free(msg); - return -ENOBUFS; -} - -static int nl80211_set_wowlan(struct sk_buff *skb, struct genl_info *info) -{ - struct cfg80211_registered_device *rdev = info->user_ptr[0]; - struct nlattr *tb[NUM_NL80211_WOWLAN_TRIG]; - struct cfg80211_wowlan no_triggers = {}; - struct cfg80211_wowlan new_triggers = {}; - struct wiphy_wowlan_support *wowlan = &rdev->wiphy.wowlan; - int err, i; - - if (!rdev->wiphy.wowlan.flags && !rdev->wiphy.wowlan.n_patterns) - return -EOPNOTSUPP; - - if (!info->attrs[NL80211_ATTR_WOWLAN_TRIGGERS]) - goto no_triggers; - - err = nla_parse(tb, MAX_NL80211_WOWLAN_TRIG, - nla_data(info->attrs[NL80211_ATTR_WOWLAN_TRIGGERS]), - nla_len(info->attrs[NL80211_ATTR_WOWLAN_TRIGGERS]), - nl80211_wowlan_policy); - if (err) - return err; - - if (tb[NL80211_WOWLAN_TRIG_ANY]) { - if (!(wowlan->flags & WIPHY_WOWLAN_ANY)) - return -EINVAL; - new_triggers.any = true; - } - - if (tb[NL80211_WOWLAN_TRIG_DISCONNECT]) { - if (!(wowlan->flags & WIPHY_WOWLAN_DISCONNECT)) - return -EINVAL; - new_triggers.disconnect = true; - } - - if (tb[NL80211_WOWLAN_TRIG_MAGIC_PKT]) { - if (!(wowlan->flags & WIPHY_WOWLAN_MAGIC_PKT)) - return -EINVAL; - new_triggers.magic_pkt = true; - } - - if (tb[NL80211_WOWLAN_TRIG_GTK_REKEY_SUPPORTED]) - return -EINVAL; - - if (tb[NL80211_WOWLAN_TRIG_GTK_REKEY_FAILURE]) { - if (!(wowlan->flags & WIPHY_WOWLAN_GTK_REKEY_FAILURE)) - return -EINVAL; - new_triggers.gtk_rekey_failure = true; - } - - if (tb[NL80211_WOWLAN_TRIG_EAP_IDENT_REQUEST]) { - if (!(wowlan->flags & WIPHY_WOWLAN_EAP_IDENTITY_REQ)) - return -EINVAL; - new_triggers.eap_identity_req = true; - } - - if (tb[NL80211_WOWLAN_TRIG_4WAY_HANDSHAKE]) { - if (!(wowlan->flags & WIPHY_WOWLAN_4WAY_HANDSHAKE)) - return -EINVAL; - new_triggers.four_way_handshake = true; - } - - if (tb[NL80211_WOWLAN_TRIG_RFKILL_RELEASE]) { - if (!(wowlan->flags & WIPHY_WOWLAN_RFKILL_RELEASE)) - return -EINVAL; - new_triggers.rfkill_release = true; - } - - if (tb[NL80211_WOWLAN_TRIG_PKT_PATTERN]) { - struct nlattr *pat; - int n_patterns = 0; - int rem, pat_len, mask_len; - struct nlattr *pat_tb[NUM_NL80211_WOWLAN_PKTPAT]; - - nla_for_each_nested(pat, tb[NL80211_WOWLAN_TRIG_PKT_PATTERN], - rem) - n_patterns++; - if (n_patterns > wowlan->n_patterns) - return -EINVAL; - - new_triggers.patterns = kcalloc(n_patterns, - sizeof(new_triggers.patterns[0]), - GFP_KERNEL); - if (!new_triggers.patterns) - return -ENOMEM; - - new_triggers.n_patterns = n_patterns; - i = 0; - - nla_for_each_nested(pat, tb[NL80211_WOWLAN_TRIG_PKT_PATTERN], - rem) { - nla_parse(pat_tb, MAX_NL80211_WOWLAN_PKTPAT, - nla_data(pat), nla_len(pat), NULL); - err = -EINVAL; - if (!pat_tb[NL80211_WOWLAN_PKTPAT_MASK] || - !pat_tb[NL80211_WOWLAN_PKTPAT_PATTERN]) - goto error; - pat_len = nla_len(pat_tb[NL80211_WOWLAN_PKTPAT_PATTERN]); - mask_len = DIV_ROUND_UP(pat_len, 8); - if (nla_len(pat_tb[NL80211_WOWLAN_PKTPAT_MASK]) != - mask_len) - goto error; - if (pat_len > wowlan->pattern_max_len || - pat_len < wowlan->pattern_min_len) - goto error; - - new_triggers.patterns[i].mask = - kmalloc(mask_len + pat_len, GFP_KERNEL); - if (!new_triggers.patterns[i].mask) { - err = -ENOMEM; - goto error; - } - new_triggers.patterns[i].pattern = - new_triggers.patterns[i].mask + mask_len; - memcpy(new_triggers.patterns[i].mask, - nla_data(pat_tb[NL80211_WOWLAN_PKTPAT_MASK]), - mask_len); - new_triggers.patterns[i].pattern_len = pat_len; - memcpy(new_triggers.patterns[i].pattern, - nla_data(pat_tb[NL80211_WOWLAN_PKTPAT_PATTERN]), - pat_len); - i++; - } - } - - if (memcmp(&new_triggers, &no_triggers, sizeof(new_triggers))) { - struct cfg80211_wowlan *ntrig; - ntrig = kmemdup(&new_triggers, sizeof(new_triggers), - GFP_KERNEL); - if (!ntrig) { - err = -ENOMEM; - goto error; - } - cfg80211_rdev_free_wowlan(rdev); - rdev->wowlan = ntrig; - } else { - no_triggers: - cfg80211_rdev_free_wowlan(rdev); - rdev->wowlan = NULL; - } - - return 0; - error: - for (i = 0; i < new_triggers.n_patterns; i++) - kfree(new_triggers.patterns[i].mask); - kfree(new_triggers.patterns); - return err; -} - -static int nl80211_set_rekey_data(struct sk_buff *skb, struct genl_info *info) -{ - struct cfg80211_registered_device *rdev = info->user_ptr[0]; - struct net_device *dev = info->user_ptr[1]; - struct wireless_dev *wdev = dev->ieee80211_ptr; - struct nlattr *tb[NUM_NL80211_REKEY_DATA]; - struct cfg80211_gtk_rekey_data rekey_data; - int err; - - if (!info->attrs[NL80211_ATTR_REKEY_DATA]) - return -EINVAL; - - err = nla_parse(tb, MAX_NL80211_REKEY_DATA, - nla_data(info->attrs[NL80211_ATTR_REKEY_DATA]), - nla_len(info->attrs[NL80211_ATTR_REKEY_DATA]), - nl80211_rekey_policy); - if (err) - return err; - - if (nla_len(tb[NL80211_REKEY_DATA_REPLAY_CTR]) != NL80211_REPLAY_CTR_LEN) - return -ERANGE; - if (nla_len(tb[NL80211_REKEY_DATA_KEK]) != NL80211_KEK_LEN) - return -ERANGE; - if (nla_len(tb[NL80211_REKEY_DATA_KCK]) != NL80211_KCK_LEN) - return -ERANGE; - - memcpy(rekey_data.kek, nla_data(tb[NL80211_REKEY_DATA_KEK]), - NL80211_KEK_LEN); - memcpy(rekey_data.kck, nla_data(tb[NL80211_REKEY_DATA_KCK]), - NL80211_KCK_LEN); - memcpy(rekey_data.replay_ctr, - nla_data(tb[NL80211_REKEY_DATA_REPLAY_CTR]), - NL80211_REPLAY_CTR_LEN); - - wdev_lock(wdev); - if (!wdev->current_bss) { - err = -ENOTCONN; - goto out; - } - - if (!rdev->ops->set_rekey_data) { - err = -EOPNOTSUPP; - goto out; - } - - err = rdev->ops->set_rekey_data(&rdev->wiphy, dev, &rekey_data); - out: - wdev_unlock(wdev); - return err; -} - -static int nl80211_register_unexpected_frame(struct sk_buff *skb, - struct genl_info *info) -{ - struct net_device *dev = info->user_ptr[1]; - struct wireless_dev *wdev = dev->ieee80211_ptr; - - if (wdev->iftype != NL80211_IFTYPE_AP && - wdev->iftype != NL80211_IFTYPE_P2P_GO) - return -EINVAL; - - if (wdev->ap_unexpected_nlpid) - return -EBUSY; - - wdev->ap_unexpected_nlpid = info->snd_pid; - return 0; -} - -static int nl80211_probe_client(struct sk_buff *skb, - struct genl_info *info) -{ - struct cfg80211_registered_device *rdev = info->user_ptr[0]; - struct net_device *dev = info->user_ptr[1]; - struct wireless_dev *wdev = dev->ieee80211_ptr; - struct sk_buff *msg; - void *hdr; - const u8 *addr; - u64 cookie; - int err; - - if (wdev->iftype != NL80211_IFTYPE_AP && - wdev->iftype != NL80211_IFTYPE_P2P_GO) - return -EOPNOTSUPP; - - if (!info->attrs[NL80211_ATTR_MAC]) - return -EINVAL; - - if (!rdev->ops->probe_client) - return -EOPNOTSUPP; - - msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL); - if (!msg) - return -ENOMEM; - - hdr = nl80211hdr_put(msg, info->snd_pid, info->snd_seq, 0, - NL80211_CMD_PROBE_CLIENT); - - if (IS_ERR(hdr)) { - err = PTR_ERR(hdr); - goto free_msg; - } - - addr = nla_data(info->attrs[NL80211_ATTR_MAC]); - - err = rdev->ops->probe_client(&rdev->wiphy, dev, addr, &cookie); - if (err) - goto free_msg; - - NLA_PUT_U64(msg, NL80211_ATTR_COOKIE, cookie); - - genlmsg_end(msg, hdr); - - return genlmsg_reply(msg, info); - - nla_put_failure: - err = -ENOBUFS; - free_msg: - nlmsg_free(msg); - return err; -} - -static int nl80211_register_beacons(struct sk_buff *skb, struct genl_info *info) -{ - struct cfg80211_registered_device *rdev = info->user_ptr[0]; - - if (!(rdev->wiphy.flags & WIPHY_FLAG_REPORTS_OBSS)) - return -EOPNOTSUPP; - - if (rdev->ap_beacons_nlpid) - return -EBUSY; - - rdev->ap_beacons_nlpid = info->snd_pid; - - return 0; -} - -#define NL80211_FLAG_NEED_WIPHY 0x01 -#define NL80211_FLAG_NEED_NETDEV 0x02 -#define NL80211_FLAG_NEED_RTNL 0x04 -#define NL80211_FLAG_CHECK_NETDEV_UP 0x08 -#define NL80211_FLAG_NEED_NETDEV_UP (NL80211_FLAG_NEED_NETDEV |\ - NL80211_FLAG_CHECK_NETDEV_UP) - -static int nl80211_pre_doit(struct genl_ops *ops, struct sk_buff *skb, - struct genl_info *info) -{ - struct cfg80211_registered_device *rdev; - struct net_device *dev; - int err; - bool rtnl = ops->internal_flags & NL80211_FLAG_NEED_RTNL; - - if (rtnl) - rtnl_lock(); - - if (ops->internal_flags & NL80211_FLAG_NEED_WIPHY) { - rdev = cfg80211_get_dev_from_info(info); - if (IS_ERR(rdev)) { - if (rtnl) - rtnl_unlock(); - return PTR_ERR(rdev); - } - info->user_ptr[0] = rdev; - } else if (ops->internal_flags & NL80211_FLAG_NEED_NETDEV) { - err = get_rdev_dev_by_ifindex(genl_info_net(info), info->attrs, - &rdev, &dev); - if (err) { - if (rtnl) - rtnl_unlock(); - return err; - } - if (ops->internal_flags & NL80211_FLAG_CHECK_NETDEV_UP && - !netif_running(dev)) { - cfg80211_unlock_rdev(rdev); - dev_put(dev); - if (rtnl) - rtnl_unlock(); - return -ENETDOWN; - } - info->user_ptr[0] = rdev; - info->user_ptr[1] = dev; - } - - return 0; -} - -static void nl80211_post_doit(struct genl_ops *ops, struct sk_buff *skb, - struct genl_info *info) -{ - if (info->user_ptr[0]) - cfg80211_unlock_rdev(info->user_ptr[0]); - if (info->user_ptr[1]) - dev_put(info->user_ptr[1]); - if (ops->internal_flags & NL80211_FLAG_NEED_RTNL) - rtnl_unlock(); -} - -static struct genl_ops nl80211_ops[] = { - { - .cmd = NL80211_CMD_GET_WIPHY, - .doit = nl80211_get_wiphy, - .dumpit = nl80211_dump_wiphy, - .policy = nl80211_policy, - /* can be retrieved by unprivileged users */ - .internal_flags = NL80211_FLAG_NEED_WIPHY, - }, - { - .cmd = NL80211_CMD_SET_WIPHY, - .doit = nl80211_set_wiphy, - .policy = nl80211_policy, - .flags = GENL_ADMIN_PERM, - .internal_flags = NL80211_FLAG_NEED_RTNL, - }, - { - .cmd = NL80211_CMD_GET_INTERFACE, - .doit = nl80211_get_interface, - .dumpit = nl80211_dump_interface, - .policy = nl80211_policy, - /* can be retrieved by unprivileged users */ - .internal_flags = NL80211_FLAG_NEED_NETDEV, - }, - { - .cmd = NL80211_CMD_SET_INTERFACE, - .doit = nl80211_set_interface, - .policy = nl80211_policy, - .flags = GENL_ADMIN_PERM, - .internal_flags = NL80211_FLAG_NEED_NETDEV | - NL80211_FLAG_NEED_RTNL, - }, - { - .cmd = NL80211_CMD_NEW_INTERFACE, - .doit = nl80211_new_interface, - .policy = nl80211_policy, - .flags = GENL_ADMIN_PERM, - .internal_flags = NL80211_FLAG_NEED_WIPHY | - NL80211_FLAG_NEED_RTNL, - }, - { - .cmd = NL80211_CMD_DEL_INTERFACE, - .doit = nl80211_del_interface, - .policy = nl80211_policy, - .flags = GENL_ADMIN_PERM, - .internal_flags = NL80211_FLAG_NEED_NETDEV | - NL80211_FLAG_NEED_RTNL, - }, - { - .cmd = NL80211_CMD_GET_KEY, - .doit = nl80211_get_key, - .policy = nl80211_policy, - .flags = GENL_ADMIN_PERM, - .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | - NL80211_FLAG_NEED_RTNL, - }, - { - .cmd = NL80211_CMD_SET_KEY, - .doit = nl80211_set_key, - .policy = nl80211_policy, - .flags = GENL_ADMIN_PERM, - .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | - NL80211_FLAG_NEED_RTNL, - }, - { - .cmd = NL80211_CMD_NEW_KEY, - .doit = nl80211_new_key, - .policy = nl80211_policy, - .flags = GENL_ADMIN_PERM, - .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | - NL80211_FLAG_NEED_RTNL, - }, - { - .cmd = NL80211_CMD_DEL_KEY, - .doit = nl80211_del_key, - .policy = nl80211_policy, - .flags = GENL_ADMIN_PERM, - .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | - NL80211_FLAG_NEED_RTNL, - }, - { - .cmd = NL80211_CMD_SET_BEACON, - .policy = nl80211_policy, - .flags = GENL_ADMIN_PERM, - .doit = nl80211_set_beacon, - .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | - NL80211_FLAG_NEED_RTNL, - }, - { - .cmd = NL80211_CMD_START_AP, - .policy = nl80211_policy, - .flags = GENL_ADMIN_PERM, - .doit = nl80211_start_ap, - .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | - NL80211_FLAG_NEED_RTNL, - }, - { - .cmd = NL80211_CMD_STOP_AP, - .policy = nl80211_policy, - .flags = GENL_ADMIN_PERM, - .doit = nl80211_stop_ap, - .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | - NL80211_FLAG_NEED_RTNL, - }, - { - .cmd = NL80211_CMD_GET_STATION, - .doit = nl80211_get_station, - .dumpit = nl80211_dump_station, - .policy = nl80211_policy, - .internal_flags = NL80211_FLAG_NEED_NETDEV | - NL80211_FLAG_NEED_RTNL, - }, - { - .cmd = NL80211_CMD_SET_STATION, - .doit = nl80211_set_station, - .policy = nl80211_policy, - .flags = GENL_ADMIN_PERM, - .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | - NL80211_FLAG_NEED_RTNL, - }, - { - .cmd = NL80211_CMD_NEW_STATION, - .doit = nl80211_new_station, - .policy = nl80211_policy, - .flags = GENL_ADMIN_PERM, - .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | - NL80211_FLAG_NEED_RTNL, - }, - { - .cmd = NL80211_CMD_DEL_STATION, - .doit = nl80211_del_station, - .policy = nl80211_policy, - .flags = GENL_ADMIN_PERM, - .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | - NL80211_FLAG_NEED_RTNL, - }, - { - .cmd = NL80211_CMD_GET_MPATH, - .doit = nl80211_get_mpath, - .dumpit = nl80211_dump_mpath, - .policy = nl80211_policy, - .flags = GENL_ADMIN_PERM, - .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | - NL80211_FLAG_NEED_RTNL, - }, - { - .cmd = NL80211_CMD_SET_MPATH, - .doit = nl80211_set_mpath, - .policy = nl80211_policy, - .flags = GENL_ADMIN_PERM, - .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | - NL80211_FLAG_NEED_RTNL, - }, - { - .cmd = NL80211_CMD_NEW_MPATH, - .doit = nl80211_new_mpath, - .policy = nl80211_policy, - .flags = GENL_ADMIN_PERM, - .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | - NL80211_FLAG_NEED_RTNL, - }, - { - .cmd = NL80211_CMD_DEL_MPATH, - .doit = nl80211_del_mpath, - .policy = nl80211_policy, - .flags = GENL_ADMIN_PERM, - .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | - NL80211_FLAG_NEED_RTNL, - }, - { - .cmd = NL80211_CMD_SET_BSS, - .doit = nl80211_set_bss, - .policy = nl80211_policy, - .flags = GENL_ADMIN_PERM, - .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | - NL80211_FLAG_NEED_RTNL, - }, - { - .cmd = NL80211_CMD_GET_REG, - .doit = nl80211_get_reg, - .policy = nl80211_policy, - /* can be retrieved by unprivileged users */ - }, - { - .cmd = NL80211_CMD_SET_REG, - .doit = nl80211_set_reg, - .policy = nl80211_policy, - .flags = GENL_ADMIN_PERM, - }, - { - .cmd = NL80211_CMD_REQ_SET_REG, - .doit = nl80211_req_set_reg, - .policy = nl80211_policy, - .flags = GENL_ADMIN_PERM, - }, - { - .cmd = NL80211_CMD_GET_MESH_CONFIG, - .doit = nl80211_get_mesh_config, - .policy = nl80211_policy, - /* can be retrieved by unprivileged users */ - .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | - NL80211_FLAG_NEED_RTNL, - }, - { - .cmd = NL80211_CMD_SET_MESH_CONFIG, - .doit = nl80211_update_mesh_config, - .policy = nl80211_policy, - .flags = GENL_ADMIN_PERM, - .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | - NL80211_FLAG_NEED_RTNL, - }, - { - .cmd = NL80211_CMD_TRIGGER_SCAN, - .doit = nl80211_trigger_scan, - .policy = nl80211_policy, - .flags = GENL_ADMIN_PERM, - .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | - NL80211_FLAG_NEED_RTNL, - }, - { - .cmd = NL80211_CMD_GET_SCAN, - .policy = nl80211_policy, - .dumpit = nl80211_dump_scan, - }, - { - .cmd = NL80211_CMD_START_SCHED_SCAN, - .doit = nl80211_start_sched_scan, - .policy = nl80211_policy, - .flags = GENL_ADMIN_PERM, - .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | - NL80211_FLAG_NEED_RTNL, - }, - { - .cmd = NL80211_CMD_STOP_SCHED_SCAN, - .doit = nl80211_stop_sched_scan, - .policy = nl80211_policy, - .flags = GENL_ADMIN_PERM, - .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | - NL80211_FLAG_NEED_RTNL, - }, - { - .cmd = NL80211_CMD_AUTHENTICATE, - .doit = nl80211_authenticate, - .policy = nl80211_policy, - .flags = GENL_ADMIN_PERM, - .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | - NL80211_FLAG_NEED_RTNL, - }, - { - .cmd = NL80211_CMD_ASSOCIATE, - .doit = nl80211_associate, - .policy = nl80211_policy, - .flags = GENL_ADMIN_PERM, - .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | - NL80211_FLAG_NEED_RTNL, - }, - { - .cmd = NL80211_CMD_DEAUTHENTICATE, - .doit = nl80211_deauthenticate, - .policy = nl80211_policy, - .flags = GENL_ADMIN_PERM, - .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | - NL80211_FLAG_NEED_RTNL, - }, - { - .cmd = NL80211_CMD_DISASSOCIATE, - .doit = nl80211_disassociate, - .policy = nl80211_policy, - .flags = GENL_ADMIN_PERM, - .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | - NL80211_FLAG_NEED_RTNL, - }, - { - .cmd = NL80211_CMD_JOIN_IBSS, - .doit = nl80211_join_ibss, - .policy = nl80211_policy, - .flags = GENL_ADMIN_PERM, - .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | - NL80211_FLAG_NEED_RTNL, - }, - { - .cmd = NL80211_CMD_LEAVE_IBSS, - .doit = nl80211_leave_ibss, - .policy = nl80211_policy, - .flags = GENL_ADMIN_PERM, - .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | - NL80211_FLAG_NEED_RTNL, - }, -#ifdef CONFIG_NL80211_TESTMODE - { - .cmd = NL80211_CMD_TESTMODE, - .doit = nl80211_testmode_do, - .dumpit = nl80211_testmode_dump, - .policy = nl80211_policy, - .flags = GENL_ADMIN_PERM, - .internal_flags = NL80211_FLAG_NEED_WIPHY | - NL80211_FLAG_NEED_RTNL, - }, -#endif - { - .cmd = NL80211_CMD_CONNECT, - .doit = nl80211_connect, - .policy = nl80211_policy, - .flags = GENL_ADMIN_PERM, - .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | - NL80211_FLAG_NEED_RTNL, - }, - { - .cmd = NL80211_CMD_DISCONNECT, - .doit = nl80211_disconnect, - .policy = nl80211_policy, - .flags = GENL_ADMIN_PERM, - .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | - NL80211_FLAG_NEED_RTNL, - }, - { - .cmd = NL80211_CMD_SET_WIPHY_NETNS, - .doit = nl80211_wiphy_netns, - .policy = nl80211_policy, - .flags = GENL_ADMIN_PERM, - .internal_flags = NL80211_FLAG_NEED_WIPHY | - NL80211_FLAG_NEED_RTNL, - }, - { - .cmd = NL80211_CMD_GET_SURVEY, - .policy = nl80211_policy, - .dumpit = nl80211_dump_survey, - }, - { - .cmd = NL80211_CMD_SET_PMKSA, - .doit = nl80211_setdel_pmksa, - .policy = nl80211_policy, - .flags = GENL_ADMIN_PERM, - .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | - NL80211_FLAG_NEED_RTNL, - }, - { - .cmd = NL80211_CMD_DEL_PMKSA, - .doit = nl80211_setdel_pmksa, - .policy = nl80211_policy, - .flags = GENL_ADMIN_PERM, - .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | - NL80211_FLAG_NEED_RTNL, - }, - { - .cmd = NL80211_CMD_FLUSH_PMKSA, - .doit = nl80211_flush_pmksa, - .policy = nl80211_policy, - .flags = GENL_ADMIN_PERM, - .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | - NL80211_FLAG_NEED_RTNL, - }, - { - .cmd = NL80211_CMD_REMAIN_ON_CHANNEL, - .doit = nl80211_remain_on_channel, - .policy = nl80211_policy, - .flags = GENL_ADMIN_PERM, - .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | - NL80211_FLAG_NEED_RTNL, - }, - { - .cmd = NL80211_CMD_CANCEL_REMAIN_ON_CHANNEL, - .doit = nl80211_cancel_remain_on_channel, - .policy = nl80211_policy, - .flags = GENL_ADMIN_PERM, - .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | - NL80211_FLAG_NEED_RTNL, - }, - { - .cmd = NL80211_CMD_SET_TX_BITRATE_MASK, - .doit = nl80211_set_tx_bitrate_mask, - .policy = nl80211_policy, - .flags = GENL_ADMIN_PERM, - .internal_flags = NL80211_FLAG_NEED_NETDEV | - NL80211_FLAG_NEED_RTNL, - }, - { - .cmd = NL80211_CMD_REGISTER_FRAME, - .doit = nl80211_register_mgmt, - .policy = nl80211_policy, - .flags = GENL_ADMIN_PERM, - .internal_flags = NL80211_FLAG_NEED_NETDEV | - NL80211_FLAG_NEED_RTNL, - }, - { - .cmd = NL80211_CMD_FRAME, - .doit = nl80211_tx_mgmt, - .policy = nl80211_policy, - .flags = GENL_ADMIN_PERM, - .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | - NL80211_FLAG_NEED_RTNL, - }, - { - .cmd = NL80211_CMD_FRAME_WAIT_CANCEL, - .doit = nl80211_tx_mgmt_cancel_wait, - .policy = nl80211_policy, - .flags = GENL_ADMIN_PERM, - .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | - NL80211_FLAG_NEED_RTNL, - }, - { - .cmd = NL80211_CMD_SET_POWER_SAVE, - .doit = nl80211_set_power_save, - .policy = nl80211_policy, - .flags = GENL_ADMIN_PERM, - .internal_flags = NL80211_FLAG_NEED_NETDEV | - NL80211_FLAG_NEED_RTNL, - }, - { - .cmd = NL80211_CMD_GET_POWER_SAVE, - .doit = nl80211_get_power_save, - .policy = nl80211_policy, - /* can be retrieved by unprivileged users */ - .internal_flags = NL80211_FLAG_NEED_NETDEV | - NL80211_FLAG_NEED_RTNL, - }, - { - .cmd = NL80211_CMD_SET_CQM, - .doit = nl80211_set_cqm, - .policy = nl80211_policy, - .flags = GENL_ADMIN_PERM, - .internal_flags = NL80211_FLAG_NEED_NETDEV | - NL80211_FLAG_NEED_RTNL, - }, - { - .cmd = NL80211_CMD_SET_CHANNEL, - .doit = nl80211_set_channel, - .policy = nl80211_policy, - .flags = GENL_ADMIN_PERM, - .internal_flags = NL80211_FLAG_NEED_NETDEV | - NL80211_FLAG_NEED_RTNL, - }, - { - .cmd = NL80211_CMD_SET_WDS_PEER, - .doit = nl80211_set_wds_peer, - .policy = nl80211_policy, - .flags = GENL_ADMIN_PERM, - .internal_flags = NL80211_FLAG_NEED_NETDEV | - NL80211_FLAG_NEED_RTNL, - }, - { - .cmd = NL80211_CMD_JOIN_MESH, - .doit = nl80211_join_mesh, - .policy = nl80211_policy, - .flags = GENL_ADMIN_PERM, - .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | - NL80211_FLAG_NEED_RTNL, - }, - { - .cmd = NL80211_CMD_LEAVE_MESH, - .doit = nl80211_leave_mesh, - .policy = nl80211_policy, - .flags = GENL_ADMIN_PERM, - .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | - NL80211_FLAG_NEED_RTNL, - }, - { - .cmd = NL80211_CMD_GET_WOWLAN, - .doit = nl80211_get_wowlan, - .policy = nl80211_policy, - /* can be retrieved by unprivileged users */ - .internal_flags = NL80211_FLAG_NEED_WIPHY | - NL80211_FLAG_NEED_RTNL, - }, - { - .cmd = NL80211_CMD_SET_WOWLAN, - .doit = nl80211_set_wowlan, - .policy = nl80211_policy, - .flags = GENL_ADMIN_PERM, - .internal_flags = NL80211_FLAG_NEED_WIPHY | - NL80211_FLAG_NEED_RTNL, - }, - { - .cmd = NL80211_CMD_SET_REKEY_OFFLOAD, - .doit = nl80211_set_rekey_data, - .policy = nl80211_policy, - .flags = GENL_ADMIN_PERM, - .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | - NL80211_FLAG_NEED_RTNL, - }, - { - .cmd = NL80211_CMD_TDLS_MGMT, - .doit = nl80211_tdls_mgmt, - .policy = nl80211_policy, - .flags = GENL_ADMIN_PERM, - .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | - NL80211_FLAG_NEED_RTNL, - }, - { - .cmd = NL80211_CMD_TDLS_OPER, - .doit = nl80211_tdls_oper, - .policy = nl80211_policy, - .flags = GENL_ADMIN_PERM, - .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | - NL80211_FLAG_NEED_RTNL, - }, - { - .cmd = NL80211_CMD_UNEXPECTED_FRAME, - .doit = nl80211_register_unexpected_frame, - .policy = nl80211_policy, - .flags = GENL_ADMIN_PERM, - .internal_flags = NL80211_FLAG_NEED_NETDEV | - NL80211_FLAG_NEED_RTNL, - }, - { - .cmd = NL80211_CMD_PROBE_CLIENT, - .doit = nl80211_probe_client, - .policy = nl80211_policy, - .flags = GENL_ADMIN_PERM, - .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | - NL80211_FLAG_NEED_RTNL, - }, - { - .cmd = NL80211_CMD_REGISTER_BEACONS, - .doit = nl80211_register_beacons, - .policy = nl80211_policy, - .flags = GENL_ADMIN_PERM, - .internal_flags = NL80211_FLAG_NEED_WIPHY | - NL80211_FLAG_NEED_RTNL, - }, - { - .cmd = NL80211_CMD_SET_NOACK_MAP, - .doit = nl80211_set_noack_map, - .policy = nl80211_policy, - .flags = GENL_ADMIN_PERM, - .internal_flags = NL80211_FLAG_NEED_NETDEV | - NL80211_FLAG_NEED_RTNL, - }, - -}; - -static struct genl_multicast_group nl80211_mlme_mcgrp = { - .name = "mlme", -}; - -/* multicast groups */ -static struct genl_multicast_group nl80211_config_mcgrp = { - .name = "config", -}; -static struct genl_multicast_group nl80211_scan_mcgrp = { - .name = "scan", -}; -static struct genl_multicast_group nl80211_regulatory_mcgrp = { - .name = "regulatory", -}; - -/* notification functions */ - -void nl80211_notify_dev_rename(struct cfg80211_registered_device *rdev) -{ - struct sk_buff *msg; - - msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL); - if (!msg) - return; - - if (nl80211_send_wiphy(msg, 0, 0, 0, rdev) < 0) { - nlmsg_free(msg); - return; - } - - genlmsg_multicast_netns(wiphy_net(&rdev->wiphy), msg, 0, - nl80211_config_mcgrp.id, GFP_KERNEL); -} - -static int nl80211_add_scan_req(struct sk_buff *msg, - struct cfg80211_registered_device *rdev) -{ - struct cfg80211_scan_request *req = rdev->scan_req; - struct nlattr *nest; - int i; - - ASSERT_RDEV_LOCK(rdev); - - if (WARN_ON(!req)) - return 0; - - nest = nla_nest_start(msg, NL80211_ATTR_SCAN_SSIDS); - if (!nest) - goto nla_put_failure; - for (i = 0; i < req->n_ssids; i++) - NLA_PUT(msg, i, req->ssids[i].ssid_len, req->ssids[i].ssid); - nla_nest_end(msg, nest); - - nest = nla_nest_start(msg, NL80211_ATTR_SCAN_FREQUENCIES); - if (!nest) - goto nla_put_failure; - for (i = 0; i < req->n_channels; i++) - NLA_PUT_U32(msg, i, req->channels[i]->center_freq); - nla_nest_end(msg, nest); - - if (req->ie) - NLA_PUT(msg, NL80211_ATTR_IE, req->ie_len, req->ie); - - return 0; - nla_put_failure: - return -ENOBUFS; -} - -static int nl80211_send_scan_msg(struct sk_buff *msg, - struct cfg80211_registered_device *rdev, - struct net_device *netdev, - u32 pid, u32 seq, int flags, - u32 cmd) -{ - void *hdr; - - hdr = nl80211hdr_put(msg, pid, seq, flags, cmd); - if (!hdr) - return -1; - - NLA_PUT_U32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx); - NLA_PUT_U32(msg, NL80211_ATTR_IFINDEX, netdev->ifindex); - - /* ignore errors and send incomplete event anyway */ - nl80211_add_scan_req(msg, rdev); - - return genlmsg_end(msg, hdr); - - nla_put_failure: - genlmsg_cancel(msg, hdr); - return -EMSGSIZE; -} - -static int -nl80211_send_sched_scan_msg(struct sk_buff *msg, - struct cfg80211_registered_device *rdev, - struct net_device *netdev, - u32 pid, u32 seq, int flags, u32 cmd) -{ - void *hdr; - - hdr = nl80211hdr_put(msg, pid, seq, flags, cmd); - if (!hdr) - return -1; - - NLA_PUT_U32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx); - NLA_PUT_U32(msg, NL80211_ATTR_IFINDEX, netdev->ifindex); - - return genlmsg_end(msg, hdr); - - nla_put_failure: - genlmsg_cancel(msg, hdr); - return -EMSGSIZE; -} - -void nl80211_send_scan_start(struct cfg80211_registered_device *rdev, - struct net_device *netdev) -{ - struct sk_buff *msg; - - msg = nlmsg_new(NLMSG_GOODSIZE, GFP_KERNEL); - if (!msg) - return; - - if (nl80211_send_scan_msg(msg, rdev, netdev, 0, 0, 0, - NL80211_CMD_TRIGGER_SCAN) < 0) { - nlmsg_free(msg); - return; - } - - genlmsg_multicast_netns(wiphy_net(&rdev->wiphy), msg, 0, - nl80211_scan_mcgrp.id, GFP_KERNEL); -} - -void nl80211_send_scan_done(struct cfg80211_registered_device *rdev, - struct net_device *netdev) -{ - struct sk_buff *msg; - - msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL); - if (!msg) - return; - - if (nl80211_send_scan_msg(msg, rdev, netdev, 0, 0, 0, - NL80211_CMD_NEW_SCAN_RESULTS) < 0) { - nlmsg_free(msg); - return; - } - - genlmsg_multicast_netns(wiphy_net(&rdev->wiphy), msg, 0, - nl80211_scan_mcgrp.id, GFP_KERNEL); -} - -void nl80211_send_scan_aborted(struct cfg80211_registered_device *rdev, - struct net_device *netdev) -{ - struct sk_buff *msg; - - msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL); - if (!msg) - return; - - if (nl80211_send_scan_msg(msg, rdev, netdev, 0, 0, 0, - NL80211_CMD_SCAN_ABORTED) < 0) { - nlmsg_free(msg); - return; - } - - genlmsg_multicast_netns(wiphy_net(&rdev->wiphy), msg, 0, - nl80211_scan_mcgrp.id, GFP_KERNEL); -} - -void nl80211_send_sched_scan_results(struct cfg80211_registered_device *rdev, - struct net_device *netdev) -{ - struct sk_buff *msg; - - msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL); - if (!msg) - return; - - if (nl80211_send_sched_scan_msg(msg, rdev, netdev, 0, 0, 0, - NL80211_CMD_SCHED_SCAN_RESULTS) < 0) { - nlmsg_free(msg); - return; - } - - genlmsg_multicast_netns(wiphy_net(&rdev->wiphy), msg, 0, - nl80211_scan_mcgrp.id, GFP_KERNEL); -} - -void nl80211_send_sched_scan(struct cfg80211_registered_device *rdev, - struct net_device *netdev, u32 cmd) -{ - struct sk_buff *msg; - - msg = nlmsg_new(NLMSG_GOODSIZE, GFP_KERNEL); - if (!msg) - return; - - if (nl80211_send_sched_scan_msg(msg, rdev, netdev, 0, 0, 0, cmd) < 0) { - nlmsg_free(msg); - return; - } - - genlmsg_multicast_netns(wiphy_net(&rdev->wiphy), msg, 0, - nl80211_scan_mcgrp.id, GFP_KERNEL); -} - -/* - * This can happen on global regulatory changes or device specific settings - * based on custom world regulatory domains. - */ -void nl80211_send_reg_change_event(struct regulatory_request *request) -{ - struct sk_buff *msg; - void *hdr; - - msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL); - if (!msg) - return; - - hdr = nl80211hdr_put(msg, 0, 0, 0, NL80211_CMD_REG_CHANGE); - if (!hdr) { - nlmsg_free(msg); - return; - } - - /* Userspace can always count this one always being set */ - NLA_PUT_U8(msg, NL80211_ATTR_REG_INITIATOR, request->initiator); - - if (request->alpha2[0] == '0' && request->alpha2[1] == '0') - NLA_PUT_U8(msg, NL80211_ATTR_REG_TYPE, - NL80211_REGDOM_TYPE_WORLD); - else if (request->alpha2[0] == '9' && request->alpha2[1] == '9') - NLA_PUT_U8(msg, NL80211_ATTR_REG_TYPE, - NL80211_REGDOM_TYPE_CUSTOM_WORLD); - else if ((request->alpha2[0] == '9' && request->alpha2[1] == '8') || - request->intersect) - NLA_PUT_U8(msg, NL80211_ATTR_REG_TYPE, - NL80211_REGDOM_TYPE_INTERSECTION); - else { - NLA_PUT_U8(msg, NL80211_ATTR_REG_TYPE, - NL80211_REGDOM_TYPE_COUNTRY); - NLA_PUT_STRING(msg, NL80211_ATTR_REG_ALPHA2, request->alpha2); - } - - if (wiphy_idx_valid(request->wiphy_idx)) - NLA_PUT_U32(msg, NL80211_ATTR_WIPHY, request->wiphy_idx); - - genlmsg_end(msg, hdr); - - rcu_read_lock(); - genlmsg_multicast_allns(msg, 0, nl80211_regulatory_mcgrp.id, - GFP_ATOMIC); - rcu_read_unlock(); - - return; - -nla_put_failure: - genlmsg_cancel(msg, hdr); - nlmsg_free(msg); -} - -static void nl80211_send_mlme_event(struct cfg80211_registered_device *rdev, - struct net_device *netdev, - const u8 *buf, size_t len, - enum nl80211_commands cmd, gfp_t gfp) -{ - struct sk_buff *msg; - void *hdr; - - msg = nlmsg_new(NLMSG_DEFAULT_SIZE, gfp); - if (!msg) - return; - - hdr = nl80211hdr_put(msg, 0, 0, 0, cmd); - if (!hdr) { - nlmsg_free(msg); - return; - } - - NLA_PUT_U32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx); - NLA_PUT_U32(msg, NL80211_ATTR_IFINDEX, netdev->ifindex); - NLA_PUT(msg, NL80211_ATTR_FRAME, len, buf); - - genlmsg_end(msg, hdr); - - genlmsg_multicast_netns(wiphy_net(&rdev->wiphy), msg, 0, - nl80211_mlme_mcgrp.id, gfp); - return; - - nla_put_failure: - genlmsg_cancel(msg, hdr); - nlmsg_free(msg); -} - -void nl80211_send_rx_auth(struct cfg80211_registered_device *rdev, - struct net_device *netdev, const u8 *buf, - size_t len, gfp_t gfp) -{ - nl80211_send_mlme_event(rdev, netdev, buf, len, - NL80211_CMD_AUTHENTICATE, gfp); -} - -void nl80211_send_rx_assoc(struct cfg80211_registered_device *rdev, - struct net_device *netdev, const u8 *buf, - size_t len, gfp_t gfp) -{ - nl80211_send_mlme_event(rdev, netdev, buf, len, - NL80211_CMD_ASSOCIATE, gfp); -} - -void nl80211_send_deauth(struct cfg80211_registered_device *rdev, - struct net_device *netdev, const u8 *buf, - size_t len, gfp_t gfp) -{ - nl80211_send_mlme_event(rdev, netdev, buf, len, - NL80211_CMD_DEAUTHENTICATE, gfp); -} - -void nl80211_send_disassoc(struct cfg80211_registered_device *rdev, - struct net_device *netdev, const u8 *buf, - size_t len, gfp_t gfp) -{ - nl80211_send_mlme_event(rdev, netdev, buf, len, - NL80211_CMD_DISASSOCIATE, gfp); -} - -void nl80211_send_unprot_deauth(struct cfg80211_registered_device *rdev, - struct net_device *netdev, const u8 *buf, - size_t len, gfp_t gfp) -{ - nl80211_send_mlme_event(rdev, netdev, buf, len, - NL80211_CMD_UNPROT_DEAUTHENTICATE, gfp); -} - -void nl80211_send_unprot_disassoc(struct cfg80211_registered_device *rdev, - struct net_device *netdev, const u8 *buf, - size_t len, gfp_t gfp) -{ - nl80211_send_mlme_event(rdev, netdev, buf, len, - NL80211_CMD_UNPROT_DISASSOCIATE, gfp); -} - -static void nl80211_send_mlme_timeout(struct cfg80211_registered_device *rdev, - struct net_device *netdev, int cmd, - const u8 *addr, gfp_t gfp) -{ - struct sk_buff *msg; - void *hdr; - - msg = nlmsg_new(NLMSG_DEFAULT_SIZE, gfp); - if (!msg) - return; - - hdr = nl80211hdr_put(msg, 0, 0, 0, cmd); - if (!hdr) { - nlmsg_free(msg); - return; - } - - NLA_PUT_U32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx); - NLA_PUT_U32(msg, NL80211_ATTR_IFINDEX, netdev->ifindex); - NLA_PUT_FLAG(msg, NL80211_ATTR_TIMED_OUT); - NLA_PUT(msg, NL80211_ATTR_MAC, ETH_ALEN, addr); - - genlmsg_end(msg, hdr); - - genlmsg_multicast_netns(wiphy_net(&rdev->wiphy), msg, 0, - nl80211_mlme_mcgrp.id, gfp); - return; - - nla_put_failure: - genlmsg_cancel(msg, hdr); - nlmsg_free(msg); -} - -void nl80211_send_auth_timeout(struct cfg80211_registered_device *rdev, - struct net_device *netdev, const u8 *addr, - gfp_t gfp) -{ - nl80211_send_mlme_timeout(rdev, netdev, NL80211_CMD_AUTHENTICATE, - addr, gfp); -} - -void nl80211_send_assoc_timeout(struct cfg80211_registered_device *rdev, - struct net_device *netdev, const u8 *addr, - gfp_t gfp) -{ - nl80211_send_mlme_timeout(rdev, netdev, NL80211_CMD_ASSOCIATE, - addr, gfp); -} - -void nl80211_send_connect_result(struct cfg80211_registered_device *rdev, - struct net_device *netdev, const u8 *bssid, - const u8 *req_ie, size_t req_ie_len, - const u8 *resp_ie, size_t resp_ie_len, - u16 status, gfp_t gfp) -{ - struct sk_buff *msg; - void *hdr; - - msg = nlmsg_new(NLMSG_GOODSIZE, gfp); - if (!msg) - return; - - hdr = nl80211hdr_put(msg, 0, 0, 0, NL80211_CMD_CONNECT); - if (!hdr) { - nlmsg_free(msg); - return; - } - - NLA_PUT_U32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx); - NLA_PUT_U32(msg, NL80211_ATTR_IFINDEX, netdev->ifindex); - if (bssid) - NLA_PUT(msg, NL80211_ATTR_MAC, ETH_ALEN, bssid); - NLA_PUT_U16(msg, NL80211_ATTR_STATUS_CODE, status); - if (req_ie) - NLA_PUT(msg, NL80211_ATTR_REQ_IE, req_ie_len, req_ie); - if (resp_ie) - NLA_PUT(msg, NL80211_ATTR_RESP_IE, resp_ie_len, resp_ie); - - genlmsg_end(msg, hdr); - - genlmsg_multicast_netns(wiphy_net(&rdev->wiphy), msg, 0, - nl80211_mlme_mcgrp.id, gfp); - return; - - nla_put_failure: - genlmsg_cancel(msg, hdr); - nlmsg_free(msg); - -} - -void nl80211_send_roamed(struct cfg80211_registered_device *rdev, - struct net_device *netdev, const u8 *bssid, - const u8 *req_ie, size_t req_ie_len, - const u8 *resp_ie, size_t resp_ie_len, gfp_t gfp) -{ - struct sk_buff *msg; - void *hdr; - - msg = nlmsg_new(NLMSG_GOODSIZE, gfp); - if (!msg) - return; - - hdr = nl80211hdr_put(msg, 0, 0, 0, NL80211_CMD_ROAM); - if (!hdr) { - nlmsg_free(msg); - return; - } - - NLA_PUT_U32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx); - NLA_PUT_U32(msg, NL80211_ATTR_IFINDEX, netdev->ifindex); - NLA_PUT(msg, NL80211_ATTR_MAC, ETH_ALEN, bssid); - if (req_ie) - NLA_PUT(msg, NL80211_ATTR_REQ_IE, req_ie_len, req_ie); - if (resp_ie) - NLA_PUT(msg, NL80211_ATTR_RESP_IE, resp_ie_len, resp_ie); - - genlmsg_end(msg, hdr); - - genlmsg_multicast_netns(wiphy_net(&rdev->wiphy), msg, 0, - nl80211_mlme_mcgrp.id, gfp); - return; - - nla_put_failure: - genlmsg_cancel(msg, hdr); - nlmsg_free(msg); - -} - -void nl80211_send_disconnected(struct cfg80211_registered_device *rdev, - struct net_device *netdev, u16 reason, - const u8 *ie, size_t ie_len, bool from_ap) -{ - struct sk_buff *msg; - void *hdr; - - msg = nlmsg_new(NLMSG_GOODSIZE, GFP_KERNEL); - if (!msg) - return; - - hdr = nl80211hdr_put(msg, 0, 0, 0, NL80211_CMD_DISCONNECT); - if (!hdr) { - nlmsg_free(msg); - return; - } - - NLA_PUT_U32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx); - NLA_PUT_U32(msg, NL80211_ATTR_IFINDEX, netdev->ifindex); - if (from_ap && reason) - NLA_PUT_U16(msg, NL80211_ATTR_REASON_CODE, reason); - if (from_ap) - NLA_PUT_FLAG(msg, NL80211_ATTR_DISCONNECTED_BY_AP); - if (ie) - NLA_PUT(msg, NL80211_ATTR_IE, ie_len, ie); - - genlmsg_end(msg, hdr); - - genlmsg_multicast_netns(wiphy_net(&rdev->wiphy), msg, 0, - nl80211_mlme_mcgrp.id, GFP_KERNEL); - return; - - nla_put_failure: - genlmsg_cancel(msg, hdr); - nlmsg_free(msg); - -} - -void nl80211_send_ibss_bssid(struct cfg80211_registered_device *rdev, - struct net_device *netdev, const u8 *bssid, - gfp_t gfp) -{ - struct sk_buff *msg; - void *hdr; - - msg = nlmsg_new(NLMSG_DEFAULT_SIZE, gfp); - if (!msg) - return; - - hdr = nl80211hdr_put(msg, 0, 0, 0, NL80211_CMD_JOIN_IBSS); - if (!hdr) { - nlmsg_free(msg); - return; - } - - NLA_PUT_U32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx); - NLA_PUT_U32(msg, NL80211_ATTR_IFINDEX, netdev->ifindex); - NLA_PUT(msg, NL80211_ATTR_MAC, ETH_ALEN, bssid); - - genlmsg_end(msg, hdr); - - genlmsg_multicast_netns(wiphy_net(&rdev->wiphy), msg, 0, - nl80211_mlme_mcgrp.id, gfp); - return; - - nla_put_failure: - genlmsg_cancel(msg, hdr); - nlmsg_free(msg); -} - -void nl80211_send_new_peer_candidate(struct cfg80211_registered_device *rdev, - struct net_device *netdev, - const u8 *macaddr, const u8* ie, u8 ie_len, - gfp_t gfp) -{ - struct sk_buff *msg; - void *hdr; - - msg = nlmsg_new(NLMSG_DEFAULT_SIZE, gfp); - if (!msg) - return; - - hdr = nl80211hdr_put(msg, 0, 0, 0, NL80211_CMD_NEW_PEER_CANDIDATE); - if (!hdr) { - nlmsg_free(msg); - return; - } - - NLA_PUT_U32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx); - NLA_PUT_U32(msg, NL80211_ATTR_IFINDEX, netdev->ifindex); - NLA_PUT(msg, NL80211_ATTR_MAC, ETH_ALEN, macaddr); - if (ie_len && ie) - NLA_PUT(msg, NL80211_ATTR_IE, ie_len , ie); - - genlmsg_end(msg, hdr); - - genlmsg_multicast_netns(wiphy_net(&rdev->wiphy), msg, 0, - nl80211_mlme_mcgrp.id, gfp); - return; - - nla_put_failure: - genlmsg_cancel(msg, hdr); - nlmsg_free(msg); -} - -void nl80211_michael_mic_failure(struct cfg80211_registered_device *rdev, - struct net_device *netdev, const u8 *addr, - enum nl80211_key_type key_type, int key_id, - const u8 *tsc, gfp_t gfp) -{ - struct sk_buff *msg; - void *hdr; - - msg = nlmsg_new(NLMSG_DEFAULT_SIZE, gfp); - if (!msg) - return; - - hdr = nl80211hdr_put(msg, 0, 0, 0, NL80211_CMD_MICHAEL_MIC_FAILURE); - if (!hdr) { - nlmsg_free(msg); - return; - } - - NLA_PUT_U32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx); - NLA_PUT_U32(msg, NL80211_ATTR_IFINDEX, netdev->ifindex); - if (addr) - NLA_PUT(msg, NL80211_ATTR_MAC, ETH_ALEN, addr); - NLA_PUT_U32(msg, NL80211_ATTR_KEY_TYPE, key_type); - if (key_id != -1) - NLA_PUT_U8(msg, NL80211_ATTR_KEY_IDX, key_id); - if (tsc) - NLA_PUT(msg, NL80211_ATTR_KEY_SEQ, 6, tsc); - - genlmsg_end(msg, hdr); - - genlmsg_multicast_netns(wiphy_net(&rdev->wiphy), msg, 0, - nl80211_mlme_mcgrp.id, gfp); - return; - - nla_put_failure: - genlmsg_cancel(msg, hdr); - nlmsg_free(msg); -} - -void nl80211_send_beacon_hint_event(struct wiphy *wiphy, - struct ieee80211_channel *channel_before, - struct ieee80211_channel *channel_after) -{ - struct sk_buff *msg; - void *hdr; - struct nlattr *nl_freq; - - msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_ATOMIC); - if (!msg) - return; - - hdr = nl80211hdr_put(msg, 0, 0, 0, NL80211_CMD_REG_BEACON_HINT); - if (!hdr) { - nlmsg_free(msg); - return; - } - - /* - * Since we are applying the beacon hint to a wiphy we know its - * wiphy_idx is valid - */ - NLA_PUT_U32(msg, NL80211_ATTR_WIPHY, get_wiphy_idx(wiphy)); - - /* Before */ - nl_freq = nla_nest_start(msg, NL80211_ATTR_FREQ_BEFORE); - if (!nl_freq) - goto nla_put_failure; - if (nl80211_msg_put_channel(msg, channel_before)) - goto nla_put_failure; - nla_nest_end(msg, nl_freq); - - /* After */ - nl_freq = nla_nest_start(msg, NL80211_ATTR_FREQ_AFTER); - if (!nl_freq) - goto nla_put_failure; - if (nl80211_msg_put_channel(msg, channel_after)) - goto nla_put_failure; - nla_nest_end(msg, nl_freq); - - genlmsg_end(msg, hdr); - - rcu_read_lock(); - genlmsg_multicast_allns(msg, 0, nl80211_regulatory_mcgrp.id, - GFP_ATOMIC); - rcu_read_unlock(); - - return; - -nla_put_failure: - genlmsg_cancel(msg, hdr); - nlmsg_free(msg); -} - -static void nl80211_send_remain_on_chan_event( - int cmd, struct cfg80211_registered_device *rdev, - struct net_device *netdev, u64 cookie, - struct ieee80211_channel *chan, - enum nl80211_channel_type channel_type, - unsigned int duration, gfp_t gfp) -{ - struct sk_buff *msg; - void *hdr; - - msg = nlmsg_new(NLMSG_DEFAULT_SIZE, gfp); - if (!msg) - return; - - hdr = nl80211hdr_put(msg, 0, 0, 0, cmd); - if (!hdr) { - nlmsg_free(msg); - return; - } - - NLA_PUT_U32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx); - NLA_PUT_U32(msg, NL80211_ATTR_IFINDEX, netdev->ifindex); - NLA_PUT_U32(msg, NL80211_ATTR_WIPHY_FREQ, chan->center_freq); - NLA_PUT_U32(msg, NL80211_ATTR_WIPHY_CHANNEL_TYPE, channel_type); - NLA_PUT_U64(msg, NL80211_ATTR_COOKIE, cookie); - - if (cmd == NL80211_CMD_REMAIN_ON_CHANNEL) - NLA_PUT_U32(msg, NL80211_ATTR_DURATION, duration); - - genlmsg_end(msg, hdr); - - genlmsg_multicast_netns(wiphy_net(&rdev->wiphy), msg, 0, - nl80211_mlme_mcgrp.id, gfp); - return; - - nla_put_failure: - genlmsg_cancel(msg, hdr); - nlmsg_free(msg); -} - -void nl80211_send_remain_on_channel(struct cfg80211_registered_device *rdev, - struct net_device *netdev, u64 cookie, - struct ieee80211_channel *chan, - enum nl80211_channel_type channel_type, - unsigned int duration, gfp_t gfp) -{ - nl80211_send_remain_on_chan_event(NL80211_CMD_REMAIN_ON_CHANNEL, - rdev, netdev, cookie, chan, - channel_type, duration, gfp); -} - -void nl80211_send_remain_on_channel_cancel( - struct cfg80211_registered_device *rdev, struct net_device *netdev, - u64 cookie, struct ieee80211_channel *chan, - enum nl80211_channel_type channel_type, gfp_t gfp) -{ - nl80211_send_remain_on_chan_event(NL80211_CMD_CANCEL_REMAIN_ON_CHANNEL, - rdev, netdev, cookie, chan, - channel_type, 0, gfp); -} - -void nl80211_send_sta_event(struct cfg80211_registered_device *rdev, - struct net_device *dev, const u8 *mac_addr, - struct station_info *sinfo, gfp_t gfp) -{ - struct sk_buff *msg; - - msg = nlmsg_new(NLMSG_GOODSIZE, gfp); - if (!msg) - return; - - if (nl80211_send_station(msg, 0, 0, 0, - rdev, dev, mac_addr, sinfo) < 0) { - nlmsg_free(msg); - return; - } - - genlmsg_multicast_netns(wiphy_net(&rdev->wiphy), msg, 0, - nl80211_mlme_mcgrp.id, gfp); -} - -void nl80211_send_sta_del_event(struct cfg80211_registered_device *rdev, - struct net_device *dev, const u8 *mac_addr, - gfp_t gfp) -{ - struct sk_buff *msg; - void *hdr; - - msg = nlmsg_new(NLMSG_GOODSIZE, gfp); - if (!msg) - return; - - hdr = nl80211hdr_put(msg, 0, 0, 0, NL80211_CMD_DEL_STATION); - if (!hdr) { - nlmsg_free(msg); - return; - } - - NLA_PUT_U32(msg, NL80211_ATTR_IFINDEX, dev->ifindex); - NLA_PUT(msg, NL80211_ATTR_MAC, ETH_ALEN, mac_addr); - - genlmsg_end(msg, hdr); - - genlmsg_multicast_netns(wiphy_net(&rdev->wiphy), msg, 0, - nl80211_mlme_mcgrp.id, gfp); - return; - - nla_put_failure: - genlmsg_cancel(msg, hdr); - nlmsg_free(msg); -} - -static bool __nl80211_unexpected_frame(struct net_device *dev, u8 cmd, - const u8 *addr, gfp_t gfp) -{ - struct wireless_dev *wdev = dev->ieee80211_ptr; - struct cfg80211_registered_device *rdev = wiphy_to_dev(wdev->wiphy); - struct sk_buff *msg; - void *hdr; - int err; - u32 nlpid = ACCESS_ONCE(wdev->ap_unexpected_nlpid); - - if (!nlpid) - return false; - - msg = nlmsg_new(100, gfp); - if (!msg) - return true; - - hdr = nl80211hdr_put(msg, 0, 0, 0, cmd); - if (!hdr) { - nlmsg_free(msg); - return true; - } - - NLA_PUT_U32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx); - NLA_PUT_U32(msg, NL80211_ATTR_IFINDEX, dev->ifindex); - NLA_PUT(msg, NL80211_ATTR_MAC, ETH_ALEN, addr); - - err = genlmsg_end(msg, hdr); - if (err < 0) { - nlmsg_free(msg); - return true; - } - - genlmsg_unicast(wiphy_net(&rdev->wiphy), msg, nlpid); - return true; - - nla_put_failure: - genlmsg_cancel(msg, hdr); - nlmsg_free(msg); - return true; -} - -bool nl80211_unexpected_frame(struct net_device *dev, const u8 *addr, gfp_t gfp) -{ - return __nl80211_unexpected_frame(dev, NL80211_CMD_UNEXPECTED_FRAME, - addr, gfp); -} - -bool nl80211_unexpected_4addr_frame(struct net_device *dev, - const u8 *addr, gfp_t gfp) -{ - return __nl80211_unexpected_frame(dev, - NL80211_CMD_UNEXPECTED_4ADDR_FRAME, - addr, gfp); -} - -int nl80211_send_mgmt(struct cfg80211_registered_device *rdev, - struct net_device *netdev, u32 nlpid, - int freq, int sig_dbm, - const u8 *buf, size_t len, gfp_t gfp) -{ - struct sk_buff *msg; - void *hdr; - - msg = nlmsg_new(NLMSG_DEFAULT_SIZE, gfp); - if (!msg) - return -ENOMEM; - - hdr = nl80211hdr_put(msg, 0, 0, 0, NL80211_CMD_FRAME); - if (!hdr) { - nlmsg_free(msg); - return -ENOMEM; - } - - NLA_PUT_U32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx); - NLA_PUT_U32(msg, NL80211_ATTR_IFINDEX, netdev->ifindex); - NLA_PUT_U32(msg, NL80211_ATTR_WIPHY_FREQ, freq); - if (sig_dbm) - NLA_PUT_U32(msg, NL80211_ATTR_RX_SIGNAL_DBM, sig_dbm); - NLA_PUT(msg, NL80211_ATTR_FRAME, len, buf); - - genlmsg_end(msg, hdr); - - return genlmsg_unicast(wiphy_net(&rdev->wiphy), msg, nlpid); - - nla_put_failure: - genlmsg_cancel(msg, hdr); - nlmsg_free(msg); - return -ENOBUFS; -} - -void nl80211_send_mgmt_tx_status(struct cfg80211_registered_device *rdev, - struct net_device *netdev, u64 cookie, - const u8 *buf, size_t len, bool ack, - gfp_t gfp) -{ - struct sk_buff *msg; - void *hdr; - - msg = nlmsg_new(NLMSG_DEFAULT_SIZE, gfp); - if (!msg) - return; - - hdr = nl80211hdr_put(msg, 0, 0, 0, NL80211_CMD_FRAME_TX_STATUS); - if (!hdr) { - nlmsg_free(msg); - return; - } - - NLA_PUT_U32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx); - NLA_PUT_U32(msg, NL80211_ATTR_IFINDEX, netdev->ifindex); - NLA_PUT(msg, NL80211_ATTR_FRAME, len, buf); - NLA_PUT_U64(msg, NL80211_ATTR_COOKIE, cookie); - if (ack) - NLA_PUT_FLAG(msg, NL80211_ATTR_ACK); - - genlmsg_end(msg, hdr); - - genlmsg_multicast(msg, 0, nl80211_mlme_mcgrp.id, gfp); - return; - - nla_put_failure: - genlmsg_cancel(msg, hdr); - nlmsg_free(msg); -} - -void -nl80211_send_cqm_rssi_notify(struct cfg80211_registered_device *rdev, - struct net_device *netdev, - enum nl80211_cqm_rssi_threshold_event rssi_event, - gfp_t gfp) -{ - struct sk_buff *msg; - struct nlattr *pinfoattr; - void *hdr; - - msg = nlmsg_new(NLMSG_GOODSIZE, gfp); - if (!msg) - return; - - hdr = nl80211hdr_put(msg, 0, 0, 0, NL80211_CMD_NOTIFY_CQM); - if (!hdr) { - nlmsg_free(msg); - return; - } - - NLA_PUT_U32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx); - NLA_PUT_U32(msg, NL80211_ATTR_IFINDEX, netdev->ifindex); - - pinfoattr = nla_nest_start(msg, NL80211_ATTR_CQM); - if (!pinfoattr) - goto nla_put_failure; - - NLA_PUT_U32(msg, NL80211_ATTR_CQM_RSSI_THRESHOLD_EVENT, - rssi_event); - - nla_nest_end(msg, pinfoattr); - - genlmsg_end(msg, hdr); - - genlmsg_multicast_netns(wiphy_net(&rdev->wiphy), msg, 0, - nl80211_mlme_mcgrp.id, gfp); - return; - - nla_put_failure: - genlmsg_cancel(msg, hdr); - nlmsg_free(msg); -} - -void nl80211_gtk_rekey_notify(struct cfg80211_registered_device *rdev, - struct net_device *netdev, const u8 *bssid, - const u8 *replay_ctr, gfp_t gfp) -{ - struct sk_buff *msg; - struct nlattr *rekey_attr; - void *hdr; - - msg = nlmsg_new(NLMSG_GOODSIZE, gfp); - if (!msg) - return; - - hdr = nl80211hdr_put(msg, 0, 0, 0, NL80211_CMD_SET_REKEY_OFFLOAD); - if (!hdr) { - nlmsg_free(msg); - return; - } - - NLA_PUT_U32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx); - NLA_PUT_U32(msg, NL80211_ATTR_IFINDEX, netdev->ifindex); - NLA_PUT(msg, NL80211_ATTR_MAC, ETH_ALEN, bssid); - - rekey_attr = nla_nest_start(msg, NL80211_ATTR_REKEY_DATA); - if (!rekey_attr) - goto nla_put_failure; - - NLA_PUT(msg, NL80211_REKEY_DATA_REPLAY_CTR, - NL80211_REPLAY_CTR_LEN, replay_ctr); - - nla_nest_end(msg, rekey_attr); - - genlmsg_end(msg, hdr); - - genlmsg_multicast_netns(wiphy_net(&rdev->wiphy), msg, 0, - nl80211_mlme_mcgrp.id, gfp); - return; - - nla_put_failure: - genlmsg_cancel(msg, hdr); - nlmsg_free(msg); -} - -void nl80211_pmksa_candidate_notify(struct cfg80211_registered_device *rdev, - struct net_device *netdev, int index, - const u8 *bssid, bool preauth, gfp_t gfp) -{ - struct sk_buff *msg; - struct nlattr *attr; - void *hdr; - - msg = nlmsg_new(NLMSG_GOODSIZE, gfp); - if (!msg) - return; - - hdr = nl80211hdr_put(msg, 0, 0, 0, NL80211_CMD_PMKSA_CANDIDATE); - if (!hdr) { - nlmsg_free(msg); - return; - } - - NLA_PUT_U32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx); - NLA_PUT_U32(msg, NL80211_ATTR_IFINDEX, netdev->ifindex); - - attr = nla_nest_start(msg, NL80211_ATTR_PMKSA_CANDIDATE); - if (!attr) - goto nla_put_failure; - - NLA_PUT_U32(msg, NL80211_PMKSA_CANDIDATE_INDEX, index); - NLA_PUT(msg, NL80211_PMKSA_CANDIDATE_BSSID, ETH_ALEN, bssid); - if (preauth) - NLA_PUT_FLAG(msg, NL80211_PMKSA_CANDIDATE_PREAUTH); - - nla_nest_end(msg, attr); - - genlmsg_end(msg, hdr); - - genlmsg_multicast_netns(wiphy_net(&rdev->wiphy), msg, 0, - nl80211_mlme_mcgrp.id, gfp); - return; - - nla_put_failure: - genlmsg_cancel(msg, hdr); - nlmsg_free(msg); -} - -void -nl80211_send_cqm_pktloss_notify(struct cfg80211_registered_device *rdev, - struct net_device *netdev, const u8 *peer, - u32 num_packets, gfp_t gfp) -{ - struct sk_buff *msg; - struct nlattr *pinfoattr; - void *hdr; - - msg = nlmsg_new(NLMSG_GOODSIZE, gfp); - if (!msg) - return; - - hdr = nl80211hdr_put(msg, 0, 0, 0, NL80211_CMD_NOTIFY_CQM); - if (!hdr) { - nlmsg_free(msg); - return; - } - - NLA_PUT_U32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx); - NLA_PUT_U32(msg, NL80211_ATTR_IFINDEX, netdev->ifindex); - NLA_PUT(msg, NL80211_ATTR_MAC, ETH_ALEN, peer); - - pinfoattr = nla_nest_start(msg, NL80211_ATTR_CQM); - if (!pinfoattr) - goto nla_put_failure; - - NLA_PUT_U32(msg, NL80211_ATTR_CQM_PKT_LOSS_EVENT, num_packets); - - nla_nest_end(msg, pinfoattr); - - genlmsg_end(msg, hdr); - - genlmsg_multicast_netns(wiphy_net(&rdev->wiphy), msg, 0, - nl80211_mlme_mcgrp.id, gfp); - return; - - nla_put_failure: - genlmsg_cancel(msg, hdr); - nlmsg_free(msg); -} - -void cfg80211_probe_status(struct net_device *dev, const u8 *addr, - u64 cookie, bool acked, gfp_t gfp) -{ - struct wireless_dev *wdev = dev->ieee80211_ptr; - struct cfg80211_registered_device *rdev = wiphy_to_dev(wdev->wiphy); - struct sk_buff *msg; - void *hdr; - int err; - - msg = nlmsg_new(NLMSG_GOODSIZE, gfp); - if (!msg) - return; - - hdr = nl80211hdr_put(msg, 0, 0, 0, NL80211_CMD_PROBE_CLIENT); - if (!hdr) { - nlmsg_free(msg); - return; - } - - NLA_PUT_U32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx); - NLA_PUT_U32(msg, NL80211_ATTR_IFINDEX, dev->ifindex); - NLA_PUT(msg, NL80211_ATTR_MAC, ETH_ALEN, addr); - NLA_PUT_U64(msg, NL80211_ATTR_COOKIE, cookie); - if (acked) - NLA_PUT_FLAG(msg, NL80211_ATTR_ACK); - - err = genlmsg_end(msg, hdr); - if (err < 0) { - nlmsg_free(msg); - return; - } - - genlmsg_multicast_netns(wiphy_net(&rdev->wiphy), msg, 0, - nl80211_mlme_mcgrp.id, gfp); - return; - - nla_put_failure: - genlmsg_cancel(msg, hdr); - nlmsg_free(msg); -} -EXPORT_SYMBOL(cfg80211_probe_status); - -void cfg80211_report_obss_beacon(struct wiphy *wiphy, - const u8 *frame, size_t len, - int freq, int sig_dbm, gfp_t gfp) -{ - struct cfg80211_registered_device *rdev = wiphy_to_dev(wiphy); - struct sk_buff *msg; - void *hdr; - u32 nlpid = ACCESS_ONCE(rdev->ap_beacons_nlpid); - - if (!nlpid) - return; - - msg = nlmsg_new(len + 100, gfp); - if (!msg) - return; - - hdr = nl80211hdr_put(msg, 0, 0, 0, NL80211_CMD_FRAME); - if (!hdr) { - nlmsg_free(msg); - return; - } - - NLA_PUT_U32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx); - if (freq) - NLA_PUT_U32(msg, NL80211_ATTR_WIPHY_FREQ, freq); - if (sig_dbm) - NLA_PUT_U32(msg, NL80211_ATTR_RX_SIGNAL_DBM, sig_dbm); - NLA_PUT(msg, NL80211_ATTR_FRAME, len, frame); - - genlmsg_end(msg, hdr); - - genlmsg_unicast(wiphy_net(&rdev->wiphy), msg, nlpid); - return; - - nla_put_failure: - genlmsg_cancel(msg, hdr); - nlmsg_free(msg); -} -EXPORT_SYMBOL(cfg80211_report_obss_beacon); - -static int nl80211_netlink_notify(struct notifier_block * nb, - unsigned long state, - void *_notify) -{ - struct netlink_notify *notify = _notify; - struct cfg80211_registered_device *rdev; - struct wireless_dev *wdev; - - if (state != NETLINK_URELEASE) - return NOTIFY_DONE; - - rcu_read_lock(); - - list_for_each_entry_rcu(rdev, &cfg80211_rdev_list, list) { - list_for_each_entry_rcu(wdev, &rdev->netdev_list, list) - cfg80211_mlme_unregister_socket(wdev, notify->pid); - if (rdev->ap_beacons_nlpid == notify->pid) - rdev->ap_beacons_nlpid = 0; - } - - rcu_read_unlock(); - - return NOTIFY_DONE; -} - -static struct notifier_block nl80211_netlink_notifier = { - .notifier_call = nl80211_netlink_notify, -}; - -/* initialisation/exit functions */ - -int nl80211_init(void) -{ - int err; - - err = genl_register_family_with_ops(&nl80211_fam, - nl80211_ops, ARRAY_SIZE(nl80211_ops)); - if (err) - return err; - - err = genl_register_mc_group(&nl80211_fam, &nl80211_config_mcgrp); - if (err) - goto err_out; - - err = genl_register_mc_group(&nl80211_fam, &nl80211_scan_mcgrp); - if (err) - goto err_out; - - err = genl_register_mc_group(&nl80211_fam, &nl80211_regulatory_mcgrp); - if (err) - goto err_out; - - err = genl_register_mc_group(&nl80211_fam, &nl80211_mlme_mcgrp); - if (err) - goto err_out; - -#ifdef CONFIG_NL80211_TESTMODE - err = genl_register_mc_group(&nl80211_fam, &nl80211_testmode_mcgrp); - if (err) - goto err_out; -#endif - - err = netlink_register_notifier(&nl80211_netlink_notifier); - if (err) - goto err_out; - - return 0; - err_out: - genl_unregister_family(&nl80211_fam); - return err; -} - -void nl80211_exit(void) -{ - netlink_unregister_notifier(&nl80211_netlink_notifier); - genl_unregister_family(&nl80211_fam); -} diff --git a/openairITS/mac/DOT11/net/wireless/nl80211.h b/openairITS/mac/DOT11/net/wireless/nl80211.h deleted file mode 100644 index 4ffe50df9f..0000000000 --- a/openairITS/mac/DOT11/net/wireless/nl80211.h +++ /dev/null @@ -1,126 +0,0 @@ -#ifndef __NET_WIRELESS_NL80211_H -#define __NET_WIRELESS_NL80211_H - -#include "core.h" - -int nl80211_init(void); -void nl80211_exit(void); -void nl80211_notify_dev_rename(struct cfg80211_registered_device *rdev); -void nl80211_send_scan_start(struct cfg80211_registered_device *rdev, - struct net_device *netdev); -void nl80211_send_scan_done(struct cfg80211_registered_device *rdev, - struct net_device *netdev); -void nl80211_send_scan_aborted(struct cfg80211_registered_device *rdev, - struct net_device *netdev); -void nl80211_send_sched_scan(struct cfg80211_registered_device *rdev, - struct net_device *netdev, u32 cmd); -void nl80211_send_sched_scan_results(struct cfg80211_registered_device *rdev, - struct net_device *netdev); -void nl80211_send_reg_change_event(struct regulatory_request *request); -void nl80211_send_rx_auth(struct cfg80211_registered_device *rdev, - struct net_device *netdev, - const u8 *buf, size_t len, gfp_t gfp); -void nl80211_send_rx_assoc(struct cfg80211_registered_device *rdev, - struct net_device *netdev, - const u8 *buf, size_t len, gfp_t gfp); -void nl80211_send_deauth(struct cfg80211_registered_device *rdev, - struct net_device *netdev, - const u8 *buf, size_t len, gfp_t gfp); -void nl80211_send_disassoc(struct cfg80211_registered_device *rdev, - struct net_device *netdev, - const u8 *buf, size_t len, gfp_t gfp); -void nl80211_send_unprot_deauth(struct cfg80211_registered_device *rdev, - struct net_device *netdev, - const u8 *buf, size_t len, gfp_t gfp); -void nl80211_send_unprot_disassoc(struct cfg80211_registered_device *rdev, - struct net_device *netdev, - const u8 *buf, size_t len, gfp_t gfp); -void nl80211_send_auth_timeout(struct cfg80211_registered_device *rdev, - struct net_device *netdev, - const u8 *addr, gfp_t gfp); -void nl80211_send_assoc_timeout(struct cfg80211_registered_device *rdev, - struct net_device *netdev, - const u8 *addr, gfp_t gfp); -void nl80211_send_connect_result(struct cfg80211_registered_device *rdev, - struct net_device *netdev, const u8 *bssid, - const u8 *req_ie, size_t req_ie_len, - const u8 *resp_ie, size_t resp_ie_len, - u16 status, gfp_t gfp); -void nl80211_send_roamed(struct cfg80211_registered_device *rdev, - struct net_device *netdev, const u8 *bssid, - const u8 *req_ie, size_t req_ie_len, - const u8 *resp_ie, size_t resp_ie_len, gfp_t gfp); -void nl80211_send_disconnected(struct cfg80211_registered_device *rdev, - struct net_device *netdev, u16 reason, - const u8 *ie, size_t ie_len, bool from_ap); - -void nl80211_send_new_peer_candidate(struct cfg80211_registered_device *rdev, - struct net_device *netdev, - const u8 *macaddr, const u8* ie, u8 ie_len, - gfp_t gfp); -void -nl80211_michael_mic_failure(struct cfg80211_registered_device *rdev, - struct net_device *netdev, const u8 *addr, - enum nl80211_key_type key_type, - int key_id, const u8 *tsc, gfp_t gfp); - -void -nl80211_send_beacon_hint_event(struct wiphy *wiphy, - struct ieee80211_channel *channel_before, - struct ieee80211_channel *channel_after); - -void nl80211_send_ibss_bssid(struct cfg80211_registered_device *rdev, - struct net_device *netdev, const u8 *bssid, - gfp_t gfp); - -void nl80211_send_remain_on_channel(struct cfg80211_registered_device *rdev, - struct net_device *netdev, - u64 cookie, - struct ieee80211_channel *chan, - enum nl80211_channel_type channel_type, - unsigned int duration, gfp_t gfp); -void nl80211_send_remain_on_channel_cancel( - struct cfg80211_registered_device *rdev, struct net_device *netdev, - u64 cookie, struct ieee80211_channel *chan, - enum nl80211_channel_type channel_type, gfp_t gfp); - -void nl80211_send_sta_event(struct cfg80211_registered_device *rdev, - struct net_device *dev, const u8 *mac_addr, - struct station_info *sinfo, gfp_t gfp); -void nl80211_send_sta_del_event(struct cfg80211_registered_device *rdev, - struct net_device *dev, const u8 *mac_addr, - gfp_t gfp); - -int nl80211_send_mgmt(struct cfg80211_registered_device *rdev, - struct net_device *netdev, u32 nlpid, - int freq, int sig_dbm, - const u8 *buf, size_t len, gfp_t gfp); -void nl80211_send_mgmt_tx_status(struct cfg80211_registered_device *rdev, - struct net_device *netdev, u64 cookie, - const u8 *buf, size_t len, bool ack, - gfp_t gfp); - -void -nl80211_send_cqm_rssi_notify(struct cfg80211_registered_device *rdev, - struct net_device *netdev, - enum nl80211_cqm_rssi_threshold_event rssi_event, - gfp_t gfp); -void -nl80211_send_cqm_pktloss_notify(struct cfg80211_registered_device *rdev, - struct net_device *netdev, const u8 *peer, - u32 num_packets, gfp_t gfp); - -void nl80211_gtk_rekey_notify(struct cfg80211_registered_device *rdev, - struct net_device *netdev, const u8 *bssid, - const u8 *replay_ctr, gfp_t gfp); - -void nl80211_pmksa_candidate_notify(struct cfg80211_registered_device *rdev, - struct net_device *netdev, int index, - const u8 *bssid, bool preauth, gfp_t gfp); - -bool nl80211_unexpected_frame(struct net_device *dev, - const u8 *addr, gfp_t gfp); -bool nl80211_unexpected_4addr_frame(struct net_device *dev, - const u8 *addr, gfp_t gfp); - -#endif /* __NET_WIRELESS_NL80211_H */ diff --git a/openairITS/mac/DOT11/net/wireless/radiotap.c b/openairITS/mac/DOT11/net/wireless/radiotap.c deleted file mode 100644 index c4ad7958af..0000000000 --- a/openairITS/mac/DOT11/net/wireless/radiotap.c +++ /dev/null @@ -1,358 +0,0 @@ -/* - * Radiotap parser - * - * Copyright 2007 Andy Green - * Copyright 2009 Johannes Berg - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - * - * Alternatively, this software may be distributed under the terms of BSD - * license. - * - * See COPYING for more details. - */ - -#include -#include -#include -#include -#include - -/* function prototypes and related defs are in include/net/cfg80211.h */ - -static const struct radiotap_align_size rtap_namespace_sizes[] = { - [IEEE80211_RADIOTAP_TSFT] = { .align = 8, .size = 8, }, - [IEEE80211_RADIOTAP_FLAGS] = { .align = 1, .size = 1, }, - [IEEE80211_RADIOTAP_RATE] = { .align = 1, .size = 1, }, - [IEEE80211_RADIOTAP_CHANNEL] = { .align = 2, .size = 4, }, - [IEEE80211_RADIOTAP_FHSS] = { .align = 2, .size = 2, }, - [IEEE80211_RADIOTAP_DBM_ANTSIGNAL] = { .align = 1, .size = 1, }, - [IEEE80211_RADIOTAP_DBM_ANTNOISE] = { .align = 1, .size = 1, }, - [IEEE80211_RADIOTAP_LOCK_QUALITY] = { .align = 2, .size = 2, }, - [IEEE80211_RADIOTAP_TX_ATTENUATION] = { .align = 2, .size = 2, }, - [IEEE80211_RADIOTAP_DB_TX_ATTENUATION] = { .align = 2, .size = 2, }, - [IEEE80211_RADIOTAP_DBM_TX_POWER] = { .align = 1, .size = 1, }, - [IEEE80211_RADIOTAP_ANTENNA] = { .align = 1, .size = 1, }, - [IEEE80211_RADIOTAP_DB_ANTSIGNAL] = { .align = 1, .size = 1, }, - [IEEE80211_RADIOTAP_DB_ANTNOISE] = { .align = 1, .size = 1, }, - [IEEE80211_RADIOTAP_RX_FLAGS] = { .align = 2, .size = 2, }, - [IEEE80211_RADIOTAP_TX_FLAGS] = { .align = 2, .size = 2, }, - [IEEE80211_RADIOTAP_RTS_RETRIES] = { .align = 1, .size = 1, }, - [IEEE80211_RADIOTAP_DATA_RETRIES] = { .align = 1, .size = 1, }, - /* - * add more here as they are defined in radiotap.h - */ -}; - -static const struct ieee80211_radiotap_namespace radiotap_ns = { - .n_bits = ARRAY_SIZE(rtap_namespace_sizes), - .align_size = rtap_namespace_sizes, -}; - -/** - * ieee80211_radiotap_iterator_init - radiotap parser iterator initialization - * @iterator: radiotap_iterator to initialize - * @radiotap_header: radiotap header to parse - * @max_length: total length we can parse into (eg, whole packet length) - * - * Returns: 0 or a negative error code if there is a problem. - * - * This function initializes an opaque iterator struct which can then - * be passed to ieee80211_radiotap_iterator_next() to visit every radiotap - * argument which is present in the header. It knows about extended - * present headers and handles them. - * - * How to use: - * call __ieee80211_radiotap_iterator_init() to init a semi-opaque iterator - * struct ieee80211_radiotap_iterator (no need to init the struct beforehand) - * checking for a good 0 return code. Then loop calling - * __ieee80211_radiotap_iterator_next()... it returns either 0, - * -ENOENT if there are no more args to parse, or -EINVAL if there is a problem. - * The iterator's @this_arg member points to the start of the argument - * associated with the current argument index that is present, which can be - * found in the iterator's @this_arg_index member. This arg index corresponds - * to the IEEE80211_RADIOTAP_... defines. - * - * Radiotap header length: - * You can find the CPU-endian total radiotap header length in - * iterator->max_length after executing ieee80211_radiotap_iterator_init() - * successfully. - * - * Alignment Gotcha: - * You must take care when dereferencing iterator.this_arg - * for multibyte types... the pointer is not aligned. Use - * get_unaligned((type *)iterator.this_arg) to dereference - * iterator.this_arg for type "type" safely on all arches. - * - * Example code: - * See Documentation/networking/radiotap-headers.txt - */ - -int ieee80211_radiotap_iterator_init( - struct ieee80211_radiotap_iterator *iterator, - struct ieee80211_radiotap_header *radiotap_header, - int max_length, const struct ieee80211_radiotap_vendor_namespaces *vns) -{ - /* Linux only supports version 0 radiotap format */ - if (radiotap_header->it_version) - return -EINVAL; - - /* sanity check for allowed length and radiotap length field */ - if (max_length < get_unaligned_le16(&radiotap_header->it_len)) - return -EINVAL; - - iterator->_rtheader = radiotap_header; - iterator->_max_length = get_unaligned_le16(&radiotap_header->it_len); - iterator->_arg_index = 0; - iterator->_bitmap_shifter = get_unaligned_le32(&radiotap_header->it_present); - iterator->_arg = (uint8_t *)radiotap_header + sizeof(*radiotap_header); - iterator->_reset_on_ext = 0; - iterator->_next_bitmap = &radiotap_header->it_present; - iterator->_next_bitmap++; - iterator->_vns = vns; - iterator->current_namespace = &radiotap_ns; - iterator->is_radiotap_ns = 1; - - /* find payload start allowing for extended bitmap(s) */ - - if (iterator->_bitmap_shifter & (1<_arg) & - (1 << IEEE80211_RADIOTAP_EXT)) { - iterator->_arg += sizeof(uint32_t); - - /* - * check for insanity where the present bitmaps - * keep claiming to extend up to or even beyond the - * stated radiotap header length - */ - - if ((unsigned long)iterator->_arg - - (unsigned long)iterator->_rtheader > - (unsigned long)iterator->_max_length) - return -EINVAL; - } - - iterator->_arg += sizeof(uint32_t); - - /* - * no need to check again for blowing past stated radiotap - * header length, because ieee80211_radiotap_iterator_next - * checks it before it is dereferenced - */ - } - - iterator->this_arg = iterator->_arg; - - /* we are all initialized happily */ - - return 0; -} -EXPORT_SYMBOL(ieee80211_radiotap_iterator_init); - -static void find_ns(struct ieee80211_radiotap_iterator *iterator, - uint32_t oui, uint8_t subns) -{ - int i; - - iterator->current_namespace = NULL; - - if (!iterator->_vns) - return; - - for (i = 0; i < iterator->_vns->n_ns; i++) { - if (iterator->_vns->ns[i].oui != oui) - continue; - if (iterator->_vns->ns[i].subns != subns) - continue; - - iterator->current_namespace = &iterator->_vns->ns[i]; - break; - } -} - - - -/** - * ieee80211_radiotap_iterator_next - return next radiotap parser iterator arg - * @iterator: radiotap_iterator to move to next arg (if any) - * - * Returns: 0 if there is an argument to handle, - * -ENOENT if there are no more args or -EINVAL - * if there is something else wrong. - * - * This function provides the next radiotap arg index (IEEE80211_RADIOTAP_*) - * in @this_arg_index and sets @this_arg to point to the - * payload for the field. It takes care of alignment handling and extended - * present fields. @this_arg can be changed by the caller (eg, - * incremented to move inside a compound argument like - * IEEE80211_RADIOTAP_CHANNEL). The args pointed to are in - * little-endian format whatever the endianess of your CPU. - * - * Alignment Gotcha: - * You must take care when dereferencing iterator.this_arg - * for multibyte types... the pointer is not aligned. Use - * get_unaligned((type *)iterator.this_arg) to dereference - * iterator.this_arg for type "type" safely on all arches. - */ - -int ieee80211_radiotap_iterator_next( - struct ieee80211_radiotap_iterator *iterator) -{ - while (1) { - int hit = 0; - int pad, align, size, subns; - uint32_t oui; - - /* if no more EXT bits, that's it */ - if ((iterator->_arg_index % 32) == IEEE80211_RADIOTAP_EXT && - !(iterator->_bitmap_shifter & 1)) - return -ENOENT; - - if (!(iterator->_bitmap_shifter & 1)) - goto next_entry; /* arg not present */ - - /* get alignment/size of data */ - switch (iterator->_arg_index % 32) { - case IEEE80211_RADIOTAP_RADIOTAP_NAMESPACE: - case IEEE80211_RADIOTAP_EXT: - align = 1; - size = 0; - break; - case IEEE80211_RADIOTAP_VENDOR_NAMESPACE: - align = 2; - size = 6; - break; - default: - if (!iterator->current_namespace || - iterator->_arg_index >= iterator->current_namespace->n_bits) { - if (iterator->current_namespace == &radiotap_ns) - return -ENOENT; - align = 0; - } else { - align = iterator->current_namespace->align_size[iterator->_arg_index].align; - size = iterator->current_namespace->align_size[iterator->_arg_index].size; - } - if (!align) { - /* skip all subsequent data */ - iterator->_arg = iterator->_next_ns_data; - /* give up on this namespace */ - iterator->current_namespace = NULL; - goto next_entry; - } - break; - } - - /* - * arg is present, account for alignment padding - * - * Note that these alignments are relative to the start - * of the radiotap header. There is no guarantee - * that the radiotap header itself is aligned on any - * kind of boundary. - * - * The above is why get_unaligned() is used to dereference - * multibyte elements from the radiotap area. - */ - - pad = ((unsigned long)iterator->_arg - - (unsigned long)iterator->_rtheader) & (align - 1); - - if (pad) - iterator->_arg += align - pad; - - if (iterator->_arg_index % 32 == IEEE80211_RADIOTAP_VENDOR_NAMESPACE) { - int vnslen; - - if ((unsigned long)iterator->_arg + size - - (unsigned long)iterator->_rtheader > - (unsigned long)iterator->_max_length) - return -EINVAL; - - oui = (*iterator->_arg << 16) | - (*(iterator->_arg + 1) << 8) | - *(iterator->_arg + 2); - subns = *(iterator->_arg + 3); - - find_ns(iterator, oui, subns); - - vnslen = get_unaligned_le16(iterator->_arg + 4); - iterator->_next_ns_data = iterator->_arg + size + vnslen; - if (!iterator->current_namespace) - size += vnslen; - } - - /* - * this is what we will return to user, but we need to - * move on first so next call has something fresh to test - */ - iterator->this_arg_index = iterator->_arg_index; - iterator->this_arg = iterator->_arg; - iterator->this_arg_size = size; - - /* internally move on the size of this arg */ - iterator->_arg += size; - - /* - * check for insanity where we are given a bitmap that - * claims to have more arg content than the length of the - * radiotap section. We will normally end up equalling this - * max_length on the last arg, never exceeding it. - */ - - if ((unsigned long)iterator->_arg - - (unsigned long)iterator->_rtheader > - (unsigned long)iterator->_max_length) - return -EINVAL; - - /* these special ones are valid in each bitmap word */ - switch (iterator->_arg_index % 32) { - case IEEE80211_RADIOTAP_VENDOR_NAMESPACE: - iterator->_reset_on_ext = 1; - - iterator->is_radiotap_ns = 0; - /* - * If parser didn't register this vendor - * namespace with us, allow it to show it - * as 'raw. Do do that, set argument index - * to vendor namespace. - */ - iterator->this_arg_index = - IEEE80211_RADIOTAP_VENDOR_NAMESPACE; - if (!iterator->current_namespace) - hit = 1; - goto next_entry; - case IEEE80211_RADIOTAP_RADIOTAP_NAMESPACE: - iterator->_reset_on_ext = 1; - iterator->current_namespace = &radiotap_ns; - iterator->is_radiotap_ns = 1; - goto next_entry; - case IEEE80211_RADIOTAP_EXT: - /* - * bit 31 was set, there is more - * -- move to next u32 bitmap - */ - iterator->_bitmap_shifter = - get_unaligned_le32(iterator->_next_bitmap); - iterator->_next_bitmap++; - if (iterator->_reset_on_ext) - iterator->_arg_index = 0; - else - iterator->_arg_index++; - iterator->_reset_on_ext = 0; - break; - default: - /* we've got a hit! */ - hit = 1; - next_entry: - iterator->_bitmap_shifter >>= 1; - iterator->_arg_index++; - } - - /* if we found a valid arg earlier, return it now */ - if (hit) - return 0; - } -} -EXPORT_SYMBOL(ieee80211_radiotap_iterator_next); diff --git a/openairITS/mac/DOT11/net/wireless/reg.c b/openairITS/mac/DOT11/net/wireless/reg.c deleted file mode 100644 index 06f98e742e..0000000000 --- a/openairITS/mac/DOT11/net/wireless/reg.c +++ /dev/null @@ -1,2408 +0,0 @@ -/* - * Copyright 2002-2005, Instant802 Networks, Inc. - * Copyright 2005-2006, Devicescape Software, Inc. - * Copyright 2007 Johannes Berg - * Copyright 2008-2011 Luis R. Rodriguez - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - - -/** - * DOC: Wireless regulatory infrastructure - * - * The usual implementation is for a driver to read a device EEPROM to - * determine which regulatory domain it should be operating under, then - * looking up the allowable channels in a driver-local table and finally - * registering those channels in the wiphy structure. - * - * Another set of compliance enforcement is for drivers to use their - * own compliance limits which can be stored on the EEPROM. The host - * driver or firmware may ensure these are used. - * - * In addition to all this we provide an extra layer of regulatory - * conformance. For drivers which do not have any regulatory - * information CRDA provides the complete regulatory solution. - * For others it provides a community effort on further restrictions - * to enhance compliance. - * - * Note: When number of rules --> infinity we will not be able to - * index on alpha2 any more, instead we'll probably have to - * rely on some SHA1 checksum of the regdomain for example. - * - */ - -#undef pr_fmt -#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "core.h" -#include "reg.h" -#include "regdb.h" -#include "nl80211.h" - -#ifdef CONFIG_CFG80211_REG_DEBUG -#define REG_DBG_PRINT(format, args...) \ - printk(KERN_DEBUG pr_fmt(format), ##args) -#else -#define REG_DBG_PRINT(args...) -#endif - -static struct regulatory_request core_request_world = { - .initiator = NL80211_REGDOM_SET_BY_CORE, - .alpha2[0] = '0', - .alpha2[1] = '0', - .intersect = false, - .processed = true, - .country_ie_env = ENVIRON_ANY, -}; - -/* Receipt of information from last regulatory request */ -static struct regulatory_request *last_request = &core_request_world; - -/* To trigger userspace events */ -static struct platform_device *reg_pdev; - -static struct device_type reg_device_type = { - .uevent = reg_device_uevent, -}; - -/* - * Central wireless core regulatory domains, we only need two, - * the current one and a world regulatory domain in case we have no - * information to give us an alpha2 - */ -const struct ieee80211_regdomain *cfg80211_regdomain; - -/* - * Protects static reg.c components: - * - cfg80211_world_regdom - * - cfg80211_regdom - * - last_request - */ -static DEFINE_MUTEX(reg_mutex); - -static inline void assert_reg_lock(void) -{ - lockdep_assert_held(®_mutex); -} - -/* Used to queue up regulatory hints */ -static LIST_HEAD(reg_requests_list); -static spinlock_t reg_requests_lock; - -/* Used to queue up beacon hints for review */ -static LIST_HEAD(reg_pending_beacons); -static spinlock_t reg_pending_beacons_lock; - -/* Used to keep track of processed beacon hints */ -static LIST_HEAD(reg_beacon_list); - -struct reg_beacon { - struct list_head list; - struct ieee80211_channel chan; -}; - -static void reg_todo(struct work_struct *work); -static DECLARE_WORK(reg_work, reg_todo); - -static void reg_timeout_work(struct work_struct *work); -static DECLARE_DELAYED_WORK(reg_timeout, reg_timeout_work); - -/* We keep a static world regulatory domain in case of the absence of CRDA */ -static const struct ieee80211_regdomain world_regdom = { - .n_reg_rules = 5, - .alpha2 = "00", - .reg_rules = { - /* IEEE 802.11b/g, channels 1..11 */ - REG_RULE(2412-10, 2462+10, 40, 6, 20, 0), - /* IEEE 802.11b/g, channels 12..13. No HT40 - * channel fits here. */ - REG_RULE(2467-10, 2472+10, 20, 6, 20, - NL80211_RRF_PASSIVE_SCAN | - NL80211_RRF_NO_IBSS), - /* IEEE 802.11 channel 14 - Only JP enables - * this and for 802.11b only */ - REG_RULE(2484-10, 2484+10, 20, 6, 20, - NL80211_RRF_PASSIVE_SCAN | - NL80211_RRF_NO_IBSS | - NL80211_RRF_NO_OFDM), - /* IEEE 802.11a, channel 36..48 */ - REG_RULE(5180-10, 5240+10, 40, 6, 20, - NL80211_RRF_PASSIVE_SCAN | - NL80211_RRF_NO_IBSS), - - /* NB: 5260 MHz - 5700 MHz requies DFS */ - - /* IEEE 802.11a, channel 149..165 */ - REG_RULE(5745-10, 5825+10, 40, 6, 20, - NL80211_RRF_PASSIVE_SCAN | - NL80211_RRF_NO_IBSS), - } -}; - -static const struct ieee80211_regdomain *cfg80211_world_regdom = - &world_regdom; - -static char *ieee80211_regdom = "00"; -static char user_alpha2[2]; - -module_param(ieee80211_regdom, charp, 0444); -MODULE_PARM_DESC(ieee80211_regdom, "IEEE 802.11 regulatory domain code"); - -static void reset_regdomains(bool full_reset) -{ - /* avoid freeing static information or freeing something twice */ - if (cfg80211_regdomain == cfg80211_world_regdom) - cfg80211_regdomain = NULL; - if (cfg80211_world_regdom == &world_regdom) - cfg80211_world_regdom = NULL; - if (cfg80211_regdomain == &world_regdom) - cfg80211_regdomain = NULL; - - kfree(cfg80211_regdomain); - kfree(cfg80211_world_regdom); - - cfg80211_world_regdom = &world_regdom; - cfg80211_regdomain = NULL; - - if (!full_reset) - return; - - if (last_request != &core_request_world) - kfree(last_request); - last_request = &core_request_world; -} - -/* - * Dynamic world regulatory domain requested by the wireless - * core upon initialization - */ -static void update_world_regdomain(const struct ieee80211_regdomain *rd) -{ - BUG_ON(!last_request); - - reset_regdomains(false); - - cfg80211_world_regdom = rd; - cfg80211_regdomain = rd; -} - -bool is_world_regdom(const char *alpha2) -{ - if (!alpha2) - return false; - if (alpha2[0] == '0' && alpha2[1] == '0') - return true; - return false; -} - -static bool is_alpha2_set(const char *alpha2) -{ - if (!alpha2) - return false; - if (alpha2[0] != 0 && alpha2[1] != 0) - return true; - return false; -} - -static bool is_unknown_alpha2(const char *alpha2) -{ - if (!alpha2) - return false; - /* - * Special case where regulatory domain was built by driver - * but a specific alpha2 cannot be determined - */ - if (alpha2[0] == '9' && alpha2[1] == '9') - return true; - return false; -} - -static bool is_intersected_alpha2(const char *alpha2) -{ - if (!alpha2) - return false; - /* - * Special case where regulatory domain is the - * result of an intersection between two regulatory domain - * structures - */ - if (alpha2[0] == '9' && alpha2[1] == '8') - return true; - return false; -} - -static bool is_an_alpha2(const char *alpha2) -{ - if (!alpha2) - return false; - if (isalpha(alpha2[0]) && isalpha(alpha2[1])) - return true; - return false; -} - -static bool alpha2_equal(const char *alpha2_x, const char *alpha2_y) -{ - if (!alpha2_x || !alpha2_y) - return false; - if (alpha2_x[0] == alpha2_y[0] && - alpha2_x[1] == alpha2_y[1]) - return true; - return false; -} - -static bool regdom_changes(const char *alpha2) -{ - assert_cfg80211_lock(); - - if (!cfg80211_regdomain) - return true; - if (alpha2_equal(cfg80211_regdomain->alpha2, alpha2)) - return false; - return true; -} - -/* - * The NL80211_REGDOM_SET_BY_USER regdom alpha2 is cached, this lets - * you know if a valid regulatory hint with NL80211_REGDOM_SET_BY_USER - * has ever been issued. - */ -static bool is_user_regdom_saved(void) -{ - if (user_alpha2[0] == '9' && user_alpha2[1] == '7') - return false; - - /* This would indicate a mistake on the design */ - if (WARN((!is_world_regdom(user_alpha2) && - !is_an_alpha2(user_alpha2)), - "Unexpected user alpha2: %c%c\n", - user_alpha2[0], - user_alpha2[1])) - return false; - - return true; -} - -static int reg_copy_regd(const struct ieee80211_regdomain **dst_regd, - const struct ieee80211_regdomain *src_regd) -{ - struct ieee80211_regdomain *regd; - int size_of_regd = 0; - unsigned int i; - - size_of_regd = sizeof(struct ieee80211_regdomain) + - ((src_regd->n_reg_rules + 1) * sizeof(struct ieee80211_reg_rule)); - - regd = kzalloc(size_of_regd, GFP_KERNEL); - if (!regd) - return -ENOMEM; - - memcpy(regd, src_regd, sizeof(struct ieee80211_regdomain)); - - for (i = 0; i < src_regd->n_reg_rules; i++) - memcpy(®d->reg_rules[i], &src_regd->reg_rules[i], - sizeof(struct ieee80211_reg_rule)); - - *dst_regd = regd; - return 0; -} - -#ifdef CONFIG_CFG80211_INTERNAL_REGDB -struct reg_regdb_search_request { - char alpha2[2]; - struct list_head list; -}; - -static LIST_HEAD(reg_regdb_search_list); -static DEFINE_MUTEX(reg_regdb_search_mutex); - -static void reg_regdb_search(struct work_struct *work) -{ - struct reg_regdb_search_request *request; - const struct ieee80211_regdomain *curdom, *regdom; - int i, r; - - mutex_lock(®_regdb_search_mutex); - while (!list_empty(®_regdb_search_list)) { - request = list_first_entry(®_regdb_search_list, - struct reg_regdb_search_request, - list); - list_del(&request->list); - - for (i=0; ialpha2, curdom->alpha2, 2)) { - r = reg_copy_regd(®dom, curdom); - if (r) - break; - mutex_lock(&cfg80211_mutex); - set_regdom(regdom); - mutex_unlock(&cfg80211_mutex); - break; - } - } - - kfree(request); - } - mutex_unlock(®_regdb_search_mutex); -} - -static DECLARE_WORK(reg_regdb_work, reg_regdb_search); - -static void reg_regdb_query(const char *alpha2) -{ - struct reg_regdb_search_request *request; - - if (!alpha2) - return; - - request = kzalloc(sizeof(struct reg_regdb_search_request), GFP_KERNEL); - if (!request) - return; - - memcpy(request->alpha2, alpha2, 2); - - mutex_lock(®_regdb_search_mutex); - list_add_tail(&request->list, ®_regdb_search_list); - mutex_unlock(®_regdb_search_mutex); - - schedule_work(®_regdb_work); -} -#else -static inline void reg_regdb_query(const char *alpha2) {} -#endif /* CONFIG_CFG80211_INTERNAL_REGDB */ - -/* - * This lets us keep regulatory code which is updated on a regulatory - * basis in userspace. Country information is filled in by - * reg_device_uevent - */ -static int call_crda(const char *alpha2) -{ - if (!is_world_regdom((char *) alpha2)) - pr_info("Calling CRDA for country: %c%c\n", - alpha2[0], alpha2[1]); - else - pr_info("Calling CRDA to update world regulatory domain\n"); - - /* query internal regulatory database (if it exists) */ - reg_regdb_query(alpha2); - - return kobject_uevent(®_pdev->dev.kobj, KOBJ_CHANGE); -} - -/* Used by nl80211 before kmalloc'ing our regulatory domain */ -bool reg_is_valid_request(const char *alpha2) -{ - assert_cfg80211_lock(); - - if (!last_request) - return false; - - return alpha2_equal(last_request->alpha2, alpha2); -} - -/* Sanity check on a regulatory rule */ -static bool is_valid_reg_rule(const struct ieee80211_reg_rule *rule) -{ - const struct ieee80211_freq_range *freq_range = &rule->freq_range; - u32 freq_diff; - - if (freq_range->start_freq_khz <= 0 || freq_range->end_freq_khz <= 0) - return false; - - if (freq_range->start_freq_khz > freq_range->end_freq_khz) - return false; - - freq_diff = freq_range->end_freq_khz - freq_range->start_freq_khz; - - if (freq_range->end_freq_khz <= freq_range->start_freq_khz || - freq_range->max_bandwidth_khz > freq_diff) - return false; - - return true; -} - -static bool is_valid_rd(const struct ieee80211_regdomain *rd) -{ - const struct ieee80211_reg_rule *reg_rule = NULL; - unsigned int i; - - if (!rd->n_reg_rules) - return false; - - if (WARN_ON(rd->n_reg_rules > NL80211_MAX_SUPP_REG_RULES)) - return false; - - for (i = 0; i < rd->n_reg_rules; i++) { - reg_rule = &rd->reg_rules[i]; - if (!is_valid_reg_rule(reg_rule)) - return false; - } - - return true; -} - -static bool reg_does_bw_fit(const struct ieee80211_freq_range *freq_range, - u32 center_freq_khz, - u32 bw_khz) -{ - u32 start_freq_khz, end_freq_khz; - - start_freq_khz = center_freq_khz - (bw_khz/2); - end_freq_khz = center_freq_khz + (bw_khz/2); - - if (start_freq_khz >= freq_range->start_freq_khz && - end_freq_khz <= freq_range->end_freq_khz) - return true; - - return false; -} - -/** - * freq_in_rule_band - tells us if a frequency is in a frequency band - * @freq_range: frequency rule we want to query - * @freq_khz: frequency we are inquiring about - * - * This lets us know if a specific frequency rule is or is not relevant to - * a specific frequency's band. Bands are device specific and artificial - * definitions (the "2.4 GHz band" and the "5 GHz band"), however it is - * safe for now to assume that a frequency rule should not be part of a - * frequency's band if the start freq or end freq are off by more than 2 GHz. - * This resolution can be lowered and should be considered as we add - * regulatory rule support for other "bands". - **/ -static bool freq_in_rule_band(const struct ieee80211_freq_range *freq_range, - u32 freq_khz) -{ -#define ONE_GHZ_IN_KHZ 1000000 - if (abs(freq_khz - freq_range->start_freq_khz) <= (2 * ONE_GHZ_IN_KHZ)) - return true; - if (abs(freq_khz - freq_range->end_freq_khz) <= (2 * ONE_GHZ_IN_KHZ)) - return true; - return false; -#undef ONE_GHZ_IN_KHZ -} - -/* - * Helper for regdom_intersect(), this does the real - * mathematical intersection fun - */ -static int reg_rules_intersect( - const struct ieee80211_reg_rule *rule1, - const struct ieee80211_reg_rule *rule2, - struct ieee80211_reg_rule *intersected_rule) -{ - const struct ieee80211_freq_range *freq_range1, *freq_range2; - struct ieee80211_freq_range *freq_range; - const struct ieee80211_power_rule *power_rule1, *power_rule2; - struct ieee80211_power_rule *power_rule; - u32 freq_diff; - - freq_range1 = &rule1->freq_range; - freq_range2 = &rule2->freq_range; - freq_range = &intersected_rule->freq_range; - - power_rule1 = &rule1->power_rule; - power_rule2 = &rule2->power_rule; - power_rule = &intersected_rule->power_rule; - - freq_range->start_freq_khz = max(freq_range1->start_freq_khz, - freq_range2->start_freq_khz); - freq_range->end_freq_khz = min(freq_range1->end_freq_khz, - freq_range2->end_freq_khz); - freq_range->max_bandwidth_khz = min(freq_range1->max_bandwidth_khz, - freq_range2->max_bandwidth_khz); - - freq_diff = freq_range->end_freq_khz - freq_range->start_freq_khz; - if (freq_range->max_bandwidth_khz > freq_diff) - freq_range->max_bandwidth_khz = freq_diff; - - power_rule->max_eirp = min(power_rule1->max_eirp, - power_rule2->max_eirp); - power_rule->max_antenna_gain = min(power_rule1->max_antenna_gain, - power_rule2->max_antenna_gain); - - intersected_rule->flags = (rule1->flags | rule2->flags); - - if (!is_valid_reg_rule(intersected_rule)) - return -EINVAL; - - return 0; -} - -/** - * regdom_intersect - do the intersection between two regulatory domains - * @rd1: first regulatory domain - * @rd2: second regulatory domain - * - * Use this function to get the intersection between two regulatory domains. - * Once completed we will mark the alpha2 for the rd as intersected, "98", - * as no one single alpha2 can represent this regulatory domain. - * - * Returns a pointer to the regulatory domain structure which will hold the - * resulting intersection of rules between rd1 and rd2. We will - * kzalloc() this structure for you. - */ -static struct ieee80211_regdomain *regdom_intersect( - const struct ieee80211_regdomain *rd1, - const struct ieee80211_regdomain *rd2) -{ - int r, size_of_regd; - unsigned int x, y; - unsigned int num_rules = 0, rule_idx = 0; - const struct ieee80211_reg_rule *rule1, *rule2; - struct ieee80211_reg_rule *intersected_rule; - struct ieee80211_regdomain *rd; - /* This is just a dummy holder to help us count */ - struct ieee80211_reg_rule irule; - - /* Uses the stack temporarily for counter arithmetic */ - intersected_rule = &irule; - - memset(intersected_rule, 0, sizeof(struct ieee80211_reg_rule)); - - if (!rd1 || !rd2) - return NULL; - - /* - * First we get a count of the rules we'll need, then we actually - * build them. This is to so we can malloc() and free() a - * regdomain once. The reason we use reg_rules_intersect() here - * is it will return -EINVAL if the rule computed makes no sense. - * All rules that do check out OK are valid. - */ - - for (x = 0; x < rd1->n_reg_rules; x++) { - rule1 = &rd1->reg_rules[x]; - for (y = 0; y < rd2->n_reg_rules; y++) { - rule2 = &rd2->reg_rules[y]; - if (!reg_rules_intersect(rule1, rule2, - intersected_rule)) - num_rules++; - memset(intersected_rule, 0, - sizeof(struct ieee80211_reg_rule)); - } - } - - if (!num_rules) - return NULL; - - size_of_regd = sizeof(struct ieee80211_regdomain) + - ((num_rules + 1) * sizeof(struct ieee80211_reg_rule)); - - rd = kzalloc(size_of_regd, GFP_KERNEL); - if (!rd) - return NULL; - - for (x = 0; x < rd1->n_reg_rules; x++) { - rule1 = &rd1->reg_rules[x]; - for (y = 0; y < rd2->n_reg_rules; y++) { - rule2 = &rd2->reg_rules[y]; - /* - * This time around instead of using the stack lets - * write to the target rule directly saving ourselves - * a memcpy() - */ - intersected_rule = &rd->reg_rules[rule_idx]; - r = reg_rules_intersect(rule1, rule2, - intersected_rule); - /* - * No need to memset here the intersected rule here as - * we're not using the stack anymore - */ - if (r) - continue; - rule_idx++; - } - } - - if (rule_idx != num_rules) { - kfree(rd); - return NULL; - } - - rd->n_reg_rules = num_rules; - rd->alpha2[0] = '9'; - rd->alpha2[1] = '8'; - - return rd; -} - -/* - * XXX: add support for the rest of enum nl80211_reg_rule_flags, we may - * want to just have the channel structure use these - */ -static u32 map_regdom_flags(u32 rd_flags) -{ - u32 channel_flags = 0; - if (rd_flags & NL80211_RRF_PASSIVE_SCAN) - channel_flags |= IEEE80211_CHAN_PASSIVE_SCAN; - if (rd_flags & NL80211_RRF_NO_IBSS) - channel_flags |= IEEE80211_CHAN_NO_IBSS; - if (rd_flags & NL80211_RRF_DFS) - channel_flags |= IEEE80211_CHAN_RADAR; - return channel_flags; -} - -static int freq_reg_info_regd(struct wiphy *wiphy, - u32 center_freq, - u32 desired_bw_khz, - const struct ieee80211_reg_rule **reg_rule, - const struct ieee80211_regdomain *custom_regd) -{ - int i; - bool band_rule_found = false; - const struct ieee80211_regdomain *regd; - bool bw_fits = false; - - if (!desired_bw_khz) - desired_bw_khz = MHZ_TO_KHZ(20); - - regd = custom_regd ? custom_regd : cfg80211_regdomain; - - /* - * Follow the driver's regulatory domain, if present, unless a country - * IE has been processed or a user wants to help complaince further - */ - if (!custom_regd && - last_request->initiator != NL80211_REGDOM_SET_BY_COUNTRY_IE && - last_request->initiator != NL80211_REGDOM_SET_BY_USER && - wiphy->regd) - regd = wiphy->regd; - - if (!regd) - return -EINVAL; - - for (i = 0; i < regd->n_reg_rules; i++) { - const struct ieee80211_reg_rule *rr; - const struct ieee80211_freq_range *fr = NULL; - - rr = ®d->reg_rules[i]; - fr = &rr->freq_range; - - /* - * We only need to know if one frequency rule was - * was in center_freq's band, that's enough, so lets - * not overwrite it once found - */ - if (!band_rule_found) - band_rule_found = freq_in_rule_band(fr, center_freq); - - bw_fits = reg_does_bw_fit(fr, - center_freq, - desired_bw_khz); - - if (band_rule_found && bw_fits) { - *reg_rule = rr; - return 0; - } - } - - if (!band_rule_found) - return -ERANGE; - - return -EINVAL; -} - -int freq_reg_info(struct wiphy *wiphy, - u32 center_freq, - u32 desired_bw_khz, - const struct ieee80211_reg_rule **reg_rule) -{ - assert_cfg80211_lock(); - return freq_reg_info_regd(wiphy, - center_freq, - desired_bw_khz, - reg_rule, - NULL); -} -EXPORT_SYMBOL(freq_reg_info); - -#ifdef CONFIG_CFG80211_REG_DEBUG -static const char *reg_initiator_name(enum nl80211_reg_initiator initiator) -{ - switch (initiator) { - case NL80211_REGDOM_SET_BY_CORE: - return "Set by core"; - case NL80211_REGDOM_SET_BY_USER: - return "Set by user"; - case NL80211_REGDOM_SET_BY_DRIVER: - return "Set by driver"; - case NL80211_REGDOM_SET_BY_COUNTRY_IE: - return "Set by country IE"; - default: - WARN_ON(1); - return "Set by bug"; - } -} - -static void chan_reg_rule_print_dbg(struct ieee80211_channel *chan, - u32 desired_bw_khz, - const struct ieee80211_reg_rule *reg_rule) -{ - const struct ieee80211_power_rule *power_rule; - const struct ieee80211_freq_range *freq_range; - char max_antenna_gain[32]; - - power_rule = ®_rule->power_rule; - freq_range = ®_rule->freq_range; - - if (!power_rule->max_antenna_gain) - snprintf(max_antenna_gain, 32, "N/A"); - else - snprintf(max_antenna_gain, 32, "%d", power_rule->max_antenna_gain); - - REG_DBG_PRINT("Updating information on frequency %d MHz " - "for a %d MHz width channel with regulatory rule:\n", - chan->center_freq, - KHZ_TO_MHZ(desired_bw_khz)); - - REG_DBG_PRINT("%d KHz - %d KHz @ %d KHz), (%s mBi, %d mBm)\n", - freq_range->start_freq_khz, - freq_range->end_freq_khz, - freq_range->max_bandwidth_khz, - max_antenna_gain, - power_rule->max_eirp); -} -#else -static void chan_reg_rule_print_dbg(struct ieee80211_channel *chan, - u32 desired_bw_khz, - const struct ieee80211_reg_rule *reg_rule) -{ - return; -} -#endif - -/* - * Note that right now we assume the desired channel bandwidth - * is always 20 MHz for each individual channel (HT40 uses 20 MHz - * per channel, the primary and the extension channel). To support - * smaller custom bandwidths such as 5 MHz or 10 MHz we'll need a - * new ieee80211_channel.target_bw and re run the regulatory check - * on the wiphy with the target_bw specified. Then we can simply use - * that below for the desired_bw_khz below. - */ -static void handle_channel(struct wiphy *wiphy, - enum nl80211_reg_initiator initiator, - enum ieee80211_band band, - unsigned int chan_idx) -{ - int r; - u32 flags, bw_flags = 0; - u32 desired_bw_khz = MHZ_TO_KHZ(20); - const struct ieee80211_reg_rule *reg_rule = NULL; - const struct ieee80211_power_rule *power_rule = NULL; - const struct ieee80211_freq_range *freq_range = NULL; - struct ieee80211_supported_band *sband; - struct ieee80211_channel *chan; - struct wiphy *request_wiphy = NULL; - - assert_cfg80211_lock(); - - request_wiphy = wiphy_idx_to_wiphy(last_request->wiphy_idx); - - sband = wiphy->bands[band]; - BUG_ON(chan_idx >= sband->n_channels); - chan = &sband->channels[chan_idx]; - - flags = chan->orig_flags; - - r = freq_reg_info(wiphy, - MHZ_TO_KHZ(chan->center_freq), - desired_bw_khz, - ®_rule); - - if (r) { - /* - * We will disable all channels that do not match our - * received regulatory rule unless the hint is coming - * from a Country IE and the Country IE had no information - * about a band. The IEEE 802.11 spec allows for an AP - * to send only a subset of the regulatory rules allowed, - * so an AP in the US that only supports 2.4 GHz may only send - * a country IE with information for the 2.4 GHz band - * while 5 GHz is still supported. - */ - if (initiator == NL80211_REGDOM_SET_BY_COUNTRY_IE && - r == -ERANGE) - return; - - REG_DBG_PRINT("Disabling freq %d MHz\n", chan->center_freq); - chan->flags = IEEE80211_CHAN_DISABLED; - return; - } - - chan_reg_rule_print_dbg(chan, desired_bw_khz, reg_rule); - - power_rule = ®_rule->power_rule; - freq_range = ®_rule->freq_range; - - if (freq_range->max_bandwidth_khz < MHZ_TO_KHZ(40)) - bw_flags = IEEE80211_CHAN_NO_HT40; - - if (last_request->initiator == NL80211_REGDOM_SET_BY_DRIVER && - request_wiphy && request_wiphy == wiphy && - request_wiphy->flags & WIPHY_FLAG_STRICT_REGULATORY) { - /* - * This guarantees the driver's requested regulatory domain - * will always be used as a base for further regulatory - * settings - */ - chan->flags = chan->orig_flags = - map_regdom_flags(reg_rule->flags) | bw_flags; - chan->max_antenna_gain = chan->orig_mag = - (int) MBI_TO_DBI(power_rule->max_antenna_gain); - chan->max_power = chan->orig_mpwr = - (int) MBM_TO_DBM(power_rule->max_eirp); - return; - } - - chan->beacon_found = false; - chan->flags = flags | bw_flags | map_regdom_flags(reg_rule->flags); - chan->max_antenna_gain = min(chan->orig_mag, - (int) MBI_TO_DBI(power_rule->max_antenna_gain)); - chan->max_reg_power = (int) MBM_TO_DBM(power_rule->max_eirp); - chan->max_power = min(chan->max_power, chan->max_reg_power); -} - -static void handle_band(struct wiphy *wiphy, - enum ieee80211_band band, - enum nl80211_reg_initiator initiator) -{ - unsigned int i; - struct ieee80211_supported_band *sband; - - BUG_ON(!wiphy->bands[band]); - sband = wiphy->bands[band]; - - for (i = 0; i < sband->n_channels; i++) - handle_channel(wiphy, initiator, band, i); -} - -static bool ignore_reg_update(struct wiphy *wiphy, - enum nl80211_reg_initiator initiator) -{ - if (!last_request) { - REG_DBG_PRINT("Ignoring regulatory request %s since " - "last_request is not set\n", - reg_initiator_name(initiator)); - return true; - } - - if (initiator == NL80211_REGDOM_SET_BY_CORE && - wiphy->flags & WIPHY_FLAG_CUSTOM_REGULATORY) { - REG_DBG_PRINT("Ignoring regulatory request %s " - "since the driver uses its own custom " - "regulatory domain\n", - reg_initiator_name(initiator)); - return true; - } - - /* - * wiphy->regd will be set once the device has its own - * desired regulatory domain set - */ - if (wiphy->flags & WIPHY_FLAG_STRICT_REGULATORY && !wiphy->regd && - initiator != NL80211_REGDOM_SET_BY_COUNTRY_IE && - !is_world_regdom(last_request->alpha2)) { - REG_DBG_PRINT("Ignoring regulatory request %s " - "since the driver requires its own regulatory " - "domain to be set first\n", - reg_initiator_name(initiator)); - return true; - } - - return false; -} - -static void handle_reg_beacon(struct wiphy *wiphy, - unsigned int chan_idx, - struct reg_beacon *reg_beacon) -{ - struct ieee80211_supported_band *sband; - struct ieee80211_channel *chan; - bool channel_changed = false; - struct ieee80211_channel chan_before; - - assert_cfg80211_lock(); - - sband = wiphy->bands[reg_beacon->chan.band]; - chan = &sband->channels[chan_idx]; - - if (likely(chan->center_freq != reg_beacon->chan.center_freq)) - return; - - if (chan->beacon_found) - return; - - chan->beacon_found = true; - - if (wiphy->flags & WIPHY_FLAG_DISABLE_BEACON_HINTS) - return; - - chan_before.center_freq = chan->center_freq; - chan_before.flags = chan->flags; - - if (chan->flags & IEEE80211_CHAN_PASSIVE_SCAN) { - chan->flags &= ~IEEE80211_CHAN_PASSIVE_SCAN; - channel_changed = true; - } - - if (chan->flags & IEEE80211_CHAN_NO_IBSS) { - chan->flags &= ~IEEE80211_CHAN_NO_IBSS; - channel_changed = true; - } - - if (channel_changed) - nl80211_send_beacon_hint_event(wiphy, &chan_before, chan); -} - -/* - * Called when a scan on a wiphy finds a beacon on - * new channel - */ -static void wiphy_update_new_beacon(struct wiphy *wiphy, - struct reg_beacon *reg_beacon) -{ - unsigned int i; - struct ieee80211_supported_band *sband; - - assert_cfg80211_lock(); - - if (!wiphy->bands[reg_beacon->chan.band]) - return; - - sband = wiphy->bands[reg_beacon->chan.band]; - - for (i = 0; i < sband->n_channels; i++) - handle_reg_beacon(wiphy, i, reg_beacon); -} - -/* - * Called upon reg changes or a new wiphy is added - */ -static void wiphy_update_beacon_reg(struct wiphy *wiphy) -{ - unsigned int i; - struct ieee80211_supported_band *sband; - struct reg_beacon *reg_beacon; - - assert_cfg80211_lock(); - - if (list_empty(®_beacon_list)) - return; - - list_for_each_entry(reg_beacon, ®_beacon_list, list) { - if (!wiphy->bands[reg_beacon->chan.band]) - continue; - sband = wiphy->bands[reg_beacon->chan.band]; - for (i = 0; i < sband->n_channels; i++) - handle_reg_beacon(wiphy, i, reg_beacon); - } -} - -static bool reg_is_world_roaming(struct wiphy *wiphy) -{ - if (is_world_regdom(cfg80211_regdomain->alpha2) || - (wiphy->regd && is_world_regdom(wiphy->regd->alpha2))) - return true; - if (last_request && - last_request->initiator != NL80211_REGDOM_SET_BY_COUNTRY_IE && - wiphy->flags & WIPHY_FLAG_CUSTOM_REGULATORY) - return true; - return false; -} - -/* Reap the advantages of previously found beacons */ -static void reg_process_beacons(struct wiphy *wiphy) -{ - /* - * Means we are just firing up cfg80211, so no beacons would - * have been processed yet. - */ - if (!last_request) - return; - if (!reg_is_world_roaming(wiphy)) - return; - wiphy_update_beacon_reg(wiphy); -} - -static bool is_ht40_not_allowed(struct ieee80211_channel *chan) -{ - if (!chan) - return true; - if (chan->flags & IEEE80211_CHAN_DISABLED) - return true; - /* This would happen when regulatory rules disallow HT40 completely */ - if (IEEE80211_CHAN_NO_HT40 == (chan->flags & (IEEE80211_CHAN_NO_HT40))) - return true; - return false; -} - -static void reg_process_ht_flags_channel(struct wiphy *wiphy, - enum ieee80211_band band, - unsigned int chan_idx) -{ - struct ieee80211_supported_band *sband; - struct ieee80211_channel *channel; - struct ieee80211_channel *channel_before = NULL, *channel_after = NULL; - unsigned int i; - - assert_cfg80211_lock(); - - sband = wiphy->bands[band]; - BUG_ON(chan_idx >= sband->n_channels); - channel = &sband->channels[chan_idx]; - - if (is_ht40_not_allowed(channel)) { - channel->flags |= IEEE80211_CHAN_NO_HT40; - return; - } - - /* - * We need to ensure the extension channels exist to - * be able to use HT40- or HT40+, this finds them (or not) - */ - for (i = 0; i < sband->n_channels; i++) { - struct ieee80211_channel *c = &sband->channels[i]; - if (c->center_freq == (channel->center_freq - 20)) - channel_before = c; - if (c->center_freq == (channel->center_freq + 20)) - channel_after = c; - } - - /* - * Please note that this assumes target bandwidth is 20 MHz, - * if that ever changes we also need to change the below logic - * to include that as well. - */ - if (is_ht40_not_allowed(channel_before)) - channel->flags |= IEEE80211_CHAN_NO_HT40MINUS; - else - channel->flags &= ~IEEE80211_CHAN_NO_HT40MINUS; - - if (is_ht40_not_allowed(channel_after)) - channel->flags |= IEEE80211_CHAN_NO_HT40PLUS; - else - channel->flags &= ~IEEE80211_CHAN_NO_HT40PLUS; -} - -static void reg_process_ht_flags_band(struct wiphy *wiphy, - enum ieee80211_band band) -{ - unsigned int i; - struct ieee80211_supported_band *sband; - - BUG_ON(!wiphy->bands[band]); - sband = wiphy->bands[band]; - - for (i = 0; i < sband->n_channels; i++) - reg_process_ht_flags_channel(wiphy, band, i); -} - -static void reg_process_ht_flags(struct wiphy *wiphy) -{ - enum ieee80211_band band; - - if (!wiphy) - return; - - for (band = 0; band < IEEE80211_NUM_BANDS; band++) { - if (wiphy->bands[band]) - reg_process_ht_flags_band(wiphy, band); - } - -} - -static void wiphy_update_regulatory(struct wiphy *wiphy, - enum nl80211_reg_initiator initiator) -{ - enum ieee80211_band band; - - assert_reg_lock(); - - if (ignore_reg_update(wiphy, initiator)) - return; - - last_request->dfs_region = cfg80211_regdomain->dfs_region; - - for (band = 0; band < IEEE80211_NUM_BANDS; band++) { - if (wiphy->bands[band]) - handle_band(wiphy, band, initiator); - } - - reg_process_beacons(wiphy); - reg_process_ht_flags(wiphy); - if (wiphy->reg_notifier) - wiphy->reg_notifier(wiphy, last_request); -} - -void regulatory_update(struct wiphy *wiphy, - enum nl80211_reg_initiator setby) -{ - mutex_lock(®_mutex); - wiphy_update_regulatory(wiphy, setby); - mutex_unlock(®_mutex); -} - -static void update_all_wiphy_regulatory(enum nl80211_reg_initiator initiator) -{ - struct cfg80211_registered_device *rdev; - struct wiphy *wiphy; - - list_for_each_entry(rdev, &cfg80211_rdev_list, list) { - wiphy = &rdev->wiphy; - wiphy_update_regulatory(wiphy, initiator); - /* - * Regulatory updates set by CORE are ignored for custom - * regulatory cards. Let us notify the changes to the driver, - * as some drivers used this to restore its orig_* reg domain. - */ - if (initiator == NL80211_REGDOM_SET_BY_CORE && - wiphy->flags & WIPHY_FLAG_CUSTOM_REGULATORY && - wiphy->reg_notifier) - wiphy->reg_notifier(wiphy, last_request); - } -} - -static void handle_channel_custom(struct wiphy *wiphy, - enum ieee80211_band band, - unsigned int chan_idx, - const struct ieee80211_regdomain *regd) -{ - int r; - u32 desired_bw_khz = MHZ_TO_KHZ(20); - u32 bw_flags = 0; - const struct ieee80211_reg_rule *reg_rule = NULL; - const struct ieee80211_power_rule *power_rule = NULL; - const struct ieee80211_freq_range *freq_range = NULL; - struct ieee80211_supported_band *sband; - struct ieee80211_channel *chan; - - assert_reg_lock(); - - sband = wiphy->bands[band]; - BUG_ON(chan_idx >= sband->n_channels); - chan = &sband->channels[chan_idx]; - - r = freq_reg_info_regd(wiphy, - MHZ_TO_KHZ(chan->center_freq), - desired_bw_khz, - ®_rule, - regd); - - if (r) { - REG_DBG_PRINT("Disabling freq %d MHz as custom " - "regd has no rule that fits a %d MHz " - "wide channel\n", - chan->center_freq, - KHZ_TO_MHZ(desired_bw_khz)); - chan->flags = IEEE80211_CHAN_DISABLED; - return; - } - - chan_reg_rule_print_dbg(chan, desired_bw_khz, reg_rule); - - power_rule = ®_rule->power_rule; - freq_range = ®_rule->freq_range; - - if (freq_range->max_bandwidth_khz < MHZ_TO_KHZ(40)) - bw_flags = IEEE80211_CHAN_NO_HT40; - - chan->flags |= map_regdom_flags(reg_rule->flags) | bw_flags; - chan->max_antenna_gain = (int) MBI_TO_DBI(power_rule->max_antenna_gain); - chan->max_power = (int) MBM_TO_DBM(power_rule->max_eirp); -} - -static void handle_band_custom(struct wiphy *wiphy, enum ieee80211_band band, - const struct ieee80211_regdomain *regd) -{ - unsigned int i; - struct ieee80211_supported_band *sband; - - BUG_ON(!wiphy->bands[band]); - sband = wiphy->bands[band]; - - for (i = 0; i < sband->n_channels; i++) - handle_channel_custom(wiphy, band, i, regd); -} - -/* Used by drivers prior to wiphy registration */ -void wiphy_apply_custom_regulatory(struct wiphy *wiphy, - const struct ieee80211_regdomain *regd) -{ - enum ieee80211_band band; - unsigned int bands_set = 0; - - mutex_lock(®_mutex); - for (band = 0; band < IEEE80211_NUM_BANDS; band++) { - if (!wiphy->bands[band]) - continue; - handle_band_custom(wiphy, band, regd); - bands_set++; - } - mutex_unlock(®_mutex); - - /* - * no point in calling this if it won't have any effect - * on your device's supportd bands. - */ - WARN_ON(!bands_set); -} -EXPORT_SYMBOL(wiphy_apply_custom_regulatory); - -/* - * Return value which can be used by ignore_request() to indicate - * it has been determined we should intersect two regulatory domains - */ -#define REG_INTERSECT 1 - -/* This has the logic which determines when a new request - * should be ignored. */ -static int ignore_request(struct wiphy *wiphy, - struct regulatory_request *pending_request) -{ - struct wiphy *last_wiphy = NULL; - - assert_cfg80211_lock(); - - /* All initial requests are respected */ - if (!last_request) - return 0; - - switch (pending_request->initiator) { - case NL80211_REGDOM_SET_BY_CORE: - return 0; - case NL80211_REGDOM_SET_BY_COUNTRY_IE: - - last_wiphy = wiphy_idx_to_wiphy(last_request->wiphy_idx); - - if (unlikely(!is_an_alpha2(pending_request->alpha2))) - return -EINVAL; - if (last_request->initiator == - NL80211_REGDOM_SET_BY_COUNTRY_IE) { - if (last_wiphy != wiphy) { - /* - * Two cards with two APs claiming different - * Country IE alpha2s. We could - * intersect them, but that seems unlikely - * to be correct. Reject second one for now. - */ - if (regdom_changes(pending_request->alpha2)) - return -EOPNOTSUPP; - return -EALREADY; - } - /* - * Two consecutive Country IE hints on the same wiphy. - * This should be picked up early by the driver/stack - */ - if (WARN_ON(regdom_changes(pending_request->alpha2))) - return 0; - return -EALREADY; - } - return 0; - case NL80211_REGDOM_SET_BY_DRIVER: - if (last_request->initiator == NL80211_REGDOM_SET_BY_CORE) { - if (regdom_changes(pending_request->alpha2)) - return 0; - return -EALREADY; - } - - /* - * This would happen if you unplug and plug your card - * back in or if you add a new device for which the previously - * loaded card also agrees on the regulatory domain. - */ - if (last_request->initiator == NL80211_REGDOM_SET_BY_DRIVER && - !regdom_changes(pending_request->alpha2)) - return -EALREADY; - - return REG_INTERSECT; - case NL80211_REGDOM_SET_BY_USER: - if (last_request->initiator == NL80211_REGDOM_SET_BY_COUNTRY_IE) - return REG_INTERSECT; - /* - * If the user knows better the user should set the regdom - * to their country before the IE is picked up - */ - if (last_request->initiator == NL80211_REGDOM_SET_BY_USER && - last_request->intersect) - return -EOPNOTSUPP; - /* - * Process user requests only after previous user/driver/core - * requests have been processed - */ - if (last_request->initiator == NL80211_REGDOM_SET_BY_CORE || - last_request->initiator == NL80211_REGDOM_SET_BY_DRIVER || - last_request->initiator == NL80211_REGDOM_SET_BY_USER) { - if (regdom_changes(last_request->alpha2)) - return -EAGAIN; - } - - if (!regdom_changes(pending_request->alpha2)) - return -EALREADY; - - return 0; - } - - return -EINVAL; -} - -static void reg_set_request_processed(void) -{ - bool need_more_processing = false; - - last_request->processed = true; - - spin_lock(®_requests_lock); - if (!list_empty(®_requests_list)) - need_more_processing = true; - spin_unlock(®_requests_lock); - - if (last_request->initiator == NL80211_REGDOM_SET_BY_USER) - cancel_delayed_work_sync(®_timeout); - - if (need_more_processing) - schedule_work(®_work); -} - -/** - * __regulatory_hint - hint to the wireless core a regulatory domain - * @wiphy: if the hint comes from country information from an AP, this - * is required to be set to the wiphy that received the information - * @pending_request: the regulatory request currently being processed - * - * The Wireless subsystem can use this function to hint to the wireless core - * what it believes should be the current regulatory domain. - * - * Returns zero if all went fine, %-EALREADY if a regulatory domain had - * already been set or other standard error codes. - * - * Caller must hold &cfg80211_mutex and ®_mutex - */ -static int __regulatory_hint(struct wiphy *wiphy, - struct regulatory_request *pending_request) -{ - bool intersect = false; - int r = 0; - - assert_cfg80211_lock(); - - r = ignore_request(wiphy, pending_request); - - if (r == REG_INTERSECT) { - if (pending_request->initiator == - NL80211_REGDOM_SET_BY_DRIVER) { - r = reg_copy_regd(&wiphy->regd, cfg80211_regdomain); - if (r) { - kfree(pending_request); - return r; - } - } - intersect = true; - } else if (r) { - /* - * If the regulatory domain being requested by the - * driver has already been set just copy it to the - * wiphy - */ - if (r == -EALREADY && - pending_request->initiator == - NL80211_REGDOM_SET_BY_DRIVER) { - r = reg_copy_regd(&wiphy->regd, cfg80211_regdomain); - if (r) { - kfree(pending_request); - return r; - } - r = -EALREADY; - goto new_request; - } - kfree(pending_request); - return r; - } - -new_request: - if (last_request != &core_request_world) - kfree(last_request); - - last_request = pending_request; - last_request->intersect = intersect; - - pending_request = NULL; - - if (last_request->initiator == NL80211_REGDOM_SET_BY_USER) { - user_alpha2[0] = last_request->alpha2[0]; - user_alpha2[1] = last_request->alpha2[1]; - } - - /* When r == REG_INTERSECT we do need to call CRDA */ - if (r < 0) { - /* - * Since CRDA will not be called in this case as we already - * have applied the requested regulatory domain before we just - * inform userspace we have processed the request - */ - if (r == -EALREADY) { - nl80211_send_reg_change_event(last_request); - reg_set_request_processed(); - } - return r; - } - - return call_crda(last_request->alpha2); -} - -/* This processes *all* regulatory hints */ -static void reg_process_hint(struct regulatory_request *reg_request, - enum nl80211_reg_initiator reg_initiator) -{ - int r = 0; - struct wiphy *wiphy = NULL; - - BUG_ON(!reg_request->alpha2); - - if (wiphy_idx_valid(reg_request->wiphy_idx)) - wiphy = wiphy_idx_to_wiphy(reg_request->wiphy_idx); - - if (reg_initiator == NL80211_REGDOM_SET_BY_DRIVER && - !wiphy) { - kfree(reg_request); - return; - } - - r = __regulatory_hint(wiphy, reg_request); - /* This is required so that the orig_* parameters are saved */ - if (r == -EALREADY && wiphy && - wiphy->flags & WIPHY_FLAG_STRICT_REGULATORY) { - wiphy_update_regulatory(wiphy, reg_initiator); - return; - } - - /* - * We only time out user hints, given that they should be the only - * source of bogus requests. - */ - if (r != -EALREADY && - reg_initiator == NL80211_REGDOM_SET_BY_USER) - schedule_delayed_work(®_timeout, msecs_to_jiffies(3142)); -} - -/* - * Processes regulatory hints, this is all the NL80211_REGDOM_SET_BY_* - * Regulatory hints come on a first come first serve basis and we - * must process each one atomically. - */ -static void reg_process_pending_hints(void) -{ - struct regulatory_request *reg_request; - - mutex_lock(&cfg80211_mutex); - mutex_lock(®_mutex); - - /* When last_request->processed becomes true this will be rescheduled */ - if (last_request && !last_request->processed) { - REG_DBG_PRINT("Pending regulatory request, waiting " - "for it to be processed...\n"); - goto out; - } - - spin_lock(®_requests_lock); - - if (list_empty(®_requests_list)) { - spin_unlock(®_requests_lock); - goto out; - } - - reg_request = list_first_entry(®_requests_list, - struct regulatory_request, - list); - list_del_init(®_request->list); - - spin_unlock(®_requests_lock); - - reg_process_hint(reg_request, reg_request->initiator); - -out: - mutex_unlock(®_mutex); - mutex_unlock(&cfg80211_mutex); -} - -/* Processes beacon hints -- this has nothing to do with country IEs */ -static void reg_process_pending_beacon_hints(void) -{ - struct cfg80211_registered_device *rdev; - struct reg_beacon *pending_beacon, *tmp; - - /* - * No need to hold the reg_mutex here as we just touch wiphys - * and do not read or access regulatory variables. - */ - mutex_lock(&cfg80211_mutex); - - /* This goes through the _pending_ beacon list */ - spin_lock_bh(®_pending_beacons_lock); - - if (list_empty(®_pending_beacons)) { - spin_unlock_bh(®_pending_beacons_lock); - goto out; - } - - list_for_each_entry_safe(pending_beacon, tmp, - ®_pending_beacons, list) { - - list_del_init(&pending_beacon->list); - - /* Applies the beacon hint to current wiphys */ - list_for_each_entry(rdev, &cfg80211_rdev_list, list) - wiphy_update_new_beacon(&rdev->wiphy, pending_beacon); - - /* Remembers the beacon hint for new wiphys or reg changes */ - list_add_tail(&pending_beacon->list, ®_beacon_list); - } - - spin_unlock_bh(®_pending_beacons_lock); -out: - mutex_unlock(&cfg80211_mutex); -} - -static void reg_todo(struct work_struct *work) -{ - reg_process_pending_hints(); - reg_process_pending_beacon_hints(); -} - -static void queue_regulatory_request(struct regulatory_request *request) -{ - if (isalpha(request->alpha2[0])) - request->alpha2[0] = toupper(request->alpha2[0]); - if (isalpha(request->alpha2[1])) - request->alpha2[1] = toupper(request->alpha2[1]); - - spin_lock(®_requests_lock); - list_add_tail(&request->list, ®_requests_list); - spin_unlock(®_requests_lock); - - schedule_work(®_work); -} - -/* - * Core regulatory hint -- happens during cfg80211_init() - * and when we restore regulatory settings. - */ -static int regulatory_hint_core(const char *alpha2) -{ - struct regulatory_request *request; - - request = kzalloc(sizeof(struct regulatory_request), - GFP_KERNEL); - if (!request) - return -ENOMEM; - - request->alpha2[0] = alpha2[0]; - request->alpha2[1] = alpha2[1]; - request->initiator = NL80211_REGDOM_SET_BY_CORE; - - queue_regulatory_request(request); - - return 0; -} - -/* User hints */ -int regulatory_hint_user(const char *alpha2) -{ - struct regulatory_request *request; - - BUG_ON(!alpha2); - - request = kzalloc(sizeof(struct regulatory_request), GFP_KERNEL); - if (!request) - return -ENOMEM; - - request->wiphy_idx = WIPHY_IDX_STALE; - request->alpha2[0] = alpha2[0]; - request->alpha2[1] = alpha2[1]; - request->initiator = NL80211_REGDOM_SET_BY_USER; - - queue_regulatory_request(request); - - return 0; -} - -/* Driver hints */ -int regulatory_hint(struct wiphy *wiphy, const char *alpha2) -{ - struct regulatory_request *request; - - BUG_ON(!alpha2); - BUG_ON(!wiphy); - - request = kzalloc(sizeof(struct regulatory_request), GFP_KERNEL); - if (!request) - return -ENOMEM; - - request->wiphy_idx = get_wiphy_idx(wiphy); - - /* Must have registered wiphy first */ - BUG_ON(!wiphy_idx_valid(request->wiphy_idx)); - - request->alpha2[0] = alpha2[0]; - request->alpha2[1] = alpha2[1]; - request->initiator = NL80211_REGDOM_SET_BY_DRIVER; - - queue_regulatory_request(request); - - return 0; -} -EXPORT_SYMBOL(regulatory_hint); - -/* - * We hold wdev_lock() here so we cannot hold cfg80211_mutex() and - * therefore cannot iterate over the rdev list here. - */ -void regulatory_hint_11d(struct wiphy *wiphy, - enum ieee80211_band band, - u8 *country_ie, - u8 country_ie_len) -{ - char alpha2[2]; - enum environment_cap env = ENVIRON_ANY; - struct regulatory_request *request; - - mutex_lock(®_mutex); - - if (unlikely(!last_request)) - goto out; - - /* IE len must be evenly divisible by 2 */ - if (country_ie_len & 0x01) - goto out; - - if (country_ie_len < IEEE80211_COUNTRY_IE_MIN_LEN) - goto out; - - alpha2[0] = country_ie[0]; - alpha2[1] = country_ie[1]; - - if (country_ie[2] == 'I') - env = ENVIRON_INDOOR; - else if (country_ie[2] == 'O') - env = ENVIRON_OUTDOOR; - - /* - * We will run this only upon a successful connection on cfg80211. - * We leave conflict resolution to the workqueue, where can hold - * cfg80211_mutex. - */ - if (likely(last_request->initiator == - NL80211_REGDOM_SET_BY_COUNTRY_IE && - wiphy_idx_valid(last_request->wiphy_idx))) - goto out; - - request = kzalloc(sizeof(struct regulatory_request), GFP_KERNEL); - if (!request) - goto out; - - request->wiphy_idx = get_wiphy_idx(wiphy); - request->alpha2[0] = alpha2[0]; - request->alpha2[1] = alpha2[1]; - request->initiator = NL80211_REGDOM_SET_BY_COUNTRY_IE; - request->country_ie_env = env; - - mutex_unlock(®_mutex); - - queue_regulatory_request(request); - - return; - -out: - mutex_unlock(®_mutex); -} - -static void restore_alpha2(char *alpha2, bool reset_user) -{ - /* indicates there is no alpha2 to consider for restoration */ - alpha2[0] = '9'; - alpha2[1] = '7'; - - /* The user setting has precedence over the module parameter */ - if (is_user_regdom_saved()) { - /* Unless we're asked to ignore it and reset it */ - if (reset_user) { - REG_DBG_PRINT("Restoring regulatory settings " - "including user preference\n"); - user_alpha2[0] = '9'; - user_alpha2[1] = '7'; - - /* - * If we're ignoring user settings, we still need to - * check the module parameter to ensure we put things - * back as they were for a full restore. - */ - if (!is_world_regdom(ieee80211_regdom)) { - REG_DBG_PRINT("Keeping preference on " - "module parameter ieee80211_regdom: %c%c\n", - ieee80211_regdom[0], - ieee80211_regdom[1]); - alpha2[0] = ieee80211_regdom[0]; - alpha2[1] = ieee80211_regdom[1]; - } - } else { - REG_DBG_PRINT("Restoring regulatory settings " - "while preserving user preference for: %c%c\n", - user_alpha2[0], - user_alpha2[1]); - alpha2[0] = user_alpha2[0]; - alpha2[1] = user_alpha2[1]; - } - } else if (!is_world_regdom(ieee80211_regdom)) { - REG_DBG_PRINT("Keeping preference on " - "module parameter ieee80211_regdom: %c%c\n", - ieee80211_regdom[0], - ieee80211_regdom[1]); - alpha2[0] = ieee80211_regdom[0]; - alpha2[1] = ieee80211_regdom[1]; - } else - REG_DBG_PRINT("Restoring regulatory settings\n"); -} - -static void restore_custom_reg_settings(struct wiphy *wiphy) -{ - struct ieee80211_supported_band *sband; - enum ieee80211_band band; - struct ieee80211_channel *chan; - int i; - - for (band = 0; band < IEEE80211_NUM_BANDS; band++) { - sband = wiphy->bands[band]; - if (!sband) - continue; - for (i = 0; i < sband->n_channels; i++) { - chan = &sband->channels[i]; - chan->flags = chan->orig_flags; - chan->max_antenna_gain = chan->orig_mag; - chan->max_power = chan->orig_mpwr; - } - } -} - -/* - * Restoring regulatory settings involves ingoring any - * possibly stale country IE information and user regulatory - * settings if so desired, this includes any beacon hints - * learned as we could have traveled outside to another country - * after disconnection. To restore regulatory settings we do - * exactly what we did at bootup: - * - * - send a core regulatory hint - * - send a user regulatory hint if applicable - * - * Device drivers that send a regulatory hint for a specific country - * keep their own regulatory domain on wiphy->regd so that does does - * not need to be remembered. - */ -static void restore_regulatory_settings(bool reset_user) -{ - char alpha2[2]; - char world_alpha2[2]; - struct reg_beacon *reg_beacon, *btmp; - struct regulatory_request *reg_request, *tmp; - LIST_HEAD(tmp_reg_req_list); - struct cfg80211_registered_device *rdev; - - mutex_lock(&cfg80211_mutex); - mutex_lock(®_mutex); - - reset_regdomains(true); - restore_alpha2(alpha2, reset_user); - - /* - * If there's any pending requests we simply - * stash them to a temporary pending queue and - * add then after we've restored regulatory - * settings. - */ - spin_lock(®_requests_lock); - if (!list_empty(®_requests_list)) { - list_for_each_entry_safe(reg_request, tmp, - ®_requests_list, list) { - if (reg_request->initiator != - NL80211_REGDOM_SET_BY_USER) - continue; - list_del(®_request->list); - list_add_tail(®_request->list, &tmp_reg_req_list); - } - } - spin_unlock(®_requests_lock); - - /* Clear beacon hints */ - spin_lock_bh(®_pending_beacons_lock); - if (!list_empty(®_pending_beacons)) { - list_for_each_entry_safe(reg_beacon, btmp, - ®_pending_beacons, list) { - list_del(®_beacon->list); - kfree(reg_beacon); - } - } - spin_unlock_bh(®_pending_beacons_lock); - - if (!list_empty(®_beacon_list)) { - list_for_each_entry_safe(reg_beacon, btmp, - ®_beacon_list, list) { - list_del(®_beacon->list); - kfree(reg_beacon); - } - } - - /* First restore to the basic regulatory settings */ - cfg80211_regdomain = cfg80211_world_regdom; - world_alpha2[0] = cfg80211_regdomain->alpha2[0]; - world_alpha2[1] = cfg80211_regdomain->alpha2[1]; - - list_for_each_entry(rdev, &cfg80211_rdev_list, list) { - if (rdev->wiphy.flags & WIPHY_FLAG_CUSTOM_REGULATORY) - restore_custom_reg_settings(&rdev->wiphy); - } - - mutex_unlock(®_mutex); - mutex_unlock(&cfg80211_mutex); - - regulatory_hint_core(world_alpha2); - - /* - * This restores the ieee80211_regdom module parameter - * preference or the last user requested regulatory - * settings, user regulatory settings takes precedence. - */ - if (is_an_alpha2(alpha2)) - regulatory_hint_user(user_alpha2); - - if (list_empty(&tmp_reg_req_list)) - return; - - mutex_lock(&cfg80211_mutex); - mutex_lock(®_mutex); - - spin_lock(®_requests_lock); - list_for_each_entry_safe(reg_request, tmp, &tmp_reg_req_list, list) { - REG_DBG_PRINT("Adding request for country %c%c back " - "into the queue\n", - reg_request->alpha2[0], - reg_request->alpha2[1]); - list_del(®_request->list); - list_add_tail(®_request->list, ®_requests_list); - } - spin_unlock(®_requests_lock); - - mutex_unlock(®_mutex); - mutex_unlock(&cfg80211_mutex); - - REG_DBG_PRINT("Kicking the queue\n"); - - schedule_work(®_work); -} - -void regulatory_hint_disconnect(void) -{ - REG_DBG_PRINT("All devices are disconnected, going to " - "restore regulatory settings\n"); - restore_regulatory_settings(false); -} - -static bool freq_is_chan_12_13_14(u16 freq) -{ - if (freq == ieee80211_channel_to_frequency(12, IEEE80211_BAND_2GHZ) || - freq == ieee80211_channel_to_frequency(13, IEEE80211_BAND_2GHZ) || - freq == ieee80211_channel_to_frequency(14, IEEE80211_BAND_2GHZ)) - return true; - return false; -} - -int regulatory_hint_found_beacon(struct wiphy *wiphy, - struct ieee80211_channel *beacon_chan, - gfp_t gfp) -{ - struct reg_beacon *reg_beacon; - - if (likely((beacon_chan->beacon_found || - (beacon_chan->flags & IEEE80211_CHAN_RADAR) || - (beacon_chan->band == IEEE80211_BAND_2GHZ && - !freq_is_chan_12_13_14(beacon_chan->center_freq))))) - return 0; - - reg_beacon = kzalloc(sizeof(struct reg_beacon), gfp); - if (!reg_beacon) - return -ENOMEM; - - REG_DBG_PRINT("Found new beacon on " - "frequency: %d MHz (Ch %d) on %s\n", - beacon_chan->center_freq, - ieee80211_frequency_to_channel(beacon_chan->center_freq), - wiphy_name(wiphy)); - - memcpy(®_beacon->chan, beacon_chan, - sizeof(struct ieee80211_channel)); - - - /* - * Since we can be called from BH or and non-BH context - * we must use spin_lock_bh() - */ - spin_lock_bh(®_pending_beacons_lock); - list_add_tail(®_beacon->list, ®_pending_beacons); - spin_unlock_bh(®_pending_beacons_lock); - - schedule_work(®_work); - - return 0; -} - -static void print_rd_rules(const struct ieee80211_regdomain *rd) -{ - unsigned int i; - const struct ieee80211_reg_rule *reg_rule = NULL; - const struct ieee80211_freq_range *freq_range = NULL; - const struct ieee80211_power_rule *power_rule = NULL; - - pr_info(" (start_freq - end_freq @ bandwidth), (max_antenna_gain, max_eirp)\n"); - - for (i = 0; i < rd->n_reg_rules; i++) { - reg_rule = &rd->reg_rules[i]; - freq_range = ®_rule->freq_range; - power_rule = ®_rule->power_rule; - - /* - * There may not be documentation for max antenna gain - * in certain regions - */ - if (power_rule->max_antenna_gain) - pr_info(" (%d KHz - %d KHz @ %d KHz), (%d mBi, %d mBm)\n", - freq_range->start_freq_khz, - freq_range->end_freq_khz, - freq_range->max_bandwidth_khz, - power_rule->max_antenna_gain, - power_rule->max_eirp); - else - pr_info(" (%d KHz - %d KHz @ %d KHz), (N/A, %d mBm)\n", - freq_range->start_freq_khz, - freq_range->end_freq_khz, - freq_range->max_bandwidth_khz, - power_rule->max_eirp); - } -} - -bool reg_supported_dfs_region(u8 dfs_region) -{ - switch (dfs_region) { - case NL80211_DFS_UNSET: - case NL80211_DFS_FCC: - case NL80211_DFS_ETSI: - case NL80211_DFS_JP: - return true; - default: - REG_DBG_PRINT("Ignoring uknown DFS master region: %d\n", - dfs_region); - return false; - } -} - -static void print_dfs_region(u8 dfs_region) -{ - if (!dfs_region) - return; - - switch (dfs_region) { - case NL80211_DFS_FCC: - pr_info(" DFS Master region FCC"); - break; - case NL80211_DFS_ETSI: - pr_info(" DFS Master region ETSI"); - break; - case NL80211_DFS_JP: - pr_info(" DFS Master region JP"); - break; - default: - pr_info(" DFS Master region Uknown"); - break; - } -} - -static void print_regdomain(const struct ieee80211_regdomain *rd) -{ - - if (is_intersected_alpha2(rd->alpha2)) { - - if (last_request->initiator == - NL80211_REGDOM_SET_BY_COUNTRY_IE) { - struct cfg80211_registered_device *rdev; - rdev = cfg80211_rdev_by_wiphy_idx( - last_request->wiphy_idx); - if (rdev) { - pr_info("Current regulatory domain updated by AP to: %c%c\n", - rdev->country_ie_alpha2[0], - rdev->country_ie_alpha2[1]); - } else - pr_info("Current regulatory domain intersected:\n"); - } else - pr_info("Current regulatory domain intersected:\n"); - } else if (is_world_regdom(rd->alpha2)) - pr_info("World regulatory domain updated:\n"); - else { - if (is_unknown_alpha2(rd->alpha2)) - pr_info("Regulatory domain changed to driver built-in settings (unknown country)\n"); - else - pr_info("Regulatory domain changed to country: %c%c\n", - rd->alpha2[0], rd->alpha2[1]); - } - print_dfs_region(rd->dfs_region); - print_rd_rules(rd); -} - -static void print_regdomain_info(const struct ieee80211_regdomain *rd) -{ - pr_info("Regulatory domain: %c%c\n", rd->alpha2[0], rd->alpha2[1]); - print_rd_rules(rd); -} - -/* Takes ownership of rd only if it doesn't fail */ -static int __set_regdom(const struct ieee80211_regdomain *rd) -{ - const struct ieee80211_regdomain *intersected_rd = NULL; - struct cfg80211_registered_device *rdev = NULL; - struct wiphy *request_wiphy; - /* Some basic sanity checks first */ - - if (is_world_regdom(rd->alpha2)) { - if (WARN_ON(!reg_is_valid_request(rd->alpha2))) - return -EINVAL; - update_world_regdomain(rd); - return 0; - } - - if (!is_alpha2_set(rd->alpha2) && !is_an_alpha2(rd->alpha2) && - !is_unknown_alpha2(rd->alpha2)) - return -EINVAL; - - if (!last_request) - return -EINVAL; - - /* - * Lets only bother proceeding on the same alpha2 if the current - * rd is non static (it means CRDA was present and was used last) - * and the pending request came in from a country IE - */ - if (last_request->initiator != NL80211_REGDOM_SET_BY_COUNTRY_IE) { - /* - * If someone else asked us to change the rd lets only bother - * checking if the alpha2 changes if CRDA was already called - */ - if (!regdom_changes(rd->alpha2)) - return -EINVAL; - } - - /* - * Now lets set the regulatory domain, update all driver channels - * and finally inform them of what we have done, in case they want - * to review or adjust their own settings based on their own - * internal EEPROM data - */ - - if (WARN_ON(!reg_is_valid_request(rd->alpha2))) - return -EINVAL; - - if (!is_valid_rd(rd)) { - pr_err("Invalid regulatory domain detected:\n"); - print_regdomain_info(rd); - return -EINVAL; - } - - request_wiphy = wiphy_idx_to_wiphy(last_request->wiphy_idx); - if (!request_wiphy && - (last_request->initiator == NL80211_REGDOM_SET_BY_DRIVER || - last_request->initiator == NL80211_REGDOM_SET_BY_COUNTRY_IE)) { - schedule_delayed_work(®_timeout, 0); - return -ENODEV; - } - - if (!last_request->intersect) { - int r; - - if (last_request->initiator != NL80211_REGDOM_SET_BY_DRIVER) { - reset_regdomains(false); - cfg80211_regdomain = rd; - return 0; - } - - /* - * For a driver hint, lets copy the regulatory domain the - * driver wanted to the wiphy to deal with conflicts - */ - - /* - * Userspace could have sent two replies with only - * one kernel request. - */ - if (request_wiphy->regd) - return -EALREADY; - - r = reg_copy_regd(&request_wiphy->regd, rd); - if (r) - return r; - - reset_regdomains(false); - cfg80211_regdomain = rd; - return 0; - } - - /* Intersection requires a bit more work */ - - if (last_request->initiator != NL80211_REGDOM_SET_BY_COUNTRY_IE) { - - intersected_rd = regdom_intersect(rd, cfg80211_regdomain); - if (!intersected_rd) - return -EINVAL; - - /* - * We can trash what CRDA provided now. - * However if a driver requested this specific regulatory - * domain we keep it for its private use - */ - if (last_request->initiator == NL80211_REGDOM_SET_BY_DRIVER) - request_wiphy->regd = rd; - else - kfree(rd); - - rd = NULL; - - reset_regdomains(false); - cfg80211_regdomain = intersected_rd; - - return 0; - } - - if (!intersected_rd) - return -EINVAL; - - rdev = wiphy_to_dev(request_wiphy); - - rdev->country_ie_alpha2[0] = rd->alpha2[0]; - rdev->country_ie_alpha2[1] = rd->alpha2[1]; - rdev->env = last_request->country_ie_env; - - BUG_ON(intersected_rd == rd); - - kfree(rd); - rd = NULL; - - reset_regdomains(false); - cfg80211_regdomain = intersected_rd; - - return 0; -} - - -/* - * Use this call to set the current regulatory domain. Conflicts with - * multiple drivers can be ironed out later. Caller must've already - * kmalloc'd the rd structure. Caller must hold cfg80211_mutex - */ -int set_regdom(const struct ieee80211_regdomain *rd) -{ - int r; - - assert_cfg80211_lock(); - - mutex_lock(®_mutex); - - /* Note that this doesn't update the wiphys, this is done below */ - r = __set_regdom(rd); - if (r) { - kfree(rd); - mutex_unlock(®_mutex); - return r; - } - - /* This would make this whole thing pointless */ - if (!last_request->intersect) - BUG_ON(rd != cfg80211_regdomain); - - /* update all wiphys now with the new established regulatory domain */ - update_all_wiphy_regulatory(last_request->initiator); - - print_regdomain(cfg80211_regdomain); - - nl80211_send_reg_change_event(last_request); - - reg_set_request_processed(); - - mutex_unlock(®_mutex); - - return r; -} - -#ifdef CONFIG_HOTPLUG -int reg_device_uevent(struct device *dev, struct kobj_uevent_env *env) -{ - if (last_request && !last_request->processed) { - if (add_uevent_var(env, "COUNTRY=%c%c", - last_request->alpha2[0], - last_request->alpha2[1])) - return -ENOMEM; - } - - return 0; -} -#else -int reg_device_uevent(struct device *dev, struct kobj_uevent_env *env) -{ - return -ENODEV; -} -#endif /* CONFIG_HOTPLUG */ - -/* Caller must hold cfg80211_mutex */ -void reg_device_remove(struct wiphy *wiphy) -{ - struct wiphy *request_wiphy = NULL; - - assert_cfg80211_lock(); - - mutex_lock(®_mutex); - - kfree(wiphy->regd); - - if (last_request) - request_wiphy = wiphy_idx_to_wiphy(last_request->wiphy_idx); - - if (!request_wiphy || request_wiphy != wiphy) - goto out; - - last_request->wiphy_idx = WIPHY_IDX_STALE; - last_request->country_ie_env = ENVIRON_ANY; -out: - mutex_unlock(®_mutex); -} - -static void reg_timeout_work(struct work_struct *work) -{ - REG_DBG_PRINT("Timeout while waiting for CRDA to reply, " - "restoring regulatory settings\n"); - restore_regulatory_settings(true); -} - -int __init regulatory_init(void) -{ - int err = 0; - - reg_pdev = platform_device_register_simple("regulatory", 0, NULL, 0); - if (IS_ERR(reg_pdev)) - return PTR_ERR(reg_pdev); - - reg_pdev->dev.type = ®_device_type; - - spin_lock_init(®_requests_lock); - spin_lock_init(®_pending_beacons_lock); - - cfg80211_regdomain = cfg80211_world_regdom; - - user_alpha2[0] = '9'; - user_alpha2[1] = '7'; - - /* We always try to get an update for the static regdomain */ - err = regulatory_hint_core(cfg80211_regdomain->alpha2); - if (err) { - if (err == -ENOMEM) - return err; - /* - * N.B. kobject_uevent_env() can fail mainly for when we're out - * memory which is handled and propagated appropriately above - * but it can also fail during a netlink_broadcast() or during - * early boot for call_usermodehelper(). For now treat these - * errors as non-fatal. - */ - pr_err("kobject_uevent_env() was unable to call CRDA during init\n"); -#ifdef CONFIG_CFG80211_REG_DEBUG - /* We want to find out exactly why when debugging */ - WARN_ON(err); -#endif - } - - /* - * Finally, if the user set the module parameter treat it - * as a user hint. - */ - if (!is_world_regdom(ieee80211_regdom)) - regulatory_hint_user(ieee80211_regdom); - - return 0; -} - -void /* __init_or_exit */ regulatory_exit(void) -{ - struct regulatory_request *reg_request, *tmp; - struct reg_beacon *reg_beacon, *btmp; - - cancel_work_sync(®_work); - cancel_delayed_work_sync(®_timeout); - - mutex_lock(&cfg80211_mutex); - mutex_lock(®_mutex); - - reset_regdomains(true); - - dev_set_uevent_suppress(®_pdev->dev, true); - - platform_device_unregister(reg_pdev); - - spin_lock_bh(®_pending_beacons_lock); - if (!list_empty(®_pending_beacons)) { - list_for_each_entry_safe(reg_beacon, btmp, - ®_pending_beacons, list) { - list_del(®_beacon->list); - kfree(reg_beacon); - } - } - spin_unlock_bh(®_pending_beacons_lock); - - if (!list_empty(®_beacon_list)) { - list_for_each_entry_safe(reg_beacon, btmp, - ®_beacon_list, list) { - list_del(®_beacon->list); - kfree(reg_beacon); - } - } - - spin_lock(®_requests_lock); - if (!list_empty(®_requests_list)) { - list_for_each_entry_safe(reg_request, tmp, - ®_requests_list, list) { - list_del(®_request->list); - kfree(reg_request); - } - } - spin_unlock(®_requests_lock); - - mutex_unlock(®_mutex); - mutex_unlock(&cfg80211_mutex); -} diff --git a/openairITS/mac/DOT11/net/wireless/reg.h b/openairITS/mac/DOT11/net/wireless/reg.h deleted file mode 100644 index e2aaaf525a..0000000000 --- a/openairITS/mac/DOT11/net/wireless/reg.h +++ /dev/null @@ -1,103 +0,0 @@ -#ifndef __NET_WIRELESS_REG_H -#define __NET_WIRELESS_REG_H -/* - * Copyright 2008-2011 Luis R. Rodriguez - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -extern const struct ieee80211_regdomain *cfg80211_regdomain; - -bool is_world_regdom(const char *alpha2); -bool reg_is_valid_request(const char *alpha2); -bool reg_supported_dfs_region(u8 dfs_region); - -int regulatory_hint_user(const char *alpha2); - -int reg_device_uevent(struct device *dev, struct kobj_uevent_env *env); -void reg_device_remove(struct wiphy *wiphy); - -int __init regulatory_init(void); -void regulatory_exit(void); - -int set_regdom(const struct ieee80211_regdomain *rd); - -void regulatory_update(struct wiphy *wiphy, enum nl80211_reg_initiator setby); - -/** - * regulatory_hint_found_beacon - hints a beacon was found on a channel - * @wiphy: the wireless device where the beacon was found on - * @beacon_chan: the channel on which the beacon was found on - * @gfp: context flags - * - * This informs the wireless core that a beacon from an AP was found on - * the channel provided. This allows the wireless core to make educated - * guesses on regulatory to help with world roaming. This is only used for - * world roaming -- when we do not know our current location. This is - * only useful on channels 12, 13 and 14 on the 2 GHz band as channels - * 1-11 are already enabled by the world regulatory domain; and on - * non-radar 5 GHz channels. - * - * Drivers do not need to call this, cfg80211 will do it for after a scan - * on a newly found BSS. If you cannot make use of this feature you can - * set the wiphy->disable_beacon_hints to true. - */ -int regulatory_hint_found_beacon(struct wiphy *wiphy, - struct ieee80211_channel *beacon_chan, - gfp_t gfp); - -/** - * regulatory_hint_11d - hints a country IE as a regulatory domain - * @wiphy: the wireless device giving the hint (used only for reporting - * conflicts) - * @band: the band on which the country IE was received on. This determines - * the band we'll process the country IE channel triplets for. - * @country_ie: pointer to the country IE - * @country_ie_len: length of the country IE - * - * We will intersect the rd with the what CRDA tells us should apply - * for the alpha2 this country IE belongs to, this prevents APs from - * sending us incorrect or outdated information against a country. - * - * The AP is expected to provide Country IE channel triplets for the - * band it is on. It is technically possible for APs to send channel - * country IE triplets even for channels outside of the band they are - * in but for that they would have to use the regulatory extension - * in combination with a triplet but this behaviour is currently - * not observed. For this reason if a triplet is seen with channel - * information for a band the BSS is not present in it will be ignored. - */ -void regulatory_hint_11d(struct wiphy *wiphy, - enum ieee80211_band band, - u8 *country_ie, - u8 country_ie_len); - -/** - * regulatory_hint_disconnect - informs all devices have been disconneted - * - * Regulotory rules can be enhanced further upon scanning and upon - * connection to an AP. These rules become stale if we disconnect - * and go to another country, whether or not we suspend and resume. - * If we suspend, go to another country and resume we'll automatically - * get disconnected shortly after resuming and things will be reset as well. - * This routine is a helper to restore regulatory settings to how they were - * prior to our first connect attempt. This includes ignoring country IE and - * beacon regulatory hints. The ieee80211_regdom module parameter will always - * be respected but if a user had set the regulatory domain that will take - * precedence. - * - * Must be called from process context. - */ -void regulatory_hint_disconnect(void); - -#endif /* __NET_WIRELESS_REG_H */ diff --git a/openairITS/mac/DOT11/net/wireless/regdb.h b/openairITS/mac/DOT11/net/wireless/regdb.h deleted file mode 100644 index 3279cfcefb..0000000000 --- a/openairITS/mac/DOT11/net/wireless/regdb.h +++ /dev/null @@ -1,23 +0,0 @@ -#ifndef __REGDB_H__ -#define __REGDB_H__ - -/* - * Copyright 2009 John W. Linville - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -extern const struct ieee80211_regdomain *reg_regdb[]; -extern int reg_regdb_size; - -#endif /* __REGDB_H__ */ diff --git a/openairITS/mac/DOT11/net/wireless/scan.c b/openairITS/mac/DOT11/net/wireless/scan.c deleted file mode 100644 index 8991824664..0000000000 --- a/openairITS/mac/DOT11/net/wireless/scan.c +++ /dev/null @@ -1,1366 +0,0 @@ -/* - * cfg80211 scan result handling - * - * Copyright 2008 Johannes Berg - */ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "core.h" -#include "nl80211.h" -#include "wext-compat.h" - -#define IEEE80211_SCAN_RESULT_EXPIRE (15 * HZ) - -void ___cfg80211_scan_done(struct cfg80211_registered_device *rdev, bool leak) -{ - struct cfg80211_scan_request *request; - struct net_device *dev; -#ifdef CONFIG_CFG80211_WEXT - union iwreq_data wrqu; -#endif - - ASSERT_RDEV_LOCK(rdev); - - request = rdev->scan_req; - - if (!request) - return; - - dev = request->dev; - - /* - * This must be before sending the other events! - * Otherwise, wpa_supplicant gets completely confused with - * wext events. - */ - cfg80211_sme_scan_done(dev); - - if (request->aborted) - nl80211_send_scan_aborted(rdev, dev); - else - nl80211_send_scan_done(rdev, dev); - -#ifdef CONFIG_CFG80211_WEXT - if (!request->aborted) { - memset(&wrqu, 0, sizeof(wrqu)); - - wireless_send_event(dev, SIOCGIWSCAN, &wrqu, NULL); - } -#endif - - dev_put(dev); - - rdev->scan_req = NULL; - - /* - * OK. If this is invoked with "leak" then we can't - * free this ... but we've cleaned it up anyway. The - * driver failed to call the scan_done callback, so - * all bets are off, it might still be trying to use - * the scan request or not ... if it accesses the dev - * in there (it shouldn't anyway) then it may crash. - */ - if (!leak) - kfree(request); -} - -void __cfg80211_scan_done(struct work_struct *wk) -{ - struct cfg80211_registered_device *rdev; - - rdev = container_of(wk, struct cfg80211_registered_device, - scan_done_wk); - - cfg80211_lock_rdev(rdev); - ___cfg80211_scan_done(rdev, false); - cfg80211_unlock_rdev(rdev); -} - -void cfg80211_scan_done(struct cfg80211_scan_request *request, bool aborted) -{ - WARN_ON(request != wiphy_to_dev(request->wiphy)->scan_req); - - request->aborted = aborted; - queue_work(cfg80211_wq, &wiphy_to_dev(request->wiphy)->scan_done_wk); -} -EXPORT_SYMBOL(cfg80211_scan_done); - -void __cfg80211_sched_scan_results(struct work_struct *wk) -{ - struct cfg80211_registered_device *rdev; - - rdev = container_of(wk, struct cfg80211_registered_device, - sched_scan_results_wk); - - mutex_lock(&rdev->sched_scan_mtx); - - /* we don't have sched_scan_req anymore if the scan is stopping */ - if (rdev->sched_scan_req) - nl80211_send_sched_scan_results(rdev, - rdev->sched_scan_req->dev); - - mutex_unlock(&rdev->sched_scan_mtx); -} - -void cfg80211_sched_scan_results(struct wiphy *wiphy) -{ - /* ignore if we're not scanning */ - if (wiphy_to_dev(wiphy)->sched_scan_req) - queue_work(cfg80211_wq, - &wiphy_to_dev(wiphy)->sched_scan_results_wk); -} -EXPORT_SYMBOL(cfg80211_sched_scan_results); - -void cfg80211_sched_scan_stopped(struct wiphy *wiphy) -{ - struct cfg80211_registered_device *rdev = wiphy_to_dev(wiphy); - - mutex_lock(&rdev->sched_scan_mtx); - __cfg80211_stop_sched_scan(rdev, true); - mutex_unlock(&rdev->sched_scan_mtx); -} -EXPORT_SYMBOL(cfg80211_sched_scan_stopped); - -int __cfg80211_stop_sched_scan(struct cfg80211_registered_device *rdev, - bool driver_initiated) -{ - struct net_device *dev; - - lockdep_assert_held(&rdev->sched_scan_mtx); - - if (!rdev->sched_scan_req) - return -ENOENT; - - dev = rdev->sched_scan_req->dev; - - if (!driver_initiated) { - int err = rdev->ops->sched_scan_stop(&rdev->wiphy, dev); - if (err) - return err; - } - - nl80211_send_sched_scan(rdev, dev, NL80211_CMD_SCHED_SCAN_STOPPED); - - kfree(rdev->sched_scan_req); - rdev->sched_scan_req = NULL; - - return 0; -} - -static void bss_release(struct kref *ref) -{ - struct cfg80211_internal_bss *bss; - - bss = container_of(ref, struct cfg80211_internal_bss, ref); - if (bss->pub.free_priv) - bss->pub.free_priv(&bss->pub); - - if (bss->beacon_ies_allocated) - kfree(bss->pub.beacon_ies); - if (bss->proberesp_ies_allocated) - kfree(bss->pub.proberesp_ies); - - BUG_ON(atomic_read(&bss->hold)); - - kfree(bss); -} - -/* must hold dev->bss_lock! */ -void cfg80211_bss_age(struct cfg80211_registered_device *dev, - unsigned long age_secs) -{ - struct cfg80211_internal_bss *bss; - unsigned long age_jiffies = msecs_to_jiffies(age_secs * MSEC_PER_SEC); - - list_for_each_entry(bss, &dev->bss_list, list) { - bss->ts -= age_jiffies; - } -} - -/* must hold dev->bss_lock! */ -static void __cfg80211_unlink_bss(struct cfg80211_registered_device *dev, - struct cfg80211_internal_bss *bss) -{ - list_del_init(&bss->list); - rb_erase(&bss->rbn, &dev->bss_tree); - kref_put(&bss->ref, bss_release); -} - -/* must hold dev->bss_lock! */ -void cfg80211_bss_expire(struct cfg80211_registered_device *dev) -{ - struct cfg80211_internal_bss *bss, *tmp; - bool expired = false; - - list_for_each_entry_safe(bss, tmp, &dev->bss_list, list) { - if (atomic_read(&bss->hold)) - continue; - if (!time_after(jiffies, bss->ts + IEEE80211_SCAN_RESULT_EXPIRE)) - continue; - __cfg80211_unlink_bss(dev, bss); - expired = true; - } - - if (expired) - dev->bss_generation++; -} - -const u8 *cfg80211_find_ie(u8 eid, const u8 *ies, int len) -{ - while (len > 2 && ies[0] != eid) { - len -= ies[1] + 2; - ies += ies[1] + 2; - } - if (len < 2) - return NULL; - if (len < 2 + ies[1]) - return NULL; - return ies; -} -EXPORT_SYMBOL(cfg80211_find_ie); - -const u8 *cfg80211_find_vendor_ie(unsigned int oui, u8 oui_type, - const u8 *ies, int len) -{ - struct ieee80211_vendor_ie *ie; - const u8 *pos = ies, *end = ies + len; - int ie_oui; - - while (pos < end) { - pos = cfg80211_find_ie(WLAN_EID_VENDOR_SPECIFIC, pos, - end - pos); - if (!pos) - return NULL; - - if (end - pos < sizeof(*ie)) - return NULL; - - ie = (struct ieee80211_vendor_ie *)pos; - ie_oui = ie->oui[0] << 16 | ie->oui[1] << 8 | ie->oui[2]; - if (ie_oui == oui && ie->oui_type == oui_type) - return pos; - - pos += 2 + ie->len; - } - return NULL; -} -EXPORT_SYMBOL(cfg80211_find_vendor_ie); - -static int cmp_ies(u8 num, u8 *ies1, size_t len1, u8 *ies2, size_t len2) -{ - const u8 *ie1 = cfg80211_find_ie(num, ies1, len1); - const u8 *ie2 = cfg80211_find_ie(num, ies2, len2); - - /* equal if both missing */ - if (!ie1 && !ie2) - return 0; - /* sort missing IE before (left of) present IE */ - if (!ie1) - return -1; - if (!ie2) - return 1; - - /* sort by length first, then by contents */ - if (ie1[1] != ie2[1]) - return ie2[1] - ie1[1]; - return memcmp(ie1 + 2, ie2 + 2, ie1[1]); -} - -static bool is_bss(struct cfg80211_bss *a, - const u8 *bssid, - const u8 *ssid, size_t ssid_len) -{ - const u8 *ssidie; - - if (bssid && compare_ether_addr(a->bssid, bssid)) - return false; - - if (!ssid) - return true; - - ssidie = cfg80211_find_ie(WLAN_EID_SSID, - a->information_elements, - a->len_information_elements); - if (!ssidie) - return false; - if (ssidie[1] != ssid_len) - return false; - return memcmp(ssidie + 2, ssid, ssid_len) == 0; -} - -static bool is_mesh_bss(struct cfg80211_bss *a) -{ - const u8 *ie; - - if (!WLAN_CAPABILITY_IS_STA_BSS(a->capability)) - return false; - - ie = cfg80211_find_ie(WLAN_EID_MESH_ID, - a->information_elements, - a->len_information_elements); - if (!ie) - return false; - - ie = cfg80211_find_ie(WLAN_EID_MESH_CONFIG, - a->information_elements, - a->len_information_elements); - if (!ie) - return false; - - return true; -} - -static bool is_mesh(struct cfg80211_bss *a, - const u8 *meshid, size_t meshidlen, - const u8 *meshcfg) -{ - const u8 *ie; - - if (!WLAN_CAPABILITY_IS_STA_BSS(a->capability)) - return false; - - ie = cfg80211_find_ie(WLAN_EID_MESH_ID, - a->information_elements, - a->len_information_elements); - if (!ie) - return false; - if (ie[1] != meshidlen) - return false; - if (memcmp(ie + 2, meshid, meshidlen)) - return false; - - ie = cfg80211_find_ie(WLAN_EID_MESH_CONFIG, - a->information_elements, - a->len_information_elements); - if (!ie) - return false; - if (ie[1] != sizeof(struct ieee80211_meshconf_ie)) - return false; - - /* - * Ignore mesh capability (last two bytes of the IE) when - * comparing since that may differ between stations taking - * part in the same mesh. - */ - return memcmp(ie + 2, meshcfg, - sizeof(struct ieee80211_meshconf_ie) - 2) == 0; -} - -static int cmp_bss_core(struct cfg80211_bss *a, - struct cfg80211_bss *b) -{ - int r; - - if (a->channel != b->channel) - return b->channel->center_freq - a->channel->center_freq; - - if (is_mesh_bss(a) && is_mesh_bss(b)) { - r = cmp_ies(WLAN_EID_MESH_ID, - a->information_elements, - a->len_information_elements, - b->information_elements, - b->len_information_elements); - if (r) - return r; - return cmp_ies(WLAN_EID_MESH_CONFIG, - a->information_elements, - a->len_information_elements, - b->information_elements, - b->len_information_elements); - } - - return memcmp(a->bssid, b->bssid, ETH_ALEN); -} - -static int cmp_bss(struct cfg80211_bss *a, - struct cfg80211_bss *b) -{ - int r; - - r = cmp_bss_core(a, b); - if (r) - return r; - - return cmp_ies(WLAN_EID_SSID, - a->information_elements, - a->len_information_elements, - b->information_elements, - b->len_information_elements); -} - -static int cmp_hidden_bss(struct cfg80211_bss *a, - struct cfg80211_bss *b) -{ - const u8 *ie1; - const u8 *ie2; - int i; - int r; - - r = cmp_bss_core(a, b); - if (r) - return r; - - ie1 = cfg80211_find_ie(WLAN_EID_SSID, - a->information_elements, - a->len_information_elements); - ie2 = cfg80211_find_ie(WLAN_EID_SSID, - b->information_elements, - b->len_information_elements); - - /* Key comparator must use same algorithm in any rb-tree - * search function (order is important), otherwise ordering - * of items in the tree is broken and search gives incorrect - * results. This code uses same order as cmp_ies() does. */ - - /* sort missing IE before (left of) present IE */ - if (!ie1) - return -1; - if (!ie2) - return 1; - - /* zero-size SSID is used as an indication of the hidden bss */ - if (!ie2[1]) - return 0; - - /* sort by length first, then by contents */ - if (ie1[1] != ie2[1]) - return ie2[1] - ie1[1]; - - /* zeroed SSID ie is another indication of a hidden bss */ - for (i = 0; i < ie2[1]; i++) - if (ie2[i + 2]) - return -1; - - return 0; -} - -struct cfg80211_bss *cfg80211_get_bss(struct wiphy *wiphy, - struct ieee80211_channel *channel, - const u8 *bssid, - const u8 *ssid, size_t ssid_len, - u16 capa_mask, u16 capa_val) -{ - struct cfg80211_registered_device *dev = wiphy_to_dev(wiphy); - struct cfg80211_internal_bss *bss, *res = NULL; - unsigned long now = jiffies; - - spin_lock_bh(&dev->bss_lock); - - list_for_each_entry(bss, &dev->bss_list, list) { - if ((bss->pub.capability & capa_mask) != capa_val) - continue; - if (channel && bss->pub.channel != channel) - continue; - /* Don't get expired BSS structs */ - if (time_after(now, bss->ts + IEEE80211_SCAN_RESULT_EXPIRE) && - !atomic_read(&bss->hold)) - continue; - if (is_bss(&bss->pub, bssid, ssid, ssid_len)) { - res = bss; - kref_get(&res->ref); - break; - } - } - - spin_unlock_bh(&dev->bss_lock); - if (!res) - return NULL; - return &res->pub; -} -EXPORT_SYMBOL(cfg80211_get_bss); - -struct cfg80211_bss *cfg80211_get_mesh(struct wiphy *wiphy, - struct ieee80211_channel *channel, - const u8 *meshid, size_t meshidlen, - const u8 *meshcfg) -{ - struct cfg80211_registered_device *dev = wiphy_to_dev(wiphy); - struct cfg80211_internal_bss *bss, *res = NULL; - - spin_lock_bh(&dev->bss_lock); - - list_for_each_entry(bss, &dev->bss_list, list) { - if (channel && bss->pub.channel != channel) - continue; - if (is_mesh(&bss->pub, meshid, meshidlen, meshcfg)) { - res = bss; - kref_get(&res->ref); - break; - } - } - - spin_unlock_bh(&dev->bss_lock); - if (!res) - return NULL; - return &res->pub; -} -EXPORT_SYMBOL(cfg80211_get_mesh); - - -static void rb_insert_bss(struct cfg80211_registered_device *dev, - struct cfg80211_internal_bss *bss) -{ - struct rb_node **p = &dev->bss_tree.rb_node; - struct rb_node *parent = NULL; - struct cfg80211_internal_bss *tbss; - int cmp; - - while (*p) { - parent = *p; - tbss = rb_entry(parent, struct cfg80211_internal_bss, rbn); - - cmp = cmp_bss(&bss->pub, &tbss->pub); - - if (WARN_ON(!cmp)) { - /* will sort of leak this BSS */ - return; - } - - if (cmp < 0) - p = &(*p)->rb_left; - else - p = &(*p)->rb_right; - } - - rb_link_node(&bss->rbn, parent, p); - rb_insert_color(&bss->rbn, &dev->bss_tree); -} - -static struct cfg80211_internal_bss * -rb_find_bss(struct cfg80211_registered_device *dev, - struct cfg80211_internal_bss *res) -{ - struct rb_node *n = dev->bss_tree.rb_node; - struct cfg80211_internal_bss *bss; - int r; - - while (n) { - bss = rb_entry(n, struct cfg80211_internal_bss, rbn); - r = cmp_bss(&res->pub, &bss->pub); - - if (r == 0) - return bss; - else if (r < 0) - n = n->rb_left; - else - n = n->rb_right; - } - - return NULL; -} - -static struct cfg80211_internal_bss * -rb_find_hidden_bss(struct cfg80211_registered_device *dev, - struct cfg80211_internal_bss *res) -{ - struct rb_node *n = dev->bss_tree.rb_node; - struct cfg80211_internal_bss *bss; - int r; - - while (n) { - bss = rb_entry(n, struct cfg80211_internal_bss, rbn); - r = cmp_hidden_bss(&res->pub, &bss->pub); - - if (r == 0) - return bss; - else if (r < 0) - n = n->rb_left; - else - n = n->rb_right; - } - - return NULL; -} - -static void -copy_hidden_ies(struct cfg80211_internal_bss *res, - struct cfg80211_internal_bss *hidden) -{ - if (unlikely(res->pub.beacon_ies)) - return; - if (WARN_ON(!hidden->pub.beacon_ies)) - return; - - res->pub.beacon_ies = kmalloc(hidden->pub.len_beacon_ies, GFP_ATOMIC); - if (unlikely(!res->pub.beacon_ies)) - return; - - res->beacon_ies_allocated = true; - res->pub.len_beacon_ies = hidden->pub.len_beacon_ies; - memcpy(res->pub.beacon_ies, hidden->pub.beacon_ies, - res->pub.len_beacon_ies); -} - -static struct cfg80211_internal_bss * -cfg80211_bss_update(struct cfg80211_registered_device *dev, - struct cfg80211_internal_bss *res) -{ - struct cfg80211_internal_bss *found = NULL; - - /* - * The reference to "res" is donated to this function. - */ - - if (WARN_ON(!res->pub.channel)) { - kref_put(&res->ref, bss_release); - return NULL; - } - - res->ts = jiffies; - - spin_lock_bh(&dev->bss_lock); - - found = rb_find_bss(dev, res); - - if (found) { - found->pub.beacon_interval = res->pub.beacon_interval; - found->pub.tsf = res->pub.tsf; - found->pub.signal = res->pub.signal; - found->pub.capability = res->pub.capability; - found->ts = res->ts; - - /* Update IEs */ - if (res->pub.proberesp_ies) { - size_t used = dev->wiphy.bss_priv_size + sizeof(*res); - size_t ielen = res->pub.len_proberesp_ies; - -#if LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,28) - if (0) { - used = 0; /* just to shut up the compiler */ -#else - if (found->pub.proberesp_ies && - !found->proberesp_ies_allocated && - ksize(found) >= used + ielen) { -#endif - memcpy(found->pub.proberesp_ies, - res->pub.proberesp_ies, ielen); - found->pub.len_proberesp_ies = ielen; - } else { - u8 *ies = found->pub.proberesp_ies; - - if (found->proberesp_ies_allocated) - ies = krealloc(ies, ielen, GFP_ATOMIC); - else - ies = kmalloc(ielen, GFP_ATOMIC); - - if (ies) { - memcpy(ies, res->pub.proberesp_ies, - ielen); - found->proberesp_ies_allocated = true; - found->pub.proberesp_ies = ies; - found->pub.len_proberesp_ies = ielen; - } - } - - /* Override possible earlier Beacon frame IEs */ - found->pub.information_elements = - found->pub.proberesp_ies; - found->pub.len_information_elements = - found->pub.len_proberesp_ies; - } - if (res->pub.beacon_ies) { - size_t used = dev->wiphy.bss_priv_size + sizeof(*res); - size_t ielen = res->pub.len_beacon_ies; - bool information_elements_is_beacon_ies = - (found->pub.information_elements == - found->pub.beacon_ies); - -#if LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,28) - if (0) { - used = 0; /* just to shut up the compiler */ -#else - if (found->pub.beacon_ies && - !found->beacon_ies_allocated && - ksize(found) >= used + ielen) { -#endif - memcpy(found->pub.beacon_ies, - res->pub.beacon_ies, ielen); - found->pub.len_beacon_ies = ielen; - } else { - u8 *ies = found->pub.beacon_ies; - - if (found->beacon_ies_allocated) - ies = krealloc(ies, ielen, GFP_ATOMIC); - else - ies = kmalloc(ielen, GFP_ATOMIC); - - if (ies) { - memcpy(ies, res->pub.beacon_ies, - ielen); - found->beacon_ies_allocated = true; - found->pub.beacon_ies = ies; - found->pub.len_beacon_ies = ielen; - } - } - - /* Override IEs if they were from a beacon before */ - if (information_elements_is_beacon_ies) { - found->pub.information_elements = - found->pub.beacon_ies; - found->pub.len_information_elements = - found->pub.len_beacon_ies; - } - } - - kref_put(&res->ref, bss_release); - } else { - struct cfg80211_internal_bss *hidden; - - /* First check if the beacon is a probe response from - * a hidden bss. If so, copy beacon ies (with nullified - * ssid) into the probe response bss entry (with real ssid). - * It is required basically for PSM implementation - * (probe responses do not contain tim ie) */ - - /* TODO: The code is not trying to update existing probe - * response bss entries when beacon ies are - * getting changed. */ - hidden = rb_find_hidden_bss(dev, res); - if (hidden) - copy_hidden_ies(res, hidden); - - /* this "consumes" the reference */ - list_add_tail(&res->list, &dev->bss_list); - rb_insert_bss(dev, res); - found = res; - } - - dev->bss_generation++; - spin_unlock_bh(&dev->bss_lock); - - kref_get(&found->ref); - return found; -} - -struct cfg80211_bss* -cfg80211_inform_bss(struct wiphy *wiphy, - struct ieee80211_channel *channel, - const u8 *bssid, u64 tsf, u16 capability, - u16 beacon_interval, const u8 *ie, size_t ielen, - s32 signal, gfp_t gfp) -{ - struct cfg80211_internal_bss *res; - size_t privsz; - - if (WARN_ON(!wiphy)) - return NULL; - - privsz = wiphy->bss_priv_size; - - if (WARN_ON(wiphy->signal_type == CFG80211_SIGNAL_TYPE_UNSPEC && - (signal < 0 || signal > 100))) - return NULL; - - res = kzalloc(sizeof(*res) + privsz + ielen, gfp); - if (!res) - return NULL; - - memcpy(res->pub.bssid, bssid, ETH_ALEN); - res->pub.channel = channel; - res->pub.signal = signal; - res->pub.tsf = tsf; - res->pub.beacon_interval = beacon_interval; - res->pub.capability = capability; - /* - * Since we do not know here whether the IEs are from a Beacon or Probe - * Response frame, we need to pick one of the options and only use it - * with the driver that does not provide the full Beacon/Probe Response - * frame. Use Beacon frame pointer to avoid indicating that this should - * override the information_elements pointer should we have received an - * earlier indication of Probe Response data. - * - * The initial buffer for the IEs is allocated with the BSS entry and - * is located after the private area. - */ - res->pub.beacon_ies = (u8 *)res + sizeof(*res) + privsz; - memcpy(res->pub.beacon_ies, ie, ielen); - res->pub.len_beacon_ies = ielen; - res->pub.information_elements = res->pub.beacon_ies; - res->pub.len_information_elements = res->pub.len_beacon_ies; - - kref_init(&res->ref); - - res = cfg80211_bss_update(wiphy_to_dev(wiphy), res); - if (!res) - return NULL; - - if (res->pub.capability & WLAN_CAPABILITY_ESS) - regulatory_hint_found_beacon(wiphy, channel, gfp); - - /* cfg80211_bss_update gives us a referenced result */ - return &res->pub; -} -EXPORT_SYMBOL(cfg80211_inform_bss); - -struct cfg80211_bss * -cfg80211_inform_bss_frame(struct wiphy *wiphy, - struct ieee80211_channel *channel, - struct ieee80211_mgmt *mgmt, size_t len, - s32 signal, gfp_t gfp) -{ - struct cfg80211_internal_bss *res; - size_t ielen = len - offsetof(struct ieee80211_mgmt, - u.probe_resp.variable); - size_t privsz; - - if (WARN_ON(!mgmt)) - return NULL; - - if (WARN_ON(!wiphy)) - return NULL; - - if (WARN_ON(wiphy->signal_type == CFG80211_SIGNAL_TYPE_UNSPEC && - (signal < 0 || signal > 100))) - return NULL; - - if (WARN_ON(len < offsetof(struct ieee80211_mgmt, u.probe_resp.variable))) - return NULL; - - privsz = wiphy->bss_priv_size; - - res = kzalloc(sizeof(*res) + privsz + ielen, gfp); - if (!res) - return NULL; - - memcpy(res->pub.bssid, mgmt->bssid, ETH_ALEN); - res->pub.channel = channel; - res->pub.signal = signal; - res->pub.tsf = le64_to_cpu(mgmt->u.probe_resp.timestamp); - res->pub.beacon_interval = le16_to_cpu(mgmt->u.probe_resp.beacon_int); - res->pub.capability = le16_to_cpu(mgmt->u.probe_resp.capab_info); - /* - * The initial buffer for the IEs is allocated with the BSS entry and - * is located after the private area. - */ - if (ieee80211_is_probe_resp(mgmt->frame_control)) { - res->pub.proberesp_ies = (u8 *) res + sizeof(*res) + privsz; - memcpy(res->pub.proberesp_ies, mgmt->u.probe_resp.variable, - ielen); - res->pub.len_proberesp_ies = ielen; - res->pub.information_elements = res->pub.proberesp_ies; - res->pub.len_information_elements = res->pub.len_proberesp_ies; - } else { - res->pub.beacon_ies = (u8 *) res + sizeof(*res) + privsz; - memcpy(res->pub.beacon_ies, mgmt->u.beacon.variable, ielen); - res->pub.len_beacon_ies = ielen; - res->pub.information_elements = res->pub.beacon_ies; - res->pub.len_information_elements = res->pub.len_beacon_ies; - } - - kref_init(&res->ref); - - res = cfg80211_bss_update(wiphy_to_dev(wiphy), res); - if (!res) - return NULL; - - if (res->pub.capability & WLAN_CAPABILITY_ESS) - regulatory_hint_found_beacon(wiphy, channel, gfp); - - /* cfg80211_bss_update gives us a referenced result */ - return &res->pub; -} -EXPORT_SYMBOL(cfg80211_inform_bss_frame); - -void cfg80211_ref_bss(struct cfg80211_bss *pub) -{ - struct cfg80211_internal_bss *bss; - - if (!pub) - return; - - bss = container_of(pub, struct cfg80211_internal_bss, pub); - kref_get(&bss->ref); -} -EXPORT_SYMBOL(cfg80211_ref_bss); - -void cfg80211_put_bss(struct cfg80211_bss *pub) -{ - struct cfg80211_internal_bss *bss; - - if (!pub) - return; - - bss = container_of(pub, struct cfg80211_internal_bss, pub); - kref_put(&bss->ref, bss_release); -} -EXPORT_SYMBOL(cfg80211_put_bss); - -void cfg80211_unlink_bss(struct wiphy *wiphy, struct cfg80211_bss *pub) -{ - struct cfg80211_registered_device *dev = wiphy_to_dev(wiphy); - struct cfg80211_internal_bss *bss; - - if (WARN_ON(!pub)) - return; - - bss = container_of(pub, struct cfg80211_internal_bss, pub); - - spin_lock_bh(&dev->bss_lock); - if (!list_empty(&bss->list)) { - __cfg80211_unlink_bss(dev, bss); - dev->bss_generation++; - } - spin_unlock_bh(&dev->bss_lock); -} -EXPORT_SYMBOL(cfg80211_unlink_bss); - -/* - * [PLATA] - qui appelle cette fonction? - */ -#ifdef CONFIG_CFG80211_WEXT -int cfg80211_wext_siwscan(struct net_device *dev, - struct iw_request_info *info, - union iwreq_data *wrqu, char *extra) -{ - struct cfg80211_registered_device *rdev; - struct wiphy *wiphy; - struct iw_scan_req *wreq = NULL; - struct cfg80211_scan_request *creq = NULL; - int i, err, n_channels = 0; - enum ieee80211_band band; - - if (!netif_running(dev)) - return -ENETDOWN; - - if (wrqu->data.length == sizeof(struct iw_scan_req)) - wreq = (struct iw_scan_req *)extra; - - rdev = cfg80211_get_dev_from_ifindex(dev_net(dev), dev->ifindex); - - if (IS_ERR(rdev)) - return PTR_ERR(rdev); - - if (rdev->scan_req) { - err = -EBUSY; - goto out; - } - - wiphy = &rdev->wiphy; - - /* Determine number of channels, needed to allocate creq */ - if (wreq && wreq->num_channels) - n_channels = wreq->num_channels; - else { - for (band = 0; band < IEEE80211_NUM_BANDS; band++) - if (wiphy->bands[band]) - n_channels += wiphy->bands[band]->n_channels; - } - - creq = kzalloc(sizeof(*creq) + sizeof(struct cfg80211_ssid) + - n_channels * sizeof(void *), - GFP_ATOMIC); - if (!creq) { - err = -ENOMEM; - goto out; - } - - creq->wiphy = wiphy; - creq->dev = dev; - /* SSIDs come after channels */ - creq->ssids = (void *)&creq->channels[n_channels]; - creq->n_channels = n_channels; - creq->n_ssids = 1; - - /* translate "Scan on frequencies" request */ - i = 0; - for (band = 0; band < IEEE80211_NUM_BANDS; band++) { - int j; - - if (!wiphy->bands[band]) - continue; - - for (j = 0; j < wiphy->bands[band]->n_channels; j++) { - /* ignore disabled channels */ - if (wiphy->bands[band]->channels[j].flags & - IEEE80211_CHAN_DISABLED) - continue; - - /* If we have a wireless request structure and the - * wireless request specifies frequencies, then search - * for the matching hardware channel. - */ - if (wreq && wreq->num_channels) { - int k; - int wiphy_freq = wiphy->bands[band]->channels[j].center_freq; - for (k = 0; k < wreq->num_channels; k++) { - int wext_freq = cfg80211_wext_freq(wiphy, &wreq->channel_list[k]); - if (wext_freq == wiphy_freq) - goto wext_freq_found; - } - goto wext_freq_not_found; - } - - wext_freq_found: - creq->channels[i] = &wiphy->bands[band]->channels[j]; - i++; - wext_freq_not_found: ; - } - } - /* No channels found? */ - if (!i) { - err = -EINVAL; - goto out; - } - - /* Set real number of channels specified in creq->channels[] */ - creq->n_channels = i; - - /* translate "Scan for SSID" request */ - if (wreq) { - if (wrqu->data.flags & IW_SCAN_THIS_ESSID) { - if (wreq->essid_len > IEEE80211_MAX_SSID_LEN) { - err = -EINVAL; - goto out; - } - memcpy(creq->ssids[0].ssid, wreq->essid, wreq->essid_len); - creq->ssids[0].ssid_len = wreq->essid_len; - } - if (wreq->scan_type == IW_SCAN_TYPE_PASSIVE) - creq->n_ssids = 0; - } - - for (i = 0; i < IEEE80211_NUM_BANDS; i++) - if (wiphy->bands[i]) - creq->rates[i] = (1 << wiphy->bands[i]->n_bitrates) - 1; - - rdev->scan_req = creq; - err = rdev->ops->scan(wiphy, dev, creq); - if (err) { - rdev->scan_req = NULL; - /* creq will be freed below */ - } else { - nl80211_send_scan_start(rdev, dev); - /* creq now owned by driver */ - creq = NULL; - dev_hold(dev); - } - out: - kfree(creq); - cfg80211_unlock_rdev(rdev); - return err; -} -EXPORT_SYMBOL_GPL(cfg80211_wext_siwscan); - -static void ieee80211_scan_add_ies(struct iw_request_info *info, - struct cfg80211_bss *bss, - char **current_ev, char *end_buf) -{ - u8 *pos, *end, *next; - struct iw_event iwe; - - if (!bss->information_elements || - !bss->len_information_elements) - return; - - /* - * If needed, fragment the IEs buffer (at IE boundaries) into short - * enough fragments to fit into IW_GENERIC_IE_MAX octet messages. - */ - pos = bss->information_elements; - end = pos + bss->len_information_elements; - - while (end - pos > IW_GENERIC_IE_MAX) { - next = pos + 2 + pos[1]; - while (next + 2 + next[1] - pos < IW_GENERIC_IE_MAX) - next = next + 2 + next[1]; - - memset(&iwe, 0, sizeof(iwe)); - iwe.cmd = IWEVGENIE; - iwe.u.data.length = next - pos; - *current_ev = iwe_stream_add_point(info, *current_ev, - end_buf, &iwe, pos); - - pos = next; - } - - if (end > pos) { - memset(&iwe, 0, sizeof(iwe)); - iwe.cmd = IWEVGENIE; - iwe.u.data.length = end - pos; - *current_ev = iwe_stream_add_point(info, *current_ev, - end_buf, &iwe, pos); - } -} - -static inline unsigned int elapsed_jiffies_msecs(unsigned long start) -{ - unsigned long end = jiffies; - - if (end >= start) - return jiffies_to_msecs(end - start); - - return jiffies_to_msecs(end + (MAX_JIFFY_OFFSET - start) + 1); -} - -static char * -ieee80211_bss(struct wiphy *wiphy, struct iw_request_info *info, - struct cfg80211_internal_bss *bss, char *current_ev, - char *end_buf) -{ - struct iw_event iwe; - u8 *buf, *cfg, *p; - u8 *ie = bss->pub.information_elements; - int rem = bss->pub.len_information_elements, i, sig; - bool ismesh = false; - - memset(&iwe, 0, sizeof(iwe)); - iwe.cmd = SIOCGIWAP; - iwe.u.ap_addr.sa_family = ARPHRD_ETHER; - memcpy(iwe.u.ap_addr.sa_data, bss->pub.bssid, ETH_ALEN); - current_ev = iwe_stream_add_event(info, current_ev, end_buf, &iwe, - IW_EV_ADDR_LEN); - - memset(&iwe, 0, sizeof(iwe)); - iwe.cmd = SIOCGIWFREQ; - iwe.u.freq.m = ieee80211_frequency_to_channel(bss->pub.channel->center_freq); - iwe.u.freq.e = 0; - current_ev = iwe_stream_add_event(info, current_ev, end_buf, &iwe, - IW_EV_FREQ_LEN); - - memset(&iwe, 0, sizeof(iwe)); - iwe.cmd = SIOCGIWFREQ; - iwe.u.freq.m = bss->pub.channel->center_freq; - iwe.u.freq.e = 6; - current_ev = iwe_stream_add_event(info, current_ev, end_buf, &iwe, - IW_EV_FREQ_LEN); - - if (wiphy->signal_type != CFG80211_SIGNAL_TYPE_NONE) { - memset(&iwe, 0, sizeof(iwe)); - iwe.cmd = IWEVQUAL; - iwe.u.qual.updated = IW_QUAL_LEVEL_UPDATED | - IW_QUAL_NOISE_INVALID | - IW_QUAL_QUAL_UPDATED; - switch (wiphy->signal_type) { - case CFG80211_SIGNAL_TYPE_MBM: - sig = bss->pub.signal / 100; - iwe.u.qual.level = sig; - iwe.u.qual.updated |= IW_QUAL_DBM; - if (sig < -110) /* rather bad */ - sig = -110; - else if (sig > -40) /* perfect */ - sig = -40; - /* will give a range of 0 .. 70 */ - iwe.u.qual.qual = sig + 110; - break; - case CFG80211_SIGNAL_TYPE_UNSPEC: - iwe.u.qual.level = bss->pub.signal; - /* will give range 0 .. 100 */ - iwe.u.qual.qual = bss->pub.signal; - break; - default: - /* not reached */ - break; - } - current_ev = iwe_stream_add_event(info, current_ev, end_buf, - &iwe, IW_EV_QUAL_LEN); - } - - memset(&iwe, 0, sizeof(iwe)); - iwe.cmd = SIOCGIWENCODE; - if (bss->pub.capability & WLAN_CAPABILITY_PRIVACY) - iwe.u.data.flags = IW_ENCODE_ENABLED | IW_ENCODE_NOKEY; - else - iwe.u.data.flags = IW_ENCODE_DISABLED; - iwe.u.data.length = 0; - current_ev = iwe_stream_add_point(info, current_ev, end_buf, - &iwe, ""); - - while (rem >= 2) { - /* invalid data */ - if (ie[1] > rem - 2) - break; - - switch (ie[0]) { - case WLAN_EID_SSID: - memset(&iwe, 0, sizeof(iwe)); - iwe.cmd = SIOCGIWESSID; - iwe.u.data.length = ie[1]; - iwe.u.data.flags = 1; - current_ev = iwe_stream_add_point(info, current_ev, end_buf, - &iwe, ie + 2); - break; - case WLAN_EID_MESH_ID: - memset(&iwe, 0, sizeof(iwe)); - iwe.cmd = SIOCGIWESSID; - iwe.u.data.length = ie[1]; - iwe.u.data.flags = 1; - current_ev = iwe_stream_add_point(info, current_ev, end_buf, - &iwe, ie + 2); - break; - case WLAN_EID_MESH_CONFIG: - ismesh = true; - if (ie[1] != sizeof(struct ieee80211_meshconf_ie)) - break; - buf = kmalloc(50, GFP_ATOMIC); - if (!buf) - break; - cfg = ie + 2; - memset(&iwe, 0, sizeof(iwe)); - iwe.cmd = IWEVCUSTOM; - sprintf(buf, "Mesh Network Path Selection Protocol ID: " - "0x%02X", cfg[0]); - iwe.u.data.length = strlen(buf); - current_ev = iwe_stream_add_point(info, current_ev, - end_buf, - &iwe, buf); - sprintf(buf, "Path Selection Metric ID: 0x%02X", - cfg[1]); - iwe.u.data.length = strlen(buf); - current_ev = iwe_stream_add_point(info, current_ev, - end_buf, - &iwe, buf); - sprintf(buf, "Congestion Control Mode ID: 0x%02X", - cfg[2]); - iwe.u.data.length = strlen(buf); - current_ev = iwe_stream_add_point(info, current_ev, - end_buf, - &iwe, buf); - sprintf(buf, "Synchronization ID: 0x%02X", cfg[3]); - iwe.u.data.length = strlen(buf); - current_ev = iwe_stream_add_point(info, current_ev, - end_buf, - &iwe, buf); - sprintf(buf, "Authentication ID: 0x%02X", cfg[4]); - iwe.u.data.length = strlen(buf); - current_ev = iwe_stream_add_point(info, current_ev, - end_buf, - &iwe, buf); - sprintf(buf, "Formation Info: 0x%02X", cfg[5]); - iwe.u.data.length = strlen(buf); - current_ev = iwe_stream_add_point(info, current_ev, - end_buf, - &iwe, buf); - sprintf(buf, "Capabilities: 0x%02X", cfg[6]); - iwe.u.data.length = strlen(buf); - current_ev = iwe_stream_add_point(info, current_ev, - end_buf, - &iwe, buf); - kfree(buf); - break; - case WLAN_EID_SUPP_RATES: - case WLAN_EID_EXT_SUPP_RATES: - /* display all supported rates in readable format */ - p = current_ev + iwe_stream_lcp_len(info); - - memset(&iwe, 0, sizeof(iwe)); - iwe.cmd = SIOCGIWRATE; - /* Those two flags are ignored... */ - iwe.u.bitrate.fixed = iwe.u.bitrate.disabled = 0; - - for (i = 0; i < ie[1]; i++) { - iwe.u.bitrate.value = - ((ie[i + 2] & 0x7f) * 500000); - p = iwe_stream_add_value(info, current_ev, p, - end_buf, &iwe, IW_EV_PARAM_LEN); - } - current_ev = p; - break; - } - rem -= ie[1] + 2; - ie += ie[1] + 2; - } - - if (bss->pub.capability & (WLAN_CAPABILITY_ESS | WLAN_CAPABILITY_IBSS) || - ismesh) { - memset(&iwe, 0, sizeof(iwe)); - iwe.cmd = SIOCGIWMODE; - if (ismesh) - iwe.u.mode = IW_MODE_MESH; - else if (bss->pub.capability & WLAN_CAPABILITY_ESS) - iwe.u.mode = IW_MODE_MASTER; - else - iwe.u.mode = IW_MODE_ADHOC; - current_ev = iwe_stream_add_event(info, current_ev, end_buf, - &iwe, IW_EV_UINT_LEN); - } - - buf = kmalloc(30, GFP_ATOMIC); - if (buf) { - memset(&iwe, 0, sizeof(iwe)); - iwe.cmd = IWEVCUSTOM; - sprintf(buf, "tsf=%016llx", (unsigned long long)(bss->pub.tsf)); - iwe.u.data.length = strlen(buf); - current_ev = iwe_stream_add_point(info, current_ev, end_buf, - &iwe, buf); - memset(&iwe, 0, sizeof(iwe)); - iwe.cmd = IWEVCUSTOM; - sprintf(buf, " Last beacon: %ums ago", - elapsed_jiffies_msecs(bss->ts)); - iwe.u.data.length = strlen(buf); - current_ev = iwe_stream_add_point(info, current_ev, - end_buf, &iwe, buf); - kfree(buf); - } - - ieee80211_scan_add_ies(info, &bss->pub, ¤t_ev, end_buf); - - return current_ev; -} - - -static int ieee80211_scan_results(struct cfg80211_registered_device *dev, - struct iw_request_info *info, - char *buf, size_t len) -{ - char *current_ev = buf; - char *end_buf = buf + len; - struct cfg80211_internal_bss *bss; - - spin_lock_bh(&dev->bss_lock); - cfg80211_bss_expire(dev); - - list_for_each_entry(bss, &dev->bss_list, list) { - if (buf + len - current_ev <= IW_EV_ADDR_LEN) { - spin_unlock_bh(&dev->bss_lock); - return -E2BIG; - } - current_ev = ieee80211_bss(&dev->wiphy, info, bss, - current_ev, end_buf); - } - spin_unlock_bh(&dev->bss_lock); - return current_ev - buf; -} - - -int cfg80211_wext_giwscan(struct net_device *dev, - struct iw_request_info *info, - struct iw_point *data, char *extra) -{ - struct cfg80211_registered_device *rdev; - int res; - - if (!netif_running(dev)) - return -ENETDOWN; - - rdev = cfg80211_get_dev_from_ifindex(dev_net(dev), dev->ifindex); - - if (IS_ERR(rdev)) - return PTR_ERR(rdev); - - if (rdev->scan_req) { - res = -EAGAIN; - goto out; - } - - res = ieee80211_scan_results(rdev, info, extra, data->length); - data->length = 0; - if (res >= 0) { - data->length = res; - res = 0; - } - - out: - cfg80211_unlock_rdev(rdev); - return res; -} -EXPORT_SYMBOL_GPL(cfg80211_wext_giwscan); -#endif diff --git a/openairITS/mac/DOT11/net/wireless/sme.c b/openairITS/mac/DOT11/net/wireless/sme.c deleted file mode 100644 index a1a0b966dd..0000000000 --- a/openairITS/mac/DOT11/net/wireless/sme.c +++ /dev/null @@ -1,1025 +0,0 @@ -/* - * SME code for cfg80211's connect emulation. - * - * Copyright 2009 Johannes Berg - * Copyright (C) 2009 Intel Corporation. All rights reserved. - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "nl80211.h" -#include "reg.h" - -struct cfg80211_conn { - struct cfg80211_connect_params params; - /* these are sub-states of the _CONNECTING sme_state */ - enum { - CFG80211_CONN_IDLE, - CFG80211_CONN_SCANNING, - CFG80211_CONN_SCAN_AGAIN, - CFG80211_CONN_AUTHENTICATE_NEXT, - CFG80211_CONN_AUTHENTICATING, - CFG80211_CONN_ASSOCIATE_NEXT, - CFG80211_CONN_ASSOCIATING, - CFG80211_CONN_DEAUTH_ASSOC_FAIL, - } state; - u8 bssid[ETH_ALEN], prev_bssid[ETH_ALEN]; - u8 *ie; - size_t ie_len; - bool auto_auth, prev_bssid_valid; -}; - -static bool cfg80211_is_all_idle(void) -{ - struct cfg80211_registered_device *rdev; - struct wireless_dev *wdev; - bool is_all_idle = true; - - mutex_lock(&cfg80211_mutex); - - /* - * All devices must be idle as otherwise if you are actively - * scanning some new beacon hints could be learned and would - * count as new regulatory hints. - */ - list_for_each_entry(rdev, &cfg80211_rdev_list, list) { - cfg80211_lock_rdev(rdev); - list_for_each_entry(wdev, &rdev->netdev_list, list) { - wdev_lock(wdev); - if (wdev->sme_state != CFG80211_SME_IDLE) - is_all_idle = false; - wdev_unlock(wdev); - } - cfg80211_unlock_rdev(rdev); - } - - mutex_unlock(&cfg80211_mutex); - - return is_all_idle; -} - -static void disconnect_work(struct work_struct *work) -{ - if (!cfg80211_is_all_idle()) - return; - - regulatory_hint_disconnect(); -} - -static DECLARE_WORK(cfg80211_disconnect_work, disconnect_work); - -/* - * [PLATA] qui appelle cette fonction? - */ -static int cfg80211_conn_scan(struct wireless_dev *wdev) -{ - struct cfg80211_registered_device *rdev = wiphy_to_dev(wdev->wiphy); - struct cfg80211_scan_request *request; - int n_channels, err; - - ASSERT_RTNL(); - ASSERT_RDEV_LOCK(rdev); - ASSERT_WDEV_LOCK(wdev); - - if (rdev->scan_req) - return -EBUSY; - - if (wdev->conn->params.channel) { - n_channels = 1; - } else { - enum ieee80211_band band; - n_channels = 0; - - for (band = 0; band < IEEE80211_NUM_BANDS; band++) { - if (!wdev->wiphy->bands[band]) - continue; - n_channels += wdev->wiphy->bands[band]->n_channels; - } - } - request = kzalloc(sizeof(*request) + sizeof(request->ssids[0]) + - sizeof(request->channels[0]) * n_channels, - GFP_KERNEL); - if (!request) - return -ENOMEM; - - if (wdev->conn->params.channel) - request->channels[0] = wdev->conn->params.channel; - else { - int i = 0, j; - enum ieee80211_band band; - struct ieee80211_supported_band *bands; - struct ieee80211_channel *channel; - - for (band = 0; band < IEEE80211_NUM_BANDS; band++) { - bands = wdev->wiphy->bands[band]; - if (!bands) - continue; - for (j = 0; j < bands->n_channels; j++) { - channel = &bands->channels[j]; - if (channel->flags & IEEE80211_CHAN_DISABLED) - continue; - request->channels[i++] = channel; - } - request->rates[band] = (1 << bands->n_bitrates) - 1; - } - n_channels = i; - } - request->n_channels = n_channels; - request->ssids = (void *)&request->channels[n_channels]; - request->n_ssids = 1; - - memcpy(request->ssids[0].ssid, wdev->conn->params.ssid, - wdev->conn->params.ssid_len); - request->ssids[0].ssid_len = wdev->conn->params.ssid_len; - - request->dev = wdev->netdev; - request->wiphy = &rdev->wiphy; - - rdev->scan_req = request; - - err = rdev->ops->scan(wdev->wiphy, wdev->netdev, request); - if (!err) { - wdev->conn->state = CFG80211_CONN_SCANNING; - nl80211_send_scan_start(rdev, wdev->netdev); - dev_hold(wdev->netdev); - } else { - rdev->scan_req = NULL; - kfree(request); - } - return err; -} - -static int cfg80211_conn_do_work(struct wireless_dev *wdev) -{ - struct cfg80211_registered_device *rdev = wiphy_to_dev(wdev->wiphy); - struct cfg80211_connect_params *params; - const u8 *prev_bssid = NULL; - int err; - - ASSERT_WDEV_LOCK(wdev); - - if (!wdev->conn) - return 0; - - params = &wdev->conn->params; - - switch (wdev->conn->state) { - case CFG80211_CONN_SCAN_AGAIN: - return cfg80211_conn_scan(wdev); - case CFG80211_CONN_AUTHENTICATE_NEXT: - BUG_ON(!rdev->ops->auth); - wdev->conn->state = CFG80211_CONN_AUTHENTICATING; - return __cfg80211_mlme_auth(rdev, wdev->netdev, - params->channel, params->auth_type, - params->bssid, - params->ssid, params->ssid_len, - NULL, 0, - params->key, params->key_len, - params->key_idx); - case CFG80211_CONN_ASSOCIATE_NEXT: - BUG_ON(!rdev->ops->assoc); - wdev->conn->state = CFG80211_CONN_ASSOCIATING; - if (wdev->conn->prev_bssid_valid) - prev_bssid = wdev->conn->prev_bssid; - err = __cfg80211_mlme_assoc(rdev, wdev->netdev, - params->channel, params->bssid, - prev_bssid, - params->ssid, params->ssid_len, - params->ie, params->ie_len, - false, ¶ms->crypto, - params->flags, ¶ms->ht_capa, - ¶ms->ht_capa_mask); - if (err) - __cfg80211_mlme_deauth(rdev, wdev->netdev, params->bssid, - NULL, 0, - WLAN_REASON_DEAUTH_LEAVING, - false); - return err; - case CFG80211_CONN_DEAUTH_ASSOC_FAIL: - __cfg80211_mlme_deauth(rdev, wdev->netdev, params->bssid, - NULL, 0, - WLAN_REASON_DEAUTH_LEAVING, false); - /* return an error so that we call __cfg80211_connect_result() */ - return -EINVAL; - default: - return 0; - } -} - -void cfg80211_conn_work(struct work_struct *work) -{ - struct cfg80211_registered_device *rdev = - container_of(work, struct cfg80211_registered_device, conn_work); - struct wireless_dev *wdev; - u8 bssid_buf[ETH_ALEN], *bssid = NULL; - - rtnl_lock(); - cfg80211_lock_rdev(rdev); - mutex_lock(&rdev->devlist_mtx); - - list_for_each_entry(wdev, &rdev->netdev_list, list) { - wdev_lock(wdev); - if (!netif_running(wdev->netdev)) { - wdev_unlock(wdev); - continue; - } - if (wdev->sme_state != CFG80211_SME_CONNECTING) { - wdev_unlock(wdev); - continue; - } - if (wdev->conn->params.bssid) { - memcpy(bssid_buf, wdev->conn->params.bssid, ETH_ALEN); - bssid = bssid_buf; - } - if (cfg80211_conn_do_work(wdev)) - __cfg80211_connect_result( - wdev->netdev, bssid, - NULL, 0, NULL, 0, - WLAN_STATUS_UNSPECIFIED_FAILURE, - false, NULL); - wdev_unlock(wdev); - } - - mutex_unlock(&rdev->devlist_mtx); - cfg80211_unlock_rdev(rdev); - rtnl_unlock(); -} - -static struct cfg80211_bss *cfg80211_get_conn_bss(struct wireless_dev *wdev) -{ - struct cfg80211_registered_device *rdev = wiphy_to_dev(wdev->wiphy); - struct cfg80211_bss *bss; - u16 capa = WLAN_CAPABILITY_ESS; - - ASSERT_WDEV_LOCK(wdev); - - if (wdev->conn->params.privacy) - capa |= WLAN_CAPABILITY_PRIVACY; - - bss = cfg80211_get_bss(wdev->wiphy, wdev->conn->params.channel, - wdev->conn->params.bssid, - wdev->conn->params.ssid, - wdev->conn->params.ssid_len, - WLAN_CAPABILITY_ESS | WLAN_CAPABILITY_PRIVACY, - capa); - if (!bss) - return NULL; - - memcpy(wdev->conn->bssid, bss->bssid, ETH_ALEN); - wdev->conn->params.bssid = wdev->conn->bssid; - wdev->conn->params.channel = bss->channel; - wdev->conn->state = CFG80211_CONN_AUTHENTICATE_NEXT; - schedule_work(&rdev->conn_work); - - return bss; -} - -static void __cfg80211_sme_scan_done(struct net_device *dev) -{ - struct wireless_dev *wdev = dev->ieee80211_ptr; - struct cfg80211_registered_device *rdev = wiphy_to_dev(wdev->wiphy); - struct cfg80211_bss *bss; - - ASSERT_WDEV_LOCK(wdev); - - if (wdev->sme_state != CFG80211_SME_CONNECTING) - return; - - if (!wdev->conn) - return; - - if (wdev->conn->state != CFG80211_CONN_SCANNING && - wdev->conn->state != CFG80211_CONN_SCAN_AGAIN) - return; - - bss = cfg80211_get_conn_bss(wdev); - if (bss) { - cfg80211_put_bss(bss); - } else { - /* not found */ - if (wdev->conn->state == CFG80211_CONN_SCAN_AGAIN) - schedule_work(&rdev->conn_work); - else - __cfg80211_connect_result( - wdev->netdev, - wdev->conn->params.bssid, - NULL, 0, NULL, 0, - WLAN_STATUS_UNSPECIFIED_FAILURE, - false, NULL); - } -} - -void cfg80211_sme_scan_done(struct net_device *dev) -{ - struct wireless_dev *wdev = dev->ieee80211_ptr; - - mutex_lock(&wiphy_to_dev(wdev->wiphy)->devlist_mtx); - wdev_lock(wdev); - __cfg80211_sme_scan_done(dev); - wdev_unlock(wdev); - mutex_unlock(&wiphy_to_dev(wdev->wiphy)->devlist_mtx); -} - -void cfg80211_sme_rx_auth(struct net_device *dev, - const u8 *buf, size_t len) -{ - struct wireless_dev *wdev = dev->ieee80211_ptr; - struct wiphy *wiphy = wdev->wiphy; - struct cfg80211_registered_device *rdev = wiphy_to_dev(wiphy); - struct ieee80211_mgmt *mgmt = (struct ieee80211_mgmt *)buf; - u16 status_code = le16_to_cpu(mgmt->u.auth.status_code); - - ASSERT_WDEV_LOCK(wdev); - - /* should only RX auth frames when connecting */ - if (wdev->sme_state != CFG80211_SME_CONNECTING) - return; - - if (WARN_ON(!wdev->conn)) - return; - - if (status_code == WLAN_STATUS_NOT_SUPPORTED_AUTH_ALG && - wdev->conn->auto_auth && - wdev->conn->params.auth_type != NL80211_AUTHTYPE_NETWORK_EAP) { - /* select automatically between only open, shared, leap */ - switch (wdev->conn->params.auth_type) { - case NL80211_AUTHTYPE_OPEN_SYSTEM: - if (wdev->connect_keys) - wdev->conn->params.auth_type = - NL80211_AUTHTYPE_SHARED_KEY; - else - wdev->conn->params.auth_type = - NL80211_AUTHTYPE_NETWORK_EAP; - break; - case NL80211_AUTHTYPE_SHARED_KEY: - wdev->conn->params.auth_type = - NL80211_AUTHTYPE_NETWORK_EAP; - break; - default: - /* huh? */ - wdev->conn->params.auth_type = - NL80211_AUTHTYPE_OPEN_SYSTEM; - break; - } - wdev->conn->state = CFG80211_CONN_AUTHENTICATE_NEXT; - schedule_work(&rdev->conn_work); - } else if (status_code != WLAN_STATUS_SUCCESS) { - __cfg80211_connect_result(dev, mgmt->bssid, NULL, 0, NULL, 0, - status_code, false, NULL); - } else if (wdev->sme_state == CFG80211_SME_CONNECTING && - wdev->conn->state == CFG80211_CONN_AUTHENTICATING) { - wdev->conn->state = CFG80211_CONN_ASSOCIATE_NEXT; - schedule_work(&rdev->conn_work); - } -} - -bool cfg80211_sme_failed_reassoc(struct wireless_dev *wdev) -{ - struct wiphy *wiphy = wdev->wiphy; - struct cfg80211_registered_device *rdev = wiphy_to_dev(wiphy); - - if (WARN_ON(!wdev->conn)) - return false; - - if (!wdev->conn->prev_bssid_valid) - return false; - - /* - * Some stupid APs don't accept reassoc, so we - * need to fall back to trying regular assoc. - */ - wdev->conn->prev_bssid_valid = false; - wdev->conn->state = CFG80211_CONN_ASSOCIATE_NEXT; - schedule_work(&rdev->conn_work); - - return true; -} - -void cfg80211_sme_failed_assoc(struct wireless_dev *wdev) -{ - struct wiphy *wiphy = wdev->wiphy; - struct cfg80211_registered_device *rdev = wiphy_to_dev(wiphy); - - wdev->conn->state = CFG80211_CONN_DEAUTH_ASSOC_FAIL; - schedule_work(&rdev->conn_work); -} - -void __cfg80211_connect_result(struct net_device *dev, const u8 *bssid, - const u8 *req_ie, size_t req_ie_len, - const u8 *resp_ie, size_t resp_ie_len, - u16 status, bool wextev, - struct cfg80211_bss *bss) -{ - struct wireless_dev *wdev = dev->ieee80211_ptr; - u8 *country_ie; -#ifdef CONFIG_CFG80211_WEXT - union iwreq_data wrqu; -#endif - - ASSERT_WDEV_LOCK(wdev); - - if (WARN_ON(wdev->iftype != NL80211_IFTYPE_STATION && - wdev->iftype != NL80211_IFTYPE_P2P_CLIENT)) - return; - - if (wdev->sme_state != CFG80211_SME_CONNECTING) - return; - - nl80211_send_connect_result(wiphy_to_dev(wdev->wiphy), dev, - bssid, req_ie, req_ie_len, - resp_ie, resp_ie_len, - status, GFP_KERNEL); - -#ifdef CONFIG_CFG80211_WEXT - if (wextev) { - if (req_ie && status == WLAN_STATUS_SUCCESS) { - memset(&wrqu, 0, sizeof(wrqu)); - wrqu.data.length = req_ie_len; - wireless_send_event(dev, IWEVASSOCREQIE, &wrqu, req_ie); - } - - if (resp_ie && status == WLAN_STATUS_SUCCESS) { - memset(&wrqu, 0, sizeof(wrqu)); - wrqu.data.length = resp_ie_len; - wireless_send_event(dev, IWEVASSOCRESPIE, &wrqu, resp_ie); - } - - memset(&wrqu, 0, sizeof(wrqu)); - wrqu.ap_addr.sa_family = ARPHRD_ETHER; - if (bssid && status == WLAN_STATUS_SUCCESS) { - memcpy(wrqu.ap_addr.sa_data, bssid, ETH_ALEN); - memcpy(wdev->wext.prev_bssid, bssid, ETH_ALEN); - wdev->wext.prev_bssid_valid = true; - } - wireless_send_event(dev, SIOCGIWAP, &wrqu, NULL); - } -#endif - - if (wdev->current_bss) { - cfg80211_unhold_bss(wdev->current_bss); - cfg80211_put_bss(&wdev->current_bss->pub); - wdev->current_bss = NULL; - } - - if (wdev->conn) - wdev->conn->state = CFG80211_CONN_IDLE; - - if (status != WLAN_STATUS_SUCCESS) { - wdev->sme_state = CFG80211_SME_IDLE; - if (wdev->conn) - kfree(wdev->conn->ie); - kfree(wdev->conn); - wdev->conn = NULL; - kfree(wdev->connect_keys); - wdev->connect_keys = NULL; - wdev->ssid_len = 0; - cfg80211_put_bss(bss); - return; - } - - if (!bss) - bss = cfg80211_get_bss(wdev->wiphy, - wdev->conn ? wdev->conn->params.channel : - NULL, - bssid, - wdev->ssid, wdev->ssid_len, - WLAN_CAPABILITY_ESS, - WLAN_CAPABILITY_ESS); - - if (WARN_ON(!bss)) - return; - - cfg80211_hold_bss(bss_from_pub(bss)); - wdev->current_bss = bss_from_pub(bss); - - wdev->sme_state = CFG80211_SME_CONNECTED; - cfg80211_upload_connect_keys(wdev); - - country_ie = (u8 *) ieee80211_bss_get_ie(bss, WLAN_EID_COUNTRY); - - if (!country_ie) - return; - - /* - * ieee80211_bss_get_ie() ensures we can access: - * - country_ie + 2, the start of the country ie data, and - * - and country_ie[1] which is the IE length - */ - regulatory_hint_11d(wdev->wiphy, - bss->channel->band, - country_ie + 2, - country_ie[1]); -} - -void cfg80211_connect_result(struct net_device *dev, const u8 *bssid, - const u8 *req_ie, size_t req_ie_len, - const u8 *resp_ie, size_t resp_ie_len, - u16 status, gfp_t gfp) -{ - struct wireless_dev *wdev = dev->ieee80211_ptr; - struct cfg80211_registered_device *rdev = wiphy_to_dev(wdev->wiphy); - struct cfg80211_event *ev; - unsigned long flags; - - CFG80211_DEV_WARN_ON(wdev->sme_state != CFG80211_SME_CONNECTING); - - ev = kzalloc(sizeof(*ev) + req_ie_len + resp_ie_len, gfp); - if (!ev) - return; - - ev->type = EVENT_CONNECT_RESULT; - if (bssid) - memcpy(ev->cr.bssid, bssid, ETH_ALEN); - if (req_ie_len) { - ev->cr.req_ie = ((u8 *)ev) + sizeof(*ev); - ev->cr.req_ie_len = req_ie_len; - memcpy((void *)ev->cr.req_ie, req_ie, req_ie_len); - } - if (resp_ie_len) { - ev->cr.resp_ie = ((u8 *)ev) + sizeof(*ev) + req_ie_len; - ev->cr.resp_ie_len = resp_ie_len; - memcpy((void *)ev->cr.resp_ie, resp_ie, resp_ie_len); - } - ev->cr.status = status; - - spin_lock_irqsave(&wdev->event_lock, flags); - list_add_tail(&ev->list, &wdev->event_list); - spin_unlock_irqrestore(&wdev->event_lock, flags); - queue_work(cfg80211_wq, &rdev->event_work); -} -EXPORT_SYMBOL(cfg80211_connect_result); - -void __cfg80211_roamed(struct wireless_dev *wdev, - struct cfg80211_bss *bss, - const u8 *req_ie, size_t req_ie_len, - const u8 *resp_ie, size_t resp_ie_len) -{ -#ifdef CONFIG_CFG80211_WEXT - union iwreq_data wrqu; -#endif - ASSERT_WDEV_LOCK(wdev); - - if (WARN_ON(wdev->iftype != NL80211_IFTYPE_STATION && - wdev->iftype != NL80211_IFTYPE_P2P_CLIENT)) - goto out; - - if (wdev->sme_state != CFG80211_SME_CONNECTED) - goto out; - - /* internal error -- how did we get to CONNECTED w/o BSS? */ - if (WARN_ON(!wdev->current_bss)) { - goto out; - } - - cfg80211_unhold_bss(wdev->current_bss); - cfg80211_put_bss(&wdev->current_bss->pub); - wdev->current_bss = NULL; - - cfg80211_hold_bss(bss_from_pub(bss)); - wdev->current_bss = bss_from_pub(bss); - - nl80211_send_roamed(wiphy_to_dev(wdev->wiphy), wdev->netdev, bss->bssid, - req_ie, req_ie_len, resp_ie, resp_ie_len, - GFP_KERNEL); - -#ifdef CONFIG_CFG80211_WEXT - if (req_ie) { - memset(&wrqu, 0, sizeof(wrqu)); - wrqu.data.length = req_ie_len; - wireless_send_event(wdev->netdev, IWEVASSOCREQIE, - &wrqu, req_ie); - } - - if (resp_ie) { - memset(&wrqu, 0, sizeof(wrqu)); - wrqu.data.length = resp_ie_len; - wireless_send_event(wdev->netdev, IWEVASSOCRESPIE, - &wrqu, resp_ie); - } - - memset(&wrqu, 0, sizeof(wrqu)); - wrqu.ap_addr.sa_family = ARPHRD_ETHER; - memcpy(wrqu.ap_addr.sa_data, bss->bssid, ETH_ALEN); - memcpy(wdev->wext.prev_bssid, bss->bssid, ETH_ALEN); - wdev->wext.prev_bssid_valid = true; - wireless_send_event(wdev->netdev, SIOCGIWAP, &wrqu, NULL); -#endif - - return; -out: - cfg80211_put_bss(bss); -} - -void cfg80211_roamed(struct net_device *dev, - struct ieee80211_channel *channel, - const u8 *bssid, - const u8 *req_ie, size_t req_ie_len, - const u8 *resp_ie, size_t resp_ie_len, gfp_t gfp) -{ - struct wireless_dev *wdev = dev->ieee80211_ptr; - struct cfg80211_bss *bss; - - CFG80211_DEV_WARN_ON(wdev->sme_state != CFG80211_SME_CONNECTED); - - bss = cfg80211_get_bss(wdev->wiphy, channel, bssid, wdev->ssid, - wdev->ssid_len, WLAN_CAPABILITY_ESS, - WLAN_CAPABILITY_ESS); - if (WARN_ON(!bss)) - return; - - cfg80211_roamed_bss(dev, bss, req_ie, req_ie_len, resp_ie, - resp_ie_len, gfp); -} -EXPORT_SYMBOL(cfg80211_roamed); - -void cfg80211_roamed_bss(struct net_device *dev, - struct cfg80211_bss *bss, const u8 *req_ie, - size_t req_ie_len, const u8 *resp_ie, - size_t resp_ie_len, gfp_t gfp) -{ - struct wireless_dev *wdev = dev->ieee80211_ptr; - struct cfg80211_registered_device *rdev = wiphy_to_dev(wdev->wiphy); - struct cfg80211_event *ev; - unsigned long flags; - - CFG80211_DEV_WARN_ON(wdev->sme_state != CFG80211_SME_CONNECTED); - - if (WARN_ON(!bss)) - return; - - ev = kzalloc(sizeof(*ev) + req_ie_len + resp_ie_len, gfp); - if (!ev) { - cfg80211_put_bss(bss); - return; - } - - ev->type = EVENT_ROAMED; - ev->rm.req_ie = ((u8 *)ev) + sizeof(*ev); - ev->rm.req_ie_len = req_ie_len; - memcpy((void *)ev->rm.req_ie, req_ie, req_ie_len); - ev->rm.resp_ie = ((u8 *)ev) + sizeof(*ev) + req_ie_len; - ev->rm.resp_ie_len = resp_ie_len; - memcpy((void *)ev->rm.resp_ie, resp_ie, resp_ie_len); - ev->rm.bss = bss; - - spin_lock_irqsave(&wdev->event_lock, flags); - list_add_tail(&ev->list, &wdev->event_list); - spin_unlock_irqrestore(&wdev->event_lock, flags); - queue_work(cfg80211_wq, &rdev->event_work); -} -EXPORT_SYMBOL(cfg80211_roamed_bss); - -void __cfg80211_disconnected(struct net_device *dev, const u8 *ie, - size_t ie_len, u16 reason, bool from_ap) -{ - struct wireless_dev *wdev = dev->ieee80211_ptr; - struct cfg80211_registered_device *rdev = wiphy_to_dev(wdev->wiphy); - int i; -#ifdef CONFIG_CFG80211_WEXT - union iwreq_data wrqu; -#endif - - ASSERT_WDEV_LOCK(wdev); - - if (WARN_ON(wdev->iftype != NL80211_IFTYPE_STATION && - wdev->iftype != NL80211_IFTYPE_P2P_CLIENT)) - return; - - if (wdev->sme_state != CFG80211_SME_CONNECTED) - return; - - if (wdev->current_bss) { - cfg80211_unhold_bss(wdev->current_bss); - cfg80211_put_bss(&wdev->current_bss->pub); - } - - wdev->current_bss = NULL; - wdev->sme_state = CFG80211_SME_IDLE; - wdev->ssid_len = 0; - - if (wdev->conn) { - kfree(wdev->conn->ie); - wdev->conn->ie = NULL; - kfree(wdev->conn); - wdev->conn = NULL; - } - - nl80211_send_disconnected(rdev, dev, reason, ie, ie_len, from_ap); - - /* - * Delete all the keys ... pairwise keys can't really - * exist any more anyway, but default keys might. - */ - if (rdev->ops->del_key) - for (i = 0; i < 6; i++) - rdev->ops->del_key(wdev->wiphy, dev, i, false, NULL); - -#ifdef CONFIG_CFG80211_WEXT - memset(&wrqu, 0, sizeof(wrqu)); - wrqu.ap_addr.sa_family = ARPHRD_ETHER; - wireless_send_event(dev, SIOCGIWAP, &wrqu, NULL); - wdev->wext.connect.ssid_len = 0; -#endif - - schedule_work(&cfg80211_disconnect_work); -} - -void cfg80211_disconnected(struct net_device *dev, u16 reason, - u8 *ie, size_t ie_len, gfp_t gfp) -{ - struct wireless_dev *wdev = dev->ieee80211_ptr; - struct cfg80211_registered_device *rdev = wiphy_to_dev(wdev->wiphy); - struct cfg80211_event *ev; - unsigned long flags; - - CFG80211_DEV_WARN_ON(wdev->sme_state != CFG80211_SME_CONNECTED); - - ev = kzalloc(sizeof(*ev) + ie_len, gfp); - if (!ev) - return; - - ev->type = EVENT_DISCONNECTED; - ev->dc.ie = ((u8 *)ev) + sizeof(*ev); - ev->dc.ie_len = ie_len; - memcpy((void *)ev->dc.ie, ie, ie_len); - ev->dc.reason = reason; - - spin_lock_irqsave(&wdev->event_lock, flags); - list_add_tail(&ev->list, &wdev->event_list); - spin_unlock_irqrestore(&wdev->event_lock, flags); - queue_work(cfg80211_wq, &rdev->event_work); -} -EXPORT_SYMBOL(cfg80211_disconnected); - -/* - * [PLATA] is this method called? if so, need to follow the ops->connect... - */ -int __cfg80211_connect(struct cfg80211_registered_device *rdev, - struct net_device *dev, - struct cfg80211_connect_params *connect, - struct cfg80211_cached_keys *connkeys, - const u8 *prev_bssid) -{ - struct wireless_dev *wdev = dev->ieee80211_ptr; - struct cfg80211_bss *bss = NULL; - int err; - - ASSERT_WDEV_LOCK(wdev); - - if (wdev->sme_state != CFG80211_SME_IDLE) - return -EALREADY; - - if (WARN_ON(wdev->connect_keys)) { - kfree(wdev->connect_keys); - wdev->connect_keys = NULL; - } - - cfg80211_oper_and_ht_capa(&connect->ht_capa_mask, - rdev->wiphy.ht_capa_mod_mask); - - if (connkeys && connkeys->def >= 0) { - int idx; - u32 cipher; - - idx = connkeys->def; - cipher = connkeys->params[idx].cipher; - /* If given a WEP key we may need it for shared key auth */ - if (cipher == WLAN_CIPHER_SUITE_WEP40 || - cipher == WLAN_CIPHER_SUITE_WEP104) { - connect->key_idx = idx; - connect->key = connkeys->params[idx].key; - connect->key_len = connkeys->params[idx].key_len; - - /* - * If ciphers are not set (e.g. when going through - * iwconfig), we have to set them appropriately here. - */ - if (connect->crypto.cipher_group == 0) - connect->crypto.cipher_group = cipher; - - if (connect->crypto.n_ciphers_pairwise == 0) { - connect->crypto.n_ciphers_pairwise = 1; - connect->crypto.ciphers_pairwise[0] = cipher; - } - } - } - - if (!rdev->ops->connect) { - if (!rdev->ops->auth || !rdev->ops->assoc) - return -EOPNOTSUPP; - - if (WARN_ON(wdev->conn)) - return -EINPROGRESS; - - wdev->conn = kzalloc(sizeof(*wdev->conn), GFP_KERNEL); - if (!wdev->conn) - return -ENOMEM; - - /* - * Copy all parameters, and treat explicitly IEs, BSSID, SSID. - */ - memcpy(&wdev->conn->params, connect, sizeof(*connect)); - if (connect->bssid) { - wdev->conn->params.bssid = wdev->conn->bssid; - memcpy(wdev->conn->bssid, connect->bssid, ETH_ALEN); - } - - if (connect->ie) { - wdev->conn->ie = kmemdup(connect->ie, connect->ie_len, - GFP_KERNEL); - wdev->conn->params.ie = wdev->conn->ie; - if (!wdev->conn->ie) { - kfree(wdev->conn); - wdev->conn = NULL; - return -ENOMEM; - } - } - - if (connect->auth_type == NL80211_AUTHTYPE_AUTOMATIC) { - wdev->conn->auto_auth = true; - /* start with open system ... should mostly work */ - wdev->conn->params.auth_type = - NL80211_AUTHTYPE_OPEN_SYSTEM; - } else { - wdev->conn->auto_auth = false; - } - - memcpy(wdev->ssid, connect->ssid, connect->ssid_len); - wdev->ssid_len = connect->ssid_len; - wdev->conn->params.ssid = wdev->ssid; - wdev->conn->params.ssid_len = connect->ssid_len; - - /* see if we have the bss already */ - bss = cfg80211_get_conn_bss(wdev); - - wdev->sme_state = CFG80211_SME_CONNECTING; - wdev->connect_keys = connkeys; - - if (prev_bssid) { - memcpy(wdev->conn->prev_bssid, prev_bssid, ETH_ALEN); - wdev->conn->prev_bssid_valid = true; - } - - /* we're good if we have a matching bss struct */ - if (bss) { - wdev->conn->state = CFG80211_CONN_AUTHENTICATE_NEXT; - err = cfg80211_conn_do_work(wdev); - cfg80211_put_bss(bss); - } else { - /* otherwise we'll need to scan for the AP first */ - err = cfg80211_conn_scan(wdev); - /* - * If we can't scan right now, then we need to scan again - * after the current scan finished, since the parameters - * changed (unless we find a good AP anyway). - */ - if (err == -EBUSY) { - err = 0; - wdev->conn->state = CFG80211_CONN_SCAN_AGAIN; - } - } - if (err) { - kfree(wdev->conn->ie); - kfree(wdev->conn); - wdev->conn = NULL; - wdev->sme_state = CFG80211_SME_IDLE; - wdev->connect_keys = NULL; - wdev->ssid_len = 0; - } - - return err; - } else { - wdev->sme_state = CFG80211_SME_CONNECTING; - wdev->connect_keys = connkeys; - err = rdev->ops->connect(&rdev->wiphy, dev, connect); - if (err) { - wdev->connect_keys = NULL; - wdev->sme_state = CFG80211_SME_IDLE; - return err; - } - - memcpy(wdev->ssid, connect->ssid, connect->ssid_len); - wdev->ssid_len = connect->ssid_len; - - return 0; - } -} - -int cfg80211_connect(struct cfg80211_registered_device *rdev, - struct net_device *dev, - struct cfg80211_connect_params *connect, - struct cfg80211_cached_keys *connkeys) -{ - int err; - - mutex_lock(&rdev->devlist_mtx); - wdev_lock(dev->ieee80211_ptr); - err = __cfg80211_connect(rdev, dev, connect, connkeys, NULL); - wdev_unlock(dev->ieee80211_ptr); - mutex_unlock(&rdev->devlist_mtx); - - return err; -} - -int __cfg80211_disconnect(struct cfg80211_registered_device *rdev, - struct net_device *dev, u16 reason, bool wextev) -{ - struct wireless_dev *wdev = dev->ieee80211_ptr; - int err; - - ASSERT_WDEV_LOCK(wdev); - - if (wdev->sme_state == CFG80211_SME_IDLE) - return -EINVAL; - - kfree(wdev->connect_keys); - wdev->connect_keys = NULL; - - if (!rdev->ops->disconnect) { - if (!rdev->ops->deauth) - return -EOPNOTSUPP; - - /* was it connected by userspace SME? */ - if (!wdev->conn) { - cfg80211_mlme_down(rdev, dev); - return 0; - } - - if (wdev->sme_state == CFG80211_SME_CONNECTING && - (wdev->conn->state == CFG80211_CONN_SCANNING || - wdev->conn->state == CFG80211_CONN_SCAN_AGAIN)) { - wdev->sme_state = CFG80211_SME_IDLE; - kfree(wdev->conn->ie); - kfree(wdev->conn); - wdev->conn = NULL; - wdev->ssid_len = 0; - return 0; - } - - /* wdev->conn->params.bssid must be set if > SCANNING */ - err = __cfg80211_mlme_deauth(rdev, dev, - wdev->conn->params.bssid, - NULL, 0, reason, false); - if (err) - return err; - } else { - err = rdev->ops->disconnect(&rdev->wiphy, dev, reason); - if (err) - return err; - } - - if (wdev->sme_state == CFG80211_SME_CONNECTED) - __cfg80211_disconnected(dev, NULL, 0, 0, false); - else if (wdev->sme_state == CFG80211_SME_CONNECTING) - __cfg80211_connect_result(dev, NULL, NULL, 0, NULL, 0, - WLAN_STATUS_UNSPECIFIED_FAILURE, - wextev, NULL); - - return 0; -} - -int cfg80211_disconnect(struct cfg80211_registered_device *rdev, - struct net_device *dev, - u16 reason, bool wextev) -{ - int err; - - wdev_lock(dev->ieee80211_ptr); - err = __cfg80211_disconnect(rdev, dev, reason, wextev); - wdev_unlock(dev->ieee80211_ptr); - - return err; -} - -void cfg80211_sme_disassoc(struct net_device *dev, - struct cfg80211_internal_bss *bss) -{ - struct wireless_dev *wdev = dev->ieee80211_ptr; - struct cfg80211_registered_device *rdev = wiphy_to_dev(wdev->wiphy); - u8 bssid[ETH_ALEN]; - - ASSERT_WDEV_LOCK(wdev); - - if (!wdev->conn) - return; - - if (wdev->conn->state == CFG80211_CONN_IDLE) - return; - - /* - * Ok, so the association was made by this SME -- we don't - * want it any more so deauthenticate too. - */ - - memcpy(bssid, bss->pub.bssid, ETH_ALEN); - - __cfg80211_mlme_deauth(rdev, dev, bssid, NULL, 0, - WLAN_REASON_DEAUTH_LEAVING, false); -} diff --git a/openairITS/mac/DOT11/net/wireless/sysfs.c b/openairITS/mac/DOT11/net/wireless/sysfs.c deleted file mode 100644 index 2f8af6e27e..0000000000 --- a/openairITS/mac/DOT11/net/wireless/sysfs.c +++ /dev/null @@ -1,157 +0,0 @@ -/* - * This file provides /sys/class/ieee80211// - * and some default attributes. - * - * Copyright 2005-2006 Jiri Benc - * Copyright 2006 Johannes Berg - * - * This file is GPLv2 as found in COPYING. - */ - -#include -#include -#include -#include -#include -#include -#include "sysfs.h" -#include "core.h" - -static inline struct cfg80211_registered_device *dev_to_rdev( - struct device *dev) -{ - return container_of(dev, struct cfg80211_registered_device, wiphy.dev); -} - -#define SHOW_FMT(name, fmt, member) \ -static ssize_t name ## _show(struct device *dev, \ - struct device_attribute *attr, \ - char *buf) \ -{ \ - return sprintf(buf, fmt "\n", dev_to_rdev(dev)->member); \ -} - -SHOW_FMT(index, "%d", wiphy_idx); -SHOW_FMT(macaddress, "%pM", wiphy.perm_addr); -SHOW_FMT(address_mask, "%pM", wiphy.addr_mask); - -static ssize_t name_show(struct device *dev, - struct device_attribute *attr, - char *buf) { - struct wiphy *wiphy = &dev_to_rdev(dev)->wiphy; - return sprintf(buf, "%s\n", dev_name(&wiphy->dev)); -} - - -static ssize_t addresses_show(struct device *dev, - struct device_attribute *attr, - char *buf) -{ - struct wiphy *wiphy = &dev_to_rdev(dev)->wiphy; - char *start = buf; - int i; - - if (!wiphy->addresses) - return sprintf(buf, "%pM\n", wiphy->perm_addr); - - for (i = 0; i < wiphy->n_addresses; i++) - buf += sprintf(buf, "%pM\n", &wiphy->addresses[i].addr); - - return buf - start; -} - -static struct device_attribute ieee80211_dev_attrs[] = { - __ATTR_RO(index), - __ATTR_RO(macaddress), - __ATTR_RO(address_mask), - __ATTR_RO(addresses), - __ATTR_RO(name), - {} -}; - -static void wiphy_dev_release(struct device *dev) -{ - struct cfg80211_registered_device *rdev = dev_to_rdev(dev); - - cfg80211_dev_free(rdev); -} - -#ifdef CONFIG_HOTPLUG -static int wiphy_uevent(struct device *dev, struct kobj_uevent_env *env) -{ - /* TODO, we probably need stuff here */ - return 0; -} -#endif - -static int wiphy_suspend(struct device *dev, pm_message_t state) -{ - struct cfg80211_registered_device *rdev = dev_to_rdev(dev); - int ret = 0; - - rdev->suspend_at = get_seconds(); - - if (rdev->ops->suspend) { - rtnl_lock(); - if (rdev->wiphy.registered) - ret = rdev->ops->suspend(&rdev->wiphy, rdev->wowlan); - rtnl_unlock(); - } - - return ret; -} - -static int wiphy_resume(struct device *dev) -{ - struct cfg80211_registered_device *rdev = dev_to_rdev(dev); - int ret = 0; - - /* Age scan results with time spent in suspend */ - spin_lock_bh(&rdev->bss_lock); - cfg80211_bss_age(rdev, get_seconds() - rdev->suspend_at); - spin_unlock_bh(&rdev->bss_lock); - - if (rdev->ops->resume) { - rtnl_lock(); - if (rdev->wiphy.registered) - ret = rdev->ops->resume(&rdev->wiphy); - rtnl_unlock(); - } - - return ret; -} - -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35)) -static const void *wiphy_namespace(struct device *d) -{ - struct wiphy *wiphy = container_of(d, struct wiphy, dev); - - return wiphy_net(wiphy); -} -#endif - -struct class ieee80211_class = { - .name = "ieee80211", - .owner = THIS_MODULE, - .dev_release = wiphy_dev_release, - .dev_attrs = ieee80211_dev_attrs, -#ifdef CONFIG_HOTPLUG - .dev_uevent = wiphy_uevent, -#endif - .suspend = wiphy_suspend, - .resume = wiphy_resume, -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35)) - .ns_type = &net_ns_type_operations, - .namespace = wiphy_namespace, -#endif -}; - -int wiphy_sysfs_init(void) -{ - return class_register(&ieee80211_class); -} - -void wiphy_sysfs_exit(void) -{ - class_unregister(&ieee80211_class); -} diff --git a/openairITS/mac/DOT11/net/wireless/sysfs.h b/openairITS/mac/DOT11/net/wireless/sysfs.h deleted file mode 100644 index 65acbebd37..0000000000 --- a/openairITS/mac/DOT11/net/wireless/sysfs.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef __WIRELESS_SYSFS_H -#define __WIRELESS_SYSFS_H - -extern int wiphy_sysfs_init(void); -extern void wiphy_sysfs_exit(void); - -extern struct class ieee80211_class; - -#endif /* __WIRELESS_SYSFS_H */ diff --git a/openairITS/mac/DOT11/net/wireless/util.c b/openairITS/mac/DOT11/net/wireless/util.c deleted file mode 100644 index 10bbbbefc9..0000000000 --- a/openairITS/mac/DOT11/net/wireless/util.c +++ /dev/null @@ -1,1059 +0,0 @@ -/* - * Wireless utility functions - * - * Copyright 2007-2009 Johannes Berg - */ -#include -#include -#include -#include -#include -#include -#include -#include "core.h" - -struct ieee80211_rate * -ieee80211_get_response_rate(struct ieee80211_supported_band *sband, - u32 basic_rates, int bitrate) -{ - struct ieee80211_rate *result = &sband->bitrates[0]; - int i; - - for (i = 0; i < sband->n_bitrates; i++) { - if (!(basic_rates & BIT(i))) - continue; - if (sband->bitrates[i].bitrate > bitrate) - continue; - result = &sband->bitrates[i]; - } - - return result; -} -EXPORT_SYMBOL(ieee80211_get_response_rate); - -int ieee80211_channel_to_frequency(int chan, enum ieee80211_band band) -{ - /* see 802.11 17.3.8.3.2 and Annex J - * there are overlapping channel numbers in 5GHz and 2GHz bands */ - if (band == IEEE80211_BAND_5GHZ) { - if (chan >= 182 && chan <= 196) - return 4000 + chan * 5; - else - return 5000 + chan * 5; - } else { /* IEEE80211_BAND_2GHZ */ - if (chan == 14) - return 2484; - else if (chan < 14) - return 2407 + chan * 5; - else - return 0; /* not supported */ - } -} -EXPORT_SYMBOL(ieee80211_channel_to_frequency); - -int ieee80211_frequency_to_channel(int freq) -{ - /* see 802.11 17.3.8.3.2 and Annex J */ - if (freq == 2484) - return 14; - else if (freq < 2484) - return (freq - 2407) / 5; - else if (freq >= 4910 && freq <= 4980) - return (freq - 4000) / 5; - else - return (freq - 5000) / 5; -} -EXPORT_SYMBOL(ieee80211_frequency_to_channel); - -struct ieee80211_channel *__ieee80211_get_channel(struct wiphy *wiphy, - int freq) -{ - enum ieee80211_band band; - struct ieee80211_supported_band *sband; - int i; - - for (band = 0; band < IEEE80211_NUM_BANDS; band++) { - sband = wiphy->bands[band]; - - if (!sband) - continue; - - for (i = 0; i < sband->n_channels; i++) { - if (sband->channels[i].center_freq == freq) - return &sband->channels[i]; - } - } - - return NULL; -} -EXPORT_SYMBOL(__ieee80211_get_channel); - -static void set_mandatory_flags_band(struct ieee80211_supported_band *sband, - enum ieee80211_band band) -{ - int i, want; - - switch (band) { - case IEEE80211_BAND_5GHZ: - want = 3; - for (i = 0; i < sband->n_bitrates; i++) { - if (sband->bitrates[i].bitrate == 60 || - sband->bitrates[i].bitrate == 120 || - sband->bitrates[i].bitrate == 240) { - sband->bitrates[i].flags |= - IEEE80211_RATE_MANDATORY_A; - want--; - } - } - WARN_ON(want); - break; - case IEEE80211_BAND_2GHZ: - want = 7; - for (i = 0; i < sband->n_bitrates; i++) { - if (sband->bitrates[i].bitrate == 10) { - sband->bitrates[i].flags |= - IEEE80211_RATE_MANDATORY_B | - IEEE80211_RATE_MANDATORY_G; - want--; - } - - if (sband->bitrates[i].bitrate == 20 || - sband->bitrates[i].bitrate == 55 || - sband->bitrates[i].bitrate == 110 || - sband->bitrates[i].bitrate == 60 || - sband->bitrates[i].bitrate == 120 || - sband->bitrates[i].bitrate == 240) { - sband->bitrates[i].flags |= - IEEE80211_RATE_MANDATORY_G; - want--; - } - - if (sband->bitrates[i].bitrate != 10 && - sband->bitrates[i].bitrate != 20 && - sband->bitrates[i].bitrate != 55 && - sband->bitrates[i].bitrate != 110) - sband->bitrates[i].flags |= - IEEE80211_RATE_ERP_G; - } - WARN_ON(want != 0 && want != 3 && want != 6); - break; - case IEEE80211_BAND_5_9GHZ: - case IEEE80211_BAND_0_8GHZ: - break; - case IEEE80211_NUM_BANDS: - WARN_ON(1); - break; - } -} - -void ieee80211_set_bitrate_flags(struct wiphy *wiphy) -{ - enum ieee80211_band band; - - for (band = 0; band < IEEE80211_NUM_BANDS; band++) - if (wiphy->bands[band]) - set_mandatory_flags_band(wiphy->bands[band], band); -} - -bool cfg80211_supported_cipher_suite(struct wiphy *wiphy, u32 cipher) -{ - int i; - for (i = 0; i < wiphy->n_cipher_suites; i++) - if (cipher == wiphy->cipher_suites[i]) - return true; - return false; -} - -int cfg80211_validate_key_settings(struct cfg80211_registered_device *rdev, - struct key_params *params, int key_idx, - bool pairwise, const u8 *mac_addr) -{ - if (key_idx > 5) - return -EINVAL; - - if (!pairwise && mac_addr && !(rdev->wiphy.flags & WIPHY_FLAG_IBSS_RSN)) - return -EINVAL; - - if (pairwise && !mac_addr) - return -EINVAL; - - /* - * Disallow pairwise keys with non-zero index unless it's WEP - * or a vendor specific cipher (because current deployments use - * pairwise WEP keys with non-zero indices and for vendor specific - * ciphers this should be validated in the driver or hardware level - * - but 802.11i clearly specifies to use zero) - */ - if (pairwise && key_idx && - ((params->cipher == WLAN_CIPHER_SUITE_TKIP) || - (params->cipher == WLAN_CIPHER_SUITE_CCMP) || - (params->cipher == WLAN_CIPHER_SUITE_AES_CMAC))) - return -EINVAL; - - switch (params->cipher) { - case WLAN_CIPHER_SUITE_WEP40: - if (params->key_len != WLAN_KEY_LEN_WEP40) - return -EINVAL; - break; - case WLAN_CIPHER_SUITE_TKIP: - if (params->key_len != WLAN_KEY_LEN_TKIP) - return -EINVAL; - break; - case WLAN_CIPHER_SUITE_CCMP: - if (params->key_len != WLAN_KEY_LEN_CCMP) - return -EINVAL; - break; - case WLAN_CIPHER_SUITE_WEP104: - if (params->key_len != WLAN_KEY_LEN_WEP104) - return -EINVAL; - break; - case WLAN_CIPHER_SUITE_AES_CMAC: - if (params->key_len != WLAN_KEY_LEN_AES_CMAC) - return -EINVAL; - break; - default: - /* - * We don't know anything about this algorithm, - * allow using it -- but the driver must check - * all parameters! We still check below whether - * or not the driver supports this algorithm, - * of course. - */ - break; - } - - if (params->seq) { - switch (params->cipher) { - case WLAN_CIPHER_SUITE_WEP40: - case WLAN_CIPHER_SUITE_WEP104: - /* These ciphers do not use key sequence */ - return -EINVAL; - case WLAN_CIPHER_SUITE_TKIP: - case WLAN_CIPHER_SUITE_CCMP: - case WLAN_CIPHER_SUITE_AES_CMAC: - if (params->seq_len != 6) - return -EINVAL; - break; - } - } - - if (!cfg80211_supported_cipher_suite(&rdev->wiphy, params->cipher)) - return -EINVAL; - - return 0; -} - -unsigned int __attribute_const__ ieee80211_hdrlen(__le16 fc) -{ - unsigned int hdrlen = 24; - - if (ieee80211_is_data(fc)) { - if (ieee80211_has_a4(fc)) - hdrlen = 30; - if (ieee80211_is_data_qos(fc)) { - hdrlen += IEEE80211_QOS_CTL_LEN; - if (ieee80211_has_order(fc)) - hdrlen += IEEE80211_HT_CTL_LEN; - } - goto out; - } - - if (ieee80211_is_ctl(fc)) { - /* - * ACK and CTS are 10 bytes, all others 16. To see how - * to get this condition consider - * subtype mask: 0b0000000011110000 (0x00F0) - * ACK subtype: 0b0000000011010000 (0x00D0) - * CTS subtype: 0b0000000011000000 (0x00C0) - * bits that matter: ^^^ (0x00E0) - * value of those: 0b0000000011000000 (0x00C0) - */ - if ((fc & cpu_to_le16(0x00E0)) == cpu_to_le16(0x00C0)) - hdrlen = 10; - else - hdrlen = 16; - } -out: - return hdrlen; -} -EXPORT_SYMBOL(ieee80211_hdrlen); - -unsigned int ieee80211_get_hdrlen_from_skb(const struct sk_buff *skb) -{ - const struct ieee80211_hdr *hdr = - (const struct ieee80211_hdr *)skb->data; - unsigned int hdrlen; - - if (unlikely(skb->len < 10)) - return 0; - hdrlen = ieee80211_hdrlen(hdr->frame_control); - if (unlikely(hdrlen > skb->len)) - return 0; - return hdrlen; -} -EXPORT_SYMBOL(ieee80211_get_hdrlen_from_skb); - -static int ieee80211_get_mesh_hdrlen(struct ieee80211s_hdr *meshhdr) -{ - int ae = meshhdr->flags & MESH_FLAGS_AE; - /* 7.1.3.5a.2 */ - switch (ae) { - case 0: - return 6; - case MESH_FLAGS_AE_A4: - return 12; - case MESH_FLAGS_AE_A5_A6: - return 18; - case (MESH_FLAGS_AE_A4 | MESH_FLAGS_AE_A5_A6): - return 24; - default: - return 6; - } -} - -int ieee80211_data_to_8023(struct sk_buff *skb, const u8 *addr, - enum nl80211_iftype iftype) -{ - struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) skb->data; - u16 hdrlen, ethertype; - u8 *payload; - u8 dst[ETH_ALEN]; - u8 src[ETH_ALEN] __aligned(2); - - if (unlikely(!ieee80211_is_data_present(hdr->frame_control))) - return -1; - - hdrlen = ieee80211_hdrlen(hdr->frame_control); - - /* convert IEEE 802.11 header + possible LLC headers into Ethernet - * header - * IEEE 802.11 address fields: - * ToDS FromDS Addr1 Addr2 Addr3 Addr4 - * 0 0 DA SA BSSID n/a - * 0 1 DA BSSID SA n/a - * 1 0 BSSID SA DA n/a - * 1 1 RA TA DA SA - */ - memcpy(dst, ieee80211_get_DA(hdr), ETH_ALEN); - memcpy(src, ieee80211_get_SA(hdr), ETH_ALEN); - - switch (hdr->frame_control & - cpu_to_le16(IEEE80211_FCTL_TODS | IEEE80211_FCTL_FROMDS)) { - case cpu_to_le16(IEEE80211_FCTL_TODS): - if (unlikely(iftype != NL80211_IFTYPE_AP && - iftype != NL80211_IFTYPE_AP_VLAN && - iftype != NL80211_IFTYPE_P2P_GO)) - return -1; - break; - case cpu_to_le16(IEEE80211_FCTL_TODS | IEEE80211_FCTL_FROMDS): - if (unlikely(iftype != NL80211_IFTYPE_WDS && - iftype != NL80211_IFTYPE_MESH_POINT && - iftype != NL80211_IFTYPE_AP_VLAN && - iftype != NL80211_IFTYPE_STATION)) - return -1; - if (iftype == NL80211_IFTYPE_MESH_POINT) { - struct ieee80211s_hdr *meshdr = - (struct ieee80211s_hdr *) (skb->data + hdrlen); - /* make sure meshdr->flags is on the linear part */ - if (!pskb_may_pull(skb, hdrlen + 1)) - return -1; - if (meshdr->flags & MESH_FLAGS_AE_A5_A6) { - skb_copy_bits(skb, hdrlen + - offsetof(struct ieee80211s_hdr, eaddr1), - dst, ETH_ALEN); - skb_copy_bits(skb, hdrlen + - offsetof(struct ieee80211s_hdr, eaddr2), - src, ETH_ALEN); - } - hdrlen += ieee80211_get_mesh_hdrlen(meshdr); - } - break; - case cpu_to_le16(IEEE80211_FCTL_FROMDS): - if ((iftype != NL80211_IFTYPE_STATION && - iftype != NL80211_IFTYPE_P2P_CLIENT && - iftype != NL80211_IFTYPE_MESH_POINT) || - (is_multicast_ether_addr(dst) && - !compare_ether_addr(src, addr))) - return -1; - if (iftype == NL80211_IFTYPE_MESH_POINT) { - struct ieee80211s_hdr *meshdr = - (struct ieee80211s_hdr *) (skb->data + hdrlen); - /* make sure meshdr->flags is on the linear part */ - if (!pskb_may_pull(skb, hdrlen + 1)) - return -1; - if (meshdr->flags & MESH_FLAGS_AE_A4) - skb_copy_bits(skb, hdrlen + - offsetof(struct ieee80211s_hdr, eaddr1), - src, ETH_ALEN); - hdrlen += ieee80211_get_mesh_hdrlen(meshdr); - } - break; - case cpu_to_le16(0): // [PLATA] only ADHOC and STATION can have toDS and fromDS to 0. The OCB activated forces it to be so...no change needed here as long as we are STA or ADHOC - if (iftype != NL80211_IFTYPE_ADHOC && - iftype != NL80211_IFTYPE_STATION) - return -1; - break; - } - - if (!pskb_may_pull(skb, hdrlen + 8)) - return -1; - - payload = skb->data + hdrlen; - ethertype = (payload[6] << 8) | payload[7]; - - if (likely((compare_ether_addr(payload, rfc1042_header) == 0 && - ethertype != ETH_P_AARP && ethertype != ETH_P_IPX) || - compare_ether_addr(payload, bridge_tunnel_header) == 0)) { - /* remove RFC1042 or Bridge-Tunnel encapsulation and - * replace EtherType */ - skb_pull(skb, hdrlen + 6); - memcpy(skb_push(skb, ETH_ALEN), src, ETH_ALEN); - memcpy(skb_push(skb, ETH_ALEN), dst, ETH_ALEN); - } else { - struct ethhdr *ehdr; - __be16 len; - - skb_pull(skb, hdrlen); - len = htons(skb->len); - ehdr = (struct ethhdr *) skb_push(skb, sizeof(struct ethhdr)); - memcpy(ehdr->h_dest, dst, ETH_ALEN); - memcpy(ehdr->h_source, src, ETH_ALEN); - ehdr->h_proto = len; - } - return 0; -} -EXPORT_SYMBOL(ieee80211_data_to_8023); - -int ieee80211_data_from_8023(struct sk_buff *skb, const u8 *addr, - enum nl80211_iftype iftype, u8 *bssid, bool qos) -{ - struct ieee80211_hdr hdr; - u16 hdrlen, ethertype; - __le16 fc; - const u8 *encaps_data; - int encaps_len, skip_header_bytes; - int nh_pos, h_pos; - int head_need; - - if (unlikely(skb->len < ETH_HLEN)) - return -EINVAL; - - nh_pos = skb_network_header(skb) - skb->data; - h_pos = skb_transport_header(skb) - skb->data; - - /* convert Ethernet header to proper 802.11 header (based on - * operation mode) */ - ethertype = (skb->data[12] << 8) | skb->data[13]; - fc = cpu_to_le16(IEEE80211_FTYPE_DATA | IEEE80211_STYPE_DATA); - - switch (iftype) { - case NL80211_IFTYPE_AP: - case NL80211_IFTYPE_AP_VLAN: - case NL80211_IFTYPE_P2P_GO: - fc |= cpu_to_le16(IEEE80211_FCTL_FROMDS); - /* DA BSSID SA */ - memcpy(hdr.addr1, skb->data, ETH_ALEN); - memcpy(hdr.addr2, addr, ETH_ALEN); - memcpy(hdr.addr3, skb->data + ETH_ALEN, ETH_ALEN); - hdrlen = 24; - break; - case NL80211_IFTYPE_STATION: - case NL80211_IFTYPE_P2P_CLIENT: - fc |= cpu_to_le16(IEEE80211_FCTL_TODS); - /* BSSID SA DA */ - memcpy(hdr.addr1, bssid, ETH_ALEN); - memcpy(hdr.addr2, skb->data + ETH_ALEN, ETH_ALEN); - memcpy(hdr.addr3, skb->data, ETH_ALEN); - hdrlen = 24; - break; - case NL80211_IFTYPE_ADHOC: - /* DA SA BSSID */ - memcpy(hdr.addr1, skb->data, ETH_ALEN); - memcpy(hdr.addr2, skb->data + ETH_ALEN, ETH_ALEN); - memcpy(hdr.addr3, bssid, ETH_ALEN); - hdrlen = 24; - break; - default: - return -EOPNOTSUPP; - } - - if (qos) { - fc |= cpu_to_le16(IEEE80211_STYPE_QOS_DATA); - hdrlen += 2; - } - - hdr.frame_control = fc; - hdr.duration_id = 0; - hdr.seq_ctrl = 0; - - skip_header_bytes = ETH_HLEN; - if (ethertype == ETH_P_AARP || ethertype == ETH_P_IPX) { - encaps_data = bridge_tunnel_header; - encaps_len = sizeof(bridge_tunnel_header); - skip_header_bytes -= 2; - } else if (ethertype > 0x600) { - encaps_data = rfc1042_header; - encaps_len = sizeof(rfc1042_header); - skip_header_bytes -= 2; - } else { - encaps_data = NULL; - encaps_len = 0; - } - - skb_pull(skb, skip_header_bytes); - nh_pos -= skip_header_bytes; - h_pos -= skip_header_bytes; - - head_need = hdrlen + encaps_len - skb_headroom(skb); - - if (head_need > 0 || skb_cloned(skb)) { - head_need = max(head_need, 0); - if (head_need) - skb_orphan(skb); - - if (pskb_expand_head(skb, head_need, 0, GFP_ATOMIC)) - return -ENOMEM; - - skb->truesize += head_need; - } - - if (encaps_data) { - memcpy(skb_push(skb, encaps_len), encaps_data, encaps_len); - nh_pos += encaps_len; - h_pos += encaps_len; - } - - memcpy(skb_push(skb, hdrlen), &hdr, hdrlen); - - nh_pos += hdrlen; - h_pos += hdrlen; - - /* Update skb pointers to various headers since this modified frame - * is going to go through Linux networking code that may potentially - * need things like pointer to IP header. */ - skb_set_mac_header(skb, 0); - skb_set_network_header(skb, nh_pos); - skb_set_transport_header(skb, h_pos); - - return 0; -} -EXPORT_SYMBOL(ieee80211_data_from_8023); - - -void ieee80211_amsdu_to_8023s(struct sk_buff *skb, struct sk_buff_head *list, - const u8 *addr, enum nl80211_iftype iftype, - const unsigned int extra_headroom, - bool has_80211_header) -{ - struct sk_buff *frame = NULL; - u16 ethertype; - u8 *payload; - const struct ethhdr *eth; - int remaining, err; - u8 dst[ETH_ALEN], src[ETH_ALEN]; - - if (has_80211_header) { - err = ieee80211_data_to_8023(skb, addr, iftype); - if (err) - goto out; - - /* skip the wrapping header */ - eth = (struct ethhdr *) skb_pull(skb, sizeof(struct ethhdr)); - if (!eth) - goto out; - } else { - eth = (struct ethhdr *) skb->data; - } - - while (skb != frame) { - u8 padding; - __be16 len = eth->h_proto; - unsigned int subframe_len = sizeof(struct ethhdr) + ntohs(len); - - remaining = skb->len; - memcpy(dst, eth->h_dest, ETH_ALEN); - memcpy(src, eth->h_source, ETH_ALEN); - - padding = (4 - subframe_len) & 0x3; - /* the last MSDU has no padding */ - if (subframe_len > remaining) - goto purge; - - skb_pull(skb, sizeof(struct ethhdr)); - /* reuse skb for the last subframe */ - if (remaining <= subframe_len + padding) - frame = skb; - else { - unsigned int hlen = ALIGN(extra_headroom, 4); - /* - * Allocate and reserve two bytes more for payload - * alignment since sizeof(struct ethhdr) is 14. - */ - frame = dev_alloc_skb(hlen + subframe_len + 2); - if (!frame) - goto purge; - - skb_reserve(frame, hlen + sizeof(struct ethhdr) + 2); - memcpy(skb_put(frame, ntohs(len)), skb->data, - ntohs(len)); - - eth = (struct ethhdr *)skb_pull(skb, ntohs(len) + - padding); - if (!eth) { - dev_kfree_skb(frame); - goto purge; - } - } - - skb_reset_network_header(frame); - frame->dev = skb->dev; - frame->priority = skb->priority; - - payload = frame->data; - ethertype = (payload[6] << 8) | payload[7]; - - if (likely((compare_ether_addr(payload, rfc1042_header) == 0 && - ethertype != ETH_P_AARP && ethertype != ETH_P_IPX) || - compare_ether_addr(payload, - bridge_tunnel_header) == 0)) { - /* remove RFC1042 or Bridge-Tunnel - * encapsulation and replace EtherType */ - skb_pull(frame, 6); - memcpy(skb_push(frame, ETH_ALEN), src, ETH_ALEN); - memcpy(skb_push(frame, ETH_ALEN), dst, ETH_ALEN); - } else { - memcpy(skb_push(frame, sizeof(__be16)), &len, - sizeof(__be16)); - memcpy(skb_push(frame, ETH_ALEN), src, ETH_ALEN); - memcpy(skb_push(frame, ETH_ALEN), dst, ETH_ALEN); - } - __skb_queue_tail(list, frame); - } - - return; - - purge: - __skb_queue_purge(list); - out: - dev_kfree_skb(skb); -} -EXPORT_SYMBOL(ieee80211_amsdu_to_8023s); - -/* Given a data frame determine the 802.1p/1d tag to use. */ -unsigned int cfg80211_classify8021d(struct sk_buff *skb) -{ - unsigned int dscp; - - /* skb->priority values from 256->263 are magic values to - * directly indicate a specific 802.1d priority. This is used - * to allow 802.1d priority to be passed directly in from VLAN - * tags, etc. - */ - if (skb->priority >= 256 && skb->priority <= 263) - return skb->priority - 256; - - switch (skb->protocol) { - case htons(ETH_P_IP): - dscp = ipv4_get_dsfield(ip_hdr(skb)) & 0xfc; - break; - case htons(ETH_P_IPV6): - dscp = ipv6_get_dsfield(ipv6_hdr(skb)) & 0xfc; - break; - default: - return 0; - } - - return dscp >> 5; -} -EXPORT_SYMBOL(cfg80211_classify8021d); - -const u8 *ieee80211_bss_get_ie(struct cfg80211_bss *bss, u8 ie) -{ - u8 *end, *pos; - - pos = bss->information_elements; - if (pos == NULL) - return NULL; - end = pos + bss->len_information_elements; - - while (pos + 1 < end) { - if (pos + 2 + pos[1] > end) - break; - if (pos[0] == ie) - return pos; - pos += 2 + pos[1]; - } - - return NULL; -} -EXPORT_SYMBOL(ieee80211_bss_get_ie); - -void cfg80211_upload_connect_keys(struct wireless_dev *wdev) -{ - struct cfg80211_registered_device *rdev = wiphy_to_dev(wdev->wiphy); - struct net_device *dev = wdev->netdev; - int i; - - if (!wdev->connect_keys) - return; - - for (i = 0; i < 6; i++) { - if (!wdev->connect_keys->params[i].cipher) - continue; - if (rdev->ops->add_key(wdev->wiphy, dev, i, false, NULL, - &wdev->connect_keys->params[i])) { - netdev_err(dev, "failed to set key %d\n", i); - continue; - } - if (wdev->connect_keys->def == i) - if (rdev->ops->set_default_key(wdev->wiphy, dev, - i, true, true)) { - netdev_err(dev, "failed to set defkey %d\n", i); - continue; - } - if (wdev->connect_keys->defmgmt == i) - if (rdev->ops->set_default_mgmt_key(wdev->wiphy, dev, i)) - netdev_err(dev, "failed to set mgtdef %d\n", i); - } - - kfree(wdev->connect_keys); - wdev->connect_keys = NULL; -} - -static void cfg80211_process_wdev_events(struct wireless_dev *wdev) -{ - struct cfg80211_event *ev; - unsigned long flags; - const u8 *bssid = NULL; - - spin_lock_irqsave(&wdev->event_lock, flags); - while (!list_empty(&wdev->event_list)) { - ev = list_first_entry(&wdev->event_list, - struct cfg80211_event, list); - list_del(&ev->list); - spin_unlock_irqrestore(&wdev->event_lock, flags); - - wdev_lock(wdev); - switch (ev->type) { - case EVENT_CONNECT_RESULT: - if (!is_zero_ether_addr(ev->cr.bssid)) - bssid = ev->cr.bssid; - __cfg80211_connect_result( - wdev->netdev, bssid, - ev->cr.req_ie, ev->cr.req_ie_len, - ev->cr.resp_ie, ev->cr.resp_ie_len, - ev->cr.status, - ev->cr.status == WLAN_STATUS_SUCCESS, - NULL); - break; - case EVENT_ROAMED: - __cfg80211_roamed(wdev, ev->rm.bss, ev->rm.req_ie, - ev->rm.req_ie_len, ev->rm.resp_ie, - ev->rm.resp_ie_len); - break; - case EVENT_DISCONNECTED: - __cfg80211_disconnected(wdev->netdev, - ev->dc.ie, ev->dc.ie_len, - ev->dc.reason, true); - break; - case EVENT_IBSS_JOINED: - __cfg80211_ibss_joined(wdev->netdev, ev->ij.bssid); - break; - } - wdev_unlock(wdev); - - kfree(ev); - - spin_lock_irqsave(&wdev->event_lock, flags); - } - spin_unlock_irqrestore(&wdev->event_lock, flags); -} - -void cfg80211_process_rdev_events(struct cfg80211_registered_device *rdev) -{ - struct wireless_dev *wdev; - - ASSERT_RTNL(); - ASSERT_RDEV_LOCK(rdev); - - mutex_lock(&rdev->devlist_mtx); - - list_for_each_entry(wdev, &rdev->netdev_list, list) - cfg80211_process_wdev_events(wdev); - - mutex_unlock(&rdev->devlist_mtx); -} - -int cfg80211_change_iface(struct cfg80211_registered_device *rdev, - struct net_device *dev, enum nl80211_iftype ntype, - u32 *flags, struct vif_params *params) -{ - int err; - enum nl80211_iftype otype = dev->ieee80211_ptr->iftype; - - ASSERT_RDEV_LOCK(rdev); - - /* don't support changing VLANs, you just re-create them */ - if (otype == NL80211_IFTYPE_AP_VLAN) - return -EOPNOTSUPP; - - if (!rdev->ops->change_virtual_intf || - !(rdev->wiphy.interface_modes & (1 << ntype))) - return -EOPNOTSUPP; - - /* if it's part of a bridge, reject changing type to station/ibss */ - if (br_port_exists(dev) && - (ntype == NL80211_IFTYPE_ADHOC || - ntype == NL80211_IFTYPE_STATION || - ntype == NL80211_IFTYPE_P2P_CLIENT)) - return -EBUSY; - - if (ntype != otype) { - err = cfg80211_can_change_interface(rdev, dev->ieee80211_ptr, - ntype); - if (err) - return err; - - dev->ieee80211_ptr->use_4addr = false; - dev->ieee80211_ptr->mesh_id_up_len = 0; - - switch (otype) { - case NL80211_IFTYPE_ADHOC: - cfg80211_leave_ibss(rdev, dev, false); - break; - case NL80211_IFTYPE_STATION: - case NL80211_IFTYPE_P2P_CLIENT: - cfg80211_disconnect(rdev, dev, - WLAN_REASON_DEAUTH_LEAVING, true); - break; - case NL80211_IFTYPE_MESH_POINT: - /* mesh should be handled? */ - break; - default: - break; - } - - cfg80211_process_rdev_events(rdev); - } - - err = rdev->ops->change_virtual_intf(&rdev->wiphy, dev, - ntype, flags, params); - - WARN_ON(!err && dev->ieee80211_ptr->iftype != ntype); - - if (!err && params && params->use_4addr != -1) - dev->ieee80211_ptr->use_4addr = params->use_4addr; - - if (!err) { - dev->priv_flags &= ~IFF_DONT_BRIDGE; - switch (ntype) { - case NL80211_IFTYPE_STATION: - if (dev->ieee80211_ptr->use_4addr) - break; - /* fall through */ - case NL80211_IFTYPE_P2P_CLIENT: - case NL80211_IFTYPE_ADHOC: - dev->priv_flags |= IFF_DONT_BRIDGE; - break; - case NL80211_IFTYPE_P2P_GO: - case NL80211_IFTYPE_AP: - case NL80211_IFTYPE_AP_VLAN: - case NL80211_IFTYPE_WDS: - case NL80211_IFTYPE_MESH_POINT: - /* bridging OK */ - break; - case NL80211_IFTYPE_MONITOR: - /* monitor can't bridge anyway */ - break; - case NL80211_IFTYPE_UNSPECIFIED: - case NUM_NL80211_IFTYPES: - /* not happening */ - break; - } - } - - return err; -} - -u16 cfg80211_calculate_bitrate(struct rate_info *rate) -{ - int modulation, streams, bitrate; - - if (!(rate->flags & RATE_INFO_FLAGS_MCS)) - return rate->legacy; - - /* the formula below does only work for MCS values smaller than 32 */ - if (rate->mcs >= 32) - return 0; - - modulation = rate->mcs & 7; - streams = (rate->mcs >> 3) + 1; - - bitrate = (rate->flags & RATE_INFO_FLAGS_40_MHZ_WIDTH) ? - 13500000 : 6500000; - - if (modulation < 4) - bitrate *= (modulation + 1); - else if (modulation == 4) - bitrate *= (modulation + 2); - else - bitrate *= (modulation + 3); - - bitrate *= streams; - - if (rate->flags & RATE_INFO_FLAGS_SHORT_GI) - bitrate = (bitrate / 9) * 10; - - /* do NOT round down here */ - return (bitrate + 50000) / 100000; -} -EXPORT_SYMBOL(cfg80211_calculate_bitrate); - -int cfg80211_validate_beacon_int(struct cfg80211_registered_device *rdev, - u32 beacon_int) -{ - struct wireless_dev *wdev; - int res = 0; - - if (!beacon_int) - return -EINVAL; - - mutex_lock(&rdev->devlist_mtx); - - list_for_each_entry(wdev, &rdev->netdev_list, list) { - if (!wdev->beacon_interval) - continue; - if (wdev->beacon_interval != beacon_int) { - res = -EINVAL; - break; - } - } - - mutex_unlock(&rdev->devlist_mtx); - - return res; -} - -int cfg80211_can_change_interface(struct cfg80211_registered_device *rdev, - struct wireless_dev *wdev, - enum nl80211_iftype iftype) -{ - struct wireless_dev *wdev_iter; - int num[NUM_NL80211_IFTYPES]; - int total = 1; - int i, j; - - ASSERT_RTNL(); - - /* Always allow software iftypes */ - if (rdev->wiphy.software_iftypes & BIT(iftype)) - return 0; - - /* - * Drivers will gradually all set this flag, until all - * have it we only enforce for those that set it. - */ - if (!(rdev->wiphy.flags & WIPHY_FLAG_ENFORCE_COMBINATIONS)) - return 0; - - memset(num, 0, sizeof(num)); - - num[iftype] = 1; - - mutex_lock(&rdev->devlist_mtx); - list_for_each_entry(wdev_iter, &rdev->netdev_list, list) { - if (wdev_iter == wdev) - continue; - if (!netif_running(wdev_iter->netdev)) - continue; - - if (rdev->wiphy.software_iftypes & BIT(wdev_iter->iftype)) - continue; - - num[wdev_iter->iftype]++; - total++; - } - mutex_unlock(&rdev->devlist_mtx); - - for (i = 0; i < rdev->wiphy.n_iface_combinations; i++) { - const struct ieee80211_iface_combination *c; - struct ieee80211_iface_limit *limits; - - c = &rdev->wiphy.iface_combinations[i]; - - limits = kmemdup(c->limits, sizeof(limits[0]) * c->n_limits, - GFP_KERNEL); - if (!limits) - return -ENOMEM; - if (total > c->max_interfaces) - goto cont; - - for (iftype = 0; iftype < NUM_NL80211_IFTYPES; iftype++) { - if (rdev->wiphy.software_iftypes & BIT(iftype)) - continue; - for (j = 0; j < c->n_limits; j++) { - if (!(limits[j].types & iftype)) - continue; - if (limits[j].max < num[iftype]) - goto cont; - limits[j].max -= num[iftype]; - } - } - /* yay, it fits */ - kfree(limits); - return 0; - cont: - kfree(limits); - } - - return -EBUSY; -} - -int ieee80211_get_ratemask(struct ieee80211_supported_band *sband, - const u8 *rates, unsigned int n_rates, - u32 *mask) -{ - int i, j; - - if (!sband) - return -EINVAL; - - if (n_rates == 0 || n_rates > NL80211_MAX_SUPP_RATES) - return -EINVAL; - - *mask = 0; - - for (i = 0; i < n_rates; i++) { - int rate = (rates[i] & 0x7f) * 5; - bool found = false; - - for (j = 0; j < sband->n_bitrates; j++) { - if (sband->bitrates[j].bitrate == rate) { - found = true; - *mask |= BIT(j); - break; - } - } - if (!found) - return -EINVAL; - } - - /* - * mask must have at least one bit set here since we - * didn't accept a 0-length rates array nor allowed - * entries in the array that didn't exist - */ - - return 0; -} - -/* See IEEE 802.1H for LLC/SNAP encapsulation/decapsulation */ -/* Ethernet-II snap header (RFC1042 for most EtherTypes) */ -const unsigned char rfc1042_header[] __aligned(2) = - { 0xaa, 0xaa, 0x03, 0x00, 0x00, 0x00 }; -EXPORT_SYMBOL(rfc1042_header); - -/* Bridge-Tunnel header (for EtherTypes ETH_P_AARP and ETH_P_IPX) */ -const unsigned char bridge_tunnel_header[] __aligned(2) = - { 0xaa, 0xaa, 0x03, 0x00, 0x00, 0xf8 }; -EXPORT_SYMBOL(bridge_tunnel_header); diff --git a/openairITS/mac/DOT11/net/wireless/wext-compat.c b/openairITS/mac/DOT11/net/wireless/wext-compat.c deleted file mode 100644 index 3c24eb97e9..0000000000 --- a/openairITS/mac/DOT11/net/wireless/wext-compat.c +++ /dev/null @@ -1,1531 +0,0 @@ -/* - * cfg80211 - wext compat code - * - * This is temporary code until all wireless functionality is migrated - * into cfg80211, when that happens all the exports here go away and - * we directly assign the wireless handlers of wireless interfaces. - * - * Copyright 2008-2009 Johannes Berg - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "wext-compat.h" -#include "core.h" - -int cfg80211_wext_giwname(struct net_device *dev, - struct iw_request_info *info, - char *name, char *extra) -{ - struct wireless_dev *wdev = dev->ieee80211_ptr; - struct ieee80211_supported_band *sband; - bool is_ht = false, is_a = false, is_b = false, is_g = false; - - if (!wdev) - return -EOPNOTSUPP; - - sband = wdev->wiphy->bands[IEEE80211_BAND_5GHZ]; - if (sband) { - is_a = true; - is_ht |= sband->ht_cap.ht_supported; - } - - sband = wdev->wiphy->bands[IEEE80211_BAND_2GHZ]; - if (sband) { - int i; - /* Check for mandatory rates */ - for (i = 0; i < sband->n_bitrates; i++) { - if (sband->bitrates[i].bitrate == 10) - is_b = true; - if (sband->bitrates[i].bitrate == 60) - is_g = true; - } - is_ht |= sband->ht_cap.ht_supported; - } - - strcpy(name, "IEEE 802.11"); - if (is_a) - strcat(name, "a"); - if (is_b) - strcat(name, "b"); - if (is_g) - strcat(name, "g"); - if (is_ht) - strcat(name, "n"); - - return 0; -} -EXPORT_SYMBOL_GPL(cfg80211_wext_giwname); - -int cfg80211_wext_siwmode(struct net_device *dev, struct iw_request_info *info, - u32 *mode, char *extra) -{ - struct wireless_dev *wdev = dev->ieee80211_ptr; - struct cfg80211_registered_device *rdev; - struct vif_params vifparams; - enum nl80211_iftype type; - int ret; - - rdev = wiphy_to_dev(wdev->wiphy); - - switch (*mode) { - case IW_MODE_INFRA: - type = NL80211_IFTYPE_STATION; - break; - case IW_MODE_ADHOC: - type = NL80211_IFTYPE_ADHOC; - break; - case IW_MODE_REPEAT: - type = NL80211_IFTYPE_WDS; - break; - case IW_MODE_MONITOR: - type = NL80211_IFTYPE_MONITOR; - break; - default: - return -EINVAL; - } - - if (type == wdev->iftype) - return 0; - - memset(&vifparams, 0, sizeof(vifparams)); - - cfg80211_lock_rdev(rdev); - ret = cfg80211_change_iface(rdev, dev, type, NULL, &vifparams); - cfg80211_unlock_rdev(rdev); - - return ret; -} -EXPORT_SYMBOL_GPL(cfg80211_wext_siwmode); - -int cfg80211_wext_giwmode(struct net_device *dev, struct iw_request_info *info, - u32 *mode, char *extra) -{ - struct wireless_dev *wdev = dev->ieee80211_ptr; - - if (!wdev) - return -EOPNOTSUPP; - - switch (wdev->iftype) { - case NL80211_IFTYPE_AP: - *mode = IW_MODE_MASTER; - break; - case NL80211_IFTYPE_STATION: - *mode = IW_MODE_INFRA; - break; - case NL80211_IFTYPE_ADHOC: - *mode = IW_MODE_ADHOC; - break; - case NL80211_IFTYPE_MONITOR: - *mode = IW_MODE_MONITOR; - break; - case NL80211_IFTYPE_WDS: - *mode = IW_MODE_REPEAT; - break; - case NL80211_IFTYPE_AP_VLAN: - *mode = IW_MODE_SECOND; /* FIXME */ - break; - default: - *mode = IW_MODE_AUTO; - break; - } - return 0; -} -EXPORT_SYMBOL_GPL(cfg80211_wext_giwmode); - - -int cfg80211_wext_giwrange(struct net_device *dev, - struct iw_request_info *info, - struct iw_point *data, char *extra) -{ - struct wireless_dev *wdev = dev->ieee80211_ptr; - struct iw_range *range = (struct iw_range *) extra; - enum ieee80211_band band; - int i, c = 0; - - if (!wdev) - return -EOPNOTSUPP; - - data->length = sizeof(struct iw_range); - memset(range, 0, sizeof(struct iw_range)); - - range->we_version_compiled = WIRELESS_EXT; - range->we_version_source = 21; - range->retry_capa = IW_RETRY_LIMIT; - range->retry_flags = IW_RETRY_LIMIT; - range->min_retry = 0; - range->max_retry = 255; - range->min_rts = 0; - range->max_rts = 2347; - range->min_frag = 256; - range->max_frag = 2346; - - range->max_encoding_tokens = 4; - - range->max_qual.updated = IW_QUAL_NOISE_INVALID; - - switch (wdev->wiphy->signal_type) { - case CFG80211_SIGNAL_TYPE_NONE: - break; - case CFG80211_SIGNAL_TYPE_MBM: - range->max_qual.level = -110; - range->max_qual.qual = 70; - range->avg_qual.qual = 35; - range->max_qual.updated |= IW_QUAL_DBM; - range->max_qual.updated |= IW_QUAL_QUAL_UPDATED; - range->max_qual.updated |= IW_QUAL_LEVEL_UPDATED; - break; - case CFG80211_SIGNAL_TYPE_UNSPEC: - range->max_qual.level = 100; - range->max_qual.qual = 100; - range->avg_qual.qual = 50; - range->max_qual.updated |= IW_QUAL_QUAL_UPDATED; - range->max_qual.updated |= IW_QUAL_LEVEL_UPDATED; - break; - } - - range->avg_qual.level = range->max_qual.level / 2; - range->avg_qual.noise = range->max_qual.noise / 2; - range->avg_qual.updated = range->max_qual.updated; - - for (i = 0; i < wdev->wiphy->n_cipher_suites; i++) { - switch (wdev->wiphy->cipher_suites[i]) { - case WLAN_CIPHER_SUITE_TKIP: - range->enc_capa |= (IW_ENC_CAPA_CIPHER_TKIP | - IW_ENC_CAPA_WPA); - break; - - case WLAN_CIPHER_SUITE_CCMP: - range->enc_capa |= (IW_ENC_CAPA_CIPHER_CCMP | - IW_ENC_CAPA_WPA2); - break; - - case WLAN_CIPHER_SUITE_WEP40: - range->encoding_size[range->num_encoding_sizes++] = - WLAN_KEY_LEN_WEP40; - break; - - case WLAN_CIPHER_SUITE_WEP104: - range->encoding_size[range->num_encoding_sizes++] = - WLAN_KEY_LEN_WEP104; - break; - } - } - - for (band = 0; band < IEEE80211_NUM_BANDS; band ++) { - struct ieee80211_supported_band *sband; - - sband = wdev->wiphy->bands[band]; - - if (!sband) - continue; - - for (i = 0; i < sband->n_channels && c < IW_MAX_FREQUENCIES; i++) { - struct ieee80211_channel *chan = &sband->channels[i]; - - if (!(chan->flags & IEEE80211_CHAN_DISABLED)) { - range->freq[c].i = - ieee80211_frequency_to_channel( - chan->center_freq); - range->freq[c].m = chan->center_freq; - range->freq[c].e = 6; - c++; - } - } - } - range->num_channels = c; - range->num_frequency = c; - - IW_EVENT_CAPA_SET_KERNEL(range->event_capa); - IW_EVENT_CAPA_SET(range->event_capa, SIOCGIWAP); - IW_EVENT_CAPA_SET(range->event_capa, SIOCGIWSCAN); - - if (wdev->wiphy->max_scan_ssids > 0) - range->scan_capa |= IW_SCAN_CAPA_ESSID; - - return 0; -} -EXPORT_SYMBOL_GPL(cfg80211_wext_giwrange); - - -/** - * cfg80211_wext_freq - get wext frequency for non-"auto" - * @wiphy: the wiphy - * @freq: the wext freq encoding - * - * Returns a frequency, or a negative error code, or 0 for auto. - */ -int cfg80211_wext_freq(struct wiphy *wiphy, struct iw_freq *freq) -{ - /* - * Parse frequency - return 0 for auto and - * -EINVAL for impossible things. - */ - if (freq->e == 0) { - enum ieee80211_band band = IEEE80211_BAND_2GHZ; - if (freq->m < 0) - return 0; - if (freq->m > 14) - band = IEEE80211_BAND_5GHZ; - return ieee80211_channel_to_frequency(freq->m, band); - } else { - int i, div = 1000000; - for (i = 0; i < freq->e; i++) - div /= 10; - if (div <= 0) - return -EINVAL; - return freq->m / div; - } -} - -int cfg80211_wext_siwrts(struct net_device *dev, - struct iw_request_info *info, - struct iw_param *rts, char *extra) -{ - struct wireless_dev *wdev = dev->ieee80211_ptr; - struct cfg80211_registered_device *rdev = wiphy_to_dev(wdev->wiphy); - u32 orts = wdev->wiphy->rts_threshold; - int err; - - if (rts->disabled || !rts->fixed) - wdev->wiphy->rts_threshold = (u32) -1; - else if (rts->value < 0) - return -EINVAL; - else - wdev->wiphy->rts_threshold = rts->value; - - err = rdev->ops->set_wiphy_params(wdev->wiphy, - WIPHY_PARAM_RTS_THRESHOLD); - if (err) - wdev->wiphy->rts_threshold = orts; - - return err; -} -EXPORT_SYMBOL_GPL(cfg80211_wext_siwrts); - -int cfg80211_wext_giwrts(struct net_device *dev, - struct iw_request_info *info, - struct iw_param *rts, char *extra) -{ - struct wireless_dev *wdev = dev->ieee80211_ptr; - - rts->value = wdev->wiphy->rts_threshold; - rts->disabled = rts->value == (u32) -1; - rts->fixed = 1; - - return 0; -} -EXPORT_SYMBOL_GPL(cfg80211_wext_giwrts); - -int cfg80211_wext_siwfrag(struct net_device *dev, - struct iw_request_info *info, - struct iw_param *frag, char *extra) -{ - struct wireless_dev *wdev = dev->ieee80211_ptr; - struct cfg80211_registered_device *rdev = wiphy_to_dev(wdev->wiphy); - u32 ofrag = wdev->wiphy->frag_threshold; - int err; - - if (frag->disabled || !frag->fixed) - wdev->wiphy->frag_threshold = (u32) -1; - else if (frag->value < 256) - return -EINVAL; - else { - /* Fragment length must be even, so strip LSB. */ - wdev->wiphy->frag_threshold = frag->value & ~0x1; - } - - err = rdev->ops->set_wiphy_params(wdev->wiphy, - WIPHY_PARAM_FRAG_THRESHOLD); - if (err) - wdev->wiphy->frag_threshold = ofrag; - - return err; -} -EXPORT_SYMBOL_GPL(cfg80211_wext_siwfrag); - -int cfg80211_wext_giwfrag(struct net_device *dev, - struct iw_request_info *info, - struct iw_param *frag, char *extra) -{ - struct wireless_dev *wdev = dev->ieee80211_ptr; - - frag->value = wdev->wiphy->frag_threshold; - frag->disabled = frag->value == (u32) -1; - frag->fixed = 1; - - return 0; -} -EXPORT_SYMBOL_GPL(cfg80211_wext_giwfrag); - -static int cfg80211_wext_siwretry(struct net_device *dev, - struct iw_request_info *info, - struct iw_param *retry, char *extra) -{ - struct wireless_dev *wdev = dev->ieee80211_ptr; - struct cfg80211_registered_device *rdev = wiphy_to_dev(wdev->wiphy); - u32 changed = 0; - u8 olong = wdev->wiphy->retry_long; - u8 oshort = wdev->wiphy->retry_short; - int err; - - if (retry->disabled || - (retry->flags & IW_RETRY_TYPE) != IW_RETRY_LIMIT) - return -EINVAL; - - if (retry->flags & IW_RETRY_LONG) { - wdev->wiphy->retry_long = retry->value; - changed |= WIPHY_PARAM_RETRY_LONG; - } else if (retry->flags & IW_RETRY_SHORT) { - wdev->wiphy->retry_short = retry->value; - changed |= WIPHY_PARAM_RETRY_SHORT; - } else { - wdev->wiphy->retry_short = retry->value; - wdev->wiphy->retry_long = retry->value; - changed |= WIPHY_PARAM_RETRY_LONG; - changed |= WIPHY_PARAM_RETRY_SHORT; - } - - if (!changed) - return 0; - - err = rdev->ops->set_wiphy_params(wdev->wiphy, changed); - if (err) { - wdev->wiphy->retry_short = oshort; - wdev->wiphy->retry_long = olong; - } - - return err; -} - -int cfg80211_wext_giwretry(struct net_device *dev, - struct iw_request_info *info, - struct iw_param *retry, char *extra) -{ - struct wireless_dev *wdev = dev->ieee80211_ptr; - - retry->disabled = 0; - - if (retry->flags == 0 || (retry->flags & IW_RETRY_SHORT)) { - /* - * First return short value, iwconfig will ask long value - * later if needed - */ - retry->flags |= IW_RETRY_LIMIT; - retry->value = wdev->wiphy->retry_short; - if (wdev->wiphy->retry_long != wdev->wiphy->retry_short) - retry->flags |= IW_RETRY_LONG; - - return 0; - } - - if (retry->flags & IW_RETRY_LONG) { - retry->flags = IW_RETRY_LIMIT | IW_RETRY_LONG; - retry->value = wdev->wiphy->retry_long; - } - - return 0; -} -EXPORT_SYMBOL_GPL(cfg80211_wext_giwretry); - -static int __cfg80211_set_encryption(struct cfg80211_registered_device *rdev, - struct net_device *dev, bool pairwise, - const u8 *addr, bool remove, bool tx_key, - int idx, struct key_params *params) -{ - struct wireless_dev *wdev = dev->ieee80211_ptr; - int err, i; - bool rejoin = false; - - if (pairwise && !addr) - return -EINVAL; - - if (!wdev->wext.keys) { - wdev->wext.keys = kzalloc(sizeof(*wdev->wext.keys), - GFP_KERNEL); - if (!wdev->wext.keys) - return -ENOMEM; - for (i = 0; i < 6; i++) - wdev->wext.keys->params[i].key = - wdev->wext.keys->data[i]; - } - - if (wdev->iftype != NL80211_IFTYPE_ADHOC && - wdev->iftype != NL80211_IFTYPE_STATION) - return -EOPNOTSUPP; - - if (params->cipher == WLAN_CIPHER_SUITE_AES_CMAC) { - if (!wdev->current_bss) - return -ENOLINK; - - if (!rdev->ops->set_default_mgmt_key) - return -EOPNOTSUPP; - - if (idx < 4 || idx > 5) - return -EINVAL; - } else if (idx < 0 || idx > 3) - return -EINVAL; - - if (remove) { - err = 0; - if (wdev->current_bss) { - /* - * If removing the current TX key, we will need to - * join a new IBSS without the privacy bit clear. - */ - if (idx == wdev->wext.default_key && - wdev->iftype == NL80211_IFTYPE_ADHOC) { - __cfg80211_leave_ibss(rdev, wdev->netdev, true); - rejoin = true; - } - - if (!pairwise && addr && - !(rdev->wiphy.flags & WIPHY_FLAG_IBSS_RSN)) - err = -ENOENT; - else - err = rdev->ops->del_key(&rdev->wiphy, dev, idx, - pairwise, addr); - } - wdev->wext.connect.privacy = false; - /* - * Applications using wireless extensions expect to be - * able to delete keys that don't exist, so allow that. - */ - if (err == -ENOENT) - err = 0; - if (!err) { - if (!addr) { - wdev->wext.keys->params[idx].key_len = 0; - wdev->wext.keys->params[idx].cipher = 0; - } - if (idx == wdev->wext.default_key) - wdev->wext.default_key = -1; - else if (idx == wdev->wext.default_mgmt_key) - wdev->wext.default_mgmt_key = -1; - } - - if (!err && rejoin) - err = cfg80211_ibss_wext_join(rdev, wdev); - - return err; - } - - if (addr) - tx_key = false; - - if (cfg80211_validate_key_settings(rdev, params, idx, pairwise, addr)) - return -EINVAL; - - err = 0; - if (wdev->current_bss) - err = rdev->ops->add_key(&rdev->wiphy, dev, idx, - pairwise, addr, params); - if (err) - return err; - - if (!addr) { - wdev->wext.keys->params[idx] = *params; - memcpy(wdev->wext.keys->data[idx], - params->key, params->key_len); - wdev->wext.keys->params[idx].key = - wdev->wext.keys->data[idx]; - } - - if ((params->cipher == WLAN_CIPHER_SUITE_WEP40 || - params->cipher == WLAN_CIPHER_SUITE_WEP104) && - (tx_key || (!addr && wdev->wext.default_key == -1))) { - if (wdev->current_bss) { - /* - * If we are getting a new TX key from not having - * had one before we need to join a new IBSS with - * the privacy bit set. - */ - if (wdev->iftype == NL80211_IFTYPE_ADHOC && - wdev->wext.default_key == -1) { - __cfg80211_leave_ibss(rdev, wdev->netdev, true); - rejoin = true; - } - err = rdev->ops->set_default_key(&rdev->wiphy, dev, - idx, true, true); - } - if (!err) { - wdev->wext.default_key = idx; - if (rejoin) - err = cfg80211_ibss_wext_join(rdev, wdev); - } - return err; - } - - if (params->cipher == WLAN_CIPHER_SUITE_AES_CMAC && - (tx_key || (!addr && wdev->wext.default_mgmt_key == -1))) { - if (wdev->current_bss) - err = rdev->ops->set_default_mgmt_key(&rdev->wiphy, - dev, idx); - if (!err) - wdev->wext.default_mgmt_key = idx; - return err; - } - - return 0; -} - -static int cfg80211_set_encryption(struct cfg80211_registered_device *rdev, - struct net_device *dev, bool pairwise, - const u8 *addr, bool remove, bool tx_key, - int idx, struct key_params *params) -{ - int err; - - /* devlist mutex needed for possible IBSS re-join */ - mutex_lock(&rdev->devlist_mtx); - wdev_lock(dev->ieee80211_ptr); - err = __cfg80211_set_encryption(rdev, dev, pairwise, addr, - remove, tx_key, idx, params); - wdev_unlock(dev->ieee80211_ptr); - mutex_unlock(&rdev->devlist_mtx); - - return err; -} - -static int cfg80211_wext_siwencode(struct net_device *dev, - struct iw_request_info *info, - struct iw_point *erq, char *keybuf) -{ - struct wireless_dev *wdev = dev->ieee80211_ptr; - struct cfg80211_registered_device *rdev = wiphy_to_dev(wdev->wiphy); - int idx, err; - bool remove = false; - struct key_params params; - - if (wdev->iftype != NL80211_IFTYPE_STATION && - wdev->iftype != NL80211_IFTYPE_ADHOC) - return -EOPNOTSUPP; - - /* no use -- only MFP (set_default_mgmt_key) is optional */ - if (!rdev->ops->del_key || - !rdev->ops->add_key || - !rdev->ops->set_default_key) - return -EOPNOTSUPP; - - idx = erq->flags & IW_ENCODE_INDEX; - if (idx == 0) { - idx = wdev->wext.default_key; - if (idx < 0) - idx = 0; - } else if (idx < 1 || idx > 4) - return -EINVAL; - else - idx--; - - if (erq->flags & IW_ENCODE_DISABLED) - remove = true; - else if (erq->length == 0) { - /* No key data - just set the default TX key index */ - err = 0; - wdev_lock(wdev); - if (wdev->current_bss) - err = rdev->ops->set_default_key(&rdev->wiphy, dev, - idx, true, true); - if (!err) - wdev->wext.default_key = idx; - wdev_unlock(wdev); - return err; - } - - memset(¶ms, 0, sizeof(params)); - params.key = keybuf; - params.key_len = erq->length; - if (erq->length == 5) - params.cipher = WLAN_CIPHER_SUITE_WEP40; - else if (erq->length == 13) - params.cipher = WLAN_CIPHER_SUITE_WEP104; - else if (!remove) - return -EINVAL; - - return cfg80211_set_encryption(rdev, dev, false, NULL, remove, - wdev->wext.default_key == -1, - idx, ¶ms); -} - -static int cfg80211_wext_siwencodeext(struct net_device *dev, - struct iw_request_info *info, - struct iw_point *erq, char *extra) -{ - struct wireless_dev *wdev = dev->ieee80211_ptr; - struct cfg80211_registered_device *rdev = wiphy_to_dev(wdev->wiphy); - struct iw_encode_ext *ext = (struct iw_encode_ext *) extra; - const u8 *addr; - int idx; - bool remove = false; - struct key_params params; - u32 cipher; - - if (wdev->iftype != NL80211_IFTYPE_STATION && - wdev->iftype != NL80211_IFTYPE_ADHOC) - return -EOPNOTSUPP; - - /* no use -- only MFP (set_default_mgmt_key) is optional */ - if (!rdev->ops->del_key || - !rdev->ops->add_key || - !rdev->ops->set_default_key) - return -EOPNOTSUPP; - - switch (ext->alg) { - case IW_ENCODE_ALG_NONE: - remove = true; - cipher = 0; - break; - case IW_ENCODE_ALG_WEP: - if (ext->key_len == 5) - cipher = WLAN_CIPHER_SUITE_WEP40; - else if (ext->key_len == 13) - cipher = WLAN_CIPHER_SUITE_WEP104; - else - return -EINVAL; - break; - case IW_ENCODE_ALG_TKIP: - cipher = WLAN_CIPHER_SUITE_TKIP; - break; - case IW_ENCODE_ALG_CCMP: - cipher = WLAN_CIPHER_SUITE_CCMP; - break; - case IW_ENCODE_ALG_AES_CMAC: - cipher = WLAN_CIPHER_SUITE_AES_CMAC; - break; - default: - return -EOPNOTSUPP; - } - - if (erq->flags & IW_ENCODE_DISABLED) - remove = true; - - idx = erq->flags & IW_ENCODE_INDEX; - if (cipher == WLAN_CIPHER_SUITE_AES_CMAC) { - if (idx < 4 || idx > 5) { - idx = wdev->wext.default_mgmt_key; - if (idx < 0) - return -EINVAL; - } else - idx--; - } else { - if (idx < 1 || idx > 4) { - idx = wdev->wext.default_key; - if (idx < 0) - return -EINVAL; - } else - idx--; - } - - addr = ext->addr.sa_data; - if (is_broadcast_ether_addr(addr)) - addr = NULL; - - memset(¶ms, 0, sizeof(params)); - params.key = ext->key; - params.key_len = ext->key_len; - params.cipher = cipher; - - if (ext->ext_flags & IW_ENCODE_EXT_RX_SEQ_VALID) { - params.seq = ext->rx_seq; - params.seq_len = 6; - } - - return cfg80211_set_encryption( - rdev, dev, - !(ext->ext_flags & IW_ENCODE_EXT_GROUP_KEY), - addr, remove, - ext->ext_flags & IW_ENCODE_EXT_SET_TX_KEY, - idx, ¶ms); -} - -static int cfg80211_wext_giwencode(struct net_device *dev, - struct iw_request_info *info, - struct iw_point *erq, char *keybuf) -{ - struct wireless_dev *wdev = dev->ieee80211_ptr; - int idx; - - if (wdev->iftype != NL80211_IFTYPE_STATION && - wdev->iftype != NL80211_IFTYPE_ADHOC) - return -EOPNOTSUPP; - - idx = erq->flags & IW_ENCODE_INDEX; - if (idx == 0) { - idx = wdev->wext.default_key; - if (idx < 0) - idx = 0; - } else if (idx < 1 || idx > 4) - return -EINVAL; - else - idx--; - - erq->flags = idx + 1; - - if (!wdev->wext.keys || !wdev->wext.keys->params[idx].cipher) { - erq->flags |= IW_ENCODE_DISABLED; - erq->length = 0; - return 0; - } - - erq->length = min_t(size_t, erq->length, - wdev->wext.keys->params[idx].key_len); - memcpy(keybuf, wdev->wext.keys->params[idx].key, erq->length); - erq->flags |= IW_ENCODE_ENABLED; - - return 0; -} - -static int cfg80211_wext_siwfreq(struct net_device *dev, - struct iw_request_info *info, - struct iw_freq *wextfreq, char *extra) -{ - struct wireless_dev *wdev = dev->ieee80211_ptr; - struct cfg80211_registered_device *rdev = wiphy_to_dev(wdev->wiphy); - int freq, err; - - switch (wdev->iftype) { - case NL80211_IFTYPE_STATION: - return cfg80211_mgd_wext_siwfreq(dev, info, wextfreq, extra); - case NL80211_IFTYPE_ADHOC: - return cfg80211_ibss_wext_siwfreq(dev, info, wextfreq, extra); - case NL80211_IFTYPE_MONITOR: - case NL80211_IFTYPE_WDS: - case NL80211_IFTYPE_MESH_POINT: - freq = cfg80211_wext_freq(wdev->wiphy, wextfreq); - if (freq < 0) - return freq; - if (freq == 0) - return -EINVAL; - mutex_lock(&rdev->devlist_mtx); - wdev_lock(wdev); - err = cfg80211_set_freq(rdev, wdev, freq, NL80211_CHAN_NO_HT); - wdev_unlock(wdev); - mutex_unlock(&rdev->devlist_mtx); - return err; - default: - return -EOPNOTSUPP; - } -} - -static int cfg80211_wext_giwfreq(struct net_device *dev, - struct iw_request_info *info, - struct iw_freq *freq, char *extra) -{ - struct wireless_dev *wdev = dev->ieee80211_ptr; - struct cfg80211_registered_device *rdev = wiphy_to_dev(wdev->wiphy); - struct ieee80211_channel *chan; - - switch (wdev->iftype) { - case NL80211_IFTYPE_STATION: - return cfg80211_mgd_wext_giwfreq(dev, info, freq, extra); - case NL80211_IFTYPE_ADHOC: - return cfg80211_ibss_wext_giwfreq(dev, info, freq, extra); - case NL80211_IFTYPE_MONITOR: - if (!rdev->ops->get_channel) - return -EINVAL; - - chan = rdev->ops->get_channel(wdev->wiphy); - if (!chan) - return -EINVAL; - freq->m = chan->center_freq; - freq->e = 6; - return 0; - default: - if (!wdev->channel) - return -EINVAL; - freq->m = wdev->channel->center_freq; - freq->e = 6; - return 0; - } -} - -static int cfg80211_wext_siwtxpower(struct net_device *dev, - struct iw_request_info *info, - union iwreq_data *data, char *extra) -{ - struct wireless_dev *wdev = dev->ieee80211_ptr; - struct cfg80211_registered_device *rdev = wiphy_to_dev(wdev->wiphy); - enum nl80211_tx_power_setting type; - int dbm = 0; - - if ((data->txpower.flags & IW_TXPOW_TYPE) != IW_TXPOW_DBM) - return -EINVAL; - if (data->txpower.flags & IW_TXPOW_RANGE) - return -EINVAL; - - if (!rdev->ops->set_tx_power) - return -EOPNOTSUPP; - - /* only change when not disabling */ - if (!data->txpower.disabled) { - rfkill_set_sw_state(rdev->rfkill, false); - - if (data->txpower.fixed) { - /* - * wext doesn't support negative values, see - * below where it's for automatic - */ - if (data->txpower.value < 0) - return -EINVAL; - dbm = data->txpower.value; - type = NL80211_TX_POWER_FIXED; - /* TODO: do regulatory check! */ - } else { - /* - * Automatic power level setting, max being the value - * passed in from userland. - */ - if (data->txpower.value < 0) { - type = NL80211_TX_POWER_AUTOMATIC; - } else { - dbm = data->txpower.value; - type = NL80211_TX_POWER_LIMITED; - } - } - } else { - rfkill_set_sw_state(rdev->rfkill, true); - schedule_work(&rdev->rfkill_sync); - return 0; - } - - return rdev->ops->set_tx_power(wdev->wiphy, type, DBM_TO_MBM(dbm)); -} - -static int cfg80211_wext_giwtxpower(struct net_device *dev, - struct iw_request_info *info, - union iwreq_data *data, char *extra) -{ - struct wireless_dev *wdev = dev->ieee80211_ptr; - struct cfg80211_registered_device *rdev = wiphy_to_dev(wdev->wiphy); - int err, val; - - if ((data->txpower.flags & IW_TXPOW_TYPE) != IW_TXPOW_DBM) - return -EINVAL; - if (data->txpower.flags & IW_TXPOW_RANGE) - return -EINVAL; - - if (!rdev->ops->get_tx_power) - return -EOPNOTSUPP; - - err = rdev->ops->get_tx_power(wdev->wiphy, &val); - if (err) - return err; - - /* well... oh well */ - data->txpower.fixed = 1; - data->txpower.disabled = rfkill_blocked(rdev->rfkill); - data->txpower.value = val; - data->txpower.flags = IW_TXPOW_DBM; - - return 0; -} - -static int cfg80211_set_auth_alg(struct wireless_dev *wdev, - s32 auth_alg) -{ - int nr_alg = 0; - - if (!auth_alg) - return -EINVAL; - - if (auth_alg & ~(IW_AUTH_ALG_OPEN_SYSTEM | - IW_AUTH_ALG_SHARED_KEY | - IW_AUTH_ALG_LEAP)) - return -EINVAL; - - if (auth_alg & IW_AUTH_ALG_OPEN_SYSTEM) { - nr_alg++; - wdev->wext.connect.auth_type = NL80211_AUTHTYPE_OPEN_SYSTEM; - } - - if (auth_alg & IW_AUTH_ALG_SHARED_KEY) { - nr_alg++; - wdev->wext.connect.auth_type = NL80211_AUTHTYPE_SHARED_KEY; - } - - if (auth_alg & IW_AUTH_ALG_LEAP) { - nr_alg++; - wdev->wext.connect.auth_type = NL80211_AUTHTYPE_NETWORK_EAP; - } - - if (nr_alg > 1) - wdev->wext.connect.auth_type = NL80211_AUTHTYPE_AUTOMATIC; - - return 0; -} - -static int cfg80211_set_wpa_version(struct wireless_dev *wdev, u32 wpa_versions) -{ - if (wpa_versions & ~(IW_AUTH_WPA_VERSION_WPA | - IW_AUTH_WPA_VERSION_WPA2| - IW_AUTH_WPA_VERSION_DISABLED)) - return -EINVAL; - - if ((wpa_versions & IW_AUTH_WPA_VERSION_DISABLED) && - (wpa_versions & (IW_AUTH_WPA_VERSION_WPA| - IW_AUTH_WPA_VERSION_WPA2))) - return -EINVAL; - - if (wpa_versions & IW_AUTH_WPA_VERSION_DISABLED) - wdev->wext.connect.crypto.wpa_versions &= - ~(NL80211_WPA_VERSION_1|NL80211_WPA_VERSION_2); - - if (wpa_versions & IW_AUTH_WPA_VERSION_WPA) - wdev->wext.connect.crypto.wpa_versions |= - NL80211_WPA_VERSION_1; - - if (wpa_versions & IW_AUTH_WPA_VERSION_WPA2) - wdev->wext.connect.crypto.wpa_versions |= - NL80211_WPA_VERSION_2; - - return 0; -} - -static int cfg80211_set_cipher_group(struct wireless_dev *wdev, u32 cipher) -{ - if (cipher & IW_AUTH_CIPHER_WEP40) - wdev->wext.connect.crypto.cipher_group = - WLAN_CIPHER_SUITE_WEP40; - else if (cipher & IW_AUTH_CIPHER_WEP104) - wdev->wext.connect.crypto.cipher_group = - WLAN_CIPHER_SUITE_WEP104; - else if (cipher & IW_AUTH_CIPHER_TKIP) - wdev->wext.connect.crypto.cipher_group = - WLAN_CIPHER_SUITE_TKIP; - else if (cipher & IW_AUTH_CIPHER_CCMP) - wdev->wext.connect.crypto.cipher_group = - WLAN_CIPHER_SUITE_CCMP; - else if (cipher & IW_AUTH_CIPHER_AES_CMAC) - wdev->wext.connect.crypto.cipher_group = - WLAN_CIPHER_SUITE_AES_CMAC; - else if (cipher & IW_AUTH_CIPHER_NONE) - wdev->wext.connect.crypto.cipher_group = 0; - else - return -EINVAL; - - return 0; -} - -static int cfg80211_set_cipher_pairwise(struct wireless_dev *wdev, u32 cipher) -{ - int nr_ciphers = 0; - u32 *ciphers_pairwise = wdev->wext.connect.crypto.ciphers_pairwise; - - if (cipher & IW_AUTH_CIPHER_WEP40) { - ciphers_pairwise[nr_ciphers] = WLAN_CIPHER_SUITE_WEP40; - nr_ciphers++; - } - - if (cipher & IW_AUTH_CIPHER_WEP104) { - ciphers_pairwise[nr_ciphers] = WLAN_CIPHER_SUITE_WEP104; - nr_ciphers++; - } - - if (cipher & IW_AUTH_CIPHER_TKIP) { - ciphers_pairwise[nr_ciphers] = WLAN_CIPHER_SUITE_TKIP; - nr_ciphers++; - } - - if (cipher & IW_AUTH_CIPHER_CCMP) { - ciphers_pairwise[nr_ciphers] = WLAN_CIPHER_SUITE_CCMP; - nr_ciphers++; - } - - if (cipher & IW_AUTH_CIPHER_AES_CMAC) { - ciphers_pairwise[nr_ciphers] = WLAN_CIPHER_SUITE_AES_CMAC; - nr_ciphers++; - } - - BUILD_BUG_ON(NL80211_MAX_NR_CIPHER_SUITES < 5); - - wdev->wext.connect.crypto.n_ciphers_pairwise = nr_ciphers; - - return 0; -} - - -static int cfg80211_set_key_mgt(struct wireless_dev *wdev, u32 key_mgt) -{ - int nr_akm_suites = 0; - - if (key_mgt & ~(IW_AUTH_KEY_MGMT_802_1X | - IW_AUTH_KEY_MGMT_PSK)) - return -EINVAL; - - if (key_mgt & IW_AUTH_KEY_MGMT_802_1X) { - wdev->wext.connect.crypto.akm_suites[nr_akm_suites] = - WLAN_AKM_SUITE_8021X; - nr_akm_suites++; - } - - if (key_mgt & IW_AUTH_KEY_MGMT_PSK) { - wdev->wext.connect.crypto.akm_suites[nr_akm_suites] = - WLAN_AKM_SUITE_PSK; - nr_akm_suites++; - } - - wdev->wext.connect.crypto.n_akm_suites = nr_akm_suites; - - return 0; -} - -static int cfg80211_wext_siwauth(struct net_device *dev, - struct iw_request_info *info, - struct iw_param *data, char *extra) -{ - struct wireless_dev *wdev = dev->ieee80211_ptr; - - if (wdev->iftype != NL80211_IFTYPE_STATION) - return -EOPNOTSUPP; - - switch (data->flags & IW_AUTH_INDEX) { - case IW_AUTH_PRIVACY_INVOKED: - wdev->wext.connect.privacy = data->value; - return 0; - case IW_AUTH_WPA_VERSION: - return cfg80211_set_wpa_version(wdev, data->value); - case IW_AUTH_CIPHER_GROUP: - return cfg80211_set_cipher_group(wdev, data->value); - case IW_AUTH_KEY_MGMT: - return cfg80211_set_key_mgt(wdev, data->value); - case IW_AUTH_CIPHER_PAIRWISE: - return cfg80211_set_cipher_pairwise(wdev, data->value); - case IW_AUTH_80211_AUTH_ALG: - return cfg80211_set_auth_alg(wdev, data->value); - case IW_AUTH_WPA_ENABLED: - case IW_AUTH_RX_UNENCRYPTED_EAPOL: - case IW_AUTH_DROP_UNENCRYPTED: - case IW_AUTH_MFP: - return 0; - default: - return -EOPNOTSUPP; - } -} - -static int cfg80211_wext_giwauth(struct net_device *dev, - struct iw_request_info *info, - struct iw_param *data, char *extra) -{ - /* XXX: what do we need? */ - - return -EOPNOTSUPP; -} - -static int cfg80211_wext_siwpower(struct net_device *dev, - struct iw_request_info *info, - struct iw_param *wrq, char *extra) -{ - struct wireless_dev *wdev = dev->ieee80211_ptr; - struct cfg80211_registered_device *rdev = wiphy_to_dev(wdev->wiphy); - bool ps = wdev->ps; - int timeout = wdev->ps_timeout; - int err; - - if (wdev->iftype != NL80211_IFTYPE_STATION) - return -EINVAL; - - if (!rdev->ops->set_power_mgmt) - return -EOPNOTSUPP; - - if (wrq->disabled) { - ps = false; - } else { - switch (wrq->flags & IW_POWER_MODE) { - case IW_POWER_ON: /* If not specified */ - case IW_POWER_MODE: /* If set all mask */ - case IW_POWER_ALL_R: /* If explicitely state all */ - ps = true; - break; - default: /* Otherwise we ignore */ - return -EINVAL; - } - - if (wrq->flags & ~(IW_POWER_MODE | IW_POWER_TIMEOUT)) - return -EINVAL; - - if (wrq->flags & IW_POWER_TIMEOUT) - timeout = wrq->value / 1000; - } - - err = rdev->ops->set_power_mgmt(wdev->wiphy, dev, ps, timeout); - if (err) - return err; - - wdev->ps = ps; - wdev->ps_timeout = timeout; - - return 0; - -} - -static int cfg80211_wext_giwpower(struct net_device *dev, - struct iw_request_info *info, - struct iw_param *wrq, char *extra) -{ - struct wireless_dev *wdev = dev->ieee80211_ptr; - - wrq->disabled = !wdev->ps; - - return 0; -} - -static int cfg80211_wds_wext_siwap(struct net_device *dev, - struct iw_request_info *info, - struct sockaddr *addr, char *extra) -{ - struct wireless_dev *wdev = dev->ieee80211_ptr; - struct cfg80211_registered_device *rdev = wiphy_to_dev(wdev->wiphy); - int err; - - if (WARN_ON(wdev->iftype != NL80211_IFTYPE_WDS)) - return -EINVAL; - - if (addr->sa_family != ARPHRD_ETHER) - return -EINVAL; - - if (netif_running(dev)) - return -EBUSY; - - if (!rdev->ops->set_wds_peer) - return -EOPNOTSUPP; - - err = rdev->ops->set_wds_peer(wdev->wiphy, dev, (u8 *) &addr->sa_data); - if (err) - return err; - - memcpy(&wdev->wext.bssid, (u8 *) &addr->sa_data, ETH_ALEN); - - return 0; -} - -static int cfg80211_wds_wext_giwap(struct net_device *dev, - struct iw_request_info *info, - struct sockaddr *addr, char *extra) -{ - struct wireless_dev *wdev = dev->ieee80211_ptr; - - if (WARN_ON(wdev->iftype != NL80211_IFTYPE_WDS)) - return -EINVAL; - - addr->sa_family = ARPHRD_ETHER; - memcpy(&addr->sa_data, wdev->wext.bssid, ETH_ALEN); - - return 0; -} - -static int cfg80211_wext_siwrate(struct net_device *dev, - struct iw_request_info *info, - struct iw_param *rate, char *extra) -{ - struct wireless_dev *wdev = dev->ieee80211_ptr; - struct cfg80211_registered_device *rdev = wiphy_to_dev(wdev->wiphy); - struct cfg80211_bitrate_mask mask; - u32 fixed, maxrate; - struct ieee80211_supported_band *sband; - int band, ridx; - bool match = false; - - if (!rdev->ops->set_bitrate_mask) - return -EOPNOTSUPP; - - memset(&mask, 0, sizeof(mask)); - fixed = 0; - maxrate = (u32)-1; - - if (rate->value < 0) { - /* nothing */ - } else if (rate->fixed) { - fixed = rate->value / 100000; - } else { - maxrate = rate->value / 100000; - } - - for (band = 0; band < IEEE80211_NUM_BANDS; band++) { - sband = wdev->wiphy->bands[band]; - if (sband == NULL) - continue; - for (ridx = 0; ridx < sband->n_bitrates; ridx++) { - struct ieee80211_rate *srate = &sband->bitrates[ridx]; - if (fixed == srate->bitrate) { - mask.control[band].legacy = 1 << ridx; - match = true; - break; - } - if (srate->bitrate <= maxrate) { - mask.control[band].legacy |= 1 << ridx; - match = true; - } - } - } - - if (!match) - return -EINVAL; - - return rdev->ops->set_bitrate_mask(wdev->wiphy, dev, NULL, &mask); -} - -static int cfg80211_wext_giwrate(struct net_device *dev, - struct iw_request_info *info, - struct iw_param *rate, char *extra) -{ - struct wireless_dev *wdev = dev->ieee80211_ptr; - struct cfg80211_registered_device *rdev = wiphy_to_dev(wdev->wiphy); - /* we are under RTNL - globally locked - so can use a static struct */ - static struct station_info sinfo; - u8 addr[ETH_ALEN]; - int err; - - if (wdev->iftype != NL80211_IFTYPE_STATION) - return -EOPNOTSUPP; - - if (!rdev->ops->get_station) - return -EOPNOTSUPP; - - err = 0; - wdev_lock(wdev); - if (wdev->current_bss) - memcpy(addr, wdev->current_bss->pub.bssid, ETH_ALEN); - else - err = -EOPNOTSUPP; - wdev_unlock(wdev); - if (err) - return err; - - err = rdev->ops->get_station(&rdev->wiphy, dev, addr, &sinfo); - if (err) - return err; - - if (!(sinfo.filled & STATION_INFO_TX_BITRATE)) - return -EOPNOTSUPP; - - rate->value = 100000 * cfg80211_calculate_bitrate(&sinfo.txrate); - - return 0; -} - -/* Get wireless statistics. Called by /proc/net/wireless and by SIOCGIWSTATS */ -static struct iw_statistics *cfg80211_wireless_stats(struct net_device *dev) -{ - struct wireless_dev *wdev = dev->ieee80211_ptr; - struct cfg80211_registered_device *rdev = wiphy_to_dev(wdev->wiphy); - /* we are under RTNL - globally locked - so can use static structs */ - static struct iw_statistics wstats; - static struct station_info sinfo; - u8 bssid[ETH_ALEN]; - - if (dev->ieee80211_ptr->iftype != NL80211_IFTYPE_STATION) - return NULL; - - if (!rdev->ops->get_station) - return NULL; - - /* Grab BSSID of current BSS, if any */ - wdev_lock(wdev); - if (!wdev->current_bss) { - wdev_unlock(wdev); - return NULL; - } - memcpy(bssid, wdev->current_bss->pub.bssid, ETH_ALEN); - wdev_unlock(wdev); - - if (rdev->ops->get_station(&rdev->wiphy, dev, bssid, &sinfo)) - return NULL; - - memset(&wstats, 0, sizeof(wstats)); - - switch (rdev->wiphy.signal_type) { - case CFG80211_SIGNAL_TYPE_MBM: - if (sinfo.filled & STATION_INFO_SIGNAL) { - int sig = sinfo.signal; - wstats.qual.updated |= IW_QUAL_LEVEL_UPDATED; - wstats.qual.updated |= IW_QUAL_QUAL_UPDATED; - wstats.qual.updated |= IW_QUAL_DBM; - wstats.qual.level = sig; - if (sig < -110) - sig = -110; - else if (sig > -40) - sig = -40; - wstats.qual.qual = sig + 110; - break; - } - case CFG80211_SIGNAL_TYPE_UNSPEC: - if (sinfo.filled & STATION_INFO_SIGNAL) { - wstats.qual.updated |= IW_QUAL_LEVEL_UPDATED; - wstats.qual.updated |= IW_QUAL_QUAL_UPDATED; - wstats.qual.level = sinfo.signal; - wstats.qual.qual = sinfo.signal; - break; - } - default: - wstats.qual.updated |= IW_QUAL_LEVEL_INVALID; - wstats.qual.updated |= IW_QUAL_QUAL_INVALID; - } - - wstats.qual.updated |= IW_QUAL_NOISE_INVALID; - if (sinfo.filled & STATION_INFO_RX_DROP_MISC) - wstats.discard.misc = sinfo.rx_dropped_misc; - if (sinfo.filled & STATION_INFO_TX_FAILED) - wstats.discard.retries = sinfo.tx_failed; - - return &wstats; -} - -static int cfg80211_wext_siwap(struct net_device *dev, - struct iw_request_info *info, - struct sockaddr *ap_addr, char *extra) -{ - struct wireless_dev *wdev = dev->ieee80211_ptr; - - switch (wdev->iftype) { - case NL80211_IFTYPE_ADHOC: - return cfg80211_ibss_wext_siwap(dev, info, ap_addr, extra); - case NL80211_IFTYPE_STATION: - return cfg80211_mgd_wext_siwap(dev, info, ap_addr, extra); - case NL80211_IFTYPE_WDS: - return cfg80211_wds_wext_siwap(dev, info, ap_addr, extra); - default: - return -EOPNOTSUPP; - } -} - -static int cfg80211_wext_giwap(struct net_device *dev, - struct iw_request_info *info, - struct sockaddr *ap_addr, char *extra) -{ - struct wireless_dev *wdev = dev->ieee80211_ptr; - - switch (wdev->iftype) { - case NL80211_IFTYPE_ADHOC: - return cfg80211_ibss_wext_giwap(dev, info, ap_addr, extra); - case NL80211_IFTYPE_STATION: - return cfg80211_mgd_wext_giwap(dev, info, ap_addr, extra); - case NL80211_IFTYPE_WDS: - return cfg80211_wds_wext_giwap(dev, info, ap_addr, extra); - default: - return -EOPNOTSUPP; - } -} - -static int cfg80211_wext_siwessid(struct net_device *dev, - struct iw_request_info *info, - struct iw_point *data, char *ssid) -{ - struct wireless_dev *wdev = dev->ieee80211_ptr; - - switch (wdev->iftype) { - case NL80211_IFTYPE_ADHOC: - return cfg80211_ibss_wext_siwessid(dev, info, data, ssid); - case NL80211_IFTYPE_STATION: - return cfg80211_mgd_wext_siwessid(dev, info, data, ssid); - default: - return -EOPNOTSUPP; - } -} - -static int cfg80211_wext_giwessid(struct net_device *dev, - struct iw_request_info *info, - struct iw_point *data, char *ssid) -{ - struct wireless_dev *wdev = dev->ieee80211_ptr; - - data->flags = 0; - data->length = 0; - - switch (wdev->iftype) { - case NL80211_IFTYPE_ADHOC: - return cfg80211_ibss_wext_giwessid(dev, info, data, ssid); - case NL80211_IFTYPE_STATION: - return cfg80211_mgd_wext_giwessid(dev, info, data, ssid); - default: - return -EOPNOTSUPP; - } -} - -static int cfg80211_wext_siwpmksa(struct net_device *dev, - struct iw_request_info *info, - struct iw_point *data, char *extra) -{ - struct wireless_dev *wdev = dev->ieee80211_ptr; - struct cfg80211_registered_device *rdev = wiphy_to_dev(wdev->wiphy); - struct cfg80211_pmksa cfg_pmksa; - struct iw_pmksa *pmksa = (struct iw_pmksa *)extra; - - memset(&cfg_pmksa, 0, sizeof(struct cfg80211_pmksa)); - - if (wdev->iftype != NL80211_IFTYPE_STATION) - return -EINVAL; - - cfg_pmksa.bssid = pmksa->bssid.sa_data; - cfg_pmksa.pmkid = pmksa->pmkid; - - switch (pmksa->cmd) { - case IW_PMKSA_ADD: - if (!rdev->ops->set_pmksa) - return -EOPNOTSUPP; - - return rdev->ops->set_pmksa(&rdev->wiphy, dev, &cfg_pmksa); - - case IW_PMKSA_REMOVE: - if (!rdev->ops->del_pmksa) - return -EOPNOTSUPP; - - return rdev->ops->del_pmksa(&rdev->wiphy, dev, &cfg_pmksa); - - case IW_PMKSA_FLUSH: - if (!rdev->ops->flush_pmksa) - return -EOPNOTSUPP; - - return rdev->ops->flush_pmksa(&rdev->wiphy, dev); - - default: - return -EOPNOTSUPP; - } -} - -static const iw_handler cfg80211_handlers[] = { - [IW_IOCTL_IDX(SIOCGIWNAME)] = (iw_handler) cfg80211_wext_giwname, - [IW_IOCTL_IDX(SIOCSIWFREQ)] = (iw_handler) cfg80211_wext_siwfreq, - [IW_IOCTL_IDX(SIOCGIWFREQ)] = (iw_handler) cfg80211_wext_giwfreq, - [IW_IOCTL_IDX(SIOCSIWMODE)] = (iw_handler) cfg80211_wext_siwmode, - [IW_IOCTL_IDX(SIOCGIWMODE)] = (iw_handler) cfg80211_wext_giwmode, - [IW_IOCTL_IDX(SIOCGIWRANGE)] = (iw_handler) cfg80211_wext_giwrange, - [IW_IOCTL_IDX(SIOCSIWAP)] = (iw_handler) cfg80211_wext_siwap, - [IW_IOCTL_IDX(SIOCGIWAP)] = (iw_handler) cfg80211_wext_giwap, - [IW_IOCTL_IDX(SIOCSIWMLME)] = (iw_handler) cfg80211_wext_siwmlme, - [IW_IOCTL_IDX(SIOCSIWSCAN)] = (iw_handler) cfg80211_wext_siwscan, - [IW_IOCTL_IDX(SIOCGIWSCAN)] = (iw_handler) cfg80211_wext_giwscan, - [IW_IOCTL_IDX(SIOCSIWESSID)] = (iw_handler) cfg80211_wext_siwessid, - [IW_IOCTL_IDX(SIOCGIWESSID)] = (iw_handler) cfg80211_wext_giwessid, - [IW_IOCTL_IDX(SIOCSIWRATE)] = (iw_handler) cfg80211_wext_siwrate, - [IW_IOCTL_IDX(SIOCGIWRATE)] = (iw_handler) cfg80211_wext_giwrate, - [IW_IOCTL_IDX(SIOCSIWRTS)] = (iw_handler) cfg80211_wext_siwrts, - [IW_IOCTL_IDX(SIOCGIWRTS)] = (iw_handler) cfg80211_wext_giwrts, - [IW_IOCTL_IDX(SIOCSIWFRAG)] = (iw_handler) cfg80211_wext_siwfrag, - [IW_IOCTL_IDX(SIOCGIWFRAG)] = (iw_handler) cfg80211_wext_giwfrag, - [IW_IOCTL_IDX(SIOCSIWTXPOW)] = (iw_handler) cfg80211_wext_siwtxpower, - [IW_IOCTL_IDX(SIOCGIWTXPOW)] = (iw_handler) cfg80211_wext_giwtxpower, - [IW_IOCTL_IDX(SIOCSIWRETRY)] = (iw_handler) cfg80211_wext_siwretry, - [IW_IOCTL_IDX(SIOCGIWRETRY)] = (iw_handler) cfg80211_wext_giwretry, - [IW_IOCTL_IDX(SIOCSIWENCODE)] = (iw_handler) cfg80211_wext_siwencode, - [IW_IOCTL_IDX(SIOCGIWENCODE)] = (iw_handler) cfg80211_wext_giwencode, - [IW_IOCTL_IDX(SIOCSIWPOWER)] = (iw_handler) cfg80211_wext_siwpower, - [IW_IOCTL_IDX(SIOCGIWPOWER)] = (iw_handler) cfg80211_wext_giwpower, - [IW_IOCTL_IDX(SIOCSIWGENIE)] = (iw_handler) cfg80211_wext_siwgenie, - [IW_IOCTL_IDX(SIOCSIWAUTH)] = (iw_handler) cfg80211_wext_siwauth, - [IW_IOCTL_IDX(SIOCGIWAUTH)] = (iw_handler) cfg80211_wext_giwauth, - [IW_IOCTL_IDX(SIOCSIWENCODEEXT)]= (iw_handler) cfg80211_wext_siwencodeext, - [IW_IOCTL_IDX(SIOCSIWPMKSA)] = (iw_handler) cfg80211_wext_siwpmksa, -}; - -const struct iw_handler_def cfg80211_wext_handler = { - .num_standard = ARRAY_SIZE(cfg80211_handlers), - .standard = cfg80211_handlers, - .get_wireless_stats = cfg80211_wireless_stats, -}; diff --git a/openairITS/mac/DOT11/net/wireless/wext-compat.h b/openairITS/mac/DOT11/net/wireless/wext-compat.h deleted file mode 100644 index 5d766b0118..0000000000 --- a/openairITS/mac/DOT11/net/wireless/wext-compat.h +++ /dev/null @@ -1,57 +0,0 @@ -#ifndef __WEXT_COMPAT -#define __WEXT_COMPAT - -#include -#include - -int cfg80211_ibss_wext_siwfreq(struct net_device *dev, - struct iw_request_info *info, - struct iw_freq *freq, char *extra); -int cfg80211_ibss_wext_giwfreq(struct net_device *dev, - struct iw_request_info *info, - struct iw_freq *freq, char *extra); -int cfg80211_ibss_wext_siwap(struct net_device *dev, - struct iw_request_info *info, - struct sockaddr *ap_addr, char *extra); -int cfg80211_ibss_wext_giwap(struct net_device *dev, - struct iw_request_info *info, - struct sockaddr *ap_addr, char *extra); -int cfg80211_ibss_wext_siwessid(struct net_device *dev, - struct iw_request_info *info, - struct iw_point *data, char *ssid); -int cfg80211_ibss_wext_giwessid(struct net_device *dev, - struct iw_request_info *info, - struct iw_point *data, char *ssid); - -int cfg80211_mgd_wext_siwfreq(struct net_device *dev, - struct iw_request_info *info, - struct iw_freq *freq, char *extra); -int cfg80211_mgd_wext_giwfreq(struct net_device *dev, - struct iw_request_info *info, - struct iw_freq *freq, char *extra); -int cfg80211_mgd_wext_siwap(struct net_device *dev, - struct iw_request_info *info, - struct sockaddr *ap_addr, char *extra); -int cfg80211_mgd_wext_giwap(struct net_device *dev, - struct iw_request_info *info, - struct sockaddr *ap_addr, char *extra); -int cfg80211_mgd_wext_siwessid(struct net_device *dev, - struct iw_request_info *info, - struct iw_point *data, char *ssid); -int cfg80211_mgd_wext_giwessid(struct net_device *dev, - struct iw_request_info *info, - struct iw_point *data, char *ssid); - -int cfg80211_wext_siwmlme(struct net_device *dev, - struct iw_request_info *info, - struct iw_point *data, char *extra); -int cfg80211_wext_siwgenie(struct net_device *dev, - struct iw_request_info *info, - struct iw_point *data, char *extra); - - -int cfg80211_wext_freq(struct wiphy *wiphy, struct iw_freq *freq); - - -extern const struct iw_handler_def cfg80211_wext_handler; -#endif /* __WEXT_COMPAT */ diff --git a/openairITS/mac/DOT11/net/wireless/wext-core.c b/openairITS/mac/DOT11/net/wireless/wext-core.c deleted file mode 100644 index 85a6ff0219..0000000000 --- a/openairITS/mac/DOT11/net/wireless/wext-core.c +++ /dev/null @@ -1,1125 +0,0 @@ -/* - * This file implement the Wireless Extensions core API. - * - * Authors : Jean Tourrilhes - HPL - - * Copyright (c) 1997-2007 Jean Tourrilhes, All Rights Reserved. - * Copyright 2009 Johannes Berg - * - * (As all part of the Linux kernel, this file is GPL) - */ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -typedef int (*wext_ioctl_func)(struct net_device *, struct iwreq *, - unsigned int, struct iw_request_info *, - iw_handler); - - -/* - * Meta-data about all the standard Wireless Extension request we - * know about. - */ -static const struct iw_ioctl_description standard_ioctl[] = { - [IW_IOCTL_IDX(SIOCSIWCOMMIT)] = { - .header_type = IW_HEADER_TYPE_NULL, - }, - [IW_IOCTL_IDX(SIOCGIWNAME)] = { - .header_type = IW_HEADER_TYPE_CHAR, - .flags = IW_DESCR_FLAG_DUMP, - }, - [IW_IOCTL_IDX(SIOCSIWNWID)] = { - .header_type = IW_HEADER_TYPE_PARAM, - .flags = IW_DESCR_FLAG_EVENT, - }, - [IW_IOCTL_IDX(SIOCGIWNWID)] = { - .header_type = IW_HEADER_TYPE_PARAM, - .flags = IW_DESCR_FLAG_DUMP, - }, - [IW_IOCTL_IDX(SIOCSIWFREQ)] = { - .header_type = IW_HEADER_TYPE_FREQ, - .flags = IW_DESCR_FLAG_EVENT, - }, - [IW_IOCTL_IDX(SIOCGIWFREQ)] = { - .header_type = IW_HEADER_TYPE_FREQ, - .flags = IW_DESCR_FLAG_DUMP, - }, - [IW_IOCTL_IDX(SIOCSIWMODE)] = { - .header_type = IW_HEADER_TYPE_UINT, - .flags = IW_DESCR_FLAG_EVENT, - }, - [IW_IOCTL_IDX(SIOCGIWMODE)] = { - .header_type = IW_HEADER_TYPE_UINT, - .flags = IW_DESCR_FLAG_DUMP, - }, - [IW_IOCTL_IDX(SIOCSIWSENS)] = { - .header_type = IW_HEADER_TYPE_PARAM, - }, - [IW_IOCTL_IDX(SIOCGIWSENS)] = { - .header_type = IW_HEADER_TYPE_PARAM, - }, - [IW_IOCTL_IDX(SIOCSIWRANGE)] = { - .header_type = IW_HEADER_TYPE_NULL, - }, - [IW_IOCTL_IDX(SIOCGIWRANGE)] = { - .header_type = IW_HEADER_TYPE_POINT, - .token_size = 1, - .max_tokens = sizeof(struct iw_range), - .flags = IW_DESCR_FLAG_DUMP, - }, - [IW_IOCTL_IDX(SIOCSIWPRIV)] = { - .header_type = IW_HEADER_TYPE_NULL, - }, - [IW_IOCTL_IDX(SIOCGIWPRIV)] = { /* (handled directly by us) */ - .header_type = IW_HEADER_TYPE_POINT, - .token_size = sizeof(struct iw_priv_args), - .max_tokens = 16, - .flags = IW_DESCR_FLAG_NOMAX, - }, - [IW_IOCTL_IDX(SIOCSIWSTATS)] = { - .header_type = IW_HEADER_TYPE_NULL, - }, - [IW_IOCTL_IDX(SIOCGIWSTATS)] = { /* (handled directly by us) */ - .header_type = IW_HEADER_TYPE_POINT, - .token_size = 1, - .max_tokens = sizeof(struct iw_statistics), - .flags = IW_DESCR_FLAG_DUMP, - }, - [IW_IOCTL_IDX(SIOCSIWSPY)] = { - .header_type = IW_HEADER_TYPE_POINT, - .token_size = sizeof(struct sockaddr), - .max_tokens = IW_MAX_SPY, - }, - [IW_IOCTL_IDX(SIOCGIWSPY)] = { - .header_type = IW_HEADER_TYPE_POINT, - .token_size = sizeof(struct sockaddr) + - sizeof(struct iw_quality), - .max_tokens = IW_MAX_SPY, - }, - [IW_IOCTL_IDX(SIOCSIWTHRSPY)] = { - .header_type = IW_HEADER_TYPE_POINT, - .token_size = sizeof(struct iw_thrspy), - .min_tokens = 1, - .max_tokens = 1, - }, - [IW_IOCTL_IDX(SIOCGIWTHRSPY)] = { - .header_type = IW_HEADER_TYPE_POINT, - .token_size = sizeof(struct iw_thrspy), - .min_tokens = 1, - .max_tokens = 1, - }, - [IW_IOCTL_IDX(SIOCSIWAP)] = { - .header_type = IW_HEADER_TYPE_ADDR, - }, - [IW_IOCTL_IDX(SIOCGIWAP)] = { - .header_type = IW_HEADER_TYPE_ADDR, - .flags = IW_DESCR_FLAG_DUMP, - }, - [IW_IOCTL_IDX(SIOCSIWMLME)] = { - .header_type = IW_HEADER_TYPE_POINT, - .token_size = 1, - .min_tokens = sizeof(struct iw_mlme), - .max_tokens = sizeof(struct iw_mlme), - }, - [IW_IOCTL_IDX(SIOCGIWAPLIST)] = { - .header_type = IW_HEADER_TYPE_POINT, - .token_size = sizeof(struct sockaddr) + - sizeof(struct iw_quality), - .max_tokens = IW_MAX_AP, - .flags = IW_DESCR_FLAG_NOMAX, - }, - [IW_IOCTL_IDX(SIOCSIWSCAN)] = { - .header_type = IW_HEADER_TYPE_POINT, - .token_size = 1, - .min_tokens = 0, - .max_tokens = sizeof(struct iw_scan_req), - }, - [IW_IOCTL_IDX(SIOCGIWSCAN)] = { - .header_type = IW_HEADER_TYPE_POINT, - .token_size = 1, - .max_tokens = IW_SCAN_MAX_DATA, - .flags = IW_DESCR_FLAG_NOMAX, - }, - [IW_IOCTL_IDX(SIOCSIWESSID)] = { - .header_type = IW_HEADER_TYPE_POINT, - .token_size = 1, - .max_tokens = IW_ESSID_MAX_SIZE, - .flags = IW_DESCR_FLAG_EVENT, - }, - [IW_IOCTL_IDX(SIOCGIWESSID)] = { - .header_type = IW_HEADER_TYPE_POINT, - .token_size = 1, - .max_tokens = IW_ESSID_MAX_SIZE, - .flags = IW_DESCR_FLAG_DUMP, - }, - [IW_IOCTL_IDX(SIOCSIWNICKN)] = { - .header_type = IW_HEADER_TYPE_POINT, - .token_size = 1, - .max_tokens = IW_ESSID_MAX_SIZE, - }, - [IW_IOCTL_IDX(SIOCGIWNICKN)] = { - .header_type = IW_HEADER_TYPE_POINT, - .token_size = 1, - .max_tokens = IW_ESSID_MAX_SIZE, - }, - [IW_IOCTL_IDX(SIOCSIWRATE)] = { - .header_type = IW_HEADER_TYPE_PARAM, - }, - [IW_IOCTL_IDX(SIOCGIWRATE)] = { - .header_type = IW_HEADER_TYPE_PARAM, - }, - [IW_IOCTL_IDX(SIOCSIWRTS)] = { - .header_type = IW_HEADER_TYPE_PARAM, - }, - [IW_IOCTL_IDX(SIOCGIWRTS)] = { - .header_type = IW_HEADER_TYPE_PARAM, - }, - [IW_IOCTL_IDX(SIOCSIWFRAG)] = { - .header_type = IW_HEADER_TYPE_PARAM, - }, - [IW_IOCTL_IDX(SIOCGIWFRAG)] = { - .header_type = IW_HEADER_TYPE_PARAM, - }, - [IW_IOCTL_IDX(SIOCSIWTXPOW)] = { - .header_type = IW_HEADER_TYPE_PARAM, - }, - [IW_IOCTL_IDX(SIOCGIWTXPOW)] = { - .header_type = IW_HEADER_TYPE_PARAM, - }, - [IW_IOCTL_IDX(SIOCSIWRETRY)] = { - .header_type = IW_HEADER_TYPE_PARAM, - }, - [IW_IOCTL_IDX(SIOCGIWRETRY)] = { - .header_type = IW_HEADER_TYPE_PARAM, - }, - [IW_IOCTL_IDX(SIOCSIWENCODE)] = { - .header_type = IW_HEADER_TYPE_POINT, - .token_size = 1, - .max_tokens = IW_ENCODING_TOKEN_MAX, - .flags = IW_DESCR_FLAG_EVENT | IW_DESCR_FLAG_RESTRICT, - }, - [IW_IOCTL_IDX(SIOCGIWENCODE)] = { - .header_type = IW_HEADER_TYPE_POINT, - .token_size = 1, - .max_tokens = IW_ENCODING_TOKEN_MAX, - .flags = IW_DESCR_FLAG_DUMP | IW_DESCR_FLAG_RESTRICT, - }, - [IW_IOCTL_IDX(SIOCSIWPOWER)] = { - .header_type = IW_HEADER_TYPE_PARAM, - }, - [IW_IOCTL_IDX(SIOCGIWPOWER)] = { - .header_type = IW_HEADER_TYPE_PARAM, - }, - [IW_IOCTL_IDX(SIOCSIWGENIE)] = { - .header_type = IW_HEADER_TYPE_POINT, - .token_size = 1, - .max_tokens = IW_GENERIC_IE_MAX, - }, - [IW_IOCTL_IDX(SIOCGIWGENIE)] = { - .header_type = IW_HEADER_TYPE_POINT, - .token_size = 1, - .max_tokens = IW_GENERIC_IE_MAX, - }, - [IW_IOCTL_IDX(SIOCSIWAUTH)] = { - .header_type = IW_HEADER_TYPE_PARAM, - }, - [IW_IOCTL_IDX(SIOCGIWAUTH)] = { - .header_type = IW_HEADER_TYPE_PARAM, - }, - [IW_IOCTL_IDX(SIOCSIWENCODEEXT)] = { - .header_type = IW_HEADER_TYPE_POINT, - .token_size = 1, - .min_tokens = sizeof(struct iw_encode_ext), - .max_tokens = sizeof(struct iw_encode_ext) + - IW_ENCODING_TOKEN_MAX, - }, - [IW_IOCTL_IDX(SIOCGIWENCODEEXT)] = { - .header_type = IW_HEADER_TYPE_POINT, - .token_size = 1, - .min_tokens = sizeof(struct iw_encode_ext), - .max_tokens = sizeof(struct iw_encode_ext) + - IW_ENCODING_TOKEN_MAX, - }, - [IW_IOCTL_IDX(SIOCSIWPMKSA)] = { - .header_type = IW_HEADER_TYPE_POINT, - .token_size = 1, - .min_tokens = sizeof(struct iw_pmksa), - .max_tokens = sizeof(struct iw_pmksa), - }, -}; -static const unsigned standard_ioctl_num = ARRAY_SIZE(standard_ioctl); - -/* - * Meta-data about all the additional standard Wireless Extension events - * we know about. - */ -static const struct iw_ioctl_description standard_event[] = { - [IW_EVENT_IDX(IWEVTXDROP)] = { - .header_type = IW_HEADER_TYPE_ADDR, - }, - [IW_EVENT_IDX(IWEVQUAL)] = { - .header_type = IW_HEADER_TYPE_QUAL, - }, - [IW_EVENT_IDX(IWEVCUSTOM)] = { - .header_type = IW_HEADER_TYPE_POINT, - .token_size = 1, - .max_tokens = IW_CUSTOM_MAX, - }, - [IW_EVENT_IDX(IWEVREGISTERED)] = { - .header_type = IW_HEADER_TYPE_ADDR, - }, - [IW_EVENT_IDX(IWEVEXPIRED)] = { - .header_type = IW_HEADER_TYPE_ADDR, - }, - [IW_EVENT_IDX(IWEVGENIE)] = { - .header_type = IW_HEADER_TYPE_POINT, - .token_size = 1, - .max_tokens = IW_GENERIC_IE_MAX, - }, - [IW_EVENT_IDX(IWEVMICHAELMICFAILURE)] = { - .header_type = IW_HEADER_TYPE_POINT, - .token_size = 1, - .max_tokens = sizeof(struct iw_michaelmicfailure), - }, - [IW_EVENT_IDX(IWEVASSOCREQIE)] = { - .header_type = IW_HEADER_TYPE_POINT, - .token_size = 1, - .max_tokens = IW_GENERIC_IE_MAX, - }, - [IW_EVENT_IDX(IWEVASSOCRESPIE)] = { - .header_type = IW_HEADER_TYPE_POINT, - .token_size = 1, - .max_tokens = IW_GENERIC_IE_MAX, - }, - [IW_EVENT_IDX(IWEVPMKIDCAND)] = { - .header_type = IW_HEADER_TYPE_POINT, - .token_size = 1, - .max_tokens = sizeof(struct iw_pmkid_cand), - }, -}; -static const unsigned standard_event_num = ARRAY_SIZE(standard_event); - -/* Size (in bytes) of various events */ -static const int event_type_size[] = { - IW_EV_LCP_LEN, /* IW_HEADER_TYPE_NULL */ - 0, - IW_EV_CHAR_LEN, /* IW_HEADER_TYPE_CHAR */ - 0, - IW_EV_UINT_LEN, /* IW_HEADER_TYPE_UINT */ - IW_EV_FREQ_LEN, /* IW_HEADER_TYPE_FREQ */ - IW_EV_ADDR_LEN, /* IW_HEADER_TYPE_ADDR */ - 0, - IW_EV_POINT_LEN, /* Without variable payload */ - IW_EV_PARAM_LEN, /* IW_HEADER_TYPE_PARAM */ - IW_EV_QUAL_LEN, /* IW_HEADER_TYPE_QUAL */ -}; - -#ifdef CONFIG_COMPAT -static const int compat_event_type_size[] = { - IW_EV_COMPAT_LCP_LEN, /* IW_HEADER_TYPE_NULL */ - 0, - IW_EV_COMPAT_CHAR_LEN, /* IW_HEADER_TYPE_CHAR */ - 0, - IW_EV_COMPAT_UINT_LEN, /* IW_HEADER_TYPE_UINT */ - IW_EV_COMPAT_FREQ_LEN, /* IW_HEADER_TYPE_FREQ */ - IW_EV_COMPAT_ADDR_LEN, /* IW_HEADER_TYPE_ADDR */ - 0, - IW_EV_COMPAT_POINT_LEN, /* Without variable payload */ - IW_EV_COMPAT_PARAM_LEN, /* IW_HEADER_TYPE_PARAM */ - IW_EV_COMPAT_QUAL_LEN, /* IW_HEADER_TYPE_QUAL */ -}; -#endif - - -/* IW event code */ - -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,32)) -static int __net_init wext_pernet_init(struct net *net) -{ - skb_queue_head_init(&net->wext_nlevents); - return 0; -} - -static void __net_exit wext_pernet_exit(struct net *net) -{ - skb_queue_purge(&net->wext_nlevents); -} - -static struct pernet_operations wext_pernet_ops = { - .init = wext_pernet_init, - .exit = wext_pernet_exit, -}; - -static int __init wireless_nlevent_init(void) -{ - return register_pernet_subsys(&wext_pernet_ops); -} - -subsys_initcall(wireless_nlevent_init); - -/* Process events generated by the wireless layer or the driver. */ -static void wireless_nlevent_process(struct work_struct *work) -{ - struct sk_buff *skb; - struct net *net; - - rtnl_lock(); - - for_each_net(net) { - while ((skb = skb_dequeue(&net->wext_nlevents))) - rtnl_notify(skb, net, 0, RTNLGRP_LINK, NULL, - GFP_KERNEL); - } - - rtnl_unlock(); -} - -static DECLARE_WORK(wireless_nlevent_work, wireless_nlevent_process); - -#else -/* Older kernels get the old way of doing stuff*/ -static struct sk_buff_head wireless_nlevent_queue; - -static int __init wireless_nlevent_init(void) -{ - skb_queue_head_init(&wireless_nlevent_queue); - return 0; -} - -subsys_initcall(wireless_nlevent_init); - -static void wireless_nlevent_process(unsigned long data) -{ - struct sk_buff *skb; - while ((skb = skb_dequeue(&wireless_nlevent_queue))) -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24)) - rtnl_notify(skb, &init_net, 0, RTNLGRP_LINK, NULL, GFP_ATOMIC); -#else - rtnl_notify(skb, 0, RTNLGRP_LINK, NULL, GFP_ATOMIC); -#endif -} - -static DECLARE_TASKLET(wireless_nlevent_tasklet, wireless_nlevent_process, 0); - -#endif - -static struct nlmsghdr *rtnetlink_ifinfo_prep(struct net_device *dev, - struct sk_buff *skb) -{ - struct ifinfomsg *r; - struct nlmsghdr *nlh; - - nlh = nlmsg_put(skb, 0, 0, RTM_NEWLINK, sizeof(*r), 0); - if (!nlh) - return NULL; - - r = nlmsg_data(nlh); - r->ifi_family = AF_UNSPEC; - r->__ifi_pad = 0; - r->ifi_type = dev->type; - r->ifi_index = dev->ifindex; - r->ifi_flags = dev_get_flags(dev); - r->ifi_change = 0; /* Wireless changes don't affect those flags */ - - NLA_PUT_STRING(skb, IFLA_IFNAME, dev->name); - - return nlh; - nla_put_failure: - nlmsg_cancel(skb, nlh); - return NULL; -} - - -/* - * Main event dispatcher. Called from other parts and drivers. - * Send the event on the appropriate channels. - * May be called from interrupt context. - */ -void wireless_send_event(struct net_device * dev, - unsigned int cmd, - union iwreq_data * wrqu, - const char * extra) -{ - const struct iw_ioctl_description * descr = NULL; - int extra_len = 0; - struct iw_event *event; /* Mallocated whole event */ - int event_len; /* Its size */ - int hdr_len; /* Size of the event header */ - int wrqu_off = 0; /* Offset in wrqu */ - /* Don't "optimise" the following variable, it will crash */ - unsigned cmd_index; /* *MUST* be unsigned */ - struct sk_buff *skb; - struct nlmsghdr *nlh; - struct nlattr *nla; -#ifdef CONFIG_COMPAT - struct __compat_iw_event *compat_event; - struct compat_iw_point compat_wrqu; - struct sk_buff *compskb; -#endif - - /* - * Nothing in the kernel sends scan events with data, be safe. - * This is necessary because we cannot fix up scan event data - * for compat, due to being contained in 'extra', but normally - * applications are required to retrieve the scan data anyway - * and no data is included in the event, this codifies that - * practice. - */ - if (WARN_ON(cmd == SIOCGIWSCAN && extra)) - extra = NULL; - - /* Get the description of the Event */ - if (cmd <= SIOCIWLAST) { - cmd_index = IW_IOCTL_IDX(cmd); - if (cmd_index < standard_ioctl_num) - descr = &(standard_ioctl[cmd_index]); - } else { - cmd_index = IW_EVENT_IDX(cmd); - if (cmd_index < standard_event_num) - descr = &(standard_event[cmd_index]); - } - /* Don't accept unknown events */ - if (descr == NULL) { - /* Note : we don't return an error to the driver, because - * the driver would not know what to do about it. It can't - * return an error to the user, because the event is not - * initiated by a user request. - * The best the driver could do is to log an error message. - * We will do it ourselves instead... - */ - netdev_err(dev, "(WE) : Invalid/Unknown Wireless Event (0x%04X)\n", - cmd); - return; - } - - /* Check extra parameters and set extra_len */ - if (descr->header_type == IW_HEADER_TYPE_POINT) { - /* Check if number of token fits within bounds */ - if (wrqu->data.length > descr->max_tokens) { - netdev_err(dev, "(WE) : Wireless Event too big (%d)\n", - wrqu->data.length); - return; - } - if (wrqu->data.length < descr->min_tokens) { - netdev_err(dev, "(WE) : Wireless Event too small (%d)\n", - wrqu->data.length); - return; - } - /* Calculate extra_len - extra is NULL for restricted events */ - if (extra != NULL) - extra_len = wrqu->data.length * descr->token_size; - /* Always at an offset in wrqu */ - wrqu_off = IW_EV_POINT_OFF; - } - - /* Total length of the event */ - hdr_len = event_type_size[descr->header_type]; - event_len = hdr_len + extra_len; - - /* - * The problem for 64/32 bit. - * - * On 64-bit, a regular event is laid out as follows: - * | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | - * | event.len | event.cmd | p a d d i n g | - * | wrqu data ... (with the correct size) | - * - * This padding exists because we manipulate event->u, - * and 'event' is not packed. - * - * An iw_point event is laid out like this instead: - * | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | - * | event.len | event.cmd | p a d d i n g | - * | iwpnt.len | iwpnt.flg | p a d d i n g | - * | extra data ... - * - * The second padding exists because struct iw_point is extended, - * but this depends on the platform... - * - * On 32-bit, all the padding shouldn't be there. - */ - - skb = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_ATOMIC); - if (!skb) - return; - - /* Send via the RtNetlink event channel */ - nlh = rtnetlink_ifinfo_prep(dev, skb); - if (WARN_ON(!nlh)) { - kfree_skb(skb); - return; - } - - /* Add the wireless events in the netlink packet */ - nla = nla_reserve(skb, IFLA_WIRELESS, event_len); - if (!nla) { - kfree_skb(skb); - return; - } - event = nla_data(nla); - - /* Fill event - first clear to avoid data leaking */ - memset(event, 0, hdr_len); - event->len = event_len; - event->cmd = cmd; - memcpy(&event->u, ((char *) wrqu) + wrqu_off, hdr_len - IW_EV_LCP_LEN); - if (extra_len) - memcpy(((char *) event) + hdr_len, extra, extra_len); - - nlmsg_end(skb, nlh); -#ifdef CONFIG_COMPAT - hdr_len = compat_event_type_size[descr->header_type]; - event_len = hdr_len + extra_len; - - compskb = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_ATOMIC); - if (!compskb) { - kfree_skb(skb); - return; - } - - /* Send via the RtNetlink event channel */ - nlh = rtnetlink_ifinfo_prep(dev, compskb); - if (WARN_ON(!nlh)) { - kfree_skb(skb); - kfree_skb(compskb); - return; - } - - /* Add the wireless events in the netlink packet */ - nla = nla_reserve(compskb, IFLA_WIRELESS, event_len); - if (!nla) { - kfree_skb(skb); - kfree_skb(compskb); - return; - } - compat_event = nla_data(nla); - - compat_event->len = event_len; - compat_event->cmd = cmd; - if (descr->header_type == IW_HEADER_TYPE_POINT) { - compat_wrqu.length = wrqu->data.length; - compat_wrqu.flags = wrqu->data.flags; - memcpy(&compat_event->pointer, - ((char *) &compat_wrqu) + IW_EV_COMPAT_POINT_OFF, - hdr_len - IW_EV_COMPAT_LCP_LEN); - if (extra_len) - memcpy(((char *) compat_event) + hdr_len, - extra, extra_len); - } else { - /* extra_len must be zero, so no if (extra) needed */ - memcpy(&compat_event->pointer, wrqu, - hdr_len - IW_EV_COMPAT_LCP_LEN); - } - - nlmsg_end(compskb, nlh); - - skb_shinfo(skb)->frag_list = compskb; -#endif -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,32)) - skb_queue_tail(&dev_net(dev)->wext_nlevents, skb); - schedule_work(&wireless_nlevent_work); -#else - skb_queue_tail(&wireless_nlevent_queue, skb); - tasklet_schedule(&wireless_nlevent_tasklet); -#endif -} -EXPORT_SYMBOL(wireless_send_event); - - - -/* IW handlers */ - -struct iw_statistics *get_wireless_stats(struct net_device *dev) -{ -#ifdef CONFIG_WIRELESS_EXT - if ((dev->wireless_handlers != NULL) && - (dev->wireless_handlers->get_wireless_stats != NULL)) - return dev->wireless_handlers->get_wireless_stats(dev); -#endif - -#ifdef CONFIG_CFG80211_WEXT - if (dev->ieee80211_ptr && - dev->ieee80211_ptr->wiphy && - dev->ieee80211_ptr->wiphy->wext && - dev->ieee80211_ptr->wiphy->wext->get_wireless_stats) - return dev->ieee80211_ptr->wiphy->wext->get_wireless_stats(dev); -#endif - - /* not found */ - return NULL; -} - -static int iw_handler_get_iwstats(struct net_device * dev, - struct iw_request_info * info, - union iwreq_data * wrqu, - char * extra) -{ - /* Get stats from the driver */ - struct iw_statistics *stats; - - stats = get_wireless_stats(dev); - if (stats) { - /* Copy statistics to extra */ - memcpy(extra, stats, sizeof(struct iw_statistics)); - wrqu->data.length = sizeof(struct iw_statistics); - - /* Check if we need to clear the updated flag */ - if (wrqu->data.flags != 0) - stats->qual.updated &= ~IW_QUAL_ALL_UPDATED; - return 0; - } else - return -EOPNOTSUPP; -} - -static iw_handler get_handler(struct net_device *dev, unsigned int cmd) -{ - /* Don't "optimise" the following variable, it will crash */ - unsigned int index; /* *MUST* be unsigned */ - const struct iw_handler_def *handlers = NULL; - -#ifdef CONFIG_CFG80211_WEXT - if (dev->ieee80211_ptr && dev->ieee80211_ptr->wiphy) - handlers = dev->ieee80211_ptr->wiphy->wext; -#endif -#ifdef CONFIG_WIRELESS_EXT - if (dev->wireless_handlers) - handlers = dev->wireless_handlers; -#endif - - if (!handlers) - return NULL; - - /* Try as a standard command */ - index = IW_IOCTL_IDX(cmd); - if (index < handlers->num_standard) - return handlers->standard[index]; - -#ifdef CONFIG_WEXT_PRIV - /* Try as a private command */ - index = cmd - SIOCIWFIRSTPRIV; - if (index < handlers->num_private) - return handlers->private[index]; -#endif - - /* Not found */ - return NULL; -} - -static int ioctl_standard_iw_point(struct iw_point *iwp, unsigned int cmd, - const struct iw_ioctl_description *descr, - iw_handler handler, struct net_device *dev, - struct iw_request_info *info) -{ - int err, extra_size, user_length = 0, essid_compat = 0; - char *extra; - - /* Calculate space needed by arguments. Always allocate - * for max space. - */ - extra_size = descr->max_tokens * descr->token_size; - - /* Check need for ESSID compatibility for WE < 21 */ - switch (cmd) { - case SIOCSIWESSID: - case SIOCGIWESSID: - case SIOCSIWNICKN: - case SIOCGIWNICKN: - if (iwp->length == descr->max_tokens + 1) - essid_compat = 1; - else if (IW_IS_SET(cmd) && (iwp->length != 0)) { - char essid[IW_ESSID_MAX_SIZE + 1]; - unsigned int len; - len = iwp->length * descr->token_size; - - if (len > IW_ESSID_MAX_SIZE) - return -EFAULT; - - err = copy_from_user(essid, iwp->pointer, len); - if (err) - return -EFAULT; - - if (essid[iwp->length - 1] == '\0') - essid_compat = 1; - } - break; - default: - break; - } - - iwp->length -= essid_compat; - - /* Check what user space is giving us */ - if (IW_IS_SET(cmd)) { - /* Check NULL pointer */ - if (!iwp->pointer && iwp->length != 0) - return -EFAULT; - /* Check if number of token fits within bounds */ - if (iwp->length > descr->max_tokens) - return -E2BIG; - if (iwp->length < descr->min_tokens) - return -EINVAL; - } else { - /* Check NULL pointer */ - if (!iwp->pointer) - return -EFAULT; - /* Save user space buffer size for checking */ - user_length = iwp->length; - - /* Don't check if user_length > max to allow forward - * compatibility. The test user_length < min is - * implied by the test at the end. - */ - - /* Support for very large requests */ - if ((descr->flags & IW_DESCR_FLAG_NOMAX) && - (user_length > descr->max_tokens)) { - /* Allow userspace to GET more than max so - * we can support any size GET requests. - * There is still a limit : -ENOMEM. - */ - extra_size = user_length * descr->token_size; - - /* Note : user_length is originally a __u16, - * and token_size is controlled by us, - * so extra_size won't get negative and - * won't overflow... - */ - } - } - - /* kzalloc() ensures NULL-termination for essid_compat. */ - extra = kzalloc(extra_size, GFP_KERNEL); - if (!extra) - return -ENOMEM; - - /* If it is a SET, get all the extra data in here */ - if (IW_IS_SET(cmd) && (iwp->length != 0)) { - if (copy_from_user(extra, iwp->pointer, - iwp->length * - descr->token_size)) { - err = -EFAULT; - goto out; - } - - if (cmd == SIOCSIWENCODEEXT) { - struct iw_encode_ext *ee = (void *) extra; - - if (iwp->length < sizeof(*ee) + ee->key_len) { - err = -EFAULT; - goto out; - } - } - } - - if (IW_IS_GET(cmd) && !(descr->flags & IW_DESCR_FLAG_NOMAX)) { - /* - * If this is a GET, but not NOMAX, it means that the extra - * data is not bounded by userspace, but by max_tokens. Thus - * set the length to max_tokens. This matches the extra data - * allocation. - * The driver should fill it with the number of tokens it - * provided, and it may check iwp->length rather than having - * knowledge of max_tokens. If the driver doesn't change the - * iwp->length, this ioctl just copies back max_token tokens - * filled with zeroes. Hopefully the driver isn't claiming - * them to be valid data. - */ - iwp->length = descr->max_tokens; - } - - err = handler(dev, info, (union iwreq_data *) iwp, extra); - - iwp->length += essid_compat; - - /* If we have something to return to the user */ - if (!err && IW_IS_GET(cmd)) { - /* Check if there is enough buffer up there */ - if (user_length < iwp->length) { - err = -E2BIG; - goto out; - } - - if (copy_to_user(iwp->pointer, extra, - iwp->length * - descr->token_size)) { - err = -EFAULT; - goto out; - } - } - - /* Generate an event to notify listeners of the change */ - if ((descr->flags & IW_DESCR_FLAG_EVENT) && - ((err == 0) || (err == -EIWCOMMIT))) { - union iwreq_data *data = (union iwreq_data *) iwp; - - if (descr->flags & IW_DESCR_FLAG_RESTRICT) - /* If the event is restricted, don't - * export the payload. - */ - wireless_send_event(dev, cmd, data, NULL); - else - wireless_send_event(dev, cmd, data, extra); - } - -out: - kfree(extra); - return err; -} - -/* - * Call the commit handler in the driver - * (if exist and if conditions are right) - * - * Note : our current commit strategy is currently pretty dumb, - * but we will be able to improve on that... - * The goal is to try to agreagate as many changes as possible - * before doing the commit. Drivers that will define a commit handler - * are usually those that need a reset after changing parameters, so - * we want to minimise the number of reset. - * A cool idea is to use a timer : at each "set" command, we re-set the - * timer, when the timer eventually fires, we call the driver. - * Hopefully, more on that later. - * - * Also, I'm waiting to see how many people will complain about the - * netif_running(dev) test. I'm open on that one... - * Hopefully, the driver will remember to do a commit in "open()" ;-) - */ -int call_commit_handler(struct net_device *dev) -{ -#ifdef CONFIG_WIRELESS_EXT - if ((netif_running(dev)) && - (dev->wireless_handlers->standard[0] != NULL)) - /* Call the commit handler on the driver */ - return dev->wireless_handlers->standard[0](dev, NULL, - NULL, NULL); - else - return 0; /* Command completed successfully */ -#else - /* cfg80211 has no commit */ - return 0; -#endif -} - -/* - * Main IOCTl dispatcher. - * Check the type of IOCTL and call the appropriate wrapper... - */ -static int wireless_process_ioctl(struct net *net, struct ifreq *ifr, - unsigned int cmd, - struct iw_request_info *info, - wext_ioctl_func standard, - wext_ioctl_func private) -{ - struct iwreq *iwr = (struct iwreq *) ifr; - struct net_device *dev; - iw_handler handler; - - /* Permissions are already checked in dev_ioctl() before calling us. - * The copy_to/from_user() of ifr is also dealt with in there */ - - /* Make sure the device exist */ - if ((dev = __dev_get_by_name(net, ifr->ifr_name)) == NULL) - return -ENODEV; - - /* A bunch of special cases, then the generic case... - * Note that 'cmd' is already filtered in dev_ioctl() with - * (cmd >= SIOCIWFIRST && cmd <= SIOCIWLAST) */ - if (cmd == SIOCGIWSTATS) - return standard(dev, iwr, cmd, info, - &iw_handler_get_iwstats); - -#ifdef CONFIG_WEXT_PRIV - if (cmd == SIOCGIWPRIV && dev->wireless_handlers) - return standard(dev, iwr, cmd, info, - iw_handler_get_private); -#endif - - /* Basic check */ - if (!netif_device_present(dev)) - return -ENODEV; - - /* New driver API : try to find the handler */ - handler = get_handler(dev, cmd); - if (handler) { - /* Standard and private are not the same */ - if (cmd < SIOCIWFIRSTPRIV) - return standard(dev, iwr, cmd, info, handler); - else if (private) - return private(dev, iwr, cmd, info, handler); - } - /* Old driver API : call driver ioctl handler */ -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,29)) - if (dev->netdev_ops->ndo_do_ioctl) - return dev->netdev_ops->ndo_do_ioctl(dev, ifr, cmd); -#else - if (dev->do_ioctl) - return dev->do_ioctl(dev, ifr, cmd); -#endif - return -EOPNOTSUPP; -} - -/* If command is `set a parameter', or `get the encoding parameters', - * check if the user has the right to do it. - */ -static int wext_permission_check(unsigned int cmd) -{ - if ((IW_IS_SET(cmd) || cmd == SIOCGIWENCODE || - cmd == SIOCGIWENCODEEXT) && - !capable(CAP_NET_ADMIN)) - return -EPERM; - - return 0; -} - -/* entry point from dev ioctl */ -static int wext_ioctl_dispatch(struct net *net, struct ifreq *ifr, - unsigned int cmd, struct iw_request_info *info, - wext_ioctl_func standard, - wext_ioctl_func private) -{ - int ret = wext_permission_check(cmd); - - if (ret) - return ret; - - dev_load(net, ifr->ifr_name); - rtnl_lock(); - ret = wireless_process_ioctl(net, ifr, cmd, info, standard, private); - rtnl_unlock(); - - return ret; -} - -/* - * Wrapper to call a standard Wireless Extension handler. - * We do various checks and also take care of moving data between - * user space and kernel space. - */ -static int ioctl_standard_call(struct net_device * dev, - struct iwreq *iwr, - unsigned int cmd, - struct iw_request_info *info, - iw_handler handler) -{ - const struct iw_ioctl_description * descr; - int ret = -EINVAL; - - /* Get the description of the IOCTL */ - if (IW_IOCTL_IDX(cmd) >= standard_ioctl_num) - return -EOPNOTSUPP; - descr = &(standard_ioctl[IW_IOCTL_IDX(cmd)]); - - /* Check if we have a pointer to user space data or not */ - if (descr->header_type != IW_HEADER_TYPE_POINT) { - - /* No extra arguments. Trivial to handle */ - ret = handler(dev, info, &(iwr->u), NULL); - - /* Generate an event to notify listeners of the change */ - if ((descr->flags & IW_DESCR_FLAG_EVENT) && - ((ret == 0) || (ret == -EIWCOMMIT))) - wireless_send_event(dev, cmd, &(iwr->u), NULL); - } else { - ret = ioctl_standard_iw_point(&iwr->u.data, cmd, descr, - handler, dev, info); - } - - /* Call commit handler if needed and defined */ - if (ret == -EIWCOMMIT) - ret = call_commit_handler(dev); - - /* Here, we will generate the appropriate event if needed */ - - return ret; -} - - -int wext_handle_ioctl(struct net *net, struct ifreq *ifr, unsigned int cmd, - void __user *arg) -{ - struct iw_request_info info = { .cmd = cmd, .flags = 0 }; - int ret; - - ret = wext_ioctl_dispatch(net, ifr, cmd, &info, - ioctl_standard_call, - ioctl_private_call); - if (ret >= 0 && - IW_IS_GET(cmd) && - copy_to_user(arg, ifr, sizeof(struct iwreq))) - return -EFAULT; - - return ret; -} - -#ifdef CONFIG_COMPAT -static int compat_standard_call(struct net_device *dev, - struct iwreq *iwr, - unsigned int cmd, - struct iw_request_info *info, - iw_handler handler) -{ - const struct iw_ioctl_description *descr; - struct compat_iw_point *iwp_compat; - struct iw_point iwp; - int err; - - descr = standard_ioctl + IW_IOCTL_IDX(cmd); - - if (descr->header_type != IW_HEADER_TYPE_POINT) - return ioctl_standard_call(dev, iwr, cmd, info, handler); - - iwp_compat = (struct compat_iw_point *) &iwr->u.data; - iwp.pointer = compat_ptr(iwp_compat->pointer); - iwp.length = iwp_compat->length; - iwp.flags = iwp_compat->flags; - - err = ioctl_standard_iw_point(&iwp, cmd, descr, handler, dev, info); - - iwp_compat->pointer = ptr_to_compat(iwp.pointer); - iwp_compat->length = iwp.length; - iwp_compat->flags = iwp.flags; - - return err; -} - -int compat_wext_handle_ioctl(struct net *net, unsigned int cmd, - unsigned long arg) -{ - void __user *argp = (void __user *)arg; - struct iw_request_info info; - struct iwreq iwr; - char *colon; - int ret; - - if (copy_from_user(&iwr, argp, sizeof(struct iwreq))) - return -EFAULT; - - iwr.ifr_name[IFNAMSIZ-1] = 0; - colon = strchr(iwr.ifr_name, ':'); - if (colon) - *colon = 0; - - info.cmd = cmd; - info.flags = IW_REQUEST_FLAG_COMPAT; - - ret = wext_ioctl_dispatch(net, (struct ifreq *) &iwr, cmd, &info, - compat_standard_call, - compat_private_call); - - if (ret >= 0 && - IW_IS_GET(cmd) && - copy_to_user(argp, &iwr, sizeof(struct iwreq))) - return -EFAULT; - - return ret; -} -#endif diff --git a/openairITS/mac/DOT11/net/wireless/wext-priv.c b/openairITS/mac/DOT11/net/wireless/wext-priv.c deleted file mode 100644 index 674d426a9d..0000000000 --- a/openairITS/mac/DOT11/net/wireless/wext-priv.c +++ /dev/null @@ -1,249 +0,0 @@ -/* - * This file implement the Wireless Extensions priv API. - * - * Authors : Jean Tourrilhes - HPL - - * Copyright (c) 1997-2007 Jean Tourrilhes, All Rights Reserved. - * Copyright 2009 Johannes Berg - * - * (As all part of the Linux kernel, this file is GPL) - */ -#include -#include -#include -#include -#include - -int iw_handler_get_private(struct net_device * dev, - struct iw_request_info * info, - union iwreq_data * wrqu, - char * extra) -{ - /* Check if the driver has something to export */ - if ((dev->wireless_handlers->num_private_args == 0) || - (dev->wireless_handlers->private_args == NULL)) - return -EOPNOTSUPP; - - /* Check if there is enough buffer up there */ - if (wrqu->data.length < dev->wireless_handlers->num_private_args) { - /* User space can't know in advance how large the buffer - * needs to be. Give it a hint, so that we can support - * any size buffer we want somewhat efficiently... */ - wrqu->data.length = dev->wireless_handlers->num_private_args; - return -E2BIG; - } - - /* Set the number of available ioctls. */ - wrqu->data.length = dev->wireless_handlers->num_private_args; - - /* Copy structure to the user buffer. */ - memcpy(extra, dev->wireless_handlers->private_args, - sizeof(struct iw_priv_args) * wrqu->data.length); - - return 0; -} - -/* Size (in bytes) of the various private data types */ -static const char iw_priv_type_size[] = { - 0, /* IW_PRIV_TYPE_NONE */ - 1, /* IW_PRIV_TYPE_BYTE */ - 1, /* IW_PRIV_TYPE_CHAR */ - 0, /* Not defined */ - sizeof(__u32), /* IW_PRIV_TYPE_INT */ - sizeof(struct iw_freq), /* IW_PRIV_TYPE_FLOAT */ - sizeof(struct sockaddr), /* IW_PRIV_TYPE_ADDR */ - 0, /* Not defined */ -}; - -static int get_priv_size(__u16 args) -{ - int num = args & IW_PRIV_SIZE_MASK; - int type = (args & IW_PRIV_TYPE_MASK) >> 12; - - return num * iw_priv_type_size[type]; -} - -static int adjust_priv_size(__u16 args, struct iw_point *iwp) -{ - int num = iwp->length; - int max = args & IW_PRIV_SIZE_MASK; - int type = (args & IW_PRIV_TYPE_MASK) >> 12; - - /* Make sure the driver doesn't goof up */ - if (max < num) - num = max; - - return num * iw_priv_type_size[type]; -} - -/* - * Wrapper to call a private Wireless Extension handler. - * We do various checks and also take care of moving data between - * user space and kernel space. - * It's not as nice and slimline as the standard wrapper. The cause - * is struct iw_priv_args, which was not really designed for the - * job we are going here. - * - * IMPORTANT : This function prevent to set and get data on the same - * IOCTL and enforce the SET/GET convention. Not doing it would be - * far too hairy... - * If you need to set and get data at the same time, please don't use - * a iw_handler but process it in your ioctl handler (i.e. use the - * old driver API). - */ -static int get_priv_descr_and_size(struct net_device *dev, unsigned int cmd, - const struct iw_priv_args **descrp) -{ - const struct iw_priv_args *descr; - int i, extra_size; - - descr = NULL; - for (i = 0; i < dev->wireless_handlers->num_private_args; i++) { - if (cmd == dev->wireless_handlers->private_args[i].cmd) { - descr = &dev->wireless_handlers->private_args[i]; - break; - } - } - - extra_size = 0; - if (descr) { - if (IW_IS_SET(cmd)) { - int offset = 0; /* For sub-ioctls */ - /* Check for sub-ioctl handler */ - if (descr->name[0] == '\0') - /* Reserve one int for sub-ioctl index */ - offset = sizeof(__u32); - - /* Size of set arguments */ - extra_size = get_priv_size(descr->set_args); - - /* Does it fits in iwr ? */ - if ((descr->set_args & IW_PRIV_SIZE_FIXED) && - ((extra_size + offset) <= IFNAMSIZ)) - extra_size = 0; - } else { - /* Size of get arguments */ - extra_size = get_priv_size(descr->get_args); - - /* Does it fits in iwr ? */ - if ((descr->get_args & IW_PRIV_SIZE_FIXED) && - (extra_size <= IFNAMSIZ)) - extra_size = 0; - } - } - *descrp = descr; - return extra_size; -} - -static int ioctl_private_iw_point(struct iw_point *iwp, unsigned int cmd, - const struct iw_priv_args *descr, - iw_handler handler, struct net_device *dev, - struct iw_request_info *info, int extra_size) -{ - char *extra; - int err; - - /* Check what user space is giving us */ - if (IW_IS_SET(cmd)) { - if (!iwp->pointer && iwp->length != 0) - return -EFAULT; - - if (iwp->length > (descr->set_args & IW_PRIV_SIZE_MASK)) - return -E2BIG; - } else if (!iwp->pointer) - return -EFAULT; - - extra = kzalloc(extra_size, GFP_KERNEL); - if (!extra) - return -ENOMEM; - - /* If it is a SET, get all the extra data in here */ - if (IW_IS_SET(cmd) && (iwp->length != 0)) { - if (copy_from_user(extra, iwp->pointer, extra_size)) { - err = -EFAULT; - goto out; - } - } - - /* Call the handler */ - err = handler(dev, info, (union iwreq_data *) iwp, extra); - - /* If we have something to return to the user */ - if (!err && IW_IS_GET(cmd)) { - /* Adjust for the actual length if it's variable, - * avoid leaking kernel bits outside. - */ - if (!(descr->get_args & IW_PRIV_SIZE_FIXED)) - extra_size = adjust_priv_size(descr->get_args, iwp); - - if (copy_to_user(iwp->pointer, extra, extra_size)) - err = -EFAULT; - } - -out: - kfree(extra); - return err; -} - -int ioctl_private_call(struct net_device *dev, struct iwreq *iwr, - unsigned int cmd, struct iw_request_info *info, - iw_handler handler) -{ - int extra_size = 0, ret = -EINVAL; - const struct iw_priv_args *descr; - - extra_size = get_priv_descr_and_size(dev, cmd, &descr); - - /* Check if we have a pointer to user space data or not. */ - if (extra_size == 0) { - /* No extra arguments. Trivial to handle */ - ret = handler(dev, info, &(iwr->u), (char *) &(iwr->u)); - } else { - ret = ioctl_private_iw_point(&iwr->u.data, cmd, descr, - handler, dev, info, extra_size); - } - - /* Call commit handler if needed and defined */ - if (ret == -EIWCOMMIT) - ret = call_commit_handler(dev); - - return ret; -} - -#ifdef CONFIG_COMPAT -int compat_private_call(struct net_device *dev, struct iwreq *iwr, - unsigned int cmd, struct iw_request_info *info, - iw_handler handler) -{ - const struct iw_priv_args *descr; - int ret, extra_size; - - extra_size = get_priv_descr_and_size(dev, cmd, &descr); - - /* Check if we have a pointer to user space data or not. */ - if (extra_size == 0) { - /* No extra arguments. Trivial to handle */ - ret = handler(dev, info, &(iwr->u), (char *) &(iwr->u)); - } else { - struct compat_iw_point *iwp_compat; - struct iw_point iwp; - - iwp_compat = (struct compat_iw_point *) &iwr->u.data; - iwp.pointer = compat_ptr(iwp_compat->pointer); - iwp.length = iwp_compat->length; - iwp.flags = iwp_compat->flags; - - ret = ioctl_private_iw_point(&iwp, cmd, descr, - handler, dev, info, extra_size); - - iwp_compat->pointer = ptr_to_compat(iwp.pointer); - iwp_compat->length = iwp.length; - iwp_compat->flags = iwp.flags; - } - - /* Call commit handler if needed and defined */ - if (ret == -EIWCOMMIT) - ret = call_commit_handler(dev); - - return ret; -} -#endif diff --git a/openairITS/mac/DOT11/net/wireless/wext-proc.c b/openairITS/mac/DOT11/net/wireless/wext-proc.c deleted file mode 100644 index f2fbfa6ff1..0000000000 --- a/openairITS/mac/DOT11/net/wireless/wext-proc.c +++ /dev/null @@ -1,159 +0,0 @@ -/* - * This file implement the Wireless Extensions proc API. - * - * Authors : Jean Tourrilhes - HPL - - * Copyright (c) 1997-2007 Jean Tourrilhes, All Rights Reserved. - * - * (As all part of the Linux kernel, this file is GPL) - */ - -/* - * The /proc/net/wireless file is a human readable user-space interface - * exporting various wireless specific statistics from the wireless devices. - * This is the most popular part of the Wireless Extensions ;-) - * - * This interface is a pure clone of /proc/net/dev (in net/core/dev.c). - * The content of the file is basically the content of "struct iw_statistics". - */ - -#include -#include -#include -#include -#include -#include -#include -#include - - -static void wireless_seq_printf_stats(struct seq_file *seq, - struct net_device *dev) -{ - /* Get stats from the driver */ - struct iw_statistics *stats = get_wireless_stats(dev); - static struct iw_statistics nullstats = {}; - - /* show device if it's wireless regardless of current stats */ - if (!stats) { -#ifdef CONFIG_WIRELESS_EXT - if (dev->wireless_handlers) - stats = &nullstats; -#endif -#ifdef CONFIG_CFG80211 - if (dev->ieee80211_ptr) - stats = &nullstats; -#endif - } - - if (stats) { - seq_printf(seq, "%6s: %04x %3d%c %3d%c %3d%c %6d %6d %6d " - "%6d %6d %6d\n", - dev->name, stats->status, stats->qual.qual, - stats->qual.updated & IW_QUAL_QUAL_UPDATED - ? '.' : ' ', - ((__s32) stats->qual.level) - - ((stats->qual.updated & IW_QUAL_DBM) ? 0x100 : 0), - stats->qual.updated & IW_QUAL_LEVEL_UPDATED - ? '.' : ' ', - ((__s32) stats->qual.noise) - - ((stats->qual.updated & IW_QUAL_DBM) ? 0x100 : 0), - stats->qual.updated & IW_QUAL_NOISE_UPDATED - ? '.' : ' ', - stats->discard.nwid, stats->discard.code, - stats->discard.fragment, stats->discard.retries, - stats->discard.misc, stats->miss.beacon); - - if (stats != &nullstats) - stats->qual.updated &= ~IW_QUAL_ALL_UPDATED; - } -} - -/* ---------------------------------------------------------------- */ -/* - * Print info for /proc/net/wireless (print all entries) - */ -static int wireless_dev_seq_show(struct seq_file *seq, void *v) -{ - might_sleep(); - - if (v == SEQ_START_TOKEN) - seq_printf(seq, "Inter-| sta-| Quality | Discarded " - "packets | Missed | WE\n" - " face | tus | link level noise | nwid " - "crypt frag retry misc | beacon | %d\n", - WIRELESS_EXT); - else - wireless_seq_printf_stats(seq, v); - return 0; -} - -static void *wireless_dev_seq_start(struct seq_file *seq, loff_t *pos) -{ - struct net *net = seq_file_net(seq); - loff_t off; - struct net_device *dev; - - rtnl_lock(); - if (!*pos) - return SEQ_START_TOKEN; - - off = 1; -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24)) - for_each_netdev(net, dev) -#else - for_each_netdev(net) -#endif - if (off++ == *pos) - return dev; - return NULL; -} - -static void *wireless_dev_seq_next(struct seq_file *seq, void *v, loff_t *pos) -{ - struct net *net = seq_file_net(seq); - - ++*pos; - - return v == SEQ_START_TOKEN ? - first_net_device(net) : next_net_device(v); -} - -static void wireless_dev_seq_stop(struct seq_file *seq, void *v) -{ - rtnl_unlock(); -} - -static const struct seq_operations wireless_seq_ops = { - .start = wireless_dev_seq_start, - .next = wireless_dev_seq_next, - .stop = wireless_dev_seq_stop, - .show = wireless_dev_seq_show, -}; - -static int seq_open_wireless(struct inode *inode, struct file *file) -{ - return seq_open_net(inode, file, &wireless_seq_ops, - sizeof(struct seq_net_private)); -} - -static const struct file_operations wireless_seq_fops = { - .owner = THIS_MODULE, - .open = seq_open_wireless, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release_net, -}; - -int __net_init wext_proc_init(struct net *net) -{ - /* Create /proc/net/wireless entry */ - if (!proc_net_fops_create(net, "wireless", S_IRUGO, &wireless_seq_fops)) - return -ENOMEM; - - return 0; -} - -void __net_exit wext_proc_exit(struct net *net) -{ - proc_net_remove(net, "wireless"); -} diff --git a/openairITS/mac/DOT11/net/wireless/wext-sme.c b/openairITS/mac/DOT11/net/wireless/wext-sme.c deleted file mode 100644 index 7c01c2f3b6..0000000000 --- a/openairITS/mac/DOT11/net/wireless/wext-sme.c +++ /dev/null @@ -1,408 +0,0 @@ -/* - * cfg80211 wext compat for managed mode. - * - * Copyright 2009 Johannes Berg - * Copyright (C) 2009 Intel Corporation. All rights reserved. - */ - -#include -#include -#include -#include -#include -#include -#include "wext-compat.h" -#include "nl80211.h" - -int cfg80211_mgd_wext_connect(struct cfg80211_registered_device *rdev, - struct wireless_dev *wdev) -{ - struct cfg80211_cached_keys *ck = NULL; - const u8 *prev_bssid = NULL; - int err, i; - - ASSERT_RDEV_LOCK(rdev); - ASSERT_WDEV_LOCK(wdev); - - if (!netif_running(wdev->netdev)) - return 0; - - wdev->wext.connect.ie = wdev->wext.ie; - wdev->wext.connect.ie_len = wdev->wext.ie_len; - - /* Use default background scan period */ - wdev->wext.connect.bg_scan_period = -1; - - if (wdev->wext.keys) { - wdev->wext.keys->def = wdev->wext.default_key; - wdev->wext.keys->defmgmt = wdev->wext.default_mgmt_key; - if (wdev->wext.default_key != -1) - wdev->wext.connect.privacy = true; - } - - if (!wdev->wext.connect.ssid_len) - return 0; - - if (wdev->wext.keys) { - ck = kmemdup(wdev->wext.keys, sizeof(*ck), GFP_KERNEL); - if (!ck) - return -ENOMEM; - for (i = 0; i < 6; i++) - ck->params[i].key = ck->data[i]; - } - - if (wdev->wext.prev_bssid_valid) - prev_bssid = wdev->wext.prev_bssid; - - err = __cfg80211_connect(rdev, wdev->netdev, - &wdev->wext.connect, ck, prev_bssid); - if (err) - kfree(ck); - - return err; -} - -int cfg80211_mgd_wext_siwfreq(struct net_device *dev, - struct iw_request_info *info, - struct iw_freq *wextfreq, char *extra) -{ - struct wireless_dev *wdev = dev->ieee80211_ptr; - struct cfg80211_registered_device *rdev = wiphy_to_dev(wdev->wiphy); - struct ieee80211_channel *chan = NULL; - int err, freq; - - /* call only for station! */ - if (WARN_ON(wdev->iftype != NL80211_IFTYPE_STATION)) - return -EINVAL; - - freq = cfg80211_wext_freq(wdev->wiphy, wextfreq); - if (freq < 0) - return freq; - - if (freq) { - chan = ieee80211_get_channel(wdev->wiphy, freq); - if (!chan) - return -EINVAL; - if (chan->flags & IEEE80211_CHAN_DISABLED) - return -EINVAL; - } - - cfg80211_lock_rdev(rdev); - mutex_lock(&rdev->devlist_mtx); - wdev_lock(wdev); - - if (wdev->sme_state != CFG80211_SME_IDLE) { - bool event = true; - - if (wdev->wext.connect.channel == chan) { - err = 0; - goto out; - } - - /* if SSID set, we'll try right again, avoid event */ - if (wdev->wext.connect.ssid_len) - event = false; - err = __cfg80211_disconnect(rdev, dev, - WLAN_REASON_DEAUTH_LEAVING, event); - if (err) - goto out; - } - - - wdev->wext.connect.channel = chan; - - /* SSID is not set, we just want to switch channel */ - if (chan && !wdev->wext.connect.ssid_len) { - err = cfg80211_set_freq(rdev, wdev, freq, NL80211_CHAN_NO_HT); - goto out; - } - - err = cfg80211_mgd_wext_connect(rdev, wdev); - out: - wdev_unlock(wdev); - mutex_unlock(&rdev->devlist_mtx); - cfg80211_unlock_rdev(rdev); - return err; -} - -int cfg80211_mgd_wext_giwfreq(struct net_device *dev, - struct iw_request_info *info, - struct iw_freq *freq, char *extra) -{ - struct wireless_dev *wdev = dev->ieee80211_ptr; - struct ieee80211_channel *chan = NULL; - - /* call only for station! */ - if (WARN_ON(wdev->iftype != NL80211_IFTYPE_STATION)) - return -EINVAL; - - wdev_lock(wdev); - if (wdev->current_bss) - chan = wdev->current_bss->pub.channel; - else if (wdev->wext.connect.channel) - chan = wdev->wext.connect.channel; - wdev_unlock(wdev); - - if (chan) { - freq->m = chan->center_freq; - freq->e = 6; - return 0; - } - - /* no channel if not joining */ - return -EINVAL; -} - -int cfg80211_mgd_wext_siwessid(struct net_device *dev, - struct iw_request_info *info, - struct iw_point *data, char *ssid) -{ - struct wireless_dev *wdev = dev->ieee80211_ptr; - struct cfg80211_registered_device *rdev = wiphy_to_dev(wdev->wiphy); - size_t len = data->length; - int err; - - /* call only for station! */ - if (WARN_ON(wdev->iftype != NL80211_IFTYPE_STATION)) - return -EINVAL; - - if (!data->flags) - len = 0; - - /* iwconfig uses nul termination in SSID.. */ - if (len > 0 && ssid[len - 1] == '\0') - len--; - - cfg80211_lock_rdev(rdev); - mutex_lock(&rdev->devlist_mtx); - wdev_lock(wdev); - - err = 0; - - if (wdev->sme_state != CFG80211_SME_IDLE) { - bool event = true; - - if (wdev->wext.connect.ssid && len && - len == wdev->wext.connect.ssid_len && - memcmp(wdev->wext.connect.ssid, ssid, len) == 0) - goto out; - - /* if SSID set now, we'll try to connect, avoid event */ - if (len) - event = false; - err = __cfg80211_disconnect(rdev, dev, - WLAN_REASON_DEAUTH_LEAVING, event); - if (err) - goto out; - } - - wdev->wext.prev_bssid_valid = false; - wdev->wext.connect.ssid = wdev->wext.ssid; - memcpy(wdev->wext.ssid, ssid, len); - wdev->wext.connect.ssid_len = len; - - wdev->wext.connect.crypto.control_port = false; - wdev->wext.connect.crypto.control_port_ethertype = - cpu_to_be16(ETH_P_PAE); - - err = cfg80211_mgd_wext_connect(rdev, wdev); - out: - wdev_unlock(wdev); - mutex_unlock(&rdev->devlist_mtx); - cfg80211_unlock_rdev(rdev); - return err; -} - -int cfg80211_mgd_wext_giwessid(struct net_device *dev, - struct iw_request_info *info, - struct iw_point *data, char *ssid) -{ - struct wireless_dev *wdev = dev->ieee80211_ptr; - - /* call only for station! */ - if (WARN_ON(wdev->iftype != NL80211_IFTYPE_STATION)) - return -EINVAL; - - data->flags = 0; - - wdev_lock(wdev); - if (wdev->current_bss) { - const u8 *ie = ieee80211_bss_get_ie(&wdev->current_bss->pub, - WLAN_EID_SSID); - if (ie) { - data->flags = 1; - data->length = ie[1]; - memcpy(ssid, ie + 2, data->length); - } - } else if (wdev->wext.connect.ssid && wdev->wext.connect.ssid_len) { - data->flags = 1; - data->length = wdev->wext.connect.ssid_len; - memcpy(ssid, wdev->wext.connect.ssid, data->length); - } - wdev_unlock(wdev); - - return 0; -} - -int cfg80211_mgd_wext_siwap(struct net_device *dev, - struct iw_request_info *info, - struct sockaddr *ap_addr, char *extra) -{ - struct wireless_dev *wdev = dev->ieee80211_ptr; - struct cfg80211_registered_device *rdev = wiphy_to_dev(wdev->wiphy); - u8 *bssid = ap_addr->sa_data; - int err; - - /* call only for station! */ - if (WARN_ON(wdev->iftype != NL80211_IFTYPE_STATION)) - return -EINVAL; - - if (ap_addr->sa_family != ARPHRD_ETHER) - return -EINVAL; - - /* automatic mode */ - if (is_zero_ether_addr(bssid) || is_broadcast_ether_addr(bssid)) - bssid = NULL; - - cfg80211_lock_rdev(rdev); - mutex_lock(&rdev->devlist_mtx); - wdev_lock(wdev); - - if (wdev->sme_state != CFG80211_SME_IDLE) { - err = 0; - /* both automatic */ - if (!bssid && !wdev->wext.connect.bssid) - goto out; - - /* fixed already - and no change */ - if (wdev->wext.connect.bssid && bssid && - compare_ether_addr(bssid, wdev->wext.connect.bssid) == 0) - goto out; - - err = __cfg80211_disconnect(rdev, dev, - WLAN_REASON_DEAUTH_LEAVING, false); - if (err) - goto out; - } - - if (bssid) { - memcpy(wdev->wext.bssid, bssid, ETH_ALEN); - wdev->wext.connect.bssid = wdev->wext.bssid; - } else - wdev->wext.connect.bssid = NULL; - - err = cfg80211_mgd_wext_connect(rdev, wdev); - out: - wdev_unlock(wdev); - mutex_unlock(&rdev->devlist_mtx); - cfg80211_unlock_rdev(rdev); - return err; -} - -int cfg80211_mgd_wext_giwap(struct net_device *dev, - struct iw_request_info *info, - struct sockaddr *ap_addr, char *extra) -{ - struct wireless_dev *wdev = dev->ieee80211_ptr; - - /* call only for station! */ - if (WARN_ON(wdev->iftype != NL80211_IFTYPE_STATION)) - return -EINVAL; - - ap_addr->sa_family = ARPHRD_ETHER; - - wdev_lock(wdev); - if (wdev->current_bss) - memcpy(ap_addr->sa_data, wdev->current_bss->pub.bssid, ETH_ALEN); - else - memset(ap_addr->sa_data, 0, ETH_ALEN); - wdev_unlock(wdev); - - return 0; -} - -int cfg80211_wext_siwgenie(struct net_device *dev, - struct iw_request_info *info, - struct iw_point *data, char *extra) -{ - struct wireless_dev *wdev = dev->ieee80211_ptr; - struct cfg80211_registered_device *rdev = wiphy_to_dev(wdev->wiphy); - u8 *ie = extra; - int ie_len = data->length, err; - - if (wdev->iftype != NL80211_IFTYPE_STATION) - return -EOPNOTSUPP; - - if (!ie_len) - ie = NULL; - - wdev_lock(wdev); - - /* no change */ - err = 0; - if (wdev->wext.ie_len == ie_len && - memcmp(wdev->wext.ie, ie, ie_len) == 0) - goto out; - - if (ie_len) { - ie = kmemdup(extra, ie_len, GFP_KERNEL); - if (!ie) { - err = -ENOMEM; - goto out; - } - } else - ie = NULL; - - kfree(wdev->wext.ie); - wdev->wext.ie = ie; - wdev->wext.ie_len = ie_len; - - if (wdev->sme_state != CFG80211_SME_IDLE) { - err = __cfg80211_disconnect(rdev, dev, - WLAN_REASON_DEAUTH_LEAVING, false); - if (err) - goto out; - } - - /* userspace better not think we'll reconnect */ - err = 0; - out: - wdev_unlock(wdev); - return err; -} - -int cfg80211_wext_siwmlme(struct net_device *dev, - struct iw_request_info *info, - struct iw_point *data, char *extra) -{ - struct wireless_dev *wdev = dev->ieee80211_ptr; - struct iw_mlme *mlme = (struct iw_mlme *)extra; - struct cfg80211_registered_device *rdev; - int err; - - if (!wdev) - return -EOPNOTSUPP; - - rdev = wiphy_to_dev(wdev->wiphy); - - if (wdev->iftype != NL80211_IFTYPE_STATION) - return -EINVAL; - - if (mlme->addr.sa_family != ARPHRD_ETHER) - return -EINVAL; - - wdev_lock(wdev); - switch (mlme->cmd) { - case IW_MLME_DEAUTH: - case IW_MLME_DISASSOC: - err = __cfg80211_disconnect(rdev, dev, mlme->reason_code, - true); - break; - default: - err = -EOPNOTSUPP; - break; - } - wdev_unlock(wdev); - - return err; -} diff --git a/openairITS/mac/DOT11/net/wireless/wext-spy.c b/openairITS/mac/DOT11/net/wireless/wext-spy.c deleted file mode 100644 index 5d643a548f..0000000000 --- a/openairITS/mac/DOT11/net/wireless/wext-spy.c +++ /dev/null @@ -1,232 +0,0 @@ -/* - * This file implement the Wireless Extensions spy API. - * - * Authors : Jean Tourrilhes - HPL - - * Copyright (c) 1997-2007 Jean Tourrilhes, All Rights Reserved. - * - * (As all part of the Linux kernel, this file is GPL) - */ - -#include -#include -#include -#include -#include -#include -#include - -static inline struct iw_spy_data *get_spydata(struct net_device *dev) -{ - /* This is the new way */ - if (dev->wireless_data) - return dev->wireless_data->spy_data; - return NULL; -} - -int iw_handler_set_spy(struct net_device * dev, - struct iw_request_info * info, - union iwreq_data * wrqu, - char * extra) -{ - struct iw_spy_data * spydata = get_spydata(dev); - struct sockaddr * address = (struct sockaddr *) extra; - - /* Make sure driver is not buggy or using the old API */ - if (!spydata) - return -EOPNOTSUPP; - - /* Disable spy collection while we copy the addresses. - * While we copy addresses, any call to wireless_spy_update() - * will NOP. This is OK, as anyway the addresses are changing. */ - spydata->spy_number = 0; - - /* We want to operate without locking, because wireless_spy_update() - * most likely will happen in the interrupt handler, and therefore - * have its own locking constraints and needs performance. - * The rtnl_lock() make sure we don't race with the other iw_handlers. - * This make sure wireless_spy_update() "see" that the spy list - * is temporarily disabled. */ - smp_wmb(); - - /* Are there are addresses to copy? */ - if (wrqu->data.length > 0) { - int i; - - /* Copy addresses */ - for (i = 0; i < wrqu->data.length; i++) - memcpy(spydata->spy_address[i], address[i].sa_data, - ETH_ALEN); - /* Reset stats */ - memset(spydata->spy_stat, 0, - sizeof(struct iw_quality) * IW_MAX_SPY); - } - - /* Make sure above is updated before re-enabling */ - smp_wmb(); - - /* Enable addresses */ - spydata->spy_number = wrqu->data.length; - - return 0; -} -EXPORT_SYMBOL(iw_handler_set_spy); - -int iw_handler_get_spy(struct net_device * dev, - struct iw_request_info * info, - union iwreq_data * wrqu, - char * extra) -{ - struct iw_spy_data * spydata = get_spydata(dev); - struct sockaddr * address = (struct sockaddr *) extra; - int i; - - /* Make sure driver is not buggy or using the old API */ - if (!spydata) - return -EOPNOTSUPP; - - wrqu->data.length = spydata->spy_number; - - /* Copy addresses. */ - for (i = 0; i < spydata->spy_number; i++) { - memcpy(address[i].sa_data, spydata->spy_address[i], ETH_ALEN); - address[i].sa_family = AF_UNIX; - } - /* Copy stats to the user buffer (just after). */ - if (spydata->spy_number > 0) - memcpy(extra + (sizeof(struct sockaddr) *spydata->spy_number), - spydata->spy_stat, - sizeof(struct iw_quality) * spydata->spy_number); - /* Reset updated flags. */ - for (i = 0; i < spydata->spy_number; i++) - spydata->spy_stat[i].updated &= ~IW_QUAL_ALL_UPDATED; - return 0; -} -EXPORT_SYMBOL(iw_handler_get_spy); - -/*------------------------------------------------------------------*/ -/* - * Standard Wireless Handler : set spy threshold - */ -int iw_handler_set_thrspy(struct net_device * dev, - struct iw_request_info *info, - union iwreq_data * wrqu, - char * extra) -{ - struct iw_spy_data * spydata = get_spydata(dev); - struct iw_thrspy * threshold = (struct iw_thrspy *) extra; - - /* Make sure driver is not buggy or using the old API */ - if (!spydata) - return -EOPNOTSUPP; - - /* Just do it */ - memcpy(&(spydata->spy_thr_low), &(threshold->low), - 2 * sizeof(struct iw_quality)); - - /* Clear flag */ - memset(spydata->spy_thr_under, '\0', sizeof(spydata->spy_thr_under)); - - return 0; -} -EXPORT_SYMBOL(iw_handler_set_thrspy); - -/*------------------------------------------------------------------*/ -/* - * Standard Wireless Handler : get spy threshold - */ -int iw_handler_get_thrspy(struct net_device * dev, - struct iw_request_info *info, - union iwreq_data * wrqu, - char * extra) -{ - struct iw_spy_data * spydata = get_spydata(dev); - struct iw_thrspy * threshold = (struct iw_thrspy *) extra; - - /* Make sure driver is not buggy or using the old API */ - if (!spydata) - return -EOPNOTSUPP; - - /* Just do it */ - memcpy(&(threshold->low), &(spydata->spy_thr_low), - 2 * sizeof(struct iw_quality)); - - return 0; -} -EXPORT_SYMBOL(iw_handler_get_thrspy); - -/*------------------------------------------------------------------*/ -/* - * Prepare and send a Spy Threshold event - */ -static void iw_send_thrspy_event(struct net_device * dev, - struct iw_spy_data * spydata, - unsigned char * address, - struct iw_quality * wstats) -{ - union iwreq_data wrqu; - struct iw_thrspy threshold; - - /* Init */ - wrqu.data.length = 1; - wrqu.data.flags = 0; - /* Copy address */ - memcpy(threshold.addr.sa_data, address, ETH_ALEN); - threshold.addr.sa_family = ARPHRD_ETHER; - /* Copy stats */ - memcpy(&(threshold.qual), wstats, sizeof(struct iw_quality)); - /* Copy also thresholds */ - memcpy(&(threshold.low), &(spydata->spy_thr_low), - 2 * sizeof(struct iw_quality)); - - /* Send event to user space */ - wireless_send_event(dev, SIOCGIWTHRSPY, &wrqu, (char *) &threshold); -} - -/* ---------------------------------------------------------------- */ -/* - * Call for the driver to update the spy data. - * For now, the spy data is a simple array. As the size of the array is - * small, this is good enough. If we wanted to support larger number of - * spy addresses, we should use something more efficient... - */ -void wireless_spy_update(struct net_device * dev, - unsigned char * address, - struct iw_quality * wstats) -{ - struct iw_spy_data * spydata = get_spydata(dev); - int i; - int match = -1; - - /* Make sure driver is not buggy or using the old API */ - if (!spydata) - return; - - /* Update all records that match */ - for (i = 0; i < spydata->spy_number; i++) - if (!compare_ether_addr(address, spydata->spy_address[i])) { - memcpy(&(spydata->spy_stat[i]), wstats, - sizeof(struct iw_quality)); - match = i; - } - - /* Generate an event if we cross the spy threshold. - * To avoid event storms, we have a simple hysteresis : we generate - * event only when we go under the low threshold or above the - * high threshold. */ - if (match >= 0) { - if (spydata->spy_thr_under[match]) { - if (wstats->level > spydata->spy_thr_high.level) { - spydata->spy_thr_under[match] = 0; - iw_send_thrspy_event(dev, spydata, - address, wstats); - } - } else { - if (wstats->level < spydata->spy_thr_low.level) { - spydata->spy_thr_under[match] = 1; - iw_send_thrspy_event(dev, spydata, - address, wstats); - } - } - } -} -EXPORT_SYMBOL(wireless_spy_update); diff --git a/openairITS/mac/DOT11/scripts/admin-clean.sh b/openairITS/mac/DOT11/scripts/admin-clean.sh deleted file mode 100755 index 81398f2a28..0000000000 --- a/openairITS/mac/DOT11/scripts/admin-clean.sh +++ /dev/null @@ -1,15 +0,0 @@ -#!/usr/bin/env bash -if [ -d net ] ; then - make clean -fi -rm -rf net -rm -rf drivers -rm -rf include -rm -rf compat -rm -rf udev -rm -f master-tag -rm -f compat_base_tree -rm -f compat_base_tree_version -rm -f compat_version -rm -f code-metrics.txt -echo "Cleaned wireless-bt-compat-2.6" diff --git a/openairITS/mac/DOT11/scripts/admin-refresh.sh b/openairITS/mac/DOT11/scripts/admin-refresh.sh deleted file mode 100755 index caf63e06c1..0000000000 --- a/openairITS/mac/DOT11/scripts/admin-refresh.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/usr/bin/env bash -./scripts/admin-clean.sh $@ -./scripts/admin-update.sh $@ diff --git a/openairITS/mac/DOT11/scripts/admin-update.sh b/openairITS/mac/DOT11/scripts/admin-update.sh deleted file mode 100755 index ee89d31231..0000000000 --- a/openairITS/mac/DOT11/scripts/admin-update.sh +++ /dev/null @@ -1,647 +0,0 @@ -#!/usr/bin/env bash -# -# Copyright 2007, 2008, 2010 Luis R. Rodriguez -# -# Use this to update compat-wireless-2.6 to the latest -# wireless-testing.git tree you have. -# -# Usage: you should have the latest pull of wireless-2.6.git -# git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-testing.git -# We assume you have it on your ~/devel/wireless-testing/ directory. If you do, -# just run this script from the compat-wireless-2.6 directory. -# You can specify where your GIT_TREE is by doing: -# -# export GIT_TREE=/home/mcgrof/wireless-testing/ -# -# for example -# -GIT_URL="git://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git" -GIT_COMPAT_URL="git://git.kernel.org/pub/scm/linux/kernel/git/mcgrof/compat.git" - -INCLUDE_NET_BT="hci_core.h l2cap.h bluetooth.h rfcomm.h hci.h mgmt.h smp.h" -NET_BT_DIRS="bluetooth bluetooth/bnep bluetooth/cmtp bluetooth/rfcomm bluetooth/hidp" - -INCLUDE_LINUX="ieee80211.h nl80211.h" -INCLUDE_LINUX="$INCLUDE_LINUX pci_ids.h eeprom_93cx6.h" -INCLUDE_LINUX="$INCLUDE_LINUX ath9k_platform.h" -INCLUDE_LINUX="$INCLUDE_LINUX wl12xx.h" - -# For rndis_wext -INCLUDE_LINUX_USB="usbnet.h rndis_host.h" - -INCLUDE_LINUX_SPI="libertas_spi.h" - -# The good new yummy stuff -INCLUDE_NET="cfg80211.h ieee80211_radiotap.h cfg80211-wext.h" -INCLUDE_NET="$INCLUDE_NET mac80211.h lib80211.h regulatory.h" - -# Pretty colors -GREEN="\033[01;32m" -YELLOW="\033[01;33m" -NORMAL="\033[00m" -BLUE="\033[34m" -RED="\033[31m" -PURPLE="\033[35m" -CYAN="\033[36m" -UNDERLINE="\033[02m" - -NET_DIRS="wireless mac80211 rfkill" -CODE_METRICS=code-metrics.txt - -usage() { - printf "Usage: $0 [ refresh] [ --help | -h | -s | -n | -p | -c ]\n" - - printf "${GREEN}%10s${NORMAL} - will update your all your patch offsets using quilt\n" "refresh" - printf "${GREEN}%10s${NORMAL} - get and apply pending-stable/ fixes purging old files there\n" "-s" - printf "${GREEN}%10s${NORMAL} - apply the patches linux-next-cherry-picks directory\n" "-n" - printf "${GREEN}%10s${NORMAL} - apply the patches on the linux-next-pending directory\n" "-p" - printf "${GREEN}%10s${NORMAL} - apply the patches on the crap directory\n" "-c" -} - -brag_backport() { - COMPAT_FILES_CODE=$(find ./ -type f -name \*.[ch] | egrep "^./compat/|include/linux/compat" | - xargs wc -l | tail -1 | awk '{print $1}') - let COMPAT_ALL_CHANGES=$2+$COMPAT_FILES_CODE - printf "${GREEN}%10s${NORMAL} - backport code changes\n" $2 - printf "${GREEN}%10s${NORMAL} - backport code additions\n" $3 - printf "${GREEN}%10s${NORMAL} - backport code deletions\n" $4 - printf "${GREEN}%10s${NORMAL} - backport from compat module\n" $COMPAT_FILES_CODE - printf "${GREEN}%10s${NORMAL} - total backport code\n" $COMPAT_ALL_CHANGES - printf "${RED}%10s${NORMAL} - %% of code consists of backport work\n" \ - $(perl -e 'printf("%.4f", 100 * '$COMPAT_ALL_CHANGES' / '$1');') -} - -nag_pending_stable() { - printf "${YELLOW}%10s${NORMAL} - Code changes brought in from pending-stable\n" $2 - printf "${YELLOW}%10s${NORMAL} - Code additions brought in from pending-stable\n" $3 - printf "${YELLOW}%10s${NORMAL} - Code deletions brought in from pending-stable\n" $4 - printf "${RED}%10s${NORMAL} - %% of code being cherry picked from pending-stable\n" $(perl -e 'printf("%.4f", 100 * '$2' / '$1');') -} - -nag_next_cherry_pick() { - printf "${YELLOW}%10s${NORMAL} - Code changes brought in from linux-next\n" $2 - printf "${YELLOW}%10s${NORMAL} - Code additions brought in from linux-next\n" $3 - printf "${YELLOW}%10s${NORMAL} - Code deletions brought in from linux-next\n" $4 - printf "${RED}%10s${NORMAL} - %% of code being cherry picked from linux-next\n" $(perl -e 'printf("%.4f", 100 * '$2' / '$1');') -} - -nag_pending() { - printf "${YELLOW}%10s${NORMAL} - Code changes posted but not yet merged\n" $2 - printf "${YELLOW}%10s${NORMAL} - Code additions posted but not yet merged\n" $3 - printf "${YELLOW}%10s${NORMAL} - Code deletions posted but not yet merged\n" $4 - printf "${RED}%10s${NORMAL} - %% of code not yet merged\n" $(perl -e 'printf("%.4f", 100 * '$2' / '$1');') -} - -nag_crap() { - printf "${RED}%10s${NORMAL} - Crap changes not yet posted\n" $2 - printf "${RED}%10s${NORMAL} - Crap additions not yet posted\n" $3 - printf "${RED}%10s${NORMAL} - Crap deletions not yet posted\n" $4 - printf "${RED}%10s${NORMAL} - %% of crap code\n" $(perl -e 'printf("%.4f", 100 * '$2' / '$1');') -} - -nagometer() { - CHANGES=0 - - ORIG_CODE=$2 - ADD=$(grep -Hc ^+ $1/*.patch| awk -F":" 'BEGIN {sum=0} {sum += $2} END { print sum}') - DEL=$(grep -Hc ^- $1/*.patch| awk -F":" 'BEGIN {sum=0} {sum += $2} END { print sum}') - # Total code is irrelevant unless you take into account each part, - # easier to just compare against the original code. - # let TOTAL_CODE=$ORIG_CODE+$ADD-$DEL - - let CHANGES=$ADD+$DEL - - case $1 in - "patches") - brag_backport $ORIG_CODE $CHANGES $ADD $DEL - ;; - "pending-stable") - nag_pending_stable $ORIG_CODE $CHANGES $ADD $DEL - ;; - "linux-next-cherry-picks") - nag_next_cherry_pick $ORIG_CODE $CHANGES $ADD $DEL - ;; - "linux-next-pending") - nag_pending $ORIG_CODE $CHANGES $ADD $DEL - ;; - "crap") - nag_crap $ORIG_CODE $CHANGES $ADD $DEL - ;; - *) - ;; - esac - -} - -EXTRA_PATCHES="patches" -REFRESH="n" -GET_STABLE_PENDING="n" -POSTFIX_RELEASE_TAG="" -if [ $# -ge 1 ]; then - if [ $# -gt 4 ]; then - usage $0 - exit - fi - if [[ $1 = "-h" || $1 = "--help" ]]; then - usage $0 - exit - fi - while [ $# -ne 0 ]; do - if [[ "$1" = "-s" ]]; then - GET_STABLE_PENDING="y" - EXTRA_PATCHES="${EXTRA_PATCHES} pending-stable" - EXTRA_PATCHES="${EXTRA_PATCHES} pending-stable/backports/" - POSTFIX_RELEASE_TAG="${POSTFIX_RELEASE_TAG}s" - shift; continue; - fi - if [[ "$1" = "-n" ]]; then - EXTRA_PATCHES="${EXTRA_PATCHES} linux-next-cherry-picks" - POSTFIX_RELEASE_TAG="${POSTFIX_RELEASE_TAG}n" - shift; continue; - fi - if [[ "$1" = "-p" ]]; then - EXTRA_PATCHES="${EXTRA_PATCHES} linux-next-pending" - POSTFIX_RELEASE_TAG="${POSTFIX_RELEASE_TAG}p" - shift; continue; - fi - if [[ "$1" = "-c" ]]; then - EXTRA_PATCHES="${EXTRA_PATCHES} crap" - POSTFIX_RELEASE_TAG="${POSTFIX_RELEASE_TAG}c" - shift; continue; - fi - if [[ "$1" = "refresh" ]]; then - REFRESH="y" - shift; continue; - fi - - echo "Unexpected argument passed: $1" - usage $0 - exit - done - -fi - -# User exported this variable -if [ -z $GIT_TREE ]; then - GIT_TREE="/home/$USER/linux-next/" - if [ ! -d $GIT_TREE ]; then - echo "Please tell me where your linux-next git tree is." - echo "You can do this by exporting its location as follows:" - echo - echo " export GIT_TREE=/home/$USER/linux-next/" - echo - echo "If you do not have one you can clone the repository:" - echo " git clone $GIT_URL" - exit 1 - fi -else - echo "You said to use git tree at: $GIT_TREE for linux-next" -fi - -if [ -z $GIT_COMPAT_TREE ]; then - GIT_COMPAT_TREE="/home/$USER/compat/" - if [ ! -d $GIT_COMPAT_TREE ]; then - echo "Please tell me where your compat git tree is." - echo "You can do this by exporting its location as follows:" - echo - echo " export GIT_COMPAT_TREE=/home/$USER/compat/" - echo - echo "If you do not have one you can clone the repository:" - echo " git clone $GIT_COMPAT_URL" - exit 1 - fi -else - echo "You said to use git tree at: $GIT_COMPAT_TREE for compat" -fi - -# Drivers that have their own directory -DRIVERS="drivers/net/wireless/ath" -DRIVERS="$DRIVERS drivers/net/wireless/ath/carl9170" -DRIVERS="$DRIVERS drivers/net/wireless/ath/ath5k" -DRIVERS="$DRIVERS drivers/net/wireless/ath/ath6kl" -DRIVERS="$DRIVERS drivers/net/wireless/ath/ath9k" -DRIVERS="$DRIVERS drivers/ssb" -DRIVERS="$DRIVERS drivers/bcma" -DRIVERS="$DRIVERS drivers/net/wireless/b43" -DRIVERS="$DRIVERS drivers/net/wireless/b43legacy" -DRIVERS="$DRIVERS drivers/net/wireless/brcm80211" -DRIVERS="$DRIVERS drivers/net/wireless/brcm80211/brcmfmac" -DRIVERS="$DRIVERS drivers/net/wireless/brcm80211/brcmsmac" -DRIVERS="$DRIVERS drivers/net/wireless/brcm80211/brcmsmac/phy" -DRIVERS="$DRIVERS drivers/net/wireless/brcm80211/brcmutil" -DRIVERS="$DRIVERS drivers/net/wireless/brcm80211/include" -DRIVERS="$DRIVERS drivers/net/wireless/iwlegacy" -DRIVERS="$DRIVERS drivers/net/wireless/iwlwifi" -DRIVERS="$DRIVERS drivers/net/wireless/rt2x00" -DRIVERS="$DRIVERS drivers/net/wireless/zd1211rw" -DRIVERS="$DRIVERS drivers/net/wireless/libertas" -DRIVERS="$DRIVERS drivers/net/wireless/p54" -DRIVERS="$DRIVERS drivers/net/wireless/rtl818x" -DRIVERS="$DRIVERS drivers/net/wireless/rtl818x/rtl8180" -DRIVERS="$DRIVERS drivers/net/wireless/rtl818x/rtl8187" -DRIVERS="$DRIVERS drivers/net/wireless/rtlwifi" -DRIVERS="$DRIVERS drivers/net/wireless/rtlwifi/rtl8192c" -DRIVERS="$DRIVERS drivers/net/wireless/rtlwifi/rtl8192ce" -DRIVERS="$DRIVERS drivers/net/wireless/rtlwifi/rtl8192cu" -DRIVERS="$DRIVERS drivers/net/wireless/rtlwifi/rtl8192se" -DRIVERS="$DRIVERS drivers/net/wireless/rtlwifi/rtl8192de" -DRIVERS="$DRIVERS drivers/net/wireless/libertas_tf" -DRIVERS="$DRIVERS drivers/net/wireless/ipw2x00" -DRIVERS="$DRIVERS drivers/net/wireless/wl12xx" -DRIVERS="$DRIVERS drivers/net/wireless/wl1251" -DRIVERS="$DRIVERS drivers/net/wireless/iwmc3200wifi" -DRIVERS="$DRIVERS drivers/net/wireless/orinoco" -DRIVERS="$DRIVERS drivers/net/wireless/mwifiex" - -# Staging drivers -STAGING_DRIVERS="" - -# Ethernet drivers -DRIVERS="$DRIVERS drivers/net/ethernet/atheros" -DRIVERS="$DRIVERS drivers/net/ethernet/atheros/atl1c" -DRIVERS="$DRIVERS drivers/net/ethernet/atheros/atl1e" -DRIVERS="$DRIVERS drivers/net/ethernet/atheros/atlx" -DRIVERS="$DRIVERS drivers/net/ethernet/atheros/alx" - -# Bluetooth drivers -DRIVERS_BT="drivers/bluetooth" - -# Drivers that belong the the wireless directory -DRIVER_FILES="adm8211.c adm8211.h" -DRIVER_FILES="$DRIVER_FILES rndis_wlan.c" -DRIVER_FILES="$DRIVER_FILES mac80211_hwsim.c mac80211_hwsim.h" -DRIVER_FILES="$DRIVER_FILES at76c50x-usb.c at76c50x-usb.h" -DRIVER_FILES="$DRIVER_FILES mwl8k.c" - -rm -rf drivers/ - -mkdir -p include/linux/ include/net/ include/linux/usb \ - include/linux/unaligned \ - include/linux/spi \ - include/trace \ - include/pcmcia \ - include/crypto \ - net/mac80211/ net/wireless/ \ - net/rfkill/ \ - drivers/ssb/ \ - drivers/bcma/ \ - drivers/net/usb/ \ - drivers/net/wireless/ \ - drivers/net/ethernet/atheros \ - drivers/net/ethernet/broadcom -mkdir -p include/net/bluetooth/ - -# include/linux -DIR="include/linux" -for i in $INCLUDE_LINUX; do - echo "Copying $GIT_TREE/$DIR/$i" - cp "$GIT_TREE/$DIR/$i" $DIR/ -done - -cp -a $GIT_TREE/include/linux/ssb include/linux/ -cp -a $GIT_TREE/include/linux/bcma include/linux/ -cp -a $GIT_TREE/include/linux/rfkill.h include/linux/rfkill_backport.h - -# include/net -DIR="include/net" -for i in $INCLUDE_NET; do - echo "Copying $GIT_TREE/$DIR/$i" - cp "$GIT_TREE/$DIR/$i" $DIR/ -done - -DIR="include/net/bluetooth" -for i in $INCLUDE_NET_BT; do - echo "Copying $GIT_TREE/$DIR/$i" - cp $GIT_TREE/$DIR/$i $DIR/ -done - -DIR="include/linux/usb" -for i in $INCLUDE_LINUX_USB; do - echo "Copying $GIT_TREE/$DIR/$i" - cp $GIT_TREE/$DIR/$i $DIR/ -done - -DIR="include/linux/spi" -for i in $INCLUDE_LINUX_SPI; do - echo "Copying $GIT_TREE/$DIR/$i" - cp $GIT_TREE/$DIR/$i $DIR/ -done - -# net/wireless and net/mac80211 -for i in $NET_DIRS; do - echo "Copying $GIT_TREE/net/$i/*.[ch]" - cp $GIT_TREE/net/$i/*.[ch] net/$i/ - cp $GIT_TREE/net/$i/Makefile net/$i/ - rm -f net/$i/*.mod.c -done - -cp $GIT_TREE/MAINTAINERS ./ - -# Copy files needed for statically compiled regulatory rules database -cp $GIT_TREE/net/wireless/db.txt net/wireless/ -cp $GIT_TREE/net/wireless/genregdb.awk net/wireless/ - -# net/bluetooth -for i in $NET_BT_DIRS; do - mkdir -p net/$i - echo "Copying $GIT_TREE/net/$i/*.[ch]" - cp $GIT_TREE/net/$i/*.[ch] net/$i/ - cp $GIT_TREE/net/$i/Makefile net/$i/ - rm -f net/$i/*.mod.c -done - -# Drivers in their own directory -for i in $DRIVERS; do - mkdir -p $i - - # -print -quit will just print once, so we don't burden - # this script with searching for further files if one is - # found - FILES_FOUND=$(find $GIT_TREE/$i/ -maxdepth 1 -type f -name \*.[ch] -print -quit | wc -l) - if [ $FILES_FOUND -eq 1 ]; then - echo "Copying $GIT_TREE/$i/*.[ch]" - cp $GIT_TREE/$i/*.[ch] $i/ - fi - if [ -f $GIT_TREE/$i/Makefile ]; then - cp $GIT_TREE/$i/Makefile $i/ - fi - if [ -f $GIT_TREE/$i/Kconfig ]; then - cp $GIT_TREE/$i/Kconfig $i/ - fi - rm -f $i/*.mod.c -done - -# Staging drivers in their own directory -rm -rf drivers/staging/ -mkdir -p drivers/staging/ -for i in $STAGING_DRIVERS; do - if [ ! -d $GIT_TREE/$i ]; then - continue - fi - rm -rf $i - echo -e "Copying ${RED}STAGING${NORMAL} $GIT_TREE/$i/*.[ch]" - # staging drivers tend to have their own subdirs... - cp -a $GIT_TREE/$i drivers/staging/ - rm -f $i/*.mod.c -done - -for i in $DRIVERS_BT; do - mkdir -p $i - echo "Copying $GIT_TREE/$i/*.[ch]" - cp $GIT_TREE/$i/*.[ch] $i/ - cp $GIT_TREE/$i/Makefile $i/ - rm -f $i/*.mod.c -done - -# For rndis_wlan, we need a new rndis_host.ko, cdc_ether.ko and usbnet.ko -RNDIS_REQS="Makefile rndis_host.c cdc_ether.c usbnet.c" -DIR="drivers/net/usb" -for i in $RNDIS_REQS; do - echo "Copying $GIT_TREE/$DIR/$i" - cp $GIT_TREE/$DIR/$i $DIR/ -done - -DIR="drivers/net/ethernet/broadcom" -echo > $DIR/Makefile -cp $GIT_TREE/$DIR/b44.[ch] $DIR -# Not yet -echo "obj-\$(CONFIG_B44) += b44.o" >> $DIR/Makefile - -# Misc -mkdir -p drivers/misc/eeprom/ -cp $GIT_TREE/drivers/misc/eeprom/eeprom_93cx6.c drivers/misc/eeprom/ -cp $GIT_TREE/drivers/misc/eeprom/Makefile drivers/misc/eeprom/ - -DIR="drivers/net/wireless" -# Drivers part of the wireless directory -for i in $DRIVER_FILES; do - cp $GIT_TREE/$DIR/$i $DIR/ -done - -# Top level wireless driver Makefile -cp $GIT_TREE/$DIR/Makefile $DIR - -# Compat stuff -COMPAT="compat" -mkdir -p $COMPAT -echo "Copying $GIT_COMPAT_TREE/ files..." -cp $GIT_COMPAT_TREE/compat/*.c $COMPAT/ -cp $GIT_COMPAT_TREE/compat/Makefile $COMPAT/ -cp -a $GIT_COMPAT_TREE/udev . -cp -a $GIT_COMPAT_TREE/scripts $COMPAT/ -cp -a $GIT_COMPAT_TREE/include/linux/* include/linux/ -cp -a $GIT_COMPAT_TREE/include/net/* include/net/ -cp -a $GIT_COMPAT_TREE/include/trace/* include/trace/ -cp -a $GIT_COMPAT_TREE/include/pcmcia/* include/pcmcia/ -cp -a $GIT_COMPAT_TREE/include/crypto/* include/crypto/ -rm -f $COMPAT/*.mod.c - -# files we suck in for compat-wireless -export WSTABLE=" - net/wireless/ - net/wireless/ - net/mac80211/ - net/rfkill/ - drivers/net/wireless/ - net/bluetooth/ - drivers/bluetooth/ - drivers/net/atl1c/ - drivers/net/atl1e/ - drivers/net/atlx/ - include/linux/nl80211.h - include/linux/rfkill.h - include/net/cfg80211.h - include/net/mac80211.h - include/net/regulatory.h - include/net/cfg80211.h" - -# Stable pending, if -n was passed -if [[ "$GET_STABLE_PENDING" = y ]]; then - - if [ -z $NEXT_TREE ]; then - NEXT_TREE="/home/$USER/linux-next/" - if [ ! -d $NEXT_TREE ]; then - echo "Please tell me where your linux-next git tree is." - echo "You can do this by exporting its location as follows:" - echo - echo " export NEXT_TREE=/home/$USER/linux-next/" - echo - echo "If you do not have one you can clone the repository:" - echo " git clone git://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git" - exit 1 - fi - else - echo "You said to use git tree at: $NEXT_TREE for linux-next" - fi - - LAST_DIR=$PWD - cd $GIT_TREE - if [ -f localversion* ]; then - echo -e "You should be using a stable tree to use the -s option" - exit 1 - fi - - # we now assume you are using a stable tree - cd $GIT_TREE - LAST_STABLE_UPDATE=$(git describe --abbrev=0) - cd $NEXT_TREE - PENDING_STABLE_DIR="pending-stable/" - - rm -rf $PENDING_STABLE_DIR - - git tag -l | grep $LAST_STABLE_UPDATE 2>&1 > /dev/null - if [[ $? -ne 0 ]]; then - echo -e "${BLUE}Tag $LAST_STABLE_UPDATE not found on $NEXT_TREE tree: bailing out${NORMAL}" - exit 1 - fi - echo -e "${GREEN}Generating stable cherry picks... ${NORMAL}" - echo -e "\nUsing command on directory $PWD:" - echo -e "\ngit format-patch --grep=\"stable@kernel.org\" -o $PENDING_STABLE_DIR ${LAST_STABLE_UPDATE}.. $WSTABLE" - git format-patch --grep="stable@kernel.org" -o $PENDING_STABLE_DIR ${LAST_STABLE_UPDATE}.. $WSTABLE - if [ ! -d ${LAST_DIR}/${PENDING_STABLE_DIR} ]; then - echo -e "Assumption that ${LAST_DIR}/${PENDING_STABLE_DIR} directory exists failed" - exit 1 - fi - echo -e "${GREEN}Purging old stable cherry picks... ${NORMAL}" - rm -f ${LAST_DIR}/${PENDING_STABLE_DIR}/*.patch - cp ${PENDING_STABLE_DIR}/*.patch ${LAST_DIR}/${PENDING_STABLE_DIR}/ - if [ -f ${LAST_DIR}/${PENDING_STABLE_DIR}/.ignore ]; then - for i in $(cat ${LAST_DIR}/${PENDING_STABLE_DIR}/.ignore) ; do - echo -e "Skipping $i from generated stable patches..." - rm -f ${LAST_DIR}/${PENDING_STABLE_DIR}/*$i* - done - fi - echo -e "${GREEN}Updated stable cherry picks, review with git diff and update hunks with ./scripts/admin-update.sh -s refresh${NORMAL}" - cd $LAST_DIR -fi - -# Refresh patches using quilt -patchRefresh() { - if [ -d patches.orig ] ; then - rm -rf .pc patches/series - else - mkdir patches.orig - fi - - export QUILT_PATCHES=$1 - - mv -u $1/* patches.orig/ - - for i in patches.orig/*.patch; do - if [ ! -f "$i" ]; then - echo -e "${RED}No patches found in $1${NORMAL}" - break; - fi - echo -e "${GREEN}Refresh backport patch${NORMAL}: ${BLUE}$i${NORMAL}" - quilt import $i - quilt push -f - RET=$? - if [[ $RET -ne 0 ]]; then - echo -e "${RED}Refreshing $i failed${NORMAL}, update it" - echo -e "use ${CYAN}quilt edit [filename]${NORMAL} to apply the failed part manually" - echo -e "use ${CYAN}quilt refresh${NORMAL} after the files are corrected and rerun this script" - cp patches.orig/README $1/README - exit $RET - fi - QUILT_DIFF_OPTS="-p" quilt refresh -p ab --no-index --no-timestamp - done - quilt pop -a - - cp patches.orig/README $1/README - rm -rf patches.orig .pc $1/series -} - -ORIG_CODE=$(find ./ -type f -name \*.[ch] | - egrep -v "^./compat/|include/linux/compat" | - xargs wc -l | tail -1 | awk '{print $1}') -printf "\n${CYAN}compat-wireless code metrics${NORMAL}\n\n" > $CODE_METRICS -printf "${PURPLE}%10s${NORMAL} - Total upstream lines of code being pulled\n" $ORIG_CODE >> $CODE_METRICS - -for dir in $EXTRA_PATCHES; do - LAST_ELEM=$dir -done - -for dir in $EXTRA_PATCHES; do - if [[ ! -d $dir ]]; then - echo -e "${RED}Patches: $dir empty, skipping...${NORMAL}\n" - continue - fi - if [[ $LAST_ELEM = $dir && "$REFRESH" = y ]]; then - patchRefresh $dir - fi - - FOUND=$(find $dir/ -maxdepth 1 -name \*.patch | wc -l) - if [ $FOUND -eq 0 ]; then - continue - fi - for i in $dir/*.patch; do - echo -e "${GREEN}Applying backport patch${NORMAL}: ${BLUE}$i${NORMAL}" - patch -p1 -N -t < $i - RET=$? - if [[ $RET -ne 0 ]]; then - echo -e "${RED}Patching $i failed${NORMAL}, update it" - exit $RET - fi - done - nagometer $dir $ORIG_CODE >> $CODE_METRICS -done - -DIR="$PWD" -cd $GIT_TREE -GIT_DESCRIBE=$(git describe) -GIT_BRANCH=$(git branch --no-color |sed -n 's/^\* //p') -GIT_BRANCH=${GIT_BRANCH:-master} -GIT_REMOTE=$(git config branch.${GIT_BRANCH}.remote) -GIT_REMOTE=${GIT_REMOTE:-origin} -GIT_REMOTE_URL=$(git config remote.${GIT_REMOTE}.url) -GIT_REMOTE_URL=${GIT_REMOTE_URL:-unknown} -echo -e "${GREEN}Updated${NORMAL} from local tree: ${BLUE}${GIT_TREE}${NORMAL}" -echo -e "Origin remote URL: ${CYAN}${GIT_REMOTE_URL}${NORMAL}" -cd $DIR -if [ -d ./.git ]; then - if [[ ${POSTFIX_RELEASE_TAG} != "" ]]; then - echo -e "$(git describe)-${POSTFIX_RELEASE_TAG}" > compat_version - else - echo -e "$(git describe)" > compat_version - fi - - cd $GIT_TREE - TREE_NAME=${GIT_REMOTE_URL##*/} - - echo $TREE_NAME > $DIR/compat_base_tree - echo $GIT_DESCRIBE > $DIR/compat_base_tree_version - - case $TREE_NAME in - "wireless-testing.git") # John's wireless-testing - # We override the compat_base_tree_version for wireless-testing - # as john keeps the Linus' tags and does not write a tag for his - # tree himself so git describe would yield a v2.6.3x.y-etc but - # what is more useful is just the wireless-testing master tag - MASTER_TAG=$(git tag -l| grep master | tail -1) - echo $MASTER_TAG > $DIR/compat_base_tree_version - echo -e "This is a ${RED}wireless-testing.git${NORMAL} compat-wireless release" - ;; - "linux-next.git") # The linux-next integration testing tree - MASTER_TAG=$(git tag -l| grep next | tail -1) - echo $MASTER_TAG > $DIR/master-tag - echo -e "This is a ${RED}linux-next.git${NORMAL} compat-wireless release" - ;; - "linux-stable.git") # Greg's all stable tree - echo -e "This is a ${GREEN}linux-stable.git${NORMAL} compat-wireless release" - ;; - "linux-2.6.git") # Linus' 2.6 tree - echo -e "This is a ${GREEN}linux-2.6.git${NORMAL} compat-wireless release" - ;; - *) - ;; - esac - - cd $DIR - echo -e "\nBase tree: ${GREEN}$(cat compat_base_tree)${NORMAL}" >> $CODE_METRICS - echo -e "Base tree version: ${PURPLE}$(cat compat_base_tree_version)${NORMAL}" >> $CODE_METRICS - echo -e "compat-wireless release: ${YELLOW}$(cat compat_version)${NORMAL}" >> $CODE_METRICS - - cat $CODE_METRICS -fi - -./scripts/driver-select restore diff --git a/openairITS/mac/DOT11/scripts/alx-enable b/openairITS/mac/DOT11/scripts/alx-enable deleted file mode 100755 index e04a7621d5..0000000000 --- a/openairITS/mac/DOT11/scripts/alx-enable +++ /dev/null @@ -1,47 +0,0 @@ -#!/bin/bash -# -# Copyright 2012 Luis R. Rodriguez -# -# Makes sure either alx (new) or atl1c (old) -# is enabled to be used. This allows us to choose any driver without -# blacklisting each other. - -. /usr/lib/compat-wireless/modlib.sh - -if [[ $UID -ne 0 ]]; then - echo "Run with root privileges" - exit -fi - -ALX_NEW="alx" -ALX_OLD="atl1c" - -# Appended to module file at the end when we want to ignore one -USAGE="Usage: $0 [ $ALX_NEW | $ALX_OLD ]" - -function enable_alx { - module_disable $ALX_OLD - for i in $ALX_NEW; do - module_enable $i - done -} - -# Default behavior: disables the old atl1c driver and enables alx -if [ $# -eq 0 ]; then - enable_alx - exit -elif [ $# -ne 1 ]; then - echo "$USAGE" - exit -fi - -MODULE=$1 -if [ "$MODULE" == "atl1c" ]; then - module_disable $ALX_NEW - module_enable $ALX_OLD -elif [ "$MODULE" == "alx" ]; then - enable_alx -else - echo "$USAGE" - exit -fi diff --git a/openairITS/mac/DOT11/scripts/athenable b/openairITS/mac/DOT11/scripts/athenable deleted file mode 100755 index c9b67a0ab2..0000000000 --- a/openairITS/mac/DOT11/scripts/athenable +++ /dev/null @@ -1,46 +0,0 @@ -#!/bin/bash -# -# Copyright 2007 Luis R. Rodriguez -# -# Makes sure either ath5k or MadWifi are ready to be used. This allows -# us to choose any driver without blacklisting each other. - -. /usr/lib/compat-wireless/modlib.sh - -if [[ $UID -ne 0 ]]; then - echo "Run with root privileges" - exit -fi - -ATH5K="ath5k" -ATH9K="ath9k" -MADWIFI="ath_pci" -# Appended to module file at the end when we want to ignore one -IGNORE_SUFFIX=".ignore" -USAGE="Usage: $0 [ ath5k | madwifi ]" - -# Default behavior: disables any MadWifi driver present and makes sure -# ath5k is enabled -if [ $# -eq 0 ]; then - module_disable $MADWIFI - module_enable $ATH5K - module_enable $ATH9K - exit -elif [ $# -ne 1 ]; then - echo "$USAGE" - exit -fi - -MODULE=$1 -if [ "$MODULE" == "ath5k" ]; then - module_disable $MADWIFI - module_enable $ATH5K - module_enable $ATH9K -elif [ "$MODULE" == "madwifi" ]; then - module_disable $ATH5K - module_disable $ATH9K - module_enable $MADWIFI -else - echo "$USAGE" - exit -fi diff --git a/openairITS/mac/DOT11/scripts/athload b/openairITS/mac/DOT11/scripts/athload deleted file mode 100755 index 01b3072d11..0000000000 --- a/openairITS/mac/DOT11/scripts/athload +++ /dev/null @@ -1,57 +0,0 @@ -#!/bin/bash -# Copyright 2007 Luis R. Rodriguez -# -# Loads ath5k or madwifi - -. /usr/lib/compat-wireless/modlib.sh - -if [[ $UID -ne 0 ]]; then - echo "Run with root privileges" - exit -fi - - -USAGE="Usage: $0 [ ath5k | madwifi ]" - -# Default behavior: unload MadWifi and load ath5k -if [ $# -eq 0 ]; then - athenable ath5k - exit -elif [ $# -ne 1 ]; then - echo "$USAGE" - exit -fi - -MODULE=$1 -if [ "$MODULE" == "ath5k" ]; then - madwifi-unload - athenable ath5k - modprobe ath5k - CHECK=`modprobe -l ath5k` - if [ ! -z $CHECK ]; then - echo "ath5k loaded successfully" - fi - modprobe ath9k - CHECK=`modprobe -l ath9k` - if [ ! -z $CHECK ]; then - echo "ath9k loaded successfully" - fi -elif [ "$MODULE" == "madwifi" ]; then - CHECK=`modprobe -l ath5k` - if [ ! -z $CHECK ]; then - echo "ath5k currently loaded, going to try to unload the module..." - modprobe -r --ignore-remove ath5k - fi - athenable madwifi - # MadWifi may be loaded, but it doesn't mean devices - # currently available were picked up - madwifi-unload 2>&1 > /dev/null - modprobe ath_pci - CHECK=`modprobe -l ath_pci` - if [ ! -z $CHECK ]; then - echo "MadWifi loaded successfully!" - fi -else - echo "$USAGE" - exit -fi diff --git a/openairITS/mac/DOT11/scripts/b43enable b/openairITS/mac/DOT11/scripts/b43enable deleted file mode 100755 index b0b9851fc8..0000000000 --- a/openairITS/mac/DOT11/scripts/b43enable +++ /dev/null @@ -1,59 +0,0 @@ -#!/bin/bash -# -# Copyright 2007 Luis R. Rodriguez -# -# Makes sure either b43, b43legacy (new mac80211 drivers) or bcm43xx -# is enabled to be used. This allows us to choose any driver without -# blacklisting each other. - -. /usr/lib/compat-wireless/modlib.sh - -if [[ $UID -ne 0 ]]; then - echo "Run with root privileges" - exit -fi - -B43S="b43 b43legacy" -B43_OLD="bcm43xx" -B43_PROP="wl" - -# Appended to module file at the end when we want to ignore one -USAGE="Usage: $0 [ b43 | bcm43xx | wl ]" - -function enable_b43 { - module_disable $B43_OLD - module_disable $B43_PROP - for i in $B43S; do - module_enable $i - done -} - -# Default behavior: disables the old bcm43xx driver and enables b43 -# and b43legacy -if [ $# -eq 0 ]; then - enable_b43 - exit -elif [ $# -ne 1 ]; then - echo "$USAGE" - exit -fi - -MODULE=$1 -if [ "$MODULE" == "bcm43xx" ]; then - for i in $B43S; do - module_disable $i - done - module_disable $B43_PROP - module_enable $B43_OLD -elif [ "$MODULE" == "wl" ]; then - for i in $B43S; do - module_disable $i - done - module_disable $B43_OLD - module_enable $B43_PROP -elif [ "$MODULE" == "b43" ]; then - enable_b43 -else - echo "$USAGE" - exit -fi diff --git a/openairITS/mac/DOT11/scripts/b43load b/openairITS/mac/DOT11/scripts/b43load deleted file mode 100755 index 5114ffa47a..0000000000 --- a/openairITS/mac/DOT11/scripts/b43load +++ /dev/null @@ -1,65 +0,0 @@ -#!/bin/bash -# Copyright 2007 Luis R. Rodriguez -# -# Loads new broadcom drivers (b43 and b43legacy) or the old ones (bcm43xx) - -. /usr/lib/compat-wireless/modlib.sh - -if [[ $UID -ne 0 ]]; then - echo "Run with root privileges" - exit -fi - - -USAGE="Usage: $0 [ b43 | bcm43xx ]" - -# Default behavior: unload bcm43xx and load b43 and b43legacy -if [ $# -eq 0 ]; then - 1=b43 -elif [ $# -ne 1 ]; then - echo "$USAGE" - exit -fi - -MODULE=$1 -if [ "$MODULE" == "b43" ]; then - grep bcm43xx /proc/modules 2>&1 > /dev/null - if [ $? -eq 0 ]; then - echo Unloading $i... - modprobe -r --ignore-remove bcm43xx - fi - # Enables both b43 and b43legacy - b43enable b43 - modprobe b43 - modprobe b43legacy - CHECK=`modprobe -l b43` - if [ ! -z $CHECK ]; then - echo "b43 loaded successfully" - fi - CHECK=`modprobe -l b43legacy` - if [ ! -z $CHECK ]; then - echo "b43legacy loaded successfully" - fi -elif [ "$MODULE" == "bcm43xx" ]; then - CHECK=`modprobe -l b43` - if [ ! -z $CHECK ]; then - echo "b43 currently loaded, going to try to unload the module..." - modprobe -r --ignore-remove b43 - fi - CHECK=`modprobe -l b43legacy` - if [ ! -z $CHECK ]; then - echo "b43legacy currently loaded, going to try to unload the module..." - modprobe -r --ignore-remove b43legacy - fi - b43enable bcm43xx - # bcm43xx may be loaded already lets remove them first - modprobe -r --ignore-remov bcm43xx 2>&1 > /dev/null - modprobe bcm43xx - CHECK=`modprobe -l bcm43xx` - if [ ! -z $CHECK ]; then - echo "bcm43xx loaded successfully!" - fi -else - echo "$USAGE" - exit -fi diff --git a/openairITS/mac/DOT11/scripts/btunload.sh b/openairITS/mac/DOT11/scripts/btunload.sh deleted file mode 100755 index cc56613851..0000000000 --- a/openairITS/mac/DOT11/scripts/btunload.sh +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/bash -MODULES="$MODULES ath3k bcm203x bluecard_cs bnep bpa10x bt3c_cs btmrvl btmrvl_sdio btsdio" -MODULES="$MODULES btusb btuart_cs cmtp dtl1_cs hidp hci_vhci hci_uart rfcomm sco bluetooth l2cap" -echo Stoping bluetooth service.. -/etc/init.d/bluetooth stop -/etc/init.d/bluetooth status - -for i in $MODULES; do - grep ^$i /proc/modules 2>&1 > /dev/null - if [ $? -eq 0 ]; then - echo Unloading $i... - modprobe -r --ignore-remove $i - fi -done diff --git a/openairITS/mac/DOT11/scripts/check_config.sh b/openairITS/mac/DOT11/scripts/check_config.sh deleted file mode 100755 index 1a08442761..0000000000 --- a/openairITS/mac/DOT11/scripts/check_config.sh +++ /dev/null @@ -1,34 +0,0 @@ -#!/usr/bin/env bash -# This script checks the compat-wireless configuration file and if changes were made -# regenerates the compat_autoconf header. - -# These variables are expected to be exported: -#COMPAT_CONFIG=".config" -#COMPAT_CONFIG_CW="config" -#CONFIG_CHECK=".${COMPAT_CONFIG}.md5" -#COMPAT_AUTOCONF="include/linux/compat_autoconf.h" - -function gen_compat_autoconf { - echo "./scripts/gen-compat-autoconf.sh $COMPAT_CONFIG $COMPAT_CONFIG_CW > $COMPAT_AUTOCONF" - ./scripts/gen-compat-autoconf.sh $COMPAT_CONFIG $COMPAT_CONFIG_CW > $COMPAT_AUTOCONF - md5sum $COMPAT_CONFIG $COMPAT_CONFIG_CW > $CONFIG_CHECK -} - -which md5sum 2>&1 > /dev/null -if [ $? -ne 0 ]; then - echo "md5sum required to detect changes on config file" - exit -1 -fi - -if [ ! -f $CONFIG_CHECK ]; then - gen_compat_autoconf - exit -fi - -md5sum -c $CONFIG_CHECK 2> /dev/null 1>/dev/null - -if [ $? -ne 0 ]; then - echo "Changes to compat-wireless's configuration was detected, regenerating autoconf..." - gen_compat_autoconf -fi - diff --git a/openairITS/mac/DOT11/scripts/check_depmod b/openairITS/mac/DOT11/scripts/check_depmod deleted file mode 100755 index f127a6a667..0000000000 --- a/openairITS/mac/DOT11/scripts/check_depmod +++ /dev/null @@ -1,83 +0,0 @@ -#!/bin/bash -# Copyright 2009 Luis R. Rodriguez -# -# Ensures your distribution likes to prefer updates/ over the kernel/ -# search updates built-in - -# Seems Mandriva has an $DEPMOD_DIR but it doesn't have any files, -# so lets deal with those distributions. -DEPMOD_CONF="/etc/depmod.conf" -DEPMOD_CONF_TMP="$DEPMOD_CONF.compat-wireless.old" -DEPMOD_DIR="/etc/depmod.d/" -COMPAT_DEPMOD_FILE=compat-wireless.conf -GREP_REGEX_UPDATES="^[[:space:]]*search.*[[:space:]]updates\([[:space:]]\|$\)" -GREP_REGEX_SEARCH="^[[:space:]]*search[[:space:]].\+$" -DEPMOD_CMD="depmod" - -function add_compat_depmod_conf { - echo "NOTE: Your distribution lacks an $DEPMOD_DIR directory with " - echo "updates/ directory being prioritized for modules, we're adding " - echo "one for you." - mkdir -p $DEPMOD_DIR - FIRST_FILE=$(ls $DEPMOD_DIR|head -1) - [ -n "$FIRST_FILE" ] && while [[ $FIRST_FILE < $COMPAT_DEPMOD_FILE ]]; do - COMPAT_DEPMOD_FILE="0$COMPAT_DEPMOD_FILE" - done - echo "search updates" > $DEPMOD_DIR/$COMPAT_DEPMOD_FILE -} - -function add_global_depmod_conf { - echo "NOTE: Your distribution lacks updates/ directory being" - echo "prioritized for modules, we're adding it to $DEPMOD_CONF." - rm -f $DEPMOD_CONF_TMP - [ -f $DEPMOD_CONF ] && cp -f $DEPMOD_CONF $DEPMOD_CONF_TMP - echo "search updates" > $DEPMOD_CONF - [ -f $DEPMOD_CONF_TMP ] && cat $DEPMOD_CONF_TMP >> $DEPMOD_CONF -} - -function depmod_updates_ok { - echo "depmod will prefer updates/ over kernel/ -- OK!" -} - -function add_depmod_conf { - if [ -f "$DEPMOD_CONF" ]; then - add_global_depmod_conf - else - DEPMOD_VERSION=$($DEPMOD_CMD --version | cut -d" " -f2 | sed "s/\.//") - if [[ $DEPMOD_VERSION -gt 36 ]]; then - add_compat_depmod_conf - else - add_global_depmod_conf - fi - fi -} - -# ============================================================================= -# === MAIN ==================================================================== -# ============================================================================= - -GREP_FILES="" -[ -f $DEPMOD_CONF ] && GREP_FILES="$DEPMOD_CONF" -if [ -d $DEPMOD_DIR ]; then - DEPMOD_FILE_COUNT=$(ls $DEPMOD_DIR | wc -l) - [[ $DEPMOD_FILE_COUNT -gt 0 ]] && GREP_FILES="$GREP_FILES $DEPMOD_DIR/*" -fi - -if [ -n "$GREP_FILES" ]; then - grep -q "$GREP_REGEX_SEARCH" $GREP_FILES - if [[ $? -eq 0 ]]; then - grep -q "$GREP_REGEX_UPDATES" $GREP_FILES - if [[ $? -eq 0 ]]; then - depmod_updates_ok - else - add_depmod_conf - fi - else - depmod_updates_ok - fi -else - depmod_updates_ok -fi - -exit 0 - diff --git a/openairITS/mac/DOT11/scripts/compress_modules b/openairITS/mac/DOT11/scripts/compress_modules deleted file mode 100755 index cf2a76cd5f..0000000000 --- a/openairITS/mac/DOT11/scripts/compress_modules +++ /dev/null @@ -1,40 +0,0 @@ -#!/bin/bash -# To be used by distributions using compressed modules - -COMPRESSION_FOUND="n" -COUNT=0; - -for i in $(modprobe -l mac80211); do - let COUNT=$COUNT+1 - i=${i##*/} - if [ "$i" = "mac80211.ko.gz" ]; then - COMPRESSION_FOUND="y" - continue - fi -done - -if [ $COUNT -gt 2 ]; then - echo "More than two mac80211 modules are detected, please report this." - exit -fi - -if [ $COMPRESSION_FOUND = "n" ]; then - exit -fi - -DIRS="$KLIB/$KMODDIR/net/mac80211/" -# This handles both drivers/net/ and drivers/net/wireless/ -DIRS="$DIRS $KLIB/$KMODDIR/net/" -DIRS="$DIRS $KLIB/$KMODDIR/drivers/ssb/" -DIRS="$DIRS $KLIB/$KMODDIR/drivers/net/usb/" -DIRS="$DIRS $KLIB/$KMODDIR/drivers/net/wireless/" -DIRS="$DIRS $KLIB/$KMODDIR/drivers/misc/eeprom/" - -for i in $DIRS; do - if [ ! -d $i ]; then - continue; - fi - for driver in $(find $i -type f -name *.ko); do - gzip -9 $driver - done -done diff --git a/openairITS/mac/DOT11/scripts/driver-select b/openairITS/mac/DOT11/scripts/driver-select deleted file mode 100755 index c8aff636cd..0000000000 --- a/openairITS/mac/DOT11/scripts/driver-select +++ /dev/null @@ -1,499 +0,0 @@ -#!/usr/bin/env bash -# Copyright 2009 Luis R. Rodriguez -# -# This script allows you to select your compat-wireless driver and -# reduce compilation time. - -COMPAT_CONFIG_CW="config.mk" -DRIVERS_MAKEFILE="drivers/net/wireless/Makefile" -ATH_MAKEFILE="drivers/net/wireless/ath/Makefile" -ATH9K_MAKEFILE="drivers/net/wireless/ath/ath9k/Makefile" -BRCM80211_MAKEFILE="drivers/net/wireless/brcm80211/Makefile" -RT2X00_MAKEFILE="drivers/net/wireless/rt2x00/Makefile" -NET_WIRELESS_MAKEFILE="net/wireless/Makefile" -EEPROM_MAKEFILE="drivers/misc/eeprom/Makefile" -DRIVERS_NET_ATHEROS="drivers/net/ethernet/atheros/Makefile" -DRIVERS_NET_BROADCOM="drivers/net/ethernet/broadcom/Makefile" -DRIVERS_NET_USB_MAKEFILE="drivers/net/usb/Makefile" -SSB_MAKEFILE="drivers/ssb/Makefile" -BCMA_MAKEFILE="drivers/bcma/Makefile" - -# used to backup files from foo to foo.${BACKUP_EXT} -# If you change this also modify restore_compat() and -# restore_file() below I couldn't find a way to use -# the $BACKUP_EXT there. -BACKUP_EXT="bk" - -# Pretty colors -GREEN="\033[01;32m" -YELLOW="\033[01;33m" -NORMAL="\033[00m" -BLUE="\033[34m" -RED="\033[31m" -PURPLE="\033[35m" -CYAN="\033[36m" -UNDERLINE="\033[02m" - -SUPPORTED_80211_DRIVERS="ath5k ath9k ath9k_ap ath9k_htc carl9170 ath6kl b43 zd1211rw rt2x00 wl1251 wl12xx brcmsmac brcmfmac" - -# b43 needs some more work for driver-select, the SSB stuff, plus -# what if you update b44 but not b43? It will bust. -SUPPORTED_ETH_DRIVERS="atl1 atl2 atl1e atl1c alx" - -function usage { - echo -e "${GREEN}Usage${NORMAL}: ${BOLD}$0${NORMAL} [ ${PURPLE}${NORMAL} | ${CYAN}${NORMAL} | ${GREEN}restore${NORMAL} ]" - - # These should match the switch below. - echo -e "Supported 802.11 drivers:" - for i in $SUPPORTED_80211_DRIVERS; do - echo -e "\t${PURPLE}${i}${NORMAL}" - done - - echo - echo -e "Supported Ethernet drivers:" - for i in $SUPPORTED_ETH_DRIVERS; do - echo -e "\t${PURPLE}${i}${NORMAL}" - done - - # These should match the switch below. - echo -e "\nSupported group drivers:" - echo -e "\t${CYAN}atheros${NORMAL} < ${PURPLE} ath5k ath9k carl9170 zd1211rw ath6kl ${NORMAL}>" - echo -e "\t${CYAN}ath${NORMAL} < ${PURPLE} ath5k ath9k carl9170 ath6kl ${NORMAL}>" - echo -e "\t${CYAN}brcm80211${NORMAL} < ${PURPLE} brcmsmac brcmfmac ${NORMAL}>" - echo -e "\t${CYAN}intel${NORMAL} < ${PURPLE} iwlwifi, iwlegacy ${NORMAL}>" - echo -e "\t${CYAN}rtl818x${NORMAL} < ${PURPLE} rtl8180 rtl8187 ${NORMAL}>" - echo -e "\t${CYAN}rtlwifi${NORMAL} < ${PURPLE} rtl8192ce ${NORMAL}>" - echo -e "\t${CYAN}ti${NORMAL} < ${PURPLE} wl1251 wl12xx (SPI and SDIO)${NORMAL}>" - - echo -e "\nSupported group drivers: Bluetooth & Ethernet:" - echo -e "\t${CYAN}atlxx${NORMAL} < ${PURPLE} atl1 atl2 atl1e alx${NORMAL}>" - echo -e "\t${CYAN}bt${NORMAL} < ${PURPLE} Linux bluetooth drivers ${NORMAL}>" - - echo -e "Restoring compat-wireless:" - echo -e "\t${GREEN}restore${NORMAL}: you can use this option to restore compat-wireless to the original state" -} - -function backup_file { - if [ -f $1.${BACKUP_EXT} ]; then - echo -e "Backup exists: ${CYAN}${1}.${BACKUP_EXT}${NORMAL}" - return - fi - echo -e "Backing up makefile: ${CYAN}${1}.${BACKUP_EXT}${NORMAL}" - cp $1 $1.bk -} - -function disable_makefile -{ - backup_file $1 - echo > $1 -} - -function select_driver -{ - backup_file $DRIVERS_MAKEFILE - perl -i -ne 'print if /'$1'\)/ ' $DRIVERS_MAKEFILE -} - -function select_drivers -{ - backup_file $DRIVERS_MAKEFILE - CONFIGS="" - COUNT=0 - for i in $@; do - if [[ "$CONFIGS" = "" ]]; then - CONFIGS="$i" - else - CONFIGS="${CONFIGS}|$i" - fi - done - egrep "$CONFIGS" $DRIVERS_MAKEFILE > ${DRIVERS_MAKEFILE}.tmp - mv ${DRIVERS_MAKEFILE}.tmp ${DRIVERS_MAKEFILE} -} - -function disable_lib80211 -{ - backup_file $NET_WIRELESS_MAKEFILE - perl -i -ne 'print if ! /LIB80211/ ' $NET_WIRELESS_MAKEFILE -} - -function disable_b44 { - backup_file $DRIVERS_NET_BROADCOM - perl -i -ne 'print if ! /CONFIG_B44/ ' $DRIVERS_NET_BROADCOM -} - -function disable_ssb -{ - disable_makefile ${SSB_MAKEFILE} - perl -i -ne 'print if ! /drivers\/ssb\//' Makefile -} - -function disable_bcma -{ - disable_makefile ${BCMA_MAKEFILE} - perl -i -ne 'print if ! /drivers\/bcma\//' Makefile -} - -function disable_rfkill -{ - backup_file Makefile - perl -i -ne 'print if ! /CONFIG_COMPAT_RFKILL/' Makefile -} - -function disable_eeprom -{ - disable_makefile ${EEPROM_MAKEFILE} - perl -i -ne 'print if ! /drivers\/misc\/eeprom\//' Makefile -} - -function disable_usbnet -{ - disable_makefile ${DRIVERS_NET_USB_MAKEFILE} - perl -i -ne 'print if ! /drivers\/net\/usb\//' Makefile -} - -function disable_usbnet { - perl -i -ne 'print if ! /CONFIG_COMPAT_NET_USB_MODULES/' Makefile -} - -function disable_ethernet { - perl -i -ne 'print if ! /CONFIG_COMPAT_NETWORK_MODULES/' Makefile -} - -function disable_var_03 { - perl -i -ne 'print if ! /CONFIG_COMPAT_VAR_MODULES/' Makefile -} - -function disable_bt { - perl -i -ne 'print if ! /CONFIG_COMPAT_BLUETOOTH/' Makefile -} - -function disable_80211 { - perl -i -ne 'print if ! /CONFIG_COMPAT_WIRELESS/' Makefile -} - -function disable_bt_usb_ethernet { - backup_file Makefile - disable_usbnet - disable_ethernet - disable_bt - disable_update-initramfs -} - -function disable_bt_usb_ethernet_var { - backup_file Makefile - disable_bt_usb_ethernet - disable_var_03 -} - -function enable_only_ethernet { - backup_file Makefile - backup_file $DRIVERS_NET_BROADCOM - backup_file $DRIVERS_NET_ATHEROS - disable_staging - disable_usbnet - disable_var_03 - disable_bt - # rfkill may be needed if you enable b44 as you may have b43 - disable_rfkill - disable_80211 -} - -function disable_var { - disable_ssb - disable_bcma - disable_usbnet - disable_eeprom - disable_update-initramfs -} - -function disable_var_01 { - disable_lib80211 - disable_var -} - -function disable_var_02 { - #var_01 with eeprom not disabled - disable_lib80211 - disable_ssb - disable_bcma - disable_usbnet - disable_update-initramfs -} - -function disable_staging { - backup_file Makefile - perl -i -ne 'print if ! /CONFIG_COMPAT_STAGING/ ' Makefile -} - -function disable_update-initramfs -{ - backup_file Makefile - perl -i -ne 'print if ! /update-initramfs/' Makefile -} - -function select_ath_driver -{ - backup_file $ATH_MAKEFILE - perl -i -ne 'print if /'$1'/ || /CONFIG_ATH_/ || /ath-objs/ || /regd.o/ || /hw.o/ || /key.o/' $ATH_MAKEFILE - disable_var_01 -} - -function select_ath9k_driver -{ - select_ath_driver CONFIG_ATH9K_HW - # In the future here we'll add stuff to disable ath9k_htc -} - -function select_ath9k_driver_ap -{ - select_ath9k_driver - backup_file $COMPAT_CONFIG_CW - perl -i -ne 'print if ! /CONFIG_COMPAT_ATH9K_RATE_CONTROL/ ' $COMPAT_CONFIG_CW -} - -function select_brcm80211_driver -{ - backup_file $BRCM80211_MAKEFILE - perl -i -ne 'print if /'$1'/ || /CONFIG_BRCMUTIL/ ' $BRCM80211_MAKEFILE -} - -function restore_file { - #ORIG=$(shell ${1%%.${BACKUP_EXT}}) - ORIG=${1%%.bk} - cp $1 $ORIG - rm -f $1 - echo -e "Restored makefile: ${CYAN}${ORIG}${NORMAL} (and removed backup)" -} - -function restore_compat { - #FILES=$(find ./ -type f -name *.$BACKUP_EXT) - FILES=$(find ./ -type f -name *.bk) - for i in $FILES; do - restore_file $i - done -} - -if [ $# -ne 1 ]; then - usage - exit -fi - -if [ ! -f compat_version ]; then - echo "Must run $0 from the compat-wireless top level directory" - exit -fi - -if [[ ! -f built-in.o ]]; then - if [[ "$1" != "restore" ]]; then - echo -e "${PURPLE}Processing new driver-select request...${NORMAL}" - fi -fi - -# Always backup the top level Makefile, unless restoring -if [[ "$1" != "restore" ]]; then - backup_file Makefile -fi - -# If a user selects a new driver make sure we clean up for them -# first and also restore the backup makefiles then. Otherwise -# we'll be trying to leave drivers on Makefiles which are not -# already there from a previous run. -if [ -f built-in.o ]; then - echo -e "${PURPLE}Old build found, going to clean this up first...${NORMAL}" - make clean - echo -e "${PURPLE}Restoring Makefiles...${NORMAL}" - ./$0 restore -fi - -case $1 in - restore) - restore_compat - ;; -# Group drivers - atheros) - select_drivers CONFIG_ATH_COMMON \ - CONFIG_COMPAT_ZD1211RW - disable_staging - disable_bt_usb_ethernet_var - disable_var_01 - ;; - ath) - disable_bt_usb_ethernet_var - select_drivers CONFIG_ATH_COMMON - disable_var_01 - ;; - intel) - select_drivers CONFIG_IWLWIFI \ - CONFIG_IWLEGACY \ - CONFIG_IPW - disable_staging - disable_var - disable_bt - disable_ethernet - disable_usbnet - ;; - iwlwifi) - select_driver CONFIG_IWLWIFI - disable_staging - disable_var_01 - disable_bt - disable_ethernet - disable_usbnet - ;; - iwlegacy) - select_driver CONFIG_IWLEGACY - disable_staging - disable_var_01 - disable_bt - disable_ethernet - disable_usbnet - ;; - rtl818x) - select_drivers CONFIG_RTL8180 CONFIG_RTL8187 - disable_staging - disable_bt_usb_ethernet - disable_ssb - disable_bcma - disable_lib80211 - ;; - rtlwifi) - select_drivers CONFIG_RTL8192CE CONFIG_RTLWIFI - disable_staging - disable_bt_usb_ethernet_var - disable_lib80211 - ;; - ti) - select_drivers CONFIG_WL1251 \ - CONFIG_WL12XX - disable_staging - disable_var_01 - ;; - brcm80211) - disable_staging - disable_bt_usb_ethernet_var - select_drivers CONFIG_BRCMUTIL \ - CONFIG_BRCMFMAC \ - CONFIG_BRCMSMAC - ;; -# Singular modules - ath5k) - disable_staging - disable_bt_usb_ethernet_var - select_driver CONFIG_ATH_COMMON - select_ath_driver CONFIG_ATH5K - #patch -p1 < enable-older-kernels/enable-2.6.23.patch - ;; - ath9k) - disable_staging - disable_bt_usb_ethernet_var - select_driver CONFIG_ATH_COMMON - select_ath9k_driver - ;; - ath9k_ap) - disable_staging - disable_bt_usb_ethernet_var - select_driver CONFIG_ATH_COMMON - select_ath9k_driver_ap - ;; - carl9170) - disable_staging - disable_bt_usb_ethernet_var - select_driver CONFIG_ATH_COMMON - select_ath_driver CONFIG_CARL9170 - ;; - ath9k_htc) - disable_staging - disable_bt_usb_ethernet_var - select_driver CONFIG_ATH_COMMON - select_ath9k_driver - ;; - ath6kl) - disable_staging - disable_bt_usb_ethernet_var - select_driver CONFIG_ATH_COMMON - select_ath_driver CONFIG_ATH6KL - ;; - brcmsmac) - disable_staging - disable_bt_usb_ethernet_var - select_drivers CONFIG_BRCMSMAC - select_brcm80211_driver CONFIG_BRCMSMAC CONFIG_BRCMUTIL - ;; - brcmfmac) - disable_staging - disable_bt_usb_ethernet_var - select_drivers CONFIG_BRCMFMAC - select_brcm80211_driver CONFIG_BRCMFMAC CONFIG_BRCMUTIL - ;; - zd1211rw) - select_driver CONFIG_COMPAT_ZD1211RW - disable_staging - disable_var_01 - ;; - b43) - disable_staging - disable_bt_usb_ethernet - disable_eeprom - disable_lib80211 - select_driver CONFIG_B43 - ;; - rt2x00) - select_driver CONFIG_RT2X00 - disable_staging - disable_bt_usb_ethernet - disable_var_02 - ;; - wl1251) - select_drivers CONFIG_WL1251 - disable_staging - disable_var_01 - ;; - wl12xx) - select_drivers CONFIG_WL12XX - disable_staging - disable_var_01 - ;; -# Ethernet and Bluetooth drivers - atl1) - enable_only_ethernet - disable_b44 - echo -e "obj-\$(CONFIG_ATL1) += atlx/" > $DRIVERS_NET_ATHEROS - ;; - atl2) - enable_only_ethernet - disable_b44 - echo -e "obj-\$(CONFIG_ATL2) += atlx/" > $DRIVERS_NET_ATHEROS - ;; - atl1e) - enable_only_ethernet - disable_b44 - echo -e "obj-\$(CONFIG_ATL1E) += atl1e/" > $DRIVERS_NET_ATHEROS - ;; - atl1c) - enable_only_ethernet - disable_b44 - echo -e "obj-\$(CONFIG_ATL1C) += atl1c/" > $DRIVERS_NET_ATHEROS - ;; - alx) - enable_only_ethernet - disable_b44 - echo -e "obj-\$(CONFIG_ALX) += alx/" > $DRIVERS_NET_ATHEROS - ;; - atlxx) - select_drivers CONFIG_ATL1 CONFIG_ATL2 CONFIG_ATL1E CONFIG_ALX - enable_only_ethernet - disable_b44 - disable_update-initramfs - ;; - bt) - select_driver CONFIG_BT - disable_var - disable_ethernet - disable_staging - disable_80211 - ;; - *) - echo "Unsupported driver" - exit - ;; -esac diff --git a/openairITS/mac/DOT11/scripts/gen-compat-autoconf.sh b/openairITS/mac/DOT11/scripts/gen-compat-autoconf.sh deleted file mode 100755 index c7bdd38d0b..0000000000 --- a/openairITS/mac/DOT11/scripts/gen-compat-autoconf.sh +++ /dev/null @@ -1,204 +0,0 @@ -#!/usr/bin/env bash -# -# Copyright 2007 Luis R. Rodriguez -# -# Use this to parse a small .config equivalent looking file to generate -# our own autoconf.h. This file has defines for each config option -# just like the kernels include/linux/autoconf.h -# -# XXX: consider using scripts/kconfig/confdata.c instead. -# On the downside this would require the user to have libc though. - -# This indicates which is the oldest kernel we support -# Update this if you are adding support for older kernels. -OLDEST_KERNEL_SUPPORTED="2.6.24" -COMPAT_RELEASE="compat_version" -KERNEL_RELEASE="compat_base_tree_version" -MULT_DEP_FILE=".compat_pivot_dep" - -if [ $# -ne 2 ]; then - echo "Usage $0 " - exit -fi - -COMPAT_CONFIG_1="$1" -COMPAT_CONFIG_2="$2" - -if [[ ! -f $COMPAT_CONFIG_1 || ! -f $COMPAT_CONFIG_2 ]]; then - echo "File $COMPAT_CONFIG_1 and $COMPAT_CONFIG_2 files must be present" - exit -fi - -if [ ! -f $COMPAT_RELEASE -o ! -f $KERNEL_RELEASE ]; then - echo "Error: $COMPAT_RELEASE or $KERNEL_RELEASE file is missing" - exit -fi - -CREL=$(cat $COMPAT_RELEASE | tail -1) -KREL=$(cat $KERNEL_RELEASE | tail -1) -DATE=$(date) - -# Defines a CONFIG_ option if not defined yet, this helps respect -# linux/autoconf.h -function define_config { - VAR=$1 - VALUE=$2 - case $VALUE in - n) # Try to undefine it - echo "#undef $VAR" - ;; - y) - echo "#ifndef $VAR" - echo "#define $VAR 1" - echo "#endif /* $VAR */ " - ;; - m) - echo "#ifndef $VAR" - echo "#define $VAR 1" - echo "#endif /* $VAR */ " - ;; - *) # Assume string - # XXX: add better checks to make sure what was on - # the right was indeed a string - echo "#ifndef $VAR" - echo "#define $VAR \"$VALUE\"" - echo "#endif /* $VAR */ " - ;; - esac -} - -# This deals with core compat-wireless kernel requirements. -function define_config_req { - VAR=$1 - echo "#ifndef $VAR" - echo -n "#error Compat-wireless requirement: $VAR must be enabled " - echo "in your kernel" - echo "#endif /* $VAR */" -} - -# This handles modules which have dependencies from the kernel -# which compat-wireless isn't providing yet either because -# the dependency is not available as kernel module or -# the module simply isn't provided by compat-wireless. -function define_config_dep { - VAR=$1 - VALUE=$2 - DEP=$3 - WARN_VAR="COMPAT_WARN_$VAR" - echo "#ifdef $DEP" - define_config $VAR $VALUE - echo "#else" - # XXX: figure out a way to warn only once - # define only once in case user tried to enable config option - # twice in config.mk - echo "#ifndef $WARN_VAR" - # Lets skip these for now.. they might be too annoying - #echo "#warning Skipping $VAR as $DEP was needed... " - #echo "#warning This just means $VAR won't be built and is not fatal." - echo "#define $WARN_VAR" - echo "#endif /* $VAR */" - echo "#endif /* $WARN_VAR */" -} - -# This handles options which have *multiple* dependencies from the kernel -function define_config_multiple_deps { - VAR=$1 - VALUE=$2 - DEP_ARRAY=$3 - - # First, put all ifdefs - for i in $(cat $MULT_DEP_FILE); do - echo "#ifdef $i" - done - - # Now put our option in the middle - define_config $VAR $VALUE - - # Now close all ifdefs - # First, put all ifdefs - for i in $(cat $MULT_DEP_FILE); do - echo "#endif" - done - -} - -function kernel_version_req { - VERSION=$(echo $1 | sed -e 's/\./,/g') - echo "#if (LINUX_VERSION_CODE < KERNEL_VERSION($VERSION))" - echo "#error Compat-wireless requirement: Linux >= $VERSION" - echo "#endif /* (LINUX_VERSION_CODE < KERNEL_VERSION($VERSION) */ " -} - -cat <= \3)/' -e 's/\(#ifdef \)\(CONFIG_[^:space:]*\)/#if defined(\2) || defined(\2_MODULE)/' - continue - ;; - 'ifndef+CONFIG_'* ) - echo "#$i" | sed -e 's/+/ /' -e 's/\(ifndef CONFIG_COMPAT_KERNEL_3_\)\([0-9]*\)/if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,\2,0))/' -e 's/\(ifndef CONFIG_COMPAT_KERNEL_2_6_\)\([0-9]*\)/if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,\2))/' -e 's/\(ifndef CONFIG_COMPAT_RHEL_\)\([0-9]*\)_\([0-9]*\)/if (!defined(RHEL_MAJOR) || RHEL_MAJOR != \2 || RHEL_MINOR < \3)/' -e 's/\(#ifndef \)\(CONFIG_[^:space:]*\)/#if !defined(\2) \&\& !defined(\2_MODULE)/' - continue - ;; - 'else+#CONFIG_'* | 'endif+#CONFIG_'* ) - echo "#$i */" |sed -e 's/+#/ \/* /g' - continue - ;; - CONFIG_* ) - # Get the element on the left of the "=" - VAR=$(echo $i | cut -d"=" -f 1) - # Get the element on the right of the "=" - VALUE=$(echo $i | cut -d"=" -f 2) - - # Handle core kernel module depenencies here. - case $VAR in - # ignore this, we have a special hanlder for this at the botttom - # instead. We still need to keep this in config.mk to let Makefiles - # know its enabled so just ignore it here. - CONFIG_MAC80211_QOS) - continue - ;; - esac - # Any other module which can *definitely* be built as a module goes here - define_config $VAR $VALUE - continue - ;; - esac -done - -# Deal with special cases. CONFIG_MAC80211_QOS is such a case. -# We handle this specially for different kernels we support. -if [ -f $KLIB_BUILD/Makefile ]; then - MAJORLEVEL=$(make -C $KLIB_BUILD kernelversion | sed -n 's/^\([0-9]\)\..*/\1/p') - SUBLEVEL=$(make -C $KLIB_BUILD kernelversion | sed -n 's/^\(2\.6\|[3-9]\)\.\([0-9]\+\).*/\2/p') - if [ $MAJORLEVEL -eq 2 -a $SUBLEVEL -le 22 ]; then - define_config CONFIG_MAC80211_QOS y - else # kernel >= 2.6.23 - # CONFIG_MAC80211_QOS on these kernels requires - # CONFIG_NET_SCHED and CONFIG_NETDEVICES_MULTIQUEUE - rm -f $MULT_DEP_FILE - echo CONFIG_NET_SCHED >> $MULT_DEP_FILE - echo CONFIG_NETDEVICES_MULTIQUEUE >> $MULT_DEP_FILE - define_config_multiple_deps CONFIG_MAC80211_QOS y $ALL_DEPS - rm -f $MULT_DEP_FILE - fi -fi -echo "#endif /* COMPAT_AUTOCONF_INCLUDED */" diff --git a/openairITS/mac/DOT11/scripts/gen-stable-release.sh b/openairITS/mac/DOT11/scripts/gen-stable-release.sh deleted file mode 100755 index 9764730a42..0000000000 --- a/openairITS/mac/DOT11/scripts/gen-stable-release.sh +++ /dev/null @@ -1,184 +0,0 @@ -#!/usr/bin/env bash -# Copyright 2009 Luis R. Rodriguez -# -# You can use this to make stable compat-wireless releases -# -# The assumption is you have the linux-2.6-allstable git tree on your $HOME -# git://git.kernel.org/pub/scm/linux/kernel/git/hpa/linux-2.6-allstable.git -# -# Local branches will be created based on the remote linux-2.6.X.y branches. -# If your branch already exists we will nuke it for you to avoid rebasing. -# -# If no kernel is specified we use the latest rc-release, which will be on the -# remove master branch. Your master branch should be clean. - -# Pretty colors -GREEN="\033[01;32m" -YELLOW="\033[01;33m" -NORMAL="\033[00m" -BLUE="\033[34m" -RED="\033[31m" -PURPLE="\033[35m" -CYAN="\033[36m" -UNDERLINE="\033[02m" - -# Note that this tree may not have the latest RC stuff, so you should also add -# Linus' tree as a remote and fetch those objects if you want to make an RC -# release instead. -ALL_STABLE_TREE="linux-stable" -STAGING=/tmp/staging/compat-wireless/ - -function usage() -{ - echo -e "Usage: ${GREEN}$1${NORMAL} ${BLUE}[ -n | -p | -c | -f | -i ]${NORMAL} ${CYAN}[ linux-2.6.X.y ]${NORMAL}" - echo - echo Examples usages: - echo - echo -e "${PURPLE}${1}${NORMAL}" - echo -e "${PURPLE}${1} ${CYAN}linux-2.6.29.y${NORMAL}" - echo -e "${PURPLE}${1} ${CYAN}linux-2.6.30.y${NORMAL}" - echo - echo -e "If no kernel is specified we try to make a release based on the latest RC kernel." - echo -en "If a kernel release is specified ${CYAN}X${NORMAL} is the next stable release " - echo -en "as ${CYAN}35${NORMAL} in ${CYAN}2.6.35.y${NORMAL}\n" - exit -} - -UPDATE_ARGS="" -POSTFIX_RELEASE_TAG="-" - -export GIT_TREE=$HOME/$ALL_STABLE_TREE -COMPAT_WIRELESS_DIR=$(pwd) -COMPAT_WIRELESS_BRANCH=$(git branch | grep \* | awk '{print $2}') - -cd $GIT_TREE -# --abbrev=0 on branch should work but I guess it doesn't on some releases -EXISTING_BRANCH=$(git branch | grep \* | awk '{print $2}') - -# target branch we want to use from hpa's tree, by default -# this respects the existing branch on the target kernel. -# You can override the target branch by specifying an argument -# to this script. -TARGET_BRANCH="$EXISTING_BRANCH" - -# By default we will not do a git fetch and reset of the branch, -# use -f if you want to force an update, this will delete all -# of your local patches so be careful. -FORCE_UPDATE="no" - -while [ $# -ne 0 ]; do - if [[ "$1" = "-s" ]]; then - UPDATE_ARGS="${UPDATE_ARGS} $1 refresh" - POSTFIX_RELEASE_TAG="${POSTFIX_RELEASE_TAG}s" - shift; continue; - fi - if [[ "$1" = "-n" ]]; then - UPDATE_ARGS="${UPDATE_ARGS} $1" - POSTFIX_RELEASE_TAG="${POSTFIX_RELEASE_TAG}n" - shift; continue; - fi - if [[ "$1" = "-p" ]]; then - UPDATE_ARGS="${UPDATE_ARGS} $1" - POSTFIX_RELEASE_TAG="${POSTFIX_RELEASE_TAG}p" - shift; continue; - fi - if [[ "$1" = "-c" ]]; then - UPDATE_ARGS="${UPDATE_ARGS} $1" - POSTFIX_RELEASE_TAG="${POSTFIX_RELEASE_TAG}c" - shift; continue; - fi - if [[ "$1" = "-f" ]]; then - FORCE_UPDATE="yes" - shift; continue; - fi - - if [[ $(expr "$1" : '^linux-') -eq 6 ]]; then - TARGET_BRANCH="$1" - shift; continue; - fi - - echo -e "Unexpected argument passed: ${RED}${1}${NORMAL}" - usage $0 - exit -done - -function check_for_updates() -{ - case $TARGET_BRANCH in - "master") # Preparing a new stable compat-wireless release based on an RC kernel - git checkout -f - git fetch - git reset --hard origin - ;; - *) # Based on a stable 2.6.x.y release, lets just move to the target branch - # we'll only ask for object updates if and only if you asked us to with -f, - # otherwise we eat up whatever you already have on your existing branch. - git checkout -f - git fetch - git branch -D $TARGET_BRANCH - git checkout -b $TARGET_BRANCH origin/$TARGET_BRANCH - ;; - esac -} - -# We will not update your linux-2.6-allstable git tree by default. You can force -# an update by two methods: -# -# a) Specifying a different target branch -# b) Specifying the -f flag to this script -if [[ "$FORCE_UPDATE" = "yes" || "$TARGET_BRANCH" != "$EXISTING_BRANCH" ]]; then - check_for_updates -else - echo -e "Skipping $ALL_STABLE_TREE git tree update checks for branch: $TARGET_BRANCH" -fi - -echo "On $ALL_STABLE_TREE: $TARGET_BRANCH" - -# At this point your linux-2.6-allstable tree should be up to date -# with the target kernel you want to use. Lets now make sure you are -# on matching compat-wireless branch. - -# This is a super hack, but let me know if you figure out a cleaner way -TARGET_KERNEL_RELEASE=$(make VERSION="linux-3" SUBLEVEL="" EXTRAVERSION=".y" kernelversion) - -if [[ $COMPAT_WIRELESS_BRANCH != $TARGET_KERNEL_RELEASE ]]; then - echo -e "You are on the compat-wireless ${GREEN}${COMPAT_WIRELESS_BRANCH}${NORMAL} but are " - echo -en "on the ${RED}${TARGET_KERNEL_RELEASE}${NORMAL} branch... " - echo -e "try changing to that first." - exit -fi - - -cd $COMPAT_WIRELESS_DIR -RELEASE=$(git describe --abbrev=0 | sed -e 's/v//g') -if [[ $POSTFIX_RELEASE_TAG != "-" ]]; then - RELEASE="${RELEASE}${POSTFIX_RELEASE_TAG}" -fi -RELEASE_TAR="$RELEASE.tar.bz2" - -rm -rf $STAGING -mkdir -p $STAGING -cp -a $COMPAT_WIRELESS_DIR $STAGING/$RELEASE -cd $STAGING/$RELEASE - -./scripts/admin-update.sh $UPDATE_ARGS -rm -rf $STAGING/$RELEASE/.git - -# Remove any gunk -echo -echo "Cleaning up the release ..." -make clean 2>&1 > /dev/null -find ./ -type f -name *.orig | xargs rm -f -find ./ -type f -name *.rej | xargs rm -f - -cd $STAGING/ - -echo "Creating $RELEASE_TAR ..." -tar -jcf $RELEASE_TAR $RELEASE/ - -echo -echo "Compat-wireles release: $RELEASE" -echo "Size: $(du -h $RELEASE_TAR)" -echo "sha1sum: $(sha1sum $RELEASE_TAR)" -echo -echo "Release: ${STAGING}$RELEASE_TAR" diff --git a/openairITS/mac/DOT11/scripts/iwl-enable b/openairITS/mac/DOT11/scripts/iwl-enable deleted file mode 100755 index b18fdc2b4a..0000000000 --- a/openairITS/mac/DOT11/scripts/iwl-enable +++ /dev/null @@ -1,56 +0,0 @@ -#!/bin/bash -# -# Copyright 2007 Luis R. Rodriguez -# -# Makes sure either iwlagn (new) or iwl4965 (old) -# is enabled to be used. This allows us to choose any driver without -# blacklisting each other. - -. /usr/lib/compat-wireless/modlib.sh - -if [[ $UID -ne 0 ]]; then - echo "Run with root privileges" - exit -fi - -IWL_NEW="iwlagn" -IWL_OLD="iwl4965" - -# Appended to module file at the end when we want to ignore one -USAGE="Usage: $0 [ $IWL_NEW | $IWL_OLD | iwlwifi ]" - -function enable_iwlwifi { - for i in $IWL_OLD $IWL_NEW; do - module_disable $i - done - module_enable iwlwifi -} - -function enable_iwlagn { - module_disable $IWL_OLD - for i in $IWL_NEW; do - module_enable $i - done -} - -# Default behavior: disables the old iwl4965 driver and enables iwlagn -if [ $# -eq 0 ]; then - enable_iwlagn - exit -elif [ $# -ne 1 ]; then - echo "$USAGE" - exit -fi - -MODULE=$1 -if [ "$MODULE" == "iwl4965" ]; then - module_disable $IWL_NEW - module_enable $IWL_OLD -elif [ "$MODULE" == "iwlagn" ]; then - enable_iwlagn -elif [ "$MODULE" == "iwlwifi" ]; then - enable_iwlwifi -else - echo "$USAGE" - exit -fi diff --git a/openairITS/mac/DOT11/scripts/iwl-load b/openairITS/mac/DOT11/scripts/iwl-load deleted file mode 100755 index 96b6d89182..0000000000 --- a/openairITS/mac/DOT11/scripts/iwl-load +++ /dev/null @@ -1,58 +0,0 @@ -#!/bin/bash -# Copyright 2008 Luis R. Rodriguez -# -# Loads new Intel iwl (iwlagn) or the old ones (iwl4965) - -. /usr/lib/compat-wireless/modlib.sh - -IWL_OLD="iwl4965" -IWL_NEW="iwlagn" - -if [[ $UID -ne 0 ]]; then - echo "Run with root privileges" - exit -fi - - -USAGE="Usage: $0 [ iwlagn | iwl4965 ]" - -# Default behavior: unload iwl4965 and load iwlagn -if [ $# -eq 0 ]; then - 1=iwlagn -elif [ $# -ne 1 ]; then - echo "$USAGE" - exit -fi - -MODULE=$1 -if [ "$MODULE" == "iwlagn" ]; then - grep iwl4965 /proc/modules 2>&1 > /dev/null - if [ $? -eq 0 ]; then - echo Unloading $i... - modprobe -r --ignore-remove iwl4965 - fi - # Enables both b43 and b43legacy - iwl-enable iwlagn - modprobe iwlagn - CHECK=`modprobe -l iwlagn` - if [ ! -z $CHECK ]; then - echo "iwlagn loaded successfully" - fi -elif [ "$MODULE" == "iwl4965" ]; then - CHECK=`modprobe -l iwlagn` - if [ ! -z $CHECK ]; then - echo "iwlagn currently loaded, going to try to unload the module..." - modprobe -r --ignore-remove iwlagn - fi - iwl-enable iwl4965 - # iwl4965 may be loaded already lets remove it first - modprobe -r --ignore-remov iwl4965 2>&1 > /dev/null - modprobe iwl4965 - CHECK=`modprobe -l iwl4965` - if [ ! -z $CHECK ]; then - echo "iwl4965 loaded successfully!" - fi -else - echo "$USAGE" - exit -fi diff --git a/openairITS/mac/DOT11/scripts/madwifi-unload b/openairITS/mac/DOT11/scripts/madwifi-unload deleted file mode 100755 index 0cde2865f3..0000000000 --- a/openairITS/mac/DOT11/scripts/madwifi-unload +++ /dev/null @@ -1,58 +0,0 @@ -#!/bin/sh -# Copyright 2006 Kel Modderman -# -# Taken from madwifi scripts. This unloads madwifi - -: ${PATTERN='\(ath_.*\|wlan_.*\|wlan\)$'} -: ${MAX_TRIES=10} - -test "`id -u`" = 0 || { - echo "ERROR: You must be root to run this script" >&2 - exit 1 -} - -test -r /proc/modules || { - echo "ERROR: Cannot read /proc/modules" >&2 - exit 1 -} - -tries="$MAX_TRIES" -while test "$tries" != "0"; do - skipped=0 - IFS=' -' - for line in `cat /proc/modules`; do - IFS=' ' - set x $line - name="$2" - size="$3" - use_count="$4" - use_name="$5" - state="$6" - expr "$name" : "$PATTERN" >/dev/null || continue - - # Compatibility for Linux 2.4.x - test -z "$state" && { use_name="-"; state="Live"; } - - if test "$state" != "Live" || test "$use_count" != "0" || \ - test "$use_name" != "-"; then - # Don't skip unload in the last run - if test "$tries" != "1"; then - skipped=1 - continue - fi - fi - - echo "Unloading \"$name\"" - sync # to be safe - /sbin/rmmod "$name" || { - echo "ERROR: cannot unload module \"$name\"" >&2 - exit 1 - } - sync # to be even safer - done - test "$skipped" = "0" && break - tries=$(($tries - 1)) -done - -exit 0 diff --git a/openairITS/mac/DOT11/scripts/modlib.sh b/openairITS/mac/DOT11/scripts/modlib.sh deleted file mode 100755 index d839a37e3f..0000000000 --- a/openairITS/mac/DOT11/scripts/modlib.sh +++ /dev/null @@ -1,87 +0,0 @@ -#!/bin/bash -# -# Copyright 2007 Luis R. Rodriguez -# -# You can use these to enable/disable modules without blacklisting them - -# Make sure our imporant paths are included -PATH=$PATH:/usr/sbin:/sbin - -# Appended to module file at the end when we want to ignore one -IGNORE_SUFFIX=".ignore" -VER=`uname -r` - -# If 'module' is found, its renamed to 'module.ignore' -function module_disable { - # Basic check to see if this is a module available for loading - MODULE_CHECK=`modprobe -l $1` - if [ -z $MODULE_CHECK ]; then - echo "Module $1 not detected -- this is fine" - return - fi - MODULE=$1 - MODULE_KO=${MODULE}.ko - # In case there are more than one of these modules. This can - # happen, for example if your distribution provides one and you have - # compiled one in yourself later. - MODULE_COUNT=`find /lib/modules/$VER/ -name $MODULE_KO | wc -l` - ALL_MODULES=`find /lib/modules/$VER/ -name $MODULE_KO` - COUNT=1 - CHECK=`modprobe -l $MODULE` - for i in $ALL_MODULES; do - if [[ $MODULE_COUNT -gt 1 ]]; then - if [[ $COUNT -eq 1 ]]; then - echo -en "$MODULE_COUNT $MODULE modules found " - echo -e "we'll disable all of them" - fi - echo -en "Disabling $MODULE ($COUNT) ..." - else - echo -en "Disabling $MODULE ..." - fi - mv -f $i ${i}${IGNORE_SUFFIX} - depmod -a - CHECK_AGAIN=`modprobe -l $MODULE` - if [ "$CHECK" != "$CHECK_AGAIN" ]; then - echo -e "\t[OK]\tModule disabled:" - echo "$CHECK" - else - echo -e "[ERROR]\tModule is still being detected:" - echo "$CHECK" - fi - let COUNT=$COUNT+1 - done -} - -# If 'module.ignore' is found, rename it back to 'module' -function module_enable { - MODULE=$1 - MODULE_KO=${MODULE}.ko - IGNORED_MODULE=${MODULE_KO}${IGNORE_SUFFIX} - # In case there are more than one of these modules. This can - # happen, for example if your distribution provides one and you have - # compiled one in yourself later. - ALL_MODULES=`find /lib/modules/$VER/ -name $IGNORED_MODULE` - for i in $ALL_MODULES; do - echo -en "Enabling $MODULE ..." - DIR=`dirname $i` - mv $i $DIR/$MODULE_KO - depmod -a - CHECK=`modprobe -l $MODULE` - if [ "$DIR/$MODULE_KO" != $CHECK ]; then - if [ -z $CHECK ]; then - echo -e "\t[ERROR]\tModule could not be enabled" - else - echo -en "\t[OK]\tModule renamed but another " - echo "module file is being preferred" - echo -e "Renamed module:\t\t$DIR/$MODULE_KO" - echo -e "Preferred module:\t$CHECK" - fi - else - echo -e "\t[OK]\tModule enabled: " - echo "$DIR/$MODULE_KO" - fi - # Lets only do this for the first module found - break - done -} - diff --git a/openairITS/mac/DOT11/scripts/skip-colors b/openairITS/mac/DOT11/scripts/skip-colors deleted file mode 100755 index 71238082b6..0000000000 --- a/openairITS/mac/DOT11/scripts/skip-colors +++ /dev/null @@ -1,2 +0,0 @@ -#!/usr/bin/env bash -perl -pe 's|(\e)\[(\d+)(;*)(\d*)(\w)||g' diff --git a/openairITS/mac/DOT11/scripts/unload.sh b/openairITS/mac/DOT11/scripts/unload.sh deleted file mode 100755 index fc7261dda6..0000000000 --- a/openairITS/mac/DOT11/scripts/unload.sh +++ /dev/null @@ -1,67 +0,0 @@ -#!/bin/bash - -# The old stack drivers and the mac80211 rc80211_simple modules -# which is no longer on recent kernels (its internal) -OLD_MODULES="iwlwifi_mac80211 rc80211_simple zd1211rw-mac80211" -OLD_MODULES="$OLD_MODULES ieee80211_crypt_tkip ieee80211_crypt_ccmp" -OLD_MODULES="$OLD_MODULES ieee80211softmac ieee80211_crypt ieee80211" -OLD_MODULES="$OLD_MODULES bcm43xx rndis_wext iwl4965" -MODULES="$OLD_MODULES" -MODULES="$MODULES ipw2100 ipw2200 libipw" -MODULES="$MODULES wl1251 wl12xx iwmc3200wifi" -MODULES="$MODULES libertas_cs usb8xxx libertas libertas_sdio libertas_spi" -MODULES="$MODULES libertas_tf libertas_tf_usb" -MODULES="$MODULES adm8211 zd1211rw" -MODULES="$MODULES orinoco_cs orinoco_nortel orinoco_pci orinoco_plx" -MODULES="$MODULES orinoco_tld orinoco_usb spectrum_cs orinoco" -MODULES="$MODULES b43 b44 b43legacy brcm80211 ssb" -MODULES="$MODULES iwl3945 iwlwifi iwlagn iwlcore" -MODULES="$MODULES ath9k ath9k_htc ath9k_common ath9k_hw " -MODULES="$MODULES ath5k ath ath6kl ar9170usb carl9170" -MODULES="$MODULES p54pci p54usb p54spi p54common" -MODULES="$MODULES rt2400pci rt2500pci rt61pci" -MODULES="$MODULES rt2500usb rt73usb" -MODULES="$MODULES rt2800usb rt2800pci rt2800lib" -MODULES="$MODULES rt2x00usb rt2x00pci rt2x00lib" -MODULES="$MODULES rtl8180 rtl8187 rtl8192ce rtlwifi" -MODULES="$MODULES mwl8k mac80211_hwsim" -MODULES="$MODULES at76c50x_usb at76_usb" -MODULES="$MODULES rndis_wlan rndis_host cdc_ether usbnet" -# eeprom_93cx6 is used by rt2x00 (rt61pci, rt2500pci, rt2400pci) -# and Realtek drivers ( rtl8187, rtl8180) -MODULES="$MODULES eeprom_93cx6" -MODULES="$MODULES lib80211_crypt_ccmp lib80211_crypt_tkip lib80211_crypt_wep" -MODULES="$MODULES mac80211 cfg80211 lib80211" -MODULES="$MODULES compat" -# Bluetooth modules -MODULES="$MODULES ath3k bcm203x bluecard_cs bnep bpa10x bt3c_cs btmrvl btmrvl_sdio btsdio" -MODULES="$MODULES btusb btuart_cs cmtp dtl1_cs hidp hci_vhci hci_uart rfcomm sco bluetooth l2cap" -MODULES="$MODULES atl1 atl2 atl1e atl1c alx" -echo Stoping bluetooth service.. -/etc/init.d/bluetooth stop -/etc/init.d/bluetooth status -MADWIFI_MODULES="ath_pci ath_rate_sample wlan_scan_sta wlan ath_hal" -IPW3945D="/sbin/ipw3945d-`uname -r`" - -if [ -f $IPW3945D ]; then - $IPW3945D --isrunning - if [ ! $? ]; then - echo -n "Detected ipw3945 daemon loaded we're going to " - echo "shut the daemon down now and remove the module." - modprobe -r --ignore-remove ipw3945 - fi -fi - -grep ath_pci /proc/modules 2>&1 > /dev/null -if [ $? -eq 0 ]; then - echo "MadWifi driver is loaded, going to try to unload it..." - ./scripts/madwifi-unload -fi - -for i in $MODULES; do - grep ^$i /proc/modules 2>&1 > /dev/null - if [ $? -eq 0 ]; then - echo Unloading $i... - modprobe -r --ignore-remove $i - fi -done diff --git a/openairITS/mac/DOT11/scripts/update-initramfs b/openairITS/mac/DOT11/scripts/update-initramfs deleted file mode 100755 index 1905f116d2..0000000000 --- a/openairITS/mac/DOT11/scripts/update-initramfs +++ /dev/null @@ -1,33 +0,0 @@ -#!/bin/bash -# Copyright 2009 Luis R. Rodriguez -# -# Since we provide ssb, the Ethernet module b44 some people may -# rely on it to netboot, so update the initrafms for each -# distribution. -# -# Note that in the future people may want to wireless-boot -# so this will help with that as well. - -LSB_RED_ID=$(/usr/bin/lsb_release -i -s) - -KLIB=/lib/modules/$(uname -r)/build -ver=$(echo $KLIB | awk -F "/lib/modules/" '{print $2}' | awk -F"/" '{print $1}') -dir=/boot/ - -case $LSB_RED_ID in -"Ubuntu") - echo "Updating Ubuntu's initramfs for $ver under $dir ..." - mkinitramfs -o $dir/initrd.img-$ver $ver - echo "Will now run update-grub to ensure grub will find the new initramfs ..." - update-grub - ;; -*) - echo "Warning:" - echo "You may or may not need to update your initframfs, you should if" - echo "any of the modules installed are part of your initramfs. To add" - echo "support for your distribution to do this automatically send a" - echo "patch against $0. If your distribution does not require this" - echo "send a patch against the '/usr/bin/lsb_release -i -s': $LSB_RED_ID" - echo "tag for your distribution to avoid this warning." - ;; -esac diff --git a/openairITS/mac/DOT11/scripts/wlunload.sh b/openairITS/mac/DOT11/scripts/wlunload.sh deleted file mode 100755 index c6c6af94f6..0000000000 --- a/openairITS/mac/DOT11/scripts/wlunload.sh +++ /dev/null @@ -1,59 +0,0 @@ -#!/bin/bash - -# The old stack drivers and the mac80211 rc80211_simple modules -# which is no longer on recent kernels (its internal) -OLD_MODULES="iwlwifi_mac80211 rc80211_simple zd1211rw-mac80211" -OLD_MODULES="$OLD_MODULES ieee80211_crypt_tkip ieee80211_crypt_ccmp" -OLD_MODULES="$OLD_MODULES ieee80211softmac ieee80211_crypt ieee80211" -OLD_MODULES="$OLD_MODULES bcm43xx rndis_wext iwl4965" -MODULES="$OLD_MODULES" -MODULES="$MODULES ipw2100 ipw2200 libipw" -MODULES="$MODULES wl1251 wl12xx iwmc3200wifi" -MODULES="$MODULES libertas_cs usb8xxx libertas libertas_sdio libertas_spi" -MODULES="$MODULES libertas_tf libertas_tf_usb" -MODULES="$MODULES adm8211 zd1211rw" -MODULES="$MODULES orinoco_cs orinoco_nortel orinoco_pci orinoco_plx" -MODULES="$MODULES orinoco_tld orinoco_usb spectrum_cs orinoco" -MODULES="$MODULES b43 b44 b43legacy brcm80211 ssb" -MODULES="$MODULES iwl3945 iwlwifi iwlagn iwlcore" -MODULES="$MODULES ath9k ath9k_htc ath9k_common ath9k_hw " -MODULES="$MODULES ath5k ath ath6kl ar9170usb carl9170" -MODULES="$MODULES p54pci p54usb p54spi p54common" -MODULES="$MODULES rt2400pci rt2500pci rt61pci" -MODULES="$MODULES rt2500usb rt73usb" -MODULES="$MODULES rt2800usb rt2800lib" -MODULES="$MODULES rt2x00usb rt2x00lib" -MODULES="$MODULES rtl8180 rtl8187 rtl8192ce rtlwifi" -MODULES="$MODULES mwl8k mac80211_hwsim" -MODULES="$MODULES at76c50x_usb at76_usb" -MODULES="$MODULES rndis_wlan rndis_host cdc_ether usbnet" -# eeprom_93cx6 is used by rt2x00 (rt61pci, rt2500pci, rt2400pci) -# and Realtek drivers ( rtl8187, rtl8180) -MODULES="$MODULES eeprom_93cx6" -MODULES="$MODULES lib80211_crypt_ccmp lib80211_crypt_tkip lib80211_crypt_wep" -MODULES="$MODULES mac80211 cfg80211 lib80211" -MADWIFI_MODULES="ath_pci ath_rate_sample wlan_scan_sta wlan ath_hal" -IPW3945D="/sbin/ipw3945d-`uname -r`" - -if [ -f $IPW3945D ]; then - $IPW3945D --isrunning - if [ ! $? ]; then - echo -n "Detected ipw3945 daemon loaded we're going to " - echo "shut the daemon down now and remove the module." - modprobe -r --ignore-remove ipw3945 - fi -fi - -grep ath_pci /proc/modules 2>&1 > /dev/null -if [ $? -eq 0 ]; then - echo "MadWifi driver is loaded, going to try to unload it..." - ./scripts/madwifi-unload -fi - -for i in $MODULES; do - grep ^$i /proc/modules 2>&1 > /dev/null - if [ $? -eq 0 ]; then - echo Unloading $i... - modprobe -r --ignore-remove $i - fi -done diff --git a/openairITS/phy/DOT11/Makefile.inc b/openairITS/phy/DOT11/Makefile.inc deleted file mode 100644 index 765d26afd0..0000000000 --- a/openairITS/phy/DOT11/Makefile.inc +++ /dev/null @@ -1,17 +0,0 @@ -TOOLS_OBJS += $(OPENAIR1_DIR)/PHY/CODING/ccoding_byte.o -TOOLS_OBJS += $(OPENAIR1_DIR)/PHY/CODING/crc_byte.o -TOOLS_OBJS += $(OPENAIR1_DIR)/PHY/CODING/viterbi.o -TOOLS_OBJS += $(OPENAIR1_DIR)/PHY/TOOLS/fft.o -TOOLS_OBJS += $(OPENAIR1_DIR)/PHY/TOOLS/log2_approx.o -TOOLS_OBJS += $(OPENAIR1_DIR)/PHY/TOOLS/cmult_sv.o -TOOLS_OBJS += $(OPENAIR1_DIR)/PHY/TOOLS/cmult_vv.o -TOOLS_OBJS += $(OPENAIR1_DIR)/PHY/TOOLS/cadd_vv.o -TOOLS_OBJS += $(OPENAIR1_DIR)/PHY/TOOLS/signal_energy.o -TOOLS_OBJS += $(OPENAIR1_DIR)/PHY/TOOLS/dB_routines.o -TOOLS_OBJS += $(OPENAIR1_DIR)/PHY/TOOLS/file_output.o -PHY_OBJS += $(OPENAIRITS_DIR)/phy/DOT11/phy_tx_start.o -PHY_OBJS += $(OPENAIRITS_DIR)/phy/DOT11/scrambler.o -PHY_OBJS += $(OPENAIRITS_DIR)/phy/DOT11/interleaver.o -PHY_OBJS += $(OPENAIRITS_DIR)/phy/DOT11/crc32.o -PHY_OBJS += $(OPENAIRITS_DIR)/phy/DOT11/initial_sync.o -PHY_OBJS += $(OPENAIRITS_DIR)/phy/DOT11/data_detection.o diff --git a/openairITS/phy/DOT11/STS_LTS_F.h b/openairITS/phy/DOT11/STS_LTS_F.h deleted file mode 100644 index 251eaf0e0b..0000000000 --- a/openairITS/phy/DOT11/STS_LTS_F.h +++ /dev/null @@ -1,3 +0,0 @@ -int16_t STS_LTS_F[2048] __attribute__((aligned(16))) = {-604,209,-209,-604,-882,-154,154,-882,2537,503,-503,2537,-423,-1433,1433,-423,-1018,59,-59,-1018,1579,1738,-1738,1579,2827,-3086,3086,2827,-7050,839,-839,-7050,10430,2125,-2125,10430,-8268,-4194,4194,-8268,5395,1743,-1743,5395,-1428,1746,-1746,-1428,656,-4477,4477,656,1911,2308,-2308,1911,-4295,976,-976,-4295,9376,-4035,4035,9376,-10258,2284,-2284,-10258,8875,246,-246,8875,-2094,-3251,3251,-2094,-1620,1725,-1725,-1620,3716,-182,182,3716,1206,-2575,2575,1206,-4673,885,-885,-4673,9480,-325,325,9480,-7708,-2311,2311,-7708,7931,-71,71,7931,-3545,-411,411,-3545,4657,-2573,2573,4657,1190,-1728,1728,1190,-1137,-703,703,-1137,12527,-3979,3979,12527,-2887,-14086,14086,-2887,-5161,-16458,16458,-5161,-25788,3034,-3034,-25788,1948,12084,-12084,1948,1012,-2059,2059,1012,-7029,13,-13,-7029,-526,7094,-7094,-526,4707,-2656,2656,4707,-10536,124,-124,-10536,8084,5445,-5445,8084,-6475,-2760,2760,-6475,3073,422,-422,3073,-3763,4070,-4070,-3763,1992,-2226,2226,1992,620,392,-392,620,-6696,2820,-2820,-6696,10020,-1189,1189,10020,-10258,-172,172,-10258,6048,1918,-1918,6048,-2312,-15,15,-2312,472,-1199,1199,472,-690,1532,-1532,-690,-55,857,-857,-55,3558,-2432,2432,3558,-7549,1613,-1613,-7549,10306,1103,-1103,10306,-7917,-3668,3668,-7917,4955,1897,-1897,4955,101,576,-576,101,785,-5409,5409,785,1982,2036,-2036,1982,2334,-1335,1335,2334,12182,-17563,17563,12182,-24469,-13379,13379,-24469,-10655,5034,-5034,-10655,-7052,9138,-9138,-7052,950,1097,-1097,950,-4517,1430,-1430,-4517,-3580,4923,-4923,-3580,3513,205,-205,3513,-9394,1268,-1268,-9394,6576,4083,-4083,6576,-8470,-536,536,-8470,4005,1797,-1797,4005,-4867,3265,-3265,-4867,-341,-778,778,-341,1376,2546,-2546,1376,-7779,2079,-2079,-7779,7806,-338,338,7806,-10258,3161,-3161,-10258,5283,671,-671,5283,-4180,727,-727,-4180,-1524,3437,-3437,-1524,323,-630,630,323,-1805,2149,-2149,-1805,-4765,3400,-3400,-4765,6776,-1507,1507,6776,-12799,3563,-3563,-12799,7815,3395,-3395,7815,-5215,-1779,1779,-5215,-5187,4707,-4707,-5187,2001,4466,-4466,2001,-1889,-1454,1454,-1889,-13988,6177,-6177,-13988,4626,16826,-16826,4626,3953,14451,-14451,3953,23583,-1368,1368,23583,-839,-8836,8836,-839,-1073,187,-187,-1073,4459,814,-814,4459,791,-3092,3092,791,-3674,941,-941,-3674,7994,-235,235,7994,-9216,-721,721,-9216,8860,1344,-1344,8860,-5218,-1472,1472,-5218,264,1175,-1175,264,2687,1314,-1314,2687,-1946,-2332,2332,-1946,-3235,2709,-2709,-3235,7618,923,-923,7618,-10258,-2521,2521,-10258,7889,3690,-3690,7889,-5756,363,-363,-5756,2049,-1941,1941,2049,-943,3959,-3959,-943,-3330,-118,118,-3330,5458,-650,650,5458,-9665,3516,-3516,-9665,7671,-296,296,7671,-7263,1288,-1288,-7263,1737,2545,-2545,1737,-2536,11,-11,-2536,-2204,4353,-4353,-2204,-1458,1365,-1365,-1458,-4595,1553,-1553,-4595,-11454,18254,-18254,-11454,23261,15476,-15476,23261,8698,-5168,5168,8698,8000,-6607,6607,8000,-2492,-349,349,-2492,2968,-1785,1785,2968,3566,-810,810,3566,-4408,-567,567,-4408,8282,-1682,1682,8282,-8485,1083,-1083,-8485,9087,-440,440,9087,-4701,-2132,2132,-4701,23,2273,-2273,23,3756,-156,156,3756,-1683,-2690,2690,-1683,-3859,3124,-3124,-3859,9190,135,-135,9190,-10258,-2995,2995,-10258,7191,3559,-3559,7191,-4083,417,-417,-4083,2014,-2780,2780,2014,-1580,3399,-3399,-1580,-1957,818,-818,-1957,5726,-1944,1944,5726,-10164,2555,-2555,-10164,8250,1538,-1538,8250,-6211,-468,468,-6211,1516,1151,-1151,1516,-3729,2773,-2773,-3729,829,2129,-2129,829,-1137,-472,472,-1137,-11814,5246,-5246,-11814,4640,15529,-15529,4640,3953,13287,-13287,3953,25435,-651,651,25435,-959,-9841,9841,-959,564,-2691,2691,564,3921,3268,-3268,3921,495,-4443,4443,495,4206,-2827,2827,4206,-6729,3450,-3450,-6729,11359,-2651,2651,11359,-7598,-2469,2469,-7598,3805,2558,-2558,3805,999,-1084,1084,999,-166,-2002,2002,-166,343,1138,-1138,343,-1581,687,-687,-1581,6924,-1795,1795,6924,-10258,-195,195,-10258,10178,2466,-2466,10178,-5689,-1989,1989,-5689,1189,-860,860,1189,1370,3776,-3776,1370,-2795,-2397,2397,-2795,4518,-508,508,4518,-7967,4142,-4142,-7967,8827,-2569,2569,8827,-8020,939,-939,-8020,2490,3357,-3357,2490,-552,-1939,1939,-552,-2910,3799,-3799,-2910,-1459,1624,-1624,-1459,-1901,556,-556,-1901,-12365,17422,-17422,-12365,23261,14666,-14666,23261,11339,-4531,4531,11339,6827,-8126,8126,6827,-1117,-2293,2293,-1117,3600,882,-882,3600,2523,-3538,3538,2523,2648,-3231,3231,2648,-5092,2878,-2878,-5092,12133,-3175,3175,12133,-8952,-3136,3136,-8952,5357,3612,-3612,5357,2707,-3370,3370,2707,-2414,-2252,2252,-2414,725,3152,-3152,725,6106,-3231,3231,6106,-7589,-1090,1090,-7589,9050,1828,-1828,9050,-5796,-2471,2471,-5796,5183,-171,171,5183,-1877,214,-214,-1877,989,-1242,1242,989,2165,213,-213,2165,-1508,-1106,1106,-1508,1594,32,-32,1594,1119,99,-99,1119,-618,-1772,1772,-618,1064,896,-896,1064,764,-226,226,764,282,-1764,1764,282,156,1097,-1097,156,865,-420,420,865,845,-1335,1335,845,-604,686,-686,-604,1118,-282,282,1118,997,-835,835,997,-902,-38,38,-902,1204,146,-146,1204,895,-515,515,895,-709,-700,700,-709,949,627,-627,949,779,-415,415,779,-229,-1042,1042,-229,404,884,-884,404,802,-401,401,802,255,-1022,1022,255,-202,766,-766,-202,945,-290,290,945,543,-787,787,543,-604,324,-324,-604,1054,7,-7,1054,611,-545,545,611,-653,-226,226,-653,955,416,-416,955,578,-424,424,578,-389,-638,638,-389,592,744,-744,592,596,-405,405,596,2,-773,773,2,70,809,-809,70,728,-361,361,728,313,-662,662,313,-395,552,-552,-395,898,-169,169,898,436,-459,459,436,-604,88,-88,-604,948,186,-186,948,411,-326,326,411,-490,-367,367,-490,753,579,-579,753,379,-321,321,379,-158,-612,612,-158,319,812,-812,319,461,-366,366,461,189,-582,582,189,-195,739,-739,-195,662,-315,315,662,372,-375,375,372,-558,368,-368,-558,855,-63,63,855,346,-175,175,346,-604,-128,128,-604,859,351,-351,859,220,-127,127,220,-332,-503,503,-332,566,748,-748,566,172,-239,239,172,81,-578,578,81,40,900,-900,40,320,-365,365,320,387,-353,353,387,-496,680,-680,-496,622,-310,310,622,407,-7,7,407,-765,156,-156,-765,880,36,-36,880,150,202,-202,150,-604,-408,408,-604,850,595,-595,850,-179,91,-91,-179,-77,-677,677,-77,399,1107,-1107,399,-287,-324,324,-287,510,-415,415,510,-385,1253,-1253,-385,77,-833,833,77,688,384,-384,688,-1188,833,-833,-1188,1106,-1136,1136,1106,-221,1489,-1489,-221,-1596,-113,113,-1596,4108,-1018,1018,4108,-7233,2546,-2546,-7233,9050,-1293,1293,9050,-8577,-475,475,-8577,4423,3256,-3256,4423,144,-2272,2272,144,-3085,278,-278,-3085,486,3522,-3522,486,3964,-2643,2643,3964,-9017,919,-919,-9017,8574,3488,-3488,8574,-7333,-2086,2086,-7333,3367,1195,-1195,3367,-4334,3504,-3504,-4334,609,54,-54,609,233,1055,-1055,233,-12351,4603,-4603,-12351,5290,13436,-13436,5290,3953,15827,-15827,3953,25988,-2482,2482,25988,350,-11701,11701,350,-1777,319,-319,-1777,7073,679,-679,7073,2268,-6075,6075,2268,-4342,223,-223,-4342,10055,590,-590,10055,-6933,-4262,4262,-6933,8229,415,-415,8229,-4293,-221,221,-4293,4570,-2943,2943,4570,858,724,-724,858,-2300,-1467,1467,-2300,7339,-1592,1592,7339,-6754,896,-896,-6754,9050,-2823,2823,9050,-5867,-197,197,-5867,5299,754,-754,5299,510,-3939,3939,510,-1023,993,-993,-1023,2427,318,-318,2427,4476,-4635,4635,4476,-7542,1663,-1663,-7542,12290,-218,218,12290,-6789,-5105,5105,-6789,4507,1638,-1638,4507,2533,-691,691,2533,1530,-6353,6353,1530,1458,1007,-1007,1458,5086,-1794,1794,5086,12351,-18623,18623,12351,-24469,-15046,15046,-24469,-8270,5669,-5669,-8270,-7108,7393,-7393,-7108,1779,-625,625,1779,-3249,2791,-2791,-3249,-3130,2358,-2358,-3130,4935,-916,916,4935,-9574,2469,-2469,-9574,8236,1193,-1193,8236,-7147,-758,758,-7147,2745,1847,-1847,2745,-1793,1055,-1055,-1793,115,-426,426,115,63,840,-840,63,-3905,1639,-1639,-3905,7029,-287,287,7029,-10258,-178,178,-10258,8464,2646,-2646,8464,-5822,-566,566,-5822,1264,-687,687,1264,290,3571,-3571,290,-3192,-1160,1160,-3192,4627,-287,287,4627,-8529,3851,-3851,-8529,8236,-1638,1638,8236,-7872,1180,-1180,-7872,2257,3135,-3135,2257,-1187,-1374,1374,-1187,-2744,4069,-4069,-2744,-1533,1488,-1488,-1533,-2421,806,-806,-2421,-12231,17705,-17705,-12231,23261,14559,-14559,23261,11015,-4462,4462,11015,6896,-7902,7902,6896,-1049,-2419,2419,-1049,3441,905,-905,3441,2572,-3468,3468,2572,2802,-3373,3373,2802,-5201,2901,-2901,-5201,12297,-3299,3299,12297,-8738,-3259,3259,-8738,5196,3548,-3548,5196,3144,-3595,3595,3144,-2225,-2365,2365,-2225,533,2816,-2816,533,6875,-3309,3309,6875,-7520,-1322,1322,-7520,9050,1027,-1027,9050,-4907,-2067,2067,-4907,5151,-793,793,5151,-1142,-1164,1164,-1142,1193,-57,57,1193,2306,-1157,1157,2306,2050,-3077,3077,2050,-4784,2123,-2123,-4784,12420,-2360,2360,12420,-9558,-4415,4415,-9558,6803,3776,-3776,6803,4158,-4055,4055,4158,-2348,-5895,5895,-2348,2319,4427,-4427,2319,12951,-6490,6490,12951,-3740,-17783,17783,-3740,-5161,-11138,11138,-5161,-23767,46,-46,-23767,2414,8928,-8928,2414,-2292,2889,-2889,-2292,-2327,-2970,2970,-2327,788,4470,-4470,788,-5236,1549,-1549,-5236,7612,-2556,2556,7612,-10539,3408,-3408,-10539,7968,421,-421,7968,-3850,-1815,1815,-3850,-1291,2778,-2778,-1291,2846,-348,348,2846,-854,-1312,1312,-854,-3993,2455,-2455,-3993,8686,-894,894,8686,-10258,-1203,1203,-10258,8579,2544,-2544,8579,-4094,-1482,1482,-4094,979,-1374,1374,979,1246,2992,-2992,1246,-1130,-2297,2297,-1130,3814,-1633,1633,3814,-6488,3548,-3548,-6488,10990,-3330,3330,10990,-8841,-2003,2003,-8841,5107,3903,-3903,5107,3733,-4450,4450,3733,-2883,-3303,3303,-2883,1379,3875,-3875,1379,12859,-6204,6204,12859,-5326,-15690,15690,-5326,-5161,-11637,11637,-5161,-23995,864,-864,-23995,248,10079,-10079,248,-1613,3100,-3100,-1613,-2918,-1910,1910,-2918,-1354,4504,-4504,-1354,-4485,2905,-2905,-4485,6662,-1528,1528,6662,-11978,2363,-2363,-11978,7883,3081,-3081,7883,-5002,-950,950,-5002,-1004,801,-801,-1004,288,3523,-3523,288,-2051,-526,526,-2051,2107,-310,310,2107,-7715,3935,-3935,-7715,9050,-194,194,9050,-9792,-943,943,-9792,3693,4016,-4016,3693,-1068,337,-337,-1068,-2129,-1253,1253,-2129,-66,3656,-3656,-66,-3028,1402,-1402,-3028,5284,-1549,1549,5284,-11887,3048,-3048,-11887,9709,3250,-3250,9709,-7086,-2124,2124,-7086,-2602,2672,-2672,-2602,1779,6407,-6407,1779,-3992,-3045,3045,-3992,-5145,3730,-3730,-5145,-9832,20329,-20329,-9832,23261,11092,-11092,23261,7643,-2945,2945,7643,8129,-4960,4960,8129,192,-4721,4721,192,91,1022,-1022,91,2749,-286,286,2749,4652,-4554,4554,4652,-7985,1894,-1894,-7985,11358,-124,124,11358,-6648,-3389,3389,-6648,3298,1848,-1848,3298,1104,-810,810,1104,-162,-1462,1462,-162,-387,871,-871,-387,3928,-1318,1318,3928,-5773,642,-642,-5773,9050,-793,793,9050,-8392,-1162,1162,-8392,6193,2241,-2241,6193,-328,-2569,2569,-328,-2382,-349,349,-2382,2134,2865,-2865,2134,3602,-3773,3773,3602,-8028,702,-702,-8028,10365,2468,-2468,10365,-7292,-3923,3923,-7292,4225,1393,-1393,4225,-1014,1433,-1433,-1014,738,-2958,2958,738,691,1260,-1260,691,-1191,379,-379,-1191,2449,-1266,1266,2449}; - -int16_t LTS_F[256] __attribute__((aligned(16))) = {0,0,0,0,1,0,0,1,-1,0,0,-1,-1,0,0,-1,1,0,0,1,1,0,0,1,-1,0,0,-1,1,0,0,1,-1,0,0,-1,1,0,0,1,-1,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,-1,-1,0,0,-1,1,0,0,1,1,0,0,1,-1,0,0,-1,-1,0,0,-1,1,0,0,1,-1,0,0,-1,1,0,0,1,-1,0,0,-1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,1,-1,0,0,-1,-1,0,0,-1,1,0,0,1,1,0,0,1,-1,0,0,-1,1,0,0,1,-1,0,0,-1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,-1,0,0,-1,-1,0,0,-1,1,0,0,1,1,0,0,1,-1,0,0,-1,1,0,0,1,-1,0,0,-1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1}; diff --git a/openairITS/phy/DOT11/commonvars.h b/openairITS/phy/DOT11/commonvars.h deleted file mode 100644 index 866e70e828..0000000000 --- a/openairITS/phy/DOT11/commonvars.h +++ /dev/null @@ -1 +0,0 @@ -int nibbles_per_symbol[8] = {6,9,12,18,24,36,36,54}; diff --git a/openairITS/phy/DOT11/crc32.c b/openairITS/phy/DOT11/crc32.c deleted file mode 100644 index 2a927999dc..0000000000 --- a/openairITS/phy/DOT11/crc32.c +++ /dev/null @@ -1,29 +0,0 @@ -#include - - -uint32_t crc32_table[256]; - -void init_crc32() { - - uint32_t i,j; - uint32_t crc; - - for (i=0;i<256;i++) { - crc=i; - for (j=0;j<8;j++) { - crc = (crc>>1); - if ((crc&1) > 0) - crc ^= 0xedb88320; - } - crc32_table[i]=crc; - } -} - -void crc32(uint8_t *data,uint32_t *crc,int len) { - - int i; - - for (i=0;i>8)^crc32_table[(*crc^data[i])&0xff]; - -} diff --git a/openairITS/phy/DOT11/data_detection.c b/openairITS/phy/DOT11/data_detection.c deleted file mode 100644 index 7c1e3cfb55..0000000000 --- a/openairITS/phy/DOT11/data_detection.c +++ /dev/null @@ -1,505 +0,0 @@ -#include "defs.h" -#include -#include "PHY/TOOLS/defs.h" -#include -#include -#include -#ifdef EXECTIME -#ifdef RTAI -#include -#include -#include -#else -#include -#endif -#endif - -#define TWO_OVER_SQRT_10 20724 -#define FOUR_OVER_SQRT_42 20225 -#define TWO_OVER_SQRT_42 10112 - -extern int16_t twiddle_fft64[63*4*2]; -extern int16_t twiddle_ifft64[63*4*2]; - -extern uint16_t rev64[64]; -extern int Ndbps[8]; -extern int Ncbps[8]; - -//#define DEBUG_DATA 1 - -extern int16_t chest[256] __attribute__((aligned(16))); -extern int interleaver_bpsk[48]; -extern int interleaver_qpsk[48]; -extern int interleaver_16qam[48]; -extern int interleaver_64qam[48]; - -extern uint8_t scrambler[127*8]; - -#ifdef EXECTIME -#ifdef RTAI -RTIME dd_t1=0,dd_t2=0,dd_t3=0,dd_t4=0; -#else -long dd_t1=0,dd_t2=0,dd_t3=0,dd_t4=0; -#endif -#endif -int dd_trials=0; - -#ifdef RTAI -extern unsigned int *DAQ_MBOX; -#endif - -int16_t Pseq_rx[127] = { 1, 1, 1, 1,-1,-1,-1, 1,-1,-1,-1,-1, 1, 1,-1, 1, - -1,-1, 1, 1,-1, 1, 1,-1, 1, 1, 1, 1, 1, 1,-1, 1, - 1, 1,-1, 1, 1,-1,-1, 1, 1, 1,-1, 1,-1,-1,-1, 1, - -1, 1,-1,-1, 1,-1,-1, 1, 1, 1, 1, 1,-1,-1, 1, 1, - -1,-1, 1,-1, 1,-1, 1, 1,-1,-1,-1, 1, 1,-1,-1,-1, - -1, 1,-1,-1, 1,-1, 1, 1, 1, 1,-1, 1,-1, 1,-1, 1, - -1,-1,-1,-1,-1, 1,-1, 1, 1,-1, 1,-1, 1, 1, 1,-1, - -1, 1,-1,-1,-1, 1, 1, 1,-1,-1,-1,-1,-1,-1,-1}; - -int32_t rxDATA_F_comp_aggreg2[48*1024]; -int32_t rxDATA_F_comp_aggreg3[48*1024]; - -#ifdef EXECTIME -void print_dd_stats() { - - if (dd_trials>0) - printf("Data detection : Trials %d, dd_t1 (64pt FFT) %d ns, dd_t2 %d ns (Ch Comp.), dd_t3 %d ns (Deinter), dd_t4 %d ns (Viterbi)\n",dd_trials, - (int)dd_t1/dd_trials,(int)dd_t2/dd_trials,(int)dd_t3/dd_trials,(int)dd_t4/dd_trials); - dd_trials=0; - dd_t1=0; - dd_t2=0; - dd_t3=0; - dd_t4=0; -} -#endif - -int data_detection(RX_VECTOR_t *rxv,uint8_t *data_ind,uint32_t* rx_data,int frame_length,int rx_offset,int log2_maxh,int (*wait(int,int))) { - - uint32_t pilot1,pilot2,pilot3,pilot4; - - int16_t rxDATA_F[128*2] __attribute__((aligned(16))); - uint32_t rxDATA_F_comp[64*2] __attribute__((aligned(16))); - uint32_t rxDATA_F_comp2[48] __attribute__((aligned(16))); - uint32_t rxDATA_F_comp3[48] __attribute__((aligned(16))); - - int8_t rxDATA_llr[384] __attribute__((aligned(16))); - int8_t rxDATA_llr2[432] __attribute__((aligned(16))); - int16_t rxDATA_F_mag[48]; - int16_t rxDATA_F_mag2[48]; - int8_t *llr_ptr; - int i,j,k,k2,tmp,pos; - int *interleaver; - int dlen,dlen_symb; - int s,sprime; - uint32_t crc_rx; - char fname[30],vname[30]; - int32_t scale; - int ret; - int32_t cfo_re32,cfo_im32; - int32_t cfo_Q15; - int rx_offset2; - -#ifdef RTAI - int mbox_off = 0,old_mbox; -#endif -#ifdef EXECTIME -#ifdef RTAI - RTIME tin,tout; -#else - struct timespec tin,tout; -#endif -#endif - - // loop over all symbols - dlen = 32+16+6+(rxv->sdu_length<<3); // data length is 32-bits CRC + sdu + 16 service + 6 tail - dlen_symb = dlen/Ndbps[rxv->rate]; - if ((dlen%Ndbps[rxv->rate])>0) - dlen_symb++; -#ifdef RTAI - old_mbox = ((unsigned int *)DAQ_MBOX)[0]; -#endif - for (s=0,sprime=1;s frame_length) - rx_offset2 -= frame_length; - - if (old_mbox > ((unsigned int *)DAQ_MBOX)[0]) - mbox_off = 150; - // printf("dd: s %d (%d), old_mbox %d, new_mbox %d\n", - // s,rx_offset,old_mbox,((unsigned int *)DAQ_MBOX)[0]); - old_mbox = ((unsigned int *)DAQ_MBOX)[0]; - - while (((unsigned int *)DAQ_MBOX)[0]+mbox_off < (rx_offset2>>9) ) { - // printf("sleeping\n"); - rt_sleep(nano2count(66666)); - } -#endif - -#ifdef EXECTIME - dd_trials++; -#endif - - if (rx_offset>frame_length) { - rx_offset -= frame_length; -#ifdef RTAI - mbox_off = 0; -#endif - } - // index for pilot symbol lookup - if (sprime==127) - sprime=0; - - if ((rx_offset+80) > frame_length) - memcpy((void *)(rx_data+frame_length), - (void *)rx_data, - 2*sizeof(int16_t)*(rx_offset+80-frame_length)); - - -#ifdef EXECTIME -#ifdef RTAI - tin=rt_get_time_ns(); -#else - ret=clock_gettime(CLOCK_REALTIME,&tin); -#endif -#endif - fft((int16_t *)(rx_data+rx_offset+16), /// complex input - rxDATA_F, /// complex output - &twiddle_fft64[0], /// complex twiddle factors - rev64, /// bit reversed permutation vector - 6, /// log2(FFT_SIZE) - 3, /// scale (energy normalized for 64-point) - 0); /// 0 means 64-bit complex interleaved format else complex-multiply ready repeated format -#ifdef EXECTIME -#ifdef RTAI - tout=rt_get_time_ns(); - dd_t1 += (tout-tin); - tin=rt_get_time_ns(); -#else - ret=clock_gettime(CLOCK_REALTIME,&tout); - dd_t1 += (tout.tv_nsec-tin.tv_nsec); - - ret=clock_gettime(CLOCK_REALTIME,&tin); -#endif -#endif - - // log2_maxh=7; - mult_cpx_vector_norep_unprepared_conjx2(rxDATA_F,(int16_t*)chest,(int16_t*)rxDATA_F_comp,64,log2_maxh); -#ifdef EXECTIME -#ifdef RTAI - tout=rt_get_time_ns(); - dd_t2 += (tout-tin); - tin=rt_get_time_ns(); -#else - ret=clock_gettime(CLOCK_REALTIME,&tout); - dd_t2 += (tout.tv_nsec-tin.tv_nsec); - - ret=clock_gettime(CLOCK_REALTIME,&tin); -#endif -#endif - - if ((s==0)&&((rxv->rate>>1)>1)) { // Compute channel magnitude for first symbol when 16QAM or 64QAM - for (i=0;i<5;i++) - rxDATA_F_mag[i] = (int16_t)((((int32_t)chest[(38+i)<<2]*(int32_t)chest[(38+i)<<2]) + ((int32_t)chest[1+((38+i)<<2)]*(int32_t)chest[1+((38+i)<<2)]))>>log2_maxh); - for (;i<18;i++) - rxDATA_F_mag[i] = (int16_t)((((int32_t)chest[(38+1+i)<<2]*(int32_t)chest[(38+1+i)<<2] + (int32_t)chest[1+((38+1+i)<<2)]*(int32_t)chest[1+((38+1+i)<<2)]))>>log2_maxh); - - for (;i<24;i++) - rxDATA_F_mag[i] = (int16_t)((((int32_t)chest[(38+2+i)<<2]*(int32_t)chest[(38+2+i)<<2] + (int32_t)chest[1+((38+2+i)<<2)]*(int32_t)chest[1+((38+2+i)<<2)]))>>log2_maxh); - // +ve portion - for (;i<30;i++) - rxDATA_F_mag[i] = (int16_t)((((int32_t)chest[(-24+1+i)<<2]*(int32_t)chest[(-24+1+i)<<2] + (int32_t)chest[1+((-24+1+i)<<2)]*(int32_t)chest[1+((-24+1+i)<<2)]))>>log2_maxh); - - for (;i<43;i++) - rxDATA_F_mag[i] = (int16_t)((((int32_t)chest[(-24+2+i)<<2]*(int32_t)chest[(-24+2+i)<<2] + (int32_t)chest[1+((-24+2+i)<<2)]*(int32_t)chest[1+((-24+2+i)<<2)]))>>log2_maxh); - - for (;i<48;i++) - rxDATA_F_mag[i] = (int16_t)((((int32_t)chest[(-24+3+i)<<2]*(int32_t)chest[(-24+3+i)<<2] + (int32_t)chest[1+((-24+3+i)<<2)]*(int32_t)chest[1+((-24+3+i)<<2)]))>>log2_maxh); - - if ((rxv->rate>>1) == 2) - scale = TWO_OVER_SQRT_10; - else - scale = FOUR_OVER_SQRT_42; - - for (i=0;i<48;i++) { - // printf("mag[%d] = %d\n",i,rxDATA_F_mag[i]); - rxDATA_F_mag[i] = (int16_t)((rxDATA_F_mag[i]*scale)>>15); - } - if ((rxv->rate>>1) == 3) - for (i=0;i<48;i++) - rxDATA_F_mag2[i] = (int16_t)((rxDATA_F_mag[i]*TWO_OVER_SQRT_42)>>15); - } - - // extract 48 statistics and 4 pilot symbols - // -ve portion - for (i=0;i<5;i++) - rxDATA_F_comp2[i] = rxDATA_F_comp[(38+i)]; - pilot1 = ((uint32_t*)rxDATA_F)[(38+5)<<1]; - - for (;i<18;i++) - rxDATA_F_comp2[i] = rxDATA_F_comp[(38+1+i)]; - pilot2 = ((uint32_t*)rxDATA_F)[(38+19)<<1]; - - for (;i<24;i++) - rxDATA_F_comp2[i] = rxDATA_F_comp[(38+2+i)]; - - // +ve portion - for (;i<30;i++) - rxDATA_F_comp2[i] = rxDATA_F_comp[(-24+1+i)]; - pilot3 = ((uint32_t*)rxDATA_F)[(6+1)<<1]; - for (;i<43;i++) - rxDATA_F_comp2[i] = rxDATA_F_comp[(-24+2+i)]; - pilot4 = ((uint32_t*)rxDATA_F)[(19+2)<<1];((int16_t *)&pilot4)[0]=-((int16_t *)&pilot4)[0];((int16_t *)&pilot4)[1]=-((int16_t *)&pilot4)[1]; - for (;i<48;i++) - rxDATA_F_comp2[i] = rxDATA_F_comp[(-24+3+i)]; - - - - - // CFO compensation - - cfo_re32 = ((((int16_t *)&pilot1)[0]*(int32_t)chest[(38+5)<<2]) + - (((int16_t *)&pilot1)[1]*(int32_t)chest[1+((38+5)<<2)]))>>2; - cfo_im32 = (((((int16_t *)&pilot1)[1]*(int32_t)chest[(38+5)<<2]) - - (((int16_t *)&pilot1)[0]*(int32_t)chest[1+((38+5)<<2)])))>>2; - - - cfo_re32 += (((((int16_t *)&pilot2)[0]*(int32_t)chest[(38+19)<<2]) + - (((int16_t *)&pilot2)[1]*(int32_t)chest[1+((38+19)<<2)])))>>2; - cfo_im32 += (((((int16_t *)&pilot2)[1]*(int32_t)chest[(38+19)<<2]) - - (((int16_t *)&pilot2)[0]*(int32_t)chest[1+((38+19)<<2)])))>>2; - - cfo_re32 += (((((int16_t *)&pilot3)[0]*(int32_t)chest[(6+1)<<2]) + - (((int16_t *)&pilot3)[1]*(int32_t)chest[1+((6+1)<<2)])))>>2; - cfo_im32 += (((((int16_t *)&pilot3)[1]*(int32_t)chest[(6+1)<<2]) - - (((int16_t *)&pilot3)[0]*(int32_t)chest[1+((6+1)<<2)])))>>2; - - cfo_re32 += (((((int16_t *)&pilot4)[0]*(int32_t)chest[(19+2)<<2]) + - (((int16_t *)&pilot4)[1]*(int32_t)chest[1+((19+2)<<2)])))>>2; - cfo_im32 += (((((int16_t *)&pilot4)[1]*(int32_t)chest[(19+2)<<2]) - - (((int16_t *)&pilot4)[0]*(int32_t)chest[1+((19+2)<<2)])))>>2; - - ((int16_t*)&cfo_Q15)[0] = (int16_t)(cfo_re32>>((log2_maxh)))*Pseq_rx[sprime]; - ((int16_t*)&cfo_Q15)[1] = -(int16_t)(cfo_im32>>((log2_maxh)))*Pseq_rx[sprime]; -#ifdef DEBUG_DATA - printf("dd: s %d, p=[%d+(%d)*j , %d+(%d)*j , %d+(%d)*j , %d+(%d)*j] * ch =[%d+(%d)*j , %d+(%d)*j , %d+(%d)*j , %d+(%d)*j] => cfo_Q15 (%d,%d), CFO32 (%d,%d)\n",s, - ((int16_t *)&pilot1)[0]*Pseq_rx[sprime],((int16_t *)&pilot1)[1]*Pseq_rx[sprime], - ((int16_t *)&pilot2)[0]*Pseq_rx[sprime],((int16_t *)&pilot2)[1]*Pseq_rx[sprime], - ((int16_t *)&pilot3)[0]*Pseq_rx[sprime],((int16_t *)&pilot3)[1]*Pseq_rx[sprime], - ((int16_t *)&pilot4)[0]*Pseq_rx[sprime],((int16_t *)&pilot4)[1]*Pseq_rx[sprime], - chest[(38+5)<<2],chest[1+((38+5)<<2)], - chest[(38+19)<<2],chest[1+((38+19)<<2)], - chest[(6+1)<<2],chest[1+((6+1)<<2)], - chest[(19+2)<<2],chest[1+((19+2)<<2)], - ((int16_t*)&cfo_Q15)[0],((int16_t*)&cfo_Q15)[1], - cfo_re32,cfo_im32); -#endif - - rotate_cpx_vector_norep(rxDATA_F_comp2,&cfo_Q15,rxDATA_F_comp3,48,log2_maxh>>1); - -#ifdef DEBUG_DATA - if (s==0) - write_output("rxDATA_F_mag.m","rxDAT_mag",rxDATA_F_mag,48,1,0); - sprintf(fname,"rxDATA_F%d.m",s); - sprintf(vname,"rxDAT_F_%d",s); - write_output(fname,vname, rxDATA_F,128,2,1); - write_output("rxDATA_F_comp.m","rxDAT_F_comp", rxDATA_F_comp,64,1,1); - sprintf(fname,"rxDATA_F_comp2_%d.m",s); - sprintf(vname,"rxDAT_F_comp2_%d",s); - write_output(fname,vname, rxDATA_F_comp2,48,1,1); - sprintf(fname,"rxDATA_F_comp3_%d.m",s); - sprintf(vname,"rxDAT_F_comp3_%d",s); - write_output(fname,vname, rxDATA_F_comp3,48,1,1); -#endif - // LLR Computation - - for (i=0;i<48;i++) { - rxDATA_F_comp_aggreg3[(48*s) + i] = rxDATA_F_comp3[i]; - rxDATA_F_comp_aggreg2[(48*s) + i] = rxDATA_F_comp2[i]; - } - - switch (rxv->rate>>1) { - case 0: // BPSK - llr_ptr = rxDATA_llr; - memset(rxDATA_llr,0,48); - for (k=0;k<48;k++) { - pos = interleaver_bpsk[k]; - tmp = ((int16_t*)rxDATA_F_comp3)[pos<<1]>>4; - if (tmp<-8) - rxDATA_llr[k] = -8; - else if (tmp>7) - rxDATA_llr[k] = 7; - else - rxDATA_llr[k] = (int8_t)tmp; - - // printf("rxDATA_coded %d(%d) : %d\n",k,pos,rxDATA_llr[k]); - } - if (rxv->rate==1) { // rate 3/4, so add zeros for punctured bits - llr_ptr = rxDATA_llr2; - memset(rxDATA_llr2,0,72); - for (k=0,k2=0;k<48;k++,k2++) { - rxDATA_llr2[k2] = rxDATA_llr[k]; - if ((k&3) == 2) - k2+=2; - } - } - break; - case 1: // QPSK - llr_ptr = rxDATA_llr; - memset(rxDATA_llr,0,96); - for (k=0;k<96;k++) { - pos = interleaver_qpsk[k]; - tmp = ((int16_t*)rxDATA_F_comp3)[pos]>>4; - - if (tmp<-8) - rxDATA_llr[k] = -8; - else if (tmp>7) - rxDATA_llr[k] = 7; - else - rxDATA_llr[k] = (int8_t)tmp; - } - if (rxv->rate==3) { // rate 3/4, so add zeros for punctured bits - llr_ptr = rxDATA_llr2; - memset(rxDATA_llr2,0,144); - for (k=0,k2=0;k<96;k++,k2++) { - rxDATA_llr2[k2] = rxDATA_llr[k]; - if ((k&3) == 2) - k2+=2; - } - } - break; - case 2: // 16QAM - llr_ptr = rxDATA_llr; - memset(rxDATA_llr,0,192); - for (k=0;k<192;k++) { - pos = interleaver_16qam[k]; - // printf("k %d, pos %d\n",k,pos); - if ((pos&1)==1) { - tmp = ((int16_t*)rxDATA_F_comp2)[pos>>1]>>4; - // printf("pos (msb) %d : %d\n",pos>>1,tmp); - } - else { - tmp = ((int16_t*)rxDATA_F_comp2)[pos>>1]; - tmp = (tmp<0)? tmp : -tmp; - tmp = (tmp + rxDATA_F_mag[pos>>2])>>4; - // printf("pos (lsb) %d : rxDATA_F_mag[%d] %d : %d (%d)\n",pos>>1,pos>>2,rxDATA_F_mag[pos>>2],tmp,((int16_t*)rxDATA_F_comp2)[pos>>1]); - } - - if (tmp<-8) - rxDATA_llr[k] = -8; - else if (tmp>7) - rxDATA_llr[k] = 7; - else - rxDATA_llr[k] = (int8_t)tmp; - /* - if (tmp<-128) - rxDATA_llr[k] = -128; - else if (tmp>127) - rxDATA_llr[k] = 127; - else - rxDATA_llr[k] = (int8_t)tmp; - */ - } - if (rxv->rate==5) { // rate 3/4, so add zeros for punctured bits - llr_ptr = rxDATA_llr2; - memset(rxDATA_llr2,0,288); - for (k=0,k2=0;k<192;k++,k2++) { - rxDATA_llr2[k2] = rxDATA_llr[k]; - if ((k&3) == 2) - k2+=2; - } - } -#ifdef DEBUG_DATA - sprintf(fname,"rxDATA_llr_%d.m",s); - sprintf(vname,"rxDAT_llr_%d",s); - write_output(fname,vname, rxDATA_llr,192,1,4); -#endif - break; - case 3: // 64QAM - return(0==1); - break; - } - /* - printf("LLRs:"); - for (i=0;i<48;i++) - printf("%d,",llr_ptr[i]); - - printf("viterbi s %d/%d\n",s,dlen_symb-1); - */ -#ifdef EXECTIME -#ifdef RTAI - tout=rt_get_time_ns(); - dd_t3 += (tout-tin); - tin=rt_get_time_ns(); -#else - ret=clock_gettime(CLOCK_REALTIME,&tout); - dd_t3 += (tout.tv_nsec-tin.tv_nsec); - - ret=clock_gettime(CLOCK_REALTIME,&tin); -#endif -#endif - - if (s < (dlen_symb-1)) - phy_viterbi_dot11_sse2(llr_ptr,data_ind,Ndbps[rxv->rate],s*Ndbps[rxv->rate],0); - else { - phy_viterbi_dot11_sse2(llr_ptr,data_ind,Ndbps[rxv->rate],s*Ndbps[rxv->rate],1); - - // scramble data - // printf("DATA %x.%x.",data_ind[0],data_ind[1]); - data_ind[0] ^= scrambler[0]; // service byte 0 - data_ind[1] ^= scrambler[1]; // service byte 1 - - j=2; - for (i=0;i<(rxv->sdu_length+4);i++,j++) { // sdu+crc - // printf("%x.",data_ind[i+2]); - if (j==(127*8)) - j=0; - data_ind[i+2]^=scrambler[j]; - - } - // printf("\n"); - - crc_rx = 0xffffffff; - crc32(data_ind,&crc_rx,2+rxv->sdu_length); -#ifdef DEBUG_DATA - printf("Received CRC %x.%x.%x.%x (%x), computed %x\n", - data_ind[2+rxv->sdu_length], - data_ind[2+rxv->sdu_length+1], - data_ind[2+rxv->sdu_length+2], - data_ind[2+rxv->sdu_length+3], - *(uint32_t*)&data_ind[2+rxv->sdu_length], - crc_rx); - - printf("SDU length %d\n",rxv->sdu_length); - for (i=0;isdu_length;i++) { - if ((i&15) == 0) - printf("\n %04x : %02x",i,data_ind[2+i]); - else - printf(".%02x",data_ind[2+i]); - } - printf("\n"); -#endif - } -#ifdef EXECTIME -#ifdef RTAI - tout=rt_get_time_ns(); - dd_t4 += (tout-tin); - tin=rt_get_time_ns(); -#else - ret=clock_gettime(CLOCK_REALTIME,&tout); - dd_t4 += (tout.tv_nsec-tin.tv_nsec); -#endif -#endif - } - - - - - return(*(uint32_t*)&data_ind[2+rxv->sdu_length] == crc_rx); - -} diff --git a/openairITS/phy/DOT11/defs.h b/openairITS/phy/DOT11/defs.h deleted file mode 100644 index 3bcb474d88..0000000000 --- a/openairITS/phy/DOT11/defs.h +++ /dev/null @@ -1,46 +0,0 @@ -#ifndef __DOT11DEFS_H__ -#define __DOT11DEFS_H__ - -#include - -#define MAX_SDU_SIZE 4095 -#define AMP 1024 - -#define ONE_OVER_SQRT_2 23170 -#define ONE_OVER_SQRT_10 10362 -#define ONE_OVER_SQRT_42 7150 - -typedef enum { - BPSK_1_2=0, - BPSK_3_4=1, - QPSK_1_2=2, - QPSK_3_4=3, - QAM16_1_2=4, - QAM16_3_4=5, - QAM64_1_2=6, - QAM64_3_4=7 -} RATE_t; - - -typedef struct { - int sdu_length; - RATE_t rate; - int service; -} TX_VECTOR_t; - -typedef enum { - BUSY = 0, - IDLE = 1 -} CHANNEL_STATUS_t; - -typedef TX_VECTOR_t RX_VECTOR_t; - -int phy_tx_start(TX_VECTOR_t *tx_vector,uint32_t *tx_frame,uint32_t next_TXop_offset,int frame_length,uint8_t *data_ind); -int phy_tx_start_bot(TX_VECTOR_t *tx_vector,int16_t *output_ptr,uint32_t next_TXop_offset,int frame_length,uint8_t *data_ind); - -CHANNEL_STATUS_t initial_sync(RX_VECTOR_t **rx_vector,int *rx_offset,int *log2_maxh,uint32_t *rx_frame,int rx_frame_length,int initial_sample_offset,int one_shot); -int data_detection(RX_VECTOR_t *rxv,uint8_t *data_ind,uint32_t* rx_data,int frame_length,int rx_offset,int log2_maxh,int (*wait(int,int))); - -void print_is_stats(void); -void print_dd_stats(void); -#endif diff --git a/openairITS/phy/DOT11/generate_STSLTS_corr.m b/openairITS/phy/DOT11/generate_STSLTS_corr.m deleted file mode 100644 index 6e5ebf2e9d..0000000000 --- a/openairITS/phy/DOT11/generate_STSLTS_corr.m +++ /dev/null @@ -1,61 +0,0 @@ -nSubcarriers = 48; % Number of data subcarriers -nPilots = 4; % Number of pilot subcarriers -nPointsFFT = 64; % Number of FFT points -nGuardSamples = nPointsFFT/4; % Samples in the guard interval - -shortseq = (1.472) * complex(1,1)* ... - [0, 0, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0, ... - 0, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0]; -X=zeros(nPointsFFT,1); % Empty input to the IFFT -% Map subcarriers -X(39:64) = shortseq(1:26); % Map subcarriers -26 to -1 -X(1) = shortseq(27); % Map DC subcarrier (not really necessary) -X(2:27) = shortseq(28:53); % Map subcarriers 1 to 26 -% IFFT and scale -x=sqrt(nPointsFFT)*ifft(X,nPointsFFT); % IFFT -% Repeat for 2.5 times -short_preamble=[x;x;x(1:32)]; - -longseq = [1, 1,-1,-1, 1, 1,-1, 1,-1, 1, 1, 1, 1, 1, 1,-1,-1, 1, 1,-1, 1,-1, 1, 1, 1, 1, ... - 0, 1,-1,-1, 1, 1,-1, 1,-1, 1,-1,-1,-1,-1,-1, 1, 1,-1,-1, 1,-1, 1,-1, 1, 1, 1, 1]; -X=zeros(nPointsFFT,1); % Empty input to the IFFT -% Map subcarriers -X(39:64) = longseq(1:26); % Map subcarriers -26 to -1 -X(1) = longseq(27); % Map DC subcarrier (not really necessary) -X(2:27) = longseq(28:53); % Map subcarriers 1 to 26 -% IFFT and scale -x=sqrt(nPointsFFT)*ifft(X,nPointsFFT); % IFFT -% Cyclic prefix using block-diagonal matrix T (note: double length!) -I=eye(2*nPointsFFT); % Identitity matrix used to construct T -T=[I(2*nPointsFFT-2*nGuardSamples+1:end,:);I]; % Matrix for cyclic prefix insertion -% Prepend the prefix once to two copies of the sequence -long_preamble=T*[x;x]; - - -STS_LTS = [short_preamble.' long_preamble.']; - -STS_LTS_F = fft(STS_LTS,512); - -STS_LTS_2 = floor(32767*STS_LTS_F/sqrt(512*9)); - -STS_LTS_3 = zeros(2048,1); - -STS_LTS_3(1:4:end) = real(STS_LTS_2); -STS_LTS_3(2:4:end) = imag(STS_LTS_2); -STS_LTS_3(3:4:end) = -imag(STS_LTS_2); -STS_LTS_3(4:4:end) = real(STS_LTS_2); - -fd = fopen("STS_LTS_F.h","w"); -fprintf(fd,"int16_t STS_LTS_F[2048] __attribute__((aligned(16))) = {"); -fprintf(fd,"%d,",STS_LTS_3(1:(end-1))); -fprintf(fd,"%d};\n\n",STS_LTS_3(end)); - - -X2 = zeros(256,1); -X2(1:4:end) = X; -X2(4:4:end) = X; -fprintf(fd,"int16_t LTS_F[256] __attribute__((aligned(16))) = {"); -fprintf(fd,"%d,",X2(1:(end-1))); -fprintf(fd,"%d};\n",X2(end)); - -fclose(fd); diff --git a/openairITS/phy/DOT11/initial_sync.c b/openairITS/phy/DOT11/initial_sync.c deleted file mode 100644 index bbc59e8b7d..0000000000 --- a/openairITS/phy/DOT11/initial_sync.c +++ /dev/null @@ -1,506 +0,0 @@ -#ifdef EXECTIME -#ifdef RTAI -#include -#include -#include -#else -#include -#endif -#endif - -#include "defs.h" -#include -#include "STS_LTS_F.h" -#include "PHY/TOOLS/defs.h" -#include -#include -#include -#include "PHY/TOOLS/twiddle512.h" -#include "PHY/TOOLS/twiddle64.h" - -#define CA_THRESHOLD 40 - -//extern int16_t twiddle_fft64[63*4*2]; -//extern int16_t twiddle_ifft64[63*4*2]; - -uint16_t rev512[512]; -extern uint16_t rev64[64]; -int init_rev=0; - -int rate2ind[16] = {0,0,0,0,0,0,0,0,6,4,2,0,7,5,3,1}; - -//#define DEBUG_SYNC 1 - -//#define EXECTIME 1 - -RX_VECTOR_t rxv; -int16_t chest[256] __attribute__((aligned(16))); -extern int interleaver_bpsk[48]; -int16_t signalF[512*2*2]; -int16_t corrT[1024*2] __attribute__((aligned(16))); -int16_t corrF[1024*2] __attribute__((aligned(16))); -int16_t rxLTS_F[128*2] __attribute__((aligned(16))); -int16_t rxSIGNAL_F[128*2] __attribute__((aligned(16))); -uint32_t rxSIGNAL_F_comp[64*2] __attribute__((aligned(16))); -uint32_t rxSIGNAL_F_comp2[48] __attribute__((aligned(16))); -uint32_t rxSIGNAL_F_comp3[48] __attribute__((aligned(16))); -int8_t rxSIGNAL_llr[48] __attribute__((aligned(16))); -int mag,max_mag; - -#ifdef EXECTIME -#ifdef RTAI -RTIME is_t1=0,is_t2=0,is_t3=0,is_t4=0,is_t5,is_t6,is_t7,is_t8,is_t9; -extern unsigned int *DAQ_MBOX; -unsigned int is_mbox1,is_mbox2; -#else -long is_t1=0,is_t2=0,is_t3=0,is_t4=0,is_t5,is_t6,is_t7,is_t8,is_t9; -#endif -int init_synch_trials=0; -int signal_trials=0; - -void print_is_stats() { - - if (init_synch_trials>0) { - printf("Initial sync stats (STSLTS Corr) : Trials %d, is_t1 (512pt FFT) %d ns, is_t2 %d ns (STSLTS Corr), is_t3 %d ns (512pt IFFT), is_t4 %d ns (Peak Search/Detection)\n",init_synch_trials, - (int)is_t1/init_synch_trials,(int)is_t2/init_synch_trials,(int)is_t3/init_synch_trials,(int)is_t4/init_synch_trials); -#ifdef RTAI - printf("is_mbox1 (STS) %f (%f us)\n", - (10.0*is_mbox1/init_synch_trials)/10.0, - (666*is_mbox1/init_synch_trials)/10.0); -#endif - } - - if (signal_trials>0) { - printf("Initial sync stats (SIGNAL) : Trials %d, is_t5 (LTS FFT) %d ns, is_t6 (LTS Est.) %d ns, is_t7 (SIGNAL FFT) %d ns, is_t8 (SIGNAL Comp. + Deinter) %d ns, is_t9 (SIGNAL Viterbi) %d ns\n",signal_trials, - (int)is_t5/signal_trials,(int)is_t6/signal_trials,(int)is_t7/signal_trials,(int)is_t8/signal_trials,(int)is_t9/signal_trials); -#ifdef RTAI - printf("is_mbox2 (STS+SIGNAL) %f (%f us)\n", - (10.0*is_mbox2/signal_trials)/10.0, - (666*is_mbox2/signal_trials)/10.0); -#endif - } - init_synch_trials=0; - signal_trials=0; - is_t1=0; - is_t2=0; - is_t3=0; - is_t4=0; - is_t5=0; - is_t6=0; - is_t7=0; - is_t8=0; - is_t9=0; -#ifdef RTAI - is_mbox1=0; - is_mbox2=0; -#endif -} -#endif - -int is_sleeping_cnt=0; -CHANNEL_STATUS_t initial_sync(RX_VECTOR_t **rx_vector, - int *rx_offset, - int *log2_maxh, - uint32_t *rx_frame, - int rx_frame_length, - int initial_sample_offset, - int one_shot) { - - int32_t energy,peak_energy,mean_energy; - int n,i,i2,j,j2,k,peak_pos,found_sync=0,LTS2_pos,SIGNAL_pos,offset; - uint32_t pilot1,pilot2,pilot3,pilot4; - int16_t tmp; - int pos; - int32_t cfo_re32,cfo_im32; - int32_t cfo_Q15; - - uint8_t signal_sdu[3] __attribute__((aligned(16))); - - int signal_parity; -#ifdef EXECTIME -#ifdef RTAI - RTIME tin,tout; - unsigned int mboxin,mboxout; -#else - struct timespec tin,tout; -#endif -#endif - int ret; - // int32_t m[640]; - // int16_t re,im; - - if (init_rev == 0) - init_fft(512,9,rev512); - - // Check for start of PLCP in buffer (scan over 640 sample span) - - peak_energy = 0; - peak_pos = 0; - // m[0] = 0; - - // for (n=0;n<640;n+=160) { - // for (j=n;j>2) + (((int32_t)re*re + (int32_t)im*im)>>2); -#ifdef DEBUG_SYNC - // printf("j %d (%d) : m[j] %d,m[j-10] %d, re %d, im %d, abs %d\n",j,rx_frame_pos,m[j],m[j-10],re,im,(int32_t)re*re + (int32_t)im*im); -#endif - // if ((j>20) && (m[j] > (m[j-10]<<3))) { - n = initial_sample_offset - (initial_sample_offset&3); - if ((n+640)>rx_frame_length) - memcpy((void*)rx_frame+rx_frame_length,(void*)rx_frame,(n+640-rx_frame_length)<<2); -#ifdef EXECTIME -#ifdef RTAI - tin=rt_get_time_ns(); - mboxin = ((unsigned int *)DAQ_MBOX)[0]; -#else - ret=clock_gettime(CLOCK_REALTIME,&tin); -#endif -#endif - - // ensure 64-bit alignment on FFT input - // if ((j&1) == 0) - // offset=6; - // else - // offset=5; - - fft((int16_t *)(rx_frame+n), /// complex input - signalF, /// complex output - &twiddle_fft512[0], /// complex twiddle factors - rev512, /// bit reversed permutation vector - 9, /// log2(FFT_SIZE) - 4, /// scale (energy normalized for 64-point) - 0); /// 0 means 64-bit complex interleaved format else complex-multiply ready repeated format -#ifdef EXECTIME -#ifdef RTAI - tout=rt_get_time_ns(); - is_t1 += (tout-tin); - tin=rt_get_time_ns(); -#else - ret=clock_gettime(CLOCK_REALTIME,&tout); - is_t1 += (tout.tv_nsec-tin.tv_nsec); - - ret=clock_gettime(CLOCK_REALTIME,&tin); -#endif -#endif - mult_cpx_vector(signalF,STS_LTS_F,corrF,512,15); - -#ifdef EXECTIME -#ifdef RTAI - tout=rt_get_time_ns(); - is_t2 += (tout-tin); - tin=rt_get_time_ns(); -#else - ret=clock_gettime(CLOCK_REALTIME,&tout); - is_t2 += (tout.tv_nsec-tin.tv_nsec); - - - ret=clock_gettime(CLOCK_REALTIME,&tin); -#endif -#endif - - fft(corrF, /// complex input - corrT, /// complex output - &twiddle_ifft512[0], /// complex twiddle factors - rev512, /// bit reversed permutation vector - 9, /// log2(FFT_SIZE) - 5, /// scale (energy normalized for 64-point) - 1); /// 0 means 64-bit complex interleaved format else complex-multiply ready repeated format - -#ifdef EXECTIME -#ifdef RTAI - tout=rt_get_time_ns(); - is_t3 += (tout-tin); - tin=rt_get_time_ns(); -#else - ret=clock_gettime(CLOCK_REALTIME,&tout); - is_t3 += (tout.tv_nsec-tin.tv_nsec); - - - ret=clock_gettime(CLOCK_REALTIME,&tin); -#endif -#endif - - // look for peak and compare to average output - mean_energy = 0; - peak_energy = 0; - for (i2=0,j2=0;i2<512;i2++,j2+=4) { - energy = corrT[j2]*corrT[j2] + corrT[j2+1]*corrT[j2+1]; - if (energy > peak_energy) { - peak_energy = energy; - peak_pos = n+i2; - if ((peak_pos&1)==1) - peak_pos--; // ensure peak_pos is 64-bit aligned - } - mean_energy += energy; - } - - mean_energy -= peak_energy; - mean_energy>>=9; -#ifdef DEBUG_SYNC - if (mean_energy>0) - printf("n %d: mean energy %d/%d dB, peak_energy %d/%d dB, ratio %d, pos %d\n",n,mean_energy,dB_fixed(mean_energy),peak_energy,dB_fixed(peak_energy),peak_energy/mean_energy,peak_pos); - else - printf("n %d: mean energy %d\n",n,mean_energy); - // for (j2=n;j2<=j;j2++) - // printf("m[%d] %d\n",j2,m[j2]); -#endif - -#ifdef EXECTIME -#ifdef RTAI - tout=rt_get_time_ns(); - is_t4 += (tout-tin); - tin=rt_get_time_ns(); -#else - ret=clock_gettime(CLOCK_REALTIME,&tout); - is_t4+=(tout.tv_nsec-tin.tv_nsec); -#endif - init_synch_trials++; -#endif -#ifdef EXECTIME -#ifdef RTAI - mboxout = ((unsigned int *)DAQ_MBOX)[0]; - if (mboxout < mboxin) - is_mbox1 += ((150+mboxout)-mboxin); - else - is_mbox1 += (mboxout-mboxin); -#endif -#endif - - if ((dB_fixed(mean_energy) > 10) && (peak_energy>(50*mean_energy))) { -#ifdef DEBUG_SYNC - write_output("STSLTScorr.m","STSLTScorrT", corrT,512,2,1); -#endif - // *rx_vector = &rxv; - *rx_vector = NULL; - - // now try to estimate channel and decode SIGNAL field - LTS2_pos = peak_pos + 240; -#ifdef EXECTIME -#ifdef RTAI - tin=rt_get_time_ns(); -#else - ret=clock_gettime(CLOCK_REALTIME,&tin); -#endif -#endif - fft((int16_t *)(rx_frame+16+LTS2_pos), /// complex input - rxLTS_F, /// complex output - &twiddle_fft64[0], /// complex twiddle factors - rev64, /// bit reversed permutation vector - 6, /// log2(FFT_SIZE) - 3, /// scale (energy normalized for 64-point) - 0); /// 0 means 64-bit complex interleaved format else complex-multiply ready repeated format -#ifdef EXECTIME -#ifdef RTAI - tout=rt_get_time_ns(); - is_t5 += (tout-tin); - tin = rt_get_time_ns(); -#else - ret=clock_gettime(CLOCK_REALTIME,&tout); - is_t5+=(tout.tv_nsec-tin.tv_nsec); - ret=clock_gettime(CLOCK_REALTIME,&tin); -#endif -#endif - mult_cpx_vector(rxLTS_F,LTS_F,chest,64,0); - -#ifdef EXECTIME -#ifdef RTAI - tout=rt_get_time_ns(); - is_t6 += (tout-tin); -#else - ret=clock_gettime(CLOCK_REALTIME,&tout); - is_t6+=(tout.tv_nsec-tin.tv_nsec); -#endif -#endif - -#ifdef DEBUG_SYNC - write_output("rxLTS.m","rLTS", rx_frame+16+LTS2_pos,64,1,1); - write_output("rxLTS_F.m","rLTS_F", rxLTS_F,256,1,1); - write_output("chest.m","ch", chest,128,1,1); -#endif - -#ifdef EXECTIME -#ifdef RTAI - tin = rt_get_time_ns(); -#else - ret=clock_gettime(CLOCK_REALTIME,&tin); -#endif -#endif - - SIGNAL_pos = LTS2_pos + 80; - fft((int16_t *)(rx_frame+16+SIGNAL_pos), /// complex input - rxSIGNAL_F, /// complex output - &twiddle_fft64[0], /// complex twiddle factors - rev64, /// bit reversed permutation vector - 6, /// log2(FFT_SIZE) - 3, /// scale (energy normalized for 64-point) - 0); /// 0 means 64-bit complex interleaved format else complex-multiply ready repeated format - max_mag=0; - for (i=0;i<256;i+=4) { - mag = (int32_t)chest[i]*chest[i] + (int32_t)chest[i+1]*chest[i+1]; - if (mag > max_mag) - max_mag = mag; - } - *log2_maxh = log2_approx(max_mag)/2; - - - mult_cpx_vector_norep_unprepared_conjx2(rxSIGNAL_F,chest,(int16_t*)rxSIGNAL_F_comp,64,*log2_maxh); -#ifdef EXECTIME -#ifdef RTAI - tout=rt_get_time_ns(); - is_t7 += (tout-tin); - tin = rt_get_time_ns(); -#else - ret=clock_gettime(CLOCK_REALTIME,&tout); - is_t7+=(tout.tv_nsec-tin.tv_nsec); - ret=clock_gettime(CLOCK_REALTIME,&tin); -#endif -#endif - // extract 48 statistics and 4 pilot symbols - // -ve portion - for (i=0;i<5;i++) - rxSIGNAL_F_comp2[i] = rxSIGNAL_F_comp[(38+i)]; - pilot1 = ((uint32_t*)rxSIGNAL_F)[(38+5)<<1]; - - for (;i<18;i++) - rxSIGNAL_F_comp2[i] = rxSIGNAL_F_comp[(38+1+i)]; - pilot2 = ((uint32_t*)rxSIGNAL_F)[(38+19)<<1]; - - for (;i<24;i++) - rxSIGNAL_F_comp2[i] = rxSIGNAL_F_comp[(38+2+i)]; - - // +ve portion - for (;i<30;i++) - rxSIGNAL_F_comp2[i] = rxSIGNAL_F_comp[(-24+1+i)]; - pilot3 = ((uint32_t*)rxSIGNAL_F)[(6+1)<<1]; - for (;i<43;i++) - rxSIGNAL_F_comp2[i] = rxSIGNAL_F_comp[(-24+2+i)]; - pilot4 = ((uint32_t*)rxSIGNAL_F)[(19+2)<<1];((int16_t *)&pilot4)[0]=-((int16_t *)&pilot4)[0];((int16_t *)&pilot4)[1]=-((int16_t *)&pilot4)[1]; - for (;i<48;i++) - rxSIGNAL_F_comp2[i] = rxSIGNAL_F_comp[(-24+3+i)]; - - // CFO compensation - cfo_re32 = ((((int16_t *)&pilot1)[0]*(int32_t)chest[(38+5)<<2]) + - (((int16_t *)&pilot1)[1]*(int32_t)chest[1+((38+5)<<2)])); - cfo_im32 = -((((int16_t *)&pilot1)[1]*(int32_t)chest[(38+5)<<2]) + - (((int16_t *)&pilot1)[0]*(int32_t)chest[1+((38+5)<<2)])); - - cfo_re32 += (((((int16_t *)&pilot2)[0]*(int32_t)chest[(38+19)<<2]) + - (((int16_t *)&pilot2)[1]*(int32_t)chest[1+((38+19)<<2)]))); - cfo_im32 += (-((((int16_t *)&pilot2)[1]*(int32_t)chest[(38+19)<<2]) + - (((int16_t *)&pilot2)[0]*(int32_t)chest[1+((38+19)<<2)]))); - - cfo_re32 += (((((int16_t *)&pilot3)[0]*(int32_t)chest[(6+1)<<2]) + - (((int16_t *)&pilot3)[1]*(int32_t)chest[1+((6+1)<<2)]))); - cfo_im32 += (-((((int16_t *)&pilot3)[1]*(int32_t)chest[(6+1)<<2]) + - (((int16_t *)&pilot3)[0]*(int32_t)chest[1+((6+1)<<2)]))); - - cfo_re32 += (((((int16_t *)&pilot4)[0]*(int32_t)chest[(19+2)<<2]) + - (((int16_t *)&pilot4)[1]*(int32_t)chest[1+((19+2)<<2)]))); - cfo_im32 += (-((((int16_t *)&pilot4)[1]*(int32_t)chest[(19+2)<<2]) + - (((int16_t *)&pilot4)[0]*(int32_t)chest[1+((19+2)<<2)]))); - - ((int16_t*)&cfo_Q15)[0] = (int16_t)(cfo_re32>>(2+*log2_maxh)); - ((int16_t*)&cfo_Q15)[1] = (int16_t)(cfo_im32>>(2+*log2_maxh)); -#ifdef DEBUG_SYNC - printf("is: p=[%d+(%d)*j , %d+(%d)*j , %d+(%d)*j , %d+(%d)*j] * ch =[%d+(%d)*j , %d+(%d)*j , %d+(%d)*j , %d+(%d)*j] => cfo_Q15 (%d,%d), CFO32 (%d,%d)\n", - ((int16_t *)&pilot1)[0],((int16_t *)&pilot1)[1], - ((int16_t *)&pilot2)[0],((int16_t *)&pilot2)[1], - ((int16_t *)&pilot3)[0],((int16_t *)&pilot3)[1], - ((int16_t *)&pilot4)[0],((int16_t *)&pilot4)[1], - chest[(38+5)<<2],chest[1+((38+5)<<2)], - chest[(38+19)<<2],chest[1+((38+19)<<2)], - chest[(6+1)<<2],chest[1+((6+1)<<2)], - chest[(19+2)<<2],chest[1+((19+2)<<2)], - ((int16_t*)&cfo_Q15)[0],((int16_t*)&cfo_Q15)[1], - cfo_re32,cfo_im32); -#endif - - rotate_cpx_vector_norep(rxSIGNAL_F_comp2,&cfo_Q15,rxSIGNAL_F_comp3,48,*log2_maxh>>1); - -#ifdef DEBUG_SYNC - write_output("rxSIGNAL_F.m","rxSIG_F", rxSIGNAL_F,128,2,1); - write_output("rxSIGNAL_F_comp.m","rxSIG_F_comp", rxSIGNAL_F_comp,64,1,1); - write_output("rxSIGNAL_F_comp2.m","rxSIG_F_comp2", rxSIGNAL_F_comp2,48,1,1); -#endif - - // CFO compensation - - // now deinterleave SIGNAL - for (k=0;k<48;k++) { - // printf("interleaver_bpsk[%d] = %d\n",k,interleaver_bpsk[k]); - tmp = ((int16_t*)rxSIGNAL_F_comp3)[k<<1]>>4; - pos = interleaver_bpsk[k]; - if (tmp<-8) - rxSIGNAL_llr[pos] = -8; - else if (tmp>7) - rxSIGNAL_llr[pos] = 7; - else - rxSIGNAL_llr[pos] = (int8_t)tmp; - // rxSIGNAL_llr[k] = (tmp > 7) ? 7 : ((tmp < -8) ? -8 : (int8_t)tmp); - } -#ifdef EXECTIME -#ifdef RTAI - tout=rt_get_time_ns(); - is_t8 += (tout-tin); - tin = rt_get_time_ns(); -#else - ret=clock_gettime(CLOCK_REALTIME,&tout); - is_t8+=(tout.tv_nsec-tin.tv_nsec); - ret=clock_gettime(CLOCK_REALTIME,&tin); -#endif -#endif - // Viterbi decoding - signal_sdu[0]=0; - signal_sdu[1]=0; - signal_sdu[2]=0; - - phy_viterbi_dot11_sse2(rxSIGNAL_llr,signal_sdu,24,0,1); - - // check parity and reconstruct RX_VECTOR - signal_parity = 0; - for (i=0;i<8;i++) { - signal_parity += ((signal_sdu[0]&(1<0)? 1 : 0; - signal_parity += ((signal_sdu[1]&(1<0)? 1 : 0; - signal_parity += ((signal_sdu[2]&(1<0)? 1 : 0; - } - - if ((signal_parity&1) == 0) { - rxv.rate = rate2ind[signal_sdu[0]&0xF]; - rxv.sdu_length = signal_sdu[0] >> 5; - rxv.sdu_length += signal_sdu[1] << 3; - rxv.sdu_length += (signal_sdu[2]&1) << 11; - *rx_vector = &rxv; - *rx_offset = peak_pos+400; - } -#ifdef EXECTIME -#ifdef RTAI - tout=rt_get_time_ns(); - is_t9 += (tout-tin); - - mboxout = ((unsigned int *)DAQ_MBOX)[0]; - if (mboxout < mboxin) - is_mbox2 += ((150+mboxout)-mboxin); - else - is_mbox2 += (mboxout-mboxin); - -#else - ret=clock_gettime(CLOCK_REALTIME,&tout); - is_t9+=(tout.tv_nsec-tin.tv_nsec); -#endif - signal_trials++; -#endif -#ifdef DEBUG_SYNC - printf("Decoded RX_VECTOR: %x,%x,%x\n", - // ((uint8_t *)&rxv)[0],((uint8_t *)&rxv)[1],((uint8_t *)&rxv)[2]); - signal_sdu[0],signal_sdu[1],signal_sdu[2]); - - write_output("rxSIGNAL_llr.m","rxSIG_llr", rxSIGNAL_llr,48,1,4); -#endif - - return(BUSY); - } - - return(IDLE); -} diff --git a/openairITS/phy/DOT11/interleaver.c b/openairITS/phy/DOT11/interleaver.c deleted file mode 100644 index 3bc7d6e21f..0000000000 --- a/openairITS/phy/DOT11/interleaver.c +++ /dev/null @@ -1,36 +0,0 @@ -#include - -int interleaver_bpsk[48]; -int interleaver_qpsk[96]; -int interleaver_16qam[192]; -int interleaver_64qam[288]; - -extern int Ncbps[8]; - -void init_interleavers() { - - int i,j,k; - - // BPSK - for (k=0;k<48;k++) { - i=(3*(k&15)) + (k>>4); - interleaver_bpsk[k] = i; - } - // QPSK - for (k=0;k<96;k++) { - i=(6*(k&15)) + (k>>4); - interleaver_qpsk[k] = i; - } - // 16QAM - for (k=0;k<192;k++) { - i=(12*(k&15)) + (k>>4); - j=((i>>1)<<1) + ((i + 192 - (i/12))&1); - interleaver_16qam[k] = j; - } - // 64QAM - for (k=0;k<288;k++) { - i=(18*(k&15)) + (k>>4); - j=((i/3)*3) + ((i + 288 - (i/12))&1); - interleaver_64qam[k] = j; - } -} diff --git a/openairITS/phy/DOT11/phy_tx_start.c b/openairITS/phy/DOT11/phy_tx_start.c deleted file mode 100644 index 419ca408b1..0000000000 --- a/openairITS/phy/DOT11/phy_tx_start.c +++ /dev/null @@ -1,467 +0,0 @@ -#include -#include -#include -#include -#include -#include "defs.h" -#include "txvars.h" -#include "PHY/CODING/defs.h" -#include "PHY/TOOLS/defs.h" - -//#define DEBUG_TX - -int ratemap[8] = {11,15,10,14,9,13,8,12}; -int rateparity[8] = {1,0,0,1,0,1,1,0}; -int Ndbps[8] = {24,36,48,72,96,144,192,216}; // CodeRate*48*ModOrder -int Ncbps[8] = {48,48,96,96,192,192,288,288}; -int puncturing[8] = {0,1,0,1,0,1,2,1}; - -int16_t BPSK[2] = {-AMP,AMP}; -int16_t QPSK[2] = {-((AMP*ONE_OVER_SQRT_2)>>15),+((AMP*ONE_OVER_SQRT_2)>>15)}; - -int16_t QAM16[4] = {-((AMP*3*ONE_OVER_SQRT_10)>>15), //00 - -((AMP*1*ONE_OVER_SQRT_10)>>15), //01 - ((AMP*3*ONE_OVER_SQRT_10)>>15), //10 - ((AMP*1*ONE_OVER_SQRT_10)>>15)}; //11 - -int16_t QAM64[8] = {-((AMP*7*ONE_OVER_SQRT_42)>>15), //000 - -((AMP*5*ONE_OVER_SQRT_42)>>15), //001 - -((AMP*1*ONE_OVER_SQRT_42)>>15), //010 - -((AMP*3*ONE_OVER_SQRT_42)>>15), //011 - ((AMP*7*ONE_OVER_SQRT_42)>>15), //100 - ((AMP*5*ONE_OVER_SQRT_42)>>15), //101 - ((AMP*1*ONE_OVER_SQRT_42)>>15), //110 - ((AMP*3*ONE_OVER_SQRT_42)>>15)}; //111 - -extern uint16_t rev64[64]; -extern int16_t twiddle_ifft64[63*4*2]; -extern uint8_t scrambler[127*8]; -extern int interleaver_bpsk[48]; -extern int interleaver_qpsk[96]; -extern int interleaver_16qam[192]; -extern int interleaver_64qam[288]; - - - - -uint8_t data_coded[65632]; //65632 = (4095 byte SDU + 4 byte CRC + 2 byte service + 1 byte tail)*8 bits/byte * 2 coded bits per bit -uint8_t data_ind2[4095]; - -int phy_tx_start_bot(TX_VECTOR_t *tx_vector,int16_t *output_ptr,uint32_t tx_offset,int frame_length,uint8_t *data_ind) { - - uint8_t signal[3]; - int rate_bits; - int signal_bits[24]; - - uint8_t signal_coded[48]; - int16_t signal_interleaved[48]; - uint8_t*dc; - int data_interleaved[288]; - int16_t dataF[128] __attribute__((aligned(16))); - int signal_parity=0; - int16_t signalF[128] __attribute__((aligned(16))); - int i,j,k; // z,p - int16_t tmp_t[64*2*2]; - uint32_t *crc; - int dlen,dlen_symb; - int *interleaver; - int s,sprime; - int16_t *output_ptr2; - int tx_offset2; - int overlap=0; - - memset(signal_bits,0,24*sizeof(int)); - memset(signalF,0,64*2*sizeof(int16_t)); - memset(dataF,0,64*2*sizeof(int16_t)); - - assert(((unsigned int)tx_vector->rate)<8); - - rate_bits = ratemap[(int)tx_vector->rate]; - signal_parity = rateparity[(int)tx_vector->rate]; - - assert(tx_vector->sdu_length<=4095); - assert(tx_vector->rate<=7); - - - for (i=0;i<12;i++) - signal_parity += ((tx_vector->sdu_length&(1<0) ? 1:0; - signal_parity&=1; -#ifdef DEBUG_TX - printf("SIGNAL parity %d (rate parity %d, rate_bits %d)\n",signal_parity,rateparity[(int)tx_vector->rate],rate_bits); -#endif - signal[0] = (rate_bits&0xF)+((tx_vector->sdu_length&0x7)<<5); // first byte has 4 rate bits, 1-bit zero-padding, 3 LSB of sdu_length - signal[1] = ((tx_vector->sdu_length>>3)&0xFF); // second byte has bits 10:3 of sdu_length - signal[2] = ((tx_vector->sdu_length>>11)&1) + (signal_parity<<1); -#ifdef DEBUG_TX - printf("Transmitted TX_VECTOR: %x,%x,%x\n", - signal[0],signal[1],signal[2]); -#endif - ccodedot11_encode(3,signal,signal_coded,0); - -#ifdef DEBUG_TX - printf("SIGNAL (coded) : "); - for (i=0;i<48;i++) - printf("%d ",signal_coded[i]); - printf("\n"); -#endif - - // frequency interleaving - for (i=0;i<48;i++) { - signal_interleaved[i] = AMP*((signal_coded[interleaver_bpsk[i]]<<1)-1); - } -#ifdef DEBUG_TX - printf("SIGNAL (interleaved) : "); - for (i=0;i<48;i++) - printf("%d ",signal_interleaved[i]); - printf("\n"); -#endif - // -ve portion - for (i=0;i<5;i++) - signalF[(38+i)<<1]=signal_interleaved[i]; - signalF[(38+5)<<1]=AMP; - for (;i<18;i++) - signalF[(38+1+i)<<1]=signal_interleaved[i]; - signalF[(38+19)<<1]=AMP; - for (;i<24;i++) - signalF[(38+2+i)<<1]=signal_interleaved[i]; - - // +ve portion - for (;i<30;i++) - signalF[(-24+1+i)<<1]=signal_interleaved[i]; - signalF[(6+1)<<1]=AMP; - for (;i<43;i++) - signalF[(-24+2+i)<<1]=signal_interleaved[i]; - signalF[(19+2)<<1]=-AMP; - for (;i<48;i++) - signalF[(-24+3+i)<<1]=signal_interleaved[i]; -#ifdef DEBUG_TX - printf("SIGNAL (TX) :"); - for (i=0;i<64;i++) - printf("%d ",signalF[i<<1]); - printf("\n"); -#endif - - - fft(signalF, /// complex input - tmp_t, /// complex output - &twiddle_ifft64[0], /// complex twiddle factors - rev64, /// bit reversed permutation vector - 6, /// log2(FFT_SIZE) - 3, /// scale (energy normalized for 64-point) - 0); /// 0 means 64-bit complex interleaved format else complex-multiply ready repeated format - - // copy STS_LTS to start of packet - - tx_offset2 = (tx_offset<<1); - overlap=0; - if ((tx_offset2 + 640) > (frame_length<<1)) - overlap = 1; - output_ptr2 = &output_ptr[tx_offset2]; - -#ifdef EXMIMO - for (i=0;i<320;i++) { - output_ptr2[(i<<1)] = ((int16_t *)STS_LTS_t)[i<<1]<<2; - output_ptr2[1+(i<<1)] = ((int16_t *)STS_LTS_t)[1+(i<<1)]<<2; - } -#else - memcpy(output_ptr2,STS_LTS_t,640*sizeof(int16_t)); - -#endif - - if (overlap == 1) - memcpy((void*)output_ptr, - (void*)&output_ptr[frame_length<<1], - (tx_offset2 + 640 - (frame_length<<1))<<1); - - // position of SIGNAL - tx_offset2 = (tx_offset<<1) + 640; - - overlap=0; - if (tx_offset2 > (frame_length<<1)) - tx_offset2-=frame_length; - else if ((tx_offset2 + 160) > (frame_length<<1)) - overlap = 1; - - output_ptr2 = &output_ptr[tx_offset2]; - - // cyclic extension and output scaling - for (i=0,j=48;i<80;i++,j++) { - if (j==64) - j=0; - // printf("j %d : %d,%d\n",j,tmp_t[j<<2],tmp_t[1+(j<<2)]); -#ifdef EXMIMO - output_ptr2[(i<<1)] = tmp_t[j<<2]<<2; // RE component - output_ptr2[1+(i<<1)] = tmp_t[1+(j<<2)]<<2; // IM component -#else - output_ptr2[(i<<1)] = tmp_t[j<<2]; // RE component - output_ptr2[1+(i<<1)] = tmp_t[1+(j<<2)]; // IM component -#endif - } - if (overlap == 1) { - memcpy((void*)output_ptr, - (void*)&output_ptr[frame_length<<1], - (tx_offset2 + 160 - (frame_length<<1))<<1); - } - - - // now do data portion - crc = (uint32_t*)&data_ind[tx_vector->sdu_length+2]; - *crc = 0xffffffff; - crc32(data_ind,crc,tx_vector->sdu_length+2); - - dlen = 32+16+6+(tx_vector->sdu_length<<3); // data length is 32-bits CRC + sdu + 16 service + 6 tail - dlen_symb = dlen/Ndbps[tx_vector->rate]; - if ((dlen%Ndbps[tx_vector->rate])>0) - dlen_symb++; - -#ifdef DEBUG_TX - printf("Number of symbols in data portion : %d for %d bytes, CRC %x\n",dlen_symb,tx_vector->sdu_length,*crc); -#endif - // scramble data - - data_ind2[0] = scrambler[0]; // service byte 0 - data_ind2[1] = scrambler[1]; // service byte 1 - // printf("DATA (%x)%x.(%x)%x.",data_ind[0]^scrambler[0],data_ind[0],data_ind[1]^scrambler[1],data_ind[1]); - j=2; - for (i=0;isdu_length+4;i++,j++) { // sdu+crc - if (j==(127*8)) - j=0; - // printf("(%x)",data_ind[i+2]); - data_ind2[i+2]=data_ind[i+2]^scrambler[j]; - // printf("%x.",data_ind[i+2]); - - } - // printf("\n"); - data_ind2[tx_vector->sdu_length+2+4] = 0; // tail (2 extra which are used filled later) - // encode with conv. code - ccodedot11_encode(tx_vector->sdu_length+2+4+1, // 4 for CRC, 2 for service, 1 for tail - data_ind2, - data_coded, - puncturing[tx_vector->rate]); - -#ifdef DEBUG_TX - printf("DATA (coded) : \n"); - for (i=0;i<48*3;i++) { - printf("%d ",data_coded[i]); - if ((i%48) == 47) - printf("\n"); - } - printf("\n"); -#endif - - // interleaving - switch(tx_vector->rate>>1) { - case 0: - interleaver=interleaver_bpsk; - break; - case 1: - interleaver=interleaver_qpsk; - break; - case 2: - interleaver=interleaver_16qam; - break; - case 3: - interleaver=interleaver_64qam; - break; - } - - dc = data_coded; - for (s=0,sprime=1;srate],sprime++) { - - // index for pilot symbol lookup - if (sprime==127) - sprime=0; - - for (k=0;krate];k++) { -#ifdef DEBUG_TX - if (s==0) - printf("interleaver k %d, j %d (%d) \n",k,interleaver[k],dc[k]); -#endif - data_interleaved[interleaver[k]] = dc[k]; - } - - switch (tx_vector->rate>>1) { - case 0: // BPSK - // -ve portion - for (i=0;i<5;i++) - dataF[(38+i)<<1]=BPSK[data_interleaved[i]&1]; - dataF[(38+5)<<1]=Pseq[sprime]; // Pilot 1 - for (;i<18;i++) - dataF[(38+1+i)<<1]=BPSK[data_interleaved[i]&1]; - dataF[(38+19)<<1]=Pseq[sprime]; // Pilot 2 - for (;i<24;i++) - dataF[(38+2+i)<<1]=BPSK[data_interleaved[i]&1]; - - // +ve portion - for (;i<30;i++) - dataF[(-24+1+i)<<1]=BPSK[data_interleaved[i]&1]; - dataF[(6+1)<<1]=Pseq[sprime]; // Pilot 3 - for (;i<43;i++) - dataF[(-24+2+i)<<1]=BPSK[data_interleaved[i]&1]; - dataF[(19+2)<<1]=-Pseq[sprime]; // Pilot 4 - for (;i<48;i++) - dataF[(-24+3+i)<<1]=BPSK[data_interleaved[i]&1]; - - break; - - case 1: // QPSK - // -ve portion - for (i=0;i<5;i++) { - dataF[(38+i)<<1] = QPSK[data_interleaved[i<<1]]; - dataF[1+((38+i)<<1)] = QPSK[data_interleaved[1+(i<<1)]]; - } - dataF[(38+5)<<1]=Pseq[sprime]; - for (;i<18;i++) { - dataF[(38+1+i)<<1] = QPSK[data_interleaved[i<<1]]; - dataF[1+((38+1+i)<<1)] = QPSK[data_interleaved[1+(i<<1)]]; - } - dataF[(38+19)<<1]=Pseq[sprime]; - for (;i<24;i++) { - dataF[(38+2+i)<<1] = QPSK[data_interleaved[i<<1]]; - dataF[1+((38+2+i)<<1)] = QPSK[data_interleaved[1+(i<<1)]]; - } - // +ve portion - for (;i<30;i++) { - dataF[(-24+1+i)<<1]=QPSK[data_interleaved[i<<1]]; - dataF[1+((-24+1+i)<<1)]=QPSK[data_interleaved[1+(i<<1)]]; - } - dataF[(6+1)<<1]=Pseq[sprime]; - for (;i<43;i++) { - dataF[(-24+2+i)<<1]=QPSK[data_interleaved[i<<1]]; - dataF[1+((-24+2+i)<<1)]=QPSK[data_interleaved[1+(i<<1)]]; - } - dataF[(19+2)<<1]=-Pseq[sprime]; - for (;i<48;i++) { - dataF[(-24+3+i)<<1]=QPSK[data_interleaved[i<<1]]; - dataF[1+((-24+3+i)<<1)]=QPSK[data_interleaved[1+(i<<1)]]; - } - break; - case 2: // 16QAM - // -ve portion - for (i=0;i<5;i++) { - dataF[(38+i)<<1] = QAM16[data_interleaved[i<<2] + (data_interleaved[1+(i<<2)]<<1)]; - dataF[1+((38+i)<<1)] = QAM16[data_interleaved[2+(i<<2)] + (data_interleaved[3+(i<<2)]<<1)]; - } - dataF[(38+5)<<1]=Pseq[sprime]; - for (;i<18;i++) { - dataF[(38+1+i)<<1] = QAM16[data_interleaved[i<<2] + (data_interleaved[1+(i<<2)]<<1)]; - dataF[1+((38+1+i)<<1)] = QAM16[data_interleaved[2+(i<<2)] + (data_interleaved[3+(i<<2)]<<1)]; - } - dataF[(38+19)<<1]=Pseq[sprime]; - for (;i<24;i++) { - dataF[(38+2+i)<<1] = QAM16[data_interleaved[i<<2] + (data_interleaved[1+(i<<2)]<<1)]; - dataF[1+((38+2+i)<<1)] = QAM16[data_interleaved[2+(i<<2)] + (data_interleaved[3+(i<<2)]<<1)]; - } - // +ve portion - for (;i<30;i++) { - dataF[(-24+1+i)<<1] = QAM16[data_interleaved[i<<2] + (data_interleaved[1+(i<<2)]<<1)]; - dataF[1+((-24+1+i)<<1)] = QAM16[data_interleaved[2+(i<<2)] + (data_interleaved[3+(i<<2)]<<1)]; - } - dataF[(6+1)<<1]=Pseq[sprime]; - for (;i<43;i++) { - dataF[(-24+2+i)<<1] = QAM16[data_interleaved[i<<2] + (data_interleaved[1+(i<<2)]<<1)]; - dataF[1+((-24+2+i)<<1)] = QAM16[data_interleaved[2+(i<<2)] + (data_interleaved[3+(i<<2)]<<1)]; - } - dataF[(19+2)<<1]=-Pseq[sprime]; - for (;i<48;i++) { - dataF[(-24+3+i)<<1] = QAM16[data_interleaved[i<<2] + (data_interleaved[1+(i<<2)]<<1)]; - dataF[1+((-24+3+i)<<1)] = QAM16[data_interleaved[2+(i<<2)] + (data_interleaved[3+(i<<2)]<<1)]; - } - - break; - - case 3: // 64QAM - // -ve portion - for (i=0;i<5;i++) { - dataF[(38+i)<<1] = QAM64[data_interleaved[i<<3] + (data_interleaved[1+(i<<3)]<<1) + (data_interleaved[2+(i<<3)]<<2)]; - dataF[1+((38+i)<<1)] = QAM64[data_interleaved[3+(i<<3)] + (data_interleaved[4+(i<<3)]<<1) + (data_interleaved[5+(i<<3)]<<1)]; - } - dataF[(38+5)<<1]=Pseq[sprime]; - for (;i<18;i++) { - dataF[(38+1+i)<<1] = QAM64[data_interleaved[i<<3] + (data_interleaved[1+(i<<3)]<<1) + (data_interleaved[2+(i<<3)]<<2)]; - dataF[1+((38+1+i)<<1)] = QAM64[data_interleaved[3+(i<<3)] + (data_interleaved[4+(i<<3)]<<1) + (data_interleaved[5+(i<<3)]<<1)]; - } - dataF[(38+19)<<1]=Pseq[sprime]; - for (;i<24;i++) { - dataF[(38+2+i)<<1] = QAM64[data_interleaved[i<<3] + (data_interleaved[1+(i<<3)]<<1) + (data_interleaved[2+(i<<3)]<<2)]; - dataF[1+((38+2+i)<<1)] = QAM64[data_interleaved[3+(i<<3)] + (data_interleaved[4+(i<<3)]<<1) + (data_interleaved[5+(i<<3)]<<1)]; - } - // +ve portion - for (;i<30;i++) { - dataF[(-24+1+i)<<1] = QAM64[data_interleaved[i<<3] + (data_interleaved[1+(i<<3)]<<1) + (data_interleaved[2+(i<<3)]<<2)]; - dataF[1+((-24+1+i)<<1)] = QAM64[data_interleaved[3+(i<<3)] + (data_interleaved[4+(i<<3)]<<1) + (data_interleaved[5+(i<<3)]<<1)]; - } - dataF[(6+1)<<1]=Pseq[sprime]; - for (;i<43;i++) { - dataF[(-24+2+i)<<1] = QAM64[data_interleaved[i<<3] + (data_interleaved[1+(i<<3)]<<1) + (data_interleaved[2+(i<<3)]<<2)]; - dataF[1+((-24+2+i)<<1)] = QAM64[data_interleaved[3+(i<<3)] + (data_interleaved[4+(i<<3)]<<1) + (data_interleaved[5+(i<<3)]<<1)]; - } - dataF[(19+2)<<1]=-Pseq[sprime]; - for (;i<48;i++) { - dataF[(-24+3+i)<<1] = QAM64[data_interleaved[i<<3] + (data_interleaved[1+(i<<3)]<<1) + (data_interleaved[2+(i<<3)]<<2)]; - dataF[1+((-24+3+i)<<1)] = QAM64[data_interleaved[3+(i<<3)] + (data_interleaved[4+(i<<3)]<<1) + (data_interleaved[5+(i<<3)]<<1)]; - } - - break; - default: - break; - } - - -#ifdef DEBUG_TX - if (s<12) { - for (i=0;i<64;i++) - printf("s %d, k %d: (%d,%d)\n",s,i,dataF[i<<1],dataF[1+(i<<1)]); - } -#endif - - fft(dataF, /// complex input - tmp_t, /// complex output - &twiddle_ifft64[0], /// complex twiddle factors - rev64, /// bit reversed permutation vector - 6, /// log2(FFT_SIZE) - 3, /// scale (energy normalized for 64-point) - 0); /// 0 means 64-bit complex interleaved format else complex-multiply ready repeated format - - // cyclic extension and output scaling - tx_offset2 += 160; - - overlap=0; - if (tx_offset2 >= (frame_length<<1)) - tx_offset2 -= (frame_length<<1); - else if ((tx_offset2 + 160) > (frame_length<<1)) - overlap = 1; - - output_ptr2 = &output_ptr[tx_offset2]; - for (i=0,j=48;i<80;i++,j++) { - if (j==64) - j=0; - // printf("j %d : %d,%d\n",j,tmp_t[j<<2],tmp_t[1+(j<<2)]); -#ifdef EXMIMO - output_ptr2[(i<<1)] = tmp_t[j<<2]<<2; // RE component - output_ptr2[1+(i<<1)] = tmp_t[1+(j<<2)]<<2; // IM component -#else - output_ptr2[(i<<1)] = tmp_t[j<<2]; // RE component - output_ptr2[1+(i<<1)] = tmp_t[1+(j<<2)]; // IM component -#endif - } - if (overlap == 1) { - memcpy((void*)output_ptr, - (void*)&output_ptr[frame_length<<1], - (tx_offset2 + 160 - (frame_length<<1))<<1); - } - } - - - return(400+(80*dlen_symb)); -} - -int init_tx=0; - -int phy_tx_start(TX_VECTOR_t *tx_vector,uint32_t *tx_frame,uint32_t next_TXop_offset,int frame_length,uint8_t *data_ind) { -#ifdef DEBUG_TX - printf("tx_frame %p\n",tx_frame); -#endif - return(phy_tx_start_bot(tx_vector,(int16_t *)tx_frame,next_TXop_offset,frame_length,data_ind)); - -} diff --git a/openairITS/phy/DOT11/scrambler.c b/openairITS/phy/DOT11/scrambler.c deleted file mode 100644 index af89d79825..0000000000 --- a/openairITS/phy/DOT11/scrambler.c +++ /dev/null @@ -1,27 +0,0 @@ -#include - -uint8_t scrambler[127*8] = {0x70, - 0x4f, - 0x93, - 0x40, - 0x64, - 0x74, - 0x6d, - 0x30, - 0x2b, - 0xe7, - 0x2d, - 0x54, - 0x5f, - 0x8a, - 0x1d, - 0xff}; - -void init_scrambler() { - - int i; - - for (i=16;i<(127*8);i++) { - scrambler[i] = (scrambler[i-16]>>1) + ((scrambler[i-15]&1)<<7); - } -} diff --git a/openairITS/phy/DOT11/txvars.h b/openairITS/phy/DOT11/txvars.h deleted file mode 100644 index acc537c2d6..0000000000 --- a/openairITS/phy/DOT11/txvars.h +++ /dev/null @@ -1,54 +0,0 @@ -#include "defs.h" - -int16_t STS_LTS_t[640] = { 376, 376,-1086, 19, -111, -644, 1169, -104, 753, 0, 1169, -104, -111, -644,-1086, 19, - 376, 376, 19,-1086, -644, -111, -104, 1169, 0, 753, -104, 1169, -644, -111, 19,-1086, - 376, 376,-1086, 19, -111, -644, 1169, -104, 753, 0, 1169, -104, -111, -644,-1086, 19, - 376, 376, 19,-1086, -644, -111, -104, 1169, 0, 753, -104, 1169, -644, -111, 19,-1086, - 376, 376,-1086, 19, -111, -644, 1169, -104, 753, 0, 1169, -104, -111, -644,-1086, 19, - 376, 376, 19,-1086, -644, -111, -104, 1169, 0, 753, -104, 1169, -644, -111, 19,-1086, - 376, 376,-1086, 19, -111, -644, 1169, -104, 753, 0, 1169, -104, -111, -644,-1086, 19, - 376, 376, 19,-1086, -644, -111, -104, 1169, 0, 753, -104, 1169, -644, -111, 19,-1086, - 376, 376,-1086, 19, -111, -644, 1169, -104, 753, 0, 1169, -104, -111, -644,-1086, 19, - 376, 376, 19,-1086, -644, -111, -104, 1169, 0, 753, -104, 1169, -644, -111, 19,-1086, - 376, 376,-1086, 19, -111, -644, 1169, -104, 753, 0, 1169, -104, -111, -644,-1086, 19, - 376, 376, 19,-1086, -644, -111, -104, 1169, 0, 753, -104, 1169, -644, -111, 19,-1086, - 376, 376,-1086, 19, -111, -644, 1169, -104, 753, 0, 1169, -104, -111, -644,-1086, 19, - 376, 376, 19,-1086, -644, -111, -104, 1169, 0, 753, -104, 1169, -644, -111, 19,-1086, - 376, 376,-1086, 19, -111, -644, 1169, -104, 753, 0, 1169, -104, -111, -644,-1086, 19, - 376, 376, 19,-1086, -644, -111, -104, 1169, 0, 753, -104, 1169, -644, -111, 19,-1086, - 376, 376,-1086, 19, -111, -644, 1169, -104, 753, 0, 1169, -104, -111, -644,-1086, 19, - 376, 376, 19,-1086, -644, -111, -104, 1169, 0, 753, -104, 1169, -644, -111, 19,-1086, - 376, 376,-1086, 19, -111, -644, 1169, -104, 753, 0, 1169, -104, -111, -644,-1086, 19, - 376, 376, 19,-1086, -644, -111, -104, 1169, 0, 753, -104, 1169, -644, -111, 19,-1086, - -1280, 0, 100, -800, 751, -868, -753, -944, -23, -441, 615, 606,-1044, 167, -999, 135, - -288, 1236, -463, 178, -495, -666, 569, -116, 673, -757,-1076, -535, -469, -322, 302, -806, - 512, 512, 976, 33, -185,-1317, 480, 122, 200, 479,-1121, 388, 8, 942, 436, -34, - 799, 212, -314, 869, -944, 452, 490, 718, 172, -229, 793, -679, 325, 910, -42, 985, - 1280, 0, -42, -986, 325, -911, 793, 678, 172, 228, 490, -719, -944, -453, -314, -870, - 799, -213, 436, 33, 8, -943,-1121, -389, 200, -480, 480, -123, -185, 1316, 976, -34, - 512, -512, 302, 805, -469, 321,-1076, 534, 673, 756, 569, 115, -495, 665, -463, -179, - -288,-1237, -999, -136,-1044, -168, 615, -607, -23, 440, -753, 943, 751, 867, 100, 799, - -1280, 0, 100, -800, 751, -868, -753, -944, -23, -441, 615, 606,-1044, 167, -999, 135, - -288, 1236, -463, 178, -495, -666, 569, -116, 673, -757,-1076, -535, -469, -322, 302, -806, - 512, 512, 976, 33, -185,-1317, 480, 122, 200, 479,-1121, 388, 8, 942, 436, -34, - 799, 212, -314, 869, -944, 452, 490, 718, 172, -229, 793, -679, 325, 910, -42, 985, - 1280, 0, -42, -986, 325, -911, 793, 678, 172, 228, 490, -719, -944, -453, -314, -870, - 799, -213, 436, 33, 8, -943,-1121, -389, 200, -480, 480, -123, -185, 1316, 976, -34, - 512, -512, 302, 805, -469, 321,-1076, 534, 673, 756, 569, 115, -495, 665, -463, -179, - -288,-1237, -999, -136,-1044, -168, 615, -607, -23, 440, -753, 943, 751, 867, 100, 799, - -1280, 0, 100, -800, 751, -868, -753, -944, -23, -441, 615, 606,-1044, 167, -999, 135, - -288, 1236, -463, 178, -495, -666, 569, -116, 673, -757,-1076, -535, -469, -322, 302, -806, - 512, 512, 976, 33, -185,-1317, 480, 122, 200, 479,-1121, 388, 8, 942, 436, -34, - 799, 212, -314, 869, -944, 452, 490, 718, 172, -229, 793, -679, 325, 910, -42, 985}; - -// Pilot sequence of 127 BPSK symbols - -int16_t Pseq[127] = { AMP, AMP, AMP, AMP,-AMP,-AMP,-AMP, AMP,-AMP,-AMP,-AMP,-AMP, AMP, AMP,-AMP, AMP, - -AMP,-AMP, AMP, AMP,-AMP, AMP, AMP,-AMP, AMP, AMP, AMP, AMP, AMP, AMP,-AMP, AMP, - AMP, AMP,-AMP, AMP, AMP,-AMP,-AMP, AMP, AMP, AMP,-AMP, AMP,-AMP,-AMP,-AMP, AMP, - -AMP, AMP,-AMP,-AMP, AMP,-AMP,-AMP, AMP, AMP, AMP, AMP, AMP,-AMP,-AMP, AMP, AMP, - -AMP,-AMP, AMP,-AMP, AMP,-AMP, AMP, AMP,-AMP,-AMP,-AMP, AMP, AMP,-AMP,-AMP,-AMP, - -AMP, AMP,-AMP,-AMP, AMP,-AMP, AMP, AMP, AMP, AMP,-AMP, AMP,-AMP, AMP,-AMP, AMP, - -AMP,-AMP,-AMP,-AMP,-AMP, AMP,-AMP, AMP, AMP,-AMP, AMP,-AMP, AMP, AMP, AMP,-AMP, - -AMP, AMP,-AMP,-AMP,-AMP, AMP, AMP, AMP,-AMP,-AMP,-AMP,-AMP,-AMP,-AMP,-AMP}; - diff --git a/openairITS/phy/DRIVERS/.cproject b/openairITS/phy/DRIVERS/.cproject deleted file mode 100644 index 88bba72969..0000000000 --- a/openairITS/phy/DRIVERS/.cproject +++ /dev/null @@ -1,209 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/openairITS/phy/DRIVERS/.project b/openairITS/phy/DRIVERS/.project deleted file mode 100644 index a8b5ab5da0..0000000000 --- a/openairITS/phy/DRIVERS/.project +++ /dev/null @@ -1,77 +0,0 @@ - - - PLATA - - - - - - org.eclipse.cdt.managedbuilder.core.genmakebuilder - clean,full,incremental, - - - ?name? - - - - org.eclipse.cdt.make.core.append_environment - true - - - org.eclipse.cdt.make.core.autoBuildTarget - all - - - org.eclipse.cdt.make.core.buildArguments - - - - org.eclipse.cdt.make.core.buildCommand - make - - - org.eclipse.cdt.make.core.cleanBuildTarget - clean - - - org.eclipse.cdt.make.core.contents - org.eclipse.cdt.make.core.activeConfigSettings - - - org.eclipse.cdt.make.core.enableAutoBuild - false - - - org.eclipse.cdt.make.core.enableCleanBuild - true - - - org.eclipse.cdt.make.core.enableFullBuild - true - - - org.eclipse.cdt.make.core.fullBuildTarget - all - - - org.eclipse.cdt.make.core.stopOnError - true - - - org.eclipse.cdt.make.core.useDefaultBuildCmd - true - - - - - org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder - - - - - - org.eclipse.cdt.core.cnature - org.eclipse.cdt.managedbuilder.core.managedBuildNature - org.eclipse.cdt.managedbuilder.core.ScannerConfigNature - - diff --git a/openairITS/phy/DRIVERS/Makefile b/openairITS/phy/DRIVERS/Makefile deleted file mode 100644 index d3cae5c274..0000000000 --- a/openairITS/phy/DRIVERS/Makefile +++ /dev/null @@ -1,20 +0,0 @@ -CC=gcc -MAKE=/usr/bin/make -CONFIG_IEEE80211P=m -KERNELDIR ?= /lib/modules/$(shell uname -r)/build -PWD := $(shell pwd) - -NOSTDINC_FLAGS := -I$(M)/../../mac/DOT11/include/ \ - -obj-$(CONFIG_IEEE80211P) += ieee80211p.o -ieee80211p-y += ieee80211p-driver.o - -default : - $(MAKE) -C $(KERNELDIR) M=$(PWD) modules - -clean : - $(MAKE) -C $(KERNELDIR) M=$(PWD) clean - -show : - @echo $(KERNELDIR) - @echo $(NOSTDINC_FLAGS) diff --git a/openairITS/phy/DRIVERS/ieee80211p-driver.c b/openairITS/phy/DRIVERS/ieee80211p-driver.c deleted file mode 100644 index b11ce7ff70..0000000000 --- a/openairITS/phy/DRIVERS/ieee80211p-driver.c +++ /dev/null @@ -1,701 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) EURECOM / Thales Communications & Security - * - * Portions of this file are derived from the Atheros ath5k project. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * The full GNU General Public License is included in this distribution in the - * file called LICENSE. - * - * Contact Information: - * Thales Communications & Security - * - *****************************************************************************/ - -/****************************************************************************** - * - * Includes - * - *****************************************************************************/ - -#include "ieee80211p-driver.h" - -/****************************************************************************** - * - * Module information - * - *****************************************************************************/ - -#define DRV_DESCRIPTION "IEEE 802.11p driver" -#define DRV_VERSION "V1.0" -#define DRV_AUTHOR "EURECOM / THALES COMMUNICATIONS & SECURITY" - -MODULE_LICENSE("GPL"); -MODULE_VERSION(DRV_VERSION); -MODULE_DESCRIPTION(DRV_DESCRIPTION); -MODULE_AUTHOR(DRV_AUTHOR); - -/****************************************************************************** - * - * Driver's private data - * - *****************************************************************************/ - -static struct ieee80211p_priv drv_priv_data; - -/****************************************************************************** - * - * Driver's private data related routines : RX path / Init / Exit - * - *****************************************************************************/ - -/*********** - * RX path * - ***********/ - -int find_rate_idx(struct ieee80211p_priv *priv, - enum ieee80211_band band, u16 bitrate) { - - /* Data rate index */ - int rate_idx = -1; - - /* Loop variable */ - int i; - - struct wiphy *wiphy = priv->hw->wiphy; - - /* We look for the idx of the RX bitrate in the bitrates of the band */ - for (i=0;ibands[band]->n_bitrates;i++) { - if (wiphy->bands[band]->bitrates[i].bitrate == bitrate) { - rate_idx = i; - } - } - - return rate_idx; - -} /* ieee80211p_find_rate_idx */ - -/************************ - * RX path / RX tasklet * - ************************/ - -static void ieee80211p_tasklet_rx(unsigned long data) { - - /* Driver's private data */ - struct ieee80211p_priv *priv = (void *)data; - - /* RX skb */ - struct sk_buff *skb = priv->rx_skb; - - /* RX status */ - struct ieee80211_rx_status *rxs = NULL; - struct ieee80211p_rx_status *rs = NULL; - - /* Netlink header */ - struct nlmsghdr *nlh = NULL; - - /* Netlink command */ - char *nlcmd = NULL; - - /* Received data rate index */ - int rate_idx = -1; - - /* lock */ - spin_lock(&priv->rxq_lock); - - /************************ - * Netlink skb handling * - ************************/ - - printk(KERN_ERR "ieee80211p_tasklet_rx: receiving data from PHY\n"); - - if (skb == NULL) { - printk(KERN_ERR "ieee80211_tasklet_rx: received skb == NULL\n"); - goto error; - } - - /* Get the netlink message header */ - nlh = (struct nlmsghdr *)skb->data; - - /* Check the command of the received msg */ - nlcmd = (char *)NLMSG_DATA(nlh); - if (*nlcmd == NLCMD_INIT) { - /* Keep track of the softmodem pid */ - priv->pid_softmodem = nlh->nlmsg_pid; - printk(KERN_ERR "ieee80211_tasklet_rx: NLCMD_INIT received / softmodem pid = %u\n",priv->pid_softmodem); - dev_kfree_skb_any(skb); - goto error; - } - - /* Remove the nlmsg header + netlink command */ - rs = (struct ieee80211p_rx_status *)skb_pull(skb,sizeof(struct nlmsghdr)+NLCMD_SIZE); - - if (rs == NULL) { - printk(KERN_ERR "ieee80211_tasklet_rx: rx status == NULL\n"); - dev_kfree_skb_any(skb); - goto error; - } - - /********* - * Stats * - *********/ - - rxs = IEEE80211_SKB_RXCB(skb); - - if (rxs == NULL) { - printk(KERN_ERR "ieee80211_tasklet_rx: rx status == NULL\n"); - dev_kfree_skb_any(skb); - goto error; - } - - /* Keep track of the stats sent by the softmodem */ - rxs->freq = priv->cur_chan->center_freq; - rxs->signal = rs->rssi; - rxs->band = rs->band; - rxs->flag = 0; - rate_idx = find_rate_idx(priv,rxs->band,rs->rate); - - if (rate_idx == -1) { - printk(KERN_ERR "ieee80211_tasklet_rx: unknown data rate %u\n",rs->rate); - dev_kfree_skb_any(skb); - goto error; - } else { - rxs->rate_idx = rate_idx; - } - - if (rs->flags & IEEE80211P_MMIC_ERROR) { - rxs->flag |= RX_FLAG_MMIC_ERROR; - } - if (rs->flags & IEEE80211P_FAILED_FCS_CRC) { - rxs->flag |= RX_FLAG_FAILED_FCS_CRC; - } - if (rs->flags & IEEE80211P_FAILED_PLCP_CRC) { - rxs->flag |= RX_FLAG_FAILED_PLCP_CRC; - } - if (rs->flags & IEEE80211P_MACTIME_MPDU) { - rxs->flag |= RX_FLAG_MACTIME_MPDU; - } - if (rs->flags & IEEE80211P_NO_SIGNAL_VAL) { - rxs->flag |= RX_FLAG_NO_SIGNAL_VAL; - } - - /* Remove the rx status from the skb */ - skb_pull(skb,sizeof(struct ieee80211p_rx_status)); - - printk(KERN_ERR "ieee80211p_tasklet_rx: sending data to ieee80211\n"); - - /* Give skb to the mac80211 subsystem */ - ieee80211_rx(priv->hw, skb); - -error: - /* unlock */ - spin_unlock(&priv->rxq_lock); - -} /* ieee80211p_tasklet_rx */ - -/************************ - * RX path / RX handler * - ************************/ - -static void ieee80211p_rx(struct sk_buff *skb) { - - /* We copy the received buffer since we need to modify it */ - drv_priv_data.rx_skb = skb_copy(skb,GFP_ATOMIC); - - /* Schedule a tasklet to handle the receivded skb */ - tasklet_schedule(&drv_priv_data.rx_tq); -} - -/******** - * Init * - ********/ - -static int reg_copy_regd(const struct ieee80211_regdomain **dst_regd, - const struct ieee80211_regdomain *src_regd) { - - struct ieee80211_regdomain *regd; - int size_of_regd = 0; - int ret = 0; - int i = 0; - - size_of_regd = sizeof(struct ieee80211_regdomain) + ((src_regd->n_reg_rules + 1)*(sizeof(struct ieee80211_reg_rule))); - - regd = kzalloc(size_of_regd, GFP_KERNEL); - - if (!regd) { - ret = -1; - goto error; - } - - memcpy(regd,src_regd,sizeof(struct ieee80211_regdomain)); - - for (i=0;in_reg_rules;i++) { - memcpy(®d->reg_rules[i],&src_regd->reg_rules[i], - sizeof(struct ieee80211_reg_rule)); - } - - *dst_regd = regd; - -error: - return ret; - -} /* reg_copy_regd */ - -int ieee80211p_priv_init(struct ieee80211p_priv *priv) { - - /* Configuration and hardware information for an 802.11 PHY */ - struct ieee80211_hw *hw = priv->hw; - struct wiphy *wiphy = hw->wiphy; - - /* Return value */ - int ret = 0; - - /****************************** - * Initializing hardware data * - ******************************/ - - /* Received signal power is given in dBm */ - /* hw supports 11.p */ - hw->flags = IEEE80211_HW_SIGNAL_DBM | IEEE80211_HW_DOT11OCB_SUPPORTED; - - /* Headroom to reserve in each transmit skb */ - hw->extra_tx_headroom = 0; - - /* Number of available hardware queues */ - hw->queues = IEEE80211P_NUM_TXQ; - - /* Virtual interface's private data size */ - hw->vif_data_size = sizeof(struct ieee80211p_vif_priv); - - /*************************** - * Initializing wiphy data * - ***************************/ - - /* We have our own regulatory domain */ - ret = reg_copy_regd(&wiphy->regd,®d); - - if (ret == -1) { - printk(KERN_ERR "ieee80211p_priv_init: reg domain copy failed\n"); - goto error; - } - - /* Set interface mode */ - /* For now the only supported type of interface is adhoc */ - wiphy->interface_modes = BIT(NL80211_IFTYPE_ADHOC); - - /* Describes the frequency bands a wiphy is able to operate in */ - wiphy->bands[IEEE80211_BAND_0_8GHZ] = &bands; - - /* Enable ieee 80211.p mode */ - wiphy->dot11OCBActivated = 1; - - /*********************************** - * Initilizing driver private data * - ***********************************/ - - /* Lock */ - spin_lock_init(&priv->lock); - - /* RX queues setup */ - spin_lock_init(&priv->rxq_lock); - - tasklet_init(&priv->rx_tq,ieee80211p_tasklet_rx,(unsigned long)priv); - - /* Virtual interfaces init */ - priv->nvifs = 0; - - /* Current channel init */ - /* The default current channel is the 1st one in the band */ - priv->cur_chan = &bands.channels[0]; - - /* Power level init */ - /* Default value = max power level in the default curent channel */ - priv->cur_power = priv->cur_chan->max_power; - - /* Data rate init */ - /* Default value = first bitrate of the band */ - priv->cur_datarate = bands.bitrates[0].bitrate; - - /* Netlink socket init */ - priv->nl_sock = netlink_kernel_create(&init_net,NETLINK_80211P,0,ieee80211p_rx,NULL,THIS_MODULE); - if (priv->nl_sock == NULL) { - printk(KERN_ERR "ieee80211p_priv_init: netlink_kernel_create failed\n"); - ret = -1; - goto error; - } - - priv->pid_softmodem = 0; - - priv->rx_skb = NULL; - - printk(KERN_ERR "ieee80211p_priv_init: initialization done\n"); - -error: - return ret; - -} /* ieee80211p_priv_init */ - -/******** - * Exit * - ********/ - -void ieee80211p_priv_exit(struct ieee80211p_priv *priv) { - - /********************************* - * Freeing driver's private data * - *********************************/ - - tasklet_kill(&priv->rx_tq); - - /*TODO: check if needed */ - /*if (priv->rx_skb != NULL) { - dev_kfree_skb_any(priv->rx_skb); - }*/ - - sock_release(priv->nl_sock->sk_socket); - -} /* ieee80211_priv_exit */ - -/****************************************************************************** - * - * Mandatory callbacks from mac80211 to the driver: TX path, add interface... - * - *****************************************************************************/ - -static void ieee80211p_tx(struct ieee80211_hw *hw, struct sk_buff *skb) { - - /* Netlink message header */ - struct nlmsghdr *nlh = NULL; - - /* Netlink skb */ - struct sk_buff *nlskb = NULL; - - /* The size of the skb */ - int skblen; - - /* Get driver's private data */ - struct ieee80211p_priv *priv = hw->priv; - - /* Get the number of the TX queue */ - int qnum = skb_get_queue_mapping(skb); - - /* Return value */ - int ret = 0; - - printk(KERN_ERR "ieee80211p_tx: receiving data from ieee80211\n"); - - if (qnum >= IEEE80211P_NUM_TXQ) { - printk(KERN_ERR "ieee80211p_tx: wrong queue number\n"); - dev_kfree_skb_any(skb); - return; - } - - if (priv->pid_softmodem == 0) { - printk(KERN_ERR "ieee80211_tx: softmodem pid unknown\n"); - dev_kfree_skb_any(skb); - return; - } - - /* Get the size of the skb */ - if (skb->data_len == 0) { - skblen = skb->len; - } - else { - printk(KERN_ERR "ieee80211p_tx: skb not linear\n"); - dev_kfree_skb_any(skb); - return; - } - - /* Allocate nlskb */ - nlskb = alloc_skb(NLMSG_SPACE(skblen), in_interrupt() ? GFP_ATOMIC : GFP_KERNEL); - - if (nlskb == NULL) { - printk(KERN_ERR "ieee80211p_tx: alloc nlskb failed\n"); - return; - } - - /* Add room for the nlmsg header */ - skb_put(nlskb, NLMSG_SPACE(skblen)); - - /* Configure the nlmsg header */ - nlh = (struct nlmsghdr *)nlskb->data; - nlh->nlmsg_len = NLMSG_SPACE(skblen); - nlh->nlmsg_pid = priv->pid_softmodem; - nlh->nlmsg_flags = 0; - - NETLINK_CB(nlskb).pid = 0; // nlmsg sent from kernel - NETLINK_CB(nlskb).dst_group = NETLINK_80211P_GROUP; - - /* Copy the data from the skb to the nlskb */ - memcpy(NLMSG_DATA(nlh),skb->data,skb->len); - - /* Free the old skb */ - dev_kfree_skb_any(skb); - - printk(KERN_ERR "ieee80211p_tx: sending data to PHY using pid = %d\n",priv->pid_softmodem); - - ret = netlink_unicast(priv->nl_sock,nlskb,priv->pid_softmodem,NETLINK_80211P_GROUP); - - if (ret <= 0) { - printk(KERN_ERR "ieee80211p_tx: netlink mesg not sent ret = %d\n",ret); - return; - } - -} /* ieee80211p_tx */ - - -static int ieee80211p_start(struct ieee80211_hw *hw) { - - /* Nothing to be done here */ - - return 0; - -} /* ieee80211p_start */ - - -static void ieee80211p_stop(struct ieee80211_hw *hw) { - - /* Nothing to be done here */ - -} /* ieee80211p_stop */ - - -static int ieee80211p_add_interface(struct ieee80211_hw *hw, - struct ieee80211_vif *vif) { - - /* Get driver's private data */ - struct ieee80211p_priv *priv = hw->priv; - struct ieee80211p_vif_priv *vif_priv = (void *)vif->drv_priv; - - /* Return value */ - int ret = 0; - - spin_lock(&priv->lock); - - /* Only ADHOC interfaces supported */ - if (vif->type == NL80211_IFTYPE_ADHOC) { - vif_priv->opmode = vif->type; - } else { - printk(KERN_ERR "ieee80211p_add_interface: wrong interface type\n"); - ret = -EOPNOTSUPP; - goto end; - } - - /* Keep track of the number of virtual interfaces */ - priv->nvifs++; - -end: - spin_unlock(&priv->lock); - return ret; - -} /* ieee80211p_add_interface */ - - -static void ieee80211p_remove_interface(struct ieee80211_hw *hw, - struct ieee80211_vif *vif) { - - /* Get driver's private data */ - struct ieee80211p_priv *priv = hw->priv; - - spin_lock(&priv->lock); - - /* Keep track of the number of virtual interfaces */ - priv->nvifs--; - - spin_unlock(&priv->lock); - -} /* ieee80211p_remove_interface */ - - -static int ieee80211p_config(struct ieee80211_hw *hw, u32 changed) { - - /* Get driver's private data */ - struct ieee80211p_priv *priv = hw->priv; - - /* Get device configuration */ - struct ieee80211_conf *conf = &hw->conf; - - spin_lock(&priv->lock); - - /* Current channel changed */ - if (changed & IEEE80211_CONF_CHANGE_CHANNEL) { - if (conf->channel != NULL) { - priv->cur_chan = conf->channel; - } - } - - /* Transmit power changed */ - if (changed & IEEE80211_CONF_CHANGE_POWER) { - priv->cur_power = conf->power_level; - } - - spin_unlock(&priv->lock); - - return 0; - -} /* ieee80211p_config */ - - -static void ieee80211p_configure_filter(struct ieee80211_hw *hw, - unsigned int changed_flags,unsigned int *new_flags, u64 multicast) { - -#define SUPPORTED_FIF_FLAGS \ - (FIF_PROMISC_IN_BSS | FIF_ALLMULTI | FIF_FCSFAIL | \ - FIF_PLCPFAIL | FIF_CONTROL | FIF_OTHER_BSS | \ - FIF_BCN_PRBRESP_PROMISC) - - *new_flags &= SUPPORTED_FIF_FLAGS; - -} /* ieee80211p_configure_filter */ - -/************************************************************************** - * Only the mandatory callbacks of ieee80211p_ops have been implemented * - **************************************************************************/ - -const struct ieee80211_ops ieee80211p_driver_ops = { - .tx = ieee80211p_tx, - .start = ieee80211p_start, - .stop = ieee80211p_stop, - .add_interface = ieee80211p_add_interface, - .remove_interface = ieee80211p_remove_interface, - .config = ieee80211p_config, - .configure_filter = ieee80211p_configure_filter, -}; - -/****************************************************************************** - * - * Driver's entry point - * - *****************************************************************************/ - -/****************** - * Start function * - ******************/ - -static int ieee80211p_driver_start(struct ieee80211p_priv *priv) { - - /* Return value */ - int ret = 0; - - /* Configuration and hardware information for an 802.11 PHY */ - struct ieee80211_hw *hw = NULL; - - /******************************************* - * Allocating hw (mac80211 main structure) * - * and priv (driver private data) * - *******************************************/ - - hw = ieee80211_alloc_hw(sizeof(struct ieee80211p_priv),&ieee80211p_driver_ops); - - if (hw == NULL) { - ret = -1; - printk(KERN_ERR "ieee80211p_driver_start: can't alloc ieee80211 hw\n"); - goto error; - } - - priv->hw = hw; - hw->priv = priv; - - /************************************************* - * Initializing hardware and driver private data * - *************************************************/ - - ret = ieee80211p_priv_init(priv); - - if (ret == -1) { - printk(KERN_ERR "ieee80211p_driver_start: can't init priv data hw\n"); - goto error; - } - - /****************** - * Registering hw * - *****************/ - - ret = ieee80211_register_hw(hw); - - if (ret) { - printk(KERN_ERR "ieee80211p_driver_start: can't reg ieee80211 hw\n"); - goto error; - } - - return 0; - -error: - return ret; - -} /* ieee80211p_driver_start */ - -/***************** - * Stop function * - *****************/ - -static void ieee80211p_driver_stop(struct ieee80211p_priv *priv) { - - /******************** - * Freeing hardware * - ********************/ - - struct ieee80211_hw *hw = priv->hw; - - /* TODO: check if needed */ - //kfree(hw->wiphy->regd); - - ieee80211_unregister_hw(hw); - - ieee80211_free_hw(hw); - - /********************************* - * Freeing driver's private data * - *********************************/ - - ieee80211p_priv_exit(priv); - -} /* ieee80211p_driver_stop */ - -/******************************************* - * Driver's init function called at insmod * - *******************************************/ - -static int __init ieee80211p_init(void) -{ - int ret = 0; - - printk(KERN_DEBUG "ieee80211p_init: ieee80211p module inserted\n"); - - ret = ieee80211p_driver_start(&drv_priv_data); - - if (ret == -1) { - printk(KERN_ERR "ieee80211p_init: can't start ieee80211p driver\n"); - } - - return 0; - -} /* ieee80211p_init */ - -/****************************************** - * Driver's exit function called at rmmod * - ******************************************/ - -static void __exit ieee80211p_exit(void) -{ - ieee80211p_driver_stop(&drv_priv_data); - - printk(KERN_DEBUG "ieee80211p_init: ieee80211p module removed\n"); - -} /* ieee80211p_exit */ - -module_exit(ieee80211p_exit); -module_init(ieee80211p_init); diff --git a/openairITS/phy/DRIVERS/ieee80211p-driver.h b/openairITS/phy/DRIVERS/ieee80211p-driver.h deleted file mode 100644 index 6f71bff8be..0000000000 --- a/openairITS/phy/DRIVERS/ieee80211p-driver.h +++ /dev/null @@ -1,189 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) EURECOM / Thales Communications & Security - * - * Portions of this file are derived from the Atheros ath5k project. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * The full GNU General Public License is included in this distribution in the - * file called LICENSE. - * - * Contact Information: - * Thales Communications & Security - * - *****************************************************************************/ - -#ifndef __ieee80211p_driver_h__ -#define __ieee80211p_driver_h__ - -/****************************************************************************** - * - * Includes - * - *****************************************************************************/ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -/****************************************************************************** - * - * Macros - * - *****************************************************************************/ - -#define ETH_ALEN 6 -#define IEEE80211P_NUM_TXQ 1 -#define IEEE80211P_TXQ_LEN_MAX 100 -#define FALSE 0 -#define TRUE 1 -#define NETLINK_80211P 17 -#define NETLINK_80211P_GROUP 1 -#define NLCMD_INIT 1 -#define NLCMD_DATA 2 -#define NLCMD_SIZE 1 - -/****************************************************************************** - * - * Device structures - * - *****************************************************************************/ - -/****************************** - * Channels / Birates / Bands * - ******************************/ - -/* Supported channel */ -static struct ieee80211_channel channels = { - .band = IEEE80211_BAND_0_8GHZ, - .center_freq = 800, - .hw_value = 0, - .flags = 0, - .max_antenna_gain = 3, - .max_power = 10, - .max_reg_power = 10, - .beacon_found = FALSE, - .orig_flags = 0, - .orig_mag = 0, - .orig_mpwr = 0, -};/* struct ieee80211_channel */ - - -/* Supported bitrate */ -static struct ieee80211_rate bitrates = { - .flags = 0, - .bitrate = 60, //bitrate in units of 100 Kbps - .hw_value = 0, - .hw_value_short = 0, -};/* struct ieee80211_rate */ - -/* Supported bands (channels + bitrates) */ -static struct ieee80211_supported_band bands = { - .channels = &channels, - .bitrates = &bitrates, - .band = IEEE80211_BAND_0_8GHZ, - .n_channels = 1, - .n_bitrates = 1, - .ht_cap.ht_supported = FALSE, -};/* struct ieee80211_supported_band */ - -/*********** - * RX path * - ***********/ - -enum ieee80211p_rx_flags { - IEEE80211P_MMIC_ERROR = 1 << 0, - IEEE80211P_FAILED_FCS_CRC = 1 << 1, - IEEE80211P_FAILED_PLCP_CRC = 1 << 2, - IEEE80211P_MACTIME_MPDU = 1 << 3, - IEEE80211P_NO_SIGNAL_VAL = 1 << 4, -}; - -struct ieee80211p_rx_status { - u16 data_len; //frame data length - u8 rssi; //received power - u8 rate; //reveived data rate in units of 100 kbps - enum ieee80211_band band; - u8 flags; //RX flags -}; /* struct ieee80211p_rx_status */ - -/********************* - * Regulatory domain * - *********************/ - -/* Regulatory domain */ -static struct ieee80211_regdomain regd = { - .n_reg_rules = 1, - .alpha2 = "99", - .dfs_region = 0, - .reg_rules = { - /* start freq / end freq / bandwidth / gain / eirp / flags */ - REG_RULE(0,6000,40,3,47,0), - } -}; - -/************************************ - * Virtual interface's private data * - ************************************/ - -struct ieee80211p_vif_priv { - enum nl80211_iftype opmode; -}; - -/****************************************************************************** - * - * Driver's private data - * - *****************************************************************************/ - -struct ieee80211p_priv { - - /* Configuration and hardware information for an 802.11 PHY */ - struct ieee80211_hw *hw; - - /* RX */ - spinlock_t rxq_lock; - struct tasklet_struct rx_tq; - - /* Nb of virtual interfaces */ - int nvifs; - - /* Current channel in use */ - struct ieee80211_channel *cur_chan; - - /* Current power level in dBm */ - int cur_power; - - /* Current data rate in units of 100 kbps */ - u16 cur_datarate; - - /* Lock used for misc purposes */ - spinlock_t lock; - - /* Netlink socket used for softmodem <-> ieee80211p communications */ - struct sock *nl_sock; - unsigned int pid_softmodem; - struct sk_buff *rx_skb; - -};/* ieee80211p_device_priv */ - -#endif /* __ieee80211_device_h__ */ diff --git a/openairITS/phy/DRIVERS/ieee80211p-netlinkapi.c b/openairITS/phy/DRIVERS/ieee80211p-netlinkapi.c deleted file mode 100644 index 4f8a3985b9..0000000000 --- a/openairITS/phy/DRIVERS/ieee80211p-netlinkapi.c +++ /dev/null @@ -1,195 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) EURECOM / Thales Communications & Security - * - * Portions of this file are derived from Matthias Ihmig source code. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * The full GNU General Public License is included in this distribution in the - * file called LICENSE. - * - * Contact Information: - * Thales Communications & Security - * - *****************************************************************************/ - -/****************************************************************************** - * - * Includes - * - *****************************************************************************/ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "ieee80211p-netlinkapi.h" - -/****************************************************************************** - * - * Routines - * - *****************************************************************************/ - -int netlink_init() { - - int fd, ret; - struct sockaddr_nl s_nladdr; - - fd = socket(AF_NETLINK,SOCK_RAW,NETLINK_80211P); - - if (fd < 0) { - printf("ERROR: socket() failed\n"); - return -1; - } - - /* Source address => from user space */ - memset(&s_nladdr, 0 ,sizeof(s_nladdr)); - s_nladdr.nl_family= AF_NETLINK ; - s_nladdr.nl_pad=0; - s_nladdr.nl_pid = getpid(); - printf("ieee80211 netlink_init(): app pid = %u\n",s_nladdr.nl_pid); - s_nladdr.nl_groups = NETLINK_80211P_GROUP; - - ret = bind(fd, (struct sockaddr*)&s_nladdr, sizeof(s_nladdr)); - - if (ret < 0) { - printf("netlink_init(): bind failed\n"); - return -1; - } - - return fd; -} - -int netlink_send(int fd, int cmd,int payloadlen, char *payload) { - - struct sockaddr_nl d_nladdr; - struct nlmsghdr *nlh = NULL; - char *data; - struct iovec iov; - struct msghdr msg; - int ret; - - /* Destination address â�¼> to kernel space */ - memset(&d_nladdr, 0 ,sizeof(d_nladdr)); - d_nladdr.nl_family= AF_NETLINK ; - d_nladdr.nl_pad=0; - d_nladdr.nl_pid = 0; - d_nladdr.nl_groups = NETLINK_80211P_GROUP; - - /* Netlink message building */ - nlh = (struct nlmsghdr *)malloc(NLMSG_SPACE(payloadlen)+NLMSG_HDRLEN+NLCMD_SIZE); - if (nlh == NULL) { - printf("netlink_send(): netlink header memory not allocated\n"); - return -1; - } - memset(nlh,0,NLMSG_SPACE(payloadlen)+NLMSG_HDRLEN+NLCMD_SIZE); - - /* Header */ - nlh->nlmsg_len = NLMSG_SPACE(payloadlen+NLCMD_SIZE); - nlh->nlmsg_pid = getpid(); - printf("ieee80211 netlink_send(): sending app pid = %u\n",nlh->nlmsg_pid); - nlh->nlmsg_flags = NLM_F_REQUEST; - nlh->nlmsg_type = 21; - - data = (char *)NLMSG_DATA(nlh); - /* Netlink command */ - data[0] = cmd; - /* Payload */ - memcpy(&data[1],payload,payloadlen); - iov.iov_base = (void *)nlh; - iov.iov_len = nlh->nlmsg_len; - memset(&msg,0,sizeof(msg)); - msg.msg_name = (void *)&d_nladdr; - msg.msg_namelen = sizeof(d_nladdr); - msg.msg_iov = &iov; - msg.msg_iovlen = 1; - - /* Send the msg through the netlink socket */ - ret = sendmsg(fd,&msg,0); - - /* Free the netlink msg */ - free(nlh); - - return ret; - -} - -int netlink_recv(int fd,char *packetpayload) { - - struct sockaddr_nl d_nladdr; - struct nlmsghdr *nlh = NULL; - struct iovec iov; - struct msghdr msg; - int packetpayloadlen = 0; - int ret; - - /* Destination address â�¼> to user space */ - memset(&d_nladdr, 0 ,sizeof(d_nladdr)); - - d_nladdr.nl_family= AF_NETLINK; - d_nladdr.nl_groups = NETLINK_80211P_GROUP; - - /* Netlink message building */ - nlh = (struct nlmsghdr *)malloc(NLMSG_SPACE(NL_MAX_PKT_SIZE)+NLMSG_HDRLEN); - - if (nlh == NULL) { - printf("netlink_recv(): netlink header memory not allocated\n"); - return -1; - } - - memset(nlh,0,NLMSG_SPACE(NL_MAX_PKT_SIZE)+NLMSG_HDRLEN); - - iov.iov_base = (void *)nlh; - iov.iov_len = NLMSG_SPACE(NL_MAX_PKT_SIZE); - - memset(&msg,0,sizeof(msg)); - msg.msg_name = (void *)&d_nladdr; - msg.msg_namelen = sizeof(d_nladdr); - msg.msg_iov = &iov; - msg.msg_iovlen = 1; - - /* Receive the msg from the netlink socket */ - /* Blocking call */ - ret = recvmsg(fd,&msg,0); - - if (ret < 0) { - printf("netlink_recv(): error in recvmsg\n"); - return -1; - } - - packetpayloadlen = nlh->nlmsg_len-NLMSG_HDRLEN; - - if (packetpayloadlen < 0) { - printf("netlink_recv(): error in recvmsg\n"); - return -1; - } - - memcpy(packetpayload,NLMSG_DATA(nlh),packetpayloadlen); - - free(nlh); - - return packetpayloadlen; - -} - -void netlink_close(int fd) { - close(fd); -} diff --git a/openairITS/phy/DRIVERS/ieee80211p-netlinkapi.h b/openairITS/phy/DRIVERS/ieee80211p-netlinkapi.h deleted file mode 100644 index 13d60194be..0000000000 --- a/openairITS/phy/DRIVERS/ieee80211p-netlinkapi.h +++ /dev/null @@ -1,55 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) EURECOM / Thales Communications & Security - * - * Portions of this file are derived from Matthias Ihmig source code. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * The full GNU General Public License is included in this distribution in the - * file called LICENSE. - * - * Contact Information: - * Thales Communications & Security - * - *****************************************************************************/ - -#ifndef __ieee80211p_netlinkapi_h__ -#define __ieee80211p_netlinkapi_h__ - -/****************************************************************************** - * - * Macros - * - *****************************************************************************/ - -#define NL_MAX_PKT_SIZE 2000 -#define NETLINK_80211P 17 -#define NETLINK_80211P_GROUP 1 -#define NLCMD_INIT 1 -#define NLCMD_DATA 2 -#define NLCMD_SIZE 1 - -/****************************************************************************** - * - * Declarations - * - *****************************************************************************/ - -int netlink_init(); -int netlink_send(int fd, int cmd,int payloadlen, char *payload); -int netlink_recv(int fd,char *packetpayload); -void netlink_close(int fd); - -#endif /* __ieee80211_netlinkapi_h__ */ diff --git a/openairITS/phy/DRIVERS/ieee80211p-softmodem.c b/openairITS/phy/DRIVERS/ieee80211p-softmodem.c deleted file mode 100644 index 397aa7b3a6..0000000000 --- a/openairITS/phy/DRIVERS/ieee80211p-softmodem.c +++ /dev/null @@ -1,141 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) EURECOM / Thales Communications & Security - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * The full GNU General Public License is included in this distribution in the - * file called LICENSE. - * - * Contact Information: - * Thales Communications & Security - * - *****************************************************************************/ - -/****************************************************************************** - * - * Includes - * - *****************************************************************************/ - -#include -#include -#include -#include "ieee80211p-netlinkapi.h" - -/****************************************************************************** - * - * Definitions - * - *****************************************************************************/ - -enum nl80211_band { - NL80211_BAND_2GHZ, - NL80211_BAND_5GHZ, - NL80211_BAND_5_9GHZ, - NL80211_BAND_0_8GHZ, -}; - -enum ieee80211_band { - IEEE80211_BAND_2GHZ = NL80211_BAND_2GHZ, - IEEE80211_BAND_5GHZ = NL80211_BAND_5GHZ, - IEEE80211_BAND_5_9GHZ = NL80211_BAND_5_9GHZ, - IEEE80211_BAND_0_8GHZ = NL80211_BAND_0_8GHZ, -}; - -struct ieee80211p_rx_status { - short data_len; //frame data length in bytes - char rssi; //received power in dBm - char rate; //reveived data rate in units of 100 kbps - enum ieee80211_band band; - char flags; //RX flags -}; /* struct ieee80211p_rx_status */ - -/****************************************************************************** - * - * Main - * - *****************************************************************************/ - -int main() { - - int fd; - int ret; - /* txdata = data received over the air and to be sent to the stack */ - /* txdata = rx_status (12 bytes) + ICMP echo request (116 bytes) */ - char txdata[128] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x10, 0x21, 0x22, 0x23, 0x24, 0x25, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x01, 0xaa, 0xaa, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x45, 0x00, 0x00, 0x54, 0x00, 0x00, 0x40, 0x00, 0x40, 0x01, 0xb6, 0x57, 0xc0, 0xa8, 0x01, 0x02, 0xc0, 0xa8, 0x01, 0xff, 0x08, 0x00, 0xa6, 0x7e, 0x2a, 0x39, 0x00, 0x0a, 0x4d, 0xcf, 0x1f, 0x50, 0xc5, 0x1b, 0x0a, 0x00, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37}; - /* rxdata = data received from the stack and to be tx over the air */ - char *rxdata; - int i; - struct ieee80211p_rx_status *rs; - - /*********************** - * Netlink socket init * - ***********************/ - - fd = netlink_init(); - - if (fd == -1) { - return -1; - } - - rxdata = (char *)malloc(2000); - - /************************************************************************* - * Send data to the socket to give to the kernel the pid of this process * - *************************************************************************/ - - ret = netlink_send(fd,NLCMD_INIT,10,&txdata[0]); - - /************************************************ - * Send/receive data to/from the netlink socket * - ************************************************/ - - /* Set up struct rx status */ - rs = (struct ieee80211p_rx_status *)&txdata[0]; - rs->data_len = 128; - rs->rssi = 20; - rs->rate = 60; - rs->band = IEEE80211_BAND_0_8GHZ; - rs->flags = 0; - - while (1) { - - /* Send ICMP echo request */ - printf("ieee80211p-softmodem main(): sending echo request\n"); - ret = netlink_send(fd,NLCMD_DATA,128,&txdata[0]); - - /* Receive ICMP echo reply */ - printf("ieee80211p-softmodem main(): waiting echo reply\n"); - ret = netlink_recv(fd,rxdata); - - if (ret > 0) { - - printf("ieee80211p-softmodem main(): "); - for (i=0;i -#include -#include -#include -#include -#include -#include "SIMULATION/TOOLS/defs.h" -#include "SIMULATION/RF/defs.h" - -#include "phy/DOT11/defs.h" -#include "phy/DOT11/commonvars.h" -#include - -#define BW 5.0 - -//#include "PHY/TOOLS/twiddle64.h" - -#include "UTIL/LOG/log.h" - -#define FRAME_LENGTH_SAMPLES_MAX 76800 - -uint16_t rev64[64]; - -#define RX_THRES_dB 26 - -int opp_enabled=1; - -int main(int argc, char **argv) { - - char c; - - int i,aa,aarx; - double sigma2, sigma2_dB=0,SNR,snr0=10.0,snr1=10.2; - int snr1set=0; - uint32_t *txdata,*rxdata[2]; - double *s_re[2],*s_im[2],*r_re[2],*r_im[2]; - double iqim=0.0; - int trial, ntrials=1; - int n_rx=1; - - int awgn_flag=0; - int n_frames=1; - channel_desc_t *ch; - uint32_t tx_lev,tx_lev_dB; - int interf1=-19,interf2=-19; - SCM_t channel_model=AWGN; - uint32_t sdu_length_samples; - TX_VECTOR_t tx_vector; - int errors=0,misdetected_errors=0,signal_errors=0; - int symbols=0; - int tx_offset = 0,rx_offset; - RX_VECTOR_t *rxv; - uint8_t *data_ind,*data_ind_rx; - int no_detection=1; - int missed_packets=0; - uint8_t rxp; - int off,off2; - double txg,txg_dB; - int log2_maxh; - double snr_array[100]; - int errors_array[100]; - int trials_array[100]; - int misdetected_errors_array[100]; - int signal_errors_array[100]; - int missed_packets_array[100]; - int cnt=0; - char fname[100],vname[100]; - int stop=0; - - data_ind = (uint8_t*)malloc(4095+2+1); - data_ind_rx = (uint8_t*)malloc(4095+2+1); - - tx_vector.rate=1; - tx_vector.sdu_length=256; - tx_vector.service=0; - - logInit(); - - randominit(0); - set_taus_seed(0); - - // Basic initializations - init_fft(64,6,rev64); - init_interleavers(); - ccodedot11_init(); - ccodedot11_init_inv(); - phy_generate_viterbi_tables(); - - init_crc32(); - - data_ind[0] = 0; - data_ind[1] = 0; - - tx_offset = taus()%(FRAME_LENGTH_SAMPLES_MAX/2); - - while ((c = getopt (argc, argv, "hag:n:s:S:z:r:p:d:")) != -1) { - switch (c) { - case 'a': - printf("Running AWGN simulation\n"); - awgn_flag = 1; - ntrials=1; - break; - case 'g': - switch((char)*optarg) { - case 'A': - channel_model=SCM_A; - break; - case 'B': - channel_model=SCM_B; - break; - case 'C': - channel_model=SCM_C; - break; - case 'D': - channel_model=SCM_D; - break; - case 'E': - channel_model=EPA; - break; - case 'F': - channel_model=EVA; - break; - case 'G': - channel_model=ETU; - break; - case 'H': - channel_model=Rayleigh8; - case 'I': - channel_model=Rayleigh1; - case 'J': - channel_model=Rayleigh1_corr; - case 'K': - channel_model=Rayleigh1_anticorr; - case 'L': - channel_model=Rice8; - case 'M': - channel_model=Rice1; - break; - default: - printf("Unsupported channel model!\n"); - exit(-1); - } - break; - case 'd': - tx_offset = atoi(optarg); - break; - case 'p': - tx_vector.sdu_length = atoi(optarg); - if (atoi(optarg)>4095) { - printf("Illegal sdu_length %d\n",tx_vector.sdu_length); - exit(-1); - } - break; - case 'r': - tx_vector.rate = atoi(optarg); - if (atoi(optarg)>7) { - printf("Illegal rate %d\n",tx_vector.rate); - exit(-1); - } - break; - case 'n': - n_frames = atoi(optarg); - break; - case 's': - snr0 = atof(optarg); - printf("Setting SNR0 to %f\n",snr0); - break; - case 'S': - snr1 = atof(optarg); - snr1set=1; - printf("Setting SNR1 to %f\n",snr1); - break; - case 'z': - n_rx=atoi(optarg); - if ((n_rx==0) || (n_rx>2)) { - printf("Unsupported number of rx antennas %d\n",n_rx); - exit(-1); - } - break; - default: - case 'h': - printf("%s -h(elp) -a(wgn on) -p(extended_prefix) -N cell_id -f output_filename -F input_filename -g channel_model -n n_frames -t Delayspread -r Ricean_FactordB -s snr0 -S snr1 -x transmission_mode -y TXant -z RXant -i Intefrence0 -j Interference1 -A interpolation_file -C(alibration offset dB) -N CellId\n",argv[0]); - printf("-h This message\n"); - printf("-a Use AWGN channel and not multipath\n"); - printf("-n Number of frames to simulate\n"); - printf("-s Starting SNR, runs from SNR0 to SNR0 + 5 dB. If n_frames is 1 then just SNR is simulated\n"); - printf("-S Ending SNR, runs from SNR0 to SNR1\n"); - printf("-g [A,B,C,D,E,F,G] Use 3GPP SCM (A,B,C,D) or 36-101 (E-EPA,F-EVA,G-ETU) models (ignores delay spread and Ricean factor)\n"); - printf("-z Number of RX antennas used\n"); - printf("-F Input filename (.txt format) for RX conformance testing\n"); - exit (-1); - break; - } - } - - if (n_frames==1) - snr1 = snr0+.2; - else - snr1 = snr0+5; - for (i=0;i 0) - symbols++; - - sdu_length_samples = (symbols + 5) * 80; - - printf("Number of symbols for sdu : %d, samples %d\n",symbols,sdu_length_samples); - - txdata = (uint32_t*)memalign(16,sdu_length_samples*sizeof(uint32_t)); - for (i=0;iRX_THRES_dB) { - if (off<105) - off2 = FRAME_LENGTH_SAMPLES_MAX-105; - else - off2=off; - if ((initial_sync(&rxv,&rx_offset,&log2_maxh,(uint32_t*)rxdata[0],FRAME_LENGTH_SAMPLES_MAX,off2,1) == BUSY)) { - if (n_frames==1) - printf("Channel is busy, rxv %p, offset %d\n",(void*)rxv,rx_offset); - no_detection=0; - if (rxv) { - if (n_frames==1) - printf("Rate %d, SDU_LENGTH %d\n",rxv->rate,rxv->sdu_length); - if ( (rxv->rate != tx_vector.rate)||(rxv->sdu_length != tx_vector.sdu_length)) { - signal_errors++; - if ((signal_errors > (n_frames/10)) && (trial>=100)) { - stop=1; - } - if (n_frames == 1) - printf("SIGNAL error: rx_offset %d, tx_offset %d (off2 %d)\n",rx_offset,tx_offset,off2); - break; - } - else { - memset(data_ind_rx,0,rxv->sdu_length+4+2+1); - if (data_detection(rxv,data_ind_rx,(uint32_t*)rxdata[0],FRAME_LENGTH_SAMPLES_MAX,rx_offset,log2_maxh,NULL)) { - for (i=0;isdu_length+6;i++) { - if (data_ind[i]!=data_ind_rx[i]) { - //printf("error position %d : %x,%x\n",i,data_ind[i],data_ind_rx[i]); - misdetected_errors++; - errors++; - } - } - if ((errors > (n_frames/10)) && (trial>100)) { - stop=1; - break; - } - } // initial_synch returns IDLE - else { - errors++; - if (n_frames == 1) { - printf("Running data_detection fails\n"); - - for (i=0;isdu_length+6;i++) { - if (data_ind[i]!=data_ind_rx[i]) { - printf("error position %d : %x,%x\n",i,data_ind[i],data_ind_rx[i]); - } - } - } - if ((errors > (n_frames/10)) && (trial>=100)) { - stop=1; - break; - } - - } - break; - } - } - } - } - - off+=105; - } - if (no_detection==1) - missed_packets++; - if (stop==1) - break; - } - - printf("\nSNR %f dB: errors %d/%d, misdetected errors %d/%d,signal_errors %d/%d, missed_packets %d/%d\n",SNR,errors,trial-signal_errors,misdetected_errors,trial-signal_errors,signal_errors,trial,missed_packets,trial); - snr_array[cnt] = SNR; - errors_array[cnt] = errors; - trials_array[cnt] = trial; - misdetected_errors_array[cnt] = misdetected_errors; - signal_errors_array[cnt] = signal_errors; - missed_packets_array[cnt] = missed_packets; - cnt++; - if (cnt>99) { - printf("too many SNR points, exiting ...\n"); - break; - } - if (errors == 0) - break; -#ifdef EXECTIME - print_is_stats(); - print_dd_stats(); -#endif - } - - - sprintf(fname,"SNR_%d_%d.m",tx_vector.rate,tx_vector.sdu_length); - sprintf(vname,"SNR_%d_%d_v",tx_vector.rate,tx_vector.sdu_length); - write_output(fname,vname,snr_array,cnt,1,7); - sprintf(fname,"errors_%d_%d.m",tx_vector.rate,tx_vector.sdu_length); - sprintf(vname,"errors_%d_%d_v",tx_vector.rate,tx_vector.sdu_length); - write_output(fname,vname,errors_array,cnt,1,2); - sprintf(fname,"trials_%d_%d.m",tx_vector.rate,tx_vector.sdu_length); - sprintf(vname,"trials_%d_%d_v",tx_vector.rate,tx_vector.sdu_length); - write_output(fname,vname,trials_array,cnt,1,2); - sprintf(fname,"signal_errors_%d_%d.m",tx_vector.rate,tx_vector.sdu_length); - sprintf(vname,"signal_errors_%d_%d_v",tx_vector.rate,tx_vector.sdu_length); - write_output(fname,vname,signal_errors_array,cnt,1,2); - free(data_ind); - free(data_ind_rx); - // free_channel_desc_scm(ch); - - free(txdata); - for (i=0;i/dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > /usr/local/share/ca-certificates/gitlab_eurecom_fr.crt + b)update-ca-certificates + +5. Git one time configuration with your name/email address. + git config --global user.name "Your Name" + git config --global user.email "Your email address" + +6. In order to checkout the Git repository (for OAI Users without login to gitlab server) + a) export GIT_SSL_NO_VERIFY=1; git clone https://gitlab.eurecom.fr/oai/openairinterface5g.git (without certificate installation in step 4) + b) git clone https://gitlab.eurecom.fr/oai/openairinterface5g.git (If certificate is installed in step 4) + +6. In order to checkout the Git repository (for OAI Developers/admins with login to gitlab server). Please send email to openair_tech@eurecom.fr to be added to the repository as a developer). If you do not have account on gitlab.eurecom.fr, please register yourself to gitlab.eurecom.fr. + + a) Checkout with using ssh keys: + You will need to put your ssh keys in https://gitlab.eurecom.fr/profile/keys to access to the git repo (only important for users who want to commit to the repository). Once that is done, checkout the git repository using: + git clone git@gitlab.eurecom.fr:oai/openairinterface5g.git + + b) Checkout with user name/password prompt: + + git clone https://YOUR_USERNAME@gitlab.eurecom.fr/oai/openairinterface5g.git + + + +Migration Instructions from SVN->Git in Detail (Not important for OAI Developer Community): +Assuming you are in svn2git directory. + +wget https://bitbucket.org/atlassian/svn-migration-scripts/downloads/svn-migration-scripts.jar +java -jar ./svn-migration-scripts.jar verify +java -jar ./svn-migration-scripts.jar authors http://svn.eurecom.fr/openair4G > authors.txt +git svn clone -r4000:HEAD --authors-file=./svn2git/authors.txt http://svn.eurecom.fr/openair4G/trunk oaiRepoData1 >& log_svn_clone1.out + +(Assuming you have added your ssh keys in https://gitlab.eurecom.fr/profile/keys) +//One time git configuration of user name/email address +git config --global user.name "Replace_With_Your_Name" +git config --global user.email "Replace_With_Your_Email_address" + +git remote add origin git@gitlab.eurecom.fr:oai/openairinterface5g.git + +git push -u origin --all +git push --tags + +Steps to synchronize on calisson (to be carried out periodically) +cd ~rohit/GitMigration/GitRepoNew/oaiRepoData1/svn2git +git config -l +git config --global user.name "Replace_With_Your_Name" +git config --global user.email "Replace_With_Your_Email_address" +./check_diff_author.sh #There should be no difference in author list file +git remote set-url origin https://kaltenbe@gitlab.eurecom.fr/oai/openairinterface5g.git +git svn fetch #--authors-file=./authors.txt (Make sure that there are no new authors since the last migration, else this will result in errors) +git svn rebase +git push -u origin --all +git push --tags + + + diff --git a/svn2git/authors.txt b/svn2git/authors.txt new file mode 100644 index 0000000000..8bf7dbed0e --- /dev/null +++ b/svn2git/authors.txt @@ -0,0 +1,86 @@ +agostini = agostini +alexandr = alexandr +ambe = Anne Ambe +anouar = Hicham Anouar +antonb = antonb +apostolaras = Apostolos Apostolaras +arvanita = Arvanita +atsan = Emre Atsan +auberts = auberts +benromdh = benromdh +besnier = Joelle Besnier +bhamri = Bhamri +bohge = Mathias Bohge +brizzola = brizzola +byiringi = Byiringi +cerdan = Cerdan +cirkic = Cirkic +demiray = demiray +ferreira = Ferreira +fkalten = fkalten +fotimeli = Fotimeli +foubert = Philippe Foubert +gangakhe = Gangakhe +gangula = gangula +garcial = garcial +gauthier = Lionel Gauthier +ghaddab = ghaddab +ghaffar = ghaffar +guibene = guibene +guptar = Rohit Gupta +haerri = Haerri +hafsaoui = Hafsaoui +hao = hao +hashmat = hashmat +hrizi = hrizi +hu = hu +huang = Huang +iacobelli = Lorenzo Iacobelli +ihmig = ihmig +jdagres = jdagres +jiangx = jiangx +kaltenbe = Florian Kaltenberger +knopp = Raymond Knopp +kortke = kortke +kouassi = kouassi +laklii = laklii +latif = latif +libchaber = libchaber +linhuang = linhuang +lukashov = lukashov +maatalla = maatalla +maurel = maurel +mayani = mayani +merz = Ruben Merz +mlaner = mlaner +mosli = mosli +navid = Navid Nikaein +nguyenhn = nguyenhn +nguyennd = nguyennd +nikaeinn = Navid Nikaein < +oai_user1 = oai_user1 +ouni = ouni +paranche = paranche +pburlot = pburlot +qi = qi +renwanz = renwanz +roux = Cedric Roux +sait = sait +sorby = sorby +steinicke = steinicke +thomas = thomas +thomasl = thomasl +tonelli = tonelli +unlu = unlu +ustun = ustun +villa = villa +wagner = wagner +wangl = wangl +wetterwa = wetterwa +wewior = wewior +winckel = winckel +xuhl = xuhl +yannan = yannan +yilmaz = yilmaz +zayen = zayen +zhou = zhou diff --git a/svn2git/authors_original.txt b/svn2git/authors_original.txt new file mode 100644 index 0000000000..7e239ce955 --- /dev/null +++ b/svn2git/authors_original.txt @@ -0,0 +1,45 @@ +agostini = Agostini +alexandr = Alexandr +ambe = Anne Ambe +anouar = Hicham Anouar +apostolaras = Apostolos Apostolaras +arvanita = Arvanita +atsan = Emre Atsan +besnier = Joelle Besnier +bhamri = Bhamri +bohge = Mathias Bohge +byiringi = Byiringi +cerdan = Cerdan +cirkic = Cirkic +ferreira = Ferreira +fotimeli = Fotimeli +foubert = Philippe Foubert +gangakhe = Gangakhe +gangula = gangula +gauthier = Lionel Gauthier +haerri = Haerri +hafsaoui = Hafsaoui +huang = Huang +iacobelli = Lorenzo Iacobelli +ihmig = Ihmig +jiangx = Jiangx +kaltenbe = Florian Kaltenberger +knopp = Raymond Knopp +lukashov = Lukashov +navid = Navid Nikaein +nguyenhn = Nguyenhn +nguyennd = Nguyennd +nikaeinn = nikaeinn +oai_user1 = oai_user1 +ouni = Ouni +paranche = paranche +qi = qi +roux = Cedric Roux +sait = sait +sorby = sorby +thomas = thomas +unlu = unlu +wagner = wagner +yilmaz = yilmaz +zayen = zayen + diff --git a/svn2git/authors_original_java_output.txt b/svn2git/authors_original_java_output.txt new file mode 100644 index 0000000000..ca00a069c8 --- /dev/null +++ b/svn2git/authors_original_java_output.txt @@ -0,0 +1,86 @@ +agostini = agostini +alexandr = alexandr +ambe = ambe +anouar = anouar +antonb = antonb +apostolaras = apostolaras +arvanita = arvanita +atsan = atsan +auberts = auberts +benromdh = benromdh +besnier = besnier +bhamri = bhamri +bohge = bohge +brizzola = brizzola +byiringi = byiringi +cerdan = cerdan +cirkic = cirkic +demiray = demiray +ferreira = ferreira +fkalten = fkalten +fotimeli = fotimeli +foubert = foubert +gangakhe = gangakhe +gangula = gangula +garcial = garcial +gauthier = gauthier +ghaddab = ghaddab +ghaffar = ghaffar +guibene = guibene +guptar = guptar +haerri = haerri +hafsaoui = hafsaoui +hao = hao +hashmat = hashmat +hrizi = hrizi +hu = hu +huang = huang +iacobelli = iacobelli +ihmig = ihmig +jdagres = jdagres +jiangx = jiangx +kaltenbe = kaltenbe +knopp = knopp +kortke = kortke +kouassi = kouassi +laklii = laklii +latif = latif +libchaber = libchaber +linhuang = linhuang +lukashov = lukashov +maatalla = maatalla +maurel = maurel +mayani = mayani +merz = merz +mlaner = mlaner +mosli = mosli +navid = navid +nguyenhn = nguyenhn +nguyennd = nguyennd +nikaeinn = nikaeinn +oai_user1 = oai_user1 +ouni = ouni +paranche = paranche +pburlot = pburlot +qi = qi +renwanz = renwanz +roux = roux +sait = sait +sorby = sorby +steinicke = steinicke +thomas = thomas +thomasl = thomasl +tonelli = tonelli +unlu = unlu +ustun = ustun +villa = villa +wagner = wagner +wangl = wangl +wetterwa = wetterwa +wewior = wewior +winckel = winckel +xuhl = xuhl +yannan = yannan +yilmaz = yilmaz +zayen = zayen +zhou = zhou diff --git a/svn2git/check_diff_author.sh b/svn2git/check_diff_author.sh new file mode 100755 index 0000000000..7d55cfe9a5 --- /dev/null +++ b/svn2git/check_diff_author.sh @@ -0,0 +1,8 @@ +#!/bin/bash + +#The following script checks if the author list changed since the last commits in svn. If it finds difference in author names, then we need to add the author names manually in authors.txt + +wget https://bitbucket.org/atlassian/svn-migration-scripts/downloads/svn-migration-scripts.jar +java -jar ./svn-migration-scripts.jar verify +java -jar ./svn-migration-scripts.jar authors http://svn.eurecom.fr/openair4G > /tmp/authors.txt +diff /tmp/authors.txt ./authors_original_java_output.txt diff --git a/svn2git/git-author-rewrite.sh b/svn2git/git-author-rewrite.sh new file mode 100644 index 0000000000..b959db6b2e --- /dev/null +++ b/svn2git/git-author-rewrite.sh @@ -0,0 +1,22 @@ +#!/bin/sh +#Script to change author name/email address in git. It throws errors/warnings during the migration +#Copied from, https://help.github.com/articles/changing-author-info/ + +git filter-branch --env-filter ' + +OLD_EMAIL="your-old-email@example.com" +CORRECT_NAME="Your Correct Name" +CORRECT_EMAIL="your-correct-email@example.com" + +if [ "$GIT_COMMITTER_EMAIL" = "$OLD_EMAIL" ] +then + export GIT_COMMITTER_NAME="$CORRECT_NAME" + export GIT_COMMITTER_EMAIL="$CORRECT_EMAIL" +fi +if [ "$GIT_AUTHOR_EMAIL" = "$OLD_EMAIL" ] +then + export GIT_AUTHOR_NAME="$CORRECT_NAME" + export GIT_AUTHOR_EMAIL="$CORRECT_EMAIL" +fi +' --tag-name-filter cat -- --branches --tags + diff --git a/targets/ARCH/BLADERF/USERSPACE/LIB/bladerf_lib.c b/targets/ARCH/BLADERF/USERSPACE/LIB/bladerf_lib.c index ef3265db89..6ebf709ec9 100644 --- a/targets/ARCH/BLADERF/USERSPACE/LIB/bladerf_lib.c +++ b/targets/ARCH/BLADERF/USERSPACE/LIB/bladerf_lib.c @@ -37,24 +37,299 @@ #include #include #include "bladerf_lib.h" -#include "common_lib.h" -#include "log.h" - -#define SAMPLE_LEN samples_per_frame*sizeof(int32_t) int num_devices=0; /*These items configure the underlying asynch stream used by the the sync interface. */ -unsigned int num_buffers; -unsigned int buffer_size; -unsigned int num_transfers; -unsigned int timeout_ms; - int trx_brf_init(openair0_device *openair0) { } + +openair0_timestamp trx_get_timestamp(openair0_device *device) { + int status; + struct bladerf_metadata meta; + brf_state_t *brf = (brf_state_t*)device->priv; + + if ((status=bladerf_get_timestamp(brf->dev, BLADERF_MODULE_TX, &meta.timestamp)) != 0) { + fprintf(stderr,"Failed to get current RX timestamp: %s\n",bladerf_strerror(status)); + } else { + printf("Current TX timestampe 0x%016"PRIx64"\n", meta.timestamp); + } + return meta.timestamp; +} + + +int trx_brf_start(openair0_device *openair0) { + + return 0; +} + +static void trx_brf_stats(openair0_device *device){ + + +} + +static int trx_brf_write(openair0_device *device,openair0_timestamp ptimestamp, void **buff, int nsamps, int cc) { + + int status, i; + brf_state_t *brf = (brf_state_t*)device->priv; + /* BRF has only 1 rx/tx chaine : is it correct? */ + void *samples = (void*)buff[0]; + + //brf->meta_tx.flags &= ~BLADERF_META_FLAG_TX_NOW; + brf->meta_tx.flags = BLADERF_META_FLAG_TX_BURST_START | + BLADERF_META_FLAG_TX_NOW | + BLADERF_META_FLAG_TX_BURST_END; + + brf->meta_tx.timestamp= (uint64_t) ptimestamp; + + status = bladerf_sync_tx(brf->dev, samples, (unsigned int) nsamps, &brf->meta_tx, 2*brf->tx_timeout_ms); + + if (status != 0) { + fprintf(stderr,"Failed to TX sample: %s\n", bladerf_strerror(status)); + brf->num_tx_errors++; + brf_error(status); + } else if (brf->meta_tx.status & BLADERF_META_STATUS_UNDERRUN){ + /* libbladeRF does not report this status. It is here for future use. */ + fprintf(stderr, "TX Underrun detected. %u valid samples were read.\n", brf->meta_tx.actual_count); + brf->num_underflows++; + } + // printf("tx status %d \n",brf->meta_tx.status); + brf->tx_current_ts=brf->meta_tx.timestamp; + brf->tx_actual_nsamps+=brf->meta_tx.actual_count; + brf->tx_nsamps+=nsamps; + brf->tx_count++; + + + return(0); +} + +static int trx_brf_read(openair0_device *device, openair0_timestamp *ptimestamp, void **buff, int nsamps, int cc) { + int status, ret; + + unsigned int i; + brf_state_t *brf = (brf_state_t*)device->priv; + + // BRF has only one rx/tx chain + void *samples = (void*)buff[0]; + + brf->meta_rx.flags |= BLADERF_META_FLAG_RX_NOW; + status = bladerf_sync_rx(brf->dev, samples, (unsigned int) nsamps, &brf->meta_rx, 2*brf->rx_timeout_ms); + + if (status != 0) { + fprintf(stderr, "RX failed: %s\n", bladerf_strerror(status)); + brf->num_rx_errors++; + } else if ( brf->meta_rx.status & BLADERF_META_STATUS_OVERRUN) { + brf->num_overflows++; + fprintf(stderr, "RX overrun (%d) is detected. t=0x%"PRIu64". Got %u samples. nsymps %d\n", + brf->num_overflows,brf->meta_rx.timestamp, brf->meta_rx.actual_count, nsamps); + //brf->meta_rx.timestamp=(unsigned int)(nsamps-brf->meta_rx.actual_count); + } + //printf("[BRF] (buff %p) ts=0x%"PRIu64" %s\n",samples, brf->meta_rx.timestamp,bladerf_strerror(status)); + brf->rx_current_ts=brf->meta_rx.timestamp; + brf->rx_actual_nsamps+=brf->meta_rx.actual_count; + brf->rx_nsamps+=nsamps; + brf->rx_count++; + + + *ptimestamp = brf->meta_rx.timestamp; + + return brf->meta_rx.actual_count; + +} + +int trx_brf_end(openair0_device *device) { + + int status; + brf_state_t *brf = (brf_state_t*)device->priv; + // Disable RX module, shutting down our underlying RX stream + if ((status=bladerf_enable_module(brf->dev, BLADERF_MODULE_RX, false)) != 0) { + fprintf(stderr, "Failed to disable RX module: %s\n", bladerf_strerror(status)); + } + if ((status=bladerf_enable_module(brf->dev, BLADERF_MODULE_TX, false)) != 0) { + fprintf(stderr, "Failed to disable TX module: %s\n", bladerf_strerror(status)); + } + bladerf_close(brf->dev); + return 0; +} + + +int trx_brf_get_stats(openair0_device* device) { + + return(0); + +} + +int trx_brf_reset_stats(openair0_device* device) { + + return(0); + +} + +int trx_brf_stop(openair0_device* device) { + + return(0); + +} + +int trx_brf_set_freq(openair0_device* device) { + + return(0); + +} +int trx_brf_set_gains(openair0_device* device) { + + return(0); + +} + +int openair0_dev_init_bladerf(openair0_device *device, openair0_config_t *openair0_cfg) { + + int status; + int card=0; + + brf_state_t *brf = (brf_state_t*)malloc(sizeof(brf_state_t)); + memset(brf, 0, sizeof(brf_state_t)); + // init required params for BRF + brf->num_buffers = 128; + brf->buffer_size = (unsigned int) openair0_cfg[card].samples_per_packet*sizeof(int32_t); // buffer size = 4096 for sample_len of 1024 + brf->num_transfers = 16; + brf->rx_timeout_ms = 0; + brf->tx_timeout_ms = 0; + brf->sample_rate=(unsigned int)openair0_cfg[card].sample_rate; + + + printf("\n[BRF] sampling_rate %d, num_buffers %d, buffer_size %d, num transfer %d, timeout_ms (rx %d, tx %d)\n", + brf->sample_rate, brf->num_buffers, brf->buffer_size,brf->num_transfers, brf->rx_timeout_ms, brf->tx_timeout_ms); + + if ((status=bladerf_open(&brf->dev, "")) != 0 ) { + fprintf(stderr,"Failed to open brf device: %s\n",bladerf_strerror(status)); + brf_error(status); + } + printf("[BRF] init dev %p\n", brf->dev); + switch(bladerf_device_speed(brf->dev)){ + case BLADERF_DEVICE_SPEED_SUPER: + printf("[BRF] Device operates at max speed\n"); + break; + default: + printf("[BRF] Device does not operates at max speed, change the USB port\n"); + brf_error(BLADERF_ERR_UNSUPPORTED); + } + // RX + // Example of CLI output: RX Frequency: 2539999999Hz + + if ((status=bladerf_set_frequency(brf->dev, BLADERF_MODULE_RX, (unsigned int) openair0_cfg[card].rx_freq[0])) != 0){ + fprintf(stderr,"Failed to set RX frequency: %s\n",bladerf_strerror(status)); + brf_error(status); + } else + printf("[BRF] set RX frequency to %f\n",openair0_cfg[card].rx_freq[0]); + + + if ((status=bladerf_set_sample_rate(brf->dev, BLADERF_MODULE_RX, (unsigned int)openair0_cfg[card].sample_rate, NULL)) != 0){ + fprintf(stderr,"Failed to set RX sample rate: %s\n", bladerf_strerror(status)); + brf_error(status); + }else + printf("[BRF] set RX sample rate to %f\n",openair0_cfg[card].sample_rate); + + if ((status=bladerf_set_bandwidth(brf->dev, BLADERF_MODULE_RX, (unsigned int) openair0_cfg[card].rx_bw, NULL)) != 0){ + fprintf(stderr,"Failed to set RX bandwidth: %s\n", bladerf_strerror(status)); + brf_error(status); + }else + printf("[BRF] set RX bandwidth to %f\n",openair0_cfg[card].rx_bw); + + if ((status=bladerf_set_gain(brf->dev, BLADERF_MODULE_RX, (int) openair0_cfg[card].rx_gain[0])) != 0) { + fprintf(stderr,"Failed to set RX gain: %s\n",bladerf_strerror(status)); + brf_error(status); + } else + printf("[BRF] set RX gain to %f\n",openair0_cfg[card].rx_gain[0]); + + /* Configure the device's RX module for use with the sync interface. + * SC16 Q11 samples *with* metadata are used. */ + if ((status=bladerf_sync_config(brf->dev, BLADERF_MODULE_RX, BLADERF_FORMAT_SC16_Q11_META,brf->num_buffers,brf->buffer_size,brf->num_transfers,brf->rx_timeout_ms)) != 0 ) { + fprintf(stderr,"Failed to configure RX sync interface: %s\n", bladerf_strerror(status)); + brf_error(status); + }else + printf("[BRF] configured Rx for sync interface \n"); + + /* We must always enable the RX module after calling bladerf_sync_config(), and + * before attempting to RX samples via bladerf_sync_rx(). */ + if ((status=bladerf_enable_module(brf->dev, BLADERF_MODULE_RX, true)) != 0) { + fprintf(stderr,"Failed to enable RX module: %s\n", bladerf_strerror(status)); + brf_error(status); + }else + printf("[BRF] RX module enabled \n"); + + // TX + if ((status=bladerf_set_frequency(brf->dev, BLADERF_MODULE_TX, (unsigned int) openair0_cfg[card].tx_freq[0])) != 0){ + fprintf(stderr,"Failed to set TX frequency: %s\n",bladerf_strerror(status)); + brf_error(status); + }else + printf("[BRF] set Tx Frequenct to %f \n", openair0_cfg[card].tx_freq[0]); + + if ((status=bladerf_set_sample_rate(brf->dev, BLADERF_MODULE_TX, (unsigned int) openair0_cfg[card].sample_rate, NULL)) != 0){ + fprintf(stderr,"Failed to set TX sample rate: %s\n", bladerf_strerror(status)); + brf_error(status); + }else + printf("[BRF] set Tx sampling rate to %f \n", openair0_cfg[card].sample_rate); + + if ((status=bladerf_set_bandwidth(brf->dev, BLADERF_MODULE_TX,(unsigned int)openair0_cfg[card].tx_bw, NULL)) != 0){ + fprintf(stderr, "Failed to set RX bandwidth: %s\n", bladerf_strerror(status)); + brf_error(status); + }else + printf("[BRF] set Tx sampling ratebandwidth to %f \n", openair0_cfg[card].tx_bw); + + if ((status=bladerf_set_gain(brf->dev, BLADERF_MODULE_TX, (int)openair0_cfg[card].tx_gain[0])) != 0) { + fprintf(stderr,"Failed to set TX gain: %s\n",bladerf_strerror(status)); + brf_error(status); + }else + printf("[BRF] set the Tx gain to %f \n", openair0_cfg[card].tx_gain[0]); + + + /* Configure the device's TX module for use with the sync interface. + * SC16 Q11 samples *with* metadata are used. */ + if ((status=bladerf_sync_config(brf->dev, BLADERF_MODULE_TX,BLADERF_FORMAT_SC16_Q11_META,brf->num_buffers,brf->buffer_size,brf->num_transfers,brf->tx_timeout_ms)) != 0 ) { + fprintf(stderr,"Failed to configure TX sync interface: %s\n", bladerf_strerror(status)); + brf_error(status); + }else + printf("[BRF] configured tx for sync interface \n"); + + /* We must always enable the TX module after calling bladerf_sync_config(), and + * before attempting to TX samples via bladerf_sync_tx(). */ + if ((status=bladerf_enable_module(brf->dev, BLADERF_MODULE_TX, true)) != 0) { + fprintf(stderr,"Failed to enable TX module: %s\n", bladerf_strerror(status)); + brf_error(status); + } else + printf("[BRF] TX module enabled \n"); + + bladerf_log_set_verbosity(get_brf_log_level(openair0_cfg[card].log_level)); + + printf("BLADERF: Initializing openair0_device\n"); + device->priv = brf; + device->Mod_id = num_devices++; + device->trx_start_func = trx_brf_start; + device->trx_end_func = trx_brf_end; + device->trx_read_func = trx_brf_read; + device->trx_write_func = trx_brf_write; + device->trx_get_stats_func = trx_brf_get_stats; + device->trx_reset_stats_func = trx_brf_reset_stats; + device->trx_stop_func = trx_brf_stop; + device->trx_set_freq_func = trx_brf_set_freq; + device->trx_set_gains_func = trx_brf_set_gains; + memcpy((void*)&device->openair0_cfg,(void*)openair0_cfg,sizeof(openair0_config_t)); + + return 0; +} + +int brf_error(int status) { + + //exit(-1); + //return 1; // or status error code +} + + + struct bladerf * open_bladerf_from_serial(const char *serial) { int status; @@ -81,218 +356,10 @@ struct bladerf * open_bladerf_from_serial(const char *serial) { return dev; } } - - - - - -int trx_brf_start(openair0_device *openair0) { - -} - -int trx_brf_write(openair0_device *device,openair0_timestamp ptimestamp, void **buff, int nsamps, int cc) { - int status; - struct bladerf_metadata meta; - int16_t zeros[] = { 0, 0, 0, 0 }; - struct bladerf *dev = (struct bladerf*) device->priv; - openair0_timestamp current_timestamp; - /* BRF has only 1 rx/tx chaine : is it correct? */ - void *sample = (void*)buff[0]; - memset(&meta, 0, sizeof(meta)); - - /* Retrieve the current timestamp */ -#ifdef BRF_TEST - if ((status=bladerf_get_timestamp(dev, BLADERF_MODULE_TX, &meta.timestamp)) != 0) { - fprintf(stderr,"Failed to get current RX timestamp: %s\n",bladerf_strerror(status)); - } else { - current_timestamp = meta.timestamp; - printf("Current TX timestampe 0x%016"PRIx64" and current timestamp: 0x%016"PRIx64"\n", ptimestamp, meta.timestamp); - } -#endif - meta.timestamp= ptimestamp; - - meta.flags |= BLADERF_META_FLAG_TX_NOW; - - status = bladerf_sync_tx(dev, sample, nsamps, &meta, timeout_ms); - if (status != 0) { - fprintf(stderr, "Failed to TX sample: %s\n", bladerf_strerror(status)); - brf_error(status); - } - - -} - -int trx_brf_read(openair0_device *device, openair0_timestamp *ptimestamp, void **buff, int nsamps, int cc) { - int status, ret; - struct bladerf_metadata meta; - unsigned int i; - struct bladerf *dev = (struct bladerf*) device->priv; - /* BRF has only onerx/tx chain: is it correct? */ - void *sample = (void*)buff[0]; - memset(&meta, 0, sizeof(meta)); - /* Retrieve the current timestamp */ - if ((status=bladerf_get_timestamp(dev, BLADERF_MODULE_RX, &meta.timestamp)) != 0) { - fprintf(stderr,"Failed to get current RX timestamp: %s\n",bladerf_strerror(status)); - } else { - *ptimestamp = meta.timestamp; - printf("Current RX timestamp: 0x%016"PRIx64"\n", meta.timestamp); - } - - meta.flags |= BLADERF_META_FLAG_RX_NOW; - //fflush(stdout); - - status = bladerf_sync_rx(dev, sample, nsamps, &meta, timeout_ms); - - /* if (meta.actual_count < nsamps ) { - printf("[BRF][RX] received %d samples out of %d\n", meta.actual_count, nsamps); - } - */ - if (status != 0) { - fprintf(stderr, "RX failed: %s\n", bladerf_strerror(status)); - } else if (meta.status & BLADERF_META_STATUS_OVERRUN) { - fprintf(stderr, "Overrun detected in RX. %u valid samples were read (nsymps %d)\n", meta.actual_count,nsamps); - } else if (meta.status & BLADERF_META_STATUS_UNDERRUN) { - fprintf(stderr, "Underrun detected in RX. %u valid samples were read (nsymps %d) \n", meta.actual_count,nsamps); - }else { - printf("Got %u samples at t=0x%016"PRIx64"\n", meta.actual_count, meta.timestamp); - } - - return meta.actual_count; - -} - -int trx_brf_end(openair0_device *device) { - - int status; - struct bladerf *dev = (struct bladerf*) device->priv; - // Disable RX module, shutting down our underlying RX stream - if ((status=bladerf_enable_module(device->priv, BLADERF_MODULE_RX, false)) != 0) { - fprintf(stderr, "Failed to disable RX module: %s\n", bladerf_strerror(status)); - } - if ((status=bladerf_enable_module(device->priv, BLADERF_MODULE_TX, false)) != 0) { - fprintf(stderr, "Failed to disable TX module: %s\n", bladerf_strerror(status)); - } - bladerf_close(dev); - return 0; -} - -//int openair0_device_brf_init(openair0_device *device, openair0_config_t *openair0_cfg) { -int openair0_device_init(openair0_device *device, openair0_config_t *openair0_cfg) { - - int status; - int card=0; - //struct bladerf_version *version; - //printf("Opening the brf device (version %s)...\n", bladerf_version(version)); - - // opaque data struct - struct bladerf *dev;// = (struct bladerf*)malloc(sizeof(struct bladerf)); - //memset(dev, 0, sizeof(struct bladerf)); - // An empty ("") or NULL device identifier will result in the first encountered device being opened (using the first discovered backend) - - // init required params for BRF - num_buffers = 16; - buffer_size = openair0_cfg[card]. samples_per_packet*sizeof(int32_t); // buffer size = 4096 for sample_len of 1024 - num_transfers = 8; // ? device->openair0_cfg.samples_per_packets - timeout_ms = 1; // or 0/ - - printf("the buffer_size is set to %d\n", buffer_size); - -if ((status=bladerf_open(&dev, "")) != 0 ) { - fprintf(stderr,"Failed to open brf device: %s\n",bladerf_strerror(status)); - brf_error(status); - } - printf("[BRF] device speed is %d\n",bladerf_device_speed(dev) ); - - // RX - // Example of CLI output: RX Frequency: 2539999999Hz - - if ((status=bladerf_set_frequency(dev, BLADERF_MODULE_RX, openair0_cfg[card].rx_freq[0])) != 0){ - fprintf(stderr,"Failed to set RX frequency: %s\n",bladerf_strerror(status)); - brf_error(status); - } - // RX sample rate: 7680000 0/1 - if ((status=bladerf_set_sample_rate(dev, BLADERF_MODULE_RX, openair0_cfg[card].sample_rate, NULL)) != 0){ - fprintf(stderr,"Failed to set RX sample rate: %s\n", bladerf_strerror(status)); - brf_error(status); - } - // RX Bandwidth: 14000000Hz - if ((status=bladerf_set_bandwidth(dev, BLADERF_MODULE_RX, openair0_cfg[card].rx_bw, NULL)) != 0){ - fprintf(stderr,"Failed to set RX bandwidth: %s\n", bladerf_strerror(status)); - brf_error(status); - } - // desired gain = 16 - if ((status=bladerf_set_gain(dev, BLADERF_MODULE_RX, openair0_cfg[card].rx_gain[0])) != 0) { - fprintf(stderr,"Failed to set RX gain: %s\n",bladerf_strerror(status)); - brf_error(status); - } - - /* Configure the device's RX module for use with the sync interface. - * SC16 Q11 samples *with* metadata are used. */ - if ((status=bladerf_sync_config(dev, BLADERF_MODULE_RX, BLADERF_FORMAT_SC16_Q11_META,num_buffers,buffer_size,num_transfers,timeout_ms)) != 0 ) { - fprintf(stderr,"Failed to configure RX sync interface: %s\n", bladerf_strerror(status)); - brf_error(status); - } - - /* We must always enable the RX module after calling bladerf_sync_config(), and - * before attempting to RX samples via bladerf_sync_rx(). */ - if ((status=bladerf_enable_module(dev, BLADERF_MODULE_RX, true)) != 0) { - fprintf(stderr,"Failed to enable RX module: %s\n", bladerf_strerror(status)); - brf_error(status); - } - - // TX - if ((status=bladerf_set_frequency(dev, BLADERF_MODULE_TX, openair0_cfg[card].tx_freq[0])) != 0){ - fprintf(stderr,"Failed to set TX frequency: %s\n",bladerf_strerror(status)); - brf_error(status); - } - if ((status=bladerf_set_sample_rate(dev, BLADERF_MODULE_TX, openair0_cfg[card].sample_rate, NULL)) != 0){ - fprintf(stderr,"Failed to set TX sample rate: %s\n", bladerf_strerror(status)); - brf_error(status); - } - if ((status=bladerf_set_bandwidth(dev, BLADERF_MODULE_TX,openair0_cfg[card].tx_bw, NULL)) != 0){ - fprintf(stderr, "Failed to set RX bandwidth: %s\n", bladerf_strerror(status)); - brf_error(status); - } - if ((status=bladerf_set_gain(dev, BLADERF_MODULE_TX, openair0_cfg[card].tx_gain[0])) != 0) { - fprintf(stderr,"Failed to set TX gain: %s\n",bladerf_strerror(status)); - brf_error(status); - } - - /* Configure the device's TX module for use with the sync interface. - * SC16 Q11 samples *with* metadata are used. */ - if ((status=bladerf_sync_config(dev, BLADERF_MODULE_TX,BLADERF_FORMAT_SC16_Q11_META,num_buffers,buffer_size,num_transfers,timeout_ms)) != 0 ) { - fprintf(stderr,"Failed to configure TX sync interface: %s\n", bladerf_strerror(status)); - brf_error(status); - } - - /* We must always enable the TX module after calling bladerf_sync_config(), and - * before attempting to TX samples via bladerf_sync_tx(). */ - if ((status=bladerf_enable_module(dev, BLADERF_MODULE_TX, true)) != 0) { - fprintf(stderr,"Failed to enable TX module: %s\n", bladerf_strerror(status)); - brf_error(status); - } - - - bladerf_log_set_verbosity(get_brf_log_level(openair0_cfg[card].log_level)); - - printf("BLADERF: Initializing openair0_device\n"); - device->priv = dev; - device->Mod_id = num_devices++; - device->trx_start_func = trx_brf_start; - device->trx_end_func = trx_brf_end; - device->trx_read_func = trx_brf_read; - device->trx_write_func = trx_brf_write; - memcpy((void*)&device->openair0_cfg,(void*)openair0_cfg,sizeof(openair0_config_t)); -} - -void brf_error(int status) { - - exit(-1); -} - int get_brf_log_level(int log_level){ int level=BLADERF_LOG_LEVEL_INFO; + //return BLADERF_LOG_LEVEL_DEBUG; switch(log_level) { case LOG_DEBUG: level=BLADERF_LOG_LEVEL_DEBUG; diff --git a/targets/ARCH/BLADERF/USERSPACE/LIB/bladerf_lib.h b/targets/ARCH/BLADERF/USERSPACE/LIB/bladerf_lib.h index 8d98a1751a..39518173db 100644 --- a/targets/ARCH/BLADERF/USERSPACE/LIB/bladerf_lib.h +++ b/targets/ARCH/BLADERF/USERSPACE/LIB/bladerf_lib.h @@ -33,46 +33,54 @@ */ #include -/* -enum brf_err_num{ - BLADERF_ERR_MIN=0, - BLADERF_ERR_UNEXPECTED=-1, - BLADERF_ERR_RANGE=-2, - BLADERF_ERR_INVAL=-3, - BLADERF_ERR_MEM=-4, - BLADERF_ERR_IO=-5, - BLADERF_ERR_TIMEOUT=-6, - BLADERF_ERR_NODEV=-7, - BLADERF_ERR_UNSUPPORTED=-8, - BLADERF_ERR_MISALIGNED=-9, - BLADERF_ERR_CHECKSUM=-10, - BLADERF_ERR_NO_FILE=-11, - BLADERF_ERR_UPDATE_FPGA=-12, - BLADERF_ERR_UPDATE_FW=-13, - BLADERF_ERR_TIME_PAST=-14, - BLADERF_ERR_MAX=-15, -} -mapping brf_err_names[] = { - {"BLADERF_OK", BLADERF_ERR_MIN}, - {"BLADERF_ERR_UNEXPECTED",BLADERF_ERR_UNEXPECTED}, - {"BLADERF_ERR_RANGE",BLADERF_ERR_RANGE}, - {"BLADERF_ERR_INVAL",BLADERF_ERR_INVAL}, - {"BLADERF_ERR_MEM",BLADERF_ERR_MEM}, - {"BLADERF_ERR_IO",BLADERF_ERR_IO}, - {"BLADERF_ERR_TIMEOUT",BLADERF_ERR_TIMEOUT}, - {"BLADERF_ERR_NODEV",BLADERF_ERR_NODEV}, - {"BLADERF_ERR_UNSUPPORTED",BLADERF_ERR_UNSUPPORTED}, - {"BLADERF_ERR_MISALIGNED",BLADERF_ERR_MISALIGNED}, - {"BLADERF_ERR_CHECKSUM",BLADERF_ERR_CHECKSUM}, - {"BLADERF_ERR_NO_FILE",BLADERF_ERR_NO_FILE}, - {"BLADERF_ERR_UPDATE_FPGA",BLADERF_ERR_UPDATE_FPGA}, - {"BLADERF_ERR_UPDATE_FW",BLADERF_ERR_UPDATE_FW}, - {"BLADERF_ERR_TIME_PAST",BLADERF_ERR_TIME_PAST}, - {NULL, BLADERF_ERR_MAX} -}; -*/ + +#include "common_lib.h" +#include "log.h" + +typedef struct { + + // opaque BRF data struct + struct bladerf *dev; + // An empty ("") or NULL device identifier will result in the first encountered device being opened (using the first discovered backend) + + unsigned int num_buffers; + unsigned int buffer_size; + unsigned int num_transfers; + unsigned int rx_timeout_ms; + unsigned int tx_timeout_ms; + + struct bladerf_metadata meta_rx; + struct bladerf_metadata meta_tx; + + unsigned int sample_rate; + // time offset between transmiter timestamp and receiver timestamp; + double tdiff; + // use brf_time_offset to get this value + int tx_forward_nsamps; //166 for 20Mhz + + + // -------------------------------- + // Debug and output control + // -------------------------------- + int num_underflows; + int num_overflows; + int num_seq_errors; + int num_rx_errors; + int num_tx_errors; + + uint64_t tx_current_ts; + uint64_t rx_current_ts; + uint64_t tx_actual_nsamps; + uint64_t rx_actual_nsamps; + uint64_t tx_nsamps; + uint64_t rx_nsamps; + uint64_t tx_count; + uint64_t rx_count; + openair0_timestamp rx_timestamp; + +} brf_state_t; /* * func prototypes */ -void brf_error(int status); +int brf_error(int status); diff --git a/targets/ARCH/COMMON/common_lib.c b/targets/ARCH/COMMON/common_lib.c new file mode 100644 index 0000000000..63f086ff1d --- /dev/null +++ b/targets/ARCH/COMMON/common_lib.c @@ -0,0 +1,64 @@ +/******************************************************************************* + OpenAirInterface + Copyright(c) 1999 - 2014 Eurecom + + OpenAirInterface is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + + OpenAirInterface is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with OpenAirInterface.The full GNU General Public License is + included in this distribution in the file called "COPYING". If not, + see . + + Contact Information + OpenAirInterface Admin: openair_admin@eurecom.fr + OpenAirInterface Tech : openair_tech@eurecom.fr + OpenAirInterface Dev : openair4g-devel@eurecom.fr + + Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE + + *******************************************************************************/ +/*! \file common_lib.c + * \brief common APIs for different RF frontend device + * \author HongliangXU, Navid Nikaein + * \date 2015 + * \version 0.2 + * \company Eurecom + * \maintainer: navid.nikaein@eurecom.fr + * \note + * \warning + */ +#include +#include "common_lib.h" + + +int openair0_device_init(openair0_device *device, openair0_config_t *openair0_cfg) { + +#ifdef ETHERNET + device->type=ETH_IF; + device->func_type = BBU_FUNC; + openair0_dev_init_eth(device, openair0_cfg); + printf(" openair0_dev_init_eth ...\n"); +#elif EXMIMO + device->type=EXMIMO_IF; + openair0_dev_init_exmimo(device, openair0_cfg); + printf("openair0_dev_init_exmimo...\n"); +#elif OAI_USRP + device->type=USRP_IF; + openair0_dev_init_usrp(device, openair0_cfg); + printf("openair0_dev_init_usrp ...\n"); +#elif OAI_BLADERF + device->type=BLADERF_IF; + openair0_dev_init_bladerf(device, openair0_cfg); + printf(" openair0_dev_init_bladerf ...\n"); +#endif + +} diff --git a/targets/ARCH/COMMON/common_lib.h b/targets/ARCH/COMMON/common_lib.h index 56490b65aa..a6851b0dbe 100644 --- a/targets/ARCH/COMMON/common_lib.h +++ b/targets/ARCH/COMMON/common_lib.h @@ -26,40 +26,68 @@ Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE *******************************************************************************/ +/*! \file common_lib.h + * \brief common APIs for different RF frontend device + * \author HongliangXU, Navid Nikaein + * \date 2015 + * \version 0.2 + * \company Eurecom + * \maintainer: navid.nikaein@eurecom.fr + * \note + * \warning + */ -/** common_lib.h -* -* Author: HongliangXU : hong-liang-xu@agilent.com -*/ #ifndef COMMON_LIB_H #define COMMON_LIB_H #include +#include typedef int64_t openair0_timestamp; +typedef volatile int64_t openair0_vtimestamp; + + +/* structrue holds the parameters to configure USRP devices*/ typedef struct openair0_device_t openair0_device; -/* structrue holds the parameters to configure USRP devices - */ + #ifndef EXMIMO #define MAX_CARDS 1 #endif -#define USRP_GAIN_OFFSET (86.0) // 86 calibrated for USRP B210 @ 2.6 GHz to get equivalent RS EPRE in OAI to SMBV100 output +//#define USRP_GAIN_OFFSET (56.0) // 86 calibrated for USRP B210 @ 2.6 GHz to get equivalent RS EPRE in OAI to SMBV100 output typedef enum { max_gain=0,med_gain,byp_gain } rx_gain_t; +/** @addtogroup _PHY_RF_INTERFACE_ + * @{ + */ + +typedef struct { + //! Frequency for which RX chain was calibrated + double freq; + //! Offset to be applied to RX gain + double offset; +} rx_gain_calib_table_t; typedef struct { //! Module ID for this configuration int Mod_id; // device log level int log_level; + //! number of downlink resource blocks + int num_rb_dl; + //! number of samples per frame + unsigned int samples_per_frame; //! the sample rate for both transmit and receive. double sample_rate; //! number of samples per RX/TX packet (USRP + Ethernet) int samples_per_packet; + // delay in sending samples (write) due to hardware access, softmodem processing and fronthaul delay if exist + int tx_delay; + //! adjust the position of the samples after delay when sending + unsigned int tx_forward_nsamps; //! number of RX channels (=RX antennas) int rx_num_channels; //! number of TX channels (=TX antennas) @@ -70,21 +98,31 @@ typedef struct { //! \brief Center frequency in Hz for TX. //! index: [0..rx_num_channels[ !!! see lte-ue.c:427 FIXME iterates over rx_num_channels double tx_freq[4]; - //! mode for rxgain (ExpressMIMO2) + //! mode for rxgain (ExpressMIMO2) rx_gain_t rxg_mode[4]; //! \brief Gain for RX in dB. //! index: [0..rx_num_channels] double rx_gain[4]; + //! \brief Gain offset (for calibration) in dB + //! index: [0..rx_num_channels] + double rx_gain_offset[4]; //! gain for TX in dB double tx_gain[4]; //! RX bandwidth in Hz double rx_bw; //! TX bandwidth in Hz double tx_bw; + //! Auto calibration flag + int autocal[4]; //! RRH IP addr for Ethernet interface - char *rrh_ip; + char *remote_ip; //! RRH port number for Ethernet interface - int rrh_port; + int remote_port; + //! my IP addr for Ethernet interface (eNB/BBU, UE) + char *my_ip; + //! my port number for Ethernet interface (eNB/BBU, UE) + int my_port; + } openair0_config_t; typedef struct { @@ -96,9 +134,50 @@ typedef struct { +/*!\brief interface types that apply to modules (RRH_BBU/RRH_UE) created in RRH (rrh_gw.c) + and are defined with respect to the RF device that is present in RRH + -RRH_BBU modules have two devices, one is by default ETHERNET (will have ETH_IF) and the other one is a + RF device (EXMIMO,USRP,BLADERF) or no device (NONE_IF). + -RRH_UE modules have two devices one is by default ETHERNET (will have ETH_IF) + and the other one by default not present so it will have NONE_IF + */ +typedef enum { + MIN_DEV_TYPE = 0, + /*!\brief device is ETH */ + ETH_IF, + /*!\brief device is ExpressMIMO */ + EXMIMO_IF, + /*!\brief device is USRP*/ + USRP_IF, + /*!\brief device is BLADE RF*/ + BLADERF_IF, + /*!\brief device is NONE*/ + NONE_IF, + MAX_DEV_TYPE + +} dev_type_t; + + +/*!\brief openair0 device host type */ +typedef enum { + MIN_FUNC_TYPE = 0, + /*!\brief device functions within a BBU */ + BBU_FUNC, + /*!\brief device functions within a RRH */ + RRH_FUNC, + MAX_FUNC_TYPE + +}func_type_t; + struct openair0_device_t { /* Module ID of this device */ int Mod_id; + + /* Type of this device */ + dev_type_t type; + + /* Type of the device's host (BBU/RRH) */ + func_type_t func_type; /* RF frontend parameters set by application */ openair0_config_t openair0_cfg; @@ -108,14 +187,34 @@ struct openair0_device_t { /* Functions API, which are called by the application*/ - /* Called to start the transceiver. Return 0 if OK, < 0 if error */ + /*! \brief Called to start the transceiver. Return 0 if OK, < 0 if error + @param device pointer to the device structure specific to the RF hardware target + */ int (*trx_start_func)(openair0_device *device); - /* Write 'nsamps' samples on each channel from buffers. buff[0] is the array for - * the first channel. timestamp if the time (in samples) at which the first sample - * MUST be sent - * use flags = 1 to send as timestamp specfied*/ - void (*trx_write_func)(openair0_device *device, openair0_timestamp timestamp, void **buff, int nsamps, int cc, int flags); + /*! \brief Called to send a request message between BBU-RRH + @param device pointer to the device structure specific to the RF hardware target + @param msg pointer to the message structure passed between BBU-RRH + @param msg_len length of the message + */ + int (*trx_request_func)(openair0_device *device, void *msg, ssize_t msg_len); + + /*! \brief Called to send a reply message between BBU-RRH + @param device pointer to the device structure specific to the RF hardware target + @param msg pointer to the message structure passed between BBU-RRH + @param msg_len length of the message + */ + int (*trx_reply_func)(openair0_device *openair0, void *msg, ssize_t msg_len); + + /*! \brief Called to send samples to the RF target + @param device pointer to the device structure specific to the RF hardware target + @param timestamp The timestamp at whicch the first sample MUST be sent + @param buff Buffer which holds the samples + @param nsamps number of samples to be sent + @param antenna_id index of the antenna if the device has multiple anteannas + @param flags flags must be set to TRUE if timestamp parameter needs to be applied + */ + int (*trx_write_func)(openair0_device *device, openair0_timestamp timestamp, void **buff, int nsamps,int antenna_id, int flags); /*! \brief Receive samples from hardware. * Read \ref nsamps samples from each channel to buffers. buff[0] is the array for @@ -128,10 +227,40 @@ struct openair0_device_t { * \param cc Number of channels. If cc == 1, only buff[0] is filled with samples. * \returns the number of sample read */ - int (*trx_read_func)(openair0_device *device, openair0_timestamp *ptimestamp, void **buff, int nsamps,int cc); + int (*trx_read_func)(openair0_device *device, openair0_timestamp *ptimestamp, void **buff, int nsamps,int antenna_id); - /* Terminate operation of the transceiver -- free all associated resources */ + /*! \brief print the device statistics + * \param device the hardware to use + * \returns 0 on success + */ + int (*trx_get_stats_func)(openair0_device *device); + + /*! \brief Reset device statistics + * \param device the hardware to use + * \returns 0 in success + */ + int (*trx_reset_stats_func)(openair0_device *device); + + /*! \brief Terminate operation of the transceiver -- free all associated resources */ void (*trx_end_func)(openair0_device *device); + + /* Terminate operation */ + int (*trx_stop_func)(int card); + + /* Functions API related to UE*/ + + /*! \brief Set RX feaquencies + * \param + * \returns 0 in success + */ + int (*trx_set_freq_func)(openair0_device* device, openair0_config_t *openair0_cfg,int exmimo_dump_config); + + /*! \brief Set gains + * \param + * \returns 0 in success + */ + int (*trx_set_gains_func)(openair0_device* device, openair0_config_t *openair0_cfg); + }; @@ -140,13 +269,22 @@ extern "C" { #endif -/* return 0 if OK, < 0 if error */ -int openair0_device_init(openair0_device* device, openair0_config_t *openair0_cfg); -openair0_timestamp get_usrp_time(openair0_device *device); -int openair0_set_frequencies(openair0_device* device, openair0_config_t *openair0_cfg); -int openair0_set_rx_frequencies(openair0_device* device, openair0_config_t *openair0_cfg); - -int openair0_set_gains(openair0_device* device, openair0_config_t *openair0_cfg); +/*! \brief Initialize Openair RF target. It returns 0 if OK */ + int openair0_device_init(openair0_device* device, openair0_config_t *openair0_cfg); + + //USRP +/*! \brief Get the current timestamp of USRP */ + openair0_timestamp get_usrp_time(openair0_device *device); +/*! \brief Set the RX frequency of USRP RF TARGET */ + int openair0_set_rx_frequencies(openair0_device* device, openair0_config_t *openair0_cfg); + +//extern +/*! \brief Initialize Openair ETHERNET target. It returns 0 if OK */ + int openair0_dev_init_eth(openair0_device *device, openair0_config_t *openair0_cfg); + int openair0_dev_init_bladerf(openair0_device *device, openair0_config_t *openair0_cfg); + int openair0_dev_init_usrp(openair0_device* device, openair0_config_t *openair0_cfg); + int openair0_dev_init_exmimo(openair0_device *device, openair0_config_t *openair0_cfg); +/*@}*/ #ifdef __cplusplus } diff --git a/targets/ARCH/ETHERNET/USERSPACE/LIB/ethernet_lib.c b/targets/ARCH/ETHERNET/USERSPACE/LIB/ethernet_lib.c index d66eb79d21..6dd457d9b5 100644 --- a/targets/ARCH/ETHERNET/USERSPACE/LIB/ethernet_lib.c +++ b/targets/ARCH/ETHERNET/USERSPACE/LIB/ethernet_lib.c @@ -26,16 +26,16 @@ Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE *******************************************************************************/ - -/** ethernet_lib : API to stream I/Q samples over standard ethernet -* -* Authors: Pedro Dinis -* Lucio Ferreira -* Raymond Knopp -* -* Changelog: -* 06.10.2014: Initial version -*/ +/*! \file ethernet_lib.c + * \brief API to stream I/Q samples over standard ethernet + * \author Katerina Trilyraki, Navid Nikaein, Pedro Dinis, Lucio Ferreira, Raymond Knopp + * \date 2015 + * \version 0.2 + * \company Eurecom + * \maintainer: navid.nikaein@eurecom.fr + * \note + * \warning + */ #include #include @@ -50,198 +50,500 @@ #include #include "common_lib.h" +#include "ethernet_lib.h" -#define DEFAULT_IF "eth0" -#define BUF_SIZ 8960 /*Jumbo frame size*/ -#define MAX_INST 4 +//#define DEBUG 1 -int sockfd[MAX_INST]; -struct sockaddr_in dest_addr[MAX_INST]; +int num_devices_eth = 0; int dest_addr_len[MAX_INST]; - -int i; -int tx_len = 0; char sendbuf[MAX_INST][BUF_SIZ]; /*TODO*/ -/**PDF: Initialization of UDP Socket to communicate with one DEST */ -int ethernet_socket_init(int Mod_id, char *dest_ip,int dest_port) -{ +/*! \fn static int eth_socket_init(openair0_device *device) +* \brief initialization of UDP Socket to communicate with one destination +* \param[in] *device openair device for which the socket will be created +* \param[out] +* \return 0 on success, otherwise -1 +* \note +* @ingroup _oai +*/ +static int eth_socket_init(openair0_device *device); - /**PDF: To be passed by input argument*/ - // DEST_port = 32000; - struct sockaddr_in *dest = &dest_addr[Mod_id]; +/*! \fn static int eth_set_dev_conf(openair0_device *device) +* \brief +* \param[in] *device openair device +* \param[out] +* \return 0 on success, otherwise -1 +* \note +* @ingroup _oai +*/ +static int eth_set_dev_conf(openair0_device *device); + +/*! \fn static int eth_get_dev_conf(openair0_device *device) +* \brief +* \param[in] *device openair device +* \param[out] +* \return 0 on success, otherwise -1 +* \note +* @ingroup _oai +*/ +static int eth_get_dev_conf(openair0_device *device); + + + +int trx_eth_start(openair0_device *device) { + + /* initialize socket */ + if (eth_socket_init(device)!=0) { + return -1; + } + + /* RRH gets openair0 device configuration BBU sets openair0 device configuration*/ + if (device->func_type == BBU_FUNC) { + return eth_set_dev_conf(device); + } else { + return eth_get_dev_conf(device); + } + + return 0; +} + + +int trx_eth_write(openair0_device *device, openair0_timestamp timestamp, void **buff, int nsamps,int cc, int flags) { + + int n_written=0,i; + uint16_t header_size=sizeof(int32_t) + sizeof(openair0_timestamp); + eth_state_t *eth = (eth_state_t*)device->priv; + int Mod_id = device->Mod_id; + int sendto_flag =0; + sendto_flag|=MSG_DONTWAIT; + + for (i=0;isockfd[Mod_id],(nsamps<<2)+header_size, buff2, antenna_id);*/ + + while(n_written < nsamps) { + /* Send packet */ + if ((n_written += sendto(eth->sockfd[Mod_id], + buff2, + (nsamps<<2)+header_size, + 0, + (struct sockaddr*)ð->dest_addr[Mod_id], + dest_addr_len[Mod_id])) < 0) { + perror("ETHERNET WRITE"); + exit(-1); + } + } + +#if DEBUG + printf("Buffer head TX: nu=%d an_id=%d ts%d samples_send=%d i=%d data=%x\n", + *(int16_t *)buff2, + *(int16_t *)(buff2 + sizeof(int16_t)), + *(openair0_timestamp *)(buff2 + sizeof(int32_t)), + n_written>>2,i,*(int32_t *)(buff2 + 20*sizeof(int32_t))); +#endif + + /* tx buffer values restored */ + *(int32_t *)buff2 = temp0; + *(openair0_timestamp *)(buff2 + sizeof(int32_t)) = temp1; + } + return n_written; + +} + +int trx_eth_read(openair0_device *device, openair0_timestamp *timestamp, void **buff, int nsamps, int cc) { + + int bytes_received=0; + int block_cnt=0; + int ret=0,i; + uint16_t header_size=sizeof(int32_t) + sizeof(openair0_timestamp); + + eth_state_t *eth = (eth_state_t*)device->priv; + int Mod_id = device->Mod_id; + + for (i=0;isockfd[Mod_id],(nsamps<<2)+header_size, buff2, antenna_id);*/ + + while(bytes_received < (int)((nsamps<<2))) { + ret=recvfrom(eth->sockfd[Mod_id], + buff2+bytes_received, + (nsamps<<2)+header_size-bytes_received, + 0,//MSG_DONTWAIT, + (struct sockaddr *)ð->dest_addr[Mod_id], + (socklen_t *)&dest_addr_len[Mod_id]); + + if (ret==-1) { + if (errno == EAGAIN) { + perror("ETHERNET READ: "); + return((nsamps<<2) + header_size); + } else if (errno == EWOULDBLOCK) { + block_cnt++; + usleep(10); + + if (block_cnt == 100) return(-1); + } + } else { + bytes_received+=ret; + } + } + +#if DEBUG + printf("Buffer head RX: nu=%d an_id=%d ts%d samples_recv=%d i=%d data=%x\n", + *(int16_t *)buff2, + *(int16_t *)(buff2 + sizeof(int16_t)), + *(openair0_timestamp *)(buff2 + sizeof(int32_t)), + ret>>2,i,*(int32_t *)(buff2 + 20*sizeof(int32_t))); +#endif + + /* store the timestamp value from packet's header */ + *timestamp = *(openair0_timestamp *)(buff2 + sizeof(int32_t)); + + /* tx buffer values restored */ + *(int32_t *)buff2 = temp0; + *(openair0_timestamp *)(buff2 + sizeof(int32_t)) = temp1; + } + return nsamps; + +} + +void trx_eth_end(openair0_device *device) { + + eth_state_t *eth = (eth_state_t*)device->priv; + int Mod_id = device->Mod_id; + /*destroys socket only for the processes that call the eth_end fuction-- shutdown() for beaking the pipe */ + if ( close(eth->sockfd[Mod_id]) <0 ) { + perror("ETHERNET: Failed to close socket"); + exit(0); + } else { + printf("[RRH] socket for mod_id %d has been successfully closed.\n",Mod_id); + } + +} + + +int trx_eth_request(openair0_device *device, void *msg, ssize_t msg_len) { + + int Mod_id = device->Mod_id; + eth_state_t *eth = (eth_state_t*)device->priv; + + /* BBU sends a message to RRH */ + if (sendto(eth->sockfd[Mod_id],msg,msg_len,0,(struct sockaddr *)ð->dest_addr[Mod_id],dest_addr_len[Mod_id])==-1) { + perror("ETHERNET: "); + exit(0); + } + + return 0; +} + + + +int trx_eth_reply(openair0_device *device, void *msg, ssize_t msg_len) { + + eth_state_t *eth = (eth_state_t*)device->priv; + int Mod_id = device->Mod_id; + + /* RRH receives from BBU a message */ + if (recvfrom(eth->sockfd[Mod_id], + msg, + msg_len, + 0, + (struct sockaddr *)ð->dest_addr[Mod_id], + (socklen_t *)&dest_addr_len[Mod_id])==-1) { + perror("ETHERNET: "); + exit(0); + } + + return 0; +} + + +static int eth_set_dev_conf(openair0_device *device) { + + int Mod_id = device->Mod_id; + eth_state_t *eth = (eth_state_t*)device->priv; + void *msg; + ssize_t msg_len; + + + /* a BBU client sents to RRH a set of configuration parameters (openair0_config_t) + so that RF front end is configured appropriately and + frame/packet size etc. can be set */ + + msg=malloc(sizeof(openair0_config_t)); + msg_len=sizeof(openair0_config_t); + memcpy(msg,(void*)&device->openair0_cfg,msg_len); + + if (sendto(eth->sockfd[Mod_id],msg,msg_len,0,(struct sockaddr *)ð->dest_addr[Mod_id],dest_addr_len[Mod_id])==-1) { + perror("ETHERNET: "); + exit(0); + } + + return 0; +} + + +static int eth_get_dev_conf(openair0_device *device) { + + eth_state_t *eth = (eth_state_t*)device->priv; + int Mod_id = device->Mod_id; + char str[INET_ADDRSTRLEN]; + void *msg; + ssize_t msg_len; + + msg=malloc(sizeof(openair0_config_t)); + msg_len=sizeof(openair0_config_t); + + /* RRH receives from BBU openair0_config_t */ + if (recvfrom(eth->sockfd[Mod_id], + msg, + msg_len, + 0, + (struct sockaddr *)ð->dest_addr[Mod_id], + (socklen_t *)&dest_addr_len[Mod_id])==-1) { + perror("ETHERNET: "); + exit(0); + } + + memcpy((void*)&device->openair0_cfg,msg,msg_len); + inet_ntop(AF_INET, &(eth->dest_addr[Mod_id].sin_addr), str, INET_ADDRSTRLEN); + device->openair0_cfg.remote_port =ntohs(eth->dest_addr[Mod_id].sin_port); + device->openair0_cfg.remote_ip=str; + /*apply additional configuration*/ + //ethernet_tune (device, RING_PAR); + // printf("[RRH] write mod_%d %d to %s:%d\n",Mod_id,eth->sockfd[Mod_id],str,ntohs(eth->dest_addr[Mod_id].sin_port)); + + return 0; +} + + + +int trx_eth_stop(int card) { + return(0); +} + +int trx_eth_set_freq(openair0_device* device, openair0_config_t *openair0_cfg,int exmimo_dump_config) { + return(0); +} + +int trx_eth_set_gains(openair0_device* device, openair0_config_t *openair0_cfg) { + return(0); +} + +int trx_eth_get_stats(openair0_device* device) { + return(0); +} + +int trx_eth_reset_stats(openair0_device* device) { + return(0); +} + + +static int eth_socket_init(openair0_device *device) { + + int i = 0; + eth_state_t *eth = (eth_state_t*)device->priv; + int Mod_id = device->Mod_id; char str[INET_ADDRSTRLEN]; - + const char *dest_ip; + int dest_port=0; + + if (device->func_type == RRH_FUNC ) { + dest_ip = device->openair0_cfg.my_ip; + dest_port = device->openair0_cfg.my_port; + printf("[RRH] ip addr %s port %d\n",dest_ip, dest_port); + } else { + dest_ip = device->openair0_cfg.remote_ip; + dest_port = device->openair0_cfg.remote_port; + printf("[BBU] ip addr %s port %d\n",dest_ip, dest_port); + } + /* Open RAW socket to send on */ - - if ((sockfd[Mod_id] = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) == -1) { + if ((eth->sockfd[Mod_id] = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) == -1) { perror("ETHERNET: Error opening socket"); exit(0); } - bzero((void *)dest,sizeof(struct sockaddr)); - dest->sin_family = AF_INET; - dest->sin_addr.s_addr=inet_addr(dest_ip); - dest->sin_port=htons(dest_port); - dest_addr_len[Mod_id] = sizeof(struct sockaddr); - - inet_ntop(AF_INET, &(dest->sin_addr), str, INET_ADDRSTRLEN); - printf("Connecting to %s:%d\n",str,ntohs(dest->sin_port)); - - -} - - - -int ethernet_write_data(int Mod_id, openair0_timestamp timestamp, const void **buff, int antenna_id, int nsamps) -{ - - void *buff2 = (void*)buff[antenna_id]-sizeof(openair0_timestamp)-(sizeof(int16_t)*2); - int32_t temp0 = *(int32_t *)buff2; - openair0_timestamp temp1 = *(openair0_timestamp *)(buff2+(sizeof(int16_t)*2)); - - int n_written; - - n_written = 0; - ((int16_t *)buff2)[0] = 1+(antenna_id<<1); - ((int16_t *)buff2)[1] = nsamps; - *((openair0_timestamp *)(buff2+(sizeof(int16_t)*2))) = timestamp; - // printf("Timestamp TX sent : %d\n",timestamp); - - // printf("buffer head : %d %d %d %d \n",((int16_t *)buff2)[0],((int16_t *)buff2)[1],((int16_t *)buff2)[2],((int16_t *)buff2)[3]); - while(n_written < nsamps) { - /* Send packet */ - if ((n_written += sendto(sockfd[Mod_id], - buff2, - (nsamps<<2)+sizeof(openair0_timestamp)+(2*sizeof(int16_t)), - 0, - (struct sockaddr*)&dest_addr[Mod_id], - dest_addr_len[Mod_id])) < 0) { - printf("Send failed for Mod_id %d\n",Mod_id); - perror("ETHERNET:"); - exit(-1); - } + /* initialize destination address */ + for (i=0; i< MAX_INST; i++) { + bzero((void *)&(eth->dest_addr[i]), sizeof(eth->dest_addr[i])); } - *(int32_t *)buff2 = temp0; - *(openair0_timestamp *)(buff2+2*sizeof(int16_t)) = temp1; - return n_written; - -} - - -int ethernet_read_data(int Mod_id,openair0_timestamp *timestamp,void **buff, int antenna_id, int nsamps) -{ - - void *buff2 = (void*)buff[antenna_id]-sizeof(openair0_timestamp); - int bytes_received; - int block_cnt; - int ret; - openair0_timestamp temp = *(openair0_timestamp*)(buff2); - int16_t mesg[2]; - char str[INET_ADDRSTRLEN]; - - //mesg[0] = 0+(antenna_id<<1); - //mesg[1] = nsamps; - - inet_ntop(AF_INET, &(dest_addr[Mod_id].sin_addr), str, INET_ADDRSTRLEN); - // send command RX for nsamps samples - // printf("requesting %d samples from (%s:%d)\n",nsamps,str,ntohs(dest_addr[Mod_id].sin_port)); - - //sendto(sockfd[Mod_id],mesg,4,0,(struct sockaddr *)&dest_addr[Mod_id],dest_addr_len[Mod_id]); - - bytes_received=0; - block_cnt=0; - - while(bytes_received < (int)((nsamps<<2))) { - //printf("requesting %d bytes\n",(nsamps<<2)); - ret=recvfrom(sockfd[Mod_id], - buff2+bytes_received, - (nsamps<<2)+sizeof(openair0_timestamp)-bytes_received, - 0,//MSG_DONTWAIT, - (struct sockaddr *)&dest_addr[Mod_id], - &dest_addr_len[Mod_id]); - - //printf("bytes_received %d (ret %d)\n",bytes_received+ret,ret); - if (ret==-1) { - if (errno == EAGAIN) { - perror("ETHERNET: "); - return((nsamps<<2)+sizeof(openair0_timestamp)); - } else if (errno == EWOULDBLOCK) { - block_cnt++; - usleep(10); - - if (block_cnt == 100) return(-1); - } + // bzero((void *)dest,sizeof(struct sockaddr_in)); + eth->dest_addr[Mod_id].sin_family = AF_INET; + inet_pton(AF_INET,dest_ip,&(eth->dest_addr[Mod_id].sin_addr.s_addr)); + eth->dest_addr[Mod_id].sin_port=htons(dest_port); + dest_addr_len[Mod_id] = sizeof(struct sockaddr_in); + inet_ntop(AF_INET, &(eth->dest_addr[Mod_id].sin_addr), str, INET_ADDRSTRLEN); + + /* if RRH, then I am the server, so bind */ + if (device->func_type == RRH_FUNC ) { + if (bind(eth->sockfd[Mod_id],(struct sockaddr *)ð->dest_addr[Mod_id], dest_addr_len[Mod_id])<0) { + perror("ETHERNET: Cannot bind to socket"); + exit(0); } else { - bytes_received+=ret; + printf("[RRH] binding mod_%d to %s:%d\n",Mod_id,str,ntohs(eth->dest_addr[Mod_id].sin_port)); + } + + } else { + printf("[BBU] Connecting to %s:%d\n",str,ntohs(eth->dest_addr[Mod_id].sin_port)); + } + + return 0; +} + + +int ethernet_tune(openair0_device *device , eth_opt_t option) { + + eth_state_t *eth = (eth_state_t*)device->priv; + int Mod_id=device->Mod_id; + + unsigned int sndbuf_size=0, rcvbuf_size=0; + struct timeval snd_timeout, rcv_timeout; + struct ifreq ifr; + char system_cmd[256]; + char* if_name=DEFAULT_IF; + + /****************** socket level options ************************/ + if (option== SND_BUF_SIZE) { /* transmit socket buffer size */ + if (setsockopt(eth->sockfd[Mod_id], + SOL_SOCKET, + SO_SNDBUF, + &sndbuf_size,sizeof(sndbuf_size))) { + perror("[ETHERNET] setsockopt()"); + } else { + printf( "sndbuf_size= %d bytes\n", sndbuf_size); + } + } else if (option== RCV_BUF_SIZE) { /* receive socket buffer size */ + if (setsockopt(eth->sockfd[Mod_id], + SOL_SOCKET, + SO_RCVBUF, + &rcvbuf_size,sizeof(rcvbuf_size))) { + perror("[ETHERNET] setsockopt()"); + } else { + printf( "rcvbuf_size= %d bytes\n", rcvbuf_size); + } + } else if (option==RCV_TIMEOUT) { + rcv_timeout.tv_sec = 0; + rcv_timeout.tv_usec = 180;//less than rt_period + if (setsockopt(eth->sockfd[Mod_id], + SOL_SOCKET, + SO_RCVTIMEO, + (char *)&rcv_timeout,sizeof(rcv_timeout))) { + perror("[ETHERNET] setsockopt()"); + } else { + printf( "rcv_timeout= %d usecs\n", rcv_timeout.tv_usec); + } + } else if (option==SND_TIMEOUT) { + snd_timeout.tv_sec = 0; + snd_timeout.tv_usec = 180;//less than rt_period + if (setsockopt(eth->sockfd[Mod_id], + SOL_SOCKET, + SO_SNDTIMEO, + (char *)&snd_timeout,sizeof(snd_timeout))) { + perror("[ETHERNET] setsockopt()"); + } else { + printf( "snd_timeout= %d usecs\n", snd_timeout.tv_usec); } } + + /******************* interface level options *************************/ + else if (option==MTU_SIZE) { /* change MTU of the eth interface */ + ifr.ifr_addr.sa_family = AF_INET; + strncpy(ifr.ifr_name,if_name, sizeof(ifr.ifr_name)); + ifr.ifr_mtu =8960; + if (ioctl(eth->sockfd[Mod_id],SIOCSIFMTU,(caddr_t)&ifr) < 0 ) + perror ("[ETHERNET] Can't set the MTU"); + else + printf("[ETHERNET] %s MTU size has changed to %d\n",DEFAULT_IF,ifr.ifr_mtu); + } else if (option==TX_Q_LEN) { /* change TX queue length of eth interface */ + ifr.ifr_addr.sa_family = AF_INET; + strncpy(ifr.ifr_name,if_name, sizeof(ifr.ifr_name)); + ifr.ifr_qlen =3000 ; + if (ioctl(eth->sockfd[Mod_id],SIOCSIFTXQLEN,(caddr_t)&ifr) < 0 ) + perror ("[ETHERNET] Can't set the txqueuelen"); + else + printf("[ETHERNET] %s txqueuelen size has changed to %d\n",DEFAULT_IF,ifr.ifr_qlen); - //printf("buffer head : %x %x %x %x \n",((int32_t *)buff2)[0],((int32_t *)buff2)[1],((int32_t *)buff2)[2],((int32_t *)buff2)[3]); - *timestamp = *(openair0_timestamp *)(buff2); - // printf("Received %d samples, timestamp = %d\n",bytes_received>>2,*(int32_t*)timestamp); - *(openair0_timestamp *)(buff2) = temp; - return nsamps; - + /******************* device level options *************************/ + } else if (option==COALESCE_PAR) { + if (snprintf(system_cmd,sizeof(system_cmd),"ethtool -C %s rx-usecs 3",DEFAULT_IF) > 0) { + system(system_cmd); + printf("[ETHERNET] Coalesce parameters %s\n",system_cmd); + } else { + perror("[ETHERNET] Can't set coalesce parameters\n"); + } + + } else if (option==PAUSE_PAR ) { + if (snprintf(system_cmd,sizeof(system_cmd),"ethtool -A %s autoneg off rx off tx off",DEFAULT_IF) > 0) { + system(system_cmd); + printf("[ETHERNET] Pause parameters %s\n",system_cmd); + } else { + perror("[ETHERNET] Can't set pause parameters\n"); + } + } else if (option==RING_PAR ) { + if (snprintf(system_cmd,sizeof(system_cmd),"ethtool -G %s rx 4096 tx 4096",DEFAULT_IF) > 0) { + system(system_cmd); + printf("[ETHERNET] Ring parameters %s\n",system_cmd); + } else { + perror("[ETHERNET] Can't set ring parameters\n"); + } + + } + return 0; } -int trx_eth_start(openair0_device *openair0) -{ - int16_t mesg[2]; - int Mod_id; +int openair0_dev_init_eth(openair0_device *device, openair0_config_t *openair0_cfg) { - Mod_id = openair0->openair0_cfg.Mod_id; - ethernet_socket_init(openair0->openair0_cfg.Mod_id, openair0->openair0_cfg.rrh_ip,openair0->openair0_cfg.rrh_port); + eth_state_t *eth = (eth_state_t*)malloc(sizeof(eth_state_t)); + int card = 0; + memset(eth, 0, sizeof(eth_state_t)); + eth->buffer_size = (unsigned int)openair0_cfg[card].samples_per_packet*sizeof(int32_t); // buffer size = 4096 for sample_len of 1024 + eth->sample_rate = (unsigned int)openair0_cfg[card].sample_rate; + device->priv = eth; - mesg[0] = 1 + 0; //antenna index is 0, to be replaced by the number of active antennas - mesg[1] = openair0->openair0_cfg.samples_per_packet; - - sendto(sockfd[Mod_id],mesg,4,0,(struct sockaddr *)&dest_addr[Mod_id],dest_addr_len[Mod_id]); - - - return(0); -} - -void trx_eth_write(openair0_device *device, openair0_timestamp timestamp, const void **buff, int nsamps, int cc, int flags) -{ - int i; - - for (i=0; iMod_id,timestamp,buff,i,nsamps); -} -int trx_eth_read(openair0_device *device, openair0_timestamp *ptimestamp, void **buff, int nsamps,int cc) -{ - - int i; - - for (i=0; iMod_id,ptimestamp,buff,i,nsamps)); - -} - -void trx_eth_end(openair0_device *device) -{ - - - - -} - -int num_devices = 0; - -int openair0_device_init(openair0_device *device, openair0_config_t *openair0_cfg) -{ - - printf("ETHERNET: Initializing openair0_device\n"); - device->Mod_id = num_devices++; - device->trx_start_func = trx_eth_start; - device->trx_end_func = trx_eth_end; - device->trx_read_func = trx_eth_read; - device->trx_write_func = trx_eth_write; + printf("ETHERNET: Initializing openair0_device for %s ...\n", ((device->func_type == BBU_FUNC) ? "BBU": "RRH")); + device->Mod_id = num_devices_eth++; + device->trx_start_func = trx_eth_start; + device->trx_request_func = trx_eth_request; + device->trx_reply_func = trx_eth_reply; + device->trx_write_func = trx_eth_write; + device->trx_read_func = trx_eth_read; + device->trx_get_stats_func = trx_eth_get_stats; + device->trx_reset_stats_func = trx_eth_reset_stats; + device->trx_end_func = trx_eth_end; + device->trx_stop_func = trx_eth_stop; + device->trx_set_freq_func = trx_eth_set_freq; + device->trx_set_gains_func = trx_eth_set_gains; + memcpy((void*)&device->openair0_cfg,(void*)openair0_cfg,sizeof(openair0_config_t)); + return 0; } diff --git a/targets/ARCH/ETHERNET/USERSPACE/LIB/ethernet_lib.h b/targets/ARCH/ETHERNET/USERSPACE/LIB/ethernet_lib.h index d00e6ad94a..628fcb377c 100644 --- a/targets/ARCH/ETHERNET/USERSPACE/LIB/ethernet_lib.h +++ b/targets/ARCH/ETHERNET/USERSPACE/LIB/ethernet_lib.h @@ -1,3 +1,42 @@ +/******************************************************************************* + OpenAirInterface + Copyright(c) 1999 - 2014 Eurecom + + OpenAirInterface is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + + OpenAirInterface is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with OpenAirInterface.The full GNU General Public License is + included in this distribution in the file called "COPYING". If not, + see . + + Contact Information + OpenAirInterface Admin: openair_admin@eurecom.fr + OpenAirInterface Tech : openair_tech@eurecom.fr + OpenAirInterface Dev : openair4g-devel@eurecom.fr + + Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE + + *******************************************************************************/ +/*! \file ethernet_lib.h + * \brief API to stream I/Q samples over standard ethernet + * \author Katerina Trilyraki, Navid Nikaein + * \date 2015 + * \version 0.2 + * \company Eurecom + * \maintainer: navid.nikaein@eurecom.fr + * \note + * \warning + */ + #include #include #include @@ -8,8 +47,107 @@ #include #include -int ethernet_socket_init(int Mod_id, char *dest_ip,int dest_port); +#define MAX_INST 4 +#define DEFAULT_IF "lo" +#define BUF_SIZ 8960 /*Jumbo frame size*/ -int ethernet_write_data(int Mod_id, const void *buff, int nsamps,int cc); +typedef struct { -int ethernet_read_data(int Mod_id,void *buff, int nsamps,int cc); + // opaque eth data struct + //struct eth_if *dev; + // An empty ("") or NULL device identifier will result in the first encountered device being opened (using the first discovered backend) + + int sockfd[MAX_INST]; + struct sockaddr_in dest_addr[MAX_INST]; + + unsigned int buffer_size; + unsigned int timeout_ns; + + //struct eth_metadata meta_rx; + //struct eth_metadata meta_tx; + + unsigned int sample_rate; + // time offset between transmiter timestamp and receiver timestamp; + double tdiff; + // use brf_time_offset to get this value + int tx_forward_nsamps; //166 for 20Mhz + + + // -------------------------------- + // Debug and output control + // -------------------------------- + int num_underflows; + int num_overflows; + int num_seq_errors; + int num_rx_errors; + int num_tx_errors; + + uint64_t tx_actual_nsamps; // actual number of samples transmitted + uint64_t rx_actual_nsamps; + uint64_t tx_nsamps; // number of planned samples + uint64_t rx_nsamps; + uint64_t tx_count; // number pf packets + uint64_t rx_count; + //openair0_timestamp rx_timestamp; + +} eth_state_t; + +#define ETH_META_STATUS_OVERRUN (1 << 0) +#define ETH_META_STATUS_UNDERRUN (1 << 1) + +struct eth_meta_data{ + uint64_t timestamp; + uint32_t flags; + uint32_t status; + unsigned int actual_count; +}; + + + +/*!\brief packet header */ +typedef struct { + /*!\brief packet's timestamp */ + openair0_timestamp timestamp; + /*!\brief variable declared for alignment purposes (sample size=32 bit) */ + int16_t not_used; + /*!\brief antenna port used to resynchronize */ + int16_t antenna_id; +} header_t; + +/*!\brief different options for ethernet tuning in socket and driver level */ +typedef enum { + MIN_OPT = 0, + /*!\brief socket send buffer size in bytes */ + SND_BUF_SIZE, + /*!\brief socket receive buffer size in bytes */ + RCV_BUF_SIZE, + /*!\brief receiving timeout */ + RCV_TIMEOUT, + /*!\brief sending timeout */ + SND_TIMEOUT, + /*!\brief maximun transmission unit size in bytes */ + MTU_SIZE, + /*!\brief TX queue length */ + TX_Q_LEN, + /*!\brief RX/TX ring parameters of ethernet device */ + RING_PAR, + /*!\brief interruptions coalesence mechanism of ethernet device */ + COALESCE_PAR, + /*!\brief pause parameters of ethernet device */ + PAUSE_PAR, + MAX_OPT +} eth_opt_t; + + + +/*! \fn int ethernet_tune (openair0_device *device, eth_opt_t option) +* \brief this function allows you to configure certain ethernet parameters in socket or device level +* \param[in] openair0 device which bears the socket +* \param[in] name of parameter to configure +* \return 0 on success, otherwise -1 +* \note +* @ingroup _oai +*/ +int ethernet_tune (openair0_device *device, eth_opt_t option); +int ethernet_write_data(openair0_device *device, openair0_timestamp timestamp, void **buff, int nsamps,int cc) ; +int ethernet_read_data(openair0_device *device,openair0_timestamp *timestamp,void **buff, int nsamps,int cc); diff --git a/targets/ARCH/EXMIMO/BITSTREAM/exmimo2_prom.cfi b/targets/ARCH/EXMIMO/BITSTREAM/exmimo2_prom.cfi index 006c29e001..a4f200dfc2 100644 --- a/targets/ARCH/EXMIMO/BITSTREAM/exmimo2_prom.cfi +++ b/targets/ARCH/EXMIMO/BITSTREAM/exmimo2_prom.cfi @@ -1,11 +1,11 @@ -# PROMGEN: Xilinx Prom Generator P.49d -# Copyright (c) 1995-2012 Xilinx, Inc. All rights reserved. +# PROMGEN: Xilinx Prom Generator P.20131013 +# Copyright (c) 1995-2013 Xilinx, Inc. All rights reserved. -SOFTWARE_VERSION P.49d -DATE 3/21/2014 - 17:31 -SOURCE /homes/ghaddab/riadh/openair0/express-mimo2/grlib-gpl-1.1.0-b4113/designs/express-mimo2/exmimo2_prom.mcs +SOFTWARE_VERSION P.20131013 +DATE 6/16/2015 - 16:10 +SOURCE /homes/maatalla/openair/openair0/express-mimo2/backup_houssem/express-mimo2/grlib-gpl-1.1.0-b4113/designs/express-mimo2/exmimo2_prom.mcs DEVICE 8192K DATA_WIDTH 4 FILL_DATA 0xFF -SIGNATURE 0x41900D70 +SIGNATURE 0x41521D58 START_ADDRESS 0x00000000 END_ADDRESS 0x00406577 DIRECTION_UP "express-mimo2.bit" 6slx150tfgg900 diff --git a/targets/ARCH/EXMIMO/BITSTREAM/exmimo2_prom.mcs b/targets/ARCH/EXMIMO/BITSTREAM/exmimo2_prom.mcs index 54172ffa4e..8cbd9481a3 100644 --- a/targets/ARCH/EXMIMO/BITSTREAM/exmimo2_prom.mcs +++ b/targets/ARCH/EXMIMO/BITSTREAM/exmimo2_prom.mcs @@ -18,7 +18,7 @@ :1001000000000000000000000000000000000000EF :1001100000000000000000000000000000000000DF :1001200000000000000000000000000000000201CC -:1001300000000001000000000000000000000000BE +:1001300000000000000000000000000000000000BF :1001400000000000000000000000000000000000AF :10015000000000000000000000000000000000009F :10016000000000000000000000000000000000008F @@ -26,7 +26,7 @@ :10018000000000000000000000000000000000006F :10019000000000000000000000000000000000005F :1001A000000000000000000000000000000000004F -:1001B00000920000000000000000000000000000AD +:1001B000208200000000000000000000000000009D :1001C000000000000000000000000000000000002F :1001D000000000000000000000000000000000001F :1001E000000000000000000000000000000000000F @@ -34,7 +34,7 @@ :1002000000000000000000000000000000000000EE :1002100000000000000000000000000000000000DE :1002200000000000000000000000000000000000CE -:1002300000000900000001000000000000000000B4 +:1002300000000800000000000000000000000000B6 :1002400000000000000000000000000000000000AE :10025000000000000000000000000000000000009E :10026000000000000000000000000000000000008E @@ -46,9 +46,9 @@ :1002C0000000000000000000080B03000000000018 :1002D000000000000000000000000000000000001E :1002E000000000000000000000000000000000000E -:1002F00000000000000000002000000000000000DE -:100300000000C000000020000000200000002000CD -:1003100000000000000000000000000000000000DD +:1002F00000000000000000000000000000000000FE +:10030000200020000000000020000000200000006D +:1003100020000000000000000000000000000000BD :1003200000000000000000000000000000000000CD :1003300000000000000000000000000000000000BD :1003400000000000000000000000000000000000AD @@ -82,7 +82,7 @@ :1005000000000000000000000000000000000000EB :1005100000000000000000000000000000000000DB :1005200000000000000000000000000000000000CB -:1005300000000000000000000000000000030000B8 +:1005300000000000000000000000000000000000BB :1005400000000000000000000000000000000000AB :10055000000000000000000000000000000000009B :10056000000000000000000000000000000000008B @@ -95,10 +95,10 @@ :1005D000000000000000000000000000000000001B :1005E000000000000000000000000000000000000B :1005F00000000000000000000000000000000000FB -:1006000000000000000000000000000000000000EA -:10061000C000000000008400A000000000000000F6 -:10062000000000000000000000000000A000080022 -:1006300000000800000000000000000000000000B2 +:10060000000000000000000000000000C00000002A +:100610000000000000008400000000000000000056 +:1006200000000000000000000000000000000000CA +:100630000000C0000800A000000000000000000052 :1006400000000000000000000000000000000000AA :10065000000000000000000000000000000000009A :10066000000000000000000000000000000000008A @@ -111,11 +111,11 @@ :1006D000000000000000000000000000000000001A :1006E000000000000000000000000000000000000A :1006F00000000000000000000000000000000000FA -:1007000000000000000000000000000000000800E1 -:1007100000000000000000000000000000000000D9 -:1007200000000000000000000000000000000000C9 -:1007300000000000000000000000080000000800A9 -:100740008200000000000000000000000000000027 +:1007000000000000000000000000080000000000E1 +:100710000000000000000000000000000000900049 +:100720008200000000000000000000000000000047 +:1007300008000000000000000000000000000000B1 +:1007400000000000000000000000000000000000A9 :100750000000000000000000000000000000000099 :100760000000000000000000000000000000000089 :100770000000000000000000000000000000000079 @@ -123,15 +123,15 @@ :100790000000000000000000000000000000000059 :1007A0000000000000000000000000000000000049 :1007B0000000000000000000000000000000000039 -:1007C00000004100000000000000000000000000E8 +:1007C0000000080000000000000000000000000021 :1007D0000000000000000000000000000000000019 :1007E0000000000000000000000000000000000009 :1007F00000000000000000000000000000000000F9 :1008000000000000000000000000000000000000E8 -:1008100000000000000000000800000000000000D0 -:1008200000000800000008000000000008000000B0 -:1008300000000000000000000000000000000000B8 -:100840000000000000008200000000000000000026 +:1008100000000000000000000000000000000000D8 +:1008200008000000000008000000000000000000B8 +:1008300000000000000008000000000000000000B0 +:1008400008000000000000000000000000000000A0 :100850000000000000000000000000000000000098 :100860000000000000000000000000000000000088 :100870000000000000000000000000000000000078 @@ -148,37 +148,37 @@ :1009200000000000000000000000000000000000C7 :1009300000000000000000000000000000000000B7 :1009400000000000000000000000000000000000A7 -:100950000200000000000000000000000000000095 +:100950004000000000000000000000000000000057 :100960000000000000000000000000000000000087 :100970000000000000000000000000000000000077 :100980000000000000000000000000000000000067 :100990000000000000000000000000000000000057 :1009A0000000000000000000000000000000000047 :1009B0000000000000000000000000000000000037 -:1009C0000000000000000000000000000000000027 -:1009D0000300800000000000000000000000000094 +:1009C0000000000000000000000000000000000324 +:1009D0000000000000000000000000000000000017 :1009E0000000000000000000000000000000000007 :1009F00000000000000000000000000000000000F7 :100A000000000000000000000000000000000000E6 :100A100000000000000000000000000000000000D6 :100A200000000000000000000000000000000000C6 -:100A300000008000000000C0000000000000000076 +:100A30008000800000000040000000000000000076 :100A400000000000000000000000000000000000A6 -:100A50000000000000000000000300000000000093 +:100A50000000000080000000000300000000000013 :100A60000000000000000000000000000000000086 :100A70000000000000000000000000000000000076 :100A80000000000000000000000000000000000066 :100A90000000000000000000000000000000000056 :100AA0000000000000000000000000000000000046 -:100AB0000000400082000000000400000000000070 +:100AB0000000020002000000000000000000000032 :100AC0000000000000000000000000000000000026 -:100AD00000000000C0004000000000010000000015 +:100AD00000000000C0008200000000410000000093 :100AE0000000000000000000000000000000000006 :100AF00000000000000000000000000000000000F6 :100B000000000000000000000000000000000000E5 :100B100000000000000000000000000000000000D5 :100B200000000000000000000000000000000000C5 -:100B30000000000000000000820000000000000033 +:100B300000000000000000000000000000000000B5 :100B400000000000000000000000000000000000A5 :100B50000000000000000000000000000000000095 :100B60000000000000000000000000000000000085 @@ -186,7 +186,7 @@ :100B80000000000000000000000000000000000065 :100B90000000000000000000000000000000000055 :100BA0000000000000000000000000000000000045 -:100BB00000000000000000000000800000000000B5 +:100BB0000000000000000000000000000000000035 :100BC0000000000000000000000000000000000025 :100BD0000000000000000000000000000000000015 :100BE0000000000000000000000000000000000005 @@ -194,10 +194,10 @@ :100C000000000000000000000000000000000000E4 :100C100000000000000000000000000000000000D4 :100C200000000000000000000000000000000000C4 -:100C3000000000000000000000000005000040006F +:100C300000000000000000000005000000000500AA :100C400000000000000000000000000000000000A4 -:100C50000000000000000000000200000000000092 -:100C6000050000000000000000000000000000007F +:100C5000000000000000000000020005004000004D +:100C60000300000000000000000000000000000081 :100C70000000000000000000000000000000000074 :100C80000000000000000000000000000000000064 :100C90000000000000000000000000000000000054 @@ -205,15 +205,15 @@ :100CB0000000000000000000000000000000000034 :100CC0000000000000000000000000000000000024 :100CD0000000000000000000000000000000000014 -:100CE0000000000000000000000000000000000004 +:100CE0000000010000000000000000000000000003 :100CF00000000000000000000000000000000000F4 :100D000000000000000000000000000000000000E3 :100D100000000000000000000000000000000000D3 :100D200000000000000000000000000000000000C3 -:100D3000000000000000000000000000842100907E -:100D40000900C8430000000000000000000000008F -:100D500000000000000000000000000000008841CA -:100D600000900900C84300000000000000000000DF +:100D30000000000000000000000000008181005061 +:100D40000A00900900000000000000000000000000 +:100D50000000000000000000000000000000818191 +:100D600000500A0090090000000000000000000090 :100D70000000000000000000000000000000000073 :100D80000000000000000000000000000000000063 :100D90000000000000000000000000000000000053 @@ -235,17 +235,17 @@ :100E90000000000000000000000000000000000052 :100EA0000000000000000000000002000000000040 :100EB00000400000000000000000000000000000F2 -:100EC00000000040030810C0020000000000000005 +:100EC00000000040032004C00200000000000000F9 :100ED00000000200000000000040000000000000D0 -:100EE000000000000040030810C0020000000000E5 +:100EE000000000000040032004C0020000000000D9 :100EF00000000000020000000000004000000000B0 :100F000000000000000000000000000000000000E1 :100F10000000004000000000000000000000000091 :100F20000000310000000000000000000000000090 :100F300000000000000000000000000000000000B1 -:100F4000000000000802000810004010000000002F +:100F40000000000008020020040040100000000023 :100F50000000000000000000000000000000000091 -:100F6000000000000000080200081000401000000F +:100F60000000000000000802002004004010000003 :100F70000000000000000000000000000000000071 :100F80000000000000000000000000000000000061 :100F90000000000000000000000000000000000051 @@ -331,7 +331,7 @@ :10149000000000000000000000000000000000004C :1014A000000000000000000000000000000000003C :1014B000000000000000000000000000000000002C -:1014C000080000000000000008000000000000000C +:1014C0000000000000000000080000000000000014 :1014D000000000000000000000000000000000000C :1014E00000000000000000000000000000000000FC :1014F00000000000000000000000000000000000EC @@ -364,7 +364,7 @@ :1016A000000000000000000000000000000000003A :1016B000000000000000000000000000000000002A :1016C000000000000000000000000000000000001A -:1016D000000000000000000000000000000000000A +:1016D0000000000000000000000000000004000006 :1016E00000000000000000000000000000000000FA :1016F00000000000000000000000000000000000EA :1017000000000000000000000000000000000000D9 @@ -443,7 +443,7 @@ :101B90000000000000020000000000000000000043 :101BA0000000000000000000000000000000000035 :101BB0000000000000000000000000000000000025 -:101BC000000000000000000000000000000000080D +:101BC0000000000000000000000000000000000015 :101BD0000000000000000000000000000000000005 :101BE00000000000000000000000000000000000F5 :101BF00000000000000000000000000000000000E5 @@ -452,7 +452,7 @@ :101C200000000000000000000000000000000000B4 :101C300000000000000000000000000000000000A4 :101C40000000000000000000000000000000000094 -:101C50000001000000000000000000000000000083 +:101C50000000000000000000000000000000000084 :101C60000000000000000000000000000000000074 :101C70000000000000000000000000000000000064 :101C80000000000000000000000000000000000054 @@ -460,7 +460,7 @@ :101CA0000000000000000000000000000000000034 :101CB0000000000000000000000000000000000024 :101CC0000000000000000000000000000000000014 -:101CD000000081000000000000070000000000007C +:101CD00000004100000000000007000000000000BC :101CE00000000000000000000000000000000000F4 :101CF00000000000000000000000000000000000E4 :101D000000000000000000000000000000000000D3 @@ -614,7 +614,7 @@ :10264000000000000000000000000000000000008A :10265000000000000000000000000000000000007A :10266000000000000000000000000000000000006A -:10267000000000000000000000000020000000003A +:102670000000000000000000000000000004000056 :10268000000000000000000000000000000000004A :10269000000000000000000000000000000000003A :1026A000000000000000000000000000000000002A @@ -818,8 +818,8 @@ :1033000000000000000000000000000000000000BD :1033100000000000000000000000000000000000AD :10332000000000000000000000000000000000009D -:10333000000000000000000000000000000000008D -:10334000000000000000000000000000000000007D +:10333000000082000000000000000000000000000B +:103340000000000000000000000000000000040079 :10335000000000000000000000000000000000006D :10336000000000000000000000000000000000005D :10337000000000000000000000000000000000004D @@ -988,13 +988,13 @@ :103DA0000000000000000000000000000000000013 :103DB0000000000000000000000000000000000003 :103DC00000000000000000000000000000000000F3 -:103DD00000000000000000000000000020002000A3 -:103DE0000000200000000000000000002000000093 -:103DF0000000000000000000000020002000200063 -:103E00000000200000000000000000002000000072 -:103E10000000000000000000000020000002200060 -:103E20002000000020000000000000000000000052 -:103E30000000000000000000000000002000000062 +:103DD00000000000000000000000000000000000E3 +:103DE00000000000000000000000000000000000D3 +:103DF0000000000020000000000020000000000083 +:103E000000000000000000000000000000000000B2 +:103E10000000000020000000000020000002000060 +:103E20000000000000000000000000000000000092 +:103E30000000000000002000000000002000000042 :103E40000000000000000000000000000000000072 :103E50000000000000000000000000000000000062 :103E60000000000000000000000000000000000052 @@ -1005,18 +1005,18 @@ :103EB0000000000000000000000000000000000002 :103EC00000000000000000000000000000000000F2 :103ED00000000000000000000000000000000000E2 -:103EE00000000000000000000000000000000200D0 -:103EF00000000000000008000000000000000000BA +:103EE0000000000000000000000000000000004092 +:103EF00000000000000000000000000000000000C2 :103F000000000000000000000000000000000000B1 -:103F1000000000000000021000000000000000008F +:103F10000000000000000040000000000000000061 :103F20000000000000000000000000000000000091 -:103F3000000000000000000002000000000000007F +:103F30000000000000000000004000000000000041 :103F40000000000000000000000000000000000071 -:103F5000020000000000000000000000000000005F +:103F50000040000000000000000000000000000021 :103F60000000000000000000000000000000000051 -:103F70000000000000000000000000000000000041 +:103F70000000000000000000001000000000000031 :103F80000000000000000000000000000000000031 -:103F90000000000000000000000000000000000021 +:103F90000000000000000000001000000000000011 :103FA0000000000000000000000000000000000011 :103FB0000000000000000000000000000000000001 :103FC00000000000000000000000000000000000F1 @@ -1029,7 +1029,7 @@ :104030000000000000000000000000000000000080 :104040000000000000000000000000000000000070 :104050000000000000000000000000000000000060 -:104060000000000000000000000000000000000050 +:1040600000000000C0000000000000000000000090 :104070000000000000000000000000000000000040 :104080000000000000000000000000000000000030 :104090000000000000000000000000000000000020 @@ -1042,12 +1042,12 @@ :1041000000000000000000000000000000000000AF :10411000000000000000000000000000000000009F :10412000000000000000000000000000000000008F -:104130000000000000000000000008000000000077 -:1041400000000000000000000000820000000000ED -:104150000800000000000000C00000000000000097 +:10413000000000000000000000000000000000007F +:1041400000000000000000000000840000000000EB +:10415000000000000000000000000000000000005F :104160000000000000000000080000000000000047 :10417000000000000000000000000000000000003F -:10418000000000000000000000000000000000002F +:104180000008000000000000000000000000000027 :10419000000000000000000000000000000000001F :1041A000000000000000000000000000000000000F :1041B00000000000000000000000000000000000FF @@ -1059,9 +1059,9 @@ :10421000000000000000000000000000000000009E :10422000000000000000000000000000000000008E :10423000000000000000000000000000000000007E -:104240000000000000000000000000000000080066 -:10425000080000000000A0000000020000000000B4 -:10426000000000000000000000000000000000004E +:10424000000000000000000000000000000000006E +:10425000000000000000A00000000000000040007E +:104260000000000000000800000000000000000046 :10427000000000000000000000000000000000003E :10428000000000000000000000000000000000002E :10429000000000000000000000000000000000001E @@ -1076,7 +1076,7 @@ :10432000000000000000000000000000000000008D :10433000000000000000000000000000000000007D :10434000000000000000000000000000000000006D -:1043500000008200000000000000C000000000001B +:1043500000008400000000000000000000000000D9 :1043600000008200000000000000000000000000CB :10437000000000000000000000000000000000003D :10438000000000000000000000000000000000002D @@ -1101,7 +1101,7 @@ :1044B00000000000000000000000000000000000FC :1044C00000000000000000000000000000000000EC :1044D00000000000000000000000000000000000DC -:1044E00000000000000000000000000000000000CC +:1044E00000000000000000000800000000000000C4 :1044F00000000000000000000000000000000000BC :1045000000000000000000000000000000000000AB :10451000000000000000000000000000000000009B @@ -1109,15 +1109,15 @@ :10453000000000000000000000000000000000007B :10454000000000000000000000000000000000006B :10455000000000000000000000000000000000005B -:1045600000000000000000000000800000000000CB -:1045700000400000000000000040000000000000BB +:10456000000000000000000000000000000000004B +:104570000020000000000000000900000000000012 :10458000000000000000000000000000000000002B :10459000000000000000000000000000000000001B :1045A000000000000000000000000000000000000B :1045B00000000000000000000000000000000000FB :1045C00000000000000000000000000000000000EB :1045D00000000000000000000000000000000000DB -:1045E00000000000000000000000000004000000C7 +:1045E00000000000000000000000000020000000AB :1045F00000000000020000000000000000000000B9 :1046000000000000000000000000000000000000AA :10461000000000000000000000000000000000009A @@ -1126,7 +1126,7 @@ :10464000000000000000000000000000000000006A :10465000000000000000000000000000000000005A :10466000000000000000000000000000000000400A -:104670000000000000000004000000000000000036 +:104670000000000000000004000002000000000034 :10468000000000000000000000000000000000002A :10469000000000000000000000000000000000001A :1046A000000000000000000000000000000000000A @@ -1134,7 +1134,7 @@ :1046C00000000000000000000000000000000000EA :1046D00000000000000000000000000000000000DA :1046E00000000000000000000000000000000000CA -:1046F000000000000000000000800000000000003A +:1046F00000000000000000000080000080000000BA :1047000000000000000000000000000000000000A9 :104710000000000000000000000000000000000099 :104720000000000000000000000000000000000089 @@ -1158,7 +1158,7 @@ :104840000000000000000000000000000000000068 :104850000000000000000000000000000000000058 :104860000000000000000000000000000000000048 -:10487000000000000000600600000000E007418228 +:10487000000000000000884100000000E0078421E3 :1048800000000000E0070000000000000000000041 :104890000000000000000000000000000000000018 :1048A0000000000000000000000000000000000008 @@ -1233,10 +1233,10 @@ :104CF00000000000000000000000000000000000B4 :104D000000000000000000000000000000000000A3 :104D10000000000000000000000000000000000093 -:104D20000000000000000000000000000000000083 -:104D30000000000000000000000000000000000073 -:104D40000000000000000000000000000000000063 -:104D50000000000000000000000000000000000053 +:104D20002000200000000000000000000000000043 +:104D30002000000000000000000000000000000053 +:104D40002000200000000000000000000000000023 +:104D50002000000000000000000000000000000033 :104D60000000000000000000000000000000000043 :104D70000000000000000000000000000000000033 :104D80000000000000000000000000000000000023 @@ -1257,7 +1257,7 @@ :104E70000000000000000000000000000000000032 :104E80000000000000000000000000000000000022 :104E900000000000000002000000000000400000D0 -:104EA0000000000000000000000000000000000002 +:104EA000000000000000000000000000008800007A :104EB00000000000000000000000000000000000F2 :104EC00000000000000000000000000000000000E2 :104ED00000000000000000000000000000000000D2 @@ -1278,16 +1278,16 @@ :104FC00000000000000000000000000000000000E1 :104FD00000000000000000000000000000000000D1 :104FE00000000000000000000000000000000000C1 -:104FF00000000000000000000000000000000000B1 -:1050000000000000000000000000000000000000A0 -:105010000000000000000000000000000000000090 +:104FF00000000000000000000000000008000000A9 +:10500000000000000000000000000000030000009D +:10501000000003000000000000000000000000008D :105020000000000000000000000000000000000080 :105030000000000000000000000000000000000070 :105040000000000000000000000000000000000060 :105050000000000000000000000000000000000050 :105060000000000000000000000000000000000040 -:105070000000000000000000000000000000000030 -:105080000000000000000000000000000000000020 +:105070000000000000000000000000000000C00070 +:1050800000000000C0000000000000000000000060 :105090000000000000000000000000000000000010 :1050A0000000000000000000000000000000000000 :1050B00000000000000000000000000000000000F0 @@ -1302,7 +1302,7 @@ :10514000000000000000000000000000000000005F :10515000000000000000000000000000000000004F :10516000000000000000000000000000000000003F -:10517000000000000000000000000000000000002F +:1051700000000000000000000000A000A0000000EF :10518000000000000000000000000000000000001F :10519000000000000000000000000000000000000F :1051A00000000000000000000000000000000000FF @@ -1313,12 +1313,12 @@ :1051F00000000000000000000000000000000000AF :10520000000000000000000000000000000000009E :10521000000000000000000000000000000000008E -:1052200000000000000000000090000000000000EE +:10522000000000000000000000000000000000007E :10523000000000000000000000000000000000006E :10524000000000000000000000000000000000005E :10525000000000000000000000000000000000004E :10526000000000000000000000000000000000003E -:10527000000000000000000000000000000000002E +:10527000000000000000080008000000000000001E :10528000000000000000000000000000000000001E :10529000000000000000000000000000000000000E :1052A00000000000000000000000000000000000FE @@ -1361,7 +1361,7 @@ :1054F00000000000000000000000000000000000AC :10550000000000000000000000000000000000009B :10551000000000000000000000000000000000008B -:10552000000000000000000020000000000000005B +:1055200000000000000000009000000000000000EB :10553000200000000000000000000000000000004B :10554000000000000000000000000000000000005B :10555000000000000000000000000000000000004B @@ -1485,14 +1485,14 @@ :105CB00000000000000000000000000000000000E4 :105CC00000000000000000000000000000000000D4 :105CD0000000000000002000000000000000200084 -:105CE0000000000000002000000000000000200074 -:105CF0000000000000002000000000000000200064 -:105D00000000000000002000000000000000200053 -:105D10000000000000000000200000000000000063 -:105D20002000000000000000200000000000000033 +:105CE0000000000000002000000000000000000094 +:105CF0000000000020002000000000000000200044 +:105D00000000000000002000000000000000000073 +:105D10000000000020000000200000000000000043 +:105D20002000000000000000000000000000000053 :105D30000000000000000000000000000000000063 :105D40000000000000000000000000000000000053 -:105D50000000001100000000000000000000000032 +:105D50000000000000000000000000000000000043 :105D60000000000000000000000000000000000033 :105D70000000000000000000000000000000000023 :105D80000000000000000000000000000000000013 @@ -1500,46 +1500,46 @@ :105DA00000000000000000000000000000000000F3 :105DB00000000000000000000000000000000000E3 :105DC00000000000000000000000000000000000D3 -:105DD0000000000000900000000000000000000033 +:105DD00000000000000000000000000000000000C3 :105DE00000000000000000000000000000000000B3 :105DF00000000000000000000000000000000000A3 -:105E00000010000000000000000000000000000082 +:105E00000000000000000000000000000000000092 :105E10000000000000000000000000000000000082 :105E20000000000000000000000000000000000072 :105E30000000000000000000000000000000000062 :105E40000000000000000000000000000000000052 :105E50000000000000000000000000000000000042 -:105E60000000000000000000000000000000000032 -:105E70000000000000000000000000000000000022 -:105E80000000000000000000000000000000000012 -:105E90000000000000000000000000000000000002 -:105EA00000000000000000000000000000000000F2 -:105EB00000000000000000000000000000000000E2 +:105E6000000000080000000000000000000000002A +:105E70000000008400000000000000080000000096 +:105E80000000001000000000000000000000000002 +:105E900000000000000000000000000800000000FA +:105EA00000000000001000000000000000000000E2 +:105EB00000000000000000000000000000100000D2 :105EC00000000000000000000000000000000000D2 :105ED00000000000000000000000000000000000C2 :105EE00000000000000000000000000000000000B2 :105EF00000000000000000000000000000000000A2 -:105F00000000000000000000000000000000000091 +:105F00000000000000080000000000000000000089 :105F10000000000000000000000000000000000081 :105F20000000000000000000000000000000000071 :105F30000000000000000000000000000000000061 :105F40000000000000000000000000000000000051 -:105F50000000000000000000000000000000000041 +:105F50004000000000000000000000000000000001 :105F60000000000000000000000000000000000031 :105F70000000000000000000000000000000000021 :105F80000000000000000000000000000000000011 :105F90000000000000000000000000000000000001 :105FA00000000000000000000000000000000000F1 :105FB00000000000000000000000000000000000E1 -:105FC00000000000000000000000210000000000B0 -:105FD0004100080000000000410000000000000037 +:105FC00000000000000000000000000000000000D1 +:105FD000030003000000000041000000000000007A :105FE00000000000000000000000000000000000B1 :105FF00000000000000000000000000000000000A1 :106000000000000000000000000000000000000090 :106010000000000000000000000000000000000080 :106020000000000000000000000000000000000070 :106030000000000000000000000000000000000060 -:106040000000000000000000000000000000000050 +:106040000000C000080000000000A00000000000E8 :106050000000000000000000000000000000000040 :106060000000000000000000000000000000000030 :106070000000000000000000000000000000000020 @@ -1554,8 +1554,8 @@ :10610000000000000000000000000000000000008F :10611000000000000000000000000000000000007F :10612000000000000000000000000000000000006F -:10613000000000000000000000000000000000005F -:106140000000000000000000A000000000000000AF +:106130000000000000000000080000000000000057 +:10614000000000000000000000000000000000004F :106150000800000000000000000000000000000037 :10616000000000000000000000000000000000002F :10617000000000000000000000000000000000001F @@ -1565,13 +1565,13 @@ :1061B00000000000000000000000000000000000DF :1061C00000000000000000000000000000000000CF :1061D00000000000000000000000000000000000BF -:1061E000000000000000400000000000000000006F +:1061E00003000000000000000000000000000000AC :1061F000000000000000000000000000000000009F :10620000000000000000000000000000000000008E :10621000000000000000000000000000000000007E :10622000000000000000000000000000000000006E :10623000000000000000000000000000000000005E -:10624000000000000800000000000000080000003E +:106240000000000000000000000008000000000046 :10625000000000000000000000000000000000003E :10626000000000000000000000000000000000002E :10627000000000000000000000000000000000001E @@ -1680,16 +1680,16 @@ :1068E00000000000000000000000000000000000A8 :1068F0000000000000000000000000000000000098 :106900000000000000000000000000000000000087 -:106910000000200000000000000000000000000057 -:106920000000000020000000000000000000000047 -:106930000000200000000000000000000000000037 -:106940000000000020000002000000000000000025 +:106910000000000000000000000000000000000077 +:106920000000000000000000000000000000000067 +:106930000000000000000000000000000000000057 +:106940000000000000000002000000000000000045 :106950000000000000000000000000000000000037 :106960000000000000000000000000000000000027 :106970000000000000000000000000000000008097 :106980000000000000000000000000000000000007 :1069900000000000000000000000000000000000F7 -:1069A00000000000000000000000000000000000E7 +:1069A00000000040000000000000000000000000A7 :1069B00000000000000000000000000000000000D7 :1069C00000000000000000000000000000000000C7 :1069D00000000000000000000000000000000000B7 @@ -1702,7 +1702,7 @@ :106A40000000000000000000000000000000000046 :106A50000000000000000000000000000000000036 :106A60000000000000000000000000000000000026 -:106A70000000000000000000000000000000000016 +:106A70000000000000000000000000100000000006 :106A800000000008000000000000000000000000FE :106A900000000000000000000000000000000000F6 :106AA00000000000000000000000000000000000E6 @@ -1733,16 +1733,16 @@ :106C30000000000000000000000000000000000054 :106C40000000000000000000000000000000000044 :106C50000000000000000000000000000000000034 -:106C6000080000000000000000000000000000001C -:106C70000000080008000000000000000000000004 -:106C80000000820000000000000000000000000082 +:106C60000000000000000000000000000000000024 +:106C70000000000000000000000000000000000014 +:106C80000000000000000000000000000000000004 :106C900000000000000000000000000000000000F4 :106CA00000000000000000000000000000000000E4 :106CB00000000000000000000000000000000000D4 :106CC00000000000000000000000000000000000C4 :106CD00000000000000000000000000000000000B4 :106CE00000000000000000000000000000000000A4 -:106CF0000000000000008000000000000000000014 +:106CF0000000000000000000000000000000000094 :106D00000000000000000000000000000000000083 :106D10000000000000000000000000000000000073 :106D20000000000000000000000000000000000063 @@ -1750,9 +1750,9 @@ :106D40000000000000000000000000000000000043 :106D50000000000000000000000000000000000033 :106D60000000000000000000000000000000000023 -:106D70000000000082000000000000000000000091 +:106D70000000000000000000000000000000000013 :106D80000000000000000000000000000000000003 -:106D900000000000001100000000000000000000E2 +:106D900000000000000000000000000000000000F3 :106DA00000000000000000000000000000000000E3 :106DB00000000000000000000000000000000000D3 :106DC00000000000000000000000000000000000C3 @@ -1767,7 +1767,7 @@ :106E50000000000000000000000000000000000032 :106E60000000000000000000000000000000000022 :106E70000000000000000000000000000000000012 -:106E800000000000000000000000001000000000F2 +:106E80000000000000000000000000000000000002 :106E900000000000000000000000000000000000F2 :106EA00000000000000000000000000000000000E2 :106EB00000000000000000000000000000000000D2 @@ -1792,7 +1792,7 @@ :106FE00000000000000000000000000000000000A1 :106FF0000000000000000000000000000000000091 :107000000000000000000000000000000000000080 -:107010000000000000000000000000000000000070 +:107010000000000000000000000020000000000050 :107020000000000000000000000000000000000060 :107030000000000000000000000000000000000050 :107040000000000000000000000000000000000040 @@ -1800,15 +1800,15 @@ :107060000000000000000000000000000000000020 :107070000000000000000000000000000000000010 :107080000000000000000000000000000000000000 -:107090000000000000000000000000008000000070 -:1070A00000000040000000000000000000000000A0 +:1070900000000000000000000000000000000000F0 +:1070A00000000020000000000000000000000000C0 :1070B00000000000000000000000000000000000D0 :1070C00000000000000000000000000000000000C0 :1070D00000000000000000000000000000000000B0 :1070E00000000000000000000000000000000000A0 :1070F0000000000000000000000000000000000090 :10710000000000000000000000000000000000007F -:10711000000000000000400000000000000010001F +:1071100000000000000090000000000000000800D7 :10712000000000000000000000000000000000005F :10713000000000000000000000000000000000004F :10714000000000000000000000000000000000003F @@ -1831,16 +1831,16 @@ :10725000000000000000000000000000000000002E :10726000000000000000000000000002000000001C :10727000000000000000000000000000000000000E -:1072800000000000000000000000000080118000ED -:10729000000080000000000000000000000000006E -:1072A00000000000002000000000000000000000BE +:1072800000000000000000000000000000000000FE +:1072900000000000000000000000000000000000EE +:1072A00000000000000000000000000000000000DE :1072B00000000000000000000000000000000000CE :1072C00000000000000000000000000000000000BE :1072D00000000000000000000000000000000000AE :1072E000000000000000000000000000000000009E :1072F000000000000000000000000000000000008E -:10730000000000000000000000000000000002017A -:107310002000000008000000000000000000000045 +:10730000000000000000000000000000000000007D +:10731000000000000000000000000000000000006D :10732000000000000000000000000000000000005D :10733000000000000000000000000000000000004D :10734000000000000000000000000000000000003D @@ -1848,15 +1848,15 @@ :10736000000000000000000000000000000000001D :10737000000000000000000000000000000000000D :1073800000000000000000000000000000000000FD -:1073900000000000070000000000000000000000E6 -:1073A000000000000000000781000000000000074E +:1073900000000000000000000000000000000000ED +:1073A0000000000000000007880000000000000747 :1073B00000000000000000000000000000000000CD :1073C00000000000000000000000000000000000BD :1073D00000000000000000000000000000000000AD :1073E000000000000000000000000000000000009D :1073F000000000000000000000000000000000008D :10740000000000000000000000000000000000007C -:10741000000000FF3C3C00000000000000000000F5 +:10741000000000000000000000000000000000006C :10742000000000000000000000000000000000005C :10743000000000000000000000000000000000004C :10744000000000000000000000000000000000003C @@ -1864,7 +1864,7 @@ :10746000000000000000000000000000000000001C :10747000000000000000000000000000000000000C :1074800000000000000000000000000000000000FC -:107490000000000000FF3C3C000000000000000075 +:1074900000000000000000000000000000000000EC :1074A00000000000000000000001000000000000DB :1074B0001401800000000000000000000000000037 :1074C00000000000000000000000000000000000BC @@ -1923,12 +1923,12 @@ :107810000000000000000000000000000000000068 :107820000000000000000000000000000000000058 :107830000000020000000000000000000000000046 -:1078400000000000000000004000000020000000D8 -:107850000000000000000000000000000000000028 -:1078600000000000000000002000000020000000D8 -:107870000000000000000000000000000000000008 -:1078800000000002000000000000200000002000B6 -:1078900000000000000000000000000000000000E8 +:107840000000000000000000000000000000000038 +:107850008800000000000000200000000000000080 +:1078600020000000000000000000000000000000F8 +:1078700020000000000000002000000000000000C8 +:1078800020000002000000000000000000000000D6 +:1078900000002000000000000000200000000000A8 :1078A00000000000000000000000000000000000D8 :1078B00000000000000000000000000000000000C8 :1078C00000000000000000000000000000000000B8 @@ -1940,21 +1940,21 @@ :107920000000000000000000000000000000000057 :107930000000000000000000000000000000000047 :107940000000000000000000000000000000000037 -:10795000000000000040000000000000084000009F +:107950000000000000000000000000000000000027 :107960000000000000000000000000000000000017 -:1079700000000000000000000000000000400000C7 +:107970000000000000000000000000000000000007 :1079800000000000000000000000000000000000F7 -:1079900000000000000000000000000000000040A7 +:1079900000000000000000000000000000000000E7 :1079A00000000000000000000000000000000000D7 -:1079B00000000000000000000000000000000000C7 +:1079B0000000000000000000000000000000C00007 :1079C00000000000000000000000000000000000B7 -:1079D000000000000000000800000000000000009F +:1079D00000000000000000000000000000000000A7 :1079E0000000000000000000000000000000000097 -:1079F000000000000000000800000000000000007F +:1079F0000000000000000000000000000000000087 :107A00000000000000000000000000000000000076 -:107A1000000000000000000000080000000000005E +:107A10000000000000000000000000000000000066 :107A20000000000000000000000000000000000056 -:107A30000000000000000000004000000000000006 +:107A30000000000000000000000000000000000046 :107A40000000000000000000000000000000000036 :107A50000000000000000000000000000000000026 :107A60000000000000000000000000000000000016 @@ -1962,23 +1962,23 @@ :107A800000000000000000000000000000000000F6 :107A900000000000000000000000000000000000E6 :107AA00000000000000000000000000000000000D6 -:107AB00000000000000000000000000000000000C6 -:107AC0000000000000000000900000000000000026 +:107AB0000000000000000000000000004000000086 +:107AC00000000000000000000000000000000000B6 :107AD00000000000000000000000000000000000A6 :107AE0000000000000000000000000000000000096 :107AF0000000000000000000000000000000000086 :107B00000000000000000000000000000000000075 :107B10000000000000000000000000000000000065 :107B20000000000000000000000000000000000055 -:107B30000000000000000000000000000000000045 -:107B400040000000000000000000000000000000F5 +:107B30000000000000000000000000000000400005 +:107B4000000000000800000000000000000000002D :107B50000000000000000000000000000000000025 :107B60000000000000000000000000000000000015 :107B70000000000000000000000000000000000005 :107B800000000000000000000000000000000000F5 :107B900000000000000000000000000000000000E5 :107BA00000000000000000000000000000000000D5 -:107BB00000000000000000000000000000000000C5 +:107BB000000000000000A000000000000000000025 :107BC00000000000000000000000000000000000B5 :107BD00000000000000000000000000000000000A5 :107BE0000000000000000000000000000000000095 @@ -1986,7 +1986,7 @@ :107C00000000000000000000000000000000000074 :107C10000000000000000000000000000000000064 :107C20000000000000000000000000000000000054 -:107C3000000000000000000008000000000000003C +:107C30000000000000000000000000000000000044 :107C40000000000000000000000000000000000034 :107C50000000000000000000000000000000000024 :107C60000000000000000000000000000000000014 @@ -1994,8 +1994,8 @@ :107C800000000000000000000000000000000000F4 :107C900000000000000000000000000000000000E4 :107CA00000000000000000000000000000000000D4 -:107CB00000000000000000000000000000000800BC -:107CC00000000000000000000000000000000000B4 +:107CB00000000000000000000000000000000000C4 +:107CC00000000800000000000000000000000000AC :107CD00000000000000000000000000000000000A4 :107CE0000000000000000000000000000000000094 :107CF0000000000000000000000000000000000084 @@ -2003,15 +2003,15 @@ :107D10000000000000000000000000000000000063 :107D20000000000000000000000000000000000053 :107D30000000000000000000000000000000000043 -:107D40000000000000000000000000000000000033 -:107D5000000004000000000000000000000000001F +:107D40000000000000000000000000000300000030 +:107D50000000000000000000000000000000000023 :107D60000000000000000000000000000000000013 :107D70000000000000000000000000000000000003 :107D800000000000000000000000000000000000F3 :107D900000000000000000000000000000000000E3 :107DA00000000000000000000000000000000000D3 -:107DB00000000000000000000000000000000000C3 -:107DC0000000000000000000C000000000000000F3 +:107DB00000000000000008000000000000000000BB +:107DC00000000000000000000000000000000000B3 :107DD00000000000000000000000000000000000A3 :107DE0000000000000000000000000000000000093 :107DF0000000000000000000000000000000000083 @@ -2035,7 +2035,7 @@ :107F10000000000000000000000000000000000061 :107F20000000000000000000000000000000000051 :107F30000000000000000000000000000000000041 -:107F40000000000000000000000000000000000031 +:107F40000000000000000000000000000000080029 :107F50000000000000000000000000000000000021 :107F60000000000000000000000000000000000011 :107F70000000000000000000000000000000000001 @@ -2044,7 +2044,7 @@ :107FA00000000000000000000000000000000000D1 :107FB00000000000000000000000000000000000C1 :107FC00000000000000000000000000000000000B1 -:107FD0000000000000000008000000000000002079 +:107FD00080000000000300200000000000000020DE :107FE0000000000000000000000000000000000091 :107FF0000000000000000000000000000000000081 :108000000000000000000000000000000000000070 @@ -2052,7 +2052,7 @@ :108020000000000000000000000000000000000050 :108030000000000000000000000000000000000040 :108040000000000000000000000000000000000030 -:108050000000900000000000000000000000000090 +:1080500000004000000000000000000000000000E0 :108060000000000000000000000000000000000010 :108070000000000000000000000000000000000000 :1080800000000000000000000000000000000000F0 @@ -2060,7 +2060,7 @@ :1080A00000000000000000000000000000000000D0 :1080B00000000000000000000000000000000000C0 :1080C00000000000000000000000000000000000B0 -:1080D0000000000000880000000000000004000014 +:1080D0000000000000900000000000000000000010 :1080E0000000000000000000000000000000000090 :1080F0000000000000000000000000000000000080 :10810000000000000000000000000000000000006F @@ -2068,7 +2068,7 @@ :10812000000000000002000000000000000000004D :10813000000000000000000000000000000000003F :10814000000000000000000000000000000000002F -:10815000000000000000000000000000000000809F +:10815000000000000000000000000000000000001F :10816000000000000000000000000000000000000F :1081700000000000000000000000000000000000FF :1081800000000000000000000000000000000000EF @@ -2076,7 +2076,7 @@ :1081A00000000000000000000000000000000000CF :1081B00000000000000000000000000000000000BF :1081C00000000000000000000000000000000000AF -:1081D0000000000000000000000800000000000097 +:1081D000000000000000000000000000000000009F :1081E000000000000000000000000000000000008F :1081F000000000000000000000000000000000007F :10820000000000000000000000000000000000006E @@ -2092,8 +2092,8 @@ :1082A00000000000000000000000000000000000CE :1082B00000000000000000000000000000000000BE :1082C00000000000000000000000000000000000AE -:1082D000000000000000000000000000008100001D -:1082E0000000E007008200000000E0000000000045 +:1082D000000000000000000000000000004100005D +:1082E0000000E007000000000000000000000000A7 :1082F000000000000000000000000000000000007E :10830000000000000000000000000000000000006D :10831000000000000000000000000000000000005D @@ -2109,7 +2109,7 @@ :1083B00000000000000000000000000000000000BD :1083C00000000000000000000000000000000000AD :1083D000000000000000000000000000000000009D -:1083E000001000000301140200100000000014023D +:1083E0000010000003011402000000000000000063 :1083F000000000000000000000000000000000007D :10840000000000000000000000000000000000006C :10841000000000000000000000000000000000005C @@ -2117,7 +2117,7 @@ :10843000000000000000000000000000000000003C :10844000000000000000000000000000000000002C :10845000000000000000000000000000000000001C -:1084600000000000200810040000000020080000A8 +:1084600000000000200810040000000000000000D0 :1084700000000000000000000000000000000000FC :1084800000000000000000000000000000000000EC :1084900000000000000000000000000000000000DC @@ -2142,7 +2142,7 @@ :1085C00000000000000000000000000000000000AB :1085D000000000000000000000000000000000009B :1085E000000000000000000000000090900000006B -:1085F000000000101000000000000000000000005B +:1085F000000000001000000000000000000000006B :10860000000000000000000000000000000000006A :10861000000000000000000000000000000000005A :10862000000000000000000000000000000000004A @@ -2150,7 +2150,7 @@ :10864000000000000000000000000000000000002A :10865000000000000000000000000000000000001A :108660000000000000000000000000000004000006 -:108670008C000000000000008C00000000000000E2 +:108670008C000000000000008000000000000000EE :1086800000000000000000000000000000000000EA :1086900000000000000000000000000000000000DA :1086A00000000000000000000000000000000000CA @@ -2158,7 +2158,7 @@ :1086C00000000000000000000000000000000000AA :1086D000000000000000000000000000000000009A :1086E000000000000000000000000000000000008A -:1086F000000000000000000000000000000000007A +:1086F0000000000000020000000000000000000078 :108700000000000000000000000000000000000069 :108710000000000000000000000000000000000059 :108720000000000000000000000000000000000049 @@ -2176,14 +2176,14 @@ :1087E0000000000000000000000000000000000089 :1087F0000000000000000000000000000000000079 :108800000000000000000000000000000000000068 -:108810000000000000000000000000000000200038 +:108810000000000000002000000020000000000018 :108820000000000000000000000000000000000048 -:108830000000000000000000000000000000200018 +:1088300000000000000020000000200000000000F8 :108840000000000000000000000000000000000028 -:108850000000000000000000000000000000000018 +:1088500000000000000000002000000000000000F8 :108860000000000000000000000000000000000008 :1088700000000000000000000000000000000000F8 -:1088800000000000000000000000000000000000E8 +:1088800000000000000000000000000000004000A8 :1088900000000000000000000000000000000000D8 :1088A00000000000000000000000000000000000C8 :1088B00000000000000000000000000000000000B8 @@ -2197,7 +2197,7 @@ :108930000000000000000000000000000000000037 :108940000000000000000000000000000000000027 :108950000000000000000000000000000000000017 -:1089600000000000000000000000000000100000F7 +:1089600000000000001000000000000000100000E7 :1089700000000000000000000000000000000200F5 :1089800000000000000000000000000000000000E7 :1089900000000000000000000000000000000000D7 @@ -2215,22 +2215,22 @@ :108A50000000000000000000000000000000000016 :108A60000000000000000000000000000000000006 :108A700000000000000000000000000000000000F6 -:108A800000000000000000000000000000000000E6 +:108A800000004000000000000000000000000000A6 :108A900000000000000000000000000000000000D6 :108AA00000000000000000000000000000000000C6 :108AB00000000000000000000000000000000000B6 :108AC00000000000000000000000000000000000A6 :108AD0000000000000000000000000000000000096 :108AE0000000000000000000000000000000000086 -:108AF0000000000000000000000000000000000076 -:108B00000000030000000000000000000000000062 +:108AF0000000000000000000000041000000000035 +:108B0000000008000000000000000000000000005D :108B10000000000000000000000000000000000055 :108B20000000000000000000000000000000000045 :108B30000000000000000000000000000000000035 :108B40000000000000000000000000000000000025 :108B50000000000000000000000000000000000015 :108B60000000000000000000000000000000000005 -:108B700000000000A0000000000000000000000055 +:108B700000000000000000000000000000000000F5 :108B800000000000000000000000000000000000E5 :108B900000000000000000000000000000000000D5 :108BA00000000000000000000000000000000000C5 @@ -2245,8 +2245,8 @@ :108C30000000000000000000000000000000000034 :108C40000000000000000000000000000000000024 :108C50000000000000000000000000000000000014 -:108C60000000000000000000000000000000000004 -:108C700000000000000000000000000000000000F4 +:108C600000000000000000000000000008000000FC +:108C70000000C00000000000000000000000000034 :108C800000000000000000000000000000000000E4 :108C900000000000000000000000000000000000D4 :108CA00000000000000000000000000000000000C4 @@ -2255,15 +2255,15 @@ :108CD0000000000000000000000000000000000094 :108CE0000000000000000000000000000000000084 :108CF0000000000000000000000000000000000074 -:108D000000000000000000880000210000000000BA -:108D100000900000000000000000000000000000C3 +:108D0000000000000000000000000900000000005A +:108D10000000000000000000000000000000000053 :108D20000000000000000000000000000000000043 :108D30000000000000000000000000000000000033 :108D40000000000000000000000000000000000023 :108D50000000000000000000000000000000000013 :108D60000000000000000000000000000000000003 -:108D700000000000080000000000000000000000EB -:108D800000000000400000000000000000000000A3 +:108D700000000000000000000000000000000000F3 +:108D800000000000000000000000000000000000E3 :108D900000000000000000000000000000000000D3 :108DA00000000000000000000000000000000000C3 :108DB00000000000000000000000000000000000B3 @@ -2419,12 +2419,12 @@ :109710000000000000000000000000000000000049 :109720000000000000000000000000000000000039 :109730000000000000000000000000000000000029 -:1097400000000000000000000000000020000000F9 -:1097500000002000000000000000000000000000E9 -:1097600000000000000000000000000020000000D9 -:1097700000002000000000000000000000020000C7 -:1097800000000000000000000000000000002000B9 -:1097900000000000200000000000000000000000A9 +:1097400000000000200020000000000000000000D9 +:109750000000000000000000000000000000000009 +:1097600000000000200020000000000000000000B9 +:1097700000000000000000000000000000020000E7 +:109780000000000000002000200000000000000099 +:1097900000000000000000000000000000000000C9 :1097A00000000000000000000000000000000000B9 :1097B00000000000000000000000000000000000A9 :1097C0000000000000000000000000000000000099 @@ -2435,11 +2435,11 @@ :109810000000000000000000000000000000000048 :109820000000000000000000000000000000000038 :109830000000000000000000000000000000000028 -:109840000000000000000010000000000000000008 +:109840000000000000000000000000000000000018 :109850000000000000000000000000000000000008 -:1098600000000000000000100000000000000000E8 +:1098600000000000000000000000000000000000F8 :1098700000000000000000000000000000000000E8 -:1098800000000000000000000010000000000000C8 +:1098800000000000000000000000000000000000D8 :1098900000000000000000000000000000000000C8 :1098A00000000000000000000000000000000000B8 :1098B0000000100000000000000220000000000076 @@ -2458,7 +2458,7 @@ :1099800000000000000000000000000000000000D7 :1099900000000000000000000000000000000000C7 :1099A00000000000000000000000000000000000B7 -:1099B0000000000000000000400000000400000063 +:1099B0000000000000004000000000000000000067 :1099C0000000000000000000000000000000000097 :1099D0000000000000000000000000000000000087 :1099E0000000000000000000000000000000000077 @@ -2473,7 +2473,7 @@ :109A700000000000000000000000000000000000E6 :109A800000000000000000000000000000000000D6 :109A900000000000000000000000000000000000C6 -:109AA000000000000000C0000000000000000000F6 +:109AA00000000000000000000000000000000000B6 :109AB00000000000000000000000000000000000A6 :109AC0000000000000000000000000000000000096 :109AD0000000000000000000000000000000000086 @@ -2489,8 +2489,8 @@ :109B700000000000000000000000000000000000E5 :109B800000000000000000000000000000000000D5 :109B900000000000000000000000000000000000C5 -:109BA00000000000080000000000000000000000AD -:109BB0000000000000000000000082000000000023 +:109BA00000000000000000000000000000000000B5 +:109BB0000000000000000000000000000000A00005 :109BC0000000000000000000000000000000000095 :109BD0000000000000000000000000000000000085 :109BE0000000000000000000000000000000000075 @@ -2499,15 +2499,15 @@ :109C10000000000000000000000000000000000044 :109C20000000000000000000000000000000000034 :109C30000000000000000000000000000000000024 -:109C40000000000000040000000000000900000007 +:109C40000000000004000000000000000000000010 :109C50000000000000000000000000000000000004 :109C600000000000000000000000000000000000F4 :109C700000000000000000000000000000000000E4 :109C800000000000000000000000000000000000D4 :109C900000000000000000000000000000000000C4 :109CA00000000000000000000000000000000000B4 -:109CB00000000000000000000000000000000000A4 -:109CC0000000080000000000080000000000000084 +:109CB0000000000000000000000008000800000094 +:109CC0000000000000000000000000000000000094 :109CD0000000000000000000000000000000000084 :109CE0000000000000000000000000000000000074 :109CF0000000000000000000000000000000000064 @@ -2523,7 +2523,7 @@ :109D900000000000000000000000000000000000C3 :109DA00000000000000000000000000000000000B3 :109DB00000000000000000000000000000000000A3 -:109DC0000000000000000000000000000000000093 +:109DC000000000000000000004000000000000008F :109DD0000000000000000000000000000000000083 :109DE0000000000000000000000000000000000073 :109DF0000000000000000000000000000000000063 @@ -2531,8 +2531,8 @@ :109E10000000000000000000000000000000000042 :109E20000000000000000000000000000000000032 :109E30000000000000000000000000000000000022 -:109E40000000000000000000000000000000000012 -:109E500000000000000005000000000000000000FD +:109E4000000000000000000008008000000000008A +:109E500000000000000003000000000000000000FF :109E600000000000000000000000000000000000F2 :109E700000000000000000000000000000000000E2 :109E800000000000000000000000000000000000D2 @@ -2540,7 +2540,7 @@ :109EA00000000000000000000000000000000000B2 :109EB00000000000000000000000000000000000A2 :109EC0000000000000000000000000000000000092 -:109ED00000208000000000000000000000000000E2 +:109ED000000300000000000000000000000000007F :109EE0000000000000000000000000000000000072 :109EF0000000000000000000000000000000000062 :109F00000000000000000000000000000000000051 @@ -2548,14 +2548,14 @@ :109F20000000000000000000000000000000000031 :109F30000000000000000000000000000000000021 :109F40000000000000000000000000000000000011 -:109F500000000000040000000000000000000000FD +:109F500000000001200000000000000000000000E0 :109F600000000000000000000000000000000000F1 :109F700000000000000000000000000000000000E1 :109F800000000000000000000000000000000000D1 :109F900000000000000000000000000000000000C1 :109FA00000000000000000000000000000000000B1 :109FB00000000000000000000000000000000000A1 -:109FC000000000000000000000000000000000028F +:109FC0000000000000000000000000000000000091 :109FD0000000000000000000000000000000000081 :109FE0000000000000000000000000000000000071 :109FF0000000000000000000000000000000000061 @@ -2564,7 +2564,7 @@ :10A020000000000000000000000000000000000030 :10A030000000000000000000000000000000000020 :10A040000000000000000000000000000000000010 -:10A050000080000000000000000000000000000080 +:10A050000000000000000000000000000000000000 :10A0600000000000000000000000000000000000F0 :10A0700000000000000000000000000000000000E0 :10A0800000000000000000000000000000000000D0 @@ -2572,7 +2572,7 @@ :10A0A00000000000000000000000000000000000B0 :10A0B00000000000000000000000000000000000A0 :10A0C0000000000000000000000000000000000090 -:10A0D0000000000800000000000000000000000078 +:10A0D0000000000000000000000000000000000080 :10A0E0000000000000000000000000000000000070 :10A0F0000000000000000000000000000000000060 :10A10000000000000000000000000000000000004F @@ -2588,7 +2588,7 @@ :10A1A00000000000000000000000000000000000AF :10A1B000000000000000000000000000000000009F :10A1C000000000000000000000000000000000008F -:10A1D000000000000000810000000000E007000017 +:10A1D00000000000000088000000000000070000F0 :10A1E00000000000E000000000000000000000008F :10A1F000000000000000000000000000000000005F :10A20000000000000000000000000000000000004E @@ -2604,7 +2604,7 @@ :10A2A00000000000000000000000000000000000AE :10A2B000000000000000000000000000000000009E :10A2C000000000000000000000000000000000008E -:10A2D0000000000000000000000042100400000127 +:10A2D0000000000000000000000042000400000137 :10A2E000000000100000000000000000000000005E :10A2F000000000000000000000000000000000005E :10A30000000000000000000000000000000000004D @@ -2612,7 +2612,7 @@ :10A32000000000000000000000000000000000002D :10A33000000000000000000000000000000000001D :10A34000000000000000000000000000000000000D -:10A3500000000000000000000000000000002008D5 +:10A3500000000000000000000000000000000000FD :10A360001002000000004008000000000000000093 :10A3700000000000000000000000000000000000DD :10A3800000000000000000000000000000000000CD @@ -2637,7 +2637,7 @@ :10A4B000000000000000000000000000000000009C :10A4C000000000000000000000000000000000008C :10A4D000000000000000000000000000000000007C -:10A4E00000000000081810000000000001018000BA +:10A4E00000000000080810000000000001018000CA :10A4F000000000000000000000000000000000005C :10A50000000000000000000000000000000000004B :10A51000000000000000000000000000000000003B @@ -2645,7 +2645,7 @@ :10A53000000000000000000000000000000000001B :10A54000000000000000000000000000000000000B :10A5500000000000000000000000000000000000FB -:10A56000000000000000000000008C00000000045B +:10A560000000000000000000000080000000000467 :10A5700000000000000000000000000000000000DB :10A5800000000000000000000000000000000000CB :10A5900000000000000000000000000000000000BB @@ -2653,7 +2653,7 @@ :10A5B000000000000000000000000000000000009B :10A5C000000000000000000000000000000000008B :10A5D000000000000000000000000000000000007B -:10A5E00000000000000000000000000001000080EA +:10A5E00000000000000000020000000001000080E8 :10A5F000000000004000000000000000000000001B :10A60000000000000000000000000000000000004A :10A61000000000000000000000000000000000003A @@ -2671,11 +2671,11 @@ :10A6D000000000000000000000000000000000007A :10A6E000000000000000000000000000000000006A :10A6F000000000000000000000000000000000005A -:10A700000000000000000000000000000000000049 -:10A7100000002000200000000000000000000000F9 -:10A720000000000000000000000000000000000029 -:10A7300000002000200000000000000200000000D7 -:10A740000000000000000000000000000000000009 +:10A700000000000000000000200000000000000029 +:10A7100000002000200020002000000000000000B9 +:10A720000000000000000000200000000000000009 +:10A730000000200020002000200000020000000097 +:10A7400000000000000000000000200000000000E9 :10A7500000000000000000000000000000000000F9 :10A7600000000000000000000000000000000000E9 :10A7700000000000000000000000000000000000D9 @@ -2691,7 +2691,7 @@ :10A810000000000000000000000000000000000038 :10A820000000000000000000000000000000000028 :10A830000000000000000000000000000000000018 -:10A840000000000000000000000000000000000008 +:10A8400000000000000000000000000000000010F8 :10A8500000000000000000100000000000000000E8 :10A8600000000000000000000000000000000000E8 :10A8700000000000000000000000000000000000D8 @@ -2710,7 +2710,7 @@ :10A940000000000000000000000000000000000007 :10A9500000000000000000000000000000000000F7 :10A9600000000000000000000000000000000000E7 -:10A9700000000000000000000000000000000000D7 +:10A97000000000000000000000000000880000004F :10A9800000000000000000000000000000000000C7 :10A9900000000000000000000000000000000000B7 :10A9A00000000000000000000000000000000000A7 @@ -2718,14 +2718,14 @@ :10A9C0000000000000000000000000000000000087 :10A9D0000000000000000000000000000000000077 :10A9E0000000000000000000000000000000000067 -:10A9F0000000000041000000000000000000000016 +:10A9F0000000000000000300000000000000000054 :10AA00000000000000000000000000000000000046 :10AA10000000000000000000000000000000000036 :10AA20000000000000000000000000000000000026 :10AA30000000000000000000000000000000000016 :10AA40000000000000000000000000000000000006 :10AA500000000000000000000000000000000000F6 -:10AA600008000000000000000000000000000000DE +:10AA60000800000000000800C00000000000000016 :10AA700000000000000000000000000000000000D6 :10AA800000000000000000000000000000000000C6 :10AA900000000000000000000000000000000000B6 @@ -2733,17 +2733,17 @@ :10AAB0000000000000000000000000000000000096 :10AAC0000000000000000000000000000000000086 :10AAD0000000000000000000000000000000000076 -:10AAE0000000000000000000000000000000000066 -:10AAF0000000000000000000000000000000000056 +:10AAE000000000000000080000000000000000005E +:10AAF000000000000000000008000000000000004E :10AB00000000000000000000000000000000000045 :10AB10000000000000000000000000000000000035 :10AB20000000000000000000000000000000000025 :10AB30000000000000000000000000000000000015 :10AB40000000000000000000000000000000000005 :10AB500000000000000000000000000000000000F5 -:10AB6000000000000000080000000000C00000001D -:10AB70000000000082000000000000000000000053 -:10AB800000000000000000000011000000000000B4 +:10AB600000000000000008000000000000000000DD +:10AB700000000000000000000000000000000000D5 +:10AB800000000000000000000000000000000000C5 :10AB900000000000000000000000000000000000B5 :10ABA00000000000000000000000000000000000A5 :10ABB0000000000000000000000000000000000095 @@ -2751,14 +2751,14 @@ :10ABD0000000000000000000000000000000000075 :10ABE0000000000000000000000000000000000065 :10ABF0000000000000000000000000000000000055 -:10AC0000000000000000000005000000000000003F +:10AC00000000000000000000000000000000000044 :10AC10000000000000000000000000000000000034 :10AC20000000000000000000000000000000000024 :10AC30000000000000000000000000000000000014 :10AC40000000000000000000000000000000000004 :10AC500000000000000000000000000000000000F4 :10AC600000000000000000000000000000000000E4 -:10AC700000000000000000000000000000000000D4 +:10AC700000000000000000008200000000008200D0 :10AC800000000000000000000000000000000000C4 :10AC900000000000000000000000000000000000B4 :10ACA00000000000000000000000000000000000A4 @@ -2783,7 +2783,7 @@ :10ADD0000000000000000000000000000000000073 :10ADE0000000000000000000000000000000000063 :10ADF0000000000000000000000000000000000053 -:10AE00000000000000000000000000000000000042 +:10AE00000000000000000000000000000000200022 :10AE10000000000000000000000000000000000032 :10AE20000000000000000000000000000000000022 :10AE30000000000000000000000000000000000012 @@ -2791,16 +2791,16 @@ :10AE500000000000000000000000000000000000F2 :10AE600000000000000000000000000000000000E2 :10AE700000000000000000000000000000000000D2 -:10AE800000000000000000000000000000000003BF -:10AE90008000000000000010000000000000000022 +:10AE8000000000000000000080000000000000053D +:10AE900000000000000000100000000000000000A2 :10AEA00000000000000000000000000000000000A2 :10AEB0000000000000000000000000000000000092 :10AEC0000000000000000000000000000000000082 :10AED0000000000000000000000000000000000072 :10AEE0000000000000000000000000000000000062 :10AEF0000000000000000000000000000000000052 -:10AF000000000000000000000000900000000000B1 -:10AF10000000100000000000000000000000000021 +:10AF0000000000000000000000000400000000003D +:10AF100000009000000000000001000000000000A0 :10AF20000000000000000000000000000000000021 :10AF30000000000000000000000000000000000011 :10AF40000000000000000000000000000000000001 @@ -2824,7 +2824,7 @@ :10B0600000000000000000000000000000000000E0 :10B0700000000000000000000000000000000000D0 :10B0800000000000000000000000000000000000C0 -:10B090000000000000000000002000000000000090 +:10B0900000000000000000000000000000000000B0 :10B0A00000000000000000000000000000000000A0 :10B0B0000000000000000000000000000000000090 :10B0C0000000000000000000000000000000000080 @@ -2840,7 +2840,7 @@ :10B1600000000000000000000000000000000000DF :10B1700000000000000000000000000000000000CF :10B1800000000000000000000000000000000000BF -:10B19000000000000000000000000000810000002E +:10B190000000000000000000000000008800000027 :10B1A0000000000700000000000000000000000098 :10B1B000000000000000000000000000000000008F :10B1C000000000000000000000000000000000007F @@ -2914,12 +2914,12 @@ :10B60000000000000000000000000000000000003A :10B61000000000000000000000000000000000002A :10B62000000000000000000000000000000000001A -:10B6300000000000000000002000000000000000EA -:10B64000000020002000000000002000000000009A -:10B6500000000000000000002000000000000000CA -:10B66000000020002000000000002000000000007A -:10B6700000000000000000000000200000000000AA -:10B68000000000002000200000000000200000005A +:10B63000000000000000000000000000000000000A +:10B6400000000000000000000000000000000000FA +:10B6500000000000000000000000000000000000EA +:10B6600000000000000000000000000000000000DA +:10B6700000000000000000000000000000000000CA +:10B6800000000000000000000000000000000000BA :10B6900000000000000000000000000000000000AA :10B6A000000000000000000000000000000000009A :10B6B000000000000000000000000000000000008A @@ -2930,7 +2930,7 @@ :10B700000000000000000000000000000000000039 :10B710000000000000000000000000000000000029 :10B720000000000000000000000000000000000019 -:10B730000000000000A00000000000002000000049 +:10B730000000000000000000000000000000000009 :10B7400000000000000000000000000000000000F9 :10B7500000000000000000000000000000000000E9 :10B7600000000000000000000000000000000000D9 @@ -2939,22 +2939,22 @@ :10B7900000000000000000000000000000000000A9 :10B7A0000000001000000000000000000000000089 :10B7B0000000000000000000000000000000000089 -:10B7C00000000084000000000000000000000000F5 -:10B7D0000000001000000000000000000000000059 +:10B7C0000000000000000000000000000000000079 +:10B7D0000000000000000000000000000000000069 :10B7E0000000000000000000000000000000000059 -:10B7F0000000001000000000000000000000000039 +:10B7F0000000000000000000000000000000000049 :10B800000000000000000000000000000000000038 :10B810000000000000000000000000000000000028 :10B820000000000000000000000000000000000018 :10B830000000000000000000000000000000000008 :10B8400000000000000000000000000000000000F8 -:10B8500000000000000800000000000000000000E0 +:10B8500000000000000000000000000000000000E8 :10B8600000000000000000000000000000000000D8 :10B8700000000000000000000000000000000000C8 :10B8800000000000000000000000000000000000B8 :10B8900000000000000000000000000000000000A8 :10B8A0000000000000000000000000000000000098 -:10B8B00000008200000010000000000000000000F6 +:10B8B0004000000000000000000000000000000048 :10B8C0000000000000000000000000000000000078 :10B8D0000000000000000000000000000000000068 :10B8E0000000000000000000000000000000000058 @@ -2962,17 +2962,17 @@ :10B900000000000000000000000000000000000037 :10B910000000000000000000000000000000000027 :10B920000000000000000000000000000000000017 -:10B9300000000000030000000000000000002100E3 +:10B9300000004000000000000000000000000000C7 :10B9400000000000000000000000000000000000F7 :10B9500000000000000000000000000000000000E7 :10B9600000000000000000000000000000000000D7 :10B9700000000000000000000000000000000000C7 :10B9800000000000000000000000000000000000B7 :10B9900000000000000000000000000000000000A7 -:10B9A000000000000000080000000000000000008F -:10B9B000080000000000000000000000000000007F +:10B9A0000000000000000000000000000000000097 +:10B9B000A0000000000000000000004000000000A7 :10B9C0000000000000000000000000000000000077 -:10B9D0000000000000000000000000400000000027 +:10B9D0000000000000000000000000000000000067 :10B9E0000000000000000000000000000000000057 :10B9F0000000000000000000000000000000000047 :10BA00000000000000000000000000000000000036 @@ -2995,15 +2995,15 @@ :10BB10000000000000000000000000000000000025 :10BB20000000000000000000000000000000000015 :10BB30000000000000000000000000000000000005 -:10BB400021000000000003000000000000000000D1 +:10BB400000000000000003002100000000000000D1 :10BB500000000000000000000000000000000000E5 :10BB600000000000000000000000000000000000D5 :10BB700000000000000000000000000000000000C5 :10BB800000000000000000000000000000000000B5 :10BB900000000000000000000000000000000000A5 :10BBA0000000000000000000000000000000000095 -:10BBB000000000000000000000000800000000007D -:10BBC000080000000000000000000000000000006D +:10BBB0004000000000000000000000000000000045 +:10BBC0000000400000000000000000000000000035 :10BBD0000000000000000000000000000000000065 :10BBE0000000000000000000000000000000000055 :10BBF0000000000000000000000000000000000045 @@ -3011,7 +3011,7 @@ :10BC10000000000000000000000000000000000024 :10BC20000000000000000000000000000000000014 :10BC30000000000000000000000000000000000004 -:10BC400003000000000000000000000000000000F1 +:10BC400000000000000000000000000000000000F4 :10BC500000000000000000000000000000000000E4 :10BC600000000000000000000000000000000000D4 :10BC700000000000000000000000000000000000C4 @@ -3186,12 +3186,12 @@ :10C700000000000000000000000000000000000029 :10C710000000000000000000000000000000000019 :10C720000000000000000000000000000000000009 -:10C7300000000000000000000000000000000000F9 +:10C7300000000000000000100000000000000000E9 :10C7400008000000000000000000000000000000E1 :10C7500000000000000000000000000000000000D9 :10C7600000000000000000000000000000000000C9 :10C7700000000200000000000000000000000000B7 -:10C780000000000000000000008800000000000021 +:10C7800000000000000000000000000000000000A9 :10C790000000000000000000000000000000000099 :10C7A0000000000000000000000000000000000089 :10C7B0000000000000000000000000000000000079 @@ -3230,7 +3230,7 @@ :10C9C0000000000000000000000000000000000067 :10C9D0000000000000000000000000000000000057 :10C9E0000000000000000000000000000000000047 -:10C9F0000000000011000000000000000000000026 +:10C9F0000000000000000000000000000000000037 :10CA00000000000000000000000000000000000026 :10CA10000000000000000000000000000000000016 :10CA20000000000000000000000000000000000006 @@ -3262,7 +3262,7 @@ :10CBC0000000000000000000000000000000000065 :10CBD0000000000000000000000000000000000055 :10CBE0000000000000000000000000000000000045 -:10CBF00000000000000000000000000000880000AD +:10CBF0000000000000000000000000000000000035 :10CC00000000000000000000000000000000000024 :10CC10000000000000000000000000000000000014 :10CC20000000000000000000000000000000000004 @@ -3410,11 +3410,11 @@ :10D50000000000000000000000000000000000001B :10D51000000000000000000000000000000000000B :10D5200000000000000000000000000000000000FB -:10D5300000000000000020000000000000000000CB +:10D5300000000000000000000000000000000000EB :10D5400000000000000000000000000000000000DB -:10D5500000000000000020000000000000000000AB +:10D5500000000000000000000000000000000000CB :10D5600000000000000000000000000000000000BB -:10D570000002000000000000200000000000000089 +:10D5700000020000000000000000000000000000A9 :10D58000000000000000000000000000000000009B :10D59000000000000000000000000000000000008B :10D5A000000000000000000000000000000000007B @@ -3424,8 +3424,8 @@ :10D5E000000000000000000000000000000000003B :10D5F000000000000000000000000000000000002B :10D60000000000000000000000000000000000001A -:10D6100000000000000000000000200000000000EA -:10D62000000000000000000000C00000000000003A +:10D61000000000000000000000000000000000000A +:10D6200000000000000000C000000000000000003A :10D6300000000000000000000000000000000000EA :10D6400000000000000000000000000000000000DA :10D6500000000000000000000000000000000000CA @@ -3433,23 +3433,23 @@ :10D6700000000000000000000000000000000000AA :10D680000000000000000000000000000800000092 :10D69000000000000000000000000000000000008A -:10D6A0000000000000000200000000000000000078 -:10D6B000000000000000400000000000000000002A -:10D6C0000000000000000000000000000000000852 +:10D6A0000000000000000200000000000000020076 +:10D6B000000000000000000000000000000000006A +:10D6C000000000000000000000000000000000005A :10D6D000000000000000000000000000000000004A -:10D6E0000000000000000000000000000000000832 +:10D6E000000000000000000000000000000000003A :10D6F000000000000000000000000000000000002A :10D700000000000000000000000000000000000019 -:10D710000008000000000000000000000000000001 +:10D710000000000000000000000000000000000009 :10D7200000000000000000000000000000000000F9 -:10D7300000400000000000000000000000000000A9 +:10D7300000000000000000000000000000000000E9 :10D7400000000000000000000000000000000000D9 :10D7500000000000000000000000000000000000C9 :10D7600000000000000000000000000000000000B9 :10D7700000000000000000000000000000000000A9 :10D780000000000000000000000000000000000099 :10D790000000000000000000000000000000000089 -:10D7A0000000000000000000000000000000000079 +:10D7A0000000000000000000000040000000000039 :10D7B0000000000000000000000000000000000069 :10D7C0000000000000000000000000000000000059 :10D7D0000000000000000000000000000000000049 @@ -3466,7 +3466,7 @@ :10D880000000000000000000000000000000000098 :10D890000000000000000000000000000000000088 :10D8A0000000000000000000000000000000000078 -:10D8B0000000000000000002000000000000000066 +:10D8B0000000000000000000000000000000000068 :10D8C0000000000000000000000000000000000058 :10D8D0000000000000000000000000000000000048 :10D8E0000000000000000000000000000000000038 @@ -3481,7 +3481,7 @@ :10D9700000000000000000000000000000000000A7 :10D980000000000000000000000000000000000097 :10D990000000000000000000000000000000000087 -:10D9A0000000000000000000080000000000C000AF +:10D9A0000000000000000000000000000000000077 :10D9B0000000000000000000000000000000000067 :10D9C0000000000000000000000000000000000057 :10D9D0000000000000000000000000000000000047 @@ -3522,7 +3522,7 @@ :10DC00000000000000000000000000000000000014 :10DC10000000000000000000000000000000000004 :10DC200000000000000000000000000000000000F4 -:10DC300000000000000000000000000000000000E4 +:10DC300000000000000000000000000008000000DC :10DC400000000000000000000000000000000000D4 :10DC500000000000000000000000000000000000C4 :10DC600000000000000000000000000000000000B4 @@ -3531,7 +3531,7 @@ :10DC90000000000000000000000000000000000084 :10DCA0000000000000000000000000000000000074 :10DCB0000000000000000000000000000000000064 -:10DCC00000000040002000000000000000000000F4 +:10DCC0000000000000040000000000000000000050 :10DCD0000000000000000000000000000000000044 :10DCE0000000000000000000000000000000000034 :10DCF0000000000000000000000000000000000024 @@ -3539,7 +3539,7 @@ :10DD10000000000000000000000000000000000003 :10DD200000000000000000000000000000000000F3 :10DD300000000000000000000000000000000000E3 -:10DD400000000000000100000000000000000000D2 +:10DD400000000000000000010000000000000000D2 :10DD500000000000000000000000000000000000C3 :10DD600000000000000000000000000000000000B3 :10DD700000000000000000000000000000000000A3 @@ -3547,7 +3547,7 @@ :10DD90000000000000000000000000000000000083 :10DDA0000000000000000000000000000000000073 :10DDB0000000000000000000000000000000000063 -:10DDC0000000000200000000000000000000000051 +:10DDC00000000040000020000000000000000000F3 :10DDD0000000000000000000000000000000000043 :10DDE0000000000000000000000000000000000033 :10DDF0000000000000000000000000000000000023 @@ -3579,7 +3579,7 @@ :10DF90000000000000000000000000000000000081 :10DFA0000000000000000000000000000000000071 :10DFB0000000000000000000000000000000000061 -:10DFC0000000000000000000000000110000000040 +:10DFC0000000000000000000000000410000000010 :10DFD000E000000000000000000000000000000061 :10DFE0000000000000000000000000000000000031 :10DFF0000000000000000000000000000000000021 @@ -3661,13 +3661,13 @@ :10E4B000000000000000000000000000000000005C :10E4C000000000000000000000000000000000004C :10E4D000000000000000000000000000000000003C -:10E4E000000000000000000000000000000020000C -:10E4F00000000000000020000000200000000000DC -:10E5000000000000000000000000000000002000EB -:10E5100000000000000020000000200000000000BB -:10E5200000000000000000000000000000000000EB -:10E53000200000000000000020000000200000007B -:10E5400000000000000000000000000000000000CB +:10E4E000000000000000000000000000000000002C +:10E4F00020000000000000000000200000000000DC +:10E5000000000000000000002000000000000000EB +:10E5100020000000000000000000200000000000BB +:10E5200000000000000000002000000000000000CB +:10E53000000020000000000000000000200000009B +:10E5400000000000000000000000200000000000AB :10E5500000000000000000000000000000000000BB :10E5600000000000000000000000000000000000AB :10E57000000000000000000000000000000000009B @@ -3681,7 +3681,7 @@ :10E5F000000000000000000000000000000000001B :10E60000000000000000000000000000000000000A :10E6100000000000000000000000000000000000FA -:10E6200000000000000000000000000000000000EA +:10E6200008000000000000000000000000000000E2 :10E6300000000000000000000000000000000000DA :10E6400000000000000000000000000000000000CA :10E6500000000000000000000000000000000000BA @@ -3709,7 +3709,7 @@ :10E7B0000000000000000000000000000000000059 :10E7C0000000000000000000000000000000000049 :10E7D0000000000000000000000000000000000039 -:10E7E00000000000000000004100000000000000E8 +:10E7E0000000000000000800000000000000000021 :10E7F0000000000000000000000000000000000019 :10E800000000000000000000000000000000000008 :10E8100000000000000000000000000000000000F8 @@ -3718,23 +3718,23 @@ :10E8400000000000000000000000000000000000C8 :10E8500000000000000000000000000000000000B8 :10E8600000000000000000000000000000000000A8 -:10E870000000000000000000000000000082100006 +:10E870000000000000000000000000000000000098 :10E880000000000000000000000000000000000088 -:10E890000000000000000000000000001000000068 +:10E890000000000000000000000000000000000078 :10E8A0000000000000000000000000000000000068 :10E8B0000000000000000000000000000000000058 -:10E8C0001000000000000000000000000000000038 +:10E8C0000000000000000000000000000000000048 :10E8D0000000000000000000000000000000000038 :10E8E0000000000000000000000000000000000028 :10E8F0000000000000000000000000000000000018 -:10E9000000000000000000000000000000400000C7 +:10E900000000000000000000000000000000000007 :10E9100000000000000000000000000000000000F7 :10E9200000000000000000000000000000000000E7 :10E9300000000000000000000000000000000000D7 :10E9400000000000000000000000000000000000C7 :10E9500000000000000000000000000000000000B7 -:10E96000080000000000000008000000080000008F -:10E970000000C000000000000000000000000000D7 +:10E9600000000000000000000000A0000000000007 +:10E97000C0000000000000000000080000000000CF :10E980000000000000000000000000000000000087 :10E990000000000000000000000000000000000077 :10E9A0000000000000000000000000000000000067 @@ -3749,8 +3749,8 @@ :10EA300000000000000000000000000000000000D6 :10EA400000000000000000000000000000000000C6 :10EA500000000000000000000000000000000000B6 -:10EA600000000000000000000000000000000000A6 -:10EA700000000000000000000000C00000000000D6 +:10EA6000000000000000080000000000000000009E +:10EA70000000000000000000000000000000000096 :10EA80000000000000000000000000000000000086 :10EA90000000000000000000000000000000000076 :10EAA0000000000000000000000000000000000066 @@ -3783,7 +3783,7 @@ :10EC500000000000000000000000000000000000B4 :10EC600000000000000000000000000000000000A4 :10EC70000000000000000000000000000000000094 -:10EC800000000000800000000000000500000000FF +:10EC80000000000080000000000000030000000001 :10EC90000000000000000000000000000000000074 :10ECA0000000000000000000000000000000000064 :10ECB0000000000000000000000000000000000054 @@ -3791,7 +3791,7 @@ :10ECD0000000000000000000000000000000000034 :10ECE0000000000000000000000000000000000024 :10ECF0000000000000000000000000000000000014 -:10ED00000000000000000200000000000000000001 +:10ED000000000000000008000000000000000000FB :10ED100000000000000000000000000000000000F3 :10ED200000000000000000000000000000000000E3 :10ED300000000000000000000000000000000000D3 @@ -3905,13 +3905,13 @@ :10F3F000000000000000000000000000000000000D :10F4000000000000000000000000000000000000FC :10F4100000000000000000000000000000000000EC -:10F42000000000000000000000002000200020007C -:10F43000200020008400C000200020000000000008 -:10F44000200000000000000000002000C0000000BC -:10F45000000020000000200020002000000000002C -:10F46000200000000000000000000002000000007A -:10F47000000000002000000000002000200000002C -:10F48000000000000000000000000000000000007C +:10F4200000000000000000000000000000000000DC +:10F4300084000000000088000000000000000000C0 +:10F44000000000002000000020000000000000007C +:10F45000200000000000200000000000000000006C +:10F46000000000002000000020000002000000005A +:10F47000000020000000000020000000000000004C +:10F48000000000000000000000002000000000005C :10F49000000000000000000000000000000000006C :10F4A000000000000000000000000000000000005C :10F4B000000000000000000000000000000000004C @@ -3932,20 +3932,20 @@ :10F5A000000000000000000000000000000000005B :10F5B000000000000000000000000000000000004B :10F5C000000000000000000000000000000000003B -:10F5D00000000000000000000000000000840000A7 -:10F5E0000000000000000082000000000000000099 +:10F5D000000000000000000000000000000000002B +:10F5E000000000000000000000000000000000001B :10F5F000000000000000000000000000000000000B :10F6000000000000000000000000000000000000FA :10F6100000000000000000000000000000000000EA :10F6200000000000000000000000000000000000DA -:10F6300000000000000000000000000000000009C1 -:10F6400000000000000000000008000000000000B2 +:10F6300000000000000000000000000000000000CA +:10F6400000000000000000000000000000000000BA :10F6500000000000000000000000000000000000AA -:10F660000000000000000000000000000000000991 +:10F66000000000000000000000000000000000009A :10F67000000000000000000000000000000000008A :10F68000000000000000000000000000000000007A :10F69000000000000000000000000000000000006A -:10F6A000000000000000000000000000000000005A +:10F6A000000000004000000000000000000000001A :10F6B000000000000000000000000000000000004A :10F6C000000000000000000000000000000000003A :10F6D000000000000000000000000000000000002A @@ -3954,31 +3954,31 @@ :10F7000000000000000000000000000000000000F9 :10F7100000000000000000000000000000000000E9 :10F7200000000000000000000000000000000000D9 -:10F730000000000000000000000000000000C00009 -:10F740000000000000000000000000000000820037 -:10F750000000000000000000000000000000820027 -:10F760000000000000000000000000000000820017 +:10F7300000000000000000000000000000000000C9 +:10F7400000000000000000000000000000000000B9 +:10F7500000000000000000000000000000000000A9 +:10F760000000000000000000000000000000000099 :10F770000000000000000000000000000000000089 :10F780000000000000000000000000000000000079 -:10F790000000000000000000000000000000000069 +:10F790000000000000000000000000000000080061 :10F7A0000000000000000000000000000000000059 -:10F7B0000004000000000000000005000800080030 -:10F7C00010004000000000000000000000000000E9 -:10F7D0000000000000000000000005000800080014 -:10F7E00040000800080000000000000000000000C9 -:10F7F00000000000000000000000000008001000F1 -:10F80000100010004000080041000000000000004F +:10F7B0000000000000000800000000000000000041 +:10F7C0000000000000000000000000000000000039 +:10F7D0000000000000000000000000000000000029 +:10F7E0000000000000000000000000000000000019 +:10F7F0000000000000000000000000000000000009 +:10F8000000000000000000000000000000000000F8 :10F8100000000000000000000000000000000000E8 :10F8200000000000000000000000000000000000D8 -:10F83000000000000000000000000000A000000028 +:10F8300000000000000000000000000000000000C8 :10F8400000000000000000000000000000000000B8 :10F8500000000000000000000000000000000000A8 :10F860000000000000000000000000000000000098 -:10F870000000000000000000000000000800000080 +:10F870000000000000000000000000000000000088 :10F880000000000000000000000000000000000078 -:10F890000000000000000000000000000000000068 -:10F8A0000000000008000000000008000000000048 -:10F8B0004000000000000000000000000000000008 +:10F890000000000000000000000000000000A000C8 +:10F8A00000000000C0000000080000004000000050 +:10F8B000A0000000000000000000000000000000A8 :10F8C0000000000000000000000000000000000038 :10F8D0000000000000000000000000000000000028 :10F8E0000000000000000000000000000000000018 @@ -3987,22 +3987,22 @@ :10F9100000000000000000000000000000000000E7 :10F9200000000000000000000000000000000000D7 :10F9300000000000000000000000000000000000C7 -:10F940000040000500210000000000080000000049 +:10F9400000000000000200000000000000000000B5 :10F9500000000000000000000000000000000000A7 :10F960000000000000000000000000000000000097 :10F970000000000000000000000000000000000087 :10F980000000000000000000000000000000000077 -:10F990000000000000000000000000000000000067 -:10F9A0000000000000000000000000000000000057 -:10F9B000080000000000000000040000000000003B -:10F9C00000000000000000004100000000000000F6 -:10F9D00000200000000008000000000000000000FF -:10F9E000000008000000000003000000000000000C -:10F9F00000000000000008000000000000000000FF -:10FA000000000000000000000000030000000000F3 -:10FA100000000000000000000800000000000000DE +:10F99000000000000000000000000800000000005F +:10F9A000000000000000000000000000080000004F +:10F9B00000000000000082000000000000000000C5 +:10F9C0000000000000000000000000000000000037 +:10F9D0000000000000000000000000000000000027 +:10F9E0000000000000000000000000000000000017 +:10F9F0000000000000000000000000000000000007 +:10FA000000000000000000000000000000000000F6 +:10FA100000000000000000000000000000000000E6 :10FA200000000000000000000000000000000000D6 -:10FA300000000000000000000000000000000000C6 +:10FA300000000000000021000000000000000000A5 :10FA400000000000000000000000000000000000B6 :10FA500000000000000000000000000000000000A6 :10FA60000000000000000000000000000000000096 @@ -4010,7 +4010,7 @@ :10FA80000000000000000000000000000000000076 :10FA90000000000000000000000000000000000066 :10FAA0000000000000000000000000000000000056 -:10FAB00000000000000000000000000000009000B6 +:10FAB0000000000000000000000000000000000046 :10FAC0000000000000000000000000000000000036 :10FAD0000000000000000000000000000000000026 :10FAE0000000000000000000000000000000000016 @@ -4018,7 +4018,7 @@ :10FB000000000000000000000000000000000000F5 :10FB100000000000000000000000000000000000E5 :10FB200000000000000000000000000000000000D5 -:10FB300000000000000000000000000000000000C5 +:10FB300000000000000008000000000000000000BD :10FB400000000000000000000000000000000000B5 :10FB500000000000000000000000000000000000A5 :10FB60000000000000000000000000000000000095 @@ -4026,32 +4026,32 @@ :10FB80000000000000000000000000000000000075 :10FB90000000000000000000000000000000000065 :10FBA0000000000000000000000000000000000055 -:10FBB00000000000000000008000000000030003BF -:10FBC00080000000000000030000000000000000B2 +:10FBB0000000000000000000000000000000000342 +:10FBC0000000000000000005000000000000000030 :10FBD0000000000000000000000000000000000025 :10FBE0000000000000000000000000000000000015 :10FBF0000000000000000000000000000000000005 :10FC000000000000000000000000000000000000F4 :10FC100000000000000000000000000000000000E4 :10FC200000000000000000000000000000000000D4 -:10FC30000000000000000000000040000000000084 -:10FC400000000400000000000001000000000000AF +:10FC30000000000000000000000090000000000034 +:10FC400000000200000000000000000000000000B2 :10FC500000000000000000000000000000000000A4 :10FC60000000000000000000000000000000000094 :10FC70000000000000000000000000000000000084 :10FC80000000000000000000000000000000000074 :10FC90000000000000000000000000000000000064 :10FCA0000000000000000000000000000000000054 -:10FCB00000000000000000000000000000900000B4 -:10FCC0000000000000020000000000000000000032 +:10FCB0000000000000000000000000000002000042 +:10FCC0000000000000020000020000000000000030 :10FCD0000000000000000000000000000000000024 :10FCE0000000000000000000000000000000000014 :10FCF0000000000000000000000000000000000004 :10FD000000000000000000000000000000020000F1 :10FD100000000000000000000000000000000000E3 :10FD200000000000000000000000000000000000D3 -:10FD300000000000000000000000000000000000C3 -:10FD40000000000000000080000000000000000033 +:10FD30000000000000000000000000000000008043 +:10FD400000000000000000800000800000000000B3 :10FD500000000000000000000000000000000000A3 :10FD60000000000000000000000000000000000093 :10FD70000000000000000000000000000000000083 @@ -4059,7 +4059,7 @@ :10FD90000000000000000000000000000000000063 :10FDA0000000000000000000000000000000000053 :10FDB0000000000000000000000000000000000043 -:10FDC000000900080080000000040000000000009E +:10FDC000000300000080000000030000008000002D :10FDD0000000000000000000000000000000000023 :10FDE0000000000000000000000000000000000013 :10FDF0000000000000000000000000000000000003 @@ -4067,7 +4067,7 @@ :10FE100000000000000000000000000000000000E2 :10FE200000000000000000000000000000000000D2 :10FE300000000000000000000000000000000000C2 -:10FE4000000000000000008200000001000000200F +:10FE40000000000000000040000000000000004032 :10FE500000000000000000000000000000000000A2 :10FE60000000000000000000000000000000000092 :10FE70000000000000000000000000000000000082 @@ -4075,7 +4075,7 @@ :10FE90000000000000000000000000000000000062 :10FEA0000000000000000000000000000000000052 :10FEB0000000000000000000000000000000000042 -:10FEC00000000000818100000000E0078181000047 +:10FEC00000000000884100000000E00784210000DD :10FED0000000E0070000000000000000000000003B :10FEE0000000000000000000000000000000000012 :10FEF0000000000000000000000000000000000002 @@ -4158,18 +4158,18 @@ :1003B000000000000000000000000000000000003D :1003C000000000000000000000000000000000002D :1003D000000000000000000000000000000000001D -:1003E00000000000000000002000000020002000AD -:1003F000200020002000C0000000000020000000BD -:1004000020000000000000042000880020002000E0 -:1004100088002000200000000000000020000000F4 -:1004200020000000000000000003000000000000A9 -:1004300000000000000000000000000000000000BC -:10044000000020000000000000000000000000008C +:1003E0000000000000000000000000000000840089 +:1003F00000000000000000000000000000000000FD +:1004000000000000000000000000000000002000CC +:1004100000000000000000000000000000000000DC +:1004200000000000000000000000000000000000CC +:10043000200000000000000000000000000000009C +:1004400000000000000000000000000000000000AC :10045000000000000000000000000000000000009C :10046000000000000000000000000000000000008C -:100470000000000000000000000005000000000077 -:10048000000000000000000000010000000000006B -:100490000000000000000000000000000500000057 +:10047000000000000000000000000000000000007C +:10048000000000000000000000000000000000006C +:10049000000000000000000000000000000000005C :1004A000000000000000000000000000000000004C :1004B000000000000000000000000000000000003C :1004C000000000000000000000000000000000002C @@ -4180,72 +4180,72 @@ :1005100000000000000000000000000000000000DB :1005200000000000000000000000000000000000CB :10053000000000000040000000000000000000007B -:10054000000000000000000000000000008000002B +:1005400000000000000000000000000000000000AB :10055000000000000000000000000000000000009B :10056000000000000000004000000000000000004B :10057000000000000000000000000000000000007B -:100580000000000000000000000000000008000063 -:100590000000000000000000000000000008000053 -:1005A0000000000000000000000000000008000043 -:1005B00000000000000000000000000000000084B7 -:1005C0000000000000000000000000000000000823 +:10058000000000000000000000000000000000006B +:10059000000000000000000000000000000000005B +:1005A000000000000000000000000000000000004B +:1005B000000000000000000000000000000000003B +:1005C000000000000000000000000000000000002B :1005D000000000000000000000000000000000001B :1005E000000000000000000000000000000000000B -:1005F00000000004000000000000000000000000F7 -:1006000000000000000000000000000000000008E2 +:1005F00000000000000000000000000000000000FB +:1006000000000000000000000000000000000000EA :1006100000000000000000000000000000000000DA -:10062000000000000000000000000000000000804A +:1006200000000000000000000000000000000000CA :1006300000000000000000000000000000000000BA :1006400000000000000000000000000000000000AA -:100650000004000000000000000000000000000096 +:10065000000000000000000000000000000000009A :10066000000000000000000000000000000000008A -:1006700000000000000003000084000000000000F3 -:100680000000000000000000000000000800000062 -:100690000001000000000000000000000000000059 +:10067000000000000000000000000000000000007A +:10068000000000000000000000000000000000006A +:10069000000000000000000000000000000000005A :1006A000000000000000000000000000000000004A -:1006B0000008000000000000000000000000000032 +:1006B000000000000000000000000000000000003A :1006C000000000000000000000000000000000002A -:1006D0000000000100000000000000000000000019 -:1006E0000000000000000000000009000000000001 -:1006F000000000000000000010008200A0000000C8 -:100700008200000000008800820082008200000059 -:10071000820000000000820082008200820000004F -:1007200082000000A00000008200820000000000A3 -:100730008200000000008200080082000000080023 +:1006D000000000000000000000000000000000001A +:1006E000000000000000000000000000000000000A +:1006F00000000000000000000000000000000000FA +:1007000000000000000000000000000000000000E9 +:1007100000000000000000000000000000000000D9 +:1007200000000000000000000000000000000000C9 +:1007300000000000000000000000000000000000B9 :1007400000000000000000000000000000000000A9 -:100750000000000000000000000000000000000099 +:100750000000000000000000000000000800000091 :100760000000000000000000000000000000000089 :100770000000000000000000000000000000000079 -:100780000000000000000500000000000000000064 +:100780000000000000000000000000000000000069 :100790000000000000000000000000000000000059 -:1007A0000000400040004000050000000000000084 +:1007A0000000000000000000000000000000000049 :1007B0000000000000000000000000000000000039 :1007C0000000000000000000000000000000000029 :1007D0000000000000000000000000000000000019 :1007E0000000000000000000000000000000000009 -:1007F0000000000000000000080000008200A000CF -:100800009000080000000000000000000800000048 -:1008100000000000000000000800000000000000D0 -:10082000A000080000000000000000000800000018 -:10083000000000000000008000030800000000002D -:100840000000000008000000000000000000080098 +:1007F00000000000000000000000000000000000F9 +:1008000000000000000000000000000000000000E8 +:1008100000000000000000000000000000000000D8 +:1008200000000000000000000000000000000000C8 +:1008300000000000000000000000000000000000B8 +:1008400000000000000000000000000000000000A8 :100850000000000000000000000000000000000098 :100860000000000000000000000000000000000088 :100870000000000000000000000000000000000078 -:10088000000000000000000000A0000000000000C8 +:100880000000000000000000000000000000000068 :100890000000000000000000000000000000000058 :1008A0000000000000000000000000000000000048 -:1008B0000000000000000000000400000000000034 +:1008B0000000000000000000000000000000000038 :1008C0000000000000000000000000000000000028 :1008D0000000000000000000000000000000000018 :1008E0000000000000000000000000000000000008 -:1008F000000009000800000000000000A000000047 -:1009000008000800080000000800000800000000BF -:10091000080000000000000000000000900000003F -:10092000080008000800000008000800000000009F -:1009300008020000000000000000000000000000AD -:10094000000008000800000000000800000000008F -:10095000000008020000000000000000000000008D +:1008F00000000300000000000000000000000000F5 +:1009000000000002000000000000000000000000E5 +:1009100000000000000000000000000000000000D7 +:1009200000000000000000000000000000000000C7 +:1009300000000000000000000000000000000000B7 +:1009400000000000000000000000000000000000A7 +:100950000000000000000000000000000000000097 :100960000000000000000000000000000000000087 :100970000000000000000000000000000000000077 :100980000000000000000000000000000000000067 @@ -4255,78 +4255,78 @@ :1009C0000000000000000000000000000000000027 :1009D0000000000000000000000000000000000017 :1009E0000000000000000000000000000000000007 -:1009F00000000000000000000000000000000000F7 -:100A000000010001000100C00001000100C000A1C0 -:100A100000000101004000200001020100C00000B0 -:100A200000010001000100C00001000100C000A1A0 -:100A300000000001004000020001020100C00000AF -:100A4000000000010001000100C00001000100C021 -:100A500000A100000001004000200001020100C0D0 +:1009F000000011880000000000000000000000005E +:100A000000000000000000000000000000000000E6 +:100A100000000000000000000000000000000000D6 +:100A200000000000000000000000000000000000C6 +:100A300000000000000000000000000000000000B6 +:100A400000000000000000000000000000000000A6 +:100A50000000000000000000000000000000000096 :100A60000000000000000000000000000000000086 :100A70000000000000000000000000000000000076 -:100A8000000000410041004100C00041004100C0A1 -:100A90000341000540410000000000418041008505 -:100AA000000000410041004100C00041004100C081 -:100AB0000341000540410000008000418041008565 -:100AC0000000000000410041004100C00041004121 -:100AD00000C003410040404100000000004180414F -:100AE0000085000000000000000000000000000081 +:100A80000000000000000000000000000000000066 +:100A90000000000000000000000000000000000056 +:100AA0000000000000000000000000000000000046 +:100AB0000000000000000000000000000000000036 +:100AC0000000000000000000000000000000000026 +:100AD0000000000000000000000000000000000016 +:100AE0000000000000000000000000000000000006 :100AF00000000000000000000000000000000000F6 -:100B00000000000041000300000000804100A00040 -:100B100000001000C100020000A083004100C100DD -:100B20000080800041000300000000804100A00020 -:100B300000001000C100020000A085004100C100BB -:100B400000808000000041000300000000804100A0 -:100B5000A00000001000C100020000A082004100BF -:100B6000C1000080800000000000000000000000C4 +:100B000000000000000000000000000000000000E5 +:100B100000000000000000000000000000000000D5 +:100B200000000000000000000000000000000000C5 +:100B300000000000000000000000000000000000B5 +:100B400000000000000000000000000000000000A5 +:100B50000000000000000000000000000000000095 +:100B60000000000000000000000000000000000085 :100B70000000000000000000000000000000000075 -:100B800000000000000001000100000000C00100A2 -:100B9000C00000000100020021900005C0004100DB -:100BA000C1000082820001000100000000C00100BD -:100BB000C00000000100020021900005C0004100BB -:100BC000C10000828200000001000100000000C09E -:100BD0000100C00000000100020021900005C100DA -:100BE0004100C1000004820000000000000000007D +:100B80000000000000000000000000000000000065 +:100B90000000000000000000000000000000000055 +:100BA0000000000000000000000000000000000045 +:100BB0000000000000000000000000000000000035 +:100BC0000000000000000000000000000000000025 +:100BD0000000000000000000000000000000000015 +:100BE0000000000000000000000000000000000005 :100BF00000000000000000000000000000000000F5 -:100C0000000000000000000000C00001C0C10000A2 -:100C10000000000100C004830021000100C10000A9 -:100C2000000000010000000000C00001C0C1000081 -:100C30000000000100C004210021000100C10000EB -:100C40000000000100000000000000C00001C0C161 -:100C500000000000000100C004210021000100C1CB -:100C60000000000000010000000000000000000083 +:100C000000000000000000000000000000000000E4 +:100C100000000000000000000000000000000000D4 +:100C200000000000000000000000000000000000C4 +:100C300000000000000000000000000000000000B4 +:100C400000000000000000000000000000000000A4 +:100C50000000000000000000000000000000000094 +:100C60000000000000000000000000000000000084 :100C70000000000000000000000000000000000074 -:100C8000000000000000000000000080004180C162 -:100C9000000000000041008580820041004100C149 -:100CA000000000000041000500000080004180C1FC -:100CB000000000000041008580020041004100C1A9 -:100CC000000000000041000500000000008000411D -:100CD00080C1000000000041008580020041004109 -:100CE00000C10000000000410005000000000000FD +:100C80000000000000000000000000000000000064 +:100C90000000000000000000000000000000000054 +:100CA0000000000000000000000000000000000044 +:100CB0000000000000000000000000000000000034 +:100CC0000000000000000000000000000000000024 +:100CD0000000000000000000000000000000000014 +:100CE0000000000000000000000000000000000004 :100CF00000000000000000000000000000000000F4 -:100D0000000000000000000000000000C1008000A2 -:100D100080C100004103000341004100C1410000C7 -:100D2000800800004100000080004100C1008000F8 -:100D300080C100004100000009004100C1410000E5 -:100D40008008000041000000800041000000C10058 -:100D5000800080C100004100000009004100C14145 -:100D600000008008000041000000800041000000F9 +:100D000000000000000000000000000000000000E3 +:100D100000000000000000000000000000000000D3 +:100D200000000000000000000000000000000000C3 +:100D300000000000000000000000000000000000B3 +:100D400000000000000000000000000000000000A3 +:100D50000000000000000000000000000000000093 +:100D60000000000000000000000000000000000083 :100D70000000000000000000000000000000000073 -:100D80000000000000000000000000000000C100A2 -:100D90004000C0C100000100820082000100C18348 -:100DA0002000C000000001000000C0000100C100E0 -:100DB0004000C0C100000100820082000100C18328 -:100DC0002000C000000001000000C0000100000081 -:100DD000C1004000C0C1000001008200820001008B -:100DE000C1832000C000000001000000C00001001D +:100D80000000000000000000000000000000000063 +:100D90000000000000000000000000000000000053 +:100DA0000000000000000000000000000000000043 +:100DB0000000000000000000000000000000000033 +:100DC0000000000000000000000000000000000023 +:100DD0000000000000000000000000000000000013 +:100DE0000000000000000000000000000000000003 :100DF00000000000000000000000000000000000F3 :100E000000000000000000000000000000000000E2 -:100E10000000000000000042000000000000000090 -:100E20008112008807004800000000000000000058 -:100E30000000000000000042000000000000000070 -:100E40008112008807004800000000000000000038 -:100E50000000000000000000004200000000000050 -:100E60000000811200880700480000000000000018 +:100E100000000000000000000000000000000000D2 +:100E200000000000000000000000000000000000C2 +:100E300000000000000000000000000000000000B2 +:100E400000000000000000000000000000000000A2 +:100E50000000000000000000000000000000000092 +:100E60000000000000000000000000000000000082 :100E70000000000000000000000000000000000072 :100E80000000000000000000000000000000000062 :100E90000000000000000000000000000000000052 @@ -4345,35 +4345,35 @@ :100F60000000000000000000000000000000000081 :100F70000000000000000000000000000000000071 :100F80000000000000000000000000000000000061 -:100F9000000000000000757B000000000000000061 +:100F90000000000000000000000000000000000051 :100FA0000000000000000000000000000000000041 -:100FB00000000000DEAE757B0000000000000000B5 +:100FB0000000000000000000000000000000000031 :100FC0000000000000000000000000000000000021 -:100FD00000000000DEAE0000757B00000000000095 +:100FD0000000000000000000000000000000000011 :100FE0000000000000000000000000000000000001 -:100FF000000000000000DEAE000000000000000065 +:100FF00000000000000000000000000000000000F1 :1010000000000000000000000000000000000000E0 -:10101000000000000000000060C6030000000000A7 -:1010200000000031E0000000000000000C000000A3 -:101030000000000000C0630660C60300000000005E -:1010400000000031E0000000000000000C00000083 -:101050000000000000C06306000060C6030000003E -:10106000000000000031E0000000000000000C0063 -:1010700000000000000000C0630600000000000047 +:1010100000000000000000000000000000000000D0 +:1010200000000000000000000000000000000000C0 +:1010300000000000000000000000000000000000B0 +:1010400000000000000000000000000000000000A0 +:101050000000000000000000000000000000000090 +:101060000000000000000000000000000000000080 +:101070000000000000000000000000000000000070 :101080000000000000000000000000000000000060 -:101090000000000000000000000020000000000030 -:1010A00084000000880020002000200000002000B4 -:1010B0002000000000002000200020008800000028 -:1010C00020008800000020002000200000002000F8 -:1010D00000000000000020002000000220000000AE -:1010E0000000000000000000000000000000000000 -:1010F00000000000000000000000200000000000D0 +:101090000000000000000000000000000000000050 +:1010A00000008800000000008800880000000000A8 +:1010B0000000000000000000200000000000000010 +:1010C00000002000000000002000200000000000C0 +:1010D00000000000000000002000000200000000EE +:1010E00000000000200000000000200000000000C0 +:1010F00000000000000000000000000000000000F0 :1011000000000000000000000000000000000000DF :1011100000000000000000000000000000000000CF :1011200000000000000000000000000000000000BF :1011300000000000000000000000000000000000AF :10114000000000000000000000000000000000009F -:101150000500050005000000000000000000000080 +:10115000000000000000000000000000000000008F :10116000000000000000000000000000000000007F :10117000000000000000000000000000000000006F :10118000000000000000000000000000000000005F @@ -4385,7 +4385,7 @@ :1011E00000000000000000000000000000000000FF :1011F00000000000000000400000000000000000AF :1012000000000000000000000000000000000000DE -:10121000004000000000000000000000000000008E +:10121000004000000000000000400000000000004E :1012200000000000000000000000000000000000BE :1012300000000000000000000000000000000000AE :10124000000000000000000000000000000000009E @@ -4401,31 +4401,31 @@ :1012E00000000000000000000000000000000000FE :1012F00000000000000000000000000000000000EE :1013000000000000000000000000000000000000DD -:10131000000000000000000082000000000000004B -:101320000000000000004100000009000800030068 -:1013300005000300000000000000000000000000A5 -:101340000000000000000300000008000300080087 -:10135000030000000000000000000000000000008A -:101360000000000000000000080000000800080065 -:101370000300030021000000000000000000000046 +:1013100000000000A000000000000000000000002D +:1013200000000000000000000000000000000000BD +:1013300000000000000000000000000000000000AD +:10134000000000000000000000000000000000009D +:10135000000000000000000000000000000000008D +:10136000000000000000000000000000000000007D +:10137000000000000000000000000000000000006D :10138000000000000000000000000000000000005D :10139000000000000000000000000000000000004D -:1013A0000000000000000000C0000000000000007D -:1013B00000008400000000008200000000004000E7 -:1013C000000082000000000000000000000000009B -:1013D0000000820000000000000000000800000083 -:1013E000400082000000000000000000000000003B -:1013F00000000000000000000000000008000000E5 -:101400000000000000000000080000008200000052 +:1013A000000000000000C00000000000000000007D +:1013B000000000000000000000000000000000002D +:1013C000000000000000000000000000000000001D +:1013D000000000000000000000000000000000000D +:1013E00000000000000000000000000000000000FD +:1013F00000000000000000000800000000000000E5 +:101400000000000000000800820000000000000052 :1014100000000000000000000000000000000000CC -:1014200000000000000008000000000000000000B4 +:1014200000000000000000000000000000000000BC :1014300000000000000000000000000000000000AC :10144000000000000000000000000000000000009C :10145000000000000000000000000000000000008C :10146000000000000000000000000000000000007C -:101470000000000000000000080000000000000064 -:101480000000000000000800000000000000000054 -:10149000000000000000000000000000000000004C +:10147000000000000000000000000000000000006C +:10148000000000000000000000000000000000005C +:101490000000000000000000080000000000000044 :1014A000000000000000000000000000000000003C :1014B000000000000000000000000000000000002C :1014C000000000000000000000000000000000001C @@ -4433,24 +4433,24 @@ :1014E00000000000000000000000000000000000FC :1014F00000000000000000000000000000000000EC :1015000000000000000000000000000000000000DB -:101510000000000000000000000000008200000049 -:1015200082000000000000000000000000900000A9 -:10153000000000000000000008000000080000009B +:1015100000000000000000000000000000000000CB +:1015200000000000000000000000000000000000BB +:1015300000000000000000000000000000000000AB :10154000000000000000000000000000000000009B -:10155000000000000000000008000000080000007B +:10155000000000000000000000000000000000008B :10156000000000000000000000000000000000007B -:10157000000000000000000000000800000008005B +:10157000000000000000000000000000000000006B :10158000000000000000000000000000000000005B :10159000000000000000000000000000000000004B -:1015A0000000030000000000000000000000000038 +:1015A000000000000000000000000000000000003B :1015B000000000000000000000000000000000002B :1015C000000000000000000000000000000000001B :1015D000000000000000000000000000000000000B :1015E00000000000000000000000000000000000FB -:1015F0000000000000008200000000000000000069 +:1015F00000000000000000000000000000000000EB :1016000000000000000000000000000000000000DA -:1016100000000000000000000000000000000000CA -:101620000000000082000000000400000000000034 +:101610000000000000000000080000000000820040 +:10162000A000000088000000000000000000000092 :1016300000000000000000000000000000000000AA :10164000000000000000000000000000000000009A :10165000000000000000000000000000000000008A @@ -4482,32 +4482,32 @@ :1017F00000000000000000000000000000000000E9 :1018000000000000000000000000000000000000D8 :1018100000000000000000000000000000000000C8 -:1018200000000000000000000000000000000010A8 -:1018300000000000000000030000000000000000A5 +:1018200000000000000000000000000000000005B3 +:101830000000000000000020000000000000000088 :101840000000000000000000000000000000000098 :101850000000000000000000000000000000000088 :101860000000000000000000000000000000000078 :101870000000000000000000000000000000000068 :101880000000000000000000000000000000000058 :101890000000000000000000000000000000000048 -:1018A00000000000000000000000900000000000A8 -:1018B0000001020000000000000000000000000025 +:1018A00000000000000000000000400000000000F8 +:1018B0000000900000000000000000000000000098 :1018C0000000000000000000000000000000000018 :1018D0000000000000000000000000000000000008 :1018E00000000000000000000000000000000000F8 :1018F00000000000000000000000000000000000E8 :1019000000000000000000000000000000000000D7 :1019100000000000000000000000000000000000C7 -:101920000000000000000000000000000040000077 -:101930004000000000020000000000000000000065 +:1019200000000000000000000000000000A0000017 +:101930000000000000400000040000000000000063 :101940000000000000000000000000000000000097 :101950000000000000000000000000000000000087 :101960000000000000000000000000000000000077 :101970000000000000000000000000000000000067 :101980000000000000000000000000000000000057 :101990000000000000000000000000000000000047 -:1019A00000000000000000000000000000000080B7 -:1019B00000000000000000800000000000000000A7 +:1019A0000000000000000000000000000000000037 +:1019B0000000000000000080000080000000000027 :1019C0000000000000000000000000000000000017 :1019D0000000000000000000000000000000000007 :1019E00000000000000000000000000000000000F7 @@ -4515,7 +4515,7 @@ :101A000000000000000000000000000000000000D6 :101A100000000000000000000000000000000000C6 :101A200000000000000000000000000000000000B6 -:101A30000009004000800000000400000080000059 +:101A3000000500000000000000050000008000001C :101A40000000000000000000000000000000000096 :101A50000000000000000000000000000000000086 :101A60000000000000000000000000000000000076 @@ -4523,7 +4523,7 @@ :101A80000000000000000000000000000000000056 :101A90000000000000000000000000000000000046 :101AA0000000000000000000000000000000000036 -:101AB000000000000000008200000001000000049F +:101AB00000000000000000C0000000000000000462 :101AC0000000000000000000000000000000000016 :101AD0000000000000000000000000000000000006 :101AE00000000000000000000000000000000000F6 @@ -4605,12 +4605,12 @@ :101FA0000000000000000000000000000000000031 :101FB0000000000000000000000000000000000021 :101FC0000000000000000000000000000000000011 -:101FD0000000000000000000000000000000000001 -:101FE0000000200000000000000000002000200091 -:101FF00000000000000000000000000000000000E1 -:102000000000200000000000000000002000200070 -:1020100000000000000000020000000000000000BE -:10202000000000002000000000000000000084000C +:101FD000000000000000000000000000840000007D +:101FE00000000000000000000000200000000000D1 +:101FF00000000000200000000000000020000000A1 +:1020000000000000000000000000200000000000B0 +:10201000000000002000000200000000000020007E +:1020200000000000000000000000000000000000B0 :1020300000000000000000000000000000000000A0 :102040000000000000000000000000000000000090 :102050000000000000000000000000000000000080 @@ -4624,7 +4624,7 @@ :1020D0000000000000000000000000000000000000 :1020E00000000000000000000000000000000000F0 :1020F00000000000000000000000000000000000E0 -:1021000000000000000000000000000000000000CF +:10210000000000000000000000400000000000008F :1021100000100000000000000000000000000000AF :1021200000000000000800000000000000000000A7 :10213000000000000000000000000000000000009F @@ -4638,29 +4638,29 @@ :1021B000000000000000000000000000000000001F :1021C00000000000000000100000000000000000FF :1021D00000000000000000000000000000000000FF -:1021E00000001000000000000000000000000000DF -:1021F00000000000080000000000000000000000D7 +:1021E00000000000000000000000000000000000EF +:1021F00000000000000000000000000000000000DF :1022000000000000000000000000000000000000CE -:1022100000000000080000000000000000000000B6 +:1022100000000000000000000000000000000000BE :1022200000000000000000000000000000000000AE -:102230000000000000000800000000000000000096 +:10223000000000000000000000000000000000009E :10224000000000000000000000000000000000008E :10225000000000000000000000000000000000007E -:10226000000000001000000000000000000000005E +:10226000000000000000000000000000000000006E :10227000000000000000000000000000000000005E :10228000000000000000000000000000000000004E :10229000000000000000000000000000000000003E :1022A000000000000000000000000000000000002E :1022B000000000000000000000000000000000001E :1022C000000000000000000000000000000000000E -:1022D00000000000000000000000000000000000FE +:1022D00000000000000000000300000000000000FB :1022E00000000000000000000000000000000000EE :1022F00000000000000000000000000000000000DE :1023000000000000000000000000000000000000CD :1023100000000000000000000000000000000000BD :1023200000000000000000000000000000000000AD -:10233000000000000000000000000000000000009D -:1023400000000000000000004000C000000000008D +:102330000000000000000000000000000000C000DD +:102340000000000000000000000008000000000085 :10235000000000000000000000000000000000007D :10236000000000000000000000000000000000006D :10237000000000000000000000000000000000005D @@ -4668,33 +4668,33 @@ :10239000000000000000000000000000000000003D :1023A000000000000000000000000000000000002D :1023B000000000000000000000000000000000001D -:1023C000000000000000000000000000000000000D +:1023C0000000000008000000000000000000000005 :1023D00000000000000000000000000000000000FD :1023E00000000000000000000000000000000000ED :1023F00000000000000000000000000000000000DD :1024000000000000000000000000000000000000CC :1024100000000000000000000000000000000000BC :1024200000000000000000000000000000000000AC -:10243000000000000000000000000000000000009C -:102440000800000000000000000000000000000084 -:10245000000000000000000000000000000000007C -:10246000000000000000000008000000080000005C +:102430000000000000000000000000000800000094 +:10244000000000000000000000000000000000008C +:1024500000008200000000000000000000000000FA +:10246000000000000000000000000000000000006C :10247000000000000000000000000000000000005C :10248000000000000000000000000000000000004C :10249000000000000000000000000000000000003C :1024A000000000000000000000000000000000002C :1024B000000000000000000000000000000000001C :1024C000000000000000000000000000000000000C -:1024D00000000000000000000000000000000300F9 -:1024E00008000000000000000000000000000000E4 -:1024F00000000000000000000000000000000000DC +:1024D00000000000000000000000000000000000FC +:1024E00000000000000000002100000000000000CB +:1024F00000020000000000000000000000000000DA :1025000000000000000000000000000000000000CB :1025100000000000000000000000000000000000BB :1025200000000000000000000000000000000000AB :10253000000000000000000000000000000000009B :10254000000000000000000000000000000000008B -:102550000000000000000000080000000000000073 -:10256000000000000000000000000000000000006B +:10255000000000000000000000000000000000007B +:10256000000040000000000000000000000000002B :10257000000000000000000000000000000000005B :10258000000000000000000000000000000000004B :10259000000000000000000000000000000000003B @@ -4726,7 +4726,7 @@ :102730000000000000000000000000000000000099 :102740000000000000000000000000000000000089 :102750000000000000000000000000000000000079 -:102760000000000041000000000500100000000013 +:102760000000000003000000000000100000000056 :102770000000000000000000000000000000000059 :102780000000000000000000000000000000000049 :102790000000000000000000000000000000000039 @@ -4734,7 +4734,7 @@ :1027B0000000000000000000000000000000000019 :1027C0000000000000000000000000000000000009 :1027D00000000000000000000000000000000000F9 -:1027E00000000000000020000000000000010000C8 +:1027E0000000000000009000000000000001000058 :1027F00000000000000000000000000000000000D9 :1028000000000000000000000000000000000000C8 :1028100000000000000000000000000000000000B8 @@ -4742,7 +4742,7 @@ :102830000000000000000000000000000000000098 :102840000000000000000000000000000000000088 :102850000000000000000000000000000000000078 -:102860000000000000000000000000000000400028 +:102860000000000000000000000000000000200048 :102870000000000000000000000000000000000058 :102880000000000000000000000000000000000048 :102890000000000000000000000000000000000038 @@ -4857,9 +4857,9 @@ :102F60000000000000000000000000000000000061 :102F70000000000000000000000000000000000051 :102F80000000000000000000000000000000000041 -:102F90000000000000000000000000000000200011 +:102F90000000000000000000000000002000000011 :102FA0000000000000000000000000000000200001 -:102FB00000000000000000000000000000002000F1 +:102FB00000000000000000000000000020000000F1 :102FC00000000000000000000000000000002000E1 :102FD00000000000000000000000000000000000F1 :102FE00000000000000000000000000000000000E1 @@ -4873,22 +4873,22 @@ :103060000000000000000000000000000000000060 :103070000000000000000000000000000000000050 :103080000000000000000000000000000000000040 -:10309000000000000000000000000000000400002C -:1030A0000000000000040000000000000004000018 -:1030B0000000000000040004000000000004000400 -:1030C00000000000000400000000000000000000FC +:103090000000000000000000000000000000000030 +:1030A0000000000000040004000000000004000410 +:1030B0000000000000040000000000000004000404 +:1030C00000000000000400040000000000000000F8 :1030D00000000000000000000000000800000000E8 -:1030E00000100000000000000000000000000000D0 +:1030E00000100008000000000000000000000000C8 :1030F00000000000000000000000000000000000D0 :1031000000000000000000000000000000000000BF -:1031100000000000000000000000000400000000AB -:103120000000000000000000000000040004000097 +:1031100000000000000000000000000000000000AF +:10312000400000000000000000000000000000005F :10313000000000000000000000000000000000008F :10314000000000000000000000000000000000007F :10315000000000000000000000000000000000006F :10316000000000000000000000000000000000005F :10317000000000000000000000000000001000003F -:10318000000000000000000000000000000000003F +:10318000000000000010000000000000000000002F :10319000000000000000000000000000000000002F :1031A000000000000000000000000000000000001F :1031B000000000000000000000000000000000000F @@ -4904,15 +4904,15 @@ :10325000000000000000000000000000000000006E :10326000000000000000000000000000000000005E :10327000000000000000000000000000000000004E -:103280000000000000000000030003000000000038 +:103280000000000000000000000003000000030038 :10329000000000000000000000000000000000002E :1032A000000000000000000000000000000000001E :1032B000000000000000000000000000000000000E :1032C00000000000000000000000000000000000FE :1032D00000000000000000000000000000000000EE :1032E00000000000000000000000000000000000DE -:1032F00000000000000000000000C0000800000006 -:1033000000000000000000000000000000000000BD +:1032F00000000000000000000000000008000000C6 +:10330000C0000000000000004000000000000000BD :1033100000000000000000000000000000000000AD :10332000000000000000000000000000000000009D :10333000000000000000000000000000000000008D @@ -4927,7 +4927,7 @@ :1033C00000000000000000000000000000000000FD :1033D00000000000000000000000000000000000ED :1033E00000000000000000000000000000000000DD -:1033F0000000000000000000A0000000000000002D +:1033F000000000000000A00000000000000000002D :1034000000000000000000000000000000000000BC :1034100000000000000000000000010000000000AB :10342000000000000000000000000000000000009C @@ -4937,13 +4937,13 @@ :10346000000000000000000000000000000000005C :10347000000000000000000000000000000000004C :10348000000000000000000000000000000000003C -:103490000000000000000000000000000800000024 +:103490000000000000000000000000000800030021 :1034A000000000000000000000000000000000001C :1034B000000000000000000000000000000000000C :1034C00000000000000000000000000000000000FC :1034D00000000000000000000000000000000000EC :1034E00000000000000000000000000000000000DC -:1034F00000000000080000000000000000000000C4 +:1034F00000000800000000000000000000000000C4 :1035000000000000000000000000000000000000BB :1035100000000000000000000000000000000000AB :10352000000000000000000000000000000000009B @@ -5118,7 +5118,7 @@ :103FB0000000000000000000000000000000000001 :103FC00000000000000000000000000000000000F1 :103FD00000000000000000000000000000000000E1 -:103FE00000000000000000000000000000000000D1 +:103FE00000030000000000000000000000000000CE :103FF00000000000000000000000000000000000C1 :1040000000000000000000000000000000000000B0 :1040100000000000000000000000000000000000A0 @@ -5127,7 +5127,7 @@ :104040000000000000000000000000000000000070 :104050000000000000000000000000000000000060 :104060000000000000000000000000000000000050 -:104070000000000000000000000000000010000030 +:104070000000000000100000000000000010000020 :104080000000000000000000000000000000001020 :104090000000000000000000000000000000000020 :1040A0000000000000000000000000000000000010 @@ -5158,15 +5158,15 @@ :10423000000000000000000000000000000000007E :10424000000000000000000000000000000000006E :10425000000000000000000000000000000000005E -:10426000000000000308000000000000080000003B -:104270000000080005000008000000000000000029 +:10426000000000000308000000000500000000003E +:10427000000000000000000800000800000000002E :10428000000000000000000000000000000000002E :10429000000000000000000000000000000000001E :1042A000000000000000000000000000000000000E :1042B00000000000000000000000000000000000FE :1042C00000000000000000000000000000000000EE :1042D00000000000000000000000000000000000DE -:1042E00000000800000000000000000000000000C6 +:1042E000900000000000000000000000000000003E :1042F00000000000000000000000000000000000BE :1043000000000000000000000000000000000000AD :10431000000000000000000000000000000000009D @@ -5190,8 +5190,8 @@ :10443000000000000000000000000000000000007C :10444000000000000000000000000000000000006C :10445000000000000000000000000000000000005C -:104460000000000000000300000000000000410008 -:10447000000000000000000000000000000000003C +:10446000000000000000000000000000000000004C +:1044700000000000410000000000000000000000FB :10448000000000000000000000000000000000002C :10449000000000000000000000000000000000001C :1044A000000000000000000000000000000000000C @@ -5297,56 +5297,56 @@ :104AE00000000000000000000000000000000000C6 :104AF00000000000000000000000000000000000B6 :104B000000000000000000000000000000000000A5 -:104B10000008000000050000000000000010000078 -:104B2000001000100002000000000000000400045B -:104B30000000000000020010000000000040000023 +:104B10000000000000000000000000000010001075 +:104B20000000000000050004000000000005000077 +:104B3000000000000040001000000000000200041F :104B40000000000000000000000000000000000065 :104B50000000000000000000000000000000000055 :104B60000000000000000000000000000000000045 :104B70000000000000000000000000000000000035 :104B80000000000000000000000000000000000025 -:104B90000000000100000000000000000000000014 -:104BA0000000000100010001000000000000000101 -:104BB00000010000000000010000000000000001F2 -:104BC00000000000000000000000000000000000E5 +:104B90000000000000000000000000000000000015 +:104BA0000000000000000000000100000000000004 +:104BB00000000000000000010000000000000001F3 +:104BC00000010000000000000000000000000000E4 :104BD00000000000000000000000000000000000D5 :104BE00000000000000000000000000000000000C5 :104BF00000000000000000000000000000000000B5 -:104C00000000000000050000000800080008000087 -:104C1000001000080000000000000000000000007C -:104C20000000000000800000000000000080000084 -:104C30000000000000800000008000800080000074 +:104C00000000000000080008001000050005000575 +:104C1000000500050000000000000000000000008A +:104C20000000000000800080008000000080000084 +:104C30000080008000800000008000800080000074 :104C40000080008000000000000000000000000064 :104C50000000000000000000000000000000000054 :104C60000000000000000000000000000000000044 :104C70000000000000000000000000000000000034 -:104C80000000000000000008000000840084008490 -:104C900000000084008400080000000800080008EC -:104CA0000084000800080020000000840084001038 -:104CB00000000084008400100000000400040010C4 -:104CC00000000002000400000000000000000000DE +:104C8000000000000000008400000084000800080C +:104C900000000010000800080000000800080008DC +:104CA00000840008000800200010000400840010A8 +:104CB00000000004000400100000000400020010C6 +:104CC00000000040000200000000000000000000A2 :104CD00000000000000000000000000000000000D4 :104CE00000000000000000000000000000000000C4 :104CF00000000000000000000000000000000000B4 -:104D00000000000000000000000000000010000093 -:104D10000003000000080010004100000010002106 -:104D20000003000000210021000000000004000238 -:104D3000000000030002000200000000004000022A -:104D4000000000000004000200000000000000005D +:104D0000000000000000000000000000000800108B +:104D1000000500000008000500410000001000210F +:104D20000021000300210021000000000002000219 +:104D30000021000300020002000000000002000445 +:104D4000001000000004000000000000000000004F :104D50000000000000000000000000000000000053 :104D60000000000000000000000000000000000043 :104D70000000000000000000000000000000000033 -:104D80000000000000000000000000000000000023 -:104D9000000000000000000008000000000000000B +:104D80000000000000000000000000000000210002 +:104D9000000000000000000000000000000000A073 :104DA0000000000000000000000000000000000102 :104DB00000010000000000010001000000000001EF -:104DC00000010000000000010001000000000000E0 +:104DC00000010000000000010000000000000000E1 :104DD00000000000000000000000000000000000D3 :104DE00000000000000000000000000000000000C3 :104DF00000000000000000000000000000000000B3 -:104E0000000000000000000000000000000008009A -:104E1000820008000000080000008200000000007E -:104E200000000000000082000800000000000000F8 +:104E0000000000000000000000000000C000C00022 +:104E100082000800A0000000080008000800000050 +:104E200000000000000000000000080082000000F8 :104E30000000000000000000000000000000000072 :104E40000000000000000000000000000000000062 :104E50000000000000000000000000000000000052 @@ -5354,16 +5354,16 @@ :104E70000000000000000000000000000000000032 :104E80000000000000000000000000000000000022 :104E90000000000000000000000000000000000012 -:104EA00000000000000000000000000008000000FA +:104EA00000000000040000000000000000000000FE :104EB00000000000000000000000000000000000F2 :104EC00000000000000000000000000000000000E2 :104ED00000000000000000000000000000000000D2 :104EE00000000000000000000000000000000000C2 :104EF00000000000000000000000000000000000B2 :104F000000000000000000000000000000000000A1 -:104F10000800000008000000000000000000C000C1 -:104F200000000800C0000810080000000000000099 -:104F300000000000000000040000000082000000EB +:104F10000000000000000000820008000000000007 +:104F2000820008000800A0008200000000000000CD +:104F30000010000000000000000000000000000061 :104F40000010000000000000000000000000000051 :104F50000000000000000000000000000000000051 :104F60000000000000000000000000000000000041 @@ -5371,22 +5371,22 @@ :104F80000000000000000000000000000000000021 :104F90000000000000000000000000000000000011 :104FA0000000000000000000000000000000000001 -:104FB00000000000000000000001000000000000F0 +:104FB00000000001000000000000000000000000F0 :104FC00000000000000000000000000000000000E1 :104FD00000000001000000000000000000000000D0 :104FE00000000000000000000000000000000000C1 :104FF00000000000000000000000000000000000B1 :1050000000000000000000000000000000000000A0 -:105010000000000000008200A00082000000C0002C -:105020000800A0000000000008008200000000004E -:105030000000000000000000000000000000000070 +:105010000000000008000800000000000000000080 +:105020000000820000080000000082100000000064 +:105030000800000000000000000200000000000066 :105040000000000000000000000000000000000060 :105050000000000000000000000000000000000050 :105060000000000000000000000000000000000040 :105070000000000000000000000000000000000030 :105080000000000000000000000000000000000020 :105090000000000000000000000000000000000010 -:1050A0000000000000000000000000000000000000 +:1050A00000000000000000010000000008000000F7 :1050B00000000000000000000000000000000000F0 :1050C00000000000000000000000000000000000E0 :1050D00000000000000000010000000000000000CF @@ -5394,7 +5394,7 @@ :1050F00000000000000000000000000000000000B0 :10510000000000000000000000000000000000009F :1051100000000000000000000100C10000000100CC -:105120000100050000000000010005000000010072 +:105120000100050001000000010001000100010074 :105130000000C100000101000001C00000010001E9 :10514000C101C00000830101C000C0000083010153 :105150000000C0000001010100000000000000008C @@ -5402,57 +5402,57 @@ :10517000000000000000000000000000000000002F :10518000000000000000000000000000000000001F :10519000000000000000000000004100C1210341A8 -:1051A00041004100C121054100004100C1214041B1 +:1051A00041004100C1212041000041004121024154 :1051B00041000000C10003034100004180000005E0 -:1051C0000003C141800000834103804180000083CF +:1051C0000003C141800000834103C041800000838F :1051D0004103004180000003410300000000000083 :1051E00000000000000000000000000000000000BF :1051F00000000000000000000000000000000000AF :10520000000000000000000000000000000000009E :10521000000000000000000000000000414100808C -:105220000041834141418080004103414141800070 +:10522000004185414141808000410341414180006E :1052300000418341C141808000418500800003001E -:105240000080008000412100008080000041830038 -:1052500000C18080C141C100004180000000000009 +:105240000080008000412100008080000041C100FA +:1052500000C18000C141C100004180000000000089 :10526000000000000000000000000000000000003E :10527000000000000000000000000000000000002E :10528000000000000000000000000000000000001E :10529000000000000000000000000000000000010D :1052A00000C0000182010001C0C000010101000135 -:1052B0002040000121014001C00200018200C00025 +:1052B0002040000120014001C00200018200C00026 :1052C000010000C000C00001000000C08200000119 -:1052D000830000C182C0C1014000000182000000C3 +:1052D000400000C18200C1014000000182000000C6 :1052E00000000000000000000000000000000000BE :1052F00000000000000000000000000000000000AE :10530000000000000000000000000000000000009D :10531000000000000000000000000000000000008D -:1053200000000000C041C00100000000C0820083F6 -:1053300000000000C184828200400000C10500839B -:1053400000C000000300000000000000C0000000DA +:1053200000000000C084C10100000000C041002155 +:1053300001000000C188028500830000400900824E +:1053400000C000000200000000000000C0000000DB :1053500000400000C000000000400000C00000004D :10536000000000000000000000000000000000003D :10537000000000000000000000000000000000002D :10538000000000000000000000000000000000001D :10539000000000000000000000000000000000000D -:1053A000000000410041808380200041004180C115 -:1053B00000A000410041C185058300C100418285F4 -:1053C0004082008000008500200000000000800076 +:1053A0000000004100418083C1030041004180852D +:1053B000038341410041C121808341830021038552 +:1053C00040A0008000008500000000000000800078 :1053D000000000C100218041000000C100008041A8 :1053E00000000000000000000000000000000000BD :1053F00000000000000000000000000000000000AD :10540000000000000000000000000000000000009C :10541000000000000000000000000000000000008C -:10542000000000004141008200800000C1C000C1B6 -:1054300000000200410000C100410300410000C122 -:105440000002030000418000C1A0004180C0800034 -:1054500000C1004100418000008000410041000087 +:1054200000000000410500A100800000C1C100C0D3 +:1054300000000200410000C000410500414100C1E0 +:105440000003030000418000C1850041808080008E +:1054500000C0004100418000008000410041000088 :1054600000C100410000000000000000000000003A :10547000000000000000000000000000000000002C :10548000000000000000000000000000000000001C :10549000000000000000000000000000000000000C -:1054A000000000000000010100C100C0000040C079 -:1054B00000C100000100000000C100010100010066 -:1054C00000C1000101000001200041C0000140C0F6 +:1054A000000000000000010000C000C0000040C17A +:1054B00000C000000100000000C000010100010167 +:1054C00000C1000001000001200041C0000140C0F7 :1054D000400000C000010001200000C000010001E8 :1054E000000000C1000100000000000000000000FA :1054F00000000000000000000000000000000000AC @@ -5461,7 +5461,7 @@ :10552000000000000000000000000081210048424F :1055300088000000000048420000000000004842CF :1055400000120042000048428412008121004842BB -:105550000012000000004842600000420000484283 +:10555000001200000000484288000042000048425B :1055600000000000000048420000000000000000B1 :10557000000000000000000000000000000000002B :10558000000000000000000000000000000000001B @@ -7742,7 +7742,7 @@ :10E3B000000000000000000000000000000000005D :10E3C000000000000000000000000000000000004D :10E3D000000000000000000000000000000000003D -:10E3E000000000000000000000000000000000002D +:10E3E0000000000000000000040000000000000029 :10E3F000000000000000000000000000000000001D :10E40000000000000000000000000000000000000C :10E4100000000000000000000000000000000000FC @@ -8247,7 +8247,7 @@ :1003300000000000000000000000000000000000BD :1003400000000000000000000000000000000000AD :10035000000000000000000000000000000000009D -:100360000000000004000000000000000000000089 +:10036000000000000000000000000000000000008D :10037000000000000000000000000000000000007D :10038000000000000000000000000000000000006D :10039000000000000000000000000000000000005D @@ -8742,8 +8742,8 @@ :1022200000000000000000000000000000000000AE :10223000000000000000000000000000000000009E :10224000000000000000000000000000000000008E -:10225000000000000000000000000000000000007E -:10226000000000000000000000000000000004006A +:10225000000000000000000000000000000002007C +:10226000000000000000000000000000000000006E :10227000000000000000000000000000000000005E :10228000000000000000000000000000000000004E :10229000000000000000000000000000000000003E @@ -8994,9 +8994,9 @@ :1031E00000000000000000000000000000000000DF :1031F00000000000000000000000000000000000CF :1032000000000000000000000000000000000000BE -:1032100000000000000000000000000000080000A6 +:1032100000000000000000000000000000000000AE :10322000000000000000000000000000000000009E -:10323000000000000000000000000000000400008A +:10323000000000000000000000000000000000008E :10324000000000000000000000000000000000007E :10325000000000000000000000000000000000006E :10326000000000000000000000000000000000005E @@ -9214,11 +9214,11 @@ :103FA0000000000000000000000000000000000011 :103FB0000000000000000000000000000000000001 :103FC00000000000000000000000000000000000F1 -:103FD00000000000000000000000000000000000E1 +:103FD00000000000200000000000000000000000C1 :103FE00000000000000000000000000000000000D1 -:103FF00000000000000000000000000000000000C1 +:103FF00000000000200000000000000000000000A1 :1040000000000000000000000000000000000000B0 -:1040100000000000000000000000000000000000A0 +:104010000000000000002000000000000000000080 :104020000000000000000000000000000000000090 :104030000000000000000000000000000000000080 :104040000000000000000000000000000000000070 @@ -9272,8 +9272,8 @@ :10434000000000000000000000000000000000006D :10435000000000000000000000000000000000005D :10436000000000000000000000000000000000004D -:10437000000000000000000000000000000000003D -:104380000400000000000000000000000000000029 +:104370000400000000000000000000000000000039 +:10438000000000000000000000000000000000002D :10439000000000000000000000000000000000001D :1043A000000000000000000000000000000000000D :1043B00000000000000000000000000000000000FD @@ -9301,7 +9301,7 @@ :10451000000000000000000000000000000000009B :10452000000000000000000000000000000000008B :10453000000000000000000000000000000000007B -:10454000000000000000000000000000000000006B +:104540000000000000000000000008000000000063 :10455000000000000000000000000000000000005B :10456000000000000000000000000000000000004B :10457000000000000000000000000000000000003B @@ -9310,7 +9310,7 @@ :1045A000000000000000000000000000000000000B :1045B00000000000000000000000000000000000FB :1045C00000000000000000000000000000000000EB -:1045D00000000000000000000000000000000000DB +:1045D00000000000210000000000000000000000BA :1045E00000000000000000000000000000000000CB :1045F00000000000000000000000000000000000BB :1046000000000000000000000000000000000000AA @@ -9465,19 +9465,19 @@ :104F50000000000000000000000000000000000051 :104F60000000000000000000000000000000000041 :104F70000000000000000000000000000000000031 -:104F80000000200000000000000000000000000001 -:104F900020000000000000000000000000000000F1 -:104FA00020002000000000000000000000000000C1 -:104FB00020000000000000000000000000000000D1 -:104FC0002020000020000000000000000000000081 -:104FD0000000880000000000000000000000000049 +:104F80000000000000000000200000000000000001 +:104F900000000000000000002000000000000000F1 +:104FA00000000000000000002000000000000000E1 +:104FB00000000000000000002000000000000000D1 +:104FC00004000000000000000000200000000000BD +:104FD00000000000000000000000000000000000D1 :104FE00000000000000000000000000000000000C1 :104FF00000000000000000000000000000000000B1 :1050000000000000000000000000000000000000A0 :105010000000000000000000000000000000000090 :105020000000000000000000000000000000000080 :105030000000000000000000000000000000000070 -:10504000000000010001000000000000000000005E +:1050400000008000000100000000000000000000DF :105050000000000000000000000000000000000050 :105060000000000000000000000000000000000040 :105070000000000000000000000000000000000030 @@ -9485,15 +9485,15 @@ :105090000000000000000000000000000000000010 :1050A0000000000000000000000000000000000000 :1050B00000000000000000000000000000000000F0 -:1050C00000000000000000000000000000000000E0 +:1050C00000000000002000000000000000000000C0 :1050D00000000000000000000000000000000000D0 :1050E00000000000000000000000000000000000C0 :1050F00000000000000000000000000000000000B0 :10510000000000000000000000000000000000009F -:105110000000000000080000000000000000000087 +:10511000000000000000000000000000000000008F :10512000000000000000000000000000000000007F -:1051300000000000008400000000000000000000EB -:10514000000000000000000000000000000000005F +:10513000000000000000000000000000000000006F +:10514000000000000000000100000000000000005E :10515000000000000000000000000000000000004F :10516000000000000000000000000000000000003F :10517000000000000000000000000000000000002F @@ -9501,7 +9501,7 @@ :10519000000000000000000000000000000000000F :1051A00000000000000000000000000000000000FF :1051B00000000000000000000000000000000000EF -:1051C00000000000000000090000000000000000D6 +:1051C00000000000000000000000000000000000DF :1051D00000000000000000000000000000000000CF :1051E00000000000000000000000000000000000BF :1051F00000000000000000000000000000000000AF @@ -9516,16 +9516,16 @@ :10528000000000000000000000000000000000001E :10529000000000000000000000000000000000000E :1052A00000000000000000000000000000000000FE -:1052B00000000000000000000000000000000000EE -:1052C00000000000000000000000000004000000DA -:1052D00000000000000000000000000000000800C6 -:1052E000000000000000000000000000000082003C -:1052F00008000000C0000000000000000000820064 +:1052B00000000000400000000000000000000000AE +:1052C00000000000000000000000000000000000DE +:1052D00000000000000000000000000000000000CE +:1052E00000000000000000000000000000000800B6 +:1052F00000000000C00000000000000000000000EE :10530000000000000000000000000000000000009D :10531000000000000000000000000000000000008D :10532000000000000000000000000000000000007D :10533000000000000000000000000000000000006D -:1053400000000000000000000000000000008000DD +:10534000000000000000000000000000000000005D :10535000000000000000000000000000000000004D :10536000000000000000000000000000000000003D :10537000000000000000000000000000000000002D @@ -9536,8 +9536,8 @@ :1053C00000000000000000000000000000000000DD :1053D00000000000000000000000000000000000CD :1053E00000000000000000000000000000000000BD -:1053F00000000800000000000000000000000000A5 -:10540000000000000000000000000000000000009C +:1053F0000000A00000000000000008000000000005 +:10540000C00000000000C00000000000000000001C :10541000000000000000000000000000000000008C :10542000000000000000000000000000000000007C :10543000000000000000000000000000000000006C @@ -9549,11 +9549,11 @@ :10549000000000000000000000000000000000000C :1054A00000000000000000000000000000000000FC :1054B00000000000000000000000000000000000EC -:1054C000000000000000000000000000400000009C +:1054C000000000000000000000000000820000005A :1054D00000000000000000000000000000000000CC -:1054E00000000000000000000000000000000000BC +:1054E00000000000000000000000000000000800B4 :1054F00000000000000000000000000000000000AC -:105500000000000000000800820000000000000011 +:105500000000000000008200000000000000000019 :10551000000000000000000000000000000000008B :10552000000000000000000000000000000000007B :10553000000000000000000000000000000000006B @@ -9586,7 +9586,7 @@ :1056E00000000000000000000000000000000000BA :1056F00000000000000000000000000000000000AA :105700000000000000000000000000000000000099 -:105710008000000000400005800000000000004004 +:105710008000000000400005800000000000002024 :105720000000000000000000000000000000000079 :105730000000000000000000000000000000000069 :105740000000000000000000000000000000000059 @@ -9594,8 +9594,8 @@ :105760000000000000000000000000000000000039 :105770000000000000000000000000000000000029 :105780000000000000000000000000000000000019 -:1057900000004000000000000000040000000000C5 -:1057A00000000000000000000000000000000000F9 +:1057900000004000000000000000020000000000C7 +:1057A00000010000000000000000000000000000F8 :1057B00000000000000000000000000000000000E9 :1057C00000000000000000000000000000000000D9 :1057D00000000000000000000000000000000000C9 @@ -9742,9 +9742,9 @@ :1060A00000000000000000000000000000000000F0 :1060B0000000000000000000000000000080000060 :1060C00000000000000000000000000000000000D0 -:1060D00000000000000000000000000000000000C0 +:1060D00000000000000800000000000000000000B8 :1060E00000000000000000000000000000000000B0 -:1060F00000000000000000000000000000000000A0 +:1060F000000000000084000000000000000000001C :10610000000000000000000000000000000000008F :10611000000000000000000000000000000000007F :10612000000000000000000000000000000000006F @@ -9753,7 +9753,7 @@ :10615000000000000000000000000000000000003F :10616000000000000000000000000000000000002F :10617000000000000000000000000000000000001F -:10618000000000000000000000000000000000000F +:10618000000000000000000500000000000000000A :1061900000000000000000000000000000000000FF :1061A00000080000000000000000000000000000E7 :1061B00000000000000000000000000000000000DF @@ -9988,7 +9988,7 @@ :107000000000000000000000000000000000000080 :107010000000000000000000000000000000000070 :107020000000000000000000000000000000000060 -:107030000000000000000000000000000000000050 +:107030000010000000000000000000000000000040 :107040000000000000000000000000000000000040 :107050000000000000000000000000000000000030 :107060000000000000000000000000000000000020 @@ -10490,7 +10490,7 @@ :108F60000000000000000000000000000000000001 :108F700000000000000000000000000000000000F1 :108F800000000000000000000000000000000000E1 -:108F900000000000000000000000000000000000D1 +:108F900000000000000000000000000000100000C1 :108FA00000000000000000000000000000000000C1 :108FB00000000000000000000000000000000000B1 :108FC00000000000000000000000000000000000A1 @@ -11293,7 +11293,7 @@ :10C19000000000000000000000000000000000009F :10C1A000000000000000000000000000000000008F :10C1B000000000000000000000000000000000007F -:10C1C000000000000400000000000000000000006B +:10C1C000000000000000000000000000000000006F :10C1D000000000000000000000000000000000005F :10C1E000000000000000000000000000000000004F :10C1F000000000000000000000000000000000003F @@ -11513,7 +11513,7 @@ :10CF500000000000000000000000000000000000D1 :10CF600000000000000000000000000000000000C1 :10CF700000000000000000000000000000000000B1 -:10CF80000088000000000000000000000000000019 +:10CF800000000000000000000000000000000000A1 :10CF90000000000000000000000000000000000091 :10CFA0000000000000000000000000000000000081 :10CFB0000000000000000000000000000000000071 @@ -14155,9 +14155,9 @@ :10746000000000000000000000000000000000001C :10747000000000000000000000000000000000000C :1074800000000000000000000000000000000000FC -:1074900000000008000000000000000000000000E4 -:1074A000009000000000000000000000000000004C -:1074B00000000004000000000000000000000000C8 +:1074900000000000000000000000000000000000EC +:1074A00000000000000000000000000000000000DC +:1074B00000000000000000000000000000000000CC :1074C00000000000000000000000000000000000BC :1074D00000000000000000000000000000000000AC :1074E000000000000000000000000000000000009C @@ -14188,7 +14188,7 @@ :10767000000000000000000000000000000000000A :1076800000000000000000000000000000000000FA :1076900000000000000000000000000000000000EA -:1076A00000000000000000000000000000001000CA +:1076A00000000000000000000000000000000000DA :1076B00000000000000000000000000000000000CA :1076C00000000000000000000000000000000000BA :1076D00000000000000000000000000000000000AA @@ -14382,8 +14382,8 @@ :1082900000000000000000000000000000000000DE :1082A00000000000000000000000000000000000CE :1082B00000000000000000000000000000000000BE -:1082C000000020000000000040000000000020002E -:1082D000200000000000000000000000000000007E +:1082C00000000000000000000000000000000000AE +:1082D000000000000000000000000000000000009E :1082E000000000000000000000000000000000008E :1082F000000000000000000000000000000000007E :10830000000000000000000000000000000000006D @@ -14438,17 +14438,17 @@ :10861000000000000000000000000000000000005A :10862000000000000000000000000000000000004A :10863000000000000000000000000000000000003A -:10864000000000000000000000000000080005001D -:1086500008000000100010000000000000000000F2 -:1086600000000000000000000000000000001000FA -:1086700008000000400008000000000000000000AA +:10864000000000000000000000000000000000002A +:10865000000000000000000000000000000000001A +:10866000000000000000000000000000000000000A +:1086700000000000000000000000000000000000FA :1086800000000000000000000000000000000000EA :1086900000000000000000000000000000000000DA :1086A00000000000000000000000000000000000CA :1086B00000000000000000000000000000000000BA :1086C00000000000000000000000000000000000AA :1086D000000000000000000000000000000000009A -:1086E0000000000008000000000000000000000082 +:1086E000000000000000000000000000000000008A :1086F000000000000000000000000000000000007A :108700000000000000000000000000000000000069 :108710000000000000000000000000000000000059 @@ -14471,10 +14471,10 @@ :108820000000000000000000000000000000000048 :108830000000000000000000000000000000000038 :108840000000000000000000000000000000000028 -:1088500000000000000000004100000000000000D7 -:1088600000000000080008000000000000000000F8 -:1088700000000000000000004100000000000000B7 -:1088800000000000080008000000000000000000D8 +:108850000000000000000000000000000000000018 +:108860000000000000000000000000000000000008 +:1088700000000000000000000000000000000000F8 +:1088800000000000000000000000000000000000E8 :1088900000000000000000000000000000000000D8 :1088A00000000000000000000000000000000000C8 :1088B00000000000000000000000000000000000B8 @@ -14625,41 +14625,41 @@ :1091C000000000000000000000000000000000009F :1091D000000000000000000000000000000000008F :1091E000000000000000000000000000000000007F -:1091F000000000000000000020000000200020000F -:1092000020008400000000000000000000000000BA +:1091F000000000000000000000000000000000006F +:10920000000000000000000000000000000000005E :10921000000000000000000000000000000000004E :10922000000000000000000000000000000000003E -:109230000000000000000008000100000000000025 +:10923000000000000000000000000000000000002E :10924000000000000000000000000000000000001E :10925000000000000000000000000000000000000E :1092600000000000000000000000000000000000FE :1092700000000000000000000000000000000000EE -:1092800000000000000000000000000020000000BE +:1092800000000000000000000000000000000000DE :1092900000000000000000000000000000000000CE :1092A00000000000000000000000000000000000BE -:1092B00000000000000000000001000000000000AD +:1092B00000000000000000000000000000000000AE :1092C000000000000000000000000000000000009E :1092D000000000000000000000000000000000008E :1092E000000000000000000000000000000000007E :1092F000000000000000000000000000000000006E :10930000000000000000000000000000000000005D -:1093100000000000000000000000008000000000CD +:10931000000000000000000000000000000000004D :10932000000000000000000000000000000000003D -:1093300000000000000000000000008000000000AD +:10933000000000000000000000000000000000002D :10934000000000000000000000000000000000001D :10935000000000000000000000000000000000000D :1093600000000000000000000000000000000000FD :1093700000000000000000000000000000000000ED -:109380000000000000000000000000000084000059 -:1093900000000000000000000000000000080000C5 +:1093800000000000000000000000000000000000DD +:1093900000000000000000000000000000000000CD :1093A00000000000000000000000000000000000BD -:1093B00000000000000000000000000000040000A9 +:1093B00000000000000000000000000000000000AD :1093C000000000000000000000000000000000009D :1093D000000000000000000000000000000000008D :1093E000000000000000000000000000000000007D :1093F000000000000000000000000000000000006D :10940000000000000000000000000000000000005C -:109410000000000000000000000000000000200824 +:10941000000000000000000000000000000000004C :10942000000000000000000000000000000000003C :10943000000000000000000000000000000000002C :10944000000000000000000000000000000000001C @@ -14668,33 +14668,33 @@ :1094700000000000000000000000000000000000EC :1094800000000000000000000000000000000000DC :1094900000000000000000000000000000000000CC -:1094A000800000000000000000000000000000003C +:1094A00000000000000000000000000000000000BC :1094B00000000000000000000000000000000000AC :1094C000000000000000000000000000000000009C :1094D000000000000000000000000000000000008C :1094E000000000000000000000000000000000007C :1094F000000000000000000000000000000000006C -:1095000000000000820000008200820082008200D1 -:10951000820082000800000008008200080082002B -:10952000820082008200C0008200A0008200000051 -:1095300082000000000000000000000000000000A9 +:10950000000000000000000000000000000000005B +:10951000000000000000000000000000000000004B +:10952000000000000000000000000000000000003B +:10953000000000000000000000000000000000002B :10954000000000000000000000000000000000001B :10955000000000000000000000000000000000000B :1095600000000000000000000000000000000000FB :1095700000000000000000000000000000000000EB :1095800000000000000000000000000000000000DB -:1095900008000800000005000500000008000000A9 +:1095900000000000000000000000000000000000CB :1095A00000000000000000000000000000000000BB :1095B00000000000000000000000000000000000AB :1095C000000000000000000000000000000000009B :1095D000000000000000000000000000000000008B :1095E000000000000000000000000000000000007B :1095F000000000000000000000000000000000006B -:109600000000000000000000080082000800840044 -:10961000C00000001000000000000000000000007A -:10962000000000000800000008000000080084009E -:109630000000080000000000000000000000000022 -:109640000000000000000000000100000000000019 +:10960000000000000000000000000000000000005A +:10961000000000000000000000000000000000004A +:10962000000000000000000000000000000000003A +:10963000000000000000000000000000000000002A +:10964000000000000000000000000000000000001A :10965000000000000000000000000000000000000A :1096600000000000000000000000000000000000FA :1096700000000000000000000000000000000000EA @@ -14707,9 +14707,9 @@ :1096E000000000000000000000000000000000007A :1096F000000000000000000000000000000000006A :109700000000000000000000000000000000000059 -:1097100090000800080008000000000000000000A1 -:109720000000000000000000000008000000000031 -:109730009000080008008400000000000000000005 +:109710000000000000000000000000000000000049 +:109720000000000000000000000000000000000039 +:109730000000000000000000000000000000000029 :109740000000000000000000000000000000000019 :109750000000000000000000000000000000000009 :1097600000000000000000000000000000000000F9 @@ -14723,75 +14723,75 @@ :1097E0000000000000000000000000000000000079 :1097F0000000000000000000000000000000000069 :109800000000000000000000000000000000000058 -:1098100000010001000100C00001000100C0004182 -:1098200000009101004000020001400100C0000062 -:1098300000010001000100C00001000100C0004162 -:1098400000009101004000200001400100C0000024 +:109810000000000000000000000000000000000048 +:109820000000000000000000000000000000000038 +:109830000000000000000000000000000000000028 +:109840000000000000000000000000000000000018 :109850000000000000000000000000000000000008 :1098600000000000000000000000000000000000F8 :1098700000000000000000000000000000000000E8 :1098800000000000000000000000000000000000D8 -:10989000000000410041004100C00041004100853E -:1098A000204100402041000000800041804100C074 -:1098B000000000410041004100C00041004100851E -:1098C000204100402041000000000041804100C0D4 +:1098900000000000000000000000000000000000C8 +:1098A00000000000000000000000000000000000B8 +:1098B00000000000000000000000000000000000A8 +:1098C0000000000000000000000000000000000098 :1098D0000000000000000000000000000000000088 :1098E0000000000000000000000000000000000078 :1098F0000000000000000000000000000000000068 :109900000000000000000000000000000000000057 -:1099100000000000410003000000008041008300BF -:109920000000050020000200008090004100C100FE -:1099300000C080004100030000000080410083005F -:1099400000000500200002800080C0004100C1002E -:1099500000C08000000000000000000000000000C7 +:109910000000000000000000000000000000000047 +:109920000000000000000000000000000000000037 +:109930000000000000000000000000000000000027 +:109940000000000000000000000000000000000017 +:109950000000000000000000000000000000000007 :1099600000000000000000000000000000000000F7 :1099700000000000000000000000000000000000E7 :1099800000000000000000000000000000000000D7 -:1099900000000000000001000100000000C0010004 -:1099A000C00000000000210021080082C100410029 -:1099B000C1000082820001000100000000C001001F -:1099C000C00000000000210021040082C00041000E -:1099D000C1000082820000000000000000000000C2 +:1099900000000000000000000000000000000000C7 +:1099A00000000000000000000000000000000000B7 +:1099B00000000000000000000000000000000000A7 +:1099C0000000000000000000000000000000000097 +:1099D0000000000000000000000000000000000087 :1099E0000000000000000000000000000000000077 :1099F0000000000000000000000000000000000067 :109A00000000000000000000000000000000000056 -:109A1000000000000000000000C00001C0C1000004 -:109A20000000000100C0C0830005000100C100006B -:109A3000000000010000000000C00001C0C10000E3 -:109A40000000000100C0C0030005000100C10000CB -:109A50000000000100000000000000000000000005 +:109A10000000000000000000000000000000000046 +:109A20000000000000000000000000000000000036 +:109A30000000000000000000000000000000000026 +:109A40000000000000000000000000000000000016 +:109A50000000000000000000000000000000000006 :109A600000000000000000000000000000000000F6 :109A700000000000000000000000000000000000E6 :109A800000000000000000000000000000000000D6 -:109A9000000000000000000000000080004180C1C4 -:109AA0000000000000410083808200C1004100C12D -:109AB000000000000041004000000080004180C123 -:109AC0000000000000410083808200C1004100C10D -:109AD0000000000000410040000000000000000005 +:109A900000000000000000000000000000000000C6 +:109AA00000000000000000000000000000000000B6 +:109AB00000000000000000000000000000000000A6 +:109AC0000000000000000000000000000000000096 +:109AD0000000000000000000000000000000000086 :109AE0000000000000000000000000000000000076 :109AF0000000000000000000000000000000000066 :109B00000000000000000000000000000000000055 -:109B1000000000000000000000000000C100800004 -:109B200080C100004140800210004100C1C180009E -:109B3000800200004100000080004100C100800060 -:109B400080C100004140800010004100C141000080 -:109B50008002000041000000800041000000000081 +:109B10000000000000000000000000000000000045 +:109B20000000000000000000000000000000000035 +:109B30000000000000000000000000000000000025 +:109B40000000000000000000000000000000000015 +:109B50000000000000000000000000000000000005 :109B600000000000000000000000000000000000F5 :109B700000000000000000000000000000000000E5 :109B800000000000000000000000000000000000D5 -:109B90000000000000000000000000000000C10004 -:109BA0004000C0C100000100200183000100C1038A -:109BB0000400C001000001000000C0000100C1005D -:109BC0004000C0C100000100200083000100C1412D -:109BD0009000C001000001000000C0000100000072 +:109B900000000000000000000000000000000000C5 +:109BA00000000000000000000000000000000000B5 +:109BB00000000000000000000000000000000000A5 +:109BC0000000000000000000000000000000000095 +:109BD0000000000000000000000000000000000085 :109BE0000000000000000000000000000000000075 :109BF0000000000000000000000000000000000065 :109C00000000000000000000000000000000000054 :109C10000000000000000000000000000000000044 -:109C200000000000000000420000000000000006EC -:109C300081120088070048000000000000000000BA -:109C400000000000000000420000000000000006CC -:109C5000811200880700480000000000000000009A +:109C20000000000000000000000000000000000034 +:109C30000000000000000000000000000000000024 +:109C40000000000000000000000000000000000014 +:109C50000000000000000000000000000000000004 :109C600000000000000000000000000000000000F4 :109C700000000000000000000000000000000000E4 :109C800000000000000000000000000000000000D4 @@ -14812,24 +14812,24 @@ :109D700000000000000000000000000000000000E3 :109D800000000000000000000000000000000000D3 :109D900000000000000000000000000000000000C3 -:109DA000000000000000757B0000000000000000C3 +:109DA00000000000000000000000000000000000B3 :109DB00000000000000000000000000000000000A3 -:109DC00000000000DEAE757B000000000000000017 +:109DC0000000000000000000000000000000000093 :109DD0000000000000000000000000000000000083 -:109DE00000000000DEAE00000000000000000000E7 +:109DE0000000000000000000000000000000000073 :109DF0000000000000000000000000000000000063 :109E00000000000000000000000000000000000052 :109E10000000000000000000000000000000000042 -:109E2000000000000000000060C603000000000009 -:109E300000000031E0000000000000000C00000005 -:109E40000000000000C0630660C6030000000000C0 -:109E500000000031E0000000000000000C000000E5 -:109E60000000000000C063060000000000000000C9 +:109E20000000000000000000000000000000000032 +:109E30000000000000000000000000000000000022 +:109E40000000000000000000000000000000000012 +:109E50000000000000000000000000000000000002 +:109E600000000000000000000000000000000000F2 :109E700000000000000000000000000000000000E2 :109E800000000000000000000000000000000000D2 :109E900000000000000000000000000000000000C2 -:109EA0000000000000000000000020002000200052 -:109EB00020000000000000000000000084000000FE +:109EA00000000000000000000000000000000000B2 +:109EB00000000000000000000000000000000000A2 :109EC0000000000000000000000000000000000092 :109ED0000000000000000000000000000000000082 :109EE0000000000000000000000000000000000072 @@ -14838,7 +14838,7 @@ :109F10000000000000000000000000000000000041 :109F20000000000000000000000000000000000031 :109F30000000000000000000000000000000000021 -:109F4000050000000000000000000000000000000C +:109F40000000000000000000000000000000000011 :109F50000000000000000000000000000000000001 :109F600000000000000000000000000000000000F1 :109F700000000000000000000000000000000000E1 @@ -14869,23 +14869,23 @@ :10A10000000000000000000000000000000000004F :10A11000000000000000000000000000000000003F :10A12000000000000000000000000000000000002F -:10A130000000000000000000000008000800080007 +:10A13000000000000000000000000000000000001F :10A14000000000000000000000000000000000000F -:10A1500000000300000008000000080003000300E6 -:10A1600000000300000000000000000000000000EC +:10A1500000000000000000000000000000000000FF +:10A1600000000000000000000000000000000000EF :10A1700000000000000000000000000000000000DF :10A1800000000000000000000000000000000000CF :10A1900000000000000000000000000000000000BF :10A1A00000000000000000000000000000000000AF -:10A1B0000000000000000800000000000000000097 -:10A1C0000000000008000000000000000000400047 -:10A1D00040000000400008000000000000000000F7 +:10A1B000000000000000000000000000000000009F +:10A1C000000000000000000000000000000000008F +:10A1D000000000000000000000000000000000007F :10A1E000000000000000000000000000000000006F :10A1F000000000000000000000000000000000005F :10A20000000000000000000000000000000000004E :10A21000000000000000000000000000000000003E :10A22000000000000000000000000000000000002E -:10A230000000000000000000000008000000000016 +:10A23000000000000000000000000000000000001E :10A24000000000000000000000000000000000000E :10A2500000000000000000000000000000000000FE :10A2600000000000000000000000000000000000EE @@ -14902,17 +14902,17 @@ :10A31000000000000000000000000000000000003D :10A32000000000000000000000000000000000002D :10A33000000000000000000000000000000000001D -:10A3400000000000000000002100000003000000E9 -:10A3500021000000000000000000000000000000DC -:10A3600000000000000000002100000003000800C1 +:10A34000000000000000000000000000000000000D +:10A3500000000000000000000000000000000000FD +:10A3600000000000000000000000000000000000ED :10A3700000000000000000000000000000000000DD :10A3800000000000000000000000000000000000CD :10A3900000000000000000000000000000000000BD :10A3A00000000000000000000000000000000000AD :10A3B000000000000000000000000000000000009D -:10A3C000000008000000000000000800000000007D +:10A3C000000000000000000000000000000000008D :10A3D000000000000000000000000000000000007D -:10A3E0000000080000000000000000000000000065 +:10A3E000000000000000000000000000000000006D :10A3F000000000000000000000000000000000005D :10A40000000000000000000000000000000000004C :10A41000000000000000000000000000000000003C @@ -15114,7 +15114,7 @@ :10B0500000000000000000000000000000000000F0 :10B0600000000000000000000000000000000000E0 :10B0700000000000000000000000000000000000D0 -:10B080000000A00000000000000000000000000020 +:10B0800000000000000000000000000000000000C0 :10B0900000000000000000000000000000000000B0 :10B0A00000000000000000000000000000000000A0 :10B0B0000000000000000000000000000000000090 @@ -15162,7 +15162,7 @@ :10B3500000000000000000000000000000000000ED :10B3600000000000000000000000000000000000DD :10B3700000000000000000000000000000000000CD -:10B38000000000000000400000000000000000007D +:10B3800000000000000000000000000000000000BD :10B3900000000000000000000000000000000000AD :10B3A000000000000000000000000000000000009D :10B3B000000000000000000000000000000000008D @@ -18473,7 +18473,7 @@ :10823000000000000000000000000000000000003E :10824000000000000000000000000000000000002E :10825000000000000000000000000000000000001E -:10826000000000000000000000000000009000007E +:10826000000000000000000000000000208000006E :1082700000000000000000000000000000000000FE :1082800000000000000000000000000000000000EE :1082900000000000000000000000000000000000DE @@ -18481,8 +18481,8 @@ :1082B00000000000000000000000000000000000BE :1082C00000000000000000000000000000000000AE :1082D000000000000000000000000000000000009E -:1082E000000000000000000000000000000001008D -:1082F000000001000000000000000000000000007D +:1082E000000000000000000000000000000000008E +:1082F000000000000000000000000000000000007E :10830000000000000000000000000000000000006D :10831000000000000000000000000000000000005D :10832000000000000000000000000000000000004D @@ -18494,14 +18494,14 @@ :1083800000000000000000000000000000000000ED :1083900000000000000000000000000000000000DD :1083A00000000000000000000000000000000000CD -:1083B000200000000000000000004000000000005D -:1083C00020002000000020000000200020002000ED -:1083D00020000000C000000000002000000000009D -:1083E00020002000000020000000200020002000CD -:1083F0000000200088002000000000002000000095 -:10840000000020002000000020000000000000000C -:1084100020000000000020000000000020000000FC -:108420000000200020000000200000008800000064 +:1083B000000000002000200000000000200020003D +:1083C0002000000020002000C0000000200020004D +:1083D000000000002000200000000000200020001D +:1083E0008800000020002000200000002000200065 +:1083F0000000880000002000200000000000200095 +:1084000020000000000020002000000000002000EC +:1084100020000000000000002000000000002000FC +:108420002000000000002000000088000000200064 :10843000200000000000000000000000000000001C :10844000000000000000000000000000000000002C :10845000000000000000000000000000000000001C @@ -18530,7 +18530,7 @@ :1085C00000000000000000000000000000000000AB :1085D000000000000000000000000000000000009B :1085E000000000000000000000000000000000008B -:1085F0000000000000000000000300000000000078 +:1085F000000000000000000000000000000000007B :10860000000000000000000000000000000000006A :10861000000000000000000000000000000000005A :10862000000000000000000000000000000000004A @@ -18540,16 +18540,16 @@ :10866000000000000000000000000000000000000A :1086700000000000000000000000000000000000FA :1086800000000000000000000000000000000000EA -:1086900000000000000000000000000000000000DA +:1086900000000000000000000000000008000000D2 :1086A00000000000000000000000000000000000CA :1086B00000000000000000000000000000000000BA -:1086C0000000000000000000000000000000A0000A -:1086D0000800000000000000000000000000820010 -:1086E0008200000000000000000000000000820086 +:1086C00000000000080000000000000000000000A2 +:1086D0000000000082000000000000008400000094 +:1086E0000000000000000000000000000800000082 :1086F000000000000000000000000000000000007A -:108700000000000000000000000000000000000069 -:108710000000000000000000080000000000080049 -:10872000C000000000000000A00000000000820067 +:108700000000000000000000000000000000080061 +:108710000000000000000800000000000000000051 +:10872000000008000000A0000000000000000000A1 :108730000000000000000000000000000000000039 :108740000000000000000000000000000000000029 :108750000000000000000000000000000000000019 @@ -18559,14 +18559,14 @@ :1087900000000000000000000000000000000000D9 :1087A00000000000000000000000000000000000C9 :1087B00000000000000000000000000000000000B9 -:1087C0000000080008000000000008000000000091 -:1087D0000000000000000000A000000000000000F9 -:1087E0000000000000000000000000000011000078 +:1087C0000000000082000000000000000000000027 +:1087D0000000000000000000080000000000000091 +:1087E0000000A0000000C000C0000000C0000000A9 :1087F0000000000000000000000000000000000079 :108800000000000000000000000000000000000068 -:108810000000000000000000000000000000080050 -:10882000000000000800000000000000000000043C -:108830000000000000000000000000000000000038 +:108810000000000000000000000000000000000058 +:1088200000000000000000000000000000009000B8 +:1088300000000000C00082000000000000000000F6 :108840000000000000000000000000000000000028 :108850000000000000000000000000000000000018 :108860000000000000000000000000000000000008 @@ -18575,14 +18575,14 @@ :1088900000000000000000000000000000000000D8 :1088A00000000000000000000000000000000000C8 :1088B00000000000000000000000000000000000B8 -:1088C0000000000000008200000084000000C000E2 -:1088D00000000000C00000000000000000000000D8 +:1088C0000000000000000000000082000000000026 +:1088D0000000000000000000000000000000080090 :1088E0000000000000000000000000000000000088 :1088F0000000000000000000000000000000000078 :108900000000000000000000000000000000000067 :108910000000000000000000000000000000000057 -:10892000000000000000000008000000000000003F -:1089300000000000000000008200000000000000B5 +:1089200000000000000082000000000000000000C5 +:10893000000000000000000000000000080000002F :108940000000000000000000000000000000000027 :108950000000000000000000000000000000000017 :108960000000000000000000000000000000000007 @@ -18592,38 +18592,38 @@ :1089A00000000000000000000000000000000000C7 :1089B00000000000000000000000000000000000B7 :1089C00000000000000000000000000000000000A7 -:1089D0000000000000000000000000000000000097 +:1089D000000088000000000000000000000000000F :1089E0000000000000000000000000000000000087 :1089F0000000000000000000000000000000000077 :108A00000000000000000000000000000000000066 :108A10000000000000000000000000000000000056 :108A20000000000000000000000000000000000046 :108A30000000000000000000000000000000000036 -:108A40000000000020000000000000000000000006 +:108A40000000000000000000000000000000000026 :108A50000000000000000000000000000000000016 -:108A60000000000000000000000000000000000006 -:108A700000000000000000000000200000000000D6 -:108A800000000000000000000000000000000000E6 +:108A600000000000000000000000200000000000E6 +:108A700000000000000000000000400000000000B6 +:108A800000000000000000000000000300000000E3 :108A900000000000000000000000000000000000D6 :108AA00000000000000000000000000000000000C6 -:108AB00000000000030000000000000000000000B3 -:108AC00000000000000000000000000000000000A6 -:108AD0000000000080008000000000100000000086 +:108AB0000000000040000000000000000000000076 +:108AC0000000000040000000000000000000000066 +:108AD0000000000000008000000000030000000013 :108AE0000000000000000000000000000000000086 -:108AF00000000003000000000000000000008000F3 -:108B00000000001000000000000000000000000055 +:108AF00000000020000000000000000000008000D6 +:108B00000000000300000000000000000000000062 :108B10000000000000000000000000000000000055 :108B20000000000000000000000000000000000045 -:108B300000000000000080000000000000000000B5 -:108B40000000000000008000800000200003000002 -:108B5000000000000000020004000000000100000E +:108B300000000000000000008000000000000000B5 +:108B4000000000000000800080000000000800001D +:108B50000000000000009000020000000001000082 :108B60000000000000000000000000000000000005 -:108B70000000000000000000000000000000900065 -:108B800020000000000100000000000000000000C4 +:108B70000000000000000000000000000000840071 +:108B800002000000000000000000000000000000E3 :108B900000000000000000000000000000000000D5 :108BA00000000000000000000000000000000000C5 -:108BB0000000000000000000100040000000000065 -:108BC0000000000000000000400004000000000160 +:108BB0000000000000000000820020000000000013 +:108BC00000000000000000000200020000000001A0 :108BD0000000000000000000000000000000000095 :108BE0000000000000000000000000000000000085 :108BF0000000000000000000000000000000000075 @@ -18640,15 +18640,15 @@ :108CA00000000000000000000000000000000000C4 :108CB00000000000000000000000000000000000B4 :108CC00000000000000000000000000000000000A4 -:108CD0000000000000000000000000000000000094 +:108CD0000000000000000000000000000010000084 :108CE000000005000000000000000000000000007F -:108CF0000000000000400000000011000000000023 -:108D000000000000004000400000030000000000E0 +:108CF0000000000000000000000040000000000034 +:108D00000000000000000020000003000000000040 :108D10000000000000020000000000000000000051 :108D20000000000000000000000000000000000043 -:108D30000000000000000000000000000000000033 -:108D400000000000080000000000000000000040DB -:108D500000000000400000000000000000000000D3 +:108D3000000000000000000000000000000000052E +:108D4000000000000800000000000000000000001B +:108D5000000000000500000000000000000000010D :108D60000000000000000000000000000000000003 :108D700000000000000000000000000000000000F3 :108D800000000000000000000000000001000000E2 @@ -18657,14 +18657,14 @@ :108DB00000000000000000000000000000000000B3 :108DC00000000000000001000000000000000000A2 :108DD0000000000000000000000000000000000093 -:108DE000600600900900C843000000000000000079 -:108DF0000000000000000000008100000900C80021 -:108E00000000000000000000818100900900C843BC +:108DE000818100500A00900900000000000000008E +:108DF0000000000000000000004100000A00900098 +:108E00000000000000000000884100500A009009A6 :108E10000000000000000000000000000000000052 :108E20000000000000000000000000000000000042 :108E30000000000000000000000000000000000032 -:108E40000000884100900900C843000000000000B5 -:108E50000000818100900900C8430000000000006C +:108E40000000818100500A0090090000000000002D +:108E50000000884100500A00900900000000000056 :108E60000000000000000000000000000000000002 :108E700000000000000000000000000000000000F2 :108E800000000000000000000000000000000000E2 @@ -18681,22 +18681,22 @@ :108F30000000000000000000000000000000000031 :108F4000000000000000001000001401900200006A :108F50000000000000000010000014019402000056 -:108F60000000000000000040030810C002000000E4 +:108F60000000000000000040032004C002000000D8 :108F700000000000000000000000000000000040B1 -:108F80000308000000000000000000000000004096 -:108F9000030810C0020000000000000000000000F4 +:108F8000032000000000000000000000000000407E +:108F9000032004C0020000000000000000000000E8 :108FA000020000000000004000000000000000007F :108FB000020000000000004000000000000000006F -:108FC00000000000000000000040030810C0020084 -:108FD00000000000000000000040030810C0020074 -:108FE000000000000000000008020008100040100F +:108FC00000000000000000000040032004C0020078 +:108FD00000000000000000000040032004C0020068 +:108FE0000000000000000000080200200400401003 :108FF0000000000000000000000000000000000071 -:10900000080200080000000000000000000000004E -:1090100008020008100040100000000000000000DE +:109000000802002000000000000000000000000036 +:1090100008020020040040100000000000000000D2 :109020000000000000000000000000000000000040 :109030000000000000000000000000000000000030 -:1090400000000000000000000000080200081000FE -:10905000401000000000000000000802000810009E +:1090400000000000000000000000080200200400F2 +:109050004010000000000000000008020020040092 :1090600040100000000000000000000000000000B0 :1090700000000000000000000000000000000000F0 :1090800000000000000000000000000000000000E0 @@ -18738,13 +18738,13 @@ :1092C000000000000000000000000000000000009E :1092D00000000000000000909A0000000000000064 :1092E00000000000000000909A0000000000000054 -:1092F00000002000000000002000200000002000EE -:10930000200020000000000000000000000000001D -:1093100000002000000000000000200000002000ED -:10932000200000000000000000000000000000001D -:1093300000000000200000000000000020000000ED -:1093400020002000000000000000000000000000DD -:1093500000000000200000000000000020000000CD +:1092F000000000000000000020000000000000004E +:10930000000000000000000000000000000000005D +:10931000000000000000000000000000000000004D +:10932000000000000000000000000000000000003D +:10933000000000000000000000000000000000002D +:10934000000000000000000000000000000000001D +:1093500000000000000000000000000040000000CD :1093600000000000000000000000000000000000FD :1093700000000000000000000000000000000000ED :1093800000000000000000000000000000000000DD @@ -18773,22 +18773,22 @@ :1094F000000000000000000000000000000000006C :10950000000000000000000000000000000000005B :10951000000000000000000000000000000000004B -:10952000000000000000000000000000000000003B +:109520000000000002000000000000000000000039 :10953000000000000000000000000000000000002B :10954000000000000000000000000000000000001B :10955000000000000000000000000000000000000B :1095600000000000000000000000000000000000FB :1095700000000000000000000000000000000000EB -:1095800000000000000000000000000000000000DB -:1095900000000800000000000000000000000300C0 -:1095A00000000000000000000000000000000000BB +:1095800000000000000008000000000000000300D0 +:1095900000000000020000000000000000000000C9 +:1095A00000000800000000000000000000000000B3 :1095B00000000000000000000000000000000000AB :1095C000000000000000000000000000000000009B :1095D000000000000000000000000000000000008B -:1095E000000000000000000000000800080000006B +:1095E000000000000000000000000000000000007B :1095F000000000000000000000000000000000006B -:10960000000000000000000000000000000000005A -:109610000800000000000000000000000000000042 +:10960000100000000000000000000000000000004A +:10961000000000000000000000000000000000004A :10962000000000000000000000000000000000003A :10963000000000000000000000000000000000002A :10964000000000000000000000000000000000001A @@ -18811,15 +18811,15 @@ :109750000000000000000000000000000000000009 :109760000000000000000080000000000000000079 :1097700000000000000000000000000000000000E9 -:1097800000000000000000000000210000000000B8 +:109780000000000000001000000000204000000069 :1097900000000000000000000000000000000000C9 -:1097A00000000000000000000000080000000000B1 -:1097B000000005000800000000000000000000009C +:1097A00000000000000000000000000000000000B9 +:1097B00000000000000000000000000000000000A9 :1097C0000000000000000000000000000000000099 :1097D0000000000000000000000000000000000089 -:1097E0000000000000000000004000000000000039 -:1097F0000000000000000000000000000000000069 -:109800000000000008000000000000000000000050 +:1097E0000000000000000000004000000020000019 +:1097F0000000000000000000000000000000000465 +:109800000000000000000000000000000000000058 :109810000000000000000000000000000000000048 :109820000000000000000000000000000000000038 :109830000000000000000000000000000000000028 @@ -18981,12 +18981,12 @@ :10A1F000000000000000000000000000000000005F :10A20000000000000000000000000000000000004E :10A21000000000000000000000000000000000003E -:10A2200000000000000000004000C000000000002E -:10A2300000000000200020000000000000000000DE -:10A240000000000000000000000000000000C0004E -:10A250004000C00000002000C00000000000C0005E -:10A260000000C0000000000000000000000000002E -:10A27000200020002000000020002000000000003E +:10A22000000000000000000000000000000000002E +:10A23000000000000000000000000000000000001E +:10A24000000000000000000000000000000000000E +:10A2500000000000000000000000000000000000FE +:10A2600000000000000000000000000000000000EE +:10A2700000000000000000000000000000000000DE :10A2800000000000000000000000000000000000CE :10A2900000000000000000000000000000000000BE :10A2A00000000000000000000000000000000000AE @@ -19006,7 +19006,7 @@ :10A3800000000000000000000000000000000000CD :10A3900000000000000000000000000000000000BD :10A3A000000000000000000000000000001000009D -:10A3B000000000000000400000000000000000005D +:10A3B000000000000000000000000000000000009D :10A3C000000000000000000000000000000000008D :10A3D000000000000000000000000000000000007D :10A3E000000000000000000000000000000000006D @@ -19021,17 +19021,17 @@ :10A4700000000000000000000000000000000000DC :10A4800000000000000000000000000000000000CC :10A4900000000000000000000000000000000000BC -:10A4A00008000000000000000000000000000000A4 +:10A4A00000000000000000000000000000000000AC :10A4B000000000000000000000000000000000009C :10A4C000000000000000000000000000000000008C -:10A4D0000000000000000000000000000000080074 +:10A4D000000000000000000000000000000000007C :10A4E000000000000000000000000000000000006C :10A4F000000000000000000000000000000000005C :10A50000000000000000000000000000000000004B :10A51000000000000000000000000000000000003B :10A52000000000000000000000000000000000002B :10A53000000000000000000000000000000000001B -:10A540000000000000000000000000008400000087 +:10A54000000000000000000000000000000000000B :10A5500000000000000000000000000000000000FB :10A5600000000000000000000000000000000000EB :10A5700000000000000000000000000000000000DB @@ -19040,19 +19040,19 @@ :10A5A00000000000000000000000000000000000AB :10A5B000000000000000000000000000000000009B :10A5C000000000000000000000000000000000008B -:10A5D000000008000000080008000000050010004E -:10A5E0000500100000000000000000000000000056 +:10A5D000000000000000000000000000000000007B +:10A5E000000000000000000000000000000000006B :10A5F000000000000000000000000000000000005B :10A60000000000000000000000000000000000004A -:10A6100000000800000000000000000041000800E9 -:10A620000800080000000000080000000000000012 +:10A61000000000000000000000000000000000003A +:10A62000000000000000000000000000000000002A :10A63000000000000000000000000000000000001A :10A64000000000000000000000000000000000000A -:10A6500000000000000000000800000000000000F2 -:10A66000000000000000C00000000000000000002A +:10A6500000000000000000000000000000000000FA +:10A6600000000000000000000000000000000000EA :10A6700000000000000000000000000000000000DA :10A6800000000000000000000000000000000000CA -:10A690000000000000000000A0000000000000001A +:10A6900000000000000000000000000000000000BA :10A6A00000000000000000000000000000000000AA :10A6B000000000000000000000000000000000009A :10A6C000000000000000000000000000000000008A @@ -19068,13 +19068,13 @@ :10A7600000000000000000000000000000000000E9 :10A7700000000000000000000000000000000000D9 :10A7800000000000000000000000000000000000C9 -:10A7900000000000080000000000000000000000B1 +:10A7900000000000000000000000000000000000B9 :10A7A00000000000000000000000000000000000A9 :10A7B0000000000000000000000000000000000099 :10A7C0000000000000000000000000000000000089 :10A7D0000000000000000000000000000000000079 -:10A7E0000000000000000300000000000000000066 -:10A7F0000000410000000000000000000000000018 +:10A7E0000000000000000000000000000000000069 +:10A7F0000000000000000000000000000000000059 :10A800000000000000000000000000000000000048 :10A810000000000000000000000000000000000038 :10A820000000000000000000000000000000000028 @@ -19233,12 +19233,12 @@ :10B1B000000000000000000000000000000000008F :10B1C000000000000000000000000000000000007F :10B1D000000000000000000000000000000000006F -:10B1E00000000000000088008800000020004000EF -:10B1F000880088000000200000000000000000001F -:10B20000000000000000200000000000A00020005E -:10B2100084000000100088000000C0008800880042 -:10B220000000880088000003200000008800000063 -:10B2300020008800880000000000000000000000DE +:10B1E000000000000000000000000000000000005F +:10B1F000000000000000000000000000000000004F +:10B20000000000000000000000000000000000003E +:10B21000000000020000000000000000000000002C +:10B22000000000000002000000000000000000001C +:10B23000000000000000000000000000000000000E :10B2400000000000000000000000000000000000FE :10B2500000000000000000000000000000000000EE :10B2600000000000000000000000000000000000DE @@ -19247,65 +19247,65 @@ :10B2900000000000000000000000000000000000AE :10B2A000000000000000000000000000000000009E :10B2B000000000000000000000000000000000008E -:10B2C000000000000000000000000000000000007E +:10B2C000000000000000000040000000000000003E :10B2D000000000000000000000000000000000006E :10B2E000000000000000000000000000000000005E :10B2F000000000000000000000000000000000004E :10B30000000000000000000000000000000000003D :10B31000000000000000000000000000000000002D -:10B3200000000000000000002008000000000000F5 +:10B32000000000000000000000000000000000001D :10B33000000000000000000000000000000000000D :10B3400000000000000000000000000000000000FD :10B3500000000000000000000000000000000000ED -:10B3600000000000000000000000100000000000CD +:10B3600000000000000000000000000000000000DD :10B3700000000000000000000000000000000000CD -:10B3800000000084008400000000000000000000B5 -:10B390000090200005000000009000000000000068 -:10B3A000000000000000000000008001000000001C +:10B3800000000000000000000000000000000000BD +:10B3900000000000000000000000000000000000AD +:10B3A000000000000000000000000000000000009D :10B3B000000000000000000000000000000000008D :10B3C000000000000000000000000000000000007D :10B3D000000000000000000000000000000000006D -:10B3E00000000000000000000000000080000000DD -:10B3F0000000000000000000000000080000000045 +:10B3E000000000000000000000000000000000005D +:10B3F0000000000000000000000000000400000049 :10B40000000000000000000000000000000000003C -:10B410000000000000030009000000000000000020 +:10B41000000000000000000000000000000000002C :10B42000000000000000000000000000000000001C :10B43000000000000000000000000000000000000C :10B4400000000000000000000000000000000000FC :10B4500000000000000000000000000000000000EC :10B4600000000000000000000000000000000000DC :10B4700000000000000000000000000000000000CC -:10B4800008000000000000000000000000000800AC -:10B490000000080000000000100000000000030091 -:10B4A0000000090000000000000000000000000093 +:10B4800000000000000000000000000000000000BC +:10B4900000000000000000000000000000000000AC +:10B4A000000000000000000000000000000000009C :10B4B000000000000000000000000000000000008C :10B4C000000000000000000000000000000000007C :10B4D000000000000000000000000000000000006C :10B4E000000000000000000000000000000000005C -:10B4F0000000080000000000000000001000000034 -:10B50000080082000000000008000800820000001F -:10B5100082008200C0004000820082008200A00001 -:10B520008400000000008200000000008200A000F3 -:10B5300000000000000000000000080000000800FB -:10B540000000000008000000C00082000800820027 -:10B5500008000800820040000800A00082000000EF -:10B5600008000000000000000000000000000000D3 -:10B5700000000004000000000000000000000000C7 +:10B4F000000000000000000000000000000000004C +:10B50000000000000000000000000000000000003B +:10B51000000000000000000000000000000000002B +:10B52000000000000000000000000000000000001B +:10B53000000000000000000000000000000000000B +:10B5400000000000000000000000000000000000FB +:10B5500000000000000000000000000000000000EB +:10B5600000000000100000000000000000000000CB +:10B5700000000000000000000000000000000000CB :10B5800000000000000000000000000000000000BB :10B5900000000000000000000000000000000000AB -:10B5A0000000000008002100400000000000000032 +:10B5A000000000000000000000000000000000009B :10B5B000000000000000000000000000000000008B :10B5C000000000000000000000000000000000007B :10B5D000000000000000000000000000000000006B :10B5E000000000000000000000000000000000005B -:10B5F0000000000000010000000000080000000042 +:10B5F000000000000000000000000000000000004B :10B60000000000000000000000000000000000003A -:10B610000000A00000008800A00000000000C000A2 -:10B6200082000020000000000000A00000000000D8 -:10B630000000000000000003000000000000000007 -:10B6400000000000000008000000000000000000F2 -:10B6500000000000A0000000080000000000000042 -:10B6600008000800000000000000000000000000CA +:10B61000000000000000000000000000000000002A +:10B62000000000000000000000000000000000001A +:10B63000000000000000000000000000000000000A +:10B6400000000000000000000000000000000000FA +:10B6500000000000000000000000000000000000EA +:10B6600000000000000000000000000000000000DA :10B6700000000000000000000000000000000000CA :10B6800000000000000000000000000000000000BA :10B6900000000000000000000000000000000000AA @@ -19315,14 +19315,14 @@ :10B6D000000000000000000000000000000000006A :10B6E000000000000000000000000000000000005A :10B6F000000000000000000000000000000000004A -:10B700000000000000000000000000000000080031 -:10B710000000000008000800000000000000A00079 -:10B720000800100008000800000000000000A00051 +:10B700000000000000000000000000000000000039 +:10B710000000000000000000000000000000000029 +:10B720000000000000000000000000000000000019 :10B730000000000000000000000000000000000009 :10B7400000000000000000000000000000000000F9 -:10B7500008000800000000000000A0000000C00079 -:10B7600082000000000000000000C0000000000097 -:10B7700000000000000200000000000000000000C7 +:10B7500000000000000000000000000000000000E9 +:10B7600000000000000000000000000000000000D9 +:10B7700000000000000000000000000000000000C9 :10B7800000000000000000000000000000000000B9 :10B7900000000000000000000000000000000000A9 :10B7A0000000000000000000000000000000000099 @@ -19332,78 +19332,78 @@ :10B7E0000000000000000000000000000000000059 :10B7F0000000000000000000000000000000000049 :10B800000000000000000000000000000000000038 -:10B810000000000000000000000000000000000127 -:10B820000001000100C00001000100C00021000073 -:10B830004101004000020001020100C000000000C0 +:10B810000000000000000000000000000000000028 +:10B820000000000000000000000000000000000018 +:10B830000000000000000000000000000000000008 :10B8400000000000000000000000000000000000F8 :10B8500000000000000000000000000000000000E8 -:10B8600000010001000100C00001000100C0004112 -:10B8700000000101004000040001400100C0000080 +:10B8600000000000000000000000000000000000D8 +:10B8700000000000000000000000000000000000C8 :10B8800000000000000000000000000000000000B8 :10B8900000000000000000000000000000000000A8 -:10B8A00000410041004100881141004100C10341B5 -:10B8B000000520410000008000418041008500001B +:10B8A0000000000000000000000000000000000098 +:10B8B0000000000000000000000000000000000088 :10B8C0000000000000000000000000000000000078 :10B8D0000000000000000000000000000000000068 -:10B8E000000000410041004100C0004100410085CE -:10B8F000084100091041000000800041804100C063 +:10B8E0000000000000000000000000000000000058 +:10B8F0000000000000000000000000000000000048 :10B900000000000000000000000000000000000037 :10B910000000000000000000000000000000000027 -:10B92000000041000300000000804100880000008A -:10B930000500A0008200000083004100C1000080DB -:10B940008000000000000000000000000000000077 +:10B920000000000000000000000000000000000017 +:10B930000000000000000000000000000000000007 +:10B9400000000000000000000000000000000000F7 :10B9500000000000000000000000000000000000E7 -:10B96000000000004100030000000080410085004D -:10B970000000080090000200000083004100C100A8 -:10B9800000408000000000000000000000000000F7 +:10B9600000000000000000000000000000000000D7 +:10B9700000000000000000000000000000000000C7 +:10B9800000000000000000000000000000000000B7 :10B9900000000000000000000000000000000000A7 -:10B9A0000000000001000100000000C00100C10013 -:10B9B00000000000020005900082C1004100C100AB -:10B9C00000048200000000000000000000000000F1 +:10B9A0000000000000000000000000000000000097 +:10B9B0000000000000000000000000000000000087 +:10B9C0000000000000000000000000000000000077 :10B9D0000000000000000000000000000000000067 -:10B9E00000000000000001000100000000C0010094 -:10B9F000C00000000100030021400020C000410001 -:10BA0000C1000040820000000000000000000000B3 +:10B9E0000000000000000000000000000000000057 +:10B9F0000000000000000000000000000000000047 +:10BA00000000000000000000000000000000000036 :10BA10000000000000000000000000000000000026 -:10BA200000000000000000C00001C0C100000000D4 -:10BA3000000100C0A0910041000100C10000000011 -:10BA400000010000000000000000000000000000F5 +:10BA20000000000000000000000000000000000016 +:10BA30000000000000000000000000000000000006 +:10BA400000000000000000000000000000000000F6 :10BA500000000000000000000000000000000000E6 -:10BA6000000000000000000000C00001C0C1000094 -:10BA70000000000100C020910041000100C1000051 -:10BA800000000001000000000000000000000000B5 +:10BA600000000000000000000000000000000000D6 +:10BA700000000000000000000000000000000000C6 +:10BA800000000000000000000000000000000000B6 :10BA900000000000000000000000000000000000A6 -:10BAA00000000000000000000080004180C1000094 -:10BAB00000000041008800020041004100C1000078 -:10BAC0000000004100050000000000000000000030 +:10BAA0000000000000000000000000000000000096 +:10BAB0000000000000000000000000000000000086 +:10BAC0000000000000000000000000000000000076 :10BAD0000000000000000000000000000000000066 -:10BAE000000000000000000000000080004180C154 -:10BAF00000000000004100A000020041004100C120 -:10BB000000000000004100400000000000000000B4 +:10BAE0000000000000000000000000000000000056 +:10BAF0000000000000000000000000000000000046 +:10BB00000000000000000000000000000000000035 :10BB10000000000000000000000000000000000025 -:10BB200000000000000000000000C100800080C193 -:10BB3000000041000000C0004100C1410000804001 -:10BB400000004100000080004100000000000000F3 +:10BB20000000000000000000000000000000000015 +:10BB30000000000000000000000000000000000005 +:10BB400000000000000000000000000000000000F5 :10BB500000000000000000000000000000000000E5 -:10BB6000000000000000000000000000C100800094 -:10BB700080C100004140804082004100C14100007E -:10BB800080400000410000008000410000000000F3 +:10BB600000000000000000000000000000000000D5 +:10BB700000000000000000000000000000000000C5 +:10BB800000000000000000000000000000000000B5 :10BB900000000000000000000000000000000000A5 -:10BBA000000000000000000000000000C100400094 -:10BBB000C0C100000100820004000100C1839000A8 -:10BBC000C000000001000000C000010000000000F3 +:10BBA0000000000000000000000000000000000095 +:10BBB0000000000000000000000000000000000085 +:10BBC0000000000000000000000000000000000075 :10BBD0000000000000000000000000000000000065 -:10BBE0000000000000000000000000000000C10094 -:10BBF0004000C0C100000100200083000100C1839B -:10BC00009000C000000001000000C0000100000022 +:10BBE0000000000000000000000000000000000055 +:10BBF0000000000000000000000000000000000045 +:10BC00000000000000000000000000000000000034 :10BC10000000000000000000000000000000000024 :10BC20000000000000000000000000000000000014 -:10BC3000000000000042000000000000000081122F -:10BC4000008807004800000000000000000000001D +:10BC30000000000000000000000000000000000004 +:10BC400000000000000000000000000000000000F4 :10BC500000000000000000000000000000000000E4 :10BC600000000000000000000000000000000000D4 -:10BC70000000000000000042000000000000000082 -:10BC8000811200880700480000000000000000004A +:10BC700000000000000000000000000000000000C4 +:10BC800000000000000000000000000000000000B4 :10BC900000000000000000000000000000000000A4 :10BCA0000000000000000000000000000000000094 :10BCB0000000000000000000000000000000000084 @@ -19422,31 +19422,31 @@ :10BD800000000000000000000000000000000000B3 :10BD900000000000000000000000000000000000A3 :10BDA0000000000000000000000000000000000093 -:10BDB00000000000757B0000000000000000000093 +:10BDB0000000000000000000000000000000000083 :10BDC0000000000000000000000000000000000073 -:10BDD0000000DEAE000000000000000000000000D7 +:10BDD0000000000000000000000000000000000063 :10BDE0000000000000000000000000000000000053 -:10BDF000000000000000757B000000000000000053 +:10BDF0000000000000000000000000000000000043 :10BE00000000000000000000000000000000000032 -:10BE100000000000DEAE0000000000000000000096 +:10BE10000000000000000000000000000000000022 :10BE20000000000000000000000000000000000012 -:10BE300000000000000060C60300000000000000D9 -:10BE40000031E0000000000000000C0000000000D5 -:10BE5000000000C0630600000000000000000000B9 +:10BE30000000000000000000000000000000000002 +:10BE400000000000000000000000000000000000F2 +:10BE500000000000000000000000000000000000E2 :10BE600000000000000000000000000000000000D2 -:10BE7000000000000000000060C603000000000099 -:10BE800000000031E0000000000000000C00000095 -:10BE90000000000000C06306200020000000200019 -:10BEA0002000000020000000200020000000000012 -:10BEB0000000000000002000200020000000200002 -:10BEC0008800000020000000200020000000C000CA -:10BED0008400840084002000000020002000000076 -:10BEE00020002000000020000000200020000000B2 -:10BEF00000000000000000002000200020000000E2 -:10BF000020000000000000000000200000000000F1 -:10BF10000000000000000000200000000000000001 +:10BE700000000000000000000000000000000000C2 +:10BE800000000000000000000000000000000000B2 +:10BE900000000000000000000000000000000000A2 +:10BEA0000000000000000000000000000000000092 +:10BEB0002000000000002000000000000000000042 +:10BEC0000000000000000000000000000000000072 +:10BED0002000000000002000000000000000000022 +:10BEE0000000000000000000000000000000000052 +:10BEF0000000200000000000200000000000000002 +:10BF00000000000000000000000000000000000031 +:10BF100000002000000000002000000000000000E1 :10BF20000000000000000000000000000000000011 -:10BF300000002000000020000000000000000000C1 +:10BF30000000000000000000000000000000000001 :10BF400000000000000000000000000000000000F1 :10BF500000000000000000000000000000000000E1 :10BF600000000000000000000000000000000000D1 @@ -19454,21 +19454,21 @@ :10BF800000000000000000000000000000000000B1 :10BF900000000000000000000000000000000000A1 :10BFA0000000000000000000000000000000000091 -:10BFB0000000000000000000000000000000000081 -:10BFC0000000080000000000000000000000000069 -:10BFD0000000080000000000000000000000000059 -:10BFE000000000000200000000000000000000004F -:10BFF000000000000200000000000000000000003F -:10C000000000000000000000000000000800000028 +:10BFB0000000000800000000000000000000000079 +:10BFC0000000000000000000000000000000000071 +:10BFD0000000000000000000000000000000000061 +:10BFE0000000000000000000000000000000000051 +:10BFF0000000000000000000000000000000000041 +:10C000000000000000000000000000000000000030 :10C010000000000000000000000000000000000020 :10C020000000000000000000000000000000000010 :10C030000000000000000000000000000000000000 -:10C0400000000000000000000000000000000000F0 -:10C0500000000000000000000000000000000000E0 -:10C0600000000000000000000000000000000000D0 -:10C0700000000000000000000000000000000000C0 -:10C0800000000000000000000000000000000000B0 -:10C0900000000000000000000000000000000000A0 +:10C0400000000000000800000000000000080000E0 +:10C0500000000000000800000000000000000000D8 +:10C060000000000000000040000000000000000888 +:10C0700000000000000000080000000000000000B8 +:10C0800000000000000000000000000000000010A0 +:10C090000000000000000008000000000000000098 :10C0A0000000000000000000000000000000000090 :10C0B0000000000000000000000000000000000080 :10C0C0000000000000000000000000000000000070 @@ -19479,23 +19479,23 @@ :10C11000000000000000000000000000000000001F :10C12000000000000000000000000000000000000F :10C1300000000000000000000000000000000000FF -:10C1400000000000000000004100030000000900A2 +:10C1400000000000000000000000000000000000EF :10C1500000000000000000000000000000000000DF :10C1600000000000000000000000000000000000CF :10C1700000000000000000000000000000000000BF -:10C18000000000000000000041004100000003002A -:10C19000030000000000000000000000000000009C -:10C1A000000000000000000000000000820000000D -:10C1B000000000000000000000000000040000007B +:10C1800000000000000000000000000000000000AF +:10C19000000000000000000000000000000000009F +:10C1A000000000000000000000000000000000008F +:10C1B000000000000000000000000000000000007F :10C1C000000000000000000000000000000000006F :10C1D000000000000000000000000000000000005F :10C1E000000000000000000000000000000000004F :10C1F000000000000000000000000000000000003F -:10C20000080008000000000000000000000000001E +:10C20000000000000000000000000000000000002E :10C21000000000000000000000000000000000001E -:10C22000000000000000000000000000000000000E -:10C2300000000000000000000000000000000000FE -:10C2400000000000000000000000000000000000EE +:10C220000000000000000000000000000008000006 +:10C2300000000000000800000000000000000000F6 +:10C24000000000000000000000000000001000825C :10C2500000000000000000000000000000000000DE :10C2600000000000000000000000000000000000CE :10C2700000000000000000000000000000000000BE @@ -19503,27 +19503,27 @@ :10C29000000000000000000000000000000000009E :10C2A000000000000000000000000000000000008E :10C2B000000000000000000000000000000000007E -:10C2C00082000000000000000000000000000000EC -:10C2D000000000000000000000000000000000005E +:10C2C000000000000000000000000000000000006E +:10C2D000000000000000000000000000000000104E :10C2E000000000000000000000000000000000004E :10C2F000000000000000000000000000000000003E -:10C300000000080000000000A00000000000000085 -:10C310000000080000000000000000000000000015 +:10C30000000000000000000000000000000000002D +:10C31000000000000000000000000000000000001D :10C32000000000000000000000000000000000000D :10C3300000000000000000000000000000000000FD :10C3400000000000000000000000000000000000ED -:10C350000500000000900800000021000800000017 +:10C3500000000000000000000000000000000000DD :10C3600000000000000000000000000000000000CD :10C3700000000000000000000000000000000000BD :10C3800000000000000000000000000000000000AD -:10C3900000000000000000000800009005000800F8 -:10C3A000000041000000000000000000000000004C +:10C39000000000000000000000000000000000009D +:10C3A000000000000000000000000000000000008D :10C3B000000000000000000000000000000000007D :10C3C000000000000000000000000000000000006D -:10C3D0000000000008000000000000000000000055 +:10C3D000000000000000000000000000000000005D :10C3E000000000000000000000000000000000004D :10C3F000000000000000000000000000000000003D -:10C400000000000008000000000000000000000024 +:10C40000000000000000000000000000000000002C :10C41000000000000000000000000000000000001C :10C42000000000000000000000000000000000000C :10C4300000000000000000000000000000000000FC @@ -19531,7 +19531,7 @@ :10C4500000000000000000000000000000000000DC :10C4600000000000000000000000000000000000CC :10C4700000000000000000000000000000000000BC -:10C4800000000000000000000000000000000000AC +:10C4800000000000000002000000000000000000AA :10C49000000000000000000000000000000000009C :10C4A000000000000000000000000000000000008C :10C4B000000000000000000000000000000000007C @@ -19680,72 +19680,72 @@ :10CDA0000000000000000000000000000000000083 :10CDB0000000000000000000000000000000000073 :10CDC0000000000000000000000000000000000063 -:10CDD0000000000000000000000000000002000051 -:10CDE0000000000000000000000000000000000043 -:10CDF00000008800000000000000000000000000AB -:10CE0000000000000000000000000400040000001A -:10CE100000002000000000000000000000000000F2 -:10CE200000000000000000000000000020000000E2 -:10CE300000000000000000000000000000000000F2 -:10CE400000000000000000000000000000000000E2 +:10CDD0000000000000000000000000002000200013 +:10CDE0000000000000000000000000002000000023 +:10CDF00000000000000000000000000020002000F3 +:10CE00000000000000000000000000002000000002 +:10CE100000000000000000000000000000002000F2 +:10CE200020000000000000000000000000002000C2 +:10CE300000000000000000000000000000002000D2 +:10CE400020000000000000000000000000002000A2 :10CE500000000000000000000000000000000000D2 -:10CE600000000000000000000000000000002000A2 +:10CE600000000002000000000000000000000000C0 :10CE700000000000000000000000000000000000B2 :10CE800000000000000000000000000000000000A2 :10CE90000000000000000000000000000000000092 -:10CEA0000000000000000000000000000000000082 -:10CEB0000000000000000000000000000000000072 -:10CEC0000000000000000000000000000000000062 +:10CEA0000000000000001000000000000000000072 +:10CEB0000000000000000000400000000000000032 +:10CEC0000000000000020000000000000000000060 :10CED0000000000000000000000000000000000052 :10CEE0000000000000000000000000000000000042 :10CEF0000000000000000000000000000000000032 -:10CF00000000000000000010000000000000000011 +:10CF00000000000000000000000000000000000021 :10CF10000000000000000000000000000000000011 :10CF20000000000000000000000000000000000001 :10CF300000000000000000000000000000000000F1 :10CF400000000000000000000000000000000000E1 -:10CF5000000000000000000082000000000000004F +:10CF500000000000000000000000000000000000D1 :10CF600000000000000000000000000000000000C1 -:10CF700000000000000000000000000000000000B1 -:10CF800000000000000000000000000000000000A1 +:10CF700000000000000000000088008800000000A1 +:10CF80000000000000000000000800000000000099 :10CF90000000000000000000000000000000000091 -:10CFA0000000000000000000000000000000000081 +:10CFA0000000000000000000000000080000000079 :10CFB0000000000000000000000000000000000071 -:10CFC0000000000000000000000000000000000061 -:10CFD0000000000000000000000000000000000051 -:10CFE0000000000000000000000000000000000041 +:10CFC0000000000000000000000000080000000059 +:10CFD0000000000000000000000000000008000049 +:10CFE0000000000000000000000000080000000039 :10CFF0000000000000000000000000000000000031 -:10D00000000010000000000000000400000000000C +:10D000000000000000000000000000000000000020 :10D010000000000000000000000000000000000010 :10D020000000000000000000000000000000000000 :10D0300000000000000000000000000000000000F0 -:10D04000000000000000000000000000820000005E +:10D0400000000000000000000000000000000000E0 :10D0500000000000000000000000000000000000D0 :10D0600000000000000000000000000000000000C0 -:10D0700000000000000000000000000003000000AD -:10D08000000000000000000000000000040000009C +:10D0700000000000000000000000000000000000B0 +:10D0800000000000000000000000000000000000A0 :10D090000000000000000000000000000000000090 :10D0A0000000000000000000000000000000000080 :10D0B0000000000000000000000000000000000070 -:10D0C000000000000000000003000000000000005D +:10D0C0000000000000000000000000000000000060 :10D0D0000000000000000000000000000000000050 -:10D0E0000000000000000000000000000000080038 +:10D0E0000000000000000000000000000000000040 :10D0F0000000000000000000000000000000000030 :10D10000000000000000000000000000000000001F :10D11000000000000000000000000000000000000F :10D1200000000000000000000000000000000000FF -:10D1300000000000000000000000080000000000E7 -:10D1400008000000000000000000000000000000D7 +:10D1300000000000000000000000000000000000EF +:10D1400000000000000000000000000000000000DF :10D1500000000000000000000000000000000000CF :10D1600000000000000000000000000000000000BF :10D1700000000000000000000000000000000000AF :10D18000000000000000000000000000000000009F :10D19000000000000000000000000000000000008F :10D1A000000000000000000000000000000000007F -:10D1B000000000000000000000000000000000006F +:10D1B00000000000000000000088000000000000E7 :10D1C000000000000000000000000000000000005F :10D1D000000000000000000000000000000000004F -:10D1E000000000000000000000000000000000003F +:10D1E00000000000000000000000004100000000FE :10D1F000000000000000000000000000000000002F :10D20000000000000000000000000000000000001E :10D21000000000000000000000000000000000000E @@ -19756,11 +19756,11 @@ :10D2600000000000000000000000000000000000BE :10D2700000000000000000000000000000000000AE :10D28000000000000000000000000000000000009E -:10D29000400000000000000000000000000000004E +:10D29000000000000000000000000000000000008E :10D2A000000000000000000000000000000000007E :10D2B000000000000000000000000000000000006E :10D2C000000000000000000000000000000000005E -:10D2D0000000000000000000000000000000080046 +:10D2D000000000000000000000000000000000004E :10D2E000000000000000000000000000000000003E :10D2F000000000000000000000000000000000002E :10D30000000000000000000000000000000000001D @@ -19932,15 +19932,15 @@ :10DD600000000000000000000000000000000000B3 :10DD700000000000000000000000000000000000A3 :10DD80000000000000000000000000000000000093 -:10DD90000000200000000000000020000000000043 -:10DDA0000000200000000000000020000000000033 -:10DDB0000000200000000000000020000000000023 -:10DDC0000000200000000000000020000000000013 -:10DDD0000000000020000000000000002000000003 -:10DDE00000000000200000000000000020000000F3 -:10DDF00000000000200000000000000020000000E3 -:10DE000000000000200000000000000020000000D2 -:10DE10000000000000000000000000000000000002 +:10DD90000000000000000000000000000000000083 +:10DDA0000000000000000000000000000000000073 +:10DDB00020004000000000000000400000000000C3 +:10DDC0000000000000000000000000000000000053 +:10DDD00020000000400000000000000020000000C3 +:10DDE00000000000880000000000000000000000AB +:10DDF00000002000200000000000000020000000C3 +:10DE000000000000200000000000000000000000F2 +:10DE100000002000000000000000000000000000E2 :10DE200000000000000000000000000000000000F2 :10DE300000000000000000000000000000000000E2 :10DE400000000000000000000000000000000000D2 @@ -19957,22 +19957,22 @@ :10DEF0000000000000000000000000000000000022 :10DF00000000000000000000000000000000000011 :10DF10000000000000000000000000000000000001 -:10DF200000000000000000000000000000000000F1 -:10DF300000000000000000000000000000000000E1 -:10DF400000000000000000000000000000000000D1 -:10DF500000000000000000000000000000000000C1 -:10DF600000000000000000000000000000000000B1 -:10DF700000000000000000000000000000000000A1 -:10DF80000000000000000000000000000000000091 -:10DF90000000000000000000000000000000000081 -:10DFA0000000000000000000000000000000000071 +:10DF200000000000000000080000000000000008E1 +:10DF300000000000000000080000000000000008D1 +:10DF400000000000000800080000000000000008B9 +:10DF500000000000000000080000000000000000B9 +:10DF60000008000000000088000800000000000019 +:10DF70000008000000000000000800000000000091 +:10DF80000008000000000000008400000000000005 +:10DF90000008000000000000001000000000000069 +:10DFA0000000000000000008000000000000000069 :10DFB0000000000000000000000000000000000061 :10DFC0000000000000000000000000000000000051 :10DFD0000000000000000000000000000000000041 :10DFE0000000000000000000000000000000000031 :10DFF0000000000000000000000000000000000021 :10E000000000000000000000000000000000000010 -:10E0100000000000000000000000000000200000E0 +:10E0100000000000000000000000000800000000F8 :10E0200000000000000000000000000000000000F0 :10E0300000000000000000000000000000000000E0 :10E0400000000000000000000000000000000000D0 @@ -19985,7 +19985,7 @@ :10E0B0000000000000000000000000000000000060 :10E0C0000000000000000000000000000000000050 :10E0D0000000000000000000000000000000000040 -:10E0E0000000000000000000000000000000000030 +:10E0E0000800000000000000000000000000000028 :10E0F0000000000000000000000000000000000020 :10E10000000000000000000000000000000000000F :10E1100000000000000000000000000000000000FF @@ -19997,7 +19997,7 @@ :10E17000000000000000000000000000000000009F :10E18000000000000000000000000000000000008F :10E19000000000000000000000000000000000007F -:10E1A000000000000000000000000000000000006F +:10E1A000000000000000000000100000000000005F :10E1B000000000000000000000000000000000005F :10E1C000000000000000000000000000000000004F :10E1D000000000000000000000000000000000003F @@ -20013,7 +20013,7 @@ :10E27000000000000000000000000000000000009E :10E28000000000000000000000000000000000008E :10E29000000000000000000000000000000000007E -:10E2A000000000000000000000000000000000006E +:10E2A0000000000000000000000000000008000066 :10E2B000000000000000000000000000000000005E :10E2C000000000000000000000000000000000004E :10E2D000000000000000000000000000000000003E @@ -20127,31 +20127,31 @@ :10E990000000000000000000000000000000000077 :10E9A0000000000000000000000000000000000067 :10E9B0000000000000000000000000000000000057 -:10E9C0000000000000000000000000000000200027 +:10E9C0000000000000000000000000000000000047 :10E9D0000000000000000000000000000000000037 -:10E9E00020000000000000000000000000002000E7 +:10E9E0000000000000000000000000000000000027 :10E9F0000000000000000000000000000000000017 -:10EA000020000000000000000000000000000000E6 -:10EA100020000000000000000000000000000000D6 -:10EA200000002000000000000000000000000000C6 -:10EA300020000000000000000000000000000000B6 -:10EA400000002000000000000000000000000000A6 -:10EA500000000000000000000000100000000000A6 +:10EA00000000000000000000000000000000000006 +:10EA100000000000000000000000000000000000F6 +:10EA200000000000000000000000000000000000E6 +:10EA300000000000000000000000000000000000D6 +:10EA400000000000000000000000000000000000C6 +:10EA500000020000000000000000000000000000B4 :10EA600000000000000000000000000000000000A6 :10EA70000002000000000000000000000000000094 -:10EA80000000000000000000000000000000000086 -:10EA90000000000000000000000000000000000076 +:10EA80000000000200000000000000000000000084 +:10EA90000000000000004000000000000000000036 :10EAA0000000000000000000000000000000000066 :10EAB0000000000000000000000000000000000056 :10EAC0000000000000000000000000000000000046 :10EAD0000000000000000000000000000000000036 -:10EAE0000000000000100000000000000000000016 +:10EAE0000000000000000000000000000000000026 :10EAF0000000000000000000000000000000000016 -:10EB000000000000004000000000000000000000C5 +:10EB00000000000000000000000000000000000005 :10EB100000000000000000000000000000000000F5 :10EB200000000000000000000000000000000000E5 :10EB300000000000000000000000000000000000D5 -:10EB400000000000000002000000000000000000C3 +:10EB400000000000000000000000000000000000C5 :10EB500000000000000000000000000000000000B5 :10EB600000000000000000000000000000000000A5 :10EB70000000000000000000000000000000000095 @@ -20162,7 +20162,7 @@ :10EBC0000000000000000000000000000000000045 :10EBD0000000000000000000000000000000000035 :10EBE0000000000000000000000000000000000025 -:10EBF0000000000004000000000000000000000011 +:10EBF0000000000000000000000000000000000015 :10EC00000000000000000000000000000000000004 :10EC100000000000000000000000000000000000F4 :10EC200000000000000000000000000000000000E4 @@ -20371,38 +20371,38 @@ :10F8D0000000000000000000000000000000000028 :10F8E0000000000000000000000000000000000018 :10F8F0000000000000000000000000000000000008 -:10F9000000000000000000002000000000000000D7 -:10F9100000000000000000000000000000000000E7 -:10F9200000000000000000002000000000000000B7 -:10F9300000000000000000000000000000000000C7 -:10F940000000000000000000000020000000000097 -:10F9500000000000000000000000000000000000A7 -:10F960000000000000000000000020000000000077 -:10F970000000000000000000000000000000000087 +:10F9000000000000000000000000000000000000F7 +:10F9100000000000200000000000000020000000A7 +:10F9200000000000000000000000000000000000D7 +:10F930000000000020000000000000002000000285 +:10F9400000000000000000000000000000000000B7 +:10F950000000000000002000000000000000200067 +:10F960000000000000000000000000000000000097 +:10F970000000000000002000000000000000200047 :10F980000000000000000000000000000000000077 -:10F990000000000000000000000000000000000067 +:10F9900040000000000000004000000000000000E7 :10F9A0000000000000000000000000000000000057 -:10F9B0000000000000000000000000000000000047 +:10F9B0004000000000000000000000000000000007 :10F9C0000000000000000000000000000000000037 :10F9D0000000000000000000000000000000000027 :10F9E0000000000000000000000000000000000017 :10F9F0000000000000000000000000000000000007 :10FA000000000000000000000000000000000000F6 :10FA100000000000000000000000000000000000E6 -:10FA20000000000000000000004000000000000096 -:10FA30000000000000000000004000000000000086 -:10FA40000000000000000000000000400000000076 -:10FA50000000000000000000000000400000000066 +:10FA200000000000000000000000000000000000D6 +:10FA300000000000000000000000000000000000C6 +:10FA400000000000000000000000000000000000B6 +:10FA500000000000000000000000000000000000A6 :10FA60000000000000000000000000000000000096 -:10FA70000000004000000000000000000000000046 +:10FA70000000000000000000000000000000000086 :10FA80000000000000000000000000000000000076 -:10FA9000000000080000000000000000000000005E +:10FA90000000000000000000000000000000000066 :10FAA0000000000000000000000000000000000056 -:10FAB000000000080000000000000000000000003E +:10FAB0000000000000000000000000000000000046 :10FAC0000000000000000000000000000000000036 -:10FAD000000000000008000000000000000000001E +:10FAD0000000000000000000000000000000000026 :10FAE0000000000000000000000000000000000016 -:10FAF00000000000000800000000000000000000FE +:10FAF0000000000000000000000000000000000006 :10FB000000000000000000000000000000000000F5 :10FB100000000000000000000000000000000000E5 :10FB200000000000000000000000000000000000D5 @@ -20426,16 +20426,16 @@ :10FC400000000000000000000000000000000000B4 :10FC500000000000000000000000000000000000A4 :10FC60000000000000000000000000000000000094 -:10FC70000000000000000000000000000000000084 -:10FC80000000000000000000000000000000000074 +:10FC7000000000000000000004000400010001007A +:10FC80000000000000000000000040000000000034 :10FC90000000000000000000000000000000000064 :10FCA0000000000000000000000000000000000054 :10FCB0000000000000000000000000000000000044 :10FCC0000000000000000000000000000000000034 :10FCD0000000000000000000000000000000000024 :10FCE0000000000000000000000000000000000014 -:10FCF0000000000000000000000000000000000004 -:10FD000000000000000000000000000000000000F3 +:10FCF0000000000000000000000080008000040000 +:10FD0000040000000000000000000000800000006F :10FD100000000000000000000000000000000000E3 :10FD200000000000000000000000000000000000D3 :10FD300000000000000000000000000000000000C3 @@ -20443,7 +20443,7 @@ :10FD500000000000000000000000000000000000A3 :10FD60000000000000000000000000000000000093 :10FD70000000000000000000000000000000000083 -:10FD80000000000000000000000000000000000073 +:10FD800000000400040004000002C00000000000A5 :10FD90000000000000000000000000000000000063 :10FDA0000000000000000000000000000000000053 :10FDB0000000000000000000000000000000000043 @@ -20451,7 +20451,7 @@ :10FDD0000000000000000000000000000000000023 :10FDE0000000000000000000000000000000000013 :10FDF0000000000000000000000000000000000003 -:10FE000000000000000000000000000000000000F2 +:10FE00000000000080008000800000010000000071 :10FE100000000000000000000000000000000000E2 :10FE200000000000000000000000000000000000D2 :10FE300000000000000000000000000000000000C2 @@ -20459,7 +20459,7 @@ :10FE500000000000000000000000000000000000A2 :10FE60000000000000000000000000000000000092 :10FE70000000000000000000000000000000000082 -:10FE80000000000000000000000000000000000072 +:10FE800000000000040000030000010000800000EA :10FE90000000000000000000000000000000000062 :10FEA0000000000000000000000000000000000052 :10FEB0000000000000000000000000000000000042 @@ -20467,16 +20467,16 @@ :10FED0000000000000000000000000000000000022 :10FEE0000000000000000000000000000000000012 :10FEF0000000000000000000000000000000000002 -:10FF000000000000000000000000000000000000F1 -:10FF100000000000000000000000000000000000E1 +:10FF0000000000000000800000000000040000204D +:10FF1000410003000300000000000000000000009A :10FF200000000000000000000000000000000000D1 :10FF300000000000000000000000000000000000C1 :10FF400000000000000000000000000000000000B1 :10FF500000000000000000000000000000000000A1 :10FF60000000000000000000000000000000000091 :10FF70000000000000000000000000000000000081 -:10FF80000000000000000000000000000000000071 -:10FF90000000000000000000000000000000000061 +:10FF8000000000000000000000C000900000000021 +:10FF900000C0909000000000000000000000000081 :10FFA0000000000000000000000000000000000051 :10FFB0000000000000000000000000000000000041 :10FFC0000000000000000000000000000000000031 @@ -20484,81 +20484,81 @@ :10FFE0000000000000000000000000000000000011 :10FFF0000000000000000000000000000000000001 :020000040005F5 -:1000000000000000000000000000000000000000F0 -:1000100000000000000000000000000000000000E0 +:1000000000000000000000000000008000800000F0 +:10001000000000A080800000000000000000000040 :1000200000000000000000000000000000000000D0 :1000300000000000000000000000000000000000C0 :1000400000000000000000000000000000000000B0 :1000500000000000000000000000000000000000A0 :100060000000000000000000000000000000000090 :100070000000000000000000000000000000000080 -:100080000000000000000000000000000000000070 -:100090000000000000000000000000000000000060 +:100080000000000000008000000080800000800070 +:10009000000080800580A1004000C08300000000B7 :1000A0000000000000000000000000000000000050 :1000B0000000000000000000000000000000000040 :1000C0000000000000000000000000000000000030 :1000D0000000000000000000000000000000000020 :1000E0000000000000000000000000000000000010 :1000F0000000000000000000000000000000000000 -:1001000000000000000000000000000000000000EF -:1001100000000000000000000000000000000000DF +:10010000000000000000000082000000C09000001D +:1001100082000000C090000283000000C091000037 :1001200000000000000000000000000000000000CF :1001300000000000000000000000000000000000BF :1001400000000000000000000000000000000000AF :10015000000000000000000000000000000000009F :10016000000000000000000000000000000000008F :10017000000000000000000000000000000000007F -:10018000000000000000000000000000000000006F -:10019000000000000000000000000000000000005F +:1001800000000000000000000000000000900000DF +:1001900000000000009000C000000000009100C0BE :1001A000000000000000000000000000000000004F :1001B000000000000000000000000000000000003F :1001C000000000000000000000000000000000002F :1001D000000000000000000000000000000000001F :1001E000000000000000000000000000000000000F :1001F00000000000000000000000000000000000FF -:1002000000000000000000000000000000000000EE -:1002100000000000000000000000000000000000DE -:1002200000000000000000000000000000000000CE +:10020000000000000000000000000000000000806E +:10021000000000000000008000800020000000A11D +:10022000008000000000000000000000000000004E :1002300000000000000000000000000000000000BE :1002400000000000000000000000000000000000AE :10025000000000000000000000000000000000009E :10026000000000000000000000000000000000008E :10027000000000000000000000000000000000007E -:10028000000000000000000000000000000000006E -:10029000000000000000000000000000000000005E -:1002A000000000000000000000000000000000004E +:100280000000000000000000000000000000000965 +:100290000000000080118011000000809191830512 +:1002A0001100031100000000000000000000000029 :1002B000000000000000000000000000000000003E :1002C000000000000000000000000000000000002E :1002D000000000000000000000000000000000001E :1002E000000000000000000000000000000000000E :1002F00000000000000000000000000000000000FE :1003000000000000000000000000000000000000ED -:1003100000000000000000000000000000000000DD -:1003200000000000000000000000000000000000CD +:10031000000000000000C001200000000082C1C1F8 +:1003200020010100000100000000000000000000AA :1003300000000000000000000000000000000000BD :1003400000000000000000000000000000000000AD :10035000000000000000000000000000000000009D :10036000000000000000000000000000000000008D :10037000000000000000000000000000000000007D :10038000000000000000000000000000000000006D -:10039000000000000000000000000000000000005D -:1003A000000000000000000000000000000000004D +:10039000000000000700000000000000070000004F +:1003A000000000E0070088000000000000000000DE :1003B000000000000000000000000000000000003D :1003C000000000000000000000000000000000002D :1003D000000000000000000000000000000000001D :1003E000000000000000000000000000000000000D :1003F00000000000000000000000000000000000FD :1004000000000000000000000000000000000000EC -:1004100000000000000000000000000000000000DC -:1004200000000000000000000000000000000000CC +:10041000000000000000FF00FF00FF000000FF00E0 +:100420000000FF000000FF000000000000000000CE :1004300000000000000000000000000000000000BC :1004400000000000000000000000000000000000AC :10045000000000000000000000000000000000009C :10046000000000000000000000000000000000008C :10047000000000000000000000000000000000007C :10048000000000000000000000000000000000006C -:10049000000000000000000000000000000000005C -:1004A000000000000000000000000000000000004C +:100490000000000000000000FF00FF00FF0000005F +:1004A000FF000000FF000000FF000000000000004F :1004B000000000000000000000000000000000003C :1004C000000000000000000000000000000000002C :1004D000000000000000000000000000000000001C @@ -20573,8 +20573,8 @@ :10056000000000000000000000000000000000008B :10057000000000000000000000000000000000007B :10058000000000000000000000000000000000006B -:10059000000000000000000000000000000000005B -:1005A000000000000000000000000000000000004B +:1005900000000000000000000000000000000F0F3D +:1005A000000000FF00000F0F000000FFFFFFF0F051 :1005B000000000000000000000000000000000003B :1005C000000000000000000000000000000000002B :1005D000000000000000000000000000000000001B @@ -20582,16 +20582,16 @@ :1005F00000000000000000000000000000000000FB :1006000000000000000000000000000000000000EA :1006100000000000000000000000000000000000DA -:1006200000000000000000000000000000000000CA -:1006300000000000000000000000000000000000BA +:100620000F0F000000FF00000F0F000000FFFFFF92 +:10063000F0F00000000000000000000000000000DA :1006400000000000000000000000000000000000AA :10065000000000000000000000000000000000009A :10066000000000000000000000000000000000008A :10067000000000000000000000000000000000007A :10068000000000000000000000000000000000006A -:10069000000000000000000000000000000000005A -:1006A000000000000000000000000000000000004A -:1006B000000000000000000000000000000000003A +:100690000000000000000000000000000000000852 +:1006A0000C0012C0038203080C0092C003E3030E87 +:1006B0000C09A2C0000000000000000000000000C3 :1006C000000000000000000000000000000000002A :1006D000000000000000000000000000000000001A :1006E000000000000000000000000000000000000A @@ -20599,7 +20599,7 @@ :1007000000000000000000000000000000000000E9 :1007100000000000000000000000000000000000D9 :1007200000000000000000000000000000000000C9 -:1007300000000000000000000000000000000000B9 +:100730000000C3FFC3FF0000000000000000000035 :1007400000000000000000000000000000000000A9 :100750000000000000000000000000000000000099 :100760000000000000000000000000000000000089 @@ -20607,7 +20607,7 @@ :100780000000000000000000000000000000000069 :100790000000000000000000000000000000000059 :1007A0000000000000000000000000000000000049 -:1007B0000000000000000000000000000000000039 +:1007B00000100000C3FFC3FF0000000000000000A5 :1007C0000000000000000000000000000000000029 :1007D0000000000000000000000000000000000019 :1007E0000000000000000000000000000000000009 @@ -20615,7 +20615,7 @@ :1008000000000000000000000000000000000000E8 :1008100000000000000000000000000000000000D8 :1008200000000000000000000000000000000000C8 -:1008300000000000000000000000000000000000B8 +:1008300000000000FFFFAAAAAAAA00000000000012 :1008400000000000000000000000000000000000A8 :100850000000000000000000000000000000000098 :100860000000000000000000000000000000000088 @@ -20623,35 +20623,35 @@ :100880000000000000000000000000000000000068 :100890000000000000000000000000000000000058 :1008A0000000000000000000000000000000000048 -:1008B0000000000000000000000000000000000038 +:1008B000000000000000FFFFAAAAAA8A00000000B2 :1008C0000000000000000000000000000000000028 -:1008D00000000000000000000000200000000000F8 +:1008D00000002000000020000000000000000000D8 :1008E0000000000000000000000000000000000008 -:1008F00000000000000000000000200000000000D8 +:1008F00000002000000020000000000000000000B8 :1009000000000000000000000000000000000000E7 -:1009100000000000000000000000000020000000B7 +:100910000000000020000000200000000000000097 :1009200000000000000000000000000000000000C7 -:100930000000000000000000000000002000000097 -:1009400000000000000000020000000000000000A5 +:100930000000000020000000200000000000000077 +:100940000000000000000000000000900000000017 :100950000000000000000000000000000000000097 -:100960000000000000000000000000020000000085 +:100960000000000000000000000000000000000087 :100970000000000000000000000000000000000077 -:100980000000000000000000000000000000000067 +:100980004000000000000000000000000002000025 :100990000000000000000000000000000000000057 -:1009A0000000000000000000000000000000000047 +:1009A0000000000000000000000000000002000045 :1009B0000000000000000000000000000000000037 -:1009C0000000000000000000000000000000001017 +:1009C0000000000000000000000000000000000027 :1009D0000000000000000000000000000000000017 -:1009E00000000000000000000000000000000010F7 +:1009E0000000000000000000000000000000000007 :1009F00000000000000000000000000000000000F7 :100A000000000000000000000000000000000000E6 :100A100000000000000000000000000000000000D6 :100A200000000000000000000000000000000000C6 :100A300000000000000000000000000000000000B6 -:100A400002000000000000000000000000000000A4 +:100A400000000000000000000000000000000000A6 :100A50000000000000000000000000000000000096 :100A60000000000000000000000000000000000086 -:100A70000000400000000000000000000000000036 +:100A70000000000000000000000000000000000076 :100A80000000000000000000000000000000000066 :100A90000000000000000000000000000000000056 :100AA0000000000000000000000000000000000046 @@ -20663,7 +20663,7 @@ :100B000000000000000000000000000000000000E5 :100B100000000000000000000000000000000000D5 :100B200000000000000000000000000000000000C5 -:100B300000000000000000000000000000000000B5 +:100B300000000000000001000000000000000000B4 :100B400000000000000000000000000000000000A5 :100B50000000000000000000000000000000000095 :100B60000000000000000000000000000000000085 @@ -20671,7 +20671,7 @@ :100B80000000000000000000000000000000000065 :100B90000000000000000000000000000000000055 :100BA0000000000000000000000000000000000045 -:100BB0000000000000000000000000000000000035 +:100BB0000000000000000000020000000000000033 :100BC0000000000000000000000000000000000025 :100BD0000000000000000000000000000000000015 :100BE0000000000000000000000000000000000005 @@ -20712,16 +20712,16 @@ :100E100000000000000000000000000000000000D2 :100E200000000000000000000000000000000000C2 :100E300000000000000000000000000000000000B2 -:100E40000000000000000000410000000000000061 -:100E5000000008000000000000000000000000008A +:100E40000000000000009000000000000000000012 +:100E50000000000000000000000000000000000092 :100E60000000000000000000000000000000000082 :100E70000000000000000000000000000000000072 :100E80000000000000000000000000000000000062 :100E90000000000000000000000000000000000052 :100EA0000000000000000000000000000000000042 :100EB0000000000000000000000000000000000032 -:100EC00000000000000000000000C0000000000062 -:100ED00000002100000000000000000000000000F1 +:100EC0000000000000000000000000000000000022 +:100ED0000000000000000000000000000000000012 :100EE0000000000000000000000000000000000002 :100EF00000000000000000000000000000000000F2 :100F000000000000000000000000000000000000E1 @@ -20745,7 +20745,7 @@ :1010200000000000000000000000000000000000C0 :1010300000000000000000000000000000000000B0 :1010400000000000000000000000000000000000A0 -:101050000000000000000000000000000000000090 +:101050000000000000008000800000000000000090 :101060000000000000000000000000000000000080 :101070000000000000000000000000000000000070 :101080000000000000000000000000000000000060 @@ -20753,15 +20753,15 @@ :1010A0000000000000000000000000000000000040 :1010B0000000000000000000000000000000000030 :1010C0000000000000000000000000000000000020 -:1010D0000000000000000000000000000000000010 +:1010D00000000000A00082000400C000000000002A :1010E0000000000000000000000000000000000000 :1010F00000000000000000000000000000000000F0 :1011000000000000000000000000000000000000DF :1011100000000000000000000000000000000000CF :1011200000000000000000000000000000000000BF :1011300000000000000000000000000000000000AF -:10114000000000000000000000000000000000019E -:10115000000000000000000000000000000000008F +:10114000000000000000000000000000000000009F +:10115000000000000000000000A000A000C000008F :10116000000000000000000000000000000000007F :10117000000000000000000000000000000000006F :10118000000000000000000000000000000000005F @@ -20769,7 +20769,7 @@ :1011A000000000000000000000000000000000003F :1011B000000000000000000000000000000000002F :1011C000000000000000000000000000000000001F -:1011D00000100000000000000000000000000000FF +:1011D000000000000000000000000000000000808F :1011E00000000000000000000000000000000000FF :1011F00000000000000000000000000000000000EF :1012000000000000000000000000000000000000DE @@ -20777,7 +20777,7 @@ :1012200000000000000000000000000000000000BE :1012300000000000000000000000000000000000AE :10124000000000000000000000000000000000009E -:10125000000000000000000000000000000000008E +:10125000000000000000000000000002000000800C :10126000000000000000000000000000000000007E :10127000000000000000000000000000000000006E :10128000000000000000000000000000000000005E @@ -20785,8 +20785,8 @@ :1012A000000000000000000000000000000000003E :1012B000000000000000000000000000000000002E :1012C000000000000000000000000000000000001E -:1012D000000000000000000000000000000000000E -:1012E00000000000000000000000000000000000FE +:1012D000000000000000000000000000000100C04D +:1012E00000400000000000000000000000000000BE :1012F00000000000000000000000000000000000EE :1013000000000000000000000000000000000000DD :1013100000000000000000000000000000000000CD @@ -20801,16 +20801,16 @@ :1013A000000000000000000000000000000000003D :1013B000000000000000000000000000000000002D :1013C000000000000000000000000000000000001D -:1013D000000000000000000000000000000000000D -:1013E00000000000000000000000000000000000FD +:1013D000000000000000000000000000FFFFFFFF11 +:1013E000FFFFFFFF000000F0000000000000000011 :1013F00000000000000000000000000000000000ED :1014000000000000000000000000000000000000DC :1014100000000000000000000000000000000000CC :1014200000000000000000000000000000000000BC :1014300000000000000000000000000000000000AC :10144000000000000000000000000000000000009C -:10145000000000000000000000000000000000008C -:10146000000000000000000000000000000000007C +:101450000000000000000000000000000000FFFF8E +:10146000FFFFFFFFFFFF000000F000000000000092 :10147000000000000000000000000000000000006C :10148000000000000000000000000000000000005C :10149000000000000000000000000000000000004C @@ -20818,7 +20818,7 @@ :1014B000000000000000000000000000000000002C :1014C000000000000000000000000000000000001C :1014D000000000000000000000000000000000000C -:1014E00000000000000000000000000000000000FC +:1014E000FFFFFFFFFFFFFFFF00040C0000000000F4 :1014F00000000000000000000000000000000000EC :1015000000000000000000000000000000000000DB :1015100000000000000000000000000000000000CB @@ -20826,7 +20826,7 @@ :1015300000000000000000000000000000000000AB :10154000000000000000000000000000000000009B :10155000000000000000000000000000000000008B -:10156000000000000000000000000000000000007B +:101560000000FFFFFFFFFFFFFFFF00000000000083 :10157000000000000000000000000000000000006B :10158000000000000000000000000000000000005B :10159000000000000000000000000000000000004B @@ -20834,7 +20834,7 @@ :1015B000000000000000000000000000000000002B :1015C000000000000000000000000000000000001B :1015D000000000000000000000000000000000000B -:1015E00000610006000D0000000000000000000087 +:1015E0000000000000A010000000000000008A00C1 :1015F00000000000000000000000000000000000EB :1016000000000000000000000000000000000000DA :1016100000000000000000000000000000000000CA @@ -20842,7 +20842,7 @@ :1016300000000000000000000000000000000000AA :10164000000000000000000000000000000000009A :10165000000000000000000000000000000000008A -:10166000000000000000C3C3C3C30000000000006E +:10166000000000000000000000000000000000007A :10167000000000000000000000000000000000006A :10168000000000000000000000000000000000005A :10169000000000000000000000000000000000004A @@ -20850,7 +20850,7 @@ :1016B000000000000000000000000000000000002A :1016C000000000000000000000000000000000001A :1016D000000000000000000000000000000000000A -:1016E0000000000000000000C3C3C3C300000000EE +:1016E00000000000000000000000000000000000FA :1016F00000000000000000000000000000000000EA :1017000000000000000000000000000000000000D9 :1017100000000000000000000000000000000000C9 @@ -20868,30 +20868,30 @@ :1017D0000000000000000000000000000000000009 :1017E00000000000000000000000000000000000F9 :1017F00000000000000000000000000000000000E9 -:101800000000000000000000200000000000200098 +:101800004000200000000000000000000000000078 :1018100000000000000000000000000000000000C8 -:101820000000000000000000200000000000200078 -:1018300000000000000000000002000000000000A6 -:101840000000000000000000000020000000000078 -:101850002000000000000000000000000000000068 -:101860000000000000000000000020000000000058 -:101870002100000000000000000000020000000045 -:101880000000000000000000000000000000000058 -:101890000000000000000000000000000000000048 +:101820002000200000000000000000000000000078 +:1018300000000000000000000000000000000000A8 +:101840000000200020000000000000000000000058 +:101850000000000000000000000000000000000088 +:101860000000200020000000000000000000000038 +:101870000000000000000000000010000000000058 +:101880000000100000000000000000000000000048 +:101890000000000000000000000040000000000008 :1018A0000000000000000000000000000000000038 :1018B0000000000000000000000000000000000028 :1018C0000000000000000000000000000000000018 :1018D0000000000000000000000000000000000008 :1018E00000000000000000000000000000000000F8 -:1018F00000004000000000000000000000000000A8 +:1018F00000000000000000000000000000000000E8 :1019000000000000000000000000000000000000D7 -:1019100000000010000000000000000000000000B7 -:1019200000000010000000000000000000000000A7 -:101930000000001000000000000000000000000097 -:101940000000000000100000000000000000000087 -:101950000000000000000000000000000010000077 +:1019100000000000000000000000000000000000C7 +:1019200000000000000000000000000000000000B7 +:1019300000000000000000000000000000000000A7 +:101940000000000000000000000000000000000097 +:101950000000000000000000000000000000000087 :101960000000000000000000000000000000000077 -:101970000000000000000000000000000010000057 +:101970000000000000000000000000000000000067 :101980000000000000000000000000000000000057 :101990000000000000000000000000000000000047 :1019A0000000000000000000000000000000000037 @@ -20907,7 +20907,7 @@ :101A40000000000000000000000000000000000096 :101A50000000000000000000000000000000000086 :101A60000000000000000000000000000000000076 -:101A7000000300050020000000000000000000003E +:101A70000000000000000000000000000000000066 :101A80000000000000000000000000000000000056 :101A90000000000000000000000000000000000046 :101AA0000000000000000000000000000000000036 @@ -20915,13 +20915,13 @@ :101AC0000000000000000000000000000000000016 :101AD0000000000000000000000000000000000006 :101AE00000000000000000000000000000000000F6 -:101AF00000000000000000010000000000000000E5 +:101AF00000000000000000000000000000000000E6 :101B000000000000000000000000000000000000D5 :101B100000000000000000000000000000000000C5 :101B200000000000000000000000000000000000B5 :101B300000000000000000000000000000000000A5 :101B40000000000000000000000000000000000095 -:101B50000000000000000000000000000000020083 +:101B50000000000000000000000000000000000085 :101B60000000000000000000000000000000000075 :101B70000000000000000000000000000000000065 :101B80000000000000000000000000000000000055 @@ -20930,7 +20930,7 @@ :101BB0000000000000000000000000000000000025 :101BC0000000000000000000000000000000000015 :101BD0000000000000000000000000000000000005 -:101BE0008000000000000000000000000000000075 +:101BE00000000000000000000000000000000000F5 :101BF00000000000000000000000000000000000E5 :101C000000000000000000000000000000000000D4 :101C100000000000000000000000000000000000C4 @@ -20939,122 +20939,122 @@ :101C40000000000000000000000000000000000094 :101C50000000000000000000000000000000000084 :101C60000000000000000000000000000000000074 -:101C70000000820300030000040000200000002098 -:101C800000200000002000200000000000000000F4 +:101C70000000000000000000000000000000000064 +:101C80000000000000000000000000000000000054 :101C90000000000000000000000000000000000044 :101CA0000000000000000000000000000000000034 :101CB0000000000000000000000000000000000024 :101CC0000000000000000000000000000000000014 :101CD0000000000000000000000000000000000004 :101CE00000000000000000000000000000000000F4 -:101CF0000000000000000000000080000001000063 -:101D0000000141010000000100010000000000008E +:101CF00000000000000000000000000000000000E4 +:101D000000000000000000000000000000000000D3 :101D100000000000000000000000000000000000C3 :101D200000000000000000000000000000000000B3 :101D300000000000000000000000000000000000A3 :101D40000000000000000000000000000000000093 :101D50000000000000000000000000000000000083 :101D60000000000000000000000000000000000073 -:101D7000000000000000000000000420002000001F -:101D8000000000090000002000000000002000000A -:101D90000000000011000000000000000000000032 +:101D70000000000000000000000000000000000063 +:101D80000000000000000000000000000000000053 +:101D90000000000000000000000000000000000043 :101DA0000000000000000000000000000000000033 :101DB0000000000000000000000000000000000023 :101DC0000000000000000000000000000000000013 :101DD0000000000000000000000000000000000003 :101DE00000000000000000000000000000000000F3 -:101DF0000000000000000000000000008001000161 -:101E000000000000000000000001000000000001D0 +:101DF00000000000000000000000000000000000E3 +:101E000000000000000000000000000000000000D2 :101E100000000000000000000000000000000000C2 :101E200000000000000000000000000000000000B2 :101E300000000000000000000000000000000000A2 :101E40000000000000000000000000000000000092 :101E50000000000000000000000000000000000082 :101E60000000000000000000000000000000000072 -:101E7000000000000000000008000000000000005A -:101E8000000000C0A0900000000000C00090000012 +:101E70000000000000000000000000000000000062 +:101E80000000000000000000000000000000000052 :101E90000000000000000000000000000000000042 :101EA0000000000000000000000000000000000032 :101EB0000000000000000000000000000000000022 :101EC0000000000000000000000000000000000012 :101ED0000000000000000000000000000000000002 :101EE00000000000000000000000000000000000F2 -:101EF0000000000000000000000080000000000062 -:101F00000000000000808080000000000080008051 +:101EF00000000000000000000000000000000000E2 +:101F000000000000000000000000000000000000D1 :101F100000000000000000000000000000000000C1 :101F200000000000000000000000000000000000B1 :101F300000000000000000000000000000000000A1 :101F40000000000000000000000000000000000091 :101F50000000000000000000000000000000000081 :101F60000000000000000000000000000000000071 -:101F70000000000000000000000080008000000061 -:101F8000800000008080118091000305899100008D -:101F900080000000808000000000000000000000C1 +:101F70000000000000000000000000000000000061 +:101F80000000000000000000000000000000000051 +:101F90000000000000000000000000000000000041 :101FA0000000000000000000000000000000000031 :101FB0000000000000000000000000000000000021 :101FC0000000000000000000000000000000000011 :101FD0000000000000000000000000000000000001 :101FE00000000000000000000000000000000000F1 -:101FF0000000000000000000020002001000C0000D -:10200000000082000000C090004083000100C091E9 -:10201000000082000000C0900000000000000000EE +:101FF00000000000000000000000000000000000E1 +:1020000000000000000000000000000000000000D0 +:1020100000000000000000000000000000000000C0 :1020200000000000000000000000000000000000B0 :1020300000000000000000000000000000000000A0 :102040000000000000000000000000000000000090 :102050000000000000000000000000000000000080 :102060000000000000000000000000000000000070 -:102070000000000000000000000000000000000858 -:1020800000C0000000000090000000000000A090D0 -:1020900000C000000000009000C000000000000030 +:102070000000000000000000000000000000000060 +:102080000000000000000000000000000000000050 +:102090000000000000000000000000000000000040 :1020A0000000000000000000000000000000000030 :1020B0000000000000000000000000000000000020 :1020C0000000000000000000000000000000000010 :1020D0000000000000000000000000000000000000 :1020E00000000000000000000000000000000000F0 :1020F00000000000000000000000000000000000E0 -:10210000008000800000000000800000000000410E -:10211000808300800000000000800080000000003C +:1021000000000000000000000000000000000000CF +:1021100000000000000000000000000000000000BF :1021200000000000000000000000000000000000AF :10213000000000000000000000000000000000009F :10214000000000000000000000000000000000008F :10215000000000000000000000000000000000007F :10216000000000000000000000000000000000006F :10217000000000000000000000000000000000005F -:102180000000008000000000004100000000899174 -:102190008320110011118011802000000000000038 +:10218000000000000000000000000000000000004F +:10219000000000000000000000000000000000003F :1021A000000000000000000000000000000000002F :1021B000000000000000000000000000000000001F :1021C000000000000000000000000000000000000F :1021D00000000000000000000000000000000000FF :1021E00000000000000000000000000000000000EF :1021F00000000000000000000000000000000000DF -:1022000000000002001000000000000100000000BB -:10221000C091200100000001C00120010000000069 +:1022000000000000000000000000000000000000CE +:1022100000000000000000000000000000000000BE :1022200000000000000000000000000000000000AE :10223000000000000000000000000000000000009E :10224000000000000000000000000000000000008E :10225000000000000000000000000000000000007E :10226000000000000000000000000000000000006E :10227000000000000000000000000000000000005E -:102280000000000000000000000000000000070047 -:102290004200000000E0070000000000000007000E +:10228000000000000000000000000000000000004E +:10229000000000000000000000000000000000003E :1022A000000000000000000000000000000000002E :1022B000000000000000000000000000000000001E :1022C000000000000000000000000000000000000E :1022D00000000000000000000000000000000000FE :1022E00000000000000000000000000000000000EE :1022F00000000000000000000000000000000000DE -:10230000FFFFFFFFFFFFFFFFFF00000000000000D6 -:10231000FF00FF00FF000000FF000000FF000000C2 -:10232000FF000000000000000000000000000000AE +:1023000000000000000000000000000000000000CD +:1023100000000000000000000000000000000000BD +:1023200000000000000000000000000000000000AD :10233000000000000000000000000000000000009D :10234000000000000000000000000000000000008D :10235000000000000000000000000000000000007D :10236000000000000000000000000000000000006D :10237000000000000000000000000000000000005D -:102380000000FFFFFFFFFFFFFFFF00000000000055 -:102390000000FF00FF00FF000000FF000000FF0042 -:1023A0000000FF000000000000000000000000002E +:10238000000000000000000000000000000000004D +:10239000000000000000000000000000000000003D +:1023A000000000000000000000000000000000002D :1023B000000000000000000000000000000000001D :1023C000000000000000000000000000000000000D :1023D00000000000000000000000000000000000FD @@ -21068,25 +21068,25 @@ :10245000000000000000000000000000000000007C :10246000000000000000000000000000000000006C :10247000000000000000000000000000000000005C -:10248000000000000000FFFFFFFFFFFFFFFF002430 -:1024900004000000000000000F0F000000FF00001B -:1024A0000F0F000000FFFFFFF0F000000000000031 +:10248000000000000000000000000000000000004C +:10249000000000000000000000000000000000003C +:1024A000000000000000000000000000000000002C :1024B000000000000000000000000000000000001C :1024C000000000000000000000000000000000000C :1024D00000000000000000000000000000000000FC :1024E00000000000000000000000000000000000EC :1024F00000000000000000000000000000000000DC -:102500000000000000000000FFFFFFFFFFFFFFFFD3 -:10251000000000000000000000000F0F000000FF9E -:1025200000000F0F000000FFFFFFF0F000000000B0 +:1025000000000000000000000000000000000000CB +:1025100000000000000000000000000000000000BB +:1025200000000000000000000000000000000000AB :10253000000000000000000000000000000000009B :10254000000000000000000000000000000000008B :10255000000000000000000000000000000000007B :10256000000000000000000000000000000000006B :10257000000000000000000000000000000000005B -:102580000000000000000000000000A0100000009B -:10259000000000008A00000000080C0012C003E3E5 -:1025A000030E0C09B2C0038203080C0082C00000B5 +:10258000000000000000000000000000000000004B +:10259000000000000000000000000000000000003B +:1025A000000000000000000000000000000000002B :1025B000000000000000000000000000000000001B :1025C000000000000000000000000000000000000B :1025D00000000000000000000000000000000000FB @@ -21094,7 +21094,7 @@ :1025F00000000000000000000000000000000000DB :1026000000000000000000000000000000000000CA :1026100000000000000000000000000000000000BA -:1026200000000000FFF0FFF00000000000000000CC +:1026200000000000000000000000000000000000AA :10263000000000000000000000000000000000009A :10264000000000000000000000000000000000008A :10265000000000000000000000000000000000007A @@ -21102,7 +21102,7 @@ :10267000000000000000000000000000000000005A :10268000000000000000000000000000000000004A :10269000000000000000000000000000000000003A -:1026A000000040000000FFF0FFF00000000000000C +:1026A000000000000000000000000000000000002A :1026B000000000000000000000000000000000001A :1026C000000000000000000000000000000000000A :1026D00000000000000000000000000000000000FA @@ -21110,7 +21110,7 @@ :1026F00000000000000000000000000000000000DA :1027000000000000000000000000000000000000C9 :1027100000000000000000000000000000000000B9 -:102720000000000000000000AA8AAAAA0000000021 +:1027200000000000000000000000000000000000A9 :102730000000000000000000000000000000000099 :102740000000000000000000000000000000000089 :102750000000000000000000000000000000000079 @@ -21118,33 +21118,33 @@ :102770000000000000000000000000000000000059 :102780000000000000000000000000000000000049 :102790000000000000000000000000000000000039 -:1027A00000000000000000000000AAAAAAAA000081 -:1027B00000000000000020000000000000000000F9 -:1027C00000000000000000000000000000002000E9 -:1027D00020000000000000000000000000000000D9 -:1027E00000000000000000000000000000002000C9 -:1027F00020000000000000010000000000000000B8 -:1028000000000000000000000000000000000000C8 -:102810002000200000000000000000000000000078 -:1028200000000000000000000000000000000000A8 -:102830002000200000000000000000000000000058 -:102840000000000000000000000000000002000086 -:102850000000000000000000200000000000000058 -:102860000002000000020000000000000000000064 -:102870000000000000000000000000000000000058 +:1027A0000000000000000000000000000000000029 +:1027B0000000000000000000000000000000000019 +:1027C00000000000200000000000000000002000C9 +:1027D0002000200020000000000000000000000099 +:1027E00000000000200000000000000000002000A9 +:1027F0002000200020000000000000000000000079 +:1028000000000000000020000000000000000000A8 +:102810002000200020002000000000000000000038 +:102820000000000000002000000000000000000088 +:102830002000200020002000000000000000000018 +:102840000000000000020000000000000000000086 +:102850000000000000000000000000000000000078 +:102860000000000000020000400000000000000026 +:102870000000000000000002000000000000000056 :102880000000000000000000000000000000000048 :102890000000000000000000000000000000000038 :1028A0000000000000000000000000000000000028 -:1028B0000000000000000000000001000100010015 -:1028C0000100000000000000000000000000000007 -:1028D00000000000000000000010000000000000E8 +:1028B00000000000000040000000000000000000D8 +:1028C0000000000000000000000000000000000008 +:1028D00000000000000000000000000000000000F8 :1028E00000000000000000000000000000000000E8 :1028F00000000000000000000000000000000000D8 :1029000000000000000000000000000000000000C7 :1029100000000000000000000000000000000000B7 :1029200000000000000000000000000000000000A7 -:102930000000000000000000000002000200020091 -:102940000200020000000000000000000000000083 +:102930000000000000000000000000000000000097 +:102940000000000000000000000000000000000087 :102950000000000000000000000000000000000077 :102960000000000000000000000000000000000067 :102970000000000000000000000000000000000057 @@ -21152,7 +21152,7 @@ :102990000000000000000000000000000000000037 :1029A0000000000000000000000000000000000027 :1029B0000000000000000000000000000000000017 -:1029C0000000000000000000000000000000000007 +:1029C0000000000000000000000000000200000005 :1029D00000000000000000000000000000000000F7 :1029E00000000000000000000000000000000000E7 :1029F00000000000000000000000000000000000D7 @@ -21168,7 +21168,7 @@ :102A90000000000000000000000000000000000036 :102AA0000000000000000000000000000000000026 :102AB0000000000000000000000000000000000016 -:102AC0000000000000000000010000000000000005 +:102AC0000000000000000000000000000000000006 :102AD00000000000000000000000000000000000F6 :102AE00000000000000000000000000000000000E6 :102AF00000000000000000000000000000000000D6 @@ -21176,7 +21176,7 @@ :102B100000000000000000000000000000000000B5 :102B200000000000000000000000000000000000A5 :102B30000000000000000000000000000000000095 -:102B40000000000000000000000004000000000081 +:102B40000000000000000000000000000000000085 :102B50000000000000000000000000000000000075 :102B60000000000000000000000000000000000065 :102B70000000000000000000000000000000000055 @@ -21212,12 +21212,12 @@ :102D50000000000000000000000000000000000073 :102D60000000000000000000000000000000000063 :102D70000000000000000000000000000000000053 -:102D80000000000000000000000000000000002023 +:102D80000000000000000000000000000000000043 :102D90000000000000000000000000000000000033 :102DA0000000000000000000000000000000000023 :102DB0000000000000000000000000000000000013 :102DC0000000000000000000000000000000000003 -:102DD0000090000000000000000000000000000063 +:102DD00000000000000000000000000000000000F3 :102DE00000000000000000000000000000000000E3 :102DF00000000000000000000000000000000000D3 :102E000000000000000000000000000000000000C2 @@ -21225,7 +21225,7 @@ :102E200000000000000000000000000000000000A2 :102E30000000000000000000000000000000000092 :102E40000000000000000000000000000000000082 -:102E500000000080000000000000000000000000F2 +:102E50000000000000000000000000000000000072 :102E60000000000000000000000000000000000062 :102E70000000000000000000000000000000000052 :102E80000000000000000000000000000000000042 @@ -21233,7 +21233,7 @@ :102EA0000000000000000000000000000000000022 :102EB0000000000000000000000000000000000012 :102EC0000000000000000000000000000000000002 -:102ED0000000000000000000008000000000000072 +:102ED00000000000000000000000000000000000F2 :102EE00000000000000000000000000000000000E2 :102EF00000000000000000000000000000000000D2 :102F000000000000000000000000000000000000C1 @@ -21241,7 +21241,7 @@ :102F200000000000000000000000000000000000A1 :102F30000000000000000000000000000000000091 :102F40000000000000000000000000000000000081 -:102F5000000000000000004000000002000000002F +:102F50000000000000000000000000000000000071 :102F60000000000000000000000000000000000061 :102F70000000000000000000000000000000000051 :102F80000000000000000000000000000000000041 @@ -21249,7 +21249,7 @@ :102FA0000000000000000000000000000000000021 :102FB0000000000000000000000000000000000011 :102FC0000000000000000000000000000000000001 -:102FD00000000000000000000000A09000000000C1 +:102FD00000000000000000000000000000000000F1 :102FE00000000000000000000000000000000000E1 :102FF00000000000000000000000000000000000D1 :1030000000000000000000000000000000000000C0 @@ -21257,7 +21257,7 @@ :1030200000000000000000000000000000000000A0 :103030000000000000000000000000000000000090 :103040000000000000000000000000000000000080 -:1030500000000000000000004000000000800000B0 +:103050000000000000000000000000000000000070 :103060000000000000000000000000000000000060 :103070000000000000000000000000000000000050 :103080000000000000000000000000000000000040 @@ -21265,7 +21265,7 @@ :1030A0000000000000000000000000000000000020 :1030B0000000000000000000000000000000000010 :1030C0000000000000000000000000000000000000 -:1030D000000000000000000000000011800000005F +:1030D00000000000000000000000000000000000F0 :1030E00000000000000000000000000000000000E0 :1030F00000000000000000000000000000000000D0 :1031000000000000000000000000000000000000BF @@ -21273,8 +21273,8 @@ :10312000000000000000000000000000000000009F :10313000000000000000000000000000000000008F :10314000000000000000000000000000000000007F -:10315000000000000000000000000000000120004E -:1031600000880000000000000000000000000000D7 +:10315000000000000000000000000000000000006F +:10316000000000000000000000000000000000005F :10317000000000000000000000000000000000004F :10318000000000000000000000000000000000003F :10319000000000000000000000000000000000002F @@ -21282,7 +21282,7 @@ :1031B000000000000000000000000000000000000F :1031C00000000000000000000000000000000000FF :1031D00000000000000000000000000000000000EF -:1031E00000000700000000000000000000000000D8 +:1031E00000000000000000000000000000000000DF :1031F00000000000000000000000000000000000CF :1032000000000000000000000000000000000000BE :1032100000000000000000000000000000000000AE @@ -21290,7 +21290,7 @@ :10323000000000000000000000000000000000008E :10324000000000000000000000000000000000007E :10325000000000000000000000000000000000006E -:1032600000FF000000FF0000000000000000000060 +:10326000000000000000000000000000000000005E :10327000000000000000000000000000000000004E :10328000000000000000000000000000000000003E :10329000000000000000000000000000000000002E @@ -21298,7 +21298,7 @@ :1032B000000000000000000000000000000000000E :1032C00000000000000000000000000000000000FE :1032D00000000000000000000000000000000000EE -:1032E000000000FF000000FF0000000000000000E0 +:1032E00000000000000000000000000000000000DE :1032F00000000000000000000000000000000000CE :1033000000000000000000000000000000000000BD :1033100000000000000000000000000000000000AD @@ -21306,7 +21306,7 @@ :10333000000000000000000000000000000000008D :10334000000000000000000000000000000000007D :10335000000000000000000000000000000000006D -:10336000000000000000FF000000FFFF0000000060 +:10336000000000000000000000000000000000005D :10337000000000000000000000000000000000004D :10338000000000000000000000000000000000003D :10339000000000000000000000000000000000002D @@ -21314,7 +21314,7 @@ :1033B000000000000000000000000000000000000D :1033C00000000000000000000000000000000000FD :1033D00000000000000000000000000000000000ED -:1033E0000000000000000000FF00000000000000DE +:1033E00000000000000000000000000000000000DD :1033F00000000000000000000000000000000000CD :1034000000000000000000000000000000000000BC :1034100000000000000000000000000000000000AC @@ -21322,7 +21322,7 @@ :10343000000000000000000000000000000000008C :10344000000000000000000000000000000000007C :10345000000000000000000000000000000000006C -:10346000000000000000000015002A00054000A830 +:10346000000000000000000000000000000000005C :10347000000000000000000000000000000000004C :10348000000000000000000000000000000000003C :10349000000000000000000000000000000000002C @@ -21363,16 +21363,16 @@ :1036C00000000000000000000000000000000000FA :1036D00000000000000000000000000000000000EA :1036E00000000000000000000000000000000000DA -:1036F000000020002000000000000000000020006A -:103700002000200000002000000000000000000059 -:103710000000000020000000000000000000200069 -:103720002000000000002000000000000000000059 -:103730000000000300002000000000000000000066 -:103740002000200000000000200000000000000019 -:103750000000000000002000000000000000000049 -:1037600020002000000000002000000000000000F9 +:1036F00000000000000000000000000000000000CA +:1037000000000000000000000000000000000000B9 +:1037100000000000000000000000000000000000A9 +:103720000000000000000000000000000000000099 +:103730000000000000000000000000000000000089 +:103740000000000000000000000000000000000079 +:103750000000000000000000000000000000000069 +:103760000000000000000000000000000000000059 :103770000000000000000000000000000000000049 -:103780000000000000000000000000000000000039 +:1037800000000000400000000000000000000000F9 :103790000000000000000000000000000000000029 :1037A0000000000000000000000000000000000019 :1037B0000000000000000000000000000000000009 @@ -21380,30 +21380,30 @@ :1037D00000000000000000000000000000000000E9 :1037E00000000000000000000000000000000000D9 :1037F00000000000000000000000000000000000C9 -:1038000000000000000002000000000000100200A4 -:1038100000000000000000000000000000080000A0 -:103820000000000000000000000000000010000088 -:103830000000000000000000010001000100100075 +:1038000000000000000000000000000000000000B8 +:1038100000000000000000000000000000000000A8 +:103820000000000000000000000000000000000098 +:103830000000000000000000000000000000000088 :103840000000000000000000000000000000000078 :103850000000000000000000000000000000000068 :103860000000000000000000000000000000000058 -:103870000000000000000000000000000000000840 -:1038800000000000000000088000000000000008A8 -:103890008000000000000008000000000000001090 -:1038A0000000000000000008000000000000000808 -:1038B0000000000000000084000010001000100054 -:1038C0008008000000000000000800000000000068 -:1038D00000080000000000000000000000000000E0 -:1038E0000084000000000000001000000000000044 -:1038F00000080000000000000000000000000000C0 -:1039000000100000000000000000000000000000A7 +:103870000000000000000000000000000000000048 +:103880000000000000000000000000000000000038 +:103890000000000000000000000000000000000028 +:1038A0000000000000000000000000000000000018 +:1038B0000000000000000000000000000000000008 +:1038C00000000000000000000000000000000000F8 +:1038D00000000000000000000000000000000000E8 +:1038E00000000000000000000000000000000000D8 +:1038F00000000000000000000000000000000000C8 +:1039000000000000000000000000000000000000B7 :1039100000000000000000000000000000000000A7 :103920000000000000000000000000000000000097 :103930000000000000000000000000000000000087 -:103940000000000000000000000000100000000067 +:103940000000000000000000000000000000000077 :103950000000000000000000000000000000000067 :103960000000000000000000000000000000000057 -:103970000000001000000000000000000000000037 +:103970000000000000000000000000000000000047 :103980000000000000000000000000000000000037 :103990000000000000000000000000000000000027 :1039A0000000000000000000000000000000000017 @@ -21413,42 +21413,42 @@ :1039E00000000000000000000000000000000000D7 :1039F00000000000000000000000000000000000C7 :103A000000000000000000000000000000000000B6 -:103A1000000000000100000000000000010008009C -:103A20000000000000000000000000000000820014 +:103A100000000000000000000000000000000000A6 +:103A20000000000000000000000000000000000096 :103A30000000000000000000000000000000000086 -:103A40000000000000000100000000000000000075 +:103A40000000000000000000000000000000000076 :103A50000000000000000000000000000000000066 :103A60000000000000000000000000000000000056 :103A70000000000000000000000000000000000046 :103A80000000000000000000000000000000000036 -:103A9000000000000000040000000000000004001E +:103A90000000000000000000000000000000000026 :103AA0000000000000000000000000000000000016 :103AB0000000000000000000000000000000000006 -:103AC00000000000000000002000000000000000D6 +:103AC00000000000000000000000000000000000F6 :103AD00000000000000000000000000000000000E6 -:103AE00000000000000000000008000000000000CE +:103AE00000000000000000000000000000000000D6 :103AF00000000000000000000000000000000000C6 :103B000000000000000000000000000000000000B5 -:103B10000000000000000020000000000000002065 +:103B100000000000000000000000000000000000A5 :103B20000000000000000000000000000000000095 -:103B3000000008000000000000000000000000007D +:103B30000000000000000000000000000000000085 :103B40000000000000000000000000000000000075 :103B50000000000000000000000000000000000065 :103B60000000000000000000000000000000000055 :103B70000000000000000000000000000000000045 -:103B800000000000000000000000008400000000B1 -:103B90000000000000000000000100000000000024 -:103BA0000001000000000000000000000000000014 +:103B80000000000000000000000000000000000035 +:103B90000000000000000000000000000000000025 +:103BA0000000000000000000000000000000000015 :103BB0000000000000000000000000000000000005 :103BC00000000000000000000000000000000000F5 :103BD00000000000000000000000000000000000E5 :103BE00000000000000000000000000000000000D5 :103BF00000000000000000000000000000000000C5 :103C000000000000000000000000000000000000B4 -:103C100000000000000200000000000000000000A2 +:103C100000000000000000000000000000000000A4 :103C20000000000000000000000000000000000094 :103C30000000000000000000000000000000000084 -:103C400000000000C00000000000000000000000B4 +:103C40000000000000000000000000000000000074 :103C50000000000000000000000000000000000064 :103C60000000000000000000000000000000000054 :103C70000000000000000000000000000000000044 @@ -21461,81 +21461,81 @@ :103CE00000000000000000000000000000000000D4 :103CF00000000000000000000000000000000000C4 :103D000000000000000000000000000000000000B3 -:103D10000000000000000000000000009000000013 -:103D20000000000090000000000000000000000003 +:103D100000000000000000000000000000000000A3 +:103D20000000000000000000000000000000000093 :103D30000000000000000000000000000000000083 -:103D40000000000000000000000000000100000072 +:103D40000000000000000000000000000000000073 :103D50000000000000000000000000000000000063 :103D60000000000000000000000000000000000053 :103D70000000000000000000000000000000000043 :103D80000000000000000000000000000000000033 -:103D90000000000000000000000000001100800092 -:103DA0000000000011008000000000000000000082 +:103D90000000000000000000000000000000000023 +:103DA0000000000000000000000000000000000013 :103DB0000000000000000000000000000000000003 -:103DC00000000000000000000000000000001100E2 -:103DD00000210000000000000000000000000000C2 +:103DC00000000000000000000000000000000000F3 +:103DD00000000000000000000000000000000000E3 :103DE00000000000000000000000000000000000D3 :103DF00000000000000000000000000000000000C3 :103E000000000000000000000000000000000000B2 :103E100000000000000000000000000000000000A2 -:103E20000080000000000000008000000000000092 +:103E20000000000000000000000000000000000092 :103E30000000000000000000000000000000000082 :103E40000000000000000000000000000000000072 -:103E500000400000114000000000000000000000D1 +:103E50000000000000000000000000000000000062 :103E60000000000000000000000000000000000052 :103E70000000000000000000000000000000000042 :103E80000000000000000000000000000000000032 :103E90000000000000000000000000000000000022 -:103EA0000000002000000020000000200000002092 +:103EA0000000000000000000000000000000000012 :103EB0000000000000000000000000000000000002 :103EC00000000000000000000000000000000000F2 -:103ED00000000000000001010000000000000000E0 +:103ED00000000000000000000000000000000000E2 :103EE00000000000000000000000000000000000D2 :103EF00000000000000000000000000000000000C2 :103F000000000000000000000000000000000000B1 :103F100000000000000000000000000000000000A1 -:103F2000000001000088880000000100008888006F +:103F20000000000000000000000000000000000091 :103F30000000000000000000000000000000000081 :103F40000000000000000000000000000000000071 -:103F500000000000000090000001000000000000D0 +:103F50000000000000000000000000000000000061 :103F60000000000000000000000000000000000051 :103F70000000000000000000000000000000000041 :103F80000000000000000000000000000000000031 :103F90000000000000000000000000000000000021 -:103FA000000000004100008000000000410000808F +:103FA0000000000000000000000000000000000011 :103FB0000000000000000000000000000000000001 :103FC00000000000000000000000000000000000F1 -:103FD00000000000000000000000000805000000D4 +:103FD00000000000000000000000000000000000E1 :103FE00000000000000000000000000000000000D1 :103FF00000000000000000000000000000000000C1 :1040000000000000000000000000000000000000B0 :1040100000000000000000000000000000000000A0 -:1040200000000000000000110000008000000011EE -:104030000000008000000000000000000000000000 +:104020000000000000000000000000000000000090 +:104030000000000000000000000000000000000080 :104040000000000000000000000000000000000070 -:10405000000000000000000000001100000000004F +:104050000000000000000000000000000000000060 :104060000000000000000000000000000000000050 :104070000000000000000000000000000000000040 :104080000000000000000000000000000000000030 :104090000000000000000000000000000000000020 -:1040A00000000000000000000001000000400000CF -:1040B00000010000004000000000000000000000BF +:1040A0000000000000000000000000000000000010 +:1040B0000000000000000000000000000000000000 :1040C00000000000000000000000000000000000F0 -:1040D00000000000000000000000000001000000DF +:1040D00000000000000000000000000000000000E0 :1040E00000000000000000000000000000000000D0 :1040F00000000000000000000000000000000000C0 :1041000000000000000000000000000000000000AF :10411000000000000000000000000000000000009F -:104120000000000000000000000000000000070088 -:104130008200000000000700820000000000000074 +:10412000000000000000000000000000000000008F +:10413000000000000000000000000000000000007F :10414000000000000000000000000000000000006F -:10415000000000000000000000000000000000E07F +:10415000000000000000000000000000000000005F :10416000000000000000000000000000000000004F :10417000000000000000000000000000000000003F :10418000000000000000000000000000000000002F :10419000000000000000000000000000000000001F :1041A000000000000000000000000000000000000F -:1041B0000000F0F0000000000000F0F0000000003F +:1041B00000000000000000000000000000000000FF :1041C00000000000000000000000000000000000EF :1041D00000000000000000000000000000000000DF :1041E00000000000000000000000000000000000CF @@ -21543,7 +21543,7 @@ :1042000000000000000000000000000000000000AE :10421000000000000000000000000000000000009E :10422000000000000000000000000000000000008E -:1042300000000000F0F0000000000000F0F00000BE +:10423000000000000000000000000000000000007E :10424000000000000000000000000000000000006E :10425000000000000000000000000000000000005E :10426000000000000000000000000000000000004E @@ -21559,7 +21559,7 @@ :1043000000000000000000000000000000000000AD :10431000000000000000000000000000000000009D :10432000000000000000000000000000000000008D -:10433000000000000000FFFF000000000000FFFF81 +:10433000000000000000000000000000000000007D :10434000000000000000000000000000000000006D :10435000000000000000000000000000000000005D :10436000000000000000000000000000000000004D @@ -21575,10 +21575,10 @@ :1044000000000000000000000000000000000000AC :10441000000000000000000000000000000000009C :10442000000000000000000000000000000000008C -:1044300000000000000005000A00054000A805007B -:104440000A00054000A80000000000000000000075 +:10443000000000000000000000000000000000007C +:10444000000000000000000000000000000000006C :10445000000000000000000000000000000000005C -:10446000000000000000000000000006000C00003A +:10446000000000000000000000000000000000004C :10447000000000000000000000000000000000003C :10448000000000000000000000000000000000002C :10449000000000000000000000000000000000001C @@ -21586,7 +21586,7 @@ :1044B00000000000000000000000000000000000FC :1044C00000000000000000000000000000000000EC :1044D00000000000000000000000000000000000DC -:1044E000000000000000000000000000FF0000FFCE +:1044E00000000000000000000000000000000000CC :1044F00000000000000000000000000000000000BC :1045000000000000000000000000000000000000AB :10451000000000000000000000000000000000009B @@ -21594,8 +21594,8 @@ :10453000000000000000000000000000000000007B :10454000000000000000000000000000000000006B :10455000000000000000000000000000000000005B -:104560000000000000000000000000000000FF004C -:1045700000FF00000000000000000000000000003C +:10456000000000000000000000000000000000004B +:10457000000000000000000000000000000000003B :10458000000000000000000000000000000000002B :10459000000000000000000000000000000000001B :1045A000000000000000000000000000000000000B @@ -21603,7 +21603,7 @@ :1045C00000000000000000000000000000000000EB :1045D00000000000000000000000000000000000DB :1045E00000000000000000000000000000000000CB -:1045F000FF0000FF000000000000000000000000BD +:1045F00000000000000000000000000000000000BB :1046000000000000000000000000000000000000AA :10461000000000000000000000000000000000009A :10462000000000000000000000000000000000008A @@ -21611,42 +21611,42 @@ :10464000000000000000000000000000000000006A :10465000000000000000000000000000000000005A :10466000000000000000000000000000000000004A -:104670000000FF0000FF000000000000000000003C +:10467000000000000000000000000000000000003A :10468000000000000000000000000000000000002A :10469000000000000000000000000000000000001A :1046A000000000000000000000000000000000000A :1046B00000000000000000000000000000000000FA -:1046C00000000000000000002000000000000000CA +:1046C00000000000000000000000200000020000C8 :1046D00000000000000000000000000000000000DA :1046E00000000000000000000000000000000000CA -:1046F00000010000000000000000000000000000B9 +:1046F00000020000000000000000000000000000B8 :1047000000000000000000000000000000000000A9 :104710000000000000000000000000000000000099 :104720000000000000000000000000000000000089 -:104730000000000000000000000000020000000077 +:104730000000000000000000000000000000000079 :104740000000000000000000000000000000000069 -:104750000000000000000000000000000000000257 +:104750000000100000000000000000000000000049 :104760000000000000000000000000000000000049 :104770000000000000000000000000000000000039 -:104780000000000000000000000000000000000029 +:104780000002000000000000000000000000000027 :104790000000000000000000000000000000000019 -:1047A0000000000000000000000000000000000009 -:1047B00000000000000000000000000010000000E9 -:1047C00000000010000000000000040000000000D5 +:1047A00040020000000000000000000000000000C7 +:1047B00000000000000000000000000000000000F9 +:1047C00000000000000000000000000000000000E9 :1047D00000000000000000000000000000000000D9 :1047E00000000000000000000000000000000000C9 :1047F00000000000000000000000000000000000B9 :1048000000000000000000000000000000000000A8 :104810000000000000000000000000000000000098 -:104820000000000000000000000000000000000088 -:1048300000000000000000000000000000008000F8 -:104840000000000000080400040004000000000054 -:104850000000000000080000000000000000000050 -:104860000000000000080000000000000000000040 -:104870000000000000080000000000000000000030 -:104880000000000000000008000000000000000020 -:104890000000000000000088000000000000000090 -:1048A0000000000000000008000000000000000000 +:104820000000000001000000000000000000000087 +:104830000000000000000000000000000000000078 +:104840000000000000000000000000000000000068 +:104850000000000000000000000000000000000058 +:104860000000000000000000000000000000000048 +:104870000000000000000000000000000000000038 +:10488000000000000000000000000900000000001F +:104890000000000000000000000000000000000018 +:1048A00000000000000040000000000000000000C8 :1048B00000000000000000000000000000000000F8 :1048C00000000000000000000000000000000000E8 :1048D00000000000000000000000000000000000D8 @@ -21654,220 +21654,220 @@ :1048F00000000000000000000000000000000000B8 :1049000000000000000000000000000000000000A7 :104910000000000000000000000000000000000097 -:104920000000000000000000000000000000000087 -:104930000000000000000000000000000000000077 -:104940000000000000000000030000000000000064 -:104950002100000000000000000000000000000036 +:104920000000000000000000002100000005002041 +:1049300000200020000000200020000000000000F7 +:104940000000000000000000000000000000000067 +:104950000000000000000000000000000000000057 :104960000000000000000000000000000000000047 :104970000000000000000000000000000000000037 :104980000000000000000000000000000000000027 :104990000000000000000000000000000000000017 :1049A0000000000000000000000000000000000007 -:1049B00000000000000000000000000000000000F7 -:1049C0000000000000000000010000800000000066 +:1049B00000010001000100000001000100000000F2 +:1049C00000000000000000000000000000000000E7 :1049D00000000000000000000000000000000000D7 :1049E00000000000000000000000000000000000C7 :1049F00000000000000000000000000000000000B7 -:104A000000000000000000000000000000000000A6 -:104A10000000000000000000000000000000000096 -:104A20000000000000000000000000000000000086 -:104A30000000000000000000000000000040000036 -:104A40000000000000000000000020000004000042 +:104A0000A000000000000000000000000000040002 +:104A10008200040004000400A00000000400040060 +:104A20008200000000000000000000000002000002 +:104A30000000000000000000000000000000000076 +:104A40000000000000000000000000000000000066 :104A50000000000000000000000000000000000056 :104A60000000000000000000000000000000000046 :104A70000000000000000000000000000000000036 :104A80000000000000000000000000000000000026 -:104A90000000000000000000000000000000000016 -:104AA0000000000000000000000000000000000006 +:104A90008000000080008000800000000000800096 +:104AA0008000000000000000000000000000000185 :104AB00000000000000000000000000000000000F6 -:104AC0000000000000009000000000000000000056 +:104AC00000000000000000000000000000000000E6 :104AD00000000000000000000000000000000000D6 :104AE00000000000000000000000000000000000C6 :104AF00000000000000000000000000000000000B6 :104B000000000000000000000000000000000000A5 -:104B10000000000000000000000000000000000095 -:104B20000000000000000000000000000000000085 -:104B30000000000000000000000000000000000075 +:104B1000000000008200000000000000040000000F +:104B200000000000820000000000000000000020E3 +:104B300000200000820000000000000000000000D3 :104B40000000000000000000000000000000000065 -:104B500000000000000000000084000000000000D1 -:104B600000840000000000000000000000000000C1 +:104B50000000000000000000000000000000000055 +:104B60000000000000000000000000000000000045 :104B70000000000000000000000000000000000035 -:104B80000000000021000000000000840000000080 -:104B90000000000000000000000000000000000015 +:104B80000000000000000000000000000000000025 +:104B90000000000000000000000000000000800095 :104BA0000000000000000000000000000000000005 -:104BB00000000000000000000000000000000000F5 -:104BC0000000000000000000C00000000000000025 -:104BD00000000800000000000000000000000000CD -:104BE00000000002000000000000000200000000C1 -:104BF00000000000000000000000000008000000AD +:104BB00000010001000000000000000000000000F3 +:104BC00000000000000000000000000000000000E5 +:104BD00000000000000000000000000000000000D5 +:104BE00000000000000000000000000000000000C5 +:104BF00000000000000000000000000000000800AD :104C000000000000000000000000000000000000A4 -:104C10000000000000020000000000000000000092 -:104C20000000000000000000000000000000000084 -:104C30000000000000000000000000000000000074 -:104C40000000000000000000000000000000000064 +:104C10000000000000000000040000000000000090 +:104C2000000004000000010040000000000000211E +:104C30000020000000000120002000000000000013 +:104C40000020000000000000000000000000000044 :104C50000000000000000000000000000000000054 :104C60000000000000000000000000000000000044 :104C70000000000000000000000000000000000034 :104C80000000000000000000000000000000000024 -:104C90000000000000000000000000000000000014 -:104CA0000000000000000000000000000000000004 -:104CB00000000000000000000000000000000000F4 -:104CC00000000000000000000000000000000000E4 -:104CD00001000000000000000000000000000000D3 +:104C90000000000000000000000080000000000094 +:104CA0000000000080000000040080000000000000 +:104CB00000000001000000000401000100000000ED +:104CC00000000001000000000000000000000000E3 +:104CD00000000000000000000000000000000000D4 :104CE00000000000000000000000000000000000C4 :104CF00000000000000000000000000000000000B4 :104D000000000000000000000000000000000000A3 -:104D10000000000000000000000000000000000093 -:104D20000000000000000000000000000000000083 -:104D30000000000000000000000000000000000073 -:104D40000000000000000000000000000000000063 -:104D50000000110021000000000000000000000021 +:104D10000000000000000000000000C00090000043 +:104D2000000000C000900000000000C09090400013 +:104D3000000100C000900200000000C000900000D0 +:104D4000000000C000900000000000000000000013 +:104D50000000000000000000000000000000000053 :104D60000000000000000000000000000000000043 :104D70000000000000000000000000000000000033 :104D80000000000000000000000000000000000023 -:104D90000000000000000000000000000000000013 -:104DA0000000000000000000000000000000000003 -:104DB00000000000000000000000000000000000F3 -:104DC00000000000000000000000000000000000E3 -:104DD0000000000000410900000300800000000006 +:104D90000000000000000000000000000080008013 +:104DA000000000000380008000000000008380916C +:104DB00000000021038009800000000000800080C6 +:104DC00000000000038000800000000000000000E0 +:104DD00000000000000000000000000000000000D3 :104DE00000000000000000000000000000000000C3 :104DF00000000000000000000000000000000000B3 :104E000000000000000000000000000000000000A2 :104E10000000000000000000000000000000000092 -:104E20000000000000000000000000000000000082 -:104E30000000000000000000000000000000000072 -:104E40000000000000000000000000000000000062 -:104E500000000000000000010100000000880000C8 +:104E20000000800080800000000080008080400042 +:104E3000090083008291090005008000C080000005 +:104E40000000800080800000000080008080000062 +:104E50000000000000000000000000000000000052 :104E60000000000000000000000000000000000042 :104E70000000000000000000000000000000000032 :104E80000000000000000000000000000000000022 :104E90000000000000000000000000000000000012 -:104EA0000000000000000000000000000000000002 -:104EB00000000000000000000000000000000000F2 -:104EC00000000000000000000000000000000000E2 -:104ED0000000000000000000000088000000010049 +:104EA000000000008400C090000000008400C0905A +:104EB000000200008500C091000000008400C09046 +:104EC000000000008400C090000000008400C0903A +:104ED00000000000000000000000000000000000D2 :104EE00000000000000000000000000000000000C2 :104EF00000000000000000000000000000000000B2 :104F000000000000000000000000000000000000A1 :104F10000000000000000000000000000000000091 -:104F20000000000000000000000000000000000081 -:104F30000000000000000000000000000000000071 -:104F40000000000000000000000000000000000061 -:104F50000000000000000000000000000000000051 -:104F60004100000000000000000000000000000000 +:104F2000000000000000009000C0000000000090A1 +:104F300000C000000100019100C0000000000091CD +:104F400000C000000000009000C0000000000090C1 +:104F500000C0000000000000000000000000000091 +:104F60000000000000000000000000000000000041 :104F70000000000000000000000000000000000031 :104F80000000000000000000000000000000000021 :104F90000000000000000000000000000000000011 -:104FA0000000000000000000000000000000000001 -:104FB00000000000000000000000000000000000F1 -:104FC00000000000000000000000000000000000E1 -:104FD00000000000000000000000000000000011C0 -:104FE00005000000000000000000000000000000BC +:104FA0000000000000000000008000800000000001 +:104FB000008000800009030211A14082004000210E +:104FC00000A10080000000000080008000000000C0 +:104FD00000800080000000000000000000000000D1 +:104FE00000000000000000000000000000000000C1 :104FF00000000000000000000000000000000000B1 :1050000000000000000000000000000000000000A0 :105010000000000000000000000000000000000090 -:105020000000000000000000000000000000000080 -:105030000000000000000000000000000000000070 -:105040000000000000000000000000000000000060 -:105050000000000000000000000000000000000050 -:10506000000100000000000000000000000000003F +:10502000000000000000804000000000000080112F +:10503000800000000000A140000005001100801168 +:10504000800000000040804000000000000080114F +:1050500080000000000000000000000000000000D0 +:105060000000000000000000000000000000000040 :105070000000000000000000000000000000000030 :105080000000000000000000000000000000000020 :105090000000000000000000000000000000000010 -:1050A0000000000000000000000000000000000000 -:1050B00000000000000000000000000000000000F0 -:1050C00000000000000000000000000000000000E0 -:1050D00000000000000000000000000000000000D0 -:1050E000000000E00000814100000000000000001E +:1050A0000000000000000000900000000000000070 +:1050B000C001200000000000C100000000009000BE +:1050C000C041200000000000C0000000000090006F +:1050D000C0012000000000000000000000000000EF +:1050E00000000000000000000000000000000000C0 :1050F00000000000000000000000000000000000B0 :10510000000000000000000000000000000000009F :10511000000000000000000000000000000000008F -:10512000000000000000000000000000000000007F -:10513000000000000000000000000000000000006F -:10514000000000000000000000000000000000005F -:10515000000000000000000000000000000000004F +:1051200000000000000000000000008100000700F7 +:10513000000000410000070000000081000007009F +:10514000000000410000070000000081000007008F +:105150000000004100000700000000000000000007 :10516000000000000000000000000000000000003F :10517000000000000000000000000000000000002F :10518000000000000000000000000000000000001F :10519000000000000000000000000000000000000F -:1051A00000000000000000000000000000000000FF -:1051B00000000000000000000000000000000000EF -:1051C00000000000000000000000000000000000DF -:1051D00000000000000000000000000000000000CF +:1051A0000000000000000000000000000000FFFF01 +:1051B000000000FF000000FF000000FF00003C3C7A +:1051C000000000FF000000FF000000FF00003C3C6A +:1051D000000000FF000000FF000000FF00000000D2 :1051E00000000000000000000000000000000000BF :1051F00000000000000000000000000000000000AF :10520000000000000000000000000000000000009E :10521000000000000000000000000000000000008E :10522000000000000000000000000000000000007E -:10523000000000000000000000000000000000006E -:10524000000000000000000000000000000000005E -:10525000000000000000000000000000000000004E +:10523000FFFF000000FF000000FF000000FF000073 +:105240003C3C000000FF000000FF000000FF0000E9 +:105250003C3C000000FF000000FF000000FF0000D9 :10526000000000000000000000000000000000003E :10527000000000000000000000000000000000002E :10528000000000000000000000000000000000001E :10529000000000000000000000000000000000000E :1052A00000000000000000000000000000000000FE -:1052B00000000000000000000000000000000000EE -:1052C00000000000000000000000000000000000DE -:1052D00000000000000000000000000000000000CE +:1052B000FF000000FF000000FF000000FF000000F2 +:1052C000FF000000FF000000FF000000FF000000E2 +:1052D000FF000000FF000000FF00000000FFFFFFD4 :1052E00000000000000000000000000000000000BE :1052F00000000000000000000000000000000000AE :10530000000000000000000000000000000000009D :10531000000000000000000000000000000000008D :10532000000000000000000000000000000000007D -:10533000000000000000000000000000000000006D -:10534000000000000000000000000000000000005D -:10535000000000000000000000000000000000004D -:105360000000000000000000000000400006000CEB +:105330000000FF000000FF000000FF000000FF0071 +:105340000000FF000000FF000000FF000000FF0061 +:105350000000FF000000FF000000FF00000000FF51 +:10536000FFFF00000000000000000000000000003F :10537000000000000000000000000000000000002D :10538000000000000000000000000000000000001D :10539000000000000000000000000000000000000D :1053A00000000000000000000000000000000000FD -:1053B00000000000000000000000000000000000ED -:1053C00000000000000000000000000000000000DD -:1053D00000000000000000000000000000000000CD -:1053E00000000000000000000000000000000F0F9F -:1053F000FFFF0000000000000000000000000000AF +:1053B00000000000030203300C0092C0038203309F +:1053C0000C0092C003E303360C0D92C003E30336D6 +:1053D0000C0D92C0038203300C0092C00382033094 +:1053E0000C0082C00000000000000000000000006F +:1053F00000000000000000000000000000000000AD :10540000000000000000000000000000000000009C :10541000000000000000000000000000000000008C :10542000000000000000000000000000000000007C :10543000000000000000000000000000000000006C -:10544000000000000000000000000000000000005C -:10545000000000000000000000000000000000004C +:105440000000000000000404000000000020000034 +:10545000000000200020000000000000000000000C :10546000000000000000000000000000000000003C -:105470000F0F00000000000000000000000000000E +:10547000000000000000000000000000000000002C :10548000000000000000000000000000000000001C :10549000000000000000000000000000000000000C :1054A00000000000000000000000000000000000FC :1054B00000000000000000000000000000000000EC -:1054C00000000000000000000000000000000000DC +:1054C00000000000000000000000000000000020BC :1054D00000000000000000000000000000000000CC :1054E00000000000000000000000000000000000BC -:1054F00000000000F0F000000000000000000000CC +:1054F00000000000000000000000000000000000AC :10550000000000000000000000000000000000009B :10551000000000000000000000000000000000008B :10552000000000000000000000000000000000007B :10553000000000000000000000000000000000006B -:10554000000000000000000000000000000000005B -:10555000000000000000000000000000000000004B +:105540000000000000000000000014000000000047 +:1055500000300000000000002020000000000000DB :10556000000000000000000000000000000000003B -:10557000000000000000F0F000000000000000004B +:10557000000000000000000000000000000000002B :10558000000000000000000000000000000000001B :10559000000000000000000000000000000000000B :1055A00000000000000000000000000000000000FB :1055B00000000000000000000000000000000000EB :1055C00000000000000000000000000000000000DB -:1055D00000000000000000000000000000000000CB -:1055E00000000000000000000000000000000000BB -:1055F000000020000000000000000000000000008B +:1055D000000000300000000000000000000000009B +:1055E00000000000000000000000000001000000BA +:1055F000000000800000000000000000000000002B :10560000000000000000000000000000000000009A -:10561000000020000000000000000000000000006A -:105620000000000000000000000000000001000079 -:10563000000000002000000000000000000000004A +:10561000000000000000000000000000000000008A +:10562000000000000000000000000000000000007A +:10563000000000000000000000000000000000006A :10564000000000000000000000000000000000005A -:10565000000000002000000000000000000000002A -:105660000000000000000000000000000000000238 -:10567000000000000000000000000000000000002A +:10565000000000000000000000000000000000004A +:105660000000000000000000000000000000080032 +:10567000000000000010000000000000000000001A :10568000000000000000000000000000000000001A :10569000000000000000000000000000000000000A :1056A00000000000000000000000000000000000FA @@ -21880,18 +21880,18 @@ :105710000000000000000000000000000000000089 :105720000000000000000000000000000000000079 :105730000000000000000000000000000000000069 -:105740000000000000000400000000000000000055 +:105740000000000000000000000000000000000059 :105750000000000000000000000000000000000049 :105760000000000000000000000000000000000039 -:1057700000000000000000000010200000000000F9 -:1057800000000000000200000010000800000000FF -:1057900000000000000000000010000000000000F9 -:1057A00000000000000000000000000800000000F1 +:105770000000000000000000000000000000000029 +:105780000000000000000000000000000000000019 +:105790000000000000000000000000000000000009 +:1057A00000000000000000000000000000000000F9 :1057B00000000000000000000000000000000000E9 -:1057C00000000000040004000000000000080000C9 +:1057C00000000000000000000000000000000000D9 :1057D00000000000000000000000000000000000C9 -:1057E00000000000000000000000000000080000B1 -:1057F00000000000000000000000000800000000A1 +:1057E00000000000000000000000000000000000B9 +:1057F00000000000000000000000000000000000A9 :105800000000000000000000000000000000000098 :105810000000000000000000000000000000000088 :105820000000000000000000000000000000000078 @@ -21909,7 +21909,7 @@ :1058E00000000000000000000000000000000000B8 :1058F00000000000000000000000000000000000A8 :105900000000000000000000000000000000000097 -:105910000080000000000100000000000000000006 +:105910000000000000000000000000000000000087 :105920000000000000000000000000000000000077 :105930000000000000000000000000000000000067 :105940000000000000000000000000000000000057 @@ -21917,7 +21917,7 @@ :105960000000000000000000000000000000000037 :105970000000000000000000000000000000000027 :105980000000000000000000000000000000000017 -:1059900000000040000000000400000000000000C3 +:105990000000000000000000000000000000000007 :1059A00000000000000000000000000000000000F7 :1059B00000000000000000000000000000000000E7 :1059C00000000000000000000000000000000000D7 @@ -21925,29 +21925,29 @@ :1059E00000000000000000000000000000000000B7 :1059F00000000000000000000000000000000000A7 :105A00000000000000000000000000000000000096 -:105A10000000000000000000002000000000000066 +:105A10000000000000000000000000000000000086 :105A20000000000000000000000000000000000076 :105A30000000000000000000000000000000000066 :105A40000000000000000000000000000000000056 :105A50000000000000000000000000000000000046 :105A60000000000000000000000000000000000036 :105A70000000000000000000000000000000000026 -:105A80000000000000C000000000008400000000D2 -:105A90000000000000000000000000010000000005 +:105A80000000000000000000000000000000000016 +:105A90000000000000000000000000000000000006 :105AA00000000000000000000000000000000000F6 :105AB00000000000000000000000000000000000E6 :105AC00000000000000000000000000000000000D6 :105AD00000000000000000000000000000000000C6 -:105AE00000000000000000000000000000000000B6 -:105AF00000000000000000000000000000000000A6 +:105AE0000000000000000000000000000000210095 +:105AF0000000000000000000000000000000210085 :105B00000000000000000000000000000000000095 -:105B10000000000000020000000000000000000083 +:105B10000000000000000000000000000000000085 :105B20000000000000000000000000000000000075 :105B30000000000000000000000000000000000065 :105B40000000000000000000000000000000000055 :105B50000000000000000000000000000000000045 -:105B60000000000000000000000000000000000035 -:105B70000000000000000000000000000000000025 +:105B600000000000000000009000000000000000A5 +:105B70000000000000000000900000000000000095 :105B80000000000000000000000000000000000015 :105B90000000000000000000000000000000000005 :105BA00000000000000000000000000000000000F5 @@ -21957,7 +21957,7 @@ :105BE00000000000000000000000000000000000B5 :105BF00000000000000000000000000000000000A5 :105C00000000000000000000000000000000000094 -:105C100000000000000000000000000000009000F4 +:105C10000000000000000000000000000000000084 :105C20000000000000000000000000000000000074 :105C30000000000000000000000000000000000064 :105C40000000000000000000000000000000000054 @@ -21965,24 +21965,24 @@ :105C60000000000000000000000000000000000034 :105C70000000000000000000000000000000000024 :105C80000000000000000000000000000000000014 -:105C900000000000000000000000000000001100F3 -:105CA0008000000000000000000000000000000074 +:105C90000000000000000000000000000000000004 +:105CA00000000000000000000000000000000000F4 :105CB00000000000000000000000000000000000E4 :105CC00000000000000000000000000000000000D4 :105CD00000000000000000000000000000000000C4 :105CE00000000000000000000000000000000000B4 :105CF00000000000000000000000000000000000A4 -:105D00000000000000000000000000000000000093 +:105D00000000000000000000000080000000000013 :105D10000000000000000000000000000000000083 -:105D200000000080000000000000000000000000F3 +:105D20000000000000000000000000000000000073 :105D30000000000000000000000000000000000063 :105D40000000000000000000000000000000000053 :105D50000000000000000000000000000000000043 :105D60000000000000000000000000000000000033 :105D70000000000000000000000000000000000023 -:105D80000000000000000000000000000000000013 +:105D80000000000000000000000000000200000011 :105D90000000000000000000000000000000000003 -:105DA00000000000002000000020000000000000B3 +:105DA00000000000000000000000000000000000F3 :105DB00000000000000000000000000000000000E3 :105DC00000000000000000000000000000000000D3 :105DD00000000000000000000000000000000000C3 @@ -21990,7 +21990,7 @@ :105DF00000000000000000000000000000000000A3 :105E00000000000000000000000000000000000092 :105E10000000000000000000000000000000000082 -:105E20000000000001000088880000000000000061 +:105E20000000000000000000000000000000000072 :105E30000000000000000000000000000000000062 :105E40000000000000000000000000000000000052 :105E50000000000000000000000000000000000042 @@ -21998,7 +21998,7 @@ :105E70000000000000000000000000000000000022 :105E80000000000000000000000000000000000012 :105E90000000000000000000000000000000000002 -:105EA0000000000000004100008000000000000031 +:105EA00000000000000000000000000000000000F2 :105EB00000000000000000000000000000000000E2 :105EC00000000000000000000000000000000000D2 :105ED00000000000000000000000000000000000C2 @@ -22006,15 +22006,15 @@ :105EF00000000000000000000000000000000000A2 :105F00000000000000000000000000000000000091 :105F10000000000000000000000000000000000081 -:105F200000000000000000000011000000800000E0 +:105F20000000000000000000000000000000000071 :105F30000000000000000000000000000000000061 :105F40000000000000000000000000000000000051 :105F50000000000000000000000000000000000041 :105F60000000000000000000000000000000000031 :105F70000000000000000000000000000000000021 :105F80000000000000000000000000000000000011 -:105F90000000000000000000000000000000000001 -:105FA00000000000000000000000000100000040B0 +:105F900000000000000000004000000000000000C1 +:105FA00000000000000000000000000000000000F1 :105FB00000000000000000000000000000000000E1 :105FC00000000000000000000000000000000000D1 :105FD00000000000000000000000000000000000C1 @@ -22023,23 +22023,23 @@ :106000000000000000000000000000000000000090 :106010000000000000000000000000000000000080 :106020000000000000000000000000000000000070 -:1060300007008200000000000000000000000000D7 +:106030000000000000000000000000000000000060 :106040000000000000000000000000000000000050 :106050000000000000000000000000000000000040 :106060000000000000000000000000000000000030 :106070000000000000000000000000000000000020 :106080000000000000000000000000000000000010 -:106090000000000000000000000000000000000000 +:10609000000000000000C3C3C3C3000000000000F4 :1060A00000000000000000000000000000000000F0 -:1060B00000000000F0F00000000000000000000000 +:1060B00000000000000000000000000000000000E0 :1060C00000000000000000000000000000000000D0 :1060D00000000000000000000000000000000000C0 :1060E00000000000000000000000000000000000B0 :1060F00000000000000000000000000000000000A0 :10610000000000000000000000000000000000008F -:10611000000000000000000000000000000000007F +:106110000000000000000000C3C3C3C30000000073 :10612000000000000000000000000000000000006F -:10613000000000000000F0F000000000000000007F +:10613000000000000000000000000000000000005F :10614000000000000000000000000000000000004F :10615000000000000000000000000000000000003F :10616000000000000000000000000000000000002F @@ -22054,15 +22054,15 @@ :1061F000000000000000000000000000000000009F :10620000000000000000000000000000000000008E :10621000000000000000000000000000000000007E -:10622000000000000000000000000000000000006E -:106230000000000000000000FFFF00000000000060 +:10622000F0F0F0F0000000000000000000000000AE +:10623000000000000000000000000000000000005E :10624000000000000000000000000000000000004E :10625000000000000000000000000000000000003E :10626000000000000000000000000000000000002E :10627000000000000000000000000000000000001E :10628000000000000000000000000000000000000E :1062900000000000000000000000000000000000FE -:1062A00000000000000000000000000000000000EE +:1062A0000000F0F0F0F0000000000000000000002E :1062B00000000000000000000000000000000000DE :1062C00000000000000000000000000000000000CE :1062D00000000000000000000000000000000000BE @@ -22071,7 +22071,7 @@ :10630000000000000000000000000000000000008D :10631000000000000000000000000000000000007D :10632000000000000000000000000000000000006D -:10633000000000000000000005000A00054000A861 +:10633000000000000000000000000000000000005D :10634000000000000000000000000000000000004D :10635000000000000000000000000000000000003D :10636000000000000000000000000000000000002D @@ -22110,24 +22110,24 @@ :10657000000000000000000000000000000000001B :10658000000000000000000000000000000000000B :1065900000000000000000000000000000000000FB -:1065A00000000000000000000000200000000000CB -:1065B000000020000000200000002000000000007B -:1065C00000000000000000000000200000000000AB -:1065D000000020000000200000000000000000007B -:1065E000000000000000000000000000200000008B -:1065F000000000002000000020000000000000005B -:10660000000000000000000000000000200000006A -:10661000000000002000000020000000000000003A -:10662000000000000000000000000000000000006A -:10663000000000000000000000000000000000005A -:10664000004000000000000000000000000000000A -:10665000000000000090000000900000000000001A -:10666000000000000000000000000000000000002A +:1065A00000000000000000000000000020000000CB +:1065B00000000000000020000000000000000000BB +:1065C000000000002000000000000000200000008B +:1065D000000000000000200000000000000000009B +:1065E0000000000020000000000000020000200069 +:1065F000000000000000000020000000000000007B +:10660000000000000000200000000000000020004A +:10661000000000000000000020000000000000005A +:10662000000000000000200000000000000000004A +:106630000000000000000000000400000000000056 +:10664000000000000000000000000000000000004A +:1066500000000000000000000040000000000000FA +:106660000000000000000000000000020000000028 :10667000000000000000000000000000000000001A -:10668000000000000000000000000000000000000A +:1066800000000000000000000000400000000000CA :1066900000000000000000000000000000000000FA :1066A00000000000000000000000000000000000EA -:1066B000000000000000000000000000000090004A +:1066B00000000000000000000000000000000000DA :1066C00000000000000000000000000000000000CA :1066D00000000000000000000000000000000000BA :1066E00000000000000000000000000000000000AA @@ -22137,11 +22137,11 @@ :106720000000000000000000000000000000000069 :106730000000000000000000000000000000000059 :106740000000000000000000000000000000000049 -:10675000040004000400000000000000000000002D -:1067600000000000000000004000000000000000E9 +:106750000000000000000000000000000000000039 +:106760000000000000000000000000000000000029 :106770000000000000000000000000000000000019 :106780000000000000000000000000000000000009 -:1067900000000000000000000000000000000000F9 +:1067900000000000040000000000000000000000F5 :1067A00000000000000000000000000000000000E9 :1067B00000000000000000000000000000000000D9 :1067C00000000000000000000000000000000000C9 @@ -22152,7 +22152,7 @@ :106810000000000000000000000000000000000078 :106820000000000000000000000000000000000068 :106830000000000000000000000000000000000058 -:106840000000000000000000000041000000000007 +:106840000000000000000000000000000000000048 :106850000000000000000000000000000000000038 :106860000000000000000000000000000000000028 :106870000000000000000000000000000000000018 @@ -22166,26 +22166,26 @@ :1068F0000000000000000000000000000000000098 :106900000000000000000000000000000000000087 :106910000000000000000000000000000000000077 -:106920000000000000000000000000000000000067 -:106930000000000000000000000000000000000057 -:106940000000000000000000000000000000100037 +:106920000000A000000000000000000000000000C7 +:106930000000000000000100000000000000000056 +:106940000000000000000000000000000000000047 :106950000000000000000000000000000000000037 :106960000000000000000000000000000000000027 :106970000000000000000000000000000000000017 :106980000000000000000000000000000000000007 -:1069900000000000000000000000100000000000E7 +:1069900000000000000000000000000004000000F3 :1069A00000000000000000000000000000000000E7 -:1069B000000000000000000000000000A000000037 -:1069C0000000C00000000000000000000000000007 +:1069B00000000000000000000400000000000000D3 +:1069C00000000000000000000000000000000000C7 :1069D00000000000000000000000000000000000B7 :1069E00000000000000000000000000000000000A7 :1069F0000000000000000000000000000000000097 :106A00000000000000000000000000000000000086 :106A10000000000000000000000000000000000076 :106A20000000000000000000000000000000000066 -:106A30000000000000000000000000000000000056 +:106A30000000A000000000000000000000000000B6 :106A40000000000000000000000000000000000046 -:106A500000000000000000000000008400000000B2 +:106A50000000000000000000000000000000000036 :106A60000000000000000000000000000000000026 :106A70000000000000000000000000000000000016 :106A80000000000000000000000000000000000006 @@ -22194,21 +22194,21 @@ :106AB00000000000000000000000000000000000D6 :106AC00000000000000000000000000000000000C6 :106AD00000000000000000000000000000000000B6 -:106AE00000000000000200000000000000000000A4 +:106AE00000000000000000000000000000000000A6 :106AF0000000000000000000000000000000000096 :106B00000000000000000000000000000000000085 :106B10000000000000000000000000000000000075 -:106B20000000000000000000000000000000000065 +:106B20000000040000000000000000000000200041 :106B30000000000000000000000000000000000055 :106B40000000000000000000000000000000000045 -:106B5000080000000000000000000000000000002D +:106B50000000000000000000000000000000000035 :106B60000000000000000000000000000000000025 -:106B7000080000000000000000000000000000000D +:106B70000000000000000000000000000000000015 :106B80000000000000000000000000000000000005 -:106B900010000000000000000000000000000000E5 +:106B900000000000000000000000000000000000F5 :106BA00000000000000000000000000000000000E5 :106BB00000000000000000000000000000000000D5 -:106BC00002040000000000000000000000000000BF +:106BC00004000000000000000000000000000000C1 :106BD00000000000000000000000000000000000B5 :106BE00000000000000000000000000000000000A5 :106BF0000000000000000000000000000000000095 @@ -22240,7 +22240,7 @@ :106D900000000000000000000000000000000000F3 :106DA00000000000000000000000000000000000E3 :106DB00000000000000000000000000000000000D3 -:106DC00000000000000000000000000000000000C3 +:106DC000000000000000000000880000000000003B :106DD00000000000000000000000000000000000B3 :106DE00000000000000000000000000000000000A3 :106DF0000000000000000000000000000000000093 @@ -22264,7 +22264,7 @@ :106F10000000000000000000000000000000000071 :106F20000000000000000000000000000000000061 :106F30000000000000000000000000000000000051 -:106F40000000000000000000000000000000000041 +:106F400000000000000000000040000300000000FE :106F50000000000000000000000000000000000031 :106F60000000000000000000000000000000000021 :106F70000000000000000000000000000000000011 @@ -22280,8 +22280,8 @@ :107010000000000000000000000000000000000070 :107020000000000000000000000000000000000060 :107030000000000000000000000000000000000050 -:107040000000000000000000000000000000000040 -:107050000000000000000000000000000000000030 +:1070400000000000000000000000000000810000BF +:107050000700000000000000000000000000000029 :107060000000000000000000000000000000000020 :107070000000000000000000000000000000000010 :107080000000000000000000000000000000000000 @@ -22321,7 +22321,7 @@ :1072A00000000000000000000000000000000000DE :1072B00000000000000000000000000000000000CE :1072C00000000000000000000000000000000000BE -:1072D00000000000000000000000000000000000AE +:1072D00000000000000000000038000001A00000D5 :1072E000000000000000000000000000000000009E :1072F000000000000000000000000000000000008E :10730000000000000000000000000000000000007D @@ -22354,23 +22354,23 @@ :1074B00000000000000000000000000000000000CC :1074C00000000000000000000000000000000000BC :1074D00000000000000000000000000000000000AC -:1074E0000000000000000000000000030000000099 -:1074F0004000000088000000000000000000400084 -:1075000040002000000040000000000088008800CB -:1075100000000000880000000000000000002000C3 -:107520002000200088000002000000000000400051 -:1075300020000000000020008800000000008800FB -:10754000000020000000000004000400C000200033 -:107550002000000000002000880000000000200043 -:10756000000000000000000000000000000000001B +:1074E000000000000000000000000000000000009C +:1074F000000000000000000000000000000000008C +:10750000000000000000000000000000000000007B +:10751000000000000000000000000000000000006B +:107520000000000000000002000000000000000059 +:10753000000000000000000000000000000000004B +:10754000000000000000000000000000000000003B +:10755000000000000000000000000000000000002B +:107560000000100000000400000000000000000007 :10757000000000000000000000000000000000000B :1075800000000000000000000000000000000000FB :1075900000000000000000000000000000000000EB :1075A00000000000000000000000000000000000DB :1075B00000000000000000000000000000000000CB :1075C00000000000000000000000000000000000BB -:1075D000000080000000000080002000000000008B -:1075E0000000000000000000000000000000000398 +:1075D00000000000000000000000000000000000AB +:1075E000000000008000000080000000400000005B :1075F000000000000000000000000000000000008B :10760000000000000000000000000000000000007A :10761000000000000000000000000000000000006A @@ -22378,15 +22378,15 @@ :10763000000000000000000000000000000000004A :10764000000000000000000000000000000000003A :10765000000000000000000000000000000000002A -:107660000000000002000000000000000000000018 -:107670000000000000000000000000000200000008 +:10766000000000000000000000000000000000001A +:10767000000000000000000000000000000000000A :1076800000000000000000000000000000000000FA :1076900000000000000000000000000000000000EA -:1076A000000000000000000040000000000000009A -:1076B00000000000020000000000000000000000C8 +:1076A00000000000000000000000000000000000DA +:1076B00000000000000000000000000000000000CA :1076C00000000000000000000000000000000000BA :1076D00000000000000000000000000000000000AA -:1076E000000000000000800000000000000000001A +:1076E000000000000000000000000000000000009A :1076F000000000000000000000000000000000008A :107700000000000000000000000000000000000079 :107710000000000000000000000000000000000069 @@ -22404,30 +22404,30 @@ :1077D00000000000000000000000000000000000A9 :1077E0000000000000000000000000000000000099 :1077F0000000000000000000000000000000000089 -:1078000000000000000000009000084000000000A0 -:107810000800000000000000000000000000000060 -:107820000800000000000000000000000000000050 -:107830000000000008000000000008000000000038 +:107800000000000000000000000000000000000078 +:107810000000000000000000000000000000000068 +:107820000000000000000000000000000000000058 +:107830000000000000000000000000000000000048 :107840000000000000000000000000000000000038 -:1078500008000000A0000000C00084000800000034 -:107860008200080001800005000000000000000008 -:1078700000000000000000000000050008001000EB -:107880000000000000000000000000880020000050 -:10789000000040000000000000000500100008008B -:1078A0000000410000000000000000880000080007 -:1078B00000000000000000000000000010001000A8 +:1078500000000000000000000000000000004000E8 +:107860000000000000000000000000000000000018 +:107870009009010008001000000041000000000015 +:1078800000000000080000000000000000000000F0 +:1078900000000000000000000000000000000000E8 +:1078A00000000000000000000000000000000000D8 +:1078B00000000000000000000000000000000000C8 :1078C00000000000000000000000000000000000B8 -:1078D0000800000000000000000005000800400053 -:1078E0001000000000002004000000000000000064 -:1078F0000000000000000000000000000002000086 +:1078D00000000000000000000000000000000000A8 +:1078E0000000000000000000000000000000000098 +:1078F0000000000020000000000000000000000068 :107900000000000000000000000000000000000077 -:107910000000000000001000A000000000000000B7 +:107910000000000000000000000000000000000067 :107920000000000000000000000000000000000057 -:1079300000001000000000000000C0000000000077 +:107930000000000000000000000000000000000047 :107940000000000000000000000000000000000037 -:10795000000000000000080000000000000000001F -:107960000000000000000000000000008200820013 -:107970000000C00000000000000000000000000047 +:107950000000000000000000000000000000000027 +:107960000000000000000000000000000000000017 +:107970000000000000000080000000000000000087 :1079800000000000000000000000000000000000F7 :1079900000000000000000000000000000000000E7 :1079A00000000000000000000000000000000000D7 @@ -22435,23 +22435,23 @@ :1079C00000000000000000000000000000000000B7 :1079D00000000000000000000000000000000000A7 :1079E0000000000000000000000000000000000097 -:1079F0000000000000000000000000000000000087 +:1079F0000000000000000000002000000000000067 :107A00000000000000000000000000000000000076 -:107A10000000000010000000000000000000000056 +:107A10000000000000000000000000000000000066 :107A20000000000000000000000000000000000056 :107A30000000000000000000000000000000000046 :107A40000000000000000000000000000000000036 -:107A5000000000000800000000000000000000001E -:107A60000000000001000000000000800000000590 -:107A700000001000000008050000000000000000E9 -:107A800000000000000000000000000000000000F6 +:107A50000000000000000000000000000000000026 +:107A60000000000000000000000000000000000016 +:107A70000000000000000100000000000000000005 +:107A800000000800000000000000000000000000EE :107A900000000000000000000000000000000000E6 -:107AA0000000000041000000000000000000000095 +:107AA00000000000000000000000000000000000D6 :107AB00000000000000000000000000000000000C6 -:107AC00000000000000041000000008800000300EA -:107AD00000000000030000000000000000000000A3 -:107AE000000000000000200000000000000408006A -:107AF000000000000800000000000000000000007E +:107AC00000000000000000000000000000000000B6 +:107AD00000000000000000000000000000000000A6 +:107AE0000000000000000000000000000000000096 +:107AF0000000000000000000020000000000000084 :107B00000000000000000000000000000000000075 :107B10000000000000000000000000000000000065 :107B20000000000000000000000000000000000055 @@ -22459,48 +22459,48 @@ :107B40000000000000000000000000000000000035 :107B50000000000000000000000000000000000025 :107B60000000000000000000000000000000000015 -:107B70000000000000000000901000020008C00893 +:107B70000000000000000000000000000100000004 :107B800000000000000000000000000000000000F5 :107B900000000000000000000000000000000000E5 :107BA00000000000000000000000000000000000D5 :107BB00000000000000000000000000000000000C5 :107BC00000000000000000000000000000000000B5 :107BD00000000000000000000000000000000000A5 -:107BE000000000000000000000000000000008008D -:107BF000000000000000080000004000008000803D -:107C00008080000000000000000000000000000074 +:107BE0000000000000000000000000000000000095 +:107BF0000000000000000000000000000000200065 +:107C00000000000000000000000000000000000074 :107C10000000000000000000000000000000000064 :107C20000000000000000000000000000000000054 :107C30000000000000000000000000000000000044 :107C40000000000000000000000000000000000034 :107C50000000000000000000000000000000000024 -:107C6000000000000000000000000000000800000C -:107C700000000000004000000000000000008083C1 -:107C800080800000000000000000000000000000F4 +:107C60000000000000000000000000000000000014 +:107C70000000000000000000000000000000800084 +:107C800000000000000000000000000000000000F4 :107C900000000000000000000000000000000000E4 :107CA00000000000000000000000000000000000D4 :107CB00000000000000000000000000000000000C4 :107CC00000000000000000000000000000000000B4 :107CD00000000000000000000000000000000000A4 -:107CE0000000000000000000000000000000000193 -:107CF0000000000000000000000000000000200064 -:107D00000282404008400000000000000000000027 +:107CE0000000000000000000000000000000000094 +:107CF0000000000000000000000000000000000084 +:107D000088000000000800000000000000000000E3 :107D10000000000000000000000000000000000063 :107D20000000000000000000000000000000000053 :107D30000000000000000000000000000000000043 :107D40000000000000000000000000000000000033 :107D50000000000000000000000000000000000023 :107D60000000000000000000000000000000000013 -:107D70000000000000000100000000000000000002 -:107D80004040002040881002000000000000000079 +:107D70000000000000000000000000000000000003 +:107D800000000000000100000000000000000000F2 :107D900000000000000000000000000000000000E3 :107DA00000000000000000000000000000000000D3 :107DB00000000000000000000000000000000000C3 :107DC00000000000000000000000000000000000B3 :107DD00000000000000000000000000000000000A3 :107DE0000000000000000000000000000000000093 -:107DF000000000000000000008000000000000007B -:107E00000000000000800000008000000000000072 +:107DF0000000000000000000000000000000000083 +:107E00000000000000000008090000000000000061 :107E10000000000000000000000000000000000062 :107E20000000000000000000000000000000000052 :107E30000000000000000000000000000000000042 @@ -22508,7 +22508,7 @@ :107E50000000000000000000000000000000000022 :107E60000000000000000000000000000000000012 :107E70000000000000000000000000000000000002 -:107E8000000000000040800800808000000000002A +:107E80000000000000400020000000000000000092 :107E900000000000000000000000000000000000E2 :107EA00000000000000000000000000000000000D2 :107EB00000000000000000000000000000000000C2 @@ -22516,15 +22516,15 @@ :107ED00000000000000000000000000000000000A2 :107EE0000000000000000000000000000000000092 :107EF0000000000000000000000000000000000082 -:107F000000000000000004010221028204000000C1 +:107F00000000000000000000000100000000000070 :107F10000000000000000000000000000000000061 :107F20000000000000000000000000000000000051 :107F30000000000000000000000000000000000041 :107F40000000000000000000000000000000000031 :107F50000000000000000000000000000000000021 :107F60000000000000000000000000000000000011 -:107F70000000000000000000480000E000000000D9 -:107F8000480000E000000000000000000000000ABF +:107F70000000000000000000000000000000000001 +:107F80000000000000000000818100E00707000001 :107F900000000000000000000000000000000000E1 :107FA00000000000000000000000000000000000D1 :107FB00000000000000000000000000000000000C1 @@ -22532,16 +22532,16 @@ :107FD00000000000000000000000000000000000A1 :107FE0000000000000000000000000000000000091 :107FF0000000000000000000000000000000000081 -:108000000000000000000000000006069F9F030320 -:1080100018DB00000000000000000000000000006D +:108000000000000000000000000000000000000070 +:108010000000000000000000000000000000000060 :108020000000000000000000000000000000000050 :108030000000000000000000000000000000000040 :108040000000000000000000000000000000000030 :108050000000000000000000000000000000000020 :108060000000000000000000000000000000000010 :108070000000000000000000000000000000000000 -:1080800000000000000000000000000081E781E720 -:108090003F3F18DB0000000000000000000000006F +:1080800000000000000000000000000000000000F0 +:1080900000000000000000000000000000000000E0 :1080A00000000000000000000000000000000000D0 :1080B00000000000000000000000000000000000C0 :1080C00000000000000000000000000000000000B0 @@ -22557,7 +22557,7 @@ :10816000000000000000000000000000000000000F :1081700000000000000000000000000000000000FF :1081800000000000000000000000000000000000EF -:10819000C3FFC3009FC090C00000000000000000AB +:10819000000000000F0F00000000000000000000C1 :1081A00000000000000000000000000000000000CF :1081B00000000000000000000000000000000000BF :1081C00000000000000000000000000000000000AF @@ -22565,15 +22565,15 @@ :1081E000000000000000000000000000000000008F :1081F000000000000000000000000000000000007F :10820000000000000000000000000000000000006E -:108210000000F099F0999FCF90CF0000000000007F +:108210000000000000000F0F000000000000000040 :10822000000000000000000000000000000000004E :10823000000000000000000000000000000000003E :10824000000000000000000000000000000000002E :10825000000000000000000000000000000000001E :10826000000000000000000000000000000000000E :1082700000000000000000000000000000000000FE -:108280000000000000650007C00D20000065000729 -:10829000C00D00000000000000C000000000000051 +:1082800000000000000000000000000000000000EE +:10829000000000000061003FC00C20A800000000AA :1082A00000000000000000000000000000000000CE :1082B00000000000000000000000000000000000BE :1082C00000000000000000000000000000000000AE @@ -22581,7 +22581,7 @@ :1082E000000000000000000000000000000000008E :1082F000000000000000000000000000000000007E :10830000000000000000000000000000000000006D -:10831000000000000000000000000000000000005D +:108310000000000000000000000000FF000000005E :10832000000000000000000000000000000000004D :10833000000000000000000000000000000000003D :10834000000000000000000000000000000000002D @@ -22589,7 +22589,7 @@ :10836000000000000000000000000000000000000D :1083700000000000000000000000000000000000FD :1083800000000000000000000000000000000000ED -:1083900000000000000000000000000000000000DD +:1083900000000000000000000000000000FF0000DE :1083A00000000000000000000000000000000000CD :1083B00000000000000000000000000000000000BD :1083C00000000000000000000000000000000000AD @@ -22606,177 +22606,177 @@ :1084700000000000000000000000000000000000FC :1084800000000000000000000000000000000000EC :1084900000000000000000000000000000000000DC -:1084A00000000000200000008800C0002000C00084 -:1084B000200020002000C00088000200880020006A -:1084C00000008800200000008800200088000000D4 -:1084D00020000000040020000400200020002000F4 -:1084E000880020000003200000002000200004007D -:1084F00088002000000000002000880020002000EC -:108500000000000020002000000088002000200063 -:108510002000200000000000000020000000840077 -:10852000100000000000000000000000210000908A +:1084A00000000000000000000000000000000000CC +:1084B00000020000000000000000000000000000BA +:1084C00000840180000000000000000000000000A7 +:1084D000000000000000000000000000000000009C +:1084E000000000000001000000000000000000008B +:1084F000000000000000000000000000000000007C +:10850000000000000000000000000000000000006B +:10851000000000000000000000000000000000005B +:10852000000000000000000000000000000000004B :10853000000000000000000000000000000000003B -:1085400000000000000000000000000000004000EB -:10855000000000900000000000000000000000008B -:1085600000000000200000000000000000000000EB -:1085700000000000000000000500000000000000F6 +:1085400000000021082000000000000000000000E2 +:10855000000000000000000000000000000000001B +:10856000000000000000000000000000000000000B +:1085700000000000100200000000000000000000E9 :1085800000000000000000000000000000000000EB -:1085900000000000000000000000200000000000BB +:10859000000000000040000000000000000000009B :1085A00000000000000000000000000000000000CB -:1085B00000000000000000000000000000000000BB -:1085C000000000000000008000000000000000002B +:1085B000000000000000000000000000C0000000FB +:1085C0000000000000081002000000000000000091 :1085D000000000000000000000000000000000009B -:1085E000000000000000008000000000000000000B +:1085E000000000000000000000000000000000008B :1085F000000000000000000000000000000000007B :10860000000000000000000000000000000000006A :10861000000000000000000000000000000000005A :10862000000000000000000000000000000000004A -:108630000000419000000000000000000000000069 -:10864000000000000000000400080000000000001E -:108650000000000000000000008400000000200076 -:108660000000000000000000000400000000000006 -:1086700000000000000000000000000020000000DA -:1086800020000000000000000000000000000000CA +:1086300000000500410000000500000000000000EF +:1086400000000500000000018001000000000000A3 +:10865000000000000000000000000000000000001A +:10866000000000000000000000000000000000000A +:1086700000000000000000000000000000000000FA +:1086800000000000000000000000000000000000EA :1086900000000000000000000000000000000000DA -:1086A00000000000000000000000000000110000B9 -:1086B0000000000000040004002100090003000085 -:1086C0000000000000000000002100040000000085 -:1086D0000000000000009000000990000000000071 -:1086E0000000000000000000000000080000000082 +:1086A00000000000000000000000000000000000CA +:1086B00000000000000000000000000000000000BA +:1086C00000000000000000000000000000000000AA +:1086D000000000000000000000000000000000009A +:1086E000000000000000000000000000000000008A :1086F000000000000000000000000000000000007A -:108700000000000000000000002100000104000043 -:108710000021000000000000000500000000000033 -:10872000002100000000000000000000000000A088 -:1087300000000000008400000000000400A0000011 -:108740000000000000000000000000000301000025 +:108700000000000000000000000000000000000069 +:108710000000000000000000000000000000000059 +:108720000000000000000000000000000000000049 +:108730000000000000000000000000000000000039 +:108740000000000000000000000000000000000029 :108750000000000000000000000000000000000019 -:108760000000000000000000000000000001000008 +:108760000000000000000000000000000000000009 :1087700000000000000000000000000000000000F9 -:1087800000000000000000000000000008001000D1 +:1087800000000000000000000000000000000000E9 :1087900000000000000000000000000000000000D9 -:1087A000100000004100000000000400000000086C -:1087B000000000008200080082400000000040002D -:1087C00000000000C000000082001000100008003F -:1087D0000000000008004000820008008200000045 -:1087E00084000400840082000000820082000000F7 -:1087F000000082000000C000820008000000840029 -:10880000000000000000C00082000800000082009C -:1088100001000000000008008200820000008200C9 -:1088200000000000000082008200000000008200C2 +:1087A00000000000000000000000000000000000C9 +:1087B00000000000000900000000000000000000B0 +:1087C00000000000000000000000000000000004A5 +:1087D0000000000000000000000000000000000099 +:1087E0000000000000000000000000000000000089 +:1087F0000000000000000000000000000000000079 +:108800000000000000000000000000000000000068 +:108810000000000000000000000000000000000058 +:108820000000000000000000000000000000000048 :108830000000000000000000000000000000000038 -:108840000000400000000000038200000000000063 -:108850000000000000000000000000000000000018 -:108860000300400040000000000000000000000085 +:108840000000210000000000000000000000000007 +:108850000001000000000000000000000000000017 +:108860000000000000000000000000000000000008 :1088700000000000000000000000000000000000F8 -:1088800000000000030008000000000000000000DD -:1088900000002000000000000000000000000000B8 -:1088A000000000004000050000000800000000007B -:1088B0000000080008000000000400000000840020 -:1088C0000000400008000000000000000000000060 -:1088D0000040000808000000000000000800080038 -:1088E0000000000008000000000000000000000080 -:1088F0000000C00000030800820082000000C000E9 -:1089000000000000400000000000820000000000A5 -:108910000000000000000800A0000800A000C00047 -:108920000800000004000000000008000000002013 -:1089300000000000018000000000000000000000B6 +:1088800000000000000000000000000000000000E8 +:1088900000000000000000000000000000000000D8 +:1088A00000000000000000000000000000000000C8 +:1088B000000000000000000000000000A000000018 +:1088C000820090000000000000040000000008206A +:1088D0000000000000000000001100040000000083 +:1088E0000000000000000000000000000000000088 +:1088F0000000000000000000000000000000000078 +:108900000000000000000000000000000000000067 +:108910000000000000000000000000000000000057 +:108920000000000000000000000000000000000047 +:108930000000000000000000000000000000000037 :108940000000000000000000000000000000000027 :108950000000000000000000000000000000000017 :108960000000000000000000000000000000000007 :1089700000000000000000000000000000000000F7 :1089800000000000000000000000000000000000E7 -:108990000000000000000000008400000000000053 -:1089A00000C0000000000000000000000000000007 -:1089B00000000000002010040000000000008400FF -:1089C000840008000800000800000000000000000B -:1089D000000000000000000000000000820008000D -:1089E0001000000008000800000000000000000067 -:1089F000000000000000000000000000400008002F -:108A000008000400000008000000000000008200D0 -:108A10000000000008000000080000004000820084 -:108A20000800081100000800000000000003080012 -:108A30000000080000000000080000000000000026 +:1089900000000000000000000000000000000000D7 +:1089A00000000000000000000000000000000000C7 +:1089B000000000000000008408000000900000009B +:1089C0000800000000000000000000000003840018 +:1089D0000003000000000000000000000000000094 +:1089E0000000000000000000000000000000000087 +:1089F0000000000000000000000000000000000077 +:108A00000000000000000000000000000000000066 +:108A10000000000000000000000000000000000056 +:108A20000000000000000000000000000000000046 +:108A30000000000000000000000000000000000036 :108A40000000000000000000000000000000000026 :108A50000000000000000000000000000000000016 :108A60000000000000000000000000000000000006 :108A700000000000000000000000000000000000F6 :108A800000000000000000000000000000000000E6 :108A900000000000000000000000000000000000D6 -:108AA00000000000000000000000110000000000B5 -:108AB00000000000000000000000000000010001B4 -:108AC000000100C00001000100C000890000050194 -:108AD000004000820001000100C10000000100010F -:108AE000000100C10001000100C100A1000001015E -:108AF000004000040001000100C10000000000016E -:108B00000001000100C00001040100C0008300005A -:108B10000101000800020001020100C00000000184 -:108B20000001000100C00001040100C0008300003A -:108B30000101000800020001020100C00000004124 -:108B400000410041008800410041008203410005CE -:108B5000904100000080004100410085000000417C -:108B600000410041008200410041008803410005AE -:108B7000034100000080004100410085000000002A -:108B800000410041004100C00041804100A003C1FC -:108B90000005034100000080004180410085000085 -:108BA00000410041004100C00041804100C003C1BC -:108BB0000005034100000080004180410085000065 -:108BC0004100030000000080410088000000100008 -:108BD00084002000008090004100C100008080805F -:108BE00041000300000000804100880000001000E8 -:108BF00084002000008083004100C100008080804C -:108C000000004100030000000080410083000000DC -:108C100020004100080000A0A0004100C100008029 -:108C2000800041000300000000804100A00000001F -:108C30001000C100020000A090004100C1000080AF -:108C4000800001000100000000C00100C100000020 -:108C50000100020082040004C1004100C100008440 -:108C6000020201000100000000C00100C10000007C -:108C70000100020082900004C0824100C100008413 -:108C80000202000001000100000000C00100C0005D -:108C900000000100020021900005C0A04100C100B9 -:108CA0000082820001000100000000C00100C0003D -:108CB00000000100020021900005C1A04100C10098 -:108CC0000082820000C00001C0C10000000000015D -:108CD00000C104820021000100C100000000000169 -:108CE0000000000000C00001C0C100000000000141 -:108CF00000C004820021000100C10000000000014A -:108D000000000000000000C00001C0C10000000021 -:108D1000000100C004C10041000100C100000000CA -:108D200000010000000000C00001C0C10000000000 -:108D3000000100C004830021000100C10000000008 -:108D40000001000000000080004180C10000000020 -:108D50000041008880400041004100C10000000047 -:108D60000041000300000080004180C100000000BD -:108D70000041008880400041004100C10000000027 -:108D800000410003000000000080004180C100009D -:108D900000000041008880020041004100C1000045 -:108DA00000000041000500000080004180C100007B -:108DB00000000041008580820041004100C10000A8 -:108DC0000000004100050000C100800080C10000DB -:108DD0004108800888004100C1410000800800006F -:108DE0004100000080004100C100800080C10000FF -:108DF0004140804085004100C141000080080000E2 -:108E000041000000800041000000C100800080C1DE -:108E100000004100004085004100C1410000800881 -:108E200000004100000080004100C100800080C1BE -:108E300000004103800341004100C141000080085F -:108E400000004100000080004100C1004000C0C19E -:108E500000000100200082000100C1839000C000DA -:108E6000000001000000C0000100C1004000C0C1BE -:108E700000000100200082000100C1839000C000BA -:108E8000000001000000C00001000000C10040001F -:108E9000C0C100000100020082000100C183020085 -:108EA000C000000001000000C0000100C10040003F -:108EB000C0C100000100080082000100C18302005F -:108EC000C000000001000000C00001000000000020 -:108ED0000000004200000000000000008112008835 -:108EE0000700480000000000000000000000000033 -:108EF0000000004200000000000000008112008815 -:108F00000700480000000000000000000000000012 -:108F1000000000000042000000000000000081127C -:108F2000008807004800000000000000000000006A -:108F3000000000000042000000000000000081125C -:108F4000008807004800000000000000000000004A +:108AA00000000000000000000000000000000400C2 +:108AB00000000000110000000000000000000000A5 +:108AC0000000000101000000000001200100C100C1 +:108AD0000002C0820000C000000100000000000091 +:108AE0000000000000000000000000000000000086 +:108AF0000000000000000000000000000000000076 +:108B00000000000000000000000000000000000065 +:108B10000000000000000000000000000000000055 +:108B20000000000000000000000000000000000045 +:108B30000000000000000000000000000000000035 +:108B400000000000000802000000004108001009B9 +:108B5000880000808080000080000003000000008A +:108B60000000000000000000000000000000000005 +:108B700000000000000000000000000000000000F5 +:108B800000000000000000000000000000000000E5 +:108B900000000000000000000000000000000000D5 +:108BA00000000000000000000000000000000000C5 +:108BB00000000000000000000000000000000000B5 +:108BC0000000200000000000000002000000100073 +:108BD00088008380002003000000000000808020C7 +:108BE0000000000000000000000000000000000085 +:108BF0000000000000000000000000000000000075 +:108C00000000000000000000000000000000000064 +:108C10000000000000000000000000000000000054 +:108C20000000000000000000000000000000000044 +:108C30000000000000000000000000000000000034 +:108C40000000000000000000000000000100000023 +:108C5000000004004020000001008200000000C06D +:108C60008200000000000000000000000000000082 +:108C700000000000000000000000000000000000F4 +:108C800000000000000000000000000000000000E4 +:108C900000000000000000000000000000000000D4 +:108CA00000000000000000000000000000000000C4 +:108CB00000000000000000000000000000000000B4 +:108CC00000000000000000000000000000000000A4 +:108CD00008008200008800008900000000000000F9 +:108CE0000000000000000000000000000000000084 +:108CF0000000000000000000000000000000000074 +:108D00000000000000000000000000000000000063 +:108D10000000000000000000000000000000000053 +:108D20000000000000000000000000000000000043 +:108D30000000000000000000000000000000000033 +:108D40000000000000000000000000000000000023 +:108D500000000005001100000000410000000000BC +:108D600000000041000000000000000000000000C2 +:108D700000000000000000000000000000000000F3 +:108D800000000000000000000000000000000000E3 +:108D900000000000000000000000000000000000D3 +:108DA00000000000000000000000000000000000C3 +:108DB00000000000000000000000000000000000B3 +:108DC00000000000000000000020800000C1000042 +:108DD0000020800089000000004100000003000026 +:108DE00000410000000003850000000000000000BA +:108DF0000000000000000000000000000000000073 +:108E00000000000000000000000000000000000062 +:108E10000000000000000000000000000000000052 +:108E20000000000000000000000000000000000042 +:108E30000000000000000000000000000000000032 +:108E400000000000000000000000000020000040C2 +:108E50000000000040004000000000210800000069 +:108E600000000001000000000010000000000000F1 +:108E700000000000000000000000000000000000F2 +:108E800000000000000000000000000000000000E2 +:108E900000000000000000000000000000000000D2 +:108EA00000000000000000000000000000000000C2 +:108EB00000000000000000000000000000000000B2 +:108EC00000000000000000000000000000000000A2 +:108ED000000000000000000000000000811200E01F +:108EE000220048420000000000004842000000004C +:108EF0000000000000000000000000000000000072 +:108F00000000000000000000000000000000000061 +:108F10000000000000000000000000000000000051 +:108F20000000000000000000000000000000000041 +:108F30000000000000000000000000000000000031 +:108F40000000000000000000000000000000000021 :108F50000000000000000000000000000000000011 :108F60000000000000000000000000000000000001 :108F700000000000000000000000000000000000F1 @@ -22795,112 +22795,112 @@ :109040000000000000000000000000000000000020 :109050000000757B00000000000000000000000020 :109060000000000000000000000000000000000000 -:10907000DEAE757B00000000000000000000000074 +:10907000DEAE000000000000000000000000000064 :1090800000000000000000000000000000000000E0 -:10909000DEAE0000757B0000000000000000000054 +:1090900000000000000000000000000000000000D0 :1090A00000000000000000000000000000000000C0 -:1090B0000000DEAE757B0000000000000000000034 +:1090B00000000000000000000000000000000000B0 :1090C00000000000000000000000000000000000A0 -:1090D0000000DEAE60C603000000000000000031AA -:1090E000E0000000000000000C0000000000000094 -:1090F00000C0630660C603000000000000000031ED -:10910000E0000000000000000C0000000000000073 -:1091100000C06306000060C60300000000000000FD -:109120000031E0000000000000000C000000000022 -:10913000000000C0630660C60300000000000000DD -:109140000031E0000000000000000C000000000002 -:10915000000000C0630620000000880000008900B5 -:109160002000880020008800880000000000000027 -:1091700000008800840020000000200000000000A3 -:109180000000A000200020000000000000000000FF -:10919000000020000000000320000000200000006C -:1091A00000008800040020002000000002000400ED -:1091B0000000000088000000200000000000000007 -:1091C000880000002000200020000000880020000F -:1091D0000000000040008800802000000000000027 -:1091E000200011000000000020000002000000002C -:1091F000050000000000000000000000000000006A -:109200000000000020000000000000000000050039 -:109210000500000000000000000000000000000049 +:1090D0000000000061260340000000000000023094 +:1090E000A0000000000000000C4000000000000094 +:1090F00002C06486000000000000000000000000C4 +:10910000000000000000000000000000000000005F +:10911000000000000000000000000000000000004F +:10912000000000000000000000000000000000003F +:10913000000000000000000000000000000000002F +:10914000000000000000000000000000000000001F +:1091500000000000000000000000200000000000EF +:1091600000000000000000000000000000000000FF +:1091700000000000000000000000000000000000EF +:1091800000000000000000000000000000000000DF +:1091900000000000000000020000000000000000CD +:1091A00000000000000000000000000000000000BF +:1091B00000000000000000000000000000000000AF +:1091C000000000000000000000000000000000009F +:1091D000000000000000200000000000000000006F +:1091E000000000000000000000000000000000007F +:1091F000000000000000000000000000000000006F +:10920000000000000000000000000000000000005E +:10921000000000000000000000000000000000004E :10922000000000000000000000000000000000003E -:109230000000000005000000000000000000000029 -:109240000500000000000000000000000000000019 -:109250000000050000000000000000000000000009 +:10923000000000000000000000000000000000002E +:10924000000000000000000000000000000000001E +:10925000000000000000000080000000000000008E :1092600000000000000000000000000000000000FE -:1092700000000000000000000000000000000000EE +:1092700020000000000000000000000000000000CE :1092800000000000000000000000000000000000DE :1092900000000000000000000000000000000000CE :1092A00000000000000000000000000000000000BE :1092B00000000000000000000000000000000000AE -:1092C000000000000000000000000080000000001E +:1092C000000000000000000000000000000000009E :1092D000000000000000000000000000000000008E -:1092E00000000000008200080000000000000000F4 -:1092F000000000000000000000000000000000006E -:1093000000000000000000900000000800000000C5 +:1092E000000000000000000000000000000000007E +:1092F0000000000005000000000000000000000069 +:10930000000000000000000000000000000000005D :10931000000000000000000000000000000000004D -:109320000000000000000000000000000008000035 -:10933000000000000000000000002000000000000D -:109340000000000000000000000000000004000019 +:10932000000000000000000000000000000000003D +:10933000000000000000000000000000000000002D +:10934000000000000000000000000000000000001D :10935000000000000000000000000000000000000D -:1093600000000000000000000000000000080000F5 +:1093600000000000000000000000000000000000FD :1093700000000000000000000000000000000000ED :1093800000000000000000000000000000000000DD :1093900000000000000000000000000000000000CD :1093A00000000000000000000000000000000000BD :1093B00000000000000000000000000000000000AD -:1093C000000000000000000000000000A0000000FD -:1093D00000000000820000000000000000004000CB -:1093E0000800080000000000030008000000000062 -:1093F000000000000000000000000000000000006D -:10940000000000000000000008000800400000000C +:1093C000000000000000000000000000000000009D +:1093D000000000000000000000000000000020006D +:1093E00000000800000041000000410008000800E3 +:1093F00000000000008241000000000000000000AA +:10940000000000000000000000000000000000005C :10941000000000000000000000000000000000004C -:1094200000000000000041000000000003000000F8 -:109430000300000000000000000000000000000029 -:1094400000000000410000000000030008000000D0 +:10942000000000000000000000000000000000003C +:10943000000000000000000000000000000000002C +:10944000000000000000000000000000000000001C :10945000000000000000000000000000000000000C -:109460000000820040000000000000000000C0007A +:10946000800000000000000000000000000000007C :1094700000000000000000000000000000000000EC :1094800000000000000000000000000000000000DC -:10949000000000000000000000000000400000008C -:1094A00008000000000000000000000000000000B4 -:1094B0000800000000000000000000004000000064 -:1094C0000000000000000000080000000000000094 -:1094D000000020000000000000000000000040002C -:1094E000000040000000000000000000000000003C +:1094900000000000000000000000000000000000CC +:1094A00000000000000000000000000000000000BC +:1094B00000000000000000000000000000000000AC +:1094C000000000000000000000000000000000009C +:1094D000000000000000000000000000A0000000EC +:1094E00000009100000000000000410000000000AA :1094F000000000000000000000000000000000006C -:10950000000000000020000000000000000000003B +:10950000000000000000000000000000000000005B :10951000000000000000000000000000000000004B :10952000000000000000000000000000000000003B :10953000000000000000000000000000000000002B :10954000000000000000000000000000000000001B -:10955000000000008000000000000000000000008B -:109560000000000000000004000000008200000075 -:1095700000000000000000000000000000000000EB -:1095800000000000000000000000000000000000DB -:10959000000000000000900000000000000000003B -:1095A00000000000C00000000000000000000000FB +:10955000000000000000000000000000000000000B +:1095600000000000040000000000900000008400E3 +:1095700000000000002000000000000000000000CB +:1095800000200000000000000000000000000000BB +:1095900000000000000000000000000000000000CB +:1095A00000000000000000000000000000000000BB :1095B00000000000000000000000000000000000AB -:1095C0000000000082000000000000000000000019 +:1095C000000000000000000000000000000000009B :1095D000000000000000000000000000000000008B -:1095E000000000000800000003010000000000006F -:1095F00000020008030000C008000300080000008B -:10960000000000000000000000000000000000005A -:1096100000000004080000880800080000000000A6 +:1095E00000000200000000000082000000000000F7 +:1095F0000004000000000004000000880002088849 +:109600000000000000000000000000000800000052 +:10961000000000000000000000000000000000004A :10962000000000000000000000000000000000003A -:10963000000000000000000000000800008400009E +:10963000000000000000000000000000000000002A :10964000000000000000000000000000000000001A -:1096500000000000000008000000080000000800F2 -:109660000000000000000000000000000002820076 +:10965000000000000000000000000000000000000A +:10966000000000008000000000000000000000007A :1096700000000000000000000000000000000000EA :1096800000000000000000000000000000000000DA :1096900000000000000000000000000000000000CA :1096A00000000000000000000000000000000000BA :1096B00000000000000000000000000000000000AA -:1096C0000000000000000002000000000000000098 -:1096D000080000000000000000000000000000047E +:1096C000000000000000000000000000000000009A +:1096D00000000000000000000000000090000000FA :1096E000000000000000000000000000000000007A :1096F000000000000000000000000000000000006A -:109700000000000000040000000000000000000055 +:109700000000000000000000000000000000000059 :109710000000000000000000000000000000000049 :109720000000000000000000000000000000000039 :109730000000000000000000000000000000000029 @@ -22914,16 +22914,16 @@ :1097B00000000000000000000000000000000000A9 :1097C0000000000000000000000000000000000099 :1097D0000000000000000000000000000000000089 -:1097E0000000000000000000000000000000000079 -:1097F0000000000040000000000000000500000024 +:1097E0000000000000000000000000000100000078 +:1097F0000000000000000000000000000000000069 :109800000000000000000000000000000000000058 :109810000000000000000000000000000000000048 :109820000000000000000000000000000000000038 :109830000000000000000000000000000000000028 :109840000000000000000000000000000000000018 -:109850000000000000000000000000000000050003 -:1098600000000000000000000000000000000000F8 -:1098700000000002000000000000004100000000A5 +:109850000000000000000000000000000000000008 +:1098600000000000000000000000000000000400F4 +:1098700000000000000000000000000000000000E8 :1098800000000000000000000000000000000000D8 :1098900000000000000000000000000000000000C8 :1098A00000000000000000000000000000000000B8 @@ -22931,7 +22931,7 @@ :1098C0000000000000000000000000000000000098 :1098D0000000000000000000000000000000000088 :1098E0000000000000000000000000000000000078 -:1098F0000000000000000000000000000001000067 +:1098F0000000000000000000000000000000000068 :109900000000000000000000000000000000000057 :109910000000000000000000000000000000000047 :109920000000000000000000000000000000000037 @@ -22939,31 +22939,31 @@ :109940000000000000000000000000000000000017 :109950000000000000000000000000000000000007 :1099600000000000000000000000000000000000F7 -:1099700000000000000000000000000000000000E7 +:109970000000000000A00000000000000000000047 :1099800000000000000000000000000000000000D7 :1099900000000000000000000000000000000000C7 :1099A00000000000000000000000000000000000B7 :1099B00000000000000000000000000000000000A7 :1099C0000000000000000000000000000000000097 :1099D0000000000000000000000000000000000087 -:1099E0000000000000000100000000000000000076 -:1099F0000000000000000000000000000000000067 +:1099E0000000000000000000000000000000000077 +:1099F00000000000840000000000000000000000E3 :109A00000000000000000000000000000000000056 :109A10000000000000000000000000000000000046 :109A20000000000000000000000000000000000036 :109A30000000000000000000000000000000000026 :109A40000000000000000000000000000000000016 :109A50000000000000000000000000000000000006 -:109A600000000000000000004100000000000000B5 -:109A700000000000000000000000004000000000A6 -:109A80000000004000000000000000000000000096 +:109A600000000000000000000000000000000000F6 +:109A700000000000000000000300000000000000E3 +:109A800000000000000000000000000000000000D6 :109A900000000000000000000000000000000000C6 :109AA00000000000000000000000000000000000B6 :109AB00000000000000000000000000000000000A6 :109AC0000000000000000000000000000000000096 :109AD0000000000000000000000000000000000086 :109AE0000000000000000000000000000000000076 -:109AF0000000000000000000000000000000000066 +:109AF0000000000000050041000000000000000020 :109B00000000000000000000000000000000000055 :109B10000000000000000000000000000000000045 :109B20000000000000000000000000000000000035 @@ -22971,15 +22971,15 @@ :109B40000000000000000000000000000000000015 :109B50000000000000000000000000000000000005 :109B600000000000000000000000000000000000F5 -:109B70000000000000000000000000000000810064 -:109B800000E000000000810000E000006000000034 +:109B7000000000000000000000000088000000005D +:109B800000000000000000000000000000000000D5 :109B900000000000000000000000000000000000C5 :109BA00000000000000000000000000000000000B5 :109BB00000000000000000000000000000000000A5 :109BC0000000000000000000000000000000000095 :109BD0000000000000000000000000000000000085 -:109BE0000000000000000000480000E00000000A43 -:109BF0000000000000000000000000000000000065 +:109BE0000000000000000000000000000000000075 +:109BF0000000000000000000818100E0070100007B :109C00000000000000000000000000000000000054 :109C10000000000000000000000000000000000044 :109C20000000000000000000000000000000000034 @@ -23004,7 +23004,7 @@ :109D50000000000000000000000000000000000003 :109D600000000000000000000000000000000000F3 :109D700000000000000000000000000000000000E3 -:109D800000000000000000000000000000000000D3 +:109D800000000000FFFF00000000000000000000D5 :109D900000000000000000000000000000000000C3 :109DA00000000000000000000000000000000000B3 :109DB00000000000000000000000000000000000A3 @@ -23012,15 +23012,15 @@ :109DD0000000000000000000000000000000000083 :109DE0000000000000000000000000000000000073 :109DF0000000000000000000000000000000000063 -:109E0000000000000000000000610007C00D00001D -:109E100000650007C00D0000000000000000000009 +:109E00000000000000000000000000000000000052 +:109E10000000000000000000000000000000000042 :109E20000000000000000000000000000000000032 :109E30000000000000000000000000000000000022 :109E40000000000000000000000000000000000012 :109E50000000000000000000000000000000000002 :109E600000000000000000000000000000000000F2 -:109E7000000000610007C00D20000000000000008D -:109E800000000000000000000000000000000000D2 +:109E700000000000000000000000000000000000E2 +:109E800000000061003FC00D20A80000000000009D :109E900000000000000000000000000000000000C2 :109EA00000000000000000000000000000000000B2 :109EB00000000000000000000000000000000000A2 @@ -23053,49 +23053,49 @@ :10A0600000000000000000000000000000000000F0 :10A0700000000000000000000000000000000000E0 :10A0800000000000000000000000000000000000D0 -:10A0900000000000000000000000000000002000A0 -:10A0A0000000000000000000200020000000000070 -:10A0B000000000000000000000000000000020116F -:10A0C000A0000000000000002000200000000000B0 -:10A0D000000000010000000004000000000000007B -:10A0E0002000000000000000000020002000000010 -:10A0F0000000000004000000040000000000000058 -:10A1000020000000000000000000200020000000EF -:10A11000000000000000000000000000000021001E -:10A12000210000000000000000000000040000000A +:10A0900000000000000000002000000000000000A0 +:10A0A0000000000000002000000000000000000090 +:10A0B0000000000000000000200000000000000080 +:10A0C0000000000000002000000000000000000070 +:10A0D0000000000000000000000020000000000060 +:10A0E0000000000000000000200000000000000050 +:10A0F0000000000000000000000000000000000060 +:10A10000000000000000000020000000000000002F +:10A1100000004000000000000000000000000000FF +:10A12000000000000000000000000000000000002F :10A13000000000000000000000000000000000001F :10A14000000000000000000000000000000000000F -:10A1500000000000000000000000000000000000FF +:10A1500000000002000000000000000000000000FD :10A1600000000000000000000000000000000000EF -:10A1700000000000000010000000000000000000CF -:10A1800000000000000000000000090000000000C6 -:10A1900000000000000000000000000000000000BF -:10A1A00000000000000000000000000000000200AD -:10A1B0000200020002000000000000000000000099 +:10A17000000000004000000000000000000000009F +:10A1800000000000000000000000000000000000CF +:10A1900000000000800000000000820000000000BD +:10A1A000000008000800000000000000000004009B +:10A1B0000400000004410000000000000000040052 :10A1C000000000000000000000000000000000008F :10A1D000000000000000000000000000000000007F :10A1E000000000000000000000000000000000006F :10A1F000000000000000000000000000000000005F -:10A2000000000000000000000000000088002000A6 +:10A20000000000000000000000000000000000004E :10A21000000000000000000000000000000000003E -:10A22000000200000000000000000000000000002C -:10A23000800080008000800000000000000000001E +:10A220000000000000000500000000000000000029 +:10A23000000000000000000000000000000000001E :10A24000000000000000000000000000000000000E :10A2500000000000000000000000000000000000FE :10A2600000000000000000000000000000000000EE :10A2700000000000000000000000000000000000DE :10A2800000000000000000000000000000000000CE :10A2900000000000000000000000000000000000BE -:10A2A0000400000040004000040000000000000026 -:10A2B0000800000000000000000000000000000096 -:10A2C000000000000000000040000000000000004E -:10A2D0000800000000000000000000000000000076 -:10A2E0000000000000000000000008000000000066 -:10A2F000820008000000000000000000C000000014 +:10A2A00000000000000000008800400000002000C6 +:10A2B000840000000000000000000000000000001A +:10A2C000000010000000000000000000000000007E +:10A2D000000000000000000000000000000000007E +:10A2E000000000000000000000000000000000006E +:10A2F000000000000000000000000000000000005E :10A30000000000000000000000000000000000004D -:10A3100082000800000000000000000000000000B3 -:10A32000000000000000000000000000002000000D -:10A33000000000000000000000000000000000001D +:10A31000000000000000000000000000210000001C +:10A32000000000000000000000000000000000002D +:10A330000000000000000000000400000000000019 :10A34000000000000000000000000000000000000D :10A3500000000000000000000000000000000000FD :10A3600000000000000000000000000000000000ED @@ -23103,15 +23103,15 @@ :10A3800000000000000000000000000000000000CD :10A3900000000000000000000000000000000000BD :10A3A00000000000000000000000000000000000AD -:10A3B000000000000000000000000000010000009C +:10A3B000000000000000000000000000000000009D :10A3C000000000000000000000000000000000008D :10A3D000000000000000000000000000000000007D -:10A3E0000000000004000000000000000000000069 +:10A3E000000000000000000000000000000000006D :10A3F000000000000000000000000000000000005D -:10A400000000000008000000000000000000000044 +:10A400000000000000000800000000000000000044 :10A41000000000000000000000000000000000003C :10A42000000000000000000000000000000000002C -:10A430000000000000000000000000000000040018 +:10A43000000000000000000000000000000000001C :10A44000000000000000000000000000000000000C :10A4500000000000000000000000000000000000FC :10A4600000000000000000000000000000000000EC @@ -23119,23 +23119,23 @@ :10A4800000000000000000000000000000000000CC :10A4900000000000000000000000000000000000BC :10A4A00000000000000000000000000000000000AC -:10A4B0000000A000000000000000000000000000FC +:10A4B000000000000000000000000000000000009C :10A4C000000000000000000000000000000000008C :10A4D000000000000000000000000000000000007C :10A4E000000000000000000000000000000000006C -:10A4F0000000000000000000000000000000040058 +:10A4F000000000000000000000000000000000005C :10A50000000000000000000000000000000000004B -:10A51000000000000000000000000000000000003B -:10A52000000000000000000000000000000000002B -:10A53000000000000000000000000000000000001B -:10A540000000000000000000000000000004000007 +:10A5100000000000000000000000820000000000B9 +:10A52000000000000000000000200000000000000B +:10A530000000000000020000000400000000000015 +:10A54000000000000000000000000000000000000B :10A5500000000000000000000000000000000000FB :10A5600000000000000000000000000000000000EB :10A5700000000000000000000000000000000000DB :10A5800000000000000000000000000000000000CB :10A5900000000000000000000000000000000000BB -:10A5A000000000000000000000000000000020008B -:10A5B0000000000000000200000000000000000099 +:10A5A0000000000000840000000000000000000027 +:10A5B000000000000000000000000000000000009B :10A5C000000000000000000000000000000000008B :10A5D000000000000000000000000000000000007B :10A5E000000000000000000000000000000000006B @@ -23152,7 +23152,7 @@ :10A6900000000000000000000000000000000000BA :10A6A00000000000000000000000000000000000AA :10A6B000000000000000000000000000000000009A -:10A6C00000000000009000000000000000000000FA +:10A6C000000000000000000000000000000000008A :10A6D000000000000000000000000000000000007A :10A6E000000000000000000000000000000000006A :10A6F000000000000000000000000000000000005A @@ -23160,7 +23160,7 @@ :10A710000000000000000000000000000000000039 :10A720000000000000000000000000000000000029 :10A730000000000000000000000000000000000019 -:10A740000000000000000080000000000000000089 +:10A740000000000000000000000000000000000009 :10A7500000000000000000000000000000000000F9 :10A7600000000000000000000000000000000000E9 :10A7700000000000000000000000000000000000D9 @@ -23168,7 +23168,7 @@ :10A7900000000000000000000000000000000000B9 :10A7A00000000000000000000000000000000000A9 :10A7B0000000000000000000000000000000000099 -:10A7C0000000000000000000000000000080000009 +:10A7C0000000000000000000000000000000000089 :10A7D0000000000000000000000000000000000079 :10A7E0000000000000000000000000000000000069 :10A7F0000000000000000000000000000000000059 @@ -23176,7 +23176,7 @@ :10A810000000000000000000000000000000000038 :10A820000000000000000000000000000000000028 :10A830000000000000000000000000000000000018 -:10A840000000000000000000000000040000000202 +:10A840000000000000000000000000000000000008 :10A8500000000000000000000000000000000000F8 :10A8600000000000000000000000000000000000E8 :10A8700000000000000000000000000000000000D8 @@ -23184,7 +23184,7 @@ :10A8900000000000000000000000000000000000B8 :10A8A00000000000000000000000000000000000A8 :10A8B0000000000000000000000000000000000098 -:10A8C0000000000000000000000000000000829076 +:10A8C0000000000000000000000000000000000088 :10A8D0000000000000000000000000000000000078 :10A8E0000000000000000000000000000000000068 :10A8F0000000000000000000000000000000000058 @@ -23192,16 +23192,16 @@ :10A910000000000000000000000000000000000037 :10A920000000000000000000000000000000000027 :10A930000000000000000000000000000000000017 -:10A940000000000000000000000000000500000002 -:10A9500080800000000000000000000000000000F7 +:10A940000000000000000000000000000000000007 +:10A9500000000000000000000000000000000000F7 :10A9600000000000000000000000000000000000E7 :10A9700000000000000000000000000000000000D7 :10A9800000000000000000000000000000000000C7 :10A9900000000000000000000000000000000000B7 :10A9A00000000000000000000000000000000000A7 -:10A9B0000000000000000000000000000000000097 -:10A9C0000000000000000000000000000000001176 -:10A9D00080400000000000000000000000000000B7 +:10A9B0000003000000000000000000000000000094 +:10A9C0000000000000000000000000000000000087 +:10A9D0000000000000000000000000000000000077 :10A9E0000000000000000000000000000000000067 :10A9F0000000000000000000000000000000000057 :10AA00000000000000000000000000000000000046 @@ -23209,7 +23209,7 @@ :10AA20000000000000000000000000000000000026 :10AA30000000000000000000000000000000000016 :10AA40000000000000000000000000000000000006 -:10AA5000000120010088000000000000000000004C +:10AA500000000000000000000000000000000000F6 :10AA600000000000000000000000000000000000E6 :10AA700000000000000000000000000000000000D6 :10AA800000000000000000000000000000000000C6 @@ -23217,7 +23217,7 @@ :10AAA00000000000000000000000000000000000A6 :10AAB0000000000000000000000000000000000096 :10AAC0000000000000000000000000000000000086 -:10AAD000000000000000070000000000000000006F +:10AAD0000000000000000000000000000000000076 :10AAE0000000000000000000000000000000000066 :10AAF0000000000000000000000000000000000056 :10AB00000000000000000000000000000000000045 @@ -23225,7 +23225,7 @@ :10AB20000000000000000000000000000000000025 :10AB30000000000000000000000000000000000015 :10AB40000000000000000000000000000000000005 -:10AB5000000000000000FF000000FF0000000000F7 +:10AB500000000000000000000000000000000000F5 :10AB600000000000000000000000000000000000E5 :10AB700000000000000000000000000000000000D5 :10AB800000000000000000000000000000000000C5 @@ -23233,7 +23233,7 @@ :10ABA00000000000000000000000000000000000A5 :10ABB0000000000000000000000000000000000095 :10ABC0000000000000000000000000000000000085 -:10ABD0000000000000000000FF000000FF00000077 +:10ABD0000000000000000000000000000000000075 :10ABE0000000000000000000000000000000000065 :10ABF0000000000000000000000000000000000055 :10AC00000000000000000000000000000000000044 @@ -23249,7 +23249,7 @@ :10ACA00000000000000000000000000000000000A4 :10ACB0000000000000000000000000000000000094 :10ACC0000000000000000000000000000000000084 -:10ACD0000000000000000000000000FF0000FFFF77 +:10ACD0000000000000000000000000000000000074 :10ACE0000000000000000000000000000000000064 :10ACF0000000000000000000000000000000000054 :10AD00000000000000000000000000000000000043 @@ -23257,7 +23257,7 @@ :10AD20000000000000000000000000000000000023 :10AD30000000000000000000000000000000000013 :10AD40000000000000000000000000000000000003 -:10AD500000000000000000000000000000FF0000F4 +:10AD500000000000000000000000000000000000F3 :10AD600000000000000000000000000000000000E3 :10AD700000000000000000000000000000000000D3 :10AD800000000000000000000000000000000000C3 @@ -23265,14 +23265,14 @@ :10ADA00000000000000000000000000000000000A3 :10ADB0000000000000000000000000000000000093 :10ADC0000000000000000000000000000000000083 -:10ADD000000000000000000000000000000015005E -:10ADE0002A00054000A8000000000000000000004C +:10ADD0000000000000000000000000000000000073 +:10ADE0000000000000000000000000000000000063 :10ADF0000000000000000000000000000000000053 :10AE00000000000000000000000000000000000042 :10AE10000000000000000000000000000000000032 :10AE20000000000000000000000000000000000022 :10AE30000000000000000000000000000000000012 -:10AE40000000000000000000000000000000000002 +:10AE400000610006000D000000000000000000008E :10AE500000000000000000000000000000000000F2 :10AE600000000000000000000000000000000000E2 :10AE700000000000000000000000000000000000D2 @@ -23280,7 +23280,7 @@ :10AE900000000000000000000000000000000000B2 :10AEA00000000000000000000000000000000000A2 :10AEB0000000000000000000000000000000000092 -:10AEC0000000000000000000000000000000000082 +:10AEC0000000000000000F0F0F0F00000000000046 :10AED0000000000000000000000000000000000072 :10AEE0000000000000000000000000000000000062 :10AEF0000000000000000000000000000000000052 @@ -23288,7 +23288,7 @@ :10AF10000000000000000000000000000000000031 :10AF20000000000000000000000000000000000021 :10AF30000000000000000000000000000000000011 -:10AF40000000000000000000000000000000000001 +:10AF400000000000000000000F0F0F0F00000000C5 :10AF500000000000000000000000000000000000F1 :10AF600000000000000000000000000000000000E1 :10AF700000000000000000000000000000000000D1 @@ -23305,13 +23305,13 @@ :10B020000000000000000000000000000000000020 :10B030000000000000000000000000000000000010 :10B040000000000000000000000000000000000000 -:10B0500000000000000000000000200000000000D0 +:10B0500000000000000000004002000000000000AE :10B0600000000000000000000000200000000000C0 -:10B0700000000000000000000000200000000000B0 +:10B0700000000000000000002000000000000000B0 :10B0800000000000000000000000200000000000A0 -:10B090000000000000000000000000002000000090 +:10B090000000000000000000000020000000000090 :10B0A0000000000000000000000000002000000080 -:10B0B0000000000000000000000000002000000070 +:10B0B0000000000000000000000020000000000070 :10B0C0000000000000000000000000002000000060 :10B0D0000000000000000000000000000000000070 :10B0E0000000000000000000000000000000000060 @@ -23320,34 +23320,34 @@ :10B11000000000000000000000000000000000002F :10B12000000000000000000000000000000000001F :10B13000000000000000000000000000000000000F -:10B1400004000000000000000000000000000000FB -:10B1500000000000000000000000000000000000EF +:10B1400000000000000000000000000000000000FF +:10B1500000000000000002000000000000002000CD :10B1600000000000000000000000000000000000DF -:10B1700000000000000000000000000000000000CF +:10B1700000000000000000000000000004000000CB :10B1800000000000000000000000000000000000BF :10B1900000000000000000000000000000000000AF :10B1A000000000000000000000000000000000009F :10B1B000000000000000000000000000000000008F -:10B1C000000000000000000000000000000002007D -:10B1D0000000000000000008000000000000000067 -:10B1E000000000000000000800080000000000004F -:10B1F0000000000000000008000000000000000047 -:10B20000000000000000000800080000000000002E -:10B210000000000000000000000800000000000026 -:10B22000000000000000000000080008000000000E -:10B230000000000000000000000800000000000006 -:10B2400000000000000000000008000800000000EE +:10B1C000000000000000000000000000000000007F +:10B1D000000000000000000000000000000000006F +:10B1E000000000000000000000000000000000005F +:10B1F000000000000000000000000000000000004F +:10B20000000000000000000000000000000000003E +:10B21000000000000000000000000000000000002E +:10B22000000000000000000000000000000000001E +:10B23000000000000000000000000000000000000E +:10B2400000000000000000000000000000000000FE :10B2500000000000000000000000000000000000EE -:10B2600000000000000000000000000000000000DE +:10B2600000000800000000000400000000000000D2 :10B2700000000000000000000000000000000000CE -:10B280000000000088000000000000000000000036 +:10B2800000000000000000000000000000000000BE :10B2900000000000000000000000000000000000AE :10B2A000000000000000000000000000000000009E :10B2B000000000000000000000000000000000008E :10B2C000000000000000000000000000000000007E -:10B2D000000000000000000004000000000000006A -:10B2E000000000000000000000000000000000005E -:10B2F000000000000000000000000000000000004E +:10B2D000000000000000000000000000000000006E +:10B2E000000000000000000004000000000000005A +:10B2F000000000200020000000000000000000000E :10B30000000000000000000000000000000000003D :10B31000000000000000000000000000000000002D :10B32000000000000000000000000000000000001D @@ -23378,9 +23378,9 @@ :10B4B000000000000000000000000000000000008C :10B4C000000000000000000000000000000000007C :10B4D000000000000000000000000000000000006C -:10B4E000000000000000000000000000000000005C +:10B4E0000000000000000000000000000000040058 :10B4F000000000000000000000000000000000004C -:10B5000000840000000000000000000000000000B7 +:10B50000000000000000000000000000000000003B :10B51000000000000000000000000000000000002B :10B52000000000000000000000000000000000001B :10B53000000000000000000000000000000000000B @@ -23388,7 +23388,7 @@ :10B5500000000000000000000000000000000000EB :10B5600000000000000000000000000000000000DB :10B5700000000000000000000000000000000000CB -:10B5800000000000000000000000000200000000B9 +:10B5800000000000000000000000000000000000BB :10B5900000000000000000000000000000000000AB :10B5A000000000000000000000000000000000009B :10B5B000000000000000000000000000000000008B @@ -23549,31 +23549,31 @@ :10BF600000000000000000000000000000000000D1 :10BF700000000000000000000000000000000000C1 :10BF800000000000000000000000000000000000B1 -:10BF900000000000000000000000000000000000A1 +:10BF9000000000000000000000040000000000009D :10BFA0000000000000000000000000000000000091 :10BFB0000000000000000000000000000000000081 :10BFC0000000000000000000000000000000000071 :10BFD0000000000000000000000000000000000061 :10BFE0000000000000000000000000000000000051 -:10BFF00040000000000000000000000040000000C1 -:10C0000000004000000000000000000000000000F0 -:10C010000000000000000000000000000000000020 -:10C020000000000000000000000000000000000010 +:10BFF0000000000000000000000000000000000041 +:10C000000000000000000000000010000000000020 +:10C01000000000000000000000000002000000001E +:10C0200000000000000010000002000000000000FE :10C030000000000000000000000000000000000000 :10C0400000000000000000000000000000000000F0 -:10C0500000000000000000000000000000000000E0 +:10C05000000000000000000000000002000240009C :10C0600000000000000000000000000000000000D0 -:10C0700000000000000000000000000000020000BE -:10C08000000000001000000000020000000200009C -:10C0900000000000000000000000000000000000A0 -:10C0A0000000000000000000000000000000000090 +:10C0700000000000000000000000000000000000C0 +:10C0800000000000000000000000000000000000B0 +:10C090000000000000000000000000000000001090 +:10C0A000000000000200000000000000000004404A :10C0B0000000000000000000000000000000000080 :10C0C0000000000000000000000000000000000070 :10C0D0000000000000000000000000000000000060 :10C0E0000000000000000000000000000000000050 :10C0F0000000000000000000000000000000000040 :10C10000000000000000000000000000000000002F -:10C11000000000000000000000000000000000001F +:10C110000008000000000000000000000000000017 :10C12000000000000000000000000000000000000F :10C1300000000000000000000000000000000000FF :10C1400000000000000000000000000000000000EF @@ -23581,10 +23581,10 @@ :10C1600000000000000000000000000000000000CF :10C1700000000000000000000000000000000000BF :10C1800000000000000000000000000000000000AF -:10C19000000000000000000000000000000002009D -:10C1A000040000000000000000000000000000008B -:10C1B000000000000000000000000000000004007B -:10C1C000000004000000000000000000000000006B +:10C19000000000000000000000000000000000009F +:10C1A00000000000040000000000900000000000FB +:10C1B000000004000000000000000000000000007B +:10C1C000000000000000000000000000000000006F :10C1D000000000000000000000000000000000005F :10C1E000000000000000000000000000000000004F :10C1F000000000000000000000000000000000003F @@ -23604,7 +23604,7 @@ :10C2D000000000000000000000000000000000005E :10C2E000000000000000000000000000000000004E :10C2F000000000000000000000000000000000003E -:10C30000000000000000000000001000000000001D +:10C30000000000000000000000000000000000002D :10C31000100000000000000000000000000000000D :10C32000000000000000000000000000000000000D :10C3300000000000000000000000000000000000FD @@ -23613,7 +23613,7 @@ :10C3600000000000000000000000000000000000CD :10C3700000000000000000000000000000000000BD :10C3800000000000000000000000000000000000AD -:10C39000000000000000100000000000000000008D +:10C39000000000000000000000000000000000009D :10C3A000000000000000000000000000000000008D :10C3B000000000000000000000000000000000007D :10C3C000000000000000000000000000000000006D @@ -23624,7 +23624,7 @@ :10C41000000000000000000000000000000000001C :10C42000000000000000000000000000000000000C :10C4300000000000000000000000000000000000FC -:10C4400000000000000000004000000000000000AC +:10C4400000000000000000000000000000000000EC :10C4500000000000000000000000000000000000DC :10C4600000000000000000000000000000000000CC :10C4700000000000000000000000000000000000BC @@ -23744,46 +23744,46 @@ :10CB90000000000000000000000000000000000095 :10CBA0000000000000000000000000000000000085 :10CBB0000000000000000000000000000000000075 -:10CBC0000000000000000000000000000000000065 +:10CBC0000000000000000000200020000000000025 :10CBD0000000000000000000000000000000000055 -:10CBE0000000000000000000000000000000000045 +:10CBE0000000000000000000200020000000000005 :10CBF0000000000000000000000000000000000035 -:10CC000000004000000000000000000000000000E4 -:10CC10000000000000004000400000004000400014 -:10CC200040004000400000004000100040000000B4 -:10CC3000C0004000A0002000000010002000000004 -:10CC400000000000000000000000000000000000E4 -:10CC500000020000000000000000000000000000D2 +:10CC000000000000000000000000200020000000E4 +:10CC100000004000400000000000C000A0004000F4 +:10CC20001000000010000000100020002000C000D4 +:10CC3000A0001000400000000000A0004000000024 +:10CC400000000000000000000000000000020000E2 +:10CC500000000000000000000002000000000000D2 :10CC600000000000000000000000000000000000C4 :10CC700000000000000000000000000000000000B4 :10CC800000000000000000000000000000000000A4 :10CC90000000000000000000000000000000000094 :10CCA0000000000000000000000000000000000084 -:10CCB0000000000000000000000000000000000074 +:10CCB0000000000000001000000000000000000064 :10CCC0000000000000000000000000000000000064 :10CCD0000000000000000000000000000000000054 :10CCE0000000000000000000000000000000000044 :10CCF0000000000000000000000000000000000034 -:10CD0000000000000000000000080000000000001B -:10CD1000000000000000000000000000000000080B -:10CD200000080000000000080000100000000000E3 -:10CD300000000008000000080008000800000010C3 -:10CD400000080008000000000000000000000008CB -:10CD500000080000000000080000000800080000B3 -:10CD600000000008000000000000000000000008B3 -:10CD70000008000000000008000000080008000093 -:10CD8000000000000008000000000000000000009B -:10CD9000000800080000000000080000000800086B -:10CDA0000000000000080000000000080000000073 -:10CDB0000008000800000000008400000084000853 -:10CDC00000080084000000000000000000000000D7 +:10CD00000000000000000000000000000000000023 +:10CD10000000000000000000000000000000000013 +:10CD200000001000000000080000000000000000EB +:10CD300000000000000000000008A0081000080823 +:10CD4000900800000000000800080008000000082B +:10CD500000080008000000080208000000000008A9 +:10CD6000000800000000000800080008000000089B +:10CD7000000800080000000800080000000000088B +:10CD80000008000000000000000800080008000083 +:10CD9000000800080008000000080008000000006B +:10CDA00000080008000000000084000800080000DF +:10CDB00000080008000800000008008400000000CF +:10CDC00000840010000000000000000000000000CF :10CDD0000000000000000000000000000000000053 :10CDE0000000000000000000000000000000000043 :10CDF0000000000000000000000000000000000033 :10CE00000000000000000000000000000000000022 :10CE10000000000000000000000000000000000012 :10CE20000000000000000000000000000000000002 -:10CE300000000000000000000000000000000000F2 +:10CE300000000000000000000000002100000000D1 :10CE400000000000000000000000000000000000E2 :10CE500000000000000000000000000000000000D2 :10CE600000000000000000000000000000000000C2 @@ -23798,9 +23798,9 @@ :10CEF0000000000000000000000000000000000032 :10CF00000000000000000000000000000000000021 :10CF10000000000000000000000000000000000011 -:10CF200000000000000000000000000000000800F9 -:10CF3000000000000000000000000000100082005F -:10CF40001000000008000000104100000000000078 +:10CF20000000000000000000000000000000000001 +:10CF30000000000000000000C00000000000080029 +:10CF400000001000000008000800000000000000C1 :10CF500000000000000000000000000000000000D1 :10CF600000000000000000000000000000000000C1 :10CF700000000000000000000000000000000000B1 @@ -23808,32 +23808,32 @@ :10CF90000000000000000000000000000000000091 :10CFA0000000000000000000000000000000000081 :10CFB0000000000000000000000000000000000071 -:10CFC000001000000000000000A0000000000000B1 +:10CFC0000000000000000000000000A000000000C1 :10CFD0000000000000000000000000000000000051 :10CFE0000000000000000000000000000000000041 :10CFF0000000000000000000000000000000000031 :10D000000000000000000000000000000000000020 :10D010000000000000000000000000000000000010 -:10D020000000000000000000000000000000000000 -:10D0300000000000000000000000000000000000F0 -:10D040000000000000001000000000004000000090 +:10D0200000000000000000000000000000000400FC +:10D030000000000000000000000000000000A00050 +:10D0400000000000080040008400C000C000000094 :10D0500000000000000000000000000000000000D0 -:10D0600000000000000000000000000000000000C0 +:10D0600000000000002000000000000000000000A0 :10D0700000000000000000000000000000000000B0 :10D0800000000000000000000000000000000000A0 :10D090000000000000000000000000000000000090 :10D0A0000000000000000000000000000000000080 :10D0B0000000000000000000000000000000000070 -:10D0C0000000000000000000000000000000000060 +:10D0C000000000000000000000040000000000005C :10D0D0000000000000000000000000000000000050 :10D0E0000000000000000000000000000000000040 :10D0F0000000000000000000000000000000000030 :10D10000000000000000000000000000000000001F :10D11000000000000000000000000000000000000F :10D1200000000000000000000000000000000000FF -:10D1300000000000000000000000000000000000EF -:10D14000000000000000000000000000000084005B -:10D1500000000000000000000000000000000000CF +:10D1300000000000000000000000100000000000DF +:10D1400000001000000000000000A000000010001F +:10D15000820000000000000000000000000000004D :10D1600000000000000000000000000000000000BF :10D1700000000000000000000000000000000000AF :10D18000000000000000000000000000000000009F @@ -23987,42 +23987,42 @@ :10DAC0000000000000000000000000000000000056 :10DAD0000000000000000000000000000000000046 :10DAE0000000000000000000000000000000000036 -:10DAF0000000000000000000000000002000000006 +:10DAF0000000000000000000000000000000000026 :10DB00000000000000000000000000000000000015 -:10DB100000020000000000000000000020000000E3 -:10DB200000000000000000000000C0000000000035 -:10DB30000000000000004000000000000000200085 +:10DB10000000000000020000000000000000000003 +:10DB200000000000000000000000000000000000F5 +:10DB300000000000000000000000000000000000E5 :10DB400000000000000000000000000000000000D5 :10DB500000000000000000000000000000000000C5 :10DB600000000000000000000000000000000000B5 :10DB700000000000000000000000000000000002A3 -:10DB8000000000020000000200000002000000008F +:10DB80000000000000000000000000000000000095 :10DB90000000000000000000000000000000000085 :10DBA0000000000000000000000000000000000075 -:10DBB0000000000000000000000000000000000065 -:10DBC0000000000000000000000000000000200035 -:10DBD00000000000000200000000200240000000E1 -:10DBE0002000400000004100000000000000000094 +:10DBB0000000000000000000100200000000000053 +:10DBC0000000000000000000000000000000000055 +:10DBD0000000000000000000000000000000000045 +:10DBE00000004000000000000000000000000000F5 :10DBF0000000000000000000000000000000000025 -:10DC00000000000000000000000000000000000014 -:10DC100000000000000000000040020000000000C2 +:10DC000000000000000000000040001000000000C4 +:10DC10000000000000000200000002000000000000 :10DC200000000000000000000000000000000000F4 :10DC300000000000000000000000000000000000E4 :10DC400000000000000000000000000000000000D4 :10DC500000000000000000000000000000000000C4 -:10DC600000000000000000000000000000000000B4 -:10DC700000000000000000000000000000000000A4 -:10DC8000000000000000000000000008000000008C -:10DC9000000000080000000002000000000000007A -:10DCA000000000000000000000000008000000006C -:10DCB000000000080000000000000000000000005C -:10DCC000000000000000000000000000000800004C -:10DCD000000000000008000000000000000000003C -:10DCE00000000000000000000000000000880000AC -:10DCF000000000000088000000000000000000009C +:10DC600000000000000000000000000000100000A4 +:10DC7000000000000009000000000010000000008B +:10DC80000000020000000000000000000040000052 +:10DC90000000000000000200000000000000000082 +:10DCA0000000000000000200000000000000000072 +:10DCB0000000000000000000000000000000000064 +:10DCC0000000000000000000000000000000000054 +:10DCD0000000000000000000000000000000000044 +:10DCE0000000000000000000000000000000000034 +:10DCF0000000000000000000000000000000000024 :10DD00000000000000000000000000000000000013 :10DD10000000000000000000000000000000000003 -:10DD200000000000000000000000040000000000EF +:10DD200000000000000000000000000000000000F3 :10DD300000000000000000000000000000000000E3 :10DD400000000000000000000000000000000000D3 :10DD500000000000000000000000000000000000C3 @@ -24033,9 +24033,9 @@ :10DDA0000000000000000000000000000000000073 :10DDB0000000000000000000000000000000000063 :10DDC0000000000000000000000000000000000053 -:10DDD0000000000000000000000000000000000043 -:10DDE00000000000000000000000000000004100F2 -:10DDF000000000000000000009000000000000001A +:10DDD000000000000000000009000000000000003A +:10DDE0000000000000000000000000001000000023 +:10DDF0000000000000001000000000000000000013 :10DE00000000000000000000000000000000000012 :10DE10000000000000000000000000000000000002 :10DE200000000000000000000000000000000000F2 @@ -24043,9 +24043,9 @@ :10DE400000000000000000000000000000000000D2 :10DE500000000000000000000000000000000000C2 :10DE600000000000000000000000000000000000B2 -:10DE70000000000000000000000000400040000022 +:10DE700000000000000000000000000000000000A2 :10DE80000000000000000000000000000000000092 -:10DE90000000000000000000000000000000004042 +:10DE90000000000000000000000000000000000082 :10DEA0000000000000000000000000000000000072 :10DEB0000000000000000000000000000000000062 :10DEC0000000000000000000000000000000000052 @@ -24058,7 +24058,7 @@ :10DF300000000000000000000000000000000000E1 :10DF400000000000000000000000000000000000D1 :10DF500000000000000000000000000000000000C1 -:10DF600000000000000000000000000000001000A1 +:10DF600000000000000000000000000000000000B1 :10DF700000000000000000000000000000000000A1 :10DF80000000000000000000000000000000000091 :10DF90000000000000000000000000000000000081 @@ -24069,7 +24069,7 @@ :10DFE0000000000000000000000000000000000031 :10DFF0000000000000000000000000000000000021 :10E000000000000000000000000000000000000010 -:10E0100000000002000000000000000000000000FE +:10E010000000000000000000000000000000000000 :10E0200000000000000000000000000000000000F0 :10E0300000000000000000000000000000000000E0 :10E0400000000000000000000000000000000000D0 @@ -24239,66 +24239,66 @@ :10EA80000000000000000000000000000000000086 :10EA90000000000000000000000000000000000076 :10EAA0000000000000000000000000000000000066 -:10EAB00000000000000000000000200020002000F6 -:10EAC0002000000020002000200020002000000086 -:10EAD00000000000200000000000200020002000B6 -:10EAE000C0000000200020002000000020000000E6 -:10EAF00000000000200000000000000020002000B6 -:10EB000000000000000000002000200000002000A5 -:10EB100000000000000000000000000000000000F5 +:10EAB00000000000000020000000200020040000F2 +:10EAC0000000200020002000200000002000400066 +:10EAD0002000200020002000000020002000000076 +:10EAE0000000200020002000200000002000200066 +:10EAF00020000000200000002000000000000000B6 +:10EB0000000000002000200000008800000020001D +:10EB100000002000000000000000000000000000D5 :10EB200000000000000000000000000000000000E5 :10EB300000000000000000000000000000000000D5 -:10EB400000000000000000000000000000000000C5 -:10EB500000000000000000000000000000000000B5 -:10EB60000000000000000000000000002000000085 -:10EB70000000000000000000000000000000000095 -:10EB80000000200020000000200041004100410062 -:10EB90004100000041000000200000004100200072 -:10EBA00020004100000000004100000000000000C3 -:10EBB00000000000000000900000000000000000C5 +:10EB4000000200020002009000000000000000002F +:10EB500000020002000000000000000000000000B1 +:10EB600000000000000000000000000000000000A5 +:10EB70000000000000000000000000000000200075 +:10EB80002000000000000000000041000000000024 +:10EB90000000200000000000000020000000000035 +:10EBA00041000900000020002000000000000000DB +:10EBB0000000000000000000000000000000000055 :10EBC0000000000000000000000000000000000045 :10EBD0000000000000000000000000000000000035 :10EBE0000000000000000000000000000000000025 :10EBF0000000000000000000000000000000000015 :10EC00000000000000000000000000000000000004 :10EC100000000000000000000000000000000000F4 -:10EC200000000010000000000010001008000000AC -:10EC30000010000002000000000082000008000038 -:10EC4000000800080008000000080008000000009C -:10EC50000008000800080000000800080008000084 -:10EC60000008008400080000000800080000000000 -:10EC70000008000800080000000800080000000864 -:10EC80000000000800000008000000100010000054 -:10EC90000000001000080008000000080008001034 -:10ECA0000000001000000010000000000000000044 -:10ECB0000000000000100010000000100010000014 +:10EC200000000010000000000000001000000000C4 +:10EC3000001000100800001000100010000002007A +:10EC400000000000000802000008000000080008A2 +:10EC500000080000000000000000000000000000AC +:10EC60000000040000080000000800000008000880 +:10EC7000000800000000000000000000000000008C +:10EC8000000000000000000800000008000000086C +:10EC9000000800100000000000000000000000005C +:10ECA0000000000000000010000000100000001034 +:10ECB0000010000000000000000000000000000044 :10ECC0000000000000000000000000000000000044 :10ECD0000000000000000000000000000000000034 :10ECE0000000000000000000000000000000000024 -:10ECF0000000000000100000000000000000000004 +:10ECF0000000000000000000000000000000000014 :10ED00000000000000000000000000000000000003 -:10ED100000000000000000000000000000000000F3 +:10ED100000000000000000000000000000000800EB :10ED200000000000000000000000000000000000E3 -:10ED30000000000000000800000000000000C0000B +:10ED3000000008000000000084000800C00000007F :10ED400000000000000000000000000000000000C3 :10ED500000000000000000000000000000000000B3 -:10ED6000000000000000000000000800000000009B +:10ED600000000000000000000000000000000000A3 :10ED70000000000000000000000000000000000093 :10ED80000000000000000000000000000000000083 :10ED90000000000000000000000000000000000073 -:10EDA000000000000900000000000000000000005A +:10EDA0000000000000000000000000000000000063 :10EDB0000000000000000000000000000000000053 :10EDC0000000000000000000000000000000000043 -:10EDD00000000041000000000000000000000000F2 +:10EDD0000000000000000000000000000000000033 :10EDE0000000000000000000000000000000000023 :10EDF0000000000000000000000000000000000013 -:10EE00000000000000000000000000000000000002 -:10EE100000000000000000000000000000000000F2 +:10EE0000000000000000C000000000000000000042 +:10EE1000000000000000000000000000A000000052 :10EE200000000000000000000000000000000000E2 :10EE300000000000000000000000000000000000D2 -:10EE400000000000000000000000000000000000C2 +:10EE400000000000000000000000040000000000BE :10EE500000000000000000000000000000000000B2 -:10EE600000000000000000000000000000000000A2 +:10EE600000000000000000000000000002000000A0 :10EE70000000000000000000000000000000000092 :10EE80000000000000000000000000000000000082 :10EE90000000000000000000000000000000000072 @@ -24308,24 +24308,24 @@ :10EED0000000000000000000000000000000000032 :10EEE0000000000000000000000000000000000022 :10EEF0000000000000000000000000000000000012 -:10EF00000000000000000000000000000000000001 +:10EF000000000800000000000000000000000000F9 :10EF100000000000000000000000000000000000F1 :10EF200000000000000000000000000000000000E1 -:10EF300000000000000000000800000000000000C9 +:10EF300000000000000000000000000000000800C9 :10EF400000000000000000000000000000000000C1 :10EF500000000000000000000000000000000000B1 :10EF600000000000000000000000000000000000A1 :10EF70000000000000000000000000000000000091 :10EF80000000000000000000000000000000000081 -:10EF90000000000000000000000000000000000071 +:10EF90000000000000000000000000000800000069 :10EFA0000000000000000000000000000000000061 -:10EFB0000000000000000000000000000800000049 +:10EFB0000000000000000000000000000000000051 :10EFC0000000000000000000000000000000000041 :10EFD0000000000000000000000000000000000031 :10EFE0000000000000000000000000000000000021 :10EFF0000000000000000000000000000000000011 :10F000000000000000000000000000000000000000 -:10F0100000000000000000000000000000000000F0 +:10F0100000000000000000000000000008000000E8 :10F0200000000000000000000000000000000000E0 :10F0300000000000000000000000000000000000D0 :10F0400000000000000000000000000000000000C0 @@ -24483,38 +24483,38 @@ :10F9C0000000000000000000000000000000000037 :10F9D0000000000000000000000000000000000027 :10F9E0000000000000000000000000000000000017 -:10F9F0000000200020000000200020002000200047 -:10FA00002000200020002000200020002000000016 -:10FA10000000200000000000200020002000200046 -:10FA200020002000200020002000200020000000F6 -:10FA30000000000020000000000020000000000086 -:10FA400000000000000000000000000000000000B6 -:10FA500000000000000000000000000000000000A6 +:10F9F00000000000200000000000200000000000C7 +:10FA00000000200000000000200020000000200076 +:10FA10002000000020000000000020000000000086 +:10FA20000000200000000000200020000000200056 +:10FA30002000000000002000000000000000000086 +:10FA40000000000020000000000000000000000096 +:10FA50002000000000000000000000000000000086 :10FA60000000000000000000000000000000000096 -:10FA700000000000000000000000000000000090F6 -:10FA80000000000000000000000000000000000076 -:10FA900000000000000000000000000000900000D6 -:10FAA0000090410000000000000000000000000085 +:10FA70000000000000000000000000000000000086 +:10FA8000000400020000000000000004000000026A +:10FA900000900000000000000000000000000000D6 +:10FAA0000000000000000000000000000000000056 :10FAB0000000000000000000000000000000000046 -:10FAC00000000000000020000000200020000000D6 -:10FAD0000000000000000000000000000000000026 -:10FAE0000000004000000000009000000000004006 -:10FAF0000000009000000000000000000000000076 +:10FAC0000040004000000000000000002000200076 +:10FAD0000000000000000000200000000000000006 +:10FAE0000000000000000000000000000000000016 +:10FAF00000200000000000000000000000000000E6 :10FB000000000000000000000000000000000000F5 :10FB100000000000000000000000000000000000E5 -:10FB200000000000001100000000000000000000C4 +:10FB200000000000000000000000000000000000D5 :10FB300000000000000000000000000000000000C5 -:10FB400000000000000000110000000000000000A4 -:10FB500000000000000000000000000000000000A5 +:10FB400000000000000000000000000000000000B5 +:10FB50000000000000000800000000000000080095 :10FB60000000000000000000000000000000000095 :10FB70000000000000000000000000000000000085 -:10FB80000000000000100000000000000000000065 +:10FB80000000000000080008000000000200000063 :10FB90000000000000000000000000000000000065 -:10FBA0000000000000000000000000000000000055 +:10FBA0000000000000080004000000000000000049 :10FBB0000000000000000000000000000000000045 -:10FBC0000000000000000000000000000000000035 +:10FBC000000000000000000800000000000000002D :10FBD0000000000000000000000000000000000025 -:10FBE0000000000000000000000000000000000015 +:10FBE0000000000000000010000000000000000005 :10FBF0000000000000000000000000000000000005 :10FC000000000000000000000000000000000000F4 :10FC100000000000000000000000000000000000E4 @@ -24525,29 +24525,29 @@ :10FC60000000000000000000000000000000000094 :10FC70000000000000000000000000000000000084 :10FC80000000000000000000000000000000000074 -:10FC9000000000000000000000000000000008005C +:10FC90000000000000000000000000000000000064 :10FCA0000000000000000000000000000000000054 :10FCB0000000000000000000000000000000000044 -:10FCC0000000000000000800080008000800000014 -:10FCD00008000000000000000800000000002100F3 -:10FCE000000000000800000000000000000000000C +:10FCC000000000000000080000000000000000002C +:10FCD000000000000000000000000000080000001C +:10FCE000000000000000000000000000000008000C :10FCF0000000000000000000000000000000000004 -:10FD000000000000000000000000000000000000F3 +:10FD000000000000000000000000000000020000F1 :10FD100000000000000000000000000000000000E3 -:10FD200000000000000000000000000000000000D3 -:10FD300000000000000000000000000000000000C3 +:10FD200000000000000000200000000000000002B1 +:10FD300000000000000000200000000000000000A3 :10FD400000000000000000000000000000000000B3 :10FD500000000000000000000000000000000000A3 :10FD60000000000000000000000000000000000093 -:10FD7000000000000004000000000000000000007F +:10FD70000000000000000000000000000000000083 :10FD80000000000000000000000000000000000073 -:10FD90000000000000000000000000000000000063 +:10FD9000000000000400000000000000000002005D :10FDA0000000000000000000000000000000000053 :10FDB0000000000000000000000000000000000043 :10FDC0000000000000000000000000000000000033 :10FDD0000000000000000000000000000000000023 :10FDE0000000000000000000000000000000000013 -:10FDF00021000000000000000000000000000000E2 +:10FDF0000000000000000000000000000000000003 :10FE000000000000000000000000000000000000F2 :10FE100000000000000000000000000000000000E2 :10FE200000000000000000000000000000000000D2 @@ -24562,7 +24562,7 @@ :10FEB0000000000000000000000000000000000042 :10FEC0000000000000000000000000000000000032 :10FED0000000000000000000000000000000000022 -:10FEE000000000000000080000000000000000000A +:10FEE0000000000000000000000000000000000012 :10FEF0000000000000000000000000000000000002 :10FF000000000000000000000000000000000000F1 :10FF100000000000000000000000000000000000E1 @@ -24570,18 +24570,18 @@ :10FF300000000000000000000000000000000000C1 :10FF400000000000000000000000000000000000B1 :10FF500000000000000000000000000000000000A1 -:10FF60000800000000000000000000000000100079 +:10FF60000000000000000000000000000000000091 :10FF70000000000000000000000000000000000081 :10FF80000000000000000000000000000000000071 -:10FF90000000000000000000000000000000000061 +:10FF90000000080000000000000000000000000059 :10FFA0000000000000000000000000000000000051 -:10FFB000000004000000000000000000000000003D +:10FFB0000000000000000000000000000000000041 :10FFC0000000000000000000000000000000000031 :10FFD0000000000000000000000000000000000021 :10FFE0000000000000000000000000000000000011 :10FFF0000000000000000000000000000000000001 :020000040006F4 -:1000000000040000000000000000000000000000EC +:1000000000000000000000000000000000000000F0 :1000100000000000000000000000000000000000E0 :1000200000000000000000000000000000000000D0 :1000300000000000000000000000000000000000C0 @@ -24736,78 +24736,78 @@ :100980000000000000000000000000000000000067 :100990000000000000000000000000000000000057 :1009A0000000000000000000000000000000000047 -:1009B0002000200020002000400000000000000077 -:1009C0000000000020000000000000000000000007 -:1009D00020002000200000000000000000000000B7 -:1009E000000000000000880000000000000040003F -:1009F00000002000400000000000400000008800CF -:100A0000000000000000000000000000000088005E +:1009B00020002000000020000400200000000000B3 +:1009C00000000000200020030000000000000000E4 +:1009D0002000200000002000000020000000000097 +:1009E00000000000200020000000000000000000C7 +:1009F0000000200020000000200000002000000077 +:100A000000000000000020002000000000000000A6 :100A100000000000000000000000000000000000D6 :100A200000000000000000000000000000000000C6 -:100A300000000000000000000000000000000000B6 -:100A400000000000000200000000000000000000A4 +:100A30000000000000000000000020000000000096 +:100A40000020000000000000002000000020000046 :100A50000000000000000000000000000000000096 :100A60000000000000000000000000000000000086 :100A70000000000000000000000000000000000076 :100A80000000000000000000000000000000000066 -:100A90000000000000000000000000000000002036 -:100AA0000000000000000000000000000000002026 +:100A900000000020002000000020000000200000D6 +:100AA0000000000000000020002000000000000006 :100AB0000000000000000000000000000000000036 :100AC0000000000000000000000000000000000026 :100AD0000000000000000000000000000000000016 :100AE0000000000000000000000000000000000006 :100AF00000000000000000000000000000000000F6 :100B000000000000000000000000000000000000E5 -:100B100000000000000000000000000000000000D5 -:100B200000000000000000000000000000000000C5 -:100B30000000000000000000000000080084000821 -:100B4000000000000000200000000000000800007D -:100B50000000000820080000000000080000000855 -:100B6000000000000000000000000000000800007D -:100B7000000000080008000000000000000800005D -:100B8000000800000000000000000000000000104D -:100B90000000000000100010000000000010000025 -:100BA0000040000000000000000000000000000005 -:100BB0000000000000000000000000000000000035 -:100BC0000000000000000000000000000000000223 +:100B100000000000000002000000000000000000D3 +:100B200000000000000000000000000000000200C3 +:100B300002000000020000000000000800080000A1 +:100B40000008000800080000000000000008000085 +:100B50000000000800080000000000080008000075 +:100B60000008000800080000000000000008000065 +:100B70000000000800080000000000000008000855 +:100B8000000000080008000800000000000000103D +:100B9000000000000008001000000000001000101D +:100BA0000000001000100010000000000000000015 +:100BB00000000000004000000000000000000000F5 +:100BC0000000000000000000040000000000000021 :100BD0000000000000000000000000000000000015 :100BE0000000000000000000000000000000000005 :100BF00000000000000000000000000000000000F5 :100C000000000000000000000000000000000000E4 :100C100000000000000000000000000000000000D4 :100C200000000000000000000000000000000000C4 -:100C30000000000000000000900000000000000024 +:100C300000000000000000000000000000000000B4 :100C400000000000000000000000000000000000A4 :100C50000000000000000000000000000000000094 -:100C6000080000000000000000000000000000007C +:100C60000000000000000000000000000000000084 :100C70000000000000000000000000000000000074 :100C80000000000000000000000000000000000064 :100C90000000000000000000000000000000000054 :100CA0000000000000000000000000000000000044 :100CB0000000000000000000000000000000000034 -:100CC0000000000000000000000000000000000024 -:100CD000000000000000000000000800000000000C -:100CE00000001000000000000000000000000000F4 -:100CF0000000820000000000A000000000000000D2 -:100D000000000000000000000000A0000000000043 -:100D100000000000080000000000000000000000CB +:100CC0008200820000000000000000000800040014 +:100CD0000000000000000000000000000000000014 +:100CE0000000000000000000000000000000000004 +:100CF00000000000000000000000000000000000F4 +:100D000000000000000000000000000000000000E3 +:100D100000000000000000000000000000000000D3 :100D200000000000000000000000000000000000C3 :100D300000000000000000000000000000000000B3 -:100D4000000000002100100000000000000008006A -:100D50000000000000000000000000001000000083 -:100D60000000410010000800000000000300000027 +:100D400010000000400041001000100000000000F2 +:100D5000000000000000080010000000000000007B +:100D60000300210040000800000000000000000017 :100D70000000000000000000000000000000000073 -:100D800000001000410003001000000000000000FF +:100D80000000000000000000000000000000000063 :100D90000000000000000000000000000000000053 -:100DA00000000800410003000800000000004100AE +:100DA0000000000000000000000000000000000043 :100DB0000000000000000000000000000000000033 -:100DC0000000000000000000000000000000000023 -:100DD0000000000000000000000000000000020011 -:100DE0000000000000000000000000000000000003 -:100DF00000000000000000000000000000001000E3 -:100E000000000000080000000000000000000000DA +:100DC00000008200000000000000000000000000A1 +:100DD000000000000000000000000000080000000B +:100DE0000000C00000000000000000000000000043 +:100DF00000000000000000000000000000000000F3 +:100E000000000000000000000000000000000000E2 :100E100000000000000000000000000000000000D2 -:100E200008000800000000000000000000000000B2 +:100E200000000000000000000000000000000000C2 :100E300000000000000000000000000000000000B2 :100E400000000000000000000000000000000000A2 :100E50000000000000000000000000000000000092 @@ -24818,21 +24818,21 @@ :100EA0000000000000000000000000000000000042 :100EB0000000000000000000000000000000000032 :100EC0000000000000000000000000000000000022 -:100ED0000000000000000000000000000000000012 -:100EE0000000000000000000000000000000000002 -:100EF00000000000000000000800000000000000EA -:100F000000000000000000000000080000000000D9 +:100ED000000000000000000000000000000008000A +:100EE00040000000000000000000000000000000C2 +:100EF00000000000000000000000000000000000F2 +:100F000000000000000000000000000000000000E1 :100F100000000000000000000000000000000000D1 :100F200000000000000000000000000000000000C1 :100F300000000000000000000000000000000000B1 -:100F400000000000000000000000000000000000A1 -:100F50000000000000002000000000000000000071 -:100F60000000000000000000000000000000110070 -:100F70000000000000000000000000000000000071 +:100F40000000000000000000000000000000110090 +:100F50000020000000000000080003000300000063 +:100F60000400000008000300210000000000410010 +:100F70000000000000000000000000000020000051 :100F80000000000000000000000000000000000061 -:100F9000410000000000000000000000050000000B +:100F90000000000000000000000000000000000051 :100FA0000000000000000000000000000000000041 -:100FB0000000000000000000090000000000000226 +:100FB0000000000000000000000000000000000031 :100FC0000000000000000000000000000000000021 :100FD0000000000000000000000000000000000011 :100FE0000000000000000000000000000000000001 @@ -24980,79 +24980,79 @@ :1018C0000000000000000000000000000000000018 :1018D0000000000000000000000000000000000008 :1018E00000000000000000000000000000000000F8 -:1018F0000000880000002000200088002000C000B8 -:101900000000200000000000200000000000000097 -:101910000000200000002000200020002000200007 -:101920000000200000008800000000000003880084 -:1019300000008800200000002000880000008800CF -:101940000000000000000000000000000180000016 +:1018F00000000000200000000000000500000000C3 +:101900000000000000000000008400000000000053 +:1019100000000020000000000000000000000000A7 +:1019200000000000000000000180018800010000AC +:1019300000000000000000000000000000000000A7 +:101940000000000000000000000000000000000097 :101950000000000000000000000000000000000087 :101960000000000000000000000000000000000077 -:101970000000009000000002000000C0000000C055 -:1019800000000000000000840000000000000000D3 -:1019900000000000000000820000000000000000C5 -:1019A0000000000000000000000000000000000037 +:101970000000002000000000000000000000000047 +:101980000000000000000000000000210000000036 +:101990000000000000000000000000000000000047 +:1019A00000000000000000000000202008210000CE :1019B0000000000000000000000000000000000027 -:1019C00000000000000020000020000000002008AF -:1019D0000000000000000000000005000000000002 +:1019C0000000000000000000000000000000000017 +:1019D0000000000000000000000000000000000007 :1019E00000000000000000000000000000000000F7 :1019F00000000000000000000000000000000000E7 -:101A00000000000000000000000000000000008056 +:101A000000000000000000000000000000081000BE :101A100000000000000000000000000000000000C6 -:101A20000000000000000000000000000000008036 +:101A200000000000000000000000000000800082B4 :101A300000000000000000000000000000000000A6 :101A40000000000000000000000000000000000096 :101A50000000000000000000000000000000000086 :101A60000000000000000000000000000000000076 :101A70000000000000000000200000000000000046 -:101A8000000800000000000000000000000000004E -:101A90000008000000000000000000000900000035 -:101AA00000840000000000000000000000000000B2 -:101AB000000800000000000000000000000000001E -:101AC00000000000200000000000000000000000F6 +:101A8000000000000000000000000000000000094D +:101A900080080000000000000000000000000000BE +:101AA000000000000000000000000000000000082E +:101AB0000005000000000000000000000000000021 +:101AC0000000000000000000000000000000000016 :101AD0000000000000000000000000000000000006 :101AE00000000000000000000000000000000000F6 -:101AF00000000000000300000000000000210009B9 -:101B000090210009000000000000000000210000FA -:101B1000002100040000000000000000000490000C -:101B20000009900008000000000000000000000014 -:101B300000000004000000000000000000000000A1 -:101B4000000000000000080000000000000000008D +:101AF00000000000000000000000000000000000E6 +:101B000000000000000000000000000000000000D5 +:101B1000000008A00000000000000000000000001D +:101B200000000000000000000000000000000000B5 +:101B300000000000000000000000000000000000A5 +:101B40000000000000000000000000000000000095 :101B50000000000000000000000000000000000085 -:101B600000000000000000000000880000000000ED -:101B70000000000010000000000000000000000055 +:101B60000000000000000000000000000000000075 +:101B70000000000000000000000000000000000065 :101B80000000000000000000000000000000000055 -:101B9000000000000009000000000000000000003C +:101B90000000000000110000000000000000000034 :101BA0000000000000000000000000000000000035 -:101BB0000000000000010000000000000000000024 -:101BC0000000000003000000000000000000000012 +:101BB0000000000000000000000000000000000025 +:101BC0000000000000000000000000000000000015 :101BD0000000000000000000000000000000000005 :101BE00000000000000000000000000000000000F5 -:101BF0000000000000008000820000008200080059 -:101C0000000000000000840082000000820000004C -:101C100000000800080082008200000082004000EE -:101C2000000082000000820082000000820082002A -:101C300000008400080082000000C0000000820054 -:101C4000820000008200840082000000000000008A -:101C5000820000008200820082000800000008006C +:101BF000000000000000000082008200820000005F +:101C000000000000000000000000000000000000D4 +:101C100000000200000002844000000000000000FC +:101C20000000000000000000840000000000000030 +:101C300000000000000000000000000000000000A4 +:101C40000000000000000000000000000000000094 +:101C50000000000000000000000000000000000084 :101C60000000000000000000000000000000000074 :101C70000000000000000000000000000000000064 -:101C8000000000000000000021000000000008002B -:101C90000000000000000000000000000000000044 -:101CA00000000000000000000000400000000000F4 -:101CB000080000000000000000000000000000001C +:101C80000000000000000000000000000000000054 +:101C90000000000000000000000300000000000041 +:101CA0000000000000000000000000000000000034 +:101CB0000000000000000000000000000000000024 :101CC0000000000000000000000000000000000014 -:101CD00041000800000000000000000000000000BB +:101CD0000000000000000000000000000000000004 :101CE00000000000000000000000000000000000F4 -:101CF0000000000000000000000000009000000054 -:101D0000000082000000820082000021000000002C -:101D1000000400000000A00000000010C00000004F -:101D2000000000000000820082000800000008009F -:101D30000000000000008800000000100003A00068 -:101D400000000000000000001000080008008200F1 -:101D50000000000000000000A00000000000C00023 -:101D60000000000000000000A000080000000800C3 -:101D700000000000000000000000000000800000E3 +:101CF000000000000000000000000000A000000044 +:101D00000000000000000000820000000800000049 +:101D1000000000000000080000000800A000000013 +:101D2000C000000084000000A000000000000000CF +:101D300000000000000000000000000000000000A3 +:101D40000000000000000000000000000000000093 +:101D50000000000000000000000000000000000083 +:101D60000000000000000000000000000000000073 +:101D70000000000000000000000000000000000063 :101D80000000000000000000000000000000000053 :101D90000000000000000000000000000000000043 :101DA0000000000000000000000000000000000033 @@ -25060,14 +25060,14 @@ :101DC0000000000000000000000000000000000013 :101DD0000000000000000000000000000000000003 :101DE00000000000000000000000000000000000F3 -:101DF00000000000000000000000000000000004DF -:101E0000000000000800C00000000800A000000062 -:101E100000008400000000000000000000000040FE -:101E20000000000000000800000008000000900012 -:101E30000000000000000002C000000000000000E0 -:101E400000008200000000000800A0000800000060 -:101E500090000000080000000000000008000000E2 -:101E600000000000A00000000800000008000000C2 +:101DF00000000000000000000000000000000000E3 +:101E000000000400A000A020820082000800000062 +:101E10000000000000000000900000000000000032 +:101E200000000000040000000800C00000000000E6 +:101E300000000000000000000000000000000000A2 +:101E40000000000000000000000000000000000092 +:101E50000000000000000000000000000000000082 +:101E60000000000000000000000000000000000072 :101E70000000000000000000000000000000000062 :101E80000000000000000000000000000000000052 :101E90000000000000000000000000000000000042 @@ -25077,79 +25077,79 @@ :101ED0000000000000000000000000000000000002 :101EE00000000000000000000000000000000000F2 :101EF00000000000000000000000000000000000E2 -:101F00000000000000010001000100C0000100010C -:101F100000C001030000010100040008000190015D -:101F200000C1000000010001000100C10101000129 -:101F300000C000030000890100200004000190019E -:101F400000C10000000000010001000100C000010C -:101F5000000100C100030000030100200004000193 -:101F6000000100C1000000010001000100C00001EB -:101F7000000100C0000300010101008400200001F5 -:101F8000000100C100000041004100410088004103 -:101F90000041009041C100111041008000800041CB -:101FA00000410083000000410041004100820841DF -:101FB000004100C105C10010104100000080004137 -:101FC000004100830000000000410041004100C0CA -:101FD00000410041008505C10010904100000080D3 -:101FE000004100410085000000410041004100C067 -:101FF0000041004100A005C1004010410000000068 -:102000000041004100850000410003000000008005 -:102010004100900000000200C00083800000A0008A -:102020004100C100008080004100030000000080EA -:102030004100900000000900C00083800000830080 -:102040004100C1000080800000004100030000004A -:1020500000804100C000000020008500A0000000BA -:1020600083004100C1000080808041000300000027 -:1020700000804100C00000002000C000830000007C -:1020800082004100C100008080800100010000004A -:1020900000C00100C0000000010002000410004068 -:1020A000C1008300C1000082820001000100000025 -:1020B00000C00100C0000000000002000410004049 -:1020C000C1002100C1000082820000000100010067 -:1020D000000000C00100C0000000009002000510D8 -:1020E0000040C1002100C100008402020100010083 -:1020F000000000C00100C000000000000200042039 -:102100000040C1002100C1000084020200C00001A3 -:10211000C0C100000000000100C088400091000123 -:1021200000C10000000000010000000000C000012C -:10213000C0C100000000000100C182410091020105 -:1021400000C100000000000100000000000000C00D -:102150000001C0C100000000000100C082410091E8 -:10216000020100C10000000000010000000000C0EA -:102170000001C0C100000000000100C08291009178 -:10218000000100C10000000000010000000000800C -:10219000004180C1000000000041008200050041B4 -:1021A000004100C10000000000410041000000802B -:1021B000004180C100000000004100888082004191 -:1021C000804100C10000000000410041000000000B -:1021D0000080004180C100000000004100A080821A -:1021E0000041804100C100000000004100030000E8 -:1021F0000080004180C100000000004100C080025A -:102200000041004100C10000000000410003000047 -:10221000C100800080C1000041028008A000410090 -:10222000C1410000804000004110000080004100DA -:10223000C100800080C100004108801040004100C2 -:10224000C1410000800800004110000080004100F2 -:102250000000C100800080C100004100001040006B -:102260004100C141000080080000410000008000E2 -:102270004100C100800080C100004100001040000A -:102280004100C141000080200000410000008000AA -:102290004100C1004000C0C10000010020018200D7 -:1022A0000100C1839000C000000001010000C000D7 -:1022B0000100C1004000C0C10000010020018200F7 -:1022C0000100C1839000C000000001010000C000B7 -:1022D00001000000C1004000C0C1000001008201F7 -:1022E00082000100C1839000C000000001000000D6 -:1022F000C0000100C1004000C0C100000100820117 -:1023000082000100C1839000C001000001000000B4 -:10231000C0000100000000000000004200000000BA -:10232000000000068112008807004800000000003D -:10233000000000000000000000000042000000005B -:102340000000000081120088070048000000000023 -:10235000000000000000000000000000004200003B -:102360000000000000008112008807004800000003 -:10237000000000000000000000000000004200001B -:1023800000000000000081120088070048000000E3 +:101F000000000000000000000000000000000000D1 +:101F1000000001820100C1000082C0820000C000F8 +:101F200000010000000000000000000101000000AE +:101F3000000000820000C0000088C0820000C000D5 +:101F40000001000000000000000000000000000090 +:101F50000000000000000000000000000000000081 +:101F60000000000000000000000000000000000071 +:101F70000000000000000000000000000000000061 +:101F80000000000000000000000000000040000011 +:101F90000000000504002040820000008080000056 +:101FA000800000030000000000000000002004008A +:101FB0000000004103000005850000008080000053 +:101FC000800000030000000000000000000000008E +:101FD0000000000000000000000000000000000001 +:101FE00000000000000000000000000000000000F1 +:101FF00000000000000000000000000000000000E1 +:1020000000000000000000000000020000000000CE +:102010000000020000001000820021000000030008 +:102020008000000000A0800300000200000000000B +:1020300000000200000020000800830000000300F0 +:102040000000000000808010000000000000000080 +:102050000000000000000000000000000000000080 +:102060000000000000000000000000000000000070 +:102070000000000000000000000000000000000060 +:10208000000000000000000000000000010000004F +:10209000000000000100000001000500A040000059 +:1020A00001004000000000C18200000001000000AB +:1020B00000000000010000000100840003C00000D7 +:1020C00001208400000000C0820100000000000028 +:1020D0000000000000000000000000000000000000 +:1020E00000000000000000000000000000000000F0 +:1020F00000000000000000000000000000000000E0 +:1021000000000000000000000000000000000000CF +:10211000000000000000000000002000004000005F +:10212000410000000000000000000000000000006E +:10213000000000000000000000014000004000001E +:10214000030000000000000000000000000000008C +:10215000000000000000000000000000000000007F +:10216000000000000000000000000000000000006F +:10217000000000000000000000000000000000005F +:10218000000000000000000000000000000000004F +:1021900000000000000000000000000300050080B7 +:1021A00000004100000000000000004100000000AD +:1021B00000000000000000000000000200200000FD +:1021C0000000C1000000000000000041000000000D +:1021D00000000000000000000000000000000000FF +:1021E00000000000000000000000000000000000EF +:1021F00000000000000000000000000000000000DF +:1022000000000000000000000000000000000000CE +:102210000000000200830000000080002000000099 +:1022200000C1800000050000004100000000032004 +:102230000000000200830000004000009000000049 +:1022400000020000004100000041002000000340A7 +:10225000000000000000000000000000000000007E +:10226000000000000000000000000000000000006E +:10227000000000000000000000000000000000005E +:10228000000000000000000000000000000000004E +:102290000000000082010083000000000400C10073 +:1022A0000000000304000000000000010000000026 +:1022B00000090000820100830000000020004100AE +:1022C000000000912000000000000001000000005C +:1022D00001200000000000000000000000000000DD +:1022E00000000000000000000000000000000000EE +:1022F00000000000000000000000000000000000DE +:1023000000000000000000000000000000000000CD +:1023100000000000000000000000000000000000BD +:1023200000000000811200E0800048420000000030 +:102330000000484200000000000000000000000013 +:1023400000000000411200E02200484200000000AE +:1023500000004842000000000000000000000000F3 +:10236000000000000000000000000000000000006D +:10237000000000000000000000000000000000005D +:10238000000000000000000000000000000000004D :10239000000000000000000000000000000000003D :1023A000000000000000000000000000000000002D :1023B000000000000000000000000000000000001D @@ -25170,74 +25170,74 @@ :1024A000000000000000000000000000000000002C :1024B0000000000000000000DEAE757B00000000A0 :1024C000000000000000000000000000000000000C -:1024D0000000000000000000DEAE0000757B000080 +:1024D0000000000000000000DEAE00000000000070 :1024E00000000000000000000000000000000000EC -:1024F00000000000000000000000DEAE757B000060 +:1024F00000000000000000000000000000000000DC :1025000000000000000000000000000000000000CB -:1025100000000000000000000000DEAE60C6030006 -:102520000000000000000031E0000000000000009A -:102530000C0000000000000000C0630660C603003D -:102540000000000000000031E0000000000000007A -:102550000C0000000000000000C06306000060C620 -:1025600003000000000000000031E0000000000057 -:1025700000000C0000000000000000C0630660C600 -:1025800003000000000000000031E0000000000037 -:1025900000000C0000000000000000C06306000006 -:1025A00000000000200000001000000010002000CB -:1025B00020000000200020000000000000000400B7 -:1025C000000000002000000020001020000020007B -:1025D0002000000000000000000000008800000053 -:1025E0002000000000008800000020000000000023 -:1025F0002000200000008800000000000000000013 +:1025100000000000000000000000000061260340F1 +:102520000000000000000230A000000000000000D9 +:102530000C4000000000000002C0648661260340D9 +:102540000000000000000230A000000000000000B9 +:102550000C4000000000000002C064860000000083 +:10256000000000000000000000000000000000006B +:10257000000000000000000000000000000000005B +:10258000000000000000000000000000000000004B +:10259000000000000000000000000000000020001B +:1025A00000002000200000000000000000000000EB +:1025B00000002000000020000000000000000000DB +:1025C000000000000000000000000000000000000B +:1025D00000000000000000000000000000000000FB +:1025E00000000000000000000000000000000000EB +:1025F00000000000000000000000000000000000DB :1026000000000000000000000000000000000000CA :1026100000000000000000000000000000000000BA -:102620000000000000000000000000000000410069 -:102630000000000000000500000000000000000095 -:10264000000000000000000000000000000020006A -:102650000000410000000000050000000000000034 +:10262000000000000000000000202020002000002A +:10263000000000000000000000200020000000005A +:10264000000000000000000000000000000000008A +:10265000000000000000000000000000000000007A :10266000000000000000000000000000000000006A :10267000000000000000000000000000000000005A :10268000000000000000000000000000000000004A :10269000000000000000000000000000000000003A :1026A000000000000000000000000000000000002A -:1026B000000000000000000000000000000000001A +:1026B0000000000000000000000900000000000011 :1026C000000000000000000000000000000000000A :1026D00000000000000000000000000000000000FA :1026E00000000000000000000000000000000000EA :1026F00000000000000000000000000000000000DA :1027000000000000000000000000000000000000C9 -:1027100000000000020000000000000002000000B5 -:102720000000020000000000000000000090000017 -:102730000000000000840000000000000000008491 +:1027100000000000000000000000000000000000B9 +:1027200000000000000000000000000000000000A9 +:102730000000000000000000000000000008000091 :102740000000000000000000000000000000000089 -:102750000000000000000000000000000000000079 +:102750000000000000000000000000000008000071 :102760000000000000000000000000000000000069 -:102770000000000000000000000000000000000059 +:102770000000000000000000000000000000000851 :102780000000000000000000000000000000000049 -:102790000000000000000000000000000000000039 -:1027A0000000000000000000000000090000000020 +:1027900000000000000000000000000000000040F9 +:1027A0000000000000000000000000000000000029 :1027B0000000000000000000000000000000000019 -:1027C00000000000000000210000000000000000E8 -:1027D00000200000000000110000000000000000C8 +:1027C0000000000000000000000000000000000009 +:1027D00000000000000000000000000000000000F9 :1027E00000000000000000000000000000000000E9 :1027F00000000000000000000000000000000000D9 :1028000000000000000000000000000000000000C8 -:1028100000110000000000000000000000000000A7 -:102820000000000000000000000000000000110097 -:10283000000040000000000000A000840000000034 -:102840000000000000000000000000000000000088 -:102850000000000003000000039009000000008455 -:102860000000000000000000000000000000410027 -:102870002100000000000300000003000000000031 -:10288000008400A000000000000000000000210003 -:1028900021000000090000002100030000000000EA +:1028100000000000000000000000000000000000B8 +:1028200000000000000000000000000000000300A5 +:102830000000000000000000000000000000000098 +:102840000000000000000000410000002100210005 +:102850002100000003002100000000000300000030 +:102860000800000000000000000000000000000060 +:102870000000000000000000000000000000000058 +:102880000000000000000000000000000000000048 +:102890000000000000000000000000000000000038 :1028A0000000000000000000000000000000000028 -:1028B0000800000000000000000000000000000010 -:1028C00000000000000040000000040000000000C4 -:1028D000080000000000820004000000000000006A -:1028E0000800000000008200000000000800000056 -:1028F00000000800000000000800000000000000C8 -:10290000000000000000000040000000080000007F +:1028B0000000000000000800080000000000000008 +:1028C00000000000000008000000000000000800F8 +:1028D00000000000000000000000000000000000F8 +:1028E00000000000000000000000000000000000E8 +:1028F00000000000000000000000000000000000D8 +:1029000000000000000000000000000000000000C7 :1029100000000000000000000000000000000000B7 :1029200000000000000000000000000000000000A7 :102930000000000000000000000000000000000097 @@ -25249,28 +25249,28 @@ :102990000000000000000000000000000000000037 :1029A0000000000000000000000000000000000027 :1029B0000000000000000000000000000000000017 -:1029C0000000000000000000000000000000000007 +:1029C00000000000000000000800000000000000FF :1029D00000000000000000000000000000000000F7 -:1029E0000000000000000000000000008400000063 +:1029E0000000008000000000000000000000000067 :1029F00000000000000000000000000000000000D7 :102A000000000000000000000000000000000000C6 :102A100000000000000000000000000000000000B6 :102A200000000000000000000000000000000000A6 -:102A30000000000000000000002000000020000056 -:102A4000080008000000030008000000000000006B -:102A500000000000000000000000082000000090BE -:102A6000080008000020030008000000000000002B -:102A70000000000000000000000000000800080046 -:102A80000000080008000000030000000000000033 -:102A9000000000000000000000000000080003002B -:102AA000000008000800000008000000000000000E +:102A30000000000000002100000000000300000072 +:102A40000000000000000000000000000000000086 +:102A50000000000000000000000000000500000071 +:102A600009000000001000880000000021000000A4 +:102A70000000000000000000000000000000000056 +:102A80000000000000000000000000000000000046 +:102A90000000000000000000000000000000000036 +:102AA0000000000000000000000000000000000026 :102AB0000000000000000000000000000000000016 -:102AC00000000000000000000000000000210000E5 -:102AD00000000000000000000000000000000000F6 -:102AE00000000000000000000000000000000000E6 -:102AF0008202000000000000000000000000000052 +:102AC0000000000000000000000000000000820084 +:102AD0008200080000000000080000000000000064 +:102AE00000000000000008000000000000000000DE +:102AF00000000000000000000000000000000000D6 :102B000000000000000000000000000000000000C5 -:102B10008200080200000000000008000000000021 +:102B100000000000000000000000000000000000B5 :102B200000000000000000000000000000000000A5 :102B30000000000000000000000000000000000095 :102B40000000000000000000000000000000000085 @@ -25434,58 +25434,58 @@ :10352000000000000000000000000000000000009B :10353000000000000000000000000000000000008B :10354000000000000000000000000000000000007B -:10355000000000000000000000000000000000006B -:10356000000000000000000000000000000000005B +:10355000000000000000000000000000C0000000AB +:10356000000000000000000000000000200000003B :103570000000040000000000000000000000000047 :10358000000000000000000000000000000000003B -:10359000000020000000000000000000000100000A +:10359000000000000000000000000000000000002B :1035A000000000000000000000000000000000001B :1035B000000000000000000000000000000000000B :1035C00000000000000000000000000000000000FB :1035D00000000000000000000000000000000000EB -:1035E00000000000000000000000000000000000DB -:1035F00000000000000000000000000000000000CB +:1035E00000000000000000000000000000200000BB +:1035F00000000000000000000020000000000000AB :1036000000000000000000000000000000000000BA -:1036100000000000000000000400000000000000A6 +:1036100000000000000000000000000000000000AA :10362000000000000000000000000000000000009A :10363000000000000000000000000000000000008A :10364000000000000000000000000000000000007A :10365000000000000000000000000000000000006A -:10366000000000000000000000000000000000005A -:10367000000000000000000000000000000000004A -:103680000100000000000000000000000000000039 +:10366000000000000000000000000000001000004A +:103670000000000000000000000000000000004109 +:10368000000000000000000000000000000000003A :10369000000000000000000000000000000000002A :1036A000000000000000000000000000000000001A :1036B000000000000000000000000000000000000A -:1036C00000000000000000000000000000000000FA +:1036C000004000000000000000400000000000007A :1036D00000000000000000000000000000000000EA :1036E00000000000000000000000000000000000DA -:1036F00000000000000000000000000000000000CA -:1037000000000200000000000000000000000000B7 -:1037100000000000000000000000000000000000A9 +:1036F00000080000000000000000000000000000C2 +:1037000000000000000000000000000000000000B9 +:103710000010000000000000000000000000000099 :103720000000000000000000000000000000000099 :103730000000000000000000000000000000000089 :103740000000000000000000000000000000000079 :103750000000000000000000000000000000000069 -:1037600000000000000000000000900000000000C9 -:103770000000000000000000000008000000000041 -:1037800000000000000000000000000000009000A9 -:103790000000000000000000000008000000000021 +:103760000000000000000000000000000000000059 +:103770000000000000000000000000000000000049 +:103780000000000008000000000000000000000031 +:103790000000000008000000000000000000000021 :1037A0000000000000000000000000000000000019 -:1037B0000000000000000000000000000800000001 +:1037B0000000000000000000000000000000000009 :1037C00000000000000000000000000000000000F9 :1037D00000000000000000000000000000000000E9 -:1037E0000000000000000000000000881100000040 +:1037E00000000000000000000000000000000000D9 :1037F00000000000000000000000000000000000C9 -:1038000000000000000000000000000000000000B8 -:103810001100000000000000000000001100000086 +:103800000000000000000000000021000000000097 +:1038100000000000000000000000000000000000A8 :103820000000000000000000000000000000000098 :103830000000000000000000000000000000000088 :103840000000000000000000000000000000000078 :103850000000000000000000000000000000000068 :103860000000000000000000000000000000000058 :103870000000000000000000000000000000000048 -:103880000000000000000000000000000000010037 +:103880000000000000000000000000000000000038 :103890000000000000000000000000000000000028 :1038A0000000000000000000000000000000000018 :1038B0000000000000000000000000000000000008 @@ -25494,7 +25494,7 @@ :1038E00000000000000000000000000000000000D8 :1038F00000000000000000000000000000000000C8 :1039000000000000000000000000000000000000B7 -:1039100004000000000000000000000000000000A3 +:1039100000000000000000000000000000000000A7 :103920000000000000000000000000000000000097 :103930000000000000000000000000000000000087 :103940000000000000000000000000000000000077 @@ -25502,27 +25502,27 @@ :103960000000000000000000000000000000000057 :103970000000000000000000000000000000000047 :103980000000000000000000000000000000000037 -:103990000020000000000000000000000000000007 +:103990000000000000000000000000000000000027 :1039A0000000000000000000000000000000000017 :1039B0000000000000000000000000000000000007 :1039C00000000000000000000000000000000000F7 :1039D00000000000000000000000000000000000E7 :1039E00000000000000000000000000000000000D7 -:1039F0000000000000900000000000000000000037 +:1039F00000000000000000000000000000000000C7 :103A000000000000000000000000000000000000B6 -:103A10000000000100000000000000000000110094 -:103A20000000000011000000000000000000000085 +:103A10000000000000000000000000000000009016 +:103A2000000000000800000000000000000000008E :103A30000000000000000000000000000000000086 :103A40000000000000000000000000000000000076 -:103A50000000000000000000210000000000000045 +:103A50000000000000000000000000000000000066 :103A60000000000000000000000000000000000056 :103A70000000000000000000000000000000000046 -:103A80000000000000000000000000000000000036 +:103A8000000000000000000000000000080000002E :103A90000000000000000000000000000000000026 :103AA0000000000000000000000000000000000016 :103AB0000000000000000000000000000000000006 :103AC00000000000000000000000000000000000F6 -:103AD00000000400000000000000000000000000E2 +:103AD00000000000000000000000000000000000E6 :103AE00000000000000000000000000000000000D6 :103AF00000000000000000000000000000000000C6 :103B000000000000000000000000000000000000B5 @@ -25534,7 +25534,7 @@ :103B60000000000000000000000000000000000055 :103B70000000000000000000000000000000000045 :103B80000000000000000000000000000000000035 -:103B90000000000000009000000000000000000095 +:103B90000000000000000000000000000000000025 :103BA0000000000000000000000000000000000015 :103BB0000000000000000000000000000000000005 :103BC00000000000000000000000000000000000F5 @@ -25542,7 +25542,7 @@ :103BE00000000000000000000000000000000000D5 :103BF00000000000000000000000000000000000C5 :103C000000000000000000000000000000000000B4 -:103C10000000000000001100800000000000000013 +:103C100000000000000000000000000000000000A4 :103C20000000000000000000000000000000000094 :103C30000000000000000000000000000000000084 :103C40000000000000000000000000000000000074 @@ -25550,7 +25550,7 @@ :103C60000000000000000000000000000000000054 :103C70000000000000000000000000000000000044 :103C80000000000000000000000000000000000034 -:103C900000000000000000000000008000000000A4 +:103C90000000000000000000000000000000000024 :103CA0000000000000000000000000000000000014 :103CB0000000000000000000000000000000000004 :103CC00000000000000000000000000000000000F4 @@ -25558,24 +25558,24 @@ :103CE00000000000000000000000000000000000D4 :103CF00000000000000000000000000000000000C4 :103D000000000000000000000000000000000000B3 -:103D10000000000000000000000000000020000083 -:103D20000020000000000000000000000000000073 +:103D100000000000000000000000000000000000A3 +:103D20000000000000000000000000000000000093 :103D30000000000000000000000000000000000083 :103D40000000000000000000000000000000000073 :103D50000000000000000000000000000000000063 :103D60000000000000000000000000000000000053 :103D70000000000000000000000000000000000043 :103D80000000000000000000000000000000000033 -:103D9000000000000000000000000000010000889A -:103DA000880000000000000000000000000000008B +:103D90000000000000000000000000000000000023 +:103DA0000000000000000000000000000000000013 :103DB0000000000000000000000000000000000003 :103DC00000000000000000000000000000000000F3 :103DD00000000000000000000000000000000000E3 :103DE00000000000000000000000000000000000D3 :103DF00000000000000000000000000000000000C3 :103E000000000000000000000000000000000000B2 -:103E10000000000000000000000000000000410061 -:103E20000080000000000000000000000000000012 +:103E100000000000000000000000000000000000A2 +:103E20000000000000000000000000000000000092 :103E30000000000000000000000000000000000082 :103E40000000000000000000000000000000000072 :103E50000000000000000000000000000000000062 @@ -25583,7 +25583,7 @@ :103E70000000000000000000000000000000000042 :103E80000000000000000000000000000000000032 :103E90000000000000000000000000000000000022 -:103EA0000011000000800000000000000000000081 +:103EA0000000000000000000000000000000000012 :103EB0000000000000000000000000000000000002 :103EC00000000000000000000000000000000000F2 :103ED00000000000000000000000000000000000E2 @@ -25591,7 +25591,7 @@ :103EF00000000000000000000000000000000000C2 :103F000000000000000000000000000000000000B1 :103F100000000000000000000000000000000000A1 -:103F20000000000100000040000000000000000050 +:103F20000000000000000000000000000000000091 :103F30000000000000000000000000000000000081 :103F40000000000000000000000000000000000071 :103F50000000000000000000000000000000000061 @@ -25599,7 +25599,7 @@ :103F70000000000000000000000000000000000041 :103F80000000000000000000000000000000000031 :103F90000000000000000000000000000000000021 -:103FA0000000000000000000070082000000000088 +:103FA0000000000000000000000000000000000011 :103FB0000000000000000000000000000000000001 :103FC00000000000000000000000000000000000F1 :103FD00000000000000000000000000000000000E1 @@ -25607,7 +25607,7 @@ :103FF00000000000000000000000000000000000C1 :1040000000000000000000000000000000000000B0 :1040100000000000000000000000000000000000A0 -:1040200000000000000000000000F0F000000000B0 +:104020000000000000000000000000000000000090 :104030000000000000000000000000000000000080 :104040000000000000000000000000000000000070 :104050000000000000000000000000000000000060 @@ -25615,7 +25615,7 @@ :104070000000000000000000000000000000000040 :104080000000000000000000000000000000000030 :104090000000000000000000000000000000000020 -:1040A000000000000000000000000000F0F0000030 +:1040A0000000000000000000000000000000000010 :1040B0000000000000000000000000000000000000 :1040C00000000000000000000000000000000000F0 :1040D00000000000000000000000000000000000E0 @@ -25624,7 +25624,7 @@ :1041000000000000000000000000000000000000AF :10411000000000000000000000000000000000009F :10412000000000000000000000000000000000008F -:10413000FFFF000000000000000000000000000081 +:10413000000000000000000000000000000000007F :10414000000000000000000000000000000000006F :10415000000000000000000000000000000000005F :10416000000000000000000000000000000000004F @@ -25639,8 +25639,8 @@ :1041F00000000000000000000000000000000000BF :1042000000000000000000000000000000000000AE :10421000000000000000000000000000000000009E -:104220000000000000000000000000000000050089 -:104230000A00054000A80000000000000000000087 +:10422000000000000000000000000000000000008E +:10423000000000000000000000000000000000007E :10424000000000000000000000000000000000006E :10425000000000000000000000000000000000005E :10426000000000000000000000000000000000004E @@ -25679,15 +25679,15 @@ :10447000000000000000000000000000000000003C :10448000000000000000000000000000000000002C :10449000000000000000000000000000000000001C -:1044A000000200000000000000000000000000000A +:1044A00000000000000000002000000000000000EC :1044B00000000000000000000000000000000000FC :1044C00000000000000000000000000000000000EC -:1044D00000000000000000000001000000000000DB +:1044D00000000000000000000000000000000000DC :1044E00000000000000000000000000000000000CC :1044F00000000000000000000000000000000000BC :1045000000000000000000000000000000000000AB :10451000000000000000000000000000000000009B -:104520000000000000000000000000000002000089 +:10452000000000000000000000200000000000006B :10453000000000000000000000000000000000007B :10454000000000000000000000000000000000006B :10455000000000000000000000000000000000005B @@ -25695,23 +25695,23 @@ :10457000000000000000000000000000000000003B :10458000000000000000000000000000000000002B :10459000000000000000000000000000000000001B -:1045A000000000000100000000000000000000000A +:1045A00000000010000000000000000000000000FB :1045B00000000000000000000000000000000000FB :1045C00000000000000000000000000000000000EB :1045D00000000000000000000000000000000000DB :1045E00000000000000000000000000000000000CB -:1045F00000000000000000000000000000000000BB +:1045F00000000000000000000000000000000200B9 :1046000000000000000000000000000000000000AA -:10461000000000000000000000000000000000009A -:104620000000000000000200000000000000000088 -:10463000000000000000000000000000000000007A +:104610000000000000000200000000000000000098 +:10462000000000000000000000000000000000008A +:104630000000000000000000000800000000000072 :10464000000000000000000000000000000000006A -:10465000000000000000000000000000000000005A +:104650000000000000000000000800000000000052 :10466000000000000000000000000000000000004A -:10467000000000000000000000000000000000003A +:104670000000000000000000000000080000000032 :10468000000000000000000000000000000000002A -:10469000000000000000000000000000000000001A -:1046A0000000000000000000000004000000000006 +:1046900000000000000000000000004000000200D8 +:1046A000000000000000000000000000000000000A :1046B00000000000000000000000000000000000FA :1046C00000000000000000000000000000000000EA :1046D00000000000000000000000000000000000DA @@ -25721,14 +25721,14 @@ :104710000000000000000000000000000000000099 :104720000000000000000000000000000000000089 :104730000000000000000000000000000000000079 -:104740004100000000000000000000000000000028 +:104740000000000000000000000000000000000069 :104750000000000000000000000000000000000059 :104760000000000000000000000000000000000049 :104770000000000000000000000000000000000039 :104780000000000000000000000000000000000029 :104790000000000000000000000000000000000019 :1047A0000000000000000000000000000000000009 -:1047B00000000100000000000000000000000000F8 +:1047B00000000000000000000000000000000000F9 :1047C00000000000000000000000000000000000E9 :1047D00000000000000000000000000000000000D9 :1047E00000000000000000000000000000000000C9 @@ -25736,15 +25736,15 @@ :1048000000000000000000000000000000000000A8 :104810000000000000000000000000000000000098 :104820000000000000000000000000000000000088 -:104830000000000004000000000000000000000074 +:104830000000000000000000000000000000000078 :104840000000000000000000000000000000000068 :104850000000000000000000000000000000000058 :104860000000000000000000000000000000000048 :104870000000000000000000000000000000000038 :104880000000000000000000000000000000000028 :104890000000000000000000000000000000000018 -:1048A0000000000000000000080000000000000000 -:1048B0000000A00000200000C00000000000000078 +:1048A0000000000000000000000000000000000008 +:1048B00000000000000000000000000000000000F8 :1048C00000000000000000000000000000000000E8 :1048D00000000000000000000000000000000000D8 :1048E00000000000000000000000000000000000C8 @@ -25752,17 +25752,17 @@ :1049000000000000000000000000000000000000A7 :104910000000000000000000000000000000000097 :104920000000000000000000000000000000000087 -:10493000000400000000000104000000000000006E +:104930000000000000000000000000000000000077 :104940000000000000000000000000000000000067 -:104950000084002000200000000000000000000093 -:104960000020000000000000000000000000000027 +:10495000000000000000000000000800000000004F +:104960000000000000000000000000000000000047 :104970000000000000000000000000000000000037 :104980000000000000000000000000000000000027 :104990000000000000000000000000000000000017 -:1049A00000000000000000000000000000000800FF +:1049A0000000000000000000000000000000000007 :1049B00000000000000000000000000000000000F7 :1049C00000000000000000000000000000000000E7 -:1049D00000000000000000000000000200000000D5 +:1049D00000000000000000000000000000000000D7 :1049E00000000000000000000000000000000000C7 :1049F00000000000000000000000000000000000B7 :104A000000000000000000000000000000000000A6 @@ -25776,7 +25776,7 @@ :104A80000000000000000000000000000000000026 :104A90000000000000000000000000000000000016 :104AA0000000000000000000000000000000000006 -:104AB0000000000000000000000090000000000066 +:104AB00000000000000000000000000000000000F6 :104AC00000000000000000000000000000000000E6 :104AD00000000000000000000000000000000000D6 :104AE00000000000000000000000000000000000C6 @@ -25784,7 +25784,7 @@ :104B000000000000000000000000000000000000A5 :104B10000000000000000000000000000000000095 :104B20000000000000000000000000000000000085 -:104B300000000000000000000000110080000000E4 +:104B30000000000000000000000000000000000075 :104B40000000000000000000000000000000000065 :104B50000000000000000000000000000000000055 :104B60000000000000000000000000000000000045 @@ -25792,8 +25792,8 @@ :104B80000000000000000000000000000000000025 :104B90000000000000000000000000000000000015 :104BA0000000000000000000000000000000000005 -:104BB0000000000000000000000000000000008075 -:104BC0000000008000000000000000000000000065 +:104BB00000000000000000000000000000000000F5 +:104BC00000000000000000000000000000000000E5 :104BD00000000000000000000000000000000000D5 :104BE00000000000000000000000000000000000C5 :104BF00000000000000000000000000000000000B5 @@ -25801,7 +25801,7 @@ :104C10000000000000000000000000000000000094 :104C20000000000000000000000000000000000084 :104C30000000000000000000000000000000000074 -:104C40000020000000020000000000000000000042 +:104C40000000000000000000000000000000000064 :104C50000000000000000000000000000000000054 :104C60000000000000000000000000000000000044 :104C70000000000000000000000000000000000034 @@ -25809,7 +25809,7 @@ :104C90000000000000000000000000000000000014 :104CA0000000000000000000000000000000000004 :104CB00000000000000000000000000000000000F4 -:104CC00001000088880000000000000000000000D3 +:104CC00000000000000000000000000000000000E4 :104CD00000000000000000000000000000000000D4 :104CE00000000000000000000000000000000000C4 :104CF00000000000000000000000000000000000B4 @@ -25817,7 +25817,7 @@ :104D10000000000000000000000000000000000093 :104D20000000000000000000000000000000000083 :104D30000000000000000000000000000000000073 -:104D400000004100008000000000000000000000A2 +:104D40000000000000000000000000000000000063 :104D50000000000000000000000000000000000053 :104D60000000000000000000000000000000000043 :104D70000000000000000000000000000000000033 @@ -25825,7 +25825,7 @@ :104D90000000000000000000000000000000000013 :104DA0000000000000000000000000000000000003 :104DB00000000000000000000000000000000000F3 -:104DC0000000000000110000008000000000000052 +:104DC00000000000000000000000000000000000E3 :104DD00000000000000000000000000000000000D3 :104DE00000000000000000000000000000000000C3 :104DF00000000000000000000000000000000000B3 @@ -25833,7 +25833,7 @@ :104E10000000000000000000000000000000000092 :104E20000000000000000000000000000000000082 :104E30000000000000000000000000000000000072 -:104E40000000000000000001000000400000000021 +:104E40000000000000000000000000000000000062 :104E50000000000000000000000000000000000052 :104E60000000000000000000000000000000000042 :104E70000000000000000000000000000000000032 @@ -25841,7 +25841,7 @@ :104E90000000000000000000000000000000000012 :104EA0000000000000000000000000000000000002 :104EB00000000000000000000000000000000000F2 -:104EC0000000000000000000000000000700820059 +:104EC00000000000000000000000000000000000E2 :104ED00000000000000000000000000000000000D2 :104EE00000000000000000000000000000000000C2 :104EF00000000000000000000000000000000000B2 @@ -25850,7 +25850,7 @@ :104F20000000000000000000000000000000000081 :104F30000000000000000000000000000000000071 :104F40000000000000000000000000000000000061 -:104F5000F0F0000000000000000000000000000071 +:104F50000000000000000000000000000000000051 :104F60000000000000000000000000000000000041 :104F70000000000000000000000000000000000031 :104F80000000000000000000000000000000000021 @@ -25858,7 +25858,7 @@ :104FA0000000000000000000000000000000000001 :104FB00000000000000000000000000000000000F1 :104FC00000000000000000000000000000000000E1 -:104FD0000000F0F0000000000000000000000000F1 +:104FD00000000000000000000000000000000000D1 :104FE00000000000000000000000000000000000C1 :104FF00000000000000000000000000000000000B1 :1050000000000000000000000000000000000000A0 @@ -25874,7 +25874,7 @@ :1050A0000000000000000000000000000000000000 :1050B00000000000000000000000000000000000F0 :1050C00000000000000000000000000000000000E0 -:1050D00000000000FFFF00000000000000000000D2 +:1050D00000000000000000000000000000000000D0 :1050E00000000000000000000000000000000000C0 :1050F00000000000000000000000000000000000B0 :10510000000000000000000000000000000000009F @@ -25890,7 +25890,7 @@ :1051A00000000000000000000000000000000000FF :1051B00000000000000000000000000000000000EF :1051C00000000000000000000000000000000000DF -:1051D0000000000005000A00054000A800000000D3 +:1051D00000000000000000000000000000000000CF :1051E00000000000000000000000000000000000BF :1051F00000000000000000000000000000000000AF :10520000000000000000000000000000000000009E @@ -25934,12 +25934,12 @@ :10546000000000000000000000000000000000003C :10547000000000000000000000000000000000002C :10548000000000000000000000000000000000001C -:10549000000000000000000100000000000000000B +:10549000000000000000000000000000000000000C :1054A00000000000000000000000000000000000FC :1054B00000000000000000000000000000000000EC :1054C00000000000000000000000000000000000DC :1054D00000000000000000000000000000000000CC -:1054E00000020000000000000000000000000000BA +:1054E00000000000000000000000000000000000BC :1054F00000000000000000000000000000000000AC :10550000000000000000000000000000000000009B :10551000000000000000000000000000000000008B @@ -25947,20 +25947,20 @@ :10553000000000000000000000000000000000006B :10554000000000000000000000000000000000005B :10555000000000000000000000000000000000004B -:10556000000000000000000000000000000000003B -:10557000000000000000000000000000000000002B +:10556000000000000000000000100000000000002B +:1055700000000000000000000040000000000000EB :10558000000000000000000000000000000000001B -:10559000000001000000000000000000000000000A -:1055A00000000000000000000000000000000000FB +:10559000000000000000000000000000000000000B +:1055A00000000000000000000000001000000000EB :1055B00000000000000000000000000000000000EB :1055C00000000000000000000000000000000000DB :1055D00000000000000000000000000000000000CB :1055E00000000000000000000000000000000000BB -:1055F00000000000000000000000000000000000AB -:105600000000000000000000000000000400000096 -:105610000000000002000000000000000000000088 +:1055F00000000008000000000000000000000000A3 +:10560000000000000000000000000000000000009A +:105610000000000800000000000000000000000082 :10562000000000000000000000000000000000007A -:10563000000000000000000000000000000000006A +:10563000000000000010000000000000000000005A :10564000000000000000000000000000000000005A :10565000000000000000000000000000000000004A :10566000000000000000000000000000000000003A @@ -25983,7 +25983,7 @@ :105770000000000000000000000000000000000029 :105780000000000000000000000000000000000019 :105790000000000000000000000000000000000009 -:1057A00001000000000000000000000000000000F8 +:1057A00000000000000000000000000000000000F9 :1057B00000000000000000000000000000000000E9 :1057C00000000000000000000000000000000000D9 :1057D00000000000000000000000000000000000C9 @@ -25991,7 +25991,7 @@ :1057F00000000000000000000000000000000000A9 :105800000000000000000000000000000000000098 :105810000000000000000000000000000000000088 -:105820000000040000000000000000000000000074 +:105820000000000000000000000000000000000078 :105830000000000000000000000000000000000068 :105840000000000000000000000000000000000058 :105850000000000000000000000000000000000048 @@ -25999,21 +25999,21 @@ :105870000000000000000000000000000000000028 :105880000000000000000000000000000000000018 :105890000000000000000000000000000000000008 -:1058A00000000020000000000000000000000000D8 +:1058A00000000000000000000000000000000000F8 :1058B00000000000000000000000000000000000E8 :1058C00000000000000000000000000000000000D8 :1058D00000000000000000000000000000000000C8 :1058E00000000000000000000000000000000000B8 -:1058F0000000000000000084000000000000000024 +:1058F00000000000000000000000000000000000A8 :105900000000000000000000000000000000000097 :105910000000000000000000000000000000000087 -:105920000000000000010000000000000000000076 +:105920000000000000000000000000000000000077 :105930000000000000000000000000000000000067 :105940000000000000000000000000000000000057 :105950000000000000000000000000000000000047 :105960000000000000000000000000000000000037 :105970000000000000000000000000000000000027 -:105980000002000000000000000000000000000015 +:105980000000000000000000000000000000000017 :105990000000000000000000000000000000000007 :1059A00000000000000000000000000000000000F7 :1059B00000000000000000000000000000000000E7 @@ -26031,7 +26031,7 @@ :105A70000000000000000000000000000000000026 :105A80000000000000000000000000000000000016 :105A90000000000000000000000000000000000006 -:105AA00000000000000000009000000000900000D6 +:105AA00000000000000000000000000000000000F6 :105AB00000000000000000000000000000000000E6 :105AC00000000000000000000000000000000000D6 :105AD00000000000000000000000000000000000C6 @@ -26039,7 +26039,7 @@ :105AF00000000000000000000000000000000000A6 :105B00000000000000000000000000000000000095 :105B10000000000000000000000000000000000085 -:105B200000000000000000001100800000000000E4 +:105B20000000000000000000000000000000000075 :105B30000000000000000000000000000000000065 :105B40000000000000000000000000000000000055 :105B50000000000000000000000000000000000045 @@ -26047,24 +26047,24 @@ :105B70000000000000000000000000000000000025 :105B80000000000000000000000000000000000015 :105B90000000000000000000000000000000000005 -:105BA0000000000000000000000000000080000075 -:105BB0000080000000000000000000000000000065 +:105BA00000000000000000000000000000000000F5 +:105BB00000000000000000000000000000000000E5 :105BC00000000000000000000000000000000000D5 :105BD00000000000000000000000000000000000C5 :105BE00000000000000000000000000000000000B5 :105BF00000000000000000000000000000000000A5 :105C00000000000000000000000000000000000094 :105C10000000000000000000000000000000000084 -:105C20000000000000000000000000000000002054 -:105C3000000000C0000000000000000000000000A4 +:105C20000000000000000000000000000000000074 +:105C30000000000000000000000000000000000064 :105C40000000000000000000000000000000000054 :105C50000000000000000000000000000000000044 :105C60000000000000000000000000000000000034 :105C70000000000000000000000000000000000024 :105C80000000000000000000000000000000000014 :105C90000000000000000000000000000000000004 -:105CA00000000000000000000000000000000100F3 -:105CB00000888800010000000000000000000000D3 +:105CA00000000000000000000000000000000000F4 +:105CB00000000000000000000000000000000000E4 :105CC00000000000000000000000000000000000D4 :105CD00000000000000000000000000000000000C4 :105CE00000000000000000000000000000000000B4 @@ -26072,7 +26072,7 @@ :105D00000000000000000000000000000000000093 :105D10000000000000000000000000000000000083 :105D20000000000000000000000000000000000073 -:105D30004100008000000900000000000000000099 +:105D30000000000000000000000000000000000063 :105D40000000000000000000000000000000000053 :105D50000000000000000000000000000000000043 :105D60000000000000000000000000000000000033 @@ -26080,7 +26080,7 @@ :105D80000000000000000000000000000000000013 :105D90000000000000000000000000000000000003 :105DA00000000000000000000000000000000000F3 -:105DB0000000001100000080000000000000000052 +:105DB00000000000000000000000000000000000E3 :105DC00000000000000000000000000000000000D3 :105DD00000000000000000000000000000000000C3 :105DE00000000000000000000000000000000000B3 @@ -26088,7 +26088,7 @@ :105E00000000000000000000000000000000000092 :105E10000000000000000000000000000000000082 :105E20000000000000000000000000000000000072 -:105E30000000000000010000004000000000000021 +:105E30000000000000000000000000000000000062 :105E40000000000000000000000000000000000052 :105E50000000000000000000000000000000000042 :105E60000000000000000000000000000000000032 @@ -26096,7 +26096,7 @@ :105E80000000000000000000000000000000000012 :105E90000000000000000000000000000000000002 :105EA00000000000000000000000000000000000F2 -:105EB0000000000000000000000007008221000038 +:105EB00000000000000000000000000000000000E2 :105EC00000000000000000000000000000000000D2 :105ED00000000000000000000000000000000000C2 :105EE00000000000000000000000000000000000B2 @@ -26104,7 +26104,7 @@ :105F00000000000000000000000000000000000091 :105F10000000000000000000000000000000000081 :105F20000000000000000000000000000000000071 -:105F3000000000000000000000000000F0F0000081 +:105F30000000000000000000000000000000000061 :105F40000000000000000000000000000000000051 :105F50000000000000000000000000000000000041 :105F60000000000000000000000000000000000031 @@ -26112,7 +26112,7 @@ :105F80000000000000000000000000000000000011 :105F90000000000000000000000000000000000001 :105FA00000000000000000000000000000000000F1 -:105FB0000000000000000000000000000000F0F001 +:105FB00000000000000000000000000000000000E1 :105FC00000000000000000000000000000000000D1 :105FD00000000000000000000000000000000000C1 :105FE00000000000000000000000000000000000B1 @@ -26120,8 +26120,8 @@ :106000000000000000000000000000000000000090 :106010000000000000000000000000000000000080 :106020000000000000000000000000000000000070 -:1060300000000000000000000000000000003C3CE8 -:106040000000FFFF00000000000000000000000052 +:106030000000000000000000000000000000000060 +:106040000000000000000000000000000000000050 :106050000000000000000000000000000000000040 :106060000000000000000000000000000000000030 :106070000000000000000000000000000000000020 @@ -26129,7 +26129,7 @@ :106090000000000000000000000000000000000000 :1060A00000000000000000000000000000000000F0 :1060B00000000000000000000000000000000000E0 -:1060C0003C3C000000000000000000000000000058 +:1060C00000000000000000000000000000000000D0 :1060D00000000000000000000000000000000000C0 :1060E00000000000000000000000000000000000B0 :1060F00000000000000000000000000000000000A0 @@ -26137,7 +26137,7 @@ :10611000000000000000000000000000000000007F :10612000000000000000000000000000000000006F :10613000000000000000000000000000000000005F -:1061400005002A00054000A8000000000000000033 +:10614000000000000000000000000000000000004F :10615000000000000000000000000000000000003F :10616000000000000000000000000000000000002F :10617000000000000000000000000000000000001F @@ -26174,7 +26174,7 @@ :10636000000000000000000000000000000000002D :10637000000000000000000000000000000000001D :10638000000000000000000000000000000000000D -:1063900000000000000000000000000000002000DD +:1063900000000000000000000000000000000000FD :1063A00000000000000000000000000000000000ED :1063B00000000000000000000000000000000000DD :1063C00000000000000000000000000000000000CD @@ -26182,10 +26182,10 @@ :1063E00000000000000000000000000000000000AD :1063F000000000000000000000000000000000009D :10640000000000000000000000000000000000008C -:10641000000000000000000000000000000200007A -:10642000000200000000000000000000000000006A -:10643000000000000000000000000000000000025A -:106440000000000000000000000400000000000048 +:10641000000000000000000000000000000000007C +:10642000000000000000000000000000000000006C +:10643000000000000000000000000000000000005C +:10644000000000000000000000000000000000004C :10645000000000000000000000000000000000003C :10646000000000000000000000000000000000002C :10647000000000000000000000000000000000001C @@ -26197,17 +26197,17 @@ :1064D00000000000000000000000000000000000BC :1064E00000000000000000000000000000000000AC :1064F000000000000000000000000000000000009C -:106500000000000000000000020000000000000089 -:106510000200000000000000000000000000000079 -:106520000400000000000000000000000000000067 -:106530000400000000000000000000000000000057 +:10650000000000000000000000000000000000008B +:10651000000000000000000000000000000000007B +:10652000000000000000000000000000000000006B +:10653000000000000000000000000000000000005B :10654000000000000000000000000000000000004B :10655000000000000000000000000000000000003B :10656000000000000000000000000000000000002B :10657000000000000000000000000000000000001B :10658000000000000000000000000000000000000B -:1065900000000000000000000200000000000000F9 -:1065A00000000400000000000000000000000000E7 +:1065900000000000000000000000000000000000FB +:1065A00000000000000000000000000000000000EB :1065B00000000000000000000000000000000000DB :1065C00000000000000000000000000000000000CB :1065D00000000000000000000000000000000000BB @@ -26225,7 +26225,7 @@ :1066900000000000000000000000000000000000FA :1066A00000000000000000000000000000000000EA :1066B00000000000000000000000000000000000DA -:1066C00000000000000000000000080000000000C2 +:1066C00000000000000000000000000000000000CA :1066D00000000000000000000000000000000000BA :1066E00000000000000000000000000000000000AA :1066F000000000000000000000000000000000009A @@ -26251,7 +26251,7 @@ :106830000000000000000000000000000000000058 :106840000000000000000000000000000000000048 :106850000000000000000000000000000000000038 -:1068600003000084000000000000000000000000A1 +:106860000000000000000000000000000000000028 :106870000000000000000000000000000000000018 :106880000000000000000000000000000000000008 :1068900000000000000000000000000000000000F8 @@ -26259,7 +26259,7 @@ :1068B00000000000000000000000000000000000D8 :1068C00000000000000000000000000000000000C8 :1068D00000000000000000000000000000000000B8 -:1068E00000000000000000000000000000000002A6 +:1068E00000000000000000000000000000000000A8 :1068F0000000000000000000000000000000000098 :106900000000000000000000000000000000000087 :106910000000000000000000000000000000000077 @@ -26446,15 +26446,15 @@ :10746000000000000000000000000000000000001C :10747000000000000000000000000000000000000C :1074800000000000000000000000000000000000FC -:1074900000000000000000000000000000000400E8 +:1074900000000000000000000000000000000000EC :1074A00000000000000000000000000000000000DC :1074B00000000000000000000000000000000000CC :1074C00000000000000000000000000000000000BC :1074D00000000000000000000000000000000000AC -:1074E000000000000000000000000000000000009C -:1074F000000000000000000000000000000000008C +:1074E000000000000010000000000000000000008C +:1074F0000000000000080000000000000000000084 :10750000000000000000000000000000000000007B -:107510000000000000000000040000000000000067 +:10751000000000000010000000000000000000005B :10752000000000000000000000000000000000005B :10753000000000000000000000000000000000004B :10754000000000000000000000000000000000003B @@ -26674,14 +26674,14 @@ :1082A00000000000000000000000000000000000CE :1082B00000000000000000000000000000000000BE :1082C00000000000000000000000000000000000AE -:1082D000000000040000000000000000000000009A +:1082D000000000000000000000000000000000009E :1082E000000000000000000000000000000000008E :1082F000000000000000000000000000000000007E :10830000000000000000000000000000000000006D -:108310000000000000000002000000020000000059 -:10832000000200000000000000000000000000004B -:108330000000000000000002000200000000000039 -:10834000000000000002000000000000000000002B +:10831000000000000000000000000000000000005D +:10832000000000000000000000000000000000004D +:10833000000000000000000000000000000000003D +:10834000000000000000000000000000000000002D :10835000000000000000000000000000000000001D :10836000000000000000000000000000000000000D :1083700000000000000000000000000000000000FD @@ -26692,11 +26692,11 @@ :1083C00000000000000000000000000000000000AD :1083D000000000000000000000000000000000009D :1083E000000000000000000000000000000000008D -:1083F000000000000000000000000000000000007D -:10840000000000000000000000000000000000006C +:1083F000000002000000000000000000000000007B +:10840000000000000000000000000200000000006A :10841000000000000000000000000000000000005C -:108420000000000000000000000004000000000048 -:108430000000000000000000000004000000000038 +:10842000000000000000000000000000000000004C +:10843000000000000000000000000000000000003C :10844000000000000000000000000000000000002C :10845000000000000000000000000000000000001C :10846000000000000000000000000000000000000C @@ -26930,7 +26930,7 @@ :1092A00000000000000000000000000000000000BE :1092B00000000000000000000000000000000000AE :1092C000000000000000000000000000000000009E -:1092D000000000000002000000000000000000008C +:1092D000000000000000000000000000000000008E :1092E000000000000000000000000000000000007E :1092F000000000000000000000000000000000006E :10930000000000000000000000000000000000005D @@ -26992,7 +26992,7 @@ :1096800000000000000000000000000000000000DA :1096900000000000000000000000000000000000CA :1096A00000000000000000000000000000000000BA -:1096B00000000009000000000000000000000000A1 +:1096B00000000000000000000000000000000000AA :1096C000000000000000000000000000000000009A :1096D000000000000000000000000000000000008A :1096E000000000000000000000000000000000007A @@ -27015,8 +27015,8 @@ :1097F0000000000000000000000000000000000069 :109800000000000000000000000000000000000058 :109810000000000000000000000000000000000048 -:1098200000000000000000000000008200000000B6 -:109830000000040000000000000000000000000024 +:109820000000000000000000000000000000000038 +:109830000000000000000000000000000000000028 :109840000000000000000000000000000000000018 :109850000000000000000000000000000000000008 :1098600000000000000000000000000000000000F8 @@ -27166,36 +27166,36 @@ :10A1600000000000000000000000000000000000EF :10A1700000000000000000000000000000000000DF :10A1800000000000000000000000000000000000CF -:10A19000040000000000000000000000200000009B -:10A1A00000000000000000000000000000000400AB +:10A1900000000000000000000000000000000000BF +:10A1A00000000000000000000000000000000000AF :10A1B000000000000000000000000000000000009F -:10A1C000000000000000000300000000000000008C -:10A1D000000000000000000000000000004000003F +:10A1C000000000000000000000000000000000008F +:10A1D000000000000000000000000000000000007F :10A1E000000000000000000000000000000000006F :10A1F000000000000000000000000000000000005F -:10A20000000000000000000000000000000000024C -:10A21000000200000002000000000000000000003A +:10A20000000000000000000000000000000000004E +:10A21000000000000000000000000000000000003E :10A22000000000000000000000000000000000002E -:10A23000000000020000000000000000000000001C +:10A23000000000000000000000000000000000001E :10A24000000000000000000000000000000000000E -:10A2500000000000000000000000000000000001FD +:10A2500000000000000000000000000000000000FE :10A2600000000000000000000000000000000000EE :10A2700000000000000000000000000000000000DE :10A2800000000000000000000000000000000000CE :10A2900000000000000000000000000000000000BE :10A2A00000000000000000000000000000000000AE -:10A2B000000001000000000000000000000000009D +:10A2B000000000000000000000000000000000009E :10A2C000000000000000000000000000000000008E -:10A2D000000000000000000000000000010001007C -:10A2E000000002000000000000000000000000006C -:10A2F000000000000000000000000000020000005C -:10A300000000000002000000000000000000040047 -:10A310000000000004000000000000000000000039 +:10A2D000000000000000000000000000000000007E +:10A2E000000000000000000000000000000000006E +:10A2F000000000000000000000000000000000005E +:10A30000000000000000000000000000000000004D +:10A31000000000000000000000000000000000003D :10A32000000000000000000000000000000000002D -:10A33000000000001000000000000000000000000D +:10A33000000000000000000000000000000000001D :10A34000000000000000000000000000000000000D -:10A3500000000000000000000000000000000200FB -:10A36000020000008000000000000000000000006B +:10A3500000000000000000000000000000000000FD +:10A3600000000000000000000000000000000000ED :10A3700000000000000000000000000000000000DD :10A3800000000000000000000000000000000000CD :10A3900000000000000000000000000000000000BD @@ -27216,26 +27216,26 @@ :10A4800000000000000000000000000000000000CC :10A4900000000000000000000000000000000000BC :10A4A00000000000000000000000000000000000AC -:10A4B000000000000000000000000000000001009B -:10A4C0000080000000000000080000000000000004 -:10A4D00000000000A000000000008200000000005A -:10A4E00000000000000000000100018000000000EA +:10A4B000000000000000000000000000000000009C +:10A4C000000000000000000000000000000000008C +:10A4D000000000000000000000000000000000007C +:10A4E000000000000000000000000000000000006C :10A4F000000000000000000000000000000000005C :10A50000000000000000000000000000000000004B :10A51000000000000000000000000000000000003B :10A52000000000000000000000000000000000002B :10A53000000000000000000000000000000000001B -:10A5400020000004000000000000000000000000E7 +:10A54000000000000000000000000000000000000B :10A5500000000000000000000000000000000000FB -:10A5600000000000000000000000200004040000C3 +:10A5600000000000000000000000000000000000EB :10A5700000000000000000000000000000000000DB :10A5800000000000000000000000000000000000CB :10A5900000000000000000000000000000000000BB :10A5A00000000000000000000000000000000000AB -:10A5B000000000000000000000000000900000000B -:10A5C0000800000000000000000000000000000083 +:10A5B000000000000000000000000000000000009B +:10A5C000000000000000000000000000000000008B :10A5D000000000000000000000000000000000007B -:10A5E0000800000000009000008000000000000053 +:10A5E000000000000000000000000000000000006B :10A5F000000000000000000000000000000000005B :10A60000000000000000000000000000000000004A :10A61000000000000000000000000000000000003A @@ -27243,15 +27243,15 @@ :10A63000000000000000000000000000000000001A :10A64000000000000000000000000000000000000A :10A6500000000000000000000000000000000000FA -:10A6600000000000000000000000000800000000E2 +:10A6600000000000000000000000000000000000EA :10A6700000000000000000000000000000000000DA :10A6800000000000000000000000000000000000CA :10A6900000000000000000000000000000000000BA :10A6A00000000000000000000000000000000000AA :10A6B000000000000000000000000000000000009A :10A6C000000000000000000000000000000000008A -:10A6D0000000040000000000000000000000000076 -:10A6E00000000000000088000000000000000100E1 +:10A6D000000000000000000000000000000000007A +:10A6E000000000000000000000000000000000006A :10A6F000000000000000000000000000000000005A :10A700000000000000000000000000000000000049 :10A710000000000000000000000000000000000039 @@ -27260,80 +27260,80 @@ :10A740000000000000000000000000000000000009 :10A7500000000000000000000000000000000000F9 :10A7600000000000000000000000000000000000E9 -:10A7700020000000000000000000000000000000B9 +:10A7700000000000000000000000000000000000D9 :10A7800000000000000000000000000000000000C9 :10A7900000000000000000000000000000000000B9 :10A7A00000000000000000000000000000000000A9 :10A7B0000000000000000000000000000000000099 -:10A7C0000000000000000100000000000000000088 +:10A7C0000000000000000000000000000000000089 :10A7D0000000000000000000000000000000000079 :10A7E0000000000000000000000000000000000069 -:10A7F00001000090000000000000000000000000C8 +:10A7F0000000000000000000000000000000000059 :10A800000000000000000000000000000000000048 :10A810000000000000000000000000000000000038 :10A820000000000000000000000000000000000028 :10A830000000000000000000000000000000000018 -:10A8400000000000000000001100210000000000D6 +:10A840000000000000000000000000000000000008 :10A8500000000000000000000000000000000000F8 :10A8600000000000000000000000000000000000E8 -:10A870000000110021800000000000000000000026 +:10A8700000000000000000000000000000000000D8 :10A8800000000000000000000000000000000000C8 :10A8900000000000000000000000000000000000B8 :10A8A00000000000000000000000000000000000A8 :10A8B0000000000000000000000000000000000098 -:10A8C000000000000000000000000041090000033B +:10A8C0000000000000000000000000000000000088 :10A8D0000000000000000000000000000000000078 :10A8E0000000000000000000000000000000000068 -:10A8F00000000000000809800003000000000000C4 +:10A8F0000000000000000000000000000000000058 :10A900000000000000000000000000000000000047 :10A910000000000000000000000000000000000037 :10A920000000000000000000000000000000000027 :10A930000000000000000000000000000000000017 -:10A940000000000000000000000000000001010005 +:10A940000000000000000000000000000000000007 :10A9500000000000000000000000000000000000F7 :10A9600000000000000000000000000000000000E7 -:10A9700000000000000000010104000000A0000031 +:10A9700000000000000000000000000000000000D7 :10A9800000000000000000000000000000000000C7 :10A9900000000000000000000000000000000000B7 :10A9A00000000000000000000000000000000000A7 :10A9B0000000000000000000000000000000000097 :10A9C0000000000000000000000000000000000087 -:10A9D00088000000000000000000000000000000EF +:10A9D0000000000000000000000000000000000077 :10A9E0000000000000000000000000000000000067 -:10A9F000000000000000000000008800029000003D +:10A9F0000000000000000000000000000000000057 :10AA00000000000000000000000000000000000046 :10AA10000000000000000000000000000000000036 :10AA20000000000000000000000000000000000026 :10AA30000000000000000000000000000000000016 :10AA40000000000000000000000000000000000006 -:10AA500000000000000003000000000000000000F3 +:10AA500000000000000000000000000000000000F6 :10AA600000000000000000000000000000000000E6 -:10AA70000000000000000000000040000000808096 -:10AA80004000000000000000000000000000000086 +:10AA700000000000000000000000000000000000D6 +:10AA800000000000000000000000000000000000C6 :10AA900000000000000000000000000000000000B6 :10AAA00000000000000000000000000000000000A6 :10AAB0000000000000000000000000000000000096 :10AAC0000000000000000000000000000000000086 -:10AAD0000000000000110000000000000000000065 +:10AAD0000000000000000000000000000000000076 :10AAE0000000000000000000000000000000000066 -:10AAF00000000000000000000000000000118000C5 +:10AAF0000000000000000000000000000000000056 :10AB00000000000000000000000000000000000045 :10AB10000000000000000000000000000000000035 :10AB20000000000000000000000000000000000025 :10AB30000000000000000000000000000000000015 :10AB40000000000000000000000000000000000005 -:10AB500000000000000000010000000000000000F4 +:10AB500000000000000000000000000000000000F5 :10AB600000000000000000000000000000000000E5 -:10AB700000000000000000000000000000000001D4 -:10AB8000200000880000000000000000000000001D +:10AB700000000000000000000000000000000000D5 +:10AB800000000000000000000000000000000000C5 :10AB900000000000000000000000000000000000B5 :10ABA00000000000000000000000000000000000A5 :10ABB0000000000000000000000000000000000095 :10ABC0000000000000000000000000000000000085 -:10ABD000000000000000000000E000008100000014 +:10ABD0000000000000000000000000000000000075 :10ABE0000000000000000000000000000000000065 :10ABF0000000000000000000000000000000000055 -:10AC0000000000E00700000000000000000000005D +:10AC00000000000000000000000000000000000044 :10AC10000000000000000000000000000000000034 :10AC20000000000000000000000000000000000024 :10AC30000000000000000000000000000000000014 @@ -27341,7 +27341,7 @@ :10AC500000000000000000000000000000000000F4 :10AC600000000000000000000000000000000000E4 :10AC700000000000000000000000000000000000D4 -:10AC800000000000FF000000FF00000000000000C6 +:10AC800000000000000000000000000000000000C4 :10AC900000000000000000000000000000000000B4 :10ACA00000000000000000000000000000000000A4 :10ACB0000000000000000000000000000000000094 @@ -27349,7 +27349,7 @@ :10ACD0000000000000000000000000000000000074 :10ACE0000000000000000000000000000000000064 :10ACF0000000000000000000000000000000000054 -:10AD0000000000000000FF000000FF000000000045 +:10AD00000000000000000000000000000000000043 :10AD10000000000000000000000000000000000033 :10AD20000000000000000000000000000000000023 :10AD30000000000000000000000000000000000013 @@ -27365,7 +27365,7 @@ :10ADD0000000000000000000000000000000000073 :10ADE0000000000000000000000000000000000063 :10ADF0000000000000000000000000000000000053 -:10AE0000000000000000000000FF0000FFFF000045 +:10AE00000000000000000000000000000000000042 :10AE10000000000000000000000000000000000032 :10AE20000000000000000000000000000000000022 :10AE30000000000000000000000000000000000012 @@ -27373,24 +27373,24 @@ :10AE500000000000000000000000000000000000F2 :10AE600000000000000000000000000000000000E2 :10AE700000000000000000000000000000000000D2 -:10AE80000000000000000000000000FF00000000C3 +:10AE800000000000000000000000000000000000C2 :10AE900000000000000000000000000000000000B2 :10AEA00000000000000000000000000000000000A2 :10AEB0000000000000000000000000000000000092 :10AEC0000000000000000000000000000000000082 :10AED0000000000000000000000000000000000072 -:10AEE000000000600006000C0000000000000000F0 +:10AEE0000000000000000000000000000000000062 :10AEF0000000000000000000000000000000000052 -:10AF000000000000000000000000000015602A069C -:10AF1000054C00A800000000000000000000000038 +:10AF00000000000000000000000000000000000041 +:10AF10000000000000000000000000000000000031 :10AF20000000000000000000000000000000000021 :10AF30000000000000000000000000000000000011 :10AF40000000000000000000000000000000000001 :10AF500000000000000000000000000000000000F1 -:10AF60000000000000000000FFFF000000000000E3 +:10AF600000000000000000000000000000000000E1 :10AF700000000000000000000000000000000000D1 :10AF800000000000000000000000000000000000C1 -:10AF90000000FFFF000000000000000000000000B3 +:10AF900000000000000000000000000000000000B1 :10AFA00000000000000000000000000000000000A1 :10AFB0000000000000000000000000000000000091 :10AFC0000000000000000000000000000000000081 @@ -27403,18 +27403,18 @@ :10B030000000000000000000000000000000000010 :10B040000000000000000000000000000000000000 :10B0500000000000000000000000000000000000F0 -:10B06000000000000000000000000000F0F0000000 +:10B0600000000000000000000000000000000000E0 :10B0700000000000000000000000000000000000D0 :10B0800000000000000000000000000000000000C0 -:10B09000000000000000F0F00000000000000000D0 +:10B0900000000000000000000000000000000000B0 :10B0A00000000000000000000000000000000000A0 :10B0B0000000000000000000000000000000000090 :10B0C0000000000000000000000000000000000080 :10B0D0000000000000000000000000000000000070 -:10B0E0000000000000000000000000000000F0F080 +:10B0E0000000000000000000000000000000000060 :10B0F0000000000000000000000000000000000050 :10B10000000000000000000000000000000000003F -:10B110000000000000000000F0F00000000000004F +:10B11000000000000000000000000000000000002F :10B12000000000000000000000000000000000001F :10B13000000000000000000000000000000000000F :10B1400000000000000000000000000000000000FF @@ -27433,22 +27433,22 @@ :10B21000000000000000000000000000000000002E :10B22000000000000000000000000000000000001E :10B23000000000000000000000000000000000000E -:10B2400000000000000000000000000000000000FE +:10B24000000000000000000000800040004000807E :10B2500000000000000000000000000000000000EE :10B2600000000000000000000000000000000000DE :10B2700000000000000000000000000000000000CE :10B2800000000000000000000000000000000000BE -:10B2900000000200000000000000000000000000AC +:10B2900000000000000000000000000000000000AE :10B2A000000000000000000000000000000000009E :10B2B000000000000000000000000000000000008E -:10B2C000000000000000000000000000000000007E -:10B2D0000000000000000000000800000000000066 +:10B2C000000000000000000000000040000100013C +:10B2D000004000000000000000000000000000002E :10B2E000000000000000000000000000000000005E -:10B2F0000000000000000000000800000000000046 +:10B2F000000000000000000000000000000000004E :10B30000000000000000000000000000000000003D -:10B310000000000000000000000000080000000025 +:10B31000000000000000000000000000000000002D :10B32000000000000000000000000000000000001D -:10B330000000000000000000000000080000000005 +:10B33000000000000000000000000000000000000D :10B3400000000000000000000000000000000000FD :10B3500000000000000000000000000000000000ED :10B3600000000000000000000000000000000000DD @@ -27482,7 +27482,7 @@ :10B52000000000000000000000000000000000001B :10B53000000000000000000000000000000000000B :10B5400000000000000000000000000000000000FB -:10B5500000000000000000000000000000000000EB +:10B5500000000000000000000000004000000000AB :10B5600000000000000000000000000000000000DB :10B5700000000000000000000000000000000000CB :10B5800000000000000000000000000000000000BB @@ -27490,23 +27490,23 @@ :10B5A000000000000000000000000000000000009B :10B5B000000000000000000000000000000000008B :10B5C000000000000000000000000000000000007B -:10B5D000000000000000000000000000000000006B +:10B5D000000000000000000000000000000100006A :10B5E000000000000000000000000000000000005B -:10B5F00000000000000000000000000000C000008B -:10B6000000000084000000000000000000000000B6 +:10B5F000000000000000000000000000000000004B +:10B60000000000000000000000000000000000003A :10B61000000000000000000000000000000000002A -:10B6200000840000000000C00000000000840084CE +:10B62000000000000000000000000000000000001A :10B63000000000000000000000000000000000000A :10B6400000000000000000000000000000000000FA -:10B6500000000000000000000000000000000000EA +:10B6500000000000000000000000000000400000AA :10B6600000000000000000000000000000000000DA :10B6700000000000000000000000000000000000CA -:10B6800000000000000000000000000000020000B8 +:10B6800000000000000000000000000000000000BA :10B6900000000000000000000000000000000000AA -:10B6A0000000000000000000000000090000000091 -:10B6B0000000000000000002000200000000000086 +:10B6A000000000000000000000000000000000009A +:10B6B000000000000000000000000000000000008A :10B6C000000000000000000000000000000000007A -:10B6D000000000000000000000000000000000006A +:10B6D0000000000000000000000000000000000169 :10B6E000000000000000000000000000000000005A :10B6F000000000000000000000000000000000004A :10B700000000000000000000000000000000000039 @@ -27514,7 +27514,7 @@ :10B720000000000000000000000000000000000019 :10B730000000000000000000000000000000000009 :10B7400000000000000000000000000000000000F9 -:10B7500000000000000000000000000000000000E9 +:10B7500000000000000000000000000000C0000425 :10B7600000000000000000000000000000000000D9 :10B7700000000000000000000000000000000000C9 :10B7800000000000000000000000000000000000B9 @@ -27522,8 +27522,8 @@ :10B7A0000000000000000000000000000000000099 :10B7B0000000000000000000000000000000000089 :10B7C0000000000000000000000000000000000079 -:10B7D0000000000000000000000000000000000069 -:10B7E0000000000000000000000000000000000059 +:10B7D00000000000000000000000000000000080E9 +:10B7E00000800000000000000000000000000000D9 :10B7F0000000000000000000000000000000000049 :10B800000000000000000000000000000000000038 :10B810000000000000000000000000000000000028 @@ -27531,7 +27531,7 @@ :10B830000000000000000000000000000000000008 :10B8400000000000000000000000000000000000F8 :10B8500000000000000000000000000000000000E8 -:10B8600000000000000000000000000000000000D8 +:10B860000000000000008000000000000000000058 :10B8700000000000000000000000000000000000C8 :10B8800000000000000000000000000000000000B8 :10B8900000000000000000000000000000000000A8 @@ -27539,7 +27539,7 @@ :10B8B0000000000000000000000000000000000088 :10B8C0000000000000000000000000000000000078 :10B8D0000000000000000000000000000000000068 -:10B8E0000000000000000000000000000000000058 +:10B8E0000000000000000000C00000000000000098 :10B8F0000000000000000000000000000000000048 :10B900000000000000000000000000000000000037 :10B910000000000000000000000000000000000027 @@ -27547,7 +27547,7 @@ :10B930000000000000000000000000000000000007 :10B9400000000000000000000000000000000000F7 :10B9500000000000000000000000000000000000E7 -:10B9600000000000000000000000000000000000D7 +:10B960000000000000020000000000C00000000015 :10B9700000000000000000000000000000000000C7 :10B9800000000000000000000000000000000000B7 :10B9900000000000000000000000000000000000A7 @@ -27555,7 +27555,7 @@ :10B9B0000000000000000000000000000000000087 :10B9C0000000000000000000000000000000000077 :10B9D0000000000000000000000000000000000067 -:10B9E0000000000000000000000000000000000057 +:10B9E0000000000000000080000000000080000057 :10B9F0000000000000000000000000000000000047 :10BA00000000000000000000000000000000000036 :10BA10000000000000000000000000000000000026 @@ -27563,7 +27563,7 @@ :10BA30000000000000000000000000000000000006 :10BA400000000000000000000000000000000000F6 :10BA500000000000000000000000000000000000E6 -:10BA600000000000000000000000000000000000D6 +:10BA60000000000000000000800080000080000056 :10BA700000000000000000000000000000000000C6 :10BA800000000000000000000000000000000000B6 :10BA900000000000000000000000000000000000A6 @@ -27571,7 +27571,7 @@ :10BAB0000000000000000000000000000000000086 :10BAC0000000000000000000000000000000000076 :10BAD0000000000000000000000000000000000066 -:10BAE0000000000000000000000000000000000056 +:10BAE00000000000000000000000C0000200000292 :10BAF0000000000000000000000000000000000046 :10BB00000000000000000000000000000000000035 :10BB10000000000000000000000000000000000025 @@ -27588,7 +27588,7 @@ :10BBC0000000000000000000000000000000000075 :10BBD0000000000000000000000000000000000065 :10BBE0000000000000000000000000000000000055 -:10BBF0000000000000000000000000000000000045 +:10BBF00000FF00003C3C00000000000000000000CE :10BC00000000000000000000000000000000000034 :10BC10000000000000000000000000000000000024 :10BC20000000000000000000000000000000000014 @@ -27596,7 +27596,7 @@ :10BC400000000000000000000000000000000000F4 :10BC500000000000000000000000000000000000E4 :10BC600000000000000000000000000000000000D4 -:10BC700000000000000000000000000000000000C4 +:10BC7000000000FF00003C3C00000000000000004D :10BC800000000000000000000000000000000000B4 :10BC900000000000000000000000000000000000A4 :10BCA0000000000000000000000000000000000094 @@ -27604,7 +27604,7 @@ :10BCC0000000000000000000000000000000000074 :10BCD0000000000000000000000000000000000064 :10BCE0000000000000000000000000000000000054 -:10BCF0000000000000000000000000000000000044 +:10BCF0000000FF0000000000FFFF00000000000047 :10BD00000000000000000000000000000000000033 :10BD10000000000000000000000000000000000023 :10BD20000000000000000000000000000000000013 @@ -27612,7 +27612,7 @@ :10BD400000000000000000000000000000000000F3 :10BD500000000000000000000000000000000000E3 :10BD600000000000000000000000000000000000D3 -:10BD700000000000000000000000000000000000C3 +:10BD700000000000FF000000FFFFFFFF00000000C8 :10BD800000000000000000000000000000000000B3 :10BD900000000000000000000000000000000000A3 :10BDA0000000000000000000000000000000000093 @@ -27620,7 +27620,7 @@ :10BDC0000000000000000000000000000000000073 :10BDD0000000000000000000000000000000000063 :10BDE0000000000000000000000000000000000053 -:10BDF0000000000000000000000000000000000043 +:10BDF000000000000000408280000020820200005D :10BE00000000000000000000000000000000000032 :10BE10000000000000000000000000000000000022 :10BE20000000000000000000000000000000000012 @@ -27662,29 +27662,29 @@ :10C0600000000000000000000000000000000000D0 :10C0700000000000000000000000000000000000C0 :10C0800000000000000000000000000000000000B0 -:10C0900000000000000000000000000000000000A0 +:10C090002000000000000000000000000000000080 :10C0A0000000000000000000000000000000000090 -:10C0B0000000000000000000000000000000000080 +:10C0B0002000000000000000000000000000000060 :10C0C0000000000000000000000000000000000070 -:10C0D0000000000000000000000000000000000060 +:10C0D0000000200000000000000000000000000040 :10C0E0000000000000000000000000000000000050 -:10C0F0000000000000000000000000000000000040 -:10C10000000000000000000000000002000000022B -:10C11000000000000002000000000000000000001D -:10C12000000000000000000000000002000200000B -:10C1300000000000000000000002000000000000FD +:10C0F0000000200000000000000000000000000020 +:10C10000000000000000000000000000000000002F +:10C11000000000000000000000000000000000001F +:10C12000000000000000000000000000000000000F +:10C1300000000000000000000000000000000000FF :10C1400000000000000000000000000000000000EF :10C1500000000000000000000000000000000000DF :10C1600000000000000000000000000000000000CF :10C1700000000000000000000000000000000000BF :10C1800000000000000000000000000000000000AF -:10C190000000000000000400000000000400000097 +:10C19000000000000000000000000000000000009F :10C1A000000000000000000000000000000000008F -:10C1B000000000000000000000000000040000007B +:10C1B000000000000000000000000000000000007F :10C1C000000000000000000000000000000000006F :10C1D000000000000000000000000000000000005F -:10C1E0000000000000000400040000000000000047 -:10C1F000000000000000000000000000000000003F +:10C1E000000000000000020000000000000000004D +:10C1F000000000000000000000000000000002003D :10C20000000000000000000000000000000000002E :10C21000000000000000000000000000000000001E :10C22000000000000000000000000000000000000E @@ -27912,16 +27912,16 @@ :10D000000000000000000000000000000000000020 :10D010000000000000000000000000000000000010 :10D020000000000000000000000000000000000000 -:10D0300000000000000000000000000000002000D0 -:10D0400000000000000000000000000020000000C0 -:10D050000000000000000000000000002000200090 -:10D0600000000000000000000000000020000000A0 -:10D070000000000000000000000000002000000090 -:10D080002000000000000000000000000000200060 -:10D090000000000000000000000000000000200070 -:10D0A0002000000000000000000000000000200040 -:10D0B0000000000000000000000000000000200050 -:10D0C00000000000000000000090000000000000D0 +:10D0300000000000000000000000000000000000F0 +:10D0400000000000200000000000000000000000C0 +:10D0500000000000200000000000000000000000B0 +:10D0600000000000200000000000000000000000A0 +:10D070000000000020000000000000000000000090 +:10D080000000000000002000000000000000000080 +:10D090000000000000002000000000000000000070 +:10D0A0000000000000002000000000000000000060 +:10D0B0000000000000002000000000000000000050 +:10D0C0000000000000000000000000000000000060 :10D0D0000000000000000000000000000000000050 :10D0E0000000000000000000000000000000000040 :10D0F0000000000000000000000000000000000030 @@ -27938,13 +27938,13 @@ :10D1A000000000000000000000000000000000007F :10D1B000000000000000000000000000000000006F :10D1C000000000000000000000000000000000005F -:10D1D0000008000000000000000000000000000047 +:10D1D000000000000000000000000000000000004F :10D1E000000000000000000000000000000000003F -:10D1F0000008000000000000000000000000000027 +:10D1F000000000000000000000000000000000002F :10D20000000000000000000000000000000000001E -:10D210000000000800000000000000000000000006 +:10D21000000000000000000000000000000000000E :10D2200000000000000000000000000000000000FE -:10D2300000000008000000000000000000000000E6 +:10D2300000000000000000000000000000000000EE :10D2400000000000000000000000000000000000DE :10D2500000000000000000000000000000000000CE :10D2600000000000000000000000000000000000BE @@ -27994,7 +27994,7 @@ :10D5200000000000000000000000000000000000FB :10D5300000000000000000000000000000000000EB :10D5400000000000000000000000000000000000DB -:10D5500000000000000000000002000000000000C9 +:10D5500000000000000000000000000000000000CB :10D5600000000000000000000000000000000000BB :10D5700000000000000000000000000000000000AB :10D58000000000000000000000000000000000009B @@ -28173,9 +28173,9 @@ :10E0500000000000000000000000000000000000C0 :10E0600000000000000000000000000000000000B0 :10E0700000000000000000000000000000000000A0 -:10E08000000000000002000200000002000000008A +:10E080000000000000000000000000000000000090 :10E090000000000000000000000000000000000080 -:10E0A000000000000000000000020000000000006E +:10E0A0000000000000000000000000000000000070 :10E0B0000000000000000000000000000000000060 :10E0C0000000000000000000000000000000000050 :10E0D0000000000000000000000000000000000040 @@ -28186,17 +28186,17 @@ :10E1200000000000000000000000000000000000EF :10E1300000000000000000000000000000000000DF :10E1400000000000000000000000000000000000CF -:10E1500000000000000000000200000000000000BD +:10E1500000000000000000000000000000000000BF :10E1600000000000000000000000000000000000AF -:10E17000000000000000000000000040000000005F +:10E17000000000000000000000000000000000009F :10E18000000000000000000000000000000000008F -:10E190000000000800000000000000000000000077 +:10E190000008000000000000000000000000000077 :10E1A000000000000000000000000000000000006F -:10E1B0000000000800000000000000000000000057 +:10E1B0000008000000000000000000000000000057 :10E1C000000000000000000000000000000000004F -:10E1D0000000000000080000000000000000000037 +:10E1D0000000000800000000000000000000000037 :10E1E000000000000000000000000000000000002F -:10E1F00000000000004000000000000000000000DF +:10E1F0000000000800000000000000000000000017 :10E20000000000000000000000000000000000000E :10E2100000000000000000000000000000000000FE :10E2200000000000000000000000000000000000EE @@ -28255,7 +28255,7 @@ :10E57000000000000000000000000000000000009B :10E58000000000000000000000000000000000008B :10E59000000000000000000000000000000000007B -:10E5A0000000000000000500000000000000000066 +:10E5A000000000000000000000000000000000006B :10E5B000000000000000000000000000000000005B :10E5C000000000000000000000000000000000004B :10E5D000000000000000000000000000000000003B @@ -28437,19 +28437,19 @@ :10F0D0000000000000000000000000000000000030 :10F0E0000000000000000000000000000000000020 :10F0F0000000000000000000000000000000000010 -:10F1000000000000000000000200000000000000FD +:10F1000000000000000000000000000000000000FF :10F1100000000000000000000000000000000000EF :10F1200000000000000000000000000000000000DF :10F1300000000000000000000000000000000000CF :10F1400000000000000000000000000000000000BF -:10F1500000000000000000000008000000000000A7 +:10F1500000000000000000000000000000000000AF :10F16000000000000000000000000000000000009F -:10F170000000000000000000000800000000000087 +:10F17000000000000000000000000000000000008F :10F18000000000000000000000000000000000007F -:10F19000000000000000000000000002000000006D +:10F19000000000000000000000000000000000006F :10F1A000000000000000000000000000000000005F :10F1B000000000000000000000000000000000004F -:10F1C000000000000000000000000000C00001007E +:10F1C000000000000000000000000000000000003F :10F1D000000000000000000000000000000000002F :10F1E000000000000000000000000000000000001F :10F1F000000000000000000000000000000000000F @@ -28458,39 +28458,39 @@ :10F2200000000000000000000000000000000000DE :10F2300000000000000000000000000000000000CE :10F2400000000000000000000000000000000000BE -:10F2500004000000000000000000000000000000AA +:10F2500000000000000000000000000000000000AE :10F26000000000000000000000000000000000009E :10F27000000000000000000000000000000000008E :10F28000000000000000000000000000000000007E :10F29000000000000000000000000000000000006E :10F2A000000000000000000000000000000000005E :10F2B000000000000000000000000000000000004E -:10F2C00000000000000000000000000001000080BD -:10F2D000000000000100000000000000000000002D +:10F2C000000000000000000000000000000000003E +:10F2D000000000000000000000000000000000002E :10F2E000000000000000000000000000000000001E :10F2F000000000000000000000000000000000000E :10F3000000000000000000000000000000000000FD :10F3100000000000000000000000000000000000ED :10F3200000000000000000000000000000000000DD :10F3300000000000000000000000000000000000CD -:10F3400000000000000000000000000000000400B9 -:10F350000020000000000400000000000000000089 +:10F3400000000000000000000000000000000000BD +:10F3500000000000000000000000000000000000AD :10F36000000000000000000000000000000000009D :10F37000000000000000000000000000000000008D :10F38000000000000000000000000000000000007D :10F39000000000000000000000000000000000006D :10F3A000000000000000000000000000000000005D :10F3B000000000000000000000000000000000004D -:10F3C00000000000000000000000040002004020D7 +:10F3C000000000000000000000000000000000003D :10F3D000000000000000000000000000000000002D :10F3E000000000000000000000000000000000001D :10F3F000000000000000000000000000000000000D -:10F4000000000000000000000000000100000000FB +:10F4000000000000000000000000000000000000FC :10F4100000000000000000000000000000000000EC :10F4200000000000000000000000000000000000DC :10F4300000000000000000000000000000000000CC -:10F4400000000000000000000000000080008000BC -:10F4500000010000000000000000000000000000AB +:10F4400000000000000000000000000000000000BC +:10F4500000000000000000000000000000000000AC :10F46000000000000000000000000000000000009C :10F47000000000000000000000000000000000008C :10F48000000000000000000000000000000000007C @@ -28498,15 +28498,15 @@ :10F4A000000000000000000000000000000000005C :10F4B000000000000000000000000000000000004C :10F4C000000000000000000000000000000000003C -:10F4D00000000000000000000000008000000000AC -:10F4E0000009000000000000000000000000000013 +:10F4D000000000000000000000000000000000002C +:10F4E000000000000000000000000000000000001C :10F4F000000000000000000000000000000000000C :10F5000000000000000000000000000000000000FB :10F5100000000000000000000000000000000000EB :10F5200000000000000000000000000000000000DB :10F5300000000000000000000000000000000000CB :10F5400000000000000000000000000000000000BB -:10F55000000000000000000000000000004000006B +:10F5500000000000000000000000000000000000AB :10F56000000000000000000000000000000000009B :10F57000000000000000000000000000000000008B :10F58000000000000000000000000000000000007B @@ -28514,7 +28514,7 @@ :10F5A000000000000000000000000000000000005B :10F5B000000000000000000000000000000000004B :10F5C000000000000000000000000000000000003B -:10F5D00000000000900000000000010090200000EA +:10F5D000000000000000000000000000000000002B :10F5E000000000000000000000000000000000001B :10F5F000000000000000000000000000000000000B :10F6000000000000000000000000000000000000FA @@ -28522,7 +28522,7 @@ :10F6200000000000000000000000000000000000DA :10F6300000000000000000000000000000000000CA :10F6400000000000000000000000000000000000BA -:10F650000000000011008000000000000900808010 +:10F6500000000000000000000000000000000000AA :10F66000000000000000000000000000000000009A :10F67000000000000000000000000000000000008A :10F68000000000000000000000000000000000007A @@ -28530,32 +28530,32 @@ :10F6A000000000000000000000000000000000005A :10F6B000000000000000000000000000000000004A :10F6C000000000000000000000000000000000003A -:10F6D000000000000000000000800000008000002A -:10F6E000008000000080000000000000000000001A +:10F6D000000000000000000000000000000000002A +:10F6E000000000000000000000000000000000001A :10F6F000000000000000000000000000000000000A :10F7000000000000000000000000000000000000F9 :10F7100000000000000000000000000000000000E9 :10F7200000000000000000000000000000000000D9 :10F7300000000000000000000000000000000000C9 :10F7400000000000000000000000000000000000B9 -:10F75000000000000000000000000020000000C0C9 -:10F760008800000800000002000000000000000007 +:10F7500000000000000000000000000000000000A9 +:10F760000000000000000000000000000000000099 :10F770000000000000000000000000000000000089 :10F780000000000000000000000000000000000079 :10F790000000000000000000000000000000000069 :10F7A0000000000000000000000000000000000059 :10F7B0000000000000000000000000000000000049 :10F7C0000000000000000000000000000000000039 -:10F7D00000000000000000000000010000008800A0 -:10F7E0000000010000888800000000000000000008 +:10F7D0000000000000000000000000000000000029 +:10F7E0000000000000000000000000000000000019 :10F7F0000000000000000000000000000000000009 :10F8000000000000000000000000000000000000F8 :10F8100000000000000000000000000000000000E8 :10F8200000000000000000000000000000000000D8 :10F8300000000000000000000000000000000000C8 :10F8400000000000000000000000000000000000B8 -:10F850000000000000000000000000004100000067 -:10F8600000000300410000800000000000000000D4 +:10F8500000000000000000000000000000000000A8 +:10F860000000000000000000000000000000000098 :10F870000000000000000000000000000000000088 :10F880000000000000000000000000000000000078 :10F890000000000000000000000000000000000068 @@ -28563,7 +28563,7 @@ :10F8B0000000000000000000000000000000000048 :10F8C0000000000000000000000000000000000038 :10F8D0000000000000000000000000000000000028 -:10F8E000000800000000000300210000800000006C +:10F8E0000000000000000000000000000000000018 :10F8F0000000000000000000000000000000000008 :10F9000000000000000000000000000000000000F7 :10F9100000000000000000000000000000000000E7 @@ -28571,7 +28571,7 @@ :10F9300000000000000000000000000000000000C7 :10F9400000000000000000000000000000000000B7 :10F9500000000000000000000000000000000000A7 -:10F96000000000900000000000000000000088007F +:10F960000000000000000000000000000000000097 :10F970000000000000000000000000000000000087 :10F980000000000000000000000000000000000077 :10F990000000000000000000000000000000000067 @@ -28579,32 +28579,32 @@ :10F9B0000000000000000000000000000000000047 :10F9C0000000000000000000000000000000000037 :10F9D0000000000000000000000000000000000027 -:10F9E00000000000000041008221000000004100F2 -:10F9F0008200000000000000000000000000000085 +:10F9E0000000000000000000000000000000000017 +:10F9F0000000000000000000000000000000000007 :10FA000000000000000000000000000000000000F6 :10FA100000000000000000000000000000000000E6 :10FA200000000000000000000000000000000000D6 :10FA300000000000000000000000000000000000C6 :10FA400000000000000000000000000000000000B6 :10FA500000000000000000000000000000000000A6 -:10FA60000000000000000000000000003C3C00001E -:10FA7000F0F00000000000000000000000000000A6 +:10FA60000000000000000000000000000000000096 +:10FA70000000000000000000000000000000000086 :10FA80000000000000000000000000000000000076 :10FA90000000000000000000000000000000000066 :10FAA0000000000000000000000000000000000056 :10FAB0000000000000000000000000000000000046 :10FAC0000000000000000000000000000000000036 :10FAD0000000000000000000000000000000000026 -:10FAE00000000000000000000000000000003C3C9E -:10FAF0000000F0F000000000000000000000000026 +:10FAE0000000000000000000000000000000000016 +:10FAF0000000000000000000000000000000000006 :10FB000000000000000000000000000000000000F5 :10FB100000000000000000000000000000000000E5 :10FB200000000000000000000000000000000000D5 :10FB300000000000000000000000000000000000C5 :10FB400000000000000000000000000000000000B5 :10FB500000000000000000000000000000000000A5 -:10FB600000000000000000000000000000005555EB -:10FB70000000FF0000003C3C00000000000000000E +:10FB60000000000000000000000000000000000095 +:10FB70000000000000000000000000000000000085 :10FB80000000000000000000000000000000000075 :10FB90000000000000000000000000000000000065 :10FBA0000000000000000000000000000000000055 @@ -28612,15 +28612,15 @@ :10FBC0000000000000000000000000000000000035 :10FBD0000000000000000000000000000000000025 :10FBE0000000000000000000000000000000000015 -:10FBF00055550000FF0000003C3C000000000000E4 +:10FBF0000000000000000000000000000000000005 :10FC000000000000000000000000000000000000F4 :10FC100000000000000000000000000000000000E4 :10FC200000000000000000000000000000000000D4 :10FC300000000000000000000000000000000000C4 :10FC400000000000000000000000000000000000B4 :10FC500000000000000000000000000000000000A4 -:10FC600000000000000000000000000005000A087D -:10FC7000050000A815002A08054000A800000000A3 +:10FC60000000000000000000000000000000000094 +:10FC70000000000000000000000000000000000084 :10FC80000000000000000000000000000000000074 :10FC90000000000000000000000000000000000064 :10FCA0000000000000000000000000000000000054 @@ -28669,32 +28669,32 @@ :10FF500000000000000000000000000000000000A1 :10FF60000000000000000000000000000000000091 :10FF70000000000000000000000000000000000081 -:10FF8000000200000002000000000002000000006B +:10FF80000000000000000000000000000000000071 :10FF90000000000000000000000000000000000061 -:10FFA000000200020000000000000000000000024B +:10FFA0000000000000000000000000000000000051 :10FFB0000000000000000000000000000000000041 :10FFC0000000000000000000000000000000000031 :10FFD0000000000000000000000000000000000021 :10FFE0000000000000000000000000000000000011 :10FFF0000000000000000000000000000000000001 :020000040007F3 -:1000000000000000000000000000000002000000EE +:1000000000000000000000000000000000000000F0 :1000100000000000000000000000000000000000E0 :1000200000000000000000000000000000000000D0 :1000300000000000000000000000000000000000C0 :1000400000000000000000000000000000000000B0 :1000500000000000000000000000000000000000A0 :100060000000000000000000000000000000000090 -:100070000000000000000000000000000000000080 -:100080000000000000080000000000000000000068 -:10009000000000000200000000000000000000005E -:1000A0000000000000080000000000000000000048 -:1000B000000000000200000000000000000000003E -:1000C0000000000000000008000000000000000028 -:1000D000000000000000000000000000000002001E -:1000E00002000000000000100000000000000000FE +:100070000000000002000000000000000008000076 +:100080000000000000000000000000000000000070 +:100090000000000000000000000000000008000058 +:1000A0000000000000000000000000000000000050 +:1000B0000000000000000000000000000000000838 +:1000C0000000000000000000000000000000000030 +:1000D00000000000000000000000000000000040E0 +:1000E0000000000000000000000000000000000010 :1000F0000000000000000000000000000000000000 -:1001000000000000000000400000000000000000AF +:1001000000000000000000000000000000000000EF :1001100000000000000000000000000000000000DF :1001200000000000000000000000000000000000CF :1001300000000000000000000000000000000000BF @@ -28711,7 +28711,7 @@ :1001E000000000000000000000000000000000000F :1001F00000000000000000000000000000000000FF :1002000000000000000000000000000000000000EE -:1002100000110000000000000000000000000000CD +:1002100000000000000000000000000000000000DE :1002200000000000000000000000000000000000CE :1002300000000000000000000000000000000000BE :1002400000000000000000000000000000000000AE @@ -28734,8 +28734,8 @@ :10035000000000000000000000000000000000009D :10036000000000000000000000000000000000008D :10037000000000000000000000000000000000007D -:10038000000000000000000000C0400000000084E9 -:1003900000000000000000840000000000000000D9 +:10038000000000000000000000000000000000006D +:10039000000000000000000000000000000000005D :1003A000000000000000000000000000000000004D :1003B000000000000000000000000000000000003D :1003C000000000000000000000000000000000002D @@ -28743,8 +28743,8 @@ :1003E000000000000000000000000000000000000D :1003F00000000000000000000000000000000000FD :1004000000000000000000000000000000000000EC -:1004100000000000000000000002000000000000DA -:1004200000020000000000000000000000000000CA +:1004100000000000000000000000000000000000DC +:1004200000000000000000000000000000000000CC :1004300000000000000000000000000000000000BC :1004400000000000000000000000000000000000AC :10045000000000000000000000000000000000009C @@ -28917,7 +28917,7 @@ :100EC0000000000000000000000000000000000022 :100ED0000000000000000000000000000000000012 :100EE0000000000000000000000000000000000002 -:100EF00000000000000100000000000000000000F1 +:100EF00000000000000000000000000000000000F2 :100F000000000000000000000000000000000000E1 :100F100000000000000000000000000000000000D1 :100F200000000000000000000000000000000000C1 @@ -28929,7 +28929,7 @@ :100F80000000000000000000000000000000000061 :100F90000000000000000000000000000000000051 :100FA0000000000000000000000000000000000041 -:100FB000000000000000000002000000000004002B +:100FB0000000000000000000000000000000000031 :100FC0000000000000000000000000000000000021 :100FD0000000000000000000000000000000000011 :100FE0000000000000000000000000000000000001 @@ -28937,16 +28937,16 @@ :1010000000000000000000000000000000000000E0 :1010100000000000000000000000000000000000D0 :1010200000000000000000000000000000000000C0 -:10103000000000000000000000008400000000002C +:1010300000000000000000000000000000000000B0 :1010400000000000000000000000000000000000A0 -:101050000000000000000000000000000000000090 +:101050000000000000000000000800000000000088 :101060000000000000000000000000000000000080 -:101070000000000000000000000000000000000070 +:101070000000000000000000000800000000000068 :101080000000000000000000000000000000000060 -:101090000000000000000000000000000000000050 +:101090000000000000000000000000080000000048 :1010A0000000000000000000000000000000000040 -:1010B0000000000000000000000000000000000030 -:1010C0002000000000000000000000000000000000 +:1010B0000000000000000000000000080000000028 +:1010C0000000000000000000000000000000000020 :1010D0000000000000000000000000000000000010 :1010E0000000000000000000000000000000000000 :1010F00000000000000000000000000000000000F0 @@ -28962,7 +28962,7 @@ :10119000000000000000000000000000000000004F :1011A000000000000000000000000000000000003F :1011B000000000000000000000000000000000002F -:1011C000000000000000010000000000000000001E +:1011C000000000000000000000000000000000001F :1011D000000000000000000000000000000000000F :1011E00000000000000000000000000000000000FF :1011F00000000000000000000000000000000000EF @@ -28970,7 +28970,7 @@ :1012100000000000000000000000000000000000CE :1012200000000000000000000000000000000000BE :1012300000000000000000000000000000000000AE -:10124000000000000000000004000000000000009A +:10124000000000000000000000000000000000009E :10125000000000000000000000000000000000008E :10126000000000000000000000000000000000007E :10127000000000000000000000000000000000006E @@ -28978,7 +28978,7 @@ :10129000000000000000000000000000000000004E :1012A000000000000000000000000000000000003E :1012B000000000000000000000000000000000002E -:1012C00000000000000000000020000000000000FE +:1012C000000000000000000000000000000000001E :1012D000000000000000000000000000000000000E :1012E00000000000000000000000000000000000FE :1012F00000000000000000000000000000000000EE @@ -28986,7 +28986,7 @@ :1013100000000000000000000000000000000000CD :1013200000000000000000000000000000000000BD :1013300000000000000000000000000000000000AD -:10134000000000000000000000000001000000009C +:10134000000000000000000000000000000000009D :10135000000000000000000000000000000000008D :10136000000000000000000000000000000000007D :10137000000000000000000000000000000000006D @@ -29010,7 +29010,7 @@ :10149000000000000000000000000000000000004C :1014A000000000000000000000000000000000003C :1014B000000000000000000000000000000000002C -:1014C000000000000000000000000000000090008C +:1014C000000000000000000000000000000000001C :1014D000000000000000000000000000000000000C :1014E00000000000000000000000000000000000FC :1014F00000000000000000000000000000000000EC @@ -29018,8 +29018,8 @@ :1015100000000000000000000000000000000000CB :1015200000000000000000000000000000000000BB :1015300000000000000000000000000000000000AB -:10154000000000000000000000000000000011008A -:10155000800000000000000000000000000000000B +:10154000000000000000000000000000000000009B +:10155000000000000000000000000000000000008B :10156000000000000000000000000000000000007B :10157000000000000000000000000000000000006B :10158000000000000000000000000000000000005B @@ -29027,7 +29027,7 @@ :1015A000000000000000000000000000000000003B :1015B000000000000000000000000000000000002B :1015C000000000000000000000000000000000001B -:1015D000000000800000008000000000000000000B +:1015D000000000000000000000000000000000000B :1015E00000000000000000000000000000000000FB :1015F00000000000000000000000000000000000EB :1016000000000000000000000000000000000000DA @@ -29035,7 +29035,7 @@ :1016200000000000000000000000000000000000BA :1016300000000000000000000000000000000000AA :10164000000000000000000000000000000000009A -:10165000000000000020000000C0000000000000AA +:10165000000000000000000000000000000000008A :10166000000000000000000000000000000000007A :10167000000000000000000000000000000000006A :10168000000000000000000000000000000000005A @@ -29043,7 +29043,7 @@ :1016A000000000000000000000000000000000003A :1016B000000000000000000000000000000000002A :1016C000000000000000000000000000000000001A -:1016D00000000000410000888800010000000000B8 +:1016D000000000000000000000000000000000000A :1016E00000000000000000000000000000000000FA :1016F00000000000000000000000000000000000EA :1017000000000000000000000000000000000000D9 @@ -29051,7 +29051,7 @@ :1017200000000000000000000000000000000000B9 :1017300000000000000000000000000000000000A9 :101740000000000000000000000000000000000099 -:1017500000000000000041000080000009000000BF +:101750000000000000000000000000000000000089 :101760000000000000000000000000000000000079 :101770000000000000000000000000000000000069 :101780000000000000000000000000000000000059 @@ -29059,7 +29059,7 @@ :1017A0000000000000000000000000000000000039 :1017B0000000000000000000000000000000000029 :1017C0000000000000000000000000000000000019 -:1017D0000000000000000000001100000080000078 +:1017D0000000000000000000000000000000000009 :1017E00000000000000000000000000000000000F9 :1017F00000000000000000000000000000000000E9 :1018000000000000000000000000000000000000D8 @@ -29067,7 +29067,7 @@ :1018200000000000000000000000000000000000B8 :1018300000000000000000000000000000000000A8 :101840000000000000000000000000000000000098 -:101850000000000000000000000000010000004047 +:101850000000000000000000000000000000000088 :101860000000000000000000000000000000000078 :101870000000000000000000000000000000000068 :101880000000000000000000000000000000000058 @@ -29076,7 +29076,7 @@ :1018B0000000000000000000000000000000000028 :1018C0000000000000000000000000000000000018 :1018D0000000000000000000000000000000000008 -:1018E000070082210000000000000000000000004E +:1018E00000000000000000000000000000000000F8 :1018F00000000000000000000000000000000000E8 :1019000000000000000000000000000000000000D7 :1019100000000000000000000000000000000000C7 @@ -29084,7 +29084,7 @@ :1019300000000000000000000000000000000000A7 :101940000000000000000000000000000000000097 :101950000000000000000000000000000000000087 -:101960000000F0F000000000000000000000000097 +:101960000000000000000000000000000000000077 :101970000000000000000000000000000000000067 :101980000000000000000000000000000000000057 :101990000000000000000000000000000000000047 @@ -29092,7 +29092,7 @@ :1019B0000000000000000000000000000000000027 :1019C0000000000000000000000000000000000017 :1019D0000000000000000000000000000000000007 -:1019E00000000000F0F00000000000000000000017 +:1019E00000000000000000000000000000000000F7 :1019F00000000000000000000000000000000000E7 :101A000000000000000000000000000000000000D6 :101A100000000000000000000000000000000000C6 @@ -29100,7 +29100,7 @@ :101A300000000000000000000000000000000000A6 :101A40000000000000000000000000000000000096 :101A50000000000000000000000000000000000086 -:101A600000000000FFFF0000FFFF0000000000007A +:101A60000000000000000000000000000000000076 :101A70000000000000000000000000000000000066 :101A80000000000000000000000000000000000056 :101A90000000000000000000000000000000000046 @@ -29116,7 +29116,7 @@ :101B300000000000000000000000000000000000A5 :101B40000000000000000000000000000000000095 :101B50000000000000000000000000000000000085 -:101B600000000000000005002A00054000A8000059 +:101B60000000000000000000000000000000000075 :101B70000000000000000000000000000000000065 :101B80000000000000000000000000000000000055 :101B90000000000000000000000000000000000045 @@ -29158,47 +29158,47 @@ :101DD0000000000000000000000000000000000003 :101DE00000000000000000000000000000000000F3 :101DF00000000000000000000000000000000000E3 -:101E000000000000000000000002000000000000D0 +:101E000000000000000000000000000000000000D2 :101E100000000000000000000000000000000000C2 :101E200000000000000000000000000000000000B2 :101E300000000000000000000000000000000000A2 :101E40000000000000000000000000000000000092 :101E50000000000000000000000000000000000082 :101E60000000000000000000000000000000000072 -:101E7000000000000000000000020002000000025C +:101E70000000000000000000000000000000000062 :101E80000000000000000000000000000000000052 -:101E90000000000000000000000000000002000040 +:101E90000000000000000000000000000000000042 :101EA0000000000000000000000000000000000032 :101EB0000000000000000000000000000000000022 :101EC0000000000000000000000000000000000012 :101ED0000000000000000000000000000000000002 :101EE00000000000000000000000000000000000F2 -:101EF00000000000000000000000000000000500DD -:101F000000000400000000000000000000000000CD +:101EF00000000000000000000000000000000000E2 +:101F000000000000000000000000000000000000D1 :101F100000000000000000000000000000000000C1 :101F200000000000000000000000000000000000B1 -:101F3000000000000000000000000000000004009D +:101F300000000000000000000000000000000000A1 :101F40000000000000000000000000000000000091 :101F50000000000000000000000000000000000081 -:101F6000000000000000000004000000000000006D -:101F7000000000000000000000000000000004005D -:101F8000020000000000000000000000000000004F -:101F9000000000000000000000000000000004003D +:101F60000000000000000000000000000000000071 +:101F70000000000000000000000000000000000061 +:101F80000000000000000000000000000000000051 +:101F90000000000000000000000000000000000041 :101FA0000000000000000000000000000000000031 :101FB0000000000000000000000000000000000021 -:101FC000000000000000000000000000000002000F +:101FC0000000000000000000000000000000000011 :101FD0000000000000000000000000000000000001 -:101FE00000000000000000000400000000000000ED -:101FF00000000000000000000000040000000000DD +:101FE00000000000000000000000000000000000F1 +:101FF00000000000000000000000000000000000E1 :1020000000000000000000000000000000000000D0 -:1020100000000004000000000000000000000000BC +:1020100000000000000000000000000000000000C0 :1020200000000000000000000000000000000000B0 :1020300000000000000000000000000000000000A0 :102040000000000000000000000000000000000090 :102050000000000000000000000000000000000080 :102060000000000000000000000000000000000070 :102070000000000000000000000000000000000060 -:102080000000000000A000000000000000000000B0 +:102080000000000000000000000000000000000050 :102090000000000000000000000000000000000040 :1020A0000000000000000000000000000000000030 :1020B0000000000000000000000000000000000020 @@ -29206,7 +29206,7 @@ :1020D0000000000000000000000000000000000000 :1020E00000000000000000000000000000000000F0 :1020F00000000000000000000000000000000000E0 -:1021000000000000000000000000010000000000CE +:1021000000000000000000000000000000000000CF :1021100000000000000000000000000000000000BF :1021200000000000000000000000000000000000AF :10213000000000000000000000000000000000009F @@ -29214,7 +29214,7 @@ :10215000000000000000000000000000000000007F :10216000000000000000000000000000000000006F :10217000000000000000000000000000000000005F -:10218000000000000000000000000000040000004B +:10218000000000000000000000000000000000004F :10219000000000000000000000000000000000003F :1021A000000000000000000000000000000000002F :1021B000000000000000000000000000000000001F @@ -29226,11 +29226,11 @@ :1022100000000000000000000000000000000000BE :1022200000000000000000000000000000000000AE :10223000000000000000000000000000000000009E -:10224000000100000000000000000000000000008D +:10224000000000000000000000000000000000008E :10225000000000000000000000000000000000007E :10226000000000000000000000000000000000006E :10227000000000000000000000000000000000005E -:1022800000000000000000000084000000000000CA +:10228000000000000000000000000000000000004E :10229000000000000000000000000000000000003E :1022A000000000000000000000000000000000002E :1022B000000000000000000000000000000000001E @@ -29239,7 +29239,7 @@ :1022E00000000000000000000000000000000000EE :1022F00000000000000000000000000000000000DE :1023000000000000000000000000000000000000CD -:1023100000000002000000000000000000000000BB +:1023100000000000000000000000000000000000BD :1023200000000000000000000000000000000000AD :10233000000000000000000000000000000000009D :10234000000000000000000000000000000000008D @@ -29279,4103 +29279,6 @@ :10256000000000000000000000000000000000006B :10257000000000000000000000000000000000005B :10258000000000000000000000000000000000004B -:1025900000000000000000000000000000840000B7 -:1025A000000000000000000000000000000000002B -:1025B000000000000000000000000000000000001B -:1025C000000000000000000000000000000000000B -:1025D00000000000000000000000000000000000FB -:1025E00000000000000000000000000000000000EB -:1025F00000000000000000000000000000000000DB -:1026000000000000000000000000000000000000CA -:102610000000000000000000000000008800000032 -:1026200000000000000000000000000000000000AA -:10263000000000000000000000000000000000009A -:10264000000000000000000000000000000000008A -:10265000000000000000000000000000000000007A -:10266000000000000000000000000000000000006A -:10267000000000000000000000000000000000005A -:10268000000000000000000000000000000000004A -:10269000000000000000000000000000000000003A -:1026A000000000000000000000000000000000002A -:1026B000000000000000000000000000000000001A -:1026C000000000000000000000000000000000000A -:1026D00000000000000000000000000000000000FA -:1026E00000000000000000000000000000000000EA -:1026F00000000000000000000000000000000000DA -:1027000000000000000000000000000000000000C9 -:1027100000000000000000000000000000000002B7 -:102720000080000000000000000000000000000029 -:102730000000000000000000000000000000000099 -:102740000000000000000000000000000000000089 -:102750000000000000000000000000000000000079 -:102760000000000000000000000000000000000069 -:102770000000000000000000000000000000000059 -:102780000000000000000000000000000000000049 -:102790000000000000000000000000000000000039 -:1027A0000000009000000000000000000000000099 -:1027B0000000000000000000000000000000000019 -:1027C0000000000000000000000000000000000009 -:1027D00000000000000000000000000000000000F9 -:1027E00000000000000000000000000000000000E9 -:1027F00000000000000000000000000000000000D9 -:1028000000000000000000000000000000000000C8 -:1028100000000000000000000000000000000000B8 -:102820000000000041000000000000000000000067 -:102830000000000000000000000000000000000098 -:102840000000000000000000000000000000000088 -:102850000000000000000000000000000000000078 -:102860000000000000000000000000000000000068 -:102870000000000000000000000000000000000058 -:102880000000000000000000000000000000000048 -:102890000000000000000000000000000000000038 -:1028A0000000000000000000000000000000000028 -:1028B0000000000000000000000000000000000018 -:1028C0000000000000000000000000000000000008 -:1028D00000000000000000000000000000000000F8 -:1028E00000000000000000000000000000000000E8 -:1028F00000000000000000000000000000000000D8 -:1029000000000000000000000000000000000000C7 -:1029100000000000000000000000000000000000B7 -:1029200000000000000000000000000000000000A7 -:102930000000000000000000000000000000000097 -:102940000000000000000000000000000000000087 -:102950000000000000000000000000000000000077 -:102960000000000000000000000000000000000067 -:102970000000000000000000000000000000000057 -:102980000000000000000000000000000000000047 -:102990000000000000000000000000000000000037 -:1029A0000000000000000000000000000000000027 -:1029B0000000000000000000000000000000000017 -:1029C0000000000000000000000000000000000007 -:1029D00000000000000000000000000000000000F7 -:1029E00000000000000000000000000000000000E7 -:1029F00000000000000000000000000000000000D7 -:102A000000000000000000000000000000000000C6 -:102A100000000000000000000000000000000000B6 -:102A2000000000000000000000000000FFFF0000A8 -:102A30000000000000000000000000000000000096 -:102A40000000000000000000000000000000000086 -:102A50000000000000000000000000000000000076 -:102A60000000000000000000000000000000000066 -:102A70000000000000000000000000000000000056 -:102A80000000000000000000000000000000000046 -:102A90000000000000000000000000000000000036 -:102AA0000000000000000000000000000000000026 -:102AB0000000000000000000000000000000000016 -:102AC0000000000000000000000000000000000006 -:102AD00000000000000000000000000000000000F6 -:102AE00000000000000000000000000000000000E6 -:102AF00000000000000000000000000000000000D6 -:102B000000000000000000000000000000000000C5 -:102B100000000000000000000000000000000000B5 -:102B2000000000000000000000000000000000089D -:102B3000050000A8000000000000000000000000E8 -:102B40000000000000000000000000000000000085 -:102B50000000000000000000000000000000000075 -:102B60000000000000000000000000000000000065 -:102B70000000000000000000000000000000000055 -:102B80000000000000000000000000000000000045 -:102B90000000000000000000000000000000000035 -:102BA0000000000000000000000000000000000025 -:102BB0000000000000000000000000000000000015 -:102BC0000000000000000000000000000000000005 -:102BD00000000000000000000000000000000000F5 -:102BE00000000000000000000000000000000000E5 -:102BF00000000000000000000000000000000000D5 -:102C000000000000000000000000000000000000C4 -:102C100000000000000000000000000000000000B4 -:102C200000000000000000000000000000000000A4 -:102C30000000000000000000000000000000000094 -:102C40000000000000000000000000000000000084 -:102C50000000000000000000000000000000000074 -:102C60000000000000000000000000000000000064 -:102C70000000000000000000000000000000000054 -:102C80000000000000000000000000000000000044 -:102C90000000000000000000000000000000000034 -:102CA0000000000000000000000000000000000024 -:102CB0000000000000000000000000000000000014 -:102CC0000000000000000000000000000000000004 -:102CD00000000000000000000000000000000000F4 -:102CE00000000000000000000000000000000000E4 -:102CF00000000000000000000000000000000000D4 -:102D000000000000000000000000000000000000C3 -:102D100000000000000000000000000000000000B3 -:102D200000000000000000000000000000000000A3 -:102D30000000000000000000000000000000000093 -:102D40000000000000000000000000000000000083 -:102D50000000000000000000000000000000000073 -:102D60000000000000000000000000000000000063 -:102D70000000000000000000000000000000000053 -:102D80000000000000000000000000000000000043 -:102D90000000000000000000000000000000000033 -:102DA0000000000000000000000000000000000023 -:102DB0000000000000000000000000000000000013 -:102DC0000000000000000000000000000000000003 -:102DD00000000000000000000000000000000000F3 -:102DE00000000000000000000000000000000000E3 -:102DF00000000000000000000000000000000000D3 -:102E000000000000000000000000000000000000C2 -:102E100000000000000000000000000000000000B2 -:102E200000000000000000000000000000000000A2 -:102E30000000000000000000000000000000000092 -:102E40000000000000000000000000000000000082 -:102E50000000000000000000000000000000000072 -:102E60000000000000000000000000000000000062 -:102E70000000000000000000000000000000000052 -:102E80000000000000000000000000020000000040 -:102E90000000000000000000000000000000000032 -:102EA0000000000000000000000000000000000022 -:102EB0000000000000000000000000000000000012 -:102EC0000000000000000000000000000000000002 -:102ED00000000000000000000000000000000000F2 -:102EE00000000000000000000000000000000000E2 -:102EF00000000000000000000000000000000000D2 -:102F000000000000000000000000000000000000C1 -:102F100000000000000000000000000000000000B1 -:102F200000000000000000000000000000000000A1 -:102F3000000000000000000000000000040000008D -:102F4000000000000400000000000000000000007D -:102F50000000000000000000000000000000000071 -:102F60000000000000000000000000000000000061 -:102F70000000000000000000000000000000000051 -:102F80000000000000000000000000000000000041 -:102F90000000000000000000000000000000000031 -:102FA0000000000000000000000000000000000021 -:102FB0000000000000000000000000000000000011 -:102FC0000000000000000000000000000000000001 -:102FD00000000000000000000000000000000000F1 -:102FE00000000000000000000000000000000000E1 -:102FF00000000000000000000000000000000000D1 -:1030000000000000000000000000000000000000C0 -:1030100000000000000000000000000000000000B0 -:1030200000000000000000000000000000000000A0 -:103030000000000000000000000000000000000090 -:103040000000000000000000000000000000000080 -:103050000000000000000000000000000000000070 -:103060000000000000000000000000000000000060 -:103070000000000000000000000000000000000050 -:103080000000000000000000000000000000000040 -:103090000000000000000000000000000000000030 -:1030A0000000000000000000000000000000000020 -:1030B0000000000000000000000000000000000010 -:1030C0000000000000000000000000000000000000 -:1030D00000000000000000000000000000000000F0 -:1030E00000000000000000000000000000000000E0 -:1030F00000000000000000000000000000000000D0 -:10310000000000000040000000000000000000007F -:1031100000000000000000000000000000000000AF -:10312000000000000000000000000000000000009F -:10313000000000000000000000000000000000008F -:10314000000000000000000000000000000000007F -:10315000000000000000000000000000000000006F -:10316000000000000000000000000000000000005F -:10317000000000000000000000000000000000004F -:10318000000000000000000000000000000000003F -:10319000000000000000000000000000000000002F -:1031A000000000000000000000000000000000001F -:1031B000000000000000000000000000000000000F -:1031C00000000000000000000000000000000000FF -:1031D00000000000000000000000000000000000EF -:1031E00000000000000000000000000000000000DF -:1031F00000000000000000000000000000000000CF -:1032000000000000000000000000000000000000BE -:1032100000000000000000000000000000000000AE -:10322000000000000000000000000000000000009E -:10323000000000000000000000000000000000008E -:1032400000000000000000000000000000000084FA -:10325000000000000000000000000000000000006E -:10326000000000000000000000000000000000005E -:10327000000000000000000000000000000000004E -:10328000000000000000000000000000000000003E -:10329000000000000000000000000000000000002E -:1032A000000000000000000000000000000000001E -:1032B000000000000000000000000000000000000E -:1032C00000000000000000000000000000000000FE -:1032D00000000000000000000002000000000000EC -:1032E00000000000000000000000000000000000DE -:1032F00000000000000000000000000000000000CE -:1033000000000000000000000000000000000000BD -:1033100000000000000000000000000000000000AD -:10332000000000000000000000000000000000009D -:10333000000000000000000000000000000000008D -:10334000000000000000000000000000000000007D -:10335000000000000000000000000000000000006D -:10336000000000000000000000000000000000005D -:10337000000000000000000000000000000000004D -:10338000000000000000000000000000000000003D -:10339000000000000000000000000000000000002D -:1033A000000000000000000000000000000000001D -:1033B000000000000000000000000000000000000D -:1033C00000000000000000000000000000000000FD -:1033D00000000000000000000000000000000000ED -:1033E00000000000000000000000000000000000DD -:1033F00000000000000000000000000000000000CD -:1034000000000000000000000000000000000000BC -:1034100000000000000000000000000000000000AC -:10342000000000000000000000000000000000009C -:10343000000000000000000000000000000000008C -:10344000000000000000000000000000000000007C -:10345000000000000000000000000000000000006C -:10346000000000000000000000000000000000005C -:10347000000000000000000000000000000000004C -:10348000000000000000000000000000000000003C -:10349000000000000000000000000000000000002C -:1034A000000000000000000000000000000000001C -:1034B000000000000000000000000000000000000C -:1034C00000000000000000000000000000000000FC -:1034D00000000000000000000000000000000000EC -:1034E00000000000000000000000000000000000DC -:1034F00000000000000000000000000000000000CC -:1035000000000000000000000000000000000000BB -:1035100000000000000000000000000000000000AB -:10352000000000000000000000000000000000009B -:10353000000000000000000000000000000000008B -:10354000000000000000000000000000000000007B -:10355000000000000000000000000000000000006B -:10356000000000000000000000000000000000005B -:10357000000000000000000000000000000000004B -:10358000000000000000000000000000000000003B -:10359000000000000000000000000000000000002B -:1035A000000000000000000000000000000000001B -:1035B000000000000000000000000000000000000B -:1035C00000000000000000000000000000000000FB -:1035D00000000000000000000000000000000000EB -:1035E00000000000000000000000000000000000DB -:1035F00000000000000000000000000000000000CB -:1036000000000000000000000000000000000000BA -:1036100000000000000000000000000000000000AA -:10362000000000000000000000000000000000009A -:10363000000000000000000000000000000000008A -:10364000000000000000000000000000000000007A -:10365000000000000000000000000000000000006A -:10366000000000000000000000000000000000005A -:10367000000000000000000000000000000000004A -:10368000000000000000000000000000000000003A -:10369000000000000000000000000000000000002A -:1036A000000000000000000000000000000000001A -:1036B000000000000000000000000000000000000A -:1036C00000000000000000000000000000000000FA -:1036D00000000000000000000000000000000000EA -:1036E00000000000000000000000000000000000DA -:1036F00000000000000000000000000000000000CA -:1037000000000000000000000000000000000000B9 -:1037100000000000000000000000000000000000A9 -:103720000000000000000000000000000000000099 -:103730000000000000000000000000000000000089 -:103740000000000000000000000000000000000079 -:103750000000000000000000000000000000000069 -:103760000000000000000000000000000000000059 -:103770000000000000000000000000000000000049 -:103780000000000000000000000000000000000039 -:103790000000000000000000000000000000000029 -:1037A0000000000000000000000000000000000019 -:1037B0000000000000000000000000000000000009 -:1037C00000000000000000000000000000000000F9 -:1037D00000000000000000000000000000000000E9 -:1037E00000000000000000000000000000000000D9 -:1037F00000000000000000000000000000000000C9 -:1038000000000000000000000000000000000000B8 -:1038100000000000000000000000000000000000A8 -:103820000000000000000000000000000000000098 -:103830000000000000000000000000000000000088 -:103840000000000000000000000000000000000078 -:103850000000000000000000000000000000000068 -:103860000000000000000000000000000000000058 -:103870000000000000000000000000000000000048 -:103880000000000000000000000000000000000038 -:103890000000000000000000000000000000000028 -:1038A0000000000000000000000000000000000018 -:1038B0000000000000000000000000000000000008 -:1038C00000000000000000000000000000000000F8 -:1038D00000000000000000000000000000000000E8 -:1038E00000000000000000000000000000000000D8 -:1038F00000000000000000000000000000000000C8 -:1039000000000000000000000000000000000000B7 -:1039100000000000000000000000000000000000A7 -:103920000000000000000000000000000000000097 -:103930000000000000000000000000000000000087 -:103940000000000000000000000000000000000077 -:103950000000000000000000000000000000000067 -:103960000000000000000000000000000000000057 -:103970000000000000000000000000000000000047 -:103980000000000000000000000000000000000037 -:103990000000000000000000000000000000000027 -:1039A0000000000000000000000000000000000017 -:1039B0000000000000000000000000000000000007 -:1039C00000000000000000000000000000000000F7 -:1039D00000000000000000000000000000000000E7 -:1039E00000000000000000000000000000000000D7 -:1039F00000000000000000000000000000000000C7 -:103A000000000000000000000000000000000000B6 -:103A100000000000000000000000000000000000A6 -:103A20000000000000000000000000000000000096 -:103A30000000000000000000000000000000000086 -:103A40000000000000000000000000000000000076 -:103A50000000000000000000000000000000000066 -:103A60000000000000000000000000000000000056 -:103A70000000000000000000000000000000000046 -:103A80000000000000000000000000000000000036 -:103A90000000000000000000000000000000000026 -:103AA0000000000000000000000000000000000016 -:103AB0000000000000000000000000000000000006 -:103AC00000000000000000000000000000000000F6 -:103AD00000000000000000000000000000000000E6 -:103AE00000000000000000000000000000000000D6 -:103AF00000000000000000000000000000000000C6 -:103B000000000000000000000000000000000000B5 -:103B100000000000000000000000000000000000A5 -:103B20000000000000000000000000000000000095 -:103B30000000000000000000000000000000000085 -:103B40000000000000000000000000000000000075 -:103B50000000000000000000000000000000000065 -:103B60000000000000000000000000000000000055 -:103B70000000000000000000000000000000000045 -:103B80000000000000000000000000000000000035 -:103B90000000000000000000000000000000000025 -:103BA0000000000000000000000000000000000015 -:103BB0000000000000000000000000000000000005 -:103BC00000000000000000000000000000000000F5 -:103BD00000000000000000000000000000000000E5 -:103BE00000000000000000000000000000000000D5 -:103BF00000000000000000000000000000000000C5 -:103C000000000000000000000000000000000000B4 -:103C100000000000000000000000000000000000A4 -:103C20000000000000000000000000000000000094 -:103C30000000000000000000000000000000000084 -:103C40000000000000000000000000000000000074 -:103C50000000000000000000000000000000000064 -:103C60000000000000000000000000000000000054 -:103C70000000000000000000000000000000000044 -:103C80000000000000000000000000000000000034 -:103C90000000000000000000000000000000000024 -:103CA0000000000000000000000000000000000014 -:103CB0000000000000000000000000000000000004 -:103CC00000000000000000000000000000000000F4 -:103CD00000000000000000000000000000000000E4 -:103CE00000000000000000000000000000000000D4 -:103CF00000000000000000000000000000000000C4 -:103D000000000000000000000000000000000000B3 -:103D100000000000000000000000000000000000A3 -:103D20000000000000000000000000020000000091 -:103D30000000000000000000000000000000000083 -:103D40000000000000000000000000000000000073 -:103D50000000000000000000000000000000000063 -:103D60000000000000000000000000000000000053 -:103D7000000000000002000000020000000000023D -:103D80000000000000000000000000000000000033 -:103D9000000000000002000200000000000000001F -:103DA0000000000200000000000000000000000011 -:103DB0000000000000000000000000000000000003 -:103DC00000000000000000000000000000000000F3 -:103DD00000000000000000000000000000000000E3 -:103DE00000000000000000000000000000000000D3 -:103DF00000000000000000000000000000000000C3 -:103E000002000000000000000400000000000000AC -:103E100000000000000000000000000000000000A2 -:103E20000000000000000000000000000000000092 -:103E30000000000000000000000000000000000082 -:103E40000000000000000000000000000000000072 -:103E50000000000000000000000000000000000062 -:103E60000000000000000000000000000000000052 -:103E7000000000000000000004000000000000003E -:103E8000000000000000000004000000000000002E -:103E90000000000000000000000000000000000022 -:103EA0000000000000000000000000000000000012 -:103EB0000000000000000000000000000000000002 -:103EC00000000000000000000000000000000000F2 -:103ED00000000000000000000400000000000000DE -:103EE00000000000000000000000000000000000D2 -:103EF00000000000000000000000000000000000C2 -:103F000000000000000000000000000000000400AD -:103F100000000000000000000000000000000000A1 -:103F20000000000000000000000000000000000091 -:103F30000000000000000000000000000000000081 -:103F40000000000000000000000000000000000071 -:103F50000000000000000000000000000000000061 -:103F60000000000000000000000000000000000051 -:103F70000000000000000000000000000000000041 -:103F80000000000000000000000000000000000031 -:103F90000000000000000000000000000000000021 -:103FA0000000000000000000000000000000000011 -:103FB0000000000000000000000000000000000001 -:103FC00000000000000000000000000000000000F1 -:103FD00000000000000000000000000000000000E1 -:103FE00000000000000000000000000000000000D1 -:103FF00000000000000000000000000000000000C1 -:1040000000000000000000000000000000000000B0 -:1040100000000000000000000000000000000000A0 -:104020000000000000000000000000000000000090 -:104030000000000000000000000000000000000080 -:10404000004000000000010000000000000000002F -:104050000000000000000000000000000000000060 -:104060000000000000000000000000000000000050 -:104070000000000000000000000000000000000040 -:10408000000000000000000000002100000000000F -:104090000000000000000000000000000000000020 -:1040A0000000000000000000000000000000000010 -:1040B0000000000000000000000000000000000000 -:1040C00000000001000000000400000000000000EB -:1040D00000000000000000000000000000000000E0 -:1040E00000000000000000000000000000000000D0 -:1040F00000000000000000000000000000000000C0 -:1041000000000000000000000000000000000000AF -:10411000000000000000000000000000000000009F -:10412000000000000000000000000000000000008F -:10413000000000000000000000000000A0000000DF -:10414000000000000000000000200000000000004F -:10415000000000000000000000000000000000005F -:10416000000000000000000000000000000000004F -:10417000000000000000000000000000000000003F -:10418000000000000000000000000000000000002F -:10419000000000000000000000000000000000001F -:1041A000000000000000000000000000000000000F -:1041B00000000000000000000000000000000000FF -:1041C00000000000000000000000000100000000EE -:1041D00000000000000000000000000000000000DF -:1041E00000000000000000000000000000000000CF -:1041F00000000000000000000000000000000000BF -:10420000000000000000000082000000000000002C -:10421000000000000000000000000000000000009E -:10422000000000000000000000000000000000008E -:10423000000000000000040000000000000000007A -:10424000000000000000000000000000000000006E -:10425000000000000000000000000000000000005E -:10426000000000000000000000000000000000004E -:10427000000000000000000000000000000000003E -:10428000000000000000000000000000000000002E -:10429000000000000000000000000000000000001E -:1042A000000000000000000000000000000000000E -:1042B00000000000000000000000000000000000FE -:1042C00000000000000000000000000000000000EE -:1042D00000000000000000000000000000000000DE -:1042E00000000000000000000000000000000000CE -:1042F00000000000000000000000000000000000BE -:1043000000000000000000000000000000000000AD -:10431000000000000000000000000000000000009D -:10432000000000000000000000000000000000008D -:10433000000000000000000000000000000000007D -:1043400000000000000000000000000000009000DD -:10435000000000000000000000000000000000005D -:10436000000000000000000000000000000000004D -:10437000000000000000000000000000000000003D -:10438000000000000000000000000000000000002D -:10439000000000000000000000000000000000001D -:1043A000000000000000000000000000000000000D -:1043B00000000000000000000000000000000000FD -:1043C00000000000000000000000000000001100DC -:1043D000800000000000000000000000000000005D -:1043E00000000000000000000000000000000000CD -:1043F00000000000000000000000000000000000BD -:1044000000000000000000000000000000000000AC -:10441000000000000000000000000000000000009C -:10442000000000000000000000000000000000008C -:10443000000000000000000000000000000000007C -:10444000000000000000000000000000000000006C -:10445000000000800000008000000000000000005C -:10446000000000000000000000000000000000004C -:10447000000000000000000000000000000000003C -:10448000000000000000000000000000000000002C -:10449000000000000000000000000000000000001C -:1044A000000000000000000000000000000000000C -:1044B00000000000000000000000000000000000FC -:1044C00000000000000000000000000000000000EC -:1044D00000000000002000000002000000000000BA -:1044E00000000000000000000000000000000000CC -:1044F00000000000000000000000000000000000BC -:1045000000000000000000000000000000000000AB -:10451000000000000000000000000000000000009B -:10452000000000000000000000000000000000008B -:10453000000000000000000000000000000000007B -:10454000000000000000000000000000000000006B -:10455000000000000100008888000000000000004A -:10456000000000000000000000000000000000004B -:10457000000000000000000000000000000000003B -:10458000000000000000000000000000000000002B -:10459000000000000000000000000000000000001B -:1045A000000000000000000000000000000000000B -:1045B00000000000000000000000000000000000FB -:1045C00000000000000000000000000000000000EB -:1045D000000000000000410000800000000000001A -:1045E00000000000000000000000000000000000CB -:1045F00000000000000000000000000000000000BB -:1046000000000000000000000000000000000000AA -:10461000000000000000000000000000000000009A -:10462000000000000000000000000000000000008A -:10463000000000000000000000000000000000007A -:10464000000000000000000000000000000000006A -:1046500000000000000000000011000000800000C9 -:10466000000000000000000000000000000000004A -:10467000000000000000000000000000000000003A -:10468000000000000000000000000000000000002A -:10469000000000000000000000000000000000001A -:1046A000000000000000000000000000000000000A -:1046B00000000000000000000000000000000000FA -:1046C00000000000000000000000000000000000EA -:1046D0000000000000000000000000010000004099 -:1046E00000000000000000000000000000000000CA -:1046F00000000000000000000000000000000000BA -:1047000000000000000000000000000000000000A9 -:104710000000000000000000000000000000000099 -:104720000000000000000000000000000000000089 -:104730000000000000000000000000000000000079 -:104740000000000000000000000000000000000069 -:104750000000000000000000000000000000000059 -:1047600007008200000000000000000000000000C0 -:104770000000000000000000000000000000000039 -:104780000000000000000000000000000000000029 -:104790000000000000000000000000000000000019 -:1047A0000000000000000000000000000000000009 -:1047B00000000000000000000000000000000000F9 -:1047C00000000000000000000000000000000000E9 -:1047D00000000000000000000000000000000000D9 -:1047E00000000000F0F000000000000000000000E9 -:1047F00000000000000000000000000000000000B9 -:1048000000000000000000000000000000000000A8 -:104810000000000000000000000000000000000098 -:104820000000000000000000000000000000000088 -:104830000000000000000000000000000000000078 -:104840000000000000000000000000000000000068 -:104850000000000000000000000000000000000058 -:10486000000000000000F0F0000000000000000068 -:104870000000000000000000000000000000000038 -:104880000000000000000000000000000000000028 -:104890000000000000000000000000000000000018 -:1048A0000000000000000000000000000000000008 -:1048B00000000000000000000000000000000000F8 -:1048C00000000000000000000000000000000000E8 -:1048D00000000000000000000000000000000000D8 -:1048E00000000000000000000000000000000000C8 -:1048F00000000000000000000000000000000000B8 -:1049000000000000000000000000000000000000A7 -:104910000000000000000000000000000000000097 -:104920000000000000000000000000000000000087 -:104930000000000000000000000000000000000077 -:104940000000000000000000000000000000000067 -:104950000000000000000000000000000000000057 -:104960000000000000000000FFFF00000000000049 -:104970000000000000000000000000000000000037 -:104980000000000000000000000000000000000027 -:104990000000000000000000000000000000000017 -:1049A0000000000000000000000000000000000007 -:1049B00000000000000000000000000000000000F7 -:1049C00000000000000000000000000000000000E7 -:1049D00000000000000000000000000000000000D7 -:1049E00000000000000000000000000000000000C7 -:1049F00000000000000000000000000000000000B7 -:104A000000000000000000000000000000000000A6 -:104A10000000000000000000000000000000000096 -:104A20000000000000000000000000000000000086 -:104A30000000000000000000000000000000000076 -:104A40000000000000000000000000000000000066 -:104A50000000000000000000000000000000000056 -:104A6000000000000000000005000A00054000A84A -:104A70000000000000000000000000000000000036 -:104A80000000000000000000000000000000000026 -:104A90000000000000000000000000000000000016 -:104AA0000000000000000000000000000000000006 -:104AB00000000000000000000000000000000000F6 -:104AC00000000000000000000000000000000000E6 -:104AD00000000000000000000000000000000000D6 -:104AE00000000000000000000000000000000000C6 -:104AF00000000000000000000000000000000000B6 -:104B000000000000000000000000000000000000A5 -:104B10000000000000000000000000000000000095 -:104B20000000000000000000000000000000000085 -:104B30000000000000000000000000000000000075 -:104B40000000000000000000000000000000000065 -:104B50000000000000000000000000000000000055 -:104B60000000000000000000000000000000000045 -:104B70000000000000000000000000000000000035 -:104B80000000000000000000000000000000000025 -:104B90000000000000000000000000000000000015 -:104BA0000000000000000000000000000000000005 -:104BB00000000000000000000000000000000000F5 -:104BC00000000000000000000000000000000000E5 -:104BD00000000000000000000000000000000000D5 -:104BE00000000000000000000000000000000000C5 -:104BF00000000000000000000000000000000000B5 -:104C000000000000000000000000000000000000A4 -:104C10000000000000000000000000000000000094 -:104C20000000000000000000000000000000000084 -:104C30000000000000000000000000000000000074 -:104C40000000000000000000000000000000000064 -:104C50000000000000000000000000000000000054 -:104C60000000000000000000000000000000000044 -:104C70000000000000000000000000000000000034 -:104C80000000000000000000000000000000000024 -:104C90000000000000000000000000000000000014 -:104CA00000000000000000000000000000002000E4 -:104CB00000000000000000000000000000000000F4 -:104CC00000000000000000000000000000000000E4 -:104CD00000000000000000000000000000000000D4 -:104CE00000000000000000000001000000000000C3 -:104CF00000000000000000000000000000000000B4 -:104D000000000000000000000000000000000000A3 -:104D10000000000000000000000000000000000093 -:104D20000000000000000000000000000000000083 -:104D30000000000000000000000000000000000073 -:104D40000000000000000000000000000000000063 -:104D50000000000000000000000000000000000053 -:104D60000000000000000000000000000000000043 -:104D70000000000000000000000000000000000033 -:104D80000000000000000000000000000000000023 -:104D90000000000000000000000000000000000013 -:104DA0000000000000000000000000000000000003 -:104DB00004000000000000000000000000000000EF -:104DC00000000000000000000000000000000000E3 -:104DD00000000000000000000000000002000000D1 -:104DE00000000000000000000000000000000000C3 -:104DF00000000000000000000000000000000000B3 -:104E000000000000000000000000000000000000A2 -:104E10000000000000000000000000000000000092 -:104E20000000000000000000000000000000020080 -:104E3000040000000200000000000000000000006C -:104E4000000000000000040000000000000004005A -:104E500000000000000000000000000000008000D2 -:104E60000000000000000000000000000000000042 -:104E70000000000000000000000000000000000032 -:104E80000000000000000000000000000000000022 -:104E90000000000000000000000000000000000012 -:104EA0000000000000000000000000000000000002 -:104EB00000000000000000000000000000000000F2 -:104EC00000000000000000000000000000000000E2 -:104ED00000000000000000000000000000000000D2 -:104EE00000000000000000000000000000000000C2 -:104EF00000000000000000000000000000000000B2 -:104F000000000000000000000000000000000000A1 -:104F10000000000000000000000000000000000091 -:104F20000000000000000000000000000000000081 -:104F30000000000000000000000000000000000071 -:104F40000000000000000000000000000000000061 -:104F50000000000000000000000000000000000051 -:104F60000000000000000000000000000000000041 -:104F70000000000000000000000000000000000031 -:104F80000000000000000000000000000000000021 -:104F90000000000000000000000000000000000011 -:104FA0000000000000000000000000000000000001 -:104FB00000000000000000000000000000000000F1 -:104FC00000000000000000000000000000000000E1 -:104FD00000000000000000000000080000000000C9 -:104FE00000000000000000000000010000000000C0 -:104FF00000000000000000000000000000000000B1 -:1050000000000000000000000000000000000000A0 -:105010000000000000000000000000000000000090 -:105020000000000000000000000000000000000080 -:105030000000000000000000000000000000000070 -:105040000000000000000000000000001000000050 -:105050000000000000000000000000000000000050 -:10506000000000000000000000000000040000003C -:105070000000000000000000000000000000000030 -:105080000000000000000000000000000000000020 -:105090000000000000000000000000000000000010 -:1050A0000000000000000000000000000000000000 -:1050B00000000000000000000000000000000000F0 -:1050C00000000000000000000000000000000000E0 -:1050D00000000000000000000000000000000000D0 -:1050E00000000000000000000000000000200000A0 -:1050F00000000000000000000000000000000000B0 -:10510000000000000000000000000000000000009F -:10511000000000000000000000000000000000008F -:10512000000000000000000000000000000000007F -:10513000000000000000000000000000000000006F -:10514000000000000000000000000000000000005F -:10515000000000000000000000000000000000004F -:10516000000000000000000000000000000000013E -:10517000000000000000000000000000000000002F -:10518000000000000000000000000084000000009B -:10519000000000000000000000000000000000000F -:1051A00000000000000000000000000000000000FF -:1051B00000000000000000000000000000000000EF -:1051C00000000000000000000000000000000000DF -:1051D00000000000000000000000000000000000CF -:1051E00000000000000000000000000000000000BF -:1051F00000000000000000000000000000000000AF -:10520000000000000000000000000000000000009E -:10521000000000000002000000000000000000008C -:10522000000000000000000000000000000000007E -:10523000000000000000000000000000000000006E -:10524000000000000000000000000000000000005E -:10525000000000000000000000020000000000004C -:10526000000000000000000000000000000000003E -:10527000000000000000000000000000000000002E -:1052800000000000000000002000000000000000FE -:10529000000000000000000000000000000000000E -:1052A00000000000000000000000000000000000FE -:1052B00000000000000000000000000000000000EE -:1052C00000000000000000000000000000000000DE -:1052D00000000000000000000000000000000000CE -:1052E00000000000000000000000000000000000BE -:1052F00000009000000000400000000000000000DE -:10530000000000000000000000000000000000009D -:10531000000000000000000000000000000000008D -:10532000000000000000000000000000000000007D -:10533000000000000000000000000000000000006D -:10534000000000000000000000000000000000005D -:10535000000000000000000000000000000000004D -:10536000000000000000000000000000000000003D -:10537000000011008000000000000000000000009C -:10538000000000000000000000000000000000001D -:10539000000000000000000000000000000000000D -:1053A00000000000000000000000000000000000FD -:1053B00000000000000000000000000000000000ED -:1053C00000000000000000000000000000000000DD -:1053D00000000000000000000000000000000000CD -:1053E00000000000000000000000000000000000BD -:1053F00000000000000000800000008000000000AD -:10540000000000000000000000000000000000009C -:10541000000000000000000000000000000000008C -:10542000000000000000000000000000000000007C -:10543000000000000000000000000000000000006C -:10544000000000000000000000000000000000005C -:10545000000000000000000000000000000000004C -:10546000000000000000000000000000000000003C -:1054700000000000000000000020000000C000004C -:10548000000000000000000000000000000000001C -:10549000000000000000000000000000000000000C -:1054A00000000000000000000000000000000000FC -:1054B00000000000000000000000000000000000EC -:1054C00000000000000000000000000000000000DC -:1054D00000000000000000000000000000000000CC -:1054E00000000000000000000000000000000000BC -:1054F000000000000000000001000088880001009A -:10550000000000000000000000000000000000009B -:10551000000000000000000000000000000000008B -:10552000000000000000000000000000000000007B -:10553000000000000000000000000000000000006B -:10554000000000000000000000000000000000005B -:10555000000000000000000000000000000000004B -:10556000000000000000000000000000000000003B -:10557000000000000000000000004100008000006A -:105580000900000000000000000000000000000012 -:10559000000000000000000000000000000000000B -:1055A00000000000000000000000000000000000FB -:1055B00000000000000000000000000000000000EB -:1055C00000000000000000000000000000000000DB -:1055D00000000000000000000000000000000000CB -:1055E00000000000000000000000000000000000BB -:1055F000000000000000000000000000001100009A -:10560000008000000000000000000000000000001A -:10561000000000000000000000000000000000008A -:10562000000000000000000000000000000000007A -:10563000000000000000000000000000000000006A -:10564000000000000000000000000000000000005A -:10565000000000000000000000000000000000004A -:10566000000000000000000000000000000000003A -:105670000000000000000000000000000000000129 -:1056800000000040000000000000000000000000DA -:10569000000000000000000000000000000000000A -:1056A00000000000000000000000000000000000FA -:1056B00000000000000000000000000000000000EA -:1056C00000000000000000000000000000000000DA -:1056D00000000000000000000000000000000000CA -:1056E00000000000000000000000000000000000BA -:1056F00000000000000000000000000000000000AA -:1057000000000000070082210000000000000000EF -:105710000000000000000000000000000000000089 -:105720000000000000000000000000000000000079 -:105730000000000000000000000000000000000069 -:105740000000000000000000000000000000000059 -:105750000000000000000000000000000000000049 -:105760000000000000000000000000000000000039 -:105770000000000000000000000000000000000029 -:10578000000000000000F0F0000000000000000039 -:105790000000000000000000000000000000000009 -:1057A00000000000000000000000000000000000F9 -:1057B00000000000000000000000000000000000E9 -:1057C00000000000000000000000000000000000D9 -:1057D00000000000000000000000000000000000C9 -:1057E00000000000000000000000000000000000B9 -:1057F00000000000000000000000000000000000A9 -:105800000000000000000000F0F0000000000000B8 -:105810000000000000000000000000000000000088 -:105820000000000000000000000000000000000078 -:105830000000000000000000000000000000000068 -:105840000000000000000000000000000000000058 -:105850000000000000000000000000000000000048 -:105860000000000000000000000000000000000038 -:105870000000000000000000000000000000000028 -:1058800000000000000000003C3C0000FFFF0000A2 -:105890000000000000000000000000000000000008 -:1058A00000000000000000000000000000000000F8 -:1058B00000000000000000000000000000000000E8 -:1058C00000000000000000000000000000000000D8 -:1058D00000000000000000000000000000000000C8 -:1058E00000000000000000000000000000000000B8 -:1058F00000000000000000000000000000000000A8 -:10590000000000000000000000003C3C000000001F -:105910000000000000000000000000000000000087 -:105920000000000000000000000000000000000077 -:105930000000000000000000000000000000000067 -:105940000000000000000000000000000000000057 -:105950000000000000000000000000000000000047 -:105960000000000000000000000000000000000037 -:105970000000000000000000000000000000000027 -:105980000000000000000000000005002A000540A3 -:1059900000A800000000000000000000000000005F -:1059A00000000000000000000000000000000000F7 -:1059B00000000000000000000000000000000000E7 -:1059C00000000000000000000000000000000000D7 -:1059D00000000000000000000000000000000000C7 -:1059E00000000000000000000000000000000000B7 -:1059F00000000000000000000000000000000000A7 -:105A00000000000000000000000000000000000096 -:105A10000000000000000000000000000000000086 -:105A20000000000000000000000000000000000076 -:105A30000000000000000000000000000000000066 -:105A40000000000000000000000000000000000056 -:105A50000000000000000000000000000000000046 -:105A60000000000000000000000000000000000036 -:105A70000000000000000000000000000000000026 -:105A80000000000000000000000000000000000016 -:105A90000000000000000000000000000000000006 -:105AA00000000000000000000000000000000000F6 -:105AB00000000000000000000000000000000000E6 -:105AC00000000000000000000000000000000000D6 -:105AD00000000000000000000000000000000000C6 -:105AE00000000000000000000000000000000000B6 -:105AF00000000000000000000000000000000000A6 -:105B00000000000000000000000000000000000095 -:105B10000000000000000000000000000000000085 -:105B20000000000000000000000000000000000075 -:105B30000000000000000000000000000000000065 -:105B40000000000000000000000000000000000055 -:105B50000000000000000000000000000000000045 -:105B60000000000000000000000000000000000035 -:105B70000000000000000000000000000000000025 -:105B80000000000000000000000000000000000015 -:105B90000000000000000000000000000000000005 -:105BA00000000000000000000000000000000000F5 -:105BB00000000000000000000000000000000000E5 -:105BC00000000000000000000000000000000000D5 -:105BD00000000000000000000000000000000000C5 -:105BE00000000000000000000000000000000000B5 -:105BF0000000020000000000000000000080000023 -:105C00000000000000000000000000000000000094 -:105C10000000000000000000000000000000000084 -:105C20000000000000000000000000000000000074 -:105C30000000000000000000000000000000000064 -:105C40000000000000000000000000000000000054 -:105C50000000000000000000000000000000000044 -:105C60000000000000000002000000000090009012 -:105C70000000009000000000000000000000004054 -:105C80000000000000000000000000000000000014 -:105C90000090000000000000000000000000000074 -:105CA00000000000000000000000000000000000F4 -:105CB00000000000000000000000000000000000E4 -:105CC00000000000000000000000000000000000D4 -:105CD00000000000000000000000000000000000C4 -:105CE00000000000000000000000000000000000B4 -:105CF00000000200000000000000000000000000A2 -:105D00000000000088008800000000000000000083 -:105D10000000000000000000000000000000000083 -:105D20000000000000000000000000000000000073 -:105D30000000000000000000000000000000000063 -:105D40000000000000000000000000000000000053 -:105D50000000000000000000000000000200000041 -:105D6000040000000000000090000000000000009F -:105D70000000000000000000000000000000000023 -:105D800000000400000041000000000000000000CE -:105D900000000000000000002000000000000000E3 -:105DA0000000000000000090000000000000000063 -:105DB00000000000000000000000000800000000DB -:105DC00000000000000000000000000000000000D3 -:105DD00000000000000000000000000400000000BF -:105DE00000000000000000000000000000000000B3 -:105DF00000000000000000000000000000000000A3 -:105E00000000000000000000000000000000000092 -:105E10000000000000000000000000000000000082 -:105E20000000000000000000000000000000000072 -:105E30000000000000000000000000000000000062 -:105E40000000000000000000000000000000000052 -:105E50000000000000000000000000000000000042 -:105E60000000000000000000000000000000000032 -:105E70000000000000000000000000000000000022 -:105E80000000000000000000000000000000000012 -:105E90000000000000000000000000000000000002 -:105EA00000000000000000000000000000000000F2 -:105EB00000000000000000000000000000000000E2 -:105EC00000000000000000000000000000000000D2 -:105ED00000000000000000000000000000000000C2 -:105EE00000000000000000000000000000000000B2 -:105EF00010000000C00000000000000008000800C2 -:105F00000000000000000000000000000000000091 -:105F10000000000000000000000000000000000081 -:105F20000000000000000000000000000000000071 -:105F30000000000000000000000000000000000061 -:105F40000000000000000000000000000000000051 -:105F50000000000000000000000000000000000041 -:105F60000000000000000000000000000000000031 -:105F7000000000000000030000000000000000001E -:105F80000000000000000000000000000000090008 -:105F90000000000000000000000000000000000001 -:105FA00000000000000000000000000000000000F1 -:105FB00000000000000000001000000000000000D1 -:105FC00000000000000000000000000000000000D1 -:105FD00000000000000000000000000000000000C1 -:105FE00000000000000000000000000000000000B1 -:105FF00000000000000000000000000000000000A1 -:106000000000100000000000C000000000000000C0 -:106010000008000000000000000000050000000073 -:106020000000004000000000000000000000000030 -:106030000000000000000000000000000000000060 -:106040000000000000000000000000000000000050 -:106050000000000000000000000000000000000040 -:106060000000000000000000000000000000000030 -:106070000000000000000000000000000000000020 -:106080000000000000000000000000000000000010 -:106090000000000000000000000000000000000000 -:1060A000000000000000000000000000008400006C -:1060B00000000000000000000000000000000000E0 -:1060C00000000000000000000000000000000000D0 -:1060D00000000000000000000000000000000000C0 -:1060E00000000000000000000000000000000000B0 -:1060F00000000000000000000000000000000000A0 -:10610000000000000000000082000000820000008B -:10611000000000000000000000030000000000007C -:106120000000000000000008000000000000000067 -:10613000000000000000000200000000000000005D -:10614000000000000000000000000000000000004F -:10615000000000000000000000000000000000003F -:10616000000000000000000000000000000000002F -:10617000000000000000000000000000000000001F -:106180000000000000000000000000000000080007 -:1061900000000000000000000000000000000000FF -:1061A00000000400000000000000000000000000EB -:1061B00000000000000000000000000000000000DF -:1061C000000000002040000000001100000000005E -:1061D00000000000000000000000000000000000BF -:1061E00000000000000000000000000000000000AF -:1061F000000000000000000000000000000000009F -:10620000000000000000000000000000000000008E -:106210000000000010080002004090400000000054 -:10622000000000000000000000000000000000006E -:10623000000000000000000000000000000000005E -:10624000000000000000000000000000000000004E -:10625000000000000000000000000000000000003E -:10626000000000000000000000000000000000002E -:10627000000000000000000000000000000000001E -:10628000000000000000000000000000000000000E -:10629000000000000000808000800000000000007E -:1062A00000000000000000000000000000000000EE -:1062B00000000000000000000000000000000000DE -:1062C00000000000000000000000000000000000CE -:1062D00000000000000000000000000000000000BE -:1062E00000000000000000000000000000000000AE -:1062F000000000000000000000000000000000009E -:10630000000000000000000000000000000000008D -:10631000000000000000000000000090008000006D -:10632000000000000000000000000000000000006D -:10633000000000000000000000000000000000005D -:10634000000000000000000000000000000000004D -:10635000000000000000000000000000000000003D -:10636000000000000000000000000000000000002D -:10637000000000000000000000000000000000001D -:10638000000000000000000000000000000000000D -:1063900000000000000000000000100020839004B6 -:1063A00040C00000000000000000000000000000ED -:1063B00000000000000000000000000000000000DD -:1063C00000000000000000000000000000000000CD -:1063D00000000000000000000000000000000000BD -:1063E00000000000000000000000000000000000AD -:1063F000000000000000000000000000000000009D -:10640000000000000000000000000000000000008C -:1064100000000000000000000000000010080088DC -:10642000204082400000000000000000000000004A -:10643000000000000000000000000000000000005C -:10644000000000000000000000000000000000004C -:10645000000000000000000000000000000000003C -:10646000000000000000000000000000000000002C -:10647000000000000000000000000000000000001C -:10648000000000000000000000000000000000000C -:10649000000000000000000000000000000080007C -:1064A00000000000000000000000000000000000EC -:1064B00000000000000000000000000000000000DC -:1064C00000000000000000000000000000000000CC -:1064D00000000000000000000000000000000000BC -:1064E00000000000000000000000000000000000AC -:1064F000000000000000000000000000000000009C -:10650000000000000000000000000000000000008B -:10651000000000000000000000000000000000007B -:1065200080000000000000000000000000000000EB -:10653000000000000000000000000000000000005B -:10654000000000000000000000000000000000004B -:10655000000000000000000000000000000000003B -:10656000000000000000000000000000000000002B -:10657000000000000000000000000000000000001B -:10658000000000000000000000000000000000000B -:1065900000000000000000000000000000000000FB -:1065A00000000400404040082000000000000000FF -:1065B00000000000000000000000000000000000DB -:1065C00000000000000000000000000000000000CB -:1065D00000000000000000000000000000000000BB -:1065E00000000000000000000000000000000000AB -:1065F000000000000000000000000000000000009B -:10660000000000000000000000000000000000008A -:10661000000000000000000000000000000000007A -:10662000000000000000000000000000000000006A -:10663000000000000000000000000000000000005A -:10664000000000000000000000000000000000004A -:10665000000000000000000000000000000000003A -:10666000000000000000000000000000000000002A -:10667000000000000000000000000000000000001A -:10668000000000000000000000000000000000000A -:1066900000000000000000000000000000000000FA -:1066A00000000000000090C09FC00F0099C30000D0 -:1066B00000000000000000000000000000000000DA -:1066C00000000000000000000000000000000000CA -:1066D00000000000000000000000000000000000BA -:1066E00000000000000000000000000000000000AA -:1066F000000000000000000000000000000000009A -:106700000000000000000000000000000000000089 -:106710000000000000000000000000000000000079 -:10672000000000000000000090CF9FCF0FFF99C332 -:106730000000000000000000000000000000000059 -:106740000000000000000000000000000000000049 -:106750000000000000000000000000000000000039 -:106760000000000000000000000000000000000029 -:106770000000000000000000000000000000000019 -:106780000000000000000000000000000000000009 -:1067900000000000000000000000000000000000F9 -:1067A00000000000000000000000000000000000E9 -:1067B00000000000000000000000000000000000D9 -:1067C00000000000000000000000000000000000C9 -:1067D00000000000000000000000000000000000B9 -:1067E00000000000000000000000000000000000A9 -:1067F0000000000000000000000000000000000099 -:106800000000000000000000000000000000000088 -:106810000000000000000000000000000000000078 -:10682000000000000000000000000000DC1CD01090 -:106830006600D2D20000000000000000000000004E -:106840000000000000000000000000000000000048 -:106850000000000000000000000000000000000038 -:106860000000000000000000000000000000000028 -:106870000000000000000000000000000000000018 -:106880000000000000000000000000000000000008 -:1068900000000000000000000000000000000000F8 -:1068A0000000000000000000000000000000DF1FEA -:1068B000D313FF99D2D200000000000000000000B6 -:1068C00000000000000000000000000000000000C8 -:1068D00000000000000000000000000000000000B8 -:1068E00000000000000000000000000000000000A8 -:1068F0000000000000000000000000000000000098 -:106900000000000000000000000000000000000087 -:106910000000000000000000000000000000000077 -:106920000000000000000000000000000000000067 -:106930000000000000C00000000000000000000097 -:106940000000000000000000000000000000000047 -:106950000000000000000000000000000000000037 -:106960000000000000000000000000000000000027 -:106970000000000000000000000000000000000017 -:106980000000000000000000000000000000000007 -:1069900000000000000000000000000000000000F7 -:1069A00000000000000000000000000000000000E7 -:1069B00000000000000000000000000000000000D7 -:1069C00000000000000000000000000000000000C7 -:1069D00000000000000000000000000000000000B7 -:1069E00000000000000000000000000000000000A7 -:1069F0000000000000000000000000000000000097 -:106A00000000000000000000000000000000000086 -:106A10000000000000000000000000000000000076 -:106A20000000000000000000000000000000000066 -:106A30000000000000000000000000000000000056 -:106A40000000000000000000000000000000000046 -:106A50000000000000000000000000000000000036 -:106A60000000000000000000000000000000000026 -:106A70000000000000000000000000000000000016 -:106A80000000000000000000000000000000000006 -:106A900000000000000000000000000000000000F6 -:106AA00000000000000000000000000000000000E6 -:106AB00000000000000000000000000000000000D6 -:106AC00000000000000000000000000000000000C6 -:106AD00000000000000000000000000000000000B6 -:106AE00000000000000000000000000000000000A6 -:106AF0000000000000000000000000000000000096 -:106B00000000000000000000000000000000000085 -:106B10000000000000000000000000000000000075 -:106B20000000000000000000000000000000000065 -:106B30000000000000000000000000000000000055 -:106B40000000000000000000000000000000000045 -:106B50000000000000000000000000000000000035 -:106B60000000000000000000000000000000000025 -:106B70000000000000000000000000000000000015 -:106B80000000000000000000000000000000000005 -:106B900000000000000000000000000000000000F5 -:106BA0000000000000000000000000000000840061 -:106BB0000000000000004000000000000000000095 -:106BC0000000C000000000000000400000000000C5 -:106BD00000000400000000000000000000000000B1 -:106BE000000000022000000000000000C000C00003 -:106BF00084000000200000000000000000000000F1 -:106C00000000000000000000000000000000000084 -:106C10000000000000000000000000000000000074 -:106C20000000000000000000000041000000000023 -:106C30000000000000000000000000000000000054 -:106C40000000000000000000000000000000000044 -:106C50000000000000000000000000000000000034 -:106C60000000000000000000000000000000000024 -:106C70000000000000000000000000000000000212 -:106C80000000000000000000000000000000000004 -:106C900000000000000000000000000000000000F4 -:106CA00000000000000000000000000000000000E4 -:106CB00000000000000004000000000000000000D0 -:106CC0000000000000000000000084000000000040 -:106CD00000000000000000000000000000000000B4 -:106CE00000000000000000000000000000000000A4 -:106CF0001000100010001000000000000000000054 -:106D00000000000000000000000000000000000083 -:106D10000000000000000000000000000000000073 -:106D20000000000000000000000000000000000063 -:106D3000000000000000000000000000400004000F -:106D40000000000000000000000000000000000043 -:106D50000000000000000000000000000000000033 -:106D60000000000000000000000000000000000023 -:106D70000000800080008000800000000000000013 -:106D80000000000000000000000000000000000003 -:106D900000000000000000000000000000000000F3 -:106DA00000000000000000000000000000000000E3 -:106DB00000000000000000000000000000000000D3 -:106DC00000000000000000000000000000000000C3 -:106DD00000000000000000000000000000000000B3 -:106DE00000000000000000000000000000000000A3 -:106DF0000000000000000000000000000000000093 -:106E00000000000000000000000000000000000082 -:106E10000000000000000000000000000000000072 -:106E20000000000000000000000000000000000062 -:106E30000000000000000000000000000000090049 -:106E4000080000000900000000000002000000002F -:106E50000000000000000000000000000000000032 -:106E60000000000000000000000000000000000022 -:106E70000000000000000000000000000000000012 -:106E80000000000000000000000000000000000002 -:106E900000000000000000000000000000000000F2 -:106EA00000000000000000000000000000000000E2 -:106EB00000000000000000000000000000000000D2 -:106EC00000200000000000000000000000000000A2 -:106ED00000000000000004000000000000000000AE -:106EE0000000000000008200000000000000000020 -:106EF0000000000000000000000000000000010091 -:106F0000000000000000C0000000000000000000C1 -:106F100000000000000082000000000000000000EF -:106F20000000000000000000000000000000000061 -:106F3000000000000000000000000500400000000C -:106F40000000000000000000000000000000000041 -:106F5000000000000000050000000500080011000E -:106F60000000000000000000000000000000000021 -:106F700000000000000000000000050005004000C7 -:106F800020000000000000000000000000000000E1 -:106F900000000000000000000000080008000800D9 -:106FA00000000000000000000000000000000000E1 -:106FB00000000000000000000000000000000000D1 -:106FC00000000000000000000000000000000000C1 -:106FD00000000000000000000000100000000000A1 -:106FE00000000000000000000000000000000000A1 -:106FF0000000000000000000000000000800000089 -:107000000000000000000000000000000000000080 -:107010000000000000000000000000000000000070 -:107020000000000000000000000000000000000060 -:107030000000000000000000000000000000000050 -:107040000000000000000000000000002000200000 -:107050001188000000000000000000000000000097 -:107060000000000000000000000000000000000020 -:107070000000000000000000000000000000000010 -:107080000000000000000000000000000000000000 -:1070900000000000000000000000000000000000F0 -:1070A00000000000000000000000000000000000E0 -:1070B00000000000000000000000000000000000D0 -:1070C00000000000000000000000000000000000C0 -:1070D000000000000000840000000000000000002C -:1070E00000000000000000000000000000000000A0 -:1070F0000000000000000000080000000000000088 -:10710000000000000000000000000000000000007F -:107110000000000000000000080000000000000067 -:10712000000000000000000000000000000000005F -:10713000000000000000000000000000000000004F -:1071400000000000000000000000008810000000A7 -:10715000000000000000000000000000000000002F -:1071600021000000000000000000000008004100B5 -:10717000000000000000050000000000000000000A -:1071800000002100000000000000000000000000DE -:1071900041000000000000000000000000000000AE -:1071A00000002100000000000000080000000000B6 -:1071B00003000000000000000000000000000000CC -:1071C00000000000000000000000000000000000BF -:1071D00000000000000000000000000000000000AF -:1071E000000000000000000000000000000000009F -:1071F000000000000000000000000000000000008F -:10720000000000000100000000000000000000007D -:10721000000000000000000000000000000000006E -:10722000000000000000000000000000000000005E -:10723000000000000000000000000000000000004E -:10724000000000000000000000000000000000003E -:10725000000000000000000000000000000000002E -:10726000000000000000000000000000000000001E -:10727000000000000000000000000000000000000E -:1072800000000000000011000021000000000000CC -:1072900000000000000000000000000000000000EE -:1072A00000000000000000000000000000000000DE -:1072B00000000000000000000000000000000000CE -:1072C00000000000000000000000000000000000BE -:1072D00000000000000000000000000000000000AE -:1072E000000000000000000000000000000000009E -:1072F000000000000000000000000000000000008E -:10730000000000000000000000400000112000000C -:10731000000000000000000000000000000000006D -:10732000000000000000000000000000000000005D -:10733000000000000000000000000000000000004D -:10734000000000000000000000000000000000003D -:10735000000000000000000000000000000000002D -:10736000000000000000000000000000000000001D -:10737000000000000000000000000000000000000D -:1073800000000000000000000000000000000101FB -:1073900000000000000000000000000000000000ED -:1073A00000000000000000000000000000000000DD -:1073B00000000000000000000000000000000000CD -:1073C00000000000000000000000000000000000BD -:1073D00000000000000000000000000000000000AD -:1073E000000000000000000000000000000000009D -:1073F000000000000000000000000000000000008D -:107400000000000000000000000000000000C000BC -:10741000000101000000000000000000000000006A -:10742000000000000000000000000000000000005C -:10743000000000000000000000000000000000004C -:10744000000000000000000000000000000000003C -:10745000000000000000000000000000000000002C -:10746000000000000000000000000000000000001C -:10747000000000000000000000000000000000000C -:1074800000000000000000000000000000000000FC -:1074900000000008200000000000000000000000C4 -:1074A00000000000000000000000000000000000DC -:1074B00000000000000000000000000000000000CC -:1074C00000000000000000000000000000000000BC -:1074D00000000000000000000000000000000000AC -:1074E000000000000000000000000000000000009C -:1074F000000000000000000000000000000000008C -:10750000000000000000000000000000000000007B -:10751000000011000000000000000000000000005A -:10752000000000000000000000000000000000005B -:10753000000000000000000000000000000000004B -:10754000000000000000000000000000000000003B -:10755000000000000000000000000000000000002B -:10756000000000000000000000000000000000001B -:10757000000000000000000000000000000000000B -:1075800000000000000000000000000000000000FB -:1075900000000000010000000000000000000000EA -:1075A00000000000000000000000000000000000DB -:1075B00000000000000000000000000000000000CB -:1075C00000000000000000000000000000000000BB -:1075D00000000000000000000000000000000000AB -:1075E000000000000000000000000000000000009B -:1075F000000000000000000000000000000000008B -:10760000000000000000000000000000000000007A -:1076100000000000000000E000000000000000008A -:10762000000000000000000000000000000000005A -:10763000000000000000000000000000000000004A -:10764000000000000000000000000000000000003A -:10765000000000000000000000000000000000002A -:10766000000000000000000000000000000000001A -:10767000000000000000000000000000000000000A -:1076800000000000000000000000000000000000FA -:1076900000000000000000000000000000000000EA -:1076A00000000000000000000000000000000000DA -:1076B00000000000000000000000000000000000CA -:1076C00000000000000000000000000000000000BA -:1076D00000000000000000000000000000000000AA -:1076E000000000000000000000000000000000009A -:1076F000000000000000000000000000000000008A -:107700000000000000000000000000000000000079 -:107710000000000000000000000000000000000069 -:107720000000000000000000000000000000000059 -:107730000000000000000000000000000000000049 -:107740000000000000000000000000000000000039 -:107750000000000000000000000000000000000029 -:107760000000000000000000000000000000000019 -:107770000000000000000000000000000000000009 -:1077800000000000000000000000000000000000F9 -:1077900000000000000000000000000000000000E9 -:1077A00000000000000000000000000000000000D9 -:1077B00000000000000000000000000000000000C9 -:1077C00000000000000000000000000000000000B9 -:1077D00000000000000000000000000000000000A9 -:1077E0000000000000000000000000000000000099 -:1077F0000000000000000000000000000000000089 -:107800000000000000000000000000000000000078 -:107810000000000000000000000000000000000068 -:107820000000000000000000000000000000000058 -:107830000000000000000000000000000000000048 -:107840000000000000000000000000000000000038 -:107850000000000000000000000000000000000028 -:107860000000000000000000000000000000000018 -:107870000000000000000000000000000000000008 -:1078800000000000000000000000000000000000F8 -:1078900000000000000000000000000000000000E8 -:1078A0000006000C000000000000000000000000C6 -:1078B00000000000000000000000000000000000C8 -:1078C00000000000000000000000000000000000B8 -:1078D00000000000000000000000000000000000A8 -:1078E0000000000000000000000000000000000098 -:1078F0000000000000000000000000000000000088 -:107900000000000000000000000000000000000077 -:107910000000000000000000000000000000000067 -:107920000000FF0000FF0000000000000000000059 -:107930000000000000000000000000000000000047 -:107940000000000000000000000000000000000037 -:107950000000000000000000000000000000000027 -:107960000000000000000000000000000000000017 -:107970000000000000000000000000000000000007 -:1079800000000000000000000000000000000000F7 -:1079900000000000000000000000000000000000E7 -:1079A00000000000FF0000FF0000000000000000D9 -:1079B00000000000000000000000000000000000C7 -:1079C00000000000000000000000000000000000B7 -:1079D00000000000000000000000000000000000A7 -:1079E0000000000000000000000000000000000097 -:1079F0000000000000000000000000000000000087 -:107A00000000000000000000000000000000000076 -:107A10000000000000000000000000000000000066 -:107A2000000000000000FF0000FF00000000000058 -:107A30000000000000000000000000000000000046 -:107A40000000000000000000000000000000000036 -:107A50000000000000000000000000000000000026 -:107A60000000000000000000000000000000000016 -:107A70000000000000000000000000000000000006 -:107A800000000000000000000000000000000000F6 -:107A900000000000000000000000000000000000E6 -:107AA0000000000000000000FF0000FF00000000D8 -:107AB00000000000000000000000000000000000C6 -:107AC00000000000000000000000000000000000B6 -:107AD00000000000000000000000000000000000A6 -:107AE00020000000880020000000200004000000AA -:107AF000880000002000A0008800200020008800EE -:107B00002000C00020000400000020002000000031 -:107B1000000000000000000020000000200800031A -:107B200000008800C00020004000C0008800000065 -:107B300000000000880000000000000000000000BD -:107B40000000000000000000000000000000000035 -:107B50000000000000000000000000000000000421 -:107B6000000000000000000000C0000000C0000095 -:107B70000000000200000000000000020000000001 -:107B8000000000000000000000C000C00000000075 -:107B900000000000050000200000000000000000C0 -:107BA00000000000000000000000000000000000D5 -:107BB00000000000000000000000000000000000C5 -:107BC00000000000000000000000000000000000B5 -:107BD00000000000000000000000000000000000A5 -:107BE0000001000000000000000000000000000094 -:107BF0000000000000000000000000000000000085 -:107C00000000000000000000000000000000040070 -:107C10000000000000000000000000000000000064 -:107C200000800000000000000000000000000000D4 -:107C30000000000000000000000000000000000044 -:107C40000000000000000000000000000000000034 -:107C50000000000000000000000000000000000024 -:107C60000000008000000000000000000000000094 -:107C70000000000000004000000000900000000034 -:107C800000000000000000000000000020000000D4 -:107C900000000000000000000000000000000000E4 -:107CA0000000000800000000000020000084000028 -:107CB00000004100008400000000000000000000FF -:107CC00000000000000800000000000000000000AC -:107CD00000000000000000000000000000000000A4 -:107CE00000000000000800000000000000099000F3 -:107CF0008800000088000000000000000000000074 -:107D000020000000108000000000000000000000C3 -:107D100000008800000000000000000000000000DB -:107D20000000000020000000000000000000000033 -:107D3000000000000000000000000000000000053E -:107D4000000000000000000400030000000000002C -:107D50000000000000000000000000000000000023 -:107D6000000000000000000000000800000000000B -:107D70000000000000000000000000000000000003 -:107D8000080000000000080400820800000000084D -:107D900000000000000000000000000000000800DB -:107DA0000000000000008000000008000800000043 -:107DB00000000000000000000000000000000000C3 -:107DC00000000000000000000001000000000000B2 -:107DD00000000000000000000000000000000000A3 -:107DE000000000000000000000008200820082000D -:107DF00008008200840082008400820082008200E9 -:107E0000C00082008200820082008200C0008200E6 -:107E1000820082000000820082000000C00000009A -:107E2000820000000800C00082000000A000C00026 -:107E3000A00082000000000000008200820082009A -:107E4000840082008400080000008200000082009C -:107E5000820000008200000000000000000000001E -:107E60000000000000000000000000000000000012 -:107E700000000000000000000000000005000000FD -:107E800000000000000008000000000000000000EA -:107E900000000000000000000000000000000800DA -:107EA00003000000030000000000000000000000CC -:107EB00000000000000000000000080000000500B5 -:107EC00000000000000000000000000000000000B2 -:107ED00000000000000000000000000000000000A2 -:107EE0000000000000000000000000000000A000F2 -:107EF00000000000000090008800A00000000000CA -:107F000000000000000400110000080001009000C3 -:107F100000000000000000000000840000080000D5 -:107F2000000000000800000000000800000000033E -:107F3000A000000008000800080000008400000005 -:107F400000000000820000000000000000000000AF -:107F50008200000010000800000000001000000374 -:107F600000000000081100000000000000000000F8 -:107F70000000000000000000000000000000000001 -:107F800004000000000000000000000000201008B5 -:107F900000000000000000000000000000000000E1 -:107FA00000000000000000000000000000000000D1 -:107FB00000000000000000000000000000000000C1 -:107FC000008400000000000000000000000000002D -:107FD00000000000000000000000000000000000A1 -:107FE0000000000000000000000000000000000091 -:107FF000000000000000A000820008000800080047 -:108000000800000000000000000000000000000068 -:10801000000000008200000008000800A000080026 -:1080200000000000000000000000080000008209BD -:1080300008200000000082008400A00010008400DE -:108040008200080000000000820000020000000022 -:1080500000000808000008000800A0000800080050 -:108060000800000000000000080000000000000000 -:108070000000000000000000000000000000000000 -:1080800000000800000002000000210000000200C3 -:1080900000000000000000000000000000000000E0 -:1080A00000000000000000000000000000000000D0 -:1080B00000000000000000000000000000000000C0 -:1080C00000000000000000000000000000000000B0 -:1080D000000000000001000000000000000000009F -:1080E0000000000000000000000000000000000090 -:1080F00000000000000000010001000100C10001BB -:10810000200100C000830000040100400082000143 -:10811000400100C0000000010001000100C000019A -:10812000400100C100830000000100400008000180 -:10813000400100C00000000000010001000100C07B -:108140000001400100C10083000000010020000484 -:108150000001020100C0000000010001000100C098 -:108160000001400100C10083000000010040002028 -:108170000001020100C000000041004100410088F0 -:1081800000410041009008C10041C0410000008052 -:108190000041804100C0000000410041004100C09A -:1081A00000410041009008C10041054100000080ED -:1081B0000041804100C0000000000041004100413A -:1081C00000C000410041009008C1000220410000B1 -:1081D00000800041804100850000004100410041D5 -:1081E00000C000410041009008C100112041000082 -:1081F00000000041804100850000410003000000B4 -:1082000000804100880000000300400002800085DB -:10821000C0004100C10000C0800041000300000018 -:1082200000804100A0000000200040000200008506 -:1082300082004100C10000C0800000004100030036 -:108240000000008041008300000020000200820046 -:10825000008083004100C1000080800041000300D5 -:108260000000008041008300000020000200820026 -:108270000080A0004100C1000080800001000100DA -:10828000000000C00100C100000000002000210229 -:108290000084C1404100C100008282000100010051 -:1082A000000000C00100C0000000010020002140CB -:1082B0000008C1004100C1000082820000000100EE -:1082C0000100000000C00100C0000000010021000A -:1082D00005400004C0002100C100008282000100AE -:1082E0000100000000C00100C000000001002100EA -:1082F00005400004C1004100C1000082820000C0AE -:108300000001C0C100000000000100C002400005E3 -:10831000000100C10000000000010000000000C0DA -:108320000001C0C100000000000100C02082000563 -:10833000000100C10000000000010000000000007A -:1083400000C00001C0C100000000000100C0200505 -:108350000005000100C10000000000010000000055 -:1083600000C00001C0C100000000000100C02005E5 -:108370000005000100C10000000000010000000035 -:108380000080004180C100000000004100C1800564 -:1083900000C1004100C10000000000410040000099 -:1083A0000080004180C10000000000410083000502 -:1083B00000C1004100C10000000000410040000079 -:1083C00000000080004180C10000000000410083E7 -:1083D000008300C1004100C1000000000041000511 -:1083E00000000080004180C10000000000410083C7 -:1083F000008300C1004100C10000000000410005F1 -:108400000000C100800080C1000041110000200078 -:108410004100C14180008002000041000000800056 -:108420004100C100800080C1000041000000400008 -:108430004100C141000080020000410000008000B6 -:1084400041000000C100800080C1000041008003A5 -:10845000C0004100C1C100008002000041000000D6 -:1084600080004100C100800080C100004100800305 -:10847000C0004100C1C100008002000041000000B6 -:1084800080004100C1004000C0C100000100880020 -:1084900090000100C1A11000C00100000100000017 -:1084A000C0000100C1004000C0C100000100200068 -:1084B00090000100C1A1A000C00100000100000067 -:1084C000C00001000000C1004000C0C10000010068 -:1084D000040004000100C103A000C001000001006D -:1084E0000000C0000100C1004000C0C10000010048 -:1084F000040004000100C103A000C001000001004D -:108500000000C00001000000000000000042000068 -:1085100000000000000081120088070048000000F1 -:108520000000000000000000000000000042000009 -:1085300000000000000081120088070048000000D1 -:1085400000000000000000000000000000000042E9 -:1085500000000000000000008112008807004800B1 -:1085600000000000000000000000000000000042C9 -:108570000000000000000000811200880700480091 -:1085800000000000000000000000000000000000EB -:1085900000000000000000000000000000000000DB -:1085A00000000000000000000000000000000000CB -:1085B00000000000000000000000000000000000BB -:1085C00000000000000000000000000000000000AB -:1085D000000000000000000000000000000000009B -:1085E000000000000000000000000000000000008B -:1085F000000000000000000000000000000000007B -:10860000000000000000000000000000000000006A -:10861000000000000000000000000000000000005A -:10862000000000000000000000000000000000004A -:10863000000000000000000000000000000000003A -:10864000000000000000000000000000000000002A -:10865000000000000000000000000000000000001A -:10866000000000000000000000000000000000000A -:1086700000000000000000000000000000000000FA -:10868000000000000000000000000000757B0000FA -:1086900000000000000000000000000000000000DA -:1086A00000000000000000000000DEAE757B00004E -:1086B00000000000000000000000000000000000BA -:1086C00000000000000000000000DEAE0000757B2E -:1086D000000000000000000000000000000000009A -:1086E000000000000000000000000000DEAE757B0E -:1086F000000000000000000000000000000000007A -:10870000000000000000000000000000DEAE60C6B7 -:1087100003000000000000000031E0000000000045 -:1087200000000C0000000000000000C0630660C6EE -:1087300003000000000000000031E0000000000025 -:1087400000000C0000000000000000C063060000F4 -:1087500060C603000000000000000031E0000000DF -:10876000000000000C0000000000000000C06306D4 -:1087700060C603000000000000000031E0000000BF -:10878000000000000C0000000000000000C06306B4 -:1087900000000000020000000000000000000000D7 -:1087A0000000000000000000880000000000000041 -:1087B00000008400040004008800C00000000000E5 -:1087C00000000000000000000000000000000000A9 -:1087D0000001000000000000200000002000000058 -:1087E0000000000000008400000000000000000005 -:1087F0000000000000000000000000000000000079 -:108800000000000000000000000000000000000068 -:1088100000000000000084000000000000000000D4 -:108820000000000000000000000020000000000028 -:108830000000000000000000000000000000000038 -:108840000000000000000000000000000000000028 -:108850000000000000000000000000000000000018 -:108860000000000000000000000000000000000008 -:1088700000000000000000000000000000000000F8 -:1088800000000000000000000000000000000000E8 -:1088900000000000020002000200020000000000D0 -:1088A00000000000000000000000002000000000A8 -:1088B0000000000000000400008004000000000030 -:1088C0000020002002000000000000000000000066 -:1088D0000000000000000000000000000000000098 -:1088E0000000000000000000000000000000000088 -:1088F0000000000000000000000000000000000078 -:108900000000000000000000000000000000000067 -:108910000000000000008000800082008000000055 -:1089200000840084000000000082000000010000BC -:108930000000000000000000800000208000000017 -:108940000000000100010000000000000000000025 -:108950000000000000000000000000000000000017 -:108960000000000000000000000000000000000007 -:1089700000000000000000000000000000000000F7 -:1089800000000000000000000000000000000000E7 -:108990000000000000000000004001000040014015 -:1089A0000000000000000000002100210000000085 -:1089B0000000000900090000002000200000002045 -:1089C00000000000000000000000000000000000A7 -:1089D0000000000000000000000000000000000097 -:1089E0000000000000000000000000000000000087 -:1089F0000000000000000000000000000000000077 -:108A00000000000000000000000000000000000066 -:108A10000000000000000000000000010200000152 -:108A20000201080021000000000000000002000018 -:108A30000000000000001100000000914101410011 -:108A400041010300210000000000000000000000C0 -:108A5000000000000000030000000000000008000B -:108A600008004100080003000300000003000000AC -:108A700000000000000000000000000000000000F6 -:108A800000000300030003000000210000000000BC -:108A900000000000000000000000000000000000D6 -:108AA00001000080A0000000900000000000000411 -:108AB00090000020400000208220000000200000E4 -:108AC0000020000000200020A000000000000000A6 -:108AD00000000000000040004000000000004000D6 -:108AE00000000000C0000000820000000000000044 -:108AF0000000000082004000820000000000000032 -:108B00000000000000000000000000000000000065 -:108B10000000000000000000000000000000000055 -:108B20000000200000040000000000000000000021 -:108B300000000000000100880001000100000001A9 -:108B40000000000100000001000100000000000022 -:108B50000000000000000000000000000000000015 -:108B60000000000000000000000000000000000005 -:108B700000000000000000000000000000000000F5 -:108B800000000000000000000000000000000000E5 -:108B900000000000000000000000000000000000D5 -:108BA00000000400000800000000000000000005B4 -:108BB0000000000000000000820000009000900013 -:108BC00000000000000000000000000000000000A5 -:108BD000000000000000000008000000000000008D -:108BE0000001000000000000000000000000000084 -:108BF0000000000000000000000000000000000075 -:108C00000000000000000000000000000000000064 -:108C10000000000000000000000000000000000054 -:108C200000000088800000000000210000A021A0BA -:108C3000000000000000000000000890000000009C -:108C400000000000000000000000000005002100FE -:108C50000000000000000000000000000000000014 -:108C600000000000000000000000000000000800FC -:108C700000000000000000000000000000000000F4 -:108C800000000000000000000000000000000800DC -:108C900000000000000000000800000000000000CC -:108CA000000000000300404002000000000000003F -:108CB000000000009000000000000021A1000080E2 -:108CC00000800100A000400008000000000000003B -:108CD0000000000000000000000000000000000094 -:108CE0000000000000000000000000000000000084 -:108CF0000000000000000000000000000000000074 -:108D0000000000000000000000000000080000005B -:108D10000000000000000000000000000000000053 -:108D2000000000000000A000000180000000000022 -:108D3000000000000000000000000000000004002F -:108D400000200020040000000000000005000000DA -:108D50000000000000000000000000000000000013 -:108D60000000000000000000000000000000000003 -:108D700000000000000000000000000000000000F3 -:108D800000000000000000000000000000000000E3 -:108D900000000000000000000000000000000000D3 -:108DA000000000000000000010C000020020900041 -:108DB00000000000000000000100000000000000B2 -:108DC00000C000900000000000C000900000000003 -:108DD00000C0009000000000000000000000000043 -:108DE0000000000000000000000000000000000083 -:108DF0000000000000000000000000000000000073 -:108E00000000000000000000000000000000000062 -:108E10000000000000000000000000000000000052 -:108E20000000000000000000000080800000100032 -:108E30000000000000000000000020000000000012 -:108E40000000008000800000000000800080000022 -:108E50000000008000800000000000000000000012 -:108E60000000000000000000000000000000000002 -:108E700000000000000000000000000000000000F2 -:108E800000000000000000000000000000000000E2 -:108E900000000000000000000000000000000000D2 -:108EA00000000000000000000000000000418002FF -:108EB000800380800000000000000000000000002F -:108EC00000008000000000008000808000000000A2 -:108ED0008000808000000000800080800000000092 -:108EE0000000000000000000000000000000000082 -:108EF0000000000000000000000000000000000072 -:108F00000000000000000000000000000000000061 -:108F10000000000000000000000000000000000051 -:108F200000000000000000000000000000009001B0 -:108F300010008400C090000000000000000000004D -:108F4000000000009000000000008400C0900000BD -:108F500000008400C090000000008400C090000069 -:108F60000000000000000000000000000000000001 -:108F700000000000000000000000000000000000F1 -:108F800000000000000000000000000000000000E1 -:108F900000000000000000000000000000000000D1 -:108FA00000000000000000000000000000000000C1 -:108FB000C0008888909002C00000000000000000FF -:108FC000000000000000000000000000009000C051 -:108FD00000000000009000C000000000009000C0F1 -:108FE0000000000000000000000000000000000081 -:108FF0000000000000000000000000000000000071 -:109000000000000000000000000000000000000060 -:109010000000000000000000000000000000000050 -:109020000000000000000000000000000000000040 -:109030000000800000000080A08000000000000010 -:1090400000000000000000000000000000000080A0 -:109050000080000000000080008000000000008010 -:109060000080000000000000000000000000000080 -:1090700000000000000000000000000000000000F0 -:1090800000000000000000000000000000000000E0 -:1090900000000000000000000000000000000000D0 -:1090A00000000000000000000000000000000000C0 -:1090B000000000008011809100000000000000000E -:1090C00000000000000000200000000080050040BB -:1090D0000000000080050040000000008005004006 -:1090E0000000000000000000000000000000000080 -:1090F0000000000000000000000000000000000070 -:10910000000000000000000000000000000000005F -:10911000000000000000000000000000000000004F -:10912000000000000000000000000000000000003F -:10913000000000000000C001200388009000000033 -:109140000000000000000000000100000000C0005E -:10915000000000009000C000000000000800C000F7 -:1091600000000000080000000000000000000000F7 -:1091700000000000000000000000000000000000EF -:1091800000000000000000000000000000000000DF -:1091900000000000000000000000000000000000CF -:1091A00000000000000000000000000000000000BF -:1091B000000000000000000000210088070081007E -:1091C0000000000000000000004100000700000057 -:1091D000008100000700000000810000070000007F -:1091E00000810000070000000000000000000000F7 -:1091F000000000000000000000000000000000006F -:10920000000000000000000000000000000000005E -:10921000000000000000000000000000000000004E -:10922000000000000000000000000000000000003E -:109230000000000000000000000000FFFCFC00FF38 -:10924000AFAF0000000000000000000000000000C0 -:10925000000000003C3C000000FF00003C3C00001F -:1092600000FF00003C3C000000FF00000000000088 -:1092700000000000000000000000000000000000EE -:1092800000000000000000000000000000000000DE -:1092900000000000000000000000000000000000CE -:1092A00000000000000000000000000000000000BE -:1092B00000000000000000000000000000FFC0C02F -:1092C00000FFA0A00000000000000000000000005F -:1092D0000000000000003C3C000000FF00003C3C9F -:1092E000000000FF00003C3C000000FF0000000008 -:1092F000000000000000000000000000000000006E -:10930000000000000000000000000000000000005D -:10931000000000000000000000000000000000004D -:10932000000000000000000000000000000000003D -:109330000000000000000000000000000000FF002E -:1093400055552D2DFF00000000000000000000001A -:109350000000FFFF0000FF000000FF000000FF0012 -:109360000000FF000000FF000000FF000000000000 -:1093700000000000000000000000000000000000ED -:1093800000000000000000000000000000000000DD -:1093900000000000000000000000000000000000CD -:1093A00000000000000000000000000000000000BD -:1093B00000000000000000000000000000000000AD -:1093C0000F0F55552D2DFF0000000000000000007C -:1093D00000000000FFFF0000FF000000FF00000091 -:1093E000FF000000FF000000FF000000FF00000081 -:1093F000000000000000000000000000000000006D -:10940000000000000000000000000000000000005C -:10941000000000000000000000000000000000004C -:10942000000000000000000000000000000000003C -:10943000000000000000000000000000000000002C -:10944000000010612037004D0008000000000000FF -:10945000000000000038000010C0038203380C0038 -:1094600092C0038203380C0092C0038203380C00C0 -:109470008AC00000000000000000000000000000A2 -:1094800000000000000000000000000000000000DC -:1094900000000000000000000000000000000000CC -:1094A00000000000000000000000000000000000BC -:1094B00000000000000000000000000000000000AC -:1094C000000000000000000000000000000000009C -:1094D000000000000000000000000000000000008C -:1094E000000000000000000000000000000000007C -:1094F000000000000000000000000000000000006C -:10950000000000000000000000000000000000005B -:10951000000000000000000000000000000000004B -:10952000000000000000000000000000000000003B -:10953000000000000000000000000000000000002B -:10954000000000000000000000000000000000001B -:10955000000000000000000000000000000000000B -:1095600000000000000000000000000000000000FB -:1095700000000000000000000000000000000000EB -:1095800000000000000000000000000000000000DB -:1095900000000000000000000000000000000000CB -:1095A00000000000000000000000000000000000BB -:1095B00000000000000000000000000000000000AB -:1095C000000000000000000000000000000000009B -:1095D000000000000000000000000000000000008B -:1095E000000000000000000000000000000000007B -:1095F000000000000000000000000000000000006B -:10960000000000000000000000000000000000005A -:10961000000000000000000000000000000000004A -:10962000000000000000000000000000000000003A -:10963000000000000000000000000000000000002A -:10964000000000000000000000000000000000001A -:10965000000000000000000000000000000000000A -:1096600000000000000000000000000000000000FA -:1096700000000000000000000000000000000000EA -:1096800000000000000000000000000000000000DA -:1096900000000000000000000000000000000000CA -:1096A00000000000000000000000000000000000BA -:1096B00000000000000000000000000000000000AA -:1096C000000000000000000000000000008000001A -:1096D000000000000000000000002000000000006A -:1096E000000000000000000000000000000000007A -:1096F000000000000000000000002000000000004A -:109700000000000000000000000000000001000058 -:109710000000000000000000000000002000000029 -:109720000000000000000000000000000000000039 -:109730000000000000000000000000000000000029 -:109740000000000000000000000000000000000415 -:1097500020000000000000000000000010000000D9 -:1097600000000000000000000000000000000000F9 -:1097700000000000000000000000000000000000E9 -:1097800000000000000004000000000000000000D5 -:1097900000000000000000000000000000000000C9 -:1097A00000000000040000000000000004000000B1 -:1097B00000000000000000000000000000000000A9 -:1097C0000000000000000000000000000000000099 -:1097D0000000020000000000000002000000000085 -:1097E0000000000000000000010001000200030072 -:1097F0000000000000000000000000000000000069 -:109800000000000000000000000000000000000058 -:109810000000000000000000000000000000000048 -:109820000000000000000000000000000000000038 -:109830000000000000000000000000000000000028 -:109840000000000002000000020000000000000014 -:109850000200000080000000000000000000000086 -:109860000000000000000000000002000200820072 -:1098700002000000000000000000000000000000E6 -:1098800000000000000000000000000000000000D8 -:1098900000000000000000000000000000000000C8 -:1098A00000000000000000000000000000000000B8 -:1098B00000000000000000000000000000000000A8 -:1098C0000000000000000000000000000000000098 -:1098D0000000000000000000000000000000000088 -:1098E00000000800000000000000000002000080EE -:1098F0000000010000000000000000000000000067 -:10990000000008000000000000000000000000004F -:109910000000000000000000000000000000000047 -:10992000000000000800000000000000000000002F -:109930000000000000000000000000000000000027 -:10994000000000000800000000000000000000000F -:109950000000000000000000000000000000000007 -:109960000004000000000000000000000000800073 -:109970000040000020000000210000000000000066 -:1099800000000000000000000000000000000000D7 -:1099900000000000000000000000000000000000C7 -:1099A00000000000000000000000000000000000B7 -:1099B00000000000000000000000000000000000A7 -:1099C0000000000000000000000000000000000097 -:1099D00000000000000000000000000001000880FE -:1099E000000000000000A000004100000000000096 -:1099F0000000000001090009000000000000000054 -:109A00000000000000000000000000000000000056 -:109A10000000000000000000000000000000000046 -:109A20000000000000000000000000000000000036 -:109A30000000000000000000000000000000000026 -:109A40000000000000000000000000000000000016 -:109A500000000000000000000000000000002000E6 -:109A600000040000000000000000000000000000F2 -:109A700000000000000020000000000000000000C6 -:109A800000000000000000000000000000000000D6 -:109A900000000000000000000000000000000000C6 -:109AA00000000000000000000000000000000000B6 -:109AB00000000000000000000000000000000000A6 -:109AC0000000000000000000000000000000000096 -:109AD0000000000000000000000000000000008006 -:109AE0000000000000000000000300000000000370 -:109AF00000008200010400000080008000000000DF -:109B00000000000000000000000000000000000055 -:109B10000000000000000000000000000001000044 -:109B20000000000000000000000000000000000035 -:109B30000000000000000000000000000000000025 -:109B40000000000000000000000000000000000015 -:109B50000000000000000000000000000000000005 -:109B600008400584050400000000000021000000FA -:109B7000000000000000020100000040004004005E -:109B800000000000210000000000000000000000B4 -:109B900000000000000000000000000000000000C5 -:109BA00000000000000000000000000000000000B5 -:109BB00000000000000000000000000000000000A5 -:109BC0000000000000000000000000000000000095 -:109BD0000000000000000000000000000000000085 -:109BE00000000000000090000000000000020000E3 -:109BF00000001000000000000000020000009000C3 -:109C0000000000200009000000000000000000002B -:109C10000000000000000000000000000000000044 -:109C20000000000000000000000000000000000034 -:109C30000000000000000000000000000000000024 -:109C40000000000000000000000000000000000014 -:109C50000000000000000000000000000000000004 -:109C600000000000000000000000000000000000F4 -:109C70000000000000000000000000008000000064 -:109C800000000000000000000000000000000000D4 -:109C900000000000000000000000000000000000C4 -:109CA00000000000000000000000000000000000B4 -:109CB00000000000000000000000000000000000A4 -:109CC0000000000000000000000000000000000094 -:109CD0000000000000000000000000000000000084 -:109CE0000000000000000000000000000000000074 -:109CF00000000000000000000000000001C090040F -:109D000000C0C08200000000000000000000000051 -:109D10000000000000000000000000000000000043 -:109D20000000000000000000000000000000000033 -:109D30000000000000000000000000000000000023 -:109D40000000000000000000000000000000000013 -:109D50000000000000000000000000000000000003 -:109D600000000000000000000000080000000000EB -:109D70000000000000000000000000000000118052 -:109D8000808008000080000000000000000000004B -:109D900000000000000000000000000000000000C3 -:109DA00000000000000000000000000000000000B3 -:109DB00000000000000000000000000000000000A3 -:109DC0000000000000000000000000000000000093 -:109DD0000000000000000000000000000000000083 -:109DE00000000000000000000041800000038080AF -:109DF0000000000000000000000000000000000063 -:109E000080418010808980800000000000000000F8 -:109E10000000000000000000000000000000000042 -:109E20000000000000000000000000000000000032 -:109E30000000000000000000000000000000000022 -:109E40000000000000000000000000000000000012 -:109E50000000000000000000000000000000000002 -:109E600000000000000000000000900182000000DF -:109E7000C090000000000000000000000000000092 -:109E80000000400182010240C0900000000000007C -:109E900000000000000000000000000000000000C2 -:109EA00000000000000000000000000000000000B2 -:109EB00000000000000000000000000000000000A2 -:109EC0000000000000000000000000000000000092 -:109ED0000000000000000000000000000000000082 -:109EE00000000000000000000000000000008800EA -:109EF0000000000000000000000000000000000062 -:109F00000000000000088888009082C00000000067 -:109F10000000000000000000000000000000000041 -:109F20000000000000000000000000000000000031 -:109F30000000000000000000000000000000000021 -:109F40000000000000000000000000000000000011 -:109F50000000000000000000000000000000000001 -:109F600000000000000000000000000000000000F1 -:109F700000000000110000000000000000000000D0 -:109F8000000000000000000000000080C080000011 -:109F900000000000000000000000000000000000C1 -:109FA00000000000000000000000000000000000B1 -:109FB00000000000000000000000000000000000A1 -:109FC0000000000000000000000000000000000091 -:109FD0000000000000000000000000000000000081 -:109FE0000000000000000000000000000000000071 -:109FF0000040009100000000000000000000000090 -:10A00000000000000000000080118011000000002E -:10A010000000000000000000000000000000000040 -:10A020000000000000000000000000000000000030 -:10A030000000000000000000000000000000000020 -:10A040000000000000000000000000000000000010 -:10A050000000000000000000000000000000000000 -:10A0600000000000000000000000000000000000F0 -:10A070000000000000030088000000000000000055 -:10A0800000000000000000000000C00120A1A000AE -:10A0900000000000000000000000000000000000C0 -:10A0A00000000000000000000000000000000000B0 -:10A0B00000000000000000000000000000000000A0 -:10A0C0000000000000000000000000000000000090 -:10A0D0000000000000000000000000000000000080 -:10A0E0000000000000000000000000000000000070 -:10A0F00000000000008100880700810000000000CF -:10A100000000000000000000000000000042008885 -:10A1100007008100000000000000000000000000B7 -:10A12000000000000000000000000000000000002F -:10A13000000000000000000000000000000000001F -:10A14000000000000000000000000000000000000F -:10A1500000000000000000000000000000000000FF -:10A1600000000000000000000000000000000000EF -:10A1700000000000000000000000000000000000DF -:10A180000000000000000000000000000000F9F9DD -:10A19000FF00FCFCFF0000000000000000000000C9 -:10A1A00000000000000000000000000000000000AF -:10A1B000000000000000000000000000000000009F -:10A1C000000000000000000000000000000000008F -:10A1D000000000000000000000000000000000007F -:10A1E000000000000000000000000000000000006F -:10A1F000000000000000000000000000000000005F -:10A20000000000000000000000000000000000004E -:10A210006060FF000C0CFF00000000000000000068 -:10A22000000000000000000000000000000000002E -:10A23000000000000000000000000000000000001E -:10A24000000000000000000000000000000000000E -:10A2500000000000000000000000000000000000FE -:10A2600000000000000000000000000000000000EE -:10A2700000000000000000000000000000000000DE -:10A2800000000000000000000000000000000000CE -:10A2900000000000000000000000000000000000BE -:10A2A00000000000000000000000000000000000AE -:10A2B000000000000000000000000000000000009E -:10A2C000000000000000000000000000000000008E -:10A2D000000000000000000000000000000000007E -:10A2E000000000000000000000000000000000006E -:10A2F000000000000000000000000000000000005E -:10A300000F0F7E7E00000000000000000000000033 -:10A31000000000003C3C069F0F0F24E700000000F7 -:10A32000000000000000000000000000000000002D -:10A33000000000000000000000000000000000001D -:10A34000000000000000000000000000000000000D -:10A3500000000000000000000000000000000000FD -:10A3600000000000000000000000000000000000ED -:10A3700000000000000000000000000000000000DD -:10A3800000000F0F1818000000000000000000007F -:10A390000000000000003C3C069F0F0F24E7000077 -:10A3A00000000000000000000000000000000000AD -:10A3B000000000000000000000000000000000009D -:10A3C000000000000000000000000000000000008D -:10A3D000000000000000000000000000000000007D -:10A3E000000000000000000000000000000000006D -:10A3F000000000000000000000000000000000005D -:10A4000000610037000D000800000000000000009F -:10A41000000000000000000010612037004D00081F -:10A42000000000000000000000000000000000002C -:10A43000000000000000000000000000000000001C -:10A44000000000000000000000000000000000000C -:10A4500000000000000000000000000000000000FC -:10A4600000000000000000000000000000000000EC -:10A4700000000000000000000000000000000000DC -:10A4800000000000000000000000000000000000CC -:10A4900000000000000000000000000000000000BC -:10A4A00000000000000000000000000000000000AC -:10A4B000000000000000000000000000000000009C -:10A4C000000000000000000000000000000000008C -:10A4D000000000000000000000000000000000007C -:10A4E000000000000000000000000000000000006C -:10A4F000000000000000000000000000000000005C -:10A50000000000000000000000000000000000004B -:10A51000000000000000000000000000000000003B -:10A52000000000000000000000000000000000002B -:10A53000000000000000000000000000000000001B -:10A54000000000000000000000000000000000000B -:10A5500000000000000000000000000000000000FB -:10A5600000000000000000000000000000000000EB -:10A5700000000000000000000000000000000000DB -:10A5800000000000000000000000000000000000CB -:10A5900000000000000000000000000000000000BB -:10A5A00000000000000000000000000000000000AB -:10A5B000000000000000000000000000000000009B -:10A5C000000000000000000000000000000000008B -:10A5D000000000000000000000000000000000007B -:10A5E000000000000000000000000000000000006B -:10A5F000000000000000000000000000000000005B -:10A60000000000000000000000000000000000004A -:10A61000000000000000000000000000000000003A -:10A62000000000000000000000000000000000002A -:10A63000000000000000000000000000000000001A -:10A64000000000000000000000000000000000000A -:10A6500000000000000000000000000000000000FA -:10A6600000000000000000000000000000000000EA -:10A6700000000000000000000000000000000000DA -:10A6800000000000000000000000000000000000CA -:10A6900000000000000000000000000000000000BA -:10A6A00000000000000000000000000000000000AA -:10A6B000000000000000000000000000000000009A -:10A6C0000000000000000000000000010000000089 -:10A6D000000000000000000000000000000000007A -:10A6E000000000000000000000000000000000006A -:10A6F000000000000000000000000000000000005A -:10A700000000000000000000000000000000000049 -:10A710000000000000000000000000000000000039 -:10A720000000000000000000000000000000000029 -:10A730000000000000000000000000000000000019 -:10A740000000000000000000000000000000000009 -:10A7500000000000000000000000000000000000F9 -:10A7600000000000000000020000000000000000E7 -:10A7700000000000000000000000000000000000D9 -:10A7800000000000000000000000000000000000C9 -:10A7900000000000000000000000000000000000B9 -:10A7A00000000400000000000000000000000000A5 -:10A7B0000000020000000000000000000000000097 -:10A7C0000000000000000000000000000000000089 -:10A7D0000000000000000000020002000200020071 -:10A7E0000000000000000000000000000000000069 -:10A7F0000000000000000000000000000000000059 -:10A800000000000000000000000000000000000048 -:10A810000000000000000000000000000000000038 -:10A820000200000000000000000000000000000026 -:10A830000000000000000000000000000000000018 -:10A840000000000000000000000000000000000008 -:10A8500000000000000000000000000000000000F8 -:10A8600000000000000000000000000000000000E8 -:10A8700000000000000000000000000000000000D8 -:10A8800000000000000000000000000000000000C8 -:10A8900000000000000000000000000000000000B8 -:10A8A00000000000000000000000000000000000A8 -:10A8B00000000000000000000000A00000000000F8 -:10A8C0000000A000000000000000000000000000E8 -:10A8D0000000000000000000000000000000000078 -:10A8E0000000000000000000000000000000000068 -:10A8F0000000000000000000000000000000000058 -:10A900000000000000000000000000000000000047 -:10A910000000000000000000000000000000000037 -:10A920000000000000000000000000000000000027 -:10A930000000000000000000000000000000000017 -:10A940000000000000000000000000000000000007 -:10A9500000000000000000000000000000000000F7 -:10A9600000000000000000000000000000000000E7 -:10A9700000000000000000000000000000000000D7 -:10A9800000000000000000000000000000000000C7 -:10A9900000000000000000000000000000000000B7 -:10A9A0000000000000000100000001000080000025 -:10A9B0000000000000000000000000000000000097 -:10A9C0000000000000000000000000000000000087 -:10A9D0000000000000000000000000000000000077 -:10A9E0000000000000000000000000000000000067 -:10A9F0000000000000000000000000000000000057 -:10AA00000000000000000000000000000000000046 -:10AA10000000000000000000000000000000000036 -:10AA2000000000000000000010000000208400046E -:10AA30000000000000000000000000000000000016 -:10AA400000040004000000000000000000000000FE -:10AA500000000000000000000000000000000000F6 -:10AA600000000000000000000000000000000000E6 -:10AA700000000000000000000000000000000000D6 -:10AA800000000000000000000000000000000000C6 -:10AA900000000000000000000000000000000000B6 -:10AAA0000000000000000000900000000000000016 -:10AAB0000000000000000000000000000000000096 -:10AAC0000000000000000000000000000000000086 -:10AAD0000000000000000000000000000000000076 -:10AAE0000000000000000000000000000000000066 -:10AAF0000000000000000000000000000000000056 -:10AB00000000000000000000000000000000000045 -:10AB10000000000000000000000000000000000035 -:10AB20000084081000000000000000000000000089 -:10AB3000000000000500000000840000000000008C -:10AB40000000000000000000000000000000000005 -:10AB500000000000000000000000000000000000F5 -:10AB600000000000000000000000000000000000E5 -:10AB700000000000000000000000000000000000D5 -:10AB800000000000000000000000000000000000C5 -:10AB900000000000000000000000000000000000B5 -:10ABA00000000000000000000000000200000000A3 -:10ABB0000000000000000000000000100000200461 -:10ABC0000000000200002000000000000000000063 -:10ABD0000000000000000000000000000000000075 -:10ABE0000000000000000000000000000000000065 -:10ABF0000000000000000000000000000000000055 -:10AC00000000000000000000000000000000000044 -:10AC10000000000000000000000000000000000034 -:10AC20000000000000000000000000000000000024 -:10AC300000000000008420000084200000040010B8 -:10AC40000000000000040000000000000000000000 -:10AC500000000000000000000000000000000000F4 -:10AC600000000000000000000000000000000000E4 -:10AC700000000000000000000000000000000000D4 -:10AC800000000000000000000000000000000000C4 -:10AC900000000000000000000000000000000000B4 -:10ACA00000000000000000000000000000000000A4 -:10ACB0000000010000000000000000000000000093 -:10ACC0000000000000000000000000000000000084 -:10ACD0000000000000000000000000000000000074 -:10ACE0000000000000000000000000000000000064 -:10ACF0000000000000000000000000000000000054 -:10AD00000000000000000000000000000000000043 -:10AD10000000000000000000000000000000000033 -:10AD20000000000000000000000000000000000023 -:10AD300000000000110021000000000000000000E1 -:10AD40000000000000000000000000000000000003 -:10AD500000000000000000000000000000000000F3 -:10AD600000000000000000000000000000000000E3 -:10AD700000000000000000000000000000000000D3 -:10AD800000000000000000000000000000000000C3 -:10AD900000000000000000000000000000000000B3 -:10ADA00000000000000000000000000000000000A3 -:10ADB00000000000000000410900000300800000C6 -:10ADC0000000000000000000000000000000000083 -:10ADD0000000000000000000000000000000000073 -:10ADE0000000000000000000000000000000000063 -:10ADF0000000000000000000000000000000000053 -:10AE00000000000000000000000000000000000042 -:10AE10000000000000000000000000000000000032 -:10AE20000000000000000000000000000000000022 -:10AE30000000000000000000000101000000008888 -:10AE40000000000000000000000000000000000002 -:10AE500000000000000000000000000000000000F2 -:10AE600000000000000000000000000000000000E2 -:10AE700000000000000000000000000000000000D2 -:10AE800000000000000000000000000000000000C2 -:10AE900000000000000000000000000000000000B2 -:10AEA00000000000000000000000000000000000A2 -:10AEB000000000000000000000000000880000000A -:10AEC0000100000000000000000000000000000081 -:10AED0000000000000000000000000000000000072 -:10AEE0000000000000000000000000000000000062 -:10AEF0000000000000000000000000000000000052 -:10AF00000000000000000000000000000000000041 -:10AF10000000000000000000000000000000000031 -:10AF20000000000000000000000000000000000021 -:10AF30000000000000000000000000000000000011 -:10AF400000004100000000000000000000000000C0 -:10AF500000000000000000000000000000000000F1 -:10AF600000000000000000000000000000000000E1 -:10AF700000000000000000000000000000000000D1 -:10AF800000000000000000000000000000000000C1 -:10AF900000000000000000000000000000000000B1 -:10AFA00000000000000000000000000000000000A1 -:10AFB0000000000000000000000000000000000091 -:10AFC000041100000000000000000000000000006C -:10AFD0000000000000000000000000000000000071 -:10AFE0000000000000000000000000000000000061 -:10AFF0000000000000000000000000000000000051 -:10B000000000000000000000000000000000000040 -:10B010000000000000000000000000000000000030 -:10B020000000000000000000000000000000000020 -:10B030000000000000000000000000000000000010 -:10B0400000000101000000000000000000000000FE -:10B0500000000000000000000000000000000000F0 -:10B0600000000000000000000000000000000000E0 -:10B0700000000000000000000000000000000000D0 -:10B0800000000000000000000000000000000000C0 -:10B0900000000000000000000000000000000000B0 -:10B0A00000000000000000000000000000000000A0 -:10B0B0000000000000000000000000000000000090 -:10B0C0000000000000E000008141000000000000DE -:10B0D0000000000000000000000000000000000070 -:10B0E0000000000000000000000000000000000060 -:10B0F0000000000000000000000000000000000050 -:10B10000000000000000000000000000000000003F -:10B11000000000000000000000000000000000002F -:10B12000000000000000000000000000000000001F -:10B13000000000000000000000000000000000000F -:10B1400000000000000000000000000000000000FF -:10B1500000000000000000000000000000000000EF -:10B1600000000000000000000000000000000000DF -:10B1700000000000000000000000000000000000CF -:10B1800000000000000000000000000000000000BF -:10B1900000000000000000000000000000000000AF -:10B1A000000000000000000000000000000000009F -:10B1B000000000000000000000000000000000008F -:10B1C000000000000000000000000000000000007F -:10B1D000000000000000000000000000000000006F -:10B1E000000000000000000000000000000000005F -:10B1F000000000000000000000000000000000004F -:10B20000000000000000000000000000000000003E -:10B21000000000000000000000000000000000002E -:10B22000000000000000000000000000000000001E -:10B23000000000000000000000000000000000000E -:10B2400000000000000000000000000000000000FE -:10B2500000000000000000000000000000000000EE -:10B2600000000000000000000000000000000000DE -:10B2700000000000000000000000000000000000CE -:10B2800000000000000000000000000000000000BE -:10B2900000000000000000000000000000000000AE -:10B2A000000000000000000000000000000000009E -:10B2B000000000000000000000000000000000008E -:10B2C000000000000000000000000000000000007E -:10B2D000000000000000000000000000000000006E -:10B2E000000000000000000000000000000000005E -:10B2F000000000000000000000000000000000004E -:10B30000000000000000000000000000000000003D -:10B31000000000000000000000000000000000002D -:10B32000000000000000000000000000000000001D -:10B33000000000000000000000000000000000000D -:10B3400000000000000000000000000000400006B7 -:10B35000000C0000000000000000000000000000E1 -:10B3600000000000000000000000000000000000DD -:10B3700000000000000000000000000000000000CD -:10B3800000000000000000000000000000000000BD -:10B3900000000000000000000000000000000000AD -:10B3A000000000000000000000000000000000009D -:10B3B000000000000000000000000000000000008D -:10B3C000000000000000000000000000000000007D -:10B3D000FF00FFFF00000000000000000000000070 -:10B3E000000000000000000000000000000000005D -:10B3F000000000000000000000000000000000004D -:10B40000000000000000000000000000000000003C -:10B41000000000000000000000000000000000002C -:10B42000000000000000000000000000000000001C -:10B43000000000000000000000000000000000000C -:10B4400000000000000000000000000000000000FC -:10B450000000FF00000000000000000000000000ED -:10B4600000000000000000000000000000000000DC -:10B4700000000000000000000000000000000000CC -:10B4800000000000000000000000000000000000BC -:10B4900000000000000000000000000000000000AC -:10B4A000000000000000000000000000000000009C -:10B4B000000000000000000000000000000000008C -:10B4C000000000000000000000000000000000007C -:10B4D000000000000000F0F000000000000000008C -:10B4E000000000000000000000000000000000005C -:10B4F000000000000000000000000000000000004C -:10B50000000000000000000000000000000000003B -:10B51000000000000000000000000000000000002B -:10B52000000000000000000000000000000000001B -:10B53000000000000000000000000000000000000B -:10B5400000000000000000000000000000000000FB -:10B550000000000000000000F0F00000000000000B -:10B5600000000000000000000000000000000000DB -:10B5700000000000000000000000000000000000CB -:10B5800000000000000000000000000000000000BB -:10B5900000000000000000000000000000000000AB -:10B5A000000000000000000000000000000000009B -:10B5B000000000000000000000000000000000008B -:10B5C000000000000000000000000000000000007B -:10B5D00000000000000000000080000000000000EB -:10B5E000000000000000000000000000000000005B -:10B5F000000000000000000000000000000000004B -:10B60000000000000000000000000000000000003A -:10B61000000000000000000000000000000000002A -:10B62000000000000000000000000000000000001A -:10B63000000000000000000000000000000000000A -:10B6400000000000000000000000090000000000F1 -:10B65000000000000000004000000040000000006A -:10B66000000000A000020000000000000000000038 -:10B6700000000000000000000000000000000000CA -:10B6800000000000000000000000000000000000BA -:10B6900000000000000000000000000000000000AA -:10B6A000000000000000000000000000000000009A -:10B6B000000000000000000000000000000000008A -:10B6C000000000000000000000000000000000007A -:10B6D000000000000000000000000000000000006A -:10B6E0000000000000008840000000000000000092 -:10B6F000000004000400040004000000000000003A -:10B700000000000000000000000000000000000039 -:10B710000000000000000000000000000000000029 -:10B720000000000000000000000000000000000019 -:10B730000000000000000000000000000000000009 -:10B74000000000000000000000000000008400086D -:10B7500000000000000000840088000000000000DD -:10B76000000000000500000000010000000000884B -:10B7700000000000000000000200000000000000C7 -:10B7800000000000000000000000000000000000B9 -:10B7900000000000000000000000000000000000A9 -:10B7A0000000000000000000000000000000000099 -:10B7B0000000000000000000000000000000000089 -:10B7C0000000000000000000000000000000000079 -:10B7D00000000800000008000000A00000000005B4 -:10B7E0000000000000000000C00382000000000014 -:10B7F0000000000000000000000000000000000049 -:10B800000000000000000000000000000000000038 -:10B810000000000000000000000000000000000028 -:10B820000000000000000000000000000000000018 -:10B830000000000000000000000000000000000008 -:10B8400000000000000000000000000000000000F8 -:10B8500000000000000000000000000000000000E8 -:10B8600008000000000000000000000000000000D0 -:10B8700000000000000000000000000000000000C8 -:10B8800000000000000000000000000000000000B8 -:10B8900000000000000000000000000000000000A8 -:10B8A0000000000000000000000000000000000098 -:10B8B0000000000000000000000000000000000088 -:10B8C0000000000000000000000000000000000078 -:10B8D0000000000000000000000000000000A000C8 -:10B8E0000000000000000000000000000000000058 -:10B8F0000000000000000000000000000000000048 -:10B900000000000000000000000000000000000037 -:10B910000000000000000000000000000000000027 -:10B920000000000000000000000000000000000017 -:10B930000000000000000000000000000000000007 -:10B9400000000000000000000000000000000000F7 -:10B9500000000000000000000000000000000000E7 -:10B9600000000000000000000000000000000000D7 -:10B9700000000000000000000000000000000000C7 -:10B9800000000000000000000000000000000000B7 -:10B9900000000000000000000000000000000000A7 -:10B9A0000000000000000000000000000000000097 -:10B9B0000000000000000000000000000000000087 -:10B9C0000000000000000000000000000000000077 -:10B9D0000000000000000000000000000000000067 -:10B9E000000000000000000000000800000000004F -:10B9F0000000000000000041000000000000000006 -:10BA00000000000000000000000000000000000036 -:10BA10000000000000000001000000000000000025 -:10BA20000000000000000000000000000000000016 -:10BA30000000000000000000000000000000000006 -:10BA400000000000000000000000000000000000F6 -:10BA500000000000000000000000000000000000E6 -:10BA600000000000000000C0000000000084000092 -:10BA700000000000000000000000000000000000C6 -:10BA800000000000000000000000000000000000B6 -:10BA900000000000000000000000000000000000A6 -:10BAA0000000000000000000000000000000000096 -:10BAB0000000000000000000000000000000000086 -:10BAC0000000000000000000000000000000000076 -:10BAD000000000000000000000000000000008005E -:10BAE00000000000000000000000200000009000A6 -:10BAF00000000011000000020000000000410000F2 -:10BB00000011000000000000000000000000000024 -:10BB10000000000000000000000000000000000025 -:10BB20000000000000000000000000000000000015 -:10BB30000000000000000000000000000000000005 -:10BB400000000000000000000000000000000000F5 -:10BB500000000000000000000000000000000000E5 -:10BB600000000000000000000000000000000000D5 -:10BB700000000000000000000000000000000000C5 -:10BB800000000000000000000000000000000000B5 -:10BB900000000000000000000000000000000000A5 -:10BBA0000000000000000000000000000000000095 -:10BBB0000000000000000000000000000000000085 -:10BBC0000000000000000000000000000000000075 -:10BBD0000000000000000000000000000000000065 -:10BBE0000000000000000000000000000000000055 -:10BBF00000000000000000C000C000040884000035 -:10BC00000000000000000000000000000000000034 -:10BC10000000000000000000000000000000000024 -:10BC20000000000000000000000000000000000014 -:10BC30000000000000000000000000000000000004 -:10BC400000000000000000000000000000000000F4 -:10BC500000000000000000000000000000000000E4 -:10BC600000000000000000000000000000000000D4 -:10BC700000000000000000000580008000808000BF -:10BC800000000000000000000000000000000000B4 -:10BC900000000000000000000000000000000000A4 -:10BCA0000000000000000000000000000000000094 -:10BCB0000000000000000000000000000000000084 -:10BCC0000000000000000000000000000000000074 -:10BCD0000000000000000000000000000000000064 -:10BCE0000000000000000000000000000000000054 -:10BCF00000000000000000000000000080808000C4 -:10BD000000800000000000000000000000000000B3 -:10BD10000000000000000000000000000000000023 -:10BD20000000000000000000000000000000000013 -:10BD30000000000000000000000000000000000003 -:10BD400000000000000000000000000000000000F3 -:10BD500000000000000000000000000000000000E3 -:10BD600000000000000000000000000000000000D3 -:10BD7000000000000000000000000000C00008C03B -:10BD8000100088C00000000000000000000000005B -:10BD900000000000000000000000000000000000A3 -:10BDA0000000000000000000000000000000000093 -:10BDB0000000000000000000000000000000000083 -:10BDC0000000000000000000000000000000000073 -:10BDD0000000000000000000000000000000000063 -:10BDE0000000000000000000000000000000000053 -:10BDF0000000000000000000000000000000A1881A -:10BE000000C0C08400C0000000000000000000006E -:10BE10000000000000000000000000000000000022 -:10BE20000000000000000001000000000000000011 -:10BE30000000000000000000000000000000000002 -:10BE400000000000000000000000000000000000F2 -:10BE500000000000000000000000000000000000E2 -:10BE600000000000000000000000000000000000D2 -:10BE700000000000000000000000000000000000C2 -:10BE800041000000800000000000000000000000F1 -:10BE900000000000000000000000000000000000A2 -:10BEA0000000000000000000000100000000000091 -:10BEB0000000000000000000000000000000000082 -:10BEC0000000000000000000000000000000000072 -:10BED0000000000000000000000000000000000062 -:10BEE0000000000000000000000000000000000052 -:10BEF0000000000000000000000000000000000042 -:10BF00000000804080408080800000000000000031 -:10BF10000000000000000000000000000000000021 -:10BF20000000000000000000000000010000000010 -:10BF30000000000000000000000000000000000001 -:10BF400000000000000000000000000000000000F1 -:10BF500000000000000000000000000000000000E1 -:10BF600000000000000000000000000000000000D1 -:10BF700000000000000000000000000000000000C1 -:10BF800000000000C001C000C040C0000000000070 -:10BF900000000000000000000000000000000000A1 -:10BFA0000000000000000000000000000001000090 -:10BFB0000000000000000000000000000000000081 -:10BFC0000000000000000000000000000000000071 -:10BFD0000000000000000000000000000000000061 -:10BFE0000000000000000000000000000000000051 -:10BFF0000000000000000000000000000000000041 -:10C000000000000000000000000041004842000065 -:10C010000000000000000000000000000000000020 -:10C020000000000000000000000000000000000010 -:10C030000000000000000000000000000000000000 -:10C0400000000000000000000000000000000000F0 -:10C0500000000000000000000000000000000000E0 -:10C0600000000000000000000000000000000000D0 -:10C0700000000000000000000000000000000000C0 -:10C0800000000000000000000000000000000000B0 -:10C0900000000000000000000000000000000000A0 -:10C0A0000000000000000000000000000000000090 -:10C0B0000000000000000000000000000000000080 -:10C0C0000000000000000000000000000000000070 -:10C0D0000000000000000000000000000000000060 -:10C0E0000000000000000000000000000000000050 -:10C0F0000000000000000000000000000000000040 -:10C10000000000000000000000000000000000002F -:10C11000000000000000000000000000000000001F -:10C12000000000000000000000000000000000000F -:10C1300000000000000000000000000000000000FF -:10C1400000000000000000000000000000000000EF -:10C1500000000000000000000000000000000000DF -:10C1600000000000000000000000000000000000CF -:10C1700000000000000000000000000000000000BF -:10C180000000000000000000000000004008400027 -:10C1900000842000000000000000000000000000FB -:10C1A000000000000000000000000000000000008F -:10C1B000000000000000000000000000000000007F -:10C1C000000000000000000000000000000000006F -:10C1D000000000000000000000000000000000005F -:10C1E000000000000000000000000000000000004F -:10C1F000000000000000000000000000000000003F -:10C2000000000000000000000000FFFFFFFF000032 -:10C21000000000000000000000000000000000001E -:10C22000000000000000000000000000000000000E -:10C2300000000000000000000000000000000000FE -:10C2400000000000000000000000000000000000EE -:10C2500000000000000000000000000000000000DE -:10C2600000000000000000000000000000000000CE -:10C2700000000000000000000000000000000000BE -:10C28000000000000000000000000000FFFFFFFFB2 -:10C29000000000000000000000000000000000009E -:10C2A000000000000000000000000000000000008E -:10C2B000000000000000000000000000000000007E -:10C2C000000000000000000000000000000000006E -:10C2D000000000000000000000000000000000005E -:10C2E000000000000000000000000000000000004E -:10C2F000000000000000000000000000000000003E -:10C30000000000000000000000000000000000002D -:10C3100010063000000000000800000000000000CF -:10C32000000000000000000000000000000000000D -:10C3300000000000000000000000000000000000FD -:10C3400000000000000000000000000000000000ED -:10C3500000000000000000000000000000000000DD -:10C3600000000000000000000000000000000000CD -:10C3700000000000000000000000000000000000BD -:10C3800000000000000000000000000000000000AD -:10C39000000000000000000000000000000000009D -:10C3A000000000000000000000000000000000008D -:10C3B000000000000000000000000000000000007D -:10C3C000000000000000000000000000000000006D -:10C3D000000000000000000000000000000000005D -:10C3E000000000000000000000000000000000004D -:10C3F000000000000000000000000000000000003D -:10C40000000000000000000000000000000000002C -:10C41000000000000000000000000000000000001C -:10C42000000000000000000000000000000000000C -:10C4300000000000000000000000000000000000FC -:10C4400000000000000000000000000000000000EC -:10C4500000000000000000000000000000000000DC -:10C4600000000000000000000000000000000000CC -:10C4700000000000000000000000000000000000BC -:10C4800000000000000000000000000000000000AC -:10C49000000000000000000000000000000000009C -:10C4A000000000000000000000000000000000008C -:10C4B000000000000000000000000000000000007C -:10C4C000000000000000000000000000000000006C -:10C4D000000000000000000000000000000000005C -:10C4E000000000000000000000000000000000004C -:10C4F000000000000000000000000000000000003C -:10C50000000000000000000000000000000000002B -:10C51000000000000000000000000000000000001B -:10C52000000000000000000000000000000000000B -:10C5300000000000000000000000000000000000FB -:10C5400000000000000000000000000000000000EB -:10C5500000000000000000000000000000000000DB -:10C5600000000000000000000000000000000000CB -:10C5700000000000000000000000000000000000BB -:10C5800000000000000000000000000000000000AB -:10C59000000000000000000000000000000000009B -:10C5A000000000000000000000000000000000008B -:10C5B000000000000000000000000000000000007B -:10C5C000000000000000000000000000000000006B -:10C5D000000000000000000000000000000000005B -:10C5E000000000000000000000000000000000004B -:10C5F000000000000000000000000000000000003B -:10C60000000000000000000000000000000000002A -:10C61000000000000000000000000000000000001A -:10C62000000000000000000000000000000000000A -:10C6300000000000000000000000000000000000FA -:10C6400000000000000000000000000000000000EA -:10C6500000000000000000000000000000000000DA -:10C6600000000000000000000000000000000000CA -:10C6700000000000000000000000000000000000BA -:10C6800000000000000000000200020002000200A2 -:10C69000000000000000000000000000000000009A -:10C6A000000000000000000000000000000000008A -:10C6B000000000000000000000000000000000007A -:10C6C000000000000000000000000000000000006A -:10C6D000000000000000000000000000000000005A -:10C6E000000000000000000000000000000000004A -:10C6F000000000000000000000000000000000003A -:10C700000000000000000000000000000000000029 -:10C710000000000000000000000000000000000019 -:10C720000000000000000000000000000000000009 -:10C7300000000000000000000000000000000000F9 -:10C7400000000000000000000000000000000000E9 -:10C7500000000000000000000000000000000000D9 -:10C7600000000000000000000000000000000000C9 -:10C7700000000000000000000000000000000000B9 -:10C7800000000000000000000000000000000000A9 -:10C790000000000000000000000000000000000099 -:10C7A0000000000000000000000000000000000089 -:10C7B0000000000000000000000000000000000079 -:10C7C0000000000000000000000000000000000069 -:10C7D0000000000000000000000000000000000059 -:10C7E0000000000000000000000000000000000049 -:10C7F0000000000000000000000000000000000039 -:10C800000000000000000000000000000000000028 -:10C810000000000000000000000000000000000018 -:10C820000000000000000000000000000000000008 -:10C8300000000000000000000000000000000000F8 -:10C8400000000000000000000000000000000000E8 -:10C8500000000000000000000000000000000000D8 -:10C8600000000000000000000000000000000000C8 -:10C8700000000000000000000000000000000000B8 -:10C8800000000000000000000000000000000000A8 -:10C890000000000000000000000000000000000098 -:10C8A0000000000000000000000000000000000088 -:10C8B0000020000000000000000000000000000058 -:10C8C0000000000000000000000000000000000068 -:10C8D0000000000000000000000000000000000058 -:10C8E0000000000000000000000000000000000048 -:10C8F0000000000000000000000000000000000038 -:10C900000000000000000000000000000000000027 -:10C910000000000000000000000000000000000017 -:10C920000000000000000000000000000000000007 -:10C9300000000000000000000000000000000000F7 -:10C9400000000000000000000000000000000000E7 -:10C9500000000000000000000000000000000000D7 -:10C9600000000000000000000000000000000000C7 -:10C9700000000000000000000000000000000000B7 -:10C9800000000000000000000000000000000000A7 -:10C990000000000000000000000000000000000097 -:10C9A0000000000000000000000000000000000087 -:10C9B0000000000000000000000000000000000077 -:10C9C0000000000000000000000000000000000067 -:10C9D0000000000000000000000000000000000057 -:10C9E0000000000000000000000000000000000047 -:10C9F0000000000000000000000000000000000037 -:10CA00000000000000000000000000000000000026 -:10CA10000000000000000000000000000000000016 -:10CA20000000000000000000000000000000000006 -:10CA300000840000008400000000000000000000EE -:10CA400000000000000000000000000000000000E6 -:10CA500000000000000000000000000000000000D6 -:10CA600000000000000000000000000000000000C6 -:10CA700000000000000000000000000000000000B6 -:10CA800000000000000000000000000000000000A6 -:10CA90000000000000000000000000000000000096 -:10CAA0000000000000000000000000000000000086 -:10CAB00000000000000000000000004000000040F6 -:10CAC0000000000000000000000000000000000066 -:10CAD0000000000000000000000000000000000056 -:10CAE0000000000000000000000000000000000046 -:10CAF0000000000000000000000000000000000036 -:10CB00000000000000000000000000000000000025 -:10CB10000000000000000000000000000000000015 -:10CB20000000000000000000000000000000000005 -:10CB300000000000000000000000000000000000F5 -:10CB400000000000000000000000020000000000E3 -:10CB500000000000000000000000000000000000D5 -:10CB600000000000000000000000000000000000C5 -:10CB700000000000000000000000000000000000B5 -:10CB800000000000000000000000000000000000A5 -:10CB90000000000000000000000000000000000095 -:10CBA0000000000000000000000000000000000085 -:10CBB0000000000000000000000000000000000075 -:10CBC0000000000000000000000000000000000065 -:10CBD0000000000000000000000000000000000055 -:10CBE0000000000000000000000000000000000045 -:10CBF0000000000000000000000000000000000035 -:10CC00000000000000000000000000000000000024 -:10CC10000000000000000000000000000000000014 -:10CC20000000000000000000000000000000000004 -:10CC300000000000000000000000000000000000F4 -:10CC400000000000000000000000000000000000E4 -:10CC500000000000000000000000000000000000D4 -:10CC600000000000000000000000000000000000C4 -:10CC700000000000000000000000000000000000B4 -:10CC800000000000000000000000000000000000A4 -:10CC90000000000000000000000000000000000094 -:10CCA0000000000000000000000000000000000084 -:10CCB0000000000000000000000000000000000074 -:10CCC0000000000000000000000000000000000064 -:10CCD0000000000000000000000000000000000054 -:10CCE0000000000000000000000000000000000044 -:10CCF0000000000000000000000000000000000034 -:10CD00000000000000000000000000000000000023 -:10CD10000000000000000000000000000000000013 -:10CD20000000000000000000000000000000000003 -:10CD300000000000000000000000000000000000F3 -:10CD400000000000000000000000000000000000E3 -:10CD500000000000000000000000000000000000D3 -:10CD600000000000000000000000000000000000C3 -:10CD700000000000000000000000000000000000B3 -:10CD800000000000000000000000000000000000A3 -:10CD90000000000000000000000000000000000093 -:10CDA0000000000000000000000000000000000083 -:10CDB0000000000000000000000000000000000073 -:10CDC0000000000000000000000000000000000063 -:10CDD0000000000000000000000000000000000053 -:10CDE0000000000000000000000000000000000043 -:10CDF0000000000000000000000000000000000033 -:10CE00000000000000000000000000000000000022 -:10CE10000000000000000000000000000000000012 -:10CE20000000000000000000000000000000000002 -:10CE300000000000000000000000000000000000F2 -:10CE400000000000000000000000000000000000E2 -:10CE500000000000000000000000000000000000D2 -:10CE600000000000000000000000000000000000C2 -:10CE700000000000000000000000000000000000B2 -:10CE800000000000000000000000000000000000A2 -:10CE90000000000000000000000000000000000092 -:10CEA0000000000000000000000000000000000082 -:10CEB0000000000000000000000000000000000072 -:10CEC0000000000000000000000000000000000062 -:10CED0000000000000000000000000000000000052 -:10CEE0000000000000000000000000000000000042 -:10CEF0000000000000000000000000000000000032 -:10CF00000000000000000000000000000000000021 -:10CF10000000000000000000000000000000000011 -:10CF20000000000000000000000000000000000001 -:10CF300000000000000000000000000000000000F1 -:10CF400000000000000000000000000000000000E1 -:10CF500000000000000000000000000000000000D1 -:10CF600000000000000000000000000000000000C1 -:10CF700000000000000000000000000000000000B1 -:10CF800000000000000000000000000000000000A1 -:10CF90000000000000000000000000000000000091 -:10CFA0000000000000000000000000000000000081 -:10CFB0000000000000000000000000000000000071 -:10CFC0000000000000000000000000000000000061 -:10CFD0000000000000000000000000000000000051 -:10CFE0000000000000000000000000000000000041 -:10CFF0000000000000000000000000000000000031 -:10D000000000000000000000000000000000000020 -:10D010000000000000000000000000000000000010 -:10D020000000000000000000000000000000000000 -:10D0300000000000000000000000000000000000F0 -:10D0400000000000000000000000000000000000E0 -:10D0500000000000000000000000000000000000D0 -:10D0600000000000000000000000000000000000C0 -:10D0700000000000000000000000000000000000B0 -:10D0800000000000000000000000000000000000A0 -:10D090000000000000000000000000000000000090 -:10D0A0000000000000000000000000000000000080 -:10D0B0000000000000000000000000000000000070 -:10D0C0000000000000000000000000000000000060 -:10D0D0000000000000000000000000000000000050 -:10D0E0000000000000000000000000000000000040 -:10D0F0000000000000000000000000000000000030 -:10D10000000000000000000000000000000000001F -:10D11000000000000000000000000000000000000F -:10D1200000000000000000000000000000000000FF -:10D1300000000000000000000000000000000000EF -:10D1400000000000000000000000000000000000DF -:10D1500000000000000000000000000000000000CF -:10D1600000000000000000000000000000000000BF -:10D1700000000000000000000000000000000000AF -:10D18000000000000000000000000000000000009F -:10D19000000000000000000000000000000000008F -:10D1A000000000000000000000000000000000007F -:10D1B000000000000000000000000000000000006F -:10D1C000000000000000000000000000000000005F -:10D1D000000000000000000000000000000000004F -:10D1E000000000000000000000000000000000003F -:10D1F000000000000000000000000000000000002F -:10D20000000000000000000000000000000000001E -:10D21000000000000000000000000000000000000E -:10D2200000000000000000000000000000000000FE -:10D2300000000000000000000000000000000000EE -:10D2400000000000000000000000000000000000DE -:10D2500000000000000000000000000000000000CE -:10D2600000000000000000000000000000000000BE -:10D2700000000000000000000000000000000000AE -:10D28000000000000000000000000000000000009E -:10D29000000000000000000000000000000000008E -:10D2A000000000000000000000000000000000007E -:10D2B000000000000000000000000000000000006E -:10D2C000000000000000000000000000000000005E -:10D2D000000000000000000000000000000000004E -:10D2E000000000000000000000000000000000003E -:10D2F000000000000000000000000000000000002E -:10D30000000000000000000000000000000000001D -:10D31000000000000000000000000000000000000D -:10D3200000000000000000000000000000000000FD -:10D3300000000000000000000000000000000000ED -:10D3400000000000000000000000000000000000DD -:10D3500000000000000000000000000000000000CD -:10D3600000000000000000000000000000000000BD -:10D3700000000000000000000000000000000000AD -:10D38000000000000000000000000000000000009D -:10D39000000000000000000000000000000000008D -:10D3A000000000000000000000000000000000007D -:10D3B000000000000000000000000000000000006D -:10D3C000000000000000000000000000000000005D -:10D3D000000000000000000000000000000000004D -:10D3E000000000000000000000000000000000003D -:10D3F000000000000000000000000000000000002D -:10D40000000000000000000000000000000000001C -:10D41000000000000000000000000000000000000C -:10D4200000000000000000000000000000000000FC -:10D4300000000000000000000000000000000000EC -:10D4400000000000000000000000000000000000DC -:10D4500000000000000000000000000000000000CC -:10D4600000000000000000000000000000000000BC -:10D4700000000000000000000000000000000000AC -:10D48000000000000000000000000000000000009C -:10D49000000000000000000000000000000000008C -:10D4A000000000000000000000000000000000007C -:10D4B000000000000000000000000000000000006C -:10D4C0000400000000000000000000000000000058 -:10D4D000000000000000000000000000000000004C -:10D4E000000000000000000000000000000000003C -:10D4F0000000000000000000000000000400000028 -:10D50000000000000000000000000000000000001B -:10D51000000000000000000000000000000000000B -:10D5200000000000000000000000000000000000FB -:10D5300000000000000000000000000000000000EB -:10D54000000010000000000000000000000000408B -:10D5500000000000000000000000000000000000CB -:10D5600000020000000000000000000000000000B9 -:10D5700000000000000000000000000000000000AB -:10D58000000000000000000000000000000000009B -:10D59000000000000000000000000000000000008B -:10D5A000000000000000000000000000000000007B -:10D5B000000000000000000000000000000000006B -:10D5C000000000000000000000000000000000005B -:10D5D0000800000000000000000000000000000043 -:10D5E0000200000000000000000000000000000039 -:10D5F000000000000000000000000000000000002B -:10D60000000000000000000000000000000000001A -:10D61000000000000000000000000000000000000A -:10D6200000000000000000000000000000000000FA -:10D6300000000000000000000200000002000000E6 -:10D6400000000000020000000000000000000000D8 -:10D6500000000000000000000000000000000000CA -:10D6600000000000020000000000000000000000B8 -:10D6700000000000000000000000000000000000AA -:10D68000000000000000000000000000000000009A -:10D69000000000000000000000000000000000008A -:10D6A000000000000000000000000000000000007A -:10D6B000000000000000000000000000000000006A -:10D6C000000000000000000000000000000000005A -:10D6D000000000000000000000000000000000004A -:10D6E000000000000000000000000000000000003A -:10D6F000000000000000000000000000000000002A -:10D700000000000000000000000000000000000019 -:10D710000000000000000000000000000000000009 -:10D7200000000000000000000000000000000000F9 -:10D7300000000000000000000000000000000000E9 -:10D7400000000000000000000000000000000000D9 -:10D7500000000000000000000000000000000000C9 -:10D7600000000000000000000000000000000000B9 -:10D7700000000000000000000000000000000000A9 -:10D780000000000000000000000000000000000099 -:10D790000000000000000000000000000000000089 -:10D7A0000000000000000000000000000000000079 -:10D7B0000000000000000000000000000000000069 -:10D7C0000000000000000000000000000000004019 -:10D7D0000000000000000040000000000000000009 -:10D7E0000000000000000000000000000000000039 -:10D7F0000000000000000000000000000000000029 -:10D800000000000000000000000000000000000018 -:10D810000000000000000000000000000000000008 -:10D8200000000000000000000000000000000000F8 -:10D8300000000000000000000000000000000000E8 -:10D8400000000000000000000000000000000000D8 -:10D8500000000000000000000000000000000000C8 -:10D8600000000000000000000000000000000000B8 -:10D8700000000000000000000000000000000000A8 -:10D880000000000000000000000000000000000098 -:10D890000000000000000000000000000000000088 -:10D8A0000000000000000000000000000000000078 -:10D8B0000000000000000000000000000000000068 -:10D8C0000000000000000000000000000000000058 -:10D8D0000000000000000000000000000000000048 -:10D8E0000000000000000000000000000000000038 -:10D8F0000000000000000000000000000000000028 -:10D900000000000000000000000000000000000017 -:10D910000000000000000000000000000000000007 -:10D9200000000000000000000000000000000000F7 -:10D9300000000000000000000000000000000000E7 -:10D9400000000000000000000000000000000000D7 -:10D9500000000000000000000000000000000000C7 -:10D9600000000000000000000000000000000000B7 -:10D9700000000000000000000000000000000000A7 -:10D980000000000000000000000000000000000097 -:10D990000000000000000000000000000000000087 -:10D9A0000000000000000000000000000000000077 -:10D9B0000000000000000000000000000000000067 -:10D9C0000000000000000000000000000000000057 -:10D9D0000000000000000000000000000000000047 -:10D9E0000000000000000000000000000000000037 -:10D9F0000000000000000000000000000000000027 -:10DA00000000000000000000000000000000000016 -:10DA10000000000000000000000000000000000006 -:10DA200000000000000000000000000000000000F6 -:10DA300000000000000000000000000000000000E6 -:10DA400000000000000000000000000000000000D6 -:10DA500000000000000000000000000000000000C6 -:10DA600000000000000000000000000000000000B6 -:10DA7000000000000000080000000000000000207E -:10DA80000000000000000000000000001100000085 -:10DA90000000000000000000000000000000000086 -:10DAA0000000000000000000000000000000000076 -:10DAB000000000000800000000000000000000005E -:10DAC0000000000000000000000000000000000056 -:10DAD0000000000000000000000000000000000046 -:10DAE0000000000000000000000000000000000036 -:10DAF0000000000000000000000000000000000026 -:10DB00000000000000000000000000000000000015 -:10DB10000000000000000000000000000000000005 -:10DB200000000000000000000000000000000000F5 -:10DB300000000000000000000000000000000000E5 -:10DB400000000000000000000000000000000000D5 -:10DB500000000000000000000000000000000000C5 -:10DB600000000000000000000000000000000000B5 -:10DB700000000000000000000000000000000000A5 -:10DB80000000000000000000000000000000000095 -:10DB90000000000000000000000000000000000085 -:10DBA0000000000000000000000000000000000075 -:10DBB0000000000000000000000000000000000065 -:10DBC0000000000000000000000000000000000055 -:10DBD0000000000000000000000000000000000045 -:10DBE0000000000000000000000000000000000035 -:10DBF0000000000000000000000000000000000025 -:10DC00000000000000000000000000000000000014 -:10DC10000000000000000000000000000000000004 -:10DC200000000000000000000000000000000000F4 -:10DC300000000000000000000000000000000000E4 -:10DC400000000000000000000000000000000000D4 -:10DC500000000000000000000000000000000000C4 -:10DC600000000000000000000000000000000000B4 -:10DC700000000000000000000000000000000000A4 -:10DC80000000000000000000000000000000000094 -:10DC90000000000000000000000000000000000084 -:10DCA0000000000000000000000000000000000074 -:10DCB0000000000000000000000000000000000064 -:10DCC0000000000000000000000000000000000054 -:10DCD0000000000000000000000000000000000044 -:10DCE0000000000000000000000000000000000034 -:10DCF0000000000000000000000000000000000024 -:10DD00000000000000000000000000000000000013 -:10DD10000000000000000000000000000000000003 -:10DD200000000000000000000000000000000000F3 -:10DD300000000000000000000000000000000000E3 -:10DD400000000000000000000000000000000000D3 -:10DD500000000000000000000000000000000000C3 -:10DD600000000000000000000000000000000000B3 -:10DD700000000000000000000000000000000000A3 -:10DD80000000000000000000000000000000000093 -:10DD90000000000000000000000000000000000083 -:10DDA0000000000000000000000000000000000073 -:10DDB0000000000000000000000000000000000063 -:10DDC0000000000000000000000000000000000053 -:10DDD0000000000000000000000000000000000043 -:10DDE0000000000000000000000000000000000033 -:10DDF0000000000000000000000000000000000023 -:10DE00000000000000000000000000000000000012 -:10DE10000000000000000000000000000000000002 -:10DE200000000000000000000000000000000000F2 -:10DE300000000000000000000000000000000000E2 -:10DE400000000000000000000000000000000000D2 -:10DE500000000000000000000000000000000000C2 -:10DE600000000000000000000000000000000000B2 -:10DE700000000000000000000000000000000000A2 -:10DE80000000000000000000000000000000000092 -:10DE90000000000000000000000000000000000082 -:10DEA0000000000000000000000000000000000072 -:10DEB0000000000000000000000000000000000062 -:10DEC0000000000000000000000000000000000052 -:10DED0000000000000000000000000000000000042 -:10DEE0000000000000000000000000000000000032 -:10DEF0000000000000000000000000000000000022 -:10DF00000000000000000000000000000000000011 -:10DF10000000000000000000000000000000000001 -:10DF200000000000000000000000000000000000F1 -:10DF300000000000000000000000000000000000E1 -:10DF400000000000000000000000000000000000D1 -:10DF500000000000000000000000000000000000C1 -:10DF600000000000000000000000000000000000B1 -:10DF700000000000000000000000000000000000A1 -:10DF80000000000000000000000000000000000091 -:10DF90000000000000000000000000000000000081 -:10DFA0000000000000000000000000000000000071 -:10DFB0000000000000000000000000000000000061 -:10DFC0000000000000000000000000000000000051 -:10DFD0000000000000000000000000000000000041 -:10DFE0000000000000000000000000000000000031 -:10DFF0000000000000000000000000000000000021 -:10E000000000000000000000000000000000000010 -:10E010000000000000000000000000000000000000 -:10E0200000000000000000000000000000000000F0 -:10E0300000000000000000000000000000000000E0 -:10E0400000000000000000000000000000000000D0 -:10E0500000000000000000000000000000000000C0 -:10E0600000000000000000000000000000000000B0 -:10E0700000000000000000000000000000000000A0 -:10E080000000000000000000000000000000000090 -:10E090000000000000000000000000000000000080 -:10E0A0000000000000000000000000000000000070 -:10E0B0000000000000000000000000000000000060 -:10E0C0000000000000000000000000000000000050 -:10E0D0000000000000000000000000000000000040 -:10E0E0000000000000000000000000000000000030 -:10E0F0000000000000000000000000000000000020 -:10E10000000000000000000000000000000000000F -:10E1100000000000000000000000000000000000FF -:10E1200000000000000000000000000000000000EF -:10E1300000000000000000000000000000000000DF -:10E1400000000000000000000000000000000000CF -:10E1500000000000000000000000000000000000BF -:10E1600000000000000000000000000000000000AF -:10E17000000000000000000000000000000000009F -:10E18000000000000000000000000000000000008F -:10E19000000000000000000000000000000000007F -:10E1A000000000000000000000000000000000006F -:10E1B000000000000000000000000000000000005F -:10E1C000000000000000000000000000000000004F -:10E1D000000000000000000000000000000000003F -:10E1E000000000000000000000000000000000002F -:10E1F000000000000000000000000000000000001F -:10E20000000000000000000000000000000000000E -:10E2100000000000000000000000000000000000FE -:10E2200000000000000000000000000000000000EE -:10E2300000000000000000000000000000000000DE -:10E2400000000000000000000000000000000000CE -:10E2500000000000000000000000000000000000BE -:10E2600000000000000000000000000000000000AE -:10E27000000000000000000000000000000000009E -:10E28000000000000000000000000000000000008E -:10E29000000000000000000000000000000000007E -:10E2A000000000000000000000000000000000006E -:10E2B000000000000000000000000000000000005E -:10E2C000000000000000000000000000000000004E -:10E2D000000000000000000000000000000000003E -:10E2E000000000000000000000000000000000002E -:10E2F000000000000000000000000000000000001E -:10E30000000000000000000000000000000000000D -:10E3100000000000000000000000000000000000FD -:10E3200000000000000000000000000000000000ED -:10E3300000000000000000000000000000000000DD -:10E3400000000000000000000000000000000000CD -:10E3500000000000000000000000000000000000BD -:10E3600000000000000000000000000000000000AD -:10E37000000000000000000000000000000000009D -:10E38000000000000000000000000000000000008D -:10E39000000000000000000000000000000000007D -:10E3A000000000000000000000000000000000006D -:10E3B000000000000000000000000000000000005D -:10E3C000000000000000000000000000000000004D -:10E3D000000000000000000000000000000000003D -:10E3E000000000000000000000000000000000002D -:10E3F000000000000000000000000000000000001D -:10E40000000000000000000000000000000000000C -:10E4100000000000000000000000000000000000FC -:10E4200000000000000000000000000000000000EC -:10E4300000000000000000000000000000000000DC -:10E4400000000000000000000000000000000000CC -:10E4500000000000000000000000000000000000BC -:10E4600000000000000000000000000000000000AC -:10E47000000000000000000000000000000000009C -:10E48000000000000000000200000000000000008A -:10E49000000000000000000000000000000000007C -:10E4A000000002000000000000000000000000006A -:10E4B00000000000C000000000000000000000019B -:10E4C000000000000000000000000000000000004C -:10E4D00000000000000000000080000000000000BC -:10E4E000000000000000000000000000000000002C -:10E4F000000000000000000000000000000000001C -:10E50000000000000000000000000000000000000B -:10E5100000000000000000000000000000000000FB -:10E5200000000000000000000000000000000000EB -:10E5300000000000000000000000000000000000DB -:10E5400000000000000000000000000000000000CB -:10E55000000000000000000000000040000000007B -:10E5600000000000000000000000000000000000AB -:10E57000000000000000000000000000000000009B -:10E58000000000000000000000000000000000008B -:10E59000000000000000000000000000000000007B -:10E5A000000000000000000000000000000000006B -:10E5B000000010000100100010000000000000002A -:10E5C0000000000000000000000000000000020049 -:10E5D000000000000000000000000000000000003B -:10E5E000000000000000000000000000000000002B -:10E5F000000000000000000000000000000000001B -:10E60000000000000000000000000000000000000A -:10E6100000000000000000000000000000000000FA -:10E6200000000000000000000000000000000000EA -:10E63000000000008000100080008000000000004A -:10E6400000000000000000000000000000000000CA -:10E6500000000200000000000000000000000000B8 -:10E6600000000000000000000000000000000000AA -:10E67000000000000000000000000000000000009A -:10E68000000000000000000000000000000000008A -:10E69000000000000000000000000000000000007A -:10E6A000000000000000000000000000000000006A -:10E6B000000000000000000000000000000000005A -:10E6C000000000000000000000000000000000004A -:10E6D000000000000000000000000000000000003A -:10E6E000000000000000000000000000000000002A -:10E6F00000000000000900000011000000020000FE -:10E700000000000000000000000000000000000009 -:10E7100000000000000000000000000000000000F9 -:10E7200000000000000000000000000000000000E9 -:10E7300000000000000000000000000000000000D9 -:10E7400000000000000000000000000000000000C9 -:10E7500000000000000000000000000000000000B9 -:10E7600000000000000000000000000000000000A9 -:10E770000000000000000000000000000000000099 -:10E780000000000000000000000000000000000089 -:10E790000000000000000000000000000000000079 -:10E7A0000000000000000000000020000000000049 -:10E7B0000000000000000000000000000000000059 -:10E7C0000100000000000000000000000000000048 -:10E7D000000000000040C000840000400000000075 -:10E7E0000000000000000000000000000000000029 -:10E7F0000000000000000000000000000000000019 -:10E800000000000000000000000000000000000008 -:10E8100000000000000000000000000000000000F8 -:10E8200000000000000000000000000000000000E8 -:10E8300000000000000000000000000000000000D8 -:10E8400000002000000000000000000000000000A8 -:10E8500000000000000000000000000000000000B8 -:10E8600000000000000000000000000000000000A8 -:10E870000000000000000000000000000000000098 -:10E880000000000000000000000000000000000088 -:10E890000000000000000000000000000000000078 -:10E8A0000000000000000000000000000000000068 -:10E8B000000000000000000000000000A0000000B8 -:10E8C0000000000000000000000000000000000048 -:10E8D00000000000080000000000C0000000000070 -:10E8E000C000000000001000000000000000000058 -:10E8F00000210000000000400000000000000000B7 -:10E900000000000000000000000000000000000007 -:10E9100000000000000000000000000000000000F7 -:10E9200000000000000000000000000000000000E7 -:10E9300000000000000000000000000000000000D7 -:10E9400000000000000000000000000000000000C7 -:10E9500000000000000000000000000000000000B7 -:10E9600000000000000000000000000000000000A7 -:10E970000000000000000000000000000000000097 -:10E980000000000000000000000000000000000087 -:10E990000000000000000000000000000000000077 -:10E9A0000000000000000000000000000000000067 -:10E9B000000000000000000090000000880000003F -:10E9C0000000000000000000000000000000000047 -:10E9D0000000000000000000000000001000000027 -:10E9E00000000000A000000000000800000000007F -:10E9F00000000000000000000021000000000000F6 -:10EA00000000000000000000000000000000000006 -:10EA100000000000000000000000000000000000F6 -:10EA200000000000000000000040000000000000A6 -:10EA300000000000000000000000000000000000D6 -:10EA400000000000000000000000000000000000C6 -:10EA500000000000000000000000000000000000B6 -:10EA600000000000000000000000000000000000A6 -:10EA70000000000000000000000000000000000096 -:10EA80000000000000000000000000000000000086 -:10EA90000000000000000000000000000000000076 -:10EAA0000000000000000000000000000000000066 -:10EAB0000000000000000000000000000000000056 -:10EAC0000000000000000100000000000000000045 -:10EAD0000000000000000000000000000000000036 -:10EAE0000000000000000000000000000000000026 -:10EAF00011900010000288080000000000000000D3 -:10EB00000000000000000000000000000000000005 -:10EB100000000000000000000000000000000000F5 -:10EB200000000000000000000000000000000000E5 -:10EB300000000000000000000000000000000000D5 -:10EB40000000000000000000110000210000000093 -:10EB500000000000000000000000000000000000B5 -:10EB600000000000000000000000000000000000A5 -:10EB70000000100000800000000000000000000005 -:10EB80000000000000000000000000000000000085 -:10EB90000000000000000000000000000000000075 -:10EBA0000000000000000000000000000000000065 -:10EBB0000000000000000000000000000000000055 -:10EBC00000000000000000000000004000001103F1 -:10EBD0000000000000000000000000000000000035 -:10EBE0000000000000000000000000000000000025 -:10EBF00000000000000000218000008000000000F4 -:10EC00000000000000000000000000000000000004 -:10EC100000000000000000000000000000000000F4 -:10EC200000000000000000000000000000000000E4 -:10EC300000000000000000000000000000000000D4 -:10EC400000000000000000000000000000000000C4 -:10EC500001000000000000000000000000000000B3 -:10EC600000000000000000000000000000000000A4 -:10EC700000000000000090001040084090020000DA -:10EC80000000000000000000000000000000000084 -:10EC90000000000000000000000000000000000074 -:10ECA0000000000000000000000000000000000064 -:10ECB0000000000000000000000000000000000054 -:10ECC0000000000000000000000000000000000044 -:10ECD000040000010100000000000000000000002E -:10ECE0000000000000000000000000000000000024 -:10ECF000000000000000000020900088401090906C -:10ED00000000000000000000000000000000000003 -:10ED100000000000000000000000000000000000F3 -:10ED200000000000000000000000000000000000E3 -:10ED300000000000000000000000000000000000D3 -:10ED400000000000000000000000000000000000C3 -:10ED500000008000000841000000000000000000EA -:10ED600000000000000000000000000000000000A3 -:10ED70000000000000000000000000000000800013 -:10ED80000000000000000000000000000000000083 -:10ED90000000000000000000000000000000000073 -:10EDA0000000000000000000000000000000000063 -:10EDB0000000000000000000000000000000000053 -:10EDC0000000000000000000000000000000000043 -:10EDD0000000000011000000000000000000000022 -:10EDE0000000000000000000000000000000000023 -:10EDF0000000000000000000000000008020808073 -:10EE00000000800000000000000000000000000082 -:10EE100000000000000000000000000000000000F2 -:10EE200000000000000000000000000000000000E2 -:10EE300000000000000000000000000000000000D2 -:10EE400000000000000000000000000000000000C2 -:10EE500000000000000001000000000000000000B1 -:10EE600000000000000000000000000000000000A2 -:10EE7000000000000000000000000000000004018D -:10EE80000210908804000000000000000000000054 -:10EE90000000000000000000000000000000000072 -:10EEA0000000000000000000000000000000000062 -:10EEB0000000000000000000000000000000000052 -:10EEC0000000000000000000000000000000000042 -:10EED000000000000000000000E00000000A000048 -:10EEE0000000000000000000000000000000000022 -:10EEF0000000000000000000000000000000000012 -:10EF00000000000000000000000000000000000001 -:10EF100000000000000000000000000000000000F1 -:10EF200000000000000000000000000000000000E1 -:10EF300000000000000000000000000000000000D1 -:10EF400000000000000000000000000000000000C1 -:10EF500000000000000000000000000000000000B1 -:10EF600000000000000000000000000000000000A1 -:10EF70000000000000000000000000000000000091 -:10EF80000000F3F3030317173C000000000000002B -:10EF90000000000000000000000000000000000071 -:10EFA0000000000000000000000000000000000061 -:10EFB0000000000000000000000000000000000051 -:10EFC0000000000000000000000000000000000041 -:10EFD0000000000000000000000000000000000031 -:10EFE0000000000000000000000000000000000021 -:10EFF0000000000000000000000000000000000011 -:10F0000000000000F505F5051717FFC3000000001C -:10F0100000000000000000000000000000000000F0 -:10F0200000000000000000000000000000000000E0 -:10F0300000000000000000000000000000000000D0 -:10F0400000000000000000000000000000000000C0 -:10F0500000000000000000000000000000000000B0 -:10F0600000000000000000000000000000000000A0 -:10F070000000000000000000000000000000000090 -:10F0800000000000000041EBA0A0303028EB0000A1 -:10F090000000000000000000000000000000000070 -:10F0A0000000000000000000000000000000000060 -:10F0B0000000000000000000000000000000000050 -:10F0C0000000000000000000000000000000000040 -:10F0D0000000000000000000000000000000000030 -:10F0E0000000000000000000000000000000000020 -:10F0F0000000000000000000000000000000000010 -:10F10000000000000000000041EBF5F5F3F328EBF0 -:10F1100000000000000000000000000000000000EF -:10F1200000000000000000000000000000000000DF -:10F1300000000000000000000000000000000000CF -:10F1400000000000000000000000000000000000BF -:10F1500000000000000000000000000000000000AF -:10F1600000000006000C000000000000000000008D -:10F17000000000000000000000000000000000008F -:10F18000000000000000000000000000000000C0BF -:10F19000000000000000000000000000000000006F -:10F1A000000000000000000000000000000000005F -:10F1B000000000000000000000000000000000004F -:10F1C000000000000000000000000000000000003F -:10F1D000000000000000000000000000000000002F -:10F1E00000000000FF0000FF000000000000000021 -:10F1F000000000000000000000000000000000000F -:10F2000000000000000000000000000000000000FE -:10F2100000000000000000000000000000000000EE -:10F2200000000000000000000000000000000000DE -:10F2300000000000000000000000000000000000CE -:10F2400000000000000000000000000000000000BE -:10F2500000000000000000000000000000000000AE -:10F26000000000000000FF0000FF000000000000A0 -:10F27000000000000000000000000000000000008E -:10F28000000000000000000000000000000000007E -:10F29000000000000000000000000000000000006E -:10F2A000000000000000000000000000000000005E -:10F2B000000000000000000000000000000000004E -:10F2C000000000000000000000000000000000003E -:10F2D000000000000000000000000000000000002E -:10F2E0000000000000000000FF0000FF0000000020 -:10F2F000000000000000000000000000000000000E -:10F3000000000000000000000000000000000000FD -:10F3100000000000000000000000000000000000ED -:10F3200000000000000000000000000000000000DD -:10F3300000000000000000000000000000000000CD -:10F3400000000000000000000000000000000000BD -:10F3500000000000000000000000000000000000AD -:10F3600000000000000000000000FF0000FF00009F -:10F37000000000000000000000000000000000008D -:10F38000000000000000000000000000000000007D -:10F39000000000000000000000000000000000006D -:10F3A000000000000000000000000000000000005D -:10F3B000000000000000000000000000000000004D -:10F3C00000000000000000002000000000002000FD -:10F3D00000000000000000008800000000000000A5 -:10F3E0000000000002000200040000000000000015 -:10F3F000000000000000000000000000000000000D -:10F4000000000000000000000000000000000000FC -:10F4100000000000000000000000000000000000EC -:10F4200000000000000000000000000000000000DC -:10F4300000000000000000000000000000000000CC -:10F4400000000000000000000000000000000000BC -:10F45000000000000000000000900000000000001C -:10F46000000000000000000000000000000000009C -:10F47000000000000000000000000000000000008C -:10F48000000000000000000000000000000000007C -:10F49000000000000000000000000000000000006C -:10F4A000000000000000000000000000000000005C -:10F4B000000000000000000000000000000000004C -:10F4C00000410000000000000000000000000000FB -:10F4D000000000000000000000000200000000002A -:10F4E000000000000000000000000000000000001C -:10F4F000000000000000000000000000000000000C -:10F5000000000000000000000000000000000000FB -:10F5100000000000000000000000000000000000EB -:10F5200000000000000000000000000000000000DB -:10F5300000000000000000000000000000000000CB -:10F5400000000000000000000008000000000000B3 -:10F5500000000000000000000000000000000000AB -:10F56000000000000000000000400000000000005B -:10F57000000000000000000000000000400000004B -:10F58000000000000000000000000000000000007B -:10F59000000000000000400000000000000000002B -:10F5A000000000000000000000000000000040001B -:10F5B000000000000000000000000000000000004B -:10F5C000000000000000000000000000000000003B -:10F5D000000000000000000000000000000000002B -:10F5E000000000000000000000000000000000001B -:10F5F000000000000000000000000000000000000B -:10F6000000000000000000000000000000000000FA -:10F6100000000000000000000000000000000000EA -:10F6200000000000000000000000000000000000DA -:10F6300000000000000000000000000000000000CA -:10F6400000000000000000000000000000000000BA -:10F6500000000000000000000000000000000000AA -:10F66000000000000000000000000000000000009A -:10F670000000080000000000000000000000000082 -:10F680000000000000000000000041000000000039 -:10F690000000000000000200000000000000000068 -:10F6A00000000000002000820000000400000000B4 -:10F6B000000000000000000000000000000000004A -:10F6C000000000080000000000000000000000082A -:10F6D0000000000010000000000000000011000009 -:10F6E00000000000000000000000000000000040DA -:10F6F00000400000000000000000000000000000CA -:10F7000000000000000000000000000000000000F9 -:10F7100000000000080008000000000000000000D9 -:10F7200000000000000000000000000000000000D9 -:10F7300000000000000000000000000000000000C9 -:10F7400000000000000000000000000000000000B9 -:10F7500000000000000000000000000000000000A9 -:10F760000000000000000000000000000000000099 -:10F770000000000000000000000000000000000089 -:10F780000000000000000000000000004100100028 -:10F790000000000000000000000000000000000069 -:10F7A0000000000000000000000000001000000049 -:10F7B0000000000000000000000000000000000049 -:10F7C0000000000000000000000000000000000039 -:10F7D0000000000000000000000000000000000029 -:10F7E0000000000000000000000000000000000019 -:10F7F0000000000000000000000000000000000009 -:10F8000000000000000010000800000000000000E0 -:10F8100000000000000000000000000000000000E8 -:10F8200000000000000000000000000000000000D8 -:10F8300000000000000000000000000800000000C0 -:10F8400000000000000000000000000000000000B8 -:10F8500000000000000000000000000000000000A8 -:10F860000000000000000000000000000000000098 -:10F870000000000000000000000000000000000088 -:10F8800000000084000000000000000000000000F4 -:10F890000000000000000000000000000000000068 -:10F8A0000000000000000090000003200340000062 -:10F8B0000000000000000000000000000002020044 -:10F8C0000000000000000000000000000000000038 -:10F8D0000000000000000000000000000000000028 -:10F8E0000000000000000000000000000000000018 -:10F8F0000000000000000000000000000000000008 -:10F9000000000000000000000000000000020000F5 -:10F9100000000000000000000000000000000000E7 -:10F9200000000000000000000000000000000000D7 -:10F9300000000000000000000000000000000000C7 -:10F9400000000000000000000000000000000000B7 -:10F950000000000400000000000020000000000083 -:10F96000000000000800000000000000000000008F -:10F970000000000000000000000000000000004047 -:10F98000000000000800000000000000000000006F -:10F99000000000000000000000000000080000005F -:10F9A0000000000000001000000000000000000047 -:10F9B0000000000000000000000000000000000047 -:10F9C0000000000000000000000000000000000037 -:10F9D0000000000000000000000000000000000027 -:10F9E0000000000000000000000000000000000017 -:10F9F0000000000000000000000000000000000007 -:10FA000000000000000000000000000000000000F6 -:10FA100000000000000000000000000000000000E6 -:10FA200000000000000000000000000000000000D6 -:10FA300000000000000000000000000000000000C6 -:10FA400000000000000000000000000000000000B6 -:10FA500000000000000000000000000000000000A6 -:10FA60000000000000000000000000000000000096 -:10FA70000000000000000000000000000000000086 -:10FA80000000000000000000000000000000000076 -:10FA90000000000000000000000000000000000066 -:10FAA0000000000000000000000000000000000056 -:10FAB0000000000000000000000000000000000046 -:10FAC0000000000000000000000000000000000036 -:10FAD0000000000000000000000000000000000026 -:10FAE0000000000000000000000000000000000016 -:10FAF0000000000000000000000000000000000006 -:10FB000000000000000000000000000000000000F5 -:10FB100000000000000000000000000000000000E5 -:10FB200000000000000000000000000000000000D5 -:10FB300000000000000000000000000000000000C5 -:10FB400000000000000000000000000000000000B5 -:10FB500000000000000000000000000000000000A5 -:10FB60000000000000000000000000000000000095 -:10FB70000000000000000000000000000000000085 -:10FB80000000000000000000000000000000000075 -:10FB90000000000000000000000000000000000065 -:10FBA0000000000000000000000000000000000055 -:10FBB0000000000000000000000000000000000045 -:10FBC0000000000000000000000000000000000035 -:10FBD0000000000000000000000000000000000025 -:10FBE0000000000000000000000000000000000015 -:10FBF0000000000000000000000000000000000005 -:10FC000000000000000000000000000000000000F4 -:10FC100000000000000000000000000000000000E4 -:10FC200000000000000000000000000000000000D4 -:10FC300000000000000000000000000000000000C4 -:10FC400000000000000000000000000000000000B4 -:10FC500000000000000000000000000000000000A4 -:10FC60000000000000000000000000000000000094 -:10FC70000000000000000000000000000000000084 -:10FC80000000000000000000000000000000000074 -:10FC90000000000000000000000000000000000064 -:10FCA0000000000000000000000000000000000054 -:10FCB0000000000000000000000000000000000044 -:10FCC0000000000000000000000000000000000034 -:10FCD0000000000000000000000000000000000024 -:10FCE0000000000000000000000000000000000014 -:10FCF0000000000000000000000000000000000004 -:10FD000000000000000000000000000000000000F3 -:10FD100000000000000000000000000000000000E3 -:10FD200000000000000000000000000000000000D3 -:10FD300000000000000000000000000000000000C3 -:10FD400000000000000000000000000000000000B3 -:10FD500000000000000000000000000000000000A3 -:10FD60000000000000000000000000000000000093 -:10FD70000000000000000000000000000000000083 -:10FD80000000000000000000000000000000000073 -:10FD90000000000000000000000000000000000063 -:10FDA0000000000000000000000000000000000053 -:10FDB0000000000000000000000000000000000043 -:10FDC0000000000000000000000000000000000033 -:10FDD0000000000000000000000000000000000023 -:10FDE0000000000000000000000000000000000013 -:10FDF0000000000000000000000000000000000003 -:10FE000000000000000000000000000000000000F2 -:10FE100000000000000000000000000000000000E2 -:10FE200000000000000000000000000000000000D2 -:10FE300000000000000000000000000000000000C2 -:10FE400000000000000000000000000000000000B2 -:10FE500000000000000000000000000000000000A2 -:10FE60000000000000000000000000000000000092 -:10FE70000000000000000000000000000000000082 -:10FE80000000000000000000000000000000000072 -:10FE90000000000000000000000000000000000062 -:10FEA0000000000000000000000000000000000052 -:10FEB0000000000000000000000000000000000042 -:10FEC0000000000000000000000000000000000032 -:10FED0000000000000000000000000000000000022 -:10FEE0000000000000000000000000000000000012 -:10FEF0000000000000000000000000000000000002 -:10FF000000000000000000000000000000000000F1 -:10FF100000000000000000000000000000000000E1 -:10FF200000000000000000000000000000000000D1 -:10FF300000000000000000000000000000000000C1 -:10FF400000000000000000000000000000000000B1 -:10FF500000000000000000000000000000000000A1 -:10FF60000000000000000000000000000000000091 -:10FF70000000000000000000000000000000000081 -:10FF80000000000000000000000000000000000071 -:10FF90000000000000000000000000000000000061 -:10FFA0000000000000000000000000000000000051 -:10FFB0000000000000000000000000000000000041 -:10FFC0000000000000000000000000000000000031 -:10FFD0000000000000000000000000000000000021 -:10FFE0000000000000000000000000000000000011 -:10FFF0000000000000000000000000000000000001 -:020000040008F2 -:1000000000000000000000000000000000000000F0 -:1000100000000000000000000000000000000000E0 -:1000200000000000000000000000000000000000D0 -:1000300000000000000000000000000000000000C0 -:1000400000000000000000000000000000000000B0 -:1000500000000000000000000000000000000000A0 -:100060000000000000000000000000000000000090 -:100070000000000000000000000000000000000080 -:100080000000000000000000000000000000000070 -:100090000000000000000000000000000000000060 -:1000A0000000000000000000000000000000000050 -:1000B0000000000000000000000000000000000040 -:1000C0000000000000000000000000000000000030 -:1000D0000000000000000000000000000000000020 -:1000E0000000000000000000000000000000000010 -:1000F0000000000000000000000000000000000000 -:1001000000000000000000000000000000000000EF -:1001100000000000000000000000000000000000DF -:1001200000000000000000000000000000000000CF -:1001300000000000000000000000000000000000BF -:1001400000000000000000000000000000000000AF -:10015000000000000000000000000000000000009F -:10016000000000000000000000000000000000008F -:10017000000000000000000000000000000000007F -:10018000000000000000000000000000000000006F -:10019000000000000000000000000000000000005F -:1001A000000000000000000000000000000000004F -:1001B000000000000000000000000000000000003F -:1001C000000000000000000000000000000000002F -:1001D000000000000000000000000000000000001F -:1001E000000000000000000000000000000000000F -:1001F00000000000000000000000000000000000FF -:1002000000000000000000000000000000000000EE -:1002100000000000000000000000000000000000DE -:1002200000000000000000000000000000000000CE -:1002300000000000000000000000000000000000BE -:1002400000000000000000000000000000000000AE -:10025000000000000000000000000000000000009E -:10026000000000000000000000000000000000008E -:10027000000000000000000000000000000000007E -:10028000000000000000000000000000000000006E -:10029000000000000000000000000000000000005E -:1002A000000000000000000000000000000000004E -:1002B000000000000000000000000000000000003E -:1002C000000000000000000000000000000000002E -:1002D000000000000000000000000000000000001E -:1002E000000000000000000000000000000000000E -:1002F00000000000000000000000000000000000FE -:1003000000000000000000000000000000000000ED -:1003100000000000000000000000000000000000DD -:1003200000000000000000000000000000000000CD -:1003300000000000000000000000000000000000BD -:1003400000000000000000000000000000000000AD -:10035000000000000000000000000000000000009D -:10036000000000000000000000000000000000008D -:10037000000000000000000000000000000020005D -:10038000000000000000000000002000200000002D -:10039000000000000000000000000000000000005D -:1003A000000000000000000000002000200000000D -:1003B0000000000000000000000000000400000039 -:1003C00040000000000000000000000020002000AD -:1003D000000088000000000000000000C0000000D5 -:1003E00020000000000000000000000020002000AD -:1003F00000032000000000000000000000000000DA -:1004000000000000000000000000000000000000EC -:1004100000000000000000000000000000000000DC -:1004200000000000000000000000000000000000CC -:1004300000001100000000000000000000000000AB -:10044000000041000000000000000000000000006B -:10045000000000000000000000000000000000009C -:10046000000000000000000000000000000000008C -:10047000000000000000000000000000000000007C -:10048000004000000000000000000000000000002C -:10049000000000000000000000000000000000005C -:1004A000000000000000000000000000000000004C -:1004B000000000000000000000000000000000003C -:1004C000000000000000000000000000000000002C -:1004D000000000000000000000000000000000001C -:1004E000000000000000000000000000000000000C -:1004F00000000000000000000000000000000000FC -:1005000000000000000000000000000000004100AA -:1005100000000000000000000000000000000000DB -:1005200000000000000000000000000000000000CB -:1005300000000000000000000000000000000000BB -:1005400000000000000000000000000000000000AB -:100550000000000000000000000000000400000097 -:10056000000000000000000000000000000000008B -:10057000000000000000000000000000000000007B -:10058000000000000000000000000000000000006B -:10059000000000000000000000000000000000005B -:1005A000000000000000000000000000000000004B -:1005B000000000000000000000000000000000003B -:1005C000000000000000000000000000000000002B -:1005D000000000000000000000000000000000001B -:1005E000A00000000000000000000000000000006B -:1005F00000000000000000000000000000000000FB -:1006000000000000000000000000000000000000EA -:1006100000000000000000000000000000000000DA -:1006200000000000000000000000000000000000CA -:1006300000000000000000000000000000000000BA -:1006400000000000000000000000000000000000AA -:10065000000000000000000000000000000000009A -:10066000000000000000000000000000000000008A -:1006700000000000000000000000009000000000EA -:100680000000000002000000000000000000000068 -:10069000000000000000000000000000000000005A -:1006A000000000000000000000000000000000004A -:1006B000000000000000000000000000000000003A -:1006C000000000000000000000000000000090009A -:1006D000000000000000000000000000000000001A -:1006E000000000000000000000000000000000000A -:1006F00000000000000000000000000000000000FA -:100700000000000000000000024002000800080095 -:1007100008000500000000000000000000000000CC -:100720000000000000000000000000000800009031 -:1007300000000500000000000000000000000000B4 -:100740000000000000000000000000001000100089 -:100750000000100040002000000000000000000029 -:10076000000000000000000000000000050008007C -:100770000000400010000000000000000000000029 -:100780000000000000000000000000000000000069 -:100790000000000000000000000000000000000059 -:1007A0000000000000000000000000000000000049 -:1007B0000000000000000000000000000000000039 -:1007C0000000000000000000000000000000000029 -:1007D0000000000000000000000000000000000019 -:1007E000000082000000000000000000080000007F -:1007F00000000000000000000000000000000000F9 -:1008000000000800000000000000000000000000E0 -:1008100000000000000000000000000000000000D8 -:1008200000000000000000000000000000000000C8 -:1008300000000000000000000000000000000000B8 -:1008400000000000000000000000000000000000A8 -:100850000000000000000000000000000000000098 -:10086000000000000900000000000000000000007F -:100870000000000000000000000000000000000078 -:100880000000000000000000000000000000000068 -:100890000000000000000000000000000000000058 -:1008A0000000000000000000000000000000000048 -:1008B0000000000000000000000000000000000038 -:1008C0000000000000000000000000000000000028 -:1008D0000000000000000000000000000000000018 -:1008E0000000000084000000000000000000000084 -:1008F00000000000000000000000000000000000F8 -:1009000000000000000000000000000000000200E5 -:100910000000009002001100000000000000030031 -:10092000088808000000000000000000000000002F -:100930000000000000000090000000000000000027 -:10094000088808000000000000000000000000000F -:1009500000000000000000002088000200000000ED -:1009600000000888080000000000000000000000EF -:1009700000000000000041004100000000000000F5 -:100980000000080008000000000000000000000057 -:100990000000000000000000000000000000000057 -:1009A0000000000000000000000000000000000047 -:1009B0000000000000000000000000000000000037 -:1009C0000000000000000000000000000000000027 -:1009D0000000000000000000000000000000000017 -:1009E0000000000000000000000000000000000007 -:1009F00000000000000000000000000000000000F7 -:100A000000000000000000000000000000000000E6 -:100A100000000000000000000000000000000000D6 -:100A200000000000000000000000000000000000C6 -:100A300000000000000000000000000000000000B6 -:100A400000000000000000000000000000000000A6 -:100A50000000000000000000000000000000000096 -:100A60000000000000000000000000000000000086 -:100A70000000000000000000000000000000000076 -:100A80000000000000000000000000000000000066 -:100A90000000000000000000000000000000000056 -:100AA0000000000000000000000000000000000046 -:100AB0000000000000000000000000000000000036 -:100AC0000000000000000000000000000000000026 -:100AD0000000000000000000000000000000000016 -:100AE0000000000000000000000000000000000006 -:100AF00000000000000000000000000000000000F6 -:100B000000000000000000000000000000000000E5 -:100B100000000000000000000000000000000000D5 -:100B200000000000000000000000000000000000C5 -:100B300000000000000000000000000000000000B5 -:100B400000000000000000000000000000000000A5 -:100B50000000000000000000000000000000000095 -:100B60000000000000000000000000000000000085 -:100B70000000000000000000000000000000000075 -:100B80000000000000000000000000000000000065 -:100B90000000000000000000000000000000000055 -:100BA0000000000000000000000000000000000045 -:100BB0000000000000000000000000000000000035 -:100BC0000000000000000000000000000000000025 -:100BD0000000000000000000000000000000000015 -:100BE0000000000000000000000000000000000005 -:100BF00000000000000000000000000000000000F5 -:100C000000000000000000000000000000000000E4 -:100C100000000000000000000000000000000000D4 -:100C200000000000000000000000000000000000C4 -:100C300000000000000000000000000000000000B4 -:100C400000000000000000000000000000000000A4 -:100C50000000000000000000000000000000000094 -:100C60000000000000000000000000000000000084 -:100C70000000000000000000000000000000000074 -:100C80000000000000000000000000000000000064 -:100C90000000000000000000000000000000000054 -:100CA0000000000000000000000000000000000044 -:100CB0000000000000000000000000000000000034 -:100CC0000000000000000000000000000000000024 -:100CD0000000000000000000000000000000000014 -:100CE0000000000000000000000000000000000004 -:100CF00000000000000000000000000000000000F4 -:100D000000000000000000000000000000000000E3 -:100D100000000000000000000000000000000000D3 -:100D200000000000000000000000000000000000C3 -:100D300000000000000000000000000000000000B3 -:100D400000000000000000000000000000000000A3 -:100D50000000000000000000000000000000000093 -:100D60000000000000000000000000000000000083 -:100D70000000000000000000000000000000000073 -:100D80000000000000000000000000000000000063 -:100D90000000000000000000000000000000000053 -:100DA0000000000000000000000000000000000043 -:100DB0000000000000000000000000000000000033 -:100DC0000000000000000000000000000000000023 -:100DD0000000000000000000000000000000000013 -:100DE0000000000000000000000000000000000003 -:100DF00000000000000000000000000000000000F3 -:100E000000000000000000000000000000000000E2 -:100E100000000000000000000000000000000000D2 -:100E200000000000000000000000000000000000C2 -:100E300000000000000000000000000000000000B2 -:100E400000000000000000000000000000000000A2 -:100E50000000000000000000000000000000000092 -:100E60000000000000000000000000000000000082 -:100E70000000000000000000000000000000000072 -:100E80000000000000000000000000000000000062 -:100E90000000000000000000000000000000000052 -:100EA0000000000000000000000000000000000042 -:100EB0000000000000000000000000000000000032 -:100EC0000000000000000000000000000000000022 -:100ED0000000000000000000000000000000000012 -:100EE0000000000000000000000000000000000002 -:100EF00000000000000000000000000000000000F2 -:100F000000000000000000000000000000000000E1 -:100F100000000000000000000000000000000000D1 -:100F200000000000000000000000000000000000C1 -:100F300000000000000000000000000000000000B1 -:100F400000000000000000000000000000000000A1 -:100F50000000000000000000000000000000000091 -:100F60000000000000000000000000000000000081 -:100F70000000000000000000000000000000000071 -:100F80000000000000000000000000000000000061 -:100F90000000000000000000000000000000000051 -:100FA0000000000000000000000000000000000041 -:100FB0000000000000000000000000000000000031 -:100FC0000000000000000000000000000000000021 -:100FD0000000000000000000000000000000000011 -:100FE0000000000000000000000000000000000001 -:100FF00000000000000000000000000000000000F1 -:1010000000000000000000000000000000000000E0 -:1010100000000000000000000000000000000000D0 -:1010200000000000000000000000000000000000C0 -:1010300000000000000000000000000000000000B0 -:1010400000000000000000000000000000000000A0 -:101050000000000000000000000000000000000090 -:101060000000000000000000000000000000000080 -:101070000000000000000000000000000000000070 -:101080000000000000000000000000000000000060 -:101090000000000000000000000000000000000050 -:1010A0000000000000000000000000000000000040 -:1010B0000000000000000000000000000000000030 -:1010C0000000000000000000000000000000000020 -:1010D0000000000000000000000000000000000010 -:1010E0000000000000000000000000000000000000 -:1010F00000000000000000000000000000000000F0 -:1011000000000000000000000000000000000000DF -:1011100000000000000000000000000000000000CF -:1011200000000000000000000000000000000000BF -:1011300000000000000000000000000000000000AF -:10114000000000000000000000000000000000009F -:10115000000000000000000000000000000000008F -:10116000000000000000000000000000000000007F -:10117000000000000000000000000000000000006F -:10118000000000000000000000000000000000005F -:10119000000000000000000000000000000000004F -:1011A000000000000000000000000000000000003F -:1011B000000000000000000000000000000000002F -:1011C000000000000000000000000000000000001F -:1011D000000000000000000000000000000000000F -:1011E00000000000000000000000000000000000FF -:1011F00000000000000000000000000000000000EF -:1012000000000000000000000000000000000000DE -:1012100000000000000000000000000000000000CE -:1012200000000000000000000000000000000000BE -:1012300000000000000000000000000000000000AE -:10124000000000000000000000000000000000009E -:10125000000000000000000000000000000000008E -:10126000000000000000000000000000000000007E -:10127000000000000000000000000000000000006E -:10128000000000000000000000000000000000005E -:10129000000000000000000000000000000000004E -:1012A000000000000000000000000000000000003E -:1012B00000000000000000008800200004008800FA -:1012C00088002000000020002000000020002000F6 -:1012D00020000080880000002000200088002000FE -:1012E00040000000000020002000000088002000D6 -:1012F0002000000000038800000088002000C000DB -:10130000200004000000C000200088000000200031 -:10131000000000000002200000002000200020004B -:10132000200020000008200020008800020020008B -:10133000000004000208000000000000000000009F -:10134000000000000000000000000000000000009D -:101350000000000000040000000000000000000089 -:101360000000090000000000000020000000000054 -:10137000000000000000000000000000200000004D -:10138000000000000000000000002000000000003D -:10139000000000002000000000000000000000002D -:1013A000000000000000000000000000000000003D -:1013B000000000000000000000000000000000002D -:1013C000000084008400880000000000000000008D -:1013D000000000000000000000000000000000000D -:1013E000820000000000000000000000000000007B -:1013F00000000000000000000000000000000000ED -:1014000000000000000000000000000000000000DC -:1014100000000000000000000000000000000000CC -:1014200000000000000000000000000000000000BC -:1014300000000000000000000000000000000000AC -:1014400000000000000020000000008400000000F8 -:10145000000000000000000000000000000000008C -:10146000000000000000000000000000000000007C -:10147000000000000000000000000000000000006C -:10148000000000000000000000000000000000005C -:10149000000000000000000000000000000000004C -:1014A000000000000000000000000000000000003C -:1014B000000000000000000000000000000000002C -:1014C0000000000300000000000000000000000019 -:1014D00000000000000000000000100000410000BB -:1014E00000000000000000000000000000000000FC -:1014F000000000000000000000000180000000115A -:1015000000000000000000000000000000000000DB -:1015100000000000000000000000000000000000CB -:1015200000000000A000000000000000000000001B -:10153000000000000000000000000000008000002B -:101540000000030000000800000000000000000090 -:10155000000000000000000000000000800000000B -:101560000000080000000000000000000000000073 -:101570000000000000000000000000002008000043 -:10158000000000000000000000000000000040001B -:101590000000000000000000000008000300000040 -:1015A000000000000000000000000000000000003B -:1015B0000000000000000000000000000300000820 -:1015C000080004009009881182004000404000009B -:1015D0004000820082118200820008008200080020 -:1015E00082008200A0008200820088110800C000F2 -:1015F000A000000082008200000082000000820043 -:1016000000000800C000A000820008008200040062 -:1016100082008400000000008200000082000000C0 -:1016200082008200000004008200A0008200080006 -:101630008200820002008200820008008200A02056 -:101640008200000000000000110000000000000007 -:101650000000030040000000000000000000000047 -:10166000080000000000210000000000000421002C -:10167000400000000800000000000800000000001A -:10168000000000000000000000000000000000005A -:101690000800000003000500080000000000000032 -:1016A000000000000000000000000000000000003A -:1016B0000000000000000800000000000000000022 -:1016C00000000000A0000000000000000000A000DA -:1016D0000005C00000210000A000000008008200FA -:1016E00000000000C0000000A000C0000800820050 -:1016F00000000000000000000000000008000000E2 -:10170000080000000003820000008200C00000000A -:10171000A000000000000000000082110000000096 -:101720000000000001000800000008008400000024 -:10173000A000000000000000000008000000000001 -:101740000000000001000000000000000000000098 -:101750000000000000000000000000000000000089 -:101760000000000000000000000000000000000079 -:101770000000000000000000000000000000000069 -:101780000000000000000000000000000000000059 -:101790000000000000000000000000000000000049 -:1017A0000000000000002000000000000000000019 -:1017B0000000000000000000000000000000000029 -:1017C0000000000000002000000008009009080947 -:1017D000080082008200900000000000A0050009BF -:1017E000000000000240000000000000820008002D -:1017F00020000800C00008000000000000000000F9 -:10180000000008008200000000000000A0000000AE -:10181000080084000800C000900000000000820062 -:1018200000000800080000001000A000A0009000C8 -:1018300008000800080000009000000000000800F8 -:101840000000000000000020000000000000000078 -:101850000000000000000000000000000000000088 -:101860000000000000000000000000000000000078 -:101870000000000000000000000000000000000068 -:101880000000000000000000000000000000000058 -:101890000000000000000000000000000000000048 -:1018A00000000000000000000000800000000000B8 -:1018B0000000000000000000000000000000000028 -:1018C0000000000000000000000000000001000116 -:1018D000000100C10001820100C00083000001017D -:1018E000008200040001020100C0000000010001AC -:1018F000000100C00001840100C1000300000101DB -:10190000008200040001400100C00000000000014E -:101910000001000100C00001C00100C10041000041 -:10192000010100C000820001020100C000000001AE -:101930000001000100C00001000100C000410000E2 -:101940000101004000040001020100C0000000414C -:101950000041004100C000410041009040C10040F2 -:1019600020410000008000418041008500000041CE -:101970000041004100C000410041008340C10020FF -:101980002041000000800041804100C000000000B4 -:1019900000410041004100C000410041008320415E -:1019A000002020410000000000418041008500002F -:1019B00000410041004100C000410041008520413C -:1019C000004020410000008000418041008500006F -:1019D00041000300000000804100C1000009050033 -:1019E00020002000008084004100C10000808000B1 -:1019F000410003000000008041008300000005005A -:101A000020000800008083004100C10000C0800069 -:101A1000000041000300000000804100830000003E -:101A2000050020000200008085004100C100008008 -:101A3000800041000300000000804100830000009E -:101A4000050020000200008090004100C1000080DD -:101A5000800001000100000000C00100C000000083 -:101A60000000830082900002C1004100C100000418 -:101A7000820001000100000000C00100C000000061 -:101A80000000410021900004C0004100C10000821C -:101A90008200000001000100000000C00100C00041 -:101AA00000000000410021900004C0004100C1007E -:101AB0000082820001000100000000C00100C0009F -:101AC00000000000210021900084C1204100C100DD -:101AD0000082820000C00001C0C1000000000001BF -:101AE00000C008030005000100C100000000000163 -:101AF0000000000000C00001C0C1000000000001A3 -:101B000000C020030003000100C10000000000012C -:101B100000000000000000C00001C0C10000000083 -:101B2000000100C010030005000100C1000000001A -:101B300000010000000000C00001C0C10000000062 -:101B4000000100C0C0030005000108C10000000042 -:101B50000001000000000080004180C10000000082 -:101B6000004100C1808200C1004100C100000000AE -:101B70000041000500000080004180C1000000001D -:101B8000004100C100820041004100C1000000008E -:101B900000410040000000000080004180C10000C2 -:101BA000000000410083808200C1004100C10000AC -:101BB00000000041000500000080004180C10000DD -:101BC000000000410083808200C1004180C100000C -:101BD0000000004100050000C100800080C100003D -:101BE0004104800005004100C141800080400000A8 -:101BF0004100000080004100C100800080C1000061 -:101C00004104004085004100C14180008040000047 -:101C100041000000800041000000C100800080C140 -:101C200000004140800002004100C141800080026C -:101C300000004100000080004100C100800080C120 -:101C400000004140800010004100C1C180008002BE -:101C500000004100000080004100C1004000C0C100 -:101C600000000101100082000100C1410400C00118 -:101C7000000001000000C0000100C1004000C0C120 -:101C800000000101C00082000100C1410400C00148 -:101C9000000001000000C00001000000C100400081 -:101CA000C0C1000001002000C1000100C1410400CA -:101CB000C001000001000000C0000100C1004000A0 -:101CC000C0C100000100200083000100C1410400E8 -:101CD000C001000001000000C00001000000000081 -:101CE0000000004200000000000000008112008897 -:101CF0000700480000000000000000000000000095 -:101D00000000004200000000000000008112008876 -:101D10000700480000000000000000000000000074 -:101D200000000000004200000000000000008112DE -:101D300000880700480000000000000000000000CC -:101D400000000000004200000000000000068112B8 -:101D500000880700480000000000000000000000AC -:101D60000000000000000000000000000000000073 -:101D70000000000000000000000000000000000063 -:101D80000000000000000000000000000000000053 -:101D90000000000000000000000000000000000043 -:101DA0000000000000000000000000000000000033 -:101DB0000000000000000000000000000000000023 -:101DC0000000000000000000000000000000000013 -:101DD0000000000000000000000000000000000003 -:101DE00000000000000000000000000000000000F3 -:101DF00000000000000000000000000000000000E3 -:101E000000000000000000000000000000000000D2 -:101E100000000000000000000000000000000000C2 -:101E200000000000000000000000000000000000B2 -:101E300000000000000000000000000000000000A2 -:101E40000000000000000000000000000000000092 -:101E50000000000000000000000000000000000082 -:101E60000000757B00000000000000000000000082 -:101E70000000000000000000000000000000000062 -:101E8000DEAE757B000000000000000000000000D6 -:101E90000000000000000000000000000000000042 -:101EA000DEAE0000757B00000000000000000000B6 -:101EB0000000000000000000000000000000000022 -:101EC0000000DEAE757B0000000000000000000096 -:101ED0000000000000000000000000000000000002 -:101EE0000000DEAE60C6030000000000000000310C -:101EF000E0000000000000000C00000000000000F6 -:101F000000C0630660C6030000000000000000314E -:101F1000E0000000000000000C00000000000000D5 -:101F200000C06306000060C603000000000000005F -:101F30000031E0000000000000000C000000000084 -:101F4000000000C0630660C603000000000000003F -:101F50000031E0000000000000000C000000000064 -:101F6000000000C063060000200000000000000028 -:101F700000000000840000000000000000000000DD -:101F80000000000000000400200000008400880021 -:101F90008800000020000000000084000000000015 -:101FA000000000000000000084002000000020006D -:101FB000000000000000200000000000840000007D -:101FC00000000000840000002000200088002000A5 -:101FD00088008800040020000000000000000000CD -:101FE00000000000000000000000000000000000F1 -:101FF00000020000000000000000000000000000DF -:1020000000000000000000000000000000000000D0 -:1020100000000000000000000000000005000500B6 -:1020200000000500000000000000000000000000AB -:1020300000000000000000000000000000000000A0 -:10204000000000000000050000000000000000008B -:102050000000000000000000000000000000000080 -:10206000000000000500200000000000000000004B -:102070000000000088000000840000000000000054 -:1020800000000000000000000000000090000000C0 -:1020900000000000000084000000020000000000BA -:1020A000020000000000000000000000000000002E -:1020B000000000000000020000000000000000001E -:1020C0000000000000000000000000000000000010 -:1020D0000000000000000000000000000000000000 -:1020E00000000000000000000000000000000000F0 -:1020F000000000000000000000000000000000845C -:1021000000000000000000000000000000000000CF -:1021100000000000000000000000000000000000BF -:1021200002000000000000000000000000000000AD -:10213000000000000000000000000000000000009F -:10214000000000000000000000000000000000008F -:10215000000000000000000000000000000000007F -:10216000000000000000000000000000000000006F -:10217000000000000000000000000000000000005F -:10218000000000000000000000000000000000004F -:1021900000410000000000000000000000000000FE -:1021A000000000000000000000000000000000002F -:1021B000000000000000000000000000000000001F -:1021C000000000000000000000000000000000000F -:1021D00000000000000000000000000000000000FF -:1021E00000000000000000000000000000000000EF -:1021F00000000000000000000000030000000000DC -:10220000000000A00000000000000000000000002E -:102210000000000000002100030003000000000097 -:1022200000000000000000000000000000000000AE -:10223000000008000000000008000800080000007E -:10224000000000000000000000000000000000008E -:10225000030000000000000008000300030000006D -:10226000410000000000000000000000000000002D -:10227000030000000000000000000000000000005B -:10228000400000000000000000004000400000008E -:10229000000000000000000000000000000000003E -:1022A000000000000000000000000000000000002E -:1022B000000000000000000000000000000000001E -:1022C000000008000000000008000000400040007E -:1022D00000000000000000000000000000000000FE -:1022E00000000800000000000000000000000000E6 -:1022F00000000000000000000000000000000000DE -:1023000000000000000000000000000000000000CD -:1023100000000000000000000000000000000000BD -:1023200000000000000000000000000000000000AD -:10233000000000000000000000000000000000009D -:10234000000000000000000000000000000000008D -:10235000000000000000000000000000000000007D -:10236000000000000000000000000000000000006D -:10237000000000000000000000000000000000005D -:10238000A0000000000000000000000000000000AD -:10239000000000000000000000000000000000003D -:1023A000A00000000000000000000000000000008D -:1023B000000000000000000000000000000000001D -:1023C0000000A00000000800000000000000000065 -:1023D00000000000000000000800000000000000F5 -:1023E0000000A0000000000000000000000000004D -:1023F00000000000000000000000000000000000DD -:10240000000000000000000041000000000000008B -:1024100000000000000000000000000000000000BC -:1024200000000000000000004100008400000000E7 -:102430000000000000000000000008000000000094 -:10244000000000000000000000004100000041000A -:10245000000000000000000000000000000000007C -:102460000000000000002100000041000000080002 -:102470000000000000000000000000000800000054 -:10248000000000000000000000000000000000004C -:1024900000000000000000008200000008000000B2 -:1024A000000000000000000000000000000000002C -:1024B0000000000000020000000000000000080012 -:1024C000000000000000000000000000000000000C -:1024D00000000000000000000000000000000800F4 -:1024E000820000000000000000000000000000006A -:1024F00000000000000000000000000000000000DC -:1025000000000000000000000000000000000000CB -:1025100000000000000000000000000000000000BB -:1025200000000000000000000000000000000000AB -:10253000000000000000000000000000000000009B -:10254000000000000000000000000000000000008B -:10255000000000000000000000000000000000007B -:10256000000000000000000000000000000000006B -:10257000000000000000000000000000000000005B -:10258000000000000000000000000000000000004B :10259000000000000000000000000000000000003B :1025A000000000000000000000000000000000002B :1025B000000000000000000000000000000000001B @@ -33539,16 +29442,16 @@ :102F90000000000000000000000000000000000031 :102FA0000000000000000000000000000000000021 :102FB0000000000000000000000000000000000011 -:102FC00000000400000000000000000000000000FD +:102FC0000000000000000000000000000000000001 :102FD00000000000000000000000000000000000F1 :102FE00000000000000000000000000000000000E1 :102FF00000000000000000000000000000000000D1 -:10300000000000000002009000000000000000002E +:1030000000000000000000000000000000000000C0 :1030100000000000000000000000000000000000B0 -:103020000000000003000000000000008200820099 -:10303000000000000000000000000000820000000E -:103040000000000000400000000000000000000040 -:1030500000008200000000000000000000000000EE +:1030200000000000000000000000000000000000A0 +:103030000000000000000000000000000000000090 +:103040000000000000000000000000000000000080 +:103050000000000000000000000000000000000070 :103060000000000000000000000000000000000060 :103070000000000000000000000000000000000050 :103080000000000000000000000000000000000040 @@ -33566,7 +29469,7 @@ :10314000000000000000000000000000000000007F :10315000000000000000000000000000000000006F :10316000000000000000000000000000000000005F -:10317000000000000000000000000000040000004B +:10317000000000000000000000000000000000004F :10318000000000000000000000000000000000003F :10319000000000000000000000000000000000002F :1031A000000000000000000000000000000000001F @@ -33578,7 +29481,7 @@ :1032000000000000000000000000000000000000BE :1032100000000000000000000000000000000000AE :10322000000000000000000000000000000000009E -:10323000000000000000000000000000000400008A +:10323000000000000000000000000000000000008E :10324000000000000000000000000000000000007E :10325000000000000000000000000000000000006E :10326000000000000000000000000000000000005E @@ -33750,7 +29653,7 @@ :103CC00000000000000000000000000000000000F4 :103CD00000000000000000000000000000000000E4 :103CE00000000000000000000000000000000000D4 -:103CF00000000000000000000000000000000000C4 +:103CF00000000000000000000004000000000000C0 :103D000000000000000000000000000000000000B3 :103D100000000000000000000000000000000000A3 :103D20000000000000000000000000000000000093 @@ -33773,7 +29676,7 @@ :103E30000000000000000000000000000000000082 :103E40000000000000000000000000000000000072 :103E50000000000000000000000000000000000062 -:103E60000000000000000000000000000000000052 +:103E60000000000000000000020000000000000050 :103E70000000000000000000000000000000000042 :103E80000000000000000000000000000000000032 :103E90000000000000000000000000000000000022 @@ -33801,7 +29704,7 @@ :103FF00000000000000000000000000000000000C1 :1040000000000000000000000000000000000000B0 :1040100000000000000000000000000000000000A0 -:10402000000000000000000000000000040000008C +:104020000000000000000000000000000000000090 :104030000000000000000000000000000000000080 :104040000000000000000000000000000000000070 :104050000000000000000000000000000000000060 @@ -34039,11 +29942,11 @@ :104ED00000000000000000000000000000000000D2 :104EE00000000000000000000000000000000000C2 :104EF00000000000000000000000000000000000B2 -:104F00000040000000000000000000000000000061 +:104F000000000000000000000000000000000000A1 :104F10000000000000000000000000000000000091 -:104F2000000000000000000000000000020002007D -:104F3000020000000000000000000000000000006F -:104F4000000000000000000000000200000000005F +:104F20000000000000000000000000000000000081 +:104F30000000000000000000000000000000000071 +:104F40000000000000000000000000000000000061 :104F50000000000000000000000000000000000051 :104F60000000000000000000000000000000000041 :104F70000000000000000000000000000000000031 @@ -34063,7 +29966,7 @@ :105050000000000000000000000000000000000050 :105060000000000000000000000000000000000040 :105070000000000000000000000000000000000030 -:10508000000000000000000004000000000000001C +:105080000000000000000000000000000000000020 :105090000000000000000000000000000000000010 :1050A0000000000000000000000000000000000000 :1050B00000000000000000000000000000000000F0 @@ -34115,7 +30018,4104 @@ :10539000000000000000000000000000000000000D :1053A00000000000000000000000000000000000FD :1053B00000000000000000000000000000000000ED -:1053C00020100000000000000000000000000000AD +:1053C00000000000000000000000000000000000DD +:1053D00000000000000000000000000000000000CD +:1053E00000000000000000000000000000000000BD +:1053F00000000000000000000000000000000000AD +:10540000000000000000000000000000000000009C +:10541000000000000000000000000000000000008C +:10542000000000000000000000000000000000007C +:10543000000000000000000000000000000000006C +:10544000000000000000000000000000000000005C +:10545000000000000000000000000000000000004C +:10546000000000000000000000000000000000003C +:10547000000000000000000000000000000000002C +:10548000000000000000000000000000000000001C +:10549000000000000000000000000000000000000C +:1054A00000000000000000000000000000000000FC +:1054B00000000000000000000000000000000000EC +:1054C00000000000000000000000000000000000DC +:1054D00000000000000000000000000000000000CC +:1054E00000000000000000000000000000000000BC +:1054F00000000000000000000000000000000000AC +:10550000000000000000000000000000000000009B +:10551000000000000000000000000000000000008B +:10552000000000000000000000000000000000007B +:10553000000000000000000000000000000000006B +:10554000000000000000000000000000000000005B +:10555000000000000000000000000000000000004B +:10556000000000000000000000000000000000003B +:10557000000000000000000000000000000000002B +:10558000000000000000000000000000000000001B +:10559000000000000000000000000000000000000B +:1055A00000000000000000000000000000000000FB +:1055B00000000000000000000000000000000000EB +:1055C00000000000000000000000000000000000DB +:1055D00000000000000000000000000000000000CB +:1055E00000000000000000000000000000000000BB +:1055F00000000000000000000000000000000000AB +:10560000000000000000000000000000000000009A +:10561000000000000000000000000000000000008A +:10562000000000000000000000000000000000007A +:10563000000000000000000000000000000000006A +:10564000000000000000000000000000000000005A +:10565000000000000000000000000000000000004A +:10566000000000000000000000000000000000003A +:10567000000000000000000000000000000000002A +:10568000000000000000000000000000000000001A +:10569000000000000000000000000000000000000A +:1056A00000000000000000000000000000000000FA +:1056B00000000000000000000000000000000000EA +:1056C00000000000000000000000000000000000DA +:1056D00000000000000000000000000000000000CA +:1056E00000000000000000000000000000000000BA +:1056F00000000000000000000000000000000000AA +:105700000000000000000000000000000000000099 +:105710000000000000000000000000000000000089 +:105720000000000000000000000000000000000079 +:105730000000000000000000000000000000000069 +:105740000000000000000000000000000000000059 +:105750000000000000000000000000000000000049 +:105760000000000000000000000000000000000039 +:105770000000000000000000000000000000000029 +:105780000000000000000000000000000000000019 +:105790000000000000000000000000000000000009 +:1057A00000000000000000000000000000000000F9 +:1057B00000000000000000000000000000000000E9 +:1057C00000000000000000000000000000000000D9 +:1057D00000000000000000000000000000000000C9 +:1057E00000000000000000000000000000000000B9 +:1057F00000000000000000000000000000000000A9 +:105800000000000000000000000000000000000098 +:105810000000000000000000000000000000000088 +:105820000000000000000000000000000000000078 +:105830000000000000000000000000000000000068 +:105840000000000000000000000000000000000058 +:105850000000000000000000000000000000000048 +:105860000000000000000000000000000000000038 +:105870000000000000000000000000000000000028 +:105880000000000000000000000000000000000018 +:105890000000000000000000000000000000000008 +:1058A00000000000000000000000000000000000F8 +:1058B00000000000000000000000000000000000E8 +:1058C00000000000000000000000000000000000D8 +:1058D00000000000000000000000000000000000C8 +:1058E00000000000000000000000000000000000B8 +:1058F00000000000000000000000000000000000A8 +:105900000000000000000000000000000000000097 +:105910000000000000000000000000000000000087 +:105920000000000000000000000000000000000077 +:105930000000000000000000000000000000000067 +:105940000000000000000000000000000000000057 +:105950000000000000000000000000000000000047 +:105960000000000000000000000000000000000037 +:105970000000000000000000000000000000000027 +:105980000000000000000000000000000000000017 +:105990000000000000000000000000000000000007 +:1059A00000000000000000000000000000000000F7 +:1059B00000000000000000000000000000000000E7 +:1059C00000000000000000000000000000000000D7 +:1059D00000000000000000000000000000000000C7 +:1059E00000000000000000000000000000000000B7 +:1059F00000000000000000000000000000000000A7 +:105A00000000000000000000000000000000000096 +:105A10000000000000000000000000000000000086 +:105A20000000000000000000000000000000000076 +:105A30000000000000000000000000000000000066 +:105A40000000000000000000000000000000000056 +:105A50000000000000000000000000000000000046 +:105A60000000000000000000000000000000000036 +:105A70000000000000000000000000000000000026 +:105A80000000000000000000000000000000000016 +:105A90000000000000000000000000000000000006 +:105AA00000000000000000000000000000000000F6 +:105AB00000000000000000000000000000000000E6 +:105AC00000000000000000000000000000000000D6 +:105AD00000000000000000000000000000000000C6 +:105AE00000000000000000000000000000000000B6 +:105AF00000000000000000000000000000000000A6 +:105B00000000000000000000000000000000000095 +:105B10000000000000000000000000000000000085 +:105B20000000000000000000000000000000000075 +:105B30000000000000000000000000000000000065 +:105B40000000000000000000000000000000000055 +:105B50000000000000000000000000000000000045 +:105B60000000000000000000000000000000000035 +:105B70000000000000000000000000000000000025 +:105B80000000000000000000000000000000000015 +:105B90000000000000000000000000000000000005 +:105BA00000000000000000000000000000000000F5 +:105BB00000000000000000000000000000000000E5 +:105BC00000000000000000000000000000000000D5 +:105BD00000000000000000000000000000000000C5 +:105BE00000000000000000000000000000000000B5 +:105BF00000000000000000000000000000000000A5 +:105C00000000000400000000000000000000000090 +:105C10000000000000000000000000000000000084 +:105C20000000000000000000000000000000000074 +:105C30000000000000000000000000000000000064 +:105C40000000000000000000000000000000000054 +:105C50000000000000000000000000000000000044 +:105C60000000000000000000000000000000000034 +:105C70000000000000000000000000000000000024 +:105C80000000000000000000000000000000000014 +:105C90000000000000000000000000000000000004 +:105CA00000000000000000000000000000000000F4 +:105CB00000000000000000000000000000000000E4 +:105CC00000000000000000000000000000000000D4 +:105CD00000000000000000000000000000000000C4 +:105CE00000000000000000000000000000000000B4 +:105CF00000000000000000000000000000000000A4 +:105D00000000000000000000000000000000000093 +:105D10000000000000000000000000000000000083 +:105D20000000000000000000000000000000000073 +:105D30000000000000000000000000000000000063 +:105D40000000000000000000000000000000000053 +:105D50000000000000000000000000000000000043 +:105D60000000000000000000000000000000000033 +:105D70000000000000000000000000000000000023 +:105D80000000000000000000000000000000000013 +:105D90000000000000000000000000000000000003 +:105DA00000000000000000000000000000000000F3 +:105DB00000000000000000000000000000000000E3 +:105DC00000000000000000000000000000000000D3 +:105DD00000000000000000000000000000000000C3 +:105DE00000000000000000000000000000000000B3 +:105DF00000000000000000000000000000000000A3 +:105E00000000000000000000000000000000000092 +:105E10000000000000000000000000000000000082 +:105E20000000000000000000000000000000000072 +:105E30000000000000000000000000000000000062 +:105E40000000000000000000000000000000000052 +:105E50000000000000000000000000000000000042 +:105E60000000000000000000000000000000000032 +:105E70000000000000000000000000000000000022 +:105E80000000000000000000000000000000000012 +:105E90000000000000000000000000000000000002 +:105EA00000000000000000000000000000000000F2 +:105EB00000000000000000000000000000000000E2 +:105EC00000000000000000000000000000000000D2 +:105ED00000000000000000000000000000000000C2 +:105EE00000000000000000000000000000000000B2 +:105EF00000000000000000000000000000000000A2 +:105F00000000000000000000000000000000000091 +:105F10000000000000000000000000000000000081 +:105F20000000000000000000000000000000000071 +:105F30000000000000000000000000000000000061 +:105F40000000000000000000000000000000000051 +:105F50000000000000000000000000000000000041 +:105F60000000000000000000000000000000000031 +:105F70000000000000000000000000000000000021 +:105F80000000000000000000000000000000000011 +:105F90000000000000000000000000000000000001 +:105FA00000000000000000000000000000000000F1 +:105FB00000000000000000000000000000000000E1 +:105FC00000000000000000000000000000000000D1 +:105FD00000000000000000000000000000000000C1 +:105FE00000000000000000000000000000000000B1 +:105FF00000000000000000000000000000000000A1 +:106000000000000000000000000000000000000090 +:106010000000000000000000000000000000000080 +:106020000000000000000000000000000000000070 +:106030000000000000000000000000000000000060 +:106040000000000000000000000000000000000050 +:106050000000000000000000000000000000000040 +:106060000000000000000000000000000000000030 +:106070000000000000000000000000000000000020 +:106080000000000000000000000000000000000010 +:106090000000000000000000000000000000000000 +:1060A00000000000000000000000000000000000F0 +:1060B00000000000000000000000000000000000E0 +:1060C00000000000000000000000000000000000D0 +:1060D00000000000000000000000000000000000C0 +:1060E00000000000000000000000000000000000B0 +:1060F00000000000000000000000000000000000A0 +:10610000000000000000000000000000000000008F +:10611000000000000000000000000000000000007F +:10612000000000000000000000000000000000006F +:10613000000000000000000000000000000000005F +:10614000000000000000000000000000000000004F +:10615000000000000000000000000000000000003F +:10616000000000000000000000000000000000002F +:10617000000000000000000000000000000000001F +:10618000000000000000000000000000000000000F +:1061900000000000000000000000000000000000FF +:1061A00000000000000000000000000000000000EF +:1061B00000000000000000000000000000000000DF +:1061C00000000000000000000000000000000000CF +:1061D00000000000000000000000000000000000BF +:1061E00000000000000000000000000000000000AF +:1061F000000000000000000000000000000000009F +:10620000000000000000000000000000000000008E +:10621000000000000000000000000000000000007E +:10622000000000000000000000000000000000006E +:10623000000000000000000000000000000000005E +:10624000000000000000000000000000000000004E +:10625000000000000000000000000000000000003E +:10626000000000000000000000000000000000002E +:10627000000000000000000000000000000000001E +:10628000000000000000000000000000000000000E +:1062900000000000000000000000000000000000FE +:1062A00000000000000000000000000000000000EE +:1062B00000000000000000000000000000000000DE +:1062C00000000000000000000000000000000000CE +:1062D00000000000000000000000000000000000BE +:1062E00000000000000000000000000000000000AE +:1062F000000000000000000000000000000000009E +:10630000000000000000000000000000000000008D +:10631000000000000000000000000000000000007D +:10632000000000000000000000000000000000006D +:10633000000000000000000000000000000000005D +:10634000000000000000000000000000000000004D +:10635000000000000000000000000000000000003D +:10636000000000000000000000000000000000002D +:10637000000000000000000000000000000000001D +:10638000000000000000000000000000000000000D +:1063900000000000000000000000000000000000FD +:1063A00000000000000000000000000000000000ED +:1063B00000000000000000000000000000000000DD +:1063C00000000000000000000000000000000000CD +:1063D00000000000000000000000000000000000BD +:1063E00000000000000000000000000000000000AD +:1063F000000000000000000000000000000000009D +:10640000000000000000000000000000000000008C +:10641000000000000000000000000000000000007C +:10642000000000000000000000000000000000006C +:10643000000000000000000000000000000000005C +:10644000000000000000000000000000000000004C +:10645000000000000000000000000000000000003C +:10646000000000000000000000000000000000002C +:10647000000000000000000000000000000000001C +:10648000000000000000000000000000000000000C +:1064900000000000000000000000000000000000FC +:1064A00000000000000000000000000000000000EC +:1064B00000000000000000000000000000000000DC +:1064C00000000000000000000000000000000000CC +:1064D00000000000000000000000000000000000BC +:1064E00000000000000000000000000000000000AC +:1064F000000000000000000000000000000000009C +:10650000000000000000000000000000000000008B +:10651000000000000000000000000000000000007B +:10652000000000000000000000000000000000006B +:10653000000000000000000000000000000000005B +:10654000000000000000000000000000000000004B +:10655000000000000000000000000000000000003B +:10656000000000000000000000000000000000002B +:10657000000000000000000000000000000000001B +:10658000000000000000000000000000000000000B +:1065900000000000000000000000000000000000FB +:1065A00000000000000000000000000000000000EB +:1065B00000000000000000000000000000000000DB +:1065C00000000000000000000000000000000000CB +:1065D00000000000000000000000000000000000BB +:1065E00000000000000000000000000000000000AB +:1065F000000000000000000000000000000000009B +:10660000000000000000000000000000000000008A +:10661000000000000000000000000000000000007A +:10662000000000000000000000000000000000006A +:10663000000000000000000000000000000000005A +:10664000000000000000000000000000000000004A +:10665000000000000000000000000000000000003A +:10666000000000000000000000000000000000002A +:10667000000000000000000000000000000000001A +:10668000000000000000000000000000000000000A +:1066900000000000000000000000000000000000FA +:1066A00000000000000000000000000000000000EA +:1066B00000000000000000000000000000000000DA +:1066C00000000000000000000000000000000000CA +:1066D00000000000000000000000000000000000BA +:1066E00000000000000000000000000000000000AA +:1066F000000000000000000000000000000000009A +:106700000000000000000000000000000000000089 +:106710000000000000000000000000000000000079 +:106720000000000000000000000000000000000069 +:106730000000000000000000000000000000000059 +:106740000000000000000000000000000000000049 +:106750000000000000000000000000000000000039 +:106760000000000000000000000000000000000029 +:106770000000000000000000000000000000000019 +:106780000000000000000000000000000000000009 +:1067900000000000000000000000000000000000F9 +:1067A00000000000000000000000000000000000E9 +:1067B00000000000000000000000000000000000D9 +:1067C00000000000000000000000000000000000C9 +:1067D00000000000000000000000000000000000B9 +:1067E00000000000000000000000000000000000A9 +:1067F0000000000000000000000000000000000099 +:106800000000000000000000000000000000000088 +:106810000000000000000000000000000000000078 +:106820000000000000000000000000000000000068 +:106830000000000000000000000000000000000058 +:106840000000000000000000000000000000000048 +:106850000000000000000000000000000000000038 +:106860000000000000000000000000000000000028 +:106870000000000000000000000000000000000018 +:106880000000000000000000000000000000000008 +:1068900000000000000000000000000000000000F8 +:1068A00000000000000000000000000000000000E8 +:1068B00000000000000000000000000000000000D8 +:1068C00000000000000000000000000000000000C8 +:1068D00000000000000000000000000000000000B8 +:1068E00000000000000000000000000000000000A8 +:1068F0000000000000000000000000000000000098 +:106900000000000000000000000000000000000087 +:106910000000000000000000000000000000000077 +:106920000000000000000000000000000000000067 +:106930000000000000000000000000000000000057 +:106940000000000000000000000000000000000047 +:106950000000000000000000000000000000000037 +:106960000000000000000000000000000000000027 +:106970000000000000000000000000000000000017 +:106980000000000000000000000000000000000007 +:1069900000000000000000000000000000000000F7 +:1069A00000000000000000000000000000000000E7 +:1069B00000000000000000000000000000000000D7 +:1069C00000000000000000000000000000000000C7 +:1069D00000000000000000000000000000000000B7 +:1069E00000000000000000000000000000000000A7 +:1069F0000000000000000000000000000000000097 +:106A00000000000000000000000000000000000086 +:106A10000000000000000000000000000000000076 +:106A20000000000000000000000000000000000066 +:106A30000000000000000000000000000000000056 +:106A40000000000000000000000000000000000046 +:106A50000000000000000000000000000000000036 +:106A60000000000000000000000000000000000026 +:106A70000000000000000000000000000000000016 +:106A80000000000000000000000000000000000006 +:106A900000000000000000000000000000000000F6 +:106AA00000000000000000000000000000000000E6 +:106AB00000000000000000000000000000000000D6 +:106AC00000000000000000000000000000000000C6 +:106AD00000000000000000000000000000000000B6 +:106AE00000000000000000000000000000000000A6 +:106AF0000000000000000000000000000000000096 +:106B00000000000000000000000000000000000085 +:106B10000000000000000000000000000000000075 +:106B20000000000000000000000000000000000065 +:106B30000000000000000000000000000000000055 +:106B40000000000000000000000000000000000045 +:106B50000000000000000000000000000000000035 +:106B60000000000000000000000000000000000025 +:106B70000000000000000000000000000000000015 +:106B80000000000000000000000000000000000005 +:106B900000000000000000000000000000000000F5 +:106BA00000000000000000000000000000000000E5 +:106BB00000000000000000000000000000000000D5 +:106BC00000000000000000000000000000000000C5 +:106BD00000000000000000000000000000000000B5 +:106BE00000000000000000000000000000000000A5 +:106BF0000000000000000000000000000000000095 +:106C00000000000000000000000000000000000084 +:106C10000000000000000000000000000000000074 +:106C20000000000000000000000000000000000064 +:106C30000000000000000000000000000000000054 +:106C40000000000000000000000000000000000044 +:106C50000000000000000000000000000000000034 +:106C60000000000000000000000000000000000024 +:106C70000000000000000000000000000000000014 +:106C80000000000000000000000000000000000004 +:106C900000000000000000000000000000000000F4 +:106CA00000000000000000000000000000000000E4 +:106CB00000000000000000000000000000000000D4 +:106CC00000000000000000000000000000000000C4 +:106CD00000000000000000000000000000000000B4 +:106CE00000000000000000000000000000000000A4 +:106CF0000000000000000000000000000000000094 +:106D00000000000000000000000000000000000083 +:106D10000000000000000000000000000000000073 +:106D20000000000000000000000000000000000063 +:106D30000000000000000000000000000000000053 +:106D40000000000000000000000000000000000043 +:106D50000000000000000000000000000000000033 +:106D60000000000000000000000000000000000023 +:106D70000000000000000000000000000000000013 +:106D80000000000000000000000000000000000003 +:106D900000000000000000000000000000000000F3 +:106DA00000000000000000000000000000000000E3 +:106DB00000000000000000000000000000000000D3 +:106DC00000000000000000000000000000000000C3 +:106DD00000000000000000000000000000000000B3 +:106DE00000000000000000000000000000000000A3 +:106DF0000000000000000000000000000000000093 +:106E00000000000000000000000000000000000082 +:106E10000000000000000000000000000000000072 +:106E20000000000000000000000000000000000062 +:106E30000000000000000000000000000000000052 +:106E40000000000000000000000000000000000042 +:106E50000000000000000000000000000000000032 +:106E60000000000000000000000000000000000022 +:106E70000000000000000000000000000000000012 +:106E80000000000000000000000000000000000002 +:106E900000000000000000000000000000000000F2 +:106EA00000000000000000000000000000000000E2 +:106EB00000000000000000000000000000000000D2 +:106EC00000000000000000000000000000000000C2 +:106ED00000000000000000000000000000000000B2 +:106EE00000000000000000000000000000000000A2 +:106EF0000000000000000000000000000000000092 +:106F00000000000000000000000000000000000081 +:106F10000000000000000000000000000000000071 +:106F20000000000000000000000000000000000061 +:106F30000000000000000000000000000000000051 +:106F40000000000000000000000000000000000041 +:106F50000000000000000000000000000000000031 +:106F60000000000000000000000000000000000021 +:106F70000000000000000000000000000000000011 +:106F80000000000000000000000000000000000001 +:106F900000000000000000000000000000000000F1 +:106FA00000000000000000000000000000000000E1 +:106FB00000000000000000000000000000000000D1 +:106FC00000000000000000000000000000000000C1 +:106FD00000000000000000000000000000000000B1 +:106FE00000000000000000000000000000000000A1 +:106FF0000000000000000000000000000000000091 +:107000000000000000000000000000000000000080 +:107010000000000000000000000000000000000070 +:107020000000000000000000000000000000000060 +:107030000000000000000000000000000000000050 +:107040000000000000000000000000000000000040 +:107050000000000000000000000000000000000030 +:107060000000000000000000000000000000000020 +:107070000000000000000000000000000000000010 +:107080000000000000000000000000000000000000 +:1070900000000000000000000000000000000000F0 +:1070A00000000000000000000000000000000000E0 +:1070B00000000000000000000000000000000000D0 +:1070C00000000000000000000000000000000000C0 +:1070D00000000000000000000000000000000000B0 +:1070E00000000000000000000000000000000000A0 +:1070F0000000000000000000000000000000000090 +:10710000000000000000000000000000000000007F +:10711000000000000000000000000000000000006F +:10712000000000000000000000000000000000005F +:10713000000000000000000000000000000000004F +:10714000000000000000000000000000000000003F +:10715000000000000000000000000000000000002F +:10716000000000000000000000000000000000001F +:10717000000000000000000000000000000000000F +:1071800000000000000000000000000000000000FF +:1071900000000000000000000000000000000000EF +:1071A00000000000000000000000000000000000DF +:1071B00000000000000000000000000000000000CF +:1071C00000000000000000000000000000000000BF +:1071D00000000000000000000000000000000000AF +:1071E000000000000000000000000000000000009F +:1071F000000000000000000000000000000000008F +:10720000000000000000000000000000000000007E +:10721000000000000000000000000000000000006E +:10722000000000000000000000000000000000005E +:10723000000000000000000000000000000000004E +:10724000000000000000000000000000000000003E +:10725000000000000000000000000000000000002E +:10726000000000000000000000000000000000001E +:10727000000000000000000000000000000000000E +:1072800000000000000000000000000000000000FE +:1072900000000000000000000000000000000000EE +:1072A00000000000000000000000000000000000DE +:1072B00000000000000000000000000000000000CE +:1072C00000000000000000000000000000000000BE +:1072D00000000000000000000000000000000000AE +:1072E000000000000000000000000000000000009E +:1072F000000000000000000000000000000000008E +:10730000000000000000000000000000000000007D +:10731000000000000000000000000000000000006D +:10732000000000000000000000000000000000005D +:10733000000000000000000000000000000000004D +:10734000000000000000000000000000000000003D +:10735000000000000000000000000000000000002D +:10736000000000000000000000000000000000001D +:10737000000000000000000000000000000000000D +:1073800000000000000000000000000000000000FD +:1073900000000000000000000000000000000000ED +:1073A00000000000000000000000000000000000DD +:1073B00000000000000000000000000000000000CD +:1073C00000000000000000000000000000000000BD +:1073D00000000000000000000000000000000000AD +:1073E000000000000000000000000000000000009D +:1073F000000000000000000000000000000000008D +:10740000000000000000000000000000000000007C +:10741000000000000000000000000000000000006C +:10742000000000000000000000000000000000005C +:10743000000000000000000000000000000000004C +:10744000000000000000000000000000000000003C +:10745000000000000000000000000000000000002C +:10746000000000000000000000000000000000001C +:10747000000000000000000000000000000000000C +:1074800000000000000000000000000000000000FC +:1074900000000000000000000000000000000000EC +:1074A00000000000000000000000000000000000DC +:1074B00000000000000000000000000000000000CC +:1074C00000000000000000000000000000000000BC +:1074D00000000000000000000000000000000000AC +:1074E000000000000000000000000000000000009C +:1074F000000000000000000000000000000000008C +:10750000000000000000000000000000000000007B +:10751000000000000000000000000000000000006B +:10752000000000000000000000000000000000005B +:10753000000000000000000000000000000000004B +:10754000000000000000000000000000000000003B +:10755000000000000000000000000000000000002B +:10756000000000000000000000000000000000001B +:10757000000000000000000000000000000000000B +:1075800000000000000000000000000000000000FB +:1075900000000000000000000000000000000000EB +:1075A00000000000000000000000000000000000DB +:1075B00000000000000000000000000000000000CB +:1075C00000000000000000000000000000000000BB +:1075D00000000000000000000000000000000000AB +:1075E000000000000000000000000000000000009B +:1075F000000000000000000000000000000000008B +:10760000000000000000000000000000000000007A +:10761000000000000000000000000000000000006A +:10762000000000000000000000000000000000005A +:10763000000000000000000000000000000000004A +:10764000000000000000000000000000000000003A +:10765000000000000000000000000000000000002A +:10766000000000000000000000000000000000001A +:10767000000000000000000000000000000000000A +:1076800000000000000000000000000000000000FA +:1076900000000000000000000000000000000000EA +:1076A00000000000000000000000000000000000DA +:1076B00000000000000000000000000000000000CA +:1076C00000000000000000000000000000000000BA +:1076D00000000000000000000000000000000000AA +:1076E000000000000000000000000000000000009A +:1076F000000000000000000000000000000000008A +:107700000000000000000000000000000000000079 +:107710000000000000000000000000000000000069 +:107720000000000000000000000000000000000059 +:107730000000000000000000000000000000000049 +:107740000000000000000000000000000000000039 +:107750000000000000000000000000000000000029 +:107760000000000000000000000000000000000019 +:107770000000000000000000000000000000000009 +:1077800000000000000000000000000000000000F9 +:1077900000000000000000000000000000000000E9 +:1077A00000000000000000000000000000000000D9 +:1077B00000000000000000000000000000000000C9 +:1077C00000000000000000000000000000000000B9 +:1077D00000000000000000000000000000000000A9 +:1077E0000000000000000000000000000000000099 +:1077F0000000000000000000000000000000000089 +:107800000000000000000000000000000000000078 +:107810000000000000000000000000000000000068 +:107820000000000000000000000000000000000058 +:107830000000000000000000000000000000000048 +:107840000000000000000000000000000000000038 +:107850000000000000000000000000000000000028 +:107860000000000000000000000000000000000018 +:107870000000000000000000000000000000000008 +:1078800000000000000000000000000000000000F8 +:1078900000000000000000000000000000000000E8 +:1078A00000000000000000000000000000000000D8 +:1078B00000000000000000000000000000000000C8 +:1078C00000000000000000000000000000000000B8 +:1078D00000000000000000000000000000000000A8 +:1078E0000000000000000000000000000000000098 +:1078F0000000000000000000000000000000000088 +:107900000000000000000000000000000000000077 +:107910000000000000000000000000000000000067 +:107920000000000000000000000000000000000057 +:107930000000000000000000000000000000000047 +:107940000000000000000000000000000000000037 +:107950000000000000000000000000000000000027 +:107960000000000000000000000000000000000017 +:107970000000000000000000000000000000000007 +:1079800000000000000000000000000000000000F7 +:1079900000000000000000000000000000000000E7 +:1079A00000000000000000000000000000000000D7 +:1079B00000000000000000000000000000000000C7 +:1079C00000000000000000000000000000000000B7 +:1079D00000000000000000000000000000000000A7 +:1079E0000000000000000000000000000000000097 +:1079F0000000000000000000000000000000000087 +:107A00000000000000000000000000000000000076 +:107A10000000000000000000000000000000000066 +:107A20000000000000000000000000000000000056 +:107A30000000000000000000000000000000000046 +:107A40000000000000000000000000000000000036 +:107A50000000000000000000000000000000000026 +:107A60000000000000000000000000000000000016 +:107A70000000000000000000000000000000000006 +:107A800000000000000000000000000000000000F6 +:107A900000000000000000000000000000000000E6 +:107AA00000000000000000000000000000000000D6 +:107AB00000000000000000000000000000000000C6 +:107AC00000000000000000000000000000000000B6 +:107AD00000000000000000000000000000000000A6 +:107AE0000000000000000000000000000002000094 +:107AF0000000000000000000000000000000000086 +:107B00000000000000000000000000000002000073 +:107B10000000000000000000000000000000000065 +:107B20000000000000000000000000000000000055 +:107B30000000000000000000000000000000000045 +:107B40000000000000000000000000000000000035 +:107B50000000000000000000000000000000000025 +:107B60000000000000000000000000000000000015 +:107B70000000000000000000000000000000000005 +:107B800000000000000000000000000000000000F5 +:107B900000000000000000000000000000000000E5 +:107BA00000000000000000000000000000000000D5 +:107BB00000000000000000000000000000000000C5 +:107BC00000000000000000000000000000000000B5 +:107BD00000000000000000000000000000000000A5 +:107BE0000000000000000000000000000000000095 +:107BF0000000000000000000000000000000000085 +:107C00000000000000000000000000000000000074 +:107C10000000000000000000000000000000000064 +:107C20000000000000000000000000000000000054 +:107C30000000000000000000000000000000000044 +:107C40000000000000000000000000000000000034 +:107C50000000000000000000000000000000000024 +:107C60000000000000000000000000000000000014 +:107C700000000000000000000000000000080000FC +:107C800000000000000000000000000000000000F4 +:107C900000000000000000000000000000080000DC +:107CA00000000000000000000000000000000000D4 +:107CB00000000000000000000000000000000008BC +:107CC00000000000000000000000000000000000B4 +:107CD0000000000000000000000000000000004064 +:107CE0000000000000000000000000000000000094 +:107CF0000000000000000000000000000000000084 +:107D00000000000000000000000000000000000073 +:107D10000000000000000000000000000000000063 +:107D20000000000000000000000000000000000053 +:107D30000000000000000000000000000000000043 +:107D40000000000000000000000000000000000033 +:107D50000000000000000000000000000000000023 +:107D60000000000000000000000000000000000013 +:107D70000000000000000000000000000000000003 +:107D800000000000000000000000000000000000F3 +:107D900000000000000000000000000000000000E3 +:107DA00000000000000000000000000000000000D3 +:107DB00000000000000000000000000000000000C3 +:107DC00000000000000000000000000000000000B3 +:107DD00000000000000000000000000000000000A3 +:107DE0000000000000000000000000000000000093 +:107DF0000000000000000000000000000000000083 +:107E00000000000000000000000000000000000072 +:107E10000000000000000000000000000000000062 +:107E20000000000000000000000000000000000052 +:107E30000000000000000000000000000000000042 +:107E40000000000000000000000000000000000032 +:107E50000000000000000000000000000000000022 +:107E60000000000000000000000000000000000012 +:107E70000000000000000000000000000000000002 +:107E800000000000000000000000000000000000F2 +:107E900000000000000000000000000000000000E2 +:107EA00000000000000000000000000000000000D2 +:107EB00000000000000000000000000000000000C2 +:107EC00000000000000000000000000000000000B2 +:107ED00000000000000000000000000000000000A2 +:107EE0000000000000000000000000000000000092 +:107EF0000000000000000000000000000000000082 +:107F00000000000000000000000000000000000071 +:107F10000000000000000000000000000000000061 +:107F20000000000000000000000000000000000051 +:107F30000000000000000000000000000000000041 +:107F40000000000000000000000000000000000031 +:107F50000000000000000000000000000000000021 +:107F60000000000000000000000000000000000011 +:107F70000000000000000000000000000000000001 +:107F800000000000000000000000000000000000F1 +:107F900000000000000000000000000000000000E1 +:107FA00000000000000000000000000000000000D1 +:107FB00000000000000000000000000000000000C1 +:107FC00000000000000000000000000000000000B1 +:107FD00000000000000000000000000000000000A1 +:107FE0000000000000000000000000000000000091 +:107FF0000000000000000000000000000000000081 +:108000000000000000000000000000000000000070 +:108010000000000000000000000000000000000060 +:108020000000000000000000000000000000000050 +:108030000000000000000000000000000000000040 +:108040000000000000000000000000000000000030 +:108050000000000000000000000000000000000020 +:108060000000000000000000000000000000000010 +:108070000000000000000000000000000000000000 +:1080800000000000000000000000000000000000F0 +:1080900000000000000000000000000000000000E0 +:1080A00000000000000000000000000000000000D0 +:1080B00000000000000000000000000000000000C0 +:1080C00000000000000000000000000000000000B0 +:1080D00000000000000000000000000000000000A0 +:1080E0000000000000000000000000000000000090 +:1080F0000000000000000000000000000000000080 +:10810000000000000000000000000000000000006F +:10811000000000000000000000000000000000005F +:10812000000000000000000000000000000000004F +:10813000000000000000000000000000000000003F +:10814000000000000000000000000000000000002F +:10815000000000000000000000000000000000001F +:10816000000000000000000000000000000000000F +:1081700000000000000000000000000000000000FF +:1081800000000000000000000000000000000000EF +:1081900000000000000000000000000000000000DF +:1081A00000000000000000000000000000000000CF +:1081B00000000000000000000000000000000000BF +:1081C00000000000000000000000000000000000AF +:1081D000000000000000000000000000000000009F +:1081E000000000000000000000000000000000008F +:1081F000000000000000000000000000000000007F +:10820000000000000000000000000000000000006E +:10821000000000000000000000000000000000005E +:10822000000000000000000000000000000000004E +:10823000000000000000000000000000000000003E +:10824000000000000000000000000000000000002E +:10825000000000000000000000000000000000001E +:10826000000000000000000000000000000000000E +:1082700000000000000000000000000000000000FE +:1082800000000000000000000000000000000000EE +:1082900000000000000000000000000000000000DE +:1082A00000000000000000000000000000000000CE +:1082B00000000000000000000000000000000000BE +:1082C00000000000000000000000000000000000AE +:1082D000000000000000000000000000000000009E +:1082E000000000000000000000000000000000008E +:1082F000000000000000000000000000000000007E +:10830000000000000000000000000000000000006D +:10831000000000000000000000000000000000005D +:10832000000000000000000000000000000000004D +:10833000000000000000000000000000000000003D +:10834000000000000000000000000000000000002D +:10835000000000000000000000000000000000001D +:10836000000000000000000000000000000000000D +:1083700000000000000000000000000000000000FD +:1083800000000000000000000000000000000000ED +:1083900000000000000000000000000000000000DD +:1083A00000000000000000000000000000000000CD +:1083B00000000000000000000000000000000000BD +:1083C00000000000000000000000000000000000AD +:1083D000000000000000000000000000000000009D +:1083E000000000000000000000000000000000008D +:1083F000000000000000000000000000000000007D +:10840000000000000000000000000000000000006C +:10841000000000000000000000000000000000005C +:10842000000000000000000000000000000000004C +:10843000000000000000000000000000000000003C +:10844000000000000000000000000000000000002C +:10845000000000000000000000000000000000001C +:10846000000000000000000000000000000000000C +:1084700000000000000000000000000000000000FC +:1084800000000000000000000000000000000000EC +:1084900000000000000000000000000000000000DC +:1084A00000000000000000000000000000000000CC +:1084B00000000000000000000000000000000000BC +:1084C00000000000000000000000000000000000AC +:1084D000000000000000000000000000000000009C +:1084E000000000000000000000000000000000008C +:1084F000000000000000000000000000000000007C +:10850000000000000000000000000000000000006B +:10851000000000000000000000000000000000005B +:10852000000000000000000000000000000000004B +:10853000000000000000000000000000000000003B +:10854000000000000000000000000000000000002B +:10855000000000000000000000000000000000001B +:10856000000000000000000000000000000000000B +:1085700000000000000000000000000000000000FB +:1085800000000000000000000000000000000000EB +:1085900000000000000000000000000000000000DB +:1085A00000000000000000000000000000000000CB +:1085B00000000000000000000000000000000000BB +:1085C00000000000000000000000000000000000AB +:1085D000000000000000000000000000000000009B +:1085E000000000000000000000000000000000008B +:1085F000000000000000000000000000000000007B +:10860000000000000000000000000000000000006A +:10861000000000000000000000000000000000005A +:10862000000000000000000000000000000000004A +:10863000000000000000000000000000000000003A +:10864000000000000000000000000000000000002A +:10865000000000000000000000000000000000001A +:10866000000000000000000000000000000000000A +:1086700000000000000000000000000000000000FA +:1086800000000000000000000000000000000000EA +:1086900000000000000000000000000000000000DA +:1086A00000000000000000000000000000000000CA +:1086B00000000000000000000000000000000000BA +:1086C00000000000000000000000000000000000AA +:1086D000000000000000000000000000000000009A +:1086E000000000000000000000000000000000008A +:1086F000000000000000000000000000000000007A +:108700000000000000000000000000000000000069 +:108710000000000000000000000000000000000059 +:108720000000000000000000000000000000000049 +:108730000000000000000000000000000000000039 +:108740000000000000000000000000000000000029 +:108750000000000000000000000000000000000019 +:108760000000000000000000000000000000000009 +:1087700000000000000000000000000000000000F9 +:1087800000000000000000000000000000000000E9 +:1087900000000000000000000000000000000000D9 +:1087A00000000000000000000000000000000000C9 +:1087B00000000000000000000000000000000000B9 +:1087C00000000000000000000000000000000000A9 +:1087D0000000000000000000000000000000000099 +:1087E0000000000000000000000000000000000089 +:1087F0000000000000000000000000000000000079 +:108800000000000000000000000000000000000068 +:108810000000000000000000000000000000000058 +:108820000000000000000000000000000000000048 +:108830000000000000000000000000000000000038 +:108840000000000000000000000000000000000028 +:108850000000000000000000000000000000000018 +:108860000000000000000000000000000000000008 +:1088700000000000000000000000000000000000F8 +:1088800000000000000000000000000000000000E8 +:1088900000000000000000000000000000000000D8 +:1088A00000000000000000000000000000000000C8 +:1088B00000000000000000000000000000000000B8 +:1088C00000000000000000000000000000000000A8 +:1088D0000000000000000000000000000000000098 +:1088E0000000000000000000000000000000000088 +:1088F0000000000000000000000000000000000078 +:108900000000000000000000000000000000000067 +:108910000000000000000000000000000000000057 +:108920000000000000000000000000000000000047 +:108930000000000000000000000000000000000037 +:108940000000000000000000000000000000000027 +:108950000000000000000000000000000000000017 +:108960000000000000000000000000000000000007 +:1089700000000000000000000000000000000000F7 +:1089800000000000000000000000000000000000E7 +:1089900000000000000000000000000000000000D7 +:1089A00000000000000000000000000000000000C7 +:1089B00000000000000000000000000000000000B7 +:1089C00000000000000000000000000000000000A7 +:1089D0000000000000000000000000000000000097 +:1089E0000000000000000000000000000000000087 +:1089F0000000000000000000000000000000000077 +:108A00000000000000000000000000000000000066 +:108A10000000000000000000000000000000000056 +:108A20000000000000000000000000000000000046 +:108A30000000000000000000000000000000000036 +:108A40000000000000000000000000000000000026 +:108A50000000000000000000000000000000000016 +:108A60000000000000000000000000000000000006 +:108A700000000000000000000000000000000000F6 +:108A800000000000000000000000000000000000E6 +:108A900000000000000000000000000000000000D6 +:108AA00000000000000000000000000000000000C6 +:108AB00000000000000000000000000000000000B6 +:108AC00000000000000000000000000000000000A6 +:108AD0000000000000000000000000000000000096 +:108AE0000000000000000000000000000000000086 +:108AF0000000000000000000000000000000000076 +:108B00000000000000000000000000000000000065 +:108B10000000000000000000000000000000000055 +:108B20000000000000000000000000000000000045 +:108B30000000000000000000000000000000000035 +:108B40000000000000000000000000000000000025 +:108B50000000000000000000000000000000000015 +:108B60000000000000000000000000000000000005 +:108B700000000000000000000000000000000000F5 +:108B800000000000000000000000000000000000E5 +:108B900000000000000000000000000000000000D5 +:108BA00000000000000000000000000000000000C5 +:108BB00000000000000000000000000000000000B5 +:108BC00000000000000000000000000000000000A5 +:108BD0000000000000000000000000000000000095 +:108BE0000000000000000000000000000000000085 +:108BF0000000000000000000000000000000000075 +:108C00000000000000000000000000000000000064 +:108C10000000000000000000000000000000000054 +:108C20000000000000000000000000000000000044 +:108C30000000000000000000000000000000000034 +:108C40000000000000000000000000000000000024 +:108C50000000000000000000000000000000000014 +:108C60000000000000000000000000000000000004 +:108C700000000000000000000000000000000000F4 +:108C800000000000000000000000000000000000E4 +:108C900000000000000000000000000000000000D4 +:108CA00000000000000000000000000000000000C4 +:108CB00000000000000000000000000000000000B4 +:108CC00000000000000000000000000000000000A4 +:108CD0000000000000000000000000000000000094 +:108CE0000000000000000000000000000000000084 +:108CF0000000000000000000000000000000000074 +:108D00000000000000000000000000000000000063 +:108D10000000000000000000000000000000000053 +:108D20000000000000000000000000000000000043 +:108D30000000000000000000000000000000000033 +:108D40000000000000000000000000000000000023 +:108D50000000000000000000000000000000000013 +:108D60000000000000000000000000000000000003 +:108D700000000000000000000000000000000000F3 +:108D800000000000000000000000000000000000E3 +:108D900000000000000000000000000000000000D3 +:108DA00000000000000000000000000000000000C3 +:108DB00000000000000000000000000000000000B3 +:108DC00000000000000000000000000000000000A3 +:108DD0000000000000000000000000000000000093 +:108DE0000000000000000000000000000000000083 +:108DF0000000000000000000000000000000000073 +:108E00000000000000000000000000000000000062 +:108E10000000000000000000000000000000000052 +:108E20000000000000000000000000000000000042 +:108E30000000000000000000000000000000000032 +:108E40000000000000000000000000000000000022 +:108E50000000000000000000000000000000000012 +:108E60000000000000000000000000000000000002 +:108E700000000000000000000000000000000000F2 +:108E800000000000000000000000000000000000E2 +:108E900000000000000000000000000000000000D2 +:108EA00000000000000000000000000000000000C2 +:108EB00000000000000000000000000000000000B2 +:108EC00000000000000000000000000000000000A2 +:108ED0000000000000000000000000000000000092 +:108EE0000000000000000000000000000000000082 +:108EF0000000000000000000000000000000000072 +:108F00000000000000000000000000000000000061 +:108F10000000000000000000000000000000000051 +:108F20000000000000000000000000000000000041 +:108F30000000000000000000000000000000000031 +:108F40000000000000000000000000000000000021 +:108F50000000000000000000000000000000000011 +:108F60000000000000000000000000000000000001 +:108F700000000000000000000000000000000000F1 +:108F800000000000000000000000000000000000E1 +:108F900000000000000000000000000000000000D1 +:108FA00000000000000000000000000000000000C1 +:108FB00000000000000000000000000000000000B1 +:108FC00000000000000000000000000000000000A1 +:108FD0000000000000000000000000000000000091 +:108FE0000000000000000000000000000000000081 +:108FF0000000000000000000000000000000000071 +:109000000000000000000000000000000000000060 +:109010000000000000000000000000000000000050 +:109020000000000000000000000000000000000040 +:109030000000000000000000000000000000000030 +:109040000000000000000000000000000000000020 +:109050000000000000000000000000000000000010 +:109060000000000000000000000000000000000000 +:1090700000000000000000000000000000000000F0 +:1090800000000000000000000000000000000000E0 +:1090900000000000000000000000000000000000D0 +:1090A00000000000000000000000000000000000C0 +:1090B00000000000000000000000000000000000B0 +:1090C00000000000000000000000000000000000A0 +:1090D0000000000000000000000000000000000090 +:1090E0000000000000000000000000000000000080 +:1090F0000000000000000000000000000000000070 +:10910000000000000000000000000000000000005F +:10911000000000000000000000000000000000004F +:10912000000000000000000000000000000000003F +:10913000000000000000000000000000000000002F +:10914000000000000000000000000000000000001F +:10915000000000000000000000000000000000000F +:1091600000000000000000000000000000000000FF +:1091700000000000000000000000000000000000EF +:1091800000000000000000000000000000000000DF +:1091900000000000000000000000000000000000CF +:1091A00000000000000000000000000000000000BF +:1091B00000000000000000000000000000000000AF +:1091C000000000000000000000000000000000009F +:1091D000000000000000000000000000000000008F +:1091E000000000000000000000000000000000007F +:1091F000000000000000000000000000000000006F +:10920000000000000000000000000000000000005E +:10921000000000000000000000000000000000004E +:10922000000000000000000000000000000000003E +:10923000000000000000000000000000000000002E +:10924000000000000000000000000000000000001E +:10925000000000000000000000000000000000000E +:1092600000000000000000000000000000000000FE +:1092700000000000000000000000000000000000EE +:1092800000000000000000000000000000000000DE +:1092900000000000000000000000000000000000CE +:1092A00000000000000000000000000000000000BE +:1092B00000000000000000000000000000000000AE +:1092C000000000000000000000000000000000009E +:1092D000000000000000000000000000000000008E +:1092E000000000000000000000000000000000007E +:1092F000000000000000000000000000000000006E +:10930000000000000000000000000000000000005D +:10931000000000000000000000000000000000004D +:10932000000000000000000000000000000000003D +:10933000000000000000000000000000000000002D +:10934000000000000000000000000000000000001D +:10935000000000000000000000000000000000000D +:1093600000000000000000000000000000000000FD +:1093700000000000000000000000000000000000ED +:1093800000000000000000000000000000000000DD +:1093900000000000000000000000000000000000CD +:1093A00000000000000000000000000000000000BD +:1093B00000000000000000000000000000000000AD +:1093C000000000000000000000000000000000009D +:1093D000000000000000000000000000000000008D +:1093E000000000000000000000000000000000007D +:1093F000000000000000000000000000000000006D +:10940000000000000000000000000000000000005C +:10941000000000000000000000000000000000004C +:10942000000000000000000000000000000000003C +:10943000000000000000000000000000000000002C +:10944000000000000000000000000000000000001C +:10945000000000000000000000000000000000000C +:1094600000000000000000000000000000000000FC +:1094700000000000000000000000000000000000EC +:1094800000000000000000000000000000000000DC +:1094900000000000000000000000000000000000CC +:1094A00000000000000000000000000000000000BC +:1094B00000000000000000000000000000000000AC +:1094C000000000000000000000000000000000009C +:1094D000000000000000000000000000000000008C +:1094E000000000000000000000000000000000007C +:1094F000000000000000000000000000000000006C +:10950000000000000000000000000000000000005B +:10951000000000000000000000000000000000004B +:10952000000000000000000000000000000000003B +:10953000000000000000000000000000000000002B +:10954000000000000000000000000000000000001B +:10955000000000000000000000000000000000000B +:1095600000000000000000000000000000000000FB +:1095700000000000000000000000000000000000EB +:1095800000000000000000000000000000000000DB +:1095900000000000000000000000000000000000CB +:1095A00000000000000000000000000000000000BB +:1095B00000000000000000000000000000000000AB +:1095C000000000000000000000000000000000009B +:1095D000000000000000000000000000000000008B +:1095E000000000000000000000000000000000007B +:1095F000000000000000000000000000000000006B +:10960000000000000000000000000000000000005A +:10961000000000000000000000000000000000004A +:10962000000000000000000000000000000000003A +:10963000000000000000000000000000000000002A +:10964000000000000000000000000000000000001A +:10965000000000000000000000000000000000000A +:1096600000000000000000000000000000000000FA +:1096700000000000000000000000000000000000EA +:1096800000000000000000000000000000000000DA +:1096900000000000000000000000000000000000CA +:1096A00000000000000000000000000000000000BA +:1096B00000000000000000000000000000000000AA +:1096C000000000000000000000000000000000009A +:1096D000000000000000000000000000000000008A +:1096E000000000000000000000000000000000007A +:1096F000000000000000000000000000000000006A +:109700000000000000000000000000000000000059 +:109710000000000000000000000000000000000049 +:109720000000000000000000000000000000000039 +:109730000000000000000000000000000000000029 +:109740000000000000000000000000000000000019 +:109750000000000000000000000000000000000009 +:1097600000000000000000000000000000000000F9 +:1097700000000000000000000000000000000000E9 +:1097800000000000000000000000000000000000D9 +:1097900000000000000000000000000000000000C9 +:1097A00000000000000000000000000000000000B9 +:1097B00000000000000000000000000000000000A9 +:1097C0000000000000000000000000000000000099 +:1097D0000000000000000000000000000000000089 +:1097E0000000000000000000000000000000000079 +:1097F0000000000000000000000000000000000069 +:109800000000000000000000000000000000000058 +:109810000000000000000000000000000000000048 +:109820000000000000000000000000000000000038 +:109830000000000000000000000000000000000028 +:109840000000000000000000000000000000000018 +:109850000000000000000000000000000000000008 +:1098600000000000000000000000000000000000F8 +:1098700000000000000000000000000000000000E8 +:1098800000000000000000000000000000000000D8 +:1098900000000000000000000000000000000000C8 +:1098A00000000000000000000000000000000000B8 +:1098B00000000000000000000000000000000000A8 +:1098C0000000000000000000000000000000000098 +:1098D0000000000000000000000000000000000088 +:1098E0000000000000000000000000000000000078 +:1098F0000000000000000000000000000000000068 +:109900000000000000000000000000000000000057 +:109910000000000000000000000000000000000047 +:109920000000000000000000000000000000000037 +:109930000000000000000000000000000000000027 +:109940000000000000000000000000000000000017 +:109950000000000000000000000000000000000007 +:1099600000000000000000000000000000000000F7 +:1099700000000000000000000000000000000000E7 +:1099800000000000000000000000000000000000D7 +:1099900000000000000000000000000000000000C7 +:1099A00000000000000000000000000000000000B7 +:1099B00000000000000000000000000000000000A7 +:1099C0000000000000000000000000000000000097 +:1099D0000000000000000000000000000000000087 +:1099E0000000000000000000000000000000000077 +:1099F0000000000000000000000000000000000067 +:109A00000000000000000000000000000000000056 +:109A10000000000000000000000000000000000046 +:109A20000000000000000000000000000000000036 +:109A30000000000000000000000000000000000026 +:109A40000000000000000000000000000000000016 +:109A50000000000000000000000000000000000006 +:109A600000000000000000000000000000000000F6 +:109A700000000000000000000000000000000000E6 +:109A800000000000000000000000000000000000D6 +:109A900000000000000000000000000000000000C6 +:109AA00000000000000000000000000000000000B6 +:109AB00000000000000000000000000000000000A6 +:109AC0000000000000000000000000000000000096 +:109AD0000000000000000000000000000000000086 +:109AE0000000000000000000000000000000000076 +:109AF0000000000000000000000000000000000066 +:109B00000000000000000000000000000000000055 +:109B10000000000000000000000000000000000045 +:109B20000000000000000000000000000000000035 +:109B30000000000000000000000000000000000025 +:109B40000000000000000000000000000000000015 +:109B50000000000000000000000000000000000005 +:109B600000000000000000000000000000000000F5 +:109B700000000000000000000000000000000000E5 +:109B800000000000000000000000000000000000D5 +:109B900000000000000000000000000000000000C5 +:109BA00000000000000000000000000000000000B5 +:109BB00000000000000000000000000000000000A5 +:109BC0000000000000000000000000000000000095 +:109BD0000000000000000000000000000000000085 +:109BE0000000000000000000000000000000000075 +:109BF0000000000000000000000000000000000065 +:109C00000000000000000000000000000000000054 +:109C10000000000000000000000000000000000044 +:109C20000000000000000000000000000000000034 +:109C30000000000000000000000000000000000024 +:109C40000000000000000000000000000000000014 +:109C50000000000000000000000000000000000004 +:109C600000000000000000000000000000000000F4 +:109C700000000000000000000000000000000000E4 +:109C800000000000000000000000000000000000D4 +:109C900000000000000000000000000000000000C4 +:109CA00000000000000000000000000000000000B4 +:109CB00000000000000000000000000000000000A4 +:109CC0000000000000000000000000000000000094 +:109CD0000000000000000000000000000000000084 +:109CE0000000000000000000000000000000000074 +:109CF0000000000000000000000000000000000064 +:109D00000000000000000000000000000000000053 +:109D10000000000000000000000000000000000043 +:109D20000000000000000000000000000000000033 +:109D30000000000000000000000000000000000023 +:109D40000000000000000000000000000000000013 +:109D50000000000000000000000000000000000003 +:109D600000000000000000000000000000000000F3 +:109D700000000000000000000000000000000000E3 +:109D800000000000000000000000000000000000D3 +:109D900000000000000000000000000000000000C3 +:109DA00000000000000000000000000000000000B3 +:109DB00000000000000000000000000000000000A3 +:109DC0000000000000000000000000000000000093 +:109DD0000000000000000000000000000000000083 +:109DE0000000000000000000000000000000000073 +:109DF0000000000000000000000000000000000063 +:109E00000000000000000000000000000000000052 +:109E10000000000000000000000000000000000042 +:109E20000000000000000000000000000000000032 +:109E30000000000000000000000000000000000022 +:109E40000000000000000000000000000000000012 +:109E50000000000000000000000000000000000002 +:109E600000000000000000000000000000000000F2 +:109E700000000000000000000000000000000000E2 +:109E800000000000000000000000000000000000D2 +:109E900000000000000000000000000000000000C2 +:109EA00000000000000000000000000000000000B2 +:109EB00000000000000000000000000000000000A2 +:109EC0000000000000000000000000000000000092 +:109ED0000000000000000000000000000000000082 +:109EE0000000000000000000000000000000000072 +:109EF0000000000000000000000000000000000062 +:109F00000000000000000000000000000000000051 +:109F10000000000000000000000000000000000041 +:109F20000000000000000000000000000000000031 +:109F30000000000000000000000000000000000021 +:109F40000000000000000000000000000000000011 +:109F50000000000000000000000000000000000001 +:109F600000000000000000000000000000000000F1 +:109F700000000000000000000000000000000000E1 +:109F800000000000000000000000000000000000D1 +:109F900000000000000000000000000000000000C1 +:109FA00000000000000000000000000000000000B1 +:109FB00000000000000000000000000000000000A1 +:109FC0000000000000000000000000000000000091 +:109FD0000000000000000000000000000000000081 +:109FE0000000000000000000000000000000000071 +:109FF0000000000000000000000000000000000061 +:10A000000000000000000000000000000000000050 +:10A010000000000000000000000000000000000040 +:10A020000000000000000000000000000000000030 +:10A030000000000000000000000000000000000020 +:10A040000000000000000000000000000000000010 +:10A050000000000000000000000000000000000000 +:10A0600000000000000000000000000000000000F0 +:10A0700000000000000000000000000000000000E0 +:10A0800000000000000000000000000000000000D0 +:10A0900000000000000000000000000000000000C0 +:10A0A00000000000000000000000000000000000B0 +:10A0B00000000000000000000000000000000000A0 +:10A0C0000000000000000000000000000000000090 +:10A0D0000000000000000000000000000000000080 +:10A0E0000000000000000000000000000000000070 +:10A0F0000000000000000000000000000000000060 +:10A10000000000000000000000000000000000004F +:10A11000000000000000000000000000000000003F +:10A12000000000000000000000000000000000002F +:10A13000000000000000000000000000000000001F +:10A14000000000000000000000000000000000000F +:10A1500000000000000000000000000000000000FF +:10A1600000000000000000000000000000000000EF +:10A1700000000000000000000000000000000000DF +:10A1800000000000000000000000000000000000CF +:10A1900000000000000000000000000000000000BF +:10A1A00000000000000000000000000000000000AF +:10A1B000000000000000000000000000000000009F +:10A1C000000000000000000000000000000000008F +:10A1D000000000000000000000000000000000007F +:10A1E000000000000000000000000000000000006F +:10A1F000000000000000000000000000000000005F +:10A20000000000000000000000000000000000004E +:10A21000000000000000000000000000000000003E +:10A22000000000000000000000000000000000002E +:10A23000000000000000000000000000000000001E +:10A24000000000000000000000000000000000000E +:10A2500000000000000000000000000000000000FE +:10A2600000000000000000000000000000000000EE +:10A2700000000000000000000000000000000000DE +:10A2800000000000000000000000000000000000CE +:10A2900000000000000000000000000000000000BE +:10A2A00000000000000000000000000000000000AE +:10A2B000000000000000000000000000000000009E +:10A2C000000000000000000000000000000000008E +:10A2D000000000000000000000000000000000007E +:10A2E000000000000000000000000000000000006E +:10A2F000000000000000000000000000000000005E +:10A30000000000000000000000000000000000004D +:10A31000000000000000000000000000000000003D +:10A32000000000000000000000000000000000002D +:10A33000000000000000000000000000000000001D +:10A34000000000000000000000000000000000000D +:10A3500000000000000000000000000000000000FD +:10A3600000000000000000000000000000000000ED +:10A3700000000000000000000000000000000000DD +:10A3800000000000000000000000000000000000CD +:10A3900000000000000000000000000000000000BD +:10A3A00000000000000000000000000000000000AD +:10A3B000000000000000000000000000000000009D +:10A3C000000000000000000000000000000000008D +:10A3D000000000000000000000000000000000007D +:10A3E000000000000000000000000000000000006D +:10A3F000000000000000000000000000000000005D +:10A40000000000000000000000000000000000004C +:10A41000000000000000000000000000000000003C +:10A42000000000000000000000000000000000002C +:10A43000000000000000000000000000000000001C +:10A44000000000000000000000000000000000000C +:10A4500000000000000000000000000000000000FC +:10A4600000000000000000000000000000000000EC +:10A4700000000000000000000000000000000000DC +:10A4800000000000000000000000000000000000CC +:10A4900000000000000000000000000000000000BC +:10A4A00000000000000000000000000000000000AC +:10A4B000000000000000000000000000000000009C +:10A4C000000000000000000000000000000000008C +:10A4D000000000000000000000000000000000007C +:10A4E000000000000000000000000000000000006C +:10A4F000000000000000000000000000000000005C +:10A50000000000000000000000000000000000004B +:10A51000000000000000000000000000000000003B +:10A52000000000000000000000000000000000002B +:10A53000000000000000000000000000000000001B +:10A54000000000000000000000000000000000000B +:10A5500000000000000000000000000000000000FB +:10A5600000000000000000000000000000000000EB +:10A5700000000000000000000000000000000000DB +:10A5800000000000000000000000000000000000CB +:10A5900000000000000000000000000000000000BB +:10A5A00000000000000000000000000000000000AB +:10A5B000000000000000000000000000000000009B +:10A5C000000000000000000000000000000000008B +:10A5D000000000000000000000000000000000007B +:10A5E000000000000000000000000000000000006B +:10A5F000000000000000000000000000000000005B +:10A60000000000000000000000000000000000004A +:10A61000000000000000000000000000000000003A +:10A62000000000000000000000000000000000002A +:10A63000000000000000000000000000000000001A +:10A64000000000000000000000000000000000000A +:10A6500000000000000000000000000000000000FA +:10A6600000000000000000000000000000000000EA +:10A6700000000000000000000000000000000000DA +:10A6800000000000000000000000000000000000CA +:10A6900000000000000000000000000000000000BA +:10A6A00000000000000000000000000000000000AA +:10A6B000000000000000000000000000000000009A +:10A6C000000000000000000000000000000000008A +:10A6D000000000000000000000000000000000007A +:10A6E000000000000000000000000000000000006A +:10A6F000000000000000000000000000000000005A +:10A700000000000000000000000000000000000049 +:10A710000000000000000000000000000000000039 +:10A720000000000000000000000000000000000029 +:10A730000000000000000000000000000000000019 +:10A740000000000000000000000000000000000009 +:10A7500000000000000000000000000000000000F9 +:10A7600000000000000000000000000000000000E9 +:10A7700000000000000000000000000000000000D9 +:10A7800000000000000000000000000000000000C9 +:10A7900000000000000000000000000000000000B9 +:10A7A00000000000000000000000000000000000A9 +:10A7B0000000000000000000000000000000000099 +:10A7C0000000000000000000000000000000000089 +:10A7D0000000000000000000000000000000000079 +:10A7E0000000000000000000000000000000000069 +:10A7F0000000000000000000000000000000000059 +:10A800000000000000000000000000000000000048 +:10A810000000000000000000000000000000000038 +:10A820000000000000000000000000000000000028 +:10A830000000000000000000000000000000000018 +:10A840000000000000000000000000000000000008 +:10A8500000000000000000000000000000000000F8 +:10A8600000000000000000000000000000000000E8 +:10A8700000000000000000000000000000000000D8 +:10A8800000000000000000000000000000000000C8 +:10A8900000000000000000000000000000000000B8 +:10A8A00000000000000000000000000000000000A8 +:10A8B0000000000000000000000000000000000098 +:10A8C0000000000000000000000000000000000088 +:10A8D0000000000000000000000000000000000078 +:10A8E0000000000000000000000000000000000068 +:10A8F0000000000000000000000000000000000058 +:10A900000000000000000000000000000000000047 +:10A910000000000000000000000000000000000037 +:10A920000000000000000000000000000000000027 +:10A930000000000000000000000000000000000017 +:10A940000000000000000000000000000000000007 +:10A9500000000000000000000000000000000000F7 +:10A9600000000000000000000000000000000000E7 +:10A9700000000000000000000000000000000000D7 +:10A9800000000000000000000000000000000000C7 +:10A9900000000000000000000000000000000000B7 +:10A9A00000000000000000000000000000000000A7 +:10A9B0000000000000000000000000000000000097 +:10A9C0000000000000000000000000000000000087 +:10A9D0000000000000000000000000000000000077 +:10A9E0000000000000000000000000000000000067 +:10A9F0000000000000000000000000000000000057 +:10AA00000000000000000000000000000000000046 +:10AA10000000000000000000000000000000000036 +:10AA20000000000000000000000000000000000026 +:10AA30000000000000000000000000000000000016 +:10AA40000000000000000000000000000000000006 +:10AA500000000000000000000000000000000000F6 +:10AA600000000000000000000000000000000000E6 +:10AA700000000000000000000000000000000000D6 +:10AA800000000000000000000000000000000000C6 +:10AA900000000000000000000000000000000000B6 +:10AAA00000000000000000000000000000000000A6 +:10AAB0000000000000000000000000000000000096 +:10AAC0000000000000000000000000000000000086 +:10AAD0000000000000000000000000000000000076 +:10AAE0000000000000000000000000000000000066 +:10AAF0000000000000000000000000000000000056 +:10AB00000000000000000000000000000000000045 +:10AB10000000000000000000000000000000000035 +:10AB20000000000000000000000000000000000025 +:10AB30000000000000000000000000000000000015 +:10AB40000000000000000000000000000000000005 +:10AB500000000000000000000000000000000000F5 +:10AB600000000000000000000000000000000000E5 +:10AB700000000000000000000000000000000000D5 +:10AB800000000000000000000000000000000000C5 +:10AB900000000000000000000000000000000000B5 +:10ABA00000000000000000000000000000000000A5 +:10ABB0000000000000000000000000000000000095 +:10ABC0000000000000000000000000000000000085 +:10ABD0000000000000000000000000000000000075 +:10ABE0000000000000000000000000000000000065 +:10ABF0000000000000000000000000000000000055 +:10AC00000000000000000000000000000000000044 +:10AC10000000000000000000000000000000000034 +:10AC20000000000000000000000000000000000024 +:10AC30000000000000000000000000000000000014 +:10AC40000000000000000000000000000000000004 +:10AC500000000000000000000000000000000000F4 +:10AC600000000000000000000000000000000000E4 +:10AC700000000000000000000000000000000000D4 +:10AC800000000000000000000000000000000000C4 +:10AC900000000000000000000000000000000000B4 +:10ACA00000000000000000000000000000000000A4 +:10ACB0000000000000000000000000000000000094 +:10ACC0000000000000000000000000000000000084 +:10ACD0000000000000000000000000000000000074 +:10ACE0000000000000000000000000000000000064 +:10ACF0000000000000000000000000000000000054 +:10AD00000000000000000000000000000000000043 +:10AD10000000000000000000000000000000000033 +:10AD20000000000000000000000000000000000023 +:10AD30000000000000000000000000000000000013 +:10AD40000000000000000000000000000000000003 +:10AD500000000000000000000000000000000000F3 +:10AD600000000000000000000000000000000000E3 +:10AD700000000000000000000000000000000000D3 +:10AD800000000000000000000000000000000000C3 +:10AD900000000000000000000000000000000000B3 +:10ADA00000000000000000000000000000000000A3 +:10ADB0000000000000000000000000000000000093 +:10ADC0000000000000000000000000000000000083 +:10ADD0000000000000000000000000000000000073 +:10ADE0000000000000000000000000000000000063 +:10ADF0000000000000000000000000000000000053 +:10AE00000000000000000000000000000000000042 +:10AE10000000000000000000000000000000000032 +:10AE20000000000000000000000000000000000022 +:10AE30000000000000000000000000000000000012 +:10AE40000000000000000000000000000000000002 +:10AE500000000000000000000000000000000000F2 +:10AE600000000000000000000000000000000000E2 +:10AE700000000000000000000000000000000000D2 +:10AE800000000000000000000000000000000000C2 +:10AE900000000000000000000000000000000000B2 +:10AEA00000000000000000000000000000000000A2 +:10AEB0000000000000000000000000000000000092 +:10AEC0000000000000000000000000000000000082 +:10AED0000000000000000000000000000000000072 +:10AEE0000000000000000000000000000000000062 +:10AEF0000000000000000000000000000000000052 +:10AF00000000000000000000000000000000000041 +:10AF10000000000000000000000000000000000031 +:10AF20000000000000000000000000000000000021 +:10AF30000000000000000000000000000000000011 +:10AF40000000000000000000000000000000000001 +:10AF500000000000000000000000000000000000F1 +:10AF600000000000000000000000000000000000E1 +:10AF700000000000000000000000000000000000D1 +:10AF800000000000000000000000000000000000C1 +:10AF900000000000000000000000000000000000B1 +:10AFA00000000000000000000000000000000000A1 +:10AFB0000000000000000000000000000000000091 +:10AFC0000000000000000000000000000000000081 +:10AFD0000000000000000000000000000000000071 +:10AFE0000000000000000000000000000000000061 +:10AFF0000000000000000000000000000000000051 +:10B000000000000000000000000000000000000040 +:10B010000000000000000000000000000000000030 +:10B020000000000000000000000000000000000020 +:10B030000000000000000000000000000000000010 +:10B040000000000000000000000000000000000000 +:10B0500000000000000000000000000000000000F0 +:10B0600000000000000000000000000000000000E0 +:10B0700000000000000000000000000000000000D0 +:10B0800000000000000000000000000000000000C0 +:10B0900000000000000000000000000000000000B0 +:10B0A00000000000000000000000000000000000A0 +:10B0B0000000000000000000000000000000000090 +:10B0C0000000000000000000000000000000000080 +:10B0D0000000000000000000000000000000000070 +:10B0E0000000000000000000000000000000000060 +:10B0F0000000000000000000000000000000000050 +:10B10000000000000000000000000000000000003F +:10B11000000000000000000000000000000000002F +:10B12000000000000000000000000000000000001F +:10B13000000000000000000000000000000000000F +:10B1400000000000000000000000000000000000FF +:10B1500000000000000000000000000000000000EF +:10B1600000000000000000000000000000000000DF +:10B1700000000000000000000000000000000000CF +:10B1800000000000000000000000000000000000BF +:10B1900000000000000000000000000000000000AF +:10B1A000000000000000000000000000000000009F +:10B1B000000000000000000000000000000000008F +:10B1C000000000000000000000000000000000007F +:10B1D000000000000000000000000000000000006F +:10B1E000000000000000000000000000000000005F +:10B1F000000000000000000000000000000000004F +:10B20000000000000000000000000000000000003E +:10B21000000000000000000000000000000000002E +:10B22000000000000000000000000000000000001E +:10B23000000000000000000000000000000000000E +:10B2400000000000000000000000000000000000FE +:10B2500000000000000000000000000000000000EE +:10B2600000000000000000000000000000000000DE +:10B2700000000000000000000000000000000000CE +:10B2800000000000000000000000000000000000BE +:10B2900000000000000000000000000000000000AE +:10B2A000000000000000000000000000000000009E +:10B2B000000000000000000000000000000000008E +:10B2C000000000000000000000000000000000007E +:10B2D000000000000000000000000000000000006E +:10B2E000000000000000000000000000000000005E +:10B2F000000000000000000000000000000000004E +:10B30000000000000000000000000000000000003D +:10B31000000000000000000000000000000000002D +:10B32000000000000000000000000000000000001D +:10B33000000000000000000000000000000000000D +:10B3400000000000000000000000000000000000FD +:10B3500000000000000000000000000000000000ED +:10B3600000000000000000000000000000000000DD +:10B3700000000000000000000000000000000000CD +:10B3800000000000000000000000000000000000BD +:10B3900000000000000000000000000000000000AD +:10B3A000000000000000000000000000000000009D +:10B3B000000000000000000000000000000000008D +:10B3C000000000000000000000000000000000007D +:10B3D000000000000000000000000000000000006D +:10B3E000000000000000000000000000000000005D +:10B3F000000000000000000000000000000000004D +:10B40000000000000000000000000000000000003C +:10B41000000000000000000000000000000000002C +:10B42000000000000000000000000000000000001C +:10B43000000000000000000000000000000000000C +:10B4400000000000000000000000000000000000FC +:10B4500000000000000000000000000000000000EC +:10B4600000000000000000000000000000000000DC +:10B4700000000000000000000000000000000000CC +:10B4800000000000000000000000000000000000BC +:10B4900000000000000000000000000000000000AC +:10B4A000000000000000000000000000000000009C +:10B4B000000000000000000000000000000000008C +:10B4C000000000000000000000000000000000007C +:10B4D000000000000000000000000000000000006C +:10B4E000000000000000000000000000000000005C +:10B4F000000000000000000000000000000000004C +:10B50000000000000000000000000000000000003B +:10B51000000000000000000000000000000000002B +:10B52000000000000000000000000000000000001B +:10B53000000000000000000000000000000000000B +:10B5400000000000000000000000000000000000FB +:10B5500000000000000000000000000000000000EB +:10B5600000000000000000000000000000000000DB +:10B5700000000000000000000000000000000000CB +:10B5800000000000000000000000000000000000BB +:10B5900000000000000000000000000000000000AB +:10B5A000000000000000000000000000000000009B +:10B5B000000000000000000000000000000000008B +:10B5C000000000000000000000000000000000007B +:10B5D000000000000000000000000000000000006B +:10B5E000000000000000000000000000000000005B +:10B5F000000000000000000000000000000000004B +:10B60000000000000000000000000000000000003A +:10B61000000000000000000000000000000000002A +:10B62000000000000000000000000000000000001A +:10B63000000000000000000000000000000000000A +:10B6400000000000000000000000000000000000FA +:10B6500000000000000000040000000000000000E6 +:10B6600000000000000000000000000000000000DA +:10B6700000000000000000040000000000000000C6 +:10B6800000000000000000000000000000000000BA +:10B6900000000000000000000000000000000000AA +:10B6A000000000000000000000000000000000009A +:10B6B000000000000000000000000000000000008A +:10B6C000000000000000000000000000000000007A +:10B6D000000000000000000000000000000000006A +:10B6E000000000000000000000000000000000005A +:10B6F000000000000000000000000000000000004A +:10B700000000000000000000000000000000000039 +:10B710000000000000000000000000000000000029 +:10B720000000000000000000000000000000000019 +:10B730000000000000000000000000000000000009 +:10B7400000000000000000000000000000000000F9 +:10B7500000000000000000000000000000000000E9 +:10B7600000000000000000000000000000000000D9 +:10B7700000000000000000000000000000000000C9 +:10B7800000000000000000000000000000000000B9 +:10B7900000000000000000000000000000000000A9 +:10B7A0000000000000000000000000000000000099 +:10B7B0000000000000000000000000000000000089 +:10B7C0000000000000000000000000000000000079 +:10B7D0000000000000000000000000000000000069 +:10B7E0000000000000000000000000000000000059 +:10B7F0000000000000000000000000000000000049 +:10B800000000000000000000000000000000000038 +:10B810000000000000000000000000000000000028 +:10B820000000000000000000000000000000000018 +:10B830000000000000000000000000000000000008 +:10B8400000000000000000000000000000000000F8 +:10B8500000000000000000000000000000000000E8 +:10B8600000000000000000000000000000000000D8 +:10B8700000000000000000000000000000000000C8 +:10B8800000000000000000000000000000000000B8 +:10B8900000000000000000000000000000000000A8 +:10B8A0000000000000000000000000000000000098 +:10B8B0000000000000000000000000000000000088 +:10B8C0000000000000000000000000000000000078 +:10B8D0000000000000000000000000000000000068 +:10B8E0000000000000000000000000000000000058 +:10B8F0000000000000000000000000000000000048 +:10B900000000000000000000000000000000000037 +:10B910000000000000000000000000000000000027 +:10B920000000000000000000000000000000000017 +:10B930000000000000000000000000000000000007 +:10B9400000000000000000000000000000000000F7 +:10B9500000000000000000000000000000000000E7 +:10B9600000000000000000000000000000000000D7 +:10B9700000000000000000000000000000000000C7 +:10B9800000000000000000000000000000000000B7 +:10B9900000000000000000000000000000000000A7 +:10B9A0000000000000000000000000000000000097 +:10B9B0000000000000000000000000000000000087 +:10B9C0000000000000000000000000000000000077 +:10B9D0000000000000000000000000000000000067 +:10B9E0000000000000000000000000000000000057 +:10B9F0000000000000000000000000000000000047 +:10BA00000000000000000000000000000000000036 +:10BA10000000000000000000000000000000000026 +:10BA20000000000000000000000000000000000016 +:10BA30000000000000000000000000000000000006 +:10BA400000000000000000000000000000000000F6 +:10BA500000000000000000000000000000000000E6 +:10BA600000000000000000000000000000000000D6 +:10BA700000000000000000000000000000000000C6 +:10BA800000000000000000000000000000000000B6 +:10BA900000000000000000000000000000000000A6 +:10BAA0000000000000000000000000000000000096 +:10BAB0000000000000000000000000000000000086 +:10BAC0000000000000000000000000000000000076 +:10BAD0000000000000000000000000000000000066 +:10BAE0000000000000000000000000000000000056 +:10BAF0000000000000000000000000000000000046 +:10BB00000000000000000000000000000000000035 +:10BB10000000000000000000000000000000000025 +:10BB20000000000000000000000000000000000015 +:10BB30000000000000000000000000000000000005 +:10BB400000000000000000000000000000000000F5 +:10BB500000000000000000000000000000000000E5 +:10BB600000000000000000000000000000000000D5 +:10BB700000000000000000000000000000000000C5 +:10BB800000000000000000000000000000000000B5 +:10BB900000000000000000000000000000000000A5 +:10BBA0000000000000000000000000000000000095 +:10BBB0000000000000000000000000000000000085 +:10BBC0000000000000000000000000000000000075 +:10BBD0000000000000000000000000000000000065 +:10BBE0000000000000000000000000000000000055 +:10BBF0000000000000000000000000000000000045 +:10BC00000000000000000000000000000000000034 +:10BC10000000000000000000000000000000000024 +:10BC20000000000000000000000000000000000014 +:10BC30000000000000000000000000000000000004 +:10BC400000000000000000000000000000000000F4 +:10BC500000000000000000000000000000000000E4 +:10BC600000000000000000000000000000000000D4 +:10BC700000000000000000000000000000000000C4 +:10BC800000000000000000000000000000000000B4 +:10BC900000000000000000000000000000000000A4 +:10BCA0000000000000000000000000000000000094 +:10BCB0000000000000000000000000000000000084 +:10BCC0000000000000000000000000000000000074 +:10BCD0000000000000000000000000000000000064 +:10BCE0000000000000000000000000000000000054 +:10BCF0000000000000000000000000000000000044 +:10BD00000000000000000000000000000000000033 +:10BD10000000000000000000000000000000000023 +:10BD20000000000000000000000000000000000013 +:10BD30000000000000000000000000000000000003 +:10BD400000000000000000000000000000000000F3 +:10BD500000000000000000000000000000000000E3 +:10BD600000000000000000000000000000000000D3 +:10BD700000000000000000000000000000000000C3 +:10BD800000000000000000000000000000000000B3 +:10BD900000000000000000000000000000000000A3 +:10BDA0000000000000000000000000000000000093 +:10BDB0000000000000000000000000000000000083 +:10BDC0000000000000000000000000000000000073 +:10BDD0000000000000000000000000000000000063 +:10BDE0000000000000000000000000000000000053 +:10BDF0000000000000000000000000000000000043 +:10BE00000000000000000000000000000000000032 +:10BE10000000000000000000000000000000000022 +:10BE20000000000000000000000000000000000012 +:10BE30000000000000000000000000000000000002 +:10BE400000000000000000000000000000000000F2 +:10BE500000000000000000000000000000000000E2 +:10BE600000000000000000000000000000000000D2 +:10BE700000000000000000000000000000000000C2 +:10BE800000000000000000000000000000000000B2 +:10BE900000000000000000000000000000000000A2 +:10BEA0000000000000000000000000000000000092 +:10BEB0000000000000000000000000000000000082 +:10BEC0000000000000000000000000000000000072 +:10BED0000000000000000000000000000000000062 +:10BEE0000000000000000000000000000000000052 +:10BEF0000000000000000000000000000000000042 +:10BF00000000000000000000000000000000000031 +:10BF10000000000000000000000000000000000021 +:10BF20000000000000000000000000000000000011 +:10BF30000000000000000000000000000000000001 +:10BF400000000000000000000000000000000000F1 +:10BF500000000000000000000000000000000000E1 +:10BF600000000000000000000000000000000000D1 +:10BF700000000000000000000000000000000000C1 +:10BF800000000000000000000000000000000000B1 +:10BF900000000000000000000000000000000000A1 +:10BFA0000000000000000000000000000000000091 +:10BFB0000000000000000000000000000000000081 +:10BFC0000000000000000000000000000000000071 +:10BFD0000000000000000000000000000000000061 +:10BFE0000000000000000000000000000000000051 +:10BFF0000000000000000000000000000000000041 +:10C000000000000000000000000000000000000030 +:10C010000000000000000000000000000000000020 +:10C020000000000000000000000000000000000010 +:10C030000000000000000000000000000000000000 +:10C0400000000000000000000000000000000000F0 +:10C0500000000000000000000000000000000000E0 +:10C0600000000000000000000000000000000000D0 +:10C0700000000000000000000000000000000000C0 +:10C0800000000000000000000000000000000000B0 +:10C0900000000000000000000000000000000000A0 +:10C0A0000000000000000000000000000000000090 +:10C0B0000000000000000000000000000000000080 +:10C0C0000000000000000000000000000000000070 +:10C0D0000000000000000000000000000000000060 +:10C0E0000000000000000000000000000000000050 +:10C0F0000000000000000000000000000000000040 +:10C10000000000000000000000000000000000002F +:10C11000000000000000000000000000000000001F +:10C12000000000000000000000000000000000000F +:10C1300000000000000000000000000000000000FF +:10C1400000000000000000000000000000000000EF +:10C1500000000000000000000000000000000000DF +:10C1600000000000000000000000000000000000CF +:10C1700000000000000000000000000000000000BF +:10C1800000000000000000000000000000000000AF +:10C19000000000000000000000000000000000009F +:10C1A000000000000000000000000000000000008F +:10C1B000000000000000000000000000000000007F +:10C1C000000000000000000000000000000000006F +:10C1D000000000000000000000000000000000005F +:10C1E000000000000000000000000000000000004F +:10C1F000000000000000000000000000000000003F +:10C20000000000000000000000000000000000002E +:10C21000000000000000000000000000000000001E +:10C22000000000000000000000000000000000000E +:10C2300000000000000000000000000000000000FE +:10C2400000000000000000000000000000000000EE +:10C2500000000000000000000000000000000000DE +:10C2600000000000000000000000000000000000CE +:10C2700000000000000000000000000000000000BE +:10C2800000000000000000000000000000000000AE +:10C29000000000000000000000000000000000009E +:10C2A000000000000000000000000000000000008E +:10C2B000000000000000000000000000000000007E +:10C2C000000000000000000000000000000000006E +:10C2D000000000000000000000000000000000005E +:10C2E000000000000000000000000000000000004E +:10C2F000000000000000000000000000000000003E +:10C30000000000000000000000000000000000002D +:10C31000000000000000000000000000000000001D +:10C32000000000000000000000000000000000000D +:10C3300000000000000000000000000000000000FD +:10C3400000000000000000000000000000000000ED +:10C3500000000000000000000000000000000000DD +:10C3600000000000000000000000000000000000CD +:10C3700000000000000000000000000000000000BD +:10C3800000000000000000000000000000000000AD +:10C39000000000000000000000000000000000009D +:10C3A000000000000000000000000000000000008D +:10C3B000000000000000000000000000000000007D +:10C3C000000000000000000000000000000000006D +:10C3D000000000000000000000000000000000005D +:10C3E000000000000000000000000000000000004D +:10C3F000000000000000000000000000000000003D +:10C40000000000000000000000000000000000002C +:10C41000000000000000000000000000000000001C +:10C42000000000000000000000000000000000000C +:10C4300000000000000000000000000000000000FC +:10C4400000000000000000000000000000000000EC +:10C4500000000000000000000000000000000000DC +:10C4600000000000000000000000000000000000CC +:10C4700000000000000000000000000000000000BC +:10C4800000000000000000000000000000000000AC +:10C49000000000000000000000000000000000009C +:10C4A000000000000000000000000000000000008C +:10C4B000000000000000000000000000000000007C +:10C4C000000000000000000000000000000000006C +:10C4D000000000000000000000000000000000005C +:10C4E000000000000000000000000000000000004C +:10C4F000000000000000000000000000000000003C +:10C50000000000000000000000000000000000002B +:10C51000000000000000000000000000000000001B +:10C52000000000000000000000000000000000000B +:10C5300000000000000000000000000000000000FB +:10C5400000000000000000000000000000000000EB +:10C5500000000000000000000000000000000000DB +:10C5600000000000000000000000000000000000CB +:10C5700000000000000000000000000000000000BB +:10C5800000000000000000000000000000000000AB +:10C59000000000000000000000000000000000009B +:10C5A000000000000000000000000000000000008B +:10C5B000000000000000000000000000000000007B +:10C5C000000000000000000000000000000000006B +:10C5D000000000000000000000000000000000005B +:10C5E000000000000000000000000000000000004B +:10C5F000000000000000000000000000000000003B +:10C60000000000000000000000000000000000002A +:10C61000000000000000000000000000000000001A +:10C62000000000000000000000000000000000000A +:10C6300000000000000000000000000000000000FA +:10C6400000000000000000000000000000000000EA +:10C6500000000000000000000000000000000000DA +:10C6600000000000000000000000000000000000CA +:10C6700000000000000000000000000000000000BA +:10C6800000000000000000000000000000000000AA +:10C69000000000000000000000000000000000009A +:10C6A000000000000000000000000000000000008A +:10C6B000000000000000000000000000000000007A +:10C6C000000000000000000000000000000000006A +:10C6D000000000000000000000000000000000005A +:10C6E000000000000000000000000000000000004A +:10C6F000000000000000000000000000000000003A +:10C700000000000000000000000000000000000029 +:10C710000000000000000000000000000000000019 +:10C720000000000000000000000000000000000009 +:10C7300000000000000000000000000000000000F9 +:10C7400000000000000000000000000000000000E9 +:10C7500000000000000000000000000000000000D9 +:10C7600000000000000000000000000000000000C9 +:10C7700000000000000000000000000000000000B9 +:10C7800000000000000000000000000000000000A9 +:10C790000000000000000000000000000000000099 +:10C7A0000000000000000000000000000000000089 +:10C7B0000000000000000000000000000000000079 +:10C7C0000000000000000000000000000000000069 +:10C7D0000000000000000000000000000000000059 +:10C7E0000000000000000000000000000000000049 +:10C7F0000000000000000000000000000000000039 +:10C800000000000000000000000000000000000028 +:10C810000000000000000000000000000000000018 +:10C820000000000000000000000000000000000008 +:10C8300000000000000000000000000000000000F8 +:10C8400000000000000000000000000000000000E8 +:10C8500000000000000000000000000000000000D8 +:10C8600000000000000000000000000000000000C8 +:10C8700000000000000000000000000000000000B8 +:10C8800000000000000000000000000000000000A8 +:10C890000000000000000000000000000000000098 +:10C8A0000000000000000000000000000000000088 +:10C8B0000000000000000000000000000000000078 +:10C8C0000000000000000000000000000000000068 +:10C8D0000000000000000000000000000000000058 +:10C8E0000000000000000000000000000000000048 +:10C8F0000000000000000000000000000000000038 +:10C900000000000000000000000000000000000027 +:10C910000000000000000000000000000000000017 +:10C920000000000000000000000000000000000007 +:10C9300000000000000000000000000000000000F7 +:10C9400000000000000000000000000000000000E7 +:10C9500000000000000000000000000000000000D7 +:10C9600000000000000000000000000000000000C7 +:10C9700000000000000000000000000000000000B7 +:10C9800000000000000000000000000000000000A7 +:10C990000000000000000000000000000000000097 +:10C9A0000000000000000000000000000000000087 +:10C9B0000000000000000000000000000000000077 +:10C9C0000000000000000000000000000000000067 +:10C9D0000000000000000000000000000000000057 +:10C9E0000000000000000000000000000000000047 +:10C9F0000000000000000000000000000000000037 +:10CA00000000000000000000000000000000000026 +:10CA10000000000000000000000000000000000016 +:10CA20000000000000000000000000000000000006 +:10CA300000000000000000000000000000000000F6 +:10CA400000000000000000000000000000000000E6 +:10CA500000000000000000000000000000000000D6 +:10CA600000000000000000000000000000000000C6 +:10CA700000000000000000000000000000000000B6 +:10CA800000000000000000000000000000000000A6 +:10CA90000000000000000000000000000000000096 +:10CAA0000000000000000000000000000000000086 +:10CAB0000000000000000000000000000000000076 +:10CAC0000000000000000000000000000000000066 +:10CAD0000000000000000000000000000000000056 +:10CAE0000000000000000000000000000000000046 +:10CAF0000000000000000000000000000000000036 +:10CB00000000000000000000000000000000000025 +:10CB10000000000000000000000000000000000015 +:10CB20000000000000000000000000000000000005 +:10CB300000000000000000000000000000000000F5 +:10CB400000000000000000000000000000000000E5 +:10CB500000000000000000000000000000000000D5 +:10CB600000000000000000000000000000000000C5 +:10CB700000000000000000000000000000000000B5 +:10CB800000000000000000000000000000000000A5 +:10CB90000000000000000000000000000000000095 +:10CBA0000000000000000000000000000000000085 +:10CBB0000000000000000000000000000000000075 +:10CBC0000000000000000000000000000000000065 +:10CBD0000000000000000000000000000000000055 +:10CBE0000000000000000000000000000000000045 +:10CBF0000000000000000000000000000000000035 +:10CC00000000000000000000000000000000000024 +:10CC10000000000000000000000000000000000014 +:10CC20000000000000000000000000000000000004 +:10CC300000000000000000000000000000000000F4 +:10CC400000000000000000000000000000000000E4 +:10CC500000000000000000000000000000000000D4 +:10CC600000000000000000000000000000000000C4 +:10CC700000000000000000000000000000000000B4 +:10CC800000000000000000000000000000000000A4 +:10CC90000000000000000000000000000000000094 +:10CCA0000000000000000000000000000000000084 +:10CCB0000000000000000000000000000000000074 +:10CCC0000000000000000000000000000000000064 +:10CCD0000000000000000000000000000000000054 +:10CCE0000000000000000000000000000000000044 +:10CCF0000000000000000000000000000000000034 +:10CD00000000000000000000000000000000000023 +:10CD10000000000000000000000000000000000013 +:10CD20000000000000000000000000000000000003 +:10CD300000000000000000000000000000000000F3 +:10CD400000000000000000000000000000000000E3 +:10CD500000000000000000000000000000000000D3 +:10CD600000000000000000000000000000000000C3 +:10CD700000000000000000000000000000000000B3 +:10CD800000000000000000000000000000000000A3 +:10CD90000000000000000000000000000000000093 +:10CDA0000000000000000000000000000000000083 +:10CDB0000000000000000000000000000000000073 +:10CDC0000000000000000000000000000000000063 +:10CDD0000000000000000000000000000000000053 +:10CDE0000000000000000000000000000000000043 +:10CDF0000000000000000000000000000000000033 +:10CE00000000000000000000000000000000000022 +:10CE10000000000000000000000000000000000012 +:10CE20000000000000000000000000000000000002 +:10CE300000000000000000000000000000000000F2 +:10CE400000000000000000000000000000000000E2 +:10CE500000000000000000000000000000000000D2 +:10CE600000000000000000000000000000000000C2 +:10CE700000000000000000000000000000000000B2 +:10CE800000000000000000000000000000000000A2 +:10CE90000000000000000000000000000000000092 +:10CEA0000000000000000000000000000000000082 +:10CEB0000000000000000000000000000000000072 +:10CEC0000000000000000000000000000000000062 +:10CED0000000000000000000000000000000000052 +:10CEE0000000000000000000000000000000000042 +:10CEF0000000000000000000000000000000000032 +:10CF00000000000000000000000000000000000021 +:10CF10000000000000000000000000000000000011 +:10CF20000000000000000000000000000000000001 +:10CF300000000000000000000000000000000000F1 +:10CF400000000000000000000000000000000000E1 +:10CF500000000000000000000000000000000000D1 +:10CF600000000000000000000000000000000000C1 +:10CF700000000000000000000000000000000000B1 +:10CF800000000000000000000000000000000000A1 +:10CF90000000000000000000000000000000000091 +:10CFA0000000000000000000000000000000000081 +:10CFB0000000000000000000000000000000000071 +:10CFC0000000000000000000000000000000000061 +:10CFD0000000000000000000000000000000000051 +:10CFE0000000000000000000000000000000000041 +:10CFF0000000000000000000000000000000000031 +:10D000000000000000000000000000000000000020 +:10D010000000000000000000000000000000000010 +:10D020000000000000000000000000000000000000 +:10D0300000000000000000000000000000000000F0 +:10D0400000000000000000000000000000000000E0 +:10D0500000000000000000000000000000000000D0 +:10D0600000000000000000000000000000000000C0 +:10D0700000000000000000000000000000000000B0 +:10D0800000000000000000000000000000000000A0 +:10D090000000000000000000000000000000000090 +:10D0A0000000000000000000000000000000000080 +:10D0B0000000000000000000000000000000000070 +:10D0C0000000000000000000000000000000000060 +:10D0D0000000000000000000000000000000000050 +:10D0E0000000000000000000000000000000000040 +:10D0F0000000000000000000000000000000000030 +:10D10000000000000000000000000000000000001F +:10D11000000000000000000000000000000000000F +:10D1200000000000000000000000000000000000FF +:10D1300000000000000000000000000000000000EF +:10D1400000000000000000000000000000000000DF +:10D1500000000000000000000000000000000000CF +:10D1600000000000000000000000000000000000BF +:10D1700000000000000000000000000000000000AF +:10D18000000000000000000000000000000000009F +:10D19000000000000000000000000000000000008F +:10D1A000000000000000000000000000000000007F +:10D1B000000000000000000000000000000000006F +:10D1C000000000000000000000000000000000005F +:10D1D000000000000000000000000000000000004F +:10D1E000000000000000000000000000000000003F +:10D1F000000000000000000000000000000000002F +:10D20000000000000000000000000000000000001E +:10D21000000000000000000000000000000000000E +:10D2200000000000000000000000000000000000FE +:10D2300000000000000000000000000000000000EE +:10D2400000000000000000000000000000000000DE +:10D2500000000000000000000000000000000000CE +:10D2600000000000000000000000000000000000BE +:10D2700000000000000000000000000000000000AE +:10D28000000000000000000000000000000000009E +:10D29000000000000000000000000000000000008E +:10D2A000000000000000000000000000000000007E +:10D2B000000000000000000000000000000000006E +:10D2C000000000000000000000000000000000005E +:10D2D000000000000000000000000000000000004E +:10D2E000000000000000000000000000000000003E +:10D2F000000000000000000000000000000000002E +:10D30000000000000000000000000000000000001D +:10D31000000000000000000000000000000000000D +:10D3200000000000000000000000000000000000FD +:10D3300000000000000000000000000000000000ED +:10D3400000000000000000000000000000000000DD +:10D3500000000000000000000000000000000000CD +:10D3600000000000000000000000000000000000BD +:10D3700000000000000000000000000000000000AD +:10D38000000000000000000000000000000000009D +:10D39000000000000000000000000000000000008D +:10D3A000000000000000000000000000000000007D +:10D3B000000000000000000000000000000000006D +:10D3C000000000000000000000000000000000005D +:10D3D000000000000000000000000000000000004D +:10D3E000000000000000000000000000000000003D +:10D3F000000000000000000000000000000000002D +:10D40000000000000000000000000000000000001C +:10D41000000000000000000000000000000000000C +:10D4200000000000000000000000000000000000FC +:10D4300000000000000000000000000000000000EC +:10D4400000000000000000000000000000000000DC +:10D4500000000000000000000000000000000000CC +:10D4600000000000000000000000000000000000BC +:10D4700000000000000000000000000000000000AC +:10D48000000000000000000000000000000000009C +:10D49000000000000000000000000000000000008C +:10D4A000000000000000000000000000000000007C +:10D4B000000000000000000000000000000000006C +:10D4C000000000000000000000000000000000005C +:10D4D000000000000000000000000000000000024A +:10D4E000000000000000000000000000000000003C +:10D4F000000000000000000000000000000000022A +:10D50000000000000000000000000000000000001B +:10D51000000000000000000000000000000000000B +:10D5200000000000000000000000000000000000FB +:10D5300000000000000000000000000000000000EB +:10D5400000000000000000000000000000000000DB +:10D5500000000000000000000000000000000000CB +:10D5600000000000000000000000000000000000BB +:10D5700000000000000000000000000000000000AB +:10D58000000000000000000000000000000000009B +:10D59000000000000000000000000000000000008B +:10D5A000000000000000000000000000000000007B +:10D5B000000000000000000000000000000000006B +:10D5C000000000000000000000000000000000005B +:10D5D000000000000000000000000000000000004B +:10D5E000000000000000000000000000000000003B +:10D5F000000000000000000000000000000000002B +:10D60000000000000000000000000000000000001A +:10D61000000000000000000000000000000000000A +:10D6200000000000000000000000000000000000FA +:10D6300000000000000000000000000000000000EA +:10D6400000000000000000000000000000000000DA +:10D6500000000000000000000000000000000000CA +:10D6600000000000000000000000000000000000BA +:10D6700000000000000000000000000000000000AA +:10D68000000000000000000000000000000000009A +:10D69000000000000000000000000000000000008A +:10D6A000000000000000000000000000000000007A +:10D6B000000000000000000000000000000000006A +:10D6C000000000000000000000000000000000005A +:10D6D000000000000000000000000000000000004A +:10D6E000000000000000000000000000000000003A +:10D6F000000000000000000000000000000000002A +:10D700000000000000000000000000000000000019 +:10D710000000000000000000000000000000000009 +:10D7200000000000000000000000000000000000F9 +:10D7300000000000000000000000000000000000E9 +:10D7400000000000000000000000000000000000D9 +:10D7500000000000000000000000000000000000C9 +:10D7600000000000000000000000000000000000B9 +:10D7700000000000000000000000000000000000A9 +:10D780000000000000000000000000000000000099 +:10D790000000000000000000000000000000000089 +:10D7A0000000000000000000000000000000000079 +:10D7B0000000000000000000000000000000000069 +:10D7C0000000000000000000000000000000000059 +:10D7D0000000000000000000000000000000000049 +:10D7E0000000000000000000000000000000000039 +:10D7F0000000000000000000000000000000000029 +:10D800000000000000000000000000000000000018 +:10D810000000000000000000000000000000000008 +:10D8200000000000000000000000000000000000F8 +:10D8300000000000000000000000000000000000E8 +:10D8400000000000000000000000000000000000D8 +:10D8500000000000000000000000000000000000C8 +:10D8600000000000000000000000000000000000B8 +:10D8700000000000000000000000000000000000A8 +:10D880000000000000000000000000000000000098 +:10D890000000000000000000000000000000000088 +:10D8A0000000000000000000000000000000000078 +:10D8B0000000000000000000000000000000000068 +:10D8C0000000000000000000000000000000000058 +:10D8D0000000000000000000000000000000000048 +:10D8E0000000000000000000000000000000000038 +:10D8F0000000000000000000000000000000000028 +:10D900000000000000000000000000000000000017 +:10D910000000000000000000000000000000000007 +:10D9200000000000000000000000000000000000F7 +:10D9300000000000000000000000000000000000E7 +:10D9400000000000000000000000000000000000D7 +:10D9500000000000000000000000000000000000C7 +:10D9600000000000000000000000000000000000B7 +:10D9700000000000000000000000000000000000A7 +:10D980000000000000000000000000000000000097 +:10D990000000000000000000000000000000000087 +:10D9A0000000000000000000000000000000000077 +:10D9B0000000000000000000000000000000000067 +:10D9C0000000000000000000000000000000000057 +:10D9D0000000000000000000000000000000000047 +:10D9E0000000000000000000000000000000000037 +:10D9F0000000000000000000000000000000000027 +:10DA00000000000000000000000000000000000016 +:10DA10000000000000000000000000000000000006 +:10DA200000000000000000000000000000000000F6 +:10DA300000000000000000000000000000000000E6 +:10DA400000000000000000000000000000000000D6 +:10DA500000000000000000000000000000000000C6 +:10DA600000000000000000000000000000000000B6 +:10DA700000000000000000000000000000000000A6 +:10DA80000000000000000000000000000000000096 +:10DA90000000000000000000000000000000000086 +:10DAA0000000000000000000000000000000000076 +:10DAB0000000000000000000000000000000000066 +:10DAC0000000000000000000000000000000000056 +:10DAD0000000000000000000000000000000000046 +:10DAE0000000000000000000000000000000000036 +:10DAF0000000000000000000000000000000000026 +:10DB00000000000000000000000000000000000015 +:10DB10000000000000000000000000000000000005 +:10DB200000000000000000000000000000000000F5 +:10DB300000000000000000000000000000000000E5 +:10DB400000000000000000000000000000000000D5 +:10DB500000000000000000000000000000000000C5 +:10DB600000000000000000000000000000000000B5 +:10DB700000000000000000000000000000000000A5 +:10DB80000000000000000000000000000000000095 +:10DB90000000000000000000000000000000000085 +:10DBA0000000000000000000000000000000000075 +:10DBB0000000000000000000000000000000000065 +:10DBC0000000000000000000000000000000000055 +:10DBD0000000000000000000000000000000000045 +:10DBE0000000000000000000000000000000000035 +:10DBF0000000000000000000000000000000000025 +:10DC00000000000000000000000000000000000014 +:10DC10000000000000000000000000000000000004 +:10DC200000000000000000000000000000000000F4 +:10DC300000000000000000000000000000000000E4 +:10DC400000000000000000000000000000000000D4 +:10DC500000000000000000000000000000000000C4 +:10DC600000000000000000000000000000000000B4 +:10DC700000000000000000000000000000000000A4 +:10DC80000000000000000000000000000000000094 +:10DC90000000000000000000000000000000000084 +:10DCA0000000000000000000000000000000000074 +:10DCB0000000000000000000000000000000000064 +:10DCC0000000000000000000000000000000000054 +:10DCD0000000000000000000000000000000000044 +:10DCE0000000000000000000000000000000000034 +:10DCF0000000000000000000000000000000000024 +:10DD00000000000000000000000000000000000013 +:10DD10000000000000000000000000000000000003 +:10DD200000000000000000000000000000000000F3 +:10DD300000000000000000000000000000000000E3 +:10DD400000000000000000000000000000000000D3 +:10DD500000000000000000000000000000000000C3 +:10DD600000000000000000000000000000000000B3 +:10DD700000000000000000000000000000000000A3 +:10DD80000000000000000000000000000000000093 +:10DD90000000000000000000000000000000000083 +:10DDA0000000000000000000000000000000000073 +:10DDB0000000000000000000000000000000000063 +:10DDC0000000000000000000000000000000000053 +:10DDD0000000000000000000000000000000000043 +:10DDE0000000000000000000000000000000000033 +:10DDF0000000000000000000000000000000000023 +:10DE00000000000000000000000000000000000012 +:10DE10000000000000000000000000000000000002 +:10DE200000000000000000000000000000000000F2 +:10DE300000000000000000000000000000000000E2 +:10DE400000000000000000000000000000000000D2 +:10DE500000000000000000000000000000000000C2 +:10DE600000000000000000000000000000000000B2 +:10DE700000000000000000000000000000000000A2 +:10DE80000000000000000000000000000000000092 +:10DE90000000000000000000000000000000000082 +:10DEA0000000000000000000000000000000000072 +:10DEB0000000000000000000000000000000000062 +:10DEC0000000000000000000000000000000000052 +:10DED0000000000000000000000000000000000042 +:10DEE0000000000000000000000000000000000032 +:10DEF0000000000000000000000000000000000022 +:10DF00000000000000000000000000000000000011 +:10DF10000000000000000000000000000000000001 +:10DF200000000000000000000000000000000000F1 +:10DF300000000000000000000000000000000000E1 +:10DF400000000000000000000000000000000000D1 +:10DF500000000000000000000000000000000000C1 +:10DF600000000000000000000000000000000000B1 +:10DF700000000000000000000000000000000000A1 +:10DF80000000000000000000000000000000000091 +:10DF90000000000000000000000000000000000081 +:10DFA0000000000000000000000000000000000071 +:10DFB0000000000000000000000000000000000061 +:10DFC0000000000000000000000000000000000051 +:10DFD0000000000000000000000000000000000041 +:10DFE0000000000000000000000000000000000031 +:10DFF0000000000000000000000000000000000021 +:10E000000000000000000000000000000000000010 +:10E010000000000000000000000000000000000000 +:10E0200000000000000000000000000000000000F0 +:10E0300000000000000000000000000000000000E0 +:10E0400000000000000000000000000000000000D0 +:10E0500000000000000000000000000000000000C0 +:10E0600000000000000000000000000000000000B0 +:10E0700000000000000000000000000000000000A0 +:10E080000000000000000000000000000000000090 +:10E090000000000000000000000000000000000080 +:10E0A0000000000000000000000000000000000070 +:10E0B0000000000000000000000000000000000060 +:10E0C0000000000000000000000000000000000050 +:10E0D0000000000000000000000000000000000040 +:10E0E0000000000000000000000000000000000030 +:10E0F0000000000000000000000000000000000020 +:10E10000000000000000000000000000000000000F +:10E1100000000000000000000000000000000000FF +:10E1200000000000000000000000000000000000EF +:10E1300000000000000000000000000000000000DF +:10E1400000000000000000000000000000000000CF +:10E1500000000000000000000000000000000000BF +:10E1600000000000000000000000000000000000AF +:10E17000000000000000000000000000000000009F +:10E18000000000000000000000000000000000008F +:10E19000000000000000000000000000000000007F +:10E1A000000000000000000000000000000000006F +:10E1B000000000000000000000000000000000005F +:10E1C000000000000000000000000000000000004F +:10E1D000000000000000000000000000000000003F +:10E1E000000000000000000000000000000000002F +:10E1F000000000000000000000000000000000001F +:10E20000000000000000000000000000000000000E +:10E2100000000000000000000000000000000000FE +:10E2200000000000000000000000000000000000EE +:10E2300000000000000000000000000000000000DE +:10E2400000000000000000000000000000000000CE +:10E2500000000000000000000000000000000000BE +:10E2600000000000000000000000000000000000AE +:10E27000000000000000000000000000000000009E +:10E28000000000000000000000000000000000008E +:10E29000000000000000000000000000000000007E +:10E2A000000000000000000000000000000000006E +:10E2B000000000000000000000000000000000005E +:10E2C000000000000000000000000000000000004E +:10E2D000000000000000000000000000000000003E +:10E2E000000000000000000000000000000000002E +:10E2F000000000000000000000000000000000001E +:10E30000000000000000000000000000000000000D +:10E3100000000000000000000000000000000000FD +:10E3200000000000000000000000000000000000ED +:10E3300000000000000000000000000000000000DD +:10E3400000000000000000000000000000000000CD +:10E3500000000000000000000000000000000000BD +:10E3600000000000000000000000000000000000AD +:10E37000000000000000000000000000000000009D +:10E38000000000000000000000000000000000008D +:10E39000000000000000000000000000000000007D +:10E3A000000000000000000000000000000000006D +:10E3B000000000000000000000000000000000005D +:10E3C000000000000000000000000000000000004D +:10E3D000000000000000000000000000000000003D +:10E3E000000000000000000000000000000000002D +:10E3F000000000000000000000000000000000001D +:10E40000000000000000000000000000000000000C +:10E4100000000000000000000000000000000000FC +:10E4200000000000000000000000000000000000EC +:10E4300000000000000000000000000000000000DC +:10E4400000000000000000000000000000000000CC +:10E4500000000000000000000000000000000000BC +:10E4600000000000000000000000000000000000AC +:10E47000000000000000000000000000000000009C +:10E48000000000000000000000000000000000008C +:10E49000000000000000000000000000000000007C +:10E4A000000000000000000000000000000000006C +:10E4B000000000000000000000000000000000005C +:10E4C000000000000000000000000000000000004C +:10E4D000000000000000000000000000000000003C +:10E4E000000000000000000000000000000000002C +:10E4F000000000000000000000000000000000001C +:10E50000000000000000000000000000000000000B +:10E5100000000000000000000000000000000000FB +:10E5200000000000000000000000000000000000EB +:10E5300000000000000000000000000000000000DB +:10E5400000000000000000000000000000000000CB +:10E5500000000000000000000000000000000000BB +:10E5600000000000000000000000000000000000AB +:10E57000000000000000000000000000000000009B +:10E58000000000000000000000000000000000008B +:10E59000000000000000000000000000000000007B +:10E5A000000000000000000000000000000000006B +:10E5B000000000000000000000000000000000005B +:10E5C000000000000000000000000000000000004B +:10E5D000000000000000000000000000000000003B +:10E5E000000000000000000000000000000000002B +:10E5F000000000000000000000000000000000001B +:10E60000000000000000000000000000000000000A +:10E6100000000000000000000000000000000000FA +:10E6200000000000000000000000000000000000EA +:10E6300000000000000000000000000000000000DA +:10E6400000000000000000000000000000000000CA +:10E6500000000000000000000000000000000000BA +:10E6600000000000000000000000000000000000AA +:10E67000000000000000000000000000000000009A +:10E68000000000000000000000000000000000008A +:10E69000000000000000000000000000000000007A +:10E6A000000000000000000000000000000000006A +:10E6B000000000000000000000000000000000005A +:10E6C000000000000000000000000000000000004A +:10E6D000000000000000000000000000000000003A +:10E6E000000000000000000000000000000000002A +:10E6F000000000000000000000000000000000001A +:10E700000000000000000000000000000000000009 +:10E7100000000000000000000000000000000000F9 +:10E7200000000000000000000000000000000000E9 +:10E7300000000000000000000000000000000000D9 +:10E7400000000000000000000000000000000000C9 +:10E7500000000000000000000000000000000000B9 +:10E7600000000000000000000000000000000000A9 +:10E770000000000000000000000000000000000099 +:10E780000000000000000000000000000000000089 +:10E790000000000000000000000000000000000079 +:10E7A0000000000000000000000000000000000069 +:10E7B0000000000000000000000000000000000059 +:10E7C0000000000000000000000000000000000049 +:10E7D0000000000000000000000000000000000039 +:10E7E0000000000000000000000000000000000029 +:10E7F0000000000000000000000000000000000019 +:10E800000000000000000000000000000000000008 +:10E8100000000000000000000000000000000000F8 +:10E8200000000000000000000000000000000000E8 +:10E8300000000000000000000000000000000000D8 +:10E8400000000000000000000000000000000000C8 +:10E8500000000000000000000000000000000000B8 +:10E8600000000000000000000000000000000000A8 +:10E870000000000000000000000000000000000098 +:10E880000000000000000000000000000000000088 +:10E890000000000000000000000000000000000078 +:10E8A0000000000000000000000000000000000068 +:10E8B0000000000000000000000000000000000058 +:10E8C0000000000000000000000000000000000048 +:10E8D0000000000000000000000000000000000038 +:10E8E0000000000000000000000000000000000028 +:10E8F0000000000000000000000000000000000018 +:10E900000000000000000000000000000000000007 +:10E9100000000000000000000000000000000000F7 +:10E9200000000000000000000000000000000000E7 +:10E9300000000000000000000000000000000000D7 +:10E9400000000000000000000000000000000000C7 +:10E9500000000000000000000000000000000000B7 +:10E9600000000000000000000000000000000000A7 +:10E970000000000000000000000000000000000097 +:10E980000000000000000000000000000000000087 +:10E990000000000000000000000000000000000077 +:10E9A0000000000000000000000000000000000067 +:10E9B0000000000000000000000000000000000057 +:10E9C0000000000000000000000000000000000047 +:10E9D0000000000000000000000000000000000037 +:10E9E0000000000000000000000000000000000027 +:10E9F0000000000000000000000000000000000017 +:10EA00000000000000000000000000000000000006 +:10EA100000000000000000000000000000000000F6 +:10EA200000000000000000000000000000000000E6 +:10EA300000000000000000000000000000000000D6 +:10EA400000000000000000000000000000000000C6 +:10EA500000000000000000000000000000000000B6 +:10EA600000000000000000000000000000000000A6 +:10EA70000000000000000000000000000000000096 +:10EA80000000000000000000000000000000000086 +:10EA90000000000000000000000000000000000076 +:10EAA0000000000000000000000000000000000066 +:10EAB0000000000000000000000000000000000056 +:10EAC0000000000000000000000000000000000046 +:10EAD0000000000000000000000000000000000036 +:10EAE0000000000000000000000000000000000026 +:10EAF0000000000000000000000000000000000016 +:10EB00000000000000000000000000000000000005 +:10EB100000000000000000000000000000000000F5 +:10EB200000000000000000000000000000000000E5 +:10EB300000000000000000000000000000000000D5 +:10EB400000000000000000000000000000000000C5 +:10EB500000000000000000000000000000000000B5 +:10EB600000000000000000000000000000000000A5 +:10EB70000000000000000000000000000000000095 +:10EB80000000000000000000000000000000000085 +:10EB90000000000000000000000000000000000075 +:10EBA0000000000000000000000000000000000065 +:10EBB0000000000000000000000000000000000055 +:10EBC0000000000000000000000000000000000045 +:10EBD0000000000000000000000000000000000035 +:10EBE0000000000000000000000000000000000025 +:10EBF0000000000000000000000000000000000015 +:10EC00000000000000000000000000000000000004 +:10EC100000000000000000000000000000000000F4 +:10EC200000000000000000000000000000000000E4 +:10EC300000000000000000000000000000000000D4 +:10EC400000000000000000000000000000000000C4 +:10EC500000000000000000000000000000000000B4 +:10EC600000000000000000000000000000000000A4 +:10EC70000000000000000000000000000000000094 +:10EC80000000000000000000000000000000000084 +:10EC90000000000000000000000000000000000074 +:10ECA0000000000000000000000000000000000064 +:10ECB0000000000000000000000000000000000054 +:10ECC0000000000000000000000000000000000044 +:10ECD0000000000000000000000000000000000034 +:10ECE0000000000000000000000000000000000024 +:10ECF0000000000000000000000000000000000014 +:10ED00000000000000000000000000000000000003 +:10ED100000000000000000000000000000000000F3 +:10ED200000000000000000000000000000000000E3 +:10ED300000000000000000000000000000000000D3 +:10ED400000000000000000000000000000000000C3 +:10ED500000000000000000000000000000000000B3 +:10ED600000000000000000000000000000000000A3 +:10ED70000000000000000000000000000000000093 +:10ED80000000000000000000000000000000000083 +:10ED90000000000000000000000000000000000073 +:10EDA0000000000000000000000000000000000063 +:10EDB0000000000000000000000000000000000053 +:10EDC0000000000000000000000000000000000043 +:10EDD0000000000000000000000000000000000033 +:10EDE0000000000000000000000000000000000023 +:10EDF0000000000000000000000000000000000013 +:10EE00000000000000000000000000000000000002 +:10EE100000000000000000000000000000000000F2 +:10EE200000000000000000000000000000000000E2 +:10EE300000000000000000000000000000000000D2 +:10EE400000000000000000000000000000000000C2 +:10EE500000000000000000000000000000000000B2 +:10EE600000000000000000000000000000000000A2 +:10EE70000000000000000000000000000000000092 +:10EE80000000000000000000000000000000000082 +:10EE90000000000000000000000000000000000072 +:10EEA0000000000000000000000000000000000062 +:10EEB0000000000000000000000000000000000052 +:10EEC0000000000000000000000000000000000042 +:10EED0000000000000000000000000000000000032 +:10EEE0000000000000000000000000000000000022 +:10EEF0000000000000000000000000000000000012 +:10EF00000000000000000000000000000000000001 +:10EF100000000000000000000000000000000000F1 +:10EF200000000000000000000000000000000000E1 +:10EF300000000000000000000000000000000000D1 +:10EF400000000000000000000000000000000000C1 +:10EF500000000000000000000000000000000000B1 +:10EF600000000000000000000000000000000000A1 +:10EF70000000000000000000000000000000000091 +:10EF80000000000000000000000000000000000081 +:10EF90000000000000000000000000000000000071 +:10EFA0000000000000000000000000000000000061 +:10EFB0000000000000000000000000000000000051 +:10EFC0000000000000000000000000000000000041 +:10EFD0000000000000000000000000000000000031 +:10EFE0000000000000000000000000000000000021 +:10EFF0000000000000000000000000000000000011 +:10F000000000000000000000000000000000000000 +:10F0100000000000000000000000000000000000F0 +:10F0200000000000000000000000000000000000E0 +:10F0300000000000000000000000000000000000D0 +:10F0400000000000000000000000000000000000C0 +:10F0500000000000000000000000000000000000B0 +:10F0600000000000000000000000000000000000A0 +:10F070000000000000000000000000000000000090 +:10F080000000000000000000000000000000000080 +:10F090000000000000000000000000000000000070 +:10F0A0000000000000000000000000000000000060 +:10F0B0000000000000000000000000000000000050 +:10F0C0000000000000000000000000000000000040 +:10F0D0000000000000000000000000000000000030 +:10F0E0000000000000000000000000000000000020 +:10F0F0000000000000000000000000000000000010 +:10F1000000000000000000000000000000000000FF +:10F1100000000000000000000000000000000000EF +:10F1200000000000000000000000000000000000DF +:10F1300000000000000000000000000000000000CF +:10F1400000000000000000000000000000000000BF +:10F1500000000000000000000000000000000000AF +:10F16000000000000000000000000000000000009F +:10F17000000000000000000000000000000000008F +:10F18000000000000000000000000000000000007F +:10F19000000000000000000000000000000000006F +:10F1A000000000000000000000000000000000005F +:10F1B000000000000000000000000000000000004F +:10F1C000000000000000000000000000000000003F +:10F1D000000000000000000000000000000000002F +:10F1E000000000000000000000000000000000001F +:10F1F000000000000000000000000000000000000F +:10F2000000000000000000000000000000000000FE +:10F2100000000000000000000000000000000000EE +:10F2200000000000000000000000000000000000DE +:10F2300000000000000000000000000000000000CE +:10F2400000000000000000000000000000000000BE +:10F2500000000000000000000000000000000000AE +:10F26000000000000000000000000000000000009E +:10F27000000000000000000000000000000000008E +:10F28000000000000000000000000000000000007E +:10F29000000000000000000000000000000000006E +:10F2A000000000000000000000000000000000005E +:10F2B000000000000000000000000000000000004E +:10F2C000000000000000000000000000000000003E +:10F2D000000000000000000000000000000000002E +:10F2E000000000000000000000000000000000001E +:10F2F000000000000000000000000000000000000E +:10F3000000000000000000000000000000000000FD +:10F3100000000000000000000000000000000000ED +:10F3200000000000000000000000000000000000DD +:10F3300000000000000000000000000000000000CD +:10F3400000000000000000000000000000000000BD +:10F3500000000000000000000000000000000000AD +:10F36000000000000000000000000000000000009D +:10F37000000000000000000000000000000000008D +:10F38000000000000000000000000000000000007D +:10F39000000000000000000000000000000000006D +:10F3A000000000000000000000000000000000005D +:10F3B000000000000000000000000000000000004D +:10F3C000000000000000000000000000000000003D +:10F3D000000000000000000000000000000000002D +:10F3E000000000000000000000000000000000001D +:10F3F000000000000000000000000000000000000D +:10F4000000000000000000000000000000000000FC +:10F4100000000000000000000000000000000000EC +:10F4200000000000000000000000000000000000DC +:10F4300000000000000000000000000000000000CC +:10F4400000000000000000000000000000000000BC +:10F4500000000000000000000000000000000000AC +:10F46000000000000000000000000000000000009C +:10F47000000000000000000000000000000000008C +:10F48000000000000000000000000000000000007C +:10F49000000000000000000000000000000000006C +:10F4A000000000000000000000000000000000005C +:10F4B000000000000000000000000000000000004C +:10F4C000000000000000000000000000000000003C +:10F4D000000000000000000000000000000000002C +:10F4E000000000000000000000000000000000001C +:10F4F000000000000000000000000000000000000C +:10F5000000000000000000000000000000000000FB +:10F5100000000000000000000000000000000000EB +:10F5200000000000000000000000000000000000DB +:10F5300000000000000000000000000000000000CB +:10F5400000000000000000000000000000000000BB +:10F55000000000000000200000000000000000008B +:10F56000000000000000000000000000000000009B +:10F57000000000000000000000000000000000008B +:10F58000000000000000000000000000000000007B +:10F59000000000000000000000000000000000006B +:10F5A000000000000000000000000000000000005B +:10F5B000000000000000000000000000000000004B +:10F5C000000000000000000000000000000000003B +:10F5D000000000000000000000000000000000002B +:10F5E000000000000000000000000000000000001B +:10F5F000000000000000000000000000000000000B +:10F6000000000000000000000000000000000000FA +:10F6100000000000000000000000000000000000EA +:10F6200000000000000000000000000000000000DA +:10F6300000000000000000000000000000000000CA +:10F6400000000000000000000000000000000000BA +:10F6500000000000000000000000000000000000AA +:10F66000000000000000000000000000000000009A +:10F67000000000000000000000000000000000008A +:10F68000000000000000000000000000000000007A +:10F69000000000000000000000000000000000006A +:10F6A000000000000000000000000000000000005A +:10F6B000000000000000000000000000000000004A +:10F6C000000000000000000000000000000000003A +:10F6D000000000000000000000000000000000002A +:10F6E000000000000000000000000000000000001A +:10F6F000000000000000000000000000000000000A +:10F7000000000000000000000000000000000000F9 +:10F7100000000000000000000000000000000000E9 +:10F7200000000000000000000000000000000000D9 +:10F7300000000000000000000000000000000000C9 +:10F7400000000000000000000000000000000000B9 +:10F7500000000000000000000000000000000000A9 +:10F760000000000000000000000000000000000099 +:10F770000000000000000000000000000000000089 +:10F780000000000000000000000000000000000079 +:10F790000000000000000000000000000000000069 +:10F7A0000000000000000000000000000000000059 +:10F7B0000000000000000000000000000000000049 +:10F7C0000000000000000000000000000000000039 +:10F7D0000000000000000000000000000000000029 +:10F7E0000000000000000000000000000000000019 +:10F7F0000000000000000000000000000000000009 +:10F8000000000000000000000000000000000000F8 +:10F8100000000000000000000000000000000000E8 +:10F8200000000000000000000000000000000000D8 +:10F8300000000000000000000000000000000000C8 +:10F8400000000000000000000000000000000000B8 +:10F8500000000000000000000000000000000000A8 +:10F860000000000000000000000000000000000098 +:10F870000000000000000000000000000000000088 +:10F880000000000000000000000000000000000078 +:10F890000000000000000000000000000000000068 +:10F8A0000000000000000000000000000000000058 +:10F8B0000000000000000000000000000000000048 +:10F8C0000000000000000000000000000000000038 +:10F8D0000000000000000000000000000000000028 +:10F8E0000000000000000000000000000000000018 +:10F8F0000000000000000000000000000000000008 +:10F9000000000000000000000000000000000000F7 +:10F9100000000000000000000000000000000000E7 +:10F9200000000000000000000000000000000000D7 +:10F9300000000000000000000000000000000000C7 +:10F9400000000000000000000000000000000000B7 +:10F9500000000000000000000000000000000000A7 +:10F960000000000000000000000000000000000097 +:10F970000000000000000000000000000000000087 +:10F980000000000000000000000000000000000077 +:10F990000000000000000000000000000000000067 +:10F9A0000000000000000000000000000000000057 +:10F9B0000000000000000000000000000000000047 +:10F9C0000000000000000000000000000000000037 +:10F9D0000000000000000000000000000000000027 +:10F9E0000000000000000000000000000000000017 +:10F9F0000000000000000000000000000000000007 +:10FA000000000000000000000000000000000000F6 +:10FA100000000000000000000000000000000000E6 +:10FA200000000000000000000000000000000000D6 +:10FA300000000000000000000000000000000000C6 +:10FA400000000000000000000000000000000000B6 +:10FA500000000000000000000000000000000000A6 +:10FA60000000000000000000000000000000000096 +:10FA70000000000000000000000000000000000086 +:10FA80000000000000000000000000000000000076 +:10FA90000000000000000000000000000000000066 +:10FAA0000000000000000000000000000000000056 +:10FAB0000000000000000000000000000000000046 +:10FAC0000000000000000000000000000000000036 +:10FAD0000000000000000000000000000000000026 +:10FAE0000000000000000000000000000000000016 +:10FAF0000000000000000000000000000000000006 +:10FB000000000000000000000000000000000000F5 +:10FB100000000000000000000000000000000000E5 +:10FB200000000000000000000000000000000000D5 +:10FB300000000000000000000000000000000000C5 +:10FB400000000000000000000000000000000000B5 +:10FB500000000000000000000000000000000000A5 +:10FB60000000000000000000000000000000000095 +:10FB70000000000000000000000000000000000085 +:10FB80000000000000000000000000000000000075 +:10FB90000000000000000000000000000000000065 +:10FBA0000000000000000000000000000000000055 +:10FBB0000000000000000000000000000000000045 +:10FBC0000000000000000000000000000000000035 +:10FBD0000000000000000000000000000000000025 +:10FBE0000000000000000000000000000000000015 +:10FBF0000000000000000000000000000000000005 +:10FC000000000000000000000000000000000000F4 +:10FC100000000000000000000000000000000000E4 +:10FC200000000000000000000000000000000000D4 +:10FC300000000000000000000000000000000000C4 +:10FC400000000000000000000000000000000000B4 +:10FC500000000000000000000000000000000000A4 +:10FC60000000000000000000000000000000000094 +:10FC70000000000000000000000000000000000084 +:10FC80000000000000000000000000000000000074 +:10FC90000000000000000000000000000000000064 +:10FCA0000000000000000000000000000000000054 +:10FCB0000000000000000000000000000000000044 +:10FCC0000000000000000000000000000000000034 +:10FCD0000000000000000000000000000000000024 +:10FCE0000000000000000000000000000000000014 +:10FCF0000000000000000000000000000000000004 +:10FD000000000000000000000000000000000000F3 +:10FD100000000000000000000000000000000000E3 +:10FD200000000000000000000000000000000000D3 +:10FD300000000000000000000000000000000000C3 +:10FD400000000000000000000000000000000000B3 +:10FD500000000000000000000000000000000000A3 +:10FD60000000000000000000000000000000000093 +:10FD70000000000000000000000000000000000083 +:10FD80000000000000000000000000000000000073 +:10FD90000000000000000000000000000000000063 +:10FDA0000000000000000000000000000000000053 +:10FDB0000000000000000000000000000000000043 +:10FDC0000000000000000000000000000000000033 +:10FDD0000000000000000000000000000000000023 +:10FDE0000000000000000000000000000000000013 +:10FDF0000000000000000000000000000000000003 +:10FE000000000000000000000000000000000000F2 +:10FE100000000000000000000000000000000000E2 +:10FE200000000000000000000000000000000000D2 +:10FE300000000000000000000000000000000000C2 +:10FE400000000000000000000000000000000000B2 +:10FE500000000000000000000000000000000000A2 +:10FE60000000000000000000000000000000000092 +:10FE70000000000000000000000000000000000082 +:10FE80000000000000000000000000000000000072 +:10FE90000000000000000000000000000000000062 +:10FEA0000000000000000000000000000000000052 +:10FEB0000000000000000000000000000000000042 +:10FEC0000000000000000000000000000000000032 +:10FED0000000000000000000000000000000000022 +:10FEE0000000000000000000000000000000000012 +:10FEF0000000000000000000000000000000000002 +:10FF000000000000000000000000000000000000F1 +:10FF100000000000000000000000000000000000E1 +:10FF200000000000000000000000000000000000D1 +:10FF300000000000000000000000000000000000C1 +:10FF400000000000000000000000000000000000B1 +:10FF500000000000000000000000000000000000A1 +:10FF60000000000000000000000000000000000091 +:10FF70000000000000000000000000000000000081 +:10FF80000000000000000000000000000000000071 +:10FF90000000000000000000000000000000000061 +:10FFA0000000000000000000000000000000000051 +:10FFB0000000000000000000000000000000000041 +:10FFC0000000000000000000000000000000000031 +:10FFD0000000000000000000000000000000000021 +:10FFE0000000000000000000000000000000000011 +:10FFF0000000000000000000000000000000000001 +:020000040008F2 +:1000000000000000000000000000000000000000F0 +:1000100000000000000000000000000000000000E0 +:1000200000000000000000000000000000000000D0 +:1000300000000000000000000000000000000000C0 +:1000400000000000000000000000000000000000B0 +:1000500000000000000000000000000000000000A0 +:100060000000000000000000000000000000000090 +:100070000000000000000000000000000000000080 +:100080000000000000000000000000000000000070 +:100090000000000000000000000000000000000060 +:1000A0000000000000000000000000000000000050 +:1000B0000000000000000000000000000000000040 +:1000C0000000000000000000000000000000000030 +:1000D0000000000000000000000000000000000020 +:1000E0000000000000000000000000000000000010 +:1000F0000000000000000000000000000000000000 +:1001000000000000000000000000000000000000EF +:1001100000000000000000000000000000000000DF +:1001200000000000000000000000000000000000CF +:1001300000000000000000000000000000000000BF +:1001400000000000000000000000000000000000AF +:10015000000000000000000000000000000000009F +:10016000000000000000000000000000000000008F +:10017000000000000000000000000000000000007F +:10018000000000000000000000000000000000006F +:10019000000000000000000000000000000000005F +:1001A000000000000000000000000000000000004F +:1001B000000000000000000000000000000000003F +:1001C000000000000000000000000000000000002F +:1001D000000000000000000000000000000000001F +:1001E000000000000000000000000000000000000F +:1001F00000000000000000000000000000000000FF +:1002000000000000000000000000000000000000EE +:1002100000000000000000000000000000000000DE +:1002200000000000000000000000000000000000CE +:1002300000000000000000000000000000000000BE +:1002400000000000000000000000000000000000AE +:10025000000000000000000000000000000000009E +:10026000000000000000000000000000000000008E +:10027000000000000000000000000000000000007E +:10028000000000000000000000000000000000006E +:10029000000000000000000000000000000000005E +:1002A000000000000000000000000000000000004E +:1002B000000000000000000000000000000000003E +:1002C000000000000000000000000000000000002E +:1002D000000000000000000000000000000000001E +:1002E000000000000000000000000000000000000E +:1002F00000000000000000000000000000000000FE +:1003000000000000000000000000000000000000ED +:1003100000000000000000000000000000000000DD +:1003200000000000000000000000000000000000CD +:1003300000000000000000000000000000000000BD +:1003400000000000000000000000000000000000AD +:10035000000000000000000000000000000000009D +:10036000000000000000000000000000000000008D +:10037000000000000000000000000000000000007D +:10038000000000000000000020000000200000002D +:10039000000000000000000000000000000000005D +:1003A000000000000000000000000000000000004D +:1003B000000000000000000000000000000000003D +:1003C000000000000000000000000000000000002D +:1003D000000000000000000000000000000000001D +:1003E000000000000000000000000000000000000D +:1003F00000000000000000000000000000000000FD +:1004000000000000000000000000000000000000EC +:1004100000000000000000000000000000000000DC +:1004200000000000000000000000000000000000CC +:1004300000000000000000000000000000000000BC +:1004400000000000000000000000000000000000AC +:10045000000000000000000000000000000000009C +:10046000000000000000000000000000000000008C +:10047000000000000000000000000000000000007C +:10048000000000000000000000000000000000006C +:10049000000000000000000000000000000000005C +:1004A000000000000000000000000000000000004C +:1004B000000000000000000000000000000000003C +:1004C000000000000000000000000000000000002C +:1004D000000000000000000000000000000000001C +:1004E000000000000000000000000000000000000C +:1004F00000000000000000000000000000000000FC +:1005000000000000000000000000000000000000EB +:1005100000000000000000000000000000000000DB +:1005200000000000000000000000000000000000CB +:1005300000000000000000000000000000000000BB +:1005400000000000000000000000000000000000AB +:10055000000000000000000000000000000000009B +:10056000000000000000000000000000000000008B +:10057000000000000000000000000000000000007B +:10058000000000000000000000000000000000006B +:10059000000000000000000000000000000000005B +:1005A000000000000000000000000000000000004B +:1005B000000000000000000000000000000000003B +:1005C000000000000000000000000000000000002B +:1005D000000000000000000000000000000000001B +:1005E000000000000000000000000000000000000B +:1005F00000000000000000000000000000000000FB +:1006000000000000000000000000000000000000EA +:1006100000000000000000000000000000000000DA +:1006200000000000000000000000000000000000CA +:1006300000000000000000000000000000000000BA +:1006400000000000000000000000000000000000AA +:10065000000000000000000000000000000000009A +:10066000000000000000000000000000000000008A +:10067000000000000000000000000000000000007A +:10068000000000000000000000000000000000006A +:10069000000000000000000000000000000000005A +:1006A000000000000000000000000000000000004A +:1006B000000000000000000000000000000000003A +:1006C000000000000000000000000000000000002A +:1006D000000000000000000000000000000000001A +:1006E000000000000000000000000000000000000A +:1006F00000000000000000000000000000000000FA +:1007000000000000000000000000000000000000E9 +:1007100000000000000000000000000000000000D9 +:1007200000000000000000000000000000000000C9 +:1007300000000000000000000000000000000000B9 +:1007400000000000000000000000000000000000A9 +:100750000000000000000000000000000000000099 +:100760000000000000000000000000000000000089 +:100770000000000000000000000000000000000079 +:100780000000000000000000000000000000000069 +:100790000000000000000000000000000000000059 +:1007A0000000000000000000000000000000000049 +:1007B0000000000000000000000000000000000039 +:1007C0000000000000000000000000000000000029 +:1007D0000000000000000000000000000000000019 +:1007E0000000000000000000000000000000000009 +:1007F00000000000000000000000000000000000F9 +:1008000000000000000000000000000000000000E8 +:1008100000000000000000000000000000000000D8 +:1008200000000000000000000000000000000000C8 +:1008300000000000000000000000000000000000B8 +:1008400000000000000000000000000000000000A8 +:100850000000000000000000000000000000000098 +:100860000000000000000000000000000000000088 +:100870000000000000000000000000000000000078 +:100880000000000000000000000000000000000068 +:100890000000000000000000000000000000000058 +:1008A0000000000000000000000000000000000048 +:1008B0000000000000000000000000000000000038 +:1008C0000000000000000000000000000000000028 +:1008D0000000000000000000000000000000000018 +:1008E0000000000000000000000000000000000008 +:1008F00000000000000000000000000000000000F8 +:1009000000000000000000000000000000000000E7 +:1009100000000000000000000000000000000800CF +:1009200000000800000000000000000000000000BF +:1009300000000000000000000000000000000800AF +:10094000000008000000000000000000000000009F +:100950000000000000000000000000000000000097 +:100960000000000000000000000000000000000087 +:100970000000000000000000000000000000000077 +:100980000000000000000000000000000000000067 +:100990000000000000000000000000000000000057 +:1009A0000000000000000000000000000000000047 +:1009B0000000000000000000000000000000000037 +:1009C0000000000000000000000000000000000027 +:1009D0000000000000000000000000000000000017 +:1009E0000000000000000000000000000000000007 +:1009F00000000000000000000000000000000000F7 +:100A000000000000000000000000000000000000E6 +:100A100000000000000000000000000000000000D6 +:100A200000000000000000000000000000000000C6 +:100A300000000000000000000000000000000000B6 +:100A400000000000000000000000000000000000A6 +:100A50000000000000000000000000000000000096 +:100A60000000000000000000000000000000000086 +:100A70000000000000000000000000000000000076 +:100A80000000000000000000000000000000000066 +:100A90000000000000000000000000000000000056 +:100AA0000000000000000000000000000000000046 +:100AB0000000000000000000000000000000000036 +:100AC0000000000000000000000000000000000026 +:100AD0000000000000000000000000000000000016 +:100AE0000000000000000000000000000000000006 +:100AF00000000000000000000000000000000000F6 +:100B000000000000000000000000000000000000E5 +:100B100000000000000000000000000000000000D5 +:100B200000000000000000000000000000000000C5 +:100B300000000000000000000000000000000000B5 +:100B400000000000000000000000000000000000A5 +:100B50000000000000000000000000000000000095 +:100B60000000000000000000000000000000000085 +:100B70000000000000000000000000000000000075 +:100B80000000000000000000000000000000000065 +:100B90000000000000000000000000000000000055 +:100BA0000000000000000000000000000000000045 +:100BB0000000000000000000000000000000000035 +:100BC0000000000000000000000000000000000025 +:100BD0000000000000000000000000000000000015 +:100BE0000000000000000000000000000000000005 +:100BF00000000000000000000000000000000000F5 +:100C000000000000000000000000000000000000E4 +:100C100000000000000000000000000000000000D4 +:100C200000000000000000000000000000000000C4 +:100C300000000000000000000000000000000000B4 +:100C400000000000000000000000000000000000A4 +:100C50000000000000000000000000000000000094 +:100C60000000000000000000000000000000000084 +:100C70000000000000000000000000000000000074 +:100C80000000000000000000000000000000000064 +:100C90000000000000000000000000000000000054 +:100CA0000000000000000000000000000000000044 +:100CB0000000000000000000000000000000000034 +:100CC0000000000000000000000000000000000024 +:100CD0000000000000000000000000000000000014 +:100CE0000000000000000000000000000000000004 +:100CF00000000000000000000000000000000000F4 +:100D000000000000000000000000000000000000E3 +:100D100000000000000000000000000000000000D3 +:100D200000000000000000000000000000000000C3 +:100D300000000000000000000000000000000000B3 +:100D400000000000000000000000000000000000A3 +:100D50000000000000000000000000000000000093 +:100D60000000000000000000000000000000000083 +:100D70000000000000000000000000000000000073 +:100D80000000000000000000000000000000000063 +:100D90000000000000000000000000000000000053 +:100DA0000000000000000000000000000000000043 +:100DB0000000000000000000000000000000000033 +:100DC0000000000000000000000000000000000023 +:100DD0000000000000000000000000000000000013 +:100DE0000000000000000000000000000000000003 +:100DF00000000000000000000000000000000000F3 +:100E000000000000000000000000000000000000E2 +:100E100000000000000000000000000000000000D2 +:100E200000000000000000000000000000000000C2 +:100E300000000000000000000000000000000000B2 +:100E400000000000000000000000000000000000A2 +:100E50000000000000000000000000000000000092 +:100E60000000000000000000000000000000000082 +:100E70000000000000000000000000000000000072 +:100E80000000000000000000000000000000000062 +:100E90000000000000000000000000000000000052 +:100EA0000000000000000000000000000000000042 +:100EB0000000000000000000000000000000000032 +:100EC0000000000000000000000000000000000022 +:100ED0000000000000000000000000000000000012 +:100EE0000000000000000000000000000000000002 +:100EF00000000000000000000000000000000000F2 +:100F000000000000000000000000000000000000E1 +:100F100000000000000000000000000000000000D1 +:100F200000000000000000000000000000000000C1 +:100F300000000000000000000000000000000000B1 +:100F400000000000000000000000000000000000A1 +:100F50000000000000000000000000000000000091 +:100F60000000000000000000000000000000000081 +:100F70000000000000000000000000000000000071 +:100F80000000000000000000000000000000000061 +:100F90000000000000000000000000000000000051 +:100FA0000000000000000000000000000000000041 +:100FB0000000000000000000000000000000000031 +:100FC0000000000000000000000000000000000021 +:100FD0000000000000000000000000000000000011 +:100FE0000000000000000000000000000000000001 +:100FF00000000000000000000000000000000000F1 +:1010000000000000000000000000000000000000E0 +:1010100000000000000000000000000000000000D0 +:1010200000000000000000000000000000000000C0 +:1010300000000000000000000000000000000000B0 +:1010400000000000000000000000000000000000A0 +:101050000000000000000000000000000000000090 +:101060000000000000000000000000000000000080 +:101070000000000000000000000000000000000070 +:101080000000000000000000000000000000000060 +:101090000000000000000000000000000000000050 +:1010A0000000000000000000000000000000000040 +:1010B0000000000000000000000000000000000030 +:1010C0000000000000000000000000000000000020 +:1010D0000000000000000000000000000000000010 +:1010E0000000000000000000000000000000000000 +:1010F00000000000000000000000000000000000F0 +:1011000000000000000000000000000000000000DF +:1011100000000000000000000000000000000000CF +:1011200000000000000000000000000000000000BF +:1011300000000000000000000000000000000000AF +:10114000000000000000000000000000000000009F +:10115000000000000000000000000000000000008F +:10116000000000000000000000000000000000007F +:10117000000000000000000000000000000000006F +:10118000000000000000000000000000000000005F +:10119000000000000000000000000000000000004F +:1011A000000000000000000000000000000000003F +:1011B000000000000000000000000000000000002F +:1011C000000000000000000000000000000000001F +:1011D000000000000000000000000000000000000F +:1011E00000000000000000000000000000000000FF +:1011F00000000000000000000000000000000000EF +:1012000000000000000000000000000000000000DE +:1012100000000000000000000000000000000000CE +:1012200000000000000000000000000000000000BE +:1012300000000000000000000000000000000000AE +:10124000000000000000000000000000000000009E +:10125000000000000000000000000000000000008E +:10126000000000000000000000000000000000007E +:10127000000000000000000000000000000000006E +:10128000000000000000000000000000000000005E +:10129000000000000000000000000000000000004E +:1012A000000000000000000000000000000000003E +:1012B000000000000000040000000000000020000A +:1012C00020000000000000000000000000000000FE +:1012D000000000800000000000000000000000008E +:1012E00000000000000000000000000000000000FE +:1012F000000000800001000000000000000000006D +:1013000000000000000000000000000000000000DD +:1013100000000000000000000000000000000000CD +:1013200000000000000000000000000000000000BD +:1013300000000000000000000000000000000000AD +:10134000000000000000000000000000000000009D +:101350000000000000040000000000000000000089 +:10136000000000000000000000000000000000007D +:101370000000000000040000000000000000000069 +:10138000000000000000000000000000000000005D +:10139000000000000000000000000000000000004D +:1013A000000000000000000000000000000000003D +:1013B000000000000000000000000000000000002D +:1013C000000000000000000000000000000000001D +:1013D000000000000000000000000000000000000D +:1013E00000000000000000000000000000000000FD +:1013F00000000000000000000000000000000000ED +:1014000000000000000000000000000000000000DC +:1014100000000000000000000000000000000000CC +:1014200000000000000000000000000000000000BC +:1014300000000000000000000000000000000000AC +:10144000000000000000000000000000000000009C +:10145000000000000000000000000000000000008C +:10146000000000000000000000000000000000007C +:10147000000000000000000000000000000000006C +:10148000000000000000000000000000000000005C +:10149000000000000000000000000000000000004C +:1014A000000000000000000000000000000000003C +:1014B000000000000000000000000000000000002C +:1014C000000000000000000000000000000000001C +:1014D00000000000000000000000000000110000FB +:1014E00000000000000000000000000000000000FC +:1014F00000000000000000000000000000000000EC +:1015000000000000000000000000000000000000DB +:1015100000000000000000000000000000000000CB +:1015200000000000000000000000000000000000BB +:1015300000000000000000000000000000000000AB +:10154000000000000000000000000000000000009B +:10155000000000000000000000000000000000008B +:10156000000000000000000000000000000000007B +:10157000000000000000000000000000000000006B +:10158000000000000000000000000000000000005B +:10159000000000000000000000000000000000004B +:1015A000000000000000000000000000000000003B +:1015B000000000000000000000000000000000002B +:1015C0000000080082000800820000000000000007 +:1015D0000000000082000000080008000000000079 +:1015E00000000800820004008200000000000000EB +:1015F00000000000000000000000000000000000EB +:1016000000000000000000000000000000000000DA +:1016100000000000000000000000000000000000CA +:1016200000000000000000000000000000000000BA +:1016300000000000000000000000000000000000AA +:10164000000000000000000000000000000000009A +:10165000000000000000000000000000000000008A +:10166000000000000000000000000000000000007A +:10167000000000000000000000000000000000006A +:10168000000000000000000000000000000000005A +:10169000000000000000000000000000000000004A +:1016A000000000000000000000000000000000003A +:1016B000000000000000000000000000000000002A +:1016C0000000000000000000000000000000080012 +:1016D0000800000000000000000000000000000002 +:1016E00000000000000000000000000000000800F2 +:1016F00008000000000000000000000000000000E2 +:1017000000000000000000000000000000000000D9 +:1017100000000000000000000000000000000000C9 +:1017200000000000000000000000000000000000B9 +:1017300000000000000000000000000000000000A9 +:101740000000000000000000000000000000000099 +:101750000000000000000000000000000000000089 +:101760000000000000000000000000000000000079 +:101770000000000000000000000000000000000069 +:101780000000000000000000000000000000000059 +:101790000000000000000000000000000000000049 +:1017A0000000000000000000000000000000000039 +:1017B0000000000000000000000000000000000029 +:1017C0000000000000000000000000000000000019 +:1017D0000000820000000000000000000000000087 +:1017E00000000000000000000000000000000000F9 +:1017F00084008200000000000000000000000000E3 +:1018000000000000000000000000000000000000D8 +:1018100000000000000000000000000000000000C8 +:1018200000000000000000000000000000000000B8 +:1018300000000000000000000000000000000000A8 +:101840000000000000000000000000000000000098 +:101850000000000000000000000000000000000088 +:101860000000000000000000000000000000000078 +:101870000000000000000000000000000000000068 +:101880000000000000000000000000000000000058 +:101890000000000000000000000000000000000048 +:1018A0000000000000000000000000000000000038 +:1018B0000000000000000000000000000000000028 +:1018C0000000000000000000000000000000000018 +:1018D0000000000001000000000000000000000007 +:1018E00000C0000000000000000000000000000038 +:1018F00000000000010000000000000000000000E7 +:1019000000C0000000000000000000000000000017 +:1019100000000000000000000000000000000000C7 +:1019200000000000000000000000000000000000B7 +:1019300000000000000000000000000000000000A7 +:101940000000000000000000000000000000000097 +:101950000000000000004100000000000000000343 +:1019600005000080000000000000000000000000F2 +:101970000000000000004100000000000000000323 +:1019800005000080000000000000000000000000D2 +:101990000000000000000000000000000000000047 +:1019A0000000000000000000000000000000000037 +:1019B0000000000000000000000000000000000027 +:1019C0000000000000000000000000000000000017 +:1019D0000000030000000080000080000000000004 +:1019E0002000200000000000000000000000004176 +:1019F00000000300000000800000800000000000E4 +:101A00002000200000000000000000000000004155 +:101A100000000000000000000000000000000000C6 +:101A200000000000000000000000000000000000B6 +:101A300000000000000000000000000000000000A6 +:101A40000000000000000000000000000000000096 +:101A5000000000000100000000C0000020000000A5 +:101A60000000900041200020A00040000000000085 +:101A7000000100000100000000C000002000000084 +:101A80000000900041900020A000400000000000F5 +:101A90000001000000000000000000000000000045 +:101AA0000000000000000000000000000000000036 +:101AB0000000000000000000000000000000000026 +:101AC0000000000000000000000000000000000016 +:101AD0000000000000000000C00000000000000046 +:101AE00000000000000200000000000000000000F4 +:101AF0000000000000000000C00000000000000026 +:101B000000000000000400000000000000000000D1 +:101B100000000000000000000000000000000000C5 +:101B200000000000000000000000000000000000B5 +:101B300000000000000000000000000000000000A5 +:101B40000000000000000000000000000000000095 +:101B50000000000000000000000080000000000005 +:101B60000000000000000000000000000000000075 +:101B700000000000000000000000800000000000E5 +:101B800000000000000000800000000000000000D5 +:101B90000000000000000000000000000000000045 +:101BA0000000000000000000000000000000000035 +:101BB0000000000000000000000000000000000025 +:101BC0000000000000000000000000000000000015 +:101BD00000000000000000000000800000C10000C4 +:101BE000000000000000000000C1000000400000F4 +:101BF00000000000000000000000800000C10000A4 +:101C0000000000000000000000C1000000400000D3 +:101C100000000000000000000000000000000000C4 +:101C200000000000000000000000000000000000B4 +:101C300000000000000000000000000000000000A4 +:101C40000000000000000000000000000000000094 +:101C5000000000000000000000000000400000C183 +:101C60000000000000000000000000034000000031 +:101C7000000000000000000000000000400000C163 +:101C80000000000000000000000000034000000011 +:101C90000000000000000000000000000000000044 +:101CA0000000000000000000000000000000000034 +:101CB0000000000000000000000000000000000024 +:101CC0000000000000000000000000000000000014 +:101CD0000000000000000000000000000000000004 +:101CE000000000420000000000004800810000E009 +:101CF000000048000000000000000042000000005A +:101D0000000000420000000000004800810000E0E8 +:101D10000000480000000000000000420000000039 +:101D200000000000000000000000000000000000B3 +:101D300000000000000000000000000000000000A3 +:101D40000000000000000000000000000000000093 +:101D50000000000000000000000000000000000083 +:101D60000000000000000000000000000000000073 +:101D70000000000000000000000000000000000063 +:101D80000000000000000000000000000000000053 +:101D90000000000000000000000000000000000043 +:101DA0000000000000000000000000000000000033 +:101DB0000000000000000000000000000000000023 +:101DC0000000000000000000000000000000000013 +:101DD0000000000000000000000000000000000003 +:101DE00000000000000000000000000000000000F3 +:101DF00000000000000000000000000000000000E3 +:101E000000000000000000000000000000000000D2 +:101E100000000000000000000000000000000000C2 +:101E200000000000000000000000000000000000B2 +:101E300000000000000000000000000000000000A2 +:101E40000000000000000000000000000000000092 +:101E50000000000000000000000000000000000082 +:101E60000000747B00000000000000000000000083 +:101E70000000000000000000000000000000000062 +:101E8000DE2E747B00000000000000000000000057 +:101E90000000000000000000000000000000000042 +:101EA000DE2E000000000000000000000000000026 +:101EB0000000000000000000000000000000000022 +:101EC0000000000000000000000000000000000012 +:101ED0000000000000000000000000000000000002 +:101EE00000000000615603400000000000000231C5 +:101EF000E0000000000000000C40000000000000B6 +:101F000002C06A86615603400000000000000231F2 +:101F1000E0000000000000000C4000000000000095 +:101F200002C06A86000000000000000000000000FF +:101F300000000000000000000000000000000000A1 +:101F40000000000000000000000000000000000091 +:101F50000000000000000000000000000000000081 +:101F6000000000000000000000000000040020004D +:101F70002000200000000000000000000000000021 +:101F80000000000000000000000000000000000051 +:101F90000000000000000000000000000000000041 +:101FA0000000000000000000000000000000000031 +:101FB0000000000000000000000000000000000021 +:101FC0000000000000000000000000000000000011 +:101FD0000000000000000000000000000000000001 +:101FE00000000000000000000000000000000000F1 +:101FF00000000000000000000000000000000000E1 +:1020000000000000000000000000000000000000D0 +:1020100000000000000000000000000000000000C0 +:1020200000000000000000000000000000000000B0 +:1020300000000000000000000000000000000000A0 +:102040000000000000000000000000000000000090 +:102050000000000000000000000000000000000080 +:102060000000000000000000000000000000000070 +:102070000000000000000000000000000000000060 +:102080000000000000000000000000000000000050 +:102090000000000000000000000000000000000040 +:1020A0000000000000000000000000000000000030 +:1020B0000000000000000000000000000000000020 +:1020C0000000000000000000000000000000000010 +:1020D0000000000000000000000000000000000000 +:1020E00000000000000000000000000000000000F0 +:1020F00000000000000000000000000000000000E0 +:1021000000000000000000000000000000000000CF +:1021100000000000000000000000000000000000BF +:1021200000000000000000000000000000000000AF +:10213000000000000000000000000000000000009F +:10214000000000000000000000000000000000008F +:10215000000000000000000000000000000000007F +:10216000000000000000000000000000000000006F +:10217000000000000000000000000000000000005F +:10218000000000000000000000000000000000004F +:10219000000000000000000000000000000000003F +:1021A000000000000000000000000000000000002F +:1021B000000000000000000000000000000000001F +:1021C000000000000000000000000000000000000F +:1021D00000000000000000000000000000000000FF +:1021E00000000000000000000000000000000000EF +:1021F00000000000000000000800080008000000C7 +:1022000000000000000000000000000000000000CE +:10221000410000000000000008000000080000006D +:1022200000000000000000000000000000000000AE +:10223000000000000000000000000000000000009E +:10224000000000000000000000000000000000008E +:10225000000000000000000000000000000000007E +:10226000000000000000000000000000000000006E +:10227000000000000000000004000000000000005A +:10228000000000000000000000000000000000004E +:102290000000000000000000080000000000000036 +:1022A000000000000000000000000000000000002E +:1022B000000000000000000000000000000000001E +:1022C000000000000000000000000000000000000E +:1022D00000000000000000000000000000000000FE +:1022E00000000000000000000000000000000000EE +:1022F00000000000000000000000000000000000DE +:1023000000000000000000000000000000000000CD +:1023100000000000000000000000000000000000BD +:1023200000000000000000000000000000000000AD +:10233000000000000000000000000000000000009D +:10234000000000000000000000000000000000008D +:10235000000000000000000000000000000000007D +:10236000000000000000000000000000000000006D +:10237000000000000000000000000000000000005D +:10238000000000000000000000000000000000004D +:102390000800000000000000000000000000000035 +:1023A0000800000000000000000000000000000025 +:1023B000000000000000000000000000000000001D +:1023C000000000000000000000000000000000000D +:1023D00000000000000000000000000000000000FD +:1023E00000000000000000000000000000000000ED +:1023F00000000000000000000000000000000000DD +:1024000000000000000000000000000000000300C9 +:10241000000000000000000041000000000000007B +:102420000000000000000000410000000000030068 +:10243000000000000000000000000000000000009C +:10244000000000000000000000000000000000008C +:10245000000000000000000000000000000000007C +:10246000000000000000000000000000000000006C +:10247000000000000000000000000000000000005C +:10248000000000000000000000000000000000004C +:10249000000000000000000000000000000000003C +:1024A000000000000000000000000000000000002C +:1024B000000000000000000000000000000000001C +:1024C000000000000000000000000000000000000C +:1024D00000000000000000000000000000000000FC +:1024E00000000000000000000000000000000000EC +:1024F00000000000000000000000000000000000DC +:1025000000000000000000000000000000000000CB +:1025100000000000000000000000000000000000BB +:1025200000000000000000000000000000000000AB +:10253000000000000000000000000000000000009B +:10254000000000000000000000000000000000008B +:10255000000000000000000000000000000000007B +:10256000000000000000000000000000000000006B +:10257000000000000000000000000000000000005B +:10258000000000000000000000000000000000004B +:10259000000000000000000000000000000000003B +:1025A000000000000000000000000000000000002B +:1025B000000000000000000000000000000000001B +:1025C000000000000000000000000000000000000B +:1025D00000000000000000000000000000000000FB +:1025E00000000000000000000000000000000000EB +:1025F00000000000000000000000000000000000DB +:1026000000000000000000000000000000000000CA +:1026100000000000000000000000000000000000BA +:1026200000000000000000000000000000000000AA +:10263000000000000000000000000000000000009A +:10264000000000000000000000000000000000008A +:10265000000000000000000000000000000000007A +:10266000000000000000000000000000000000006A +:10267000000000000000000000000000000000005A +:10268000000000000000000000000000000000004A +:10269000000000000000000000000000000000003A +:1026A000000000000000000000000000000000002A +:1026B000000000000000000000000000000000001A +:1026C000000000000000000000000000000000000A +:1026D00000000000000000000000000000000000FA +:1026E00000000000000000000000000000000000EA +:1026F00000000000000000000000000000000000DA +:1027000000000000000000000000000000000000C9 +:1027100000000000000000000000000000000000B9 +:1027200000000000000000000000000000000000A9 +:102730000000000000000000000000000000000099 +:102740000000000000000000000000000000000089 +:102750000000000000000000000000000000000079 +:102760000000000000000000000000000000000069 +:102770000000000000000000000000000000000059 +:102780000000000000000000000000000000000049 +:102790000000000000000000000000000000000039 +:1027A0000000000000000000000000000000000029 +:1027B0000000000000000000000000000000000019 +:1027C0000000000000000000000000000000000009 +:1027D00000000000000000000000000000000000F9 +:1027E00000000000000000000000000000000000E9 +:1027F00000000000000000000000000000000000D9 +:1028000000000000000000000000000000000000C8 +:1028100000000000000000000000000000000000B8 +:1028200000000000000000000000000000000000A8 +:102830000000000000000000000000000000000098 +:102840000000000000000000000000000000000088 +:102850000000000000000000000000000000000078 +:102860000000000000000000000000000000000068 +:102870000000000000000000000000000000000058 +:102880000000000000000000000000000000000048 +:102890000000000000000000000000000000000038 +:1028A0000000000000000000000000000000000028 +:1028B0000000000000000000000000000000000018 +:1028C0000000000000000000000000000000000008 +:1028D00000000000000000000000000000000000F8 +:1028E00000000000000000000000000000000000E8 +:1028F00000000000000000000000000000000000D8 +:1029000000000000000000000000000000000000C7 +:1029100000000000000000000000000000000000B7 +:1029200000000000000000000000000000000000A7 +:102930000000000000000000000000000000000097 +:102940000000000000000000000000000000000087 +:102950000000000000000000000000000000000077 +:102960000000000000000000000000000000000067 +:102970000000000000000000000000000000000057 +:102980000000000000000000000000000000000047 +:102990000000000000000000000000000000000037 +:1029A0000000000000000000000000000000000027 +:1029B0000000000000000000000000000000000017 +:1029C0000000000000000000000000000000000007 +:1029D00000000000000000000000000000000000F7 +:1029E00000000000000000000000000000000000E7 +:1029F00000000000000000000000000000000000D7 +:102A000000000000000000000000000000000000C6 +:102A100000000000000000000000000000000000B6 +:102A200000000000000000000000000000000000A6 +:102A30000000000000000000000000000000000096 +:102A40000000000000000000000000000000000086 +:102A50000000000000000000000000000000000076 +:102A60000000000000000000000000000000000066 +:102A70000000000000000000000000000000000056 +:102A80000000000000000000000000000000000046 +:102A90000000000000000000000000000000000036 +:102AA0000000000000000000000000000000000026 +:102AB0000000000000000000000000000000000016 +:102AC0000000000000000000000000000000000006 +:102AD00000000000000000000000000000000000F6 +:102AE00000000000000000000000000000000000E6 +:102AF00000000000000000000000000000000000D6 +:102B000000000000000000000000000000000000C5 +:102B100000000000000000000000000000000000B5 +:102B200000000000000000000000000000000000A5 +:102B30000000000000000000000000000000000095 +:102B40000000000000000000000000000000000085 +:102B50000000000000000000000000000000000075 +:102B60000000000000000000000000000000000065 +:102B70000000000000000000000000000000000055 +:102B80000000000000000000000000000000000045 +:102B90000000000000000000000000000000000035 +:102BA0000000000000000000000000000000000025 +:102BB0000000000000000000000000000000000015 +:102BC0000000000000000000000000000000000005 +:102BD00000000000000000000000000000000000F5 +:102BE00000000000000000000000000000000000E5 +:102BF00000000000000000000000000000000000D5 +:102C000000000000000000000000000000000000C4 +:102C100000000000000000000000000000000000B4 +:102C200000000000000000000000000000000000A4 +:102C30000000000000000000000000000000000094 +:102C40000000000000000000000000000000000084 +:102C50000000000000000000000000000000000074 +:102C60000000000000000000000000000000000064 +:102C70000000000000000000000000000000000054 +:102C80000000000000000000000000000000000044 +:102C90000000000000000000000000000000000034 +:102CA0000000000000000000000000000000000024 +:102CB0000000000000000000000000000000000014 +:102CC0000000000000000000000000000000000004 +:102CD00000000000000000000000000000000000F4 +:102CE00000000000000000000000000000000000E4 +:102CF00000000000000000000000000000000000D4 +:102D000000000000000000000000000000000000C3 +:102D100000000000000000000000000000000000B3 +:102D200000000000000000000000000000000000A3 +:102D30000000000000000000000000000000000093 +:102D40000000000000000000000000000000000083 +:102D50000000000000000000000000000000000073 +:102D60000000000000000000000000000000000063 +:102D70000000000000000000000000000000000053 +:102D80000000000000000000000000000000000043 +:102D90000000000000000000000000000000000033 +:102DA0000000000000000000000000000000000023 +:102DB0000000000000000000000000000000000013 +:102DC0000000000000000000000000000000000003 +:102DD00000000000000000000000000000000000F3 +:102DE00000000000000000000000000000000000E3 +:102DF00000000000000000000000000000000000D3 +:102E000000000000000000000000000000000000C2 +:102E100000000000000000000000000000000000B2 +:102E200000000000000000000000000000000000A2 +:102E30000000000000000000000000000000000092 +:102E40000000000000000000000000000000000082 +:102E50000000000000000000000000000000000072 +:102E60000000000000000000000000000000000062 +:102E70000000000000000000000000000000000052 +:102E80000000000000000000000000000000000042 +:102E90000000000000000000000000000000000032 +:102EA0000000000000000000000000000000000022 +:102EB0000000000000000000000000000000000012 +:102EC0000000000000000000000000000000000002 +:102ED00000000000000000000000000000000000F2 +:102EE00000000000000000000000000000000000E2 +:102EF00000000000000000000000000000000000D2 +:102F000000000000000000000000000000000000C1 +:102F100000000000000000000000000000000000B1 +:102F200000000000000000000000000000000000A1 +:102F30000000000000000000000000000000000091 +:102F40000000000000000000000000000000000081 +:102F50000000000000000000000000000000000071 +:102F60000000000000000000000000000000000061 +:102F70000000000000000000000000000000000051 +:102F80000000000000000000000000000000000041 +:102F90000000000000000000000000000000000031 +:102FA0000000000000000000000000000000000021 +:102FB0000000000000000000000000000000000011 +:102FC0000000000000000000000000000000000001 +:102FD00000000000000000000000000000000000F1 +:102FE00000000000000000000000000000000000E1 +:102FF00000000000000000000000000000000000D1 +:1030000000000000000000000000000000000000C0 +:1030100000000000000000000000000000000000B0 +:1030200000000000000000000000000000000000A0 +:103030000000000000000000000000000000000090 +:103040000000000000000000000000000000000080 +:103050000000000000000000000000000000000070 +:103060000000000000000000000000000000000060 +:103070000000000000000000000000000000000050 +:103080000000000000000000000000000000000040 +:103090000000000000000000000000000000000030 +:1030A0000000000000000000000000000000000020 +:1030B0000000000000000000000000000000000010 +:1030C0000000000000000000000000000000000000 +:1030D00000000000000000000000000000000000F0 +:1030E00000000000000000000000000000000000E0 +:1030F00000000000000000000000000000000000D0 +:1031000000000000000000000000000000000000BF +:1031100000000000000000000000000000000000AF +:10312000000000000000000000000000000000009F +:10313000000000000000000000000000000000008F +:10314000000000000000000000000000000000007F +:10315000000000000000000000000000000000006F +:10316000000000000000000000000000000000005F +:10317000000000000000000000000000000000004F +:10318000000000000000000000000000000000003F +:10319000000000000000000000000000000000002F +:1031A000000000000000000000000000000000001F +:1031B000000000000000000000000000000000000F +:1031C00000000000000000000000000000000000FF +:1031D00000000000000000000000000000000000EF +:1031E00000000000000000000000000000000000DF +:1031F00000000000000000000000000000000000CF +:1032000000000000000000000000000000000000BE +:1032100000000000000000000000000000000000AE +:10322000000000000000000000000000000000009E +:10323000000000000000000000000000000000008E +:10324000000000000000000000000000000000007E +:10325000000000000000000000000000000000006E +:10326000000000000000000000000000000000005E +:10327000000000000000000000000000000000004E +:10328000000000000000000000000000000000003E +:10329000000000000000000000000000000000002E +:1032A000000000000000000000000000000000001E +:1032B000000000000000000000000000000000000E +:1032C00000000000000000000000000000000000FE +:1032D00000000000000000000000000000000000EE +:1032E00000000000000000000000000000000000DE +:1032F00000000000000000000000000000000000CE +:1033000000000000000000000000000000000000BD +:1033100000000000000000000000000000000000AD +:10332000000000000000000000000000000000009D +:10333000000000000000000000000000000000008D +:10334000000000000000000000000000000000007D +:10335000000000000000000000000000000000006D +:10336000000000000000000000000000000000005D +:10337000000000000000000000000000000000004D +:10338000000000000000000000000000000000003D +:10339000000000000000000000000000000000002D +:1033A000000000000000000000000000000000001D +:1033B000000000000000000000000000000000000D +:1033C00000000000000000000000000000000000FD +:1033D00000000000000000000000000000000000ED +:1033E00000000000000000000000000000000000DD +:1033F00000000000000000000000000000000000CD +:1034000000000000000000000000000000000000BC +:1034100000000000000000000000000000000000AC +:10342000000000000000000000000000000000009C +:10343000000000000000000000000000000000008C +:10344000000000000000000000000000000000007C +:10345000000000000000000000000000000000006C +:10346000000000000000000000000000000000005C +:10347000000000000000000000000000000000004C +:10348000000000000000000000000000000000003C +:10349000000000000000000000000000000000002C +:1034A000000000000000000000000000000000001C +:1034B000000000000000000000000000000000000C +:1034C00000000000000000000000000000000000FC +:1034D00000000000000000000000000000000000EC +:1034E00000000000000000000000000000000000DC +:1034F00000000000000000000000000000000000CC +:1035000000000000000000000000000000000000BB +:1035100000000000000000000000000000000000AB +:10352000000000000000000000000000000000009B +:10353000000000000000000000000000000000008B +:10354000000000000000000000000000000000007B +:10355000000000000000000000000000000000006B +:10356000000000000000000000000000000000005B +:10357000000000000000000000000000000000004B +:10358000000000000000000000000000000000003B +:10359000000000000000000000000000000000002B +:1035A000000000000000000000000000000000001B +:1035B000000000000000000000000000000000000B +:1035C00000000000000000000000000000000000FB +:1035D00000000000000000000000000000000000EB +:1035E00000000000000000000000000000000000DB +:1035F00000000000000000000000000000000000CB +:1036000000000000000000000000000000000000BA +:1036100000000000000000000000000000000000AA +:10362000000000000000000000000000000000009A +:10363000000000000000000000000000000000008A +:10364000000000000000000000000000000000007A +:10365000000000000000000000000000000000006A +:10366000000000000000000000000000000000005A +:10367000000000000000000000000000000000004A +:10368000000000000000000000000000000000003A +:10369000000000000000000000000000000000002A +:1036A000000000000000000000000000000000001A +:1036B000000000000000000000000000000000000A +:1036C00000000000000000000000000000000000FA +:1036D00000000000000000000000000000000000EA +:1036E00000000000000000000000000000000000DA +:1036F00000000000000000000000000000000000CA +:1037000000000000000000000000000000000000B9 +:1037100000000000000000000000000000000000A9 +:103720000000000000000000000000000000000099 +:103730000000000000000000000000000000000089 +:103740000000000000000000000000000000000079 +:103750000000000000000000000000000000000069 +:103760000000000000000000000000000000000059 +:103770000000000000000000000000000000000049 +:103780000000000000000000000000000000000039 +:103790000000000000000000000000000000000029 +:1037A0000000000000000000000000000000000019 +:1037B0000000000000000000000000000000000009 +:1037C00000000000000000000000000000000000F9 +:1037D00000000000000000000000000000000000E9 +:1037E00000000000000000000000000000000000D9 +:1037F00000000000000000000000000000000000C9 +:1038000000000000000000000000000000000000B8 +:1038100000000000000000000000000000000000A8 +:103820000000000000000000000000000000000098 +:103830000000000000000000000000000000000088 +:103840000000000000000000000000000000000078 +:103850000000000000000000000000000000000068 +:103860000000000000000000000000000000000058 +:103870000000000000000000000000000000000048 +:103880000000000000000000000000000000000038 +:103890000000000000000000000000000000000028 +:1038A0000000000000000000000000000000000018 +:1038B0000000000000000000000000000000000008 +:1038C00000000000000000000000000000000000F8 +:1038D00000000000000000000000000000000000E8 +:1038E00000000000000000000000000000000000D8 +:1038F00000000000000000000000000000000000C8 +:1039000000000000000000000000000000000000B7 +:1039100000000000000000000000000000000000A7 +:103920000000000000000000000000000000000097 +:103930000000000000000000000000000000000087 +:103940000000000000000000000000000000000077 +:103950000000000000000000000000000000000067 +:103960000000000000000000000000000000000057 +:103970000000000000000000000000000000000047 +:103980000000000000000000000000000000000037 +:103990000000000000000000000000000000000027 +:1039A0000000000000000000000000000000000017 +:1039B0000000000000000000000000000000000007 +:1039C00000000000000000000000000000000000F7 +:1039D00000000000000000000000000000000000E7 +:1039E00000000000000000000000000000000000D7 +:1039F00000000000000000000000000000000000C7 +:103A000000000000000000000000000000000000B6 +:103A100000000000000000000000000000000000A6 +:103A20000000000000000000000000000000000096 +:103A30000000000000000000000000000000000086 +:103A40000000000000000000000000000000000076 +:103A50000000000000000000000000000000000066 +:103A60000000000000000000000000000000000056 +:103A70000000000000000000000000000000000046 +:103A80000000000000000000000000000000000036 +:103A90000000000000000000000000000000000026 +:103AA0000000000000000000000000000000000016 +:103AB0000000000000000000000000000000000006 +:103AC00000000000000000000000000000000000F6 +:103AD00000000000000000000000000000000000E6 +:103AE00000000000000000000000000000000000D6 +:103AF00000000000000000000000000000000000C6 +:103B000000000000000000000000000000000000B5 +:103B100000000000000000000000000000000000A5 +:103B20000000000000000000000000000000000095 +:103B30000000000000000000000000000000000085 +:103B40000000000000000000000000000000000075 +:103B50000000000000000000000000000000000065 +:103B60000000000000000000000000000000000055 +:103B70000000000000000000000000000000000045 +:103B80000000000000000000000000000000000035 +:103B90000000000000000000000000000000000025 +:103BA0000000000000000000000000000000000015 +:103BB0000000000000000000000000000000000005 +:103BC00000000000000000000000000000000000F5 +:103BD00000000000000000000000000000000000E5 +:103BE00000000000000000000000000000000000D5 +:103BF00000000000000000000000000000000000C5 +:103C000000000000000000000000000000000000B4 +:103C100000000000000000000000000000000000A4 +:103C20000000000000000000000000000000000094 +:103C30000000000000000000000000000000000084 +:103C40000000000000000000000000000000000074 +:103C50000000000000000000000000000000000064 +:103C60000000000000000000000000000000000054 +:103C70000000000000000000000000000000000044 +:103C80000000000000000000000000000000000034 +:103C90000000000000000000000000000000000024 +:103CA0000000000000000000000000000000000014 +:103CB0000000000000000000000000000000000004 +:103CC00000000000000000000000000000000000F4 +:103CD00000000000000000000000000000000000E4 +:103CE00000000000000000000000000000000000D4 +:103CF00000000000000000000000000000000000C4 +:103D000000000000000000000000000000000000B3 +:103D100000000000000000000000000000000000A3 +:103D20000000000000000000000000000000000093 +:103D30000000000000000000000000000000000083 +:103D40000000000000000000000000000000000073 +:103D50000000000000000000000000000000000063 +:103D60000000000000000000000000000000000053 +:103D70000000000000000000000000000000000043 +:103D80000000000000000000000000000000000033 +:103D90000000000000000000000000000000000023 +:103DA0000000000000000000000000000000000013 +:103DB0000000000000000000000000000000000003 +:103DC00000000000000000000000000000000000F3 +:103DD00000000000000000000000000000000000E3 +:103DE00000000000000000000000000000000000D3 +:103DF00000000000000000000000000000000000C3 +:103E000000000000000000000000000000000000B2 +:103E100000000000000000000000000000000000A2 +:103E20000000000000000000000000000000000092 +:103E30000000000000000000000000000000000082 +:103E40000000000000000000000000000000000072 +:103E50000000000000000000000000000000000062 +:103E60000000000000000000000000000000000052 +:103E70000000000000000000000000000000000042 +:103E80000000000000000000000000000000000032 +:103E90000000000000000000000000000000000022 +:103EA0000000000000000000000000000000000012 +:103EB0000000000000000000000000000000000002 +:103EC00000000000000000000000000000000000F2 +:103ED00000000000000000000000000000000000E2 +:103EE00000000000000000000000000000000000D2 +:103EF00000000000000000000000000000000000C2 +:103F000000000000000000000000000000000000B1 +:103F100000000000000000000000000000000000A1 +:103F20000000000000000000000000000000000091 +:103F30000000000000000000000000000000000081 +:103F40000000000000000000000000000000000071 +:103F50000000000000000000000000000000000061 +:103F60000000000000000000000000000000000051 +:103F70000000000000000000000000000000000041 +:103F80000000000000000000000000000000000031 +:103F90000000000000000000000000000000000021 +:103FA0000000000000000000000000000000000011 +:103FB0000000000000000000000000000000000001 +:103FC00000000000000000000000000000000000F1 +:103FD00000000000000000000000000000000000E1 +:103FE00000000000000000000000000000000000D1 +:103FF00000000000000000000000000000000000C1 +:1040000000000000000000000000000000000000B0 +:1040100000000000000000000000000000000000A0 +:104020000000000000000000000000000000000090 +:104030000000000000000000000000000000000080 +:104040000000000000000000000000000000000070 +:104050000000000000000000000000000000000060 +:104060000000000000000000000000000000000050 +:104070000000000000000000000000000000000040 +:104080000000000000000000000000000000000030 +:104090000000000000000000000000000000000020 +:1040A0000000000000000000000000000000000010 +:1040B0000000000000000000000000000000000000 +:1040C00000000000000000000000000000000000F0 +:1040D00000000000000000000000000000000000E0 +:1040E00000000000000000000000000000000000D0 +:1040F00000000000000000000000000000000000C0 +:1041000000000000000000000000000000000000AF +:10411000000000000000000000000000000000009F +:10412000000000000000000000000000000000008F +:10413000000000000000000000000000000000007F +:10414000000000000000000000000000000000006F +:10415000000000000000000000000000000000005F +:10416000000000000000000000000000000000004F +:10417000000000000000000000000000000000003F +:10418000000000000000000000000000000000002F +:10419000000000000000000000000000000000001F +:1041A000000000000000000000000000000000000F +:1041B00000000000000000000000000000000000FF +:1041C00000000000000000000000000000000000EF +:1041D00000000000000000000000000000000000DF +:1041E00000000000000000000000000000000000CF +:1041F00000000000000000000000000000000000BF +:1042000000000000000000000000000000000000AE +:10421000000000000000000000000000000000009E +:10422000000000000000000000000000000000008E +:10423000000000000000000000000000000000007E +:10424000000000000000000000000000000000006E +:10425000000000000000000000000000000000005E +:10426000000000000000000000000000000000004E +:10427000000000000000000000000000000000003E +:10428000000000000000000000000000000000002E +:10429000000000000000000000000000000000001E +:1042A000000000000000000000000000000000000E +:1042B00000000000000000000000000000000000FE +:1042C00000000000000000000000000000000000EE +:1042D00000000000000000000000000000000000DE +:1042E00000000000000000000000000000000000CE +:1042F00000000000000000000000000000000000BE +:1043000000000000000000000000000000000000AD +:10431000000000000000000000000000000000009D +:10432000000000000000000000000000000000008D +:10433000000000000000000000000000000000007D +:10434000000000000000000000000000000000006D +:10435000000000000000000000000000000000005D +:10436000000000000000000000000000000000004D +:10437000000000000000000000000000000000003D +:10438000000000000000000000000000000000002D +:10439000000000000000000000000000000000001D +:1043A000000000000000000000000000000000000D +:1043B00000000000000000000000000000000000FD +:1043C00000000000000000000000000000000000ED +:1043D00000000000000000000000000000000000DD +:1043E00000000000000000000000000000000000CD +:1043F00000000000000000000000000000000000BD +:1044000000000000000000000000000000000000AC +:10441000000000000000000000000000000000009C +:10442000000000000000000000000000000000008C +:10443000000000000000000000000000000000007C +:10444000000000000000000000000000000000006C +:10445000000000000000000000000000000000005C +:10446000000000000000000000000000000000004C +:10447000000000000000000000000000000000003C +:10448000000000000000000000000000000000002C +:10449000000000000000000000000000000000001C +:1044A000000000000000000000000000000000000C +:1044B00000000000000000000000000000000000FC +:1044C00000000000000000000000000000000000EC +:1044D00000000000000000000000000000000000DC +:1044E00000000000000000000000000000000000CC +:1044F00000000000000000000000000000000000BC +:1045000000000000000000000000000000000000AB +:10451000000000000000000000000000000000009B +:10452000000000000000000000000000000000008B +:10453000000000000000000000000000000000007B +:10454000000000000000000000000000000000006B +:10455000000000000000000000000000000000005B +:10456000000000000000000000000000000000004B +:10457000000000000000000000000000000000003B +:10458000000000000000000000000000000000002B +:10459000000000000000000000000000000000001B +:1045A000000000000000000000000000000000000B +:1045B00000000000000000000000000000000000FB +:1045C00000000000000000000000000000000000EB +:1045D00000000000000000000000000000000000DB +:1045E00000000000000000000000000000000000CB +:1045F00000000000000000000000000000000000BB +:1046000000000000000000000000000000000000AA +:10461000000000000000000000000000000000009A +:10462000000000000000000000000000000000008A +:10463000000000000000000000000000000000007A +:10464000000000000000000000000000000000006A +:10465000000000000000000000000000000000005A +:10466000000000000000000000000000000000004A +:10467000000000000000000000000000000000003A +:10468000000000000000000000000000000000002A +:10469000000000000000000000000000000000001A +:1046A000000000000000000000000000000000000A +:1046B00000000000000000000000000000000000FA +:1046C00000000000000000000000000000000000EA +:1046D00000000000000000000000000000000000DA +:1046E00000000000000000000000000000000000CA +:1046F00000000000000000000000000000000000BA +:1047000000000000000000000000000000000000A9 +:104710000000000000000000000000000000000099 +:104720000000000000000000000000000000000089 +:104730000000000000000000000000000000000079 +:104740000000000000000000000000000000000069 +:104750000000000000000000000000000000000059 +:104760000000000000000000000000000000000049 +:104770000000000000000000000000000000000039 +:104780000000000000000000000000000000000029 +:104790000000000000000000000000000000000019 +:1047A0000000000000000000000000000000000009 +:1047B00000000000000000000000000000000000F9 +:1047C00000000000000000000000000000000000E9 +:1047D00000000000000000000000000000000000D9 +:1047E00000000000000000000000000000000000C9 +:1047F00000000000000000000000000000000000B9 +:1048000000000000000000000000000000000000A8 +:104810000000000000000000000000000000000098 +:104820000000000000000000000000000000000088 +:104830000000000000000000000000000000000078 +:104840000000000000000000000000000000000068 +:104850000000000000000000000000000000000058 +:104860000000000000000000000000000000000048 +:104870000000000000000000000000000000000038 +:104880000000000000000000000000000000000028 +:104890000000000000000000000000000000000018 +:1048A0000000000000000000000000000000000008 +:1048B00000000000000000000000000000000000F8 +:1048C00000000000000000000000000000000000E8 +:1048D00000000000000000000000000000000000D8 +:1048E00000000000000000000000000000000000C8 +:1048F00000000000000000000000000000000000B8 +:1049000000000000000000000000000000000000A7 +:104910000000000000000000000000000000000097 +:104920000000000000000000000000000000000087 +:104930000000000000000000000000000000000077 +:104940000000000000000000000000000000000067 +:104950000000000000000000000000000000000057 +:104960000000000000000000000000000000000047 +:104970000000000000000000000000000000000037 +:104980000000000000000000000000000000000027 +:104990000000000000000000000000000000000017 +:1049A0000000000000000000000000000000000007 +:1049B00000000000000000000000000000000000F7 +:1049C00000000000000000000000000000000000E7 +:1049D00000000000000000000000000000000000D7 +:1049E00000000000000000000000000000000000C7 +:1049F00000000000000000000000000000000000B7 +:104A000000000000000000000000000000000000A6 +:104A10000000000000000000000000000000000096 +:104A20000000000000000000000000000000000086 +:104A30000000000000000000000000000000000076 +:104A40000000000000000000000000000000000066 +:104A50000000000000000000000000000000000056 +:104A60000000000000000000000000000000000046 +:104A70000000000000000000000000000000000036 +:104A80000000000000000000000000000000000026 +:104A90000000000000000000000000000000000016 +:104AA0000000000000000000000000000000000006 +:104AB00000000000000000000000000000000000F6 +:104AC00000000000000000000000000000000000E6 +:104AD00000000000000000000000000000000000D6 +:104AE00000000000000000000000000000000000C6 +:104AF00000000000000000000000000000000000B6 +:104B000000000000000000000000000000000000A5 +:104B10000000000000000000000000000000000095 +:104B20000000000000000000000000000000000085 +:104B30000000000000000000000000000000000075 +:104B40000000000000000000000000000000000065 +:104B50000000000000000000000000000000000055 +:104B60000000000000000000000000000000000045 +:104B70000000000000000000000000000000000035 +:104B80000000000000000000000000000000000025 +:104B90000000000000000000000000000000000015 +:104BA0000000000000000000000000000000000005 +:104BB00000000000000000000000000000000000F5 +:104BC00000000000000000000000000000000000E5 +:104BD00000000000000000000000000000000000D5 +:104BE00000000000000000000000000000000000C5 +:104BF00000000000000000000000000000000000B5 +:104C000000000000000000000000000000000000A4 +:104C10000000000000000000000000000000000094 +:104C20000000000000000000000000000000000084 +:104C30000000000000000000000000000000000074 +:104C40000000000000000000000000000000000064 +:104C50000000000000000000000000000000000054 +:104C60000000000000000000000000000000000044 +:104C70000000000000000000000000000000000034 +:104C80000000000000000000000000000000000024 +:104C90000000000000000000000000000000000014 +:104CA0000000000000000000000000000000000004 +:104CB00000000000000000000000000000000000F4 +:104CC00000000000000000000000000000000000E4 +:104CD00000000000000000000000000000000000D4 +:104CE00000000000000000000000000000000000C4 +:104CF00000000000000000000000000000000000B4 +:104D000000000000000000000000000000000000A3 +:104D10000000000000000000000000000000000093 +:104D20000000000000000000000000000000000083 +:104D30000000000000000000000000000000000073 +:104D40000000000000000000000000000000000063 +:104D50000000000000000000000000000000000053 +:104D60000000000000000000000000000000000043 +:104D70000000000000000000000000000000000033 +:104D80000000000000000000000000000000000023 +:104D90000000000000000000000000000000000013 +:104DA0000000000000000000000000000000000003 +:104DB00000000000000000000000000000000000F3 +:104DC00000000000000000000000000000000000E3 +:104DD00000000000000000000000000000000000D3 +:104DE00000000000000000000000000000000000C3 +:104DF00000000000000000000000000000000000B3 +:104E000000000000000000000000000000000000A2 +:104E10000000000000000000000000000000000092 +:104E20000000000000000000000000000000000082 +:104E30000000000000000000000000000000000072 +:104E40000000000000000000000000000000000062 +:104E50000000000000000000000000000000000052 +:104E60000000000000000000000000000000000042 +:104E70000000000000000000000000000000000032 +:104E80000000000000000000000000000000000022 +:104E90000000000000000000000000000000000012 +:104EA0000000000000000000000000000000000002 +:104EB00000000000000000000000000000000000F2 +:104EC00000000000000000000000000000000000E2 +:104ED00000000000000000000000000000000000D2 +:104EE00000000000000000000000000000000000C2 +:104EF00000000000000000000000000000000000B2 +:104F000000000000000000000000000000000000A1 +:104F10000000000000000000000000000000000091 +:104F20000000000000000000000000000000000081 +:104F30000000000000000000000000000000000071 +:104F40000000000000000000000000000000000061 +:104F50000000000000000000000000000000000051 +:104F60000000000000000000000000000000000041 +:104F70000000000000000000000000000000000031 +:104F80000000000000000000000000000000000021 +:104F90000000000000000000000000000000000011 +:104FA0000000000000000000000000000000000001 +:104FB00000000000000000000000000000000000F1 +:104FC00000000000000000000000000000000000E1 +:104FD00000000000000000000000000000000000D1 +:104FE00000000000000000000000000000000000C1 +:104FF00000000000000000000000000000000000B1 +:1050000000000000000000000000000000000000A0 +:105010000000000000000000000000000000000090 +:105020000000000000000000000000000000000080 +:105030000000000000000000000000000000000070 +:105040000000000000000000000000000000000060 +:105050000000000000000000000000000000000050 +:105060000000000000000000000000000000000040 +:105070000000000000000000000000000000000030 +:105080000000000000000000000000000000000020 +:105090000000000000000000000000000000000010 +:1050A0000000000000000000000000000000000000 +:1050B00000000000000000000000000000000000F0 +:1050C00000000000000000000000000000000000E0 +:1050D00000000000000000000000000000000000D0 +:1050E00000000000000000000000000000000000C0 +:1050F00000000000000000000000000000000000B0 +:10510000000000000000000000000000000000009F +:10511000000000000000000000000000000000008F +:10512000000000000000000000000000000000007F +:10513000000000000000000000000000000000006F +:10514000000000000000000000000000000000005F +:10515000000000000000000000000000000000004F +:10516000000000000000000000000000000000003F +:10517000000000000000000000000000000000002F +:10518000000000000000000000000000000000001F +:10519000000000000000000000000000000000000F +:1051A00000000000000000000000000000000000FF +:1051B00000000000000000000000000000000000EF +:1051C00000000000000000000000000000000000DF +:1051D00000000000000000000000000000000000CF +:1051E00000000000000000000000000000000000BF +:1051F00000000000000000000000000000000000AF +:10520000000000000000000000000000000000009E +:10521000000000000000000000000000000000008E +:10522000000000000000000000000000000000007E +:10523000000000000000000000000000000000006E +:10524000000000000000000000000000000000005E +:10525000000000000000000000000000000000004E +:10526000000000000000000000000000000000003E +:10527000000000000000000000000000000000002E +:10528000000000000000000000000000000000001E +:10529000000000000000000000000000000000000E +:1052A00000000000000000000000000000000000FE +:1052B00000000000000000000000000000000000EE +:1052C00000000000000000000000000000000000DE +:1052D00000000000000000000000000000000000CE +:1052E00000000000000000000000000000000000BE +:1052F00000000000000000000000000000000000AE +:10530000000000000000000000000000000000009D +:10531000000000000000000000000000000000008D +:10532000000000000000000000000000000000007D +:10533000000000000000000000000000000000006D +:10534000000000000000000000000000000000005D +:10535000000000000000000000000000000000004D +:10536000000000000000000000000000000000003D +:10537000000000000000000000000000000000002D +:10538000000000000000000000000000000000001D +:10539000000000000000000000000000000000000D +:1053A00000000000000000000000000000000000FD +:1053B00000000000000000000000000000000000ED +:1053C00000000000000000000000000000000000DD :1053D00000000000000000000000000000000000CD :1053E00000000000000000000000000000000000BD :1053F00000000000000000000000000000000000AD @@ -34269,7 +34269,7 @@ :105D30000000000000000000000000000000000063 :105D40000000000000000000000000000000000053 :105D50000000000000000000000000000000000043 -:105D600000000080000000000000000000000000B3 +:105D60000000000000000000000000000000000033 :105D70000000000000000000000000000000000023 :105D80000000000000000000000000000000000013 :105D90000000000000000000000000000000000003 @@ -34277,7 +34277,7 @@ :105DB00000000000000000000000000000000000E3 :105DC00000000000000000000000000000000000D3 :105DD00000000000000000000000000000000000C3 -:105DE00000000000000200000000000000000000B1 +:105DE00000000000000000000000000000000000B3 :105DF00000000000000000000000000000000000A3 :105E00000000000000000000000000000000000092 :105E10000000000000000000000000000000000082 @@ -34285,12 +34285,12 @@ :105E30000000000000000000000000000000000062 :105E40000000000000000000000000000000000052 :105E50000000000000000000000000000000000042 -:105E6000000000000000000002000000020000002E +:105E60000000000000000000000000000000000032 :105E70000000000000000000000000000000000022 -:105E8000020000000000000000000200000002000C -:105E90000000000002000000000000000000000000 -:105EA00000000000000000000000020000000000F0 -:105EB00000000000040000000000000000000000DE +:105E80000000000000000000000000000000000012 +:105E90000000000000000000000000000000000002 +:105EA00000000000000000000000000000000000F2 +:105EB00000000000000000000000000000000000E2 :105EC00000000000000000000000000000000000D2 :105ED00000000000000000000000000000000000C2 :105EE00000000000000000000000000000000000B2 @@ -34366,16 +34366,16 @@ :10634000000000000000000000000000000000004D :10635000000000000000000000000000000000003D :10636000000000000000000000000000000000002D -:10637000000000000000000000000000000100001C -:10638000000100000000000000000000000000000C +:10637000000000000000000000000000000000001D +:10638000000000000000000000000000000000000D :1063900000000000000000000000000000000000FD :1063A00000000000000000000000000000000000ED :1063B00000000000000000000000000000000000DD :1063C00000000000000000000000000000000000CD :1063D00000000000000000000000000000000000BD :1063E00000000000000000000000000000000000AD -:1063F000000000000000000000000000000000207D -:10640000000000400000000000000000000000004C +:1063F000000000000000000000000000000000009D +:10640000000000000000000000000000000000008C :10641000000000000000000000000000000000007C :10642000000000000000000000000000000000006C :10643000000000000000000000000000000000005C @@ -34480,7 +34480,7 @@ :106A60000000000000000000000000000000000026 :106A70000000000000000000000000000000000016 :106A80000000000000000000000000000000000006 -:106A900000000000000000610006000D0000000082 +:106A900000000000000000000000000000000000F6 :106AA00000000000000000000000000000000000E6 :106AB00000000000000000000000000000000000D6 :106AC00000000000000000000000000000000000C6 @@ -34504,7 +34504,7 @@ :106BE00000000000000000000000000000000000A5 :106BF0000000000000000000000000000000000095 :106C00000000000000000000000000000000000084 -:106C10000000000000000000000000003C003C00FC +:106C10000000000000000000000000000000000074 :106C20000000000000000000000000000000000064 :106C30000000000000000000000000000000000054 :106C40000000000000000000000000000000000044 @@ -34512,8 +34512,8 @@ :106C60000000000000000000000000000000000024 :106C70000000000000000000000000000000000014 :106C80000000000000000000000000000000000004 -:106C900000000000000000000000000000003C00B8 -:106CA0003C000000000000000000000000000000A8 +:106C900000000000000000000000000000000000F4 +:106CA00000000000000000000000000000000000E4 :106CB00000000000000000000000000000000000D4 :106CC00000000000000000000000000000000000C4 :106CD00000000000000000000000000000000000B4 @@ -34533,13 +34533,13 @@ :106DB00000000000000000000000000000000000D3 :106DC00000000000000000000000000000000000C3 :106DD00000000000000000000000000000000000B3 -:106DE0000000000000000000000200004000000061 -:106DF0000000000000000000000200000000000091 +:106DE00000000000000000000000000000000000A3 +:106DF0000000000000000000000000000000000093 :106E00000000000000000000000000000000000082 :106E10000000000000000000000000000000000072 -:106E2000020002000000000000000000000000005E -:106E30000200000000000000000000000000000050 -:106E40000000000000000200000000000000000040 +:106E20000000000000000000000000000000000062 +:106E30000000000000000000000000000000000052 +:106E40000000000000000000000000000000000042 :106E50000000000000000000000000000000000032 :106E60000000000000000000000000000000000022 :106E70000000000000000000000000000000000012 @@ -35028,9 +35028,9 @@ :108CA00000000000000000000000000000000000C4 :108CB00000000000000000000000000000000000B4 :108CC00000000000000000000000000000000000A4 -:108CD0000000000000001000000000000000000084 +:108CD0000000000000000000000000000000000094 :108CE0000000000000000000000000000000000084 -:108CF0000000000000020000000000000000000072 +:108CF0000000000000000000000000000000000074 :108D00000000000000000000000000000000000063 :108D10000000000000000000000000000000000053 :108D20000000000000000000000000000000000043 @@ -35065,9 +35065,9 @@ :108EF0000000000000000000000000000000000072 :108F00000000000000000000000000000000000061 :108F10000000000000000000000000000000000051 -:108F20000000000000000000004000400040000081 +:108F20000000000000000000000000000000000041 :108F30000000000000000000000000000000000031 -:108F400000000000000000400000000000000000E1 +:108F40000000000000000000000000000000000021 :108F50000000000000000000000000000000000011 :108F60000000000000000000000000000000000001 :108F700000000000000000000000000000000000F1 @@ -35309,9 +35309,9 @@ :109E30000000000000000000000000000000000022 :109E40000000000000000000000000000000000012 :109E50000000000000000000000000000000000002 -:109E60000000000000400000004000000000000072 -:109E700000000000000000000000000000400000A2 -:109E80000000000000000040000000400000000052 +:109E600000000000000000000000000000000000F2 +:109E700000000000000000000000000000000000E2 +:109E800000000000000000000000000000000000D2 :109E900000000000000000000000000000000000C2 :109EA00000000000000000000000000000000000B2 :109EB00000000000000000000000000000000000A2 @@ -35320,7 +35320,7 @@ :109EE0000000000000000000000000000000000072 :109EF0000000000000000000000000000000000062 :109F00000000000000000000000000000000000051 -:109F10000000004000000000000000000000000001 +:109F10000000000000000000000000000000000041 :109F20000000000000000000000000000000000031 :109F30000000000000000000000000000000000021 :109F40000000000000000000000000000000000011 @@ -35354,7 +35354,7 @@ :10A10000000000000000000000000000000000004F :10A11000000000000000000000000000000000003F :10A12000000000000000000000000000000000002F -:10A1300002000000000000000000004000000000DD +:10A13000000000000000000000000000000000001F :10A14000000000000000000000000000000000000F :10A1500000000000000000000000000000000000FF :10A1600000000000000000000000000000000000EF @@ -35455,10 +35455,10 @@ :10A7500000000000000000000000000000000000F9 :10A7600000000000000000000000000000000000E9 :10A7700000000000000000000000000000000000D9 -:10A780000000000000000000820020000004000023 -:10A7900000000200000000000000000000000000B7 +:10A7800000000000000000000000000000040000C5 +:10A7900000000000000000000000000000000000B9 :10A7A00000000000000000000000000000000000A9 -:10A7B0000000200000000000000000000000000079 +:10A7B0000000000000000000000000000000000099 :10A7C0000000000000000000000000000000000089 :10A7D0000000000000000000000000000000000079 :10A7E0000000000000000000000000000000000069 @@ -35467,20 +35467,20 @@ :10A810000000000000000000000000000000000038 :10A820000000000000000000000000000000000028 :10A830000000000000000000000000000000000018 -:10A8400000000000000000000000000000000040C8 -:10A850000000000000000000000000000000009068 +:10A840000000000000000000000000000000000008 +:10A8500000000000000000000000000000000000F8 :10A8600000000000000000000000000000000000E8 :10A8700000000000000000000000000000000000D8 -:10A880000000000000000000000000000041004146 +:10A8800000000000000000000000000000000000C8 :10A8900000000000000000000000000000000000B8 -:10A8A0000000000000000000000000410000000067 +:10A8A00000000000000000000000000000000000A8 :10A8B0000000000000000000000000000000000098 :10A8C0000000000000000000000000000000000088 :10A8D0000000000000000000000000000000000078 :10A8E0000000000000000000000000000000000068 :10A8F0000000000000000000000000000000000058 :10A900000000000000000000000000000000000047 -:10A91000000003C000000000004000000000000034 +:10A910000000000000000000000000000000000037 :10A920000000000000000000000000000000000027 :10A930000000000000000000000000000000000017 :10A940000000000000000000000000000000000007 @@ -35503,18 +35503,18 @@ :10AA500000000000000000000000000000000000F6 :10AA600000000000000000000000000000000000E6 :10AA700000000000000000000000000000000000D6 -:10AA80000000000000000000000000000000004086 -:10AA9000004000000004200400040000000000400A +:10AA800000000000000000000000000000000000C6 +:10AA900000000000000000000000000000000000B6 :10AAA00000000000000000000000000000000000A6 -:10AAB0000000000400400000004100000000000011 +:10AAB0000000000000000000000000000000000096 :10AAC0000000000000000000000000000000000086 :10AAD0000000000000000000000000000000000076 -:10AAE0000000001100000000000000000000000055 +:10AAE0000000000000000000000000000000000066 :10AAF0000000000000000000000000000000000056 :10AB00000000000000000000000000000000000045 :10AB10000000000000000000000000000000000035 -:10AB20000000000000000000030000001000000012 -:10AB3000000000000000000008000000000000000D +:10AB20000000000000000000000000000000000025 +:10AB30000000000000000000000000000000000015 :10AB40000000000000000000000000000000000005 :10AB500000000000000000000000000000000000F5 :10AB600000000000000000000000000000000000E5 @@ -35545,11 +35545,11 @@ :10ACF0000000000000000000000000000000000054 :10AD00000000000000000000000000000000000043 :10AD10000000000000000000000000000000000033 -:10AD2000080000000000000000000000000000001B -:10AD3000000000000000000000000000000008000B -:10AD400000000000000000000800000000000000FB -:10AD500000000000000000000000000000001100E2 -:10AD600000000000000000000000080000000000DB +:10AD20000000000000000000000000000000000023 +:10AD30000000000000000000000000000000000013 +:10AD40000000000000000000000000000000000003 +:10AD500000000000000000000000000000000000F3 +:10AD600000000000000000000000000000000000E3 :10AD700000000000000000000000000000000000D3 :10AD800000000000000000000000000000000000C3 :10AD900000000000000000000000000000000000B3 @@ -35707,10 +35707,10 @@ :10B710000000000000000000000000000000000029 :10B720000000000000000000000000000000000019 :10B730000000000000000000000000000000000009 -:10B7400000000000000082000000820000000000F5 -:10B750002000000000000000000000000000820047 -:10B760008400C0008400400082002000000000002F -:10B7700020000000000000000000000000000000A9 +:10B7400000000000000000000000000000000000F9 +:10B7500000000000000000000000000000000000E9 +:10B7600000000000000000000000000000000000D9 +:10B7700000000000000000000000000000000000C9 :10B7800000000000000000000000000000000000B9 :10B7900000000000000000000000000000000000A9 :10B7A0000000000000000000000000000000000099 @@ -35723,9 +35723,9 @@ :10B810000000000000000000000000000000000028 :10B820000000000000000000000000000000000018 :10B830000000000000000000000000000000000008 -:10B840000000000000000000000000410000004176 +:10B8400000000000000000000000000000000000F8 :10B8500000000000000000000000000000000000E8 -:10B860000000004100000000000000000000000097 +:10B8600000000000000000000000000000000000D8 :10B8700000000000000000000000000000000000C8 :10B8800000000000000000000000000000000000B8 :10B8900000000000000000000000000000000000A8 @@ -35734,7 +35734,7 @@ :10B8C0000000000000000000000000000000000078 :10B8D0000000000000000000000000000000000068 :10B8E0000000000000000000000000000000000058 -:10B8F0000000000000000500000000000000000043 +:10B8F0000000000000000000000000000000000048 :10B900000000000000000000000000000000000037 :10B910000000000000000000000000000000000027 :10B920000000000000000000000000000000000017 @@ -35755,7 +35755,7 @@ :10BA10000000000000000000000000000000000026 :10BA20000000000000000000000000000000000016 :10BA30000000000000000000000000000000000006 -:10BA400000000000000000000800000000000000EE +:10BA400000000000000000000000000000000000F6 :10BA500000000000000000000000000000000000E6 :10BA600000000000000000000000000000000000D6 :10BA700000000000000000000000000000000000C6 @@ -35764,11 +35764,11 @@ :10BAA0000000000000000000000000000000000096 :10BAB0000000000000000000000000000000000086 :10BAC0000000000000000000000000000000000076 -:10BAD000000008002000000000000300000000003B -:10BAE00000000000000000000000000020004000F6 -:10BAF00005004000080000040000000000000002F3 -:10BB0000000000000000000000000000000008002D -:10BB100008000800080008000000110000000000F4 +:10BAD0000000080008000000000000000000000056 +:10BAE0000000000000000000000000000000000056 +:10BAF0000000000000000000000000000000000046 +:10BB00000000000000000000000000000000000035 +:10BB10000000000000000000000000000000000025 :10BB20000000000000000000000000000000000015 :10BB30000000000000000000000000000000000005 :10BB400000000000000000000000000000000000F5 @@ -35788,7 +35788,7 @@ :10BC20000000000000000000000000000000000014 :10BC30000000000000000000000000000000000004 :10BC400000000000000000000000000000000000F4 -:10BC500000000000000000000000000000000000E4 +:10BC500000000000000000000000000001000000E3 :10BC600000000000000000000000000000000000D4 :10BC700000000000000000000000000000000000C4 :10BC800000000000000000000000000000000000B4 @@ -35796,12 +35796,12 @@ :10BCA0000000000000000000000000000000000094 :10BCB0000000000000000000000000000000000084 :10BCC0000000000000000000000000000000000074 -:10BCD00000000000000000000000000000880000DC -:10BCE000200000000000080000000000000000002C -:10BCF0000000000000000000000011000000200013 -:10BD0000080020000088080000000000000000007B +:10BCD000000000000000000000000000000008005C +:10BCE0000000080000000000080000000000000044 +:10BCF0000000000000000000000000000000000044 +:10BD00000000000000000000000000000000000033 :10BD10000000000000000000000000000000000023 -:10BD20000800080000000088080000000000000073 +:10BD20000000000000000000000000000000000013 :10BD30000000000000000000000000000000000003 :10BD400000000000000000000000000000000000F3 :10BD500000000000000000000000000000000000E3 @@ -35950,25 +35950,25 @@ :10C6400000000000000000000000000000000000EA :10C6500000000000000000000000000000000000DA :10C6600000000000000000000000000000000000CA -:10C6700000000000000000000000000082008800B0 -:10C680002000880000000000000000000000000002 -:10C6900000000000000000088800000020002000CA -:10C6A000200020000000000000000000000000004A -:10C6B00000000000000001800003000000000000F6 +:10C6700000000000000000000000000000000000BA +:10C6800000000000000000000000000000000000AA +:10C690000000000000000004000000000000000096 +:10C6A000000000000000000000000000000000008A +:10C6B0000000000000000000000100000000000079 :10C6C000000000000000000000000000000000006A -:10C6D00000000000000000000080000000000000DA +:10C6D000000000000000000000000000000000005A :10C6E000000000000000000000000000000000004A :10C6F000000000000000000000000000000000003A -:10C700000000000000000000000005000000000024 +:10C700000000000000000000000000000000000029 :10C710000000000000000000000100000000000018 :10C720000000000000000000000000000000000009 -:10C7300000000000000000001004000000000000E5 +:10C7300000000000000000000000000000000000F9 :10C7400000000000000000000000000000000000E9 -:10C7500000000000000000000000000800000000D1 +:10C7500000000000000000000000000000000000D9 :10C7600000000000000000000000000000000000C9 :10C7700000000000000000000000000000000000B9 :10C7800000000000000000000000000000000000A9 -:10C790000000000000000000000000800000000019 +:10C790000000000000000000000000000000000099 :10C7A0000000000000000000000000000000000089 :10C7B0000000000000000000000000000000000079 :10C7C0000000000000000000000000000000000069 @@ -35976,50 +35976,50 @@ :10C7E0000000000000000000000000000000000049 :10C7F0000000000000000000000000000000000039 :10C800000000000000000000000000000000000028 -:10C810000084000000000000000000000004000090 +:10C810000000000000000000000000000000000018 :10C820000000000000000000000000000000000008 :10C8300000000000000000000000000000000000F8 :10C8400000000000000000000000000000000000E8 :10C8500000000000000000000000000000000000D8 :10C8600000000000000000000000000000000000C8 :10C8700000000000000000000000000000000000B8 -:10C880000000000000000021002100000000000066 -:10C890000000000000000005001000000000000083 -:10C8A0000000000500000000000000000000000083 +:10C8800000000000000000000000000000000000A8 +:10C890000000000000000000000000000000000098 +:10C8A0000000000000000000000000000000000088 :10C8B0000000000000000000000000000000000078 :10C8C0000000000000000000000000000000000068 :10C8D0000000000000000000000000000000000058 -:10C8E0002000000000000000000000000000000028 +:10C8E0000000000000000000000000000000000048 :10C8F0000000000000000000000000000000000038 :10C900000000000000000000000000000000000027 :10C910000000000000000000000000000000000017 -:10C920000300000000000000000000000000000004 +:10C920000000000000000000000000000000000007 :10C9300000000000000000000000000000000000F7 :10C9400000000000000000000000000000000000E7 :10C9500000000000000000000000000000000000D7 -:10C960000000800000000000000000000000000047 +:10C9600000000000000000000000000000000000C7 :10C9700000000000000000000000000000000000B7 -:10C9800000000000080008008200200000000000F5 -:10C99000820082008200820082008200400000004B -:10C9A0008200040082008200820082008200200057 -:10C9B00082009000A00000008200820082008200BD -:10C9C0008200820000000800100082000000820047 -:10C9D00000008200000000000000000000000000D5 +:10C98000000000000000080000008200820000009B +:10C990000000000000000000000000000000000097 +:10C9A0000000000000000000000000000000000087 +:10C9B0000000000000000000000000000000000077 +:10C9C0000000000000000000000000000000000067 +:10C9D0000000000000000000000000000000000057 :10C9E0000000000000000000000000000000000047 :10C9F0000000000000000000000000000000000037 :10CA00000000000000000000000000000000000026 -:10CA100000000000000000000300210000000000F2 -:10CA20000000000004000000000000000000000002 -:10CA300000000000000000004000000000000000B6 +:10CA10000000000000000000000000000000000016 +:10CA20000000000000000000000000000000000006 +:10CA300000000000000000000000000000000000F6 :10CA400000000000000000000000000000000000E6 :10CA500000000000000000000000000000000000D6 :10CA600000000000000000000000000000000000C6 :10CA700000000000000000000000000000000000B6 -:10CA8000000000000000000000000000000008009E -:10CA9000820000000000000000000000000000050F -:10CAA0000000000000000000000000000041000045 +:10CA800000000000000000000000000000000000A6 +:10CA9000000000000800000000000000000000008E +:10CAA0000000000000000000000000000000000086 :10CAB0000000000000000000000000000000000076 -:10CAC00000000000000000000003820000000000E1 +:10CAC0000000000000000000000000000000000066 :10CAD0000000000000000000000000000000000056 :10CAE0000000000000000000000000000000000046 :10CAF0000000000000000000000000000000000036 @@ -36032,93 +36032,93 @@ :10CB600000000000000000000000000000000000C5 :10CB700000000000000000000000000000000000B5 :10CB800000000000000000000000000000000000A5 -:10CB90002004820408008200C000840000000021FC -:10CBA0000000000000000000000000030000000082 -:10CBB0000800080020000804000020000000000019 +:10CB9000000000000000080000000000000000008D +:10CBA0000000000000000000000000000000000085 +:10CBB0000000000000000000000000000000000075 :10CBC0000000000000000000000000000000000065 -:10CBD0000000080008000800080000000000000035 +:10CBD0000000000000000000000000000000000055 :10CBE0000000000000000000000000000000000045 :10CBF0000000000000000000000000000000000035 :10CC00000000000000000000000000000000000024 :10CC10000000000000000000000000000000000014 :10CC20000000000000000000000000000000000004 -:10CC300000000000000008000000000000000000EC +:10CC300000000000000000000000000000000000F4 :10CC400000000000000000000000000000000000E4 :10CC500000000000000000000000000000000000D4 :10CC600000000000000000000000000000000000C4 :10CC700000000000000000000000000000000000B4 :10CC800000000000000000000000000000000000A4 -:10CC900000010001000100C10001840100C0018306 -:10CCA00000000101004000040001400100C000003C -:10CCB00000010001000100C00001820100C100A1CB -:10CCC00000000101004000040001400100C000001C -:10CCD000000000010001000100C00001820100C14C -:10CCE000004100000101004000820001400100C03D +:10CC9000000084000000010000008400000001008A +:10CCA0000001010000C000000000000000000000C2 +:10CCB0000000000000000000000000000000000074 +:10CCC0000000000000000000000000000000000064 +:10CCD0000000000000000000000000000000000054 +:10CCE0000000000000000000000000000000000044 :10CCF0000000000000000000000000000000000034 :10CD00000000000000000000000000000000000023 -:10CD100000000041004100410084004100410090BA -:10CD200004C100402041000000800041804100C05B -:10CD3000000000410041004100C00041004100836B -:10CD4000404100402041000000800041804100C07F -:10CD50000000000000410041004100C000410041CE -:10CD6000008320410040204100000000004180413C -:10CD700000C00000000000000000000000000000F3 +:10CD10000000000080000000030000008000000010 +:10CD20000300000502000080000000000000000079 +:10CD300000000000000000000000000000000000F3 +:10CD400000000000000000000000000000000000E3 +:10CD500000000000000000000000000000000000D3 +:10CD600000000000000000000000000000000000C3 +:10CD700000000000000000000000000000000000B3 :10CD800000000000000000000000000000000000A3 -:10CD900000000000410003000000008041009100FD -:10CDA0000000400005000200008083004100C10037 -:10CDB00000C0800041000300000000804100A0008E -:10CDC00000000400100002000000A0004100C100AB -:10CDD00000C080000000410003000000008041000E -:10CDE000A0000000100005002000000084004100A9 -:10CDF000C10000C080000000000000000000000032 +:10CD90000000000000000300000000800000000010 +:10CDA00000000000900020000020000000000000B3 +:10CDB0000000004100000000000000000000000032 +:10CDC0000000000000000000000000000000000063 +:10CDD0000000000000000000000000000000000053 +:10CDE0000000000000000000000000000000000043 +:10CDF0000000000000000000000000000000000033 :10CE00000000000000000000000000000000000022 -:10CE100000000000000001000100000000C001004F -:10CE2000C00000000100200041200004C000830079 -:10CE3000C1000082820001000100000000C001006A -:10CE4000C10000000000210041200020C10041007D -:10CE5000C10000828200000001000100000000C04B -:10CE60000100C10000000100200082900020C100EC -:10CE70004100C100008282000000000000000000AC +:10CE100000000000000000000100000000C0000051 +:10CE2000A0000000000041004008009140004000C8 +:10CE300000000000000100000000000000000000F1 +:10CE400000000000000000000000000000000000E2 +:10CE500000000000000000000000000000000000D2 +:10CE600000000000000000000000000000000000C2 +:10CE700000000000000000000000000000000000B2 :10CE800000000000000000000000000000000000A2 -:10CE9000000000000000000000C00001C0C1000050 -:10CEA0000000000100C0C0400083000100C100007C -:10CEB000000000010000000000C00001C0C100002F -:10CEC0000000000100C0C0820083000100C100001A -:10CED0000000000100000000000000C00001C0C10F -:10CEE00000000000000100C0C0820083000100C1FA -:10CEF0000000000000010000000000000000000031 +:10CE9000000000000000000000000000C0000000D2 +:10CEA0000000000000000000000200000000000080 +:10CEB0000000000000000000000000000000000072 +:10CEC0000000000000000000000000000000000062 +:10CED0000000000000000000000000000000000052 +:10CEE0000000000000000000000000000000000042 +:10CEF0000000000000000000000000000000000032 :10CF00000000000000000000000000000000000021 -:10CF1000000000000000000000000080004180C10F -:10CF200000000000004100C180050041004100C137 -:10CF3000000000000041004000000080004180C16E -:10CF400000000000004100C180050041004100C117 -:10CF5000000000000041004000000000008000418F -:10CF600080C10000000000410083800500410041B5 -:10CF700000C100000000004100400000000000006F +:10CF10000000000000000000000000000000800091 +:10CF20000000000000000000000000800000000081 +:10CF300000000000000000000000000000000000F1 +:10CF400000000000000000000000000000000000E1 +:10CF500000000000000000000000000000000000D1 +:10CF600000000000000000000000000000000000C1 +:10CF700000000000000000000000000000000000B1 :10CF800000000000000000000000000000000000A1 -:10CF9000000000000000000000000000C100800050 -:10CFA00080C100004102800005004100C1418000B5 -:10CFB000800400004100000080004100C1008000AA -:10CFC00080C100004104000005004100C141800013 -:10CFD0008040000041000000800041000000C100CE -:10CFE000800080C100004140800005004100C14137 -:10CFF00080008040000041000000800041000000EF +:10CF90000000000000000000000000000000800011 +:10CFA00000C10000000000000000000000418000FF +:10CFB0000020000000000000000000000000000051 +:10CFC0000000000000000000000000000000000061 +:10CFD0000000000000000000000000000000000051 +:10CFE0000000000000000000000000000000000041 +:10CFF0000000000000000000000000000000000031 :10D000000000000000000000000000000000000020 -:10D010000000000000000000000000000000C1004F -:10D020004000C0C100000100080084000100C109E7 -:10D030000400C001000001000000C0000100C100A8 -:10D040004000C0C100000101840082000100C1094C -:10D050000400C001000001000000C0000100000049 -:10D06000C1004000C0C1000001002000820001009A -:10D07000C1410400C001000001000000C000010027 +:10D010000000000000000000000000000000000010 +:10D02000400000C10000000000000000000000837C +:10D0300004000001000000000000000000000000EB +:10D0400000000000000000000000000000000000E0 +:10D0500000000000000000000000000000000000D0 +:10D0600000000000000000000000000000000000C0 +:10D0700000000000000000000000000000000000B0 :10D0800000000000000000000000000000000000A0 :10D090000000000000000000000000000000000090 -:10D0A0000000000000000042000000000000000A34 -:10D0B0008112008807004800000000000000000006 -:10D0C0000000000000000042000000000000000A14 -:10D0D00081120088070048000000000000000000E6 -:10D0E00000000000000000000042000000000000FE -:10D0F000000A8112008807004800000000000000BC +:10D0A000000000000000004200000000000000003E +:10D0B000810000E000004800000000000000004285 +:10D0C0000000000000000000000000000000000060 +:10D0D0000000000000000000000000000000000050 +:10D0E0000000000000000000000000000000000040 +:10D0F0000000000000000000000000000000000030 :10D10000000000000000000000000000000000001F :10D11000000000000000000000000000000000000F :10D1200000000000000000000000000000000000FF @@ -36137,33 +36137,33 @@ :10D1F000000000000000000000000000000000002F :10D20000000000000000000000000000000000001E :10D21000000000000000000000000000000000000E -:10D22000000000000000757B00000000000000000E +:10D22000000000000000747B00000000000000000F :10D2300000000000000000000000000000000000EE -:10D2400000000000DEAE757B000000000000000062 +:10D2400000000000DE2E00000000000000000000D2 :10D2500000000000000000000000000000000000CE -:10D2600000000000DEAE0000757B00000000000042 +:10D2600000000000000000000000000000000000BE :10D2700000000000000000000000000000000000AE -:10D28000000000000000DEAE000000000000000012 +:10D28000000000000000000000000000000000009E :10D29000000000000000000000000000000000008E -:10D2A000000000000000000060C603000000000055 -:10D2B00000000031E0000000000000000C00000051 -:10D2C0000000000000C0630660C60300000000000C -:10D2D00000000031E0000000000000000C00000031 -:10D2E0000000000000C06306000060C603000000EC -:10D2F000000000000031E0000000000000000C0011 -:10D3000000000000000000C06306000000000000F4 +:10D2A0000000000000000000615603400000000084 +:10D2B00000000231E0000000000000000C4000000F +:10D2C0000000000002C06A860000000000000000AC +:10D2D000000000000000000000000000000000004E +:10D2E000000000000000000000000000000000003E +:10D2F000000000000000000000000000000000002E +:10D30000000000000000000000000000000000001D :10D31000000000000000000000000000000000000D :10D3200000000000000000000000000000000000FD -:10D3300000008800880000000000000000000000DD +:10D3300000000000000000000000000000000000ED :10D3400000000000000000000000000000000000DD -:10D350008400200020008800000000000000000081 +:10D3500000000000000000000000000000000000CD :10D3600000000000000000000000000000000000BD :10D3700000000000000000000000000000000000AD :10D38000000000000000000000000000000000009D :10D39000000000000000000000000000000000008D :10D3A000000000000000000000000000000000007D :10D3B000000000000000000000000000000000006D -:10D3C0000000000000000500000000000000000058 +:10D3C000000000000000000000000000000000005D :10D3D000000000000000000000000000000000004D :10D3E000000000000000000000000000000000003D :10D3F000000000000000000000000000000000002D @@ -36179,7 +36179,7 @@ :10D49000000000000000000000000000000000008C :10D4A000000000000000000000000000000000007C :10D4B000000000000000000000000000000000006C -:10D4C000000000100000000000000000000000004C +:10D4C000000000000000000000000000000000005C :10D4D000000000000000000000000000000000004C :10D4E000000000000000000000000000000000003C :10D4F000000000000000000000000000000000002C @@ -36194,19 +36194,19 @@ :10D58000000000000000000000000000000000009B :10D59000000000000000000000000000000000008B :10D5A000000000000000000000000000000000007B -:10D5B000000000000000000000000800030003005D -:10D5C000000000000000001000000000000000004B -:10D5D000000000000000000000000000080008003B -:10D5E0000300000000000000000000000000000038 -:10D5F000000000000000000000000000080008001B -:10D60000030008000000000000000000000000000F +:10D5B000000000000000000000000000000041002A +:10D5C000000000000000000000000000000000005B +:10D5D000000000000000000000000000000000004B +:10D5E000000000000000000000000000000000003B +:10D5F000000000000000000000000000000000002B +:10D60000000000000000000000000000000000001A :10D61000000000000000000000000000000000000A :10D6200000000000000000000000000000000000FA :10D6300000000000000000000000000000000000EA :10D6400000000000000000000000000000000000DA -:10D65000000040000000000000000000000000008A +:10D6500000000000000000000000000000000000CA :10D6600000000000000000000000000000000000BA -:10D67000400000000000000000000000000000006A +:10D6700000000000000000000000000000000000AA :10D68000000000000000000000000000000000009A :10D69000000000000000000000000000000000008A :10D6A000000000000000000000000000000000007A @@ -36218,28 +36218,28 @@ :10D700000000000000000000000000000000000019 :10D710000000000000000000000000000000000009 :10D7200000000000000000000000000000000000F9 -:10D7300000000000000000000000000000000000E9 +:10D730000000000000000000000000000000C00029 :10D7400000000000000000000000000000000000D9 :10D7500000000000000000000000000000000000C9 :10D7600000000000000000000000000000000000B9 :10D7700000000000000000000000000000000000A9 -:10D780000000000000000800000000000000000091 +:10D780000000000000000000000000000000000099 :10D790000000000000000000000000000000000089 :10D7A0000000000000000000000000000000000079 :10D7B0000000000000000000000000000000000069 -:10D7C0000000000000000000000000000000000059 -:10D7D0000000000000000000000000000000000049 +:10D7C0000000000000000000000000000000080051 +:10D7D0000000080000000000000000000000000041 :10D7E0000000000000000000000000000000000039 -:10D7F0000000210000000000000000000000000008 -:10D8000000000000000000000000210000004100B6 +:10D7F0000000000000000000000000000000000029 +:10D800000000000000000000000000000000000018 :10D810000000000000000000000000000000000008 :10D8200000000000000000000000000000000000F8 :10D8300000000000000000000000000000000000E8 :10D8400000000000000000000000000000000000D8 :10D8500000000000000000000000000000000000C8 -:10D860000000000000000000000000009000000028 +:10D8600000000000000000000000000000000000B8 :10D8700000000000000000000000000000000000A8 -:10D880000000000004000000000000000000000094 +:10D880000000000000000000000000000000000098 :10D890000000000000000000000000000000000088 :10D8A0000000000000000000000000000000000078 :10D8B0000000000000000000000000000000000068 @@ -36406,7 +36406,7 @@ :10E2C000000000000000000000000000000000004E :10E2D000000000000000000000000000000000003E :10E2E000000000000000000000000000000000002E -:10E2F0000000000000000000000088000000000096 +:10E2F000000000000000000000000000000000001E :10E30000000000000000000000000000000000000D :10E3100000000000000000000000000000000000FD :10E3200000000000000000000000000000000000ED @@ -36416,7 +36416,7 @@ :10E3600000000000000000000000000000000000AD :10E37000000000000000000000000000000000009D :10E38000000000000000000000000000000000008D -:10E39000000000000000000000000000200000005D +:10E39000000000000000000000000000000000007D :10E3A000000000000000000000000000000000006D :10E3B000000000000000000000000000000000005D :10E3C000000000000000000000000000000000004D @@ -36439,9 +36439,9 @@ :10E4D000000000000000000000000000000000003C :10E4E000000000000000000000000000000000002C :10E4F000000000000000000000000000000000001C -:10E500000000820000000000000000000000000089 +:10E500000000080000000000000000000000000003 :10E5100000000000000000000000000000000000FB -:10E5200000000800000000000000000000000000E3 +:10E5200000000000000000000000000000000000EB :10E5300000000000000000000000000000000000DB :10E5400000000000000000000000000000000000CB :10E5500000000000000000000000000000000000BB @@ -36454,7 +36454,7 @@ :10E5C000000000000000000000000000000000004B :10E5D000000000000000000000000000000000003B :10E5E000000000000000000000000000000000002B -:10E5F0000000000000000400000000000000000017 +:10E5F000000000000000000000000000000000001B :10E60000000000000000000000000000000000000A :10E6100000000000000000000000000000000000FA :10E6200000000000000000000000000000000000EA @@ -36914,7 +36914,7 @@ :10027000000000000000000000000000000000007E :10028000000000000000000000000000000000006E :10029000000000000000000000000000000000005E -:1002A000000000000000000100000001000000004C +:1002A0000000000000000001000000010048000004 :1002B000000000000000000000000000000000003E :1002C000000000000000000000000000000000002E :1002D000000000000000000000000000000000001E @@ -36922,7 +36922,7 @@ :1002F00000000000000000000000000000000000FE :1003000000000000000000000000000000000000ED :1003100000000000000000000000000000000000DD -:10032000000000000000000000900000000000003D +:10032000000000000000000020800000000000002D :1003300000000000000000000000000000000000BD :1003400000000000000000000000000000000000AD :10035000000000000000000000000000000000009D @@ -36930,7 +36930,7 @@ :10037000000000000000000000000000000000007D :10038000000000000000000000000000000000006D :10039000000000000000000000000000000000005D -:1003A000000000000000000000000100000001004B +:1003A000000000000000000000000000000000004D :1003B000000000000000000000000000000000003D :1003C000000000000000000000000000000000002D :1003D000000000000000000000000000000000001D @@ -36939,18 +36939,18 @@ :1004000000000000000000000000000000000000EC :1004100000000000000000000000000000000000DC :1004200000000000000000000000000000000000CC -:1004300000000000000000000000000000000000BC -:1004400000000000000000000000000000000000AC +:1004300000000000000000000800000000000000B4 +:1004400000000002000000000000000000000000AA :10045000000000000000000000000000000000009C -:1004600000000000000000000000000020008800E4 -:1004700020000000880088002000000020002000EC -:1004800000002000000020002000200020002000AC -:10049000200000002000200020000000200020009C -:1004A00000002000000020002000200000002000AC -:1004B000200020000000000020002000000020009C -:1004C000200000002000000020002000200020006C -:1004D000200020000000000020000000000020009C -:1004E00020008800200000002000200020000000E4 +:10046000000000000000000000000000000000008C +:1004700000002000880000002000C00020000000D4 +:1004800020002000200020002000200000000000AC +:1004900088002000880000002000200020000000CC +:1004A0002000200088002000200020000000000024 +:1004B0000000200020008800000020000400200030 +:1004C0000000200020008800200020002000000004 +:1004D000000020002000200000002000200020005C +:1004E00000008800200020002000200020000000E4 :1004F00000000000000000000000000000000000FC :1005000000000000000000000000000000000000EB :1005100000000000000000000000000000000000DB @@ -36959,7 +36959,7 @@ :1005400000000000000000000000000000000000AB :10055000000000000000000000000000000000009B :10056000000000000000000000000000000000008B -:100570000000000000000000000000000000400833 +:100570000000000000000000000000000000100269 :10058000000000000000000000000000000000006B :100590000000000000004008000000000000000013 :1005A0000000000000001002000000000000000039 @@ -36967,19 +36967,19 @@ :1005C0000000000000000000100200000000000019 :1005D000000000000000000000000000000000001B :1005E000000000000000000000000000000000000B -:1005F00010020000000000000000000000000000E9 -:100600008001000000000000000000000000000069 -:100610000008000000000000800100000000000051 +:1005F000100200000000000800840000000000005D +:100600008001000000000000000000000000004029 +:1006100000080000000000828001000000000000CF :100620000000000000000000800100000000000049 -:100630000008000041000000000000000000000071 +:1006300000080000000000000000000000000000B2 :100640000000000000000000000080010000000029 -:100650000000000800000000000000000000090089 +:100650000000000800000000000000000000000092 :10066000000000000000000000000000000000008A :1006700000008009000000000000000000000000F1 -:10068000000000000000000000000000000000006A +:100680000000000000000000000000110000000059 :10069000000000000000000000000000000000005A :1006A000000000000000000000000000000000004A -:1006B0000000000000020000000000000000000038 +:1006B000000000000000000000000000000000003A :1006C000000000000000000000000000000000002A :1006D000000000000000000000000000000000001A :1006E000000000000000000000000000000000000A @@ -36990,16 +36990,16 @@ :1007300000000000000000000000000000000000B9 :1007400000000000000000000000000000000000A9 :100750000000000000000000000000000000000099 -:100760000000000000000000000000000000000089 +:100760000000000000000000000000000000002069 :100770000000000000000000000000000000000079 -:100780000000080000000000000000000000100051 -:100790000000820000000000000000000000820055 -:1007A0000000820000000000000000000000820045 -:1007B00000008200000000000000000000000000B7 -:1007C00000000000820000000000A0000000000007 -:1007D0000000000082000000000084000000A00073 -:1007E000000000000000000000000000C000000049 -:1007F00000000000000000000000000000000000F9 +:1007800008000000000000000000000084000000DD +:1007900082000000000000000000000000000000D7 +:1007A0000800000000000000000000000000000041 +:1007B0000800000000000000000000000000000031 +:1007C0000000080000000000000000000000C00061 +:1007D000000008000000000000000000000082008F +:1007E0000000000000000000000000000000080001 +:1007F0008400000000000000000000000000000075 :1008000000000000000000000000000000000000E8 :1008100000000000000000000000000000000000D8 :1008200000000000000000000000000000000000C8 @@ -37008,13 +37008,13 @@ :100850000000000000000000000000000000000098 :100860000000000000000000000000000000000088 :100870000000000000000000000000000000000078 -:100880000000000000000000000000000000000068 +:100880000004000000000000000000000000000064 :100890000000000000000000000000000000000058 :1008A0000000000000000000000000000000000048 :1008B0000000000000000000000000000000000038 -:1008C0000000000000000000000000000000000028 -:1008D0000000000000000000000000000000820096 -:1008E0000000000000000000000008000000000000 +:1008C0000000000000000000000000000800000020 +:1008D0000000000000000000000000000000000018 +:1008E00000000000000000000000002000000000E8 :1008F00000000000000000000000000000000000F8 :1009000000000000000000000000000000000000E7 :1009100000000000000000000000000000000000D7 @@ -37027,10 +37027,10 @@ :100980000000000000000000000000000000000067 :100990000000000000000000000000000000000057 :1009A0000000000000000000000000000000000047 -:1009B0000000000000000000000000000000000037 -:1009C000000000000000000000000800000000001F -:1009D0000000000000000000000000000000100007 -:1009E00000001000000000000000000000000000F7 +:1009B00000000000000000008200000000000000B5 +:1009C0000000000000000000000000000000000027 +:1009D0000000000000000000000000000000000017 +:1009E0000000000000000000000000000000000007 :1009F00000000000000000000000000000000000F7 :100A000000000000000000000000000000000000E6 :100A100000000000000000000000000000000000D6 @@ -37044,7 +37044,7 @@ :100A90000000000000000000000000000000000056 :100AA0000000000000000000000000000000000046 :100AB0000000000000000000000000000000000036 -:100AC0000000000000000000000000000000000026 +:100AC0000000000000000000900000000000000096 :100AD0000000000000000000000000000000000016 :100AE0000000000000000000000000000000000006 :100AF00000000000000000000000000000000000F6 @@ -37052,26 +37052,26 @@ :100B100000000000000000000000000000000000D5 :100B200000000000000000000000000000000000C5 :100B300000000000000000000000000000000000B5 -:100B40000000000000000000200000000000000085 +:100B400000000000000000020000000000000000A3 :100B50000000000000000000000000000000000095 :100B60000000000000000000000000000000000085 -:100B70002000000000000000000000000000000055 +:100B70004000000000000000000000000000000035 :100B80000000000000000000000000000000000065 :100B90000000000000000000000000000000000055 :100BA0000000000000000000000000000000000045 :100BB0000000000000000000000000000000000035 :100BC0000000000000000000000000000000000025 -:100BD00000400000000000000000000000000000D5 +:100BD0000003000000000000000000000000000012 :100BE0000000000000000000000000000000000005 -:100BF0000000000080000000000300000000000072 +:100BF00000008000800000000008000000000000ED :100C000000000000000000000000000000000000E4 :100C100000000000000000000000000000000000D4 :100C200000000000000000000000000000000000C4 :100C300000000000000000000000000000000000B4 -:100C40000000000000000000000000000000900014 -:100C50000000000000000000000000000000000094 +:100C40000000000000000000000000000000100094 +:100C50000000000100000000000000000000000093 :100C60000000000000000000000000000000000084 -:100C700000000000840020000000000000000000D0 +:100C700000000000100082000000002100000000C1 :100C80000000000000000000000000000000000064 :100C90000000000000000000000000000000000054 :100CA0000000000000000000000000000000000044 @@ -37093,15 +37093,15 @@ :100DA0000000000000000000000000000000000043 :100DB0000000000000000000000000000000000033 :100DC0000000000000000000000000000000000023 -:100DD0000002000000000000100000000000000001 +:100DD00000020005000000001000000000000000FC :100DE0000000000000000000000000000000000003 -:100DF00000000000000000000000000500000000EE -:100E000040000000000000000000000000000000A2 +:100DF00000000000000000000000000000000000F3 +:100E000004000000000000000000000000000000DE :100E100000000000000000000000000000000000D2 :100E200000000000000000000000000000000000C2 :100E300000000000000000000000000000000000B2 :100E400000000000000000000000000000000000A2 -:100E50000000000000000000000001000000000091 +:100E50000000000000000000000000000000000092 :100E60000000000000000000000000000000000082 :100E70000000000000000000000000000000000072 :100E80000000000000000000000000000000000062 @@ -37109,10 +37109,10 @@ :100EA0000000000000000000000000000000000042 :100EB0000000000000000000000000000000000032 :100EC0000000000000000000000000000000000022 -:100ED000000000000000884100900900C8430000A5 +:100ED000000000000000818100500A00900900001D :100EE0000000000000000000000000000000000002 -:100EF00000000000000000000000000000008181F0 -:100F000000900900C843000000000000000000003D +:100EF0000000000000000000000000000000884129 +:100F000000500A00900900000000000000000000EE :100F100000000000000000000000000000000000D1 :100F200000000000000000000000000000000000C1 :100F300000000000000000000000000000000000B1 @@ -37133,18 +37133,18 @@ :10102000000002000000000000400000000000007E :1010300000000000000000000000020000000000AE :10104000004000000000000000000200000000005E -:101050000040000000000000000000000040030805 -:1010600010C00200000000000000000002000000AC +:1010500000400000000000000000000000400320ED +:1010600004C00200000000000000000002000000B8 :101070000000004000000000000000000000000030 -:10108000000000000040030810C002000000000043 +:10108000000000000040032004C002000000000037 :10109000000000000200000000000040000000000E :1010A0000000000000000000000000000000000040 :1010B0000000000000000000000000000000000030 :1010C0000000000000000000000000000000000020 :1010D0000000000000000000000000000000080206 -:1010E0000008100040100000000000000000000098 +:1010E000002004004010000000000000000000008C :1010F00000000000000000000000000000000000F0 -:10110000000000000000080200081000401000006D +:101100000000000000000802002004004010000061 :1011100000000000000000000000000000000000CF :1011200000000000000000000000000000000000BF :1011300000000000000000000000000000000000AF @@ -37186,19 +37186,19 @@ :101370000000000000000000000000090000000064 :10138000000000000000000000000000000000005D :10139000000000909A000000000000000000000023 -:1013A00000000009000000002000000020002000D4 -:1013B000200000002000200020002000200020004D -:1013C000200000002000200000000000200020007D -:1013D00020000000200020008800200020002000C5 -:1013E0008800000020008800000088000000200025 -:1013F000200020000000200020000000200020002D -:10140000200020000000200020000000000020003C -:10141000200000000000200020000000200020002C -:10142000200020000000200000000000000000005C +:1013A0000000000900000000000000000000000034 +:1013B000000000004000200040000000000000008D +:1013C00000000000000020000000000000000000FD +:1013D00000000000200020002000000000000000AD +:1013E0000000000000008800000000000000000075 +:1013F000000000000000200020002000000000008D +:1014000000000000000000000000000000000000DC +:10141000000000000000200000002000000000008C +:1014200000000000000000000000000000000000BC :1014300000000000000000000000000000000000AC :10144000000000000000000000000000000000009C :10145000000000000000000000000000000000008C -:10146000000000000000000000000000000000007C +:10146000000000000000000020000000000000005C :10147000000000000000000000000000000000006C :10148000000000000000000000000000000000005C :10149000000000000000000000000000000000004C @@ -37211,10 +37211,10 @@ :1015000000000000000000000000000000000000DB :1015100000000000000000000000000000000000CB :1015200000000000000000000000000000000000BB -:10153000000040000000000000000000000000006B -:10154000000000000000000000000000000000009B +:1015300000000000000000000000000400040000A3 +:10154000000000000000000000000008000400008F :10155000000000000000000000000000000000008B -:10156000000000000000000000000000000000007B +:101560000000000000000000000000040000000077 :10157000000000000000000000000000000000006B :10158000000000000000000000000000000000005B :10159000000000000000000000000000000000004B @@ -37223,23 +37223,23 @@ :1015C000000000000000000000000000000000001B :1015D000000000000000000000000000000000000B :1015E00000000000000000000000000000000000FB -:1015F00000000000000000000000000000000000EB +:1015F000000000000000000000000080000000006B :1016000000000000000000000000000000000000DA -:1016100000000000000000000000080000000000C2 +:1016100000000000000000000000000000000000CA :1016200000000000000000000000000000000000BA -:1016300000000000000000000000000000000000AA +:101630000000000000000000210000000000080081 :10164000000000000000000000000000000000009A -:10165000000000000000000000000000000000008A -:101660000000000000000000000008000000000072 -:10167000000000000000000000000000000000006A -:101680000000000000000000000000002100000039 -:101690000000000008000000000000000000000042 -:1016A000000000000000000000000000000000003A -:1016B00000000800000000000000000082000000A0 -:1016C0000000820000000000000000008200000016 -:1016D00000008200080000000000000082000000FE -:1016E000000082000803000000000000000000006D -:1016F00000000800000000000000000000000000E2 +:10165000000000000000000000000000000000404A +:10166000000000000000000000000000000000007A +:10167000000000000000000000000000004000002A +:10168000000000200000000000000000000000003A +:101690000000000000000000000021000000000029 +:1016A0000000080000000000000000000000000032 +:1016B000000000000000000000000000000000002A +:1016C000000000000000000000000000000000001A +:1016D000000000000000000000000000000000000A +:1016E00000001000000000000000000000000000EA +:1016F00000000000000000000000000000000000EA :1017000000000000000000000000000000000000D9 :1017100000000000000000000000000000000000C9 :1017200000000000000000000000000000000000B9 @@ -37255,25 +37255,25 @@ :1017C0000000000000000000000000000000000019 :1017D0000000000000000000000000000000000009 :1017E00000000000000000000000000000000000F9 -:1017F00000000000000000400000010000000000A8 +:1017F00000000000000000000000000000000000E9 :1018000000000000000000000000000000000000D8 :1018100000000000000000000000000000000000C8 :1018200000000000000000000000000000000000B8 :1018300000000000000000000000000000000000A8 :101840000000000000000000000000000000000098 -:101850000000000000000000000000000000000088 +:101850000000000000000000020000000000000086 :101860000000000000000000000000000000000078 -:101870000000000000000000000000000200000066 -:101880000000000000000000000003000000000055 +:101870000000000000000000000000001000000058 +:101880000000000000000000000000000000000058 :101890000000000000000000000000000000000048 -:1018A0000000000000000000000000000000000038 +:1018A0000000000000000000000000040000000034 :1018B0000000000000000000000000000000000028 :1018C0000000000000000000000000000000000018 :1018D0000000000000000000000000000000000008 :1018E00000000000000000000000000000000000F8 :1018F00000000000000000000000000000000000E8 -:1019000000000000000000000000000000000800CF -:1019100000000000000000000000000000000000C7 +:1019000000000000000000000000000000000000D7 +:1019100000000000000000000000000008000000BF :1019200000000000000000000000000000000000B7 :1019300000000000000000000000000000000000A7 :101940000000000000000000000000000000000097 @@ -37394,7 +37394,7 @@ :102070000000000000000000000000000000000060 :102080000000000000000000000000000000000050 :102090000000000000000000000000000000000040 -:1020A0000010000000000000000000000000000020 +:1020A0000000000000000000001000000000000020 :1020B0000000000000000000000000000000000020 :1020C0000000000000000000000000000000000010 :1020D0000000000000000000000000000000000000 @@ -37431,43 +37431,43 @@ :1022C000000000000000000000000000000000000E :1022D00000000000000000000000000000000000FE :1022E00000000000000000000000000000000000EE -:1022F000200020000000000000000000200000007E -:1023000000002000000000000000000000000000AD -:10231000200020000000000000000000200000005D -:10232000000020000000000000000000000000008D -:1023300090002000200000000000000000000000CD +:1022F00000000000000000000000000000000000DE +:1023000000000000000000000000000000000000CD +:1023100000000000000000000000000000000000BD +:1023200000000000000000000000000000000000AD +:10233000000000000000000000000000000000009D :10234000000000000000000000000000000000008D -:10235000000020002000000000000000000000003D -:102360000000C0000000000000000000200000008D +:10235000000000000000000000000000000000007D +:10236000000000000000000000000000000000006D :10237000000000000000000000000000000000005D :10238000000000000000000000000000000000004D :10239000000000000000000000000000000000003D :1023A000000000000000000000000000000000002D -:1023B00000000000400000000400000000000000D9 +:1023B000000000000000000000000000000000001D :1023C000000000000000000000000000000000000D :1023D00000000000000000000000000000000000FD -:1023E00000000400000000000000000000000000E9 +:1023E00000000000000000000000000000000000ED :1023F00000000000000000000000000000000010CD :1024000000000000000000000000000000000010BC :1024100000000000000000000000000000000000BC :1024200000000000000000000000000000000000AC :10243000001000000000000000000000000000008C :10244000000000000000000000000000000000008C -:10245000000000000000000000100000000000006C +:10245000000000000000000000000000000000007C :10246000000000000000000000000000000000006C :10247000000000000000000000000000000000005C :10248000000000000000000000000000000000004C -:102490000082008200000000000000000000000038 +:10249000000000000000000000000000000000003C :1024A000000000000000000000000000000000002C :1024B000000000000000000000000000000000001C :1024C000000000000000000000000000000000000C :1024D00000000000000000000000000000000000FC :1024E00000000000000000000000000000000000EC -:1024F00000020008000800000000000000000000CA +:1024F0000000840000000000000000000000000058 :1025000000000000000000000000000000000000CB :1025100000000000000000000000000000000000BB :1025200000000000000000000000000000000000AB -:102530000000000900000002000000000000000090 +:10253000000000000000000000000000000000009B :10254000000000000000000000000000000000008B :10255000000000000000000000000000000000007B :10256000000000000000000000000000000000006B @@ -37485,16 +37485,16 @@ :1026200000000000000000000000000000000000AA :10263000000000000000000000000000000000009A :10264000000000000000000000000000000000008A -:102650000800000000000000000000000000000072 +:10265000000000000000000000000000000000007A :10266000000000000000000000000000000000006A -:10267000000000000000000000000000000000005A -:10268000000000000000000000000000000000004A +:1026700000001000400003004100050000000000C1 +:102680000000000000000000210000000000000029 :10269000000000000000000000000000000000003A -:1026A0000000000000000000000000A0000000008A +:1026A000000000000000000000000000000000002A :1026B000000000000000000000000000000000001A -:1026C00005000000050000000000000008000000F8 -:1026D00000000000000000000000000000000800F2 -:1026E00000000300000000000000000000000000E7 +:1026C000000000000000000000000000000000000A +:1026D00000000000000000000000000000000000FA +:1026E00000000010000000000000000000000000DA :1026F00000000000000000000000000000000000DA :1027000000000000000000000000000000000000C9 :1027100000000000000000000000000000000000B9 @@ -37512,17 +37512,17 @@ :1027D00000000000000000000000000000000000F9 :1027E00000000000000000000000000000000000E9 :1027F00000000000000000000000000000000000D9 -:1028000000000000000000000000000000000000C8 +:102800000000000000008200000000000000000046 :1028100000000000000000000000000000000000B8 :1028200000000000000000000000000000000000A8 :102830000000000000000000000000000000000098 :102840000000000000000000000000000000000088 :102850000000000000000000000000000000000078 :102860000000000000000000000000000000000068 -:102870000000000000000000000000000000000058 +:102870000000000000000000000000001000000048 :102880000000000000000000000000000000000048 -:102890000000000000000000000000000000000038 -:1028A000000000000000000000000000000000A088 +:102890000800000000000000000000000000000030 +:1028A0000000000000000000000000000000000028 :1028B0000000000000000000000000000000000018 :1028C0000000000000000000000000000000000008 :1028D00000000000000000000000000000000000F8 @@ -37682,97 +37682,97 @@ :10327000000000000000000000000000000000004E :10328000000000000000000000000000000000003E :10329000000000000000000000000000000000002E -:1032A00000000000000000000000400000000000DE -:1032B00020000000000020000000000000000000CE -:1032C00000000000000000000000200000000000DE -:1032D00000000000000020000000000000000000CE -:1032E000000000030000000000000000900000004B -:1032F000C0000004100000002000000000001000CA -:1033000000008800880000000000C00000000000ED -:103310000000C000A00000002000A00088002000E5 -:10332000A0002000000000000000000000000000DD +:1032A000000000000000000000000000000000021C +:1032B000000200000000000000000000000000828A +:1032C00001200000000000000000000000000002DB +:1032D00000020000000000000000000000000002EA +:1032E00000000001000000000000000000000000DD +:1032F00000020000000000000000000000000000CC +:1033000000000000000000000000000000000000BD +:1033100000000000000000000000000000000000AD +:10332000000000001000000000000000000000008D :10333000000000000000000000000000000000008D -:10334000000000000000000000000000000000007D -:10335000000000000000000000000000000000006D +:103340000020080100000000000000000000000054 +:10335000000000004000000000000000000000002D :10336000000000000000000000000000000000005D :10337000000000000000000000000000000000004D :10338000000000000000000000000000000000003D -:10339000000000000000000000000000000000002D +:10339000000000000000000000000000000010001D :1033A000000000000000000000000000000000001D :1033B000000000000000000000000000000000000D -:1033C00000000000000800000000000000000000F5 -:1033D00000000000000000080000000000000000E5 -:1033E00000000000000800000000000000000000D5 +:1033C0000000008820020000000000000000000053 +:1033D00000000000000000000000000000000000ED +:1033E00000000000000000000000000000000000DD :1033F00000000000000000000000000000000000CD -:103400000000000000002104000000000000000097 -:1034100000000000000000030000000000000000A9 -:10342000000000000000100000000000000000008C -:10343000000000000000000000000008000000087C -:1034400000840000008400840084008400840084E0 -:1034500000080000008400000000008400000082DA -:103460000000000000900083000000000008000041 -:1034700000020008000000000004009000000008A6 -:103480000008000000080000908400000084000094 -:103490000000008400000000008400000000009094 -:1034A00000080008009000008000002100080000D3 -:1034B000000800080000002100000040000000009B -:1034C00000000000000000080000000000000000F4 -:1034D00000000003000000020021000900050008B0 -:1034E000002100210000002100080000002100034D -:1034F0000021000500080000002100000004000079 -:103500000008000000080000002100400000002129 -:103510000021000000210000002100040000001133 -:103520000004000000400000002100030000000033 -:103530000000000000000000000800000000000083 +:1034000000000000000000000000000000000000BC +:1034100000000000000000000000000000000000AC +:10342000000000000000000000000000000000009C +:10343000000000000000000000000000000000008C +:1034400000000000000580010000000000000000F6 +:10345000000000000000000000000000000000006C +:10346000000000000000000000000000000000005C +:10347000000000000000000000000000000000004C +:10348000000000000000000000000000000000003C +:10349000000000000000000000000000000000002C +:1034A000000000000000000000000000000000001C +:1034B000000000000000000000000000000000000C +:1034C00000000000000000000000000000000000FC +:1034D00000000000000000000000000000000000EC +:1034E00000000000000000000000000000000000DC +:1034F00000000000000000000000000000000000CC +:1035000000000000000000000000000000000000BB +:1035100000000000000000000000000004000000A7 +:103520000000000000000000000000000900000092 +:10353000000000000000000000000000000000008B :10354000000000000000000000000000000000007B -:1035500000000000000000000000000800840000DF +:10355000000000000000000000000000000000006B :10356000000000000000000000000000000000005B -:1035700000000300000004000000000000000088BC +:10357000000000000000000000000000000000004B :10358000000000000000000000000000000000003B :10359000000000000000000000000000000000002B -:1035A00000004000000000000200000000000000D9 -:1035B000000000000000000000000000000000000B -:1035C00000000400000000000000000008000000EF -:1035D00000008200000000000000000000008400E5 -:1035E00000008200000000000000000000800000D9 -:1035F00082000000C0000000000000000000840005 -:10360000840000000000000040000000A0008200D4 -:103610008200000000000000820000008200000024 -:103620000800C000000000000000A00082000004AC +:1035A0000000000000000000000000000000840097 +:1035B00084000000C000000000000000A000C00067 +:1035C000000000000000000000000000008000007B +:1035D00000000000000000000000000000000000EB +:1035E00000000000000000000000000000000000DB +:1035F00000000000000000000000000000000000CB +:1036000000000000000000000000000000000000BA +:103610000000000000000041000000000000000069 +:10362000000000000000000000000000000000009A :10363000000000000000000000000000000000008A -:10364000000000000000000000000000000000007A -:10365000000000080000000800000000000000005A -:1036600000C0000000000000000000000000000496 -:103670000000000000080000000000000000000042 +:103640000000000000000000000000000000000872 +:10365000000000000000000000000000000000006A +:10366000000000000000000000000000000000005A +:10367000000000000000000000000000000000004A :10368000000000000000000000000000000000003A :10369000000000000000000000000000000000002A -:1036A00000002100000021000000000000000000D8 -:1036B0000001000000000000000000000000000009 -:1036C00000000000000000000000000000000000FA -:1036D0000000020000000000000000009000000058 -:1036E00000000000000500000008000000000000CD -:1036F00040020003000000000000000288210000DA -:10370000000000000005400582000008C000000025 -:1037100000000000020000000000C000A000020045 -:10372000C0000000000000000000000800080004C5 +:1036A000000000000000000000000000000000001A +:1036B000000000000000A00000000000C0000000AA +:1036C00008000000000000000000000000000000F2 +:1036D00000000000000000000000000000000000EA +:1036E00000000000000000000000000000000000DA +:1036F00000000000000000000000000000000000CA +:1037000000000000000000000000000000000000B9 +:1037100000000000000000000000000000000000A9 +:103720000000000000000000000000000000000099 :103730000000000000000000000000000000000089 :103740000000000000000000000000000000000079 :103750000000000000000000000000000000000069 :103760000000000000000000000000000000000059 -:103770000000000000000000000000000020000029 +:103770000000000000000000000000000000000049 :103780000000000000000000000000000000000039 :103790000000000000000000000000000000000029 :1037A0000000000000000000000000000000000019 -:1037B00000000000000000080000000800000000F9 -:1037C00000000000000000000000000000000000F9 -:1037D00000000000000000000000000000000800E1 -:1037E00000000000080000000021000000000003AD -:1037F00000080000000000000000000000000000C1 -:10380000080000008400000800000000820000059D -:10381000002100080000002140000000000084009A -:103820000800000008000021000040030003000021 +:1037B000000000000000C000000040000800000001 +:1037C00082000800000000000000000082000000ED +:1037D00000000000000000000000000000000000E9 +:1037E00000000000000000000000000000000000D9 +:1037F00000000000000000000000000000000000C9 +:1038000000000000000000000000000000000000B8 +:1038100000000000000000000000000000000000A8 +:103820000000000000000000000000000000000098 :103830000000000000000000000000000000000088 -:103840000000000000000300000000000000000075 +:103840000000000000000000000000000000000078 :103850000000000000000000000000000000000068 :103860000000000000000000000000000000000058 :103870000000000000000000000000000000000048 @@ -37780,79 +37780,79 @@ :103890000000000000000000000000000000000028 :1038A0000000000000000000000000000000000018 :1038B0000000000000000000000000000000000008 -:1038C00000000000000000000000000000000000F8 -:1038D00000000000000000000000000100010001E5 -:1038E00000C00001100100C1000301008901004077 -:1038F00000040001000100C10000000000010001FF -:10390000000100C00001100100C10003000001011E -:10391000008200020001020100C00000000100015D -:10392000000100C00001100100C1000300010101FD -:10393000000800820001400100C0000000000000FB -:103940000000000000000000000000000000000077 -:1039500000000000000000000000000000410041E5 -:103960000041008200418041008340C108051041B0 -:10397000000000800041004100850000000000417F -:103980000041004100890041804100830841000559 -:10399000104100000080004180410085000000418E -:1039A00000410041008900418041008308C120108E -:1039B0001041000000000041804100C000000000F4 -:1039C00000000000000000000000000000000000F7 -:1039D00000000000000000000000000000004100A6 -:1039E000030000000080410089000000080004007E -:1039F0000200008083004100C10000800000000040 -:103A00004100030000000080410082000000080027 -:103A1000100008000080A0004100C100008080006C -:103A20004100030000000080410089000000050003 -:103A300090000380008083004100C10000C080002E -:103A40000000000000000000000000000000000076 -:103A50000000000000000000000000000000000066 -:103A600001000100000000C00100C00000000100D2 -:103A7000210004100040C100C100C10000840808FA -:103A8000000001000100000000C00100C0000000B3 -:103A90000100400088100004C0008300C1000082C3 -:103AA000820001000100000000C00100C000000011 -:103AB0000000020082200004C0004100C10000821A -:103AC0008200000000000000000000000000000074 -:103AD00000000000000000000000000000000000E6 -:103AE000000000C00001C0C100000000000100C0D3 -:103AF00002020011000100C10000000000010000EE -:103B00000000000000C00001C0C100000000000172 -:103B100000C008900021000108C100000000000161 -:103B20000000000000C00001C0C100000000000152 -:103B300000C008900041000100C100000000000129 +:1038C000000000002000000000900000C0000090F8 +:1038D000C0820000C00000010000000000000000E5 +:1038E00000000000000000000000000000000000D8 +:1038F00000000000000000000000000000000000C8 +:1039000000000000000000000000000000000000B7 +:1039100000000000000000000000000000000000A7 +:103920000000000000000000000000000000000097 +:103930000000000000000000000000000000000087 +:103940000000004005000000004108000008C10020 +:1039500000008080000080000003000000000000E4 +:103960000000000000000000000000000000000057 +:103970000000000000000000000000000000000047 +:103980000000000000000000000000000000000037 +:103990000000000000000000000000000000000027 +:1039A0000000000000000000000000000000000017 +:1039B0000000000000000000000000000000000007 +:1039C00002000000000000000200000003001000E0 +:1039D000050000050300000000000080804000009A +:1039E00000000000000000000000000000000000D7 +:1039F00000000000000000000000000000000000C7 +:103A000000000000000000000000000000000000B6 +:103A100000000000000000000000000000000000A6 +:103A20000000000000000000000000000000000096 +:103A30000000000000000000000000000000000086 +:103A40000000010000000000000001000000010073 +:103A500041002008000001009000000000C082002A +:103A60000000000000000000000000000000000056 +:103A70000000000000000000000000000000000046 +:103A80000000000000000000000000000000000036 +:103A90000000000000000000000000000000000026 +:103AA0000000000000000000000000000000000016 +:103AB0000000000000000000000000000000000006 +:103AC00000000000000000000000000000000000F6 +:103AD0004001008200000100000000000000000022 +:103AE00000000000000000000000000000000000D6 +:103AF00000000000000000000000000000000000C6 +:103B000000000000000000000000000000000000B5 +:103B100000000000000000000000000000000000A5 +:103B20000000000000000000000000000000000095 +:103B30000000000000000000000000000000000085 :103B40000000000000000000000000000000000075 -:103B50000000000000000000000000000000000065 -:103B6000000000000080004180C100000000004112 -:103B70000082009000C1004100C10000000000412F -:103B80000008000000000080004180C1000000002B -:103B90000041008280200041004100C1000000007F -:103BA0000041000500000080004180C100000000CD -:103BB0000041008200400041004100C100000000BF -:103BC0000041004000000000000000000000000074 -:103BD00000000000000000000000000000000000E5 -:103BE000000000000000C100800080C10000410210 -:103BF000800090004100C1C100008002000041002F -:103C00000000800041000000C100800080C1000071 -:103C10004100800090004100C1C10000800200000E -:103C20004100000080004100C100800080C1000010 -:103C300041028000A0004100C1C1000080080000D6 -:103C40004100000080004100000000000000000072 -:103C50000000000000000000000000000000000064 -:103C60000000000000000000C1004000C0C10000D2 -:103C70000100200010000100C1091000C000000078 -:103C800001000000C00001000000C1004000C0C1F0 -:103C900000000100100010000100C1410200C0003E -:103CA000000001000000C0000100C1004000C0C1D0 -:103CB00000000100200008000100C1059000C000C4 -:103CC000000001000000C000010000000000000032 -:103CD00000000000000000000000000000000000E4 -:103CE00000000000000000000000000000000000D4 -:103CF0000042000000000000000081120088070060 -:103D0000480000000000000000000000000000006B -:103D10000000004200000000000000008112008846 -:103D20000700480000000000000000000000000044 -:103D30000000004200000000000000008112008826 -:103D40000700480000000000000000000000000024 +:103B500000410002000000004100000000000000E1 +:103B60000041000000000000000000000000000014 +:103B70000000000000000000000000000000000045 +:103B80000000000000000000000000000000000035 +:103B90000000000000000000000000000000000025 +:103BA0000000000000000000000000000000000015 +:103BB0000000000000000000000000000000000005 +:103BC000000000000000000000020083000000026E +:103BD00000000500000000418000002000000041BE +:103BE00000000000050200000000000000000000CE +:103BF00000000000000000000000000000000000C5 +:103C000000000000000000000000000000000000B4 +:103C100000000000000000000000000000000000A4 +:103C20000000000000000000000000000000000094 +:103C30000000000000000000000000000000000084 +:103C4000000000000000000000008201008300006E +:103C5000000120008200000000410200000000007E +:103C60000001000000000041000000000000000012 +:103C70000000000000000000000000000000000044 +:103C80000000000000000000000000000000000034 +:103C90000000000000000000000000000000000024 +:103CA0000000000000000000000000000000000014 +:103CB0000000000000000000000000000000000004 +:103CC00000000000000000000000000000000000F4 +:103CD00000000000000000000000811200E08000F1 +:103CE00048420000000000004842000000000000C0 +:103CF00000000000000000000000000000000000C4 +:103D000000000000000000000000000000000000B3 +:103D100000000000000000000000000000000000A3 +:103D20000000000000000000000000000000000093 +:103D30000000000000000000000000000000000083 +:103D40000000000000000000000000000000000073 :103D50000000000000000000000000000000000063 :103D60000000000000000000000000000000000053 :103D70000000000000000000000000000000000043 @@ -37869,110 +37869,110 @@ :103E20000000000000000000000000000000000092 :103E30000000000000000000000000000000000082 :103E40000000000000000000000000000000000072 -:103E50000000000000000000000000000000000062 -:103E60000000000000000000000000000000000052 -:103E7000757B000000000000000000000000000052 -:103E80000000000000000000000000000000DEAEA6 -:103E90000000757B00000000000000000000000032 +:103E5000757B000000000000000000000000000072 +:103E60000000000000000000000000000000DEAEC6 +:103E70000000000000000000000000000000000042 +:103E80000000000000000000000000000000000032 +:103E90000000000000000000000000000000000022 :103EA0000000000000000000000000000000000012 -:103EB000DEAE757B00000000000000000000000086 +:103EB0000000000000000000000000000000000002 :103EC00000000000000000000000000000000000F2 -:103ED000DEAE000000000000000000000000000056 -:103EE00000000000000000000000000000000000D2 -:103EF000000060C603000000000000000031E00088 -:103F00000000000000000C0000000000000000C0E5 -:103F10006306000060C603000000000000000031DE -:103F2000E0000000000000000C00000000000000A5 -:103F300000C0630660C603000000000000000031FE -:103F4000E0000000000000000C0000000000000085 -:103F500000C0630688002000000020002000000050 -:103F60000000200020000000000000000000000011 -:103F700000002000200020000000200000000000C1 -:103F800000002000200000000000000000000000F1 -:103F900000002000000020002000000020000000A1 -:103FA0000000A00000004000000000000000000031 -:103FB0000000000020002000200000002000A000E1 -:103FC000000020000000200090000000000084009D -:103FD000000084002000000000000000000000003D +:103ED0000000612603400000000000000230A00046 +:103EE0000000000000000C4000000000000002C0C4 +:103EF00064860000000000000000000000000000D8 +:103F000000000000000000000000000000000000B1 +:103F100000000000000000000000000000000000A1 +:103F20000000000000000000000000000000000091 +:103F30000000000000000000000000000000000081 +:103F40000000000000000000000000000000000071 +:103F50000000000000000000000000000000000061 +:103F60000000000000000000000000002000000031 +:103F70000000200000000000000000000000000021 +:103F80000000000000000000000000002000000011 +:103F90000000200000000000000000000000000001 +:103FA00000000000000000000000000000002000F1 +:103FB00000000000200000000000000000000000E1 +:103FC00000000000000000000000000000002000D1 +:103FD00000000000200000000000000000000000C1 :103FE00000000000000000000000000000000000D1 :103FF00000000000000000000000000000000000C1 :1040000000000000000000000000000000000000B0 -:104010000000400000000000000000000000000060 +:1040100000000000000000000000000000000000A0 :104020000000000000000000000000000000000090 :104030000000000000000000000000000000000080 -:10404000000000000000000021000000000000004F -:104050002100000000000000000000000000080037 -:1040600000000000000040400000000000000800C8 +:1040400000000000009000000000000000000002DE +:104050000000000000000000000000000000000060 +:104060000000000000000040000000000000900080 :104070000000000000000000000000000000004000 -:10408000000000000000000000000000000002101E +:104080000000000000000000000000000000000030 :104090000000000000000000000000000000000020 :1040A0000000000000000000000000000000000010 -:1040B00002000000000000000800000000000000F6 +:1040B00000400000000000000000000000000000C0 :1040C00000000000000000000000000000000000F0 -:1040D00000000000000000000200000000000000DE -:1040E0000000000000080000800800000000000040 -:1040F000008400000088000000880000000000002C -:10410000000000880008000000840000000000009B -:104110000088000000000000000000000000000017 -:1041200000000008000000900000000000000000F7 -:1041300000840000000000000000000000000000FB -:1041400000000090000000000000000000000000DF -:1041500000000090000000000000000000000000CF -:104160000000000000080000000000000000000047 +:1040D00000000000000000000000000000000000E0 +:1040E00000100000000000000000000000000000C0 +:1040F00000080000000000000000000000000000B8 +:1041000000000000000000000000000000000000AF +:10411000004000000000000000000000000000005F +:10412000000000000000000000000000000000008F +:10413000000000000000000000000000000000007F +:10414000000000000000000000000000000000006F +:10415000000000000000000000000000000000005F +:10416000000000000000000000000000000000004F :10417000000000000000000000000000000000003F -:104180000000000800000000000000000000000027 -:1041900000000000000000000000002100000000FE -:1041A00000090000000000000000000000090000FD +:10418000000000000000000000000000000000002F +:10419000000000000000000000000000000000001F +:1041A000000000000000000000000000000000000F :1041B00000000000000000000000000000000000FF -:1041C00000000040000000000000000000000000AF +:1041C00000000000000000000000000000000000EF :1041D00000000000000000000000000000000000DF -:1041E00000000000000000000000000000000000CF +:1041E000410003000000000008000000040000007F :1041F00000000000000000000000000000000000BF -:10420000000000000000410000000000000000006D -:10421000000000080084008200C00000008200004E -:10422000000000001100200220000000000041906A -:104230000000000000A00008008200000000410013 -:10424000000000000000020040000000000000002C -:10425000000000000000000400000000000000005A -:10426000000000000000000000000000000000004E -:104270000000080000000000000000000000000036 +:1042000000000000000000000000000000000000AE +:10421000000000000000000000000000000000009E +:10422000000000000000000000000000000000008E +:10423000000000000000000000000000000000007E +:10424000000000000000000000000000000000006E +:10425000000000000000000000000000000000005E +:1042600000000000000000000000000000008200CC +:10427000000000000000000000000000000000003E :10428000000000000000000000000000000000002E -:10429000A00000000000000000000000000000007E +:10429000000000000000000000000000000000001E :1042A000000000000000000000000000000000000E :1042B00000000000000000000000000000000000FE -:1042C00000000000000000000000000000000000EE -:1042D000000000000000000000008400000000005A +:1042C00000000000000000001000000000000100DD +:1042D00000000000000000000000000000000000DE :1042E00000000000000000000000000000000000CE -:1042F00000000000000000000000000000000000BE +:1042F00000000000000000000010000000000000AE :1043000000000000000000000000000000000000AD -:10431000000000000000000000000000000000009D +:10431000000000000000000000100000000000008D :10432000000000000000000000000000000000008D :10433000000000000000000000000000000000007D :10434000000000000000000000000000000000006D -:10435000000000000000000000000000000000005D +:104350000800000000000000000000000000000055 :10436000000000000000000000000000000000004D -:1043700000000000000000000000004000000000FD -:1043800000000000000082000000000000000000AB +:10437000000000000000000000000000000000003D +:10438000000000000000000000000000000000002D :10439000000000000000000000000000000000001D -:1043A0000000000000008200000000020008000081 -:1043B000000000000000900000000000000000006D -:1043C00000000000000000000000000000040000E9 +:1043A000000000000000000000000000000000000D +:1043B00000000000000000000000000000000000FD +:1043C00000000000000000000000000000000000ED :1043D00000000000000000000000000000000000DD -:1043E00000000000000000000000000000000000CD -:1043F00000000000000000000000000000000000BD -:1044000000000000000000000000000000000000AC -:104410000008000000A0080000A0009000000000BC +:1043E00000000000000000000000000009000000C4 +:1043F00000000800000000000800000009000000A4 +:1044000000000000030000000000000000000000A9 +:10441000000000000000000000000000000000009C :10442000000000000000000000000000000000008C -:104430000000000040000888080000900000000014 +:10443000000000000000000000000000000000007C :10444000000000000000000000000000000000006C -:1044500000000000080000004000200000001100E3 +:10445000000000000000000000000000000000005C :10446000000000000000000000000000000000004C -:104470000000000000000000000000000000000834 +:10447000000000000000000000000000000000003C :10448000000000000000000000000000000000002C -:104490000800000000000000000000000000000014 -:1044A0000000000000000003000000000000000009 +:10449000000000000000000000000000000000001C +:1044A000000000000000000000000000000000000C :1044B00000000000000000000000000000000000FC -:1044C00000000000000000000000000000000000EC +:1044C000000000000000000000000000000001806B :1044D00000000000000000000000000000000000DC :1044E00000000000000000000000000000000000CC :1044F00000000000000000000000000000000000BC @@ -37981,9 +37981,9 @@ :10452000000000000000000000000000000000008B :10453000000000000000000000000000000000007B :10454000000000000000000000000000000000006B -:10455000000000000000000000000000000000005B -:10456000000000000000000000000000000000004B -:104570000000000000000000A0000000000000009B +:104550000810100000000000000000000000000033 +:104560000000030000000000000002000000000046 +:10457000000000000000000000000000000000003B :10458000000000000000000000000000000000002B :10459000000000000000000000000000000000001B :1045A000000000000000000000000000000000000B @@ -37991,7 +37991,7 @@ :1045C00000000000000000000000000000000000EB :1045D00000000000000000000000000000000000DB :1045E00000000000000000000000000000000000CB -:1045F000000000000000400021000000000000005A +:1045F00000000000000000000000000000000000BB :1046000000000000000000000000000000000000AA :10461000000000000000000000000000000000009A :10462000000000000000000000000000000000008A @@ -38015,16 +38015,16 @@ :104740000000000000000000000000000000000069 :104750000000000000000000000000000000000059 :104760000000000000000000000000000000000049 -:104770000000000000000000000000000000000138 -:104780000001000000000000000000000000000028 +:104770000000000000000000000000000000000039 +:104780000000000000000000000000000000000029 :104790000000000000000000000000000000000019 :1047A0000000000000000000000000000000000009 :1047B00000000000000000000000000000000000F9 :1047C00000000000000000000000000000000000E9 :1047D00000000000000000000000000000000000D9 :1047E00000000000000000000000000000000000C9 -:1047F00000000000000000000000000000000011A8 -:104800000010000800090000000000000000000087 +:1047F00000000000000000000000000000000000B9 +:1048000000000000000000000000000000000000A8 :104810000000000000000000000000000000000098 :104820000000000000000000000000000000000088 :104830000000000000000000000000000000000078 @@ -38088,8 +38088,8 @@ :104BD00000000000000000000000000000000000D5 :104BE00000000000000000000000000000000000C5 :104BF00000000000000000000000000000000000B5 -:104C00000000000000000000000000000000006143 -:104C10000006000D00000000000000000000000081 +:104C000000000000000000000000000000000000A4 +:104C10000000000000000000000000000000000094 :104C20000000000000000000000000000000000084 :104C30000000000000000000000000000000000074 :104C40000000000000000000000000000000000064 @@ -38097,7 +38097,7 @@ :104C60000000000000000000000000000000000044 :104C70000000000000000000000000000000000034 :104C80000000000000000000000000000000000024 -:104C900000000000B0BCB3BF000000000000000036 +:104C90000000000000000000000000000000000014 :104CA0000000000000000000000000000000000004 :104CB00000000000000000000000000000000000F4 :104CC00000000000000000000000000000000000E4 @@ -38105,7 +38105,7 @@ :104CE00000000000000000000000000000000000C4 :104CF00000000000000000000000000000000000B4 :104D000000000000000000000000000000000000A3 -:104D1000000000000000808C838F00000000000075 +:104D10000000000000000000000000000000000093 :104D20000000000000000000000000000000000083 :104D30000000000000000000000000000000000073 :104D40000000000000000000000000000000000063 @@ -38129,178 +38129,178 @@ :104E60000000000000000000000000000000000042 :104E70000000000000000000000000000000000032 :104E80000000000000000000000000000000000022 -:104E90000000000000000000000000000000001002 -:104EA0000000000000000000000000000000000002 -:104EB00000100000000000000000000000000008DA -:104EC00000000000000000000000000000000000E2 -:104ED00000010000000000000000000000000000D1 -:104EE00000000000000000000000000000000000C2 -:104EF00000100000000000000000000000000000A2 -:104F0000A01100000000000000009003000000005D +:104E900000000000000000002000200000000000D2 +:104EA00000000000000000002000000000002000C2 +:104EB00000000000000000002000200000000000B2 +:104EC00000000000000000002000000000002000A2 +:104ED0000000000000000000000020002000000092 +:104EE00000000000000000000000200000000000A2 +:104EF0000000000000000000000020002000000072 +:104F00000000000000000000000020000000000081 :104F10000000000000000000000000000000000091 :104F20000000000000000000000000000000000081 -:104F30000000000000000000000000000000000071 +:104F30000000400000000000000000000000000031 :104F40000000000000000000000000000000000061 :104F50000000000000000000000000000000000051 -:104F60000000000000000000000000000000000041 +:104F6000000000020000000000000000000000003F :104F70000000000000000000000000000000000031 -:104F800000000000000000000000000040001100D0 -:104F9000000000000200000000000000000000000F -:104FA0000000000000000000000000000000000001 +:104F80000000000000000000000000000000000021 +:104F90000000000000000000000000000000000011 +:104FA00000100010000000000000000000000000E1 :104FB00000000000000000000000000000000000F1 :104FC00000000000000000000000000000000000E1 :104FD00000000000000000000000000000000000D1 :104FE00000000000000000000000000000000000C1 -:104FF00000000000000000000000000000000000B1 -:10500000000000110400000000000000000000008B -:10501000000000008200800000000000000000008E -:105020000000000000000000000000000000000080 -:1050300000000000008400000000000000000000EC -:105040000000000000100000000000000000000050 -:105050000000000000000000000000000000000050 -:105060000000000000000010000000000000000030 -:105070000000000000000000000000000000000030 -:105080000000000000000000000000000000000020 +:104FF0000000000000000400022000200400000067 +:105000000000000000000200022004000440000034 +:105010000000000000000000000000000008000088 +:1050200000000000008800000000000000000000F8 +:105030000000000000000000000000000008000068 +:1050400000000000008800000000000000000000D8 +:105050000000000000000000000000000000000848 +:105060000000000000000000000000000000000040 +:10507000000000000000000080008001000180822C +:10508000000000000000000080008001800080011E :105090000000000000000000000000000000000010 -:1050A0000000000000000000000000000000000000 +:1050A0000000000000000808080088000000000060 :1050B00000000000000000000000000000000000F0 -:1050C00000000000000000080000000000000000D8 -:1050D0000000000000004000000000000000000090 -:1050E00000000000000000000200000004000000BA -:1050F0009000000000000000000000000000000020 -:105100000000000000000000400004000000040057 -:105110000400000000000400000000000000000087 +:1050C00000000000000000000000000000000000E0 +:1050D00000000000000000000000000000000000D0 +:1050E00000000000000000000000000000000000C0 +:1050F00000000000000000000000000000000000B0 +:105100000000000000000000000000030000000597 +:105110000000000000000000000800000000000087 :10512000000000000000000000000000000000007F :10513000000000000000000000000000000000006F :10514000000000000000000000000000000000005F :10515000000000000000000000000000000000004F -:10516000000000000000000000040020000000001B +:10516000000000000000000000000000000000003F :10517000000000000000000000000000000000002F -:1051800000000000000000000000000040000000DF -:1051900000000000002000000000000000000000EF -:1051A00000000100000000000000000000000000FE +:10518000000000000000000000000000000000001F +:10519000000000000000000000000000000000000F +:1051A00000000000000000000000000000000000FF :1051B00000000000000000000000000000000000EF :1051C00000000000000000000000000000000000DF :1051D00000000000000000000000000000000000CF :1051E00000000000000000000000000000000000BF -:1051F00000000000000000000000000000000000AF -:10520000000000000000000000000000000000009E -:10521000000000000000000000000000000000008E -:10522000000000000400000000000000000000007A +:1051F0000000C000000000000000000008000000E7 +:1052000000008200000002000000000000000020FA +:10521000000000400000000000000000000000004E +:10522000000000000000000000000000000000007E :10523000000000000000000000000000000000006E :10524000000000000000000000000000000000005E :10525000000000000000000000000000000000004E :10526000000000000000000000000000000000003E :10527000000000000000000000000000000000002E -:10528000000000000000000000000000000000001E -:10529000000000000000000000000000000000000E -:1052A00000000000002000000000000000000000DE +:10528000000000000000000080000000000000009E +:10529000000100000001000000000000000000000C +:1052A00000000000000000000000000000000000FE :1052B00000000000000000000000000000000000EE :1052C00000000000000000000000000000000000DE :1052D00000000000000000000000000000000000CE :1052E00000000000000000000000000000000000BE -:1052F00000000000000000000000000000000000AE -:10530000000000000000000000000000000000009D -:10531000000000000000000000000000000000008D -:105320000000000000000001000009000000000073 -:105330000008000000000000000000000000000065 +:1052F00004000000000000000000000000000000AA +:105300000800000000000000000002400000A000B3 +:10531000002100000000000000000000000000006C +:105320000041000000000400000000000000000038 +:105330000000000000000800000000000000000065 :10534000000000000000000000000000000000005D -:105350000000000000000400000000000000000049 -:105360000000000000000000002000000088000095 -:1053700000000000000040000000110000000000DC -:10538000000000000000000000000000000000001D -:10539000000000000000000000000002000000000B +:10535000000000000000000000000000000000004D +:10536000000000000000000000000000000000003D +:10537000000000000000000000000000000000002D +:10538000000000000000000000000000800100009C +:10539000000000000000000000000000000000000D :1053A00000000000000000000000000000000000FD :1053B00000000000000000000000000000000000ED :1053C00000000000000000000000000000000000DD :1053D00000000000000000000000000000000000CD :1053E00000000000000000000000000000000000BD :1053F00000000000000000000000000000000000AD -:10540000000000000000000000000000000000009C -:10541000000000000000000000000000000000008C -:10542000000000000000000000000000000000007C +:1054000000000000000000000000C000000002409A +:105410000000A00082000000000000000000000367 +:105420000000000900210000000000000000000052 :10543000000000000000000000000000000000006C :10544000000000000000000000000000000000005C :10545000000000000000000000000000000000004C :10546000000000000000000000000000000000003C :10547000000000000000000000000000000000002C :10548000000000000000000000000000000000001C -:10549000000000000000000000000000000000000C -:1054A00000000000000000000000900000000090DC +:10549000800100000000000000000000000000008B +:1054A00000000000000000000000000000000000FC :1054B00000000000000000000000000000000000EC :1054C00000000000000000000000000000000000DC :1054D00000000000000000000000000000000000CC :1054E00000000000000000000000000000000000BC :1054F00000000000000000000000000000000000AC -:10550000000000000000000000000000000000009B -:10551000000000000000000000000000000000008B -:1055200000000000000000000000110080000000EA +:105500000000000000000000000000C010A000101B +:10551000C0C0000000000000000000C01040008279 +:105520000402000000000000000000000000000075 :10553000000000000000000000000000000000006B :10554000000000000000000000000000000000005B :10555000000000000000000000000000000000004B :10556000000000000000000000000000000000003B :10557000000000000000000000000000000000002B -:10558000000000000000000000000000000000001B -:10559000000000000000000000000000000000000B -:1055A000000000000000000000000000000000807B -:1055B000000000800000000000000000000000006B +:105580000000000000000000000000000280800019 +:1055900000808000000000000000000010800080FB +:1055A00000008080000000000000000000000000FB +:1055B00000000000000000000000000000000000EB :1055C00000000000000000000000000000000000DB :1055D00000000000000000000000000000000000CB :1055E00000000000000000000000000000000000BB :1055F00000000000000000000000000000000000AB -:10560000000000000000000000000000000000009A -:10561000000000000000000000000000000000008A -:10562000000000000000000000000000000000007A -:105630000020000000C0000000000000000000008A +:10560000000000000000000000000000000080001A +:1056100000418000800000000000000000008000C9 +:1056200080030041808000000000000000000000B6 +:10563000000000000000000000000000000000006A :10564000000000000000000000000000000000005A :10565000000000000000000000000000000000004A :10566000000000000000000000000000000000003A :10567000000000000000000000000000000000002A :10568000000000000000000000000000000000001A -:10569000000000000000000000000000000000000A -:1056A00000000000000000000000000000000000FA -:1056B00001000088880001000000000000000000D8 +:105690000800A0011000C08400000000000000000D +:1056A000400040028201C00800000000000000002D +:1056B00000000000000000000000000000000000EA :1056C00000000000000000000000000000000000DA :1056D00000000000000000000000000000000000CA :1056E00000000000000000000000000000000000BA -:1056F00000000000000000000000000000000000AA +:1056F00000010000000000000000000000000000A9 :105700000000000000000000000000000000000099 -:105710000000000000000000000000000000000089 -:105720000000000000000000000000000000000079 -:10573000000041000080000009000000000000009F +:105710000000C00800A0004000C000000000000021 +:10572000000002040082108401C00000000000009C +:105730000000000000000000000000000000000069 :105740000000000000000000000000000000000059 :105750000000000000000000000000000000000049 :105760000000000000000000000000000000000039 -:105770000000000000000000000000000000000029 +:105770000000000100000000000000000000000028 :105780000000000000000000000000000000000019 -:105790000000000000000000000000000000000009 -:1057A00000000000000000000000000000000000F9 -:1057B0000000000000110000008000000000000058 +:105790000000000080800000008000800000000009 +:1057A000000000008980008000804180000000002F +:1057B00000000000000000000000000000000000E9 :1057C00000000000000000000000000000000000D9 :1057D00000000000000000000000000000000000C9 :1057E00000000000000000000000000000000000B9 -:1057F00000000000000000000000000000000000A9 +:1057F00000000000000100000000000000000000A8 :105800000000000000000000000000000000000098 -:105810000000000000000000000000000000000088 -:105820000000000000000000000000000000000078 -:105830000000000000000001000000400000000027 +:105810000000000000008020804080820000000026 +:105820000000000000008000804080880000000030 +:105830000000000000000000000000000000000068 :105840000000000000000000000000000000000058 :105850000000000000000000000000000000000048 :105860000000000000000000000000000000000038 -:105870000000000000000000000000000000000028 +:105870000000000000000001000000000000000027 :105880000000000000000000000000000000000018 -:105890000000000000000000000000000000000008 -:1058A00000000000000000000000000000000000F8 -:1058B000000000000000000000000000070082213E +:105890000000000000000000C001200040C0C01057 +:1058A0000000000000000000C000820084054010DD +:1058B00000000000000000000000000000000000E8 :1058C00000000000000000000000000000000000D8 :1058D00000000000000000000000000000000000C8 :1058E00000000000000000000000000000000000B8 :1058F00000000000000000000000000000000000A8 :105900000000000000000000000000000000000097 -:105910000000000000000000000000000000000087 -:105920000000000000000000000000000000000077 -:105930000000000000000000000000000000000067 -:10594000F0F0000000000000000000000000000077 +:105910000000000000000000000000000000800007 +:105920006006000000000000000000000000800091 +:105930000042000000000000000000000000000025 +:105940000000000000000000000000000000000057 :105950000000000000000000000000000000000047 :105960000000000000000000000000000000000037 :105970000000000000000000000000000000000027 @@ -38308,7 +38308,7 @@ :105990000000000000000000000000000000000007 :1059A00000000000000000000000000000000000F7 :1059B00000000000000000000000000000000000E7 -:1059C0000000F0F0000000000000000000000000F7 +:1059C00000000000000000000000000000000000D7 :1059D00000000000000000000000000000000000C7 :1059E00000000000000000000000000000000000B7 :1059F00000000000000000000000000000000000A7 @@ -38322,9 +38322,9 @@ :105A70000000000000000000000000000000000026 :105A80000000000000000000000000000000000016 :105A90000000000000000000000000000000000006 -:105AA00000000000000000000000000000000000F6 -:105AB00000000000000000000000000000000000E6 -:105AC0003C3C0000FFFF0000000000000000000060 +:105AA00041084000008421060000000000000000C2 +:105AB0004308400000842186000000000000000030 +:105AC00000000000000000000000000000000000D6 :105AD00000000000000000000000000000000000C6 :105AE00000000000000000000000000000000000B6 :105AF00000000000000000000000000000000000A6 @@ -38332,7 +38332,7 @@ :105B10000000000000000000000000000000000085 :105B20000000000000000000000000000000000075 :105B30000000000000000000000000000000000065 -:105B400000003C3C000000000000000000000000DD +:105B40000000000000000000000000000000000055 :105B50000000000000000000000000000000000045 :105B60000000000000000000000000000000000035 :105B70000000000000000000000000000000000025 @@ -38340,14 +38340,14 @@ :105B90000000000000000000000000000000000005 :105BA00000000000000000000000000000000000F5 :105BB00000000000000000000000000000000000E5 -:105BC0000000000005002A00054000A800000000B9 +:105BC00000000000000000000000000000000000D5 :105BD00000000000000000000000000000000000C5 :105BE00000000000000000000000000000000000B5 :105BF00000000000000000000000000000000000A5 :105C00000000000000000000000000000000000094 :105C10000000000000000000000000000000000084 -:105C20000000000000000000000000000000000074 -:105C30000000000000000000000000000000000064 +:105C20000000000000000000000800000008000064 +:105C300000000010000010002008004000080000D4 :105C40000000000000000000000000000000000054 :105C50000000000000000000000000000000000044 :105C60000000000000000000000000000000000034 @@ -38380,36 +38380,36 @@ :105E10000000000000000000000000000000000082 :105E20000000000000000000000000000000000072 :105E30000000000000000000000000000000000062 -:105E40000000000000000000000000000000000250 +:105E40000000000000000000000000000000000052 :105E50000000000000000000000000000000000042 -:105E600000000000000000000000000000004000F2 -:105E7000000000000004000000000000000000001E -:105E800000000000000040000000000000000000D2 -:105E900020000000000000000000000000000000E2 -:105EA00000000000000000002000000000000000D2 -:105EB000400000000000000088000000000000001A -:105EC0008800000000020000200000000000000028 +:105E60000000000000000000000000002000000012 +:105E70000000000000000000000000000000000022 +:105E80000000000000000000000000000000000012 +:105E90000000000000000000000000000000000002 +:105EA00000000000000000000000000000000000F2 +:105EB00000000000000000000000000000000000E2 +:105EC00000000000000000000000000000001000C2 :105ED00000000000000000000000000000000000C2 :105EE00000000000000000000000000000000000B2 -:105EF0000000000000000000000000001000000092 +:105EF00000000000000000000000000000000000A2 :105F00000000000000000000000000000000000091 -:105F10000000400000000000000000000000000041 -:105F20000000000000000000000000000000000071 +:105F10000000000000000000000000000000000081 +:105F20000000000000000000090000000000000068 :105F30000000000000000000000000000000000061 :105F40000000000000000000000000000000000051 :105F50000000000000000000000000000000000041 :105F60000000000000000000000000000000000031 -:105F70000000000000000000001000000000000011 +:105F70000000000000000000000000000000000021 :105F80000000000000000000000000000000000011 :105F90000000000000000000000000000000000001 -:105FA00000000000000000000000000000000000F1 +:105FA0000000000000000000000088000000000069 :105FB00000000000000000000000000000000000E1 :105FC00000000000000000000000000000000000D1 -:105FD00000000000000000000000000000000000C1 +:105FD00000000000000000000000000800000000B9 :105FE00000000000000000000000001000000000A1 -:105FF00000000000000000000000000000000000A1 +:105FF0000000000000000000000000080000000099 :106000000000000000000000000000000000000090 -:106010000000000000000000000000000000000080 +:106010000000000000000000000000000010000070 :106020000000000000000000000000000000000070 :106030000000000000000000000000000000000060 :106040000000000000000000000000000000000050 @@ -38418,24 +38418,24 @@ :106070000000000000000000000000000000000020 :106080000000000000000000000000000000000010 :106090000000000000000000000000000000000000 -:1060A0000000000090000000000000000000000060 +:1060A00000000000000000000000000000000000F0 :1060B00000000000000000000000000000000000E0 -:1060C00004000000000000000400000000000000C8 -:1060D000840000000000000000000000000000003C +:1060C0000000000000009000000000000000000040 +:1060D00000000000000000000000000000000000C0 :1060E00000000000000000000000000000000000B0 :1060F00000000000000000000000000000000000A0 :10610000000000000000000000000000000000008F :10611000000000000000000000000000000000007F :10612000000000000000000000000000000000006F :10613000000000000000000000000000000000005F -:10614000000000000000000000000000000000004F -:10615000000000000000000000200000000000001F +:106140000000000000000000000800000000000047 +:1061500000080082000000A0008400000000000091 :10616000000000000000000000000000000000002F :10617000000000000000000000000000000000001F :10618000000000000000000000000000000000000F :1061900000000000000000000000000000000000FF -:1061A00000000000000000000000000000000000EF -:1061B00000000000100000000000000008000000C7 +:1061A0000000A0000000000000000000000000004F +:1061B00000000000000000000000000000000000DF :1061C00000000000000000000000000000000000CF :1061D00000000000000000000000000000000000BF :1061E00000000000000000000000000000000000AF @@ -38454,23 +38454,23 @@ :1062B00000000000000000000000000000000000DE :1062C00000000000000000000000000000000000CE :1062D00000000000000000000000000000000000BE -:1062E00000000000080000840000000000004000E2 -:1062F000000000000000000000000000000000009E +:1062E00000000000000000000000000000000000AE +:1062F0000800000000000000000000000000000096 :10630000000000000000000000000000000000008D :10631000000000000000000000000000000000007D -:10632000000000000000000000000000002000004D -:10633000000000000000000000200000000000003D +:10632000000000000000000000000000000000006D +:10633000000000000000000000000000000000005D :10634000000000000000000000000000000000004D -:10635000000000000000000000000000000000003D +:1063500000000000000000000084000000000000B9 :10636000000000000000000000000000000000002D -:10637000000200000000000000000000000000001B +:10637000000000000000000000000000000000001D :10638000000000000000000000000000000000000D :1063900000000000000000000000000000000000FD -:1063A00000000000000000000000000000000000ED +:1063A00008000000000000000000000000000000E5 :1063B00000000000000000000000000000000000DD :1063C00000000000000000000000000000000000CD :1063D00000000000000000000000000000000000BD -:1063E00000000000000000000000000000000000AD +:1063E00000000008000000000000000000000000A5 :1063F000000000000000000000000000000000009D :10640000000000000000000000000000000000008C :10641000000000000000000000000000000000007C @@ -38575,47 +38575,47 @@ :106A40000000000000000000000000000000000046 :106A50000000000000000000000000000000000036 :106A60000000000000000000000000000000000026 -:106A700000000000000000000000000000002000F6 -:106A800000002000000000000000200000000000C6 -:106A900000000000000000000000000020000000D6 -:106AA00000000000000000000000200000000000C6 -:106AB00000000000000000000000000020000001B5 -:106AC00000000000000000000000000020000000A6 -:106AD0000000000000000000000000000010200086 -:106AE0000000000000000000000000002000000086 -:106AF0000000000000000000000000000000200076 -:106B00000000000000000000000000000000000085 -:106B10000000000000000000000000000000000075 -:106B20000000000000000000000000000000000065 -:106B30000000000000000000000000000000000055 -:106B40000000000000000000000200000000000043 -:106B500000020000000000000000004000000000F3 -:106B600000000000000000000000400000000000E5 -:106B70000000000000000000000000000000000015 -:106B800000000000000000000000100000000000F5 +:106A70000000000000000000000000000000000016 +:106A80000000000000000000000000000000000006 +:106A900000000000000000000000000000000000F6 +:106AA00000000000000000000000000000000000E6 +:106AB00000000000000000000000000000000000D6 +:106AC00000000000000000000000000000000000C6 +:106AD00000000000000000000000000000000000B6 +:106AE00000000000000000000000000000000000A6 +:106AF0000000000000000000000000000000000096 +:106B0000000000000000000000000000000400047D +:106B10004000000000000000000000000004000031 +:106B2000000000000000000000000000000400045D +:106B30000000000000000000000000000004000051 +:106B40000000000000000000000000000000000441 +:106B50000000000000000000000000000000000035 +:106B60000000000000000000000000000000000025 +:106B700000020000000000000040000000000000D3 +:106B80000000000000000000000000000000000005 :106B900000000000000000000000000000000000F5 -:106BA00000000000000000000400020000000000DF +:106BA00000400000000000000000000000000000A5 :106BB00000000000000000000000000000000000D5 :106BC00000000000000000000000000000000000C5 -:106BD00000000000000000000000000000000000B5 -:106BE00000000000000000000000000000000000A5 -:106BF0000000000000000000000000000000000095 -:106C00000000020000000000000000008000000002 +:106BD00000000000000008000800000000000000A5 +:106BE000000000000000080000000010000000008D +:106BF0000000000082000000820000000000000091 +:106C00000000000000000000000000000000000084 :106C10000000000000000000000000000000000074 -:106C20000000000000000000000080008000000064 +:106C20000000000000000000000000000000000064 :106C30000000000000000000000000000000000054 :106C40000000000000000000000000000000000044 :106C50000000000000000000000000000000000034 -:106C60000000000002000000000000000000000022 +:106C60000000000000000000000000000000000024 :106C70000000000000000000000000000000000014 :106C80000000000000000000000000000000000004 :106C900000000000000000000000000000000000F4 :106CA00000000000000000000000000000000000E4 :106CB00000000000000000000000000000000000D4 -:106CC00000000000040000000000000000000000C0 -:106CD0000000000000004000000004000000000070 +:106CC00000000000000000000000000000000000C4 +:106CD00000000000000000000000000000000000B4 :106CE00000000000000000000000000000000000A4 -:106CF0000000000000000400400000000000000050 +:106CF0000000000000000000000000000000000094 :106D00000000000000000000000000000000000083 :106D10000000000000000000000000000000000073 :106D20000000000000000000000000000000000063 @@ -38623,27 +38623,27 @@ :106D40000000000000000000000000000000000043 :106D50000000000000000000000000000000000033 :106D60000000000000000000000000000000000023 -:106D7000000000000000000000000400000000000F +:106D70000000000000000000000000000000000013 :106D80000000000000000000000000000000000003 -:106D9000080000000000010000800000000000006A -:106DA0008200000000000000000000000000000061 -:106DB00000000000000000000100000000000000D2 +:106D900000000000000000000000000000000000F3 +:106DA00000000000000000000000000000000000E3 +:106DB00000000000000000000000000000000000D3 :106DC00000000000000000000000000000000000C3 :106DD00000000000000000000000000000000000B3 :106DE00000000000000000000000000000000000A3 :106DF0000000000000000000000000000000000093 :106E00000000000000000000000000000000000082 -:106E1000000000000000000020000004000000004E +:106E10000000000000000000000000000000000072 :106E20000000000000000000000000000000000062 -:106E3000000000000000000000000400000000004E +:106E30000000000000000000000000000000000052 :106E40000000000000000000000000000000000042 :106E50000000000000000000000000000000000032 :106E60000000000000000000000000000000000022 :106E70000000000000000000000000000000000012 :106E80000000000000000000000000000000000002 -:106E9000080000009000000000000000000000005A +:106E900000000000000000000000000000000000F2 :106EA00000000000000000000000000000000000E2 -:106EB000000008000000A00000000020000000000A +:106EB00000000000000000000000000000000000D2 :106EC00000000000000000000000000000000000C2 :106ED00000000000000000000000000000000000B2 :106EE00000000000000000000000000000000000A2 @@ -38651,16 +38651,16 @@ :106F00000000000000000000000000000000000081 :106F10000000000000000000000000000000000071 :106F20000000000000000000000000000000000061 -:106F30000000000000000000000000000001000050 +:106F30000000000000000000000000000000000051 :106F40000000000000000000000000000000000041 -:106F50000000000000000000000000000000002011 +:106F50000000000000000000000000000000000031 :106F60000000000000000000000000000000000021 :106F70000000000000000000000000000000000011 -:106F80000000000000000000000000000000000001 +:106F800000040000000000000000000000000000FD :106F900000000000000000000000000000000000F1 :106FA00000000000000000000000000000000000E1 -:106FB00000000800000000000000000000000000C9 -:106FC0000000000000000080000000000000000041 +:106FB00000000000000000000000000000000000D1 +:106FC00000000000000000000000000000000000C1 :106FD00000000000000000000000000000000000B1 :106FE00000000000000000000000000000000000A1 :106FF0000000000000000000000000000000000091 @@ -38668,80 +38668,80 @@ :107010000000000000000000000000000000000070 :107020000000000000000000000000000000000060 :107030000000000000000000000000000000000050 -:107040000000000000000000002000000000000020 +:107040000000000000000000000000000000000040 :107050000000000000000000000000000000000030 :107060000000000000000000000000000000000020 :107070000000000000000000000000000000000010 :107080000000000000000000000000000000000000 -:1070900000000000000000000000000000000100EF +:1070900000000000000000000000000000000000F0 :1070A00000000000000000000000000000000000E0 :1070B00000000000000000000000000000000000D0 -:1070C000900200000000000000000000000000002E +:1070C00000000000000000000000000000000000C0 :1070D00000000000000000000000000000000000B0 :1070E00000000000000000000000000000000000A0 :1070F0000000000000000000000000000000000090 :10710000000000000000000000000000000000007F :10711000000000000000000000000000000000006F -:10712000110021000000000000000000000000002D +:10712000000000000000000000000000000000005F :10713000000000000000000000000000000000004F -:10714000110080800000000000000000000000002E +:10714000000000000000000000000000000000003F :10715000000000000000000000000000000000002F :10716000000000000000000000000000000000001F :10717000000000000000000000000000000000000F :1071800000000000000000000000000000000000FF :1071900000000000000000000000000000000000EF -:1071A000000000C109000003008000000000000092 +:1071A00000000000000000000000000000000000DF :1071B00000000000000000000000000000000000CF -:1071C00000000000008000000080000000000000BF +:1071C00000000000000000000000000000000000BF :1071D00000000000000000000000000000000000AF :1071E000000000000000000000000000000000009F :1071F000000000000000000000000000000000008F :10720000000000000000000000000000000000007E :10721000000000000000000000000000000000006E -:1072200000000000000301000000008800000000D2 +:10722000000000000000000000000000000000005E :10723000000000000000000000000000000000004E -:107240000000004000000020000000C0000000001E +:10724000000000000000000000000000000000003E :10725000000000000000000000000000000000002E :10726000000000000000000000000000000000001E :10727000000000000000000000000000000000000E :1072800000000000000000000000000000000000FE :1072900000000000000000000000000000000000EE -:1072A0000000000000000000880000000100000055 +:1072A00000000000000000000000000000000000DE :1072B00000000000000000000000000000000000CE -:1072C00000000000000001000088880001000000AC -:1072D00000000200000000000000000000000000AC +:1072C00000000000000000000000000000000000BE +:1072D00000000000000000000000000000000000AE :1072E000000000000000000000000000000000009E :1072F000000000000000000000000000000000008E :10730000000000000000000000000000000000007D :10731000000000000000000000000000000000006D -:10732000000000000000000000000000000041001C +:10732000000000000000000000000000000000005D :10733000000000000000000000000000000000004D -:107340000000000000000000410000800000090073 -:1073500000000000800000000000000000000000AD +:10734000000000000000000000000000000000003D +:10735000000000000000000000000000000000002D :10736000000000000000000000000000000000001D :10737000000000000000000000000000000000000D :1073800000000000000000000000000000000000FD :1073900000000000000000000000000000000000ED -:1073A00000000000000000000000000000110000CC +:1073A00000000000000000000000000000000000DD :1073B00000000000000000000000000000000000CD -:1073C000000000000000000000000011000000802C +:1073C00000000000000000000000000000000000BD :1073D00000000000000000000000000000000000AD :1073E000000000000000000000000000000000009D :1073F000000000000000000000000000000000008D :10740000000000000000000000000000000000007C :10741000000000000000000000000000000000006C -:10742000000000000000000000000000000000015B +:10742000000000000000000000000000000000005C :10743000000000000000000000000000000000004C -:10744000000000000000000000000000000100003B -:1074500000400000000000000000000000000000EC +:10744000000000000000000000000000000000003C +:10745000000000000000000000000000000000002C :10746000000000000000000000000000000000001C :10747000000000000000000000000000000000000C :1074800000000000000000000000000000000000FC :1074900000000000000000000000000000000000EC :1074A00000000000000000000000000000000000DC -:1074B00000E000008141000000000000000000002A -:1074C00000000000000000000000070000000000B5 -:1074D00000000700822100000000070000000000FB +:1074B00000000000000000000000000000000000CC +:1074C00000000000000000000000000000000000BC +:1074D00000000000000000000000000000000000AC :1074E000000000000000000000000000000000009C :1074F000000000000000000000000000000000008C :10750000000000000000000000000000000000007B @@ -38749,7 +38749,7 @@ :10752000000000000000000000000000000000005B :10753000000000000000000000000000000000004B :10754000000000000000000000000000000000003B -:1075500000000000F0F0000000000000000000004B +:10755000000000000000000000000000000000002B :10756000000000000000000000000000000000001B :10757000000000000000000000000000000000000B :1075800000000000000000000000000000000000FB @@ -38757,7 +38757,7 @@ :1075A00000000000000000000000000000000000DB :1075B00000000000000000000000000000000000CB :1075C00000000000000000000000000000000000BB -:1075D000000000000000F0F00000000000000000CB +:1075D00000000000000000000000000000000000AB :1075E000000000000000000000000000000000009B :1075F000000000000000000000000000000000008B :10760000000000000000000000000000000000007A @@ -38765,7 +38765,7 @@ :10762000000000000000000000000000000000005A :10763000000000000000000000000000000000004A :10764000000000000000000000000000000000003A -:10765000000000000000FF000000FFFF000000002D +:10765000000000000000000000000000000000002A :10766000000000000000000000000000000000001A :10767000000000000000000000000000000000000A :1076800000000000000000000000000000000000FA @@ -38773,21 +38773,21 @@ :1076A00000000000000000000000000000000000DA :1076B00000000000000000000000000000000000CA :1076C00000000000000000000000000000000000BA -:1076D0000000000000000000FF00000000000000AB +:1076D00000000000000000000000000000000000AA :1076E000000000000000000000000000000000009A :1076F000000000000000000000000000000000008A :107700000000000000000000000000000000000079 :107710000000000000000000000000000000000069 :107720000000000000000000000000000000000059 -:10773000000000000000000000400006000C0000F7 +:107730000000000000000000000000000000000049 :107740000000000000000000000000000000000039 -:1077500000000000000000A005002A00054000A86D -:107760000000000005000000000000000000000014 +:107750000000000000000000000000000000000029 +:107760000000000000000000000000000000000019 :107770000000000000000000000000000000000009 :1077800000000000000000000000000000000000F9 :1077900000000000000000000000000000000000E9 :1077A00000000000000000000000000000000000D9 -:1077B0000000000000000000000000005555FFFF21 +:1077B00000000000000000000000000000000000C9 :1077C00000000000000000000000000000000000B9 :1077D00000000000000000000000000000000000A9 :1077E0000000000000000000000000000000000099 @@ -38795,7 +38795,7 @@ :107800000000000000000000000000000000000078 :107810000000000000000000000000000000000068 :107820000000000000000000000000000000000058 -:10783000000000000000000000000000000055559E +:107830000000000000000000000000000000000048 :107840000000000000000000000000000000000038 :107850000000000000000000000000000000000028 :107860000000000000000000000000000000000018 @@ -38804,7 +38804,7 @@ :1078900000000000000000000000000000000000E8 :1078A00000000000000000000000000000000000D8 :1078B00000000000000000000000000000000000C8 -:1078C0000000F0F0000000000000000000000000D8 +:1078C00000000000000000000000000000000000B8 :1078D00000000000000000000000000000000000A8 :1078E0000000000000000000000000000000000098 :1078F0000000000000000000000000000000000088 @@ -38812,7 +38812,7 @@ :107910000000000000000000000000000000000067 :107920000000000000000000000000000000000057 :107930000000000000000000000000000000000047 -:1079400000000000F0F00000000000000000000057 +:107940000000000000000000000000000000000037 :107950000000000000000000000000000000000027 :107960000000000000000000000000000000000017 :107970000000000000000000000000000000000007 @@ -38820,40 +38820,40 @@ :1079900000000000000000000000000000000000E7 :1079A00000000000000000000000000000000000D7 :1079B00000000000000000000000000000000000C7 -:1079C0000000000020000000000000000000000097 -:1079D00000000000000000000000000000000000A7 -:1079E0000000000020000000000000000000000077 -:1079F0000004000000000000000000000000000083 -:107A00000000000000002000000000000000000056 -:107A10000000000000000000000000000000000066 -:107A20000000000000002000000000000000000036 -:107A30000000000000000000000000000000000046 -:107A400000000000000000000000000040000000F6 +:1079C00000040000000000000000000000000000B3 +:1079D0002000000000000000200000000000000067 +:1079E0000000000000000000000000000000000097 +:1079F0002000000000000000200000000000000047 +:107A00000000000000000000000000000000000076 +:107A10000000200000000000000020000000000026 +:107A20000000000000000000000000000000000056 +:107A30000000200000000000000020000000000006 +:107A40000000000000000000000200000000000034 :107A50000000000000000000000000000000000026 -:107A60000000000040000000000000004000000096 +:107A60000000000000000000000000000000000016 :107A70000000000000000000000000000000000006 -:107A80000000000000004000000000000000400076 +:107A800000000000000000000000000000000000F6 :107A900000000000000000000000000000000000E6 :107AA00000000000000000000000000000000000D6 -:107AB00000000000000000000000000000000000C6 -:107AC0000000000000400000000000000200000074 -:107AD000000000000840000000000000000000005E +:107AB00000000000000200000000000000000000C4 +:107AC00000000000000000000000000000000000B6 +:107AD0000000000000400000000000000000000066 :107AE0000000000000000000000000000000000096 -:107AF0000000000000400000000000000000000046 +:107AF0000000000000000000000000000000000086 :107B00000000000000000000000000000000000075 -:107B100000000000000000400000000000000040E5 +:107B10000000000000000000000000000000000065 :107B20000000000000000000000000000000000055 -:107B30000000000000000000000000000000004005 -:107B4000000000000000000000080008000000081D -:107B5000000400040000000000000000000000001D -:107B60000000000000000000000400040000000805 +:107B30000000000000000000000000000000000045 +:107B40000000000000000000000000000000000035 +:107B50000000000000000000000000000000000025 +:107B60000000000000000000000000000000000015 :107B70000000000000000000000000000000000005 :107B800000000000000000000000000000000000F5 -:107B900000080000000000000000000000000000DD +:107B900000000000000000000000000000000000E5 :107BA00000000000000000000000000000000000D5 -:107BB00000080000000000000000000000000000BD +:107BB00000000000000000000000000000000000C5 :107BC00000000000000000000000000000000000B5 -:107BD00002000000000000000000000000000000A3 +:107BD00000000000000000000000000000000000A5 :107BE0000000000000000000000000000000000095 :107BF0000000000000000000000000000000000085 :107C00000000000000000000000000000000000074 @@ -38893,18 +38893,18 @@ :107E20000000000000000000000000000000000052 :107E30000000000000000000000000000000000042 :107E40000000000000000000000000000000000032 -:107E5000000000C0000000000084000000000000DE +:107E50000000000000000000000000000000000022 :107E60000000000000000000000000000000000012 -:107E7000000000000000000000000084000000007E +:107E70000000000000000000000000000000000002 :107E800000000000000000000000000000000000F2 :107E900000000000000000000000000000000000E2 :107EA00000000000000000000000000000000000D2 :107EB00000000000000000000000000000000000C2 :107EC00000000000000000000000000000000000B2 :107ED00000000000000000000000000000000000A2 -:107EE0000000000200000000000000000000000090 +:107EE0000000000000000000000000000000000092 :107EF0000000000000000000000000000000000082 -:107F0000000000000002000000000000000000006F +:107F00000000000000000000000000000000000071 :107F10000000000000000000000000000000000061 :107F20000000000000000000000000000000000051 :107F30000000000000000000000000000000000041 @@ -38912,7 +38912,7 @@ :107F50000000000000000000000000000000000021 :107F60000000000000000000000000000000000011 :107F70000000000000000000000000000000000001 -:107F800000000000000009000000000000000000E8 +:107F800000000000000000000000000000000000F1 :107F900000000000000000000000000000000000E1 :107FA00000000000000000000000000000000000D1 :107FB00000000000000000000000000000000000C1 @@ -39071,45 +39071,45 @@ :108940000000000000000000000000000000000027 :108950000000000000000000000000000000000017 :108960000000000000000000000000000000000007 -:1089700000000000000000000200000000000000F5 -:1089800000000000000000000000000000000000E7 -:108990000000000020002000200000000000000077 -:1089A00000000000000000000000000000000000C7 -:1089B0000000000000002000000320000000000074 -:1089C00000000000000000000000000000000000A7 -:1089D0000000000000000000200020000000000057 +:1089700000000000000000000000000000000000F7 +:1089800000000000000400000000000000002000C3 +:1089900000002000000400040000000000000000AF +:1089A00000000000000400000000000000002000A3 +:1089B000000020000004000400000000000000008F +:1089C00000000000000000040000000000000000A3 +:1089D0002000000020000002000000000000000055 :1089E0000000000000000000000000000000000087 -:1089F0000000000000000000200000000000000057 +:1089F00020000000200000000000400000020000F5 :108A00000000000000000000000000000000000066 :108A10000000000000000000000000000000000056 -:108A20000000000000000000000000000002000044 +:108A20000000000000000000000000000000000046 :108A30000000000000000000000000000000000036 -:108A40000002000000004000000000900002000052 -:108A500000000000400000000000000000000000D6 -:108A60000000000000000000000000020000000202 -:108A700000020000000200020000000000000000F0 -:108A800000000000040000000000000000000000E2 +:108A40000000000000000000000200020000000022 +:108A50000000000000000000000000000000000016 +:108A600000000000400000000000000000000000C6 +:108A700000000000000000000000000000000000F6 +:108A800000000000000000000000001000000000D6 :108A900000000000000000000000000000000000D6 -:108AA00000000000000000000000000010000000B6 +:108AA00000000000000000000000000000000000C6 :108AB00000000000000000000000000000000000B6 -:108AC00000000000000000000000000000000100A5 -:108AD0000000000000000000000000000000000096 -:108AE0000000000000000000000000000200000084 -:108AF0000000000000000000000000000200000074 +:108AC00000000000000000000000000000000000A6 +:108AD000000000000800000000000000000002008C +:108AE0000200000000000000000000000000020082 +:108AF0000200000000000000000000000000000074 :108B00000000000000000000000000000000000065 :108B10000000000000000000000000000000000055 -:108B200000000000000000000000000000008000C5 +:108B20000000000000000000000000000000000045 :108B30000000000000000000000000000000000035 :108B40000000000000000000000000000000000025 -:108B50001000000000000000000000000000000005 -:108B60000000000000000000000000000000040001 +:108B50000000000000000000000000000000000015 +:108B60000000000000000000000000000000000005 :108B700000000000000000000000000000000000F5 :108B800000000000000000000000000000000000E5 :108B900000000000000000000000000000000000D5 :108BA00000000000000000000000000000000000C5 :108BB00000000000000000000000000000000000B5 :108BC00000000000000000000000000000000000A5 -:108BD0004000000000000000000000000000000055 +:108BD0000000000000000000000000000000000095 :108BE0000000000000000000000000000000000085 :108BF0000000400000000000000000000000000035 :108C00000000000000000000000000000000000064 @@ -39123,25 +39123,25 @@ :108C800000000000000000000000000000000000E4 :108C900000000000000000000000000000000000D4 :108CA00000000000000000000000000000000000C4 -:108CB0000000000000000000010000800000000033 -:108CC000080000000000000000000000000000009C -:108CD0000000000000000000000001000080000013 -:108CE0000000000000000000000000000000000084 -:108CF0000000000000000000000000000000000074 +:108CB00000000000000000000000000000000000B4 +:108CC00000000000000000000000000000000000A4 +:108CD0000000000000000000000000000000000094 +:108CE0000000000000000000000000000040000044 +:108CF00000000000000000000000004000400000F4 :108D00000000000000000000000000000000000063 :108D10000000000000000000000000000000000053 :108D20000000000000000000000000000000000043 -:108D3000000000000000000000002000000400000F +:108D30000000000000000000000000000000000033 :108D40000000000000000000000000000000000023 -:108D500000000000000000000000000020000004EF +:108D50000000000000000000000000000000000013 :108D60000000000000000000000000000000000003 :108D700000000000000000000000000000000000F3 :108D800000000000000000000000000000000000E3 :108D900000000000000000000000000000000000D3 :108DA00000000000000000000000000000000000C3 -:108DB0000000000000009000000000000000000023 +:108DB00000000000000000000000000000000000B3 :108DC00000000000000000000000000000000000A3 -:108DD0000000000000000000900000000000000003 +:108DD0000000000000000000000000000000000093 :108DE0000000000000000000000000000000000083 :108DF0000000000000000000000000000000000073 :108E00000000000000000000000000000000000062 @@ -39157,7 +39157,7 @@ :108EA00000000000000000000000000000000000C2 :108EB00000000000000000000000000000000000B2 :108EC00000000000000000000000000000000000A2 -:108ED0000000000000000000000082000000000010 +:108ED0000000000000000000000000000000000092 :108EE0000000000000000000000000000000000082 :108EF0000000000000000000000000000000000072 :108F00000000000000000000000000000000000061 @@ -39172,74 +39172,74 @@ :108F900000000000000000000000000000000000D1 :108FA00000000000000000000000000000000000C1 :108FB00000000000000000000000000000000000B1 -:108FC00001000000000000000000000000000000A0 +:108FC00000000000000000000000000000000000A1 :108FD0000000000000000000000000000000000091 -:108FE0000000010000000000000000000000000080 +:108FE0000000000000000000000000000000000081 :108FF0000000000000000000000000000000000071 :109000000000000000000000000000000000000060 :109010000000000000000000000000000000000050 :109020000000000000000000000000000000000040 :109030000000000000000000000000000000000030 -:1090400000001100210000000000000000000000EE +:109040000000000000000000000000000000000020 :109050000000000000000000000000000000000010 -:1090600000000000110021000000000000000000CE +:109060000000000000000000000000000000000000 :1090700000000000000000000000000000000000F0 :1090800000000000000000000000000000000000E0 :1090900000000000000000000000000000000000D0 :1090A00000000000000000000000000000000000C0 :1090B00000000000000000000000000000000000B0 -:1090C0000000000000410900000300000000000053 +:1090C00000000000000000000000000000000000A0 :1090D0000000000000000000000000000000000090 -:1090E00000000000000000410900000300800000B3 +:1090E0000000000000000000000000000000000080 :1090F0000000000000000000000000000000000070 :10910000000000000000000000000000000000005F :10911000000000000000000000000000000000004F :10912000000000000000000000000000000000003F :10913000000000000000000000000000000000002F -:10914000000000000000000101000000000000001D +:10914000000000000000000000000000000000001F :10915000000000000000000000000000000000000F -:109160000000000000000000000101000000008875 +:1091600000000000000000000000000000000000FF :1091700000000000000000000000000000000000EF :1091800000000000000000000000000000000000DF :1091900000000000000000000000000000000000CF :1091A00000000000000000000000000000000000BF :1091B00000000000000000000000000000000000AF -:1091C0000000000000000000000088000000010016 +:1091C000000000000000000000000000000000009F :1091D000000000000000000000000000000000008F -:1091E00000000000000000000000000088000000F7 -:1091F000010000000000000000000000000000006E +:1091E000000000000000000000000000000000007F +:1091F000000000000000000000000000000000006F :10920000000000000000000000000000000000005E :10921000000000000000000000000000000000004E :10922000000000000000000000000000000000003E :10923000000000000000000000000000000000002E :10924000000000000000000000000000000000001E -:1092500041000000000000000000000000000000CD +:10925000000000000000000000000000000000000E :1092600000000000000000000000000000000000FE -:1092700000004100000000000000000000000000AD +:1092700000000000000000000000000000000000EE :1092800000000000000000000000000000000000DE :1092900000000000000000000000000000000000CE :1092A00000000000000000000000000000000000BE :1092B00000000000000000000000000000000000AE -:1092C000000000000000000000000000000000118D +:1092C000000000000000000000000000000000009E :1092D000000000000000000000000000000000008E :1092E000000000000000000000000000000000007E -:1092F0000011050000000000000000000000000058 +:1092F000000000000000000000000000000000006E :10930000000000000000000000000000000000005D :10931000000000000000000000000000000000004D :10932000000000000000000000000000000000003D :10933000000000000000000000000000000000002D :10934000000000000000000000000000000000001D -:10935000000100000000000000000000000000000C +:10935000000000000000000000000000000000000D :1093600000000000000000000000000000000000FD -:1093700000000001000000000000000000000000EC +:1093700000000000000000000000000000000000ED :1093800000000000000000000000000000000000DD :1093900000000000000000000000000000000000CD :1093A00000000000000000000000000000000000BD :1093B00000000000000000000000000000000000AD :1093C000000000000000000000000000000000009D -:1093D000000000E00000810A000000000000000022 +:1093D000000000000000000000000000000000008D :1093E000000000000000000000000000000000007D -:1093F0000000000000E000008141000000000000CB +:1093F000000000000000000000000000000000006D :10940000000000000000000000000000000000005C :10941000000000000000000000000000000000004C :10942000000000000000000000000000000000003C @@ -39277,18 +39277,18 @@ :10962000000000000000000000000000000000003A :10963000000000000000000000000000000000002A :10964000000000000000000000000000000000001A -:109650000000000000000000000000600006000C98 +:10965000000000000000000000000000000000000A :1096600000000000000000000000000000000000FA -:1096700000000000000000000000000000400006A4 -:10968000000C0000000000000000000000000000CE +:1096700000000000000000000000000000000000EA +:1096800000000000000000000000000000000000DA :1096900000000000000000000000000000000000CA :1096A00000000000000000000000000000000000BA :1096B00000000000000000000000000000000000AA :1096C000000000000000000000000000000000009A :1096D000000000000000000000000000000000008A -:1096E000FFFF00000000000000000000000000007C +:1096E000000000000000000000000000000000007A :1096F000000000000000000000000000000000006A -:109700000F0FFFFF0000000000000000000000003D +:109700000000000000000000000000000000000059 :109710000000000000000000000000000000000049 :109720000000000000000000000000000000000039 :109730000000000000000000000000000000000029 @@ -39296,54 +39296,54 @@ :109750000000000000000000000000000000000009 :1097600000000000000000000000000000000000F9 :1097700000000000000000000000000000000000E9 -:1097800000000F0F000000000000000000000000BB +:1097800000000000000000000000000000000000D9 :1097900000000000000000000000000000000000C9 :1097A00000000000000000000000000000000000B9 :1097B00000000000000000000000000000000000A9 :1097C0000000000000000000000000000000000099 :1097D0000000000000000000000000000000000089 -:1097E00000000000F0F00000000000000000000099 +:1097E0000000000000000000000000000000000079 :1097F0000000000000000000000000000000000069 -:10980000000000000000F0F0000000000000000078 +:109800000000000000000000000000000000000058 :109810000000000000000000000000000000000048 :109820000000000000000000000000000000000038 :109830000000000000000000000000000000000028 :109840000000000000000000000000000000000018 :109850000000000000000000000000000000000008 -:10986000000000000000F0F0000000000000000018 +:1098600000000000000000000000000000000000F8 :1098700000000000000000000000000000000000E8 -:109880000000000000000000F0F0000000000000F8 +:1098800000000000000000000000000000000000D8 :1098900000000000000000000000000000000000C8 :1098A00000000000000000000000000000000000B8 :1098B00000000000000000000000000000000000A8 -:1098C0000000000020000000000020000000000058 -:1098D0000004000000020002000000000000000080 -:1098E0000000000020000000000020000002000234 -:1098F0000000000000020000000000000004000062 -:109900000000000000002000000000002000000017 +:1098C0000000000000000000000000040000000094 +:1098D0000000000000000000000000000000400048 +:1098E0000000000000000000000000000000000078 +:1098F0000000000000000000000000000000000068 +:109900002000000000000000000000000000000037 :109910000000000000000000000000000000000047 -:1099200000000000000020000000000020000000F7 -:1099300000000000000040020000000000000000E5 -:1099400000000000000000000000000000004000D7 -:1099500000000000000040000000000000000000C7 -:109960000040000000000000000000000000400077 -:1099700000000000000000004000000000000000A7 -:1099800000000002000000000000000000000002D3 -:1099900000000000000000000000000000000002C5 -:1099A00000000000000000020000000000020000B3 -:1099B0000000000000000002000000000000001095 +:109920002000000000000000000000000000000017 +:109930000000000000000000000000000000000027 +:109940000000000000000000000000000000000017 +:109950000000000000000000000000000000000007 +:1099600000000000000000000000000000000000F7 +:1099700000000000000000000000000000000000E7 +:1099800000000000000000000000000000000000D7 +:1099900000000000000000000000000000000000C7 +:1099A00000000000000000000000000000000000B7 +:1099B0000000000000020000000000000000001095 :1099C0000000000000000000000000000000000097 -:1099D0000000000000000000000000000000001077 +:1099D0000000000000000000000000000000000087 :1099E0000000000000000000000000000000000077 -:1099F0000000000000000000000001000000000066 -:109A00000010000000000000001000000000000036 +:1099F0000000000000000000000000000000000067 +:109A00000000000000000000000000000000000056 :109A10000000000000000000000000000000000046 -:109A20000000000000000000001000000000000026 +:109A20000000000000000000000000000000000036 :109A30000000000000000000000000000000000026 :109A40000000000000000000000000000000000016 :109A50000000000000000000000000000000000006 :109A600000000000000000000000000000000000F6 -:109A700000000000000000000000000010000000D6 +:109A700000000000000000000000000000000000E6 :109A800000000000000000000000000000000000D6 :109A900000000000000000000000000000000000C6 :109AA00000000000000000000000000000000000B6 @@ -39368,15 +39368,15 @@ :109BD0000000000000000000000000000000000085 :109BE0000000000000000000000000000000000075 :109BF0000000000000000000000000000000000065 -:109C000000000000000001000080000000000000D3 -:109C10000000000000000000000000000000000044 +:109C00000000000000000000000000000000000054 +:109C1000000500000000000000000000000000003F :109C20000000000000000000000000000000000034 :109C30000000000000000000000000000000000024 :109C40000000000000000000000000000000000014 :109C50000000000000000000000000000000000004 :109C600000000000000000000000000000000000F4 :109C700000000000000000000000000000000000E4 -:109C800000000000000000002000000400000000B0 +:109C800000000000000000000000000000000000D4 :109C900000000000000000000000000000000000C4 :109CA00000000000000000000000000000000000B4 :109CB00000000000000000000000000000000000A4 @@ -39384,25 +39384,25 @@ :109CD0000000000000000000000000000000000084 :109CE0000000000000000000000000000000000074 :109CF0000000000000000000000000000000000064 -:109D000000009000000000000000000000000000C3 +:109D00000000000000000000000000000000000053 :109D10000000000000000000000000000000000043 :109D20000000000000000000000000000000000033 :109D30000000000000000000000000000000000023 :109D40000000000000000000000000000000000013 :109D50000000000000000000000000000000000003 :109D600000000000000000000000000000000000F3 -:109D70000000000000C0000000000084000000009F +:109D700000000000000000000000000000000000E3 :109D800000000000000000000000000000000000D3 -:109D900000000000000000C000000000008400007F +:109D900000000000000000000000000000000000C3 :109DA00000000000000000000000000000000000B3 :109DB00000000000000000000000000000000000A3 :109DC0000000000000000000000000000000000093 :109DD0000000000000000000000000000000000083 :109DE0000000000000000000000000000000000073 :109DF0000000000000000000000000000000000063 -:109E00000000000000020000000000000000000050 +:109E00000000000000000000000000000000000052 :109E10000000000000000000000000000000000042 -:109E20000000000000000002000000000000000030 +:109E200000400000000000000000000000000000F2 :109E30000000000000000000000000000000000022 :109E40000000000000000000000000000000000012 :109E50000000000000000000000000000000000002 @@ -39416,7 +39416,7 @@ :109ED0000000000000000000000000000000000082 :109EE0000000000000000000000000000000000072 :109EF0000000000000000000000000000000000062 -:109F00000000000000000000000000000000010050 +:109F00000000000000000000000000000000000051 :109F10000000000000000000000000000000000041 :109F20000000000000000000000000000000000031 :109F30000000000000000000000000000000000021 @@ -39425,7 +39425,7 @@ :109F600000000000000000000000000000000000F1 :109F700000000000000000000000000000000000E1 :109F800000000000000000000000000000000000D1 -:109F9000110021000000000000000000000000008F +:109F900000000000000000000000000000000000C1 :109FA00000000000000000000000000000000000B1 :109FB00000000000000000000000000000000000A1 :109FC0000000000000000000000000000000000091 @@ -39433,7 +39433,7 @@ :109FE0000000000000000000000000000000000071 :109FF0000000000000000000000000000000000061 :10A000000000000000000000000000000000000050 -:10A010000000004109000003008000000000000073 +:10A010000000000000000000000000000000000040 :10A020000000000000000000000000000000000030 :10A030000000000000000000000000000000000020 :10A040000000000000000000000000000000000010 @@ -39441,7 +39441,7 @@ :10A0600000000000000000000000000000000000F0 :10A0700000000000000000000000000000000000E0 :10A0800000000000000000000000000000000000D0 -:10A090000000000000010100000000880000000036 +:10A0900000000000000000000000000000000000C0 :10A0A00000000000000000000000000000000000B0 :10A0B00000000000000000000000000000000000A0 :10A0C0000000000000000000000000000000000090 @@ -39449,7 +39449,7 @@ :10A0E0000000000000000000000000000000000070 :10A0F0000000000000000000000000000000000060 :10A10000000000000000000000000000000000004F -:10A1100000000000000000008800000001000000B6 +:10A11000000000000000000000000000000000003F :10A12000000000000000000000000000000000002F :10A13000000000000000000000000000000000001F :10A14000000000000000000000000000000000000F @@ -39457,7 +39457,7 @@ :10A1600000000000000000000000000000000000EF :10A1700000000000000000000000000000000000DF :10A1800000000000000000000000000000000000CF -:10A19000000000000000000000000000000041007E +:10A1900000000000000000000000000000000000BF :10A1A00000000000000000000000000000000000AF :10A1B000000000000000000000000000000000009F :10A1C000000000000000000000000000000000008F @@ -39465,16 +39465,16 @@ :10A1E000000000000000000000000000000000006F :10A1F000000000000000000000000000000000005F :10A20000000000000000000000000000000000004E -:10A21000000000000000000000000000001100002D -:10A22000100000000000000000000000000000001E +:10A21000000000000000000000000000000000003E +:10A22000000000000000000000000000000000002E :10A23000000000000000000000000000000000001E :10A24000000000000000000000000000000000000E :10A2500000000000000000000000000000000000FE :10A2600000000000000000000000000000000000EE :10A2700000000000000000000000000000000000DE :10A2800000000000000000000000000000000000CE -:10A2900000000000000000000000000000000001BD -:10A2A00000000100000000000000000000000000AD +:10A2900000000000000000000000000000000000BE +:10A2A00000000000000000000000000000000000AE :10A2B000000000000000000000000000000000009E :10A2C000000000000000000000000000000000008E :10A2D000000000000000000000000000000000007E @@ -39482,7 +39482,7 @@ :10A2F000000000000000000000000000000000005E :10A30000000000000000000000000000000000004D :10A31000000000000000000000000000000000003D -:10A3200000E000008141000000000000000000008B +:10A32000000000000000000000000000000000002D :10A33000000000000000000000000000000000001D :10A34000000000000000000000000000000000000D :10A3500000000000000000000000000000000000FD @@ -39530,7 +39530,7 @@ :10A5F000000000000000000000000000000000005B :10A60000000000000000000000000000000000004A :10A61000000000000000000000000000000000003A -:10A620000000000000000000000000400006000CD8 +:10A62000000000000000000000000000000000002A :10A63000000000000000000000000000000000001A :10A64000000000000000000000000000000000000A :10A6500000000000000000000000000000000000FA @@ -39538,8 +39538,8 @@ :10A6700000000000000000000000000000000000DA :10A6800000000000000000000000000000000000CA :10A6900000000000000000000000000000000000BA -:10A6A00000000000000000000000000000003C3C32 -:10A6B000FFFF00000000000000000000000000009C +:10A6A00000000000000000000000000000000000AA +:10A6B000000000000000000000000000000000009A :10A6C000000000000000000000000000000000008A :10A6D000000000000000000000000000000000007A :10A6E000000000000000000000000000000000006A @@ -39547,7 +39547,7 @@ :10A700000000000000000000000000000000000049 :10A710000000000000000000000000000000000039 :10A720000000000000000000000000000000000029 -:10A730003C3C0000000000000000000000000000A1 +:10A730000000000000000000000000000000000019 :10A740000000000000000000000000000000000009 :10A7500000000000000000000000000000000000F9 :10A7600000000000000000000000000000000000E9 @@ -39555,7 +39555,7 @@ :10A7800000000000000000000000000000000000C9 :10A7900000000000000000000000000000000000B9 :10A7A00000000000000000000000000000000000A9 -:10A7B00000000000F0F000000000000000000000B9 +:10A7B0000000000000000000000000000000000099 :10A7C0000000000000000000000000000000000089 :10A7D0000000000000000000000000000000000079 :10A7E0000000000000000000000000000000000069 @@ -39563,40 +39563,40 @@ :10A800000000000000000000000000000000000048 :10A810000000000000000000000000000000000038 :10A820000000000000000000000000000000000028 -:10A83000000000000000F0F0000000000000000038 +:10A830000000000000000000000000000000000018 :10A840000000000000000000000000000000000008 :10A8500000000000000000000000000000000000F8 :10A8600000000000000000000000000000000000E8 -:10A870000000200000000000000020000000000098 -:10A880002000200000000000000020002000000048 -:10A890000000200000000000000020000000000078 -:10A8A00020008800000000000000000020000000E0 -:10A8B0000000000300000000000000002100000074 -:10A8C000000000802000000000000000C000200008 -:10A8D0000000000004000000000000000000000074 -:10A8E0000000000000000000000000002000200028 -:10A8F0000000000000000000000000000000000058 +:10A8700000000000000000000000000000000004D4 +:10A8800020000000000000000000400040004004E4 +:10A890004000000000000000000000000000000474 +:10A8A0002004000000000000000020002000200420 +:10A8B0002000000000000000000000000000000078 +:10A8C0000004200400000000000000002000200020 +:10A8D0002004200000000000000000000000000034 +:10A8E0000000200000000000000000002000200008 +:10A8F0002000200000000000000000000000000018 :10A900000000000000000000000000000000000047 :10A910000000000000000000000000000000000037 -:10A9200000000000000000000000000000004000E7 -:10A930000002000000000000000000000002020011 -:10A9400000000002004000020000000000000000C3 +:10A920000000000000000000000000000000000027 +:10A930000000000000000000000000000000000017 +:10A9400000000000000000000000000000004000C7 :10A9500000000000000000000000000000000000F7 -:10A9600000000002000200000000000000000000E3 +:10A9600000000000004000000000000000000000A7 :10A9700000000000000000000000000000000000D7 :10A9800000000000000000000000000000000000C7 :10A9900000000000000000000000000000000000B7 :10A9A00000000000000000000000000000000000A7 :10A9B0000000000000000000000000000000000097 -:10A9C0000000010001000000000000000000000085 -:10A9D0000000000000000000000000000000000077 +:10A9C0000000000000000000000000000000000087 +:10A9D0000000000000000000000000400000000037 :10A9E0000000000000000000000000000000000067 -:10A9F000000000000000080000000000000000004F -:10AA0000040000000000000800000000000000003A -:10AA1000000000000000000800000000000000002E -:10AA20000000000000000004000000000000000022 -:10AA30000000000000000004000000000000000012 -:10AA40000000000002000200000000000000000002 +:10A9F0000000000000000000000000000000000057 +:10AA00000000000000000000000000000000000046 +:10AA10000000000000000000000000000000000036 +:10AA20000000000000000000000000000000000026 +:10AA30000000000000000000000000000000000016 +:10AA40000000000000000000000000000000000006 :10AA500000000000000000000000000000000000F6 :10AA600000000000000000000000000000000000E6 :10AA700000000000000000000000000000000000D6 @@ -39604,9 +39604,9 @@ :10AA900000000000000000000000000000000000B6 :10AAA00000000000000000000000000000000000A6 :10AAB0000000000000000000000000000000000096 -:10AAC0000000000000000000000040000400000042 +:10AAC0000000000000000000000000000000000086 :10AAD0000000000000000000000000000000000076 -:10AAE0000000000000000000000000004000000026 +:10AAE0000000000000000000000000000200000064 :10AAF0000000000000000000000000000000000056 :10AB00000000000000000000000000000000000045 :10AB10000000000000000000000000000000000035 @@ -39615,173 +39615,173 @@ :10AB40000000000000000000000000000000000005 :10AB500000000000000000000000000000000000F5 :10AB600000000000000000000000000000000000E5 -:10AB70000000000000000000000000000000820053 -:10AB800000000000000000400800000000008200FB -:10AB90000000000000000000000000000100820032 -:10ABA00000000000000000400000010000800000E4 +:10AB700000000000000000000000000000000000D5 +:10AB800000000000000000000000000000000000C5 +:10AB900000000000000000000000000000000000B5 +:10ABA00000000000000000000000000000000000A5 :10ABB0000000000000000000000000000000000095 -:10ABC0000000000000000000000000000000010084 -:10ABD0000000000000000000000000000000000075 -:10ABE0000000000000000000000000000000000065 -:10ABF000A0008400000000000000000000000040F1 +:10ABC0000000000000000000000000000000000085 +:10ABD0000000000000400000000000000000000035 +:10ABE0000000000000000004000000000000000061 +:10ABF000000000000004000400000000000000004D :10AC00000000000000000000000000000000000044 -:10AC10000000000000000000000000000000040030 -:10AC20000000000000000000000000002000000400 +:10AC10000000000000000000000000000000000034 +:10AC20000000000000000000000000000000000024 :10AC30000000000000000000000000000000000014 :10AC40000000000000000000000000000000000004 -:10AC500004000000000000000000000000000000F0 +:10AC500000000000004000000000000000000000B4 :10AC600000000000000000000000000000000000E4 :10AC700000000000000000000000000000000000D4 -:10AC800000200000000000000000000000000000A4 -:10AC90000000000000000000000000000000002094 -:10ACA0000000000000000000900000000000000014 -:10ACB0000000080000000000000008000000000084 -:10ACC000C000000008000000C000C000000000003C +:10AC800000000000000000000000000000000000C4 +:10AC900000000000000000000000000000000000B4 +:10ACA00000000000000000000000000000000000A4 +:10ACB0000000000000000000000000000000000094 +:10ACC0000000000000000000000000000000000084 :10ACD0000000000000000000000000000000000074 :10ACE0000000000000000000000000000000000064 -:10ACF000000000000000000000000000A0000000B4 +:10ACF0000000000000000000000000000000000054 :10AD00000000000000000000000000000000000043 :10AD10000000000000000000000000000000000033 -:10AD20000001000000000000000000000000000022 +:10AD20000000000000000000000000000000000023 :10AD30000000000000000000000000000000000013 -:10AD4000000000C0000000000000008400000000BF -:10AD500000000000080000000000000000000000EB +:10AD40000000000000000000000000000000000003 +:10AD500000000000000000000000000000000000F3 :10AD600000000000000000000000000000000000E3 :10AD700000000000000000000000000000000000D3 :10AD800000000000000000000000000000000000C3 -:10AD90000000000000000000000000000000008033 -:10ADA00000000000000000000000000002000100A0 +:10AD900000000000000000000000000000000000B3 +:10ADA00000000000000000000000000000000000A3 :10ADB0000000000000000000000000000000000093 :10ADC0000000000000000000000000000000000083 -:10ADD0000000000000020000000000000000000071 +:10ADD0000000000000000000000000000000000073 :10ADE0000000000000000000000000000000000063 -:10ADF0000800000000000000080000000000000043 +:10ADF0000000000000000000000000000000000053 :10AE00000000000000000000000000000000000042 :10AE10000000000000000000000000000000000032 -:10AE200000400000000000000000000000000000E2 -:10AE30001000000000000000000000000000000002 +:10AE20000000000000000000000000000000000022 +:10AE30000000000000000000000000000000000012 :10AE40000000000000000000000000000000000002 :10AE500000000000000000000000000000000000F2 :10AE600000000000000000000000000000000000E2 -:10AE700000000000000000000000000000000000D2 +:10AE70000000000000000000000000400000004052 :10AE800000000000000000000000000000000000C2 :10AE900000000000000000000000000000000000B2 -:10AEA00000000000904000000000000000000000D2 -:10AEB0000000010000000000000000000000000091 +:10AEA00000000000000000000000000000000000A2 +:10AEB0000000000000000000000000000000000092 :10AEC0000000000000000000000000000000000082 -:10AED00000000000000000900000000000000000E2 +:10AED0000000000000000000000000000000000072 :10AEE0000000000000000000000000000000000062 :10AEF0000000000000000000000000000000000052 :10AF00000000000000000000000000000000000041 :10AF10000000000000000000000000000000000031 -:10AF20000000000011008000000000000000000090 -:10AF300000000000110021000000000000000000DF +:10AF20000000000000000000000000000000000021 +:10AF30000000000000000000000000000000000011 :10AF40000000000000000000000000000000000001 -:10AF50000000000000000000008000000000000071 +:10AF500000000000000000000000000000000000F1 :10AF600000000000000000000000000000000000E1 :10AF700000000000000000000000000000000000D1 :10AF800000000000000000000000000000000000C1 :10AF900000000000000000000000000000000000B1 -:10AFA00000000000000000000080000000800000A1 -:10AFB0000000000000000041090000030000000044 +:10AFA00000000000000000000000000000000000A1 +:10AFB0000000000000000000000000000000000091 :10AFC0000000000000000000000000000000000081 -:10AFD0000000000000000000000000800000008071 +:10AFD0000000000000000000000000000000000071 :10AFE0000000000000000000000000000000000061 :10AFF0000000000000000000000000000000000051 :10B000000000000000000000000000000000000040 :10B010000000000000000000000000000000000030 -:10B02000000000000000000000000020000000C040 -:10B03000000000000000000000010100000000000E +:10B020000000000000000000000000000000000020 +:10B030000000000000000000000000000000000010 :10B040000000000000000000000000000000000000 -:10B0500000000000000000000000000000020000EE -:10B0600000020000000000000000000000000000DE +:10B0500000000000000000000000000000000000F0 +:10B0600000000000000000000000000000000000E0 :10B0700000000000000000000000000000000000D0 :10B0800000000000000000000000000000000000C0 :10B0900000000000000000000000000000000000B0 -:10B0A000000000000000000000000100008888008F -:10B0B0000100000000000000000000008800000007 +:10B0A00000000000000000000000000000000000A0 +:10B0B0000000000000000000000000000000000090 :10B0C0000000000000000000000000000000000080 :10B0D0000000000000000000000000000000000070 -:10B0E000C090000000000000000000000000000010 +:10B0E0000000000000000000000000000000000060 :10B0F0000000000000000000000000000000000050 :10B10000000000000000000000000000000000003F :10B11000000000000000000000000000000000002F -:10B12000000000000000000000000000410000805E -:10B130000000090000000000000000000000000006 -:10B1400000000500000000000000000000000000FA -:10B1500000000000000000000000000000002000CF -:10B1600000008080000000000000000000000000DF +:10B12000000000000000000000000000000000001F +:10B13000000000000000000000000000000000000F +:10B1400000000000000000000000000000000000FF +:10B1500000000000000000000000000000000000EF +:10B1600000000000000000000000000000000000DF :10B1700000000000000000000000000000000000CF :10B1800000000000000000000000000000000000BF :10B1900000000000000000000000000000000000AF -:10B1A000000000000000000000000000000000118E -:10B1B000000000800000000000000000000000000F -:10B1C000001100000000000000000000000000006E +:10B1A000000000000000000000000000000000009F +:10B1B000000000000000000000000000000000008F +:10B1C000000000000000000000000000000000007F :10B1D000000000000000000000000000000000006F -:10B1E00000118000000000000000000000000000CE +:10B1E000000000000000000000000000000000005F :10B1F000000000000000000000000000000000004F :10B20000000000000000000000000000000000003E :10B21000000000000000000000000000000000002E :10B22000000000000000000000000000000000001E -:10B2300000010000004000000000000000000000CD -:10B2400000000001000000000000000000000000FD +:10B23000000000000000000000000000000000000E +:10B2400000000000000000000000000000000000FE :10B2500000000000000000000000000000000000EE -:10B260000000000120000088000000000000000035 +:10B2600000000000000000000000000000000000DE :10B2700000000000000000000000000000000000CE :10B2800000000000000000000000000000000000BE :10B2900000000000000000000000000000000000AE :10B2A000000000000000000000000000000000009E -:10B2B00000000000000007008221000000000000E4 -:10B2C0000000000000E0000081000000000000001D +:10B2B000000000000000000000000000000000008E +:10B2C000000000000000000000000000000000007E :10B2D000000000000000000000000000000000006E -:10B2E0000000000000000000070000060000000051 +:10B2E000000000000000000000000000000000005E :10B2F000000000000000000000000000000000004E :10B30000000000000000000000000000000000003D :10B31000000000000000000000000000000000002D :10B32000000000000000000000000000000000001D -:10B330000000000000000000F0F00000000000002D +:10B33000000000000000000000000000000000000D :10B3400000000000000000000000000000000000FD :10B3500000000000000000000000000000000000ED -:10B3600000000000000000FF000000FF00000000DF +:10B3600000000000000000000000000000000000DD :10B3700000000000000000000000000000000000CD :10B3800000000000000000000000000000000000BD :10B3900000000000000000000000000000000000AD :10B3A000000000000000000000000000000000009D -:10B3B00000000000000000000000F0F000000000AD +:10B3B000000000000000000000000000000000008D :10B3C000000000000000000000000000000000007D :10B3D000000000000000000000000000000000006D -:10B3E000000000000000000000FF000000FF00005F +:10B3E000000000000000000000000000000000005D :10B3F000000000000000000000000000000000004D :10B40000000000000000000000000000000000003C :10B41000000000000000000000000000000000002C :10B42000000000000000000000000000000000001C -:10B4300000000000000000000000FF000000FFFF0F +:10B43000000000000000000000000000000000000C :10B4400000000000000000000000000000000000FC :10B4500000000000000000000000000000000000EC -:10B46000000000000000000000000000FF000000DD -:10B47000FFFF0000000000000000000000000000CE +:10B4600000000000000000000000000000000000DC +:10B4700000000000000000000000000000000000CC :10B4800000000000000000000000000000000000BC :10B4900000000000000000000000000000000000AC :10B4A000000000000000000000000000000000009C -:10B4B000000000000000000000000000FF0000008D +:10B4B000000000000000000000000000000000008C :10B4C000000000000000000000000000000000007C :10B4D000000000000000000000000000000000006C -:10B4E0000000000000000000000000000000FF005D +:10B4E000000000000000000000000000000000005C :10B4F000000000000000000000000000000000004C :10B50000000000000000000000000000000000003B :10B51000000000000000000000000000000000002B :10B52000000000000000000000000000000000001B -:10B5300000000000000000000000000005002A00DC -:10B54000054000A8000000000000000000600006A8 -:10B55000000C0000000000000000000000000000DF -:10B5600000000000000000000000000000001500C6 -:10B570002A00054000A800000000000000000000B4 +:10B53000000000000000000000000000000000000B +:10B5400000000000000000000000000000000000FB +:10B5500000000000000000000000000000000000EB +:10B5600000000000000000000000000000000000DB +:10B5700000000000000000000000000000000000CB :10B5800000000000000000000000000000000000BB :10B5900000000000000000000000000000000000AB :10B5A000000000000000000000000000000000009B :10B5B000000000000000000000000000000000008B :10B5C000000000000000000000000000000000007B -:10B5D0000000FFFF0000000000000000000000006D +:10B5D000000000000000000000000000000000006B :10B5E000000000000000000000000000000000005B :10B5F000000000000000000000000000000000004B :10B60000000000000000000000000000000000003A @@ -39797,7 +39797,7 @@ :10B6A000000000000000000000000000000000009A :10B6B000000000000000000000000000000000008A :10B6C000000000000000000000000000000000007A -:10B6D000000000000000F0F000000000000000008A +:10B6D000000000000000000000000000000000006A :10B6E000000000000000000000000000000000005A :10B6F000000000000000000000000000000000004A :10B700000000000000000000000000000000000039 @@ -39805,112 +39805,112 @@ :10B720000000000000000000000000000000000019 :10B730000000000000000000000000000000000009 :10B7400000000000000000000000000000000000F9 -:10B750000000000000000000F0F000000000000009 +:10B7500000000000000000000000000000000000E9 :10B7600000000000000000000000000000000000D9 :10B7700000000000000000000000000000000000C9 :10B7800000000000000000000000000000000000B9 :10B7900000000000000000000000000000000000A9 :10B7A0000000000000000000000000000000000099 -:10B7B00040000000000010000000200440041000C1 -:10B7C0000000200000002000000000000000100029 -:10B7D00020000000000000008800200420008800F5 -:10B7E0000000200000000000000000000000000138 -:10B7F00020002000000000000000200020002000A9 -:10B800000400000020000004000000000000000010 -:10B8100020002000000000000000000020002000A8 -:10B8200020000000200000000000000000000000D8 -:10B8300000000000000000004000000000000000C8 -:10B840004000000000000000000000004000000078 -:10B850008000000000000000200000000000000048 -:10B8600020000000000000000000000000000000B8 +:10B7B0000000000000000000000000000000000089 +:10B7C0000000000000000000000000000000000079 +:10B7D0000000000000040000000000000000000065 +:10B7E0000000000000000000000000000000000059 +:10B7F00000000000000000000000000000008200C7 +:10B800000000000000000000000000000000000038 +:10B810000000000000000000000000000000000028 +:10B820000000000000000000000000000000000018 +:10B830000000000000000000000000000002000006 +:10B8400000000000000000000000400000000000B8 +:10B8500000000000000000000000000000000000E8 +:10B8600000000000000000000000000000000000D8 :10B8700000000000000000000000000000000000C8 :10B8800000000000000000000000000000000000B8 :10B8900000000000000000000000000000000000A8 -:10B8A0000000000000000000000000000000000098 +:10B8A0000000000000000000000240000000000056 :10B8B0000000000000000000000000000000000088 -:10B8C0000200000000000000021000000000000064 +:10B8C0000000000000000000000000000000000078 :10B8D0000000000000000000000000000000000068 -:10B8E0000000000000000000001000000000000048 +:10B8E0000000000000000000000000000000000058 :10B8F0000000000000000000000000000000000048 :10B900000000000000000000000000000000000037 -:10B910000000000000002000000000000000000007 -:10B920000000000000000000000090000000000087 -:10B9300000000000000000000000000800080400F3 -:10B9400000000008000000000000000800080000DF -:10B950000000000800000000000000080084000053 -:10B960000000008400000000000000080008000043 -:10B9700000000008000000000000000000080000B7 -:10B980000000000000080000000000000008008423 -:10B99000000000000010000000000000000800008F -:10B9A000000000000008000000000000008400000B -:10B9B000000000000008000000000000000000007F +:10B910000000000000000000000000000000000027 +:10B920000000000000000000000000000000000017 +:10B930000000000000000000000000000000000007 +:10B9400000000000000000000000000000000000F7 +:10B9500000000000000000000000000000000000E7 +:10B9600000000000000000000000000000000000D7 +:10B9700000000000000000000000000000000000C7 +:10B9800000000000000000000000000000000000B7 +:10B9900000000000000000000000000000000000A7 +:10B9A0000000000000000000000000000000000097 +:10B9B0000000000000000000000000000000000087 :10B9C0000000000000000000000000000000000077 :10B9D0000000000000000000000000000000000067 -:10B9E0000000000000000000000000000000000354 -:10B9F0000000000000100000000000000000000037 +:10B9E0000000000000000000000000000000000057 +:10B9F0000000000000000000000000000000000047 :10BA00000000000000000000000000000000000036 :10BA10000000000000000000000000000000000026 -:10BA20000003000000000000000000000000000013 +:10BA20000000000000000000000000000000000016 :10BA30000000000000000000000000000000000006 :10BA400000000000000000000000000000000000F6 :10BA500000000000000000000000000000000000E6 :10BA600000000000000000000000000000000000D6 -:10BA700000000000000000000000210000000000A5 -:10BA800000000000000000000000080000000000AE +:10BA700000000000000000000000000000000000C6 +:10BA800000000000000000000000000000000000B6 :10BA900000000000000000000000000000000000A6 -:10BAA000000000000800000000000000000000008E +:10BAA0000000000000000000000000000000000096 :10BAB0000000000000000000000000000000000086 -:10BAC000000000000000000000000800000000006E -:10BAD000000000008800000000008200000001005B -:10BAE00000800000000000000009000000000000CD +:10BAC0000000000000000000000000000000000076 +:10BAD0000000000000000000000000000000000066 +:10BAE0000000000000000000000000000000000056 :10BAF0000000000000000000000000000000000046 -:10BB00000000000000000000000000000000000035 +:10BB000000000000000000410000000400000000F0 :10BB10000000000000000000000000000000000025 :10BB20000000000000000000000000000000000015 -:10BB30000000000000000000000000000000000005 +:10BB300000000011000000000000000000000000F4 :10BB400000000000000000000000000000000000F5 :10BB500000000000000000000000000000000000E5 -:10BB600020000004000000000000000800000000A9 +:10BB600000000000000000000000000000000000D5 :10BB700000000000000000000000000000000000C5 :10BB800000000000000000000000000000000000B5 -:10BB9000000000000000000000000000000800009D +:10BB900000000000000000000000000000000000A5 :10BBA0000000000000000000000000000000000095 -:10BBB0000000000000000000000000000000000085 +:10BBB00000900000000000000000000000000000F5 :10BBC0000000000000000000000000000000000075 -:10BBD00000000000000000000000000090000000D5 +:10BBD0000000000000000000000000000000000065 :10BBE0000000000000000000000000000000000055 :10BBF0000000000000000000000000000000000045 -:10BC000000000000000000400000000000000000F4 +:10BC00000000000000000000000000000000000034 :10BC10000000000000000000000000000000000024 :10BC20000000000000000000000000000000000014 -:10BC300000000000000000080000000000000000FC +:10BC30000000000000000000000000000000000004 :10BC400000000000000000000000000000000000F4 -:10BC50000000000000000000000000000000008460 -:10BC600000000000000000C0000000000084000090 +:10BC500000000000000000000000000000000000E4 +:10BC600000000000000000000000000000000000D4 :10BC700000000000000000000000000000000000C4 :10BC800000000000000000000000000000000000B4 -:10BC90000084000000000000000000000000000020 +:10BC900000000000000000000000000000000000A4 :10BCA0000000000000000000000000000000000094 :10BCB0000000000000000000000000000000000084 :10BCC0000000000000000000000000000000000074 :10BCD0000000000000000000000000000000000064 -:10BCE0000000000000000000000200000000000052 -:10BCF000000000000000000200000800000000003A +:10BCE0000000000000000000000000000000000054 +:10BCF0000000000000000000000000000000000044 :10BD00000000000000000000000000000000000033 -:10BD10000000000000000000000000020000000021 +:10BD10000000000000000000000000000000000023 :10BD20000000000000000000000000000000000013 -:10BD30000000000000000000000000000000000003 -:10BD400000000000000000000500050000000000E9 +:10BD300000000800000000000000000000000000FB +:10BD400000000000000000000000000000000000F3 :10BD500000000000000000000000000000000000E3 :10BD600000000000000000000000000000000000D3 :10BD700000000000000000000000000000000000C3 :10BD800000000000000000000000000000000000B3 -:10BD900000000000000000000000000000000000A3 +:10BD90000000000020000000000000000000000083 :10BDA0000000000000000000000000000000000093 -:10BDB0000000000000000000000000000000000083 +:10BDB000000000000800000000000000210000005A :10BDC0000000000000000000000000000000000073 :10BDD0000000000000000000000000000000000063 -:10BDE0000000000000000100000000000000000052 +:10BDE0000000000000000000000000000000000053 :10BDF0000000000000000000000000000000000043 :10BE00000000000000000000000000000000000032 :10BE10000000000000000000000000000000000022 @@ -39918,7 +39918,7 @@ :10BE30000000000000000000000000000000000002 :10BE400000000000000000000000000000000000F2 :10BE500000000000000000000000000000000000E2 -:10BE600000000000000000001100210000000000A0 +:10BE600000000000000000000000000000000000D2 :10BE700000000000000000000000000000000000C2 :10BE800000000000000000000000000000000000B2 :10BE900000000000000000000000000000000000A2 @@ -39926,16 +39926,16 @@ :10BEB0000000000000000000000000000000000082 :10BEC0000000000000000000000000000000000072 :10BED0000000000000000000000000000000000062 -:10BEE0000000000000000000000000410900000305 -:10BEF00000800000000000000000000000000000C2 +:10BEE0000000000000000000000000000000000052 +:10BEF0000000000000000000000000000000000042 :10BF00000000000000000000000000000000000031 :10BF10000000000000000000000000000000000021 :10BF20000000000000000000000000000000000011 :10BF30000000000000000000000000000000000001 :10BF400000000000000000000000000000000000F1 :10BF500000000000000000000000000000000000E1 -:10BF600000000000000000000000000000210100AF -:10BF70000000008800000000000000000000000039 +:10BF600000000000000000000000000000000000D1 +:10BF700000000000000000000000000000000000C1 :10BF800000000000000000000000000000000000B1 :10BF900000000000000000000000000000000000A1 :10BFA0000000000000000000000000000000000091 @@ -39943,7 +39943,7 @@ :10BFC0000000000000000000000000000000000071 :10BFD0000000000000000000000000000000000061 :10BFE0000000000000000000000000000000000051 -:10BFF00088000000010000000000000000000000B8 +:10BFF0000000000000000000000000000000000041 :10C000000000000000000000000000000000000030 :10C010000000000000000000000000000000000020 :10C020000000000000000000000000000000000010 @@ -39951,7 +39951,7 @@ :10C0400000000000000000000000000000000000F0 :10C0500000000000000000000000000000000000E0 :10C0600000000000000000000000000000000000D0 -:10C07000000000000000410000000000000000007F +:10C0700000000000000000000000000000000000C0 :10C0800000000000000000000000000000000000B0 :10C0900000000000000000000000000000000000A0 :10C0A0000000000000000000000000000000000090 @@ -39959,7 +39959,7 @@ :10C0C0000000000000000000000000000000000070 :10C0D0000000000000000000000000000000000060 :10C0E0000000000000000000000000000000000050 -:10C0F000000000000011000000000000000000002F +:10C0F0000000000000000000000000000000000040 :10C10000000000000000000000000000000000002F :10C11000000000000000000000000000000000001F :10C12000000000000000000000000000000000000F @@ -39967,7 +39967,7 @@ :10C1400000000000000000000000000000000000EF :10C1500000000000000000000000000000000000DF :10C1600000000000000000000000000000000000CF -:10C1700000000000000000010000000000000000BE +:10C1700000000000000000000000000000000000BF :10C1800000000000000000000000000000000000AF :10C19000000000000000000000000000000000009F :10C1A000000000000000000000000000000000008F @@ -39975,7 +39975,7 @@ :10C1C000000000000000000000000000000000006F :10C1D000000000000000000000000000000000005F :10C1E000000000000000000000000000000000004F -:10C1F000000000000000000000E00000814100009D +:10C1F000000000000000000000000000000000003F :10C20000000000000000000000000000000000002E :10C21000000000000000000000000000000000001E :10C22000000000000000000000000000000000000E @@ -40024,7 +40024,7 @@ :10C4D000000000000000000000000000000000005C :10C4E000000000000000000000000000000000004C :10C4F000000000000000000000000000000000003C -:10C50000000000400006000C0000000000000000D9 +:10C50000000000000000000000000000000000002B :10C51000000000000000000000000000000000001B :10C52000000000000000000000000000000000000B :10C5300000000000000000000000000000000000FB @@ -40032,7 +40032,7 @@ :10C5500000000000000000000000000000000000DB :10C5600000000000000000000000000000000000CB :10C5700000000000000000000000000000000000BB -:10C580000000000000005555FFFF00000000000003 +:10C5800000000000000000000000000000000000AB :10C59000000000000000000000000000000000009B :10C5A000000000000000000000000000000000008B :10C5B000000000000000000000000000000000007B @@ -40040,7 +40040,7 @@ :10C5D000000000000000000000000000000000005B :10C5E000000000000000000000000000000000004B :10C5F000000000000000000000000000000000003B -:10C600000000000000000000555500000000000080 +:10C60000000000000000000000000000000000002A :10C61000000000000000000000000000000000001A :10C62000000000000000000000000000000000000A :10C6300000000000000000000000000000000000FA @@ -40048,7 +40048,7 @@ :10C6500000000000000000000000000000000000DA :10C6600000000000000000000000000000000000CA :10C6700000000000000000000000000000000000BA -:10C68000000000000000000000000000F0F00000CA +:10C6800000000000000000000000000000000000AA :10C69000000000000000000000000000000000009A :10C6A000000000000000000000000000000000008A :10C6B000000000000000000000000000000000007A @@ -40056,448 +40056,448 @@ :10C6D000000000000000000000000000000000005A :10C6E000000000000000000000000000000000004A :10C6F000000000000000000000000000000000003A -:10C700000000000000000000000000000000F0F049 +:10C700000000000000000000000000000000000029 :10C710000000000000000000000000000000000019 :10C720000000000000000000000000000000000009 :10C7300000000000000000000000000000000000F9 :10C7400000000000000000000000000000000000E9 :10C7500000000000000000000000000000000000D9 -:10C7600000000000000000000000000000000000C9 -:10C770000000000020000000000020000000000079 -:10C780000000000004000000000020000000000085 -:10C790000000000020000000000020000000000059 -:10C7A0000000000020000000000020080001000040 -:10C7B0000000000000002000000000002008000031 -:10C7C0000000000000002000000000002000000029 -:10C7D0000000000000000000000000002000000039 -:10C7E0000000000000002000000000000000000029 -:10C7F0000000000000000000000000000000000039 +:10C7600000000000000000000000000000002000A9 +:10C7700000000000010001000104010400000000AD +:10C780000000000000002000000400000000200065 +:10C790000000000000000000000400000000000095 +:10C7A0000000000000000000000400040000000081 +:10C7B00000000000000001000000008400000000F4 +:10C7C0000000000000000000000000020004000063 +:10C7D0000000000000000000000000040000000055 +:10C7E0000000000000000000400000000002000007 +:10C7F0000002000000000200020008000800000023 :10C800000000000000000000000000000000000028 -:10C8100000000000000000004000000000000000D8 -:10C8200000400000000000000000000000000000C8 -:10C8300000000000000200000000000000000000F6 -:10C8400000020000000000000000000000000000E6 -:10C8500000000000000000000000000000000002D6 -:10C8600000000002000200000002000200000000C0 -:10C8700000000000000000000000000000000000B8 +:10C810000000000000000000000000000000000018 +:10C820000000000000000000000000000000000008 +:10C8300000000000000000000800000000400002AE +:10C8400000000000000000000000000000040000E4 +:10C8500010000000000000000000000000000000C8 +:10C8600000000000000000000000000000000000C8 +:10C870000200020000400040000000000000000034 :10C8800000000000000000000000000000000000A8 :10C890000000000000000000000000000000000098 :10C8A0000000000000000000000000000000000088 :10C8B0000000000000000000000000000000000078 -:10C8C0000000000000000000000000000000040064 -:10C8D0000000000000000000000000000000000058 +:10C8C0000000000000000000000000000000000068 +:10C8D0000000000000400000000000000000000018 :10C8E0000000000000000000000000000000000048 -:10C8F0000000000000000000000800000000000030 -:10C90000000000000000000000080000000000001F -:10C91000000000000000000000880000000000008F -:10C9200000000000000000000008000000000000FF +:10C8F0000000800080000001000100000000000036 +:10C900000000000000000000000000000000000027 +:10C910000000000000000000000000000000000017 +:10C920000000000000000000000000000000000007 :10C9300000000000000000000000000000000000F7 -:10C94000000000000000000000000088000004005B -:10C9500000000008000000000000000000000000CF -:10C9600000000008000000000000000000000000BF -:10C9700000000008000000000000000000000000AF +:10C9400000000000000000000000000000000000E7 +:10C9500000000000000000000000000000000000D7 +:10C9600000000000000000000000000000000000C7 +:10C9700000000000000000000000000000000000B7 :10C9800000000000000000000000000000000000A7 :10C990000000000000000000000000000000000097 :10C9A0000000000000000000000000000000000087 :10C9B0000000000000000000000000000000000077 -:10C9C0000000000004000000000000000000000063 -:10C9D0000000000000000000000000000000000057 -:10C9E0000000000000004000000000000000000007 +:10C9C0000000000000000000000000000000000562 +:10C9D0000000000000000000000200000000000055 +:10C9E0000000000000000000000000000000000047 :10C9F0000000000000000000000000000000000037 -:10CA0000000000000000000000000000000008001E +:10CA00000000000000000000000000000000000026 :10CA10000000000000000000000000000000000016 :10CA20000000000000000000000000000000000006 :10CA300000000000000000000000000000000000F6 :10CA400000000000000000000000000000000000E6 -:10CA500000000000000000000000000000000000D6 +:10CA500000000000000000000000000100000000D5 :10CA600000000000000000000000000000000000C6 :10CA700000000000000000000000000000000000B6 -:10CA800000040000000000000000000000000000A2 -:10CA9000000000000000C0000000000000000000D6 -:10CAA0000000000000000100004000000000000045 -:10CAB0000000000000000000000000000000000076 -:10CAC0000000000000000000000000000000000066 -:10CAD0000000000000000000000000000000000056 -:10CAE0000000000000000000004000000000000006 -:10CAF0000000000000000000C00000000000000076 +:10CA800000000000000000000000000000000000A6 +:10CA90000000000000000000000000000000000096 +:10CAA0000000000000000000000000000000000086 +:10CAB000000008000000000000000000000000006E +:10CAC0000000000000050000004000000000000021 +:10CAD00000000000000000000000000200001088BC +:10CAE0000000000400800004008000C000040080FA +:10CAF0000004000000000000000000000000000032 :10CB00000000000000000000000000000000000025 :10CB10000000000000000000000000000000000015 -:10CB200000002000000000000400000000000000E1 -:10CB300005000000000000000000000000000000F0 -:10CB400000000000000000000000000000000000E5 -:10CB500000000000000000000000000000000000D5 -:10CB600000000000000000000000000000000000C5 -:10CB700000000000000000000000000000000000B5 -:10CB8000000000000000000000000000A000000005 +:10CB20000000000000000000000000000000000005 +:10CB300000000000000000000000000000000000F5 +:10CB4000000000000000000011000001000000A033 +:10CB500000040000000000000000000000010000D0 +:10CB6000800900000001000400010004000400012D +:10CB700000040001000000000000000000000000B0 +:10CB80000040004000000000000000000000000025 :10CB90000000000000000000000000000000000095 -:10CBA0000000000000000000002000000000000065 +:10CBA0000000000000000000000000000000000085 :10CBB0000000000000000000000000000000000075 :10CBC0000000000000000000000000000000000065 :10CBD0000000000000000000000000000000000055 -:10CBE0000000000000000000000000000000A000A5 -:10CBF000000000000000000000000000080000002D -:10CC00000000000000000000000000000000000024 -:10CC100000000000000000000000000000C0000054 -:10CC2000000000840000000000000001000000007F +:10CBE00040000000840000000000C00000000000C1 +:10CBF0000000000000000000000000000000000035 +:10CC00000000000100010000000000000000000022 +:10CC10000000000000000000000000000000000014 +:10CC20000000000000000000000000000000000004 :10CC300000000000000000000000000000000000F4 :10CC400000000000000000000000000000000000E4 :10CC500000000000000000000000000000000000D4 -:10CC600000000000000000000000000000000000C4 +:10CC60000000800000000000000000000000000044 :10CC700000000000000000000000000000000000B4 -:10CC80000000000900090000020000000000000090 +:10CC80000040000000000000000000000000000064 :10CC90000000000000000000000000000000000094 -:10CCA0000000000000000000008000000002000002 +:10CCA0000000000000000000000000000000000084 :10CCB0000000000000000000000000000000000074 -:10CCC0000000000000000000000000000000000064 -:10CCD0000000000000000000000000000000000054 -:10CCE000000000000000000000000800000000003C -:10CCF0000000000000000000000000000000000034 -:10CD00000000000000000000000000000000000023 +:10CCC000000000000800000000000000018000805B +:10CCD00000000000002100000040000000000000F3 +:10CCE000000000400000000000000000010084007F +:10CCF00040000002004000080000000000000000AA +:10CD00000000000100000000000000000000000022 :10CD10000000000000000000000000000000000013 -:10CD200000000000000000000000004000000000C3 +:10CD20000000000000000000000000000000000003 :10CD300000000000000000000000000000000000F3 -:10CD400000000000000000000000000000000000E3 -:10CD500000000000000000000000000000000000D3 -:10CD600000000000000000000000000000000000C3 -:10CD700000000000000000000000000000000000B3 -:10CD80000000204000000000000000000000000043 -:10CD90000000000000000000000000000000000093 -:10CDA00000000000000000000000000000009000F3 +:10CD400000000000000000000000000000000820BB +:10CD50000040000000000010000000000000000083 +:10CD600000000000000000000000000000001000B3 +:10CD700000008000000141000001000000000000F0 +:10CD80000000000002C000000002000000000000DF +:10CD90000000200000000000000000000000000073 +:10CDA0000000000000000000000000000000000083 :10CDB0000000000000000000000000000000000073 -:10CDC0000000000000000000000000000000000063 -:10CDD0000000000000000000000000000000000053 -:10CDE0000000000000000000000000000000000043 -:10CDF0000000000000000000000000000000000033 -:10CE00000000000000000000000000000000000022 +:10CDC000000000000000000000000000000000C0A3 +:10CDD00000000088000800000000000000000000C3 +:10CDE0000000000000000001000100000001000040 +:10CDF000000002000000000100000001000100002E +:10CE000000000000000080800000008000000000A2 :10CE10000000000000000000000000000000000012 -:10CE200000000000000000000000000000001100F1 -:10CE30008000000000000000000000000000000072 +:10CE20000000000000000000000000000000000002 +:10CE300000000000000000000000000000000000F2 :10CE400000000000000000000000000000000000E2 -:10CE500000000000000000000000000000000000D2 -:10CE600000000000000000000000000000000000C2 -:10CE700000000000000000000000000000000000B2 -:10CE800000000000000000000000000000000000A2 -:10CE90000000000000000000000000000000000092 +:10CE50000080000000800080000000000000000052 +:10CE6000000000000000000000410003000000047A +:10CE700003000400C100000000410003400400045E +:10CE80000000000000000000000000000000800022 +:10CE90000000000000008000000000000000000012 :10CEA0000000000000000000000000000000000082 -:10CEB00000000080000000000000000000000000F2 +:10CEB0000000000000000000000000000000000072 :10CEC0000000000000000000000000000000000062 -:10CED0000000000000000000000000000000000052 +:10CED0000000000000200000000000000000000032 :10CEE0000000000000000000000000000000000042 -:10CEF0000000000000000000000000000000000032 +:10CEF0000000000900000020000000000000000504 :10CF00000000000000000000000000000000000021 -:10CF10000000000000000000000000000000000011 +:10CF1000C000200040000000C00000000000000031 :10CF20000000000000000000000000000000000001 -:10CF30000000000000200000004000000000000091 +:10CF300000000000000000000000000000000000F1 :10CF400000000000000000000000000000000000E1 :10CF500000000000000000000000000000000000D1 :10CF600000000000000000000000000000000000C1 -:10CF700000000000000000000000000000000000B1 -:10CF8000000000000000000000000000000002009F -:10CF90000000000000000000000000000000000091 +:10CF70000000002000000000000000000000000091 +:10CF800000000000000000000000000000000000A1 +:10CF9000000000C000000040002000C000000000B1 :10CFA0000000000000000000000000000000000081 -:10CFB0000000000001000088880000000000000060 +:10CFB0000000000000000000000000000000000071 :10CFC0000000000000000000000000000000000061 -:10CFD0000000000000000000000000000000000051 +:10CFD000000000000000020000000000000000004F :10CFE0000000000000000000000000000000000041 -:10CFF0000000000000000000000000000000000031 -:10D000000000000000000000000000000000000020 -:10D010008000000000000000000000000000000090 +:10CFF0000000000000000000C00000000001000070 +:10D000004000880000000000000000000000000058 +:10D010000000000000800000000000000080000010 :10D020000000000000000000000000000000000000 -:10D03000000000000000410000800000000000002F +:10D0300000000000000000000000000000000000F0 :10D0400000000000000000000000000000000000E0 :10D0500000000000000000000000000000000000D0 :10D0600000000000000000000000000000000000C0 -:10D0700000000000000000000000000000000000B0 -:10D0800000000000000000000000000000000000A0 -:10D090000000000000000000000000000000000090 +:10D0700000000000000000000000800900000041E6 +:10D08000000080008000050000000000000000009B +:10D090008000000000000000002000000080000070 :10D0A0000000000000000000000000000000000080 -:10D0B00000000000000000000011000000800000DF +:10D0B0000000000000000000000000000000000070 :10D0C0000000000000000000000000000000000060 -:10D0D0000000000000000000000000000000000050 +:10D0D0000000000000000000000080408009800087 :10D0E0000000000000000000000000000000000040 -:10D0F0000000000000000000000000000000000030 +:10D0F000000021000000000000000000000000000F :10D10000000000000000000000000000000000001F -:10D11000000000000000000000000000000000000F +:10D110000000C000002000004000000000000040AF :10D1200000000000000000000000000000000000FF -:10D1300000000000000000000000000100000040AE +:10D1300000000000000000000000000000000000EF :10D1400000000000000000000000000000000000DF -:10D1500000000000000000000000000000000000CF -:10D1600000000000000000000000000000000000BF -:10D1700000000000000000000000000000000000AF +:10D15000000000000000000000000000C00004000B +:10D16000400000000000000000000000000000007F +:10D1700000000000010000000000000000000000AE :10D18000000000000000000000000000000000009F :10D19000000000000000000000000000000000008F :10D1A000000000000000000000000000000000007F :10D1B000000000000000000000000000000000006F -:10D1C00007008200000000000000000000000000D6 +:10D1C000000000000000000000000000000000005F :10D1D000000000000000000000000000000000004F -:10D1E000000000000000000000000000000000003F +:10D1E00000008000000000000000000000000000BF :10D1F000000000000000000000000000000000002F -:10D20000000000000000000000000000000000001E -:10D21000000000000000000000000000000000000E -:10D2200000000000000000000000000000000000FE +:10D2000000010000420000000001000000000000DA +:10D2100000000000000000003C3C0000AAAA000042 +:10D220000000FF0F0F0F00000000000000000000D2 :10D2300000000000000000000000000000000000EE -:10D240000000F0F0000000000000000000000000FE +:10D2400000000000000000000000000000000000DE :10D2500000000000000000000000000000000000CE -:10D2600000000000000000000000000000000000BE +:10D2600000F0FFF0000000000000000000000000DF :10D2700000000000000000000000000000000000AE :10D28000000000000000000000000000000000009E -:10D29000000000000000000000000000000000008E -:10D2A000000000000000000000000000000000007E +:10D29000000000000000000000003C3C0000AAAAC2 +:10D2A00000000000FF0FFFFF000000000000000072 :10D2B000000000000000000000000000000000006E -:10D2C00000000000F0F0000000000000000000007E +:10D2C000000000000000000000000000000000005E :10D2D000000000000000000000000000000000004E -:10D2E000000000000000000000000000000000003E +:10D2E0000000FFF000F0000000000000000000005F :10D2F000000000000000000000000000000000002E :10D30000000000000000000000000000000000001D -:10D31000000000000000000000000000000000000D -:10D3200000000000000000000000000000000000FD +:10D31000000000000000000000000F0F0000AAAA9B +:10D32000FFFF00000000F0F0F3F300000000000039 :10D3300000000000000000000000000000000000ED -:10D340000000000000000000FFFF000000000000DF +:10D3400000000000000000000000000000000000DD :10D3500000000000000000000000000000000000CD -:10D3600000000000000000000000000000000000BD +:10D36000000000000F0F0C0C000000000000000087 :10D3700000000000000000000000000000000000AD :10D38000000000000000000000000000000000009D -:10D39000000000000000000000000000000000008D -:10D3A000000000000000000000000000000000007D +:10D390000000000000000000000000000F0F00006F +:10D3A000AAAAFFFF00000000FFFFF3F30000000047 :10D3B000000000000000000000000000000000006D :10D3C000000000000000000000000000000000005D :10D3D000000000000000000000000000000000004D -:10D3E000000000000000000000000000000000003D +:10D3E00000000000000000000C0C00000000000025 :10D3F000000000000000000000000000000000002D :10D40000000000000000000000000000000000001C -:10D41000000000000000000000000000000000000C -:10D4200000000000000000000000000000000000FC +:10D41000000000000000000000000000000040824A +:10D420008000002082020000000000900005000043 :10D4300000000000000000000000000000000000EC -:10D4400000000000000005000A00054000A80000E0 +:10D4400000000000000000000000000000000000DC :10D4500000000000000000000000000000000000CC -:10D4600000000000000000000000000000000000BC +:10D460000000000000000000A000500800000000C4 :10D4700000000000000000000000000000000000AC -:10D48000000000000000000000000000000000009C -:10D49000000000000000000000000000000000008C +:10D4800000610006000D00000061000700090000B7 +:10D4900000610003000D000000000000000000001B :10D4A000000000000000000000000000000000007C :10D4B000000000000000000000000000000000006C :10D4C000000000000000000000000000000000005C :10D4D000000000000000000000000000000000004C :10D4E000000000000000000000000000000000003C :10D4F000000000000000000000000000000000002C -:10D50000000000000000000000000000000000001B -:10D51000000000000000000000000000000000000B +:10D5000000000000FFFF0000000000000000A0A0DD +:10D51000AAAA0000000000000000000000000000B7 :10D5200000000000000000000000000000000000FB :10D5300000000000000000000000000000000000EB :10D5400000000000000000000000000000000000DB :10D5500000000000000000000000000000000000CB :10D5600000000000000000000000000000000000BB :10D5700000000000000000000000000000000000AB -:10D58000000000000000000000000000000000009B -:10D59000000000000000000000000000000000008B +:10D58000000000000000FFFF00000000000000009D +:10D59000A0A000000000000000000000000000004B :10D5A000000000000000000000000000000000007B :10D5B000000000000000000000000000000000006B :10D5C000000000000000000000000000000000005B :10D5D000000000000000000000000000000000004B :10D5E000000000000000000000000000000000003B :10D5F000000000000000000000000000000000002B -:10D60000000000000000000000000000000000001A -:10D61000000000000000000000000000000000000A +:10D600000000000000003C003CFF000000000000A3 +:10D610000000000000003C000F00000000000000BF :10D6200000000000000000000000000000000000FA :10D6300000000000000000000000000000000000EA :10D6400000000000000000000000000000000000DA :10D6500000000000000000000000000000000000CA :10D6600000000000000000000000000000000000BA :10D6700000000000000000000000000000000000AA -:10D68000000000000000000000000000000000009A -:10D69000000000000000000000000000000000008A -:10D6A000000000000000000000000000000020005A -:10D6B000000000000000000000000000000000006A -:10D6C0000000000000040004000000000000200032 -:10D6D000000000000000000000000000000000004A -:10D6E0000000000000040000000000000000000036 -:10D6F000200000000000000000000000000000000A -:10D700000008000000000000000000000000000011 -:10D7100020041000000000000000000000000000D5 -:10D7200000000000000000000000400200000000B7 -:10D7300000000000000040000000000000000000A9 -:10D7400000000000000000000000000200020000D5 +:10D6800000000000000000003C003CFF0000000023 +:10D6900000000000000000003C000F00000000003F +:10D6A000000000000000000000000000000000007A +:10D6B000000000000000000000002000000000004A +:10D6C00020002000200000000000000000000000FA +:10D6D0000000000000000000000000000000000446 +:10D6E00020002000200000000000000000000000DA +:10D6F000000000000000000000000000000000002A +:10D7000000002000000020000000000000000000D9 +:10D710000000000000000000000000000000000009 +:10D7200000000000000000800080000000000000F9 +:10D7300000000000400000000000000000000000A9 +:10D7400000000000000000000000000000000000D9 :10D7500000000000000000000000000000000000C9 -:10D7600000000002000200000000000000000000B5 -:10D770000000000000000090000000000000000019 -:10D780000000000400000000000000000000000095 -:10D790000000000200000000000000020000000085 -:10D7A0000004000000000000000000020000000073 -:10D7B0000000080000000000000000000000000061 +:10D7600000000000000000000000000000000000B9 +:10D7700000000000000000000000000000000000A9 +:10D780000000000000000000000000000000000099 +:10D790000000000010000000000000000000000079 +:10D7A0000000000000000000001000100000000059 +:10D7B0000000000000000000000000000000000069 :10D7C0000000000000000000000000000000000059 -:10D7D00000000800000002000080000000000000BF -:10D7E00000000000000008800000000000000000B1 +:10D7D0000000000000000000000000000000000049 +:10D7E0000000000000000000000000000000000039 :10D7F0000000000000000000000000000000000029 :10D800000000000000000000000000000000000018 -:10D810000000000000020000000000000000000006 +:10D810000000000000000000000000000000000008 :10D8200000000000000000000000000000000000F8 -:10D8300000000000000800000000000000000000E0 -:10D8400000000000000800080408000000000000BC -:10D8500000000000000800008000414000000000BF -:10D8600000080000000800088040000000000000E0 -:10D8700000000000000000080000000000000000A0 -:10D880000000000800000084000800000000000004 -:10D890000000000000000084000000000000000004 -:10D8A00000000008000000840008000000000000E4 -:10D8B000000000210000000000000000000800003F -:10D8C0000000000800000000000000000000000050 +:10D8300000000000000000000000000000000000E8 +:10D8400000000000000000000000000000000000D8 +:10D8500000000000000000000000000000000000C8 +:10D8600000000000000000000000000000000000B8 +:10D8700000000000000000000000000000000000A8 +:10D880000000000000000000000000000000000098 +:10D890000000000000000000000000000000000088 +:10D8A0000000000000000000000000000000000078 +:10D8B0000000000000000000000000000000000068 +:10D8C0000000000000000000000000000000000058 :10D8D0000000000000000000000000000000000048 -:10D8E00000000000000000000000000000400000F8 +:10D8E0000000000000000000000000000000000038 :10D8F0000000000000000000000000000000000028 -:10D900000000000000000000000000000000000017 -:10D9100000000000000000000008000000000000FF -:10D9200000000000000000000008000000000000EF -:10D9300000000000000000000000000000000000E7 +:10D9000000000000000000000000000000000041D6 +:10D910000000000000000000000000000000000007 +:10D9200000000000000000000000000000000000F7 +:10D9300000000300080003000300000000000000D6 :10D9400000000000000000000000000000000000D7 :10D9500000000000000000000000000000000000C7 -:10D960002100000000000000000000000000000195 -:10D9700000000000000000000000000000000000A7 +:10D9600000000000000000000000000000000000B7 +:10D9700000000000000003000000000000000000A4 :10D980000000000000000000000000000000000097 -:10D990000000000000000000000000000000000087 +:10D990000000030000000000210000000000000063 :10D9A0000000000000000000000000000000000077 :10D9B0000000000000000000000000000000000067 :10D9C0000000000000000000000000000000000057 -:10D9D0000000C000100000000000000084000000F3 -:10D9E0008400C000000000000000000000000000F3 -:10D9F0000000000000000000000000000000000027 -:10DA00000000000000000000000000000000000016 -:10DA10000000000000000000000000000000000006 -:10DA200000000000000000000000000000000011E5 -:10DA3000000000090000400000000000000000009D -:10DA40000000000000000000000000004100410054 +:10D9D0000000000000000000000000000000000047 +:10D9E000000000000000080000000000000000002F +:10D9F00000000000000000000000000000000084A3 +:10DA00000004020488040000000000000000000080 +:10DA1000080000000000000000410000004100413B +:10DA2000820000410000000000000000000008002B +:10DA300000000000000000000000000000000000E6 +:10DA400000000000000000000000000000000000D6 :10DA500000000000000000000000000000000000C6 -:10DA6000090000002000000000000000000000008D +:10DA600000000000000000000000000000000000B6 :10DA700000000000000000000000000000000000A6 -:10DA80000000000000000000000000000000000096 +:10DA800000210001800100010000000000020000F0 :10DA90000000000000000000000000000000000086 -:10DAA0000000000000000000000000000000000076 +:10DAA0001100000000000000000000000000000065 :10DAB0000000000000000000000000000000000066 -:10DAC0000800000000000009080008000000000035 -:10DAD000C000000000000000100000000000000076 -:10DAE00084000000000000000004000000000000AE -:10DAF0000000000000000000000100000000000025 -:10DB00000000000000000000000000000000000015 +:10DAC0000000000000000000000000000000000056 +:10DAD0000000000000000000000000000000000046 +:10DAE0000000000000000000000000000000000036 +:10DAF0000000000000000000000000000000000026 +:10DB0000000000000800000000000000000000000D :10DB10000000000000000000000000000000000005 :10DB200000000000000000000000000000000000F5 -:10DB300000000000000000000000000000000000E5 +:10DB300000000000000008000000000000000000DD :10DB400000000000000000000000000000000000D5 :10DB500000000000000000000000000000000000C5 -:10DB60000000000000000000008400000000000031 +:10DB600000000000000000000000000000000000B5 :10DB700000000000000000000000000000000000A5 -:10DB80000000000000000000000000000000000095 +:10DB80000000000000008000000000000000000015 :10DB90000000000000000000000000000000000085 :10DBA0000000000000000000000000000000000075 :10DBB0000000000000000000000000000000000065 -:10DBC0000002000200000000000000000000000051 +:10DBC0000000000000000000000000000000000055 :10DBD0000000000000000000000000000000000045 -:10DBE0000000C000000000000000000082000000F3 -:10DBF0000000C00200000000000000000000000063 -:10DC00000000000000000000000000000000000014 -:10DC10000000000000000000000000000000000004 +:10DBE0000000000000000000000000000000000035 +:10DBF0000000000000000000000000000000000025 +:10DC00000000000000000000010000800000000093 +:10DC10000000001100000000000082000000000071 :10DC200000000000000000000000000000000000F4 -:10DC30000000000000000000000000000000008262 +:10DC300000000000000000000000000000000000E4 :10DC400000000000000000000000000000000000D4 -:10DC500000000000050000000000000000000000BF -:10DC600000000000000000000000000000000002B2 +:10DC500000000000000000000000000000000000C4 +:10DC600000000000000000000000000000000000B4 :10DC700000000000000000000000000000000000A4 -:10DC80000000000000000000000000000000000094 +:10DC80000000000000000000000004000920200047 :10DC90000000000000000000000000000000000084 :10DCA0000000000000000000000000000000000074 -:10DCB0000000000000000000000000000000000064 +:10DCB0001100000000002000000000000000000033 :10DCC0000000000000000000000000000000000054 :10DCD0000000000000000000000000000000000044 -:10DCE0000000000000000000000000000000020032 -:10DCF000000000000000000000C0084000204004B8 -:10DD00000000000000000000000000000000000013 -:10DD10000000000000000000000000000000000003 +:10DCE0000000000000000000000000000000000034 +:10DCF0000000000000000000000000000000000024 +:10DD00000000000000000000000001C0208400109E +:10DD100000C0000000000000000000000000000043 :10DD200000000000000000000000000000000000F3 :10DD300000000000000000000000000000000000E3 :10DD400000000000000000000000000000000000D3 :10DD500000000000000000000000000000000000C3 :10DD600000000000000000000000000000000000B3 -:10DD70008000000000000000000000800080000023 -:10DD80000080000000000000000000000000000013 -:10DD90000000000000000000000000000000000083 +:10DD700000000000000000000000000000000000A3 +:10DD80000000000000000000000000002180800072 +:10DD90000200000000000000000000000000000081 :10DDA0000000000000000000000000000000000073 :10DDB0000000000000000000000000000000000063 :10DDC0000000000000000000000000000000000053 :10DDD0000000000000000000000000000000000043 :10DDE0000000000000000000000000000000000033 -:10DDF00000008000000000000000000000000000A3 -:10DE000000400000000000000000000000000000D2 -:10DE10000000000000000000000000000000000002 +:10DDF0000000000000000000000000000000000023 +:10DE000000000000000000000000000000000020F2 +:10DE1000000000A10000000300000000000000005E :10DE200000000000000000000000000000000000F2 :10DE300000000000000000000000000000000000E2 :10DE400000000000000000000000000000000000D2 :10DE500000000000000000000000000000000000C2 -:10DE60000000000000000000000000000000200092 -:10DE700008002000044000000000000000004000F6 -:10DE80002000400082200000000000000000000090 -:10DE90000000000000000000000000000000000082 +:10DE600000000000000000000000000000000000B2 +:10DE700000000000000000000000000000000000A2 +:10DE80000000000000000000000000000000000092 +:10DE90000001000000080000000000000000000079 :10DEA0000000000000000000000000000000000072 :10DEB0000000000000000000000000000000000062 -:10DEC0000000000000000000000000000000000052 +:10DEC0000000400000000000000000000000000012 :10DED0000000000000000000000000000000000042 :10DEE0000000000000000000000000000000000032 -:10DEF00000200020022000040000000000000000BC -:10DF000004400020004000820001000000000000EA -:10DF10000000000000000000000000000000000001 +:10DEF0000000000000000000000000000000000022 +:10DF00000000000000000000000000000000000011 +:10DF100000000000C00084000100000000000000BC :10DF200000000000000000000000000000000000F1 :10DF300000000000000000000000000000000000E1 -:10DF400000000000000000000000000000000000D1 +:10DF40000000000000900000000000000000000041 :10DF500000000000000000000000000000000000C1 :10DF600000000000000000000000000000000000B1 -:10DF700000000000008000000080000000000000A1 -:10DF80000000800000000000000000010000000010 -:10DF90000000000000000000000000000000000081 +:10DF700000000000000000000000000000000000A1 +:10DF80000000000000000000000000000000000091 +:10DF90000000000000008000800009000000000078 :10DFA0000000000000000000000000000000000071 :10DFB0000000000000000000000000000000000061 :10DFC0000000000000000000000000000000000051 :10DFD0000000000000000000000000000000000041 :10DFE0000000000000000000000000000000000031 -:10DFF0000000000000080011008000000000000088 -:10E0000000000000000000100000000000010000FF -:10E010000000000000000000000000000000000000 +:10DFF0000000000000000000000000000000000021 +:10E000000000000000000000000000000000000010 +:10E01000000000000000800000040000000000007C :10E0200000000000000000000000000000000000F0 :10E0300000000000000000000000000000000000E0 :10E0400000000000000000000000000000000000D0 :10E0500000000000000000000000000000000000C0 :10E0600000000000000000000000000000000000B0 -:10E07000000000000000000000000002000000009E -:10E08000000000000000000000010040000000014E -:10E090000000000000000000000000000000000080 +:10E0700000000000000000000000000000000000A0 +:10E080000000000000000000000000000000000090 +:10E090000000000000000000C00000000400C000FC :10E0A0000000000000000000000000000000000070 :10E0B0000000000000000000000000000000000060 :10E0C0000000000000000000000000000000000050 :10E0D0000000000000000000000000000000000040 :10E0E0000000000000000000000000000000000030 -:10E0F00000000000000000000000000041000000DF -:10E1000000000000000000000000000041000000CE -:10E1100000000000000000000000000000000000FF -:10E1200000000000000000000000000000000000EF +:10E0F0000000000000000000000000000000000020 +:10E10000000000000000000000000000000000000F +:10E1100000000000000000000000000000100800E7 +:10E12000820000000000000000000000000000006D :10E1300000000000000000000000000000000000DF :10E1400000000000000000000000000000000000CF :10E1500000000000000000000000000000000000BF :10E1600000000000000000000000000000000000AF :10E17000000000000000000000000000000000009F :10E18000000000000000000000000000000000008F -:10E19000000000000000000000000000000000007F +:10E1900000000000000000000000000030302424D7 :10E1A000000000000000000000000000000000006F :10E1B000000000000000000000000000000000005F :10E1C000000000000000000000000000000000004F -:10E1D000000000000000000000000000000000003F +:10E1D0000F0F0F0F00000000000000000000000003 :10E1E000000000000000000000000000000000002F :10E1F000000000000000000000000000000000001F :10E20000000000000000000000000000000000000E -:10E2100000000000000000000000000000000000FE -:10E2200000000000000000000000000000000000EE +:10E21000000000000000000000000000000030309E +:10E2200024240000000000000000000000000000A6 :10E2300000000000000000000000000000000000DE :10E2400000000000000000000000000000000000CE -:10E2500000000000000000000000000000000000BE +:10E2500000000F0F0F0F0000000000000000000082 :10E2600000000000000000000000000000000000AE :10E27000000000000000000000000000000000009E -:10E280000000008420800000000000000000010861 -:10E2900000000084200000000000000000000000DA +:10E28000000000000000000000000000000000008E +:10E29000000000000000000000000000000000007E :10E2A000000000000000000000000000000000006E :10E2B000000000000000000000000000000000005E :10E2C000000000000000000000000000000000004E @@ -40506,23 +40506,23 @@ :10E2F000000000000000000000000000000000001E :10E30000000000000000000000000000000000000D :10E3100000000000000000000000000000000000FD -:10E3200000000000000000000000000000000000ED +:10E3200000000C0C003C0000000000000000000099 :10E3300000000000000000000000000000000000DD :10E3400000000000000000000000000000000000CD -:10E3500000000000000000000000000000000000BD +:10E35000000000000000F0F0F0F0000000000000FD :10E3600000000000000000000000000000000000AD :10E37000000000000000000000000000000000009D :10E38000000000000000000000000000000000008D :10E39000000000000000000000000000000000007D -:10E3A000000000000000000000000000000000006D +:10E3A000000000000C0C003C000000000000000019 :10E3B000000000000000000000000000000000005D :10E3C000000000000000000000000000000000004D -:10E3D000000000000000000000000000000000003D +:10E3D0000000000000000000F0F0F0F0000000007D :10E3E000000000000000000000000000000000002D :10E3F000000000000000000000000000000000001D -:10E4000000000000300000000000000C00000000D0 -:10E4100000000000300000000000000C00000000C0 -:10E4200000000000000000000000000000000000EC +:10E40000000000000000000000000000000000000C +:10E4100000000000000000000000000000000000FC +:10E42000000000000000A061500F050D000000007A :10E4300000000000000000000000000000000000DC :10E4400000000000000000000000000000000000CC :10E4500000000000000000000000000000000000BC @@ -40558,422 +40558,422 @@ :10E6300000000000000000000000000000000000DA :10E6400000000000000000000000000000000000CA :10E6500000000000000000000000000000000000BA -:10E66000000000000000200000000000000020006A -:10E67000000020000000000000000000000000007A -:10E680002100000000002000000000000000200029 -:10E69000000020000000000000000000000000005A -:10E6A0002000000000000001200000000000000029 -:10E6B000200000002000000000000000000000001A -:10E6C000000020000000000020000000000000000A -:10E6D0002000000020000000880000000000000072 -:10E6E000000000000000000000000000000000002A +:10E66000000000000000C00020000000400000008A +:10E67000000020000000000000000000000020005A +:10E6800020000004200420002000000020000000E2 +:10E690000000200400000000000000000000200036 +:10E6A0002000000420000000000020000000000006 +:10E6B00000000000200482040000000000000000B0 +:10E6C00020002000000400000000200000000000E6 +:10E6D0000000000020040004000000000000000012 +:10E6E0000000200000040000000000000000000006 :10E6F000000000000000000000000000000000001A -:10E7000000000200000000000000000040000000C7 +:10E700000000000000000000000000000000000009 :10E7100000000000000000000000000000000000F9 -:10E720000000000000900000000000000000000059 -:10E7300000400000000000900090009000000000E9 +:10E7200000000000000000000000000000000000E9 +:10E7300000000000000000000000000000000000D9 :10E7400000000000000000000000000000000000C9 -:10E75000000000000000009000A000000000000089 +:10E750000000000041000000000000000000000078 :10E7600000000000000000000000000000000000A9 -:10E770000000000002000000000000000000000097 -:10E780000000010000000100010000000000000086 -:10E790000000000000000000000000001000100059 +:10E770000000000000000000000000000000000099 +:10E780000000000000000000000000000000000089 +:10E790000000000000000000000000000000000079 :10E7A0000000000000000000000000000000000069 -:10E7B0000000000000000000000000110000000048 +:10E7B0000000000000200000000000000000000039 :10E7C0000000000000000000000000000000000049 -:10E7D0000000000000000000000000000000000039 -:10E7E0000000000000000000000000000000000029 -:10E7F0000000000000008000000000000000000099 -:10E800000000000002000082020002000000000080 -:10E810000000000000000000000000000000800078 -:10E820008000000000000000000000000000000068 -:10E8300000000000000000000000000000000000D8 -:10E8400000000000000000000000000000000000C8 -:10E8500000000000000000000400000000000000B4 -:10E8600000000000000000000000000000000000A8 -:10E870000000000000000000000000000100000097 +:10E7D00000000000000000000000000000000080B9 +:10E7E00000000080000000000000000000000000A9 +:10E7F0000000000000000000000000000000000019 +:10E8000000002000000040000000000000000000A8 +:10E8100000000000000000000000000000000000F8 +:10E8200000000000000000000000000000000000E8 +:10E8300000000000200000010000000000000000B7 +:10E840004100000000000000000000000000000087 +:10E85000000000000000000000000000000000A018 +:10E860000010000000400000000000000000000058 +:10E870000000000000000000000000000000000098 :10E880000000000000000000000000000000000088 :10E890000000000000000000000000000000000078 :10E8A0000000000000000000000000000000000068 -:10E8B0000000000400000000000000000000000054 +:10E8B0000000000000000000000000000000000058 :10E8C0000000000000000000000000000000000048 :10E8D0000000000000000000000000000000000038 -:10E8E0000200000000000000000000000000000026 -:10E8F00000000000000000000000000000002000F8 +:10E8E0000000000000000000000000000000000028 +:10E8F0000000000000000000000000000000000018 :10E900000000000000000000000000000000000007 -:10E9100005000000090000000000000000000000E9 -:10E9200000000500090003000000000000000000D6 +:10E9100000000000000000000000000000000000F7 +:10E9200000000000000000000000000000000000E7 :10E9300000000000000000000000000000000000D7 -:10E9400000000000000000000000000000000000C7 +:10E9400000000000001000000000000000000000B7 :10E9500000000000000000000000000000000000B7 :10E9600000000000000000000000000000000000A7 -:10E970000000000000000000000001000000C18055 -:10E980000140000000000000000000000000000046 -:10E990000000000000000000A000000000000000D7 -:10E9A000000000000021000001080000000000003D -:10E9B0000000000000000000000000000000000057 -:10E9C0000000000000000000000000000000000047 -:10E9D0000000000010000000000000000000000027 -:10E9E0000000000000000000000000000000000027 -:10E9F0000000000000000000000000000400000013 -:10EA000020400401000000000000000000000000A1 -:10EA100000000800000000000000000000000000EE -:10EA200000000000000000000000200100000000C5 -:10EA300000000000000000000000000000001000C6 -:10EA400000000000000000000000000000000000C6 -:10EA500000000000000000000000000000000000B6 -:10EA600000000000000000000000000000000000A6 -:10EA7000000000000000A00082000000C000008034 -:10EA80000000000010000000000000000000000076 +:10E970000000000000000000000000000000000097 +:10E980000003000000000000000000000000000084 +:10E990000000000000000000000000000000000077 +:10E9A0000000000000000000000000000000000067 +:10E9B00000000000000000000000000000000080D7 +:10E9C0000080008000000000000000000000000047 +:10E9D0000000000000000000200000000000000017 +:10E9E0000000000001000100010000000000000024 +:10E9F0000000000000000000000000000000000017 +:10EA00000000000000000000000000000000000006 +:10EA100000000000000000000000000000000000F6 +:10EA200000000000000000000000000000000000E6 +:10EA30000000000000000000000041000000000095 +:10EA40000020002000200000000041000000000025 +:10EA50000000000000000000000041000000000471 +:10EA6000000000040000040004040400000400008E +:10EA70000000000000000000000000000000000096 +:10EA80000000000000000000000000110000000075 :10EA90000000000000000000000000000000000076 :10EAA0000000000000000000000000000000000066 -:10EAB0000000000000000000000000000000000056 -:10EAC0000000000000000000000000000000000046 -:10EAD0000000000000000000000000000000000036 -:10EAE0000000000000000000000000000000000026 +:10EAB0000000000008000000080000000000000046 +:10EAC000000000000000C00000000000000000087E +:10EAD000000000000000080000000000000000002E +:10EAE00000000000000084000000000000000000A2 :10EAF0000000000000000000000000000000000016 -:10EB0000000800000000800000000000000000007D +:10EB00000000000000000000000000000000000005 :10EB100000000000000000000000000000000000F5 :10EB200000000000000000000000000000000000E5 -:10EB300000000500000000000000000000000000D0 -:10EB400000000000000000000000000000000000C5 +:10EB300000000000000000000000000000000000D5 +:10EB400000000000000000C0000000000000000005 :10EB500000000000000000000000000000000000B5 :10EB600000000000000000000000000000000000A5 -:10EB7000000000000000000000000000880000000D -:10EB8000000001000100000000000000000000097A -:10EB900000000000000000000880000000000000ED -:10EBA00000000000000000000000008000000000E5 +:10EB7000000008000000000000000000000000008D +:10EB80000000000000000000000000000000000085 +:10EB90000000000000000000000000000000000075 +:10EBA0000000000000000000000000000000000065 :10EBB0000000000000000000000000000000000055 -:10EBC0000000000000000000000000000000000045 +:10EBC0000000000000000000000000000008000835 :10EBD0000000000000000000000000000000000035 -:10EBE0000000000000000000000000000000000025 -:10EBF000000000000000080000000000000000000D -:10EC000000000000020020000000000000000000E2 -:10EC10000000000000000000000000204000000094 -:10EC200000000000000000000000000000080000DC -:10EC300000000000000000000000000000000000D4 -:10EC400000000000000000000000000000000000C4 -:10EC500000000000000000000000000000000000B4 -:10EC60000000000000000000000000002000030081 -:10EC70000000000000000000000000000210000082 -:10EC800000000000000001000090000000000000F3 -:10EC900000000000000000000090000000000000E4 -:10ECA0000000000000000000000000000000010063 +:10EBE000000000000000000000000800000000001D +:10EBF0000000010000000000000000000000000014 +:10EC00000000000000000000000000000000000004 +:10EC100000000000000000000000000000000000F4 +:10EC200000000000000000000000000000000000E4 +:10EC3000000000000000000000000000000008C00C +:10EC40000000000008000088110011880900000081 +:10EC500000000000000000000000000000000004B0 +:10EC600000000000000000000000000000000000A4 +:10EC70000000000004000000000000000000000090 +:10EC80000000000000000000000000000000000084 +:10EC90000000000000000000000000000000000074 +:10ECA0000000000000000000000000000000000064 :10ECB0000000000000000000000000000000000054 :10ECC0000000000000000000000000000000000044 :10ECD0000000000000000000000000000000000034 :10ECE0000000000000000000000000000000000024 -:10ECF0000000000000000000000000000000000014 -:10ED00000000000000000000110021800000000051 -:10ED10000000000000000000000000800000000073 +:10ECF00000C0000000A000A0000000000000000014 +:10ED00000000000000000000000000000000000003 +:10ED100000000000000000000000000000000000F3 :10ED200000000000000000000000000000000000E3 -:10ED300011000021000000000000000000000000A1 +:10ED300000000000000000000000000000000000D3 :10ED400000000000000000000000000000000000C3 :10ED500000000000000000000000000000000000B3 :10ED600000000000000000000000000000000000A3 -:10ED70000000000000000000000000000000000093 -:10ED80000000000000000000000000880980000969 -:10ED900000800000000000000000000000000000F3 +:10ED70000000008000000000000000000000000013 +:10ED80000000000000000000000000000000000083 +:10ED90000000000000000000000000000000000073 :10EDA0000000000000000000000000000000000063 -:10EDB00000000004000011400000000000000000FE -:10EDC0000000000000000000000000000000000043 +:10EDB0000000000000000000000000000000000053 +:10EDC00000000000000000000000000000000080C3 :10EDD0000000000000000000000000000000000033 :10EDE0000000000000000000000000000000000023 -:10EDF0000000000000000000000000000000000013 -:10EE000000000000000000000000000000030104FA -:10EE100000000002000000000000000088000090D8 -:10EE20000000008200000000000000000000000060 -:10EE300000000000000100000101000000000000CF +:10EDF0000000000000000000000000800000000093 +:10EE00000000000000000000000000000000000002 +:10EE100000000000000000000000000000000000F2 +:10EE200000000000000000000000000000000000E2 +:10EE300000000000000000000000000000000000D2 :10EE400000000000000000000000000000000000C2 -:10EE500000000000000000000000000000000000B2 +:10EE50000008000000840000000000000000000026 :10EE600000000000000000000000000000000000A2 -:10EE70000000000000000000000000000000000092 -:10EE80000000000000000000000000000000010081 -:10EE90008800409000000000020000000000000018 -:10EEA0000000409000000000000000000000000092 -:10EEB00000000000000000008200000101000000CE +:10EE7000000000000000000000000000000400008E +:10EE80000000000000000000000000000000000082 +:10EE90000000000000000000000000000000000072 +:10EEA0000000000000000000000000000000000062 +:10EEB0000000000000000000000000000000000052 :10EEC0000000000000000000000000000000000042 -:10EED0000000000000000000000000000000000032 +:10EED00000000000400000000000000000000000F2 :10EEE0000000000000000000000000000000000022 -:10EEF0000000000000000000000000000000000012 +:10EEF0000000000000000000850000008400010008 :10EF00000000000000000000000000000000000001 -:10EF1000040000008080410000008000000000002C -:10EF20002000000000800000000000000000000041 -:10EF300000000000000000000000000000080200C7 +:10EF100000000000000000000000000000000000F1 +:10EF200000000000000000000000000000000000E1 +:10EF300000000000000000000000000000000000D1 :10EF400000000000000000000000000000000000C1 -:10EF500000000000000000000000000000000000B1 +:10EF50000000090000008000000000000000000028 :10EF600000000000000000000000000000000000A1 -:10EF70000000000000000000000000000000000091 -:10EF80000000000000000000000000000000000081 -:10EF9000000000020000000000000000000000006F -:10EFA00000000011800000000000000000000000D0 -:10EFB0000000000000000000000000001100000040 +:10EF7000000000000000000000000200000080000F +:10EF80000900000000000000000000000000000078 +:10EF90000000000000000000000000000000000071 +:10EFA0000000000000000000000000000000000061 +:10EFB0000000000000000000000000000000000051 :10EFC0000000000000000000000000000000000041 -:10EFD0000000000000000000000000000000000031 +:10EFD000000000000011000400000000000000001C :10EFE0000000000000000000000000000000000021 -:10EFF0000000000000000000000000000000000011 +:10EFF00000000000000000000000000000000040D1 :10F000000000000000000000000000000000000000 -:10F0100000000000000100000088880000000000DF -:10F0200000000000000120000000000000000000BF -:10F0300000000000000000000000000000000100CF +:10F0100000000000000000000000000000000000F0 +:10F0200000000000000000000000000000000000E0 +:10F0300000000000000000000000000000000000D0 :10F0400000000000000000000000000000000000C0 -:10F0500000000000000000000000000000000000B0 +:10F0500000000000000000000001000000000000AF :10F0600000000000000000000000000000000000A0 :10F070000000000000000000000000000000000090 :10F080000000000000000000000000000000000080 -:10F09000000000000000000000E007000000000089 -:10F0A0000000000000000000000007000000000059 +:10F090000000000000000000000000000000000070 +:10F0A0000000000000000000000000000000000060 :10F0B0000000000000000000000000000000000050 -:10F0C00000E0000000000000000000000000000060 -:10F0D0000000000000000000000000000000000030 +:10F0C0000000000000000000000000000000000040 +:10F0D00000000000000000000000000080000000B0 :10F0E0000000000000000000000000000000000020 :10F0F0000000000000000000000000000000000010 -:10F1000000000000000000000000000000000000FF -:10F1100000000000000000003C3C000000FF000078 -:10F12000000000000000000000FF000000FF0000E1 +:10F1000000000000400000000000000000000000BF +:10F1100000000000000000000000000000000000EF +:10F1200000000000000000000000000000000000DF :10F1300000000000000000000000000000000000CF :10F1400000000000000000000000000000000000BF :10F1500000000000000000000000000000000000AF :10F16000000000000000000000000000000000009F :10F17000000000000000000000000000000000008F :10F18000000000000000000000000000000000007F -:10F19000000000000000000000003C3C000000FFF8 -:10F1A0000000000000000000000000FF000000FF61 +:10F19000000000000000000000000000000000006F +:10F1A000000000000000000000000000000000005F :10F1B000000000000000000000000000000000004F :10F1C000000000000000000000000000000000003F :10F1D000000000000000000000000000000000002F :10F1E000000000000000000000000000000000001F :10F1F000000000000000000000000000000000000F :10F2000000000000000000000000000000000000FE -:10F210000000000000000000000000000000FF00EF -:10F220000000FFFF00000000000000000000FF00E1 -:10F2300000003C3C00000000000000000000000056 +:10F2100000000000000000000000000000000000EE +:10F2200000000000000000000000000000000000DE +:10F2300000000000000000000000000000000000CE :10F2400000000000000000000000000000000000BE :10F2500000000000000000000000000000000000AE :10F26000000000000000000000000000000000009E :10F27000000000000000000000000000000000008E -:10F28000000000000000000000000000000000007E +:10F280000000000000000C0C3C3C000000000000EE :10F29000000000000000000000000000000000006E -:10F2A000FF0000000000000000000000000000005F -:10F2B000FF0000003C3C00000000000000000000D7 +:10F2A000000000000000000000000000000000005E +:10F2B000000000000000000000000000000000004E :10F2C000000000000000000000000000000000003E :10F2D000000000000000000000000000000000002E :10F2E000000000000000000000000000000000001E :10F2F000000000000000000000000000000000000E -:10F3000000000000000000000000000000000000FD +:10F3000000000000000000000C0C000000000000E5 :10F3100000000000000000000000000000000000ED -:10F3200015402A06054C00A800000000000000005F -:10F3300015002A00054000A80000000000000000A1 -:10F34000000000000000000000000006000C0000AB +:10F3200000000000000000000000000000000000DD +:10F3300000000000000000000000000000000000CD +:10F3400000000000000000000000000000000000BD :10F3500000000000000000000000000000000000AD -:10F36000000000000000000000000000000000009D +:10F36000000005000A08050000A0000000000000E1 :10F37000000000000000000000000000000000008D -:10F38000000000000000000000000000000000007D -:10F39000000000000000000000000000000000006D -:10F3A000000000005555FFFF0000000000000000B5 +:10F38000000000000000000000000500500805001B +:10F3900000A00000000000000000000000000000CD +:10F3A000000000000000000000000000000000005D :10F3B000000000000000000000000000000000004D -:10F3C000000000000000000000000000FF0000FF3F +:10F3C000000000000000000000000000000000003D :10F3D000000000000000000000000000000000002D :10F3E000000000000000000000000000000000001D :10F3F000000000000000000000000000000000000D :10F4000000000000000000000000000000000000FC :10F4100000000000000000000000000000000000EC -:10F420000000000000005555000000000000000032 +:10F4200000000000000000000000000000000000DC :10F4300000000000000000000000000000000000CC -:10F440000000000000000000000000000000FF00BD -:10F4500000FF0000000000000000000000000000AD +:10F4400000000000000000000000000000000000BC +:10F4500000000000000000000000000000000000AC :10F46000000000000000000000000000000000009C :10F47000000000000000000000000000000000008C :10F48000000000000000000000000000000000007C :10F49000000000000000000000000000000000006C -:10F4A00000000000000000000000F0F0000000007C +:10F4A000000000000000000000000000000000005C :10F4B000000000000000000000000000000000004C :10F4C000000000000000000000000000000000003C -:10F4D000FF0000FF0000000000000000000000002E +:10F4D000000000000000000000000000000000002C :10F4E000000000000000000000000000000000001C :10F4F000000000000000000000000000000000000C :10F5000000000000000000000000000000000000FB :10F5100000000000000000000000000000000000EB -:10F52000000000000000000000000000F0F00000FB +:10F5200000000000000000000000000000000000DB :10F5300000000000000000000000000000000000CB :10F5400000000000000000000000000000000000BB -:10F550000000FF0000FF00000000000000000000AD +:10F5500000000000000000000000000000000000AB :10F56000000000000000000000000000000000009B :10F57000000000000000000000000000000000008B :10F58000000000000000000000000000000000007B :10F59000000000000000000000000000000000006B -:10F5A00000000000000000000080000020000400B7 -:10F5B00000800000000000000000000000000000CB -:10F5C00000000000000000000000000020002004F7 -:10F5D0000004000000000000000000000000000027 -:10F5E00000000000000000000000000000002000FB -:10F5F0002002100084000000000000000000000055 -:10F60000000000000000000000000041C0000000F9 -:10F61000000000000000000000000011A000000039 -:10F62000C000A00000000000000000020000000078 -:10F6300000000010090000000000000000000000B1 +:10F5A00000004000C000200020000000C00020003B +:10F5B0000000880020000000400000004000200003 +:10F5C00020004000000020002000000088002000F3 +:10F5D000000088002000000020004000880000009B +:10F5E000200000022000000020002004000088000D +:10F5F000200000002000200000004000000000006B +:10F6000000000000200000000000200000000000BA +:10F6100000000000200000000000000000000000CA +:10F6200000000000000000000000000000000000DA +:10F6300000020000000000000000000000000000C8 :10F6400000000000000000000000000000000000BA :10F6500000000000000000000000000000000000AA :10F66000000000000000000000000000000000009A :10F67000000000000000000000000000000000008A :10F68000000000000000000000000000000000007A -:10F69000000000000000000000000000000000006A +:10F6900000000000000000000000000000820000E8 :10F6A000000000000000000000000000000000005A -:10F6B00000000000020088000000000000408800F8 -:10F6C0000000000000000000020000000000000038 -:10F6D000040000000000000000000000080000001E -:10F6E000000000000000000000000000000000001A -:10F6F000000000000000000000000000000000000A -:10F7000000000000000000000000000000000000F9 -:10F7100000000000000000000000000000000000E9 -:10F7200002000000000000000000000000000000D7 -:10F7300000000000000000000000000000000008C1 -:10F740000000000000000000000080000000000039 -:10F750000000000000000000000000000000800821 -:10F760000000000000000000000000000000000099 -:10F770000000000000000000000000000000000089 -:10F780000004000000000000000000000200000073 -:10F790000000000000000000000000000000000069 -:10F7A00000008000000000000000000000000000D9 -:10F7B0000002000200000000000000000000000045 +:10F6B0000000000000000000000000080000000042 +:10F6C000000000000000000000000000000000003A +:10F6D000000000000000000000000000000000002A +:10F6E000000000000000000000040004000400040A +:10F6F00000040004000400041080108010841080B6 +:10F7000000000000000000000080008000800080F9 +:10F710002000200020002000000000000000000069 +:10F7200000000000000000000000000000000000D9 +:10F730000000000000000000000000002000200089 +:10F740004000000000000000000000000000000079 +:10F750000000000000000000000800000008090090 +:10F760000000000020000000000000010001000176 +:10F7700000010001000100010001800480048009F3 +:10F7800080040000000000000000000400040004E9 +:10F790000004800080008000800000000000000065 +:10F7A0000000000000000000000000000000000059 +:10F7B0000000000000000000000000000000000049 :10F7C0000000000000000000000000000000000039 -:10F7D00000000000A000000000000000A0000000E9 -:10F7E00000000000C0000000000000000000000059 -:10F7F0000000000000000000900000000000000079 -:10F8000000000000000000000000000000000000F8 -:10F8100000000000000000000000000000000000E8 -:10F8200000000000000000000000000000000000D8 -:10F8300000000000000000000000000021000000A7 -:10F840000000000003000000000000000000009025 -:10F850000000000000002100000000000000210066 +:10F7D0000000000000000000000000000000000029 +:10F7E0000000000000000000000000000000000019 +:10F7F0000000000000000000000000000000000009 +:10F8000000000000000000000000000000000020D8 +:10F8100000000020000000000000000000000004C4 +:10F8200000000004000000000000000000000000D4 +:10F8300000000000000000000000000000000000C8 +:10F8400000000000000000000000000000000000B8 +:10F8500000000000000000000000000000000000A8 :10F860000000000000000000000000000000000098 -:10F870000000000000000000000000000000000088 +:10F870000000000000000000080000000000000080 :10F880000000000000000000000000000000000078 -:10F890000000000000000000000000000000000068 -:10F8A0000000000000000000000000000000080050 -:10F8B0000800080000000800000000000000000030 -:10F8C0008200820000000000000000000000A00094 -:10F8D00084000000C00000000000000000000000E4 -:10F8E0000000000000000000000000000000000018 -:10F8F0000000000000000000000000000000000008 -:10F9000000000000000010000000000000000000E7 -:10F9100000000000000084000000000090000800CB -:10F920000000000000000000000000000000820055 -:10F9300000000000000000000000000000001100B6 -:10F9400000000000000000000000000000000000B7 -:10F9500000000000000000000000000000000000A7 -:10F960000000000000000000000000000000000097 -:10F970000000000000000000000000000000000087 -:10F980000000400000000000000000000000000037 -:10F99000000000000000000003000500050000005A -:10F9A00000000800000000000088000000000000C7 -:10F9B00000000000820000000000000000000000C5 -:10F9C00000000000000000000000A0000000000097 -:10F9D0000009000000008800000000000000A000F6 -:10F9E00000000000C0000200000000000000000055 -:10F9F0000000000100000000000000000000000006 -:10FA000000000000000000000000000000000000F6 -:10FA100000000000000000000000000000000800DE -:10FA20000000000000000000000082000000000054 -:10FA300000000000008400000000000000840000BE -:10FA40000084008400840000000000000800000022 -:10FA500000000000000003000000000000000000A3 -:10FA6000000000000000030080000084000000008F +:10F89000090100002101000000000000000000003C +:10F8A000000100000001000000000000000008004E +:10F8B00008000000820000000800000000000000B6 +:10F8C000000000008200000082000000000008002C +:10F8D000000000008200000008000000000000009E +:10F8E0000000000000000000080000000000000010 +:10F8F0000000000000000000100000000000880070 +:10F9000000000000000000000000000000000800EF +:10F9100000000000000000000000000000000000E7 +:10F9200000000000000000000000000000000000D7 +:10F930000000410000000000000003000000000083 +:10F9400000000300000000000000000000000000B4 +:10F95000000008001000410000000000000000004E +:10F9600008000008000041080000030000000082B9 +:10F970000000000041000000410880000300210059 +:10F980000000000000000000080000000800000067 +:10F9900000000000000021004100000008000000FD +:10F9A000000000000800000021000000000000002E +:10F9B0000000000000000000000000000000000047 +:10F9C000000000000000000000000800000000002F +:10F9D0000000000000000000000010000000000017 +:10F9E00000000000000000000000100000000800FF +:10F9F00000000000000000080008000000000000F7 +:10FA000010001000000000000000000008000005C9 +:10FA100000008200000000000000A0000000A00024 +:10FA20000000A00000000000000000001000000026 +:10FA300000000000000000000000000000000000C6 +:10FA400000000000000000000800000000000000AE +:10FA500000000000000000000000000000000000A6 +:10FA60000000000000000000000000000000000096 :10FA70000000000000000000000000000000000086 -:10FA80000000000000000000000000000000000076 +:10FA80000000800080000000000000000000000076 :10FA90000000000000000000000000000000000066 :10FAA0000000000000000000000000000000000056 -:10FAB000000000000000000000000041000082097A -:10FAC000000000000000820200000002000282111B -:10FAD00000000000000000008400020000000000A0 -:10FAE000C000000000000000000000000000000056 -:10FAF00000000020000200000000000000000000E4 -:10FB000000000000000000000000000000000000F5 -:10FB100000000000000000000000000000000000E5 -:10FB200000000000000000000000000000000200D3 -:10FB300000000000000000000000000000000000C5 -:10FB4000000000000000000000820000000000082B -:10FB50000000000000000000000000008000000025 -:10FB600000000000000000000000009000000008FD -:10FB70000000000000000000000000000000000085 -:10FB80000000000000000000000000000000000075 -:10FB90000010000000000000000000000000000055 -:10FBA000000000000000080000004100000000000C -:10FBB0000000000000000000000000000000000045 +:10FAB0000000000000000000000000000000000046 +:10FAC0000000000000000000000000000000000036 +:10FAD0000000000000000000000000000000000026 +:10FAE0000000000000000000000000000000000016 +:10FAF00000000003000000000000880008009000E3 +:10FB000000001009000500000000000000030000D4 +:10FB10000005000040058200002088110020A000A0 +:10FB20000005000000058200000400000004000041 +:10FB30000002000200020000410008000000000076 +:10FB400000000000000000000008000000000000AD +:10FB500000000000000000000000000000000000A5 +:10FB60000000000000000000000000000084000011 +:10FB700000000000000000000000000800000088F5 +:10FB800000000000800008022100000000000000CA +:10FB9000100000000000000000000001000008014B +:10FBA0000000000000000802000000010000000149 +:10FBB000080000000000000000000000000000003D :10FBC0000000000000000000000000000000000035 -:10FBD00000000000000000000000000040000000E5 -:10FBE0000200000000000000000000000000000013 +:10FBD0000000000000000000000000000000000025 +:10FBE0000000000000000000000000000000000015 :10FBF0000000000000000000000000000000000005 -:10FC000000000000000000000000000000000000F4 +:10FC0000000000000000A100000000000000000053 :10FC100000000000000000000000000000000000E4 -:10FC200000000000000000000000000000000000D4 -:10FC300000000000080800400088400400000000A8 +:10FC200000000000000004000100000000000000CF +:10FC300000000000000000000000000000000000C4 :10FC400000000000000000000000000000000000B4 :10FC500000000000000000000000000000000000A4 -:10FC60000000800000000000000000000000000014 +:10FC60000000000000000000000000000000000094 :10FC70000000000000000000000000000000000084 -:10FC80000000000000000000000000000000000074 -:10FC90000000000000000000000000000000000064 -:10FCA0000000000000000000000000000000000054 -:10FCB000000000000000080000800000008000003C -:10FCC00000000000000080000000000000000000B4 -:10FCD00000000000000000000000000000008000A4 -:10FCE0000000800000000000000000000000000094 -:10FCF0000000800080000000000000000000000004 -:10FD000000000000000000000000000000000000F3 -:10FD100000000000000000000000000000000000E3 -:10FD200000000000000000000000000000000000D3 -:10FD30000000000000000000000080A180400000E2 -:10FD400000000000000000000200000000000000B1 +:10FC8000000009000000000003000900000000005F +:10FC90000003080000000000000000000000000059 +:10FCA00000002000000000008000030000000300AE +:10FCB0000000410000000000000000000000000003 +:10FCC0000000000000000000000000000000000034 +:10FCD0000000000000000000000000000000000024 +:10FCE0000000000000000000000000000000000014 +:10FCF0000000000000000000000000000000000004 +:10FD00000008000000050000002000000440000082 +:10FD100000090000000900000000000000000000D1 +:10FD200000090000000900000004000000040000B9 +:10FD300000090000000900000000000000000000B1 +:10FD400000000000000000000000000000000000B3 :10FD500000000000000000000000000000000000A3 -:10FD6000040020008200A0820000000000000000CB -:10FD7000400040000800C00000000000000000003B -:10FD80000000000000000000000000000000000073 -:10FD90000000000000000000000000000000000063 -:10FDA0000000000000000000000000000000000053 -:10FDB00000000000000000000000100010824084DD -:10FDC00040080000000000000000000000000000EB +:10FD60000000000000000000000000000000000093 +:10FD70000000000000000000000000000000000083 +:10FD8000000000010000000100040001000001016A +:10FD900000840000000000000000000000000000DF +:10FDA0000000000000840000008400010000000149 +:10FDB0000000000000000000000000000000000043 +:10FDC0000000000000000000000000000000000033 :10FDD0000000000000000000000000000000000023 -:10FDE000000000040020404000A0000000000000CF +:10FDE0000000000000000000000000000000000013 :10FDF0000000000000000000000000000000000003 -:10FE000000000001000000000000000000000000F1 -:10FE100000000000000000000000000000000000E2 -:10FE200000000000000000000000000000000000D2 -:10FE30000000000000000000000000009010002002 -:10FE400020A0401000000000000000200000000082 +:10FE000000000000000004000000000000000400EA +:10FE100000000100000002000000000000000000DF +:10FE200000000000000002000400000000000400C8 +:10FE300000000000000008000000010000000000B9 +:10FE400000000000000000000000000000000000B2 :10FE500000000000000000000000000000000000A2 -:10FE60000000000000800000008000000000000092 +:10FE60000000000000000000000000000000000092 :10FE70000000000000000000000000000000000082 -:10FE80000000000000010000000000000000000071 -:10FE90000000000000000000000000000000000062 -:10FEA0000000000000000000000000000000000052 -:10FEB0000000000000000000000000000000000042 -:10FEC00000800000000000000000000000000000B2 +:10FE8000000000000000000000000000040000006E +:10FE90008000410041000000000500000200000059 +:10FEA000000000000000040000000000020000004C +:10FEB000000000000400000080000000410000007D +:10FEC0000000000000000000000000000000000032 :10FED0000000000000000000000000000000000022 -:10FEE0000000000000000040001000800000000042 -:10FEF000000000000000000000050000008000007D -:10FF000000000000000000010000000000000000F0 -:10FF100000000000000000000000000000000000E1 -:10FF200000000000000000000000000000000000D1 +:10FEE0000000000000000000000000000000000012 +:10FEF0000000000000000000000000000000000002 +:10FF000000000000000000000000000000000000F1 +:10FF10000004040000000000000003000000004096 +:10FF20000000000000000000001000400000000081 :10FF300000000000000000000000000000000000C1 -:10FF400000400080000000000000000000000000F1 +:10FF400000000000000000000000000000000000B1 :10FF500000000000000000000000000000000000A1 -:10FF6000000000000000000000000001000200008E -:10FF7000000000000000000000000000004000023F -:10FF80000000000000000000000100000000000070 -:10FF90000000000000000000000000000000000061 -:10FFA0000000000000000000000000000000000051 +:10FF60000000000000000000000000000000000091 +:10FF70000000000000000000000000000000000081 +:10FF80000000000000000000000000000000000071 +:10FF9000000000010100000000000000000000005F +:10FFA000000000000000000000000001000100004F :10FFB0000000000000000000000000000000000041 -:10FFC00000008401880240202000000000000000A2 +:10FFC0000000000000000000000000000000000031 :10FFD0000000000000000000000000000000000021 -:10FFE00000000000000000000000000000004100D0 -:10FFF00000000000000000000000000000004100C0 +:10FFE0000000000000000000000000000000000011 +:10FFF0000000000000000000000000000000000001 :02000004000AF0 -:1000000000000000000000000000000000000000F0 -:1000100000000000000000000000000000000000E0 -:1000200000000000000000000000000000000000D0 -:1000300000000000000000000000000000000000C0 -:1000400000000000000000000000000000000000B0 +:1000000000000000000000000000000000000020D0 +:1000100000000000000000420000000A410000E073 +:10002000000000000000000000000000810000E06F +:100030004000000000000008000000000000000870 +:100040000000000A000000000000000000000000A6 :1000500000000000000000000000000000000000A0 :100060000000000000000000000000000000000090 :100070000000000000000000000000000000000080 @@ -40981,7 +40981,7 @@ :100090000000000000000000000000000000000060 :1000A0000000000000000000000000000000000050 :1000B0000000000000000000000000000000000040 -:1000C000000000000000909F909F8181E7E7000002 +:1000C0000000000000000000000000000000000030 :1000D0000000000000000000000000000000000020 :1000E0000000000000000000000000000000000010 :1000F0000000000000000000000000000000000000 @@ -40989,243 +40989,243 @@ :1001100000000000000000000000000000000000DF :1001200000000000000000000000000000000000CF :1001300000000000000000000000000000000000BF -:1001400000000000000000000303F3F3096F096FD3 +:1001400000000000000000000000000000000000AF :10015000000000000000000000000000000000009F :10016000000000000000000000000000000000008F -:10017000000000000084208000000000000000005B -:1001800000000000008020020000000000000000CD +:10017000000000000000000000000000000000007F +:10018000000000000000000000000000000000006F :10019000000000000000000000000000000000005F :1001A000000000000000000000000000000000004F :1001B000000000000000000000000000000000003F :1001C000000000000000000000000000000000002F -:1001D0000000000000000000000000000000C3C399 -:1001E000C3C3000000000000000000000000000089 +:1001D000000000000000000000000000000000001F +:1001E000000000000000000000000000000000000F :1001F00000000000000000000000000000000000FF :1002000000000000000000000000000000000000EE :1002100000000000000000000000000000000000DE :1002200000000000000000000000000000000000CE :1002300000000000000000000000000000000000BE -:10024000000000000000000000000000D2D26600A4 -:10025000F0C3009900000000000000000000000052 -:10026000C3C3C3C300000000000000000000000082 +:1002400000000000000000000000000000000000AE +:10025000000000000000000000000000000000009E +:10026000000000000000000000000000000000008E :10027000000000000000000000000000000000007E :10028000000000000000000000000000000000006E :10029000000000000000000000000000000000005E :1002A000000000000000000000000000000000004E :1002B000000000000000000000000000000000003E -:1002C0000000000000000000000000000000D2D28A -:1002D000FF99F0C3FF9900610006000D00000000C7 +:1002C000000000000000000000000000000000002E +:1002D000000000000000000000000000000000001E :1002E000000000000000000000000000000000000E -:1002F000000000000000300000000000000C0000C2 -:1003000000000000000030000000000000000000BD -:1003100000000000000000000000000000000000DD -:1003200000000000000000000000000000000000CD -:1003300000000000000000000000000000000000BD -:1003400000000000000000000000000000000000AD -:100350000000000000C0000000000000FFFF0000DF +:1002F00000000000000000000000000000000000FE +:1003000000000000000000000000000000000000ED +:10031000000000000000000000610007000D000068 +:1003200000000007000C000000000007800C000027 +:10033000000000000000000005610A0F850D00A00C +:1003400000610007000D000000610007000D0000C3 +:10035000000000000000000000000000000000009D :10036000000000000000000000000000000000008D :10037000000000000000000000000000000000007D :10038000000000000000000000000000000000006D :10039000000000000000000000000000000000005D -:1003A000000000000000000000000000000000004D +:1003A00000000000FF00FFFF00000000FF00F0F071 :1003B000000000000000000000000000000000003D :1003C000000000000000000000000000000000002D -:1003D0000000000000000000000000000000FFFF1F +:1003D000000000000000000000000000000000001D :1003E000000000000000000000000000000000000D :1003F00000000000000000000000000000000000FD :1004000000000000000000000000000000000000EC :1004100000000000000000000000000000000000DC -:1004200000000000000000000000000000000000CC -:1004300000000000000000000000000000000000BC +:10042000000000000000FF00000000000000FF00CE +:10043000F0F00000000000000000000000000000DC :1004400000000000000000000000000000000000AC :10045000000000000000000000000000000000009C :10046000000000000000000000000000000000008C :10047000000000000000000000000000000000007C :10048000000000000000000000000000000000006C :10049000000000000000000000000000000000005C -:1004A000000000000000000000000000000000004C -:1004B000000000000000000000000000000000003C +:1004A0000000000000000000FFFF00FF000000004F +:1004B000FF00AAAA000000000000000000000000E9 :1004C000000000000000000000000000000000002C :1004D000000000000000000000000000000000001C :1004E000000000000000000000000000000000000C :1004F00000000000000000000000000000000000FC :1005000000000000000000000000000000000000EB :1005100000000000000000000000000000000000DB -:1005200000000000000000000000000000000000CB -:1005300000000000000000000000000000000000BB +:1005200000000000000000000000000000FF0000CC +:100530000000FF00AAAA0000000000000000000068 :1005400000000000000000000000000000000000AB :10055000000000000000000000000000000000009B -:1005600000000000000020000000880000000000E3 -:10057000000000000000000020000000000020003B -:10058000000000000000200004002000040004001F -:100590008800000000000000000090000000000043 -:1005A00000030000000000002000200020002000C8 -:1005B0002000200000000000000084002000000057 -:1005C0008800A0000000000020002000200088001B -:1005D00020002000000000000000000004000000D7 -:1005E00020050000000000000000000000000000E6 -:1005F00000000000000010000000000000000000EB +:10056000C0000000200020002000C000000020008B +:1005700020000000200020002000200000000000DB +:10058000200000002000200020002000000884043B +:1005900000000000000020000000880000080000AB +:1005A00000032000000020008800200000008808D0 +:1005B000C0000000000000008800000088000084E7 +:1005C00000902000000000000000880000000004EF +:1005D00000000000000000000000000020000004F7 +:1005E00000A000000020000000000000200000002B +:1005F00000000000000000000000000000000000FB :1006000000000000000000000000000000000000EA -:1006100000000000000000000000210000000000B9 -:100620000000000000000000008400000000000046 -:1006300000C0000021820000000000000000000057 -:1006400000000000000000000000000000000000AA -:1006500000000082000000A0009000000020008444 -:10066000000000000000000000000000000000008A -:100670000000000000000000000400000000000076 -:100680000008110000000000000000000000000051 -:100690000000000000000000000800110000000041 -:1006A000000020000000000000000000000000002A +:1006100000000000000000000000000000000000DA +:1006200000000000000000000000000000000000CA +:1006300000000004000000000000000000000000B6 +:100640000021002100000000000000000000000068 +:10065000000000000000000000000000000000009A +:100660000001001100000040000000000000000038 +:1006700000000000400000000000000000008400B6 +:10068000000810040000000000000000000000004E +:10069000000000000000000000000000000000005A +:1006A00000084004000000000000000000000000FE :1006B000000000000000000000000000000000003A -:1006C0000000020000000000000000000000000028 -:1006D000000000000000000000000000000000001A -:1006E00000000000000000000084000800000084FA -:1006F00000000000000000080008000000080008DA -:1007000000000008A0080000000800080000000029 -:10071000000000000000000800840000009000823B -:10072000000000048090000000840002000400002B -:100730000084000000000084008200000008000027 -:10074000000000000000000800000000008400001D -:100750000000000000000084000000000082000093 -:10076000000000840000008400210008000800212F -:100770000021000000210000000500030005002109 -:1007800000210000002100210021000800080021B4 -:1007900000080000002100080008000000050021FA -:1007A000002100000021C0080000002100210408F1 -:1007B000000500210000002188008803A005000436 -:1007C00000000021000000210108000000000021BD -:1007D0000000000800000021C0000000000000052B -:1007E00000000021000000210003000000000000C4 -:1007F000000000000000000000A000080000000051 -:1008000000000000080000000000000000000000E0 +:1006C000000000081000000000000000880000008A +:1006D0008800840000000000880000000000000086 +:1006E0000000008840080000000009000000000031 +:1006F00000000000000000000000000000000000FA +:100700000000000180010000000000000000000067 +:1007100000000000000000000000000000000500D4 +:100720000000000180010000000000000000000047 +:1007300000000000000400000000000000000000B5 +:1007400040000000000980000000000000000000E0 +:100750000000000000020000000000000000000097 +:1007600000000000002180010021000000000000C6 +:100770000000000000000004001100000000000064 +:100780000000000000000000000400000000000065 +:1007900000000041000000410000000000000000D7 +:1007A0000000000000000000000000000000000049 +:1007B0000000000000000000000000000000000039 +:1007C0000000000000000000000000210000000008 +:1007D0000000000000000000000000020000000017 +:1007E0000000000000000000000000000800000001 +:1007F00000000000000000000000000000000000F9 +:1008000000000000000000000000000000000000E8 :1008100000000000000000000000000000000000D8 :1008200000000000000000000000000000000000C8 :1008300000000000000000000000000000000000B8 -:10084000000000000000000000001000090005008A +:1008400000000000000000000500000000000000A3 :100850000000000000000000000000000000000098 -:10086000050003000900000000000308000000006C -:1008700082000000000000000000000000000000F6 -:10088000820000000000000000000000C000000026 -:1008900082000000000000000000000000000000D6 -:1008A00082000000080000000000080800000000AE -:1008B0000000820000000000000000008400000032 -:1008C000A0008200000000000000C0001000000036 -:1008D00082008200A00000000000000082000000F2 -:1008E0000000820000000800000000000800000076 -:1008F00000000000000000000000000000000000F8 -:1009000000000000000000000000000000000000E7 -:100910000000000000000000000000000000008453 -:1009200000000000000000000000000000010000C6 -:1009300000000000000800000000000000000000AF -:1009400000000000000000000000000000000000A7 -:10095000000005000000000000000000080000008A -:10096000000003000000000000000800000000007C -:100970000000002100000000000000000000000056 -:1009800000000008004000000004400900000000D2 -:100990000000000000000000000000000000000057 -:1009A000820000210008000000022000004000102A -:1009B0000003C000000004000000820000000000EE -:1009C000C00408000005000840000000000000000E -:1009D0000011400000000000000000008400000042 -:1009E00000000800000500000000000000000000FA -:1009F0000180000000000000000000000000000076 -:100A000000000000000000000000000800000000DE -:100A100000000000020000000000000000000000D4 -:100A200000000000000000000000000000000000C6 +:100860000000000000000000000000200000100058 +:10087000C0009000820040000000820000004000A4 +:100880000000A000820082000000C08010008200F2 +:10089000C0000400820004000000080008000000FE +:1008A0000000820008000800A00082800000820092 +:1008B00000000000080082000800000082008200A2 +:1008C0000000000004008200080000008284820012 +:1008D0000400000000000000000900000002000009 +:1008E00000000009000000000000C000008000407F +:1008F00000000000000000000000050021000000D2 +:1009000003000000000000000000000000020000E2 +:1009100000000000000000000000000000000000D7 +:1009200000000000000000000000000000080000BF +:1009300000000000000000000000000000000000B7 +:10094000000000000000080000000000000000039C +:100950000000000000000000000021000000030073 +:100960000000000000000000000000000000000483 +:10097000C00000000000A000000000000000000017 +:10098000100000000011000000000021000008001D +:10099000000000000000A0000000840000008200B1 +:1009A0000000000000000000000000050000000042 +:1009B0000000A00000000000840008008200A000E9 +:1009C0000000C000000000000800000084000000DB +:1009D0000000A0000000000000000800A000A0002F +:1009E00000000000000000000800000000000000FF +:1009F00000000000000000000000000000000000F7 +:100A000000000000000000000000000000000000E6 +:100A100000000000000000000000000000000000D6 +:100A200000000000000000000000001000000000B6 :100A300000000000000000000000000000000000B6 -:100A4000008800000000000000000000000000001E -:100A50000000000000000000000000000000000096 +:100A4000000000000000000000880000000000001E +:100A50000000000005000000000000000000000091 :100A60000000000000000000000000000000000086 -:100A7000002010040000000000210000840000009D -:100A80000000200000000000000300050005000039 -:100A90000005000800080000002100000000000020 -:100AA000000000000000000000210003000500001D -:100AB0000005000000000003000000210000840089 -:100AC000C0000000820800000000002100000000BB -:100AD000000800002000000000000000000084006A -:100AE00090008200002100000000000500000000CE -:100AF00000210008000000000000000000000000CD +:100A7000000000001000000082008200A0000000C2 +:100A80000000840000000000000082000000400020 +:100A90000000102100000000100082000000000093 +:100AA000000000000000000008000000400082007C +:100AB0000000004100000000A011080082000000BA +:100AC000000082000800000000000000A0001000EC +:100AD0000005000000000000902008000800000051 +:100AE000000008000800000000000000A000000056 +:100AF00000000000000000000000000000000000F6 :100B000000000000000000000000000000000000E5 :100B100000000000000000000000000000000000D5 -:100B200000000000000000000000000000000000C5 +:100B20000000000000000000000041000000000084 :100B300000000000000000000000000000000000B5 :100B400000000000000000000000000000000000A5 -:100B50000000000000008000000000000000000015 -:100B60000000000000000000000000000000000085 -:100B7000000000000000000000010001000100C0B2 -:100B80000001000100C0000300000101004000045A -:100B90000001080100C1000000010001000100C0C7 -:100BA0000001000100C001030000010100400084B9 -:100BB0000001000100C1000000000001000100016F -:100BC00000C00001000100C000030000010100405E -:100BD00000040001000100C100000001000100014B -:100BE00000C00001000100C00089000005010040B4 -:100BF00000A00001000100C10000004100410041CF -:100C000000820041004100820941000510410000BE -:100C1000008000410041008300000041004100418C -:100C20000082004100410082084100201041000084 -:100C3000000000410041008500000000004100412B -:100C40000041008900410041008208410005104137 -:100C5000000000800041004100850000004100418B -:100C6000004100890041004100820341000590419C -:100C70000000000000410041008500004100030029 -:100C80000000008041008800000008000800820089 -:100C9000008282004100C10000808000410003000A -:100CA00000000080410088000000080009001000DA -:100CB0000080C0004100C100008080800000410031 -:100CC00003000000008041008800000008000800C8 -:100CD0009000008083004100C100008080804100BE -:100CE0000300000000804100880000001000840024 -:100CF0000200008083004100C1000080808001006C -:100D00000100000000C00100C1000000010021003E -:100D100040C00008C1001100C10000828200010033 -:100D20000100000000C00100C100000001009000AF -:100D300084C00008C1000900C10000840202000054 -:100D400001000100000000C00100C100000001001E -:100D5000200004C00084C0088300C1000084020297 -:100D600001000100000000C00100C10000000100FE -:100D7000020041020004C1008300C100008402029D -:100D800000C00001C0C100000000000100C01090C0 -:100D90000041000110C1000000000001000000003F -:100DA00000C00001C0C100000000000100C0100828 -:100DB0000011000100C1000000000001000000005F -:100DC000000000C00001C0C100000000000100C020 -:100DD00010900091000100C100000000000100001F -:100DE000000000C00001C0C100000000000100C000 -:100DF00010410021000100C10000000000010000BE -:100E000000000080004180C1000000000041008916 -:100E1000801000C1004100C10000000000410041FD -:100E200000000080004180C10000000000410089F6 -:100E3000809000C1004100C100000000004100039B -:100E4000000000000080004180C10000000000415F -:100E5000008980200041004100C1000000000041E5 -:100E6000000300000080004180C10000000000413C -:100E7000008900020041004100C100000000004163 -:100E800000030000C100800080C10000410280001A -:100E900090004100C1C10000800200004108000034 -:100EA00080004100C100800080C10000410280003C -:100EB00090004100C1418000800800004100000016 -:100EC000800041000000C100800080C1000041029C -:100ED000800090004100C1C18000801000004100EE -:100EE000000080004100C100800080C1000041027C -:100EF000800090004100C1410000800800004100D6 -:100F0000000080004100C1004000C0C1000001009D -:100F1000200010000100C109C000C0000000010055 -:100F20000000C0000100C1004000C0C1000001007D -:100F3000200010000100C1031000C00000000100EB -:100F40000000C00001000000C1004000C0C100005E -:100F50000100200010000100C1110200C0010000CA -:100F600001000000C0000100C1004000C0C100003D -:100F70000100200010000100C1831000C00000002B -:100F800001000000C000010000000000000000425D -:100F900000000000000000008112008807004800E7 -:100FA00000000000000000000000000000000042FF -:100FB00000000000000000008112008807004800C7 +:100B50000000000000000000000000000000000095 +:100B600000000000000021900000000000000000D4 +:100B70000000000000000000010020000000000153 +:100B800000009000000101020001000000081010A8 +:100B90000000000000010000000000000000000153 +:100BA0000000820000000182000000000008C00474 +:100BB0000000000000010000000000000000000034 +:100BC000000100008200000100C00001C000002000 +:100BD000C0820000C0000001000000000000000012 +:100BE000000000000000000100C00001C000002063 +:100BF000C0820000C0000001000020008000000052 +:100C00000010000000000003048008102100000014 +:100C10008000000000000041000000000000000013 +:100C2000001000000000002010800841210000009A +:100C30000000000000000041000000000000000073 +:100C40000000004000000000002040000010A00054 +:100C50000000808000008000000300000000000011 +:100C6000000000400000000000024000001088006A +:100C700000008080000080000003000000002100D0 +:100C800000000000000002000000050091000200CA +:100C90000000090000000000000080400000050086 +:100CA00000000000000040000000200003004000A1 +:100CB000004009000000000000008020000000004B +:100CC00002000000000000000500000003004100D9 +:100CD0008200000203008000000000838003000007 +:100CE00002000000000000004000000010000300AF +:100CF00002000000030000000000008080200000CF +:100D000000000000000000000100000000000400DE +:100D1000910800000000400000000000C00000003A +:100D20000000000000000000000000000000400083 +:100D3000900800000000400000000000C00000001B +:100D400000000100000000000000000000000100A1 +:100D500040000990000101004000000000C0820036 +:100D60000000010000000000000000000000010081 +:100D700040004190000001009000000000C082008F +:100D800000000000C0000000000000000000820021 +:100D9000000200000100000000000000000100004F +:100DA00000000000000000000000000000018200C0 +:100DB00000880000000000000000000000010000AA +:100DC0000000000000000000000000000000000023 +:100DD0000401000200000300000000000000000009 +:100DE0000000000000000000000000000000000003 +:100DF00004010002000003000000000000000000E9 +:100E00000000000000008000000000000000002042 +:100E100080200000000003000000000000000041EE +:100E200000000000000000000000000000000002C0 +:100E300080050000000011000000000000000041DB +:100E400000000000000000000000000000000000A2 +:100E50000003800200800000C100000000000000CC +:100E60000041000000000000000000000000000041 +:100E70000003800200800000C100000000000000AC +:100E8000004100000000800000C100000008804018 +:100E90008500000000410040000800000000000044 +:100EA000000005080000800500830000000880089D +:100EB00085000000004180000008000000000000E4 +:100EC000000020020000000000020083000000205B +:100ED0008010C100000000418000000500000041BA +:100EE0000000000005030000000200830000002055 +:100EF0000010C1000000004180000005000000411A +:100F00000002000003050000400000C100000000D6 +:100F1000020040000000004140010000000000000D +:100F20000000000000090000040000830000000031 +:100F3000020040000000002102000000000000004C +:100F40000000000000090000000082010083000092 +:100F500000010201820000000003400000000000C8 +:100F600000010000000000820000820100830000F8 +:100F7000000120018200000000114000000000007C +:100F800000010001000001820000000000000011CB +:100F90000000000000000000811200E0070048008F +:100FA0000000000000000000000000000000000041 +:100FB0000000000000000000811200E0070048006F :100FC0000000000000000000000000000000000021 -:100FD00000420000000000000000811200880700AD -:100FE00048000000000000000000000000000000B9 -:100FF000004200000000000000008112008807008D -:101000004800000000000000000000000000000098 +:100FD00000000000000000000000811200E080001E +:100FE00048420000000000004842000000000000ED +:100FF00000000000000000000000811200E08000FE +:1010000048420000000000004842000000000000CC :1010100000000000000000000000000000000000D0 :1010200000000000000000000000000000000000C0 :1010300000000000000000000000000000000000B0 @@ -41250,111 +41250,111 @@ :101160000000000000000000000000000000DEAEF3 :10117000757B00000000000000000000000000007F :101180000000000000000000000000000000DEAED3 -:1011900060C603000000000000000031E000000015 -:1011A000000000000C0000000000000000C063060A -:1011B00060C603000000000000000031E0000000F5 -:1011C000000000000C0000000000000000C06306EA -:1011D000000060C603000000000000000031E000D5 -:1011E0000000000000000C0000000000000000C033 -:1011F000630660C603000000000000000031E0004C -:101200000000000000000C0000000000000000C012 -:101210006306200020020000000000000000000023 -:10122000000020000000000000000000000000009E -:101230000000200020000000C000000000000000AE -:10124000100020000000000000000000000000046A -:101250000004000220002000000020000000000028 -:10126000000000002000000000000000000000005E -:1012700000008800200020000000004100008400E1 -:1012800000000400200000008400000000000000B6 -:10129000000000000020000000000000000000002E -:1012A000000000000000000000000000000000003E -:1012B000000000000002000200000000000000002A -:1012C0000000000000000000000000000004000416 -:1012D00000000000000000000000000011000000FD +:10119000612603400000000000000230A0000000B3 +:1011A000000000000C4000000000000002C0648647 +:1011B000612603400000000000000230A000000093 +:1011C000000000000C4000000000000002C0648627 +:1011D0000000612603400000000000000230A00073 +:1011E0000000000000000C4000000000000002C0F1 +:1011F0006486612603400000000000000230A00069 +:101200000000000000000C4000000000000002C0D0 +:101210006486000040002000200020002000200004 +:1012200020002000200000002000200020002000DE +:1012300020004000200020000400200020002000AA +:1012400020002000200000002000200020000000DE +:101250002000000020002000200088002000200046 +:1012600020002000000020000000200420000000DA +:1012700000008400000020002000000000000000AA +:1012800020002000000000000000200000000000FE +:101290000000000000000000000009000400090038 +:1012A00000000000090000000500000040000000F0 +:1012B000000000000000000000000000040000002A +:1012C000000000000000000000000000000000001E +:1012D000000000000000000000000000040000000A :1012E00000000000000000000000000000000000FE -:1012F00000000000000000000000000000C000002E -:10130000000000008020000000000000000000003D -:101310000500000000200000000000000210000096 -:1013200000000000000000000000000000000000BD -:1013300000000000000000000000000002000000AB -:10134000020000000000000000000000000000009B -:10135000020000000000000000000000000000008B -:10136000000000000000000000000000000000007D +:1012F000000000000000000000000000004020008E +:1013000000000000000000002000000000000000BD +:1013100000000000000000000000000000000000CD +:10132000000000000000000000000000900000002D +:1013300000000000000000000000000000000000AD +:10134000000000000000080008000800080908006C +:101350000800080008000000000000000000000075 +:1013600000000000000000000000000000009000ED :10137000000000000000000000000000000000006D -:10138000000000000000000000000000000000005D -:101390000000000000000000000000000008000045 -:1013A0000008000800000008000000000008008499 -:1013B000000000000008008200000000000800009B -:1013C0000088000800000084000000000008000001 -:1013D0000000000000880000000000000000008401 -:1013E00000000000000800000000000000000008ED -:1013F00000000000000000000000000000000000ED -:1014000000000000000800000000000000000010C4 +:1013800000002000880000000000840000008409A4 +:10139000000000000000200000000000000000002D +:1013A000000000000000000000000000000000003D +:1013B000000000000000000000000000000000002D +:1013C000000000000000000000000000000000001D +:1013D00000000000000000000000000000000010FD +:1013E00000000000000000000000200000000000DD +:1013F00000000000200000000000000000000000CD +:1014000000000000000000000000000000000000DC :1014100000000000000000000000000000000000CC :1014200000000000000000000000000000000000BC :1014300000000000000000000000000000000000AC -:10144000002100000000000000000000000000007B -:101450000005000000000000002100000000000066 -:10146000000000000021000000000011000000004A -:10147000000900000009000000000000000000005A +:10144000000000000000000000000000000000009C +:10145000000000000000000000000000000000008C +:10146000000000000000000000000000000000007C +:10147000400000000000000000000000000000002C :10148000000000000000000000000000000000005C -:10149000000000001000000000000800080000002C -:1014A00000000000410000000000000000000000FB -:1014B000000800A0000000000084000200000000FE -:1014C00000000000210000000000000000000000FB -:1014D0000008008400A000000000000000000820B8 -:1014E000000000002000410000000000000000009B -:1014F0000000000800000088110000000000080043 -:1015000008000000000021000000100000000000A2 -:10151000000000100082000000840088110000001C -:1015200000000000000000000000000000000000BB -:1015300000000000000000000000000000000000AB -:10154000000000000000000000000000000000009B -:10155000000000000000000000000000000000008B -:101560000000000000000000000000000000080073 -:10157000000000000000000000000000000000006B -:101580000000000000000000A0000000A00000001B -:10159000A0000400A000A0008200A00082000000C3 +:101490000000000000000000000000000000080044 +:1014A00041004100000000000000000000000000BA +:1014B0000000000000000000008400000000410067 +:1014C00021000300000003000000000000000000F5 +:1014D00000004100090000000000080000000000BA +:1014E0000000000008000000200041000000000093 +:1014F0004100400000000400000000000000000067 +:101500000000410000000000000041000000000059 +:1015100000000000410000880200000000001000F0 +:10152000000000004000000000000000000010006B +:1015300000000000400000004000000000008200A9 +:101540000000000008000000000000000000000093 +:1015500000090000820000000000080000000000F8 +:101560000000000000000000000000000400000077 +:1015700000000000000000000000000082000000E9 +:1015800000000000000084000011000000090000BD +:10159000000000000000000000000000000000004B :1015A000000000000000000000000000000000003B :1015B000000000000000000000000000000000002B -:1015C000000000000000000000000000000000001B +:1015C00000004100000000000000000000000000DA :1015D000000000000000000000000000000000000B :1015E00000000000000000000000000000000000FB :1015F00000000000000000000000000000000000EB -:1016000000000000000000000000000000000000DA +:101600000000000000000000000000000000410099 :1016100000000000000000000000000000000000CA -:1016200000000000080000000000000000000000B2 -:1016300000000000000000000000000000000000AA -:10164000000000000000000000000000000000009A +:1016200000000000000000000000100000000000AA +:101630000000000000000000C00000000000A0004A +:101640000400000000000000000040000000000056 :10165000000000000000000000000000000000008A -:101660000000000000000800000200000000000070 -:10167000000000000000000000000000000000006A -:101680000000000000000000000008000000000052 -:101690000000040000000005000000000000000041 -:1016A0000009000000000000000000000008000821 -:1016B0001100000808000000000000000000000009 -:1016C0000008000000000000000000000002000808 -:1016D000000000A008000000000009000000000059 +:1016600000000000000000000000820000000000F8 +:1016700082000000000000000000000000000000E8 +:10168000000008000000000000000800A0000000AA +:101690000000000000000000000000000800000042 +:1016A0000000000000000000030000001000000027 +:1016B000000000001000000008000300009000007F +:1016C00000000000000000004100000000000000D9 +:1016D0002100000003000090000000000000000056 :1016E00000000000000000000000000000000000FA -:1016F0000008110000900800000011001100000017 -:1017000000000000000000000000000010000008C1 -:101710000008210080000800000000000000000018 -:101720000000000040000000000000080000000071 -:1017300000000000000000000000000000000000A9 -:101740000000000000000800000000080000000089 +:1016F000080000000000080000000000202000009A +:1017000000000000000000000000000000000000D9 +:1017100008000300000010000000000003000000AB +:1017200000000000080000000000001000000000A1 +:1017300000000000000000000000080000000000A1 +:101740000000C000000000000000040800000000CD :101750000000000000000000000000000000000089 -:101760000000000000030000000000000000000076 +:101760000000000000000000000000000000000079 :101770000000000000000000000000000000000069 -:1017800000000000000000008400000010000000C5 -:1017900084000000C00020000000042000000000C1 -:1017A0000000000300000000000000000000000036 +:101780000000000000000000080000000000000051 +:101790000000000000000000000000000000000049 +:1017A0000000000000000000000000000000000039 :1017B0000000000000000000000000000000000029 :1017C0000000000000000000000000000000000019 :1017D0000000000000000000000000000000000009 :1017E00000000000000000000000000000000000F9 :1017F00000000000000000000000000000000000E9 -:1018000000000000000000000000000000000000D8 -:101810000000000000000000800000000000000048 +:101800000000000000000000000000000000410097 +:1018100000000000000000000000000000000000C8 :1018200000000000000000000000000000000000B8 :1018300000000000000000000000000000000000A8 :101840000000000000000000000000000000000098 @@ -41370,7 +41370,7 @@ :1018E00000000000000000000000000000000000F8 :1018F00000000000000000000000000000000000E8 :1019000000000000000000000000000000000000D7 -:1019100000000000000000000000030000000000C4 +:1019100000000000000000000000000000000000C7 :1019200000000000000000000000000000000000B7 :1019300000000000000000000000000000000000A7 :101940000000000000000000000000000000000097 @@ -41378,7 +41378,7 @@ :101960000000000000000000000000000000000077 :101970000000000000000000000000000000000067 :101980000000000000000000000000000000000057 -:1019900000000000000000000000000000000080C7 +:101990000000000000000000000000000000000047 :1019A0000000000000000000000000000000000037 :1019B0000000000000000000000000000000000027 :1019C0000000000000000000000000000000000017 @@ -41387,7 +41387,7 @@ :1019F00000000000000000000000000000000000E7 :101A000000000000000000000000000000000000D6 :101A100000000000000000000000000000000000C6 -:101A200000100000000000000000000000000000A6 +:101A200000000000000000000000000000000000B6 :101A300000000000000000000000000000000000A6 :101A40000000000000000000000000000000000096 :101A50000000000000000000000000000000000086 @@ -41395,7 +41395,7 @@ :101A70000000000000000000000000000000000066 :101A80000000000000000000000000000000000056 :101A90000000000000000000000000000000000046 -:101AA0000000000000000200000000000000000034 +:101AA0000000000000000000000000000000000036 :101AB0000000000000000000000000000000000026 :101AC0000000000000000000000000000000000016 :101AD0000000000000000000000000000000000006 @@ -41403,7 +41403,7 @@ :101AF00000000000000000000000000000000000E6 :101B000000000000000000000000000000000000D5 :101B100000000000000000000000000000000000C5 -:101B200000000000410000008000000000000000F4 +:101B200000000000000000000000000000000000B5 :101B300000000000000000000000000000000000A5 :101B40000000000000000000000000000000000095 :101B50000000000000000000000000000000000085 @@ -41411,7 +41411,7 @@ :101B70000000000000000000000000000000000065 :101B80000000000000000000000000000000000055 :101B90000000000000000000000000000000000045 -:101BA0000000000300000000000000000000000032 +:101BA0000000000000000000000000000000000035 :101BB0000000000000000000000000000000000025 :101BC0000000000000000000000000000000000015 :101BD0000000000000000000000000000000000005 @@ -41427,7 +41427,7 @@ :101C70000000000000000000000000000000000064 :101C80000000000000000000000000000000000054 :101C90000000000000000000000000000000000044 -:101CA00000000000484200E00700000000000000C3 +:101CA0000000000000000000000000000000000034 :101CB0000000000000000000000000000000000024 :101CC0000000000000000000000000000000000014 :101CD0000000000000000000000000000000000004 @@ -41467,8 +41467,8 @@ :101EF00000000000000000000000000000000000E2 :101F000000000000000000000000000000000000D1 :101F100000000000000000000000000000000000C1 -:101F20000000000000000000000000000000006150 -:101F3000003FC00D21A000000000000000000000D4 +:101F200000000000000000000000000000000000B1 +:101F300000000000000000000000000000000000A1 :101F40000000000000000000000000000000000091 :101F50000000000000000000000000000000000081 :101F60000000000000000000000000000000000071 @@ -41501,96 +41501,96 @@ :1021100000000000000000000000000000000000BF :1021200000000000000000000000000000000000AF :10213000000000000000000000000000000000009F -:10214000000000000000000000000000000000008F -:10215000000000100000000000002000000000004F -:10216000000000000000000000000000000000006F -:10217000000000100000000000002000000000052A -:10218000000000000000400000000000000000000F -:102190000800000000000000000000002011000006 -:1021A00000000000000210002000000000000000FD -:1021B00000000000000000000000000020000000FF -:1021C00000000000000020002000000000000000CF -:1021D00000000000000000000000000000000000FF -:1021E00000000000000000000000000000000000EF +:10214000000000000000000000000000000020006F +:102150008800000020000000200004000000A00013 +:1021600020002000200020000000000020002000AF +:10217000000000002000000000000000000000003F +:10218000000000000000200000000000000400002B +:10219000000000000000200000000000000000001F +:1021A0000000000000000000200000000004000407 +:1021B00000000000000020000000000000000000FF +:1021C00000000000400000000000000000040000CB +:1021D00004000000000000000000000000000400F7 +:1021E00020000000040000000000000000000000CB :1021F00000000000000000000000000000000000DF :1022000000000000000000000000000000000000CE -:1022100000000000000000000000000000000000BE -:10222000210000000000000000000000000000008D +:1022100000000000000000000000040000000000BA +:1022200000000000000000000000000000000000AE :10223000000000000000000000000000000000009E :10224000000000000000000000000000000000008E -:10225000000000000000000000000000020000007C -:10226000040000000000000000000000000000006A -:10227000000000000000000000000000000000005E -:102280000400000002000200000000000000000046 -:1022900082000000000000000000000000000000BC -:1022A000000000000000000000020000000000002C -:1022B000000000000000000000000000000000001E -:1022C000000000000000000000000000000000000E +:102250000000000000000000000000000000080076 +:10226000001000000000000000000000000000005E +:1022700000000000000000000000000084000800D2 +:102280000800000000000000000000000000000046 +:10229000000000000000000000000000000000003E +:1022A0000800000000000000000000000000000026 +:1022B0000000820000000000000000000400820016 +:1022C0000800001000000000820000000000000074 :1022D00000000000000000000000000000000000FE :1022E00000000000000000000000000000000000EE :1022F00000000000000000000000000000000000DE :1023000000000000000000000000000000000000CD :1023100000000000000000000000000000000000BD :1023200000000000000000000000000000000000AD -:102330000000000000000000000000000000000895 -:10234000000000000000000000000000000000008D +:10233000000000000000000000000000000000009D +:1023400000000000000000900000000000000000FD :10235000000000000000000000000000000000007D -:10236000000000000000000000000000000000006D -:10237000400000000000000000000000000000001D -:102380000000000000000000000000000200040047 -:102390000000000000000000020500000000000036 -:1023A000000000000000C000040000000000400029 -:1023B0000000000000000000080000000000000015 -:1023C0000000000000000000000000000000080005 +:10236000080000000000400008000800080000000D +:1023700000000000000084000800000000000000D1 +:10238000080008000000080008000800080000001D +:102390000000000000000000080000000000000035 +:1023A000000000000000000000000000000000002D +:1023B000000000000000000000000000000000001D +:1023C00000000000000000000000400000000000CD :1023D00000000000000000000000000000000000FD :1023E00000000000000000000000000000000000ED -:1023F00000000000000021000000000000000010AC -:10240000000000000000000000820000000000004A +:1023F00000000000000000000000000000000000DD +:1024000000000000000000000000000000000000CC :1024100000000000000000000000000000000000BC -:10242000000000000000002000000000000000008C -:102430000000110000000000000004000000000087 +:1024200000000000000000000000000800000000A4 +:102430000000000000000020040000000000000078 :10244000000000000000000000000000000000008C :10245000000000000000000000000000000000007C -:10246000000000000000000000000000000000006C -:10247000000000000000000000000000000000005C +:102460000000080000000000000000000000000064 +:102470000000000000000000000000000800000054 :10248000000000000000000000000000000000004C :10249000000000000000000000000000000000003C :1024A000000000000000000000000000000000002C :1024B000000000000000000000000000000000001C -:1024C000000000000000000000000000000000000C -:1024D00000000000000000000000000000000000FC +:1024C0000000000000000000000000040000000008 +:1024D00000020000000000000000000000000000FA :1024E00000000000000000000000000000000000EC :1024F00000000000000000000000000000000000DC :1025000000000000000000000000000000000000CB :1025100000000000000000000000000000000000BB :1025200000000000000000000000000000000000AB :10253000000000000000000000000000000000009B -:10254000000000000000000000000000000000008B +:10254000110000000000000000000000000000007A :10255000000000000000000000000000000000007B :10256000000000000000000000000000000000006B :10257000000000000000000000000000000000005B :10258000000000000000000000000000000000004B -:1025900000000000000000000000000000400000FB -:1025A0000200000000000000000000000000000029 +:10259000000000000000000000000000000000003B +:1025A000000000000000000000000000000000002B :1025B000000000000000000000000000000000001B :1025C000000000000000000000000000000000000B :1025D00000000000000000000000000000000000FB -:1025E00000000000000000000000000000100000DB -:1025F00000000000000000000000000000000000DB +:1025E00000000000000000000000000000000000EB +:1025F00000000000000000000300000000000000D8 :1026000000000000000000000000000000000000CA -:10261000000000004000000000000000000000007A -:1026200000000000000000000000000000000004A6 -:1026300000000000000000200988000000200000C9 +:1026100000000300000000000000000000000800AF +:1026200000000000000000000000000000000000AA +:10263000000000000000000000000000000000009A :10264000000000000000000000000000000000008A -:10265000000000000000000000000000000000007A -:10266000002000000000000000000000000000004A -:102670000000000000000000080000000000000052 +:10265000000000000000000000000000002000005A +:10266000000000000000000000000000000000006A +:10267000000000000000000000000000000000005A :10268000000000000000000000000000000000004A :10269000000000000000000000000000000000003A -:1026A0000000000000000000000000000008000022 +:1026A000000000000000000000000000000000002A :1026B000000000000000000000000000000000001A :1026C000000000000000000000000000000000000A -:1026D00000000000000000000000000000000000FA +:1026D00000000000000000000000000008000000F2 :1026E00000000000000000000000000000000000EA :1026F00000000000000000000000000000000000DA :1027000000000000000000000000000000000000C9 @@ -41754,48 +41754,48 @@ :1030E00000000000000000000000000000000000E0 :1030F00000000000000000000000000000000000D0 :1031000000000000000000000000000000000000BF -:103110000000000000008800000000000000000027 +:10311000000000004000000000000000000000006F :10312000000000000000200000000000000000007F -:10313000000000000000200000000000000000006F -:10314000000000000000200000000000000200005D -:10315000000000000000000420040004000400003F +:10313000000000000000000000000000000000008F +:10314000000000000000200000000000000000005F +:10315000000000000000000000000000000000006F :10316000000000000000000020000000000000003F -:10317000000000000000000020000000000000002F -:10318000000000000000000020000000000000001F -:10319000000000000000000000000000000000002F +:103170000000000000040000040000000000000047 +:10318000000000000000000020000000000010000F +:1031900000000000000020000000002000004000AF :1031A000000000000000000000000000000000001F :1031B000000000000000000000000000000000000F :1031C00000000000000000000000000000000000FF -:1031D00000000000000000000001000100030001E9 -:1031E000000000004100100000000000400000004E -:1031F000000000000000000040000000000000008F +:1031D00000000000000000000000000000000000EF +:1031E000000000000000000040000000000000009F +:1031F00004000000000000000000000000000000CB :1032000000000000000000000000000000000000BE -:1032100000000000000000000000000000000200AC -:10322000020000000000000002000000000000009A -:10323000000002000000000000000200000000008A -:10324000000000000000020000000000000000007C -:10325000000000000000000000001100100020002D -:10326000000000000000000000000000000000005E -:10327000000000000000000000000000000000004E -:10328000000000000000000000000200000000003C -:103290000000000800000000000000000000000026 -:1032A000000000080008000000000000000000000E -:1032B0000000000800000000000000000000000006 -:1032C00000000008000800000000000000000000EE -:1032D000000000000008000000000000A0008000C6 -:1032E000800000000008000800000000000000004E -:1032F00000000000000800000000000000000000C6 -:1033000000000000000800080000000000000000AD +:1032100000000000000000000000000000000000AE +:10322000000000000000000000000000000000009E +:10323000000000000000001000000000000000007E +:1032400000008200000000000000000000000000FC +:10325000000000000000000000000000000000006E +:103260000000020002000200020000000000000056 +:1032700000000400000000000010820084008200B2 +:10328000000000000000000000000000000000003E +:10329000000000000000000000000000000000002E +:1032A000000000000000000000000000000000001E +:1032B000000000000000000000000000000000000E +:1032C00000000000000000000000000000000000FE +:1032D00000000000000000000000000000000000EE +:1032E00000000000000000000000000000000000DE +:1032F00000000000000000000000000000000000CE +:1033000000000000000000000000000000000000BD :1033100000000000000000000000000000000000AD :10332000000000000000000000000000000000009D -:10333000000000000000000000000000000000008D +:103330000000000000000000000000000800000085 :10334000000000000000000000000000000000007D :10335000000000000000000000000000000000006D -:10336000000000000000000000000000000000005D +:10336000000000000000000000000200000000005B :10337000000000000000000000000000000000004D :10338000000000000000000000000000000000003D -:103390000000000004000000000000000000000029 -:1033A000000000000000000000000000000000001D +:10339000000000000000000000000000000000002D +:1033A0000000000000000000000000000000080015 :1033B000000000000000000000000000000000000D :1033C00000000000000000000000000000000000FD :1033D00000000000000000000000000000000000ED @@ -41809,7 +41809,7 @@ :10345000000000000000000000000000000000006C :10346000000000000000000000000000000000005C :10347000000000000000000000000000000000004C -:10348000000000000000000000000000000000003C +:10348000000000400040004000400000000000003C :10349000000000000000000000000000000000002C :1034A000000000000000000000000000000000001C :1034B000000000000000000000000000000000000C @@ -41832,7 +41832,7 @@ :1035C00000000000000000000000000000000000FB :1035D00000000000000000000000000000000000EB :1035E00000000000000000000000000000000000DB -:1035F00000200000050000000000000000000000A6 +:1035F00000000000000000000000000000000000CB :1036000000000000000000000000000000000000BA :1036100000000000000000000000000000000000AA :10362000000000000000000000000000000000009A @@ -41872,7 +41872,7 @@ :103840000000000000000000000000000000000078 :103850000000000000000000000000000000000068 :103860000000000000000000000000000000000058 -:1038700000000041000000410000000000000000C6 +:103870000000000000000000000000000000000048 :103880000000000000000000000000000000000038 :103890000000000000000000000000000000000028 :1038A0000000000000000000000000000000000018 @@ -41880,7 +41880,7 @@ :1038C00000000000000000000000000000000000F8 :1038D00000000000000000000000000000000000E8 :1038E00000000000000000000000000000000000D8 -:1038F00000000000000100000001000000000000C6 +:1038F00000000000000000000000000000000000C8 :1039000000000000000000000000000000000000B7 :1039100000000000000000000000000000000000A7 :103920000000000000000000000000000000000097 @@ -41888,7 +41888,7 @@ :103940000000000000000000000000000000000077 :103950000000000000000000000000000000000067 :103960000000000000000000000000000000000057 -:103970000000000000000000C00100000000000086 +:103970000000000000000000000000000000000047 :103980000000000000000000000000000000000037 :103990000000000000000000000000000000000027 :1039A0000000000000000000000000000000000017 @@ -41896,7 +41896,7 @@ :1039C00000000000000000000000000000000000F7 :1039D00000000000000000000000000000000000E7 :1039E00000000000000000000000000000000000D7 -:1039F0000000000000000000000080110000200016 +:1039F00000000000000000000000000000000000C7 :103A000000000000000000000000000000000000B6 :103A100000000000000000000000000000000000A6 :103A20000000000000000000000000000000000096 @@ -41905,7 +41905,7 @@ :103A50000000000000000000000000000000000066 :103A60000000000000000000000000000000000056 :103A70000000000000000000000000000000000046 -:103A80000011000000000000000000000000000025 +:103A80000000000000000000000000000000000036 :103A90000000000000000000000000000000000026 :103AA0000000000000000000000000000000000016 :103AB0000000000000000000000000000000000006 @@ -41913,7 +41913,7 @@ :103AD00000000000000000000000000000000000E6 :103AE00000000000000000000000000000000000D6 :103AF00000000000000000000000000000000000C6 -:103B000000000001000000000000000000000000B4 +:103B000000000000000000000000000000000000B5 :103B100000000000000000000000000000000000A5 :103B20000000000000000000000000000000000095 :103B30000000000000000000000000000000000085 @@ -41921,7 +41921,7 @@ :103B50000000000000000000000000000000000065 :103B60000000000000000000000000000000000055 :103B70000000000000000000000000000000000045 -:103B800002E00000484200000000000000000000C9 +:103B80000000000000000000000000000000000035 :103B90000000000000000000000000000000000025 :103BA0000000000000000000000000000000000015 :103BB0000000000000000000000000000000000005 @@ -41961,7 +41961,7 @@ :103DD00000000000000000000000000000000000E3 :103DE00000000000000000000000000000000000D3 :103DF00000000000000000000000000000000000C3 -:103E0000000000000000000000640006000E20001A +:103E000000000000000000000000000000000000B2 :103E100000000000000000000000000000000000A2 :103E20000000000000000000000000000000000092 :103E30000000000000000000000000000000000082 @@ -41969,7 +41969,7 @@ :103E50000000000000000000000000000000000062 :103E60000000000000000000000000000000000052 :103E70000000000000000000000000000000000042 -:103E80000000000000000000000000000000F0F052 +:103E80000000000000000000000000000000000032 :103E90000000000000000000000000000000000022 :103EA0000000000000000000000000000000000012 :103EB0000000000000000000000000000000000002 @@ -41978,7 +41978,7 @@ :103EE00000000000000000000000000000000000D2 :103EF00000000000000000000000000000000000C2 :103F000000000000000000000000000000000000B1 -:103F1000F0F00000000000000000000000000000C1 +:103F100000000000000000000000000000000000A1 :103F20000000000000000000000000000000000091 :103F30000000000000000000000000000000000081 :103F40000000000000000000000000000000000071 @@ -41986,7 +41986,7 @@ :103F60000000000000000000000000000000000051 :103F70000000000000000000000000000000000041 :103F80000000000000000000000000000000000031 -:103F90000000AAAA000000000000000000000000CD +:103F90000000000000000000000000000000000021 :103FA0000000000000000000000000000000000011 :103FB0000000000000000000000000000000000001 :103FC00000000000000000000000000000000000F1 @@ -41994,34 +41994,34 @@ :103FE00000000000000000000000000000000000D1 :103FF00000000000000000000000000000000000C1 :1040000000000000000000000000000000000000B0 -:1040100000000000AAAA000000000000000000004C +:1040100000000000000000000000000000000000A0 :104020000000000000000000000000000000000090 :104030000000000000000000000000000000000080 :104040000000000000000000000000000000000070 :104050000000000000000000000000000000000060 -:104060002000000000000000000000000000000030 +:104060000000000000000000000000000000000050 :104070000000000000000000000000000000000040 -:104080000000000000000000000000000000001020 -:10409000000000000000000000020000000000001E +:104080000000000000000000000000000000000030 +:10409000000000000000000000040000000000001C :1040A0000000000000000000000000000000000010 -:1040B0000000000000000000000000000000000000 +:1040B00000000000000000040002000000000000FA :1040C00000000000000000000000000000000000F0 -:1040D00000000000000000000000000000020000DE +:1040D00000000000000000000000000000000000E0 :1040E00000000000000000000000000000000000D0 -:1040F0000000400000000000000000000000000080 -:1041000000000000000000000000000000000002AD +:1040F00000000000000000000000000000000000C0 +:1041000000000000000000000000000000000000AF :10411000000000000000000000000000000000009F :10412000000000000000000000000000000000008F -:10413000000000000000000000000000000000007F -:10414000000000000000000000020000000000006D -:10415000000000000000000000000000000000005F -:10416000000000000000000000000200000000004D +:10413000100000000000000000020000000000006D +:10414000000000000000000000000002000000006D +:10415000000000000000000000000000020000005D +:10416000000000000000020000000200000000004B :10417000000000000000000000000000000000003F -:10418000000000000000000000000000000000002F +:1041800000000000000000000000004000000000EF :10419000000000000000000000000000000000001F -:1041A000000000000000000000000200000000000D -:1041B00000000000000000000000000000000000FF -:1041C00000000000000000000000000000000000EF +:1041A00000000000000000000000000008400000C7 +:1041B00000000000020000000200020000000000F9 +:1041C0000200820000000000000000000200000069 :1041D00000000000000000000000000000000000DF :1041E00000000000000000000000000000000000CF :1041F00000000000000000000000000000000000BF @@ -42031,26 +42031,26 @@ :10423000000000000000000000000000000000007E :10424000000000000000000000000000000000006E :10425000000000000000000000000000000000005E -:10426000000000000000000000000400000000004A +:10426000100000000000000000000000000000003E :10427000000000000000000000000000000000003E -:10428000000000000400000000000000000000002A +:10428000000000000000000000000000000000002E :10429000000000000000000000000000000000001E -:1042A00004000000000000001000000000000000FA +:1042A000000000000000000000000000000000000E :1042B00000000000000000000000000000000000FE -:1042C00000000000000000000000000000000000EE +:1042C00000000000040000000000000000000000EA :1042D00000000000000000000000000000000000DE :1042E00000000000000000000000000000000000CE :1042F00000000000000000000000000000000000BE :1043000000000000000000000000000000000000AD -:10431000000000000000000000004100000000005C -:104320000400000000000000000000000000000089 +:10431000000000000000000000000000000000009D +:10432000000000000000000000000000000000008D :10433000000000000000000000000000000000007D :10434000000000000000000000000000000000006D :10435000000000000000000000000000000000005D :10436000000000000000000000000000000000004D :10437000000000000000000000000000000000003D :10438000000000000000000000000000000000002D -:1043900000000040000000000000000000000000DD +:10439000000000000000000000000000000000001D :1043A000000000000000000000000000000000000D :1043B00000000000000000000000000000000000FD :1043C00000000000000000000000000000000000ED @@ -42061,12 +42061,12 @@ :10441000000000000000000000000000000000009C :10442000000000000000000000000000000000008C :10443000000000000000000000000000000000007C -:10444000000000000000000000000000000000006C +:10444000000000000000200000000000000000004C :10445000000000000000000000000000000000005C :10446000000000000000000000000000000000004C :10447000000000000000000000000000000000003C :10448000000000000000000000000000000000002C -:104490000800000000000000000000000000000014 +:10449000000000000000000000000000000000001C :1044A000000000000000000000000000000000000C :1044B00000000000000000000000000000000000FC :1044C00000000000000000000000000000000000EC @@ -42192,45 +42192,45 @@ :104C40000000000000000000000000000000000064 :104C50000000000000000000000000000000000054 :104C60000000000000000000000000000000000044 -:104C7000000000000000000000000000000400042C -:104C800000000000000000002000000020000000E4 -:104C900000000000000020000000000000000000F4 -:104CA00000000000000000000000000020000000E4 -:104CB00000000000000020000003000000000000D1 -:104CC00000000000000000000000000000002000C4 -:104CD00000000000000000000000000000000000D4 -:104CE00000000000000000000000000000000000C4 -:104CF00000000000000000000000000000020000B2 +:104C70000000000000000000000000000000000034 +:104C800000000000200020000000000000000000E4 +:104C90000000000000000000000000000000000014 +:104CA00000000000200020000000000000000000C4 +:104CB00000000000000000000003000000000000F1 +:104CC00000000000000020002000000000000000A4 +:104CD0000000000000000000000000000041000093 +:104CE0000000000000002000200000000000000084 +:104CF0000004000000000000000040000000000070 :104D000000000000000000000000000000000000A3 -:104D1000000000000000000000000002000200008F -:104D20000000000000000002000000000000000081 -:104D3000000000000000000000000000000400006F -:104D40000000000000000000400000000000000023 -:104D50000000000040000000000000000000000013 +:104D10000000000000000002000000000000000091 +:104D20000000000000000000000000000000000083 +:104D30000000000000000000000000000000000073 +:104D40000000000040000000000000000000000023 +:104D50000000004000000000000000000000000013 :104D60000000000000000000000000000000000043 -:104D70000000000000000000000000000000000033 -:104D800000000040000000000000000000000000E3 -:104D90000000000000000000000000000000000013 -:104DA00000000040000000000000000000000000C3 -:104DB00000000000010002000000000000000000F0 -:104DC00000000000000000000000000000000000E3 -:104DD00000000000000004000000000000000000CF -:104DE00000000000000000000000000000000200C1 -:104DF00000000000000002000000000000000008A9 -:104E00000000000000000000000000080008000092 -:104E10000000000800000008000800000000000872 -:104E20000000000000000000000000080008000072 -:104E30000000000800000208000800000000000058 -:104E4000000800000000000000000000000800084A -:104E5000000000000008000000080008000000003A -:104E6000000800000000000000000000000800082A -:104E7000800000000008000080080008000000001A +:104D700000000000400000000000000000000000F3 +:104D80000000000000000000000000000000000023 +:104D90000000021000000000000000000000000001 +:104DA00000000000002004000400002004000400B3 +:104DB00000200020000000000000000000000000B3 +:104DC00000000000000500000000000000000000DE +:104DD000000000000040000000000000000004008F +:104DE000040000200020000002000200000000007B +:104DF00002000000844000000000000002000000EB +:104E00000000000800080008000000080008000872 +:104E10000000000800080000000000080008000072 +:104E200000000008000800098000800800098008D0 +:104E300080000009000900000000000800080000D0 +:104E4000000000000008000800080000000800083A +:104E5000000800000008000800000000000800082A +:104E60008000800000090009000800000008000818 +:104E70000008000000080208000000000008000808 :104E80000000000000000000000000000000000022 :104E90000000000000000000000000000000000012 :104EA0000000000000000000000000000000000002 :104EB00000000000000000000000000000000000F2 :104EC00000000000000000000000000000000000E2 -:104ED00000000000000000000000000000000000D2 +:104ED00000000000000000000010000000000000C2 :104EE00000000000000000000000000000000000C2 :104EF00000000000000000000000000000000000B2 :104F000000000000000000000000000000000000A1 @@ -42243,46 +42243,46 @@ :104F70000000000000000000000000000000000031 :104F80000000000000000000000000000000000021 :104F90000000000000000000000000000000000011 -:104FA00000000000000000000000000000000040C1 +:104FA0000000000000000000000000000000000001 :104FB00000000000000000000000000000000000F1 -:104FC00000000100000000000000000000000000E0 +:104FC00000000000000000000000000000000000E1 :104FD00000000000000000000000000000000000D1 -:104FE00000000000080000000000000000000000B9 -:104FF00000000000000000000000000001000000B0 -:10500000000000000100000000000000000000009F +:104FE00000000000000000000000000000000000C1 +:104FF00000000000000000000000000000000000B1 +:1050000000000000000000000000000000000000A0 :105010000000000000000000000000000000000090 :105020000000000000000000000000000000000080 :105030000000000000000000000000000000000070 -:10504000000000000400000000000000000000005C +:105040000000000000000000000000000000000060 :105050000000000000000000000000000000000050 :105060000000000000000000000000000000000040 -:10507000000000000000000000000000000004002C -:10508000000000000000040000000000000000001C +:105070000000000000000000000000000000000030 +:105080000000000000000000000000000000000020 :105090000000000000000000000000000000000010 :1050A0000000000000000000000000000000000000 -:1050B00000000000000000000800000000000000E8 -:1050C00000000000002000000000000000000000C0 +:1050B00000000000000000000000000000000000F0 +:1050C00000000000000000000000000000000000E0 :1050D00000000000000000000000000000000000D0 :1050E00000000000000000000000000000000000C0 -:1050F0000000000000000000820000000000082006 -:10510000000000000000002000000000000000007F +:1050F00000000000000000000000000000000000B0 +:10510000000000000000000000000000000000009F :10511000000000000000000000000000000000008F :10512000000000000000000000000000000000007F :10513000000000000000000000000000000000006F -:10514000000000000000000100000000000000005E +:10514000000000000000000000000000000000005F :10515000000000000000000000000000000000004F :10516000000000000000000000000000000000003F :10517000000000000000000000000000000000002F -:10518000000100000000000000010000000000001D +:10518000000000000000000000000000000000001F :10519000000000000000000000000000000000000F :1051A00000000000000000000000000000000000FF -:1051B00000000000000000000000000000000000EF -:1051C00000000000000000000000000000000000DF +:1051B000000000000000000000000000004000406F +:1051C000004000400040004000400040000000005F :1051D00000000000000000000000000000000000CF -:1051E00000000000000000000000000000000000BF -:1051F00000000000000000000000000000000000AF +:1051E00000000000000010000000000000000000AF +:1051F000000000000000000400040004000400009F :10520000000000000000000000000000000000009E -:10521000000000000000000000000000000000008E +:105210000000080000000000000000000000000086 :10522000000000000000000000000000000000007E :10523000000000000000000000000000000000006E :10524000000000000000000000000000000000005E @@ -42293,117 +42293,117 @@ :10529000000000000000000000000000000000000E :1052A00000000000000000000000000000000000FE :1052B00000000000000000000000000000000000EE -:1052C000000000000000000000009000000000024C +:1052C00000000000000000000000000000000000DE :1052D00000000000000000000000000000000000CE :1052E00000000000000000000000000000000000BE :1052F00000000000000000000000000000000000AE -:105300000000000090000002000000009002000079 +:10530000000000000000000000000000000000009D :10531000000000000000000000000000000000008D :10532000000000000000000000000000000000007D -:10533000000000000000000000000000000000006D -:1053400000000000000000000000110080000000CC -:1053500000800000000000000000000000000000CD +:105330000000000000000000000008000000000065 +:10534000000000000000000000000000000000005D +:10535000000000000000000000000000000000004D :10536000000000000000000000000000000000003D :10537000000000000000000000000000000000002D -:1053800000000000110080000080000011008080FB +:10538000000000000000000000000000000000001D :10539000000000000000000000000000000000000D :1053A00000000000000000000000000000000000FD -:1053B00000000000000000000000000000000000ED -:1053C000000000000000000000000000000000805D -:1053D000000000800000000000000000000000004D +:1053B000000000000000000000000000000000806D +:1053C000000000800000008000000080000000005D +:1053D00000000000000000000000000000000000CD :1053E00000000000000000000000000000000000BD -:1053F00000000000000000000000000000000000AD -:10540000000000000000000000800000008000009C -:10541000008000000080000000000000000000008C +:1053F00000000000000000000080000000800000AD +:10540000000000000000000000000000000000009C +:10541000000000000000000000000000000000008C :10542000000000000000000000000000000000007C :10543000000000000000000000000000000000006C -:10544000000000000000000000000000000000005C -:105450000020000000C0000000000000000000006C +:10544000000800000008000000080000000800003C +:10545000000000000000000000000000000000004C :10546000000000000000000000000000000000003C -:10547000000000000000000000000000000000002C -:10548000000000000000000000000020000000C03C -:1054900000000020000000C000000000000000002C +:10547000000000000000000000000008000000081C +:10548000000000000000000000000000000000001C +:10549000000000000000000000000000000000000C :1054A00000000000000000000000000000000000FC :1054B00000000000000000000000000000000000EC -:1054C00000000000000000000000000000000000DC -:1054D00001000088880001000000000000000000BA +:1054C00000000000080000000000000008000000CC +:1054D00000000000000000000000000000000000CC :1054E00000000000000000000000000000000000BC -:1054F00000000000000000000000000000000000AC -:10550000000000000000000000000100008888008A -:105510000100010000888800010000000000000078 +:1054F00000000000000000000000000000000800A4 +:10550000000000000000000000000000000000009B +:10551000000000000000000000000000000000008B :10552000000000000000000000000000000000007B :10553000000000000000000000000000000000006B -:10554000000000000000000000000000000000005B -:105550000000410000800000090000000000000081 +:105540000000090000008000000009000000800049 +:10555000000000000000000000000000000000004B :10556000000000000000000000000000000000003B -:10557000000000000000000000000000000000002B -:10558000000000000000000000000000410000805A -:105590000000090041000080000009000000000038 +:105570000000000000000000000000000900000022 +:10558000800000000000000000000000000000009B +:10559000000000000000000000000000000000000B :1055A00000000000000000000000000000000000FB :1055B00000000000000000000000000000000000EB -:1055C00000000000000000000000000000000000DB -:1055D000000000000011000000800000000000003A +:1055C0000000000000100021000000800010000515 +:1055D00000000000000000000000000000000000CB :1055E00000000000000000000000000000000000BB -:1055F00000000000000000000000000000000000AB -:105600000000000000000000000000000000001189 -:105610000000008000000011000000800000000079 +:1055F00000000000000000000000000000000005A6 +:10560000002000000000000000000000000000007A +:10561000000000000000000000000000000000008A :10562000000000000000000000000000000000007A :10563000000000000000000000000000000000006A -:10564000000000000000000000000000000000005A -:105650000000000000000001000000400000000009 +:1056400000000000000000010000000000820001D6 +:105650000001000000000000000000000000000049 :10566000000000000000000000000000000000003A :10567000000000000000000000000000000000002A :10568000000000000000000000000000000000001A -:105690000001000000400000000100000040000088 +:10569000000000000000000000000000000000000A :1056A00000000000000000000000000000000000FA :1056B00000000000000000000000000000000000EA -:1056C00000000000000000000000000000000000DA -:1056D0000000000000000000000000000700822120 +:1056C0000000000000000000004100000700000092 +:1056D0000081000007000000000000000000000042 :1056E00000000000000000000000000000000000BA :1056F00000000000000000000000000000000000AA -:105700000000000000000000000000000000000099 -:1057100000000000000007008221000000000700D8 -:1057200082210000000000000000000000000000D6 +:105700000000008100000700000000000000000011 +:105710000000000000000000000000000000000089 +:105720000000000000000000000000000000000079 :105730000000000000000000000000000000000069 :105740000000000000000000000000000000000059 -:105750000000000000000000000000000000F0F069 +:105750000000000000000000000000000000000049 :105760000000000000000000000000000000000039 :105770000000000000000000000000000000000029 :105780000000000000000000000000000000000019 -:105790000000000000000000F0F000000000000029 -:1057A000F0F0000000000000000000000000000019 +:105790000000000000000000000000000000000009 +:1057A00000000000000000000000000000000000F9 :1057B00000000000000000000000000000000000E9 :1057C00000000000000000000000000000000000D9 :1057D00000000000000000000000000000000000C9 -:1057E000F0F00000000000000000000000000000D9 +:1057E00000000000000000000000000000000000B9 :1057F00000000000000000000000000000000000A9 :105800000000000000000000000000000000000098 -:1058100000000000000000000000F0F000000000A8 -:105820000000F0F000000000000000000000000098 +:105810000000000000000000000000000000000088 +:105820000000000000000000000000000000000078 :105830000000000000000000000000000000000068 :105840000000000000000000000000000000000058 :105850000000000000000000000000000000000048 -:105860003C3C0000FFFF00000000000000000000C2 +:105860000000000000000000000000000000000038 :105870000000000000000000000000000000000028 :105880000000000000000000000000000000000018 -:10589000000000000000000000000F0F0000FFFFEC -:1058A0000000FF000000FFFF0000000000000000FB +:105890000000000000000000000000000000000008 +:1058A00000000000000000000000000000000000F8 :1058B00000000000000000000000000000000000E8 :1058C00000000000000000000000000000000000D8 :1058D00000000000000000000000000000000000C8 -:1058E00000003C3C00000000000000000000000040 +:1058E00000000000000000000000000000000000B8 :1058F00000000000000000000000000000000000A8 :105900000000000000000000000000000000000097 -:105910000000000000000000000000000F0F000069 -:1059200000000000FF000000000000000000000078 +:105910000000000000000000000000000000000087 +:105920000000000000000000000000000000000077 :105930000000000000000000000000000000000067 :105940000000000000000000000000000000000057 -:105950000000000000000000000000000000000047 -:10596000000005002A00054000A80000000000001B +:10595000000005000A28050000A005000A2805002F +:1059600000A0000000000000000000000000000097 :105970000000000000000000000000000000000027 -:105980000000000000000000000000000000000017 -:1059900000000000000000000000000005002A00D8 -:1059A000054000A805002A00054000A800000000EE +:1059800000000000000000000000000005000A28E0 +:10599000050000A000000000000000000000000062 +:1059A00000000000000000000000000000000000F7 :1059B00000000000000000000000000000000000E7 :1059C00000000000000000000000000000000000D7 :1059D00000000000000000000000000000000000C7 @@ -42436,39 +42436,39 @@ :105B80000000000000000000000000000000000015 :105B90000000000000000000000000000000000005 :105BA00000000000000000000000000000000000F5 -:105BB00000000000000000002000000000000000C5 +:105BB00000000000010000000000000020000000C4 :105BC00000000000000000000000000000000000D5 -:105BD00000000000000000002000000000000000A5 +:105BD00000000000000000000000000020000000A5 :105BE00000000000000000000000000000000000B5 -:105BF0000000000000020000000020000000000083 +:105BF00000000000000000000000000000000000A5 :105C00000000000000000000000000000000000094 -:105C10000000000000000000000020000000000064 +:105C1000000000000008000000000000000000007C :105C20000000000000000000000000000000000074 -:105C30000000000000000000000000000000000064 -:105C40000000000000000000000000000000400014 +:105C30000000000200004000000000000000000022 +:105C40000000000000000000000000000000000054 :105C50000000000000000000000000000000000044 -:105C60000000000000000000000000000002000032 -:105C70000000000000000000000000000000100014 -:105C8000000000000002000200000000000200000E -:105C90000000000200000002000000000000000000 +:105C60000000000000000000000000000000000034 +:105C70000000000000000000000000000000000024 +:105C80000000000000000000000000000000000014 +:105C90000000000000020000000000000000000002 :105CA00000000000000000000000000000000000F4 -:105CB00000000000000000020000000000000000E2 -:105CC00000000000000000000000000000000000D4 +:105CB00000000002000000000102000000000000DF +:105CC0000000000000400000000000000000000094 :105CD00000000000000000000000000000000000C4 -:105CE00000000000000000000000020000000000B2 +:105CE000000000000040084000000000000000002C :105CF00000000000000000000000000000000000A4 -:105D00000000000000000000000001000000000092 -:105D10000000000000000000000000000000000083 -:105D20000000000000000000000000000000000073 -:105D30000000000000000000000000000000000063 -:105D4000000000000200000802000000000000083F +:105D00000000000000000040001000000000000043 +:105D10000000000000000000004000000000000043 +:105D20000000000000000040000000000000000033 +:105D30000000000000000000001040010000000012 +:105D4000000000000000000000080000000000004B :105D50000000000000000000000000000000000043 -:105D60000000000000000008020000000000000821 +:105D6000000000000000000000080000000000002B :105D70000000000000000000000000000000000023 -:105D80000000000000000000000800000200000009 -:105D900000080000000000000000000000000000FB -:105DA00000000000000000000008000000000000EB -:105DB00000080000000000000000000000000000DB +:105D8000000000000000000000000008000000000B +:105D90000000000000000000000000000000000003 +:105DA00000000000000000000000000800000000EB +:105DB00000000000000000000000000200000000E1 :105DC00000000000000000000000000000000000D3 :105DD00000000000000000000000000000000000C3 :105DE00000000000000000000000000000000000B3 @@ -42482,54 +42482,54 @@ :105E60000000000000000000000000000000000032 :105E70000000000000000000000000000000000022 :105E80000000000000000000000000000000000012 -:105E90000000000000000000000000000000000002 +:105E900000000000000000000000000041000000C1 :105EA00000000000000000000000000000000000F2 :105EB00000000000000000000000000000000000E2 :105EC00000000000000000000000000000000000D2 :105ED00000000000000000000000000000000000C2 -:105EE00000000000000000000000000000000000B2 -:105EF0000000000000400000000000000000000062 +:105EE0000000000000000000000000400000000072 +:105EF00000000000000000000000000000000000A2 :105F00000000000000000000000000000000000091 -:105F10000000000000000000010000000000000080 -:105F20000000000000000000000000000000000071 -:105F30000000000000000000000000000000000061 -:105F40000000000000000000000000000000000051 +:105F10000000000000000000000000000000000081 +:105F200000000000000000000000004000400000F1 +:105F30000000000000000040000000000000000021 +:105F400000000000008800000000000000000000C9 :105F50000000000000000000000000000000000041 :105F60000000000000000000000000000000000031 :105F70000000000000000000000000000000000021 :105F80000000000000000000000000000000000011 -:105F900000000000000000000000040000000000FD +:105F90000000000000000000000000000000000001 :105FA00000000000000000000000000000000000F1 :105FB00000000000000000000000000000000000E1 :105FC00000000000000000000000000000000000D1 :105FD00000000000000000000000000000000000C1 :105FE00000000000000000000000000000000000B1 :105FF00000000000000000000000000000000000A1 -:106000000000000000000000000000000000000090 -:106010000000000000000000000000200000000060 +:106000000000000000000000000000000000080088 +:10601000000000000000000000000000C0000000C0 :106020000000000000000000000000000000000070 :106030000000000000000000000000000000000060 :106040000000000000000000000000000000000050 :106050000000000000000000000000000000000040 -:106060000000000000000000000000000000000030 -:106070000000000000000000000000000000000020 -:10608000000000000084000000000000000000008C -:1060900000000000000000000000000000010000FF +:106060000000000000000000000000000000080028 +:10607000000000000000050000000000000000001B +:106080000000000000000000000000000000000010 +:106090000000000000000000000000000000000000 :1060A00000000000000000000000000000000000F0 -:1060B000000000000000000000000000000000845C -:1060C000000000000000008400000000000000004C +:1060B00000000000000000000000000000000000E0 +:1060C00000000000000000000000000000000000D0 :1060D00000000000000000000000000000000000C0 :1060E00000000000000000000000000000000000B0 :1060F00000000000000000000000000000000000A0 :10610000000000000000000000000000000000008F -:10611000000200000000000000000000000000007D +:10611000000000000000000000000000000000007F :10612000000000000000000000000000000000006F :10613000000000000000000000000000000000005F -:10614000000000000000000000020000000000004D +:10614000000000000000000000000000000000004F :10615000000000000000000000000000000000003F :10616000000000000000000000000000000000002F :10617000000000000000000000000000000000001F -:106180000000000000000000020400000000000009 +:10618000000000000000000000000000000000000F :1061900000000000000000000000000000000000FF :1061A00000000000000000000000000000000000EF :1061B00000000000000000000000000000000000DF @@ -42539,15 +42539,15 @@ :1061F000000000000000000000000000000000009F :10620000000000000000000000000000000000008E :10621000000000000000000000000000000000007E -:10622000900000900000000000000000000000004E +:10622000000000000000000000000000000000006E :10623000000000000000000000000000000000005E -:10624000000000000000000000000000000000004E -:10625000000000000000000000000000000000003E +:106240000000000000000000000000000000000549 +:1062500000400005002000000000000000000000D9 :10626000000000000000000000000000000000002E :10627000000000000000000000000000000000001E :10628000000000000000000000000000000000000E :1062900000000000000000000000000000000000FE -:1062A000110080000000000000000000000000005D +:1062A00000000000000000000000000000000000EE :1062B00000000000000000000000000000000000DE :1062C00000000000000000000000000000000000CE :1062D00000000000000000000000000000000000BE @@ -42555,7 +42555,7 @@ :1062F000000000000000000000000000000000009E :10630000000000000000000000000000000000008D :10631000000000000000000000000000000000007D -:10632000000000000080000000800000000000006D +:10632000000000000000000000000000000000006D :10633000000000000000000000000000000000005D :10634000000000000000000000000000000000004D :10635000000000000000000000000000000000003D @@ -42563,23 +42563,23 @@ :10637000000000000000000000000000000000001D :10638000000000000000000000000000000000000D :1063900000000000000000000000000000000000FD -:1063A0000000000000000020000000C0000000000D +:1063A00000000000000000000000000000000000ED :1063B00000000000000000000000000000000000DD :1063C00000000000000000000000000000000000CD -:1063D00000000000000000000000000000000000BD +:1063D00000000000000001000100000000000000BB :1063E00000000000000000000000000000000000AD :1063F000000000000000000000000000000000009D :10640000000000000000000000000000000000008C :10641000000000000000000000000000000000007C -:10642000000000000000010000888800010000005A +:10642000000000000000000000000000000000006C :10643000000000000000000000000000000000005C :10644000000000000000000000000000000000004C -:10645000000000000000000000000000000000003C +:106450000000000000000000200005000500000012 :10646000000000000000000000000000000000002C :10647000000000000000000000000000000000001C :10648000000000000000000000000000000000000C :1064900000000000000000000000000000000000FC -:1064A0000000000000000000410000800000090022 +:1064A00000000000000000000000000000000000EC :1064B00000000000000000000000000000000000DC :1064C00000000000000000000000000000000000CC :1064D00000000000000000000000000000000000BC @@ -42587,7 +42587,7 @@ :1064F000000000000000000000000000000000009C :10650000000000000000000000000000000000008B :10651000000000000000000000000000000000007B -:1065200000000000000000000000001100000080DA +:10652000000000000000000000000000000000006B :10653000000000000000000000000000000000005B :10654000000000000000000000000000000000004B :10655000000000000000000000000000000000003B @@ -42595,8 +42595,8 @@ :10657000000000000000000000000000000000001B :10658000000000000000000000000000000000000B :1065900000000000000000000000000000000000FB -:1065A00000000000000000000000000000010000EA -:1065B000004000000000000000000000000000009B +:1065A00000000000000000000000000000000000EB +:1065B00000000000000000000000000000000000DB :1065C00000000000000000000000000000000000CB :1065D00000000000000000000000000000000000BB :1065E00000000000000000000000000000000000AB @@ -42604,7 +42604,7 @@ :10660000000000000000000000000000000000008A :10661000000000000000000000000000000000007A :10662000000000000000000000000000000000006A -:1066300000000700822100000000000000000000B0 +:10663000000000000000000000000000000000005A :10664000000000000000000000000000000000004A :10665000000000000000000000000000000000003A :10666000000000000000000000000000000000002A @@ -42612,7 +42612,7 @@ :10668000000000000000000000000000000000000A :1066900000000000000000000000000000000000FA :1066A00000000000000000000000000000000000EA -:1066B000000000000000F0F00000000000000000FA +:1066B00000000000000000000000000000000000DA :1066C00000000000000000000000000000000000CA :1066D00000000000000000000000000000000000BA :1066E00000000000000000000000000000000000AA @@ -42620,7 +42620,7 @@ :106700000000000000000000000000000000000089 :106710000000000000000000000000000000000079 :106720000000000000000000000000000000000069 -:106730000000000000000000F0F000000000000079 +:106730000000000000000000000000000000000059 :106740000000000000000000000000000000000049 :106750000000000000000000000000000000000039 :106760000000000000000000000000000000000029 @@ -42636,7 +42636,7 @@ :106800000000000000000000000000000000000088 :106810000000000000000000000000000000000078 :106820000000000000000000000000000000000068 -:106830000000000000000F0F0000FFFF000000003C +:106830000000000000000000000000000000000058 :106840000000000000000000000000000000000048 :106850000000000000000000000000000000000038 :106860000000000000000000000000000000000028 @@ -42644,16 +42644,16 @@ :106880000000000000000000000000000000000008 :1068900000000000000000000000000000000000F8 :1068A00000000000000000000000000000000000E8 -:1068B00000000000000000000F0F000000000000BA +:1068B00000000000000000000000000000000000D8 :1068C00000000000000000000000000000000000C8 :1068D00000000000000000000000000000000000B8 -:1068E00000000000000000000000000000000000A8 +:1068E000000000000000000000610006000D000034 :1068F0000000000000000000000000000000000098 :106900000000000000000000000000000000000087 :106910000000000000000000000000000000000077 :106920000000000000000000000000000000000067 -:106930000000000000000000000005002A000540E3 -:1069400000A800000000000000000000000000009F +:106930000000000000000000000000000000000057 +:106940000000000000000000000000000000000047 :106950000000000000000000000000000000000037 :106960000000000000000000000000000000000027 :106970000000000000000000000000000000000017 @@ -42671,8 +42671,8 @@ :106A30000000000000000000000000000000000056 :106A40000000000000000000000000000000000046 :106A50000000000000000000000000000000000036 -:106A60000000000000000000000000000000000026 -:106A70000000000000000000000000000000000016 +:106A60000000000000000000000000000000FF0027 +:106A7000FF3D0000000000000000000000000000DA :106A80000000000000000000000000000000000006 :106A900000000000000000000000000000000000F6 :106AA00000000000000000000000000000000000E6 @@ -42680,7 +42680,7 @@ :106AC00000000000000000000000000000000000C6 :106AD00000000000000000000000000000000000B6 :106AE00000000000000000000000000000000000A6 -:106AF0000000000000000000000000000000000096 +:106AF000FF00FF0500000000000000000000000093 :106B00000000000000000000000000000000000085 :106B10000000000000000000000000000000000075 :106B20000000000000000000000000000000000065 @@ -42688,50 +42688,50 @@ :106B40000000000000000000000000000000000045 :106B50000000000000000000000000000000000035 :106B60000000000000000000000000000000000025 -:106B70000000000020002000200020002000000075 -:106B8000200020000000200420040000000000007D -:106B90002000000020002000200020002000000035 -:106BA0002000200040002000200000000000000025 -:106BB0002000000200000000200020002000200033 -:106BC0000000200020022000200020000000000023 -:106BD0000000200000000000200020002000200015 -:106BE0000000200020002000200020000000000005 -:106BF0000000200000000000000000000000000075 +:106B70000000200020002000200020002000200035 +:106B80002000200020000000200020002000200025 +:106B90002000200020002000200020000000200015 +:106BA0002000200020000000200020002000200005 +:106BB0002000000020002000200020000000000035 +:106BC00020002000200020000000200020002000E5 +:106BD0002000200020000000200020000000000015 +:106BE00020002000200020000000200000002000E5 +:106BF0002000200000000000000000000000000055 :106C00000000000000000000000000000000000084 :106C10000000000000000000000000000000000074 -:106C20000000000000000000000000000000000064 -:106C300021000000000000000000000000004100F2 -:106C400000000040000000900000009000000000E4 -:106C50000000000000000000000000000000000034 +:106C20000000000000000000000000004000000024 +:106C30000000000000000000000000000000200034 +:106C40000000000000000000000000000000000044 +:106C500000000000000000000000000000004000F4 :106C60000000000000000000000000000000000024 -:106C70000000009000000000000000000000000084 -:106C800000000000020002000000000000100200EE -:106C900000000000000000000000000000000000F4 -:106CA00000000000000000000000000002000000E2 +:106C70000000000000000000000000000010000004 +:106C80000000000000000000000000000000000004 +:106C900000000000000000000000001000100000D4 +:106CA00000000000000000000000000000000000E4 :106CB00000000000000000000000000000000000D4 -:106CC00004000000020000000000000000000000BE +:106CC00000000000000000000000000000100010A4 :106CD00000000000000000000000000000000000B4 -:106CE00001000000000000000000000000000000A3 -:106CF000020000000000000000080000000800087A -:106D0000000800000008000800000000000800085B -:106D10000008000000080008000802000008000841 -:106D20000008020000080008000000000008000839 -:106D3000000800000008000800000008000000082B -:106D40000008020802000008000800000000000817 -:106D50000008000800000008000800080000000803 -:106D600000081008000000080008000000000008EB -:106D700000080008000000080008000000000000F3 +:106CE00000000000000000000000000000000000A4 +:106CF000000000000000000000000000000000088C +:106D00000008000000080000000800080008000853 +:106D1000000000000000000000000000000000086B +:106D20000008200040080000000800080008008259 +:106D30000000000000000000000000000000000053 +:106D4000001000080000000800000008000800080B +:106D50000000000000000000000000002000000013 +:106D600000000008000002080000000800080008F9 +:106D700000002000400000000000000000000000B3 :106D80000000000000000000000000000000000003 :106D900000000000000000000000000000000000F3 -:106DA00000000000000000000000000000000000E3 -:106DB00000000000000000000000000000000000D3 +:106DA00000000800000000000000000000000000DB +:106DB00000100000000000000000000000000000C3 :106DC00000000000000000000000000000000000C3 :106DD00000000000000000000000000000000000B3 :106DE00000000000000000000000000000000000A3 :106DF0000000000000000000000000000000000093 :106E00000000000000000000000000000000000082 :106E10000000000000000000000000000000000072 -:106E20000000000000000000000000000000000062 +:106E2000000000000800000000000000000000005A :106E30000000000000000000000000000000000052 :106E40000000000000000000000000000000000042 :106E50000000000000000000000000000000000032 @@ -42740,33 +42740,33 @@ :106E80000000000000000000000000000000000002 :106E900000000000000000000000000000000000F2 :106EA00000000000000000000000000000000000E2 -:106EB00000000000000000110000000900000000B8 -:106EC00000000800000000000000000000000000BA -:106ED00000000000000000000000000000000000B2 -:106EE0000000000000000000000000000100008021 +:106EB00000000000000000000000000000000000D2 +:106EC00000000000000000000000000000000000C2 +:106ED00000400040000000400000000000000000F2 +:106EE0000040000000000010000000000000000052 :106EF0000000000000000000000000000000000092 :106F00000000000000000000000000000000000081 -:106F10000000000000000000000000000000000071 -:106F20000000000000000000000000000000000061 +:106F10000000000000000000000000000000001061 +:106F200000000000000000A00000000000000000C1 :106F30000000000000000000000000000000000051 :106F40000000000000000000000000000000000041 :106F50000000000000000000000000000000000031 -:106F60000000000000000000000000000000200001 -:106F7000000400000000000000000000000000000D +:106F6000000000000000000000000000020000001F +:106F70000000000000000000000000000000000011 :106F80000000000000000000000000000000000001 :106F900000000000000000000000000000000000F1 :106FA00000000000000000000000000000000000E1 :106FB00000000000000000000000000000000000D1 :106FC00000000000000000000000000000000000C1 :106FD00000000000000000000000000000000000B1 -:106FE0000000000000000000000090000000000011 +:106FE00000000000000000000000000000000000A1 :106FF0000000000000000000000000000000000091 :107000000000000000000000000000000000000080 :107010000000000000000000000000000000000070 :107020000000000000000000000000000000000060 :107030000000000000000000000000000000000050 :107040000000000000000000000000000000000040 -:1070500000000000000000000300000000840000A9 +:107050000000000000000000000000000000000030 :107060000000000000000000000000000000000020 :107070000000000000000000000000000000000010 :107080000000000000000000000000000000000000 @@ -42775,16 +42775,16 @@ :1070B00000000000000000000000000000000000D0 :1070C00000000000000000000000000000000000C0 :1070D00000000000000000000000000000000000B0 -:1070E000000000000000000200000000000000009E +:1070E00000000000000000000000000000000000A0 :1070F0000000000000000000000000000000000090 :10710000000000000000000000000000000000007F :10711000000000000000000000000000000000006F -:10712000000000000000000000000000000000005F -:10713000000000040000000000000000000000004B +:10712000001000000000000000000000000000004F +:10713000000000000000000000000200000000004D :10714000000000000000000000000000000000003F -:10715000000000000000000000000000000000002F +:107150000000080000000000000000000000020025 :10716000000000000000000000000000000000001F -:10717000000000000000000000000000000000000F +:10717000000002000000000000000000000000000D :1071800000000000000000000000000000000000FF :1071900000000000000000000000000000000000EF :1071A00000000000000000000000000000000000DF @@ -42792,7 +42792,7 @@ :1071C00000000000000000000000000000000000BF :1071D00000000000000000000000000000000000AF :1071E000000000000000000000000000000000009F -:1071F000000000000100000000000000000000008E +:1071F000000000000000000000000000000000008F :10720000000000000000000000000000000000007E :10721000000000000000000000000000000000006E :10722000000000000000000000000000000000005E @@ -42800,7 +42800,7 @@ :10724000000000000000000000000000000000003E :10725000000000000000000000000000000000002E :10726000000000000000000000000000000000001E -:1072700000000000000011002100000000000000DC +:10727000000000000000000000000000000000000E :1072800000000000000000000000000000000000FE :1072900000000000000000000000000000000000EE :1072A00000000000000000000000000000000000DE @@ -42808,7 +42808,7 @@ :1072C00000000000000000000000000000000000BE :1072D00000000000000000000000000000000000AE :1072E000000000000000000000000000000000009E -:1072F00000000000000000000041090000030080C1 +:1072F000000000000000000000000000000000008E :10730000000000000000000000000000000000007D :10731000000000000000000000000000000000006D :10732000000000000000000000000000000000005D @@ -42816,16 +42816,16 @@ :10734000000000000000000000000000000000003D :10735000000000000000000000000000000000002D :10736000000000000000000000000000000000001D -:10737000000000000000000000000001010000000B -:107380000088000000000000000000000000000075 +:10737000000000000000000000000000000000000D +:1073800000000000000000000000000000000000FD :1073900000000000000000000000000000000000ED :1073A00000000000000000000000000000000000DD :1073B00000000000000000000000000000000000CD :1073C00000000000000000000000000000000000BD :1073D00000000000000000000000000000000000AD :1073E000000000000000000000000000000000009D -:1073F0000000000000000000000000000000880005 -:10740000000001000000000000000000000000007B +:1073F000000000000000000000000000000000008D +:10740000000000000000000000000000000000007C :10741000000000000000000000000000000000006C :10742000000000000000000000000000000000005C :10743000000000000000000000000000000000004C @@ -42833,7 +42833,7 @@ :10745000000000000000000000000000000000002C :10746000000000000000000000000000000000001C :10747000000000000000000000000000000000000C -:1074800000000000410000000000000000000000BB +:1074800000000000000000000000000000000000FC :1074900000000000000000000000000000000000EC :1074A00000000000000000000000000000000000DC :1074B00000000000000000000000000000000000CC @@ -42841,7 +42841,7 @@ :1074D00000000000000000000000000000000000AC :1074E000000000000000000000000000000000009C :1074F000000000000000000000000000000000008C -:10750000000000111000000000000000000000005A +:10750000000000000000000000000000000000007B :10751000000000000000000000000000000000006B :10752000000000000000000000000000000000005B :10753000000000000000000000000000000000004B @@ -42849,7 +42849,7 @@ :10755000000000000000000000000000000000002B :10756000000000000000000000000000000000001B :10757000000000000000000000000000000000000B -:1075800000000000000101000000000000000000F9 +:1075800000000000000000000000000000000000FB :1075900000000000000000000000000000000000EB :1075A00000000000000000000000000000000000DB :1075B00000000000000000000000000000000000CB @@ -42857,7 +42857,7 @@ :1075D00000000000000000000000000000000000AB :1075E000000000000000000000000000000000009B :1075F000000000000000000000000000000000008B -:1076000000000000000000E00000814100000000D8 +:10760000000000000000000000000000000000007A :10761000000000000000000000000000000000006A :10762000000000000000000000000000000000005A :10763000000000000000000000000000000000004A @@ -42897,8 +42897,8 @@ :107850000000000000000000000000000000000028 :107860000000000000000000000000000000000018 :107870000000000000000000000000000000000008 -:1078800000000000000000000000000000000040B8 -:107890000006000C000000000000000000000000D6 +:1078800000000000000000000000000000000000F8 +:1078900000000000000000000000000000000000E8 :1078A00000000000000000000000000000000000D8 :1078B00000000000000000000000000000000000C8 :1078C00000000000000000000000000000000000B8 @@ -42906,7 +42906,7 @@ :1078E0000000000000000000000000000000000098 :1078F0000000000000000000000000000000000088 :107900000000000000000000000000000000000077 -:1079100000000F0FFFFF000000000000000000004B +:107910000000000000000000000000000000000067 :107920000000000000000000000000000000000057 :107930000000000000000000000000000000000047 :107940000000000000000000000000000000000037 @@ -42914,7 +42914,7 @@ :107960000000000000000000000000000000000017 :107970000000000000000000000000000000000007 :1079800000000000000000000000000000000000F7 -:10799000000000000F0F00000000000000000000C9 +:1079900000000000000000000000000000000000E7 :1079A00000000000000000000000000000000000D7 :1079B00000000000000000000000000000000000C7 :1079C00000000000000000000000000000000000B7 @@ -42922,7 +42922,7 @@ :1079E0000000000000000000000000000000000097 :1079F0000000000000000000000000000000000087 :107A00000000000000000000000000000000000076 -:107A10000000000000000000F0F000000000000086 +:107A10000000000000000000000000000000000066 :107A20000000000000000000000000000000000056 :107A30000000000000000000000000000000000046 :107A40000000000000000000000000000000000036 @@ -42930,107 +42930,107 @@ :107A60000000000000000000000000000000000016 :107A70000000000000000000000000000000000006 :107A800000000000000000000000000000000000F6 -:107A900000000000000000000000F0F00000000006 +:107A900000000000000000000000000000000000E6 :107AA00000000000000000000000000000002000B6 -:107AB00020000000200020002000200020002000E6 -:107AC00020002000200020002000200000002000D6 -:107AD00020000000200020002000200020002000C6 -:107AE00020002000200020002000200000000001D5 -:107AF00020002000000020002000200020002000A6 -:107B000020002000200020002000200000000000B5 -:107B10002000200000002000200020002000200085 -:107B20002000200020002000200020000000000095 -:107B30000000000000000000400000000000000005 -:107B40000000004000000000009000000000000065 +:107AB00020002000000088000000000020002000BE +:107AC0000000000020002000000020002000000036 +:107AD0002000000000002000000040000000200006 +:107AE0000000000020002000000020002000000016 +:107AF0000000200000000000200000002000000026 +:107B000020000000000020002000000020002000D5 +:107B100000002000000000002000820000000000A3 +:107B200020000000000020002000000020002000B5 +:107B30000000000000000000000000000000000045 +:107B40000000000000000000000000000000000035 :107B50000000000000000000000000000000000025 -:107B60000000009000000000000000000000000085 -:107B700000000000000400000000000000900090E1 -:107B80000090000000000000000000000000000065 -:107B900000000000000000000000000000000000E5 -:107BA0000000000000000000000000000000009045 -:107BB00000000000000000000000020000000000C3 -:107BC00000000000000000000000000000000000B5 -:107BD000000000000000000400040000000000009D -:107BE0000000000000000000000000000000000095 +:107B60000000000000000000000000000000000015 +:107B70000000000000000000000000000000000005 +:107B800000000000000000000000000000000000F5 +:107B900000000000004000000000000000000004A1 +:107BA0000004009000000000000000000000000041 +:107BB00000040000000000000000000000000000C1 +:107BC000000000400000000000000000000008006D +:107BD000084000000000000000000000000000005D +:107BE000000000000000000000000000000008008D :107BF0000000000000000000000000000000000085 -:107C00000000000000000000000000000000000074 -:107C10000000000004000000000000000000000060 -:107C20000000000000000000000000000000000054 -:107C300000000000000000000000000080000000C4 -:107C40000000000000000008000000000000040028 -:107C50000000000000000000000000000000000024 -:107C60000000000000000084000000000000000090 -:107C70000000000000000000000000000000000004 -:107C800000000000000000000000000000000000F4 -:107C900000000200000000000000000000000000E2 -:107CA00000000000000000000000000000000000D4 +:107C0000000008000000000000000000000000006C +:107C10000010004000000000000000000000000014 +:107C2000000008000000000000000000000000004C +:107C30000800084000840000000000000000000070 +:107C400000080000000000000000008400000000A8 +:107C50000008008800000000000000000000400054 +:107C6000000800000000000000000000000000000C +:107C70000084001000000000000000000000000070 +:107C800000000004000800000000000000000000E8 +:107C900000000000000000000000000000000300E1 +:107CA000000000080008000005000000400000007F :107CB00000000000000000000000000000000000C4 -:107CC00000000000000000000000000000000000B4 -:107CD00000000000000000000000000000000000A4 +:107CC00000000000000000030000000000000000B1 +:107CD000000000000000000000000000000500009F :107CE0000000000000000000000000000000000094 -:107CF0000000000000000000000000400000000044 -:107D00000000000000000000000000000000000073 +:107CF0000000000000000000000000000000000084 +:107D0000000000000008004000000000000000002B :107D10000000000000000000000000000000000063 :107D20000000000000000000000000000000000053 :107D30000000000000000000000000000000000043 :107D40000000000000000000000000000000000033 :107D50000000000000000000000000000000000023 :107D60000000000000000000000000000000000013 -:107D700000000000000000000000110000000000F2 +:107D700000000000000000A0000000000000000063 :107D800000000000000000000000000000000000F3 :107D900000000000000000000000000000000000E3 :107DA00000000000000000000000000000000000D3 :107DB00000000000000000000000000000000000C3 -:107DC00000000000000000000100000000080000AA -:107DD0000000000000000000020000000000C000E1 -:107DE0000000000000000000000000000021000072 +:107DC000000008000000000000000020000000008B +:107DD0000041000000400000000000000000000022 +:107DE0000000000000000000000000000000000093 :107DF0000000000000000000000000000000000083 -:107E00000000000000000000000000000000000072 -:107E1000000000000000000008000000000000005A -:107E20000000000000000000000000000000000052 -:107E30000000000000000000000000000000000042 -:107E4000000000000000000000000400000000002E -:107E5000000000000000000000000000000005001D -:107E6000000000000000000000000300000000000F -:107E7000030000000000000000000000000000827D +:107E00000000000000000000000000000000000969 +:107E10000000000000000000000000000000000062 +:107E200000000040000000400040900900000002F7 +:107E30000040000000000000000000000000000002 +:107E40000800000000000000000000000400000026 +:107E50000000000003000000000000000800000017 +:107E600008000000000020000000000000000000EA +:107E70000000000000000000000000000000000002 :107E800000000000000000000000000000000000F2 :107E900000000000000000000000000000000000E2 -:107EA00000000000000000000000000800000000CA -:107EB00000000000000000000000000000000000C2 -:107EC0000000000000000000000000200000000092 -:107ED000000000000000000000000000080000009A +:107EA00000000000000000000000000000000000D2 +:107EB000000021000000000000000000030000009E +:107EC00000000000000000000000000000000000B2 +:107ED000000000000000000000000000000800009A :107EE0000000000000000000000000000000000092 :107EF0000000000000000000000000000000000082 -:107F00000000000000000000000000000000004031 +:107F00000000000000000000000000000000000071 :107F10000000000000000000000000000000000061 :107F20000000000000000000000000000000000051 :107F30000000000000000000000000000000000041 -:107F40000000000000000000000000000001000030 +:107F40000000000000000000000000000000000031 :107F50000000000000000000000000000000000021 :107F60000000000000000000000000000000000011 :107F70000000000000000000000000000000000001 :107F800000000000000000000000000000000000F1 :107F900000000000000000000000000000000000E1 -:107FA000000000000000000000C00000000003848A +:107FA00000000000000000000000000000000000D1 :107FB00000000000000000000000000000000000C1 :107FC00000000000000000000000000000000000B1 :107FD00000000000000000000000000000000000A1 -:107FE0000000000000000000000000000000001180 -:107FF0000000000000000000000000000000000081 +:107FE0000000000000000000000000000000000091 +:107FF0000008000000000000000000000000000079 :108000000000000000000000000000000000000070 :108010000000000000000000000000000000000060 :108020000000000000000000000000000000000050 -:10803000000000000000000000020000000000003E -:10804000000000000000000000000500000000002B -:108050000000000000000000000000000000000020 -:10806000000000200000000000840000000000006C -:1080700000000000000000002000000000000000E0 -:1080800000000020000000000000000000000000D0 -:1080900000000000000000000000000000000000E0 -:1080A00000000000000000000000000000000000D0 -:1080B00000000000000000000000000000000000C0 +:108030000800000000000000000000000000000038 +:108040000000000000000000000000000800000028 +:108050000000080002000000000000000000009086 +:108060000000000000000000000000000000000010 +:1080700000000800110000000000000000000000E7 +:1080800000000000000000000000000000000000F0 +:1080900000000000110000000000000000000000CF +:1080A00000000000000000000000000000002000B0 +:1080B000200000000000000000400004000000005C :1080C00000000000000000000000000000000000B0 -:1080D0009000000000900000000000000000000080 +:1080D00000000000000000000000000000000000A0 :1080E0000000000000000000000000000000000090 :1080F0000000000000000000000000000000000080 :10810000000000000000000000000000000000006F @@ -43038,7 +43038,7 @@ :10812000000000000000000000000000000000004F :10813000000000000000000000000000000000003F :10814000000000000000000000000000000000002F -:10815000110080000000000000000000000000008E +:10815000000000000000000000000000000000001F :10816000000000000000000000000000000000000F :1081700000000000000000000000000000000000FF :1081800000000000000000000000000000000000EF @@ -43046,7 +43046,7 @@ :1081A00000000000000000000000000000000000CF :1081B00000000000000000000000000000000000BF :1081C00000000000000000000000000000000000AF -:1081D000000000000080000000800000000000009F +:1081D000000000000000000000000000000000009F :1081E000000000000000000000000000000000008F :1081F000000000000000000000000000000000007F :10820000000000000000000000000000000000006E @@ -43054,7 +43054,7 @@ :10822000000000000000000000000000000000004E :10823000000000000000000000000000000000003E :10824000000000000000000000000000000000002E -:108250000000000000000020000000C0000000003E +:10825000000000000000000000000000000000001E :10826000000000000000000000000000000000000E :1082700000000000000000000000000000000000FE :1082800000000000000000000000000000000000EE @@ -43062,7 +43062,7 @@ :1082A00000000000000000000000000000000000CE :1082B00000000000000000000000000000000000BE :1082C00000000000000000000000000000000000AE -:1082D000000000000000010000888800010000008C +:1082D000000000000000000000000000000000009E :1082E000000000000000000000000000000000008E :1082F000000000000000000000000000000000007E :10830000000000000000000000000000000000006D @@ -43070,7 +43070,7 @@ :10832000000000000000000000000000000000004D :10833000000000000000000000000000000000003D :10834000000000000000000000000000000000002D -:108350000000000000000000410000800000090053 +:10835000000000000000000000000000000000001D :10836000000000000000000000000000000000000D :1083700000000000000000000000000000000000FD :1083800000000000000000000000000000000000ED @@ -43078,7 +43078,7 @@ :1083A00000000000000000000000000000000000CD :1083B00000000000000000000000000000000000BD :1083C00000000000000000000000000000000000AD -:1083D000000000000000000000000011000000800C +:1083D000000000000000000000000000000000009D :1083E000000000000000000000000000000000008D :1083F000000000000000000000000000000000007D :10840000000000000000000000000000000000006C @@ -43086,8 +43086,8 @@ :10842000000000000000000000000000000000004C :10843000000000000000000000000000000000003C :10844000000000000000000000000000000000002C -:10845000000000000000000000000000000100001B -:1084600000400000000000000000000000000000CC +:10845000000000000000000000000000000000001C +:10846000000000000000000000000000000000000C :1084700000000000000000000000000000000000FC :1084800000000000000000000000000000000000EC :1084900000000000000000000000000000000000DC @@ -43095,7 +43095,7 @@ :1084B00000000000000000000000000000000000BC :1084C00000000000000000000000000000000000AC :1084D000000000000000000000000000000000009C -:1084E00000000700822100000000000000000000E2 +:1084E000000000000000000000000000000000008C :1084F000000000000000000000000000000000007C :10850000000000000000000000000000000000006B :10851000000000000000000000000000000000005B @@ -43103,7 +43103,7 @@ :10853000000000000000000000000000000000003B :10854000000000000000000000000000000000002B :10855000000000000000000000000000000000001B -:10856000000000000000F0F000000000000000002B +:10856000000000000000000000000000000000000B :1085700000000000000000000000000000000000FB :1085800000000000000000000000000000000000EB :1085900000000000000000000000000000000000DB @@ -43111,7 +43111,7 @@ :1085B00000000000000000000000000000000000BB :1085C00000000000000000000000000000000000AB :1085D000000000000000000000000000000000009B -:1085E0000000000000000000F0F0000000000000AB +:1085E000000000000000000000000000000000008B :1085F000000000000000000000000000000000007B :10860000000000000000000000000000000000006A :10861000000000000000000000000000000000005A @@ -43127,7 +43127,7 @@ :1086B00000000000000000000000000000000000BA :1086C00000000000000000000000000000000000AA :1086D000000000000000000000000000000000009A -:1086E0000000000000003C3C0000FFFF0000000014 +:1086E000000000000000000000000000000000008A :1086F000000000000000000000000000000000007A :108700000000000000000000000000000000000069 :108710000000000000000000000000000000000059 @@ -43135,7 +43135,7 @@ :108730000000000000000000000000000000000039 :108740000000000000000000000000000000000029 :108750000000000000000000000000000000000019 -:1087600000000000000000003C3C00000000000091 +:108760000000000000000000000000000000000009 :1087700000000000000000000000000000000000F9 :1087800000000000000000000000000000000000E9 :1087900000000000000000000000000000000000D9 @@ -43143,8 +43143,8 @@ :1087B00000000000000000000000000000000000B9 :1087C00000000000000000000000000000000000A9 :1087D0000000000000000000000000000000000099 -:1087E0000000000000000000000005002A00054015 -:1087F00000A80000000000000000000000000000D1 +:1087E0000000000000000000000000000000000089 +:1087F0000000000000000000000000000000000079 :108800000000000000000000000000000000000068 :108810000000000000000000000000000000000058 :108820000000000000000000000000000000000048 @@ -43183,217 +43183,217 @@ :108A30000000000000000000000000000000000036 :108A40000000000000000000000000000000000026 :108A50000000000000000000000000000000000016 -:108A600000000000000000000000000000002000E6 -:108A700020002000000000000000000000000000B6 -:108A800020000000000000000000000002800280C2 -:108A9000200420040000000000000000000000008E -:108AA0002000000000000400000000000001200081 -:108AB0002000200020000000000000000000400016 -:108AC0000000200000000000000000004000200026 -:108AD0002000200020000000000000000000200016 -:108AE0000000200000000000000000002000000046 -:108AF0000002000000000000000000000000000074 -:108B000000000000000000000000000000008004E1 -:108B1000A00400010001000000000084000000002B -:108B20000000000000000000000000004100000004 +:108A600000000000000000000000000020002000C6 +:108A70000000200020002000000000002000200056 +:108A80002000200020002000200000002000200006 +:108A90000000200020002000000000004000200016 +:108AA0002000200020002000200000000002200004 +:108AB0002000000020002000200000000000200016 +:108AC00020002000200020002000200000002000C6 +:108AD00020000000200020002000000000002000F6 +:108AE00020002000200020002000200002000000C4 +:108AF0000000000000000000000000000000000076 +:108B00000000000000000000000040200000000005 +:108B10000000000000004000000000000000000015 +:108B20000000000000000000000000000000000045 :108B30000000000000000000000000000000000035 -:108B40000000000000000000000000000000000025 -:108B50000000000000000000000000000000000015 +:108B400000000000000000004000000000000000E5 +:108B50000000000000000000000002000000000013 :108B60000000000000000000000000000000000005 -:108B700004000000000000000400000000000000ED -:108B800000000000000000000000000000000000E5 -:108B900000000000020001002000000000000000B2 -:108BA00000000000000000000200020000000000C1 +:108B700000000000000000000000000000000000F5 +:108B80000000000000100040000000000000000095 +:108B90000000000000000000000000000040000095 +:108BA00000000000000000000000000000000000C5 :108BB00000000000000000000000000000000000B5 -:108BC000000000000000000000000400040000009D -:108BD0000000000000000000000000000000000095 -:108BE000000002000000000000000400000000007F -:108BF00000000000000000080010008400080008C9 -:108C00000000000000000000000800040000000850 -:108C1000000800000000800802008000008400843A -:108C200000000000040000000008800800000008A8 -:108C30000008000000000000000800000000000024 -:108C40000000000000000000000000080084000098 -:108C5000000800080000000000080000008200007A -:108C600000000000000000000000000800000000FC -:108C700000080008000000000000000200000000E2 -:108C800000000000000000000000000000080000DC -:108C900000000000000000000000000000000000D4 -:108CA00000000000000000000000000000020011B1 -:108CB0008804000000000000000000000000000226 -:108CC000000000000005000088000000880000008F -:108CD0000000000000000000000000000008000884 +:108BC00000000000000000000000000000000000A5 +:108BD00000000000000000002080000000000000F5 +:108BE0000000000000000000000000000000000085 +:108BF000000000000000000800080900000800084C +:108C000000084008000000000008050000000008FF +:108C10000008050000000008000800000008050822 +:108C200000080040004000004084000040000008B0 +:108C30000008000000000000000800840000000898 +:108C400000080008000000000000000800004000CC +:108C500000080008004000400008800400000008F0 +:108C600002080008000000000000000800000000EA +:108C700000080008000000000000002100000000C3 +:108C800000000000000000000000002100000000C3 +:108C900000000000000000000000002100000000B3 +:108CA00000000000000000000000000800000000BC +:108CB00000000000000000000000000000080000AC +:108CC0000000000000000000000000000021000083 +:108CD000000000000000000000000000000800008C :108CE0000000000000000000000000000000000084 -:108CF00000000000900000000000000000000000E4 +:108CF0000000000000000000000000000000000074 :108D00000000000000000000000000000000000063 -:108D1000080000000000000000000000000000004B +:108D10000000000000000000000000000000000053 :108D20000000000000000000000000000000000043 :108D30000000000000000000000000000000000033 :108D40000000000000000000000000000000000023 :108D50000000000000000000000000000000000013 :108D60000000000000000000000000000000000003 :108D700000000000000000000000000000000000F3 -:108D8000000000000000000000008400000000005F -:108D900088000000000000000000000000008400C7 -:108DA0008200000000000000000000000000000041 -:108DB00000000000000000000000000000000000B3 -:108DC00000000000000000000000000000000000A3 -:108DD0000000004000000000000000000000000053 -:108DE0000000000000000000000000000000000083 -:108DF0000000004000000000000000000000000033 -:108E0000000000000000000003000000000000005F -:108E10000000000000000000000000000000000052 -:108E20000000000000000000000000000000000042 -:108E30000000000000000000000000000000000032 -:108E40000000000000000000000000001000000012 -:108E5000000000000000000000840000000000008E -:108E60000000210041000000000000000800000098 -:108E700000000000000000000000000000000000F2 -:108E8000000000000000000000000000840000035B -:108E90000000000000400000000000000000000092 -:108EA00000000000000000000000000000000000C2 -:108EB000000082000000000000000000000000052B -:108EC00000000000000200000000000000000000A0 -:108ED0000000000000000000000000000000000092 -:108EE0001000000000000000000000000000000072 +:108D800000000000000000000000000000000000E3 +:108D900010000000000000000000000000000000C3 +:108DA00040000000900000000800400000000000AB +:108DB00000000000820000000000000082000000AF +:108DC0000000000000009000000000000000000013 +:108DD0000000000000000000000000000000000093 +:108DE00000000000000000000000000002008800F9 +:108DF00088000000000000000000040000001000D7 +:108E00000300030004004000000000000008000010 +:108E1000101000000000009008000000000010008A +:108E200010000000004040000000000000000000B2 +:108E3000410000000000000010820000000000005F +:108E40001000101041001000000041000000000060 +:108E50000000000000001000000000000000000002 +:108E600000002000000000000000000000000000E2 +:108E70000000024000001000002000400000000040 +:108E800000000000000000000000000000000000E2 +:108E900000000000000000000000000000000000D2 +:108EA0000000000082000000000000000000000040 +:108EB0000000000000000000000000000000820030 +:108EC000A0080010000000000000000000000000EA +:108ED0000000000000000000000082000000000010 +:108EE0000000000000000000000000000000000082 :108EF0000000000000000000000000000000000072 -:108F000000000000000000000000030000840000DA +:108F00000000000000000000000000000000000061 :108F10000000000000000000000000000000000051 :108F20000000000000000000000000000000000041 -:108F300000000000000000900000000000000000A1 +:108F30000000000000000000000000000000000031 :108F40000000000000000000000000000000000021 :108F50000000000000000000000000000000000011 :108F60000000000000000000000000000000000001 :108F700000000000000000000000000000000000F1 -:108F800000000000000900000000000000000000D8 -:108F90000000000000000002000000000000C0000F -:108FA000000000000000008000210002000000001E -:108FB0000000000000004000000000000000000071 -:108FC0000000000000000000000000080000000099 -:108FD0000000000000000000002100000000000070 -:108FE0001000000000000041000000000000000030 +:108F800004000000000000000000000000000000DD +:108F900000000000000000000000000000000000D1 +:108FA00000000000000000000000000000000000C1 +:108FB00000000000000000000000040000030000AA +:108FC00000000000000000000000000000000000A1 +:108FD0000000000000000000000000000000000091 +:108FE0000000000000000000000000000000000081 :108FF0000000000000000000000000000000000071 -:1090000008000000000000000000000000000082D6 -:109010000000000000000000000000000000000050 -:109020000000000000000000002000000000000020 -:1090300000000000008800000000000000000000A8 -:109040000000000000000000000000000000000020 -:109050000000000000000000000000000000080008 -:109060000000000000000000000000000000000000 -:1090700000000000000000000000000000000000F0 -:1090800000000000000000000000000000000000E0 +:109000000000000000000020000021000000008897 +:1090100000880000000000001100000000000000B7 +:10902000000000020000000000000000000011002D +:109030000000000040000084110003000400002034 +:109040000000000000080000000000000000000018 +:1090500003000000200003040000200000000000C6 +:1090600000000000000400000000000011000040AB +:1090700002001100000002200900090000000000A9 +:1090800000020000000000000000000000000000DE :1090900000000000000000000000000000000000D0 -:1090A0000000000000000090000000000000000030 -:1090B000000000000000000000000000C0840090DC -:1090C00000840420000000000000000000000000F8 +:1090A00000000000000000000000000000000000C0 +:1090B00000000000000000000000000000000000B0 +:1090C00000000000000000000000000000000000A0 :1090D0000000000000000000000000000000000090 :1090E0000000000000000000000000000000000080 :1090F0000000000000000000000000000000000070 :10910000000000000000000000000000000000005F :10911000000000000000000000000000000000004F -:1091200000000000000000000080000000000000BF +:10912000000000000000000000000000000000003F :10913000000000000000000000000000000000002F -:10914000000000008000000000000000000000009F +:10914000000000000000000000000000000000001F :10915000000000000000000000000000000000000F :1091600000000000000000000000000000000000FF :1091700000000000000000000000000000000000EF :1091800000000000000000000000000000000000DF :1091900000000000000000000000000000000000CF -:1091A000000000000000000000090000000800802E -:1091B000004000000000000000000000000000006F -:1091C000000000908080000000000000000000000F +:1091A00000000000000000000000000000000000BF +:1091B00000000000000000000000000000000000AF +:1091C000000000000000000000000000000000009F :1091D000000000000000000000000000000000008F :1091E000000000000000000000000000000000007F :1091F000000000000000000000000000000000006F :10920000000000000000000000000000000000005E :10921000000000000000000000000000000000004E -:109220000000000000000000000088000040000175 -:109230000004000100000000000000000000000029 -:109240000000400090830210200800000000000091 +:10922000000000000000000000000000000000003E +:10923000000000000000000000000000000000002E +:10924000000000000000000000000000000000001E :10925000000000000000000000000000000000000E :1092600000000000000000000000000000000000FE :1092700000000000000000000000000000000000EE :1092800000000000000000000000000000000000DE :1092900000000000000000000000000000000000CE -:1092A00000000000000000000000000000000800B6 -:1092B00020900100000000000000000000000000FD -:1092C0000000000004900090908810200000000032 +:1092A00000000000000000000000000000000000BE +:1092B00000000000000000000000000000000000AE +:1092C000000000000000000000000000000000009E :1092D000000000000000000000000000000000008E :1092E000000000000000000000000000000000007E -:1092F000000000000000000000000000000000006E +:1092F000000000000001000000000000000000006D :10930000000000000000000000000000000000005D :10931000000000000000000000000000000000004D -:10932000000000000000000000000000000020001D -:10933000000000804100000000000000000000006C +:10932000000000000000000000000000000000003D +:10933000000000000000000000000000000000002D :10934000000000000000000000000000000000001D :10935000000000000000000000000000000000000D :1093600000000000000000000000000000000000FD -:1093700000000000000000000000000000000000ED +:1093700000000000000000110000000000000000DC :1093800000000000000000000000000000000000DD :1093900000000000000000000000000000000000CD :1093A00000000000000000000000000000000000BD -:1093B000001180000000000000000000000000001C -:1093C000000000000000000000118000000000000C +:1093B00000000000000000000000000000000000AD +:1093C000000000000000000000000000000000009D :1093D000000000000000000000000000000000008D :1093E000000000000000000000000000000000007D :1093F000000000000000000000000000000000006D :10940000000000000000000000000000000000005C :10941000000000000000000000000000000000004C :10942000000000000000000000000000000000003C -:10943000000000012000000000000000000000000B -:109440000000000000000000000002002020208238 -:10945000020000000000000000000000000000000A +:10943000000000000000000000000000000000002C +:10944000000000000000000000000000000000001C +:10945000000000000000000000000000000000000C :1094600000000000000000000000000000000000FC :1094700000000000000000000000000000000000EC :1094800000000000000000000000000000000000DC :1094900000000000000000000000000000000000CC :1094A00000000000000000000000000000000000BC -:1094B00000000000480002E007000082000000E019 +:1094B00000000000000000000000000000000000AC :1094C000000000000000000000000000000000009C :1094D000000000000000000000000000000000008C :1094E000000000000000000000000000000000007C -:1094F000000000000000000000000000000000006C +:1094F000000000000000600000E00000000000002C :10950000000000000000000000000000000000005B :10951000000000000000000000000000000000004B :10952000000000000000000000000000000000003B -:1095300000000000000000FF000000FF000000002D -:109540000000000000000000000000000000535375 -:109550005353F30305050000000000000000000065 +:10953000000000000000000000000000000000002B +:10954000000000000000000000000000000000001B +:10955000000000000000000000000000000000000B :1095600000000000000000000000000000000000FB :1095700000000000000000000000000000000000EB :1095800000000000000000000000000000000000DB :1095900000000000000000000000000000000000CB :1095A00000000000000000000000000000000000BB -:1095B000000000000000000000FF000000FF0000AD +:1095B00000000000000000000000000000000000AB :1095C000000000000000000000000000000000009B -:1095D000FFF00F00F303F5F50000000000000000AD +:1095D000000000000000000000000000000000008B :1095E000000000000000000000000000000000007B :1095F000000000000000000000000000000000006B :10960000000000000000000000000000000000005A :10961000000000000000000000000000000000004A :10962000000000000000000000000000000000003A -:10963000000000000000000000000000FF0000002B -:109640003C3C0000000000000000000000000000A2 -:109650000000B200B23CA0AFC0C00000000000009B +:10963000000000000000000000000000000000002A +:10964000000000000000000000000000000000001A +:10965000000000000000000000000000000000000A :1096600000000000000000000000000000000000FA :1096700000000000000000000000000000000000EA :1096800000000000000000000000000000000000DA :1096900000000000000000000000000000000000CA :1096A00000000000000000000000000000000000BA -:1096B0000000000000000000000000000000FF00AB -:1096C00000003C3C00000000000000000000000022 -:1096D00000000000B2C3B2FFA0AFCFCF0000000077 +:1096B00000000000000000000000000000000000AA +:1096C000000000000000000000000000000000009A +:1096D000000000000000000000000000000000008A :1096E000000000000000000000000000000000007A :1096F000000000000000000000000000000000006A :109700000000000000000000000000000000000059 :109710000000000000000000000000000000000049 :109720000000000000000000000000000000000039 -:1097300000000000000000000000000000001565AF -:109740002A06854F20A800610006400D0000000099 -:109750000000000000000000000000C00000000049 +:109730000000000000000000000000000000000029 +:109740000000000000000000000000000000000019 +:109750000000000000000000000000000000000009 :1097600000000000000000000000000000000000F9 :1097700000000000000000000000000000000000E9 -:1097800000000000000000000000000000000000D9 +:1097800000610006800900000000000000000000E9 :1097900000000000000000000000000000000000C9 :1097A00000000000000000000000000000000000B9 :1097B00000000000000000000000000000000000A9 @@ -43401,7 +43401,7 @@ :1097D0000000000000000000000000000000000089 :1097E0000000000000000000000000000000000079 :1097F0000000000000000000000000000000000069 -:109800000000000000000000000000000000000058 +:10980000000000000000FFFF00000000000000005A :109810000000000000000000000000000000000048 :109820000000000000000000000000000000000038 :109830000000000000000000000000000000000028 @@ -43409,7 +43409,7 @@ :109850000000000000000000000000000000000008 :1098600000000000000000000000000000000000F8 :1098700000000000000000000000000000000000E8 -:1098800000000000000000000000000000000000D8 +:109880000000000000000000FFFF000000000000DA :1098900000000000000000000000000000000000C8 :1098A00000000000000000000000000000000000B8 :1098B00000000000000000000000000000000000A8 @@ -43427,178 +43427,178 @@ :1099700000000000000000000000000000000000E7 :1099800000000000000000000000000000000000D7 :1099900000000000000000000000000000000000C7 -:1099A00000000000000000000000000000000000B7 -:1099B00000000000000000000000000000000000A7 -:1099C0000000000000000000000000000000000097 -:1099D0000000000000000000000000000041A04165 -:1099E0000000000000000000000300000000000074 -:1099F0000000000088000000000000000011880046 -:109A0000200040000000000000040000000088006A -:109A1000880000008800040000008800000020008A -:109A200020000000880088000000000000001000F6 +:1099A0000000000000000000000020002000C000B7 +:1099B000200020002000000820002000200040009F +:1099C00020002000200020000000200020002000B7 +:1099D000200088002000000020002000200020003F +:1099E00020002000200020000003000020002000B4 +:1099F00020002000000020000000200000000000E7 +:109A00000000000020002008C0040000000000004A +:109A1000400020000000880000002000000000003E +:109A2000000000002000008420A0000000000000D2 :109A30000000000000000000000000000000000026 -:109A40000000000000000000000000000000000016 +:109A400000000000030040000000000000000000D3 :109A50000000000000000000000000000000000006 -:109A60000082000000000000000000000000000074 -:109A7000008400000000000000C000900000000012 -:109A800000C00000000000C0000000A100000000B5 -:109A900000000000000000000000000000000000C6 -:109AA0000000000000000000000000840000000032 -:109AB00000000000000000000000000000000000A6 -:109AC0000000000000000000000000000000000096 -:109AD000000000000000000000000008000000007E -:109AE0000000000000000000000000000000000076 +:109A600000000000000000000000000000000000F6 +:109A700000000000000000000000000000000000E6 +:109A800010000000000000000021000100000000A4 +:109A900000002000000000000000000000000000A6 +:109AA0000000000000000020002100110000000064 +:109AB0000000000000000000000000100000000096 +:109AC000000000000000000000082002000000006C +:109AD0000000000000000000000000400000000046 +:109AE000000000000000000000081002000000005C :109AF0000000000000000000000000000000000066 :109B00000000000000000000000000000000000055 :109B10000000000000000000000000000000000045 -:109B2000000000000000000000000000000000082D -:109B3000008400840084000000000000000400088D -:109B4000000800840010008200000000000800846B -:109B500000840084000000000000000000840084F5 -:109B6000008400900000000000000000008400005D -:109B700000840000000000000000000000000090D1 -:109B800000000000000000000000000800000000CD -:109B900000000000000000000000000000000008BD -:109BA0000084000000000000000000840000008429 -:109BB000000800080000000500210021002100002D -:109BC0000021000300100021002188210021010054 -:109BD00000080021000300210021002100210000D5 -:109BE0000002000588050002002100210021000379 -:109BF0000000002100030000000000210009902166 -:109C000090219009000000090005002100000021BA -:109C100000080000000000000000002100000021FA -:109C200000000000000000000000002100000021F2 -:109C300010210000000000000000080009000000E2 -:109C40000040000000000000000021000000410072 -:109C500010000000000000000000000000000000F4 -:109C600000000000000041000500000000000000AE -:109C70000000000000400000000000A00000000004 -:109C800000000008000800000000000000000000C4 +:109B2000000000000000000000000008100000001D +:109B300000000500200009000000000805000000EA +:109B4000000000000000090000000009800900007A +:109B500000000000000000000000000800080000F5 +:109B60000000000000000000000000098009000063 +:109B700000000000000000000000000000100010C5 +:109B800000000000000000000000000000080008C5 +:109B900000000000000000000000000000000000C5 +:109BA0000000000000000000000000000009800824 +:109BB0000000000000000000000000410000004123 +:109BC0000000000000000000000000000000000095 +:109BD000002100000000000000050000000000005F +:109BE0000005000000000000000000000000000070 +:109BF0000000000000000000000000000000000065 +:109C00000000000000000000000000000000000054 +:109C10000000000000000000000000000000000044 +:109C200000000000C0000000000000000000000074 +:109C30000000000000000000000000000000000024 +:109C40000000000000000000000000000000000014 +:109C50000000000000000000000000000000000004 +:109C600000000000000000000000000000000000F4 +:109C700000000000000000000000000000000000E4 +:109C800000000000000000000000000000000000D4 :109C900000000000000000000000000000000000C4 -:109CA0000000000000820000000000000000000032 -:109CB00000008000000082000000000000000000A2 -:109CC0000000000000000000000000000000000094 -:109CD0000000200000000000000000000000000064 -:109CE0000000000000000200A00000000000C00012 -:109CF0000000C00000000000000082000000000022 -:109D00000000000000008400000082008400900039 -:109D1000C0008400C00082000000820082000000B9 -:109D2000080082008400840000008400A00000007D -:109D300082008200820000A00008000000A0000055 -:109D40000000000000000000000000000000000013 -:109D50000000000080000082000000000000000001 -:109D600000000000000000000000000000000000F3 -:109D700000000000000000000000000000000000E3 +:109CA00000000000000000000000000000000000B4 +:109CB00000000000820082000000820040000000DE +:109CC0000000820082008200000082000000A000EC +:109CD00000008280820082000000820010000000EC +:109CE000A0008200820082009000820082000000BA +:109CF000000082800000820082008200820000005A +:109D00000000000000000000000000000800080043 +:109D10000000A000008800008800080020008200E9 +:109D2000A0002000A000C00082008200820082000B +:109D30008200080000820000000000000000000017 +:109D400000004000210000000000000000000000B2 +:109D500000000000000800000000000040000000BB +:109D60000000400040000000210000000000000052 +:109D700000000000000400000000000000000000DF :109D800000000000000000000000000000000000D3 -:109D900000000000000000000000000000000000C3 -:109DA0000000000000000000400000000000000073 -:109DB0000000000000000000001100210000000071 -:109DC000A000000000000000000082210008C00088 -:109DD000C011000000000000002100000000C009C8 -:109DE00000000002000082119000000588040000BD -:109DF000000000000000018000030000820000025B -:109E00000000C00282000000000490000005400431 -:109E10000000100000000000000000000000000032 -:109E2000000082000800820000000000000500041D -:109E30000000080000000000008800000000000092 +:109D900000000000000000030000000000000000C0 +:109DA0000000200000000010000041002000000022 +:109DB000000000000000000500000000A000A0005E +:109DC000000000050000000000000000000040004E +:109DD00082004005000000000000000000000000BC +:109DE00000008200000000000000000000000000F1 +:109DF000100000050000000000000000000000004E +:109E00000000000000000000000000000000000052 +:109E100000000000A0000000080000000000C000DA +:109E200000000000C0000800000000000000004129 +:109E30000000000000000000000000000000000022 :109E40000000000000000000000000000000000012 -:109E5000000000840000000000000000000000205E -:109E600000200000000000000000000000000000D2 -:109E70000000050040000000200800000000000075 -:109E800000000000000000000000000009000000C9 -:109E900009000000000000000000000000000000B9 +:109E50000000000000000000000000000000000002 +:109E600000000000000000000000000000000000F2 +:109E700000000000000000000000000000000000E2 +:109E800000000000000000000000000000000000D2 +:109E900000000000000000000000000000000000C2 :109EA00000000000000000000000000000000000B2 -:109EB0000000000000000000000000040802000292 -:109EC00000080002000000000000820808000008EE -:109ED0000021000500030003000500080011000038 -:109EE0000021000000000400C0000021000000214B -:109EF0000000000500050008000500210000000327 -:109F00000000002100000000000000000000000030 -:109F10000000000000000000000800000008000031 -:109F200000000000C000000082000000820000006D -:109F30000000000000000000002100000000000000 +:109EB0000000000000000000000000000010000092 +:109EC00040008800820008050000000000004005F6 +:109ED0000000000000212004000000000000884174 +:109EE0001000C00010000800000000000009000081 +:109EF0000000000000090400820000410000000092 +:109F00000011A000C0008200080000000000000056 +:109F100008000800400000000000000000000000F1 +:109F20000800000082008200A00082000000000003 +:109F30000004000000000400000082004000000057 :109F40000000000000000000000000000000000011 :109F50000000000000000000000000000000000001 :109F600000000000000000000000000000000000F1 :109F700000000000000000000000000000000000E1 :109F800000000000000000000000000000000000D1 -:109F900000000000000000000000000000000001C0 +:109F900000000000000000000000000000000000C1 :109FA00000000000000000000000000000000000B1 -:109FB00000000000000000000000000000000000A1 -:109FC00000010001000100C00001020100C001C148 -:109FD00000004101008200820001900100C10000E8 -:109FE00000010001000100C00001020100C0008961 -:109FF00000000501000400820001900100C1000082 -:10A00000000000010001000100C00001880100C043 -:10A01000014100000101004000020001900100C167 -:10A02000000000010001000100C00001000100C0AB -:10A03000008900000101004000020001900100C100 -:10A0400000000041004100410089004100410089B9 -:10A0500008410011104100800000004100410083D0 -:10A060000000004100410041008900410041009092 -:10A0700008410011904100800080004100410083B0 -:10A0800000000000004100410041009000410041FB -:10A090000090084120111041000000800041004163 -:10A0A0000083000000410041004100900041004158 -:10A0B00000904041401110410000008000410041EB -:10A0C000008300004100030000000080410089007F -:10A0D0000000030090000280008085004100C10064 -:10A0E00000808000410003000000008041008900E2 -:10A0F00000000300890002000090C0004100C10080 -:10A10000008080000000410003000000008041004A -:10A1100090000000030088008880008884004100CF -:10A12000C100008080004100030000000080410069 -:10A13000900000000200A000838000009000410019 -:10A14000C1000080800001000100000000C001008B -:10A15000C00000000100090084080008C0000300DE -:10A16000C1000082820001000100000000C0010067 -:10A17000C00000000100400084100009C10011006F -:10A18000C10000828200000001000100000000C048 -:10A190000100C000000001000200412000C0C0001A -:10A1A0008300C1000082820001000100000000C0A5 -:10A1B0000100C00000000100020004200020C100D6 -:10A1C0008300C1000082820000C00001C0C1000005 -:10A1D0000000000100C008100011000100C10100D2 -:10A1E000000000010000000000C00001C0C100002C -:10A1F0000000000100C008100091000100C1010032 -:10A200000000000100000000000000C00001C0C10B -:10A2100000000000000100C002820091000190C116 -:10A220000100000000010000000000C00001C0C1EA -:10A2300000000000000100C002200091000100C1E8 -:10A24000000000000001000000000080004180C10B -:10A25000000000000041008280200041004100C158 -:10A26000080000000041004100000080004180C162 -:10A27000000000000041008280200041004100C138 -:10A280000800000000410041000000000080004183 -:10A2900080C1000000000041008200A00041004198 -:10A2A00000C10800000000410041000000800041A2 -:10A2B00080C1000000000041008200050041004113 -:10A2C00000C100000000004100410000C10080000A -:10A2D00080C100004102800090004100C141800027 -:10A2E000801000004110000080004100C10080008B -:10A2F00080C100004102800090004100C141800007 -:10A300008010000041100000800041000000C100EA -:10A31000800080C100004102804190004100C1C125 -:10A320008000802000004110000080004100C1003A -:10A33000800080C100004102800090004100C141C6 -:10A340000000804000004110000080004100C1007A -:10A350004000C0C100000100200010000100C189C0 -:10A360008200C000000001010000C0000100C10027 -:10A370004000C0C100000100200010000100C189A0 -:10A380008200C000000001010000C00001000000C8 -:10A39000C1004000C0C10000010020011000010008 -:10A3A000C1418200C000000001010000C0000100A6 -:10A3B000C1004000C0C100000100200010000100E9 -:10A3C000C1839000C000000001010000C000010036 -:10A3D000000000000000004200000000000000003B -:10A3E0008112008807004800000000000000000003 -:10A3F000000000000000004200000000000000001B -:10A4000081120088070048000000000000000000E2 -:10A4100000000000000000000042000000000000FA -:10A4200041008112008807004882000000000000FF -:10A4300000000000000000000042000000000000DA -:10A4400000008112008807004800000000000000A2 -:10A4500000000000000000000000000000000000FC +:109FB0000000000000C000000000000008000000D9 +:109FC000000000000000000100000000000001A0EF +:109FD00001000000008210100000000000010000DD +:109FE00000000000000000010000900000010004DB +:109FF000000001000082C004000000000001000019 +:10A00000000000000000000000010000000000004F +:10A010000004000001000020C0A0000000000001BA +:10A02000000000000000000000010000A00000018E +:10A0300001840000C0000084C0820000C000000154 +:10A04000000000000000000000020000000000030B +:10A0500002000440210000008000000000000041D8 +:10A0600000000000000000000002000000000003EB +:10A0700008800340100000000000000000000041C4 +:10A0800000000000000000000000000200000000CE +:10A090000020088000401000000080000000000048 +:10A0A000004100000000000000000004000000006B +:10A0B0000004020000038300000080800000800094 +:10A0C0000003000000000900000000000000400044 +:10A0D0000000050009000500000004000000000069 +:10A0E00000008020000005000000000000000500C6 +:10A0F00000000200200085000000090000000000B0 +:10A1000000008020000000000500000000000000AA +:10A11000100000000200200082000000400000004B +:10A1200000000000800500000200000000000000A8 +:10A13000040000000300A000030000000300000072 +:10A1400000000080804000000000000000000000CF +:10A150000100000000008200824000000100900029 +:10A1600000000000C000000000000000000000002F +:10A1700000000000010021002040000000009000CD +:10A1800000000000C001000000000000000000000E +:10A190000000010000000100210005400000010056 +:10A1A000900000000000C00000000100000000005E +:10A1B00000000100000001000500A140000001C0F6 +:10A1C0000400000000C08200000000000000000049 +:10A1D000000000000001210000020000000000005B +:10A1E000000000000001000000000000000000006E +:10A1F0000000000000002000000800000000000037 +:10A20000000000000001000000000000000000004D +:10A21000000000000000000020000082000001009B +:10A22000000000000000000100000000000000002D +:10A23000000000000000000110000040000041008C +:10A24000000000000000000000000000000000000E +:10A250000000000000000005404000000000040075 +:10A2600000000000000000410000000000000000AD +:10A2700000000000000000410040008000001100CC +:10A28000000000000000004100000000000000008D +:10A29000000000000000000000410040000000003D +:10A2A000030000000000000000410000000000006A +:10A2B000000000000000000000208004008000007A +:10A2C000410000000000000000410000000080008C +:10A2D00000910000000380000500000000C10000A4 +:10A2E0000040000000000000000003820000800524 +:10A2F00000830000002000000500000000C10000F5 +:10A3000000400000000000000000400200000000CB +:10A31000800500830000002000000500000000C14F +:10A320000004004000000000000000002088000041 +:10A3300000020083000000008000200000000041B7 +:10A3400080000005000000410000000040090000FE +:10A35000080000100000000020008200000000053E +:10A36000A0000000000000000000000000C100008C +:10A3700004000083000000010800820000000005C6 +:10A38000A00000000000000000000000011100001B +:10A3900000000400008300000001080082000000AB +:10A3A0000005400100000000000000000000000364 +:10A3B000000082010083000000000800C1000000CE +:10A3C000008904000000000000010000000001906E +:10A3D000000000000000000000000000000000007D +:10A3E000811200E0070048000000000000000006A5 +:10A3F000000000000000000000000000000000005D +:10A40000811200E00700480000000000000000008A +:10A41000000000000000000000000000000000003C +:10A420000000811200E00700480A00000000000060 +:10A43000000000000000000000000000000000001C +:10A440000000811200E0800048420000000000008F +:10A450004842000000000000000000000000000072 :10A4600000000000000000000000000000000000EC :10A4700000000000000000000000000000000000DC :10A4800000000000000000000000000000000000CC @@ -43622,72 +43622,72 @@ :10A5A00000000000000000000000000000000000AB :10A5B000000000000000DEAE757B0000000000001F :10A5C000000000000000000000000000000000008B -:10A5D000000000000000DEAE60C6030000000000C6 -:10A5E00000000031E0000000000000000C0000004E -:10A5F0000000000000C0630660C603000000000009 -:10A6000000000031E0000000000000000C0000002D -:10A610000000000000C06306000060C603000000E8 -:10A62000000000000031E0000000000000000C000D -:10A6300000000000000000C0630660C603000000C8 -:10A64000000000000031E0000000000000000C00ED -:10A6500000000000000000C06306000000000000D1 -:10A6600000000000000000000000000000000000EA -:10A6700000000800000000000000000000000000D2 -:10A6800000000008000000000000A0000000000022 -:10A690000400200000000000000000000000000096 -:10A6A0000000000000000000000000002000A000EA -:10A6B000000020002000000000000000000000005A -:10A6C00000008800000000000000000020002000C2 -:10A6D000000020002000000000000000000000003A -:10A6E000000000000000000000000000000000006A -:10A6F000000000000000000000000000000000005A -:10A700000000000000000000000000000000000049 -:10A710000000000000000000000000000000210018 -:10A720000000000000000000000000001000009089 -:10A730001000000000000000000000000000000009 -:10A740000000000000000000000000000000000009 -:10A7500000000000000005000000000000000000F4 -:10A7600000000000000000000000000002000200E5 -:10A7700000000000000002000000000000000000D7 +:10A5D000000000000000DEAE612603400000000025 +:10A5E00000000230A0000000000000000C4000004D +:10A5F0000000000002C064866126034000000000E5 +:10A6000000000230A0000000000000000C4000002C +:10A610000000000002C064860000612603400000C4 +:10A62000000000000230A0000000000000000C400C +:10A6300000000000000002C06486612603400000A4 +:10A64000000000000230A0000000000000000C40EC +:10A6500000000000000002C064862000000004002A +:10A660002000040020000000200000002000200046 +:10A670002000200088002000200020000000200092 +:10A6800088008800200088002000000020002000B2 +:10A6900020002000200020002000000020000000FA +:10A6A0002000040000000400200020000000000042 +:10A6B00020002000200020002000000020000000DA +:10A6C00020002000000020002000200000000000EA +:10A6D00020000000200020002000000009000000F1 +:10A6E0000000090020000000200000000000000021 +:10A6F000050005004000000000000000040000000C +:10A70000000020000000090000000500000000001B +:10A71000050005000000050000000000000000002A +:10A7200000000000000040002000000000000000C9 +:10A730000000000000000000000000000000000019 +:10A740000000000000000000040000000000000005 +:10A7500005000000000000000500050000000000EA +:10A7600000000000000000000000000000000000E9 +:10A7700000000000000900000000000000000000D0 :10A7800000000000000000000000000000000000C9 -:10A7900000000000020000000000000000000000B7 -:10A7A00000000000000000000000000002000000A7 -:10A7B0000000000000000000820000000000000017 +:10A7900000000000000900000000000000000000B0 +:10A7A00000000000000000000000000000000000A9 +:10A7B0000000000000000000000000000000000099 :10A7C0000000000000000000000000000000000089 -:10A7D00000000000000000008240000000000000B7 -:10A7E0000000000000080000000800000000000059 -:10A7F0000008000000080000000000000008000041 -:10A800000000000000840000008400000000000040 -:10A81000000800000008000000000084008400849C -:10A82000000000000400000000000208000000001A -:10A8300000000090008400080000000000000000FC -:10A84000000000000000000000000008000000847C -:10A85000000000080000008400000000000000006C -:10A8600000000000002100000021000000000000A6 -:10A8700000000000000500000005000000000000CE -:10A8800000000000000020000000000000000000A8 -:10A890000000002000000040000000210000000037 -:10A8A000900000000000000000000000000900030C -:10A8B000000900200000000000000000000000006F -:10A8C0000000000000000021000000000000000067 -:10A8D0000000000000000005000000000000000073 -:10A8E0000002000000000000000011000000000055 -:10A8F00000000000000000000008008400C000000C -:10A900000008000000A0000000001100000000008E -:10A91000000010000400000800080084008200000D -:10A9200000A0000400000000000000001100400032 -:10A93000000000081100000800A04008000000000E -:10A9400000000000000000000000000021000300E3 -:10A95000000041A000000008008400A000000000EA -:10A9600000000000000000000000000000000000E7 -:10A9700000000000000000000000000000000000D7 -:10A9800000000000000000000000000000000000C7 -:10A9900000000000000000000000000000000000B7 -:10A9A00000000000000000000000000000000000A7 -:10A9B0000000000000000000000000000000100087 -:10A9C000840000000000000000000000A0008200E1 -:10A9D0000000000000000000000000000000000077 -:10A9E000000000000000000000000000000800005F +:10A7D0000000000000000009000000000000000070 +:10A7E0000000000000000008000000000000000061 +:10A7F0000000000000000008000800000000000049 +:10A800000000000000000008000000000000000040 +:10A810000000000000000008000800000000000028 +:10A820000000000000000000000800000000000020 +:10A830000000000000000000008800080000000088 +:10A840000000000000000000008800000000000080 +:10A8500000000000000000000000000800000000F0 +:10A8600000000000000000000010000000000000D8 +:10A8700000000000000000000000000000000000D8 +:10A8800000000000000000000000000000000000C8 +:10A8900000000000000000000000000000000000B8 +:10A8A00000000000000000000000000000000000A8 +:10A8B0000000000000000000000000000000000098 +:10A8C0000000000000000000000000000000000088 +:10A8D0000000000000000000000000000000000078 +:10A8E0000000000000000000000021000000000047 +:10A8F0000000000000000000000021000000000037 +:10A900000010000000000000000003000300000031 +:10A910000000000000000000000000000000000037 +:10A920000000000000000000000021000890080066 +:10A9300000000300000000000000000003004100D0 +:10A940000000000000000000000000000000000007 +:10A9500000000000000000000000000000000000F7 +:10A96000000000000000000000000000A000000047 +:10A97000C000A000000000000000000082000400F1 +:10A98000080082000000000000000000000000003D +:10A99000000000000000A000000000000000A00077 +:10A9A0000000040000000000820000000000C00061 +:10A9B0000000000000000000000000000000000097 +:10A9C0000000000000000000000000000000000087 +:10A9D00000000000000000000000000000008800EF +:10A9E0000000000004000000000000000000000063 :10A9F0000000000000000000000000000000000057 :10AA00000000000000000000000000000000000046 :10AA10000000000000000000000000000000000036 @@ -43695,31 +43695,31 @@ :10AA30000000000000000000000000000000000016 :10AA40000000000000000000000000000000000006 :10AA500000000000000000000000000000000000F6 -:10AA600000000000000000000000000000000000E6 +:10AA600000000000000000000000000000000800DE :10AA700000000000000000000000000000000000D6 :10AA800000000000000000000000000000000000C6 -:10AA900000000000000000000000000000000000B6 -:10AAA00000000000000000000000000000000000A6 -:10AAB000000000040000000000000000042000006E -:10AAC0000000000040000000000000000000000046 -:10AAD0000000C000000000000000000000000000B6 -:10AAE0000000000000000000000000000200000064 -:10AAF000000000000308000000000000400800847F -:10AB000000001100020000000000000000A0000092 -:10AB1000000000000008000000000000400804845D -:10AB2000000002000800000000000000000000001B -:10AB30000000000000000088000000200020080441 -:10AB400004040000100408000000000000000000E1 -:10AB500000000000000000080000000000000800E5 -:10AB6000080003000300084000000000000000008F -:10AB700000000000000000000000000000000000D5 -:10AB800000000000000000000008000000080000B5 -:10AB900000000000000000000000000000000000B5 -:10ABA0000000000000000000002100000021000063 +:10AA900000000800000000000000000000000000AE +:10AAA000C0001000000000000000000000000000D6 +:10AAB000000000000000000000000000000008008E +:10AAC0000000000000000000000000000000000086 +:10AAD0000000000000000000000000000000000076 +:10AAE0000000000000000000000000000000000066 +:10AAF0000000050000000000000000000000000051 +:10AB0000000000000000000000000800000000003D +:10AB1000000000000800000000000000210000000C +:10AB2000000000000000000000000800000000001D +:10AB3000000000000000030000000000000003000F +:10AB4000000000000000009000000000080000006D +:10AB500000000000000000000000000000000000F5 +:10AB60000084000000000000000000000000000061 +:10AB7000000082100000000000000000040000003F +:10AB800000000000000000000000000000000000C5 +:10AB900000000000000004000000000000000400AD +:10ABA00000000000000000000000C00000000000E5 :10ABB0000000000000000000000000000000000095 -:10ABC0000000000000000000000000001000C000B5 +:10ABC0000000000000000000000000000000000085 :10ABD0000000000000000000000000000000000075 -:10ABE000000000000000000000000008000000005D +:10ABE0000000000000000800000000090000A000B4 :10ABF0000000000000000000000000000000000055 :10AC00000000000000000000000000000000000044 :10AC10000000000000000000000000000000000034 @@ -43882,93 +43882,93 @@ :10B5E000000000000000000000000000000000005B :10B5F000000000000000000000000000000000004B :10B60000000000000000000000000000000000003A -:10B61000000000000000000000000000000000002A -:10B62000000000000000000000000000000000001A -:10B6300000000000000000100000000000000000FA -:10B640000000000000000000000000000000C0003A -:10B6500000000000000000000000000000000000EA -:10B6600000000000000000000000000200000000D8 -:10B6700020000000000000000000000000000000AA -:10B6800000000000000000000000000000000000BA -:10B69000200000000000000000000000000000008A -:10B6A000000000000000000000000000000000009A -:10B6B000000000000000000000000000000000008A -:10B6C000000000000000000000000000000000007A +:10B6100000000000000000000000840000000000A6 +:10B6200000000000040000002000000000000400F2 +:10B6300000000000200000000000200000000000CA +:10B640000000000020008800200000000000200012 +:10B6500000000000200000000000000000000000CA +:10B6600000000000000000000000200000000000BA +:10B6700000000000000020000000000000000000AA +:10B68000000000000000000000002000000000009A +:10B69000000000000000200000000000000000008A +:10B6A0002000000000002000000000000000040056 +:10B6B0000000040000000000000000000000000086 +:10B6C0000000040000000000000000000000000076 :10B6D000000000000000000000000000000000006A -:10B6E0000000000021000000000000000000000039 -:10B6F000000000000000000000000000000000004A +:10B6E000000000000000000000000000000000005A +:10B6F000000020000000000000000000000000002A :10B700000000000000000000000000000000000039 :10B710000000000000000000000000000000000029 -:10B720000000000000000000000004000000000015 -:10B730000000000000000000000000000000000009 +:10B720000000000000000000001000000000000009 +:10B7300000000000000000000040001000000000B9 :10B7400000000000000000000000000000000000F9 -:10B7500000000000000000000000000000000000E9 -:10B7600000000000000000000000000000000000D9 +:10B7500000000000000000000040000000000000A9 +:10B760000000000000000000000000000040000099 :10B7700000000000000000000000000000000000C9 -:10B7800000000000000000000000000000000000B9 -:10B7900000000000000000000000000000000000A9 -:10B7A000000000000008020000000000000000008F -:10B7B0000000000000000000000000000000000089 -:10B7C0000000000000080000000000000000000071 -:10B7D0000000000000000000000000000000000069 -:10B7E00000000000000000900000000000000000C9 -:10B7F0000000000200000000000000000000000047 -:10B800000200000000000000000000000000000036 -:10B810000000000000000000000000000000000028 -:10B820000000000000000000000000000000000018 -:10B830000000000000000000000000000000000008 -:10B8400000000000000000000000000000002000D8 -:10B8500000000000000084000000880000000000DC -:10B8600000000000000000000000000000000000D8 -:10B8700000009000000084000800000000000000AC +:10B780000000000000000000000000100040000069 +:10B790000000000000000000000000400041000028 +:10B7A0000000000000000000000000082000000071 +:10B7B0000000000000080000000000000040000041 +:10B7C0000000000000000000000000100000000069 +:10B7D00000000000008400000000000000080000DD +:10B7E0000000000000000000000000000000000059 +:10B7F0000000000000000000000000000000000841 +:10B800000000000000000000000000000000000830 +:10B8100000000000000000000000000000000040E8 +:10B8200000000000000000000000000000000021F7 +:10B8300000000000000008000000C0000000000838 +:10B84000000000000000000000000000080082006E +:10B8500000000000000000000000000000000000E8 +:10B8600000000000000000000005000000000800CB +:10B8700008000000000000000000000000000000C0 :10B8800000000000000000000000000000000000B8 -:10B8900000000000000000000800000000000000A0 +:10B8900000000000000000000000000000000000A8 :10B8A0000000000000000000000000000000000098 :10B8B0000000000000000000000000000000000088 -:10B8C00000000000000000000000000000840000F4 +:10B8C0000000000000000000000000000000000078 :10B8D0000000000000000000000000000000000068 :10B8E0000000000000000000000000000000000058 -:10B8F0000000000011000000000000000000000037 +:10B8F0000000000000000000000000000000000048 :10B900000000000000000000000000000000000037 :10B910000000000000000000000000000000000027 :10B920000000000000000000000000000000000017 :10B930000000000000000000000000000000000007 -:10B9400000000000000000000000000000000000F7 +:10B9400000000400000000000000000000000000F3 :10B9500000000000000000000000000000000000E7 -:10B9600000000000000000000000000000000000D7 +:10B960000000000000000000000000000000C00017 :10B9700000000000000000000000000000000000C7 :10B9800000000000000000000000000000000000B7 :10B9900000000000000000000000000000000000A7 -:10B9A0000000000000000000000000000000000097 +:10B9A0000000000000000000000000000084000013 :10B9B0000000000000000000000000000000000087 -:10B9C0000000000000000000000000000000000077 +:10B9C00000000000000000000000000000840000F3 :10B9D0000000000000000000000000000000000067 :10B9E0000000000000000000000000000000000057 :10B9F0000000000000000000000000000000000047 -:10BA00000000000000000000000000000000000036 +:10BA00000000000000000004000000000000000032 :10BA10000000000000000000000000000000000026 :10BA20000000000000000000000000000000000016 -:10BA30000000000000000000000000000000000006 +:10BA300000000000000000000000000008000000FE :10BA400000000000000000000000000000000000F6 :10BA500000000000000000000000000000000000E6 -:10BA600000000000000000000000000000000000D6 +:10BA600000000000000000000000000008000000CE :10BA700000000000000000000000000000000000C6 :10BA800000000000000000000000000000000000B6 :10BA900000000000000000000000000000000000A6 :10BAA0000000000000000000000000000000000096 -:10BAB000000800000000000000000000000000007E -:10BAC00000840000000000000000000000000000F2 -:10BAD000000800000000000000000000000000005E -:10BAE00000000000000000000088000000000000CE -:10BAF000000000040000008800000090000000002A -:10BB00000000000000000000000000000000000035 +:10BAB0000000000000000000000000000000000086 +:10BAC0000000000000000000000000000000000076 +:10BAD0000000000000000000000000000000000066 +:10BAE0000000000000000000000000000000000056 +:10BAF0000000000000000000000010000000000036 +:10BB00000000000003000000000000000000000032 :10BB10000000000000000000000000000000000025 :10BB20000000000000000000000000000000000015 -:10BB30000002000000000000000000000000000003 -:10BB400000000000000000000000001000000000E5 -:10BB500000000000000000000000000000000008DD +:10BB300000000000000000000000001000000000F5 +:10BB400000000000000000000000000000000000F5 +:10BB500000000000000000000000001000000000D5 :10BB600000000000000000000000000000000000D5 -:10BB700000000000000000000000000000000000C5 +:10BB700000000000000000000000000000080000BD :10BB800000000000000000000000000000000000B5 :10BB900000000000000000000000000000000000A5 :10BBA0000000000000000000000000000000000095 @@ -44126,57 +44126,57 @@ :10C52000000000000000000000000000000000000B :10C5300000000000000000000000000000000000FB :10C5400000000000000000000000000000000000EB -:10C55000000000002000200000000000000000009B -:10C5600000000004000000000000000000000000C7 -:10C570000000000020002000000000020000000079 -:10C5800000000000000000000000000000000000AB -:10C590000000000000012000200000020000000058 -:10C5A000000000000000000000000000000000008B -:10C5B000000000000000200020000000000000003B -:10C5C000000000000000000000000000000000006B -:10C5D0000000000000000000000200000000000059 +:10C5500000000000000000000000000020000000BB +:10C56000000000002000200000000000000000008B +:10C5700000000000000000000000000000000000BB +:10C58000000000002000200000000000000000006B +:10C59000000000000000000000000000000000009B +:10C5A000000000000000200020000000000000004B +:10C5B000000000000000000000000000000000007B +:10C5C000000000000000200000000000000000004B +:10C5D000000000000000000000000000000040001B :10C5E000000000000000000000000000000000004B -:10C5F000000000001000000000000000000000002B -:10C60000000000000000000000000000000000002A -:10C61000000000000000000000000000000010000A -:10C6200000000000400000000000000000000000CA +:10C5F000000000000000000000000000000020001B +:10C6000000000000000000000000000000004000EA +:10C61000000000000000000000000000000000001A +:10C62000000000000000000000000000000000000A :10C6300000000000000000000000000000000000FA :10C6400000000000000000000000000000000000EA :10C6500000000000000000000000000000000000DA -:10C6600004000000000000000100000000000000C5 +:10C6600000000000000000000000000000000000CA :10C6700000000000000000000000000000000000BA -:10C6800002000000000000000000000000000000A8 -:10C690000200020000000000000000000000000096 +:10C6800000000000000000000000000000000000AA +:10C69000000000000000000000000000000000009A :10C6A000000000000000000000000000000000008A -:10C6B0000000040000000000000000000000000076 -:10C6C0000000080000000000000002000000000060 -:10C6D0000000000000000000000002000000000058 -:10C6E0000000020000000000000002000000000046 -:10C6F0000000000000000000000000000000020038 -:10C700000000000000000000000000000000000029 -:10C710000000000000000000000000000000000019 -:10C720000000000000000000000000000000040005 -:10C7300000000000020002000000000000000000F5 -:10C7400000000000000000000000000000000000E9 -:10C7500000000000020000000000000000000000D7 -:10C7600000000000000000000000000002000000C7 -:10C7700000000000000000000000000000000000B9 -:10C7800000000000000000000000000004000000A5 -:10C790000000000000000000000000000000040095 -:10C7A0000000000000000400000000200000000065 -:10C7B000040004000000040000000000000000006D +:10C6B000000000000000000000000000000000007A +:10C6C0000200000000000000000000000000000068 +:10C6D000000000000000000000000000000000005A +:10C6E00000080084000000000000000000000000BE +:10C6F00000000000000800000088000000000000AA +:10C700000010000000000000000000000000000019 +:10C710000008000000080000000000000000000009 +:10C720000000000800000000000000000000000001 +:10C730000000008800000008000000000000000069 +:10C7400000000010000000000000000000000000D9 +:10C7500000000000000000080000000000000000D1 +:10C7600000000000000300000000000000000000C6 +:10C7700000000000000300000000000000000000B6 +:10C7800000000000000000000000000000000000A9 +:10C790000000000000000000000000000000000099 +:10C7A0000000000000000000000000000000000089 +:10C7B0000000000000000000000000000000000079 :10C7C0000000000000000000000000000000000069 :10C7D0000000000000000000000000000000000059 :10C7E0000000000000000000000000000000000049 :10C7F0000000000000000000000000000000000039 -:10C800000000000000000000000000001000000018 -:10C810000000008400000000000000000000000094 -:10C820000000000000000000000000000400000004 +:10C800000000000000000000000000000000000028 +:10C810000000000000000000000000000000000018 +:10C820000000000000000000000000000000000008 :10C8300000000000000000000000000000000000F8 :10C8400000000000000000000000000000000000E8 -:10C8500000000000000000000000000000000000D8 -:10C860000000000000008200000000000000000046 -:10C8700000000000000001000000000000000000B7 +:10C850000000000000000000410000000000000097 +:10C8600000000000000000000000000000000000C8 +:10C8700000000000000000000000000000000000B8 :10C8800000000000000000000000000000000000A8 :10C890000000000000000000000000000000000098 :10C8A0000000000000000000000000000000000088 @@ -44184,7 +44184,7 @@ :10C8C0000000000000000000000000000000000068 :10C8D0000000000000000000000000000000000058 :10C8E0000000000000000000000000000000000048 -:10C8F0000000000000000000040000000000000034 +:10C8F0000000000000000000000000000000000038 :10C900000000000000000000000000000000000027 :10C910000000000000000000000000000000000017 :10C920000000000000000000000000000000000007 @@ -44192,26 +44192,26 @@ :10C9400000000000000000000000000000000000E7 :10C9500000000000000000000000000000000000D7 :10C9600000000000000000000000000000000000C7 -:10C970000000000000000000002000000000000097 -:10C9800000000000000000000000000000000000A7 +:10C9700000000000000000000000000800000000AF +:10C98000000000000000000000000008000000009F :10C990000000000000000000000000000000000097 :10C9A0000000000000000000000000000000000087 :10C9B0000000000000000000000000000000000077 :10C9C0000000000000000000000000000000000067 -:10C9D0000000000000000000000000000000000057 +:10C9D000000000000000000008000000000000004F :10C9E0000000000000000000000000000000000047 -:10C9F0000000000000000000000000010000000036 +:10C9F0000000000000000000000000000000000037 :10CA00000000000000000000000000000000000026 -:10CA100000000000000000000000000000000420F2 +:10CA10000000000000000000000000000000000016 :10CA20000000000000000000000000000000000006 -:10CA300000200000002000000000000000000400B2 +:10CA300000000000000000000000000000000000F6 :10CA400000000000000000000000000000000000E6 :10CA500000000000000000000000000000000000D6 -:10CA600000000000000000000000000000000000C6 +:10CA600000000000000000000000000000000010B6 :10CA700000000000000000000000000000000000B6 :10CA800000000000000000000000000000000000A6 :10CA90000000000000000000000000000000000096 -:10CAA0000000000000210000000000000000000065 +:10CAA0000000000000000000000000000000000086 :10CAB0000000000000000000000000000000000076 :10CAC0000000000000000000000000000000000066 :10CAD0000000000000000000000000000000000056 @@ -44224,16 +44224,16 @@ :10CB400000000000000000000000000000000000E5 :10CB500000000000000000000000000000000000D5 :10CB600000000000000000000000000000000000C5 -:10CB70000000000000000000000000000000900025 -:10CB80000000004000000000000000000000000065 +:10CB700000000000000000000000000000000000B5 +:10CB800000000000000000000000000000000000A5 :10CB90000000000000000000000000000000000095 :10CBA0000000000000000000000000000000000085 :10CBB0000000000000000000000000000000000075 :10CBC0000000000000000000000000000000000065 :10CBD0000000000000000000000000000000000055 :10CBE0000000000000000000000000000000000045 -:10CBF0000000000000000000000000000000110024 -:10CC000080000000000000000000000000000000A4 +:10CBF0000000000000000000000000000000000035 +:10CC00000000000000000000000000000000000024 :10CC10000000000000000000000000000000000014 :10CC20000000000000000000000000000000000004 :10CC300000000000000000000000000000000000F4 @@ -44241,7 +44241,7 @@ :10CC500000000000000000000000000000000000D4 :10CC600000000000000000000000000000000000C4 :10CC700000000000000000000000000000000000B4 -:10CC800000000080000000800000000000000000A4 +:10CC800000000000000000000000000000000000A4 :10CC90000000000000000000000000000000000094 :10CCA0000000000000000000000000000000000084 :10CCB0000000000000000000000000000000000074 @@ -44249,7 +44249,7 @@ :10CCD0000000000000000000000000000000000054 :10CCE0000000000000000000000000000000000044 :10CCF0000000000000000000000000000000000034 -:10CD0000000000000020000000C000000000000043 +:10CD00000000000000000000000000000000000023 :10CD10000000000000000000000000000000000013 :10CD20000000000000000000000000000000000003 :10CD300000000000000000000000000000000000F3 @@ -44257,7 +44257,7 @@ :10CD500000000000000000000000000000000000D3 :10CD600000000000000000000000000000000000C3 :10CD700000000000000000000000000000000000B3 -:10CD80000000000001000088880001000000000091 +:10CD800000000000000000000000000000000000A3 :10CD90000000000000000000000000000000000093 :10CDA0000000000000000000000000000000000083 :10CDB0000000000000000000000000000000000073 @@ -44265,7 +44265,7 @@ :10CDD0000000000000000000000000000000000053 :10CDE0000000000000000000000000000000000043 :10CDF0000000000000000000000000000000000033 -:10CE00000000000000004100008000000900000058 +:10CE00000000000000000000000000000000000022 :10CE10000000000000000000000000000000000012 :10CE20000000000000000000000000000000000002 :10CE300000000000000000000000000000000000F2 @@ -44273,7 +44273,7 @@ :10CE500000000000000000000000000000000000D2 :10CE600000000000000000000000000000000000C2 :10CE700000000000000000000000000000000000B2 -:10CE80000000000000000000001100000080000011 +:10CE800000000000000000000000000000000000A2 :10CE90000000000000000000000000000000000092 :10CEA0000000000000000000000000000000000082 :10CEB0000000000000000000000000000000000072 @@ -44281,7 +44281,7 @@ :10CED0000000000000000000000000000000000052 :10CEE0000000000000000000000000000000000042 :10CEF0000000000000000000000000000000000032 -:10CF000000000000000000000000000100000040E0 +:10CF00000000000000000000000000000000000021 :10CF10000000000000000000000000000000000011 :10CF20000000000000000000000000000000000001 :10CF300000000000000000000000000000000000F1 @@ -44290,7 +44290,7 @@ :10CF600000000000000000000000000000000000C1 :10CF700000000000000000000000000000000000B1 :10CF800000000000000000000000000000000000A1 -:10CF900007008221000000000000000000000000E7 +:10CF90000000000000000000000000000000000091 :10CFA0000000000000000000000000000000000081 :10CFB0000000000000000000000000000000000071 :10CFC0000000000000000000000000000000000061 @@ -44298,7 +44298,7 @@ :10CFE0000000000000000000000000000000000041 :10CFF0000000000000000000000000000000000031 :10D000000000000000000000000000000000000020 -:10D0100000000000F0F00000000000000000000030 +:10D010000000000000000000000000000000000010 :10D020000000000000000000000000000000000000 :10D0300000000000000000000000000000000000F0 :10D0400000000000000000000000000000000000E0 @@ -44306,7 +44306,7 @@ :10D0600000000000000000000000000000000000C0 :10D0700000000000000000000000000000000000B0 :10D0800000000000000000000000000000000000A0 -:10D09000000000000000F0F00000000000000000B0 +:10D090000000000000000000000000000000000090 :10D0A0000000000000000000000000000000000080 :10D0B0000000000000000000000000000000000070 :10D0C0000000000000000000000000000000000060 @@ -44322,7 +44322,7 @@ :10D1600000000000000000000000000000000000BF :10D1700000000000000000000000000000000000AF :10D18000000000000000000000000000000000009F -:10D19000000000003C3C0000FFFF00000000000019 +:10D19000000000000000000000000000000000008F :10D1A000000000000000000000000000000000007F :10D1B000000000000000000000000000000000006F :10D1C000000000000000000000000000000000005F @@ -44330,7 +44330,7 @@ :10D1E000000000000000000000000000000000003F :10D1F000000000000000000000000000000000002F :10D20000000000000000000000000000000000001E -:10D210000000000000003C3C000000000000000096 +:10D21000000000000000000000000000000000000E :10D2200000000000000000000000000000000000FE :10D2300000000000000000000000000000000000EE :10D2400000000000000000000000000000000000DE @@ -44338,7 +44338,7 @@ :10D2600000000000000000000000000000000000BE :10D2700000000000000000000000000000000000AE :10D28000000000000000000000000000000000009E -:10D29000000000000000000005002A00054000A872 +:10D29000000000000000000000000000000000008E :10D2A000000000000000000000000000000000007E :10D2B000000000000000000000000000000000006E :10D2C000000000000000000000000000000000005E @@ -44380,43 +44380,43 @@ :10D50000000000000000000000000000000000001B :10D51000000000000000000000000000000000000B :10D5200000000000000000000000000000000000FB -:10D5300000000000000000000000000000000000EB +:10D5300004000000000000000000000000000000E7 :10D5400000000000000000000000000000000000DB :10D5500000000000000000000000000000000000CB :10D5600000000000000000000000000000000000BB :10D5700000000000000000000000000000000000AB :10D58000000000000000000000000000000000009B -:10D59000000000000000004000000000000000004B +:10D59000000000000000000000000000000000008B :10D5A000000000000000000000000000000000007B -:10D5B0000000000000000000000400040000000063 +:10D5B000000000000000000000000000000000006B :10D5C000000000000000000000000000000000005B -:10D5D000000000000000000000000000000000004B -:10D5E000000000000000000000000000000000003B +:10D5D000000020000000000000000000000000002B +:10D5E00000000000000000000040000000000000FB :10D5F000000000000000000000000000000000002B :10D60000000000000000000000000000000000001A :10D61000000000000000000000000000000000000A -:10D6200000000000000000000000000000000000FA -:10D6300000000000000000000000000000000000EA -:10D6400000000000000000000000000000000000DA +:10D6200000000010000000000000000000000000EA +:10D6300000000000004000000000000000000000AA +:10D6400000000010000000000000000000000000CA :10D6500000000000000000000000000000000000CA :10D6600000000000000000000000000000000000BA :10D6700000000000000000000000000000000000AA -:10D680000000000000000000040000000000000096 -:10D69000000000000000000000000000000000008A -:10D6A000000000000000000000000000000000007A -:10D6B0000400000000000000000000000000000066 -:10D6C000000000000000000000000000000000005A -:10D6D000000000000000000000000000000000004A -:10D6E000000000000000000000000000000000003A -:10D6F000000000000000000000000000000000002A -:10D700000000000000000000000000000000000019 -:10D710000000000000000000000000000000000009 -:10D7200000000000000000000000000000000000F9 -:10D7300000000000000000000000000000000000E9 -:10D7400000000000000000000000000000000000D9 -:10D7500000000000000000000000000000000000C9 -:10D7600000000000040000000000000000000000B5 -:10D7700000000000000000000000000000000000A9 +:10D68000000000000010000000000000000000008A +:10D6900000000000001000000084000000000008EE +:10D6A0000000000000040000000800000000000866 +:10D6B0000000000000080008008400000000008452 +:10D6C00000000000000000000084000000000008CE +:10D6D000000000000008000800000000000000003A +:10D6E00000000000000000000084000000000000B6 +:10D6F000000800000000001000080000000000000A +:10D700000000000000000000001000000000000009 +:10D7100000080000000000000040000000000000C1 +:10D7200000000000000000000000002100000000D8 +:10D7300000000000000000000000000300000000E6 +:10D7400000000000000000000000000300000000D6 +:10D7500000050000000000000000000000030000C1 +:10D7600000000000000000000000000000000000B9 +:10D770000000000000000000000000100000000099 :10D780000000000000000000000000000000000099 :10D790000000000000000000000000000000000089 :10D7A0000000000000000000000000000000000079 @@ -44435,7 +44435,7 @@ :10D8700000000000000000000000000000000000A8 :10D880000000000000000000000000000000000098 :10D890000000000000000000000000000000000088 -:10D8A0000000000000000000000000000000000078 +:10D8A0000000000000000000000000000000001068 :10D8B0000000000000000000000000000000000068 :10D8C0000000000000000000000000000000000058 :10D8D0000000000000000000000000000000000048 @@ -44444,32 +44444,32 @@ :10D900000000000000000000000000000000000017 :10D910000000000000000000000000000000000007 :10D9200000000000000000000000000000000000F7 -:10D9300000000800000000000000000000000000DF +:10D9300000000000000000000000000000000000E7 :10D9400000000000000000000000000000000000D7 -:10D9500000000000000000000000000000000000C7 -:10D9600000000000000000000000000000000000B7 -:10D9700000000000000000000000000000000000A7 +:10D9500000080000000000000000000000000000BF +:10D9600000100000000000000000000000000000A7 +:10D97000000000080000000000000000000000009F :10D980000000000000000000000000000000000097 :10D990000000000000000000000000000000000087 :10D9A0000000000000000000000000000000000077 -:10D9B00000000000000000000000008400000000E3 +:10D9B0000000000000000000000000000000000067 :10D9C0000000000000000000000000000000000057 :10D9D0000000000000000000000000000000000047 :10D9E0000000000000000000000000000000000037 :10D9F0000000000000000000000000000000000027 :10DA00000000000000000000000000000000000016 :10DA10000000000000000000000000000000000006 -:10DA200000000000000000000000000000000000F6 +:10DA200000000000000000080000000000000000EE :10DA300000000000000000000000000000000000E6 -:10DA400000000000000200000000000000000000D4 +:10DA400000000000000000000000000000000000D6 :10DA500000000000000000000000000000000000C6 -:10DA600000000000000000000000000000000000B6 +:10DA60000000000000400000000000000000000076 :10DA700000000000000000000000000000000000A6 :10DA80000000000000000000000000000000000096 :10DA90000000000000000000000000000000000086 :10DAA0000000000000000000000000000000000076 :10DAB0000000000000000000000000000000000066 -:10DAC0000000000000004100000000000000000015 +:10DAC0000000000000000000000000000000000056 :10DAD0000000000000000000000000000000000046 :10DAE0000000000000000000000000000000000036 :10DAF0000000000000000000000000000000000026 @@ -44621,39 +44621,39 @@ :10E4100000000000000000000000000000000000FC :10E4200000000000000000000000000000000000EC :10E4300000000000000000000000000000000000DC -:10E4400000000000000000000000000000002000AC -:10E4500000000000000000000000000000000000BC -:10E4600000000000000000000000000000040000A8 +:10E4400000000000000000000000000000000000CC +:10E4500000000000000000000000000000040000B8 +:10E4600000000000000000000000000000000000AC :10E47000000000000000000000000000000000009C -:10E48000000000000000000000000100000000018A -:10E49000000000000000000000000000020000007A +:10E48000000000000000000000000000000000008C +:10E49000000000000000000000000000000000007C :10E4A000000000000000000000000000000000006C -:10E4B000000000000000000000000000200000003C +:10E4B000000000000000000000000000000000005C :10E4C000000000000000000000000000000000004C :10E4D000000000000000000000000000000000003C -:10E4E000000000000000000000000000000010001C -:10E4F000000000000000000000000000000000021A -:10E5000000020000000000000000000010000000F9 -:10E5100000000000000000000000000000000002F9 -:10E5200000020002000000000000000000000000E7 +:10E4E000000000000000000000000000000000002C +:10E4F00000000000000000004000000000000000DC +:10E50000000000000000000000000000000000000B +:10E5100000000000000000000000000000000000FB +:10E5200000000000000000000000000000000000EB :10E5300000000000000000000000000000000000DB :10E5400000000000000000000000000000000000CB :10E5500000000000000000000000000000000000BB -:10E5600002000200000000000000020000000000A5 +:10E5600000000000000000000000000000000000AB :10E57000000000000000000000000000000000009B -:10E580000000000000000000020001000100000087 -:10E59000010000000000000000000000000000007A +:10E58000000000000000000000000000000000008B +:10E59000000000000000000000000000000000007B :10E5A000000000000000000000000000000000006B :10E5B000000000000000000000000000000000005B -:10E5C0000000000000000000000000000200000049 -:10E5D000000000000000000000000000000000003B -:10E5E000040000000400000000000000040000001F -:10E5F0000000000004000000000000000000000017 -:10E6000000000000000000000400000010001000E6 -:10E6100000001000000000000000000000000000EA -:10E6200000000000000000000000000000000000EA -:10E6300000000000000000000400000000000400D2 -:10E6400004000000000000000000000000000000C6 +:10E5C000000000000000000000000000000000004B +:10E5D00000000000000000000000008800000000B3 +:10E5E0000000000000000000000000080000000023 +:10E5F000000000000000000000000000000000001B +:10E600000000000000000000000000080000000002 +:10E6100000000000000000000000000000000000FA +:10E6200000000000000000000000000000080000E2 +:10E6300000000000000000000000000000000000DA +:10E6400000000000000000000000000000100000BA :10E6500000000000000000000000000000000000BA :10E6600000000000000000000000000000000000AA :10E67000000000000000000000000000000000009A @@ -44672,23 +44672,23 @@ :10E7400000000000000000000000000000000000C9 :10E7500000000000000000000000000000000000B9 :10E7600000000000000000000000000000000000A9 -:10E770000000A00000009000000008000000000061 -:10E780000000820000008200C000000000000000C5 -:10E790000000000000000000010000000000000078 +:10E770000000000000000000000000000000000099 +:10E780000000000000000000000000000000000089 +:10E790000000000000000000000000000000000079 :10E7A0000000000000000000000000000000000069 -:10E7B0000000000000400000000000000000000019 +:10E7B0000000000000000000000000000000000059 :10E7C0000000000000000000000000000000000049 :10E7D0000000000000000000000000000000000039 :10E7E0000000000000000000000000000000000029 :10E7F0000000000000000000000000000000000019 :10E800000000000000000000000000000000000008 -:10E8100000000000000000000000200000000000D8 +:10E8100000000000000000000000000000000000F8 :10E8200000000000000000000000000000000000E8 :10E8300000000000000000000000000000000000D8 :10E8400000000000000000000000000000000000C8 :10E8500000000000000000000000000000000000B8 :10E8600000000000000000000000000000000000A8 -:10E870000000000000000000000000000000A000F8 +:10E870000000000000000000000000000000000098 :10E880000000000000000000000000000000000088 :10E890000000000000000000000000000000000078 :10E8A0000000000000000000000000000000000068 @@ -44704,9 +44704,9 @@ :10E9400000000000000000000000000000000000C7 :10E9500000000000000000000000000000000000B7 :10E9600000000000000000000000000000000000A7 -:10E970000000080000000000000008000000000087 +:10E970000000000000000000000000000000000097 :10E980000000000000000000000000000000000087 -:10E9900000008200000000000000000000000000F5 +:10E990000000000000000000000000000000000077 :10E9A0000000000000000000000000000000000067 :10E9B0000000000000000000000000000000000057 :10E9C0000000000000000000000000000000000047 @@ -44722,7 +44722,7 @@ :10EA600000000000000000000000000000000000A6 :10EA70000000000000000000000000000000000096 :10EA80000000000000000000000000000000000086 -:10EA90000000000000000000000000000000010075 +:10EA90000000000000000000000000000000000076 :10EAA0000000000000000000000000000000000066 :10EAB0000000000000000000000000000000000056 :10EAC0000000000000000000000000000000000046 @@ -44731,7 +44731,7 @@ :10EAF0000000000000000000000000000000000016 :10EB00000000000000000000000000000000000005 :10EB100000000000000000000000000000000000F5 -:10EB200011000021000000000000000000000000B3 +:10EB200000000000000000000000000000000000E5 :10EB300000000000000000000000000000000000D5 :10EB400000000000000000000000000000000000C5 :10EB500000000000000000000000000000000000B5 @@ -44739,7 +44739,7 @@ :10EB70000000000000000000000000000000000095 :10EB80000000000000000000000000000000000085 :10EB90000000000000000000000000000000000075 -:10EBA00000000040000011400000000000000000D4 +:10EBA0000000000000000000000000000000000065 :10EBB0000000000000000000000000000000000055 :10EBC0000000000000000000000000000000000045 :10EBD0000000000000000000000000000000000035 @@ -44747,7 +44747,7 @@ :10EBF0000000000000000000000000000000000015 :10EC00000000000000000000000000000000000004 :10EC100000000000000000000000000000000000F4 -:10EC200000000000000000000100000000000000E3 +:10EC200000000000000000000000000000000000E4 :10EC300000000000000000000000000000000000D4 :10EC400000000000000000000000000000000000C4 :10EC500000000000000000000000000000000000B4 @@ -44755,7 +44755,7 @@ :10EC70000000000000000000000000000000000094 :10EC80000000000000000000000000000000000084 :10EC90000000000000000000000000000000000074 -:10ECA0000000000000000000200000010000000043 +:10ECA0000000000000000000000000000000000064 :10ECB0000000000000000000000000000000000054 :10ECC0000000000000000000000000000000000044 :10ECD0000000000000000000000000000000000034 @@ -44763,7 +44763,7 @@ :10ECF0000000000000000000000000000000000014 :10ED00000000000000000000000000000000000003 :10ED100000000000000000000000000000000000F3 -:10ED2000000000000000000000008000000840001B +:10ED200000000000000000000000000000000000E3 :10ED300000000000000000000000000000000000D3 :10ED400000000000000000000000000000000000C3 :10ED500000000000000000000000000000000000B3 @@ -44771,7 +44771,7 @@ :10ED70000000000000000000000000000000000093 :10ED80000000000000000000000000000000000083 :10ED90000000000000000000000000000000000073 -:10EDA000000000000000000000000005110000004D +:10EDA0000000000000000000000000000000000063 :10EDB0000000000000000000000000000000000053 :10EDC0000000000000000000000000000000000043 :10EDD0000000000000000000000000000000000033 @@ -44779,7 +44779,7 @@ :10EDF0000000000000000000000000000000000013 :10EE00000000000000000000000000000000000002 :10EE100000000000000000000000000000000000F2 -:10EE200000000000000000000000000000000100E1 +:10EE200000000000000000000000000000000000E2 :10EE300000000000000000000000000000000000D2 :10EE400000000000000000000000000000000000C2 :10EE500000000000000000000000000000000000B2 @@ -44788,7 +44788,7 @@ :10EE80000000000000000000000000000000000082 :10EE90000000000000000000000000000000000072 :10EEA0000000000000000000000000000000000062 -:10EEB00000E0000000000000000000000000000072 +:10EEB0000000000000000000000000000000000052 :10EEC0000000000000000000000000000000000042 :10EED0000000000000000000000000000000000032 :10EEE0000000000000000000000000000000000022 @@ -44836,7 +44836,7 @@ :10F18000000000000000000000000000000000007F :10F19000000000000000000000000000000000006F :10F1A000000000000000000000000000000000005F -:10F1B0000000000000000000000000000006000C3D +:10F1B000000000000000000000000000000000004F :10F1C000000000000000000000000000000000003F :10F1D000000000000000000000000000000000002F :10F1E000000000000000000000000000000000001F @@ -44844,8 +44844,8 @@ :10F2000000000000000000000000000000000000FE :10F2100000000000000000000000000000000000EE :10F2200000000000000000000000000000000000DE -:10F230000000000000000000000000000000FF00CF -:10F2400000FF0000000000000000000000000000BF +:10F2300000000000000000000000000000000000CE +:10F2400000000000000000000000000000000000BE :10F2500000000000000000000000000000000000AE :10F26000000000000000000000000000000000009E :10F27000000000000000000000000000000000008E @@ -44853,7 +44853,7 @@ :10F29000000000000000000000000000000000006E :10F2A000000000000000000000000000000000005E :10F2B000000000000000000000000000000000004E -:10F2C000FF0000FF00000000000000000000000040 +:10F2C000000000000000000000000000000000003E :10F2D000000000000000000000000000000000002E :10F2E000000000000000000000000000000000001E :10F2F000000000000000000000000000000000000E @@ -44861,7 +44861,7 @@ :10F3100000000000000000000000000000000000ED :10F3200000000000000000000000000000000000DD :10F3300000000000000000000000000000000000CD -:10F340000000FF0000FF00000000000000000000BF +:10F3400000000000000000000000000000000000BD :10F3500000000000000000000000000000000000AD :10F36000000000000000000000000000000000009D :10F37000000000000000000000000000000000008D @@ -44869,15 +44869,15 @@ :10F39000000000000000000000000000000000006D :10F3A000000000000000000000000000000000005D :10F3B000000000000000000000000000000000004D -:10F3C00000000000FF0000FF00000000000000003F +:10F3C000000000000000000000000000000000003D :10F3D000000000000000000000000000000000002D :10F3E000000000000000000000000000000000001D :10F3F000000000000000000000000000000000000D :10F4000000000000000000000000000000000000FC :10F4100000000000000000000000000000000000EC -:10F4200000000000000000000000000000000000DC +:10F4200000000000000000000004000000000000D8 :10F4300000000000000000000000000000000000CC -:10F4400000040004000000000000000000000000B4 +:10F4400000000000000000000000000000000000BC :10F4500000000000000000000000000000000000AC :10F46000000000000000000000000000000000009C :10F47000000000000000000000000000000000008C @@ -44886,35 +44886,35 @@ :10F4A000000000000000000000000000000000005C :10F4B000000000000000000000000000000000004C :10F4C000000000000000000000000000000000003C -:10F4D000000000000000000000000000000000002C -:10F4E0000002000200000000000000000000000018 +:10F4D00000000000400000000000000000000000EC +:10F4E000000000000000000000000000000000001C :10F4F000000000000000000000000000000000000C :10F5000000000000000000000000000000000000FB -:10F5100000000000000000000000000000000200E9 +:10F5100000000000000000000000000000000010DB :10F5200000000000000000000000000000000000DB :10F5300000000000000000000000000000000000CB :10F5400000000000000000000000000000000000BB :10F5500000000000000000000000000000000000AB -:10F56000000000000000000000000000000000009B -:10F57000000000000000000000000000000000008B +:10F56000000000000000000000000000000000108B +:10F57000000000000000000000000000000000107B :10F58000000000000000000000000000000000007B :10F59000000000000000000000000000000000006B -:10F5A000000000000000000000000000000000005B -:10F5B0000000000000000000000004000000000047 -:10F5C000000000000000000000000000000000003B -:10F5D000000000000000000000000000000000002B -:10F5E000000000000000000000000000000000001B -:10F5F000000000000000000000000000000000000B -:10F6000000000000000000000000000000000000FA -:10F6100000000000000000000000000000000000EA +:10F5A0000008000000000000000000000000001043 +:10F5B000000800000000000000080000000000003B +:10F5C0000008000000000000000000000000000033 +:10F5D000000800000000000000000084000000009F +:10F5E0000000000800000000000000000000000013 +:10F5F0000000008400000000000000000000000087 +:10F600000000008400000000000000000000000076 +:10F6100000000008000000000000000000000000E2 :10F6200000000000000000000000000000000000DA :10F6300000000000000000000000000000000000CA :10F6400000000000000000000000000000000000BA :10F6500000000000000000000000000000000000AA -:10F66000000000000000000000000000000000009A +:10F660000000000000000000000000000005000095 :10F67000000000000000000000000000000000008A -:10F68000000000000000000000000000000000007A -:10F69000000000000000000000000000000000006A +:10F680000000000000080000000000000000000072 +:10F69000000000000010000000000000000000005A :10F6A000000000000000000000000000000000005A :10F6B000000000000000000000000000000000004A :10F6C000000000000000000000000000000000003A @@ -44939,7 +44939,7 @@ :10F7F0000000000000000000000000000000000009 :10F8000000000000000000000000000000000000F8 :10F8100000000000000000000000000000000000E8 -:10F8200000000000000000000000000000000000D8 +:10F8200000000008000000000000000000000000D0 :10F8300000000000000000000000000000000000C8 :10F8400000000000000000000000000000000000B8 :10F8500000000000000000000000000000000000A8 @@ -44950,7 +44950,7 @@ :10F8A0000000000000000000000000000000000058 :10F8B0000000000000000000000000000000000048 :10F8C0000000000000000000000000000000000038 -:10F8D00000000000000000000000000000840000A4 +:10F8D0000000000000000000000000000000000028 :10F8E0000000000000000000000000000000000018 :10F8F0000000000000000000000000000000000008 :10F9000000000000000000000000000000000000F7 @@ -44959,9 +44959,9 @@ :10F9300000000000000000000000000000000000C7 :10F9400000000000000000000000000000000000B7 :10F9500000000000000000000000000000000000A7 -:10F960000000000000000000000200000000000095 +:10F960000000000000000000000000000000000097 :10F970000000000000000000000000000000000087 -:10F980000000000000000000000000000000000077 +:10F98000000800000000000000000000000000006F :10F990000000000000000000000000000000000067 :10F9A0000000000000000000000000000000000057 :10F9B0000000000000000000000000000000000047 @@ -45119,38 +45119,38 @@ :1003200000000000000000000000000000000000CD :1003300000000000000000000000000000000000BD :1003400000000000000000000000000000000000AD -:100350000000000000040000000000000000000099 -:100360000000000000000000040000000000000089 -:100370000000000000000004000000000000000079 +:10035000000000000000000000000000000000009D +:100360000000000000000004000000000000000089 +:10037000000000000000000000000000000000007D :10038000000000000000000000000000000000006D :10039000000000000000000000000000000000005D :1003A000000000000000000000000000000000004D :1003B000000000000000000000000000000000003D -:1003C000000000000000000000000000000200002B +:1003C000000000000000000000000000000000002D :1003D000000000000000000000000000000000001D -:1003E000000000000000000200000000000000000B -:1003F00000020000000000000004000000000000F7 -:1004000000020040000000000002000000000000A8 -:1004100000020002000200020002000000020002CE -:1004200000020002000000000000000000000000C8 +:1003E00000004000000000000000000000000000CD +:1003F00000000000000000000000000000000000FD +:1004000000000000000000000000000000000000EC +:1004100000000000000000000000000000000000DC +:1004200000000000000000000000000000000000CC :1004300000000000000000000000000000000000BC :1004400000000000000000000000000000000000AC :10045000000000000000000000000000000000009C :10046000000000000000000000000000000000008C -:10047000000000000200000000000000000000007A -:10048000000000000200000000000000000000006A +:10047000000000000000000000000000000000007C +:10048000000000000000000000000000000000006C :10049000000000000000000000000000000000005C :1004A000000000000000000000000000000000004C -:1004B000000000000000020000000000000000003A +:1004B000000000000000000000000000000000003C :1004C000000000000000000000000000000000002C -:1004D000000000000000020000000000000000001A -:1004E0000000000000000000000004000000000008 -:1004F00000000000000004000000000000000400F4 +:1004D000000000000000000000000000000000001C +:1004E000000000000000000000000000000000000C +:1004F00000000000000000000000000000000000FC :1005000000000000000000000000000000000000EB -:1005100000000000040000000400040000000400CB -:1005200009000000000000000200000000000000C0 +:1005100000000000000000000000000000000000DB +:1005200000000000000000000000000000000000CB :1005300000000000000000000000000000000000BB -:10054000000004000000000004000400000000009F +:1005400000000000000000000000000000000000AB :10055000000000000000000000000000000000009B :10056000000000000000000000000000000000008B :10057000000000000000000000000000000000007B @@ -45170,11 +45170,11 @@ :10065000000000000000000000000000000000009A :10066000000000000000000000000000000000008A :10067000000000000000000000000000000000007A -:10068000000000000000000000000000000000402A -:100690000000000000000800000000000000000052 +:10068000000000000000000000000000000000006A +:10069000000000000000000000000000000000005A :1006A000000000000000000000000000000000004A -:1006B000000000000000000000000000000000003A -:1006C00000000000000000400000000000000000EA +:1006B00000000000000500000000000000400000F5 +:1006C000000000000000000000000000000000002A :1006D000000000000000000000000000000000001A :1006E000000000000000000000000000000000000A :1006F00000000000000000000000000000000000FA @@ -45206,14 +45206,14 @@ :100890000000000000000000000000000000000058 :1008A0000000000000000000000000000000000048 :1008B0000000000000000000000000000000000038 -:1008C0000000000000000000000000000000000028 +:1008C00000000000004000000000000000000000E8 :1008D0000000000000000000000000000000000018 :1008E0000000000000000000000000000000000008 :1008F00000000000000000000000000000000000F8 :1009000000000000000000000000000000000000E7 :1009100000000000000000000000000000000000D7 :1009200000000000000000000000000000000000C7 -:100930000000000000000000200000000000000097 +:1009300000000000000000000000000000000000B7 :1009400000000000000000000000000000000000A7 :100950000000000000000000000000000000000097 :100960000000000000000000000000000000000087 @@ -45373,17 +45373,17 @@ :1013000000000000000000000000000000000000DD :1013100000000000000000000000000000000000CD :1013200000000000000000000000000000000000BD -:1013300000000000000000000000000000000000AD -:101340000000000000000002000000000004000493 +:1013300000000004000000000000000000000000A9 +:10134000000000000000000000000000000000009D :10135000000000000000000000000000000000008D :10136000000000000000000000000000000000007D :10137000000000000000000000000000000000006D :10138000000000000000000000000000000000005D :10139000000000000000000000000000000000004D :1013A000000000000000000000000000000000003D -:1013B000000000000000000000000000000000002D +:1013B00000000000000000000000000040000000ED :1013C000000000000000000000000000000000001D -:1013D000000200000000000000000000000000000B +:1013D000000000000000000000000000000000000D :1013E00000000000000000000000000000000000FD :1013F00000000000000000000000000000000000ED :1014000000000000000000000000000000000000DC @@ -45392,15 +45392,15 @@ :1014300000000000000000000000000000000000AC :10144000000000000000000000000000000000009C :10145000000000000000000000000000000000008C -:10146000000000000100000000000000000000007B +:10146000000000000000000000000000000000007C :10147000000000000000000000000000000000006C :10148000000000000000000000000000000000005C -:10149000000000000000000000000000000000004C -:1014A000000000000000000000000000000000003C -:1014B000000000000000000000000000000000002C -:1014C0000000000004000000000000000000000018 -:1014D000000000000000000000000000000000000C -:1014E00000000000000002000000000000000000FA +:101490000000000000000000000800000000000044 +:1014A0000000000000000000000800000000000034 +:1014B0000000000000000000000800000000000024 +:1014C0000000000000000000000800000000000014 +:1014D00000000000000000000000001000000000FC +:1014E00000000000000000000000001000000000EC :1014F00000000000000000000000000000000000EC :1015000000000000000000000000000000000000DB :1015100000000000000000000000000000000000CB @@ -45425,15 +45425,15 @@ :10164000000000000000000000000000000000009A :10165000000000000000000000000000000000008A :10166000000000000000000000000000000000007A -:101670000000010000000000000000000000000069 -:10168000000000000040000000000000000000001A +:10167000000000000000000000000000000000006A +:10168000000000000000000000000000000000005A :10169000000000000000000000000000000000004A :1016A000000000000000000000000000000000003A :1016B000000000000000000000000000000000002A :1016C000000000000000000000000000000000001A :1016D000000000000000000000000000000000000A :1016E00000000000000000000000000000000000FA -:1016F00000000000040000000000000000000000E6 +:1016F00000000000000000000000000000000000EA :1017000000000000000000000000000000000000D9 :1017100000000000000000000000000000000000C9 :1017200000000000000000000000000000000000B9 @@ -45441,7 +45441,7 @@ :101740000000000000000000000000000000000099 :101750000000000000000000000000000000000089 :101760000000000000000000000000000000000079 -:101770000000000000200000000000000000000049 +:101770000000000000000000000000000000000069 :101780000000000000000000000000000000000059 :101790000000000000000000000000000000000049 :1017A0000000000000000000000000000000000039 @@ -45449,7 +45449,7 @@ :1017C0000000000000000000000000000000000019 :1017D0000000000000000000000000000000000009 :1017E00000000000000000000000000000000000F9 -:1017F00000000000000000010000000000000000E8 +:1017F00000000000000000000000000000000000E9 :1018000000000000000000000000000000000000D8 :1018100000000000000000000000000000000000C8 :1018200000000000000000000000000000000000B8 @@ -45473,7 +45473,7 @@ :101940000000000000000000000000000000000097 :101950000000000000000000000000000000000087 :101960000000000000000000000000000000000077 -:10197000000000000000000000009000000000A037 +:101970000000000000000000000000000000000067 :101980000000000000000000000000000000000057 :101990000000000000000000000000000000000047 :1019A0000000000000000000000000000000000037 @@ -45481,7 +45481,7 @@ :1019C0000000000000000000000000000000000017 :1019D0000000000000000000000000000000000007 :1019E00000000000000000000000000000000000F7 -:1019F0000000000000000000000011008000000056 +:1019F00000000000000000000000000000000000E7 :101A000000000000000000000000000000000000D6 :101A100000000000000000000000000000000000C6 :101A200000000000000000000000000000000000B6 @@ -45489,8 +45489,8 @@ :101A40000000000000000000000000000000000096 :101A50000000000000000000000000000000000086 :101A60000000000000000000000000000000000076 -:101A700000000000000000000000000000000080E6 -:101A800000000080000000000000000000000000D6 +:101A70000000000000000000000000000000000066 +:101A80000000000000000000000000000000000056 :101A90000000000000000000000000000000000046 :101AA0000000000000000000000000000000000036 :101AB0000000000000000000000000000000000026 @@ -45498,7 +45498,7 @@ :101AD0000000000000000000000000000000000006 :101AE00000000000000000000000000000000000F6 :101AF00000000000000000000000000000000000E6 -:101B00000020000000C000000000000000000000F5 +:101B000000000000000000000000000000000000D5 :101B100000000000000000000000000000000000C5 :101B200000000000000000000000000000000000B5 :101B300000000000000000000000000000000000A5 @@ -45506,7 +45506,7 @@ :101B50000000000000000000000000000000000085 :101B60000000000000000000000000000000000075 :101B70000000000000000000000000000000000065 -:101B80000100008888000100000000000000000043 +:101B80000000000000000000000000000000000055 :101B90000000000000000000000000000000000045 :101BA0000000000000000000000000000000000035 :101BB0000000000000000000000000000000000025 @@ -45514,7 +45514,7 @@ :101BD0000000000000000000000000000000000005 :101BE00000000000000000000000000000000000F5 :101BF00000000000000000000000000000000000E5 -:101C0000000041000080000009000000000000000A +:101C000000000000000000000000000000000000D4 :101C100000000000000000000000000000000000C4 :101C200000000000000000000000000000000000B4 :101C300000000000000000000000000000000000A4 @@ -45522,7 +45522,7 @@ :101C50000000000000000000000000000000000084 :101C60000000000000000000000000000000000074 :101C70000000000000000000000000000000000064 -:101C800000000000001100000080000000000000C3 +:101C80000000000000000000000000000000000054 :101C90000000000000000000000000000000000044 :101CA0000000000000000000000000000000000034 :101CB0000000000000000000000000000000000024 @@ -45530,7 +45530,7 @@ :101CD0000000000000000000000000000000000004 :101CE00000000000000000000000000000000000F4 :101CF00000000000000000000000000000000000E4 -:101D00000000000000000001000000400000000092 +:101D000000000000000000000000000000000000D3 :101D100000000000000000000000000000000000C3 :101D200000000000000000000000000000000000B3 :101D300000000000000000000000000000000000A3 @@ -45538,7 +45538,7 @@ :101D50000000000000000000000000000000000083 :101D60000000000000000000000000000000000073 :101D70000000000000000000000000000000000063 -:101D800000000000000000000000000007008221A9 +:101D80000000000000000000000000000000000053 :101D90000000000000000000000000000000000043 :101DA0000000000000000000000000000000000033 :101DB0000000000000000000000000000000000023 @@ -45546,7 +45546,7 @@ :101DD0000000000000000000000000000000000003 :101DE00000000000000000000000000000000000F3 :101DF00000000000000000000000000000000000E3 -:101E00000000000000000000000000000000F0F0F2 +:101E000000000000000000000000000000000000D2 :101E100000000000000000000000000000000000C2 :101E200000000000000000000000000000000000B2 :101E300000000000000000000000000000000000A2 @@ -45555,7 +45555,7 @@ :101E60000000000000000000000000000000000072 :101E70000000000000000000000000000000000062 :101E80000000000000000000000000000000000052 -:101E9000F0F0000000000000000000000000000062 +:101E90000000000000000000000000000000000042 :101EA0000000000000000000000000000000000032 :101EB0000000000000000000000000000000000022 :101EC0000000000000000000000000000000000012 @@ -45563,7 +45563,7 @@ :101EE00000000000000000000000000000000000F2 :101EF00000000000000000000000000000000000E2 :101F000000000000000000000000000000000000D1 -:101F10003C3C0000FFFF000000000000000000004B +:101F100000000000000000000000000000000000C1 :101F200000000000000000000000000000000000B1 :101F300000000000000000000000000000000000A1 :101F40000000000000000000000000000000000091 @@ -45571,7 +45571,7 @@ :101F60000000000000000000000000000000000071 :101F70000000000000000000000000000000000061 :101F80000000000000000000000000000000000051 -:101F900000003C3C000000000000000000000000C9 +:101F90000000000000000000000000000000000041 :101FA0000000000000000000000000000000000031 :101FB0000000000000000000000000000000000021 :101FC0000000000000000000000000000000000011 @@ -45579,7 +45579,7 @@ :101FE00000000000000000000000000000000000F1 :101FF00000000000000000000000000000000000E1 :1020000000000000000000000000000000000000D0 -:10201000000005002A00054000A8000000000000A4 +:1020100000000000000000000000000000000000C0 :1020200000000000000000000000000000000000B0 :1020300000000000000000000000000000000000A0 :102040000000000000000000000000000000000090 @@ -45615,120 +45615,120 @@ :1022200000000000000000000000000000000000AE :10223000000000000000000000000000000000009E :10224000000000000000000000000000000000008E -:10225000000000000000000020000000000000045A +:10225000000000000000000000000000000000007E :10226000000000000000000000000000000000006E -:10227000000000000000000020000000000000003E -:10228000000200000000000000000000000000004C -:10229000000000000000000000002000000000001E +:10227000000200000000000000000000000000005C +:10228000000000010000000000000000000000004D +:10229000000000000000000000000000000000003E :1022A000000000000000000000000000000000002E -:1022B00000000000000000000000200000000000FE -:1022C000000000000000000000000000000000000E +:1022B000000000000000000000000000000000001E +:1022C00000000000000000000000000040000000CE :1022D00000000000000000000000000000000000FE -:1022E00000040000000000000000000000001000DA -:1022F000000000400002000000000000000000009C +:1022E00000000000000000000000000000000000EE +:1022F00000000000000000000000000000000000DE :1023000000000000000000000000000000000000CD -:1023100000000002000200020000000000000000B7 +:1023100000000000000000000000000000000000BD :1023200000000000000000000000000000000000AD :10233000000000000000000000000000000000009D -:102340000000000000000000000000000000040089 -:10235000000000000200000000000000000000007B +:10234000000000000000008001800080008000800C +:10235000000000000000000000000000000000007D :10236000000000000000000000000000000000006D -:102370000000040000000000000000000200000057 +:10237000000000000000000000000000000000005D :10238000000000000000000000000000000000004D -:102390000000000000000000000000000400000039 -:1023A0000000000000000400000000000000000029 +:10239000000000000000000000000000000000003D +:1023A00000000000000000410000000000000000EC :1023B000000000000000000000000000000000001D -:1023C0000000000000000000040000000000000009 -:1023D00000000000000000000000000000000000FD -:1023E00004000000000000000000000000000000E9 -:1023F00000000000000000000000000000000000DD -:1024000004000000000000000000040000000000C4 +:1023C000000000000000000000400240004000400B +:1023D00000400000000000080000000000000000B5 +:1023E00000000000000000080000000000000000E5 +:1023F00000000082000000840000000000000000D7 +:1024000000000000000000020000000000000000CA :1024100000000000000000000000000000000000BC -:1024200000000400040000000000000000000000A4 +:1024200000000000000000000002000000000000AA :10243000000000000000000000000000000000009C -:10244000000000000000000000000000000000008C -:10245000000000000000000000000000000000007C +:102440000000000000000000000000000004000088 +:10245000000000000040000000000000000000003C :10246000000000000000000000000000000000006C :10247000000000000000000000000000000000005C -:10248000000000000000000000000000000000004C +:102480000000000000000000000800000000000044 :10249000000000000000000000000000000000003C :1024A000000000000000000000000000000000002C :1024B000000000000000000000000000000000001C -:1024C000000000000000000000000000000000000C -:1024D00000000000000000000000000000000000FC +:1024C000000000000000000000000000008200008A +:1024D0000000008200000001000000000000000079 :1024E00000000000000000000000000000000000EC :1024F00000000000000000000000000000000000DC :1025000000000000000000000000000000000000CB :1025100000000000000000000000000000000000BB :1025200000000000000000000000000000000000AB :10253000000000000000000000000000000000009B -:10254000000000000000000000000000000000008B -:10255000000000000000000000000000000000007B +:10254000000000000000000000000000000011007A +:102550000000010001020040004000400040000077 :10256000000000000000000000000000000000006B :10257000000000000000000000000000000000005B :10258000000000000000000000000000000000004B :10259000000000000000000000000000000000003B :1025A000000000000000000000000000000000002B -:1025B00000000000000000000020000000000000FB +:1025B000000000000000000000000000000000001B :1025C000000000000000000000000000000000000B -:1025D00000000000000000000000000000000000FB -:1025E00000000000000000000200000000000000E9 +:1025D0008200000002000200000100090001000169 +:1025E00000000000000000000000000000000000EB :1025F00000000000000000000000000000000000DB :1026000000000000000000000000000000000000CA :1026100000000000000000000000000000000000BA :1026200000000000000000000000000000000000AA :10263000000000000000000000000000000000009A :10264000000000000000000000000000000000008A -:10265000000000000000000000000000000000007A -:102660000000000000000000000008000000000062 +:1026500000000000100000002000004000000040CA +:10266000004000000000000000000000000000002A :10267000000000000000000000000000000000005A :10268000000000000000000000000000000000004A :10269000000000000000000000000000000000003A :1026A000000000000000000000000000000000002A :1026B000000000000000000000000000000000001A :1026C000000000000000000000000000000000000A -:1026D00000000000000000000000000000000000FA -:1026E00000000000000000000000000000000000EA +:1026D00000000000000080000000800000010000F9 +:1026E00000010001000000000000000000000000E8 :1026F00000000000000000000000000000000000DA :1027000000000000000000000000000000000000C9 :1027100000000000000000000000000000000000B9 :1027200000000000000000000000000000000000A9 -:102730000000000000840000000000000000000015 +:102730000000000000000000000000000000000099 :102740000000000000000000000000000000000089 -:102750000000000000000000000000000000000079 -:102760000000000000000000000000000000004029 +:102750000000000000000004000000000000000075 +:102760000000000000000000000000000000000069 :102770000000000000000000000000000000000059 :102780000000000000000000000000000000000049 :102790000000000000000000000000000000000039 :1027A0000000000000000000000000000000000029 -:1027B0000000000000000000000000000000000217 +:1027B0000000000000000000000000000000000019 :1027C0000000000000000000000000000000000009 -:1027D00000000000000000000000000200020000F5 -:1027E0000000000000000000028400000000000063 -:1027F0000000000000000000000000000000410098 +:1027D00000000000000000000001000000000000F8 +:1027E00000000000000000000000000000000000E9 +:1027F00000000000000000000000000000000000D9 :1028000000000000000000000000000000000000C8 -:102810000000200000000000000000000000000098 +:1028100000000000000000000000000000000000B8 :1028200000000000000000000000000000000000A8 -:102830000000000000000000000000200000000078 -:102840000000000000000000000020000000000068 -:102850000000020000000000000000000000000076 -:102860000000000000000000000000000000000068 +:102830000000000000000000200000000000000078 +:102840002000000000000000000000000000000068 +:102850000000000000000000000000C100001101A5 +:10286000880002C00000000200000000000000001C :102870000000000000000000000000000000000058 :102880000000000000000000000000000000000048 :102890000000000000000000000000000000000038 :1028A0000000000000000000000000000000000028 :1028B0000000000000000000000000000000000018 :1028C0000000000000000000000000000000000008 -:1028D00000000000000000000000000000000000F8 -:1028E00000000000000000000000000000000000E8 +:1028D00000000000000000000000000000C1110521 +:1028E0008209800580800000008000000000000058 :1028F00000000000000000000000000000000000D8 :1029000000000000000000000000000000000000C7 :1029100000000000000000000000000000000000B7 :1029200000000000000000000000000000000000A7 :102930000000000000000000000000000000000097 :102940000000000000000000000000000000000087 -:102950000000000000000000000000000000000077 -:102960000000000000000000000000000000000067 +:1029500000000000000000000000000000000280F5 +:1029600008008800C1050000000000008000000091 :102970000000000000000000000000000000000057 :102980000000000000000000000000000000000047 :102990000000000000000000000000000000000037 @@ -45736,7 +45736,7 @@ :1029B0000000000000000000000000000000000017 :1029C0000000000000000000000000000000000007 :1029D00000000000000000000000000000000000F7 -:1029E00000000000000000000000000000000000E7 +:1029E000018801009000C100000000000000C0004C :1029F00000000000000000000000000000000000D7 :102A000000000000000000000000000000000000C6 :102A100000000000000000000000000000000000B6 @@ -45744,23 +45744,23 @@ :102A30000000000000000000000000000000000096 :102A40000000000000000000000000000000000086 :102A50000000000000000000000000000000000076 -:102A60000000000000000000000000000000000066 -:102A70000000000000000000000000000000000056 +:102A6000000000010000000082C100000000000022 +:102A700000C0000000000000000000000000000096 :102A80000000000000000000000000000000000046 :102A90000000000000000000000000000000000036 :102AA0000000000000000000000000000000000026 :102AB0000000000000000000000000000000000016 :102AC0000000000000000000000000000000000006 :102AD00000000000000000000000000000000000F6 -:102AE00000000000000000000000000000000000E6 -:102AF00000000000000000000000000000000000D6 +:102AE0000000000000020808000080C10000000093 +:102AF0000000008000000000000000000000000056 :102B000000000000000000000000000000000000C5 :102B100000000000000000000000000000000000B5 :102B200000000000000000000000000000000000A5 :102B30000000000000000000000000000000000095 :102B40000000000000000000000000000000000085 :102B50000000000000000000000000000000000075 -:102B60000000000000000000000000000000000065 +:102B6000000000000000C140081180000911800031 :102B70000000000000000000000000000000000055 :102B80000000000000000000000000000000000045 :102B90000000000000000000000000000000000035 @@ -45768,15 +45768,15 @@ :102BB0000000000000000000000000000000000015 :102BC0000000000000000000000000000000000005 :102BD00000000000000000000000000000000000F5 -:102BE00000000000000000000000000000000000E5 -:102BF00000000000000000000000000000000000D5 +:102BE0000000000000000000C1000001880001009A +:102BF000C000004000004000000000000000000095 :102C000000000000000000000000000000000000C4 :102C100000000000000000000000000000000000B4 :102C200000000000000000000000000000000000A4 :102C30000000000000000000000000000000000094 :102C40000000000000000000000000000000000084 :102C50000000000000000000000000000000000074 -:102C60000000000000000000000000000000000064 +:102C600000000000000000000000810000E0000003 :102C70000000000000000000000000000000000054 :102C80000000000000000000000000000000000044 :102C90000000000000000000000000000000000034 @@ -45784,16 +45784,16 @@ :102CB0000000000000000000000000000000000014 :102CC0000000000000000000000000000000000004 :102CD00000000000000000000000000000000000F4 -:102CE00000000000000000000000000000000000E4 -:102CF00000000000000000000000000000000000D4 +:102CE000000000000000000000000000F0F0000004 +:102CF000FFFF00003C3C0000666600000000000092 :102D000000000000000000000000000000000000C3 :102D100000000000000000000000000000000000B3 :102D200000000000000000000000000000000000A3 :102D30000000000000000000000000000000000093 :102D40000000000000000000000000000000000083 :102D50000000000000000000000000000000000073 -:102D60000000000000000000000000000000000063 -:102D70000000000000000000000000000000000053 +:102D60000000000000000000000000000000F0F083 +:102D70000000000000003C3C00006666000000000F :102D80000000000000000000000000000000000043 :102D90000000000000000000000000000000000033 :102DA0000000000000000000000000000000000023 @@ -45809,31 +45809,31 @@ :102E40000000000000000000000000000000000082 :102E50000000000000000000000000000000000072 :102E60000000000000000000000000000000000062 -:102E70000000000000000000000000000000000052 -:102E80000000000000000000000000000000000042 +:102E7000000000006666000000FF00000F0FFFFF6B +:102E80009999000000000000000000000000000010 :102E90000000000000000000000000000000000032 :102EA0000000000000000000000000000000000022 :102EB0000000000000000000000000000000000012 :102EC0000000000000000000000000000000000002 :102ED00000000000000000000000000000000000F2 :102EE00000000000000000000000000000000000E2 -:102EF00000000000000000000000000000000000D2 -:102F000000000000000000000000000000000000C1 +:102EF0000000000000006666000000FF00000F0FE9 +:102F0000FFFF999900000000000000000000000091 :102F100000000000000000000000000000000000B1 :102F200000000000000000000000000000000000A1 :102F30000000000000000000000000000000000091 :102F40000000000000000000000000000000000081 :102F50000000000000000000000000000000000071 :102F60000000000000000000000000000000000061 -:102F70000000000000000000000000000000000051 -:102F80000000000000000000000000000000000041 +:102F70000000000000004082800180209202408218 +:102F8000800000208202000000000000000000001D :102F90000000000000000000000000000000000031 :102FA0000000000000000000000000000000000021 :102FB0000000000000000000000000000000000011 :102FC0000000000000000000000000000000000001 :102FD00000000000000000000000000000000000F1 :102FE00000000000000000000000000000000000E1 -:102FF00000000000000000000000000000000000D1 +:102FF00000000000000000000000000002020303C7 :1030000000000000000000000000000000000000C0 :1030100000000000000000000000000000000000B0 :1030200000000000000000000000000000000000A0 @@ -45841,7 +45841,7 @@ :103040000000000000000000000000000000000080 :103050000000000000000000000000000000000070 :103060000000000000000000000000000000000060 -:103070000000000000000000000000000000000050 +:1030700000000000000000000000003C00550202BB :103080000000000000000000000000000000000040 :103090000000000000000000000000000000000030 :1030A0000000000000000000000000000000000020 @@ -45849,16 +45849,16 @@ :1030C0000000000000000000000000000000000000 :1030D00000000000000000000000000000000000F0 :1030E00000000000000000000000000000000000E0 -:1030F00000000000000000000000000000000000D0 -:1031000000000000000000000000000000000000BF +:1030F000000000000000000000000000820002024A +:103100008200C0000000000000000000000000007D :1031100000000000000000000000000000000000AF :10312000000000000000000000000000000000009F :10313000000000000000000000000000000000008F :10314000000000000000000000000000000000007F :10315000000000000000000000000000000000006F :10316000000000000000000000000000000000005F -:10317000000000000000000000000000000000004F -:10318000000000000000000000000000000000003F +:1031700000000000000000000000000000008200CD +:1031800002028200C00000000000000000000000F9 :10319000000000000000000000000000000000002F :1031A000000000000000000000000000000000001F :1031B000000000000000000000000000000000000F @@ -45866,340 +45866,340 @@ :1031D00000000000000000000000000000000000EF :1031E00000000000000000000000000000000000DF :1031F00000000000000000000000000000000000CF -:10320000000000000000200000000000000000009E -:1032100000000000000000000000000000000000AE -:10322000000000000000200000000000000000007E -:10323000000000000000000000000000000000008E -:103240000003000000000000000004000000000077 -:103250000000008000800004000400000000000066 +:103200000000000000400000040000000400200056 +:10321000000000000000000088000000880000009E +:10322000000000000000000020000000200020003E +:10323000000000000000000000000000000400008A +:10324000000300000000000000002000000020003B +:10325000000000000000000000000000000000006E :10326000000000000000000000000000000000005E :10327000000000000000000000000000000000004E -:10328000000000000000000000000000000000003E +:10328000000000000000000100000000000000003D :10329000000000000000000000000000000000002E -:1032A000000000000000000000000000000000001E +:1032A00000000000000040000000000000000000DE :1032B000000000000000000000000000000000000E :1032C00000000000000000000000000000000000FE -:1032D00000000000000400040001000100000000E4 +:1032D00000000000000000000000000000000000EE :1032E00000000000000000000000000000000000DE :1032F00000000000000000000000000000000000CE -:10330000000000004000000000000000000000007D -:103310000000040000000000200020000000000069 -:10332000000000000000000000000000000000009D -:10333000000000000000000000000000000000008D -:10334000000000000000000000000000000000007D -:1033500000000000000020002000200020000000ED -:103360000000000000000000000000000000040059 -:103370000000000000000200020002000200000045 -:1033800000000000000080000000000000000000BD -:103390000000000000080000000080008000000025 -:1033A000000000000000000000000000000000001D -:1033B0000000000000080000000000000000000005 -:1033C00000000000000000000000000000000000FD -:1033D00000000000000000088000800080008000E5 -:1033E00000000000000000000000000000000000DD -:1033F00000000000000000088000800080008000C5 -:1034000000000000000000000000000000000000BC -:1034100000000000000000000000000000000000AC -:10342000000000000000000000000000000000009C -:10343000000000000000000000000000000000008C -:10344000000000000000000000000000000000007C -:10345000000000000000000000000000000000006C +:1033000000000000000000000000000000000000BD +:1033100000000000000000000000000000000000AD +:103320000000000000000008000000000080008095 +:103330000080008000880000000000800080008085 +:1033400000800080000000800080008000800080FD +:1033500000800080008000800080008000800000ED +:10336000000000000000004000400040004000401D +:1033700000400000008000400080008000400040CD +:10338000004000400040000000000000000000007D +:10339000000000000000000000000000000000002D +:1033A00000000000000000000000000000000040DD +:1033B0000040004000400040000000080040004085 +:1033C000004000400040000000400040004000403D +:1033D00000400040004000400040004000400040ED +:1033E00000000000000000000001000100010001D9 +:1033F0000001000100000040000100400040000109 +:1034000000010001000100010000000000000000B8 +:103410000000000000000000000800030003000896 +:1034200000210021002100080008002100080008F8 +:1034300000080008000800080000008800000000E4 +:10344000000000000021000000000000000000005B +:103450000000000000000009000000000000000063 :10346000000000000000000000000000000000005C -:10347000000000000000000000000000000000004C +:103470000008000000000000000000000000000044 :10348000000000000000000000000000000000003C :10349000000000000000000000000000000000002C :1034A000000000000000000000000000000000001C -:1034B000000000000000000000000000000000000C +:1034B00000000000000000000000000000400000CC :1034C00000000000000000000000000000000000FC :1034D00000000000000000000000000000000000EC :1034E00000000000000000000000000000000000DC :1034F00000000000000000000000000000000000CC -:1035000000000000000000000000000000000000BB -:103510000200000008000000000000400000A000C1 -:10352000000090000000000000000000000000000B -:10353000000000000000000000000000000000008B -:10354000000000000000000000000000000000007B -:103550000000000008000000000000000000000063 -:10356000000000000000000000000000000000005B -:1035700088000000000000000000000000000000C3 -:10358000000000000100000000000000000000003A -:1035900000008000000000000000000000000000AB -:1035A0000000000000000300000000000000000018 -:1035B0000300000000000000000000000000000008 -:1035C00000000000000000000000000000000000FB -:1035D00000000000000000000000000000000000EB -:1035E00000000000000000000000000000000000DB -:1035F00000000000000000000000000000000000CB -:103600002000000000000400000000000000000096 -:1036100000000000000000000000000000000000AA -:10362000000000000000000000000000000000009A -:10363000000000000000000000000000000000008A -:10364000000000000000000000000000000000007A -:10365000000000000000000000000000000000006A -:103660000000000000000011000000000000000049 -:103670000000000000000000000008000000000042 -:10368000000000000000000000000000000000003A -:10369000000000000000000000000000000000002A +:10350000000000000000000000000000000000209B +:103510000000000008000400080000000000000097 +:103520001000000000008200000000000000000009 +:1035300082000000008082000021000000000000E6 +:103540008280000008808200080000000000000067 +:103550000000820000000080000000000808000059 +:103560000008820800210080008000808280000026 +:1035700000008200000008000000088082000000B7 +:1035800000000000000000000000000000004000FB +:103590004000400040000000000000000400000067 +:1035A0000000000000000000000000080000000013 +:1035B0000000000000000008000000000000000003 +:1035C00000000040000800080000000000000000AB +:1035D00000000000000000000008000000000000E3 +:1035E00000000000000000000040004000400040DB +:1035F00000080000008800000000000000400000FB +:1036000000000000000000000000000000000000BA +:1036100000000000000000000000000000000008A2 +:103620000040002100080021000800080000000000 +:1036300000000000820000000000000000042000E4 +:1036400002000000820000400004000000040000AE +:10365000000002000000820000408204000082049A +:103660002000000000008200004000000000000474 +:10367000200002000000820000400004000000045E +:10368000200002000000820000408204000082044A +:103690002000000000020000000000000000000008 :1036A000000000000000000000000000000000001A -:1036B000000000000000000000000000000000000A -:1036C00000000000000000000000000000000000FA -:1036D00000000000000000000000000000000000EA -:1036E00000000000000000000000000000000000DA -:1036F00000000000000000000000000000000000CA -:1037000000000000000000000000000000000000B9 -:1037100000000000000000000000000000000800A1 -:103720000000000000000000000000000000000099 -:103730000000000001000000000000000000000088 -:103740000000000000000000000000000000000079 -:103750000000000000000000000000000000000069 -:103760000000000000000000000000000000000059 -:103770000000000000000000000000000000000049 -:103780000000000000000000000000000000000039 -:103790000000000000000000000000000000000029 -:1037A0000000030000000000000000000000000016 -:1037B0000000000000000400000000000000000005 -:1037C00000000000000000000000000000001100E8 -:1037D00000000000000000000000000000000000E9 -:1037E00000000000000000000000000000000000D9 -:1037F00000000000000000000000000000000000C9 -:1038000000000000000000000000000000000000B8 -:103810000000000000001100000000000001000195 -:103820000000000000000000000000000000000098 +:1036B0000000000000000000000000000000000109 +:1036C00080008000000000000001000100000001F7 +:1036D0000000000080000000000000010001000068 +:1036E0000001800000000000000000010000000058 +:1036F00000018000800000000000000100010000C7 +:1037000000018000800000000000000100010000B6 +:103710000001800000000000000000000008000818 +:103720000008002100210000002100050000000029 +:103730000000002100000000000000000000100058 +:103740000000000000000200004000000000100027 +:1037500000082000000000000200004000000000FF +:103760001000000800000000000000400000000001 +:103770001000000000000000020090400000000067 +:103780001000A008000000000200A040000000009F +:103790001000000800000500410000000800400083 +:1037A00003000002400000000000100010000000B4 +:1037B0000000000005000000000003000000000001 +:1037C00080000000000000008000000100000000F8 +:1037D0008000000180000000000080000001000067 +:1037E0000000800000010000000000000001000057 +:1037F00000008000000000000000800000010000C8 +:1038000000008000000100000000800000010000B6 +:103810000000800000010000029000080020081055 +:1038200090080020000208080000000000000000CE :103830000000000000000000000000000000000088 -:103840000000000000000000000000000000000078 -:103850000000000000000000000000000000000068 -:103860000000000000000000000000000000000058 -:103870000000000000000000000000000000000048 -:1038800000000000000000000000000000900000A8 -:1038900000000000000000000000000000030040E5 -:1038A0000040000000000000000000000000400098 +:1038400010C000000000008800C00004000000005C +:1038500010C1000000000088000000C0000400004B +:10386000000010C100000100008800C0000400003A +:10387000000010C001000100008800C0000400002A +:10388000000010C101000001008800C00004000019 +:10389000000010C10100000100880000008000004D +:1038A0000000000000000000008000000000000098 :1038B0000000000000000000000000000000000008 -:1038C00000000000000000000000000000000000F8 -:1038D00000000000000000000000000000000000E8 -:1038E00000000000000000000000000000000000D8 -:1038F00000000000000000000000000000000000C8 -:103900000000000000000000000000000000008037 -:1039100000000000000000000000000000000000A7 -:103920000000000000000000000000000000000097 -:103930000040000000000000000000000000000047 -:103940000000000000000000000000000000000077 -:103950000000000000000000000000000000000067 -:103960000000000000000000000000000000001146 -:103970000000001000000000000000000000000037 -:103980000000000000000000000000000000000037 -:103990000000000000000000000000000000000027 -:1039A0000000000000000000000000000000000017 -:1039B0000000000100000000000000000000000006 -:1039C00000000000000000000000000000000000F7 -:1039D00000000000000000000000000000000000E7 -:1039E00000000000000000000000000000000000D7 -:1039F00000000000000100000000000000000000C6 -:103A000000000000000000000000000000000000B6 -:103A100000000040000000A00000000000000000C6 -:103A20000000000000000000000000000000000096 -:103A30000000000020000100000000000000000065 -:103A40000000000000000000000000000000000076 -:103A50000000000000000000000000000000000066 -:103A60000000000000000000000000000000000056 -:103A70000000000020000000000000000000000026 -:103A80000000000000000000000000000000000036 -:103A90000000000000000290000000000000000094 -:103AA00000000300000041000000000000000000D2 -:103AB00000000000000000002000000000000000E6 -:103AC00000000000000000000000000000000000F6 -:103AD00000000000000000000000000000000000E6 -:103AE00000000000000000000000000000000000D6 -:103AF0000000000000000000000040000000000086 -:103B000000000000000000000000000000000000B5 -:103B10000000000020000000808000000000000085 -:103B20000000000000110000000000000000000084 -:103B30000000000000000000000000000000000085 -:103B40000000000000400000000000000000000035 -:103B50000000000000000000000000000000000065 -:103B60000000000000000000000000000000000055 -:103B70000000000000000000000000000000000045 -:103B80000000000000000000000000000000000035 -:103B90000000000000000011800000000000000094 -:103BA00000000000000000010000C000C000000094 -:103BB0000000000000000000000000000000000005 -:103BC0000000000000008200A00040000000000093 -:103BD00000000000000000000000000000000000E5 -:103BE00000000000000000000000000000000000D5 -:103BF00000000000000000000000000000000000C5 -:103C000000000000000000000000000000000000B4 -:103C100000000000000000000001200000880000FB -:103C2000000000000000000000000000070000008D -:103C30000000000000000000840000E00000000020 -:103C400000000000000000000081000007000000EC -:103C50000000000000000000000000000000000064 -:103C60000000000000000000000000000000000054 -:103C700000000000000000000000000002E0000062 -:103C80000000000000000000000000000000000034 -:103C9000000000000000000000000000000007001D -:103CA000000000000000000000000C0C0C0C0000E4 -:103CB0000000000000000000000000000000000004 -:103CC000000000000000000000000000000F0000E5 -:103CD00000000000000000000000000000000000E4 -:103CE00000000000000000000000000000000000D4 -:103CF00000000000000000000000000000000000C4 -:103D000000000000000000000000000000000000B3 -:103D100000000000000000000000000000FF0000A4 -:103D200000FF000000000000000000000C0C0C0C64 -:103D30000000000000000000000000000000000083 -:103D40000000000000000000000000000000000F64 -:103D50000000000000000000000000000000000063 -:103D60000000000000000000000000000000000053 -:103D70000000000000000000000000000000000043 -:103D80000000000000000000000000000000000033 -:103D9000000000000000000000000000000000FF24 -:103DA000000000FF00000000000000000000000014 -:103DB0000000000000000000000000000000000003 +:1038C0000000808000000200008000800080000076 +:1038D000000080C10005020000830000008000801D +:1038E0000000000080C10005080000830080008007 +:1038F0000000000080800300200000800080008025 +:103900000000000080C103050505008300800080E1 +:103910000000000080C10305050500830000009140 +:103920000080808000000091008000800000000086 +:103930000000000000000000000000000000000087 +:1039400000000000098040000009C10000000000E4 +:1039500000008000098040000009C1000000000054 +:10396000000000008000098040000009C100000044 +:10397000800000008000098000000509C1000000EF +:10398000000000008000098000000509C10000005F +:10399000000000008000098000000509C100080047 +:1039A00008C0080808C0880088C0880888C00000CF +:1039B0000000000000000000000000000000000007 +:1039C000000000000000894000000001C10000006C +:1039D00000000000C000894000000001C10000009C +:1039E000000000000000C000894000000001C1008C +:1039F000000002000000C000014000000101C140C1 +:103A0000000000000000C000014000000101C140B2 +:103A1000000000000000C000014000000101C140A2 +:103A200003200004C090021011020002C0402010C8 +:103A30000000000000000000000000000000000086 +:103A4000000000000000000000000000000000C1B5 +:103A500000000010000000C000000000000000C1D5 +:103A6000000000000010000000C000000000000086 +:103A700000C100000000000200C0000000000000C3 +:103A800000C100000010000000C0000000000000A5 +:103A900000C100000010000000C000000000000095 +:103AA00000C1C100000080000000410000008080D3 +:103AB0000080000000000000000000000000000086 +:103AC000000000000000000000000011004000099C +:103AD00000C100000080000000800011004041098A +:103AE00000C10000000000800000008000110040C4 +:103AF000410900C1000000000080008000110000AA +:103B0000000900C1000000800000008000110000DA +:103B1000000900C1000000800000008000110000CA +:103B2000000900C1800080000000000080080080C3 +:103B30000080000000000000000000000000000005 +:103B40000000000000000000000000004140A1094A +:103B5000000009038000800000800000C140A1092E +:103B60000000090300008000000000808000C140C8 +:103B7000A109000009038000800000000000410945 +:103B80008009408009038000800000800000C10996 +:103B90008009408009038000800000800000C10986 +:103BA00080094080090308000402900220000800F8 +:103BB00008109010880000000000000000000000C5 +:103BC00000000000000000000000000000000100F4 +:103BD000900100000101C000020000080000C100C7 +:103BE0009001000001010000C00000000008040076 +:103BF000C100900100000101C000020000000000AF +:103C00000101900100400101C00002000008000015 +:103C1000C101900100400101C00002000008000045 +:103C2000C101900100400101000000000000484275 +:103C300000000000000048420000000000000000FA +:103C40000000000000000000000000000000000074 +:103C5000600000E000000000000000000000000024 +:103C6000600000E000000000000000000000000014 +:103C70000000600000E00000000000000000000004 +:103C80000000600000E000000000000000000000F4 +:103C90000000600000E000000000000000000000E4 +:103CA0000000600000E00000000004081020220076 +:103CB0000022408010200000096000000000000089 +:103CC00000000000000000000000000000000000F4 +:103CD000000000FF00FF0000AAAA000000FF000093 +:103CE000F0F0000000FF0000AAAA000000003C3C29 +:103CF0000000F0F0000000FF0000AAAA000000FF92 +:103D0000000000FF00FF00FF0000AAAA000000FF63 +:103D10000000F0F0000000FF0000AAAA000000FF71 +:103D20000000F0F0000000FF0000AAAA010240809D +:103D300011000011010204080960000000000000E9 +:103D40000000000000000000000000000000000073 +:103D50000000000000FF00FF0000AAAA000000FF12 +:103D60000000F0F0000000FF0000AAAA0000000020 +:103D70003C3C0000F0F0000000FF0000AAAA000098 +:103D800000FF000000FF00FF00FF0000AAAA0000E3 +:103D900000FF0000F0F0000000FF0000AAAA0000F1 +:103DA00000FF0000F0F0000000FF0000AAAA0410CD +:103DB00001400408010204100140060090000000C8 :103DC00000000000000000000000000000000000F3 -:103DD00000000000000000000000000000000000E3 -:103DE00000000000000000000000000000000000D3 -:103DF00000000000000000000000000000000000C3 -:103E000000000000000000000000000000000000B2 -:103E100000000000000000000000000000000000A2 -:103E20000000FF000000FFFF000000000000000095 -:103E30000000000000000000000000000000000082 +:103DD0000000000000003C3C00003C3C0000FF00F4 +:103DE0000000FFFF00003C3C00003C3C00000000E5 +:103DF000FF000000FFFF00003C3C00003C3C0000D6 +:103E0000FF000000F0F0FFFF3C3C0000FFFF00005F +:103E1000FF000000FFFF00003C3C0000FFFF00002F +:103E2000FF000000FFFF00003C3C0000FFFF00001F +:103E300008200280102040800820028000060090A8 :103E40000000000000000000000000000000000072 -:103E50000000000000000000000000000000000062 -:103E60000000000000000000000000000000000052 -:103E70000000000000000000000000000000000042 -:103E80000000000000000000000000000000000032 -:103E90000000000000000000000000000000000022 -:103EA00000000000FF000000000000000000000013 -:103EB000000085610006000D000000000000000009 -:103EC000000000610007C00D0000000000000000BD -:103ED00000000000003000000000000000000000B2 -:103EE00000000000000000000000000000000000D2 -:103EF00000000000000000000000000000000000C2 -:103F00000000000000650006000F20000000000017 -:103F100000000000000000000000000000000000A1 -:103F20000000000015002A00054000A80000000065 -:103F30000000000000000000000000000000000081 +:103E500000000000000000003C3C00003C3C000072 +:103E6000FF000000000000003C3C00003C3C000063 +:103E70000000FF000000000000003C3C00003C3C53 +:103E80000000FF000000F0F0FFFF3C3C00000000DD +:103E90000000FF000000000000003C3C00000000AB +:103EA0000000FF000000000000003C3C000000009B +:103EB0000000600000000000100000000000000092 +:103EC00008000000000000000000000000000000EA +:103ED000000000000000000000004042800580203B +:103EE0009202408280000020920240828001802065 +:103EF00092020000408280000020920240828001F5 +:103F00008020920240828000002082024042800590 +:103F10008020920240828000002092024082800134 +:103F20008020920240828000002092024082800124 +:103F3000802092020000000000000000000000004D :103F40000000000000000000000000000000000071 -:103F50000000000000000000000000000000000061 -:103F60000000000000000000000000000000000051 -:103F70000000000000000000000000000000000041 -:103F80000000000000000000000000000000000031 -:103F90000000000000000000000000000000000021 -:103FA0000000000000000000000000000000000011 -:103FB0000000000000000000000000000000000001 +:103F500000000000000000000000000055003C00D0 +:103F6000303000F0000000000000000055003C0070 +:103F7000303000F00000000000000000000055009C +:103F80003C00303000F0000000000000000005059B +:103F90000C0C3C3C00FF0000000000000000050588 +:103FA0000C0C3C3C00FF0000000000000000050578 +:103FB0000C0C3C3C00FF0000000000000000000072 :103FC00000000000000000000000000000000000F1 -:103FD00000000000000000000000000000000000E1 -:103FE00000000000000000000000000000000000D1 -:103FF00000000000000000000000000000000000C1 -:1040000000000000000000000000000000000000B0 -:1040100000000000000000000000000000000000A0 -:104020000000000000000000000000000000000090 -:10403000000000000000000000030003000000007A +:103FD000000000000000000000000000000055008C +:103FE0003C00303000F000000000000000005500F0 +:103FF0003C00303000F00000000000000000000035 +:1040000055003C00303000F00000000000000000CF +:1040100005050C0C0000000000000000000000007E +:1040200005050C0C0000000000000000000000006E +:1040300005050C0C0000000000000000000000005E :104040000000000000000000000000000000000070 :104050000000000000000000000000000000000060 -:104060000000000000000000000000000000000050 -:104070000000000000000000000000000000000040 -:104080000000000000000000000000000000000030 -:104090000000000000000000000000000000000020 -:1040A0000000000000000000000000000000000010 -:1040B00000000000000000000000FF03FF030000FC +:1040600000000000A0A030300000000000000000B0 +:104070003C3CFF00A0A03030000000000000000029 +:1040800000003C3CFF00A0A0303000000000000019 +:1040900000000000000000AA003C0000000000003A +:1040A00000000C0C0F0000AA003C00000000000003 +:1040B00000000C0C0F0000AA003C000000000000F3 :1040C00000000000000000000000000000000000F0 :1040D00000000000000000000000000000000000E0 -:1040E00000000000000000000000000000000000D0 -:1040F00000000000000000000000000000000000C0 -:1041000000000000000000000000000000000000AF -:10411000000000000000000000000000000000009F -:10412000000000000000000000000000000000008F -:10413000000000000000000000000000000000007F -:10414000000000000000000000002000000000004F -:10415000200000000000200000000000000000001F -:1041600000000080040000000004000000000000C7 -:10417000200000000000000000000000000300001C -:10418000000000000000200000000000000000000F +:1040E000000000000000A0A0303000000000000030 +:1040F000000000000000A0A0303000000000000020 +:104100000000000000000000A0A03030000000000F +:10411000000000000000000000AA003C00000000B9 +:10412000000000000C0C0F0000AA003C0000000082 +:10413000000000000C0C0F0000AA003C0000000072 +:10414000000000000000000000000000200000004F +:10415000000020000000000000000000000000003F +:10416000000000000000000000000000200000002F +:10417000000000000000000000000000000100003E +:10418000000000000000000000000000000020000F :10419000000000000000000000000000000000001F -:1041A000000000000000000000000000000000000F +:1041A00000000000000000000000000000002000EF :1041B00000000000000000000000000000000000FF -:1041C00000020000000000000000000000000000ED -:1041D00000000000000000000000000200001000CD -:1041E00000000000000400000000000000000000CB -:1041F000000000000040000000000000000200007D -:1042000000000000000200020002000200020000A4 -:104210000002000200020002000000000000000096 +:1041C00000000000000000000000000000000000EF +:1041D00000000000000000000000000000000000DF +:1041E00000000000000000000000000000000000CF +:1041F00000000000000000000000000000000000BF +:1042000000000000000000000000000000000000AE +:10421000000000000000000000000000000000009E :10422000000000000000000000000000000000008E :10423000000000000000000000000000000000007E -:104240000500000000000000200000000000000049 -:10425000040000000000000000000000000000005A -:1042600000000000000020000000840000000000AA -:1042700000000000000000000040000000000000FE -:10428000000000000000000000000400000000002A -:10429000000000000000000000000000000000001E -:1042A00000000000000000000000044004000000C6 -:1042B00000000000000000000000100010001000CE -:1042C000100010000000000000008000000000004E -:1042D00000000000000000000000000000000000DE -:1042E000000000000000000080000002000000004C -:1042F00000000000000000000000000000000000BE +:10424000000000000000000000000000000000006E +:10425000000000000000000000000000000000045A +:1042600000000000000000800000000000000000CE +:10427000000000000000000000000000000000003E +:10428000000000000000000000000000000000002E +:104290000000000000000000000000000000000915 +:1042A0000000000000000009000000000000000005 +:1042B00000000000000000000000000000000000FE +:1042C00000000000000000000000000000000000EE +:1042D00000000004000000000000000000000000DA +:1042E0000000000000000000000400000000008842 +:1042F0000088000000000000000000000000000036 :1043000000000000000000000000000000000000AD :10431000000000000000000000000000000000009D :10432000000000000000000000000000000000008D -:10433000000000000000000000000000800080007D -:104340008000800000000000000000000008002045 -:10435000000000000000000000000000000000005D -:10436000000000000000000000000020000000002D +:10433000000000000000000000000000000000007D +:104340000000000000000021020000080000000042 +:10435000000000000000000200000100000000005A +:10436000000000000000000000000000000000004D :10437000000000000000000000000000000000003D -:104380000000000400000000000000000000000029 +:10438000000000000000000000000000000000002D :10439000000000000000000000000000000000001D :1043A000000000000000000000000000000000000D :1043B00000000000000000000000000000000000FD -:1043C00000000000000000000000000000000000ED -:1043D00000000400000000000000000000000000D9 -:1043E00000000000000000000000000000010000CC +:1043C000000000000000110011008000110000003A +:1043D0000084000800820088000100000400000042 +:1043E00000000000000000000000000000000000CD :1043F00000000000000000000000000000000000BD -:1044000000000000000100000000000000000000AB -:10441000000041000000000000000000000000005B +:1044000000000000000000000000000000000000AC +:10441000000000000000000000000000000000009C :10442000000000000000000000000000000000008C -:104430000800000000000000000000000000000074 -:1044400000000000000000000000000001000080EB -:10445000000000000000000000000000000000005C -:10446000000000000000000000000000000000202C -:10447000004040000000000000000000C0000000FC -:10448000000000000000000900000000A000000083 -:104490000000000000000000000004000000000018 +:10443000000000000000000000000000000000007C +:10444000000000000000000000000000000020004C +:104450000000000000000000000200000008010051 +:104460000000000000000000000000000000000448 +:10447000000000000000000000000000000000003C +:10448000000000000000000000000000000000002C +:10449000000000000000000000000000000000001C :1044A000000000000000000000000000000000000C -:1044B0000000200000000000C0000000000000001C -:1044C00000000000000000000100000000002000CB -:1044D00000040000000000000000000000000000D8 -:1044E00000000000000000000000000000000000CC +:1044B00000000000000000000000000000000000FC +:1044C00000000000000000000000000000000000EC +:1044D00000000000000000000000000100000001DA +:1044E00020000000000000000000000000000000AC :1044F00000010000000000000000000000000000BB -:1045000000000000000000000000000000000000AB -:10451000000000000000000000000000000000009B -:10452000000000000000000000000000000000008B +:104500000800000000000000000000001000000093 +:1045100000000000000000001000000000C000C00B +:1045200000C000C000C0000000000000000000004B :10453000000000000000000000000000000000007B -:10454000000000000000000000002000000000004B -:10455000000000000000000000000000000000005B -:10456000000000000000000000000000000000004B -:104570000000000000000000000008000000000033 +:1045400000000000000000000000000000009000DB +:10455000000000000000000000000000001100004A +:10456000004100000000000000000000000000000A +:10457000000000000000000000000000000000003B :10458000000000000000000000000000000000002B -:104590000000820000000000000000000000000099 -:1045A0000000000000000000000000000000820089 +:10459000000000000000000000000000000000001B +:1045A000000000000000000000000000000000000B :1045B00000000000000000000000000000000000FB -:1045C00000000000000000000000000000000000EB -:1045D00000000000000000000000000000000000DB -:1045E00000000000000000000000000000000000CB -:1045F00000000000000000000000000000000000BB +:1045C00000000000000000000000000000000002E9 +:1045D0000500050005000090008805880908000016 +:1045E000000000000000000000000000000000C00B +:1045F000000000000000000000000000000000C0FB :1046000000000000000000000000000000000000AA -:10461000000000000000000000000000000000009A -:10462000000003000800000000000000000000007F +:1046100000C00000000000000000000000000010CA +:10462000000000000000000000000000000000008A :10463000000000000000000000000000000000007A -:1046400000000000000000840000000000000000E6 +:10464000000000000000000000000000000000006A :10465000000000000000000000000000000000005A -:104660000000000000000021000000000000000029 -:104670000000000000000000000000000000002119 -:104680000000000000000000000008000000000022 +:104660000000002000090000000000000009000018 +:10467000000000000000000000000000000000003A +:10468000000000000000000000000000000000002A :10469000000000000000000000000000000000001A :1046A000000000000000000000000000000000000A :1046B00000000000000000000000000000000000FA :1046C00000000000000000000000000000000000EA -:1046D00000020000000000000000000000000000D8 +:1046D000000041000000008800000300000003000B :1046E00000000000000000000000000000000000CA :1046F00000000000000000000000000000000000BA :1047000000000000000000000000000000000000A9 @@ -46207,89 +46207,89 @@ :104720000000000000000000000000000000000089 :104730000000000000000000000000000000000079 :104740000000000000000000000000000000000069 -:104750000000000001000000000000000001000057 -:104760000000000000000000000000000000000049 -:104770000000000000000000000000000000000039 +:104750000000000020A020400004820488020082A3 +:1047600000A090C000010000000000010000000057 +:104770000000000000000000010000000000000038 :104780000000000000000000000000000000000029 :104790000000000000000000000000000000000019 :1047A0000000000000000000000000000000000009 :1047B00000000000000000000000000000000000F9 -:1047C00000000000000000000000000000000100E8 -:1047D0000000000000001100210000000000001196 -:1047E00000000000000900000000000000000000C0 -:1047F00000000000000000000000000000000000B9 +:1047C00000000000000000000000000000000000E9 +:1047D00000000000000000000000008080800080D9 +:1047E000000000000000004100202009000200003D +:1047F00000000000000000000000100000000000A9 :1048000000000000000000000000000000000000A8 :104810000000000000000000000000000000000098 :104820000000000000000000000000000000000088 :104830000000000000000000000000000000000078 :104840000000000000000000000000000000000068 -:1048500011000021000000000041090000030000D9 -:104860000000000000000000000000000000000048 +:104850000000000000000000000000850000008053 +:104860000000009080800080000000000000000038 :104870000000000000000000000000000000000038 :104880000000000000000000000000000000000028 :104890000000000000000000000000000000000018 :1048A0000000000000000000000000000000000008 :1048B00000000000000000000000000000000000F8 :1048C00000000000000000000000000000000000E8 -:1048D0000000004000001120000000010100000065 -:1048E00000000000000000000000000000000000C8 -:1048F00000000000000000000000000000000000B8 -:1049000000A0000000000000000000000000000007 +:1048D00000000000000000000000400082C18820AD +:1048E00082C0840084C1100884C000000000000061 +:1048F0000040000000000000000000000000000078 +:1049000000000000000000000000000000000000A7 :104910000000000000000000000000000000000097 :104920000000000000000000000000000000000087 :104930000000000000000000000000000000000077 :104940000000000000000000000000000000000067 -:1049500000000000000000000101000000008800CD -:104960000000010000000000000000000000000046 -:104970000000000000000000000000000000000037 -:104980000000000000000000000000000000000027 -:104990000000000000000000000001000000000016 +:10495000000000000000000000000000030400044C +:10496000C08220A083900008C08488A001000000BD +:104970000100010000000000000000000000000035 +:104980000000010000000000000000000000000026 +:104990000000000000000000000000000000000017 :1049A0000000000000000000000000000000000007 :1049B00000000000000000000000000000000000F7 :1049C00000000000000000000000000000000000E7 -:1049D00000000000000000002000000100000000B6 -:1049E00000000000020000000000000000000000C5 -:1049F00000000000000000000000000000000000B7 -:104A0000000000000900000000000000000000009D -:104A10000000000000000000000000002000000076 +:1049D0000000000000000000000000000000C18096 +:1049E000008080000000C1000080800000004100C5 +:1049F000210008001000000000000000000000007E +:104A00000000000010000000000000000000000096 +:104A10000000000000000000000000000000000096 :104A20000000000000000000000000000000000086 :104A30000000000000000000000000000000000076 :104A40000000000000000000000000000000000066 -:104A5000000000000000000000008000000840008E -:104A60000000001100000000000000000000000035 -:104A70000000000000000000000000000000000036 -:104A80000002000000000000000000000000000024 -:104A900000000000000000000040000000000000D6 +:104A50000000000000000000000000000000000056 +:104A600000100000008800000000000000000000AE +:104A700021110020090000000000000000000000DB +:104A80000000000000000000000000000000000026 +:104A90000000000000000000000000000000000016 :104AA0000000000000000000000000000000000006 :104AB00000000000000000000000000000000000F6 :104AC00000000000000000000000000000000000E6 -:104AD00000000000000000000000000211000000C3 -:104AE00000000000000100000000000000000000C5 -:104AF00000000000000000000000000000000000B6 -:104B000000000001000000000000000000000000A4 +:104AD00000000000000000000000000000000000D6 +:104AE0000000820140904041A0008200208882881E +:104AF0008200010100000100000000000000000031 +:104B000000000000000000000000000000000000A5 :104B10000000000000000000000000000000000095 :104B20000000000000000000000000000000000085 :104B30000000000000000000000000000000000075 :104B40000000000000000000000000000000000065 -:104B50000000000000000000000000000001010053 -:104B600000000000000000E000008100500000E0B4 -:104B70000000000000000000000000000000000035 -:104B800000000000818100E007000000000000003C -:104B9000000000000000000000000000810000E0B4 +:104B50000000000000000000000000000000000055 +:104B600000000000000000000000484200000000BB +:104B700000004842500000E00700840000000000F0 +:104B800000000000500000E00000000000000000F5 +:104B90000000000000000000000000000000000015 :104BA0000000000000000000000000000000000005 :104BB00000000000000000000000000000000000F5 :104BC00000000000000000000000000000000000E5 :104BD00000000000000000000000000000000000D5 -:104BE00000E00000000000000000000000000000E5 -:104BF00000000000000000000000000000000000B5 +:104BE00000000000000020401080A00005002841C7 +:104BF000000028410000000000000000000000004C :104C000000000000000000000000000000000000A4 :104C10000000000000000000000000000000000094 :104C20000000000000000000000000000000000084 :104C30000000000000000000000000000000000074 :104C40000000000000000000000000000000000064 :104C50000000000000000000000000000000000054 -:104C60000000000000000000000000000000000044 -:104C70000000000000000000000000000000000034 +:104C600000000000000000000402080100A0000590 +:104C70000000284100002841000000000000000062 :104C80000000000000000000000000000000000024 :104C90000000000000000000000000000000000014 :104CA0000000000000000000000000000000000004 @@ -46304,16 +46304,16 @@ :104D30000000000000000000000000000000000073 :104D40000000000000000000000000000000000063 :104D50000000000000000000000000000000000053 -:104D60000000000000000000000000000000000043 -:104D70000000000000000000000000000000000033 +:104D600000000000000000000000000000820014AD +:104D700000008214008200140108020400000000F8 :104D80000000000000000000000000000000000023 :104D90000000000000000000000000000000000013 :104DA0000000000000000000000000000000000003 :104DB00000000000000000000000000000000000F3 :104DC00000000000000000000000000000000000E3 :104DD00000000000000000000000000000000000D3 -:104DE00000000000000000000000000000000000C3 -:104DF00000000000000000000000000000000000B3 +:104DE0000000000000000000000000000000820041 +:104DF0001400821400008200140080104020000083 :104E000000000000000000000000000000000000A2 :104E10000000000000000000000000000000000092 :104E20000000000000000000000000000000000082 @@ -46321,64 +46321,64 @@ :104E40000000000000000000000000000000000062 :104E50000000000000000000000000000000000052 :104E60000000000000000000000000000000000042 -:104E700000600006000C000000610002C00D000090 -:104E80000000000000000000000000000000000022 -:104E900000610036C00D00A000000000000000000E -:104EA000000000000000000000610006C00D0000CE +:104E700060000000000010000000000000000800BA +:104E80000561000F800D20A0000000000000000060 +:104E900000610007800D20000000000000000000FD +:104EA0000000000000000000000000000000000002 :104EB00000000000000000000000000000000000F2 :104EC00000000000000000000000000000000000E2 :104ED00000000000000000000000000000000000D2 -:104EE0000000000000000000000000000006000CB0 -:104EF000000000000000FFFF0000000000000000B4 -:104F000000000000000000000000000000000000A1 +:104EE00000000000000000000000000000000000C2 +:104EF00000000000000000000000000000000000B2 +:104F000000000000F0F000000000000000000000C1 :104F10000000000000000000000000000000000091 :104F20000000000000000000000000000000000081 :104F30000000000000000000000000000000000071 :104F40000000000000000000000000000000000061 :104F50000000000000000000000000000000000051 -:104F60000000000000000000000000000000FF0042 -:104F700000FF000000000000000000000000000032 -:104F80000000000000000000000000000000000021 +:104F60000000000000000000000000000000000041 +:104F70000000000000000000000000000000000031 +:104F8000000000000000F0F0000000000000000041 :104F90000000000000000000000000000000000011 :104FA0000000000000000000000000000000000001 :104FB00000000000000000000000000000000000F1 :104FC00000000000000000000000000000000000E1 :104FD00000000000000000000000000000000000D1 :104FE00000000000000000000000000000000000C1 -:104FF000FF0000FF000000000000F0F00000FFFFD5 -:105000003C3C000000000000000000000000000028 +:104FF00000000000000000000000000000000000B1 +:10500000000000000000FF553C0F00000000000001 :105010000000000000000000000000000000000090 :105020000000000000000000000000000000000080 :105030000000000000000000000000000000000070 :105040000000000000000000000000000000000060 :105050000000000000000000000000000000000050 :105060000000000000000000000000000000000040 -:105070000000FF0000FF000000000000F0F0000052 -:10508000FFFF3C3C000000000000000000000000AA +:105070000000000000000000000000000000000030 +:10508000000000000000000000553C0F0000000080 :105090000000000000000000000000000000000010 :1050A0000000000000000000000000000000000000 :1050B00000000000000000000000000000000000F0 :1050C00000000000000000000000000000000000E0 :1050D00000000000000000000000000000000000D0 :1050E00000000000000000000000000000000000C0 -:1050F00000000000FF0000FF000020000000000092 -:10510000000000000000000020000000000000007F -:10511000000000000000000020002000000000004F -:10512000000000000000000020000000000000005F -:10513000000000000000000020000000200000002F -:10514000000000000000000000002000000000003F -:10515000000000000000000000002000200000000F -:10516000000000000000000000002000000000001F -:10517000000000000000000000002000000000000F -:10518000000000000000000000000000000000001F -:10519000000000000000000000000000000000000F +:1050F0000000000000000000000000000000200090 +:10510000210000000200000000000000000000007C +:10511000200000000000000000000010000000005F +:10512000A0000000A000000000000000000000003F +:10513000200000000000000000000001000000004E +:105140000000880000000000004000000000000097 +:10515000000020000000000000000000000000002F +:10516000000020000000000000000000000000001F +:10517000000020000000000000000000000000000F +:105180000900020000008000000000000000000094 +:1051900010000000000000000000000000000000FF :1051A00000000000000000000000000000000000FF :1051B00000000000000000000000000000000000EF -:1051C000000000000090000000000000000000004F +:1051C00000000000000000000000000100000000DE :1051D00000000000000000000000000000000000CF :1051E00000000000000000000000000000000000BF :1051F00000000000000000000000000000000000AF -:10520000000000000000000000000000820000001C +:10520000000000000080000002000000000000001C :10521000000000000000000000000000000000008E :10522000000000000000000000000000000000007E :10523000000000000000000000000000000000006E @@ -46386,24 +46386,24 @@ :10525000000000000000000000000000000000004E :10526000000000000000000000000000000000003E :10527000000000000000000000000000000000002E -:105280000000000000000000000000000008000016 -:10529000000000000000000000000000000000000E -:1052A00000000000000000000000000000080000F6 +:10528000000000000000000400008000000000009A +:10529000000000000000000000000000000400000A +:1052A00000000000000000000000000000000000FE :1052B00000000000000000000000000000000000EE -:1052C00000000000000000000000000000000008D6 +:1052C00000000000000000000000000000000000DE :1052D00000000000000000000000000000000000CE -:1052E00000000000000000000000000000000008B6 +:1052E00000000000000000000000000000000000BE :1052F00000000000000000000000000000000000AE -:10530000000000000000000000000000000000009D -:10531000000000000000000000000000000000008D +:105300000000040004000300C00004800400C0008A +:10531000020000000000000000000000000000008B :10532000000000000000000000000000000000007D :10533000000000000000000000000000000000006D :10534000000000000000000000000000000000005D -:10535000000000000000000000000000000000004D -:10536000000000000000000000000000000000003D -:10537000000000000000000000000000000000002D -:10538000000000000000000000000000000000001D -:10539000000000000000000000000000000000000D +:10535000000000000000000000000000001000102D +:1053600000000000001000210021001000100010BB +:1053700000100010000000100010000000000000ED +:105380000000000080008000840000008040830056 +:10539000110080000000000000000000000000007C :1053A00000000000000000000000000000000000FD :1053B00000000000000000000000000000000000ED :1053C00000000000000000000000000000000000DD @@ -46412,165 +46412,165 @@ :1053F00000000000000000000000000000000000AD :10540000000000000000000000000000000000009C :10541000000000000000000000000000000000008C -:10542000000000000000000000000000000000007C -:10543000000000000000000000000000000000006C -:10544000000000000000000000000000000000005C +:105420000000000000000000000000000800000074 +:1054300008000000000010001000100082001000A2 +:10544000000010001000000010000000100010000C :10545000000000000000000000000000000000004C :10546000000000000000000000000000000000003C :10547000000000000000000000000000000000002C -:10548000000000000000000000000000000000001C +:1054800000000000000000002100000008000000F3 :10549000000000000000000000000000000000000C -:1054A00000000000000000000000000000000000FC -:1054B00000000000000000000000000000000000EC +:1054A00000001000000000000000000000000000EC +:1054B00000000000000400000000000000000000E8 :1054C00000000000000000000000000000000000DC :1054D00000000000000000000000000000000000CC :1054E00000000000000000000000000000000000BC :1054F00000000000000000000000000000000000AC -:10550000000000000000000000000000000000009B -:10551000000000000000000000000000000000008B +:105500000000000000000000000001008380828095 +:1055100002800080008901800180000000000000FE :10552000000000000000000000000000000000007B :10553000000000000000000000000000000000006B -:10554000000000000000000000000000000000005B -:10555000000000000000000000000000000000004B -:10556000000000000000000000000000000000003B +:105540000000000010000000000000008200820047 +:10555000000008000000080000000000001000101B +:1055600000000000002100210000000000000000F9 :10557000000000000000000000000000000000002B -:10558000000000000000000000000000000000001B -:105590000084000000000000000000000000000087 -:1055A00000000000000000000000000000000000FB -:1055B00000000000000000000000000000000000EB +:1055800000000000000000000000000004000440D3 +:105590000040802021200020022002202100001055 +:1055A000080000840000000000000000000021004E +:1055B00008000000000000000000000000000000E3 :1055C00000000000000000000000000000000000DB :1055D00000000000000000000000000000000000CB :1055E00000000000000000000000000000000000BB :1055F00000000000000000000000000000000000AB -:105600000000000000000000000000000084000016 -:105610000000000000000000000000020000000088 -:10562000000000000000000000000000000000007A +:105600000000000000000000000000000000028018 +:105610000800A003000002000000000000000000DD +:105620000000000000000000100000000002000068 :10563000000000000000000000000000000000006A -:10564000000000000000000000000000000000005A -:10565000000000000000000000000000000000004A -:10566000000000000000000000000000000000003A +:1056400000000000000000008200000000000000D8 +:10565000C000A00082000000100000000000000058 +:1056600000000000001000100000000000210021D8 :10567000000000000000000000000000000000002A :10568000000000000000000000000000000000001A -:10569000000000000000000000000000000000000A +:1056900080042000030005008500000005000000D4 :1056A00000000000000000000000000000000000FA -:1056B00000000000000000000000000000000000EA +:1056B00000000000050000000000000000000000E5 :1056C00000000000000000000000000000000000DA :1056D00000000000000000000000000000000000CA :1056E00000000000000000000000000000000000BA :1056F00000000000000000000000000000000000AA :105700000000000000000000000000000000000099 -:105710000000000000000000000000000000000089 -:105720000000000000000000000000000000000079 +:10571000000001C00490000490A000C0000000043C +:105720000020000000000000000000000000000059 :105730000000000000000000000000000000000069 :105740000000000000000000000000000000000059 -:105750000000000000000000000000000000000049 -:105760000000000000000000000000000000000039 +:1057500000000000000000000000000004900004B1 +:10576000000810084008008400081008000000002D :105770000000000000000000000000000000000029 :105780000000000000000000000000000000000019 -:105790000000000000000000000000000000000009 -:1057A00000000000000000000000000000000000F9 +:1057900000000000118080002080000000800000D8 +:1057A0000080000000000000000000000000000079 :1057B00000000000000000000000000000000000E9 :1057C00000000000000000000000000000000000D9 -:1057D00000000000000000000000000000000000C9 -:1057E00000000000000000000000000000000000B9 +:1057D0000000000000000000000000000000800049 +:1057E00000000080008085000000008080800000B4 :1057F00000000000000000000000000000000000A9 :105800000000000000000000000000000000000098 -:105810000000000000000000000000000000000088 -:105820000000000000000000000000000000000078 +:105810000000000000000005002100808000000062 +:105820000005800080000000000000000000000073 :105830000000000000000000000000000000000068 :105840000000000000000000000000000000000058 :105850000000000000000000000000000000000048 -:105860000000000000000000000000000000000038 +:105860008000008580800080000000A10040008052 :105870000000000000000000000000000000000028 :105880000000000000000000000000000000000018 -:105890000000000000000000000000000000000008 -:1058A00000000000000000000000000000000000F8 +:105890000000000000000000200000008282C00024 +:1058A000400000000400C0000000000000000000F4 :1058B00000000000000000000000000000000000E8 :1058C00000000000000000000000000000000000D8 :1058D00000000000000000000000000000000000C8 -:1058E00000000000000000000000000000000000B8 -:1058F00000000000000000000000000000000000A8 +:1058E0000000020002C0040284C0400004C008841A +:1058F00084C0000000000000000000000000000064 :105900000000000000000000000000000000000097 -:105910000000000000000000000000000000000087 -:105920000000000000000000000000000000000077 +:1059100000000000000000000000C00000409004F3 +:1059200090C0004000A09004A0C000000000000053 :105930000000000000000000000000000000000067 :105940000000000000000000000000000000000057 -:105950000000000000000000000000000000000047 -:105960000000000000000000000000000000000037 -:105970000000000000000000000000000000000027 +:105950000000000000000000010000000000000046 +:105960000000000083400010C01002400920001019 +:10597000C002204000000000000000000000000005 :105980000000000000000000000000000000000017 -:105990000000000000000000000000000000000007 -:1059A00000000000000000000000000000000000F7 +:105990000000000000000000000000008000008007 +:1059A00000808380008000000080008000000000F4 :1059B00000000000000000000000000000000000E7 :1059C00000000000000000000000000000000000D7 -:1059D00000000000000000000000000000000000C7 -:1059E00000000000000000000000000000000000B7 -:1059F00000000000000000000000000000000000A7 +:1059D00000000000000000000000020000000000C5 +:1059E0000000000000004100008080808000410035 +:1059F00000808000000000000000000000000000A7 :105A00000000000000000000000000000000000096 -:105A10000000000000000000000000000000000086 -:105A20000000000000000000000000000000000076 +:105A100000000000000000000000000000008010F6 +:105A200080088080000080000008800000000000E6 :105A30000000000000000000000000000000000066 :105A40000000000000000000000000000000000056 -:105A50000000000000000000000000000000000046 -:105A60000000000000000000000000000000000036 +:105A500000000000000000008000000000000000C6 +:105A600000000000000000000000000000800000B6 :105A70000000000000000000000000000000000026 :105A80000000000000000000000000000000000016 :105A90000000000000000000000000000000000006 -:105AA00000000000000000000000000000000000F6 +:105AA000C00020010404C000C00040010440000008 :105AB00000000000000000000000000000000000E6 :105AC00000000000000000000000000000000000D6 -:105AD00000000000000000000000000000000000C6 -:105AE00000000000000000000000000000000000B6 -:105AF00000000000000000000000000000000000A6 +:105AD0000000000000000000000082000020000024 +:105AE000000000000000000000000400400204026A +:105AF00004000200200282080200000000000000F2 :105B00000000000000000000000000000000000095 :105B10000000000000000000000000000000000085 -:105B20000000000000000000000000000000000075 +:105B20000000000680E00700820000060000070079 :105B30000000000000000000000000000000000065 :105B40000000000000000000000000000000000055 :105B50000000000000000000000000000000000045 :105B60000000000000000000000000000000000035 -:105B70000000000000000000000000000000000025 +:105B70000000484200000000000048420000000011 :105B80000000000000000000000000000000000015 :105B90000000000000000000000000000000000005 -:105BA00000000000000000000000000000000000F5 -:105BB00000000000000000000000000000000000E5 +:105BA00000000000F5FF0C0CFF00F000000F0F0FCD +:105BB000F0003C00000000000000000000000000B9 :105BC00000000000000000000000000000000000D5 :105BD00000000000000000000000000000000000C5 -:105BE00000000000000000000000000000000000B5 -:105BF00000000000000000000000000000000000A5 +:105BE0000000000000000000000000000000600055 +:105BF0000060220000220000812424000024000014 :105C00000000000000000000000000000000000094 :105C10000000000000000000000000000000000084 -:105C20000000000000000000000000000000000074 -:105C30000000000000000000000000000000000064 +:105C2000000000000000F0FA0C0C0000F000000F73 +:105C30000000F0003C000000000000000000000038 :105C40000000000000000000000000000000000054 :105C50000000000000000000000000000000000044 :105C60000000000000000000000000000000000034 -:105C70000000000000000000000000000000000024 +:105C70000900000911000011812400008100008149 :105C80000000000000000000000000000000000014 :105C90000000000000000000000000000000000004 -:105CA00000000000000000000000000000000000F4 -:105CB00000000000000000000000000000000000E4 +:105CA00000000000000000003F3FF0000000000086 +:105CB0003030505000FF003C0000000000000000A9 :105CC00000000000000000000000000000000000D4 :105CD00000000000000000000000000000000000C4 :105CE00000000000000000000000000000000000B4 -:105CF00000000000000000000000000000000000A4 -:105D00000000000000000000000000000000000093 +:105CF00000000408010206900000040801024400AC +:105D0000004400000000000000000000000000004F :105D10000000000000000000000000000000000083 -:105D20000000000000000000000000000000000073 -:105D30000000000000000000000000000000000063 +:105D2000000000000000000000005F5FF000FF00C6 +:105D30003C3C303050500000003C000000000000AF :105D40000000000000000000000000000000000053 :105D50000000000000000000000000000000000043 :105D60000000000000000000000000000000000033 -:105D70000000000000000000000000000000000023 -:105D80000000000000000000000000000000000013 +:105D700000000000102040800000069010204080AD +:105D80008800008800000000000000000000000003 :105D90000000000000000000000000000000000003 -:105DA00000000000000000000000000000000000F3 -:105DB00000000000000000000000000000000000E3 +:105DA0000000000000000000000000001069202F2B +:105DB000004D0008100020280040000800000000EE :105DC00000000000000000000000000000000000D3 :105DD00000000000000000000000000000000000C3 :105DE00000000000000000000000000000000000B3 -:105DF00000000000000000000000000000000000A3 -:105E00000000000000000000000000000000000092 +:105DF0000000000000006000000000001000000033 +:105E0000000000000800000000000000000000008A :105E10000000000000000000000000000000000082 :105E20000000000000000000000000000000000072 :105E30000000000000000000000000000000000062 @@ -46613,189 +46613,189 @@ :106080000000000000000000000000000000000010 :106090000000000000000000000000000000000000 :1060A00000000000000000000000000000000000F0 -:1060B00000000000000000000000000000000000E0 -:1060C00000000000000000000000000000000000D0 -:1060D00000000000000000000000000000000000C0 -:1060E00000000000000000000000000000000000B0 -:1060F000000000000004000000000000000000009C +:1060B00000000000000000000000000800000000D8 +:1060C00000000000000000040000020000000000CA +:1060D00000000000000000000020000000000000A0 +:1060E00000000000000000080000000000000000A8 +:1060F000000000000000000000010000000000009F :10610000000000000000000000000000000000008F :10611000000000000000000000000000000000007F :10612000000000000000000000000000000000006F :10613000000000000000000000000000000000005F -:10614000000000000000000000000000000000004F -:10615000000000000000000000000000000000003F -:1061600000004040000000000000000400000000AB -:10617000000000000000000000040000000000001B -:1061800000000000000000000002000200400000CB -:1061900000000000000000000000000000000000FF +:1061400000000000000000000000000080000000CF +:10615000000000000000000000000001000000003E +:1061600000000000000000000004410000000000EA +:1061700000000000000041000004000000000000DA +:10618000000000000000000000000000000000000F +:1061900000000000000000000000000400000000FB :1061A00000000000000000000000000000000000EF -:1061B00000000000000000000000000000000000DF -:1061C00000000000000000000000000000000000CF -:1061D00000000000000000000000000000000000BF -:1061E00000000000000000000200000000000000AD -:1061F000000002000000000000000000000000009D +:1061B00000000000000000000000000000840080DB +:1061C000000000400000000000800000008000800F +:1061D000008000800080008000800080008400C07B +:1061E00000800080008000800080008000000000AF +:1061F000008000000000000000000000000000001F :10620000000000000000000000000000000000008E -:10621000000002000000001000000000000000006C +:10621000000000000000000000000000000000007E :10622000000000000000000000000000000000006E -:10623000000000000000000000000000000000005E -:106240000000000000000000000000000000040842 -:10625000000000000000000000000000000000003E -:106260000000000003000000000000000000000823 -:10627000000000000000000000000000030000001B -:10628000000000000000000000000000000000000E -:1062900000080000000000000000000000000200F4 -:1062A00000000000000000000000000000000000EE -:1062B00000080000000000000000000000000000D6 -:1062C00000000000000000000000000000000000CE -:1062D00000000000000000000000000000000000BE -:1062E000000000000000000000100000000000009E -:1062F000000000000000000000000000000000009E -:10630000000000000000000000000000000000008D +:10623000000000000000000000000000000000411D +:106240000040000000010008000000400010004075 +:10625000004000400040004000400040004000413D +:10626000004100400040004000400040004000006D +:10627000000000400000000000000084000000005A +:106280000000000000000000000000000000000806 +:1062900000000000000000000000000000000000FE +:1062A00000000000000000000000000000000008E6 +:1062B00000000000000000000000000000000000DE +:1062C000018800050140008800C000080008004067 +:1062D0000000000000400000000000000108000075 +:1062E0000000002100000000000500000000000583 +:1062F00000400020002000200000000000000000FE +:10630000000000000000000000000000000000107D :10631000000000000000000000000000000000007D :10632000000000000000000000000000000000006D :10633000000000000000000000000000000000005D -:10634000000000000000000000000000000000004D -:10635000000000000000000000000000000000003D +:1063400000000220000020090340000500000000BA +:106350000001000000000001000000000000020039 :10636000000000000000000000000000000000002D -:10637000000000000000000000000000000000001D -:10638000000000000000000000000000000000000D -:1063900000000000000000000000000000000000FD +:106370000000000100010001100100000000000009 +:1063800000000000000000000000000021000000EC +:1063900005000500000000000010000000000000E3 :1063A00000000000000000000000000000000000ED :1063B00000000000000000000000000000000000DD -:1063C00000000000000000000000000000000020AD -:1063D00000000000000000000000000000000000BD -:1063E00000000000000000000000000000040000A9 -:1063F000000000000000000000000000000000009D -:10640000000000000000000000000000000000008C -:10641000000000000000000000000000000000007C +:1063C00000000000908010004000000000800000ED +:1063D000400000008200088082000200020002806B +:1063E000080002008300900082008300A0000000EB +:1063F000000000000000008000000000000000001D +:10640000002100000000000000000000000000006B +:10641000000000100000000000000000000000006C :10642000000000000000000000000000000000006C :10643000000000000000000000000000000000005C -:10644000000000000000000000000000000000004C -:1064500000000000000000840000000000000000B8 -:10646000000000000000000000000000000000002C -:10647000000000000000000000000000000000001C +:1064400000000000000004408482000200084104B3 +:1064500000000000000800000040030080008000F1 +:10646000884000008000028400000000020000005C +:1064700000000300000000000040000000000000D9 :10648000000000000000000000000000000000000C :1064900000000000000000000000000000000000FC :1064A00000000000000000000000000000000000EC :1064B00000000000000000000000000000000000DC -:1064C00000000000000000000000000000000000CC -:1064D00000000000000000000000000000000000BC -:1064E00000000000000000000000000000000000AC -:1064F000000000000000000000000000000000009C +:1064C000000000000000000010008203A000200077 +:1064D0000020000000400040000000000008000014 +:1064E0000000000082000000102182002000202116 +:1064F000820000008200820000000800000000000E :10650000000000000000000000000000000000008B :10651000000000000000000000000000000000007B :10652000000000000000000000000000000000006B :10653000000000000000000000000000000000005B -:10654000000000000000000000000000000000004B -:10655000000000000000000000000000000000003B -:10656000000000000000000000000000000000002B -:10657000000000000000000000000000000000001B +:10654000000000000000000000008800080008842F +:1065500080000001080000A1000100000000000010 +:10656000000000000000000000008000000080002B +:10657000800000000000000000000000000000009B :10658000000000000000000000000000000000000B -:1065900000000000000000000000000000000000FB +:1065900000000000000000000000090000000000F2 :1065A00000000000000000000000000000000000EB :1065B00000000000000000000000000000000000DB -:1065C00000000000000000000000000000000000CB -:1065D00000000000000000000000000000000000BB -:1065E000000000000021000000000000000000008A -:1065F000000000000000000000000000000000009B -:10660000000000000000000000000000000000008A +:1065C000000000000000000000000000402000402B +:1065D0008209100000400040002100090200000074 +:1065E00000000000A021000008000000A100000041 +:1065F0000221100000408200A04000400020000066 +:1066000000000040000000000021000000008400A5 :10661000000000000000000000000000000000007A :10662000000000000000000000000000000000006A :10663000000000000000000000000000000000005A -:10664000000000000000000000000000000000004A -:106650000000000000000200000000000200000036 -:10666000000000000000000000000000000000002A -:10667000000000000000000000000000000000001A -:10668000000000000000000000000000000000000A +:106640000000000000000000000000000000000149 +:106650000091210888000301000103000800A00048 +:1066600000002000080000000000000000000400FE +:106670000000A100A00000010000000100010001D5 +:106680000000030000010000000000000000000006 :1066900000000000000000000000000000000000FA :1066A00000000000000000000000000000000000EA :1066B00000000000000000000000000000000000DA :1066C00000000000000000000000000000000000CA -:1066D00000000000000000000000000000000000BA -:1066E00000000000000000000000000000000000AA -:1066F000000000000000000000000000000000009A -:106700000000000000000000000000000000000089 +:1066D00001C100000201000000C000A00000000095 +:1066E00010C000000000000000C000000008000012 +:1066F00000C100000000000100C000020000000016 +:1067000000C0004000400200000000000000000047 :106710000000000000000000000000000000000079 :106720000000000000000000000000000000000069 :106730000000000000000000000000000000000059 :106740000000000000000000000000000000000049 -:106750000000000000000000000000000000000039 -:106760000000000000000000000000000000000029 -:106770000000000000000000000000000000000019 -:106780000000000000000000000000000000000009 +:10675000000020C10021090200090080000005009E +:106760000000808000000000000000800000008029 +:10677000000040C1002104400008008000800000AB +:1067800000004080000000008000000000000000C9 :1067900000000000000000000000000000000000F9 :1067A00000000000000000000000000000000000E9 :1067B00000000000000000000000000000000000D9 :1067C00000000000000000000000000000000000C9 -:1067D00000000000000000000000000000000000B9 -:1067E00000000000000000000000000000000000A9 -:1067F0000000000000000000000000000000000099 -:106800000000000000000000000000000000000088 +:1067D00000000000200011000200C10000020000C3 +:1067E00000008000000000400000800000008000E9 +:1067F00000008000400000004000C11000000000C8 +:1068000000008000000080210000800000000000E7 :106810000000000000000000000000000000000078 :106820000000000000000000000000000000000068 :106830000000000000000000000000000000000058 :106840000000000000000000000000000000000048 -:106850000000000000000000000000000000000038 -:106860000000000000000000000000000000000028 -:106870000000000000000000000000000000000018 -:106880000000000000000000000000000000000008 +:1068500000000000000001A000000100C1000001D4 +:1068600000000000C000000000000000C0000000A8 +:1068700010000000C000004000000000C101000046 +:1068800000000000C000400004000000C000000044 :1068900000000000000000000000000000000000F8 :1068A00000000000000000000000000000000000E8 :1068B00000000000000000000000000000000000D8 :1068C00000000000000000000000000000000000C8 -:1068D00000000000000000000000000000000000B8 -:1068E00000000000000000000000000000000000A8 -:1068F0000000000000000000000000000000000098 -:106900000000000000000000000000000000000087 +:1068D000000000000000000021010000018901C14A +:1068E00000000000000200C008000000000000C01E +:1068F00000000010000000C020000000058800C05B +:1069000000000000000200C040400002004002C041 :106910000000000000000000000000000000000077 :106920000000000000000000000000000000000067 :106930000000000000000000000000000000000057 :106940000000000000000000000000000000000047 -:106950000000000000000000000000000000000037 -:106960000000000000000000000000000000000027 -:106970000000000000000000000000000000000017 -:106980000000000000000000000000000000000007 -:1069900000000000000000000000000000000000F7 +:106950000000000000000000000002200009058285 +:1069600009C10500000000800080800000000000D8 +:10697000008000000080000000800300000088808C +:106980000380000000000080008000000080000004 +:1069900080800000000000000000000000000000F7 :1069A00000000000000000000000000000000000E7 :1069B00000000000000000000000000000000000D7 :1069C00000000000000000000000000000000000C7 -:1069D00000000000000000000000000000000000B7 -:1069E00000000000000000000000000000000000A7 -:1069F0000000000000000000000000000000000097 -:106A00000000000000000000000000000000000086 -:106A10000000000000000000000000000000000076 +:1069D000000000000000000000000000418089C0AD +:1069E0000200110080000090000080008000000084 +:1069F000000000008000000000000000C18009824B +:106A00000900000980000080000080008000004133 +:106A100000800000000000000000000000000000F6 :106A20000000000000000000000000000000000066 :106A30000000000000000000000000000000000056 :106A40000000000000000000000000000000000046 -:106A50000000000000000000000000000000000036 -:106A60000000000000000000000000000000000026 -:106A70000000000000000000000000000000000016 -:106A80000000000000000000000000000000000006 -:106A900000000000000000000000000000000000F6 +:106A5000000000000000000000000000000001082D +:106A6000059001000000C000000300000400C00009 +:106A7000000200000000C000000000000200C10889 +:106A8000119100000000C000000200000400C000DE +:106A900040414004400000000000000000000000F1 :106AA00000000000000000000000000000000000E6 :106AB00000000000000000000000000000000000D6 :106AC00000000000000000000000000000000000C6 :106AD00000000000000000000000000000000000B6 -:106AE00000000000000000000000000000000000A6 +:106AE000500A00E007000000600000E0070000001E :106AF0000000000000000000000000000000000096 -:106B00000000000000000000000000000000000085 -:106B10000000000000000000000000000000000075 +:106B0000840000E00700000000000000000000001A +:106B10000006000007004200000000000000000026 :106B20000000000000000000000000000000000065 :106B30000000000000000000000000000000000055 :106B40000000000000000000000000000000000045 :106B50000000000000000000000000000000000035 -:106B60000000000000000000000000000000000025 -:106B70000000000000000000000000000000000015 -:106B80000000000000000000000000000000000005 -:106B900000000000000000000000000000000000F5 +:106B60000000FF00FF00FF0000003C3C0000FF00B1 +:106B70000000FFFF0000666600003C3C0000F0F0F3 +:106B80000000FF000000FF0000003C3C0000FF0090 +:106B9000000000F0003C0030003C0000000000005D :106BA00000000000000000000000000000000000E5 :106BB00000000000000000000000000000000000D5 :106BC00000000000000000000000000000000000C5 :106BD00000000000000000000000000000000000B5 -:106BE00000000000000000000000000000000000A5 -:106BF0000000000000000000000000000000000095 -:106C00000000000000000000000000000000000084 -:106C10000000000000000000000000000000000074 +:106BE00000000000FF00FF00FF0000003C3C000030 +:106BF000FF00000000000000666600003C3C000052 +:106C0000F0F00000FF000000FF0000003C3C00002E +:106C1000FF00000000000000003000000000000045 :106C20000000000000000000000000000000000064 :106C30000000000000000000000000000000000054 :106C40000000000000000000000000000000000044 @@ -46808,32 +46808,32 @@ :106CB00000000000000000000000000000000000D4 :106CC00000000000000000000000000000000000C4 :106CD00000000000000000000000000000000000B4 -:106CE00000000000000000000000000000000000A4 -:106CF0000000000000000000000000000000000094 -:106D00000000000000000000000000000000000083 -:106D10000000000000000000000000000000000073 +:106CE00000000000000000000000FFFF00006666DA +:106CF000000000FF000066660000FFFF00006666FF +:106D000000000F0F00000F0F0000FFFF000066667D +:106D1000000000FFFFFF999900F060601818080854 :106D20000000000000000000000000000000000063 :106D30000000000000000000000000000000000053 :106D40000000000000000000000000000000000043 :106D50000000000000000000000000000000000033 :106D60000000000000000000000000000000000023 -:106D70000000000000000000000000000000000013 -:106D80000000000000000000000000000000000003 -:106D900000000000000000000000000000000000F3 -:106DA00000000000000000000000000000000000E3 +:106D70006666000000FF000066660000000000007C +:106D8000666600000F0F00000F0F000000000000FB +:106D90006666000000FFFFFF9999000000000000F8 +:106DA00008080000000000000000000000000000D3 :106DB00000000000000000000000000000000000D3 :106DC00000000000000000000000000000000000C3 :106DD00000000000000000000000000000000000B3 -:106DE00000000000000000000000000000000000A3 -:106DF0000000000000000000000000000000000093 -:106E00000000000000000000000000000000000082 -:106E10000000000000000000000000000000000072 -:106E20000000000000000000000000000000000062 +:106DE00000000000000000000000000045128029A3 +:106DF0008020920245E7800F802D92024082800021 +:106E00000020920240828000002092024582800988 +:106E100080259202408280000020820210002028FB +:106E2000004000080000000000000000000000001A :106E30000000000000000000000000000000000052 :106E40000000000000000000000000000000000042 :106E50000000000000000000000000000000000032 -:106E60000000000000000000000000000000000022 -:106E70000000000000000000000000000000000012 +:106E600000000000000000000000000000005000D2 +:106E7000101028003000000000000000000000009A :106E80000000000000000000000000000000000002 :106E900000000000000000000000000000000000F2 :106EA00000000000000000000000000000000000E2 @@ -46841,237 +46841,237 @@ :106EC00000000000000000000000000000000000C2 :106ED00000000000000000000000000000000000B2 :106EE00000000000000000000000000000000000A2 -:106EF0000000000000000000000000000000000092 +:106EF00050001010280030000000000000000000CA :106F00000000000000000000000000000000000081 -:106F10000000000000000000000000000000000071 +:106F10005500050500000000000000000000000012 :106F20000000000000000000000000000000000061 :106F30000000000000000000000000000000000051 :106F40000000000000000000000000000000000041 :106F50000000000000000000000000000000000031 :106F60000000000000000000000000000000000021 -:106F70000000000000000000000000000000000011 +:106F70000000F00030003C00300000000000000085 :106F80000000000000000000000000000000000001 -:106F900000000000000000000000000000000000F1 +:106F90000000F00030003C0028000000000000006D :106FA00000000000000000000000000000000000E1 :106FB00000000000000000000000000000000000D1 :106FC00000000000000000000000000000000000C1 :106FD00000000000000000000000000000000000B1 :106FE00000000000000000000000000000000000A1 -:106FF0000000000000000000000000000000000091 +:106FF0000000000000003000000030000000000031 :107000000000000000000000000000000000000080 -:107010000000000000000000000000000000000070 +:107010000000000000003000000028000000000018 :107020000000000000000000000000000000000060 :107030000000000000000000000000000000000050 :107040000000000000000000000000000000000040 :107050000000000000000000000000000000000030 :107060000000000000000000000000000000000020 -:107070000000000000000000000000000000000010 -:107080000000000000000000000000000000000000 -:1070900000000000000000000000000000000000F0 -:1070A00000000000000000000000000000000000E0 -:1070B00000000000000000000000000000000000D0 +:1070700000000000000000000000200000000000F0 +:1070800000000040000000002000000000000000A0 +:1070900000000000000001000100050004000000E5 +:1070A0000000C0400000C00088008800C000000050 +:1070B00000000000000000010000000000000000CF :1070C00000000000000000000000000000000000C0 :1070D00000000000000000000000000000000000B0 :1070E00000000000000000000000000000000000A0 :1070F0000000000000000000000000000000000090 -:10710000000000000000000000000000000000007F -:10711000000000000000000000000000000000006F -:10712000000000000000000000000000000000005F -:10713000000000000000000000000000000000004F +:10710000000020000001000000000000000000005E +:107110000000000000000000040004008200800065 +:107120004100090009014100090000004100090077 +:107130000900000000000000000000000000000046 :10714000000000000000000000000000000000003F :10715000000000000000000000000000000000002F :10716000000000000000000000000000000000001F -:10717000000000000000000000000000000000000F -:1071800000000200000000000200000000000000FB +:10717000000000000000000000000080000000008F +:1071800000000000000000000000000000000000FF :1071900000000000000000000000000000000000EF :1071A00000000000000000000000000000000000DF :1071B00000000000000000000000000000000000CF :1071C00000000000000000000000000000000000BF -:1071D00000000200000000000000000000000000AD -:1071E000000000000000000000000000000002009D -:1071F000020000000000000000000000020000008B -:1072000000000000800000000000000000000000FE -:10721000000000000000000000000000000000006E -:1072200000000000000000000000000000820000DC -:107230000000000000080000000000000000000046 -:10724000000000000000000000000000000002003C -:107250000200020000000008000000000000000022 -:10726000000000000000020000000000000002001A -:107270000000000002000008000000000000000004 -:1072800000000000000000000000000000000000FE -:1072900000000000000000080000000000000000E6 -:1072A00000000000000000000000000000000000DE +:1071D00000000000000000000000000000000000AF +:1071E000000000000000000000000000000000009F +:1071F000000000000000000000000000001000007F +:10720000000000880000000000000000000000886E +:1072100000000000008800000000000000000000E6 +:1072200000000000000000000082000000000000DC +:107230000084000000820082008200000000000044 +:10724000000000000000000000000000000000003E +:10725000000000000000000000000000000000002E +:10726000000000000000000000000000000000001E +:10727000000000000000000000000000000000000E +:10728000000000000041000000410000000000007C +:107290000000000000000021002100210021002149 +:1072A00000050000C0020002840200110002000973 :1072B00000000000000000000000000000000000CE -:1072C00000000000000000000400000000000000BA -:1072D00000000000000000000000000000000000AE +:1072C00000020011000200000000000000000000A9 +:1072D000080008000800080000000000000000008E :1072E000000000000000000000000000000000009E :1072F000000000000000000000000000000000008E :10730000000000000000000000000000000000007D -:10731000000000000000000000000000000000006D -:10732000000000000000000000000000000000005D -:10733000000000000000000000000000000000004D -:10734000000000000000000000000000000000003D +:10731000000000000000000011000000000000005C +:107320000000000000000000090000C00000000094 +:1073300000000000410000004100000000000000CB +:10734000000000000000080008000000000000002D :10735000000000000000000000000000000000002D :10736000000000000000000000000000000000001D :10737000000000000000000000000000000000000D -:1073800000000000000000000000000000000000FD -:10739000000000000000004000400000000000006D -:1073A00000000000000000000000000000000000DD +:10738000000008000800000004800000C0000000A9 +:10739000C00008008200000008000000080008008B +:1073A00000008200020008008300A000000001002D :1073B00000000000000000000000000000000000CD :1073C00000000000000000000000000000000000BD :1073D00000000000000000000000000000000000AD :1073E000000000000000000000000000000000009D :1073F000000000000000000000000000000000008D -:10740000000000000000000000000000000000007C -:10741000000000000000000000000000000000006C -:10742000000000000000000000000000000000005C -:10743000000000000000000000000000000000004C +:10740000000000000000410000880820000000008B +:107410000000000000000000080000000000000064 +:1074200000000800000080000000040000000000D0 +:1074300002820000000011000000000000000000B7 :10744000000000000000000000000000000000003C :10745000000000000000000000000000000000002C :10746000000000000000000000000000000000001C :10747000000000000000000000000000000000000C -:10748000000000000000900000000000000000006C -:1074900000000000000000000011000000000000DB -:1074A00000000000000000000000000000000000DC -:1074B00000000000000000000000000000000000CC -:1074C00000000000000000000000000000000000BC +:1074800000000000000020008200C0000041000059 +:10749000100000080800000000000008002108009B +:1074A000000000008202040004000400C000A000EC +:1074B00000000000A0000002081100000009000206 +:1074C00000000002001100000000000000000000A9 :1074D00000000000000000000000000000000000AC :1074E000000000000000000000000000000000009C :1074F000000000000000000000000000000000008C -:10750000000000000000000000000000000000007B -:10751000000000000000000000000000000000006B -:10752000000000000000000000000000000000005B +:1075000000000000000000008000000000000000FB +:107510000000080000000000000000000000000063 +:10752000000000000000000080848000A1000084B2 :10753000000000000000000000000000000000004B :10754000000000000000000000000000000000003B -:10755000000000000000000000000000000000002B +:107550000000000000000800000000000000000023 :10756000000000000000000000000000000000001B :10757000000000000000000000000000000000000B -:1075800000000000000000000000000000000000FB -:1075900000000000000000000000000800000000E3 -:1075A00000000000000000000000000000000000DB -:1075B00000000000000000000000000000000000CB +:107580000000000000000000000004004000A00017 +:107590000011C02040000000000082000000000038 +:1075A0000000A0088208400810000200000002004D +:1075B00002000002C00300000002000000004000C2 :1075C00000000000000000000000000000000000BB :1075D00000000000000000000000000000000000AB :1075E000000000000000000000000000000000009B :1075F000000000000000000000000000000000008B :10760000000000000000000000000000000000007A :10761000000000000000000000000000000000006A -:10762000000000000000000000000000000000005A -:10763000000000000000000000000000000000004A -:10764000000000000000000000000000000000003A +:1076200000000000000000000000000080000000DA +:1076300080008000000000000000000000001188B1 +:1076400040000000000000002100000000000000D9 :10765000000000000000000000000000000000002A :10766000000000000000000000000000000000001A :10767000000000000000000000000000000000000A -:1076800000000000000000000000000000000000FA -:1076900000000000000090080090008890A000000A -:1076A00000000000000000000000000000000000DA -:1076B00000000000000000000000000000000000CA -:1076C00000000000000000000000000000000000BA +:1076800000000000000000000000000000000100F9 +:10769000000001000000041000200004100210820D +:1076A000000800022010000000000000000000C0E0 +:1076B0000082000490A020880020002010104120AB +:1076C00040020082401000000000000000000000A6 :1076D00000000000000000000000000000000000AA :1076E000000000000000000000000000000000009A :1076F000000000000000000000000000000000008A :107700000000000000000000000000000000000079 -:1077100000000000000000000080000000000000E9 -:107720000000000000000000000000000000000059 -:107730000000000000000000000000000000000049 -:107740000000000000000000000000000000000039 +:1077100011000000200000008080000000800000B8 +:1077200080000080008000000000000000000000D9 +:1077300000800000008000001000000000008000B9 +:107740008800000000800000000000000000000031 :107750000000000000000000000000000000000029 :107760000000000000000000000000000000000019 :107770000000000000000000000000000000000009 :1077800000000000000000000000000000000000F9 -:107790000000000000000000000000000084000065 -:1077A0000080000000000000000000000000000059 -:1077B00000000000000000000000000000000000C9 -:1077C00000000000000000000000000000000000B9 +:1077900000000009000400800000000000A00000BC +:1077A0000080000000910000008000000000000048 +:1077B00000000000000280808000800000A1808026 +:1077C00080800000008580A0008000000000000094 :1077D00000000000000000000000000000000000A9 :1077E0000000000000000000000000000000000099 :1077F0000000000000000000000000000000000089 :107800000000000000000000000000000000000078 -:1078100000000000000000000000000000000082E6 -:1078200000900010000000000000000000000000B8 -:107830000000000000000000000000000000000048 -:107840000000000000000000000000000000000038 +:10781000000000000000000000400082820002C161 +:1078200020A020C0900002C00220A0C000000000E4 +:1078300000000000200000010402C000020010C08F +:10784000040202C0400010C0400288C000000000D6 :107850000000000000000000000000000000000028 :107860000000000000000000000000000000000018 :107870000000000000000000000000000000000008 :1078800000000000000000000000000000000000F8 -:107890000000000000000000000000000000108850 -:1078A000001002A09008000000000000000000008E -:1078B00000000000000000000000000000000000C8 -:1078C00000000000000000000000000000000000B8 +:10789000000000000000000000000000000089104F +:1078A0000088C040A00205100010C0A010400000D9 +:1078B000000000000000040000400004C0C091105F +:1078C0000088C040102091020010C0021002000089 :1078D00000000000000000000000000000000000A8 :1078E0000000000000000000000000000000000098 :1078F0000000000000000000000000000000000088 :107900000000000000000000000000000000000077 :107910000000000000000000000000000000000067 -:1079200000000000800000000000000000000000D7 -:107930000000000000000000000000000000000047 -:107940000000000000000000000000000000000037 +:107920004100000080000080C100000080000000D5 +:107930000000000000000000800000000080808047 +:107940004180000080800000410000008000008035 :107950000000000000000000000000000000000027 :107960000000000000000000000000000000000017 :107970000000000000000000000000000000000007 :1079800000000000000000000000000000000000F7 -:1079900000000000000000000000000000000000E7 -:1079A00000000000000000000000000000000000D7 -:1079B00000000000000000000000000000000000C7 -:1079C00000000000000000000000000000000000B7 -:1079D00000000000000000000000000000000000A7 +:1079900000000000000000000000800080200000C7 +:1079A0008000800080000000000080208080800037 +:1079B000000000000000000000008000800880003F +:1079C0008000004000000000000080008000800077 +:1079D0008000000000000000000000000000000027 :1079E0000000000000000000000000000000000097 :1079F0000000000000000000000000000000000087 :107A00000000000000000000000000000000000076 -:107A10000000000000000000000000000000000066 -:107A200000000000020088008800880000000000BC -:107A30000000000000000000000000000000000046 -:107A40000000000000000000000000000000000036 -:107A50000000000000000000000000000000000026 +:107A10000000000000000000000000000200020161 +:107A2000C00004001000040202888800080104203D +:107A3000088820000000000000000000C0000401D1 +:107A400004200400080040109088880010001040B6 +:107A500002201000000000000000000000000000F4 :107A60000000000000000000000000000000000016 :107A70000000000000000000000000000000000006 :107A800000000000000000000000000000000000F6 -:107A900000000000000000000000000000000000E6 -:107AA00000000000000000000000000000000000D6 -:107AB00000000000000000000000000000000000C6 -:107AC00000000000000000000000000000000000B6 -:107AD00000000000000000000000000000000000A6 +:107A90000000000000000000000000000000000ADC +:107AA00000E0070000000000000000004842000065 +:107AB0000000000048420000000000000000000A32 +:107AC00080000700000A000000000000484200009B +:107AD000000000004842000000000000000000001C :107AE0000000000000000000000000000000000096 :107AF0000000000000000000000000000000000086 :107B00000000000000000000000000000000000075 :107B10000000000000000000000000000000000065 -:107B20000000000000000000F03AFF3AFFFFFFFFF6 -:107B30000000000000000000000000000000000045 -:107B40000000000000000000000000000000000035 -:107B50000000000000000000000000000000000025 +:107B200082BEFCFC00000000041008200009006078 +:107B300000810024028008200000000000000000F6 +:107B4000F0FF0C0CFF00F00002088020000009602C +:107B50000000096000090060000000000000000053 :107B60000000000000000000000000000000000015 :107B70000000000000000000000000000000000005 :107B800000000000000000000000000000000000F5 :107B900000000000000000000000000000000000E5 -:107BA00000000000000000000000003A0F3AAAA800 -:107BB000FFFD0000000000000000000000000000C9 -:107BC00000000000000000000000000000000000B5 -:107BD00000000000000000000000000000000000A5 +:107BA000000082BEC0C00000000001400280090049 +:107BB000600081002400014004100000000000006B +:107BC0000000FAFA0C0C0000F000010440100960FB +:107BD00000000960000009006000000000000000D3 :107BE0000000000000000000000000000000000095 :107BF0000000000000000000000000000000000085 :107C00000000000000000000000000000000000074 :107C10000000000000000000000000000000000064 -:107C2000000000000000000000000000FEAE5E0E3C -:107C3000FFFFFFFF00000000000000000000000048 -:107C40000000000000000000000000000000000034 -:107C50000000000000000000000000000000000024 +:107C200000000000000000000000000004011040FF +:107C300006900000240081000408102000000000CD +:107C4000000000005F3FF0F000FF003C2400002433 +:107C500006900000440088004400880000000000F6 :107C60000000000000000000000000000000000014 :107C70000000000000000000000000000000000004 :107C800000000000000000000000000000000000F4 :107C900000000000000000000000000000000000E4 -:107CA0000000000000000000000000000000F4A43C -:107CB0005404FFFFFFFF0000000000000000000070 -:107CC00000000000000000000000000000000000B4 -:107CD00000000000000000000000000000000000A4 +:107CA00000000000000000000000000000000802CA +:107CB0002080000006900024008101024080000026 +:107CC0000000000000005F3F00000000003C810059 +:107CD00000810000069000440088004400880000F5 :107CE0000000000000000000000000000000000094 :107CF0000000000000000000000000000000000084 :107D00000000000000000000000000000000000073 :107D10000000000000000000000000000000000063 -:107D20000000000000000000000000000000000053 -:107D30000000000000C00000000000000000000083 -:107D40000000000000000000000000000000000033 -:107D50000000000000000000000000000000000023 +:107D200000000000000000000061002F000D01A015 +:107D300060000000000010000000000000000800CB +:107D4000000000000000000010082028004000088B +:107D500060000000000010000000000000000800AB :107D60000000000000000000000000000000000013 :107D70000000000000000000000000000000000003 :107D800000000000000000000000000000000000F3 @@ -47109,191 +47109,191 @@ :107F800000000000000000000000000000000000F1 :107F900000000000000000000000000000000000E1 :107FA00000000000000000000000000000000000D1 -:107FB00000000000000000000000000000000000C1 -:107FC00000000000400000000000010001000080EF -:107FD00000800000000000000000008000000000A1 -:107FE0000000000000000000000000000000000091 -:107FF00000800001002001000080008000800080DF -:108000000020002000800080008000800000000030 +:107FB0000000840084008400200000000000000015 +:107FC000000400002000000000000000000000008D +:107FD000000400000000000020000000000000007D +:107FE0000000000020000000000000000000000071 +:107FF000000400030000000000000000000000007A +:10800000000000040000000000000000000000006C :108010000000000000000000000000000000000060 -:108020000000000000000000000000000000000050 -:1080300000000000000000020000000000000090AE -:1080400000000000000080000000000004000400A8 -:1080500000200020000000000000000000100000D0 +:10802000000000040000000000000000000000004C +:108030000000000000000000000000000000000040 +:108040000000000000000000000000000000000030 +:108050000000000000000000000020000000000000 :108060000000000000000000000000000000000010 -:10807000000000200000000104000020002000207B -:10808000002000030001002000200020002000004C +:108070000000000000000000000000000000000000 +:1080800000000000000000000000000000000000F0 :1080900000000000000000000000000000000000E0 :1080A00000000000000000000000000000000000D0 :1080B00000000000000000000000000000000000C0 -:1080C000A100C0000000000000000000000000004F -:1080D000010000200020000000000000020000411C -:1080E000020000000000000000000000200000006E -:1080F0000000000004000000010001000100010078 -:10810000040004000400040004000400040004004F +:1080C000840000000000000000000000000000002C +:1080D0000000000000000000000000000000008020 +:1080E0000080000000000080000000000000000090 +:1080F00000000000000000000000000000002080E0 +:10810000008000000000000000002000000000804F :10811000000000000000000000000000000000005F -:108120000000020000000400000000000000000049 -:10813000000000000200000002000000000000003B -:1081400000004000000000000200000000000000ED -:108150000000040000010001040000000000000015 -:108160000008000000000000000000000000840083 -:1081700000840000000080000000040004000400EF -:10818000040080088000800084008000800080005F -:108190008000000800000000000000000000000057 -:1081A00000000208000000000000000000000000C5 -:1081B0000000028402000000020000000000000035 -:1081C00000000004000000000000000000000000AB -:1081D000000000000020000000000000000000007F -:1081E000000000000000000000000000000000008F -:1081F000000000000000000000000000000000007F -:10820000000000000010000000000000000000005E +:10812000000000000000000000000000000000004F +:108130000000000000000000000800000000200017 +:10814000000000000000000000000010000000001F +:108150000000000000000000000800000000000017 +:10816000004000400084008400400000000000083F +:10817000000000840084008400000008000000006B +:10818000004000400000000000000000000000006F +:108190000040000000000000000000080000000097 +:1081A00000000000000000000000000000000000CF +:1081B00000000000000000000000000000000000BF +:1081C00000000000000000000000000000000000AF +:1081D000000000000000000000000000000000415E +:1081E0000000000800000000008000000000008582 +:1081F000008000000000004000400000008000A15E +:108200000080000000850040004000400000004069 :10821000000000000000000000000000000000005E :10822000000000000000000000000000000000004E -:10823000000000000000000000000000000000003E -:108240000000000000010000000000000084008227 -:10825000000000000000000100000000000000001D -:10826000000000000000000000000000000000000E -:1082700000000000000800000000000000000000F6 -:1082800000000000000000000000000000000000EE -:1082900000000000000000000000000000000000DE +:10823000000000000000000000000000000021001D +:1082400003000300000000000800410021080000B6 +:1082500000A0000003A000080008030808000800B0 +:1082600008000308030000000300034000840084AA +:108270000040004000A000A000A100A100000040BC +:1082800000400040000000400001008500010000A7 +:1082900000010000000000000000000000000000DD :1082A00000000000000000000000000000000000CE -:1082B00000000000000000000000000000000800B6 -:1082C00000000000000004C00000000000000000EA -:1082D000000000000000000000000000000000009E -:1082E0000000A000000000000000000000000100ED -:1082F00000000000000000000000A00000000000DE -:10830000000000000000000000400000000000002D +:1082B00000000000000000000000000000000000BE +:1082C00000000000400082000000000040000000AC +:1082D00000000800820008000000400008000000C4 +:1082E00000000000000002000000000000009000FC +:1082F00000001000000010009000A000000000002E +:1083000000000000820000001000000000000000DB :10831000000000000000000000000000000000005D :10832000000000000000000000000000000000004D :10833000000000000000000000000000000000003D -:10834000000000000000000080200000000000008D -:10835000000000820000000000000000000000009B -:10836000000000000000000000000000000000000D -:1083700020000000000000000000000000000000DD -:1083800000000000000000000000000000000000ED +:10834000000000000000000000000000000000002D +:10835000000000000000000000000000000000001D +:10836000000000000000000080000000000000008D +:1083700000000000800000008000000000000000FD +:10838000000000000000000000008000000000006D :1083900000000000000000000000000000000000DD :1083A00000000000000000000000000000000000CD :1083B00000000000000000000000000000000000BD -:1083C000000000000000000000000000040041A0C8 -:1083D0000580001100004020A000002000000000E7 -:1083E0000000000000000000000000000400000089 -:1083F0000000000000008200000000000000A0005B -:108400000000000300000000000000000000000069 -:1084100082000000000000000000000000000000DA +:1083C000000082000000000000000000000000002B +:1083D000000000000000000000000000000000009D +:1083E000000000000000000000000080008003008A +:1083F00002000080010000000000000410000000E6 +:108400002000000082000100000001400000100078 +:1084100000002000000000000000004000000000FC :10842000000000000000000000000000000000004C :10843000000000000000000000000000000000003C -:10844000000000000000000000000000080882A0FA -:10845000A005A004000021000001000000010000B0 -:10846000000000000000000000000000000000000C -:1084700000000000000000000000000000000000FC -:1084800000000000000000000000000000000000EC -:1084900000000000000000000000000000000000DC +:10844000000000000000000000000000000800081C +:1084500000080008001000000000210800000000D3 +:10846000000000000000000003A0000000400040E9 +:1084700082A0A1A0004002A000002108000180000D +:108480000000800000000000020000000201000067 +:1084900080000000800000000000000000010000DB :1084A00000000000000000000000000000000000CC :1084B00000000000000000000000000000000000BC -:1084C00000000000000000000000000000000000AC -:1084D000210004004000040004020400040000081D -:1084E0000000C000000000000000000000000000CC -:1084F00000000000000000000800820000000000F2 -:10850000A0000000000000000000A000000000002B -:108510000000A000000000000000000000000000BB +:1084C00000000000000000000000000000000800A4 +:1084D0000000000008000000000000000000000094 +:1084E000000000000000000000000000400000004C +:1084F00002000000400000040204400400080040A4 +:108500000040000400000000824002000040000023 +:1085100000040000000000000040000000400000D7 :10852000000000000000000000000000000000004B :10853000000000000000000000000000000000003B :10854000000000000000000000000000000000002B -:108550000000840080008000800080018000A10075 +:10855000000000000000000000000000000000001B :10856000000000000000000000000000000000000B -:1085700000000000000000000000000000000000FB -:1085800000000000000000000000000000000000EB -:1085900000000000000000000000000000000000DB +:1085700000008000000000000001800100010001F7 +:108580000001000100000000000000018000000167 +:1085900000000001000000000000000100000001D8 :1085A00000000000000000000000000000000000CB :1085B00000000000000000000000000000000000BB :1085C00000000000000000000000000000000000AB -:1085D000000000C085909100000000C000910000E4 -:1085E000000100000000000000000000000000008A -:1085F000000000000000000000000000000000007B -:1086000000000000000000000000000000C000901A -:108610000000000000C000900000000000C00090BA -:10862000000000000000000000000000000000004A +:1085D000000000000000000000000000000000009B +:1085E000000000000000000000000000000000008B +:1085F000000000C000080000080001C18800000160 +:10860000820000C1000001018800000002C00000DB +:108610000002000000C100004101880002C000000B +:108620000002000000000000000000000000000048 :10863000000000000000000000000000000000003A :10864000000000000000000000000000000000002A -:1086500000000000118021800300000000910091C3 -:1086600000050011000000000000000000000000F4 -:1086700000000000000000000000000000000000FA -:10868000000000000000000000000000000000806A -:1086900000800000000000800080000000000080DA -:1086A000008000000000000000000000000000004A +:10865000000000000000000000000000000000001A +:10866000000000000000000000000000000000000A +:1086700000000000008000800000800009C1A1030C +:108680000902800000C111050409800000008080FB +:1086900000000080000000C11105040980038080F3 +:1086A000000000800000000000000000000000004A :1086B00000000000000000000000000000000000BA :1086C00000000000000000000000000000000000AA -:1086D0000000000000000008890008418080008040 -:1086E0008000000080800000008000030080000007 -:1086F0000000000000000000001000000000000367 -:1087000000000000000000000000000080000000E9 -:108710000000800000008080000080000000808059 -:1087200000008000000080800000000000000000C9 +:1086D000000000000000000000000000000000009A +:1086E000000000000000000000000000000000008A +:1086F00000000000000000000000000080002000DA +:1087000005000900C100008002008500C1000000D2 +:10871000800000000000800005800000C000C10053 +:1087200000000000000080000000000000000000C9 :108730000000000000000000000000000000000039 :108740000000000000000000000000000000000029 -:108750000000000000000000002182000100C09025 -:10876000000282000000C09000000004000000042D -:1087700000000000000000000000000000000000F9 -:108780000000000000000000000000000000900059 -:108790000000000082000000C09000008200000085 -:1087A000C090000082000000C090000000000000A7 +:108750000000000000000000000000000000000019 +:108760000000000000000000000000000000000009 +:108770000000000000000000000000000000C00039 +:1087800001A000000100C100008801009000C100AC +:108790000000080000000000C000008800009000F9 +:1087A000C100000000000000C00000000000000048 :1087B00000000000000000000000000000000000B9 :1087C00000000000000000000000000000000000A9 -:1087D0000000000000000000000000001000A09059 -:1087E00001C100000000009000C000000000040073 -:1087F0000000000000000000000000000000C000B9 -:108800000000000000000000010000000000000067 -:108810000000000000000000009000C00000000008 -:10882000409000C000000000009000C00000000068 +:1087D0000000000000000000000000000000000099 +:1087E0000000000000000000000000000000000089 +:1087F0000000000000000000000000000000000079 +:1088000000C000010001830191C12000910100001E +:1088100000C1000000000000000000C02000900027 +:10882000000000C100000000000000C000000000C7 :108830000000000000000000000000000000000038 :108840000000000000000000000000000000000028 -:108850000000000000000000000000000000800098 -:1088600080A04190000003004180008005000000CE -:108870008000000000000000000000000000000078 -:108880008000000000000000000008000000000060 -:1088900000000000000000000000008000800000D8 -:1088A00000000080008000000000008000800000C8 +:108850000000000000000000000000000000000018 +:108860000000000000000000000000000000000008 +:1088700000000000000000000000000000000000F8 +:108880000000008000200203400289C180098202AA +:10889000050500C100000000000000000080800904 +:1088A0008000400300C100000000000000800000C4 :1088B00000000000000000000000000000000000B8 :1088C00000000000000000000000000000000000A8 -:1088D0000000000000000000000000000000A040B8 -:1088E000400441004000A111800800004000000346 -:1088F0000021000000000000000000000000000057 -:1089000000008000000000000000000000000000E7 -:10891000000500000000000080118005000000003C -:10892000801180050000000080118005000000001B +:1088D0000000000000000000000000000000000098 +:1088E0000000000000000000000000000000000088 +:1088F00000000000000000000000000000008000F8 +:10890000000000800000C189838002004000C18017 +:10891000020985000903000080000000000000003B +:10892000C1C040098300090380000000000000006E :108930000000000000000000000000000000000037 :108940000000000000000000000000000000000027 :108950000000000000000000000000000000000017 -:108960009000000100000000C10120000000000094 +:108960000000000000000000000000000000000007 :1089700000000000000000000000000000000000F7 -:1089800084000000900000000000000000000000D3 -:1089900000000000000000000000C00120000000F6 -:1089A0000000C001200000000000C0012000000005 -:1089B00000000000000000000000000000000000B7 +:108980000800000000080000C141201001000000A4 +:10899000C1C00101880001010000C000000000000A +:1089A0004000C1C0000188000101C000004000007B +:1089B0004000000000000000000000000000000077 :1089C00000000000000000000000000000000000A7 :1089D0000000000000000000000000000000000097 -:1089E00000004121008841000041000600004100D4 -:1089F0000000001100004100000000000000000025 -:108A000000000000000007000042000000E000003D -:108A10000000000600004100000000000006000009 -:108A2000410000000021000041000000000600009D -:108A300041000000000000000000000000000000F5 +:1089E0000000000000000000000000000000000087 +:1089F0000000000000000000000000000000000077 +:108A000000000000000000000000500000E0000036 +:108A10000000500000E000004200000000000000E4 +:108A200000000000810000E00000420000000000A3 +:108A30000000000000000000000000000000000036 :108A40000000000000000000000000000000000026 :108A50000000000000000000000000000000000016 -:108A600000000000FFFF0000FF000000FF0000000A -:108A7000FF000000000000000000000000000000F7 -:108A800000000000FFFFFFFF0000000000000000EA -:108A90000000000000000000000000000000FF00D7 -:108AA0000000FF000000FF000000FF000000FF00CA -:108AB0000000FF00000000000000000000000000B7 +:108A60000000000000000000000000000000000006 +:108A700000000000000000000000000000000000F6 +:108A800000000000FFFF0000FFFF0000FF000000EB +:108A9000FFFF0000F0F00000FFFF000000003C3C82 +:108AA000000066660000F0F00000FFFF00003C3CA4 +:108AB00000006666000000000000000000000000EA :108AC00000000000000000000000000000000000A6 :108AD0000000000000000000000000000000000096 -:108AE000000000000000FFFF0000FF000000FF008A -:108AF0000000FF0000000000000000000000000077 -:108B0000000000000000FFFFF0F000000000000087 -:108B10000000000000000000000000000000000055 -:108B2000FF000000FF000000FF000000FF00000049 -:108B3000FF000000FF000000000000000000000037 +:108AE0000000000000000000000000000000000086 +:108AF0000000000000000000000000000000000076 +:108B0000000000000000FFFF000000000000FF0068 +:108B1000000000000000F0F0000000000000000075 +:108B20003C3C000066660000F0F000000000000021 +:108B30003C3C0000666600000000000000000000F1 :108B40000000000000000000000000000000000025 :108B50000000000000000000000000000000000015 :108B60000000000000000000000000000000000005 @@ -47304,107 +47304,107 @@ :108BB00000000000000000000000000000000000B5 :108BC00000000000000000000000000000000000A5 :108BD0000000000000000000000000000000000095 -:108BE00000000000000000000000000000FF000086 -:108BF0000F0F000000FF00000F0F0000000000003A -:108C00000000000000000000000000000000000064 -:108C10000000000000000000000000000000000054 -:108C2000FFFF0000000000FF00000F0F000000FF2A -:108C300000000F0F000000FF00000F0F00000000F9 +:108BE0000000000000000000000000000000000085 +:108BF0000000000000000000000000000000000075 +:108C000000000000000000000000000000FF000065 +:108C1000FFFF00006666000066660000FFFF0000C0 +:108C200000FF000000000F0F00003C3C0000FFFFB1 +:108C3000000000FF00000F0FFFFF999900000000E7 :108C40000000000000000000000000000000000024 :108C50000000000000000000000000000000000014 -:108C6000000000000000000000000000000000FF05 -:108C700000000F0F000000FF00000F0F00000000B9 -:108C800000000000000000000000000000000000E4 -:108C900000000000000000000000000000000000D4 -:108CA0000000FFFF0000000000FF00000F0F0000A9 -:108CB00000FF00000F0F000000FF00000F0F00007A +:108C60000000000000000000000000000000000004 +:108C700000000000000000000000000000000000F4 +:108C8000000000000000000000000000000000FFE5 +:108C9000000000000000666600006666000000003C +:108CA000000000FF000000000F0F00003C3C00002F +:108CB0000000000000FF00000F0FFFFF9999000067 :108CC00000000000000000000000000000000000A4 :108CD0000000000000000000000000000000000094 -:108CE000000000000000000000000000000003631E -:108CF000033FCC0D92C003E3033E0C0D8AC0050078 -:108D00000A38050000A0000000000000000000007C -:108D100000000500040000610006000D00000000D6 -:108D20000038000010C00000038203380C0092C01D -:108D3000038203380C0092C0038203380C008AC0FF +:108CE0000000000000000000000000000000000084 +:108CF0000000000000000000000000000000000074 +:108D00000000000000000000000000000000400221 +:108D100080000020920240828001802092024082E6 +:108D20008001802092020000408280000020920298 +:108D300040828001802092024082800000208202D6 :108D40000000000000000000000000000000000023 :108D50000000000000000000000000000000000013 :108D60000000000000000000000000000000000003 -:108D700000400000AA0000002828000000000000B9 +:108D700000000000000000000000000000000000F3 :108D800000000000000000000000000000000000E3 -:108D900000000000000000000000000000000000D3 -:108DA00000000000000000000000000000000000C3 -:108DB00000000000000000000000000000000000B3 +:108D90000000000000000000A0002020C300C00070 +:108DA000003000500C000F00000000000000000028 +:108DB00000000030005014005500000000000000CA :108DC00000000000000000000000000000000000A3 :108DD0000000000000000000000000000000000093 :108DE0000000000000000000000000000000000083 -:108DF00000000040000000000000282800000000E3 +:108DF0000000000000000000000000000000000073 :108E00000000000000000000000000000000000062 -:108E10000000000000000000000000000000000052 -:108E20000000000000000000000000000000000042 -:108E30000000000000000000000000000000000032 +:108E100000000000000000000000A0002020000072 +:108E2000C000003000500C000000000000000000F6 +:108E3000000000000030005014000000000000009E :108E40000000000000000000000000000000000022 :108E50000000000000000000000000000000000012 :108E60000000000000000000000000000000000002 -:108E70000000000000000000F0FFF0FF0000000014 +:108E700000000000000000000000000000000000F2 :108E800000000000000000000000000000000000E2 :108E900000000000000000000000000000000000D2 -:108EA00000000000000000000000000000000000C2 -:108EB00000000000000000000000000000000000B2 +:108EA00000000000000000000F000A0000000000A9 +:108EB00000000000000000000000C300820000006D :108EC00000000000000000000000000000000000A2 :108ED0000000000000000000000000000000000092 :108EE0000000000000000000000000000000000082 -:108EF00000000000000000000000F0FFF0FF001084 +:108EF0000000000000000000000000000000000072 :108F00000000000000000000000000000000000061 -:108F10000000000000000000000000000000000051 -:108F20000000000000000000000000000000000041 -:108F30000000000000000000000000000000000031 +:108F10000000000000000000000000000000F00061 +:108F2000505000C3C0C0AA000A0A00000A00000096 +:108F30000000000000000000C300030300008200E6 :108F40000000000000000000000000000000000021 :108F50000000000000000000000000000000000011 :108F60000000000000000000000000000000000001 -:108F700004000000000000000000000000000000ED -:108F800000000000000000000000000000000000E1 -:108F900020000000000000000000000000000000B1 +:108F700000000000000000000000020000000000EF +:108F800000000000000000000000200000000000C1 +:108F900000000000000000000000000000000000D1 :108FA00000000000000000000000000000000000C1 :108FB00000000000000000000000000000000000B1 :108FC00000000000000000000000000000000000A1 :108FD0000000000000000000000000000000000091 :108FE0000000000000000000000000000000000081 :108FF0000000000000000000000000000000000071 -:109000000000000000000000000000000000000060 +:10900000040000000040000000000000000000001C :109010000000000000000000000000000000000050 :109020000000000000000000000000000000000040 :109030000000000000000000000000000000000030 :109040000000000000000000000000000000000020 :109050000000000000000000000000000000000010 :109060000000000000000000000000000000000000 -:109070000000000000000000000000000000900060 -:1090800000000200000000000000000000000000DE +:1090700000000000000000000000000000000000F0 +:1090800000000000000000000000000000000000E0 :1090900000000000000000000000000000000000D0 :1090A00000000000000000000000000000000000C0 :1090B00000000000000000000000000000000000B0 :1090C00000000000000000000000000000000000A0 -:1090D000000000000000000000000400000000008C +:1090D0000000000000000000000000000000000090 :1090E0000000000000000000000000000000000080 -:1090F000000000000000000000000000000004006C -:10910000200020000000040000000000000000001B -:10911000000000000000000000000000000000004F +:1090F0000000000000000000000000000000000070 +:10910000000000000000000000000000000000005F +:109110002000000000080000000000000000000027 :10912000000000000000000000000000000000003F -:10913000000000000000000000000000000000002F +:109130002000000000080000000000000000000007 :10914000000000000000000000000000000000001F -:10915000000000000000000000000400000000000B +:109150000000000000000008000000000000000007 :1091600000000000000000000000000000000000FF -:1091700004000000000000000000000000000000EB -:10918000000000000000000090000000000000004F +:1091700000000000000000080000000000000000E7 +:1091800000000000000000000000000000000000DF :1091900000000000000000000000000000000000CF -:1091A00000000000000000000000000000000000BF +:1091A00000000800000000000000000000000000B7 :1091B00000000000000000000000000000000000AF :1091C000000000000000000000000000000000009F :1091D000000000000000000000000000000000008F :1091E000000000000000000000000000000000007F -:1091F000000000000000000000000300050008005F +:1091F000000000000000000000000000000000006F :10920000000000000000000000000000000000005E :10921000000000000000000000000000000000004E -:1092200000000000000000000000008400000000BA +:10922000000000000000000000000000000000003E :10923000000000000000000000000000000000002E :10924000000000000000000000000000000000001E :10925000000000000000000000000000000000000E @@ -47415,11 +47415,11 @@ :1092A00000000000000000000000000000000000BE :1092B00000000000000000000000000000000000AE :1092C000000000000000000000000000000000009E -:1092D000000000000000000000000000000004008A -:1092E00000000000000000000000000000008200FC +:1092D000000000000000000000000000000000008E +:1092E000000000000000000000000000000000007E :1092F000000000000000000000000000000000006E :10930000000000000000000000000000000000005D -:109310000000000000040000000000000000000049 +:10931000000000000000000000000000000000004D :10932000000000000000000000000000000000003D :10933000000000000000000000000000000000002D :10934000000000000000000000000000000000001D @@ -47434,28 +47434,28 @@ :1093D000000000000000000000000000000000008D :1093E000000000000000000000000000000000007D :1093F000000000000000000000000000000000006D -:10940000000000C000000000000000000800088408 -:10941000000021000000000000000000000000002B +:10940000000000000000000000000000000000005C +:10941000000000000000000000000000000000004C :10942000000000000000000000000000000000003C -:1094300000000084000000000000000000000000A8 +:10943000000000000000000000000000000000002C :10944000000000000000000000000000000000001C :10945000000000000000000000000000000000000C :1094600000000000000000000000000000000000FC :1094700000000000000000000000000000000000EC -:10948000000000000000000000000000900000004C -:1094900000000000000000000009000000000000C3 +:1094800000000000000000000000000000000000DC +:1094900000000000000000000000000000000000CC :1094A00000000000000000000000000000000000BC -:1094B00000000000000000000000000000020000AA -:1094C0000000000000000800000000000000000094 +:1094B00000000000000000000000000000000000AC +:1094C000000000000000000000000000000000009C :1094D000000000000000000000000000000000008C :1094E000000000000000000000000000000000007C :1094F000000000000000000000000000000000006C :10950000000000000000000000000000000000005B -:109510000000000000000000000000040000000047 +:10951000000000000000000000000000000000004B :10952000000000000000000000000000000000003B :10953000000000000000000000000000000000002B :10954000000000000000000000000000000000001B -:1095500021000000000000000000000000000000EA +:10955000000000000000000000000000000000000B :1095600000000000000000000000000000000000FB :1095700000000000000000000000000000000000EB :1095800000000000000000000000000000000000DB @@ -47605,40 +47605,40 @@ :109E800000000000000000000000000000000000D2 :109E900000000000000000000000000000000000C2 :109EA00000000000000000000000000000000000B2 -:109EB000000000000000000000000000040000009E -:109EC0000000000000020000000000000000000090 -:109ED0000000000000000000000000000000000082 -:109EE000000000000000000000000000000300006F -:109EF0000000000000000000000000000000000062 -:109F00000000000000000000000000000000000051 +:109EB000000000000000000000000004000000009E +:109EC000000000000000000000000004000000008E +:109ED000000000000000000000000004000000007E +:109EE0000000000000000000000000000000000072 +:109EF000000000000000000000000000000400005E +:109F0000000000000000000000000000000400004D :109F10000000000000000000000000000000000041 -:109F20000000000000000000000000000000000031 +:109F2000000000000000000000000000000400002D :109F30000000000000000000000000000000000021 :109F40000000000000000000000000000000000011 :109F50000000000000000000000000000000000001 :109F600000000000000000000000000000000000F1 -:109F700000000000000000000000000000020002DD +:109F700000000000000000000000000000000000E1 :109F800000000000000000000000000000000000D1 :109F900000000000000000000000000000000000C1 :109FA00000000000000000000000000000000000B1 -:109FB000000000000400000000000000000002009B -:109FC000000000000000000000000400000000008D -:109FD000040000000000000000000000020000007B -:109FE000000000000000020000000000000000006F -:109FF0000000000000000000000001001000100040 -:10A000001000040004000400040000000000000030 +:109FB00000000000000000000000000000000000A1 +:109FC000000000000000040000000000000000008D +:109FD0000000000000000000000000000000000081 +:109FE0000000000000000000000000000000000071 +:109FF0000000000000000000000000000000000061 +:10A000000000000000000000000000000000000050 :10A010000000000000000000000000000000000040 :10A020000000000000000000000000000000000030 :10A030000000000000000000000000000000000020 -:10A040008000000000000000000000000000000090 -:10A0500000000000000000000000000004000000FC +:10A040000000000000000000000000000000000010 +:10A050000000000000000000000000000000000000 :10A0600000000000000000000000000000000000F0 -:10A07000000000000000000000000400100080004C -:10A0800080008000000000000200000000000000CE -:10A0900000000400000000000000000000000000BC -:10A0A00000000000000000000000000004000000AC -:10A0B000000000000000000000000000002100007F -:10A0C00088000000000000004000000000100000B8 +:10A0700000000000000000000000000000000000E0 +:10A0800000000000000000000000000000000000D0 +:10A0900000000000000000000000000000000000C0 +:10A0A00000000000000000000000000000000000B0 +:10A0B00000000000000000000000000000000000A0 +:10A0C0000000000000000000000000000000000090 :10A0D0000000000000000000000000000000000080 :10A0E0000000000000000000000000000000000070 :10A0F0000000000000000000000000000000000060 @@ -47654,11 +47654,11 @@ :10A1900000000000000000000000000000000000BF :10A1A00000000000000000000000000000000000AF :10A1B000000000000000000000000000000000009F -:10A1C000000000000010001000000000000000006F +:10A1C000000000000000000000000000000000008F :10A1D000000000000000000000000000000000007F -:10A1E000000000000000000004000000000000006B +:10A1E000000000000000000000000000000000006F :10A1F000000000000000000000000000000000005F -:10A20000000000000000000001000000000000004D +:10A20000000000000000000000000000000000004E :10A21000000000000000000000000000000000003E :10A22000000000000000000000000000000000002E :10A23000000000000000000000000000000000001E @@ -47666,19 +47666,19 @@ :10A2500000000000000000000000000000000000FE :10A2600000000000000000000000000000000000EE :10A2700000000000000000000000000000000000DE -:10A2800000000000000000000000200000000000AE +:10A2800000000000000000000000000000000000CE :10A2900000000000000000000000000000000000BE :10A2A00000000000000000000000000000000000AE -:10A2B000000000000000000000000000000200207C -:10A2C000042004200000C000000000000000000086 +:10A2B000000000000000000000000000000000009E +:10A2C000000000000000000000000000000000008E :10A2D000000000000000000000000000000000007E :10A2E000000000000000000000000000000000006E -:10A2F00000000000A00000000000000000010000BD -:10A3000000000000C000000000000000000000008D +:10A2F000000000000000000000000000000000005E +:10A30000000000000000000000000000000000004D :10A31000000000000000000000000000000000003D :10A32000000000000000000000000000000000002D :10A33000000000000000000000000000000000001D -:10A3400000000000000000200000000000000000ED +:10A34000000000000000000000000000000000000D :10A3500000000000000000000000000000000000FD :10A3600000000000000000000000000000000000ED :10A3700000000000000000000000000000000000DD @@ -47686,15 +47686,15 @@ :10A3900000000000000000000000000000000000BD :10A3A00000000000000000000000000000000000AD :10A3B000000000000000000000000000000000009D -:10A3C000002000000000000000000000000000006D -:10A3D000000000000000001100000000000000006C +:10A3C000000000000000000000000000000000008D +:10A3D000000000000000000000000000000000007D :10A3E000000000000000000000000000000000006D -:10A3F0000800000000000000000000000000000055 -:10A4000000008200000000000000000000000000CA +:10A3F000000000000000000000000000000000005D +:10A40000000000000000000000000000000000004C :10A41000000000000000000000000000000000003C :10A42000000000000000000000000000000000002C :10A43000000000000000000000000000000000001C -:10A44000000000010000000000000000000000000B +:10A44000000000000000000000000000000000000C :10A4500000000000000000000000000000000000FC :10A4600000000000000000000000000000000000EC :10A4700000000000000000000000000000000000DC @@ -47702,81 +47702,81 @@ :10A4900000000000000000000000000000000000BC :10A4A00000000000000000000000000000000000AC :10A4B000000000000000000000000000000000009C -:10A4C0000000000000000000000000009084002058 -:10A4D0000002000800000000000000000000000072 +:10A4C000000000000000000000000000000000008C +:10A4D000000000000000000000000000000000007C :10A4E000000000000000000000000000000000006C :10A4F000000000000000000000000000000000005C -:10A50000000000000000000000000000000001004A +:10A50000000000000000000000000000000000004B :10A51000000000000000000000000000000000003B :10A52000000000000000000000000000000000002B :10A53000000000000000000000000000000000001B -:10A540000000000000000000000000000000A0006B -:10A55000008000800080000000000000000000007B +:10A54000000000000000000000000000000000000B +:10A5500000000000000000000000000000000000FB :10A5600000000000000000000000000000000000EB :10A5700000000000000000000000000000000000DB :10A5800000000000000000000000000000000000CB -:10A590001100002100000000000000000000000089 +:10A5900000000000000000000000000000000000BB :10A5A00000000000000000000000000000000000AB :10A5B000000000000000000000000000000000009B :10A5C000000000000000000000000000000000008B -:10A5D00000090021008000000000000000000000D1 +:10A5D000000000000000000000000000000000007B :10A5E000000000000000000000000000000000006B :10A5F000000000000000000000000000000000005B :10A60000000000000000000000000000000000004A -:10A610000000000500001103000000000000000021 +:10A61000000000000000000000000000000000003A :10A62000000000000000000000000000000000002A :10A63000000000000000000000000000000000001A :10A64000000000000000000000000000000000000A -:10A6500000000001009000A00000000000000000C9 +:10A6500000000000000000000000000000000000FA :10A6600000000000000000000000000000000000EA :10A6700000000000000000000000000000000000DA :10A6800000000000000000000000000000000000CA -:10A6900000000000000000000100000000000000B9 +:10A6900000000000000000000000000000000000BA :10A6A00000000000000000000000000000000000AA :10A6B000000000000000000000000000000000009A :10A6C000000000000000000000000000000000008A -:10A6D0000000000040900000909002000000000088 +:10A6D000000000000000000000000000000000007A :10A6E000000000000000000000000000000000006A :10A6F000000000000000000000000000000000005A :10A700000000000000000000000000000000000049 -:10A710000000000000000000200000010100000017 +:10A710000000000000000000000000000000000039 :10A720000000000000000000000000000000000029 :10A730000000000000000000000000000000000019 :10A740000000000000000000000000000000000009 -:10A7500000000000000000000000008080000000F9 +:10A7500000000000000000000000000000000000F9 :10A7600000000000000000000000000000000000E9 :10A7700000000000000000000000000000000000D9 :10A7800000000000000000000000000000000000C9 -:10A790000000000000000000000080000008200011 +:10A7900000000000000000000000000000000000B9 :10A7A00000000000000000000000000000000000A9 :10A7B0000000000000000000000000000000000099 :10A7C0000000000000000000000000000000000089 -:10A7D0000010000000000000800880000000000061 +:10A7D0000000000000000000000000000000000079 :10A7E0000000000000000000000000000000000069 :10A7F0000000000000000000000000000000000059 :10A800000000000000000000000000000000000048 -:10A810000000000000000000000000041100000023 +:10A810000000000000000000000000000000000038 :10A820000000000000000000000000000000000028 :10A830000000000000000000000000000000000018 :10A840000000000000000000000000000000000008 -:10A8500000000000000000000000020102000000F3 -:10A8600004000000000000000000000000000000E4 +:10A8500000000000000000000000000000000000F8 +:10A8600000000000000000000000000000000000E8 :10A8700000000000000000000000000000000000D8 :10A8800000000000000000000000000000000000C8 -:10A8900000000000000000000000000000010100B6 +:10A8900000000000000000000000000000000000B8 :10A8A00000000000000000000000000000000000A8 :10A8B0000000000000000000000000000000000098 :10A8C0000000000000000000000000000000000088 -:10A8D00000000000008100000700000081210088C6 -:10A8E0004100000000000000000000000000000027 +:10A8D0000000000000000000000000000000000078 +:10A8E0000000000000000000000000000000000068 :10A8F0000000000000000000000000000000000058 :10A900000000000000000000000000000000000047 :10A910000000000000000000000000000000000037 -:10A9200000E0000000000000000000000000000047 +:10A920000000000000000000000000000000000027 :10A930000000000000000000000000000000000017 :10A940000000000000000000000000000000000007 -:10A9500000000000000000000000000000007E0079 -:10A960006600E724E724000000000000000000006B +:10A9500000000000000000000000000000000000F7 +:10A9600000000000000000000000000000000000E7 :10A9700000000000000000000000000000000000D7 :10A9800000000000000000000000000000000000C7 :10A9900000000000000000000000000000000000B7 @@ -47784,7 +47784,7 @@ :10A9B0000000000000000000000000000000000097 :10A9C0000000000000000000000000000000000087 :10A9D0000000000000000000000000000000000077 -:10A9E0003C000000E724E724000000000000000015 +:10A9E0000000000000000000000000000000000067 :10A9F0000000000000000000000000000000000057 :10AA00000000000000000000000000000000000046 :10AA10000000000000000000000000000000000036 @@ -47800,7 +47800,7 @@ :10AAB0000000000000000000000000000000000096 :10AAC0000000000000000000000000000000000086 :10AAD0000000000000000000000000000000000076 -:10AAE00000000000040F0D0F000000000000000037 +:10AAE0000000000000000000000000000000000066 :10AAF0000000000000000000000000000000000056 :10AB00000000000000000000000000000000000045 :10AB10000000000000000000000000000000000035 @@ -47808,7 +47808,7 @@ :10AB30000000000000000000000000000000000015 :10AB40000000000000000000000000000000000005 :10AB500000000000000000000000000000000000F5 -:10AB600000000000000004040D04000000000000CC +:10AB600000000000000000000000000000000000E5 :10AB700000000000000000000000000000000000D5 :10AB800000000000000000000000000000000000C5 :10AB900000000000000000000000000000000000B5 @@ -47816,11 +47816,11 @@ :10ABB0000000000000000000000000000000000095 :10ABC0000000000000000000000000000000000085 :10ABD0000000000000000000000000000000000075 -:10ABE000050000300000000000653026801D0000D8 +:10ABE0000000000000000000000000000000000065 :10ABF0000000000000000000000000000000000055 :10AC00000000000000000000000000000000000044 :10AC10000000000000000000000000000000000034 -:10AC20000000000000000000000000000006000C12 +:10AC20000000000000000000000000000000000024 :10AC30000000000000000000000000000000000014 :10AC40000000000000000000000000000000000004 :10AC500000000000000000000000000000000000F4 @@ -47828,8 +47828,8 @@ :10AC700000000000000000000000000000000000D4 :10AC800000000000000000000000000000000000C4 :10AC900000000000000000000000000000000000B4 -:10ACA0000000000000000000000000000000FF00A5 -:10ACB00000FF000000000000000000000000000095 +:10ACA00000000000000000000000000000000000A4 +:10ACB0000000000000000000000000000000000094 :10ACC0000000000000000000000000000000000084 :10ACD0000000000000000000000000000000000074 :10ACE0000000000000000000000000000000000064 @@ -47837,7 +47837,7 @@ :10AD00000000000000000000000000000000000043 :10AD10000000000000000000000000000000000033 :10AD20000000000000000000000000000000000023 -:10AD3000FF0000FF00000000000000000000000015 +:10AD30000000000000000000000000000000000013 :10AD40000000000000000000000000000000000003 :10AD500000000000000000000000000000000000F3 :10AD600000000000000000000000000000000000E3 @@ -47845,7 +47845,7 @@ :10AD800000000000000000000000000000000000C3 :10AD900000000000000000000000000000000000B3 :10ADA00000000000000000000000000000000000A3 -:10ADB0000000FF0000FF0000000000000000000095 +:10ADB0000000000000000000000000000000000093 :10ADC0000000000000000000000000000000000083 :10ADD0000000000000000000000000000000000073 :10ADE0000000000000000000000000000000000063 @@ -47853,51 +47853,51 @@ :10AE00000000000000000000000000000000000042 :10AE10000000000000000000000000000000000032 :10AE20000000000000000000000000000000000022 -:10AE300000000000FF0000FF000000000000000014 +:10AE30000000000000000000000000000000000012 :10AE40000000000000000000000000000000000002 :10AE500000000000000000000000000000000000F2 :10AE600000000000000000000000000000000000E2 -:10AE700000000000000000000000000000000000D2 +:10AE700000000000040000000000000000000000CE :10AE800000000000000000000000000000000000C2 -:10AE900000000000000000000000000000000000B2 +:10AE900000000000040000000000000000000000AE :10AEA00000000000000000000000000000000000A2 -:10AEB0000000000000000000000000000000000092 +:10AEB000000000000000040000000000000000008E :10AEC0000000000000000000000000000000000082 :10AED0000000000000000000000000000000000072 :10AEE0000000000000000000000000000000000062 -:10AEF0000000000000000000000000000000000052 +:10AEF0004000000000000000000000000000000012 :10AF00000000000000000000000000000000000041 :10AF10000000000000000000000000000000000031 :10AF20000000000000000000000000000000000021 -:10AF3000000000000002000000000000000000000F +:10AF30000000000000000000000000000000000011 :10AF40000000000000000000000000000000000001 :10AF500000000000000000000000000000000000F1 :10AF600000000000000000000000000000000000E1 -:10AF700000000000000002000000000000000000CF +:10AF700000000000000000000000000000000000D1 :10AF800000000000000000000000000000000000C1 -:10AF900000000000000000000000000000000000B1 +:10AF90000000000000000000200000000000000091 :10AFA00000000000000000000000000000000000A1 -:10AFB0000000000000000000000000000000000091 +:10AFB0000000000000000000000020000000000071 :10AFC0000000000000000000000000000000000081 -:10AFD0000000000000000000000000000000000071 -:10AFE000000002000000000000000000000000005F +:10AFD0000000000000000000000020000000000051 +:10AFE0000000000000000000000000000000000061 :10AFF0000000000000000000000000000000000051 -:10B000000000000000000000040004000400000034 -:10B01000040000000000000000000000000000002C +:10B000000000000000000000000000000000000040 +:10B010000000000000000000000000000000000030 :10B020000000000000000000000000000000000020 :10B030000000000000000000000000000000000010 -:10B0400000000000000000000200000000000000FE +:10B040000000000000000000000000000000000000 :10B0500000000000000000000000000000000000F0 -:10B0600000000000040002000000000000000000DA +:10B0600000000000000000000000000000000000E0 :10B0700000000000000000000000000000000000D0 :10B0800000000000000000000000000000000000C0 -:10B090000000000000400000000000000000000070 +:10B0900000000000000000000000000000000000B0 :10B0A00000000000000000000000000000000000A0 :10B0B0000000000000000000000000000000000090 :10B0C0000000000000000000000000000000000080 :10B0D0000000000000000000000000000000000070 :10B0E0000000000000000000000000000000000060 -:10B0F00000000000110000000000000000880000B7 +:10B0F0000000000000000000000000000000000050 :10B10000000000000000000000000000000000003F :10B11000000000000000000000000000000000002F :10B12000000000000000000000000000000000001F @@ -47922,7 +47922,7 @@ :10B2500000000000000000000000000000000000EE :10B2600000000000000000000000000000000000DE :10B2700000000000000000000000000000000000CE -:10B2800000000000000000000100000000000000BD +:10B2800000000000000000000000000000000000BE :10B2900000000000000000000000000000000000AE :10B2A000000000000000000000000000000000009E :10B2B000000000000000000000000000000000008E @@ -47930,23 +47930,23 @@ :10B2D000000000000000000000000000000000006E :10B2E000000000000000000000000000000000005E :10B2F000000000000000000000000000000000004E -:10B300000000000010001184000020000000000078 +:10B30000000000000000000000000000000000003D :10B31000000000000000000000000000000000002D :10B32000000000000000000000000000000000001D :10B33000000000000000000000000000000000000D -:10B340000000000000000000000000000084000079 +:10B3400000000000000000000000000000000000FD :10B3500000000000000000000000000000000000ED :10B3600000000000000000000000000000000000DD :10B3700000000000000000000000000000000000CD :10B3800000000000000000000000000000000000BD -:10B39000002100000000000000000000000000008C +:10B3900000000000000000000000000000000000AD :10B3A000000000000000000000000000000000009D :10B3B000000000000000000000000000000000008D :10B3C000000000000000000000000000000000007D -:10B3D000000000000000000200000000000000006B +:10B3D000000000000000000000000000000000006D :10B3E000000000000000000000000000000000005D :10B3F000000000000000000000000000000000004D -:10B4000000000000000000000000000000000040FC +:10B40000000000000000000000000000000000003C :10B41000000000000000000000000000000000002C :10B42000000000000000000000000000000000001C :10B43000000000000000000000000000000000000C @@ -48003,7 +48003,7 @@ :10B7600000000000000000000000000000000000D9 :10B7700000000000000000000000000000000000C9 :10B7800000000000000000000000000000000000B9 -:10B7900000000000000000080000000000000000A1 +:10B7900000000000000000000000000000000000A9 :10B7A0000000000000000000000000000000000099 :10B7B0000000000000000000000000000000000089 :10B7C0000000000000000000000000000000000079 @@ -48011,7 +48011,7 @@ :10B7E0000000000000000000000000000000000059 :10B7F0000000000000000000000000000000000049 :10B800000000000000000000000000000000000038 -:10B810000000000000000000000100000000000027 +:10B810000000000000000000000000000000000028 :10B820000000000000000000000000000000000018 :10B830000000000000000000000000000000000008 :10B8400000000000000000000000000000000000F8 @@ -48019,7 +48019,7 @@ :10B8600000000000000000000000000000000000D8 :10B8700000000000000000000000000000000000C8 :10B8800000000000000000000000000000000000B8 -:10B890000000000000000000000081000020000007 +:10B8900000000000000000000000000000000000A8 :10B8A0000000000000000000000000000000000098 :10B8B0000000000000000000000000000000000088 :10B8C0000000000000000000000000000000000078 @@ -48060,7 +48060,7 @@ :10BAF0000000000000000000000000000000000046 :10BB00000000000000000000000000000000000035 :10BB10000000000000000000000000000000000025 -:10BB20000000000000610086A00D00000000000081 +:10BB20000000000000000000000000000000000015 :10BB30000000000000000000000000000000000005 :10BB400000000000000000000000000000000000F5 :10BB500000000000000000000000000000000000E5 @@ -48100,41 +48100,41 @@ :10BD700000000000000000000000000000000000C3 :10BD800000000000000000000000000000000000B3 :10BD900000000000000000000000000000000000A3 -:10BDA0000000000000000000000000000000000093 -:10BDB0000000000000000000000000000000000083 -:10BDC0000000000000000000000000000000000073 -:10BDD0000000000000000000000000000000000063 -:10BDE000040000000000000000000000000000004F +:10BDA000000000000000000000000000040000008F +:10BDB0000000000000000000200000000000000063 +:10BDC000000000000004000000000000000000006F +:10BDD000000000000004000000000000000000005F +:10BDE000000000000004000000000000000002004D :10BDF0000000000000000000000000000000000043 -:10BE00000000200000000000000000000000000012 -:10BE10000000000000000000000000000000000022 -:10BE20000000000000000000000000020000000010 +:10BE0000000000000000000400000000000000002E +:10BE1000000000000000000400000000000000001E +:10BE20000000000000000000000000000000000012 :10BE30000000000000000000000000000000000002 :10BE400000000000000000000000000000000000F2 -:10BE50000082000000000000000000000000000060 +:10BE500000000000000000000000000000000000E2 :10BE600000000000000000000000000000000000D2 -:10BE700000000000000000020000000000000000C0 +:10BE700000000000000000000000000000000000C2 :10BE800000000000000000000000000000000000B2 :10BE900000000000000000000000000000000000A2 -:10BEA0000000000000000000000000000000000092 -:10BEB0000000000000000000000000000000000082 +:10BEA000000000000000000000000000040000008E +:10BEB0002000000002000000000000000000000060 :10BEC0000000000000000000000000000000000072 -:10BED000020000000200000000000000000000005E +:10BED0002000000000000000000000002000000022 :10BEE0000000000000000000000000000000000052 -:10BEF0000000000002000200020002000200000038 -:10BF0000000004000000000000000000000000002D -:10BF1000000000000000020000000400000000001B -:10BF2000000000000000000002000000000000000F -:10BF300000000000000000000200000000000000FF +:10BEF000000002000000000000000000000002003E +:10BF00000000000000000000000000000000000031 +:10BF10000000000000000000000000000000000021 +:10BF20000000000000000000000000000000000011 +:10BF300000000000000000000000000400000000FD :10BF400000000000000000000000000000000000F1 -:10BF500000000000000000040000000000000000DD +:10BF500000000000000000000000000000000000E1 :10BF600000000000000000000000000000000000D1 -:10BF700000000000000000000000000000000000C1 -:10BF800000000000000004000000000000000000AD -:10BF9000000004000000000000000000020000009B +:10BF700000000000020000000000000000000000BF +:10BF800000000000000000000000000000000000B1 +:10BF90000000000020000000000000000000000081 :10BFA0000000000000000000000000000000000091 :10BFB0000000000000000000000000000000000081 -:10BFC000000004000000000000000000000000006D +:10BFC0000000000000000000000000000000000071 :10BFD0000000000000000000000000000000000061 :10BFE0000000000000000000000000000000000051 :10BFF0000000000000000000000000000000000041 @@ -48149,18 +48149,18 @@ :10C0800000000000000000000000000000000000B0 :10C0900000000000000000000000000000000000A0 :10C0A0000000000000000000000000000000000090 -:10C0B000000000000000000000000011000000046B -:10C0C000000400000000000000000000000000006C +:10C0B0000000000000000000000000000000000080 +:10C0C0000000000000000000000000000000000070 :10C0D0000000000000000000000000000000000060 :10C0E0000000000000000000000000000000000050 -:10C0F0000040000000000000000000000000000000 -:10C10000000000000040004000400040000000002F +:10C0F0000000000000000000000000000000000040 +:10C10000000000000000000000000000000000002F :10C11000000000000000000000000000000000001F -:10C120000000000000000000000000000000080007 +:10C12000000000000000000000000000000000000F :10C1300000000000000000000000000000000000FF :10C1400000000000000000000000000000000000EF :10C1500000000000000000000000000000000000DF -:10C1600010000000000000000000000000000000BF +:10C1600000000000000000000000000000000000CF :10C1700000000000000000000000000000000000BF :10C1800000000000000000000000000000000000AF :10C19000000000000000000000000000000000009F @@ -48174,7 +48174,7 @@ :10C21000000000000000000000000000000000001E :10C22000000000000000000000000000000000000E :10C2300000000000000000000000000000000000FE -:10C2400000000008000000000000000000000000E6 +:10C2400000000000000000000000000000000000EE :10C2500000000000000000000000000000000000DE :10C2600000000000000000000000000000000000CE :10C2700000000000000000000000000000000000BE @@ -48190,10 +48190,10 @@ :10C31000000000000000000000000000000000001D :10C32000000000000000000000000000000000000D :10C3300000000000000000000000000000000000FD -:10C3400000000000000002000000000000000000EB +:10C3400000000000000000000000000000000000ED :10C3500000000000000000000000000000000000DD :10C3600000000000000000000000000000000000CD -:10C37000000000400000000000000000000000007D +:10C3700000000000000000000000000000000000BD :10C3800000000000000000000000000000000000AD :10C39000000000000000000000000000000000009D :10C3A000000000000000000000000000000000008D @@ -48355,31 +48355,31 @@ :10CD600000000000000000000000000000000000C3 :10CD700000000000000000000000000000000000B3 :10CD800000000000000000000000000000000000A3 -:10CD90000000000000000002000000000000000091 -:10CDA0000000000000010000000000000000000082 +:10CD90000000000000000000000000000000000093 +:10CDA0000000000000000000000000000000000083 :10CDB0000000000000000000000000000000000073 -:10CDC000000000000000000000000000040000005F +:10CDC0000000000000000000000000000000000063 :10CDD0000000000000000000000000000000000053 :10CDE0000000000000000000000000000000000043 :10CDF0000000000000000000000000000000000033 :10CE00000000000000000000000000000000000022 -:10CE10000000000000000000000100000000000011 +:10CE10000000000000000000000000000000000012 :10CE20000000000000000000000000000000000002 :10CE300000000000000000000000000000000000F2 :10CE400000000000000000000000000000000000E2 :10CE500000000000000000000000000000000000D2 :10CE600000000000000000000000000000000000C2 -:10CE700001000000000000000000000000000000B1 +:10CE700000000000000000000000000000000000B2 :10CE800000000000000000000000000000000000A2 -:10CE90000400040004000000000000000000000086 +:10CE90000000000000000000000000000000000092 :10CEA0000000000000000000000000000000000082 :10CEB0000000000000000000000000000000000072 :10CEC0000000000000000000000000000000000062 :10CED0000000000000000000000000000000000052 :10CEE0000000000000000000000000000000000042 -:10CEF0000000020000000000000000000000000030 +:10CEF0000000000000000000000000000000000032 :10CF00000000000000000000000000000000000021 -:10CF100000000000000000000000040041000000CC +:10CF10000000000000000000000000000000000011 :10CF20000000000000000000000000000000000001 :10CF300000000000000000000000000000000000F1 :10CF400000000000000000000000000000000000E1 @@ -48387,21 +48387,21 @@ :10CF600000000000000000000000000000000000C1 :10CF700000000000000000000000000000000000B1 :10CF800000000000000000000000000000000000A1 -:10CF90000000000000000000000000000080000011 +:10CF90000000000000000000000000000000000091 :10CFA0000000000000000000000000000000000081 :10CFB0000000000000000000000000000000000071 :10CFC0000000000000000000000000000000000061 :10CFD0000000000000000000000000000000000051 -:10CFE00000000000000000000000000000000090B1 +:10CFE0000000000000000000000000000000000041 :10CFF0000000000000000000000000000000000031 :10D000000000000000000000000000000000000020 -:10D0100000000000000000000000000000000020F0 +:10D010000000000000000000000000000000000010 :10D020000000000000000000000000000000000000 :10D0300000000000000000000000000000000000F0 :10D0400000000000000000000000000000000000E0 :10D0500000000000000000000000000000000000D0 :10D0600000000000000000000000000000000000C0 -:10D0700000000000000000000000000000000100AF +:10D0700000000000000000000000000000000000B0 :10D0800000000000000000000000000000000000A0 :10D090000000000000000000000000000000000090 :10D0A0000000000000000000000000000000000080 @@ -48410,23 +48410,23 @@ :10D0D0000000000000000000000000000000000050 :10D0E0000000000000000000000000000000000040 :10D0F0000000000000000000000000000000000030 -:10D10000040000000000000000000000000000001B +:10D10000000000000000000000000000000000001F :10D11000000000000000000000000000000000000F :10D1200000000000000000000000000000000000FF :10D1300000000000000000000000000000000000EF :10D1400000000000000000000000000000000000DF :10D1500000000000000000000000000000000000CF :10D1600000000000000000000000000000000000BF -:10D17000000000000000000082000000000000002D -:10D18000002000000000000000000000000000007F +:10D1700000000000000000000000000000000000AF +:10D18000000000000000000000000000000000009F :10D19000000000000000000000000000000000008F :10D1A000000000000000000000000000000000007F -:10D1B000000000000001000000000000000000006E +:10D1B000000000000000000000000000000000006F :10D1C000000000000000000000000000000000005F :10D1D000000000000000000000000000000000004F :10D1E000000000000000000000000000000000003F :10D1F000000000000000000000000000000000002F -:10D20000000000010000000000000000000000001D +:10D20000000000000000000000000000000000001E :10D21000000000000000000000000000000000000E :10D2200000000000000000000000000000000000FE :10D2300000000000000000000000000000000000EE @@ -48436,62 +48436,62 @@ :10D2700000000000000000000000000000000000AE :10D28000000000000000000000000000000000009E :10D29000000000000000000000000000000000008E -:10D2A0000000040004000000008000800000000076 +:10D2A000000000000000000000000000000000007E :10D2B000000000000000000000000000000000006E :10D2C000000000000000000000000000000000005E :10D2D000000000000000000000000000000000004E :10D2E000000000000000000000000000000000003E :10D2F000000000000000000000000000000000002E -:10D30000000011000040000000400000000000008C +:10D30000000000000000000000000000000000001D :10D31000000000000000000000000000000000000D -:10D3200000000000000000000000000200040000F7 +:10D3200000000000000000000000000000000000FD :10D3300000000000000000000000000000000000ED :10D3400000000000000000000000000000000000DD :10D3500000000000000000000000000000000000CD -:10D36000004000000000000000000000000000007D +:10D3600000000000000000000000000000000000BD :10D3700000000000000000000000000000000000AD -:10D38000000000000000900200000000000000000B +:10D38000000000000000000000000000000000009D :10D39000000000000000000000000000000000008D -:10D3A0000000000000000000000000000001A001DB -:10D3B000010000000000000000000000000000006C +:10D3A000000000000000000000000000000000007D +:10D3B000000000000000000000000000000000006D :10D3C000000000000000000000000000000000005D :10D3D000000000000000000000000000000000004D :10D3E000000000000000000000000000000000003D :10D3F000000000000000000000000000000000002D -:10D40000000000000000110080800000000000000B +:10D40000000000000000000000000000000000001C :10D41000000000000000000000000000000000000C -:10D4200000000000000000000000000000000040BC -:10D430008021030000000000000000000000000048 +:10D4200000000000000000000000000000000000FC +:10D4300000000000000000000000000000000000EC :10D4400000000000000000000000000000000000DC :10D4500000000000000000000000000000000000CC :10D4600000000000000000000000000000000000BC :10D4700000000000000000000000000000000000AC -:10D48000000000000000000000000080000000809C +:10D48000000000000000000000000000000000009C :10D49000000000000000000000000000000000008C :10D4A000000000000000000000000000000000007C -:10D4B00000800000000500000000000000000000E7 +:10D4B000000000000000000000000000000000006C :10D4C000000000000000000000000000000000005C :10D4D000000000000000000000000000000000004C :10D4E000000000000000000000000000000000003C :10D4F000000000000000000000000000000000002C -:10D5000000000000000000000000000000200000FB -:10D5100000C000000000000000000000000000004B +:10D50000000000000000000000000000000000001B +:10D51000000000000000000000000000000000000B :10D5200000000000000000000000000000000000FB -:10D5300000000040000000000000000000000000AB +:10D5300000000000000000000000000000000000EB :10D5400000000000000000000000000000000000DB :10D5500000000000000000000000000000000000CB :10D5600000000000000000000000000000000000BB :10D5700000000000000000000000000000000000AB -:10D580000000000000000000000000000100008812 -:10D590008800010000000000000000000000000002 +:10D58000000000000000000000000000000000009B +:10D59000000000000000000000000000000000008B :10D5A000000000000000000000000000000000007B :10D5B000000000000000000000000000000000006B :10D5C000000000000000000000000000000000005B :10D5D000000000000000000000000000000000004B :10D5E000000000000000000000000000000000003B :10D5F000000000000000000000000000000000002B -:10D6000000000000000000000000000000004100D9 -:10D610000080000009000000000000000000000081 +:10D60000000000000000000000000000000000001A +:10D61000000000000000000000000000000000000A :10D6200000000000000000000000000000000000FA :10D6300000000000000000000000000000000000EA :10D6400000000000000000000000000000000000DA @@ -48499,55 +48499,55 @@ :10D6600000000000000000000000000000000000BA :10D6700000000000000000000000000000000000AA :10D68000000000000000000000000000000000009A -:10D6900000110000008000000000000000000000F9 +:10D69000000000000000000000000000000000008A :10D6A000000000000000000000000000000000007A -:10D6B0000000000000000000A021050002000000A2 +:10D6B000000000000000000000000000000000006A :10D6C000000000000000000000000000000000005A :10D6D000000000000000000000000000000000004A :10D6E000000000000000000000000000000000003A :10D6F000000000000000000000000000000000002A :10D700000000000000000000000000000000000019 -:10D7100000000001000000400000000000000000C8 +:10D710000000000000000000000000000000000009 :10D7200000000000000000000000000000000000F9 -:10D730000000000000000000000090010000010057 -:10D740009000000000000000000000000000000049 +:10D7300000000000000000000000000000000000E9 +:10D7400000000000000000000000000000000000D9 :10D7500000000000000000000000000000000000C9 :10D7600000000000000000000000000000000000B9 :10D7700000000000000000000000000000000000A9 :10D780000000000000000000000000000000000099 -:10D7900000000000000000000700822100000000DF +:10D790000000000000000000000000000000000089 :10D7A0000000000000000000000000000000000079 -:10D7B00000000000000000000000000081810088DF -:10D7C0000700000000000000000000000000000052 +:10D7B0000000000000000000000000000000000069 +:10D7C0000000000000000000000000000000000059 :10D7D0000000000000000000000000000000000049 :10D7E0000000000000000000000000000000000039 :10D7F0000000000000000000000000000000000029 :10D800000000000000000000000000000000000018 -:10D8100000000000000000000000F0F00000000028 +:10D810000000000000000000000000000000000008 :10D8200000000000000000000000000000000000F8 -:10D8300000000000000000000000000000003C3C70 -:10D84000FFFF0000000000000000000000000000DA +:10D8300000000000000000000000000000000000E8 +:10D8400000000000000000000000000000000000D8 :10D8500000000000000000000000000000000000C8 :10D8600000000000000000000000000000000000B8 :10D8700000000000000000000000000000000000A8 :10D880000000000000000000000000000000000098 -:10D89000000000000000000000000000F0F00000A8 +:10D890000000000000000000000000000000000088 :10D8A0000000000000000000000000000000000078 :10D8B0000000000000000000000000000000000068 -:10D8C0003C3CFFFF000000000000000000000000E2 +:10D8C0000000000000000000000000000000000058 :10D8D0000000000000000000000000000000000048 :10D8E0000000000000000000000000000000000038 :10D8F0000000000000000000000000000000000028 :10D900000000000000000000000000000000000017 -:10D91000000000000000000000000000FF00000008 -:10D92000FFFF0000000000000000000000000000F9 +:10D910000000000000000000000000000000000007 +:10D9200000000000000000000000000000000000F7 :10D9300000000000000000000000000000000000E7 :10D9400000000000000000000000000000000000D7 :10D9500000000000000000000000000000000000C7 :10D9600000000000000000000000000000000000B7 :10D9700000000000000000000000000000000000A7 :10D980000000000000000000000000000000000097 -:10D990000000000000000000000000000000FF0088 +:10D990000000000000000000000000000000000087 :10D9A0000000000000000000000000000000000077 :10D9B0000000000000000000000000000000000067 :10D9C0000000000000000000000000000000000057 @@ -48555,10 +48555,10 @@ :10D9E0000000000000000000000000000000000037 :10D9F0000000000000000000000000000000000027 :10DA00000000000000000000000000000000000016 -:10DA10000000000000000000000000000000050001 -:10DA20002A00054000A800000000000000000000DF +:10DA10000000000000000000000000000000000006 +:10DA200000000000000000000000000000000000F6 :10DA300000000000000000000000000000000000E6 -:10DA400000000000000000610025800D00000000C3 +:10DA400000000000000000000000000000000000D6 :10DA500000000000000000000000000000000000C6 :10DA600000000000000000000000000000000000B6 :10DA700000000000000000000000000000000000A6 @@ -48566,7 +48566,7 @@ :10DA90000000000000000000000000000000000086 :10DAA0000000000000000000000000000000000076 :10DAB0000000000000000000000000000000000066 -:10DAC0000000000000000000005000000000000006 +:10DAC0000000000000000000000000000000000056 :10DAD0000000000000000000000000000000000046 :10DAE0000000000000000000000000000000000036 :10DAF0000000000000000000000000000000000026 @@ -48574,7 +48574,7 @@ :10DB10000000000000000000000000000000000005 :10DB200000000000000000000000000000000000F5 :10DB300000000000000000000000000000000000E5 -:10DB40000000000000000000000000500000000085 +:10DB400000000000000000000000000000000000D5 :10DB500000000000000000000000000000000000C5 :10DB600000000000000000000000000000000000B5 :10DB700000000000000000000000000000000000A5 @@ -48582,7 +48582,7 @@ :10DB90000000000000000000000000000000000085 :10DBA0000000000000000000000000000000000075 :10DBB0000000000000000000000000000000000065 -:10DBC00000000000000000000000000000FF000056 +:10DBC0000000000000000000000000000000000055 :10DBD0000000000000000000000000000000000045 :10DBE0000000000000000000000000000000000035 :10DBF0000000000000000000000000000000000025 @@ -48590,47 +48590,47 @@ :10DC10000000000000000000000000000000000004 :10DC200000000000000000000000000000000000F4 :10DC300000000000000000000000000000000000E4 -:10DC4000000000000000000000000000000000FFD5 +:10DC400000000000000000000000000000000000D4 :10DC500000000000000000000000000000000000C4 :10DC600000000000000000000000000000000000B4 :10DC700000000000000000000000000000000000A4 :10DC80000000000000000000000000000000000094 :10DC90000000000000000000000000000000000084 -:10DCA0000000008000800080008000008200820070 -:10DCB0000000000000000000000000000000000064 -:10DCC0000000000000000000000000002000200014 -:10DCD0000000000000000000000000020000000042 -:10DCE0000003000000000000000000000000200011 -:10DCF0002000820000008200000000000000000000 -:10DD000000000000000000000000000000002000F3 -:10DD100020000000000004000000000000000000DF -:10DD20000000000000200020002000400000000053 -:10DD300000000000000000000000000200000400DD +:10DCA000000004000000000000000000000000046C +:10DCB0000000000000000000000000000000000460 +:10DCC0000000000000000000000000000000000450 +:10DCD0000000000000000000000000000000000440 +:10DCE0000000000000000000000000000000000034 +:10DCF0000004000000000000000000000000000020 +:10DD00000000000000000000000000000000000013 +:10DD100000040000000000000000000000000000FF +:10DD200000040000000000000000000000000000EF +:10DD300000000000000000000000000000000000E3 :10DD400000000000000000000000000000000000D3 :10DD500000000000000000000000000000000000C3 :10DD600000000000000000000000000000000000B3 -:10DD70000090009000000000000000000000000083 +:10DD700000000000000000000000000000000000A3 :10DD80000000000000000000000000000000000093 :10DD90000000000000000000000000000000000083 -:10DDA000000000000000000004000000000000006F -:10DDB00082000000000000000000000002000100DE -:10DDC000050002000000000000000000000000004C -:10DDD000020020000000000000000200000000001F +:10DDA0000000000000002000000000000000000053 +:10DDB0000000000000000000000000000000000063 +:10DDC0000000000000002000000000000000000033 +:10DDD0000000000000000000000000000000000043 :10DDE0000000000000000000000000000000000033 -:10DDF000020002000200000000000000000000001D -:10DE0000000000000000020000000000000004000C +:10DDF0000000000000000000000000000000000023 +:10DE00000000000000000000000000000000000012 :10DE10000000000000000000000000000000000002 -:10DE20000000000000000008000080000400000066 -:10DE30000000000000000000000800080000800052 -:10DE4000020002008000000400000000000000004A -:10DE500000000000000000000008000800000000B2 -:10DE60000000009000000000000000000000000022 -:10DE700000000000000000040040004000C003401B -:10DE80000000000000000000800000000000000012 +:10DE200000000000000000000000000000000000F2 +:10DE300000000000000000000000000000000000E2 +:10DE400000000000000000000000000000000000D2 +:10DE500000000000000000000000000000000000C2 +:10DE600000000000000000000000000000000000B2 +:10DE700000000000000000000000000000000000A2 +:10DE80000000000000000000000000000000000092 :10DE90000000000000000000000000000000000082 -:10DEA0000000000000000400000800000000000066 +:10DEA0000000000000000000000000000000000072 :10DEB0000000000000000000000000000000000062 -:10DEC000000000000000000000030000000000004F +:10DEC0000000000000000000000000000000000052 :10DED0000000000000000000000000000000000042 :10DEE0000000000000000000000000000000000032 :10DEF0000000000000000000000000000000000022 @@ -48639,149 +48639,149 @@ :10DF200000000000000000000000000000000000F1 :10DF300000000000000000000000000000000000E1 :10DF400000000000000000000000000000000000D1 -:10DF500000000000030000000000000000000000BE +:10DF500000000000000000000000000000000000C1 :10DF600000000000000000000000000000000000B1 :10DF700000000000000000000000000000000000A1 :10DF80000000000000000000000000000000000091 :10DF90000000000000000000000000000000000081 -:10DFA0000000000000000000000000000088008069 -:10DFB0000080008082000000C00000090000000016 -:10DFC0000008000000000200000001000040000006 -:10DFD0000000000000000000000000000008000039 -:10DFE0000008010800000000000000000000000020 -:10DFF00000000000000000000000000000000040E1 -:10E000000004000400000000000000000000000008 -:10E0100000000000010000000000000000000000FF -:10E0200000000800000000000000000000000020C8 -:10E030000020002000200000000009000040000037 -:10E0400000000000000000000000000004000000CC +:10DFA0000000000000000000000000000000000071 +:10DFB0000000000000000000000000000000000061 +:10DFC0000000000000000000000000000000000051 +:10DFD0000000000000000000000000000000000041 +:10DFE0000000000000000000000000000000000031 +:10DFF0000000000000000000000000000000000021 +:10E0000000000000002000000000000000000000F0 +:10E010000000000000000000000000000000000000 +:10E0200000000000002000000000000000000000D0 +:10E0300000000000000000000000000000000000E0 +:10E0400000000000000000000000000000000000D0 :10E0500000000000000000000000000000000000C0 -:10E0600000000000040000000000000000000000AC +:10E0600000000000000000000000000000000000B0 :10E0700000000000000000000000000000000000A0 :10E080000000000000000000000000000000000090 -:10E09000000000000000040000000000000000007C +:10E090000000000000000000000000000000000080 :10E0A0000000000000000000000000000000000070 -:10E0B00009000000C000C000000000000000C00017 -:10E0C000A0210000C00500000000000000000000CA -:10E0D0000000000000000000000000000000000838 -:10E0E000000000000400900000000000000001009B -:10E0F000000100000000000000000000000000001F +:10E0B0000000000000000000000000000000000060 +:10E0C0000000000000000000000000000000000050 +:10E0D0000000000000000000000000000000000040 +:10E0E0000000000000000000000000000000000030 +:10E0F0000000000000000000000000000000000020 :10E10000000000000000000000000000000000000F -:10E1100000000000000000200000000000000000DF +:10E1100000000000000000000000000000000000FF :10E1200000000000000000000000000000000000EF -:10E1300010000400000000000000000000000000CB -:10E14000008400000000000000000000000000004B +:10E1300000000000000000000000000000000000DF +:10E1400000000000000000000000000000000000CF :10E1500000000000000000000000000000000000BF -:10E16000000000000000800000000000000000002F -:10E17000040000000000000000000000000000009B +:10E1600000000000000000000000000000000000AF +:10E17000000000000000000000000000000000009F :10E18000000000000000000000000000000000008F -:10E19000000000000000000000010000000000007E +:10E19000000000000000000000000000000000007F :10E1A000000000000000000000000000000000006F -:10E1B00000000000102000200020002008000000C7 -:10E1C000000000000000000000000002000000004D -:10E1D0000008000000000000000000000000000037 +:10E1B000000000000000000000000000000000005F +:10E1C000000000000000000000000000000000004F +:10E1D000000000000000000000000000000000003F :10E1E000000000000000000000000000000000002F :10E1F000000000000000000000000000000000001F :10E20000000000000000000000000000000000000E :10E2100000000000000000000000000000000000FE :10E2200000000000000000000000000000000000EE -:10E23000000000000000000100010041000100009A -:10E2400000000000000000000008000000000000C6 +:10E2300000000000000000000000000000000000DE +:10E2400000000000000000000000000002000000CC :10E2500000000000000000000000000000000000BE -:10E2600000000000000000000008000000000000A6 -:10E27000000000000004000000000000000000009A -:10E280000000000000000000200002400200020424 +:10E2600000000000000000000000000000000000AE +:10E27000000000000000000000000000000000009E +:10E28000000000000000000000000000000000008E :10E29000000000000000000000000000000000007E -:10E2A000000000000000000008000000080000005E -:10E2B000000000000000000000C00090000000000E -:10E2C00010840088008484840000000000000000A6 -:10E2D00000000090000000000000000000000000AE +:10E2A000000000000000000000000000000000006E +:10E2B000000000000000000000000000000000005E +:10E2C000000000000000000000000000000000004E +:10E2D000000000000000000000000000000000003E :10E2E000000000000000000000000000000000002E :10E2F000000000000000000000000000000000001E :10E30000000000000000000000000000000000000D -:10E31000000000000000000000000000900000006D -:10E3200000C000000000000000000000000000002D -:10E3300000000000000000000000008000800000DD +:10E3100000000000000000000000000000000000FD +:10E3200000000000000000000000000000000000ED +:10E3300000000000000000000000000000000000DD :10E3400000000000000000000000000000000000CD -:10E35000000000000080000000000000000000003D +:10E3500000000000000000000000000000000000BD :10E3600000000000000000000000000000000000AD :10E37000000000000000000000000000000000009D :10E38000000000000000000000000000000000008D -:10E3900000000000000000000000000011008000EC +:10E39000000000000000000000000000000000007D :10E3A000000000000000000000000000000000006D -:10E3B00000000000000000000000000000008000DD -:10E3C00000008080000080900080000000000000BD -:10E3D000000000000000008000000080000000003D +:10E3B000000000000000000000000000000000005D +:10E3C000000000000000000000000000000000004D +:10E3D000000000000000000000000000000000003D :10E3E000000000000000000000000000000000002D -:10E3F000004000000000800000000000000000005D +:10E3F000000000000000000000000000000000001D :10E40000000000000000000000000000000000000C :10E4100000000000000000000000000000000000FC -:10E4200000800000008000000000000000000000EC +:10E4200000000000000000000000000000000000EC :10E4300000000000000000000000000000000000DC -:10E4400082000000C09088000283841084A0000035 -:10E4500000000000000000000002000000020000B8 +:10E4400000000000000000000000000000000000CC +:10E4500000000000000000000000000000000000BC :10E4600000000000000000000000000000000000AC -:10E470000000000100C000000200000000000000D9 +:10E47000000000000000000000000000000000009C :10E48000000000000000000000000000000000008C :10E49000000000000000000000000000000000007C -:10E4A00000000020000000C000000000000000008C +:10E4A000000000000000000000000000000000006C :10E4B000000000000000000000000000000000005C -:10E4C00000000000009000C0C0900008C0841188C7 -:10E4D000000000000000000000000000409000006C +:10E4C000000000000000000000000000000000004C +:10E4D000000000000000000000000000000000003C :10E4E000000000000000000000000000000000002C -:10E4F0000000000088000000000000000000000094 +:10E4F000000000000000000000000000000000001C :10E50000000000000000000000000000000000000B :10E5100000000000000000000000000000000000FB -:10E5200000000100008888000100000000000000D9 +:10E5200000000000000000000000000000000000EB :10E5300000000000000000000000000000000000DB -:10E5400000000000000000800080000000000000CB -:10E550008400000000000000000040000000008077 +:10E5400000000000000000000000000000000000CB +:10E5500000000000000000000000000000000000BB :10E5600000000000000000000000000000000000AB :10E57000000000000000000000000000000000009B :10E58000000000000000000000000000000000008B :10E59000000000000000000000000000000000007B -:10E5A00000000000410000800000090000000000A1 +:10E5A000000000000000000000000000000000006B :10E5B000000000000000000000000000000000005B -:10E5C0000000000080118000000000000005808035 -:10E5D00000000000000000000000000000118000AA +:10E5C000000000000000000000000000000000004B +:10E5D000000000000000000000000000000000003B :10E5E000000000000000000000000000000000002B -:10E5F000000000000000000000000000000000809B +:10E5F000000000000000000000000000000000001B :10E60000000000000000000000000000000000000A :10E6100000000000000000000000000000000000FA -:10E620000000000000000011000000800000000059 +:10E6200000000000000000000000000000000000EA :10E6300000000000000000000000000000000000DA -:10E64000000000000000C001200000000000880061 -:10E650008220844010000000000000000000000143 -:10E660002000008800000000000000000000000002 +:10E6400000000000000000000000000000000000CA +:10E6500000000000000000000000000000000000BA +:10E6600000000000000000000000000000000000AA :10E67000000000000000000000000000000000009A -:10E680000002000000000000000000000000000088 +:10E68000000000000000000000000000000000008A :10E69000000000000000000000000000000000007A -:10E6A0000000000000000000000100000040000029 +:10E6A000000000000000000000000000000000006A :10E6B000000000000000000000000000000000005A -:10E6C0000000000000000000000600004100000003 +:10E6C000000000000000000000000000000000004A :10E6D000000000000000000000000000000000003A -:10E6E0000000000007000000000000000000000023 -:10E6F0000000000000000000001100000700000002 -:10E700000000000007000000000000000000000002 +:10E6E000000000000000000000000000000000002A +:10E6F000000000000000000000000000000000001A +:10E700000000000000000000000000000000000009 :10E7100000000000000000000000000000000000F9 -:10E7200000000000000000000000000000000700E2 -:10E730008221000000000000000000000000000036 -:10E7400000000000000000000000FF000000FF00CB -:10E750000000C090C09F0F000FFF000000000000ED -:10E7600000000000FF000000FF00000000000000AB +:10E7200000000000000000000000000000000000E9 +:10E7300000000000000000000000000000000000D9 +:10E7400000000000000000000000000000000000C9 +:10E7500000000000000000000000000000000000B9 +:10E7600000000000000000000000000000000000A9 :10E770000000000000000000000000000000000099 :10E780000000000000000000000000000000000089 :10E790000000000000000000000000000000000079 :10E7A0000000000000000000000000000000000069 -:10E7B0000000F0F000000000000000000000000079 -:10E7C000000000000000000000000000FF0000004A -:10E7D000FF000000CF90CF9FC399C39900000000B5 -:10E7E000000000000000FF000000FF00000000002B +:10E7B0000000000000000000000000000000000059 +:10E7C0000000000000000000000000000000000049 +:10E7D0000000000000000000000000000000000039 +:10E7E0000000000000000000000000000000000029 :10E7F0000000000000000000000000000000000019 :10E800000000000000000000000000000000000008 :10E8100000000000000000000000000000000000F8 :10E8200000000000000000000000000000000000E8 -:10E8300000000000F0F000000000000000000000F8 +:10E8300000000000000000000000000000000000D8 :10E8400000000000000000000000000000000000C8 :10E8500000000000000000000000000000000000B8 :10E8600000000000000000000000000000000000A8 @@ -48791,29 +48791,29 @@ :10E8A0000000000000000000000000000000000068 :10E8B0000000000000000000000000000000000058 :10E8C0000000000000000000000000000000000048 -:10E8D000000000FF00000F0F3B380B08F099C30049 -:10E8E000000000000000000000FF0000FFFF00002B +:10E8D0000000000000000000000000000000000038 +:10E8E0000000000000000000000000000000000028 :10E8F0000000000000000000000000000000000018 -:10E900000000000000000000000000006060606087 +:10E900000000000000000000000000000000000007 :10E9100000000000000000000000000000000000F7 :10E9200000000000000000000000000000000000E7 -:10E9300000003C3C0000FFFF000000000000000061 +:10E9300000000000000000000000000000000000D7 :10E9400000000000000000000000000000000000C7 -:10E950000000000000FF00000F0FFBF8CBC8F0998B -:10E96000C3FF000000000000000000FF00000000E6 +:10E9500000000000000000000000000000000000B7 +:10E9600000000000000000000000000000000000A7 :10E970000000000000000000000000000000000097 -:10E9800000000000000000000000000000006060C7 -:10E9900060600000000000000000000000000000B7 +:10E980000000000000000000000000000000000087 +:10E990000000000000000000000000000000000077 :10E9A0000000000000000000000000000000000067 -:10E9B000000000003C3C00000000000000000000DF +:10E9B0000000000000000000000000000000000057 :10E9C0000000000000000000000000000000000047 -:10E9D00000000000038203300C008AC00000000029 -:10E9E00000C00000000000000000000015002A0028 -:10E9F000054000A80000000000000000000000002A -:10EA00000000000000000020050000A00000000041 +:10E9D0000000000000000000000000000000000037 +:10E9E0000000000000000000000000000000000027 +:10E9F0000000000000000000000000000000000017 +:10EA00000000000000000000000000000000000006 :10EA100000000000000000000000000000000000F6 :10EA200000000000000000000000000000000000E6 -:10EA300000000000000005002A00054000A80000BA +:10EA300000000000000000000000000000000000D6 :10EA400000000000000000000000000000000000C6 :10EA500000000000000000000000000000000000B6 :10EA600000000000000000000000000000000000A6 @@ -48848,48 +48848,48 @@ :10EC300000000000000000000000000000000000D4 :10EC400000000000000000000000000000000000C4 :10EC500000000000000000000000000000000000B4 -:10EC600000000000000000000000000000000000A4 -:10EC700000008400000020000000000020000000D0 +:10EC600000000000000300000000000000000000A1 +:10EC7000000000008800000000000000000000000C :10EC80000000000000000000000000000000000084 -:10EC90000000200000000000000000000000000054 +:10EC90000000000000000000000000000000000074 :10ECA0000000000000000000000000000000000064 -:10ECB0000000000020000000000000000000000034 +:10ECB0000000000000000000000000000000000054 :10ECC0000000000000000000000000000000000044 -:10ECD0000000000020000000000000000000000014 +:10ECD0000000000000000000000000000000000034 :10ECE0000000000000000000000000000000000024 :10ECF0000000000000000000000000000000000014 :10ED00000000000000000000000000000000000003 :10ED100000000000000000000000000000000000F3 -:10ED20000000000000000000008200000000000061 +:10ED200000000000000000000000000000000000E3 :10ED300000000000000000000000000000000000D3 :10ED400000000000000000000000000000000000C3 :10ED500000000000000000000000000000000000B3 -:10ED6000000004000400000000000000000000009B -:10ED7000000000000000840000000400000000000B +:10ED600000000000000000000000000000000000A3 +:10ED70000000000000000000000000000000000093 :10ED80000000000000000000000000000000000083 :10ED90000000000000000000000000000000000073 -:10EDA0000000000004000400000000030000000058 +:10EDA0000000000000000000000000000000000063 :10EDB0000000000000000000000000000000000053 :10EDC0000000000000000000000000000000000043 :10EDD0000000000000000000000000000000000033 -:10EDE00000000000000000000000000000400000E3 -:10EDF000000000000000000000000008000000000B -:10EE000000000000000000040000000000000000FE -:10EE100000840000000000000000008200000000EC +:10EDE0000000000000000000000000000000000023 +:10EDF0000000000000000000000000000000000013 +:10EE00000000000000000000000000000000000002 +:10EE100000000000000000000000000000000000F2 :10EE200000000000000000000000000000000000E2 :10EE300000000000000000000000000000000000D2 :10EE400000000000000000000000000000000000C2 -:10EE500000000000000000000000090000000000A9 -:10EE600000000000000000000000000200000000A0 +:10EE500000000000000000000000000000000000B2 +:10EE600000000000000000000000000000000000A2 :10EE70000000000000000000000000000000000092 :10EE80000000000000000000000000000000000082 -:10EE90000000000000000000000000000002000070 -:10EEA0000000000900000000000000000000000059 +:10EE90000000000000000000000000000000000072 +:10EEA0000000000000000000000000000000000062 :10EEB0000000000000000000000000000000000052 :10EEC0000000000000000000000000000000000042 :10EED0000000000000000000000000000000000032 :10EEE0000000000000000000000000000000000022 -:10EEF000000000000000000200000000000000020E +:10EEF0000000000000000000000000000000000012 :10EF00000000000000000000000000000000000001 :10EF100000000000000000000000000000000000F1 :10EF200000000000000000000000000000000000E1 @@ -48897,54 +48897,54 @@ :10EF400000000000000000000000000000000000C1 :10EF500000000000000000000000000000000000B1 :10EF600000000000000000000000000000000000A1 -:10EF70000000000000000000000000000000000091 +:10EF70000800000000000000000000000000000089 :10EF80000000000000000000000000000000000081 :10EF90000000000000000000000000000000000071 -:10EFA0000000000000000000080000000000000059 +:10EFA0000000000000000000000000000000000061 :10EFB0000000000000000000000000000000000051 -:10EFC00088000000000000000000000000000000B9 -:10EFD00082000000000000000000000000000000AF +:10EFC0000000000000000000000000000000000041 +:10EFD0000000000000000000000000000000000031 :10EFE0000000000000000000000000000000000021 -:10EFF0000000090000000000000000000000000008 +:10EFF0000000000000000000000000000000000011 :10F000000000000000000000000000000000000000 -:10F01000000000A000000000000000000000000050 -:10F020000000000008900000000000000000000048 -:10F0300000000000000000000000000003001100BC -:10F0400000001100000000000000000000000000AF -:10F0500000000000000000000500000000000000AB -:10F06000020000000000000000000000000000009E -:10F070000008000000410000000000000000000047 -:10F08000000000000011000000000000000000006F +:10F0100000000000000002000000000000000000EE +:10F0200000000000000000000000000000000000E0 +:10F0300000000000000000000200000000000000CE +:10F0400000000000000000000000000000000000C0 +:10F0500000000000000000000200000000000000AE +:10F0600000000000000000000000000000000000A0 +:10F070000000000000000000000000000000000090 +:10F080000000000000000000000000000000000080 :10F090000000000000000000000000000000000070 :10F0A0000000000000000000000000000000000060 :10F0B0000000000000000000000000000000000050 :10F0C0000000000000000000000000000000000040 :10F0D0000000000000000000000000000000000030 :10F0E0000000000000000000000000000000000020 -:10F0F0000090000000000000208200880008050049 -:10F10000000000000000000000000000000000847B +:10F0F0000000000000000000000000000000000010 +:10F1000000000000000000000000000000000000FF :10F1100000000000000000000000000000000000EF -:10F12000000000000000008400000000000000005B +:10F1200000000000000000000000000000000000DF :10F1300000000000000000000000000000000000CF :10F1400000000000000000000000000000000000BF -:10F15000000000000000000000840000000000002B +:10F1500000000000000000000000000000000000AF :10F16000000000000000000000000000000000009F -:10F17000000000000002000000000000000000008D +:10F17000000000000000000000000000000000008F :10F18000000000000000000000000000000000007F -:10F19000000000000000000000020000000000006D +:10F19000000000000000000000000000000000006F :10F1A000000000000000000000000000000000005F -:10F1B000000200000000000000000000000000004D +:10F1B000000000000000000000000000000000004F :10F1C000000000000000000000000000000000003F :10F1D000000000000000000000000000000000002F -:10F1E000000000020000000000000000000000001D -:10F1F0000000000000000800000000000000000007 -:10F2000000000000000000000900000000000000F5 +:10F1E000000000000000000000000000000000001F +:10F1F000000000000000000000000000000000000F +:10F2000000000000000000001100030000000000EA :10F2100000000000000000000000000000000000EE -:10F220000000000000000000090000000090000045 +:10F2200000000000000000000000080000000000D6 :10F2300000000000000000000000000000000000CE -:10F2400000000000000000901100110011000000FB +:10F2400000000000000000000000000000000000BE :10F2500000000000000000000000000000000000AE -:10F260000000000000000000008803001100000002 +:10F26000000000000000000000000000000000009E :10F27000000000000000000000000000000000008E :10F28000000000000000000000000000000000007E :10F29000000000000000000000000000000000006E @@ -49092,178 +49092,178 @@ :10FB70000000000000000000000000000000000085 :10FB80000000000000000000000000000000000075 :10FB90000000000000000000000000000000000065 -:10FBA0000000000000000000000000000000000055 -:10FBB0000000000000000000000000000000000045 -:10FBC0000000000004000400000000080000000025 -:10FBD0000000000000000000000000030000000022 -:10FBE0000000000000002000020000000200880069 -:10FBF00000000000100000008400000400008800E5 -:10FC00000000040088002000200002000000000026 -:10FC10000000880020008800200089000000000209 -:10FC2000000000000000000000000000000000A034 -:10FC300000000000000000000000000000000000C4 +:10FBA0000000000002000000000200002000000031 +:10FBB00000000000000000000004000000008800B9 +:10FBC0000200880020000000000200000000000089 +:10FBD000000000000000000000040003000000001E +:10FBE0002000200088002000000000040000000029 +:10FBF0000000000000000000000000040000000001 +:10FC000000000000000000000000000000000000F4 +:10FC100000000000000000000000000400000000E0 +:10FC200000000000000000000000000000000000D4 +:10FC300000000000000000000000000100000000C3 :10FC400000000000000000000000000000000000B4 -:10FC500000000000000000000000000000000000A4 -:10FC60000000000000000000000000900000000004 +:10FC500000000000000000000000000100000000A3 +:10FC60000000000000000000000000000000000094 :10FC70000000000000000000000000000001000083 -:10FC800000000000000000000000000040004000F4 -:10FC90000000000000000000000000002000000044 -:10FCA00000000000000000000000000082000008CA -:10FCB0000000000000000000000000000000000044 -:10FCC0000000000000000000020000000000000929 -:10FCD0000000000000000000000000000000000024 -:10FCE00000000000000000000000000000400000D4 -:10FCF0000040000000000200000000000000008042 -:10FD000088008800000000000000020000000000E1 -:10FD10000000000000008800000000000200000059 -:10FD200000080008000000080000000000080000B3 -:10FD3000000800840084000000000000008400002F -:10FD40000084008400000040000000000004000067 -:10FD50000088000800840000008400000000000803 -:10FD6000000000820000000000000000000000828F -:10FD7000000000C00008000000080084000000002F -:10FD8000000800000000000000200000000000004B -:10FD900000000000008200000008000000000000D9 -:10FDA0000000002100080005002100210021A0051D -:10FDB00000210009000800000021000800210021A6 -:10FDC000002100080003000500210000002100219F -:10FDD000002100050003000000210008002100218F -:10FDE0001021000000020003000300210003002195 -:10FDF000002184219000000000000021002100214A -:10FE0000002100210000000000000021000900097D -:10FE100000090009000000000000002100000000AF -:10FE200000000100000000000000210000000000B0 -:10FE3000008400200000000000000084000000009A -:10FE400000000008000000000000000000000000AA +:10FC80000000000000000000000000000000000074 +:10FC90000000000000000000000000000001000063 +:10FCA0000000000000000000000000000000000054 +:10FCB0000000000020000000000000000000000024 +:10FCC0000000000000000000000000000000000034 +:10FCD0000200000000000000000000000000000022 +:10FCE0000000000000000000000000000000000014 +:10FCF0000000020000000000000000000000000002 +:10FD000000000000000000000000000000000000F3 +:10FD100000000000000000000000000000000000E3 +:10FD200000000000000000000000000000000008CB +:10FD300000000000000000000008000000000000BB +:10FD400000000000000000000000000000000004AF +:10FD5000000020000000000000080000000000007B +:10FD60000000000000000000000000000000000093 +:10FD7000000000000000000000000008000000007B +:10FD80000000000000000000000000000000000073 +:10FD9000000000000000000000000008000000005B +:10FDA0000000000000000000000000000000000053 +:10FDB0000000000000000000000000000000000043 +:10FDC0000000000000000000000000000000000033 +:10FDD0000000000000000000000000000000000023 +:10FDE0000000000000000000000000000000000013 +:10FDF0000000000000000000000000000000000003 +:10FE000000000000002100000000000000000000D1 +:10FE100000000000000400000000000000000000DE +:10FE200000000000000000000000000000000000D2 +:10FE30000000004000000000000000000000000082 +:10FE400000000000000000000000000000000000B2 :10FE500000000000000000000000000000000000A2 -:10FE6000000080840000000000000000000000008E -:10FE7000000000000004000000000000000000007E -:10FE8000000000000000000003000000000000006F +:10FE60000000000000000000000000000000000092 +:10FE70000000000000000000000000000000000082 +:10FE80000000000000000000000000000000000072 :10FE90000000000000000000000000000000000062 -:10FEA0000000000010002000C000820000000000E0 -:10FEB00000000000000000000000820004000000BC -:10FEC0000000000000050000000082008200000029 -:10FED00000000000A00000000003820000000000FD -:10FEE0000011A000000000000000A000820000003F -:10FEF0000000000582000000A00020008200A00099 -:10FF0000A000A0008200C000820000008200040067 -:10FF100000008200820084008200C0098211A000DB -:10FF2000C000000082008200000000A0000000006D -:10FF3000000000000000000000A000000000000021 +:10FEA000000000000000000002000000020010003E +:10FEB000000000000000A000C000A00000008200C0 +:10FEC00000008400000082008200820002008200A4 +:10FED0000000000000008200820090000000A000EE +:10FEE0000000000000000000820082008200080084 +:10FEF0000800000000000000820082008200000074 +:10FF000082000000000000008200820082000800E1 +:10FF1000820000000000000000000000000000005F +:10FF200000000000000000000000000000000000D1 +:10FF300000000000000000000000000000000000C1 :10FF400000000000000000000000000000000000B1 :10FF500000000000000000000000000000000000A1 -:10FF6000000000840000000000000000000000000D -:10FF70000000000000840800000020880004000049 +:10FF60000000000000000000000000000000000091 +:10FF70000000000000000000000000000000000081 :10FF80000000000000000000000000000000000071 -:10FF90000000000000000000000008000000000059 -:10FFA000000000000300000000000000000000004E -:10FFB0000008A000900000000000000002080021DE -:10FFC00000000000000000000141000000210000CE -:10FFD0000000A02100000000A000000000080000B8 -:10FFE000000800030000000000850003000000007E -:10FFF00000000008A0050002000000004000820888 +:10FF90000000000000000000000000000000000061 +:10FFA0000000000000000000000000000800000049 +:10FFB000C00000000000C0000000000000000000C1 +:10FFC0000000000000000000000000000000000031 +:10FFD000000000000000820000000000000000009F +:10FFE000000000000000000000050000000000000C +:10FFF0000000000000000000000000000000000001 :02000004000CEE -:1000000000000008040000000000000000000000E4 -:100010000000820000000000C00000000000080294 -:100020000000000800000000000000004000000088 -:1000300000000000000000000020000000000000A0 -:1000400000000000000000000000100000000000A0 +:1000000000000000000000000000000000000000F0 +:1000100000000000000000000000000000000000E0 +:1000200000000000000000000000000000000000D0 +:1000300000000000000000000000000000000000C0 +:1000400000000000000000000000000000000000B0 :1000500000000000000000000000000000000000A0 -:10006000000000000000000000000004000000008C +:100060000000000000000000000000000000000090 :100070000000000000000000000000000000000080 :100080000000000000000000000000000000000070 :100090000000000000000000000000000000000060 -:1000A00000000000000000000000000000009008B8 -:1000B0000000C00000000000000000084000000038 -:1000C00000210008000000050000000300042021BA -:1000D00000000000024000000000000800000000D6 -:1000E0000000C0210000000588050000000000009D -:1000F00040050005000000050240024002000240E9 -:100100009040A00900000000000200000000000074 -:10011000000000000000C000820082000800820091 -:1001200000000000000000000800000208000000BD +:1000A0000000000000000000000000000000000050 +:1000B000000000000000C0000200820000000000FC +:1000C0000000000000000000000000000000000030 +:1000D0000000000000000000080000000000840094 +:1000E0000000000000000000000000000000000010 +:1000F000000000000800004082000800A00000008E +:1001000000000000000000000000000000000000EF +:10011000000000000800000008000800A000000027 +:1001200000000000000000000000000000000000CF :1001300000000000000000000000000000000000BF -:1001400000000000000000000000000000000001AE +:1001400000000000000000000000000000000000AF :10015000000000000000000000000000000000009F :10016000000000000000000000000000000000008F :10017000000000000000000000000000000000007F -:1001800000000000210000002100000000004000ED +:10018000000000000000000000000000000000006F :10019000000000000000000000000000000000005F -:1001A000000000000000000000000000000000004F -:1001B000000000010001000100C00001000100C0BA -:1001C000011100010001004000020001000100C116 -:1001D000000000010001000100C00001000100C09A -:1001E000011100010001004000400001000100C0B9 -:1001F0000000000000010001000100C0000100013A -:1002000000C0001100000101004000820001400117 -:1002100000C0000000010001000100C00001000159 -:1002200000C00011000008010040008200014001F0 -:1002300000C0000000410041004100820041004137 -:10024000008910C1031011410000008000410041ED -:100250000085000000410041004100820041004152 -:10026000008910C100101141000000000041004150 -:100270000085000000000041004100410082004173 -:100280000041009008C1004103410000000000410E -:10029000804100C000000041004100410082004157 -:1002A0000041009008C100418341000000800041EE -:1002B000804100C0000041000300000000804100B8 -:1002C0008900000010000900210000808500C100A5 -:1002D000C1000080808041000300000000804100D8 -:1002E0008200000010000900888000808300C100A7 -:1002F000C10000C0000000004100030000000080B9 -:100300004100820000002000050084000005838079 -:10031000C100C10000C08000410003000000008057 -:100320004100880000000500400082000085900028 -:10033000C100C10000C0800001000100000000C039 -:100340000100C00000000000400088400008C0001C -:100350000300C1000084080801000100000000C083 -:100360000100C00000000000840009820010C08469 -:100370004100C10000054000000001000100000034 -:1003800000C00100C00000000000840005A000C003 -:10039000C0040300C10000828200010001000000CF -:1003A00000C00100C1000000000020000520008402 -:1003B000C1400300C1000082820000C00001C0C132 -:1003C00000000000000100C002880003000100C11D -:1003D0000000000000010001000000C00001C0C1D9 -:1003E00000000000000100C002880003000100C1FD -:1003F00000000000000100000000000000C000013B -:10040000C0C100000000000100C0028800A100017E -:1004100000C10000000000010000000000C0000159 -:10042000C0C100000000000100C0882000050001DC -:1004300000C1000000000001000000000080004139 -:1004400080C100000000004100C1111000410041C6 -:1004500000C10000000000410005090000800041CB -:1004600080C100000000004100C1001000410041B7 -:1004700000C10000000000410005000000000080F5 -:10048000004180C100000000004100C1000800419F -:10049000004100C100000000004100400000008059 -:1004A000004180C100000000004100C1004000C1C7 -:1004B000004100C100000000004100400000C100F8 -:1004C000800080C100004102000082004100C14163 -:1004D0000000800400004100000080004100C100D5 -:1004E000800080C100004111000002004100C141B4 -:1004F0000000800400004100000080004100000076 -:10050000C100800080C100004111000002004100D4 -:10051000C180000080040000410000008000410014 -:10052000C100800080C100004111000008004100AE -:10053000C1410000804000004100000080004100F7 -:10054000C1004000C0C100000100020084000100A1 -:10055000C1A19000C001000001000000C000010026 -:10056000C1004000C0C1000001000200880001007D -:10057000C1A10200C001000001000000C000010094 -:100580000000C1004000C0C10000010002001000D6 -:100590000100C108A000C001000001000000C0006F -:1005A0000100C1004000C0C100000100880011002E -:1005B0000100C1A1A000C001000001000000C000B6 -:1005C00001000000000000000042000000000000E8 -:1005D00000008112008807004800000000000000B1 -:1005E00000000000000000000042000000000000C9 -:1005F0000000811200880700480000000000000091 -:1006000000000000000000000000004200000000A8 -:1006100000000000411200880700000000000000F8 -:100620000000000000000000000000420000000088 -:100630000000000081120088070048000000000050 -:1006400000000000000000000000000000000000AA +:1001A000000000002100000000000000000000002E +:1001B000000000000000000000000100000000003E +:1001C00000000000050000C000000000000000006A +:1001D000000000000000000000000100000000001E +:1001E00000000000040000C000000000000000004B +:1001F00000000000000000000000000001000000FE +:10020000000000000000050000C000000000000029 +:1002100000000000000000000000000001000000DD +:10022000000000000000050000C000000000000009 +:10023000000000000000000000000000410000007D +:10024000000000000005A000008000000000000089 +:10025000000000000000000000000000410000005D +:10026000000000000040910000800000000000003D +:10027000000000000000000000000000000041003D +:10028000000000000000004083000080000000002B +:10029000000000000000000000000000000041001D +:1002A000000000000000004083000080000000000B +:1002B00000000000000000000300000000800000BB +:1002C000800000000000200003000080800000008B +:1002D000000000000041000003000000008000005A +:1002E00080000000000020004000000080000000AE +:1002F000000000000041000000000300000000803A +:100300000000800000000000050040000080800028 +:100310000000000000000041000003000000008019 +:100320000000800000000000050040000080800008 +:10033000000000000000004100000100000000C0BB +:10034000000020000000000090004008000482002F +:10035000400000000000000100000100000000C09B +:100360000000200000000000900082080040820091 +:10037000400000000000000100000000010000003B +:1003800000C0000020000000000090008202000475 +:100390008284400000000000000100000100000015 +:1003A00000C000002000000000009000820800044F +:1003B0008284400000000000000100000000C00036 +:1003C00000000000000000000000008800000000A5 +:1003D0000000000000000000000000000000C0005D +:1003E000000000000000000000000002000000000B +:1003F00000000000000000000000000000000000FD +:10040000C00000000000000000000000001000001C +:1004100000000000000000000000000000000000DC +:10042000C0000000000000000000000000100000FC +:1004300000000000000000000000000000000000BC +:10044000800000000000000000000000000000002C +:10045000000000000000000000000000000000009C +:10046000800000000000000000000000008000008C +:10047000000000000000000000000000000000007C +:1004800000008000000000000000000000000000EC +:10049000000000000000000000000000000000005C +:1004A00000008000000000000000000000000000CC +:1004B000000000000000000000000000000000003C +:1004C000800000C1000000000000000000000041AA +:1004D00000000040000000000000000000000000DC +:1004E000800000C10000000000000000000000418A +:1004F00000000040000000000000000000000000BC +:100500000000800000C100000000000000000000AA +:10051000004100000040000000000000000000005A +:100520000000800000C1000000000000000000008A +:10053000004100000040000000000000000000003A +:100540000000400000C100000000000000000000AA +:100550000021A000000000000000000000000000DA +:100560000000400000C1000000000000000000008A +:100570000021A000000000000000000000000000BA +:1005800000000000400000C100000000000000006A +:1005900000000021400000000000000000000000FA +:1005A00000000000400000C100000000000000004A +:1005B00000000021400000000000000000000000DA +:1005C00000000000000000000042000000000000E9 +:1005D0004800810000E0000048000000000000002A +:1005E0000042000000000000004200000000000087 +:1005F0004800810000E0000048000000000000000A +:100600000042000000000000000000420000000066 +:1006100000004800810000E00000480000000000E9 +:100620000000004200000000000000420000000046 +:1006300000004800810000E00000480000000000C9 +:100640000000004200000000000000000000000068 :10065000000000000000000000000000000000009A :10066000000000000000000000000000000000008A :10067000000000000000000000000000000000007A @@ -49279,31 +49279,31 @@ :1007100000000000000000000000000000000000D9 :1007200000000000000000000000000000000000C9 :1007300000000000000000000000000000000000B9 -:100740000000000000000000757B000000000000B9 +:100740000000000000000000747B000000000000BA :100750000000000000000000000000000000000099 -:10076000000000000000DEAE757B0000000000000D +:10076000000000000000DE2E747B0000000000008E :100770000000000000000000000000000000000079 -:10078000000000000000DEAE0000757B00000000ED +:10078000000000000000DE2E0000747B000000006E :100790000000000000000000000000000000000059 -:1007A0000000000000000000DEAE757B00000000CD +:1007A0000000000000000000DE2E747B000000004E :1007B0000000000000000000000000000000000039 -:1007C0000000000000000000DEAE60C60300000074 -:1007D000000000000031E0000000000000000C00FC -:1007E00000000000000000C0630660C603000000B7 -:1007F000000000000031E0000000000000000C00DC -:1008000000000000000000C06306000060C6030096 -:100810000000000000000031E000000000000000C7 -:100820000C0000000000000000C0630660C603006A -:100830000000000000000031E000000000000000A7 -:100840000C0000000000000000C063060000000073 -:100850000000000000000000000000000000000098 -:100860000000000000000000000000000000000088 -:100870000000000000000000000000000000000474 -:100880000000000000000000000000000000000068 -:100890000000000000000000000000000000000058 -:1008A00000008400000000000000000000000000C4 -:1008B00000000000000088000000000000000000B0 -:1008C00000000000000084000000000000000000A4 +:1007C0000000000000000000DE2E61560340000023 +:1007D000000000000231E0000000000000000C40BA +:1007E00000000000000002C06A866156034000005D +:1007F000000000000231E0000000000000000C409A +:1008000000000000000002C06A860000615603403C +:100810000000000000000231E000000000000000C5 +:100820000C4000000000000002C06A8661560340D0 +:100830000000000000000231E000000000000000A5 +:100840000C4000000000000002C06A8600000000AA +:100850000000000088008800000000000000000088 +:100860000000C000000000000000000000000000C8 +:100870000000000000002000000000000000000058 +:100880000000200000000000000000000000000048 +:100890000000000000000000200000000000000038 +:1008A0000000000020000000000000000000000028 +:1008B0000000000000000000000000000000000038 +:1008C0000000000000000000000000000000000028 :1008D0000000000000000000000000000000000018 :1008E0000000000000000000000000000000000008 :1008F00000000000000000000000000000000000F8 @@ -49314,44 +49314,44 @@ :1009400000000000000000000000000000000000A7 :100950000000000000000000000000000000000097 :100960000000000000000000000000000000000087 -:1009700000000000000000000000004000400000F7 +:100970000000000000000000000000000000000077 :100980000000000000000000000000000000000067 -:1009900000000000000000000000900000000000C7 -:1009A00000000000000000000000840000000000C3 +:100990000000000000000000000000000000000057 +:1009A0000000000000000000000000000000000047 :1009B0000000000000000000000000000000000037 -:1009C0000000000000000000000000000000000027 -:1009D0000000000000000000000000080008000007 -:1009E0000000008200000008000800000000000075 -:1009F00000000000000800000000000800080000DF -:100A000000000000008800840010000000000000CA -:100A10000000000000000088000000000082008844 -:100A200000000000000000000008000000000000BE +:1009C0000000000000000000200000000000000007 +:1009D0000000000000000000000000000000000017 +:1009E0000000000000000000000000000000000007 +:1009F00000000000000000000000000000000000F7 +:100A000000000000000000000000000000000000E6 +:100A100000000000000000000000000000000000D6 +:100A200000000000000000000000000000000000C6 :100A300000000000000000000000000000000000B6 -:100A4000000000000000000800840000000000001A -:100A5000000000000000000000000000004100084D +:100A400000000000000000000000000000000000A6 +:100A50000000000000000000000000000000000096 :100A60000000000000000000000000000000000086 :100A70000000000000000000000000000000000076 :100A80000000000000000000000000000000000066 -:100A9000000000000000000000000009000000004D -:100AA0000041000000000000000000000000000005 -:100AB0000000000000000000000000000000000036 +:100A90000000000000000000000000000000000056 +:100AA0000000000000000000000000000000000046 +:100AB0000000000000000000000000000000000234 :100AC0000000000000000000000000000000000026 -:100AD000000000000000000000080000000000000E -:100AE00000000000000000000000000800080000F6 -:100AF00000000000000000000000000000000000F6 -:100B00000000000000000000000000A00010000035 -:100B100000000000000000000000000000001100C4 -:100B200000C00000000000000000000800080000F5 -:100B30000000000000000000000000000000410074 -:100B400003000300000000000000000800A00000F7 -:100B50000000008400000000000000000000000011 +:100AD0000000000000000000000000000000030013 +:100AE00003000000000000000000090000000000FA +:100AF00000000000000000000000000000000800EE +:100B000008000000000000000000000000000000DD +:100B100000000000000000000000000000000000D5 +:100B200000000800000000000000000000000000BD +:100B300000A0000000000000000000000000000015 +:100B4000000008000000000000000000000000009D +:100B50000090000000000000000000000000000005 :100B60000000000000000000000000000000000085 :100B70000000000000000000000000000000000075 :100B80000000000000000000000000000000000065 :100B90000000000000000000000000000000000055 -:100BA0000000000000000000000000090000000933 -:100BB0000000400090000000000000000000000065 -:100BC0000000000000000000000000000000000025 +:100BA0000000000000000000000000000000000045 +:100BB0000000000000000000000000000000000035 +:100BC000000000000000000000000009000000001C :100BD0000000000000000000000000000000000015 :100BE0000000000000000000000000000000000005 :100BF00000000000000000000000000000000000F5 @@ -49364,30 +49364,30 @@ :100C60000000000000000000000000000000000084 :100C70000000000000000000000000000000000074 :100C80000000000000000000000000000000000064 -:100C9000000800000000000000000000000000004C +:100C90000000000000000000000000000000000054 :100CA0000000000000000000000000000000000044 -:100CB0000000008000009000000000000000000024 +:100CB0000000000000000000000000000000000034 :100CC0000000000000000000000000000000000024 -:100CD0000000000000000000000000009000000084 -:100CE00000000000000000080008110000000000E3 -:100CF00020080000200000000000000000000000AC -:100D00000000000000000008000011000082000048 -:100D1000008400002000000000000000000000002F -:100D200000000000000000000002000000000000C1 -:100D300000000000001000000000000000000000A3 -:100D4000000000000000000000840008000800848B -:100D5000000000000800000000000000000000008B +:100CD0000000000000000000000000000000000014 +:100CE0000000000000000000000000000000000004 +:100CF000009000000500000000000000000000005F +:100D000000000000000000000000000000000000E3 +:100D100000000000080000000000000000000000CB +:100D200000000000000000000000000000000000C3 +:100D300000000000000008000000000000000000AB +:100D400000000000000000000000000000000000A3 +:100D5000000000000000080000000000000000008B :100D60000000000000000000000000000000000083 :100D70000000000000000000000000000000000073 :100D80000000000000000000000000000000000063 -:100D90000000000000000000000000210000000032 +:100D90000000000000000000000000000000000053 :100DA0000000000000000000000000000000000043 :100DB0000000000000000000000000000000000033 :100DC0000000000000000000000000000000000023 -:100DD00000000021000000000021000000000000D1 +:100DD0000000000000000000000000000000000013 :100DE0000000000000000000000000000000000003 :100DF00000000000000000000000000000000000F3 -:100E000000000000000000000000020000000000E0 +:100E000000000000000000000000000000000000E2 :100E100000000000000000000000000000000000D2 :100E200000000000000000000000000000000000C2 :100E300000000000000000000000000000000000B2 @@ -49539,67 +49539,67 @@ :101750000000000000000000000000000000000089 :101760000000000000000000000000000000000079 :101770000000000000000000000000000000000069 -:101780000000000000000000001000000000000049 -:101790000000000000000000000000000000000049 -:1017A0000000000000000000001000000000000029 +:101780000000000000000000000002000000000057 +:1017900000000000000000000000A00000000000A9 +:1017A000000000000000000800000200000000002F :1017B0000000000000000000000000000000000029 -:1017C0000000000000100000000100000000000008 -:1017D0000000000000000000900000000000000079 -:1017E00000000000000000000000000040000000B9 -:1017F00010000000000000002000000000000000B9 +:1017C0000000000000000004000000000400000011 +:1017D0000000000000000000000000000000000009 +:1017E00000000000000000000004000000000000F5 +:1017F00000000000000000000000000000000000E9 :1018000000000000000000000000000000000000D8 :1018100000000000000000000000000000000000C8 -:1018200000000002000000000000000000000000B6 +:1018200000000000000000000000000000000000B8 :1018300000000000000000000000000000000000A8 -:101840000000000000020000000000000000000096 +:101840000000000000000000000000000000000098 :101850000000000000000000000000000000000088 -:101860000000000000000000000010004000000028 +:101860000000000000000000000000000000000078 :101870000000000000000000000000000000000068 -:101880000000000000000000000000000000000058 -:101890000200000000000000000000000000000046 -:1018A00000000000000000000000820000000000B6 -:1018B0000000000002000000020000400000820062 -:1018C0000000020000008200000000000000001084 -:1018D0000000000000000000020000000000000006 +:101880000000000000000000000000000000200038 +:101890000000000000000000000000000000000048 +:1018A0000000000000000000000000000000200018 +:1018B0000000000000000000000000000000000028 +:1018C0000000000000000000000000000000000018 +:1018D00020000000000000000000000000000000E8 :1018E00000000000000000000000000000000000F8 -:1018F00000000000000000000000000000000000E8 -:1019000082008200000000000000000000000000D3 -:1019100000000000000000000000020800000000BD -:1019200000000000000002000000000002000000B3 -:10193000000000000000800000000008000000001F -:10194000000000000000000000000810000000007F -:1019500000100000000000000000030002820200EE +:1018F00020000000000000000000000000000000C8 +:1019000000000000000000000000000000000000D7 +:1019100000000000000000000000000000000000C7 +:1019200000000000000000000000000000000000B7 +:1019300000000000000000000000000000000000A7 +:101940000000000000000000000000000002000095 +:101950000000000000000000000000000000000087 :101960000000000000000000000000000000000077 -:101970000200000000000000020000000000000063 +:101970000000000000000000000000000000000067 :101980000000000000000000000000000000000057 -:101990001000000000000000000000000000000037 -:1019A0000000000000000000000000000000000037 +:101990000000000000000000000000000000000047 +:1019A00000004000000000000000000000000000F7 :1019B0000000000000000000000000000000000027 -:1019C0000000000000000000000000000000000017 +:1019C000000008000000000000000000000000000F :1019D0000000000000000000000000000000000007 -:1019E0002000400000000000000000000000000097 +:1019E00000000000000000000000000000000000F7 :1019F00000000000000000000000000000000000E7 -:101A000008000000000000000000000000000000CE +:101A00000000000040000000000000000000000096 :101A100000000000000000000000000000000000C6 -:101A2000000000000000000000000084000000082A +:101A200008000000000000000000000000000000AE :101A300000000000000000000000000000000000A6 -:101A40000000000000000000000000000000001086 +:101A40000000000000000000000000000000000096 :101A50000000000000000000000000000000000086 -:101A60000000000000040000000000000000000072 +:101A60000000000000000000000000000000000076 :101A70000000000000000000000000000000000066 -:101A80000000000000000000000000000000000056 -:101A900009004100000000000000000000000000FC +:101A80000000000000200000000000000000000036 +:101A90000000000000000000000000000000000046 :101AA0000000000000000000000000000000000036 :101AB0000000000000000000000000000000000026 -:101AC0000000010000000000000000000000000015 +:101AC0000000000000000000000000000000000016 :101AD0000000000000000000000000000000000006 :101AE00000000000000000000000000000000000F6 -:101AF00000000000000000001000000000000000D6 -:101B00000000000000000000820000000000000053 +:101AF00000000000000000000000000000000000E6 +:101B000000000000000000000000000000000000D5 :101B100000000000000000000000000000000000C5 :101B200000000000000000000000000000000000B5 -:101B30000000004000000000000000000000000065 -:101B40000000000004000000000000000000000091 +:101B300000000000000000000000000000000000A5 +:101B40000000000000000000000000000000000095 :101B50000000000000000000000000000000000085 :101B60000000000000000000000000000000000075 :101B70000000000000000000000000000000000065 @@ -49607,22 +49607,22 @@ :101B90000000000000000000000000000000000045 :101BA0000000000000000000000000000000000035 :101BB0000000000000000000000000000000000025 -:101BC00000000000002000000000000000000000F5 +:101BC0000000000000000000000000000000000015 :101BD0000000000000000000000000000000000005 :101BE00000000000000000000000000000000000F5 :101BF00000000000000000000000000000000000E5 -:101C00000000000000000000000040000000000094 -:101C10000000000000000000900000000000000034 -:101C200000000000000000080000000000000000AC +:101C000000000000000000000000000004000000D0 +:101C100000000000000000000000000000000000C4 +:101C200000000000000000000000000004000000B0 :101C300000000000000000000000000000000000A4 -:101C4000000000000000000900000000000000008B +:101C40000000000000000000000000000000000094 :101C50000000000000000000000000000000000084 -:101C60000000004000000000000000000004000030 +:101C60000000000000000000000000000000000074 :101C70000000000000000000000000000000000064 :101C80000000000000000000000000000000000054 -:101C90000000000000000000000000C00000000084 +:101C90000000000041000000000000000000000003 :101CA0000000000000000000000000000000000034 -:101CB000000000000000000000000000000800001C +:101CB0000000000000000000000000000000000024 :101CC0000000000000000000000000000000000014 :101CD0000000000000000000000000000000000004 :101CE00000000000000000000000000000000000F4 @@ -49639,7 +49639,7 @@ :101D90000000000000000000000000000000000043 :101DA0000000000000000000000000000000000033 :101DB0000000000000000000000000000000000023 -:101DC0000000000000000000000090000000000083 +:101DC0000000000000000000000000000000000013 :101DD0000000000000000000000000000000000003 :101DE00000000000000000000000000000000000F3 :101DF00000000000000000000000000000000000E3 @@ -49647,7 +49647,7 @@ :101E100000000000000000000000000000000000C2 :101E200000000000000000000000000000000000B2 :101E300000000000000000000000000000000000A2 -:101E40000000000000000000000011008000000001 +:101E40000000000000000000000000000000000092 :101E50000000000000000000000000000000000082 :101E60000000000000000000000000000000000072 :101E70000000000000000000000000000000000062 @@ -49655,7 +49655,7 @@ :101E90000000000000000000000000000000000042 :101EA0000000000000000000000000000000000032 :101EB0000000000000000000000000000000000022 -:101EC0000000000000000000000000000000008092 +:101EC0000000000000000000000000000000000012 :101ED0000000000000000000000000000000000002 :101EE00000000000000000000000000000000000F2 :101EF00000000000000000000000000000000000E2 @@ -49664,7 +49664,7 @@ :101F200000000000000000000000000000000000B1 :101F300000000000000000000000000000000000A1 :101F40000000000000000000000000000000000091 -:101F50000020000000A000000000000000000000C1 +:101F50000000000000000000000000000000000081 :101F60000000000000000000000000000000000071 :101F70000000000000000000000000000000000061 :101F80000000000000000000000000000000000051 @@ -49672,7 +49672,7 @@ :101FA0000000000000000000000000000000000031 :101FB0000000000000000000000000000000000021 :101FC0000000000000000000000000000000000011 -:101FD00001000088880000000000000000000000F0 +:101FD0000000000000000000000000000000000001 :101FE00000000000000000000000000000000000F1 :101FF00000000000000000000000000000000000E1 :1020000000000000000000000000000000000000D0 @@ -49680,7 +49680,7 @@ :1020200000000000000000000000000000000000B0 :1020300000000000000000000000000000000000A0 :102040000000000000000000000000000000000090 -:1020500000004100008000000000000000000000BF +:102050000000000000000000000000000000000080 :102060000000000000000000000000000000000070 :102070000000000000000000000000000000000060 :102080000000000000000000000000000000000050 @@ -49688,7 +49688,7 @@ :1020A0000000000000000000000000000000000030 :1020B0000000000000000000000000000000000020 :1020C0000000000000000000000000000000000010 -:1020D000000000000011000000800000000000006F +:1020D0000000000000000000000000000000000000 :1020E00000000000000000000000000000000000F0 :1020F00000000000000000000000000000000000E0 :1021000000000000000000000000000000000000CF @@ -49696,7 +49696,7 @@ :1021200000000000000000000000000000000000AF :10213000000000000000000000000000000000009F :10214000000000000000000000000000000000008F -:10215000000000000000000100000040000000003E +:10215000000000000000000000000000000000007F :10216000000000000000000000000000000000006F :10217000000000000000000000000000000000005F :10218000000000000000000000000000000000004F @@ -49704,7 +49704,7 @@ :1021A000000000000000000000000000000000002F :1021B000000000000000000000000000000000001F :1021C000000000000000000000000000000000000F -:1021D0000000000000000000000000000700820076 +:1021D00000000000000000000000000000000000FF :1021E00000000000000000000000000000000000EF :1021F00000000000000000000000000000000000DF :1022000000000000000000000000000000000000CE @@ -49713,7 +49713,7 @@ :10223000000000000000000000000000000000009E :10224000000000000000000000000000000000008E :10225000000000000000000000000000000000007E -:10226000F0F000000000000000000000000000008E +:10226000000000000000000000000000000000006E :10227000000000000000000000000000000000005E :10228000000000000000000000000000000000004E :10229000000000000000000000000000000000003E @@ -49721,7 +49721,7 @@ :1022B000000000000000000000000000000000001E :1022C000000000000000000000000000000000000E :1022D00000000000000000000000000000000000FE -:1022E0000000F0F00000000000000000000000000E +:1022E00000000000000000000000000000000000EE :1022F00000000000000000000000000000000000DE :1023000000000000000000000000000000000000CD :1023100000000000000000000000000000000000BD @@ -49737,7 +49737,7 @@ :1023B000000000000000000000000000000000001D :1023C000000000000000000000000000000000000D :1023D00000000000000000000000000000000000FD -:1023E00000000000FFFF00000000000000000000EF +:1023E00000000000000000000000000000000000ED :1023F00000000000000000000000000000000000DD :1024000000000000000000000000000000000000CC :1024100000000000000000000000000000000000BC @@ -49753,7 +49753,7 @@ :1024B000000000000000000000000000000000001C :1024C000000000000000000000000000000000000C :1024D00000000000000000000000000000000000FC -:1024E0000000000005000A00054000A800000000F0 +:1024E00000000000000000000000000000000000EC :1024F00000000000000000000000000000000000DC :1025000000000000000000000000000000000000CB :1025100000000000000000000000000000000000BB @@ -49795,9 +49795,9 @@ :102750000000000000000000000000000000000079 :102760000000000000000000000000000000000069 :102770000000000000000000000000000000000059 -:102780000000000000000000000000020000100037 +:102780000000000000000000000000000000000049 :102790000000000000000000000000000000000039 -:1027A00000000000000010000000000000002000F9 +:1027A0000000000000000000000000000000000029 :1027B0000000000000000000000000000000000019 :1027C0000000000000000000000000000000000009 :1027D00000000000000000000000000000000000F9 @@ -49808,19 +49808,19 @@ :1028200000000000000000000000000000000000A8 :102830000000000000000000000000000000000098 :102840000000000000000000000000000000000088 -:102850000000000000000000040000000000020072 -:102860000000000000000010000000000000000058 +:102850000000000000000000000000000000000078 +:102860000000000000000000000000000000000068 :102870000000000000000000000000000000000058 :102880000000000000000000000000000000000048 -:1028900000000000000000000000000082000000B6 -:1028A00082000000000000000000000000000000A6 -:1028B0000000000000000000000000000000000018 -:1028C0000000000000000000000000000200020004 -:1028D00000000000040000000000000000000000F4 -:1028E00000000000020000000800000000000000DE +:102890000000000000000000000000000000000038 +:1028A0000000000000000000000000000000000028 +:1028B0000000000000000000000000008200000096 +:1028C0000000000000000000000000000000000008 +:1028D00000000000000000000000000000000000F8 +:1028E00000000000000000000000000000000000E8 :1028F00000000000000000000000000000000000D8 :1029000000000000000000000000000000000000C7 -:1029100002000000000000000000000000000000B5 +:1029100000000000000000000000000000000000B7 :1029200000000000000000000000000000000000A7 :102930000000000000000000000000000000000097 :102940000000000000000000000000000000000087 @@ -49837,19 +49837,19 @@ :1029F00000000000000000000000000000000000D7 :102A000000000000000000000000000000000000C6 :102A100000000000000000000000000000000000B6 -:102A20000000000000000090000000000000000016 +:102A200000000000000000000000000000000000A6 :102A30000000000000000000000000000000000096 -:102A40000000000000000000000000000000100076 -:102A5000080000000000000000000000000000006E +:102A40000000000000000000000000000000000086 +:102A50000000000000000000000000000000000076 :102A60000000000000000000000000000000000066 :102A70000000000000000000000000000000000056 :102A80000000000000000000000000000000000046 -:102A900000000000004000000000000000000000F6 +:102A90000000000000000000000000000000000036 :102AA0000000000000000000000000000000000026 :102AB0000000000000000000000000000000000016 :102AC0000000000000000000000000000000000006 :102AD00000000000000000000000000000000000F6 -:102AE000000000000000000000C000000000001016 +:102AE00000000000000000000000000000000000E6 :102AF00000000000000000000000000000000000D6 :102B000000000000000000000000000000000000C5 :102B100000000000000000000000000000000000B5 @@ -49867,26 +49867,26 @@ :102BD00000000000000000000000000000000000F5 :102BE00000000000000000000000000000000000E5 :102BF00000000000000000000000000000000000D5 -:102C00000000000000000084000000000000000040 +:102C000000000000000000000000000000000000C4 :102C100000000000000000000000000000000000B4 :102C200000000000000000000000000000000000A4 :102C30000000000000000000000000000000000094 :102C40000000000000000000000000000000000084 -:102C5000000000001000000000C0000000000000A4 +:102C50000000000000000000000000000000000074 :102C60000000000000000000000000000000000064 :102C70000000000000000000000000000000000054 :102C80000000000000000000000000000000000044 -:102C90000002000000000000000000000000000032 +:102C90000000000000000000000000000000000034 :102CA0000000000000000000000000000000000024 :102CB0000000000000000000000000000000000014 :102CC0000000000000000000000000000000000004 :102CD00000000000000000000000000000000000F4 -:102CE00000000000000000000020000000000000C4 +:102CE00000000000000000000000000000000000E4 :102CF00000000000000000000000000000000000D4 :102D000000000000000000000000000000000000C3 :102D100000000000000000000000000000000000B3 :102D200000000000000000000000000000000000A3 -:102D3000000000000000000000000500000000008E +:102D30000000000000000000000000000000000093 :102D40000000000000000000000000000000000083 :102D50000000000000000000000000000000000073 :102D60000000000000000000000000000000000063 @@ -50035,77 +50035,77 @@ :10365000000000000000000000000000000000006A :10366000000000000000000000000000000000005A :10367000000000000000000000000000000000004A -:1036800000000000004000000000000000000000FA -:1036900040002000000000000000000000000000CA +:10368000000000000000000000000000000000003A +:103690000000000000000000020000000000000028 :1036A000000000000000000000000000000000001A -:1036B00020000000000000000000000000000000EA -:1036C00000000003000000000000000000000000F7 -:1036D0000000000020004000000000C000000000CA -:1036E00000000000000000008800000088000000CA -:1036F000000000004000000040000000000000004A -:1037000000000000000000030000000000000000B6 -:1037100000028040000000000000000000000000E7 +:1036B0000000000002000000000000000000000008 +:1036C00000000000000000000000000000000000FA +:1036D00000000004000002000000000000000000E4 +:1036E00000000000000000000000000000000000DA +:1036F00000000004000000000000000000000000C6 +:1037000000000000000000000000000000000000B9 +:1037100000000004000000000000000000000000A5 :103720000000000000000000000000000000000099 -:103730000000000000000000000000000000000089 +:103730000000000400000000000000000000000085 :103740000000000000000000000000000000000079 -:10375000000000000000C00009000000004100005F +:103750000000000000000000000000000000000069 :103760000000000000000000000000000000000059 :103770000000000000000000000000000000000049 :103780000000000000000000000000000000000039 -:103790000000040002000000000000000000000023 -:1037A0000000040008000000000000000000040009 -:1037B00000000000040008000000000000000000FD +:103790000000000000000000000000000200000027 +:1037A0000000000000000000000000000000000019 +:1037B00000000000000000000000000020000000E9 :1037C00000000000000000000000000000000000F9 -:1037D00000000000040000000200020002000200DD -:1037E00000000000040004000200020000000000CD -:1037F00000000200000000000000000000000200C5 -:1038000004000000020000000000000000000000B2 -:103810000000000011000000000011000000000086 +:1037D00000000000000000000000200000000000C9 +:1037E00000000000000000000000000000000000D9 +:1037F00000000000000000000000200000000000A9 +:1038000000000000000000000000000000000000B8 +:1038100000000000000000000000000000000000A8 :103820000000000000000000000000000000000098 -:103830000000000000000000008200020000000004 +:103830000000000000000000000000000000000088 :103840000000000000000000000000000000000078 -:1038500000000000000000000000800080008000E8 -:1038600080000000000000000000000000000000D8 -:103870000000000000000000000004000000000044 +:103850000000000000000000000000000000000068 +:103860000000000000000000000000000000000058 +:103870000000000000000000000000000000000048 :103880000000000000000000000000000000000038 -:103890000000000000000000000000000000000028 +:103890000000000000000000000000000400000024 :1038A0000000000000000000000000000000000018 :1038B0000000000000000000000000000000000008 :1038C00000000000000000000000000000000000F8 -:1038D00000000000000000000000000002000200E4 -:1038E00001000000000000000000000000080008C7 -:1038F00000000000000000080008000008000000B0 +:1038D00000000000000000000000000000000000E8 +:1038E00000000000000000000000000000000000D8 +:1038F00000000000000000000000000000000400C4 :1039000000000000000000000000000000000000B7 :1039100000000000000000000000000000000000A7 :103920000000000000000000000000000000000097 :103930000000000000000000000000000000000087 :103940000000000000000000000000000000000077 -:1039500000000000000000000000000000008000E7 -:1039600080002000000000000000000000000000B7 +:103950000000000000000000000000000000000067 +:103960000000000000000000000000000000000057 :103970000000000000000000000000000000000047 :103980000000000000000000000000000000000037 -:10399000000000000000000000000002888000001D -:1039A0000000000000000000000000008200000095 -:1039B000000000000000000800400100008000003E -:1039C000A000000000000000000000000000000057 -:1039D000000082000000C0000000000000000000A5 -:1039E00000000000C00001401000002000000000A6 +:103990000000000000000000000000000000000027 +:1039A0000000000000000000000000000000000017 +:1039B0000000000000000000000000000000000007 +:1039C00000000000000000000000000000000000F7 +:1039D00000000000000000000000000000000000E7 +:1039E00000000000000000000000000000000000D7 :1039F00000000000000000000000000000000000C7 -:103A000000000800000000000000000000000000AE -:103A100000000000000000000000000000010002A3 -:103A2000000000080000000000000000000000008E -:103A30000000000000000000000100002000000461 +:103A000000000000000000000000000000000000B6 +:103A100000000000000000000000000000000000A6 +:103A20000000000000000000000000000000000096 +:103A30000000000000000000000000000000000086 :103A40000000000000000000000000000000000076 :103A50000000000000000000000000000000000066 -:103A60000000000000000000200000000000000036 +:103A60000000000000000000000000000000000056 :103A70000000000000000000000000000000000046 :103A80000000000000000000000000000000000036 -:103A90000000020000000000900000000400000090 -:103AA00000000020000000200000000000000000D6 -:103AB0000000000000000000900000000000000076 -:103AC00000000000000000000000A0000000000056 -:103AD00000000003000000000000000000000000E3 -:103AE00000000800000004000100000000000021A8 +:103A90000000000000000000000000000000000026 +:103AA0000000000000000000000000000000000016 +:103AB0000000000000000000000000000000000006 +:103AC00000000000000000000000000000000000F6 +:103AD00000000000000000000000000000000000E6 +:103AE00000000000000000000000000000000000D6 :103AF00000000000000000000000000000000000C6 :103B000000000000000000000000000000000000B5 :103B100000000000000000000000000000000000A5 @@ -50113,105 +50113,105 @@ :103B30000000000000000000000000000000000085 :103B40000000000000000000000000000000000075 :103B50000000000000000000000000000000000065 -:103B600000000000000000008000020000000000D3 +:103B60000000000000000000000000000000000055 :103B70000000000000000000000000000000000045 :103B80000000000000000000000000000000000035 :103B90000000000000000000000000000000000025 -:103BA00000000000000000080041000000000000CC +:103BA0000000000000000000000000000000000015 :103BB0000000000000000000000000000000000005 -:103BC00002000000000008000000000000000000EB +:103BC00000000000000000000000000000000000F5 :103BD00000000000000000000000000000000000E5 -:103BE00000000000000000000100000000000000D4 -:103BF000000000090021000000000000000000009B +:103BE00000000000000000000000000000000000D5 +:103BF00000000000000000000000000000000000C5 :103C000000000000000000000000000000000000B4 :103C100000000000000000000000000000000000A4 :103C20000000000000000000000000000000000094 :103C30000000000000000000000000000000000084 :103C40000000000000000000000000000000000074 :103C50000000000000000000000000000000000064 -:103C60000000000000000000000004000000000050 +:103C60000000000000000000000000000000000054 :103C70000000000000000000000000000000000044 :103C80000000000000000000000000000000000034 :103C90000000000000000000000000000000000024 -:103CA000000000C000C00410080200000000000076 +:103CA0000000000000000000000000000000000014 :103CB0000000000000000000000000000000000004 -:103CC00000000100000000000000000000000000F3 +:103CC00000000000000000000000000000000000F4 :103CD00000000000000000000000000000000000E4 -:103CE00000000000000000000000000001C0000211 -:103CF000000890000000000000000000000000002C +:103CE00000000000000000000000000000000000D4 +:103CF00000000000000000000000000000000000C4 :103D000000000000000000000000000000000000B3 :103D100000000000000000000000000000000000A3 -:103D20000000000009800980008000800000000081 +:103D20000000000000000000000000000000000093 :103D30000000000000000000000000000000000083 -:103D40000000000011002100000000000000000041 +:103D40000000000000000000000000000000000073 :103D50000000000000000000000000000000000063 -:103D600000000000000000000000000000001180C2 -:103D70000000030000000000000000000000000040 +:103D60000000000000000000000000000000000053 +:103D70000000000000000000000000000000000043 :103D80000000000000000000000000000000000033 :103D90000000000000000000000000000000000023 -:103DA00000000000000000000080090021800000E9 +:103DA0000000000000000000000000000000000013 :103DB0000000000000000000000000000000000003 -:103DC00000000000000000410900000300000000A6 +:103DC00000000000000000000000000000000000F3 :103DD00000000000000000000000000000000000E3 :103DE00000000000000000000000000000000000D3 -:103DF0000041001080C18080000000000000000031 +:103DF00000000000000000000000000000000000C3 :103E000000000000000000000000000000000000B2 :103E100000000000000000000000000000000000A2 -:103E20000000000000000000100020C0210011C0B0 +:103E20000000000000000000000000000000000092 :103E30000000000000000000000000000000000082 -:103E40000000000000000000000101000000000070 +:103E40000000000000000000000000000000000072 :103E50000000000000000000000000000000000062 :103E60000000000000000000000000000000000052 -:103E70000000000102018441C09000000000000029 +:103E70000000000000000000000000000000000042 :103E80000000000000000000000000000000000032 :103E90000000000000000000000000000000000022 -:103EA0000000000000000000000089080009C08830 -:103EB00000100000000000000000000000000000F2 -:103EC000000000000000000000000000880000006A +:103EA0000000000000000000000000000000000012 +:103EB0000000000000000000000000000000000002 +:103EC00000000000000000000000000000000000F2 :103ED00000000000000000000000000000000000E2 -:103EE00000000001000000000000000000000000D1 -:103EF00000000000C0400808900802C00000000058 +:103EE00000000000000000000000000000000000D2 +:103EF00000000000000000000000000000000000C2 :103F000000000000000000000000000000000000B1 :103F100000000000000000000000000000000000A1 -:103F20000000000000000000000000004100000848 -:103F3000804003800000000000000000000000003E +:103F20000000000000000000000000000000000091 +:103F30000000000000000000000000000000000081 :103F40000000000000000000000000000000000071 -:103F50000000400000000000000000000000000021 -:103F60000000000000010000000000000000000050 -:103F7000000000000000808080808080C080000001 +:103F50000000000000000000000000000000000061 +:103F60000000000000000000000000000000000051 +:103F70000000000000000000000000000000000041 :103F80000000000000000000000000000000000031 :103F90000000000000000000000000000000000021 -:103FA0000000000000000000000000000000800091 -:103FB00080038080800000000000000000000000FE +:103FA0000000000000000000000000000000000011 +:103FB0000000000000000000000000000000000001 :103FC00000000000000000000000000000000000F1 -:103FD00000110000000000000000000000000000D0 -:103FE00000000000000000010000000000000000D0 -:103FF0000000000000000000804000118000000070 +:103FD00000000000000000000000000000000000E1 +:103FE00000000000000000000000000000000000D1 +:103FF00000000000000000000000000000000000C1 :1040000000000000000000000000000000000000B0 :1040100000000000000000000000000000000000A0 :104020000000000000000000000000000000000090 -:10403000C000C000C084C0000000000000000000FC +:104030000000000000000000000000000000000080 :104040000000000000000000000000000000000070 -:10405000000000010000000000000000000000005F -:10406000000000000000000000010000000000004F -:1040700000000000000000000000C000008910885F -:1040800090000000000000000000000000000000A0 +:104050000000000000000000000000000000000060 +:104060000000000000000000000000000000000050 +:104070000000000000000000000000000000000040 +:104080000000000000000000000000000000000030 :104090000000000000000000000000000000000020 :1040A0000000000000000000000000000000000010 -:1040B0000000000000004100484200000000000035 +:1040B0000000000000000000000000000000000000 :1040C00000000000000000000000000000000000F0 -:1040D0000000000000E0000081000000000000007F +:1040D00000000000000000000000000000000000E0 :1040E00000000000000000000000000000000000D0 -:1040F00000000000000000000000000000810088B7 -:1041000007008182000000000000000000000000A5 +:1040F00000000000000000000000000000000000C0 +:1041000000000000000000000000000000000000AF :10411000000000000000000000000000000000009F :10412000000000000000000000000000000000008F :10413000000000000000000000000000000000007F :10414000000000000000000000000000000000006F :10415000000000000000000000000000000000005F :10416000000000000000000000000000000000004F -:104170000000000000000000000000000000F9F94D -:104180003C3CFF0F3C3C0000000000000000000031 +:10417000000000000000000000000000000000003F +:10418000000000000000000000000000000000002F :10419000000000000000000000000000000000001F :1041A000000000000000000000000000000000000F :1041B00000000000000000000000000000000000FF @@ -50219,10 +50219,10 @@ :1041D00000000000000000000000000000000000DF :1041E00000000000000000000000000000000000CF :1041F00000000000000000000000000000000000BF -:1042000060603C3CF0003C3C00000000000000000E +:1042000000000000000000000000000000000000AE :10421000000000000000000000000000000000009E :10422000000000000000000000000000000000008E -:104230000000000000000000400840000084200052 +:10423000000000000000000000000000000000007E :10424000000000000000000000000000000000006E :10425000000000000000000000000000000000005E :10426000000000000000000000000000000000004E @@ -50230,40 +50230,40 @@ :10428000000000000000000000000000000000002E :10429000000000000000000000000000000000001E :1042A000000000000000000000000000000000000E -:1042B000000000000000FFFFFFFF00000000000002 +:1042B00000000000000000000000000000000000FE :1042C00000000000000000000000000000000000EE :1042D00000000000000000000000000000000000DE :1042E00000000000000000000000000000000000CE :1042F00000000000000000000000000000000000BE -:1043000000000000666600FF00FF0F0F00000000C5 +:1043000000000000000000000000000000000000AD :10431000000000000000000000000000000000009D :10432000000000000000000000000000000000008D -:104330000000000000000000FFFFFFFF0000000081 +:10433000000000000000000000000000000000007D :10434000000000000000000000000000000000006D :10435000000000000000000000000000000000005D :10436000000000000000000000000000000000004D :10437000000000000000000000000000000000003D -:1043800000000000000066660F0F00FF6666000078 +:10438000000000000000000000000000000000002D :10439000000000000000000000000000000000001D :1043A000000000000000000000000000000000000D -:1043B0000000000000000000000000001006306156 -:1043C0000006000D080000000000000000000000D2 -:1043D000000000000000000000000000000000607D -:1043E0000006000C000000000000000000000000BB +:1043B00000000000000000000000000000000000FD +:1043C00000000000000000000000000000000000ED +:1043D00000000000000000000000000000000000DD +:1043E00000000000000000000000000000000000CD :1043F00000000000000000000000000000000000BD -:10440000000000000000000010612037004D00088F +:1044000000000000000000000000000000000000AC :10441000000000000000000000000000000000009C :10442000000000000000000000000000000000008C :10443000000000000000000000000000000000007C :10444000000000000000000000000000000000006C :10445000000000000000000000000000000000005C -:1044600000000000FFFF000000000000000000004E +:10446000000000000000000000000000000000004C :10447000000000000000000000000000000000003C :10448000000000000000000000000000000000002C :10449000000000000000000000000000000000001C :1044A000000000000000000000000000000000000C :1044B00000000000000000000000000000000000FC -:1044C000000000000000005000500000000000004C +:1044C00000000000000000000000000000000000EC :1044D00000000000000000000000000000000000DC :1044E00000000000000000000000000000000000CC :1044F00000000000000000000000000000000000BC @@ -50271,17 +50271,17 @@ :10451000000000000000000000000000000000009B :10452000000000000000000000000000000000008B :10453000000000000000000000000000000000007B -:104540000000000000000000000000FF000000006C +:10454000000000000000000000000000000000006B :10455000000000000000000000000000000000005B -:104560000000000000000000F0F00000000000006B +:10456000000000000000000000000000000000004B :10457000000000000000000000000000000000003B :10458000000000000000000000000000000000002B :10459000000000000000000000000000000000001B :1045A000000000000000000000000000000000000B :1045B00000000000000000000000000000000000FB -:1045C00000000000000000000000000000FF0000EC +:1045C00000000000000000000000000000000000EB :1045D00000000000000000000000000000000000DB -:1045E00000000000000000000000F0F000000000EB +:1045E00000000000000000000000000000000000CB :1045F00000000000000000000000000000000000BB :1046000000000000000000000000000000000000AA :10461000000000000000000000000000000000009A @@ -50301,25 +50301,25 @@ :1046F00000000000000000000000000000000000BA :1047000000000000000000000000000000000000A9 :104710000000000000000000000000000000000099 -:104720000000000000000000000000000000400049 -:104730004000000000000000000000000000000039 +:104720000000000000000000000000000000000089 +:104730000000000000000000000000000000000079 :104740000000000000000000000000000000000069 -:104750000000000004000400000000000000000051 -:104760000000000000000000000000000400000045 +:104750000000000000000000000000000000000059 +:104760000000000000000000000000000000000049 :104770000000000000000000000000000000000039 -:104780000000000000000000000000000000020027 -:104790000000000000000000000000000000020017 +:104780000000000000000000000000000000000029 +:104790000000000000000000000000000000000019 :1047A0000000000000000000000000000000000009 -:1047B00000000000000000000000000000000000F9 +:1047B00000000000000000000000000002000000F7 :1047C00000000000000000000000000000000000E9 -:1047D00000000000000000000000000000000400D5 +:1047D00000000000000000000000000000000000D9 :1047E00000000000000000000000000000000000C9 :1047F00000000000000000000000000000000000B9 :1048000000000000000000000000000000000000A8 :104810000000000000000000000000000000000098 -:104820000008000000000000000000000000000080 +:104820000000000000000000000000000000000088 :104830000000000000000000000000000000000078 -:104840000004000000000000000000000000000064 +:104840000000000000000000000000000000000068 :104850000000000000000000000000000000000058 :104860000000000000000000000000000000000048 :104870000000000000000000000000000000000038 @@ -50327,20 +50327,20 @@ :104890000000000000000000000000000000000018 :1048A0000000000000000000000000000000000008 :1048B00000000000000000000000000000000000F8 -:1048C0000000000000000000000000001100400097 -:1048D000000000000000000000040000000000884C +:1048C00000000000000000000000000000000000E8 +:1048D00000000000000000000000000000000000D8 :1048E00000000000000000000000000000000000C8 :1048F00000000000000000000000000000000000B8 -:10490000000000080000000000000000000000009F +:1049000000000000000000000000000000000000A7 :104910000000000000000000000000000000000097 :104920000000000000000000000000000000000087 :104930000000000000000000000000000000000077 :104940000000000000000000000000000000000067 :104950000000000000000000000000000000000057 :104960000000000000000000000000000000000047 -:104970000000000000000000040000000000000033 -:1049800000000000000000008200000000000000A5 -:1049900000000000000000000000001000200000E7 +:104970000000000000000000000000000000000037 +:104980000000000000000000000000000000000027 +:104990000000000000000000000000000000000017 :1049A0000000000000000000000000000000000007 :1049B00000000000000000000000000000000000F7 :1049C00000000000000000000000000000000000E7 @@ -50348,7 +50348,7 @@ :1049E00000000000000000000000000000000000C7 :1049F00000000000000000000000000000000000B7 :104A000000000000000000000000000000000000A6 -:104A10000000000000000000000000000001000194 +:104A10000000000000000000000000000000000096 :104A20000000000000000000000000000000000086 :104A30000000000000000000000000000000000076 :104A40000000000000000000000000000000000066 @@ -50356,31 +50356,31 @@ :104A60000000000000000000000000000000000046 :104A70000000000000000000000000000000000036 :104A80000000000000000000000000000000000026 -:104A90000002000000000000000000000000000014 +:104A90000000000000000000000000000000000016 :104AA0000000000000000000000000000000000006 :104AB00000000000000000000000000000000000F6 :104AC00000000000000000000000000000000000E6 -:104AD000000000000000000000C0000000C0001046 -:104AE00000200000000000000000000000000000A6 -:104AF000000000000000000000C000000000008472 +:104AD00000000000000000000000000000000000D6 +:104AE00000000000000000000000000000000000C6 +:104AF00000000000000000000000000000000000B6 :104B000000000000000000000000000000000000A5 :104B10000000000000000000000000000000000095 -:104B2000000000004000000040040084000000007D -:104B30000000210000000000000000000000000054 +:104B20000000000000000000000000000000000085 +:104B30000000000000000000000000000000000075 :104B40000000000000000000000000000000000065 :104B50000000000000000000000000000000000055 :104B60000000000000000000000000000000000045 :104B70000000000000000000000000000000000035 -:104B80000000000000000000000200000000000023 +:104B80000000000000000000000000000000000025 :104B90000000000000000000000000000000000015 -:104BA0000000000000000000002000009000000055 -:104BB00000000000000200000000000000000000F3 +:104BA0000000000000000000000000000000000005 +:104BB00000000000000000000000000000000000F5 :104BC00000000000000000000000000000000000E5 -:104BD00000000000000000000000000000C0000015 -:104BE00000C0000000000000000000000000000005 +:104BD00000000000000000000000000000000000D5 +:104BE00000000000000000000000000000000000C5 :104BF00000000000000000000000000000000000B5 :104C000000000000000000000000000000000000A4 -:104C10000000000000000000200000000000000074 +:104C10000000000000000000000000000000000094 :104C20000000000000000000000000000000000084 :104C30000000000000000000000000000000000074 :104C40000000000000000000000000000000000064 @@ -50405,7 +50405,7 @@ :104D70000000000000000000000000000000000033 :104D80000000000000000000000000000000000023 :104D90000000000000000000000000000000000013 -:104DA00000000000000000000000002100000000E2 +:104DA0000000000000000000000000000000000003 :104DB00000000000000000000000000000000000F3 :104DC00000000000000000000000000000000000E3 :104DD00000000000000000000000000000000000D3 @@ -50413,7 +50413,7 @@ :104DF00000000000000000000000000000000000B3 :104E000000000000000000000000000000000000A2 :104E10000000000000000000000000000000000092 -:104E20000000000000000000000020004001000021 +:104E20000000000000000000000000000000000082 :104E30000000000000000000000000000000000072 :104E40000000000000000000000000000000000062 :104E50000000000000000000000000000000000052 @@ -50421,7 +50421,7 @@ :104E70000000000000000000000000000000000032 :104E80000000000000000000000000000000000022 :104E90000000000000000000000000000000000012 -:104EA0000000000000000000000000080088000072 +:104EA0000000000000000000000000000000000002 :104EB00000000000000000000000000000000000F2 :104EC00000000000000000000000000000000000E2 :104ED00000000000000000000000000000000000D2 @@ -50429,7 +50429,7 @@ :104EF00000000000000000000000000000000000B2 :104F000000000000000000000000000000000000A1 :104F10000000000000000000000000000000000091 -:104F20000000000000000000000000000000008001 +:104F20000000000000000000000000000000000081 :104F30000000000000000000000000000000000071 :104F40000000000000000000000000000000000061 :104F50000000000000000000000000000000000051 @@ -50438,7 +50438,7 @@ :104F80000000000000000000000000000000000021 :104F90000000000000000000000000000000000011 :104FA0000000000000000000000000000000000001 -:104FB0000089000000000000000000000000000068 +:104FB00000000000000000000000000000000000F1 :104FC00000000000000000000000000000000000E1 :104FD00000000000000000000000000000000000D1 :104FE00000000000000000000000000000000000C1 @@ -50446,7 +50446,7 @@ :1050000000000000000000000000000000000000A0 :105010000000000000000000000000000000000090 :105020000000000000000000000000000000000080 -:1050300000000009009000000000000000000000D7 +:105030000000000000000000000000000000000070 :105040000000000000000000000000000000000060 :105050000000000000000000000000000000000050 :105060000000000000000000000000000000000040 @@ -50454,7 +50454,7 @@ :105080000000000000000000000000000000000020 :105090000000000000000000000000000000000010 :1050A0000000000000000000000000000000000000 -:1050B000000000110000410000000000000000009E +:1050B00000000000000000000000000000000000F0 :1050C00000000000000000000000000000000000E0 :1050D00000000000000000000000000000000000D0 :1050E00000000000000000000000000000000000C0 @@ -50462,7 +50462,7 @@ :10510000000000000000000000000000000000009F :10511000000000000000000000000000000000008F :10512000000000000000000000000000000000007F -:1051300000000000000000000C0C0C0C000000003F +:10513000000000000000000000000000000000006F :10514000000000000000000000000000000000005F :10515000000000000000000000000000000000004F :10516000000000000000000000000000000000003F @@ -50470,7 +50470,7 @@ :10518000000000000000000000000000000000001F :10519000000000000000000000000000000000000F :1051A00000000000000000000000000000000000FF -:1051B000000000000000000000000C0C0C0C0000BF +:1051B00000000000000000000000000000000000EF :1051C00000000000000000000000000000000000DF :1051D00000000000000000000000000000000000CF :1051E00000000000000000000000000000000000BF @@ -50486,16 +50486,16 @@ :10528000000000000000000000000000000000001E :10529000000000000000000000000000000000000E :1052A00000000000000000000000000000000000FE -:1052B000000000000000000000000000000000509E -:1052C000005000000000000000000000000000008E +:1052B00000000000000000000000000000000000EE +:1052C00000000000000000000000000000000000DE :1052D00000000000000000000000000000000000CE :1052E00000000000000000000000000000000000BE :1052F00000000000000000000000000000000000AE :10530000000000000000000000000000000000009D :10531000000000000000000000000000000000008D :10532000000000000000000000000000000000007D -:105330000000000000000000000000000000002845 -:10534000000000010000000000000000000000005C +:10533000000000000000000000000000000000006D +:10534000000000000000000000000000000000005D :10535000000000000000000000000000000000004D :10536000000000000000000000000000000000003D :10537000000000000000000000000000000000002D @@ -50531,68 +50531,68 @@ :10555000000000000000000000000000000000004B :10556000000000000000000000000000000000003B :10557000000000000000000000000000000000002B -:10558000000000000000000000000011000000000A -:105590000000000000000000040000000000040003 +:10558000000000000000000000000000000000001B +:105590000000000000000000000000020000000009 :1055A00000000000000000000000000000000000FB -:1055B00000000000000000000000000000000000EB +:1055B00000000000000000000000000200000000E9 :1055C00000000000000000000000000000000000DB -:1055D00000000000000000000000000000000000CB +:1055D00000000000000000000000000000020000C9 :1055E00000000000000000000000000000000000BB -:1055F000000000000000000000000000000010009B -:10560000000000000000000000000000000000009A -:105610000000000000000002000000000000000088 +:1055F00000000000000000000000000000020000A9 +:105600000000000000000000000000000000000298 +:10561000000000000000000000000000000000008A :10562000000000000000000000000000000000007A -:1056300000000000000000000082000000000000E8 -:1056400010004000000000004000000000000000CA -:10565000000000000000000000000000004000000A -:10566000400000004040000000000000000000007A -:10567000000000000000000000000000000000002A -:10568000000000000000000000000000000000001A +:105630000000000000000000000000000004000066 +:10564000000000000000000000000000000000005A +:10565000000000000000000000000000000000004A +:10566000000000000000000000000000000000003A +:105670000002000000000000000000000000000028 +:105680000000020000000000000000000000000018 :10569000000000000000000000000000000000000A -:1056A00000000000000000000200000002000000F6 -:1056B00000000040000000000000000000000000AA -:1056C00000000000000000000000000002000000D8 -:1056D0000000000000000000000000008200000048 -:1056E00000000000000000000000000000000000BA +:1056A00000000200000000000000000000000000F8 +:1056B00000000000000000000000000000000000EA +:1056C00000000000020000000000000000000000D8 +:1056D00000000000000000000000000000000000CA +:1056E00000000000020000000000000000000000B8 :1056F00000000000000000000000000000000000AA -:105700000000000000000200000000000000000097 +:105700000000000000000000000000000000000099 :105710000000000000000000000000000000000089 -:105720000000000000000000000000000000000079 +:105720000004000000000000000000000000000075 :105730000000000000000000000000000000000069 :105740000000000000000000000000000000000059 :105750000000000000000000000000000000000049 :105760000000000000000000000000000000000039 :105770000000000000000000000000000000000029 -:1057800000000000000000000000000000004000D9 -:105790008800400000000000000000000000000041 +:105780000000000000000000000000000000000019 +:105790000000000000000000000000000000000009 :1057A00000000000000000000000000000000000F9 :1057B00000000000000000000000000000000000E9 :1057C00000000000000000000000000000000000D9 -:1057D0000000000000000000000088000000000041 +:1057D00000000000000000000000000000000000C9 :1057E00000000000000000000000000000000000B9 :1057F00000000000000000000000000000000000A9 :105800000000000000000000000000000000000098 :105810000000000000000000000000000000000088 :105820000000000000000000000000000000000078 :105830000000000000000000000000000000000068 -:105840000000000000000000000008000000000050 +:105840000000000000000000000000000000000058 :105850000000000000000000000000000000000048 :105860000000000000000000000000000000000038 :105870000000000000000000000000000000000028 :105880000000000000000000000000000000000018 :105890000000000000000000000000000000000008 -:1058A00000000000000000400000000000000000B8 +:1058A00000000000000000000000000000000000F8 :1058B00000000000000000000000000000000000E8 -:1058C0000000004008000000000000000000000090 +:1058C00000000000000000000000000000000000D8 :1058D00000000000000000000000000000000000C8 -:1058E00000040000000000000000000000000000B4 -:1058F0000000000000000000000000000040004028 +:1058E00000000000000000000000000000000000B8 +:1058F00000000000000000000000000000000000A8 :105900000000000000000000000000000000000097 :105910000000000000000000000000000000000087 :105920000000000000000000000000000000000077 :105930000000000000000000000000000000000067 -:105940000000000000000000000000000000100047 -:105950000000000000000000000000002100000026 +:105940000000000000000000000000000000000057 +:105950000000000000000000000000000000000047 :105960000000000000000000000000000000000037 :105970000000000000000000000000000000000027 :105980000000000000000000000000000000000017 @@ -50604,11 +50604,11 @@ :1059E00000000000000000000000000000000000B7 :1059F00000000000000000000000000000000000A7 :105A00000000000000000000000000000000000096 -:105A10000040000000000000000000000000000046 -:105A200000000000009000000000000000000000E6 +:105A10000000000000000000000000000000000086 +:105A20000000000000000000000000000000000076 :105A30000000000000000000000000000000000066 :105A40000000000000000000000000000000000056 -:105A50000000000000000000000000000300000043 +:105A50000000000000000000000000000000000046 :105A60000000000000000000000000000000000036 :105A70000000000000000000000000000000000026 :105A80000000000000000000000000000000000016 @@ -50616,15 +50616,15 @@ :105AA00000000000000000000000000000000000F6 :105AB00000000000000000000000000000000000E6 :105AC00000000000000000000000000000000000D6 -:105AD00000000000000000000000100000000000B6 +:105AD00000000000000000000000000000000000C6 :105AE00000000000000000000000000000000000B6 :105AF00000000000000000000000000000000000A6 :105B00000000000000000000000000000000000095 -:105B10000000009000000000000000000000209045 +:105B10000000000000000000000000000000000085 :105B20000000000000000000000000000000000075 -:105B3000000000000000000000000004000400005D -:105B40000000000000000000054000000000000010 -:105B50000000000000000000000011000000000034 +:105B30000000000000000000000000000000000065 +:105B40000000000000000000000000000000000055 +:105B50000000000000000000000000000000000045 :105B60000000000000000000000000000000000035 :105B70000000000000000000000000000000000025 :105B80000000000000000000000000000000000015 @@ -50783,10 +50783,10 @@ :10651000000000000000000000000000000000007B :10652000000000000000000000000000000000006B :10653000000000000000000000000000000000005B -:106540002000000000000400020000000000000025 +:10654000000000000000000000000000000000004B :10655000000000000000000000000000000000003B -:10656000000000000000000020000000000000000B -:106570000000000000000000000000030000008098 +:10656000000000000000000000000000000000002B +:10657000000000000000000000000000000000001B :10658000000000000000000000000000000000000B :1065900000000000000000000000000000000000FB :1065A00000000000000000000000000000000000EB @@ -50795,13 +50795,13 @@ :1065D00000000000000000000000000000000000BB :1065E00000000000000000000000000000000000AB :1065F000000000000000000000000000000000009B -:10660000001000C0000000000000000000000000BA -:106610000000000000000000410041C00000000038 +:10660000000000000000000000000000000000008A +:10661000000000000000000000000000000000007A :10662000000000000000000000000000000000006A :10663000000000000000000000000000000000005A :10664000000000000000000000000000000000004A -:106650000000020000000000000000000000000038 -:10666000000000000000100000000000000000001A +:10665000000000000000000020000000000000001A +:10666000000000000000000000000000000000002A :10667000000000000000000000000000000000001A :10668000000000000000000000000000000000000A :1066900000000000000000000000000000000000FA @@ -50809,194 +50809,194 @@ :1066B00000000000000000000000000000000000DA :1066C00000000000000000000000000000000000CA :1066D00000000000000000000000000000000000BA -:1066E000000000000000000080000000000000002A +:1066E00000000000000000000000000000000000AA :1066F000000000000000000000000000000000009A :106700000000000000000000000000000000000089 :106710000000000000000000000000000000000079 :106720000000000000000000000000000000000069 :106730000000000000000000000000000000000059 -:106740000000000000002000000000000000000029 -:106750000000200000000000000000000000000019 +:106740000000000000000000000000000000000049 +:106750000000000000000000000000000000000039 :106760000000000000000000000000000000000029 -:106770000100000000000000000000000000000018 -:1067800000000000000000000000000000002000E9 -:10679000000000008400000084118440000000001C +:106770000000000000000000000000000000000019 +:106780000000000000000000000000000000000009 +:1067900000000000000000000000000000000000F9 :1067A00000000000000000000000000000000000E9 :1067B00000000000000000000000000000000000D9 :1067C00000000000000000000000000000000000C9 :1067D00000000000000000000000000000000000B9 :1067E00000000000000000000000000000000000A9 -:1067F0000000200000000000000000000000000079 -:106800000000000000000000008400000000000004 -:1068100080000000000000000000000000010000F7 +:1067F0000000000000000000000000000000000099 +:106800000000000000000000000000000000000088 +:106810000000000000000000000000000000000078 :106820000000000000000000000000000000000068 :106830000000000000000000000000000000000058 :106840000000000000000000000000000000000048 :106850000000000000000000000000000000000038 -:106860000000000000000000000000000000040024 -:106870000000090008000000000000000000000007 -:1068800000000000000000000000C00090000000B8 -:106890000000000000040084000000000040000030 +:106860000000000000000000000000000000000028 +:106870000000000000000000000000000000000018 +:106880000000000000000000000000000000000008 +:1068900000000000000000000000000000000000F8 :1068A00000000000000000000000000000000000E8 -:1068B00000000000000000000000000000000000D8 -:1068C00000000000000000000000090000000000BF +:1068B0000000000000000000004000000000000098 +:1068C00000000000000000000000000000000000C8 :1068D00000000000000000000000000000000000B8 :1068E00000000000000000000000000000000000A8 -:1068F00000000090200000000000000000000000E8 +:1068F0000000000000000000000000000000000098 :106900000000000000000000000000000000000087 -:10691000000000004000210008040000000000000A +:106910000000000000000000000000000000000077 :106920000000000000000000000000000000000067 :106930000000000000000000000000000000000057 :106940000000000000000000000000000000000047 :106950000000000000000000000000000000000037 :106960000000000000000000000000000000000027 -:10697000080000000000000000000000000000000F -:106980000000000000008200820000000000000003 -:106990000000900000000400000408000000000057 -:1069A00000000000000000000004000400000000DF +:106970000000000000000000000000000000000017 +:106980000000000000000000000000000000000007 +:1069900000000000000000000000000000000000F7 +:1069A00000000000000000000000000000000000E7 :1069B00000000000000000000000000000000000D7 :1069C00000000000000000000000000000000000C7 -:1069D00000000000000011000000000000000000A6 -:1069E0000000000000000000000011000000000096 +:1069D00000000000000000000000000000000000B7 +:1069E00000000000000000000000000000000000A7 :1069F0000000000000000000000000000000000097 :106A00000000000000000000000000000000000086 -:106A100000000000000000008000000100000000F5 -:106A2000050000000000000000000001000100005F +:106A10000000000000000000000000000000000076 +:106A20000000000000000000000000000000000066 :106A30000000000000000000000000000000000056 :106A40000000000000000000000000000000000046 :106A50000000000000000000000000000000000036 :106A60000000000000000000000000000000000026 -:106A7000000000000000000000008800000000008E -:106A80000000A009000082000000000000000000DB -:106A90000000000090000000000001200000000045 -:106AA000C00000008200000000040004000000009C +:106A70000000000000000000000000000000000016 +:106A80000000000000000000000000000000000006 +:106A900000000000000000000000000000000000F6 +:106AA00000000000000000000000000000000000E6 :106AB00000000000000000000000000000000000D6 :106AC00000000000000000000000000000000000C6 -:106AD0000000000000000000000011000000009015 +:106AD00000000000000000000000000000000000B6 :106AE00000000000000000000000000000000000A6 -:106AF000000000000000000000000000090000008D -:106B000000900000210000000000000021000000B3 -:106B10000000000000000000000000000401000070 -:106B200000000040000000400000000100010000E3 +:106AF0000000000000000000000000000000000096 +:106B00000000000000000000000000000000000085 +:106B10000000000000000000000000000000000075 +:106B20000000000000000000000000000000000065 :106B30000000000000000000000000000000000055 :106B40000000000000000000000000000000000045 :106B50000000000000000000000000000000000035 :106B60000000000000000000000000000000000025 -:106B70000000000000000000000001000000000014 +:106B70000000000000000000000000000000000015 :106B80000000000000000000000000000000000005 -:106B900000000000000400100188000200009000C6 -:106BA0000000000001080008000200900000000042 +:106B900000000000000000000000000000000000F5 +:106BA00000000000000000000000000000000000E5 :106BB00000000000000000000000000000000000D5 :106BC00000000000000000000000000000000000C5 :106BD00000000000000000000000000000000000B5 :106BE00000000000000000000000000000000000A5 -:106BF0000000000000000000000000001100210063 +:106BF0000000000000000000000000000000000095 :106C00000000000000000000000000000000000084 -:106C10000000000000000080000020800000110043 -:106C20008000000000001180008040800000000013 -:106C3000000005000000000000000000000000004F +:106C10000000000000000000000000000000000074 +:106C20000000000000000000000000000000000064 +:106C30000000000000000000000000000000000054 :106C40000000000000000000000000000000000044 :106C50000000000000000000000000000000000034 :106C60000000000000000000000000000000000024 -:106C700000000000000000000000000000000041D3 -:106C80000900000900800000000000000000000072 +:106C70000000000000000000000000000000000014 +:106C80000000000000000000000000000000000004 :106C900000000000000000000000000000000000F4 -:106CA00000000080000300000020002100A0000080 -:106CB00000020000002000000000000000000000B2 +:106CA00000000000000000000000000000000000E4 +:106CB00000000000000000000000000000000000D4 :106CC00000000000000000000000000000000000C4 :106CD00000000000000000000000000000000000B4 :106CE00000000000000000000000000000000000A4 :106CF0000000000000000000000000000000000094 -:106D000000010100000000880000000000000000F9 +:106D00000000000000000000000000000000000083 :106D10000000000000000000000000000000000073 -:106D20000000000000200000000000000040009073 -:106D30000000000100000000000000000000000052 +:106D20000000000000000000000000000000000063 +:106D30000000000000000000000000000000000053 :106D40000000000000000000000000000000000043 :106D50000000000000000000000000000000000033 :106D60000000000000000000000000000000000023 :106D70000000000000000000000000000000000013 -:106D8000000000008800000001000000000000007A -:106D900000000000000000000000000002000000F1 -:106DA000000090000000C000000001001000200062 -:106DB0008200100000002000000000000000000021 +:106D80000000000000000000000000000000000003 +:106D900000000000000000000000000000000000F3 +:106DA00000000000000000000000000000000000E3 +:106DB00000000000000000000000000000000000D3 :106DC00000000000000000000000000000000000C3 :106DD00000000000000000000000000000000000B3 :106DE00000000000000000000000000000000000A3 :106DF0000000000000000000000000000000000093 -:106E00000000000000000000000041000000000041 -:106E100000000000000000000000000000008000F2 -:106E2000000000002000000080000000080080003A -:106E300000008000A0000000000000002000000012 +:106E00000000000000000000000000000000000082 +:106E10000000000000000000000000000000000072 +:106E20000000000000000000000000000000000062 +:106E30000000000000000000000000000000000052 :106E40000000000000000000000000000000000042 :106E50000000000000000000000000000000000032 :106E60000000000000000000000000000000000022 :106E70000000000000000000000000000000000012 -:106E800000000000000000000311000000000000EE +:106E80000000000000000000000000000000000002 :106E900000000000000000000000000000000000F2 -:106EA0008000800000008000000000000000000062 -:106EB000801080110000800000050000000000002C +:106EA00000000000000000000000000000000000E2 +:106EB00000000000000000000000000000000000D2 :106EC00000000000000000000000000000000000C2 :106ED00000000000000000000000000000000000B2 :106EE00000000000000000000000000000000000A2 :106EF0000000000000000000000000000000000092 -:106F00000000000000000000000000010000000080 +:106F00000000000000000000000000000000000081 :106F10000000000000000000000000000000000071 -:106F200000000200020002009000000000000000CB -:106F300000004001020190009000000000000000ED +:106F20000000000000000000000000000000000061 +:106F30000000000000000000000000000000000051 :106F40000000000000000000000000000000000041 :106F50000000000000000000000000000000000031 :106F60000000000000000000000000000000000021 :106F70000000000000000000000000000000000011 -:106F800000000000000000000000000000E0000021 -:106F9000814100000000000000000000000000002F -:106FA00000000000480000E000000000000000E0D9 -:106FB00007008200810000E000000000810000E086 +:106F80000000000000000000000000000000000001 +:106F900000000000000000000000000000000000F1 +:106FA00000000000000000000000000000000000E1 +:106FB00000000000000000000000000000000000D1 :106FC00000000000000000000000000000000000C1 :106FD00000000000000000000000000000000000B1 :106FE00000000000000000000000000000000000A1 :106FF0000000000000000000000000000000000091 :107000000000000000000000000000000000000080 :107010000000000000000000000000000000000070 -:1070200000000000000000000C0000000000000054 -:107030000000000000000CFAFCFA00000000000054 +:107020000000000000000000000000000000000060 +:107030000000000000000000000000000000000050 :107040000000000000000000000000000000000040 :107050000000000000000000000000000000000030 :107060000000000000000000000000000000000020 :107070000000000000000000000000000000000010 :107080000000000000000000000000000000000000 :1070900000000000000000000000000000000000F0 -:1070A000000000000000000000000C0000000000D4 -:1070B00000000000000000000C0AFC0A00000000B4 +:1070A00000000000000000000000000000000000E0 +:1070B00000000000000000000000000000000000D0 :1070C00000000000000000000000000000000000C0 :1070D00000000000000000000000000000000000B0 :1070E00000000000000000000000000000000000A0 :1070F0000000000000000000000000000000000090 :10710000000000000000000000000000000000007F :10711000000000000000000000000000000000006F -:10712000000000000000000000000F0F1414000019 -:1071300000000000000000000000FDCDF1C10000D3 +:10712000000000000000000000000000000000005F +:10713000000000000000000000000000000000004F :10714000000000000000000000000000000000003F :10715000000000000000000000000000000000002F :10716000000000000000000000000000000000001F :10717000000000000000000000000000000000000F :1071800000000000000000000000000000000000FF :1071900000000000000000000000000000000000EF -:1071A0000000000000000000000000005F0F141449 -:1071B0000000000000000000000000003D0D310153 +:1071A00000000000000000000000000000000000DF +:1071B00000000000000000000000000000000000CF :1071C00000000000000000000000000000000000BF :1071D00000000000000000000000000000000000AF :1071E000000000000000000000000000000000009F :1071F000000000000000000000000000000000008F :10720000000000000000000000000000000000007E -:107210000000000000400006000C0000000000001C -:10722000000000000000000000000000000080617D -:107230000007C00D000000610A06000D000000619B -:107240003007C00D000000610007C00D0000000005 +:10721000000000000000000000000000000000006E +:10722000000000000000000000000000000000005E +:10723000000000000000000000000000000000004E +:10724000000000000000000000000000000000003E :10725000000000000000000000000000000000002E :10726000000000000000000000000000000000001E :10727000000000000000000000000000000000000E :1072800000000000000000000000000000000000FE -:107290000000000000000000FF00FFFF00000000F1 +:1072900000000000000000000000000000000000EE :1072A00000000000000000000000000000000000DE :1072B00000000000000000000000000000000000CE :1072C00000000000000000000000000000000000BE @@ -51004,7 +51004,7 @@ :1072E000000000000000000000000000000000009E :1072F000000000000000000000000000000000008E :10730000000000000000000000000000000000007D -:1073100000000000000000000000FF00000000006E +:10731000000000000000000000000000000000006D :10732000000000000000000000000000000000005D :10733000000000000000000000000000000000004D :10734000000000000000000000000000000000003D @@ -51012,7 +51012,7 @@ :10736000000000000000000000000000000000001D :10737000000000000000000000000000000000000D :1073800000000000000000000000000000000000FD -:107390000000000000000000000000000000F0F00D +:1073900000000000000000000000000000000000ED :1073A00000000000000000000000000000000000DD :1073B00000000000000000000000000000000000CD :1073C00000000000000000000000000000000000BD @@ -51021,229 +51021,229 @@ :1073F000000000000000000000000000000000008D :10740000000000000000000000000000000000007C :10741000000000000000000000000000000000006C -:10742000F0F000000000000000000000000000007C +:10742000000000000000000000000000000000005C :10743000000000000000000000000000000000004C :10744000000000000000000000000000000000003C :10745000000000000000000000000000000000002C :10746000000000000000000000000000000000001C -:10747000000000000000000000800000000000008C -:1074800000000240000000000005040000000000B1 +:10747000000000000000000000000000000000000C +:1074800000000000000400000000000000000000F8 :1074900000000000000000000000000000000000EC -:1074A000000000000000000001802000000001003A -:1074B00000000000000000030000000000000000C9 -:1074C00000000000000000000000000000000000BC +:1074A00000000000000400000000000002000000D6 +:1074B00000000000000000000000000000000000CC +:1074C0000000000000000004000000000000200098 :1074D00000000000000000000000000000000000AC -:1074E00000000000000040000000000082000000DA -:1074F000000000000000000000000040000000004C -:10750000008400000041000000840000000800002A +:1074E000000000000000000000000000000020007C +:1074F000000000000000000000000000000000008C +:1075000000000000000000000090000000000000EB :10751000000000000000000000000000000000006B -:107520000000000000000000000004200000000037 -:107530000400000000000000000000000000000047 -:1075400000000000000000004000090000000900E9 -:107550000900000000000000000000000000000022 -:10756000000000000000000000000000000000001B -:1075700000000000000000002100000000000000EA -:1075800000000000000000000200100000000000E9 -:10759000000000000000020002080000901000003F -:1075A000000000000000000000000000000000805B -:1075B000000000800000008000800000008000804B -:1075C00000800080000000000000000000000000BB +:10752000000000000000000000000000000000005B +:10753000000000000000000000000000000000004B +:10754000000000000000000000000000000000003B +:10755000000000000000000000000000000000002B +:10756000000000000000000000000090000000008B +:10757000000000000000000000000000000000000B +:1075800000000000000000000000000000000000FB +:1075900000000000000000000000000000000000EB +:1075A00000000000000000000000000000000000DB +:1075B00000000000000000000000000000000000CB +:1075C00000000000000000000000000000000000BB :1075D00000000000000000000000000000000000AB :1075E000000000000000000000000000000000009B -:1075F000004100000000000000000000000000004A -:10760000000000000008000000000000000800006A -:107610000000000000000000000000C000000000AA -:107620000000000000080000000000000240000808 -:1076300000200000002000000020002000000020AA -:1076400000200020002000080000000000000000D2 -:1076500002080040020000000000020002000000DA -:107660000000000000000008000000000000000012 -:1076700003C0000000000200000000000000000045 -:1076800000000000000000009000000020009000BA -:1076900000000000000500030003000000000003DC -:1076A00000080000000000000000000000000000D2 +:1075F000000000000000000000000000000000008B +:10760000000000000000000000000000000000007A +:107610000000020000000000000000000000000068 +:10762000000000000000000000000000000000005A +:107630000000020000000000000000000000000048 +:10764000000000000000000000000000000000003A +:107650000200000000000000000000000000000028 +:10766000000000000000000000000000000000001A +:107670000200000000000000000000000000000008 +:1076800000000000000000000000000000000000FA +:1076900000000000000000000000000000000000EA +:1076A00000000000000000000000000000000000DA :1076B00000000000000000000000000000000000CA :1076C00000000000000000000000000000000000BA :1076D00000000000000000000000000000000000AA :1076E000000000000000000000000000000000009A :1076F000000000000000000000000000000000008A -:107700000000000000000000000000A000000000D9 -:1077100000000000000000840000000000000000E5 +:107700000000000000000000000000000000000079 +:107710000000000000000000000000000000000069 :107720000000000000000000000000000000000059 -:107730000000000000000000000000000000030046 -:107740000000000000000000000021822100210054 -:1077500021000000210021002100000000000000A5 +:107730000000000000000000000000000000000049 +:107740000000000000000000000000000000000039 +:107750000000000000000000000000000000000029 :107760000000000000000000000000000000000019 :107770000000000000000000000000000000000009 -:1077800000000000000000000000000800000000F1 -:1077900000000008000000000000000000000000E1 -:1077A00000040000000000000000000800000800C5 -:1077B0000440048090000400048000000480040061 -:1077C0000400000082000000820082000008000027 -:1077D0000000000000000011000001040000000093 -:1077E0000000000000400000000000000008000051 -:1077F0000000000000000000000400000000000085 +:1077800000000000000000000000000000000000F9 +:1077900000000000000000000000000000000000E9 +:1077A00000000000000000000000000000000000D9 +:1077B00000000000000000000000000000000000C9 +:1077C00000000000000000000000000000000000B9 +:1077D00000000000000000000000000000000000A9 +:1077E0000000000000000000000000000000000099 +:1077F0000000000000000000000000000000000089 :107800000000000000000000000000000000000078 :107810000000000000000000000000000000000068 -:1078200000080000008200000000000000000000CE -:107830000000800080200000880880200000802058 -:107840008000800000000000000000000000000038 -:1078500000000000000000000000004020000000C8 -:107860000000000000000000020000000000000016 +:107820000000000000000000000000000000000058 +:107830000000000000000000000000000000000048 +:107840000000000000000000000000000000000038 +:107850000000000000000000000000000000000028 +:107860000000000000000000000000000000000018 :107870000000000000000000000000000000000008 -:1078800000000000000002000000000000000000F6 -:1078900000000000000000050000000800000000DB -:1078A00000000000000000080000000800080000C0 -:1078B00000000000002000000000000000000000A8 -:1078C00000000000000000010000000000000000B7 -:1078D0000000000000000000000000000004001094 +:1078800000000000000000000000000000000000F8 +:1078900000000000000000000000000000000000E8 +:1078A00000000000000000000000000000000000D8 +:1078B00000000000000000000000000000000000C8 +:1078C00000000000000000000000000000000000B8 +:1078D00000000000000000000000000000000000A8 :1078E0000000000000000000000000000000000098 :1078F0000000000000000000000000000000000088 :107900000000000000000000000000000000000077 -:1079100000000082000000000000000000000000E5 -:10792000000000000000000800000000000000004F -:1079300000000000008400010000000000000000C2 -:107940000000000000000000000000000000210016 -:1079500000C00090000000000000210000000801AD -:107960000001000000000000000000000000000016 +:107910000000000000000000000000000000000067 +:107920000000000000000000000000000000000057 +:107930000000000000000000000000000000000047 +:107940000000000000000000000000000000000037 +:107950000000000000000000000000000000000027 +:107960000000000000000000000000000000000017 :107970000000000000000000000000000000000007 :1079800000000000000000000000000000000000F7 -:1079900000000000000000000000000000210000C6 -:1079A00000000008000000000003000000000000CC -:1079B000000000000000000000000000881100022C -:1079C00000000000A000820000000000040004008D -:1079D0000400040090008200820082000000000089 +:1079900000000000000000000000000000000000E7 +:1079A00000000000000000000000000000000000D7 +:1079B00000000000000000000000000000000000C7 +:1079C00000000000000000000000000000000000B7 +:1079D00000000000000000000000000000000000A7 :1079E0000000000000000000000000000000000097 :1079F0000000000000000000000000000000000087 :107A00000000000000000000000000000000000076 -:107A1000000000000000000000000000000000085E -:107A20000000000000000000000000000000001046 -:107A3000000000000200000000000000020000083A -:107A40000000000000002000000000000000800096 -:107A500080008000800000000000020000000200A2 -:107A600002080040029000000000000000000040FA -:107A70000200000000000000020000000000000002 -:107A800000040000004000000000020000000000B0 -:107A900000000000000001C000C0001010880000BD +:107A10000000000000000000000000000000000066 +:107A20000000000000000000000000000000000056 +:107A30000000000000000000000000000000000046 +:107A40000000000000000000000000000000000036 +:107A50000000000000000000000000000000000026 +:107A60000000000000000000000000000000000016 +:107A70000000000000000000000000000000000006 +:107A800000000000000000000000000000000000F6 +:107A900000000000000000000000000000000000E6 :107AA00000000000000000000000000000000000D6 -:107AB000000000000000000000000000000000C006 -:107AC00000900000000000C00090000000000000D6 -:107AD00000C0009000000000000000000000000056 -:107AE0000100000001000000000000000000000094 +:107AB00000000000000000000000000000000000C6 +:107AC00000000000000000000000000000000000B6 +:107AD00000000000000000000000000000000000A6 +:107AE0000000000000000000000000000000000096 :107AF0000000000000000000000000000000000086 :107B00000000000000000000000000000000000075 -:107B10000000000000000000208000800000000045 +:107B10000000000000000000000000000000000065 :107B20000000000000000000000000000000000055 :107B30000000000000000000000000000000000045 -:107B40000080008000000000008000800000000035 -:107B50000000008000800000000000000000000025 -:107B60000000110000000200000000000000000002 +:107B40000000000000000000000000000000000035 +:107B50000000000000000000000000000000000025 +:107B60000000000000000000000000000000000015 :107B70000000000000000000000000000000000005 :107B800000000000000000000000000000000000F5 -:107B900000000000000000000000000080800000E5 -:107BA00080800000000000000000000000000000D5 +:107B900000000000000000000000000000000000E5 +:107BA00000000000000000000000000000000000D5 :107BB00000000000000000000000000000000000C5 -:107BC0008000000080000000808000008000000035 -:107BD0008080000000008000000080800000000025 -:107BE0000000000080408000004000000000000015 +:107BC00000000000000000000000000000000000B5 +:107BD00000000000000000000000000000000000A5 +:107BE0000000000000000000000000000000000095 :107BF0000000000000000000000000000000000085 :107C00000000000000000000000000000000000074 -:107C1000000000000000000000000000020008C09A -:107C2000020002C000000000000000000000000090 +:107C10000000000000000000000000000000000064 +:107C20000000000000000000000000000000000054 :107C30000000000000000000000000000000000044 -:107C400000009000000082000000C0900000820050 -:107C50000000C0900000000082000000C090000002 -:107C60000000000000001000200020008200000042 +:107C40000000000000000000000000000000000034 +:107C50000000000000000000000000000000000024 +:107C60000000000000000000000000000000000014 :107C70000000000000000000000000000000000004 :107C800000000000000000000000000000000000F4 -:107C90000000000000000000000000000000C1889B -:107CA0000010C0880010000000000000000000006C +:107C900000000000000000000000000000000000E4 +:107CA00000000000000000000000000000000000D4 :107CB00000000000000000000000000000000000C4 -:107CC00000000000000000000000009000C0000064 -:107CD0000000009000C0000100000000009000C003 -:107CE0000000000000000000000082000000000012 +:107CC00000000000000000000000000000000000B4 +:107CD00000000000000000000000000000000000A4 +:107CE0000000000000000000000000000000000094 :107CF0000000000000000000000000000000000084 :107D00000000000000000000000000000000000073 :107D10000000000000000000000000000000000063 -:107D20004100008080000080000000000000000092 +:107D20000000000000000000000000000000000053 :107D30000000000000000000000000000000000043 -:107D40000000000000000000000000000080008033 -:107D500000000000008000800001000000000080A2 -:107D6000008005000000000000000000000000008E -:107D700040000000000000000000000000000000C3 +:107D40000000000000000000000000000000000033 +:107D50000000000000000000000000000000000023 +:107D60000000000000000000000000000000000013 +:107D70000000000000000000000000000000000003 :107D800000000000000000000000000000000000F3 :107D900000000000000000000000000000000000E3 -:107DA000000080028002808080000000000000004F +:107DA00000000000000000000000000000000000D3 :107DB00000000000000000000000000000000000C3 -:107DC0000000000000090000000080118040000059 -:107DD00000008011800500000000000180400005C7 -:107DE000800000000000000000000000000500808E +:107DC00000000000000000000000000000000000B3 +:107DD00000000000000000000000000000000000A3 +:107DE0000000000000000000000000000000000093 :107DF0000000000000000000000000000000000083 :107E00000000000000000000000000000000000072 :107E10000000000000000000000000000000000062 -:107E200000000000C000C001C040C0000000000011 +:107E20000000000000000000000000000000000052 :107E30000000000000000000000000000000000042 -:107E4000000000000000000000000000C001200150 -:107E500000000000C0012000000000000001C00080 -:107E600000002000000000000000000000000000F2 -:107E700000900088000000000000000000000000EA +:107E40000000000000000000000000000000000032 +:107E50000000000000000000000000000000000022 +:107E60000000000000000000000000000000000012 +:107E70000000000000000000000000000000000002 :107E800000000000000000000000000000000000F2 :107E900000000000000000000000000000000000E2 -:107EA0000000000000000000000041004842000007 +:107EA00000000000000000000000000000000000D2 :107EB00000000000000000000000000000000000C2 -:107EC000000000000000000A000007000000000A97 -:107ED000000007000000000A00000700000000008A -:107EE000008100000700000000000000000000000A -:107EF000810000E000000000000000000000000021 +:107EC00000000000000000000000000000000000B2 +:107ED00000000000000000000000000000000000A2 +:107EE0000000000000000000000000000000000092 +:107EF0000000000000000000000000000000000082 :107F00000000000000000000000000000000000071 :107F10000000000000000000000000000000000061 :107F20000000000000000000000000000000000051 :107F30000000000000000000000000000000000041 :107F40000000000000000000000000000000000031 -:107F5000FF000000FF000000FF000000FF00000025 -:107F60000000F0F00000FF00000000000000000032 +:107F50000000000000000000000000000000000021 +:107F60000000000000000000000000000000000011 :107F70000000000000000000000000000000000001 :107F800000000000000000000000000000000000F1 :107F900000000000000000000000000000000000E1 :107FA00000000000000000000000000000000000D1 :107FB00000000000000000000000000000000000C1 :107FC00000000000000000000000000000000000B1 -:107FD0000000FF000000FF000000FF000000FF00A5 -:107FE00000000000F0F00000FF00000000000000B2 +:107FD00000000000000000000000000000000000A1 +:107FE0000000000000000000000000000000000091 :107FF0000000000000000000000000000000000081 :108000000000000000000000000000000000000070 :108010000000000000000000000000000000000060 -:1080200000000000000000000000000040084000C8 -:10803000008420000000000000000000000000009C +:108020000000000000000000000000000000000050 +:108030000000000000000000000000000000000040 :108040000000000000000000000000000000000030 :108050000000000000000000000000000000000020 :108060000000000000000000000000000000000010 :108070000000000000000000000000000000000000 :1080800000000000000000000000000000000000F0 :1080900000000000000000000000000000000000E0 -:1080A00000000000000000000000FFFFFFFF0000D4 +:1080A00000000000000000000000000000000000D0 :1080B00000000000000000000000000000000000C0 :1080C00000000000000000000000000000000000B0 -:1080D00000000000FFFF000000FF00000F0F000085 -:1080E00000FF00000F0F0000000000FF00000F0F56 -:1080F000000000000000000000000000FF663C0FD0 +:1080D00000000000000000000000000000000000A0 +:1080E0000000000000000000000000000000000090 +:1080F0000000000000000000000000000000000080 :10810000000000000000000000000000000000006F :10811000000000000000000000000000000000005F -:10812000000000000000000000000000FFFFFFFF53 +:10812000000000000000000000000000000000004F :10813000000000000000000000000000000000003F :10814000000000000000000000000000000000002F -:10815000000000000000FFFF000000FF00000F0F04 -:10816000000000FF00000F0F0000000000FF0000F3 -:108170000F0F00000000000000000000000000667B -:108180003C0F0000000000000000000000000000A4 +:10815000000000000000000000000000000000001F +:10816000000000000000000000000000000000000F +:1081700000000000000000000000000000000000FF +:1081800000000000000000000000000000000000EF :1081900000000000000000000000000000000000DF :1081A00000000000000000000000000000000000CF -:1081B0001006300000000000080000000000000071 +:1081B00000000000000000000000000000000000BF :1081C00000000000000000000000000000000000AF -:1081D000000000000038000010C0038203380C00CB -:1081E00092C0038203380C0092C00000038203385F -:1081F0000C008AC0000000000000000000610007C1 -:10820000C00D0000000000000000000000000000A1 +:1081D000000000000000000000000000000000009F +:1081E000000000000000000000000000000000008F +:1081F000000000000000000000000000000000007F +:10820000000000000000000000000000000000006E :10821000000000000000000000000000000000005E :10822000000000000000000000000000000000004E :10823000000000000000000000000000000000003E @@ -51279,15 +51279,15 @@ :10841000000000000000000000000000000000005C :10842000000000000000000000000000000000004C :10843000000000000000000000000000000000003C -:10844000000000000000000000000000000000002C -:10845000000000000000000000000000000000001C -:10846000000000000000000000000000000000000C -:1084700000000000000200000000000000000000FA -:10848000000000000000000000008200000000006A -:1084900000000000000000000000000088008800CC -:1084A00040000000000000008800200000000000E4 +:1084400000000000000000008800000000000000A4 +:1084500000000000000000000000000000004000DC +:108460000000C0000000000020000000000000002C +:1084700000000000000000000000000000000000FC +:1084800000000000000000000000200000000000CC +:1084900000000000000000000000000000000000DC +:1084A000000000000000820000002000000000002A :1084B00000000000000000000000000000000000BC -:1084C00000000000000800000000000000000000A4 +:1084C00000000000000000000000000000000000AC :1084D000000000000000000000000000000000009C :1084E000000000000000000000000000000000008C :1084F000000000000000000000000000000000007C @@ -51295,92 +51295,92 @@ :10851000000000000000000000000000000000005B :10852000000000000000000000000000000000004B :10853000000000000000000000000000000000003B -:108540000003000000000000000002000000000026 -:108550000000000000000000000000000004000017 +:10854000000000000000000000000000000000002B +:10855000000000000000000000000000000000001B :10856000000000000000000000000000000000000B :1085700000000000000000000000000000000000FB -:10858000000000400000000000000000000000416A -:10859000000000400000000000000000000000009B +:1085800000000000000000000000000000000000EB +:1085900000000000000000000000000000000000DB :1085A00000000000000000000000000000000000CB -:1085B00000000000000000000000000000000008B3 -:1085C00000000000000000080000000000000000A3 -:1085D0000000008400000000000000000000000413 -:1085E000000000880000008800880000008800006B +:1085B00000000000000000000000000000000000BB +:1085C00000000000000000000000000000000000AB +:1085D000000000000000000000000000000000009B +:1085E000000000000000000000000000000000008B :1085F000000000000000000000000000000000007B :10860000000000000000000000000000000000006A :10861000000000000000000000000000000000005A -:108620000000000000000500000000000000000045 -:10863000000000000000000000000000000000003A -:108640000002000000000000000000000000000028 +:10862000000000000000000000000000000000004A +:108630000000020000000000000000000000000038 +:10864000000000000000000000000000000000002A :10865000000000000000000000000000000000001A -:108660000002000000020000000000000000000006 +:10866000000000000000000000000000000000000A :1086700000000000000000000000000000000000FA -:1086800000000002000000210000000000000000C7 -:1086900000000000000000050000000000000000D5 +:1086800000000000000000000000000000000000EA +:1086900000000000000000000000000000000000DA :1086A00000000000000000000000000000000000CA :1086B00000000000000000000000000000000000BA :1086C00000000000000000000000000000000000AA -:1086D000008200C000000000000000000000000058 +:1086D000000000000000000000000000000000009A :1086E000000000000000000000000000000000008A :1086F000000000000000000000000000000000007A -:108700000000000000000000000000000300000066 +:108700000000000000000000000000000000000069 :108710000000000000000000000000000000000059 :108720000000000000000000000000000000000049 :108730000000000000000000000000000000000039 -:108740000000000000000000000000000000000029 +:1087400000000000820000000000000000000000A7 :108750000000000000000000000000000000000019 -:1087600000000000000000000040000000000000C9 -:1087700000000000000000000000000040000000B9 +:108760000000000000000000000000000000000009 +:1087700000000000000000000000000000000000F9 :1087800000000000000000000000000000000000E9 -:1087900000800000000000009000020000000000C7 -:1087A0000000000088000000000000000000000041 +:1087900000000000000000000000000000000000D9 +:1087A00000000000000000000000000000000000C9 :1087B00000000000000000000000000000000000B9 -:1087C00000000000000000000000000000000000A9 -:1087D00000000000000000A0000000A00000000059 -:1087E00000000000000009900000000000000000F0 -:1087F00011000000000000A0000011A00000000017 -:108800000000000000000000000000000200000066 -:1088100000000004000000000088098800840000B7 -:108820000000000000000000000003000300400002 -:108830000000000009000000090000000000000026 +:1087C0000000000000000000000008000300080096 +:1087D0000000000000000000000000000000000099 +:1087E0000000000000000000000000001000000079 +:1087F0000500000000000000000000000000000074 +:108800000000000000000000000000001000080050 +:108810000000080000000000000000000000000050 +:108820000000000000000000000000000000000048 +:1088300000000000000000000000004000000000F8 :108840000000000000000000000000000000000028 -:1088500000000000000000000000000000410000D7 +:108850000000000000000000000000000000000018 :108860000000000000000000000000000000000008 :1088700000000000000000000000000000000000F8 -:108880000000000000000000000000009000010057 +:1088800000000000000000000000000000000000E8 :1088900000000000000000000000000000000000D8 :1088A00000000000000000000000000000000000C8 :1088B00000000000000000000000000000000000B8 -:1088C00000000000000000000000000000000008A0 -:1088D000008400000008000000000000000000000C +:1088C00000000000000000000000000000000000A8 +:1088D0000000000000000000000000000000000098 :1088E0000000000000000000000000000000000088 :1088F0000000000000000000000000000000000078 :108900000000000000000000000000000000000067 -:1089100020000000000000000000000000000084B3 +:108910000000000000000000000000000000000057 :108920000000000000000000000000000000000047 :108930000000000000000000000000000000000037 :108940000000000000000000000000000000000027 -:10895000000000000000000000000008000000000F +:108950000000000000000000000000000000000017 :108960000000000000000000000000000000000007 :1089700000000000000000000000000000000000F7 :1089800000000000000000000000000000000000E7 :1089900000000000000000000000000000000000D7 -:1089A00000000000000000000002000900000000BC +:1089A00000000000000000000000000000000000C7 :1089B00000000000000000000000000000000000B7 -:1089C0000000000000090000000000000000000896 -:1089D0000000000000000008000002000000090084 +:1089C00000000000000000000000000000000000A7 +:1089D0000000000000000000000000000000030094 :1089E0000000000000000000000000000000000087 -:1089F00000000000000000C00000000000000900AE -:108A000011000088000000000000000000000000CD -:108A1000000000000000110000C0000011900000E4 -:108A2000090000000000000000000000000000003D -:108A3000000000001100000000000000009003840E +:1089F000000000000000000000000000000008006F +:108A00000000000000000000000000000000000066 +:108A10000000000000000000000000000000000056 +:108A2000080000000000000000000000000000003E +:108A30000000000000000000000000002000000016 :108A4000080000000000000000000000000000001E :108A50000000000000000000000000000000000016 :108A60000000000000000000000000000000000006 :108A700000000000000000000000000000000000F6 :108A800000000000000000000000000000000000E6 -:108A900000000000000000010000000000000000D5 +:108A900000000000000000000000000000000000D6 :108AA00000000000000000000000000000000000C6 :108AB00000000000000000000000000000000000B6 :108AC00000000000000000000000000000000000A6 @@ -51388,7 +51388,7 @@ :108AE0000000000000000000000000000000000086 :108AF0000000000000000000000000000000000076 :108B00000000000000000000000000000000000065 -:108B10000000000000000000001100000000000044 +:108B10000000000000000000000000000000000055 :108B20000000000000000000000000000000000045 :108B30000000000000000000000000000000000035 :108B40000000000000000000000000000000000025 @@ -51396,7 +51396,7 @@ :108B60000000000000000000000000000000000005 :108B700000000000000000000000000000000000F5 :108B800000000000000000000000000000000000E5 -:108B90000000000000000000000000000000008352 +:108B900000000000000000000000000000000000D5 :108BA00000000000000000000000000000000000C5 :108BB00000000000000000000000000000000000B5 :108BC00000000000000000000000000000000000A5 @@ -51405,7 +51405,7 @@ :108BF0000000000000000000000000000000000075 :108C00000000000000000000000000000000000064 :108C10000000000000000000000000000000000054 -:108C200000900000000000000000000000000000B4 +:108C20000000000000000000000000000000000044 :108C30000000000000000000000000000000000034 :108C40000000000000000000000000000000000024 :108C50000000000000000000000000000000000014 @@ -51413,7 +51413,7 @@ :108C700000000000000000000000000000000000F4 :108C800000000000000000000000000000000000E4 :108C900000000000000000000000000000000000D4 -:108CA000000084000100000000000000000000003F +:108CA00000000000000000000000000000000000C4 :108CB00000000000000000000000000000000000B4 :108CC00000000000000000000000000000000000A4 :108CD0000000000000000000000000000000000094 @@ -51421,7 +51421,7 @@ :108CF0000000000000000000000000000000000074 :108D00000000000000000000000000000000000063 :108D10000000000000000000000000000000000053 -:108D200000000000410004000000000000000000FE +:108D20000000000000000000000000000000000043 :108D30000000000000000000000000000000000033 :108D40000000000000000000000000000000000023 :108D50000000000000000000000000000000000013 @@ -51429,7 +51429,7 @@ :108D700000000000000000000000000000000000F3 :108D800000000000000000000000000000000000E3 :108D900000000000000000000000000000000000D3 -:108DA0000000001100000000800000000000000032 +:108DA00000000000000000000000000000000000C3 :108DB00000000000000000000000000000000000B3 :108DC00000000000000000000000000000000000A3 :108DD0000000000000000000000000000000000093 @@ -51437,7 +51437,7 @@ :108DF0000000000000000000000000000000000073 :108E00000000000000000000000000000000000062 :108E10000000000000000000000000000000000052 -:108E200000000000000100000000900000000000B1 +:108E20000000000000000000000000000000000042 :108E30000000000000000000000000000000000032 :108E40000000000000000000000000000000000022 :108E50000000000000000000000000000000000012 @@ -51445,7 +51445,7 @@ :108E700000000000000000000000000000000000F2 :108E800000000000000000000000000000000000E2 :108E900000000000000000000000000000000000D2 -:108EA000000000000000840000E007000000000057 +:108EA00000000000000000000000000000000000C2 :108EB00000000000000000000000000000000000B2 :108EC00000000000000000000000000000000000A2 :108ED0000000000000000000000000000000000092 @@ -51453,7 +51453,7 @@ :108EF0000000000000000000000000000000000072 :108F00000000000000000000000000000000000061 :108F10000000000000000000000000000000000051 -:108F200000000000000000001414141400000000F1 +:108F20000000000000000000000000000000000041 :108F30000000000000000000000000000000000031 :108F40000000000000000000000000000000000021 :108F50000000000000000000000000000000000011 @@ -51461,7 +51461,7 @@ :108F700000000000000000000000000000000000F1 :108F800000000000000000000000000000000000E1 :108F900000000000000000000000000000000000D1 -:108FA0000000000000000000000014141414000071 +:108FA00000000000000000000000000000000000C1 :108FB00000000000000000000000000000000000B1 :108FC00000000000000000000000000000000000A1 :108FD0000000000000000000000000000000000091 @@ -51486,7 +51486,7 @@ :10910000000000000000000000000000000000005F :10911000000000000000000000000000000000004F :10912000000000000000000000000000000000003F -:1091300000610002800D000000000000000000003F +:10913000000000000000000000000000000000002F :10914000000000000000000000000000000000001F :10915000000000000000000000000000000000000F :1091600000000000000000000000000000000000FF @@ -51510,7 +51510,7 @@ :1092800000000000000000000000000000000000DE :1092900000000000000000000000000000000000CE :1092A00000000000000000000000000000000000BE -:1092B000000000000000FFFFFFFF000000000000B2 +:1092B00000000000000000000000000000000000AE :1092C000000000000000000000000000000000009E :1092D000000000000000000000000000000000008E :1092E000000000000000000000000000000000007E @@ -51518,181 +51518,181 @@ :10930000000000000000000000000000000000005D :10931000000000000000000000000000000000004D :10932000000000000000000000000000000000003D -:109330000000000000000000FFFF0000000000002F +:10933000000000000000000000000000000000002D :10934000000000000000000000000000000000001D :10935000000000000000000000000000000000000D :1093600000000000000000000000000000000000FD -:1093700000000000000000000000000000000010DD -:1093800000000000000000000000000000000000DD -:1093900000000000000000000000000000000000CD -:1093A000000000000000000000000000000001803C -:1093B00000030400000000000000000000000000A6 -:1093C0000000000088000000000000000000000015 -:1093D0002100880004000000040088000000040050 -:1093E00004000000840082000000840088008400E3 -:1093F0008880000000000000000000000000000065 -:10940000000000000000000000000002000000005A -:10941000000000000000000000000000000000004C +:109370000000020000008800000020002000000023 +:109380008400000020000000200000000000000415 +:1093900000000200000000000000200000000000AB +:1093A00020008400200000002000000000000004D5 +:1093B00000030000020000000400000020008800FC +:1093C000000000000000000000000000000000009D +:1093D0000004000004000000200000002000200025 +:1093E000000000000000000000008800880000006D +:1093F00000800000000000000000000000000000ED +:1094000000000090000000000000000000000000CC +:109410000003000000000000000000000000000049 :10942000000000000000000000000000000000003C -:109430001004000000000000000000000000000018 +:109430000003000000000000000000000000000029 :10944000000000000000000000000000000000001C -:10945000000090000000000000000000000000007C -:1094600000000000000000000000000000000000FC -:1094700000002008000000000000000000000000C4 -:1094800000000000100008000000000000000000C4 -:10949000000082000000000000000000000000004A -:1094A00002000000000000000000000000000000BA +:109450000000000300000000000000000000000009 +:10946000000000000082000000000000000000007A +:1094700000000004000000000000000000000000E8 +:1094800000000000000000000000000000000000DC +:1094900000000000000000000000000000000000CC +:1094A00000000000000000000000000000000000BC :1094B00000000000000000000000000000000000AC -:1094C0000000900000008400000000000000000088 -:1094D0000000000000008800000000000000000004 +:1094C000000000000000000000000000000000009C +:1094D000000000000000000002000000000000008A :1094E000000000000000000000000000000000007C -:1094F00000000000000000080084000000000000E0 -:1095000000000008000000080008000000080082B9 -:1095100000000000000000080084000000000000BF -:10952000000000080000000800840084008400009F -:10953000000000840000000000A000000084000083 -:109540000000000000840000008800C0000000004F -:10955000000000080000000000C000000000000043 -:1095600000000000000000000000001000C00084A7 -:1095700000A000880000000000210021000500007C -:10958000002100210005002100080010000000005B -:109590000021002100080021002100210008000016 -:1095A0000021002100000021004100050000000012 -:1095B00000210021002100210000000500210003FE -:1095C0000005000300210041002100000008000800 -:1095D0000000000000210021002100000000001018 -:1095E0000000000000030021002100000000000036 -:1095F0000000000000000005200500000008000039 -:1096000000000000000000A00000000200000000B8 +:1094F000000000000000000000000000000000006C +:10950000000000000000000000000000000000005B +:10951000000000000000000000000000000000004B +:10952000000000000000000000000000000000003B +:10953000000000000000000000000000000000002B +:10954000000000000000000000000000000000001B +:10955000000000000000000000000000000000000B +:1095600000000000000000000000000000000000FB +:1095700000000000000000000000000000000000EB +:1095800000000000000000000000A000000000003B +:1095900000000000000000000000000000000000CB +:1095A00000000000000000000000000000000000BB +:1095B00000000000000000000000000000000000AB +:1095C000000000000000000000000000000000009B +:1095D000000000000000000000000000000000008B +:1095E00000000000000000000000000084000000F7 +:1095F000000000000000000000000000000000006B +:10960000000000000000000000000000000000005A :10961000000000000000000000000000000000004A -:109620000000000000000008000000A00000000092 +:109620000800000000000000000000000000000032 :10963000000000000000000000000000000000002A -:10964000000000000000000000A00000000000007A +:10964000000000000000000000000000000000001A :10965000000000000000000000000000000000000A :1096600000000000000000000000000000000000FA -:10967000000000000000000000008000000000006A -:109680008200000000000000000000110000000047 -:109690008200000000000000000020080000000020 -:1096A00082000000000000000000820000000009AD -:1096B0008200000000000011A00000000000000077 -:1096C000A000820000000000000082000005A00051 -:1096D000200082000000A000000082004000820004 -:1096E0008200820000000000A000820082000000D2 -:1096F000000082000000C000C00082008200000064 -:109700000000000000000000000000000000000059 -:109710000000000000000000000000000001000048 -:1097200000000000000000000000000000000084B5 -:10973000000800840000000000000000000000009D -:10974000000000000000000000000000000000C059 -:1097500000002000000000000000024000000000A7 +:1096700000000000000000000000000000000800E2 +:1096800082008200A0000000000000000000000036 +:1096900082000000A00000000000000000000800A0 +:1096A000820004000000000008000000000000002C +:1096B00082000000000000008200000000000000A6 +:1096C000080082000400A00000000000000000006C +:1096D0000000820000000800A00000000000000060 +:1096E00008008200080082008200000000000000E4 +:1096F00000008200000082008200000000000000E4 +:109700001000000000000000000000000000000049 +:109710000000080000000800000000000000000039 +:109720000000000000000000000000000000080031 +:109730000000000000000000000000000000000029 +:109740000000000000000000000000000000000019 +:1097500008000000080000000000000000000000F9 :1097600000000000000000000000000000000000F9 :1097700000000000000000000000000000000000E9 -:1097800000000000000000000000000500000000D4 -:1097900000000021000000000002000000000000A6 -:1097A0000000000000000000000990050000820099 -:1097B00000000005000000000000000000000000A4 -:1097C00000030000000000000000A00000020000F4 -:1097D00000000000820500000008000800000000F2 -:1097E000000008000000000000000000A0050000CC -:1097F000C00000080805C0000021000000000000B3 +:1097800000000000000000000000080008000000C9 +:1097900000000000000000000000000000000000C9 +:1097A00000000000000000000000080008000000A9 +:1097B00000000000000000000000000000000000A9 +:1097C000000000000000000000000000080082000F +:1097D0000000000000000000000000000000000089 +:1097E0000000000000000000000000000800080069 +:1097F0000000000000000000000000000000000069 :109800000000000000000000000000000000000058 :109810000000000000000000000000000000000048 :109820000000000000000000000000000000000038 :109830000000000000000000000000000000000028 -:109840000000000000000000000000C00000000058 +:109840000000000000000000000000000000000018 :109850000000000000000000000000000000000008 :1098600000000000000000000000000000000000F8 :1098700000000000000000000000000000000000E8 -:1098800000000000000800080000001100000000B7 -:109890000008820000000008000800080000000521 -:1098A000004101000008000300000000000000006B -:1098B0004000200000000021C02100210005880890 -:1098C00000050000000004080000002100009009CD -:1098D0000200000000054000000000000009000533 -:1098E00000080000000000040400000004008200E2 -:1098F0000000000090000000001000000000400088 -:109900000041000200000000000000000000000014 +:1098800000000000A0001000000000000000A00088 +:109890000000000040000000000000000000000088 +:1098A0000000000000000000000000008200000036 +:1098B00000000000000000000000000008000000A0 +:1098C000000000000000A0000000000000000000F8 +:1098D0000000000000000000080000000000000080 +:1098E0000000000000000000000000000000000078 +:1098F00082000000000000000000000000000000E6 +:109900000000000000000000000000000000000057 :109910000000000000000000000000000000000047 -:1099200000000000200000000000000000000040D7 +:109920000000000000000000000000000000000037 :109930000000000000000000000000000000000027 :109940000000000000000000000000000000000017 :109950000000000000000000000000000000000007 :1099600000000000000000000000000000000000F7 :1099700000000000000000000000000000000000E7 -:10998000000000000000000000010001000100C014 -:109990000001000100C001110100010100400004AC -:1099A0000001000100C1000000010001000100C031 -:1099B0000001000100C0011100000101004000048D -:1099C0000001000100C000000000000102010001D0 -:1099D00000C10001000100C00111000005010040AC -:1099E00000820001400100C00000000100010001F0 -:1099F00000C00001000100C0001100000101004092 -:109A000000040001400100C000000041004100418D -:109A1000009100410041008940C14104084100001B -:109A200000800041004100850000004100410041EC -:109A3000009100410041008940C10302084100003B -:109A4000008000410041008500000000004100410D -:109A50000041008300410041009040C10005C04129 -:109A6000000000800041804100C000000041004132 -:109A70000041009100410041009040C10040204160 -:109A8000000000800041804100C000004100030050 -:109A90000000008041008200000002008800820077 -:109AA0000091A000C100C10000800000410003003F -:109AB00000000080410082000000020009008400D4 -:109AC00000808200C100C10000C000000000410011 -:109AD0000300000000804100910000000400090024 -:109AE000040000808400C100C10000C0800041006B -:109AF00003000000008041009100000005002000EC -:109B000002000000C000C100C10000C080000100D0 -:109B10000100000000C00100C00000000000410082 -:109B200008880008C1000900C10000848484010085 -:109B30000100000000C00100C0000000000088001B -:109B400020880004C1004100C10000054000000061 -:109B500001000100000000C00100C0000000000082 -:109B6000880084880010C1000300C10000828200C8 -:109B700001000100000000C00100C0000000000062 -:109B80008300412000C0C1000300C10000828200A8 -:109B900000C00001C0C100000000000100C00208B8 -:109BA0000011000100C100000000000100010100DF -:109BB00000C00001C0C100000000000100C0020898 -:109BC0000011000100C100000000000100000000C1 -:109BD000000000C00001C0C100000000000100C082 -:109BE00002080083000102C1000000000001000023 -:109BF000000000C00001C0C100000000000100C062 -:109C000002030005000108C100000000000100007F -:109C100000000080004180C100000000004100C140 -:109C200000900041004100C100000000004100051B -:109C300004000080004180C100000000004100C11C -:109C400000900041004100C10000000000410005FB -:109C5000000000000080004180C1000000000041C1 -:109C600000C100840041004180C1000000000041AB -:109C7000004000000080004180C100000000004161 -:109C800000C1008200C1004180C10000000000410D -:109C900000400000C100800080C1000041040000BD -:109CA00004004100C1048000800200004100000067 -:109CB00080004100C100800080C10000410400001C -:109CC00004004100C1410000800900004100000083 -:109CD000800041000000C100800080C100004104FC -:109CE000000002004100C1418000800200004100EC -:109CF000000080004100C100800080C100004104DC -:109D0000800002004100C1C18000800400004100C9 -:109D1000000080004100C1004000C0C100000101FE -:109D2000020010000100C1A12000C00000000100DD -:109D30000000C0000100C1004000C0C100000101DE -:109D4000020010000100C1A1A000C000000001003D -:109D50000000C00001000000C1004000C0C10000C0 -:109D60000101020010000100C1A14000C00000007C -:109D700001000000C0000100C1004000C0C100009F -:109D80000101100010000100C1410200C0010000EB -:109D900001000000C00001000000000000000042BF -:109DA0000000000000000000881200880700480042 -:109DB0000000000000000000000000000000004261 -:109DC0000000000000000000811200880700480029 -:109DD0000000000000000000000000000000000083 -:109DE000004200000000000000008112008807000F -:109DF000480000000000000000000000000000001B -:109E000000420000000000000000811200880700EE -:109E100048000000000000000000000000000000FA +:1099800000000000000000000000000000000000D7 +:1099900001000000000000000000010000C0000005 +:1099A00000000000000000000000000000000000B7 +:1099B00001000000000000000000010000C00000E5 +:1099C0000000000000000000000000000000000097 +:1099D000000001000000000000000000010000C0C5 +:1099E0000000000000000000000000000000000077 +:1099F000000001000000000000000000000000C0A6 +:109A00000000000000000000000000000000000056 +:109A10000000410000000000000000030200008080 +:109A20000000000000000000000000000000000036 +:109A30000000410000000000000000030200008060 +:109A40000000000000000000000000000000000016 +:109A500000000000410000000000000000030200C0 +:109A60000080000000000000000000000000000076 +:109A7000000000004100000000000000000305009D +:109A80000080000000000000000000000000030053 +:109A90000000008000008000000000000200208024 +:109AA0000000000000000000000000410000030072 +:109AB0000000008000008000000000000500200081 +:109AC0000000000000000000000000410000000055 +:109AD0000300000000800000800000000000020081 +:109AE0002000000000000000000000000041000015 +:109AF0000300000000800000800000000000200043 +:109B000020000000000000000000000000410000F4 +:109B10000100000000C00000200000000000210043 +:109B200041040082400040000000000000010000ED +:109B30000100000000C00000200000000000200024 +:109B400041200020820020000000000000010000F1 +:109B500000000100000000C0000020000000000024 +:109B60002100410800888200400000000000000140 +:109B700000000100000000C0000020000000000004 +:109B8000040041200020A00040000000000000016F +:109B900000000000C0000000000000000000000005 +:109BA00000080000000000000000000000000000AD +:109BB00000000000C00000000000000000000000E5 +:109BC000000800000000000000000000000000008D +:109BD000000000000000C0000000000000000000C5 +:109BE0000000001000000000000000000000000065 +:109BF000000000000000C0000000000000000000A5 +:109C00000000001000000000000000000000000044 +:109C100000000000000080000000000000000000C4 +:109C20000000000000000000000000000000000034 +:109C300000000000000080000000000000000000A4 +:109C40000000000000000000000000000000000014 +:109C50000000000000000000800000000000000084 +:109C600000000000000000000000000000000000F4 +:109C70000000000000000000800000000000000064 +:109C800000000000000000000000000000000000D4 +:109C9000000000000000800000C100000000000083 +:109CA0000000000000C100000020000000000000D3 +:109CB000000000000000800000C100000000000063 +:109CC0000000000000C10000004000000000000093 +:109CD0000000000000000000800000C10000000043 +:109CE00000000000000000C1000000400000000073 +:109CF0000000000000000000800000C10000000023 +:109D000000000000000000C1000000400000000052 +:109D10000000000000000000400000C10000000042 +:109D200000000000000000034000000000000000F0 +:109D30000000000000000000400000C10000000022 +:109D400000000000000000034000000000000000D0 +:109D500000000000000000000000400000C1000002 +:109D600000000000000000000003400000000000B0 +:109D700000000000000000000000400000C10000E2 +:109D80000000000000000000000340000000000090 +:109D90000000000000000000000000000000004281 +:109DA0000000000000004800810000E000004800C2 +:109DB000000000000000004200000000000000421F +:109DC0000000000000004800810000E000004800A2 +:109DD0000000000000000042000000000000000041 +:109DE00000420000000000004800810000E0000088 +:109DF00048000000000000000042000000000000D9 +:109E000000420000000000004800810000E0000067 +:109E100048000000000000000042000000000000B8 :109E20000000000000000000000000000000000032 :109E30000000000000000000000000000000000022 :109E40000000000000000000000000000000000012 @@ -51708,80 +51708,80 @@ :109EE0000000000000000000000000000000000072 :109EF0000000000000000000000000000000000062 :109F00000000000000000000000000000000000051 -:109F10000000000000000000000000000000757B51 +:109F10000000000000000000000000000000747B52 :109F20000000000000000000000000000000000031 -:109F3000000000000000000000000000DEAE757BA5 +:109F3000000000000000000000000000DE2E747B26 :109F40000000000000000000000000000000000011 -:109F5000000000000000000000000000DEAE000075 -:109F6000757B000000000000000000000000000001 -:109F70000000000000000000000000000000DEAE55 -:109F8000757B0000000000000000000000000000E1 -:109F90000000000000000000000000000000DEAE35 -:109FA00060C603000000000000000031E000000077 -:109FB000000000000C0000000000000000C063066C -:109FC00060C603000000000000000031E000000057 -:109FD000000000000C0000000000000000C063064C -:109FE000000060C603000000000000000031E00037 -:109FF0000000000000000C0000000000000000C095 -:10A00000630660C603000000000000000031E000AD -:10A010000000000000000C0000000000000000C074 -:10A0200063060000000000000000000000000000C7 +:109F5000000000000000000000000000DE2E0000F5 +:109F6000747B000000000000000000000000000002 +:109F70000000000000000000000000000000DE2ED5 +:109F8000747B0000000000000000000000000000E2 +:109F90000000000000000000000000000000DE2EB5 +:109FA000615603400000000000000231E0000000A4 +:109FB000000000000C4000000000000002C06A86A3 +:109FC000615603400000000000000231E000000084 +:109FD000000000000C4000000000000002C06A8683 +:109FE0000000615603400000000000000231E00064 +:109FF0000000000000000C4000000000000002C053 +:10A000006A86615603400000000000000231E00053 +:10A010000000000000000C4000000000000002C032 +:10A020006A8600000000000000002000840000009C :10A030000000000000000000000000000000000020 -:10A040000000000000000000000000000000000010 -:10A0500000000000000000050000000000000000FB +:10A0400000000000000000000000200000000000F0 +:10A050000000000000000000000000000000000000 :10A0600000000000000000000000000000000000F0 :10A0700000000000000000000000000000000000E0 -:10A08000000000000000840000000000000000004C -:10A0900000000000000000000000000000000000C0 +:10A080000000000000000000000000008800C00088 +:10A090008800000000000000000000000000A00098 :10A0A00000000000000000000000000000000000B0 -:10A0B00000000000000000000000000000000000A0 +:10A0B000000000000000000000000000000002009E :10A0C0000000000000000000000000000000000090 -:10A0D0000000000000000000000000000000000080 +:10A0D000000000000000000000000000050000007B :10A0E0000000000000000000000000000000000070 :10A0F0000000000000000000000000000000000060 -:10A10000050000000000000000000000000000004A +:10A10000000000000000000000000000000000004F :10A11000000000000000000000000000000000003F -:10A12000000000000000000000000000000010001F -:10A13000000000000000000000000200000000001D +:10A12000000000000000000000000000000000002F +:10A13000000000000000000000000000000000001F :10A14000000000000000000000000000000000000F -:10A1500000000009000000000000000000000000F6 -:10A160000000000000000000000000000800900057 -:10A170000800000000000000000090000000000047 -:10A18000000084000000000000000000000000004B +:10A1500000000000000000000000000000000000FF +:10A1600000000000000000000000000000000000EF +:10A1700000000000000000000000000000000000DF +:10A1800000000000000000000000000000000000CF :10A1900000000000000000000000000000000000BF :10A1A00000000000000000000000000000000000AF -:10A1B0000008000800000000000000080008000877 -:10A1C000000000000000000000000000000000008F -:10A1D00000880088000000000000000800080084DB -:10A1E000001000000000000000000000000000005F -:10A1F00000000010000000000000000000880008BF +:10A1B000000000000000000000000000000000009F +:10A1C000000002000000000000000000000000008D +:10A1D000000000000000000000000000000000007F +:10A1E000000000000000000000000000000000006F +:10A1F000000000000000000000000000000000005F :10A20000000000000000000000000000000000004E -:10A210000000000000000000000000000008001026 +:10A21000000000000000000000000000000000003E :10A22000000000000000000000000000000000002E -:10A230000000000000080000000000000000000016 +:10A23000000000000000000000000000000000001E :10A24000000000000000000000000000000000000E :10A2500000000000000000000000000000000000FE :10A2600000000000000000000000000000000000EE -:10A27000001000410000000000000000000000008D +:10A2700000000000000000000000000000000000DE :10A2800000000000000000000000000000000000CE :10A2900000000000000000000000000000000000BE :10A2A00000000000000000000000000000000000AE -:10A2B000000000000000000000000000000000009E -:10A2C00000080008000800000000000000840000F2 -:10A2D000000000000000000000000000000000007E -:10A2E000000800A0001000000000000000000000B6 -:10A2F000000000000000000000000000000000005E -:10A30000000800080000000000000000000000003D -:10A31000000000000000000021000000000000001C -:10A320000008001000000000000000000000000015 +:10A2B0000000000008000000000021000000000075 +:10A2C000000000000000000000000000000000008E +:10A2D0000000000008000800030000000300000068 +:10A2E000000000000000000000000000000000006E +:10A2F0000000000000000800000000000000000056 +:10A300000000000000000004000000000000000049 +:10A310000000000000000300050003000000000032 +:10A320000000000000000004000000000000000029 :10A33000000000000000000000000000000000001D -:10A340000000000000000000000000090000000004 +:10A34000000000000000000000004000000040008D :10A3500000000000000000000000000000000000FD :10A3600000000000000000000000000000000000ED :10A3700000000000000000000000000000000000DD -:10A3800000000000000000000000000000000000CD +:10A38000000000000000000040000000400000004D :10A3900000000000000000000000000000000000BD -:10A3A00000000000000000000000040000000000A9 +:10A3A00000000000000000000000000000000000AD :10A3B000000000000000000000000000000000009D :10A3C000000000000000000000000000000000008D :10A3D000000000000000000000000000000000007D @@ -51798,26 +51798,26 @@ :10A4800000000000000000000000000000000000CC :10A4900000000000000000000000000000000000BC :10A4A00000000000000000000000000000000000AC -:10A4B0000000000000000000000000000008000094 -:10A4C0000000000000000008001000000000000074 -:10A4D000000000000000000000000000000800C0B4 -:10A4E000000000000000000800A0000000000000C4 -:10A4F000000000000000000000000000000000104C -:10A50000000000000000000000C00000000000008B +:10A4B000000000000000000000000000000000009C +:10A4C000000000000000000000000000000000008C +:10A4D000000000000000000000000000000000007C +:10A4E000000000000000000000000000000000006C +:10A4F000000000000000000000000000000000005C +:10A5000000000000000000000000008400000000C7 :10A51000000000000000000000000000000000003B :10A52000000000000000000000000000000000002B -:10A53000000000000000000000000000000000001B +:10A53000000000000000000000000000C00000005B :10A54000000000000000000000000000000000000B -:10A5500000000000000000000000000000000008F3 +:10A5500000000000000000000000000000000000FB :10A5600000000000000000000000000000000000EB :10A5700000000000000000000000000000000000DB :10A5800000000000000000000000000000000000CB -:10A59000000000000000000000004000000000007B +:10A5900000000000000200000000000000000000B9 :10A5A00000000000000000000000000000000000AB :10A5B000000000000000000000000000000000009B :10A5C000000000000000000000000000000000008B :10A5D000000000000000000000000000000000007B -:10A5E000020409000000000000000000000000005C +:10A5E000000000000000000000000000000000006B :10A5F000000000000000000000000000000000005B :10A60000000000000000000000000000000000004A :10A61000000000000000000000000000000000003A @@ -51978,10 +51978,10 @@ :10AFC0000000000000000000000000000000000081 :10AFD0000000000000000000000000000000000071 :10AFE0000000000000000000000000000000000061 -:10AFF0000000000000000000000000000000000051 +:10AFF0000000200000000000000000000000000031 :10B000000000000000000000000000000000000040 :10B010000000000000000000000000000000000030 -:10B02000000100000000000000000000000000001F +:10B020000000000000000000000000000000000020 :10B030000000000000000000000000000000000010 :10B040000000000000000000000000000000000000 :10B0500000000000000000000000000000000000F0 @@ -51994,27 +51994,27 @@ :10B0C0000000000000000000000000000000000080 :10B0D0000000000000000000000000000000000070 :10B0E0000000000000000000000000000000000060 -:10B0F000000002000200000000000000000000004C -:10B100000200020000000000000000000100010039 -:10B110000100010000008200000000000000820029 +:10B0F0000000000000000000000000000000000050 +:10B10000000000000000000000000000000000003F +:10B11000000000000000000000000000000000002F :10B12000000000000000000000000000000000001F -:10B13000000000008200000000000000000000008D +:10B13000000000000000000000000000000000000F :10B1400000000000000000000000000000000000FF :10B1500000000000000000000000000000000000EF :10B1600000000000000000000000000000000000DF :10B1700000000000000000000000000000000000CF -:10B1800000000000000000000000000000001000AF -:10B19000100010001000000000000000000000007F +:10B1800000000000000000000000000000000000BF +:10B1900000000000000000000000000000000000AF :10B1A000000000000000000000000000000000009F :10B1B000000000000000000000000000000000008F :10B1C000000000000000000000000000000000007F :10B1D000000000000000000000000000000000006F :10B1E000000000000000000000000000000000005F -:10B1F000000000000000000000000000000000004F +:10B1F0000000000000000000000008000000000047 :10B20000000000000000000000000000000000003E -:10B21000000000000000000000000000000000002E +:10B210000000000000000000000008000000000026 :10B22000000000000000000000000000000000001E -:10B23000000000000000000000000000000000000E +:10B2300000000000000000000000000040000000CE :10B2400000000000000000000000000000000000FE :10B2500000000000000000000000000000000000EE :10B2600000000000000000000000000000000000DE @@ -52023,12 +52023,12 @@ :10B2900000000000000000000000000000000000AE :10B2A000000000000000000000000000000000009E :10B2B000000000000000000000000000000000008E -:10B2C000000000000000000000000000000000007E +:10B2C000000000000000000000000000000010006E :10B2D000000000000000000000000000000000006E :10B2E000000000000000000000000000000000005E -:10B2F000000000000000000000000004000000004A -:10B300000000000000000000000000040000000039 -:10B31000000000000000000000000100000000002C +:10B2F000000000000000000000000000000000004E +:10B30000000000000000000000000000000000003D +:10B31000000000000000000000000000000000002D :10B32000000000000000000000000000000000001D :10B33000000000000000000000000000000000000D :10B3400000000000000000000000000000000000FD @@ -52036,7 +52036,7 @@ :10B3600000000000000000000000000000000000DD :10B3700000000000000000000000000000000000CD :10B3800000000000000000000000000000000000BD -:10B39000000000000000000000000000200000008D +:10B3900000000000000000000000000000000000AD :10B3A000000000000000000000000000000000009D :10B3B000000000000000000000000000000000008D :10B3C000000000000000000000000000000000007D @@ -52060,7 +52060,7 @@ :10B4E000000000000000000000000000000000005C :10B4F000000000000000000000000000000000004C :10B50000000000000000000000000000000000003B -:10B510000000000000000200000000000000000029 +:10B51000000000000000000000000000000000002B :10B52000000000000000000000000000000000001B :10B53000000000000000000000000000000000000B :10B5400000000000000000000000000000000000FB @@ -52077,7 +52077,7 @@ :10B5F000000000000000000000000000000000004B :10B60000000000000000000000000000000000003A :10B61000000000000000000000000000000000002A -:10B620000100000000000000000000000000000019 +:10B62000000000000000000000000000000000001A :10B63000000000000000000000000000000000000A :10B6400000000000000000000000000000000000FA :10B6500000000000000000000000000000000000EA @@ -52085,7 +52085,7 @@ :10B6700000000000000000000000000000000000CA :10B6800000000000000000000000000000000000BA :10B6900000000000000000000000000000000000AA -:10B6A0000000110000210000000000000000000068 +:10B6A000000000000000000000000000000000009A :10B6B000000000000000000000000000000000008A :10B6C000000000000000000000000000000000007A :10B6D000000000000000000000000000000000006A @@ -52093,7 +52093,7 @@ :10B6F000000000000000000000000000000000004A :10B700000000000000000000000000000000000039 :10B710000000000000000000000000000000000029 -:10B7200000000000002000001140000000000000A8 +:10B720000000000000000000000000000000000019 :10B730000000000000000000000000000000000009 :10B7400000000000000000000000000000000000F9 :10B7500000000000000000000000000000000000E9 @@ -52101,7 +52101,7 @@ :10B7700000000000000000000000000000000000C9 :10B7800000000000000000000000000000000000B9 :10B7900000000000000000000000000000000000A9 -:10B7A0000000000000000001000001010000000096 +:10B7A0000000000000000000000000000000000099 :10B7B0000000000000000000000000000000000089 :10B7C0000000000000000000000000000000000079 :10B7D0000000000000000000000000000000000069 @@ -52109,7 +52109,7 @@ :10B7F0000000000000000000000000000000000049 :10B800000000000000000000000000000000000038 :10B810000000000000000000000000000000000028 -:10B820000000000000000000000004000001010012 +:10B820000000000000000000000000000000000018 :10B830000000000000000000000000000000000008 :10B8400000000000000000000000000000000000F8 :10B8500000000000000000000000000000000000E8 @@ -52117,15 +52117,15 @@ :10B8700000000000000000000000000000000000C8 :10B8800000000000000000000000000000000000B8 :10B8900000000000000000000000000000000000A8 -:10B8A0000000000000000000000000008000000810 -:10B8B0002000000000000000000000000000000068 +:10B8A0000000000000000000000000000000000098 +:10B8B0000000000000000000000000000000000088 :10B8C0000000000000000000000000000000000078 :10B8D0000000000000000000000000000000000068 :10B8E0000000000000000000000000000000000058 :10B8F0000000000000000000000000000000000048 :10B900000000000000000000000000000000000037 :10B910000000000000000000000000000000000027 -:10B920000000000000000000000000000000110006 +:10B920000000000000000000000000000000000017 :10B930000000000000000000000000000000000007 :10B9400000000000000000000000000000000000F7 :10B9500000000000000000000000000000000000E7 @@ -52134,7 +52134,7 @@ :10B9800000000000000000000000000000000000B7 :10B9900000000000000000000000000000000000A7 :10B9A0000000000000000000000000000000000097 -:10B9B0000100000000000000000000000000000086 +:10B9B0000000000000000000000000000000000087 :10B9C0000000000000000000000000000000000077 :10B9D0000000000000000000000000000000000067 :10B9E0000000000000000000000000000000000057 @@ -52142,7 +52142,7 @@ :10BA00000000000000000000000000000000000036 :10BA10000000000000000000000000000000000026 :10BA20000000000000000000000000000000000016 -:10BA3000000000E000000000000000000000000026 +:10BA30000000000000000000000000000000000006 :10BA400000000000000000000000000000000000F6 :10BA500000000000000000000000000000000000E6 :10BA600000000000000000000000000000000000D6 @@ -52182,7 +52182,7 @@ :10BC800000000000000000000000000000000000B4 :10BC900000000000000000000000000000000000A4 :10BCA0000000000000000000000000000000000094 -:10BCB0000000000000000000000000000006000C72 +:10BCB0000000000000000000000000000000000084 :10BCC0000000000000000000000000000000000074 :10BCD0000000000000000000000000000000000064 :10BCE0000000000000000000000000000000000054 @@ -52190,8 +52190,8 @@ :10BD00000000000000000000000000000000000033 :10BD10000000000000000000000000000000000023 :10BD20000000000000000000000000000000000013 -:10BD30000000000000000000000000000000FF0004 -:10BD400000FF0000000000000000000000000000F4 +:10BD30000000000000000000000000000000000003 +:10BD400000000000000000000000000000000000F3 :10BD500000000000000000000000000000000000E3 :10BD600000000000000000000000000000000000D3 :10BD700000000000000000000000000000000000C3 @@ -52199,7 +52199,7 @@ :10BD900000000000000000000000000000000000A3 :10BDA0000000000000000000000000000000000093 :10BDB0000000000000000000000000000000000083 -:10BDC000FF0000FF00000000000000000000000075 +:10BDC0000000000000000000000000000000000073 :10BDD0000000000000000000000000000000000063 :10BDE0000000000000000000000000000000000053 :10BDF0000000000000000000000000000000000043 @@ -52207,7 +52207,7 @@ :10BE10000000000000000000000000000000000022 :10BE20000000000000000000000000000000000012 :10BE30000000000000000000000000000000000002 -:10BE40000000FF0000FF00000000000000000000F4 +:10BE400000000000000000000000000000000000F2 :10BE500000000000000000000000000000000000E2 :10BE600000000000000000000000000000000000D2 :10BE700000000000000000000000000000000000C2 @@ -52215,7 +52215,7 @@ :10BE900000000000000000000000000000000000A2 :10BEA0000000000000000000000000000000000092 :10BEB0000000000000000000000000000000000082 -:10BEC00000000000FF0000FF000000000000000074 +:10BEC0000000000000000000000000000000000072 :10BED0000000000000000000000000000000000062 :10BEE0000000000000000000000000000000000052 :10BEF0000000000000000000000000000000000042 @@ -52223,10 +52223,10 @@ :10BF10000000000000000000000000000000000021 :10BF20000000000000000000000000000000000011 :10BF30000000000000000000000000000000000001 -:10BF400000000000000000000000000000000000F1 +:10BF400000000000000004000000000000000000ED :10BF500000000000000000000000000000000000E1 :10BF600000000000000000000000000000000000D1 -:10BF700000000000000000000000000000000000C1 +:10BF70000000000000000000400000000000000081 :10BF800000000000000000000000000000000000B1 :10BF900000000000000000000000000000000000A1 :10BFA0000000000000000000000000000000000091 @@ -52237,16 +52237,16 @@ :10BFF0000000000000000000000000000000000041 :10C000000000000000000000000000000000000030 :10C010000000000000000000000000000000000020 -:10C020000000000000000000000000000000000010 -:10C0300000000000000000000000000008000000F8 +:10C0200000000000000000000000200000000000F0 +:10C030000000000000000000000000000000000000 :10C0400000000000000000000000000000000000F0 :10C0500000000000000000000000000000000000E0 -:10C0600000000000000000000000000000000000D0 +:10C0600000000000000000000000000020000000B0 :10C0700000000000000000000000000000000000C0 :10C0800000000000000000000000000000000000B0 :10C0900000000000000000000000000000000000A0 :10C0A0000000000000000000000000000000000090 -:10C0B000000000000200000000000000000000007E +:10C0B0000000000000000000000000000000000080 :10C0C0000000000000000000000000000000000070 :10C0D0000000000000000000000000000000000060 :10C0E0000000000000000000000000000000000050 @@ -52259,9 +52259,9 @@ :10C1500000000000000000000000000000000000DF :10C1600000000000000000000000000000000000CF :10C1700000000000000000000000000000000000BF -:10C1800000000000000000000000000000000000AF +:10C18000100000000000000000000000000000009F :10C19000000000000000000000000000000000009F -:10C1A000000000000000000000000000000000008F +:10C1A0000800000000000000000000000000000087 :10C1B000000000000000000000000000000000007F :10C1C000000000000000000000000000000000006F :10C1D000000000000000000000000000000000005F @@ -52271,7 +52271,7 @@ :10C21000000000000000000000000000000000001E :10C22000000000000000000000000000000000000E :10C2300000000000000000000000000000000000FE -:10C2400000000000000400000000000000000000EA +:10C2400000000000000000000000000000000000EE :10C2500000000000000000000000000000000000DE :10C2600000000000000000000000000000000000CE :10C2700000000000000000000000000000000000BE @@ -52296,7 +52296,7 @@ :10C3A000000000000000000000000000000000008D :10C3B000000000000000000000000000000000007D :10C3C000000000000000000000000000000000006D -:10C3D00000000000000000000000000000840000D9 +:10C3D000000000000000000000000000000000005D :10C3E000000000000000000000000000000000004D :10C3F000000000000000000000000000000000003D :10C40000000000000000000000000000000000002C @@ -52305,7 +52305,7 @@ :10C4300000000000000000000000000000000000FC :10C4400000000000000000000000000000000000EC :10C4500000000000000000000000000000000000DC -:10C4600000000000000000020000000000000000CA +:10C4600000000000000000000000000000000000CC :10C4700000000000000000000000000000000000BC :10C4800000000000000000000000000000000000AC :10C49000000000000000000000000000000000009C @@ -52482,25 +52482,25 @@ :10CF400000000000000000000000000000000000E1 :10CF500000000000000000000000000000000000D1 :10CF600000000000000000000000000000000000C1 -:10CF700000000000000200000000000000000000AF +:10CF700000000000000000000000000400000000AD :10CF800000000000000000000000000000000000A1 -:10CF90000000000000000000000000000000000091 +:10CF9000000000000000000000000004000000008D :10CFA0000000000000000000000000000000000081 -:10CFB0000000000000000000000000000000000071 +:10CFB000400000000000000000000000000400002D :10CFC0000000000000000000000000000000000061 :10CFD0000000000000000000000000000000000051 -:10CFE00000000000000000000000000082000200BD -:10CFF000020000000000000000000000020000002D -:10D00000000000000000000000000200000000001E +:10CFE0000000000000000000000000000000000041 +:10CFF0000000000000000000000000000000000031 +:10D000000000000000000000000000000000000020 :10D010000000000000000000000000000000000010 -:10D0200000000000000000000000000002000000FE +:10D020000000000000000000000000000000000000 :10D0300000000000000000000000000000000000F0 -:10D0400002000000000000000000000000000000DE +:10D0400000000200000000000000000000000000DE :10D0500000000000000000000000000000000000D0 :10D0600000000000000000000000000000000000C0 :10D0700000000000000000000000000000000000B0 :10D0800000000000000000000000000000000000A0 -:10D090000000000000000000040004000400040080 +:10D090000000000000000000000000000000000090 :10D0A0000000000000000000000000000000000080 :10D0B0000000000000000000000000000000000070 :10D0C0000000000000000000000000000000000060 @@ -52510,7 +52510,7 @@ :10D10000000000000000000000000000000000001F :10D11000000000000000000000000000000000000F :10D1200000000000000000000000000000000000FF -:10D1300000000000000000000000000000000000EF +:10D1300000000000000010000000000000000000DF :10D1400000000000000000000000000000000000DF :10D1500000000000000000000000000000000000CF :10D1600000000000000000000000000000000000BF @@ -52523,10 +52523,10 @@ :10D1D000000000000000000000000000000000004F :10D1E000000000000000000000000000000000003F :10D1F000000000000000000000000000000000002F -:10D20000000000000004000000000000000000001A +:10D20000000000000000000000000000000000001E :10D21000000000000000000000000000000000000E :10D2200000000000000000000000000000000000FE -:10D2300000000000000000000040000000000000AE +:10D2300000000000000000000000000000000000EE :10D2400000000000000000000000000000000000DE :10D2500000000000000000000000000000000000CE :10D2600000000000000000000000000000000000BE @@ -52716,8 +52716,8 @@ :10DDE0000000000000000000000000000000000033 :10DDF0000000000000000000000000000000000023 :10DE00000000000000000000000000000000000012 -:10DE10000000000000000000000000000000000002 -:10DE200000000000000000000000000000000000F2 +:10DE100000000000000000000000000000040000FE +:10DE200000020000000000000000000000000000F0 :10DE300000000000000000000000000000000000E2 :10DE400000000000000000000000000000000000D2 :10DE500000000000000000000000000000000000C2 @@ -52729,23 +52729,23 @@ :10DEB0000000000000000000000000000000000062 :10DEC0000000000000000000000000000000000052 :10DED0000000000000000000000000000000000042 -:10DEE0000000000000000000000000000000000032 +:10DEE00000000000400000000000000000000000F2 :10DEF0000000000000000000000000000000000022 :10DF00000000000000000000000000000000000011 :10DF10000000000000000000000000000000000001 -:10DF200004000200000000000000000000000000EB +:10DF200000000000000000000000000000000000F1 :10DF300000000000000000000000000000000000E1 :10DF400000000000000000000000000000000000D1 :10DF500000000000000000000000000000000000C1 -:10DF600000000200020000000000000000000200AB -:10DF7000000000000000020000000000000000009F +:10DF600000000000000000000000000000000000B1 +:10DF700000000000000000000000000000000000A1 :10DF80000000000000000000000000000000000091 -:10DF90000000000000000000000000000400040079 -:10DFA0000000000000000000000000000000000071 -:10DFB000000000000000000000000000000004005D -:10DFC0000000000000000000000000000000000051 +:10DF90000000000000000000000000000008000079 +:10DFA0000004000000000008000000000000000065 +:10DFB000000000000000000000000000000200005F +:10DFC000000000000000000200000000000000004F :10DFD0000000000000000000000000000000000041 -:10DFE000000002000000000000000000000000002F +:10DFE0000000000000000000000000000000000031 :10DFF0000000000000000000000000000000000021 :10E000000000000000000000000000000000000010 :10E010000000000000000000000000000000000000 @@ -52766,7 +52766,7 @@ :10E10000000000000000000000000000000000000F :10E1100000000000000000000000000000000000FF :10E1200000000000000000000000000000000000EF -:10E13000000000000000004000000000000000049B +:10E1300000000000000000000000000000000000DF :10E1400000000000000000000000000000000000CF :10E1500000000000000000000000000000000000BF :10E1600000000000000000000000000000000000AF @@ -52969,27 +52969,27 @@ :10EDB0000000000000000000000000000000000053 :10EDC0000000000000000000000000000000000043 :10EDD0000000000000000000000000000000000033 -:10EDE0000000000000000000000000000000000023 +:10EDE000000000040000000000000000000000001F :10EDF0000000000000000000000000000000000013 -:10EE00000000000000000000000000000000000002 +:10EE000000000004000000000000000000000000FE :10EE100000000000000000000000000000000000F2 -:10EE200000000000000000000000000000000000E2 +:10EE200000000000000400000000000000000000DE :10EE300000000000000000000000000000000000D2 -:10EE400000000000000000000000000000000000C2 +:10EE400000000000000400000000000000000000BE :10EE500000000000000000000000000000000000B2 :10EE600000000000000000000000000000000000A2 :10EE70000000000000000000000000000000000092 :10EE80000000000000000000000000000000000082 -:10EE90000000000000000000000000000000000072 +:10EE90000000000000000000000040000000000032 :10EEA0000000000000000000000000000000000062 :10EEB0000000000000000000000000000000000052 :10EEC0000000000000000000000000000000000042 :10EED0000000000000000000000000000000000032 -:10EEE0000000000000000000020000000000000020 +:10EEE0000000000000000000000000000000000022 :10EEF0000000000000000000000000000000000012 -:10EF000000000000000000000000020000000000FF -:10EF100000000200000000000000000000000000EF -:10EF20000000000004000400020082000000000055 +:10EF00000000000000000000000000000000000001 +:10EF100000000000000000000000000000000000F1 +:10EF200000000000000000000000000000000000E1 :10EF300000000000000000000000000000000000D1 :10EF400000000000000000000000000000000000C1 :10EF500000000000000000000000000000000000B1 @@ -52997,7 +52997,7 @@ :10EF70000000000000000000000000000000000091 :10EF80000000000000000000000000000000000081 :10EF90000000000000000000000000000000000071 -:10EFA0000000000004000000000004000000000059 +:10EFA0000000000000000000000000000000000061 :10EFB0000000000000000000000000000000000051 :10EFC0000000000000000000000000000000000041 :10EFD0000000000000000000000000000000000031 @@ -53018,7 +53018,7 @@ :10F0C0000000000000000000000000000000000040 :10F0D0000000000000000000000000000000000030 :10F0E0000000000000000000000000000000000020 -:10F0F0000000000000000000000000000040004090 +:10F0F0000000000000000000000000000000000010 :10F1000000000000000000000000000000000000FF :10F1100000000000000000000000000000000000EF :10F1200000000000000000000000000000000000DF @@ -53026,7 +53026,7 @@ :10F1400000000000000000000000000000000000BF :10F1500000000000000000000000000000000000AF :10F16000000000000000000000000000000000009F -:10F17000020000000000000000000000000000008D +:10F17000000000000000000000000000000000008F :10F18000000000000000000000000000000000007F :10F19000000000000000000000000000000000006F :10F1A000000000000000000000000000000000005F @@ -53059,7 +53059,7 @@ :10F3500000000000000000000000000000000000AD :10F36000000000000000000000000000000000009D :10F37000000000000000000000000000000000008D -:10F380000000000000000000000400000000000079 +:10F38000000000000000000000000000000000007D :10F39000000000000000000000000000000000006D :10F3A000000000000000000000000000000000005D :10F3B000000000000000000000000000000000004D @@ -53213,7 +53213,7 @@ :10FCF0000000000000000000000000000000000004 :10FD000000000000000000000000000000000000F3 :10FD100000000000000000000000000000000000E3 -:10FD200000000000000000000000000000000000D3 +:10FD200000000000000400040000000000000000CB :10FD300000000000000000000000000000000000C3 :10FD400000000000000000000000000000000000B3 :10FD500000000000000000000000000000000000A3 @@ -53223,21 +53223,21 @@ :10FD90000000000000000000000000000000000063 :10FDA0000000000000000000000000000000000053 :10FDB0000000000000000000000000000000000043 -:10FDC0000000000000000000000000000000000033 +:10FDC00000000000000000000000000040000000F3 :10FDD0000000000000000000000000000000000023 :10FDE0000000000000000000000000000000000013 :10FDF0000000000000000000000000000000000003 :10FE000000000000000000000000000000000000F2 -:10FE100000000000000000000400000000000000DE -:10FE200000000000040004000000000000000000CA -:10FE300002000000000000000000000000000000C0 -:10FE400000000000000004000000000000000000AE +:10FE100000000000000000000000000000000200E0 +:10FE200000000000000000000000000000000000D2 +:10FE300000000000000000000000000000000000C2 +:10FE400000000000000000000000000000000000B2 :10FE500000000000000000000000000000000000A2 -:10FE6000000000000000000000000400000000008E +:10FE60000200000000000000000000000000000090 :10FE70000000000000000000000000000000000082 :10FE80000000000000000000000000000000000072 :10FE90000000000000000000000000000000000062 -:10FEA0000000000000000000000000000000000052 +:10FEA0000000000000000000000200000000000050 :10FEB0000000000000000000000000000000000042 :10FEC0000000000000000000000000000000000032 :10FED0000000000000000000000000000000000022 @@ -53271,7 +53271,7 @@ :100080000000000000000000000000000000000070 :100090000000000000000000000000000000000060 :1000A0000000000000000000000000000000000050 -:1000B00000002000400000000000000000000000E0 +:1000B0000000000000000000000000000000000040 :1000C0000000000000000000000000000000000030 :1000D0000000000000000000000000000000000020 :1000E0000000000000000000000000000000000010 @@ -53303,8 +53303,8 @@ :10028000000000000000000000000000000000006E :10029000000000000000000000000000000000005E :1002A000000000000000000000000000000000004E -:1002B0000000000000000000000000000000090035 -:1002C000000020000000000000000000000000000E +:1002B000000000000000000000000000000000003E +:1002C000000000000000000000000000000000002E :1002D000000000000000000000000000000000001E :1002E000000000000000000000000000000000000E :1002F00000000000000000000000000000000000FE @@ -53466,17 +53466,17 @@ :100CB0000000000000000000000000000000000034 :100CC0000000000000000000000000000000000024 :100CD0000000000000000000000000000000000014 -:100CE0000000000000000080000000000000000084 +:100CE0000000000000000000000000000004000000 :100CF00000000000000000000000000000000000F4 -:100D000000000000000000000000000000000000E3 +:100D000000000000000000000000000000040000DF :100D100000000000000000000000000000000000D3 -:100D200000000000000000000000000000000000C3 +:100D200000000000000000000000000000000004BF :100D300000000000000000000000000000000000B3 -:100D400000000000000000000000000000000000A3 +:100D4000000000000000000000000000000000049F :100D50000000000000000000000000000000000093 -:100D60000000000000000000004000000000000043 +:100D60000000000000000000000000000000000083 :100D70000000000000000000000000000000000073 -:100D80000000000000000000000000000000000063 +:100D80000000400000000000000000000000000023 :100D90000000000000000000000000000000000053 :100DA0000000000000000000000000000000000043 :100DB0000000000000000000000000000000000033 @@ -53486,26 +53486,26 @@ :100DF00000000000000000000000000000000000F3 :100E000000000000000000000000000000000000E2 :100E100000000000000000000000000000000000D2 -:100E200000000000000000000000000004000000BE -:100E3000000004000040000000000000000000006E +:100E200000000000000000000000000000000000C2 +:100E300000000000000002000000000000000000B0 :100E400000000000000000000000000000000000A2 -:100E50000000000000000000000000000000000092 -:100E60000000000000000000000000000000000082 +:100E5000000000000002000000000000000000028E +:100E6000000000000000000000000000000000047E :100E70000000000000000000000000000000000072 :100E80000000000000000000000000000000000062 -:100E900000000000000000840000000000000000CE -:100EA000000000000008000000000000000000003A -:100EB000000000000008000000000000000000002A -:100EC000000000000084000000000000000000009E -:100ED000000000000004000000000000000000000E +:100E90000000000000000000000000000000000052 +:100EA0000000000000000000000000000000000042 +:100EB0000000000000000000000000000000000032 +:100EC0000000000000000000000000000000000022 +:100ED0000000000000000000000000000000000012 :100EE0000000000000000000000000000000000002 -:100EF00000000000000000000000000000050011DC -:100F000000030000002100000000000000000000BD -:100F100000000000000800000000000000000000C9 -:100F200000000000000000000003000000000000BE +:100EF00000000000000000000000000000000000F2 +:100F000000000000000000000000000000000000E1 +:100F100000000000000000000000000000000000D1 +:100F200000000000000000000000000000000000C1 :100F300000000000000000000000000000000000B1 :100F400000000000000000000000000000000000A1 -:100F50000000000000000020000000000000000071 +:100F50000000000000000000000000000000000091 :100F60000000000000000000000000000000000081 :100F70000000000000000000000000000000000071 :100F80000000000000000000000000000000000061 @@ -53513,12 +53513,12 @@ :100FA0000000000000000000000000000000000041 :100FB0000000000000000000000000000000000031 :100FC0000000000000000000000000000000000021 -:100FD0000000000000000000000008000000000009 -:100FE00000000000000000008240004000400000BF -:100FF00000000000000000000040000000000000B1 -:1010000000000000000000400000000000000000A0 +:100FD0000000000000000000000000000000000011 +:100FE0000000000000000000000000000000000001 +:100FF00000000000000000000000000000000000F1 +:1010000000000000000000000000000000000000E0 :1010100000000000000000000000000000000000D0 -:101020000000000000000000004000000000000080 +:1010200000000000000000000000000000000000C0 :1010300000000000000000000000000000000000B0 :1010400000000000000000000000000000000000A0 :101050000000000000000000000000000000000090 @@ -53529,13 +53529,13 @@ :1010A0000000000000000000000000000000000040 :1010B0000000000000000000000000000000000030 :1010C0000000000000000000000000000000000020 -:1010D000000000000000000000000000000004000C -:1010E000000000000000000000000000C000000040 -:1010F0000000C00000000000000000000000000828 -:1011000000000000000000000000000000000003DC -:10111000000000000000000000000000004000008F +:1010D0000000000000000000000000000000000010 +:1010E0000000000000000000000000000000000000 +:1010F00000000000000000000000000000000000F0 +:1011000000000000000000000000000000000000DF +:1011100000000000000000000000000000000000CF :1011200000000000000000000000000000000000BF -:10113000000000000000000000000000000000208F +:1011300000000000000000000000000000000000AF :10114000000000000000000000000000000000009F :10115000000000000000000000000000000000008F :10116000000000000000000000000000000000007F @@ -53547,9 +53547,9 @@ :1011C000000000000000000000000000000000001F :1011D000000000000000000000000000000000000F :1011E00000000000000000000000000000000000FF -:1011F000000082000000000000000000000000006D +:1011F00000000000000000000000000000000000EF :1012000000000000000000000000000000000000DE -:1012100000080000000000000000000000000000C6 +:1012100000000000000000000000000000000000CE :1012200000000000000000000000000000000000BE :1012300000000000000000000000000000000000AE :10124000000000000000000000000000000000009E @@ -53563,8 +53563,8 @@ :1012C000000000000000000000000000000000001E :1012D000000000000000000000000000000000000E :1012E00000000000000000000000000000000000FE -:1012F00000000000000000000000000000004004AA -:101300000090008402840000000000000000000043 +:1012F00000000000000000000000000000000000EE +:1013000000000000000000000000000000000000DD :1013100000000000000000000000000000000000CD :1013200000000000000000000000000000000000BD :1013300000000000000000000000000000000000AD @@ -53572,7 +53572,7 @@ :10135000000000000000000000000000000000008D :10136000000000000000000000000000000000007D :10137000000000000000000000000000000000006D -:10138000808000000000000000000000000000005D +:10138000000000000000000000000000000000005D :10139000000000000000000000000000000000004D :1013A000000000000000000000000000000000003D :1013B000000000000000000000000000000000002D @@ -53580,7 +53580,7 @@ :1013D000000000000000000000000000000000000D :1013E00000000000000000000000000000000000FD :1013F00000000000000000000000000000000000ED -:101400000000000000C10004000000000000000017 +:1014000000000000000000000000000000000000DC :1014100000000000000000000000000000000000CC :1014200000000000000000000000000000000000BC :1014300000000000000000000000000000000000AC @@ -53588,7 +53588,7 @@ :10145000000000000000000000000000000000008C :10146000000000000000000000000000000000007C :10147000000000000000000000000000000000006C -:10148000000000000200A08284218482000000008D +:10148000000000000000000000000000000000005C :10149000000000000000000000000000000000004C :1014A000000000000000000000000000000000003C :1014B000000000000000000000000000000000002C @@ -53596,7 +53596,7 @@ :1014D000000000000000000000000000000000000C :1014E00000000000000000000000000000000000FC :1014F00000000000000000000000000000000000EC -:10150000000000000000029000108288408400006B +:1015000000000000000000000000000000000000DB :1015100000000000000000000000000000000000CB :1015200000000000000000000000000000000000BB :1015300000000000000000000000000000000000AB @@ -53604,7 +53604,7 @@ :10155000000000000000000000000000000000008B :10156000000000000000000000000000000000007B :10157000000000000000000000000000000000006B -:10158000000000000000000080000080000000005B +:10158000000000000000000000000000000000005B :10159000000000000000000000000000000000004B :1015A000000000000000000000000000000000003B :1015B000000000000000000000000000000000002B @@ -53620,8 +53620,8 @@ :10165000000000000000000000000000000000008A :10166000000000000000000000000000000000007A :10167000000000000000000000000000000000006A -:1016800000000000000000000000000002008802CE -:1016900008A084000000000000000000000000001E +:10168000000000000000000000000000000000005A +:10169000000000000000000000000000000000004A :1016A000000000000000000000000000000000003A :1016B000000000000000000000000000000000002A :1016C000000000000000000000000000000000001A @@ -53637,7 +53637,7 @@ :101760000000000000000000000000000000000079 :101770000000000000000000000000000000000069 :101780000000000000000000000000000000000059 -:1017900017171717EB4105050000000000000000B7 +:101790000000000000000000000000000000000049 :1017A0000000000000000000000000000000000039 :1017B0000000000000000000000000000000000029 :1017C0000000000000000000000000000000000019 @@ -53645,7 +53645,7 @@ :1017E00000000000000000000000000000000000F9 :1017F00000000000000000000000000000000000E9 :1018000000000000000000000000000000000000D8 -:101810000000FFC33C00EB41AFAF00000000000040 +:1018100000000000000000000000000000000000C8 :1018200000000000000000000000000000000000B8 :1018300000000000000000000000000000000000A8 :101840000000000000000000000000000000000098 @@ -53653,7 +53653,7 @@ :101860000000000000000000000000000000000078 :101870000000000000000000000000000000000068 :101880000000000000000000000000000000000058 -:101890000000000002320E3E00AAF0C3000000006B +:101890000000000000000000000000000000000048 :1018A0000000000000000000000000000000000038 :1018B0000000000000000000000000000000000028 :1018C0000000000000000000000000000000000018 @@ -53661,7 +53661,7 @@ :1018E00000000000000000000000000000000000F8 :1018F00000000000000000000000000000000000E8 :1019000000000000000000000000000000000000D7 -:10191000000000000000C2F2CEFEFFAAF0C30000EB +:1019100000000000000000000000000000000000C7 :1019200000000000000000000000000000000000B7 :1019300000000000000000000000000000000000A7 :101940000000000000000000000000000000000097 @@ -53669,7 +53669,7 @@ :101960000000000000000000000000000000000077 :101970000000000000000000000000000000000067 :101980000000000000000000000000000000000057 -:1019900000000000000000000000000000C0000087 +:101990000000000000000000000000000000000047 :1019A0000000000000000000000000000000000037 :1019B0000000000000000000000000000000000027 :1019C0000000000000000000000000000000000017 @@ -53709,17 +53709,17 @@ :101BE00000000000000000000000000000000000F5 :101BF00000000000000000000000000000000000E5 :101C000000000000000000000000000000000000D4 -:101C100000000000000000000000000000000000C4 -:101C200000000000000000000000000000000000B4 -:101C300000000000000000000000000000000000A4 +:101C100000040000000000000000000000000000C0 +:101C200000000000000000000000000000000002B2 +:101C300000020000000000000000000000000000A2 :101C40000000000000000000000000000000000094 :101C50000000000000000000000000000000000084 :101C60000000000000000000000000000000000074 :101C70000000000000000000000000000000000064 :101C80000000000000000000000000000000000054 -:101C90000000000000000000000000000000000044 -:101CA0000000000000000000000000000000000034 -:101CB0000000000000000000000000000000000024 +:101C90000000000000000002000000000000000042 +:101CA0000000000000000000000000000002000032 +:101CB00000000000000040020000000000000000E2 :101CC0000000000000000000000000000000000014 :101CD0000000000000000000000000000000000004 :101CE00000000000000000000000000000000000F4 @@ -53733,10 +53733,10 @@ :101D60000000000000000000000000000000000073 :101D70000000000000000000000000000000000063 :101D80000000000000000000000000000000000053 -:101D90000000000000000000000000000000000043 +:101D9000000200020004000000000000000000003B :101DA0000000000000000000000000000000000033 :101DB0000000000000000000000000000000000023 -:101DC0000000000000000000000000000000008291 +:101DC0000000000000000000000000000000000013 :101DD0000000000000000000000000000000000003 :101DE00000000000000000000000000000000000F3 :101DF00000000000000000000000000000000000E3 @@ -53750,19 +53750,19 @@ :101E70000000000000000000000000000000000062 :101E80000000000000000000000000000000000052 :101E90000000000000000000000000000000000042 -:101EA00000000000000000004100000000000000F1 +:101EA0000000000000000000000000000000000032 :101EB0000000000000000000000000000000000022 :101EC0000000000000000000000000000000000012 :101ED0000000000000000000000000000000000002 :101EE00000000000000000000000000000000000F2 :101EF00000000000000000000000000000000000E2 :101F000000000000000000000000000000000000D1 -:101F10000000000000000000000000000040004041 +:101F100000000000000000000000000000000000C1 :101F200000000000000000000000000000000000B1 :101F300000000000000000000000000000000000A1 :101F40000000000000000000000000000000000091 -:101F50000000000000000000000000000000004041 -:101F60000040000000000000000000000000000031 +:101F50000000000000000000000000000000000081 +:101F60000000000000000000000000000000000071 :101F70000000000000000000000000000000000061 :101F80000000000000000000000000000000000051 :101F90000000000000000000000000000000000041 @@ -53770,11 +53770,11 @@ :101FB0000000000000000000000000000000000021 :101FC0000000000000000000000000000000000011 :101FD0000000000000000000000000000000000001 -:101FE00000000000000000000000000000400000B1 -:101FF00000000000004000000000000000000000A1 +:101FE00000000000000000000000000000000000F1 +:101FF00000000000000000000000000000000000E1 :1020000000000000000000000000000000000000D0 :1020100000000000000000000000000000000000C0 -:102020000000000000000000900000000000000020 +:1020200000000000000000000000000000000000B0 :1020300000000000000000000000000000000000A0 :102040000000000000000000000000000000000090 :102050000000000000000000000000000000000080 @@ -53783,8 +53783,8 @@ :102080000000000000000000000000000000000050 :102090000000000000000000000000000000000040 :1020A0000000000000000000000000000000000030 -:1020B00000000000090000000004110800000000FA -:1020C000000000000200000000000000000000000E +:1020B0000000000000000000000000000000000020 +:1020C0000000000000000000000000000000000010 :1020D0000000000000000000000000000000000000 :1020E00000000000000000000000000000000000F0 :1020F00000000000000000000000000000000000E0 @@ -53904,71 +53904,71 @@ :1028100000000000000000000000000000000000B8 :1028200000000000000000000000000000000000A8 :102830000000000000000000000000000000000098 -:102840000000000000000000000000008200000006 +:10284000000400000002000400040000000000007A :102850000000000000000000000000000000000078 -:102860000000000000000000000000002000000048 -:102870000000000000000000000000000000000058 -:1028800000000000000000008200000400000000C2 +:102860000000000000020000000400000000000062 +:102870000000000000000000000000010000000057 +:102880000000000000000000000000040000000044 :102890000000000000000000000000000000000038 -:1028A0000000000000000000200000000000000008 +:1028A0000000000000000000000000040000000024 :1028B0000000000000000000000000000000000018 :1028C0000000000000000000000000000000000008 -:1028D00000000000000000000000000000000000F8 +:1028D00000000000000000000000000000004000B8 :1028E00000000000000000000000000000000000E8 :1028F00000000000000000000000000000000000D8 :1029000000000000000000000000000000000000C7 :1029100000000000000000000000000000000000B7 :1029200000000000000000000000000000000000A7 :102930000000000000000000000000000000000097 -:102940000000000000000000000000000000004047 -:102950000041000000000000000000000000000036 +:102940000000008000800000000000000000000087 +:102950000000000000000000000000000000000077 :102960000000000000000000000000000000000067 -:102970000040000000000000000000000000000017 -:1029800000000000000000000000000900410000FD -:102990000010000000000000000000000000000027 +:102970000000000000000000000000000000000057 +:102980000000000000000000000000000000000047 +:102990000000000000000000000000000000000037 :1029A0000000000000000000000000000000000027 :1029B0000000000000000000000000000000000017 -:1029C000000000000000000000000000000000C047 -:1029D00003C000080000000000000000000000C06C -:1029E00000000000000000000000000000000000E7 -:1029F00000000208000000000000000000000000CD +:1029C00000000000000400200002000000000000E1 +:1029D00000000000000000000000000000000000F7 +:1029E00000004000000000000000000000000000A7 +:1029F00000000000000000000000000000000000D7 :102A000000000000000000000000000000000000C6 -:102A10000000080011880000000000000000000015 +:102A100000000000000000000000000000000000B6 :102A200000000000000000000000000000000000A6 -:102A30000004000000000000000000000000000092 -:102A40000000000000000000000000000000000086 +:102A30000000000000000000000000000000000096 +:102A40000000000000200000000000000000000066 :102A50000000000000000000000000000000000076 -:102A60004000000000000000000000000000000026 -:102A70000040000000000000000000000000000016 +:102A60000000000000000000000000000000000066 +:102A70000000000000000000000000000000000056 :102A80000000000000000000000000000000000046 :102A90000000000000000000000000000000000036 :102AA0000000000000000000000000000000000026 :102AB0000000000000000000000000000000000016 -:102AC0000000000000000000000000000000000006 +:102AC0000000000000000001000000000000000005 :102AD00000000000000000000000000000000000F6 :102AE00000000000000000000000000000000000E6 :102AF00000000000000000000000000000000000D6 -:102B00000000000000000000000000000084000041 +:102B000000000000000000000000000000000000C5 :102B100000000000000000000000000000000000B5 :102B200000000000000000000000000000000000A5 :102B30000000000000000000000000000000000095 -:102B40000000000000000000000000000000000085 -:102B50000000000010040040000800000000000019 -:102B60000000000000040000000000000000000061 -:102B7000000000000000000000080000000000004D +:102B40000000000000000002008000000000000003 +:102B50000000000000000000000000000000000075 +:102B60000000000000000000000000000000000065 +:102B70000000000000000000000000000000000055 :102B80000000000000000000000000000000000045 -:102B90000000004100400040001000410000000023 +:102B90000000000000000000000000000000000035 :102BA0000000000000000000000000000000000025 -:102BB0000000000000000008000000000008000005 -:102BC0000000000000000000000000000000000005 +:102BB0000000000000000000000000000000000015 +:102BC00000000000000000000000000440000000C1 :102BD00000000000000000000000000000000000F5 :102BE00000000000000000000000000000000000E5 :102BF00000000000000000000000000000000000D5 :102C000000000000000000000000000000000000C4 -:102C100000000000000000000000020000000000B2 +:102C100000000000000000000000000000000000B4 :102C200000000000000000000000000000000000A4 :102C30000000000000000000000000000000000094 -:102C40000000000000000000000000000000000084 +:102C40000000000000000000000000000400000080 :102C50000000000000000000000000000000000074 :102C60000000000000000000000000000000000064 :102C70000000000000000000000000000000000054 @@ -53976,9 +53976,9 @@ :102C90000000000000000000000000000000000034 :102CA0000000000000000000000000000000000024 :102CB0000000000000000000000000000000000014 -:102CC0000000000000000000000000000000000004 -:102CD00000000000000000000000004000000000B4 -:102CE0000000000000000000000003A00000000041 +:102CC0000000000000000000000000000000800084 +:102CD00000000000000000000000000000000000F4 +:102CE00000000000000000000000000000000000E4 :102CF00000000000000000000000000000000000D4 :102D000000000000000000000000000000000000C3 :102D100000000000000000000000000000000000B3 @@ -53989,19 +53989,19 @@ :102D60000000000000000000000000000000000063 :102D70000000000000000000000000000000000053 :102D80000000000000000000000000000000000043 -:102D9000000000000000000000000000000000082B +:102D90000000000000000000000000000000000033 :102DA0000000000000000000000000000000000023 :102DB0000000000000000000000000000000000013 :102DC0000000000000000000000000000000000003 :102DD00000000000000000000000000000000000F3 -:102DE00020002000000000000000000000000000A3 -:102DF00000000000000000000000000000040000CF -:102E00000500084000000000000002000000000073 -:102E10000000000000000000000000000200200090 -:102E2000000000000800000000000000000000009A -:102E3000000000000000000000000000000008008A +:102DE00000000000000000000000000000000000E3 +:102DF00000000000000000000000000000000000D3 +:102E000000000000000000000000000000000000C2 +:102E100000000000000000000000000000000000B2 +:102E200000000000000000000000000000000000A2 +:102E30000000000000000000000000000000000092 :102E40000000000000000000000000000000000082 -:102E50000000000000000000000000000000000072 +:102E5000000002A090200090880000000000000008 :102E60000000000000000000000000000000000062 :102E70000000000000000000000000000000000052 :102E80000000000000000000000000000000000042 @@ -54009,7 +54009,7 @@ :102EA0000000000000000000000000000000000022 :102EB0000000000000000000000000000000000012 :102EC0000000000000000000000000000000000002 -:102ED00000000000000000000000000000000000F2 +:102ED00000000000808080004000800000000000B2 :102EE00000000000000000000000000000000000E2 :102EF00000000000000000000000000000000000D2 :102F000000000000000000000000000000000000C1 @@ -54017,7 +54017,7 @@ :102F200000000000000000000000000000000000A1 :102F30000000000000000000000000000000000091 :102F40000000000000000000000000000000000081 -:102F50000000000000000000000000000000000071 +:102F5000000000000000008000218005809100003A :102F60000000000000000000000000000000000061 :102F70000000000000000000000000000000000051 :102F80000000000000000000000000000000000041 @@ -54025,7 +54025,7 @@ :102FA0000000000000000000000000000000000021 :102FB0000000000000000000000000000000000011 :102FC0000000000000000000000000000000000001 -:102FD00000000000000000000000000000000000F1 +:102FD000000000000000000040C00001A001828944 :102FE00000000000000000000000000000000000E1 :102FF00000000000000000000000000000000000D1 :1030000000000000000000000000000000000000C0 @@ -54033,24 +54033,24 @@ :1030200000000000000000000000000000000000A0 :103030000000000000000000000000000000000090 :103040000000000000000000000000000000000080 -:103050000000000000000000000000000000000070 -:103060000000000000000000000000000000000060 +:103050000000000000000000000040020008001016 +:10306000040000000000000000000000000000005C :103070000000000000000000000000000000000050 :103080000000000000000000000000000000000040 :103090000000000000000000000000000000000030 :1030A0000000000000000000000000000000000020 :1030B0000000000000000000000000000000000010 :1030C0000000000000000000000000000000000000 -:1030D00000000000000000000000000000000000F0 -:1030E00000000000000000000000000000000000E0 +:1030D0000000000000000000000000000080000070 +:1030E0000000800000000000000000000000000060 :1030F00000000000000000000000000000000000D0 :1031000000000000000000000000000000000000BF :1031100000000000000000000000000000000000AF :10312000000000000000000000000000000000009F :10313000000000000000000000000000000000008F :10314000000000000000000000000000000000007F -:10315000000000000000000000000000000000006F -:10316000000000000000000000000000000000005F +:10315000000000000000000000000000000041101E +:10316000A1409000030000000000000000000000EB :10317000000000000000000000000000000000004F :10318000000000000000000000000000000000003F :10319000000000000000000000000000000000002F @@ -54058,7 +54058,7 @@ :1031B000000000000000000000000000000000000F :1031C00000000000000000000000000000000000FF :1031D00000000000000000000000000000000000EF -:1031E00000000000000000000000000000000000DF +:1031E00011000490044020000000000000000000D6 :1031F00000000000000000000000000000000000CF :1032000000000000000000000000000000000000BE :1032100000000000000000000000000000000000AE @@ -54066,7 +54066,7 @@ :10323000000000000000000000000000000000008E :10324000000000000000000000000000000000007E :10325000000000000000000000000000000000006E -:10326000000000000000000000000000000000005E +:103260000000000000E00700600000000000000017 :10327000000000000000000000000000000000004E :10328000000000000000000000000000000000003E :10329000000000000000000000000000000000002E @@ -54074,7 +54074,7 @@ :1032B000000000000000000000000000000000000E :1032C00000000000000000000000000000000000FE :1032D00000000000000000000000000000000000EE -:1032E00000000000000000000000000000000000DE +:1032E00000000000000C00FC0119011900000000A2 :1032F00000000000000000000000000000000000CE :1033000000000000000000000000000000000000BD :1033100000000000000000000000000000000000AD @@ -54082,7 +54082,7 @@ :10333000000000000000000000000000000000008D :10334000000000000000000000000000000000007D :10335000000000000000000000000000000000006D -:10336000000000000000000000000000000000005D +:10336000000000000000FF0CFFFC677F677F00008B :10337000000000000000000000000000000000004D :10338000000000000000000000000000000000003D :10339000000000000000000000000000000000002D @@ -54098,24 +54098,24 @@ :10343000000000000000000000000000000000008C :10344000000000000000000000000000000000007C :10345000000000000000000000000000000000006C -:10346000000000000000000000000000000000005C -:10347000000000000000000000000000000000004C +:1034600000000000000000000000F6F60606DB4247 +:10347000FF660000000000000000000000000000E7 :10348000000000000000000000000000000000003C :10349000000000000000000000000000000000002C :1034A000000000000000000000000000000000001C :1034B000000000000000000000000000000000000C :1034C00000000000000000000000000000000000FC :1034D00000000000000000000000000000000000EC -:1034E00000000000000000000000000000000000DC -:1034F00000000000000000000000000000000000CC +:1034E000000000000000000000000000F0FF000FDE +:1034F0009900BD2400000000000000000000000052 :1035000000000000000000000000000000000000BB :1035100000000000000000000000000000000000AB :10352000000000000000000000000000000000009B :10353000000000000000000000000000000000008B :10354000000000000000000000000000000000007B :10355000000000000000000000000000000000006B -:10356000000000000000000000000000000000005B -:10357000000000000000000000000000000000004B +:1035600000000000000000000000000000000061FA +:10357000000D000D00000000000000000000000031 :10358000000000000000000000000000000000003B :10359000000000000000000000000000000000002B :1035A000000000000000000000000000000000001B @@ -54123,7 +54123,7 @@ :1035C00000000000000000000000000000000000FB :1035D00000000000000000000000000000000000EB :1035E00000000000000000000000000000000000DB -:1035F00000000000000000000000000000000000CB +:1035F0007D28AFAF000000000000000000000000C8 :1036000000000000000000000000000000000000BA :1036100000000000000000000000000000000000AA :10362000000000000000000000000000000000009A @@ -54131,7 +54131,7 @@ :10364000000000000000000000000000000000007A :10365000000000000000000000000000000000006A :10366000000000000000000000000000000000005A -:10367000000000000000000000000000000000004A +:1036700000007D280505000000000000000000009B :10368000000000000000000000000000000000003A :10369000000000000000000000000000000000002A :1036A000000000000000000000000000000000001A @@ -54155,80 +54155,80 @@ :1037C00000000000000000000000000000000000F9 :1037D00000000000000000000000000000000000E9 :1037E00000000000000000000000000000000000D9 -:1037F00000000000000000000000000002000000C7 -:1038000000000000000000000000000000000000B8 -:1038100000000000020000000000000000000000A6 -:103820000000000000000000000002000000000393 -:103830000000000000000000000000000000000088 -:1038400082000000000000000000000000000200F4 -:1038500000000000000000000000880000000000E0 -:1038600000008800000000000000000000002000B0 -:103870000000000000000000000000000000000048 -:103880000000000000000000000000000000000038 -:103890000000000000000000000000000000000028 +:1037F00000000000000000000000000200000000C7 +:10380000200002002000200420000080000420048A +:1038100000000000000000000000000000000000A8 +:103820000000000000000000200000000000200058 +:103830000000000000000000000100000000000087 +:103840000000400002000000000020000000000016 +:103850002000000000000000000000000000000048 +:1038600000002000200000000000200000000000F8 +:103870002000000000000000000000000000000028 +:103880000000000000000000000100000004000033 +:1038900000010000410000000000000000000000E6 :1038A0000000000000000000000000000000000018 :1038B0000000000000000000000000000000000008 :1038C00000000000000000000000000000000000F8 :1038D00000000000000000000000000000000000E8 :1038E00000000000000000000000000000000000D8 :1038F00000000000000000000000000000000000C8 -:1039000000000000000000000000000000000000B7 +:103900000080000000000000000000000000010036 :1039100000000000000000000000000000000000A7 :103920000000000000000000000000000000000097 :103930000000000000000000000000000000000087 -:103940000000000000410000000000000000000036 -:103950000000004000000000000000000000000027 +:103940000000000000000000000000000000000077 +:103950000000000000000000000000000000000067 :103960000000000000000000000000000000000057 -:103970000000000000000000000000000000000047 -:103980000000000000000000000000000000000037 -:10399000000000000084008400000000000000001F -:1039A0000000000000000000000000000000000017 +:103970000000000000000000000000000000000443 +:10398000000000040000008400000084000000002B +:1039900020000900000000000000000000040000FA +:1039A00000000000000000000000200020000000D7 :1039B0000000000000000000000000000000000007 -:1039C000000000000000000003C000000000000034 -:1039D000000000000000000000A000000000000047 +:1039C00000000000000000000000000000000000F7 +:1039D00000000000000000000000000000000000E7 :1039E00000000000000000000000000000000000D7 :1039F00000000000000000000000000000000000C7 -:103A000000000000000000000000000000000000B6 -:103A10000000000000000000000000000000900016 -:103A20000000000000000002000200000000000092 +:103A00000000000000000000000000000040000076 +:103A10000000000000000000004000000040000026 +:103A20000000000000000000000000000000000096 :103A30000000000000000000000000000000000086 :103A40000000000000000000000000000000000076 :103A50000000000000000000000000000000000066 :103A60000000000000000000000000000000000056 :103A70000000000000000000000000000000000046 -:103A80000000000000000000000000000000000036 +:103A80000000050000000000000000A0000000A0F1 :103A90000000000000000000000000000000000026 -:103AA00000000000000000000000200000000000F6 +:103AA0000000000000000000000000000000000016 :103AB0000000000000000000000000000000000006 :103AC00000000000000000000000000000000000F6 :103AD00000000000000000000000000000000000E6 :103AE00000000000000000000000000000000000D6 :103AF00000000000000000000000000000000000C6 -:103B000000000000000000000000000000040000B1 -:103B100000000000000000000000000000000000A5 -:103B20000200000000000000000000000000000093 -:103B300000000000000000000000000090000000F5 -:103B4000080000000000000000000000000000006D -:103B5000000000000000A000000000000000400085 -:103B600000000000000082000000000000000000D3 +:103B0000000000000002000041080020000000004A +:103B1000000220200000000000000004000000005F +:103B20000000000000000000000000000000000095 +:103B30000000000000000000000000000000000085 +:103B40000000000000000000000000000000000075 +:103B50000000000000000000000000000000000065 +:103B60000000000000000000000000000000000055 :103B70000000000000000000000000000000000045 -:103B800000000000000000000020000020002000D5 -:103B900000000000000000000000000000A000A0E5 -:103BA0000000004000000084000008000000000049 -:103BB0000000030009000000000000000088110858 -:103BC00000000000000000000000000000002000D5 -:103BD000200400000300000021000000000000009D -:103BE00000020000000000000000000000000800CB -:103BF00003000000000000000300000000000000BF +:103B800000000000000000012100200100000800EA +:103B9000080000008800210000000800000100006B +:103BA0000800000003000000000000000000080002 +:103BB00008000000000000000000000000000000FD +:103BC00000000000000000000000000000000000F5 +:103BD00010000000000000000000000000000000D5 +:103BE00000000000000000000000000000000000D5 +:103BF00008000800000000000000000000000000B5 :103C000000000000000000000000000000000000B4 -:103C100000000000000000000000000000000000A4 +:103C10000000000000044000000000000000000060 :103C20000000000000000000000000000000000094 -:103C30000000000000000000000000000000000084 +:103C3000000000000000080000000000000000007C :103C40000000000000000000000000000000000074 -:103C50000000000000000000000000000000000064 +:103C50000000000000000000100000000000000054 :103C60000000000000000000000000000000000054 :103C70000000000000000000000000000000000044 -:103C80000000000000000000000000000000000034 +:103C8000000000000000000000000000080000002C :103C90000000000000000000000000000000000024 :103CA0000000000000000000000000000000000014 :103CB0000000000000000000000000000000000004 @@ -54236,74 +54236,74 @@ :103CD00000000000000000000000000000000000E4 :103CE00000000000000000000000000000000000D4 :103CF00000000000000000000000000000000000C4 -:103D000000000000000000000000000000000000B3 -:103D100000000000000000000000000000000000A3 -:103D20000100000000000000000000000000000092 -:103D3000000000000008000000000000000000007B +:103D0000000000000000000000000000000084002F +:103D10008200000004000400A00000000000000079 +:103D20000000000000000000000000000000000093 +:103D30000000000000000000000000000000000083 :103D40000000000000000000000000000000000073 -:103D500000000000000082000000000000000000E1 +:103D50000000000000000000000000000000000063 :103D60000000000000000000000000000000000053 :103D70000000000000000000000000000000000043 :103D80000000000000000000000000000000000033 -:103D90000000000000000000000000000000028899 -:103DA0000200080000880000000000000000000081 -:103DB000000000000000000000000000000000887B -:103DC0000000090000000088000000000000000062 -:103DD000000000000000000011000088000000004A -:103DE0001188080002000000000000000000000030 -:103DF000000000000000000000000088000000003B -:103E000000000000080000000000050000000000A5 -:103E100000000000000000000000000000000000A2 -:103E20000000000000000000000000000000000092 +:103D900000000000000000000020000000000800FB +:103DA000000000000800000000000000000000000B +:103DB00000000000000000000000000000000800FB +:103DC00000004100080000000000000000000000AA +:103DD00000000000000000000000000000000000E3 +:103DE0000800000041000800000000000000000082 +:103DF00000000000000000000000000000000000C3 +:103E000008000000000000000000000000000000AA +:103E1000000100000000000000000000820000001F +:103E2000000004000200000000000000000000008C :103E30000000000000000000000000000000000082 :103E40000000000000000000000000000000000072 :103E50000000000000000000000000000000000062 :103E60000000000000000000000000000000000052 :103E70000000000000000000000000000000000042 :103E80000000000000000000000000000000000032 -:103E90000000000000000000000000000000000022 -:103EA0000000000000000000000000000000000012 +:103E90000000004100204020000800000000050054 +:103EA000000000008000850000000000000000000D :103EB0000000000000000000000000000000000002 :103EC00000000000000000000000000000000000F2 :103ED00000000000000000000000000000000000E2 :103EE00000000000000000000000000000000000D2 :103EF00000000000000000000000000000000000C2 :103F000000000000000000000000000000000000B1 -:103F100000000000000000000000000000000000A1 -:103F20000000000000000000000000000000000091 +:103F1000000000004100200005110000000000002A +:103F2000000000000000000000000003000000008E :103F30000000000000000000000000000000000081 :103F40000000000000000000000000000000000071 :103F50000000000000000000000000000000000061 :103F60000000000000000000000000000000000051 :103F70000000000000000000000000000000000041 :103F80000000000000000000000000000000000031 -:103F90000000000000000000000000000000000021 -:103FA0000000000000000000000000000000000011 +:103F90000000000000000000000000010000000020 +:103FA0000000000000000000000000000001000010 :103FB0000000000000000000000000000000000001 :103FC00000000000000000000000000000000000F1 :103FD00000000000000000000000000000000000E1 :103FE00000000000000000000000000000000000D1 :103FF00000000000000000000000000000000000C1 :1040000000000000000000000000000000000000B0 -:1040100000000000000000000000000000000000A0 -:104020000000000000000000000000000000000090 +:10401000000000000000000000000000010000009F +:10402000000000000000000100000000000000018E :104030000000000000000000000000000000000080 :104040000000000000000000000000000000000070 :104050000000000000000000000000000000000060 :104060000000000000000000000000000000000050 :104070000000000000000000000000000000000040 :104080000000000000000000000000000000000030 -:104090000000000000000000000000000000000020 -:1040A0000000000000000000000000000000000010 -:1040B0000000000000000000000000000000000000 +:104090000000000000000000000000000500020019 +:1040A0000000000000050008001100000020004092 +:1040B00000110000000000000000000000000000EF :1040C00000000000000000000000000000000000F0 :1040D00000000000000000000000000000000000E0 :1040E00000000000000000000000000000000000D0 :1040F00000000000000000000000000000000000C0 :1041000000000000000000000000000000000000AF :10411000000000000000000000000000000000009F -:10412000000000000000000000000000000000008F -:10413000000000000000000000000000000000007F +:10412000000000110000000000000000200003114A +:10413000030000000000000000000000000000007C :10414000000000000000000000000000000000006F :10415000000000000000000000000000000000005F :10416000000000000000000000000000000000004F @@ -54311,15 +54311,15 @@ :10418000000000000000000000000000000000002F :10419000000000000000000000000000000000001F :1041A000000000000000000000000000000000000F -:1041B00000000000000000000000000000000000FF +:1041B00000010100000000000000000000000000FD :1041C00000000000000000000000000000000000EF :1041D00000000000000000000000000000000000DF :1041E00000000000000000000000000000000000CF :1041F00000000000000000000000000000000000BF :1042000000000000000000000000000000000000AE :10421000000000000000000000000000000000009E -:10422000000000000000000000000000000000008E -:10423000000000000000000000000000000000007E +:10422000000000E000000000000000E000000000CE +:10423000000000E00000000000000000000000009E :10424000000000000000000000000000000000006E :10425000000000000000000000000000000000005E :10426000000000000000000000000000000000004E @@ -54358,8 +54358,8 @@ :10447000000000000000000000000000000000003C :10448000000000000000000000000000000000002C :10449000000000000000000000000000000000001C -:1044A000000000000000000000000000000000000C -:1044B00000000000000000000000000000000000FC +:1044A000000000000000000000000061000700059F +:1044B000000000610007000900000061000500091C :1044C00000000000000000000000000000000000EC :1044D00000000000000000000000000000000000DC :1044E00000000000000000000000000000000000CC @@ -54367,23 +54367,23 @@ :1045000000000000000000000000000000000000AB :10451000000000000000000000000000000000009B :10452000000000000000000000000000000000008B -:10453000000000000000000000000000000000007B -:10454000000000000000000000000000000000006B +:104530000000000000000000A000AFF00FFF000F1F +:104540000050A5F500000000000000000000000081 :10455000000000000000000000000000000000005B :10456000000000000000000000000000000000004B :10457000000000000000000000000000000000003B :10458000000000000000000000000000000000002B :10459000000000000000000000000000000000001B :1045A000000000000000000000000000000000000B -:1045B00000000000000000000000000000000000FB -:1045C00000000000000000000000000000000000EB +:1045B00000000000000000000000A000AFF00F00AD +:1045C000000F0050A5F500000000000000000000F2 :1045D00000000000000000000000000000000000DB :1045E00000000000000000000000000000000000CB :1045F00000000000000000000000000000000000BB :1046000000000000000000000000000000000000AA :10461000000000000000000000000000000000009A :10462000000000000000000000000000000000008A -:10463000000000000000000000000000000000007A +:10463000C6053CFF24742474000000000000000044 :10464000000000000000000000000000000000006A :10465000000000000000000000000000000000005A :10466000000000000000000000000000000000004A @@ -54391,7 +54391,7 @@ :10468000000000000000000000000000000000002A :10469000000000000000000000000000000000001A :1046A000000000000000000000000000000000000A -:1046B00000000000000000000000000000000000FA +:1046B0000000FAFA000024742474000000000000D6 :1046C00000000000000000000000000000000000EA :1046D00000000000000000000000000000000000DA :1046E00000000000000000000000000000000000CA @@ -54399,177 +54399,177 @@ :1047000000000000000000000000000000000000A9 :104710000000000000000000000000000000000099 :104720000000000000000000000000000000000089 -:104730000000000000000000000000000000000079 -:1047400000000000840000000000000000000000E5 -:1047500000008808040000000000000000000000C5 -:1047600084000000000000000000000000000000C5 -:1047700000000008000300000000000000008800A6 -:1047800000008200C00084008800C0000000020019 -:1047900000000000008804000400000088002000E1 -:1047A0000000000000000000000000000000000009 -:1047B0000000000000880000000000000000000071 -:1047C00000000000000000000000000000000000E9 -:1047D00000000000000100000000000000000000D8 +:104730000000000000000000000000002000000059 +:104740008800000320000000000088048800880022 +:104750000004000400000000000000002000000031 +:104760002000000000000000000000000000000029 +:1047700000000004000388000000000000000000AA +:104780008800200000000000000000000000000081 +:104790000000000000040000020000000000000013 +:1047A00020002000000000000000000000000000C9 +:1047B0000000000000040082000000000000000073 +:1047C00000040000000000000900000000000000DC +:1047D00000000000000000000000000000000000D9 :1047E00000000000000000000000000000000000C9 -:1047F00000000000000000000000000000000000B9 +:1047F00000000000000100000000000000000000B8 :1048000000000000000000000000000000000000A8 -:104810000000000000000008000000000000000090 +:104810000000000000000001000000000000000097 :104820000000000000000000000000000000000088 -:104830000000000000000004000000000000000074 -:104840000000000000000000000000000000000068 -:104850000000000000000000000000000000000058 +:104830000000000000000001000000000000000077 +:104840000000000000000000000000040011000053 +:1048500000000000000000800000000000000000D8 :104860000000000000000000000000000000000048 -:1048700000000000000000800000000000000000B8 +:104870000000000000000000000000000000000038 :104880000000000000000000000000000000000028 -:104890000000000000000000008000000000000098 +:104890000000000000000000000000000000000018 :1048A0000000000000000000000000000000000008 -:1048B00000000000000000000080000800000084EC -:1048C00000000000000000000000000000080000E0 -:1048D00000080088000000840000000800000000BC -:1048E00000000000000000000000000000840084C0 -:1048F00000080000001000080008000000A00000F0 -:104900000000000000000000008400C00000000063 -:104910000000000800000000000800040000000083 -:1049200000000000000000000000008400002000E3 -:1049300000000084000000100010000800030010B8 -:1049400000050021002100210005002100000000D9 -:10495000004100210021002100082021000000006A -:1049600000000021002100210008002100000000BB -:104970000000002100210021000800A1000000101B -:10498000002100030005002100210021002100007A -:10499000000500000000002100210021002100008E -:1049A00000000000000000210005002100020000BE -:1049B00000000000000000210000000500050000CC -:1049C00000000000000000000000000000000000E7 -:1049D0000000000000000000000000008000000057 -:1049E000000000000000000000000000000800A01F -:1049F00000000000000000000000000000040000B3 +:1048B00000000000000000000000000005000000F3 +:1048C00000000000000000000000000041000000A7 +:1048D00000000000000000000004000000000000D4 +:1048E00000000000000000000000000000000000C8 +:1048F00000000000000000000000000200000000B6 +:1049000000000000000000000000000000000000A7 +:10491000000000000000000000000000000009008E +:104920000000000000000000000000000000000087 +:104930000000000000000000000000000000000077 +:10494000A0000000000000000004000000000000C3 +:104950000000000000000000000000000000000057 +:104960000000000000000000000000000000000047 +:104970000000000000000000000000000000000037 +:104980000000000000000000000000000000000027 +:104990000000000000000000000000000000000017 +:1049A0000000000000000000000000000000000007 +:1049B00000000000000000000000000000000000F7 +:1049C000000000880000000003000000000000005C +:1049D0004100000000000000000000000000000096 +:1049E00000000000000000000000000000000000C7 +:1049F00000000000000000000000000000000000B7 :104A000000000000000000000000000000000000A6 :104A10000000000000000000000000000000000096 :104A20000000000000000000000000000000000086 -:104A3000000008000000000000000000000000006E -:104A400000000000820000000000000000002000C4 -:104A50009000000082000000000000000000200024 -:104A6000040000008200000000000000000082003E -:104A70000000000082000000A0000000A00008006C -:104A80000000080004008200000000000000820016 -:104A900020000000000082009000A00000008200C2 -:104AA0008200040004008200000000000000820078 -:104AB0008200000000008200A0000800C000820008 -:104AC0008200000000000000000000000000000064 -:104AD000000020000000000000000000000800A00E -:104AE00000000000000000000000000000000000C6 -:104AF000000000C00000000000820000000000A0D4 +:104A30000000000000000000000000000000000076 +:104A40008200820000208200820008000400000032 +:104A50000800820000008200820082000000000046 +:104A6000820082000000820082000000000000003E +:104A70000800040000000800080008000000000012 +:104A8000000282008200000082008200000000001C +:104A90000000000082009000820082000000000000 +:104AA0000000080082000000820082000000000078 +:104AB00000000000000000008200820000000000F2 +:104AC000000020000000000040000000400009023B +:104AD000000010001000000000000802410000006B +:104AE000000005004100000040000500000000003B +:104AF0000000400000000000000000000000000076 :104B000000000000000000000000000000000000A5 -:104B10000000000000002100000000000000000074 -:104B20000000020000000000000000000000000083 -:104B3000000000000800000000000000000000006D -:104B4000000000000008000000000000000000005D -:104B5000000000030000000800050008000000003D -:104B600000000000820000100000000000000000B3 -:104B70000000820000000021000000080011000079 -:104B80000010000000030000000000000000000012 -:104B900000020800000000000005000000080000FE -:104BA0000000000000000000000000008200820001 -:104BB00000000800080000000005080000210000B7 +:104B10000000000000000000000000000000000095 +:104B20000000000000000000000000000000000085 +:104B30000000000000000000000000000000000075 +:104B4000000000000000000900020000000000005A +:104B500082000000000000000800000000000800C3 +:104B600082000000000000000000000000000000C3 +:104B7000080000000000000000000000000000002D +:104B80000000000000000000000000000000000025 +:104B9000000008000000000000000000000000000D +:104BA0000000000000000000000082000000000083 +:104BB000C0008400000000000000000000000000B1 :104BC00000000000000000000000000000000000E5 :104BD00000000000000000000000000000000000D5 -:104BE00000000000000800000000000000000000BD +:104BE00000000000000000000000000000000000C5 :104BF00000000000000000000000000000000000B5 :104C000000000000000000000000000000000000A4 :104C10000000000000000000000000000000000094 :104C20000000000000000000000000000000000084 :104C30000000000000000000000000000000000074 -:104C40000000000000000000001000000021000033 -:104C500000000000002140000000000000080000EB -:104C60000041000000038200000800000000A000D6 -:104C7000000000000000C00008000000C021000388 -:104C800000050010000000000000004100000000CE -:104C90000000820020000000900890000000000545 -:104CA00000000000000800080000000000000000F4 -:104CB000000008000000C0004021000000080005BE -:104CC00000000009001000100000000000000000BB -:104CD00000000000000000000000000000000000D4 -:104CE00000000000000000000000000000000000C4 -:104CF00000000000000000000000000000000000B4 +:104C40000000000000000000000000000000000064 +:104C50000800080000000000000000000000000044 +:104C60000000000000000000000000000000000044 +:104C700008008200000000000000000000000000AA +:104C80000000000000000000000000000000000024 +:104C9000000008008200000000000000000000008A +:104CA0000000000000000000000000000000000004 +:104CB00000000000080008000000000000000000E4 +:104CC00000000000000000000000210404020000B9 +:104CD00000000000000008001000000000000000BC +:104CE000000040000000000200004100000200003F +:104CF0000000000010001000000000000000000094 :104D000000000000000000000000000000000000A3 :104D10000000000000000000000000000000000093 :104D20000000000000000000000000000000000083 :104D30000000000000000000000000000000000073 -:104D40000000000000000000000000000001000161 -:104D5000000100C00001000100C0011100000101BC -:104D6000004000040001000100C10000000100013A -:104D7000000100C00001000100C00011000001019D -:104D8000004000040001000100C00000000000011C -:104D90000001000100C00001000100C0001100017D -:104DA0000301004000040001400100C000000001B8 -:104DB0000001000100C00001000100C0011100005D -:104DC0000301004000020001400100C0000000415A -:104DD00000410041008200410041008904C10004FB -:104DE00008410000008000410041008500000041B2 -:104DF00000410041008200410041008905C140029C -:104E000008410000008000410041008500000000D2 -:104E1000004100410041008900410041009040C133 -:104E20004004A041000000800041804100C000001B -:104E3000004100410041008900410041009004C14F -:104E40000040A041000000800041804100C00000FF -:104E500041000300000000804100910000000800B4 -:104E6000820040000000A000C100C10000800000DE -:104E70004100030000000080410091000000090093 -:104E8000A000218000008200C100C10000C000001D -:104E9000000041000300000000804100910000007C -:104EA000400005002180000083004100C10000C0D7 -:104EB00080004100030000000080410091000000DC -:104EC000400005000800008083004100C10000C0D0 -:104ED000800001000100000000C00100C0000000CF -:104EE00001000900858800C0C1000900C1000084DC -:104EF000848401000100000000C00100C000000027 -:104F000000000800840800C0C1004100C100000585 -:104F10004000000001000100000000C00100C000CE -:104F2000000001008200840400C0C1008300C100B1 -:104F30000082820001000100000000C00100C000EA -:104F400000000100200041200004C1008300C100D6 -:104F50000082820000C00001C0C10000000000010A -:104F600000C002040011000108C10000000000019F -:104F70000001010000C00001C0C1000000000001EC -:104F800000C002040005000100C100000000000193 -:104F900000000000000000C00001C0C100000000CF -:104FA000000100C002850005000100C100000000F2 -:104FB00000010000000000C00001C0C100000000AE -:104FC000000100C010410083000100C1000000008A -:104FD0000001000000000080004180C100000000CE -:104FE000004100C100100041004180C100000000EC -:104FF0000041000504000080004180C10000000065 -:10500000004100C100100041004100C1000000004B -:1050100000410005000000000080004180C1000048 -:105020000000004100C100020041004100C1000039 -:1050300000000041004000000080004180C10000ED -:105040000000004100C100020041004100C1000019 -:105050000000004100400000C100800080C100004D -:105060004102000010004100C18480008004000063 -:105070004100000080004100C100800080C10000AC -:105080004102000010004100C14180008002000088 -:1050900041000000800041000000C100800080C18C -:1050A00000004102000082004100C1410000800276 -:1050B00000004100000080004100C100800080C16C -:1050C00000004102800082004100C1C180008004D4 -:1050D00000004100000080004100C1004000C0C14C -:1050E00000000100020002000100C1412000C000D8 -:1050F000000001000000C0000100C1004000C0C16C -:1051000000000100020002000100C1A11000C00166 -:10511000000001000000C00001000000C1004000CC -:10512000C0C100000100020008000100C1412000D0 -:10513000C001000001000000C0000100C1004000EB -:10514000C0C100000100080008000100C109020000 -:10515000C001000001000000C000010000000000CC -:105160000000004200000000000000005012008813 -:105170000700000000000000000000000000000028 -:1051800000000042000000000000000081120088C2 -:1051900007004800000000000000000000000000C0 -:1051A000000000000042000000000000000081122A -:1051B0000088070048000000000000000000000018 -:1051C000000000000042000000000000000081120A -:1051D00000880700480000000000000000000000F8 +:104D40000000000000000000000000000000000063 +:104D50000000000001000000000000000000010051 +:104D600000C0000000000000000000000000000083 +:104D70000000000001000000000000000000010031 +:104D800000C0000000000000000000000000000063 +:104D90000000000000000100000000000000000012 +:104DA000010000C000000000000000000000000042 +:104DB00000000000000001000000000000000000F2 +:104DC000010000C000000000000000000100000021 +:104DD000000000000000410000000000000040054D +:104DE0000200008000000000000000000000000041 +:104DF000000000000000410000000000000040052D +:104E00000200008000000000000000000000000020 +:104E10000000000000000000410000000000000051 +:104E2000400541000080000000000000000000007C +:104E30000000000000000000410000000000000031 +:104E4000404102000080000000000000000041001E +:104E5000000003000000008000008000000000004F +:104E600090008300002000000000000000000041CE +:104E7000000003000000008000008000000000002F +:104E80009000A00000200000000000000000004191 +:104E9000000000000300000000800000800000000F +:104EA00000009000A00000200000000000000000B2 +:104EB00000410000030000000080000080000000AE +:104EC000000090008300004100000000000000008E +:104ED000001000000100000000C0000020000000E1 +:104EE000000041002140009140824000000000008D +:104EF000000100000100000000C0000020000000D0 +:104F000000004100214000914000400000000000EE +:104F10000001000000000100000000C000002000AF +:104F200000000000410021400091400040000000CE +:104F30000000000100000100000000C0000020008F +:104F400000000000030020400091400040000000ED +:104F50000000000100000000C00000000000000090 +:104F6000000000000002000000000000000000003F +:104F70000000000000000000C00000000000000071 +:104F8000000000000002000000000000000000001F +:104F900000000000000000000000C0000000000051 +:104FA00000000000000000020000000000000000FF +:104FB00000000000000000000000C0000000000031 +:104FC000000000000000004000000400000000009D +:104FD0000000000000000000000080000000000051 +:104FE0000000000000000080000000000000000041 +:104FF0000000000000000000000080000000000031 +:105000000000000000000080000000000000000020 +:105010000000000000000000000000008000000010 +:105020000000000000000000008000000000000000 +:1050300000000000000000000000000080000000F0 +:105040000000000000000000008000008000000060 +:1050500000000000000000000000800000C100000F +:10506000000000000000000000418000002000005F +:1050700000000000000000000000800000C10000EF +:10508000000000000000000000418000002000003F +:10509000000000000000000000000000800000C1CF +:1050A0000000000000000000000000008000002060 +:1050B000000000000000000000000000800000C1AF +:1050C00000000000000000000000004180000020FF +:1050D000000000000000000000000000400000C1CF +:1050E0000000000000000000000000830400000138 +:1050F000000000000000000000000000400000C1AF +:105100000000000000000000000000830400000117 +:10511000000000000000000000000000000040004F +:1051200000C1000000000000000000000082040038 +:10513000000100000000000000000000000040002E +:1051400000C1000000000000000000000083040017 +:10515000000100000000000000000000000000004E +:10516000000000420000000000004800810000E054 +:1051700000004800000000000000004200000000A5 +:10518000000000420000000000004800810000E034 +:105190000000480000000000000000420000000085 +:1051A0000000000000420000000000004800410034 +:1051B00000E00000C100000000000000004200000C +:1051C00000000000004200000000000048008100D4 +:1051D00000E000004805000000000000000500009D :1051E00000000000000000000000000000000000BF :1051F00000000000000000000000000000000000AF :10520000000000000000000000000000000000009E @@ -54586,205 +54586,205 @@ :1052B00000000000000000000000000000000000EE :1052C00000000000000000000000000000000000DE :1052D00000000000000000000000000000000000CE -:1052E0000000757B000000000000000000000000CE +:1052E0000000747B000000000000000000000000CF :1052F00000000000000000000000000000000000AE -:10530000DEAE757B00000000000000000000000021 +:10530000DE2E747B000000000000000000000000A2 :10531000000000000000000000000000000000008D -:10532000DEAE0000757B0000000000000000000001 +:10532000DE2E0000747B0000000000000000000082 :10533000000000000000000000000000000000006D -:105340000000DEAE757B00000000000000000000E1 +:105340000000DE2E747B0000000000000000000062 :10535000000000000000000000000000000000004D -:105360000000DEAE60C60300000000000000003157 -:10537000E0000000000000000C0000000000000041 -:1053800000C0630660C6030000000000000000319A -:10539000E0000000000000000C0000000000000021 -:1053A00000C06306000060C60300000000000000AB -:1053B0000031E0000000000000000C0000000000D0 -:1053C000000000C0630660C603000000000000008B -:1053D0000031E0000000000000000C0000000000B0 -:1053E000000000C063060000000000000000820012 -:1053F0000000000000000000000000000000840029 -:10540000000000000000000000000000000000009C -:10541000000000000000000000000000000000008C -:10542000000000000000000000000000000000007C -:10543000000000000000000000000000000000006C -:105440000000840000000000000000000000840054 -:10545000000000000000000000000000000000004C -:10546000000000000000000000000000000000003C -:10547000000000000000000000000000000000002C -:10548000000000000000000000000000000000001C -:10549000000000000000000000000000000000000C -:1054A00000000000000000000000000000000000FC +:105360000000DE2E61560340000000000000023104 +:10537000E0000000000000000C4000000000000001 +:1053800002C06A866156034000000000000002313E +:10539000E0000000000000000C40000000000000E1 +:1053A00002C06A8600006156034000000000000051 +:1053B0000231E0000000000000000C40000000008E +:1053C000000002C06A866156034000000000000031 +:1053D0000231E0000000000000000C40000000006E +:1053E000000002C06A862003042000002010000094 +:1053F0000000000300000005200000002000000065 +:105400000000000400000080000000A00000001068 +:10541000008000400002000020000000200000008A +:105420000000000004000001000000000000000077 +:10543000000000000000000000002000000020002C +:10544000000000000000200000000000000000003C +:10545000000000000000000000002000000020000C +:105460000000000000000000008400850000000132 +:1054700000000084000000000000000000000000A8 +:105480000000000000010000002000000005008472 +:1054900000010010000100010000000000000000F9 +:1054A00005000000000004000000000000000000F3 :1054B00000000000000000000000000000000000EC :1054C00000000000000000000000000000000000DC :1054D00000000000000000000000000000000000CC :1054E00000000000000000000000000000000000BC -:1054F00000000000000000000000000000000000AC -:10550000000000000000000000000000000000009B -:10551000000000000000000000000000000000008B +:1054F000000000000088000000020000000800001A +:105500000000000400800085008000800000000092 +:10551000008000000000000000A0000000800000EB :10552000000000000000000000000000000000007B :10553000000000000000000000000000000000006B :10554000000000000000000000000000000000005B :10555000000000000000000000000000000000004B -:10556000000000000000000000000000000000003B -:105570000000000000C000000000000800000088DB -:105580000008000800840000000000000000000087 -:105590000000000000000000000000880000000083 -:1055A0000084001000000000000000000000000067 +:1055600000000000000000000000000040002000DB +:105570000000000000000005200000010000000005 +:10558000200000840001004000040010000400001E +:1055900000000002000000000000002100000004E4 +:1055A00000000000000000000000000000000000FB :1055B00000000000000000000000000000000000EB :1055C00000000000000000000000000000000000DB :1055D00000000000000000000000000000000000CB -:1055E00000080000000000000000000000000000B3 -:1055F00000000000000000000000000000000000AB -:10560000000000000000000000000000000000009A -:105610000000000000000041000000000000000049 -:10562000000000000000000000000000000000007A -:10563000000000000010000000000000000000005A +:1055E00000000000000000000000000000000000BB +:1055F00000000009900500000102008090080020D2 +:1056000000030009004001090020000000040021FF +:105610000000000000100000000000200005000451 +:10562000000000000020000000000000000000005A +:10563000000000000000000000000000000000006A :10564000000000000000000000000000000000005A :10565000000000000000000000000000000000004A :10566000000000000000000000000000000000003A -:10567000000000000000000000000000000000002A -:105680000000000000C0000800A0000000000000B2 -:105690000000000000000000080000000000000002 -:1056A0000000000000C0001000000000000000002A -:1056B0000000000000000000410000000000410068 -:1056C00000000000000800000000000000000000D2 -:1056D00000000000000000000000030003000000C4 -:1056E000000000000008000000840000000000002E -:1056F00000000000000000000000000000000000AA -:105700000000000000000000000000000000000099 -:105710000000000000000000000000000000000089 +:1056700000000082000000000088200000100000F0 +:105680000001000000000085200000010000000172 +:105690000800000000000001000000000001000000 +:1056A00000010000000000010000000000000000F8 +:1056B00000000000000000000000000000000000EA +:1056C00000000000000000000000000000000000DA +:1056D0000000000000004100000000000000000089 +:1056E00000000000000000000000000000000000BA +:1056F000000090900005A0C020808200048000007F +:1057000020000080000008802082000008002000A7 +:1057100020000400000082000000000000000000E3 :105720000000000000000000000000000000000079 :105730000000000000000000000000000000000069 -:105740000000000000000000000000000400400015 +:105740000000000000000000000000000000000059 :105750000000000000000000000000000000000049 -:1057600000000000000000000000000040000800F1 -:105770000000000000000000000000000000000029 -:105780000000000000000000000000000000000019 -:105790000000000000000000000000000000000009 +:105760000000000000000000000000000000000039 +:1057700000000000000305000309000203200010E0 +:105780002184030421024084080800110300000062 +:10579000A1A08000800000000320000000000000A5 :1057A00000000000000000000000000000000000F9 -:1057B00000000000000000000000000000000000E9 +:1057B00000200000000000000000000000000000C9 :1057C00000000000000000000000000000000000D9 :1057D00000000000000000000000000000000000C9 :1057E00000000000000000000000000000000000B9 -:1057F00000000000000000000000000000000000A9 -:105800000000000000000000000000000000000098 -:105810000000000000000000000000000000000088 -:105820000000000000000000000000000000080070 -:105830000000000000000000000000000000C000A8 -:105840000000000000000000000000000000000058 -:105850000000000000000000000000000000000048 +:1057F0000000000000000008A00082808208C02095 +:105800000004840000210841C01182000005082026 +:10581000A0000811C000A003080004000800000058 +:1058200000000000C0200000200000000000000078 +:105830000000000000000000000000000000000068 +:1058400000000000000000000000000000800000D8 +:105850000000000000000800000000000000000040 :105860000000000000000000000000000000000038 -:105870000000000000000000000000000000000028 -:105880000000000000000008000000C00008000048 -:105890000000000000000000000000000000000008 -:1058A00000000000000000000000000000A0000058 -:1058B00008000000000000000000000000000000E0 -:1058C00000000000000000000000000000000000D8 -:1058D00000000000000000000000000000000000C8 -:1058E0000000000000000000000000000084000034 -:1058F00000000000000000000000000000000000A8 -:105900000000000000000000000000000000000097 -:105910000000000000000000000000000000000087 -:105920000000000000000000000000000000000077 -:105930000000000000000000000000000000000067 +:10587000000000000100080000000000000200021B +:105880000001000100000000000008000000080006 +:105890000001000000000000000000008000000087 +:1058A0000000000000000001000088000000080067 +:1058B00000000000000000000000000000000000E8 +:1058C00000000000000000000000000008000010C0 +:1058D00008000000000000000000000000000000C0 +:1058E00000000000000000000000000008000000B0 +:1058F000080000000000080000000008A0808202EC +:10590000A0008202C009828082A1820040000810AB +:10591000840482004003012182212002040020002F +:105920009000000082020000C0000004000400009B +:105930000004000000000000000000000000000063 :105940000000000000000000000000000000000057 :105950000000000000000000000000000000000047 :105960000000000000000000000000000000000037 -:105970000000000000000010000000100000000007 -:105980000000000000000000000000000000000017 -:105990000000000000000000000000000000000007 -:1059A00000000000000000000000000000000000F7 -:1059B00000000000000000000000000000000000E7 +:105970000000000000000000000000000004000221 +:10598000040420A0000108002002001000A041082B +:1059900021030300030000002000009080000000AD +:1059A00080000000000000884100000000010001AC +:1059B00000000001000000000000000000000000E6 :1059C00000000000000000000000000000000000D7 :1059D00000000000000000000000000000000000C7 :1059E00000000000000000000000000000000000B7 -:1059F00000000000000000000000000000000000A7 -:105A00000000000000000000000000000000000096 -:105A10000000000000000000000000000000000086 -:105A20000000000000000000000000000000000076 -:105A30000000000000000000000000000000000066 +:1059F00000000000000000000000000000000201A4 +:105A000000904089100302404004C088C08208030F +:105A100083900808048200410090400000040100C7 +:105A20000000400000009102018220880210000165 +:105A30000000200000010000000000000000000045 :105A40000000000000000000000000000000000056 :105A50000000000000000000000000000000000046 :105A60000000000000000000000000000000000036 :105A70000000000000000000000000000000000026 -:105A80000000000000000000000000000000000016 -:105A90000000000000000000000000000000000006 -:105AA00000000000000000000000000000000000F6 -:105AB00000000000000000000000000000000000E6 +:105A800040411185800880A0C00085C085038089C1 +:105A90000041102080208083401108A1852000A0B3 +:105AA00011050503C0410020108021000080800006 +:105AB000001108204003001000000000000000005A :105AC00000000000000000000000000000000000D6 :105AD00000000000000000000000000000000000C6 :105AE00000000000000000000000000000000000B6 :105AF00000000000000000000000000000000000A6 -:105B00000000000000000000000000000000000095 -:105B10000000000000000000000000000000000085 -:105B20000000000000000000000000000000000075 -:105B30000000000000000000000000000000000065 +:105B00000000A1008589C000031003008221C104A8 +:105B1000080800000003000000000200A10311803B +:105B2000A00085008220910000000280802040803B +:105B3000C000000000000000800500000000000020 :105B40000000000000000000000000000000000055 :105B50000000000000000000000000000000000045 :105B60000000000000000000000000000000000035 :105B70000000000000000000000000000000000025 -:105B80000000000000000000000000000000000015 -:105B90000000000000000000000000000000000005 -:105BA00000000000000000000000000000000000F5 -:105BB00000000000000000000000000000000000E5 +:105B80000000000008209008A1C00401404004006B +:105B9000840185118800200120002040410002007E +:105BA0002140C0000200090003009000A004200171 +:105BB00000A00400209020000000900000000000E1 :105BC00000000000000000000000000000000000D5 :105BD00000000000000000000000000000000000C5 :105BE00000000000000000000000000000000000B5 :105BF00000000000000000000000000000000000A5 -:105C00000000000000000000000000000000000094 -:105C10000000000000000000000000000000000084 -:105C20000000000000000000000000000000000074 -:105C30000000000000000000000000000000000064 +:105C000000000000000000100010C0C00488104018 +:105C1000001004894091202001910002100800002A +:105C200000010500A001000400210190000508000A +:105C300000820009210900000100000100010000AC :105C40000000000000000000000000000000000054 :105C50000000000000000000000000000000000044 :105C60000000000000000000000000000000000034 :105C70000000000000000000000000000000000024 -:105C80000000000000000000000000000000000014 -:105C90000000000000000000000000000000000004 -:105CA00000000000000000000000000000000000F4 -:105CB00000000000000000000000000000000000E4 +:105C8000000000000000000000202185032080208B +:105C90008040029191080041002003084183A083C5 +:105CA000000540039020201100A0201040A0008893 +:105CB0000003008500211002002010202010001198 :105CC00000000000000000000000000000000000D4 :105CD00000000000000000000000000000000000C4 :105CE00000000000000000000000000000000000B4 :105CF00000000000000000000000000000000000A4 -:105D00000000000000000000000000000000000093 -:105D10000000000000000000000000000000000083 -:105D20000000000000000000000000000000000073 -:105D30000000000000000000000000000000000063 -:105D40000000000000000000000000000000000053 +:105D0000000000000000000000008585A040820027 +:105D100003100811914120000205800500850080D4 +:105D20000000808000410000000580058040800068 +:105D30000000891009888580C009020020C0200069 +:105D40000300000000000000000000000000000050 :105D50000000000000000000000000000000000043 :105D60000000000000000000000000000000000033 :105D70000000000000000000000000000000000023 -:105D80000000000000000000000000000000000013 -:105D90000000000000000000000000000000000003 -:105DA00000000000000000000000000000000000F3 -:105DB00000000000000000000000000000000000E3 +:105D8000000000000000000000000000C04004020D +:105D900003021000839121208888010090000020D8 +:105DA00020024000900820820090000090202020D7 +:105DB00002400000C08390824002A0000100000465 :105DC00000000000000000000000000000000000D3 :105DD00000000000000000000000000000000000C3 :105DE00000000000000000000000000000000000B3 :105DF00000000000000000000000000000000000A3 :105E00000000000000000000000000000000000092 -:105E10000000000000000000000000000000000082 -:105E20000000000000000000000000000000000072 -:105E30000000000000000000000000000000000062 -:105E40000000000000000000000000000000000052 +:105E1000000007000000000000E00700000A00008A +:105E2000000007000000000000E007000000000084 +:105E300000E0070000000000000007000000000074 +:105E400000E007000000000000000000000000006B :105E50000000000000000000000000000000000042 :105E60000000000000000000000000000000000032 :105E70000000000000000000000000000000000022 :105E80000000000000000000000000000000000012 -:105E90000000000000000000000000000000000002 -:105EA00000000000000000000000000000000000F2 -:105EB00000000000000000000000000000000000E2 +:105E900026D9262600000000FF0FF000F0C0695947 +:105EA0003F3F0C0CFFF4FF2466FF0066000000007B +:105EB000FF0000003F0C3300F0F0FF0066660000BA :105EC00000000000000000000000000000000000D2 :105ED00000000000000000000000000000000000C2 :105EE00000000000000000000000000000000000B2 :105EF00000000000000000000000000000000000A2 :105F00000000000000000000000000000000000091 -:105F10000000000000000000000000000000000081 -:105F20000000000000000000000000000000000071 -:105F30000000000000000000000000000000000061 -:105F40000000000000000000000000000000000051 +:105F10000000D9D92626000000010F000F0096A628 +:105F20000F3F3333000024F424246699000000005E +:105F30000000F0FFF0003F0C330066663C3C999097 +:105F40000900000000000000000000000000000048 :105F50000000000000000000000000000000000041 :105F60000000000000000000000000000000000031 :105F70000000000000000000000000000000000021 @@ -54797,316 +54797,316 @@ :105FE00000000000000000000000000000000000B1 :105FF00000000000000000000000000000000000A1 :106000000000000000000000000000000000000090 -:106010000000000000000000000000000000000080 -:106020000000000000000000000000000000000070 -:106030000000000000000000000000000000000060 -:106040000000000000000000000000000000000050 +:1060100000000000000020EC20EC000000003CA587 +:106020000C95F90906F62F2F2FBFF069F00F00C36A +:10603000427E030F9A960000000039003F0066F090 +:1060400064F000000F0F000000002020ECEC0000C6 :106050000000000000000000000000000000000040 :106060000000000000000000000000000000000030 :106070000000000000000000000000000000000020 :106080000000000000000000000000000000000010 -:106090000000000000000000000000000000000000 -:1060A00000000000000000000000000000000000F0 -:1060B00000000000000000000000000000000000E0 -:1060C00000000000000000000000000000000000D0 +:10609000000000000000000020EC20EC00100000D8 +:1060A000C3A5F395F9093ACA242424BDC35AC33CB5 +:1060B00000C3427E030FFCF00000000030003600F9 +:1060C00066F060F010107070000000002020ECEC12 :1060D00000000000000000000000000000000000C0 :1060E00000000000000000000000000000000000B0 :1060F00000000000000000000000000000000000A0 :10610000000000000000000000000000000000008F -:10611000000000000000000000000000000000007F -:10612000000000000000000000000000000000006F -:10613000000000000000000000000000000000005F -:10614000000000000000000000000000000000004F +:1061100000000000000000000000A061000E000D63 +:1061200000000061000D000D00000061400E000D38 +:1061300000000061000B000100050061000B00057C +:106140000000A061000E000D0000006100090009C0 :10615000000000000000000000000000000000003F :10616000000000000000000000000000000000002F :10617000000000000000000000000000000000001F :10618000000000000000000000000000000000000F -:1061900000000000000000000000000000000000FF -:1061A00000000000000000000000000000000000EF -:1061B00000000000000000000000000000000000DF -:1061C00000000000000000000000000000000000CF -:1061D00000000000000000000000000000000000BF +:10619000000000000000000000000000FF3DFF01C3 +:1061A000ACACACFF55550000C0F095A50000000058 +:1061B000F828F8FF0000000078AA7DAA000000007F +:1061C000A0FFBCFF0000008000010000F5F5050500 +:1061D0000C3E0D3F00000000000000000000000029 :1061E00000000000000000000000000000000000AF :1061F000000000000000000000000000000000009F :10620000000000000000000000000000000000008E -:10621000000000000000000000000000000000007E -:10622000000000000000000000000000000000006E -:10623000000000000000000000000000000000005E -:10624000000000000000000000000000000000004E -:10625000000000000000000000000000000000003E +:1062100000000000000000000000000000003D3D04 +:106220000101A0A0A0FFBE1EB414C0F03F0F0000EB +:106230000000282828FF0000000028002D00000092 +:106240000000A000BC3C00000080000000005030B6 +:106250005030003201330000000000000000000058 :10626000000000000000000000000000000000002E :10627000000000000000000000000000000000001E :10628000000000000000000000000000000000000E :1062900000000000000000000000000000000000FE -:1062A00000000000000000000000000000000000EE -:1062B00000000000000000000000000000000000DE -:1062C00000000000000000000000000000000000CE -:1062D00000000000000000000000000000000000BE +:1062A000A6F30C0CC03FC06A00000000A903A9A916 +:1062B000C6FA0505000000005FF05F307075747469 +:1062C000FFAA2A02003C003C000000000000000081 +:1062D0000C350C350000000000000000000000003C :1062E00000000000000000000000000000000000AE :1062F000000000000000000000000000000000009E :10630000000000000000000000000000000000008D :10631000000000000000000000000000000000007D -:10632000000000000000000000000000000000006D -:10633000000000000000000000000000000000005D -:10634000000000000000000000000000000000004D -:10635000000000000000000000000000000000003D +:10632000000096C33C3CCF30CF6500800080953F95 +:106330009595CCF00F0F0000000050C050002025B4 +:10634000242455002A0230F330F3000000004100FD +:1063500000000CF50C05000000000000000000002B :10636000000000000000000000000000000000002D :10637000000000000000000000000000000000001D :10638000000000000000000000000000000000000D :1063900000000000000000000000000000000000FD -:1063A00000000000000000000000000000000000ED -:1063B00000000000000000000000000000000000DD -:1063C00000000000000000000000000000000000CD -:1063D00000000000000000000000000000000000BD -:1063E00000000000000000000000000000000000AD +:1063A00000000000014000400200024020802080E8 +:1063B00000402008000088000000000000000004E9 +:1063C0000000000000000002000000040000008047 +:1063D00000020008000000000000000000000000B3 +:1063E00000000000000100000000000000000000AC :1063F000000000000000000000000000000000009D :10640000000000000000000000000000000000008C -:10641000000000000000000000000000000000007C -:10642000000000000000000000000000000000006C -:10643000000000000000000000000000000000005C -:10644000000000000000000000000000000000004C -:10645000000000000000000000000000000000003C +:106410000000000000000000040000000000000078 +:10642000000000000000020109018000800100401E +:1064300000080001800000000000000000000000D3 +:106440000901200000000000000100000001000020 +:106450000002000100010000000000000000000038 :10646000000000000000000000000000000000002C :10647000000000000000000000000000000000001C :10648000000000000000000000000000000000000C :1064900000000000000000000000000000000000FC -:1064A00000000000000000000000000000000000EC -:1064B00000000000000000000000000000000000DC -:1064C00000000000000000000000000000000000CC -:1064D00000000000000000000000000000000000BC +:1064A000000000000000000000000000008000006C +:1064B00000000000008000800000000000000000DC +:1064C00000000000000000000000008000000080CC +:1064D000008000000080008000000000000000003C :1064E00000000000000000000000000000000000AC :1064F000000000000000000000000000000000009C :10650000000000000000000000000000000000008B :10651000000000000000000000000000000000007B -:10652000000000000000000000000000000000006B -:10653000000000000000000000000000000000005B -:10654000000000000000000000000000000000004B -:10655000000000000000000000000000000000003B +:1065200000000000000000000000008200000040A9 +:106530000000000000000040000400000000000017 +:10654000000000000000000000000000004000000B +:106550000010000200000004000200000000000023 :10656000000000000000000000000000000000002B :10657000000000000000000000000000000000001B :10658000000000000000000000000000000000000B :1065900000000000000000000000000000000000FB -:1065A00000000000000000000000000000000000EB -:1065B00000000000000000000000000000000000DB -:1065C00000000000000000000000000000000000CB -:1065D00000000000000000000000000000000000BB +:1065A00000000000000000000000000000210008C2 +:1065B00000100104000000050008038400040082AC +:1065C0000000080800200040001000000000000843 +:1065D00000000004000000000000000000000000B7 :1065E00000000000000000000000000000000000AB :1065F000000000000000000000000000000000009B :10660000000000000000000000000000000000008A :10661000000000000000000000000000000000007A :10662000000000000000000000000000000000006A -:10663000000000000000000000000000000000005A -:10664000000000000000000000000000000000004A -:10665000000000000000000000000000000000003A -:10666000000000000000000000000000000000002A +:1066300000000800200141A009002100A005000180 +:106640000021418483010301410108012100000070 +:1066500000012100090121002100030008000000C1 +:10666000000000C00000000000000000000000006A :10667000000000000000000000000000000000001A :10668000000000000000000000000000000000000A :1066900000000000000000000000000000000000FA :1066A00000000000000000000000000000000000EA -:1066B00000000000000000000000000000000000DA -:1066C00000000000000000000000000000000000CA -:1066D00000000000000000000000000000000000BA +:1066B000C000020084002080C0000200A002A000F0 +:1066C000A0000400850008008200A000C0000800AF +:1066D000000000000800080000000000000000802A :1066E00000000000000000000000000000000000AA :1066F000000000000000000000000000000000009A :106700000000000000000000000000000000000089 :106710000000000000000000000000000000000079 :106720000000000000000000000000000000000069 -:106730000000000000000000000000000000000059 -:106740000000000000000000000000000000000049 +:1067300000000000880000008802000880000001BE +:1067400000000000000008900000000000020002AD :106750000000000000000000000000000000000039 -:106760000000000000000000000000000000000029 +:106760000004000000000000000000000000000025 :106770000000000000000000000000000000000019 :106780000000000000000000000000000000000009 :1067900000000000000000000000000000000000F9 :1067A00000000000000000000000000000000000E9 -:1067B00000000000000000000000000000000000D9 -:1067C00000000000000000000000000000000000C9 -:1067D00000000000000000000000000000000000B9 +:1067B000000000000000C000A000A004C003C0A1B1 +:1067C00000032084C010A121C04182020000008586 +:1067D000084182008200C00082000000000000002A :1067E00000000000000000000000000000000000A9 :1067F0000000000000000000000000000000000099 :106800000000000000000000000000000000000088 :106810000000000000000000000000000000000078 :106820000000000000000000000000000000000068 -:106830000000000000000000000000000000000058 -:106840000000000000000000000000000000000048 -:106850000000000000000000000000000000000038 -:106860000000000000000000000000000000000028 +:1068300000000000000000A000000300008521848B +:1068400000400800800521010400008400A1000030 +:106850000904080000000390000008000000080080 +:106860000800030008000500080003000300000002 :106870000000000000000000000000000000000018 :106880000000000000000000000000000000000008 :1068900000000000000000000000000000000000F8 :1068A00000000000000000000000000000000000E8 -:1068B00000000000000000000000000000000000D8 -:1068C00000000000000000000000000000000000C8 -:1068D00000000000000000000000000000000000B8 -:1068E00000000000000000000000000000000000A8 +:1068B0000000000000000000C003C01040114008AC +:1068C0008382C08301088484A00404400100820202 +:1068D0000000C004200400004000A02000000000D0 +:1068E00000000000000000040000000000000000A4 :1068F0000000000000000000000000000000000098 :106900000000000000000000000000000000000087 :106910000000000000000000000000000000000077 :106920000000000000000000000000000000000067 -:106930000000000000000000000000000000000057 -:106940000000000000000000000000000000000047 -:106950000000000000000000000000000000000037 -:106960000000000000000000000000000000000027 +:106930000000000000000000000000001100000046 +:106940000000020900020201004100018001400034 +:1069500000000000000180010000000000000000B5 +:106960000000000000000000000100000000000026 :106970000000000000000000000000000000000017 :106980000000000000000000000000000000000007 :1069900000000000000000000000000000000000F7 :1069A00000000000000000000000000000000000E7 -:1069B00000000000000000000000000000000000D7 -:1069C00000000000000000000000000000000000C7 -:1069D00000000000000000000000000000000000B7 -:1069E00000000000000000000000000000000000A7 +:1069B0000000000000000000000000000440A002F1 +:1069C00005102102C0034082830388C004834091E4 +:1069D0004120104082000000010020000000000063 +:1069E00003000000000001000101000000000000A1 :1069F0000000000000000000000000000000000097 :106A00000000000000000000000000000000000086 :106A10000000000000000000000000000000000076 :106A20000000000000000000000000000000000066 -:106A30000000000000000000000000000000000056 -:106A40000000000000000000000000000000000046 -:106A50000000000000000000000000000000000036 -:106A60000000000000000000000000000000000026 +:106A300000000000000000000000000000000080D6 +:106A400005808480028040C1000382838009C011D8 +:106A500085A002038040000000000200000000004A +:106A600000008200000000402040021100030000EE :106A70000000000000000000000000000000000016 :106A80000000000000000000000000000000000006 :106A900000000000000000000000000000000000F6 :106AA00000000000000000000000000000000000E6 :106AB00000000000000000000000000000000000D6 -:106AC00000000000000000000000000000000000C6 -:106AD00000000000000000000000000000000000B6 -:106AE00000000000000000000000000000000000A6 +:106AC000800080908002801085000320A190410307 +:106AD0000310894141408303100003031100A00506 +:106AE00000008000000080090580050010000021E2 :106AF0000000000000000000000000000000000096 :106B00000000000000000000000000000000000085 :106B10000000000000000000000000000000000075 :106B20000000000000000000000000000000000065 :106B30000000000000000000000000000000000055 -:106B40000000000000000000000000000000000045 -:106B50000000000000000000000000000000000035 -:106B60000000000000000000000000000000000025 -:106B70000000000000000000000000000000000015 +:106B40000000082002A108C0820403040888404114 +:106B5000911182830401A0C0C0014120A000210046 +:106B60000300824002002000C0000002000001007B +:106B70000001000000000000000000000000000014 :106B80000000000000000000000000000000000005 :106B900000000000000000000000000000000000F5 :106BA00000000000000000000000000000000000E5 :106BB00000000000000000000000000000000000D5 -:106BC00000000000000000000000000000000000C5 -:106BD00000000000000000000000000000000000B5 -:106BE00000000000000000000000000000000000A5 -:106BF0000000000000000000000000000000000095 +:106BC0000000000021820020100302024141010563 +:106BD00089822111C0910004010391110002000873 +:106BE00082020040000100000001010100000100DC +:106BF000A1000000000000000000000000000000F4 :106C00000000000000000000000000000000000084 :106C10000000000000000000000000000000000074 :106C20000000000000000000000000000000000064 :106C30000000000000000000000000000000000054 -:106C40000000000000000000000000000000000044 -:106C50000000000000000000000000000000000034 -:106C60000000000000000000000000000000000024 -:106C70000000000000000000000000000000000014 +:106C40000000000000004010000380A01189201007 +:106C5000208305A011C18002218310C04040008024 +:106C600000800080000000020005000511410005C1 +:106C70001005C040004000000000000000000000BF :106C80000000000000000000000000000000000004 :106C900000000000000000000000000000000000F4 :106CA00000000000000000000000000000000000E4 :106CB00000000000000000000000000000000000D4 -:106CC00000000000000000000000000000000000C4 -:106CD00000000000000000000000000000000000B4 -:106CE00000000000000000000000000000000000A4 -:106CF0000000000000000000000000000000000094 +:106CC00000000000000000008305A0008580400057 +:106CD0004103A108050020114182838885008305B6 +:106CE00083051141208020050340108041004000B1 +:106CF000418041401000100300000000000000002F :106D00000000000000000000000000000000000083 :106D10000000000000000000000000000000000073 :106D20000000000000000000000000000000000063 :106D30000000000000000000000000000000000053 -:106D40000000000000000000000000000000000043 -:106D50000000000000000000000000000000000033 -:106D60000000000000000000000000000000000023 -:106D70000000000000000000000000000000000013 +:106D40000000000000000000000002000804020231 +:106D5000C000054004040502050189050403412023 +:106D6000100090C04190A1400000000001040040CC +:106D7000000001020000010001010000000000000D :106D80000000000000000000000000000000000003 :106D900000000000000000000000000000000000F3 :106DA00000000000000000000000000000000000E3 :106DB00000000000000000000000000000000000D3 -:106DC00000000000000000000000000000000000C3 -:106DD00000000000000000000000000000000000B3 -:106DE00000000000000000000000000000000000A3 -:106DF0000000000000000000000000000000000093 +:106DC000000000000000000000000000810000E062 +:106DD00000000000820000E000000000000000E071 +:106DE00007006000000000E007000000000000E075 +:106DF00000000000000000E00000000000000000B3 :106E00000000000000000000000000000000000082 :106E10000000000000000000000000000000000072 :106E20000000000000000000000000000000000062 :106E30000000000000000000000000000000000052 -:106E40000000000000000000000000000000000042 -:106E50000000000000000000000000000000000032 -:106E60000000000000000000000000000000000022 +:106E40000000000000000000000000000000F50548 +:106E5000C3C300550C4DD70F820FD714070469C365 +:106E6000693C3A3A3AFF0000F0F00F00727D0000F2 :106E70000000000000000000000000000000000012 :106E80000000000000000000000000000000000002 :106E900000000000000000000000000000000000F2 :106EA00000000000000000000000000000000000E2 :106EB00000000000000000000000000000000000D2 :106EC00000000000000000000000000000000000C2 -:106ED00000000000000000000000000000000000B2 -:106EE00000000000000000000000000000000000A2 +:106ED000F505F505FF55CF4DD7D78282D714F7F4C6 +:106EE00059F3590C303030FF00F00FFF0FFF728262 :106EF0000000000000000000000000000000000092 :106F00000000000000000000000000000000000081 :106F10000000000000000000000000000000000071 :106F20000000000000000000000000000000000061 :106F30000000000000000000000000000000000051 :106F40000000000000000000000000000000000041 -:106F50000000000000000000000000000000000031 -:106F60000000000000000000000000000000000021 -:106F70000000000000000000000000000000000011 +:106F50000000AA30AAF3A0AFAAAA82D7C3C3101018 +:106F600010FB0F0F000027F0D70000000000FF14F7 +:106F70001F1F0000000027F0D700000000000000E5 :106F80000000000000000000000000000000000001 :106F900000000000000000000000000000000000F1 :106FA00000000000000000000000000000000000E1 :106FB00000000000000000000000000000000000D1 :106FC00000000000000000000000000000000000C1 -:106FD00000000000000000000000000000000000B1 -:106FE00000000000000000000000000000000000A1 -:106FF0000000000000000000000000000000000091 +:106FD000000000003030F3F3C0CFC3C3A0F5F0F0E1 +:106FE000FB10FBFB5555CF0C28FFD700000000001D +:106FF000FF1414140000000028FFD7000000000058 :107000000000000000000000000000000000000080 :107010000000000000000000000000000000000070 :107020000000000000000000000000000000000060 :107030000000000000000000000000000000000050 :107040000000000000000000000000000000000040 -:107050000000000000000000000000000000000030 -:107060000000000000000000000000000000000020 -:107070000000000000000000000000000000000010 -:107080000000000000000000000000000000000000 +:1070500000000000000040618007C02D1002406168 +:107060008007C02800020061000B000D00050061D0 +:10707000000D000500010061000700090005006126 +:1070800000070001000000000000000000000000F8 :1070900000000000000000000000000000000000F0 :1070A00000000000000000000000000000000000E0 :1070B00000000000000000000000000000000000D0 :1070C00000000000000000000000000000000000C0 -:1070D00000000000000000000000000000000000B0 -:1070E00000000000000000000000000000000000A0 -:1070F0000000000000000000000000000000000090 -:10710000000000000000000000000000000000007F +:1070D00000000000000000007F753F304B4B4BB4B8 +:1070E000C6FA05055050000ECCC90F0A5555A6A684 +:1070F0000C0C353500000000FF3C3D3D3030083BB6 +:1071000051FB5151303333330000000000000000C8 :10711000000000000000000000000000000000006F :10712000000000000000000000000000000000005F :10713000000000000000000000000000000000004F :10714000000000000000000000000000000000003F -:10715000000000000000000000000000000000002F -:10716000000000000000000000000000000000001F -:10717000000000000000000000000000000000000F -:1071800000000000000000000000000000000000FF +:10715000000000000000000000005F550F004BB46D +:107160004BB496AA55555050000EF0F50F0AFF008B +:107170000CF30C0CF50500000000FF000505303095 +:10718000083B51FBFBFB0000030000000000000077 :1071900000000000000000000000000000000000EF :1071A00000000000000000000000000000000000DF :1071B00000000000000000000000000000000000CF :1071C00000000000000000000000000000000000BF :1071D00000000000000000000000000000000000AF -:1071E000000000000000000000000000000000009F -:1071F000000000000000000000000000000000008F -:10720000000000000000000000000000000000007E +:1071E0000000000096AA55552828D727F5A5752533 +:1071F000C0FCEAFE00000000080D3F3F0000000058 +:10720000000000005F5F55550133013300000000AE :10721000000000000000000000000000000000006E :10722000000000000000000000000000000000005E :10723000000000000000000000000000000000004E :10724000000000000000000000000000000000003E :10725000000000000000000000000000000000002E -:10726000000000000000000000000000000000001E -:10727000000000000000000000000000000000000E -:1072800000000000000000000000000000000000FE +:1072600000000000000093AF50503C3CC333D0807E +:107270005000003CAABE00000000080D30300000A5 +:107280000000000000003F0F3C0000320032000010 :1072900000000000000000000000000000000000EE :1072A00000000000000000000000000000000000DE :1072B00000000000000000000000000000000000CE :1072C00000000000000000000000000000000000BE :1072D00000000000000000000000000000000000AE -:1072E000000000000000000000000000000000009E -:1072F000000000000000000000000000000000008E +:1072E0000400820020000000040084002000000050 +:1072F000200004000000200000000000000000004A :10730000000000000000000000000000000000007D :10731000000000000000000000000000000000006D :10732000000000000000000000000000000000005D :10733000000000000000000000000000000000004D :10734000000000000000000000000000000000003D :10735000000000000000000000000000000000002D -:10736000000000000000000000000000000000001D +:10736000000000000010000000000000000000000D :10737000000000000000000000000000000000000D :1073800000000000000000000000000000000000FD :1073900000000000000000000000000000000000ED @@ -55122,33 +55122,33 @@ :10743000000000000000000000000000000000004C :10744000000000000000000000000000000000003C :10745000000000000000000000000000000000002C -:10746000000000000000000000000000000000001C +:107460000000000000000000000000000008000014 :10747000000000000000000000000000000000000C -:1074800000000000000000000000000000000000FC +:107480000000000000000000000000000088000074 :1074900000000000000000000000000000000000EC :1074A00000000000000000000000000000000000DC :1074B00000000000000000000000000000000000CC :1074C00000000000000000000000000000000000BC :1074D00000000000000000000000000000000000AC :1074E000000000000000000000000000000000009C -:1074F000000000000000000000000000000000008C -:10750000000000000000000000000000000000007B -:10751000000000000000000000000000000000006B +:1074F000000000000010000082000000C00000003A +:107500000000080000000000000000000000000073 +:1075100000000800A0008200080008000000000031 :10752000000000000000000000000000000000005B :10753000000000000000000000000000000000004B :10754000000000000000000000000000000000003B :10755000000000000000000000000000000000002B -:10756000000000000000000000000000000000001B -:10757000000000000000000000000000000000000B -:1075800000000000000000000000000000000000FB -:1075900000000000000000000000000000000000EB +:107560000000000000000000000000C02100030037 +:1075700003080010000021C0080041000000218421 +:1075800021000300000003000010000000000000C4 +:1075900000002100000000000000000000000000CA :1075A00000000000000000000000000000000000DB :1075B00000000000000000000000000000000000CB :1075C00000000000000000000000000000000000BB :1075D00000000000000000000000000000000000AB -:1075E000000000000000000000000000000000009B -:1075F000000000000000000000000000000000008B -:10760000000000000000000000000000000000007A +:1075E000000000000000000000000000900000000B +:1075F000A0000000880000110411900004000000A9 +:1076000000000000000000000000820000000000F8 :10761000000000000000000000000000000000006A :10762000000000000000000000000000000000005A :10763000000000000000000000000000000000004A @@ -55163,25 +55163,25 @@ :1076C00000000000000000000000000000000000BA :1076D00000000000000000000000000000000000AA :1076E000000000000000000000000000000000009A -:1076F000000000000000000000000000000000008A +:1076F00008000000000000000000A0000000C00022 :107700000000000000000000000000000000000079 -:107710000000000000000000000000000000000069 +:107710000000000008000000000000000000000061 :107720000000000000000000000000000000000059 :107730000000000000000000000000000000000049 :107740000000000000000000000000000000000039 :107750000000000000000000000000000000000029 :107760000000000000000000000000000000000019 -:107770000000000000000000000000000000000009 -:1077800000000000000000000000000000000000F9 -:1077900000000000000000000000000000000000E9 -:1077A00000000000000000000000000000000000D9 +:10777000000008000000000008000800038440002A +:107780002184000021C003C0210008002100000066 +:107790000300030008002100000008004100080069 +:1077A00000000000000000000800000000000000D1 :1077B00000000000000000000000000000000000C9 :1077C00000000000000000000000000000000000B9 :1077D00000000000000000000000000000000000A9 :1077E0000000000000000000000000000000000099 -:1077F0000000000000000000000000000000000089 -:107800000000000000000000000000000000000078 -:107810000000000000000000000000000000000068 +:1077F00000000000000404004004040000009000A9 +:1078000082004000000008090000000400000000A1 +:107810000402000008000000040000000000000056 :107820000000000000000000000000000000000058 :107830000000000000000000000000000000000048 :107840000000000000000000000000000000000038 @@ -55370,7 +55370,7 @@ :1083B00000000000000000000000000000000000BD :1083C00000000000000000000000000000000000AD :1083D000000000000000000000000000000000009D -:1083E00000000000009000000000000000000000FD +:1083E00000000000208000000000000000000000ED :1083F000000000000000000000000000000000007D :10840000000000000000000000000000000000006C :10841000000000000000000000000000000000005C @@ -55378,7 +55378,7 @@ :10843000000000000000000000000000000000003C :10844000000000000000000000000000000000002C :10845000000000000000000000000000000000001C -:10846000000000000000010000000100000000000A +:10846000000000000000000000000000000000000C :1084700000000000000000000000000000000000FC :1084800000000000000000000000000000000000EC :1084900000000000000000000000000000000000DC @@ -55390,15 +55390,15 @@ :1084F000000000000000000000000000000000007C :10850000000000000000000000000000000000006B :10851000000000000000000000000000000000005B -:1085200000000000000000002000400020000000CB -:108530000000200000000000880020000000200053 -:10854000200040002000200020002000200000002B -:1085500000008800880000000000200000002000CB -:10856000200020002000200000002000400020000B -:10857000000000002000200000000000200000009B -:10858000200020002000200020001000000020001B -:10859000000000004000200000008800880000006B -:1085A00020000000880020002000000000000000E3 +:10852000000000000000000000000000000020002B +:1085300088000000880000000000000020002000EB +:10854000200020002000200000000000000020008B +:108550008800000020000000000000002000200033 +:10856000200020002000200000000000000000008B +:10857000200020000000200000008800880020006B +:10858000200020002000200020000000000000004B +:10859000200020000000200000002000000020003B +:1085A000200020002000200020000000000000002B :1085B00000000000000000000000000000000000BB :1085C00000000000000000000000000000000000AB :1085D000000000000000000000000000000000009B @@ -55411,24 +55411,24 @@ :10864000000000000000000000000000000000002A :108650000000000200000000000000000000000018 :10866000000000000000000000000000000000000A -:1086700000000000100200000000000000000000E8 +:1086700000000003000200000000000000000000F5 :1086800000000000000000000000000000000000EA -:1086900000000000000000000000000010020000C8 +:1086900000000000000800000000000010020000C0 :1086A00000000000000000000000000000000000CA -:1086B000000000000000000000000000000020009A -:1086C00000000000000000000000000000080000A2 -:1086D0000900000000010000000000000000000090 -:1086E0000000000000000000000000000008000082 -:1086F00000000000000080010000000000000000F9 -:108700000000000000000000000000000000000861 -:1087100000000000000000000000000000008001D8 -:108720000000000000000000000000000000000841 -:108730000000000000000000000000000000000039 +:1086B00000000008000800000000000000080000A2 +:1086C0000082000000000000000000080008000018 +:1086D000000000040083000000000000008400008F +:1086E0000000000800000000000000400040000002 +:1086F000000000000008000500000000000000006D +:108700000000000000080008000000000000000851 +:1087100000000000000800020000000000008001CE +:108720000000000000820082000000000008000835 +:108730000000000000000011000000000000000028 :108740000000000000000000000000000000000029 :108750000000000000000000000000000000000019 -:108760000000000000000000000000000000000009 -:1087700000030000000000000000000000000000F6 -:1087800000000000000000000000000000000000E9 +:1087600000000000000000210000000000000008E0 +:1087700000000000000000000008000000000000F1 +:1087800000000000000000000011000000000008D0 :1087900000000000000000000000000000000000D9 :1087A00000000000000000000000000000000000C9 :1087B00000000000000000000000000000000000B9 @@ -55439,31 +55439,31 @@ :108800000000000000000000000000000000000068 :108810000000000000000000000000000000000058 :108820000000000000000000000000000000000048 -:108830000000000082000800820000000000C0006C -:108840001000000082008200820000000000820010 -:108850001000000000000000820000000000000086 -:1088600000000000C000000000000000A0000000A8 -:1088700000000000000000000000000000000000F8 +:108830000000000000000000000000000000000038 +:108840000000000000000000000000008400C000E4 +:10885000000000000000000000000000080082008E +:108860000000000000000000000000000000000008 +:10887000000000000000A000A00000000080000038 :1088800000000000000000000000000000000000E8 -:108890000000000000000800C0000000840000008C -:1088A000A000000000000000080000000000080018 -:1088B00008000000000000000000000000000000B0 +:1088900000000000000000000000000000000000D8 +:1088A0000000000000000000000000000000C00008 +:1088B00000000000000000000000000000000000B8 :1088C00000000000000000000000000000000000A8 -:1088D0000000030000000000000000000000000095 -:1088E0000000000000001000000000000000000078 -:1088F0000000000000000003000000000000000075 -:108900000000000000000000210000000000000046 +:1088D0000000000000000000000000000000000098 +:1088E0000000000000000000000000000000000088 +:1088F000000000000000000300000000000000086D +:108900000000000000000000000000000000000067 :108910000000000000000000000000000000000057 :108920000000000000000000000000000000000047 -:108930000000000000000000000000001000000027 -:108940000000000000000000000000000000000027 -:1089500000000000000000000000400000000000D7 -:10896000000008000000000000004000820000003D -:1089700000000000000000000000000000000000F7 -:1089800000000000000000000000000000000011D6 -:1089900000000000000004000000000000000000D3 -:1089A00000000000080000000000C00000000000FF -:1089B00000000000000000110000000000000000A6 +:108930000000000000000000000000000000000037 +:108940000000000000000000000000008808000097 +:108950000000C0000002000300000000000800004A +:108960000000000000000000000000000000000007 +:1089700000000000000000000000000000000005F2 +:1089800000000000000000000000000000000000E7 +:1089900000000000000000000002000000000000D5 +:1089A00000000000000000000000000008000000BF +:1089B00000000000000000000000000000000000B7 :1089C00000000000000000000000000000000000A7 :1089D0000000000000000000000000000000000097 :1089E0000000000000000000000000000000000087 @@ -55471,15 +55471,15 @@ :108A00000000000000000000000000000000000066 :108A10000000000000000000000000000000000056 :108A20000000000000000000000000000000000046 -:108A30000000000000000000000000000000000036 -:108A400000000000000000000000840000000000A2 -:108A50000000000000000000000000000000000016 -:108A600000000000000000000000000008000000FE -:108A700000000000000000000000000000000000F6 -:108A80000800000000008200A00000008400000038 +:108A30000000000000000000002000000000000016 +:108A40000000000000000000000000000000000026 +:108A50000000000000000000000000050000000011 +:108A600000000008000000000000000500000000F9 +:108A700000000008820082000000000000000000EA +:108A800000000000002100000000002100000000A4 :108A900000000000000000000000000000000000D6 -:108AA00008000000000000000000000000000000BE -:108AB0000000000082000000000000000000000034 +:108AA00000000000000000000000000000000000C6 +:108AB00000000000000000000000000000000000B6 :108AC00000000000000000000000000000000000A6 :108AD0000000000000000000000000000000000096 :108AE0000000000000000000000000000000000086 @@ -55489,39 +55489,39 @@ :108B20000000000000000000000000000000000045 :108B30000000000000000000000000000000000035 :108B40000000000000000000000000000000000025 -:108B500000002000000000000000000000000000F5 -:108B600000002000000000000000000000000000E5 -:108B70000000000000000000000090000000000065 +:108B50000000000000000000000000000000000015 +:108B60000000000000000000000000000000000005 +:108B700000000000000000000000000000000000F5 :108B800000000000000000000000000000000000E5 :108B900000000000000000000000000000000000D5 :108BA00000000000000000000000000000000000C5 -:108BB00000000000000000000000010000000000B4 +:108BB00000000000000000000000000000000000B5 :108BC00000000000000000000000000000000000A5 -:108BD0000000400000000000000000000000000055 -:108BE0000000400000000000000000000000000045 +:108BD0000000000000000000000000000000000095 +:108BE0000000030000000000000000000000000082 :108BF0000000000000000000000000000000000075 -:108C00000000000000000000000000000000000064 +:108C00000000000300000000000000000000000061 :108C10000000000000000000000000000000000054 :108C20000000000000000000000000000000000044 -:108C30000000000000000000000000001000000024 +:108C30000000000000000000000000000300000031 :108C40000000000000000000000000000000000024 -:108C50000000000000000000000000030000000011 -:108C60000000000000000000000000030000000001 -:108C700000000000000000000000000080008000F4 -:108C800000000003000000000000000000000000E1 -:108C900000000000000080008000000000050000CF +:108C5000000000008000800000000009000000000B +:108C600000000000000000000000000900000000FB +:108C70000000000000000000000000000000800074 +:108C800000080009000000000000000000000000D3 +:108C90000000000000000000800000000020000034 :108CA00000000000000000000000000000000000C4 -:108CB0000000000000000000000000000000800034 -:108CC0008000000000030000000000000000000021 -:108CD0000000000000009000900000000001000073 -:108CE0000000000000000000000000000001000083 -:108CF0000000000000000000000000000000020072 -:108D00000200000000010000000000000000000060 -:108D1000000000000000000010000400000000003F +:108CB00000000000000000000000000000000000B4 +:108CC00000000000000400000000000000000000A0 +:108CD0000000000000001000100000000000000074 +:108CE0000000000000000000000000000000000084 +:108CF00000000000000000000000000000009000E4 +:108D00004000000100000000000000000000000022 +:108D10000000000000000000100010000000000033 :108D20000000000000000000000000000000000043 :108D30000000000000000000000000000000000033 -:108D400010002000000000000000000000000000F3 -:108D50000000000000000000000000000000000013 +:108D40009000A000000000010000000000000000F2 +:108D50000000000000000000000000009000000083 :108D60000000000000000000000000000000000003 :108D700000000000000000000000000000000000F3 :108D800000000000000000000000000000000000E3 @@ -55538,30 +55538,30 @@ :108E30000000000000000000000000000000000032 :108E40000000000000000000000000000000000022 :108E50000000000000000000000000000000000012 -:108E600000000500000000000000000000000000FD -:108E700000000300000000000000000000000000EF -:108E8000000000000005000000004000000200009B -:108E900000000000000000000000000000000005CD -:108EA000002000000300000000000000000000009F +:108E600000001100000000000000000000000000F1 +:108E700000000200000000000000000000000000F0 +:108E8000000000000040000000001100000200008F +:108E90000000000000000000000000000000004092 +:108EA00000000000080000000000000000000000BA :108EB00000000000000000000000000000000000B2 -:108EC000000000000000001000000000050000008D +:108EC0000000000000000000000000001100000091 :108ED0000000000000000000000000000000000092 :108EE0000000000000000000000000000000000082 :108EF0000000000000000000000000000000000072 :108F00000000000000000000000000000000000061 :108F10000000000000000000000000000000000051 -:108F20000000000000000100000000000000000040 +:108F20000000000000000000000000000000000041 :108F30000000000000000000000000000000000031 -:108F40000000000000000000000100000000000020 +:108F40000000000000000000000000000000000021 :108F50000000000000000000000000000000000011 -:108F6000884100900900C843000000000000000094 -:108F7000004100000900C8000000000000000000DF -:108F80000000000000000000818100900900C8433B +:108F6000842100500A009009000000000000000069 +:108F7000004100000A009000000000000000000016 +:108F80000000000000000000818100500A009009EC :108F900000000000000000000000000000000000D1 -:108FA0000000818100900900C8430000000000001B +:108FA0000000818100500A009009000000000000CC :108FB00000000000000000000000000000000000B1 -:108FC0000000000000000000000081810090090006 -:108FD000C843000000000000000000000000000086 +:108FC00000000000000000000000884100500A007E +:108FD00090090000000000000000000000000000F8 :108FE0000000000000000000000000000000000081 :108FF0000000000000000000000000000000000071 :109000000000000000000000000000000000000060 @@ -55578,22 +55578,22 @@ :1090B00000000000000000000000000000000000B0 :1090C0000000000000000000000000000000001090 :1090D00000001401940200000000000000000000E5 -:1090E0000000000000000040030810C00200000063 -:1090F00000000000000000400308000000400000E5 +:1090E0000000000000000040032004C00200000057 +:1090F00000000000000000400320000000400000CD :10910000000000000000000000000000000000401F -:10911000030810C002000000020000000000004030 -:1091200000000000000000000040030810C0020022 +:10911000032004C002000000020000000000004024 +:1091200000000000000000000040032004C0020016 :10913000000000000000000000000000000000002F :1091400002000000000000400000000000000000DD -:109150000040030810C002000000000000000000F2 -:10916000000000000000000008020008100040108D -:1091700000000000000000000802000800000000DD +:109150000040032004C002000000000000000000E6 +:109160000000000000000000080200200400401081 +:1091700000000000000000000802002000000000C5 :1091800000000000000000000000000000000000DF -:10919000080200081000401000000000000000005D -:1091A000000000000000000000000802000810009D +:109190000802002004004010000000000000000051 +:1091A0000000000000000000000008020020040091 :1091B000401000000000000000000000000000005F :1091C000000000000000000000000000000000009F -:1091D000000008020008100040100000000000001D +:1091D0000000080200200400401000000000000011 :1091E000000000000000000000000000000000007F :1091F000000000000000000000000000000000006F :10920000000000000000000000000000000000005E @@ -55634,15 +55634,15 @@ :1094300000000000000000909A0000000000000002 :109440000000000000000000000000000000000913 :10945000000000000000000000000000000000907C -:109460009A0000002000200020008800000000007A -:1094700020008800200020002000200020000000A4 -:10948000200020002000200084002000C0000000F8 -:109490002000200088002000200020008400000020 -:1094A0002000200000022000000020008800200092 -:1094B0000000880020002000200088002000840098 -:1094C000000020008800200000002000C00088006C -:1094D0000000200020002000200020008800200044 -:1094E00000002000880000000000000000000000D4 +:109460009A00000000000000000000000000000062 +:1094700020002000000000000000000000000000AC +:1094800000000000000000000000000000000000DC +:10949000200020000000000000000000000000008C +:1094A0000000880000000000000000000000000034 +:1094B000000020002000000000000000000000006C +:1094C000000000002000000000000000000000007C +:1094D000000020002000000000000000000000004C +:1094E000000000002000000000000000000000005C :1094F000000000000000000000000000000000006C :10950000000000000000000000000000000000005B :10951000000000000000000000000000000000004B @@ -55656,80 +55656,80 @@ :1095900000000000000000000000000000000000CB :1095A00000000000000000000000000000000000BB :1095B00000000000000000000000000000000000AB -:1095C0000000000001000000010000000000000099 +:1095C0000000000000000008000000000000000093 :1095D000000000000000000000000000000000008B :1095E000000000000000000000000000000000007B -:1095F0000000000000000000000800000000000063 -:10960000000000000000000000000000000000005A -:109610000000000000000000000800000000000042 -:109620000000000000000004000000000000000036 -:109630000000000000000000000000040000000026 -:109640000000000000000400000004000000000012 -:10965000000000000000000000000000000000000A -:1096600000000000000000000000000000000000FA -:1096700000000000000000000000000000000000EA +:1095F000000000000000000800080000000000005B +:109600000000000000000000000800000000000052 +:109610000000000000000004000400000000000042 +:1096200000000000000000000088000000000000B2 +:10963000000000000000000000080004000000001E +:109640000000000000000000008400000000000096 +:109650000000000000000000000800000000000002 +:1096600000000000000000000008000800000000EA +:1096700000000000000000000000004000000000AA :1096800000000000000000000000000000000000DA :1096900000000000000000000000000000000000CA -:1096A000000000000000000000400000000000007A +:1096A00000000000000000000000000000000000BA :1096B00000000000000000000000000000000000AA :1096C000000000000000000000000000000000009A -:1096D000000000000000000000000000000000008A -:1096E000000000000000000000000000000000007A -:1096F000000000000800000008000000000000005A -:109700000000000000000000080000000000000051 -:109710000000000000000000000000000000000049 +:1096D000000000000000000000000040000000004A +:1096E000000000000000000000000000100000006A +:1096F000000000000000000000000000000010005A +:109700000000000000000000002000000000000039 +:1097100000000084000000000000000000080000BD :109720000000000000000000000000000000000039 -:109730000000000000000800000000000800000019 -:109740000000000000000000000000000000080011 -:109750000000000000000000000000000000000009 -:1097600000000000000000000000000000000000F9 -:10977000000000000000840000000000000000085D -:1097800000000000000010000000000000001000B9 -:109790008400000008008200000000001021820800 -:1097A00000000000820082000000000082008200B1 -:1097B000000000000000820000000000A000000087 -:1097C000820000000000000000000800000000000F -:1097D0000000000000000000080008000000000079 -:1097E000C000000000000000000082000000000037 -:1097F0000800000000000000000000000000000061 -:109800000000000000000000000000000000000850 +:1097300000000000000000000000000000404000A9 +:109740000000000000000084000000000000000095 +:109750000000000000000084000000000000000085 +:109760000000000000000000000000000040004079 +:1097700000000000000000000000000000000000E9 +:1097800000000000000000000000000000000000D9 +:1097900000000000000000000000000000001000B9 +:1097A00000000000000000000000000000000000B9 +:1097B00000000000000000000000000000000000A9 +:1097C0000000000000000000000000000000000099 +:1097D0000000000000000000000000000000000089 +:1097E0001000000000000000000000000000000069 +:1097F0000000000000000000000000000000000069 +:109800000000000000000000000000000000000058 :109810000000000000000000000000000000000048 -:109820000000080000000000000000000000000030 +:109820000000000000000000000000000000000038 :109830000000000000000000000000000000000028 :109840000000000000000000000000000000000018 :109850000000000000000000000000000000000008 -:1098600000000000000000000000000000000000F8 +:1098600000000000000010000000000000001000D8 :1098700000000000000000000000000000000000E8 :1098800000000000000000000000000000000000D8 :1098900000000000000000000000000000000000C8 :1098A00000000000000000000000000000000000B8 :1098B00000000000000000000000000000000000A8 :1098C0000000000000000000000000000000000098 -:1098D0000000000000001000000000000000000078 -:1098E0000000000000000000000000000800000070 +:1098D0000000000000000000000000000000000088 +:1098E0000000000000000000000000000000000078 :1098F0000000000000000000000000000000000068 -:109900000000000000002100000000000300000033 +:109900000000000002000000040000000000000051 :109910000000000000000000000000000000000047 -:10992000000000000000000000000000000008002F -:109930000000000000000000000000000000000027 -:10994000000000000000000000000000080000000F -:109950000000000000000000000000000000000007 +:109920000000000000000000000000000000000037 +:10993000000000080200000000000000000000001D +:109940000000000000000000000000000000000017 +:109950000000000000000200000000000000000005 :1099600000000000000000000000000000000000F7 -:109970000800000041000500000000000000000099 -:1099800008000000000000000000000000000000CF +:1099700000000000000004000000000000000000E3 +:1099800000000000000000000000000000000000D7 :1099900000000000000000000000000000000000C7 -:1099A00000000000000000000000000000000000B7 -:1099B000000000000000000000000000080000009F +:1099A00000000000000800000000000000000000AF +:1099B00000000000000000000000000000000000A7 :1099C0000000000000000000000000000000000097 -:1099D0000000000000000080000000000000000007 -:1099E0000000000000000000000000000000000077 -:1099F0000000000000000000000000000000000067 +:1099D000000000000000000000080000000000007F +:1099E000000000000000000000080000000000006F +:1099F00000000000000000008200000000000000E5 :109A00000000000000000000000000000000000056 :109A10000000000000000000000000000000000046 :109A20000000000000000000000000000000000036 :109A30000000000000000000000000000000000026 :109A40000000000000000000000000000000000016 -:109A500000000000000000000020000000000000E6 +:109A50000000000000000000000000000000000006 :109A600000000000000000000000000000000000F6 :109A700000000000000000000000000000000000E6 :109A800000000000000000000000000000000000D6 @@ -55761,8 +55761,8 @@ :109C20000000000000000000000000000000000034 :109C30000000000000000000000000000000000024 :109C40000000000000000000000000000000000014 -:109C50000000000000000000000000000000009074 -:109C60000000009000000000000000000000000064 +:109C50000000000000000000000000000000000004 +:109C600000000000000000000000000000000000F4 :109C700000000000000000000000000000000000E4 :109C800000000000000000000000000000000000D4 :109C900000000000000000000000000000000000C4 @@ -55770,7 +55770,7 @@ :109CB00000000000000000000000000000000000A4 :109CC0000000000000000000000000000000000094 :109CD0000000000000000000000000000000000084 -:109CE0000000400000000000000000000000000034 +:109CE0000000000000000000000000000000000074 :109CF0000000000000000000000000000000000064 :109D00000000000000000000000000000000000053 :109D10000000000000000000000000000000000043 @@ -55778,7 +55778,7 @@ :109D30000000000000000000000000000000000023 :109D40000000000000000000000000000000000013 :109D50000000000000000000000000000000000003 -:109D60000000000080000000000000000000000073 +:109D600000000000000000000000000000000000F3 :109D700000000000000000000000000000000000E3 :109D800000000000000000000000000000000000D3 :109D900000000000000000000000000000000000C3 @@ -55786,7 +55786,7 @@ :109DB00000000000000000000000000000000000A3 :109DC0000000000000000000000000000000000093 :109DD0000000000000000000000000000000000083 -:109DE0000000004000000000000000000000000033 +:109DE0000000000000000000000000000000000073 :109DF0000000000000000000000000000000000063 :109E00000000000000000000000000000000000052 :109E10000000000000000000000000000000000042 @@ -55802,7 +55802,7 @@ :109EB00000000000000000000000000000000000A2 :109EC0000000000000000000000000000000000092 :109ED0000000000000000000000000000000000082 -:109EE000000000000000000000000700000000006B +:109EE0000000000000000000000000000000000072 :109EF0000000000000000000000000000000000062 :109F00000000000000000000000000000000000051 :109F10000000000000000000000000000000000041 @@ -55843,7 +55843,7 @@ :10A14000000000000000000000000000000000000F :10A1500000000000000000000000000000000000FF :10A1600000000000000000000000000000000000EF -:10A1700000000A00050000A0000000000000000030 +:10A1700000000000000000000000000000000000DF :10A1800000000000000000000000000000000000CF :10A1900000000000000000000000000000000000BF :10A1A00000000000000000000000000000000000AF @@ -55878,179 +55878,179 @@ :10A3700000000000000000000000000000000000DD :10A3800000000000000000000000000000000000CD :10A3900000000000000000000000000000000000BD -:10A3A00020002000000020002000000020002000ED -:10A3B00020000000000020002000200020002000DD -:10A3C00088000000000020002000000000002000A5 -:10A3D0000000000000002000840020002000200079 -:10A3E000000300000000000020000000000040000A -:10A3F000200000000000000020001000000000000D -:10A4000010000000000000002000000000002000FC -:10A4100020000000000000000000200000000000FC -:10A4200020000000000000000000000004004000C8 +:10A3A00000000000000000000000000000000000AD +:10A3B000000000000000200000000000000000007D +:10A3C000000000000000000040000000000000004D +:10A3D000000000000010200000000000000000004D +:10A3E000000000000000000000000000000000006D +:10A3F000000000000000000020100000000000002D +:10A40000000000000000000000000000000000004C +:10A41000000000000000000020000000000000001C +:10A42000000000000000000000000000000000002C :10A43000000000000000000000000000000000001C -:10A440000000040000000000000000000000000008 -:10A4500000000000040000000000000000000000F8 +:10A44000000000000000000000000000000000000C +:10A4500000000000000000000000000000000000FC :10A4600000000000000000000000000000000000EC -:10A47000000000000000000000000000800020003C -:10A48000000080000000000000000000000000004C +:10A4700000000000000000000000000000000000DC +:10A4800000000000000000000000000000000000CC :10A4900000000000000000000000000000000000BC :10A4A00000000000000000000000000000000000AC -:10A4B000000000000000000000000000000000009C +:10A4B000000000000000000000002000000000007C :10A4C000000000000000000000000000000000008C :10A4D000000000000000000000000010000000006C :10A4E000000000000000000000000000000000006C :10A4F000000000000000000000000000000000005C -:10A50000100010000010000000000000000000001B +:10A50000000000000010000000000000000000003B :10A51000000000000000000000000000000000003B -:10A520000000000000100000000000000084000097 -:10A530000000000000000000000000880008000883 -:10A5400000000000000800000000000000080000FB -:10A5500000000000000000000000000000080008EB -:10A5600000000000000800000000000000000008DB -:10A5700000000000000000000000000000000008D3 -:10A5800000088000800000040000000000000004BB -:10A5900000000082000000000000000000000084B5 -:10A5A000008400000000000000000000000000081F -:10A5B0000000000000020000000000000000001089 -:10A5C0000000000000000000000008000000000083 -:10A5D00000000000000000000000C00000000000BB +:10A52000000000000000000000000000000000002B +:10A53000000000000000000000000000001000000B +:10A54000000000000000000000000000000000000B +:10A5500000000000000000000000000000000000FB +:10A5600000000000000800000000000000000000E3 +:10A5700000000000000000000000000000000000DB +:10A5800000000000000000080000000000000000C3 +:10A5900000000000000000000000000000000000BB +:10A5A000000000000000001000000000000000009B +:10A5B000000000000000000000000000000000009B +:10A5C000000000000000000000000000000000008B +:10A5D000000000000000000000000000000000007B :10A5E000000000000000000000000000000000006B -:10A5F0000000000000080000000000000000000053 -:10A60000000000000000000000000000000000004A +:10A5F000000000000000000000000000000000005B +:10A6000000008800000000000000000000000000C2 :10A61000000000000000000000000000000000003A :10A62000000000000000000000000000000000002A :10A63000000000000000000000000000000000001A -:10A6400000000300000000000000080000000000FF +:10A64000000000000000000000000000000000000A :10A6500000000000000000000000000000000000FA :10A6600000000000000000000000000000000000EA :10A6700000000000000000000000000000000000DA -:10A6800000000000000000000000080000000000C2 +:10A6800000000000000000000000000000000000CA :10A6900000000000000000000000000000000000BA -:10A6A00000000800000000000000000000000000A2 -:10A6B0000000000082000000000000000200000016 -:10A6C0000000010000000000000000000000000089 -:10A6D000000000000000000000000000000000007A -:10A6E00000000000000000000000C00000000000AA -:10A6F00000000000C0000800000000008200000010 -:10A7000000000000000000000000000089000000C0 +:10A6A00000000000000000000000000000000000AA +:10A6B000000000000000000000000020000000007A +:10A6C000000000000000000000000000000000008A +:10A6D00000000000000000000000840000000000F6 +:10A6E00000000000000000000000000000008400E6 +:10A6F000000000000000000000000000000000005A +:10A700000000000000000000000000000000000049 :10A710000000000000000000000000000000000039 -:10A720000000000000000000000000000000000029 -:10A730000000000000000000000000000000800099 -:10A74000000000C004080008000000000000000035 -:10A7500000000000000800000000000010000000E1 -:10A76000000000000008000800A000000000000039 -:10A7700000000000000000080000000000000000D1 -:10A7800000000000000000000000000000002000A9 -:10A7900000000000000000000000000000000300B6 -:10A7A0000000000000A000A000A0000000000000C9 -:10A7B0000000000000000000000000000000000099 -:10A7C0000000000000200000000000000000000861 -:10A7D0000000000000000000000000000800000071 -:10A7E0000800000000000000080000000000000851 -:10A7F0000000080000000000000000000000000051 -:10A80000C000000000000000820000000000000006 +:10A720000000840000000000000000008400000021 +:10A7300000001000410000000000000003000000C5 +:10A740000000000000000000000000000000000009 +:10A7500000000000000000000000000000000000F9 +:10A7600000000000000000000500000003000000E1 +:10A7700010000000000021000000000000000000A8 +:10A7800003000000000000000000000000000000C6 +:10A7900000000000000000000000000000000000B9 +:10A7A0000000000000000000000040001000000059 +:10A7B0000000000000000000000000000800000091 +:10A7C0000000000000000000000000000000000089 +:10A7D0000000000000000000000000000000000079 +:10A7E0000000000000000000000000000000000069 +:10A7F0000000000000000000000000000000000059 +:10A800000000000000000000000000000000000048 :10A810000000000000000000000000000000000038 -:10A820000000000000000000000000000000000028 +:10A8200000000000000000000000840000000000A4 :10A830000000000000000000000000000000000018 -:10A840000000000000000001000000000000000007 +:10A840000000000000000000000000000000000008 :10A8500000000000000000000000000000000000F8 :10A8600000000000000000000000000000000000E8 :10A8700000000000000000000000000000000000D8 -:10A8800000000000000000000000000008000000C0 -:10A8900008000000000000000000000000000000B0 +:10A8800000000000000000000000000000000000C8 +:10A8900000000000000000000000000000000000B8 :10A8A00000000000000000000000000000000000A8 :10A8B0000000000000000000000000000000000098 :10A8C0000000000000000000000000000000000088 :10A8D0000000000000000000000000000000000078 :10A8E0000000000000000000000000000000000068 -:10A8F0000000000000000000000000000000000058 -:10A9000000000000000000000000C0000000000087 +:10A8F0000000100000000000000000000000000048 +:10A900000000000000000000000000000000000047 :10A910000000000000000000000000000000000037 :10A920000000000000000000000000000000000027 :10A930000000000000000000000000000000000017 -:10A940000000000000000082000000000000000085 -:10A9500000000000000000000000000000000000F7 -:10A960000000000000000082050000000000000060 +:10A9400000000000000000004100000000000000C6 +:10A9500000000000000800000000000000001000DF +:10A9600000000000000000000000000000000000E7 :10A9700000000000000000000000000000000000D7 -:10A9800000000000000000000000000000000000C7 +:10A9800008000000000000000000000000000000BF :10A9900000000000000000000000000000000000B7 -:10A9A00000000000000000000000000000000000A7 +:10A9A000000000000000000000000000000008009F :10A9B0000000000000000000000000000000000097 -:10A9C0000000000000000000000090000000009067 +:10A9C0000000000000000000000000000000000087 :10A9D0000000000000000000000000000000000077 :10A9E0000000000000000000000000000000000067 :10A9F0000000000000000000000000000000000057 :10AA00000000000000000000000000000000000046 -:10AA10000000010000000000000000000000000035 +:10AA10000000000000000000000000000000000036 :10AA20000000000000000000000000000000000026 :10AA30000000000000000000000000000000000016 -:10AA40000000000000000000000011008000000075 +:10AA40000000000000000000000000000000000006 :10AA500000000000000000000000000000000000F6 :10AA600000000000000000000000000000000000E6 :10AA700000000000000000000000000000000000D6 :10AA800000000000000000000000000000000000C6 -:10AA90000000000011000021000000000000000084 +:10AA900000000000000000000000000000000000B6 :10AAA00000000000000000000000000000000000A6 :10AAB0000000000000000000000000000000000096 -:10AAC0000000000000000000000000000000008006 -:10AAD00000000080000000000000000000000000F6 +:10AAC0000000000000000000000000000000000086 +:10AAD0000000000000000000000000000000000076 :10AAE0000000000000000000000000000000000066 :10AAF0000000000000000000000000000000000056 :10AB00000000000000000000000000000000000045 -:10AB100000000000000000400000110500000000DF +:10AB10000000000000000000000000000000000035 :10AB20000000000000000000000000000000000025 :10AB30000000000000000000000000000000000015 :10AB40000000000000000000000000000000000005 -:10AB50000020000000C00000000000000000000015 +:10AB500000000000000000000000000000000000F5 :10AB600000000000000000000000000000000000E5 :10AB700000000000000000000000000000000000D5 :10AB800000000000000000000000000000000000C5 -:10AB900000000000000000000000000001000000B4 +:10AB900000000000000000000000000000000000B5 :10ABA00000000000000000000000000000000000A5 :10ABB0000000000000000000000000000000000095 :10ABC0000000000000000000000000000000000085 -:10ABD0000100008888000100000000000000000063 +:10ABD0000000000000000000000000000000000075 :10ABE0000000000000000000000000000000000065 :10ABF0000000000000000000000000000000000055 :10AC00000000000000000000000000000000000044 -:10AC10000000000000000000000000000200000131 +:10AC10000000000000000000000000000000000034 :10AC20000000000000000000000000000000000024 :10AC30000000000000000000000000000000000014 :10AC40000000000000000000000000000000000004 -:10AC5000000041000080000009000000000000002A +:10AC500000000000000000000000000000000000F4 :10AC600000000000000000000000000000000000E4 :10AC700000000000000000000000000000000000D4 :10AC800000000000000000000000000000000000C4 -:10AC90000000000000000000000000000000800034 -:10ACA000000840000000000000000000000000005C +:10AC900000000000000000000000000000000000B4 +:10ACA00000000000000000000000000000000000A4 :10ACB0000000000000000000000000000000000094 :10ACC0000000000000000000000000000000000084 -:10ACD00000000000001100000080000000000000E3 +:10ACD0000000000000000000000000000000000074 :10ACE0000000000000000000000000000000000064 :10ACF0000000000000000000000000000000000054 :10AD00000000000000000000000000000000000043 :10AD10000000000000000000000000000000000033 -:10AD20001100000000000000000000000000000012 +:10AD20000000000000000000000000000000000023 :10AD30000000000000000000000000000000000013 :10AD40000000000000000000000000000000000003 -:10AD500000000000000000010000004000000000B2 +:10AD500000000000000000000000000000000000F3 :10AD600000000000000000000000000000000000E3 :10AD700000000000000000000000000000000000D3 :10AD800000000000000000000000000000000000C3 :10AD900000000000000000000000000000000000B3 -:10ADA00000000100000000000000000000000000A2 +:10ADA00000000000000000000000000000000000A3 :10ADB0000000000000000000000000000000000093 :10ADC0000000000000000000000000000000000083 -:10ADD00000000000000000000000000007008221C9 +:10ADD0000000000000000000000000000000000073 :10ADE0000000000000000000000000000000000063 :10ADF0000000000000000000000000000000000053 :10AE00000000000000000000000000000000000042 :10AE10000000000000000000000000000000000032 -:10AE20000000000000E00000000000000000000042 +:10AE20000000000000000000000000000000000022 :10AE30000000000000000000000000000000000012 :10AE40000000000000000000000000000000000002 :10AE500000000000000000000000000000000000F2 -:10AE6000F0F0000000000000000000000000000002 +:10AE600000000000000000000000000000000000E2 :10AE700000000000000000000000000000000000D2 :10AE800000000000000000000000000000000000C2 :10AE900000000000000000000000000000000000B2 @@ -56058,7 +56058,7 @@ :10AEB0000000000000000000000000000000000092 :10AEC0000000000000000000000000000000000082 :10AED0000000000000000000000000000000000072 -:10AEE0000000F0F000000000000000000000000082 +:10AEE0000000000000000000000000000000000062 :10AEF0000000000000000000000000000000000052 :10AF00000000000000000000000000000000000041 :10AF10000000000000000000000000000000000031 @@ -56074,7 +56074,7 @@ :10AFB0000000000000000000000000000000000091 :10AFC0000000000000000000000000000000000081 :10AFD0000000000000000000000000000000000071 -:10AFE0003C3C0000FFFF00000000000000000000EB +:10AFE0000000000000000000000000000000000061 :10AFF0000000000000000000000000000000000051 :10B000000000000000000000000000000000000040 :10B010000000000000000000000000000000000030 @@ -56082,7 +56082,7 @@ :10B030000000000000000000000000000000000010 :10B040000000000000000000000000000000000000 :10B0500000000000000000000000000000000000F0 -:10B0600000003C3C00000000000000000000000068 +:10B0600000000000000000000000000000000000E0 :10B0700000000000000000000000000000000000D0 :10B0800000000000000000000000000000000000C0 :10B0900000000000000000000000000000000000B0 @@ -56090,12 +56090,12 @@ :10B0B0000000000000000000000000000000000090 :10B0C0000000000000000000000000000000000080 :10B0D0000000000000000000000000000000000070 -:10B0E0000000000005002A00054000A80000000044 +:10B0E0000000000000000000000000000000000060 :10B0F0000000000000000000000000000000000050 :10B10000000000000000000000000000000000003F :10B11000000000000000000000000000000000002F :10B12000000000000000000000000000000000001F -:10B130000006000C000000000000000000000000FD +:10B13000000000000000000000000000000000000F :10B1400000000000000000000000000000000000FF :10B1500000000000000000000000000000000000EF :10B1600000000000000000000000000000000000DF @@ -56103,7 +56103,7 @@ :10B1800000000000000000000000000000000000BF :10B1900000000000000000000000000000000000AF :10B1A000000000000000000000000000000000009F -:10B1B0000000FF0000FF0000000000000000000091 +:10B1B000000000000000000000000000000000008F :10B1C000000000000000000000000000000000007F :10B1D000000000000000000000000000000000006F :10B1E000000000000000000000000000000000005F @@ -56111,7 +56111,7 @@ :10B20000000000000000000000000000000000003E :10B21000000000000000000000000000000000002E :10B22000000000000000000000000000000000001E -:10B2300000000000FF0000FF000000000000000010 +:10B23000000000000000000000000000000000000E :10B2400000000000000000000000000000000000FE :10B2500000000000000000000000000000000000EE :10B2600000000000000000000000000000000000DE @@ -56119,7 +56119,7 @@ :10B2800000000000000000000000000000000000BE :10B2900000000000000000000000000000000000AE :10B2A000000000000000000000000000000000009E -:10B2B000000000000000FF0000FF00000000000090 +:10B2B000000000000000000000000000000000008E :10B2C000000000000000000000000000000000007E :10B2D000000000000000000000000000000000006E :10B2E000000000000000000000000000000000005E @@ -56127,180 +56127,180 @@ :10B30000000000000000000000000000000000003D :10B31000000000000000000000000000000000002D :10B32000000000000000000000000000000000001D -:10B330000000000000000000FF0000FF000000000F +:10B33000000000000000000000000000000000000D :10B3400000000000000000000000000000000000FD -:10B350000000000000000000000000000000C0002D -:10B3600000000000000000000000000000002000BD -:10B3700000000000000000000000000000000000CD -:10B38000000000000000000000000000000020009D -:10B390000000C000000000000000000000000003EA -:10B3A0000000000000000000000000000008000095 -:10B3B0000000000020000000000000000000000469 -:10B3C0000000000000000000000000000000040079 -:10B3D00000000000200000000000000000008800C5 -:10B3E0000000000000002000000000000000040039 -:10B3F000000000000000000000000000200000002D +:10B3500000000000000000000000000000004000AD +:10B3600000000000000010000000000000020000CB +:10B3700000002000200000000000200800089000CD +:10B3800000009000100020000000000088008800ED +:10B39000000020002000000000002088008800033A +:10B3A000000000000000C0000000000000100000CD +:10B3B0000000000000002000000000002004002029 +:10B3C000000000000000200000000000A002C000FB +:10B3D0000000000000000000000000000008000065 +:10B3E000100000000000000000000000000000004D +:10B3F000000000000000000000000000000010003D :10B40000000000000000000000000000000000003C -:10B41000000000000000000000000000000000002C +:10B4100000000000000000000000000000200010FC :10B42000000000000000000000000000000000001C -:10B4300000002000000000000000000000000000EC -:10B4400000000000000000000000000000000000FC -:10B4500000000000000021000000000000000000CB +:10B43000000000000000000000000000000000010B +:10B440004001000021000000000000002100000079 +:10B45000400000000000000000000000000010009C :10B4600000000000000000000000000000000000DC -:10B4700000000000000400080000000000000000C0 -:10B4800010000000000000000000000000000000AC -:10B4900000000000000500000000000000000000A7 -:10B4A0002008000000000000000000000000000074 +:10B4700000000000000000000000000000000008C4 +:10B48000200000000000000000000000000000009C +:10B490000000000000000000000000000000008824 +:10B4A00040800000000000000000000000000000DC :10B4B000000000000000000000000000000000008C -:10B4C000000000000000000000000000000000007C -:10B4D0000000000000000003000000000000000069 -:10B4E000000000000000000000000000000000005C -:10B4F000000000000000000800000008000000003C -:10B5000000008008000800000000000000000000AB -:10B510000000000800000008008200080000000091 -:10B52000000080090000008400840008000000087A -:10B5300000000084008400000008000000080000F3 -:10B5400000840084008400840084008400840084DB -:10B5500000000088000000840008000000080000CF -:10B5600000000084000400080021000000210021E8 -:10B570000021002100000000002100000021002126 -:10B58000000500210008000800210000002100083B -:10B590000000000500000000004100000021002123 -:10B5A000000000000000000000210008000000086A -:10B5B000000800000000000000080040000000003B -:10B5C000000000000008000800000000000000006B -:10B5D00000000003000200210002002100050021FC -:10B5E0000021000000000008000000000000000032 -:10B5F0000000000000000000000000000004000047 -:10B60000000000000000000000000000000000003A -:10B61000000020000000000000000000000000000A -:10B62000000000000000000000000000000000001A +:10B4C0000088208000000000000000000000000054 +:10B4D000000000000000000000000000000000006C +:10B4E0000008400400000000000000000000000010 +:10B4F000000000000000000000000000000000004C +:10B5000000018000000000000000000000000000BA +:10B51000000000000000000000000000000000002B +:10B520000005802000000000000000000000000076 +:10B53000000000000000000000000000000000000B +:10B540000000002180100000000009000000000041 +:10B5500000000000000000000000000000000000EB +:10B560000000000180010000000000000000000059 +:10B5700000000000000000000000000000000000CB +:10B5800000000000000000000000000000000000BB +:10B5900000000000000000000000000000000000AB +:10B5A0000000000000000000000000030000000098 +:10B5B0000000000000000400000000000000000087 +:10B5C000000000000000000000000000000000007B +:10B5D000000000000000000000000000000000006B +:10B5E000001100000000000000000000000000004A +:10B5F000000000000000000000000000000000004B +:10B600000000000000000000000000000000090031 +:10B610000000000000000000000009000000000021 +:10B620000900000000000000000000000000000011 :10B63000000000000000000000000000000000000A :10B6400000000000000000000000000000000000FA -:10B650000000000000000000000000000082000068 -:10B6600000000000000000000000000000000800D2 -:10B6700000000000000000000000000000000000CA -:10B68000000000000000C0000004000000000000F6 -:10B6900000000000000000000000000000000000AA -:10B6A000000000000000000000000000000000009A -:10B6B000000000000000000000000000000000008A -:10B6C000000000000000000000000000000000007A -:10B6D00000000000000000000000C00000000000AA -:10B6E000000000000000000000002000000000003A +:10B6500000000000000009000000410000000000A0 +:10B6600008000000000000000400820000008200CA +:10B670008200000000000000000000000000000048 +:10B680000000000000000000088808000000000022 +:10B69000000000000000000000008400C000A000C6 +:10B6A000A0000000C0008400C084000082004000B0 +:10B6B0001000000000000000000000000800000072 +:10B6C00008000000000000000000008800000000EA +:10B6D00082000000000000000000A0000000000048 +:10B6E000000010000000A0000000828800000000A0 :10B6F000000000000000000000000000000000004A -:10B700000000000000000000000000010000000038 -:10B710000008000000000000000800000000000019 -:10B720000000000000000000000800080000000801 -:10B730000000000000000000000000A00000000069 -:10B7400000000000000000000000000000000000F9 +:10B700000000000000000000000000030000000036 +:10B710000000000000000000000000000000000029 +:10B720000000000000000000000000090000000010 +:10B730000000000000000000000000000000000009 +:10B7400000000000000000000000000000030000F6 :10B7500000000000000000000000000000000000E9 -:10B760000000000000000000000000088000000051 -:10B770000000000000000800900000000008000029 -:10B7800000400008400000000000000000410800E8 -:10B790000000000000000000900000000008000011 -:10B7A000002100020000000000080000004100032A -:10B7B0000000000000000000000000000000002168 +:10B7600000000000000000000000000000210000B8 +:10B77000000000000000100000008200080000002F +:10B780000000000000000000000000000000200099 +:10B790000000040004000000C00040008200C0005F +:10B7A00000004000000000009004000000000000C5 +:10B7B00008000000080008000011000082000800D6 :10B7C0000000000000000000000000000000000079 -:10B7D00002000000000000000000900000000000D7 -:10B7E00000050021000000000005000000000040EE +:10B7D00000000000000000000000880040000000A1 +:10B7E00000000000000000000400880000000011BC :10B7F0000000000000000000000000000000000049 -:10B8000000000000030000840000000000000000B1 +:10B800000000000000000000000000000000000038 :10B810000000000000000000000000000000000028 :10B820000000000000000000000000000000000018 :10B830000000000000000000000000000000000008 :10B8400000000000000000000000000000000000F8 -:10B850000084000000000000000000000000000064 +:10B8500004000000000000000000000000000000E4 :10B8600000000000000000000000000000000000D8 -:10B8700000000003000000000000000000000000C5 -:10B880000800000000080000000800050005000096 -:10B890000002000300080000000000000000820019 -:10B8A000C0000000000800030008000500050005B6 -:10B8B000000000000003002100080000000000005C -:10B8C0000000000000000000000000000000000078 -:10B8D0000000000000000000000000020000040062 -:10B8E0000000000000000008000000080008000040 -:10B8F00000050080000000000000000000000000C3 -:10B900000000000000000000000000000000000037 +:10B8700000000000C00000000800080008000000F0 +:10B880000000000000000000C000000000000000F8 +:10B89000000000000000000000000800000084001C +:10B8A0008400000000000000000000000000000014 +:10B8B0000000000000008200820082000800820078 +:10B8C0000000000000000000000010000000000068 +:10B8D00000000000000000000000840000000000E4 +:10B8E0000000000000008400000084000000000050 +:10B8F0000800000000000000000000000000000040 +:10B9000000000000000000000000000000900000A7 :10B910000000000000000000000000000000000027 :10B920000000000000000000000000000000000017 :10B930000000000000000000000000000000000007 :10B9400000000000000000000000000000000000F7 :10B9500000000000000000000000000000000000E7 :10B9600000000000000000000000000000000000D7 -:10B9700000000000000800010001000100C00001FB -:10B98000000100C0018900000101008400040001E1 -:10B99000000100C1000000010001000100C0000121 -:10B9A000000100C0018900000101000400820001C3 -:10B9B000000100C1000000000000000000000000C5 -:10B9C0000000000000000000000000000000000077 -:10B9D000000000000000000000010001000100C0A4 -:10B9E0000001000100C0008900010501000800827B -:10B9F0000001000100C00000004100410041008240 -:10BA0000004100410082044100114041008000805B -:10BA100000410041008500000041004100410082DA -:10BA200000410041008904410011404100800000B4 -:10BA300000410041008500000000000000000000FF -:10BA400000000000000000000000000000000000F6 -:10BA50000000000000000000000000410041004123 -:10BA6000008200410041009103410010904100001C -:10BA700000800041004100820000410003000000FE -:10BA8000008041008900000008008400028000104E -:10BA900083004100C100008000004100030000005D -:10BAA00000804100890000000800040002800000BE -:10BAB00085004100C100008000000000000000007F -:10BAC0000000000000000000000000000000000076 -:10BAD0000000000000000000000000004100030022 -:10BAE00000000080410089000000080084000280FE -:10BAF000009082004100C1000080000001000100B0 -:10BB0000000000C00100C000000001004000101053 -:10BB10000002C0081100C1000084101001000100E3 -:10BB2000000000C00100C00000000100A0001010D3 -:10BB30000004C0001100C1000084101000000000CB -:10BB400000000000000000000000000000000000F5 -:10BB500000000000000000000000000000000100E4 -:10BB60000100000000C00100C00000000100400012 -:10BB700010820011C1881100C1000084020200C0BF -:10BB80000001C0C100000000000100C00202000965 -:10BB9000000100C10000000000010000000000C022 -:10BBA0000001C0C100000000000100C11002000936 -:10BBB000000100C1000000000001000000000000C2 -:10BBC0000000000000000000000000000000000075 -:10BBD0000000000000000000000000000000000065 -:10BBE00000C00001C0C100000000000100C002024E -:10BBF0000011000100C10000000000010000000071 -:10BC00000080004180C100000000004100840089E4 -:10BC100000C1004100C10000000000410010000010 -:10BC20000080004180C100000000004100840089C4 -:10BC300000C1004100C100000000004100100000F0 -:10BC400000000000000000000000000000000000F4 -:10BC500000000000000000000000000000000000E4 -:10BC600000000080004180C100000000004100840D -:10BC7000008900C1004100C1000000000041000235 -:10BC80000000C100800080C10000410280009000DF -:10BC90004100C14180008010000041000000800090 -:10BCA0004100C100800080C100004102800090007E -:10BCB0004100C14180008009000041000000800077 -:10BCC0004100000000000000000000000000000033 -:10BCD0000000000000000000000000000000000064 -:10BCE00000000000C100800080C10000410280000F -:10BCF00090004100C14100008009000041000000A7 -:10BD000080004100C1004000C0C1000001002000CF -:10BD100010000100C1050800C00000000100000083 -:10BD2000C0000100C1004000C0C1000001002000AF -:10BD300010000100C1050800C00000000100000063 -:10BD4000C000010000000000000000000000000032 -:10BD500000000000000000000000000000000000E3 -:10BD6000000000000000C1004000C0C10000010050 -:10BD7000200010000100C1051000C00000000100FB -:10BD80000000C000010000000000000000420000B0 -:10BD90000000000000008112008807004800000039 -:10BDA0000000000000000000000000000042000051 -:10BDB0000000000000008112008807004800000019 -:10BDC0000000000000000000000000000000000073 -:10BDD0000000000000000000000000000000000063 -:10BDE0000000000000000000000000000000004211 -:10BDF00000000000000000008112008807004800D9 -:10BE00000000000000000000000000000000000032 +:10B9700000000000000000000000000000000000C7 +:10B980000000000100400001200000028290000041 +:10B9900000000001000000000000000000010000A5 +:10B9A0008800000001020100C0000020C0820000E9 +:10B9B000C0000001000000000000000000000001C5 +:10B9C00000000000000001020100C1000040C08230 +:10B9D0000000C000000100000000000000000000A6 +:10B9E00000000000000000900000C0000090C08235 +:10B9F0000000C00000010000000000000000000581 +:10BA000000000000000205004010210000808000BE +:10BA100000000000004100000000000000000010D5 +:10BA200000000000000303801005820000008080F9 +:10BA30000000800000030000000000000000000083 +:10BA400000020000000000030280100590000000CA +:10BA50008080000080000003000000000000000063 +:10BA600000080200000000410800000883000000F8 +:10BA70008080000080000003000000004000000003 +:10BA800000000000400000002000A00005000000B1 +:10BA9000020000000000000080080000100000000C +:10BAA00000000000080000002000A000108000102E +:10BAB0000300000000000080802000000000100053 +:10BAC000000000000000030000000500C000C0806E +:10BAD0000010030000000000008080050000080046 +:10BAE00000000000000008000000100041002000DD +:10BAF00000400300000000000080802000000000E3 +:10BB00000000000000000000000000000400900899 +:10BB100000000100900000000000C00100000000D3 +:10BB2000000000000000010000000000400089202B +:10BB3000000101009000000000C082000000000031 +:10BB400001000000000000000000000000004000B4 +:10BB50000220000101008200000000C082000000FD +:10BB600000000000000000000000000000001000C5 +:10BB70009008000001009000000000C0820000005A +:10BB8000000000000000000000000000820100A092 +:10BB900000000000000000000000000100000000A4 +:10BBA00000000000000000000000000190010040C3 +:10BBB0000000110000000000000000000000000074 +:10BBC00000000000000000000000000000009001E4 +:10BBD000000800000100000000000000000000005C +:10BBE0000000000000000000000000000001040050 +:10BBF0000010000001000000000000000000000034 +:10BC00000000000000000000000000000020001004 +:10BC100000000000200000000000000000410000C3 +:10BC200000000000000000000000000000080020EC +:10BC300000800000C1000000000000000041000082 +:10BC400000000000000000000000000000000041B3 +:10BC50000020000000004100000000000000004142 +:10BC600000000000000000000000000000000008CC +:10BC7000800300800000410000000000000000413F +:10BC800000000040800000C1000000088000880023 +:10BC9000000000C1000000400000000000000000A3 +:10BCA00008050010800000C1000000030020C10052 +:10BCB00000000041000000080000004100000000FA +:10BCC000200300000010800000C10000000280007E +:10BCD000C00000000041800000080000004100009A +:10BCE000000040080008800000C1000000080010AB +:10BCF000C1000000004100080003000000410000F6 +:10BD000000000520000020000040000000000400AA +:10BD100040000000000340000000000000000000A0 +:10BD200000000108000020000040000000000800A2 +:10BD30008200000000110800000000000001000067 +:10BD40000000008800000001200000400000000109 +:10BD500004000400000000210400000000000001B5 +:10BD60000000000000090000200000400000000169 +:10BD70008801820000000011200000010000000185 +:10BD8000000000000089000000000000000000002A +:10BD9000000000000000811200E0070048000000E1 +:10BDA0000000000000000000000000000000000093 +:10BDB000000000000000811200E040004842000046 +:10BDC00000000000484200000000000000000000E9 +:10BDD0000000000000000000811200E04000484226 +:10BDE00000000000000048420000000000000000C9 +:10BDF0000000000000000000811200E080004842C6 +:10BE000000000000000048420000000000000000A8 :10BE10000000000000000000000000000000000022 :10BE20000000000000000000000000000000000012 :10BE30000000000000000000000000000000000002 @@ -56320,111 +56320,111 @@ :10BF10000000000000000000000000000000000021 :10BF200000000000000000000000DEAE757B000095 :10BF30000000000000000000000000000000000001 -:10BF400000000000000000000000DEAE0000000065 +:10BF400000000000000000000000DEAE0000757B75 :10BF500000000000000000000000000000000000E1 -:10BF60000000000000000000000000000000757BE1 +:10BF6000000000000000000000000000DEAE757B55 :10BF700000000000000000000000000000000000C1 -:10BF8000000000000000000000000000DEAE60C6FF -:10BF900003000000000000000031E000000000008D -:10BFA00000000C0000000000000000C0630660C636 -:10BFB00003000000000000000031E000000000006D -:10BFC00000000C0000000000000000C0630600003C -:10BFD0000000000000000000000000000000000061 -:10BFE0000000000000000000000000000000000051 -:10BFF00060C603000000000000000031E000000007 -:10C00000000000000C0000000000000000C06306FB -:10C0100020002000000020000000000000002000A0 -:10C0200040000000000000000000000000000000D0 -:10C0300000002000000020001000000000001000A0 -:10C040002000000000000000000000000000880048 -:10C05000000100002000000020002000000000007F -:10C060002000200000000000000000000000000090 -:10C070002000000020000000200020000000000040 -:10C080002011A000080000000008000000000000CF +:10BF8000000000000000000000000000DEAE61269E +:10BF900003400000000000000230A000000000008C +:10BFA00000000C4000000000000002C06486612612 +:10BFB00003400000000000000230A000000000006C +:10BFC00000000C4000000000000002C06486000079 +:10BFD000612603400000000000000230A0000000C5 +:10BFE000000000000C4000000000000002C0648659 +:10BFF000612603400000000000000230A0000000A5 +:10C00000000000000C4000000000000002C0648638 +:10C010000000000000000000000000000000000020 +:10C0200000000000000000002000000000002000D0 +:10C03000000000004000000010000000A000000010 +:10C040004000A00000004000200000000000200090 +:10C0500000000000000020000000000000000000C0 +:10C0600000000000000000000000200000000000B0 +:10C070002000000000000000000000001000A000F0 +:10C0800000000000C00000000000200000000000D0 :10C090002000000000000000000000000000000080 -:10C0A0000000000000000000000000000000000090 -:10C0B00020000000000000000000800000000000E0 -:10C0C00080000000000000000000000000004000B0 +:10C0A0000000000000000000000008000000000088 +:10C0B0000000000000000000000000000000000080 +:10C0C000100021000000000000000000000000003F :10C0D0000000000000000000000000000000000060 -:10C0E0000000000000000000000000000000004010 -:10C0F0000000004000000000000000000000000000 -:10C10000000000000000000000000000000000002F -:10C11000000000000000000000000000000000001F -:10C12000000000000000000000000000000000000F -:10C1300000000000000000000000080000001000E7 -:10C1400000000000000000000000000000000000EF -:10C1500000000000000000000000000002000000DD -:10C1600000000000080000000000000000000000C7 +:10C0E0000000000000000000000000000000000050 +:10C0F000000000000000000000000004000000003C +:10C1000010000000100021000000000000000000EE +:10C11000009000000000000000000000000000008F +:10C12000000000000000001100009000000000006E +:10C1300000000000000000000000000000000000FF +:10C14000000000000000000000009000000000005F +:10C1500000000000000000000000000000000000DF +:10C16000000000000000000000000000900000003F :10C1700000000000000000000000000000000000BF -:10C18000000000000210000000000000000000009D -:10C190000000000000000000000000000000000897 -:10C1A000000800000008000000000008000000086F -:10C1B00000000088000800840000008800000008DB -:10C1C00080080000000800000000008800000088CF -:10C1D0000000000000080000000000000000000057 -:10C1E000000800080000000800080000000000002F -:10C1F00000000000000000080000000000840000B3 -:10C200000082000800000008000400000000000098 -:10C210000000000000000008000000000000000016 +:10C18000000000000000000000000000900000001F +:10C19000000000000000000000000000000000009F +:10C1A000000000000000000000000000000000008F +:10C1B000000000000000000000000000000000007F +:10C1C000000000000000000000000000000000006F +:10C1D0000000000000000000000000000000000857 +:10C1E000000000000000000800000000000000083F +:10C1F0000000000000000000000000000000000837 +:10C2000000000000000000400000000000000008E6 +:10C21000000000000000000000000000000000001E :10C22000000000000000000000000000000000000E :10C2300000000000000000000000000000000000FE -:10C2400000000000010000000008000000000000E5 +:10C2400000000000000000000000000000000000EE :10C2500000000000000000000000000000000000DE :10C2600000000000000000000000000000000000CE :10C2700000000000000000000000000000000000BE -:10C2800000000000000000000000000000000009A5 -:10C290000000000000000000000000000000000896 -:10C2A0000000000000000000000000000000000886 -:10C2B00000000008008200C000080000000000C06C -:10C2C000000000000000100000000008000000C096 -:10C2D00000C000C000000084000800000000000052 -:10C2E00000C000000000000000000000000000008E -:10C2F000000000000000000000000000000000003E -:10C30000000000000000000000000000000000002D -:10C3100000C0000000A000080000000800000000AD -:10C32000000000000000000000000000000000000D -:10C3300000000000A00000000000C000000000009D -:10C3400000000000000000000000090000000000E4 +:10C2800000000000000000000000000000000000AE +:10C29000000000000000000000000000000041005D +:10C2A0000300410008004100000000000000000001 +:10C2B000000000000000000000000000000004007A +:10C2C0000404200400902000000000000000090089 +:10C2D00011004004000000001000000000000000F9 +:10C2E000000000000000100000000000000000003E +:10C2F00000000000000000000000400000000000FE +:10C30000000011000000410041001000000000008A +:10C31000008241044088110000000000000000007D +:10C32000A0000000000000000000820000000000EB +:10C3300000000000000000000000000000000000FD +:10C34000000000000000000000000000C00000002D :10C3500000000000000000000000000000000000DD :10C3600000000000000000000000000000000000CD -:10C3700000000000000000000000000000000000BD -:10C3800000000000000000000000000000000800A5 -:10C390000000000000008800000000000000000015 +:10C37000000000000000A00000000000000000001D +:10C3800000000000000000000000000000000000AD +:10C390000000C00000000000000000008400000059 :10C3A000000000000000000000000000000000008D -:10C3B000000000000000000000000000000000007D -:10C3C000000000000000000000000000200000004D -:10C3D000000000000000000000000000000000005D -:10C3E000000000000000000000000000000000004D +:10C3B00000000000000000820090000000840000E7 +:10C3C0000000000000000000000000000008000065 +:10C3D0000000000000080000000000000000000055 +:10C3E00000000000000000840000000000000000C9 :10C3F000000000000000000000000000000000003D :10C40000000000000000000000000000000000002C :10C41000000000000000000000000000000000001C -:10C420000008000000000000000000000000000004 -:10C43000A000000000000000080000000000000054 -:10C44000002100000000C00000000000000000000B +:10C42000000040000000C00000000000000000000C +:10C4300000000000000000000000000000000000FC +:10C4400000000000000000080000400000000000A4 :10C4500000000000000000000000000000000000DC :10C4600000000000000000000000000000000000CC :10C4700000000000000000000000000000000000BC -:10C4800000000000000000000000000000000000AC -:10C49000000000000000000000000000000000009C -:10C4A000000000000000000000000008000800007C -:10C4B0000008000000000000000000000000000074 -:10C4C000000000000000000000000008000800005C -:10C4D0000008000000000000000000000000000054 -:10C4E000000000000000000000000000000000004C -:10C4F000000000000000000000000000000000003C -:10C500000000000000000000000000000002000821 -:10C5100000000008400002000000110800000000B8 -:10C520000000000000000000000000000800000003 -:10C5300000000000080000000000000000000000F3 -:10C5400000000000080000000000000000000000E3 +:10C48000000000000000080090008200040000008E +:10C4900088000000000000000000000000200400F0 +:10C4A0000000000000000000000000000000080084 +:10C4B0000000080000000300080000040000000065 +:10C4C000030400000000090000000000009040206C +:10C4D0000004110040900000100000200004000043 +:10C4E0000900000003000000000000000800000038 +:10C4F00008000000210008000000080000040000FF +:10C5000000000000000000000000000004004020C7 +:10C510004090002041000500000000000490000051 +:10C520000000050000000000000000000000000006 +:10C53000000000000000000000800000000000007B +:10C5400000000000000000000000001000000000DB :10C5500000000000000000000000000000000000DB -:10C5600000000000000000000000000800000000C3 -:10C5700000000000000000000000000000000000BB +:10C5600000000000000000000000000000000800C3 +:10C5700000000000001008000000000000000000A3 :10C5800000000000000000000000000000000000AB :10C59000000000000000000000000000000000009B :10C5A000000000000000000000000000000000008B -:10C5B000000000000000000000000000000000007B -:10C5C000000000000000000000000000000000006B +:10C5B0000000000000040000000000100000000067 +:10C5C0000900000000000000000000000000000062 :10C5D000000000000000000000000000000000005B :10C5E000000000000000000000000000000000004B :10C5F000000000000000000000000000000000003B @@ -56433,7 +56433,7 @@ :10C62000000000000000000000000000000000000A :10C6300000000000000000000000000000000000FA :10C6400000000000000000000000000000000000EA -:10C6500001000000000000000000000000000000D9 +:10C6500000000000000000000000000000000000DA :10C6600000000000000000000000000000000000CA :10C6700000000000000000000000000000000000BA :10C6800000000000000000000000000000000000AA @@ -56441,7 +56441,7 @@ :10C6A000000000000000000000000000000000008A :10C6B000000000000000000000000000000000007A :10C6C000000000000000000000000000000000006A -:10C6D0000000110000210000000000000000000028 +:10C6D000000000000000000000000000000000005A :10C6E000000000000000000000000000000000004A :10C6F000000000000000000000000000000000003A :10C700000000000000000000000000000000000029 @@ -56449,7 +56449,7 @@ :10C720000000000000000000000000000000000009 :10C7300000000000000000000000000000000000F9 :10C7400000000000000000000000000000000000E9 -:10C750000000000000400000110300000000000085 +:10C7500000000000000000000000000000000000D9 :10C7600000000000000000000000000000000000C9 :10C7700000000000000000000000000000000000B9 :10C7800000000000000000000000000000000000A9 @@ -56457,7 +56457,7 @@ :10C7A0000000000000000000000000000000000089 :10C7B0000000000000000000000000000000000079 :10C7C0000000000000000000000000000000000069 -:10C7D0000000000000000000000001000000000058 +:10C7D0000000000000000000000000000000000059 :10C7E0000000000000000000000000000000000049 :10C7F0000000000000000000000000000000000039 :10C800000000000000000000000000000000000028 @@ -56465,7 +56465,7 @@ :10C820000000000000000000000000000000000008 :10C8300000000000000000000000000000000000F8 :10C8400000000000000000000000000000000000E8 -:10C8500000000000000000000000200000010000B7 +:10C8500000000000000000000000000000000000D8 :10C8600000000000000000000000000000000000C8 :10C8700000000000000000000000000000000000B8 :10C8800000000000000000000000000000000000A8 @@ -56473,15 +56473,15 @@ :10C8A0000000000000000000000000000000000088 :10C8B0000000000000000000000000000000000078 :10C8C0000000000000000000000000000000000068 -:10C8D00000000000000000000000000080000008D0 -:10C8E0004000000000000000000000000000000008 +:10C8D0000000000000000000000000000000000058 +:10C8E0000000000000000000000000000000000048 :10C8F0000000000000000000000000000000000038 :10C900000000000000000000000000000000000027 :10C910000000000000000000000000000000000017 :10C920000000000000000000000000000000000007 :10C9300000000000000000000000000000000000F7 :10C9400000000000000000000000000000000000E7 -:10C9500000000000000000000000000000051100C1 +:10C9500000000000000000000000000000000000D7 :10C9600000000000000000000000000000000000C7 :10C9700000000000000000000000000000000000B7 :10C9800000000000000000000000000000000000A7 @@ -56490,7 +56490,7 @@ :10C9B0000000000000000000000000000000000077 :10C9C0000000000000000000000000000000000067 :10C9D0000000000000000000000000000000000057 -:10C9E0000100000000000000000000000000000046 +:10C9E0000000000000000000000000000000000047 :10C9F0000000000000000000000000000000000037 :10CA00000000000000000000000000000000000026 :10CA10000000000000000000000000000000000016 @@ -56498,7 +56498,7 @@ :10CA300000000000000000000000000000000000F6 :10CA400000000000000000000000000000000000E6 :10CA500000000000000000000000000000000000D6 -:10CA6000000000E0000000000000000000000000E6 +:10CA600000000000000000000000000000000000C6 :10CA700000000000000000000000000000000000B6 :10CA800000000000000000000000000000000000A6 :10CA90000000000000000000000000000000000096 @@ -56538,7 +56538,7 @@ :10CCB0000000000000000000000000000000000074 :10CCC0000000000000000000000000000000000064 :10CCD0000000000000000000000000000000000054 -:10CCE0000000000000000000000000000006000C32 +:10CCE0000000000000000000000000000000000044 :10CCF0000000000000000000000000000000000034 :10CD00000000000000000000000000000000000023 :10CD10000000000000000000000000000000000013 @@ -56546,8 +56546,8 @@ :10CD300000000000000000000000000000000000F3 :10CD400000000000000000000000000000000000E3 :10CD500000000000000000000000000000000000D3 -:10CD60000000000000000000000000000000FF00C4 -:10CD700000FF0000000000000000000000000000B4 +:10CD600000000000000000000000000000000000C3 +:10CD700000000000000000000000000000000000B3 :10CD800000000000000000000000000000000000A3 :10CD90000000000000000000000000000000000093 :10CDA0000000000000000000000000000000000083 @@ -56555,7 +56555,7 @@ :10CDC0000000000000000000000000000000000063 :10CDD0000000000000000000000000000000000053 :10CDE0000000000000000000000000000000000043 -:10CDF000FF0000FF00000000000000000000000035 +:10CDF0000000000000000000000000000000000033 :10CE00000000000000000000000000000000000022 :10CE10000000000000000000000000000000000012 :10CE20000000000000000000000000000000000002 @@ -56563,7 +56563,7 @@ :10CE400000000000000000000000000000000000E2 :10CE500000000000000000000000000000000000D2 :10CE600000000000000000000000000000000000C2 -:10CE70000000FF0000FF00000000000000000000B4 +:10CE700000000000000000000000000000000000B2 :10CE800000000000000000000000000000000000A2 :10CE90000000000000000000000000000000000092 :10CEA0000000000000000000000000000000000082 @@ -56571,201 +56571,201 @@ :10CEC0000000000000000000000000000000000062 :10CED0000000000000000000000000000000000052 :10CEE0000000000000000000000000000000000042 -:10CEF00000000000FF0000FF000000000000000034 +:10CEF0000000000000000000000000000000000032 :10CF00000000000000000000000000000000000021 :10CF10000000000000000000000000000000000011 :10CF20000000000000000000000000000000000001 :10CF300000000000000000000000000000000000F1 -:10CF400000000000000000000000000000000010D1 -:10CF500000100000000000000000200000000000A1 -:10CF600000000000000000000000000000000010B1 -:10CF70000000000000000000000020000000000091 -:10CF8000000000000000000000000000000300009E -:10CF90000000000000000000000000000000000091 -:10CFA0000000000000000000000000000000000081 -:10CFB000001000000000000000000000000200005F -:10CFC0000000000000000000000000000000000061 -:10CFD0000000000000000000000000000000000051 -:10CFE0000000000000000000000000000000000041 +:10CF400000000000000000000000000000000000E1 +:10CF500000000000200000000000000000000000B1 +:10CF600000000000000000000000200000000000A1 +:10CF70000000000020000000000000000000000091 +:10CF80000000100000000000000020000000000071 +:10CF90000000000000002000000000000000000071 +:10CFA0000000000000000000000000002000000061 +:10CFB0000000000000004000400000001000C00021 +:10CFC00000000400000088000000000020000000B5 +:10CFD000000000000000000000000000000000024F +:10CFE000000000000000000000020000000000003F :10CFF0000000000000000000000000000000000031 -:10D000000000000000000000000000000000000020 -:10D010000000000000000000000000000000000010 -:10D020000000000000000000000000000000000000 -:10D0300000000000000000000000000000000000F0 -:10D0400000000000000000001100000000000000CF -:10D0500000000000000000000000000000000400CC -:10D06000000000000000000002000000000082003C -:10D0700000000000000000000000000000000010A0 -:10D0800000000000000000000000000000000000A0 -:10D090000000000000000000000000000000000090 +:10D0000000002100000000000000000000000000FF +:10D0100000000000000010000000000000001000F0 +:10D0200000000000000000000000000000001000F0 +:10D0300000000000000021000000000000000000CF +:10D0400000000000000000000000000000020000DE +:10D05000000000000000C0000200020000100000FC +:10D060000400020004000420000000000000004151 +:10D0700000000000000000000000000000100000A0 +:10D08000000000000000000000000000000000415F +:10D090000000000000000000000000000000001080 :10D0A0000000000000000000000000000000000080 -:10D0B000000002000000000000000000000000006E -:10D0C0000000000000000000000000000000000060 -:10D0D0000000000000000000000000000000000050 -:10D0E00000000002000200000000800000000000BC -:10D0F0000000000000000000000000000000000030 -:10D10000000000000000000000000000000000001F -:10D11000000000000000000000000000000000000F -:10D1200000000000000000000000000000000000FF -:10D13000000000008000000000000000000000006F -:10D1400000000000000000000000000000000000DF -:10D1500000000000000000000000000000000000CF -:10D16000000000000000000000004000000000007F -:10D1700000000000000000000000000000000000AF -:10D18000000000000000000000000000000000009F -:10D19000000000000000000000000000000000008F -:10D1A000000000000000000000000000000000007F -:10D1B000000000000000000000000000000000006F -:10D1C000000000000000000000000400000000005B +:10D0B000004100000000000000000000000000101F +:10D0C0000010000000000000000000000000000050 +:10D0D000004100000000000000008000800000000F +:10D0E000000080008000800080010000000000003F +:10D0F0000000000000000000000800000000000028 +:10D10000000000000000000000820000000000009D +:10D11000008800000000000000000008000000007F +:10D1200000000008000000000000000000000000F7 +:10D1300000000008000000000000000800000000DF +:10D1400000000008000000000000000000000000D7 +:10D150000000008400000000000000000000080043 +:10D1600000030800000008000000000000050000A7 +:10D170000000000884030000000000000000000020 +:10D18000040000410003000004000400000000004F +:10D19000100000000000000000000000000000007F +:10D1A00000000000000000008200000008000000F5 +:10D1B00000000000000084000400000040000000A7 +:10D1C0000400040004008400880004000000000043 :10D1D000000000000000000000000000000000004F :10D1E000000000000000000000000000000000003F :10D1F000000000000000000000000000000000002F -:10D20000000000000000000000000000000000001E +:10D2000000000000002000000004000000000000FA :10D21000000000000000000000000000000000000E :10D2200000000000000000000000000000000000FE :10D2300000000000000000000000000000000000EE -:10D24000000000000000000000820000000000005C -:10D2500000000000000000000000000000000000CE -:10D2600008000000000000000000000000000000B6 -:10D2700000000000000001000000000000000000AD +:10D2400000000900000000000000000000000400D1 +:10D2500000000000000000000200000000000000CC +:10D26000002000200020000000000020000000003E +:10D2700000000000000000000000000000000000AE :10D28000000000000000000000000000000000009E -:10D29000000000000000000000000000000000008E -:10D2A0000000000000000000080000000000000076 +:10D29000000000000000000000000000C0000000CE +:10D2A000000000000000000000000000000000007E :10D2B000000000000000000000000000000000006E -:10D2C000010000000000000000000000000000005D -:10D2D000000000000000000000000000000000004E -:10D2E000000000000000000000000000000000003E -:10D2F000000000000000000004000000000000002A +:10D2C0000000080000000000000000000000000056 +:10D2D00000000000000000000000800000000000CE +:10D2E000000000010001000100000000000100003A +:10D2F000000000000000000000000000000000002E :10D30000000000000000000000000000000000001D :10D31000000000000000000000000000000000000D :10D3200000000000000000000000000000000000FD :10D3300000000000000000000000000000000000ED -:10D3400000000400000000000000000000000000D9 -:10D3500000000000000000000000000000000000CD -:10D3600000000000000000000000000000000000BD -:10D37000000000000000000000200000000000008D -:10D38000000000000000000000000000000000009D -:10D39000000000000000000000000000000000008D +:10D3400000000000000000000000000000000000DD +:10D3500000000000000000000000000002000000CB +:10D36000A000840000000000A000A0000000004118 +:10D37000000000410000000000000021000000004B +:10D380000000000000000000000000080000000095 +:10D390000000000000000000100000080000000075 :10D3A000000000000000000000000000000000007D -:10D3B00000000000000000000000000082000000EB -:10D3C000000000200000000000000000000000003D -:10D3D0000000000000000000000000000008000045 +:10D3B000000000000000000000000000000000006D +:10D3C000000000000000000000000000000000005D +:10D3D00000000000000000000000000000008000CD :10D3E000000000000000000000000000000000003D -:10D3F000000000000000000000000001000000002C -:10D400000000000000000000000000000084000098 -:10D41000000000000000000000000000000000000C +:10D3F000000000000000000000000000000000002D +:10D4000004000000000000204000000000000000B8 +:10D4100040000000000400000000040000000000C4 :10D4200000000000000000000000000000000000FC :10D4300000000000000000000000000000000000EC -:10D4400000000000000100000000000000000000DB -:10D4500000000000000000020000000000000000CA -:10D4600000000000000000020000000000000000BA -:10D4700000000000000000000000000000000000AC -:10D48000000000000000000000000000000000009C -:10D49000000000000000000200000000000000008A +:10D44000000000000000002000000000400000007C +:10D45000000000000000000010000020000000009C +:10D4600002000000A000840800000000A10001806C +:10D470000041000000050008000000000010000549 +:10D48000002100000000004100000000000000003A +:10D49000000000000000000000000000000000008C :10D4A000000000000000000000000000000000007C :10D4B000000000000000000000000000000000006C :10D4C000000000000000000000000000000000005C :10D4D000000000000000000000000000000000004C -:10D4E000000000000000000000000000000000003C -:10D4F000000000000000000000000000000000002C +:10D4E00000008000000000000000000000000200BA +:10D4F0000220000000000000000000000000000109 :10D50000000000000000000000000000000000001B :10D51000000000000000000000000000000000000B :10D5200000000000000000000000000000000000FB :10D5300000000000000000000000000000000000EB :10D5400000000000000000000000000000000000DB :10D5500000000000000000000000000000000000CB -:10D5600000000000000000000000000000000000BB -:10D57000000000000000000000000000000090001B +:10D5600000000000000000000000000000C01040AB +:10D570000008840200C01040000884C000000000C1 :10D58000000000000000000000000000000000009B :10D59000000000000000000000000000000000008B :10D5A000000000000000000000000000000000007B :10D5B000000000000000000000000000000000006B -:10D5C00000000000000000009000000200000000C9 +:10D5C000000000000000000000000000000000005B :10D5D000000000000000000000000000000000004B -:10D5E000000000000000000000000000000000003B -:10D5F000000000000000000000000000000011001A -:10D60000800000000000000000000000000000009A +:10D5E00000000000000000000000000000000280B9 +:10D5F000808005808080028080800580800000001F +:10D60000000000000000000000000000000000001A :10D61000000000000000000000000000000000000A :10D6200000000000000000000000000000000000FA :10D6300000000000000000000000000000000000EA -:10D6400000000000000000001100800000800000C9 +:10D6400000000000000000000000000000000000DA :10D6500000000000000000000000000000000000CA :10D6600000000000000000000000000000000000BA -:10D6700000000000000000000000000000000000AA -:10D68000000000800000008000000000000000009A +:10D670008000800380418080800080038041808022 +:10D68000000000000000000000000000000000009A :10D69000000000000000000000000000000000008A :10D6A000000000000000000000000000000000007A :10D6B000000000000000000000000000000000006A -:10D6C00000000000000000000000000000800000DA -:10D6D00000800000000000000000000000000000CA +:10D6C000000000000000000000000000000000005A +:10D6D000000000000000000000000000000000004A :10D6E000000000000000000000000000000000003A -:10D6F000000000000000000000000000000000002A -:10D70000000000000020000000C000000000000039 +:10D6F0000000400040C00801C00840004000080190 +:10D70000C008000000000000000000000000000051 :10D710000000000000000000000000000000000009 :10D7200000000000000000000000000000000000F9 :10D7300000000000000000000000000000000000E9 -:10D7400000000000000000000000000000000020B9 -:10D75000000000C000000000000000000000000009 +:10D7400000000000000000000000000000000000D9 +:10D7500000000000000000000000000000000000C9 :10D7600000000000000000000000000000000000B9 -:10D7700000000000000000000000000000000000A9 -:10D780000000000041000088880001000000000047 +:10D770000000000002040082408401C002400082D8 +:10D78000C08401C000000000000000000000000094 :10D790000000000000000000000000000000000089 -:10D7A0000000000000000000000000000000000079 +:10D7A0000000000000000000000000000001000078 :10D7B0000000000000000000000000000000000069 -:10D7C0000000000000000000000000000000010058 -:10D7D0000088880001000000000000000000000038 +:10D7C0000000000000000000000000000000000059 +:10D7D0000000000000000000000000000000000049 :10D7E0000000000000000000000000000000000039 -:10D7F0000000000000000000000000000000000029 -:10D80000000000000000410000800000090000004E +:10D7F000000000000000898000800080418080805F +:10D8000000808080418000000000000000000000D7 :10D810000000000000000000000000000000000008 -:10D8200000000000000000000000000000000000F8 +:10D8200000000000000000000000000000000001F7 :10D8300000000000000000000000000000000000E8 :10D8400000000000000000000000000000000000D8 -:10D8500041000080000009000000000000000000FE +:10D8500000000000000000000000000000000000C8 :10D8600000000000000000000000000000000000B8 -:10D8700000000000000000000000000000000000A8 -:10D880000000000000000000001100000080000007 +:10D8700000000000000000008008802180C000003F +:10D880008000800880880000000000000000000088 :10D890000000000000000000000000000000000088 :10D8A0000000000000000000000000000000000078 -:10D8B0000000000000000000000000000000000068 +:10D8B0000001000000000000000000000000000067 :10D8C0000000000000000000000000000000000058 -:10D8D00000000011000000800000000000000000B7 +:10D8D0000000000000000000000000000000000048 :10D8E0000000000000000000000000000000000038 -:10D8F0000000000000000000000000000000000028 -:10D9000000000000000000000000000100000040D6 +:10D8F00000000000000000000000C001820084045D +:10D900004002C00040008405C0A0000000000000EC :10D910000000000000000000000000000000000007 :10D9200000000000000000000000000000000000F7 -:10D9300000000000000000000000000000000000E7 +:10D9300000000001000000000000000000000000E6 :10D9400000000000000000000000000000000000D7 -:10D950000000000000010000004000000000000086 +:10D9500000000000000000000000000000000000C7 :10D9600000000000000000000000000000000000B7 :10D9700000000000000000000000000000000000A7 -:10D980000000000000000000000000000000000097 -:10D9900007008221000000000000000000000000DD +:10D980004000004200000000400000420000000093 +:10D990000000000000000000000000000000000087 :10D9A0000000000000000000000000000000000077 :10D9B0000000000000000000000000000000000067 :10D9C0000000000000000000000000000000000057 -:10D9D000000000000000000000000700822100009D +:10D9D0000000000000000000000000000000000047 :10D9E0000000000000000000000000000000000037 :10D9F0000000000000000000000000000000000027 :10DA00000000000000000000000000000000000016 -:10DA100000000000F0F00000000000000000000026 +:10DA10000000000000000000000000000000000006 :10DA200000000000000000000000000000000000F6 :10DA300000000000000000000000000000000000E6 :10DA400000000000000000000000000000000000D6 -:10DA50000000000000000000000000000000F0F0E6 +:10DA500000000000000000000000000000000000C6 :10DA600000000000000000000000000000000000B6 :10DA700000000000000000000000000000000000A6 :10DA80000000000000000000000000000000000096 -:10DA9000000000000000F0F00000000000000000A6 +:10DA90000000000000000000000000000000000086 :10DAA0000000000000000000000000000000000076 :10DAB0000000000000000000000000000000000066 :10DAC0000000000000000000000000000000000056 :10DAD0000000000000000000000000000000000046 -:10DAE000F0F0000000000000000000000000000056 +:10DAE0000000000000000000000000000000000036 :10DAF0000000000000000000000000000000000026 -:10DB00000000000000000000000000000000000015 -:10DB10000000000000000000000000000000000005 +:10DB00000000430840000084218641084000008452 +:10DB100021060000000000000000000000000000DE :10DB200000000000000000000000000000000000F5 :10DB300000000000000000000000000000000000E5 :10DB400000000000000000000000000000000000D5 @@ -56773,12 +56773,12 @@ :10DB600000000000000000000000000000000000B5 :10DB700000000000000000000000000000000000A5 :10DB80000000000000000000000000000000000095 -:10DB900000000000FFFF0000FFFF00000000000089 +:10DB90000000000000000000000000000000000085 :10DBA0000000000000000000000000000000000075 :10DBB0000000000000000000000000000000000065 :10DBC0000000000000000000000000000000000055 -:10DBD00000000000000000000000000000000F0F27 -:10DBE0000000FFFF00000000000000000000000037 +:10DBD0000000000000000000000000000000000045 +:10DBE0000000000000000000000000000000000035 :10DBF0000000000000000000000000000000000025 :10DC00000000000000000000000000000000000014 :10DC10000000000000000000000000000000000004 @@ -56786,15 +56786,15 @@ :10DC300000000000000000000000000000000000E4 :10DC400000000000000000000000000000000000D4 :10DC500000000000000000000000000000000000C4 -:10DC60000F0F000000000000000000000000000096 +:10DC600000000000000000000000000000000000B4 :10DC700000000000000000000000000000000000A4 -:10DC80000000000000000000000000000000000094 -:10DC9000000000000000000005002A00054000A868 +:10DC80000000000000100000100020080040000804 +:10DC90000000000800000008000000000000000074 :10DCA0000000000000000000000000000000000074 :10DCB0000000000000000000000000000000000064 :10DCC0000000000000000000000000000000000054 :10DCD0000000000000000000000000000000000044 -:10DCE000000005002A00054000A800000000000018 +:10DCE0000000000000000000000000000000000034 :10DCF0000000000000000000000000000000000024 :10DD00000000000000000000000000000000000013 :10DD10000000000000000000000000000000000003 @@ -56828,56 +56828,56 @@ :10DED0000000000000000000000000000000000042 :10DEE0000000000000000000000000000000000032 :10DEF0000000000000000000000000000000000022 -:10DF000000000000000000000000000000002000F1 +:10DF000000000000000000000000400000000000D1 :10DF10000000000000000000000000000000000001 -:10DF200000000000000000000000000000002000D1 -:10DF300000000000000000000000000000000000E1 -:10DF400000000000000000000000000000000000D1 -:10DF500020000000000000000000000000000000A1 -:10DF600000000000000000000000000000000000B1 -:10DF70002000000000000000000000000000000081 -:10DF80000000000000000000000000004000000051 +:10DF200000000000000020002000000000000000B1 +:10DF300000020000000000000000000000000000DF +:10DF40000000400000000000200000000000000071 +:10DF500000000000000000000000000000000000C1 +:10DF60000000000000000000000020000000000091 +:10DF70000000000000000000000000001000000091 +:10DF8000000000040000000000002000000000006D :10DF90000000000000000000000000000000000081 -:10DFA0000000000000000000000000000000000071 -:10DFB0000000000000000000100000000000000051 -:10DFC0000000000000000000000000000000000051 -:10DFD00000000000000000000000100000004000F1 -:10DFE0000000000000000000000000000000000031 +:10DFA00040000000000000000000000040000000F1 +:10DFB0000000100000000000000040000000000011 +:10DFC0000000000000001000000000000000000041 +:10DFD0000000000000000000000000000000000041 +:10DFE0000000000000000000000000001000000021 :10DFF0000000000000000000000000000000000021 :10E000000000000000000000000000000000000010 -:10E010000000000000000000000000000000000000 -:10E0200000000000000000000000000000000000F0 +:10E0100008000000000000000000000000000000F8 +:10E0200000000000004000000000000000000000B0 :10E0300000000000000000000000000000000000E0 :10E0400000000000000000000000000000000000D0 :10E0500000000000000000000000000000000000C0 -:10E06000000000000000000000000000020000109E +:10E0600000000000000000000000000000000000B0 :10E0700000000000000000000000000000000000A0 -:10E080000000000000000000000000000000001080 +:10E080000000000000000000000000000000000090 :10E090000000000000000000000000000000000080 :10E0A0000000000000000008000000000000000068 :10E0B0000000000000000000000000000000000060 :10E0C0000000000000000008000000000000000048 -:10E0D0000000000000000000000000000000000040 -:10E0E0000000000000000000000800000200000026 -:10E0F0000000000000000000000000000000000020 +:10E0D0000000000000000000000800000000000038 +:10E0E0000000000000000000000800000000000028 +:10E0F0000008000000000000000800000000000010 :10E100000000000000000000000800000000000007 -:10E1100000000000000000000000000000000000FF -:10E1200000000000000000000000000000000000EF -:10E1300000000000000000000000000000000000DF -:10E1400000000000000000000000000000000000CF +:10E1100000100000C000000000000000000000002F +:10E12000000000000000A000000000000800000047 +:10E1300000000800000000000008400004009000FB +:10E1400000001000040000000000040004000800AB :10E1500000000000000000000000000000000000BF -:10E1600000000000000000000000000000000000AF -:10E17000000000000000000000000000000000009F -:10E18000000000000400000000000000000000008B -:10E19000000000000000000000000000000000007F -:10E1A000000000000000000000000000000000006F +:10E1600000000000000000000000000000000400AB +:10E170000000840000000000000000000000040017 +:10E180009000000000000400000000008400000077 +:10E1900000009000000000000000000000000000EF +:10E1A000000000000000000000000000100000005F :10E1B000000000000000000000000000000000005F :10E1C000000000000000000000000000000000004F -:10E1D000000000000000000000000000000000003F -:10E1E000000000000000000000000000000000002F -:10E1F000000000000000000000000000000000001F +:10E1D0000000000800000000000000000000000037 +:10E1E0000000000000000000000000000000080027 +:10E1F000000000000000000000000000000004001B :10E20000000000000000000000000000000000000E -:10E2100000000000002000000000000000000000DE +:10E2100000000000000000000000000000000011ED :10E2200000000000000000000000000000000000EE :10E2300000000000000000000000000000000000DE :10E2400000000000000000000000000000000000CE @@ -56886,7 +56886,7 @@ :10E27000000000000000000000000000000000009E :10E28000000000000000000000000000000000008E :10E29000000000000000000000000000000000007E -:10E2A000000000000000000000000000000000006E +:10E2A000000011000000000000000000000000005D :10E2B000000000000000000000000000000000005E :10E2C000000000000000000000000000000000004E :10E2D000000000000000000000000000000000003E @@ -56902,24 +56902,24 @@ :10E37000000000000000000000000000000000009D :10E38000000000000000000000000000000000008D :10E39000000000000000000000000000000000007D -:10E3A000000000000000000000000000000000006D -:10E3B00000000000000000000000008400000000D9 +:10E3A000000000000000000200000000000000006B +:10E3B000000000A0000000000000000000000000BD :10E3C000000000000000000000000000000000004D :10E3D000000000000000000000000000000000003D :10E3E000000000000000000000000000000000002D :10E3F000000000000000000000000000000000001D -:10E400000000000000840000000000000000000088 +:10E4000000000000000010000000000000000400F8 :10E4100000000000000000000000000000000000FC -:10E4200000000000000000000000000000000000EC +:10E4200000000000000000009000900000000000CC :10E4300000000000000000000000000000000000DC -:10E4400000000000000200000000000000000000CA +:10E4400000000000000000000000000000000000CC :10E4500000000000000000000000000000000000BC :10E4600000000000000000000000000000000000AC :10E47000000000000000000000000000000000009C -:10E48000000000000000000000000000000000028A +:10E48000000000000000000000000000000000008C :10E49000000000000000000000000000000000007C :10E4A000000000000000000000000000000000006C -:10E4B000000000000000000000000000000000005C +:10E4B000000021000000000000000000000000003B :10E4C000000000000000000000000000000000004C :10E4D000000000000000000000000000000000003C :10E4E000000000000000000000000000000000002C @@ -57023,88 +57023,88 @@ :10EB00000000000000000000000000000000000005 :10EB100000000000000000000000000000000000F5 :10EB200000000000000000000000000000000000E5 -:10EB30000000000000000000000020002000200075 -:10EB40002000000020002000000000002000000045 -:10EB50000000000000000000000020002000200055 -:10EB60002000000020002000000000002000000025 -:10EB70000000000000000000000000022000200053 -:10EB80002000200000002000200000000000000005 -:10EB90000000000000000000000000002000200035 -:10EBA0002000200000000000200000000000000005 -:10EBB0000000000000000000000040000000000015 -:10EBC0000000000000000000000000000000000045 -:10EBD0000000000000000000000000000000000035 -:10EBE0000000000000000000000000000000000025 +:10EB300000000000000000000000000000020000D3 +:10EB400000000000000000000000000000000000C5 +:10EB500000000000000000000000000000000000B5 +:10EB600000000000000000000000000000000000A5 +:10EB70000000000000000000000000000000000095 +:10EB80000000000000000000000000000000000085 +:10EB90000000000000000000000000000000000075 +:10EBA0000000000000000000000000000000000065 +:10EBB0000000000000000000000000000000000055 +:10EBC0000000004000000000000000040000000001 +:10EBD0000000000000000000000200000000000231 +:10EBE0000002000000000000100000000000000013 :10EBF0000000000000000000000000000000000015 -:10EC00000000000000000000000000000000000004 -:10EC100000000000000000000000000000000000F4 -:10EC200000000000000000000000000000000000E4 -:10EC300000000000000000000000000000000000D4 -:10EC400000000000000000000000000000000000C4 -:10EC500000000000000000000000000002000000B2 -:10EC600000000000000000000000000000000000A4 -:10EC70000000000000000000000000000040000054 -:10EC80000000000000000000000000000000000084 -:10EC90000000000000000000000000000000000074 -:10ECA0000000000000000000010000000000000063 -:10ECB0000000000000000000010000000000000053 +:10EC00000000000000000000000000020000000002 +:10EC10000000000000004000400000040000000070 +:10EC200000000000000040000000000400000000A0 +:10EC30000000000000400000004000040040000010 +:10EC400000000000080000000000000000100000AC +:10EC5000840000000000000000000010020000001E +:10EC60000000000000000000000000000010000094 +:10EC70000000000000000000000000100200000082 +:10EC80000000000000000000000000000000001074 +:10EC90000000000000000000000000000010021052 +:10ECA0000000000000000000000000000000001054 +:10ECB0000000000000000000000000000010021032 :10ECC0000000000000000000000000000000000044 :10ECD0000000000000000000000000000000000034 :10ECE0000000000000000000000000000000000024 :10ECF0000000000000000000000000000000000014 :10ED00000000000000000000000000000000000003 :10ED100000000000000000000000000000000000F3 -:10ED200000000000000000000000020000000000E1 -:10ED300000000000000000000000040000000000CF +:10ED200000000000000000000000000000000000E3 +:10ED300000000000000000000000000000000000D3 :10ED400000000000000000000000000000000000C3 -:10ED500000000000000000000400000000000000AF -:10ED600000000000000000000000000000000000A3 -:10ED70000000000000000000000000000000000093 +:10ED5000000000000000880000000000000000002B +:10ED6000000000000000000000000000040000009F +:10ED70000000000004000400000004000000000087 :10ED80000000000000000000000000000000000083 :10ED90000000000000000000000000000000000073 -:10EDA0000000000000000000000000000000000063 -:10EDB0000000000000000000000000000000000053 +:10EDA000000000000000000000000400000000005F +:10EDB000040000000000000000000000000000004F :10EDC0000000000000000000000000000000000043 -:10EDD0000000000000000000000000000000000033 +:10EDD00000000000000000900000000000000000A3 :10EDE0000000000000000000000000000000000023 :10EDF0000000000000000000000000000000000013 :10EE00000000000000000000000000000000000002 -:10EE100000000000000000000000000000000000F2 +:10EE100000000000000000000000000004000000EE :10EE200000000000000000000000000000000000E2 -:10EE300000000000000000000000000000000000D2 -:10EE400000000000000000000000000000000000C2 -:10EE500000000000000000000000000000000000B2 -:10EE60000000000000100000000000000000000092 +:10EE300000000000000004000000000000000000CE +:10EE400000000000000000000000000000000004BE +:10EE500000040004000000000000000000000000AA +:10EE600000000000000000000000000000000000A2 :10EE70000000000000000000000000000000000092 :10EE80000000000000000000000000000000000082 :10EE90000000000000000000000000000000000072 -:10EEA000C0000000000000000000000000000000A2 -:10EEB00082000000000001000000000000000000CF +:10EEA0000000000000000000000000000000000062 +:10EEB0000000000000000000000000000000000052 :10EEC0000000000000000000000000000000000042 -:10EED0000000000000000000000000000000000032 +:10EED000000000000000000011000004000000001D :10EEE0000000000000000000000000000000000022 :10EEF0000000000000000000000000000000000012 :10EF00000000000000000000000000000000000001 :10EF100000000000000000000000000000000000F1 :10EF200000000000000000000000000000000000E1 -:10EF300000000000000000000400000000000000CD +:10EF300000000000000000000000000000000000D1 :10EF400000000000000000000000000000000000C1 :10EF500000000000000000000000000000000000B1 :10EF600000000000000000000000000000000000A1 :10EF70000000000000000000000000000000000091 :10EF80000000000000000000000000000000000081 -:10EF90000000000000000000000000000000080069 +:10EF90000000000000000000000000000000000071 :10EFA0000000000000000000000000000000000061 -:10EFB0000000000000000800002000000000000029 +:10EFB0000000000000000000000000000000000051 :10EFC0000000000000000000000000000000000041 :10EFD0000000000000000000000000000000000031 :10EFE0000000000000000000000000000000000021 -:10EFF0000000000000000000000000000000000011 +:10EFF00000000000000000000020000000000000F1 :10F000000000000000000000000000000000000000 :10F0100000000000000000000000000000000000F0 :10F0200000000000000000000000000000000000E0 -:10F0300000000000000000000000000100000000CF -:10F0400000000000000000000000000000000000C0 +:10F0300000000000000000000000002000000000B0 +:10F0400000000000000000000000000000200000A0 :10F0500000000000000000000000000000000000B0 :10F0600000000000000000000000000000000000A0 :10F070000000000000000000000000000000000090 @@ -57127,7 +57127,7 @@ :10F18000000000000000000000000000000000007F :10F19000000000000000000000000000000000006F :10F1A000000000000000000000000000000000005F -:10F1B00000000000000000000000000000009000BF +:10F1B000000000000000000000000000000000004F :10F1C000000000000000000000000000000000003F :10F1D000000000000000000000000000000000002F :10F1E000000000000000000000000000000000001F @@ -57135,8 +57135,8 @@ :10F2000000000000000000000000000000000000FE :10F2100000000000000000000000000000000000EE :10F2200000000000000000000000000000000000DE -:10F2300000000000000000000000000000001100BD -:10F24000800000000000000000000000000000003E +:10F2300000000000000000000000000000000000CE +:10F2400000000000000000000000000000000000BE :10F2500000000000000000000000000000000000AE :10F26000000000000000000000000000000000009E :10F27000000000000000000000000000000000008E @@ -57144,7 +57144,7 @@ :10F29000000000000000000000000000000000006E :10F2A000000000000000000000000000000000005E :10F2B000000000000000000000000000000000004E -:10F2C000000000800000008000000000000000003E +:10F2C000000000000000000000000000000000003E :10F2D000000000000000000000000000000000002E :10F2E000000000000000000000000000000000001E :10F2F000000000000000000000000000000000000E @@ -57152,7 +57152,7 @@ :10F3100000000000000000000000000000000000ED :10F3200000000000000000000000000000000000DD :10F3300000000000000000000000000000000000CD -:10F34000000000000020000000C0000000000000DD +:10F3400000000000000000000000000000000000BD :10F3500000000000000000000000000000000000AD :10F36000000000000000000000000000000000009D :10F37000000000000000000000000000000000008D @@ -57160,7 +57160,7 @@ :10F39000000000000000000000000000000000006D :10F3A000000000000000000000000000000000005D :10F3B000000000000000000000000000000000004D -:10F3C0000000000001000088880003000000000029 +:10F3C000000000000000000000000000000000003D :10F3D000000000000000000000000000000000002D :10F3E000000000000000000000000000000000001D :10F3F000000000000000000000000000000000000D @@ -57168,15 +57168,15 @@ :10F4100000000000000000000000000000000000EC :10F4200000000000000000000000000000000000DC :10F4300000000000000000000000000000000000CC -:10F440000000000000004100008000008900000072 -:10F45000000000000000400000000000000000006C +:10F4400000000000000000000000000000000000BC +:10F4500000000000000000000000000000000000AC :10F46000000000000000000000000000000000009C :10F47000000000000000000000000000000000008C :10F48000000000000000000000000000000000007C :10F49000000000000000000000000000000000006C :10F4A000000000000000000000000000000000005C :10F4B000000000000000000000000000000000004C -:10F4C00000000000000000000011000000800000AB +:10F4C000000000000000000000000000000000003C :10F4D000000000000000000000000000000000002C :10F4E000000000000000000000000000000000001C :10F4F000000000000000000000000000000000000C @@ -57184,7 +57184,7 @@ :10F5100000000000000000000000000000000000EB :10F5200000000000000000000000000000000000DB :10F5300000000000000000000000000000000000CB -:10F54000000000000000000000000001000000407A +:10F5400000000000000000000000000000000000BB :10F5500000000000000000000000000000000000AB :10F56000000000000000000000000000000000009B :10F57000000000000000000000000000000000008B @@ -57193,15 +57193,15 @@ :10F5A000000000000000000000000000000000005B :10F5B000000000000000000000000000000000004B :10F5C000000000000000000000000000000000003B -:10F5D0000700822100000000000000000000000081 -:10F5E0000700000000000000000000000000000014 +:10F5D000000000000000000000000000000000002B +:10F5E000000000000000000000000000000000001B :10F5F000000000000000000000000000000000000B :10F6000000000000000000000000000000000000FA :10F6100000000000000000000000000000000000EA :10F6200000000000000000000000000000000000DA :10F6300000000000000000000000000000000000CA :10F6400000000000000000000000000000000000BA -:10F650000000F0F0000000000000000000000000CA +:10F6500000000000000000000000000000000000AA :10F66000000000000000000000000000000000009A :10F67000000000000000000000000000000000008A :10F68000000000000000000000000000000000007A @@ -57209,7 +57209,7 @@ :10F6A000000000000000000000000000000000005A :10F6B000000000000000000000000000000000004A :10F6C000000000000000000000000000000000003A -:10F6D00000000000F0F0000000000000000000004A +:10F6D000000000000000000000000000000000002A :10F6E000000000000000000000000000000000001A :10F6F000000000000000000000000000000000000A :10F7000000000000000000000000000000000000F9 @@ -57217,7 +57217,7 @@ :10F7200000000000000000000000000000000000D9 :10F7300000000000000000000000000000000000C9 :10F7400000000000000000000000000000000000B9 -:10F750000000000055550000FFFF00000000000001 +:10F7500000000000000000000000000000000000A9 :10F760000000000000000000000000000000000099 :10F770000000000000000000000000000000000089 :10F780000000000000000000000000000000000079 @@ -57225,7 +57225,7 @@ :10F7A0000000000000000000000000000000000059 :10F7B0000000000000000000000000000000000049 :10F7C0000000000000000000000000000000000039 -:10F7D000000000000000555500000000000000007F +:10F7D0000000000000000000000000000000000029 :10F7E0000000000000000000000000000000000019 :10F7F0000000000000000000000000000000000009 :10F8000000000000000000000000000000000000F8 @@ -57233,8 +57233,8 @@ :10F8200000000000000000000000000000000000D8 :10F8300000000000000000000000000000000000C8 :10F8400000000000000000000000000000000000B8 -:10F8500000000000000005002A00054000A800008C -:10F860000000000000000500000000000000000093 +:10F8500000000000000000000000000000000000A8 +:10F860000000000000000000000000000000000098 :10F870000000000000000000000000000000000088 :10F880000000000000000000000000000000000078 :10F890000000000000000000000000000000000068 @@ -57268,45 +57268,45 @@ :10FA500000000000000000000000000000000000A6 :10FA60000000000000000000000000000000000096 :10FA70000000000000000000000000000000000086 -:10FA80000000000000000000000000000000000076 +:10FA80000000000000000000000000002000000056 :10FA90000000000000000000000000000000000066 -:10FAA0004000000000000000000000000000000016 +:10FAA0000000000000000000000000002000000036 :10FAB0000000000000000000000000000000000046 -:10FAC0000000200000000000000000000000000016 +:10FAC0000000000000000000000000000000200016 :10FAD0000000000000000000000000000000000026 -:10FAE00000002000000000000000000000000000F6 -:10FAF0000000000000000000000000000000000006 -:10FB000000000000000000000000000000000000F5 -:10FB100000000000000000000000000000000000E5 -:10FB200000000000000000000000000000000000D5 -:10FB30000000000000000000000040000000000085 +:10FAE00000000000000000000000000000002000F6 +:10FAF00000000000000010000000000040000000B6 +:10FB00004000000000000000400000000000000075 +:10FB100000000000000010001000000200020002BF +:10FB20004000000000020000000000000000000093 +:10FB300000020000000000000000000000000000C3 :10FB400000000000000000000000000000000000B5 -:10FB500000000000000000000000000000000000A5 -:10FB60000000000000000000000000000000000095 -:10FB70000000000000000000000000000000000085 -:10FB80000000000000000000000000000000000075 -:10FB90000000000000000000000000000000000065 -:10FBA0000040000000000000000000000000000015 -:10FBB0000000000000000000000000000000000045 -:10FBC00000000040000000000000020000000000F3 -:10FBD0000000000000000000000000000000000025 -:10FBE00000000000000000000000004000000000D5 -:10FBF0000000000000000000000000000000000005 -:10FC000000000000000800080008000800080008C4 -:10FC100000000000000000000000000800000000DC -:10FC200000000000000802080008000800080008A2 -:10FC300000000000000000000000000800000000BC -:10FC4000000000000000000800080008000800088C -:10FC50000008000000000000000000000084000018 -:10FC60000000000000000008040800040004000870 -:10FC7000000800000000000000000000000000007C +:10FB50000000400000000000000000000000000065 +:10FB6000000200020002000000020000000000008D +:10FB70000002000000020000000000000000000081 +:10FB8000080000000000000000000000000000006D +:10FB90000040002100000000000000000000000004 +:10FBA0000000000000000000000000000000000055 +:10FBB0000040000000000000000000000000000005 +:10FBC0000000000000000000000000000000000035 +:10FBD00000000040000000000000000000000000E5 +:10FBE0000000000000000000000000000000000015 +:10FBF00000000040000000000000000000000000C5 +:10FC000000000000000000000000000000000000F4 +:10FC100000000000000000000000000000000000E4 +:10FC200000000000000000000000000000000000D4 +:10FC300000000000000000000000000000000000C4 +:10FC400000000000000000000000000000000000B4 +:10FC500000000000000000000000000000000000A4 +:10FC60000000000000000000000000000000000094 +:10FC70000000000000000000000000000000000084 :10FC80000000000000000000000000000000000074 :10FC90000000000000000000000000000000000064 -:10FCA0000000000000000000000000000000000054 +:10FCA0000000000000004000000000000000000014 :10FCB0000000000000000000000000000000000044 :10FCC0000000000000000000000000000000000034 :10FCD0000000000000000000000000000000000024 -:10FCE0000000000000000000000000000000001004 +:10FCE0000000000000000000000000000000000014 :10FCF0000000000000000000000000000000000004 :10FD000000000000000000000000000000000000F3 :10FD100000000000000000000000000000000000E3 @@ -57316,7 +57316,7 @@ :10FD500000000000000000000000000000000000A3 :10FD60000000000000000000000000000000000093 :10FD70000000000000000000000000000000000083 -:10FD80000000000000000000000000000000000073 +:10FD8000000000000000000000000004004100002E :10FD90000000000000000000000000000000000063 :10FDA0000000000000000000000000000000000053 :10FDB0000000000000000000000000000000000043 @@ -57324,14 +57324,14 @@ :10FDD0000000000000000000000000000000000023 :10FDE0000000000000000000000000000000000013 :10FDF0000000000000000000000000000000000003 -:10FE000000000000000000000000000000000000F2 +:10FE000000000000000000000000000000040000EE :10FE100000000000000000000000000000000000E2 :10FE200000000000000000000000000000000000D2 :10FE300000000000000000000000000000000000C2 :10FE400000000000000000000000000000000000B2 -:10FE50000000000000100000000000000000000092 +:10FE500000000000000000000000000000000000A2 :10FE60000000000000000000000000000000000092 -:10FE7000000000000008000000000000000000007A +:10FE70000000000000000000000000000000000082 :10FE80000000000000000000000000000000000072 :10FE90000000000000000000000000000000000062 :10FEA0000000000000000000000000000000000052 @@ -57341,13 +57341,13 @@ :10FEE0000000000000000000000000000000000012 :10FEF0000000000000000000000000000000000002 :10FF000000000000000000000000000000000000F1 -:10FF100000000000000000000000000000000000E1 +:10FF100000000000000000000000400000000000A1 :10FF200000000000000000000000000000000000D1 :10FF300000000000000000000000000000000000C1 :10FF400000000000000000000000000000000000B1 :10FF500000000000000000000000000000000000A1 :10FF60000000000000000000000000000000000091 -:10FF700000000000000000000084000000000000FD +:10FF70000000000000000000000000000000000081 :10FF80000000000000000000000000000000000071 :10FF90000000000000000000000000000000000061 :10FFA0000000000000000000000000000000000051 @@ -57357,7 +57357,7 @@ :10FFE0000000000000000000000000000000000011 :10FFF0000000000000000000000000000000000001 :02000004000EEC -:1000000000000002000000000000000000000000EE +:1000000000000000000000000000000000000000F0 :1000100000000000000000000000000000000000E0 :1000200000000000000000000000000000000000D0 :1000300000000000000000000000000000000000C0 @@ -57521,39 +57521,39 @@ :100A100000000000000000000000000000000000D6 :100A200000000000000000000000000000000000C6 :100A300000000000000000000000000000000000B6 -:100A400000000000000000000000000000000000A6 -:100A50002000200000000000000000000000000056 -:100A60000000000000000000000000000000000086 -:100A70002000200000000000000000000000000036 -:100A80000000000000000000000000000000000066 -:100A90000000200020000000000000000000000016 -:100AA0000000000000000000000000000000000046 -:100AB00000002000200000000000000000000000F6 -:100AC0000000000000000002000200000000000022 -:100AD0000000000000000000000000000000000016 -:100AE0000000000000000000000000000000000006 -:100AF00000000000000000000000000000000000F6 -:100B000000000000000000000000000000000000E5 -:100B100000000000000000000000000000000000D5 -:100B200000000000000010020000000200000000B1 -:100B300000000000000000000000000000000000B5 -:100B400000000000000002000000000000000000A3 -:100B50000000000000000200000000000000000093 -:100B6000000000000000080000000000000000007D -:100B70000000000000000000000000000000000075 -:100B8000000900000000000000000000000000005C -:100B90000000000000000000000000000000000055 -:100BA0000000000000000000000000000000000045 +:100A40000004000000000000000010000000000092 +:100A50000000000400000000000000000000000092 +:100A60000000000000000000000020000000400026 +:100A70000000000000000000000000000000000076 +:100A80000000000000000000000000002000000046 +:100A90002000000000000000000000000000000036 +:100AA0000000000400000000000000002000000022 +:100AB0002000000400000000000000000000000012 +:100AC0000000000000000002000000000000000024 +:100AD000000400000000000200000000000000020E +:100AE00000020000000200000002000200000000FE +:100AF00000020000000000000000000000020000F2 +:100B00004000400000020000000000000000000063 +:100B1000400000000002000000020000000000028F +:100B200040020002400200004000000200020000FB +:100B300000000002000200000000000000000000B1 +:100B4000000000000800000000000000000000009D +:100B50000000000000000010000000000000000085 +:100B60000000000000100000000000000000000075 +:100B70000000000000000010000000000000000065 +:100B80000000000000000010001000000000000045 +:100B90000000000000000000001000000000000045 +:100BA0000000000000000010001000000000000025 :100BB0000000000000000000000000000000000035 -:100BC0000008000000000000040000000000000019 -:100BD0000000020000000000000000000000000013 -:100BE00000080000000000000000000000000000FD +:100BC0000000000000000000000000000000000025 +:100BD0000000000000000000000000000000000015 +:100BE0000000000000000000000000000000000005 :100BF00000000000000000000000000000000000F5 -:100C000000000008000000000000000000000000DC -:100C100000000000000000000000000002000000D2 -:100C2000000000880000000000000000000000003C -:100C300000000000040000000000000000000000B0 -:100C400000000000000000000000000000000000A4 +:100C000000000000000000000000000000000000E4 +:100C100000000000000000000000000000000000D4 +:100C200000000000000000000000000000000000C4 +:100C300000000000000000000000000000000000B4 +:100C400000000004000000000000000000000000A0 :100C50000000000000000000000000000000000094 :100C60000000000000000000000000000000000084 :100C70000000000000000000000000000000000074 @@ -57569,8 +57569,8 @@ :100D100000000000000000000000000000000000D3 :100D200000000000000000000000000000000000C3 :100D300000000000000000000000000000000000B3 -:100D400000000000000000000000000000000000A3 -:100D5000000000000000000000000000000000048F +:100D40000041000000000000000000400000000022 +:100D50000040004000400040000000000000000093 :100D60000000000000000000000000000000000083 :100D70000000000000000000000000000000000073 :100D80000000000000000000000000000000000063 @@ -57578,7 +57578,7 @@ :100DA0000000000000000000000000000000000043 :100DB0000000000000000000000000000000000033 :100DC0000000000000000000000000000000000023 -:100DD0000000000000000000000000000000000013 +:100DD00000000000000000000040000000000000D3 :100DE0000000000000000000000000000000000003 :100DF00000000000000000000000000000000000F3 :100E000000000000000000000000000000000000E2 @@ -57601,7 +57601,7 @@ :100F100000000000000000000000000000000000D1 :100F200000000000000000000000000000000000C1 :100F300000000000000000000000000000000000B1 -:100F400000000000000000000000000000000000A1 +:100F4000000000000000000000000000000002009F :100F50000000000000000000000000000000000091 :100F60000000000000000000000000000000000081 :100F70000000000000000000000000000000000071 @@ -57610,7 +57610,7 @@ :100FA0000000000000000000000000000000000041 :100FB0000000000000000000000000000000000031 :100FC0000000000000000000000000000000000021 -:100FD0000000000000000000000000000000000011 +:100FD000000020400004200021000000000000006C :100FE0000000000000000000000000000000000001 :100FF00000000000000000000000000000000000F1 :1010000000000000000000000000000000000000E0 @@ -57764,42 +57764,42 @@ :101940000000000000000000000000000000000097 :101950000000000000000000000000000000000087 :101960000000000000000000000000000000000077 -:10197000000000000008000000000000000000005F -:101980000000000000002000000000000000000037 +:101970000000000000000000000400000000000063 +:101980000000000000000000000000000000000057 :101990000000000000000000000000000000000047 -:1019A0000000000000002000000000000000000017 +:1019A0000000000000000000000000000000000037 :1019B0000000000000000000000000000000000027 -:1019C00000000000000000002000000000000000F7 +:1019C0000000000000000000000000000000000017 :1019D0000000000000000000000000000000000007 -:1019E0000000400000000000200000000000000493 -:1019F00000040000000000000000000000000000E3 -:101A00000000000000000000000000004000000096 -:101A10000000000000000000000000000040000086 -:101A20000000400000000000000000000000000076 -:101A30000000000000000000000000000000004066 -:101A40000000000000000000000000000000000096 -:101A50000000000000000000000000000000000086 -:101A60000000000200000000000000000000000074 -:101A70000000000200000000000000000000000064 -:101A80000000000000000000000000100000000046 -:101A90000000000000000000000000000000000046 -:101AA0000000000000000000000000100000000026 -:101AB0000000000000000000000000000000000026 +:1019E00000000000000000000000000000000000F7 +:1019F00000004000000000000000000000000000A7 +:101A00000000000000000000000040000000000096 +:101A10000000000000000002009000020000000032 +:101A200000000002000000000002000200000000B0 +:101A30000000000000000000000000004000000066 +:101A40000000000000000000000000000002000094 +:101A50000002000000000000000000020002000080 +:101A60000000000200020000000000000000000072 +:101A700000000000000000040000080000800000DA +:101A80000020000000000000000000000000000036 +:101A90000000000000000000000000100000000036 +:101AA0000000000000000000000000000000000036 +:101AB0000000000000000000000000000010000016 :101AC0000000000000000000000000000000000016 -:101AD00000000000001000000000000000000000F6 -:101AE00000000000000000000000000000100000E6 -:101AF00000000000000000000000000000080000DE -:101B000004000000000000000000000000000000D1 -:101B100000000000000000000000000400040000BD +:101AD00000000000000000000000000000100000F6 +:101AE00000000000000000000000000000000000F6 +:101AF00000000000000000000000000000000020C6 +:101B00000000410100000000000041000000000052 +:101B100000000000000000000000000000000000C5 :101B200000000000000000000000000000000000B5 -:101B300004000000000000000000000000000000A1 +:101B300000000000000000000000000000000000A5 :101B40000000000000000000000000000000000095 -:101B50000000000002000000000000000000000083 +:101B50000000000000000000000000000000000085 :101B60000000000000000000000000000000000075 -:101B70000000040000000000000000000000000061 -:101B80000000000000000000000000000000000055 +:101B70000000000000000000000000000000000065 +:101B800000000000000000000000900000000000C5 :101B90000000000000000000000000000000000045 -:101BA0000000000000000000000000000000000035 +:101BA0000400000000000000000000000000000031 :101BB0000000000000000000000000000000000025 :101BC0000000000000000000000000000000000015 :101BD0000000000000000000000000000000000005 @@ -57813,7 +57813,7 @@ :101C50000000000000000000000000000000000084 :101C60000000000000000000000000000000000074 :101C70000000000000000000000000000000000064 -:101C80000000000000000000000000000000000054 +:101C800000000000001000840000008000000080C0 :101C90000000000000000000000000000000000044 :101CA0000000000000000000000000000000000034 :101CB0000000000000000000000000000000000024 @@ -57821,15 +57821,15 @@ :101CD0000000000000000000000000000000000004 :101CE00000000000000000000000000000000000F4 :101CF00000000000000000000000000000000000E4 -:101D000000000000000000000000000000000000D3 -:101D100000000000000000000000000000000000C3 +:101D000002000000000000001120098800200000EF +:101D10000040000000000000000000000000000083 :101D200000000000000000000000000000000000B3 :101D300000000000000000000000000000000000A3 :101D40000000000000000000000000000000000093 :101D50000000000000000000000000000000000083 :101D60000000000000000000000000000000000073 :101D70000000000000000000000000000000000063 -:101D80000000000000000000000000000000000053 +:101D80000000000020000000000000110000000022 :101D90000000000000000000000000000000000043 :101DA0000000000000000000000000000000000033 :101DB0000000000000000000000000000000000023 @@ -57846,16 +57846,16 @@ :101E60000000000000000000000000000000000072 :101E70000000000000000000000000000000000062 :101E80000000000000000000000000000000000052 -:101E90000000000000000000000000000000000042 +:101E900000000000000000C0000000000000000082 :101EA0000000000000000000000000000000000032 :101EB0000000000000000000000000000000000022 :101EC0000000000000000000000000000000000012 :101ED0000000000000000000000000000000000002 :101EE00000000000000000000000000000000000F2 :101EF00000000000000000000000000000000000E2 -:101F000000000000000000000000000000000000D1 -:101F100000000000000000000000000000000000C1 -:101F200000000000000000000000000000000000B1 +:101F0000000000000000000000000082000000004F +:101F1000419011001100000000410000000000008D +:101F200010000000000000000000000000000000A1 :101F300000000000000000000000000000000000A1 :101F40000000000000000000000000000000000091 :101F50000000000000000000000000000000000081 @@ -57886,15 +57886,15 @@ :1020E00000000000000000000000000000000000F0 :1020F00000000000000000000000000000000000E0 :1021000000000000000000000000000000000000CF -:1021100000000000000000000000000000000000BF -:1021200000000000000000000000000000000000AF +:10211000000000000000000000A0000000A000007F +:102120008800000000000000000000000000000027 :10213000000000000000000000000000000000009F :10214000000000000000000000000000000000008F :10215000000000000000000000000000000000007F :10216000000000000000000000000000000000006F :10217000000000000000000000000000000000005F :10218000000000000000000000000000000000004F -:10219000000000000000000000000000000000003F +:10219000000000000000000001000000C00000007E :1021A000000000000000000000000000000000002F :1021B000000000000000000000000000000000001F :1021C000000000000000000000000000000000000F @@ -57902,15 +57902,15 @@ :1021E00000000000000000000000000000000000EF :1021F00000000000000000000000000000000000DF :1022000000000000000000000000000000000000CE -:1022100000000000000000000000000000000000BE -:1022200000000000000000000000000000000000AE +:1022100000000000000000000000040000000000BA +:1022200004000000000000000000000000000000AA :10223000000000000000000000000000000000009E :10224000000000000000000000000000000000008E :10225000000000000000000000000000000000007E :10226000000000000000000000000000000000006E :10227000000000000000000000000000000000005E :10228000000000000000000000000000000000004E -:10229000000000000000000000000000000000003E +:10229000000000000000000000000000000000033B :1022A000000000000000000000000000000000002E :1022B000000000000000000000000000000000001E :1022C000000000000000000000000000000000000E @@ -57919,7 +57919,7 @@ :1022F00000000000000000000000000000000000DE :1023000000000000000000000000000000000000CD :1023100000000000000000000000000000000000BD -:1023200000000000000000000000000000000000AD +:1023200000010000000000000000000000000000AC :10233000000000000000000000000000000000009D :10234000000000000000000000000000000000008D :10235000000000000000000000000000000000007D @@ -57927,7 +57927,7 @@ :10237000000000000000000000000000000000005D :10238000000000000000000000000000000000004D :10239000000000000000000000000000000000003D -:1023A000000000000000000000000000000000002D +:1023A000004200008000000000000000000000006B :1023B000000000000000000000000000000000001D :1023C000000000000000000000000000000000000D :1023D00000000000000000000000000000000000FD @@ -57960,7 +57960,7 @@ :10258000000000000000000000000000000000004B :10259000000000000000000000000000000000003B :1025A000000000000000000000000000000000002B -:1025B000000000000000000000000000000000001B +:1025B00000000000F0F0F0F000000000000000005B :1025C000000000000000000000000000000000000B :1025D00000000000000000000000000000000000FB :1025E00000000000000000000000000000000000EB @@ -57968,15 +57968,15 @@ :1026000000000000000000000000000000000000CA :1026100000000000000000000000000000000000BA :1026200000000000000000000000000000000000AA -:10263000000000000000000000000000000000009A +:10263000000000000000F0F0F0F0000000000000DA :10264000000000000000000000000000000000008A :10265000000000000000000000000000000000007A :10266000000000000000000000000000000000006A :10267000000000000000000000000000000000005A :10268000000000000000000000000000000000004A :10269000000000000000000000000000000000003A -:1026A000000000000000000000000000000000002A -:1026B000000000000000000000000000000000001A +:1026A00000000000000000000000000005000A38E3 +:1026B000050000A000000000000000010000000074 :1026C000000000000000000000000000000000000A :1026D00000000000000000000000000000000000FA :1026E00000000000000000000000000000000000EA @@ -58015,236 +58015,236 @@ :1028F00000000000000000000000000000000000D8 :1029000000000000000000000000000000000000C7 :1029100000000000000000000000000000000000B7 -:10292000000000000000000000000000000088001F -:10293000000000040004000000000000200020004F -:102940000000000000000000200000000000200047 -:102950000000000000000400000000002000200033 -:10296000000000000000880040000000000000019E -:10297000200000000000000020008800000020006F -:1029800020000000000000002000200000000000E7 -:1029900020000000000000002000200000002000B7 -:1029A00020000000000000002000200000000000C7 -:1029B0000000000000000000000000000000000017 -:1029C0000000000000020000000000000000000005 -:1029D00000000000000000000000000000000000F7 -:1029E00000000000000000000000000000000000E7 -:1029F00000000000000000000000000000000000D7 -:102A000000000000000000000000000000000000C6 -:102A100000000000000000000000000000000000B6 -:102A200000000000000000000000000000000000A6 -:102A30000000000000000000000000000000000096 -:102A40000000000000000000000000000000000086 -:102A500082000000000000000000000000000000F4 -:102A60000000000000000000001000000000000056 -:102A70000000000000000000000000000000000056 -:102A80000000000000000000000000000000000046 -:102A90000000000000000000000000000000000036 +:1029200000000000000000000000000000000000A7 +:102930000000000000000000000000000000000097 +:102940000000000000000000000000040000000083 +:102950000000000000000000011000004002000024 +:102960000000000000000000000000000000000166 +:102970000000000000000000000000000000200037 +:102980000000000000000000000000000000000047 +:102990000000000000000000000000000000200017 +:1029A0000000000000000000000000000004000023 +:1029B000000000A000000000000000000000000077 +:1029C0000000000000000000000000000002000005 +:1029D0000000000200020000000208030002800163 +:1029E0000002000200000002400040000000000061 +:1029F0000000000000000000000040000000000295 +:102A00000000000000000002000040000000400044 +:102A10000000400000000002000000000040000232 +:102A200000904000000000000000000000000000D6 +:102A3000000402000040004000400200020000408C +:102A400008C00200008000400040000000000010AC +:102A50000200000000000000000000000000000074 +:102A60000010000000000000000000000000001046 +:102A70000210000000000000000000000000000044 +:102A80000000001000000000000000000000000036 +:102A90000010021000000000000000000000000014 :102AA0000000000000000000000000000000000026 -:102AB0000000000000000000000000000000000016 -:102AC00000000008000000000000000000000000FE -:102AD00000000008000000000000000000000000EE -:102AE00000000008000000000000000000000000DE -:102AF00000000008000000000000000000000000CE -:102B000000000000000800000000000000000000BD -:102B100000000000000800000000000000000000AD -:102B2000000000000008000000000000000000009D -:102B3000000000000008000000000000000000008D -:102B40000000000000000000000000000000000085 +:102AB0000000021080000001000100018000800081 +:102AC0000001002180000040000100010000000022 +:102AD00000000000000000000000000000004100B5 +:102AE00000000000000000000000000000000000E6 +:102AF00000000000000000000000000000000000D6 +:102B000000000000000000000000000000000000C5 +:102B100000000000000000000000000000000000B5 +:102B200000000000000000000000000000000000A5 +:102B300000000000000000000041004100410404CA +:102B400000830009000000000000000000000000F9 :102B50000000000000000000000000000000000075 :102B60000000000000000000000000000000000065 :102B70000000000000000000000000000000000055 :102B80000000000000000000000000000000000045 :102B90000000000000000000000000000000000035 :102BA0000000000000000000000000000000000025 -:102BB0000000000000000000000000000000000015 -:102BC0000000000000000000000000000000000005 +:102BB0000000000000000000000000001100000004 +:102BC0008000000441000000000000000000000040 :102BD00000000000000000000000000000000000F5 :102BE00000000000000000000000000000000000E5 :102BF00000000000000000000000000000000000D5 :102C000000000000000000000000000000000000C4 :102C100000000000000000000000000000000000B4 :102C200000000000000000000000000000000000A4 -:102C3000000000000000000000000800000000008C -:102C40000000000000000000000082000000000002 -:102C5000080000000000000000400200000000002A -:102C60000100020000000000010000000000000060 -:102C7000000000000800000000000000000000004C +:102C3000000000000000000000000000000500058A +:102C400000001000008000200000000000000000D4 +:102C50000000000000000000000000000000000074 +:102C60000000001000000000010000000000000053 +:102C70000000000000000000000000000000000054 :102C80000000000000000000000000000000000044 :102C90000000000000000000000000000000000034 -:102CA0000000000000000000000000000400000020 +:102CA0000000000000000000000000000000000024 :102CB0000000000000000000000000000000000014 -:102CC0000000000000000000000000000000000004 -:102CD0000000000000000000000004008000000070 -:102CE0000000040080000000000004000300000059 +:102CC000000000008000002000010500000000401E +:102CD0000004000000880000000000000000000068 +:102CE00000000000000100000000200000000000C3 :102CF00000000000000000000000000000000000D4 :102D000000000000000000000000000000000000C3 :102D100000000000000000000000000000000000B3 :102D200000000000000000000000000000000000A3 -:102D30000000000000000000000000000000000093 -:102D40000000000000000000000000000000000083 -:102D50000000000000000000000000000000000073 -:102D600000000020820000000000002000000000A1 +:102D30000000000000000000000000000000004053 +:102D40000003824020400004110008002000002001 +:102D500000000040004000000000000000000000F3 +:102D6000000084000000000084000000000000005B :102D70000000000000000000000000000000000053 :102D80000000000000000000000000000000000043 :102D90000000000000000000000000000000000033 :102DA0000000000000000000000000000000000023 :102DB0000000000000000000000000000000000013 -:102DC0000000000000000000000000000000000003 -:102DD00000000000000000000000000000000000F3 -:102DE00000000000000100000000000000010000E1 +:102DC00000010000000100010000820000008000FE +:102DD00000000004000100010000000000000000ED +:102DE00000000000000000000000000000000000E3 :102DF00000000000000000000000000000000000D3 :102E000000000000000000000000000000000000C2 :102E100000000000000000000000000000000000B2 :102E200000000000000000000000000000000000A2 :102E30000000000000000000000000000000000092 -:102E40000000000000000000000000000000000082 -:102E50000000000000000000000000000000000072 -:102E60000000000000000000000000000000000062 +:102E40000000200002000000000000040004001147 +:102E5000000000400002000200000000000000002E +:102E60000000000000000000000001000000000061 :102E70000000000000000000000000000000000052 :102E80000000000000000000000000000000000042 :102E90000000000000000000000000000000000032 :102EA0000000000000000000000000000000000022 :102EB0000000000000000000000000000000000012 -:102EC0000000000000000000000000000000000002 -:102ED00000000000000000000000000000000000F2 -:102EE00000000000000000000000000000000000E2 +:102EC000000000000000800000000200000140023D +:102ED000090000002001000409002000000000009B +:102EE00000000000000000000000000008000000DA :102EF00000000000000000000000000000000000D2 :102F000000000000000000000000000000000000C1 :102F100000000000000000000000000000000000B1 :102F200000000000000000000000000000000000A1 :102F30000000000000000000000000000000000091 -:102F40000000000000000000000000000000000081 -:102F50000000000000000000000000000000000071 -:102F600000000000000000009000000000000000D1 -:102F700090000002000000000000000000000000BF +:102F400000000000000002C000000002000000C1FC +:102F5000A0004101880102C0000000020000000042 +:102F6000000000000000000000000000000089A038 +:102F70008800889090000000000000000000000021 :102F80000000000000000000000000000000000041 :102F90000000000000000000000000000000000031 :102FA0000000000000000000000000000000000021 :102FB0000000000000000000000000000000000011 -:102FC0000000000000000000000000000000000001 -:102FD00000000000000000000000000000000000F1 -:102FE0000000000000000000110080000000000050 -:102FF00011008000008000000000000000000000C0 +:102FC0000000000000000000808000000080000081 +:102FD00009C1110588098010808000000080000070 +:102FE00000000000000000000000000000000000E1 +:102FF00089808000000080000000000000000000C8 :1030000000000000000000000000000000000000C0 :1030100000000000000000000000000000000000B0 :1030200000000000000000000000000000000000A0 :103030000000000000000000000000000000000090 -:103040000000000000000000000000000000000080 -:103050000000000000000000000000000000000070 -:1030600000000000000000000000000000800000E0 -:1030700000800000008000000080000000000000D0 +:103040000000000000000000000080000000000000 +:103050008000408008809104C19000008000000042 +:1030600080000000000000000000000000000000E0 +:10307000000000000021808080800000000000002F :103080000000000000000000000000000000000040 :103090000000000000000000000000000000000030 :1030A0000000000000000000000000000000000020 :1030B0000000000000000000000000000000000010 -:1030C0000000000000000000000000000000000000 -:1030D00000000000000000000000000000000000F0 -:1030E00000000000000000000000000000000020C0 -:1030F000000000C000000020000000C00000000030 +:1030C00000000000000000000000000008000000F8 +:1030D0000000C000018801089000C1C1000002008A +:1030E0000000C00000000000000000000000000020 +:1030F00000000000000000008484C0900000000078 :1031000000000000000000000000000000000000BF :1031100000000000000000000000000000000000AF :10312000000000000000000000000000000000009F :10313000000000000000000000000000000000008F :10314000000000000000000000000000000000007F -:10315000000000000000000000000000000000006F -:10316000000000000000000000000000000041001E -:10317000008888000100010000888800010000002C +:103150000000000000C0A0000000080000C1000046 +:103160000000000000C0000000000000000000009F +:1031700000000000000020400088889100C100008D :10318000000000000000000000000000000000003F :10319000000000000000000000000000000000002F :1031A000000000000000000000000000000000001F :1031B000000000000000000000000000000000000F :1031C00000000000000000000000000000000000FF -:1031D00000000000000000000000000000000000EF -:1031E00000000000000000000000000000000000DF -:1031F000410000800000090041000080000009003B +:1031D000000000000000008005081111C14000C17E +:1031E000000000000000008000000000000000005F +:1031F0000000000000000000008000A0009103C15A :1032000000000000000000000000000000000000BE :1032100000000000000000000000000000000000AE :10322000000000000000000000000000000000009E :10323000000000000000000000000000000000008E :10324000000000000000000000000000000000007E -:10325000000000000000000000000000000000006E -:10326000000000000000000000000000000000005E -:10327000000000110000008000000011000000802C +:1032500000008000000000000000C1081108C1004B +:1032600009118000000000000000000000000000C4 +:1032700000000000000000000000000080C180008D :10328000000000000000000000000000000000003E :10329000000000000000000000000000000000002E :1032A000000000000000000000000000000000001E :1032B000000000000000000000000000000000000E :1032C00000000000000000000000000000000000FE -:1032D00000000000000000000000000000000000EE -:1032E00000000000000000000000000000000000DE -:1032F000000000000001000000400000000100008C -:10330000004000000000000000000000000000007D +:1032D00000000000C000000000004000C108000124 +:1032E00088000100C0000000000040000000000055 +:1032F000000000000000000000000000200088899D +:1033000090880000000000000000000000000000A5 :1033100000000000000000000000000000000000AD :10332000000000000000000000000000000000009D :10333000000000000000000000000000000000008D :10334000000000000000000000000000000000007D -:10335000000000000000000000000000000000006D -:10336000000000000000000000000000000000005D -:1033700000000000000000000000070082210000A3 -:103380000000070082210000000000000000000093 +:1033500000000000000000000000000000006011FC +:1033600000E01200000A0000000000000000000061 +:1033700000000000000000000000000000006006E7 +:1033800000E00700820000000000000000000000D4 :10339000000000000000000000000000000000002D :1033A000000000000000000000000000000000001D :1033B000000000000000000000000000000000000D :1033C00000000000000000000000000000000000FD -:1033D00000000000000000000000000000000000ED -:1033E00000000000000000000000000000000000DD -:1033F000000000000000000000000000F0F00000ED -:1034000000000000F0F000000000000000000000DC +:1033D000000000000000000000003C3C0000AAAA21 +:1033E0000000F0F00000FFFF00003C3C0000AAAA33 +:1033F00000000000000000000000000000000000CD +:10340000000000A01818201C0000000000000000B0 :1034100000000000000000000000000000000000AC :10342000000000000000000000000000000000009C :10343000000000000000000000000000000000008C :10344000000000000000000000000000000000007C -:10345000000000000000000000000000000000006C -:10346000000000000000000000000000000000005C -:103470000000000000000000000000000000F0F06C -:10348000000000000000F0F000000000000000005C +:103450000000000000000000000000003C3C0000F4 +:10346000AAAA0000F0F00000000000003C3C0000B0 +:10347000AAAA0000000000000000000000000000F8 +:103480000000000000002828003C000000000000B0 :10349000000000000000000000000000000000002C :1034A000000000000000000000000000000000001C :1034B000000000000000000000000000000000000C :1034C00000000000000000000000000000000000FC -:1034D00000000000000000000000000000000000EC -:1034E00000000000000000000000000000000000DC -:1034F0000000000000000000000000000000FFFFCE -:103500000000FFFF00000F0F0000FFFF00000000A1 +:1034D0000000000000000000000000000F0F0000CE +:1034E0003C3C0000FFFF0000FF0000000F0F000049 +:1034F000F0F0FFFF000000000000000000000000EE +:10350000000000000F0FFFFFAA55AAAA000000004C :1035100000000000000000000000000000000000AB :10352000000000000000000000000000000000009B :10353000000000000000000000000000000000008B :10354000000000000000000000000000000000007B -:10355000000000000000000000000000000000006B -:10356000000000000000000000000000000000005B -:10357000000000000000000000000000000000004B -:1035800000000000000000000F0F0000000000001D +:1035500000000000000000000000000000000F0F4D +:1035600000003C3C000000000000FF0000000F0FC6 +:103570000000F0F0FFFF000000000000000000006D +:103580000000000000000F0F00000000000000001D :10359000000000000000000000000000000000002B :1035A000000000000000000000000000000000001B :1035B000000000000000000000000000000000000B :1035C00000000000000000000000000000000000FB :1035D00000000000000000000000000000000000EB -:1035E00000000000000000000000000000000000DB -:1035F00000000000000000000000000000000000CB -:1036000005002A00054000A805002A00054000A882 +:1035E000408280000020920245828A39852092A282 +:1035F00040828000002082020000000000000000E5 +:1036000000000000000000000061002E804D000856 :1036100000000000000000000000000000000000AA :10362000000000000000000000000000000000009A :10363000000000000000000000000000000000008A :10364000000000000000000000000000000000007A :10365000000000000000000000000000000000006A -:10366000000000000000000000000000000000005A -:10367000000000000000000000000000000000004A -:10368000000000000000000000000000000000003A -:10369000000000000000000000000000000000002A +:103660000000000000000000000030005000A080BA +:10367000F0C000000000000000000000000000009A +:103680000000000000000000000000000000AFAFDC +:1036900000AA000000000000000000000000000080 :1036A000000000000000000000000000000000001A :1036B000000000000000000000000000000000000A :1036C00000000000000000000000000000000000FA :1036D00000000000000000000000000000000000EA -:1036E00000000000000000000000000000000000DA -:1036F00000000000000000000000000000000000CA +:1036E0000000000000000000000000003C00550049 +:1036F000A0800000000000000000000000000000AA :1037000000000000000000000000000000000000B9 -:1037100000000000000000000000000000000000A9 +:10371000AFAF00AA000000000000000000000000A1 :103720000000000000000000000000000000000099 :103730000000000000000000000000000000000089 :103740000000000000000000000000000000000079 :103750000000000000000000000000000000000069 -:103760000000000000000000000000000000000059 -:103770000000000000000000000000000000000049 +:103760000000000000000000000000000000410018 +:103770000101000A000C0000000000000000000031 :103780000000000000000000000000000000000039 :103790000000000000000000000000000000000029 :1037A0000000000000000000000000000000000019 @@ -58252,112 +58252,112 @@ :1037C00000000000000000000000000000000000F9 :1037D00000000000000000000000000000000000E9 :1037E00000000000000000000000000000000000D9 -:1037F00000000000000000000000000000000000C9 +:1037F0005500050500AA003C000000000000000084 :1038000000000000000000000000000000000000B8 :1038100000000000000000000000000000000000A8 :103820000000000000000000000000000000000098 :103830000000000000000000000000000000000088 :103840000000000000000000000000000000000078 :103850000000000000000000000000000000000068 -:103860000000000000000000000000000000000058 -:103870000000000000002000000000000000000028 -:103880000000000000000000000000000000000038 -:103890000000000000002000000000000000000404 -:1038A0000004840000000000000000000000000090 -:1038B00000000000000000002000000000000000E8 -:1038C00000000000200000000000000000000000D8 -:1038D0000000000000000000200000004000000088 -:1038E0004000000020000000000000000000000078 -:1038F0000000000000004000000000000000000088 -:103900000000000000000000400000004000000037 -:1039100000000000000000000000000000000000A7 -:103920000000000000000000400000000000000057 +:103860000000000000000000000000002000000038 +:1038700000002000000000000000000000410000E7 +:103880000000000200000000000000000000000036 +:103890000000000000000000000000000000000028 +:1038A0000000000000000000000000000000000018 +:1038B0000000000000000000000000000000000008 +:1038C00000000000000000000000000000000000F8 +:1038D00000000000000000000000000000000000E8 +:1038E00000000000000000000000000000000000D8 +:1038F0000000000040000300000000000000000085 +:1039000000000000000000000002000200000002B1 +:1039100000020020000000000090000000000000F5 +:103920000000000040020000000000000000000055 :103930000000000000000000000000000000000087 -:103940000000000000000000000000000000100067 -:103950000000000000000000000000000000100057 -:103960000000000000000000000000000000000057 -:103970000000000000100000000000000000000037 -:103980000000000000000000040000000000000033 -:10399000000000008410000000000000000800008B -:1039A0000000000000000000000000000000000017 -:1039B00000000000000000000000000000000010F7 -:1039C00000000000000000000000000000000000F7 -:1039D00000000000000000100000000000000000D7 +:103940000000000000000000000000000000000077 +:1039500000000000000200020002000000900000D1 +:10396000000000000002000000020002000002004F +:103970000200004002000000000000000000000003 +:103980000000000000100000000000200000000007 +:1039900000000020000020000000000000000000E7 +:1039A0000000000000100000000000000000000007 +:1039B0000000000000000000000000000000000007 +:1039C00000000000000000100000000000000000E7 +:1039D00000000000000000000000000000000000E7 :1039E00000000000000000100000000000000000C7 -:1039F00000000400000000080008000000000008AB -:103A0000000000000000000800080000000000089E -:103A10000000000000000008000800000000008412 -:103A2000000000000000000800080000000000087E -:103A30000000000000000000000800080400000072 -:103A40000040000000000000000800080000000026 -:103A5000000800000000000000080008000004004A -:103A6000000800000000000000080008000000003E -:103A7000000800000000000000000000000000003E -:103A80000000000000000000000000000000000036 -:103A90000000000000000000000000000000000026 +:1039F00080008000000100000000000000000000C6 +:103A000000000000000000000000000000000000B6 +:103A100000000000000000000000000000000000A6 +:103A20000000000000000000000000000000000096 +:103A30000000000000000000000000000000000086 +:103A40000000000000000000000000000000000076 +:103A50000000000000000000000000000000000066 +:103A60000000000000000000000000000000000056 +:103A700000000000004100000040000400000004BD +:103A80000000001100000000000000000000000025 +:103A90000000000000000000000004000000000022 :103AA0000000000000000000000000000000000016 -:103AB00000210000000000000000000000000000E5 -:103AC00000000008000000000000000000000000EE +:103AB0000000000000000000000000000000000006 +:103AC00000000000000000000000000000000000F6 :103AD00000000000000000000000000000000000E6 :103AE00000000000000000000000000000000000D6 -:103AF00000000000000000000000000000000000C6 -:103B000000000000000000000000000000000000B5 -:103B100000000000000000000000000000000000A5 +:103AF00000000000000000000000050100010000BF +:103B00000085000000000000000000000000000030 +:103B10002100000003000800000000000000000079 :103B20000000000000000000000000000000000095 :103B30000000000000000000000000000000000085 :103B40000000000000000000000000000000000075 :103B50000000000000000000000000000000000065 :103B60000000000000000000000000000000000055 -:103B70000000000000000000000000000000000045 -:103B80000000000000000000000000000000000035 -:103B90000000000000000000000000000000000025 +:103B70000000000000000000000000000000200025 +:103B8000008000800180100000000800000000009C +:103B90001000000000000000000000000000000015 :103BA0000000000000000000000000000000000015 :103BB0000000000000000000000000000000000005 :103BC00000000000000000000000000000000000F5 :103BD00000000000000000000000000000000000E5 :103BE00000000000000000000000000000000000D5 :103BF00000000000000000000000000000000000C5 -:103C000000000000000000000000000000000000B4 -:103C10000000000000000000000000000000410063 -:103C20000000000000000000000000000000000094 +:103C000000000004000840044100410009002100B8 +:103C100000004100410041000000000003200000BE +:103C2000000000000000008800000000000000000C :103C30000000000000000000000000000000000084 :103C40000000000000000000000000000000000074 :103C50000000000000000000000000000000000064 :103C60000000000000000000000000000000000054 :103C70000000000000000000000000000000000044 -:103C80000000000000000000000000000000000034 -:103C9000000008000000000000000000000000001C +:103C80008200000004080411A00004009000040059 +:103C90000400000000000000000000000000000020 :103CA0000000000000000000000000000000000014 :103CB0000000000000000000000000000000000004 :103CC00000000000000000000000000000000000F4 :103CD00000000000000000000000000000000000E4 :103CE00000000000000000000000000000000000D4 :103CF00000000000000000000000000000000000C4 -:103D000000000000000000000000000000000000B3 -:103D100000000000000000000000000000000000A3 -:103D2000000000840000000000000084000000008B +:103D00000084000000008005C0880088800000005A +:103D100080008000000000000000000000000000A3 +:103D2000000000000000030000000084000000000C :103D30000000000000000000000000000000000083 :103D40000000000000000000000000000000000073 :103D50000000000000000000000000000000000063 :103D60000000000000000000000000000000000053 -:103D70000000000000000000000000000000000043 -:103D80000000000000000000000000000000000033 -:103D90000000000000000000000000000000000023 -:103DA0000000000000000000000000000002000011 +:103D70000000000000000000000000000000004003 +:103D800000409040820004080000004104800000D0 +:103D900004090809000200000000002000000000E3 +:103DA0000000820000000000000000000000000091 :103DB0000000000000020000000000000000000001 :103DC00000000000000000000000000000000000F3 :103DD00000000000000000000000000000000000E3 :103DE00000000000000000000000000000000000D3 :103DF00000000000000000000000000000000000C3 -:103E000000000000000000000000000000000000B2 -:103E10000000080000000500000000000000000095 -:103E20000000000000000000000000000000000092 +:103E0000008500010083030080010000000080089D +:103E10002100900008001100410021002100000055 +:103E2000000000000300000000000000210000006E :103E30000000000000000000000000000000000082 :103E40000000000000000000000000000000000072 :103E50000000000000000000000000000000000062 :103E60000000000000000000000000000000000052 :103E70000000000000000000000000000000000042 -:103E80000000000000000000000000000000000032 +:103E8000000000C01000010001020100200001013B :103E90000000000000000000000000000000000022 :103EA0000000000000000000000000000000000012 :103EB0000000000000000000000000000000000002 @@ -58365,72 +58365,72 @@ :103ED00000000000000000000000000000000000E2 :103EE00000000000000000000000000000000000D2 :103EF00000000000000000000000000000000000C2 -:103F000000000000000000000000000000000000B1 -:103F100000000000000000000000000000000000A1 +:103F000000000000008000004100038003008000EA +:103F10000810000000000000000000000000000089 :103F20000000000000000000000000000000000091 :103F30000000000000000000000000000000000081 :103F40000000000000000000000000000000000071 :103F50000000000000000000000000000000000061 :103F60000000000000000000000000000000000051 :103F70000000000000000000000000000000000041 -:103F80000000000000000000000000000000000031 -:103F90000000000000000000000000000000000021 +:103F800000000000000080000003000080002011FD +:103F9000008000410080004100000021000000403E :103FA0000000000000000000000000000000000011 :103FB0000000000000000000000000000000000001 :103FC00000000000000000000000000000000000F1 :103FD00000000000000000000000000000000000E1 :103FE00000000000000000000000000000000000D1 :103FF00000000000000000000000000000000000C1 -:1040000000000000000000000000000000000000B0 -:1040100000000000000000000000000000000000A0 +:104000000000000000000000020000000000C010DE +:104010000100008400000020000000040000008275 :104020000000000000000000000000000000000090 :104030000000000000000000000000000000000080 :104040000000000000000000000000000000000070 :104050000000000000000000000000000000000060 :104060000000000000000000000000000000000050 :104070000000000000000000000000000000000040 -:104080000000000000000000000000000000000030 -:104090000000000000000000000000000000000020 +:10408000000000000000000000000000000200002E +:1040900000C001008400C0000001010000004000D9 :1040A0000000000000000000000000000000000010 :1040B0000000000000000000000000000000000000 :1040C00000000000000000000000000000000000F0 :1040D00000000000000000000000000000000000E0 :1040E00000000000000000000000000000000000D0 :1040F00000000000000000000000000000000000C0 -:1041000000000000000000000000000000000000AF -:10411000000000000000000000000000000000009F -:10412000000000000000000000000000000000008F +:10410000000000000000000000000000000000802F +:104110000000008003000004000509414100000088 +:10412000800000000000000000000000000000000F :10413000000000000000000000000000000000007F :10414000000000000000000000000000000000006F :10415000000000000000000000000000000000005F :10416000000000000000000000000000000000004F :10417000000000000000000000000000000000003F -:10418000000000000000000000000000000000002F -:10419000000000000000000000000000000000001F -:1041A000000000000000000000000000000000000F +:1041800000000000000000000000000000008002AD +:1041900000000041000000202108004100800003D1 +:1041A000000500000000000000000000000000000A :1041B00000000000000000000000000000000000FF :1041C00000000000000000000000000000000000EF :1041D00000000000000000000000000000000000DF :1041E00000000000000000000000000000000000CF :1041F00000000000000000000000000000000000BF :1042000000000000000000000000000000000000AE -:10421000000000000000000000000000000000009E -:10422000000000000000000000000000000000008E +:10421000C000000000000000000100010001008259 +:10422000000100010000000000000000000000008C :10423000000000000000000000000000000000007E :10424000000000000000000000000000000000006E :10425000000000000000000000000000000000005E :10426000000000000000000000000000000000004E :10427000000000000000000000000000000000003E :10428000000000000000000000000000000000002E -:10429000000000000000000000000000000000001E -:1042A000000000000000000000000000000000000E +:10429000000000000000000000414842000840000B +:1042A0000011000A00004000420000000000000071 :1042B00000000000000000000000000000000000FE :1042C00000000000000000000000000000000000EE :1042D00000000000000000000000000000000000DE :1042E00000000000000000000000000000000000CE :1042F00000000000000000000000000000000000BE :1043000000000000000000000000000000000000AD -:10431000000000000000000000000000000000009D +:1043100000000000FFFF0000F0F0000000000000BF :10432000000000000000000000000000000000008D :10433000000000000000000000000000000000007D :10434000000000000000000000000000000000006D @@ -58438,7 +58438,7 @@ :10436000000000000000000000000000000000004D :10437000000000000000000000000000000000003D :10438000000000000000000000000000000000002D -:10439000000000000000000000000000000000001D +:1043900000000000000000000000F0F0000000003D :1043A000000000000000000000000000000000000D :1043B00000000000000000000000000000000000FD :1043C00000000000000000000000000000000000ED @@ -58454,32 +58454,32 @@ :10446000000000000000000000000000000000004C :10447000000000000000000000000000000000003C :10448000000000000000000000000000000000002C -:10449000000000000000000000000000000000001C -:1044A000000000000000000000000000000000000C +:104490000000000000000000000000003C3CFFFFA6 +:1044A000C3C3000000000000000000000000000086 :1044B00000000000000000000000000000000000FC :1044C00000000000000000000000000000000000EC :1044D00000000000000000000000000000000000DC :1044E00000000000000000000000000000000000CC :1044F00000000000000000000000000000000000BC :1045000000000000000000000000000000000000AB -:10451000000000000000000000000000000000009B -:10452000000000000000000000000000000000008B +:1045100000000000000000000000000000003C3C23 +:10452000FFFFC3C300000000000000000000000007 :10453000000000000000000000000000000000007B :10454000000000000000000000000000000000006B :10455000000000000000000000000000000000005B :10456000000000000000000000000000000000004B :10457000000000000000000000000000000000003B :10458000000000000000000000000000000000002B -:10459000000000000000000000000000000000001B -:1045A000000000000000000000000000000000000B -:1045B00000000000000000000000000000000000FB +:104590000000000000000000000000000000408259 +:1045A00080000020820205000A3FC50C00A0050023 +:1045B0000A38050000A00000000000000000000014 :1045C00000000000000000000000000000000000EB :1045D00000000000000000000000000000000000DB :1045E00000000000000000000000000000000000CB :1045F00000000000000000000000000000000000BB :1046000000000000000000000000000000000000AA :10461000000000000000000000000000000000009A -:10462000000000000000000000000000000000008A +:1046200000000000000000000000FF00F0F0FF00AC :10463000000000000000000000000000000000007A :10464000000000000000000000000000000000006A :10465000000000000000000000000000000000005A @@ -58487,16 +58487,16 @@ :10467000000000000000000000000000000000003A :10468000000000000000000000000000000000002A :10469000000000000000000000000000000000001A -:1046A000000000000000000000000000000000000A -:1046B00000000000000000000000000000000000FA +:1046A000000000000000000000000000FF00F0F02B +:1046B000FF000000000000000000000000000000FB :1046C00000000000000000000000000000000000EA :1046D00000000000000000000000000000000000DA :1046E00000000000000000000000000000000000CA :1046F00000000000000000000000000000000000BA :1047000000000000000000000000000000000000A9 :104710000000000000000000000000000000000099 -:104720000000000000000000000000000000000089 -:104730000000000000000000000000000000000079 +:1047200000000000000000000000000000000F0F6B +:104730003C3C000000000000000000000000000001 :104740000000000000000000000000000000000069 :104750000000000000000000000000000000000059 :104760000000000000000000000000000000000049 @@ -58504,435 +58504,435 @@ :104780000000000000000000000000000000000029 :104790000000000000000000000000000000000019 :1047A0000000000000000000000000000000000009 -:1047B00000000000000000000000000000000000F9 +:1047B0000F0F3C3C00000000000000000000000063 :1047C00000000000000000000000000000000000E9 :1047D00000000000000000000000000000000000D9 :1047E00000000000000000000000000000000000C9 :1047F00000000000000000000000000000000000B9 :1048000000000000000000000000000000000000A8 :104810000000000000000000000000000000000098 -:104820000000000000000000200000002000000444 -:104830002000000000002000008000800004200410 -:1048400020000000000088000000000020000000A0 -:1048500020000000000020000000000000002000F8 -:1048600020000000000020000003000000002000E5 -:1048700000002000000000002000000000000000F8 -:1048800020002000000000002000000000000000C8 -:104890000000200000000080200000000000000058 -:1048A00000002000000000002000000000000000C8 -:1048B00000000000000000000000000400040001EF -:1048C00000010000000000000000000000000000E7 -:1048D0000000000040000000000000000000000098 -:1048E00000000000000000000000000000000000C8 -:1048F00000000000000000000000000000000000B8 -:1049000000000000000000000000000000000000A7 -:104910000000000000000000001000020000000283 -:104920000000000000000000000000000100000086 -:104930000000000000000000000000000000000077 -:104940000000000000000000000000000100000066 -:104950000000001000000000000000400000000007 -:104960000000000000000000000000000000000047 -:104970000000000000000000000000000000000037 -:104980000000000000000000000000000000000027 -:104990000000000000000000000000000000000017 -:1049A0000000000000000000000000000000020005 -:1049B00000000000000800000000000002000000ED -:1049C00000000000000800000000000000000200DD -:1049D00000000000000800000000000000000000CF -:1049E00000000000000800000000000000000000BF -:1049F00000000000000000080000000000000000AF -:104A0000000000000000000800000000000000009E -:104A1000000000000000000800000000000000008E -:104A2000000000000000000800000000000000007E -:104A30000000000000000000000000000000010075 -:104A40000000000000000000000000000000000066 -:104A50000000000000000000000000000000000056 +:1048200000000000000000000000880000002000E0 +:1048300000000000000000000080000000000000F8 +:104840000000200000000000000020000000000028 +:104850004000000000110000000000000000000007 +:104860000000200000000000000300002000000005 +:1048700000000000880000000000000000000000B0 +:1048800000000000200000000000000020000000E8 +:104890000000000000000000000000000000000018 +:1048A00000000000200000000000000000000000E8 +:1048B00000000000000000000000001000000002E6 +:1048C00000000000000000000000000200000000E6 +:1048D00000000902090200000002000000020002BC +:1048E0000000400000020000000000000000000086 +:1048F0000002000020000000404000001000000006 +:104900000000000000000000400200001002000053 +:10491000000000020002000200020000000000028D +:104920000002000000000002004000002000200003 +:104930002010201000000000021000000000000005 +:104940000000000000200000002100100000001006 +:104950000021001000000000001000100000000006 +:104960000000000000000000000000100000000037 +:104970000000000000000000000000101010000007 +:1049800000000000000002020200020000400200DD +:1049900002000040004002000200004000900200BF +:1049A0000200004000400200020000400040800081 +:1049B00080008000800000900000000000000000E7 +:1049C00000020000000000010000410000000000A3 +:1049D00000010000000100000000000000000000D5 +:1049E00000000000000000000000000000000000C7 +:1049F00000000000000000000000000000000000B7 +:104A00000000000000000000800180008000000124 +:104A10008000800000010001800080000001004053 +:104A20008000800000010001800080000001000182 +:104A30000000002100000000000040000000000015 +:104A40000000001002000000000000000000000054 +:104A50000000000000000000000000000000000452 :104A60000000000000000000000000000000000046 :104A70000000000000000000000000000000000036 :104A80000000000000000000000000000000000026 -:104A90000000000000000000000000000000000016 -:104AA0000000000000000000000000000000010005 -:104AB00001000000000000000000000000000000F5 -:104AC00020000000000000000000000000000000C6 +:104A900000000000000000000000000000210000F5 +:104AA00000090400000000000000000000110000E8 +:104AB00000000000000000000000008400002184CD +:104AC0000000000000018000000000000000000065 :104AD00000000000000000000000000000000000D6 -:104AE00000000000000000000000000000000000C6 +:104AE00000010000000000000000000000000000C5 :104AF00000000000000000000000000000000000B6 :104B000000000000000000000000000000000000A5 :104B10000000000000000000000000000000000095 :104B20000000000000000000000000000000000085 -:104B3000040004000000000000000100010000006B -:104B40000900040000000000000000000000000058 -:104B50000000000000000000000001000000000054 -:104B60000000000200000000000000000000000043 +:104B300000000000080082000000000000000000EB +:104B4000080008000400000000000000A005A0000C +:104B500000000000000000000000000000800000D5 +:104B60000000000000000000000000000000040041 :104B70000000000000000000000000000000000035 -:104B80000000000000000000000000000000000025 -:104B9000000000000000000000000800000000000D -:104BA00000000000000000000000000000000108FC -:104BB00000000100010000000000000004001000DF -:104BC00000002000000000000000000000000000C5 -:104BD00000000000000000000000000004000000D1 +:104B80000000000000000000000000008400100091 +:104B90000000108000000000000000000080000005 +:104BA000080082000000000000000000000010006B +:104BB000820000000000000000C0000000C00000F3 +:104BC000000000040000800000000000000000025F +:104BD0000002000000020000000000004000002071 :104BE00000000000000000000000000000000000C5 :104BF00000000000000000000000000000000000B5 :104C000000000000000000000000000000000000A4 -:104C10000000000000000000000000000000000094 +:104C1000800000008008000000000000000000404C :104C20000000000000000000000000000000000084 -:104C3000020100002000020000000800002008001F -:104C40000000200000000000000000000000000044 -:104C500000000000820000000800000000200000AA -:104C60000000000000000000000000000000000044 +:104C300080000000000000000000000000410000B3 +:104C40000400A0000000840082000090040504001D +:104C5000002000000000000000050000000090009F +:104C60000004000400000400000000000000000038 :104C70000000000000000000000000000000000034 :104C80000000000000000000000000000000000024 -:104C90000000000000000000000000000000000014 -:104CA0000000000000000000000000000000820082 -:104CB00008000000000000001004000000000001D7 -:104CC00000000000000000000000000000000000E4 -:104CD00000000000000000000000000000000001D3 -:104CE00000000000000000000000000000000000C4 +:104C900084000000100000082000004000000040D8 +:104CA00000001000100000002000904000000000F4 +:104CB0000040000010000000200000000000000084 +:104CC00000000088210011020084410000218000C2 +:104CD0008000000000000000000000000000000054 +:104CE0000000000100010000800000000000000042 :104CF00000000000000000000000000000000000B4 :104D000000000000000000000000000000000000A3 -:104D10000000000000000000000000000000000093 -:104D20000000000000000000000000000000000083 -:104D300000000000000000000000800100000000F2 -:104D40000000000000000000000000000000000063 -:104D5000000900000000000000000000000000004A -:104D60000000000000000000000000000000000043 +:104D10000000000000008000000180000001000091 +:104D20000001000080008000000080000001000001 +:104D30000000000100008000000080000000200052 +:104D40002000000000110000000300000809088096 +:104D500084090002000920008441040400050000C9 +:104D60000000080000040000408400000000000073 :104D70000000000000000000000000000000000033 :104D80000000000000000000000000000000000023 :104D90000000000000000000000000000000000013 -:104DA0000000000000000000000000000000000003 -:104DB00000000000000000000100000000000000F2 -:104DC00000000000000000000000000000000000E3 -:104DD0000000000000000000000000002040000073 -:104DE0000000000000000000000000004100000082 -:104DF00000000000000000000000000000000000B3 +:104DA000020000008200000400000000000000007B +:104DB00002000040000000040000000000000000AD +:104DC000000011000000000000000000000000844E +:104DD00000100000110000008000000080010000B1 +:104DE0004000000000000000000040210000000022 +:104DF0000000210000000000000000000000000092 :104E000000000000000000000000000000000000A2 :104E10000000000000000000000000000000000092 -:104E20000000000000000000000000000000000082 -:104E300000820000000000000500200000000000CB -:104E400000009000000000000100000000000000D1 -:104E50000100000000000000000000000000000051 -:104E600000009002000000000000000000000000B0 +:104E20000000800000000000000100000000000001 +:104E300000008000000100000001000000000000F0 +:104E40000000000000000000000000000000000062 +:104E5000001000000088000089C02002001082A01D +:104E600000A1014100100088000090000000000037 :104E70000000000000000000000000000000000032 :104E80000000000000000000000000000000000022 -:104E90000000000000000000000000000000000012 -:104EA0000000000000000000000000000000000002 -:104EB000000000000000000000000100900200005F -:104EC000000011008000000000001100210000001F -:104ED00000002000000000000000000000000000B2 -:104EE00000001100808000000000000000000000B1 +:104E90000000000000000000000000C10000100041 +:104EA000880102C000000002000001C102001001E0 +:104EB000880102C000000002000001C10000900152 +:104EC0008800000000000900000000000000000051 +:104ED0000000008000000080090091808080058033 +:104EE000800009C1098905C10080200080004100BF :104EF00000000000000000000000000000000000B2 :104F000000000000000000000000000000000000A1 -:104F10000000000000000000000000000000000091 -:104F20000000000000000000000000000000000081 -:104F30000000000000000000000000001100A1803F -:104F40000000000000000080000000800041090017 -:104F500000090080000300000008000000000000BD -:104F60000000000000000080000000800000000041 -:104F70000000000000000000000000000000000031 +:104F100000000000000000000000000011C102417C +:104F2000C1088008808000000080000010C10220BD +:104F3000C0098008808000000080000010C111209E +:104F40004009802000110000004000000000000027 +:104F500000000000000000C00000008080088011F8 +:104F600080C08000098085009111C10900080000FF +:104F700000030080000000000000000000000000AE :104F80000000000000000000000000000000000021 -:104F90000000000000000000000000000000000011 -:104FA0000000000000000000000000000000000001 -:104FB00000000000000000000000000000000008E9 -:104FC00009800010000000000020000000C0000167 -:104FD0000100000000880000000000010000000047 -:104FE00000000000000000000020000000C00000E1 -:104FF00000000000000000000000000000000000B1 +:104F90000000000000000000000000000000418050 +:104FA00008008302C14180000000000080004180B1 +:104FB00020008209C10380000000000080004180C1 +:104FC00020009020C103000000000001000000004C +:104FD000000000000000000000C000000002080007 +:104FE00084019088C000024088000901110100017D +:104FF000004000000004000000000000000000006D :1050000000000000000000000000000000000000A0 :105010000000000000000000000000000000000090 -:105020000000000000000000000000000000000080 -:105030000000000000000000000000000000000070 -:1050400000010108000100880100008888000300B9 -:1050500000008800000001000000200000000100A6 -:10506000000000000000000001000088880001002E -:105070000000000000000000000000000000000030 +:10502000008801009000C101080000000000C000DD +:10503000008800009000C101080000000000C000CE +:10504000008800009100C100000020000000010065 +:1050500000000000000000000100000090000000BF +:1050600040089002902088C0A100010101011101B7 +:105070000000C00008000000000002000000000066 :105080000000000000000000000000000000000020 :105090000000000000000000000000000000000010 -:1050A0000000000000000000000000000000000000 -:1050B0000000000000900000002000000000000040 -:1050C0000000010088880800000041000080000006 -:1050D0008900000000000000410000008000000086 -:1050E00041000000000000000000410000800000BE -:1050F00009000000000000000000000000000000A7 +:1050A000000020019000000101C10000000000008C +:1050B00000C020009000010100C1000000000000BD +:1050C00000C020009000010000C10000800000002E +:1050D0004000000000000000000010000000000080 +:1050E0000000808000808080C08089090303090956 +:1050F00011414000800000004100000080000000DD :10510000000000000000000000000000000000009F :10511000000000000000000000000000000000008F -:10512000000000000000000000000000000000007F -:10513000000000000000000000000000000000006F -:1051400000000000410000808000410000110000CC -:1051500000800000000003110000000000080000B3 -:10516000000000000000000000000000001100002E -:1051700000800000000000000000000000000000AF +:105120000000000080088003000809C100000000A2 +:105130000000008080118520050505C100000000E9 +:105140000000008080098520102000C100090000B7 +:10515000000000000000000000000000800080202F +:1051600000000000800080A00080000041A191802C +:105170004180040500000010000000000000000055 :10518000000000000000000000000000000000001F :10519000000000000000000000000000000000000F -:1051A00000000000000000000000000000000000FF -:1051B00000000000000000000000000000000000EF -:1051C000000000000000001103000080000000014A -:1051D000000000400000000000010000000000018D -:1051E00000000000000000000000000000000001BE -:1051F000000000400000000000000000000000006F +:1051A0000000000000004188210905000211800074 +:1051B000000000000000C1A0210985000905800051 +:1051C000000080000000C1A02109A000091100001A +:1051D0000000000000000000000000000000C0000F +:1051E000100000008800C00010882002400001A1CB +:1051F0009182108800000000000000000000000004 :10520000000000000000000000000000000000009E :10521000000000000000000000000000000000008E -:10522000000000000000000000000000000000007E -:10523000000000000000000000000000000000006E -:10524000000000000000000000010000004000001D -:105250000000000007008221000000E00000814102 -:10526000880002E000000082000000000000000052 -:105270000000000007008221000000000000000084 +:10522000000000000000000009C1000101000000B2 +:10523000C000000000004000C1C000018900010062 +:10524000C000000002000000C1C000018800010091 +:10525000000000010000000000000000000000004D +:10526000000A000007006000500A00E0070000008C +:10527000500000E000000000500A00E0070082003B :10528000000000000000000000000000000000001E :10529000000000000000000000000000000000000E -:1052A00000000000000000000000000000000000FE -:1052B00000000000000000000000000000000000EE -:1052C00000000000000000000000000000E00700F7 -:1052D000820000000000F0F000000000000000006C -:1052E00000000000000000000000000000000000BE -:1052F000000000000000F0F00000000000000000CE +:1052A00000000000000000000000410000E00000DD +:1052B00081060000000000000000880000E00000FF +:1052C00081000000000000000000880000E00000F5 +:1052D000810000000000000000000000000000004D +:1052E000000000FF00FF000000003CFFF0AAC3FF29 +:1052F000E8E8F00FF00F00000000000000000000E0 :10530000000000000000000000000000000000009D :10531000000000000000000000000000000000008D -:10532000000000000000000000000000000000007D -:10533000000000000000000000000000000000006D -:105340000000F0F00000000000000000000000007D -:10535000F0F0000000000000F0F00000000000008D -:10536000000000000000000000000000000000003D -:105370000000000000000000F0F00000000000004D +:105320000000000000000000000000000000FFFF7F +:105330000000FFFF00003C3C0000AAAA0000F0F0C3 +:105340000000FFFF0000F0F00000AAAA0000F0F04B +:105350000000FFFF0000000000000000000000004F +:1053600000000000C3C33C3C000000003C00F0AA69 +:10537000003CE8E8F00FF00F000000000000000023 :10538000000000000000000000000000000000001D :10539000000000000000000000000000000000000D :1053A00000000000000000000000000000000000FD -:1053B00000000000000000000000000000000000ED -:1053C00000000000F0F000000000000000000000FD -:1053D0000000F0F00000000055550000FFFF000045 -:1053E00000000000000000000000000000000000BD -:1053F0000000000000000000FF000000FFFF0000B0 +:1053B000FFFF0000000000003C3C0000AAAA000023 +:1053C000F0F0000000000000F0F00000AAAA0000C9 +:1053D000F0F00000000000000000000000000000ED +:1053E0000000000000000F0F000000000000353535 +:1053F000FF0FD7143F3FDFFFBFF9400280010000DD :10540000000000000000000000000000000000009C :10541000000000000000000000000000000000008C :10542000000000000000000000000000000000007C -:10543000000000000000000000000000000000006C -:10544000000000000000000000000000000000005C -:105450000000FF000000FFFF0000555500000000A5 -:10546000000000000000000000000000000000003C -:1054700000000000000000000000FF00000000002D +:10543000FFFF0000FF0000000F0F00003C3C0000D9 +:10544000FFFF0000FF0000000F0F00003C3C0000C9 +:10545000FFFF0000FF00000000000000000000004F +:1054600000000000000000000F0F0000000000001E +:105470003535F000D7140303FFFFF96F041008203F :10548000000000000000000000000000000000001C :10549000000000000000000000000000000000000C :1054A00000000000000000000000000000000000FC -:1054B00000000000000000000000000000000000EC -:1054C00000000000000000000000000000000000DC -:1054D00000000000FF000000000005002A00054059 -:1054E00000A800400006000C000000650006800FC8 -:1054F0002000000000000000000005002A00054018 -:1055000000A80000000000000000000000000000F3 +:1054B000000000000000FF0000000F0F00003C3C57 +:1054C000000000000000FF0000000F0F00003C3C47 +:1054D000000000000000FF00000000610007000D58 +:1054E00000000000000000000000A5000A280500E0 +:1054F00000A01061202F804D0008000000058000F2 +:10550000000005610A2F850D00A0000000000000CA :10551000000000000000000000000000000000008B :10552000000000000000000000000000000000007B -:10553000000000000000000000000000000000006B -:10554000000000000000000000000000000000005B -:105550000000000005402A06054C00A800000000DD -:10556000000000000000FF00FFFF0000000000003E -:10557000000000000000000000000000000000002B -:10558000000000000000000000000000000000001B +:1055300000000000404280058020920240828000EE +:1055400000209202408280018020920240828000EE +:105550000020920240828001802092020000000020 +:10556000000000000000000000000000000000003B +:10557000000000000000000000000000380438387F +:105580003C00300C000000000000000000000000A3 :10559000000000000000000000000000000000000B :1055A00000000000000000000000000000000000FB -:1055B00000000000000000000000000000000000EB -:1055C00000000000000000000000000000000000DB -:1055D0000000000000000000FF00FFFF00000000CE -:1055E0000000000000000000FF00000000000000BC -:1055F00000000000000000000000000000000000AB -:10560000000000000000000000000000000000009A +:1055B0000000000000000C0014002828003C00003F +:1055C0000000000000003C005500A0A030300000AA +:1055D0000000000000003C0055003020F0A000005A +:1055E00000000000000000000000000000000000BB +:1055F00000000000000000000000000000003C006F +:105600000404003C303000000000000000000000F6 :10561000000000000000000000000000000000008A :10562000000000000000000000000000000000007A -:10563000000000000000000000000000000000006A -:10564000000000000000000000000000000000005A -:1056500000000000000000000000FF00000000004B -:10566000000000000000000000000000F0F000005A +:1056300000000000000000000F0055000808000CEA +:10564000000000000000000030005000A00030000A +:10565000000000000000000030005000302000007A +:10566000000000000000000000000000000000003A :10567000000000000000000000000000000000002A -:10568000000000000000000000000000000000001A +:1056800055000000E8E83C000000000000000000B9 :10569000000000000000000000000000000000000A :1056A00000000000000000000000000000000000FA -:1056B00000000000000000000000000000000000EA -:1056C00000000000000000000000000000000000DA -:1056D0000000000000000000000000000000F0F0EA -:1056E0000000000000000000000000000000F0F0DA +:1056B00000000000000000000000003C303CA02082 +:1056C000F030000000000000000014000C0010305A +:1056D00050F0000000000000000055000F0080A006 +:1056E000C0F000000000000000000000000000000A :1056F00000000000000000000000000000000000AA -:105700000000000000000000000000000000000099 +:10570000000000000F0FE8E8003C0000000000006F :105710000000000000000000000000000000000089 :105720000000000000000000000000000000000079 -:105730000000000000000000000000000000000069 -:105740000000000000000000000000000000000059 -:105750000000000000000000000000000000000049 -:10576000F0F00000000020000000200020000000F9 -:105770000000000084000000000020000000000085 -:1057800000000000000020000000200020000000B9 -:1057900000000000200000000000200000000000C9 -:1057A00000000000000200000000000420040000CF -:1057B00000000000000000000000000000000000E9 -:1057C000000000000000010000000100200088002F -:1057D0000000000000002000200000000000000089 -:1057E00000000000000000000000000000000000B9 -:1057F0000000400000004000000000000000000029 -:105800000000000000000000000000000000000098 -:105810000000400000000000000000000000000048 +:10573000000000000000000000000000003C303CC1 +:10574000A0200000000000000000000055000F0035 +:1057500010300000000000000000000041000300C5 +:1057600080A00000200000000000000000000020D9 +:105770000000000000009000000000004000200039 +:1057800040000000200000000000000000000000B9 +:1057900000000000000020000000000020002000A9 +:1057A00020000000000100000000000000000000D8 +:1057B00000000000100040002000400040002000D9 +:1057C0002000200000000000880000000000000011 +:1057D0000000000000000000200000000000200089 +:1057E0002000200000004000040000000000000035 +:1057F0004000000000000000000000000000000069 +:105800000000000000000000000000400090404048 +:105810000000000000000090000000000002009066 :105820000000000000000000000000000000000078 :105830000000000000000000000000000000000068 -:105840000000000000000000080000000800000048 -:1058500000000000000000028000C0000000000006 -:1058600040000000000040020000000000000000B6 -:10587000000000000400000000000000000008001C -:105880001000000000000800000000000000000000 +:105840000002000000020000000000000000004014 +:105850000002000000000002000200000000000042 +:105860000000000000000000000000000000021026 +:105870000000200000002000200020002000200068 +:105880000000000000000000000000000000080010 :105890000000000000000000000000000000000008 -:1058A00000000000000008000000000000000000F0 -:1058B00000000000000000000000000000000000E8 -:1058C00008000000000000000000000000000000D0 +:1058A00000000000000000000000000000000000F8 +:1058B0000010000000000000000000000000900048 +:1058C00000000000000000000000000000000000D8 :1058D00008000000000000000000000000000000C0 -:1058E00000000000000000000000040000000000B4 -:1058F000000800000000000000000000040000009C -:105900000008000800000000000000000000000087 -:10591000000800000000000000000000000000007F -:105920000008000800000000000000000000000067 -:10593000000000080000000000000000000000005F -:105940000000000800080400000000000000000043 -:10595000000000080000000000000000000000003F -:105960000000000800080000040000000000000023 -:105970000000000000000000000000000000000027 +:1058E00000000000000000000000000000000000B8 +:1058F0000000000080000000800080008000800028 +:105900008000000000000000000000000000000017 +:105910004000000000000000000000000000000047 +:105920000000000000000000000000000000000077 +:105930000000000000000000400000000000000027 +:105940000000000000000000000000000000000057 +:105950000000000000000000000000000000000047 +:105960000000000000000000000000000000000037 +:1059700000410000000000000805000000000000D9 :105980000000000000000000000000000000000017 -:105990000000000000000000000000000000000007 +:1059900000000000000000000080408000000000C7 :1059A00000000000000000000000000000000000F7 :1059B00000000000000000000000000000000000E7 :1059C00000000000000000000000000000000000D7 -:1059D00000000000000000000000000000000100C6 -:1059E00000000000000400000000000000000000B3 -:1059F0000000000000000000000000000000002087 -:105A00000000000000000000000000000000000096 -:105A10000000000000000000000000000000000086 -:105A20000000000000000000000000000000000076 -:105A30000000000000000000000000000000000066 +:1059D00000000000000000000000000000000200C5 +:1059E00000000000000000000000000000000000B7 +:1059F0000000000004000000000010000000000093 +:105A0000000041102100000000000000000008001C +:105A1000000000000000000000000004000400007E +:105A20000004000000000000000000000000000072 +:105A30000000000000000000000000000000040062 :105A40000000000000000000000000000000000056 -:105A50000000000000000300000000000000000043 -:105A60002000000000000001000000000000000015 -:105A70000000000000000000000000000000000026 -:105A800000000000000000000011000000090000FC +:105A50000000410000000000000000000000000005 +:105A600000000300410021000000000003000000CE +:105A70000000000000000000008000000080000026 +:105A80000000000000000000000000000000000016 :105A90000000000000000000000000000000000006 :105AA00000000000000000000000000000000000F6 -:105AB00000000000080000000000080000000000D6 -:105AC00000000000820000000800A00000000000AC -:105AD00000000000000000000021000000000000A5 -:105AE00000000000000000000100000000000000B5 -:105AF00000000000000000000000000000000000A6 -:105B00000000000000000000000000000000000095 +:105AB00000000000000000000000000000000000E6 +:105AC00000000000100000000000000000000000C6 +:105AD00000000000C00000000000000000001000F6 +:105AE000100008000000080008000000000000008E +:105AF0000000000000000000080000040000000496 +:105B0000000000000000008800000000000000000D :105B10000000000000000000000000000000000085 :105B20000000000000000000000000000000000075 :105B30000000000000000000000000000000000065 :105B40000000000000000000000000000000000055 :105B50000000000000000000000000000000000045 -:105B60000000000000000000000020000000000015 +:105B60000000000000000000000000000000000035 :105B70000000000000000000000000000000000025 -:105B80000000000000000000000000000000000015 +:105B80000000A000004100410000000000000000F3 :105B90000000000000000000000000000000000005 :105BA00000000000000000000000000000000000F5 -:105BB00000000000000200000000000000000000E3 -:105BC0000000000000000000000000000000820053 -:105BD00000000000000000000000000000001000B5 -:105BE0000000840000000000200000000000000011 -:105BF0000000000000000000000000000084000021 -:105C000000000084000000000020002000200000B0 -:105C10000000000000000000000000000084000000 +:105BB00000000000000000000000000000000000E5 +:105BC00000000000000000000000000000000000D5 +:105BD00000000400000000000000000000000000C1 +:105BE00000000000080000000000000000000000AD +:105BF00000000000000000000000000000000000A5 +:105C00000002001000000002040000001100090062 +:105C100000000000000000C0000000000084000040 :105C20000000000000000000000000000000000074 :105C30000000000000000000000000000000000064 :105C40000000000000000000000000000000000054 -:105C50000000000000000000000000000000000044 -:105C600040000000000000000084800000000000F0 -:105C700000002100008400840000000000000000FB -:105C80000000000000000002000000000002000010 -:105C90000000000000000000000000000000000004 -:105CA00000000000000000020000000000000000F2 +:105C500000040020000400C000000000000000005C +:105C60000004000000001000000000000000000020 +:105C70000000100000000300000090090000100068 +:105C80000000A00000001000000000000011004112 +:105C900000000000000000000800000000000000FC +:105CA00000000000000000110000000000040004DB :105CB00000000000000000000000000000000000E4 -:105CC00000000000000000000000080000000000CC +:105CC00000000000000000000000000000000000D4 :105CD00000000000000000000000000000000000C4 -:105CE0000000100000008400000000808880000098 -:105CF0000000000900080021000900000000000069 +:105CE00000000000000000000800000000000000AC +:105CF00000000000000000000000000000000000A4 :105D00000000000000000000000000000000000093 :105D10000000000000000000000000000000000083 -:105D20000000000000001100000000000000000062 -:105D30000000000000000000000000000000000063 +:105D20000000000000000000000000000000000172 +:105D3000000100000000000000000000080000005A :105D40000000000000000000000000000000000053 :105D50000000000000000000000000000000000043 -:105D6000000000000000000000000000000400042B +:105D60000000000000000000000000000000000033 :105D70000000000000000000000000000000000023 -:105D80000000000000000000000000000000000013 -:105D90000000000000000000000000000000000003 +:105D8000000000000000040000000000000004000B +:105D90000100000000000000000000000000000002 :105DA00000000000000000000000000000000000F3 :105DB00000000000000000000000000000000000E3 :105DC00000000000000000000000000000000000D3 :105DD00000000000000000000000000000000000C3 -:105DE00000000000000000000000000000000011A2 -:105DF00020020082200200000000000000000000DD -:105E00000000000000000000000000000000000092 -:105E10000000000000000000000000000000000082 -:105E20000000000000000000000000000000000072 -:105E30000000000000000000000000000000000062 +:105DE00000000000000000000000000000000000B3 +:105DF00000000000000000000000000000000000A3 +:105E00000000000000000000800009000000000009 +:105E100080004000000000000000000000000000C2 +:105E2000000000000000050000004100000000002C +:105E3000000008000000000000000000000000005A :105E40000000000000000000000000000000000052 :105E50000000000000000000000000000000000042 :105E60000000000000000000000000000000000032 -:105E70000011028000880080000000000000000087 -:105E80000000000000000000000000000000000012 -:105E90000000000000000000000000000000000002 -:105EA00000000000000000000000000000000000F2 -:105EB00000000000000000000000000000000000E2 +:105E70000000000000000000000000000000000022 +:105E80000000000000000000004100000041008010 +:105E900000410000002100800041008000210080BE +:105EA0000020008000000080000000800009000049 +:105EB00000000000002000000000000000000000C2 :105EC00000000000000000000000000000000000D2 :105ED00000000000000000000000000000000000C2 :105EE00000000000000000000000000000000000B2 -:105EF0000000808000808000800000000000000022 -:105F00000000000000000000000000000000000091 -:105F10000000000000000000000000000000000081 -:105F20000000000000000000000000000000000071 -:105F30000000000000000000000000000000000061 +:105EF00000000000000000000000000000000000A2 +:105F0000000000000000000000000001000000018F +:105F100000100001000000000040000000820000AE +:105F200000400001008200000040000000820000EC +:105F300000820000000000000000000000000000DF :105F40000000000000000000000000000000000051 :105F50000000000000000000000000000000000041 :105F60000000000000000000000000000000000031 -:105F700000000000048820C00400080000000000A9 -:105F80000000000000000000000000000000000011 -:105F90000000000000000000000000000000000001 +:105F70000000000000000000000000000000000021 +:105F80000000000000000000000000000000100001 +:105F9000000000000000C000000001000000000040 :105FA00000000000000000000000000000000000F1 -:105FB00000000000000000000000000000000000E1 -:105FC00000000000000100000000000000000000D0 +:105FB00000000000000000000000010000000000E0 +:105FC00000000000000000000000000000000000D1 :105FD00000000000000000000000000000000000C1 -:105FE00000000000000000000000000200080000A7 -:105FF0000000000000002004012100040003000054 +:105FE00000000000000000000000000000000000B1 +:105FF00000000000000000000000000000000000A1 :106000000000000000000000000000000000000090 -:106010000000000000000000000000000000000080 +:1060100080000000090000000000000003000000F4 :106020000000000000000000000000000000000070 -:106030000000000000000000000000000000000060 -:10604000000000000000000100000000000000004F +:106030000000000009000000000000001000000047 +:106040000000000000000000000000000000000050 :106050000000000000000000000000000000000040 -:1060600000000000000000000000000000800000B0 -:106070000000000000000000008009210080009165 +:106060000000000000000000000000000000000030 +:106070000000000000000000000000000000000020 :106080000000000000000000000000000000000010 -:106090000000000000000000000000000000000000 +:1060900000000008000000000000000800000000F0 :1060A00000000000000000000000000000000000F0 :1060B00000000000000000000000000000000000E0 -:1060C00000000000000000000001000000000000CF +:1060C00000000000000000000000000000000000D0 :1060D00000000000000000000000000000000000C0 :1060E00000000000000000000000000000000000B0 -:1060F0000000000000000000000000000810000088 -:10610000030000000000000000000000000000008C -:10611000000000000000000000000000000000007F +:1060F00000000000000000000000000000000000A0 +:10610000000000000000000000000000000000008F +:10611000000000000001000000000000000100007D :10612000000000000000000000000000000000006F :10613000000000000000000000000000000000005F -:10614000000000000000000000000001000000004E +:10614000000000000000000000000000000000004F :10615000000000000000000000000000000000003F -:1061600000000000000000000000000040000000EF -:106170000000080000000000000000000000010016 -:1061800000200000000000000000000000000000EF -:1061900000000000000000000000000000000000FF -:1061A00000000000000000000000000000000000EF -:1061B00000000000000000000000000000000000DF +:10616000000000000000000000000000000000002F +:10617000000000000000000000000000000000001F +:10618000000000000000000000000000000000000F +:1061900000000000000000420000814100000042B9 +:1061A0000000880000000000000000000000000067 +:1061B00000000000500000E000000000500000E07F :1061C00000000000000000000000000000000000CF :1061D00000000000000000000000000000000000BF :1061E00000000000000000000000000000000000AF -:1061F0000000000000000000000000000000480057 -:1062000000E041004200000000000000000000002B +:1061F000000000000000000000000000000000009F +:10620000000000000000000000000000000000008E :10621000000000000000000000000000000000007E :10622000000000000000000000000000000000006E :10623000000000000000000000000000000000005E :10624000000000000000000000000000000000004E :10625000000000000000000000000000000000003E :10626000000000000000000000000000000000002E -:10627000C3C3FFFF00FFFFFF00000000000000009D +:10627000000000000000000000000000000000001E :10628000000000000000000000000000000000000E :1062900000000000000000000000000000000000FE :1062A00000000000000000000000000000000000EE @@ -58940,7 +58940,7 @@ :1062C00000000000000000000000000000000000CE :1062D00000000000000000000000000000000000BE :1062E00000000000000000000000000000000000AE -:1062F0000000C3C3FFFF00FFFFFF0000000000001D +:1062F000000000000000000000000000000000009E :10630000000000000000000000000000000000008D :10631000000000000000000000000000000000007D :10632000000000000000000000000000000000006D @@ -58949,7 +58949,7 @@ :10635000000000000000000000000000000000003D :10636000000000000000000000000000000000002D :10637000000000000000000000000000000000001D -:10638000000000000208000000842000000000005F +:10638000000000000000000000000000000000000D :1063900000000000000000000000000000000000FD :1063A00000000000000000000000000000000000ED :1063B00000000000000000000000000000000000DD @@ -58967,30 +58967,30 @@ :10647000000000000000000000000000000000001C :10648000000000000000000000000000000000000C :1064900000000000000000000000000000000000FC -:1064A00000000000000000000000000000000000EC +:1064A00000610007000D000000610007000D000002 :1064B00000000000000000000000000000000000DC -:1064C00000000000000000000000000000000000CC +:1064C00000610007800D000000610007800D0000E2 :1064D00000000000000000000000000000000000BC :1064E00000000000000000000000000000000000AC :1064F000000000000000000000000000000000009C -:106500000000000000000000000000610000C01951 -:10651000000100000000000000000000000000007A +:10650000000000000000000000000000000000008B +:10651000000000000000000000000000000000007B :10652000000000000000000000000000000000006B :10653000000000000000000000000000000000005B :10654000000000000000000000000000000000004B :10655000000000000000000000000000000000003B :10656000000000000000000000000000000000002B :10657000000000000000000000000000000000001B -:106580000000000000000000000000007D287D28C1 -:10659000F0F0FFFF0000000000000000000000001D +:10658000000000000000000000000000000000000B +:1065900000000000000000000000000000000000FB :1065A00000000000000000000000000000000000EB :1065B00000000000000000000000000000000000DB :1065C00000000000000000000000000000000000CB :1065D00000000000000000000000000000000000BB :1065E00000000000000000000000000000000000AB :1065F000000000000000000000000000000000009B -:1066000000000000000000000000000000007D28E5 -:106610007D2800000F0F00000000000000000000B7 +:10660000000000000000000000000000000000008A +:10661000000000000000000000000000000000007A :10662000000000000000000000000000000000006A :10663000000000000000000000000000000000005A :10664000000000000000000000000000000000004A @@ -58998,7 +58998,7 @@ :10666000000000000000000000000000000000002A :10667000000000000000000000000000000000001A :10668000000000000000000000000000000000000A -:10669000AFAF050500000000000000000000000092 +:1066900000000000000000000000000000000000FA :1066A00000000000000000000000000000000000EA :1066B00000000000000000000000000000000000DA :1066C00000000000000000000000000000000000CA @@ -59006,108 +59006,108 @@ :1066E00000000000000000000000000000000000AA :1066F000000000000000000000000000000000009A :106700000000000000000000000000000000000089 -:106710000000AFAF05050000000000000000000011 -:106720000000200000000000000020000000200009 -:1067300000000400200000000004200020000000F1 -:1067400000002000000000000000200000002000E9 -:1067500000002000200000000000200020000000B9 -:1067600000000001200000000000000020000000E8 -:106770002000000020002000000000002000200079 -:1067800000000000200000000000000020000000C9 -:1067900020000000000000000000000000002000B9 -:1067A0000000840000000000000000000000000065 -:1067B0000000000000000000009000000000400009 -:1067C00000000000000000000000000000000000C9 -:1067D00000000000000000000000000000000000B9 -:1067E00000000000000000000000000000000000A9 -:1067F0000000000000000000000000000000000099 -:106800000000000000000000000000000000000088 -:106810000000000000000000000000000000000078 -:106820000000000000000000000000000000000068 -:10683000040000000000000000000000080000004C -:106840000000000000000000000000000000010047 -:106850000100010001000400000000000000000031 -:106860000000000000000000000000000000000028 -:106870000000000000000000000000000000000018 -:106880000003000000000000000000000000000005 -:1068900000000000000000000000000000000000F8 -:1068A00000000000000000000000000000000000E8 -:1068B00000000000000000000000000000000000D8 -:1068C00000000000000000000000000000000000C8 -:1068D00002000200020002000000000000000000B0 +:106710000000000000000000000000000000000079 +:1067200000000000200020000000000000002010F9 +:1067300020000000000000000000200020000000F9 +:106740000000000020000000000000000000040025 +:1067500020000000000000000000200020000000D9 +:106760000000000000002000000000000000000009 +:106770002000000000000000000040002000200079 +:1067800000000000000020000000000000000000E9 +:106790002000000000000000000020002000200079 +:1067A00000004000000000000000000000000000A9 +:1067B0000000000000040000000000004000000095 +:1067C0000002000000000090009000004090009047 +:1067D0000090000000900090000000020000000007 +:1067E0004000400000000000000000000000000029 +:1067F0000000210400000000000000400000000034 +:106800000000000000000000000000040000000084 +:1068100000000090400000000000000000000000A8 +:106820000000000000009000000090000000000048 +:106830000000000002100000000000000000000046 +:1068400000000800084000000000000000000000F8 +:106850000000000008000000000000000000000030 +:1068600000000800084000000000000000000000D8 +:106870000800000000000000000000000000000010 +:106880000000000000100840000000000010001090 +:1068900000000000001000100000000000100800C0 +:1068A00000000000000002000040000000000000A6 +:1068B00000400040000000000040001000000010F8 +:1068C00000C00000000000000000000020000000E8 +:1068D00000000000000000000000000000000000B8 :1068E00000000000000000000000000000000000A8 -:1068F0000000000000000000000400000000000094 +:1068F0000000000000000000000000000000000098 :106900000000000000000000000000000000000087 -:106910000000000041000000000000000000000036 +:106910000000000000000000000000000000000077 :106920000000000000000000000000000000000067 -:106930000000000000000000000000000000000057 -:106940000000000000000000000000000000000047 -:106950000000000000000000000000000000000037 +:106930000000000004000000000000000000000053 +:1069400000008400000000000000000000000000C3 +:1069500000000000000000009000000000000000A7 :106960000000000000000000000000000000000027 :106970000000000000000000000000000000000017 -:1069800000000000000000000000004000000000C7 +:1069800000000000000040000200000000000000C5 :1069900000000000000000000000000000000000F7 -:1069A00000000005000000000000000000000000E2 -:1069B00000000000000000000000000000000000D7 -:1069C00000000000000000000000000000000000C7 -:1069D00000000000000000000000000000000000B7 +:1069A00000000000000000000000000000200000C7 +:1069B00000000000000000000000000000000020B7 +:1069C00000000000002000000000000000000000A7 +:1069D00000000000000000000800000000000000AF :1069E00000000000000000000000000000000000A7 :1069F0000000000000000000000000000000000097 :106A00000000000000000000000000000000000086 -:106A10000000090000000500050000004100000022 -:106A200000000000008400000008000000000000DA -:106A300000000000000000000000C0000000000096 -:106A4000000000000000A000000082000000000024 -:106A50000000000000000000000000000100000035 +:106A10000000000000000000000000000000000076 +:106A20000000000000000000000000000000000066 +:106A30000000000000000000000000000000000056 +:106A40000000000000000000000000000000000046 +:106A5000000008000000000000000000000000002E :106A60000000000000000000000000000000000026 -:106A700000000000000000000000000000000021F5 +:106A70000000000000000000000000000000001006 :106A80000000000000000000000000000000000006 :106A900000000000000000000000000000000000F6 -:106AA00000000800000000000000000000000000DE -:106AB00000000000000000000000000000000800CE -:106AC00000000000000000000000000000000010B6 -:106AD0000082000000000000000000000000040030 +:106AA00000000000000000000000000000000000E6 +:106AB00000000000000000000010000003000000C3 +:106AC00000000000000000000000000000000000C6 +:106AD00000000000000000000000000008000000AE :106AE00000000000000000000000000000000000A6 :106AF0000000000000000000000000000000000096 -:106B00000000000000000000000000000000000085 -:106B100000004100000010000000000000000084A0 -:106B200000000800009000000000000000080000C5 -:106B3000000000000000000008000000000000004D +:106B00000000000000000010001000000000000065 +:106B10000000000000000000000000000000000075 +:106B20000000000000000000000000000000000065 +:106B30000000000000000000000000000000000055 :106B40000000000000000000000000000000000045 :106B50000000000000000000000000000000000035 -:106B6000000800000000000000000000000000001D +:106B60000000000000000000000000000000000025 :106B70000000000000000000000000000000000015 -:106B800000000000000000000000000000002000E5 -:106B900000000000C0000000000000000000000035 -:106BA00000000000000000000000000008000000DD +:106B80000000000000000000000000000000000005 +:106B900000000000000000000000000000000000F5 +:106BA00000000000000000000000000000000000E5 :106BB00000000000000000000000000000000000D5 -:106BC00000000000000000000000000000000000C5 -:106BD00000000000000000000000000000000000B5 -:106BE00000000000000000000000000000000000A5 +:106BC00000C000000000000000100088000000006D +:106BD00000001000000000000000000000000000A5 +:106BE00000000000000000000300000000000000A2 :106BF0000000000000000000000000000000000095 :106C00000000000000000000000000000000000084 :106C10000000000000000000000000000000000074 -:106C200000000000000000000000009000000000D4 +:106C20000000000000000000000000000000000064 :106C30000000000000000000000000000000000054 -:106C4000000000000000080000000000000000003C +:106C40000000000000000000000000000000000044 :106C50000000000000000000000000000000000034 :106C60000000000000000000000000000000000024 :106C70000000000000000000000000000000000014 :106C80000000000000000000000000000000000004 :106C900000000000000000000000000000000000F4 -:106CA00000000000000000000000000000110000D3 -:106CB00020000000000000020000000000000000B2 -:106CC00000000000000000000000000000000000C4 -:106CD0000000000000000440000000000000000070 +:106CA00000000000000000000000000000000000E4 +:106CB00000000000000000000000000000000000D4 +:106CC00003000000000000020000000000000000BF +:106CD00000000000000000000000000000000000B4 :106CE00000000000000000000000000000000000A4 :106CF0000000000000000000000000000000000094 -:106D00000000000000000000000000000000000083 -:106D10000000000000000000000041000000000032 -:106D200000A00000000000000000000000000000C3 +:106D0000110000000000000008000000000000006A +:106D10000000000000000000000000000000000073 +:106D20000000000000000000000000000000000063 :106D30000000000000000000000000000000000053 :106D40000000000000000000000000000000000043 :106D50000000000000000000000000000000000033 -:106D60000000000000900000000000000000000093 +:106D60000000000000000000000000000000000023 :106D70000000000000000000000000000000000013 :106D80000000000000000000000000000000000003 :106D900000000000000000000000000000000000F3 @@ -59115,7 +59115,7 @@ :106DB00000000000000000000000000000000000D3 :106DC00000000000000000000000000000000000C3 :106DD00000000000000000000000000000000000B3 -:106DE0000000000000000080000000000000000023 +:106DE00000000000000000000000000000000000A3 :106DF0000000000000000000000000000000000093 :106E00000000000000000000000000000000000082 :106E10000000000000000000000000000000000072 @@ -59131,7 +59131,7 @@ :106EB00000000000000000000000000000000000D2 :106EC00000000000000000000000000000000000C2 :106ED00000000000000000000000000000000000B2 -:106EE0000000000000000000000000A0000000847E +:106EE00000000000000000000000000000000000A2 :106EF0000000000000000000000000000000000092 :106F00000000000000000000000000000000000081 :106F10000000000000000000000000000000000071 @@ -59139,7 +59139,7 @@ :106F30000000000000000000000000000000000051 :106F40000000000000000000000000000000000041 :106F50000000000000000000000000000000000031 -:106F60000000000000000000000000000000409051 +:106F60000000000000000000000000000000000021 :106F70000000000000000000000000000000000011 :106F80000000000000000000000000000000000001 :106F900000000000000000000000000000000000F1 @@ -59147,16 +59147,16 @@ :106FB00000000000000000000000000000000000D1 :106FC00000000000000000000000000000000000C1 :106FD00000000000000000000000000000000000B1 -:106FE0000000000000000000000000004000000061 -:106FF0000080000000000000000000000000000011 +:106FE00000000000000000000000000000000000A1 +:106FF0000000000000000000000000000000000091 :107000000000000000000000000000000000000080 :107010000000000000000000000000000000000070 :107020000000000000000000000000000000000060 :107030000000000000000000000000000000000050 :107040000000000000000000000000000000000040 :107050000000000000000000000000000000000030 -:10706000000000000000000000000000000000110F -:107070008000000000000000000000000000000090 +:107060000000000000000000000000000000000020 +:107070000000000000000000000000000000000010 :107080000000000000000000000000000000000000 :1070900000000000000000000000000000000000F0 :1070A00000000000000000000000000000000000E0 @@ -59164,7 +59164,7 @@ :1070C00000000000000000000000000000000000C0 :1070D00000000000000000000000000000000000B0 :1070E00000000000000000000000000000000000A0 -:1070F00000012000008800000000000000000000E7 +:1070F0000000000000000000000000000000000090 :10710000000000000000000000000000000000007F :10711000000000000000000000000000000000006F :10712000000000000000000000000000000000005F @@ -59172,7 +59172,7 @@ :10714000000000000000000000000000000000003F :10715000000000000000000000000000000000002F :10716000000000000000000000000000000000001F -:107170000000000000000700000000000000000008 +:10717000000000000000000000000000000000000F :1071800000000000000000000000000000000000FF :1071900000000000000000000000000000000000EF :1071A00000000000000000000000000000000000DF @@ -59180,7 +59180,7 @@ :1071C00000000000000000000000000000000000BF :1071D00000000000000000000000000000000000AF :1071E000000000000000000000000000000000009F -:1071F0000000000000FF000000FF00000000000091 +:1071F000000000000000000000000000000000008F :10720000000000000000000000000000000000007E :10721000000000000000000000000000000000006E :10722000000000000000000000000000000000005E @@ -59188,7 +59188,7 @@ :10724000000000000000000000000000000000003E :10725000000000000000000000000000000000002E :10726000000000000000000000000000000000001E -:1072700000000000000000FF000000FF0000000010 +:10727000000000000000000000000000000000000E :1072800000000000000000000000000000000000FE :1072900000000000000000000000000000000000EE :1072A00000000000000000000000000000000000DE @@ -59196,7 +59196,7 @@ :1072C00000000000000000000000000000000000BE :1072D00000000000000000000000000000000000AE :1072E000000000000000000000000000000000009E -:1072F00000000000000000000000FF000000FFFF91 +:1072F000000000000000000000000000000000008E :10730000000000000000000000000000000000007D :10731000000000000000000000000000000000006D :10732000000000000000000000000000000000005D @@ -59204,7 +59204,7 @@ :10734000000000000000000000000000000000003D :10735000000000000000000000000000000000002D :10736000000000000000000000000000000000001D -:10737000000000000000000000000000FF0000000E +:10737000000000000000000000000000000000000D :1073800000000000000000000000000000000000FD :1073900000000000000000000000000000000000ED :1073A00000000000000000000000000000000000DD @@ -59212,8 +59212,8 @@ :1073C00000000000000000000000000000000000BD :1073D00000000000000000000000000000000000AD :1073E000000000000000000000000000000000009D -:1073F00000000000000000000000000015002A004E -:10740000054000A80000000000000000000000008F +:1073F000000000000000000000000000000000008D +:10740000000000000000000000000000000000007C :10741000000000000000000000000000000000006C :10742000000000000000000000000000000000005C :10743000000000000000000000000000000000004C @@ -59250,242 +59250,242 @@ :10762000000000000000000000000000000000005A :10763000000000000000000000000000000000004A :10764000000000000000000000000000000000003A -:10765000000000000000000000000000000020000A -:10766000200000000000200000002000000020009A -:1076700000002000000020000000000000002000AA -:107680000400000000002000000020000000200096 -:10769000880000000000200000000000000000033F -:1076A00020000000000000000000000000000000BA -:1076B0000000200000040004200000000000008002 -:1076C0002000A000020000008900040000000180EA -:1076D0000000000000000000840000000000000026 -:1076E000400000000000000000000000000000005A -:1076F000000000000000000000000000400000004A -:107700000000000000000000000000000000000079 -:107710000000000000000000000000000000000069 -:107720000000000000000000000000000000000059 -:107730000000000000000000000009000000000040 -:1077400000028000400080000000080000000000EF -:107750004010400000000000000000000000400059 -:107760000000000000000000000000000000000019 -:107770000000040000000000000002000000000003 +:1076500000000000000000000000000000008400A6 +:1076600040000000202140004000000000004000D9 +:107670000000000088004000000020002000000002 +:10768000400000002000400020000000000020001A +:1076900000000000200000000000000020000002A8 +:1076A0004100210001002100200010000000000026 +:1076B0002000000000002000400088004000200062 +:1076C0002000200088004000000020004000000052 +:1076D0000000400010008800200000002000202052 +:1076E000000000000000000020000000400000003A +:1076F000000000000000200040020900000200A07D +:1077000000000040004000200000000000000000D9 +:107710000000000000000000000200002000000047 +:107720000000040004000400040000000000000049 +:1077300000000000000000000000410000002100E7 +:107740002100000000000000002000204040000058 +:107750000000000000000000004000004020000287 +:107760000000000000000000020000000000000017 +:107770000000000000000000000000000000000009 :1077800000000000000000000000000000000000F9 -:1077900000000000000000000000020000000000E7 +:1077900000000000000000000010000000000000D9 :1077A00000000000000000000000000000000000D9 :1077B00000000000000000000000000000000000C9 :1077C00000000000000000000000000000000000B9 :1077D00000000000000000000000000000000000A9 -:1077E0000000000000080008000800080000000871 -:1077F0000000000000000000000000088000000001 -:107800000000000000080008000800080000000850 -:1078100000000000000000000000000880000000E0 -:107820000000000000000008000800080008000038 -:1078300000080000008200000000000000080000B6 -:1078400000000000000000900084008800C00000DC -:107850000088000000000000000000000008000098 +:1077E0000000000000400040000000000000000019 +:1077F0000000000000000000000040000000000049 +:107800000000000000000000000000000000000078 +:107810000000000000000000000000000000000068 +:107820000000000000000000000000000000000058 +:107830000000000000000000000000000000000048 +:107840000000000000000000000000000000000038 +:10785000000000000000000000000000000009001F :107860000000000000000000000000000000000018 :107870000000000000000000000000000000000008 -:1078800000000000000000000000000000000000F8 -:10789000004000200008000000000000000200007E -:1078A00000000000000000000000000000000000D8 +:107880000000000000000000000000000000880070 +:107890000000000090000000880090000000000040 +:1078A0008400000000000000000000000000000054 :1078B00000000000000000000000000000000000C8 -:1078C0000000000000000000018000000000000037 -:1078D00084000000000000000000004104000000DF +:1078C0000000400000004000000000000000000038 +:1078D0000000100000000000000000000000000098 :1078E0000000000000000000000000000000000098 -:1078F0000000000000000000000000000000000088 +:1078F0000000000000000000110000000000000077 :107900000000000000000000000000000000000077 :107910000000000000000000000000000000000067 :107920000000000000000000000000000000000057 :107930000000000000000000000000000000000047 -:10794000000000000000000000002004090000000A +:107940000000000000000000000000000000000037 :107950000000000000000000000000000000000027 -:107960000000000000000000000000000000000017 -:107970000000000000000000000000000000000007 -:1079800000000000000000000000000008000000EF -:1079900000000000000000000000000000000000E7 -:1079A00000000000000000000100000000000000D6 -:1079B00000000000080000000800000000000000B7 -:1079C000000000008200000000000000080000002D -:1079D000000000000000000000000000000008009F -:1079E000000000000800000000000000000000008F -:1079F0000000000000000000000000000000000087 -:107A00000000000000000000000000000000000076 -:107A10000000000000000000000000000000000066 -:107A20000000000000000000000004000000000052 -:107A30000000050000000000000000000000000041 +:1079600000001000000000000000100000000000F7 +:10797000020000000800000000008200000000007B +:1079800000000000000000000000080000000000EF +:107990000000000000000000000082000000400025 +:1079A00000000000000000000000000000000100D6 +:1079B000000001000000080000410041000000003C +:1079C000A000000000000000000000000000000017 +:1079D0000000080008000000000000000000000097 +:1079E0000000080000008400000000000300030005 +:1079F000080041000300000000000000000000003B +:107A0000000041000000030000000000030000002F +:107A10001000100002000000000000000000000044 +:107A20000000000000000000000010000000100036 +:107A30002000000020000000000005000000000001 :107A40000000000000000000000000000000000036 -:107A50000000000000000000000000000000000026 -:107A60000000000000A000A0000000840000000052 -:107A70000000000000000000000000000000000006 -:107A80000000000084000000000000000040000032 -:107A900000000000002100000000000000000000C5 -:107AA00000000000000000000000002000000002B4 -:107AB00000000800000000000000000000000000BE -:107AC00008000000000000008200000082000000AA -:107AD0000000000000000000001100410000000054 -:107AE0000000000000000000000000000000000096 +:107A500008004100000000000000000000001000CD +:107A60000000000010000000000000000000000006 +:107A70000000000000008400000000000000000082 +:107A800000000000000000000000000000000000F6 +:107A900000000000000000000000000000000000E6 +:107AA00000000000000000000000000000000000D6 +:107AB00000000000200000000000000000000000A6 +:107AC00000000000000000000000000000000400B2 +:107AD00000000000000000000000000000000000A6 +:107AE000000000200000000000000800100000005E :107AF0000000000000000000000000000000000086 -:107B00000000000000000000000000000000000075 -:107B100000000000000000000000000000000084E1 -:107B20000000000000000000000000000001000054 -:107B30000000000000000000000000000000000045 +:107B00000020000000000000000000000000000055 +:107B10000000000000000000000000000000002045 +:107B20000000000000000000000000000000000055 +:107B300000000000000080000000000000000000C5 :107B40000000000000000000000000000000000035 -:107B500000000000400000000000000000000000E5 -:107B60000000000000000200000000000000000013 -:107B70000000000000000000000000000000000005 -:107B800000000000000000004000000000000000B5 -:107B900000000000000000000040000000000000A5 -:107BA00000000000000000000002000000000000D3 +:107B50000000000000000000000000000000000025 +:107B60000000000000000000000000000000000015 +:107B700000000041000000000000000000000000C4 +:107B800000000000000000000000000000000000F5 +:107B900000000000000000000000000000000000E5 +:107BA00000000000000000000000000000000000D5 :107BB00000000000000000000000000000000000C5 -:107BC0000000000000000000000000008200000033 -:107BD00000000000000000000000000000020000A3 +:107BC0009000000000000000000000000000000025 +:107BD00000000000000000000000000000000000A5 :107BE0000000000000000000000000000000000095 -:107BF0000000000000000000000000000000000085 -:107C000000000000008200000000000800000200E8 -:107C10000000000000000000000000000000000064 -:107C20000000000000000000080000080000000044 -:107C30000000000000000000000000000000410003 -:107C4000000000000000000000000000000800002C -:107C50000000000000000000000000000000000024 -:107C6000000000000000000000000000000800000C +:107BF00000000000000008000000000000900020CD +:107C00000000110000000000000200000000000061 +:107C10000000000000000800000000000800000054 +:107C2000000000000000000000000020080000002C +:107C3000000000000000000000000000000008003C +:107C400000000088000000000000000008000000A4 +:107C50000000002000000000000000000000000004 +:107C6000000000820000080000000000000000008A :107C70000000000000000000000000000000000004 -:107C800000000000000000000000000000001040A4 -:107C900000200020C00800000000000000000000DC +:107C800000000000000000000000000000000000F4 +:107C900000000000000000000000000000000000E4 :107CA00000000000000000000000000000000000D4 -:107CB0009000000000000000000000000000000034 +:107CB00000000000000000000000000000000000C4 :107CC00000000000000000000000000000000000B4 -:107CD000000000000000000001C090080082A00227 +:107CD00000000000000000000000000000000000A4 :107CE0000000000000000000000000000000000094 :107CF0000000000000000000000000000000000084 :107D00000000000000000000000000000000000073 -:107D10000080000000008000000000000000000063 +:107D10000000000000000000000000000000000063 :107D20000000000000000000000000000000000053 -:107D300011008000000000000000000000000000B2 +:107D3000000000000000000000000000000008003B :107D40000000000000000000000000000000000033 -:107D50000000000000000000000011000000008092 -:107D60000080000000000000000000000000000093 +:107D50000000000000000000000000000000000023 +:107D60000000000000000000000000000000000013 :107D70000000000000000000000000000000000003 :107D800000000000000000000000000000000000F3 -:107D900000000000808400020000000000000000DD +:107D900000000000000000000000000000000000E3 :107DA00000000000000000000000000000000000D3 -:107DB00000000000008000000080000000000000C3 -:107DC00000000000000000000000000000000000B3 -:107DD000000000000000000000000000800900A179 -:107DE0008000000000000000000000000000000013 +:107DB00000000000000000000000000000000000C3 +:107DC0000040000000000000000000000000000073 +:107DD00000000000000000000000000000000000A3 +:107DE0000000000000000000000000000000000093 :107DF0000000000000000000000000000000000083 :107E00000000000000000000000000000000000072 -:107E1000000000000400108210840802000000002E +:107E10000000000000000000000000000000000062 :107E20000000000000000000000000000000000052 -:107E30000000000000000020000000C00000000062 -:107E40000000000000000000000000000000000032 -:107E5000000000000000000000000000000004011D -:107E60009082100084040000000000000000000068 +:107E30000000000000000000000000000000000042 +:107E40000088000000880000000000000000000022 +:107E50000000000000000000000000000000000022 +:107E60000000000000000000000000000000000012 :107E70000000000000000000000000000000000002 :107E800000000000000000000000000000000000F2 -:107E9000000000000000C09000021008080400006C +:107E900000000000000000000000000000000000E2 :107EA00000000000000000000000000000000000D2 -:107EB000000000000000910000888800010000011F -:107EC00000000000000000000000000000000000B2 +:107EB00000000000000000000000000000000000C2 +:107EC0000000900020000100000000000000000001 :107ED00000000000000000000000000000000000A2 -:107EE00008040090108800840000000000000000DA +:107EE0000000000000000000000000000000000092 :107EF0000000000000000000000000000000000082 :107F00000000000000000000000000000000000071 -:107F100000000000000000008000000000008080E1 +:107F10000000000000000000000000000000000061 :107F20000000000000000000000000000000000051 -:107F30000000000000000000410000800000090077 -:107F40000001000000000000000000000000000030 -:107F500000000000000000000000002000000003FE -:107F6000000083800000800000000020000000204E +:107F30000000000000000000000000000000000041 +:107F4000000040000000800010000300000000005E +:107F50000000000000000000000000000000000021 +:107F60000000000000000000000000000000000011 :107F70000000000000000000000000000000000001 :107F800000000000000000000000000000000000F1 -:107F90000000000000000000000000400000008021 +:107F900000000000000000000000000000000000E1 :107FA00000000000000000000000000000000000D1 -:107FB0000000000000000000000000110000008030 -:107FC00000000001000000000000000000000000B0 +:107FB00000000000000000000000000000000000C1 +:107FC0000000000000080020000000000000000089 :107FD00000000000000000000000000000000000A1 -:107FE000000000000010800280000000000000007F +:107FE0000000000000000000000000000000000091 :107FF0000000000000000000000000000000000081 :108000000000000000000000000000000000000070 -:1080100000000000000000000000000084010202D7 -:108020000840020000000000000000000000000006 -:10803000000000000000000000000000000100003F -:1080400000400000000100000000000000000000EF +:108010000000000000000000000000000000000060 +:108020000000000000000000000000000000000050 +:108030000000000000000000000000000000000040 +:10804000000000000000000000010000000000002F :108050000000000000000000000000000000000020 -:10806000000000000000C001100040A0400000001F -:10807000000000824000000000000000000000003E +:108060000000000000000000000000000000000010 +:108070000000000000000000000000000000000000 :1080800000000000000000000000000000000000F0 :1080900000000000000000000000000000000000E0 -:1080A000000000005006000000000000000000007A +:1080A00000000000000000000000000000000000D0 :1080B00000000000000000000000000000000000C0 -:1080C0000000070082210000000000000000000006 +:1080C0000000000000000000818100E007000000C7 :1080D00000000000000000000000000000000000A0 -:1080E0000000000000000000410000E0410000002E +:1080E0000000000000000000000000000000000090 :1080F0000000000000000000000000000000000080 :10810000000000000000000000000000000000006F :10811000000000000000000000000000000000005F -:10812000930093F0C900C90F000000000000000098 +:10812000000000000000000000000000000000004F :10813000000000000000000000000000000000003F -:10814000000000000000F0F000000000000000004F +:10814000000000000000000000000000000000002F :10815000000000000000000000000000000000001F :10816000000000000000000000000000000000000F -:108170000000C3C3C3C300000000000000000000F3 +:1081700000000000000000000000000000000000FF :1081800000000000000000000000000000000000EF :1081900000000000000000000000000000000000DF -:1081A0000000930F93FFC9F0C9FF0000000000001A +:1081A00000000000000000000000000000000000CF :1081B00000000000000000000000000000000000BF -:1081C0000000000000000000F0F0000000000000CF +:1081C00000000000000000000000000000000000AF :1081D000000000000000000000000000000000009F :1081E000000000000000000000000000000000008F -:1081F00000000000C3C3C3C3000000000000000073 +:1081F000000000000000000000000000000000007F :10820000000000000000000000000000000000006E :10821000000000000000000000000000000000005E :10822000000000000000000000000000000000004E :10823000000000000000000000000000000000003E :10824000000000000000000000000000000000002E :10825000000000000000000000000000000000001E -:108260000000000000000000000000000000000806 -:10827000400000842000000000000000000000001A +:10826000000000000000000000000000000000000E +:1082700000000000000000000000000000000000FE :1082800000000000000000000000000000000000EE :1082900000000000000000000000000000000000DE -:1082A000000000000000D8D8C300F69081810000D3 +:1082A00000000000000000000000000000000000CE :1082B00000000000000000000000000000000000BE -:1082C000000000000000FFFF0000FFFF00000000B2 +:1082C00000000000000000000000000000000000AE :1082D000000000000000000000000000000000009E :1082E000000000000000000000000000000000008E :1082F000000000000000000000000000000000007E :10830000000000000000000000000000000000006D :10831000000000000000000000000000000000005D -:108320000000000000000000D8D8FF3CF690E7E70E +:10832000000000000000000000000000000000004D :10833000000000000000000000000000000000003D :10834000000000000000000000000000000000002D :10835000000000000000000000000000000000001D :10836000000000000000000000000000000000000D -:108370000000000000000000000000000000FFFFFF -:10838000FFFF0000000000000000000000000000EF +:1083700000000000000000000000000000000000FD +:1083800000000000000000000000000000000000ED :1083900000000000000000000000000000000000DD -:1083A000000000000000000000000000000000C00D +:1083A00000000000000000000000000000000000CD :1083B00000000000000000000000000000000000BD -:1083C0000000000000000000000005002A00054039 -:1083D00000A80000000000000000000000000000F5 -:1083E0000000000000000000000000000061000626 -:1083F000000D000030610006C0CD000000610006E5 -:10840000000D00000000000000000000000000005F +:1083C00000000000000000000000000000000000AD +:1083D0000000000005610A2F850D00A000000000CC +:1083E000000000000000000000000000000000008D +:1083F000000000000000000000000000000000007D +:10840000000000000000000000000000000000006C :10841000000000000000000000000000000000005C :10842000000000000000000000000000000000004C :10843000000000000000000000000000000000003C :10844000000000000000000000000000000000002C :10845000000000000000000000000000000000001C :10846000000000000000000000000000000000000C -:108470000000FFC3FFC30000000000000000000078 -:108480000000FFC3FFC30000000000000000000068 +:1084700000000000000000000000000000000000FC +:1084800000000000000000000000000000000000EC :1084900000000000000000000000000000000000DC :1084A00000000000000000000000000000000000CC :1084B00000000000000000000000000000000000BC :1084C00000000000000000000000000000000000AC :1084D000000000000000000000000000000000009C :1084E000000000000000000000000000000000008C -:1084F00000000000FFC3FFC30000000000000000F8 -:1085000000000000FFC3FFC30000000000000000E7 +:1084F000000000000000000000000000000000007C +:10850000000000000000000000000000000000006B :10851000000000000000000000000000000000005B :10852000000000000000000000000000000000004B :10853000000000000000000000000000000000003B @@ -59502,177 +59502,177 @@ :1085E000000000000000000000000000000000008B :1085F000000000000000000000000000000000007B :10860000000000000000000000000000000000006A -:10861000000000000000000000000000000000005A -:108620002000000000000000000004002000000006 -:1086300020000000000000000000200000000000FA -:108640002000C00200000000000020002000000008 -:1086500020000000040004000000040000030000EB -:1086600000002000000000000000000020000000CA -:108670000000000000002000200000002004000096 -:1086800000000000100000000000000000050000D5 -:108690000000000000002000040000002000000096 -:1086A00000000000000000001000000000000000BA -:1086B00000000000000000000000000000000000BA -:1086C00000000000000000000000000000000000AA -:1086D000000000000000000000000000000000009A -:1086E000000000000000000000000000000000008A -:1086F0000000000020000000000000000000000159 -:1087000000000000000000000000000000000084E5 -:10871000000000A0000000000000000000000000B9 -:108720000000000000000000000000000000000049 -:108730000000000000000000000000000000000039 -:108740000000000000000000000000000000000029 -:108750000000000000000000000000000000000019 +:10861000000000000000000000000000880088004A +:108620001000882004002000C000C0008800000066 +:10863000000088008800000088002000C0040000BE +:10864000200010004000000000002000200000007A +:108650000000200040000000000020000003200077 +:10866000A000200020002000C000A000C000A0004A +:1086700000008400880020000000C0A021800000CD +:108680002000C00020008800200200008800200098 +:10869000000020208800200088000000C0000000AA +:1086A0000000000000024000000000001000000078 +:1086B000000200020000104000000000000000C0A6 +:1086C000000000000000002000C0100010A000000A +:1086D00000A000A00000000000A0000000000000BA +:1086E0000000000000400500000000000000004005 +:1086F000000000000000000000000000000508204D +:1087000000200000000000A00020002000A0202089 +:108710000000002000A02000000000200000000059 +:1087200000000040000000400000000002000800BF +:1087300000000000000000000000000000084000F1 +:108740000000000000000000000000000000001019 +:1087500000000000000000000000000000084004CD :108760000000000000000000000000000000000009 -:1087700000000000000000000000000000000000F9 -:1087800000000000000000000000000000000000E9 -:1087900000000000000000000000000000000000D9 -:1087A0001100000800000084000800080008000014 -:1087B0000008000800080000000000820000000817 -:1087C000000800840000000000820008008400000F -:1087D00000080084000800000000000000000008FD -:1087E0000008000000000008000800000010000061 -:1087F00000000084000000080000000000000000ED -:108800000008008400840008000800000000000048 -:108810000000000000000008000000080000000048 -:108820000008A0000008000000000021002100084E -:108830000021000000000000000590210021000040 -:108840000021008800030000000000210004002136 -:1088500000210000000400040020002100000003AB -:10886000002100880000000800000008002100002E -:108870000000002100000000000000050021002190 -:10888000000000210009002100000008002100086C -:108890000000002100210008000000050021002147 -:1088A000000000210008000000000000000000009F -:1088B000000000000800000041000300000000006C -:1088C0000000000000040000008400A00000000080 -:1088D0000000000000000000000000000000000098 -:1088E0000000110000040000000000000000000073 -:1088F00000000000000000000800000000000084EC -:10890000000000000000000003000000080000005C -:108910000000000000000000000000000000000057 -:10892000000000000000030000000000C000000084 -:108930000000000000000000000000000000000037 -:10894000900000000000C0000000000000000000D7 -:108950000000000000008200000000008400000011 -:1089600000000000040082000000000010008200EF -:10897000000000000000000000000800000082006D -:108980000000000000000000000000000000820065 -:10899000000000000000000008000000000082004D -:1089A00000000000080000000000000000000000BF +:108770000010000000000000000000400040000861 +:108780001002004000400000000000000000000057 +:108790000000000000000000000000400040000851 +:1087A0002000004000000040000000000000000029 +:1087B0000000009000000000000000000000000128 +:1087C0008000000000000000000000000000000029 +:1087D0000000000000000000000000000000000198 +:1087E0008001000000000000000000000000000008 +:1087F0000000200020000000000000000000000039 +:108800000001800100000000000000002040004046 +:1088100000000000404000000000000000000000D8 +:108820000901C0000000000000000000000000007E +:108830000000000000000000000000000000000038 +:108840000000000000000000C000C0000000840024 +:108850000800820000008200840000000000000088 +:108860000000000000000000000000000000000008 +:108870000000C00000000000000000000000000038 +:10888000880000110000000000000000000000004F +:1088900000000000080000000000000000000000D0 +:1088A00000000000000008000000000000000000C0 +:1088B00000000000000000000000000000000000B8 +:1088C00000000000000000000000000000000000A8 +:1088D0000000000000000000050000000000000093 +:1088E0000000000000000000000000000400000084 +:1088F000000000000000000009000000000000006F +:108900000000000000000000000000000000000067 +:10891000000000000000000000000900000000004E +:10892000000010000000000010000000000008001F +:10893000820000000800080000000000080000009D +:10894000000000000800C08808000800820008003D +:108950000000000082000000840000000400840089 +:10896000080000000000908800000000C000000027 +:1089700084008200000000008200A00000000000CF +:108980000000C00000000000C004A00000000000C3 +:1089900084000000C0008400C00082000000A0002D +:1089A000A0004000000082000882000000000000DB :1089B00000000000000000000000000000000000B7 -:1089C000000000000000000000000000000000089F -:1089D0000000000000000084000000000000000013 -:1089E000000000000000000000000000000800007F -:1089F0000000000000000000000000000000000077 -:108A00000000000000000000000000000000000066 -:108A10000000000000000000000000000000000056 -:108A2000000000000008000000000000000020001E -:108A30000000A00000000000C0000000900000083E -:108A4000000000000002000900080100000000080A -:108A50000000000082000000000000110003000878 -:108A600000000000000000090008000800030005E5 -:108A70000008100000090000000082000000000053 -:108A800000080000000800000000000800000000CE -:108A900000080000000000000020000000000000AE -:108AA000000800400008000800090008000000005D -:108AB00000000000000000000000000000000000B6 -:108AC0000000000000000000000000001000000096 -:108AD0000000000000000000000000000000000096 -:108AE00000000000000000000000000008850000F9 -:108AF0000000000000000000000000000000000076 +:1089C00000000000000000000005000000000000A2 +:1089D0000000000000000000000000000000000097 +:1089E0000000000000000000002100000000000066 +:1089F0000000030000000000000000000000030071 +:108A0000050000000000000000100311000000003D +:108A10000010000000000000000000000000004006 +:108A2000000000000000000000000509A000000098 +:108A30000800C000A000A000C000820008000000E4 +:108A4000000008000800080000008200000000008C +:108A50000000C0000000000008000000000000004E +:108A6000000000000000840008000000000000007A +:108A70000000000082000000000040008200900022 +:108A800004000000000000000000000000000800DA +:108A900000000800900000008800000000001000A6 +:108AA000000000110000000410000000C0210000C0 +:108AB0000000000000000020000000000000000096 +:108AC00000000000000000000000000000000000A6 +:108AD0000000000000000000000000000588090000 +:108AE00000000088000000000000000000000000FE +:108AF000110000840300008400000000000000005A :108B00000000000000000000000000000000000065 -:108B10001100000000820088110000000000000029 +:108B10000000000000000000000000000000000055 :108B20000000000000000000000000000000000045 -:108B30000000000000210008C000000008008200C2 -:108B40000000000000030003000500050003000012 -:108B5000002100210000840000000003000000004C -:108B600000000000000300030003000000050000F7 -:108B7000000000050000002108028403C00000007E -:108B8000900000000000000000030000000000054D -:108B90000008000500000021000084030000000020 -:108BA00000000000000000030003000000000005BA -:108BB00000000000000000000000000000000000B5 +:108B300090000800400040000800C00090001000B5 +:108B40000000000000000000000000000000000025 +:108B500000000000C0000000080008000000000045 +:108B60000000000000000000000000000000000005 +:108B700000001000000000004000A0000002000003 +:108B80000002000000000000080082000000000059 +:108B9000000000000000000000000000840240000F +:108BA00084000000000000009000000000000000B1 +:108BB00010000000000000000000000000000000A5 :108BC00000000000000000000000000000000000A5 :108BD0000000000000000000000000000000000095 :108BE0000000000000000000000000000000000085 -:108BF0000000000000000000000000000000000075 -:108C00000000000000000000000000000000000064 -:108C10000000000100000000000000000000000053 +:108BF0000000000000000000000000000008000865 +:108C000000102040000800000010001000000000CC +:108C10000200000000000000000000000000000052 :108C20000000000000000000000000000000000044 -:108C30000000000000010001000100C0000100016F -:108C400000C000890000010100880004000100014B -:108C500000C1000000010001000100C0000100018E -:108C600000C000410001A10100200002000100013C -:108C700000C10000000000010001000100C000016F -:108C8000000100C001410000030100400004000198 -:108C9000000100C1000000010001000100C000014E -:108CA000000100C000050000010100400088000133 -:108CB000000100C10000004100410041008200416C -:108CC000004100820241000240410000008000415A -:108CD0000041008500000041004100410082004148 -:108CE000004100820241001010410000008000415C -:108CF0000041008500000000004100410041008269 -:108D000000410041008204410005904100000080C4 -:108D10000041004100850000004100410041008207 -:108D200000410041008202410005104100000000A6 -:108D30000041004100850000410003000000008068 -:108D40004100880000000800850090000091A0000C -:108D5000C100C1000082808041000300000000804B -:108D6000410088000000080088008200008883001D -:108D7000C100C100008080800000410003000000AD -:108D80000080410088000000080008008200008088 -:108D90008300C100C100008080804100030000000A -:108DA0000080410088000000080008008400008264 -:108DB00084004100C10000808080010001000000AB -:108DC00000C00100C10000000100400008C0000414 -:108DD000C0004100C100008410100100010000002B -:108DE00000C00100C10000000100090040C00008EF -:108DF000C1000900C1000084101000000100010042 -:108E0000000000C00100C10000000100210004C0FA -:108E10000008C1000900C100008410100100010019 -:108E2000000000C00100C10000000100210040C09E -:108E30000008C0001100C1000084101000C0000133 -:108E4000C0C100000000000100C0820800910001C4 -:108E500000C10100000000010000000000C000018E -:108E6000C0C100000000000100C004080041000172 -:108E700010C101000000000100000000000000C05F -:108E80000001C0C100000000000100C10408004151 -:108E9000000110C10100000000010000000000C03E -:108EA0000001C0C100000000000100C01008004126 -:108EB000000110C10000000000010000000000805F -:108EC000004180C100000000004100898090004105 -:108ED000004100C1080000000041001100000080B6 -:108EE000004180C10000000000410089809000C165 -:108EF000004100C108000000004100110000000016 -:108F00000080004180C1000000000041008280908C -:108F100000C1004100C10800000000410011000034 -:108F20000080004180C10000000000410089809065 -:108F300000C1004100C1000000000041001100001C -:108F4000C100800080C10000410280089000410003 -:108F5000C1C180008010000041000000800041007D -:108F6000C100800080C100004108800090004100E5 -:108F7000C1418000800200004100000080004100EB -:108F80000000C100800080C100004102800090000C -:108F90004100C141800080020000410000008000CB -:108FA0004100C100800080C10000410280009000AB -:108FB0004100C141800080020000410000008000AB -:108FC0004100C1004000C0C10000010020011000AC -:108FD0000100C1098200C000000001000000C000C3 -:108FE0000100C1004000C0C10000010020001000CD -:108FF0000100C1098200C000000001000000C000A3 -:1090000001000000C1004000C0C1000001002000BC -:1090100010000100C1418200C000000001000000FA -:10902000C0000100C1004000C0C1000001002000DC -:1090300010000100C1031000C0000000010000008A -:10904000C00001000000000000000042000000001D -:1090500000000000811200880700480000000000A6 -:1090600000000000000000000000004200000000BE -:109070000000000081120088070048000000000086 -:10908000000000000000000000000000004200009E -:109090000000000000008112008807004800000066 -:1090A000000000000000000000000000004200007E -:1090B0000000000000008112008807004800000046 +:108C30000000000000000000000000000100000033 +:108C40000000008200000000002002C000000000C0 +:108C500000010000000020000000000100000000F2 +:108C6000000001200100C0000020C0820000C00000 +:108C700000010000000000000000000000000000F3 +:108C80009000000101200001C0000002C08200002D +:108C9000C000000100000000000000000001000012 +:108CA0000000000001900001000000101010000002 +:108CB00000000001000000000000000000050200AC +:108CC0000000000505000005050000008000000010 +:108CD0000000004100000000000000000003000050 +:108CE0000000000308000205A100000080800000D1 +:108CF00080000003000000000000000000000020D1 +:108D00000000000000030800001083000080808045 +:108D100000008000000300000000000000000010C0 +:108D2000000000000003400000101100008000005F +:108D300000000000004100000000020000000000F0 +:108D40000000210000000300A000900000000500CA +:108D5000800000000003800200000200000000000C +:108D60000000200000000200400005000000030099 +:108D70008000000000C0802000000000080000000B +:108D80000000000020000000100040004000000033 +:108D900003000000000000808005000009000000C2 +:108DA000000000000800000020001100100000007A +:108DB00010000000000000008040000001000000E2 +:108DC0000000000000000000000002000308000096 +:108DD0000000400000000000C00100000100000091 +:108DE00000000000000000000100900040C00000F2 +:108DF00001004000000000C08200000000000000F0 +:108E000000000000000000000000010009000890C0 +:108E1000000001009000000000C08200000000007F +:108E2000000000000000010000000000080003082E +:108E300000000000820000000000C00000000000F0 +:108E40000000000000000000000090010090000001 +:108E50000000000000000000000100000000000011 +:108E600000000000000000000000400100020000BF +:108E700001000000000000000000000000000000F1 +:108E8000000000000000000000000000040100409D +:108E9000000083000000000000000000000000004F +:108EA00000000000000000000000080182000088AF +:108EB00000000000000000000000000100000000B1 +:108EC000000000000000000000000041000300005E +:108ED000000005000000000000000041000000004C +:108EE00000000000000000000000004100200080A1 +:108EF00000004100000000000000004100000000F0 +:108F00000000000000000000000000000041802080 +:108F100000800000C10003000000000000410000CC +:108F200000000000000000000000000000058310A9 +:108F300000000000100000000000000000410000E0 +:108F40000000000200830000001000020200000088 +:108F5000004180000020000000000000000003200D +:108F60000000000200830000000200000500000075 +:108F700000410000004000000041000000000340EC +:108F800000000008800000C1000000028010820084 +:108F900000000041800800020000004100000000C5 +:108FA000404000008009008300000008802082000B +:108FB00000000041800000080000000000000000E8 +:108FC00002C000008201008300000001C001C10056 +:108FD000000000830200000000000000000000000C +:108FE000008900008201008300000001200082004F +:108FF000000000214000000000000001000000000F +:1090000000080000000020000040000000010201F4 +:1090100082000000008982010001000000010000C0 +:1090200000000188000008000083000000004000EC +:1090300041000000002104000000000000000000CA +:10904000000001040000000000000000000000001B +:1090500000000000811200E007004800000000004E +:109060000000000000000000000000000000000000 +:1090700000000000811200E00800484200000000EB +:109080000000484200000000000000000000000056 +:10909000000000000000811200E080004842000053 +:1090A0000000000048420000000000000000000036 +:1090B000000000000000811200E0070048000000EE :1090C00000000000000000000000000000000000A0 :1090D0000000000000000000000000000000000090 :1090E0000000000000000000000000000000000080 @@ -59697,106 +59697,106 @@ :10921000000000000000000000000000000000004E :1092200000000000000000000000DEAE757B0000C2 :10923000000000000000000000000000000000002E -:1092400000000000000000000000DEAE60C6030069 -:109250000000000000000031E000000000000000FD -:109260000C0000000000000000C0630660C60300A0 -:109270000000000000000031E000000000000000DD -:109280000C0000000000000000C06306000060C683 -:1092900003000000000000000031E00000000000BA -:1092A00000000C0000000000000000C0630660C663 -:1092B00003000000000000000031E000000000009A -:1092C00000000C0000000000000000C06306000069 -:1092D0000000000800000000000000000000000086 -:1092E000000000000000000000000000000000007E -:1092F0000000000000000000000000000004080062 -:109300000000000000000000000200000000000259 -:10931000C000080000000000000000000000000085 -:10932000200000000000000000000000000000001D -:1093300020002000000400040000000000000000E5 -:1093400020000000000000000000000000000000FD -:1093500000000000000000000000000040000000CD -:1093600000020002000200020000000000000000F5 -:1093700000000000000000000000000000000000ED -:1093800000000000000000000000000000000000DD -:1093900000000000000000000000000000000000CD -:1093A000000000004100000000000000000000007C -:1093B000000040000000000000000000000040002D -:1093C000002000000000000000000000000000007D -:1093D000002000000000000000000000000002006B -:1093E0000000000000000000020002000000000079 -:1093F000020000000000000000000000000000006B -:10940000000000000000000000000000000000005C -:10941000020000000000000000000000000000004A -:10942000000000000000000000000200000000003A -:109430000000000000000000000002000100000029 -:10944000000000000000000000000000000000001C -:109450000000000000000000000000840008000878 -:109460000084000800080000000800080000000058 -:109470000000000000000000008800000008000854 -:109480000000000800080000000800080088000034 -:1094900000080000000000040000000800000008B0 -:1094A0000008000000080008000000080008000094 -:1094B0000000000800000000000000080000100884 -:1094C00000080000000800880000000800080000F4 -:1094D000000000080000000000000008002100005B -:1094E0000000000000000000000000000009000073 -:1094F000000000090400000000000000000000005F +:1092400000000000000000000000DEAE61260340C8 +:109250000000000000000230A0000000000000003C +:109260000C4000000000000002C06486612603403C +:109270000000000000000230A0000000000000001C +:109280000C4000000000000002C06486000061265F +:1092900003400000000000000230A00000000000B9 +:1092A00000000C4000000000000002C0648661263F +:1092B00003400000000000000230A0000000000099 +:1092C00000000C4000000000000002C06486200086 +:1092D00020000000880000001000100010001000A6 +:1092E00010000000400040000000000010002000BE +:1092F000C00040000400400040004000000040006A +:1093000000000000200020000000400010000002CB +:109310002000400000002000200020004080840049 +:1093200020000000880020002000850020000000B0 +:109330000000200040008400400020002000880041 +:109340002000400020002000400040002000880055 +:109350004000000000020400400000000000000087 +:1093600000904000090020001000000000000000F4 +:1093700000000000000000000000000000004000AD +:10938000200000000000004000000000000000007D +:109390000000000000000000000040000000094044 +:1093A0000000000000000000100000404090090292 +:1093B00000001000100000002000202040002100CC +:1093C0000020090200000000000000000000000072 +:1093D000000000000000000002000000200000006B +:1093E00000000000000000009000000000000000ED +:1093F0000000000000000000084000000000000025 +:1094000000000000000000009000000000000000CC +:10941000000000000000000000000000000000004C +:1094200000400000000000000200000000004000BA +:10943000000000000000000000000200000000002A +:10944000000000000000000000009000000000008C +:10945000000000000000000000000000000000000C +:1094600000000000000000000000000000000000FC +:1094700000000000000000000000000000000000EC +:1094800000000000000000000000000000000000DC +:1094900000000000000000000000000000000000CC +:1094A00000000001000000000000000000000000BB +:1094B000800000000000000000000000000000002C +:1094C0000000000000000000000000000000008814 +:1094D0000000000000000004000000000000000088 +:1094E000000000000000000000000000000000007C +:1094F000000000000000000000000000000000006C :10950000000000000000000000000000000000005B -:10951000000000000000000000000000000000004B -:10952000000000000000000000000000000000003B -:109530000000000000000000000004000000000027 -:1095400000200000000000000000000000000000FB -:10955000000000000000000000000000000000000B -:1095600000080000000041000000000000080008A2 -:109570000008000000C0110000080000000000000A -:10958000000000004100004000000000000800084A -:109590000000000000840000000005000000000042 -:1095A0000000410000000000000000000000000872 -:1095B0000008000000000084000008000000000017 -:1095C0000000410000000000000000000000000852 -:1095D00000080000000000840008000000000000F7 -:1095E000000000000000000000000000000000007B -:1095F000000000000000000000000000000000006B -:10960000000000000000000000000000000000005A -:10961000000000000000000000000000000000004A -:10962000000000000000000000000000000000003A -:10963000000000000000000000000000000000002A -:109640000000000000000000010000800000000099 -:10965000000000000000000000000000000000000A -:1096600000000000000000000000000000000000FA -:1096700000000000000000000000000000000000EA -:1096800000080000000000000000000000000000D2 +:10951000000000000000000000004000C00000004B +:10952000000000000100000000000000000000003A +:109530000000040010009000000000050000000082 +:10954000000000000000000000000000000000001B +:1095500000000000000000000000000021000800E2 +:109560004100000009004100000000000000000070 +:109570000800080000000000000041004100410018 +:109580004100050021000800000003000000210048 +:109590000000000000004100000000004100000049 +:1095A000410000000000020000000000000009006F +:1095B000000000000000C1000900000009000400D4 +:1095C0000200000020000000000000000000000079 +:1095D0004004080000000084000000000000C000FB +:1095E00000000000000000000800C00000000800AB +:1095F00000000000000000000800820008000000D9 +:10960000080000000000080000000000000000004A +:10961000000000001000A00000000000000000009A +:109620000800A0000000000008000000000000008A +:10963000000000000000000000000800080000001A +:10964000840000000000000000000800000000008E +:109650008200100000000800000000000000000070 +:109660000000000000000200000000000040004078 +:10967000004000400000000000000000000000006A +:1096800000001000000000000000000000000000CA :1096900000000000000000000000000000000000CA :1096A00000000000000000000000000000000000BA :1096B00000000000000000000000000000000000AA -:1096C0000000000000000000000020000004000076 -:1096D0000000000000000000000000000000080082 -:1096E000000000000000000000000000000000007A -:1096F00000000000000090000000000000000000DA -:1097000000000000C0000000000000000000000099 -:109710000000000000000000000000000000000049 -:109720000000020000000000000000000000000037 -:109730000000000000000000000000000000000029 -:109740000000080000009000000000000000000081 -:109750000000000000000000000000000000000009 -:1097600000000000000000000020000800A0000829 -:109770000008000000002088000000000008000031 -:1097800000000000000000000008000800000008C1 -:1097900002080000000011000000000000080000A6 -:1097A0000000004000000000000000080008000069 -:1097B0000008080800000000000000A000000000F1 -:1097C0000000002000000000000000080008000069 -:1097D00000080888000000000000000000000008E9 +:1096C000000000000000000000000000000000009A +:1096D0000000000000000000000000000000820008 +:1096E000C0000000000000000800000000000000B2 +:1096F000080000000000C000000008008200000018 +:109700001000000000000000080000000000C00081 +:10971000080000000080C00000008200A0000000DF +:10972000040000000000100000000000C000C000A5 +:10973000000000000000880001000002000000009E +:109740000000000000000000040000000000000015 +:109750000000000000000000400000000000A00029 +:1097600000000000000000000800000008000000E9 +:109770000800000000000900009000000000000048 +:109780000000000000000000008800000000000051 +:10979000000000000090031000880000000000009E +:1097A00000000000000000000000080408000300A2 +:1097B0000000080000900090030020040000030057 +:1097C000090000000000050000400400000409003A +:1097D00000001100009008004000000000000000A0 :1097E0000000000000000000000000000000000079 :1097F0000000000000000000000000000000000069 -:109800000000000000000000000000000000000058 -:109810000000000000000000000000000000000048 -:109820000000000000000000000800000000000030 -:109830000000000000000000000000000000000028 -:109840000000000000000000000800000000000010 -:109850000000000000000000000000000000000008 +:1098000000000000000082000000000000000000D6 +:1098100082000000000010001000000000000000A6 +:1098200008000000000008008400000000000000A4 +:109830000000100000000005020000000008000900 +:109840000041000000000000000000000000004196 +:1098500000000000000000000000C0000000000048 :1098600000000000000000000000000000000000F8 -:1098700000000000000000000000000000000000E8 +:1098700000000200000000000000000000000000E6 :1098800000000000000000000000000000000000D8 :1098900000000000000000000000000000000000C8 :1098A00000000000000000000000000000000000B8 @@ -59808,332 +59808,332 @@ :109900000000000000000000000000000000000057 :109910000000000000000000000000000000000047 :109920000000000000000000000000000000000037 -:109930000000000000000000000000000000000027 -:109940000000000000000000000000000000000017 -:109950000100000000000000000000000000000006 +:109930002088400400842084890800020004200458 +:109940000001A00100000001000000000000000074 +:109950000000000000000000000000000000000007 :1099600000000000000000000000000000000000F7 :1099700000000000000000000000000000000000E7 :1099800000000000000000000000000000000000D7 :1099900000000000000000000000000000000000C7 :1099A00000000000000000000000000000000000B7 -:1099B00000000000000000000000000000000000A7 -:1099C0000000000000000000000000000000000097 -:1099D0000000110021000000000000000000000055 +:1099B0000000000000800000000010000000000017 +:1099C0000000004100210508000300000000000025 +:1099D0000000000000000000000000000000000087 :1099E0000000000000000000000000000000000077 :1099F0000000000000000000000000000000000067 :109A00000000000000000000000000000000000056 :109A10000000000000000000000000000000000046 :109A20000000000000000000000000000000000036 -:109A30000000000000000000000000000000000026 -:109A40000000000000000000000000000000000016 -:109A50000000000000410900000300800000000039 +:109A3000000000000000008900008080800080A1FC +:109A40000000008000000000000000000000000096 +:109A50000000000000000000000000000000000006 :109A600000000000000000000000000000000000F6 :109A700000000000000000000000000000000000E6 :109A800000000000000000000000000000000000D6 -:109A900000000000000000000000000000000000C6 -:109AA00000000000000000000000000000000000B6 -:109AB00000000000000000000000000000000000A6 -:109AC0000000000000000000000000000000000096 -:109AD00000000000000000010100000000880000FC +:109A9000000000000000000000000000400008007E +:109AA0002000200000000000000000000000000076 +:109AB0000000000000000800C0C0C00882C008000C +:109AC00002C0082088C000900000000000000000D4 +:109AD0000000000000000000000000000000000086 :109AE0000000000000000000000000000000000076 :109AF0000000000000000000000000000000000066 :109B00000000000000000000000000000000000055 :109B10000000000000000000000000000000000045 :109B20000000000000000000000000000000000035 -:109B30000000000000000000000000000000000025 -:109B40000000000000000000000000000000000015 -:109B5000000000000000000000008800000001007C +:109B3000000000000000000091100010C09090C0D4 +:109B400021100010C0080408000000008900000077 +:109B50000000000000000000000000000000000005 :109B600000000000000000000000000000000000F5 :109B700000000000000000000000000000000000E5 :109B800000000000000000000000000000000000D5 :109B900000000000000000000000000000000000C5 :109BA00000000000000000000000000000000000B5 -:109BB00000000000000000000000000000000000A5 -:109BC0000000000000000000000000000000000095 +:109BB00000000000000000000000410000008000E4 +:109BC00000004100000080808000000010000200C2 :109BD0000000000000000000000000000000000085 -:109BE0004100000000000000000000000000000034 +:109BE0000000000000000000000000000000000075 :109BF0000000000000000000000000000000000065 :109C00000000000000000000000000000000000054 :109C10000000000000000000000000000000000044 :109C20000000000000000000000000000000000034 :109C30000000000000000000000000000000000024 -:109C40000000000000000000000000000000000014 -:109C500000000000000000000000000000001011E3 +:109C4000800000000000008000800000100008007C +:109C500000000800000000000000000000000000FC :109C600000000000000000000000000000000000F4 :109C700000000000000000000000000000000000E4 :109C800000000000000000000000000000000000D4 :109C900000000000000000000000000000000000C4 -:109CA00000000000000000000000000000000000B4 -:109CB00000000000000000000000000000000000A4 -:109CC0000000000000000000000000000000000094 -:109CD0000000000000000000000000000000000084 -:109CE0000101000000000000000000000000000072 +:109CA000000000000000009000080000000000001C +:109CB0000000000000000000000000000000900014 +:109CC000A02004C08800C000C0020810C00001002D +:109CD0000100000001000000000000000000000082 +:109CE0000000000000000000000000000000000074 :109CF0000000000000000000000000000000000064 :109D00000000000000000000000000000000000053 :109D10000000000000000000000000000000000043 :109D20000000000000000000000000000000000033 :109D30000000000000000000000000000000000023 -:109D40000000000000000000000000000000000013 -:109D50000000000000000000000000000000000003 -:109D6000000000E000008141000000000000000051 +:109D400000000000000048420000000000004842FF +:109D5000840000E00000000000000000000000009F +:109D600000000000000000000000000000000000F3 :109D700000000000000000000000000000000000E3 :109D800000000000000000000000000000000000D3 :109D900000000000000000000000000000000000C3 :109DA00000000000000000000000000000000000B3 :109DB00000000000000000000000000000000000A3 -:109DC0000000000000000000000000000000000093 -:109DD0000000000000000000000000000000000083 +:109DC000000022000022600000600410082024002F +:109DD000002400000000000000000000000000005F :109DE0000000000000000000000000000000000073 :109DF0000000000000000000000000000000000063 :109E00000000000000000000000000000000000052 :109E10000000000000000000000000000000000042 :109E20000000000000000000000000000000000032 :109E30000000000000000000000000000000000022 -:109E40000000000000000000000000000000000012 -:109E50000000000000000000000000000000000002 +:109E4000000000001100001109000009014002801B +:109E50008100008100000000000000000000000000 :109E600000000000000000000000000000000000F2 :109E700000000000000000000000000000000000E2 :109E800000000000000000000000000000000000D2 :109E900000000000000000000000000000000000C2 :109EA00000000000000000000000000000000000B2 -:109EB00000000000000000000000000000000000A2 -:109EC0000000000000000000000000000000000092 -:109ED0000000000000000000000000000000000082 +:109EB000000004000000000000000000000000009E +:109EC00000000000000006000006448800000408AE +:109ED0000102060000060000000000000000000073 :109EE0000000000000000000000000000000000072 :109EF0000000000000000000000000000000000062 :109F00000000000000000000000000000000000051 :109F10000000000000000000000000000000000041 :109F20000000000000000000000000000000000031 :109F30000000000000000000000000000000000021 -:109F40000000000000000000000000000000000011 -:109F50000000000000000000000000000000000001 +:109F40000000000000000000900000900000448825 +:109F500010204080900000900000000000000000F1 :109F600000000000000000000000000000000000F1 :109F700000000000000000000000000000000000E1 :109F800000000000000000000000000000000000D1 :109F900000000000000000000000000000000000C1 :109FA00000000000000000000000000000000000B1 :109FB00000000000000000000000000000000000A1 -:109FC0000000000000000000000000000000000091 -:109FD0000000000000000000000000000000000081 -:109FE0000000000000000000000000400006000C1F +:109FC0000000000000000000000060000000000031 +:109FD0001000000000000000080000210003800DB8 +:109FE0000000000000000000000000000000000071 :109FF0000000000000000000000000000000000061 :10A000000000000000000000000000000000000050 :10A010000000000000000000000000000000000040 :10A020000000000000000000000000000000000030 :10A030000000000000000000000000000000000020 :10A040000000000000000000000000000000000010 -:10A050000000000000000000000000000000000000 -:10A060000000000000000000000000000000FF00F1 -:10A07000FFFF0000000000000000000000000000E2 +:10A0500000000000000000000000000055FF415516 +:10A0600000000000000000000000000000000000F0 +:10A0700000000000000000000000000000000000E0 :10A0800000000000000000000000000000000000D0 :10A0900000000000000000000000000000000000C0 :10A0A00000000000000000000000000000000000B0 :10A0B00000000000000000000000000000000000A0 :10A0C0000000000000000000000000000000000090 -:10A0D0000000000000000000000000000000000080 -:10A0E0000000000000000000000000000000000070 -:10A0F000FF00000000000000000000000000000061 +:10A0D000000000000000000000000000000055FF2C +:10A0E00041550000000000000000000000000000DA +:10A0F0000000000000000000000000000000000060 :10A10000000000000000000000000000000000004F :10A11000000000000000000000000000000000003F :10A12000000000000000000000000000000000002F :10A13000000000000000000000000000000000001F :10A14000000000000000000000000000000000000F :10A1500000000000000000000000000000000000FF -:10A1600000000000000000000000000000000000EF -:10A1700000000000F0F000000000000000000000FF +:10A160000C000500000000000000000000000000DE +:10A1700000000000000000000000000000000000DF :10A1800000000000000000000000000000000000CF :10A1900000000000000000000000000000000000BF :10A1A00000000000000000000000000000000000AF :10A1B000000000000000000000000000000000009F :10A1C000000000000000000000000000000000008F :10A1D000000000000000000000000000000000007F -:10A1E000000000000000000000000000000000006F -:10A1F000000000000000F0F000000000000000007F -:10A20000000000000000000000000000000000004E -:10A2100000000000020040000000000000000000FC -:10A2200000000000000000000000000000008800A6 -:10A2300004000400400020000000000000000000B6 -:10A240000000000088000000000000030000000083 -:10A2500000000000000000002000000000000000DE -:10A2600000000200000000000000000000000000EC -:10A2700000000000000000002000000000000000BE -:10A2800000002000000000000000000000000000AE -:10A2900000000000000000000000000000000000BE -:10A2A00000000000000000000000000000000000AE -:10A2B00000008000800080000000000000002100FD -:10A2C000210000000000000000000000000000006D +:10A1E00000000C0C0505000000000000000000004D +:10A1F000000000000000000000000000000000005F +:10A2000000000000000000000000000088000400C2 +:10A21000200000000000000000004000200040007E +:10A22000400020001000100020008800880000007E +:10A2300020000000000088008400400200000000B0 +:10A2400020000000000000000000000120000000CD +:10A250000000200088000000000000002000000036 +:10A2600000000000000000000000040004000000E6 +:10A27000000020002000A00000000000C00010002E +:10A280004000100004000000000020000002000058 +:10A29000000000000090100000000000000000021C +:10A2A0000000000040C0800080028000000000002C +:10A2B000000000004000000000000000410000001D +:10A2C00000004020000000000000000000004000EE :10A2D000000000000000000000000000000000007E -:10A2E00000000000800000000000000000000000EE -:10A2F000000000000000000000000000000000005E -:10A30000000000000000000000000000000000004D -:10A31000000000000000000000000000000000003D -:10A32000000000000200000000000000000000002B -:10A33000000000000000000000000000000002001B -:10A34000000000000000000000000000000000000D -:10A35000000000000000000000000000008000007D -:10A3600000000000000000000000000000000000ED -:10A3700000000000000000000000000000000000DD -:10A3800000000000000000000000000000000000CD -:10A3900000000000000000000000000000000000BD -:10A3A00000000000000000000000000000000000AD +:10A2E000000000000000000000000000000020004E +:10A2F00000000000000000001100000021004100EB +:10A30000210000000000000000000000000020000C +:10A31000200020002000040004000820028000002B +:10A32000000000000000000000000000021000001B +:10A3300000000000000000000000080008400000CD +:10A3400000000000000000000000020002100000F9 +:10A3500000000000000000000000000008000010E5 +:10A3600000000000000000000000000000000200EB +:10A3700020000000000000000000000008000000B5 +:10A38000000000000000000000000000000002418A +:10A39000800080008000800080008000000100209C +:10A3A0000000000000000000000000000040000865 :10A3B000000000000000000000000000000000009D -:10A3C000000000000000000000000000000000008D -:10A3D000000000000000000000000000000000205D +:10A3C000000000000000000000000000000000C0CD +:10A3D000000000000000000000000040000000003D :10A3E000000000000000000000000000000000006D -:10A3F000000000000000000000000000000000005D -:10A40000000000000000000000000000000000004C -:10A41000000000000000000000000000000000003C -:10A42000000000000000000000000000000000002C -:10A430000000000000000000000000000400000018 -:10A44000000000004000400000000000000000008C -:10A4500000000000000000200000002000000000BC -:10A4600000000000000000000000000000000000EC -:10A4700000000000000000000000000000000000DC -:10A4800000000000000000000000000000000000CC +:10A3F00000C000000000000000000000000000009D +:10A40000000000000000000000400000000000000C +:10A410000000000000030000000000000000000039 +:10A420000000000088000000000000210100000082 +:10A430000000000000000000000000080000000014 +:10A44000000000000000000000000000000000000C +:10A450000000000084001000000000000000000068 +:10A460000400000040008400000000000000000024 +:10A47000000000000000000000000000001040107C +:10A480000000400084000410000004000000C00030 :10A4900000000000000000000000000000000000BC -:10A4A00000000000000000000000000000000000AC -:10A4B00000C00000000000000000000000000000DC -:10A4C0000000000000000000000000000900000083 -:10A4D000000000000000000000010000000100007A -:10A4E000410000000000000000000000000000002B -:10A4F000000000000000000000000000000000005C -:10A50000000000000000000000000000000000004B -:10A51000000000000000000000000000000000003B -:10A520000000000000000000000008000000000023 -:10A530000000000000000400000082000000000095 -:10A5400008000400000005000400040001004100B0 -:10A5500000008200000000000000A0000000400099 +:10A4A000000000000000000000000000000020008C +:10A4B0000000000000000800000000000000000094 +:10A4C000100021000000000000000000000000005B +:10A4D000080000000000030000000300210041000C +:10A4E000000003000800001000100000000000A0A1 +:10A4F00000A040000000000000A0000000000000DC +:10A500000000000000000004000000000000000047 +:10A51000000000000000000000008200C0000800F1 +:10A520000000000000000800100000008200010090 +:10A53000000020001000A000000008000000000043 +:10A540000000000082008200000084000000A000E3 +:10A550000800A000820000000000000000000000D1 :10A5600000000000000000000000000000000000EB -:10A5700000000800000000000000000000000000D3 -:10A5800000000000000000000000000000000000CB -:10A5900000000000000000000000000000000000BB +:10A5700000000000000000000000000000000000DB +:10A580000000000000000000000084000000000047 +:10A590000000000000000000000000820000000039 :10A5A00000000000000000000000000000000000AB -:10A5B000000000000000000080000000000000001B -:10A5C0000000000080000000840080008000040083 -:10A5D00084000000000000000000000000000000F7 -:10A5E00080000000000000000000000000000000EB +:10A5B0002000000080008004000000000000000077 +:10A5C000000000000000000000000000000000008B +:10A5D0000000000000000008000000000000000073 +:10A5E000000000000000000000000000000000006B :10A5F000000000000000000000000000000000005B -:10A60000000000000000000000000000000000004A -:10A61000000000000000000000000000000000003A -:10A62000000000000000000000000000000000002A -:10A630000000000000000000000000000000820098 -:10A640000000000000000008000000000000820080 -:10A65000000000000000A000000000000400000056 -:10A66000080000008200A0008200C020000000005E +:10A600000000000000000000000008000000000042 +:10A6100000000000000000000000000000008200B8 +:10A620000000002100000000000000000000820087 +:10A63000000000000000000000000000000000001A +:10A64000000000000000000000000000000000000A +:10A6500000000000000000000000000000000800F2 +:10A6600000000000000000000000000000000000EA :10A6700000000000000000000000000000000000DA :10A6800000000000000000000000000000000000CA -:10A6900000000000000000000000000000000000BA -:10A6A000000000000000000000000000002000008A -:10A6B000000000000000000000000020000000007A -:10A6C000000000000000000000000000000000008A -:10A6D000000000900000000000000000000080006A -:10A6E0000000000000000000000000000001000069 -:10A6F000000000000000000000000000000000005A -:10A700000000000000C00000030000840000000002 -:10A710000004000000000000000000000000000035 -:10A720000000000000000000000000000000000029 -:10A730000000000000000000000000000000000019 -:10A740000400040000000000000000000000000001 -:10A750000021820000210000040000000000000031 -:10A760000003820000000800090008200000A0008B +:10A6900010000000000000000000000000000000AA +:10A6A0000000000000002100000000000000000089 +:10A6B0000500000003000000000000000000000092 +:10A6C000000000000000000400000000000008007E +:10A6D0000300000000000020000000000000000057 +:10A6E0000000000000000510031008000300000037 +:10A6F00040900400080805200000102040200800B9 +:10A700000000000000000020200000000000000009 +:10A710000500000000000000000000000000020032 +:10A72000080002000000004100410041004100001B +:10A730008402000000001000000000000000000083 +:10A74000000000008200000000000000000008007F +:10A7500000000800000000000000000008000000E9 +:10A7600000000000000000000000000000000000E9 :10A7700000000000000000000000000000000000D9 :10A7800000000000000000000000000000000000C9 -:10A7900000000000000200000000000000000000B7 +:10A7900000000000000000000000000000000000B9 :10A7A00000000000000000000000000000000000A9 -:10A7B0000000000000000000000000000000000099 -:10A7C0000000800080000000000000000000000089 -:10A7D00000000000000000000000800000000000F9 -:10A7E0000000000000000000000004000001000064 +:10A7B0000000000000000000800000000000000019 +:10A7C0000000000000000000000000000000000089 +:10A7D0000000000000000000000000000000000079 +:10A7E0000000000000000000000000000000000069 :10A7F0000000000000000000000000000000000059 :10A800000000000000000000000000000000000048 :10A810000000000000000000000000000000000038 :10A820000000000000000000000000000000000028 -:10A830000000000000000000000000000000000018 -:10A84000000000C000900000000000C090900001D7 -:10A85000000000C000900000000000C00091000057 -:10A860000001000000C000900000000000C0009047 -:10A870000000000001020002008800020000000049 +:10A830000000000000000000000000010100010015 +:10A840000000000000000000000000000000000008 +:10A8500000000000000000000000000000000000F8 +:10A8600000000000000000000000000000000000E8 +:10A8700000000000000000000000000000000000D8 :10A8800000000000000000000000000000000000C8 :10A8900000000000000000000000000000000000B8 -:10A8A00000000000000000000000000000000000A8 -:10A8B0000000000000000000000000000000000098 -:10A8C0000000000000800080000000000080808503 -:10A8D000000500090080008000000000008900835E -:10A8E00000000008000000800980000000000080D7 -:10A8F00000800000000010800080008000800000C8 +:10A8A0000000000000000000110000000000000097 +:10A8B0000000000000000000000000000041102027 +:10A8C0001020002000000000000000000000000038 +:10A8D0000000000000000000000000000000000078 +:10A8E0000000000000000000000000000000000068 +:10A8F0000000000000000000000000000000000058 :10A900000000000000000000000000000000000047 :10A910000000000000000000000000000000000037 -:10A920000000000000000000000000000000000027 -:10A930000000000000000000000000000000000017 -:10A940000000000000000000800000008080008007 -:10A9500080000000808000008000000080800000F7 -:10A9600080000000808000000000800000008080E7 -:10A9700000008000000080800000002100800000B6 +:10A920000000000000000009000000090000000015 +:10A930000080000000800000000000000000100007 +:10A94000200008004100000000000000000000009E +:10A9500000000000000000000000000000000000F7 +:10A9600000000000000000000000000000000000E7 +:10A9700000000000000000000000000000000000D7 :10A9800000000000000000000000000000000000C7 :10A9900000000000000000000000000000000000B7 :10A9A00000000000000000000000000000000000A7 -:10A9B0000000000000000000000000000000000097 -:10A9C0000000000000000000000082000000C090B5 -:10A9D000001082000000C090000082000000C090C3 -:10A9E000000082000000C090000000008200000013 -:10A9F000C090000082000000C09000000000000233 +:10A9B00000000008000000C00000000000000000CF +:10A9C0000120000000000100000000000000000065 +:10A9D0000000000000000000000000000000000077 +:10A9E0000000000000000000000000000000000067 +:10A9F0000000000000000000000000000000000057 :10AA00000000000000000000000000000000000046 :10AA10000000000000000000000000000000000036 -:10AA20000000000000000000000000000000000026 -:10AA30000000000000000000000000000000000016 -:10AA40000000000000000000000000000000409036 -:10AA500000C000000100009000C000000000409015 -:10AA600000C000000000909000C000000000000046 -:10AA7000909000C000000000009000C004000000A2 -:10AA800000002000000000000000000000000000A6 +:10AA2000000000000000000000000000080000001E +:10AA30000000000000000400000000000000000012 +:10AA40000000000000000000000100000000000005 +:10AA500000000000000000000000000000000000F6 +:10AA600000000000000000000000000000000000E6 +:10AA700000000000000000000000000000000000D6 +:10AA800000000000000000000000000000000000C6 :10AA900000000000000000000000000000000000B6 -:10AAA00000000000000000000000000000000000A6 -:10AAB0000000000000000000000000000000000096 -:10AAC0000000000000000000000000000000000086 -:10AAD0000080008000004100008000800000000035 -:10AAE0000080008000004100808000800000004065 -:10AAF000004180C0008000000000008000808000D5 +:10AAA0000000000000000000000000000000800026 +:10AAB0000000090005000000800000000000000008 +:10AAC00000000000000000050041004100000000FF +:10AAD0000000000000000000000000000000000076 +:10AAE0000000000000000000000000000000000066 +:10AAF0000000000000000000000000000000000056 :10AB00000000000000000000000000000000000045 :10AB10000000000000000000000000000000000035 :10AB20000000000000000000000000000000000025 -:10AB30000000000000000000000000000000000015 -:10AB40000000000000000000000000000000800085 -:10AB5000000000000000A1118900050040008000F5 -:10AB60000000000000008000000000000000000065 -:10AB70008011800000000000800000000000000044 -:10AB800000008000000080000000000000000000C5 +:10AB300000000000000000020021000000000000F2 +:10AB40000000000000004120210010000000000073 +:10AB500000000000000000000000000000000000F5 +:10AB600000000000000000000000000000000000E5 +:10AB700000000000000000000000000000000000D5 +:10AB800000000000000000000000000000000000C5 :10AB900000000000000000000000000000000000B5 :10ABA00000000000000000000000000000000000A5 :10ABB0000000000000000000000000000000000095 -:10ABC0000000000000000000000000000000000085 -:10ABD0009000000000000000C10120000000000003 -:10ABE000C000000000008800C000000000008800D5 -:10ABF0000000C001200000000000C00000000000B4 -:10AC0000900040000400400004000000000000002C +:10ABC0000000000000000000010000000100000083 +:10ABD0000000000000000000000000000000000075 +:10ABE0000000000000000000000000000000000065 +:10ABF0000000000000000000000000000000000055 +:10AC00000000000000000000000000000000000044 :10AC10000000000000000000000000000000000034 :10AC20000000000000000000000000000000000024 -:10AC30000000000000000000000000000000000014 -:10AC40000000000000000000000000000000000004 -:10AC500000000021000007000000000600000700BF -:10AC6000820000210000070000000006000007002D -:10AC700000000000000600000700000000060000C1 -:10AC800007000000000000000000000000000000BD +:10AC30000000600000E000000000000600000700C7 +:10AC4000000A0000000000000000600000E00000BA +:10AC500000000000000000000000000000000000F4 +:10AC600000000000000000000000000000000000E4 +:10AC700000000000000000000000000000000000D4 +:10AC800000000000000000000000000000000000C4 :10AC900000000000000000000000000000000000B4 :10ACA00000000000000000000000000000000000A4 :10ACB0000000000000000000000000000000000094 :10ACC0000000000000000000000000000000000084 -:10ACD00000000000FFFF0000FF000000FF00000078 -:10ACE000FF0000003C3C0000FF0000003C3C000076 -:10ACF000FF0000000000FF000000FF0000003C3CDF -:10AD00000000FF0000002000000000000000000024 +:10ACD0000000000000000000000000000000000074 +:10ACE0000000000000000000000000000000000064 +:10ACF0000000000000000000000000000000000054 +:10AD00000000000000000000000000000000000043 :10AD10000000000000000000000000000000000033 :10AD20000000000000000000000000000000000023 :10AD30000000000000000000000000000000000013 :10AD40000000000000000000000000000000000003 -:10AD5000000000000000FFFF0000FF000000FF00F7 -:10AD60000000FF0000003C3C0000FF0000003C3CF5 -:10AD70000000FF0000000000FF000000FF000000D6 -:10AD80003C3C0000FF00000000000000000000004C +:10AD500000000000000000000000000000000000F3 +:10AD600000000000000000000000000000000000E3 +:10AD700000000000000000000000000000000000D3 +:10AD800000000000000000000000000000000000C3 :10AD900000000000000000000000000000000000B3 :10ADA00000000000000000000000000000000000A3 :10ADB0000000000000000000000000000000000093 @@ -60146,119 +60146,119 @@ :10AE20000000000000000000000000000000000022 :10AE30000000000000000000000000000000000012 :10AE40000000000000000000000000000000000002 -:10AE500000000000000000000000000000FF0000F3 -:10AE60000F0F000000FF00000F0F000000FF0000A8 -:10AE70000F0F000000FF00000F0F0000000000FF98 -:10AE800000000F0F000000FFFFFFF0F000000004C3 +:10AE500000000000000000000000000000000000F2 +:10AE600000000000000000000000000000000000E2 +:10AE700000000000000000000000000000000000D2 +:10AE800000000000000000000000000000000000C2 :10AE900000000000000000000000000000000000B2 :10AEA00000000000000000000000000000000000A2 :10AEB0000000000000000000000000000000000092 :10AEC0000000000000000000000000000000000082 -:10AED000000000000000000000000000000000FF73 -:10AEE00000000F0F000000FF00000F0F000000FF28 -:10AEF00000000F0F000000FF00000F0F0000000017 -:10AF000000FF00000F0F000000FFFFFFF0F0000047 +:10AED0000000000000000000000000000000000072 +:10AEE0000000000000000000000000000000000062 +:10AEF0000000000000000000000000000000000052 +:10AF00000000000000000000000000000000000041 :10AF10000000000000000000000000000000000031 :10AF20000000000000000000000000000000000021 -:10AF30000000000000000000000000000000000011 -:10AF40000000000000000000000000000000000001 -:10AF500000000000000000000000000000000302EC -:10AF600003300C0092C003E303360C0D92C0038241 -:10AF700003300C0092C003E303360C0D92C00000B6 -:10AF800003E303360C0D92C0038203300C0082C031 -:10AF900080004000000000000000000000000000F1 +:10AF300000000000000000000000000000000061B0 +:10AF40000007800D000005000A28050000A0000091 +:10AF50000000000000000000000180000000000070 +:10AF600000000000000000000000000000000000E1 +:10AF700000000000000000000000000000000000D1 +:10AF800000000000000000000000000000000000C1 +:10AF900000000000000000000000000000000000B1 :10AFA00000000000000000000000000000000000A1 :10AFB0000000000000000000000000000000000091 :10AFC0000000000000000000000000000000000081 -:10AFD0000000000000000000000000000000000071 -:10AFE000000000000000000004000000000000005D +:10AFD00000000000000000000055000FF000FF001E +:10AFE0000000000000000000000000000000000061 :10AFF0000000000000000000000000000000000051 -:10B0000000000000000000300030000000000000E0 +:10B000000000000000000000000000000000000040 :10B010000000000000000000000000000000000030 :10B020000000000000000000000000000000000020 :10B030000000000000000000000000000000000010 :10B040000000000000000000000000000000000000 -:10B0500000000000000000000000000000000000F0 -:10B0600000000000000000000000040000000000DC +:10B05000000000000000000000000055000FF0009C +:10B0600000000000000000000000000000000000E0 :10B0700000000000000000000000000000000000D0 :10B0800000000000000000000000000000000000C0 :10B0900000000000000000000000000000000000B0 :10B0A00000000000000000000000000000000000A0 :10B0B0000000000000000000000000000000000090 :10B0C0000000000000000000000000000000000080 -:10B0D0000000000000000000000000000000000070 -:10B0E0000000000000000000000000000400040058 -:10B0F000000000000000000000000000140000003C +:10B0D000000000000000000000000000000F003C25 +:10B0E0000C0C000F00000000000000000000000039 +:10B0F0000000000000000000000000000000000050 :10B10000000000000000000000000000000000003F :10B11000000000000000000000000000000000002F :10B12000000000000000000000000000000000001F :10B13000000000000000000000000000000000000F :10B1400000000000000000000000000000000000FF -:10B1500000000000000000000000000000000000EF -:10B1600000000000000000000000000000000400DB -:10B1700004000000000000000000000000001400B7 +:10B150000000000000000000000000000000000FE0 +:10B16000003C0C0C000F000000000000000000007C +:10B1700000000000000000000000000000000000CF :10B1800000000000000000000000000000000000BF :10B1900000000000000000000000000000000000AF :10B1A000000000000000000000000000000000009F :10B1B000000000000000000000000000000000008F -:10B1C000000000000000000000000000000000007F -:10B1D000000000000000000000000000000000006F -:10B1E000000040000000000000000000000000001F -:10B1F000000000000000000000000000000000004F -:10B20000000020000000000400000000000000001A -:10B21000000000000000000000000002000000002C -:10B2200000000000200000000000000000000000FE -:10B23000000000000000000000000000000000040A -:10B2400000040000200000000000000000000000DA -:10B2500000000000000000000000000000000000EE -:10B2600000000000000000000000000000000000DE -:10B2700000000000000000040000000000000000CA -:10B2800000000000000000000000000000000000BE -:10B29000000000000000000000000000400000006E -:10B2A000000000000000000040000000000000005E -:10B2B000000000000000000000000000000000028C -:10B2C000000000000000000000000000000000007E -:10B2D000000000000000000000000000020000006C -:10B2E000000000000200000000000000000000005C -:10B2F000000000000000000000000000000000004E -:10B30000000000000200000000000000000000003B +:10B1C00000000000000000000000400000004000FF +:10B1D000200040004000200000000000000020008F +:10B1E0001000000000008800840040000000000003 +:10B1F0001000880040002000000000000000000057 +:10B200004000880000000000000000000000000076 +:10B2100000002000000000002000000000000000EE +:10B22000000000000000000000000000000000001E +:10B2300000002000000000002000000000000002CC +:10B2400000408400400000000000000010000000EA +:10B25000100040000000000000000002400040001C +:10B26000100040C04000400240004000000040008C +:10B2700020004000400010000002000040000000DC +:10B2800040002040000040002000000000000000BE +:10B29000000000000020400000000000000000004E +:10B2A00010000000100040000002000000004000FC +:10B2B000000040004000400000000000400040024C +:10B2C000000000004000000000020000000000003C +:10B2D000000000000000000000000000000000006E +:10B2E000000008090000000000000000000000004D +:10B2F00000000000000088000000000000000000C6 +:10B300000000000900000000001000000000000024 :10B31000000000000000000000000000000000002D :10B32000000000000000000000000000000000001D :10B33000000000000000000000000000000000000D -:10B3400000000000001004000000000000000008E1 -:10B3500000000000000000000000000000000008E5 -:10B3600000080000000000000000000000000008CD -:10B3700000000000000000000000000000000008C5 -:10B3800000080000000000000000000000000000B5 -:10B3900000080000000000000000000000000000A5 -:10B3A000000800080000000000000000000000008D -:10B3B0000008000000000000000000000000000085 -:10B3C000000800080000000000000000000000006D -:10B3D000000000000000000000000000000000006D -:10B3E000000000000000000000000000000000005D +:10B3400000000000000000000000000000000000FD +:10B3500000000000000000000000000000000000ED +:10B3600000000000000000000000000000000000DD +:10B3700000000000000000000000000000000000CD +:10B3800000000000000000000000000000000000BD +:10B3900000000000000000000000000000000000AD +:10B3A000000000000000000000000000000000009D +:10B3B000000000000000000000000000000000008D +:10B3C000000000000000000000000000000000007D +:10B3D000000010000000000000000000000000005D +:10B3E000000040000000000000000000000000001D :10B3F000000000000000000000000000000000004D -:10B40000000000000000000000000000000000003C -:10B41000000000000000000000000000000000002C -:10B42000000000000000000000000000000000001C -:10B43000000000000000000000000000000000000C -:10B4400000000000000000000000000000000000FC -:10B4500000000000000000000000000000000000EC -:10B4600000000000000000000000000000000000DC -:10B4700000000000000000000000000000000000CC -:10B4800000000000000000000000000000000000BC -:10B4900000000000000000000000000000000000AC -:10B4A0000000030000000000000000000000000099 -:10B4B000000000000000000000000000000000008C -:10B4C000000000000000000000000000000000007C +:10B4000000008200000008000000000000000000B2 +:10B41000000000004000000000008400A0000800C0 +:10B420000000400000001000840008000800040034 +:10B430000000000000000000000000000000880084 +:10B4400000000000000000001000040000000000E8 +:10B4500000000000000000000000000008000800DC +:10B46000000005000800040041000000000000008A +:10B4700000000000000000000000080000000800BC +:10B48000000000000000000000002100000000009B +:10B49000000000000800000000000000000008009C +:10B4A000000000001000000000000000000000008C +:10B4B0000000000000000000000000000400040084 +:10B4C000000000000020000000000000000000005C :10B4D000000000000000000000000000000000006C -:10B4E000000000000000000000000000000000005C -:10B4F000000000000000000000000000000000004C +:10B4E0000000100000000000000000000000080044 +:10B4F000000000000000080000000000000008003C :10B50000000000000000000000000000000000003B -:10B5100000004000000000000000000000000000EB +:10B51000000000000000000000000000000000002B :10B52000000000000000000000000000000000001B :10B53000000000000000000000000000000000000B :10B5400000000000000000000000000000000000FB -:10B5500010000000000000000000000000000000DB +:10B5500000000000000000000000000002000000E9 :10B5600000000000000000000000000000000000DB :10B5700000000000000000000000000000000000CB :10B5800000000000000000000000000000000000BB @@ -60267,7 +60267,7 @@ :10B5B000000000000000000000000000000000008B :10B5C000000000000000000000000000000000007B :10B5D000000000000000000000000000000000006B -:10B5E000000000000000000000000000000000005B +:10B5E000400000000000000000000000000000001B :10B5F000000000000000000000000000000000004B :10B60000000000000000000000000000000000003A :10B61000000000000000000000000000000000002A @@ -60275,19 +60275,19 @@ :10B63000000000000000000000000000000000000A :10B6400000000000000000000000000000000000FA :10B6500000000000000000000000000000000000EA -:10B6600000000000000000000000000000000000DA -:10B6700000000000000000000000000000000000CA -:10B680000000000000000000000000840000000036 -:10B690000000008400000000040000000000000022 -:10B6A000000000000000000000000000000000009A -:10B6B0000000210000000000000000000000000069 +:10B6600000000000000000000000100000000000CA +:10B670000000080005000900210000000000000093 +:10B6800000000000000000000000000000000000BA +:10B6900000000000000000000000000000000000AA +:10B6A000000000000000000000000000000010008A +:10B6B000000000000000000000000000000000008A :10B6C000000000000000000000000000000000007A :10B6D000000000000000000000000000000000006A :10B6E000000000000000000000000000000000005A -:10B6F000000000000000000000000000000000004A -:10B700000000000000000000000000000000000039 -:10B710000000000000020000000000000000000225 -:10B720000000000000000000000000009000000089 +:10B6F000000010000000000000000000000000003A +:10B700000000000000000000000000001000000029 +:10B710000000000000000000000000000000000029 +:10B720000800000000000000000000000000000011 :10B730000000000000000000000000000000000009 :10B7400000000000000000000000000000000000F9 :10B7500000000000000000000000000000000000E9 @@ -60445,8250 +60445,56 @@ :10C0D0000000000000000000000000000000000060 :10C0E0000000000000000000000000000000000050 :10C0F0000000000000000000000000000000000040 -:10C10000000000000000000000000000000000002F -:10C1100000000000000000000000000020000000FF -:10C12000000000000000000000000000000000000F -:10C1300000000000000000000000000020000000DF -:10C1400000000000000000000000000000000000EF -:10C1500000000000000000000000000000002000BF -:10C1600000000000000000000000000000000000CF -:10C17000000000000000000000000000000020009F -:10C18000000000000000000000000000000000406F -:10C19000000000000000000000000000000000009F -:10C1A000000000000000000000000000000200008D -:10C1B000000000000000000000000002000000007D -:10C1C000000000000000000000000000000000006F -:10C1D000000000000000000000000000000000005F -:10C1E000000000000000000000000000004000000F -:10C1F000000000020000000000000000000000003D -:10C20000000000000000000000000000000000002E -:10C21000000000000000000000000000000000001E -:10C22000000000000000000000000000000000000E -:10C2300000000000000000000000000000000000FE -:10C2400000000000000000000000000000000000EE -:10C2500000000000000000000000000000000000DE -:10C2600000000000000000000000000000000000CE -:10C2700000000000000000000000000000000000BE -:10C2800000000000000000000200000000000000AC -:10C29000000000000000000000000000000000009E -:10C2A000000000000000000000000000000000008E -:10C2B000000000000000000000000000000000007E -:10C2C000000000000000000000000000000000006E -:10C2D000000000000000000000000000000000005E -:10C2E000000000000000000000000000000000004E -:10C2F000000000000000000000000000000000003E -:10C30000000000000000000000000000000000002D -:10C31000000000000000000000000000000000001D -:10C32000000000000000000000000000000000000D -:10C3300000000000000000000000000000000400F9 -:10C3400004000000000000000000000000000000E9 -:10C3500000000000000000000000000000000000DD -:10C3600000000000000000000000000000000000CD -:10C3700000000000000000000000000000000000BD -:10C38000000020000000000000000000000000008D -:10C39000000000000000000000000000000000009D -:10C3A000000000000000000000000000000000008D -:10C3B000000000000000000000000000000000007D -:10C3C000000000000000000000000000000000006D -:10C3D000000000000000000000000000000000005D -:10C3E000000000000000000000000000000000004D -:10C3F000000000000000000000000000000000003D -:10C40000000000000000000000000000000000002C -:10C41000000000000000000000000000000000001C -:10C42000000000000000000000000000000000000C -:10C4300000000000000000000000000000000000FC -:10C4400000000000000000000000000000000000EC -:10C4500000000000000000000000000000000000DC -:10C4600000000000000000000000000000000000CC -:10C4700000000000000000000000000000000000BC -:10C4800000000000000000000000000000000000AC -:10C49000000000000000000000000000000000009C -:10C4A000000000000000000000000000000000008C -:10C4B000000000000000000000000000000000007C -:10C4C000000000000000000000000000000000006C -:10C4D000000000000000000000000000000000005C -:10C4E000000000000000000000000000000000004C -:10C4F000000000000000000000000000000000003C -:10C50000000000000000000000000000000000002B -:10C51000000000000000000000000000000000001B -:10C52000000000000000000000000000000000000B -:10C5300000000000000000000000000000000000FB -:10C5400000000000000000000000000000000000EB -:10C5500000000000000000000000000000000000DB -:10C5600000000000000000000000000000000000CB -:10C5700000000000000000000000000000000000BB -:10C5800000000000000000000000000000000000AB -:10C59000000000000000000000000000000000009B -:10C5A000000000000000000000000000000000008B -:10C5B000000000000000000000000000000000007B -:10C5C000000000000000000000000000000000006B -:10C5D000000000000000000000000000000000005B -:10C5E000000000000000000000000000000000004B -:10C5F000000000000000000000000000000000003B -:10C60000000000000000000000000000000000002A -:10C61000000000000000000000000000000000001A -:10C62000000000000000000000000000000000000A -:10C6300000000000000000000000000000000000FA -:10C6400000000000000000000000000000000000EA -:10C6500000000000000000000000000000000000DA -:10C6600000000000000000000000000000000000CA -:10C6700000000000000000000000000000000000BA -:10C6800000000000000000000000000000000000AA -:10C69000000000000000000000000000000000009A -:10C6A000000000000000000000000000000000008A -:10C6B000000000000000000000000000000000007A -:10C6C000000000000000000000000000000000006A -:10C6D000000000000000000000000000000000005A -:10C6E000000000000000000000000000000000004A -:10C6F000000000000000000000000000000000003A -:10C700000000000000000000000000000000000029 -:10C710000000000000000000000000000000000019 -:10C720000000000000000000000000000000000009 -:10C7300000000000000000000000000000000000F9 -:10C7400000000000000000000000000000000000E9 -:10C7500000000000000000000000000000000000D9 -:10C7600000000000000000000000000000000000C9 -:10C7700000000000000000000000000000000000B9 -:10C7800000000000000000000000000000000000A9 -:10C790000000000000000000000000000000000099 -:10C7A0000000000000000000000000000000000089 -:10C7B0000000000000000000000000000000000079 -:10C7C0000000000000000000000000000000000069 -:10C7D0000000000000000000000000000000000059 -:10C7E0000000000000000000000000000000000049 -:10C7F0000000000000000000000000000000000039 -:10C800000000000000000000000000000000000028 -:10C810000000000000000000000000000000000018 -:10C820000000000000000000000000000000000008 -:10C8300000000000000000000000000000000000F8 -:10C8400000000000000000000000000000000000E8 -:10C8500000000000000000000000000000000000D8 -:10C8600000000000000000000000000000000000C8 -:10C8700000000000000000000000000000000000B8 -:10C8800000000000000000000000000000000000A8 -:10C890000000000000000000000000000000000098 -:10C8A0000000000000000000000000000000000088 -:10C8B0000000000000000000000000000000000078 -:10C8C0000000000000000000000000000000000068 -:10C8D0000000000000000000000000000000000058 -:10C8E0000000000000000000000000000000000048 -:10C8F0000000000000000000000000000000000038 -:10C900000000000000000000000000000000000027 -:10C910000000000000000000000000000000000017 -:10C920000000000000000000000000000000000007 -:10C9300000000000000000000000000000000000F7 -:10C9400000000000000000000000000000000000E7 -:10C9500000000000000000000000000000000000D7 -:10C9600000000000000000000000000000000000C7 -:10C9700000000000000000000000000000000000B7 -:10C9800000000000000000000000000000000000A7 -:10C990000000000000000000000000000000000097 -:10C9A0000000000000000000000000000000000087 -:10C9B0000000000000000000000000000000000077 -:10C9C0000000000000000000000000000000000067 -:10C9D0000000000000000000000000000000000057 -:10C9E0000000000000000000000000000000000047 -:10C9F0000000000000000000000000000000000037 -:10CA00000000000000000000000000000000000026 -:10CA10000000000000000000000000000000000016 -:10CA20000000000000000000000000000000000006 -:10CA300000000000000000000000000000000000F6 -:10CA400000000000000000000000000000000000E6 -:10CA500000000000000000000000000000000000D6 -:10CA600000000000000000000000000000000000C6 -:10CA700000000000000000000000000000000000B6 -:10CA800000000000000000000000000000000000A6 -:10CA90000000000000000000000000000000000096 -:10CAA0000000000000000000000000000000000086 -:10CAB0000000000000000000000000000000000076 -:10CAC0000000000000000000000000000000000066 -:10CAD0000000000000000000000000000000000056 -:10CAE0000000000000000000000000000000000046 -:10CAF0000000000000000000000000000000000036 -:10CB00000000000000000000000000000000000025 -:10CB10000000000000000000000000000000000015 -:10CB20000000000000000000000000000000000005 -:10CB300000000000000000000000000000000000F5 -:10CB400000000000000000000000000000000000E5 -:10CB500000000000000000000000000000000000D5 -:10CB600000000000000000000000000000000000C5 -:10CB700000000000000000000000000000000000B5 -:10CB800000000000000000000000000000000000A5 -:10CB90000000000000000000000000000000000095 -:10CBA0000000000000000000000000000000000085 -:10CBB0000000000000000000000000000000000075 -:10CBC0000000000000000000000000000000000065 -:10CBD0000000000000000000000000000000000055 -:10CBE0000000000000000000000000000000000045 -:10CBF0000000000000000000000000000000000035 -:10CC00000000000000000000000000000000000024 -:10CC10000000000000000000000000000000000014 -:10CC20000000000000000000000000000000000004 -:10CC300000000000000000000000000000000000F4 -:10CC400000000000000000000000000000000000E4 -:10CC500000000000000000000000000000000000D4 -:10CC600000000000000000000000000000000000C4 -:10CC700000000000000000000000000000000000B4 -:10CC800000000000000000000000000000000000A4 -:10CC90000000000000000000000000000000000094 -:10CCA0000000000000000000000000000000000084 -:10CCB0000000000000000000000000000000000074 -:10CCC0000000000000000000000000000000000064 -:10CCD0000000000000000000000000000000000054 -:10CCE0000000000000000000000000000000000044 -:10CCF0000000000000000000000000000000000034 -:10CD00000000000000000000000000000000000023 -:10CD10000000000000000000000000000000000013 -:10CD20000000000000000000000000000000000003 -:10CD300000000000000000000000000000000000F3 -:10CD400000000000208000802080008000000000A3 -:10CD500000002000000000000000000000000000B3 -:10CD60000000000020000000200000000000000083 -:10CD70000002200000010000000000000000000090 -:10CD8000000000000004200000002000000000005F -:10CD90000000000020000000000000000000000073 -:10CDA0000000000000002000000020000000000043 -:10CDB0000000000020000000000000000000000251 -:10CDC0004000000000008004000480040004000013 -:10CDD000000000040000000000000000000000004F -:10CDE0000000000000000000000000000000000043 -:10CDF00000020000000000004000000000000000F1 -:10CE000000000000400000000000000000000000E2 -:10CE10000000000000000000000200000000000010 -:10CE200000024000000000000000000000000000C0 -:10CE300000000000000000000000000000000000F2 -:10CE400000000000020000000000A100000001003E -:10CE50000000000000000040000000000000000092 -:10CE600000000000000000000000000000000000C2 -:10CE70000000000000000040000000000000000072 -:10CE800000000000000000000000000000000000A2 -:10CE90000040000000000000000000000000000052 -:10CEA0000010000000000000000000000000000072 -:10CEB000000000000000000000000008000000006A -:10CEC000000000000000000800080000200000082A -:10CED0002000000800000000000000080000000022 -:10CEE000000000000000000800080000000000082A -:10CEF0000000000800000000000000000008000022 -:10CF00000000000000000000000800080000000011 -:10CF100000080000000800080000000000080000F1 -:10CF200000000040000000000008000800000000B1 -:10CF300000080000000800080000000000000000D9 -:10CF400000000000000000000000000000000000E1 -:10CF500000000000000000000000000000000005CC -:10CF600000000000000000000000000000000000C1 -:10CF700000000000000000080000000000000000A9 -:10CF800000000000000000000000000000000000A1 -:10CF90000000000000000000000000000000000091 -:10CFA0000000000000000000000000000000000081 -:10CFB0000000000000000000000000000000000071 -:10CFC0000000000000000000000000000000000061 -:10CFD0000000000000000000000000000000000051 -:10CFE0000000000000000000000000000000000041 -:10CFF0000000000000000000000000000000000031 -:10D000000000000000000000000000000000000020 -:10D010000000000000000000000000000000000010 -:10D020000000000000000000000000000000000000 -:10D0300000000000000000000000002000000000D0 -:10D04000000010000000C000000000000000000010 -:10D0500000000000000000000000000000000000D0 -:10D0600000000000000000000000000000000000C0 -:10D0700000000000000000000000000000000000B0 -:10D0800000000000000000000000000000000000A0 -:10D090000000000000000000000000000000000090 -:10D0A0000000000000000000000000000000000080 -:10D0B0000000000000000000000000000000000070 -:10D0C0000000000000000000000000000000000060 -:10D0D0000000000000000000004000000000000010 -:10D0E0000000000000000000000000000000000040 -:10D0F0000000000000000000000000000000000030 -:10D100000000000000000000000000080000000017 -:10D11000000000000000000000000000000000000F -:10D1200000000000000000000000000000000000FF -:10D1300000000000000000000000000000000000EF -:10D1400000000000000000000000000000000000DF -:10D1500000000000000000000000000000000000CF -:10D1600000000000000000000000000000000000BF -:10D1700000000000000000000000000000000000AF -:10D18000000000000000000000000000000000009F -:10D19000000000000000000000000000000000008F -:10D1A000000000000000000000000000000000007F -:10D1B000000000000000000000000000000000006F -:10D1C000000000000000000000000000000000005F -:10D1D000000000000000000000000000000000004F -:10D1E000000000000000000000000000000000003F -:10D1F000000000000000000000000000000000002F -:10D20000000000000000000000000000000000001E -:10D21000000000000000000000000000000000000E -:10D2200000000000000000000000000000000000FE -:10D2300000000000000000000000000000000000EE -:10D2400000000000000000000000000000000000DE -:10D2500000000000000000000000000000000000CE -:10D26000004000000000000000000000000000007E -:10D27000000000210000000000000000000000008D -:10D28000000000000000000000000000000000009E -:10D29000000000000000000000000000000000008E -:10D2A000000000000000000000000000000000007E -:10D2B000000000000000000000000000000000006E -:10D2C000000000000000000000000000000000005E -:10D2D000000000000000000000000000000000004E -:10D2E000000000000000000000000000000000003E -:10D2F000000000000000000000000000000000002E -:10D30000000000000000000000000000000000001D -:10D31000000000000000000000000000000000000D -:10D3200000000000000000000000000000000000FD -:10D3300000000000000000000000000000000000ED -:10D3400000000000000000000000000000000000DD -:10D3500000000000000000000000000000000000CD -:10D3600000000000000000000000000000000000BD -:10D3700000000000000000000000000000000000AD -:10D38000000000000000000000000000000000009D -:10D39000000000000000000000000000000000008D -:10D3A000000000000000000000000000000000007D -:10D3B000000000000000000000000000000000006D -:10D3C000000000000000000000000000000000005D -:10D3D000000000000000000000000000000000004D -:10D3E000000000000000000000000000000000003D -:10D3F000000000000000000000000000000000002D -:10D40000000000000000000000000000000000001C -:10D41000000000000000000000000000000000000C -:10D4200000000000000000000000000000000000FC -:10D4300000000000000000000000000000000000EC -:10D4400000000000000000000000000000000000DC -:10D4500000000000000000000000000000000000CC -:10D4600000090000000200000000000000000000B1 -:10D4700000000000000000000000000000000000AC -:10D48000000000000000000000000000000000009C -:10D49000000000000000000000000000000000008C -:10D4A000000000000000000000000000000000007C -:10D4B000000000000000000000000000000000006C -:10D4C000000000000000000000000000000000005C -:10D4D000000000000000000000000000000000004C -:10D4E000000000000000000000000000000000003C -:10D4F000000000000000000000000000000000002C -:10D50000000000000000000000000000000000001B -:10D51000000000000000000000000000000000000B -:10D5200000000000000000000000000000000000FB -:10D5300000000000000000000000000000000000EB -:10D5400000000000000000000000000000000000DB -:10D5500000000000000000000000000000000000CB -:10D56000000000000000400000000000000000007B -:10D5700000000000000000000000000000000000AB -:10D58000000000000000000000000000000000009B -:10D59000000000000000000000000000000000008B -:10D5A000000000000000000000000000000000007B -:10D5B000000000000000000000000000000000006B -:10D5C000000000000000000000000000000000005B -:10D5D000000000000000000000000000000000004B -:10D5E00000000000000000000000000040000000FB -:10D5F000000000000000000000000000000000002B -:10D60000000000000000000000000000000000001A -:10D61000000000000000000000000000000000000A -:10D6200000000000000000000000000000000000FA -:10D6300000000000000000000000000000000000EA -:10D6400000000000000000000000000000000000DA -:10D6500000000000000000000000000000000000CA -:10D6600000000000000000000000000000000000BA -:10D6700000000000000000000000000000000000AA -:10D68000000000000000000000000000000000009A -:10D69000000000000000000000000000000000008A -:10D6A000000000000000000000000000000000007A -:10D6B000000000000000000000000000000000006A -:10D6C000000000000000000000000000000000005A -:10D6D000000000000000000000000000000000004A -:10D6E000000000000000000000000000000000003A -:10D6F000000000000000000000000000000000002A -:10D700000000000000000000000000000000000019 -:10D710000000000000000000000000000000000009 -:10D7200000000000000000000000000000000000F9 -:10D7300000000000000000000000000000000000E9 -:10D7400000000000000000000000000000000000D9 -:10D7500000000000000000000000000000000000C9 -:10D76000000000000000000000000000000002E0D7 -:10D7700000000000000000000000000000000000A9 -:10D780000000000000000000000000000000000099 -:10D790000000000000000000000000000000000089 -:10D7A0000000000000000000000000000000000079 -:10D7B0000000000000000000000000000000000069 -:10D7C0000000000000000000000000000000000059 -:10D7D0000000000000000000000000000000000049 -:10D7E0000000000000000000000000000000000039 -:10D7F0000000000000000000000000000000000029 -:10D800000000000000000000000000000000000018 -:10D810000000000000000000000000000000000008 -:10D8200000000000000000000000000000000000F8 -:10D8300000000000000000000000000000000000E8 -:10D8400000000000000000000000000000000000D8 -:10D8500000000000000000000000000000000000C8 -:10D8600000000000000000000000000000000000B8 -:10D8700000000000000000000000000000000000A8 -:10D880000000000000000000000000000000000098 -:10D890000000000000000000000000000000000088 -:10D8A0000000000000000000000000000000000078 -:10D8B0000000000000000000000000000000000068 -:10D8C0000000000000000000000000000000000058 -:10D8D0000000000000000000000000000000000048 -:10D8E0000000000000000000000000000000000038 -:10D8F0000000000000000000000000000000000028 -:10D900000000000000000000000000000000000017 -:10D910000000000000000000000000000000000007 -:10D9200000000000000000000000000000000000F7 -:10D9300000000000000000000000000000000000E7 -:10D9400000000000000000000000000000000000D7 -:10D9500000000000000000000000000000000000C7 -:10D9600000000000000000000000000000000000B7 -:10D9700000000000000000000000000000000000A7 -:10D980000000000000000000000000000000000097 -:10D990000000000000000000000000000000000087 -:10D9A0000000000000000000000000000000000077 -:10D9B0000000000000000000000000000000000067 -:10D9C0000000000000000000000000000000000057 -:10D9D0000000000000000000000000000000000047 -:10D9E0000000000000000000000000000000000037 -:10D9F00000000000000000650006000F200000008D -:10DA00000000000000000000000000000000000016 -:10DA10000000000000000000000000000000000006 -:10DA200000000000000000000000000000000000F6 -:10DA300000000000000000000000000000000000E6 -:10DA400000000000000000000000000000000000D6 -:10DA500000000000000000000000000000000000C6 -:10DA600000000000000000000000000000000000B6 -:10DA700000000000000000000000000000000000A6 -:10DA80000000000000000000000000000000000096 -:10DA90000000000000000000000000000000000086 -:10DAA0000000000000000000000000000000000076 -:10DAB0000000000000000000000000000000000066 -:10DAC0000000000000000000000000000000000056 -:10DAD0000000000000000000000000000000000046 -:10DAE0000000000000000000000000000000000036 -:10DAF0000000000000000000000000000000000026 -:10DB00000000000000000000000000000000000015 -:10DB10000000000000000000000000000000000005 -:10DB200000000000000000000000000000000000F5 -:10DB300000000000000000000000000000000000E5 -:10DB400000000000000000000000000000000000D5 -:10DB500000000000000000000000000000000000C5 -:10DB600000000000000000000000000000000000B5 -:10DB700000000000000000000000000000000000A5 -:10DB80000000000000000000000000000000000095 -:10DB90000000000000000000000000000000000085 -:10DBA0000000000000000000000000000000000075 -:10DBB0000000000000000000000000000000000065 -:10DBC0000000000000000000000000000000000055 -:10DBD0000000000000000000000000000000000045 -:10DBE0000000000000000000000000000000000035 -:10DBF0000000000000000000000000000000000025 -:10DC00000000000000000000000000000000000014 -:10DC10000000000000000000000000000000000004 -:10DC200000000000000000000000000000000000F4 -:10DC300000000000000000000000000000000000E4 -:10DC400000000000000000000000000000000000D4 -:10DC500000000000000000000000000000000000C4 -:10DC600000000000000000000000000000000000B4 -:10DC70000000000020000000000000000000000084 -:10DC80002000000000000000000000000000000074 -:10DC90000000000020000000000000000000000064 -:10DCA0000000000000000000000000000000000074 -:10DCB0000001000000002000000000000000000043 -:10DCC0000000000000000000000000000000000054 -:10DCD0000000000000002000000000000000000024 -:10DCE0000000000000000000000000000000000034 -:10DCF0000000000000000000000000000000000024 -:10DD00000000000200000000000000000000000011 -:10DD100000020000000000000000000200000000FF -:10DD200000000000000000000000000000000000F3 -:10DD300000000000000000000000000000000000E3 -:10DD400000000000000000000000100000000000C3 -:10DD500000000000000000000000000000000000C3 -:10DD600000000000000000000000000000000000B3 -:10DD700000000000000000000000000000000000A3 -:10DD80000000000000000000000000400000000053 -:10DD90000000000000000000000000000000000083 -:10DDA0000000000000000000000000000000000073 -:10DDB0000000000000000000000000000000000063 -:10DDC0000000000000000000000000000000000053 -:10DDD0000000000000000000000000000000000043 -:10DDE0000000000000000000000000000000000033 -:10DDF0000000000000000000000000000000000023 -:10DE0000000000080088000000000008000000007A -:10DE100000000000000800000000000000000000FA -:10DE200000000008000002000000000800000000E0 -:10DE3000000000000088000000000000000000005A -:10DE400000000000000800000000000000080000C2 -:10DE500000000000000000000000000000000000C2 -:10DE600000000000000800000000000000080000A2 -:10DE700000000000000000000000000000000000A2 -:10DE80000000000000000000000000000000000092 -:10DE90000000000000000000000000000000000082 -:10DEA0000000000000000000000000000000000072 -:10DEB0000000000000000000000000000000000062 -:10DEC0000000000000000000000000000000000052 -:10DED0000000000000000000000000000000000042 -:10DEE0000000000000000000000000000000000032 -:10DEF0000000000000000000000000000000000022 -:10DF00000000000000000000000000000000000011 -:10DF10000000000000000000000000000000000001 -:10DF200000000000000000000000000000000000F1 -:10DF300000000000000000000000000000000000E1 -:10DF400000000000000000000000000000000000D1 -:10DF500000000000000000000000000000000000C1 -:10DF600000000000000000000000000000000000B1 -:10DF700000000000000000000000000000000000A1 -:10DF80000000000000000000000000000000000091 -:10DF90000000000000000000080000000000000079 -:10DFA00000000000000000008200000000000000EF -:10DFB00000000000000000000100008000000000E0 -:10DFC0000000000000000000000000000000000051 -:10DFD0000000000000000000000000000000000041 -:10DFE0000000000000000000000000000000000031 -:10DFF0000000000000000000000000000000000021 -:10E000000000000000000000000000000000000010 -:10E010000000000000000000000000000000000000 -:10E0200000000000000000000000000000000000F0 -:10E0300000000000000000000000200000040000BC -:10E0400000000000000000000000000000000000D0 -:10E0500000000000000000000000000000000000C0 -:10E0600000000000000000000000000000000000B0 -:10E0700000000000000000000000000000000000A0 -:10E080000000000000000000000000000000000090 -:10E090000000000000000000000000000000000080 -:10E0A0000000000000000000000000000000000070 -:10E0B00000000000000090000000000000000000D0 -:10E0C0000000000000000000000000000000000050 -:10E0D0000000000000000000000000000000000040 -:10E0E0000000000000000000000000000000000030 -:10E0F0000000000000000000000000000000000020 -:10E10000000000000000000000000000000000000F -:10E1100000000000000000000000000000000000FF -:10E1200000000000000000000000000000000000EF -:10E1300000000000000000000000000000000000DF -:10E1400000000000000000000000000000000000CF -:10E1500000000000000000000000000000000000BF -:10E1600000000000000000000000000000000000AF -:10E17000000000000000000000000000000000009F -:10E18000000000000000000000000000000000008F -:10E19000000000000000000000000000000000007F -:10E1A000000000000000000000000000000000006F -:10E1B000000000000000000000000000010000005E -:10E1C000000000000000000000000000000000004F -:10E1D000000000000000000000000000000000003F -:10E1E000000000000000000000000000000000002F -:10E1F000000000000000000000000000000000001F -:10E20000000000000000000000000000000000000E -:10E2100000000000000000000000000000000000FE -:10E2200000000000000000000000000000000000EE -:10E2300000000000000008000000000000001000C6 -:10E2400000000000000000000000000000000000CE -:10E2500000000000000000000000000000000000BE -:10E2600000000000000000000000000000000000AE -:10E27000000000000000000000000000000000009E -:10E28000000000000000000000000000000000008E -:10E29000000000000000000000000000000000007E -:10E2A000000000000000000000000000000000006E -:10E2B000000000000000000000000000000000005E -:10E2C000010000000000000000000000000000004D -:10E2D000000000000000000000000000000000003E -:10E2E000000000000000000000000000000000002E -:10E2F000000000000000000000000000000000001E -:10E30000000000000000000000000000000000000D -:10E3100000000000000000000000000000000000FD -:10E3200000000000000000000000000000000000ED -:10E3300000000000000000000000000000000000DD -:10E34000000011002100000000000000000000009B -:10E3500000000000000000000000000000000000BD -:10E3600000000000000000000000000000000000AD -:10E37000000000000000000000000000000000009D -:10E38000000000000000000000000000000000008D -:10E39000000000000000000000000000000000007D -:10E3A000000000000000000000000000000000006D -:10E3B000000000000000000000000000000000005D -:10E3C0000000000000410900000300800000000080 -:10E3D000000000000000000000000000000000003D -:10E3E000000000000000000000000000000000002D -:10E3F000000000000000000000000000000000001D -:10E40000000000000000000000000000000000000C -:10E4100000000000000000000000000000000000FC -:10E4200000000000000000000000000000000000EC -:10E4300000000000000000000000000000000000DC -:10E440000000000000000001010000000088000042 -:10E4500000000000000000000000000000000000BC -:10E4600000000000000000000000000000000000AC -:10E47000000000000000000000000000000000009C -:10E48000000000000000000000000000000000008C -:10E49000000000000000000000000000000000007C -:10E4A000000000000000000000000000000000006C -:10E4B000000000000000000000000000000000005C -:10E4C00000000000000000000000880000000100C3 -:10E4D000000000000000000000000000000000003C -:10E4E000000000000000000000000000000000002C -:10E4F000000000000000000000000000000000001C -:10E50000000000000000000000000000000000000B -:10E5100000000000000000000000000000000000FB -:10E5200000000000000000000000000000000000EB -:10E5300000000000000000000000000000000000DB -:10E5400000000000000000000000000000000000CB -:10E55000410000000000000000000000000000007A -:10E5600000000000000000000000000000000000AB -:10E57000000000000000000000000000000000009B -:10E58000000000000000000000000000000000008B -:10E59000000000000000000000000000000000007B -:10E5A000000000000000000000000000000000006B -:10E5B000000000000000000000000000000000005B -:10E5C00000000000000000000000000000004011FA -:10E5D000000000000000000000000000000000003B -:10E5E000000000000000000000000000000000002B -:10E5F000000000000000000000000000000000001B -:10E60000000000000000000000000000000000000A -:10E6100000000000000000000000000000000000FA -:10E6200000000000000000000000000000000000EA -:10E6300000000000000000000000000000000000DA -:10E6400000000000000000000000000000000000CA -:10E6500000010000000000000000000000000000B9 -:10E6600000000000000000000000000000000000AA -:10E67000000000000000000000000000000000009A -:10E68000000000000000000000000000000000008A -:10E69000000000000000000000000000000000007A -:10E6A000000000000000000000000000000000006A -:10E6B000000000000000000000000000000000005A -:10E6C000000000000000000000000000000000004A -:10E6D000000000E000008141000000000000000098 -:10E6E000000000000000000000000000000000002A -:10E6F000000000000000000000000000000000001A -:10E700000000000000000000000000000000000009 -:10E7100000000000000000000000000000000000F9 -:10E7200000000000000000000000000000000000E9 -:10E7300000000000000000000000000000000000D9 -:10E7400000000000000000000000000000000000C9 -:10E7500000000000000000000000000000000000B9 -:10E7600000000000000000000000000000000000A9 -:10E770000000000000000000000000000000000099 -:10E780000000000000000000000000000000000089 -:10E790000000000000000000000000000000000079 -:10E7A0000000000000000000000000000000000069 -:10E7B0000000000000000000000000000000000059 -:10E7C0000000000000000000000000000000000049 -:10E7D0000000000000000000000000000000000039 -:10E7E0000000000000000000000000000000000029 -:10E7F0000000000000000000000000000000000019 -:10E800000000000000000000000000000000000008 -:10E8100000000000000000000000000000000000F8 -:10E8200000000000000000000000000000000000E8 -:10E8300000000000000000000000000000000000D8 -:10E8400000000000000000000000000000000000C8 -:10E8500000000000000000000000000000000000B8 -:10E8600000000000000000000000000000000000A8 -:10E870000000000000000000000000000000000098 -:10E880000000000000000000000000000000000088 -:10E890000000000000000000000000000000000078 -:10E8A0000000000000000000000000000000000068 -:10E8B0000000000000000000000000000000000058 -:10E8C0000000000000000000000000000000000048 -:10E8D0000000000000000000000000000000000038 -:10E8E0000000000000000000000000000000000028 -:10E8F0000000000000000000000000000000000018 -:10E900000000000000000000000000000000000007 -:10E9100000000000000000000000000000000000F7 -:10E9200000000000000000000000000000000000E7 -:10E9300000000000000000000000000000000000D7 -:10E9400000000000000000000000000000000000C7 -:10E9500000000000000000000000000000000000B7 -:10E9600000000000000000000000000000000000A7 -:10E970000000000000000000000000000000000097 -:10E980000000000000000000000000000000000087 -:10E990000000000000000000000000000000000077 -:10E9A0000000000000000000000000000000000067 -:10E9B0000000000000000000000000000000000057 -:10E9C0000000000000000000000000000000000047 -:10E9D00000000000000000000000000000400006F1 -:10E9E000000C00000000000000000000000000001B -:10E9F0000000000000000000000000000000000017 -:10EA00000000000000000000000000000000000006 -:10EA100000000000000000000000000000000000F6 -:10EA200000000000000000000000000000000000E6 -:10EA300000000000000000000000000000000000D6 -:10EA400000000000000000000000000000000000C6 -:10EA500000000000000000000000000000000000B6 -:10EA6000FF00FFFF000000000000000000000000A9 -:10EA70000000000000000000000000000000000096 -:10EA80000000000000000000000000000000000086 -:10EA90000000000000000000000000000000000076 -:10EAA0000000000000000000000000000000000066 -:10EAB0000000000000000000000000000000000056 -:10EAC0000000000000000000000000000000000046 -:10EAD0000000000000000000000000000000000036 -:10EAE0000000FF0000000000000000000000000027 -:10EAF0000000000000000000000000000000000016 -:10EB00000000000000000000000000000000000005 -:10EB100000000000000000000000000000000000F5 -:10EB200000000000000000000000000000000000E5 -:10EB300000000000000000000000000000000000D5 -:10EB400000000000000000000000000000000000C5 -:10EB500000000000000000000000000000000000B5 -:10EB6000000000000000F0F00000000000000000C5 -:10EB70000000000000000000000000000000000095 -:10EB80000000000000000000000000000000000085 -:10EB90000000000000000000000000000000000075 -:10EBA0000000000000000000000000000000000065 -:10EBB0000000000000000000000000000000000055 -:10EBC0000000000000000000000000000000000045 -:10EBD0000000000000000000000000000000000035 -:10EBE0000000000000000000F0F000000000000045 -:10EBF0000000000000000000000000000000000015 -:10EC00000000000000000000000000000000000004 -:10EC100000000000000000000000000000000000F4 -:10EC200000000000000000000000000000000000E4 -:10EC300000002000200020004000000020002000F4 -:10EC40000000200020000000200000002000000044 -:10EC500004002000200020002000000420002000EC -:10EC60000000200020001000200000002000000311 -:10EC700000002000200020002000200000002000D4 -:10EC800020000000200020002000000000002004E0 -:10EC900000002000200020002000200000002000B4 -:10ECA00020000000200020000000000000002000E4 -:10ECB0000000000000000000000000000000000054 -:10ECC0000000000000000000000000000000000044 -:10ECD0000000000000000000000000000000000034 -:10ECE0001000000000000000800000004004000050 -:10ECF0000000000000000000000000000000000014 -:10ED000000000002000000000000000040000000C1 -:10ED100000000000000000000000000000000000F3 -:10ED200000000000000200000000000000000000E1 -:10ED300000000000000000000000000000000000D3 -:10ED400000000000000000000000000000000000C3 -:10ED500000000000000000000400000000000000AF -:10ED6000000800000000000000000000000000009B -:10ED70000000000000000000000000000000000093 -:10ED80000000000000000000000000000000000083 -:10ED90000000000000000000000000000000000073 -:10EDA0000000000001000000000000100000000052 -:10EDB0000000000000080000000800080008000033 -:10EDC00000080008020020000008000802080000F7 -:10EDD0000008000800080000000800080008000003 -:10EDE00000080010000000000008000800080000F3 -:10EDF00000080008000000080000000800080008E3 -:10EE000000000008000800000000000800080008DA -:10EE100000000008000800080000000800080008C2 -:10EE200000000008000810000000000800080208A8 -:10EE300000000008000800000000000000000000C2 -:10EE400000000000000000000000000000000000C2 -:10EE500000000000000000000000000000000000B2 -:10EE600000000000000000000000000000000000A2 -:10EE70000000000000000000000000000000000092 -:10EE80000000000000000000000000000000000082 -:10EE90000000000000000000000000000000000072 -:10EEA0000000000000000000000000000000000062 -:10EEB0000000000000000000000000000000000052 -:10EEC0000000000000000000000000000000000042 -:10EED0000000000000000000000000000000000032 -:10EEE0000000000000000000000000000000000022 -:10EEF0000000000000000000000000000000000012 -:10EF00000000000000000000000000000000000001 -:10EF100000000000000000000000000000000000F1 -:10EF200000000000000000000000000000000000E1 -:10EF300000000000000000000000000000000000D1 -:10EF400000000000000000000000000000000000C1 -:10EF500000000000000000000000000000000000B1 -:10EF600000000000000000000000000000000000A1 -:10EF7000000002000000010000800000000000000E -:10EF80000000000000000000000000000000000081 -:10EF90000000000000000800000000000000000069 -:10EFA0000000000000000000000000000000000061 -:10EFB00001000080000000000000000000000000D0 -:10EFC0000000000000000000000000100000000031 -:10EFD0000000000000000000000000000000000031 -:10EFE0000000000000000000000000000000000021 -:10EFF000000000000082000020000004000000006B -:10F00000000000000000008200000000000000007E -:10F0100000000000000000000000000000000000F0 -:10F0200000000000000000000000000000000000E0 -:10F0300000002000000400000000000000000000AC -:10F0400000000000000000000000000000000000C0 -:10F0500000000000000000000000000000000000B0 -:10F0600000000000000000000000000000000000A0 -:10F070000000000090000000000000000000000000 -:10F080000000000000000010000000000000000070 -:10F090000000000000000010000000000000000060 -:10F0A000000000000000000000008200000090004E -:10F0B0000000000000000000000000000000000050 -:10F0C0000000000000000000000000000000000040 -:10F0D0000000000000000000000000000000000030 -:10F0E0000000000000000000000000000000000020 -:10F0F00000000000000000C00000000000840000CC -:10F1000000000000000000000000000000000000FF -:10F1100000000000000000000000000000000000EF -:10F1200000000000000000000000000000000000DF -:10F1300000000000000000000000000000000000CF -:10F1400000000000000000000000000000000000BF -:10F1500000000000000000000000000000000000AF -:10F16000000000000000000000000000000000009F -:10F1700000000000000000009000000000000000FF -:10F18000000000000000000000020000000000007D -:10F19000000000000000000000000000000000006F -:10F1A000000000000000000000000000000000005F -:10F1B000000000000000000000000000000000004F -:10F1C000000000000000000000000000000000003F -:10F1D000000000000000000000000000000000002F -:10F1E000000000000000000000000000000000001F -:10F1F000000000000000000000000000000000000F -:10F2000000001100000000000000000000000300EA -:10F2100000000000000000000000000000000000EE -:10F2200000000000000000000000000000000000DE -:10F2300000000000000000000000000000000800C6 -:10F2400000000000000000000000000000000000BE -:10F2500000000000000000000000000000000000AE -:10F26000000000000000000000000000000000009E -:10F27000000000000000000000000000000001008D -:10F28000000000000000000000000000000000007E -:10F29000000000000000000000000000000000006E -:10F2A000000000000000000000000000000000005E -:10F2B000000000000000000001000000000000004D -:10F2C000000000000000000000000000000000003E -:10F2D000000000000000000000000000000000002E -:10F2E000000000000000000000000000000000001E -:10F2F000000000000000000000000000000000000E -:10F3000011002100000000000000000000000000CB -:10F3100000000000000000000000000000000000ED -:10F3200000000000000000000000000000000000DD -:10F33000000000000000000000001100210000009B -:10F3400000000000000000000000000000000000BD -:10F3500000000000000000000000000000000000AD -:10F36000000000000000000000000000000000009D -:10F37000000000000000000000000000000000008D -:10F380000000004109000003000000000000000030 -:10F39000000000000000000000000000000000006D -:10F3A000000000000000000000000000000000005D -:10F3B00000000000000000000000000000C1090083 -:10F3C00000030080000000000000000000000000BA -:10F3D000000000000000000000000000000000002D -:10F3E000000000000000000000000000000000001D -:10F3F000000000000000000000000000000000000D -:10F4000000000000000101000000000000000000FA -:10F4100000000000000000000000000000000000EC -:10F4200000000000000000000000000000000000DC -:10F4300000000000000000000000000000000003C9 -:10F440000100000000880000000000000000000033 -:10F4500000000000000000000000000000000000AC -:10F46000000000000000000000000000000000009C -:10F47000000000000000000000000000000000008C -:10F4800000000000000000008800000000000000F4 -:10F49000000000000000000000000000000000006C -:10F4A000000000000000000000000000000000005C -:10F4B000000000000000000000000000000000004C -:10F4C00000008800000001000000000000000000B3 -:10F4D000000000000000000000000000000000002C -:10F4E000000000000000000000000000000000001C -:10F4F000000000000000000000000000000000000C -:10F5000000000000000000000000000000000500F6 -:10F5100000000000000000000000000000000000EB -:10F5200000000000000000000000000000000000DB -:10F5300000000000000000000000000000000000CB -:10F54000000000000000000041000000000000007A -:10F5500000000000000000000000000000000000AB -:10F56000000000000000000000000000000000009B -:10F57000000000000000000000000000000000008B -:10F58000000000000000000000000000001100006A -:10F59000000000000000000000000000000000006B -:10F5A000000000000000000000000000000000005B -:10F5B000000000000000000000000000000000004B -:10F5C000000000000000001100000000000000002A -:10F5D000000000000000000000000000000000002B -:10F5E000000000000000000000000000000000001B -:10F5F000000000000000000000000000000000000B -:10F6000000000000000000000000000000000001F9 -:10F6100000000000000000000000000000000000EA -:10F6200000000000000000000000000000000000DA -:10F6300000000000000000000000000000000000CA -:10F6400000000000000000000001000000000000B9 -:10F6500000000000000000000000000000000000AA -:10F66000000000000000000000000000000000009A -:10F67000000000000000000000000000000000008A -:10F68000000000000000000000000000000000007A -:10F6900000E0000081000000000000000000000009 -:10F6A000000000000000000000000000000000005A -:10F6B000000000000000000000000000000000004A -:10F6C0000000000000000000000000E00000814198 -:10F6D000000000000000000000000000000000002A -:10F6E000000000000000000000000000000000001A -:10F6F000000000000000000000000000000000000A -:10F7000000000000000000000000000000000000F9 -:10F7100000000000000000000000000000000000E9 -:10F7200000000000000000000000000000000000D9 -:10F7300000000000000000000000000000000000C9 -:10F7400000000000000000000000000000000000B9 -:10F7500000000000000000000000000000000000A9 -:10F760000000000000000000000000000000000099 -:10F770000000000000000000000000000000000089 -:10F780000000000000000000000000000000000079 -:10F790000000000000000000000000000000000069 -:10F7A0000000000000000000000000000000000059 -:10F7B0000000000000000000000000000000000049 -:10F7C0000000000000000000000000000000000039 -:10F7D0000000000000000000000000000000000029 -:10F7E0000000000000000000000000000000000019 -:10F7F0000000000000000000000000000000000009 -:10F8000000000000000000000000000000000000F8 -:10F8100000000000000000000000000000000000E8 -:10F8200000000000000000000000000000000000D8 -:10F8300000000000000000000000000000000000C8 -:10F8400000000000000000000000000000000000B8 -:10F8500000000000000000000000000000000000A8 -:10F860000000000000000000000000000000000098 -:10F870000000000000000000000000000000000088 -:10F880000000000000000000000000000000000078 -:10F890000000000000000000000000000000000068 -:10F8A0000000000000000000000000000000000058 -:10F8B0000000000000000000000000000000000048 -:10F8C0000000000000000000000000000000000038 -:10F8D0000000000000000000000000000000000028 -:10F8E0000000000000000000000000000000000018 -:10F8F0000000000000000000000000000000000008 -:10F9000000000000000000000000000000000000F7 -:10F91000000000000000000000600006000C000075 -:10F9200000000000000000000000000000000000D7 -:10F9300000000000000000000000000000000000C7 -:10F9400000000000000000000000000000000000B7 -:10F95000000000400006000C000000000000000055 -:10F960000000000000000000000000000000000097 -:10F970000000000000000000000000000000000087 -:10F980000000000000000000000000000000000077 -:10F990000000000000000000000000000000FFFF69 -:10F9A0000000000000000000000000000000000057 -:10F9B0000000000000000000000000000000000047 -:10F9C0000000000000000000000000000000000037 -:10F9D0000000000000005555FFFF0000000000007F -:10F9E0000000000000000000000000000000000017 -:10F9F0000000000000000000000000000000000007 -:10FA000000000000000000000000000000000000F6 -:10FA100000000000000000000000000000000000E6 -:10FA200000000000000000000000000000000000D6 -:10FA300000000000000000000000000000000000C6 -:10FA400000000000000000000000000000000000B6 -:10FA500000000000000000005555000000000000FC -:10FA60000000000000000000000000000000000096 -:10FA70000000000000000000000000000000000086 -:10FA80000000000000000000000000000000000076 -:10FA90000000000000000000000000000000000066 -:10FAA0000000F0F000000000000000000000000076 -:10FAB0000000000000000000000000000000000046 -:10FAC0000000000000000000000000000000000036 -:10FAD000000000000000000000000000F0F0000046 -:10FAE0000000000000000000000000000000000016 -:10FAF0000000000000000000000000000000000006 -:10FB000000000000000000000000000000000000F5 -:10FB100000000000000000000000000000000000E5 -:10FB200000000000F0F000000000000000000000F5 -:10FB300000000000000000000000000000000000C5 -:10FB400000000000000000000000000000000000B5 -:10FB50000000000000000000000000000000F0F0C5 -:10FB60000000000000000000000020002000000055 -:10FB70002000200020002000200020002000200085 -:10FB80002000200020002000200020002000000095 -:10FB90002000200020002000200020002000200065 -:10FBA0002000200020002000000000032000200092 -:10FBB0000000200020002000200020002000200065 -:10FBC0002000200020002000200000002000200055 -:10FBD0000000200020002000200020002000200045 -:10FBE0002000200020002000200002000000000073 -:10FBF0000000000000000000000000000000000005 -:10FC000000000000000000000000000000000000F4 -:10FC10000000000400000000000000000090000848 -:10FC20000082000000000000000000000000000052 -:10FC300000000000000000000000000000000000C4 -:10FC400000000000000000000000000000000000B4 -:10FC500000000000000000000002000000000000A2 -:10FC60000000000000000000000000000000100084 -:10FC70000000000000000000000000000000000084 -:10FC80000000000000000000000000000000000074 -:10FC90000000000000000000000000000000000064 -:10FCA0000000000000000000000000000000000054 -:10FCB000020000000003000000000000000000003F -:10FCC0000000000000000000000000000000000034 -:10FCD0000000000000000000000000000000000024 -:10FCE0000000000000000000000000000000000014 -:10FCF00080080000000000880000000800000000EC -:10FD000000080008000000000000000000000008DB -:10FD100000080000000000000000000800000000D3 -:10FD2000008800080000000000000000000000083B -:10FD300000008088000000000000000000080000B3 -:10FD400000000000000800000000000000000000AB -:10FD5000008200000000000000000000000200001F -:10FD6000000000000008000000000000000000008B -:10FD70000000000000000000001000000000000073 -:10FD80000000000000000000000000000000000073 -:10FD90000000000000000000000000000000000063 -:10FDA0000000000000000000000000000000000053 -:10FDB0000000000000000000000000000000000043 -:10FDC0000000000000000000000000000000000033 -:10FDD0000000000000000000000000000000000023 -:10FDE0000000000000000000000000000000000013 -:10FDF0000000000000000000000000000000000003 -:10FE000000000000000000000000000000000000F2 -:10FE100000000000000000000000000000000000E2 -:10FE200000000000000000000000000000000000D2 -:10FE300000000000000000000000000000000000C2 -:10FE400000000000000000000000000000000000B2 -:10FE500000000000000000000000000000000000A2 -:10FE60000000000000000000000000000000000092 -:10FE70000000000000000000000001000080000001 -:10FE8000000000000000000000080000000000006A -:10FE90000000000000000000000000000000000062 -:10FEA000000000000000000000080000000000004A -:10FEB0000000000000000000000000000000010041 -:10FEC000000000000000000000000008000000002A -:10FED0000000000000000000000000000000000022 -:10FEE000000000000000000000000008000000000A -:10FEF00000000000000000000000000020000004DE -:10FF000000000000030010000000000000000000DE -:10FF100000000000000000000000000000000000E1 -:10FF200000000000000000000000000000000000D1 -:10FF3000000000001100000000000082000000002E -:10FF4000040000000000000011000000000000009C -:10FF500000000000000000000000000000000000A1 -:10FF60000000000000000000000000000000000091 -:10FF70000000000000000000000000000000000081 -:10FF80000000000000000000000000000000000071 -:10FF90000000000000000000000000000000000061 -:10FFA0000000000000000000000000000000000051 -:10FFB0000000000000000000000000000000000041 -:10FFC00000200000000000000000004000000000D1 -:10FFD0000000000000000000000000000000000021 -:10FFE0000000000000000000000000000000000011 -:10FFF0000000000000000000000000000000000001 -:02000004000FEB -:1000000000000000000000000000000000000000F0 -:1000100000000000000000000000000000000000E0 -:1000200000000000000000000000000000000000D0 -:10003000000000C00000000000840000000000007C -:1000400000000001000000000000000000000000AF -:1000500000000000000000000000000000000000A0 -:1000600000000000000000000000000000C00000D0 -:1000700000000084000000000000000000000000FC -:100080000000000000000000000000000000000070 -:100090000000000000000000000000000000000060 -:1000A0000000000000000000000000000000000050 -:1000B0000000000000000000000000000800000038 -:1000C000000000000002000000000000000000002E -:1000D0000000000000000000000000000000000020 -:1000E0000000000000000000000000000000000010 -:1000F00000000000000000000000000000020000FE -:1001000000000000050000000000000000000000EA -:1001100000000000000000000000000000000000DF -:1001200000000000000000000000000000000000CF -:1001300000000000000000000000000000000000BF -:1001400000000400000005000000000000000000A6 -:10015000000000000000000000000000000000009F -:10016000050000000000000000000000000000008A -:10017000000000000000000000000000000000007F -:10018000110001000000000000000000000000005D -:10019000000000000000000000000000000000005F -:1001A000000000000000000000000000000000004F -:1001B000000000000000000000000000000000003F -:1001C000000000000000900000000000000000009F -:1001D000000000000000000000000000000000001F -:1001E000000000000000000000000000000000000F -:1001F00000000000000000000000000000000000FF -:1002000000000000110021000000000000000000BC -:1002100000000000000000000000000000000000DE -:1002200000000000000000000000000000000000CE -:1002300000000000000000000000000000000000BE -:10024000000000000000110080000000000000001D -:10025000000000000000000000000000000000009E -:10026000000000000000000000000000000000008E -:10027000000000000000000000000000000000007E -:1002800000000000000000410900000300800000A1 -:10029000000000000000000000000000000000005E -:1002A000000000000000000000000000000000004E -:1002B000000000000000000000000000000000003E -:1002C000000000000000000000000080000000802E -:1002D000000000000000000000000000000000001E -:1002E000000000000000000000000000000000000E -:1002F00000000000000000000000000000000000FE -:100300000000000000000000000101000000008863 -:1003100000000000000000000000000000000000DD -:1003200000000000000000000000000000000000CD -:1003300000000000000000000000000000000000BD -:10034000000000000000000000000000002000008D -:100350000004000000000000000000000000000099 -:10036000000000000000000000000000000000008D -:10037000000000000000000000000000000000007D -:1003800000000000000000000000000088000000E5 -:10039000010000000000000000000000000000005C -:1003A000000000000000000000000000000000004D -:1003B000000000000000000000000000000000003D -:1003C00000000000000000000000000001000088A4 -:1003D0008800000000000000000000000000000095 -:1003E000000000000000000000000000000000000D -:1003F00000000000000000000000000000000000FD -:1004000000000000000000000000000000000000EC -:10041000000041000000000000000000000000009B -:1004200000000000000000000000000000000000CC -:1004300000000000000000000000000000000000BC -:10044000000000000000000000000000000041006B -:10045000008000000000000000000000000000001C -:10046000000000000000000000000000000000008C -:10047000000000000000000000000000000000007C -:10048000000000000000000000000000000000006C -:10049000001110000000000000000000000000003B -:1004A000000000000000000000000000000000004C -:1004B000000000000000000000000000000000003C -:1004C000000000000000000000000000000000002C -:1004D000001100000080000000000000000000008B -:1004E000000000000000000000000000000000000C -:1004F00000000000000000000000000000000000FC -:1005000000000000000000000000000000000000EB -:1005100000000001010000000000000000000000D9 -:1005200000000000000000000000000000000000CB -:1005300000000000000000000000000000000000BB -:1005400000000000000000000000000000000000AB -:10055000000000010000004000000000000000005A -:10056000000000000000000000000000000000008B -:10057000000000000000000000000000000000007B -:10058000000000000000000000000000000000006B -:100590000000000000E000008141000000000000B9 -:1005A000000000000000000000000000000000004B -:1005B000000000000000000000000000000000003B -:1005C000000000000000000000000000000000002B -:1005D0000000000000000000070082000000000092 -:1005E000000000000000000000000000000000000B -:1005F00000000000000000000000000000000000FB -:1006000000000000000000000000000000000000EA -:1006100000000000000000000000000000000000DA -:1006200000000000000000000000000000000000CA -:1006300000000000000000000000000000000000BA -:1006400000000000000000000000000000000000AA -:10065000000000000000000000000000F0F00000BA -:10066000000000000000000000000000000000008A -:10067000000000000000000000000000000000007A -:10068000000000000000000000000000000000006A -:10069000000000000000000000000000000000005A -:1006A000000000000000000000000000000000004A -:1006B000000000000000000000000000000000003A -:1006C000000000000000000000000000000000002A -:1006D0000000000000000000000000000000F0F03A -:1006E000000000000000000000000000000000000A -:1006F00000000000000000000000000000000000FA -:1007000000000000000000000000000000000000E9 -:1007100000000000000000000000000000000000D9 -:1007200000000000000000000000000000000000C9 -:1007300000000000000000000000000000000000B9 -:1007400000000000000000000000000000000000A9 -:100750000000000000000000000000000000000099 -:100760000000000000000000000000000000000089 -:100770000000000000000000000000000000000079 -:100780000000000000000000000000000000000069 -:100790000000000000000000000000000000000059 -:1007A0000000000000000000000000000000000049 -:1007B0000000000000000000000000000000000039 -:1007C0000000000000000000000000000000000029 -:1007D0000000000000000000000000000000000019 -:1007E000FFFF00000000000000000000000000000B -:1007F00000000000000000000000000000000000F9 -:1008000000000000000000000000000000000000E8 -:1008100000000000000000000000000000000000D8 -:1008200000000000000000000000000000000000C8 -:1008300000000000000000000000000000000000B8 -:1008400000000000000000000000000000000000A8 -:100850000000000000000000000000000000000098 -:100860000000000000000000000000000000000088 -:100870000000000000000000000000000000000078 -:100880000000000000000000000000000000000068 -:100890000000000000000000000000000000004018 -:1008A0000006000C00000000000000000000000036 -:1008B0000000000000000000000000000000000038 -:1008C0000000000000000000000000000000000028 -:1008D0000000000000000000000000000000000018 -:1008E00005000A00054000A800000000000000000C -:1008F00000000000000000000000000000000000F8 -:1009000000000000000000000000000000000000E7 -:1009100000000000000000000000000000000000D7 -:1009200000000F0FFFFF00000000000000000000AB -:1009300000000000000000000000000000000000B7 -:1009400000000000000000000000000000000000A7 -:100950000000000000000000000000000000000097 -:100960000000000000000000000000000000000087 -:100970000000000000000000000000000000000077 -:100980000000000000000000000000000000000067 -:100990000000000000000000000000000000000057 -:1009A000000000000F0F0000000000000000000029 -:1009B0000000000000000000000000000000000037 -:1009C0000000000000000000000000000000000027 -:1009D0000000000000000000000000000000000017 -:1009E0000000000000000000000000000000000007 -:1009F00000000000000000000000000000000000F7 -:100A000000000000000000000000000000000000E6 -:100A100000000000000000000000000000000000D6 -:100A20000000000000000000F0F0000000000000E6 -:100A300000000000000000000000000000000000B6 -:100A400000000000000000000000000000000000A6 -:100A50000000000000000000000000000000000096 -:100A60000000000000000000000000000000000086 -:100A70000000000000000000000000000000000076 -:100A80000000000000000000000000000000000066 -:100A90000000000000000000000000000000000056 -:100AA00000000000000000000000F0F00000000066 -:100AB0000000000000000000000000000000000036 -:100AC0000000000000000000000000000000000026 -:100AD0000000000000000000000000000000000016 -:100AE0000000000000000000000000000000000006 -:100AF00000000000000000000000000000000000F6 -:100B000000000000000000000000000000000000E5 -:100B100000000000000000000000000000000000D5 -:100B20000000000000000000000000002000200085 -:100B3000040800000200200000002000840084005F -:100B400020002000200000000400040020002000FD -:100B50002000000020000000000000002000000035 -:100B600000002000200300000003000020002000FF -:100B70002000200000000004000000000000200011 -:100B8000880000002000200000000000200020005D -:100B90002000000000000000000400000000200011 -:100BA00000000000208000000000000000000000A5 -:100BB00000000084000000000000000000000000B1 -:100BC0000000000000000000000000000000000025 -:100BD00000000000000040000000000000000000D5 -:100BE00000000000008200840000000000000000FF -:100BF00000000000000040000000000000000000B5 -:100C000000000000000000000000000000020000E2 -:100C100000000000000200000000000000000000D2 -:100C200000000000000000080000000004000400B4 -:100C300000000000000000000000000000000200B2 -:100C400000000000000000000000000000000000A4 -:100C50000000000004000000000000000000000090 -:100C60000000000001000000000000000000000083 -:100C70000000000000000000000000000000100064 -:100C80000000100010000000000000000000000044 -:100C90000000000000000000000000000004000050 -:100CA0000000000000000000000010000000000034 -:100CB0000000000800080084000000080084000014 -:100CC000000000000008008200000008000800008A -:100CD00000000008000800080000000800000000F4 -:100CE00000000000000802080000000800080000E2 -:100CF00000000000000800080008000000040000D8 -:100D00008000000080008008000800000008000843 -:100D100000000000000800080008000800080000AB -:100D20000000000000000008000800008008000823 -:100D30000000000000020021000000000000000090 -:100D4000000000000000002100080000000000106A -:100D50000000000000020021000000000000000070 -:100D60000000000000000021000000000100000061 -:100D70000000000000000002000200020000000865 -:100D80000000000000000000011100000000000051 -:100D90000000000000000000000200000000000051 -:100DA0000000000000000000000000000000000043 -:100DB0000100000000000000000000000000000032 -:100DC0000000000000000000000000000000000023 -:100DD0000000000000000000000000000000000013 -:100DE000000000000000000000000000000020845F -:100DF00000000000000000000000000000000000F3 -:100E00000040000000000000000020000000000082 -:100E100000000000000000000000001000000000C2 -:100E200000000000000000000000000000000000C2 -:100E300000000400000000000000000000000000AE -:100E400000000000000000000000000000000000A2 -:100E50000000000000000000000000000000000092 -:100E6000000008000000000000000000100000006A -:100E7000000000800000A000000040009000820000 -:100E800000000000000000000000000000008200E0 -:100E900000000000000000000000000000008200D0 -:100EA0000000000000000000000000000000010041 -:100EB0000100088011000000000000000000000098 -:100EC0000000000000000000000000A000A0008260 -:100ED0000000000000000000000000000000000012 -:100EE0000000000000000000000000A000A080A0A2 -:100EF00000000000000400000000000000000000EE -:100F0000000000000000000000000000000000A041 -:100F1000000000820000000000000000000000004F -:100F2000000000000000000000000000000000A021 -:100F3000200004000020A0000000000000000000CD -:100F4000000000000000000000000003000000009E -:100F50000008000000000000000000000000000386 -:100F600000000000000800000000080300009000DE -:100F700000088800000200000000080000000000D7 -:100F80000021000000080000C00000000003000075 -:100F90000000000800000000000000030000000046 -:100FA00000000000000000000040A00000039000CE -:100FB000080000080000000000000000000003849A -:100FC0000000000000000000000000000000000021 -:100FD0000000000000000000000000000000000011 -:100FE0000000000000000000000000000000000001 -:100FF00000000000000000000000000000000000F1 -:10100000000000840000000000000000000000005C -:1010100000000000000000000000000000000000D0 -:1010200000000000000000000000000000000000C0 -:1010300000000000000000000000000000000009A7 -:10104000000000000000000000020000000000009E -:101050000000000000000000000000000000000090 -:101060000000000000000000000000000000000080 -:101070000000080008000000000000000000000060 -:101080000009000300000000000000000002000052 -:101090000100000000000000000000090000000046 -:1010A0000000000000000800000000000000000038 -:1010B000000000000000010000000000000000002F -:1010C000000000000000000000000082000000009E -:1010D0000000000000000000000000000000000010 -:1010E000000000000000000000000082000000007E -:1010F00000000000000041000000000000000000AF -:101100000000000000000000000000000882000055 -:1011100000001000000000000000000000000000BF -:10112000000000000000000000000000008200003D -:10113000000000000000000010000000000000009F -:10114000000000000000000000000000000000009F -:10115000000000000000000000000000000000008F -:10116000000000000000000000000000000000007F -:101170000000000000000000111000200010C0045A -:10118000000000000000000000000000000000005F -:10119000000001000000000000000000000000004E -:1011A000000000000000000000000000000000003F -:1011B000000000000000000000000100200000000E -:1011C000000100000000000000000000000000001E -:1011D000000000000000000000000000000000000F -:1011E00000000000000000000000000000000000FF -:1011F000000000000000000000001180210000003D -:1012000080800000000000000000000000000000DE -:10121000000000001100002100000000000000009C -:1012200000000000000000000000000000000000BE -:101230000000000000000000000000000900800025 -:101240000000000800000000000000000000000096 -:10125000000000000000000000000000000000008E -:10126000000000000000000000000000000000007E -:101270000000000000000000000000000041099193 -:10128000000300000000000000000000000000005B -:1012900000000000000000400000114000000000BD -:1012A000000000000000000000000000000000003E -:1012B00000000000000000000000000000000040EE -:1012C000008011030080000000000000000000000A -:1012D000000000000000000000000000000000000E -:1012E00000000000000000000000000000000000FE -:1012F0000000000000000000000000000000880165 -:101300001182102010020000000000000000000008 -:1013100000000000000000000000000001000000CC -:1013200000000000000000000000000000000000BD -:1013300000000000000000000000000000000000AD -:101340000000000201000002000000000000000098 -:10135000000000000000000000000000000000008D -:10136000000000000000000000000000000000007D -:10137000000000000000000000000000000000006D -:101380009088081008109002000000000000000083 -:10139000000000000000000000000000020000004B -:1013A000010000000000000000000000000000003C -:1013B000000000000000000000000000000000002D -:1013C00000000100C08808010100000000000000CA -:1013D000000000000000000000000000000000000D -:1013E00000000000000000000000000000000000FD -:1013F00000000000000000000000000000000000ED -:10140000000000008000800040800000000000001C -:10141000000000000000000000000000000080004C -:1014200000090200000000000000000000000000B1 -:1014300000000000000000000000000000000000AC -:1014400000000000080080808008410000000000CB -:10145000000000000000000000000000000000008C -:10146000000000000000000000000000000000007C -:10147000000000000000000000000000000000006C -:10148000000000000000001100000000000000004B -:10149000000000000000000000000000000000004C -:1014A000110000000000000000000000000000002B -:1014B000000000000000000000000000000000002C -:1014C000000000000000001111000080000000007A -:1014D000000000000000000000000000000000000C -:1014E00000000000000000000000000000000000FC -:1014F00000000000000000000000000000000000EC -:101500000000000000000400108910089000000096 -:1015100000000000000000000000000000000000CB -:1015200000000100000000000000000000000000BA -:1015300000000000000000000000000000000000AB -:101540000000000000000000000101000040000059 -:10155000000000000000000000000000000000008B -:10156000000000000000000000000000000000007B -:10157000000000000000000000000000000000006B -:101580000000000000000000000000E00000818278 -:10159000000000000000000000000000000000004B -:1015A0000000000000E0000000000000000000005B -:1015B000000000000000000000000000000000002B -:1015C00000000000000000000000000000E0070034 -:1015D000820A00000000000000000000000000007F -:1015E00000000000000000000000000000000000FB -:1015F00000000000000000000000000000000000EB -:1016000000000000000000000000C05FC05050F368 -:101610005003000000000000000000000000000077 -:1016200000000000000000000000000000000000BA -:1016300000000000000000000000000000000000AA -:10164000000000000000000000000000000000009A -:10165000F0F00000000000000000000000000000AA -:10166000000000000000000000000000000000007A -:10167000000000000000000000000000000000006A -:10168000000000000000000000000000CF5FCF500D -:101690005FF35F0300000000000000000000000096 -:1016A000000000000000000000000000000000003A -:1016B000000000000000000000000000000000002A -:1016C000000000000000000000000000000000001A -:1016D0000000F0F00000000000000000000000002A -:1016E00000000000000000000000000000000000FA -:1016F00000000000000000000000000000000000EA -:101700000000000000000000000000000000A3A393 -:10171000000FAA00C3F0000000000000000000005D -:1017200000000000000000000000000000000000B9 -:1017300000000000000000000000000000000000A9 -:101740000000000000000000000000000000000099 -:10175000000000000000FFFF00000000000000008B -:101760000000000000000000000000000000000079 -:101770000000000000000000000000000000000069 -:101780000000000000000000000000000000000059 -:10179000A3A3F0FFAAFFC3F00000000000000000B8 -:1017A0000000000000000000000000000000000039 -:1017B0000000000000000000000000000000000029 -:1017C0000000000000000000000000000000000019 -:1017D0000000000000000000000000000000000009 -:1017E00000000000000000000000000000000000F9 -:1017F00000000000000000000000000000000000E9 -:1018000000000000000000000000000000000000D8 -:1018100000000060000600CC000000000000000096 -:1018200000000000000000000000000000000006B2 -:10183000000C00000000000000000000000000009C -:101840000000000000000000000000000000000098 -:101850000000000005000A06054C00A8000000007A -:101860000000000000000000000000000000000078 -:101870000000000000000000000000000000000068 -:101880000000000000000000000000000000000058 -:101890000000000000000000FFFF0000000000004A -:1018A0000000000000000000000000000000000038 -:1018B000FF0000FF0000000000000000000000002A -:1018C0000000000000000000000000000000000018 -:1018D0000000000000000000FF0000FF000000000A -:1018E00000000000000000000000000000000000F8 -:1018F00000000000000000000000000000000000E8 -:1019000000000000000000000000000000000000D7 -:1019100000000000000000000000000000000000C7 -:1019200000000000000000000000000000000000B7 -:101930000000FF0000FF00000000000000000000A9 -:101940000000000000000000000000000000000097 -:1019500000000000000000000000FF0000FF000089 -:101960000000000000000000000000000000000077 -:101970000000000000000000000000000000000067 -:101980000000000000000000000000000000000057 -:10199000000000000000000000000000F0F0000067 -:1019A0000000000000000000000000000000000037 -:1019B00000000000FF0000FF000000000000000029 -:1019C0000000000000000000000000000000000017 -:1019D0000000000000000000000000003C3C00FF90 -:1019E00000000000000000000000000000000000F7 -:1019F00000000000000000000000000000000000E7 -:101A000000000000000000000000000000000000D6 -:101A10000000000000000000000000000000F0F0E6 -:101A200000000000000000000000000000000000B6 -:101A3000000000000000FF0000FF000000000000A8 -:101A40000000000000000000000000000000000096 -:101A500000000000000000000000000000003C3C0E -:101A600000FF0000840000000008000004000000E7 -:101A700000000000200000008800000000000000BE -:101A8000000020002000000000008800200000006E -:101A90000000100020000000000000020000000014 -:101AA00000000000000320000000000000002000F3 -:101AB00000000000200020000000000000000000E6 -:101AC00000000000000820000000000000002000CE -:101AD00000000000000020000000000000000000E6 -:101AE00000000000000000000000000000000000F6 -:101AF00000000000000000C0000000000000000026 -:101B000000000000800800000000000000000084C9 -:101B100000000000000000000000000000000000C5 -:101B200000000000000000000000000000000000B5 -:101B300000000000000000000000000000020000A3 -:101B40000000000000000001000000000000000094 -:101B50000000000000000000000000000000000085 -:101B60004000000000000000000000000000000035 -:101B70000000000000000000000000040000000061 -:101B80000000000000000000000000000000000055 -:101B90000000000000000000000000030000000042 -:101BA0000000000000000000000000000000000035 -:101BB0000000000000000000000000000000000025 -:101BC0000000000000000000000000000000000015 -:101BD0000000000000000000000000000000000005 -:101BE0000000000000000000110000000000008460 -:101BF00000000008000000080000000800080000C5 -:101C00000000000800000000000800840000000838 -:101C1000000800080000000800000008000800009C -:101C20000000000800000000000800000008000894 -:101C3000008400080082000000080000000800087E -:101C40000000000000080000000000080008000874 -:101C500000080008000000000084000800080008D8 -:101C600000900008000800000000A008000000002C -:101C700000080021002100210021000000000000D8 -:101C800000050021002100210021000000080000C3 -:101C90000008002100210021002100000008900020 -:101CA0000000002100210021002100800000000828 -:101CB00000000000002100210021002100000000A0 -:101CC000000000050021002100210021000000216A -:101CD000000000050021002100210005000000088F -:101CE000000000050021002100210021000000006B -:101CF00000000000000000000000000800000000DC -:101D000000000000000000000000000000000008CB -:101D100000000000000000000000000800000000BB -:101D20004100030000000000000000000008000067 -:101D30000090008200080000000000000008000879 -:101D4000000800000000000000000000000000008B -:101D5000000000000000000000000000000000087B -:101D60000000000000000000000000000000000073 -:101D700000000000C00000000000000000000000A3 -:101D800000008400000008000000000000000000C7 -:101D900000008200C0000000000000000000000001 -:101DA0000000820000000000000000000000900021 -:101DB00000000000820000000000000000000000A1 -:101DC00000000000820000000000A00000000000F1 -:101DD0000000000082000000000000000000000081 -:101DE0000000000082000000000000000000000071 -:101DF000900000000000000000080000000000004B -:101E000000000000000000000000000000000000D2 -:101E100000000000000000000008000000000000BA -:101E200000000000000000000000000000000000B2 -:101E3000000000000000000000A0000800000000FA -:101E40000000000000000000000000000000000092 -:101E5000000000000000000000000008000000007A -:101E60000000000000000000000000000000000072 -:101E700000000000C008000000000000000000009A -:101E80000000000000000040000000000000000012 -:101E9000080008000021C0080000A000C0000000E9 -:101EA000C000000000000002001000000000000060 -:101EB0000000008000030000000800000000000394 -:101EC000A000000000000000000200080008000060 -:101ED000000000000100000800080000000082006F -:101EE00000000000000000000021000400000000CD -:101EF00000000000000000000000000000000000E2 -:101F000000000000000000000000000000000000D1 -:101F100000000000000000000000000000000000C1 -:101F200000000000000000900000000000C005005C -:101F300000882120080400000000000000000800C4 -:101F40000000000000000000000000000000000091 -:101F50000000000000002000000000000000000061 -:101F600000000000000000000000000000C00000B1 -:101F700000840084000000840000000000210000B4 -:101F8000000000000000C000000000080000000584 -:101F9000000800030003100800000000000000001B -:101FA000000000000000000000000008080000051C -:101FB000000800000000000800000000820000008F -:101FC0000000000090000000820090000008002146 -:101FD00000050008000300050008000000000021C3 -:101FE00000000000000000210800000000080008B8 -:101FF00000050008000300050008000000000000C4 -:1020000000000000000000000000000000000000D0 -:102010000000000000000000800000000000000040 -:1020200000000000000000000000000000000000B0 -:1020300000000000000000000000000000000000A0 -:102040000000000000000000000000000000000090 -:102050000000000000000000000000000000000080 -:102060000000000000000000000000000000000070 -:10207000000000000000000000000000000100015E -:10208000000100C00001020100C001C100002101E7 -:10209000008200040001000100C1000000010001F5 -:1020A000000100C00001020100C001C100004101A7 -:1020B000008200200001000100C1000000000001BA -:1020C0000001000100C00001020100C001C10000C8 -:1020D0000401004000040001000100C100000001F3 -:1020E0000001000100C00001020100C001C10000A8 -:1020F0004001008200020001000100C10000004117 -:10210000004100410082004100410082084100047A -:10211000084100800080004100410085000000412E -:10212000004100410082004100410082084100114D -:1021300003410080000000410041008500000000D4 -:1021400000410041004100820041004100820841FD -:10215000031184410080008000410041008500009F -:1021600000410041004100820041004100890841D6 -:1021700000110941008000800041004100850000FD -:1021800041000300000000804100890000000300BE -:1021900084000900008090004100C1000080808020 -:1021A000410003000000008041008900000003009E -:1021B00084000400000083004100C1000080808092 -:1021C0000000410003000000008041008900000081 -:1021D000030084000280008083004100C100008071 -:1021E0008080410003000000008041008900000061 -:1021F000030084001000008085004100C1000080C1 -:10220000808001000100000000C00100C00000004B -:102210000100080084020084C1021100C100008492 -:10222000101001000100000000C00100C00000000B -:102230000100080084020088C0881100C1000084E9 -:102240001010000001000100000000C00100C000EB -:1022500000000100080084080008C1001100C1004E -:102260000084101001000100000000C00100C00047 -:1022700000000100080084020008C0001100C10035 -:102280000084101000C00001C0C100000000000167 -:1022900000C008100091000100C101000000000111 -:1022A0000000000000C00001C0C1000000000001EB -:1022B00000C008100091000100C1010000000001F1 -:1022C00000000000000000C00001C0C100000000CC -:1022D000000100C008100091000100C101000000D1 -:1022E00000010000000000C00001C0C100000000AB -:1022F000000100C008100091000100C101000000B1 -:102300000001000000000080004180C100000000CA -:102310000041008480200041004100C1080000000D -:102320000041001100000080004180C10000000059 -:102330000041008480200041004100C108000000ED -:1023400000410011000000000080004180C1000039 -:1023500000000041008980200041004100C10800C8 -:1023600000000041001100000080004180C1000019 -:1023700000000041008280200041004100C10800AF -:102380000000004100110000C100800080C1000079 -:102390004102800090004100C14180008010000097 -:1023A0004100000080004100C100800080C10000A9 -:1023B0004102800090004100C14180008010000077 -:1023C00041000000800041000000C100800080C189 -:1023D00000004102800090004100C1418000801057 -:1023E00000004100000080004100C100800080C169 -:1023F00000004102800090004100C1418000801037 -:1024000000004100000080004100C1004000C0C148 -:1024100000000100200010000100C1898200C000FE -:10242000000001000000C0000100C1004000C0C168 -:1024300000000100200010000100C1898200C000DE -:10244000000001000000C00001000000C1004000C9 -:10245000C0C100000100200010000100C1898200FD -:10246000C000000001000000C0000100C1004000E9 -:10247000C0C100000100200010000100C1898200DD -:10248000C000000001000000C000010000000000CA -:1024900000000042000000000000000081120088DF -:1024A00007004800000000000000000000000000DD -:1024B00000000042000000000000000081120088BF -:1024C00007004800000000000000000000000000BD -:1024D0000000000000420000000000000000811227 -:1024E0000088070048000000000000000000000015 -:1024F0000000000000420000000000000000811207 -:1025000000880700480000000000000000000000F4 -:1025100000000000000000000000000000000000BB -:1025200000000000000000000000000000000000AB -:10253000000000000000000000000000000000009B -:10254000000000000000000000000000000000008B -:10255000000000000000000000000000000000007B -:10256000000000000000000000000000000000006B -:10257000000000000000000000000000000000005B -:10258000000000000000000000000000000000004B -:10259000000000000000000000000000000000003B -:1025A000000000000000000000000000000000002B -:1025B000000000000000000000000000000000001B -:1025C000000000000000000000000000000000000B -:1025D00000000000000000000000000000000000FB -:1025E00000000000000000000000000000000000EB -:1025F00000000000000000000000000000000000DB -:1026000000000000000000000000000000000000CA -:102610000000757B000000000000000000000000CA -:1026200000000000000000000000000000000000AA -:10263000DEAE757B0000000000000000000000001E -:10264000000000000000000000000000000000008A -:10265000DEAE0000757B00000000000000000000FE -:10266000000000000000000000000000000000006A -:102670000000DEAE757B00000000000000000000DE -:10268000000000000000000000000000000000004A -:102690000000DEAE60C60300000000000000003154 -:1026A000E0000000000000000C000000000000003E -:1026B00000C0630660C60300000000000000003197 -:1026C000E0000000000000000C000000000000001E -:1026D00000C06306000060C60300000000000000A8 -:1026E0000031E0000000000000000C0000000000CD -:1026F000000000C0630660C6030000000000000088 -:102700000031E0000000000000000C0000000000AC -:10271000000000C063060000000000000000200070 -:102720000000000000001000000000000000000099 -:102730000000000000000000000000000000200079 -:1027400000000000008020000000000000000000E9 -:102750000000000000000003000000000000000076 -:102760002000000000000000200000000000000029 -:102770000000000000040000000000000000000055 -:102780000000000000000000000000000000000049 -:102790000000000000000004000000000000000035 -:1027A00000000000000000008000000000000000A9 -:1027B00000000000400000000000000000000000D9 -:1027C0000000000000000002000000000000000007 -:1027D00000004000000000000000000000000000B9 -:1027E00000000000000000000000000200000000E7 -:1027F00000000000000000000000000000000000D9 -:1028000000000000000000000000000000020000C6 -:1028100000000000000000000000000000000000B8 -:1028200000000000000000000000000000000000A8 -:102830000000000000000000000001000000000097 -:102840000000000000000000000200000000000086 -:102850000000000000000000000000000000000078 -:102860000000000000000000000000000000000068 -:102870000000000000000000000000000000000058 -:102880000000000000000000000000000000000048 -:102890000000000001000000000000000000000037 -:1028A0000008000000080000000000000008000808 -:1028B00000080008000000000008000810000000E8 -:1028C00000080200000800000000000100080008E5 -:1028D00000080008000000000008000800000000D8 -:1028E00000000008000004080000000000000008CC -:1028F00000080008000800000008000800100000A0 -:1029000000000008000000080000000000000008AF -:102910000084000800841000008800080000000007 -:1029200000000000000000000000000000000000A7 -:102930000000000000000000000000000000000097 -:102940000000000000000000000000000000000087 -:102950000000000000000000000000000400000073 -:102960000000000000000000000000000000000067 -:102970000000000000000000000000000000000057 -:102980000000000000000000000000000000000047 -:102990000000000000000000000000000000000037 -:1029A0000000000000001100000004000000000012 -:1029B000000000000008000800000000000800C03F -:1029C00000000000000011000000000000004100B5 -:1029D000040000000008000800000008000800C013 -:1029E00000000000000000001100000000000000D6 -:1029F0000000002000000008000800000008000897 -:102A000000C00000000000001100000000000000F5 -:102A1000000000000000000800A000C00000000846 -:102A200000C00000000008000000000008000000D6 -:102A30000000000000000100008000008200000093 -:102A40000000000000000100008000000000000005 -:102A50000000000000000000000000000000000076 -:102A60000000000000000000000000000000000066 -:102A70000000000000000000000000000000000056 -:102A8000000000000000000000000000080000003E -:102A9000000000000000000000000000A000000096 -:102AA000010000800000000000080000000000009D -:102AB00000000000000000002000000400000000F2 -:102AC00000000008000000002008000400000000D2 -:102AD00000000000000000000000000000000000F6 -:102AE00000000000000000000000000800000000DE -:102AF00000000000000000000000000000000000D6 -:102B000000000000000000000000000800000000BD -:102B100000000000000000000000000000000000B5 -:102B20000000200000040000000000000000002061 -:102B300000000000900008000000000000000000FD -:102B4000080000009000C00000000000000000002D -:102B50000000000000000000000000000000000075 -:102B60000000000000000000000000000000000065 -:102B70000000000000000000000000000000000055 -:102B80000000000000000000000000000000000045 -:102B900000000000000000000000000000009000A5 -:102BA0000000000000000000000000000000000025 -:102BB0000008000000000000000800080388200052 -:102BC0000000000000000000000000000000000005 -:102BD00000080000000000000208000800842084B3 -:102BE00000000000000400000000040000000000DD -:102BF00000000008000000000000000800080000BD -:102C000020000000000000000000000000000000A4 -:102C100000000008000000000000000800A0000004 -:102C20002000000000000000000000000003000081 -:102C30000000000000000000000000000000000094 -:102C40000000000000000000C000000000000000C4 -:102C50000000000000000000000000000000000074 -:102C6000000000000000004100080000000000001B -:102C70000000000000000000000000000000000054 -:102C80000000000000000000000000000000000044 -:102C9000000000000000000000000000080000002C -:102CA0000000000000000000000000000000000024 -:102CB0000000000000000000000000000000000014 -:102CC0000000000000000000000000000000000004 -:102CD00000000000000000000000000000000000F4 -:102CE00000000000000000000000000000000000E4 -:102CF00000000000000000000000000000000000D4 -:102D000000000000000000000000000000000000C3 -:102D100000000000000000000000000000000000B3 -:102D200000000000000000000000000000000000A3 -:102D30000000000000000000000000000000010092 -:102D40000000000000000000000000000000010082 -:102D50000000000000000000000020000000000053 -:102D60000000000000000000000000000000000063 -:102D70000000000000000000000000000000000053 -:102D80000000000000000000000000000000000043 -:102D90000000000000000000000000000000000033 -:102DA0000000000000000000010000000000000022 -:102DB0000000000000000000000000000000000013 -:102DC00011002100000000000000000000000000D1 -:102DD0001100210000000000000040000000000081 -:102DE00000000000000000000000000000000000E3 -:102DF00000000000000000000000000000000000D3 -:102E000000000000000000000000000000000000C2 -:102E100000000000000000000000000000000000B2 -:102E20000000000000000000000011002100000070 -:102E30000000000000000000000000000000000092 -:102E400000000041090000030080000000000000B5 -:102E50000000004109000003000000000000000025 -:102E60000000000000000000000000000000000062 -:102E70000000000000000000000000000000000052 -:102E80000000000000000000000000000000000042 -:102E90000000000000000000000000000000000032 -:102EA00000000000000000000000000000410900D8 -:102EB000000300800000000000000000000000008F -:102EC0000000000000010100000000880000000078 -:102ED00000000000000101000000000000000000F0 -:102EE00000000000000000000000000000000000E2 -:102EF00000000000000000000000000000000000D2 -:102F000000000000000000000000000000000000C1 -:102F100000000000000000000000000000000000B1 -:102F20000000000000000000000000000000004160 -:102F30000100000000880000000000000000000008 -:102F400000000000000000008800000001000000F8 -:102F500000000000000000008800000000000000E9 -:102F60000001000000000000000000000000000060 -:102F70000000000000000000000000000000000051 -:102F80000000000000000000000000000000000041 -:102F90000000000000000000000000000000000031 -:102FA0000000000000000000000000000000000021 -:102FB0000000880000000100000000000000000088 -:102FC00000000000000000000000000000004100C0 -:102FD00000000000000000000000000000000500EC -:102FE0000020001000000020000000000000000091 -:102FF00000000000000000000000000000000000D1 -:1030000000000000000000000000000000000000C0 -:1030100000000000000000000000000000000000B0 -:1030200000000000000000000000000000000000A0 -:10303000000000000000000041000000000000004F -:10304000000000000000000000000000101100005F -:10305000000000000000000000000000001100005F -:103060000000000000000000000000000000000060 -:103070000000000000000000000000000000000050 -:103080000000000000000000000000000000000040 -:103090000000000000000000000000000000000030 -:1030A0000000000000000000000000000000000020 -:1030B00000000000000000110000000000000000FF -:1030C00000000000000000000000000000000101FE -:1030D00000000000000000000000000000000001EF -:1030E00000000000000000000000000000000000E0 -:1030F00000000000000000000000000000000000D0 -:1031000000000000000000000000000000000000BF -:1031100000000000000000000000000000000000AF -:10312000000000000000000000000000000000009F -:10313000000000000000000000010000000000008E -:10314000000000000000000000000000000000007F -:1031500000E00000814100000000000000000000CD -:1031600000E00000810000000000000000000000FE -:10317000000000000000000000000000000000004F -:10318000000000000000000000000000000000003F -:10319000000000000000000000000000000000002F -:1031A000000000000000000000000000000000001F -:1031B0000000000000000000000000E0000081416D -:1031C00000000000000000000000000000000000FF -:1031D00000000000000000000000000000000000EF -:1031E00000000000000000000000000000000000DF -:1031F00000000000000000000000000000000000CF -:1032000000000000000000000000000000000000BE -:1032100000000000000000000000000000000000AE -:10322000000000000000000000000000000000009E -:10323000000000000000000000000000000000008E -:10324000000000000000000000000000000000007E -:10325000000000000000000000000000000000006E -:10326000000000000000000000000000000000005E -:10327000000000000000000000000000000000004E -:10328000000000000000000000000000000000003E -:10329000000000000000000000000000000000002E -:1032A000000000000000000000000000000000001E -:1032B000000000000000000000000000000000000E -:1032C00000000000000000000000000000000000FE -:1032D00000000000000000000000000000000000EE -:1032E00000000000000000000000000000000000DE -:1032F00000000000000000000000000000000000CE -:1033000000000000000000000000000000000000BD -:1033100000000000000000000000000000000000AD -:10332000000000000000000000000000000000009D -:10333000000000000000000000000000000000008D -:10334000000000000000000000000000000000007D -:10335000000000000000000000000000000000006D -:10336000000000000000000000000000000000005D -:10337000000000000000000000000000000000004D -:10338000000000000000000000000000000000003D -:10339000000000000000000000000000000000002D -:1033A000000000000000000000000000000000001D -:1033B000000000000000000000000000000000000D -:1033C00000000000000000000000000000000000FD -:1033D00000000000000000000000000000000000ED -:1033E00000000000000000000000000000000000DD -:1033F00000000000000000000000000000000000CD -:1034000000000000000000000000000000000000BC -:1034100000000000000000000000000000000000AC -:10342000000000000000000000000000000000009C -:10343000000000000000000000000000000000008C -:10344000000000000000000000000000000000007C -:103450000000000000000000000000400006000C1A -:103460000000000000000000000000600006000CEA -:10347000000000610006000D0000000000000000D8 -:10348000000000000000000000000000000000003C -:10349000000000000000000000000000000000002C -:1034A000000000000000000000000000000000001C -:1034B000000000000000000000000000000000000C -:1034C0000000000000400006000C000000000000AA -:1034D0000000000000000000000000000000FF00ED -:1034E000FFFF0000000000000000000000000000DE -:1034F000FFFF0000000000000000000000000000CE -:1035000000000000000000000000000000000000BB -:1035100000000000000000000000000000000000AB -:10352000000000000000000000000000000000009B -:10353000000000000000000000000000000000008B -:1035400000000000000000005555FFFF00000000D3 -:10355000000000000000000000000000000000006B -:10356000FF0000000000000000000000000000005C -:10357000000000000000000000000000202000000B -:10358000000000000000000000000000000000003B -:10359000000000000000000000000000000000002B -:1035A000000000000000000000000000000000001B -:1035B000000000000000000000000000000000000B -:1035C0000000000000000000000055550000000051 -:1035D00000000000000000000000000000000000EB -:1035E00000000000F0F000000000000000000000FB -:1035F00000000000F0F000000000000000000000EB -:1036000000000000000000000000000000000000BA -:1036100000000000000000000000000000000000AA -:10362000000000000000000000000000000000009A -:10363000000000000000000000000000000000008A -:103640000000000000000000000000000000F0F09A -:10365000000000000000000000000000000000006A -:10366000000000000000F0F000000000000000007A -:10367000000000000000F0F000000000000000006A -:10368000000000000000000000000000000000003A -:10369000000000000000000000000000000000002A -:1036A000000000000000000000000000000000001A -:1036B000000000000000000000000000000000000A -:1036C00000000000000000000000000000000000FA -:1036D000F0F00000200000100000000000000000DA -:1036E00000000000000000000000000000000000DA -:1036F00000000000000000100000000000000000BA -:1037000000000000000000000000000000000000B9 -:1037100000000000000000000000000000000000A9 -:103720000000000000000000000000000000000099 -:103730000000000000000000000000000000000089 -:103740000000000000000000000000000000000079 -:103750000000000000000000000000000000000069 -:103760000000000000000000000000000000000059 -:103770000000000000000000000000000000000049 -:103780000000000000000000000000000000000039 -:103790000000000000000000000000000000000029 -:1037A0000000000000000000000000000000000019 -:1037B0000000000000000000000000000000000009 -:1037C00040000002000000000000000000000000B7 -:1037D00000000000000000000000000000000000E9 -:1037E00000000000000000000000000000000000D9 -:1037F00000000000000000000000000000000000C9 -:1038000000000000000000000000000000000000B8 -:1038100000000000000000000000000000000000A8 -:103820000000000000000000000000000000000098 -:103830000000000000000000000000000000000088 -:103840000000000000000000000000000000000078 -:103850000000000000000000000002000000000066 -:103860000008000000000000000000000000000050 -:103870000000000000000000000000000000000048 -:103880000008000000000000000000000000000030 -:103890000000000000000000000000000200000026 -:1038A0000000000800000000000000000000000010 -:1038B0000000000000000000000000000000000008 -:1038C00000000008000000000000000000000000F0 -:1038D00000000000000000000000000000000000E8 -:1038E00000000000000000000000000000000000D8 -:1038F00000000000000000000000000000000000C8 -:1039000000000000000000000000000000000000B7 -:1039100000000000000000000000000000000000A7 -:103920000000000000000000000000000000000097 -:103930000000000000000000000000000000000087 -:103940000000000000000000000000000000000077 -:1039500000000000840000000000000000000000E3 -:103960000000000000000000000000000000000057 -:103970000000000000000000000000C0000008007F -:103980000000030003000000000000000000000031 -:103990000000000000000000000000C00000000067 -:1039A0000000000000000000000000000000000017 -:1039B00000000000000000000000000000C0000047 -:1039C00000000000000000000000000000000000F7 -:1039D00000000000000000000000000000C0000027 -:1039E00000000000000000000000000000000000D7 -:1039F000000000000800C0000800000000000000F7 -:103A000000000000000000000000000000000000B6 -:103A100000000000000000000000000000000000A6 -:103A20000000000000000000000000000000000096 -:103A30000000000000000000000000000000000086 -:103A40000000000000000000000000000000000076 -:103A50000000000000000000000000000000000066 -:103A60000000000000000000000000000000000056 -:103A70000000000000000000000000000000000046 -:103A80000000000000000000000000000000000036 -:103A90000000000000000000000000000000000026 -:103AA0000000000000000000000000000000000016 -:103AB0000000000000000000000000000000000006 -:103AC00000000000000000000000000000000000F6 -:103AD00000000000000000000000000000000000E6 -:103AE00000000000000000000000000008000000CE -:103AF00000000000000000000000000000000000C6 -:103B000000000000000000000000000000000000B5 -:103B100000000000000000000000000000000000A5 -:103B20000000000000000000000000000000000095 -:103B30000000000000000000000000000000000085 -:103B40000000000000000000000000000000000075 -:103B50000000000000000000000000000000000065 -:103B6000000000000000000000000000000800004D -:103B70000000000000C000000800008400C0000039 -:103B80000000000000C000000000008400080300E6 -:103B90000000000000000000000000000000000025 -:103BA000000000000000000000000000000000080D -:103BB0000000000000000000000000000000000005 -:103BC00000000000000000000000000000000008ED -:103BD000000000000000000000000000000000C025 -:103BE0000000000000840000000000000000000051 -:103BF00000000000000000000000000000000000C5 -:103C000000000000000200000000000000000000B2 -:103C100000000000000200000000000000000000A2 -:103C20000000000000000000000000000000000094 -:103C30000000000000000000000000000000000084 -:103C40000000000000000000000000000000000074 -:103C50000000000000000000000000000000000064 -:103C60000000000000000000000000000000000054 -:103C70000000000000000000000000000000000044 -:103C80000000000000000000000000000000000034 -:103C90000000000000000000000000000000000024 -:103CA0000000000000000000000000000000000014 -:103CB0000000000000000000000000000000000004 -:103CC00000000000000000000000000000000000F4 -:103CD00000000000000000000000000000000000E4 -:103CE00000000000000000000000000000000000D4 -:103CF00000000000000000000000000000000000C4 -:103D000000000000000000000000000000000000B3 -:103D100000000000000000000000000000000000A3 -:103D20000000000000000000000000000000000093 -:103D30000000000000000000000000000000000083 -:103D40000000000000000000000000000000000073 -:103D50000000000000000000000000000000000063 -:103D60000000000000000000000000000000000053 -:103D70000000000000000000000000000000000043 -:103D80000000000000000000000000000000000033 -:103D90000000000000000000000000000000000023 -:103DA0000000000000000000000000000000000013 -:103DB0000000000000000000000000000000000003 -:103DC00000000000000000000000000000000000F3 -:103DD00000000000000000000000000000000000E3 -:103DE00000000000000000000000000000000000D3 -:103DF00000000000000000000000000000000000C3 -:103E000000000000000000000000000000000000B2 -:103E100000000000000000000000000000000000A2 -:103E20000000000000000000000000000000000092 -:103E30000000000000000000000000000000000082 -:103E40000000000000000000000000000000000072 -:103E50000000000000000000000000000000000062 -:103E60000000000000000000000000000000000052 -:103E70000000000000000000000000000000000042 -:103E80000000000000000000000000000000000032 -:103E90000000000000000000000000000000000022 -:103EA0000000000000000000000000000000000012 -:103EB0000000000000000000000000000000000002 -:103EC00000000000000000000000000000000000F2 -:103ED00000000000000000000000000000000000E2 -:103EE00000000000000000000000000000000000D2 -:103EF00000000000000000000000000000000000C2 -:103F000000000000000000000000000000000000B1 -:103F100000000000000000000000000000000000A1 -:103F20000000000000000000000000000000000091 -:103F30000000000000000000000000000000000081 -:103F40000000000000000000000000000000000071 -:103F50000000000000000000000000000000000061 -:103F60000000000000000000000000000000000051 -:103F70000000000000000000000000000000000041 -:103F80000000000000000000000000000000000031 -:103F90000000000000000000000000000000000021 -:103FA0000000000000000000000000000000000011 -:103FB0000000000000000000000000000000000001 -:103FC00000000000000000000000000000000000F1 -:103FD00000000000000000000000000000000000E1 -:103FE00000000000000000000000000000000000D1 -:103FF00000000000000000000000000000000000C1 -:1040000000000000000000000000000000000000B0 -:1040100000000000000000000000000000000000A0 -:104020000000000000000000000000000000000090 -:104030000000000000000000000000000000000080 -:104040000000000000000000000000000000000070 -:104050000000000000000000000000000000000060 -:104060000000000000000000000000000000000050 -:104070000000000000000000000000000000000040 -:104080000000000000000000000000000000000030 -:104090000000000000000000000000000000000020 -:1040A0000000000000000000000000000000000010 -:1040B0000000000000000000000000000000000000 -:1040C00000000000000000000000000000000000F0 -:1040D00000000000000000000000000000000000E0 -:1040E00000000000000000000000000000000000D0 -:1040F00000000000000000000000000000000000C0 -:1041000000000000000000000000000000000000AF -:10411000000000000000000000000000000000009F -:10412000000000000000000000000000000000008F -:10413000000000000000000000000000000000007F -:10414000000000000000000000000000000000006F -:10415000000000000000000000000000000000005F -:10416000000000000000000000000000000000004F -:10417000000000000000000000000000000000003F -:10418000000000000000000000000000000000002F -:10419000000000000000000000000000000000001F -:1041A000000000000000000000000000000000000F -:1041B00000000000000000000000000000000000FF -:1041C00000000000000000000000000000000000EF -:1041D00000000000000000000000000000000000DF -:1041E00000000000000000000000000000000000CF -:1041F00000000000000000000000000000000000BF -:1042000000000000000000000000000000000000AE -:10421000000000000000000000000000000000009E -:10422000000000000000000000000000000000008E -:10423000000000000000000000000000000000007E -:10424000000000000000000000000000000000006E -:10425000000000000000000000000000000000005E -:10426000000000000000000000000000000000004E -:10427000000000000000000000000000000000003E -:10428000000000000000000000000000000000002E -:10429000000000000000000000000000000000001E -:1042A000000000000000000000000000000000000E -:1042B00000000000000000000000000000000000FE -:1042C00000000000000000000000000000000000EE -:1042D00000000000000000000000000000000000DE -:1042E00000000000000000000000000000000000CE -:1042F00000000000000000000000000000000000BE -:1043000000000000000000000000000000000000AD -:10431000000000000000000000000000000000009D -:10432000000000000000000000000000000000008D -:10433000000000000000000000000000000000007D -:10434000000000000000000000000000000000006D -:10435000000000000000000000000000000000005D -:10436000000000000000000000000000000000004D -:10437000000000000000000000000000000000003D -:10438000000000000000000000000000000000002D -:10439000000000000000000000000000000000001D -:1043A000000000000000000000000000000000000D -:1043B00000000000000000000000000000000000FD -:1043C00000000000000000000000000000000000ED -:1043D00000000000000000000000000000000000DD -:1043E00000000000000000000000000000000000CD -:1043F00000000000000000000000000000000000BD -:1044000000000000000000000000000000000000AC -:10441000000000000000000000000000000000009C -:10442000000000000000000000000000000000008C -:10443000000000000000000000000000000000007C -:10444000000000000000000000000000000000006C -:10445000000000000000000000000000000000005C -:10446000000000000000000000000000000000004C -:10447000000000000000000000000000000000003C -:10448000000000000000000000000000000000002C -:10449000000000000000000000000000000000001C -:1044A000000000000000000000000000000000000C -:1044B00000000000000000000000000000000000FC -:1044C00000000000000000000000000000000000EC -:1044D00000000000000000000000000000000000DC -:1044E00000000000000000000000000000000000CC -:1044F00000000000000000000000000000000000BC -:1045000000000000000000000000000000000000AB -:10451000000000000000000000000000000000009B -:10452000000000000000000000000000000000008B -:10453000000000000000000000000000000000007B -:10454000000000000000000000000000000000006B -:10455000000000000000000000000000000000005B -:10456000000000000000000000000000000000004B -:10457000000000000000000000000000000000003B -:10458000000000000000000000000000000000002B -:10459000000000000000000000000000000000001B -:1045A000000000000000000000000000000000000B -:1045B00000000000000000000000000000000000FB -:1045C00000000000000000000000000000000000EB -:1045D00000000000000000000000000000000000DB -:1045E00000000000000000000000000000000000CB -:1045F00000000000000000000000000000000000BB -:1046000000000000000000000000000000000000AA -:104610000200020000000000000000000000000096 -:10462000000000000000000000000000000020006A -:10463000200020000000000000000000000000003A -:104640000000000000000400000000000000000264 -:104650000002200020000000000000000000000018 -:10466000000000000000000020000000000000002A -:1046700000002000200000000000000000000004F6 -:10468000000000000000000000000000000000002A -:1046900000000000000000000000000000004000DA -:1046A000000000000000000000000000000000000A -:1046B00000000000000000000000000040000000BA -:1046C00000000000000000000000000000000000EA -:1046D00000000000000000000000000000000000DA -:1046E00000000000000000000000000000000000CA -:1046F00000000000000200000000000000020000B6 -:1047000000000000000000000000000000000000A9 -:104710000000000000000000000000000000000099 -:104720000000000000000200000000000000000087 -:104730000000000000000000000000000000000079 -:104740000000000000000000000000000000000069 -:104750000000000000000100000000000000000058 -:104760000000000000000000000000000000000049 -:104770000000000000000000000000000000000039 -:104780000000000000000000000000000000000029 -:104790000000000000000000000000000400000015 -:1047A0000000000000000000000000000000000009 -:1047B00000000000001000000000000000000200E7 -:1047C00000000000000004000000000000000000E5 -:1047D00000000000000000001000000000000000C9 -:1047E00000000000000000000200000002000200C3 -:1047F00004000000000000000000000000000000B5 -:1048000000000000000000000000000000000000A8 -:104810000000000002000000000000000000000096 -:104820000000000000000000000000000000000088 -:104830000000000000000000000000000000000078 -:104840000000000000000000000000000000000068 -:104850000000000000001000000000000000000048 -:104860000000000000000000000000000000000048 -:104870000000000000000000000000000000000038 -:104880000000000000000000000000000000000028 -:104890000000000000000000000000000000000018 -:1048A0000000000000000000000000000000000008 -:1048B00000000000000000000000000000000000F8 -:1048C00000000000000000000000000000000000E8 -:1048D00000000000000000000000000000000000D8 -:1048E00000000000000000000000000000000000C8 -:1048F00000000000000000000000000000000000B8 -:1049000000000000000000000000020000000000A5 -:104910000000000000000000000000000000000097 -:104920000000000000000000000000000000000087 -:104930000000000000000000000000000000000077 -:104940000000000000000000000000000000000067 -:104950000000000000000000000000000000000057 -:1049600000000100008000000000000000000000C6 -:104970000000000000000000000000000000000037 -:104980000000000000000000000000000000000027 -:10499000000000000800000000000000000000000F -:1049A0000000000000000000000000000000000007 -:1049B00000000000000000000000000000000000F7 -:1049C00000000000000000000000000000000000E7 -:1049D00000000000000000000000000000000000D7 -:1049E00000000000200000040000000000000000A3 -:1049F00000000000000000000000000000000000B7 -:104A000000000000000000000000000000000000A6 -:104A10000000000000000000000000000000000096 -:104A20000000000000000000000000000000000086 -:104A30000000000000000000000000000000000076 -:104A40000000000000000000000000000000000066 -:104A500000000000000000000000000000009000C6 -:104A60000000000000000000000000000000000046 -:104A70000000000000000000000000000000000036 -:104A80000000000000000000000000000000000026 -:104A90000000000000000000000000000000000016 -:104AA0000000000000000000000000000000000006 -:104AB00000000000000000000000000000000000F6 -:104AC00000000000000000000000000000000000E6 -:104AD00000000000000000000000000000000000D6 -:104AE00000000000000000000000000000000000C6 -:104AF00000000000000000000000000000000000B6 -:104B000000000000000000000000000000000000A5 -:104B10000000000000000000000000000000000095 -:104B20000000000000000000000000000000000085 -:104B30000000000000000000000000000000000075 -:104B40000000000000000000000000000000000065 -:104B50000000000000000000000000000000000055 -:104B6000000008000000000000000000000000003D -:104B70000000000000000000000000000000000035 -:104B80000000000000000000000000000000000025 -:104B90000000000000000000000000000000000015 -:104BA0000000000000000000000000000000000005 -:104BB00000000000000000000000000000000000F5 -:104BC00000000000000000000000000000000000E5 -:104BD00000000000000000000000000000000000D5 -:104BE00000000000000000000000000000000000C5 -:104BF00000000000000000000000000000000000B5 -:104C000000000000000000000000000000000000A4 -:104C10000000000000000000000000000000000094 -:104C20000000000000000000000000000000000084 -:104C30000000000000000000000000000000000074 -:104C40000000000000000000000000000000000064 -:104C50000000000000000000000000000000000054 -:104C60000000000000000000000001000000000043 -:104C70000000000000000000000000000000000034 -:104C80000000000000000000000000000000000024 -:104C90000000000000000000000000000000000014 -:104CA0000000000000000000000000000000000004 -:104CB00000000000000000000000000000000000F4 -:104CC00000000000000000000000000000000000E4 -:104CD00000000000000000000000000000000000D4 -:104CE0000000000000000000000000001100210092 -:104CF00000000000000000000000000000000000B4 -:104D000000000000000000000000000000000000A3 -:104D10000000000000000000000000000000000093 -:104D20000000000000000000000000000000000083 -:104D30000000000000000000000000000000000073 -:104D40000000000000000000000000000000000063 -:104D50000000000000000000000000000000000053 -:104D60000000000000000000000000000000004102 -:104D70000900000300000000000000000000000027 -:104D80000000000000000000000000000000000023 -:104D90000000000000000000000000000000000013 -:104DA0000000000000000000000000000000000003 -:104DB00000000000000000000000000000000000F3 -:104DC00000000000000000000000000000000000E3 -:104DD00000000000000000000000000000000000D3 -:104DE00000000000000000000000000000000000C3 -:104DF00000010100000000000000000000000000B1 -:104E000000000000000000000000000000000000A2 -:104E10000000000000000000000000000000000092 -:104E20000000000000000000000000000000000082 -:104E30000000000000000000000000000000000072 -:104E40000000000000000000000000000000000062 -:104E50000000000000000000000000000000000052 -:104E60000000000000000000000000000000000042 -:104E700000000000880000000000000000000000AA -:104E80000000000000000000000000000000000022 -:104E90000000000000000000000000000000000012 -:104EA0000000000000000000000000000000000002 -:104EB00000000000000000000000000000000000F2 -:104EC00000000000000000000000000000000000E2 -:104ED00000000000000000000000000000000000D2 -:104EE00000000000000000000000000000000000C2 -:104EF00000000000000000000000050000000000AD -:104F000000000000000000000000000000000000A1 -:104F10000000000000000000000000000000000091 -:104F20000000000000000000000000000000000081 -:104F30000000000000000000000000000000000071 -:104F40000000000000000000000000000000000061 -:104F50000000000000000000000000000000000051 -:104F60000000000000000000000000000000000041 -:104F70000000000000000000001100000000000020 -:104F80000000000000000000000000000000000021 -:104F90000000000000000000000000000000000011 -:104FA0000000000000000000000000000000000001 -:104FB00000000000000000000000000000000000F1 -:104FC00000000000000000000000000000000000E1 -:104FD00000000000000000000000000000000000D1 -:104FE00000000000000000000000000000000000C1 -:104FF00000000000000000000000000100000000B0 -:1050000000000000000000000000000000000000A0 -:105010000000000000000000000000000000000090 -:105020000000000000000000000000000000000080 -:105030000000000000000000000000000000000070 -:105040000000000000000000000000000000000060 -:105050000000000000000000000000000000000050 -:105060000000000000000000000000000000000040 -:1050700000000000000000000000000000E0000050 -:10508000810000000000000000000000000000009F -:105090000000000000000000000000000000000010 -:1050A0000000000000000000000000000000000000 -:1050B00000000000000000000000000000000000F0 -:1050C00000000000000000000000000000000000E0 -:1050D00000000000000000000000000000000000D0 -:1050E00000000000000000000000000000000000C0 -:1050F00000000000000000000000000000000000B0 -:10510000000000000000000000000000000000009F -:10511000000000000000000000000000000000008F -:10512000000000000000000000000000000000007F -:10513000000000000000000000000000000000006F -:10514000000000000000000000000000000000005F -:10515000000000000000000000000000000000004F -:10516000000000000000000000000000000000003F -:10517000000000000000000000000000000000002F -:10518000000000000000000000000000000000001F -:10519000000000000000000000000000000000000F -:1051A00000000000000000000000000000000000FF -:1051B00000000000000000000000000000000000EF -:1051C00000000000000000000000000000000000DF -:1051D00000000000000000000000000000000000CF -:1051E00000000000000000000000000000000000BF -:1051F00000000000000000000000000000000000AF -:10520000000000000000000000000000000000009E -:10521000000000000000000000000000000000008E -:10522000000000000000000000000000000000007E -:10523000000000000000000000000000000000006E -:10524000000000000000000000000000000000005E -:10525000000000000000000000000000000000004E -:10526000000000000000000000000000000000003E -:10527000000000000000000000000000000000002E -:10528000000000000000000000000000000000001E -:10529000000000000000000000000000000000000E -:1052A00000000000000000000000000000000000FE -:1052B00000000000000000000000000000000000EE -:1052C00000000000000000000000000000000000DE -:1052D00000000000000000000000000000000000CE -:1052E00000000000000000000000000000000000BE -:1052F00000000000000000000000000000000000AE -:10530000000000000000000000000000000000009D -:10531000000000000000000000000000000000008D -:10532000000000000000000000000000000000007D -:10533000000000000000000000000000000000006D -:10534000000000000000000000000000000000005D -:10535000000000000000000000000000000000004D -:10536000000000000000000000000000000000003D -:10537000000000000000000000000000000000002D -:1053800000000000000000600006000C00000000AB -:10539000000000000000000000000000000000000D -:1053A00000000000000000000000000000000000FD -:1053B00000000000000000000000000000000000ED -:1053C00000000000000000000000000000000000DD -:1053D00000000000000000000000000000000000CD -:1053E00000000000000000000000000000000000BD -:1053F00000000000000000000000000000000000AD -:10540000000000000000000000000000FFFF00009E -:10541000000000000000000000000000000000008C -:10542000000000000000000000000000000000007C -:10543000000000000000000000000000000000006C -:10544000000000000000000000000000000000005C -:10545000000000000000000000000000000000004C -:10546000000000000000000000000000000000003C -:10547000000000000000000000000000000000002C -:10548000000000000000000000000000000000001C -:10549000000000000000000000000000000000000C -:1054A00000000000000000000000000000000000FC -:1054B00000000000000000000000000000000000EC -:1054C00000000000000000000000000000000000DC -:1054D00000000000000000000000000000000000CC -:1054E00000000000000000000000000000000000BC -:1054F00000000000000000000000000000000000AC -:10550000000000000000000000000000000000009B -:10551000F0F00000000000000000000000000000AB -:10552000000000000000000000000000000000007B -:10553000000000000000000000000000000000006B -:10554000000000000000000000000000000000005B -:10555000000000000000000000000000000000004B -:10556000000000000000000000000000000000003B -:10557000000000000000000000000000000000002B -:10558000000000000000000000000000000000001B -:105590000000F0F00000000000000000000000002B -:1055A00000000000000000000000000000000000FB -:1055B00000000000000000000000000000000000EB -:1055C00000000000000000000000000000000000DB -:1055D00000000000000000000000000000000000CB -:1055E00000000000000000000000000000000000BB -:1055F00000000000000000000000000000000000AB -:10560000000000000000000000000000000000009A -:10561000000000000000000000000000000000008A -:105620000400000000000000000000000000000076 -:10563000000000000000000000000000000000006A -:10564000200000000000000000000000000000003A -:10565000000000000000000000000000000000004A -:10566000000000000000000000000000000000003A -:105670000000000000000000000000000002000028 -:105680000000000000000004000000000002000014 -:10569000000000000000000000000000000000000A -:1056A00000000000000000020000400000000000B8 -:1056B00000000000000000000000000000000000EA -:1056C00000000000000000000000000000000000DA -:1056D00000000000000000000000000000000000CA -:1056E00000000000000000000000000000000000BA -:1056F00000000000000000000000000000000000AA -:105700000000000000000000000000000000000099 -:105710000000000000000000000000000000000089 -:105720000000000000000000000000000000000079 -:105730000000000000000000000000000000000069 -:105740000000000000000000000000000000000059 -:105750000000020004000000000000000000000043 -:105760000000000004000000000000000000000035 -:105770000000000000000000000000000000000029 -:105780000000000000000000000000000000000019 -:105790000000000000000000000000000000000009 -:1057A00000000000000000000000000000000000F9 -:1057B00000000000000000000000000000000000E9 -:1057C00000000000000000000000000000000000D9 -:1057D00000000000000000000000000000000000C9 -:1057E00000000000000000000000000000000000B9 -:1057F00000000000000000000000000000000000A9 -:105800000000000000000000000000000000000098 -:105810000000000000000000000000000000000088 -:105820000000000000000000000000000000000078 -:105830000000000000000000000000000000000068 -:105840000000000000000000000000000000000058 -:105850000000000000000000000000000000000048 -:105860000000000000000000000000000000000038 -:105870000000000000000000000000000000000028 -:105880000000000000000000000000000000000018 -:105890000000000000000000000000000000000008 -:1058A00000000000000000000000000000000000F8 -:1058B00000000000000000000000000000000000E8 -:1058C00000000000000000000000000000000000D8 -:1058D00000000000000000000000000000000000C8 -:1058E00000000000000000000000000000000000B8 -:1058F00000000000000000000000000000000000A8 -:105900000000000000000000000000000000000097 -:105910000000000000000000000000000000000087 -:105920000000000000000000000000000000000077 -:105930000000000000000000000000000000000067 -:105940000000000000000000000000000000000057 -:105950000000000000000000000000000000000047 -:105960000000000000000000000000000000000037 -:105970000000000000000000000000000000000027 -:105980000000000000000000000000000000000017 -:105990000000000000000000000000000000000007 -:1059A00000000000000000000000000000000000F7 -:1059B00000000000000000000000000000000000E7 -:1059C00000000000000000000000000000000000D7 -:1059D00000000000000000000000000000000000C7 -:1059E00000000000000000000000000000000000B7 -:1059F00000000000000000000000000000000000A7 -:105A00000000000000000000000000000000000096 -:105A10000000000000000000000000000000000086 -:105A20000000000000000000000000000000000076 -:105A30000000000000000000000000000000000066 -:105A40000000000000000000000000000000000056 -:105A50000000000000000000000000000000000046 -:105A60000000000000000000000000000000000036 -:105A70000000000000000000000000000000000026 -:105A80000000000000000000000000000000000016 -:105A9000000000000000000000000000000000C046 -:105AA0000000000000000084000000000000000072 -:105AB00000000000000000000000000000000000E6 -:105AC00000000000000000000000000000000000D6 -:105AD00000000000000000000000000000000000C6 -:105AE00000000000000000000002000000000000B4 -:105AF00000000000000000000000000000000000A6 -:105B00000000000000000000000000000000000095 -:105B10000000000000000000000000000000000085 -:105B20000000000000000000000000000000000075 -:105B30000002000000000000000000000000000063 -:105B40000000000000000000000000000000000055 -:105B50000000000000000000000000000000000045 -:105B60000000000000000000000000000000000035 -:105B70000000000000000000000000000000000025 -:105B80000000000000000000000000000000000015 -:105B90000000000000000000000000000000000005 -:105BA00000000000000000000000000000000000F5 -:105BB00000000000000000000000000000000000E5 -:105BC00000000000000000000000000000000000D5 -:105BD00000000000000000000000000000000000C5 -:105BE00000000000000000000000000000000000B5 -:105BF00000000000000000000000000000000000A5 -:105C00000000000000000000000000000000000094 -:105C10000000000000000000000000000000000084 -:105C20000000000000000000000000000000000074 -:105C30000000000000000000000000000000000064 -:105C40000000000000000000000000000000000054 -:105C50000000000000000000000000000000000044 -:105C60000000000000000000000000000000000034 -:105C70000000000000000000000000000000000024 -:105C80000000000000000000000000000000000014 -:105C90000000000000000000000000000000000004 -:105CA00000000000000000000000000000000000F4 -:105CB00000000000000000000000000000000000E4 -:105CC00000000000000000000000000000000000D4 -:105CD00000000000000000000000000000000000C4 -:105CE00000000000000000000000000000000000B4 -:105CF00000000000000000000000000000000000A4 -:105D00000000000000000000000000000000000093 -:105D10000000000000000000000000000000000083 -:105D20000000000000000000000000000000000073 -:105D30000000000000000000000000000000000063 -:105D40000000000000000000000000000000000053 -:105D50000000000000000000000000000000000043 -:105D60000000000000000000000000000000000033 -:105D70000000000000000000000000000000000023 -:105D80000000000000000000000000000000000013 -:105D90000000000000000000000000000000000003 -:105DA00000000000000000000000000000000000F3 -:105DB00000000000000000000000000000000000E3 -:105DC00000000000000000000000000000000000D3 -:105DD00000000000000000000000000000000000C3 -:105DE00000000000000000000000000000000000B3 -:105DF00000000000000000000000000000000000A3 -:105E00000000000000000000000000000000000092 -:105E10000000000000000000000000000000000082 -:105E20000000000000000000000000000000000072 -:105E30000000000000000000000000000000000062 -:105E40000000000000000000000000000000000052 -:105E50000000000000000000000000000000000042 -:105E60000000000000000000000000000000000032 -:105E70000000000000000000000000000000000022 -:105E80000000000000000000000000000000000012 -:105E90000000000000000000000000000000000002 -:105EA00000000000000000000000000000000000F2 -:105EB00000000000000000000000000000000000E2 -:105EC00000000000000000000000000000000000D2 -:105ED00000000000000000000000000000000000C2 -:105EE00000000000000000000000000000000000B2 -:105EF00000000000000000000000000000000000A2 -:105F00000000000000000000000000000000000091 -:105F10000000000000000000000000000000000081 -:105F20000000000000000000000000000000000071 -:105F30000000000000000000000000000000000061 -:105F40000000000000000000000000000000000051 -:105F50000000000000000000000000000000000041 -:105F60000000000000000000000000000000000031 -:105F70000000000000000000000000000000000021 -:105F80000000000000000000000000000000000011 -:105F90000000000000000000000000000000000001 -:105FA00000000000000000000000000000000000F1 -:105FB00000000000000000000000000000000000E1 -:105FC00000000000000000000000000000000000D1 -:105FD00000000000000000000000000000000000C1 -:105FE00000000000000000000000000000000000B1 -:105FF00000000000000000000000000000000000A1 -:106000000000000000000000000000000000000090 -:106010000000000000000000000000000000000080 -:106020000000000000000000000000000000000070 -:106030000000000000000000000000000000000060 -:106040000000000000000000000000000000000050 -:106050000000000000000000000000000000000040 -:106060000000000000000000000000000000000030 -:106070000000000000000000000000000000000020 -:106080000000000000000000000000000000000010 -:106090000000000000000000000000000000000000 -:1060A00000000000000000000000000000000000F0 -:1060B00000000000000000000000000000000000E0 -:1060C00000000000000000000000000000000000D0 -:1060D00000000000000000000000000000000000C0 -:1060E00000000000000000000000000000000000B0 -:1060F00000000000000000000000000000000000A0 -:10610000000000000000000000000000000000008F -:10611000000000000000000000000000000000007F -:10612000000000000000000000000000000000006F -:10613000000000000000000000000000000000005F -:10614000000000000000000000000000000000004F -:10615000000000000000000000000000000000003F -:10616000000000000000000000000000000000002F -:10617000000000000000000000000000000000001F -:10618000000000000000000000000000000000000F -:1061900000000000000000000000000000000000FF -:1061A00000000000000000000000000000000000EF -:1061B00000000000000000000000000000000000DF -:1061C00000000000000000000000000000000000CF -:1061D00000000000000000000000000000000000BF -:1061E00000000000000000000000000000000000AF -:1061F000000000000000000000000000000000009F -:10620000000000000000000000000000000000008E -:10621000000000000000000000000000000000007E -:10622000000000000000000000000000000000006E -:10623000000000000000000000000000000000005E -:10624000000000000000000000000000000000004E -:10625000000000000000000000000000000000003E -:10626000000000000000000000000000000000002E -:10627000000000000000000000000000000000001E -:10628000000000000000000000000000000000000E -:1062900000000000000000000000000000000000FE -:1062A00000000000000000000000000000000000EE -:1062B00000000000000000000000000000000000DE -:1062C00000000000000000000000000000000000CE -:1062D00000000000000000000000000000000000BE -:1062E00000000000000000000000000000000000AE -:1062F000000000000000000000000000000000009E -:10630000000000000000000000000000000000008D -:10631000000000000000000000000000000000007D -:10632000000000000000000000000000000000006D -:10633000000000000000000000000000000000005D -:10634000000000000000000000000000000000004D -:10635000000000000000000000000000000000003D -:10636000000000000000000000000000000000002D -:10637000000000000000000000000000000000001D -:10638000000000000000000000000000000000000D -:1063900000000000000000000000000000000000FD -:1063A00000000000000000000000000000000000ED -:1063B00000000000000000000000000000000000DD -:1063C00000000000000000000000000000000000CD -:1063D00000000000000000000000000000000000BD -:1063E00000000000000000000000000000000000AD -:1063F000000000000000000000000000000000009D -:10640000000000000000000000000000000000008C -:10641000000000000000000000000000000000007C -:10642000000000000000000000000000000000006C -:10643000000000000000000000000000000000005C -:10644000000000000000000000000000000000004C -:10645000000000000000000000000000000000003C -:10646000000000000000000000000000000000002C -:10647000000000000000000000000000000000001C -:10648000000000000000000000000000000000000C -:1064900000000000000000000000000000000000FC -:1064A00000000000000000000000000000000000EC -:1064B00000000000000000000000000000000000DC -:1064C00000000000000000000000000000000000CC -:1064D00000000000000000000000000000000000BC -:1064E00000000000000000000000000000000000AC -:1064F000000000000000000000000000000000009C -:10650000000000000000000000000000000000008B -:106510000004040000000000000002000000000071 -:10652000000020000000000000000000000000004B -:10653000000000000000000000002000000000003B -:106540000000200000000000000000010400000026 -:10655000000000000000000000000000200000001B -:1065600000000000200000000000000020000000EB -:1065700000000000000000000000000020000000FB -:1065800000000000200000000004000000000000E7 -:106590000000000000020000000000008000000079 -:1065A00000000000000040000000000000000000AB -:1065B00000000000000000000000100200000000C9 -:1065C00000000000000000000002000200000000C7 -:1065D00000000000000000000000000000000002B9 -:1065E00000000000000000000000000000000000AB -:1065F000000000000000000000000000000000009B -:106600000002000000000000000000000000000088 -:10661000000000000000000000000000000000007A -:10662000000000000000000000000000000000006A -:10663000000000000000000000000000000000005A -:10664000000000000000000000000000000000004A -:10665000000000000000000000000000000000003A -:10666000000000000000000000000000000000002A -:10667000000000000000000000000000000000001A -:10668000000000000000000000000000000000000A -:1066900000000000000000000000000000000000FA -:1066A00000000000000004000000000000000000E6 -:1066B00000000000000000000000000000000000DA -:1066C00000000000000000000400000000000000C6 -:1066D00000000000000000000000000000000000BA -:1066E00000000400000000000000000000000000A6 -:1066F000000004000000040004000400000000008A -:106700000000000000000000000000000000000089 -:106710000000000000000000000000000000000079 -:106720000000000000000000000000000000000069 -:106730000000000000000000000000000000000059 -:106740000000000000000000000000000000000049 -:106750000000000000000000000000000000000039 -:106760000000000000000000000000000000000029 -:106770000000000000000000000000000000000019 -:106780000000000000000000000000000000000009 -:1067900000000000000000000000000000000000F9 -:1067A00000000000000000000000000000000000E9 -:1067B00000000000000000000000000000000000D9 -:1067C00000000000000000000000000000000000C9 -:1067D00000000000000000000000000000000000B9 -:1067E00000000000000000000000000000000000A9 -:1067F0000000000000000000000000000000000099 -:106800000000000000000000000000000000000088 -:10681000000000000000000000000000C0000000B8 -:106820000000000000000000000000000100000067 -:106830000000000000000000000000000000000058 -:106840000000000000000000000000000000000048 -:106850000000000000000000000000000000000038 -:106860000000000000000000000000000000000028 -:106870000000000000000000000000000000000018 -:106880000000000000000000000000000000000008 -:1068900000000000000000000000000000000000F8 -:1068A00000000000000000000000000000000400E4 -:1068B00000000000000000000000000000000000D8 -:1068C00008000000000000000000000000000000C0 -:1068D00000000000000000000000000000000000B8 -:1068E00000000000000000000000000000000000A8 -:1068F0000000000000000000000000000000000098 -:106900000000000000000000000000000000000087 -:106910000000000000000000000000000000000077 -:106920000000000000000000000000000000002047 -:106930000000000000000000000000000000000057 -:106940000000000000000000000000000000000047 -:106950000000000000000000000000000000000037 -:106960000000000000000000000000000000000027 -:106970000000000000000000000000000000000017 -:106980000000000000000000000000000000000007 -:1069900000000000000000000000000000000000F7 -:1069A00000000000000000000000000000000000E7 -:1069B00000010000000000000000000000000000D6 -:1069C00000000000000000000000000000000000C7 -:1069D00000000000000000000000000000000000B7 -:1069E00000000000000000000000000000000000A7 -:1069F0000000000000000000000000000000000097 -:106A00000000000000000000000000000000000086 -:106A10000000000000000000000000000000000076 -:106A20000000000000000000000000000000000066 -:106A30000000000000000000000000000000000056 -:106A40000000000000000000000000000000000046 -:106A50000000000000000000000000000000000036 -:106A60000000000000000000000000000000000026 -:106A70000000000000000000000000000000000016 -:106A80000000000000000000000000000000000006 -:106A900000000000000000000000000000000000F6 -:106AA00000000000000000000000000000000000E6 -:106AB00000000000000000000000000000000000D6 -:106AC00000000000000000000000000000000000C6 -:106AD00000000000000000000000000000000000B6 -:106AE00000000000000000000000000000000000A6 -:106AF0000000000000000000000000000000000096 -:106B00000000000000000000000000000000000085 -:106B10000000000000000000000000000000000075 -:106B20000000000000000000000000000000000065 -:106B300000000000900000000000000000000000C5 -:106B40000000000000000000000000000000000045 -:106B50000000000000000000000000000000000035 -:106B60000000000000000000000000000000000025 -:106B70000000000000000000000000000000000015 -:106B80000000000000000000000000000000000005 -:106B900000000000000000000000000000000000F5 -:106BA00000000000000000000000000000000000E5 -:106BB0000000000011008000000000000000000044 -:106BC00000000000000000000000000000000000C5 -:106BD00000000000000000000000000000000000B5 -:106BE00000000000000000000000000000000000A5 -:106BF0000000000000000000000000000000000095 -:106C00000000000000000000000000000000000084 -:106C10000000000000000000000000000000000074 -:106C20000000000000000000000000000000000064 -:106C300000000000000000000080000000000000D4 -:106C40000000000000000000000000000000000044 -:106C50000000000000000000000000000000000034 -:106C60000000000000000000000000000000000024 -:106C70000000000000000000000000000000000014 -:106C80000000000000000000000000000000000004 -:106C900000000000000000000000000000000000F4 -:106CA00000000000000000000000000000000000E4 -:106CB0000000000000000000000000200000004074 -:106CC00000000000000000000000000000000000C4 -:106CD00000000000000000000000000000000000B4 -:106CE00000000000000000000000000000000000A4 -:106CF0000000000000000000000000000000000094 -:106D00000000000000000000000000000000000083 -:106D10000000000000000000000000000000000073 -:106D20000000000000000000000000000000000063 -:106D30000000000000000000000001000088880042 -:106D40000000000000000000000000000000000043 -:106D50000000000000000000000000000000000033 -:106D60000000000000000000000000000000000023 -:106D70000000000000000000000000000000000013 -:106D80000000000000000000000000000000000003 -:106D900000000000000000000000000000000000F3 -:106DA00000000000000000000000000000000000E3 -:106DB0000000000000000000000000004100008012 -:106DC00000000000000000000000000000000000C3 -:106DD00000000000000000000000000000000000B3 -:106DE00000000000000000000000000000000000A3 -:106DF0000000000000000000000000000000000093 -:106E00000000000000000000000000000000000082 -:106E10000000000000000000000000000000000072 -:106E20000000000000000000000000000000000062 -:106E30000000000000000000000000000000001141 -:106E400000000080000000000000000000000000C2 -:106E50000000000000000000000000000000000032 -:106E60000000000000000000000000000000000022 -:106E70000000000000000000000000000000000012 -:106E80000000000000000000000000000000000002 -:106E900000000000000000000000000000000000F2 -:106EA00000000000000000000000000000000000E2 -:106EB00000000000000000000000000000000000D2 -:106EC0000001000000400000000000000000000081 -:106ED00000000000000000000000000000000000B2 -:106EE00000000000000000000000000000000000A2 -:106EF0000000000000000000000000000000000092 -:106F00000000000000000000000000000000000081 -:106F10000000000000000000000000000000000071 -:106F20000000000000000000000000000000000061 -:106F30000000000000000000000000000000000051 -:106F400000000000000007008200000000000000B8 -:106F50000000000000000000000000000000000031 -:106F60000000000000000000000000000000000021 -:106F70000000000000000000000000000000000011 -:106F80000000000000000000000000000000000001 -:106F900000000000000000000000000000000000F1 -:106FA00000000000000000000000000000000000E1 -:106FB00000000000000000000000000000000000D1 -:106FC00000000000000000000000F0F000000000E1 -:106FD00000000000000000000000000000000000B1 -:106FE00000000000000000000000000000000000A1 -:106FF0000000000000000000000000000000000091 -:107000000000000000000000000000000000000080 -:107010000000000000000000000000000000000070 -:107020000000000000000000000000000000000060 -:107030000000000000000000000000000000000050 -:10704000000000000000000000000000F0F0000060 -:107050000000000000000000000000000000000030 -:107060000000000000000000000000000000000020 -:107070000000000000000000000000000000000010 -:107080000000000000000000000000000000000000 -:1070900000000000000000000000000000000000F0 -:1070A00000000000000000000000000000000000E0 -:1070B00000000000000000000000000000000000D0 -:1070C00000000000000000000000000000000000C0 -:1070D00000000000000000000000000000000000B0 -:1070E00000000000000000000000000000000000A0 -:1070F0000000000000000000000000000000000090 -:10710000000000000000000000000000000000007F -:10711000000000000000000000000000000000006F -:10712000000000000000000000000000000000005F -:10713000000000000000000000000000000000004F -:107140000000000000000000000000000000FFFF41 -:10715000000000000000000000000000000000002F -:10716000000000000000000000000000000000001F -:10717000000000000000000000000000000000000F -:1071800000000000000000000000000000000000FF -:1071900000000000000000000000000000000000EF -:1071A00000000000000000000000000000000000DF -:1071B00000000000000000000000000000000000CF -:1071C00000000000000000000000000000000000BF -:1071D00000000000000000000000000000000000AF -:1071E000000000000000000000000000000000009F -:1071F000000000000000000000000000000000008F -:10720000000000000000000000000000000000007E -:10721000000000000000000000000000000000006E -:10722000000000000000000000000000000000005E -:10723000000000000000000000000000000000004E -:107240000000000000000000000000000000050039 -:107250000A00054000A80000000000000000000037 -:10726000000000000000000000000000000000001E -:10727000000000000000000000000000000000000E -:1072800000000000000000000000000000000000FE -:1072900000000000000000000000000000000000EE -:1072A00000000000000000000000000000000000DE -:1072B00000000000000000000000000000000000CE -:1072C00000000000000000000000000000000000BE -:1072D00000000000000000000000000000000000AE -:1072E000000000000000000000000000000000009E -:1072F000000000000000000000000000000000008E -:10730000000000000000000000000000000000007D -:10731000000000000000000000000000000000006D -:10732000000000000000000000000000000000005D -:10733000000000000000000000000000000000004D -:10734000000000000000000000000000000000003D -:10735000000000000000000000000000000000002D -:10736000000000000000000000000000000000001D -:10737000000000000000000000000000000000000D -:1073800000000000000000000000000000000000FD -:1073900000000000000000000000000000000000ED -:1073A00000000000000000000000000000000000DD -:1073B00000000000000000000000000000000000CD -:1073C00000000000000000000000000000000000BD -:1073D00000000000000000000000000000000000AD -:1073E000000000000000000000000000000000009D -:1073F000000000000000000000000000000000008D -:10740000000000000000000000000000000000007C -:10741000000000000000000000000000000000006C -:10742000000000000000000000000000000000005C -:10743000000000000000000000000000000000004C -:10744000000000000000000000000000000000003C -:10745000000000000000000000000000000000002C -:10746000000000000000000000000000000000001C -:10747000000000000000000000000000000000000C -:1074800000000000000000000000000000000000FC -:1074900000000000000000000000000000000000EC -:1074A00000000000000000000000000000000000DC -:1074B00000000000000000000000000000000000CC -:1074C00000000000000000000000000000000000BC -:1074D00000000000000000000000000000000000AC -:1074E000000000000000000000000000000000009C -:1074F000000000000000000000000000000000008C -:107500000000000000000000000200000000000079 -:107510000004000000000000000000000000000067 -:10752000000000000000000000000000000000005B -:10753000000000000000000000000000000000004B -:10754000000000000000000000000000000000003B -:10755000000000000000000000000000000000002B -:10756000000000000000000000000000000000001B -:10757000000000000000000000000000000000000B -:1075800000000000000000000000000000000000FB -:1075900000000000100000000000000000000000DB -:1075A00000000000000000000000000000000000DB -:1075B00000000000000000020000000000000000C9 -:1075C000400000000000000000000000000000007B -:1075D00000000000000000000000000000000000AB -:1075E0000000000000000000000000000400000097 -:1075F000000000000000000000000000000000008B -:10760000000000000000000000000000000000007A -:107610000000000000000000000000000000010069 -:10762000000000000000000000000000000000005A -:10763000000000000000000000000000000000004A -:10764000000000000000000000000000000000003A -:107650000000000000000000000000000000040026 -:10766000000000000000000000000000000000001A -:10767000000000000000000000000000000000000A -:1076800000000000000000000000000000000000FA -:1076900000000000000000000000000000000000EA -:1076A00002000000000000000000000000000000D8 -:1076B00000000000000000000000000000000000CA -:1076C00000000000000000000000000000000000BA -:1076D00000000000000000000000000000000000AA -:1076E000000000000000000000000000000000009A -:1076F000000000000000000000000000000000008A -:107700000000000000000000000000000000000079 -:107710000000000000000000000000000000000069 -:107720000000000000000000000000000000000059 -:107730000000000000000000000000000000000049 -:107740000000000000000000000000000000000039 -:107750000000000000000000000000000000000029 -:107760000000000000000000000000000000000019 -:107770000000000000000000000000000000000009 -:1077800000000000000000000000000000000000F9 -:1077900000000000000000000000000000000000E9 -:1077A00000000000000000000000000000000000D9 -:1077B00000000000000000000000000000000000C9 -:1077C00000000000000000000000000000000000B9 -:1077D00000000000000000000000000000000000A9 -:1077E0000000000000000000000000000000000099 -:1077F0000000000000000000000000000000000089 -:107800000000000000000000000000000000000078 -:10781000000000000000000000000000C0000000A8 -:107820000000000000000000000000000100000057 -:107830000000000000000000000000000000000048 -:107840000000000000000000000000000000000038 -:107850000000000000000000000000000000000028 -:107860000000000000000000000000000000000018 -:107870000000000000000000000000000000000008 -:1078800000000000000000000000000000000000F8 -:1078900000000000000000000000000000000000E8 -:1078A00000000000000000000000000000000400D4 -:1078B00000000000000000000000000000000000C8 -:1078C00000000000000000000000000000000000B8 -:1078D00000000000000000000000000000000000A8 -:1078E0000000000000000000000000000000000098 -:1078F0000000000000000000000000000000000088 -:107900000000000000000000000000000000000077 -:10791000A0000000000000000000000000000000C7 -:107920000000000000000000000000000000002037 -:107930000000000000000000000000000000000047 -:107940000000000000000000000000000000000037 -:107950000000000000000000000000000000000027 -:107960000000000000000000000000000000000017 -:107970000084000000000000000000000000000083 -:1079800000000000000000000000000000000000F7 -:1079900000000000000000000000000000000000E7 -:1079A00000000000000000000000000000000000D7 -:1079B00000010000000000000000000000000000C6 -:1079C00000000000000000000000000000000000B7 -:1079D00000000000000000000000000000000000A7 -:1079E0000000000000000000000000000000000097 -:1079F0000000000000000000000000020000000085 -:107A00000000000000000000000000004000000036 -:107A10000000000000000000000000000000000066 -:107A20000000000000000000000000000000000056 -:107A30000000000000000000000000000000000046 -:107A40000000000000000000000000000000000036 -:107A50000000000000000000000000000000000026 -:107A60000000000000000000000000000000000016 -:107A70000000000000000000000000000000000006 -:107A800000000000000000000000000000000000F6 -:107A900000000000000000000000000000000000E6 -:107AA00000000000000000000000000000000000D6 -:107AB00000000000000000000000000000000000C6 -:107AC00000000000000000000000000000000000B6 -:107AD00000000000000000000000000000000000A6 -:107AE0000000000000000000000000000000000096 -:107AF0000000000000000000000000000000000086 -:107B00000000000000000000000000000000000075 -:107B10000000000000000000000000000000000065 -:107B20000000000000000000000000000000000055 -:107B300000000000900000000000000000000000B5 -:107B40000000000000000000000000000000000035 -:107B50000000000000000000000000000000000025 -:107B60000000000000000000000000000000000015 -:107B70000000000000000000000000000000000005 -:107B800000000000000000000000000000000000F5 -:107B900000000000000000000000000000000000E5 -:107BA00000000000000000000000000000000000D5 -:107BB0000000000011008000000000000000000034 -:107BC00000000000000000000000000000000000B5 -:107BD00000000000000000000000000000000000A5 -:107BE0000000000000000000000000000000000095 -:107BF0000000000000000000000000000000000085 -:107C00000000000000000000000000000000000074 -:107C10000000000000000000000000000000000064 -:107C20000000000000000000000000000000000054 -:107C300000000000000000000080000000000000C4 -:107C40000000000000000000000000000000000034 -:107C50000000000000000000000000000000000024 -:107C60000000000000000000000000000000000014 -:107C70000000000000000000000000000000000004 -:107C800000000000000000000000000000000000F4 -:107C900000000000000000000000000000000000E4 -:107CA00000000000000000000000000000000000D4 -:107CB0000000000000000000000000200000004064 -:107CC00000000000000000000000000000000000B4 -:107CD00000000000000000000000000000000000A4 -:107CE0000000000000000000000000000000000094 -:107CF0000000000000000000000000000000000084 -:107D00000000000000000000000000000000000073 -:107D10000000000000000000000000000000000063 -:107D20000000000000000000000000000000000053 -:107D30000000000000000000000001000088880032 -:107D40000000000000000000000000000000000033 -:107D50000000000000000000000000000000000023 -:107D60000000000000000000000000000000000013 -:107D70000000000000000000000000000000000003 -:107D800000000000000000000000000000000000F3 -:107D900000000000000000000000000000000000E3 -:107DA00000000000000000000000000000000000D3 -:107DB0000000000000000000000000004100008002 -:107DC00000000000000000000000000000000000B3 -:107DD00000000000000000000000000000000000A3 -:107DE0000000000000000000000000000000000093 -:107DF0000000000000000000000000000000000083 -:107E00000000000000000000000000000000000072 -:107E10000000000000000000000000000000000062 -:107E20000000000000000000000000000000000052 -:107E30000000000000000000000000000000001131 -:107E400000000080000000000000000000000000B2 -:107E50000000000000000000000000000000000022 -:107E60000000000000000000000000000000000012 -:107E70000000000000000000000000000000000002 -:107E800000000000000000000000000000000000F2 -:107E900000000000000000000000000000000000E2 -:107EA00000000000000000000000000000000000D2 -:107EB00000000000000000000000000000000000C2 -:107EC0000001000000400000000000000000000071 -:107ED00000000000000000000000000000000000A2 -:107EE0000000000000000000000000000000000092 -:107EF0000000000000000000000000000000000082 -:107F00000000000000000000000000000000000071 -:107F10000000000000000000000000000000000061 -:107F20000000000000000000000000000000000051 -:107F30000000000000000000000000000000000041 -:107F400000000000000007008200000000000000A8 -:107F50000000000000000000000000000000000021 -:107F60000000000000000000000000000000000011 -:107F70000000000000000000000000000000000001 -:107F800000000000000000000000000000000000F1 -:107F900000000000000000000000000000000000E1 -:107FA00000000000000000000000000000000000D1 -:107FB00000000000000000000000000000000000C1 -:107FC0000000000000000000F0F0000000000000D1 -:107FD00000000000000000000000000000000000A1 -:107FE0000000000000000000000000000000000091 -:107FF0000000000000000000000000000000000081 -:108000000000000000000000000000000000000070 -:108010000000000000000000000000000000000060 -:108020000000000000000000000000000000000050 -:108030000000000000000000000000000000000040 -:1080400000000000000000000000F0F00000000050 -:108050000000000000000000000000000000000020 -:108060000000000000000000000000000000000010 -:108070000000000000000000000000000000000000 -:1080800000000000000000000000000000000000F0 -:1080900000000000000000000000000000000000E0 -:1080A00000000000000000000000000000000000D0 -:1080B00000000000000000000000000000000000C0 -:1080C0000000000000000000000000000000FFFFB2 -:1080D00000000000000000000000000000000000A0 -:1080E0000000000000000000000000000000000090 -:1080F0000000000000000000000000000000000080 -:10810000000000000000000000000000000000006F -:10811000000000000000000000000000000000005F -:10812000000000000000000000000000000000004F -:10813000000000000000000000000000000000003F -:10814000000000000000000000000000000000002F -:10815000000000000000000000000000000000001F -:10816000000000000000000000000000000000000F -:1081700000000000000000000000000000000000FF -:1081800000000000000000000000000000000000EF -:1081900000000000000000000000000000000000DF -:1081A00000000000000000000000000000000000CF -:1081B00000000000000000000000000000000000BF -:1081C00000000000000000000000000005000A00A0 -:1081D000054000A8000000000000000000000000B2 -:1081E000000000000000000000000000000000008F -:1081F000000000000000000000000000000000007F -:10820000000000000000000000000000000000006E -:10821000000000000000000000000000000000005E -:10822000000000000000000000000000000000004E -:10823000000000000000000000000000000000003E -:10824000000000000000000000000000000000002E -:10825000000000000000000000000000000000001E -:10826000000000000000000000000000000000000E -:1082700000000000000000000000000000000000FE -:1082800000000000000000000000000000000000EE -:1082900000000000000000000000000000000000DE -:1082A00000000000000000000000000000000000CE -:1082B00000000000000000000000000000000000BE -:1082C00000000000000000000000000000000000AE -:1082D000000000000000000000000000000000009E -:1082E000000000000000000000000000000000008E -:1082F000000000000000000000000000000000007E -:10830000000000000000000000000000000000006D -:10831000000000000000000000000000000000005D -:10832000000000000000000000000000000000004D -:10833000000000000000000000000000000000003D -:10834000000000000000000000000000000000002D -:10835000000000000000000000000000000000001D -:10836000000000000000000000000000000000000D -:1083700000000000000000000000000000000000FD -:1083800000000000000000000000000000000000ED -:1083900000000000000000000000000000000000DD -:1083A00000000000000000000000000000000000CD -:1083B00000000000000000000000000000000000BD -:1083C00000000000000000000000000000000000AD -:1083D000000000000000000000000000000000009D -:1083E000000000000000000000000000000000008D -:1083F000000000000000000000000000000000007D -:10840000000000000000000000000000000000006C -:108410000004000000000000000000040000000054 -:10842000000000000000000000000000000000004C -:10843000000000000000000000000000000000003C -:108440000000000000030000000000000000000029 -:10845000000000000000000000000000000000001C -:10846000000000000000008000000000000000800C -:1084700000000000000000000000000000000000FC -:1084800000000000000000000000000000000000EC -:10849000400000000000000000000000000000009C -:1084A00000000000000000000000000000000000CC -:1084B00000000000000000000000000000000000BC -:1084C00000000000000200000000000000000000AA -:1084D000000000000000000000000000000000009C -:1084E0000000000000000000000400000000000088 -:1084F000002000000000000000000000000000005C -:10850000000000000000000000000000000000006B -:108510000100000000000000010002000000000057 -:10852000000000000000000001000000000000004A -:10853000000000000000000000000000000000003B -:10854000000000000000000000000000000000002B -:10855000000000000000000000000000000000001B -:10856000000000000000000000000000000000000B -:1085700000000100000000000000000000000400F6 -:1085800004000000000000000000040000000000E3 -:1085900000000200000000000000020000000000D7 -:1085A00000000000000000000000100000000000BB -:1085B00004000000000000000000000000000000B7 -:1085C00000000000000000000000000000000000AB -:1085D0000000000004000000000000000000000097 -:1085E0000000000000000000000000000400000087 -:1085F0000000000004000000000000000400000073 -:108600000000000004000000000000000000000066 -:10861000000000000000000000000000000000005A -:10862000000000000000000000000000000000004A -:10863000000000000000000000000000000000003A -:10864000000000000000000000000000000000002A -:10865000000000000000000000000000000000001A -:10866000000000000000000000000000000000000A -:1086700000000000000000000000000000000000FA -:1086800000000000000000000000000000000000EA -:1086900000000000000000000000000000000000DA -:1086A00000000000000000000000000000000000CA -:1086B00000000000000000000000000000000000BA -:1086C00000000000000000000000000000000000AA -:1086D000000000000000000000000000000000009A -:1086E000000000000000000000000000000000008A -:1086F000000000000000000000000000000000007A -:108700000000000000000000000000000000000069 -:108710000000000000000000000000000000010058 -:108720000000000000000900000000000000000040 -:1087300000000000010000800000000000000000B8 -:108740000000000000000000000000000000000029 -:108750000000000000000000000000000000000019 -:108760000000000000000000000000000000000009 -:1087700000000000000000000000000000000000F9 -:1087800000000000000000000000000000000000E9 -:1087900000000000000000000000000000000000D9 -:1087A00004000000000000000400000000000000C1 -:1087B0000000000000002000000400000000000095 -:1087C00000000000000000000000000000000000A9 -:1087D0000000000000000000000000000000000099 -:1087E0000000000000000000000000000000000089 -:1087F0000000000000000000000000000000000079 -:108800000000000000000000000000000000000068 -:108810000000000000000000000000000000000058 -:108820000020000000000000002000000000000008 -:1088300000009000000000000000000000000000A8 -:108840000000000000000000000000000000000028 -:108850000000000000000000000000000000000018 -:108860000000000000000000000000000000000008 -:1088700000000000000000000000002000000000D8 -:1088800000000000000000000000000000000000E8 -:1088900000000000000000000000000000000000D8 -:1088A00000000001000000000000000100000000C6 -:1088B00000000000000000000000000000000000B8 -:1088C00000000000000000000000000000000000A8 -:1088D0000000000000000000000000000000000098 -:1088E0000000000000000000000000000000008404 -:1088F0000000000000000000000000000001000077 -:108900000000000000000000000000000000000067 -:108910000000000000000000000000000000000057 -:108920000000000000000000000000000000000047 -:108930000000000000000000000000000000000037 -:108940000000000000000000000000000000000027 -:108950000000000000000000000000000000000017 -:108960000000000000000000000000000000000007 -:1089700000000000000000000002000000000000F5 -:1089800000000000000000000000000000000000E7 -:1089900000000000000000000000000000000000D7 -:1089A00000000000000000000000000000000000C7 -:1089B00000000000000000000000000000000000B7 -:1089C00000000000000000000000000000000000A7 -:1089D0000000000000000000000000000000000097 -:1089E0000000000000000000000000000000000087 -:1089F0000000000000000000000000000000000077 -:108A00000000000000000000000000000000000066 -:108A10000000000000000000000000000000000056 -:108A20000000000000009000002000000000900006 -:108A300000900000000000000000000001000000A5 -:108A40000000000000000000000000000000000026 -:108A50000000000000000000000000000000000016 -:108A60000000000000000000000000000000000006 -:108A700000000000000000000000000000000000F6 -:108A800000000000000000000000000000000000E6 -:108A900000000000000000000000000000000000D6 -:108AA0000000000000001100800000000000110024 -:108AB0008000000000000000000000000000110025 -:108AC0002100000000000000000000000000000085 -:108AD0000000000000000000000000000000000096 -:108AE0000000000000000000000000000000000086 -:108AF0000000000000000000000000000000000076 -:108B00000000000000000000000000000000000065 -:108B10000000000000000000000000000000000055 -:108B20000000000000000000000000800000008045 -:108B30000000008000000080000000000000000035 -:108B400000410900000300000000000000000000D8 -:108B50000000000000000000000000000000000015 -:108B60000000000000000000000000000000000005 -:108B700000000000000000000000000000000000F5 -:108B800000000011000000000000000000000000D4 -:108B900000000000000000000000000000000000D5 -:108BA00000000000000000000000000000200000A5 -:108BB00000C000000020000000C000000000000015 -:108BC00000000001010000000000000000000000A3 -:108BD0000000000000000000000000000000000095 -:108BE0000000000000000000000000000000000085 -:108BF0000000000000000000000000000000000075 -:108C00000000000000000000000000000000000064 -:108C10000000000000000000000000000000000054 -:108C200000000000000000000000000001000088BB -:108C30008800010001000088880001000000000099 -:108C4000000000000000880000000000000000009C -:108C50000000000000000000000000000000000014 -:108C60000000000000000000000000000000000004 -:108C700000000000000000000000000000000000F4 -:108C8000000000000000000000008800000000005C -:108C900000000000000000000000000000000000D4 -:108CA0000000000000000000000000000000410083 -:108CB0000080000009004100008000000900000061 -:108CC0000000000000000000000000004000000064 -:108CD0000000000000000000000000000000000094 -:108CE0000000000000000000000000000000000084 -:108CF0000000000000000000000000000000000074 -:108D00000000000000000000000000000000000063 -:108D1000000000000000080000000000000000004B -:108D20000000000000000000000000000000000043 -:108D30000011000000800000001100000080000011 -:108D40000000000000000000000000110000000012 -:108D50000000000000000000000000000000000013 -:108D60000000000000000000000000000000000003 -:108D700000000000000000000000000000000000F3 -:108D800000000000000000000000000800000000DB -:108D90000000000000000000800000000000000053 -:108DA00000000000000000000000000000000000C3 -:108DB0000000000100000040000000010000004031 -:108DC00000000000000000000000000000010000A2 -:108DD0000000000000000000000000000000000093 -:108DE0000000000000000000000000000000000083 -:108DF0000000000000000000000000000000000073 -:108E00000000000000000000000000000000000062 -:108E1000000000008800000000009000000000003A -:108E20000000000000000000000000000000000042 -:108E30000000000000000000070082210000000088 -:108E4000070082210000000000000000000000E098 -:108E50000000810000000000000000000000000091 -:108E60000000000000000000000000000000000002 -:108E700000000000000000000000000000000000F2 -:108E800000000000000000000000000000008182DF -:108E900000E007000000410000E0070000000000C3 -:108EA00000000000000000000000000000000000C2 -:108EB000000000000000000000000000F0F00000D2 -:108EC00000000000F0F000000000000000000000C2 -:108ED0000000000000000000000000000000000092 -:108EE0000000000000000000000000000000000082 -:108EF0000000000000000000000000000000000072 -:108F00000000000000000000000000000000000061 -:108F1000000000000000000000003C3C00000000D9 -:108F20000000000000000000000000000000000041 -:108F30000000000000000000000000000000F0F051 -:108F4000000000000000F0F0000000000000000041 -:108F50000000000000000000000000000000000011 -:108F60000000000000000000000000000000000001 -:108F700000000000000000000000000000000000F1 -:108F800000000000000000000000000000000000E1 -:108F90000000000000000000000000003C3C000059 -:108FA00000000000000000000000000000000000C1 -:108FB00000000000000000000000000000000000B1 -:108FC00000000000000000000000000000000000A1 -:108FD0000000000000000000000000000000000091 -:108FE0000000000000000000000000000000000081 -:108FF0000000000000000000000000000000000071 -:109000000000000000000000000000000000000060 -:109010000000000000000000000000000000000050 -:109020000000000000000000000000000000000040 -:109030000000000000000000000000000F0F000012 -:10904000FFFF00000F0F0000FFFF00000000000006 -:109050000000000000000000000000000000000010 -:109060000000000000000000000000000000000000 -:1090700000000000000000000000000000000000F0 -:1090800000000000000000000000000000000000E0 -:1090900000000000000000000000000000000000D0 -:1090A00000000000000000000000000000000000C0 -:1090B00000000000000000000000000000000F0F92 -:1090C0000000000000000F0F000000000000000082 -:1090D0000000000000000000000000000000000090 -:1090E0000000000000000000000000000000000080 -:1090F0000000000000000000000000000000000070 -:10910000000000000000000000000000000000005F -:10911000000000000000000000000000000000004F -:10912000000000000000000000000000000000003F -:10913000000000000000000000000000000000002F -:1091400005002A00054000A805002A00054000A8E7 -:10915000000000000000000000600006000C00009D -:1091600000000000000000000000000000000000FF -:1091700000000000000000000000000000000000EF -:1091800000000000000000000000000000000000DF -:109190000000000000000000000000610036C50D66 -:1091A000000000610006C00D00000000000000008B -:1091B00000000000000000000000000000000000AF -:1091C000000000000000000000000000000000009F -:1091D0000000000000000000000000000000FFFF91 -:1091E000000000000000000000000000000000007F -:1091F000000000000000000000000000000000006F -:10920000000000000000000000000000000000005E -:10921000000000000000000000000000000000004E -:10922000000000000000000000000000000000003E -:10923000000000000000000000000000000000002E -:10924000000000000000000000000000000000001E -:10925000000000000000000000000000000000000E -:1092600000000000000000000000000000000000FE -:1092700000000000000000000000000000000000EE -:1092800000000000000000000000000000000000DE -:1092900000000000000000000000000000000000CE -:1092A00000000000000000000000000000000000BE -:1092B00000000000000000000000000000000000AE -:1092C000000000000000000000000000000000009E -:1092D000000000000000000000000000000000008E -:1092E0000000F0F00000000000000000000000009E -:1092F000000000000000000000000000000000006E -:10930000000000000000000000000000000000005D -:10931000000000000000000000000000000000004D -:10932000000000000000000000000000000000003D -:10933000000000000000000000000000000000002D -:10934000000000000000000000000000000000001D -:10935000000000000000000000000000000000000D -:1093600000000000F0F0000000000000000000001D -:1093700000000000000000000000000000000000ED -:1093800000000000000000000000000000000000DD -:1093900000000000000000000000000000000000CD -:1093A00000000000000000000000000000000000BD -:1093B00000000000000000000000000000000000AD -:1093C000000000000000000000000000000000009D -:1093D000000000000000000000000000000000008D -:1093E000000000000000000000000000000000007D -:1093F000000000000000000000000000000000006D -:10940000000000020000000000000000000000005A -:109410000000000000000000000000040000000048 -:10942000000000000000000000000000000000003C -:10943000000000000000000000000000000000002C -:10944000000000000000000000000000000000001C -:10945000000000000000000000000000000000000C -:1094600000000000000000000000000000000000FC -:1094700000020000000000000000000000000000EA -:1094800000020000000000000000000000000000DA -:1094900000000000000000000000000200000000CA -:1094A000000000000000000000004000000000007C -:1094B00000000000000000000000000000000000AC -:1094C000000000000000000000000000000000009C -:1094D000000000000000000000000000000000008C -:1094E000000000000000000000000000000000007C -:1094F000000000000000000000000000000000006C -:10950000000000000000000000000000000000005B -:10951000000000000000000000000000000000004B -:10952000000000000000000000000000000000003B -:10953000000000000000000000000000000000002B -:10954000000000000000000000000000000000001B -:10955000000000000000000000000000000000000B -:1095600000000000000000000400000000000000F7 -:1095700000000000000000000000000000000000EB -:1095800000000000000000000000000000000000DB -:1095900000000000000000000000000000000000CB -:1095A00000000000000000000000040000000000B7 -:1095B00000000000000000000000000000000000AB -:1095C0000000000000000000020000000000000099 -:1095D000000000000000000000000000000000008B -:1095E000000000000000000000000000000000007B -:1095F000000000000000000000000000000000006B -:10960000000000000000000000000000000000005A -:10961000000000000000000000000000000000004A -:10962000000000000000000000000000000000003A -:10963000000000000000000000000000000000002A -:1096400000000000000000000000002000000000FA -:109650000300000000000000000000000000000007 -:1096600000000000000000000000000000000000FA -:1096700000000000000000000000000000000000EA -:1096800000000000000000000000000000000000DA -:1096900000000000000000000000000000000000CA -:1096A00000000000000000000000000000000000BA -:1096B00000000000000000000000000000000000AA -:1096C0000000000000000000000000000001000099 -:1096D000000000000000000000000000000000008A -:1096E000000000000000000000000000000000007A -:1096F000000000000000000000000000000000006A -:109700000000000000000000000000000000000059 -:109710000000000000000000000000000000000049 -:109720000000000000000000000000000000000039 -:10973000000000000000C000000000000000000069 -:109740000000000000000100000001000100000016 -:109750000000000000000000000000000000000009 -:1097600000000000000000000000000000000000F9 -:1097700000000000000000000000000000000000E9 -:1097800000000000000000000000000000000000D9 -:1097900000000000000000000000000000000000C9 -:1097A00000000000000000000000000000000000B9 -:1097B00000000000000000000000000000000000A9 -:1097C000000000000000000004000000040004008D -:1097D0000000000000000000000000000000000089 -:1097E0000000000000000000000000000000000079 -:1097F0000000000000000000000000000000000069 -:109800000000000000000000000000000000000058 -:109810000000000000000000000000000000000048 -:109820000000000000000000000000000400000034 -:109830000000000000000000000000000000000028 -:109840000000000000000000040090000000000084 -:1098500000200000000000000000000000000000E8 -:1098600000000084000008000000008400000000E8 -:10987000000000C0000000000084000000000000A4 -:1098800000000000000000000000000000000000D8 -:1098900000000000000000000000000000000000C8 -:1098A00000000000000000000000000000000000B8 -:1098B0000000000000000000000000880088000098 -:1098C0000004000400000000000080000000000010 -:1098D0000000000100000000000000000000000087 -:1098E0000000000000000000000000000002000076 -:1098F0000000000000020000000000000000000066 -:109900000000000200000000000000000000000055 -:109910000000000000000000000000000000000047 -:109920000000000000000000000000000000000037 -:109930000000000000000000010000000000000026 -:1099400000000000000000210000000000000000F6 -:109950000000000000000000000000000000000007 -:1099600000000000000000000000000000000000F7 -:1099700000000000000000000000000000000000E7 -:1099800000000000000000000000000000000000D7 -:1099900000000000000000000000000000000000C7 -:1099A00000000000000000000000000000000000B7 -:1099B0000000000000000000000020000000000087 -:1099C0000000000000000000000000000000000097 -:1099D0000000000000000000000000000000000087 -:1099E0000000000000000000000000000000000077 -:1099F0000000000000000000000000000000000067 -:109A00000000000000000000000000000000000056 -:109A10000000000000000000000000000000000046 -:109A20000000000000000000000000000000000036 -:109A30000000000000000000000000000001000025 -:109A40000000000000000000000000000000000016 -:109A50000000000000000000000000000000000006 -:109A600000000000000000000000000000000000F6 -:109A700000000000000000000000000000000000E6 -:109A800000000000000000000000000000000000D6 -:109A900000000000000000000000000000000000C6 -:109AA00000000000000000000000000000000000B6 -:109AB0000000000000000000000000000000001195 -:109AC000000000000009000000000000000000008D -:109AD0000000000000001100000000000000000075 -:109AE0000000000000000000000000000000000076 -:109AF0000000000000000000000000000000000066 -:109B00000000000000000000000000000000000055 -:109B10000000000000000000000000000000000045 -:109B20000000000000000000000000000000000035 -:109B30000000000000000000000000000000000025 -:109B40000000000000000000000000000000000015 -:109B50000000000000000000000080800000008085 -:109B600000000000000000000000000000000000F5 -:109B700000000000000000000000000000000000E5 -:109B800000000000000000000000000000000000D5 -:109B900000000000000000000000000000000000C5 -:109BA00000000000000000000000000000000000B5 -:109BB00000000000000000000000000000000000A5 -:109BC0000000000000000000000000000000000095 -:109BD0000000000000000000004000000220000023 -:109BE00000900000000000000000000000000000E5 -:109BF0000000000000000000000000000000000065 -:109C00000000000000000000000000000000000054 -:109C10000000000000000000000000000000000044 -:109C20000000000000000000000000000000000034 -:109C30000000000000000000000000000000000024 -:109C40000000000000000000000000000000000014 -:109C5000000000000000000088000000000000007C -:109C6000C000000000000000000000000000000034 -:109C700000000000000000000000000000000000E4 -:109C800000000000000000000000000000000000D4 -:109C900000000000000000000000000000000000C4 -:109CA00000000000000000000000000000000000B4 -:109CB00000000000000000000000000000000000A4 -:109CC0000000000000000000000000000000000094 -:109CD0000000000000000000000000000000000084 -:109CE00000008000000000000000000000000000F4 -:109CF0000000000000000000000000000000000064 -:109D00000000000000000000000000000000000053 -:109D10000000000000000000000000000000000043 -:109D20000000000000000000000000000000000033 -:109D30000000000000000000000000000000000023 -:109D40000000000000000000000000000000000013 -:109D50000000000000000000000000000000000003 -:109D60000000008000000000000000000000000073 -:109D700000000000000000000000000000000000E3 -:109D800000000000000000000000000000000000D3 -:109D900000000000000000000000000000000000C3 -:109DA00000000000000000000000000000000000B3 -:109DB00000000000000000000000000000000000A3 -:109DC0000000000000000000000000000000000093 -:109DD0000000000000000000000000000000000083 -:109DE0000000000000020000000000000000000071 -:109DF0000000000000000000000000000000000063 -:109E00000000000000000000000000000000000052 -:109E10000000000000000000000000000000000042 -:109E20000000000000000000000000000000000032 -:109E30000000000000000000000000000000000022 -:109E4000000000000000000000000000410000E0F1 -:109E50000000000000000000000000000082000080 -:109E600007000000000000000700004100000000A3 -:109E700000000000000000000000000000000000E2 -:109E800000000000000000000000000000000000D2 -:109E900000000000000000000000000000000000C2 -:109EA00000000000000000000000000000000000B2 -:109EB00000000000000000000000000000000000A2 -:109EC0000000000000000000000000000000000092 -:109ED0000000000000000000000000000000000082 -:109EE0000000000000000000000000000000000072 -:109EF0000000000000000000000000000000000062 -:109F00000000000000000000000000000000000051 -:109F10000000000000000000000000000000000041 -:109F20000000000000000000000000000000000031 -:109F30000000000000000000000000000000000021 -:109F40000000000000000000000000000000000011 -:109F50000000000000000000000000000000000001 -:109F600000000000000000000000000000000000F1 -:109F700000000000000000000000000000000000E1 -:109F800000000000000000000000000000000000D1 -:109F900000000000000000000000000000000000C1 -:109FA00000000000000000000000000000000000B1 -:109FB00000000000000000000000000000000000A1 -:109FC0000000000000000000000000000000000091 -:109FD0000000000000000000000000000000000081 -:109FE00000000000000000000000000000005050D1 -:109FF00050500000000000000000000000000000C1 -:10A000000000000000000000000000000000000050 -:10A010000000000000000000000000000000000040 -:10A020000000000000000000000000000000000030 -:10A030000000000000000000000000000000000020 -:10A040000000000000000000000000000000000010 -:10A050000000000000000000000000000000000000 -:10A0600000000000000000000000000000000000F0 -:10A0700050505050000000000000000000000000A0 -:10A0800000000000000000000000000000000000D0 -:10A0900000000000000000000000000000000000C0 -:10A0A00000000000000000000000000000000000B0 -:10A0B00000000000000000000000000000000000A0 -:10A0C0000000000000000000000000000000000090 -:10A0D00000000000000000610002800D0000000090 -:10A0E00000000000000000000020050000A00000AB -:10A0F0000A00050000000000000000000000000051 -:10A10000000000000000000000000000000000004F -:10A11000000000000000000000000000000000003F -:10A12000000000000000000000000000000000002F -:10A13000000000000000000000000000000000001F -:10A14000000000000000000000000000000000000F -:10A1500000000000000000000000000000000000FF -:10A1600000000000000000000000000000000000EF -:10A1700000000000000000000000000000000000DF -:10A1800000000000000000000000000000000000CF -:10A1900000000000000000000000000000000000BF -:10A1A00000000000000000000000000000000000AF -:10A1B000000000000000000000000000000000009F -:10A1C000000000000000000000000000000000008F -:10A1D000000000000000000000000000000000007F -:10A1E000000000000000000000000000000000006F -:10A1F000000000000000000000000000000000005F -:10A20000000000000000000000000000000000004E -:10A21000000000000000000000000000000000003E -:10A22000000000000000000000000000000000002E -:10A23000000000000000000000000000000000001E -:10A24000000000000000000000000000000000000E -:10A25000000000000000000000000000FFFF3C3C88 -:10A2600000000000000000000000000000000000EE -:10A2700000000000000000000000000000000000DE -:10A2800000000000000000000000000000000000CE -:10A2900000000000000000000000000000000000BE -:10A2A00000000000000000000000000000000000AE -:10A2B000000000000000000000000000000000009E -:10A2C000000000000000000000000000000000008E -:10A2D0000000000000000000000000000000FFFF80 -:10A2E0003C3C0000000000000000000000000000F6 -:10A2F000000000000000000000000000000000005E -:10A30000000000000000000000000000000000004D -:10A31000000000000000000000000002000000003B -:10A32000000000000002000000000000000000002B -:10A330000000000004000000000000000000000217 -:10A34000000000000000000000000000000000000D -:10A3500000000000000020000000000000000000DD -:10A3600000000000000000000000000000000000ED -:10A3700000000000000020000400000000000000B9 -:10A3800000000000000000000002000000000000CB -:10A3900000000000000000000000000000000000BD -:10A3A00000000000000000000000000000020002A9 -:10A3B0000000000000000000000000000002000299 -:10A3C000000000000000000000000000000000008D -:10A3D000000000020000000000000000000000007B -:10A3E000000000000000000000000000000000006D -:10A3F000000000000002000000000000000000005B -:10A40000000000000000000000000000000000004C -:10A41000000000000000000000000000000000003C -:10A42000000000000000000000000000000000002C -:10A43000000000000000000000000000000000001C -:10A44000000000000100000000000000000000000B -:10A4500000000000000000000000000000000000FC -:10A4600000000400000000000000000000000000E8 -:10A4700000000000000000000000000000000000DC -:10A4800000000000000000000000000004000000C8 -:10A4900000000000040000000000000004000000B4 -:10A4A00000000000040000000000000000000000A8 -:10A4B0000000000004000000000000000000000098 -:10A4C000000000000000100000000000000000007C -:10A4D0000000000000000000000000000000040078 -:10A4E00000000000800000000000000000000000EC -:10A4F0000000000000000400000000000000000058 -:10A50000000000000000000000000000000000004B -:10A51000000000000000000000000000000000003B -:10A52000000000000000000000000000000000002B -:10A53000000000000000000000000000000000001B -:10A54000000000000000000000000000000000000B -:10A5500000000000000000000000000000000000FB -:10A560000000000000000000000088000000000063 -:10A57000000000000000000040000000000000009B -:10A5800000000000000000000000000000000000CB -:10A5900000000000000000000000000000000000BB -:10A5A00000000000000000000000000000000000AB -:10A5B000000000000000000000000000000000009B -:10A5C000000000000000000000000000000000008B -:10A5D000000000000000000000000000000000007B -:10A5E000000000000000000000000000000000006B -:10A5F000000000000000000000000000000000005B -:10A60000000000000000000000000000000000004A -:10A61000000000000000000000000000000000003A -:10A62000000000000000000000000000000000002A -:10A63000000000000000000000000000000000001A -:10A64000000000000000000000000000000000000A -:10A650000100008000000000000000000000000079 -:10A6600000000000000000000000000000000000EA -:10A6700000000000000000000000000000000000DA -:10A6800000000000000000000000000000000000CA -:10A6900000000000000000000000000000000000BA -:10A6A00000000000000000000000000000000000AA -:10A6B000000000000000000000000000000000009A -:10A6C000000000000000000000000000000000008A -:10A6D0000000200000040000000000000000000056 -:10A6E000000000000000000000000000000000006A -:10A6F000000000000000000000000000000000005A -:10A700000000000000000000000000000000000049 -:10A710000000000000000000000000000000000039 -:10A720000000000000000000000000000000000029 -:10A730000000000000000000000000000000000019 -:10A740000000000000000000000000009000000079 -:10A7500000000000000000000000000000000000F9 -:10A7600000000000000000000000000000000000E9 -:10A7700000000000000000000000000000000000D9 -:10A7800000000000000000000000000000000000C9 -:10A7900000000000000000000000000000000000B9 -:10A7A00000000000000000000000000000000000A9 -:10A7B0000000000000000000000000000000000099 -:10A7C0000000000000000000000000000000000089 -:10A7D0000000000000000000000000000000000079 -:10A7E0000000000000000000000000000000000069 -:10A7F0000000002000000090009000000000000019 -:10A800000000000000000090008400000000000034 -:10A810000000000000000000000000000000000038 -:10A820000000000000000000000000000000000028 -:10A830000000000000000000000000000000000018 -:10A840000000000000000000000000000000000008 -:10A8500000000000000000000000000000000000F8 -:10A8600000000000000000000000000000000000E8 -:10A8700000000000000000000000000900000000CF -:10A8800000000000000000000000000000000000C8 -:10A8900000000002000000000000000000000000B6 -:10A8A00000000000000000000000000000000000A8 -:10A8B0000000000000000000000000000000000098 -:10A8C0000000000000000000000000000000000088 -:10A8D0000000000000000000000000000000000078 -:10A8E0000000000000000000000000000000000068 -:10A8F0000000000005000000000000000000000053 -:10A900000000000000000000000000000000000047 -:10A910000000000000000000000000000000000037 -:10A920000000000000000000000000000000000027 -:10A930000000000000000000000000000000000017 -:10A940000000000000000000000000000000000007 -:10A9500000000000000000000100000000000000F6 -:10A9600000000000000000000000000000000000E7 -:10A9700000000000000000000000000000000000D7 -:10A9800000000000000000000000000000000000C7 -:10A9900000000000000000000000000000000000B7 -:10A9A00000000000000000000000000000000000A7 -:10A9B0000000000000000000000000000000000097 -:10A9C0000000000000000000000000000000000087 -:10A9D0000000000000000000000011002100000045 -:10A9E0000000000000000000000000000000000067 -:10A9F0000000000000000000000000000000000057 -:10AA00000000000000000000000000000000000046 -:10AA10000000000000000000000000000000000036 -:10AA20000000000000000000000000000000000026 -:10AA30000000000000000000000000000000000016 -:10AA40000000000000000000000000000000000006 -:10AA500000000000000000000000000000410900AC -:10AA60000003008000000000000000000000000063 -:10AA70000000000000000000000000800000000056 -:10AA800000000000000000000000000000000000C6 -:10AA900000000000000000000000000000000000B6 -:10AAA00000000000000000000000000000000000A6 -:10AAB0000000000000000000000000000000000096 -:10AAC0000000000000000000000000000000000086 -:10AAD0000000000000000000000000000000000175 -:10AAE00001000000008800000000000000000000DD -:10AAF000000000000000000000000000000800004E -:10AB00000000000000000000000000000000000045 -:10AB10000000000000000000000000000000000035 -:10AB20000000000000000000000000000000000025 -:10AB30000000000000000000000000000000000015 -:10AB40000000000000000000000000000000000005 -:10AB500000000000000000000000000000000000F5 -:10AB6000000088000000010000000000000000005C -:10AB700000000000000000000000000000000000D5 -:10AB800000000000000000000000000000000000C5 -:10AB900000000000000000000000000000000000B5 -:10ABA00000000000000000000000000000000000A5 -:10ABB0000000000000000000000000000000000095 -:10ABC0000000000000000000000000000000000085 -:10ABD0000000000000000000000000000000000075 -:10ABE0000000000000000000410000000000000024 -:10ABF0000000000000000000000000000000000055 -:10AC00000000000000000000000000000000000044 -:10AC10000000000000000000000000000000000034 -:10AC20000000000000000000000000000000000024 -:10AC30000000000000000000000000000000000014 -:10AC40000000000000000000000000000000000004 -:10AC500000000000000000000000000000000000F4 -:10AC600000000000000020110000000000000000B3 -:10AC700000000000000000000000000000000000D4 -:10AC800000000000000000000000000000000000C4 -:10AC900000000000000000000000000000000000B4 -:10ACA00000000000000000000000000000000000A4 -:10ACB0000000000000000000000000000000000094 -:10ACC0000000000000000000000000000000000084 -:10ACD0000000000000000000000000000000000074 -:10ACE0000000000000000000000100000000000063 -:10ACF0000000000000000000000000000000000054 -:10AD00000000000000000000000000000000000043 -:10AD10000000000000000000000000000000000033 -:10AD20000000000000000000000000000000000023 -:10AD30000000000000000000000000000000000013 -:10AD40000000000000000000000000000000000003 -:10AD500000000000000000000000000000000000F3 -:10AD60000000000000000000000000E00000814141 -:10AD700000000000000000000000000000000000D3 -:10AD800000000000070000000000000000000000BC -:10AD900000000000000000000000000000000000B3 -:10ADA00000000000000000000000000000000000A3 -:10ADB0000000000000000000000000000000000093 -:10ADC0000000000000000000000000000000000083 -:10ADD0000000000000000000000000000000000073 -:10ADE0000000000000000000000000000000000063 -:10ADF0000000000000000000000000000000000053 -:10AE00000000000000000000000000000000000042 -:10AE10000000000000000000000000000000000032 -:10AE20000000000000000000000000000000000022 -:10AE30000000000000000000000000000000000012 -:10AE40000000000000000000000000000000000002 -:10AE500000000000000000000000000000000000F2 -:10AE600000000000000000000000000000000000E2 -:10AE700000000000000000000000000000000000D2 -:10AE800000000000000000000000000000000000C2 -:10AE900000000000000000000000000000000000B2 -:10AEA00000000000000000000000000000000000A2 -:10AEB0000000000000000000000000000000000092 -:10AEC0000000000000000000000000000000000082 -:10AED0000000000000000000000000000000000072 -:10AEE0000000000000000000000000000000000062 -:10AEF0000000000000000000000000000000000052 -:10AF00000000000000000000000000000000000041 -:10AF10000000000000000000000000000000000031 -:10AF20000000000000000000000000000000000021 -:10AF30000000000000000000000000000000000011 -:10AF40000000000000000000000000000000000001 -:10AF500000000000000000000000000000000000F1 -:10AF600000000000000000000000000000000000E1 -:10AF700000000000000000000000000000000000D1 -:10AF800000000000000000000000000000000000C1 -:10AF900000000000000000000000000000000000B1 -:10AFA00000000000000000000000000000000000A1 -:10AFB0000000000000000000000000000000000091 -:10AFC0000000000000000000000000000000000081 -:10AFD0000000000000000000000000000000000071 -:10AFE0000000000000000000000000000000000061 -:10AFF0000000000000000000000000000000000051 -:10B000000000000000000000000000000000000040 -:10B010000000000000000000000000000000000030 -:10B020000000000000000000000000000000000020 -:10B030000000000000000000000000000000000010 -:10B040000000000000000000000000000000000000 -:10B0500000000000000000000000000000000000F0 -:10B0600000000000000000000000000000000000E0 -:10B070000000000000400006000C0000000000007E -:10B0800000000000000000000000000000000000C0 -:10B09000000000A000000000000000000000000010 -:10B0A00000000000000000000000000000000000A0 -:10B0B0000000000000000000000000000000000090 -:10B0C0000000000000000000000000000000000080 -:10B0D0000000000000000000000000000000000070 -:10B0E0000000000000000000000000000000000060 -:10B0F0000000000000000000FF00FFFF0000000053 -:10B10000000000000000000000000000000000003F -:10B11000000000000000000000000000000000002F -:10B12000000000000000000000000000000000001F -:10B13000000000000000000000000000000000000F -:10B1400000000000000000000000000000000000FF -:10B1500000000000000000000000000000000000EF -:10B1600000000000000000000000000000000000DF -:10B1700000000000000000000000FF0000000000D0 -:10B1800000000000000000000000000000000000BF -:10B1900000000000000000000000000000000000AF -:10B1A000000000000000000000000000000000009F -:10B1B000000000000000000000000000000000008F -:10B1C000000000000000000000000000000000007F -:10B1D000000000000000000000000000000000006F -:10B1E000000000000000000000000000000000005F -:10B1F0000000000000000000000000000000F0F06F -:10B20000000000000000000000000000000000003E -:10B21000000000000000000000000000000000002E -:10B22000000000000000000000000000000000001E -:10B23000000000000000000000000000000000000E -:10B2400000000000000000000000000000000000FE -:10B2500000000000000000000000000000000000EE -:10B2600000000000000000000000000000000000DE -:10B2700000000000000000000000000000000000CE -:10B28000F0F00000000000000000000000000000DE -:10B2900000000000000000000000000000000000AE -:10B2A000000000000000000000000000000000009E -:10B2B000000000000000000000000000000000008E -:10B2C000000020000000000020002000000000001E -:10B2D000000020000000000000000000000000004E -:10B2E000000020000000000000002000040000001A -:10B2F000000000000000000000000000000300004B -:10B30000000000002080000000000000000020007D -:10B31000000000000000000000000000000000002D -:10B320000000000020200400048000000000000055 -:10B33000000000000000000000000000000000000D -:10B3400000000000000000000000000000000000FD -:10B3500000000000000000000000000000000000ED -:10B3600000000000000000000000000000000000DD -:10B3700000000000000000000000000000000000CD -:10B3800000000000000000100000000000000000AD -:10B39000000000004000000000000000000000006D -:10B3A000000000000000000180008020000000007C -:10B3B000000000000000000000000000000000008D -:10B3C0000400000000000000000000000000000079 -:10B3D000000000000000000000000000000000006D -:10B3E000000000000000000000000000000000005D -:10B3F000000000000000000000000000000000004D -:10B40000000000000000000000000000000000003C -:10B41000000010000000000000000000000000001C -:10B420000000040000200080000000000000000078 -:10B4300000000400000000000000200000000000E8 -:10B4400000000000000000000000000000000000FC -:10B4500000080000000000000000000000000000E4 -:10B4600000000000000000000000000000000000DC -:10B4700000080000000000000000000000000000C4 -:10B4800000000000000000000000000000000000BC -:10B490000000000880000000000000000000000024 -:10B4A00000000000800000010020000000000000FB -:10B4B0000000000800000000000000008000000004 -:10B4C000000000000000000000000000000000007C -:10B4D000000000000000000000000000000000006C -:10B4E000000000000000000000000000000000005C -:10B4F000000000000000000000000000000000004C -:10B50000000000000000000000000000000000003B -:10B51000000000000000000000000000010000002A -:10B52000000000000000000000000000000000001B -:10B53000000004009000000000000000000000096E -:10B5400000000000000000000000000000000000FB -:10B5500000000000000000000000000000000000EB -:10B5600000000000000000000000000000000000DB -:10B5700000000000000000000000000000000000CB -:10B5800000000300000000000000000000000000B8 -:10B59000000000000000000000000000000020008B -:10B5A000000000000000000000000000000000009B -:10B5B000000000008000000000000000000000000B -:10B5C000000000000000000000000000000000007B -:10B5D000000000000000000000000000000000006B -:10B5E000000000000000000000400000000000001B -:10B5F0000000000008000000000000000000000043 -:10B60000000000000000000000000000000000003A -:10B610000000000000000000000000000000010029 -:10B620000000000000000000000000000000840096 -:10B630000000000000000000010000000000000009 -:10B64000000000000000A00000000000000000005A -:10B6500000000000000000000000000000000000EA -:10B6600000000000000000000000000000000000DA -:10B6700000000000000000000000000000000000CA -:10B6800000000000000000000000000000000000BA -:10B6900000080000000000000000000000000000A2 -:10B6A000200000000000000000000000000000007A -:10B6B0000000000000000000000004000000000086 -:10B6C0000000000000000000000041000000000039 -:10B6D000000000000000000000000000000000006A -:10B6E000000000000000000000000000000000005A -:10B6F000000000000000000000000000000000004A -:10B700000000000000000000000000000000000039 -:10B710000000000000000000000000000800000021 -:10B720000000000000000000000000000000050014 -:10B73000000000200000000200000020A00008001F -:10B740000000C000000000000000A0000000000099 -:10B7500000000000000000000000000000000000E9 -:10B7600000000000000000000000000000000000D9 -:10B7700000000000000000000000000000000000C9 -:10B7800000000000000000000000000000C00000F9 -:10B790000000000000840000000000000000000025 -:10B7A0000000000000000000000000000000000099 -:10B7B00084000000050100000000000000011100ED -:10B7C0000000000003000000000000000000000076 -:10B7D0000000000000000000000000000000000069 -:10B7E0000000000000000000000000000000000059 -:10B7F0000000000000000000000000000000000049 -:10B80000000000000000080000000000000001002F -:10B810000000000000000000000000000000000226 -:10B82000000000000000000000000000000000090F -:10B8300000000000000000000400002100000000E3 -:10B84000000000000000C000000000000000000038 -:10B8500000000000000000000000000000000000E8 -:10B8600000000000000000000000000000000000D8 -:10B8700000000000000000000000000000000000C8 -:10B8800000000000000000000000000000000000B8 -:10B8900004000000000000000000000000000000A4 -:10B8A0000000000000000000000000000000000098 -:10B8B0000000000000000000000080000000000008 -:10B8C0000000000000000000000000000000000078 -:10B8D0000000000000000000000000000000000068 -:10B8E0000000000000000000000000000000000058 -:10B8F0000000000000000000000000000000000048 -:10B900000000000000000000000000000000000037 -:10B910000000000000000000000000000000000027 -:10B920000000000000000100000000000000000016 -:10B930000000000000000000900000000000000077 -:10B940009000000000000000000000000000010165 -:10B9500000000000000000000000000000000000E7 -:10B9600000000000000000000000000000000000D7 -:10B9700000000000000000000000000000000000C7 -:10B9800000000000000000000000000000000000B7 -:10B9900000000000000000000000000000000000A7 -:10B9A0000000000000000000110021000000000065 -:10B9B00000000000000000001100800000000000F6 -:10B9C00011008000000000000000000000000000E6 -:10B9D000110800210000000000000000000000002D -:10B9E0000000000000000000000000000000000057 -:10B9F0000000000000000000000000000000000047 -:10BA00000000000000000000000000000000000036 -:10BA100000000000000000800000000000000000A6 -:10BA200000000000000000000000004109000009C3 -:10BA30000080000000000000000080000080001175 -:10BA40000080000000800000008000000000000076 -:10BA500000000000000000000000000000000000E6 -:10BA600000000000000000000000000000000000D6 -:10BA700000000000000000000000000000000000C6 -:10BA800000000000000000000000000000000000B6 -:10BA900000000000000000000004000000000000A2 -:10BAA0000000000000000000000000000001010094 -:10BAB00000000088000000000000000008000020D6 -:10BAC00000000090000000200000000200000000C4 -:10BAD0000000000000000000000000000000000066 -:10BAE0000000000000000000000000000000000056 -:10BAF0000000000000000000000000000000000046 -:10BB00000000000000000000000000000000000035 -:10BB10000000000000000000000000000000000025 -:10BB20000000000000000000000000000000000015 -:10BB3000880000000100000000000000000001007B -:10BB40000000C000000001000000880000000000AC -:10BB500000000000000000000000000000000000E5 -:10BB600000000000000000000000000000000000D5 -:10BB700000000000000000000000000000000000C5 -:10BB800000000000000000000000000000000000B5 -:10BB900000000000000000000000000000000000A5 -:10BBA0000000000000000000000000000000000095 -:10BBB0000000000000004100000000000000000044 -:10BBC0004100000080000000410000000000000073 -:10BBD0000000000000000000000000000000000065 -:10BBE0000000000000000000000000000000000055 -:10BBF0000000000000000000000000000000000045 -:10BC00000000000000000000000000000000000034 -:10BC10000000000000000000000000000000000024 -:10BC20000000000000000000000000000000000014 -:10BC300000000000031100000000000000000000F0 -:10BC40000000000000800000000000100000000064 -:10BC500000000000000000000000000000000000E4 -:10BC600000000000000000000000000000000000D4 -:10BC700000000000000000000000000000000000C4 -:10BC800000000000000000000000000000000000B4 -:10BC900000000000000000000000000000000000A4 -:10BCA0000000000000000020000000000000000074 -:10BCB0000000000000000001000000000000000083 -:10BCC0000000000000000040000000000000000034 -:10BCD0000000000000000000000000000000000064 -:10BCE0000000000000000000000000000000000054 -:10BCF0000000000000000000000000000000000044 -:10BD00000000000000000000000000000000000033 -:10BD100000000000000000000000000000820000A1 -:10BD2000070000000000000000000000000000000C -:10BD3000000000000000000000E000008141000061 -:10BD40000000000000000011000007008241008197 -:10BD500000000700820000000000000000006000FA -:10BD600000E00000000000000000000000000000F3 -:10BD700000000000000000000000000000000000C3 -:10BD800000000000000000000000000000000000B3 -:10BD900000000000000000000000000000000000A3 -:10BDA0000000000000000000000000000000000093 -:10BDB0000000000000000000000000000000000083 -:10BDC0000000000000000000000000000000000073 -:10BDD0000000000000000000000000000000000063 -:10BDE0000000000000000000000000000000000053 -:10BDF0000000000000000000000000000000000043 -:10BE00000000000000000000000000000000000032 -:10BE10000000000000000000000000000000000022 -:10BE20000000000000000000000000000000000012 -:10BE30000000000000000000000000000000000002 -:10BE400000000000000000000000000000000000F2 -:10BE500000000000000000000000000000000000E2 -:10BE600000000000000000000000000000000000D2 -:10BE700000000000000000000000000000000000C2 -:10BE800000000000000000000000000000000000B2 -:10BE900000000000000000000000000000000000A2 -:10BEA0000000000000000000000000000000000092 -:10BEB000AAAAAAAA000000000000000000000000DA -:10BEC0000000000000000000000000000000000072 -:10BED000414141410000000000000000000000005E -:10BEE0000000000000000000000000000000000052 -:10BEF0000000000000000000000000000000000042 -:10BF00000000000000000000000000000000000031 -:10BF10000000000000000000000000000000000021 -:10BF20000000000000000000000000000000000011 -:10BF30000000AAAAAAAA0000000000000000000059 -:10BF400000000000000000000000000000000000F1 -:10BF500000004141414100000000000000000000DD -:10BF600000000000000000000000000000000000D1 -:10BF700000000000000000000000000000000000C1 -:10BF800000000000000000000000000000000000B1 -:10BF900000000000000000000000000000000000A1 -:10BFA00000000000000000000020000001A00000D0 -:10BFB0000000000000000000000000000000000081 -:10BFC00000400006000C000000000000000000001F -:10BFD00005180A300500050005180A30050005A0FF -:10BFE000000000000000000000610002C00D000021 -:10BFF0000000000000000000000000000000000041 -:10C000000000000000000000000000000000000030 -:10C010000000000000000000000000000000000020 -:10C020000000000000000000000000000000000010 -:10C030000000000000000000000000000000000000 -:10C0400000000000FF00FFFF0000000000000000F3 -:10C0500000000000000000000000000000000000E0 -:10C0600000000000000000000000000000000000D0 -:10C0700000000000000000000000000000000000C0 -:10C0800000000000000000000000000000000000B0 -:10C0900000000000000000000000000000000000A0 -:10C0A0000000000000000000000000000000000090 -:10C0B0000000000000000000000000000000000080 -:10C0C000000000000000FF00000000000000000071 -:10C0D0000000000000000000000000000000000060 -:10C0E0000000000000000000000000000000000050 -:10C0F0000000000000000000000000000000000040 -:10C10000000000000000000000000000000000002F -:10C11000000000000000000000000000000000001F -:10C12000000000000000000000000000000000000F +:10C1000000000000C000000000000000000000006F +:10C1100020000000000000000000000000000000FF +:10C1200000000000200000000000000000000000EF :10C1300000000000000000000000000000000000FF -:10C1400000000000000000000000F0F0000000000F -:10C1500000000000000000000000000000000000DF -:10C160000000000000000000000000000000FFFFD1 -:10C17000FF000000000000000000000000000000C0 -:10C1800000000000000000000000000000000000AF -:10C19000000000000000000000000000000000009F -:10C1A000000000000000000000000000000000008F -:10C1B000000000000000000000000000000000007F -:10C1C000000000000000000000000000F0F000008F -:10C1D000000000000000000000000000000000005F -:10C1E000000000000000000000000000000000004F -:10C1F000FFFFFF0000000000000000000000000042 -:10C2000000000000000020000000000020000000EE -:10C2100004002000200000000400000000000000D6 -:10C2200000000000000020000000000020000000CE -:10C2300000002000000000000001000000000000DD -:10C2400000000000000000002000000000002000AE -:10C2500000000000200000000000000000000000BE -:10C26000000000000000000020000000000020008E -:10C27000000000002000000000000000000000009E -:10C2800000000000000000000000000000000000AE -:10C29000000000000000000000000000000000009E -:10C2A000000000000000000000000000000000008E -:10C2B000000000000000000000020000000000007C -:10C2C000000000000000000000000000000000006E -:10C2D000000000000000000000000000000000005E -:10C2E000000000000000000000000000000000004E -:10C2F000000000000000000000000000000000003E -:10C3000000000000000000000000000000000040ED -:10C31000000000000000000000000000000000001D -:10C320000000000004000000000000000400000005 -:10C3300000000000000000000000200000000000DD -:10C3400000000000000000000000000000000400E9 -:10C3500000000000000000000000000000000000DD -:10C3600000000000000004000000000000000000C9 -:10C3700000000200020000000000000000000000B9 -:10C3800000000000000000000000000000000000AD -:10C39000000000000000000000000000000000009D -:10C3A000000000000000000000000000000000008D -:10C3B00000000000000000000000000080000000FD -:10C3C000000000000000000000000000000000006D -:10C3D000000000000000000000000000000000005D -:10C3E000000000000000000000000000000000004D -:10C3F00000000000000000000000400000000000FD -:10C40000000000000000000000000000000000002C -:10C41000000000000000000000000000000000001C -:10C42000000000000000000000000000000000000C -:10C4300000000000000000000000000000000000FC -:10C4400000000000000000000000000000000000EC -:10C4500000000000000000000000000000000000DC -:10C4600000000000000000000000000000000000CC -:10C4700000000400000000000000000000000000B8 -:10C4800000000000000000000000000000000000AC -:10C49000000000000000000000000000000000009C -:10C4A000000000000000000000000000000000008C -:10C4B0000000000000000000000000000000080074 -:10C4C000000000000000000000000000000000006C -:10C4D000000000000000000000000000000000005C -:10C4E0000500000000000000000000000000000047 -:10C4F00000000000008400000000000000000000B8 -:10C50000000000000000000000000000000000002B -:10C51000000000000000000000000000000000001B -:10C52000000000000000000000000000000000000B -:10C5300000000000000000000000000000000000FB -:10C5400000000000000000000000000000000000EB -:10C5500000000000000000000000000000000000DB -:10C5600000000000000000000000000000000000CB -:10C5700000000000000000000000000000000000BB -:10C5800000000000000000000000000000000000AB -:10C59000000000000000000000000000000000009B -:10C5A000000000000000000000000000000000008B -:10C5B000000000000000000000000000000000007B -:10C5C0000000000000000000080000000000000063 -:10C5D000000000000000000000000000000000005B -:10C5E000000000000000000000000000000000004B -:10C5F000000000000000000000000000000000003B -:10C60000000000000000000000000000000000002A -:10C61000000000000000000000000000000000001A -:10C62000000000000000000000000000000000000A -:10C6300000000000000000000000000000000000FA -:10C6400008000000000000000000000000000000E2 -:10C6500000000000000000000000000000000000DA -:10C6600000000000000000000000000000000000CA -:10C6700000000000000000000000000000000000BA -:10C68000000000000000000090000000000000001A -:10C69000000000000000000000000000000000009A -:10C6A000000000000000000000000000000000008A -:10C6B000000000000000000000000000000000007A -:10C6C00000000000000000C00000000000000000AA -:10C6D000000000000000000000000000000000005A -:10C6E00000840000000000000000000000000000C6 -:10C6F00000000000000000000000008400000000B6 -:10C7000000000000000000A0000000000000000089 -:10C710000000000000000000000000000000000019 -:10C720000000000000000000000000000000000009 -:10C7300000000000000000000000000000000000F9 -:10C7400000000000000000000000000000000000E9 -:10C7500000000000000000000000000000000000D9 -:10C7600000000000000000000000000200000000C7 -:10C7700000000000000000000000000000000000B9 -:10C780000000000000020021000000000000000086 -:10C790000000000000000000000000000000000099 -:10C7A0000000000000000000000000000000000089 -:10C7B0000000000000000000000000000000000079 -:10C7C0000000000000000000000000000000000069 -:10C7D00000200000000041000000000000000000F8 -:10C7E0000000000000000000000000000000050044 -:10C7F0000000000000000000000000000000000039 -:10C800000000000000000000000000000000000028 -:10C810000000000000000000000000000000000018 -:10C820000000000000000000000000000000000008 -:10C8300000000000000000000000000000000000F8 -:10C8400000000000000000000000000000000000E8 -:10C8500000000000000000000000000000000000D8 -:10C8600000000000000000000000000000000000C8 -:10C8700000000000000000000000000000000000B8 -:10C8800000000000000000000000000000000000A8 -:10C890000000000000000000000000000000000098 -:10C8A0000000000000000000000000000000000088 -:10C8B0000000000000000000000000000000000078 -:10C8C0000000000000000000000000000000000068 -:10C8D0000000000000000000000000000000000058 -:10C8E0000000000000000000000000000000000048 -:10C8F0000000000000000000000000000000000038 -:10C900000000000000000000000000000000000027 -:10C910000000000000000000000000000000000017 -:10C920000000000000000000000000000000000007 -:10C9300000000000000000000000000000000000F7 -:10C9400000000000000000000000000000000000E7 -:10C9500000000000000000000000000000000000D7 -:10C9600000000000000000000000000000000000C7 -:10C9700000000000000000000000000000000000B7 -:10C9800000000000000000000000000000000000A7 -:10C990000000000000000000000000000000000097 -:10C9A0000000000000000000000000000000000087 -:10C9B0000000000000000000000000000000000077 -:10C9C0000000000000000000000000000000000067 -:10C9D0000000000000000000000000000000000057 -:10C9E0000000000000000000000000000000000047 -:10C9F0000000000000000000000000000000000037 -:10CA00000000000000000000000000000000000026 -:10CA10000000000000000000000000000000000016 -:10CA20000000000000000000000000000000000006 -:10CA300000000000000000000000000000000000F6 -:10CA400000000000000000000000000000000000E6 -:10CA500000000000000100000000000000000000D5 -:10CA600000000000000000000000000000000000C6 -:10CA700000000000000000000000000000000000B6 -:10CA800000000000000000000000000000000000A6 -:10CA90000000000000000000000000000000000096 -:10CAA0000000000000000000000000000000000086 -:10CAB0000000000000000000000000000000000076 -:10CAC0000000000000000000000000000000000066 -:10CAD0000000000000100020000000000000000026 -:10CAE0000000000000000000000000000000000046 -:10CAF0000000000000000000000000000000000036 -:10CB00000000000000000000000000000000000025 -:10CB10000000000000000000000000000000000015 -:10CB20000000000000000000000000000000000005 -:10CB300000000000000000000000000000000000F5 -:10CB400000000000000000000000000000000000E5 -:10CB500000000000000000000000000000000000D5 -:10CB600000000000000000000000000000000000C5 -:10CB700000000000000000000000000000000000B5 -:10CB800000000000000000000000000000000000A5 -:10CB90000000000000000000000000000000000095 -:10CBA0000000000000000000000000000000000085 -:10CBB0000000000000000000000000000000000075 -:10CBC0000000000000000000000000000000000065 -:10CBD0000000000000000000000000000000000055 -:10CBE0000000000000000000000000000000000045 -:10CBF0000000000000000000000000000000000035 -:10CC00000000000000000000000000000000000024 -:10CC10000000000000000000000000000000000014 -:10CC20000000000000000000000000000000000004 -:10CC300000000000000000000000000000000000F4 -:10CC400000000000000000000000000000000000E4 -:10CC50000000000000000000000000E000000000F4 -:10CC600000000000000000000000000000000000C4 -:10CC700000000000000000000000000000000000B4 -:10CC800000000000000000000000000000000000A4 -:10CC90000000000000000000000000000000000094 -:10CCA0000000000000000000000000000000000084 -:10CCB0000000000000000000000000000000000074 -:10CCC0000000000000000000000000000000000064 -:10CCD0000000000000000000000000000000000054 -:10CCE0000000000000000000000000000000000044 -:10CCF0000000000000000000000000000000000034 -:10CD00000000000000000000000000000000000023 -:10CD10000000000000000000000000000000000013 -:10CD20000000000000000000000000000000000003 -:10CD300000000000000000000000000000000000F3 -:10CD400000000000000000000000000000000000E3 -:10CD500000000000000000000000000000000000D3 -:10CD600000000000000000000000000000000000C3 -:10CD700000000000000000000000000000000000B3 -:10CD800000000000000000000000000000000000A3 -:10CD90000000000000000000000000000000000093 -:10CDA0000000000000000000000000000000000083 -:10CDB0000000000000000000000000000000000073 -:10CDC0000000000000000000000000000000000063 -:10CDD0000000000000000000000000000000000053 -:10CDE0000000000000000000000000000000000043 -:10CDF0000000000000000000000000000000000033 -:10CE00000000000000000000000000000000000022 -:10CE10000000000000000000000000000000000012 -:10CE20000000000000000000000000000000000002 -:10CE300000000000000000000000000000000000F2 -:10CE400000000000000000000000000000000000E2 -:10CE500000000000000000000000000000000000D2 -:10CE600000000000000000000000000000000000C2 -:10CE700000000000000000000000000000000000B2 -:10CE800000000000000000000000000000000000A2 -:10CE90000000000000000000000000000000000092 -:10CEA0000000000000000000000000000000000082 -:10CEB0000000000000000000000000000000000072 -:10CEC0000000000000000000000000000000000062 -:10CED0000000000000000000000000000000000052 -:10CEE0000000000000000000000000000000000042 -:10CEF0000000000000000000000000000000000032 -:10CF00000000000000000000000000000000000021 -:10CF10000000000000000000000000000000000011 -:10CF20000000000000000000000000000000000001 -:10CF300000000000000000000000000000000000F1 -:10CF400000000000000000000000000000000000E1 -:10CF500000000000000000000000000000000000D1 -:10CF60000000000000610006000920000000000031 -:10CF700000000000000000000000000000000000B1 -:10CF800000000000000000000000000000000000A1 -:10CF90000000000000000000000000000000000091 -:10CFA0000000000000000000000000000000000081 -:10CFB0000000000000000000000000000000000071 -:10CFC0000000000000000000000000000000000061 -:10CFD0000000000000000000000000000000000051 -:10CFE00000000000000000000000F0FFF0FF000063 -:10CFF0000000000000000000000000000000000031 -:10D000000000000000000000000000000000000020 -:10D010000000000000000000000000000000000010 -:10D020000000000000000000000000000000000000 -:10D0300000000000000000000000000000000000F0 -:10D0400000000000000000000000000000000000E0 -:10D0500000000000000000000000000000000000D0 -:10D06000000000000000000000000000F0FFF0FFE2 -:10D0700000000000000000000000000000000000B0 -:10D0800000000000000000000000000000000000A0 -:10D090000000000000000000000000000000000090 -:10D0A0000000000000000000000000000000000080 -:10D0B0000000000000000000000000000000000070 -:10D0C0000000000000000000000000000000000060 -:10D0D0000000000000000000000000000000000050 -:10D0E0000000000000000000000000000000000040 -:10D0F0000000000000000000000000000000000030 -:10D10000000000000000000000000000000000001F -:10D11000000000000000000000000000000000000F -:10D1200000000000000000000000000000000000FF -:10D1300000000000000000000000000000000000EF -:10D1400000000000000000000000000000000000DF -:10D1500000000000000000000000000000000000CF -:10D1600000000000000000000000000000000000BF -:10D1700000000000000000000000000000000000AF -:10D18000000000000000000000000000000000009F -:10D19000000000000000000000000000000000008F -:10D1A000000000000000000000000000000000007F -:10D1B00000000000000088000000000000000000E7 -:10D1C00000000000200020002000000000000000FF -:10D1D000000000002000200000000000000000000F -:10D1E00000000000200020002000000000000000DF -:10D1F00000000000200000034000000000000000CC -:10D2000000000000000020000000000000800080FE -:10D2100000000000000020002000000000000000CE -:10D2200000000000000020000000000000000000DE -:10D2300000000000000020000000000000000000CE -:10D2400000000000000000000000000000000000DE -:10D2500000000000000000000000000000000000CE -:10D2600000000000000200000000000000000000BC -:10D27000000000000002000000000000000040006C -:10D28000000000000000000000000000000000405E -:10D29000000400000000000000000000000000008A -:10D2A000000000000000000000000000000000007E -:10D2B000000000000000000000000000000000006E -:10D2C000000000000000000000000000000000005E -:10D2D000000000000000000000000000000000004E -:10D2E00000000000200000002000000000000000FE -:10D2F000000000000000000000000000000000002E -:10D300000000000000000000000000000200020019 -:10D31000000002000000000000000000000000000B -:10D3200000000000010000000000000000000000FC -:10D3300000000000000000002000000004000000C9 -:10D3400000000000000000000008000000000000D5 -:10D3500000000000000000000000000009000000C4 -:10D3600000000000000080000008800000000000B5 -:10D3700000000000000000000000000000000000AD -:10D380000000000000000000000000080000800015 -:10D39000800000008000000000000000000000008D -:10D3A0000000000000002000000000080000000055 -:10D3B00000000000000000000000800000000000ED -:10D3C000000000000000000000000000000000005D -:10D3D000000000000000000000000000000000004D -:10D3E000000000000000000000000000000000003D -:10D3F000000000000000000000000000000000002D -:10D40000000000000000000000000000000000001C -:10D4100000000010000001000000000000000000FB -:10D4200000000000000000000000000000000000FC -:10D4300000000000000000000000000000000000EC -:10D4400000000000000000000000000000000000DC -:10D4500000000000000000000000000000000000CC -:10D4600000000000000000000000000000000000BC -:10D4700000000000000000000000000000000000AC -:10D480000000000000A000000000000000000000FC -:10D490000000000000001100040000000000000077 -:10D4A000000000000000000000000000000000007C -:10D4B000000000000000000000000000000000006C -:10D4C0000000080000000000000000000000000054 -:10D4D00000008200000000000000000008000000C2 -:10D4E000000000000000000000000000000000003C -:10D4F000000000000000000000000000000000002C -:10D500000000000000008800900000000000000003 -:10D51000000000000000000000000000A00000006B -:10D5200000000000000000000000000000000000FB -:10D5300000000000000000000000000000000000EB -:10D5400000000000000000000000000000000000DB -:10D5500000000000000000000000000000000000CB -:10D5600000000000000000000000000000000000BB -:10D5700000000000000000000000000000000000AB -:10D58000000000000000000000000000000000009B -:10D590000000000000000000080000000000000083 -:10D5A000000000000000000000000000000000007B -:10D5B000000000000000000000000000000000006B -:10D5C000000000000000000000000000000000005B -:10D5D0000000000000000000000000000000080043 -:10D5E000000000000000000000000000000000003B -:10D5F000000000000000000000000000000000002B -:10D600000000000000000002000000000000000018 -:10D61000A0000000000000000000900000000000DA -:10D6200000000000000000000000000000000000FA -:10D6300000000000000000000000000000000000EA -:10D6400000000000000000000000000000000000DA -:10D6500000000000000000000000000000000000CA -:10D6600000000000000000000000000000000000BA -:10D6700000000000000000000000000000000000AA -:10D68000000000000000000000000000000000009A -:10D69000000000000000000000000000000000008A -:10D6A000000000000000000000000000000000007A -:10D6B000000000000000000000000000000000006A -:10D6C000000000000000000000C00000000000009A -:10D6D000000000000000000000000000000000004A -:10D6E000000000000000000000000000000000003A -:10D6F000C00000000000000000000000000000006A -:10D700000000000000000000000000000800000011 -:10D7100000000000400000000000000008000000C1 -:10D7200000000000000000000009000000000000F0 -:10D7300000000000000000000000000000000000E9 -:10D7400000000000000000000000000000000000D9 -:10D7500000000000000000000000000000000000C9 -:10D760000000000000000000000000002000000099 -:10D7700000000000000000000000000000000000A9 -:10D780000000000000000000000000000000000099 -:10D790000000000000000000000000000000000089 -:10D7A0000000000000000000000000000000000079 -:10D7B0000000000000000000000000000000000069 -:10D7C0000000000000000000000000000000000059 -:10D7D0000000000000000000000000000000000049 -:10D7E0000000000000000000000000000000000039 -:10D7F0000000000000000000000000000000000029 -:10D800000000000000000000000000000000000018 -:10D810000000000000000000000000000000000008 -:10D820000000009001000000000000000000000067 -:10D8300000000000000000000000000000000000E8 -:10D8400000000000000000000000000000000000D8 -:10D8500000000000000000000000000000000000C8 -:10D8600000000000000000000000000000000000B8 -:10D8700000000000000000000000000000000000A8 -:10D880000000000000000000000000000000000098 -:10D890000000000000000000000000000000000088 -:10D8A00000000000008041000000000000000000B7 -:10D8B0000000000000000000000000000000000068 -:10D8C0000000000000000000000000000000000058 -:10D8D0000000000000000000000000000000000048 -:10D8E0000000000000000000000000000000000038 -:10D8F0000000000000000000000000000000000028 -:10D900000000000000000000000000000000000017 -:10D910000000000000000000000000000000000007 -:10D920000000000000000000000000800000000077 -:10D9300000000000000000000000000000400000A7 -:10D9400000000000000000000000000000000000D7 -:10D9500000100000000000000000000000000000B7 -:10D9600000000000000000000000000000000000B7 -:10D9700000000000000000000000000000000000A7 -:10D980000000000000000000000000000000000097 -:10D990000000000000000000000000000000000087 -:10D9A0000000000000000000004000000002000035 -:10D9B0000000000000000000000000000000000067 -:10D9C0000000000000000000000000000000000057 -:10D9D0000000000100000000000000000000000046 -:10D9E0000000000000000000000000000000000037 -:10D9F0000000000000000000000000000000000027 -:10DA000040000000000000000000000000000000D6 -:10DA10000000000000000000000000000000000006 -:10DA20000000000000000000000000004090000026 -:10DA300000000000000000000000000000000000E6 -:10DA400000000000000000000000000000000000D6 -:10DA500000000000000000000000000000000000C6 -:10DA600000000000000000000000000000000000B6 -:10DA700000000000000000000000000000000000A6 -:10DA80000000000000000500000000000000000091 -:10DA90000000000000000000000000000000000086 -:10DAA00000000000000000000000050000000080F1 -:10DAB0000300000000000000000000000000000063 -:10DAC0000000000000000000000000000000000056 -:10DAD0000000000000000000000000000000000046 -:10DAE0000000000000000000000000000000000036 -:10DAF0000000000000000000000000000000000026 -:10DB00000000000000000000000000000000000015 -:10DB10000000000000000000000000000000000005 -:10DB20000000000000000000000000000011800064 -:10DB30000080000000000000000000000000000065 -:10DB400000000000000000000000000000000000D5 -:10DB500000000000000000000000000000000000C5 -:10DB600000000000000000000000000000000000B5 -:10DB700000000000000000000000000000000000A5 -:10DB80000000000000000000000000000000000095 -:10DB90000000000000000000000000000000000085 -:10DBA0000000000000000000000000000000000174 -:10DBB000200000080000000000000000000000003D -:10DBC0000000000000000000000000000000000055 -:10DBD0000000000000000000000000000000000045 -:10DBE0000000000000000000000000000000000035 -:10DBF0000000000000000000000000000000000025 -:10DC0000000000000000000000E000000000000034 -:10DC10000000000000000000000000000000000004 -:10DC200000000000000000000000000000000000F4 -:10DC300041000088070000210000000000000000F3 -:10DC40000000000000000000000000E000000000F4 -:10DC50000000000000000000000000E000000000E4 -:10DC600000000000000000000000000000000000B4 -:10DC700000000000000000000000000000000000A4 -:10DC80000000000000000000000000000000000094 -:10DC90000000000000000000000000000000000084 -:10DCA0000000000000000000000000000000000074 -:10DCB000000000FF000000FF000000000000000066 -:10DCC0000000000000000000000000000000000054 -:10DCD0000000000000000000000000000000000044 -:10DCE0000000000000000000000000000000000034 -:10DCF0000000000000000000000000000000000024 -:10DD00000000000000000000000000000000000013 -:10DD10000000000000000000000000000000000003 -:10DD200000000000000000000000000000000000F3 -:10DD30000000000000FF000000FF000000000000E5 -:10DD400000000000000000000000000000000000D3 -:10DD500000000000000000000000000000000000C3 -:10DD600000000000000000000000000000000000B3 -:10DD700000000000000000000000000000000000A3 -:10DD80000000000000000000000000000000000093 -:10DD90000000000000000000000000000000000083 -:10DDA0000000000000000000000000000000000073 -:10DDB0000000000000000000FF000000FFFF000066 -:10DDC0000000000000000000000000000000000053 -:10DDD0000000000000000000000000000000000043 -:10DDE0000000000000000000000000000000000033 -:10DDF0000000000000000000000000000000000023 -:10DE00000000000000000000000000000000000012 -:10DE10000000000000000000000000000000000002 -:10DE200000000000000000000000000000000000F2 -:10DE300000000000000000000000FF0000000000E3 -:10DE400000000000000000000000000000000000D2 -:10DE500000000000000000000000000000000000C2 -:10DE600000000000000000000000000000000000B2 -:10DE700000000000000000000000000000000000A2 -:10DE80000000000000000000000000000000000092 -:10DE900000610006000D000000000000000000000E -:10DEA0000000000000000000000000000000000072 -:10DEB0000000000000000000000015612A07854DE9 -:10DEC00000A80000000000000000000000000000AA -:10DED000000000610006000D0000000000000000CE -:10DEE000000000610006000D0000000000000000BE -:10DEF0000000000000000000000000000000000022 -:10DF00000000000000000000000000000000000011 -:10DF10000000000000000000000000000000000001 -:10DF200000000000000000000000000000000000F1 -:10DF300000000000000000000000000000000000E1 -:10DF400000000000000000000000000000000000D1 -:10DF500000000000000000000000000000000000C1 -:10DF600000000000000000000000000000000000B1 -:10DF700000000000000000000000000000000000A1 -:10DF80000000000000000000000000000000000091 -:10DF90000000000000000000000000000000000081 -:10DFA0000000000000000000000000000000000071 -:10DFB0000000000000000000000000000000000061 -:10DFC0000000000000000000000000000000000051 -:10DFD0000000000000000000000000000000000041 -:10DFE0000000000000000000000000000000000031 -:10DFF0000000000000000000000000000000000021 -:10E000000000000000000000000000000000000010 -:10E010000000000000000000000000000000000000 -:10E0200000000000000000000000000000000000F0 -:10E0300000000000000000000000000000000000E0 -:10E0400000000000000000000000000000000000D0 -:10E0500000000000000000000000000000000000C0 -:10E0600000000000000000000000000000000000B0 -:10E0700000000000000000000000000000000000A0 -:10E080000000000000000000000000000000000090 -:10E090000000000000000000000000000000000080 -:10E0A0000000000000000000000000000000000070 -:10E0B0000000000000000000000000000000000060 -:10E0C0000000000000000000000000000000000050 -:10E0D0000000000000000000000000000000000040 -:10E0E0000000000000000000000000000000000030 -:10E0F0000000000000000000000000000000000020 -:10E10000000000000000000000000000000000000F -:10E1100000000000000000000000000000000000FF -:10E1200000000000000000000000000000000000EF -:10E1300000000000000000000000000000000000DF -:10E1400000000000000000000000000000000000CF -:10E1500000000000000000000000000000000000BF -:10E1600000000000000000000000000000000000AF -:10E17000000000000000000000000000000010008F -:10E18000000000002000000000000000000000006F -:10E19000000000000000000000000000400020001F -:10E1A000000000000000000000000000000000006F -:10E1B000000000000000000000000000000000005F -:10E1C000200000000000000000000000000000002F -:10E1D00084000000000000000000000000000000BB -:10E1E000000000000000000000000000000000002F -:10E1F000000000000000000000000000000000021D -:10E20000000000000000000000000000000000000E -:10E2100000000004000000000000000000400000BA -:10E2200000000002000200000000000000000000EA -:10E2300000000002000200000000000000000000DA -:10E2400000000000000000000002000000000000CC -:10E2500000000000000000000002000000000000BC -:10E26000000020000000000000000002000000008C -:10E27000000000000000000000000000000000009E -:10E28000000000000000000000000000000000008E -:10E29000000000000000000000000000000000007E -:10E2A000000000000000000000000000000000006E -:10E2B000000000000000000000000000000000005E -:10E2C0000000000000000000000000000800000046 -:10E2D000000000000000000000000000000000003E -:10E2E000000000000000000000000000000000002E -:10E2F000000000000000000000000000001000000E -:10E300000000000000000000000000080000000005 -:10E3100000000000000000000000000000000000FD -:10E3200000000000000000000000000800000000E5 -:10E3300000000000000000000000000000000000DD -:10E340000000000000000000000000000008800045 -:10E3500000000000000000000000000000000000BD -:10E3600000000000000000000000000000080000A5 -:10E37000000000000000000000000000000000009D -:10E38000000000000000000000000000000000008D -:10E39000000000000000000000000000000000007D -:10E3A000000000000000000000000000000000006D -:10E3B000000000000000000000000000000000005D -:10E3C000000000000000000000000000000000004D -:10E3D000000000000000000000000000000000003D -:10E3E000000000000000000000000000000000002D -:10E3F000000000000000000000000000000000001D -:10E40000000000000000000000000000000000000C -:10E4100000000000000000000000000000000000FC -:10E4200000000000000000000000000000000000EC -:10E4300000000000000000000000000000000000DC -:10E4400000000000000000000000000000000000CC -:10E4500000000000000000000000000000000000BC -:10E4600000000000000000000000000000000000AC -:10E47000000000000000000000000000000000009C -:10E48000000000000000000000000000000000008C -:10E49000000000000000000000000000000000007C -:10E4A000000000000000000000000000000000006C -:10E4B000000000000000000000000000000000005C -:10E4C000000000000000000000000000000000004C -:10E4D000000000000000000000000000000000003C -:10E4E000000000000000000000000000000000002C -:10E4F000000000000000000000000000000000001C -:10E50000000000000000000000000000000000000B -:10E5100000000000000000000000000000000000FB -:10E5200000000000000000000000000000000000EB -:10E5300000000000000000000000000000000000DB -:10E5400000000000000000000000000000000000CB -:10E550000000000000004100410000000000000039 -:10E5600000000000000000000000000000000000AB -:10E57000000000000000000000000000000000009B -:10E58000000000000000000000000000000000008B -:10E59000000000000000000000000000000000007B -:10E5A000000000000000000000000000000000006B -:10E5B000000000000000000000000000000000005B -:10E5C0000000000000020000000000000000000049 -:10E5D0000000040004000000008000800000000033 -:10E5E000000000000000000000000000000000002B -:10E5F000000000000000000000000000000000001B -:10E60000000000000000000000000000000000000A -:10E6100000000000000000000000000000000000FA -:10E6200000000000000000000000000000000000EA -:10E6300000000000000000000000000000000000DA -:10E6400000000000000000000000000000000000CA -:10E65000000000000000000000000010004000006A -:10E6600000000000000000000000000000000000AA -:10E67000000000000000000000000000000000009A -:10E680000000080000000000000000000000000082 -:10E69000000000000000000000000000000000007A -:10E6A000000000000000000000000000000000006A -:10E6B000000000000000000000000000000000005A -:10E6C000000000000000000000000000000000004A -:10E6D0000000080000000000000000000000000032 -:10E6E000008000000000000000400000000000006A -:10E6F000000000000000000000000000000000001A -:10E700000000000000000000000000000000000009 -:10E7100000000000000000000000000000000000F9 -:10E7200000000000000000000000000000000000E9 -:10E7300011000000000000000000080000000000C0 -:10E7400000000000000000000000000000000000C9 -:10E7500000000000000000000000000000000000B9 -:10E760000000002000000000000000000000000089 -:10E770000000000000000000000000000000000099 -:10E780000000000000000000000000000000000089 -:10E790000000000000000000000000000000000079 -:10E7A0000000000000000000000000000000000069 -:10E7B0000000000000000000000000000000000059 -:10E7C0000000000000000000000000000000000049 -:10E7D0000000000000000000000000000000000435 -:10E7E0009002000200900000000000000000000005 -:10E7F0000000000000000000000000000000000019 -:10E800000000000000000000000000000000000008 -:10E8100000000000000000000000000000000000F8 -:10E8200000000000000000000000000000000000E8 -:10E8300000000000000000000000000000000000D8 -:10E8400000000000000000000000000000000000C8 -:10E8500000000000000000000000000000000000B8 -:10E8600000808080008000000000000000000000A8 -:10E870000000000000000000000000000000000098 -:10E880000000000000000000000000000000000088 -:10E890000000000000000000000000000000000078 -:10E8A0000000000000000000000000000000000068 -:10E8B0000000000000000000000000000000000058 -:10E8C0000000000000000000000000000000000048 -:10E8D0000000000000000000000000000000000038 -:10E8E00000000000800000000000000000000000A8 -:10E8F0000000000000000000000000000000000018 -:10E900000000000000000000000000000000000007 -:10E9100000000000000000000000000000000000F7 -:10E9200000000000000000000000000000000000E7 -:10E9300000000000000000000000000000000000D7 -:10E9400000000000000000000000000000000000C7 -:10E9500000000000000000000000000000000000B7 -:10E960000000000000009000000000000000000017 -:10E970000000000000000000000000000000000097 -:10E980000000000000000000000000000000000087 -:10E990000000000000000000000000000000000077 -:10E9A0000000000000000000000000000000000067 -:10E9B0000000000000000000000000000000000057 -:10E9C0000000000000000000000000000000000047 -:10E9D0000000000000000000000000000000000037 -:10E9E0000000000000000100000000000000000026 -:10E9F0000000000000000000000000000000000017 -:10EA00000000000000000000000000000000000006 -:10EA100000000000000000000000000000000000F6 -:10EA200000000000000000000000000000000000E6 -:10EA300000000000000000000000000000000000D6 -:10EA400000000000000000000000000000000000C6 -:10EA500000000000000000000000000000000000B6 -:10EA60000000000000000000410000000000000065 -:10EA70000000000000000000000000000000000096 -:10EA80000000000000000000000000000000000086 -:10EA90000000000000000000000000000000000076 -:10EAA0000000000000000000000000000000000066 -:10EAB0000000000000000000000000000000000056 -:10EAC0000000000000000000000000000000000046 -:10EAD0000000000000000000000000000000000036 -:10EAE0000000000000000000000000118000008015 -:10EAF0008000000000000000000000000000000096 -:10EB00000000000000000000000000000000000005 -:10EB100000000000000000000000000000000000F5 -:10EB200000000000000000000000000000000000E5 -:10EB300000000000000000000000000000000000D5 -:10EB400000000000000000000000000000000000C5 -:10EB500000000000000000000000000000000000B5 -:10EB60000000000000000000000000000001A00004 -:10EB7000004008000000000000000000000000004D -:10EB80000000000000000000000000000000000085 -:10EB90000000000000000000000000000000000075 -:10EBA0000000000000000000000000000000000065 -:10EBB0000000000000000000000000000000000055 -:10EBC0000000000000000000000000000000000045 -:10EBD0000000000000000000000000000000000035 -:10EBE0000000000000000000000000000000000025 -:10EBF0000000410082000000000000000000000052 -:10EC00000000000000000000000000000000000004 -:10EC100000000000000000000000000000000000F4 -:10EC200000000000000000000000000000000000E4 -:10EC300000000000000000000000000000000000D4 -:10EC400000000000000000000000000000000000C4 -:10EC500000000000000000000000000000000000B4 -:10EC600000000000000000000000000000000000A4 -:10EC7000003C003C0000000000000000000000001C -:10EC80000000000000000000000000000000000084 -:10EC90000000000000000000000000000000000074 -:10ECA0000000000000000000000000000000000064 -:10ECB0000000000000000000000000000000000054 -:10ECC0000000000000000000000000000000000044 -:10ECD0000000000000000000000000000000000034 -:10ECE0000000000000000000000000000000000024 -:10ECF0000000003C003C000000000000000000009C -:10ED00000000000000000000000000000000000003 -:10ED100000000000000000000000000000000000F3 -:10ED200000000000000000000000000000000000E3 -:10ED300000000000000000000000000000000000D3 -:10ED400000000000000000000000000000000000C3 -:10ED500000000000000000000000000000000000B3 -:10ED600000000000000000000000000000000000A3 -:10ED70000000000000000000000000000000000093 -:10ED80000000000000000000000000000000000083 -:10ED90000000000000000000000000000000000073 -:10EDA0000000000000000000000000000000000063 -:10EDB0000000000000000000000000000000000053 -:10EDC0000000000000000000000000000000000043 -:10EDD0000000000000000000000000000000000033 -:10EDE0000000000000000000000000000000000023 -:10EDF00000000000000000000300F0F0F0F0000050 -:10EE00000000000000000000000000000000000002 -:10EE100000000000000000000000000000000000F2 -:10EE200000000000000000000000000000000000E2 -:10EE300000000000000000000000000000000000D2 -:10EE400000000000000000000000000000000000C2 -:10EE500000000000000000000000000000000000B2 -:10EE600000000000000000000000000000000000A2 -:10EE7000000000000000000000000300000000008F -:10EE80000000000000000000000000000000000082 -:10EE90000000000000000000000000000000000072 -:10EEA0000000000000000000000000000000000062 -:10EEB0000000000000000000000000000000000052 -:10EEC0000000000000000000000000000000000042 -:10EED0000000000000000000000000000000000032 -:10EEE0000000000000000000000000000000000022 -:10EEF000000000000000000000008500000000008D -:10EF00000000000000000000000000000000000001 -:10EF100000000000000000000000000000000000F1 -:10EF200000000000000000000000000000000000E1 -:10EF300000000000000000000000000000000000D1 -:10EF400000000000000000000000000000000000C1 -:10EF500000000000000000000000000000000000B1 -:10EF600000000000000000000000000000000000A1 -:10EF70000000000000000000000000000000000091 -:10EF80000000000000000000000000000000000081 -:10EF90000000000000000000000000000000000071 -:10EFA0000000000000000000000000000000000061 -:10EFB0000000000000000000000000000000000051 -:10EFC0000000000000000000000000000000000041 -:10EFD0000000000000000000000000000000000031 -:10EFE0000000000000000000000000000000000021 -:10EFF0000000000000000000000000000000000011 -:10F000000000000000000000000000000000000000 -:10F0100000000000000000000000000000000000F0 -:10F0200000000000000000000000000000000000E0 -:10F0300000000000000000000000000000000000D0 -:10F0400000000000000000000000000000000000C0 -:10F0500000000000000000000000000000000000B0 -:10F0600000000000000000000000000000000000A0 -:10F070000000000000000000000000000000000090 -:10F080000000000000000000000000000000000080 -:10F090000000000000000000000000000000000070 -:10F0A0000000000000000000000000000000000060 -:10F0B0000000000000000000000000000000000050 -:10F0C0000000000000000000000000000000000040 -:10F0D0000000000000000000000000000000000030 -:10F0E0000000000000000000000000000000000020 -:10F0F0000000000000000000000000000000000010 -:10F1000000000000000000000000000000000000FF -:10F1100000000000000000000000000000000000EF -:10F1200000000000000000000000000000000000DF -:10F1300000002000000000000000000000000000AF -:10F1400000000000000000000000000000000000BF -:10F1500000000000000000000000000000000000AF -:10F16000000000000000010000000000000000009E -:10F17000000000010000000000000000000000008E -:10F18000000000000000000000000000000000007F -:10F19000000000000000000000000000000000006F -:10F1A000000000000000000000000000000000005F -:10F1B000000000000000000000000000000000004F -:10F1C000000000000000000000000000000000003F -:10F1D000000000000000000000000000000000002F -:10F1E0000000000004000000020000000000000019 -:10F1F000000000000000000000000000000000000F -:10F2000000000000000000000000000000000000FE -:10F2100000000000000000000000000000000000EE -:10F2200000000000000000000000000000000000DE -:10F2300000000000000000000000000000000000CE -:10F2400000000000000000000000000000000000BE -:10F2500000000000000001000100020002000000A8 -:10F260000000000000000200010000000200000099 -:10F27000000000000000000000000000000000008E -:10F28000000000000000000002000000000000007C -:10F29000000000000000000000000000000000006E -:10F2A000000000000000000000000000000000005E -:10F2B000000000000000000002000000000000004C -:10F2C000000000000000000000000000000000003E -:10F2D000000000000000000002000200800080002A -:10F2E000000000000000000080000200000080001C -:10F2F000000000000000000000000000000000000E -:10F3000000000000000000000000000000004100BC -:10F3100000000000050005000000000000000000E3 -:10F3200000000000000000000000020000000000DB -:10F3300000000400000000000000000000000000C9 -:10F3400000000000000000000000000000000000BD -:10F3500000000000000000000000000000000000AD -:10F36000000000000000000000000000000000009D -:10F37000000000000000000000000000000000008D -:10F38000000000000000000000000000000000007D -:10F39000000000000000000000000000000000006D -:10F3A000000000000000000000000000000000005D -:10F3B000000000000000000000000000000000004D -:10F3C000000000000000000000000000000000003D -:10F3D000000000000000000000000000000000002D -:10F3E000000000000000000000000000000000001D -:10F3F000000000000000000000000000000000000D -:10F4000000000000000000000000000000000000FC -:10F4100000000000000000000000000000000000EC -:10F4200000000000000000000000000000000000DC -:10F4300000000000000000000000000000000000CC -:10F4400000000000000000000000000000000800B4 -:10F45000000000000800A0000000000000000800FC -:10F46000000000000100000000000000000000009B -:10F47000000000000100000000000000000000008B -:10F48000000000000000000000000000000000007C -:10F49000000000000000000000000000000000006C -:10F4A000000000000000000000000000000000005C -:10F4B000000000000000000000400000000000000C -:10F4C0000000000000000000080000000000000034 -:10F4D000000000000000000000000000000000002C -:10F4E0000000000000000400000000000000000018 -:10F4F0000000000000000400000000000000000008 -:10F5000000000000000000000000000000000000FB -:10F5100000000900000000000000000000000000E2 -:10F5200000000000000000000000000000000000DB -:10F5300000000000000000000000000000000000CB -:10F5400000000000000000000000000000000000BB -:10F5500000000000000000000000000000000000AB -:10F560000000000000000000000082000000000019 -:10F57000000000000000000000000000000000008B -:10F58000000000000000000000000000000000007B -:10F59000000000000000000000000000000000006B -:10F5A000000000000000000000000000000000005B -:10F5B000000000000000000000000000000000004B -:10F5C000000000000000000000000000000000003B -:10F5D000000000000000000000000000000000002B -:10F5E000000000000000000000000000000000001B -:10F5F000000000000000000000000000000000000B -:10F6000000000000000000000000000000000000FA -:10F6100000000000000000000000050000000000E5 -:10F6200000000000000000000000000000000000DA -:10F6300000000000000000000000000000000000CA -:10F6400000000000000000000000000000000000BA -:10F6500000000000000004000000000000000000A6 -:10F66000000000000000000000000000000000009A -:10F67000000000000000000000000000000000008A -:10F68000000000000000000000000000000000007A -:10F69000000000000000000000000000000000006A -:10F6A000000000000000000000000000000000005A -:10F6B000000000000000000000000000000000004A -:10F6C000000000000000000000000000000000003A -:10F6D000000000000000000000000000000000002A -:10F6E000000000000000000000000000000000001A -:10F6F000000000000000000000000000000000000A -:10F7000000000000000000000000000000000000F9 -:10F7100000000000000000000000000000000000E9 -:10F7200000000000000000000000020000000000D7 -:10F7300000000000000000000000000000000000C9 -:10F7400000000000000000000000000000000000B9 -:10F7500000000000000000000000000000000000A9 -:10F760000000000000000000000000000090000009 -:10F7700000000000000000000000000000900000F9 -:10F780000000000000000000000000000000000079 -:10F790000000000000000000000000000000000069 -:10F7A0000000000000000000000000000000000059 -:10F7B0000000000000000000000000000000000049 -:10F7C0000000000000000000000000000000000039 -:10F7D0000000000000000000000000000000000029 -:10F7E0000000000000000000000000000000008099 -:10F7F0000000000000000000000000000000008089 -:10F8000000000000000000000000000000000000F8 -:10F8100000000000000000000000000000000000E8 -:10F8200000000000000000000000000000000000D8 -:10F8300000000000000000000000000000000000C8 -:10F8400000000000000000000000000000000000B8 -:10F8500000000000000000000000000000000000A8 -:10F860000000000000000000000000000000000098 -:10F870000000000000000000000000000000000088 -:10F880000000000000000000000000000000000078 -:10F890000000000000000000000000000000000068 -:10F8A0000000000000000000000000000000000058 -:10F8B0000000000000000000000000000000000048 -:10F8C0000000000000000000000000000000000038 -:10F8D0000000000000000000000000000000000028 -:10F8E0000000000000000000000000000000000018 -:10F8F0000000009000000040000000000000000038 -:10F9000000000090000000A00000000000000000C7 -:10F9100000000000000000000000000000000000E7 -:10F9200000000000000000000000000000000000D7 -:10F9300000000000000000000000000000000000C7 -:10F9400000000000000000000000000000000000B7 -:10F9500000000000000000000000000000000000A7 -:10F960000000000000000000000000000000000097 -:10F97000000000000000A090000000000000000057 -:10F9800000000000000002900000000000000000E5 -:10F990000000000000000000000000000000000067 -:10F9A0000000000000000000000000000000000057 -:10F9B0000000000000000000000000000000000047 -:10F9C0000000000000000000000000000000000037 -:10F9D0000000000000000000000000000000000027 -:10F9E0000000000000000000000000000000000017 -:10F9F0000000000040000000008000000000000047 -:10FA000000000000400000008080000000000000B6 -:10FA100000000000000000000000000000000000E6 -:10FA200000000000000000000000000000000000D6 -:10FA300000000000000000000000000000000000C6 -:10FA400000000000000000000000000000000000B6 -:10FA500000000000000000000000000000000000A6 -:10FA60000000000000000000000000000000000096 -:10FA700000000000000000118000000000000000F5 -:10FA800000000000000000118000000000000000E5 -:10FA90000000000000000000000000000000000066 -:10FAA0000000000000000000000000000000000056 -:10FAB0000000000000000000000000000000000046 -:10FAC0000000000000000000000000000000000036 -:10FAD0000000000000000000000000000000000026 -:10FAE0000000000000000000000000000000000016 -:10FAF000000000000000000000012000008800005D -:10FB0000000000000000000000012000008800004C -:10FB100000000000000000000000000000000000E5 -:10FB200000000000000000000000000000000000D5 -:10FB300000000000000000000000000000000000C5 -:10FB400000000000000000000000000000000000B5 -:10FB500000000000000000000000000000000000A5 -:10FB60000000000000000000000000000000000095 -:10FB7000000000000000000000000000000007007E -:10FB8000000000000000000000000000000007006E -:10FB90000000000000000000000000000000000065 -:10FBA0000000000000000000000000000000000055 -:10FBB0000000000000000000000000000000000045 -:10FBC0000000000000000000000000000000000035 -:10FBD0000000000000000000000000000000000025 -:10FBE0000000000000000000000000000000000015 -:10FBF00000000000000000000000000000FF000006 -:10FC000000FF0000000000000000000000FF0000F6 -:10FC100000FF0000000000000000000000000000E5 -:10FC200000000000000000000000000000000000D4 -:10FC300000000000000000000000000000000000C4 -:10FC400000000000000000000000000000000000B4 -:10FC500000000000000000000000000000000000A4 -:10FC60000000000000000000000000000000000094 -:10FC7000000000000000000000000000000000FF85 -:10FC8000000000FF0000000000000000000000FF76 -:10FC9000000000FF00000000000000000000000065 -:10FCA0000000000000000000000000000000000054 -:10FCB0000000000000000000000000000000000044 -:10FCC0000000000000000000000000000000000034 -:10FCD0000000000000000000000000000000000024 -:10FCE0000000000000000000000000000000000014 -:10FCF0000000000000000000000000000000000004 -:10FD00000000FF000000FFFF0000000000000000F6 -:10FD10000000FF000000FFFF0000000000000000E6 -:10FD200000000000000000000000000000000000D3 -:10FD300000000000000000000000000000000000C3 -:10FD400000000000000000000000000000000000B3 -:10FD500000000000000000000000000000000000A3 -:10FD60000000000000000000000000000000000093 -:10FD70000000000000000000000000000000000083 -:10FD800000000000FF000000000000000000000074 -:10FD900000000000FF000000000000000000000064 -:10FDA0000000000000000000000000000000000053 -:10FDB0000000000000000000000000000000000043 -:10FDC0000000000000000000000000000000000033 -:10FDD0000000000000000000000000000000000023 -:10FDE0000000000000000000000000000000000013 -:10FDF0000000000000000000000000000000000003 -:10FE00000000000015002A00054000A800000000C6 -:10FE10000000000015002A00054000A800000000B6 -:10FE200000000000000000000000000000000000D2 -:10FE300000000000000000000000000000000000C2 -:10FE400000000000000000000000000000000000B2 -:10FE500000000000000000000000000000000000A2 -:10FE60000000000000000000000000000000000092 -:10FE70000000000000000000000000000000000082 -:10FE80000000000000000000000000000000000072 -:10FE90000000000000000000000000000000000062 -:10FEA0000000000000000000000000000000000052 -:10FEB0000000000000000000000000000000000042 -:10FEC0000000000000000000000000000000000032 -:10FED0000000000000000000000000000000000022 -:10FEE0000000000000000000000000000000000012 -:10FEF0000000000000000000000000000000000002 -:10FF000000000000000000000000000000000000F1 -:10FF100000000000000000000000000000000000E1 -:10FF200000000000000000000000000000000000D1 -:10FF300000000000000000000000000000000000C1 -:10FF400000000000000000000000000000000000B1 -:10FF500000000000000000000000000000000000A1 -:10FF60000000000000000000000000000000000091 -:10FF70000000000000000000000000000000000081 -:10FF80000000000000000000000000000000000071 -:10FF90000000000000000000000000000000000061 -:10FFA0000000000000000000000000000000000051 -:10FFB0000000000000000000000000000000000041 -:10FFC0000000000000000000000000000000000031 -:10FFD0000000000000000000000000000000000021 -:10FFE0000000000000000000000000000000000011 -:10FFF0000000000000000000000000000000000001 -:020000040010EA -:1000000000000000000000000000000000000000F0 -:1000100000000000000000000000000000000000E0 -:1000200000000000000000000000000000000000D0 -:1000300000000000000000000000000000000000C0 -:1000400000000000000000000000000000000000B0 -:1000500000000000000000000000000000000000A0 -:100060000000000000000000000000000000200070 -:1000700000000000000000000000000000008400FC -:100080000000000000000000000000000000000070 -:10009000000000000000000000000004000000005C -:1000A000000000000000000000000000000000024E -:1000B0000000000000000000000000004000000000 -:1000C00000000000000000000000400000000000F0 -:1000D00040000000000000000200000000000000DE -:1000E0000000000000000000000000000000000010 -:1000F0000000000000000000000000000000000000 -:1001000000000000000000001000000000000000DF -:1001100000000000000000000000000000000000DF -:1001200000000000000000000000000000000002CD -:1001300000000000000000000000000000000000BF -:1001400000000000000000000000000000000000AF -:10015000000000000000000000000000000000009F -:10016000004000000000000000000000000000004F -:10017000000000000000000000000000000000007F -:10018000000000000000000000000000000000006F -:10019000000000000000000000000000000000005F -:1001A000000000000000000000000000000000004F -:1001B000000000000000000000000000000000003F -:1001C000000000000200000000000000010000002C -:1001D000000000000000000000000000000000001F -:1001E000000000000000000000000200000000000D -:1001F00000000000000000000000000000000000FF -:1002000000000000000000000000000000000000EE -:1002100000000000000000000000000002000000DC -:1002200000000000020000000000000000000000CC -:1002300000000000000000000000000000000000BE -:1002400000000000000000000000000000000400AA -:10025000000000000000000000000000000000009E -:10026000000000000000000000000200000000008C -:10027000000000000000000000000000000000007E -:10028000000000000000000000000000000000006E -:10029000000000000000000000000000000000005E -:1002A000000000000000000000000000000000004E -:1002B000000000000000000000000000000000003E -:1002C000000000000000000000000000000000002E -:1002D000000000000000000000000000000000001E -:1002E000000000000000000000000000000000000E -:1002F00000000000000000000000000000000000FE -:1003000000000000000000000000000000000000ED -:1003100000000000000000000000000000000000DD -:1003200000000000000000000000000000000000CD -:1003300000000000000000000000000000000000BD -:1003400000000000000004000000000000000000A9 -:10035000000000000000000000000000000000009D -:10036000000000000000000000000000000000008D -:10037000000000000000000000000000000000007D -:10038000000000000000000000000000000000006D -:10039000000000000000000000000000000000005D -:1003A000000000000000000000000000000000004D -:1003B00000000000000000000040000000000000FD -:1003C000000000000000000000000000000000002D -:1003D000000000000000000000000000000000001D -:1003E0000000000000000000080000000000000005 -:1003F0000000000000000800820000000000000073 -:1004000000000000000000000000000000000000EC -:1004100000000000000000000000000000000000DC -:1004200000000000000000000000000000000000CC -:1004300000000000000000000000000000000000BC -:1004400000000000000000000000000000000000AC -:10045000000000000000000000000000000000009C -:10046000000000000000000000000000000000008C -:10047000000000000000000000000000000000007C -:10048000000000000000000000000000000000006C -:10049000000000000000000000000000000000005C -:1004A000000000000000000000000000000000004C -:1004B000000000000000000000000000000000003C -:1004C000000000000000000000000000000000002C -:1004D000000000000000000000000000000000001C -:1004E000000000000000000000000000000000000C -:1004F00000000000000000000000000000000000FC -:1005000000000000000000000000000000000000EB -:1005100000000000000000000000000000000000DB -:10052000080000000000008400000000000000003F -:10053000080000000000008400000000000000002F -:1005400000000000000000000000000000000000AB -:10055000000000000000000000000000000000009B -:10056000000000000000000000000000000000008B -:100570000000000000000000000000A000000000DB -:10058000000000000000000000000000000000006B -:10059000000000000000000000000000000000005B -:1005A000000000000000000000000000000000004B -:1005B0000002000000000000000000000000000039 -:1005C0000002000000000000000000000000000029 -:1005D000000000000000000000000000000000001B -:1005E000000000000000000000000000000000000B -:1005F00000000000000000000000000000000000FB -:1006000000000000000000000000000000000000EA -:1006100000000000000000000000000000000000DA -:1006200000000000000000000000000000000000CA -:1006300000000000000000000000000000000000BA -:1006400000000000000000000000000000000000AA -:10065000000000000000000000000000000000009A -:100660000000000000000000000000001100000079 -:10067000000000000000000000000000000000007A -:10068000000000000000000000000000000000006A -:10069000000000000000000000000000000000005A -:1006A000000000000000000000000000000000004A -:1006B000000000000000000000000000000000003A -:1006C000000000000000000000000000000000002A -:1006D000000000000000000000000000000000001A -:1006E000000000000000000000000000000000000A -:1006F00000000000000000000000000000000000FA -:1007000000000000000000000000000000000000E9 -:1007100000000000000000000000000000000000D9 -:1007200000000000000000000000000000000000C9 -:1007300000000000000000000000000000000000B9 -:1007400000000000000000000000000000000000A9 -:100750000000000000000000000000000000000099 -:100760000000000000000000000000000000000089 -:100770000000000000000000000000000000000079 -:100780000000000000000000000000000000000069 -:100790000000000000000000000000000000000059 -:1007A0000000000000000000000000000000000049 -:1007B0000000000000000000000000000000000039 -:1007C0000000000000000000000000000000000029 -:1007D0000000000000000000000000000000000019 -:1007E0000000000000000000000000000000000009 -:1007F00000000000000000000000000000000000F9 -:1008000000000000000000000000000000000000E8 -:1008100000000000000000000000000000000000D8 -:1008200000000000000000000000000000000000C8 -:1008300000000000000000000000000000000000B8 -:1008400000000000000000000000000000000000A8 -:100850000000000000000000000000000000000098 -:100860000000000000000000000000000000000088 -:100870000000000000000000000000000000000078 -:100880000000000000000000000000000000000068 -:100890000000000000000000000000000000000058 -:1008A0000000000000000000000000000000000048 -:1008B0000000000000000000000000000000000038 -:1008C0000000000000000000000000000000000028 -:1008D0000000000000000000000000000000000018 -:1008E0000000000000000000000000000000000008 -:1008F00000000000000000000000000000000000F8 -:1009000000000000000000000000000000000000E7 -:1009100000000000000000000000000000000000D7 -:1009200000000000000000000000000000000000C7 -:1009300000000000000000000000000000000000B7 -:1009400000000000000000000000000000000000A7 -:100950000000000000000000000000000000000097 -:100960000000000000000000000000000000000087 -:100970000000000000000000000000000000000077 -:100980000000000000000000000000000000000067 -:100990000000000000000000000000000000000057 -:1009A0000000000000000000000000000000000047 -:1009B0000000000000000000000000000000000037 -:1009C0000000000000000000000000000000000027 -:1009D0000000000000000000000000000000000017 -:1009E0000000000000000000000000000002000005 -:1009F00000000000000000000000000000000000F7 -:100A000000000000000000000000000000000000E6 -:100A100000000000000000000000000000000000D6 -:100A200000000000000000000000000000000000C6 -:100A300000000000000000000000000000000000B6 -:100A400000000000000000000000000000000000A6 -:100A50000000000000000000000000000000000096 -:100A60000000000000000000000000000000000185 -:100A70000000000000000000000000000000000076 -:100A80000000000000000000000000000000000066 -:100A90000000000000000000000000000000000056 -:100AA0000000000000000000000000000000000046 -:100AB0000000000000000000000000000000000036 -:100AC0000000000000000000000000000000000026 -:100AD0000000000000000000000000000000000016 -:100AE0000000000000000000000000000000000006 -:100AF000008100000700000000000000000000006E -:100B000000000000000000000000000000000000E5 -:100B100000000000000000000000000000000000D5 -:100B200000000000000000000000000000000000C5 -:100B300000000000000000000000000000000000B5 -:100B400000000000000000000000000000000000A5 -:100B50000000000000000000000000000000000095 -:100B60000000000000000000000000000000000085 -:100B70000000000000000000000000000000000075 -:100B80000000000000000000000000000000000065 -:100B90000000000000000000000000000000000055 -:100BA0000000000000000000000000000000000045 -:100BB0000000000000000000000000000000000035 -:100BC0000000000000000000000000000000000025 -:100BD0000000000000000000000000000000000015 -:100BE0000000000000000000000000000000000005 -:100BF00000000000000000000000000000000000F5 -:100C000000000000000000000000000000000000E4 -:100C100000000000000000000000000000000000D4 -:100C200000000000000000000000000000000000C4 -:100C300000000000000000000000000000000000B4 -:100C400000000000000000000000000000000000A4 -:100C50000000000000000000000000000000000094 -:100C60000000000000000000000000000000000084 -:100C70000000000000000000000000000000000074 -:100C80000000000000000000000000000000000064 -:100C90000000000000000000000000000000000054 -:100CA0000000000000000000000000000000000044 -:100CB0000000000000000000000000000000000034 -:100CC0000000000000000000000000000000000024 -:100CD0000000000000000000000000000000000014 -:100CE0000000000000000000000000000000000004 -:100CF00000000000000000000000000000000000F4 -:100D000000000000000000000000000000000000E3 -:100D100000000000000000000000000000000000D3 -:100D200000000000000000000000000000000000C3 -:100D300000000000000000000000000000000000B3 -:100D400000000000000000000000000000000000A3 -:100D50000000000000000000000000000000000093 -:100D60000000000000000000000000000000000083 -:100D70000000000000000000000000000000000073 -:100D80000000000000000000000000000000000063 -:100D90000000000000000000000000000000000053 -:100DA0000000000000000000000000000000000043 -:100DB0000000000000000000000000000000000033 -:100DC0000000000000000000000000000000000023 -:100DD0000000000000000000000000000000000013 -:100DE0000000000000000000000000000000000003 -:100DF00000000000000000000000000005000020CE -:100E000000000000000000000000000000000000E2 -:100E100000000000000000000000000000000000D2 -:100E200000000000000000000000000000000000C2 -:100E300000000000000000000000000000000000B2 -:100E400000000000000000000000000000000000A2 -:100E50000000000000000000000000000000000092 -:100E60000000000000000000000000000000000082 -:100E70000000000000000000000000000000000072 -:100E80000000000000000000000000000000000062 -:100E90000000000000000000000000000000000052 -:100EA0000000000000000000000000000000000042 -:100EB0000000000000000000000000000000000032 -:100EC0000000000000000000000000000000000022 -:100ED0000000000000000000000000000000000012 -:100EE0000000000000000000000000000000000002 -:100EF00000000000000000000000000000000000F2 -:100F000000000000000000000000000000000000E1 -:100F100000000000000000000000000000000000D1 -:100F200000000000000000000000000000000000C1 -:100F300000000000000000000000000000000000B1 -:100F400000000000000000000000000000000000A1 -:100F50000000000000000000000000000000000091 -:100F60000000000000000000000000000000000081 -:100F70000000000000000000000000000000000071 -:100F80000000000000000000000000000000000061 -:100F90000000000000000000000000000000000051 -:100FA0000000000000000000000000000000000041 -:100FB0000000000000000000000000000000000031 -:100FC0000000000000000000000000000000000021 -:100FD0000000000000000000000000000000000011 -:100FE0000000000000000000000000000000000001 -:100FF00000000000000000000000000000000000F1 -:1010000000000000000000000000000000000000E0 -:1010100000000000000000000000000000000000D0 -:1010200000000000000000000000000020000000A0 -:10103000000084000000000000000000000000002C -:1010400000000000000000000000000000000000A0 -:101050000000000000000000008000000000000010 -:10106000000000000000000000000000000100007F -:101070000000000000000000000000000000400030 -:101080000000000000000000000000000000000060 -:101090000000040000000000040004000000000044 -:1010A0000000000000000000000000000000000040 -:1010B0000000000000000000000000000000000030 -:1010C0000000000000000000000000000000000020 -:1010D0000000000000000000000000080000000008 -:1010E00000000000000000000000000200000000FE -:1010F00000000000000000000000000000000000F0 -:1011000000000000000000000000000000000000DF -:1011100000000000000000000000000000000000CF -:1011200000000000000000000000000000000000BF -:1011300000000000000000000000000000000000AF -:10114000000000000000000000000000000000009F -:10115000000000000000000001000300000010007B -:10116000000000000000000000000000000000007F -:10117000000000000000000000000000000000006F -:10118000000000000000000000000000000000005F -:10119000000000000000000000000000000000004F -:1011A000000000000000000000000000000002003D -:1011B000000000000000000000000000000000002F -:1011C000000004000000000000000000000000001B -:1011D00000000000000000000000100010000000EF -:1011E0008200040004000000000000000000000075 -:1011F00000000000000004000000000000000000EB -:1012000000000000020002000000020000000000D8 -:1012100000000000000000000000000000000000CE -:1012200000000000000000000000000000000000BE -:1012300000000000000000000000000000000000AE -:10124000000000000000000000000000000000009E -:10125000000000000000000000000000000000008E -:10126000000000000000000000000000000000007E -:10127000000000000000000000000000000000006E -:10128000000000000000000000000000000000005E -:10129000000000000000000000000000000000004E -:1012A000000000000000000000000000000000003E -:1012B000000000000000000000000000000000002E -:1012C000000000000000000000000000000000001E -:1012D000000000000000000000000000000000000E -:1012E00000000000000000000000000000000000FE -:1012F00000000000000000000000000000000000EE -:1013000000000000000000000000000000000000DD -:1013100000000000000000000000000000000000CD -:1013200000000000000000000000000000000000BD -:1013300000000000000000000000000000000000AD -:10134000000000000000000000000000000000009D -:10135000000000000000000000000000000000008D -:10136000000000000000010000000000000000007C -:10137000000000000000000000000000000000006D -:10138000000000000000000000000000000000005D -:10139000000000000000000000000000000000004D -:1013A0000000000000000000000008000000000035 -:1013B000000000000000000000000000000000002D -:1013C000000000000000000000000000000000001D -:1013D000000000000000000000000000000000000D -:1013E00000000000000000002000000000000000DD -:1013F00000000000000000000000000000000000ED -:1014000000000000000000000000000000000000DC -:1014100000000000000000000000000000000000CC -:1014200000000000000000000000000000000000BC -:1014300000000000000000000000000000000000AC -:10144000000000000000000000000000000000009C -:1014500000000000A00000000000000000000000EC -:101460000000C000000000000000000000000000BC -:10147000000000000000000000000000000000006C -:10148000000000000000000000000000000000005C -:10149000000000000000000000000000000000004C -:1014A000000000000000000000000000000000003C -:1014B000000000000000000000000000000000002C -:1014C000000000000000000000000000000000001C -:1014D000000000000000000000000000000000000C -:1014E00000000000000000000000000000000000FC -:1014F00000000000000000000000000000000000EC -:1015000000000000000000000000000000000000DB -:1015100000000000000000000000000000000000CB -:1015200000000000000000000000000000000000BB -:1015300000000000000000000000000000000000AB -:10154000000000000000000000000000000000009B -:101550000800000000000000000000000000000083 -:10156000080000000000080000000000000000006B -:10157000000000000000000000000000000000006B -:10158000000000000000000000000000000000005B -:10159000000000000000000000000000000000004B -:1015A000000000000000000000000000000000003B -:1015B000000000000000000000000000000000002B -:1015C000000000000000000000000000000000001B -:1015D000000000000000000000000000000000000B -:1015E00000000000000000000000000000000000FB -:1015F00000000000000000000000000000000000EB -:1016000000000000000000000000000000000000DA -:1016100000000000000000000000000000000000CA -:1016200000000000000000001100000000000000A9 -:1016300000000000000000000000000000040000A6 -:10164000000000000000000000000000000000009A -:10165000000000000000000000000000000000008A -:101660000000000000000000000000000100000079 -:10167000000000000000000000000000000000006A -:10168000000000000000000000000000000000005A -:10169000000000000000000000000000000000004A -:1016A000000000000000000000000000000000003A -:1016B000000000000000000000000000000000002A -:1016C000000000000000000000000000000000001A -:1016D000000000000000000000000000000000000A -:1016E00000000000000000000000000000001100E9 -:1016F00000210000000000000000000000000000C9 -:1017000000000000000000000000000000000000D9 -:1017100000000000000000000000000000000000C9 -:1017200000000000000000000000000000000000B9 -:1017300000000000000000000000000000000000A9 -:101740000000000000000000000000000000000099 -:101750000000000000000000000000000000000089 -:101760000000000000000000000000000000000079 -:101770000005000011030000000000000000000050 -:101780000000000000000000000000000000000059 -:101790000000000000000000000000000000000049 -:1017A0000000000000000000000000000000000039 -:1017B0000000000000000000000000000000000029 -:1017C0000000000000000000000000000000000019 -:1017D0000000000000000000000000000000000009 -:1017E00000000000000000000000000000000000F9 -:1017F00000000000000001000000000000000000E8 -:1018000000000000000000000000000000000000D8 -:1018100000000000000000000000000000000000C8 -:1018200000000000000000000000000000000000B8 -:1018300000000000000000000000000000000000A8 -:101840000000000000000000000000000000000098 -:101850000000000000000000000000000000000088 -:101860000000000000000000000000000000000078 -:101870000000000000002000000100000000000047 -:101880000000000000000000000000000000000058 -:101890000000000000000000000000000000000048 -:1018A0000000000000000000000000000000000038 -:1018B0000000000000000000000000000000000028 -:1018C0000000000000000000000000000000000018 -:1018D0000000000000000000000000000000000008 -:1018E00000000000000000000000000000000000F8 -:1018F00000000000000000000000000805000000DB -:1019000000000000000000000000000000000000D7 -:1019100000000000000000000000000000000000C7 -:1019200000000000000000000000000000000000B7 -:1019300000000000000000000000000000000000A7 -:101940000000000000000000000000000000000097 -:101950000000000000000000000000000000000087 -:101960000000000000000000000000000000000077 -:101970000000000000000000000011000000000056 -:101980000000000000000000000000000000000057 -:101990000000000000000000000000000000000047 -:1019A0000000000000000000000000000000000037 -:1019B0000000000000000000000000000000000027 -:1019C0000000000000000000000000000000000017 -:1019D0000000000000000000000000000000000007 -:1019E00000000000000000000000000000000000F7 -:1019F00000000000000000000000000001000000E6 -:101A000000000000000000000000000000000000D6 -:101A100000000000000000000000000000000000C6 -:101A200000000000000000000000000000000000B6 -:101A300000000000000000000000000000000000A6 -:101A40000000000000000000000000000000000096 -:101A50000000000000000000000000000000000086 -:101A60000000000000000000000000000000000076 -:101A7000000000000000000000000000000000E086 -:101A80000000000000000000000000000000000056 -:101A90000000000000000000000000000000000046 -:101AA0000000000000000000000000000000000036 -:101AB0000000000000000000000000000000000026 -:101AC0000000000000000000000000000000000016 -:101AD0000000000000000000000000000000000006 -:101AE00000000000000000000000000000000000F6 -:101AF00000000000000000000000000000000000E6 -:101B000000000000000000000000000000000000D5 -:101B100000000000000000000000000000000000C5 -:101B200000000000000000000000000000000000B5 -:101B300000000000000000000000000000000000A5 -:101B40000000000000000000000000000000000095 -:101B50000000000000000000000000000000000085 -:101B60000000000000000000000000000000000075 -:101B70000000000000000000000000000000000065 -:101B80000000000000000000000000000000000055 -:101B90000000000000000000000000000000000045 -:101BA0000000000000000000000000000000000035 -:101BB0000000000000000000000000000000000025 -:101BC0000000000000000000000000000000000015 -:101BD0000000000000000000000000000000000005 -:101BE00000000000000000000000000000000000F5 -:101BF00000000000000000000000000000000000E5 -:101C000000000000000000000000000000000000D4 -:101C100000000000000000000000000000000000C4 -:101C200000000000000000000000000000000000B4 -:101C300000000000000000000000000000000000A4 -:101C40000000000000000000000000000000000094 -:101C50000000000000000000000000000000000084 -:101C60000000000000000000000000000000000074 -:101C70000000000000000000000000000000000064 -:101C80000000000000000000000000000000000054 -:101C90000000000000000000000000000000000044 -:101CA0000000000000000000000000000000000034 -:101CB0000000000000000000000000000000000024 -:101CC0000000000000000000000000000000000014 -:101CD0000000000000000000000000000000000004 -:101CE00000000000000000000000000000000000F4 -:101CF00000000000000000000000000000000000E4 -:101D000000000000000000000006000C00000000C1 -:101D100000000000000000000000000000000000C3 -:101D200000000000000000000000000000000000B3 -:101D300000000000000000000000000000000000A3 -:101D40000000000000000000000000000000000093 -:101D50000000000000000000000000000000000083 -:101D60000000000000000000000000000000000073 -:101D70000000000000000000000000000000000063 -:101D800000000000000000000000FF0000FF000055 -:101D90000000000000000000000000000000000043 -:101DA0000000000000000000000000000000000033 -:101DB0000000000000000000000000000000000023 -:101DC0000000000000000000000000000000000013 -:101DD0000000000000000000000000000000000003 -:101DE00000000000000000000000000000000000F3 -:101DF00000000000000000000000000000000000E3 -:101E0000000000000000000000000000FF0000FFD4 -:101E100000000000000000000000000000000000C2 -:101E200000000000000000000000000000000000B2 -:101E300000000000000000000000000000000000A2 -:101E40000000000000000000000000000000000092 -:101E50000000000000000000000000000000000082 -:101E60000000000000000000000000000000000072 -:101E70000000000000000000000000000000000062 -:101E80000000000000000000000000000000FF0053 -:101E900000FF000000000000000000000000000043 -:101EA0000000000000000000000000000000000032 -:101EB0000000000000000000000000000000000022 -:101EC0000000000000000000000000000000000012 -:101ED0000000000000000000000000000000000002 -:101EE00000000000000000000000000000000000F2 -:101EF00000000000000000000000000000000000E2 -:101F000000000000000000000000000000000000D1 -:101F1000FF0000FF000000000000000000000000C3 -:101F200000000000000000000000000000000000B1 -:101F300000000000000000000000000000000000A1 -:101F40000000000000000000000000000000000091 -:101F50000000000000000000000000000000000081 -:101F6000000000000000000000000000000000046D -:101F70000000000000000000000000000000000061 -:101F80000000000000000000000000000000000051 -:101F90000000000000000000000000000000000041 -:101FA000000000000004000000020000000000002B -:101FB0000000000000000000000000000000000021 -:101FC0000000000040000000000001800000000050 -:101FD0000000000000000000000000000000000001 -:101FE00000000000000000000000000000000000F1 -:101FF00000000002000000000000000000000000DF -:1020000000000000000000000000000000000000D0 -:10201000000000000000000200400000000000007E -:1020200000000000000021020090000000000000FD -:10203000000000000000404000400000400200009E -:102040000000000000000000000000002020000050 -:10205000000000000000000000000000000000027E -:102060000000000000000000000000000000000070 -:102070000000000000000000000000000000000060 -:102080000000000000000000000000000000000050 -:102090000000000000000000000000000000000040 -:1020A0000000000000000000000000000000000030 -:1020B0000000000000000000000000000000000020 -:1020C000000000000000010000000000000000000F -:1020D0000000000000000000000000000000000000 -:1020E00000000000000000000000000002000000EE -:1020F00000000000000000000000000000000000E0 -:1021000000000000000000000000000000000000CF -:1021100000000000000000000000000000000000BF -:1021200000000000000004000000000000000000AB -:10213000040000000000000000000000000000009B -:10214000000000000000000010000000000000007F -:10215000000000000000000000000000000000007F -:1021600000000000000000000000000000008000EF -:10217000000000000000000000000000000000005F -:10218000000000000000000000000000000000004F -:10219000000000000000000000000000000000003F -:1021A000000000000000000000000000000000002F -:1021B000000000000000000000000000000000001F -:1021C000000000000000000000000000000000000F -:1021D00000000000000000000000000000000000FF -:1021E00000000000000000000000000000000000EF -:1021F00000000000000000000000000000000000DF -:1022000000000000000000000000000000000000CE -:1022100000000000090000000000000000000000B5 -:1022200000000000000000000000000000000000AE -:10223000000000000000000000000000000000009E -:10224000000000000000000000000000000000008E -:10225000000000000000000000000000000000007E -:102260000000000000000000000000000000080066 -:10227000000000000000000000000000000000005E -:10228000000000000000000000000000000000004E -:10229000000000000000000000000000000000003E -:1022A000000000000000000000000000000000002E -:1022B000000000000000000000000000000000001E -:1022C00000000000000000000040000000000000CE -:1022D0000000010000800000000000000000040079 -:1022E000000000000000000000000000000082006C -:1022F00000000000000000000000000000000000DE -:1023000000000000000000000000000000000000CD -:1023100000000000000000000000000000000000BD -:1023200000000000000000000000000000000000AD -:10233000000000000000000000000000000000009D -:10234000000000000000000000000000000000008D -:102350000000000020000004000000000000000059 -:10236000000000000000000000000000000000006D -:10237000000000000000000000000000000000005D -:10238000000000000000000000000000000000004D -:10239000000000000000000000000000000000003D -:1023A000000000000000000000000000000000002D -:1023B000000000000000000000000000000000001D -:1023C000000000000000000000000000000000000D -:1023D000900000000000000000000000000000006D -:1023E00000000000000000000000000000000000ED -:1023F00000000000000000000000000000000000DD -:1024000000000000000000000000000000000000CC -:1024100000000000000000000000000000000000BC -:102420000000000000000000008400000000000028 -:10243000000000000000000000000000000000009C -:10244000000000000000000000000000000000008C -:10245000000000000000000000000000000000007C -:10246000000000000000000000000000000000006C -:10247000000000000000000000000000000000005C -:10248000000000000000000000000000000000004C -:10249000000000000000000000000000000000003C -:1024A000000000000000000000000000000000002C -:1024B000000000020000000000000000000000001A -:1024C000000000000000000000000000000000000C -:1024D00000000000000000000000000000000000FC -:1024E00000000000000000000000000000000000EC -:1024F00000000000000000000000000000000000DC -:1025000000000000000000000000000000000000CB -:1025100000000000000000000000000000000000BB -:1025200000000000000000000000000000000000AB -:102530000000000000000000000000000004000097 -:10254000000000000000000000000000000000008B -:10255000000000000000000000000000000000007B -:10256000000000000000000000000000000000006B -:10257000000000000000000000000000000000005B -:10258000000000000000000000000000000000004B -:10259000000000000000000000000000000000003B -:1025A000000000000000000000000000000000002B -:1025B000000000000000000000000000000000001B -:1025C000000000000000000000000000000000000B -:1025D00000000000000000000000010000000000FA -:1025E00000000000000000000000000000000000EB -:1025F000000000000000000000000090001000003B -:1026000000100000000000000000000000000000BA -:1026100000000000000000000000000000000000BA -:1026200000000000000000000000000000000000AA -:10263000000000000000000000000000000000009A -:10264000000000000000000000000000000000008A -:102650000000000000000000000000001100210048 -:10266000000000000000000000000000000000006A -:1026700000000000000000000000000000000080DA -:1026800000000080000000000000000000000000CA -:10269000000000000000000000000000000000003A -:1026A000000000000000000000000000000000002A -:1026B000000000000000000000000000000000001A -:1026C000000000000000000000000000000000000A -:1026D00000000000000000000000000000000041B9 -:1026E000090000030080001000000000000000004E -:1026F00000000000000000000000000000000000DA -:1027000000030011808000000000000000000000B5 -:1027100000000000000000000000000000000000B9 -:1027200000000000000000000000000000000000A9 -:102730000000000000000000000000000000000099 -:102740000000000000000000000000000000000089 -:102750000000000000000000000000000000000079 -:1027600000210100000000880001000000000000BE -:102770000000000000000000000000000000000059 -:102780000000020900C0909000000000000000005E -:102790000000000000000000000000000000000039 -:1027A0000000000000000000000000000000000029 -:1027B0000000000000000000000000000000000019 -:1027C0000000000000000000000000000000000009 -:1027D00000000000000000000000000000000000F9 -:1027E0000000000088000000010000000000000060 -:1027F00000000000000000000000000000000000D9 -:1028000000000800000000001000000000000000B0 -:1028100000000000000000000000000000000000B8 -:1028200000000000000000000000000000000000A8 -:102830000000000000000000000000000000000098 -:102840000000000000000000000000000000000088 -:102850000000000000000000000000000000000078 -:10286000000000000000000000004100080000001F -:102870000000000000000000000000000000000058 -:102880000000000080000000000080000000000048 -:102890000000000000000000000000000000000038 -:1028A0000000000000000000000000000000000028 -:1028B0000000000000000000000000000000000018 -:1028C0000000000000000000000000000000000008 -:1028D00000000000000000000000000000000000F8 -:1028E00000000000000000000011000000000000D7 -:1028F00000000000000000000000000000000000D8 -:102900000000000000008000000080008000000047 -:1029100000000000000000000000000000000000B7 -:1029200000000000000000000000000000000000A7 -:102930000000000000000000000000000000000097 -:102940000000000000000000000000000000000087 -:102950000000000000000000000000000000000077 -:102960000000000000000000000000010000000066 -:102970000000000000000000000000000000000057 -:10298000000000000000000010008800100010008F -:102990000000000000000000000000000000000037 -:1029A0000000000000000000000000000000000027 -:1029B0000000000000000000000000000000000017 -:1029C0000000000000000000000000000000000007 -:1029D00000000000000000000000000000000000F7 -:1029E00000000000000000000000000000E0000007 -:1029F0008141500A00E007000000000000000000D4 -:102A000000000000000000000000001100000700AE -:102A100000000000000000000000000000000000B6 -:102A200000000000000000000000000000000000A6 -:102A30000000000000000000000000000000000096 -:102A40000000000000000000000000000000000086 -:102A50000000000000000000000000000000000076 -:102A60000000000000000000000000000000000066 -:102A70000000000000000000000000000000000056 -:102A8000000000000000000000000000FF00FFC781 -:102A90000000000000000000000000000000000036 -:102AA0000000000000000000000000000000000026 -:102AB0000000000000000000000000000000000016 -:102AC0000000000000000000000000000000000006 -:102AD00000000000000000000000000000000000F6 -:102AE00000000000000000000000000000000000E6 -:102AF00000000000000000000000000000000000D6 -:102B00000000000000000000000000000000FF00C6 -:102B1000FF070000000000000000000000000000AF -:102B200000000000000000000000000000000000A5 -:102B30000000000000000000000000000000000095 -:102B40000000000000000000000000000000000085 -:102B50000000000000000000000000000000000075 -:102B60000000000000000000000000000000000065 -:102B70000000000000000000000000000000000055 -:102B80000000000000000000000000000000000045 -:102B90000000000000000000000000000000000035 -:102BA0000000000000000000000000000000000025 -:102BB0000000000000000000000000000000000015 -:102BC0000000000000000000000000000000000005 -:102BD00000000000000000000000000000000000F5 -:102BE00000000000000000000000000000000000E5 -:102BF00000000000000000000000000000000000D5 -:102C000000000000000000000000000000000000C4 -:102C100000003CBDFFFF0F0FFFFF000000000000A1 -:102C200000000000000000000000000000000000A4 -:102C30000000000000000000000000000000000094 -:102C40000000000000000000000000000000000084 -:102C50000000000000000000000000000000000074 -:102C60000000000000000000000000000000000064 -:102C70000000000000000000000000000000000054 -:102C80000000000000000000000000000000000044 -:102C9000000000003C3CFFFF0F0FFFFF00000000A2 -:102CA0000000000000000000000000000000000024 -:102CB0000000000000000000000000000000000014 -:102CC0000000000000000000000000000000000004 -:102CD00000000000000000000000000000000000F4 -:102CE00000000000000000000000000000000000E4 -:102CF00000000000000000400006000C000005611C -:102D00000036C00D000000000000000000000000C0 -:102D10000000000000000000303000000000000053 -:102D200000000000000000000000000000000000A3 -:102D30000000000000000000000000000000000093 -:102D40000000000000000000000000000000000083 -:102D50000000000000000000000000000000000073 -:102D60000000000000000000000000000000000063 -:102D7000000000000000000000005555FFFF0000AB -:102D80000000000000000000000000000000000043 -:102D90000000000000000000000000000000000033 -:102DA0000000000000000000000000000000000023 -:102DB0000000000000000000000000000000000013 -:102DC0000000000000000000000000000000000003 -:102DD00000000000000000000000000000000000F3 -:102DE00000000000000000000000000000000000E3 -:102DF0000000000000000000000000005555000029 -:102E000000000000000000000000000000000000C2 -:102E100000000000000000000000000000000000B2 -:102E200000000000000000000000000000000000A2 -:102E30000000000000000000000000000000000092 -:102E40000000000000000000000000000000000082 -:102E50000000000000000000000000000000000072 -:102E60000000000000000000000000000000000062 -:102E70000000000000000000000000000000000052 -:102E8000F0F0000000000000000000000000000062 -:102E90000000000000000000000000000000000032 -:102EA0000000000000000000000000000000000022 -:102EB0000000000000000000000000000000000012 -:102EC0000000000000000000000000000000000002 -:102ED00000000000000000000000000000000000F2 -:102EE00000000000000000000000000000000000E2 -:102EF00000000000000000000000000000000000D2 -:102F00000000F0F0000000000000000000000000E1 -:102F100000000000000000000000000000000000B1 -:102F20000000000000008800000000000000000019 -:102F30000000000000000000000000000000000091 -:102F4000000000000000040000000000000000007D -:102F50000000000000000000000000000000000071 -:102F60000000000000000000000000000000000061 -:102F70000000000000000000000000000000000051 -:102F80000000000000000000000000000000000041 -:102F90000000000000000000000000000000000031 -:102FA0000000000000000000000000000000000021 -:102FB0000000000000000000000000000000000011 -:102FC0000000000000000000000000000000000001 -:102FD00000000000000000000000000000000000F1 -:102FE00000000000000000000000410000000000A0 -:102FF00000000000000000000000000000000000D1 -:1030000000000000000000000000000000000000C0 -:1030100000000000000000000000000000000000B0 -:1030200000000000000000000000000000000000A0 -:103030000000000000000000000000000000000090 -:103040000000000000000000000000000000000080 -:10305000020000000000000000000200000000006C -:10306000020000000000000000000000000000005E -:10307000000000000000000000000000020004004A -:103080000000000000000000000000000000000040 -:10309000000004000000000000000000000000002C -:1030A0000000000000000000000000000000000020 -:1030B0000000000000000000000000000000000010 -:1030C0000000000000000000000000000000000000 -:1030D00002000000000000000000000000000000EE -:1030E00000000000040004000000040000000400D0 -:1030F00004000000000000000000000000000000CC -:1031000000000000000000000000000000000400BB -:1031100004000000000000000000000000000000AB -:10312000000000000000000000000000000000009F -:10313000000000000000000000000000000000008F -:10314000000000000000000000000000000000007F -:10315000000000000000000000000000000000006F -:10316000000000000000000000000000000000005F -:10317000000000000000000000000000000000004F -:10318000000000000000000000000000000000003F -:10319000000000000000000000000000000000002F -:1031A000000000000000000000000000000000001F -:1031B000000000000082000000000000000000008D -:1031C00000000000000000000000000000000000FF -:1031D00000000000000000000000000000000000EF -:1031E00000000000000000000000000000000000DF -:1031F00000000000000000000000000000000000CF -:1032000000000300000000000000000000000000BB -:1032100000000000000000000000000000000000AE -:10322000000000000000000000000000000000009E -:10323000000000000000000000000000000000008E -:10324000000000000000000000000000000000007E -:10325000000000000000000000000000000000006E -:10326000000000000000000000000000000000005E -:103270000000000008000000000000000000000046 -:10328000000000000000000000000000000000003E -:10329000000000000000000000000000000000002E -:1032A000000000000000000000000000000000001E -:1032B000000000000000000000000000000000000E -:1032C00000000000000000000000000000000000FE -:1032D00000000000000000000000000000000000EE -:1032E00000000000000000000000000000000000DE -:1032F00000000000000000000000000000000000CE -:1033000000000000000000000000000000000000BD -:1033100000000000000000000000000000000000AD -:10332000000000000000000000000000000000009D -:10333000000000000000000000000000000000008D -:103340000009000000000000000000000000000074 -:10335000000000000000000000000000000000006D -:10336000000000000000000000000000000000005D -:10337000000000000000000000000000000000004D -:10338000000000000000000000000000000000003D -:10339000000000000000000000000000000000002D -:1033A000000000000000000000000000000000001D -:1033B000000000000000000000000000000000000D -:1033C00000000000000000000000000000000000FD -:1033D00000000000000000000800000000000000E5 -:1033E00000000000000000000000000000000000DD -:1033F00000000000000000000000000000000000CD -:1034000000000000000000000000000000000000BC -:1034100000C0000000000084000000000000000068 -:103420000500000000000000000000000000000097 -:103430000000000000000004400000000000000048 -:10344000000000000000100000000000000000006C -:10345000000000000000000000000000000000006C -:10346000000000000000000000000000000000005C -:10347000000000000000000000000000000000004C -:10348000000000000000000000000000000000003C -:10349000000000000000000000000000000000002C -:1034A000000200000000000000000000000000001A -:1034B000000000000000000000000000000000000C -:1034C000008200000000000010000000000000006A -:1034D00021000000000000000000000000000000CB -:1034E00000000000000000000000000000000000DC -:1034F00000000000090000000000000000000000C3 -:1035000000000000000000000000000000000000BB -:1035100000000000000000000000000000000000AB -:10352000000000000000000000000000000000009B -:10353000000000000000000000000000000000008B -:10354000000000000000000000000000000000007B -:10355000000000000000000000000000000000006B -:10356000000000000000000000000000000000005B -:10357000000000000000000000000000000000004B -:10358000000000000000000000000000000000003B -:10359000000000000000000000000000000000002B -:1035A000000000000000000000000000000000001B -:1035B000000000000000000000000000000000000B -:1035C00000000000000000000000000000000000FB -:1035D00000000000000000000000000000000000EB -:1035E00000000000000000000000000000000000DB -:1035F00000000000000000000000000000000000CB -:1036000000000000000000000000000000000000BA -:1036100000000000000000000000000000000000AA -:10362000000000000000000000000000000000009A -:10363000000000000000000000000000000000008A -:10364000000000000000000000000000000000007A -:10365000000000000000000000000000000000006A -:10366000000000000000000000000000000000005A -:10367000000000000000000000000000000000004A -:10368000000000000000000000000000000000003A -:10369000000000000000000000000000000000002A -:1036A000000000000000000000000000000000001A -:1036B000000000000000000000000000000000000A -:1036C00000000000000000000000000000000000FA -:1036D00000000000000000000000000000000000EA -:1036E00000000000000000000000000000000000DA -:1036F00000000000000000000000000000000000CA -:1037000000000000000000000000000000000000B9 -:1037100000000000000000000000000000000000A9 -:103720000000000000000000000000000000000099 -:103730000000000000000000000000000000000089 -:103740000000000000000000000000000000000079 -:103750000000000000000000000000000000000069 -:103760000000000000000000000000000000000059 -:103770000000000000000000000000000000000049 -:103780000000000000000000000000000000000039 -:103790000000000000000000000000000000000029 -:1037A0000000000000000000000000000000000019 -:1037B0000000000000000000000000000000000009 -:1037C00000000000000000000000000000000000F9 -:1037D00000000000000000000000000000000000E9 -:1037E00000000000000000000000000000000000D9 -:1037F00000000000000000000000000000000000C9 -:1038000000000000000000000000000000000000B8 -:1038100000000000000000000000000000000000A8 -:103820000000000000000000000000000000000098 -:103830000000000000000000000000000000000088 -:103840000000000000000000000000000000000078 -:103850000000000000000000000000000000000068 -:103860000000000000000000000000000000000058 -:103870000000000000000000000000000000000048 -:103880000000000000000000000000000000000038 -:103890000000000000000000000000000000000028 -:1038A0000000000000000000000000000000000018 -:1038B0000000000000000000000000000000000008 -:1038C00000000000000000000000000000000000F8 -:1038D00000000000000000000000000000000000E8 -:1038E00000000000000000000000000000000000D8 -:1038F00000000000000000000000000000000000C8 -:1039000000000000000000000000000000000000B7 -:1039100000000000000000000000000000000000A7 -:103920000000000000000000000000000000000097 -:103930000000000000000000000000000000000087 -:103940000000000000000000000000000000000077 -:103950000000000000000000000000000000000067 -:103960000000000000000000000000000000000057 -:103970000000000000000000000000000000000047 -:103980000000000000000000000000000000000037 -:103990000000000000000000000000000000000027 -:1039A0000000000000000000000000000000000017 -:1039B0000000000000000000000000000000000007 -:1039C00000000000000000000000000000000000F7 -:1039D00000000000000000000000000000000000E7 -:1039E00000000000000000000000000000000000D7 -:1039F00000000000000000000000000000000000C7 -:103A000000000000000000000000000000000000B6 -:103A100000000000000000000000000000000000A6 -:103A20000000000000000000000000000000000096 -:103A30000000000000000000000000000000000086 -:103A40000000000000000000000000000000000076 -:103A50000000000000000000000000000000000066 -:103A60000000000000000000000000000000000056 -:103A70000000000000000000000000000000000046 -:103A80000000000000000000000000000000000036 -:103A90000000000000000000000000000000000026 -:103AA0000000000000000000000000000000000016 -:103AB0000000000000000000000000000000000006 -:103AC00000000000000000000000000000000000F6 -:103AD00000000000000000000000000000000000E6 -:103AE00000000000000000000000000000000000D6 -:103AF00000000000000000000000000000000000C6 -:103B000000000000000000000000000000000000B5 -:103B100000000000000000000000000000000000A5 -:103B20000000000000000000000000000000000095 -:103B30000000000000000000000000000000000085 -:103B40000000000000000000000000000000000075 -:103B50000000000000000000000000000000000065 -:103B60000000000000000000000000000000000055 -:103B70000000000000000000000000000000000045 -:103B80000000000000000000000000000000000035 -:103B90000000000000000000000000000000000025 -:103BA0000000000000000000000000000000000015 -:103BB0000000000000000000000000000000000005 -:103BC00000000000000000000000000000000000F5 -:103BD00000000000000000000000000000000000E5 -:103BE00000000000000000000000000000000000D5 -:103BF00000000000000000000000000000000000C5 -:103C000000000000000000000000000000000000B4 -:103C100000000000000000000000000000000000A4 -:103C20000000000000000000000000000000000094 -:103C30000000000000000000000000000000000084 -:103C40000000000000000000000000000000000074 -:103C50000000000000000000000000000000000064 -:103C60000000000000000000000000000000000054 -:103C70000000000000000000000000000000000044 -:103C80000000000000000000000000000000000034 -:103C90000000000000000000000000000000000024 -:103CA0000000000000000000000000000000000014 -:103CB0000000000000000000000000000000000004 -:103CC00000000000000000000000000000000000F4 -:103CD00000000000000000000000000000000000E4 -:103CE00000000000000000000000000000000000D4 -:103CF00000000000000000000000000000000000C4 -:103D000000000000000000000000000000000000B3 -:103D100000000000000000000000000000000000A3 -:103D20000000000000000000000000000000000093 -:103D30000000000000000000000000000000000083 -:103D40000000000000000000000000000000000073 -:103D50000000000000000000000000000000000063 -:103D60000000000000000000000000000000000053 -:103D70000000000000000000000000000000000043 -:103D80000000000000000000000000000000000033 -:103D90000000000000000000000000000000000023 -:103DA0000000000000000000000000000000000013 -:103DB0000000000000000000000000000000000003 -:103DC00000000000000000000000000000000000F3 -:103DD00000000000000000000000000000000000E3 -:103DE00000000000000000000000000000000000D3 -:103DF00000000000000000000000000000000000C3 -:103E000000000000000000000000000000000000B2 -:103E100000000000000000000000000000000000A2 -:103E20000000000000000000000000000000000092 -:103E30000000000000000000000000000000000082 -:103E40000000000000000000000000000000000072 -:103E50000000000000000000000000000000000062 -:103E60000000000000000000000000000000200032 -:103E70000004C0000800080004A0000000000000CA -:103E80000000000000000000000000000000000032 -:103E90000000000020000000000000000200000000 -:103EA000080000000000000000000000000000000A -:103EB00000040000000000000000000000000000FE -:103EC00000000000000000000000000000000000F2 -:103ED00000000000000000000000000000000000E2 -:103EE00000000000000000000000000000000000D2 -:103EF00080000001000080008000801100000000B0 -:103F000000000000100000000000000000000000A1 -:103F10000000000000000000000000000000890018 -:103F20000900C104000009000000000000000000BA -:103F300009A00000000000000000000000000000D8 -:103F40000000000000000000000000000000000071 -:103F50000000000000000000000000000000000061 -:103F60000000000000000000000000000000000051 -:103F70000000000000000100000000000000000040 -:103F80000000000000000000000000000000000031 -:103F90000000000000000000000000000000000021 -:103FA0000000010000000000000000000000000010 -:103FB00000000000000000000200000001000000FE -:103FC00000000000000000000000000000000000F1 -:103FD0008800000000000000000000000000000059 -:103FE00000000000000000000000000000000000D1 -:103FF00000000000000000000800000000000000B9 -:1040000000000000000000000000000000000000B0 -:1040100000000000000000000000000000000000A0 -:104020000000000040000000000000000000000050 -:104030000000040000000000000004000000020076 -:104040000000000000000000000000000000000070 -:10405000000004000000000000000000000000005C -:10406000020000000000000000000000000000004E -:104070000000000000000000000000000000000040 -:104080000000000000000000000000000000000030 -:104090000000000000000000000000000000000020 -:1040A0000000000000008800000000000400000084 -:1040B0000000000000000000000000000000000000 -:1040C0000000000000000000000000000000A00050 -:1040D00000000000000000000000000000000000E0 -:1040E00000000000000020000000000000000000B0 -:1040F00000000000000000000000000000000000C0 -:1041000000000000000000000000000000000000AF -:10411000000000000000000000000000000000009F -:104120000000000009000000000000000000000086 -:10413000000000000000000000000000000000007F -:104140000000000000000000000000000800000067 -:10415000000000000000000000000000000000005F -:10416000000000000000000000000000000000004F -:104170000000000000000020000000040105000015 -:104180000000000000100000C0000000000000005F -:10419000000000000000000082000800000008008D -:1041A0000000000000000000C000C000000000008F -:1041B00000000000000000000000000000000000FF -:1041C0000000000000000000C0000000000000002F -:1041D00000000000000000000000000000000000DF -:1041E00000000000000000000000000000000000CF -:1041F000000000000000000000000000000120009E -:10420000000021000000410100000000000000004B -:10421000000000000000000000000000000000009E -:10422000000000000000000000000000000000008E -:10423000000000000000000000000000000000007E -:10424000000000000000000000000000000000006E -:10425000000000000000000000000000000000005E -:10426000000000000000000000000000000000004E -:10427000000000000000000000002000400040801E -:10428000900000000000040000000000000000009A -:10429000000000000000000000000000000000001E -:1042A00000000000000008000800000000000000FE -:1042B00000000001000000000000000000000000FD -:1042C00000000000000008000000000000000000E6 -:1042D00000000000000000000000000000000000DE -:1042E00000000000000000000000000000000000CE -:1042F000000000000000000000000000800000003E -:104300000004000000000000800000000000000029 -:10431000000000000000000000000000000000009D -:10432000000000000000000000000000000000008D -:10433000000000000000000000000000000000007D -:10434000000000000000000000000000000000006D -:10435000000000000000000000000000000000005D -:10436000000000000000000000000000000000024B -:1043700000000000000000000000000088000000B5 -:1043800020008400018000000000002000200000C8 -:10439000000000000000000000000000000000001D -:1043A000000000000000000000000000000000000D -:1043B00000000000000200000000000000000000FB -:1043C00000000000000000000000000000000000ED -:1043D00000000800000000000000000000000000D5 -:1043E00000000000000000000000000000000000CD -:1043F00000000000000000000000000000000000BD -:1044000000008000000020400000000000010001CA -:10441000000000000000000000000000000000009C -:10442000000000000000000000000000000000008C -:10443000000000000000000100000000000000007B -:10444000000000000000000000000000000000006C -:10445000000000000000000000000000000000005C -:10446000000000000000000000000000000000004C -:10447000000000000000000000000000000000003C -:10448000000001A0202000900008020000000008A9 -:10449000009000000000000000000000000000008C -:1044A000000000000000000000000000000000000C -:1044B000000000004000400000000000000000007C -:1044C00000000000000000000000000000000000EC -:1044D00000000000000000000000000000000000DC -:1044E00000000000000000000000000000000000CC -:1044F00000000000000000000000000000000000BC -:104500000000000011808080088000808000000092 -:10451000000000800000000000000000000000001B -:10452000000000000000000000000000000000008B -:1045300000000000000080000000000000000000FB -:10454000000000000000000000000000000000006B -:10455000000000000000000000000000000000005B -:10456000000000000000000000000000000000004B -:10457000000000000000000000000000000000003B -:1045800000000000000000100000004100000000DA -:10459000800080008080000000800000000000009B -:1045A000000000000000000000000000000000000B -:1045B000000000000000900083009009808000004F -:1045C00000000000000000000000000000000000EB -:1045D00000000000000000000000000000000000DB -:1045E00000000000000000000000000000000000CB -:1045F00000000000000000000000000000000000BB -:104600000000000000000000200190000001880070 -:1046100020000400A0004040000000020000000054 -:10462000000000000000000000000000000000008A -:104630000000000000000000C100C000C101C082F5 -:10464000000000000000000000000000000000006A -:10465000000000000000000000000000000000005A -:10466000000000000000000000000000000000004A -:10467000000000000000000000000000000000003A -:10468000000000000000000000004000C0008200A8 -:10469000A00040900020C004A02000000000000006 -:1046A000000000000000000000000000000000000A -:1046B00000000000000000000000000000000001F9 -:1046C00000000001000000000000000000000000E9 -:1046D00000000000000000000000000000000000DA -:1046E00000000000000000000000000000000000CA -:1046F00000000000000000000000000000000000BA -:1047000000000000000000000000000080008000A9 -:104710008000850080000000808080000000000094 -:104720000000000000000000000000000000000089 -:104730000000000000000000000000000000000376 -:104740000021002000010000000000000000000027 -:104750000000000000000000000000000000000059 -:104760000000000000000000000000000000000049 -:104770000000000000000000000000000000000039 -:104780000000000000000000000000000000000029 -:104790000011008000000003802100800000000064 -:1047A0000000000000000000000000000000000009 -:1047B0000000000000000000000000000080000079 -:1047C00000050000004000010000000000000000A3 -:1047D0000000000000000000000000000000800059 -:1047E00000000000000000000000000000000000C9 -:1047F00000000000000000000000000000000000B9 -:1048000000000000000000000000000000000000A8 -:1048100008008821000888000000A000000288002D -:104820000000000000000000000000000000000088 -:104830000000000000000000000000000000000870 -:104840000040000100A0000800010000000000007E -:1048500000000000000000000000000084000000D4 -:104860000200000000000000000000000000000046 -:104870000000000000000000000000000000000038 -:104880000000000000000000000000000000000028 -:1048900000005000008800008281000A00004100F2 -:1048A0000006000000000000000000000000000002 -:1048B00000000000000000000000000000000000F8 -:1048C00000000000000041000000000000000000A7 -:1048D00000000000000000000000000000000000D8 -:1048E00000000000000000000000000000000000C8 -:1048F00000000000000000000000000000000000B8 -:1049000000000000000000000000000000000000A7 -:10491000000000003C000000000000003C003C00E3 -:10492000000008000000000000000000000000007F -:104930000000000000000000000000000000000077 -:104940000000000000000000000000000000000067 -:10495000000000000000000000000000000000C394 -:1049600000C3000000000000000000000000000084 -:104970000000000000000000000000000000000037 -:104980000000000000000000000000000000000027 -:104990000000000000003C000000000000003C009F -:1049A0003C000000080000000000000000000000C3 -:1049B00000000000000000000000000000000000F7 -:1049C00000000000000000000000000000000000E7 -:1049D00000000000000000000000000000000000D7 -:1049E00000C300C300000000000000000000000041 -:1049F00000000000000000000000000000000000B7 -:104A000000000000000000000000000000000000A6 -:104A10000000000000000000000000000000000096 -:104A20000000000000000000000000000000000086 -:104A30000000000000000000000000000000000076 -:104A400000000000000000000000000000802006C0 -:104A50000000000000000000000000000000000056 -:104A60000000000000000000000000000000000046 -:104A70000000000000000000000000000000000036 -:104A80000000000000000000000000000000000026 -:104A900000000000000000000000FFFFFFFF00001A -:104AA0000000000000000000000000000000000006 -:104AB00000000000000000000000000000000000F6 -:104AC00000000000000000000000000000000000E6 -:104AD00000000000000000000000000000000000D6 -:104AE00000000000000000000000000000000000C6 -:104AF00000000000000000000000000000000000B6 -:104B000000000000000000000000000000000000A5 -:104B1000000000000000000000000000FFFFBFFFD9 -:104B2000040400004040404000C0000000000000BD -:104B30000000000000000000000000000000000075 -:104B40000000000000000000000000000000000065 -:104B50000000000000000000000000000000000055 -:104B60000000000000000000000000000000000045 -:104B70000000000000000000000000000000000035 -:104B80000000000000000000000000000000000025 -:104B900000000000000000000000000000000061B4 -:104BA0004007800D000000000028050000A0000064 -:104BB00000000000000000000000000000000000F5 -:104BC0000000000000000000000000000000306154 -:104BD0000006000D000500000000000000000000BD -:104BE0000000000000000000800000000000000045 -:104BF00000000000000000000000000000000000B5 -:104C000000000000000000000000000000000000A4 -:104C10000000000000000000000000000000000094 -:104C20000000000000000000000000000000000084 -:104C30000000000000000000000000000000000074 -:104C40000000000000000000000000000000000064 -:104C5000000000000005000000000000000000004F -:104C60000000000000000000000000000000000044 -:104C70000000000000000000000000000000000034 -:104C80000000000000000000000000000000000024 -:104C90000000000000000000000000000000000014 -:104CA0000000000000000000000000000000000004 -:104CB00000000000000000000000000000000000F4 -:104CC00000000000000000000000000000000000E4 -:104CD00000000000000000050000000000000000CF -:104CE00000000000000000000000000000000000C4 -:104CF00000000000000000000000000000000000B4 -:104D000000000000000000000000000000000000A3 -:104D10000000000000000000000000000000000093 -:104D20000000000000000000000000000000000083 -:104D30000000000000000000000000000000000073 -:104D40000000000000000000000000000000000063 -:104D50000000000000000000000000000000000053 -:104D60000000000000000000000000000000000043 -:104D70000000000000000000000000000000000033 -:104D80000000000000000000000000000000000023 -:104D90000000000000000000000000000000000013 -:104DA0000000000000000000000000000000000003 -:104DB00000000000000000000000000000000000F3 -:104DC00000000000000000000000000000000000E3 -:104DD0000000000000000000000000400040000053 -:104DE00000000000000000000000000000000000C3 -:104DF00000000000000000000000000000000000B3 -:104E000000000000000000000000000000000000A2 -:104E10000000000000000000000000000000000092 -:104E20000000000000000000000000000000000082 -:104E300000000000200084000000840000008400C6 -:104E40000000000000000000000000000000000062 -:104E50000000000020000000000000000000000032 -:104E60000001000000000000000000000000000041 -:104E70000000000000002000000000000000000012 -:104E80000000000000000000000000000000000022 -:104E90000000000000000000000000000000000012 -:104EA0000000000000000000000000000000000002 -:104EB00000000000000000000000000000000000F2 -:104EC00000000000000000000000000000000000E2 -:104ED0000000000000000000000000000000009042 -:104EE00000000000000000000000000000000000C2 -:104EF00000000000000000000000000000000000B2 -:104F000000000000000000000000000000000000A1 -:104F10000000000000000000000000001100000080 -:104F2000000000000000000000000000040000007D -:104F30000000000000000000000000000100000070 -:104F40000000000000000000000000000000000061 -:104F5000000000000000000004000000000000004D -:104F60000000000000000000000000000000000041 -:104F7000000000000400000000000000000000002D -:104F80000000000000000000000000000000000021 -:104F90000000000000000000000000000000000011 -:104FA00000000200000000000000000000000000FF -:104FB00004000000000000000000000000001000DD -:104FC00000000000000000000000000000000000E1 -:104FD00002000000020000000000000000000000CD -:104FE00000000000000000000008000000000000B9 -:104FF00004000400000000000400040000000000A1 -:10500000000000000000000000040000000000009C -:105010000000000000000000040004000000000088 -:105020000000000000000000000000000000000080 -:105030000000000000000000000000000000000070 -:105040000000000000000000000800000000000058 -:105050000000000000000000000000000000000050 -:105060000000000000000000000000000000000040 -:105070000000000000000000000000000000000030 -:105080000000000000000000000000000000000020 -:105090000000000000000000000000000000000010 -:1050A0000000000000000000900003000000080065 -:1050B00000001100090000000900000000000000CD -:1050C00000000000000000000000000000000000E0 -:1050D00000000000000000000000000000000000D0 -:1050E00008000000000000000000000000000000B8 -:1050F00000000000000000000000000000000000B0 -:10510000000000000000000000000000000000009F -:10511000000000000000000000000000000000008F -:10512000000000000000000000000000000000007F -:1051300000000000000000000000080000800000E7 -:1051400000000000000000000100008000000000DE -:10515000000000000000000000000000000000004F -:10516000000000000000000000000000000000003F -:10517000000000000000000000000000000000002F -:10518000000000000000000000000000000000001F -:10519000000000000000000000000000000000000F -:1051A00000000800000000000000000000000000F7 -:1051B00000000000000000000000000000000020CF -:1051C00000000000000000000000200000040000BB -:1051D00000000000000000000000000000000000CF -:1051E00000000000000000000000000000000000BF -:1051F00000000000000000000000000000000000AF -:10520000000000000000000000000000000000009E -:10521000000000000000000000000000000000008E -:10522000000000000000000000000000000000007E -:10523000000000000000000908000000000000005D -:1052400000000000000090000000000000000000CE -:10525000000000000000000000000000000000004E -:10526000000000000000000000000000000000003E -:10527000000100000000000000000000000000002D -:10528000000000000000000000000000000000001E -:10529000000000000000000000000000000000000E -:1052A00000000000000000000000000000000000FE -:1052B00000000000000000000000119000000090BD -:1052C000098400A000000000410000000000000070 -:1052D00000000000000000000000000000000000CE -:1052E00000000000000000000000000008000000B6 -:1052F00008000000000000000000000000000000A6 -:10530000000000000000000000000000000000009D -:10531000000000000000000000000000000000008D -:10532000000000000000000000000000000000007D -:1053300000000000000000000000000088000000E5 -:1053400000800100000000800100008200000000D9 -:10535000000000000000000000000000000000004D -:10536000000000000000000000000000000000003D -:10537000000000000000000000000000000000002D -:10538000000000000000000000000000000000001D -:10539000000000000000000000000000000000000D -:1053A00000000000000000000000000000000000FD -:1053B00000000000000000000000210000000000CC -:1053C0000000112004000000002004000020000064 -:1053D00000000000000000000000000000000000CD -:1053E00000000000000000000000000000000000BD -:1053F00000000000000000000000000000000000AD -:10540000000000000000000000000000000000009C -:10541000000000000000000000000000000000008C -:10542000000000000000000000000000000000007C -:10543000000000000000000000000000000000006C -:10544000000000000000000000C00090000000000C -:10545000010000000000000000000000000000004B -:10546000000000000000000000000000000000003C -:10547000000000000000000000000000000000002C -:10548000000000000000000000000000000000001C -:10549000000000000000000000000000000000000C -:1054A00000000000000000000000000000000000FC -:1054B00000000000000000000000000000000000EC -:1054C00000000000000000000000058000800000D7 -:1054D000000011002100000000000000000000009A -:1054E00000000000000000000000000000000000BC -:1054F00000000000000000000000000000000000AC -:10550000000000000000000000000000000000009B -:10551000000000000000000000000000000000008B -:10552000000000000000000000000000000000007B -:10553000000000000000000000000000000000006B -:1055400000000000000000008000808000000000DB -:10555000800080800041090000030000000000007E -:10556000000000000000000000000000000000003B -:10557000000000000000000000000000000000002B -:10558000000000000000000000000000000000001B -:10559000000000000000000000000000000000000B -:1055A00000000000000000000000000000000000FB -:1055B00000000000000000000000000000000000EB -:1055C000000000000000000000008400C090000007 -:1055D00000008400C09000010100000000000000F5 -:1055E00000000000000000000000000000000000BB -:1055F00000000000000000000000000000000000AB -:10560000000000000000000000000000000000009A -:10561000000000000000000000000000000000008A -:10562000000000000000000000000000000000007A -:10563000000000000000000000000000000000006A -:1056400000000000000000000000000000900000CA -:1056500000000000009000C0000088000000000072 -:10566000000000000000000000000000000000003A -:10567000000000000000000000000000000000002A -:10568000000000000000000000000000000000001A -:10569000000000000000000000000000000000000A -:1056A00000000000000000000000000000000000FA -:1056B00000000000000000000000000000000000EA -:1056C000000000000000000000000000000000805A -:1056D00000000000000000800080000000000000CA -:1056E000400000000000000000000000000000007A -:1056F00000000000000000000000000000000000AA -:105700000000000000000000000000000000000099 -:105710000000000000000000000000000000000089 -:105720000000000000000000000000000000000079 -:105730000000000000000000000000000000000069 -:105740000000000000000000000000000040000019 -:105750000000000080118000000000000000001127 -:105760000000000000000000000000000000000039 -:105770000000000000000000000000000000000029 -:105780000000000000000000000000000000000019 -:105790000000000000000000000000000000000009 -:1057A00000000000000000000000000000000000F9 -:1057B00000000000000000000000000000000000E9 -:1057C00000000000000000000000000000000001D8 -:1057D000000000000000C0012000000000000000E8 -:1057E00000010000000000000000000000000000B8 -:1057F00000000000000000000000000000000000A9 -:105800000000000000000000000000000000000098 -:105810000000000000000000000000000000000088 -:105820000000000000000000000000000000000078 -:105830000000000000000000000000000000000068 -:105840000000000000000000000000000000000058 -:105850000081000041000000004100004100000004 -:10586000000000E0000081000000000000000000D7 -:105870000000000000000000000000000000000028 -:105880000000000000000000000000000000000018 -:105890000000000000000000000000000000000008 -:1058A00000000000000000000000000000000000F8 -:1058B00000000000000000000000000000000000E8 -:1058C00000000000000000000000000000000000D8 -:1058D00000000000000000FF00FF000000FF0000CB -:1058E00000FF0000000000000000000000000000B9 -:1058F00000000000000000000000000000000000A8 -:105900000000000000000000000000000000000097 -:105910000000000000000000000000000000000087 -:105920000000000000000000000000000000000077 -:105930000000000000000000000000000000000067 -:105940000000000000000000000000000000000057 -:10595000000000000000000000FF00FF000000FF4A -:10596000000000FF00000000000000000000000038 -:105970000000000000000000000000000000000027 -:105980000000000000000000000000000000000017 -:105990000000000000000000000000000000000007 -:1059A00000000000000000000000000000000000F7 -:1059B00000000000000000000000000000000000E7 -:1059C00000000000000000000000000000000000D7 -:1059D00000000000000000000000FF000000FF00C9 -:1059E0000000FF00000000000000000000000000B8 -:1059F00000000000000000000000000000000000A7 -:105A00000000000000000000000000000000000096 -:105A10000000000000000000000000000000000086 -:105A20000000000000000000000000000000000076 -:105A30000000000000000000000000000000000066 -:105A40000000000000000000000000000000000056 -:105A5000000000000000000000000000FF00000047 -:105A6000FF000000FF000000000000000000000038 -:105A70000000000000000000000000000000000026 -:105A80000000000000000000000000000000000016 -:105A90000000000000000000000000000000000006 -:105AA00000000000000000000000000000000000F6 -:105AB00000000000000000000000000000000000E6 -:105AC00000000000000000000000000000000000D6 -:105AD00000000000000000000000000000300C008A -:105AE00012C0038203300C008AC000600006000C64 -:105AF00000000000000000000000000000000000A6 -:105B00000000000000000000000000000000000095 -:105B10000000000000000000000000000000000085 -:105B20000000000000000000000000000000000075 -:105B30000000000000000000000000000000000065 -:105B40000000000000000000000000000000000055 -:105B50000000000000000000000000000000000045 -:105B60000000000000000000000000000000000035 -:105B7000FFFF000000000000000000000000000027 -:105B80000000000000000000000000000000000015 -:105B90000000000000000000000000000000000005 -:105BA00000000000000000000000000000000000F5 -:105BB00000000000000000000000000000000000E5 -:105BC00000000000000000000000000000000000D5 -:105BD00000000000000000000000000000000000C5 -:105BE00000000000000000000000000000000000B5 -:105BF00000000000000000000000000000000000A5 -:105C00000000000000000000000000000000000094 -:105C10000000000000000000000000000000000084 -:105C20000000000000000000000000000000000074 -:105C30000000000000000000000000000000000064 -:105C40000000000000000000000000000000000054 -:105C50000000000000000000000000000000000044 -:105C60000000000000000000000000000000000034 -:105C700000000000F0F00000000000000000000044 -:105C80000000000000000000000000000000000014 -:105C90000000000000000000000000000000000004 -:105CA00000000000000000000000000000000000F4 -:105CB00000000000000000000000000000000000E4 -:105CC00000000000000000000000000000000000D4 -:105CD00000000000000000000000000000000000C4 -:105CE00000000000000000000000000000000000B4 -:105CF000000000000000F0F00000000000000000C4 -:105D00000000000000000000000000000000000093 -:105D10000000000000000000000000000000000083 -:105D20000000000000000000000000000000000073 -:105D30000000000000000000000000000000000063 -:105D40000000000000000000000000000000000053 -:105D500000000000000000000000000088000000BB -:105D600000000000008000000000000000000000B3 -:105D70000000000000000000000000002000000003 -:105D80000000000000000000000000000000000013 -:105D90000000000000000000000000000002000001 -:105DA00000000000000010000000000000040000DF -:105DB00000000000000004000000000410000400C7 -:105DC00000000000000020000000000000000000B3 -:105DD00000000000000000000000000000000000C3 -:105DE00000000000000000100000000000000000A3 -:105DF00000000000000000000000000000000000A3 -:105E00000000000000000000000000400000000052 -:105E100000000000000000000000009000000000F2 -:105E200000000000000000008000000000000000F2 -:105E300000840000000000000000000000000000DE -:105E40000000000000000000000000000000000052 -:105E50000000000200000000000000000000000040 -:105E6000000000000000000000000000000004002E -:105E70000000000000000000000000000000000022 -:105E80000000000000000000000000000000000012 -:105E90000000000000000000000000000000000002 -:105EA00000002000000000000000000000000400CE -:105EB00000000000000000000000000000000000E2 -:105EC00000000000000000000000000000000000D2 -:105ED00000000000000000000000000000000400BE -:105EE00000000000000000000000000000000000B2 -:105EF0008000000000000000000000000000000022 -:105F0000000004000000000000000000000000008D -:105F10000000000800080008000000000000000069 -:105F20000000000000000000000000000000000071 -:105F300000000000008400080008000000000000CD -:105F40000000000000000000000000000000000051 -:105F50000000000000000008000800000000000031 -:105F60008000000000000000000000000000C000F1 -:105F7000A000000000000000A000000000000000E1 -:105F80000000000000000000000000000000000011 -:105F90000000000000000000000000000000000001 -:105FA00000000000000008000000000000000000E9 -:105FB00000000000000000000000000000000000E1 -:105FC00000000000000000080000000000000000C9 -:105FD00000000000000000000000000000000000C1 -:105FE00000000000000000000000000000000000B1 -:105FF00000000000000000000000000000000000A1 -:106000000000000000000000000000000000000090 -:106010000000000000000000000000000000000080 -:106020000000000000000000000000000000000070 -:106030000000000000000000000000000000000060 -:106040000000000000000000000000000000000050 -:106050000000000000000000000000000000000040 -:1060600000000000000000840000000000000000AC -:1060700000000000004000000008000000080000D0 -:106080000000000000000000000000000000000010 -:1060900000000000000000000008000000080000F0 -:1060A00000000000000000000000000000000000F0 -:1060B0000000000000000100008000210000000836 -:1060C00000000000000000000000000000000000D0 -:1060D000000000000000A0000000002100000108F6 -:1060E0000100048001800000088000000000000022 -:1060F000000000000000000100000000000000009F -:10610000000000000000000000000000000000008F -:10611000000000000000000000000000000000007F -:10612000000000000000000000000000000000006F -:10613000000000000000000020000004000000003B -:10614000000000000000000000000000000000004F -:10615000000000000000000000000000000000003F -:1061600004000400002040200000002004800400FF -:106170000400040000000000000000000000000017 -:10618000000000000000000000000000000000000F -:1061900000000000000000000000000000000000FF -:1061A00000000000000000000000000000030000EC -:1061B000000000009000000000000000000000004F -:1061C00000000000000000000000000000000000CF -:1061D00000000000000000000000A000000000001F -:1061E0000000A00000000800000082000480802061 -:1061F000800080008000410000004100000000009D -:106200000000000000C0000000000084000000004A -:10621000000000000000000000000000000000007E -:10622000000000000000000000000000000000006E -:10623000000000000000000000000000000000005E -:10624000000000000000000000000000000000004E -:10625000000000000000000000000000000000003E -:10626000000000000000000000000000000000200E -:106270000000040084000400000000002000000072 -:1062800000110009001100040000000000000000DF -:1062900000000000000200000000000000000000FC -:1062A00000000000000000000000000000000000EE -:1062B00000000000000000000000000000000000DE -:1062C00000000000000000000000000000000000CE -:1062D0000000000000000400000000000000A0001A -:1062E0000000000000000100010001800100010029 -:1062F000010000008000000080002000000000007D -:106300000000000000080000000000000000000085 -:10631000000000000000000000000000000000007D -:106320000000000000080000000000000000000065 -:10633000000000000000000000000000000000005D -:106340000000000000000008000000000000000045 -:10635000000000000000000000000000000000003D -:106360000000000000000008040004000420048471 -:10637000048404400000900000000000A008000811 -:10638000000800C000000000000000000000000045 -:1063900000000000000000000000000000000000FD -:1063A00000000000000000000000000000000000ED -:1063B00000000000000000000000000000000100DC -:1063C00000000000000000000000000000000000CD -:1063D00000000000000000000000000000000000BD -:1063E000000000000000000000000000000000C0ED -:1063F00090900000000000008000000000008080FD -:10640000008000800000000000000000000000008C -:10641000000000000000000000000000000000007C -:10642000000000000000000000000000000000006C -:10643000000000000000000000000000000000005C -:10644000110021000000000000000000000000001A -:10645000000000000000000000000000000000003C -:10646000000000000000000000000000000000002C -:106470000089808900090009000000800000008078 -:106480008000808380008000000000000000000089 -:1064900000000000000000000000000000000000FC -:1064A00000000000000000000000000000000000EC -:1064B00000000000000000000000000000000000DC -:1064C00000000041090000030080000000000000FF -:1064D00000000000000000000000000000000000BC -:1064E000000000000000000000000000800000002C -:1064F0008080000080000000808300000004000015 -:10650000004020009003A000048400000000000070 -:10651000000000000000000000000000000000007B -:10652000000000000000000000000000000000006B -:10653000000000000000000000000000000000005B -:1065400000000000000101000000008800000000C1 -:10655000000000000000000000000000000000003B -:1065600000000000000000000000000000008200A9 -:106570000000C090000082000000C09100000000F8 -:10658000C0000000040000000088C0880000000077 -:1065900000000000000000000000000000000000FB -:1065A00000000000000000000000000000000000EB -:1065B00000000000000000000000000000000000DB -:1065C0000000000000000000880000000100000042 -:1065D00000000000000000000000000000000000BB -:1065E00000000000000000000000000000000000AB -:1065F00000000090000000000000009000C040007B -:10660000000080000000000000000000800000008A -:10661000000000000000000000000000000000007A -:10662000000000000000000000000000000000006A -:10663000000000000000000000000000000000005A -:106640000000000000000000000000000000410009 -:10665000000000000000000000000000000000003A -:10666000000000000000000000000000000000002A -:10667000000000000080000000000000008000809A -:10668000000000200000000000000080008080006A -:1066900000000000000000000000000000000000FA -:1066A00000000000000000000000000000000000EA -:1066B00000000000000000000000000000000000DA -:1066C0000000000000000000000000000011200099 -:1066D00000000000000000000000000000000000BA -:1066E00000000000000000000000000000000000AA -:1066F00000000000000000000000A111A100110036 -:1067000000000000000000000000A000000484025F -:106710000800000000000000000000000000000071 -:106720000000000000000000000000000000000069 -:106730000000000000000000000000000000000059 -:106740000000000000000000000000000000000148 -:106750000000000000000000000000000000000039 -:106760000000000000000000000000000000000029 -:10677000000000000000000000000000C101200037 -:1067800001000000000A00004100001100000000AC -:106790004100000A000000000000000000000000AE -:1067A00000000000000000000000000000000000E9 -:1067B00000000000000000000000000000000000D9 -:1067C00000000000000000000000000000000000C9 -:1067D00000E0000081410000000000000000000017 -:1067E00000000000000000000000000000000000A9 -:1067F000000000000000000600004100000000064C -:106800000000410000000000000000000000000047 -:1068100000009900FF66000000000000000000007A -:106820000000000000000000000000000000000068 -:106830000000000000000000000000000000000058 -:106840000000000000000000000000000000000048 -:106850000000000000000000000000000000000038 -:106860000000000000000000000000000000000028 -:10687000000000000000000000000000FF00FF001A -:10688000FF000000FF00000000000000000000000A -:10689000000030309900FF6600000000000000009A -:1068A00000000000000000000000000000000000E8 -:1068B00000000000000000000000000000000000D8 -:1068C00000000000000000000000000000000000C8 -:1068D00000000000000000000000000000000000B8 -:1068E00000000000000000000000000000000000A8 -:1068F0000000000000000000000000000000FF0099 -:10690000FF00FF000000FF0000000000000000008A -:106910000000000000000000000000000000000077 -:106920000000000000000000000000000000000067 -:106930000000000000000000000000000000000057 -:106940000000000000000000000000000000000047 -:106950000000000000000000000000000000000037 -:106960000000000000000000000000000000000027 -:106970000000000000000000000000000000000017 -:106980000000000000000000000000000000000007 -:1069900000000000D622680200000404000000008D -:1069A00000000000000000000000000000000000E7 -:1069B00000000000000000000000000000000000D7 -:1069C00000000000000000000000000000000000C7 -:1069D00000000000000000000000000000000000B7 -:1069E00000000000000000000000000000000000A7 -:1069F0000000000000000000000000000000000097 -:106A0000000000000F0F000000FF00000F0F00004B -:106A1000000000000000C400000000810000000031 -:106A20000000000000000000000000000000000066 -:106A30000000000000000000000000000000000056 -:106A40000000000000000000000000000000000046 -:106A50000000000000000000000000000000000036 -:106A60000000000000000000000000000000000026 -:106A70000000000000000000000000000000000016 -:106A80000000000000000F0F000000FF00000F0FCB -:106A900005000A28050000A080000000000000009A -:106AA00000000000000000000000000000000000E6 -:106AB00000000000000000000000000000000000D6 -:106AC00000000000000000000000000000000000C6 -:106AD0000000000000000000000000400006000C64 -:106AE00000000000000000000000000000000000A6 -:106AF0000000000000000000000000000000000096 -:106B00000000000000300C0012C003E303360C0D3F -:106B100092C0000000000000000000000000000023 -:106B20000000000000000000000000000000000065 -:106B30000000000000000000000000000000000055 -:106B40000000000000000000000000000000000045 -:106B500000000000000000000000000000000F0F17 -:106B6000FFFF000000000000000000000000000027 -:106B70000000000000000000000000000000000015 -:106B800000000000000000000000000000F0000015 -:106B900000000000000000000000000000000000F5 -:106BA00000000000000000000000000000000000E5 -:106BB00000000000000000000000000000000000D5 -:106BC00000000000000000000000000000000000C5 -:106BD00000000000000000000000000000000000B5 -:106BE0000F0F000000000000000000000000000087 -:106BF0000000000000000000000000000000000095 -:106C00000000000000000000000000000000000084 -:106C10000000000000000000000000000000000074 -:106C20000000000000000000000000000000000064 -:106C30000000000000000000000000000000000054 -:106C40000000000000000000000000000000000044 -:106C50000000000000000000000000000000000034 -:106C600000000000F0F00000000000000000000044 -:106C70000000000000000000000000000000000014 -:106C80000000000000000000000000000000000004 -:106C9000FF0000CC00000000000000000000000029 -:106CA00000000000000000000000000000000000E4 -:106CB00000000000000000000000000000000000D4 -:106CC00000000000000000000000000000000000C4 -:106CD00000000000000000000000000000000000B4 -:106CE000000000000000F0F00000000000000000C4 -:106CF0000000000000000000000000000000000094 -:106D00000000000000000000000000000000000083 -:106D10000000FF0000CC00000000000000000000A8 -:106D2000040000000000000000000000000000005F -:106D3000000000000400000000000000000000004F -:106D40002000000000000000000000000000000023 -:106D5000000000000000000004000000000000002F -:106D60000000000000000000000000000000000023 -:106D700000000000040000000000200000000400EB -:106D800000000000000000000000000000100000F3 -:106D900000000000200000000000200000000000B3 -:106DA00000000000000000000000000000000000E3 -:106DB00000000000000000000000000000000000D3 -:106DC00000000000000000000000000000000000C3 -:106DD00000000000000000000000000000000000B3 -:106DE00000000000000000000000000000000000A3 -:106DF0000000000000000000000000000000000093 -:106E00000000000000000000000000000000000181 -:106E10000000000000000000000000000000000072 -:106E20000000000000000000000000000000000062 -:106E30000000000000000000000000000000000052 -:106E40000000000000000403000000000000020039 -:106E50000000000002000000000000000000000030 -:106E60000000000000000000000000000000000022 -:106E7000020002000000000000000400000000000A -:106E80000000000000000200000000000000000000 -:106E90000000000000000000000000000000008072 -:106EA00000000000000000000000000000000000E2 -:106EB00000000000000000000000000000000000D2 -:106EC00000000000000002000008000000000000B8 -:106ED0000000000000840000000004000000000822 -:106EE000000000000000000000000008000000009A -:106EF0000000000000000000000000000000000092 -:106F00000008000000000000000000080000000071 -:106F100000000000000000820008000000000000E7 -:106F20000020000000000000000000000000000041 -:106F30000000000000000000000000000000000051 -:106F40000008000000000000000000000000000039 -:106F50000000000000000000000000000000000031 -:106F6000900000000000000000020000000000008F -:106F70000000000000000000000000080000000009 -:106F80000000000000000000000000000000000001 -:106F900000000000000000000000000000000000F1 -:106FA00000000041000000000000000000000000A0 -:106FB00000000000000000000000000000000000D1 -:106FC00000000000000000000000000000000000C1 -:106FD00000000000000000000000000000000000B1 -:106FE0000000000000000000000000000800000099 -:106FF0000000000000000000000000000000000091 -:107000000000000000000000000000000000000080 -:107010000000000000000000000000000000000070 -:107020000000000000000000000000000000000060 -:107030000000000000000000000000000000000050 -:107040000000000008000000000000000000000038 -:107050000000000000000000000000000000000030 -:107060000000000000000000000000000000000020 -:107070000000000000000000000000000000000010 -:1070800000000000000000000400000000000000FC -:1070900000000000000000000000000000000000F0 -:1070A000004100000011004100000000000000004D -:1070B00000000000000011000000000000080000B7 -:1070C00000000000000000000000000000000000C0 -:1070D00000000000000003000000000000A000000D -:1070E00000000000000000000000000000000000A0 -:1070F00000A00000000000000000000000000008E8 -:10710000000000000000000000000000000000007F -:10711000000000000000000000000000000000A0CF -:10712000000000000000000000000000000000005F -:10713000000000000000000000000000000000004F -:10714000000000000000000000000000000000003F -:10715000000000000000000000000000000000002F -:10716000000000000000000000000002000000001D -:10717000000000000000000000000000000000000F -:1071800000000000000000000000000000000000FF -:1071900000000000000000000000000000000000EF -:1071A0000000000000008800000000000000000057 -:1071B0000000000000080000000000A00000000027 -:1071C00000000000000000000000000000000000BF -:1071D00000000000000000000000000000000000AF -:1071E000000000000000000000000000000000009F -:1071F0000000000000C0000000000084000000004B -:10720000000000000000000000000000000000007E -:10721000000000000000000000000000000000006E -:10722000000000000000000000000000000000005E -:10723000000000000000000000000000000000004E -:10724000000000000000000000000000000000003E -:10725000000000000000000000000000000000002E -:10726000000000000000000000000000000000001E -:10727000000000000000000000000000000000000E -:1072800000000000000200000000000000000000FC -:1072900000000000000000000000000000000000EE -:1072A0000000000000004000004100090011001132 -:1072B00000000000000000000000000000000000CE -:1072C00000000000090000000800000000000000AD -:1072D00000000000000000000000000000000000AE -:1072E000000000000900000000000800000000008D -:1072F000000000000000000000000000000000008E -:10730000000000000000090000080000000000006C -:10731000000000000000000000000000000000006D -:10732000000003000000090080080000000000C009 -:10733000000000000000000000000000000000004D -:10734000000000000000000000000000000000003D -:10735000000000000000000000000000000000002D -:10736000000000000000000000000000000000001D -:10737000000000000000000000000000000000000D -:1073800000000000000000000000000000000000FD -:1073900000000000000000000000000000000000ED -:1073A000000000000000A00082000000A0C001A1B9 -:1073B00088A1041000000000000000000000000090 -:1073C00000000000000000000000000000000000BD -:1073D00000000000000000000000000000000000AD -:1073E000000000000000000000000000000000009D -:1073F000000000000000000000000000000000008D -:10740000000000000000000000000000000000007C -:10741000000000000000000000000000000000006C -:1074200000000000000000008400800000008400D4 -:1074300021200020808000000000000000000000EB -:10744000000000000000000000000000000000003C -:10745000000000000000000000000000000000002C -:10746000000000000000000000000000000000001C -:10747000000000000000000000000000000000000C -:1074800000000000000000000000000000000000FC -:1074900000000000000000000000000000000000EC -:1074A00000000000000000000200000909000900BF -:1074B000000084208480048400000000000000009C -:1074C00000000000000000000000000000000000BC -:1074D00000000000000000000000000000000000AC -:1074E000000000000000000000000000000000009C -:1074F000000000000000000000000000000000008C -:10750000000000000000000000000000000000007B -:10751000000000000000000000000000000000006B -:10752000000000000000000000000002000000A0B9 -:10753000000020008201A04082A0000000000000A6 -:10754000000000000000000000000000000000003B -:10755000000000000000000000000000000000002B -:10756000000000000000000000000000000000001B -:10757000000000000000000000000000000000000B -:1075800000000000000000000000000000000000FB -:1075900000000000000000000000000000000000EB -:1075A00000000000000000000000000000000000DB -:1075B0000001000010A1000804A102030000000067 -:1075C00000000000000000000000000000000000BB -:1075D00000000000000000000000000000000000AB -:1075E000000000000000000000000000000000009B -:1075F000000000000000000000000000000000008B -:10760000000000000000000000000000000000007A -:10761000000000000000000000000000000000006A -:107620000000000000000000000000000000000456 -:10763000000900210004802000A1002180A000009A -:10764000000000000000000000000000000000003A -:10765000000000000000000000000000000000002A -:10766000000000000000000000000000000000001A -:10767000000000000000000000000000000000000A -:1076800000000000000000000000000000000000FA -:1076900000000000000000000000000000000000EA -:1076A00000000000000000000000000000000000DA -:1076B000098400008900090084210080400004043E -:1076C00000000000000000000000000000000000BA -:1076D00000000000000000000000000000000000AA -:1076E000000000000000000000000000000000009A -:1076F000000000000000000000000000000000008A -:107700000000000000000000000000000000000079 -:107710000000000000000000000000000000000069 -:107720000000000000000000000000000000000059 -:107730000000A0080400400004004001C0A0C18275 -:107740000400000000000000000000000000000035 -:107750000000000000000000000000000000000029 -:107760000000000000000000000000000000000019 -:107770000000000000000000000000000000000009 -:1077800000000000000000000000000000000000F9 -:1077900000000000000000000000000000000000E9 -:1077A00000000000000000000000000000000000D9 -:1077B00000000000000000000000000000000000C9 -:1077C0004100000000000000000000000000000078 -:1077D00000000000000000000000000000000000A9 -:1077E0000000000000000000000000000000000099 -:1077F0000000000000000000000000000000000089 -:107800000000000000000000000000000000000078 -:107810000000000000000000000000000000000068 -:107820000000000000000000000000000000000058 -:10783000000000000000BAFAFFFF00000000021282 -:1078400080080000FFFF00000000000000000000B2 -:107850000000000000000000000000000000000028 -:107860000000000000000000000000000000000018 -:107870000000000000000000000000000000000008 -:1078800000000000000000000000000000000000F8 -:1078900000000000000000000000000000000000E8 -:1078A00000000000000000000000000000000000D8 -:1078B0000000000000000000AAFAFFFF0000000026 -:1078C00003FA00FA0000F2000000000000000000CF -:1078D00000000000000000000000000000000000A8 -:1078E0000000000000000000000000000000000098 -:1078F0000000000000000000000000000000000088 -:107900000000000000000000000000000000000077 -:107910000000000000000000000000000000000067 -:107920000000000000000000000000000000000057 -:107930000000000000000000000000000000000047 -:10794000000020AA20AA7D7D7D7D000000000000AF -:107950000000000000000000000000000000000027 -:107960000000000000000000000000000000000017 -:107970000000000000000000000000000000000007 -:1079800000000000000000000000000000000000F7 -:1079900000000000000000000000000000000000E7 -:1079A00000000000000000000000000000000000D7 -:1079B00000000000000000000000000000000000C7 -:1079C0000000000020AA20207D7DFF7F0000000035 -:1079D00000000000000000000000000000000000A7 -:1079E0000000000000000000000000000000000097 -:1079F0000000000000000000000000000000000087 -:107A00000000000000000000000000000000000076 -:107A10000000000000000000000000000000000066 -:107A20000000000000000000000000000000000056 -:107A300000000000000000000000000000000061E5 -:107A40000006000D000000610006000D00000000AF -:107A50000000000000000000000000000000000026 -:107A60000000000000000000000000000000000016 -:107A70000000000000000000000000000000000006 -:107A800000000000000000000000000000000000F6 -:107A900000000000000000000000000000000000E6 -:107AA00000000000000000000000000000000000D6 -:107AB00000000000000000000000000000000000C6 -:107AC00061610202000000C00F0F0000C0F0808062 -:107AD00000000000000000000000000000000000A6 -:107AE0000000000000000000000000000000000096 -:107AF0000000000000000000000000000000000086 -:107B00000000000000000000000000000000000075 -:107B10000000000000000000000000000000000065 -:107B20000000000000000000000000000000000055 -:107B30000000000000000000000000000000000045 -:107B400000006161020200008080F3F330300030F9 -:107B50008080000000000000000000000000000025 -:107B60000000000000000000000000000000000015 -:107B70000000000000000000000000000000000005 -:107B800000000000000000000000000000000000F5 -:107B900000000000000000000000000000000000E5 -:107BA00000000000000000000000000000000000D5 -:107BB00000000000000000000000000000000000C5 -:107BC000000000000000000000000000000F000F97 -:107BD0005F0F0F0F00000000000000000000000019 -:107BE0000000000000000000000000000000000095 -:107BF0000000000000000000000000000000000085 -:107C00000000000000000000000000000000000074 -:107C10000000000000000000000000000000000064 -:107C20000000000000000000000000000000000054 -:107C30000000000000000000000000000000000044 -:107C4000000000000000000000000000C300000F62 -:107C5000000F5F0F0F0F0000000000000000000089 -:107C60000000040000000000000000000000000010 -:107C70000000000001800000000000000000000083 -:107C800000002000000004000000000000000000D0 -:107C900000000000000000030000000000000000E1 -:107CA00000000000000000002000000000000000B4 -:107CB00000000000000000080000000000000000BC -:107CC00000000000000200000000000000000000B2 -:107CD00000000000000000000000000000000000A4 -:107CE0000000000000000000000000000000000094 -:107CF000000000000000200800000000000000005C -:107D00000000000000000000000000000000000073 -:107D1000000000000000000800000000000000005B -:107D20000000000000000000000000000000000053 -:107D30000000000000000000000100000000000042 -:107D400000000000000000000000400000000000F3 -:107D50000000000000000000000000000000000023 -:107D60000000000000000000000000000000000013 -:107D70000000000000000000000000000000000003 -:107D80000000000000000000000000040004880063 -:107D900000000000000000000000000000000000E3 -:107DA00000000000000000000000000002040003CA -:107DB00082000000000000000000008000000000C1 -:107DC00000000000000000000000000000080000AB -:107DD00000000000000000000000000000000000A3 -:107DE0000000000000000000000000000000000093 -:107DF0000000000000000000000000000000000083 -:107E0000000000000000000000000000000000086A -:107E10000084000000000008000000880000000846 -:107E200000840000000800000000000000000000C6 -:107E300000080084000000000008000000040008A2 -:107E4000000000000008000000000000000000002A -:107E5000000800080000000000820084000000000C -:107E60000000000000000000000000000000000012 -:107E7000000000000021002100210021002100213C -:107E80000008002100210021002100210021002103 -:107E90000000000800210021002100212021000015 -:107EA0000021002100050021000400210021002103 -:107EB0000021002100000021000000210008002115 -:107EC0000021000800050021000000210000002121 -:107ED00000210000000000210021002100080021F5 -:107EE0000000000000000000000000000000000092 -:107EF0000000000000000000000000000000000082 -:107F00000000000000000000000000000000000071 -:107F100000020000000000000000000000008000DF -:107F200000000000000000000000000000000084CD -:107F30000000000000000000000000000000000041 -:107F40000000000000000000000000000000000031 -:107F50000000080000000000000000000000000811 -:107F60000000000000000000000000000000000011 -:107F7000000000000000A000000000000000000061 -:107F800090000000000082000000000000000000DF -:107F900000000000000082000000900000000000CF -:107FA000000000000000000082000000000000004F -:107FB0000000000000000009820000000000000036 -:107FC000000000000000000082000000020000002D -:107FD000000000000000000082000000000000001F -:107FE0000000000000000000000000000000000091 -:107FF0000000000000000000000000000000000081 -:108000000000000000000000000000000000000070 -:1080100000000000000000840000000000000000DC -:108020000000000000000000000000000000000050 -:108030000000000000000000000000000000000040 -:108040000000000000000000000000000000000030 -:108050000000000000000000000000000000000020 -:108060000000000000000000000000000000000010 -:10807000000000000000000002400021000000009D -:1080800000000000000800000000000000080000E0 -:108090000000000000000000024000080000000096 -:1080A0000008000000C100030040000000000008BC -:1080B0008200000008000000000002020021000011 -:1080C00000000000000000000000000000000008A8 -:1080D000000000000000000000000202002100007B -:1080E000000000022000100000000000000000005E -:1080F0000000000000000000000000000000000080 -:10810000000000000000000000000000000000006F -:10811000000000000000000000000000000000005F -:108120000000000000000008000000000000000047 -:10813000000000000000000000000000000000003F -:10814000000000000000000000000000000000002F -:10815000000000000000000000000000000000001F -:108160000000030000000000808800000000000004 -:1081700000000000000020000400000000080008CB -:1081800000000005000800000000000800000000DA -:108190000000000000000000820000000008002134 -:1081A00000000005000300000000000000080000BF -:1081B0000000000000000000004100000000000876 -:1081C0000008000000050008000000000008000092 -:1081D000000000000000000000088400000000080B -:1081E0000008000000050000000020000000000062 -:1081F000000000000000000000000000000000007F -:10820000000000000000000000000000000000006E -:10821000000000000000000000000000000000005E -:10822000000000000000000000000000000000004E -:10823000000000000000000000000000000000003E -:10824000000000000000000000000000000000002E -:10825000000000000000000000000000000000001E -:1082600000000000000000000000000080900001FD -:108270000001000100C00001000100C00111000068 -:108280000001000400040001100100C10000000111 -:108290000001000100C00001000100C00111000048 -:1082A0000001004000820001100100C10000000038 -:1082B00000010001000100C00001000100C0011127 -:1082C00001000201004000020001100100C1000095 -:1082D00000010001000100C00001000100C0011107 -:1082E00001000001004000040001100100C1000075 -:1082F000004100410041008200410041008210C164 -:108300000011114100800080004180410083000085 -:10831000004100410041008200410041008210C143 -:108320000011114100000000004180410083000065 -:1083300000000041004100410082004100410082F4 -:1083400010C14011A1410000008000418041008324 -:1083500000000041004100410082004100410084D2 -:1083600010C1401121410000008000418041008384 -:10837000000041000300000000804100890000006F -:1083800010000900088000008200C100C1000080C8 -:1083900080004100030000000080410089000000CF -:1083A00010000900088000008580C100C100008025 -:1083B00080000000410003000000008041008900AF -:1083C000000010000900088000008300C100C10007 -:1083D000008080004100030000000080410089000F -:1083E00000001000090008800000A080C100C1004A -:1083F0000080800001000100000000C00100C000FA -:1084000000000000840003080002C1000300C10056 -:108410000082820001000100000000C00100C000D5 -:1084200000000000840003820002C0100300C100AD -:1084300000828200000001000100000000C0010075 -:10844000C00000000000840003080002C100030017 -:10845000C1000082820001000100000000C0010094 -:10846000C00000000000840003820002C11003006D -:10847000C1000082820000C00001C0C100000000F5 -:10848000000100C002880011000100C100000000CE -:1084900000010000000000C00001C0C10000000099 -:1084A000000100C002880011000100C100000000AE -:1084B000000100000000000000C00001C0C1000079 -:1084C0000000000100C002880011000100C100008E -:1084D000000000010000000000C00001C0C1000059 -:1084E0000000000100C002880011000100C101006D -:1084F00000000001000000000080004180C1000079 -:108500000000004100C100100041004100C1000016 -:1085100000000041004100000080004180C10000D7 -:108520000000004100C100100041004100C10000F6 -:10853000000000410041000000000080004180C1B7 -:1085400000000000004100C100100041004100C1D6 -:10855000000000000041004100000080004180C197 -:1085600000000000004100C100100041004100C1B6 -:1085700008000000004100410000C100800080C1EF -:1085800000004102000009004100C14100008004D8 -:1085900000004111000080004100C100800080C146 -:1085A00000004102000009004100C1418000800438 -:1085B000000041110000800041000000C100800067 -:1085C00080C100004108000084004100C108800013 -:1085D000800400004111000080004100C1008000C3 -:1085E00080C100004102000082004100C1418000C2 -:1085F000800400004111000080004100C1004000E3 -:10860000C0C100000100020004000100C1A110006F -:10861000C001000001000000C0000100C1004000D6 -:10862000C0C100000100020004000100C1A1080057 -:10863000C001000001000000C00001000000C100F6 -:108640004000C0C100000100020008000100C1A0FC -:108650002000C001000001000000C0000100C100B6 -:108660004000C0C100000100020008000100C1A1DB -:108670008200C001000001000000C00001000000F5 -:108680000000000000420000000000000000811215 -:108690000088070048000000000000000000000003 -:1086A00000000000004200000000000000008112F5 -:1086B00000880700480000000000000000000000E3 -:1086C0000000000000000042000000000000000068 -:1086D00041120088070000000000000000000000B8 -:1086E0000000000000000042000000000000000048 -:1086F0008112008807004800000000000000000010 -:108700000000000000000000000000000000000069 -:108710000000000000000000000000000000000059 -:108720000000000000000000000000000000000049 -:108730000000000000000000000000000000000039 -:108740000000000000000000000000000000000029 -:108750000000000000000000000000000000000019 -:108760000000000000000000000000000000000009 -:1087700000000000000000000000000000000000F9 -:1087800000000000000000000000000000000000E9 -:1087900000000000000000000000000000000000D9 -:1087A00000000000000000000000000000000000C9 -:1087B00000000000000000000000000000000000B9 -:1087C00000000000000000000000000000000000A9 -:1087D0000000000000000000000000000000000099 -:1087E0000000000000000000000000000000000089 -:1087F0000000000000000000000000000000000079 -:1088000000000000757B0000000000000000000078 -:108810000000000000000000000000000000000058 -:108820000000DEAE757B00000000000000000000CC -:108830000000000000000000000000000000000038 -:108840000000DEAE0000757B0000000000000000AC -:108850000000000000000000000000000000000018 -:1088600000000000DEAE757B00000000000000008C -:1088700000000000000000000000000000000000F8 -:1088800000000000DEAE60C6030000000000000033 -:108890000031E0000000000000000C0000000000BB -:1088A000000000C0630660C6030000000000000076 -:1088B0000031E0000000000000000C00000000009B -:1088C000000000C06306000060C603000000000056 -:1088D00000000031E0000000000000000C0000007B -:1088E0000000000000C0630660C603000000000036 -:1088F00000000031E0000000000000000C0000005B -:108900000000000000C0630600000000000000003E -:108910000000000000000000000000000000000057 -:108920000000000000000000000000000000000047 -:108930000000000000000000000000000000040033 -:108940000000000000000000000000000000000027 -:108950000000000000000000000000000000000017 -:108960000000000000000000000000000000000007 -:1089700000000000000000000000000000000000F7 -:1089800000000000000000000000000000000000E7 -:1089900000000000000000000000000000000000D7 -:1089A00000000000000000000000000000000000C7 -:1089B00000000000000000000000000000000000B7 -:1089C00000000000000000000000000000000000A7 -:1089D0000000000000000000000000000000000097 -:1089E0000000000000000000000000000000000087 -:1089F0000000000000000000000000000000000077 -:108A00000000000000000000000000000000000066 -:108A10000000000000000000000000000000000056 -:108A20000000000000000000000000000000000046 -:108A30000000000000000000000000000000000036 -:108A40000000000000000000000000000000000026 -:108A50000000000000000000000000000000000016 -:108A60000000000000000000000000000000000006 -:108A700000000000000000000000000000000000F6 -:108A80000000000000000000000082000000000064 -:108A900000000000000000000000000000000000D6 -:108AA00000000000000000000000000000000000C6 -:108AB00000000000000000080000000000000000AE -:108AC0000084020800080000000000000000000010 -:108AD000000000000000000000080000000000008E -:108AE000000000000008000800080000000000006E -:108AF000000000000000000000080000000000006E -:108B00000000000000080008038400880200030041 -:108B10000000000000000000000000000000000055 -:108B20000000000000000000000000000000000045 -:108B300000000000000000000000004100000000F4 -:108B40000000000000000000000000000000000025 -:108B500000000000002100000000000000000000F4 -:108B60000000000000050000000000000000000000 -:108B700000000000000000000000000000080000ED -:108B800000000000000000000000000000000000E5 -:108B900000000000000000000000000000000000D5 -:108BA00000000000000000080008001000A0000005 -:108BB00000000000000000000000000000000000B5 -:108BC000000000000000000800080008000000008D -:108BD0000000000000000000000000000000000095 -:108BE0000000000000000000000800080008000865 -:108BF0000000000000000000000003000000000072 -:108C000000000000000000000008000800A000C0F4 -:108C10000000000000000000000000000000000054 -:108C20000000000000000000000000000000000044 -:108C30000000000000000000000000000000000034 -:108C40000000000000000000000000000000000024 -:108C50000000000000000000000000000000000014 -:108C600000000000004000000000000008000000BC -:108C700000000000000000000000000000000000F4 -:108C800000000000000000000000000000000000E4 -:108C900000000000000000000000000000000000D4 -:108CA00000000000000000000000000000000000C4 -:108CB00000000000000000000000000000000000B4 -:108CC00000000000000000000000000000000000A4 -:108CD0000000000000000000000000000000000094 -:108CE0000000000000000000000000000000000084 -:108CF0000000000000000000000000000000000074 -:108D00000000000000000000000000000000000063 -:108D10000000000000000000000000000000000053 -:108D20000000000000000000000000000000000043 -:108D30000000000000000000000000000000000033 -:108D40000000000000000000000000000000000023 -:108D50000000000000000000000000000000000013 -:108D60000000000000000000000000000000008083 -:108D700000000000000000000000000000000000F3 -:108D800000000000000000000000000000000000E3 -:108D90000000008000000000000000000000000053 -:108DA00000000008000011000000000000080000A2 -:108DB00000000000000000000000000000000000B3 -:108DC00000000008000011000000000000A00000EA -:108DD0000000000000000000000000000000000093 -:108DE00000000000000800001100000000000084E6 -:108DF0000010000000000000000000000000000063 -:108E000000000000000800001100000000080084BD -:108E10000000000000020000000000000000000050 -:108E20000000000000000000000000000000000042 -:108E30000000000000000000000000000000000032 -:108E40000000000000000000000000000000000022 -:108E50000000000000000000000000000000000012 -:108E60000000000000000000000000000000000002 -:108E700000000000000000000021000000000000D1 -:108E800000000000000000000000000000000000E2 -:108E900000000000000000000021000000000000B1 -:108EA00000000000000002000000000000000000C0 -:108EB00000000000000000000000000000000000B2 -:108EC00000000000000000000000000000000000A2 -:108ED0000000000000000000000000000000000092 -:108EE000000000000000000000000400000000007E -:108EF0000000000000000000000000000000000072 -:108F00000000000000000000000000000000000061 -:108F10000000000000000000000000000000000051 -:108F20000000000000000000000000000000000041 -:108F30000000000000000000000000000000000031 -:108F40000000000000000000000000000000000021 -:108F50000000000000000000000000000000000011 -:108F60000000000000000000000000000000000001 -:108F700000000000000000000000000000000000F1 -:108F800000000000000000000000000000000000E1 -:108F900000000000000000000000000100000001CF -:108FA00000010000000000000000000000000000C0 -:108FB00000000000000000000000000000000000B1 -:108FC00000000000000000000000000000000000A1 -:108FD0000000000000000000000000000000000091 -:108FE0000000000000000000000000000000000081 -:108FF0000000000000000000000000000000000071 -:109000000000000000000000000000000000000060 -:109010000000000000000000000000000040000010 -:109020000004000400000000000000000000000038 -:109030000000000000000000000000000000000030 -:109040000000000000000000000000000000000020 -:109050000000000000000000000000000000000010 -:109060000000000000000000000000000000000000 -:1090700000000000000000000000000000000000F0 -:1090800000000000000000000000000000000000E0 -:1090900000000000000000000000000000000000D0 -:1090A00000000000000000000000000000000000C0 -:1090B00000000000000000000000000000000000B0 -:1090C00000000000000000000000000000000000A0 -:1090D0000000000000000000000000000000000090 -:1090E0000000000000000000000000000000000080 -:1090F0000000000000000000000000000000000070 -:10910000000000000000000000000000000000005F -:10911000000000000000000000000000000000004F -:10912000000000000000000000000000000000003F -:10913000000000000000000000000000000000002F -:10914000000000000000000000000000000000001F -:10915000000000000000000000000000000000000F -:1091600000000000000000000000000000000000FF -:1091700000000000000000000000000000000000EF -:1091800000000000000000000000000000000000DF -:1091900000000000000000000000000000000000CF -:1091A00000000000000000000000000000000000BF -:1091B00000000000000000000000000000000000AF -:1091C000000000000000000000000000000000009F -:1091D000000000000000000000000000000000008F -:1091E000000000000000000000000000000000007F -:1091F000000000000000000000000000000000006F -:10920000000000000000000000000000000000005E -:10921000000000000000000000000000000000004E -:1092200000000000000000004100000000000000FD -:10923000000000000000000000000000000000002E -:10924000000000000000000000000000000000001E -:10925000000000000000000000000000000000000E -:1092600000000000000000000000000000000000FE -:1092700000000000000000000000000000000000EE -:1092800000000000000000000000000000000000DE -:1092900000000000000000000000000000000000CE -:1092A00000000000000000040000000000000000BA -:1092B00000000000000000000000000000000000AE -:1092C000000000000000000000000000000000009E -:1092D000000000000000000000000000000000008E -:1092E000000000000000000000000000000000007E -:1092F000000000000000000000000000000000006E -:10930000000000000000000000000000000000005D -:10931000000000000000000000000000000000004D -:10932000000000000000000000010000000000003C -:10933000000000000000000000000000000000002D -:10934000000000000000000000000000000000001D -:10935000000000000000000000000000000000000D -:1093600000000000000000000000000000000000FD -:1093700000000000000000000000000000000000ED -:1093800000000000000000000000000000000000DD -:1093900000000000000000000000000000000000CD -:1093A00000000000000000000000000000000000BD -:1093B00000000000000000000000000000000000AD -:1093C000000000000000000000000000000000009D -:1093D000000000000000000000000000000000008D -:1093E000000000000000000000000000000000007D -:1093F000000000000000000000000000000000006D -:10940000000000000000000000000000000000005C -:10941000000000000000000000000000000000004C -:10942000000000000000000000000000000000003C -:10943000000000000000000000000000000000002C -:10944000000000000000000000000000000000001C -:10945000000000000000000000000000000000000C -:1094600000000000000000000000000000000000FC -:1094700000000000000000000000000000000000EC -:1094800000000000000000000000000000000000DC -:1094900000000000000000000000000000000000CC -:1094A00000000000000000000000000000000000BC -:1094B00000000000000000000000000000000000AC -:1094C000000000000000000000000000000000009C -:1094D000000000000000000000000000000000008C -:1094E000000000000000000000000000000000007C -:1094F000000000000000000000000000000000006C -:10950000000000000000000000000000000000005B -:10951000000000000000000000000000000000004B -:10952000000000000000000000000000000000003B -:10953000000000000000000000000000000000002B -:10954000000000000000000000000000000000001B -:10955000000000000000000000000000000000000B -:1095600000000000000000000000000000000000FB -:1095700000000000000000000000000000000000EB -:1095800000000000000000000000000000000000DB -:1095900000000000000000000000000000000000CB -:1095A00000000000000000000000000000000000BB -:1095B00000000000000000000000000000000000AB -:1095C000000000000000000000000000000000009B -:1095D000000000000000000000000000000000008B -:1095E000000000000000000000000000000000007B -:1095F000000000000000000000000000000000006B -:10960000000000000000000000000000000000005A -:10961000000000000000000000000000000000004A -:10962000000000000000000000000000000000003A -:109630000000000000610006000D000000000000B6 -:10964000000000000000000000000000000000001A -:10965000000000000000000000000000000000000A -:1096600000000000000000000000000000000000FA -:1096700000000000000000000000000000000000EA -:1096800000000000000000000000000000000000DA -:1096900000000000000000000000000000000000CA -:1096A00000000000000000000000000000000000BA -:1096B00000000000000000000000000000000000AA -:1096C000000000000000000000000000000000009A -:1096D000000000000000000000000000000000008A -:1096E000000000000000000000000000000000007A -:1096F000000000000000000000000000000000006A -:109700000000000000000000000000000000000059 -:109710000000000000000000000000000000000049 -:109720000000000000000000000000000000000039 -:109730000000000000000000000000000000000029 -:109740000000000000000000000000000000000019 -:109750000000000000000000000000000000000009 -:1097600000000000000000000000000000000000F9 -:1097700000000000000000000000000000000000E9 -:1097800000000000000000000000000000000000D9 -:1097900000000000000000000000000000000000C9 -:1097A00000000000000000000000000000000000B9 -:1097B000000000000000000000000000C3C3000023 -:1097C0000000000000000000000000000000000099 -:1097D0000000000000000000000000000000000089 -:1097E0000000000000000000000000000000000079 -:1097F0000000000000000000000000000000000069 -:109800000000000000000000000000000000000058 -:109810000000000000000000000000000000000048 -:109820000000000000000000000000000000000038 -:10983000000000000000000000000000F0F0F0F068 -:109840000000000000000000000000000000000018 -:109850000000000000000000000000000000000008 -:1098600000000000001000100000000000000000D8 -:1098700000000000000000000000000000000000E8 -:1098800000000000000000100010000000000000B8 -:1098900000000000000000110000000000000000B7 -:1098A00000000000000000100000000000000000A8 -:1098B00000000000000000000000000000000000A8 -:1098C0000000000000000000000000000000000098 -:1098D0000000000000000000000000000000000088 -:1098E0000000000000000000000000000000000078 -:1098F0000000000000000000000000000000000068 -:109900000000000000000000000000000000000057 -:109910000000000000000000000000000000000047 -:1099200000000000000200004000000000000000F5 -:109930000000000000000000000000040000000023 -:109940000000000000020000000000000000000015 -:1099500000000000000000400000000000000000C7 -:1099600000000000000000000000000000000000F7 -:1099700000000000000000000000000000000000E7 -:1099800000000000000000000000000000000000D7 -:109990000000000000000000000000008200000045 -:1099A00000000000000000000000000000000000B7 -:1099B00000000000000000000000000000000000A7 -:1099C0000000000000000000000000000000000097 -:1099D0000000000000000000000000000000000087 -:1099E0000000000000000000000000000000000077 -:1099F000000000000000000800000000000000005F -:109A00000000000000000000000000000200000054 -:109A1000000000000000000002080000000000003C -:109A20000000000000000000000000000000000036 -:109A3000000000000000000000080000000000001E -:109A40000000000000000000020000000000000014 -:109A50000000000000000000000000000000000006 -:109A600000000000000000000000000000000000F6 -:109A700000000000000000000000000000000000E6 -:109A800000000000000000000000000000000000D6 -:109A90000000000000000000400000000000000086 -:109AA0004000000000000000000000000000000076 -:109AB00000000000000000000000000000000000A6 -:109AC0000000000000000000000000000000000096 -:109AD0000000000000000000000000000000000086 -:109AE0000000000000000000000000000000000076 -:109AF0000000000000000000000000000000000066 -:109B00000000000000000000000000000000000055 -:109B10000000000000000000000000000000000045 -:109B20000000000000000000000000000000000035 -:109B30000000000000000000000000000000000025 -:109B40000000000000000000000000000000000015 -:109B50000000000000000000000000000000000005 -:109B600000000000000000000000000000000000F5 -:109B700000000000000000000000000000000000E5 -:109B800000000000000000000000000000000000D5 -:109B900000000000000000000000000000000000C5 -:109BA00000000000000000000000000000000000B5 -:109BB00000000000000000000000000000000000A5 -:109BC0000000000000000000000000000000000095 -:109BD0000000000000000000000000000000000085 -:109BE0001100000000000000000000000000000064 -:109BF0000000000000000000000000000000000065 -:109C00000000000000000000000000000000000054 -:109C10000000000000000000000000000000000044 -:109C20000000000000000000000000000000000034 -:109C30000000000000000000000000000000000024 -:109C40000000000000000000000000000000000014 -:109C50000000000000000000000000000000000004 -:109C600000000000000000000000000000000000F4 -:109C700000000000000000000000000000000000E4 -:109C800000000000000000000000000000000000D4 -:109C900000000000000000000000000000000000C4 -:109CA00000000000000000000000000000000000B4 -:109CB00000000000000000000000000000000000A4 -:109CC0000000000000000000000000000000000094 -:109CD0000000000000000000000000000000000084 -:109CE000000000080000000000000000000000006C -:109CF0000000000000000000000000000000000064 -:109D0000000000080000000000000000000000004B -:109D10000000000000000000000000000000000043 -:109D2000000000000008000000000000000000002B -:109D30000000000000000000000000000000000023 -:109D4000000000000008000000000000000000000B -:109D50000000000000000000000000000000000003 -:109D600000000000000000000000000000000000F3 -:109D700000000000000000000000000000000000E3 -:109D800000000000000000000000000000000000D3 -:109D900000000000000000000000000000000000C3 -:109DA00000000000000000000000000000000000B3 -:109DB00000000000000000000000000000000000A3 -:109DC0000000000000000000000000000000000093 -:109DD0000000000000000000000000000000000083 -:109DE0000000000000000000000000000000000073 -:109DF0000000000000000000000000000000000063 -:109E00000000000000000000000000000000000052 -:109E10000000000000000000000000000000000042 -:109E20000000000011000000000000000000000021 -:109E30000000000000000000000000000000000022 -:109E40000000000000000000000000000000000012 -:109E50000000000000000000000000000000000002 -:109E600000000000000000000000000000000000F2 -:109E700000000000000000000000000000000000E2 -:109E800000000000000000000000000000000000D2 -:109E900000000000000000000000000000000000C2 -:109EA00000000000000000000000000000000000B2 -:109EB00000000000000000000000000000000000A2 -:109EC0000000000000000000000000000000000092 -:109ED0000000000000000000000000000000000082 -:109EE0000000000000000000000000000000000072 -:109EF0000000000000000000000000000000000062 -:109F00000000000000000000000000000000000051 -:109F10000000000000000000000000000000000041 -:109F20000000000000000000000000000000000031 -:109F30000000000000000000000000000000000021 -:109F40000000000000000000000000000000000011 -:109F50000000000000000000000000000000000001 -:109F600000000000000000000000000000000000F1 -:109F700000000000000000000000000000000000E1 -:109F800000000000000000000000000000000000D1 -:109F900000000000000000000000000000000000C1 -:109FA00000000000000000000000000000000000B1 -:109FB00000000000000000000000000000000000A1 -:109FC0000000000000000000000000000000000091 -:109FD0000000000000000000000000000000000081 -:109FE0000000000000000000000000000000000071 -:109FF0000000000000000000000000000000000061 -:10A000000000000000000000000000000000000050 -:10A010000000000000000000000000000000000040 -:10A020000000000000000000000000000000000030 -:10A030000000000000000000000000000000000020 -:10A040000000000000000000000000000000000010 -:10A050000000000000000000000000000000000000 -:10A0600000000000000000000000000000000000F0 -:10A0700000000000000000000000000000000000E0 -:10A0800000000000000000000000000000000000D0 -:10A0900000000000000000000000000000000000C0 -:10A0A00000000000000000000000000000000000B0 -:10A0B00000000000000000000000000000000000A0 -:10A0C0000000000000000000000000000000000090 -:10A0D0000000000000000000000000000000000080 -:10A0E0000000000000000000000000000000000070 -:10A0F0000000000000000000000000000000000060 -:10A10000000000000000000000000000000000004F -:10A11000000000000000000000000000000000003F -:10A12000000000000000000000000000000000002F -:10A13000000000000000000000000000000000001F -:10A14000000000000000000000000000000000000F -:10A1500000000000000000000000000000000000FF -:10A1600000000000000000000000000000000000EF -:10A1700000000000000000000000000000000000DF -:10A1800000000000000000000000000000000000CF -:10A1900000000000000000000000000000000000BF -:10A1A00000000000000000000000000000000000AF -:10A1B000000000000000000000000000000000009F -:10A1C000000000000000000000000000000000008F -:10A1D000000000000000000000000000000000007F -:10A1E000000000000000000000000000000000006F -:10A1F000000000000000000000000000000000005F -:10A20000000000000000000000000000000000004E -:10A21000000000000000000000000000000000003E -:10A22000000000000000000000000000000000002E -:10A23000000000000000000000000000000000001E -:10A24000000000000000000000000000000000000E -:10A2500000000000000000000000000000000000FE -:10A2600000000000000000000000000000000000EE -:10A2700000000000000000000000000000000000DE -:10A2800000000000000000000000000000000000CE -:10A2900000000000000000000000000000000000BE -:10A2A00000000000000000000000000000000000AE -:10A2B000000000000000000000000000000000009E -:10A2C000000000000000000000000000000000008E -:10A2D000000000000000000000000000000000007E -:10A2E000000000000000000000000000000000006E -:10A2F000000000000000000000000000000000005E -:10A30000000000000000000000000000000000004D -:10A31000000000000000000000000000000000003D -:10A32000000000000000000000000000000000002D -:10A33000000000000000000000000000000000001D -:10A34000000000000000000000000000000000000D -:10A3500000000000000000000000000000000000FD -:10A3600000000000000000000000000000000000ED -:10A3700000000000000000000000000000000000DD -:10A3800000000000000000000000000000000000CD -:10A3900000000000000000000000000000000000BD -:10A3A00000000000000000000000000000000000AD -:10A3B000000000000000000000000000000000009D -:10A3C000000000000000000000000000000000008D -:10A3D000000000000000000000000000000000007D -:10A3E000000000000000000000000000000000006D -:10A3F000000000000000000000000000000000005D -:10A40000000000000000000000000000000000004C -:10A41000000000000000000000000000000000003C -:10A42000000000000000000000000000000000002C -:10A43000000000000000000000000000000000001C -:10A44000000000000000000000000000000000000C -:10A4500000000000000000000000000000000000FC -:10A4600000000000000000000000000000000000EC -:10A4700000000000000000000000000000000000DC -:10A4800000000000000000000000000000000000CC -:10A4900000000000000000000000000000000000BC -:10A4A00000000000000000000000000000000000AC -:10A4B000000000000000000000000000000000009C -:10A4C000000000000000000000000000000000008C -:10A4D000000000000000000000000000000000007C -:10A4E000000000000000000000000000000000006C -:10A4F000000000000000000000000000000000005C -:10A50000000000000000000000000000000000004B -:10A51000000000000000000000000000000000003B -:10A52000000000000000000000000000000000002B -:10A53000000000000000000000000000000000001B -:10A54000000000000000000000000000000000000B -:10A5500000000000000000000000000000000000FB -:10A5600000000000000000000000000000000000EB -:10A5700000000000000000000000000000000000DB -:10A5800000000000000000000000000000000000CB -:10A5900000000000000000000000000000000000BB -:10A5A00000000000000000000000000000000000AB -:10A5B000000000000000000000000000000000009B -:10A5C000000000000000000000000000000000008B -:10A5D000000000000000000000000000000000007B -:10A5E000000000000000000000000000000000006B -:10A5F000000000000000000000000000000000005B -:10A60000000000000000000000000000000000004A -:10A61000000000000000000000000000000000003A -:10A62000000000000000000000000000000000002A -:10A63000000000000000000000000000000000001A -:10A64000000000000000000000000000000000000A -:10A6500000000000000000000000000000000000FA -:10A6600000000000000000000000000000000000EA -:10A6700000000000000000000000000000000000DA -:10A6800000000000000000000000000000000000CA -:10A6900000000000000000000000000000000000BA -:10A6A00000000000000000000000000000000000AA -:10A6B000000000000000000000000000000000009A -:10A6C000000000000000000000000000000000008A -:10A6D000000000000000000000000000000000007A -:10A6E000000000000000000000000000000000006A -:10A6F000000000000000000000000000000000005A -:10A700000000000000000000000000000000000049 -:10A710000000000000000000000000000000000039 -:10A720000000000000000000000000000000000029 -:10A730000000000000000000000000000000000019 -:10A740000000000000000000000000000000000009 -:10A7500000000000000000000000000000000000F9 -:10A7600000000000000000000000000000000000E9 -:10A7700000000000000000000000000000000000D9 -:10A7800000000000000000000000000000000000C9 -:10A7900000000000000000000000000000000000B9 -:10A7A00000000000000000000000000000000000A9 -:10A7B0000000000000000000000000000000000099 -:10A7C0000000000000000000000000000000000089 -:10A7D0000000000000000000000000000000000079 -:10A7E0000000000000000000000000000000000069 -:10A7F0000000000000000000000000000000000059 -:10A800000000000000000000000000000000000048 -:10A810000000000000000000000000000000000038 -:10A820000000000000000000000000000000000028 -:10A830000000000000000000000000000000000018 -:10A840000000000300000000000000000000000005 -:10A8500000000000000000000000000000000000F8 -:10A8600000000000000000000000000000000000E8 -:10A8700000000000000000000000000000000000D8 -:10A8800000000000000000000000000000000000C8 -:10A8900000000000000000000000000000000000B8 -:10A8A00000000000000000000000000000000000A8 -:10A8B0000000000000000000000000000000000098 -:10A8C0000000000000000000000000000000000088 -:10A8D0000000000000000000000000000000000078 -:10A8E0000000000000000000000000000000000068 -:10A8F0000000000000000000000000000000000058 -:10A900000000000000000000000000000000000047 -:10A910000000000000000000000000000000010036 -:10A920000000000000000000000000000000000027 -:10A930000000000000000200000000000200000013 -:10A940000000000000000000000000000400000003 -:10A9500010000000000000000000020000000000E5 -:10A9600000000000000000000000000000000200E5 -:10A9700000000000000000000000000000000000D7 -:10A9800000000000000000000000000000000000C7 -:10A9900000000000000000000000000000000000B7 -:10A9A0001000000000000000000000000000000097 -:10A9B0000200000000000000000000000000000095 -:10A9C0000000000000000000000000000000000087 -:10A9D00000008000000000000000000000000000F7 -:10A9E0000000000002000000000000000000000065 -:10A9F0000000000000000000000000000000000057 -:10AA00000000000000000000000000000000000046 -:10AA10000000000000000000000000000000000036 -:10AA20000000000000000000000000000000000026 -:10AA30000000000000000000000000000000000016 -:10AA40000000000000000000000000000000000006 -:10AA500000000000000000000000000000000000F6 -:10AA600000000000000000000000000000000000E6 -:10AA700000000000000000000000000000000000D6 -:10AA800000000000000000000000000000000000C6 -:10AA900000000000000000000000000000000000B6 -:10AAA00000000000000000000000000000000000A6 -:10AAB0000000000000000000000000000000000096 -:10AAC0000000000000000000000000000000000086 -:10AAD0000000000000000000000000000000000076 -:10AAE0000000000000000000000000000000000066 -:10AAF0000000000000000000000000000000000056 -:10AB00000000000000000000000000000000000045 -:10AB10000000000000000000000000000000000035 -:10AB200000000000000000000000010000800000A4 -:10AB30000000000000000000000000000000000015 -:10AB40000000000000000000000000000000000005 -:10AB50000000000000000000000000000100008074 -:10AB600000400000000000000000000000000000A5 -:10AB700000000000000000000000000000000000D5 -:10AB800000000000000000000000000000000000C5 -:10AB900000000000000000000000000000000000B5 -:10ABA0000000000000000000000000002000000481 -:10ABB0000000000000000000000000000000000095 -:10ABC0000000000000000000000000000000000085 -:10ABD0000000000000000000000000000000200055 -:10ABE0002004000000000000000000000000000041 -:10ABF0000000000000000000000000000000000055 -:10AC00000000000000000000000000000000000044 -:10AC10000000000000000000000000000000000034 -:10AC20000000000000000000900000000000000094 -:10AC30000000000000000000000000000000000014 -:10AC40000000000000000000000000000000000004 -:10AC50000000000000000000000090000000000064 -:10AC600000000000000000000000000000000000E4 -:10AC700000000000000000000000000000000000D4 -:10AC800000000000000000000000000000000000C4 -:10AC900000000000000000000000000000000000B4 -:10ACA00000000000000000000000000000000000A4 -:10ACB0000000000000000000000000000000000094 -:10ACC0000000000000000000000000000000000084 -:10ACD0000000000000000000000000000000000074 -:10ACE0000000000000000000000000000000000064 -:10ACF0000000000000000000000000000000000054 -:10AD00000000000000000000000000000000000043 -:10AD10000000000000000000000000000000000033 -:10AD200000000000000000000000000040000000E3 -:10AD30000000000000000000000000000000000013 -:10AD40000000000000000000000000000000000003 -:10AD500000000000000000000000000000000000F3 -:10AD600000000000000000000000000000000000E3 -:10AD700000000000000000000000000000000000D3 -:10AD800000000000000000000000000000000000C3 -:10AD900000000000000000000000000000000000B3 -:10ADA00000000000000000000000000000000000A3 -:10ADB0000000000000000000000000000000000093 -:10ADC0000000000000000000000000000000000083 -:10ADD0000000000000000000000000000000000073 -:10ADE0000000000000000000000000000000000063 -:10ADF0000000000000000000000000000000000053 -:10AE00000000000000000000000000000000000042 -:10AE10000000000000000000000000000000000032 -:10AE20000000000000000000000000000000000022 -:10AE30000000010000000000000000000000000011 -:10AE40000000000000000000000000000000000002 -:10AE500000000000000000000000000000000000F2 -:10AE600000000000010000000000000000000000E1 -:10AE700000000000000000000000000000000000D2 -:10AE800000000000000000000000000000000000C2 -:10AE900000000000000000000000000000000000B2 -:10AEA00000000000000000000000000000000000A2 -:10AEB0000000000011002100000000000000000060 -:10AEC0000000000000000000000000000000000082 -:10AED0000000000000000000000000000000000072 -:10AEE0000000000000001100210000000000000030 -:10AEF0000000000000000000000000000000000052 -:10AF00000000000000000000000000000000000041 -:10AF10000000000000000000000000000000000031 -:10AF20000000000000000000000000000000000021 -:10AF300000000000000000410900000300000000C4 -:10AF40000000000000000000000000000000000001 -:10AF500000000000000000000000000000000000F1 -:10AF60000000000000000000004109000003000094 -:10AF700000000000000000000000000000000000D1 -:10AF800000000000000000000000000000000000C1 -:10AF900000000000000000000000000000000000B1 -:10AFA00000000000000000000000000000000000A1 -:10AFB000000000000000000000010100000000008F -:10AFC0000000000000000000000000000000000081 -:10AFD0000000000000000000000000000000000071 -:10AFE000000000000000000000000001010000005F -:10AFF0000000000000000000000000000000000051 -:10B000000000000000000000000000000000000040 -:10B010000000000000000000000000000000000030 -:10B020000000000000000000000000000000000020 -:10B030000000000000000000000000008800000088 -:10B040000000000000000000000000000000000000 -:10B0500000000000000000000000000000000000F0 -:10B060000000000000000000000000000000880058 -:10B0700000000100000000000000000000000000CF -:10B0800000000000000000000000000000000000C0 -:10B0900000000000000000000000000000000000B0 -:10B0A00000000000000000000000000000000000A0 -:10B0B0000000000000000000000000000000000090 -:10B0C000000005000000000000000000000000007B -:10B0D0000000000000000000000000000000000070 -:10B0E0000000000000000000000000000000000060 -:10B0F0000000000020000000000000000000000030 -:10B10000000000000000000000000000000000003F -:10B11000000000000000000000000000000000002F -:10B12000000000000000000000000000000000001F -:10B13000000000000000000000000000000000000F -:10B1400000110000000000000000000000000000EE -:10B1500000000000000000000000000000000000EF -:10B1600000000000000000000000000000000000DF -:10B1700000000011000000000000000000000000BE -:10B1800000000000000000000000000000000000BF -:10B1900000000000000000000000000000000000AF -:10B1A000000000000000000000000000000000009F -:10B1B000000000000000000000000000000000008F -:10B1C000000000010000000000000000000000007E -:10B1D000000000000000000000000000000000006F -:10B1E000000000000000000000000000000000005F -:10B1F000000000000001000000000000000000004E -:10B20000000000000000000000000000000000003E -:10B21000000000000000000000000000000000002E -:10B22000000000000000000000000000000000001E -:10B23000000000000000000000000000000000000E -:10B240000000000000E0000081000000000000009D -:10B2500000000000000000000000000000000000EE -:10B2600000000000000000000000000000000000DE -:10B2700000000000000000E000008100000000006D -:10B2800000000000000000000000000000000000BE -:10B2900000000000000000000000000000000000AE -:10B2A000000000000000000000000000000000009E -:10B2B000000000000000000000000000000000008E -:10B2C000000000000000000000000000000000007E -:10B2D000000000000000000000000000000000006E -:10B2E000000000000000000000000000000000005E -:10B2F000000000000000000000000000000000004E -:10B30000000000000000000000000000000000003D -:10B31000000000000000000000000000000000002D -:10B32000000000000000000000000000000000001D -:10B33000000000000000000000000000000000000D -:10B3400000000000000000000000000000000000FD -:10B3500000000000000000000000000000000000ED -:10B3600000000000000000000000000000000000DD -:10B3700000000000000000000000000000000000CD -:10B3800000000000000000000000000000000000BD -:10B3900000000000000000000000000000000000AD -:10B3A000000000000000000000000000000000009D -:10B3B000000000000000000000000000000000008D -:10B3C000000000000000000000000000000000007D -:10B3D000000000000000000000000000000000006D -:10B3E000000000000000000000000000000000005D -:10B3F000000000000000000000000000000000004D -:10B40000000000000000000000000000000000003C -:10B41000000000000000000000000000000000002C -:10B42000000000000000000000000000000000001C -:10B43000000000000000000000000000000000000C -:10B4400000000000000000000000000000000000FC -:10B4500000000000000000000000000000000000EC -:10B4600000000000000000000000000000000000DC -:10B4700000000000000000000000000000000000CC -:10B4800000000000000000000000000000000000BC -:10B4900000000000000000000000000000000000AC -:10B4A000000000000000000000000000000000009C -:10B4B000000000000000000000000000000000008C -:10B4C0000000000000000000000000000060000616 -:10B4D000000C000000000000000000000000000060 -:10B4E000000000000000000000000000000000005C -:10B4F00000000000000000000000000000000060EC -:10B500000006000C00000000000000000000000029 -:10B51000000000000000000000000000000000002B -:10B52000000000000000000000000000000000001B -:10B53000000000000000000000000000000000000B -:10B5400000000000000000000000000000000000FB -:10B550000000FFFF000000000000000000000000ED -:10B5600000000000000000000000000000000000DB -:10B5700000000000000000000000000000000000CB -:10B5800000000000FFFF00000000000000000000BD -:10B5900000000000000000000000000000000000AB -:10B5A000000000000000000000000000000000009B -:10B5B000000000000000000000000000000000008B -:10B5C000000000000000000000000000000000007B -:10B5D000000000000000000000000000000000006B -:10B5E000000000000000000000000000000000005B -:10B5F000000000000000000000000000000000004B -:10B60000000000000000000000000000000000003A -:10B61000000000000000000000000000000000002A -:10B62000000000000000000000000000000000001A -:10B63000000000000000000000000000000000000A -:10B6400000000000000000000000000000000000FA -:10B65000000000000000F0F000000000000000000A -:10B6600000000000000000000000000000000000DA -:10B6700000000000000000000000000000000000CA -:10B680000000000000000000F0F0000000000000DA -:10B6900000000000000000000000000000000000AA -:10B6A000000000000000000000000000000000009A -:10B6B000000000000000000000000000000000008A -:10B6C000000000000000000000000000000000007A -:10B6D0000000000000000000F0F00000000000008A -:10B6E000000000000000000000000000000000005A -:10B6F000000000000000000000000000000000004A -:10B7000000000000000000000000F0F00000000059 -:10B710000000000000000000000000000000000029 -:10B720000000000000000000000000000000000019 -:10B730000000000000000000000000000000000009 -:10B7400000000000000000000000000000000000F9 -:10B7500000000000000000000000000000000000E9 -:10B7600000000000000000000000000000000000D9 -:10B7700000000000000000000000000000000002C7 -:10B7800000000000000000000000000000000000B9 -:10B7900004000000000000000000000004000000A1 -:10B7A0000000000000000000000000000000000099 -:10B7B0002000000000000000000000000000000069 -:10B7C0000000000000000000000000000000000079 -:10B7D0000000000000000000000000000000000069 -:10B7E0000000000000000000000000000000000059 -:10B7F0000000000000000000000000000000000049 -:10B800000000000000000000000000000000000038 -:10B8100000004000000000000000000000000000E8 -:10B820000000000000000000000000000000000414 -:10B8300000004000000000000000000000000000C8 -:10B8400000000000000000000000000000000000F8 -:10B8500000000000000000000000000000000000E8 -:10B8600000000000000000000000000000000000D8 -:10B8700000000000000002000000000000000000C6 -:10B8800000000000000000000000000000000000B8 -:10B8900000000000020000000200000000000000A4 -:10B8A0000000000000000000000000000000000098 -:10B8B0000000000000000000000000000000000088 -:10B8C0000000000000000000000000000000000078 -:10B8D0000000000000000000000000000000000068 -:10B8E0000000000000000000000000000000000058 -:10B8F0000000000000000000000000000000000048 -:10B900000000000000000000000000000000000037 -:10B9100000000000000080000000000000000000A7 -:10B920000000000000000000000000000000000017 -:10B930000000000000000000000000000000000007 -:10B9400000000000000000000000000000000000F7 -:10B9500000000000000000000000000000000000E7 -:10B9600000000000000000000000000000000000D7 -:10B9700000000000000000000000000000000000C7 -:10B9800000000000000000000000000000000000B7 -:10B99000000004000000000000000400000000009F -:10B9A0000000000000000000000000000000000097 -:10B9B0000000000000000000000000000000000087 -:10B9C0000000000000000000000000000000000077 -:10B9D0000000000000000000000000000000000067 -:10B9E0000000000000000000000000000000000057 -:10B9F0000000000000000000000000000000000047 -:10BA00000000000000000000000000000000000036 -:10BA10000000000000000000000000000000000026 -:10BA20000000000000000000000000000000000016 -:10BA30000000000000000000000000000000000006 -:10BA400000000000000000000000000000000000F6 -:10BA500000000000000000000000000000000000E6 -:10BA600000000000000000000000000000000000D6 -:10BA700000000000000000000000000000000000C6 -:10BA800000000000000000000000000000000000B6 -:10BA90000000000000000000000000000040000066 -:10BAA0000000010000000000000000000000000095 -:10BAB0000000000000000000000000000000000086 -:10BAC000000000000000000008000000000000006E -:10BAD0000000000000000000000000000000000066 -:10BAE0000000000000000000000000000000000056 -:10BAF0000000000000000000000000000000000046 -:10BB00000000000000000000000000000000000035 -:10BB10000000000000000000000000000000000025 -:10BB20000000000004000000000000000000000011 -:10BB30000000000000000000000000000000000005 -:10BB400000000000000000000000000000000000F5 -:10BB500000000000000000000000000000000000E5 -:10BB600000000000000000000000000000000000D5 -:10BB700000000000000000000000000000000000C5 -:10BB800000000000000000000000000000000000B5 -:10BB900000000000000000000000000000000000A5 -:10BBA0000000000000200000000000000000000075 -:10BBB0000000000000000000000000000000000085 -:10BBC0000000000000000000000000000000000075 -:10BBD0000000000000000000000000000000000065 -:10BBE00000000000000000C0000000000084000011 -:10BBF0000000000000000000000000000000000045 -:10BC00000000000000000000000000000000000034 -:10BC1000000000000000000000C0000000000084E0 -:10BC20000000000000000001000000000000000013 -:10BC30000000000000000000000000000000000004 -:10BC400000000000000000000000000000000000F4 -:10BC500000000000000000000000000000000000E4 -:10BC600000000000000000000000000000000000D4 -:10BC700000000000000000020000000000000000C2 -:10BC800000000000000000000000000000000000B4 -:10BC900000000000000000000000000000000000A4 -:10BCA0000000000000000000000200000000000092 -:10BCB0000000000000000000000000000000000084 -:10BCC0000000000000000000000000000000000074 -:10BCD0000000000000000000000000000000000064 -:10BCE0000000000000000000000000000000000054 -:10BCF0000000000000000000000000000000000044 -:10BD00000000000000000000000000000000000033 -:10BD10000000000000000000000000000000000023 -:10BD20000000000000000000000000000000000013 -:10BD30000000000000000000000000000000000003 -:10BD400000000000000000000000000000000000F3 -:10BD500000000000000000000000000000000000E3 -:10BD600000000000000000000000000000000000D3 -:10BD700000000000000000000000000000000000C3 -:10BD800000000000000000000000000000000000B3 -:10BD900000000000000000000000000000000000A3 -:10BDA0000000000000000000000090000000000003 -:10BDB0000000000000000000000000000000000083 -:10BDC0000000000000000000000000000000000073 -:10BDD0000000000000000000000000000000000063 -:10BDE0000000000000000000000000000000000053 -:10BDF0000000000000000000000000000000000043 -:10BE00000000000000000000000000000000000032 -:10BE10000000000000000000000000000000000022 -:10BE20000000000000000000000011008000000081 -:10BE30000000000000000000000000000000000002 -:10BE400000000000000000000000000000000000F2 -:10BE500000000000000000000000000000000000E2 -:10BE600000000000000000000000000000000000D2 -:10BE700000000000000000000000000000000000C2 -:10BE800000000000000000000000000000000000B2 -:10BE900000000000000000000000000000000000A2 -:10BEA0000000000000000000000000000000008012 -:10BEB0000000000000000000000000000000000082 -:10BEC0000000000000000000000000000000000072 -:10BED0000000000000000000000000000000000062 -:10BEE0000000000000000000000000000000000052 -:10BEF0000000000000000000000000000000000042 -:10BF00000000000000000000000000000000000031 -:10BF10000000000000000000000000000000000021 -:10BF20000000000000000000000000000000000011 -:10BF3000002000000082000000000000000000005F -:10BF400000000000000000000000000000000000F1 -:10BF500000000000000000000000000000000000E1 -:10BF600000000000000000000000000000000000D1 -:10BF700000000000000000000000000000000000C1 -:10BF800000000000000000000000000000000000B1 -:10BF900000000000000000000000000000000000A1 -:10BFA0000000000000000000000000000000000091 -:10BFB0000100008888000000000000000000000070 -:10BFC0000000000000000000000000000000000071 -:10BFD0000000000000000000000000000000000061 -:10BFE0000000000000000000000000000000000051 -:10BFF0000000000000000000000000000000000041 -:10C000000000000000000000000000000000000030 -:10C010000000000000000000000000000000000020 -:10C020000000000000000000000000000000000010 -:10C03000000041000080000000000000000000003F -:10C0400000000000000000000000000000000000F0 -:10C0500000000000000000000000000000000000E0 -:10C0600000000000000000000000000000000000D0 -:10C0700000000000000000000000000000000000C0 -:10C0800000000000000000000000000000000000B0 -:10C0900000000000000000000000000000000000A0 -:10C0A0000000000000000000000000000000000090 -:10C0B00000000000001100000080000000000000EF -:10C0C0000000000000000000000000000000000070 -:10C0D0000000000000000000000000000000000060 -:10C0E0000000000000000000000000000000000050 -:10C0F0000000000000000000000000000000000040 -:10C10000000000000000000000000000000000002F -:10C11000000000000000000000000000000000001F -:10C12000000000000000000000000000000000000F -:10C1300000000000000000010000004000000000BE :10C1400000000000000000000000000000000000EF :10C1500000000000000000000000000000000000DF :10C1600000000000000000000000000000000000CF :10C1700000000000000000000000000000000000BF -:10C1800000000000000000000000000000000000AF -:10C19000000000000000000000000000000000009F -:10C1A000000000000000000000000000000000008F -:10C1B00000000000000000000000000007008200F6 -:10C1C000000000000000000000000000000000006F -:10C1D000000000000000000000000000000000005F -:10C1E000000000000000000000000000000000004F -:10C1F000000000000000000000000000000000003F +:10C1800000000000000010004102410041C010C04A +:10C19000000000C000000000000200C000024000DB +:10C1A00000004000000040000000004010000000BF +:10C1B000000200020000400010000000000000002B +:10C1C000000000000000000000000002000000006D +:10C1D000000000001000000000020000000000004D +:10C1E000000000000000000000000000100000003F +:10C1F000000000020000000000000000000000003D :10C20000000000000000000000000000000000002E -:10C21000000000000000000000000000000000001E -:10C22000000000000000000000000000000000000E -:10C2300000000000000000000000000000000000FE -:10C24000F0F000000000000000000000000000000E +:10C2100000000000020008400000000000000000D4 +:10C2200000000000000000400000000000000000CE +:10C2300000000000000000100000000000000000EE +:10C2400000000000000002100000000000000000DC :10C2500000000000000000000000000000000000DE -:10C2600000000000000000000000000000000000CE -:10C2700000000000000000000000000000000000BE -:10C2800000000000000000000000000000000000AE +:10C26000000000000000000000400000000000008E +:10C2700000000000000000000010000000000000AE +:10C28000000000000000000002100000000000009C :10C29000000000000000000000000000000000009E :10C2A000000000000000000000000000000000008E :10C2B000000000000000000000000000000000007E -:10C2C0000000F0F00000000000000000000000008E +:10C2C000000000000000000000000000000000006E :10C2D000000000000000000000000000000000005E :10C2E000000000000000000000000000000000004E :10C2F000000000000000000000000000000000003E :10C30000000000000000000000000000000000002D -:10C31000000000000000000000000000000000001D -:10C32000000000000000000000000000000000000D -:10C3300000000000000000000000000000000000FD +:10C3100000000000000020000000000000000000FD +:10C32000000000000000000082000000000000008B +:10C3300000000000000000000800000000000000F5 :10C3400000000000000000000000000000000000ED -:10C3500000000000000000000000000000000000DD -:10C3600000000000000000000000000000000000CD -:10C3700000000000000000000000000000000000BD -:10C3800000000000000000000000000000000000AD -:10C39000000000000000000000000000000000009D -:10C3A000000000000000000000000000000000008D +:10C3500000000000000000000000000000001000CD +:10C360001000000000000000000004008800000031 +:10C370000000000000000000840000000400000035 +:10C3800004000000000000000000000000000000A9 +:10C39000000000000000110000000000000000008C +:10C3A0000400000000000000000000000000000089 :10C3B000000000000000000000000000000000007D -:10C3C00000000000FFFF000000000000000000006F -:10C3D000000000000000000000000000000000005D +:10C3C000000000000000000000000000000000006D +:10C3D0000500000000000000000000000000410017 :10C3E000000000000000000000000000000000004D :10C3F000000000000000000000000000000000003D :10C40000000000000000000000000000000000002C -:10C41000000000000000000000000000000000001C +:10C410000000000000000000000000008400000098 :10C42000000000000000000000000000000000000C :10C4300000000000000000000000000000000000FC :10C4400000000000000000000000000000000000EC @@ -68696,32 +60502,32 @@ :10C4600000000000000000000000000000000000CC :10C4700000000000000000000000000000000000BC :10C4800000000000000000000000000000000000AC -:10C49000000000000000000000000000000000009C +:10C49000000000000000000000000000008200001A :10C4A000000000000000000000000000000000008C :10C4B000000000000000000000000000000000007C -:10C4C0000000000005000A00054000A80000000070 +:10C4C000000000000000000000000000000000006C :10C4D000000000000000000000000000000000005C :10C4E000000000000000000000000000000000004C :10C4F000000000000000000000000000000000003C :10C50000000000000000000000000000000000002B :10C51000000000000000000000000000000000001B -:10C52000000000000000000000000000000000000B +:10C5200000000000002000000000000000000000EB :10C5300000000000000000000000000000000000FB :10C5400000000000000000000000000000000000EB -:10C5500000000000000000000000000000000000DB +:10C5500000000000000008000000000000000000D3 :10C5600000000000000000000000000000000000CB :10C5700000000000000000000000000000000000BB :10C5800000000000000000000000000000000000AB :10C59000000000000000000000000000000000009B :10C5A000000000000000000000000000000000008B -:10C5B000000000000000000000000000000000007B +:10C5B0000500000000000000000000000000000076 :10C5C000000000000000000000000000000000006B :10C5D000000000000000000000000000000000005B :10C5E000000000000000000000000000000000004B :10C5F000000000000000000000000000000000003B -:10C60000000000000000000000000000000000002A +:10C600000000040000000000000000000000000026 :10C61000000000000000000000000000000000001A -:10C62000000000000000000000000000000000000A +:10C6200000000000000040000000000000000000CA :10C6300000000000000000000000000000000000FA :10C6400000000000000000000000000000000000EA :10C6500000000000000000000000000000000000DA @@ -68729,8 +60535,8 @@ :10C6700000000000000000000000000000000000BA :10C6800000000000000000000000000000000000AA :10C69000000000000000000000000000000000009A -:10C6A000000000000000000000000000000000008A -:10C6B000000000000000000000000000000000007A +:10C6A000000000000000000040000000000000004A +:10C6B0002100000000000000001000000000000049 :10C6C000000000000000000000000000000000006A :10C6D000000000000000000000000000000000005A :10C6E000000000000000000000000000000000004A @@ -68738,7 +60544,7 @@ :10C700000000000000000000000000000000000029 :10C710000000000000000000000000000000000019 :10C720000000000000000000000000000000000009 -:10C7300000000000000000000000000000010000F8 +:10C7300000000000000000000000000000000000F9 :10C7400000000000000000000000000000000000E9 :10C7500000000000000000000000000000000000D9 :10C7600000000000000000000000000000000000C9 @@ -68751,8 +60557,8 @@ :10C7D0000000000000000000000000000000000059 :10C7E0000000000000000000000000000000000049 :10C7F0000000000000000000000000000000000039 -:10C800000000000000000000040000000000000024 -:10C810000000000000000000100000000000000008 +:10C800000000000000000000000000000000000028 +:10C810000000000000000000000000000000000018 :10C820000000000000000000000000000000000008 :10C8300000000000000000000000000000000000F8 :10C8400000000000000000000000000000000000E8 @@ -68760,14 +60566,14 @@ :10C8600000000000000000000000000000000000C8 :10C8700000000000000000000000000000000000B8 :10C8800000000000000000000000000000000000A8 -:10C890000000000000000000000080000000000018 -:10C8A0000000000000000000000004000000000084 -:10C8B0000000000000000000000004000000000074 +:10C890000000000000000000000000000000000098 +:10C8A0000000000000000000000000000000000088 +:10C8B0000000000000000000000000000000000078 :10C8C0000000000000000000000000000000000068 :10C8D0000000000000000000000000000000000058 :10C8E0000000000000000000000000000000000048 :10C8F0000000000000000000000000000000000038 -:10C900000200000000000000000000000000000025 +:10C900000000000000000000000000000000000027 :10C910000000000000000000000000000000000017 :10C920000000000000000000000000000000000007 :10C9300000000000000000000000000000000000F7 @@ -68784,16 +60590,16 @@ :10C9E0000000000000000000000000000000000047 :10C9F0000000000000000000000000000000000037 :10CA00000000000000000000000000000000000026 -:10CA1000000000000000A000000000000000000076 -:10CA20000000000001000080000000000000000085 +:10CA10000000000000000000000000000000000016 +:10CA20000000000000000000000000000000000006 :10CA300000000000000000000000000000000000F6 :10CA400000000000000000000000000000000000E6 :10CA500000000000000000000000000000000000D6 :10CA600000000000000000000000000000000000C6 -:10CA70000000000000200000000000000000000096 +:10CA700000000000000000000000000000000000B6 :10CA800000000000000000000000000000000000A6 :10CA90000000000000000000000000000000000096 -:10CAA0000000000000002000000400000000000062 +:10CAA0000000000000000000000000000000000086 :10CAB0000000000000000000000000000000000076 :10CAC0000000000000000000000000000000000066 :10CAD0000000000000000000000000000000000056 @@ -68801,7 +60607,7 @@ :10CAF0000000000000000000000000000000000036 :10CB00000000000000000000000000000000000025 :10CB10000000000000000000000000000000000015 -:10CB20000000900000000000000000000000000075 +:10CB20000000000000000000000000000000000005 :10CB300000000000000000000000000000000000F5 :10CB400000000000000000000000000000000000E5 :10CB500000000000000000000000000000000000D5 @@ -68813,369 +60619,369 @@ :10CBB0000000000000000000000000000000000075 :10CBC0000000000000000000000000000000000065 :10CBD0000000000000000000000000000000000055 -:10CBE00000000000000000840000000000000000C1 +:10CBE0000000000000000000000000000000000045 :10CBF0000000000000000000000000000000000035 :10CC00000000000000000000000000000000000024 -:10CC1000000000000000080000000000000000000C +:10CC10000000000000000000000000000000000014 :10CC20000000000000000000000000000000000004 :10CC300000000000000000000000000000000000F4 :10CC400000000000000000000000000000000000E4 :10CC500000000000000000000000000000000000D4 :10CC600000000000000000000000000000000000C4 -:10CC700000020000000000000000000000000000B2 +:10CC700000000000000000000000000000000000B4 :10CC800000000000000000000000000000000000A4 :10CC90000000000000000000000000000000000094 :10CCA0000000000000000000000000000000000084 :10CCB0000000000000000000000000000000000074 :10CCC0000000000000000000000000000000000064 :10CCD0000000000000000000000000000000000054 -:10CCE0000000000020000000000000000000000024 +:10CCE0000000000000000000000000000000000044 :10CCF0000000000000000000000000000000000034 :10CD00000000000000000000000000000000000023 :10CD10000000000000000000000000000000000013 -:10CD20000000000000000000000000000100000002 -:10CD300000000000000000000000000000000000F3 -:10CD400000000000000000000000000000000000E3 -:10CD500000000000000000000000000000000000D3 -:10CD600000000000000000000000000000000000C3 -:10CD700000000000000000000000000000000000B3 -:10CD800000000000000000000000000000000000A3 -:10CD90000000000000000000000000000000000093 -:10CDA0000000000000000000000000000000110072 -:10CDB0002100000000000000000000000000000052 -:10CDC0000000000000000000000000000000000063 -:10CDD0000000000000000000000000000000000053 -:10CDE0000000000000000000000000000000000043 -:10CDF0000000000000000000000000000000000033 -:10CE00000000000000000000000000000000000022 -:10CE10000000000000000000000000000000000012 -:10CE20000000000000000000000000000000000002 -:10CE300000410900000300000000000000000000A5 -:10CE400000000000000000000000000000000000E2 -:10CE500000000000000000000000000000000000D2 -:10CE600000000000000000000000000000000000C2 -:10CE700000000000000000000000000000000000B2 -:10CE800000000000000000000000000000000000A2 -:10CE90000000000000000000000000000000000092 -:10CEA0000000000000000000000000000000000082 -:10CEB0000000000101000000000000000000000070 -:10CEC0000000000000000000000000000000000062 -:10CED0000000000000000000000000000000000052 -:10CEE0000000000000000000000000000000000042 -:10CEF0000000000000000000000000000000000032 -:10CF00000000000000000000000000000000000021 -:10CF10000000000000000000000000000000000011 -:10CF20000000000000000000000000000000000001 -:10CF30000000000000008800000000000000000069 -:10CF400000000000000000000000000000000000E1 +:10CD20000000000000000000000000000000000003 +:10CD300000000000100000000000010001804180A0 +:10CD4000218021800080010001000080200000007F +:10CD500000000000100000000000000000000000C3 +:10CD60002000200000000000000000000000000083 +:10CD700000000000000300000000000000000000B0 +:10CD80000000200020000000000000000000000063 +:10CD90000000000000000000000040000000000053 +:10CDA0000000200020000000000000000000000043 +:10CDB000000000000000400040001002040020209D +:10CDC00020202020202040200400040000204000DB +:10CDD0002000100200002000400000001000400071 +:10CDE00020004000000000000000000000000000E3 +:10CDF00040000040002000004000400040000000D3 +:10CE00000000400000000000000040000040210041 +:10CE1000408440000002000240024090000040C0F8 +:10CE20004000400000000000004000000000000042 +:10CE30004000000000000000040004000020022068 +:10CE4000050005002100050004000100010001406B +:10CE5000000000000000000000000000000008408A +:10CE60000000000000100000000000000000004072 +:10CE700000000008000000000000004000400040EA +:10CE800000400200020000402040004000400040FE +:10CE9000004000400040004000400200020000400E +:10CEA00002000200020000400040000000000000FC +:10CEB0000040000000000000000080048000000925 +:10CEC0000009A008A0008408A00880080400040845 +:10CED000040800080900000800080000000000081D +:10CEE0000008000800000008000800080000000812 +:10CEF0000008000410000008000800000001000104 +:10CF0000000900098008800000098009000900016B +:10CF100000090009000100410009000980008000AB +:10CF2000000980088008800000090009000800004E +:10CF300000080008000000000008000800000005CC +:10CF400001000000040000000000000000001000CC :10CF500000000000000000000000000000000000D1 :10CF600000000000000000000000000000000000C1 :10CF700000000000000000000000000000000000B1 -:10CF800000000000000000000000000000000000A1 -:10CF90000000000000000000000000000000000091 -:10CFA0000000000000000000000000000000000081 -:10CFB0000000000000000000000000004000000031 -:10CFC0000000000000000000000000000000000061 -:10CFD0000000000000000000000000000000000051 +:10CF800088000000000000000000000000004000D9 +:10CF90000000000000000021000000000000000070 +:10CFA000000000000000000300000000000000007E +:10CFB0000000000000000000000000000000090068 +:10CFC000090004001100000000000000040000201F +:10CFD000030000000000000000000000000000004E :10CFE0000000000000000000000000000000000041 -:10CFF0000000000000000000000000000000000031 +:10CFF0000000000000000800000000000000000029 :10D000000000000000000000000000000000000020 :10D010000000000000000000000000000000000010 -:10D020000000000000000000000000000000000000 -:10D0300000000000000000000000001100000000DF -:10D0400000000000000000000000000000000000E0 +:10D0200000004000000000000000000000000000C0 +:10D0300000000000000000000000000000000000F0 +:10D04000C00004000000C02000000800000900002B :10D0500000000000000000000000000000000000D0 :10D0600000000000000000000000000000000000C0 :10D0700000000000000000000000000000000000B0 -:10D0800000000000000000000000000000000000A0 -:10D090000000000000000000000000000000000090 -:10D0A0000000000000000000000000000000000080 -:10D0B000000000000000000000000000000100006F -:10D0C0000000000000000000000000000000000060 -:10D0D0000000000000000000000000000000000050 +:10D08000000085000000000000000000000000001B +:10D09000200082800000010000000000000000006D +:10D0A000820000800000010000400000000000003D +:10D0B0000000000000000000000000000000000070 +:10D0C00000000000800000000000000000000000E0 +:10D0D00000000000000000000000009000000000C0 :10D0E0000000000000000000000000000000000040 :10D0F0000000000000000000000000000000000030 -:10D10000000000000000000000000000000000001F -:10D11000000000000000000000000000000000000F -:10D1200000000000000000000000000000000000FF -:10D13000000000000000000000000000000000E00F -:10D14000000081000000000000000000000000005E -:10D1500000000000000000000000000000000000CF +:10D10000000000000200000000000000000000001D +:10D110000000800000080000024000000000000045 +:10D1200000000000000800000200000000000000F5 +:10D1300000000000000000000000000000000000EF +:10D14000000000000880000000000000080000004F +:10D150000000C0000000000000000000000000000F :10D1600000000000000000000000000000000000BF :10D1700000000000000000000000000000000000AF -:10D18000000000000000000000000000000000009F -:10D19000000000000000000000000000000000008F -:10D1A000000000000000000000000000000000007F -:10D1B000000000000000000000000000000000006F -:10D1C000000000000000000000000000000000005F +:10D1800000000000000084000000200000000221D8 +:10D1900000000000C0008204000000002000022106 +:10D1A00000000000C0400004000000002000000358 +:10D1B000000000000040000000000000002000000F +:10D1C000000000000000002000000000000000003F :10D1D000000000000000000000000000000000004F :10D1E000000000000000000000000000000000003F :10D1F000000000000000000000000000000000002F -:10D20000000000000000000000000000000000001E -:10D21000000000000000000000000000000000000E -:10D2200000000000000000000000000000000000FE -:10D2300000000000000000000000000000000000EE -:10D2400000000000000000000000000000000000DE -:10D2500000000000000000000000000000000000CE +:10D20000000000000000000000000000800000009E +:10D21000800000000000000000010000000080000D +:10D2200080000000100000010001000000008000EC +:10D2300000000000000000010000000000000000ED +:10D240000000000000000000000000410000080095 +:10D25000000000400000000000000000000000008E :10D2600000000000000000000000000000000000BE :10D2700000000000000000000000000000000000AE -:10D28000000000000000000000000000000000009E -:10D29000000000000000000000000000000000008E -:10D2A000000000000000000000000000000000007E -:10D2B000000000000000000000000000000000006E +:10D28000000000000000000000001100000000008D +:10D2900000000000020000400040000010000008F4 +:10D2A0000000000002000040000000001000000824 +:10D2B000000000000000004000000000000000002E :10D2C000000000000000000000000000000000005E -:10D2D000000000000000000000000000000000004E +:10D2D000001000000000000000000000000000003E :10D2E000000000000000000000000000000000003E :10D2F000000000000000000000000000000000002E -:10D30000000000000000000000000000000000001D -:10D31000000000000000000000000000000000000D -:10D3200000000000000000000000000000000000FD -:10D3300000000000000000000000000000000000ED +:10D30000000000000000000000000000A00000007D +:10D31000000000000000800000010001000080000B +:10D3200000010000000080000001000000008000FB +:10D3300000010000000000000001000000000000EB :10D3400000000000000000000000000000000000DD :10D3500000000000000000000000000000000000CD :10D3600000000000000000000000000000000000BD :10D3700000000000000000000000000000000000AD -:10D38000000000000000000000000000000000009D -:10D39000000000000000000000000000000000008D -:10D3A000000000000000000000000000000000007D -:10D3B000000000000000000000000000000000006D -:10D3C00000000000000000600006000C00000000EB +:10D38000000000000000000000000000000000C1DC +:10D3900000000001000000C000000100000041C1C9 +:10D3A00000000000008800C000040000000041C12F +:10D3B00000000000008800C0000400002000000001 +:10D3C000000000000000000000000000000020003D :10D3D000000000000000000000000000000000004D :10D3E000000000000000000000000000000000003D :10D3F000000000000000000000000000000000002D :10D40000000000000000000000000000000000001C -:10D41000000000000000000000000000000000000C -:10D4200000000000000000000000000000000000FC -:10D4300000000000000000000000000000000000EC -:10D44000000000000000000000000000FFFF0000DE -:10D4500000000000000000000000000000000000CC -:10D4600000000000000000000000000000000000BC +:10D4100020C1002111090000088000000800000060 +:10D4200089C111001103008300800080000000000A +:10D4300089C11100110300830080008000000000FA +:10D4400000000000000000000000000000000000DC +:10D45000000000000000000000200000001000009C +:10D46000000000800000000000000000000000003C :10D4700000000000000000000000000000000000AC :10D48000000000000000000000000000000000009C -:10D49000000000000000000000000000000000008C -:10D4A000000000000000000000000000000000007C -:10D4B000000000000000000000000000000000006C -:10D4C000000000000000000000000000000000005C -:10D4D000000000000000000000000000000000004C -:10D4E000000000000000000000000000000000003C +:10D490000000200000008900C1800000000300009F +:10D4A0008000400000004111C100000000000000A9 +:10D4B0008000400000004111C10000000000000099 +:10D4C00080000000000000000000000000000000DC +:10D4D000000000000090000000200000004000015B +:10D4E0000090000000C000000040000000000000AC :10D4F000000000000000000000000000000000002C :10D50000000000000000000000000000000000001B -:10D51000000000000000000000000000000000000B -:10D5200000000000000000000000000000000000FB -:10D5300000000000000000000000000000000000EB -:10D5400000000000000000000000000000000000DB -:10D55000F0F00000000000000000000000000000EB -:10D5600000000000000000000000000000000000BB +:10D5100000000000002000008400C188000000001E +:10D520000000C000884000000001C10000000000B1 +:10D530000000C000884000000001C10000000000A1 +:10D540000000C0000000000000000000000000001B +:10D550000000000001000000880000000100200021 +:10D560004000000000000000020000000000000079 :10D5700000000000000000000000000000000000AB :10D58000000000000000000000000000000000009B -:10D59000000000000000000000000000000000008B -:10D5A000000000000000000000000000000000007B -:10D5B000000000000000000000000000000000006B -:10D5C000000000000000000000000000000000005B -:10D5D0000000F0F00000000000000000000000006B -:10D5E000000000000000000000000000000000003B +:10D5900000000000000040000090890001C004006D +:10D5A0000010000000C100000000000000C10000E9 +:10D5B0000010000000C000000000000000C10000DA +:10D5C0000000000000C0000000000000000000009B +:10D5D000000000000000100000000000000010002B +:10D5E0000000000005004000000080000000000076 :10D5F000000000000000000000000000000000002B :10D60000000000000000000000000000000000001A -:10D61000000000000000000000000000000000000A -:10D6200000000000000000000000000000000000FA -:10D6300000000000000000000000000000000000EA -:10D6400000000000000000000000000000000000DA -:10D6500000000000000000000000000000000000CA +:10D6100000000000000000008000008085000980FC +:10D62000800000800003009100400500000900C157 +:10D63000000000800000008000400500000900C1DB +:10D64000000000000000008000000000000000005A +:10D65000000000000000000000000040000000008A :10D6600000000000000000000000000000000000BA :10D6700000000000000000000000000000000000AA :10D68000000000000000000000000000000000009A -:10D69000000000000000000000000000000000008A -:10D6A000000000000000000000000000000000007A -:10D6B0000000000000000004000000000000000066 -:10D6C000000000000000000000000000000000005A +:10D690000000000000000000000041100900000030 +:10D6A00008098000000000800000C1108809000007 +:10D6B00009038000800000800000C110880900007C +:10D6C000090380008000000000000000000000004E :10D6D000000000000000000000000000000000004A :10D6E000000000000000000000000000000000003A -:10D6F000000000000000000000000000100000001A +:10D6F000000000000000000000000000000000002A :10D700000000000000000000000000000000000019 -:10D7100000000000000000000040000010000000B9 -:10D7200000000000000000000000000000000000F9 -:10D7300000000000000000000040000000000000A9 -:10D7400000000000000000000000000000000000D9 -:10D7500000000000000000000000000000000000C9 -:10D7600000000000000000000000000000000000B9 -:10D7700000000000000000000000000000000000A9 +:10D710000000000000000000000000000101010006 +:10D7200000009100C000000000080000C10191014C +:10D7300000000101C000020000080000C1019101C9 +:10D7400000000101C00002000040000000000000D5 +:10D750000000000000000000000000000041000088 +:10D760000700000000000001800000000000000031 +:10D7700080006000000000000000000000000000C9 :10D780000000000000000000000000000000000099 -:10D790000040000000000000000000000000000049 -:10D7A0000000000000000000000000000000000079 -:10D7B0000000000000000000000000000000000069 -:10D7C0000000000000000000000000000000000059 +:10D790000000000000000000000000000000810008 +:10D7A00000E000000000880000E0000000008100B0 +:10D7B00000E0000000000000000000000000810008 +:10D7C00000E0000000000000000000000000000079 :10D7D0000000000000000000000000000000000049 :10D7E0000000000000000000000000000000000039 :10D7F0000000000000000000000000000000000029 :10D800000000000000000000000000000000000018 :10D810000000000000000000000000000000000008 -:10D8200000000000000000000000000000000000F8 -:10D8300000000000000000000000000000000000E8 -:10D8400000000000000000000000000000000000D8 +:10D820003C3C3C3C0000F0F00000FFFF0000F0F04A +:10D83000000000FF0000AAAA000000FF0000F0F0B6 +:10D84000000000FF0000AAAA000000FF0000FFFF88 :10D8500000000000000000000000000000000000C8 :10D8600000000000000000000000000000000000B8 :10D8700000000000000000000000000000000000A8 :10D880000000000000000000000000000000000098 :10D890000000000000000000000000000000000088 -:10D8A0000000000000000000000000000000000078 -:10D8B0000000000000000000000000000000000068 -:10D8C0000000000000000000000000000000000058 +:10D8A00000003C3C3C3C0000F0F0000000000000A8 +:10D8B000F0F0000000FF0000AAAA000000FF000036 +:10D8C000F0F0000000FF0000AAAA000000FF000026 :10D8D0000000000000000000000000000000000048 :10D8E0000000000000000000000000000000000038 :10D8F0000000000000000000000000000000000028 :10D900000000000000000000000000000000000017 :10D910000000000000000000000000000000000007 -:10D9200000000000000000000000000000000000F7 -:10D9300000000000000000000000000000000000E7 -:10D9400000000000000000000000000000000000D7 -:10D9500000000000000000000000000000000000C7 +:10D9200000000000FFFF0000FF000000FFFF0000FC +:10D93000FFFF00003C3C00003C3C0000FF000000FA +:10D94000FFFF00003C3C00003C3C0000FF000000EA +:10D950000000FFFF000000000000000000000000C9 :10D9600000000000000000000000000000000000B7 :10D9700000000000000000000000000000000000A7 :10D980000000000000000000000000000000000097 :10D990000000000000000000000000000000000087 -:10D9A0000000000000000000000000000000000077 -:10D9B0000000000000000000000000000000000067 -:10D9C0000000000000000000000000000000000057 -:10D9D0000000000000000000000000000000000047 -:10D9E0000000000000000000000000000000000037 -:10D9F0000000000000000000000000000000000027 +:10D9A00000000000000000000000FF000000000078 +:10D9B0000000000000003C3C00003C3C0000FF0078 +:10D9C0000000000000003C3C00003C3C0000FF0068 +:10D9D0000000FFFFFFFF000000000000000000004B +:10D9E00000000000000005000A28050000A00561F5 +:10D9F0000A86150D00A005000A00150000A0000011 :10DA00000000000000000000000000000000000016 :10DA10000000000000000000000000000000000006 -:10DA200000000000000000000000000000000000F6 -:10DA300000000000000000000000000000000000E6 -:10DA400000000000000000000000000000000000D6 -:10DA500000000000000000000000000000000000C6 +:10DA200000000000000000004002800180259202FA +:10DA300040E3800780299202408280018020920288 +:10DA40004082800000209202408280018020920269 +:10DA500040828000002082020000000000000000E0 :10DA600000000000000000000000000000000000B6 :10DA700000000000000000000000000000000000A6 :10DA80000000000000000000000000000000000096 :10DA90000000000000000000000000000000000086 -:10DAA0000000000000000000000000000000000076 -:10DAB0000000000000000000000000000000000066 -:10DAC0000000000000000000000000000000000056 -:10DAD0000000000000000000000000000000000046 -:10DAE00000C00000000000840000000000000000F2 +:10DAA00000000000000000000000141455000000F9 +:10DAB00000000000000000FF0000550014143C3C72 +:10DAC000003C0000000000000000550014143C3C25 +:10DAD000003C00000000000000000000000000000A +:10DAE0000000000000000000000000000000000036 :10DAF0000000000000000000000000000000000026 :10DB00000000000000000000000000000000000015 :10DB10000000000000000000000000000000000005 -:10DB200000000000000000000000000000000000F5 -:10DB300000000000000000000000000000000000E5 -:10DB400000000000000000000000000000000000D5 -:10DB500000000000000000000000000000000000C5 +:10DB20000000000000000000000000001414550078 +:10DB3000000000000000000000FF00005500141469 +:10DB40000000003C0000000000000000550014141C +:10DB50000000003C00000000000000000000000089 :10DB600000000000000000000000000000000000B5 -:10DB700000020000000000000000000000000000A3 +:10DB700000000000000000000000000000000000A5 :10DB80000000000000000000000000000000000095 :10DB90000000000000000000000000000000000085 -:10DBA0000000000000000000000000000000000075 -:10DBB0000000000000000000000000000000000065 -:10DBC0000000000000000000000000000000000055 -:10DBD0000000000000000000000000000000000045 +:10DBA00000000000000000000000000000000F0066 +:10DBB000FF002828003C00000000000000000C0CC2 +:10DBC00005052828003C00000000000000000C0CA7 +:10DBD00005052828003C00000000000000000000AF :10DBE0000000000000000000000000000000000035 :10DBF0000000000000000000000000000000000025 :10DC00000000000000000000000000000000000014 :10DC10000000000000000000000000000000000004 -:10DC200000040000000011000000000000000000DF -:10DC300000000000000000000000000000000000E4 -:10DC400000000000000000000000000000000000D4 -:10DC500000000000000000000000000000000000C4 +:10DC200000000000000000000000000000000000F4 +:10DC30000F0000002828003C000000000000000049 +:10DC40000C0C05052828003C000000000000000026 +:10DC50000C0C05052828003C000000000000000016 :10DC600000000000000000000000000000000000B4 -:10DC700000000000000000000000000000000000A4 -:10DC80000000000000000000000000000000000094 -:10DC90000000000000000000000000000000000084 -:10DCA0000000000000000000000000000000000074 -:10DCB0000000000000000000000000000000000064 -:10DCC0000000000000000000000000000000000054 -:10DCD0000000000000000000000000000000000044 +:10DC7000000000004000200088000000200040005C +:10DC80000000200000000000200000000000200034 +:10DC90004000C00000001000200000002000200014 +:10DCA00000002000000088000000000000002000AC +:10DCB0000000C00020000000200020000000200024 +:10DCC00020000000200000002000000000000000F4 +:10DCD00020000000000000000000400000000000E4 :10DCE0000000000000000000000000000000000034 -:10DCF0000000000000000000000000000000000024 -:10DD00000000000000000000000000000000000013 -:10DD10000000000000000000000000000000000003 -:10DD200000000000000000000000000000000000F3 -:10DD300000000000000000000000000000000000E3 -:10DD400000000000000000000000000000000000D3 -:10DD500000000000000000000000000000000000C3 -:10DD600000000000000000000000000000000000B3 -:10DD700000000000000000000000000000000000A3 -:10DD80000000000000000000000000000000000093 -:10DD90000000000000000000000000000000000083 -:10DDA0000000000000000000000000000000000073 -:10DDB0000000000000000000000000000000000063 -:10DDC0000000000000000000000000000000000053 -:10DDD0000000000000000000000000000000000043 -:10DDE0000000000000000000000000000000000033 -:10DDF0000000000000000000000000000000000023 -:10DE00000000000000000000000000000000000012 -:10DE10000000000000000000000000000000000002 -:10DE200000000000000000000000000000000000F2 -:10DE300000000000000000000000000000000000E2 -:10DE400000000000000000000000000000000000D2 -:10DE500000000000000000000000000000000000C2 -:10DE600000000000000000000000000000000000B2 -:10DE700000000000000000000000000000000000A2 -:10DE80000000000000000000000000000000000092 +:10DCF00000000002000000000000400200001000D0 +:10DD000000004000000800001000000000000002B9 +:10DD100000001000000000000000000000000000F3 +:10DD200000000002000000000000000000400000B1 +:10DD30000000000040004000000000000000004023 +:10DD400000000000000000020000000000020000CF +:10DD5000000200200000000000000000000200009F +:10DD600000000000000200000002000000000000AF +:10DD700000000000004002000000004002000040DF +:10DD80000040080000090000000000000000000042 +:10DD9000000008400000000000000000000000003B +:10DDA0000040021000000000000000000000000021 +:10DDB00000400040000000000000000000000000E3 +:10DDC000000000400800000000000000000000000B +:10DDD0000000000000400200000000000000000001 +:10DDE00000000040001000000000000000000000E3 +:10DDF00000000000004000000000000800000002D9 +:10DE000000000008000020000008000000000000E2 +:10DE10000008000800084000000000080008000892 +:10DE200000000008000800000002000000002000C0 +:10DE3000000800820008000020000000008200842A +:10DE400000820000008800080000000000000000C0 +:10DE5000000000020000008200000000000000003E +:10DE600000000000000000080000000000000000AA +:10DE7000000000000000000000000000000000089A +:10DE80000008002000000008000000000000000062 :10DE90000000000000000000000000000000000082 :10DEA0000000000000000000000000000000000072 :10DEB0000000000000000000000000000000000062 :10DEC0000000000000000000000000000000000052 -:10DED0000000000000000000000000000000000042 +:10DED0000005000000000000000900000000000034 :10DEE0000000000000000000000000000000000032 -:10DEF0000000000000000000000000000000000022 +:10DEF0000000000000000000000003000800000017 :10DF00000000000000000000000000000000000011 :10DF10000000000000000000000000000000000001 :10DF200000000000000000000000000000000000F1 -:10DF300000000000000000000000000000000000E1 +:10DF300000000300000000000000000000000000DE :10DF400000000000000000000000000000000000D1 -:10DF500000000000000000000000000000000000C1 -:10DF600000000000000000000000000000000000B1 -:10DF700000000000000000000000000000000000A1 +:10DF500000000000000000000000000011000000B0 +:10DF600000000800000000000000000000000000A9 +:10DF70000000000000000000000000000011000090 :10DF80000000000000000000000000000000000091 :10DF90000000000000000000000000000000000081 -:10DFA0000000000000000000000000000000000071 +:10DFA0000000080010000000000000000000000059 :10DFB0000000000000000000000000000000000061 :10DFC0000000000000000000000000000000000051 :10DFD0000000000000000000000000000000000041 -:10DFE0000000000000000000000000000000000031 -:10DFF0000000000000000000000000000000000021 -:10E000000000000000000000000000000000000010 -:10E010000000000000000000000000000000000000 +:10DFE000000000000000C000000008000800000061 +:10DFF0000800000000000000000000000000000019 +:10E00000000000400084000000000000000000004C +:10E0100000000000000000000000080000001000E8 :10E0200000000000000000000000000000000000F0 :10E0300000000000000000000000000000000000E0 -:10E0400000000000000000000000000000000000D0 +:10E04000000008000500000000000000050041A0DD :10E0500000000000000000000000000000000000C0 -:10E0600000000000000000000000000000000000B0 -:10E0700000000000000000000000000000000000A0 +:10E0600000000000000000000800000000000000A8 +:10E07000210000000000000000000000000000007F :10E080000000000000000000000000000000000090 :10E090000000000000000000000000000000000080 :10E0A0000000000000000000000000000000000070 :10E0B0000000000000000000000000000000000060 -:10E0C0000000000000000000000000000000000050 +:10E0C0000000080000000000000000000000000048 :10E0D0000000000000000000000000000000000040 -:10E0E0000000000000000000000000000000000030 +:10E0E0000000000008000000000000000000000028 :10E0F0000000000000000000000000000000000020 -:10E10000000000000000000000000000000000000F -:10E1100000000000000000000000000000000000FF +:10E10000000008000000000040200000080010008F +:10E1100021000000000000000000000000000000DE :10E1200000000000000000000000000000000000EF :10E1300000000000000000000000000000000000DF -:10E1400000000000000000000000000000000000CF -:10E1500000000000000000000000000000000000BF -:10E1600000000000000000000000000000000000AF +:10E1400000000000058400000000000000C0000086 +:10E1500000002140050000000084000000C0000015 +:10E160000000000008000000008400000000000023 :10E17000000000000000000000000000000000009F -:10E18000000000000000000000000000000000008F -:10E19000000000000000000000000000000000007F +:10E18000000000000000000000001000000000007F +:10E19000000000400000000000000000000000003F :10E1A000000000000000000000000000000000006F :10E1B000000000000000000000000000000000005F -:10E1C000000000000000000000000000000000004F +:10E1C00000000000000000000000000090000002BD :10E1D000000000000000000000000000000000003F -:10E1E000000000000000000000000000000000002F -:10E1F000000000000000000000000000000000001F -:10E20000000000000000000000000000000000000E +:10E1E0000000000200100000000000000000C0005D +:10E1F000000000020000000000000000000082009B +:10E200000000820008000000000000000000000084 :10E2100000000000000000000000000000000000FE -:10E2200000000000000000000000000000000000EE +:10E2200000000000000000000000080000000000E6 :10E2300000000000000000000000000000000000DE :10E2400000000000000000000000000000000000CE -:10E2500000000000000000000000000000000000BE -:10E2600000000000000000000000000000000000AE -:10E27000000000000000000000000000000000009E -:10E28000000000000000000000000000000000008E +:10E2500000000000050000000000000000000000B9 +:10E2600000000000000000000000080000000000A6 +:10E270000000000000000000000000000000080096 +:10E28000000000000000030000000000000000008B :10E29000000000000000000000000000000000007E :10E2A000000000000000000000000000000000006E :10E2B000000000000000000000000000000000005E @@ -69230,13 +61036,13 @@ :10E5C000000000000000000000000000000000004B :10E5D000000000000000000000000000000000003B :10E5E000000000000000000000000000000000002B -:10E5F00000000000000000000000000020000000FB +:10E5F000000000000000000000000000000000001B :10E60000000000000000000000000000000000000A -:10E6100000000000000000000000000020000000DA -:10E6200000000000000000000000000000000400E6 -:10E6300000000000000000020000000000002000B8 +:10E6100000000000000000000000000000000000FA +:10E6200000000000000000000000000000000000EA +:10E6300000000000000000000000000000000000DA :10E6400000000000000000000000000000000000CA -:10E65000000000000000000000000000000020009A +:10E6500000000000000000000000000000000000BA :10E6600000000000000000000000000000000000AA :10E67000000000000000000000000000000000009A :10E68000000000000000000000000000000000008A @@ -69251,17 +61057,17 @@ :10E7100000000000000000000000000000000000F9 :10E7200000000000000000000000000000000000E9 :10E7300000000000000000000000000000000000D9 -:10E7400000000000000000000000000010001000A9 -:10E750001000100000000000000000000000000099 +:10E7400000000000000000000000000000000000C9 +:10E7500000000000000000000000000000000000B9 :10E7600000000000000000000000000000000000A9 :10E770000000000000000000000000000000000099 :10E780000000000000000000000000000000000089 :10E790000000000000000000000000000000000079 :10E7A0000000000000000000000000000000000069 :10E7B0000000000000000000000000000000000059 -:10E7C00000000200000004000000000000008000C3 -:10E7D00082008000800000000000000000000000B7 -:10E7E0000000000002000000000000000000000027 +:10E7C0000000000000000000000000000000000049 +:10E7D0000000000000000000000000000000000039 +:10E7E0000000000000000000000000000000000029 :10E7F0000000000000000000000000000000000019 :10E800000000000000000000000000000000000008 :10E8100000000000000000000000000000000000F8 @@ -69282,17 +61088,17 @@ :10E900000000000000000000000000000000000007 :10E9100000000000000000000000000000000000F7 :10E9200000000000000000000000000000000000E7 -:10E930000000004000000000000000000000000097 +:10E9300000000000000000000000000000000000D7 :10E9400000000000000000000000000000000000C7 -:10E9500000000000000000000000010000000000B6 +:10E9500000000000000000000000000000000000B7 :10E9600000000000000000000000000000000000A7 :10E970000000000000000000000000000000000097 :10E980000000000000000000000000000000000087 :10E990000000000000000000000000000000000077 :10E9A0000000000000000000000000000000000067 -:10E9B0000000000000000000000000400000000017 +:10E9B0000000000000000000000000000000000057 :10E9C0000000000000000000000000000000000047 -:10E9D000000000000000000000000000200008000F +:10E9D0000000000000000000000000000000000037 :10E9E0000000000000000000000000000000000027 :10E9F0000000000000000000000000000000000017 :10EA00000000000000000000000000000000000006 @@ -69316,7 +61122,7 @@ :10EB200000000000000000000000000000000000E5 :10EB300000000000000000000000000000000000D5 :10EB400000000000000000000000000000000000C5 -:10EB500000000000020000000000000000000000B3 +:10EB500000000000000000000000000000000000B5 :10EB600000000000000000000000000000000000A5 :10EB70000000000000000000000000000000000095 :10EB80000000000000000000000000000000000085 @@ -69326,1137 +61132,1137 @@ :10EBC0000000000000000000000000000000000045 :10EBD0000000000000000000000000000000000035 :10EBE0000000000000000000000000000000000025 -:10EBF00000000000000000002000000000000000F5 +:10EBF0000000000000000000000000000000000015 :10EC00000000000000000000000000000000000004 :10EC100000000000000000000000000000000000F4 -:10EC200000000000000000000000000000000000E4 -:10EC300000000000000000000000000000000000D4 -:10EC400000000000000000000000000000000000C4 -:10EC500000000000000000000000000000000000B4 -:10EC600001000000000000000000000000000000A3 -:10EC70000000000000000000000000000000000094 -:10EC80000000000000000000000000000000000084 -:10EC90000000000000000000000000000000000074 -:10ECA0000000000000000000000000000000000064 -:10ECB0000000000000000000000000000000000054 -:10ECC0000000000000000000000000000000000044 -:10ECD0000000000000000000000000000000000034 -:10ECE00000001100002100000000000000000000F2 -:10ECF0000000000000000000000000000000000014 -:10ED00000000000000000000000000000000000003 -:10ED100000000000000000000000000000000000F3 -:10ED200000000000000000000000000000000000E3 -:10ED300000000000000000000000000000000000D3 -:10ED400000000000000000000000000000000000C3 -:10ED500000000000000000000000000000000000B3 -:10ED6000000000000008000011400000000000004A -:10ED70000000000000000000000000000000000093 -:10ED80000000000000000000000000000000000083 -:10ED90000000000000000000000000000000000073 -:10EDA0000000000000000000000000000000000063 -:10EDB0000000000000000000000000000000000053 -:10EDC0000000000000000000000000000000000043 -:10EDD0000000000000000000000000000000000033 -:10EDE0000000000000000001000001010000000020 -:10EDF0000000000000000000000000000000000013 -:10EE00000000000000000000000000000000000002 -:10EE100000000000000000000000000000000000F2 -:10EE200000000000000000000000000000000000E2 -:10EE300000000000000000000000000000000000D2 -:10EE400000000000000000000000000000000000C2 +:10EC200000000000000000000000000000002100C3 +:10EC30002000208020002000400020002000400212 +:10EC400089002000208020002000200040002000BB +:10EC50002000200020802000208020002100C00013 +:10EC600020002000200020002000200020000003C1 +:10EC70002000210020002100210889002000200020 +:10EC800089002180000021802100200020802000B8 +:10EC900020002100200020008800400020002000EB +:10ECA00084802080008020802000200020002080A0 +:10ECB0001090410000020000400000000000000031 +:10ECC0000040404000020008100000004002000028 +:10ECD000000000000000001000004008000040C0DC +:10ECE0004000400040000000000040000000000024 +:10ECF000000000002000000020000400040040008C +:10ED000000002000200241004004200040020004D6 +:10ED10000000000010000000004020400000000043 +:10ED20000000402000200020002000000000000221 +:10ED30000010050000000102840400000000000033 +:10ED400000000000000000000010000000000800AB +:10ED5000040000000040000000000000000000046B +:10ED600000000040004000400040004000400040E3 +:10ED700000800000218420042040208404A004A0FE +:10ED800004A004A0008400840104008401000104A4 +:10ED900001100100000000000000404102000200DC +:10EDA000020002000100008001200080000001003C +:10EDB00000000000100800084009040800080008CE +:10EDC00003080000200800080008004004000408B0 +:10EDD000040000824008000904080408000800102C +:10EDE0000008008400090009000900090001000969 +:10EDF000000100400000A005800980858005802179 +:10EE00008041802180410005000520090005200087 +:10EE10002003200020100000008400008084C0082F +:10EE20008000800880000408002004090020000001 +:10EE30000200000000008403000000000000002128 +:10EE400000000000000000000000000000000003BF :10EE500000000000000000000000000000000000B2 -:10EE60000000000000000000000020000001010080 -:10EE70000000000000000000000000000000000092 -:10EE80000000000000000000000000000000000082 -:10EE90000000000000000000000000000000000072 -:10EEA0000000000000000000000000000000000062 +:10EE6000000000400000000000000000000000055D +:10EE70000000000000050000000500000080000008 +:10EE800082090000002100001003000000041000AF +:10EE900000000000001100000021A000C0000040A0 +:10EEA000000000000000000400200008000000082E :10EEB0000000000000000000000000000000000052 :10EEC0000000000000000000000000000000000042 -:10EED0000000000000000000000000000000000032 -:10EEE000000000000000000000000000800000089A -:10EEF00041000000000000000000000000000000D1 -:10EF00000000000000000000000000000000000001 -:10EF100000000000000000000000000000000000F1 -:10EF200000000000000000000000000000000000E1 -:10EF300000000000000000000000000000000000D1 -:10EF400000000000000000000000000000000000C1 -:10EF500000000000000000000000000000000000B1 -:10EF6000000000000000000000000000000511008B -:10EF70000000000000000000000000000000000091 -:10EF80000000000000000000000000000000000081 -:10EF90000000000000000000000000000000000071 -:10EFA0000000000000000000000000000000000061 -:10EFB0000000000000000000000000000000000051 -:10EFC0000000000000000000000000000000000041 -:10EFD0000000000000000000000000000000000031 -:10EFE0000000000000000000000000000000000021 -:10EFF0000100000000000000000000000000000010 -:10F000000000000000000000000000000000000000 -:10F0100000000000000000000000000000000000F0 -:10F0200000000000000000000000000000000000E0 -:10F0300000000000000000000000000000000000D0 -:10F0400000000000000000000000000000000000C0 -:10F0500000000000000000000000000000000000B0 -:10F0600000000000000000000000000000000000A0 -:10F07000000000E00000000A0000000000000000A6 -:10F080000000000000000000000000000000000080 -:10F090000000000000000000000000000000000070 -:10F0A0000000000000000000000000000000000060 -:10F0B0000000000000000000000000000000000050 +:10EED000000003000000000000000000000000002F +:10EEE0000000000000010000000000000000000021 +:10EEF0000500000003000000000000000000040402 +:10EF000000000300000000080000000800000001ED +:10EF10008000000000000000000000000000000071 +:10EF200000090000000000000000000100000000D7 +:10EF3000000000000000000041000000040200008A +:10EF4000C010820008000000000000000000000067 +:10EF500000000000820000210008000000094000BD +:10EF6000000000A1048810000108081000108210A1 +:10EF700000908500820082000000000082000000F6 +:10EF8000821001418240000300000100080000409F +:10EF900082850002830000000000020000890080DA +:10EFA0000000000000030800000000000020000036 +:10EFB00000000000000000800000000010000000C1 +:10EFC0000000000021000000000000000000080018 +:10EFD0000000000803000300000000000000000023 +:10EFE00000000000004002401000020000A00000ED +:10EFF0000000004020A0008400000010000000106D +:10F000000010000002100311081000101010000082 +:10F0100000010040000902004100000080000040A3 +:10F020000040000000100000008200840000000189 +:10F030000000000000000000004000000000000090 +:10F0400000000000000000000000000000080000B8 +:10F05000000000000000000082000000000000002E +:10F060000000000000100000000000000000000090 +:10F070000000000000001000100000002000000050 +:10F08000004000000440201110001000200020006B +:10F0900000400040084020400000000020002009FF +:10F0A000004000000000001102000000000002000B +:10F0B0000820000000000020000000000000000008 :10F0C0000000000000000000000000000000000040 :10F0D0000000000000000000000000000000000030 :10F0E0000000000000000000000000000000000020 -:10F0F0000000000000000000000000000000000010 -:10F1000000000000000000000000000000000000FF -:10F1100000000000000000000000000000000000EF -:10F1200000000000000000000000000000000000DF -:10F1300000000000000000000000000000000000CF -:10F1400000000000000000000000000000000000BF +:10F0F0000000000000000000800080000000800090 +:10F10000000000010000000100008000800080007D +:10F110008000000100010001000100820000800069 +:10F1200080000001000000000000800000000000DE +:10F13000800000010000000000010000000000004D +:10F140000000A00000000000000000000800000017 :10F1500000000000000000000000000000000000AF -:10F16000000000000000000000000000000000009F -:10F17000000000000000000000000000000000008F -:10F18000000000000000000000000000000000007F -:10F19000000000000000000000000000000000006F -:10F1A000000000000000000000000000000000005F -:10F1B000000000000000000000000000000000004F -:10F1C000000000000000000000000000000000003F +:10F1600000001000000000000000010000801100FD +:10F17000000000800080A1000000000000002000CE +:10F1800000000000004000400000000801034009AA +:10F19000850000000021000800000008210421046F +:10F1A00001040084000000400040000082000200D2 +:10F1B00002008200000001209020000000000000FA +:10F1C00000000000000041000000200400000000DA :10F1D000000000000000000000000000000000002F -:10F1E000000000000000000000000000000000001F -:10F1F000000000000000000000000000000000000F -:10F2000000000000000000000000000000000000FE -:10F2100000000000000000000000000000000000EE -:10F2200000000000000000000000000000000000DE -:10F2300000000000000000000000000000000000CE +:10F1E0000000000000000488000000000200004051 +:10F1F0000200000000400040020000000082000009 +:10F200008010000800000001000100000000200044 +:10F2100004000200000000000000001000A08201B5 +:10F220008201028500410088000100010000000009 +:10F230008000808403000000040100010000000041 :10F2400000000000000000000000000000000000BE :10F2500000000000000000000000000000000000AE -:10F26000000000000000000000000000000000009E -:10F27000000000000000000000000000000000008E -:10F28000000000000000000000000000000000007E -:10F29000000000000000000000000000000000006E -:10F2A000000000000000000000000000000000005E -:10F2B000000000000000000000000000000000004E +:10F26000000000000000000000000000000001C0DD +:10F2700000004000001000C000000000008800C135 +:10F28000100010000001000000C00000000000029B +:10F2900000C103014001000000C000002000000286 +:10F2A00000C100018400008801C0000408000000C3 +:10F2B00000C0000800000000080800200002042030 :10F2C000000000000000000000000000000000003E :10F2D000000000000000000000000000000000002E :10F2E000000000000000000000000000000000001E -:10F2F0000000000000000000000000000006000CFC -:10F3000000000000000000000000000000000000FD -:10F3100000000000000000000000000000000000ED -:10F3200000000000000000000000000000000000DD -:10F3300000000000000000000000000000000000CD -:10F3400000000000000000000000000000000000BD -:10F3500000000000000000000000000000000000AD -:10F36000000000000000000000000000000000009D -:10F370000000000000000000000000000000FF008E -:10F3800000FF00000000000000000000000000007E -:10F39000000000000000000000000000000000006D -:10F3A000000000000000000000000000000000005D -:10F3B000000000000000000000000000000000004D -:10F3C000000000000000000000000000000000003D -:10F3D000000000000000000000000000000000002D -:10F3E000000000000000000000000000000000001D -:10F3F000000000000000000000000000000000000D -:10F40000FF0000FF000000000000000000000000FE -:10F4100000000000000000000000000000000000EC -:10F4200000000000000000000000000000000000DC -:10F4300000000000000000000000000000000000CC -:10F4400000000000000000000000000000000000BC +:10F2F000028040008000000000800000000000004C +:10F3000020C1914182400003000000800000000005 +:10F31000008040C188080209000800800500000044 +:10F3200000804088090383090002208021800000BA +:10F330000000008000800000000008000000008045 +:10F3400080000000000000000000030010004000EA +:10F35000410000000000000000000000000000006C +:10F3600000400000000000000000800000000000DD +:10F37000800000000000000080000000000000008D +:10F38000800010800200C009C183000080100000CE +:10F3900000088000108008804000C1C1800900037F +:10F3A00000098010100088001100A020000000005B +:10F3B00000008000000080000000800000000021AC +:10F3C00000808000000000000000800000000100BC +:10F3D0000000010000000000000000000008000024 +:10F3E0000000000000000000000000000200A0007B +:10F3F0008200C000000000000000C000000000000B +:10F400000000C000008800008401C18900000201E2 +:10F4100000000001C000018801080000C1090220AD +:10F4200000000000C001010211000000C020000027 +:10F4300000000000C000000010000000C000080034 +:10F44000200090040400820040000400020000003C :10F4500000000000000000000000000000000000AC :10F46000000000000000000000000000000000009C -:10F47000000000000000000000000000000000008C -:10F480000000FF0000FF000000000000000000007E -:10F49000000000000000000000000000000000006C -:10F4A000000000000000000000000000000000005C -:10F4B000000000000000000000000000000000004C -:10F4C000000000000000000000000000000000003C +:10F4700000000000000000000010000000C10000BB +:10F480000000008800C040000190880001C1000019 +:10F4900000002002000000C000010090100084C1A4 +:10F4A00000000803820000C100010189010101C0C0 +:10F4B00000020001000000C100000000000800C0C0 +:10F4C00020200020000204200000000000000000B6 :10F4D000000000000000000000000000000000002C :10F4E000000000000000000000000000000000001C -:10F4F000000000000000000000000000000000000C -:10F5000000000000FF0000FF0000000000000000FD -:10F5100000000000000000000000000000000000EB -:10F5200000000000000000000000000000000000DB -:10F5300000000000000000000000000000000000CB -:10F5400000000000000000000000000000000000BB -:10F5500000000000000000000000000000000000AB -:10F56000000000000000000000000000000000009B +:10F4F000000000000000000000050020000800C11E +:10F50000000000000000008080020389C14009C1A2 +:10F510000000000080800000048009082191401153 +:10F5200080C100408090000509830008030308089B +:10F53000098200C00010004000C1000000000080EF +:10F54000008000000000008080000000000000003B +:10F5500000000000000000000005000000000000A6 +:10F5600000004120210503002000000000000000F1 :10F57000000000000000000000000000000000008B -:10F580000000000000000000020000000000000079 -:10F59000000000000000000000000000000000006B -:10F5A000000000000000000000000000000000005B -:10F5B000000000000000000000000000000000004B -:10F5C000000000000000000000000000000000003B -:10F5D000000000000000000000000000000000002B -:10F5E000000000000000000000000000000000001B -:10F5F0000000000000000000000000000000000803 -:10F6000000000000400000080000000000000000B2 -:10F6100000000000000000000000000000000000EA -:10F62000000000004000000000000000000000009A -:10F6300000000000000000000000000000000000CA -:10F6400000000000000000000000000000000000BA -:10F6500000000000000000000000000000000000AA +:10F5800000008000000000000000C1822109050089 +:10F59000031100008002000080000000C1882109E2 +:10F5A00002090311C12005104100020008000300F8 +:10F5B00008000209800580800000000080008000B3 +:10F5C00000000000000500A0000080000000000016 +:10F5D00000800000000000000000000000000000AB +:10F5E0000000000001000000010000000000000019 +:10F5F0000000000000000020008800001000000053 +:10F6000000880000C000889000000000C1100001C8 +:10F61000000089000000C000000004000000C111CB +:10F62000000101899100C10000010000010001906A +:10F63000910001000001C000200200000000C00095 +:10F6400010000000000020009004202004000000B2 +:10F6500000A0000400000000000000000000000006 :10F66000000000000000000000000000000000009A :10F67000000000000000000000000000000000008A -:10F68000000000000000000000000000004000003A -:10F69000000000000000000000000000000000006A -:10F6A000000000000000000000000000000000005A -:10F6B000000000000000000000000000000000004A -:10F6C0000000000000000004000000000000000036 +:10F6800000000000000000000000000000008800F2 +:10F6900000E000000000000000000020000000006A +:10F6A000880000E012000006000000440000000096 +:10F6B000880000E0000000000000000000000000E2 +:10F6C00000000000000000000081000007000000B2 :10F6D000000000000000000000000000000000002A :10F6E000000000000000000000000000000000001A :10F6F000000000000000000000000000000000000A -:10F7000000000008000000000000000000000000F1 -:10F7100000000000000000000000000000000000E9 -:10F7200000000008000000000000000800000000C9 -:10F7300000000000000000000008000000000000C1 -:10F7400000000000000000000000000000000000B9 -:10F7500000000000000000000000000000000000A9 +:10F700000000FFFF0000F0F0000000FF000000FF1D +:10F7100000003C3C0000F0F000000000F0F00000B1 +:10F72000F0F000003C3C0000F0F00000FFFF0000A3 +:10F73000F0F000FF00FF0000F0F0000000FF00000C +:10F740003C3C000000FF000000FF00002A8A00F09F +:10F7500000D00000000000000000000000000000D9 :10F760000000000000000000000000000000000099 -:10F770000000000000000000000000000000001079 -:10F780000000000000000000000000000000000079 -:10F790000000000000000000000000000000000069 -:10F7A0000000000000000000000000000000000059 -:10F7B0000000000000000000000000000000000049 -:10F7C0000000000000000000000000000000000039 -:10F7D0000000000000000000000000000000000029 +:10F770000000000000000000000000000000000089 +:10F7800000000000FFFF0000F0F0000000FF00009C +:10F7900000FF00003C3C0000F0F000000000F0F032 +:10F7A0000000F0F000003C3C0000F0F00000000021 +:10F7B0000000F0F000FF00FF0000F0F0000000FF8C +:10F7C00000003C3C000000FF000000FF0000AAAA6F +:10F7D00000F00070000000000000000000000000C9 :10F7E0000000000000000000000000000000000019 :10F7F0000000000000000000000000000000000009 -:10F8000000000000000000000000000000000000F8 -:10F8100000000000000000000000000000000000E8 -:10F8200000000000000000000000000000000000D8 -:10F8300000000000000000000000000000000000C8 -:10F8400000000000000000000000000000000000B8 -:10F8500000000000000000000000000000000000A8 -:10F86000000000000000000800000000004100004F -:10F870000000004000000000000000000000000048 -:10F880000000001000000000000800000000000060 -:10F890000008000000400000000000000000000818 -:10F8A0000000000000000000000800000000000050 -:10F8B0000008000000000000000000000000000838 -:10F8C0000000030000000000000000000000000035 -:10F8D0000000000000000000000000000000000028 -:10F8E0000000000000000000000000000000000018 -:10F8F0000000000000000000000000000000000008 -:10F9000000000000000000000000000000000000F7 -:10F9100000000000000000000000000000000000E7 -:10F9200000000000000000000000000000000000D7 -:10F9300000000000000000000000000000000000C7 -:10F9400000000000000000000000000000000000B7 -:10F9500000000000000000000000000000000000A7 -:10F960000000000000000000000000000000000097 -:10F970000000000000000000000000000000000087 -:10F980000000000000000000000000000000000077 -:10F990000000000000000000000000000000000067 -:10F9A0000000000000000000000000000000000057 -:10F9B0000000000000000000000000000000000047 -:10F9C0000000000000000000000000000000000037 +:10F800007D3C3F3C3C3C0000FFFF00003C3C0000D6 +:10F8100055550000FFFF0000FF00000000003C3CC9 +:10F8200000003C3C000055550000FFFF00003C3C40 +:10F830000000C3C3FFFF3C3C00000F0F0000FF00AF +:10F84000000055550000FF000000F0F0FFFF0B0026 +:10F850000F000105050100000000FFFFFFFF000091 +:10F860000000000000000000000000000000000098 +:10F870000000000000000000000000000000000088 +:10F88000000055000F003C3C0000000000003C3C24 +:10F8900000005555000000000000FF0000000000BF +:10F8A0003C3C00003C3C00005555000000000000BE +:10F8B0003C3C0000C3C3FFFF3C3C00000F0F0000B6 +:10F8C000FF00000055550000FF000000F0F0FFFFB2 +:10F8D00007000F0005050505000000004303410077 +:10F8E00000610006000D00000000000000000000A4 +:10F8F00000610006000D0000000000000000000094 +:10F90000000000000000000540638006002D920208 +:10F91000408280000020920240828001802092027A +:10F92000000040E38086002D920245828A019520E6 +:10F9300092A240E38086002D8202406380018021F4 +:10F94000920240E38006002D920240828000002057 +:10F9500082020000002800000000000000000000FB +:10F960000001000000000000000000000000000096 +:10F9700000005F553F3C0000000000000000000058 +:10F980000000000000000000000000000000A0FFD8 +:10F9900030FF000000000000000055003C00303047 +:10F9A00028280000000000000000000055003C0076 +:10F9B000003C3030FF05FF0C00FF00FF51550000F8 +:10F9C0003C3C3C18000000003CFC3CBE0000000039 :10F9D0000000000000000000000000000000000027 :10F9E0000000000000000000000000000000000017 -:10F9F0000000000000000000000000000000000007 -:10FA00000000000000000000000000000000008472 -:10FA10000000000000000000000000000084000062 -:10FA200000000000000000000000000000000000D6 -:10FA300000000000000000000000000000000000C6 -:10FA400000000000000000000000000000000000B6 +:10F9F000000000000F000F000000000000000000E9 +:10FA000000000000000000000000000000000000F6 +:10FA1000A0A03030000000000000000050003000C6 +:10FA2000300028000000000000000000000050002E +:10FA300030000014101005050C0C30FFBAFF5551B2 +:10FA40000000000000000000000000F000AA00001C :10FA500000000000000000000000000000000000A6 -:10FA60000000000000000000000000000000000096 +:10FA600000000000000000000000C0FF82FF000056 :10FA70000000000000000000000000000000000086 :10FA80000000000000000000000000000000000076 -:10FA90000000000000000000004000000000000026 -:10FAA0000000000000000002000000000000000054 -:10FAB0000000000000000000000000000000000046 -:10FAC0000000000000000000000000000000000036 +:10FA90000000000000000000000000000000FC006A +:10FAA00054543030A0A0000000000000000000000E +:10FAB00005001400F030A02000000000000000004D +:10FAC0000B07000000E000D0000000000000000074 :10FAD0000000000000000000000000000000000026 -:10FAE0000000000000000000000000000000000016 -:10FAF0000000000000000000000000A00000000066 +:10FAE000000000000000000000000000C0FF82FFD6 +:10FAF0000000000000000000000000000000000006 :10FB000000000000000000000000000000000000F5 :10FB100000000000000000000000000000000000E5 -:10FB200000000000000000000000000200000000D3 -:10FB300000001100000000000000000000000800AC -:10FB400000000000000000000500000000000000B0 +:10FB2000000000003000A000000000000000000005 +:10FB30000000050514140000A020000000000000D3 +:10FB400000000F0F000000F000F0000000000000B7 :10FB500000000000000000000000000000000000A5 -:10FB60000000000000000000000000000000000095 -:10FB70000000000000000000000000000000000085 -:10FB80000000000000000000000000000000000075 -:10FB90000000000000000000000000000000000065 -:10FBA0000000000000000000000000000000000055 -:10FBB0000000000000000000000000000000000045 -:10FBC0000000000000000000000000000000000035 -:10FBD0000000000000000000000000000000000025 -:10FBE0000000000000000000000000000000000015 -:10FBF0000000000000000000000000000000000005 -:10FC000000000000000000000000000000000000F4 -:10FC100000000000000000000000000000000000E4 -:10FC200000000000000000000000000000000000D4 -:10FC300000000000000000000000000000000000C4 -:10FC400000000000000000000000000000000000B4 -:10FC500000000000000000000000000000000000A4 +:10FB60000000000000000000000000008880840009 +:10FB700020C188008800C000C00084002000200050 +:10FB8000200020000000200020008800200020002D +:10FB90002000200020002000200000002000200085 +:10FBA000200088000000200020000003400000002A +:10FBB000000000002000000000000000880000009D +:10FBC000000020002100008020002003200084008D +:10FBD0004000000020800000008020002000000085 +:10FBE000000020002000000020002000100000087D +:10FBF000000000020000000000000000208400025D +:10FC000000000040100000000000000000000000A4 +:10FC10000040000000000040104000002140210092 +:10FC20000000000000000000400000000000000094 +:10FC30000040000000000000004000000000004004 +:10FC4000000000000000080000200000000000008C +:10FC500000400000000080040002000480000090CA :10FC60000000000000000000000000000000000094 -:10FC70000000000000000000000000000000000084 -:10FC80000000000000000000000000000000000074 -:10FC90000000000000000000000000000000000064 -:10FCA0000000000000000000000000000000000054 -:10FCB0000000000000000000000000000000000044 -:10FCC0000000000000000000000000000000000034 -:10FCD0000000000000000000000000000000000024 -:10FCE0000000000000000000000000000000000014 -:10FCF0000000000000000000000000000000000004 -:10FD000000000000000000000000000000000000F3 -:10FD100000000000000000000000000000000000E3 -:10FD200000000000000000000000000000000000D3 -:10FD300000000000000000000000000000000000C3 -:10FD400000000000000000000000000000000000B3 -:10FD500000000000000000000000000000000000A3 -:10FD60000000000000000000000000000000000093 -:10FD70000000000000000000000000000000000083 -:10FD80000000000000000000000000000000000073 -:10FD90000000000000000000000000000000000063 -:10FDA0000000000000000000000000000000000053 -:10FDB0000000000000000000000000000000000043 -:10FDC0000000000000000000000000000000000033 -:10FDD0000000000000000000000000000000000023 -:10FDE0000000000000000000000000000000000013 -:10FDF0000000000000000000000000000000000003 -:10FE000000000000000000000000000000000000F2 -:10FE100000000000000000000000000000000000E2 -:10FE200000000000000000000000000000000000D2 -:10FE300000000000000000000000000000000000C2 -:10FE400000000000000000000000000000000000B2 -:10FE500000000000000000000000000000000000A2 -:10FE60000000000000000000000000000000000092 -:10FE70000000000000000000000000000000000082 -:10FE80000000000000000000000000000000000072 -:10FE90000000000000000000000000000000000062 -:10FEA0000000000000000000000000000000000052 -:10FEB0000000000000000000000000000000000042 -:10FEC0000000000000000000000000000000000032 -:10FED0000000000000000000000000000000000022 -:10FEE0000000000000000000000000000000000012 -:10FEF0000000000000000000000000000000000002 -:10FF000000000000000000000000000000000000F1 -:10FF100000000000000000000000000000000000E1 -:10FF200000000000000000000000000000000000D1 -:10FF300000000000000000000000000000000000C1 -:10FF400000000000000000000000000000000000B1 -:10FF500000000000000000000000000000000000A1 -:10FF60000000000000000000000000000000000091 -:10FF70000000000000000000000000000000000081 -:10FF80000000000000000000000000000000000071 -:10FF90000000000000000000000000000000000061 -:10FFA0000000000000000000000000000000000051 -:10FFB0000000000000000000000000000000000041 -:10FFC0000000000000000000000000000000000031 -:10FFD0000000000000000000000000000000000021 -:10FFE0000000000000000000000000000000000011 -:10FFF0000000000000000000000000000000000001 -:020000040011E9 -:1000000000000000000000000000000000000000F0 -:1000100000000000000000000000000000000000E0 -:1000200000000000000000000000000000000000D0 -:1000300000000000000000000000000000000000C0 -:1000400000000000000000000000000000000000B0 -:1000500000000000000000000000000000000000A0 -:100060000000000000000000000000000000000090 -:100070000000000000000000000000000000000080 -:100080000000000000000000000000000000000070 -:100090000000000000000000000000000000000060 -:1000A0000000000000000000000000000000000050 -:1000B0000000000000000000000000000000000040 -:1000C0000000000000000000000000000000000030 -:1000D0000000000000000000000000000000000020 -:1000E0000000000000000000000000000000000010 -:1000F0000000000000000000000000000000000000 -:1001000000000000000000000000000000000000EF -:1001100000000000000000000000000000000000DF -:1001200000000000000000000000000000000000CF -:1001300000000000000000000000000000000000BF +:10FC700001000100A10000000400000801100005BF +:10FC800088000100010001000100090008000100D6 +:10FC90001140010001000000000000000800900079 +:10FCA00000090000002100000000080000400000E2 +:10FCB000000000000000000000000000000900003B +:10FCC0000000000000000000000000200888080973 +:10FCD0000000000900000000000000800100080092 +:10FCE00000000000000000000000000008000040CC +:10FCF00000C002080200020040000000000002886C +:10FD00002000400002000200020002000208000081 +:10FD1000020082050200408400000000001000087C +:10FD200000844000000000080000000040040000C3 +:10FD300000000084000040000008000000000008EF +:10FD4000001000004000000000080000000100401A +:10FD500000080008000000000084000000022008E5 +:10FD600000000000008800000008000000000008FB +:10FD700000040010000000008800000000000000E7 +:10FD80000008000800000000000800000000000457 +:10FD90000000000800000000000300000000000058 +:10FDA00000000080008000800005000000000000CE +:10FDB000000000000008000000000000000000003B +:10FDC000000200000003000000000000000000002E +:10FDD00000A100000000000000410000000401023A +:10FDE000000400000000000000000005000000000A +:10FDF0000000000000A0000000000000000008005B +:10FE000000000000080000000000000000000000EA +:10FE100021000000000010000000000809000000A0 +:10FE200000000000050400040008000000000000BD +:10FE300000000002000000000000080000000500B3 +:10FE40000800080200000000000000A003000000FD +:10FE50000000004000000000000000000000410120 +:10FE6000400103010300000000000000000000004A +:10FE70000000000000001091080008800000100041 +:10FE8000840000400040824000408240004010401A +:10FE90008280000000404000000200000040A000FE +:10FEA0008200000000008220000200000000080024 +:10FEB000820000000000000082000800000008002E +:10FEC000820900090021C041040000080000000070 +:10FED000A000000003000800000000000000000077 +:10FEE00008000000000400110010004100000000A4 +:10FEF000820000000000000000400000414000823D +:10FF00008002008210410001210100011001000166 +:10FF1000800110400500100100C000C00000000179 +:10FF200000C00000410000000400000010000000BC +:10FF300000C000C000000090000000C000C000C071 +:10FF400000C00000000000000002040000000000EB +:10FF5000009000A0000082008000000000901000CF +:10FF60000000000000000001000000000000000090 +:10FF70000000000000000000000000210000000060 +:10FF8000002100001000002120000021900000004E +:10FF9000004000001000A000200000080000004009 +:10FFA0000440000000000008000000800100008004 +:10FFB0000080000000000021000000000800000098 +:10FFC000000000000000000000000800080082009F +:10FFD000C000820000410141C1000182A000C000B8 +:10FFE0000000000000000000000001000000000010 +:10FFF00000000000000000000000000003000000FE +:02000004000FEB +:1000000000000000000080000000800000000000F0 +:1000100000000001000080000000800000000000DF +:1000200000010091000000000000008400081000A2 +:100030000004000400840000000000000000000034 +:100040000000008409000000000800022084A100D4 +:1000500008000800210020A004A002A0081003004E +:100060000000000000000000000000002000000070 +:10007000210000000000000000000000000000005F +:10008000020000090108090400800000000000408F +:1000900002008240000000040800008000000440CC +:1000A00000000000000000009000880090000000A8 +:1000B0000000000000080000001100080008000017 +:1000C00000020000000000000400820000219000F7 +:1000D000400040000000000290000100000000000D +:1000E0004000C000000000000100A000000001006E +:1000F00000000000000000000000000000000008F8 +:1001000005028400032002820201004008400040F2 +:1001100000018000000100A0000108020040000072 +:100120001101400203000500000000000000000073 +:1001300008000000000000C109000000000000C02D :1001400000000000000000000000000000000000AF -:10015000000000000000000000000000000000009F -:10016000000000000000000000000000000000008F -:10017000000000000000000000000000000000007F -:10018000000000000000000000000000000000006F -:10019000000000000000000000000000000000005F -:1001A000000000000000000000000000000000004F -:1001B000000000000000000000000000000000003F +:10015000000000000000000000000000040000009B +:10016000000000000000000000002000000000006F +:10017000200011000000000000000000000000004E +:10018000000000C001000200002000C104010001C5 +:10019000880102C000000002000000C100009001C0 +:1001A000880002C00000C002000000000000000043 +:1001B00000000001000082010001000000000000BA :1001C000000000000000000000000000000000002F -:1001D000000000000000000000000000000000001F -:1001E000000000000000000000000000000000000F -:1001F00000000000000000000000000000000000FF -:1002000000000000000000000000000000000000EE -:1002100000000000000000000000000000000000DE -:1002200000000000000000000000000000000000CE -:1002300000000000000000000000000000000000BE +:1001D000000000000000000000000000A010A002CD +:1001E0000002008200000000000000000001010188 +:1001F000A00100000000000000000000000000005E +:1002000000000000008002008000000020C191106A +:1002100011098003808000000080000000C11105EA +:1002200011098008808005000080000000000000A7 +:10023000000000002041090909020002000000003E :1002400000000000000000000000000000000000AE :10025000000000000000000000000000000000009E -:10026000000000000000000000000000000000008E -:10027000000000000000000000000000000000007E -:10028000000000000000000000000000000000006E -:10029000000000000000000000000000000000005E -:1002A000000000000000000000000000000000004E -:1002B000000000000000000000000000000000003E +:10026000000000800080000000000000000040103E +:10027000212140200040000000000000000000009C +:1002800000000000000080000000000080000080EE +:1002900010008900C1008000000000008000038081 +:1002A00000009000C100000000000000800000007D +:1002B000000000000000048004000202410500006C :1002C000000000000000000000000000000000002E -:1002D000000000000000000000000000000000001E -:1002E000000000000000000000000000000000000E -:1002F00000000000000000000000000000000000FE -:1003000000000000000000000000000000000000ED -:1003100000000000000000000000000000000000DD -:1003200000000000000000000000000000000000CD -:1003300000000000000000000000000000000000BD +:1002D0000000000000000000000000050080000099 +:1002E000800000008000000000000000000000000E +:1002F000100021002000400000000000000000006D +:100300000000000000000000080000000000C00025 +:10031000008801009000C100080000000000C0003B +:10032000008800009100C100000000000000C00033 +:10033000000000000000000000400000010101007A :1003400000000000000000000000000000000000AD -:10035000000000000000000000000000000000009D -:10036000000000000000000000000000000000008D -:10037000000000000000000000000000000000007D -:10038000000000000000000000000000000000006D -:10039000000000000000000000000000000000005D -:1003A000000000000000000000000000000000004D -:1003B000000000000000000000000000000000003D -:1003C000000000000000000000000000000000002D +:10035000000000000000000000000000000000108D +:1003600000000200A000A00040000000000000000B +:10037000000001200100010000000000000000005A +:10038000000000000000000000000001002100004B +:1003900000C120009001020000C100000000000028 +:1003A00000C000000000090082C10000000100013F +:1003B00000C100000000000000000000000100017A +:1003C000000100000000000000000000000000002C :1003D000000000000000000000000000000000001D -:1003E000000000000000000000000000000000000D -:1003F00000000000000000000000000000000000FD -:1004000000000000000000000000000000000000EC -:1004100000000000000000000000000000000000DC -:1004200000000000000000000000000000000000CC -:1004300000000000000000000000000000000000BC -:1004400000000000000000000000000000000000AC +:1003E00000000000C00200040002A0C000000000E5 +:1003F00000000000000100000000000000000000FC +:1004000000000000000000000000000000200010BC +:10041000004000C18009C110000200C100000000BE +:100420000000008000090000100880C100030008DF +:10043000000300C1000000000000000000040540AF +:1004400041400041000000000000000000000000EA :10045000000000000000000000000000000000009C -:10046000000000000000000000000000000000008C -:10047000000000000000000000000000000000007C -:10048000000000000000000000000000000000006C -:10049000000000000000000000000000000000005C -:1004A000000000000000000000000000000000004C -:1004B000000000000000000000000000000000003C -:1004C000000000000000000000000000000000002C +:10046000000000000000008000800080900000007C +:10047000000000000000001005050003004000001F +:1004800000000000000000000000000000008000EC +:10049000000080000000C1904109C10009038000F4 +:1004A000000000000000C1901011880009118000B8 +:1004B00000020000000000000000000000004104F5 +:1004C00021000500111100000000000000000000E4 :1004D000000000000000000000000000000000001C -:1004E000000000000000000000000000000000000C -:1004F00000000000000000000200000020000000DA -:1005000000000000000000000200000000000000E9 -:10051000000000000000000020000000200000009B -:1005200000000000000000002000000000000000AB -:100530000002000000000000000000000000200099 -:1005400000000000000000000000000000000000AB +:1004E000000000008000000080058008000000007F +:1004F000000000000000000000800805200000034C +:1005000000000000000000000000000000000000EB +:10051000C000000002000000C1410001880001018C +:10052000C000000000004000C1410101880001003E +:10053000C00000210000400000000000000000009A +:1005400001A000000000000000000000000000000A :10055000000000000000000000000000000000009B -:10056000000000000000000000000000000000008B -:10057000000000000000000000000000000000007B -:10058000000000000000000000000000000000006B -:10059000000000000000000000000000000000005B -:1005A000000000000000000000000000000000004B +:100560000000C000200010004000C000820120A058 +:10057000080000000000000000000004000000006F +:10058000000100000000000000000000000000006A +:1005900000000000000000000000880000E00000F3 +:1005A00000000000000000000000810000E00000EA :1005B000000000000000000000000000000000003B -:1005C000000000000000000000000000000000002B +:1005C0000000880000E000000000000000000000C3 :1005D000000000000000000000000000000000001B -:1005E000000000000000000000000000000000000B -:1005F00000000000000000000000000000000000FB +:1005E000000000000000000000000000008100008A +:1005F000070000000000000000000000880000E08C :1006000000000000000000000000000000000000EA -:1006100000000000000000000000000000000000DA -:1006200000000000000000000000000000000000CA -:1006300000000000000000000000000000000003B7 +:1006100000000000F0F00000F0F00000F0F000003A +:10062000FFFF00003C3C000066660000F0F00000A8 +:10063000FFFF00003C3C0000666600000000000078 :1006400000000000000000000000000000000000AA -:100650000000000000000000000000080000000092 -:10066000000000000000100010001000100000004A -:10067000000000000000000000000000000000007A +:10065000000000000000000000000000000000009A +:1006600000000000000020104080000000000F008B +:10067000CF00A00005000000000000000000000006 :10068000000000000000000000000000000000006A -:10069000000000000000000000000000000000005A -:1006A000000000000000000000000000000000004A -:1006B000000000000000000000000000000000003A -:1006C000000000000008000000000000000800001A -:1006D0000084000000000000000000000000000096 -:1006E000000000000008000080008000808480007E -:1006F0000000008200000000000000000000000078 +:10069000000000000000F0F00000F0F00000F0F0BA +:1006A0000000000000003C3C000066660000F0F026 +:1006B0000000000000003C3C0000666600000000F6 +:1006C000000000000000000000000000000000002A +:1006D000000000000000000000000000000000001A +:1006E00000000000000000000408020100000000FB +:1006F0000F00CF00A0000500000000000000000077 :1007000000000000000000000000000000000000E9 :1007100000000000000000000000000000000000D9 :1007200000000000000000000000000000000000C9 :1007300000000000000000000000000000000000B9 :1007400000000000000000000000000000000000A9 :100750000000000000000000000000000000000099 -:100760000000000200000000000000000000000087 -:100770000100000000000000000000000000000078 +:100760000000000000000000000000000000000089 +:100770000000000000000000000000000000000079 :100780000000000000000000000000000000000069 -:100790000000000000000000000000000000000059 -:1007A0000000000000000000000000000000000049 -:1007B0000000000000000000000000000000000039 -:1007C0000000000000000000000000000000000029 +:100790000000000000000000000000003C3C0000E1 +:1007A0003C3C0000FFFF000000FF00000F0F0000B6 +:1007B0003C3C00006666000000FF00000F0FFFFFDA +:1007C00099990000000000000000000000000000F7 :1007D0000000000000000000000000000000000019 :1007E0000000000000000000000000000000000009 -:1007F00000002000000000000000000000000000D9 +:1007F00000000000003C0038000000CC00000000B9 :1008000000000000000000000000000000000000E8 -:1008100000000000000000000000000000000000D8 -:1008200000000000000000000000000000000000C8 -:1008300000000000000000000000000000000000B8 -:1008400000000000000000000000000000000000A8 -:1008500000000000C0000000000000000000A00038 -:10086000880000008200000000000000000000007E -:100870000000000000000000000000000000000078 -:100880000000000000000800400000000000000020 -:100890000000000000000000000000000000000058 -:1008A0000000000000000000000000000000000048 -:1008B0000000000800000008000000000000000028 -:1008C0000000000000000000000000000000000028 -:1008D000000000000008000000A000080000000068 -:1008E00000000020000000000000000000001100D7 -:1008F0000000000000A0040000080000000000004C -:1009000000000000000000000000000000000000E7 +:1008100000000000000000000000000000003C3C60 +:1008200000003C3C00000000000000FF00000F0F33 +:1008300000003C3C00006666000000FF00000F0F57 +:10084000FFFF999900000000000000000000000078 +:100850000000000000000000000000000000000098 +:100860000000000000000000000000000000000088 +:10087000000000000000003C001C00CC0000000054 +:100880000000000000000000000000000000000068 +:10089000000000000000000000000000000040E335 +:1008A0008006002D920240828001802092024082C8 +:1008B000800000209202408280018020920240E36A +:1008C0008006002D820200000000000000000000F1 +:1008D0000001800000000000000000000000000097 +:1008E0000000000000000000000000000000000008 +:1008F0000000000000000000A00000280000000030 +:100900000000000000000000006100038001000002 :1009100000000000000000000000000000000000D7 -:1009200000000000000000000000000000000000C7 -:1009300000000000000000000000000000000000B7 -:10094000000000000000000000000800000000009F -:10095000000000000000000000000800000000008F +:10092000000000003CBE3CFC003000500C000F00FA +:1009300000000000000000000030005014005500CE +:1009400000000000AAFA3CFC0000000000000000CB +:10095000BE000E00003C303000000000000000002F :100960000000000000000000000000000000000087 -:10097000A0000000000000000000000000000000D7 -:100980000000000000000000000000000000000067 -:100990000000000000000000000000000000000057 -:1009A0000000000000000000000000000000000047 -:1009B0000000000000000000000000000000000037 -:1009C0000000000000000000000000000000000027 -:1009D0000000000000000000000000000000000017 +:100970000000000000000000000000000000000077 +:100980000000000000000000000000A000A000FF28 +:1009900000DB00000000000000000000000000007C +:1009A00000000000000000AA00F0003000500C0021 +:1009B00000000000000000000000003000501400A3 +:1009C00000000000000000F000F000000000000047 +:1009D000000000000E0000141010000000000000D5 :1009E0000000000000000000000000000000000007 :1009F00000000000000000000000000000000000F7 -:100A000000000000000000000000000000000000E6 +:100A000000000000000000000000000000A000A0A6 :100A100000000000000000000000000000000000D6 -:100A200000000000000000000000000000000000C6 +:100A20000000000000000000000000000028000A94 :100A300000000000000000000000000000000000B6 :100A400000000000000000000000000000000000A6 -:100A50000000000000000000000000000000040092 -:100A6000000000000000000000000000C0000000C6 +:100A50000000000055503C303020F0A000000000A5 +:100A60000000000000000000000000000000000086 :100A70000000000000000000000000000000000076 -:100A8000000000090000000000000000000000005D -:100A9000000000000000000000000800000000004E -:100AA000000008000000000000000000000000003E -:100AB0000000000800002000000009000000000005 -:100AC0000000000000000000000000000000000026 -:100AD000000000000008000000000000040000000A +:100A800000000000000000000000000000000B005B +:100A90000F00F0F0E0D000000000000000000000B7 +:100AA000000000000000000000000000000000281E +:100AB000000A000F0A0A0000000000000000C30046 +:100AC0000303AA003C00000000000000000000003A +:100AD00000000000000000000000302000000000C6 :100AE0000000000000000000000000000000000006 -:100AF000000000000808000000000088000000005E +:100AF00000000000000000000000000000000000F6 :100B000000000000000000000000000000000000E5 -:100B100000000000000000000000000000000000D5 -:100B200000000000000000000000000000000000C5 -:100B300000000000000000000000000000000000B5 -:100B400000000000000000000000000000000000A5 -:100B50000000000000000000000000000000000095 -:100B60000000000000000000000000000000000085 -:100B70000000000000000000000001000000000074 -:100B80000000000000000000000000000000000065 -:100B90000000000000000000000000000000000055 -:100BA0000000000000000000000000000000000045 -:100BB0000000000000000000000000000000000035 -:100BC0000000000000000000000000000000000025 -:100BD0000000000000000000000000000000000015 -:100BE0000000000000000000000000000000000005 -:100BF00000000000000000000000000011000021C3 -:100C000000000000000000000000000000000000E4 +:100B10000B000F00000000000000000000000000BB +:100B2000000000000000000001022080010220906F +:100B300020002000000000004000200020002008CD +:100B40002000208085008800040020000000200094 +:100B50002000200000008200400020002000200033 +:100B600020002000000820000001200020000000DC +:100B700020002000200000000000000020002000D5 +:100B80002000400020004080400021802000000024 +:100B9000200020002000000000008800200020002D +:100BA000200020002000200040004001210204918C +:100BB00000200000000020022000090200000000C8 +:100BC00000000000400802200040100040004040AB +:100BD00000000000400000000000000000000000D5 +:100BE0000000000000004000000000004000000085 +:100BF00000000000000040000000000000000000B5 +:100C00000000000041004100004000C00208000058 :100C100000000000000000000000000000000000D4 -:100C200000000000000000000000000000000000C4 -:100C300000000000000000000000000000000000B4 -:100C400000000000000000000000000000000000A4 -:100C50000000000000000000000000000000000094 -:100C60000000000000000000000000000000000084 -:100C70000000000000000000000000000000004034 -:100C80000000110300000000000000000000000050 -:100C90000000000000000000000000000000000054 -:100CA0000000000000000000000000000000000044 -:100CB0000000000000000000000000000000000034 -:100CC0000000000000000000000000000000000024 -:100CD0000000000000000000000000000000000014 -:100CE0000000000000000000000000000000000004 -:100CF00000000000000000000000000000000000F4 -:100D000000000000010000000000000000000000E2 -:100D100000000000000000000000000000000000D3 -:100D200000000000000000000000000000000000C3 -:100D300000000000000000000000000000000000B3 -:100D400000000000000000000000000000000000A3 -:100D50000000000000000000000000000000000093 -:100D60000000000000000000000000000000000083 -:100D70000000000000000000000000000000000073 -:100D80000000000040000000000000000000000023 -:100D90000000000000000000000000000000000053 -:100DA0000000000000000000000000000000000043 -:100DB0000000000000000000000000000000000033 -:100DC0000000000000000000000000000000000023 -:100DD0000000000000000000000000000000000013 +:100C20000000000800000000000000000080030039 +:100C3000000004000040000004020000000000006A +:100C4000000004000000000002000000000010008E +:100C50000000014000000000000001000010000042 +:100C600000400000001000004000000000000000F4 +:100C7000080000100010000000000000004000000C +:100C8000000000000000080000000000000000005C +:100C900000000110A0400000000000000000000063 +:100CA000000000001000000000000000000000082C +:100CB0000808000880080901020000090208000075 +:100CC0000910000009000008000080102008000042 +:100CD0008008000840080000000000080408200008 +:100CE00000100001400809080010801009080000E9 +:100CF000000000100008000800C000C00008000844 +:100D0000040000C000000008808400000008000803 +:100D100000400040080800080040004000080408A7 +:100D200000000000090000840900000000082008FD +:100D30000000104101410000000000000000000020 +:100D40008200000000000000000000000000010020 +:100D50000000000000000000001000100010400023 +:100D6000000000080010002100000000000000004A +:100D70000000000500050000004100080008001008 +:100D8000084100000000000000000000000000001A +:100D9000000000000000C000000000030000000090 +:100DA000000010000000000000080000000000002B +:100DB000000040008300400021000000000000000F +:100DC0000000000000001000000000000000030010 +:100DD00020000000000000000000030000000000F0 :100DE0000000000000000000000000000000000003 -:100DF00000000000000000000000000000000000F3 -:100E00000000000000000000000940000000000099 -:100E100000000000000000000000000000000000D2 +:100DF0000000000003000000000000C00000000030 +:100E000003000000000000000020040000000000BB +:100E10000000000404000000000041A000000000E9 :100E200000000000000000000000000000000000C2 -:100E300000000000000000000000000000000000B2 -:100E400000000000000000000000000000000000A2 -:100E50000000000000000000000000000000000092 -:100E60000000000000000000000000000000000082 -:100E70000000000000000000000000000000000072 -:100E80000000000000000000110000000000000051 -:100E90000000000000000000000000000000000052 -:100EA0000000000000000000000000000000000042 -:100EB0000000000000000000000000000000000032 -:100EC0000000000000000000000000000000000022 -:100ED0000000000000000000000000000000000012 -:100EE0000000000000000000000000000000000002 -:100EF00000000000000000000000000000000000F2 -:100F000000000000000000000000010000000000E0 -:100F100000000000000000000000000000000000D1 -:100F200000000000000000000000000000000000C1 -:100F300000000000000000000000000000000000B1 -:100F400000000000000000000000000000000000A1 -:100F50000000000000000000000000000000000091 -:100F60000000000000000000000000000000000081 -:100F70000000000000000000000000000000000071 -:100F800000000000000000000000000000E0000081 -:100F90000000000000000000000000000000000051 +:100E300000000000084011099020408411000000CB +:100E40008211820908110841400000008200000060 +:100E50000800100090000000C0000000A000840006 +:100E600000008200040000000000000000000000FC +:100E700008000000000082000000000000000000E8 +:100E80000000000000000800000000000000080052 +:100E900000000000000010000000400000000400FE +:100EA00000000400000000000000000090000400AA +:100EB0000000000000000000C00000018040109011 +:100EC000000002000000030000080384210011005C +:100ED0000008000000900000000000001100000861 +:100EE000210003000084000000000020002000001A +:100EF00000000000101000000010000000040000BE +:100F0000008200000000000000C00000000400009B +:100F1000000000000000000000000000840000004D +:100F200000200008400000000000000000000088D1 +:100F30000000000003001000C020C00000000004FA +:100F40000000A000000000002000880088001000C1 +:100F50001000200000000400001000090000000044 +:100F6000400000080000000040008800820090005F +:100F70000000100000000000000000000000000061 +:100F8000004000000000000000008200000000009F +:100F90000010040000000000C0004000000000003D :100FA0000000000000000000000000000000000041 -:100FB0000000000000000000000000000000000031 -:100FC0000000000000000000000000000000000021 -:100FD0000000000000000000000000000000000011 -:100FE0000000000000000000000000000000000001 +:100FB0000010000000000000000008000000040015 +:100FC00000004000000000000000000000C0000021 +:100FD000000083008900000000000000000000887D +:100FE00000000000000000000900000000000000F8 :100FF00000000000000000000000000000000000F1 -:1010000000000000000000000000000000000000E0 -:1010100000000000000000000000000000000000D0 -:1010200000000000000000000000000000000000C0 -:1010300000000000000000000000000000000000B0 -:1010400000000000000000000000000000000000A0 -:101050000000000000000000000000000000000090 -:101060000000000000000000000000000000000080 -:101070000000000000000000000000000000000070 -:101080000000000000000000000000000000000060 -:101090000000000000000000000000000000000050 -:1010A0000000000000000000000000000000000040 +:1010000020000000000000000000000000000000C0 +:10101000000000000000000000840000000000004C +:10102000000000000000000000004100000000007F +:101030000000000000000000000000000011054159 +:10104000000900000000820000000400C011000040 +:101050000000000020000000200810008200821024 +:10106000001000100004000484000004820000004E +:1010700000000010009100000000000000000008C7 +:1010800000080000000000400040000000000000D8 +:101090000000000000004000000000000800000008 +:1010A000000000020000000000000000000000003E :1010B0000000000000000000000000000000000030 -:1010C0000000000000000000000000000000000020 -:1010D0000000000000000000000000000000000010 -:1010E0000000000000000000000000000000000000 -:1010F00000000000000000000000000000000000F0 -:1011000000000000000000000000000000000000DF -:1011100000000000000000000000000000000000CF -:1011200000000000000000000000000000000000BF -:1011300000000000000000000000000000000000AF -:10114000000000000000000000000000000000009F -:10115000000000000000000000000000000000008F -:10116000000000000000000000000000000000007F -:10117000000000000000000000000000000000006F +:1010C0008408000002200200000008000000022046 +:1010D0002100040005008000000080208000000046 +:1010E00000000000000000200020040010000300A9 +:1010F00000000000110000080000000000000000D7 +:1011000000000000000020000000001000000000AF +:1011100000000000000000041100000000000000BA +:101120000000000000000000202000200488048847 +:101130002008000000000000030000000000000084 +:1011400000C00183048200020200000000002000B1 +:1011500000000000000000009003000500080209E4 +:1011600002880182021088080000000000000000D0 +:1011700020C00084008210040802000400880202DB :10118000000000000000000000000000000000005F :10119000000000000000000000000000000000004F -:1011A000000000000000000000000000000000003F +:1011A00000008400000000000400000000000000B7 :1011B000000000000000000000000000000000002F -:1011C000000000000000000000000000000000001F -:1011D000000000000000000000000000000000000F -:1011E00000000000000000000000000000000000FF -:1011F00000000000000000000000000000000000EF -:1012000000000000000000000000000000000000DE -:101210000000000000000006000C000000000000BC -:1012200000000000000000000000000000000000BE +:1011C00000000880044080030080800000000000D0 +:1011D0000000000000000000000040C1001010806E +:1011E000809080002000800000804000000000000F +:1011F00000000000000000000000808000000000EF +:10120000800000000000000000000000000000005E +:1012100000000000000000000000000000000000CE +:10122000000000000000000000008000000000003E :1012300000000000000000000000000000000000AE -:10124000000000000000000000000000000000009E -:10125000000000000000000000000000000000008E -:10126000000000000000000000000000000000007E -:10127000000000000000000000000000000000006E -:10128000000000000000000000000000000000005E -:101290000000000000000000FF0000FF0000000050 -:1012A000000000000000000000000000000000003E +:1012400000000000030003004000411000002000E7 +:1012500002004100000000000000000000001084B7 +:1012600000004180800000900005808000000000A8 +:10127000000000008000008800008080050003C09E +:10128000028041800000000000000000000000001B +:10129000000000000000000000000000000000004E +:1012A00000100000000004002000030041000000C6 :1012B000000000000000000000000000000000002E -:1012C000000000000000000000000000000000001E -:1012D000000000000000000000000000000000000E -:1012E00000000000000000000000000000000000FE -:1012F00000000000000000000000000000000000EE -:1013000000000000000000000000000000000000DD -:1013100000000000000000000000FF0000FF0000CF -:1013200000000000000000000000000000000000BD +:1012C00000000000000000820008000001A10000F2 +:1012D0000100010001000000000000000000820089 +:1012E00003C0208485C0400004C1028202C0000007 +:1012F000000000000090080004C0082002C0900018 +:1013000002C02102A1C00000000000000000000097 +:1013100000000000000000000000000000000000CD +:1013200000000001000400000100000000000100B6 :1013300000000000000000000000000000000000AD -:10134000000000000000000000000000000000009D -:10135000000000000000000000000000000000008D -:10136000000000000000000000000000000000007D -:10137000000000000000000000000000000000006D -:10138000000000000000000000000000000000005D -:10139000000000000000000000000000FF0000FF4F -:1013A000000000000000000000000000000000003D -:1013B000000000000000000000000000000000002D -:1013C000000000000000000000000000000000001D -:1013D000000000000000000000000000000000000D -:1013E00000000000000000000000000000000000FD -:1013F00000000000000000000000000000000000ED -:1014000000000000000000000000000000000000DC -:101410000000000000000000000000000000FF00CD -:1014200000FF0000000000000000000000000000BD -:1014300000000000000000000000000000000000AC -:101440000000000000000000000000040000000098 -:10145000000000000000000000000000000000008C -:1014600000000000000000000000018000030000F8 -:10147000000000000000000000000000000000006C -:1014800000000000000000000000000001800000DB +:101340000000000000000000200091000901900151 +:1013500000080088000200C000000000000000003B +:1013600009020111C002208305820009C011820513 +:10137000000000000000000091020002C09021085F +:1013800011080008C00202880000000000000000F0 +:10139000000000000000000000000000000000004D +:1013A0000000000000000000000000040090008227 +:1013B00000C000000000000000000000000000006D +:1013C000000000000000000000008005040321214F +:1013D00000410080000000800000000000000000CC +:1013E000000041850890800808C1C18800848040C1 +:1013F00000C100000000000000004100000080006B +:101400001000C1000080800080000000000000008B +:1014100000000000000000000000000000000000CC +:10142000000000000000000000000000008000003C +:1014300000800080000000000000000000000000AC +:101440000000000000000000000000002100200556 +:1014500021000240000000000000004000000000E9 +:101460000000000041008309088920088000000076 +:10147000008000000010002100000000000080003B +:10148000008000000000000000000040000000009C :10149000000000000000000000000000000000004C -:1014A00000000000000000000000000001800000BB -:1014B000000000000000000000000000000000002C -:1014C000000000000000000000000000000100001B -:1014D000000000000000000000000000000000000C -:1014E00000000000000000000000000010040000E8 -:1014F00000000000000000000000000000000000EC -:1015000000000000000000000000000000002008B3 +:1014A000000000000000800280008000000000803A +:1014B00000030000004000000000000000000000E9 +:1014C0000000000000000000000000000000010417 +:1014D0000000010001010090000000000000000079 +:1014E00000000000000021880302C1111001080063 +:1014F00040A0021002000001000000000000840073 +:101500008204840484000482080204900400000021 :1015100000000000000000000000000000000000CB -:101520000000000000000000000000000000200893 -:1015300000000000000000000000000000000000AB +:101520000000000000000000C00120000200400098 +:1015300000040000000000000000000000000000A7 :10154000000000000000000000000000000000009B -:10155000000000000000000000000000000000008B -:10156000000000000000000000000000000000007B -:10157000000000000000000000000000000000006B -:1015800000000000000988000000000000000000CA +:101550000041000007000000000000000000000043 +:101560000000000000000000880000E00000484289 +:101570000000000000004842004100000700000099 +:101580000000000000004842000000000000484247 :10159000000000000000000000000000000000004B :1015A000000000000000000000000000000000003B :1015B000000000000000000000000000000000002B :1015C000000000000000000000000000000000001B -:1015D000000000000000000000000000000000000B -:1015E00000000000000000000000000000000000FB -:1015F00000000000000000000000000000000000EB -:10160000000000000000000800840008000800003E -:1016100000000000000800000000000000000000C2 -:1016200000000000000000080000000800080000A2 -:1016300000000000000000000000000000000000AA +:1015D0000000000000000000000000000000B45502 +:1015E000B4FF000000000000000040108020401008 +:1015F000802000000960240000240000000000009A +:1016000000002400002400810024000081246000E8 +:10161000006000000000000000000000000000006A +:1016200000000000000000000000000028FFF8F8A3 +:101630000000000000000000BCBCA0FF0000000093 :10164000000000000000000000000000000000009A :10165000000000000000000000000000000000008A -:101660000000000000000000000000000021002138 -:1016700000210021000000210003000000000021E3 -:10168000002100210021002100210000000500218F -:101690000021002100210021000800050000002198 -:1016A00000210021002100080000000000000021AE -:1016B00000210021002100000000000000000000C7 +:10166000B400B4AA00000000000000000104020859 +:1016700001040208096000008100008100000000F0 +:10168000000000008100008181002400812400000E +:101690000900000900000000000000000000000038 +:1016A00000000000000000000000000000002828EA +:1016B00028280000000000000000A0A0A0A000005A :1016C000000000000000000000000000000000001A -:1016D000000000000000000000000000000000000A -:1016E00000000000000000000000000000000000FA -:1016F00000000000000000000000000000000000EA -:1017000000000000000000000002000000000000D7 -:1017100000000000000000000000000000000000C9 -:10172000000000000000000000C0000000000000F9 -:10173000000000000000000082000800820082001B +:1016D0000000000000001F1FFF14000000000000B9 +:1016E00000000000000000000000000000002400D6 +:1016F0000024069000000410082044880000000028 +:101700000000000000004400880004100140069022 +:101710000000069000000000000000000000000033 +:1017200000000000000000000000000000000000B9 +:1017300000000000000000000000000000000000A9 :101740000000000000000000000000000000000099 -:101750000000000000000000000000000000000089 -:101760000000000000000000000000002000000059 -:1017700000000000000000000000000020008200C7 -:101780000000000000000000000000008200820055 -:101790000000000000000000000000008200820045 -:1017A00000000000000000000000000000008200B7 -:1017B00000000000000000004000000000000000E9 +:101750000000000000000000141414140000000039 +:101760000000000000000000000000000000000079 +:101770008100008100000690014002800000448842 +:1017800000000000000000000044008808200280E3 +:10179000000006900000069000000000000000001D +:1017A0000000000000000000000000000000000039 +:1017B0000000000000000000000000000000000029 :1017C0000000000000000000000000000000000019 -:1017D0000000000000000000000000000000000009 -:1017E00000000000000000000000000000000000F9 -:1017F000000000000000000000000000000000A049 -:1018000000000000000000000000000000000000D8 -:1018100000000000000000000000000000000000C8 +:1017D0000000000000000000000000615A2E050D0E +:1017E00000A000610006001D0000000000000000D5 +:1017F0000000600000018000100000610006000D84 +:10180000080000000028000001A0600000000000A7 +:10181000100000610006000D08000000000000003C :1018200000000000000000000000000000000000B8 -:1018300000000000000000000000000000000000A8 -:101840000000000082008200A000000000000000F4 -:101850000000000000000000000000000000000088 -:101860000000000000000005200000000000004013 -:101870000000000000000000000000000003000065 -:10188000000000000021000500050000000000002D -:1018900000410000000000000041000000000000C6 -:1018A0000000000000000000000500000000000033 -:1018B000000500000000000000000000000500001E +:1018300000000000A00000000000000000610006A1 +:10184000009D0000000000000000000000000000FB +:10185000000000000000000000000000FF00FF008A +:101860002D285000000000000000000000000000D3 +:10187000000000000303C3000C0C000F0000000078 +:1018800030BA3CBE00000000000000000000000074 +:101890000000000000000000000000000000000048 +:1018A0000000000000000000000000000000000038 +:1018B0000000000000000000000000000000000028 :1018C0000000000000000000000000000000000018 -:1018D0000000000000000000000000000000000008 -:1018E00000000000000000000000000000000000F8 -:1018F00000000000000000000000000000000000E8 -:1019000000000000000000000000000000000000D7 +:1018D0000000000000000000000000000000FF5DAC +:1018E000FF0C282855000000000000000000000048 +:1018F0000000000000000303C3000C0C000F0000F8 +:10190000000030BA00AA0000000000000000000043 :1019100000000000000000000000000000000000C7 :1019200000000000000000000000000000000000B7 :1019300000000000000000000000000000000000A7 -:101940000000000004000000000000000000000093 -:101950000000000008000000000000090000000076 -:101960000000000000000000000000000000200057 -:101970000000000800080008000800000005000042 -:10198000000000080000001000000000000000003F -:10199000000000040008002100080008000000000A -:1019A0000004000800000000000000009000000893 -:1019B00000000000000800210008000800050000E9 -:1019C0000000000000000000000000000000000017 +:101940000000000000000000000000000000000097 +:101950000000000000000000000000000000000087 +:10196000000000000000000000000000F0FFFAFA94 +:101970000000000000000000003C00550F0F0A0AA4 +:101980000000000000000000000000000000000057 +:1019900000000000000000000000000030FF30BA2E +:1019A0000000000000000000000000000000000037 +:1019B0000000000000000000000000000000000027 +:1019C000000000000000F8F828F800000000000007 :1019D0000000000000000000000000000000000007 -:1019E00000000000000000000000000000000000F7 -:1019F00000000000000000000000000000000000E7 -:101A000000000000000000000000000000000000D6 -:101A100000000000000000000000000000000000C6 -:101A200000000000000000000000000000000000B6 +:1019E0000000005000502000010000000000F0F056 +:1019F000F0F00000000000000000003C0055000076 +:101A00000A0A0000000000000000000000000000C2 +:101A10000000000000000000000000000000303066 +:101A200030BA0000000000000000000000000000CC :101A300000000000000000000000000000000000A6 -:101A40000000000000000000000000000100000095 -:101A5000000000000000000000C0000000000000C6 -:101A60000000000000010001000100C000010001B1 -:101A700000C00111000001010084000400011001F8 -:101A800000C10000000000010001000100C00001D1 -:101A9000000100C001110100A1010040001000017F -:101AA000000100C1000000010001000100C00001B0 -:101AB000000100C00111000004010040008200018B -:101AC000000100C100000000000000000000410013 -:101AD0000000000000000040200000800000000026 -:101AE0000000000000000041004100410091004161 -:101AF0000041008240C10004084100000080004114 -:101B0000804100830000000000410041004100913D -:101B100000410041008240C14104084100000080B2 -:101B2000004100410085000000410041004100915A -:101B300000410041008240C10004914100000000CA -:101B4000004100410085000000000300000000800B -:101B500000008000000000008200408000000000C3 -:101B600080000000000500414100030000000080EB -:101B70004100820000000400880002800000A000F4 -:101B8000C100C1000080800000004100030000008F -:101B900000804100820000000400880082000010E4 -:101BA0008300C100C100008000004100030000006C -:101BB00000804100820000000400880082000010C4 -:101BC0008300C100C100008000000000010000008F -:101BD00000C0000020000000000003008208009008 -:101BE0004000400000000000000101000100000072 -:101BF00000C00100C00000000000090088020010C1 -:101C0000C1000900C1000082820000000100010043 -:101C1000000000C00100C000000000000900408872 -:101C20000002C1000900C100008484840100010099 -:101C3000000000C00100C000000000000900408852 -:101C40000002C1000900C10000848484000000007B -:101C5000C0000000000000000000000000020000C2 -:101C600000000000000000000000000000C00001B3 -:101C7000C0C100000000000100C002080011000106 -:101C800000C100000000000100000000000000C0D2 -:101C90000001C0C100000000000100C002080011E6 -:101CA000000100C10000000000010001010000C0AF -:101CB0000001C0C100000000000100C002080011C6 -:101CC000000100C10000000000010001010000004F -:101CD0000000800000000000000000000000008004 -:101CE0000000000000000000000000000000008074 -:101CF000004180C100000000004100C1009000418F -:101D0000004100C10000000000410041000000004F -:101D10000080004180C100000000004100C100902F -:101D20000041004100C10000000000410005040026 -:101D30000080004180C100000000004100C100900F -:101D40000041004100C10000000000410005040006 -:101D50000000800000C10000000000000000000042 -:101D60000000000000030000000000000000000070 -:101D7000C100800080C10000410400000900410052 -:101D8000C1410000800900004111000080004100B5 -:101D90000000C100800080C1000041040000090073 -:101DA0004100C10480008004000041000000800068 -:101DB0004100C100800080C1000041040000090012 -:101DC0004100C1048000804000004100000080000C -:101DD00041000000400000C10000000000000000C1 -:101DE000000000A040000000000000000000000013 -:101DF0000000C1004000C0C100000101020010004D -:101E00000100C1A10200C000000001000000C000EC -:101E100001000000C1004000C0C10000010102003B -:101E200010000100C1412000C001000001000000BD -:101E3000C0000100C1004000C0C10000010102005B -:101E400010000100C1412000C0010000010000009D -:101E5000C00001000000000000000042000000007F -:101E600000004800410000E0000000000000000009 -:101E700000000042000000000000004200000000DE -:101E800000000000811200880700480000000000E8 -:101E90000000000000000000000000000042000000 -:101EA00000000000000088120088070048000000C1 -:101EB00000000000000000000000000000420000E0 -:101EC0000000000000004112008807000000000030 -:101ED0000000000000000000000000000000000002 -:101EE00000000000000000000000000000000000F2 -:101EF00000000000000000000000000000000000E2 -:101F000000000000000000000000000000000000D1 -:101F100000000000000000000000000000000000C1 -:101F200000000000000000000000000000000000B1 -:101F300000000000000000000000000000000000A1 +:101A40000000000000000000282828F80000000026 +:101A50000000000000000000000000000000000086 +:101A6000000000008400200088008800880020001A +:101A700020002008840020008800200000002000B2 +:101A8000C180218088000400000020002000880020 +:101A9000200020002000C00288000000880088008C +:101AA0002000C000000300000400000088002000A7 +:101AB000200004100000200040000400000020006E +:101AC0002000880020000000040088004000200062 +:101AD00088002000000020002000200000002000DE +:101AE0002000200020000004090004000002400241 +:101AF0004002000009000000400000C0400000005B +:101B000000000404082000004100414000000000E3 +:101B100000000900000009040004050000000000A6 +:101B2000000041000000000000000900000000006B +:101B30000000000000000000000000204100000044 +:101B4000000400020004000000000000000000008B +:101B500000A000000000000000A0000000A00000A5 +:101B600000000000000000008200000000000000F3 +:101B7000000000000000004000000000000088009D +:101B800000000000000810400000000000000041BC +:101B900000000000000008400000000000000000FD +:101BA000000000000008200200000000000000000B +:101BB0000000820000000000001000000000000093 +:101BC00000000000000000081000000000000000FD +:101BD00000002000000000000010000000000000D5 +:101BE00000000000000000081004408800084000C9 +:101BF00040040440008810880000090000880000AC +:101C000000084100000000018008000800080000F2 +:101C1000008800000000000800080000000000002C +:101C20000088118800000009800900002088000851 +:101C300000000000000000C0090800400000000093 +:101C4000000000000000000020098008000000885B +:101C50000000200000000000050800000000000057 +:101C600000000000000000000409800900030000DB +:101C70000000000800000003000000000000001049 +:101C80000000000000030000000820000000000029 +:101C9000001100000000000000000000A000C002D1 +:101CA0000000000000000000001000000000000024 +:101CB0000000000000000000000000000000000024 +:101CC00000000000000000000000000000210441AE +:101CD00000030005000000000005040000410000B2 +:101CE000880000000000000000000000000000006C +:101CF00000A00084050000000000000011000000AA +:101D00000300040004201100000000000000000097 +:101D100020A0200000100500000805A041000000E0 +:101D20000000050000000000000000C000000000EE +:101D30000000000000000000000000100000000093 +:101D4000210041000000000009000900000000001F +:101D50000000000000000000000000000000000083 +:101D60000000000000000000000000000000000073 +:101D70000809A0000809A0000000402000219000F0 +:101D8000840088004020900000008200A00088822B +:101D90000800820008008400C00008000000000065 +:101DA0000000A00008000400C0000000C000000007 +:101DB000000000000000820008008200C00008004F +:101DC0000000880008000800C000820082000000B7 +:101DD00000848200C00000008200000000000000BB +:101DE0009000820082000000820084000000000059 +:101DF000828041900000000040004100110020005E +:101E000000000000112041200020000421004000BB +:101E10000405402000040400200000000000000031 +:101E20000000002000200020000000000000000052 +:101E3000000000000000080000000000000000009A +:101E40000000000000000000000000000000000092 +:101E50000000000300000800000021000000000056 +:101E60000900000000000000000000000000000069 +:101E7000000000020008900000001000A000000018 +:101E8000C000A0200005004100000000000000008C +:101E9000080084008800C000C00000419000C0001D +:101EA0000800820000000800900008110000C00037 +:101EB0000000080000000000A000C0000000C000FA +:101EC000081082000000002100108221A0000005FF +:101ED000C021C0000000000000000000000000055C +:101EE0000800100000009000000000000000000545 +:101EF0001021000000001000000021000000080078 +:101F0000000000A0000040000400000000001104D8 +:101F100000040420092021C0001000040004040073 +:101F2000000010000000110010001000419000900F +:101F300000001000108400000000000000000000FD :101F40000000000000000000000000000000000091 -:101F50000000000000000000000000000000000081 +:101F5000050000000000000010000000000000006C :101F60000000000000000000000000000000000071 -:101F70000000000000000000000000000000000061 -:101F80000000000000000000000000000000000051 -:101F90000000000000000000000000000000000041 -:101FA0000000000000000000000000000000000031 -:101FB0000000000000000000000000000000000021 -:101FC0000000000000000000000000000000000011 -:101FD00000000000000000000000747B0000000012 -:101FE00000000000000000000000000000000000F1 -:101FF0000000000000000000DE2E757B00000000E5 -:1020000000000000000000000000000000000000D0 -:102010000000000000000000DEAE0000757B000044 -:1020200000000000000000000000000000000000B0 -:1020300000000000000000000000DEAE757B000024 +:101F70000000000000000000A000004088000800F1 +:101F80000400900000080000000004000800C008E1 +:101F900004080000000082000000080082008200A7 +:101FA000C000A000820000000000000000008200CD +:101FB0000000080000000080000000000000900009 +:101FC00000028200C00000000800000000000000C5 +:101FD00082000000000000009000004000000000AF +:101FE00000008200820000090000000400110000CF +:101FF0000009000000000400902100100000000013 +:10200000000041000400040404040004000400046F +:1020100020C040000000000000040000100000008C +:1020200004000482040000200000200000000000E2 +:102030001100000000000000000800000000000087 :102040000000000000000000000000000000000090 -:1020500000000000000000000000DEAE61560340FA -:102060000000000000000231E0000000000000005D -:102070000C4000000000000002C06A8660C6030039 -:102080000000000000000031E0000000000000003F -:102090000C0000000000000000C06306000060C6E5 -:1020A00003000000000000000031E000000000001C -:1020B00000000C0000000000000000C0630660C6C5 -:1020C00003000000000000000031E00000000000FC -:1020D00000000C0000000000000000C063060000CB -:1020E00000000000000000000000000000000000F0 -:1020F00000000000000000000000000000000000E0 -:1021000000000000000000000000000000000000CF -:1021100000000000000000000000000000000000BF -:1021200000000000000000000000000000000000AF -:10213000000000000000000000000000000000009F -:10214000000000000000000000000000000000008F -:10215000000000000000000000000000000000007F -:10216000000000000000000000000000000000006F -:10217000000000000000000000000000000000005F -:10218000000000000000000000000000000000004F -:10219000000000000000000000000000000000003F -:1021A000000000000000000000000000000000002F -:1021B000000000000000000000000000000000001F -:1021C000000000000000000000000000000000000F -:1021D00000000000000000000000000000000000FF -:1021E00000000000200000000000000000000000CF -:1021F00000000000000000000000000000000000DF -:1022000000000000000000000000000000000000CE -:1022100000000000000000000000000000000000BE -:1022200000000000000000000000000000000000AE -:10223000000000000200000000000200000000009A -:10224000000000000000000000000000000000008E -:10225000000000000000000000000000000000007E -:10226000000000000000000000000000000000006E -:10227000000000000000000000000000000000005E -:10228000000000000000000000000000000000004E -:10229000000000000000000000000000000000003E -:1022A0000000000000000000000000000000000826 -:1022B0000000000000000000020802080008000002 -:1022C0000084000000000000000000000000000882 -:1022D00000000000000000000008000800080010D6 -:1022E00000000000000000000000000000000000EE -:1022F00000000000000000000000000000000000DE -:1023000000000000000000000000000000000000CD -:1023100000000000000000000000000000000000BD -:10232000000000000000000000000000002100008C -:10233000000000000000000000000000001000008D -:10234000000000000000000000000000000000008D -:102350000000000800000000000000000000000075 -:10236000000000000000000000000000000000006D -:10237000000021000000000000000000000000003C -:10238000000000000000000000000000000000004D -:102390000000000000000000000000080008000825 -:1023A000001000C00000000000000000000000005D -:1023B0000000000000000000000000000000000815 -:1023C0000008000800A0000000000000000000005D -:1023D00000000000000000000000000000000008F5 -:1023E0000008001000A00000000000000000000035 -:1023F00000000000000000000000000000000000DD -:1024000000000000000000000000000000000000CC -:1024100000000000000000000000000000000000BC -:1024200000000000000000000000000000000000AC -:10243000000000000000000000000000000000009C -:10244000000000000000000000000000000000008C -:10245000000000000000000000000000000000007C -:10246000000000000000000000000000000000006C -:10247000000000000000000000000000000000005C -:10248000000000000000000000000000000000004C -:10249000000000000000000000000000000000003C -:1024A000000000000000000000000000000000002C -:1024B000000000000000000000000000000000001C -:1024C000000000000000000000000000000000000C -:1024D00000000000000000000000000000000000FC -:1024E00000000000000000000000000000000000EC -:1024F00000000000000000000000000000000000DC -:10250000000000800000000000000000000000004B +:102050000000000000000000000000000000000080 +:102060000000000000000000000000000000000070 +:102070000000000000000000000000000000000060 +:102080000000000100000000000000880001C10005 +:1020900000A0C0820000C00000010000000000009D +:1020A000000000000000C000000101040001C000A9 +:1020B00000A0C0820000C00000010000000000007D +:1020C00000000000000000000000000000100001FF +:1020D00000000020101000000000000100000000BF +:1020E0000000000000000000C00000010008010026 +:1020F000000000821010000000000001000000003D +:102100000000000000080000000000111100002085 +:1021100090000000808000008000000300000000AC +:102120000000000000050000000000030280001015 +:10213000C10000008080000080000003000000005B +:1021400000000000000000110000000000110280EB +:1021500000400200000080800000000000410000FC +:1021600000000000000000050000000000030480E3 +:102170000440210000008000000000000041000039 +:1021800000004000000000000000410000040400C6 +:10219000A000830000000300000000000080800217 +:1021A00000002000000000000000200000000400EB +:1021B00083000200000503008000000000A08008EA +:1021C00000000000200000000000000004000000EB +:1021D0001000830005800000118000000000000056 +:1021E00080200000400000000000000040000000CF +:1021F000040083000500000009000000000000004A +:10220000800300000000000000000000000000004B +:102210000000040005A0000001202000000000C014 +:10222000820100000000000000000000000000002B +:10223000000004008540000001004000000000C0D4 +:10224000820100000000000000000000000000000B +:1022500000000000040084820000000490000000E0 +:102260000000C000000000000000000000000100AD +:102270000000010004008440000000009000000005 +:102280000000C0000000000000000000000000008E +:1022900000001000004000000300000000000000EB +:1022A000000000000000000000000000000000002E +:1022B000000120000040000041000000000000007C +:1022C000000000000000000000000000000000000E +:1022D0000000840010010002000000000000000067 +:1022E00000000001000000000000000000000000ED +:1022F00000008401C1010002000001000000000094 +:1023000000000001000000000000000000000000CC +:102310000000004100090000000041000000000032 +:10232000000000410000000000000000000000006C +:1023300000000020000400800000410000000000B8 +:10234000000000410000000000000000000000004C +:102350000000000000058004008000001100000063 +:10236000000000000041000000000000000000002C +:10237000000000000005C0200080000003000000F5 +:1023800000000000004100000040800000C100008B +:10239000000200009000000000C18000004000002A +:1023A00000410010000005030020800000C1000073 +:1023B000002080000500000000C180000002000035 +:1023C000004100400000058300000020800000C1A3 +:1023D00000000000800004000000004180000003B5 +:1023E000000000000000000005030040800000C164 +:1023F00000000020800041000000004180400040BB +:102400000000000000000000031000002000004059 +:10241000000000008800040000000003020000002B +:102420000000000100010000000900002000004041 +:10243000000000012000C0000000000304000001B3 +:102440000000000100010000000300000000200067 +:102450000040000000004000C0000000009110009B +:1024600000000000000000000000008800002000C4 +:102470000040000000014000C00000000091100179 +:1024800000000000000000000000008900000000C3 +:10249000000000000000000000000000811200E0C9 +:1024A00022004842000000000000484200000000F6 +:1024B000000000000000000000000000811200E0A9 +:1024C00040004842000000000000484200000000B8 +:1024D0000000000000000000000000000000811269 +:1024E00000E00700480000000000000000000000BD +:1024F000000000000000000000000000000A81123F +:1025000000E007004800000000000000000000009C :1025100000000000000000000000000000000000BB :1025200000000000000000000000000000000000AB :10253000000000000000000000000000000000009B :10254000000000000000000000000000000000008B :10255000000000000000000000000000000000007B -:1025600000000000008000000000000000000000EB +:10256000000000000000000000000000000000006B :10257000000000000000000000000000000000005B -:102580000000080000100000000000000000000033 -:102590000000000000000000000800000000000033 -:1025A0000000008400A00000000000000000000007 -:1025B0000000000000000000000000080000000013 -:1025C00000000000000800100000000000000000F3 -:1025D00000000000000000000000000800000000F3 -:1025E00000000000000800100000000000000000D3 -:1025F00000000000080000000000000000000000D3 +:10258000000000000000000000000000000000004B +:10259000000000000000000000000000000000003B +:1025A000000000000000000000000000000000002B +:1025B000000000000000000000000000000000001B +:1025C000000000000000000000000000000000000B +:1025D00000000000000000000000000000000000FB +:1025E00000000000000000000000000000000000EB +:1025F00000000000000000000000000000000000DB :1026000000000000000000000000000000000000CA -:1026100000000000000000000000000000000000BA -:1026200000000000000000000000000000080000A2 -:10263000000000000000000000000000000000009A +:102610000000757B000000000000000000000000CA +:1026200000000000000000000000000000000000AA +:10263000DEAE757B0000000000000000000000001E :10264000000000000000000000000000000000008A -:10265000000000000000000000000000000000007A +:10265000DEAE0000757B00000000000000000000FE :10266000000000000000000000000000000000006A -:10267000000000000000000000000000000000005A +:102670000000DEAE757B00000000000000000000DE :10268000000000000000000000000000000000004A -:10269000000000000000000000000000000000003A -:1026A000000000000000000000000000000000002A -:1026B000000000000000000000000000000000001A -:1026C000000000000000000000000000000000000A -:1026D00000000000000000000000000000000000FA -:1026E00000000000000000000000000000000000EA -:1026F00000000000000000000000000000000000DA -:1027000000000000000000000000000000000000C9 -:1027100000000000000000000000000000000000B9 -:1027200000000000000000000000000000000000A9 -:102730000000000000000000000000000000000099 -:102740000000000000000000000000000000000089 -:102750000000000000000000000000000000000079 -:102760000000000000000000000000000000000069 -:102770000000000000000000000000000000000059 -:102780000000000000000000000000000000000049 -:102790000000000000000000000000000000000039 -:1027A0000000000000000000000000000000000029 -:1027B0000000000000000000000000000000000019 -:1027C0000000000000000000000000000000000009 -:1027D00000000000000000000000000000000000F9 -:1027E00000000000000000000000000000000000E9 -:1027F00000000000000000000000000000000000D9 -:1028000000000000000000000000000000000000C8 -:1028100000000000000000000000000000000000B8 -:1028200000000000000000000000000000000000A8 -:102830000000000000000000000000000000000098 -:102840000000000000000000000000000000000088 -:102850000000000000000000000000000000000078 -:102860000000000000000000000000000000000068 -:102870000000000000000000000000000000000058 -:102880000000000000000000000000000000000048 -:102890000000000000000000000000000000000038 -:1028A0000000000000000000000000000000000028 -:1028B0000000000000000000000000000000000018 -:1028C0000000000000000000000000000000000008 -:1028D00000000000000000000000000000000000F8 -:1028E00000000000000000000000000000000000E8 -:1028F00000000000000000000000000000000000D8 -:1029000000000000000000000000000000000000C7 -:1029100000000000000000000000000000000000B7 -:1029200000000000000000000000000000000000A7 -:102930000000000000000000000000000000000097 -:102940000000000000000000000000000000000087 -:102950000000000000000000000000000000000077 -:102960000000000000000000000000000000000067 -:102970000000000000000000000000000000000057 -:102980000000000000000000000000000000000047 -:102990000000000000000000000000000000000037 -:1029A0000000000000000000000000000000000027 -:1029B0000000000000000000000000000000000017 -:1029C0000000000000000000000000000000000007 -:1029D00000000000000000000000000000000000F7 -:1029E00000000000000000000000000000000000E7 -:1029F00000000000000000000000000000000000D7 +:102690000000DEAE612603400000000000000230B2 +:1026A000A0000000000000000C400000000000003E +:1026B00002C0648661260340000000000000023072 +:1026C000A0000000000000000C400000000000001E +:1026D00002C0648600006126034000000000000084 +:1026E0000230A0000000000000000C4000000000CC +:1026F000000002C064866126034000000000000064 +:102700000230A0000000000000000C4000000000AB +:10271000000002C064868800200004112000200010 +:1027200020002002200221000500218001800400F9 +:102730000000848020002000000020000400200011 +:1027400021002000210000002000000004004000C3 +:1027500000002000200000012000000020000400F4 +:102760000400840020000200000000008800201007 +:1027700020008800200088002000000020002000A9 +:102780002000840020002000000088000400880051 +:102790002000880020002000050000004000040008 +:1027A0000000400000014001909020002008200817 +:1027B0000000400000400400410000000000200034 +:1027C0000000100040002000200000000000000079 +:1027D0000000400000000000000000000020000099 +:1027E0000000410000000200040009000000000099 +:1027F0000000000000020000000040000000000097 +:1028000000000000000000000500000000000500BE +:1028100000000000000000020000000000000000B6 +:1028200002000085000000004000000000000000E1 +:1028300000090080000000400000000000000000CF +:10284000000800000000000000000105000000007A +:10285000000800000000000000000000021002104C +:10286000020002000200020002000200000000005C +:10287000000000091000000000000000000000003F +:102880000000020000400040004000400000000046 +:102890000000000000000000000000000400000034 +:1028A000000040040008000000008008000005004F +:1028B000000000820010050005000000001020004C +:1028C00000000082001000000084000808000000E2 +:1028D0000810081000840000000000100000000133 +:1028E000000100840408000000000000000800004F +:1028F000000000000084008200000000008400004E +:1029000000000000000800000000000000040000BB +:102910000000000000880008000000000000A00087 +:102920008400000084088403000000050000000902 +:10293000000000000010000884400008900090058E +:10294000C0000083002120C000C100414021C00020 +:102950008400A00000118400A0098205000400008A +:102960000003000000000021000300000000000040 +:10297000000000000004004000080000000000000B +:102980001000000000000021000000000000000511 +:102990000000000000000021000000000000000016 +:1029A00000000000000000004100000000002100C5 +:1029B000080000000908080800004101080105009E +:1029C000400021004040210080082104090000004F +:1029D0000000000008002100000003820000000148 +:1029E00000000000000000000000000000004100A6 +:1029F0000000210000000010410000000000000065 :102A000000000000000000000000000000000000C6 -:102A100000000000000000000000000000000000B6 -:102A200000000000000000000000000000000000A6 -:102A30000000000000000000000000000000000096 -:102A40000000000000000000000000000000000086 -:102A50000000000000000000000000000000000076 -:102A60000000000000000000000000000000000066 -:102A70000000000000000000000000000000000056 -:102A80000000000000000000000000000000000046 -:102A90000000000000000000000000000000000036 -:102AA0000000000000000000000000000000000026 -:102AB0000000000000000000000000000000000016 -:102AC0000000000000000000000000000000000006 -:102AD00000000000000000000000000000000000F6 -:102AE00000000000000000000000000000000000E6 +:102A10000000090000000000000000000000008429 +:102A20000300A00010000800C00082004000904099 +:102A30004000100000004021A0008800A040A0003D +:102A4000900000000000000311004000A0002000E2 +:102A5000100084001000000982000800000000003F +:102A600001000000040000000200820000000800D5 +:102A700000000800000008000000820000000000C4 +:102A8000000008000400820000008200000008002E +:102A90000000820082000000080008000000000022 +:102AA0000000000002000000000000A021009100D2 +:102AB00020010000000000000000000000900083E2 +:102AC0000084000800000000000820000000000052 +:102AD00080008300008210000000110000900000C0 +:102AE0000000202000000084000000000000000022 :102AF00000000000000000000000000000000000D6 -:102B000000000000000000000000000000000000C5 +:102B000000001000000000000000000000000000B5 :102B100000000000000000000000000000000000B5 -:102B200000000000000000000000000000000000A5 -:102B30000000000000000000000000000000000095 -:102B40000000000000000000000000000000000085 -:102B50000000000000000000000000000000000075 -:102B60000000000000000000000000000000000065 -:102B70000000000000000000000000000000000055 +:102B200008000000000010008280820082088800F7 +:102B30008411840384000000100882008210820245 +:102B40000021082182080203000090000000840494 +:102B5000900390048221002100110080C000000831 +:102B60000000000000080000000300000000080052 +:102B70000800000000000040000000000004000801 :102B80000000000000000000000000000000000045 :102B90000000000000000000000000000000000035 -:102BA0000000000000000000000000000000000025 -:102BB0000000000000000000000000000000000015 -:102BC0000000000000000000000000000000000005 -:102BD00000000000000000000000000000000000F5 -:102BE00000000000000000000000000000000000E5 -:102BF00000000000000000000000000000000000D5 -:102C000000000000000000000000000000000000C4 -:102C100000000000000000000000000000000000B4 -:102C200000000000000000000000000000000000A4 -:102C30000000000000000000000000000000000094 -:102C40000000000000000000000000000000000084 -:102C50000000000000000000000000000000000074 -:102C60000000000000000000000000000000000064 -:102C70000000000000000000000000000000000054 +:102BA00000000000000000000008004000000000DD +:102BB0000008000000080004218800010000000057 +:102BC0000001080040000000000400000800400070 +:102BD0000091000000000000000000000040210003 +:102BE0000400000000000388000000000000000056 +:102BF00000000000000000000000090000000000CC +:102C0000000005900000000003000000000000002C +:102C1000000000900000000000000900000000001B +:102C200000000090000000000800020008000400FE +:102C3000080410008200100020800002880888210B +:102C40000000000004008208020000000400901050 +:102C5000200000410004100804000000C003000030 +:102C60000021000000000000018000000000008042 +:102C7000004000008221000000000003000000006E :102C80000000000000000000000000000000000044 :102C90000000000000000000000000000000000034 -:102CA0000000000000000000000000000000000024 -:102CB0000000000000000000000000000000000014 -:102CC0000000000000000000000000000000000004 -:102CD00000000000000000000000000000000000F4 -:102CE00000000000000000000000000000000000E4 -:102CF00000000000000000000000000000000000D4 -:102D000000000000000000000000000000000000C3 +:102CA0000000000800000000000004008004A000F4 +:102CB000800440000000000000000002208221018A +:102CC0000000000000000000000100000000000003 +:102CD00000008000000000018001000000A0000052 +:102CE0000000100000000000000004040000038247 +:102CF00000100000000000000000000000000000C4 +:102D000000000000000000080000000000000000BB :102D100000000000000000000000000000000000B3 -:102D200000000000000000000000000000000000A3 -:102D30000000000000000000000000000000000093 -:102D40000000000000000000000000000000000083 -:102D50000000000000000000000000000000000073 -:102D60000000000000000000000000000000000063 -:102D70000000000000000000000000000000000053 +:102D2000000000000000000000000000000002A001 +:102D3000008200900140408500908804400490216A +:102D4000004000C00289000100000000000008905F +:102D500000200182020888410088004110C0000064 +:102D600000000000000000009000000000000000D3 +:102D70000108002000100008000000000000000012 :102D80000000000000000000000000000000000043 :102D90000000000000000000000000000000000033 :102DA0000000000000000000000000000000000023 -:102DB0000000000000000000000000000000000013 -:102DC0000000000000000000000000000000000003 -:102DD00000000000000000000000000000000000F3 +:102DB0000080008020001100209040058902002042 +:102DC000404100C00208001008410010004100020C +:102DD000000000000800800020410082110800056A :102DE00000000000000000000000000000000000E3 -:102DF00000000000000000000000000000000000D3 +:102DF0000000218000800000008000000000000032 :102E000000000000000000000000000000000000C2 :102E100000000000000000000000000000000000B2 :102E200000000000000000000000000000000000A2 -:102E30000000000000000000000000000000000092 -:102E40000000000000000000000000000000000082 -:102E50000000000000000000000000000000000072 -:102E60000000000000000000000000000000000062 -:102E70000000000000000000000000000000000052 +:102E300000000000001000008080888021A0400079 +:102E400041C0800008858503C19000000004800017 +:102E500080008000808880090080080000C1201167 +:102E60004189000000100080000000000000000305 +:102E700000800000000000000000000000000000D2 :102E80000000000000000000000000000000000042 :102E90000000000000000000000000000000000032 :102EA0000000000000000000000000000000000022 -:102EB0000000000000000000000000000000000012 -:102EC0000000000000000000000000000000000002 -:102ED00000000000000000000000000000000000F2 -:102EE00000000000000000000000000000000000E2 -:102EF00000000000000000000000000000000000D2 +:102EB00000000000000002010020C0908308C0C193 +:102EC00084A085C0020003C008A011C00200400019 +:102ED0004004C000400008C1109082C0900804C0A7 +:102EE000908383C000000001000200000000000089 +:102EF00000000082000000000000009000000000C0 :102F000000000000000000000000000000000000C1 :102F100000000000000000000000000000000000B1 :102F200000000000000000000000000000000000A1 -:102F30000000000000000000000000000000000091 -:102F40000000000000000000000000000000000081 -:102F50000000000000000000000000000000000071 -:102F60000000000000000000000000000000000061 -:102F70000000000000000000000000000000000051 +:102F300000000000000040080000908808C0A102C6 +:102F40000104C190A0C1C1050084C002821100002B +:102F500000000000000009A00082C040908809A085 +:102F60000188C00590A100000000000000000000E2 +:102F70000000000000000000080000000000100039 :102F80000000000000000000000000000000000041 :102F90000000000000000000000000000000000031 :102FA0000000000000000000000000000000000021 -:102FB0000000000000000000000000000000000011 -:102FC0000000000000000000000000000000000001 -:102FD00000000000000000000000000000000000F1 -:102FE00000000000000000000000000000000000E1 +:102FB0000000000000000000800000008000008091 +:102FC000419010028510030841080020808880C1CC +:102FD00000000300410000004100000080001100DB +:102FE0004103030883088241000000000000000044 :102FF00000000000000000000000000000000000D1 :1030000000000000000000000000000000000000C0 :1030100000000000000000000000000000000000B0 :1030200000000000000000000000000000000000A0 -:103030000000000000000000000000000000000090 -:103040000000000000000000000000000000000080 -:103050000000000000000000000000000000000070 -:103060000000000000000000000000000000000060 -:103070000000000000000000000000000000000050 +:1030300000000000000000000000000500408000CB +:103040008000A102A08090801000410300A09000A9 +:1030500020038002008000800000001080088000B3 +:1030600080004109092191008210800000000000C9 +:10307000000000000011000000000000000000003F :103080000000000000000000000000000000000040 :103090000000000000000000000000000000000030 :1030A0000000000000000000000000000000000020 -:1030B0000000000000000000000000000000000010 -:1030C0000000000000000000000000000000000000 -:1030D00000000000000000000000000000000000F0 -:1030E00000100000000000000000000000000000D0 -:1030F00000000000000000000000000000000000D0 -:1031000000000000000000000000000000000000BF +:1030B00000000000000000000000000010004009B7 +:1030C0001008100005890802050283009100C01055 +:1030D0004188C000C0002010A0C0400010010220A4 +:1030E000044082004101C00404908201C000A0009D +:1030F000A0004000000000000000000000004000B0 +:1031000088000000880000000000000000000000AF :1031100000000000000000000000000000000000AF :10312000000000000000000000000000000000009F -:10313000000000000000000000000000000000008F -:10314000000000000000000000000000000000007F -:10315000000000000000000000000000000000006F -:10316000000000000000000000000000000000005F -:10317000000000000000000000000000000000004F +:10313000000000000000000000000000000000810E +:10314000000007000000810000E000004842880005 +:1031500000E000004842000000000000000681007E +:1031600000E000004842880042E0000048420000C1 +:10317000000000000000001100080704000000002B :10318000000000000000000000000000000000003F :10319000000000000000000000000000000000002F :1031A000000000000000000000000000000000001F :1031B000000000000000000000000000000000000F -:1031C00000000000000000000000000000000000FF -:1031D00000000000000000000000000000000000EF -:1031E00000000000000000000000000000000000DF -:1031F00000000000000000000000000000000000CF -:1032000000000000000000000000000000000000BE +:1031C000000000009900181828004100A005000028 +:1031D0002004100820401080F424FF240000000088 +:1031E000A00005002800002820104080A000050055 +:1031F000FF24FF300000000000000000000000007D +:1032000000001818BD990000000000000000000038 :1032100000000000000000000000000000000000AE :10322000000000000000000000000000000000009E :10323000000000000000000000000000000000008E -:10324000000000000000000000000000000000007E -:10325000000000000000000000000000000000006E -:10326000000000000000000000000000000000005E -:10327000000000000000000000000000000000004E -:10328000000000000000000000000000000000003E +:10324000000000000001990018180028004100004B +:10325000A0054002800104020801F4242424000097 +:10326000000000A00005410000410408020100A088 +:1032700000052424303000000000000000000000A1 +:10328000000000001818BD990000000000000000B8 :10329000000000000000000000000000000000002E :1032A000000000000000000000000000000000001E :1032B000000000000000000000000000000000000E @@ -70468,368 +62274,4465 @@ :1033100000000000000000000000000000000000AD :10332000000000000000000000000000000000009D :10333000000000000000000000000000000000008D -:10334000000000000000000000000000000000007D -:10335000000000000000000000000000000000006D -:10336000000000000000000000000000000000005D -:10337000000000000000000000000000000000004D -:10338000000000000000000000000000000000003D +:1033400000000000000000000000F0F060600000DD +:1033500082140000884400A000051008200400002A +:103360000000000002000088004414000014000067 +:1033700082140000A0050000000000000000000012 +:103380000000000000000000006600660000000071 :10339000000000000000000000000000000000002D :1033A000000000000000000000000000000000001D :1033B000000000000000000000000000000000000D -:1033C00000000000000000000000000000000000FD -:1033D00000000000000000000000000000000000ED -:1033E00000000000000000000000000000000000DD -:1033F00000000000000000000000000000000000CD -:1034000000000000000000000000000000000000BC +:1033C00000000000000000000000800000006060BD +:1033D0008214000088440000A00005008001400223 +:1033E0000000000000000301880044008200008209 +:1033F00082140000A0050000000000000000000092 +:1034000000000000000000000000006003630000F6 :1034100000000000000000000000000000000000AC :10342000000000000000000000000000000000009C :10343000000000000000000000000000000000008C -:10344000000000000000000000000000000000007C -:10345000000000000000000000000000000000006C -:10346000000000000000000000000000000000005C -:10347000000000000000000000000000000000004C -:10348000000000000000000000000000000000003C +:103440000000000000000000000000000028004014 +:10345000000860600007800D10000000000180007F +:103460000800A0610006000D120660610007800DD3 +:1034700030000000000180000800A00000000000F3 +:103480000000006100AE200D00A000000000000060 :10349000000000000000000000000000000000002C :1034A000000000000000000000000000000000001C :1034B000000000000000000000000000000000000C :1034C00000000000000000000000000000000000FC -:1034D00000000000000000000000000000000000EC -:1034E00000000000000000000000000000000000DC -:1034F00000000000000000000000000000000000CC +:1034D00000000000000000007D000000F0F030302F +:1034E00000C3C0C000000000000000000000000099 +:1034F00000000000FFD70A0AF0003C0000000000B6 :1035000000000000000000000000000000000000BB :1035100000000000000000000000000000000000AB :10352000000000000000000000000000000000009B :10353000000000000000000000000000000000008B :10354000000000000000000000000000000000007B -:10355000000000000000000000000000000000006B -:10356000000000000000000000000000000000005B -:10357000000000000000000000000000000000004B +:10355000000000000000008000003D0000000000AE +:10356000303000C3C0C000000000000000000000B8 +:103570000000000000007D550A0AF0003C00000039 :10358000000000000000000000000000000000003B :10359000000000000000000000000000000000002B :1035A000000000000000000000000000000000001B :1035B000000000000000000000000000000000000B :1035C00000000000000000000000000000000000FB -:1035D00000000000000000000000000000000000EB -:1035E00000000000000000000000000000000000DB -:1035F00000000000000000000000000000000000CB +:1035D00000000000000000000000000000003C3C73 +:1035E000C3000303000F0A0A4D4DFF3C000000001A +:1035F0000000000000000000F000BFBF828200C396 :1036000000000000000000000000000000000000BA :1036100000000000000000000000000000000000AA :10362000000000000000000000000000000000009A :10363000000000000000000000000000000000008A :10364000000000000000000000000000000000007A -:10365000000000000000000000000000000000006A -:10366000000000000000000000000000000000005A -:10367000000000000000000000000000000000004A -:10368000000000000000000000000000000000003A +:103650000000000000000000000000008000000FDB +:103660003C00C3000303000F0A0A4D4DC3000000D5 +:1036700000000000000000000000F0001F1F828218 +:1036800000C3000000000000000000000000000077 :10369000000000000000000000000000000000002A :1036A000000000000000000000000000000000001A :1036B000000000000000000000000000000000000A :1036C00000000000000000000000000000000000FA -:1036D00000000000000000000000000000000000EA -:1036E00000000000000000000000000000000000DA -:1036F00000000000000000000000000000000000CA -:1037000000000000000000000000000000000000B9 -:1037100000000000000000000000000000000000A9 -:103720000000000000000000000000000000000099 +:1036D0000000000004000400880005002000042110 +:1036E0000000200004020280040005889000000011 +:1036F00000002000040020000000200088002000BE +:103700000000200020002000200020008800000091 +:103710000000000000031010000202002000200042 +:10372000200000002000040020002000880000008D +:103730000000000000000000000000002000000267 +:10374000000004022000200000002000040000000F +:103750000000040000000000400000000200000023 +:10376000000000000000000108020000100200003C +:103770000000410000000000210021900000000036 +:1037800000402100210000000000000000000000B7 +:103790000000000000000000800120018000000007 +:1037A00000000000000000004000000000002000B9 +:1037B0000000000004000000000000000000000005 +:1037C00000002002000000000000000000000000D7 +:1037D000000000000000000000050800002000209C +:1037E0008400020000100000000000004000009073 +:1037F000200000040040884100000200000000009A +:10380000000000000010001002000000000000098D +:103810000000000000000020000000040110010072 +:10382000000005401000001001050000000000002D +:1038300000040080000000C08240208000400000A2 +:103840000080004000400040004000400000004078 +:10385000004000000000004000000004808200C121 +:1038600000850008000000080008000800888000AB +:10387000002184000001000800080484000000000A +:1038800000000488000000080940008800000900CA +:1038900000080088000000400009000000820801C4 +:1038A00020000000020180900008020800000000D3 +:1038B000000000080040000000400008A040000197 +:1038C0000000004000010001000900840001000028 +:1038D0000001000900000000000000840008000052 +:1038E000000000000000000000210009400300006B +:1038F0000080000500002000200400208208000055 +:10390000002110001100000800000000000300006A +:103910000021000000000000000000040000000082 +:103920000003002100000000000000000040000033 +:1039300000000009000000000000000000100080EE +:103940000021000000000000000000000000000056 +:10395000004000000000000000000000000802001D +:10396000080008000300418441000800000010A086 +:1039700040000802080021008300A1050011058213 +:103980000000050000002090090000000008100061 +:10399000000000880000000000000000000100009E +:1039A000080000000000000000000004000000917A +:1039B00008000000000000000000000000000000FF +:1039C00000040000000000000000000000000000F3 +:1039D00000000001000000000000000000000900DD +:1039E00082000000040008000000200000008200A7 +:1039F000C0004000202100000800000000418200BB +:103A0000208000000820A005080000000000000041 +:103A10000400001100002000000000000000000071 +:103A20000000000000000000A002020000C000C072 +:103A30000002004000401040004010800040004064 +:103A40000080004000A182800040000000000000D3 +:103A500000000080000000000000000000000000E6 +:103A6000000000040090800041844000100000002D +:103A70000010008400840000050000080800100009 +:103A80000500880400000001000000000000410063 +:103A90000000808400A00500C000000800000008AD +:103AA00000A000000008000000A0000980000541FF +:103AB00000410001000100018001000180400091EF +:103AC000000100400083004000400085000000002D +:103AD0000010000000400000000000000000000096 +:103AE0000000001008008200C00000204000080014 +:103AF0008200A000840000000041C000008000009F +:103B00000041C084002000000000900000008400FC +:103B1000000004218800000090000400010008005B +:103B200008000110000082800000848482000020D0 +:103B300002000000020000000000840000000000FD +:103B40001000000020000000000000000040000005 +:103B5000000000000010000008000000000000004D +:103B6000000000000000038403000000008803043C +:103B700003840800410003C00890090003100004FA +:103B800000000000000505040304032040884000F5 +:103B900004204020C004210010000000900040904C +:103BA00080008020020000000008090000050000DD +:103BB0000001800000008000000000000000030001 +:103BC00008008000000080000000000000000001EC +:103BD00008000000000000000000000000000800D5 +:103BE0004100000000000000000200000009040085 +:103BF000001100002000002108020002408004089B +:103C0000000808210020A1400000A00000000000E2 +:103C100010800000000000200800200000000000CC +:103C20000011410000000800000000000000002119 +:103C30000000000000000200000000040204000474 +:103C400000080004000000000000004000000040E8 +:103C50000000000000000000004000000000000024 +:103C60000000000000000000000000000000000054 +:103C700089400000000000000000110000850002E3 +:103C8000800100000000000004001000000041005E +:103C900000000004000000000303C10080001100C8 +:103CA0000000089008000000000200000000000072 +:103CB0000000000000000000800000000001800102 +:103CC00000010001000100000000000000010000F0 +:103CD00008010000000000000000000100000000DA +:103CE00000000000000000000000000000C0208272 +:103CF0000040008200000000000000000001A00160 +:103D0000900000010000000001000000000004001D +:103D10000100000000000000010000000000A00001 +:103D20000000000089C02004000200830000008819 +:103D3000000288C0009000C000088800080001C18F +:103D400088000100820100C100000101880002C05A +:103D500000000102000000C000000000000000C0E0 +:103D600000000000002000000000000000000080B3 +:103D70000000000000800000000000000900200595 +:103D80008940020200210000000010000000200015 +:103D90008000030000000000000010000000080088 +:103DA00080000200000011888080098000910000DE +:103DB00000001080020000000080208000008000D1 +:103DC00009C1A1200805801000C111050809800063 +:103DD00088800000028000000080000000000000D9 +:103DE0000080000000000000000000000000000053 +:103DF00000000000000000000000000000000000C3 +:103E000091808900A0090321000500000020000026 +:103E10000010000000000000001000000000000082 +:103E200000000021000000800000000000000000F1 +:103E3000000000800320118041A10000000000006C +:103E40008000830008000900C10000801000A0006D +:103E5000C1000010000000008000000000200000F1 +:103E60008000000000100000800000000000000042 +:103E70000000000000000000002000000000000022 +:103E80000000408402000400A19100000000000036 +:103E90000090000100000000000000010000000090 +:103EA0000020004000000000008200000000000030 +:103EB0000020000000100100011001A1000000001E +:103EC0000000C000088801000100C1000088010056 +:103ED0009000C100200100000000C00000000000B0 +:103EE0000000C000000000010000C0000000000051 +:103EF00000000000A00000000800400000002000BA +:103F0000000000000000000102000001000010009D +:103F10000000000000000000900001000000000010 +:103F2000000000000000000000000000C090001031 +:103F30000090C102000010000001000020010100FB +:103F40000000000000C100010000200191C120001C +:103F50009101000000C100000000000000C020002E +:103F60000000002000C000000020000000C0000091 +:103F700000000000000000000000000080000000C1 +:103F800000000000000000090303C0201108000029 +:103F90008000000040000000000000000800000059 +:103FA00000000000000000000000000021000500EB +:103FB000210003008880000000030003001020108F +:103FC00010100003000300C100080220000589C191 +:103FD00080099010202000C1000000000000008037 +:103FE00000000000000000800000000000000080D1 +:103FF00000000000000000000002001000000000AF +:10400000000000000000000041C1404141000411D7 +:10401000001000030000000000000003000000008A +:1040200000000005000000008900034000000800B7 +:10403000004000080000000000008988854003005F +:1040400020008000001000800000C10983001000E3 +:104050004000C1902009C100090380000000000059 +:104060000000800000000000000080000000000050 +:10407000000000000000000000000001000000003F +:104080000000000000000000000001090008000816 +:10409000000000010000000000000000000100001E +:1040A00000000000000000000000080000014000C7 +:1040B000040000010000000000000000C188A00111 +:1040C000A10082000800000100080000C1212000BA +:1040D00001000000C1C1000188000101C000000012 +:1040E00000004000C000000000900000C000004040 +:1040F000000000000000000000000000008100003F +:10410000070000000000000000000000880000E040 +:1041100007006000818100E007000000884100E0A6 +:1041200007000000000000E007000000410002E07E +:1041300007000000000600E00700000A000081817F +:1041400080E0070000000006000007000000840077 +:1041500000E000000000600000E000004200880075 +:1041600000E000000000000000000000000000006F +:10417000000000000000000000000000000000003F +:10418000000000000000000000000000000000002F +:10419000000000000000000000000000000000001F +:1041A0000000000000000000000000000000FFFF11 +:1041B000FFFF0000000000000000400000000000C1 +:1041C000FFFF0000000000000000FFFF0000FFFFF5 +:1041D000000000FF0000FFFF0000F0F00000FFFF04 +:1041E00000003C3C0000AAAA0000FFFF000000FF06 +:1041F0000000FFFF0000F0F00000000000000000E1 +:1042000000000000000000000000000000000000AE +:10421000000000000000000000000000000000009E +:10422000000000000000000000000000000000008E +:10423000F0F03C3C000000000000000040000000E6 +:104240000000E8E800FF000000000000FFFF0000A1 +:104250000000000000FF000000000000F0F000007F +:10426000000000003C3C0000AAAA00000000000082 +:1042700000FF000000000000F0F00000000000005F +:1042800000002F281F1400000000000000000000A4 +:10429000000000000000BE14BE140000000000007A +:1042A000000000000000000000000000000000000E +:1042B00000000000000000000000FF005555000055 +:1042C00000000000F0F0F0F000000000FF0000002F +:1042D000FFFF0000555500003C3C0000FFFF0000C0 +:1042E000FF0000000F0F00003C3C0000FFFF00003B +:1042F000FFFF00003C3C0000AAAAFFFF00000000F6 +:10430000000000000F000F0000000000000000008F +:104310000000000000000000AFAF05050000000035 +:10432000000000000000000000000000000000008D +:104330000000000000000000000000000F0F3C3CE7 +:1043400000000000000080C0C0C000000000FF00AE +:10435000000000000000555500003C3C000000003B +:104360000000FF0000000F0F00003C3C00000000B8 +:104370000000000000003C3C0000AAAAFFFF000073 +:1043800000000000000000005028050000A0000010 +:104390000000000000000041000F800D00A000613F +:1043A000002F800D00A00065002F850D0400006126 +:1043B000000F000D00A00061000D800D20A0006125 +:1043C000502B000D01A000001060002F80050000A0 +:1043D0004573802E002D920240828001802092023F +:1043E000408280018020920240E78007802D920267 +:1043F00040828000002092024082800000208202E1 +:1044000000000000000000000000000000000000AC +:104410000000000000000000EF0369695155000032 +:10442000000000000000000000000000000000008C +:1044300000000000000000007D7DFF3C0000000047 +:104440000000000000000000000003070003FF0060 +:10445000FF00000000003C3CF0F0A000202003031F +:104460000003003000500C000F00000000000000AE +:10447000000000000000000000000000000000003C +:10448000000000000000000000000000000000002C +:1044900000000000000000000000EF030000555580 +:1044A000000000000000000000000000000000000C +:1044B000000000000000000000007D7DFF3C0000C7 +:1044C0000000000000000000000000000F0F0F0FB0 +:1044D000DF00000000000000AAAA00FFA0002020CA +:1044E00000000003003000500C000000000000003D +:1044F00000000000000000000000000000000000BC +:1045000000000000000000000000000000000000AB +:104510000000000000000000000000000B03030387 +:104520005C3C5000000000000000000000000000A3 +:10453000000000000000000000000000000000007B +:1045400000000000FFFFBEBE0000000000000000F1 +:1045500000000000F0000000000000000000000368 +:10456000004100000000000000000F000A000000F1 +:10457000000000000000000000000000000000003B +:10458000000000000000000000000000000000002B +:1045900000000000000000000000000000000F0B01 +:1045A0000F0B0C3C000000000000000000000000A9 +:1045B00000000000000000000000000000000000FB +:1045C000000000000000FFFF1414000000000000C5 +:1045D00000000000F0F000F000000000000000000B +:1045E00000030041000F0C0CAA000A0A00000A0098 +:1045F00000000000000000000000000000000000BB +:1046000000000000000000000000000000000000AA +:10461000400000004000880400000100200020004D +:10462000C000C00000002010000004002100008035 +:10463000040001002000200000000000C0008804E9 +:104640002000040000000000000400002000000022 +:104650000003000000000000000040000000000017 +:1046600000002100200000800080000000002000E9 +:1046700000050000000000000020200000000000F5 +:1046800000002000200000000000000000000000EA +:104690000004052040C0000000010000400000C0F0 +:1046A000000000080000000004000000800020C09E +:1046B0000004800004000000090005004000000024 +:1046C00000010000000000000000000100000000E8 +:1046D00000000000000000000000000000000000DA +:1046E0002000000008000000001000100000000082 +:1046F000000000C0000000000000000100000000F9 +:1047000000000000000000000000000000000000A9 +:104710000000000020000000201009100080A08090 +:10472000020404040500A040000002000000010093 +:104730000104010404000220000000054000000004 +:104740000400000500000800000000050000000053 +:10475000400000000000000002000400040000000F +:10476000000000000008000088800000040002092A +:1047700000000000000000000000000004400000F5 +:104780000000000000000000000000000009000020 +:1047900000000000000880840000800920890404D3 +:1047A0000004001100091008000141C04108000880 +:1047B00002000401028580840401000800008008D2 +:1047C0000400200000080010000000080008000895 +:1047D000000882000008000004000000000800003B +:1047E00000840000000000040000004000828008F7 +:1047F0000008000800000008000000000088800099 +:10480000000800000000008400000000000000829A +:10481000008400080000008800080403040004006D +:10482000A040000000000021840390044000A00488 +:10483000080000088400008888009121400088005A +:1048400084008800880082400005000800000011F4 +:104850000003000000000040000000008241004111 +:104860000010000800210021002100800004000940 +:104870000441010300090041004100030000002041 +:1048800000000041000000000005000000000000E2 +:10489000000000000000000000050000880080000B +:1048A00080000300008409004100000000010800AE +:1048B000080103000000200000200000100000009C +:1048C00005000000000003000000000000000000E0 +:1048D000030000000900050003000000080021A0FB +:1048E0000000000000200900032000000004000078 +:1048F0004000800004000000000000004100410072 +:104900004100000000000300000003000000000060 +:104910000000000000000000000000000000014056 +:1049200009000800820008008200A00000000000CA +:10493000820082100200080002000800000000044B +:104940008200850082008200C000A100840008006F +:1049500002000000000010118400A0000000000010 +:10496000820000000800000000000000010000417B +:104970000002A08000410021024104410441A00046 +:10498000000900000000000000000000000000001E +:104990000000000000000000000000000000009087 +:1049A00020A02000004003000500000000000800D7 +:1049B00000000000000183000000900000000800DB +:1049C00000830000200003C0000000002000000061 +:1049D00000008000030000000090000000000000C4 +:1049E00000000000000000000000000000000400C3 +:1049F000000000000010000000008000800080A087 +:104A000000000000000000000000000000000000A6 +:104A10000000000000000000000000000000000096 +:104A200020800000002000008203000000008200BF +:104A300090800000C0020808040082000000A00569 +:104A4000101000002000C0800021000000000804B9 +:104A500000000000C000090001800800840400007C +:104A60000000000000800800009100008200820029 +:104A7000408000210000400000000000040002000F +:104A8000021000000000000000080000000000000C +:104A90000005000000000000000000000000000011 +:104AA000000080200000000000000008000000005E +:104AB00000000002090008008001830005000900D1 +:104AC00000008004090080000508110002000000B9 +:104AD0000300000000000090200410020804000001 +:104AE000400000000800001003000040009010008B +:104AF00000008804000000044000028405008000DB +:104B0000800080A0000000000000090000000000FC +:104B1000030000000300000000000000000000008F +:104B200008000000820000000020102100000000AA +:104B300020004000004100400088080000000804F8 +:104B40000240400000000000000002100000C00011 +:104B50000000C00000000000200083000021880049 +:104B60000000900500000010A0000040002100009F +:104B7000C00008000000000000000000000002105B +:104B800000100010002100000000000000000000E4 +:104B900000000000000000000000000000400000D5 +:104BA0000000000000000000000000010000000004 +:104BB000000000000000000000010004800000C0B0 +:104BC00000008000000000100002000080000000D3 +:104BD000000000880000000000000000200000002D +:104BE00000000000000000000001000000010000C3 +:104BF00000000000000000000000000000000400B1 +:104C00008000000000000000000000000000020022 +:104C10000000000000000000000000000000020092 +:104C20000000000000000000020082000100C0003F +:104C30000000000000000000000001001101000160 +:104C400000C090020000004000A08805018200889A +:104C5000000100000001000008400088008820A03A +:104C6000A011000300839002000000A00000008853 +:104C70000004000000000000000002080408010019 +:104C8000004088C090020000000400000000000006 +:104C90000000000000000000000000000000000014 +:104CA0000000000000000000000080000000030081 +:104CB0008000000000000000000000001009044017 +:104CC0000020408000800300000008C1A18804C0CB +:104CD00000C0004000042008000800800000200000 +:104CE0000000009000100410000000000080000090 +:104CF000028000800000050011000000808000801C +:104D0000080000000080008000000000000000009B +:104D10000000000000000000000000000000000093 +:104D200000000000000000000000000000058000FE +:104D300000200000008900000002001000000800B0 +:104D40000800414100000000000380000000201026 +:104D500002854105000000000000000000000088FE +:104D600000028080A00003C085A0418000000000F8 +:104D700000100080000000000000000000008041E2 +:104D8000000500800080000080038000800000009B +:104D90000000000000000000000000000000000013 +:104DA00000000000000000000000000000002000E3 +:104DB00090901000880800C0000000000000828869 +:104DC000110021002101200000000001C0000000AE +:104DD0000090019001000000000000000000200091 +:104DE000A0C0408208C0080010C00802A1C0000096 +:104DF0000000000100C000000000000000000040B2 +:104E00008801400004A01082880002008204C000D3 +:104E10000000000000000090000000000000000002 +:104E20000000000000000000000000000000000082 +:104E300000909008204001200000000000000000C9 +:104E4000000000000200000020200008004000C018 +:104E500010000001000090010000010000000000AF +:104E600091880008C004048889400108C0100288A5 +:104E700000004000000000000000000100010001EF +:104E80000000201000900008000020020090001098 +:104E900088C00000000000000000000000000000CA +:104EA0000000000000000000000000000000000002 +:104EB0000000058000000000080000000000000065 +:104EC000200000002002850000000000000000809B +:104ED0002080A00021030308884100004000410019 +:104EE0004000410000008000C00041004000800000 +:104EF00080000000000000000000200000100010F2 +:104F00000008000000000000000000000080000019 +:104F1000000002800000000000000000000000000F +:104F20000000000000000000000000000000000081 +:104F300000000000000000900000000004000410C9 +:104F400003001100412121001000400080080011E1 +:104F500080008000C10983030000100800040000E5 +:104F6000000000000004800000800000000000003D +:104F700000000002000080008000000080000008A7 +:104F800000200000000080008010800000008020D1 +:104F900000030000000000000040000000000000CE +:104FA0000000000000000000000000000000000001 +:104FB0000000000000000000009100200000000040 +:104FC0000001010000000191008200080100C00002 +:104FD00040A002080200A1019100A000830000008F +:104FE000000000000000100004100240040004C093 +:104FF0004010028804010000C00004000800900076 +:1050000000000000000000001000A0210802900035 +:10501000C00088010088200000000000000000009F +:105020000000000000000000000000000000000080 +:105030000000000000000000600600E00700000A19 +:10504000000002E000004200840000E000000012C6 +:10505000884100E007000000500A00E0070000005F +:10506000000000E000000000000000E000004842F6 +:10507000820000E0000048420000600000E0000004 +:105080000082008100E007040000600000E00700EB +:105090006000008100000700000000000000070021 +:1050A0000000000000000000000000000000000000 +:1050B0000000000000000000000000000000BD240F +:1050C000F9F90000000000000000000000000000EE +:1050D00000000C0C0F00C300C0C000000000000066 +:1050E00000000000000000000000A00000A022005E +:1050F0001100280000282040040200003CFF66F058 +:10510000000000000000000000000000110000008E +:10511000E2F2E2F2000000000202030000000000E0 +:10512000000000000000000000000000000000007F +:10513000000000000000000000000000000000006F +:10514000BD246060000000000000000000000000BE +:10515000000000000C0C0F00C300C0C000010000E4 +:105160000000000000000000000000000500000535 +:1051700000220011410000411080080100003C00A5 +:1051800066F00000000000000000000000000000C9 +:105190001100E2F2E2F24242C30002020300000008 +:1051A00000000000000000000000000000000000FF +:1051B00000000000000000000000000000000000EF +:1051C00000000000000000000000000000000000DF +:1051D00000000000000000000000000000000000CF +:1051E00000000000000000000000000000000000BF +:1051F00000000000000000000000000000000000AF +:10520000000000000000000000000000000000009E +:10521000000000000000000000000000000000008E +:10522000000000000000000000000000000000007E +:10523000000000000000000000000000000000006E +:10524000000000004E4E4E4E000000000000000026 +:105250000000000000000000000000004242C3C344 +:10526000000000000000000000000000000000003E +:105270000088004400A00005010208040000A00509 +:10528000000000000000000000000000000000001E +:1052900000000000C33C00008383000000003000D9 +:1052A000F00000000000000000000000000000000E +:1052B00000000000000000000000000000000000EE +:1052C00000000000000000C33CFF000000000000E0 +:1052D000000000000000001000003C3C00FF4242C3 +:1052E000000000008000000000000000000000003E +:1052F000000088004400A000050080401020A005A8 +:1053000000000000C0C0000000000000000000001D +:1053100000000000C33C0000006083E366003C0026 +:10532000300000000000000000000000000000004D +:10533000000000000000000000000000000000006D +:105340000000000005610A2F850D00A00065000423 +:10535000000F200000400005800100011061202F97 +:10536000804D000805404A2D8000000000610007C4 +:10537000000D000060610007000D100000650003D3 +:10538000800D08000000A0614007800D2000006132 +:10539000002F000900A00065000F801D00A1100073 +:1053A00020280040000800000008000000A00000C5 +:1053B00000000000000000000000000000000000ED +:1053C000000000000000000000000000000001419B +:1053D000014100000000AA28A0A000000000000079 +:1053E000000000000000003C00FF0F0F000F000055 +:1053F00000000000000000000000000000000000AD +:10540000000000000000000000000000000000009C +:1054100000000000F0FFF0FF0000000000000000AE +:10542000000000000000000000000000000000007C +:10543000000000000000000000000000000000006C +:10544000000000000000000000000000000000005C +:10545000F141014100000000AA280000FAFAFAFA1E +:105460000000000000000000003C00000000000FF1 +:10547000000000000000000000000000000000002C +:10548000000000000000000000000000000000001C +:10549000000000000000FCFCFCFC0000000000001C +:1054A00000000000000000000000000000000000FC +:1054B00000000000000000000000000000000000EC +:1054C00000000000000000000000000000000000DC +:1054D00000000000000000000000F5F5F5F50000F8 +:1054E0000000000000000000000000000000005567 +:1054F0005050FF3CC300000000000000000000000E +:105500000000FFAFFF05F0FCA0BC000000000000A1 +:10551000000000000000000000000000000000008B +:10552000000000000000000000000000000000007B +:10553000000000000000000000000000000000006B +:10554000000000000000000000000000000000005B +:10555000000000000000000000000000C100C100C9 +:1055600000F00F0F000000000000000000000080AD +:10557000005550504D4D4D4D000000000000000002 +:1055800000000000FFAFFF05003CA0BC00000000D1 +:10559000000000000000000000000000000000000B +:1055A00000000000000000000000000000000000FB +:1055B00000000000000000000000000000000000EB +:1055C000000000000000000000000000000040009B +:1055D00000000000002020000000880000C1888832 +:1055E0000080208021800000008000800080014039 +:1055F0000000000040008400000000000000A00047 +:10560000000000000000880000000000000000030F +:105610000000000004000000000000000000000086 +:10562000000800000400000000000000000000006E +:10563000000000000000001000000000000000005A +:10564000000000000000000000000000000000005A +:1056500009000000000000A1004000200500000239 +:1056600020080008000820080900000411040004B4 +:1056700002011000000010200000000000000000E7 +:105680000000000200000000000000000000000018 +:1056900000004000000000000000000000000000CA +:1056A00000000000000000000000000000020000F8 +:1056B0000004000000000000000000000090000056 +:1056C00000000000000000000000000000000000DA +:1056D000000000000000000000100000000020108A +:1056E000200000000000000002008580000400107F +:1056F0004010200000000000000500000000000035 +:105700000004000000000000000000000000000095 +:105710000040000000000000040500100000000030 +:105720000010001000000000000000080000001041 +:105730000000004000000000000000000200000027 +:105740000010000000000000000000000000000049 +:10575000001000000008000000000008008400089D +:10576000410800100084000000000008040400014B +:105770000008800080080000000000080408008481 +:105780000084000104100010008400840400000064 +:1057900000080000000000080000000000090008E8 +:1057A00000080088000000C004C000C000C0001055 +:1057B00000C000080000000800C0001000080084BD +:1057C0000090000000000008000000000008000039 +:1057D00000000008000090000100002008400800C0 +:1057E00088100000000020002000090008050003C8 +:1057F0000000000040000021020002000205042019 +:105800000008040804218203004100000004820013 +:105810000004821000210000000040000009000583 +:105820000000000004000005002100100009000035 +:1058300000000000000000108210000000000021A5 +:10584000000000000008000000000000000000054B +:105850000005000000000000008204820001030037 +:105860001000084008000800850083002084030021 +:10587000210403A000A0050003008020890080000F +:105880000385000008000300080000000900000173 +:105890000010000900004100000000A000082108DD +:1058A000000008000000040000002100410000008A +:1058B00000000840000000A00000000000000010F0 +:1058C00000000000000000000000000000000000D8 +:1058D0000000000000000000000808008200040032 +:1058E00084008200400084008200840000000000E8 +:1058F0000000080000000080C00082000000881145 +:105900000000A100000008000000040000000800E2 +:10591000080082000000C0004000000000000000FD +:105920000000200000000000000000040900010049 +:105930000109020001000100010001008200C00015 +:105940000000000000000000000000000080008057 +:10595000000900800080008000000080000000003E +:10596000800000A000820000000000000000000095 +:10597000000000000000000000040000080000001B +:10598000200000000400000000000010800000C0A3 +:10599000008800000300000000000000000000007C +:1059A00000000000080003002000200000000200AA +:1059B0000200020080A0022002040204022000046F +:1059C000000400100004000000000000000000407F +:1059D00000401184004000400040000000400000F2 +:1059E000080008000400000800000000000508008E +:1059F000820040000021040000000000840000C17B +:105A000000A1C100011008000000000020000800F3 +:105A100000008800C000000001000000011000002C +:105A2000000000000000008000000000880001006D +:105A3000000000000004820002000000C0000040DE +:105A400000040000000420000200000000000040EC +:105A500000040000080420000000000000000040D6 +:105A600004904100000080880090080000000000C1 +:105A7000050000080040000083000800000000004E +:105A80000920002004900400040004000000908419 +:105A90008008000809082108030820840200048403 +:105AA00000000300000000000004030000000000EC +:105AB000208405A02000000100C088100010001004 +:105AC000098500010000080180008000000000003E +:105AD0000001000100000001800000000000000043 +:105AE00000010040008000000000C000C000C000B5 +:105AF000000082000800100810118200000000045D +:105B000000408200000088000004A00000000000A7 +:105B10004040000200000000000200000000C00041 +:105B200000200000000000210000001082000000A2 +:105B30000000002100001000000020020000020010 +:105B4000C0400000010010800088009001000300A8 +:105B500000C00100040010000088000000000000E8 +:105B60000040004000000020000000000000000095 +:105B70000000000000000000000000000000000025 +:105B80000000000000000000000000000000000015 +:105B900000000000030000C003000000000000003F +:105BA00000000000000000000000000000000200F3 +:105BB0000000000000002000A0000004A000001071 +:105BC0008010001105840200904000410340020053 +:105BD000820000410200000080001141000000002E +:105BE00000000001000001000000000000000000B3 +:105BF000000008000000000100000100000000019A +:105C000011010400000090C000900100022000007B +:105C10000000000000000000000000000000000084 +:105C20000000000000000000000000000000000074 +:105C3000000000000000000010C00100010000880A +:105C400000C000040000000010C100000100008836 +:105C500000C000040000000010C1400001010088E5 +:105C600000C000040000000002000000000000006E +:105C700000004000800000002041002104000020BE +:105C800003102140C1110009C080000008008000FD +:105C900000000000050000000800000040000000B7 +:105CA00000000000400000000000000000000200B2 +:105CB0000000000000004000000080800300080099 +:105CC00000800080008000000000C0C1110320009F +:105CD00000830080008000000000C0C10005200398 +:105CE0000083008000800000000000000000000031 +:105CF0000000000000000000000020000000100074 +:105D000041001002030020404083000500210000F4 +:105D10008000000000000000000000000000000003 +:105D20000000000000000000000000000000000073 +:105D300080000080000000000000000009800000DA +:105D40000509C10000000000000080000980030078 +:105D50000009C10000000000000080000980400030 +:105D60000009C103800000000000800000000090D6 +:105D700000000020000000000000000000200000E3 +:105D80000100010001910100000000054000040035 +:105D90008400C000000000000000000000000000BF +:105DA000000400000000000000000090000020003F +:105DB0009000840040080000000000000000014046 +:105DC00000000101C140000000000000C0000140CF +:105DD00000000001C100000000000000C000014000 +:105DE00000000001C101040000000000C00000002C +:105DF00000000200000000000000000000000000A1 +:105E000001000000000100011100090100004040F4 +:105E10000002002000C0000000000000010000009F +:105E20000000000000000000200000000000000052 +:105E30000000000000000100000000000000000061 +:105E400000000000000000C100000010000000C0C1 +:105E500000000000000000C100000010000000C0B1 +:105E600000000000000000C100020000000000C0AF +:105E70000000000080000000001100200008001059 +:105E800000200205000800414021080508212040AB +:105E9000000000000000008003000000000040003F +:105EA00000000000000009000000000000000000E9 +:105EB00000000000000000000800000000000000DA +:105EC000400000110000000900C100000080000037 +:105ED000008000030500000900C1000000800000F0 +:105EE000008000110040000900C100800000000097 +:105EF00000800040002100000000000000000000C1 +:105F000000004182400005000000028004101100E2 +:105F1000021180020040000000000010002100007B +:105F200000008000800400008000000000400000AD +:105F30000000000000080000000000000000000059 +:105F40000000000041098009408009038000000032 +:105F500000808000C109800905800903800080005D +:105F600000800000C10980090080090380008000D2 +:105F70000000000000000000000000000000000021 +:105F800000000000010500000000000000400001CA +:105F900000000001C0010009821090000001000013 +:105FA000000000000400020100009000000000005A +:105FB0000000000000000000004000880000000019 +:105FC0000000000000000101900100400101C0003C +:105FD000000000080400C101900100400101C00060 +:105FE000020000080000C101900100400101C00052 +:105FF0000200000000000041000007000000000057 +:10600000000000000000810000E0000000006006C9 +:1060100000E007000000008100E007010000000030 +:1060200000E007000000880000E0070000006000BA +:1060300002E0070000000000810000E00000000016 +:10604000000000E000000000600000E00000000030 +:106050000000000000000000880000E000000000D8 +:106060000000000000000000880000E000000000C8 +:106070000000000000000000000000000000000020 +:106080000000000000000000000000000000000010 +:1060900000000000000000000000000000C3FEFE41 +:1060A0000000000000000000287DFFFF000000004D +:1060B00000000000000000000000000000000000E0 +:1060C0000000000000000000000000FF00FF0000D2 +:1060D000AAAA00003C3C0000F0F0000000FF000015 +:1060E000AAAA000000FF0000F0F0000000FF00007E +:1060F000AAAA000000FF00003C3C000000000000D5 +:10610000000000000000000000000000000000008F +:10611000000000000000000000003C3CF0F000C364 +:106120003E3E0000000000000000287DFFFF000050 +:10613000000000000000000000000000000000005F +:1061400000000000000000000000000000FF00FF51 +:106150000000AAAA00003C3C0000F0F0000000FF94 +:106160000000AAAA000000FF0000F0F0000000FFFD +:106170000000AAAA000000FF00003C3C0000000054 +:10618000000000000000000000000000000000000F +:1061900000000000000000000000000000000000FF +:1061A0004141FFFC00000000000000000000000072 +:1061B00000000000000000000000000000000000DF +:1061C0000000A0F5414100000000000000003C3C40 +:1061D0000000FFFF0000FF000000FFFF00003C3C4C +:1061E0000000FFFF0000FF000000FFFF00003C3C3C +:1061F0000000FFFF0000FF000000C3C3FFFF00001E +:10620000000000000000000000000000000000008E +:1062100000000000000000000000000000003C3C06 +:10622000FF0041413F3C0000000000000000000072 +:10623000000000000000000000000000000000005E +:1062400000000000A0F5EBEB0000000000000000E3 +:106250003C3C000000000000FF00000000000000C7 +:106260003C3C000000000000FF00000000000000B7 +:106270003C3C000000000000FF000000C3C3FFFF23 +:1062800000000A28050000A000610006000D0000C3 +:1062900000000001800000000571002F800D00004B +:1062A0001061202F004D04080561000F000D000053 +:1062B0000061000F800D20000061000F800D00A024 +:1062C000000000610007800D200000610007000D44 +:1062D0000000404280058020920240828000002021 +:1062E0009202408280018020920240828000002041 +:1062F0009202408280018020920240828000002031 +:1063000082020000000000000000000000003030A9 +:106310003F3FAA000A0A00C3C0C00151A1F1050015 +:1063200045400000000000000000000000000000E8 +:10633000000000000000000000000000000000005D +:10634000000000000000000000000000000000004D +:106350000000000005050C0C3C3C00FF00000000A4 +:106360000000000005050C0C3C3C003C0000000057 +:106370000000000055553C3C303000F000000000AB +:10638000000000000000000000000000000000000D +:106390000AFA0AFAAA000A0A00C3C0C00B5BABFBE8 +:1063A00055504540000000000000000000000000C3 +:1063B00000000000000000000000000000000000DD +:1063C00000000000000000000000000000000000CD +:1063D00000000000000005050C0C0000000000009B +:1063E00000000000000005050C0C0000003C00004F +:1063F00000000000000000000000303000F000004D +:10640000000000000000000000000000000000008C +:10641000000000000000003C0055C3C300C3A0A062 +:10642000C0CF4141CF0C0000000000000000000080 +:10643000000000000000000000000000000000005C +:10644000000000000000000000000000000000004C +:1064500000000000000000000000000000AA003C56 +:1064600000000000000000003C005500A0A03030FB +:1064700000000000000000000C0C0F00A0A0303055 +:10648000000000000000000000000000000000000C +:106490000000000000000000003C0055000000C3A8 +:1064A000AFAFC0CF7D7DCF0C00000000000000002A +:1064B00000000000000000000000000000000000DC +:1064C00000000000000000000000000000000000CC +:1064D000000000000000000000000000000000AA12 +:1064E000003C00000000000000003C005500A0A09F +:1064F000303000000000000000000C0C0F00A0A0D5 +:10650000303000000000000000008800000004009F +:106510008800200800000000100220000000000099 +:10652000200004080000000000000000000000003F +:1065300020004000000000000000000000000000FB +:106540002000000200000400001000030000000012 +:106550000000000000000000000000080000000033 +:106560000000200000000000000000040000000007 +:1065700000400000000000000000000000000000DB +:10658000000000000100000000800000000000008A +:1065900000000000000000001000000000000000EB +:1065A00000000000000040000000000000000000AB +:1065B000000000000000400000000000000000009B +:1065C000000000C0200010000000000000000000DB +:1065D00000000000000000000000000000000000BB +:1065E000000000000000000000400000000000006B +:1065F000000000010000000000000000000000009A +:106600000000000000004000000000080000000042 +:10661000040000000205000000000010021000004D +:106620000800000000002000000000000000000042 +:106630000000000000084000900000000000000082 +:10664000000000000000200000000000000000002A +:10665000020002000200020002000200020002002A +:106660000000000000000800100000000000000012 +:106670000000000000000200000000000000000018 +:10668000000000000000000000800000000000008A +:1066900000880500000004000084040000000004DD +:1066A00000000008008800080084000000000010BE +:1066B0000400000000000000890804000000000839 +:1066C00040000484000000080004040000000004EE +:1066D00000000000000000000004001000000400A2 +:1066E000008804000000000000840000000000009A +:1066F0000000000000000000000800000000000092 +:10670000001000000000000000080002000000A0CF +:106710000000000000108800C00000000000000021 +:106720000008000000000800C01000030800080076 +:106730008200080088000400820008030000004175 +:10674000C000080482008200000084210000820052 +:1067500082000000000300030000400000048400E9 +:106760000000000000000000020021000000000006 +:1067700000000000000900110000001000000004EB +:1067800000040009000000000000004100000000BB +:1067900000000000000003000800000008000000E6 +:1067A000000003000000000003000384000000005C +:1067B0000900400000A00090000000000000000060 +:1067C00000880000000140000000000003000000FD +:1067D00000000000000000000000000000000801B0 +:1067E0000000000000000000000080002000000801 +:1067F0000000000000000000000000000000000099 +:106800000000000000000000000000000000000088 +:1068100000000000000000000004821108000000D9 +:106820000000000004001000000000000400080048 +:1068300000000000000000002000080000004000F0 +:106840000000040005000000100910000000000016 +:1068500000000000000000004000820082000000F4 +:106860000000000000000009210000008500200059 +:106870004000C000C0000000000000000000000058 +:106880000000000000000000000000000000000008 +:1068900000000000000000000000000000000000F8 +:1068A00000000000000021000000000000002000A7 +:1068B0000000000041000000000000000000000097 +:1068C0000000000000002000000000000000410067 +:1068D00000000004000000000000000000000000B4 +:1068E00000000000000000002100900000001000E7 +:1068F0008000020000000000000000000000000016 +:1069000000000000000000000000000000880000FF +:106910000000000000000000000000000000000077 +:106920000000100000000000000010000000000047 +:10693000C000000000000000000082000000000015 +:106940000010820000000000000000210000000094 +:1069500000400000000000000000000000000000F7 +:106960000000080020038400000004200000100044 +:10697000200010080011A00000410011000090004C +:106980000000821100000000000000000041000033 +:1069900000000800000000000008000021040000C2 +:1069A00000000000080000000000000000000800D7 +:1069B000000000000000200000A041840500090044 +:1069C000080008880300000000000800000009001B +:1069D00000000000000000001000000000000204A1 +:1069E0000000000000088000050000008001000099 +:1069F00080008000801000000000080000000000FF +:106A00000000000000000000000000000000000086 +:106A10000000000000000000000000010000000075 +:106A2000000000000800000000000000000000005E +:106A3000000000000000000000000000000800004E +:106A400000000000084100000000000000000000FD +:106A500000800000010000000000000000000000B5 +:106A600000000000000008000000000000004000DE +:106A70001000200000000000C00040054008000099 +:106A8000A000000400000000000000000000000062 +:106A900000000041000000110000000000000000A4 +:106AA00000000000000000000000000000000000E6 +:106AB00000000000000000000000000000000000D6 +:106AC00000000000040004000000000000000000BE +:106AD00000000040009004000000000000000000E2 +:106AE00000000000000000000000000000000000A6 +:106AF0000000800080000000000000000000000096 +:106B00000000000000000000000000000000000085 +:106B10000000000000000000000000000000000075 +:106B20000000000000000000000000000000000065 +:106B30000000000000000000000000000000000055 +:106B40000000000000000000000000000000000144 +:106B50000000010000000100000000000000000033 +:106B60000000000000000000000000000000000025 +:106B7000000000009003008200A0A0C0100200846A +:106B800000A0108440A000040082908290040008BD +:106B9000000290040000000000000000010100005D +:106BA00000000001000000000000000000000000E4 +:106BB00000000000000000000000000000000000D5 +:106BC000000000000000000000000000200200049F +:106BD0004108000302000000050000000000000062 +:106BE00000000000000000000000000000000000A5 +:106BF00000000800000083410008090300038580AD +:106C00000000000000002000008000000000008064 +:106C100000000080000000000000000000001141A2 +:106C20000021000300080000000000000000000038 +:106C30000000000000000000000000000000000054 +:106C40000000000000000000000000000000000044 +:106C500000000000000080108000000000800000A4 +:106C60000000000000000000000000000000000024 +:106C700000410000000000804000C088408041804A +:106C80000000008300800080800000A100000080E0 +:106C900000008090800000800000000000000000E4 +:106CA00000110000000000000000000000000000D3 +:106CB00000000000000000000000000000000000D4 +:106CC00000000000000000000000000000000000C4 +:106CD0000000000000000000900120000000C00241 +:106CE00000000000000000000000000000000000A4 +:106CF00000000001000000000004844008C12010D2 +:106D000085C08400C0C0044088C00200C0C040905C +:106D1000A0C0020008C1104088C0000000000000B0 +:106D20000000000000000000000000000000000063 +:106D30000000000000000000000000000000000053 +:106D40000000000000000000000000000000000043 +:106D50000000000000000100000000000000000032 +:106D60000000000000000000000000000000000023 +:106D700000000000000000000000000011A00189D8 +:106D8000C0058809111000C0C0C0C00291820082F5 +:106D9000C02002C0A1040004C00408880000000054 +:106DA00000000000000000000100000000000000E2 +:106DB00000000000000000000000000000000000D3 +:106DC00000000000000000000000000000000000C3 +:106DD000000000000000110002000500000000009B +:106DE00000000000000000000000000000000000A3 +:106DF0000000000000000000000000000000C14092 +:106E00000410C105204141800000800000004100C5 +:106E10000000800080004100000080008000000031 +:106E20000000000000000000000002000000000060 +:106E30000000000000000000000000000000000052 +:106E40000000000000000000000000000000000042 +:106E50000000000000000000000000000000001022 +:106E6000000800000000000000000000000000001A +:106E700000000000000000000020000800000000EA +:106E80004102101100800500000080000000000099 +:106E90000000000080000000000000000000000072 +:106EA00000000000000000000000000000000000E2 +:106EB00000000000000000000000000000000000D2 +:106EC00000000000000000000000000000000000C2 +:106ED00000000000000000000000000000000000B2 +:106EE0000001000100A00000000000000000000000 +:106EF0000000000000000000000000000000000092 +:106F000000000501030582820400040002028402DD +:106F100004002000A08404C040004000A008A00895 +:106F2000C0000000000000000000000000000000A1 +:106F30000000000000000000000000000000000051 +:106F40000000000000000000000000000000000041 +:106F500000000000000000000000000000E0000051 +:106F60000000810000E007000000000000000000B9 +:106F7000000000000000000000000000008100E0B0 +:106F800007046000880040E0000048420000000064 +:106F900000004842000000000000484200000000DD +:106FA000000048420000000000000000000000E077 +:106FB00000000000000000000000000000000000D1 +:106FC00000000000000000000000000000000000C1 +:106FD00000000000000000000000000000000000B1 +:106FE00000000000000000000000000000000000A1 +:106FF0000000000000000000000000000000000091 +:1070000000000000000020401080A00500002004C7 +:107010001008A00000A02010040828410000A000D3 +:1070200000A0201004080000000000000000000084 +:107030000000000000000000000000000000000050 +:107040000000000000000000000000000000000040 +:107050000000000000000000000000000000000030 +:107060000000000000000000000000000000000020 +:107070000000000000000000000000000000000010 +:107080000000000000000000040208010000A0054C +:1070900040028001050000054080020100002841F7 +:1070A0000500000540800201000000000000000013 +:1070B00000000000000000000000000000000000D0 +:1070C00000000000000000000000000000000000C0 +:1070D00000000000000000000000000000000000B0 +:1070E00000000000000000000000000000000000A0 +:1070F0000000000000000000000000000000000090 +:10710000000000000000000000000000000000007F +:10711000000000000000000000000000000000006F +:10712000000000000000000000000000000000005F +:10713000000000000000000000000000000000004F +:10714000000000000000000000000000000000003F +:10715000000000000000000000000000000000002F +:107160000000000000000000000000000000FFFF21 +:10717000FFFF000000000000000000000000000011 +:1071800000000000000000000000000005000005F5 +:107190000000884410082004008200141020080415 +:1071A00000880044010802040500000500000000FA +:1071B00000000000000000000000000000000000CF +:1071C00000000000000000000000000000000000BF +:1071D00000000000000000000000000000000000AF +:1071E000000000000000000000000000000000009F +:1071F0000F0F3C3C000000000000000000000000F9 +:107200000000000000000000000000000000A000DE +:1072100000A08844000080014002820014008040E9 +:1072200001028800440080104020A00000A000005F +:10723000000000000000000000000000000000004E +:10724000000000000000000000000000000000003E +:10725000000000000000000000000000000000002E +:1072600000000000000000610007000D0000006544 +:10727000000F800D00010000000000000000000071 +:1072800000000000000000000061002F000D00A0C1 +:1072900060000001800010000000000000000800F5 +:1072A0006000000000001000000000000000080066 +:1072B000000000000000000000610006000D00005A +:1072C00000000000000000000000000000000000BE +:1072D00000000000000000000000000000000000AE +:1072E000000000000000000000000000000000009E +:1072F000000000000000000000000000000000008E +:10730000000000000000000000000000000000007D +:1073100000002828AA00C0C000C300000000000030 +:10732000000000000000000000000000000000005D +:10733000000000000000000000000000000000004D +:10734000000000000000000000000000000000003D +:10735000000000000000000000000000000000002D +:10736000000000000000000000000000000000001D +:10737000000000000000000000000000000000000D +:1073800000000000000000000000000000000000FD +:10739000000000002828AA00C0C000C300000000B0 +:1073A00000000000000000000000000000000000DD +:1073B00000000000000000000000000000000000CD +:1073C00000000000000000000000000000000000BD +:1073D00000000000000000000000000000000000AD +:1073E000000000000000000000000000823082F376 +:1073F000000000000000000000000000000000008D +:10740000000000000000000000000000000000007C +:107410000000000000000000FFFF00C3C0C000002B +:10742000000000000000000000000000000000005C +:1074300000000000000000000000000000000F0F2E +:10744000FC0C000000000000000000000000000034 +:10745000000000000000000000000000000000002C +:107460000000000000000000000000000000BE302E +:10747000BEF300000000000000000000000000005B +:1074800000000000000000000000000000000000FC +:107490000000000000000000FF002D2D00C3C0C050 +:1074A00000000000000000000000000000000000DC +:1074B00000000000000000000000000000000000CC +:1074C0000000FC0C00000000000020000000000490 +:1074D0000000000000000005000000000000841013 +:1074E0000000000200004000000000000004000056 +:1074F000000000000000C0000000000000000000CC +:107500000000000000000000000300000000000078 +:10751000000000000010000000000000000000005B +:10752000000000000000000000000000000000005B +:10753000000000C00080008000100000000000007B +:1075400000000000000000000000000000004000FB +:1075500009400000000000000000000000000000E2 +:107560001000000000000000410000020000009038 +:1075700000000002000200020000410000000000C4 +:1075800000000000000000200000000000000000DB +:1075900000000000000000000000000000001000DB +:1075A00000000000000000000000000000000000DB +:1075B0000000000000210010004000010000000059 +:1075C00000000000000000000000000000000200B9 +:1075D0000000200002000400001000000000000075 +:1075E0000000840000000000000002000002020011 +:1075F0000000000004000000000000100300000074 +:10760000001000000000000000000010000000005A +:107610000000000000000200000000000008000060 +:107620000000820084000000000000100000022121 +:107630000000000000000500010003100800000029 +:107640000000000000000000000000100000040026 +:107650000000000000000000001000000000000812 +:1076600000000200050800400000040800080001B6 +:107670000000050000080000000000000000088471 +:1076800000000000001004000000000800080000D6 +:1076900004000000000000100400000000000000D2 +:1076A00000000000000000000000000000080008CA +:1076B00000000400000000008200088884008008A8 +:1076C00000000000000000000000000000080008AA +:1076D0000000000000000008000000000009900009 +:1076E00000000000C00008000000080000000810B2 +:1076F00001800000A0000000000000000000000069 +:107700004000000000000000000000000000000039 +:1077100000000003880000000000000000080000D6 +:107720000000000000000000000000000000000059 +:107730000000000000000000000000000000202009 +:107740000004000000000000000000000000000035 +:107750000000000000000000000000000000000029 +:107760000000000000000000000010000000000009 +:1077700000004002000000000000000000000000C7 +:1077800000000400000000000000000000000000F5 +:1077900000000000000009000000000000000000E0 +:1077A000100008000000000000000000040041007C +:1077B00005A0000000020000000200000000000020 +:1077C00000010000000000000000000000000000B8 +:1077D000000000000000000000000800000004405D +:1077E000000008000000000000008200A00000006F +:1077F00000000000000008000000000082000000FF +:1078000000000000000000000100890000000000EE +:107810000000000000001000000500000000000053 +:1078200000400000000400000000000000004000D4 +:107830000000000000000000000000000000000048 +:1078400000410000000000000000000400000000F3 +:107850000000000000000000000000000000000028 +:107860000000000000100000000000000000000008 +:1078700000000000030000002100200000000000C4 +:1078800000000000000000000000020004000000F2 +:1078900000000010000000000000000000000000D8 +:1078A00000000208000000000000000000000000CE +:1078B0000000000000000040000000000000000088 +:1078C00000000000000000000000000000000000B8 +:1078D00000000000000000000800000000000000A0 +:1078E000000000000000C0000000000000000000D8 +:1078F00000000800000000000180000000000000FF +:107900000000000000000000000000000000000077 +:107910000000000000000000000000000000000067 +:107920000000000000000000001000000000040043 +:107930000000000000000000000000000000000047 +:107940000000000000000000000000000000000037 +:10795000000000000000000000000000090000001E +:107960000000000000000000000000000000000017 +:1079700000000000100000000000400202000000B3 +:107980000000000000000000008440000000001023 +:1079900008000000000000000000000000000000DF +:1079A000000000000000000000000000032009208B +:1079B0000084000004000000000000A0000040045B +:1079C00021004000030400001100400400000000FA +:1079D0000000000000820000000000000000000025 +:1079E000000000000000000000000000080000008F +:1079F00000000000000082001000000001000000F4 +:107A00000000000000000000000000000000000076 +:107A10000000000200000021000000000000000043 +:107A2000000000000000000000080000000000004E +:107A300000000000000000000000400200004000C4 +:107A40000000000000000000000000000000000036 +:107A50000000000000000000000000000000000026 +:107A60000000000000000000000000000000000016 +:107A70000000000000000000000000004000400086 +:107A800000000000000000000000000000000000F6 +:107A900000000000000000000000000040000000A6 +:107AA00000000000000003000000000800000000CB +:107AB00000000000000000000000000000000000C6 +:107AC00000000000000000000000000000000000B6 +:107AD00000000000000000000000000000000000A6 +:107AE0000000000000000000000000000000000096 +:107AF0000000000000000000000000000000000086 +:107B00000000000100010000000000000000000073 +:107B10000000000000000000000000000000000065 +:107B20000000000000000000000000000000000055 +:107B30000000000000000000000000000000000045 +:107B40000000000000000000000088040020000881 +:107B50000090000000000000000000000000000095 +:107B60000000000000000000000000000000000015 +:107B70000000000000000000000000000000000005 +:107B80000000000300200020004000000000000072 +:107B900000000800000000000000000000000000DD +:107BA00000000000000000000000000000000000D5 +:107BB00000000000000000000000000000000000C5 +:107BC000000000000000000000000000A080000095 +:107BD00000000000000000000000000000000000A5 +:107BE0000000000000000000000000000000000095 +:107BF0000000000000000000000000000000000085 +:107C00000000000000000000000000000000000074 +:107C10000000000000000040000000000000000024 +:107C20000000000000000000000000000000000054 +:107C30000000000000000000000000000000000044 +:107C400000000000000000000000000000008000B4 +:107C500000000080000000000000000000000000A4 +:107C60000000000000000000000000000000000014 +:107C70000000000000000000000000000000000004 +:107C800000000000000000000000000000000000F4 +:107C900000000000000000000000000400C0000020 +:107CA00000000000000000000000000000000000D4 +:107CB00000000000000000000000000000000000C4 +:107CC00000000000000000000000000000000000B4 +:107CD0000400200010889000000000000000000058 +:107CE0000000000000000000000000000000000094 +:107CF0000000000000000000000000000000000084 +:107D00000000000000000000000000000100000072 +:107D10000000000000000000000000000000000063 +:107D20000000000000000000000000000000000053 +:107D30000000000000000000000000000000000043 +:107D40000000000000000000000000000000000033 +:107D5000000090000088009020C00000000000009B +:107D60000000000000000000000000000000000013 +:107D70000000000000000000000000000000000003 +:107D800000000000000000000000000005000200EC +:107D900000000000000000000000000000000000E3 +:107DA00000000000000000000000000000000000D3 +:107DB00000000000000000000000000000000000C3 +:107DC00000000000000000000000000000000000B3 +:107DD0000000000000000080008000800000000023 +:107DE0000000000000000000000000000000000093 +:107DF0000000000000000000000000000000000083 +:107E00000000000000000000000000000000000072 +:107E100000000000000000000000000080000009D9 +:107E20000000000000000000000000000000000052 +:107E30000000000000000000000000000000000042 +:107E40000000000000000000000000000000000032 +:107E5000000000000000801180048000000000008D +:107E60000000000000000000000000000000000012 +:107E70000000000000000000000000000000000002 +:107E800000000000000000000000000000000000F2 +:107E90000000000000000000000000000000C00022 +:107EA000A00088004000000000000000000000006A +:107EB00000000000000000000000000000000000C2 +:107EC00000000000000000000000000000000000B2 +:107ED0000000000000000000C001A00840200000D9 +:107EE0000000000000000000000000000000000092 +:107EF0000000000000000000000000000000000082 +:107F00000000000000000000000000000000000071 +:107F10000000000000000000000000000000000061 +:107F20000041000007000000000000000000000009 +:107F30000000000000000000000000000000000041 +:107F40000000000000000000000000000000000031 +:107F500000000000000000000000004100000700D9 +:107F60000000000000000000000000000000000011 +:107F70000000000000000000000000000000000001 +:107F800000000000000000000000000000000000F1 +:107F900000000000000000000000000000000000E1 +:107FA0000000BEBEA0F500000000000000000000C0 +:107FB00000000000000000000000000000000000C1 +:107FC00000000000000000000000000000000000B1 +:107FD0000000000000000000000000000055005AF2 +:107FE0005050A05000000000000000000000000001 +:107FF0000000000000000000000000000000000081 +:108000000000000000000000000000000000000070 +:108010000000000000000000000000000000000060 +:10802000000000001414A0F5000000000000000093 +:108030000000000000000000000000000000000040 +:108040000000000000000000000000000000000030 +:1080500000000000000000000000000000000055CB +:10806000005A5050A0500000000000000000000026 +:108070000000000000000000000000000000000000 +:1080800000000000000000000000000000000000F0 +:1080900000000000000000000000000000000000E0 +:1080A00000000000000000000000000000000000D0 +:1080B00000000000000000000000000000000000C0 +:1080C00000000000000000000000000000000000B0 +:1080D00000000000000000000000000000000000A0 +:1080E0000000000000AA00AA00000000000000003C +:1080F0000000000000000000000000000000000080 +:10810000000000000000000000000000000000006F +:10811000000000000000000000000000000000005F +:10812000000000000000000000000000000000004F +:10813000000000000000000000000000000000003F +:10814000000000000000000000000000000000002F +:10815000000000000000000000000000000000001F +:108160000000F0D0F0F0008A00AA0000000000003B +:1081700000000000000000000000000000000000FF +:1081800000000000000000000000000000000000EF +:108190000000000000000000000000610006000D6B +:1081A00000000000000000000000A0000028000007 +:1081B00001A000000000000000000000000000001E +:1081C00000000000000000000000000000000000AF +:1081D000000000000000000000000000000000009F +:1081E0000000000010000028004000010000000016 +:1081F000000000000000000000000000000000007F +:10820000000000000000000000000000000000006E +:10821000000000000000000000000000000000005E +:10822000000000000000000000000000000000004E +:10823000000000000000000000000000000000003E +:10824000000000000000000000000000000000002E +:10825000000000000000000000000000000000001E +:10826000000000000000000000000000000000000E +:1082700000000000000000000000000000000000FE +:1082800000000000000000000000000000000000EE +:1082900000000000000000000000000000000000DE +:1082A00000000000000000000000000000000000CE +:1082B00000000000000000000000000000000000BE +:1082C00000000000000000000000000000000000AE +:1082D000000000000000000000000000000000009E +:1082E000000000000000000000000000000000008E +:1082F000000000000000000000000000000000007E +:10830000000000000000000000000000000000006D +:10831000000000000000000000000000000000005D +:10832000100000000000000000000000000000003D +:10833000000000000000000000000000000000003D +:10834000000000000000000000000000000000002D +:10835000000000000000000000000000000000001D +:10836000000000000000000000000000000000000D +:1083700000000000000000000000000000000000FD +:1083800000000000000000000000000000000000ED +:1083900000000000000000000000000000000000DD +:1083A00000000000000000000000000000000000CD +:1083B00000000000000000000000000000000000BD +:1083C00000000000000000000000000000000000AD +:1083D000000000000000000000000000000000009D +:1083E000000000000000000000000000000000008D +:1083F000000000000000000000000000000000007D +:1084000000000000000004000080040000000000E4 +:10841000000000000000000000000000010001005A +:10842000000000080100030003000200000000003B +:1084300000000000880000000000000000000000B4 +:10844000000000000003C0000000000020020088BF +:108450000000018040020000000000002009000030 +:10846000000000000000000000000000000000000C +:1084700000000000000400000000000000000000F8 +:10848000000000000000410080000020800000008B +:108490004000000000000000000000000000040098 +:1084A0000400000000000400A000A0008000000004 +:1084B000000040000000000000000000000000007C +:1084C000000000000000000000000000000080012B +:1084D0000003000040088000000000000000800051 +:1084E00000000000000000000000000000A00000EC +:1084F000000000000000000000000000000000007C +:1085000000000000000000000140020001000440E3 +:108510000400044002000400020002000000020007 +:10852000040004200000000021400040010421005C +:108530000200000000000000000002000000000037 +:108540000000000000000000000000000200020027 +:108550000200000004020002000000000000000011 +:108560000000020000000400000000000000000005 +:1085700000000000000000000000000000000000FB +:10858000000000000000000000000400840004401F +:108590000088000000000000000000000400000847 +:1085A000041080000001000000048200200004018B +:1085B00084000000000002000000040000000088A9 +:1085C000000000000000020000080000000004009D +:1085D0000000000000000001000100000000000099 +:1085E000000000000000000000000004040009007A +:1085F00000000000000000000000000000900000EB +:1086000000000000009000000000000000000400D6 +:10861000000000000000000000000000000000005A +:10862000000000000000000000001000000000003A +:108630000000010000000000000000000000C00079 +:10864000000000000000000000000000000000002A +:108650000200000004000000000010000000000004 +:10866000C0000000000090000000000000000000BA +:108670000000000000000000881190009000000041 +:1086800000000000000000000000000000000000EA +:10869000800000000000000000000000000000005A +:1086A00000000000030000000000000000000000C7 +:1086B0000000000020004100000000000000000059 +:1086C00000000000000000000000000000000000AA +:1086D000000080000000800000000000000000009A +:1086E0000000000009000000000000000000000081 +:1086F000080003000000030000900000009000004C +:108700000000002000000000000000000000000049 +:108710000000080008000800000000000000004001 +:108720000000820082000800A0000000000000009D +:1087300021000104010008090000000040000000C1 +:108740000400C000000082000000000040000000A3 +:108750000000000082000000000000000000000097 +:108760000000000002000000020000000000000005 +:1087700000000000000000000840000000000000B1 +:1087800000000000000000000000000000000000E9 +:1087900000002100000000000000000000000000B8 +:1087A00000000000000000000000000000001100B8 +:1087B00000008400040102000000000040000000EE +:1087C0000000800000000000000000000400000025 +:1087D00000000000050008002188080000002100BA +:1087E000030021000008000000000000000800A0B5 +:1087F0000000000000000000000000000000000079 +:108800000000000000000000000003000000000065 +:108810000000000001000000000000000000000057 +:1088200000000000A000080008000000C0000000D8 +:108830000000C000000084000000000000400000B4 +:108840001000000000000000000000000000000018 +:10885000000004000000A0008200000000000003EF +:1088600000008400C000000082000004000400003A +:1088700000000000000000000000000000000000F8 +:1088800000000000000000000000000000000000E8 +:1088900000000000000004000000000000000000D4 +:1088A00000000000000200000000000000000000C6 +:1088B00000000000000000000000000000000000B8 +:1088C0000000000000000000000000000084000024 +:1088D0000000000080000000050000000000000013 +:1088E000000000000000000008000000000000017F +:1088F0000000000000000000000000000000000078 +:1089000000000000099008000000000000000000C6 +:108910000000000000000000000000000000000057 +:108920000800000000000000080000000000000037 +:108930000000C00000000000000000000000000077 +:1089400000000000000000000000C0000000000067 +:1089500004000000900000020000840008410800AC +:10896000080040000000000000000000004000007F +:1089700000400000000000000000000000000000B7 +:1089800000000000000000000000000000000000E7 +:1089900008000000000000000000000000000000CF +:1089A00000000000000000000000000000000000C7 +:1089B0000000000000000000000000000000410076 +:1089C0001100000000000000000000000000000096 +:1089D00000000000008400000000000000200000F3 +:1089E000000003008000000021000582000000025A +:1089F0000000000000000000000000000000000077 +:108A00000000000000000000000000000000000066 +:108A10000000000000000000000021000000000035 +:108A20000000000000000000000000000000000046 +:108A300000000000000000000000000008C040200E +:108A4000004082080000000000000000000000005C +:108A50000000000000000400000000000000000012 +:108A600001001000000000010000410000000000B3 +:108A700000000000000000000000000000000000F6 +:108A800000000000000000000000000000000000E6 +:108A900000000000000000000000000000000000D6 +:108AA00000000000000000000000000000000000C6 +:108AB0000000000000000800000000000000088026 +:108AC0000080110000000000000000000000000015 +:108AD0000000000000000000800000000000000016 +:108AE00020004100850000000541412040100009A0 +:108AF0000000000003000000000000000000000073 +:108B00000000000000000000000000000000000065 +:108B10000000000000000000000000000000000055 +:108B20000000000000008080000000000000000045 +:108B30000000000000000000000000000000000035 +:108B40000020802100908000000000000000000054 +:108B50000000000000000000000000000000008095 +:108B6000000000000000800000002000210005102F +:108B7000418900000000000000000000000000002B +:108B800000000000000000000000000000000000E5 +:108B900000000000000000000000000000000000D5 +:108BA000000020008490840090020000000000007B +:108BB0000000000000000000000000000090000025 +:108BC0000000080004000083C00000000000000056 +:108BD0000000000000000000000000000000000095 +:108BE0000082000040000000020000000088010038 +:108BF000010101A0000000000000000000000000D2 +:108C00000000000000000000000000000000000064 +:108C10000000000000000000000000000000000054 +:108C20000000000000000000200000000000000024 +:108C30000000000000000000000000000100000033 +:108C40000000000000000200000200C00000000060 +:108C50000000000000000000000000000000000014 +:108C60000000000000000000000100010001000100 +:108C700000010000000100000000000000000000F2 +:108C800000000000000000000000000000000000E4 +:108C900000000000000000000000000000000000D4 +:108CA00000000000000008000000000010000000AC +:108CB00000000000000000000000000000000800AC +:108CC0000000000000000000800000800380000021 +:108CD0000000000000000300000000000000000091 +:108CE0000000000000000000004000100020031100 +:108CF00000080908412100100500000000000300E1 +:108D00000000000000000000000000000000000063 +:108D10000000000000000000000000000000000053 +:108D20000000000000000000000500C0000000007E +:108D30000000000000000000000000000000000033 +:108D4000000000200000000080100008000000006B +:108D500000000000000000000010000400000000FF +:108D6000000000400000000000000000000400803F +:108D700000001010090010000400000000000000B6 +:108D800000000000000000000000000000000000E3 +:108D900000000000000000000000000000000000D3 +:108DA00000000000000000000000000000820088B9 +:108DB00000000000000000000000000000000000B3 +:108DC00000000000000100000000C00100010040A0 +:108DD0004000000000000000000000010001000051 +:108DE00000000000000000000000000000000090F3 +:108DF00000C00000000000000000010000000000B2 +:108E00000000000000000000000000000000000062 +:108E10000000000000000000000000000000000052 +:108E200000000000000000000000000000810000C1 +:108E3000070000000000000000000000000000002B +:108E4000000000000041000007000000818100E0F8 +:108E5000070000000000000000000000008100008A +:108E6000070000000000000007000000000088006C +:108E700000E00700600A880000E000000000000039 +:108E800000E0000000000000000000000000000002 +:108E900000000000000000000000000000000000D2 +:108EA00000000000000000000000000000000000C2 +:108EB00000000000000000000000000000000000B2 +:108EC00000000000000000000000000000000000A2 +:108ED00000009999990000000000000000000000C7 +:108EE0000000000000000000000000000000000082 +:108EF0000000000000000000000000000000000072 +:108F00000000000000000000000000000000000061 +:108F10000000000000000000000000000000000051 +:108F20000000000000000000000000000000000041 +:108F30000000000000000000000000000000000031 +:108F40000000000000000000000000000000000021 +:108F50003C3C666600009900000000000000000034 +:108F60000000000000000000000000000000000001 +:108F700000000000000000000000000000000000F1 +:108F800000000000000000000000000000000000E1 +:108F900000000000000000000000000000000000D1 +:108FA00000000000000000000000000000000000C1 +:108FB00000000000000000000000000000000000B1 +:108FC00000000000000000000000000000000000A1 +:108FD0000000000000000000000000000000000091 +:108FE0000000000000000000000000000000000081 +:108FF0000000000000000000000000000000000071 +:109000000000000000000000000000000000000060 +:109010000000000000000000000000000000000050 +:109020000000000000000000000000000000000040 +:109030000000000000000000BDBD818100000000B4 +:109040000000000000000000000000000000000020 +:10905000000000003C000F00C3C303030000000039 +:109060000000000000000000000000000000000000 +:10907000000000000000000000007E7E7E7E0000F8 +:1090800000000000000000000000000000000000E0 +:1090900000000000000000000000000000000000D0 +:1090A00000000000000000000000000000000000C0 +:1090B00000000000000000000000F330F33000006A +:1090C00000000000000000000000000000000000A0 +:1090D0000000000000003C000F000000030300003F +:1090E0000000000000000000000000000000000080 +:1090F00000000000000000000000000066FF66FFA6 +:10910000000000000000000000000000000000005F +:10911000000000000000000000000000000000004F +:10912000000000000000000000000000000000003F +:10913000000000000000000005000A28050000A152 +:10914000000000000000000000000000000000001F +:1091500005000A28000000001061202F804D000843 +:1091600000000000000000000510002800000000C2 +:1091700000000008000000A000000061000F800D4A +:10918000200100600007800D000000610007000D55 +:1091900000000000000000000000000000000000CF +:1091A00000000000000000000000000000000000BF +:1091B00000000000000000000000000000000000AF +:1091C000000000000000000000000000000000009F +:1091D000000000000000000000000000000000008F +:1091E000000000000000000000000000000000007F +:1091F000000000000000000000000000000000006F +:10920000FA30FA3F03020302F000F0000000000011 +:10921000000000000000000000000000000000004E +:10922000000000000000000000000000000000003E +:10923000000000000000000000000000000000002E +:10924000000000000000000000000000000000001E +:10925000000000000000000000000000000000000E +:1092600000000000000000000000000000000000FE +:1092700000000000000000000000000000000000EE +:1092800000000A300A3F03570302F000F400000018 +:1092900000000000000000000000000000000000CE +:1092A00000000000000000000000000000000000BE +:1092B00000000000000000000000000000000000AE +:1092C000000000000000000000000000000000009E +:1092D000000000000000000000000000000000008E +:1092E000000000000000000000000000000000007E +:1092F000000000000000000000000000000000006E +:1093000000000000000000000A0AFF02C0C30300C2 +:10931000000000000000000000000000000000004D +:10932000000000000000000000000000000000003D +:10933000000000000000000000000000000000002D +:10934000000000000000000000000000000000001D +:10935000000000000000000000000000000000000D +:1093600000000000000000000000000000000000FD +:1093700000000000000000000000000000000000ED +:10938000000000000000000000000A0AFF00C0C347 +:1093900003000000000000000000000000000000CA +:1093A00000000000000000000000000000000000BD +:1093B00000000000000000000000000000000000AD +:1093C00000008800000000000000890001028904FC +:1093D0008920000000000000200420004000200040 +:1093E0002000008000804080000084008400840011 +:1093F00000000141040004040400000000004100DA +:109400000000000300000000000000000000000059 +:10941000000000000000000000000000000000004C +:10942000000000000000000000000000000000003C +:10943000000000000000000000000000000000002C +:1094400000000000000000000000000020002000DC +:1094500020002000000000000000000000000000CC +:1094600000000000000400040004009000020090CE +:1094700000900000040080028000800000000000D6 +:1094800010000000000000000000000000000000CC +:1094900000080000000000000000000000000000C4 +:1094A00000020000000000000000000000000000BA +:1094B00000000000000000000000000000000000AC +:1094C000000000000000000000000000000020007C +:1094D0000404020404040400000000000000020070 +:1094E0000000000000102000200084042000000084 +:1094F00000000000001088000400002000000000B0 +:109500000000000004000000000000000000000057 +:1095100005800000001000000400000000000000B2 +:109520000400000000100000000000000000000027 +:109530000200018000100000000000008200000016 +:10954000000000000000011000000000000000000A +:1095500084080001040900850000000000000208E2 +:109560000000000009080040A00080000401800005 +:109570000008000000080000410080000001008297 +:10958000000000001108801000000400000002002C +:10959000000020040000000800000000000000009F +:1095A00000000000000000080000000000000000B3 +:1095B0000000000002400008000000000400000459 +:1095C0000000048204000408208200000000000063 +:1095D000000000000040000000000000000000004B +:1095E0000000000000000000000800000000000073 +:1095F00020000000000000000000820000000000C9 +:10960000000000000000000000000000000000005A +:10961000000000000000000000000000000000004A +:109620000000000000030000000000000002100223 +:10963000100910210000040088000200A0000000B2 +:109640000000001100000000000000000000000009 +:1096500000000000000000000000004000000000CA +:109660000000002021002100000000000000000098 +:10967000000080000000000000000000000000006A +:1096800000000000210000000000000000001100A8 +:10969000050008004100000000000000000000106C +:1096A00000C00008000000000000000000000000F2 +:1096B00000000000000000008000000080000000AA +:1096C000000000000000000000000000000000009A +:1096D000000000000000A00000200840004008003A +:1096E00008000000000002400000000000000840E8 +:1096F000000000000400080000000820080084208A +:109700000000000000000804000082008200000049 +:109710000000A000000000000000000000000000A9 +:109720000000080008000800000000000800000019 +:109730000000000000000000000000000000000029 +:109740000000000000000000000000000000010018 +:1097500003000000000000000800000400000800F2 +:1097600000000000000000000000000000000000F9 +:1097700000000000000000000000000004000000E5 +:109780000001400004000000000100000000000093 +:1097900000002100000000000000000000080000A0 +:1097A00000000000000000000000000000000000B9 +:1097B00000000000000000000000000000000000A9 +:1097C000000000000000000400000500000021006F +:1097D000400008000000000004000000000000003D +:1097E0000000001000000000000000000000000069 +:1097F00000000000820000000000000000000000E7 +:1098000000000000000000000800820008000800BE +:10981000080000000200C000C00002008400080030 +:1098200001800000000000000000000300000002B2 +:109830000002000000000000000000110100010013 +:109840000180008000000000840000200000000073 +:1098500000000000080000000000002000000000E0 +:1098600000000000000000000000000003000004F1 +:1098700000000000080021000010000000000000AF +:1098800000000000030000000000000000000000D5 +:10989000000000000000908805000000800000002B +:1098A00008024040000000044000000000000000EA +:1098B00000000000000000000000000000000400A4 +:1098C0000200022000200000000000000000000054 +:1098D0000000000000004000000000000000000048 +:1098E0000000000000000800080000000000000068 +:1098F00008000000000000000000000000008200DE +:109900000000040000008200000000000100A00030 +:109910000800000082000000820040800440040033 +:109920000800000008002000000000000003000004 +:109930000008000000000008000082008200820091 +:1099400002000000000000000000000020000000F5 +:109950000000000000000000000000000000000007 +:109960000000008200004100000000000000000034 +:1099700000000000000000000000000000000000E7 +:1099800000000000000000000000000000000400D3 +:1099900000000000000000000000000041408000C6 +:1099A0008000000000000000000000000000000037 +:1099B00000000000000000000000000000000000A7 +:1099C00000008000000000000000000000002000F7 +:1099D0000000000000000000000000000000000087 +:1099E0000000000000000000000000000000000077 +:1099F0000000000000000000000000000400010062 +:109A00000000000000000000000000000000000056 +:109A1000000000010000010100010000000200C080 +:109A200000840002024003880508409090020088EC +:109A300000020282000000000000000000000000A0 +:109A40000000000000C0000000901088000000002E +:109A50000000000000000100000000000000000005 +:109A600000000000000000001100000000000000E5 +:109A70000000000000000000000000000000800066 +:109A80002000000000000000000000004000000076 +:109A9000000000000841002140100011000000807B +:109AA0000000008000808000A12082C000000080B3 +:109AB0000000000080000000000000000000000026 +:109AC0000000000000000080000000000000000016 +:109AD000000000000000000003000500000000007E +:109AE0000000000000000005000000080000000069 +:109AF0000000000000000000000000000000004026 +:109B00000000000300000000000000000000000052 +:109B100000000000000000000000000000800000C5 +:109B20000000000000008080200504910380A190C7 +:109B30008000009000808080000000000000000095 +:109B40000000000000000000000080050000800010 +:109B50000000000000000000000000000000000005 +:109B600000000000000000000000000000000000F5 +:109B700000000000000000000000000000000000E5 +:109B800000000000000100000000000000000000D4 +:109B9000000000200000004000000000000000C0A5 +:109BA000000088000000A000C090884005C0A0040C +:109BB00083C1080002C0020404C0000000000000CD +:109BC0000000000000000000000000001000400045 +:109BD000C0000000000000000000000000000000C5 +:109BE00000900000000000000000000040000000A5 +:109BF0000100000000000000000000000000000064 +:109C000000000000A00000000000000000000000B4 +:109C10000000000000000400000000000000000040 +:109C200000000000C0200020009004C00389002133 +:109C3000C010048905880010C0C090080000000012 +:109C4000000000000000000000000000000000888C +:109C5000009004C0000000000000000000000000B0 +:109C600000010001000000000000000000000000F2 +:109C700000004100000000000000000000000000A3 +:109C800000000000000000000000030000000000D1 +:109C9000000000000500000080000000000003003C +:109CA00004000000000080000000000080804121CE +:109CB000000280038002410000008000008000005C +:109CC0000000000000000000000000000000000094 +:109CD0000000000080800000000000000000002064 +:109CE0000000002000020000000000000000000250 +:109CF0000000000000000000000000000000000064 +:109D00000000000000000010000000000000000043 +:109D1000000000000000001000210000000000050D +:109D20000008000000000000000500040000000022 +:109D30002002852083002004804080000000000075 +:109D40000000000000000000000000000000000013 +:109D500080080004800000000000000000000000F7 +:109D600000000000000000000000000000000000F3 +:109D700000010000000000000000000000000000E2 +:109D800000000000000000000001000000000000D2 +:109D900000000000000000000000000000000000C3 +:109DA0000000000100000000000000000021000091 +:109DB000000011C1044003881001040020821082B9 +:109DC0000200000000000000000000000000000091 +:109DD0000000C0019091040000000000000000009D +:109DE0000000000000000000000000000000000073 +:109DF0000000810000E000000006000000000000FC +:109E000000000000000000000000810000E00000F1 +:109E100000000000000000000000004100000700FA +:109E20000000818140E00700001200000081000076 +:109E300007006000810000E00000484200000000D0 +:109E40000000484200000000000000000000000088 +:109E5000000000000081000007000000000000007A +:109E600000000000600000E00000000000000000B2 +:109E700000000000000000000000000000000000E2 +:109E800000000000000000000000000000000000D2 +:109E900000000000000000000000000000000000C2 +:109EA00000000000000000000000000000000000B2 +:109EB0000000000F0C0C000900600011002202805D +:109EC000082040108020000000000000000000007A +:109ED000000000000000F000FF00F000FF000000A4 +:109EE0000000000000000000000000000000000072 +:109EF0000000000000000000000000000000000062 +:109F00000000000000000000000000000000000051 +:109F10000000000000000000000000000000000041 +:109F20000000000000000000000000000000000031 +:109F300000000000000F0C0C09006000110022005E +:109F400001400410010402080000000000000000AD +:109F50000000000000000000F0000000F000000021 +:109F600000000000000000000000000000000000F1 +:109F700000000000000000000000000000000000E1 +:109F800000000000000000000000000000000000D1 +:109F900000000000000000000000000000000000C1 +:109FA00000000000000000000000000000000000B1 +:109FB0000000FFFFFFFF4141C300248100000401B6 +:109FC0001040248100000600900000000000000006 +:109FD00000000000000000000000505030300A0A6D +:109FE000AA000000000000000000000000000000C7 +:109FF0000000000000000000000000000000000061 +:10A000000000000000000000000000000000000050 +:10A010000000000000000000000000000000000040 +:10A020000000000000000000000000000000000030 +:10A0300000000000FFFFFF7F4141C30000002481BA +:10A04000080220800000248100060090000000002B +:10A050000000000000000000000000005050303000 +:10A060000A0AAA0000000000000000000000000032 +:10A070000000000000000000000000000061000778 +:10A08000800D000000000000000000000000000043 +:10A090000000000000610007800D000000000000CB +:10A0A0000000000005000A28050000A00021002B88 +:10A0B000800D01A000000000402800400008606101 +:10A0C0000007800D100000000000000008000000E4 +:10A0D0000000000000000000000000000000100070 +:10A0E000202800400008000000000000000000617F +:10A0F00000078009200000000000000000000000B0 +:10A10000000000000000000000000000000000004F +:10A11000000000000000000000000000000000003F +:10A12000000000000000000000000000000000002F +:10A13000000000000000000000000000000000001F +:10A14000000000000100000000000000000000000E +:10A1500000000000000000000000000000000000FF +:10A1600000000000000000000000000000000000EF +:10A17000000000003C3CFFFF000000000000000069 +:10A1800000000000000000000000000000000000CF +:10A1900000000000000000000000000000000000BF +:10A1A00000000000000000000000000000000000AF +:10A1B000000000000000000000000000000000009F +:10A1C000000000000080000000000000000000000F +:10A1D000000000000000000000000000000000007F +:10A1E000000000000000000000000000000000006F +:10A1F0000000000000003CFF3CFF000000000000E9 +:10A20000000000000000000000000000000000004E +:10A21000000000000000000000000000000000003E +:10A22000000000000000000000000000000000002E +:10A2300000000055FF3C000000000000000000008E +:10A2400000000000FF0FFF0F0000000000000000F2 +:10A2500000000000000000000000000000000000FE +:10A2600000000000000000000000000000000000EE +:10A2700000000000000000000000000000000000DE +:10A2800000000000000000000000000000000000CE +:10A2900000000000000000000000000000000000BE +:10A2A00000000000000000000000000000000000AE +:10A2B000000000000055FF0F00000000000000003B +:10A2C000000000000000FF0FFF0F00000100000071 +:10A2D000000000000000000000000000000000007E +:10A2E000000000000000000000000000000000006E +:10A2F000000000000000000000000000000000005E +:10A30000840020000400C0000080008001000400E0 +:10A310000000040000000000000000000000200019 +:10A32000208020002000000000000000000200004B +:10A33000000004000400029000000100000000037F +:10A3400004000000200000000000000000000000E9 +:10A35000000000000000000000000000C00000003D +:10A3600000000000000000000000000000000002EB +:10A3700000000000000000000000000000000002DB +:10A3800000000000000000000000000400042004A1 +:10A39000000000000000000000000000210000009C +:10A3A0008000000880008000000000000000000025 +:10A3B000000000000000000000110000020000008A +:10A3C000000000000000000000000000000000008D +:10A3D000000000000000000000000000000000007D +:10A3E000000000000000000000000000000000006D +:10A3F000000000000000000000000000000000005D +:10A40000000000009000000002002000201020004A +:10A41000020000100800080000000000000000001A +:10A4200000000100050001000500014001000100DD +:10A4300001000000000000210000081008000510C5 +:10A440000000000002000200020002000200020000 +:10A4500002000200000004000000000020000000D4 +:10A4600000000000000001000100030001800180E5 +:10A4700001800100040000000080008000800000D6 +:10A4800000800000048404000000000080008000C0 +:10A490008002030800000440408200000000000029 +:10A4A000000000001000200010001000200020001C +:10A4B000200020080000000000A00000800105002E +:10A4C0000200000200002000000000002000000048 +:10A4D00000000400000800000000000000400040F0 +:10A4E0000000000000082084020002000200024078 +:10A4F000024002400208000000840040004000408A +:10A5000000000040000800000400000000000000FF +:10A5100000000000000000030000000000008200B6 +:10A520000000000000088400000000000800000097 +:10A53000000000000000000000000000000000809B +:10A54000000000000000000000000000000000000B +:10A5500000000000000000000000000000000800F3 +:10A56000000000000000000000400088008800405B +:10A570000000000000000000004002000000000099 +:10A580000020022100200000000000000000000068 +:10A5900000000000000000000000000000000000BB +:10A5A00000000000000000000000000000000000AB +:10A5B0000800100000000000000000000000000083 +:10A5C000211009002100000800000300080003001A +:10A5D0000000210000000000000000A000080008AA +:10A5E00000A00008008200080000000100400040B8 +:10A5F0000001000800A01100000005018000008299 +:10A6000000000000800000000000080000000000C2 +:10A610000000400000000000100400000000C0081E +:10A620004000A000100000008200000000040000B4 +:10A630000000000000000005000004000400040207 +:10A6400000080000000001020000000000000000FF +:10A6500000000000000000000000000000000000FA +:10A6600000000000004000000000000002000000A8 +:10A670000000000400000000100000001040C12095 +:10A680000100010001000100830001000000020040 +:10A690000000000040000000000000A100000000D9 +:10A6A0000000000003000000000000000000008225 +:10A6B0000800000000000040000000000000000052 +:10A6C0000000000000000000020000000000000088 +:10A6D000000000000000400000000000000000003A +:10A6E00000000000000000000000000000008000EA +:10A6F000000008000000000000008000000083014E +:10A70000020002000200020002000200020000003B +:10A71000000000000000200000000000080082008F +:10A7200000000000C00000000000C000C0200000C9 +:10A730000000000000000003000000000000000511 +:10A740000000000000080000000000800000000081 +:10A7500000000000000000000000000000000000F9 +:10A7600000000000000000000000000000000000E9 +:10A77000020802000000000000000000900001003C +:10A780008400102100002000004000200000014053 +:10A790000000000000000000800000000000000039 +:10A7A00000000000000000000000000000000000A9 +:10A7B0002100000000000000000000000000000078 +:10A7C0000000000000000000009020000040000099 +:10A7D0000000000803C00000000000080008210875 +:10A7E0000084000000A008A0080000000000000095 +:10A7F0000000800080000000000800A0098800A080 +:10A80000020000008000000080000001000008003D +:10A810000201000000000000000000000000000035 +:10A82000000040000000000000008200000008005E +:10A830000000000000000000000000000000000018 +:10A84000000008000000080284000008000000006A +:10A8500000000000900000008800000000000000E0 +:10A8600000000000000000000000000800000000E0 +:10A8700000000000000000000200020000040204CA +:10A880000004000800040021000000000000020095 +:10A890000040C000000000000000000000000000B8 +:10A8A0001100000000000000000000000040000057 +:10A8B0000000000000000000000020000082008274 +:10A8C0000000000000000000110000000000000077 +:10A8D0000000000000000000000000000000000078 +:10A8E0000000000000000000000000000200000066 +:10A8F0000000000000000000000080008000000157 +:10A9000080010001000100010000000000000000C3 +:10A9100080000801000000000000000000000000AE +:10A920000000010000000000000000000000000026 +:10A930000000000000000001000084000000000092 +:10A940000000000000000000000000000000000007 +:10A9500000000000000000000000000000000000F7 +:10A9600000000000000000000000000000000000E7 +:10A97000000000000000000000C000080000080007 +:10A9800001C189014000820000C1A00011018800BE +:10A9900002C00000000200000000000000000000F3 +:10A9A0000000000040000000000000000000000067 +:10A9B000000000000000000020410321910500007C +:10A9C0000000000011000000000000000000000076 +:10A9D0000000000000000000000000000000000077 +:10A9E0000000000000000000000000000000000067 +:10A9F0000000000000000000000000800080000057 +:10AA0000800009C190108405801100C111028309E2 +:10AA1000800880800000008000000000000000002E +:10AA200000000020000000200000000000000000E6 +:10AA300000000000000000000000200020002000B6 +:10AA4000410000200000000800000000000000009D +:10AA500000000000000200000000000000000000F4 +:10AA600000000000000000000000000000000000E6 +:10AA700000000000000000000000000000000000D6 +:10AA800000008000830009000900C105208000004B +:10AA90008200C10080000000000080000000000073 +:10AAA00000000000000000000001000000000000A5 +:10AAB0000000000000000000000000000020000076 +:10AAC0000000014000000000000000000000000045 +:10AAD00000000000000000010082000000000000F3 +:10AAE0000000000000000000000000000000000066 +:10AAF0000000000000000000000000000000000056 +:10AB000000000000C000080000000100C100008833 +:10AB100000009000C100080000000000C00000001C +:10AB20000000000000000000200000000100000004 +:10AB30000000000000000000000000000000000015 +:10AB400000000000000100004000000000000000C4 +:10AB500000000000000000000000000000000000F5 +:10AB600000000000000000000000000000000000E5 +:10AB700000000000000000000000000000000000D5 +:10AB800000000000000000C000000000000191C1B2 +:10AB900020009000000000C100000000000000C084 +:10ABA0000000000000000000000000000000100095 +:10ABB0000000000000000000000000000000000095 +:10ABC00000200300000000410000000000004000E1 +:10ABD0000000000000000000000000000000000075 +:10ABE0000000000000000000000000000000000065 +:10ABF0000000000000000000000000000000000055 +:10AC000000000000000000000080000002090005B4 +:10AC100089C180208502000000C100000000000002 +:10AC200000800000000000000000000200000000A2 +:10AC30000000000000000000000000000000000014 +:10AC4000000041054000000040000000000000003E +:10AC500000000000000000000000000000000000F4 +:10AC60008000000000000000000000000000000064 +:10AC700000000000000000000000000000000000D4 +:10AC8000000000008000000000800000C109890071 +:10AC900003002000C1800209880009038000000031 +:10ACA00000000000000000000000000000010000A3 +:10ACB0000000000000000000000000000000000094 +:10ACC0000000000001000000000000000000000083 +:10ACD00000000000000000000000000020009000C4 +:10ACE0002000040000000000000000000000000040 +:10ACF0000000000000000000000000000000000054 +:10AD00000000000000000800000000080000C191E1 +:10AD1000200000000000C1C0000188000101C00047 +:10AD20000000000040000000000000000000810062 +:10AD300000E0000000000000000000000000000033 +:10AD4000000000000000810000E0000000000000A2 +:10AD500000E0000000000000000000000000000013 +:10AD600000000000000000000000000000000000E3 +:10AD700000000000000000000000000000000000D3 +:10AD800000000000000000000000000000000000C3 +:10AD9000410000E000000000600000E00000420010 +:10ADA00000000000000000000000000000000000A3 +:10ADB0000000000000000000000000000000000093 +:10ADC0000000000000000000000000000000000083 +:10ADD0000000000000000000000000000000000073 +:10ADE0000040000000000000000000000000000023 +:10ADF0000000000000000000000000000000000053 +:10AE000000000000000000000000FFFF0000FFFF46 +:10AE10000000FF000000FFFF0000F0F00000FFFF57 +:10AE200000003C3C000066660000000000000000DE +:10AE30000000000000000000000000000000000012 +:10AE40000000000000000000000000000000000002 +:10AE500000000000000000000000000000000000F2 +:10AE600000000000000000000000000000000000E2 +:10AE700000000000000000000000000000000000D2 +:10AE8000000000000000000000000000FFFF0000C4 +:10AE900000000000FF00000000000000F0F00000D3 +:10AEA000000000003C3C000066660000000000005E +:10AEB0000000000000000000000000000000000092 +:10AEC0000000000000000000000000000000000082 +:10AED0000000000000000000000000000000000072 +:10AEE0000000000000000000000000000000000062 +:10AEF0000000000000000000000000000000000052 +:10AF00000000000000000000000000000000000041 +:10AF10000000000000000000000000000000000031 +:10AF20000000000000000000000000000000000021 +:10AF30000000000000000000000000000000000011 +:10AF40000000000000000000000000000000000001 +:10AF500000000000000000000000000000000000F1 +:10AF600000000000000000000000000000000000E1 +:10AF700000000000000000000000000000000000D1 +:10AF800000000000000000000000000000000000C1 +:10AF9000000000FF0000FFFF0000666600003C3C70 +:10AFA0000000FFFF000000FF00000F0F00003C3C0E +:10AFB0000000000000000000000000000000000091 +:10AFC0000000000000000000000000000000000081 +:10AFD0000000000000000000000000000000000071 +:10AFE0000000000000000000000000000000000061 +:10AFF0000000000000000000000000000000000051 +:10B000000000000000000000000000000000000040 +:10B010000000000000FF0000000000006666000065 +:10B020003C3C00000000000000FF00000F0F00008B +:10B030003C3C000000000000000000610007800DA3 +:10B040000000000000000000000000000000000000 +:10B050000000000000018000000000610007000DFA +:10B060000000000000000000000080000000000060 +:10B0700000000000000000000000000000000000D0 +:10B0800000000000000000000000000000000000C0 +:10B0900000000000400280000020920240828001F7 +:10B0A00080209202408280018020920240828000B3 +:10B0B00000209202000000000000000000000000DC +:10B0C0000000000000000000000000000000000080 +:10B0D00000000000AA002828C3C3828200000000EC +:10B0E0000000000000000000000000000000000060 +:10B0F0000000000000000000000000000000000050 +:10B10000000000000000000000000000000000003F +:10B11000000000000000000000000000000000C36C +:10B120000003000000000030005002020303000092 +:10B13000000000000000000000000000000000000F +:10B1400000000000000000000000000000000000FF +:10B15000000000000000AA002828000082820000F1 +:10B1600000000000000000000000000000000000DF +:10B1700000000000000000000000000000000000CF +:10B1800000000000000000000000000000000000BF +:10B1900000000000000000000000000000000000AF +:10B1A000000000030A0A000F0030005002020000F5 +:10B1B000000000000000000000000000000000008F +:10B1C000000000000000000000000000000000007F +:10B1D00000000000000000000055000F00C3C0C0C8 +:10B1E000000000000000000000000000000000005F +:10B1F000000000000000000000000000000000004F +:10B20000000000000000000000000000000000003E +:10B21000000000000000000000000000000000002E +:10B220000000000300410000000000410003C300D3 +:10B23000820000000000000000000000000000008C +:10B2400000000000000000000000000000000000FE +:10B25000000000000000000000000055000F00C3C7 +:10B26000C0C000000000000000000000000000005E +:10B2700000000000000000000000000000000000CE +:10B2800000000000000000000000000000000000BE +:10B2900000000000000000000000000000000000AE +:10B2A0000000000000030041000F0C0C00410003EF +:10B2B000000082000000000000000000C00020002C +:10B2C000C000401100008200820082004000400067 +:10B2D0000000880004000289000402048800C00005 +:10B2E00000002004408002804080008000000000B8 +:10B2F00000000000200000000000200000032000EB +:10B3000020000004400088002000000000000480AD +:10B3100001000100038000000000000000000000A8 +:10B3200000000000200002000000020002000000F7 +:10B33000000000000000000000000000000000000D +:10B3400000000000000000000400000000000000F9 +:10B35000000040400000800080040001800100C027 +:10B360000000000000000040802004400040410038 +:10B3700000000000000000000000000000000000CD +:10B3800000000000000000000000000000000000BD +:10B39000004004020400044000000000000000001F +:10B3A000000000000000000000000000000000009D +:10B3B000000000000000000000000000000000008D +:10B3C00000000200000000000200840000000000F5 +:10B3D000200000000010000005800400050001109E +:10B3E00000000300400004002000010020000100D4 +:10B3F000020000000000000000000000001000003B +:10B40000000000000000000000000200000000003A +:10B4100000000000000002000080000000000000AA +:10B42000000000800000000000000000000000009C +:10B43000000000000000000000000000000000000C +:10B44000000009004000000020880084000000087F +:10B4500000080000000000900004020489000204BB +:10B460000404090004008000000089002000800816 +:10B47000200841000000000000000000200000083B +:10B480000000000000000000000000840000000038 +:10B490004010000800000000040000040900400003 +:10B4A000001000000020000000000000000000006C +:10B4B000000000100000000000000000000000007C +:10B4C000000000000000000000000000000000007C +:10B4D00084000010000000000000000000030000D5 +:10B4E00082000000000000000000000004000000D6 +:10B4F000040004000000000000000008824000007A +:10B50000000000000000000000000000000000003B +:10B510000000000000000000020000000002000027 +:10B52000000000000000000000000000000000001B +:10B53000000000000000000000000000000000000B +:10B5400000000000000041000200000000000000B8 +:10B5500000000000000000000000000000000300E8 +:10B56000080008080000080000000000000080003B +:10B57000000080008800000041000000080000007A +:10B5800000000000000000000008000000000000B3 +:10B59000000000000000000000008000210000000A +:10B5A000000000000000000000000000000000009B +:10B5B0000800000000000000000000000000000083 +:10B5C0000000000000000000000000000800024031 +:10B5D00004409004820400040800000000000040C1 +:10B5E000830401000104090000200000000900207C +:10B5F000820008000004000008000800002000008D +:10B600008200000000000000000082208200400054 +:10B61000080008000000000000000000000082098F +:10B62000000000000000000000000800080000000A +:10B630000000000008000000000000000000000002 +:10B64000000000008209000000000000000000006F +:10B6500000000800000000000000000000000000E2 +:10B66000020020002000040120004001000008002A +:10B670000001000008000500000000000088000034 +:10B6800000000000000000000000000000000000BA +:10B6900000000000000000000800000000000000A2 +:10B6A00021000000080000004100080021004100C6 +:10B6B0000300000000000000000000000300030081 +:10B6C0000000080040004000400040000000001161 +:10B6D000000000000000000000000000000000006A +:10B6E000000008000000000000000000040004004A +:10B6F0000000040800000000080000000000000036 +:10B700000000000000000000000000000000000039 +:10B7100000000000000082000000000000000000A7 +:10B7200000000000820000000000A00000000000F7 +:10B730000000000000000000000000000000000009 +:10B7400000000000000000000000400000000000B9 +:10B7500000000000000000000000030000000000E6 +:10B760000000000000000000000000000000800059 +:10B7700080000000800000000000000000000000C9 +:10B7800000000000000003000300000000000000B3 +:10B7900000000000000000000000000000000000A9 +:10B7A0000000000000000000000000000000000099 +:10B7B000000000000000000008000000000400007D +:10B7C0000000000000000000000000000000000079 +:10B7D0000000000000000000000000000000000069 +:10B7E000400008008200000000000000000002008D +:10B7F00040000800050000000040000000000000BC +:10B800000000000000000000000000000000000038 +:10B810000000000000000000000000000000040024 +:10B820000000000000000400008004000000000090 +:10B830000000008000000000000000000000000088 +:10B840000000000000000000000000008200000076 +:10B8500000000000210000000000000002000000C5 +:10B8600020000000000010000000000000000000A8 +:10B8700000000000100084101000000021004000B3 +:10B880000300202000000000080000040000000069 +:10B8900000000000080000000000000000000000A0 +:10B8A0000000000000000000000003040000000091 +:10B8B000000000000220000000000000080000005E +:10B8C0000002050008000000000000000000040065 +:10B8D0000000000000000000000000000000000068 +:10B8E00000000000000000000000000020C0C000B8 +:10B8F00001029020000000000000000002C0009043 +:10B900000100000200000000000000000000000034 +:10B910000000000000000000000000000000000027 +:10B9200000000000000000C000080008080200003D +:10B930000000000000000000000000000000000007 +:10B9400000000000000000000000000000000000F7 +:10B9500000000000000000000000000000000000E7 +:10B960000000000000000000000000000000408017 +:10B970000000038000000000000000000000C08004 +:10B9800000004000008000000000000000000000F7 +:10B9900000000000000000000000000000000000A7 +:10B9A0000000000000000000008000004000008057 +:10B9B0000000000000000000000000000000000087 +:10B9C0000000000000000000000000000000000077 +:10B9D0000000000000000000000000000000000067 +:10B9E0000000000000000000000000000000000057 +:10B9F0000008002180408000090041000408088000 +:10BA0000002000080082800000000000000000000C +:10BA10000000000000000000000000000000000026 +:10BA20000000000000000000000000000000800096 +:10BA30008000000000000000000000000000000086 +:10BA400000000000000000000000000000000000F6 +:10BA500000000000000000000000000000000000E6 +:10BA600000000000000000000000000000000000D6 +:10BA70000000900090004000C00000000020000185 +:10BA80000004400002000041C0000000000000006F +:10BA900000000000000000000000000000000000A6 +:10BAA00000000000000000000000000088004000CE +:10BAB0000400C000000000000000000000000000C2 +:10BAC0000000000000000000000000000000000076 +:10BAD0000000000000000000000000000000000066 +:10BAE0000000000000000000000000000000000056 +:10BAF0000000000040404000000000C000000000C6 +:10BB00002000000040400400000400C000000000CD +:10BB10000000000000000000000000000000000025 +:10BB200000000000000000000000000000000040D5 +:10BB30000000000200C00000000000000000000043 +:10BB400000000000000000000000000000000000F5 +:10BB500000000000000000000000000000000000E5 +:10BB600000000000000000000000000000000000D5 +:10BB700000000000000000000000000008804000FD +:10BB800000000000000000008000008040800000F5 +:10BB900000000000000000000000000000000000A5 +:10BBA0000000000000000000000000000000000095 +:10BBB0000000000000804080000000000000000045 +:10BBC0000300000000000000000000000000000072 +:10BBD0000000000000000000000000000000000065 +:10BBE0000000000000000000000000000000000055 +:10BBF00000000000000000008005800480000000BC +:10BC00000002002000000002800500C000000000CB +:10BC10000000000000000000000000000000000024 +:10BC20000000000000000000000000000000000014 +:10BC30000000000200200080000000000000000062 +:10BC400000000000004000000000000000000000B4 +:10BC500000000000000000000000000000000000E4 +:10BC600000000000000000000000000000000000D4 +:10BC700000000000000000000000C00004000400FC +:10BC800000000085000100000000C0000803000063 +:10BC900000000000000000000000000000000000A4 +:10BCA0000000000000000000000000000000000094 +:10BCB00000000000000100890002000000000000F8 +:10BCC0000000000000000000000000000000000074 +:10BCD0000000000000000000000000000000000064 +:10BCE0000000000000000000000000000000000054 +:10BCF000000000000000000000000000818100E062 +:10BD0000070000000081000007000000008100E043 +:10BD1000070000000000000000000000000000001C +:10BD20000000000000000000000000000000000013 +:10BD3000000000000000008100E00700000000009B +:10BD400000000000000000000000070000000000EC +:10BD500000000000000000000000000000000000E3 +:10BD600000000000000000000000000000000000D3 +:10BD700000000000000000000000000000000000C3 +:10BD80000000C3C3828200000000000000000055D4 +:10BD9000555500C382820000000000000000000032 +:10BDA0000000000000000000000000000000000093 +:10BDB0000000000000000000000000003C00FF0048 +:10BDC0000000000000000000000000000000000073 +:10BDD0000000000000000000000000000000000063 +:10BDE0000000000000000000000000000000000053 +:10BDF0000000000000000000000000000000000043 +:10BE0000F0F000FF0000828200000000000000004F +:10BE10000055000000C38282000000000000000006 +:10BE20000000000000000000000000000000000012 +:10BE300000000000000000000000000000003C00C6 +:10BE400000000000000000000000000000000000F2 +:10BE500000000000000000000000000000000000E2 +:10BE600000000000000000000000000000000000D2 +:10BE700000000000000000000000000000000000C2 +:10BE8000000000000000003C000F00000000000067 +:10BE9000000000000000414103030000000000001A +:10BEA0000000000000000000000000000000000092 +:10BEB000000000000000000000000000C3000303B9 +:10BEC000FFFF000000000000000000000000000074 +:10BED0000000000000000000000000000000000062 +:10BEE0000000000000000000000000000000000052 +:10BEF0000000000000000000000000000000000042 +:10BF0000000000000F0F3C3C003C000F0000000050 +:10BF100000000000FF003C3C414103030000000022 +:10BF20000000000000000000000000000000000011 +:10BF30000000000000000000000000000000C3003E +:10BF40000303553C0F0F000000000000000000003C +:10BF500000000000000000000000000000000000E1 +:10BF600000000000000000000000000000000000D1 +:10BF700000000000000000000000000000000000C1 +:10BF80000000000000001061202F804D00080561B6 +:10BF90000A2E050D00A01061202F004D00080000A2 +:10BFA0000000000000000000000000000000000091 +:10BFB0000000000000000000000000000000000081 +:10BFC0000061202F004D010800000000000000006B +:10BFD0000500000800000000000000000000000054 +:10BFE0000000000000000000000000000000000051 +:10BFF0000000000000000000000000000000000041 +:10C000000000000000000000000000000000000030 +:10C010000000000000000000000000000000000020 +:10C020000000000000000000000000000000000010 +:10C030000000000000000000000000000000000000 +:10C0400000000000000000000000000000000000F0 +:10C0500000000000000000000000000000000000E0 +:10C0600000000000000000000000000000000000D0 +:10C0700000000000000000000000000000000000C0 +:10C0800000000000000000000000000000000000B0 +:10C0900000000000000000000000000000000000A0 +:10C0A0000000000000000000000000000000000090 +:10C0B0000000000000000000000000000000000080 +:10C0C0000000000000000000000000000000000070 +:10C0D0000000000000000000000000000000000060 +:10C0E0000000000000000000000000000000000050 +:10C0F0000000000000000000000000000000000040 +:10C10000000000000000000000000000000000002F +:10C110000000000000000000550F00C300000000F8 +:10C12000000000000000000000000000000000000F +:10C1300000000000000000000000000000000000FF +:10C1400000000000000000000000000000000000EF +:10C1500000000000000000000000000000000000DF +:10C1600000000000000000000000000000000000CF +:10C1700000000000000000000000000000000000BF +:10C1800000000000000000000000000000000000AF +:10C1900000000000000000000000550FFFC3000079 +:10C1A000000000000000000000000000000000008F +:10C1B000000000000000000000000000000000007F +:10C1C000000000000000000000000000000000006F +:10C1D000000000000000000000000000000000005F +:10C1E000000000000000000000000000000000004F +:10C1F00000000000000000000000C0000000C000BF +:10C200008800000088008802200000000000200054 +:10C21000200020002000200284008400840084008C +:10C220008800000004000000040004000400200056 +:10C2300040002000400020000003200020002000DB +:10C24000200000000000000000004000000000008E +:10C25000200020000000200000000000000000007E +:10C26000000000000000000000002000008000002E +:10C27000200000000000000000000000000021007D +:10C2800000000000090000000000000000000000A5 +:10C2900000008000C100800080000000000000005D +:10C2A000000000000000800000000000000000000E +:10C2B000000000000000000000000000000000007E +:10C2C000000000000000000000000002000000006C +:10C2D000000000000000000000000000000000005E +:10C2E000000000000000000000000000000000024C +:10C2F00000000000100000000000000004000040EA +:10C3000000000200020002002000020004000440BD +:10C310000000020000400200000004000000004194 +:10C320000000000003000480001000000020000056 +:10C33000000040200000000000000000000000009D +:10C3400002000200020000020200000000000000E3 +:10C350000000008000000241000002000004000014 +:10C3600000000000844089000300C10089008800AB +:10C3700000008800000000000000000000004110E4 +:10C38000000000000000000000080000008400041D +:10C390000000400400000010090000040008000034 +:10C3A00004000000000004108040000000082091FC +:10C3B00000004000040100004000200000040000D4 +:10C3C00041000000000040000000000020000008C4 +:10C3D000000000000004000000000000050000084C +:10C3E00000000900090000010200840004000404A8 +:10C3F00041004100000000000000000000000004B7 +:10C40000000000000009000000000000000000081B +:10C410000008000000000000000000008200002171 +:10C4200000000040000000000000000008000021A3 +:10C4300000000000000800000000000000000008EC +:10C4400000000000000000000000000000030000E9 +:10C4500000000000000000000000000000000000DC +:10C4600000000000000000000000000000000003C9 +:10C470000000000800000000A021000000000000F3 +:10C4800000000000000005000000000000000000A7 +:10C490000000030000000000410000000300030052 +:10C4A0000000030000000900000009000000000077 +:10C4B000000000000000000000000000000000007C +:10C4C000000000000000000000000000000000006C +:10C4D000000000000000000000000000000000005C +:10C4E0000000002000000000000008000000000024 +:10C4F0000000000000000000000000000900000033 +:10C5000009000000C0090000000000000000080051 +:10C5100008400004404008000800000010008400AB +:10C520000005400000400009002000400802000013 +:10C53000408409040400048200090400040004008B +:10C54000A00005000000C000C000A000C00008005E +:10C550000020000004000800080008001000A000EF +:10C5600000000020A000820000000805000000007C +:10C5700000000002904020000400040004090802AA +:10C5800000020800000208001000000000001188EE +:10C59000008400880000000000A0200000000000CF +:10C5A00003000000400011820000038808004000E2 +:10C5B0002100000304018000802000028000800030 +:10C5C0000090200004200000000010001000000077 +:10C5D000030003000000830041004100100003003D +:10C5E0002000000021000300000000000000000007 +:10C5F00021004000000009010400000000000000CC +:10C6000000000000410000000021000000000800C0 +:10C610000800000000000000000000009000A000E2 +:10C620000000C000000000008200000000000002C6 +:10C6300000000000000000020000000000000000F8 +:10C640000800040004000000000000000000A0003A +:10C650000000040004000400000000050000008049 +:10C66000C000000000000000000008000800820078 +:10C6700082000000000000004000000000400000B8 +:10C680001000000084008800000000000500000089 +:10C69000000000000000000000000000000000009A +:10C6A000000008000000080008000000000000A0D2 +:10C6B0000000200000000000000100000000000059 +:10C6C000000000008000800000000000000000006A +:10C6D0000000000080848000800000000000000056 +:10C6E0000004000000000000000000000000000046 +:10C6F00000000000000000000000800000000000BA +:10C700000000000000000000000000000000000029 +:10C7100000000000000800000000100000000009F8 +:10C720000000000001000080010001000000820004 +:10C73000001000008480838001008200000000114E +:10C740000420000900000000040000000000820036 +:10C7500082000000820000800080050001000411BA +:10C760000000400004000004000040000000400001 +:10C770008200000040000000000000039000000064 +:10C780000000000000000400040004000400008415 +:10C7900000000002050000880000410000000000C9 +:10C7A000000000000000208203042000200041005F +:10C7B0000800001005901104040404840000000027 +:10C7C0000040800120000400002000000000000064 +:10C7D0000000000000000088032041200400040045 +:10C7E00003000300030005000304080041A0080043 +:10C7F0000000000000020000000000000000000037 +:10C800000000000000000000000000000000030223 +:10C810000000000000000000000000000000000018 +:10C820000000000000000000000000000000000008 +:10C83000000000000000000001000000A000000057 +:10C8400000000000000000000000000000000000E8 +:10C8500000000000000000000000000000000000D8 +:10C8600000000000000000000000000000000000C8 +:10C870000000008800900088008403C001828800C6 +:10C88000A0A0000000000000000100000000000067 +:10C890000100000000000000000000000000000097 +:10C8A0000000000000000000000000000000030085 +:10C8B000000000000000000000001100040008005B +:10C8C0000000000000000000000000000000000068 +:10C8D0000000000000000000000000000000000058 +:10C8E0000000000000000000050000000000000043 +:10C8F0000000000000000000000000009080218087 +:10C900008000000000200020000300200000000044 +:10C91000000008000000000000000000000000000F +:10C9200000000000000000000000000000080000FF +:10C93000000900000000000000000000102020009E +:10C9400091049000000000800000008000000000C2 +:10C9500000000000000000000000000000000000D7 +:10C9600000800000008000000000002000000000A7 +:10C9700000000000000000000082008800004080ED +:10C980001105100091800000000000000008000068 +:10C990000000000000000000000000000000000097 +:10C9A0000000000000000000000000000000000186 +:10C9B00000000000000000000000000000009100E6 +:10C9C0009140410109400000000400000004000003 +:10C9D00000200000004000000000000000000000F7 +:10C9E000000000040000000400000000000100003E +:10C9F00000000000000000000000004000040000F3 +:10CA0000208801000120C102000000000000000198 +:10CA10000000000000000000000000000000000016 +:10CA20000000000000000000000000000000000006 +:10CA300000002000000001000000000000000000D5 +:10CA4000000140018401000100000000840000009A +:10CA50000000000040000000000000000000000096 +:10CA60000000000000004000000000000000000086 +:10CA70000000000000000000000040000000040072 +:10CA8000A00082008821000100C100000000000019 +:10CA90000000000000000000000000000000000096 +:10CAA0000000000000000000000000000000000086 +:10CAB0000000000000000000020000000000000074 +:10CAC00000002010001000084011050000000000C8 +:10CAD0000000400000000000000000000000000016 +:10CAE0000000000005000000000000000000000041 +:10CAF00000000000000000000000000080000000B6 +:10CB00008000000000008003002105C0000002003A +:10CB100040000000000000000000000000000000D5 +:10CB20000000000000000000000000000000000005 +:10CB300000000000000000000000000000000000F5 +:10CB4000000000000011009000800010000800218B +:10CB500000000000000000020000000000000000D3 +:10CB600000000000000000000011000000000010A4 +:10CB700000000000000000000000000000000000B5 +:10CB8000000000000000838080084011C0052100E3 +:10CB90000400100020000000000000000000000061 +:10CBA0000000000000000000000000000000000085 +:10CBB0000000000000000000000000000000000075 +:10CBC00000000000000000890020000200010000B9 +:10CBD0000000000000000000000000000000000055 +:10CBE0000000000000000000000000000000000045 +:10CBF0000001000000000000000000000000000034 +:10CC00009000C00020000200200402A190A1880131 +:10CC10000100010000000100000000000000000011 +:10CC20000000000000000000000000000000000004 +:10CC30000000000000000000000000E00000000014 +:10CC40000000000000000000004200E007000000BB +:10CC500000000000070000000000000007000000C6 +:10CC600000000000000000000000000000000700BD +:10CC70000000810000E00000000000000000000053 +:10CC8000000000000000000000000041000007005C +:10CC90000000000000000000000000000000000094 +:10CCA0000000000000000000000000000000000084 +:10CCB0000000000000000000000000000000000074 +:10CCC0000000000000000000000000000000000064 +:10CCD0000000000000000000000000000000000054 +:10CCE0000000000000000000000000000000000044 +:10CCF0000000000000000000000000000000000034 +:10CD000000000000069F42420000000000000000FA +:10CD10000000000000000000000000000000000013 +:10CD20000000000000000000000000000000000003 +:10CD300000000000000000000000000000000000F3 +:10CD400000000000000000000000000000000000E3 +:10CD500000000000000000000000000000000000D3 +:10CD600000000000000000000000000000000000C3 +:10CD700000000000000000000000000000000000B3 +:10CD8000000000000000069FDBDB00000000000048 +:10CD900000016666F0F000000000000000000000E6 +:10CDA0000000000000000000000000000000000083 +:10CDB0000000000000000000000000000000000073 +:10CDC0000000000000000000000000000000000063 +:10CDD0000000000000000000000000000000000053 +:10CDE0000000000000000000000000000000000043 +:10CDF0000000000000000000000000000000000033 +:10CE00000000000000000000000000000000000022 +:10CE10000000000000000000000000000000000012 +:10CE20000000000000000000000000000000000002 +:10CE300000000000000000000000000000000000F2 +:10CE400000000000000000000000000000000000E2 +:10CE500000000000B3B0838000000000000000006C +:10CE600000000000000000000000000000000000C2 +:10CE700000000000000000000000000000000000B2 +:10CE800000000000000000000000FF990099000071 +:10CE9000000000C3C3C30000000000000000000049 +:10CEA0000000000000000000000000000000000082 +:10CEB0000000000000000000000000000000000072 +:10CEC0000000000000000000000000000000000062 +:10CED000000000000000BFBC8F8C000000000000BC +:10CEE0000000000000000000000000000000000042 +:10CEF0000000000000000000000000000000000032 +:10CF0000000000000000000000000000F0C3F0C3BB +:10CF10000000000000C300003C3C6666000000000A +:10CF20000000000000000000000000000000000001 +:10CF300000000000000000000000000000000000F1 +:10CF40000000000000610007000D0000000000006C +:10CF50000000000005610A2F050D00A105000A0868 +:10CF6000050000A005000A08050000A00000000060 +:10CF700000000000000005000A08050000A0006194 +:10CF80000007800F0000000000000000000000000B +:10CF90003000000000008061202E004D000800617C +:10CFA0000006000D0000000000000000000000006E +:10CFB0000000000000000000000000000000000071 +:10CFC0000000000000000000000000000000000061 +:10CFD000000000000000000000002C2FECEF00001B +:10CFE0000000000000000000000000000000000041 +:10CFF0000000000000000000000000000000000031 +:10D000000000000000000000000000000000000020 +:10D01000000000000000000000008080000A000006 +:10D02000FFC30F030000000000000000000000002C +:10D0300000000000000000000000000000000000F0 +:10D0400000000000000000000000000000000000E0 +:10D050000000000000000000000000002023E0E3CA +:10D0600000000000000000000000000000000000C0 +:10D0700000000000000000000000000000000000B0 +:10D0800000000000000000000000000000000000A0 +:10D090000000000000000000000000008080000090 +:10D0A00000000F030F03000000000000000000005C +:10D0B0000000000000000000000000000000000070 +:10D0C0000000000000000000000000000000000060 +:10D0D0000000000000000000000000000000CF0C75 +:10D0E0001414000000000000000000000000000018 +:10D0F0000000000000000000000000000000000030 +:10D10000000000000000000000000000000000001F +:10D11000000000000000000000000000000000000F +:10D1200000000000000000000000000000000000FF +:10D1300000000000000000000000000000000000EF +:10D1400000000000000000000000000000000000DF +:10D1500000000000000000000000000000000000CF +:10D16000CF0CD7D700000000000000000000000036 +:10D1700000000000000000000000000000000000AF +:10D18000000000000000000000000000000000009F +:10D19000000000000000000000000000000000008F +:10D1A000000001000000000000010000000000007D +:10D1B000000000000000850085000100010800005B +:10D1C00000800000200020400500400041002100B8 +:10D1D00004008300040088000400000004100480A0 +:10D1E000000004020410020020804000C020200043 +:10D1F0002000200002000003040088008800400096 +:10D200002020040020000400880020008803200063 +:10D21000200000004000000000002000040020006A +:10D220000000000000000000000000002000C0001E +:10D2300000000000000000000400040004A004A09E +:10D24000000000200000000000002000000020027C +:10D2500004008000040080000000800000008001C5 +:10D260000004000000010001000000200000200177 +:10D27000000000004000000000000000000000006E +:10D2800000000001400000008000000000000000DD +:10D29000000000000082000000000000000000000C +:10D2A000000000000000000000000000000000007E +:10D2B00000820000000000000000000900000000E3 +:10D2C00000410041000000000200200000040004B2 +:10D2D000000400000000008000800000000000004A +:10D2E0000100000000000000000000000009000034 +:10D2F00000800000000000000000000000000000AE +:10D300000000000002200120012000200200000097 +:10D31000000000000200000000000100000000000A +:10D3200000000000004000030000000000000003B7 +:10D3300000000000000000000000000300000000EA +:10D34000050000000000000000080010C0000001FF +:10D3500000010005000000000002001000000000B5 +:10D3600000004002400040824010400009000000E0 +:10D370000000050404000000090020000000200057 +:10D380000000000000000001040104010001000091 +:10D39000000000000000000000000000200000006D +:10D3A0000000000000000000000020000000050058 +:10D3B00000000000050020000000000000820005C1 +:10D3C0000000000300100200001100000000000037 +:10D3D000000000004008C011000900000100080022 +:10D3E00000000000880000002000200000820000F3 +:10D3F000000000000000000000000000000000002D +:10D4000000000011002100020000000200000000E6 +:10D41000000010001040100000000000000000009C +:10D42000000000000002000200020002002182024F +:10D4300000020104000200000100010021020102BB +:10D4400000000000000000010000000000000000DB +:10D450000000080000008000000000000000020042 +:10D460002100000000000000000080008000000596 +:10D47000000003A000000000030000000000000006 +:10D48000000000000000000000000000000100009B +:10D49000210000000000000100000000000000006A +:10D4A0000800100041000300000008000800000010 +:10D4B000000000002001000000001000100090405B +:10D4C0001000820082850000011182000011C0045A +:10D4D00000800400080000000800828088040080AA +:10D4E0004004040408020220820004000400040036 +:10D4F00009800800A00008000000A00082000000D1 +:10D500009020000082110800C00008008400400044 +:10D510004000C00000000000C00400002004011111 +:10D520002100C000010000200100101100041000C3 +:10D530001000080008004000C0400000100020005B +:10D540000800A00005C0052021844004000011024D +:10D55000020020024000030000002000200400011F +:10D5600041048001A1404000000120008000000033 +:10D570008904042000204020210000000000030056 +:10D580000000050000000000000000000000000096 +:10D5900000000000000000000000000005009001F5 +:10D5A0002000A000410004000585040009000301DB +:10D5B000002000A0008200000000410000000900DF +:10D5C00000001100000040020011084140A182004B +:10D5D000000800000000A00010200080A0048220AD +:10D5E000200020000000000001000020902000002A +:10D5F0002000000400000000040000000000A00063 +:10D600000020000082000000A000000090009000B8 +:10D6100000000000000008000804A00084000000D2 +:10D62000000000400800C0080000000900090002D6 +:10D6300000000000A000820000000800C00290006E +:10D6400010800100A008010000000000000080021E +:10D650000000000000000000008400000004000042 +:10D6600000018000800000000000040000010001B3 +:10D6700003008004050105840000800000002000F4 +:10D68000000000000000000000000000000000009A +:10D690000000000000000000000008000000000082 +:10D6A00000000000000000000000080000A00000D2 +:10D6B0000008000040000884030000000000000093 +:10D6C000008280042000000020000020080584095A +:10D6D0000920084000400040400000000800000011 +:10D6E00020200240900004020000A02082002009B7 +:10D6F00040000000040940200011024000400000EA +:10D700000002842000210011000000002000000021 +:10D7100084004000100084001000100010008200FF +:10D7200008008209110009210100110000A1000078 +:10D7300008A100822020002084000000A000C0007A +:10D74000C0400800080020009000000040010000D8 +:10D7500010104001000000040000800002020000E0 +:10D7600008000000110000008000000010010040CF +:10D770000000020003008900090100000000000011 +:10D780000000000000000400000000000000000491 +:10D7900000004002410021000000000000000000E5 +:10D7A000000000000000908210001020108821204E +:10D7B00000004120002080000500030000A00000C0 +:10D7C00000004100030008020004210000000000E6 +:10D7D000010004000000C0400102840002020100B8 +:10D7E000000040000000A040909082040290119040 +:10D7F000000200200890A0409008022082A0C0A053 +:10D80000000400840410000000000000000000007C +:10D810000000000000000000A00100010000040062 +:10D8200082880082000282044082C0A00102C021DE +:10D8300000000000000000000000000000000000E8 +:10D84000000000000000000000010000880100004E +:10D850000000410000000000C00040000000808087 +:10D860001100100088000000C000A10083000080AB +:10D8700090000080000080004000A18085008000B2 +:10D8800080800000400000800000000000000000D8 +:10D8900000000000000000000000401000200021F7 +:10D8A0008040000000000000008000000000030035 +:10D8B0000002000000000000000000000000200046 +:10D8C00000000000000005000000004105400920A4 +:10D8D00000000000808000000000000000210080A7 +:10D8E00000000009000000090000110410A1C1029D +:10D8F000A0800000802180A10000910510A1C1043A +:10D900002080800080108000008000000000000067 +:10D910000000000000000000000000000080000087 +:10D92000801180090005809100800080800580C002 +:10D930002005808000000080000000800040000082 +:10D9400000000000000000000003000003000400CD +:10D95000200041004000020404009040400002A06A +:10D9600010A0900000000000000000004101010430 +:10D97000A0A103040800404088090482A10090048B +:10D98000A005400408008201A088889000000000E3 +:10D990000000000000000000000000000000204027 +:10D9A0008208A0000220A00008C0A00488C002A035 +:10D9B00002C0824010C0000000040000000400010A +:10D9C0000000000000000000000000000000000057 +:10D9D00001000100010001000000400000010011F1 +:10D9E00000090088051100004000000001019105B8 +:10D9F000040810091008A09000048404A190884134 +:10DA000004888420028808900008000202020000B6 +:10DA10000000000000000000000000000000000006 +:10DA20000002012041820090831000A0C01010026B +:10DA300089100482C0090208000000008200000072 +:10DA40000000000000000000000082000000000054 +:10DA50000000000100010001020400090020200470 +:10DA6000008400040005A104004000110003040824 +:10DA70000408800800C00503050000A08080400065 +:10DA80000510804000088520800000800000C00054 +:10DA90000000000000000000000000000000000086 +:10DAA000000005800900C0000000C1000000808067 +:10DAB00000004100800080A00580090000000000F7 +:10DAC0000000000000000000000000000000000056 +:10DAD00000000010000440200041000500C000804C +:10DAE00000008002000500808000000000000000AF +:10DAF00000000091804000008020000080880080AD +:10DB0000800000890090000000200002002000003A +:10DB10000000000000000000000000000000000005 +:10DB200000000000214040030540200080088000E4 +:10DB30000000000080020000008080000002002140 +:10DB400000000000000000000000000000000000D5 +:10DB500000000000418020004000404100000083A0 +:10DB600000020000020188044010080000000000CC +:10DB7000000000009008200090889000C00008A1DC +:10DB800090021000829020A0042082000801080565 +:10DB900090C0100000000000000000000000000025 +:10DBA000000000000000010001A000A0010004002E +:10DBB000201010A0880008008810404010000001CC +:10DBC0000000000000000000000000000000000055 +:10DBD00000000000000001040100000000010081BD +:10DBE00000000700420000810000070084000000E0 +:10DBF00000E000000000000000E00700000000005E +:10DC0000000007000000818100E007000000818122 +:10DC100000E00700420000000000000000000000DB +:10DC200000000000000000000041000007000000AC +:10DC30000000000000004842000000E000004842F0 +:10DC40000000000007000000000000E000000000ED +:10DC5000820002E000000000600000E00002000618 +:10DC60000000000000000000C3C300AA00F00FFF86 +:10DC70000000000000000000F0F03C3C0AFAFCFC50 +:10DC8000CFCFC0C0B2B2C3FFC3FFC3004D3C4D00F5 +:10DC90000C0C0C0C0000FF00000000000000000055 +:10DCA0000000000000000000000000000000000074 +:10DCB000000000090060001100220410082000008C +:10DCC0001122000000000000000000000000000021 +:10DCD0000000000000000000000000000000000044 +:10DCE00000000000000000000000C3C3F0AAACACBC +:10DCF000ACAC000000000000000000FFAAAA0AFA75 +:10DD00000C0C5F505F50B2B2003C0F550F554DFFE9 +:10DD10004DC30C0C1C0C0000FF4000000000000074 +:10DD200000000000000000000000000000000000F3 +:10DD30000100000009006000110022000140028083 +:10DD400011220000000000000000000000000000A0 +:10DD500000000000000000000000000000000000C3 +:10DD600000000000000000002828EBEB41417D414D +:10DD70007F7C4F4C0000000000000000FF0F3C556E +:10DD8000FF00FF00CF0CD7D741417D7DC0C00AFA0C +:10DD90000A0AFAFA00000000C0C041C000000000FA +:10DDA0000000000000000000000000000000000073 +:10DDB00000000000000004080102069000000410AA +:10DDC0000820240081000000000000000000000086 +:10DDD0000000000000000000000000000000000043 +:10DDE00000000000000000000000C0FCC0FC414139 +:10DDF0007D41737043400000000000000000000FF0 +:10DE00003C550000C3C3CF0C1414033F033FCFCFD6 +:10DE10000AFAC0CFC0CF9E92AAAAC0C003C0000019 +:10DE200000000000000000000000000000000000F2 +:10DE300000000000000080001020408000000690DC +:10DE4000014002800024008100000000000000006A +:10DE500000000000000000000000000000000000C2 +:10DE6000000000000000000005610A2E050D00A062 +:10DE700000610E2E000D000000610007000D000083 +:10DE800005614A0F050D00A085610A0E050D00A071 +:10DE900005610A2F850D00A00061002F800D000094 +:10DEA0000000000000000000000000000000000072 +:10DEB000000005610A2E050D00A1600000000000B1 +:10DEC000100000000007000C080005000A0805000B +:10DED00000A000610007000D000000610007800D38 +:10DEE00000000000000180020000000000000000AF +:10DEF000000000000000000400000000000030BE30 +:10DF0000F3BE00000000CFCFC0C0000000000F0F24 +:10DF10000F0F000000003C3C00FF0000000000006C +:10DF200000000000000000000000000000000000F1 +:10DF300000000000000000000000000000000000E1 +:10DF4000000000000000555500FF00000000000028 +:10DF500000000000000000000000000000000000C1 +:10DF600000000000000F003C3AFFFF00000000002E +:10DF70000000001000000000000000000000000091 +:10DF80003082F382000000005F505F50000000000C +:10DF90000F0F0F0F00000000AAAAF0F00000000011 +:10DFA0000000000000000000000000000000000071 +:10DFB00000000000000000800000000000000000E1 +:10DFC0000000000000000000555500FF00000000A8 +:10DFD0000000000000000000000000000000000041 +:10DFE000000000000000000F003C3AFF00000000AD +:10DFF0000000000000000000000000000000000021 +:10E00000000000000000000000000F3AFF3A00008E +:10E01000000000000000000000000055C30F0000D9 +:10E0200000000000000000000000000000000000F0 +:10E0300000000000000000000000000000000000E0 +:10E04000000000000000000000003C3C00FF000059 +:10E0500000000000000000000000000000000000C0 +:10E060000000000000000000F000F0F03C00AFFFF6 +:10E0700000000000000000000000000000000000A0 +:10E08000000000000000000000000000003AF03A2C +:10E09000000000000000000000000000FF55C30F5A +:10E0A0000000000000000000000000000000000070 +:10E0B0000000000000000000000000000040000020 +:10E0C0000000000000000000000000003C3C00FFD9 +:10E0D0000000000000000000000000000000000040 +:10E0E00000000000000000000000F00000003C0004 +:10E0F000A0FF000000000000000000000000000081 +:10E10000000000000000000000000000000000000F +:10E1100000000000000000000000000000000000FF +:10E1200000000000000000000000000000000000EF +:10E1300000000000000000000000000000000000DF +:10E1400000000000000000000000000000000000CF +:10E1500000000000000000000000000000000000BF +:10E1600000000000000000000000000000000000AF +:10E170000000000004000400210084004100200091 +:10E180002000840004000400040004004000880013 +:10E1900088008800040804000402210041004100B6 +:10E1A00021040000200004042000200004000400DA +:10E1B000040020000003210088002100020000006C +:10E1C0000400000088040400200000000400000097 +:10E1D00000000000000020002000200021000000BE +:10E1E0002000000082080000200000008200008063 +:10E1F000C0808480001080C08000040000002000E7 +:10E20000000000040000800080008000800000000A +:10E210000000000000048001800084012000040050 +:10E2200004000400000400004001400005008000DC +:10E230008000800000040000020000000400840050 +:10E2400000000000000000000000000000000000CE +:10E25000000000000000000080008000800020001E +:10E2600000000000000000040000000000000000AA +:10E270000020002000200005000002040000030927 +:10E280000108014085000300820002800040001068 +:10E290002000200008002000000000000000031003 +:10E2A00020000100010020800000008008A0000480 +:10E2B00000000200000001000000020002800200D5 +:10E2C0000200020002000200020000000200000042 +:10E2D00000100200000000000080000400040004A0 +:10E2E000028000000000000000800200000000002A +:10E2F0000000002000200080040500000011400004 +:10E3000020880440040004000404000005400004C8 +:10E3100000A1800080000000A084200002081100FD +:10E320000401A008200020008010000009208011B6 +:10E330004005040009000200040000000000201055 +:10E340000000040000100000008400102000000005 +:10E3500000000000000000000300000200010001B6 +:10E3600000010004000000000000000200000000A6 +:10E3700000000000000100090020800000000041B2 +:10E38000202100000010000000000000000000003C +:10E3900000080000008000000121000000100003C0 +:10E3A0000000000000000000A0210108000088001B +:10E3B0000010010000000040000300000000010008 +:10E3C0000100000000080000000000000000000044 +:10E3D000000000000000000000000008000000082D +:10E3E0000008400000050021000300050021002175 +:10E3F00000050000000200210005000801A1000046 +:10E40000000880000000000800000000000000007C +:10E410000008000000082120410004000000000066 +:10E42000000005C0411040000000000004001084FE +:10E4300000820001200000000000114000200000C8 +:10E440000400040000000800000000004100410832 +:10E45000000000002100100000A008A000A000A003 +:10E4600000A008A0030000000000000000080882CF +:10E4700000020008000000A12108000821A02020BF +:10E480000000200200090080000020002004090094 +:10E49000A041829040410809404100021004A08937 +:10E4A000C00408050102000000020800008082028A +:10E4B000C180080021808400080008000803C00013 +:10E4C000000000000100040000008210820008002B +:10E4D000C000A000A000C00001000000C009820030 +:10E4E000A000880040008200C00000000000200062 +:10E4F0000000000004008200090004000000040283 +:10E50000000020049182080011042120A100C10014 +:10E510002004000021400500C0000500100010018B +:10E520004020030100002090410003084100051035 +:10E530000000042021000404000002000084000008 +:10E5400000000000000008000000080008000800AB +:10E550000000000000001000030008000800000098 +:10E560000020000000000000210000904082000018 +:10E5700040000084000000A010A0200000080484D7 +:10E58000000811082000000000040400000800003A +:10E590000000C00000000000080090000820A080DB +:10E5A000A0201100200020008200C0008208C000CE +:10E5B000002008050804000000000000000310000F +:10E5C000000000000000C0000103008004828210EF +:10E5D00000008200A00084001000080000009011DC +:10E5E00082118400C0000000C0050811A003C00013 +:10E5F00000008208000400080008000800A10000D4 +:10E600000000000800888000100010018000000059 +:10E6100021001004000800A0000000000000080114 +:10E620000020080504908000800005A041C005047A +:10E6300000A000854000C0010000400410840000DC +:10E64000000000000000000000000800002080031F +:10E65000000000004100050000A000A0000000A094 +:10E660000000000800840000000000000088000294 +:10E670000000000000000000000000000000000496 +:10E680000000000000000004088008030409822044 +:10E69000820084008820040008200821C0000800AF +:10E6A000000008001000840000020080080400023E +:10E6B0000041402082088509200021032002012119 +:10E6C000A010A000A000000800000020000390009F +:10E6D000400008000804040000000000C0008200A0 +:10E6E00008009000C000080008000808100808058D +:10E6F000400584089005002140050808002182217A +:10E7000000080008882140210000030400004100A7 +:10E71000419005080000054005000000009000023F +:10E720004000080000000000000000040004000198 +:10E73000030100080000000004008300840080043E +:10E7400004000088008400000000000000000902AE +:10E750001100880000000000210000880000050072 +:10E76000000000000000110000000090090000906F +:10E770000000800200A040820408038203A00084FD +:10E780000484210000000008409004040000000000 +:10E790000000000000000000000000000000000079 +:10E7A00000000000000090000000000000000500D4 +:10E7B0008200000091009000000002000200900022 +:10E7C0000100020000000000000000000000004006 +:10E7D0000008404000C000000000000000000000F1 +:10E7E00000000000000040C0000889102002828262 +:10E7F00000088204A01008100002882040029082C5 +:10E800000140A088882000000000000000000000F7 +:10E8100000000200000000000000020000000000F4 +:10E8200000001100000011008000020000004020E4 +:10E83000A110C109000304008000020080008000D4 +:10E840000000030080000000000000000000000045 +:10E85000400009808000000000000000000000006F +:10E86000200000000000000003004180A000000024 +:10E8700009800500400000000080030080000000C7 +:10E880000000100040000000000000000500000033 +:10E890000004000000050000000900000005000061 +:10E8A00000000000000000800003000000410000A4 +:10E8B0001009A00003054110802000000004800022 +:10E8C0000020008000050080000000000000000023 +:10E8D00000000000008000000000000000000000B8 +:10E8E00000000000800080008000100040A110A007 +:10E8F000A080114083A021900380900510C0088063 +:10E900009080100003912000A08080000000800013 +:10E910008000000100400000002000000082000094 +:10E920000040080090208200820400010082000064 +:10E93000008211201040A00085090201908204018C +:10E94000822000000004000000040000008200009B +:10E9500000400000000000040000008200000000F1 +:10E96000000000009000020040001000200089C05C +:10E97000080509C0C00020C0020308C009000983BF +:10E98000410409C0110010C0A08802C00800208402 +:10E9900008001020010020000800010001004000D4 +:10E9A0004000000000000000400000000000C00027 +:10E9B0008400010000010901840000010020A01072 +:10E9C000404001A0004004840484002000000000B6 +:10E9D00082000000000020000091040040000000C0 +:10E9E0000000000000000000000000000000110313 +:10E9F00000C0C011028389044021C0858804A0039F +:10EA00000008C041081089020004C0090241010049 +:10EA10000000200001004100000080000200020010 +:10EA20000000000005002000000080000000090038 +:10EA30008000000041000321881010200520040000 +:10EA40000080008004002000800080000500090094 +:10EA50000000000000000000052000208040004071 +:10EA600000000000000000000000000000000000A6 +:10EA7000C120000480A1809041A000908021200549 +:10EA80004120008580A10085410800C080A10510BB +:10EA9000040000000000040000000011000000005D +:10EAA00000000009000000000020000200800000BB +:10EAB0000000000800090080038004110380110990 +:10EAC00000110089000000000000000300000000A9 +:10EAD000000000090000000000000000001100001C +:10EAE0000000000000000000000000000080008026 +:10EAF0000000800880050000000200820000800005 +:10EB0000000280C08080808000008089009080802A +:10EB10008003001000C000000000000000000000A2 +:10EB200000000000000000000000000100C0000420 +:10EB30000000000000000000000801840120000225 +:10EB40000000000100020090000000000000000032 +:10EB50002000000000000000000000000000000095 +:10EB60000000000000000000000000000000001095 +:10EB70000002000008402002024010011010200492 +:10EB80000888100004C0040208108800040420094A +:10EB9000408210010001002000900000000000E011 +:10EBA00007006000000000E0070000000000000017 +:10EBB00007000000000000E007008206000000E0FF +:10EBC00007000000004100E007000000000000E036 +:10EBD0000700000000000000070000000000000027 +:10EBE000000007000000000000000000000000001E +:10EBF000000000000000000000000000484250003B +:10EC000000E00000484200000000000041425000C7 +:10EC100000E000004842000A00E007000000000099 +:10EC200000000000000000000000000000000000E4 +:10EC300000000000000000000000000000000000D4 +:10EC4000000000000000000000008181033FC3C3FA +:10EC5000C3C3000008000000000000000000000026 +:10EC6000000000000F0F0F0F000000000000000068 +:10EC700000000000000000002004100828004100EF +:10EC80002800002820401080A000050020401080AF +:10EC9000A00500002200002200000000000000008B +:10ECA0000000000000000000000000000000000064 +:10ECB0000000000000000000000000000000000054 +:10ECC000000000000000000000000000BDBD033F88 +:10ECD000C3C3C3C300000000000000000000000028 +:10ECE0000000000000000F0F0F0F000000000000E8 +:10ECF0000000000000000000000040028001002829 +:10ED00000041410000410402080100A00005040286 +:10ED100008010000A0051100001100000000000023 +:10ED200000000000000000000000000000000000E3 +:10ED300000000000000000000000000000000000D3 +:10ED400000000000000000000000000000000000C3 +:10ED500000000000000000000000000000000000B3 +:10ED600000000000000000000000000000000000A3 +:10ED70000000000000000000000000000000000093 +:10ED80000000000000000000000000000000000083 +:10ED90000000000000000000000000000000000073 +:10EDA0000000000000000000000000000000000063 +:10EDB0000000000000000000000000000000000053 +:10EDC0000000000000000000006699FF0000000045 +:10EDD0000E6E9EFE0000000000000000000000001B +:10EDE0000000000000000000000000000000000023 +:10EDF0000000000000000000000000000000000013 +:10EE0000A0050000884410082004440000441008B5 +:10EE100020044020020410200804102008040000F0 +:10EE20000000F303F30300000000000000000000F6 +:10EE300000000000000000000000000400000000CE +:10EE4000000000000000000000001E1E1E1E00004A +:10EE50000000086898F800000000000000000000B2 +:10EE600000000000000000000000000100000000A1 +:10EE70000000000000000000000000008000000012 +:10EE8000A00500008844000080014002880000883E +:10EE90008001400280100108804001028040010290 +:10EEA00000000000F9F9090905610A0F050D00A02D +:10EEB00005610A0F050D00A005000A08050000A164 +:10EEC00005610A0F050D00A005610A0F050D00A0E0 +:10EED00005610A2F050D00A005610A0F050D00A0B0 +:10EEE00005000A08050000A0000005614A0E051D86 +:10EEF00000A0000000000000000000000000000072 +:10EF0000000060610006000D100000610007800D28 +:10EF1000080060610006000D100000610007800D10 +:10EF2000280005610A2F050D00A000000000000068 +:10EF300000000000000000000000000000000000D1 +:10EF4000000000000000000000007F752F2530FA4F +:10EF50003FFA000000000000000000000000000078 +:10EF600000000000000000000000000000000000A1 +:10EF70000008000000000000000000000000000089 +:10EF80000000000000000000AAAAAAAA00000000D9 +:10EF900000000000000000005500550000000000C7 +:10EFA0000000000000000000000000000000000061 +:10EFB0000000000000000000000000000000000051 +:10EFC0000000000000000000000000007A702A200D +:10EFD000300A3F0A000000000000000000000000AE +:10EFE0000000000000000000000000000000000021 +:10EFF0000000000000000000000000000000000011 +:10F0000000000000000000000000AAA8AAAA00005A +:10F010000000000100000000000055005700000043 +:10F0200000000001000000000000000000000000DF +:10F0300000000000000000000000000000000000D0 +:10F040000000000000000000000000000000D714D5 +:10F05000CFCF7D3C404000000000000000000000D9 +:10F0600000000000000000000000000000000000A0 +:10F070000000000000000000000000000000000090 +:10F080000000000000000000000000000000000080 +:10F0900000000000000000000000000000FC00FF75 +:10F0A0000000000000000000000000000000000060 +:10F0B0000000000000000000000000000000000050 +:10F0C0000000000000000000000000000000000040 +:10F0D000D7140C0C4100404000000000000000006C +:10F0E0000000000000000000000000000000000020 +:10F0F0000000000000000000000000000000000010 +:10F1000000000000000000000000000000000400FB +:10F11000000000000000020000000000000000FFEE +:10F1200000FF0000000001000000000000000000DF +:10F1300000008400200000002010040004000400EF +:10F140000400000088008400400303002100210027 +:10F1500020000400000004008402200020002100A0 +:10F1600020000400000004004000210020002100D5 +:10F17000210000030000890089008900040040008C +:10F1800088004000100020801000110000000000E6 +:10F190000000C0000400040088000400000088098A +:10F1A000000040002000200020002000200010006F +:10F1B00010001000200089000400840180008000FD +:10F1C0008000800020000000000080008400820099 +:10F1D0008200A00000000000830000010000000089 +:10F1E00020000000800000008000040020000900D2 +:10F1F0002000200000000400040004000400C000FF +:10F2000000000400040084008008800084000000E6 +:10F210000400040000008000800000008000200046 +:10F22000000000000000000000000000000080005E +:10F2300080008000800001000200010000800100C9 +:10F240002000000000800100000001000000030019 +:10F250000100000001800000031000000200010016 +:10F260000000008001000200010000000100000019 +:10F27000000000000000000000000080000000000E +:10F2800002200080008000000000010082000000D9 +:10F2900008000000000000000000008000800080E6 +:10F2A00000800000000000000000000000000000DE +:10F2B0000000000000000000200009000408000217 +:10F2C0002040820005000002040000000400050048 +:10F2D00020080400028404022000200800404100AD +:10F2E0002008098409102000008404002084040000 +:10F2F00000100410001000100000000000200000AA +:10F3000000082009202020200000208404000000A4 +:10F3100000000000000000000000000800200020A5 +:10F32000002000022000000000000000000000009B +:10F33000000000000000000020008200000801031F +:10F34000014100080000C008002100080011100859 +:10F350000003040000088208000882210000010068 +:10F360000003000500089041900000034000904019 +:10F370000000000300030005002100000020000041 +:10F38000000800020000A000000000200000A00013 +:10F3900001000000000000000000008000200000CC +:10F3A0000000000000000800000000000000000055 +:10F3B00000000000004100210000000903000800D7 +:10F3C00020000200210021002100000011000000A7 +:10F3D000000010000300050003000000030000000F +:10F3E000040003082182000000A003000500800043 +:10F3F00000010000410000000000000000000001CA +:10F4000000000000210103002000000000010900AD +:10F41000000004000800020010004000100241013A +:10F42000000405000084008400000304038400003D +:10F430002100030003A01108000000000000830069 +:10F4400021108510010082820000C00200808240ED +:10F45000C1050800100082000200040040400000C6 +:10F46000A0204021822083002111020240080010C8 +:10F47000A0008200820004002000040000000000C0 +:10F4800004009004200004801000402001000900C6 +:10F49000410040002040C100080082000800080030 +:10F4A0000000200008000800000082008400010025 +:10F4B00000009000000000000100010005000100B4 +:10F4C000040004042000040004400090040004042C +:10F4D0000340048441000000030000048300110580 +:10F4E0000000080103004001100090000088210185 +:10F4F00021014100008803000300C000090003202F +:10F500000000A00041098000080400000001040080 +:10F51000040020000000880020000000000000001F +:10F520000000000000000000000000880000210032 +:10F53000200000000000000000001000200020005B +:10F5400020002000820000000803000020082004A2 +:10F550008211902108008203002182000021820490 +:10F56000080020418200208008001041100010088F +:10F570008205010008000000080200000011C080A0 +:10F5800000030000200800000020202008020000E6 +:10F59000C000C0000080000000000000080008005B +:10F5A0000000820084000800C000820000001000FB +:10F5B0000880088000008241000000110103000063 +:10F5C0008200904100000000000000000000800068 +:10F5D0008000000021000000000000C000000000CA +:10F5E0000000000083000000830405008300800009 +:10F5F000A000400008000000000000000000000023 +:10F6000000040000000088000000000180010000EC +:10F6100000000000000000200000000008000300BF +:10F6200010100500000021C008100500000840A0CF +:10F630000000084008020588100821042184040005 +:10F64000000003000000040004041000A0020200F7 +:10F650000011000908900200100000200980A0009D +:10F66000080300000000A100209100000900020032 +:10F67000101102000000000800000000002100023C +:10F6800040110002200400000000108088040000E7 +:10F6900004008202000000000000000000000000E2 +:10F6A00020008204000010004000840004002000BC +:10F6B00082009000900004100041A0002000004152 +:10F6C0000008000090118805000008851100001056 +:10F6D000020020C02000100500000384110040201B +:10F6E0000300000003C0110004C0850209002000CF +:10F6F00041020000000000001000030000000000B4 +:10F70000000000900300A0000000000000040801B9 +:10F7100000000000000000000000000000000000E9 +:10F720000000000000000000000000000000800059 +:10F730000000000000000000000000000000008841 +:10F7400000000000000000004000A1C0A089830369 +:10F75000A002900003010300820000000000C0002E +:10F760000000000000009000000001019000050072 +:10F7700000000200C000010002001102400200214E +:10F780000209000000000100000000000100080064 +:10F790001100000000000000000000000001000057 +:10F7A0004100000000000100820000008200000013 +:10F7B0000000C00090A14002098802100802001059 +:10F7C0000008C008010100008200000091058320AC +:10F7D00088200085804021088210800500004000BC +:10F7E000000000000000090011000000114103109A +:10F7F00020410003800000000300000320880089EE +:10F8000000218008000000004000000000001100FE +:10F81000A10083000000000000000000000005417E +:10F82000032184040000000002000000000000002A +:10F8300000000000800000042091032080820080EE +:10F840000080008000801041052005200000850315 +:10F850001091C105051040031100910985050000B4 +:10F860000000000000800020008000020000400531 +:10F8700003002002090300080300000800000080C4 +:10F8800000820080009100080000001000000000CD +:10F890000004000000400080000000800000000024 +:10F8A0000580080040004100200010000800020010 +:10F8B0000000000080000080100008880200108016 +:10F8C0008000008480800080080005004100410025 +:10F8D000888800040210A090024010080400040868 +:10F8E0000000008200000004900000040001008875 +:10F8F000002000820001010900000000000000005B +:10F9000000C00021000200C0000000000000000054 +:10F91000000000010008000000C00000000400001A +:10F92000008200040088000001880100010000003E +:10F93000010004008440A000C004050020C1039021 +:10F9400021C0080008C01002C0C000200000000054 +:10F9500001009041410982080509014140030291DB +:10F960000111010000018401000188008288080063 +:10F97000000101008400900100000040900300405D +:10F980000182900400A0080420080000200000006C +:10F990000100000001000401C0000001010000009E +:10F9A00004000000010000008400010100000000CC +:10F9B00000010001002000208402008805C101C070 +:10F9C000C083C082838800C0C08202A00101000001 +:10F9D00004000001042140054183848541212082E7 +:10F9E000A02102A002050010802003400340002156 +:10F9F000000305200211030841214020000000857A +:10FA00000080080009802080C18003800000800001 +:10FA10000000100000002020801000084008400076 +:10FA20000000800000002040200080001041000005 +:10FA30000021002100084000000080800300C10870 +:10FA40002003902105A041000000800080004011AB +:10FA500041040004004105081009882185080800B8 +:10FA600008C002004003000000090000000000027E +:10FA700000110000000041841109080940850002BE +:10FA800005000000000021088804020010000008A2 +:10FA90000000000000000000000200210000000043 +:10FAA0000000000200000000414003094000000087 +:10FAB0000040000000000010004000050000008031 +:10FAC000008000840000001080038000000000001F +:10FAD00041C0412120000008880203400241040186 +:10FAE00001A0000300100100000000000000000061 +:10FAF000000000000000880001A100000101009149 +:10FB0000000000000000000083018200A100C1008D +:10FB100000000000000000000000000100000000E4 +:10FB200000000000000100000000010000000000D3 +:10FB3000000000210000000000000001009000A073 +:10FB400000A00284080404C0100104002020042046 +:10FB500004000140000000000001000000E0070078 +:10FB60000000000000E00700410000000000070066 +:10FB70000000000000E007000000000000E00700B7 +:10FB80000000000000E0000000000000000007008E +:10FB9000820A000000E0000000000000500A00E0BF +:10FBA0000700000A000A000007000000810000E0D2 +:10FBB00007000000000000000000000000810000BD +:10FBC00007000006000000E00000484200000000BE +:10FBD00000004842500A00E007020000CDC10D01BC +:10FBE000E8E8E8E800000000C8F8CBFB00000000EF +:10FBF000000000003C3C0000F0F0000000000000AD +:10FC000000000000000000001414CF0C00000000F1 +:10FC100000000000000000000000000000000000E4 +:10FC200000000000000000000000000000000000D4 +:10FC300000000000000000000000000000000000C4 +:10FC40000000000000002400002404100820000030 +:10FC50000960028008200000000000000000FDF1A3 +:10FC60003D313C00FFC30000000008380B3B0000A2 +:10FC70000000000000003C3C0000F0F0000000002C +:10FC800000000000000000000000D7D7CF0C0000EB +:10FC90000010400000000000000000000000000014 +:10FCA0000000000000000000000000000000000054 +:10FCB0000000000000000000000000000000000044 +:10FCC000000000000100000081000081014002806E +:10FCD0000960000001400410000000000000000066 +:10FCE0007F3E6B2ABEFFBEAA00000000D2D200AA4F +:10FCF00000000000000000000000FFFF00003C3C8E +:10FD000000000000000000000000000000000000F3 +:10FD100000000000000000000000000000000000E3 +:10FD200000000000000000000000000000000000D3 +:10FD300000000000000000000000000000000000C3 +:10FD40000000000000000000000004011040060058 +:10FD500000060408102006900000000000000000CB +:10FD6000000057164302BEFFBEFF00000000D2D2C3 +:10FD700055FF00000000000000000000000000002F +:10FD80003C3C0000000000000000000000000000FB +:10FD900000000000008000000000000000000000E3 +:10FDA0000000000000000000000000000000000053 +:10FDB0000000000000000000000000000000000043 +:10FDC0000000000000000000000080000802208009 +:10FDD00090000090010240800000069000000000AA +:10FDE0000000000005614A0F051D00A005610A0F13 +:10FDF000051D00A005610A0E050D00A015612A0F62 +:10FE0000054D00A805610A0F050D00A000000007C0 +:10FE1000000C000085610A0E050D00A000610007BE +:10FE2000000D0000000005610A2F850D00A00500EF +:10FE30000A28050000A005000A09850000A000614D +:10FE40000006000D000005000A28050000A0606102 +:10FE50000007000D10000000000000000800051061 +:10FE6000002980020000B2B2003CF3050305828243 +:10FE7000D7D7878755000000000000002000000051 +:10FE8000000017173C0028EBC0C00000F50500007B +:10FE9000FF00F0F000000000000000000000000083 +:10FEA000000000000000000000000000F131C1016E +:10FEB00000000000000000000A0AAA0014145555B2 +:10FEC0000000000000000000000000000000000032 +:10FED0000000000000000000000000000000000022 +:10FEE000000F00553CFFAA00B2B2C3FFF3F503F5C3 +:10FEF000A0F5A0F58787FFAA000000000000000021 +:10FF0000000000001717FFC328EBFCFC0000F30300 +:10FF10000000FF00F0F00000008000000000000082 +:10FF20000000000000000000000000000000FD3D97 +:10FF3000CD0D00000000000000000A0AAA00141401 +:10FF400000000000000000050000000000000000AC +:10FF500000000000000000010000000000000000A0 +:10FF60000000000F0055F0FFAA00303082BE4D4D5A +:10FF70003C008282C0FC1717C30000000000000094 +:10FF800000000000000000000000282830F338F8CE +:10FF90003BFB00003C3CF0F00000000000000000D3 +:10FFA0000000000000000000000000000000000051 +:10FFB0000000000000000000000000000055000FDD +:10FFC00000C3C0C0000000000000000000000000EE +:10FFD0000000000040E04AEA0100000000000000CC +:10FFE00000000000AA000A0A0000FFFFF3F382BE2F +:10FFF0004D4DFFC3BEBEC0FC1717FF3C0000000004 +:020000040010EA +:10000000000000000000000000000000EBEB30F3F7 +:1000100008C80BCB00003C3CF0F0000000000002E0 +:1000200000000000000000000000000000000000D0 +:10003000000000000000000000000000000000556B +:10004000000F00C3C0C0000000000000010000005D +:1000500000000000000045E54FEF00000000000038 +:10006000000000000000AA000A0A3C3CA0AF2000EB +:1000700020008400200088000502844000048400E1 +:10008000200084008400840004000404041085001F +:10009000010085102100880002008800040420006F +:1000A000200020000400040020002004200400039D +:1000B0000000000020002010048004200020040420 +:1000C00020002000840084008400000000008404DC +:1000D00000000000000020000200000002000200FA +:1000E00000002000840000802000000000002002AA +:1000F0008000000000000000040020000201408495 +:1001000000000000000000000900090000000009D4 +:1001100004000400040004000000200000000000AF +:1001200000000000000000000000000000000000CF +:100130000000000004000000040100200001000194 +:1001400000020000040000000000000000000000A9 +:10015000000800000000090000000000000000008E +:10016000000000000000000000100000000000007F +:10017000000002002000010004000300030004004E +:100180000204000002000000821000004000000095 +:100190000280000020000088840200008800000027 +:1001A000840000000400000000002100050005009C +:1001B00001000000202003000200020000000200F5 +:1001C0000400008000000400008000200000000007 +:1001D000020000000000000000000000000000001D +:1001E000040000000000000000000000000000000B +:1001F000000000000400A0002008028804000400A1 +:1002000080000403020820000008090000008000AC +:10021000000000022008049000040009004000844F +:1002200000000000008220000008200020002000C4 +:1002300020002002000080092090008400100008A7 +:1002400000000000002000108010002000010000CD +:10025000000000000000000809000000000000107D +:10026000001000000000000000000000000000007E +:1002700000000000000440410000000000080008E9 +:100280000005000008000802000000000000002037 +:100290000000A000202000000008000382000400ED +:1002A000040000000421840800080203202100004B +:1002B00000090000004100000000000000000020D4 +:1002C000000000000000000000800000001000009E +:1002D00000008800820000000000A0000800C000AC +:1002E00082000800000000008200A0000000000062 +:1002F000000000000000000000082184400200828D +:100300000040004000880000038809A000A0000011 +:1003100011012000110083400000000000000000D7 +:100320008808A1002100C1000000008280008090A8 +:10033000080000000000008200000000000400002F +:100340000001000008000000000000204100410002 +:1003500010000300080041000000000041000800F8 +:100360002190030000000300050008000500088438 +:1003700008100000000000000000830004040011C9 +:10038000110484108202820409208804C004A0049D +:100390000404040020400804000000040004820457 +:1003A0009004210083004100110900000000820038 +:1003B000000082008200A004000000000000400055 +:1003C0008204A004090001000800000000000800E9 +:1003D0000800000008400000400000000400000089 +:1003E00000000200080002000000000002000000FF +:1003F000020082008200000000000000048840002B +:100400002020040108C11000024020010001030166 +:1004100000890041030003000000080020011101D1 +:100420000091001104000400048404000400000092 +:1004300010000000000000000000000000000000AC +:1004400000000001000104000400000000000000A2 +:100450000000000004000000000000000000000098 +:10046000000000000000000000000000000000008C +:100470000000000000000000000000000000000577 +:10048000040900000000008020002011000000008E +:10049000000088000000008000800080410083216F +:1004A0000000082100000000C011208000008880AA +:1004B0000080008082000011004100000000000068 +:1004C0000080000000200402000000000800080076 +:1004D0000000008001000880880000000800000083 +:1004E000000000000000000000000000000000000C +:1004F000000000000000000000800000000000007C +:1005000000A0A00841100210000490028090008812 +:10051000080041000000200000200420002004907A +:100520002000030000000088409000000020000828 +:100530000004000400040500000005001100210073 +:100540000000082000000001800000000000000002 +:10055000000000000020040021200990000000009D +:10056000000000C00500000000000000099003002A +:100570000810001000080000210000040000000026 +:1005800021C0000210410100000200210008020009 +:100590000000C000200908200800400040000100C1 +:1005A00084000000A02108000000840040000841F1 +:1005B000C00440004000042082000000000000044D +:1005C0004000000000000009000000004002000898 +:1005D00001000900000000000000000000002000F1 +:1005E00000000800000000000000000000000800FB +:1005F00000008400000000000000400000008200B5 +:1006000000090000009000C004200000410200002A +:100610000888050200000000000000000000080239 +:1006200004000000000000000000000000000000C6 +:1006300000000000000000000000020000000000B8 +:1006400000000000000000000000000000000004A6 +:100650000000040004000000000000000000000092 +:10066000000000000000000000000000000000008A +:10067000000000000000000000000000000000007A +:100680000000000000000000A000010000000100C8 +:100690000000010000000000000001000000C00494 +:1006A000910488A040A00001A00083010000000088 +:1006B000000000000000032000900010208810902F +:1006C000821001C0821000000000900001000000B4 +:1006D000000000000000000000000000000000001A +:1006E000000000000000000000000000000000000A +:1006F00000000000000000000000000000000000FA +:1007000000000000000000000000000040000000A9 +:100710002000000040000000000000004000000039 +:10072000A0809080400080001002881084020009A0 +:10073000000000000000000091000000090000001F +:100740000000000004008000000011008000020092 +:100750000000000000000000000000000000000099 +:100760000000000000000000000000000000000089 +:100770000000000000000000000000000000000079 +:100780000000000000000400000000200080004085 +:10079000008000200005009000800004000000049C +:1007A0000000000080098009801102202100024021 +:1007B00010040000000000000000000500A10085FA +:1007C00080808004808900C08080000000200000BC +:1007D00080410080000000000000000000000000D8 +:1007E0000000000000000000000000000000000009 +:1007F00000000000000000000000000000000000F9 +:1008000000000000004000000000000000000002A6 +:100810000000000400000090004100C00001000042 +:100820000001000082104040A0090411010200886C +:10083000010001880000004000000082100088C014 +:10084000909004C0040010C0900202C0000082001A +:10085000208282008204000000400000008200002C +:100860000040000000400000000000000000000008 +:100870000000000000000000000000000000000078 +:100880000000000000000001000000000000010066 +:1008900020000400000001004000200000000000D3 +:1008A0000400000000000803002090A111A1010035 +:1008B0008400110100010100000008000000A108EF +:1008C0000408C08891A0830890A0C0A02008000060 +:1008D0000000C000400000000000020040000000D6 +:1008E00000000000400000000000000000000000C8 +:1008F00000000000000000000000000000000000F8 +:100900000000000000000000000000008400000063 +:100910004100000080004000400000000000400056 +:10092000000000000000040040840011002084202A +:1009300020050321A0210502040000008000000022 +:1009400041008000800082004100000080004000E3 +:10095000000009008000000041004000800000000D +:100960000000050000000000000000000000000082 +:100970000000000000000000000000000000000077 +:100980000000000000000000000000000000000067 +:1009900000000000000400000000000080040000CF +:1009A00000000000000000000000202020A00280C5 +:1009B000100002A1084002000211000000400000E7 +:1009C00000008000800000000000000000800000A7 +:1009D00000000000000000A0000000000000000275 +:1009E00000000000000000080000000000000000FF +:1009F00000000000000000000000000000000000F7 +:100A000000000000000000000000000000000000E6 +:100A1000000000000000000000000000A00008002E +:100A2000A000A00000000000000000008901A1A0BB +:100A3000A140C10001C1010101000001000000014D +:100A40000000000002009020089008002000100420 +:100A50008808880000000000000800C000000000B6 +:100A60000001000000000000000000000000000085 +:100A70000000000000000000000000000000000076 +:100A800000000000000000000000009000000000D6 +:100A9000000000000000000000E0070082000000ED +:100AA00000E007000012000000E0000000008800E5 +:100AB00000E007008200000000E0070042000000A4 +:100AC000000007000000000000E0000048420000B5 +:100AD00000E0000048420000000000E00700820043 +:100AE00000000000070000000000000007000000F8 +:100AF00000000000000000000000000000000000F6 +:100B000000000000000000000000000000000000E5 +:100B1000840000E000000000000000000000000071 +:100B20000000004000000000000000000000000085 +:100B3000FC6F0C6FF03C66FF00000000000000003E +:100B40000000000000000000A0050000A00000A0C0 +:100B500020100408284100000000000000000000F0 +:100B60000000000000000000000000000000000085 +:100B70000000000000000000000000000000000075 +:100B80000000000000000000000000000000000065 +:100B90000000000000000000000000000000000055 +:100BA0000000000000000000000000000000000045 +:100BB0000000FC600C60F03C6600000000000000DB +:100BC000000000000000000000000000A00505007B +:100BD00000054080020100002841000000000000E4 +:100BE0000000000000000000000000000000000005 +:100BF00000000000000000000000000000000000F5 +:100C000000000000000000000000000000000000E4 +:100C100000000000000000000000000000000000D4 +:100C200000000000000000000000000000000000C4 +:100C300000000000000000000000000000000000B4 +:100C400000000000000000000000000000000000A4 +:100C50000000000000000000000000000000000094 +:100C60000000000000000000000000000000000084 +:100C70000000000000000000000000000000000074 +:100C80000000000000000000000000000000000064 +:100C90000000000000000000000000000000000054 +:100CA0000000000000000000000000000000000044 +:100CB00000000000000070737C7F0CCF0CCF0000A0 +:100CC000000000000000000000000000000000A084 +:100CD000000500A00005440000444020020400007C +:100CE00000000000C3FF4E4E0000000000000000A6 +:100CF00000000000000000000000000000000000F4 +:100D000000000000000000000000000000000000E3 +:100D100000000000000000000000000000000000D3 +:100D200000000000000000000000000000000000C3 +:100D3000000000000000000040434C4F2424E7E77F +:100D400000000000000000000000000000000000A3 +:100D5000A0000500A00005008800008880100108A0 +:100D6000000000000000003C4E4E000000000000AB +:100D70000000000000000000000000000000000073 +:100D80000000000000000000000000000000000063 +:100D9000000000000000FFFFFFFF00000000000057 +:100DA000000005610A0F050D00A085610A0F050D01 +:100DB00000A000610007000D000085610A0F850D8D +:100DC00000A005610A0F050D00A005000A08050036 +:100DD00000A060610007000D100000610007000D19 +:100DE0000800000005610A0F050D00A005000A08B3 +:100DF000050000A005000A08050000A00000000092 +:100E000000000000000000000000000000000000E2 +:100E10000000000000000000000000000065000766 +:100E2000800D000000000000000000000000000035 +:100E3000000000000000000000000000FF553C0F13 +:100E40000FC35500C0CFA0A01414CF0C00000000A9 +:100E50000000000000000000000000000000000092 +:100E60000000000000000000000000000000000082 +:100E70000000000000000000000000000000000072 +:100E80000000000000000000000000000000000062 +:100E90000000000000000000000000000000000052 +:100EA0000000000000000000000000000000000042 +:100EB00000000000000000000000000000000055DD +:100EC0003C0F0FC355FFC0CFAFAFD7D7CF0C00003B +:100ED0000000000000000000000000000000000012 +:100EE0000000000000000000000000000000000002 +:100EF00000000000000000000000000000000000F2 +:100F000000000000000000000000000000000000E1 +:100F100000000000000000000000000000000000D1 +:100F200000000000000000000000000000000000C1 +:100F300000000000000000000000000000000000B1 +:100F400000000000000000000A0A03F3173C17002D +:100F50000000000000000000000000000000000091 +:100F60000000000000000000000000000000000081 +:100F70000000000000000000000000000000000071 +:100F80000000000000000000000000000000000061 +:100F90000000000000000000000000000000000051 +:100FA0000000000000000000000000000000000041 +:100FB0000000000000000000000000000000000031 +:100FC00000000000000000000000FAFA03F317FF21 +:100FD00017C3000000000000000000000000000037 +:100FE0000000000000000000000000000000000001 +:100FF00000000000000000000000000000000000F1 +:1010000000000000000000000000000000000000E0 +:1010100000000000000000000000000000000000D0 +:1010200000000000000000000000000004000000BC +:10103000042020000400000000092000200004809B +:1010400020002000000020000400820000000000BA +:101050000000000004000400000004000400000080 +:1010600020000000840020000400040000030000B1 +:101070000400040004002000820000002000200082 +:101080000000200000000000200000000000000020 +:101090000000000000200000000000000000000030 +:1010A00000000000000000002000000000008000A0 +:1010B00020000901090000000000000000000000FD +:1010C000000400000002000009000000000004000D +:1010D0000000000004040000000000000000000008 +:1010E00020000000000004000402000020000000B6 +:1010F00000000000000000000000200000000900C7 +:1011000000000000000000000000090000000500D1 +:1011100000000400000000000000000000000000CB +:1011200000000000000000000000040000000000BB +:101130000000000090008800000000800000020015 +:101140008200000000800000000004000000000990 +:10115000008000009000000000000000000000007F +:10116000000000000000000000000000000000007F +:10117000000000000000000000000300000001006B +:1011800000000200000082000000020000000000D9 +:10119000000000000000000000000000000000004F +:1011A000000000000000000000000000000000003F +:1011B00000000000000041080004000000041100CD +:1011C0000000000000100504000000000000000006 +:1011D00000084104000000020000000000000400BC +:1011E000000000000000000004900010000000005B +:1011F00000080000000000000000000004000000E3 +:101200000400000000000000000000820000000058 +:1012100000000008000000000000000000000000C6 +:10122000000000000000000000000000000020009E +:101230000000000800008880C000850000802002B7 +:10124000A0002000000000000000000000000000DE +:10125000000008000080000008008200C0000000BC +:10126000C000C000820000008200A00040004000DA +:10127000000000000000000082000000820000006A +:1012800000000000000000008200000400000000D8 +:101290000000080000000000000008000000A0009E +:1012A000A00082000800820082000000C000A000B0 +:1012B00000000000000003000020080004000004FB +:1012C00080010002800008002104210003002108A1 +:1012D0000000004000840304000000040020088295 +:1012E0000000030008000000030400000240110495 +:1012F00021040800008800000088000200A000000F +:10130000000000000000004000000000000000009D +:1013100000000300000000000000000000000800C2 +:1013200000000800000000000000000000000000B5 +:10133000000000000000000000808200A011822058 +:10134000000082000041084104200120002040806C +:101350009000000088000000040220020400000049 +:10136000820001040400A000000008000000080042 +:10137000000000000000100000000000200000003D +:10138000000000800400000000A000000000000039 +:101390000000040004000400000004000800000035 +:1013A000000000000000000000000000000000003D +:1013B00000000000000000000000052011000900EE +:1013C0004091000000002000800040012002002128 +:1013D00000040000400000000000000000000000C9 +:1013E00000000000040480000000400040004000B5 +:1013F00040000000000000000000000000000000AD +:10140000000000000020000000000021000000009B +:1014100000000000000000000000000000000000CC +:1014200000000000000000000000000000000000BC +:101430000000000000000000000000001008204034 +:1014400000A01005208500000100000000800000C1 +:1014500020000000000082000000A00008000480BE +:1014600020000480000000000000000008000000D0 +:101470000000000800000000000000000000000064 +:10148000000000000000000000000000000000005C +:10149000000000000000000000000000000000004C +:1014A0000000000000000800000000000000000034 +:1014B00000000000000000000000000000008000AC +:1014C0008000000580000804030020000084100450 +:1014D0000884800000000200034000C000040020D7 +:1014E0000004C1840804040041000000000002045C +:1014F000024003002190034020000004030200008A +:1015000000000000000000000000000000000000DB +:1015100000000000000000000800000000000800BB +:1015200000000000000000000300030000000800AD +:1015300000000000080000000000000000000000A3 +:10154000018411808591A1800000100040090020D5 +:101550002040010000202188000000090000000058 +:1015600000000000000020040100000000052080B1 +:10157000000004000009000000000000000000005E +:1015800000000000000000000000000000800000DB +:101590000000000200020000000000000000000047 +:1015A000000004000800000000000000000000002F +:1015B0000000080000000000000000000000000023 +:1015C0000000200990042008200809021190000062 +:1015D00011024000040400008420002000000000EC +:1015E00003004100000000000001040000040000AE +:1015F00000200504000000000000000000000302BD +:101600004100000000000000000005000000002074 +:1016100000000000000000000000000000000000CA +:1016200000000000000000000000000000000000BA +:1016300000000000000000000000000000000000AA +:101640000000000000009000010000000000040104 +:101650000100000101002000000000000000000067 +:101660000000000000000000010000000000000079 +:10167000000000000000000000000000000000006A +:10168000000000000000000000000000000000005A +:10169000000000000000000000000000000000004A +:1016A000000000000000000000000000000000003A +:1016B000000000000000000000000000000000002A +:1016C0000000000000001100800040110000002018 +:1016D0008003020300401100800040000000000071 +:1016E00000000000000003000000040000000000F3 +:1016F00000000000000000000000000000000000EA +:1017000000000000000000000000000000000000D9 +:1017100000000000000000000000000000000000C9 +:1017200000000000000000000000000000000000B9 +:1017300000000000000000000000000000000000A9 +:10174000000000000000000000080000044100004C +:10175000008400008020008300040000000200805C +:101760000000000000000000000200000041000036 +:1017700000000000000000800000000000000000E9 +:101780000000000000000000000000000000000059 +:101790000000000000800000008000000000000049 +:1017A0000000000000000000000000000000000039 +:1017B0000000000000000000000000000000000029 +:1017C00000000000000000000000000100400100D7 +:1017D00000409003A000A0008205000100880001E5 +:1017E00000020000000000000000000100000000F6 +:1017F000000000000082000000C0000000000000A7 +:1018000000000000000000000000000000000000D8 +:101810000000000000000008000000C00000000000 +:1018200000000000000000000000000000000000B8 +:1018300000000000000000000000000000000000A8 +:101840000000000000000000000000000000C001D7 +:101850000400010000828300000000A0010040009D +:1018600020000000000000000000000000008200D6 +:1018700000000100010000008400000000000000E2 +:101880000000000000000000000000000000000058 +:101890000000000000000000000040000000000008 +:1018A0000000000000000000000000000000000038 +:1018B0000000000000000000000000000000000028 +:1018C0000000000000000000000000000000040014 +:1018D000804000004100000005000300400041007E +:1018E0000000800040000300000000000000000035 +:1018F00000000000020002000000000000000000E4 +:1019000000000000000000000000000000000000D7 +:10191000000000000000000009000000800000003E +:1019200000000000000000000000000000000000B7 +:1019300000000000000000000000000000000000A7 +:101940000000000000000000000000000000000097 +:1019500000000440000000802100400020802000A2 +:101960000000000400000000000000000000000073 +:101970000000000000000000000000040000000063 +:101980000000000000000000000000000000000057 +:1019900000000000000000000000002000400000E7 +:1019A0000000000000000000000000000000000037 +:1019B0000000000000000000000000000000000027 +:1019C0000000000000000000000000000000000017 +:1019D0000000000001000000009001000008000865 +:1019E00000000000000100000000000000000000F6 +:1019F00000000000000000000000000000010000E6 +:101A000000000000000000000000000000000000D6 +:101A100000000000000000000000000000010001C4 +:101A200000000000000000000000000000000000B6 +:101A300000000000000000000000000000000000A6 +:101A40000000000000000000000000000000000096 +:101A500000000000000000E007008212000000E02B +:101A600000000000000000E007008200000000000D +:101A700000000000000000E0000000000000000086 +:101A8000070000120000000000000000000000003D +:101A90000000000000000000000000000000000046 +:101AA00000000700000A0000000000000000000025 +:101AB0000000000000000000000000000000000026 +:101AC0000000000000000000000000000000000016 +:101AD0000000000000000000000000000000000006 +:101AE0000000C3C300000000000000000000000070 +:101AF00000000000000000000000000000000000E6 +:101B000000000000000000000000000000000000D5 +:101B100000000000000000000000000000000000C5 +:101B200000000000000000000000000000000000B5 +:101B300000000000000000000000000000000000A5 +:101B40000000000000000000000000000000000095 +:101B50000000000000000000000000000000000085 +:101B600000000000C3C300000000000000000000EF +:101B70000000000000000000000000000000000065 +:101B80000000000000000000000000000000000055 +:101B90000000000000000000000000000000000045 +:101BA0000000000000000000000000000000000035 +:101BB0000000000000000000000000000000000025 +:101BC0000000000000000000000000000000000015 +:101BD0000000000000000000000000000000000005 +:101BE00000000000000000000000000000000000F5 +:101BF00000000000000000000000000000000000E5 +:101C000000000000000000000000000000000000D4 +:101C100000000000000000000000000000000000C4 +:101C200000000000000000000000000000000000B4 +:101C300000000000000000000000000000000000A4 +:101C40000000000000000000000000000000000094 +:101C50000000000000000000000000000000000084 +:101C600000000000000000000000800000000000F4 +:101C70000000000000000000000000000000000064 +:101C80000000000000000000000000000000000054 +:101C90000000000000000000000000000000000044 +:101CA0000000000000000000000000000000000034 +:101CB0000000000000000000000000000000000024 +:101CC0000000000000000000000000000000000014 +:101CD00000000000000000000000000000000500FF +:101CE0000A0F050C00A000610007000D000005614F +:101CF0000A0F050D00A000000000000000000061B8 +:101D00000007000D000005000A08050000A0000003 +:101D100000000000000000000000000000000000C3 +:101D2000000000000000000005000A08050000A0F7 +:101D300000000000000000000000000000000000A3 +:101D40000000000000000000000000000000000093 +:101D50000000000000000000000000000000000083 +:101D60000000FF00F0F00000000000000000000094 +:101D70000000000000000000000000000000000063 +:101D80000000000000000000000000000000000053 +:101D90000000000000000000000000000000000043 +:101DA0000000000000000000000000000000000033 +:101DB0000000000000000000000000000000000023 +:101DC0000000000000000000000000000000000013 +:101DD0000000000000000000000000000000000003 +:101DE00000000000FF00F0F0000080000000000094 +:101DF00000000000000000000000000000000000E3 +:101E000000000000000000000000000000000000D2 +:101E100000000000000000000000000000000000C2 +:101E200000000000000000000000000000000000B2 +:101E300000000000000000000000000000000000A2 +:101E40000000000000000000000000000000000092 +:101E50000000000000000000000000000000000082 +:101E60000000000000000F0F00FF00000000000055 +:101E70000000000000000000000000000000000062 +:101E80000000000000000000000000000000000052 +:101E90000000000000000000000000000000000042 +:101EA0000000000000000000000000000000000032 +:101EB0000000000000000000000000000000000022 +:101EC0000000000000000000000000000000000012 +:101ED0000000000000000000000000000000000002 +:101EE00000000000000000000F0F00FF00000000D5 +:101EF00000200000000000000000000000000000C2 +:101F000000000000000000000000000000000000D1 +:101F100000000000000000000000000000000000C1 +:101F200000000000000000000000000000000000B1 +:101F300000000000000000000000000000000000A1 +:101F40000000000000000000000000000000000091 +:101F50000000000000000000000000000000000081 +:101F600000000000000000000000040000008800E5 +:101F700020032000000400040000040004102000DE +:101F80000004001100000002000004000000200016 +:101F900000000000000400040000200002002000F7 +:101FA00000000000000000840001000004000000A8 +:101FB0000000000000000004000400000000000019 +:101FC00020000000000000000004000000000000ED +:101FD00000000000000000000004000000000000FD +:101FE00000000000000000000000000000000000F1 +:101FF00000008000800000000000000000000000E1 +:1020000000000001000000002000000000000900A6 +:1020100000000000000000000000000000000000C0 +:1020200000000000000000000002000000000000AE +:10203000000004000000000000000000000000009C +:102040000000000000000000000000000000000090 +:102050000000000000000000000000000000000080 +:10206000000000000000000000000000000002006E +:102070000000020000410080820082000300030093 +:1020800001000400000082000000000004000009BC +:10209000000002000000010001000000000000003C +:1020A000000000000000000000000000000002002E +:1020B0000200020002100200020002000200000002 +:1020C000200000000000820000000000000000006E +:1020D00000000000004000000000000000000200BE +:1020E00000000000000000000000000000000000F0 +:1020F0002000000003100000040200000200200085 +:10210000200020000010040004080000000400006B +:10211000200000000000020020002000020000005B +:10212000040000002000400000400000000000000B +:102130000000200003002000000000000400000058 +:10214000000000000000000000000000000000008F +:10215000000020000000000000000000000000005F +:10216000000004000000200000000000000000400B +:10217000400000008200000000000000000000009D +:1021800000000009000400000000401020000805C5 +:102190000004842090000000900000000000000077 +:1021A00000002000200090009000900000008900B6 +:1021B000000020110000840000000011000900044C +:1021C00000000000000908000000000000000000FE +:1021D00000000000000000000000000000000000FF +:1021E00000000000000000000000000000000000EF +:1021F000000021000000210041002100000000003B +:1022000000C0000000000088000041000001000044 +:1022100000000000000100000000080000000000B5 +:1022200000000000000000000000000000000000AE +:102230002000000000020000000000900000008864 +:10224000000000000000000000000000000000008E +:102250000000000800000000000000000000000076 +:10226000000000000000000000000000000000006E +:1022700000000000000000040000012000048200B3 +:102280002020210004000000080200040000880053 +:1022900082400000820000048305040089000804D5 +:1022A00000009004822000000000000000000000F8 +:1022B000900000000000000000000000000400206A +:1022C000002000110020000000400000000000403D +:1022D00000000000000000000000000000000000FE +:1022E00000000000000000000000000000000000EE +:1022F0000000000000000400100400002000002086 +:1023000008008300C0000088000000880001004031 +:1023100000400004004000000000200000002000F9 +:10232000800100000001000009000800000000001A +:10233000000000000000000000000000000000009D +:10234000000000200000000000000020000000004D +:10235000000000000000000000000000000000007D +:10236000000000000000000000000000000000006D +:10237000000000000000000020001000C0402011FC +:102380000040204040402004A000842100000004C0 +:10239000001100030000820000202000C020000087 +:1023A000C000A000A00084000000A0000200C00047 +:1023B00000002002000400110000000200020000E2 +:1023C00000110000000000000000000000000000FC +:1023D00000000000000000000000000000000000FD +:1023E00000000000000000000000000000000000ED +:1023F000000000000000000000009000000000004D +:1024000090000000000000010500000000840000B2 +:10241000000000000000000000000001800000013A +:10242000000000000000000000000010000080001C +:1024300000000002800000012000000000000002F7 +:10244000000000000000000000000000000000008C +:10245000000000000000000000000000000000007C +:10246000000000000000000000000000000000006C +:10247000000000000000000000000000C000C100DB +:102480000500A0118400000000008400000420006A +:10249000400420092000000200050000A1004000C7 +:1024A000C02000A0080008008211000004004002C3 +:1024B0000800820900000000000000000000000089 +:1024C00000210009000200200000002000000000A0 +:1024D00000000000000000000000000000000000FC +:1024E00000000000000000000000000000000000EC +:1024F00000000000000000000000000000000000DC +:102500002000200000000800080021404100119038 +:1025100005000000000080000000200004402000B2 +:102520000000000111050000000000000000000094 +:10253000000000000000000000001100000000008A +:1025400000C00000000000010000000003000400C3 +:10255000000000000000000000000000000000007B +:10256000000000000000000000000000000000006B +:10257000000000000000000000000000000000005B +:10258000A010C008010282C0A00284400520820978 +:10259000088402840108100800A000040010000450 +:1025A000000000000000000000A00008014000083A +:1025B0004010000200909020109000080589401102 +:1025C0000000000001000800000000000000000002 +:1025D00000000000000000000000000000000000FB +:1025E00000000000000000000000000000000000EB +:1025F00000000000000000000000000000000000DB +:1026000000000080000004008000008905028209AB +:102610000020000000004000800000800080058055 +:1026200000800000000009000000008000804000E1 +:102630000080C000008000000000858321C084115C +:1026400000C0000000000300800000000000000047 +:10265000000000000000000000000000000000007A +:10266000000000000000000000000000000000006A +:10267000000000000000000000000000000000005A +:102680000000000000400082804000800082008244 +:102690008008008300030083808380000003002003 +:1026A00000000000000800000008000000050040D5 +:1026B000001000008000008580830080208221823D +:1026C00083022085000008002000100008000000A0 +:1026D00000000000000000000000000000000000FA +:1026E00000000000000000000000000000000000EA +:1026F00000000000000000000000000000000000DA +:102700000000000000001000A0C11082C0C09011A5 +:1027100090C182A1A0C1020090C0081082100000E8 +:10272000000000000000000100840001008400009F +:10273000000100210000020002C0400440C040919E +:10274000A1C0100302C00000000000000100002032 +:102750000000000000000000000000000000000079 +:102760000000000000000000000000000000000069 +:102770000000000000000000000000000000000059 +:102780000000000000000000C1104002C09082A0C4 +:10279000C1100520C0C0089003082088108405845B +:1027A00082000000000010000100200084000100F1 +:1027B000200040000000A10021100010C010108275 +:1027C00021898321C00903100000000000000001DE +:1027D00000000000000000000000000000000000F9 +:1027E00000000000000000000000000000000000E9 +:1027F00000000000000000000000000000000000D9 +:102800000000000000000000000041800000800087 +:1028100020004183020391008500410080000000F8 +:10282000C1000000000000008000040080000000E3 +:102830004100000000000000040041000000800092 +:1028400000804110209089A1820900000009000841 +:102850000021000400000000000000000000000053 +:102860000000000000000000000000000000000068 +:102870000000000000000000000000000000000058 +:102880000000000000000000000000000000000048 +:1028900000800000210010004000020080080000BD +:1028A000000000000000000080008000000800041C +:1028B000000000008000800000000000801100C0C7 +:1028C00000800000A19091A00300C0200000000043 +:1028D00000000000004100000000000000000000B7 +:1028E00000000000000000000000000000000000E8 +:1028F00000000000000000000000000000000000D8 +:102900000000000000000000000000000000820045 +:1029100088A0881008000900C110890489000401FA +:102920002090209088004000A000020008000001D4 +:10293000000000000000020004002000000004006D +:102940008820881088001102030421908200000072 +:10295000000800000000000100000000000000006E +:102960000000000000000000000000000000000067 +:102970000000000000000000000000000000000057 +:102980000000000000000000000000000000000047 +:10299000000000E000004842000000E00000484263 +:1029A000000000E000004882000000E0000000009D +:1029B000000000E007000082000000E000000000CE +:1029C0000000000000004842000000E00000484213 +:1029D0000000000000000000008200000000000075 +:1029E00000000000000000000000000000000000E7 +:1029F00000000000000000000000000000000000D7 +:102A000000000000000000000000000000000000C6 +:102A10000000A00000A02010040828000028A0004A +:102A200000A02841000020104080000000000000AD +:102A30000000000000000000000000000000000096 +:102A40000000A00000A0280000282800002828413D +:102A50000000000000000000000000000000000076 +:102A60000000000000000000000000000000000066 +:102A70000000000000000000000000000000000056 +:102A80000000000000000000000000000000000046 +:102A900000000000050000054080020141000041E7 +:102AA00005000005000028410408020100000300A1 +:102AB000000000000000000000000000000000090D +:102AC00000000000050000054100004141000041F8 +:102AD000000028410000000000000000000000008D +:102AE00000000000000000000000000000000000E6 +:102AF00000000000000000000000000000000000D6 +:102B000000000000000000000000000000000000C5 +:102B100000000000000000000000000000000000B5 +:102B200000000000000000000000000000000000A5 +:102B30000000000000000000000000000000000095 +:102B40000000000000000000000000000000000085 +:102B50000000000000000000000000000000000075 +:102B60000000000000000000000000000000000065 +:102B70000000000000000000000000000000000055 +:102B80000000000000000000000000000000000045 +:102B900000000000000000000102080440022004C0 +:102BA00000008214010802044020020410200804DE +:102BB0000000000000000000000000000000000015 +:102BC0000000000000000000400220041008200463 +:102BD0001400001410082004000000000000000091 +:102BE00000000000000000000000000000000000E5 +:102BF00000000000000000000000000000000000D5 +:102C000000000000000000000000000000000000C4 +:102C10000000000000000000000080401020800143 +:102C200010088214000080104020801001088040AD +:102C30000102000080000000000000000000000011 +:102C400000000000800000000000800110088001EA +:102C5000400282000082800140020000000000006B +:102C60000000000000000000000000000000000064 +:102C70000000000000000000000000000000000054 +:102C80000000000000000000000000000000000044 +:102C900000000000000000000000000000610007CC +:102CA000000D080060610007000D100000610007C2 +:102CB000000D080000610007000D000005610A0F0B +:102CC000050D00A000610007000D0000600000007D +:102CD0000000100000610007000D08000000006106 +:102CE0000006000D000000000000000000000000D1 +:102CF00000000000000000000000000000000000D4 +:102D000000000000000000000000000000000000C3 +:102D100000000000000000000000000000000000B3 +:102D200000000000000000AA00AA0000000000004F +:102D30000000000000000000000000000000000093 +:102D40000000000000000000000000000000000083 +:102D500000000000000000000000C300C3000000ED +:102D60000000000000000000000000000000000063 +:102D70000000000000000000000000000000000053 +:102D80000000000000000000000000000000000043 +:102D90000000000000000000000000000000000033 +:102DA000000000000000000000EA00AA010101018B +:102DB0000000000000000000000000000000000013 +:102DC0000000000000000000000000000000000003 +:102DD000000000000000000000800000C300C700E9 +:102DE00000000000000000010000000000000000E2 +:102DF00000000000000000000000000000000000D3 +:102E000000000000000000000000000000000000C2 +:102E100000000000000000000000000000000000B2 +:102E200000000000000000000000000000000000A2 +:102E30000000000000000000000000000000000092 +:102E40000000000000000000000000000000000082 +:102E50000000000000000000000000000000BFFFB4 +:102E6000FFFF000000000000000000000000000064 +:102E70000000000000000000000000000000000052 +:102E80000000000000000000000000000000000042 +:102E90000000000000000000000000000000000032 +:102EA00000000000000000000000000000008000A2 +:102EB0000000000000000000000000000000000012 +:102EC0000000000000000000000000000000000002 +:102ED0000000000000000000000000000000800072 +:102EE00000000000000000000000000002000000E0 +:102EF00000000000000000000000000000000000D2 +:102F000000000000000000000000000000000000C1 +:102F100000000000000000000000000000000000B1 +:102F2000000000000000040004000400040300008E +:102F300002020000040000008204880088050000EE +:102F40000000000000000000000000000041000040 +:102F50000004000400000000000000000004000065 +:102F60000000000000400003004000400005004059 +:102F70000040000000000000000000000000000011 +:102F80000000000000000040000000000000000001 +:102F90000000000000000000000000000000000031 +:102FA0000000000000000000200000000000000001 +:102FB000000000010000000000000001000000040B +:102FC0000000000000000000000000000000000001 +:102FD00000000001000109000000000000000000E6 +:102FE00000000000000000010000000100010000DE +:102FF00000010001000000000000000000000000CF +:1030000000000000000000000001000000000000BF +:1030100000000000000000000000000000000000B0 +:10302000000000000000000000000100030001009B +:10303000000000000000000082000000000300000B +:10304000000000000000000000000000020000007E +:103050000080000401000000008002000000000069 +:10306000000000000000040000000000000000005C +:10307000000000000200000000000000000000004E +:10308000000000000220004000000040000000009E +:103090000000000000000000000000000000000030 +:1030A00000000000000000000000000020002000E0 +:1030B00020000000000000000000000000000000F0 +:1030C00000000000020000000000000000000000FE +:1030D00000000204000104C0000000040000000021 +:1030E000000000000000000000840000000000005C +:1030F00000000000040800000000000000000000C4 +:1031000000000000000000000001000000010000BD +:10311000000000000082000000000000000000002D +:10312000000000000000000000000000000001009E +:1031300000000000010800000000A000000800805E +:103140000000208000020011000000880000200024 +:1031500000800000A0080000000000000000000047 +:1031600002000200000004800480030004800000CC +:1031700000000080008000000000008500050005C0 +:10318000004000000040020300400000000000007A +:10319000000000000000000000000000000000002F +:1031A000000000000000000000000000000000001F +:1031B00004000500059004A0000008002100110093 +:1031C00000040390800400000000100000100000C4 +:1031D00088000004080008004100000000004100D1 +:1031E00003008000A1000382C14085408484A14087 +:1031F000000000A00040004000A000A0004000002F +:10320000000000010000000180000001000000003B +:1032100000000000000000000000000000000000AE +:10322000000000000000000000000000000000009E +:103230000000820004004004200082000000000022 +:10324000001000000000400000000000000004002A +:103250000800880008000820900004000100010018 +:1032600009000200A0400040A000010091001000F1 +:103270000100000000000100014000400003104177 +:1032800082002040A080008000400000008000807C +:10329000000000000000000000000000000000002E +:1032A000000000000000000000000000000000001E +:1032B00000000000000080000084A000000000006A +:1032C00000A0000000000800000000000000000056 +:1032D0000008000000000004000000008000200042 +:1032E00004002000C00000010001000002000200F4 +:1032F000C1000200000021000200020103010000E1 +:1033000080000088A0010040004000410082004091 +:10331000004000000000000000000000000000006D +:10332000000000000000000000000000000000009D +:103330000000000000008200840084008200000081 +:103340008200820040000041828000040080000072 +:1033500000000000000008000880008000800000DD +:103360000000200000000080830000800280000038 +:1033700000000240A00000000100000000000180E9 +:1033800001000009108011000040000000850005C8 +:1033900000000000004000000000000000000000ED +:1033A000000000000000000000000000000000001D +:1033B0000000000000000000000040000002008843 +:1033C00005901000058485902090200420020004C0 +:1033D0004184000000000000000400040004000418 +:1033E0000000080080000000004002000340804010 +:1033F000030000A0A00120A00000020003000000C4 +:103400000202020000008040820000010000004033 +:1034100000000000000000010000000000000000AB +:10342000000000000000000000000000000000009C +:103430000000000000000000000090419000040027 +:10344000000000208208202104000000004100202C +:103450000002001100090000080020042000000004 +:1034600000000000040040000400040009000800FF +:1034700008008204000400040008000000800080AE +:1034800000C0010011802080218001000100014066 +:10349000014000400000000000400040000000002B +:1034A000000000000000000000000000000000001C +:1034B000000000000000000000000000000000000C +:1034C00080000000000000000000009000000000EC +:1034D00000000001000000001100080000010000D1 +:1034E00000000000000080000000800000000200DA +:1034F0000000000000010001000300010000034083 +:1035000041404141020082408340824002840200E7 +:10351000020102000001000000000401000100009F +:10352000000000000000000000000000000000009B +:10353000000000000000000000000000000000008B +:10354000000001000000039002820182A182841029 +:103550002188848804820000000000000000000030 +:10356000000000000000000000000000000000C09B +:1035700000080000080001C18800880082000000E7 +:1035800000C000000810000001C100000088000118 +:1035900000C000040000000000C000000000004067 +:1035A000000000000000000000000000000000001B +:1035B000000000000000000000000000000000000B +:1035C0000000000004000000A00480052080200905 +:1035D00040800200050000800000000000000000A4 +:1035E000000000004000000000000000400000005B +:1035F000008000800000800010C180210210800047 +:103600000000008004000000000010C1112109002A +:10361000001000800080000000000080000000001A +:10362000000000000000000000000000000000009A +:10363000000000000000000000000000000000008A +:1036400000000009000000050000008000858009DE +:1036500000C00320058303C00480000000000000B8 +:103660000000000400000020000000050000001021 +:103670000000000000000000800010001080090021 +:10368000C100000000000000000080009000090060 +:103690000000C100000000030000800000000000E6 +:1036A000000080000000000000000000000000009A +:1036B000000000000000000000000000000000000A +:1036C000000000000000004000000082204020C0F8 +:1036D00040A190C0110111C0C040A0C00000000076 +:1036E0000000000000010000000100000000008850 +:1036F00000010088000000000000C00001901104DB +:103700000100C1400000000000000000C0009190D6 +:1037100000000000C100000000000000C000000028 +:1037200000000000C00000000000000000000000D9 :103730000000000000000000000000000000000089 -:103740000000000000000000000000000000000079 -:103750000000000000000000000000000000000069 -:103760000000000000000000000000000000000059 -:103770000000000000000000000000000000000049 -:103780000000000000000000000000000000000039 -:103790000000000000000000000000000000000029 -:1037A0000000000000000000000000000000000019 +:1037400000000000000000000400400000008303AF +:1037500000A0C020024005888408C01182890000B2 +:1037600000000000000000008400000000000000D5 +:1037700004002000000000000000000000C0000164 +:103780000000040191C1000000010001008800C098 +:1037900000890100000000C100000002000000C01C +:1037A00000000040000000C0000000000000000019 :1037B0000000000000000000000000000000000009 -:1037C00000000000000000000000000000000000F9 -:1037D00000000000000000000000000000000000E9 -:1037E00000000000000000000000000000000000D9 -:1037F00000000000000000000000000000000000C9 -:1038000000000000000000000000000000000000B8 -:1038100000000000000000000000000000000000A8 -:103820000000000000000000000000000000000098 +:1037C000000000000000000005008000000005006F +:1037D0004102210983408000410900858021850242 +:1037E00000000000000000000000000000000500D4 +:1037F00020008000800040000300000000000080E6 +:1038000005100800800589C100000010004000205C +:1038100000C000100900004100C10000008000004D +:103820000080000000000000008000000000000098 :103830000000000000000000000000000000000088 -:103840000000000000000000000000000000000078 -:103850000000000000000000000000000000000068 -:103860000000000000000000000000000000000058 -:103870000000000000000000000000000000000048 -:103880000000000000000000000000000000000038 -:103890000000000000000000000000000000000028 -:1038A0000000000000000000000000000000000018 +:10384000000000000000000000000000000900006F +:103850000000210511808400110000000004000018 +:103860000040000000000000000000000000000018 +:103870000000000000040000000080000000008044 +:103880000000C10983020000400000008000000029 +:1038900080000000C102110000000911800000003A +:1038A0000080000080000000000000000000000018 :1038B0000000000000000000000000000000000008 :1038C00000000000000000000000000000000000F8 -:1038D00000000000000000000000000000000000E8 -:1038E00000000000000000000000000000000000D8 -:1038F00000000000000000000000000000000000C8 -:1039000000000000000000000000000000000000B7 -:1039100000000000000000000000000000000000A7 -:103920000000000000000000000000000000000097 +:1038D0000000000091009002402090009084201091 +:1038E00020844000000000000000000000000000F4 +:1038F00000000000000000010000000008000000BF +:1039000000080000C1012001000000000000C0000C +:10391000000010100000C100000000008800C0007E +:10392000000000040000C000004000004000000053 :103930000000000000000000000000000000000087 :103940000000000000000000000000000000000077 -:103950000000000000000000000000000000000067 -:103960000000000000000000000000000000000057 -:103970000000000000000000000000000000000047 -:103980000000000000000000000000000000000037 -:103990000000000000000000000000000000000027 +:1039500000E00700000000000000000048420000F6 +:1039600000E00000484200000000000000000000ED +:1039700000E000000000000000E007000000000080 +:10398000000000000000500000E007000000000000 +:103990000000000000000000500000E000000000F7 :1039A0000000000000000000000000000000000017 :1039B0000000000000000000000000000000000007 :1039C00000000000000000000000000000000000F7 -:1039D00000000000000000000000000000000000E7 -:1039E00000000000000000000000000000000000D7 +:1039D0000000000000000000000011220011002281 +:1039E0000000112204081020000000000000000068 :1039F00000000000000000000000000000000000C7 -:103A000000000000000000000000000000000000B6 -:103A100000000000000000000000000000000000A6 -:103A20000000000000000000000000000000000096 -:103A30000000000000000000000000000000000086 +:103A00000000FFFF0000FFFF000000FF0000FFFFBD +:103A100000000000F0F0000000FF00003C3C00004F +:103A20003C3C0000FFFF0000F0F000003C3C0000C8 +:103A3000F0F00000000000000000000000000000A6 :103A40000000000000000000000000000000000076 -:103A50000000000000000000000000000000000066 -:103A60000000000000000000000000000000000056 +:103A50000000000000000000000011220000110022 +:103A6000220011220000010240800000000000003E :103A70000000000000000000000000000000000046 -:103A80000000000000000000000000000000000036 -:103A90000000000000000000000000000000000026 -:103AA0000000000000000000000000000000000016 -:103AB0000000000000000000000000000000000006 +:103A800000000000FFFF00000000000000FF000039 +:103A9000000000000000F0F0000000FF00003C3CCF +:103AA00000003C3C000000000000F0F000003C3C46 +:103AB0000000F0F000000000000000000000000026 :103AC00000000000000000000000000000000000F6 -:103AD00000000000000000000000000000000000E6 -:103AE00000000000000000000000000000000000D6 +:103AD00000000000000000000000000004010802D7 +:103AE000240081002400810004080102000000007D :103AF00000000000000000000000000000000000C6 -:103B000000000000000000000000000000000000B5 -:103B100000000000000000000000000000000000A5 -:103B20000000000000000000000000000000000095 -:103B30000000000000000000000000000000000085 +:103B000000000000FF000000FFFF0000555500000E +:103B10000F0F000000000F0F0000FFFF00000F0F4D +:103B200000003C3C0000FF000000FFFF00003C3CA8 +:103B30000000AAAAFFFF0000000000000000000033 :103B40000000000000000000000000000000000075 -:103B50000000000000000000000000000000000065 -:103B60000000000000000000000000000000000055 +:103B50000000000000000000000000000000104015 +:103B6000208000240081002400811020408000007B :103B70000000000000000000000000000000000045 -:103B80000000000000000000000000000000000035 -:103B90000000000000000000000000000000000025 -:103BA0000000000000000000000000000000000015 -:103BB0000000000000000000000000000000000005 +:103B8000000000000000FF0000000000000055558C +:103B900000000F0F000000000F0F000000000000E9 +:103BA0000F0F00003C3C0000FF0000000000000080 +:103BB0003C3C0000AAAAFFFF00000000000000003B :103BC00000000000000000000000000000000000F5 -:103BD00000000000000000000000000000000000E5 -:103BE00000000000000000000000000000000000D5 -:103BF00000000000000000000000000000000000C5 -:103C000000000000000000000000000000000000B4 -:103C100000000000000000000000000000000000A4 -:103C20000000000000000000000000000000000094 -:103C30000000000000000000000000000000000084 +:103BD000000000000000000005610A0F050D00A0B4 +:103BE00060610006000D100000610007000D080074 +:103BF000000000000000000000610007000D000050 +:103C000005610A0F050D00A040028000002092020D +:103C100045828A09852092A2000040E38006002D9B +:103C20009202408280018020920240828000002027 +:103C3000920240828000002082020000000000000A :103C40000000000000000000000000000000000074 :103C50000000000000000000000000000000000064 -:103C60000000000000000000000000000000000054 +:103C600000005555555503000300000000000000FA :103C70000000000000000000000000000000000044 :103C80000000000000000000000000000000000034 -:103C90000000000000000000000000000000000024 -:103CA0000000000000000000000000000000000014 +:103C90000000550014142828003C0000000000001B +:103CA0000000000014145500003C3C3C00000000E3 :103CB0000000000000000000000000000000000004 :103CC00000000000000000000000000000000000F4 :103CD00000000000000000000000000000000000E4 -:103CE00000000000000000000000000000000000D4 -:103CF00000000000000000000000000000000000C4 +:103CE00000000000551555550300030000000000BA +:103CF00000000001000000000000000000000000C3 :103D000000000000000000000000000000000000B3 -:103D100000000000000000000000000000000000A3 -:103D20000000000000000000000000000000000093 +:103D100000000000550014142828003C000000009A +:103D200000000100000014145500003C00000000D9 :103D30000000000000000000000000000000000083 :103D40000000000000000000000000000000000073 :103D50000000000000000000000000000000000063 :103D60000000000000000000000000000000000053 :103D70000000000000000000000000000000000043 :103D80000000000000000000000000000000000033 -:103D90000000000000000000000000000000000023 -:103DA0000000000000000000000000000000000013 +:103D900000000000000055000F00003C3030000023 +:103DA000000000000000000055003C0028283030D2 :103DB0000000000000000000000000000000000003 :103DC00000000000000000000000000000000000F3 :103DD00000000000000000000000000000000000E3 -:103DE00000000000000000000000000000000000D3 -:103DF00000000000000000000000000000000000C3 +:103DE00000000000000000000000002800000000AB +:103DF00000000000000100000000000000000000C2 :103E000000000000000000000000000000000000B2 -:103E100000000000000000000000000000000000A2 -:103E20000000000000000000000000000000000092 -:103E30000000000000000000000000000000000082 +:103E1000000000000000000055000F00003C3030A2 +:103E20000000000000000000000055003C002828B1 +:103E30003030000000000000000000000000000022 :103E40000000000000000000000000000000000072 :103E50000000000000000000000000000000000062 -:103E60000000000000000000000000000000000052 -:103E70000000000000000000000000000000000042 -:103E80000000000000000000000000000000000032 -:103E90000000000000000000000000000000000022 -:103EA0000000000000000000000000000000000012 -:103EB0000000000000000000000000000000000002 -:103EC00000000000000000000000000000000000F2 -:103ED00000000000000000000000000000000000E2 -:103EE00000000000000000000000000000000000D2 -:103EF00000000000000000000000000000000000C2 -:103F000000000000000000000000000000000000B1 +:103E600000000000020000000000000000800404C8 +:103E70000002000004000040040000C000400004F4 +:103E80000404000004000000000000000000000026 +:103E90000004000004000000000000000000000416 +:103EA0000004000300000000000004000000000007 +:103EB00000000004000004000000000000000000FA +:103EC00000040004000000000000200000000000CA +:103ED00000000004000004000000000000000000DA +:103EE00000000002000000000000000000000004CC +:103EF0008001000400000000000100000005000136 +:103F000000000008000000000000000004000000A5 :103F100000000000000000000000000000000000A1 -:103F20000000000000000000000000000000000091 -:103F30000000000000000000000000000000000081 +:103F2000000000020000000000000000000000008F +:103F3000000000000002000000000000000000007F :103F40000000000000000000000000000000000071 :103F50000000000000000000000000000000000061 -:103F60000000000000000000000000000000000051 -:103F70000000000000000000000000000000000041 -:103F80000000000000000000000000000000000031 -:103F90000000000000000000000000000000000021 -:103FA0000000000000000000000000000000000011 -:103FB0000000000000000000000000000000000001 +:103F6000000000000004000000000000000003004A +:103F7000030000410100004000400000020000403A +:103F800004400000020000000200000000000000E9 +:103F9000020000000200000000000000000002001B +:103FA000000000000000000000000000020002000D +:103FB00000000200000000000000004000000800B7 :103FC00000000000000000000000000000000000F1 :103FD00000000000000000000000000000000000E1 -:103FE00000000000000000000000000000000000D1 -:103FF00000000000000000000000000000000000C1 -:1040000000000000000000000000000000000000B0 -:1040100000000000000000000000000000000000A0 -:104020000000000000000000000000000000000090 -:104030000000000000000000000000000000000080 -:104040000000000000000000000000000000000070 -:104050000000000000000000000000000000000060 -:104060000000000000000000000000000000000050 -:104070000000000000000000000000000000000040 -:104080000000000000000000000000000000000030 +:103FE00000000000000000000208000000000200C5 +:103FF00004000400020004080001200900880300F6 +:104000000001004100000002000400000000000068 +:104010000000000000000008000020020000000076 +:104020000000000004000008000000000400000080 +:104030000000000000000000000800002000000058 +:104040000400000000000200000200000000000068 +:104050000000000000000200000800002000000036 +:1040600000000000000000000000038091800100BB +:10407000010002008300038083A102000200020508 +:104080000200088020802080008400008200000060 :104090000000000000000000000000000000000020 -:1040A0000000000000000000000000000000000010 -:1040B0000000000000000000000000000000000000 +:1040A000000000000000000000000000A000080068 +:1040B000C0804000000000800080900000000000F0 :1040C00000000000000000000000000000000000F0 :1040D00000000000000000000000000000000000E0 -:1040E00000000000000000000000000000000000D0 -:1040F00000000000000000000000000000000000C0 -:1041000000000000000000000000000000000000AF -:10411000000000000000000000000000000000009F -:10412000000000000000000000000000000000008F -:10413000000000000000000000000000000000007F +:1040E000000000000000000000000000024002404C +:1040F0000200020080000200824002048000800072 +:104100008000808400408040804000411100000019 +:10411000000000000000000000000000000003009C +:1041200000000000000000002100000000000084EA +:1041300000020040800000000004000400000000B5 :10414000000000000000000000000000000000006F -:10415000000002000000000000000000000000005D -:10416000000000000000000000000000000000004F -:10417000000000000000000000000000000000003F -:10418000000000000000000000000000000000002F -:10419000000000000000000000000000000000001F -:1041A000000000000000000000000000000000000F -:1041B00000000000000000000000000000000000FF -:1041C00000000400040000000000000000000000E7 -:1041D00002000200000002000000000000000000D9 +:10415000000000000000000000000000002000003F +:104160000000000000000000000000000000A0802F +:104170000280008000000880018000800140100063 +:10418000A04000800080010040000180000000008D +:10419000080004000000A00020000800000020002B +:1041A00082408200000000000200A0000800000021 +:1041B000000000400000000000000000004000007F +:1041C00000000004000000000004000000000000E7 +:1041D00000000000000000000000000000000000DF :1041E00000000000000000000000000000000000CF -:1041F00000000000000000000000000000000000BF -:1042000000000000000000000000000000000000AE -:10421000000000000000000000000000000000009E -:10422000000000000000000000000000000000008E -:10423000000000000000000000000000000000007E -:10424000000000000000000000000000000000006E +:1041F0000040A1400040200200402040004020003C +:10420000808200000040004020001100204000009B +:104210000000000000040000000004000000200076 +:104220000000000000000010400004000300100027 +:104230000000020205000000200000200002000033 +:10424000000000C000C00020008800000000000046 :10425000000000000000000000000000000000005E :10426000000000000000000000000000000000004E -:10427000000000000000000000000000000000003E -:10428000000000000000000000000000000000002E -:10429000000000000000000000000000000000001E -:1042A000000000000000000000000000000000000E -:1042B00000000000000000000000000000000000FE -:1042C00000000000000000000000000000000000EE +:1042700000001000100001002000000000002000DD +:1042800000C00080108000802080000000000040FE +:1042900000400000000000000000000000000000DE +:1042A000000000000000000000000000820082000A +:1042B000A000000000000800000000000080008056 +:1042C00000830080000000050000000000000000E6 :1042D00000000000000000000000000000000000DE :1042E00000000000000000000000000000000000CE -:1042F00000000000000000000000000000000000BE -:1043000000000000000000000000000000000000AD -:10431000000000000000000000000000000000009D -:10432000000000000000000000000000000000008D -:10433000000000000000000000000000000000007D -:10434000000000000000000000000000000000006D +:1042F0000000000080828000020080002100030096 +:10430000A100034121408340004088400800000094 +:104310000001000100000000000000000000038414 +:1043200000000084000000000000000021000000E8 +:104330000000088800000000000000004084000821 +:104340000008110803040000000000000000000045 :10435000000000000000000000000000000000005D :10436000000000000000000000000000000000004D -:10437000000000000000000000000000000000003D -:10438000000000000000000000000000000000002D -:10439000000000000000000000000000000000001D -:1043A000000000000000000000000000000000000D -:1043B00000000000000000000000000000000000FD -:1043C00000000000000000000000000000000000ED -:1043D00000000000000000000000000000000000DD +:1043700000000000000082040802A02100A002400A +:104380000200004000000004001020040000004073 +:104390000080000401400400000000000000000054 +:1043A00000000000000090000002400008028200AF +:1043B0000000040004000000000040009100000024 +:1043C000000400000004000800410009000500028C +:1043D00000000009002000000000000000000000B4 :1043E00000000000000000000000000000000000CD -:1043F00000000000000000000000000000000000BD -:1044000000000000000000000000000000000000AC -:10441000000000000000000000000000000000009C -:10442000000000000000000000000000000000008C -:10443000000000000000000000000000000000007C -:10444000000000000000000000000000000000006C +:1043F000000000000000000040832000400000405A +:104400008005800000014000000100000000000065 +:104410000001000400002001000000040000020070 +:10442000002000000000000000000000000000006C +:104430000400000002000020000011024090400231 +:10444000408809010390090009C111000000000023 :10445000000000000000000000000000000000005C :10446000000000000000000000000000000000004C -:10447000000000000000000000000000000000003C -:10448000000000000000000000000000000000002C -:10449000000000000000000000000000000000001C +:104470000000000000000000000000C1000000017A +:10448000880002C000000002000000C1000000001F +:10449000880002C08200000200000000000000004E :1044A000000000000000000000000000000000000C -:1044B00000000000000000000000000000000000FC -:1044C00000000000000000000000000000000000EC +:1044B00000000000000000000000000082A000904A +:1044C0000890900885410008A0C104880000000001 :1044D00000000000000000000000000000000000DC :1044E00000000000000000000000000000000000CC -:1044F00000000000000000000000000000000000BC -:1045000000000000000000000000000000000000AB -:10451000000000000000000000000000000000009B +:1044F00000000000000000000000000003C11121C6 +:1045000004098000808000000980000040C1114142 +:104510000409800080800000058000000000000089 :10452000000000000000000000000000000000008B :10453000000000000000000000000000000000007B -:10454000000000000000000000000000000000006B +:1045400041008000000020C100850402000000003E :10455000000000000000000000000000000000005B :10456000000000000000000000000000000000004B -:10457000000000000000000000000000000000003B -:10458000000000000000000000000000000000002B -:10459000000000000000000000000000000000001B +:1045700000000000000000000000000000000080BB +:1045800000008900C1008000000000408000008021 +:1045900000008909C1000040000000038000000005 :1045A000000000000000000000000000000000000B :1045B00000000000000000000000000000000000FB -:1045C00000000000000000000000000000000000EB +:1045C000030020C18540048080000288800441905F :1045D00000000000000000000000000000000000DB :1045E00000000000000000000000000000000000CB :1045F00000000000000000000000000000000000BB -:1046000000000000000000000000000000000000AA -:10461000000000000000000000000000000000009A +:10460000008800009000C100080000880000C088F9 +:10461000008800009001C100000000000001C000FF :10462000000000000000000000000000000000008A :10463000000000000000000000000000000000007A -:10464000000000000000000000000000000000006A -:10465000000000000000000000000000000000005A +:104640000000C00040C00282C1C0080089C008410B +:1046500085C1000000000000000000000000000014 :10466000000000000000000000000000000000004A :10467000000000000000000000000000000000003A -:10468000000000000000000000000000000000002A -:10469000000000000000000000000000000000001A -:1046A000000000000000000000000000000000000A +:10468000000020009000020000C101000400200092 +:1046900000C020009000000000C1000004000000E5 +:1046A00001C0000000000000000000000000000049 :1046B00000000000000000000000000000000000FA -:1046C00000000000000000000000000000000000EA -:1046D00000000000000000000000000000000000DA +:1046C0000000000021400083C04082C0C1040005FA +:1046D000C11182090000000000000000000000007D :1046E00000000000000000000000000000000000CA :1046F00000000000000000000000000000000000BA -:1047000000000000000000000000000000000000A9 -:104710000000000000000000000000000000000099 -:104720000000000000000000000000000000000089 +:10470000000000008009C100000200C140008000DC +:104710008000208083098500000900C1000000009E +:1047200000004180000000000000000000000000C8 :104730000000000000000000000000000000000079 -:104740000000000000000000000000000000000069 -:104750000000000000000000000000000000000059 +:1047400000000000000041200010808400114100A2 +:104750000040858540C1000000000000000000000E :104760000000000000000000000000000000000049 :104770000000000000000000000000000000000039 -:104780000000000000000000000000000000000029 -:104790000000000000000000000000000000000019 +:10478000000000000000C18541098000090380008D +:10479000000980000000C180000989000911800023 :1047A0000000000000000000000000000000000009 :1047B00000000000000000000000000000000000F9 -:1047C00000000000000000000000000000000000E9 -:1047D00000000000000000000000000000000000D9 +:1047C000000000000000000080A0002000808005A4 +:1047D000410003030500000300000000000000008A :1047E00000000000000000000000000000000000C9 :1047F00000000000000000000000000000000000B9 -:1048000000000000000000000000000000000000A8 -:104810000000000000000000000000000000000098 -:104820000000000000000000000000000000000088 +:104800000000000000000000C1400001880001011C +:10481000C000000002000000C1C0000188000100CB +:10482000C000002000004000000000000000000068 :104830000000000000000000000000000000000078 -:104840000000000000000000000000000000000068 -:104850000000000000000000000000000000000058 +:1048400000000000000000000000040320C1A0825E +:10485000020083A0A185A088C00100000000000024 :104860000000000000000000000000000000000048 :104870000000000000000000000000000000000038 -:104880000000000000000000000000000000000028 -:104890000000000000000000000000000000000018 -:1048A0000000000000000000000000000000000008 +:1048800000000000000000000000810000E00000C7 +:104890000000000000E007000000880000E00000C9 +:1048A0008100000000E00000000A0000000000009D :1048B00000000000000000000000000000000000F8 :1048C00000000000000000000000000000000000E8 -:1048D00000000000000000000000000000000000D8 +:1048D00000004842880000E000004842000000005C :1048E00000000000000000000000000000000000C8 :1048F00000000000000000000000000000000000B8 -:1049000000000000000000000000000000000000A7 -:104910000000000000000000000000000000000097 -:104920000000000000000000000000000000000087 +:10490000000000000000000000000000F0F00000C7 +:10491000FFFF0000F0F0000066660000F0F000000D +:10492000FFFF00003C3C0000666600000000000045 :104930000000000000000000000000000000000077 -:104940000000000000000000000000000000000067 -:104950000000000000000000000000000000000057 +:104940000000000000000000000000000000A000C7 +:1049500000A0200440022800410020400402000082 :104960000000000000000000000000000000000047 :104970000000000000000000000000000000000037 -:104980000000000000000000000000000000000027 -:104990000000000000000000000000000000000017 -:1049A0000000000000000000000000000000000007 +:104980000000000000000000000000000000F0F047 +:10499000000000000000F0F0000066660000F0F08B +:1049A0000000000000003C3C0000666600000000C3 :1049B00000000000000000000000000000000000F7 :1049C00000000000000000000000000000000000E7 -:1049D00000000000000000000000000000000000D7 +:1049D0000500000510088001002800411080080132 :1049E00000000000000000000000000000000000C7 :1049F00000000000000000000000000000000000B7 :104A000000000000000000000000000000000000A6 @@ -70841,272 +66744,272 @@ :104A60000000000000000000000000000000000046 :104A70000000000000000000000000000000000036 :104A80000000000000000000000000000000000026 -:104A90000000000000000000000000000000000016 -:104AA0000000000000000000000000000000000006 -:104AB00000000000000000000000000000000000F6 +:104A900000000000FFFF000000FF00000F0F0000FB +:104AA0003C3C0000FFFF000000FF00000F0FFFFF75 +:104AB00099990000000000000000000000000000C4 :104AC00000000000000000000000000000000000E6 -:104AD00000000000000000000000000000000000D6 -:104AE00000000000000000000000000000000000C6 +:104AD00000000000440000440500000500008214AE +:104AE0004020020400000000000000000000000060 :104AF00000000000000000000000000000000000B6 :104B000000000000000000000000000000000000A5 -:104B10000000000000000000000000000000000095 -:104B20000000000000000000000000000000000085 -:104B30000000000000000000000000000000000075 +:104B10000000000000000000000000FF00000F0F78 +:104B200000003C3C00000000000000FF00000F0FF0 +:104B3000FFFF999900000000000000000000000045 :104B40000000000000000000000000000000000065 -:104B50000000000000000000000000000000000055 -:104B60000000000000000000000000000000000045 +:104B500000000000000088000088A00000A082146F +:104B600000008010010800000000000000000000AC :104B70000000000000000000000000000000000035 :104B80000000000000000000000000000000000025 -:104B90000000000000000000000000000000000015 -:104BA0000000000000000000000000000000000005 -:104BB00000000000000000000000000000000000F5 +:104B9000000000000000408280018020920245E376 +:104BA0008A0F052D92A2408280018020920240E36C +:104BB0008007002D820200000000000000000000BD :104BC00000000000000000000000000000000000E5 -:104BD00000000000000000000000000000000000D5 -:104BE00000000000000000000000000000000000C5 +:104BD000000000000000000060610006000D1000F1 +:104BE000000000018000080000000000000000003C :104BF00000000000000000000000000000000000B5 :104C000000000000000000000000000000000000A4 -:104C10000000000000000000000000000000000094 -:104C20000000000000000000000000000000000084 +:104C100000000000000000003C005500003C00FFC8 +:104C200000000000000000000C0C0505003C00FF27 :104C30000000000000000000000000000000000074 :104C40000000000000000000000000000000000064 :104C50000000000000000000000000000000000054 -:104C60000000000000000000000000000000000044 +:104C600000000F00FF0000F000AA0000000000009C :104C70000000000000000000000000000000000034 :104C80000000000000000000000000000000000024 -:104C90000000000000000000000000000000000014 -:104CA0000000000000000000000000000000000004 +:104C9000000000000000000000003C005500003C47 +:104CA000000000000000000000000C0C0505003CA6 :104CB00000000000000000000000000000000000F4 :104CC00000000000000000000000000000000000E4 :104CD00000000000000000000000000000000000D4 -:104CE00000000000000000000000000000000000C4 +:104CE000010000000F00000000F000AA000000001A :104CF00000000000000000000000000000000000B4 :104D000000000000000000000000000000000000A3 -:104D10000000000000000000000000000000000093 -:104D20000000000000000000000000000000000083 -:104D30000000000000000000000000000000000073 +:104D10000000000000000000000000005500050534 +:104D200000FFAAAA000000000000000005050F0017 +:104D300000AA00FF000000000000000000000000CA :104D40000000000000000000000000000000000063 :104D50000000000000000000000000000000000053 -:104D60000000000000000000000000000000000043 +:104D6000000000000000FF000F0FAAAAA0A0000092 :104D70000000000000000000000000000000000033 :104D80000000000000000000000000000000000023 -:104D90000000000000000000000000000000000013 -:104DA0000000000000000000000000000000000003 -:104DB00000000000000000000000000000000000F3 +:104D900000000000000000000000000000005500BE +:104DA00005050000000000000000000000000505EF +:104DB0000F0000AA0000000000000000000000003A :104DC00000000000000000000000000000000000E3 :104DD00000000000000000000000000000000000D3 -:104DE00000000000000000000000000000000000C3 +:104DE0000000000001000000000000000000A0A082 :104DF00000000000000000000000000000000000B3 :104E000000000000000000000000000000000000A2 :104E10000000000000000000000000000000000092 -:104E20000000000000000000000000000000000082 -:104E30000000000000000000000000000000000072 -:104E40000000000000000000000000000000000062 -:104E50000000000000000000000000000000000052 -:104E60000000000000000000000000000000000042 -:104E70000000000000000000000000000000000032 +:104E200000000000000000080000010000208400D5 +:104E30000400040004000000200020002000000006 +:104E400000800000008000900400000000000000CE +:104E500000000000000004000000008000000000CE +:104E6000000100000000000000040000000000003D +:104E70000000000000000000200000000000000012 :104E80000000000000000000000000000000000022 :104E90000000000000000000000000000000000012 -:104EA0000000000000000000000000000000000002 -:104EB00000000000000000000000000000000000F2 -:104EC00000000000000000000000000000000000E2 -:104ED00000000000000000000000000000000000D2 +:104EA00000000000000000000000000002000001FF +:104EB0000000000000000000000280008000800070 +:104EC0000000002000000020002100000000000081 +:104ED00000000000000000000000000000100000C2 :104EE00000000000000000000000000000000000C2 :104EF00000000000000000000000000000000000B2 :104F000000000000000000000000000000000000A1 -:104F10000000000000000000000000000000000091 +:104F10000000000000000000400000000000000051 :104F20000000000000000000000000000000000081 -:104F30000000000000000000000000000000000071 -:104F40000000000000000000000000000000000061 +:104F30000000C000000000000000000000000000B1 +:104F4000000000000000000002000000000000005F :104F50000000000000000000000000000000000051 :104F60000000000000000000000000000000000041 :104F70000000000000000000000000000000000031 :104F80000000000000000000000000000000000021 :104F90000000000000000000000000000000000011 -:104FA0000000000000000000000000000000000001 -:104FB00000000000000000000000000000000000F1 -:104FC00000000000000000000000000000000000E1 -:104FD00000000000000000000000000000000000D1 +:104FA00000000000000000000000000004040000F9 +:104FB00000004000020000000000000000080000A7 +:104FC00000000000000000000000000000040000DD +:104FD00000000000000000000000000000080000C9 :104FE00000000000000000000000000000000000C1 -:104FF00000000000000000000000000000000000B1 +:104FF00000000000000000000200000000000408A3 :1050000000000000000000000000000000000000A0 -:105010000000000000000000000000000000000090 -:105020000000000000000000000000000000000080 -:105030000000000000000000000000000000000070 -:105040000000000000000000000000000000000060 -:105050000000000000000000000000000000000050 -:105060000000000000000000000000000000000040 +:10501000000000000000000000000000000000048C +:1050200000000000000000002000900000000000D0 +:105030000000000000000000000000000041080027 +:10504000000000000000000000000400000000005C +:10505000000000000000004100000000000000000F +:1050600000000000A000000000000000000082001E :105070000000000000000000000000000000000030 :105080000000000000000000000000000000000020 :105090000000000000000000000000000000000010 -:1050A0000000000000000000000000000000000000 -:1050B00000000000000000000000000000000000F0 -:1050C00000000000000000000000000000000000E0 +:1050A0000000000000000000000080000010000070 +:1050B00021000000000000000000000000000300CC +:1050C0000000000000000000000000008000000060 :1050D00000000000000000000000000000000000D0 -:1050E00000000000000000000000000000000000C0 -:1050F00002000000000000000000000000000000AE +:1050E0000000410008002100000000000000000056 +:1050F00000000000000000100000000000000000A0 :10510000000000000000000000000000000000009F :10511000000000000000000000000000000000008F :10512000000000000000000000000000000000007F -:10513000000000000000000000000000000000006F -:10514000000000000000000000000000000000005F -:10515000000000000000000000000000000000004F -:10516000000000000000000000000000000000003F +:105130004000030082000400008001000200A00083 +:1051400000008200000000000000200000000000BD +:10515000000000000000880000008200080020001D +:1051600008004000880000000800900000000000D7 :10517000000000000000000000000000000000002F -:10518000000000000000000000000000000000001F +:10518000000000400000004000000000000000009F :10519000000000000000000000000000000000000F :1051A00000000000000000000000000000000000FF -:1051B00000000000000000000000000000000000EF -:1051C00000000000000000000000000000000000DF -:1051D00000000000000000000000000000000000CF -:1051E00000000000000000000000000000000000BF -:1051F00000000000000000000000000000000000AF +:1051B000000000002000000080000020040000002B +:1051C000000000000000000000000000800000005F +:1051D00000001100000000000000000008000000B6 +:1051E00000000000000000000400000000000000BB +:1051F00000000000000000000202000400000000A7 :10520000000000000000000000000000000000009E :10521000000000000000000000000000000000008E :10522000000000000000000000000000000000007E -:10523000000000000000000000000000000000006E -:10524000000000000000000000000000000000005E +:1052300000000004000000000000000000410041E8 +:105240000000000000000005820082000000000055 :10525000000000000000000000000000000000004E -:10526000000000000000000000000000000000003E -:10527000000000000000000000000000000000002E +:1052600000000800000000000000A000080082000C +:10527000000000000000C00000000000000000006E :10528000000000000000000000000000000000001E :10529000000000000000000000000000000000000E :1052A00000000000000000000000000000000000FE -:1052B00000000000000000000000000000000000EE -:1052C00000000000000000000000000000000000DE +:1052B0000000000000C100000000000000840000A9 +:1052C000008400000000000000000010000000004A :1052D00000000000000000000000000000000000CE -:1052E00000000000000000000000000000000000BE -:1052F00000000000000000000000000000000000AE -:10530000000000000000000000000000000000009D +:1052E0000000000000000000000000C000000000FE +:1052F0000000000003000300030000000010001085 +:1053000021840010000000000000000000000000E8 :10531000000000000000000000000000000000008D :10532000000000000000000000000000000000007D -:10533000000000000000000000000000000000006D -:10534000000000000000000000000000000000005D -:10535000000000000000000000000000000000004D -:10536000000000000000000000000000000000003D -:10537000000000000000000000000000000000002D -:10538000000000000000000000000000000000001D +:1053300000000000001100000204020400414020AF +:105340000000000000000002000000020000000059 +:105350000000002100020000000200000000000028 +:105360000000000000004000200000000800900045 +:10537000A00000000000A002A00088400002000978 +:1053800000000041000000000000000400090000CF :10539000000000000000000000000000000000000D :1053A00000000000000000000000000000000000FD -:1053B00000000000000000000000000000000000ED -:1053C00000000000000000000000000000000000DD -:1053D00000000000000000000000000000000000CD +:1053B00000000000000000000000000100010000EB +:1053C00000010000002000000000000000000000BC +:1053D00002000000000000000000000000000000CB :1053E00000000000000000000000000000000000BD -:1053F00000000000000000000000000000000000AD -:10540000000000000000000000000000000000009C +:1053F00000000000000000000000000000010001AB +:10540000080000000000000000000000000008008C :10541000000000000000000000000000000000008C -:10542000000000000000000000000000000000007C -:10543000000000000000000000000000000000006C +:105420000000000000000000000000000000080074 +:10543000000000000000000090A00004010288A00D :10544000000000000000000000000000000000005C -:10545000000000000000000000000000000000004C +:1054500000000000000000000000900000000000BC :10546000000000000000000000000000000000003C -:10547000000000000000000000000000000000002C -:10548000000000000000000000000000000000001C +:1054700000A000900008004000002002004020A092 +:1054800082A040A000A0000808A0000000000000CA :10549000000000000000000000000000000000000C :1054A00000000000000000000000000000000000FC -:1054B00000000000000000000000000000000000EC +:1054B00000000000000000000000800000000480E8 :1054C00000000000000000000000000000000000DC -:1054D00000000000000000000000000000000000CC +:1054D0000000000000000400000000008000000048 :1054E00000000000000000000000000000000000BC -:1054F00000000000000000000000000000000000AC -:10550000000000000000000000000000000000009B +:1054F0000000008000000080000000000080030029 +:10550000000000000000000000808000000000009B :10551000000000000000000000000000000000008B :10552000000000000000000000000000000000007B -:10553000000000000000000000000000000000006B -:10554000000000000000000000000000000000005B -:10555000000000000000000000000000000000004B -:10556000000000000000000000000000000000003B -:10557000000000000000000000000000000000002B -:10558000000000000000000000000000000000001B +:105530000000000000000000000000008005008561 +:105540008088008000008000000080800000000053 +:1055500000000000000900000009000080000000B9 +:1055600080000000000000000000000000000000BB +:1055700000000000000000400000000000001000DB +:1055800020820900408000000082000000800000AE :10559000000000000000000000000000000000000B :1055A00000000000000000000000000000000000FB -:1055B00000000000000000000000000000000000EB -:1055C00000000000000000000000000000000000DB -:1055D00000000000000000000000000000000000CB -:1055E00000000000000000000000000000000000BB -:1055F00000000000000000000000000000000000AB -:10560000000000000000000000000000000000009A +:1055B00000000000000000000000000000000800E3 +:1055C00010C0900588C040001082A0009004000028 +:1055D00000000000000000000000000000000200C9 +:1055E00088408200C0400000000000000000000071 +:1055F000000000000000000000000010000000009B +:10560000910021C1828884C0840004C104A082C0AA :10561000000000000000000000000000000000008A :10562000000000000000000000000000000000007A :10563000000000000000000000000000000000006A -:10564000000000000000000000000000000000005A -:10565000000000000000000000000000000000004A -:10566000000000000000000000000000000000003A -:10567000000000000000000000000000000000002A -:10568000000000000000000000000000000000001A -:10569000000000000000000000000000000000000A +:10564000118808A0C0021040000000000400010002 +:10565000000000000000000000004000C000010049 +:1056600000000000840000000000000000000000B6 +:105670000000000000000000000000000000020028 +:10568000000005A000C0C085408303C00004C040E6 +:1056900040040000000000000000000000000000C6 :1056A00000000000000000000000000000000000FA :1056B00000000000000000000000000000000000EA -:1056C00000000000000000000000000000000000DA -:1056D00000000000000000000000000000000000CA -:1056E00000000000000000000000000000000000BA +:1056C0000000C10080008000900000000000800009 +:1056D0000400000000000000000000008000000046 +:1056E0004100400000000000000000000000000039 :1056F00000000000000000000000000000000000AA -:105700000000000000000000000000000000000099 -:105710000000000000000000000000000000000089 +:10570000800000004109000580210088C100008060 +:105710008080000000000000000000000000000089 :105720000000000000000000000000000000000079 :105730000000000000000000000000000000000069 -:105740000000000000000000000000000000000059 +:10574000000000000000001100800000000000C008 :105750000000000000000000000000000000000049 -:105760000000000000000000000000000000000039 -:105770000000000000000000000000000000000029 -:105780000000000000000000000000000000000019 +:1057600000000000000000020080000000000000B7 +:1057700000000000000000000000000080000000A9 +:105780000000800000000082802080000002800273 :105790000000000000000000000000000000000009 :1057A00000000000000000000000000000000000F9 :1057B00000000000000000000000000000000000E9 -:1057C00000000000000000000000000000000000D9 -:1057D00000000000000000000000000000000000C9 -:1057E00000000000000000000000000000000000B9 -:1057F00000000000000000000000000000000000A9 -:105800000000000000000000000000000000000098 -:105810000000000000000000000000000000000088 +:1057C0000000000000000400C011048282000000FC +:1057D0000083002000000000000000000000000026 +:1057E000000000000000000000A100020000000016 +:1057F00000000000000000000000000000000800A1 +:105800009000A00008000000C005200404C0C001F2 +:1058100004014084C0048400000000000000000077 :105820000000000000000000000000000000000078 :105830000000000000000000000000000000000068 -:105840000000000000000000000000000000000058 -:105850000000000000000000000000000000000048 -:105860000000000000000000000000000000000038 +:105840000000000000000000000000E000004842EE +:105850000000000007000000000000000000000041 +:10586000000000E00000000A000000000700000047 :105870000000000000000000000000000000000028 :105880000000000000000000000000000000000018 -:105890000000000000000000000000000000000008 +:1058900048420000000000004842000000000000F4 :1058A00000000000000000000000000000000000F8 :1058B00000000000000000000000000000000000E8 -:1058C00000000000000000000000000000000000D8 -:1058D00000000000000000000000000000000000C8 +:1058C00000000000000000000000001100224080E5 +:1058D0001020000000000000000000000000000098 :1058E00000000000000000000000000000000000B8 :1058F00000000000000000000000000000000000A8 -:105900000000000000000000000000000000000097 -:105910000000000000000000000000000000000087 +:10590000000000000000000000000000041008205B +:105910000408102004100820020880200000000065 :105920000000000000000000000000000000000077 :105930000000000000000000000000000000000067 -:105940000000000000000000000000000000000057 -:105950000000000000000000000000000000000047 +:105940000000000000000000000000001100220024 +:105950000102040800000000000000000000000038 :105960000000000000000000000000000000000037 :105970000000000000000000000000000000000027 -:105980000000000000000000000000000000000017 -:105990000000000000000000000000000000000007 +:1059800000000000040000000000000000000140D2 +:1059900002800102408001400280010440100000AA :1059A00000000000000000000000000000000000F7 :1059B00000000000000000000000000000000000E7 -:1059C00000000000000000000000000000000000D7 -:1059D00000000000000000000000000000000000C7 +:1059C0000000000000000000000000000000069041 +:1059D0000000041008200000000082BE82BE00000B :1059E00000000000000000000000000000000000B7 -:1059F00000000000000000000000000000000000A7 -:105A00000000000000000000000000000000000096 -:105A10000000000000000000000000000000000086 +:1059F00000007D7D2828000000000000000000005D +:105A0000000000000000F0F2F0F0000000000000D4 +:105A10000408102006009000240081000600000603 :105A20000000000000000000000000000000000076 :105A30000000000000000000000000000000000066 :105A40000000000000000000000000000000000056 -:105A50000000000000000000000000000000000046 +:105A5000000006900140028000000000C0C0FCFC75 :105A60000000000000000000000000000000000036 -:105A70000000000000000000000000000000000026 -:105A80000000000000000000000000000000000016 -:105A90000000000000000000000000000000000006 -:105AA00000000000000000000000000000000000F6 +:105A7000000000005F0A5F0A000000000000000054 +:105A80000000000000000000F0F2F0F00000000054 +:105A90000000010240800006009000240081900078 +:105AA0000090000000000000000000000000000066 :105AB00000000000000000000000000000000000E6 :105AC00000000000000000000000000000000000D6 -:105AD00000000000000000000000000000000000C6 -:105AE00000000000000000000000000000000000B6 -:105AF00000000000000000000000000000000000A6 +:105AD000000000610007000D080000000A08050032 +:105AE00000A1000000000000000000610007000DA0 +:105AF000000005000A08050000A0000000000000EA :105B00000000000000000000000000000000000095 -:105B10000000000000000000000000000000000085 -:105B20000000000000000000000000000000000075 +:105B10000000000060610006000D100000000000A1 +:105B2000000008000000000000000000000000006D :105B30000000000000000000000000000000000065 :105B40000000000000000000000000000000000055 :105B50000000000000000000000000000000000045 @@ -71121,7 +67024,7 @@ :105BE00000000000000000000000000000000000B5 :105BF00000000000000000000000000000000000A5 :105C00000000000000000000000000000000000094 -:105C10000000000000000000000000000000000084 +:105C10000000000000000000000000000001000083 :105C20000000000000000000000000000000000074 :105C30000000000000000000000000000000000064 :105C40000000000000000000000000000000000054 @@ -71138,74 +67041,74 @@ :105CF00000000000000000000000000000000000A4 :105D00000000000000000000000000000000000093 :105D10000000000000000000000000000000000083 -:105D20000000000000000000000000000000000073 +:105D20004000000000000000000000000000000033 :105D30000000000000000000000000000000000063 :105D40000000000000000000000000000000000053 -:105D50000000000000000000000000000000000043 -:105D60000000000000000000000000000000000033 -:105D70000000000000000000000000000000000023 -:105D80000000000000000000000000000000000013 -:105D90000000000000000000000000000000000003 -:105DA00000000000000000000000000000000000F3 -:105DB00000000000000000000000000000000000E3 -:105DC00000000000000000000000000000000000D3 -:105DD00000000000000000000000000000000000C3 +:105D50000000000000000000000000000000200023 +:105D60000400000000000400000402040000000021 +:105D7000000000000400040004000404000004000B +:105D800000000400000020000004000400040000E3 +:105D900000000000000000000000000400000000FF +:105DA0000400000000000000000082040004000065 +:105DB00000000000000000000000000000040000DF +:105DC00004000000000000000000000400040000C7 +:105DD00000000000000000000000000000040000BF :105DE00000000000000000000000000000000000B3 -:105DF00000000000000000000000000000000000A3 -:105E00000000000000000000000000000000000092 +:105DF00000000000000000000000000000020000A1 +:105E00000000000000000000000000002000000072 :105E10000000000000000000000000000000000082 :105E20000000000000000000000000000000000072 :105E30000000000000000000000000000000000062 :105E40000000000000000000000000000000000052 :105E50000000000000000000000000000000000042 -:105E60000000000000000000000000000000000032 -:105E70000000000000000000000000000000000022 +:105E6000000002000000000004000000020000002A +:105E70000400824000000200000002000000000058 :105E80000000000000000000000000000000000012 :105E90000000000000000000000000000000000002 :105EA00000000000000000000000000000000000F2 -:105EB00000000000000000000000000000000000E2 -:105EC00000000000000000000000000000000000D2 +:105EB00000000000020000000000000000000000E0 +:105EC00000000000200000000000000000000000B2 :105ED00000000000000000000000000000000000C2 :105EE00000000000000000000000000000000000B2 -:105EF00000000000000000000000000000000000A2 -:105F00000000000000000000000000000000000091 +:105EF000000000000300000000000000000000009F +:105F0000000000002000000000000000000005006C :105F10000000000000000000000000000000000081 -:105F20000000000000000000000000000000000071 -:105F30000000000000000000000000000000000061 -:105F40000000000000000000000000000000000051 +:105F20000000000000002010000000000000000041 +:105F30000000000005000400000000000000000058 +:105F4000000000000000000000000400000000004D :105F50000000000000000000000000000000000041 :105F60000000000000000000000000000000000031 :105F70000000000000000000000000000000000021 :105F80000000000000000000000000000000000011 :105F90000000000000000000000000000000000001 -:105FA00000000000000000000000000000000000F1 -:105FB00000000000000000000000000000000000E1 +:105FA00000000000000000000000000008000000E9 +:105FB000A000000000000000000000000000000041 :105FC00000000000000000000000000000000000D1 -:105FD00000000000000000000200000000000000BF -:105FE00000000000000000000000000000000000B1 -:105FF00000000000000000000000000000000000A1 +:105FD00000000000000000000000000000000000C1 +:105FE0000000000000000000000000000800001099 +:105FF000001000000084000000000000000000000D :106000000000000000000000000000000000000090 -:106010000000000000000000000000000000000080 -:10602000000000000000000002000000000002006C +:106010000000000000000000000000000000080078 +:106020000800080000000000000000C000000000A0 :106030000000000000000000000000000000000060 -:10604000000000000000000000000400000000004C +:106040000000000000000000000000000000000050 :106050000000000000000000000000000000000040 -:106060000000000000000000000000000000000030 -:106070000000000000000000000000000000000020 -:106080000000000000000000000000000000000010 -:106090000000000000000000000000000000000000 -:1060A00000000000000000000000000000000000F0 -:1060B00000000000000000000000000000000000E0 -:1060C00000000000000000000000000000000400CC -:1060D00000000000000000000000000000000000C0 +:1060600000000000000000000000000000000040F0 +:1060700000000000000000000040000000000020C0 +:1060800000000000000000000000000000000040D0 +:1060900000000000000000000000000000000002FE +:1060A00000000000000000000000000000400000B0 +:1060B0000000000000000000004000020004000991 +:1060C00000002000000000000000000000000000B0 +:1060D00000000000000000000000000000000009B7 :1060E00000000000000000000000000000000000B0 -:1060F00000000000000000000000000000000000A0 -:10610000000000000000000000000000000000008F +:1060F0000000090000002100200000000000000056 +:106100000000000000000000000000000000080087 :10611000000000000000000000000000000000007F :10612000000000000000000000000000000000006F -:10613000000000000000000000000000000000005F +:106130000000020000000000020011000000210029 :10614000000000000000000000000000000000004F -:10615000000000000000000000000000000000003F +:10615000000000000300000000000000000000003C :10616000000000000000000000000000000000002F :10617000000000000000000000000000000000001F :10618000000000000000000000000000000000000F @@ -71214,32 +67117,32 @@ :1061B00000000000000000000000000000000000DF :1061C00000000000000000000000000000000000CF :1061D00000000000000000000000000000000000BF -:1061E00000000000000000000000000000000000AF -:1061F000000000000000000000000000000000009F +:1061E000000000000000000000000000000000109F +:1061F000001000C00084000000000000000000004B :10620000000000000000000000000000000000008E -:10621000000000000000000000000000000000007E -:10622000000000000000000000000000000000006E -:10623000000000000000000000000000000000005E +:106210000008000000000000000000000000000076 +:10622000000000000000080008000000000000005E +:1062300000C00000008421000000000000000000F9 :10624000000000000000000000000000000000004E :10625000000000000000000000000000000000003E :10626000000000000000000000000000000000002E -:10627000000000000000000000000000000000001E -:10628000000000000000000000000000000000000E +:106270000000000208000000000000000000000212 +:10628000000000000000000200000000000000000C :1062900000000000000000000000000000000000FE -:1062A00000000000000000000000000000000000EE -:1062B00000000000000000000000000000000000DE +:1062A00000000000000000000000000000000800E6 +:1062B0000000000040000000000000000800002076 :1062C00000000000000000000000000000000000CE :1062D00000000000000000000000000000000000BE :1062E00000000000000000000000000000000000AE -:1062F000000000000000000000000000000000009E -:10630000000000000000000000000000000000008D -:10631000000000000000000000000000000000007D -:10632000000000000000000000000000000000006D -:10633000000000000000000000000000000000005D -:10634000000000000000000000000000000000004D +:1062F000000000000040000000000000000000401E +:10630000000000002000000000001100000000005C +:10631000000002000000000000000000000000007B +:106320000000000000040000000000000000000069 +:106330000000000002000004020000000200020051 +:106340002000110000000000000000000204000016 :10635000000000000000000000000000000000003D -:10636000000000000000000000000000000000002D -:10637000000000000000000000000000000000001D +:106360000820000002000000000000000000000003 +:106370000400000000000000000000000000000019 :10638000000000000000000000000000000000000D :1063900000000000000000000000000000000000FD :1063A00000000000000000000000000000000000ED @@ -71394,13 +67297,13 @@ :106CF0000000000000000000000000000000000094 :106D00000000000000000000000000000000000083 :106D10000000000000000000000000000000000073 -:106D20000000000000000000000000000000000063 -:106D30000000000000000000000000000000000053 +:106D20002000000000000000000000000000000043 +:106D30000403200000000000040000000000000028 :106D40000000000000000000000000000000000043 -:106D50000000000000000000000000000000000033 -:106D60000000000000000000000000000000000023 -:106D70000000000000000000000000000000000013 -:106D80000000000000000000000000000000000003 +:106D50000003000000000000000000000000000030 +:106D60000000000002000000000084000000C000DD +:106D7000820084030000000000000000000000000A +:106D800000000400000000000000000000000000FF :106D900000000000000000000000000000000000F3 :106DA00000000000000000000000000000000000E3 :106DB00000000000000000000000000000000000D3 @@ -71408,25 +67311,25 @@ :106DD00000000000000000000000000000000000B3 :106DE00000000000000000000000000000000000A3 :106DF0000000000000000000000000000000000093 -:106E00000000000000000000000000000000000082 +:106E00000000400000000000000000000000000042 :106E10000000000000000000000000000000000072 -:106E20000000000000000000000000000000000062 -:106E30000000000000000000000000000000000052 -:106E40000000000000000000000000000000000042 +:106E2000020000000000000000000000020000005E +:106E300000000000840000000000000000000000CE +:106E40000000000000000000000000000000020040 :106E50000000000000000000000000000000000032 :106E60000000000000000000000000000000000022 :106E70000000000000000000000000000000000012 :106E80000000000000000000000000000000000002 :106E900000000000000000000000000000000000F2 -:106EA00000000000000000000000000000000000E2 -:106EB00000000000000000000000000000000000D2 -:106EC00000000000000000000000000000000000C2 +:106EA000000000080000008200000008000002004E +:106EB00000000000000000A0000000000000000032 +:106EC0000000004000000000000000020000000080 :106ED00000000000000000000000000000000000B2 -:106EE00000000000000000000000000000000000A2 -:106EF0000000000000000000000000000000000092 +:106EE0000000000000000000000009000000000099 +:106EF000000000000000050000000000000000008D :106F00000000000000000000000000000000000081 :106F10000000000000000000000000000000000071 -:106F20000000000000000000000000000000000061 +:106F20000000000000400000000000000000000021 :106F30000000000000000000000000000000000051 :106F40000000000000000000000000000000000041 :106F50000000000000000000000000000000000031 @@ -71442,23 +67345,23 @@ :106FF0000000000000000000000000000000000091 :107000000000000000000000000000000000000080 :107010000000000000000000000000000000000070 -:107020000000000000000000000000000000000060 -:107030000000000000000000000000000000000050 -:107040000000000000000000000000000000000040 -:107050000000000000000000000000000000000030 -:107060000000000000000000000000000000000020 -:107070000000000000000000000000000000000010 -:107080000000000000000000000000000000000000 +:1070200000000000000000000000880000000000D8 +:107030000000000088000000000082000000000046 +:107040000000000000000000000000000800000038 +:107050000000000000000000000000000000080028 +:10706000000000000000000000000000A0009000F0 +:10707000000000000000000000000000820000008E +:1070800020000000000000000400000000000000DC :1070900000000000000000000000000000000000F0 -:1070A00000000000000000000000000000000000E0 -:1070B00000000000000000000000000000000000D0 -:1070C00000000000000000000000000000000000C0 -:1070D00000000000000000000000000000000000B0 -:1070E00000000000000000000000000000000000A0 -:1070F0000000000000000000000000000000000090 -:10710000000000000000000000000000000000007F -:10711000000000000000000000000000000000006F -:10712000000000000000000000000000000000005F +:1070A0000000000000000000000000200990100017 +:1070B0000000000000000400008800000000000044 +:1070C000000000000000108800000000030021887C +:1070D000000000000000100000000000000003009D +:1070E0000000000002000000000000001100090084 +:1070F0001100030011001100110000000000000247 +:107100000300024000900000110000200000050074 +:10711000100003001100000009000300000000003F +:10712000110000000000000000000000000000004E :10713000000000000000000000000000000000004F :10714000000000000000000000000000000000003F :10715000000000000000000000000000000000002F @@ -71476,21 +67379,21 @@ :10721000000000000000000000000000000000006E :10722000000000000000000000000000000000005E :10723000000000000000000000000000000000004E -:10724000000000000000000000000000000000003E +:1072400000000000000000000000000082000000BC :10725000000000000000000000000000000000002E -:10726000000000000000000000000000000000001E +:10726000000000000000000000000200000000001C :10727000000000000000000000000000000000000E :1072800000000000000000000000000000000000FE :1072900000000000000000000000000000000000EE :1072A00000000000000000000000000000000000DE -:1072B00000000000000000000000000000000000CE -:1072C00000000000000000000000000000000000BE -:1072D00000000000000000000000000000000000AE -:1072E000000000000000000000000000000000009E -:1072F000000000000000000000000000000000008E -:10730000000000000000000000000000000000007D -:10731000000000000000000000000000000000006D -:10732000000000000000000000000000000000005D +:1072B00000002100000000000000000000000900A4 +:1072C00040880000000200020000000000200000D2 +:1072D00000000000000000000000000000020000AC +:1072E00000000000009008000000000000000800FE +:1072F000000000000000210000001140000000001C +:107300004000000000002000000000040002000017 +:107310000000000000000300000008000000000062 +:1073200008000002080008000800000000880000B3 :10733000000000000000000000000000000000004D :10734000000000000000000000000000000000003D :10735000000000000000000000000000000000002D @@ -71637,80 +67540,80 @@ :107C20000000000000000000000000000000000054 :107C30000000000000000000000000000000000044 :107C40000000000000000000000000000000000034 -:107C50000000000000000000000000000000000024 -:107C60000000000000000000000000000000000014 -:107C70000000000000000000000000000000000004 -:107C800000000000000000000000000000000000F4 -:107C900000000000000000000000000000000000E4 -:107CA00000000000000000000000000000000000D4 -:107CB00000000000000000000000000000000000C4 -:107CC00000000000000000000000000000000000B4 -:107CD00000000000000000000000000000000000A4 -:107CE0000000000000000000000000000000000094 -:107CF0000000000000000000000000000000000084 -:107D00000000000000000000000000000000000073 -:107D10000000000000000000000000000000000063 -:107D20000000000000000000000000000000000053 -:107D30000000000000000000000000000000000043 -:107D40000000000000000000000000000000000033 -:107D50000000000000000000000000000000000023 -:107D60000000000000000000000000000000000013 -:107D70000000000000000000000000000000000003 -:107D800000000000000000000000000000000000F3 -:107D900000000000000000000000000000000000E3 +:107C500000000000000020000000200000000200E2 +:107C6000200004000002000000000000820000006C +:107C700002000008000420000000200000000000B6 +:107C800020000000000400000000000000000200CE +:107C900000000408008800030004820000000000C7 +:107CA000000002000000880800000400000000003E +:107CB0002000000020080008000004000000000070 +:107CC000000000000000000200002000000004008E +:107CD000000000000008008200000000000000001A +:107CE0000000000000000004000000000000000090 +:107CF000000000000001000900000000000000007A +:107D00000000000000000000000000020000000071 +:107D1000000000000001000800000000000000005A +:107D200000000000000000000084000000000000CF +:107D30000000000000000001000900000000000039 +:107D4000000000000000000000040000000000002F +:107D5000000000000000000100050000000000001D +:107D60008800000002000000000000000000000089 +:107D7000020000000000000000C00000020000003F +:107D800000000000020000000200000000000000EF +:107D90000000020000000000008000000000000061 :107DA00000000000000000000000000000000000D3 -:107DB00000000000000000000000000000000000C3 +:107DB0000000000000000000000000800000000043 :107DC00000000000000000000000000000000000B3 -:107DD00000000000000000000000000000000000A3 -:107DE0000000000000000000000000000000000093 -:107DF0000000000000000000000000000000000083 -:107E00000000000000000000000000000000000072 -:107E10000000000000000000000000000000000062 -:107E20000000000000000000000000000000000052 -:107E30000000000000000000000000000000000042 -:107E40000000000000000000000000000000000032 -:107E50000000000000000000000000000000000022 -:107E60000000000000000000000000000000000012 -:107E70000000000000000000000000000000000002 +:107DD0000000000000000000000000800000001013 +:107DE000000000C02040040000200000000020002F +:107DF0000000000000080000000000020000000079 +:107E00000000000000000000000000080000040066 +:107E10000000000000080000000000020000000058 +:107E2000000000000000000000000000000400004E +:107E30000000000000000008000000000004000036 +:107E4000000000000000000000000000000800002A +:107E50000000000000000008000000000008000012 +:107E600000000000000000410000000000000000D1 +:107E70000000000000000000000000000080000082 :107E800000000000000000000000000000000000F2 -:107E900000000000000000000000000000000000E2 +:107E90000000000000000000000000000080000062 :107EA00000000000000000000000000000000000D2 -:107EB00000000000000000000000000000000000C2 +:107EB0000000000000000000000000000000008240 :107EC00000000000000000000000000000000000B2 :107ED00000000000000000000000000000000000A2 -:107EE0000000000000000000000000000000000092 -:107EF0000000000000000000000000000000000082 +:107EE000000000000000000000000000000000088A +:107EF000000000000000000000000000000000087A :107F00000000000000000000000000000000000071 -:107F10000000000000000000000000000000000061 -:107F20000000000000000000000000000000000051 -:107F30000000000000000000000000000000000041 -:107F4000000000000000020000000000000000002F +:107F1000000000000000000000000000000000045D +:107F20000000000000000000000000000800000049 +:107F3000000000000000000000000000000003003E +:107F40000021000000000000000000000000000010 :107F50000000000000000000000000000000000021 -:107F60000000000000000000000000000000000011 -:107F70000000000000000000000000000000000001 -:107F800000000000000000000000000000000000F1 +:107F60000000A000A0000000A000000000008400AD +:107F7000000088008200C0008200A000A0008200F3 +:107F800002008200820082008200000000000000E7 :107F900000000000000000000000000000000000E1 -:107FA00000000000000000000000000000000000D1 -:107FB00000000000000000000000000000000000C1 -:107FC00000000000000000000000000000000000B1 -:107FD00000000000000000000000000000000000A1 -:107FE0000000000000000000000000000000000091 +:107FA000400000000800000008000200000040003F +:107FB000A000900000002000A000820000008200CD +:107FC000000082004000820000000000000000006D +:107FD0000000000090000000000000000000000011 +:107FE0000800000000000800000020000000000061 :107FF0000000000000000000000000000000000081 -:108000000000000000000000000000000000000070 +:108000000000004000000000000000000000000030 :108010000000000000000000000000000000000060 :108020000000000000000000000000000000000050 -:108030000000000000000000000000000000000040 +:1080300000000000200003000000000040000000DD :108040000000000000000000000000000000000030 :108050000000000000000000000000000000000020 -:108060000000000000000000000000000000000010 -:108070000000000000000000000000000000000000 -:1080800000000000000000000000000000000000F0 -:1080900000000000000000000000000000000000E0 -:1080A00000000000000000000000000000000000D0 -:1080B00000000000000000000000000000000000C0 -:1080C00000000000000000000000000000000000B0 -:1080D00000000000000000000000000000000000A0 -:1080E0000000000000000000000000000000000090 +:10806000000000000000000000000000820000008E +:108070000000C00008000000000000000000000038 +:10808000000000000800A000000000000000080040 +:10809000A0000800820000000000000000000000B6 +:1080A00008000000000000000000000000000000C8 +:1080B00000000000000082000000000082000000BC +:1080C0000000C000000000000000000000000000F0 +:1080D0000000000000000800000000000000000098 +:1080E0000800000000000000000000000000000088 :1080F0000000000000000000000000000000000080 :10810000000000000000000000000000000000006F :10811000000000000000000000000000000000005F @@ -71718,96 +67621,96 @@ :10813000000000000000000000000000000000003F :10814000000000000000000000000000000000002F :10815000000000000000000000000000000000001F -:10816000000000000000000000000000000000000F -:1081700000000000000000000000000000000000FF -:1081800000000000000000000000000000000000EF -:1081900000000000000000000000000000000000DF -:1081A00000000000000000000000000000000000CF -:1081B00000000000000000000000000000000000BF -:1081C00000000000000000000000000000000000AF -:1081D000000000000000000000000000000000009F -:1081E000000000000000000000000000000000008F +:108160000000000000000000000000000800000007 +:10817000000002000000040000008200C0000000B7 +:108180004000100008000000000000000400C000D3 +:10819000000482008200000088000000000000004F +:1081A00008020000000000000000000000002000A5 +:1081B0000200020000000200400000020000000077 +:1081C000000002020041000000004000040008001E +:1081D00082008202A00008000000000040000000B1 +:1081E000000040000002000000000000000000004D :1081F000000000000000000000000000000000007F -:10820000000000000000000000000000000000006E +:10820000210000000000000000000000000000004D :10821000000000000000000000000000000000005E :10822000000000000000000000000000000000004E :10823000000000000000000000000000000000003E :10824000000000000000000000000000000000002E :10825000000000000000000000000000000000001E :10826000000000000000000000000000000000000E -:1082700000000000000000000000000000000000FE -:1082800000000000000000000000000000000000EE -:1082900000000000000000000000000000000000DE -:1082A00000000000000000000000000000000000CE -:1082B00000000000000000000000000000000000BE -:1082C00000000000000000000000000000000000AE -:1082D000000000000000000000000000000000009E -:1082E000000000000000000000000000000000008E -:1082F000000000000000000000000000000000007E -:10830000000000000000000000000000000000006D -:10831000000000000000000000000000000000005D -:10832000000000000000000000000000000000004D -:10833000000000000000000000000000000000003D -:10834000000000000000000000000000000000002D -:10835000000000000000000000000000000000001D -:10836000000000000000000000000000000000000D -:1083700000000000000000000000000000000000FD -:1083800000000000000000000000000000000000ED -:1083900000000000000000000000000000000000DD -:1083A00000000000000000000000000000000000CD -:1083B00000000000000000000000000000000000BD -:1083C00000000000000000000000000000000000AD -:1083D000000000000000000000000000000000009D -:1083E000000000000000000000000000000000008D -:1083F000000000000000000000000000000000007D -:10840000000000000000000000000000000000006C -:10841000000000000000000000000000000000005C -:10842000000000000000000000000000000000004C -:10843000000000000000000000000000000000003C -:10844000000000000000000000000000000000002C -:10845000000000000000000000000000000000001C -:10846000000000000000000000000000000000000C -:1084700000000000000000000000000000000000FC -:1084800000000000000000000000000000000000EC -:1084900000000000000000000000000000000000DC -:1084A00000000000000000000000000000000000CC -:1084B00000000000000000000000000000000000BC -:1084C00000000000000000000000000000000000AC +:1082700020000000000100000000000001200001BB +:108280000000008804C000000000000100000000A1 +:1082900000000000000100000000000000200000BD +:1082A00000000002C0040000000000010000000007 +:1082B00000000000000000000000C00000010108F4 +:1082C0000000C0000082C0820000C0000001000069 +:1082D000000000000000000000000000000100207D +:1082E0000000C10000A0C0820000C000000100002A +:1082F00003008000000000040000000000200200D5 +:1083000005400300000000000000000000410000E4 +:108310000000000000000002000000000040080013 +:1083200000400500008000800000000000410000C7 +:108330000000000000000000000900000000000331 +:108340002080000484000000808000008000000382 +:108350000000000000000000000500000000000513 +:1083600040000040C000000080800000800000034A +:1083700000000000210000000000000010000000CC +:108380001000A0009000004020000000000000004D +:10839000800900000500000000000000200000002F +:1083A0001000A00090000000048000000000000009 +:1083B0008005000000002000000000000000050013 +:1083C0000000040040002080000003008000000046 +:1083D00000C08040000020000000000000000500F8 +:1083E00000001000A00020800000030080000000BA +:1083F000008080400000000000000000000001003C +:108400000000010040002140000101009000000038 +:108410000000C0000000000000000000000000009C +:1084200000000100020083400000010290000000F3 +:108430000000C0000000000001000000000000007B +:1084400000000000000084008504000001004000DE +:10845000000000C1820100000100000000000000D7 +:108460000000000001A0040041040000010004001D +:10847000000000C0820100000000C00000000000F9 +:1084800000000001C00000400000040000000000E7 +:1084900000000001000000000000000000000000DB +:1084A0000000000082000004000001000000000045 +:1084B00000000001000000000000000000000000BB +:1084C000000000000001040100080000010000009D :1084D000000000000000000000000000000000009C -:1084E000000000000000000000000000000000008C -:1084F000000000000000000000000000000000007C -:10850000000000000000000000000000000000006B -:10851000000000000000000000000000000000005B -:10852000000000000000000000000000000000004B -:10853000000000000000000000000000000000003B -:10854000000000000000000000000000000000002B -:10855000000000000000000000000000000000001B -:10856000000000000000000000000000000000000B -:1085700000000000000000000000000000000000FB -:1085800000000000000000000000000000000000EB -:1085900000000000000000000000000000000000DB -:1085A00000000000000000000000000000000000CB -:1085B00000000000000000000000000000000000BB -:1085C00000000000000000000000000000000000AB -:1085D000000000000000000000000000000000009B -:1085E000000000000000000000000000000000008B -:1085F000000000000000000000000000000000007B -:10860000000000000000000000000000000000006A -:10861000000000000000000000000000000000005A -:10862000000000000000000000000000000000004A -:10863000000000000000000000000000000000003A -:10864000000000000000000000000000000000002A -:10865000000000000000000000000000000000001A -:10866000000000000000000000000000000000000A -:1086700000000000000000000000000000000000FA -:1086800000000000000000000000000000000000EA -:1086900000000000000000000000000000000000DA -:1086A00000000000000000000000000000000000CA -:1086B00000000000000000000000000000000000BA +:1084E000000000000001040100080000010000007D +:1084F00000000000000000000000000080000000FC +:10850000000000000010801000000000C10000000A +:10851000000000000041000000000000000000001A +:10852000000000000003000900800000200000009F +:1085300000000000004100000000000000000000FA +:1085400000000000000000208004008000004100C6 +:1085500000000000000000410000000000000000DA +:1085600000000000000000208002008000004100A8 +:10857000000000000000004100000000800000C179 +:1085800000000000800040000000008480000040E7 +:10859000000000000000000040840000800500830F +:1085A0000000000000000500000000C100000040C5 +:1085B0000000000000000000088300000020800090 +:1085C00000820000000000000500000000410000E3 +:1085D0000004000000410000000009850020800028 +:1085E00000C1000000408000820000000041000047 +:1085F00000040000004100000000400500004000B1 +:1086000000C10000000004008200000000410200E0 +:108610000000000000000000000001040000040051 +:108620000083000000009000820000000003400072 +:108630000000000000000000000001C00000000178 +:108640002000004100000000820082000000008342 +:108650008200000100000001000000000002000193 +:1086600020000040000000002000050000000091F4 +:1086700082000001000000010000000000820000F4 +:10868000000000000011000000000000000A41127C +:1086900000E00700000000000000000000000000F3 +:1086A0000000000000000000000000000000811237 +:1086B00000E007004800000000000000000A000081 :1086C00000000000000000000000000000000000AA -:1086D000000000000000000000000000000000009A +:1086D000811200E0400048420000000000004842D3 :1086E000000000000000000000000000000000008A -:1086F000000000000000000000000000000000007A +:1086F000811200E0400048420000000000004842B3 :108700000000000000000000000000000000000069 :108710000000000000000000000000000000000059 :108720000000000000000000000000000000000049 @@ -71824,24 +67727,24 @@ :1087D0000000000000000000000000000000000099 :1087E0000000000000000000000000000000000089 :1087F0000000000000000000000000000000000079 -:108800000000000000000000000000000000000068 +:1088000000000000757B0000000000000000000078 :108810000000000000000000000000000000000058 -:108820000000000000000000000000000000000048 +:108820000000DEAE757B00000000000000000000CC :108830000000000000000000000000000000000038 -:108840000000000000000000000000000000000028 +:108840000000DEAE0000757B0000000000000000AC :108850000000000000000000000000000000000018 -:108860000000000000000000000000000000000008 +:1088600000000000DEAE757B00000000000000008C :1088700000000000000000000000000000000000F8 -:1088800000000000000000000000000000000000E8 -:1088900000000000000000000000000000000000D8 -:1088A00000000000000000000000000000000000C8 -:1088B00000000000000000000000000000000000B8 -:1088C00000000000000000000000000000000000A8 -:1088D0000000000000000000000000000000000098 -:1088E0000000000000000000000000000000000088 -:1088F0000000000000000000000000000000000078 -:108900000000000000000000000000000000000067 -:108910000000000000000000000000000000000057 +:1088800000000000DEAE6126034000000000000092 +:108890000230A0000000000000000C4000000000BA +:1088A000000002C064866126034000000000000052 +:1088B0000230A0000000000000000C40000000009A +:1088C000000002C064860000612603400000000032 +:1088D00000000230A0000000000000000C4000007A +:1088E0000000000002C06486612603400000000012 +:1088F00000000230A0000000000000000C4000005A +:108900000000000002C0648600028800000000042D +:1089100000008400000000000000000200002000B1 :108920000000000000000000000000000000000047 :108930000000000000000000000000000000000037 :108940000000000000000000000000000000000027 @@ -71849,24 +67752,24 @@ :108960000000000000000000000000000000000007 :1089700000000000000000000000000000000000F7 :1089800000000000000000000000000000000000E7 -:1089900000000000000000000000000000000000D7 -:1089A00000000000000000000000000000000000C7 +:1089900000000000000000000500000000000000D2 +:1089A00000020000000000000400000000000000C1 :1089B00000000000000000000000000000000000B7 :1089C00000000000000000000000000000000000A7 :1089D0000000000000000000000000000000000097 -:1089E0000000000000000000000000000000000087 +:1089E0004000050000000000000000000000000042 :1089F0000000000000000000000000000000000077 :108A00000000000000000000000000000000000066 :108A10000000000000000000000000000000000056 :108A20000000000000000000000000000000000046 -:108A30000000000000000000000000000000000036 +:108A30000200000000000000000000000000000034 :108A40000000000000000000000000000000000026 :108A50000000000000000000000000000000000016 :108A60000000000000000000000000000000000006 :108A700000000000000000000000000000000000F6 :108A800000000000000000000000000000000000E6 -:108A900000000000000000000000000000000000D6 -:108AA00000000000000000000000000000000000C6 +:108A900000000000000000000000000002000000D4 +:108AA000000000020088000000000000002000001C :108AB00000000000000000000000000000000000B6 :108AC00000000000000000000000000000000000A6 :108AD0000000000000000000000000000000000096 @@ -71881,54 +67784,54 @@ :108B60000000000000000000000000000000000005 :108B700000000000000000000000000000000000F5 :108B800000000000000000000000000000000000E5 -:108B900000000000000000000000000000000000D5 -:108BA00000000000000000000000000000000000C5 -:108BB00000000000000000000000000000000000B5 +:108B90000000000000000300410041000000000050 +:108BA0000000000000000000008400000000000041 +:108BB000000000000900000041004100000000002A :108BC00000000000000000000000000000000000A5 :108BD0000000000000000000000000000000000095 :108BE0000000000000000000000000000000000085 -:108BF0000000000000000000000000000000000075 +:108BF0000000000000000000000021000300000051 :108C00000000000000000000000000000000000064 :108C10000000000000000000000000000000000054 -:108C20000000000000000000000000000000000044 -:108C30000000000000000000000000000000000034 +:108C200000000000A000000900000000000000009B +:108C300000000000820000000000000000000000B2 :108C40000000000000000000000000000000000024 :108C50000000000000000000000000000000000014 -:108C60000000000000000000000000000000000004 -:108C700000000000000000000000000000000000F4 -:108C800000000000000000000000000000000000E4 -:108C900000000000000000000000000000000000D4 -:108CA00000000000000000000000000000000000C4 +:108C600000000000000000000000000000004000C4 +:108C7000000000000000A000000000000000000054 +:108C800000000000000000000000000000001000D4 +:108C900010000000000000000000000000000000C4 +:108CA00000000000000021000000000000000000A3 :108CB00000000000000000000000000000000000B4 :108CC00000000000000000000000000000000000A4 :108CD0000000000000000000000000000000000094 :108CE0000000000000000000000000000000000084 :108CF0000000000000000000000000000000000074 :108D00000000000000000000000000000000000063 -:108D10000000000000000000000000000000000053 -:108D20000000000000000000000000000000000043 -:108D30000000000000000000000000000000000033 +:108D100000000000000000000000820000000000D1 +:108D200000000000000000000000000000800000C3 +:108D30000800000000000000000008000000000023 :108D40000000000000000000000000000000000023 :108D50000000000000000000000000000000000013 :108D60000000000000000000000000000000000003 :108D700000000000000000000000000000000000F3 :108D800000000000000000000000000000000000E3 :108D900000000000000000000000000000000000D3 -:108DA00000000000000000000000000000000000C3 -:108DB00000000000000000000000000000000000B3 -:108DC00000000000000000000000000000000000A3 -:108DD0000000000000000000000000000000000093 -:108DE0000000000000000000000000001000000073 +:108DA000000005000900090000002100000000107B +:108DB00000C00000000000002100000000000000D2 +:108DC000000000000800090000000300000000008F +:108DD00000000090000000002100000000000000E2 +:108DE0000000000000000000000000000000000083 :108DF0000000000000000000000000000000000073 -:108E00000000000000000000000000000000000062 +:108E0000000000000000000021000000030000003E :108E10000000000000000000000000000000000052 -:108E20000000000000000000000000000000000042 -:108E30000000000000000000000000000000000032 +:108E2000000000000800000000000000000000003A +:108E3000000008000000000000000020000000000A :108E40000000000000000000000000000000000022 -:108E50000000000000000000000000000000000012 +:108E5000000008000000000000000000000000000A :108E60000000000000000000000000000000000002 -:108E700000000000000000000000000000000000F2 -:108E800000000000000000000000000000000000E2 +:108E700000000000000004000000000040000000AE +:108E800000000400000000000000000000000000DE :108E900000000000000000000000000000000000D2 :108EA00000000000000000000000000000000000C2 :108EB00000000000000000000000000000000000B2 @@ -71966,10 +67869,10 @@ :1090B00000000000000000000000000000000000B0 :1090C00000000000000000000000000000000000A0 :1090D0000000000000000000000000000000000090 -:1090E0000000000000000000000000000040000040 +:1090E0000000000000000000000000000000000080 :1090F0000000000000000000000000000000000070 :10910000000000000000000000000000000000005F -:10911000000000000000100000000000000000003F +:10911000000000000000000000000000000000004F :10912000000000000000000000000000000000003F :10913000000000000000000000000000000000002F :10914000000000000000000000000000000000001F @@ -72084,47 +67987,47 @@ :109810000000000000000000000000000000000048 :109820000000000000000000000000000000000038 :109830000000000000000000000000000000000028 -:109840000000000000000000000000000000000018 -:109850000000000000000000000000000000000008 -:1098600000000000000000000000000000000000F8 +:10984000000000008800000000000004000020006C +:109850000000000000000000000000000400000004 +:1098600000000002000004000000000000000000F2 :1098700000000000000000000000000000000000E8 -:1098800000000000000000000000000000000000D8 -:1098900000000000000000000000000000000000C8 -:1098A00000000000000000000000000000000000B8 -:1098B00000000000000000000000000000000000A8 -:1098C0000000000000000000000000000000000098 +:1098800000000004000000000400000000000000D0 +:1098900000000000100000040000000000000000B4 +:1098A00000000000000200000200000000000000B4 +:1098B0000000000020000000000000000000000088 +:1098C000000000000002000000000000000009008D :1098D0000000000000000000000000000000000088 -:1098E0000000000000000000000000000000000078 +:1098E0000000000000080000000000000000000070 :1098F0000000000000000000000000000000000068 :109900000000000000000000000000000000000057 :109910000000000000000000000000000000000047 :109920000000000000000000000000000000000037 :109930000000000000000000000000000000000027 -:109940000000000000000000000000000000000017 -:109950000000000000000000000000000000000007 -:1099600000000000000000000000000000000000F7 +:1099400040000000000000000000020000000000D5 +:1099500000002000020008000200020000000200D7 +:109960008400020000000000000000000000000071 :1099700000000000000000000000000000000000E7 -:1099800000000000000000000000000000000000D7 +:1099800000000000000000000000000020000000B7 :1099900000000000000000000000000000000000C7 -:1099A00000000000000000000000000000000000B7 +:1099A0000000000000000000000000002000000097 :1099B00000000000000000000000000000000000A7 :1099C0000000000000000000000000000000000097 -:1099D0000000000000000000000000000000000087 -:1099E0000000000000000000000000000000000077 +:1099D0000000020000000040000000000000000045 +:1099E0000000000000000000000400000000000073 :1099F0000000000000000000000000000000000067 -:109A00000000000000000000000000000000000056 -:109A10000000000000000000000000000000000046 +:109A00000000000000000000000200000000000054 +:109A10000000000000000000000000000000020044 :109A20000000000000000000000000000000000036 :109A30000000000000000000000000000000000026 :109A40000000000000000000000000000000000016 :109A50000000000000000000000000000000000006 :109A600000000000000000000000000000000000F6 -:109A700000000000000000000000000000000000E6 +:109A70000000000000000000000084000000000062 :109A800000000000000000000000000000000000D6 :109A900000000000000000000000000000000000C6 :109AA00000000000000000000000000000000000B6 :109AB00000000000000000000000000000000000A6 -:109AC0000000000000000000000000000000000096 +:109AC0000000000000000000000000000000030093 :109AD0000000000000000000000000000000000086 :109AE0000000000000000000000000000000000076 :109AF0000000000000000000000000000000000066 @@ -72134,7 +68037,7 @@ :109B30000000000000000000000000000000000025 :109B40000000000000000000000000000000000015 :109B50000000000000000000000000000000000005 -:109B600000000000000000000000000000000000F5 +:109B600000000000000000000000002000000000D5 :109B700000000000000000000000000000000000E5 :109B800000000000000000000000000000000000D5 :109B900000000000000000000000000000000000C5 @@ -72157,10 +68060,10 @@ :109CA00000000000000000000000000000000000B4 :109CB00000000000000000000000000000000000A4 :109CC0000000000000000000000000000000000094 -:109CD0000000000000000000000000000000000084 -:109CE0000000000000000000000000000000000074 -:109CF0000000000000000000000000000000000064 -:109D00000000000000000000000000000000000053 +:109CD0000000000000000000000000000000030081 +:109CE000080000000000000000000000000000006C +:109CF000000000000000080000000000000000005C +:109D00000800000000000000000000000000080043 :109D10000000000000000000000000000000000043 :109D20000000000000000000000000000000000033 :109D30000000000000000000000000000000000023 @@ -72188,7 +68091,7 @@ :109E900000000000000000000000000000000000C2 :109EA00000000000000000000000000000000000B2 :109EB00000000000000000000000000000000000A2 -:109EC0000200000000000000000000000000000090 +:109EC0000000000000000000000000000000000092 :109ED0000000000000000000000000000000000082 :109EE0000000000000000000000000000000000072 :109EF0000000000000000000000000000000000062 @@ -72205,12 +68108,12 @@ :109FA00000000000000000000000000000000000B1 :109FB00000000000000000000000000000000000A1 :109FC0000000000000000000000000000000000091 -:109FD0000000000000400000000000000000000041 +:109FD0000000000000000000000000000000000081 :109FE0000000000000000000000000000000000071 :109FF0000000000000000000000000000000000061 :10A000000000000000000000000000000000000050 :10A010000000000000000000000000000000000040 -:10A0200000000000004000000000004000000000B0 +:10A020000000000000000000000000000000000030 :10A030000000000000000000000000000000000020 :10A040000000000000000000000000000000000010 :10A050000000000000000000000000000000000000 @@ -72336,8 +68239,8 @@ :10A7D0000000000000000000000000000000000079 :10A7E0000000000000000000000000000000000069 :10A7F0000000000000000000000000000000000059 -:10A800000000000000000000000000000000000048 -:10A810000000000000000000000000000000000038 +:10A800000000000000000000040000110000000033 +:10A810000004000000000000000400000000000030 :10A820000000000000000000000000000000000028 :10A830000000000000000000000000000000000018 :10A840000000000000000000000000000000000008 @@ -72346,29 +68249,29 @@ :10A8700000000000000000000000000000000000D8 :10A8800000000000000000000000000000000000C8 :10A8900000000000000000000000000000000000B8 -:10A8A00000000000000000000000000000000000A8 +:10A8A00000000000000000000000000000000002A6 :10A8B0000000000000000000000000000000000098 -:10A8C0000000000000000000000000000000000088 +:10A8C0000000000000000000000040000000000048 :10A8D0000000000000000000000000000000000078 -:10A8E0000000000000000000000000000000000068 -:10A8F0000000000000000000000000000000000058 -:10A900000000000000000000000000000000000047 -:10A910000000000000000000000000000000000037 -:10A920000000000000000000000000000000000027 +:10A8E0000000000000000000000000000000400028 +:10A8F0004000000000000000000000000000000018 +:10A900000000000000000000020000000400000041 +:10A9100000000000020000008200000002000000B1 +:10A920000000000004000000000000000000000023 :10A930000000000000000000000000000000000017 :10A940000000000000000000000000000000000007 :10A9500000000000000000000000000000000000F7 :10A9600000000000000000000000000000000000E7 :10A9700000000000000000000000000000000000D7 -:10A9800000000000000000000000000000000000C7 -:10A9900000000000000000000000000000000000B7 -:10A9A00000000000000000000000000000000000A7 -:10A9B0000000000000000000000000000000000097 +:10A9800000000000000000000004000000040000BF +:10A9900000000002000000000008000000000008A5 +:10A9A00000000000000000000004000000000000A3 +:10A9B0000000000000000000004000000000000255 :10A9C0000000000000000000000000000000000087 :10A9D0000000000000000000000000000000000077 -:10A9E0000000000000000000400000000000000027 +:10A9E0000000000000000000000000000000000067 :10A9F0000000000000000000000000000000000057 -:10AA00000000000000000000000000000000000046 +:10AA0000000000000000000000000008000000003E :10AA10000000000000000000000000000000000036 :10AA20000000000000000000000000000000000026 :10AA30000000000000000000000000000000000016 @@ -72379,11 +68282,11 @@ :10AA800000000000000000000000000000000000C6 :10AA900000000000000000000000000000000000B6 :10AAA00000000000000000000000000000000000A6 -:10AAB0000000000000000000000000000000000096 +:10AAB000000008000000000000000000000000008E :10AAC0000000000000000000000000000000000086 :10AAD0000000000000000000000000000000000076 -:10AAE0000000000000000000000000000008000856 -:10AAF0000008000000000000000000000008000046 +:10AAE0000000000000000000000000000000000066 +:10AAF0000000000000000000000000000000000056 :10AB00000000000000000000000000000000000045 :10AB10000000000000000000000000000000000035 :10AB20000000000000000000000000000000000025 @@ -72405,10 +68308,10 @@ :10AC20000000000000000000000000000000000024 :10AC30000000000000000000000000000000000014 :10AC40000000000000000000000000000000000004 -:10AC500000000008000800080004000000000000D8 -:10AC600000000008000000000000000000000000DC -:10AC700000000008000800080000000000000000BC -:10AC800000000008000000000000000000000000BC +:10AC500000000000000000000000000000000000F4 +:10AC600000000000000000000000000000000000E4 +:10AC700000000000000000000000000000000000D4 +:10AC800000000000000000000000000000000000C4 :10AC900000000000000000000000000000000000B4 :10ACA00000000000000000000000000000000000A4 :10ACB0000000000000000000000000000000000094 @@ -72580,39 +68483,39 @@ :10B710000000000000000000000000000000000029 :10B720000000000000000000000000000000000019 :10B730000000000000000000000000000000000009 -:10B7400000000000000000000000000000000000F9 -:10B7500000000000000000000000000000000000E9 -:10B7600000000000000000000000000000000000D9 +:10B7400000000000000000020000000200000000F5 +:10B7500000000000000300000000000000000000E6 +:10B7600000000000000000000000000000040000D5 :10B7700000000000000000000000000000000000C9 -:10B7800000000000000000000000000000000000B9 +:10B7800000000000000000000000000000000004B5 :10B7900000000000000000000000000000000000A9 -:10B7A0000000000000000000000000000000000099 +:10B7A0000002000000000000000000000000000097 :10B7B0000000000000000000000000000000000089 -:10B7C0000000000000000000000000000000000079 +:10B7C0000000000000000000000000000001000474 :10B7D0000000000000000000000000000000000069 :10B7E0000000000000000000000000000000000059 -:10B7F0000000000000000000000000000000000049 +:10B7F0000000000200000000000000000000000047 :10B800000000000000000000000000000000000038 :10B810000000000000000000000000000000000028 -:10B820000000000000000000000000000000000018 -:10B830000000000000000000000000000000000008 -:10B8400000000000000000000000000000000000F8 -:10B8500000000000000000000000000000000000E8 -:10B8600000000000000000000000000000000000D8 -:10B8700000000000000000000000000000000000C8 +:10B8200000000000000000000000400000000000D8 +:10B830000004000000000000000000000000000004 +:10B840000000000000000000020021004000410054 +:10B8500000000000200000000200400000008802FC +:10B860004000000000000000000000000200000096 +:10B8700002000000000000000000020000000000C4 :10B8800000000000000000000000000000000000B8 :10B8900000000000000000000000000000000000A8 :10B8A0000000000000000000000000000000000098 :10B8B0000000000000000000000000000000000088 -:10B8C0000000000000000000000000000000000078 -:10B8D0000000000000000000000000000000000068 -:10B8E0000000000000000000000000000000000058 +:10B8C00000000000000000000000000040008200B6 +:10B8D00090000082000000000000000080000000D6 +:10B8E0000001808200000200000000000000000053 :10B8F0000000000000000000000000000000000048 :10B900000000000000000000000000000000000037 :10B910000000000000000000000000000000000027 -:10B920000000000000000000000000000000000017 +:10B920000000000000000000040000000000000013 :10B930000000000000000000000000000000000007 -:10B9400000000000000000000000000000000000F7 +:10B9400000000000000000000000004000000000B7 :10B9500000000000000000000000000000000000E7 :10B9600000000000000000000000000000000000D7 :10B9700000000000000000000000000000000000C7 @@ -72629,113 +68532,113 @@ :10BA20000000000000000000000000000000000016 :10BA30000000000000000000000000000000000006 :10BA400000000000000000000000000000000000F6 -:10BA500000000000000000000000000000000000E6 -:10BA600000000000000000000000000000000000D6 +:10BA500000000800000008000002000000000000D4 +:10BA60000000000000040000000000000000C00012 :10BA700000000000000000000000000000000000C6 :10BA800000000000000000000000000000000000B6 :10BA900000000000000000000000000000000000A6 -:10BAA0000000000000000000000000000082000014 -:10BAB000000000080000000000000000000000007E +:10BAA0000000000000000000000000000000000096 +:10BAB0000000000000000000000000000000000086 :10BAC0000000000000000000000000000000000076 -:10BAD0000000000000000000000000000000000066 -:10BAE0000000000000000000000000000000000056 -:10BAF0000000000000000000000000000000000046 -:10BB00000000000000000000000000000000000035 +:10BAD0000000000000000000040000010000000061 +:10BAE00000000082000000000000000000000000D4 +:10BAF0000000000000000000000010000000000036 +:10BB000041000000000000000000000000000000F4 :10BB10000000000000000000000000000000000025 -:10BB20000000000000000002000000000000000013 +:10BB20000000000000000000000000000000000015 :10BB30000000000000000000000000000000000005 :10BB400000000000000000000000000000000000F5 -:10BB500000000000000000000000000000000000E5 -:10BB600000000000000000000000000000000000D5 -:10BB700000000000000000000000000000000000C5 +:10BB50000000000088000000900004000400900035 +:10BB60000000400000000000000000020800000487 +:10BB700000000000000000000000000004000000C1 :10BB800000000000000000000000000000000000B5 :10BB900000000000000000000000000000000000A5 :10BBA0000000000000000000000000000000000095 :10BBB0000000000000000000000000000000000085 :10BBC0000000000000000000000000000000000075 :10BBD0000000000000000000000000000000000065 -:10BBE0000000000000000000000000000000000055 +:10BBE0000000000000000000000000000001000054 :10BBF0000000000000000000000000000000000045 :10BC00000000000000000000000000000000000034 :10BC10000000000000000000000000000000000024 :10BC20000000000000000000000000000000000014 :10BC30000000000000000000000000000000000004 -:10BC400000000000000400000000000000000000F0 +:10BC400000000000000000000000000000000000F4 :10BC500000000000000000000000000000000000E4 :10BC600000000000000000000000000000000000D4 :10BC700000000000000000000000000000000000C4 :10BC800000000000000000000000000000000000B4 -:10BC900000000000000000000000200800A00000DC +:10BC900000000000000000000000000000000000A4 :10BCA0000000000000000000000000000000000094 -:10BCB0000000000000000000000000080008000074 +:10BCB0000000000000000000000000000000000084 :10BCC0000000000000000000000000000000000074 -:10BCD0000000000000000000000000000000000064 -:10BCE0000000000000000000000000000000000054 +:10BCD000000000000000000008000000000000005C +:10BCE0000000000000004100410000000020410071 :10BCF0000000000000000000000000000000000044 -:10BD00000000000000000000000000000000000033 +:10BD00000000000000000000030000000000000030 :10BD10000000000000000000000000000000000023 :10BD20000000000000000000000000000000000013 :10BD30000000000000000000000000000000000003 :10BD400000000000000000000000000000000000F3 -:10BD500000000000000000000000000000000000E3 -:10BD600000000000000000000000000000000000D3 -:10BD700000000000000000000000000000000000C3 +:10BD500000000000000000000000000000000001E2 +:10BD6000000088000000000000000000000000004B +:10BD70000001400000000000000000000000000082 :10BD800000000000000000000000000000000000B3 :10BD900000000000000000000000000000000000A3 :10BDA0000000000000000000000000000000000093 :10BDB0000000000000000000000000000000000083 :10BDC0000000000000000000000000000000000073 :10BDD0000000000000000000000000000000000063 -:10BDE0000000000000000000000000000000000053 -:10BDF0000000000000000000000000000000000043 +:10BDE00020410821000300200000000000000000A6 +:10BDF00000080321001100080000000000000000FE :10BE00000000000000000000000000000000000032 :10BE10000000000000000000000000000000000022 :10BE20000000000000000000000000000000000012 :10BE30000000000000000000000000000000000002 :10BE400000000000000000000000000000000000F2 :10BE500000000000000000000000000000000000E2 -:10BE600000000000000000000000000000000000D2 -:10BE700000000000000000000000000000000000C2 +:10BE6000000010001000000010080000000000009A +:10BE70000000100020000000002100000000000071 :10BE800000000000000000000000000000000000B2 -:10BE9000000000000000000000000000200800007A +:10BE900000000000000000000000000000000000A2 :10BEA0000000000000000000000000000000000092 :10BEB0000000000000000000000000000000000082 -:10BEC0000200000000000000000000000000000070 +:10BEC0000000000000000000000000000000000072 :10BED0000000000000000000000000000000000062 -:10BEE0000000000000000000000000000000000052 -:10BEF0000000000000000000000000000000000042 +:10BEE000000000000120010000000101000000002E +:10BEF0000000000001200000000000010000000020 :10BF00000000000000000000000000000000000031 :10BF10000000000000000000000000000000000021 :10BF20000000000000000000000000000000000011 :10BF30000000000000000000000000000000000001 :10BF400000000000000000000000000000000000F1 :10BF500000000000000000000000000000000000E1 -:10BF600000000000000000000000000000000000D1 -:10BF700000000000000000000000000000000000C1 +:10BF600000000000000000000000A0010000000030 +:10BF700000000000000000000100000100010000BE :10BF800000000000000000000000000000000000B1 :10BF900000000000000000000000000000000000A1 :10BFA0000000000000000000000000000000000091 :10BFB0000000000000000000000000000000000081 :10BFC0000000000000000000000000000000000071 :10BFD0000000000000000000000000000000000061 -:10BFE0000000000000000000000000000000000051 -:10BFF0000000000000000000000000000000000041 +:10BFE000000000000000000000204120A02100030C +:10BFF0000000000000000000004008084121000887 :10C000000000000000000000000000000000000030 :10C010000000000000000000000000000000000020 :10C020000000000000000000000000000000000010 :10C030000000000000000000000000000000000000 :10C0400000000000000000000000000000000000F0 :10C0500000000000000000000000000000000000E0 -:10C0600000000000000000000000000000000000D0 -:10C0700000000000000000000000000000000000C0 -:10C0800000000000000000000000000000000000B0 +:10C06000000000000000000000002000410000006F +:10C070000300000000000000000010081000030092 +:10C080002010000000000000000000000000000080 :10C0900000000000000000000000000000000000A0 :10C0A0000000000000000000000000000000000090 :10C0B0000000000000000000000000000000000080 :10C0C0000000000000000000000000000000000070 :10C0D0000000000000000000000000000000000060 :10C0E0000000000000000000000000000000000050 -:10C0F0000000000000000000000000000000000040 +:10C0F000000000000000000000000000010001003E :10C10000000000000000000000000000000000002F :10C11000000000000000000000000000000000001F :10C12000000000000000000000000000000000000F @@ -72791,383 +68694,383 @@ :10C4400000000000000000000000000000000000EC :10C4500000000000000000000000000000000000DC :10C4600000000000000000000000000000000000CC -:10C4700000000000000000000000000000000000BC -:10C4800000000000000000000000000000000000AC +:10C470000000000000000000000000610006000D48 +:10C480000000000000000000000000610006000D38 :10C49000000000000000000000000000000000009C :10C4A000000000000000000000000000000000008C :10C4B000000000000000000000000000000000007C :10C4C000000000000000000000000000000000006C :10C4D000000000000000000000000000000000005C :10C4E000000000000000000000000000000000004C -:10C4F000000000000000000000000000000000003C -:10C50000000000000000000000000000000000002B -:10C51000000000000000000000000000000000001B +:10C4F000000000000000000000000000003CC3FF3E +:10C5000014BEFAFA0000000000000000AFFAEBEBE6 +:10C510005F505F50000000000000000000000000BD :10C52000000000000000000000000000000000000B :10C5300000000000000000000000000000000000FB :10C5400000000000000000000000000000000000EB :10C5500000000000000000000000000000000000DB :10C5600000000000000000000000000000000000CB -:10C5700000000000000000000000000000000000BB -:10C5800000000000000000000000000000000000AB -:10C59000000000000000000000000000000000009B +:10C570000000000000000000000000000000EBEBE5 +:10C58000EBEB14BE50500000000000000000A00AB9 +:10C590002828CFCFC0C0000000000000000000002D :10C5A000000000000000000000000000000000008B :10C5B000000000000000000000000000000000007B :10C5C000000000000000000000000000000000006B :10C5D000000000000000000000000000000000005B :10C5E000000000000000000000000000000000004B :10C5F000000000000000000000000000000000003B -:10C60000000000000000000000000000000000002A -:10C61000000000000000000000000000000000001A +:10C600003C3C5555F0F03C3C0000000000000000B0 +:10C61000404340433A3A3A3A00000000000000002C :10C62000000000000000000000000000000000000A :10C6300000000000000000000000000000000000FA :10C6400000000000000000000000000000000000EA :10C6500000000000000000000000000000000000DA :10C6600000000000000000000000000000000000CA :10C6700000000000000000000000000000000000BA -:10C6800000000000000000000000000000000000AA -:10C69000000000000000000000000000000000009A +:10C6800000000F0FFF00F0F03C3C00000000000035 +:10C690000000F0F300033A3A3A3A000000000000CC :10C6A000000000000000000000000000000000008A :10C6B000000000000000000000000000000000007A :10C6C000000000000000000000000000000000006A :10C6D000000000000000000000000000000000005A :10C6E000000000000000000000000000000000004A -:10C6F000000000000000000000000000000000003A -:10C700000000000000000000000000000000000029 -:10C710000000000000000000000000000000000019 -:10C720000000000000000000000000000000000009 -:10C7300000000000000000000000000000000000F9 +:10C6F00000000000000000000000000088804000F2 +:10C7000000100000000010000010000000050000F4 +:10C710000002000000000000000000040000000013 +:10C720000000000400000000000000000002000003 +:10C7300000000000000000000000000000010000F8 :10C7400000000000000000000000000000000000E9 :10C7500000000000000000000000000000000000D9 :10C7600000000000000000000000000000000000C9 -:10C7700000000000000000000000000000000000B9 -:10C7800000000000000000000000000000000000A9 -:10C790000000000000000000000000000000000099 +:10C7700000000000000000000000000000000010A9 +:10C7800000000001000000000000000100000000A7 +:10C790000002008500020000000000000000000010 :10C7A0000000000000000000000000000000000089 -:10C7B0000000000000000000000000000000000079 +:10C7B0000000210000000000000000000000000058 :10C7C0000000000000000000000000000000000069 -:10C7D0000000000000000000000000000000000059 +:10C7D00000000000000000004000400000000000D9 :10C7E0000000000000000000000000000000000049 :10C7F0000000000000000000000000000000000039 -:10C800000000000000000000000000000000000028 -:10C810000000000000000000000000000000000018 -:10C820000000000000000000000000000000000008 -:10C8300000020000000000000000000000000000F6 +:10C800002040210000000400080089000800040006 +:10C81000A0800502848204000200040008C0040015 +:10C820000000001003800400000000000000000071 +:10C83000200420800482200000000000000000008E :10C8400000000000000000000000000000000000E8 -:10C850000180000000000000000000000000000057 +:10C8500000000000000000000000000000000000D8 :10C8600000000000000000000000000000000000C8 -:10C870000180000000000000000000000000000037 -:10C8800000000000000000000000000000000000A8 -:10C890000000000000000000000000000000000098 -:10C8A0000000000000000000000000000000000088 -:10C8B0000000000000000000000000000000000078 +:10C8700000000000000000000000000000000000B8 +:10C8800000000001040000848000C000040080005B +:10C8900080000010C008401180008002A0048011B8 +:10C8A000800000000005042080000000000040001F +:10C8B00000008001C12080218000000000000000F5 :10C8C0000000000000000000000000000000000068 -:10C8D0000000200800000000000000000000000030 +:10C8D0000000000000000000000000000000000058 :10C8E0000000000000000000000000000000000048 -:10C8F0000000100400000000000000000000000024 -:10C900000000000000000000000000000000000027 -:10C910000000000000000000000000000000000017 -:10C920000000000000000000000000000000000007 -:10C9300000000000000000000000000000000000F7 +:10C8F0000000000000000000000000000000000038 +:10C90000000000000100000900000000000090008D +:10C9100000000000000400400008001100000000BA +:10C9200000090000002100100021000000000000AC +:10C9300000000000002000000002000000000000D5 :10C9400000000000000000000000000000000000E7 :10C9500000000000000000000000000000000000D7 :10C9600000000000000000000000000000000000C7 :10C9700000000000000000000000000000000000B7 -:10C9800000000000000000000000000000000000A7 -:10C990000000000000000000000000000000000097 -:10C9A0000000000000000000000000000000000087 -:10C9B0000000000000000000000000000000000077 +:10C980000000000000000200100011000400000080 +:10C99000000000000000400041000000008802008C +:10C9A00000000000008200000001000000200000E4 +:10C9B0000000000000000001000000010000000075 :10C9C0000000000000000000000000000000000067 :10C9D0000000000000000000000000000000000057 -:10C9E00000000000000000000000000800840008B3 -:10C9F0000008000000080000000000000000000027 -:10CA00000000000000000000000000000000000026 -:10CA10000000000000000000000000000000000016 -:10CA20000000000000000000000000000000000006 -:10CA300000000000000000000000000000000000F6 +:10C9E0000000000000000000000000000000000047 +:10C9F0000000000000000000000000000000000037 +:10CA000000000000000000000210100000210000E3 +:10CA1000000004001000000010100421401000026B +:10CA20000000001110000000C00000008400C000E1 +:10CA300000000000000000000000002000000000D6 :10CA400000000000000000000000000000000000E6 -:10CA500000210021002100210021002100210008E7 -:10CA600000210021002100210021002100210000DF -:10CA70000021002100210021002100000000000011 -:10CA800000000000000000000000000000000000A6 -:10CA90000000000000000000000000000000000096 -:10CAA0000000000000000000000000000000000086 -:10CAB0000000000000000000000000000000000076 +:10CA500000000000000000000000000000000000D6 +:10CA600000000000000000000000000000000000C6 +:10CA700000000000000000000000000000000000B6 +:10CA80000000000000000000000080010000000025 +:10CA90000000000080000000000000018000800114 +:10CAA0000001000000000000000000004100000044 +:10CAB0000000000000000000000000000001000075 :10CAC0000000000000000000000000000000000066 :10CAD0000000000000000000000000000000000056 -:10CAE00000000000000000000000000000C0000086 -:10CAF00000000000008400000000000000000000B2 -:10CB00000000000000000000000000000000000025 -:10CB10000000000000000000000000000000000015 -:10CB20000000000000000000000000000000000005 -:10CB300000000000000000000000000000000000F5 +:10CAE0000000000000000000000000000000000046 +:10CAF0000000000000000000000000000000000036 +:10CB0000000000000000000000000000080008080D +:10CB10004108000040038200A02100000004C00082 +:10CB200000040011C01004000805000008210800DE +:10CB300000204000C0001000C00004000000000001 :10CB400000000000000000000000000000000000E5 -:10CB500000002000000000000000000000000000B5 -:10CB60000000820000000000000000000000000043 -:10CB70000000820000000000000000000000000033 +:10CB500000000000000000000000000000000000D5 +:10CB600000000000000000000000000000000000C5 +:10CB700000000000000000000000000000000000B5 :10CB800000000000000000000000000000000000A5 -:10CB90000000000000000000000000000000000095 -:10CBA0000000000000000000000000000000000085 +:10CB900000000200000003040004210008820000DD +:10CBA0000000000000004091880000040800000020 :10CBB0000000000000000000000000000000000075 :10CBC0000000000000000000000000000000000065 -:10CBD000000000000000000000000000000800004D +:10CBD0000000000000000000000000000000000055 :10CBE0000000000000000000000000000000000045 -:10CBF000000000000000000000000000000800002D +:10CBF0000000000000000000000000000000000035 :10CC00000000000000000000000000000000000024 -:10CC10000000000000000000000000000000000014 -:10CC20000000000000000000000000000000000004 -:10CC300000000000000000000000000000000000F4 -:10CC400000020000000000000000000000000000E2 -:10CC500000000000000800000008000000000000C4 +:10CC100000000409400000000000C0008421000062 +:10CC20000000C00000000000000000030000000041 +:10CC30000000000000210000000010008200C00081 +:10CC400000000000000000000000000000020000E2 +:10CC500000000000000000000000000000000000D4 :10CC600000000000000000000000000000000000C4 -:10CC7000000000000008000000080005004100005E +:10CC700000000000000000000000000000000000B4 :10CC800000000000000000000000000000000000A4 -:10CC90000000000000000000000000000000000094 -:10CCA0000000000000000000000000000000000084 -:10CCB0000000000000000000000000000000000074 +:10CC9000000000008000000000000800000000000C +:10CCA000000000000000000800000000100000006C +:10CCB0000000080000000000000000000800000064 :10CCC0000000000000000000000000000000000064 :10CCD0000000000000000000000000000000000054 :10CCE0000000000000000000000000000000000044 :10CCF0000000000000000000000000000000000034 :10CD00000000000000000000000000000000000023 -:10CD10000000000000000000000000000000000013 -:10CD20000000000000000000000000000000000003 -:10CD300000000000000000000000000000000000F3 -:10CD400000000000000000000000000000000000E3 -:10CD500000000000000000000000000800000008C3 -:10CD600000000000000200080000000000000000B9 -:10CD7000000000000000000000000021000000088A -:10CD8000000000050000000000000000000000009E -:10CD90000000000000000000000000000000000093 -:10CDA0000000000000000000000000000000000083 -:10CDB0000000000000000000000000000000000073 -:10CDC0000000000000000000000000000000000063 +:10CD10000000000000A000900008009000100090AB +:10CD20000010029002A0A0919082009002A00090BA +:10CD30000090009040000090000890020000000069 +:10CD400000000000910300909021042100000000E9 +:10CD500000000000000000000000000000000000D3 +:10CD600000000000000000000000000000000000C3 +:10CD700000000000000000000000000000000000B3 +:10CD800000000000000000000000000000000000A3 +:10CD9000000000000000008000800080008008800B +:10CDA00000800080808080A00290009000838080BE +:10CDB00000800000008080000000000080800000F3 +:10CDC00000000000000010910303401080020000EA :10CDD0000000000000000000000000000000000053 :10CDE0000000000000000000000000000000000043 :10CDF0000000000000000000000000000000000033 :10CE00000000000000000000000000000000000022 -:10CE10000000000000000000000000000000000012 -:10CE20000000000000000000000000000000000002 -:10CE300000000000000000000000000000000000F2 -:10CE400000000000000000000000000100010001DF -:10CE500000C00001000100C00111010001010084B7 -:10CE600000080001000100C10000000100010001F4 -:10CE700000C00001000100C001110100A10100403B -:10CE800000100001000100C10000000000000000CF -:10CE90000000000000000000000000000000000092 -:10CEA0000000000000000000000000000000000082 -:10CEB0000000000000000000000000000000000072 -:10CEC00000000000000000000000000000410041E0 -:10CED0000041008200410041008204C10404084175 -:10CEE0000000008000410041008500000041004139 -:10CEF0000041008200410041008204C10404084155 -:10CF0000000000800041004100850000000000009A -:10CF10000000000000000000000000000000000011 -:10CF20000000000000000000000000000000000001 -:10CF300000000000000000000000000000000000F1 -:10CF400000000000000000000000000000004100A0 -:10CF500003000000008041009100000008008800EC -:10CF600021000000A000C100C100008000004100BD -:10CF700003000000008041009100000008008800CC -:10CF8000210000008300C100C100009100000000EA -:10CF90000000000000000000000000000000000091 -:10CFA0000000000000000000000000000000000081 -:10CFB0000000000000000000000000000000000071 -:10CFC0000000000000000000000000000000000061 -:10CFD00001000100000000C00100C00000000100CD -:10CFE000090084880002C1000900C1000084848413 -:10CFF00001000100000000C00100C00000000100AD -:10D00000090084880002C1004100C10000848484BA +:10CE10000000000000000000800000008000800092 +:10CE200000008021808080000000200880008008B1 +:10CE30000000000080008000000000000010800062 +:10CE400000000000000000000080200580904002EB +:10CE500000000000000000000000000000000000D2 +:10CE600000000000000000000000000000000000C2 +:10CE700000000000000000000000000000000000B2 +:10CE800000000000000000000000000000000000A2 +:10CE90000000000000000000000010000200A000E0 +:10CEA000900002000400A0A09000A088A001A000B3 +:10CEB000900090004000A088900090004000400149 +:10CEC0009000000000000000000008400900084138 +:10CED00090010000000000000000000000000000C1 +:10CEE0000000000000000000000000000000000042 +:10CEF0000000000000000000000000000000000032 +:10CF00000000000000000000000000000000000021 +:10CF1000000000000000000000000000020200020B +:10CF200000820200108800000004040008020008CB +:10CF300001011000900000000040C010004000A05F +:10CF400090080020000000000000000090880121EF +:10CF50000089A1A100000000000000000000000006 +:10CF600000000000000000000000000000000000C1 +:10CF700000000000000000000000000000000000B1 +:10CF800000000000000000000000000000000000A1 +:10CF90000000000000000000000000000000008011 +:10CFA000000000000300800000000080000000C0BE +:10CFB00000C02121101100000000000080800080CE +:10CFC0000080800000000000000000000000004021 +:10CFD0001103032191820000000000000000000006 +:10CFE0000000000000000000000000000000000041 +:10CFF0000000000000000000000000000000000031 +:10D000000000000000000000000000000000000020 :10D010000000000000000000000000000000000010 -:10D020000000000000000000000000000000000000 -:10D0300000000000000000000000000000000000F0 -:10D0400000000000000000000000000000000000E0 -:10D05000000000C00001C0C100000000000100C0CD -:10D0600002040011000100C10000000000010001E5 -:10D07000010000C00001C0C100000000000100C0AC -:10D0800002040011000100C10000000000010001C5 -:10D09000010000000000000000000000000000008F -:10D0A0000000000000000000000000000000000080 -:10D0B0000000000000000000000000000000000070 -:10D0C0000000000000000000000000000000000060 -:10D0D000000000000080004180C10000000000410D -:10D0E00000C100100041004100C1000000000041EB -:10D0F000000504000080004180C1000000000041E4 -:10D1000000C100100041004100C1000000000041CA -:10D110000005040000000000000000000000000006 -:10D1200000000000000000000000000000000000FF -:10D1300000000000000000000000000000000000EF -:10D1400000000000000000000000000000000000DF -:10D15000000000000000C100800080C1000041020A -:10D16000000090004100C141000080020000410029 -:10D17000000080004100C100800080C10000410229 -:10D18000000090004100C141800080090000410082 -:10D1900000008000410000000000000000000000CE -:10D1A000000000000000000000000000000000007F -:10D1B000000000000000000000000000000000006F -:10D1C000000000000000000000000000000000005F -:10D1D0000000000000000000C1004000C0C10000CD -:10D1E0000100020008000100C103C000C0000000EF -:10D1F00001000000C0000100C1004000C0C10000EB -:10D200000100020008000100C1031000C00000007E -:10D2100001000000C000010000000000000000004C -:10D2200000000000000000000000000000000000FE -:10D2300000000000000000000000000000000000EE -:10D2400000000000000000000000000000000000DE -:10D2500000000000000000000000000000000000CE -:10D26000004200000000000000008112008807005A -:10D270004800000000000000000000000000000066 -:10D28000004200000000000000008112008807003A -:10D290004800000000000000000000000000000046 -:10D2A000000000000000000000000000000000007E -:10D2B000000000000000000000000000000000006E -:10D2C000000000000000000000000000000000005E -:10D2D000000000000000000000000000000000004E +:10D020000000808800800000000300A10000800054 +:10D03000A1881185058020080000802000000000E4 +:10D0400000000020000000000000000000000000C0 +:10D0500003009108050011200000000000000000FE +:10D0600000000000000000000000000000000000C0 +:10D0700000000000000000000000000000000000B0 +:10D0800000000000000000000000000000000000A0 +:10D090000000000000000000000000000000000090 +:10D0A000000000008210820890000000901008022A +:10D0B0001000030220200084010100000490008879 +:10D0C0004000000000900008000000000000000088 +:10D0D000000090000310200809000000000000007C +:10D0E0000000000000000000000000000000000040 +:10D0F0000000000000000000000000000000000030 +:10D10000000000000000000000000000000000001F +:10D11000000000000000000000000000000000000F +:10D1200000000000000000000700000000000000F8 +:10D1300007000000000000000700000000000000E1 +:10D14000070000820000000007000000000000004F +:10D1500000000000000000E00700000000000000E8 +:10D1600000000000000000000000000000000000BF +:10D1700000000000000000000000000000000000AF +:10D18000000000000000000000000000000000009F +:10D19000000000000000000000000000000000008F +:10D1A0000000000000000CFC0CFCF03CF03C4D4D7D +:10D1B0004D4D3CFF3CFFFFFF00FFE8E8E8E8AA3CDC +:10D1C000AA3C00AA55FF00000000BEFA3C3C00004B +:10D1D000000000000000FF553C3CBCFDB4F5000021 +:10D1E000000000000000000000000000000000003F +:10D1F000000000000000000000000000000000002F +:10D20000000000000000000000000000000000001E +:10D21000000000000000000000000000000000000E +:10D2200000000000000000000CFC0CFCF03CF03C96 +:10D23000FF00FF003C003C00000000FFE8E8E8E8D9 +:10D24000AA3CAA3C00AA55FF0000000014503C3C38 +:10D250000000000000000000FA503C3C3C3C14146C +:10D2600000000000000000000000000000000000BE +:10D2700000000000000000000000000000000000AE +:10D28000000000000000000000000000000000009E +:10D29000000000000000000000000000000000008E +:10D2A000000000000000000000007D287D28FD5DDA +:10D2B000A808FF00FF00BF3D83013F303F30BF1F84 +:10D2C000B010FF00FF00BF3D83013F033F03BF3DA0 +:10D2D000830100000000000000000FFF0F3F00006E :10D2E000000000000000000000000000000000003E :10D2F000000000000000000000000000000000002E :10D30000000000000000000000000000000000001D :10D31000000000000000000000000000000000000D -:10D3200000000000000000000000000000000000FD -:10D3300000000000000000000000000000000000ED -:10D3400000000000000000000000000000000000DD -:10D3500000000000000000000000000000000000CD -:10D3600000000000000000000000000000000000BD +:10D32000000000000000000000000000FF0AF500FF +:10D33000FDFD08085C5CFC0CBFBF0101FF50AF00A5 +:10D34000BFBF1010FC5CAC0CBFBF01013F033F032B +:10D35000BFBF010100000000000000000FAF0FAFD1 +:10D3600057FFD7FF00000000000000000000000091 :10D3700000000000000000000000000000000000AD :10D38000000000000000000000000000000000009D :10D39000000000000000000000000000000000008D -:10D3A000000000000000000000000000000000007D -:10D3B000000000000000000000000000000000006D -:10D3C000000000000000000000000000000000005D -:10D3D000000000000000000000000000000000004D -:10D3E000757B00000000000000000000000000004D -:10D3F0000000000000000000000000000000DEAEA1 -:10D40000757B00000000000000000000000000002C -:10D410000000000000000000000000000000DEAE80 +:10D3A00000000000000000000000000000008000FD +:10D3B00000080010000000000008000000000061EC +:10D3C000000E000D000080000008001000000000AA +:10D3D00000080000000000000000000000000061E4 +:10D3E000000900090000000000000000000000002B +:10D3F000000000000000000000000000000000002D +:10D40000000000000000000000000000000000001C +:10D41000000000000000000000000000000000000C :10D4200000000000000000000000000000000000FC :10D4300000000000000000000000000000000000EC -:10D4400000000000000000000000000000000000DC +:10D44000FDFDC1C100000000000000000000000060 :10D4500000000000000000000000000000000000CC -:10D46000000060C603000000000000000031E00082 -:10D470000000000000000C0000000000000000C0E0 -:10D48000630660C603000000000000000031E000F9 -:10D490000000000000000C0000000000000000C0C0 -:10D4A0006306000000000000000000000000000013 +:10D46000FF00FF00287DF0F0000000000000000039 +:10D4700000000000000000000000000000000000AC +:10D48000000000000000000000000000000000009C +:10D49000000000000000000000000000000000008C +:10D4A000000000000000000000000000000000007C :10D4B000000000000000000000000000000000006C -:10D4C000000000000000000000000000000000005C +:10D4C00000007DFF41C301000000000000000000DB :10D4D000000000000000000000000000000000004C -:10D4E000000000000000000000000000000000003C +:10D4E00000001E1EBE147878F0F00000000000005E :10D4F000000000000000000000000000000000002C :10D50000000000000000000000000000000000001B :10D51000000000000000000000000000000000000B :10D5200000000000000000000000000000000000FB :10D5300000000000000000000000000000000000EB -:10D5400000000000000000000000000000000000DB +:10D54000000000003033F0F3F0F0F0F000000000D5 :10D5500000000000000000000000000000000000CB -:10D5600000000000000000000000000000000000BB +:10D5600000000000FDFDC101AAAAF0F000000000CB :10D5700000000000000000000000000000000000AB :10D58000000000000000000000000000000000009B :10D59000000000000000000000000000000000008B :10D5A000000000000000000000000000000000007B :10D5B000000000000000000000000000000000006B -:10D5C000000000000000000000000000000000005B +:10D5C0000000000000003C3FFCFFAAAAAAAA00003D :10D5D000000000000000000000000000000000004B -:10D5E000000000000000000000000000000000003B +:10D5E0000000000000003DFD0101AAAAF0F00000CB :10D5F000000000000000000000000000000000002B :10D60000000000000000000000000000000000001A :10D61000000000000000000000000000000000000A :10D6200000000000000000000000000000000000FA -:10D6300000000000000000000000000000000000EA -:10D6400000000000000000000000000000000000DA -:10D6500000000000000000000000000000000000CA +:10D63000000000000000000088000000C0000000A2 +:10D6400000020000200000000000000000020000B6 +:10D6500000000000000000020000000000000000C8 :10D6600000000000000000000000000000000000BA -:10D6700000000000000000000000000000000000AA +:10D6700000000000000000020000000000000000A8 :10D68000000000000000000000000000000000009A -:10D69000000000080000000000080000000800086A -:10D6A000000800080000000000000000000000006A -:10D6B000000000000000000000000000000000006A +:10D690000000000000000000000200000000000088 +:10D6A000000000000000000000000000000000007A +:10D6B0000000000000000000000200000000000068 :10D6C000000000000000000000000000000000005A -:10D6D000000000000000000000000000000000004A +:10D6D0000000000000000000400400000000000006 :10D6E000000000000000000000000000000000003A -:10D6F000000000000000000000000000000000002A -:10D700000000000000000000000000000000000019 -:10D710000000000000000000000000000000000009 +:10D6F0000000000000000000000400000000000026 +:10D7000000000000000000000040000000000000D9 +:10D7100000000000400000000000000400000000C5 :10D7200000000000000000000000000000000000F9 -:10D7300000000000000000000000000000000000E9 -:10D7400000000000000000000000000000000000D9 -:10D7500000000000000000000000000000000000C9 -:10D7600000000000000000000000000000000000B9 +:10D7300000000000000000000000000800000000E1 +:10D740000000000000000000000082000000000057 +:10D75000000002000040040004000000000000007F +:10D760000000000000000000000000008800000031 :10D7700000000000000000000000000000000000A9 -:10D78000000000C0000800080000000000000000C9 +:10D780000200000000000000000000000000000097 :10D790000000000000000000000000000000000089 -:10D7A000000000C0000800080000000000000000A9 +:10D7A0000200000000000000000000000000000077 :10D7B0000000000000000000000000000000000069 -:10D7C0000000000000000000000000000000000059 -:10D7D0000000000000000000000000000000000049 -:10D7E0000000000000000000000000000000000039 -:10D7F0000000000000000000000000000000000029 +:10D7C00000020000000200000000021002840008B5 +:10D7D0000000000000000400000000000000000045 +:10D7E00000000000400400000000000000000008ED +:10D7F0000000000800000000000000000008000019 :10D800000000000000000000000000000000000018 -:10D810000000000000000000000000000000000008 +:10D8100000020000000200000000000000000008FC :10D8200000000000000000000000000000000000F8 -:10D8300000000000000000000000000000000000E8 -:10D8400000000000000000000000000000000000D8 -:10D8500000000000000000000000000000000000C8 -:10D8600000000000000000000000000000000000B8 +:10D8300000000000000000000000000000000004E4 +:10D840000000000000000000000084000000000054 +:10D850000000000084080000880088009000840810 +:10D860000000880000000000000000000000000030 :10D8700000000000000000000000000000000000A8 -:10D880000000000000000000000000000000000098 +:10D880000000000000200000000000000000000078 :10D890000000000000000000000000000000000088 :10D8A0000000000000000000000000000000000078 :10D8B0000000000000000000000000000000000068 -:10D8C0000000000000000000000000000000000058 -:10D8D0000000000000000000000000000000000048 -:10D8E0000000000000000000000000000000000038 -:10D8F0000000000000000000000000000000000028 +:10D8C00000000000000008000000210008004100E6 +:10D8D000000000000000100000000000008821008F +:10D8E000109000000000000000000000410008004F +:10D8F000030005000000000000000000000400001C :10D900000000000000000000000000000000000017 :10D910000000000000000000000000000000000007 :10D9200000000000000000000000000000000000F7 :10D9300000000000000000000000000000000000E7 -:10D9400000000000000000000000000000000000D7 -:10D9500000000000000000000000000000000000C7 -:10D9600000000000000000000000000000000000B7 -:10D97000000000000000000000000000000000089F -:10D98000000000000008000000080008000000007F -:10D99000000000000000000000000000000000087F -:10D9A000000000000008000000080008000000005F +:10D940000000000000000040000000000000004057 +:10D9500000000009084000400000000000000840EE +:10D96000000008000800A0000000000900000000FE +:10D9700000000000000000000000000000000000A7 +:10D980000000000000000000000000000000000097 +:10D990000000000000000000000000000000000087 +:10D9A0000000000000000000000000000000000077 :10D9B0000000000000000000000000000000000067 -:10D9C0000000000000000000000000000000000057 -:10D9D0000000000000000000000000000000000047 -:10D9E0000000000000000000000000000000000037 -:10D9F0000000000000000000000000000000000027 +:10D9C000000000000000000000000000080021002E +:10D9D0000000001000000800050005000900050017 +:10D9E00020001000000000001000210000001000C6 +:10D9F0000000000000001000040000000000000013 :10DA00000000000000000000000000000000000016 :10DA10000000000000000000000000000000000006 :10DA200000000000000000000000000000000000F6 -:10DA300000000000000000000000000000000000E6 -:10DA400000000000000000000000000000000000D6 +:10DA300000000000000000000000040000000000E2 +:10DA400000000000000000000000000000000808C6 :10DA500000000000000000000000000000000000C6 -:10DA600000000000000000000000000000000000B6 +:10DA600000000000000000000000000008000000AE :10DA700000000000000000000000000000000000A6 :10DA80000000000000000000000000000000000096 :10DA90000000000000000000000000000000000086 :10DAA0000000000000000000000000000000000076 :10DAB0000000000000000000000000000000000066 -:10DAC0000000000000000000000000000000000056 -:10DAD0000000000000000000000000000000000046 -:10DAE0000000000000000000000000000000000036 -:10DAF0000000000000000000000000000000000026 -:10DB00000000000000000000000000000000000015 +:10DAC0000000000000000000000000000000004016 +:10DAD0000000009011200000080009020904000065 +:10DAE00000001000050000881090030021000000D5 +:10DAF00021000000000000000000030003A011004E +:10DB00000590000000000000000000000000000080 :10DB10000000000000000000000000000000000005 :10DB200000000000000000000000000000000000F5 :10DB300000000000000000000000000000000000E5 -:10DB400000000000000000000000000000000000D5 -:10DB500000000000000000000000000000000000C5 -:10DB600000000000000000000000000000000000B5 +:10DB400000000000000000000000000008000000CD +:10DB500000210000000000000000000000000000A4 +:10DB60001000000000008400080010000000000009 :10DB700000000000000000000000000000000000A5 :10DB80000000000000000000000000000000000095 :10DB90000000000000000000000000000000000085 :10DBA0000000000000000000000000000000000075 :10DBB0000000000000000000000000000000000065 :10DBC0000000000000000000000000000000000055 -:10DBD0000000000000000000000000000000000045 -:10DBE0000000000000000000000000000000000035 -:10DBF0000000000000000000000000000000000025 +:10DBD0000000000000000000000000100000000035 +:10DBE0000000000000001188000000000000080094 +:10DBF00000001000000011000302000000000000FF :10DC00000000000000000000000000000000000014 :10DC10000000000000000000000000000000000004 :10DC200000000000000000000000000000000000F4 @@ -73327,242 +69230,4339 @@ :10E5C000000000000000000000000000000000004B :10E5D000000000000000000000000000000000003B :10E5E000000000000000000000000000000000002B -:10E5F000000000000000000000000000000000001B -:10E60000000000000000000000000000000000000A -:10E6100000000000000000000000000000000000FA -:10E6200000000000000000000000000000000000EA -:10E6300000000000000000000000000000000000DA +:10E5F00000000000000040002000880040040400EB +:10E6000005008800880200000000000020000400CF +:10E610000400100000000000402000002040000026 +:10E620000082000000400000000400000004000020 +:10E630008400000000000001000000000000000055 :10E6400000000000000000000000000000000000CA :10E6500000000000000000000000000000000000BA :10E6600000000000000000000000000000000000AA -:10E67000000000000000000000000000000000009A -:10E68000000000000000000000000000000000008A -:10E69000000000000000000000000000000000007A -:10E6A000000000000000000000000000000000006A +:10E6700000008400000000004100000020000000B5 +:10E680000000200241000000000000000000000027 +:10E690000000400009000000000000010000000030 +:10E6A00000000010000000010000000000000082D7 :10E6B000000000000000000000000000000000005A -:10E6C000000000000000000000000000000000004A +:10E6C00000004000400000000000000000000000CA :10E6D000000000000000000000000000000000003A :10E6E000000000000000000000000000000000002A -:10E6F000000000000000000000000000000000001A -:10E700000000000000000000000000000000000009 -:10E7100000000000000000000000000000000000F9 -:10E7200000000000000000000000000000000000E9 -:10E7300000000000000000000000000000000000D9 +:10E6F0000000000000000000000088000040000052 +:10E7000000400100C0000908402140410000404194 +:10E710004000000009000800020441004020008081 +:10E720000002000000004010000000000000C000D7 +:10E730000000000020000000880000000000000031 :10E7400000000000000000000000000000000000C9 -:10E7500000000000000000000000000000000000B9 +:10E750000000000000002000000000000000000099 :10E7600000000000000000000000000000000000A9 -:10E770000000000000000000000000000000000099 -:10E780000000000000000000000000000000000089 -:10E790000000000000000000000000000000000079 -:10E7A0000000000000000000000000000000000069 -:10E7B0000000000000000000000000000000000059 +:10E770000000000000000000000000000000000891 +:10E78000400000004000000010118900800004C01B +:10E790008000C1000900C00080000900A0028403BD +:10E7A000002000014100400000010000000000C006 +:10E7B0000400000000000000000000000000000055 :10E7C0000000000000000000000000000000000049 :10E7D0000000000000000000000000000000000039 :10E7E0000000000000000000000000000000000029 :10E7F0000000000000000000000000000000000019 -:10E800000000000000000000000000000000000008 -:10E8100000000000000000000000000000000000F8 -:10E8200000000000000000000000000000000000E8 -:10E8300000000000000000000000000000000000D8 +:10E8000000002008000040002000110040004000EF +:10E8100084000000200010000000000984000010A7 +:10E820000000042004000000000000000000400080 +:10E830004000A020020010000000000000000000C6 :10E8400000000000000000000000000000000000C8 :10E8500000000000000000000000000000000000B8 :10E8600000000000000000000000000000000000A8 :10E870000000000000000000000000000000000098 -:10E880000000000000000000000000000000000088 -:10E890000000000000000000000000000000000078 -:10E8A0000000000000000000000000000000000068 -:10E8B0000000000000000000000000000000000058 +:10E880000000400000000000000083009000000035 +:10E89000880005000000400000400000000000006B +:10E8A00000000000800000004000000000000500A3 +:10E8B00080000000000000000000000000000000D8 :10E8C0000000000000000000000000000000000048 :10E8D0000000000000000000000000000000000038 :10E8E0000000000000000000000000000000000028 :10E8F0000000000000000000000000000000000018 -:10E900000000000000000000000000000000000007 -:10E9100000000000000000000000000000000000F7 -:10E9200000000000000000000000000000000000E7 -:10E9300000000000000000000000000000000000D7 +:10E900000000200400008200840082008480102126 +:10E910004002C004000408048240A08200040040B9 +:10E9200041000010908208A0110000000802004081 +:10E93000089000020000000000000000000200003B :10E9400000000000000000000000000000000000C7 :10E9500000000000000000000000000000000000B7 :10E9600000000000000000000000000000000000A7 -:10E970000000000000000000000000000000000097 -:10E980000000000000000000000000000000000087 -:10E990000000000000000000000000000000000077 -:10E9A0000000000000000000000000000000000067 -:10E9B0000000000000000000000000000000000057 -:10E9C0000000000000000000000000000000000047 +:10E970000000000000000000000000000000000295 +:10E980000000000008040020201002000884000499 +:10E99000080040002100210803A003000810210006 +:10E9A0000001828200010004032120001000040005 +:10E9B0001001030341010300038203000800030068 +:10E9C000082000000000000000000000000000001F :10E9D0000000000000000000000000000000000037 :10E9E0000000000000000000000000000000000027 :10E9F0000000000000000000000000000000000017 -:10EA00000000000000000000000000000000000006 -:10EA100000000000000000000000000000000000F6 -:10EA200000000000000000000000000000000000E6 -:10EA300000000000000000000000000000000000D6 -:10EA400000000000000000000000000000000000C6 +:10EA0000000000000000C0008200000008000000BC +:10EA100004001000840082000810100210000000A2 +:10EA200090200000090008000840001020000000AD +:10EA300010040009A0040000000000000000000015 +:10EA400000200000000000000000000000000000A6 :10EA500000000000000000000000000000000000B6 :10EA600000000000000000000000000000000000A6 :10EA70000000000000000000000000000000000096 :10EA80000000000000000000000000000000000086 -:10EA90000000000000000000000000000000000076 -:10EAA0000000000000000000000000000000000066 -:10EAB0000000000000000000000000000000000056 -:10EAC0000000000000000000000000000000000046 +:10EA9000400000048000000005000000000010009D +:10EAA0000500000000900840030000000000840002 +:10EAB0000000000000000000000000000004000052 +:10EAC0000000000000000300000000000000000043 :10EAD0000000000000000000000000000000000036 :10EAE0000000000000000000000000000000000026 :10EAF0000000000000000000000000000000000016 -:10EB00000000000000000000000000000000000005 -:10EB100000000000000000000000000000000000F5 -:10EB200000000000000000000000000000000000E5 -:10EB300000000000000000000000000000000000D5 -:10EB400000000000000000000000000000000000C5 +:10EB000000000000000000000000000800100020CD +:10EB10000000C000838084008900102140000800AC +:10EB20000000040000000800100000002020200069 +:10EB3000A00000100000080000000000000000001D +:10EB4000080000000000002000000000000000009D :10EB500000000000000000000000000000000000B5 :10EB600000000000000000000000000000000000A5 :10EB70000000000000000000000000000000000095 :10EB80000000000000000000000000000000000085 -:10EB90000000000000000000000000000000000075 -:10EBA0000000000000000000000000000000000065 -:10EBB0000000000000000000000000000000000055 -:10EBC0000000000000000000000000000000000045 -:10EBD0000000000000000000000000000000000035 +:10EB900000C000000000200400004040000282008D +:10EBA00000820504412000022100110003028000C0 +:10EBB00083201100080105004100410041021000BE +:10EBC0000084100005021000080021000000000071 +:10EBD0000820000008000500000000000000000000 :10EBE0000000000000000000000000000000000025 :10EBF0000000000000000000000000000000000015 :10EC00000000000000000000000000000000000004 -:10EC100000000000000000000000000000000000F4 -:10EC200000000000000000000000000000000000E4 -:10EC300000000000000000000000000000000000D4 -:10EC400000000000000000000000000000000000C4 +:10EC100000000000000000010000000100010000F1 +:10EC200000018400000041C0A0094041082109887A +:10EC300001910088A0A090C000080482000200009A +:10EC400000010000000100000000000000000000C2 :10EC500000000000000000000000000000000000B4 :10EC600000000000000000000000000000000000A4 :10EC70000000000000000000000000000000000094 :10EC80000000000000000000000000000000000084 -:10EC90000000000000000000000000000000000074 -:10ECA0000000000000000000000000000000000064 -:10ECB0000000000000000000000000000000000054 -:10ECC0000000000000000000000000000000000044 +:10EC900000000000000000000041201040100002B1 +:10ECA00000200304800500109083A0838088000862 +:10ECB0009108032040800040008000008000008018 +:10ECC0000000000400200010000000000000000010 :10ECD0000000000000000000000000000000000034 :10ECE0000000000000000000000000000000000024 :10ECF0000000000000000000000000000000000014 :10ED00000000000000000000000000000000000003 -:10ED100000000000000000000000000000000000F3 -:10ED200000000000000000000000000000000000E3 -:10ED300000000000000000000000000000000000D3 +:10ED10000000000000000000000008004100200882 +:10ED200011000000080004001021C10010058382BA +:10ED300010210080A0210205004000000005008095 :10ED400000000000000000000000000000000000C3 :10ED500000000000000000000000000000000000B3 :10ED600000000000000000000000000000000000A3 :10ED70000000000000000000000000000000000093 :10ED80000000000000000000000000000000000083 -:10ED90000000000000000000000000000000000073 -:10EDA0000000000000000000000000000000000063 -:10EDB0000000000000000000000000000000000053 -:10EDC0000000000000000000000000000000000043 +:10ED900000000000000000000000000000880000EB +:10EDA00000000000000000000100000988102100A0 +:10EDB00040838341820410002108084090009000A5 +:10EDC0000804000000000000000000000000000037 :10EDD0000000000000000000000000000000000033 :10EDE0000000000000000000000000000000000023 :10EDF0000000000000000000000000000000000013 :10EE00000000000000000000000000000000000002 :10EE100000000000000000000000000000000000F2 -:10EE200000000000000000000000000000000000E2 -:10EE300000000000000000000000000000000000D2 -:10EE400000000000000000000000000000000000C2 +:10EE20000101880100000000000100010000200332 +:10EE300001090103A091901003090110A0A0A010E6 +:10EE400000A00089A1820000000000000000000076 :10EE500000000000000000000000000000000000B2 :10EE600000000000000000000000000000000000A2 :10EE70000000000000000000000000000000000092 :10EE80000000000000000000000000000000000082 :10EE90000000000000000000000000000000000072 -:10EEA0000000000000000000000000000000000062 -:10EEB0000000000000000000000000000000000052 -:10EEC0000000000000000000000000000000000042 +:10EEA00000411110822100110010030841210005CA +:10EEB0000082400805A1830300208320219083A0C5 +:10EEC00000200090004009830000030000000000C3 :10EED0000000000000000000000000000000000032 :10EEE0000000000000000000000000000000000022 :10EEF0000000000000000000000000000000000012 :10EF00000000000000000000000000000000000001 :10EF100000000000000000000000000000000000F1 -:10EF200000000000000000000000000000000000E1 -:10EF300000000000000000000000000000000000D1 -:10EF400000000000000000000000000000000000C1 +:10EF2000000008800300030008112103000008000E +:10EF3000201088219021A0800811A0008540210088 +:10EF40000311800080880000000000000000000025 :10EF500000000000000000000000000000000000B1 :10EF600000000000000000000000000000000000A1 :10EF70000000000000000000000000000000000091 :10EF80000000000000000000000000000000000081 :10EF90000000000000000000000000000000000071 -:10EFA0000000000000000000000000000000000061 -:10EFB0000000000000000000000000000000000051 -:10EFC0000000000000000000000000000000000041 +:10EFA000000000000140000000000100019000008E +:10EFB00000000001C041A14011404108C1A091885A +:10EFC00001024000C000028220900000000000000A :10EFD0000000000000000000000000000000000031 :10EFE0000000000000000000000000000000000021 :10EFF0000000000000000000000000000000000011 :10F000000000000000000000000000000000000000 :10F0100000000000000000000000000000000000F0 -:10F0200000000000000000000000000000000000E0 +:10F02000000000000000000000E000000000000000 :10F0300000000000000000000000000000000000D0 -:10F0400000000000000000000000000000000000C0 +:10F0400000E00700000000000000000000000000D9 :10F0500000000000000000000000000000000000B0 :10F0600000000000000000000000000000000000A0 :10F070000000000000000000000000000000000090 :10F080000000000000000000000000000000000080 :10F090000000000000000000000000000000000070 :10F0A0000000000000000000000000000000000060 -:10F0B0000000000000000000000000000000000050 -:10F0C0000000000000000000000000000000000040 +:10F0B000000000000000000000C3E8E8AAFF1E1ED8 +:10F0C000AAFF828200AA00AAA0AFFAFA505041EB30 :10F0D0000000000000000000000000000000000030 :10F0E0000000000000000000000000000000000020 :10F0F0000000000000000000000000000000000010 :10F1000000000000000000000000000000000000FF :10F1100000000000000000000000000000000000EF :10F1200000000000000000000000000000000000DF -:10F1300000000000000000000000000000000000CF -:10F1400000000000000000000000000000000000BF -:10F1500000000000000000000000000000000000AF +:10F13000000000000000000000003CFFE8E800556F +:10F140001E1E0055D7D7FCFC0C0CA0AF0A0A50506D +:10F1500041EB000000000000000000000000000083 :10F16000000000000000000000000000000000009F :10F17000000000000000000000000000000000008F :10F18000000000000000000000000000000000007F :10F19000000000000000000000000000000000006F :10F1A000000000000000000000000000000000005F -:10F1B000000000000000000000000000000000004F -:10F1C000000000000000000000000000000000003F -:10F1D000000000000000000000000000000000002F +:10F1B000000000000000000000000000AAAA30309B +:10F1C000F53C053CCF0CC30000F000F0AA003C0F5A +:10F1D000C082C082000000000000000000000000AB :10F1E000000000000000000000000000000000001F :10F1F000000000000000000000000000000000000F :10F2000000000000000000000000000000000000FE :10F2100000000000000000000000000000000000EE :10F2200000000000000000000000000000000000DE -:10F2300000000000000000000000000000000000CE -:10F2400000000000000000000000000000000000BE -:10F2500000000000000000000000000000000000AE +:10F230000000000000000000000000000000FF00CF +:10F240005555003C003C8E8E828200F000F8AAFFEB +:10F250003C0FFC82FC820000000000000000000067 :10F26000000000000000000000000000000000009E :10F27000000000000000000000000000000000008E :10F28000000000000000000000000000000000007E :10F29000000000000000000000000000000000006E :10F2A000000000000000000000000000000000005E -:10F2B000000000000000000000000000000000004E -:10F2C000000000000000000000000000000000003E -:10F2D000000000000000000000000000000000002E +:10F2B00000610005000D000000610006000D000067 +:10F2C000A0615006001D0000A061000B00090000B5 +:10F2D000A0615006000D000000610006000D000056 :10F2E000000000000000000000000000000000001E :10F2F000000000000000000000000000000000000E :10F3000000000000000000000000000000000000FD :10F3100000000000000000000000000000000000ED :10F3200000000000000000000000000000000000DD -:10F3300000000000000000000000000000000000CD -:10F3400000000000000000000000000000000000BD -:10F3500000000000000000000000000000000000AD +:10F330000000C3C3C7C300FC00FFF3F3C3C300FF57 +:10F3400000FF008E00B2FFAAD782FF00D78203F32E +:10F3500003F300000000F0305050000000000000F7 :10F36000000000000000000000000000000000009D :10F37000000000000000000000000000000000008D :10F38000000000000000000000000000000000007D :10F39000000000000000000000000000000000006D :10F3A000000000000000000000000000000000005D -:10F3B000000000000000000000000000000000004D -:10F3C000000000000000000000000000000000003D -:10F3D000000000000000000000000000000000002D +:10F3B00000000000C3C3C7C300C000FF303000001E +:10F3C0001010515171FF4DFFFFAA5F0A5F0A5F0ADB +:10F3D0000000FFFF00000000F0305050000000006F :10F3E000000000000000000000000000000000001D :10F3F000000000000000000000000000000000000D :10F4000000000000000000000000000000000000FC :10F4100000000000000000000000000000000000EC :10F4200000000000000000000000000000000000DC -:10F4300000000000000000000000000000000000CC -:10F4400000000000000000000000000000000000BC -:10F4500000000000000000000000000000000000AC -:10F46000000000000000000000000000000000009C +:10F43000000000000000F909F9F9C1E9C1E9171756 +:10F440001717555550FA2B030317B2B2C3FFFFEB42 +:10F45000C3EB5555555500000000000000005D0845 +:10F460005D08000000000000000000000000000037 :10F47000000000000000000000000000000000008C :10F48000000000000000000000000000000000007C :10F49000000000000000000000000000000000006C :10F4A000000000000000000000000000000000005C +:10F4B0000000000000000000F9090909C1C1E9E9E4 +:10F4C000FF3CC300000050FA28000014B2B2003C18 +:10F4D0003C28002805F505F50000000000000000AC +:10F4E0005D085D0800000000000000000000000052 +:10F4F000000000000000000000000000000000000C +:10F5000000000000000000000000000000000000FB +:10F5100000000000000000000000000000000000EB +:10F5200000000000000000000000000000000000DB +:10F530000000000084002000000001804080C00422 +:10F540000004000000008403000000002000000010 +:10F55000400000000000000000000000200000004B +:10F560000004000000000000000400000000000093 +:10F57000000000010000000000000000000000008A +:10F580000000000400000000000000000000000077 +:10F59000000000000000000000000000000000006B +:10F5A0000000000400000000000000000000000057 +:10F5B00000000000000000002100000008040020FE +:10F5C00020902100000020002000400040000000AA +:10F5D00000000000410000000000000000000000EA +:10F5E00000400000000000020000000000000000D9 +:10F5F00000002100000000000000000000004000AA +:10F6000000000000000000000000000000000000FA +:10F6100000000000000000020000000000000000E8 +:10F6200000000000000000000000000000000000DA +:10F6300000000000000004002041840285002088B2 +:10F64000200008022188000000000000910088804E +:10F6500004094082040000000000000000000400D3 +:10F660000080000000804000008000000082000058 +:10F670000080000000A000000080408000000080AA +:10F68000000000000000000000000000000000007A +:10F69000000000000000000000000000000000006A +:10F6A000000000000000000000000000000000005A +:10F6B0000000000000000000200080880001200001 +:10F6C000C11180C082418404110002820082088836 +:10F6D000000480080511A0080000000000000000E0 +:10F6E000000000040000000480000520110000213B +:10F6F0000000402000000003000000028002000023 +:10F7000000020000000000000000000000000000F7 +:10F7100000000000000000000000000000000000E9 +:10F7200000000000000000000000000000000000D9 +:10F7300000000000000000000000000000030009BD +:10F740000000001000410000000000200000200028 +:10F75000000000800000008001000008000200009E +:10F76000000800090004000400400100000000003F +:10F770000000000000002000000000000100000068 +:10F780000009000000000000000000000000000070 +:10F790000000000000000000000000000000000069 +:10F7A0000000000000000000000000000000000059 +:10F7B0000000000000000000000000000000410008 +:10F7C000100008000800200400000800058409005B +:10F7D0000000080021400800021040400500100110 +:10F7E000000009000004000003040001022000845E +:10F7F0000000000000000000000000820000400047 +:10F8000000000000000000000000000000000000F8 +:10F8100000000000000000000000000000000000E8 +:10F8200000000000000000000000000000000000D8 +:10F8300000000000000000000000000000000004C4 +:10F840000000840000408200090040110002841181 +:10F85000A021820584400200000082A040204000D8 +:10F86000821140400002100000001000820082005F +:10F8700082801000900000000000000000000000E6 +:10F880000000000000000000000000000000000078 +:10F890000000000000000000000000000000000068 +:10F8A0000000000000000000000000000000000058 +:10F8B0000000000000000000000000000000000048 +:10F8C000038520C021820900094004408300030011 +:10F8D0001100210821000008400000001010214103 +:10F8E000C000118480011005030005404000214044 +:10F8F00000004102030000204000118821824100E5 +:10F90000000000000000008800001000000000005F +:10F9100000000000000000000000000000000000E7 +:10F9200000000000000000000000000000000000D7 +:10F9300000000000000000000000000000000000C7 +:10F94000000000000800000340000002040800005E +:10F9500000040000840008041040040008808900AE +:10F9600010804000C020820008031020000408021C +:10F970002040A000000000000000000008008800F7 +:10F980000000000000000020000200000000000055 +:10F990000000000000000000000000000000000067 +:10F9A0000000000000000000000000000000000057 +:10F9B0000000000000000000000000000000000047 +:10F9C0000000000000A000000000000003880920E3 +:10F9D0000000000021000000008400000304032058 +:10F9E00008C00520040000880004890020000000F1 +:10F9F000400010210000000008000000000000008E +:10FA000000000000000000000000000100000000F5 +:10FA100000000000000000000000000000000000E6 +:10FA200000000000000000000000000000000000D6 +:10FA300000000000000000000000000000000000C6 +:10FA40000000000000000800000082820000031097 +:10FA50008400884100004021842184098821C00459 +:10FA60008200A040840084000808A0008403C00035 +:10FA700084041000C0040000400584000000000061 +:10FA8000000900030009000000020000000200005D +:10FA9000000000000000000900000000000000005D +:10FAA0000000000000000000000000000000000056 +:10FAB0000000000000000000000000000000000046 +:10FAC0000000000000000000000000000002020032 +:10FAD0000811208409882000000420000000000094 +:10FAE0000801210400000400000000000888000450 +:10FAF0000000218905001001000083000002102091 +:10FB000002880000000008000000050000020090CC +:10FB100003000000080000000000000000000000DA +:10FB200000000000000000000000000000000000D5 +:10FB300000000000000000000000000000000000C5 +:10FB400000000000000000000000000101010800AA +:10FB5000000103A090908204829000000000000049 +:10FB60000000000190030002820205011101400122 +:10FB7000820100040190040000830005419182A1EC +:10FB8000A09010A100918408C09000000000000027 +:10FB90004001000000000000000000000000000024 +:10FBA0000000000000000000000000000000000055 +:10FBB0000000000000000000000000000000000045 +:10FBC0000000000000000000000000000011080814 +:10FBD00088110008828920A0401080890000000060 +:10FBE00000000000001180210088A01190418502D2 +:10FBF000800589020088080900000008089002C0FA +:10FC000000900005088221C080858003000011401B +:10FC10000803800500200000000000000000000034 +:10FC200000000000000000000000000000000000D4 +:10FC300000000000000000000000000000000000C4 +:10FC400000000000000000000000000000000500AF +:10FC5000100000000041A00021000300C1000000CE +:10FC600000000000000005808391C0802105000095 +:10FC70008508900085838000058382001010C100F4 +:10FC80009091A002A18300008041800580000000C7 +:10FC900020001000200008210000000000000000EB +:10FCA0000000000000000000000000000000000054 +:10FCB0000000000000000000000000000000000044 +:10FCC0000000000000000000000000000000000034 +:10FCD00000900100000000018810100090049100C5 +:10FCE00000009000C0008200C002080403028900E6 +:10FCF00000081000A12008A00204910805A011012D +:10FD0000042082210521039140004000A0C09040C2 +:10FD100000000190010000000091000000000000C0 +:10FD200000000000000000000000000000000000D3 +:10FD300000000000000000000000000000000000C3 +:10FD400000000000000000000000000000000000B3 +:10FD50000000000001000001000110A0008808055B +:10FD6000901000000000000000000008010003A047 +:10FD700009A000020040051101110001010000016D +:10FD8000A100A0000002A00882C1A0880009018291 +:10FD90008288000000000000400000010000000018 +:10FDA0000000000000000000000000000000000053 +:10FDB0000000000000000000000000000000000043 +:10FDC0000000000000000000000000000000000033 +:10FDD00000000000000411110921001100110003AE +:10FDE00009A100C000000000000000000003100294 +:10FDF0001020880300C0208385A120A000081003E4 +:10FE000041210920051041A090C180828009210272 +:10FE10002011800300000020200840080008000096 +:10FE200000000000000000000000000000000000D2 +:10FE300000000000000000000000000000000000C2 +:10FE400000000000000000000000000000000000B2 +:10FE500000000000000011001100050011020880E0 +:10FE6000098808000803000000000000000008A046 +:10FE7000892140002002402088800980402021857F +:10FE8000910002802121A18288202000904000085A +:10FE9000800880800000000041402100100009100F +:10FEA0000000000000000000000000000000000052 +:10FEB0000000000000000000000000000000000042 +:10FEC0000000000000000000000000000000000032 +:10FED000000000000000000000000100000001011F +:10FEE0000004204021040100000000100010000068 +:10FEF0000341828209820201900110204104A10085 +:10FF000091C0210889841001050304889002090129 +:10FF10009000044102028200000000000000010085 +:10FF200000010000000000000000000000000000D0 +:10FF300000000000000000000000000000000000C1 +:10FF400000000000000000000000000000000000B1 +:10FF500000000000000000000000000000E00000C1 +:10FF60000012000000E00700000000000000000098 +:10FF70000000000000E0070000000000000000009A +:10FF80000000000000E00000840000000000070006 +:10FF90000000000000000700001200000000000048 +:10FFA0000000000000000000000000000000000051 +:10FFB0000000000000000000000000000000000041 +:10FFC0000000000000000000000000000000000031 +:10FFD0000000000000000000000000000000000021 +:10FFE00000000000F606F6065050AFAF000000001B +:10FFF000000000005A6A5A5AC3FFFFC3000400FF02 +:020000040011E9 +:100000003C1E3C3CFFF0FFE700000000BFFF8F0FED +:10001000F000F000107000006666666600000000E8 +:1000200000000000000000000000000000000000D0 +:1000300000000000000000000000000000000000C0 +:1000400000000000000000000000000000000000B0 +:1000500000000000000000000000000000000000A0 +:10006000000000000000F606F606F0000FFF00009A +:100070000000000000005A5A5A5A003C3C000000A0 +:1000800000FFFF9FFFFFFFF0FF2400000000B0F023 +:1000900080000000F0F0F7F10000C0F000F0000078 +:1000A0000000000000000000000000000000000050 +:1000B0000000000000000000000000000000000040 +:1000C0000000000000000000000000000000000030 +:1000D0000000000000000000000000000000000020 +:1000E0000000000000000000000000000000000010 +:1000F0000000000000000000000000000000000000 +:1001000000000000000000000000000000000000EF +:1001100000000000000000000000000000000000DF +:1001200000000000000000000000000000000000CF +:1001300000000000000000000000000000000000BF +:1001400000000000000000000000000000000000AF +:10015000000000000000000000000000000000009F +:1001600000000000000000000000187E187E0898C3 +:100170006EFE0000000000FF00FF17331733D02F82 +:1001800010EF000000000006999F663C003CC3C3CE +:1001900002FB10D31CDF0F0F0F2424E73CFF2420A9 +:1001A000FFFB000000000000000000000000000055 +:1001B000000000000000000000000000000000003F +:1001C000000000000000000000000000000000002F +:1001D000000000000000000000000000000000001F +:1001E00000000000000000000000000000F609FF11 +:1001F0000808FEFE0000000060606F6F17331733C1 +:10020000DB2418E700000000006699FF663C003C14 +:10021000000000F900C33CFF0F0F0F662CEF3CFFFE +:100220000020DBFB000000000000000000000000D8 +:1002300000000000000000000000000000000000BE +:1002400000000000000000000000000000000000AE +:10025000000000000000000000000000000000009E +:1002600000000000000000610001000900000061C2 +:1002700000090019000000000000000000000061FB +:100280000E0A001D000080610006000D00000061E4 +:1002900030040009000000610E06009D00000061AE +:1002A0000006000D0000000000610006000D0000C7 +:1002B000000000000000000000000000000000003E +:1002C000000000000000000000000000000000002E +:1002D000000000000000000000000000000000001E +:1002E00000000000000000007D285F0A0000FFFF02 +:1002F000FFEFFFC3BCBCBCBF00000000000000005B +:10030000D0F0D0F0F0F030F30087000000FF0000E4 +:10031000F000F808F0F0FCC00D0F0C0CEF2F0407F4 +:1003200000000000BCFDBCFC000014551455AAAF31 +:1003300000000000000000000000000000000000BD +:1003400000000000000000000000000000000000AD +:10035000000000000000000000000000000000009D +:10036000000000000000000000007D28FF00303A7F +:10037000353FFFEFFFC3A0A0A0AF000000000000CA +:1003800000000000D7FFF0F030F3AA87000000FF64 +:10039000E8E8FF0FFD0DF0F0F4E00F0F0F0FDF1F87 +:1003A000080B0000000000410040000010551455EB +:1003B000ABAF0000000000000000000000000000E3 +:1003C000000000000000000000000000000000002D +:1003D000000000000000000000000000000000001D +:1003E000000000000000000000000000FF350035A4 +:1003F000ACACACAC0300FF003C55000000000000BA +:1004000000000000FFFB0501A2FFF7FFC3C31E1E93 +:1004100005AF050500BE003C0FAA0FAA0000FFFFB4 +:10042000602040004B4B0FC3000000000000FF0F96 +:10043000FF0F03410000000000000000000000006A +:1004400000000000000000000000000000000000AC +:10045000000000000000000000000000000000009C +:100460000000000000000000000000000000FFF598 +:100470000005ACACACACFFFFFFFF0C553C3C0000F2 +:10048000000000000000FAFB00010200570000FF1E +:100490005F0A05AF0505003C003C0FAA0FFF0000F6 +:1004A000DFD7604020004B4B0F0F00000000000022 +:1004B000FB0BF10103410000000000000000000000 +:1004C000000000000000000000000000000000002C +:1004D000000000000000000000000000000000001C +:1004E000000000000000000000000000000000000C +:1004F000020084000584200420000300A0002000E6 +:100500008200400084000204040000008800000013 +:10051000200001000080048001200000000004048D +:10052000000000400000000000000000000000008B +:100530000001000000020002000888000000000026 +:100540008800000000000000000000000000000023 +:100550000000000000000000000020000000C000BB +:10056000000000000000000000000000000000008B +:10057000000010000000081021000940C000000029 +:100580004100000009040000C08241022000050073 +:10059000000000004000002040200201040000C0D4 +:1005A0000001008400000000000041004100000044 +:1005B0000000000000000001000100010000000038 +:1005C000000000000000000000000000000000002B +:1005D000000000000000000000000000000000001B +:1005E000000000000000000000000000000000000B +:1005F0000000000004000800088001000200400024 +:10060000001085008280020482050200040240007E +:10061000004002000000040040400280048000000E +:10062000000020008540032003000220401000103D +:1006300000000010000000000000040000000000A6 +:1006400000000000000000000000000000000000AA +:10065000000000000000000000000000000000009A +:10066000000000000000000000000000000000008A +:100670000000000000001100800480104000008491 +:1006800000004009401000400584058405842001D5 +:100690008200034109900004000020010020802016 +:1006A0000000098200001085040108000001C0015B +:1006B0000001000000010000000000000000000038 +:1006C000000000000000000000000000000000002A +:1006D000000000000000000000000000000000001A +:1006E000000000000000000000000000000000000A +:1006F000000000000000000000109021000500092B +:1007000088050041C00088000000C0100005C0102E +:1007100000408200400082002000010984208840BF +:100720002000C004C00000001000400000A14009EB +:100730000000000000000103000000020011000999 +:100740000010000000000000000000000000000099 +:100750000000000000000000000000000000000099 +:100760000000000000000000000000000000000089 +:10077000000000000000000000000808080003005E +:10078000210040000300400040900090002009003C +:1007900041000300408202200800020040000501E1 +:1007A000050090000800080008020000800000100A +:1007B0008088080421000890088800000001008853 +:1007C0000000000100000000000000000000000028 +:1007D0000000000000000000000000000000000019 +:1007E0000000000000000000000000000000000009 +:1007F00000000000000000000000000082028402EF +:100800009005C010040202098202A004A010848096 +:100810004041084100004002041090418204004120 +:10082000104008410880C0001000000008000000CF +:100830000800C100840020020000900900000000B0 +:100840000000000000820000000000000000000026 +:100850000000000000000000000000000000000098 +:100860000000000000000000000000000000000088 +:100870000000C00000000000200000000000200078 +:100880001000210010210509094010000288080904 +:100890000040008480002002800020884100410048 +:1008A0001000000041900004000021001000020030 +:1008B000040080400400000000040000000000006C +:1008C00000000000000000410300030000000000E1 +:1008D00040000000000000000000000000000000D8 +:1008E00000000000000000000800000005001000EB +:1008F00000000000000000000000000400000000F4 +:10090000A01000038200400588A00400C0008203FC +:100910001000000010418200820008800800C080A2 +:100920000003040040004000400082200004042036 +:1009300008000800A0800800820083000000A000DA +:100940000000000000000010008000000000000017 +:100950000000000000000000000000000000000097 +:100960000000000000000000000000000000000087 +:10097000080000000000000000000000000000006F +:10098000000003C000000002200803020804110454 +:100990000002030000000000000021881010000089 +:1009A0000040110008000504030021040002089023 +:1009B0000003000021000802030010204020212035 +:1009C0001000000003880000410108400000000002 +:1009D000000008000000000000000000000000000F +:1009E0000000000000000000000000000000000007 +:1009F00000000000000000000000000000000000F7 +:100A00000000000001400040081088214000000064 +:100A100000401041084021000441840010400800BB +:100A200010200400C000C0008200840004001000F8 +:100A300082090000C000A000400084000420402083 +:100A40000000000900000000000000000009000094 +:100A50000000000000000000000000000000000096 +:100A60000000000000000000000000000000000086 +:100A70000000000000000000000000000000000076 +:100A8000000000000000080000C00000020011008B +:100A90000802000000C040880890034008040000DD +:100AA0000004109000000000200020000000000062 +:100AB00000000000000004000000000000840000AE +:100AC000000000001100000008000000000000000D +:100AD0000000000000000000000000000500000011 +:100AE0000000000000000000000000000000000006 +:100AF00000000000000000000000000041000000B5 +:100B0000000000000000000090880010208800080D +:100B100009900000A00200A02008008200880004C4 +:100B200000A100020041000004A040830888C0101A +:100B3000A040A1210211C0050503080041A08300C7 +:100B4000008482C100A1088200004005A10020C1EC +:100B50008200000000000000000000000000000013 +:100B60000000000000000000000000000000000085 +:100B70000000000000000000000000000000000075 +:100B800000000000000000000000050021000080BF +:100B900000001020080000A00020008000800080DD +:100BA0000080408400000090000080830390800259 +:100BB000008200A020218508808282108502829018 +:100BC000C00300880008009000890000859083051C +:100BD00000100040000000000000000000000000C5 +:100BE0000000000000000000000000000000000005 +:100BF00000000000000000000000000000000000F5 +:100C00000000000000000000000000000000804123 +:100C1000802100008080002100900021801080034E +:100C2000808080000000000300800000410003413C +:100C3000088290821080844184039041020021A1A7 +:100C40008580C18800800005800080000000008051 +:100C5000882008C003A00000000000000000000081 +:100C60000000000000000000000000000000000084 +:100C70000000000000000000000000000000000074 +:100C80000000000000000000000000000000000064 +:100C90001000A0010800A040A000848484900801F6 +:100CA0008200A0A004040090000000040000208244 +:100CB000C001900982A1C1C00500A090820104205A +:100CC0009109A1A083A0C0020800A04082000000FA +:100CD0008202408283408388000000000000000000 +:100CE0000000000000000000000000000000000004 +:100CF00000000000000000000000000000000000F4 +:100D000000000000000000000000000000000000E3 +:100D1000004100000000824040000189820010C0B4 +:100D2000C040000202000000A00000000100080016 +:100D3000884100A020090211C08201A1A1C085C183 +:100D4000C0090004834111C00802000200A08220F3 +:100D50000000828201210883C18900000000000098 +:100D60000000000000000000000000000000000083 +:100D70000000000000000000000000000000000073 +:100D80000000000000000000000000000000000063 +:100D9000000000020011000580108003108341054F +:100DA0008403800000808000000000000400020036 +:100DB000000000902083002180C080412010850821 +:100DC000088800A00320102041A0008000800300BC +:100DD000800000000000108800080990000000005A +:100DE0000000000000000000000000000000000003 +:100DF00000000000000000000000000000000000F3 +:100E000000000000000000000000000000000000E2 +:100E1000000000008004800800800000210990800C +:100E2000C08010000000808000000000A10085202C +:100E300003008800A10005C00380050003808482B0 +:100E4000400040412104A041A0000202A100C020B6 +:100E500000008000000041A141A0038020030000A9 +:100E60000000000000000000000000000000000082 +:100E70000000000000000000000000000000000072 +:100E80000000000000000000000000000000000062 +:100E9000000000000000100120890208C0000100CD +:100EA00003A009028200840040C004840000C10045 +:100EB000020089000500C1A088A00804C000A0C0ED +:100EC000A0A184208801C185828240041100050010 +:100ED000A02004820400000009A1A0200884890148 +:100EE0000000000000000000000000000000000002 +:100EF00000000000000000000000000000000000F2 +:100F000000000000000000000000000000000000E1 +:100F100000000000000000000000000000000000D1 +:100F2000000000000000000000000000000042007F +:100F3000000000000000000000000000070060004A +:100F4000000000E007005006000000E0070000413C +:100F50000000000000000000000000000000000091 +:100F60000000000000000000000000000000000081 +:100F70000000000000000000000000000000000071 +:100F80000000000000000000000000000000000061 +:100F900000000000000000000000FF0F0303828239 +:100FA000BEBE30303030F5F5A0A005FF050FB2B25F +:100FB000B2B25050F30300000000FDFD0080C0E815 +:100FC000C0E830F3B2B23A3A0CFCBCBC4343F00088 +:100FD0000C0C687CEAFE00FF000000005100515537 +:100FE000005D0000000000000000000000000000A4 +:100FF00000000000000000000000000000000000F1 +:1010000000000000000000000000000000000000E0 +:10101000000000000000000000000000FF0FF3F3DC +:101020008282BEBE0AFA0AFAF5F5A0A0F5FFF50F16 +:10103000B2B2B2B25F5FF30300000000FDFD00A09A +:10104000C0C0FCFC00C3828200000CFCBCBE43415B +:1010500070700C0C7C7CFEFE0F0F0C0C000010005E +:101060001055A2FFA2A20000000000000000000036 +:101070000000000000000000000000000000000070 +:101080000000000000000000000000000000000060 +:1010900000000000000000000000000000000587C4 +:1010A000AF87AF0FA505EBEB5050C5C553530F0FDE +:1010B0000F0FBFB5BAB005F505F500000000000040 +:1010C000FF0D553F3F3FAAAAAAA24D410C00A0A088 +:1010D000AAAAC396C696CF0C3F03FFACFFA300009D +:1010E00055555555000004040000000000000000A4 +:1010F00000000000000000000000000000000000F0 +:1011000000000000000000000000000000000000DF +:1011100000000000000000000000000000000000CF +:101120000587AF87AA0AA000EBEBFAFAC355C355AF +:10113000C300C3FF1F151A10F0F0000000000000EC +:101140000000FF0F553C3C3CAAAAAAAA4D41CFC3C0 +:101150005F5F55559696C6965F0A5F0A53005C001E +:10116000000000000F0FFB00FF0400000000000063 +:10117000000000000000000000000000000000006F +:10118000000000000000000000000000000000005F +:10119000000000000000000000000000000000004F +:1011A000000080610006000D000000610006000DD7 +:1011B00000018000400000100001A0614006000D09 +:1011C0000000A061000E000D00000061000B0099FE +:1011D000000000600E0F009D000000610006000D81 +:1011E0000000000000613006000D0000000000005B +:1011F00000000000000000000000000000000000EF +:1012000000000000000000000000000000000000DE +:1012100000000000000000000000000000000000CE +:1012200000000000000000000CFC0CFC15055555EA +:101230003C3CAAAA0000000000000000BD36630983 +:1012400000000000C3AFC3AF82D7F0F00000000081 +:101250003C3C0A0A00C00AC03C3C303C00AAFFAA41 +:10126000000000000000FFAAE1E1F5A5550500001F +:10127000000000000000000000000000000000006E +:10128000000000000000000000000000000000005E +:10129000000000000000000000000000000000004E +:1012A00000000000000000000000A0A0AFAF550546 +:1012B0005555F0F000FF0000000000000000BD36B2 +:1012C000630900000000FFFF0F0F00550000F5A0AC +:1012D000D78200FF0A0AF0C0FAC03C3C383800AAA6 +:1012E000FFAA0000000000005500E1E1F0A050005E +:1012F00000000000000000000000000000000000EE +:1013000000000000000000000000000000000000DD +:1013100000000000000000000000000000000000CD +:1013200000000000000000000000000000000000BD +:1013300080808282000000000000000000000000A9 +:1013400050505F5F00000000F0F028EB0F0CFFFC36 +:1013500014B40000FFAA55005F4B1E0AFFFFC3C371 +:101360003CFCCF33000000000000DF8A5D0800FA7B +:1013700055FA00000000000000000000000000001E +:10138000000000000000000000000000000000005D +:10139000000000000000000000000000000000004D +:1013A000000000000000000000000000000000003D +:1013B0000000BCBCBEBE0000000000000000000039 +:1013C00000005F5F505000000000F0F028EB000CC0 +:1013D000F0FC14B414B42D2D2D2D00000000000FCE +:1013E00055533C33030C000000000000DF8A5D0809 +:1013F00000505550000000000000000000000000F8 +:1014000000000000000000000000000000000000DC +:1014100000000000000000000000000000000000CC +:101420000000000000000000000000004000040375 +:1014300020050000C0002000000000004000000067 +:101440008800000000000000C008008800000400C0 +:1014500082000004200088418800882000000000ED +:101460000000000000000000000000040003000075 +:10147000020088000004000020002000000000009E +:101480000000880000000000000000000082000052 +:10149000020000000000000020002000000000000A +:1014A0000000200000008800000000000082000012 +:1014B00000040000090410020004040002000000FF +:1014C000400000042000050000002001400500004D +:1014D00000004100030000002000000000000000A8 +:1014E00000000000000009000000000000030000F0 +:1014F00000000002000000000000000000000000EA +:1015000000020000000200000000000000000004D3 +:1015100000000000000000000000000000000000CB +:1015200000000000000000000000000000000004B7 +:101530008200000000000000000000100000000019 +:10154000820000038200040000000000020004008A +:101550000000000000000410000000000000000077 +:1015600000000002000000008400000000000000F5 +:101570000000000000000002000000000000000069 +:10158000000000000000000000000000000000005B +:10159000000000000000000000000000000000004B +:1015A000000000000000000000000000000000003B +:1015B000000009080000000011C00400000003043E +:1015C0000400000000000000000200000000000015 +:1015D00000020088000000000500000000000088F4 +:1015E00000100000000000000000000000000000EB +:1015F00000000000000000000000000000000000EB +:1016000000000000000000000000000000000004D6 +:1016100000000000000000000000000000000000CA +:10162000000000000090000000000000000000002A +:1016300000000000042100058402C005004188402C +:10164000A010400304410000004184000000840019 +:10165000080090808400820084008420840084003C +:101660008800840002000000A00000008800400004 +:101670000420C0000000002184000800A000000039 +:101680000000000000000008000000000000000052 +:101690000000000000000021000000000000000029 +:1016A0000000000000000004000000000000000036 +:1016B000000000000000030000C04184410210044B +:1016C00041000004050810000002100000A04000C6 +:1016D0001000400011020800050000000288090007 +:1016E000410021A0410009004120202040200000AD +:1016F0004108030003C000000000000000000000DB +:1017000000000000080000000000000000000000D1 +:1017100000000000000000000000000008000000C1 +:1017200000000000000000000000000000000000B9 +:1017300000000000000000000403004182090020B6 +:1017400008090041000200400009C00040000002FA +:1017500082200809A0000841000008040805C00014 +:1017600082020000C0000400000000008202820922 +:10177000000000009000000000000000080082004F +:101780008209000000000000000000000000C0000E +:10179000000040000000000000000000080082007F +:1017A0000000820000000000000000000000820035 +:1017B00040000000000000000000000210000000D7 +:1017C00011004000410010C01084400000040000DF +:1017D00000A01000000000200000402010000002C7 +:1017E00000000000100200000000020000000000E5 +:1017F00000000000000000000000000000000000E9 +:101800000020000000000000000000002100000097 +:1018100000000000000000000000000000000000C8 +:1018200000000000000000000000000000000000B8 +:10183000000000000000000000000000000388001D +:101840001000A00082000000900008088402000040 +:1018500000050000080000000000000084000000F7 +:101860008400A0000000820082008200A00000002E +:101870000800000000000000000000000000000060 +:1018800000000000000000000800820008000000C6 +:101890000000000000000000000000000000000048 +:1018A0000000000000000000080000000000000030 +:1018B000000000000000000000000000000000C068 +:1018C000000400040800410009000804100004009E +:1018D0000800000010000002059000004104020012 +:1018E0000902110440041084050021000420029024 +:1018F000400000001000002010000804000000005C +:101900000590044040040420000000000000000096 +:1019100000000000000000000000000000000000C7 +:1019200000000000000000000000000000000000B7 +:1019300000000000000000000000000000000000A7 +:10194000A00084008421000400008203000800033A +:101950000800000008000209000000400004100018 +:10196000000000008400000008000800A020000023 +:10197000084000000000000000000000000084009B +:10198000000000000000000000000800040000004B +:101990000000000000000000000000000000000047 +:1019A000000000000000000000000000000008002F +:1019B00000000000000000000000820000000000A5 +:1019C000000000000000090200000090000008C0B4 +:1019D00010000400000010000000000000000000E3 +:1019E0000004100000880302210000020000000033 +:1019F0004000000000000000000021004000000046 +:101A00004000000000000400000000000000000092 +:101A10000000000021000000410000000000000064 +:101A200000000000000000000000000000000000B6 +:101A300000000000000000000000000000000000A6 +:101A40000000000000000000000000010000000095 +:101A50000000018200010900000482C000000000B3 +:101A60000001000000000000000000000100000074 +:101A7000000000000000000000C0000000000000A6 +:101A80000000000000000000000000000000010055 +:101A90000000000000000000010000C00000000085 +:101AA0000000000000000000000000000000010035 +:101AB0000000000000000000000000C00000000066 +:101AC0000000000000000000000000000002000014 +:101AD0000000002004000040A00000008000000082 +:101AE0000000004100000000000000000000410074 +:101AF000000000000000000304000080000000005F +:101B000000000000000000000000000000000000D5 +:101B100041000000000000000003020000800000FF +:101B200000000000000000000000000000000000B5 +:101B300041000000000000000003040000800000DD +:101B40000000000000000000000040000000000055 +:101B50000000020000002000C000828000404080A1 +:101B600080000000000080400000030000000080B2 +:101B70000000800000000000900040800000000095 +:101B80000000000000000041000000000300000011 +:101B90000080000080000000000082000380000040 +:101BA00000000000000000000041000003000000F1 +:101BB0000080000080000000000002002000000003 +:101BC00000000000000000000041000000000000D4 +:101BD000000000000100000001004000830400013B +:101BE0000102040000000000C0010000010000002C +:101BF00000C000002000000000000500410400407B +:101C00008200400000000000000100000000010010 +:101C1000000000C00000200000000000050040049B +:101C200000402000820000000000000100000100D0 +:101C3000000000C0000020000000000021004188DA +:101C4000008282004000000000000001000000004F +:101C500000000000000000000000100000820000F2 +:101C60000100010000000000000100000000000071 +:101C7000C0000000000000000000000000020000A2 +:101C80000000000000000000000000000000000054 +:101C90000000C00000000000000000000000000282 +:101CA0000000000000000000000000000000000034 +:101CB0000000C0000000000000000000000000085C +:101CC0000000040000000000000000000000000010 +:101CD00000000000000000000000004180090080BA +:101CE00000000500040000000000004100000000AA +:101CF0000000800000000000000000000000000064 +:101D000000000000000000000000000000000000D3 +:101D10000000000080000000000000000000000043 +:101D200000000000000000000000000000000000B3 +:101D30000000000080000000000000000000000023 +:101D40000000000080000000000000000000000013 +:101D50000040800000C10000000580030340000037 +:101D600000410000004100000000000000002005CC +:101D70000000800000C10000000000000000000022 +:101D800000C18000004000000000000000000000D2 +:101D900000000000800000C1000000000000000002 +:101DA0000000004180000040000000000000000032 +:101DB00000000000800000C10000000000000000E2 +:101DC000000000C10000000800000000000000004A +:101DD0000000000020000040000000000400C100DE +:101DE00000000005A000000100000000000000004D +:101DF00001C00000400000C1000000000000000021 +:101E000000000003020000000000000000000000CD +:101E1000000000000000400000C1000000000000C1 +:101E20000000000000A1020000000000000000000F +:101E3000000000000000400000C1000000000000A1 +:101E40000000000000414000000100000000000010 +:101E50000000000000000000000000000000000082 +:101E600000000000811200E00700480600000000AA +:101E70000000000000000000000000420000000020 +:101E800000004800810000E0000048000000000061 +:101E900000000042000000000000000000420000BE +:101EA000000000004800810000E000004800000041 +:101EB000000000000042000000000000004200009E +:101EC000000000004800810000E000004800000021 +:101ED00000000000004200000000000000000000C0 +:101EE00000000000000000000000000000000000F2 +:101EF00000000000000000000000000000000000E2 +:101F000000000000000000000000000000000000D1 +:101F100000000000000000000000000000000000C1 +:101F200000000000000000000000000000000000B1 +:101F300000000000000000000000000000000000A1 +:101F40000000000000000000000000000000000091 +:101F50000000000000000000000000000000000081 +:101F60000000000000000000000000000000000071 +:101F70000000000000000000000000000000000061 +:101F80000000000000000000000000000000000051 +:101F90000000000000000000000000000000000041 +:101FA0000000000000000000000000000000000031 +:101FB0000000000000000000000000000000000021 +:101FC0000000000000000000000000000000000011 +:101FD00000000000000000000000757B0000000011 +:101FE00000000000000000000000000000000000F1 +:101FF0000000000000000000DEAE747B0000000066 +:1020000000000000000000000000000000000000D0 +:102010000000000000000000DE2E0000747B0000C5 +:1020200000000000000000000000000000000000B0 +:1020300000000000000000000000DE2E747B0000A5 +:102040000000000000000000000000000000000090 +:1020500000000000000000000000DE2E61260340AA +:102060000000000000000230A0000000000000009E +:102070000C4000000000000002C06486615603406E +:102080000000000000000231E0000000000000003D +:102090000C4000000000000002C06A86000061568B +:1020A00003400000000000000231E00000000000DA +:1020B00000000C4000000000000002C06A8661566B +:1020C00003400000000000000231E00000000000BA +:1020D00000000C4000000000000002C06A86C00042 +:1020E0008800000004040280880000040800C0008A +:1020F000C0058204210400000200400002000180AB +:1021000000A000002008000400840000002000045B +:10211000000000000004000000000000200000019A +:1021200000000000000000000000000000000000AF +:10213000000000000000000000000000000000009F +:102140000000000000000000880000000000000007 +:10215000000000000000000000000000000000007F +:102160002100040005004000C0402102400080081A +:10217000000010000500080021004120C1000200FD +:102180004008000340400001040100050000400039 +:1021900000000000004000000000002000000000DF +:1021A000000000000000000000000000000000002F +:1021B000000000000000000000000000000000001F +:1021C00020000000000000000000000000000000EF +:1021D00000000000000000000000000000000000FF +:1021E0000000000088000000000008400200C180DC +:1021F000024004008800904088410002000008402E +:10220000050805820500058001808980040001041D +:102210000080000000000000400000020202008078 +:102220008200000004000000000000000000000028 +:10223000000000000000000000000000000000009E +:10224000000020000000000000000000000000006E +:10225000000000000000000000000000000000007E +:10226000000000000008090800040008000104083C +:102270000802000505C00008001005001001000458 +:1022800080001001902104408420042002404182FB +:1022900008010004000000020200800009A1000102 +:1022A000000809000000000000000000000000001D +:1022B000000000000000000000000000000000001E +:1022C000020000000000000000000000000000000C +:1022D00000000000000000000000000000000000FE +:1022E000000000000000A0000003000088418421DD +:1022F0008200400040800000000001000000000556 +:102300008500400501004110011085008510400046 +:102310000810040002100000000000004000C0117E +:1023200082000000C00200000000900000000800D1 +:10233000000000000000000000000000000000009D +:10234000000000000000000000000000000000008D +:10235000000000000000000000000000000000007D +:102360000000000000000000410000000300030026 +:1023700011000088009011040000210002000000FC +:102380000540408205000800080408001000040011 +:102390000000800400000000000000000000C000F9 +:1023A0000300218400000001000000000000000084 +:1023B000000000000000000003000000000000001A +:1023C000000000000000000000000000000000000D +:1023D00000000300000000000000000000000000FA +:1023E000000000000000000000000404A000041031 +:1023F000C01108200800C04008A0014000000800EB +:102400009010A00000000500090008400080012095 +:102410000111C10008000209A000820000000000B4 +:1024200000000000000000000800000000000000A4 +:102430000020000000000000000000000000000973 +:102440000000000940000000000000000000000043 +:10245000000000000000000000000000000000007C +:1024600000000000000000000000000000842002C6 +:1024700020C02082038411000088100440854000A1 +:10248000410402A1000821040800080440050020BE +:102490004020400008000090008805000000000275 +:1024A00004000000400010000020020000001100A5 +:1024B00000200000000000000000000000000000FC +:1024C000000000000000000000000000000000000C +:1024D00000000000000000000000000000000000FC +:1024E0000000000000000000000000000000880064 +:1024F000001010410800A008000084108200820033 +:1025000000218211C00010410900824182800082B6 +:102510000803828004000820110000020010082037 +:1025200010000011C00400000800000000000000BE +:10253000000000000000000000000000000000009B +:10254000000000000000000000000000000000008B +:10255000000000000000000000000000000000007B +:1025600000000000000000009000000000000000DB +:1025700008000000000000000900000000900000BA +:102580000000000000000000000040000000000209 +:10259000112100000010800000000200000008016E +:1025A000030000000000080000000000000003001D +:1025B0000000030000000000000000000000000018 +:1025C000000000000000000000000000000000000B +:1025D00000000000000000000000000000000000FB +:1025E00000000000009000000088000000000000D3 +:1025F00000000240C0000008A000A1908204080072 +:102600008800084008091000100408112000C008C4 +:10261000080001C0080004A004050110008210A0F9 +:102620000121080010000000000000000000000070 +:10263000000000000000002000000000000000007A +:10264000000000000000000000000000000000008A +:10265000000000000000000000000000000000007A +:10266000000000000000000000000000000000006A +:10267000000000000000118400C0000002402000A3 +:102680002088200800A000820084040200002000AE +:10269000200010000402001004100000401000028E +:1026A0001102402041000800080000000000000066 +:1026B00000000000000000000000000020000400F6 +:1026C000000000000000000000000000000000000A +:1026D00000000000000000000000000000000000FA +:1026E00000000000000000000000000000000000EA +:1026F0000000000000000000000000000000410891 +:10270000412102418209108200200004048220C07D +:1027100005028205100883A1A01100A1A08909016A +:1027200001C1908988110000000004000000C1016F +:102730004000400082000000000000000000000097 +:102740000000000000000000000000000000000089 +:102750000000000000000000000000000000000079 +:102760000000000000000000000000000000000069 +:102770000000000000000000000000000000000059 +:102780008980021000858090A00500000003804031 +:1027900020C09040898580A009C18088000300A1E5 +:1027A00009110310059000100000000080000000D7 +:1027B000A041402100038020000000000000000034 +:1027C0000000000000000000000000000000000009 +:1027D00000000000000000000000000000000000F9 +:1027E00000000000000000000000000000000000E9 +:1027F00000000000000000000000000000000000D9 +:102800000000100085A18440038000008005800046 +:10281000800011000400410003A1900010218800F5 +:10282000410541009008909190C100000000000017 +:1028300000009080400040032000000000000000E5 +:102840000000000000000000000000000000000088 +:102850000000000000000000000000000000000078 +:102860000000000000000000000000000000000068 +:102870000000000000000000000000000000000058 +:1028800000000000890008C0A0911004840020000E +:10289000A00204002000850020009089042090847C +:1028A00004904184204003004111C1050000000054 +:1028B0000000000041888400400105000000000085 +:1028C0000000000000000000000000000000000008 +:1028D00000000000000000000000000000000000F8 +:1028E00000000000000000000000000000000000E8 +:1028F00000000000000000000000000000000000D8 +:1029000000000000000020020184001182C140028A +:1029100000A0848400820421A1850120010290216D +:10292000890285C010C0C01000890089A1C10001C2 +:102930000000000000000041008505410082000009 +:102940000000000000000000000000000000000087 +:102950000000000000000000000000000000000077 +:102960000000000000000000000000000000000067 +:102970000000000000000000000000000000000057 +:1029800000000000000000000088080808A1009175 +:1029900080804080050002000082880410080985BC +:1029A000038983802003A0838082031020059190F7 +:1029B000001000200008000300882104212100836A +:1029C0000000000000000000000000000000000007 +:1029D00000000000000000000000000000000000F7 +:1029E00000000000000000000000000000000000E7 +:1029F00000000000000000000000000000000000D7 +:102A00000000000000000000000000210000008025 +:102A100000040000800000008000410310A021801D +:102A20000302C120A009C180080890021091108003 +:102A300011080000000000000000210500092180AD +:102A40002120000000000000000000000000000045 +:102A50000000000000000000000000000000000076 +:102A60000000000000000000000000000000000066 +:102A70000000000000000000000000000000000056 +:102A800000000000000000000000000088852040D9 +:102A900000402000000082008820A0000120008269 +:102AA000014001000921040408909100C121410561 +:102AB000414040000000000000000000012000A094 +:102AC0000182010100000000000000000000000081 +:102AD00000000000000000000000000000000000F6 +:102AE00000000000000000000000000000000000E6 +:102AF00000000000000000000000000000000000D6 +:102B000000000000000000000000000000000000C5 +:102B100000E0000050000000000000000000000085 +:102B200000E00000000000000000070000000000BE +:102B300000E00000508100000000000000000000E4 +:102B40000000000050000000000000000000000035 +:102B50000000000000000000000000000000000075 +:102B60000000000000000000000000000000000065 +:102B70000000000000000000000000000000000055 +:102B80000000000000000000000000000000000045 +:102B90007E426666CCCC333300000000F0F0F0F0EB +:102BA0000000000090B090200000000090907E187F +:102BB000FFC38D8D3C3CB4B4000000000000000059 +:102BC000000000003003300300000000000000009F +:102BD00000000000000000000000000000000000F5 +:102BE00000000000000000000000000000000000E5 +:102BF00000000000000000000000000000000000D5 +:102C000000000000000000000000000000000000C4 +:102C1000000066666666666600FF004B004BFFFFBD +:102C2000C3990000000000B000207CFFFFFF0000FF +:102C30007E183C008D8DFF00F69000000000000023 +:102C40000000000000000000999900000000000052 +:102C50000000000000000000000000000000000074 +:102C60000000000000000000000000000000000064 +:102C70000000000000000000000000000000000054 +:102C80000000000000000000000000000000000044 +:102C90000000000000000000000000000000000034 +:102CA0000000000000000000000000000000000024 +:102CB0000000000000000000000000000000000014 +:102CC0000000000000000000000000000000000004 +:102CD00000000000000000000000000000000000F4 +:102CE00000000000000000000000000000000000E4 +:102CF00000000000000000000000000000000000D4 +:102D000000000000000000000000000000000000C3 +:102D1000000000000000C9C9C9C970737272FF3C8D +:102D2000C300CFC0FFF0FC0CCFCF0B000B03606FD4 +:102D3000606F1F1F101F00990099B4B466FF000058 +:102D4000000000000000000000008D8181B1000043 +:102D50000000000000000000000000000000000073 +:102D60000000000000000000000000000000000063 +:102D70000000000000000000000000000000000053 +:102D80000000000000000000000000000000000043 +:102D90000000000000000000000FF0FF70734242CE +:102DA000FCFCFCFCCFC00F00FC0CC0C008000803FA +:102DB000CFCFC0C01010101F0FC30FC3B4B4009901 +:102DC0000000000000000000000000000C000030C7 +:102DD00000000000000000000000000000000000F3 +:102DE00000000000000000000000000000000000E3 +:102DF00000000000000000000000000000000000D3 +:102E000000000000000000000000000000000000C2 +:102E10000000000000000000000000613006009982 +:102E2000000080610006001D000000415007000DF9 +:102E3000000005610A0E059D00A1A061000100913E +:102E4000000500610006000D000000610006001D85 +:102E50000000000000000000000000000000000072 +:102E60000000000000000000000000000000000062 +:102E70000000000000000000000000000000000052 +:102E80000000000000000000000000000000000042 +:102E90000000000000000000000000000000000032 +:102EA0000A0A5F5F0000000000000000030303FF48 +:102EB000FFFF5F5F0F5500C3C3C3FF0055FCFFFC5E +:102EC000A0FFB4BE0000000098746EAAFAFAC2C255 +:102ED000005AA5FF000000000000000000000000F4 +:102EE00000000000000000000000000000000000E2 +:102EF00000000000000000000000000000000000D2 +:102F000000000000000000000000000000000000C1 +:102F100000000000000000000000000000000000B1 +:102F20000000280A7D5F000000000000000003038D +:102F3000FFFFFFC35F430F55FFC3C3C3FF00550C23 +:102F4000000C005F141E0000000098746EAAFAFACC +:102F5000C2C2003CC3FF00000000000000000000EF +:102F60000000000000000000000000000000000061 +:102F70000000000000000000000000000000000051 +:102F80000000000000000000000000000000000041 +:102F90000000000000000000000000000000000031 +:102FA00003000300C000D00000001010000000006B +:102FB0002C83AFAF00C0F0C0AAAA4141B4BE0F003D +:102FC000F5FF35303CFCAAFC0000000000000000CA +:102FD000287D2070E3D3EFDF000000000000000038 +:102FE00000000000000000000000000000000000E1 +:102FF00000000000000000000000000000000000D1 +:1030000000000000000000000000000000000000C0 +:1030100000000000000000000000000000000000B0 +:103020000000140014000000000000000000000078 +:10303000000038C2FAFA00A0F0A000005F0A141ED7 +:10304000FFF0C5CF05003C0CAA0C000000000000FA +:103050000000287D2F7F4383408000000000000097 +:103060000000000000000000000000000000000060 +:103070000000000000000000000000000000000050 +:103080000000000000000000000000000000000040 +:1030900000000000000000000000000020002000F0 +:1030A000020083080000C0000800400040008402C5 +:1030B0000000040800008304020484800000000073 +:1030C0000004C000C00000000000002000800000DC +:1030D00000020004000000000000001100030000D6 +:1030E00000000000000000000000000000000000E0 +:1030F00000020000000200000000000000000000CC +:1031000000000000000000000002000000000000BD +:103110001000000000000000000000000000090096 +:10312000410041000800040204208000400004C067 +:103130002001000000030400020100010002000061 +:1031400000A0000008000020200000000082000213 +:10315000000400000000000000000000000000006B +:1031600000000090000000000000000000000000CF +:10317000000000000000000000000000000000004F +:10318000000200000000000000000000000000003D +:10319000000021000000000000000000000000000E +:1031A0000209080009000004094003C003009089D7 +:1031B00088008400010000000000048084040400F2 +:1031C000000085009000208000000000008000C00A +:1031D00001400000010400000000000000000000A9 +:1031E00000000000004000000020840000000000FB +:1031F00000000000000000000000000000000000CF +:1032000000000000000000000000000000000000BE +:1032100000000000000000000000000000000000AE +:10322000000000008284C0004002C0000803408803 +:103230000202000000840800030409008504000164 +:103240008000000020042000800402C00000002054 +:103250000021200000842089000200000982000073 +:103260000900000000000000000000010000000054 +:10327000000000000000000000000000000000004E +:10328000000000000000000000000000000000003E +:10329000000000000000000000000000000000002E +:1032A00000000000010000088200A00400004000AF +:1032B0000000044000000008000000004000000082 +:1032C0004000000040000004000020000400000056 +:1032D00000000003000488020002850000001000C6 +:1032E000000084000000000000044000C000000056 +:1032F00000000000000000000000000000000000CE +:1033000000000000000000000000000000000000BD +:1033100000000000000000000400000000000000A9 +:103320000000000000000200030003000000210074 +:10333000C1000000030009004100090402008800E8 +:103340000400410041000300031102000584004015 +:103350000800000000000001032100050200000039 +:10336000000000000000000000000000000000005D +:10337000000000000000000000000000000000004D +:10338000000000000000000000000000000000003D +:10339000000000000000000000000000000000002D +:1033A00000000000000000000280040404048241C8 +:1033B0000404100900020800C01010118409002044 +:1033C0004005080008000000840008000000090013 +:1033D0008800C00000000800A000A00000000080DD +:1033E00000000000000200000000000200000009D0 +:1033F00000000000000000000000000000000000CD +:1034000000000000000000000000000000000000BC +:1034100000000000000000000000000000000000AC +:10342000000000000000000000009040080440027E +:1034300002900088090008880084000121C00082F1 +:103440000308114090C088200040050011880390B7 +:1034500020000902009000000000030008000000A6 +:1034600003400000030000000000000003002100F2 +:1034700000000804000000000000008800000000B8 +:10348000000000000000000000000000000000003C +:10349000000000000000000000000000000000002C +:1034A0000000000000000000000000000220841066 +:1034B00008028300820008824002100040000805D4 +:1034C000C000880000110408202010020000000045 +:1034D00082004000100310110800000200000000EC +:1034E0000004000210000000000082000000000044 +:1034F00000000000000000000000000000000000CC +:1035000000000000000000000000000000000000BB +:1035100000000000000000000000000000000000AB +:103520000000000000000000000000000000808893 +:1035300000000800080041004103040908200000C1 +:103540008000080000100388C00084880000210467 +:10355000210000A021000340100003021190000090 +:10356000000004010801040000C000000800000081 +:10357000000000200000000000000000000000002B +:10358000000000000000000000000000000000003B +:10359000000000000000000000000000000000002B +:1035A000009040000000000000000000000000004B +:1035B00002C0400000410805001182040000880894 +:1035C0000011A00240080840200410C00000C020E4 +:1035D0000821901110028409200290094002400342 +:1035E00000000002001000000000080000000000C1 +:1035F00000000000000000000000000000000000CB +:1036000000000000000000000000000000000000BA +:1036100000000000000000000000000000000000AA +:10362000000000000000000000000000000000009A +:103630000000A0414002080021900808000000C0DE +:103640001102030403008308A110208808040088E5 +:103650000320100020002000409000041188000189 +:103660002100000000010000002010000000080000 +:103670000300000003000302000020000800000017 +:10368000000000000000000000000000000000003A +:10369000000000000000000000000000000000002A +:1036A000000000000000000000000000000000001A +:1036B000000000008388000890880404A0A0A008EF +:1036C0000809C020A008A19040A020A01083854038 +:1036D00008A0200820000100410120014190410480 +:1036E0000282C0A000A100020104009000000000BE +:1036F00000000000000000000000000000000000CA +:1037000000000000000000000000000000000000B9 +:1037100000000000000000000000000000000000A9 +:103720000000000000000000000000000000000099 +:1037300000000000000009800080008000801189E6 +:10374000A103800380058800830080808080802022 +:1037500003098490009000094103210200059000B4 +:103760001000808080000008058804080003000025 +:103770000000000000000000000000000000000049 +:103780000000000000000000000000000000000039 +:103790000000000000000000000000000000000029 +:1037A0000000000000000000000000000000000019 +:1037B000000000000000000005000803A0802100B8 +:1037C00040001004C000041108001103C1008382EE +:1037D000034003008800A183418084000811820512 +:1037E0000000892105882180418008030508000424 +:1037F00000000000000000000000000080008000C9 +:103800008000000000000000000000000000000038 +:1038100000000000000000000000000000000000A8 +:103820000000000000000000000000000000000098 +:103830000000000000000000000090008900A0408F +:103840002100C1A0A001A0C0040009820400A0883A +:10385000A18982044100A00091030888110005009D +:1038600011014000822088A01190000400A10000F6 +:10387000002100000000000000000000080082009D +:1038800002000282000000000000000000000000B2 +:103890000000000000000000000000000000000028 +:1038A0000000000000000000000000000000000018 +:1038B000000000000000000000000000A0400084A4 +:1038C00004C000C1208400048582C111C020001002 +:1038D0000088008808200021042002890020880236 +:1038E000844100C0044100419041A0020001000059 +:1038F00001012000000000000000000000000000A6 +:1039000000000000000000000000000000000000B7 +:1039100000000000000000000000000000000000A7 +:103920000000000000000000000000000000000097 +:10393000000000000000000000000000000000097E +:10394000002080104088030503A184082102800024 +:10395000000300112010800305200508821000A03C +:103960008803092100A0800400A080108390000239 +:1039700000210821000500000000000000000000F8 +:103980000000000000000000000000000000000037 +:103990000000000000000000000000000000000027 +:1039A0000000000000000000000000000000000017 +:1039B0000000000000000000000000000000000007 +:1039C000008080108080801084A1208583000309FE +:1039D000C100118010800941210802414180050485 +:1039E00021A020914100034080800005008000401C +:1039F000210505002000022000000000000000005A +:103A00000000000200020080000000000000000032 +:103A100000000000000000000000000000000000A6 +:103A20000000000000000000000000000000000096 +:103A30000000000000000000000000000000000086 +:103A4000000090408220108220014009830803007A +:103A5000840009040882C102C00101050104008438 +:103A6000000101410009000801010402A040C084D6 +:103A7000C0000120200005004100000000000000FF +:103A800000000000000100A1004000000000000054 +:103A90000000000000000000000000000000000026 +:103AA0000000000000000000000000000000000016 +:103AB0000000000000000000000000000000000006 +:103AC00000000000000000000000000000000000F6 +:103AD0000000000A0000000000006006000000E096 +:103AE00007000000000000E00000410000000000AE +:103AF00007000012000000E00000000000000000CD +:103B000000000000000000000000070000000000AE +:103B100000000000000000000000000000000000A5 +:103B20000000000000000000000000000000000095 +:103B30000000000000000000000000000000000085 +:103B4000000000000000BC1CBCBC4BE1F55F545EF3 +:103B5000F4FE2C7C207F82BE0000C3FFCFCF00008C +:103B6000000000000004000000000F00A0A03C3C8A +:103B700000FFF0FFE8E80000000000000000000087 +:103B80000000000000000000000000000000000035 +:103B90000000000000000000000000000000000025 +:103BA0000000000000000000000000000000000015 +:103BB0000000000000000000000000000000000005 +:103BC00000000000000000001C1C1CBC4BE1A00A0F +:103BD000040EA4AE1CBC10BF0AFA000041554545B6 +:103BE0000000000000000000000000000F00BC808A +:103BF000F0F0AAAAF000E8E80CFC0CFC00000000C1 +:103C000000000000000000000000000000000000B4 +:103C100000000000000000000000000000000000A4 +:103C20000000000000000000000000000000000094 +:103C30000000000000000000000000000000000084 +:103C40000000000000000000000003033F030545E2 +:103C5000B5F52CEF0CCF1717FF00C3C3C0C300048A +:103C600000F43C5F555FF7F7F40400000000050026 +:103C700005283C3C55553F033F03DF8AD5800000B3 +:103C80000000000000000000000000000000000034 +:103C90000F0F000000000000000000000000000006 +:103CA0000000000000000000000000000000000014 +:103CB0000000000000000000000000000000000004 +:103CC0000000000000000000000000003F3F3F0334 +:103CD0000D4DBDFD2C2C0C0C1717FF00C3C3C3C327 +:103CE0000404F4F43C50555007F7040400000000AD +:103CF000058205AAFF000F0F5F5F0A0ADF8AD580E1 +:103D000000000000000000000000000000000000B3 +:103D10000000AAAA82AA0000000000000000000023 +:103D20000000000000000000000000000000000093 +:103D30000000000000000000000000000000000083 +:103D40000000000000000000000000000000806192 +:103D50000006009D000000610006000D00010061EA +:103D60000006000D00000061000D0005000100616B +:103D70000004009900010061300E000D0000006198 +:103D800030030005000000000000000000000000FB +:103D9000000000080000000000000000000000001B +:103DA0000000000000000000000000000000000013 +:103DB0000000000000000000000000000000000003 +:103DC00000000000000000000000000000000000F3 +:103DD0000000000000A03000040204023C1428008F +:103DE000FCFCF505AA0AA0003F3C353C0F0F0F0F65 +:103DF0003F3F3F350000000000000000C3C0F3F06B +:103E0000D7DFD79EFFFF0F0F00000000000000006B +:103E100000000000000000000000000000000000A2 +:103E20000000000000000000000000000000000092 +:103E30000000000000000000000000000000000082 +:103E40000000000000000000000000000000000072 +:103E500000000000000000A030000402F4F23F1750 +:103E60002B030C0CF505AF0FA5053F3C303C0F0BA9 +:103E70000F0F353F35355F3F0F0F00000000C1C108 +:103E8000F1F1C3CBC38A0CFC0CFC00000000000065 +:103E90000000000000000000000000000000000022 +:103EA0000000000000000000000000000000000012 +:103EB0000000000000000000000000000000000002 +:103EC00000000000000000000000000000000000F2 +:103ED0000000000000000000CF0EFF0E0000FD0DEE +:103EE000003CB2B20000000000000000EFFFAAFF9B +:103EF000001455143CFC7C7C2C3C3C3C0000000035 +:103F0000A0A000A0FF3CF03CEF2FEF2F000000002E +:103F100000000000000000000000000000000000A1 +:103F20000000000000000000000000000000000091 +:103F30000000000000000000000000000000000081 +:103F40000000000000000000000000000000000071 +:103F500000000000000000000000C002F0020000AD +:103F6000F8080000000000000000AAB4FFB4000040 +:103F70000000A0B4F5B43C0C2C2C3C3C3C3C0000B4 +:103F80000000A0A0FFA00F3C003CE020E0200000CB +:103F90000000000000000000000000000000000021 +:103FA0000000000000000000000000000000000011 +:103FB0000000000000000000000000000000000001 +:103FC00000000000000000000000000000000000F1 +:103FD00000000000000000000200200002000000BD +:103FE000080040000000040020000000010540021D +:103FF000888008000404040200000400002000205F +:104000000008008300000000000000000000000025 +:104010000000000000100000000300080000000085 +:104020000020000000000000000000000000000070 +:104030000000000000000000000000000000000080 +:10404000000000000400000000000000000000006C +:104050000000000000000000000000000000400020 +:10406000410083C00000000005000000002008009F +:104070001001002084008482C10000A0A100000182 +:1040800021010001050200C0000000000000000046 +:104090000000002000A000830000000000010000DC +:1040A000000000010000000000000000000000000F +:1040B0000000000000000000000000000000000000 +:1040C00000000000000000000000000000000000F0 +:1040D00000000000000000000000000088800002D6 +:1040E00090050110080000000010021000000800F8 +:1040F000C000000004000009C020402000000400AF +:104100002020002002084000000000000000020003 +:104110000000030002000480000000000000010015 +:1041200000800041008021820000008004840000A3 +:10413000820000008200000000000000000000007B +:10414000000000000000000000000000000000006F +:10415000000000000000000000000000000003025A +:104160000083400408010308040004C0058800041B +:1041700082880040020080000208200182090400B9 +:10418000820800010201000980000000008804008C +:1041900004000000400004008410000000840000BF +:1041A000100000200200000290090000000200033D +:1041B00000000002000000000000000000000000FD +:1041C00000000000000000000000000000000000EF +:1041D00000000000000000040000000400000000D7 +:1041E000C0000008000000410000408009104000AD +:1041F0000000000000050000402100C188100821D7 +:104200000200408004890000881008008400000833 +:10421000880000210000C0210400000000400011BF +:104220000000000000A100000009000000000000E4 +:104230000004000000050000000000000011000064 +:10424000000000000000000000000000000000006E +:10425000000000000000000000000000000000005E +:104260000000210241000088091041000402880575 +:10427000210040C00300210008C005000002030027 +:1042800009A00800100200020008000041002102FD +:1042900021004000000000884102000000000000F2 +:1042A0000000000000000008000000000000000006 +:1042B00000000001000000000000000000000000FD +:1042C00000000000000000000000000000000000EE +:1042D00000000000000000000000000000000000DE +:1042E0000000000090001000821002A002400200B6 +:1042F00010040811104108000240840404408200A8 +:10430000C009400000020000A00041000800400079 +:10431000820000000802000000008220828000006D +:104320008400080000009000000000000000010070 +:10433000000000000000000000000000000000007D +:10434000000000000000000000000000000000006D +:10435000000000000000000000000000000000005D +:1043600000000000000004C0034011018302C000EF +:1043700000024088000421108000880000008900AD +:10438000400000200000410000880200840000007E +:104390004000000004400200000021000000401026 +:1043A000410021201100000000840000000000886E +:1043B00020200000000000000000000000000000BD +:1043C00000000000000000000000000000000000ED +:1043D00000000000000000000000000000000000DD +:1043E00000000000000000000000080010000805A8 +:1043F0000800080084058200000084000000A0007E +:104400000821080084008211000008110405000939 +:10441000902008000002000200000000A00200003E +:1044200008000800000010410000000040004000AB +:104430000000000800020000000000000000000072 +:104440000008000000000000000000000000000064 +:10445000000000000000000000000000000000005C +:1044600000000000000000000000080240200000E2 +:1044700091000040000000000400088205000504CF +:104480000590100400200300008800000000800454 +:104490000082050083000085080204000002090074 +:1044A00004900000000000000000000000008000F8 +:1044B000800000000001000100000000000000007A +:1044C00000000000000000000000000000000000EC +:1044D00000000000000000000000000004000000D8 +:1044E0000000000000000000000000004000040088 +:1044F0000804A0828211C0000984401100118400C8 +:104500000002820400000000884190000041820205 +:1045100008020400000000102008820000110008BA +:10452000022008004000820200000000000000009D +:1045300008008800000000200000000000000000CB +:104540000000000000000000000800000000000063 +:10455000000000000000000000000000000000005B +:104560000000000000000000000000000000080043 +:10457000099009100802400000A0041091080040B2 +:1045800000200000000000000000001000000000FB +:1045900000012001000003200000000000000000D6 +:1045A0000000000000000000038808000000000078 +:1045B00000000000002000000000000000000400D7 +:1045C00000000000000000000000000000000000EB +:1045D00000000000000000000000000000000000DB +:1045E00000000000000000000000000000000000CB +:1045F00004A191118288000810A0C040020490829A +:1046000001A000A09002A020C0A0019090A00004F2 +:10461000A0A189409004C002A08301C0A0C0C0092D +:104620000000000008000000400000200020A0045E +:104630000000A1889005A090044100000000400007 +:104640000001000000000000000000000000000069 +:10465000000000000000000000000000000000005A +:10466000000000000000000000000000000000004A +:10467000000009C041030041001000800480800058 +:1046800000802080210000800000880003000000DE +:1046900000800088219000A08082001021208002EC +:1046A00080100000110000000000800000000000E9 +:1046B000008000002085C1A100410020000002030D +:1046C0000540001000000000000000000000000095 +:1046D00000000000000000000000000000000000DA +:1046E00000000000000000000000000000000000CA +:1046F000000000000000C003858003C088000203A2 +:1047000020022082000000028080000080008021C2 +:104710008000800003008910408240030080024135 +:1047200005024188000000000000000000000010A9 +:10473000000900000000100088098211C1A11000CA +:10474000080010004102000000000000000000000E +:104750000000000000000000000000000000000059 +:104760000000000000000000000000000000000049 +:1047700000000000000000880300A0A089A1112013 +:10478000900141C1A0044000C001A0100400080035 +:10479000080008C010828240100104098401000250 +:1047A000011001C101A10000000000000000000094 +:1047B000000100A1000000004108830188840391EA +:1047C0000182010001000101000000000000000062 +:1047D00000000000000000000000000000000000D9 +:1047E00000000000000000000000000000000000C9 +:1047F00000000000000000004085010140C108A049 +:1048000082890088008501C1048400C000A002C024 +:10481000100000A00800080104C000008509A000E5 +:10482000081000A08582C0110000000000000000F8 +:1048300008400082A04091020000A0050182001003 +:10484000C0030000010001010001000000000000A1 +:104850000000000000000000000000000000000058 +:104860000000000000000000000000000000000048 +:104870000000000000000000000080404003802194 +:1048800009040010008500A10988800300100003BE +:104890008000800000C100100040000402000821D8 +:1048A000000580080985102080890000000900406B +:1048B0000005008000800000028000008089022145 +:1048C00011A080C100000805052140100000000073 +:1048D00000000000000000000000000000000000D8 +:1048E00000000000000000000000000000000000C8 +:1048F00000000000000000000000000021402040F7 +:104900008280030980829002088003098000800071 +:10491000008080000000A00408001100A184114163 +:1049200010808808A180080020008202000000009A +:10493000000000008040802100000000000090097D +:1049400003800400040821800200200040110000C0 +:104950000000000000000000000000000000000057 +:104960000000000000000000000000000000000047 +:10497000000000000000000000000000000085A012 +:104980009090080885000409210882040200C000F4 +:1049900004409008A0001000048221A0100003C170 +:1049A0008882214003004188A1001000020100001C +:1049B000000000000000C000A0000800100000007F +:1049C00005108204A19040010110010001000001C6 +:1049D00000000000000000000000000000000000D7 +:1049E00000000000000000000000000000000000C7 +:1049F00000000000000000000000000000000000B7 +:104A0000000000000000500000000000070000004F +:104A1000000000000000000000000000070060002F +:104A2000000000000700600A000000E00000000A2B +:104A3000000000000000000000000000070000006F +:104A400000000000000007000011000000E000006E +:104A50000000000000000000000000000000000056 +:104A60000000000000000000000000000000000046 +:104A70000000000000000000000000000000000036 +:104A80000000FF99FF995AFF5A009F9B9F02C3C3E2 +:104A90003C66993C3C000F0F000FC3C3C7C76F6F44 +:104AA0006F6F240C3C0CFFFFFFFF3CFD3CFFF0F060 +:104AB000F0F00000000000000000069FBDBD66662B +:104AC00066660000E3FF001CF0E1F0F0000000006B +:104AD00000000000000000000000000000000000D6 +:104AE00000000000000000000000000000000000C6 +:104AF00000000000000000000000000000000000B6 +:104B0000000000000003003F5AFF5A00FFFBFF6255 +:104B1000CFCF3066F03C3C00C3C3C3C3C7C3C7C7D5 +:104B20006F6F6F6F240C000CFFBDFFBD3C043C0099 +:104B3000F330F1700000000000000000069F242404 +:104B4000FCC0FCFC0000C3FF003CF0C3F0F0000020 +:104B50000000000000000000000000000000000055 +:104B60000000000000000000000000000000000045 +:104B70000000000000000000000000000000000035 +:104B80000000000000000000000000000000000025 +:104B90000000000000000000000000000000000015 +:104BA0000000000000000000000000000000000005 +:104BB00000000000000000000000000000000000F5 +:104BC00000000000000000000000000000000000E5 +:104BD00000000000000000000000000000000000D5 +:104BE00000000000000000000000000000000000C5 +:104BF00000000000000000000000000000000000B5 +:104C000000000000000000000B03DBC36F9690FF64 +:104C1000000030FF400040000E0F0607F8E0F4D01F +:104C2000F800F000999999993F3FFFFFFFFFFFFFC0 +:104C3000B9FF0000000000000000000000000000BC +:104C40003C6F3C6F00000000000066036600092D09 +:104C50004B6F00000000000000000000000000009A +:104C60000000000000000000000000000000000044 +:104C70000000000000000000000000000000000034 +:104C8000000000000000000000000B0FDBFF060921 +:104C900009F60000FFFF090900000C0D0405FB20C8 +:104CA000F710FC00F000DB9B9999FF7EFFFF0030BE +:104CB0000010B99900000000000000000000000092 +:104CC00000003C603C6000000000000066FF66FCE5 +:104CD00009096F6F000000000000000000000000E4 +:104CE00000000000000000000000000000000000C4 +:104CF00000000000000000000000000000000000B4 +:104D000000000000000000000000000000614006FC +:104D1000000D00000061400E009D0001A061000632 +:104D2000000D00000061000E000D00000061000E8B +:104D3000000D000000603006000D0000006100065C +:104D4000000D0000A00000080000000000008061CD +:104D50000006001D000000610003000900000000C3 +:104D60000000000000000000000000000000000043 +:104D70000000000000000000000000000000000033 +:104D8000000000000000000000000000000096008D +:104D9000FF698080B0B050045004C0FC82820000E3 +:104DA000000028C028C03C0F3C0F0055FF550E0ED8 +:104DB0000A0A4141000055540504414141410000A7 +:104DC0000000A0F5F5F50000000000000000000064 +:104DD000FFD7EBC3AFAF0CFCA8FDA8FDF0F0AAFF16 +:104DE00000000000000000000000000000000000C3 +:104DF00000000000000000000000000000000000B3 +:104E000000000000000000000000000000000000A2 +:104E1000F000FF0FFF00FF0000040004000000008E +:104E200000000000000000003C0F3C0FF055F05562 +:104E30000E0A0E0A4100000051500100414341405A +:104E400000000000A0F5A0A000000000000000008D +:104E50000000F0D0E0C0A0A00CFC00004141F0F048 +:104E600000550000000000000000000000000000ED +:104E70000000000000000000000000000000000032 +:104E80000000000000000000000000000000000022 +:104E900000007D285F0A5505500000000000C3F0A7 +:104EA000AAFF000000000000000000000000000059 +:104EB00000000000FCF52828AFFFF0F03CFC0FFFDD +:104EC00005050000000000000000000000000000D8 +:104ED0000000000055555555E3EF5F50C7F7C7F781 +:104EE000BEB2FFF000000000000000000000000063 +:104EF00000000000000000000000000000000000B2 +:104F000000000000000000000000000000000000A1 +:104F1000000000007D285F0AFFAFFAAA0000000031 +:104F2000C3F0AA0000000000000000000000000024 +:104F30000000000000000C057D7DAFFFF0F03C7D1F +:104F400000F0050500000000000000000000000067 +:104F50000000000000000054FF57202C5F50043474 +:104F6000043482B200F000000000000000000000E5 +:104F70000000000000000000000000000000000031 +:104F80000000000000000000000000000000000021 +:104F900000000000000000002000400040800000F1 +:104FA00004004000882020000000040004040000E9 +:104FB00004001000000284008400042004030000A8 +:104FC0000000A08000800000002004040080008514 +:104FD000008000800000000100000084000000024A +:104FE00000000000000000000000000000000000C1 +:104FF00000000000000000000000000000000000B1 +:1050000000000000000000000000000000000000A0 +:10501000000000000000000040000400000000103C +:105020000002400000004091030000000500000263 +:105030004000200000000004000000000000000408 +:10504000090041000010001000000003008400402F +:105050000010000200020004000000020002000232 +:105060000003000000000000000000020000000239 +:10507000000000000000000000040000000000002C +:105080000000000000000000000000000000000020 +:105090000000000000000000000403000000824047 +:1050A0000000840000A00410000000000400900034 +:1050B0000200000020000200041088000000001020 +:1050C000000000000000010000800000050000005A +:1050D00004900200010001000100000090000100A6 +:1050E0000402C140000000000000000000000000B9 +:1050F00000000000000000000000000000000000B0 +:10510000000000000000000000000000000000009F +:10511000000000000000000000000000400000024D +:105120000005000000080021030004040008090035 +:105130000300410805C000000500028400000000D3 +:10514000008202000508040004080040008804846E +:10515000000080200400080020000200000004007D +:105160000800000002050004000000040004000024 +:10517000000000000000000000000000000000002F +:105180000000000000000002000400000000000019 +:10519000000000000000000000020000000000030A +:1051A0000010004100400241840084084011820048 +:1051B00000088400C00000008200C00008008205D2 +:1051C0008400C000C0000020000084000005000032 +:1051D00040008400080000210000008000A00000C2 +:1051E000400000100490009000200000000000002B +:1051F00000000000000000000000000000000000AF +:10520000000000000000000000000000000000009E +:10521000000004000000000000000000000000008A +:1052200021901101030809010004052008040588E4 +:1052300011000000410002000000000221004000B7 +:1052400003100200080204C000A1000000000000DA +:10525000008240880584802000000020414000102A +:1052600000008000000100410011008400000000E7 +:10527000000000000000000000000000000000002E +:10528000000000000000000000000000000000001E +:10529000000000000000000000000000000000000E +:1052A000000082204009080204418204C00400007A +:1052B0000020A040841108400004A0001000C0009D +:1052C0000011000008008200000000200811080002 +:1052D0000800A000C01008000000A10000000000AD +:1052E00082000000004100000000000000000000FB +:1052F00000000000000000000000000000000000AE +:10530000000000000000000000000000000000009D +:10531000000000000000000000000000000000008D +:10532000000000000800000080002100000000884C +:10533000000000012100039009000000002000008F +:105340000000000000001100000000080001030040 +:1053500085000800000000000000000020000000A0 +:1053600000000000000000000000410021000000DB +:10537000000000000000000000000000000000002D +:105380000008000000000000000000000000000015 +:10539000000000000000000000000000000000000D +:1053A00000000000000008A01000040000009000B1 +:1053B0000000000082080000000000000840820099 +:1053C0000041004010000000000000000800000044 +:1053D00004008200000000004021840308800100D6 +:1053E0000810100083020000000000000000000010 +:1053F000002000000020000000000000000000006D +:10540000000000000000000000000000000000009C +:10541000000000000000000000000000000000008C +:1054200000000000000000008840400040000088AC +:105430004090409021000500000021000300000181 +:1054400008201000080040044088039021200484B4 +:105450000000200008080882000021000000402011 +:1054600040000001080002010000088408820800D2 +:1054700021000000040808040300000000000000F0 +:105480000000000004000000000000000000000018 +:10549000000000000000000000000000000000000C +:1054A00000000000000000000000840540210441CD +:1054B0000011041140000000900082000004C010A0 +:1054C00000100021000040000000000090000000DB +:1054D00000000410820000004008080082008221C1 +:1054E000002140A100008210820000000020000086 +:1054F0000000004000080020000900200002000019 +:10550000000000000000000000000000000000009B +:10551000000000000000000000000000000000008B +:10552000000000000000000000000000000000007B +:10553000000000880000000040880090000000008B +:105540000001000100000000040000000000000055 +:10555000000000000001000000000000000000004A +:105560000000000000040000000100000000000036 +:105570000000000008010000000000000000000022 +:105580000000080000000000000000000000000013 +:10559000000000000000000000000000000000000B +:1055A000000000000000000000000000000003C137 +:1055B0000021009082080288009000089082080470 +:1055C00000400082402000000000000000000000B9 +:1055D00000000000000008A000C000820090000849 +:1055E00000880020008241C005880410401000009F +:1055F00090C0008940080089000000000000000001 +:10560000000000000000000000000000000000009A +:10561000000000000000000000000000000000008A +:10562000000000000000000000000000000000007A +:10563000A188008400200004800000800000000099 +:10564000808000000000000000000000000000005A +:1056500000000000000000000080000000000000CA +:105660000080000000000000A0838303C120000927 +:10567000000000C00303000900400000000000001B +:10568000000000000000000000000000000000001A +:10569000000000000000000000000000000000000A +:1056A00000000000000000000000000000000000FA +:1056B00000008000000380000000800080098080DE +:1056C000808000000040800080000000000000009A +:1056D00000000000000000000000000000008080CA +:1056E00000000000000800008000830003200391F8 +:1056F000200000000300200220801089000000002C +:105700000000000000000000000000000000000099 +:105710000000000000000000000000000000000089 +:105720000000000000000000000000000000000079 +:10573000000000000800C001A008C090A000820086 +:10574000A0C00890C0000802A08210000000000065 +:1057500000000000000000000000000040002000E9 +:10576000A0029000020008900088040008020400D3 +:1057700001A140C000002084040190A001A000000D +:105780000000000000000000000000000000000019 +:105790000000000000000000000000000000000009 +:1057A00000000000000000000000000000000000F9 +:1057B00000000000000020A00104010083C0C0041C +:1057C0000020000289202082000200C00510000095 +:1057D0000000000000000000000000000000408801 +:1057E0000008001002A008000000000008000204E9 +:1057F00001A1820111900000080401A00911110407 +:105800000000000000000000000000000000000098 +:105810000000000000000000000000000000000088 +:105820000000000000000000000000000000000078 +:1058300000000000000000000000200005008400BF +:10584000808000000080400000000080000089800F +:105850000000000000000000000000000000000048 +:105860000000000000808000000000000000080030 +:105870000041209000210904000000411090022105 +:105880008988000000000000000000000000000007 +:105890000000000000000000000000000000000008 +:1058A00000000000000000000000000000000000F8 +:1058B0000000000000000000000080000008000060 +:1058C0008000800080008000000080028000008056 +:1058D00000000000000000000000000000000000C8 +:1058E0000000000000050080000080000002800031 +:1058F0000000A140C12141800403000021C0A1801B +:105900008480021000000000000000000000000081 +:105910000000000000000000000000000000000087 +:105920000000000000000000000000000000000077 +:10593000000000000000000000000000C000A00007 +:105940004004A0001000044008C088000401208426 +:105950002084200000000000000000000000000083 +:1059600000000000880008C00808900008002021FE +:1059700084048200C10040918484040100008304F7 +:105980000802058441010000000000000000000042 +:105990000000000000000000000000000000000007 +:1059A00000000000000000000000000000000000F7 +:1059B00000000000000000000000000000000000E7 +:1059C000000000000000000000000700842100002B +:1059D00000000000000000000000000000000000C7 +:1059E00000000000000000000000070000000000B0 +:1059F000000007000000000000E0000000000000C0 +:105A00000000000000000000000000000000000096 +:105A10000000000000000000000000000000000086 +:105A20000000000000000000000000000000000076 +:105A30000000000000000000000000000000000066 +:105A4000FFFF5F0AB2B2B2B255555555C3CFE3EF6F +:105A500055555555083C383C00000000000000003A +:105A60000000000000000000AAF0AA3C20E02FEF98 +:105A7000AAF000F000000000282803C33F3F030302 +:105A8000000028003C14D714171700000000000085 +:105A90000000000000000000000000000000000006 +:105AA00000000000000000000000000000000000F6 +:105AB00000000000000000000000000000000000E6 +:105AC000000055557D28F3F330303C3C5535F3FF4D +:105AD000E3EF4155055508003800000000000000C4 +:105AE00000000000000000000000AAF0AA3C20E036 +:105AF0002FEF3C3C3C3C0000000028283FFF7D7D10 +:105B0000414100000C003C30D71417170000000082 +:105B10000000000000000000000000000000000085 +:105B20000000000000000000000000000000000075 +:105B30000000000000000000000000000000000065 +:105B40000000000008F80DFDFF00FF004545FF00C4 +:105B5000BEFF140050D050504B4B4BC30000000010 +:105B60000000000000000000000000002028A0AAA3 +:105B700038380038F5F5F505FEFE0E0E3C3CFF000A +:105B80000A0ACACA00000F0F5555FC5CFC5C0000F5 +:105B90000000000000000000000000000000000005 +:105BA00000000000000000000000000000000000F5 +:105BB00000000000000000000000000000000000E5 +:105BC00000000000000000000000C3C3F0F0757585 +:105BD000FF000F0F0F0F50D050F04B4B4B4B0000FE +:105BE0000000000000000000000000000000AAAA61 +:105BF000AAAA000000383C3C3C3CF4F404040F0F1B +:105C00005555FAFACACA0000FF003C3CAC0CAC0C7B +:105C10000000000000000000000000000000000084 +:105C20000000000000000000000000000000000074 +:105C30000000000000000000000000000000000064 +:105C40000000000000000000A0615006001D0000E0 +:105C50000000000000000000000030000000000014 +:105C60000000000000000000000000000000000034 +:105C7000000040080000000000003E080000000096 +:105C8000A061500300050000000080615006000D77 +:105C90000000000000000000000000000000000004 +:105CA00000000000000000000000000000000000F4 +:105CB00000000000000000000000000000000000E4 +:105CC00000000000000000000000000000000000D4 +:105CD00000000000000000000000000000000000C4 +:105CE00000000000000000000000000000000000B4 +:105CF00000000000000000000000000000000000A4 +:105D00000000EB03EB3FC2C200C30000AA20AAA020 +:105D1000AE00FF00000000000000000000000000D6 +:105D20000000000000000000000000000000000073 +:105D30000000000000000000000000000000000063 +:105D40000000000000000000000000000000000053 +:105D50000000000000000000000000000000000043 +:105D60000000000000000000000000000000000033 +:105D70000000000000000000000000000000000023 +:105D800000000000EB03EB3F020200C30000AAA0EA +:105D9000AAA0FF00FF0000000000000000000000BB +:105DA00000000000000000000000000000000000F3 +:105DB00000000000000000000000000000000000E3 +:105DC00000000000000000000000000000001E1E97 +:105DD000FFAA00000000000000000000000000001A +:105DE00000000000000000000000000000000000B3 +:105DF00000000000000000000000000000000000A3 +:105E00000000000000000F3C555508CB38FB000097 +:105E10000000A2F343034303000000000000000061 +:105E20000000000000000000000000000000000072 +:105E30000000000000000000000000000000000062 +:105E40000000000000000000000000000000000052 +:105E50001E1E5500000000000000000000000000B1 +:105E60000000000000000000000000000000000032 +:105E70000000000000000000000000000000000022 +:105E800000000000000000000F3C555508CB38FB17 +:105E90000000AAFFA2F343034B0B00000000000028 +:105EA00000000000000000000000000000000000F2 +:105EB00000000000000000000000000000000000E2 +:105EC00000000000000000000000000000000000D2 +:105ED000000000008400200082040000000088040C +:105EE00088040400880004042000840804000000E2 +:105EF000400082080200000000000200020040048E +:105F00000003000000008400080000000000000002 +:105F10000000000000000000000000000000000081 +:105F2000000300000000000000000000000000006E +:105F30000000000000000000000000000000000061 +:105F40000000000000000000000000000000000051 +:105F50000000000009000000000004002000000212 +:105F60000000000000C02000000000000000000051 +:105F7000000000000000000000000000009000820F +:105F80000000200000C000020000800000000000AF +:105F90000000000000000000000000000000000001 +:105FA00000000000000000000000000000000000F1 +:105FB00000000000000000000000000000000000E1 +:105FC00000000000000000000000000000000000D1 +:105FD0000000000000000000000982000000020034 +:105FE00000000010001000000000001000008210EF +:105FF000000004400000004000000000000000001D +:106000000400000000000441000000100200000035 +:106010002000000008000000000004000000000054 +:106020002000000000000000000000000020200010 +:10603000040000000000000000000000000000005C +:106040000000000000000000000000000000000050 +:1060500000000000000000000000040000000082BA +:10606000049004880900044000004000008204C03D +:106070000500000003040288000000000200000088 +:1060800040000000000004000000040000000400C4 +:1060900000100200000002000000044000000000A8 +:1060A0000400040004002000000000004000040080 +:1060B00000000000000000000000000800000008D0 +:1060C00000040000000800000000000000000000C4 +:1060D000000000000000000000009004C00000006C +:1060E00008008203400088008800080000000000CB +:1060F000C0008400C0000000080002004000000052 +:106100004000820082000000A00088000000C00063 +:10611000000000004000000088000000A000000017 +:10612000000000000000000000000000000000412E +:10613000000000000000000000000000000000005F +:10614000000000000000000000000000000000004F +:106150000000000000000000000000000000030438 +:1061600003000300050008000800080021000000EB +:10617000000000000000030000000000000041409B +:106180000800000000000000402000880088030094 +:106190000200020021002100410008000000000070 +:1061A00000A00002000800000008009000000000AD +:1061B00000000000000000000000000000000000DF +:1061C00000000000000000000000000000000000CF +:1061D00000000000000000000000000000000011AE +:1061E0008200000000000011A04000200000000418 +:1061F000000000040040C00008020002002000006F +:1062000008000000A00000000000040000000000E2 +:10621000000008000804000000000000000000006A +:1062200000400000000900000000000000004000E5 +:10623000000000000000000000000000000000005E +:10624000000000000000000000000000000000004E +:10625000000000000000000000000000000000003E +:10626000000000004000000040000000200040004E +:1062700000C0004000000000000000880000000096 +:1062800000000400000004000000400008000000BE +:1062900000000000000000020000000000000000FC +:1062A000000040000000000000000000000040006E +:1062B0004000040011002100000000000000000068 +:1062C000004000000000000000000000000000008E +:1062D00000000000000000000000000000000000BE +:1062E00000000000820000004000100000000000DC +:1062F00000000000820008000010000000000800FC +:10630000000000000000000000000000000000008D +:1063100004000000000000008200000000000000F7 +:10632000000000000000000000000000000000006D +:10633000000000000000000000000000000000005D +:10634000000000000000000000000000000000004D +:10635000000000000000000000000000000000003D +:1063600000000000090403040300000041041010B1 +:1063700041000000000000000000200000000000BC +:1063800000000000000040040000000000000004C5 +:1063900008000000110000000004110008000800BF +:1063A000032000000000080821000308030000008B +:1063B00000000000100000000000000000000000CD +:1063C00000000000000000000000000000000000CD +:1063D00000000000000000000000000000000000BD +:1063E0000000000000000000080000000000840021 +:1063F000000000000000000000000000000000009D +:106400000000000010000000000000000800000074 +:106410000000000000000800080000000000080064 +:1064200088000000000000000000000000000000E4 +:106430000000000008000000000000000000000054 +:10644000000000000000000000000000000000004C +:10645000000000000000000000000000000000003C +:10646000000000000000000000000200000000002A +:10647000000400880040209002000000020000009C +:106480000400000000000000000000000000000008 +:1064900000000000000000000000080000004000B4 +:1064A00000000000000000000000000008000000E4 +:1064B00000000000080000000000000000000800CC +:1064C00000000000000010000300000000000000B9 +:1064D00000000000000000000000000000000000BC +:1064E00000000000000000000000000000000000AC +:1064F000000000000000000000000000000000009C +:10650000000000000000000000000000000000008B +:10651000000000000000000000000000000000007B +:10652000000000000000000000000000000000006B +:10653000000000000000000000000000000000005B +:10654000000000000000000000000000000000004B +:10655000000000000000000000000000000000003B +:10656000000000000000000000000000000000002B +:10657000000000000000000000000000000000001B +:10658000000000000000000000000000000000000B +:1065900000000000000000000000000000000000FB +:1065A00000000000000000000000000000000000EB +:1065B00000000000000000000000000000000000DB +:1065C00000000000000000000000000000000000CB +:1065D00000000000000000000000000000000000BB +:1065E00000000000000000000000000000000000AB +:1065F000000000000000000000000000000000009B +:10660000000000000000000000000000000000008A +:10661000000000000000000000000000000000007A +:10662000000000000000000000000000000000006A +:10663000000000000000000000000000000000005A +:10664000000000000000000000000000000000004A +:10665000000000000000000000000000000000003A +:10666000000000000000000000000000000000002A +:10667000000000000000000000000000000000001A +:10668000000000000000000000000000000000000A +:1066900000000000000000000000000000000000FA +:1066A0002000820020000000000000000000000028 +:1066B00000000000000000000000000000000000DA +:1066C00000000000000000000000000000000000CA +:1066D00000000000000000000000000000000000BA +:1066E00000000000000000000000000000000000AA +:1066F000000000000000000000000000000000009A +:106700000000000000000000000000000000000089 +:106710000000000000000000000000000000000079 +:106720000000000000000000000000000000000069 +:106730000000000000000000000000000000000059 +:106740000000000000000000000000000000000049 +:106750000000000000000000000000000000000039 +:106760000000000000000000000000000000000029 +:106770000000000000000000000000000000000019 +:106780000000000000000000000000000000000009 +:1067900000000000000000000000000000000000F9 +:1067A00000000000000000000000000000000000E9 +:1067B00000000000000000000000000000000000D9 +:1067C00000000000000000000000000000000000C9 +:1067D00000000000000000000000000000000000B9 +:1067E00000000000000000000000000000000000A9 +:1067F0000000000000000000000000000000000099 +:106800000000000000000000000000000000000088 +:106810000000000000000000000000000000000078 +:106820000000000000000004008000800000000064 +:106830000000000000000000000000000000000058 +:106840000000000000000000000000000000000048 +:106850000000000000000000000000000000000038 +:106860000000000000000000000000000000000028 +:106870000000000000000000000000000000000018 +:106880000000000000000000000000000000000008 +:1068900000000000000000000000000000000000F8 +:1068A00000000000000000000001000200400000A5 +:1068B00000000000000000000000000000000000D8 +:1068C00000000000000000000000000000000000C8 +:1068D00000000000000000000000000000000000B8 +:1068E00000000000000000000000000000000000A8 +:1068F0000000000000000000000000000000000098 +:106900000000000000000000000000000000000087 +:106910000000000000000000000000000000000077 +:106920000000000000000000000000000000000067 +:106930000000000000000000000000000000000057 +:106940000000000000000000000000000000000047 +:106950000000000000000000000000000000000037 +:106960000000000000000000000000000000000027 +:106970000000000000000000000000000000000017 +:106980000000000000000000000000000000000007 +:1069900000000000000000000000000000000000F7 +:1069A00000000000000000000000000000000000E7 +:1069B00000000000000000000000000000000000D7 +:1069C00000000000000000000000000000000000C7 +:1069D00000000000000000000000000000000000B7 +:1069E00000000000000000000000000000000000A7 +:1069F0000000000000000000000000000000000097 +:106A00000000000000000000000000000000000086 +:106A10000000000000000000000000000000000076 +:106A20000000000000000000000000000000000066 +:106A30000000000000000000000000000000000056 +:106A40000000000000000000000000000000000046 +:106A50000000000000000000000000000000000036 +:106A60000000000000000000000000000000000026 +:106A70000000000000000000000000000000000016 +:106A80000000000000000000000000000000000006 +:106A900000000000000000000000000000000000F6 +:106AA00000000000000000000000000000000000E6 +:106AB00000000000000000000000000000000000D6 +:106AC00000000000000000000000000000000000C6 +:106AD00000000000000000000000000000000000B6 +:106AE00000000000000000000000000000000000A6 +:106AF0000000000000000000000000000000000096 +:106B00000000000000000000000000000000000085 +:106B10000000000000000000000000000000000075 +:106B20000000000000000000000000000000000065 +:106B3000000000000000007C007C0000000000005D +:106B40000000000000000000000000000000000045 +:106B50000000000000000000000000000000000035 +:106B60000000000000000000000000000000000025 +:106B70000000000000000000000000000000000015 +:106B80000000000000000000000000000000000005 +:106B900000000000000000000000000000000000F5 +:106BA00000000000000000000000000000000000E5 +:106BB0000000000000000000004000400000000055 +:106BC00000000000000000000000000000000000C5 +:106BD00000000000000000000000000000000000B5 +:106BE00000000000000000000000000000000000A5 +:106BF0000000000000000000000000000000000095 +:106C00000000000000000000000000000000000084 +:106C10000000000000000000000000000000000074 +:106C20000000000000000000000000000000000064 +:106C30000000000000000000000000000000000054 +:106C40000000000000000000000000000000000044 +:106C50000000000000000000000000000000000034 +:106C60000000000000000000000000000000000024 +:106C70000000000000000000000000000000000014 +:106C80000000000000000000000000000000000004 +:106C900000000000000000000000000000000000F4 +:106CA00000000000000000000000000000000000E4 +:106CB00000000000000000000000000000000000D4 +:106CC00000000000000000000000000000000000C4 +:106CD00000000000000000000000000000000000B4 +:106CE00000000000000000000000000000000000A4 +:106CF0000000000000000000000000000000000094 +:106D00000000000000000000000000000000000083 +:106D10000000000000000000000000000000000073 +:106D20000000000000000000000000000000000063 +:106D30000000000000000000000000000000000053 +:106D40000000000000000000000000000000000043 +:106D50000000000000000000000000000000000033 +:106D60000000000000000000000000000000000023 +:106D70000000000000000000000000000000000013 +:106D80000000000000000000000000000000000003 +:106D900000000000000000000000000000000000F3 +:106DA00000000000000000000000000000000000E3 +:106DB00000000000000000000000000000000000D3 +:106DC00000000000000000000000000000000000C3 +:106DD00000000000000000000000000000000000B3 +:106DE00000000000000000000000000000000000A3 +:106DF0000000000000000000000000000000000093 +:106E00000000000000000000000000000000000082 +:106E10000000000000000000000000000000000072 +:106E20000000000000000000000000000000000062 +:106E30000000000000000000000000000000000052 +:106E40000000000000000000000000000000000042 +:106E50000000000000000000000000000000000032 +:106E60000000000000000000000000000000000022 +:106E70000000000000000000000000000000000012 +:106E80000000000000000000000000000000000002 +:106E9000000082088240840420040380000420044F +:106EA000000082000004000800000000A0000404AC +:106EB0000000000020040004040040000011000451 +:106EC00000020080008000020000000000000000BE +:106ED00000030000000000040000000000000000AB +:106EE0000004000000200000002000040000000456 +:106EF000000400000000000000000000000000008E +:106F0000000400000000000000000000000200007B +:106F10000000000200000000000840A008200090CF +:106F2000400200000000000000020082008200A079 +:106F3000000000000000000000400000000004000D +:106F4000000000000020001000050000000000000C +:106F500000000000000000900000000000000000A1 +:106F6000000000000000000300000003000100001A +:106F7000000100010002000000000000000000020B +:106F800000000000000200000000000000000000FF +:106F90000000000000000000000004410410082070 +:106FA0000880000000004000000088000000880009 +:106FB00000000000000000000000001000000000C1 +:106FC000000004000800010001000580040000002A +:106FD00000000000000000000400000000000000AD +:106FE0000000000004000400000000009000010800 +:106FF00011802080208000000000000000000000C0 +:107000000000000000000000000000000000000080 +:107010000000000000000404414002840090804110 +:107020008441802004100400A0002010000400907F +:10703000419040044008000802040402008400005B +:10704000000040004008800004840210041000008A +:1070500004000008200800000002000000000000FA +:1070600004000000000000020000000040000000DA +:107070002001A00480088008000000020000000039 +:1070800000000000000200000000000000000000FE +:10709000000000000000000000089008C0409000C0 +:1070A0008820044008000888C00084000008000010 +:1070B000000000000000040090000000000000003C +:1070C00090000000100040000000C080000004207C +:1070D000900000000000004000000021880820020D +:1070E00010004000000000088411000300000000B0 +:1070F0000000000000000000000000000000000090 +:10710000000000000000000000000000000000007F +:107110000000000000000000000008000000000067 +:10712000000000019000000080201000000000001E +:107130000000000000000008000000000000000047 +:107140000000080003000300000000000010000021 +:10715000808300000000000000000000000000002C +:1071600000000000000000000040000000000000DF +:107170000088000000000000000000000000000087 +:1071800000000000000000000000000000000000FF +:1071900000000000000000000000000000000800E7 +:1071A0000000840000400441044008000000820008 +:1071B000000000000800080082000000000000201D +:1071C0000040080000040000000000000000000073 +:1071D00000098200000000000420000000000004FC +:1071E0000000080082004040040082000000C1004E +:1071F0000009000200020000000000000000000082 +:10720000000000000000000000000000000000007E +:10721000000000000000000000000000000002006C +:10722000210004004100040180408400090408009A +:1072300002080000100000000300032011040000F9 +:1072400000000000040000004004030040C00000F3 +:107250000800008800100000100800001000000066 +:1072600000880000210000000888000000000000E5 +:1072700008000000400000000000100010000000A6 +:1072800000000000000000000000000000000000FE +:1072900000000000000000000000000000000000EE +:1072A00000000000000808000000040001000000C9 +:1072B00000001000000000000000000000000000BE +:1072C0000000820000000000C00008001000000064 +:1072D000000000000000000000000040004000002E +:1072E0000000000000000000000000000800000096 +:1072F0000000C0000000A00082000000C0000000EC +:10730000002000000000000000000000000000005D +:10731000000000000000000000000000000000006D +:10732000000000000000000008000000050004004C +:10733000000000000000000000000000000000004D +:1073400000000000000000000000004000000000FD +:1073500000000000000400000220000000000800FF +:10736000000000000000000000000000000000001D +:10737000030000000000000000000000000000000A +:1073800000000000000000000000000000000000FD +:1073900000000000000000000000000000000000ED +:1073A00000000000000900000800000000000000CC +:1073B00004800000004000410000000000000000C8 +:1073C000000000000000000000000000820000003B +:1073D00000000400000000000000000000000000A9 +:1073E00084210021000000000000000000000000D7 +:1073F000080004000000C000040083000400000036 +:10740000000000000000000000000000000000007C +:10741000000000000000000000000000000000006C +:1074200000000000000020402004000000002000B8 +:107430000000832002000002200400042088410094 +:107440000200004008400000080000400200000068 +:10745000000000000800008800000000210000007B +:107460000000050000000000000000000000030014 +:1074700000000000000005004100000008000000BE +:1074800000000000000000000000000000000000FC +:1074900000000000000000000000000000000000EC +:1074A00000000000000000000000000000000000DC +:1074B00088C0904000020882000000000000000028 +:1074C00000000000000000000000000000000000BC +:1074D00000000000000000002088010202200210CD +:1074E000000000000000000000000000000000009C +:1074F00000000000000000000000010200100088F1 +:107500009082000101000101000000000000000065 +:10751000000000000000000000000000000000006B +:10752000000000000000000000000000000000005B +:1075300000000080000000800080000000000000CB +:10754000000000000000000000000000000000003B +:10755000000000000000000000000000418000006A +:10756000808000000000000000000000000000001B +:10757000000000000000000000000000108000007B +:107580000080800000411005022000030000000080 +:1075900000000000000000000000000000000000EB +:1075A00000000000000000000000000000000000DB +:1075B0000000000000000004000000000080000047 +:1075C00000050010000000000000000000000000A6 +:1075D00000000000000000000000000082008203A4 +:1075E00008002080000000000000000000000000F3 +:1075F000000000000000000000000000000080000B +:1076000080110080000005004000200041050000BE +:10761000000000000000000000000000000000006A +:10762000000000000000000000000000000000005A +:10763000000000000000840084C0A0C0C0400040E2 +:107640000000000000010000000000000000000039 +:107650000000000000000000000000000000020028 +:1076600002018800009000000000000000000000FF +:10767000000000000000000000000000000000000A +:107680008800040182400000004000000100010069 +:1076900000000000000000000000000000000000EA +:1076A00000000000000000000000000000000000DA +:1076B00000000000000000002110008240108488BB +:1076C00000000000000000000000000000000000BA +:1076D00000000000000000000000000000000000AA +:1076E0000420A0859083001100000000000000002D +:1076F000000000000000000000000000000000008A +:10770000000040900088400400C00001000100001B +:107710000001000000000000000000000000000068 +:107720000000000000000000000000000000000059 +:107730000000000000000000000010000080800039 +:107740008380000000000000000000000000000036 +:107750000000000000000000000000000000000029 +:10776000000080C180100021009000000000000097 +:107770000000000000000000000000000000000009 +:107780000000000080000000008000800002030272 +:107790004003004100000000000000000000000065 +:1077A00000000000000000000000000000000000D9 +:1077B0000000000000000000000000008020808821 +:1077C000009180000420210002000200000000005F +:1077D00000000000000000000000000000000000A9 +:1077E0000000000080800002800080200000000077 +:1077F0000000000000000000000000000000000089 +:1078000000000000000080000008000000004100AF +:107810002000050040030000000000000000000000 +:107820000000000000000000000000000000000058 +:107830000000000000000000000000000000080040 +:1078400008A08205A0000101000001000100000065 +:107850000000000000000000000000000000000028 +:10786000000000000000C0C0022108020800000063 +:107870000000000000000000000000000000000008 +:107880000000000000000000C00000201088400040 +:1078900001A0010000000000000000000000000046 +:1078A00000000000000000000000000000000000D8 +:1078B00000000000000000000000000000000000C8 +:1078C00000000000070000000000000000000000B1 +:1078D00000000000000000000000000000000000A8 +:1078E0000000000000000000000000000700500041 +:1078F0000000000000000000000000000000000088 +:107900000000000000000000000000000000070070 +:107910000000000000E00000000000000000000087 +:107920000000000000000000000000000000000057 +:107930000000000000000000000000000000000047 +:1079400000005C5CFFFFFCFFFCFF0000000000008B +:107950000000000000000000000000000000000027 +:1079600000000000000000000000F3F330F382503C +:1079700082FA00000000000000000000000000008B +:10798000000000000000000000000000B4B4F5F5A5 +:1079900030F3F3F3000000000000000000000000DE +:1079A00000000000000000000000000000000000D7 +:1079B00000000000000000000000000000000000C7 +:1079C000000000005C5C00FFAAA0AAAF000000005D +:1079D00000000000000000000000000000000000A7 +:1079E000000000000000000000000000303030F314 +:1079F000D750D7FA0000000000000000000000008F +:107A00000000000000000000000000000000B4B40E +:107A1000A0A030F3303000000000000000000000A3 +:107A20000000000000000000000000000000000056 +:107A30000000000000000000000000000000000046 +:107A400000000000000000F07D2D0F3CFFAA0000A8 +:107A50000000000000000000000000000000000026 +:107A600000000000000000000000000000003FFFD8 +:107A700030FF3F3A3F3A00000000000000000000E5 +:107A800000000000000000000000000000000000F6 +:107A9000FFFF033F05350535000000000000000032 +:107AA00000000000000000000000000000000000D6 +:107AB00000000000000000000000000000000000C6 +:107AC00000000000000000000FFF78280F3C00AA13 +:107AD00000000000000000000000000000000000A6 +:107AE0000000000000000000000000000000000096 +:107AF0003F0030003530353000000000000000004D +:107B00000000000000000000000000000000000075 +:107B100000000000033FF535F535000000000000CF +:107B20000000000000000000000000000000000055 +:107B30000000000000000000000000000000000045 +:107B40000000000000000000000005005A080510B9 +:107B500000A000610006000D000000000000000011 +:107B60000000000000000000000000000000000015 +:107B70000000A061000E000D0000000000000000E9 +:107B800000000000000000000000000000000000F5 +:107B900000000000A000000800900000006100014B +:107BA00000010000000000000000000000000000D4 +:107BB00000000000000000000000000000000000C5 +:107BC00000000000000000000000000000000000B5 +:107BD0000000000000100000000000000000000095 +:107BE0000000000000000000000000000000000095 +:107BF000000000000000000000F0A0A00000000055 +:107C00000000000000000000000000000000000074 +:107C10000000000000000000000000000000CF4D48 +:107C20004D4DFFF03CF0000000000000000000009F +:107C30000000000000000000000000000000000044 +:107C40000000000000000000000000000000000034 +:107C50000000000000000000000000000000000024 +:107C60000000000000000000000000000000000014 +:107C70000000000000000000000000F030300000B4 +:107C800000000000000000000000000000000000F4 +:107C900000000000000000000000000000000000E4 +:107CA0000C4D4D4D00F03CF00000000000000000C5 +:107CB00000000000000000000000000000000000C4 +:107CC00000000000000000000000000000000000B4 +:107CD00000000000000000000000000000000000A4 +:107CE0000000000000000000000000000000000094 +:107CF0000000000000000000000000003C3C3C3C94 +:107D00000000000000000000000000000000000073 +:107D10000000000000000000000000000000000063 +:107D20000000D7D4D7D7BEBEBEFC000000000000C4 +:107D30000000000000000000000000000000000043 +:107D40000000000000000000000000000000000033 +:107D50000000000000000000000000000000000023 +:107D60000000000000000000000000000000000013 +:107D70000000000000000000000000000000F57D91 +:107D80005555000000000000000000000000000049 +:107D900000000000000000000000000000000000E3 +:107DA0000000000017141414828282C0000000003A +:107DB00000000000000000000000000000000000C3 +:107DC0000000000000000000000000004000A000D3 +:107DD000020010080400100004804110020004009A +:107DE0000000000421000000C00302022000C000C7 +:107DF00000040400200000002002044000000009EC +:107E00000000C0002000000000042000000320004B +:107E100021200020000000000000000020000000E1 +:107E200000800000040000000000000000000000CE +:107E30000000000000000000000000000000000042 +:107E400000000000000400000000000000008000AE +:107E500040900000000000A00000000240018000EF +:107E6000000000900000020000A0200000050000BB +:107E700000840000000000020000000000A10000DB +:107E800000000004000400000000000041000000A9 +:107E900000000401000100000000000020000000BC +:107EA00000000020000000000000000000000000B2 +:107EB00000000000000000000000000000000002C0 +:107EC00000000000000000000000000000000000B2 +:107ED00000000000400000800208000200100002C4 +:107EE000001040002000840000400400000000005A +:107EF00040104002080000000000A0400000000008 +:107F00000000000500000280400000004000080062 +:107F10000000018200004000000040000000888254 +:107F20000000040004000000020004000000000043 +:107F300000000000000000000080000000000000C1 +:107F40000000000000000000000000000000000031 +:107F5000000000840908C01004020011000905C0D7 +:107F6000048300008040000400000482100409081B +:107F70000400C004894100000082000400080008D9 +:107F8000000009840000040003048004004080080D +:107F90008000000004210000800000008000000438 +:107FA00000110400000080084100410200000000B0 +:107FB000000400000000008200000010000000002B +:107FC00000000000000000080000000000000000A9 +:107FD000000000000008400020A1402100084100EE +:107FE0000000000000050000004100020000000049 +:107FF00000110000000008808402080000008800D2 +:1080000084000000000000080100200000000405BA +:10801000000000050000001100080002010000003F +:108020000000000400110000000500030010000320 +:1080300000000080000000000000000000000000C0 +:108040000000000000000000000000000000000030 +:108050000000000000000300030000028000000098 +:10806000C000000000000020040000040000000028 +:1080700000000000000000820002000080000500F7 +:1080800000000500210008000000200000000000A2 +:1080900000000000000000000000000000000400DC +:1080A000000000200888000000000000000000011F +:1080B0000088000000200000000000000000000018 +:1080C00000000000000000000000000000000000B0 +:1080D000000000000000000002000800C000910045 +:1080E00082000400C002821108098200020408080C +:1080F0008800C00000090800820000000800C000DD +:10810000A000080090098200200001408402400085 +:10811000C040A0008200A0000000820040000009D2 +:108120000400020000008200A00082000000A00005 +:10813000C0800000000000000800000000000000F7 +:10814000000000000000000000000000000000002F +:1081500000000000000000000000000000C000401F +:10816000400040000500210903004000000000001D +:1081700000004088100020840090110000C003001F +:1081800008900220000004880800800020004000C1 +:1081900000000020410000A00000000003000400D7 +:1081A0000310000000000400058800002182034045 +:1081B0000000030208000420002021000800000045 +:1081C000002000000000000000000300000000008C +:1081D0000000000000000000000000000000080097 +:1081E0004000088088000800820084008400840029 +:1081F00008001000040082000000000000040800D5 +:10820000000082000000100000208820A08020894B +:108210008280200082410000A000000000000420B5 +:10822000C0200420820008210004A000C00000003B +:10823000102000800000000000400000000400004A +:108240000800000000020000000000000000000024 +:10825000000000000000000000000000000000001E +:108260000004000000024000008800000800000038 +:1082700000004000000000080000000000000008AE +:1082800000000000000000000000000000000304E7 +:1082900091041104800000000000000000000000B4 +:1082A0008201000100010000000000000000000049 +:1082B0000000000100200502030000010000000092 +:1082C00000000000000000010000000000000000AD +:1082D000000000000000000000000000000000009E +:1082E0009020880004000000000020002000020010 +:1082F00000080800002100410008040208000000F6 +:108300001000040000401000C00000000020080021 +:1083100000004041400084008400820008000421E5 +:1083200000000041C0210400080810000020900354 +:108330008200000010000000080000000020000281 +:10834000000000000020000000000000000000000D +:10835000000000000000000000000000000000001D +:108360000000000000000002000003000000000008 +:108370000000411000000000200000002008044020 +:10838000200000000000210000004100000000C0AB +:1083900000020300089010002108000000004100C6 +:1083A0000000000020004120858200000000000045 +:1083B000000000400000000000001100000000016B +:1083C0000000000003000000000003004100000066 +:1083D000000008000000000000000800000000008D +:1083E000000000000001000100010000202000202A +:1083F00008049020080101014001000102009101E0 +:1084000084000201A19000020089200510020208E8 +:108410000004820401000101840000010001000148 +:1084200088000001000004058283080382054000E3 +:10843000A1012001C000C082900802000400400891 +:10844000900000908200000000004000000000004A +:10845000000000000000000000000000000000001C +:108460000000000000000004080300400020200875 +:10847000084080A0001000040308002000218000B4 +:10848000211080118010A0000021002000028080B7 +:1084900000800000800010031002A00200100010F5 +:1084A0001021001100100000919021218004809083 +:1084B0008040901000038020800090808000800029 +:1084C000800080000000800000000000000000002C +:1084D000000000000000000000000000000000009C +:1084E000000000000000000020000000000020004C +:1084F0000380A00582A1C1214080090004029002EE +:1085000000004100201010030080800200210000C4 +:10851000000000C000800080210003211180400283 +:10852000100084000500909100009000110210805E +:10853000A111888003002005A090000000000080A9 +:10854000800000000005008880000000000000009E +:10855000000000000000000000000000000000001B +:10856000000000000000000000000100000000000A +:1085700000404008410089410901204020002101BC +:108580000309000000000100014140024001889100 +:1085900008000000008200A0001091020300089073 +:1085A000009109900200210003A0000005888301CA +:1085B0008504030003029100A00010A12000200800 +:1085C00000A082009000200800A18200200082000C +:1085D0008200000000000000000000000000000019 +:1085E000000000000000000000000000000100008A +:1085F00001010001009000100103824100900188F8 +:10860000A100000800200020009100A110A000405F +:108610002010000200400002A01000100000010025 +:1086200000010101000100000000000000004040C6 +:108630000108050983030088009000200121001033 +:1086400000080001088800100008004040040000F5 +:108650000000000000010000000000000000000019 +:1086600000000000000000000000000000000010FA +:108670001008052104200003030010218020004180 +:108680000385C005400500400521082100088080C1 +:108690004080000000800080008000000000052075 +:1086A00010204120112100102103080500020000C4 +:1086B00080830882901010100040030520082110CC +:1086C00000A0002000100300000000000000008057 +:1086D0000020002100200010000000000000000029 +:1086E000000000000000000000000000000000008A +:1086F000008000000000000304A110844100084134 +:10870000210321C004004003402103001000100297 +:108710002100A08010800300000080000000800085 +:10872000202003801000A02008090900050008107F +:1087300000000388A1C010800805100320000280FB +:1087400010400003802080800000000280A0000014 +:108750000000000800000000000000000000000011 +:108760000000000000000000000000000000000009 +:10877000000000C0000000000000210583A0880266 +:10878000830101C0000300200101019100000100EC +:108790000101090004A082084000880004000400D0 +:1087A0002000002008820908080000A00082004084 +:1087B0000001000004C00410210411000140002049 +:1087C00001400100A00082900840100088012008AC +:1087D0008220000000010020009000000000000046 +:1087E0000000000000000000000000000000000089 +:1087F00000000000000000000000840000000000F5 +:108800000000000A0000000000000000000000005E +:108810000000000000000000000000000000000058 +:1088200000000000000000E0000000000000000068 +:1088300000000000000000000000070084000000AD +:10884000000000000021000000000700820000007E +:108850000000070000000000000000000000000011 +:108860000000000000000000000000000000000008 +:1088700000000000000000000000000000000606EC +:1088800081E72400F699000000009898999900006B +:108890000000F690F6906C006C00F090F300C3427C +:1088A000C3C22F2FFF0F00000000000000000000D7 +:1088B0000000000000000000FFFFFE7EFFFFFEFC46 +:1088C000000000003C36FFFF66CF66C0F3F3F0F017 +:1088D000666666667242FFFF00000000000000004E +:1088E0000000000000000000000000000000000088 +:1088F0000000000000000000000000000000000078 +:1089000000000000240090990000000098989999B8 +:1089100000000000BDBD2424F0000000FF9FF30F05 +:10892000C300C3C02020F000003600360000000065 +:1089300000000000000000000000FE7EFE7EFFFF41 +:108940007E3C000000003C36000066CF66C06666D4 +:1089500066660F00FFF07242000000000000000099 +:108960000000000000000000000000000000000007 +:1089700000000000000000000000000000000000F7 +:1089800000000000000000000000000000000000E7 +:1089900000000000000000000000000000000000D7 +:1089A00000000000000000000000000000000000C7 +:1089B00000000000000000000000000000000000B7 +:1089C00000000000000000000000000000000000A7 +:1089D0000000000000000000000000000000000097 +:1089E0000000000000000000000000000000000087 +:1089F0000000000000000000000000000000000077 +:108A000000000000090F0F0389008900000000002A +:108A1000BC8CB08000000000000000000C3CCFFFC8 +:108A2000FCF4F0F40CFC000000000000000000006A +:108A300003000300000000000F3C00000000FFFFE7 +:108A4000FFFFFFFFFFFF0000000020BF60FF006688 +:108A500099FF8080818166660F0F00000000000092 +:108A60000000008100810000000000000000000004 +:108A700000000000000000000000000000000000F6 +:108A8000000000000000090F0F03810089000000B2 +:108A90000000BF8FB3830000000000000000003022 +:108AA000C3F3000000000CFC000000000000000008 +:108AB00000004200420000000000663C0000000090 +:108AC0000F3F6F7F666F7E7F00000000009F40DFDA +:108AD000006699FF0000010166660F0F404070704C +:108AE0000000000001010101000000000000000082 +:108AF0000000000000000000000000000000000076 +:108B000000610006000D000080610006000D0000FD +:108B100000610006001D000100610006001D00004C +:108B200000610006000D00000000300000000000A1 +:108B3000006100010001000000610006000D00005E +:108B400000000061000E000D000000610006000D35 +:108B5000000000610E0E000D000000000E08000075 +:108B6000000100610006000D000000000000000090 +:108B700000000000000000000000000000000000F5 +:108B80000000000000000CF303FFF7F00000827DFE +:108B900041FF0000000000000000F0FFF0FF3E7FFA +:108BA00016573D7643190000000000000000000049 +:108BB0000000FFFF7F5FBEFEFFFFFFFEBFBEF0F0C5 +:108BC000F0F0000057575754FFFFE8FF0F0FBE0F9C +:108BD0003C3C3C3C00000000C200C2000000000021 +:108BE00000000000000000008200C0000000000043 +:108BF0000000000000000000000000000000000075 +:108C00000000000000000000300CFC33F4F0000015 +:108C10002882BE6900800000080000000303F3F30F +:108C20002A6B02433D76431900000000000000005B +:108C3000000000007F5F7F5FAAFAFFFF4140010054 +:108C4000C0E8FCE80000545457540000E8000F0F3F +:108C5000140F141EB4BE0000000002000200000049 +:108C6000000000000000000000008200C0000000C2 +:108C700000000000000000000000000000000000F4 +:108C8000000000000000FDADF8A8EBEBD7D75500C1 +:108C90005500C33C3CC300000000000000007D3FC5 +:108CA0007D3F5555FF00690F690F0000000000006F +:108CB000000000000000FF7FFF3FFCFFFEFF555556 +:108CC0001717A2F7A0F500000F0FFF002828EBEB05 +:108CD00017171717F0F0BEFF00000000000000009B +:108CE0000000000000000000000000000000000084 +:108CF0000000000000000000000000000000000074 +:108D000000000000000000005D0D58082828141421 +:108D1000400045005555F0F0000000200100000023 +:108D2000413F413F0F0FFFFF690F690F0000000037 +:108D300000000000000000007F7F3F3FFCFCFEFEC3 +:108D4000FF00FF002075A0F500004D4DFF0030280A +:108D5000F3EB173F1703F0F0820000000000000063 +:108D60000000000000000000000000000000000003 +:108D700000000000000000000000000000000000F3 +:108D80000000000000000000000000804180022080 +:108D900000058884888002202008044000004020CC +:108DA000400221020485880840840400000020104D +:108DB00000084080000000022002200000902010E7 +:108DC00021832003200084002004000320800080F1 +:108DD000048500A0000000100010000400800000C6 +:108DE000002020002080000000030004000000009C +:108DF0000000000000000000000000000000000073 +:108E000000000000000000000000000240042020DC +:108E10000001090000210004030109000001000015 +:108E20000000000940A10202410102100000000000 +:108E30000085000000022100000105010000000380 +:108E400000010210000000840000008400000010F7 +:108E500000102020001100880901080500000020F2 +:108E600000000005000000200000000000000000DD +:108E700000000000000000020000000000000002EE +:108E800000000000000000000002000000000200DE +:108E90000000008001040000C00000A084049000D5 +:108EA00002000080880000000480008001800080B3 +:108EB0000090A010028400000000000001000000EB +:108EC0000000000000000010000000020000000090 +:108ED0000080000000000000000090000000008002 +:108EE000010004C0048004A0008000000000000015 +:108EF000000000000040000004000400000000002A +:108F00000000000000000000000000000000000061 +:108F1000000000080004400541002082000504858F +:108F200005040004001002000084801002101002EA +:108F3000001000410085C04100000008000010083A +:108F400000000908040805040001000000050008ED +:108F500000000002000000000004201000080000D3 +:108F60000010020089218040804104200008000890 +:108F700000840004000000010500000000840000DF +:108F800000000000000000000004000000080004D1 +:108F9000000400200003000801080421002008212B +:108FA000410000210000000800C000030200401141 +:108FB0000008000800000000000000080002000097 +:108FC00010210000004040210021000000080000A6 +:108FD00000200000000800000840000240000021BE +:108FE00000800021000000031005000000000020A8 +:108FF0000040002000080000000000000000000009 +:1090000000000040000000000000000000000040E0 +:10901000000000000889410004002000C100410355 +:109020004100200041000308108400200000880057 +:1090300082000309410400A04140000005004001F6 +:109040000404A18420000000418421A0000000004D +:1090500008884100000000900000C1000500850064 +:109060004100034040C00000410021004100410494 +:109070000001410000090090000000000000000015 +:1090800000080000000000000000000000000000D8 +:1090900000000000000008A10480A0418820008496 +:1090A00004000804A08008000405A00208020000D3 +:1090B000A1020000082082000809C04100800802C7 +:1090C0000402002000000000002082020000C00016 +:1090D00040000804000000000800040003400540B0 +:1090E0008400402040000400002000000041840073 +:1090F000C18000000000000000000002000000002D +:10910000000000000000000000000000000000005F +:1091100000000000000000000404880400000000BB +:109120004104C10008840020000009000000A110D3 +:109130000000040100000401000000000002002003 +:1091400000000001000011000000040008010208F6 +:10915000000000000000000000008000000084000B +:109160008400090000000000000008010000110058 +:1091700000000402000000000300080000000800D6 +:1091800000000002000005000000000000000000D8 +:1091900000000000000000000000000382058220A3 +:1091A000042000032000820401C0400000000000F1 +:1091B00000401000A0008440880000000000000073 +:1091C00000080000080008004000202108000000FE +:1091D000400000028200A010840000000000C000D7 +:1091E000C000840584000821C011A0854021C00072 +:1091F0008405C0200020C0000804402000000000BA +:10920000000400000000000000000000000000005A +:10921000000000000000000000000000000000004E +:109220000001A101000288004121040400000000A7 +:1092300008C00300219003000800000000000300A4 +:1092400000A020A0020000A005000000200080086F +:1092500008A04000000800000501059000000990EA +:10926000090041C0050005008084020000408082A2 +:10927000410000001101000140080008400000000A +:109280000004410000000000000000000000000099 +:1092900000000000000000000000000000000008C6 +:1092A000000010084100840020080820900082007F +:1092B00008000008000000009040000888004040BE +:1092C000A020402010210000000000000480840045 +:1092D000000020000040000090000408040000008E +:1092E000020040000000040088000803820002031E +:1092F0000200000208044008820000200020400014 +:10930000000000000020000000000000000000003D +:109310000000000000000800000000000000000045 +:10932000000000000000040002200000080100000E +:109330000000000004400088000000000800000059 +:1093400000000000080000002000000000000008ED +:1093500000000040000000010200000000000000CA +:10936000000000000000000000000000800003007A +:109370008800800000000000800021000801080132 +:10938000080000020000008800000000000011003A +:1093900000880000000000880002080000000000B3 +:1093A000210000000100910000000000000000000A +:1093B00000004000010040000400A08991088221C3 +:1093C000208900C000100088200801010100400130 +:1093D000000141C02001040382A1104000082020A8 +:1093E00008020000A084A0830088000002C00010D2 +:1093F0000002401040C0000490A0900483820082CC +:109400000004032100020002000200A0000000008E +:10941000000000000000000000000000000000004C +:10942000000000000000410090000000000000006B +:1094300005000000050021000000000000418384B9 +:10944000801000A1008000004000000004400340A4 +:1094500080020021C0C040030002002100801100F2 +:10946000000000000000804180900083002085C043 +:1094700000110011800980A0090300090083020384 +:109480000003008391110080008000800000000034 +:1094900000000000000000000000000000000000CC +:1094A0000000000000000008008000080000000824 +:1094B0000000000900004000830088008211820043 +:1094C0002100080040890000800400000000100016 +:1094D000210005000090908090109104A0031000DE +:1094E0000311200220800000800000118003809181 +:1094F00000008003808080008000800500048000E0 +:109500000000004080800000000000050080008016 +:10951000000000000000000000000000000000004B +:1095200000000000000000000001000400010088AD +:10953000000100080000008820880800A1009101B7 +:1095400011900100030091889000020100849000B6 +:109550000102010000000088A102020140A104A153 +:1095600001000100002100A0000002A00000888985 +:10957000049084002000080204000400404040A140 +:10958000C00088009000404082000000000100847C +:1095900000040000000000000000000000000000C7 +:1095A00000000000000000000000000104000200B4 +:1095B000000001002000080001000082000504A155 +:1095C00000C0000800A100039005882000A10083CE +:1095D0000304000000010100000100A00189201126 +:1095E000008904110021040510000000024000045D +:1095F000410410A00404000400008902C04000845B +:1096000005A084C0C0900082000404900400000003 +:10961000000040000000000000000000000000000A +:109620000000000000000000000000001005804065 +:1096300000401011050080008000410000400082C1 +:10964000802105850080058841A00040000000823F +:10965000001009C00000050310054040000403206D +:109660000221118280080083008210200000808087 +:1096700002804080800000802180090009808003F2 +:1096800000000203009180000000080080008000BC +:1096900000000000000000000000000000000000CA +:1096A00000000000000000000000000000000000BA +:1096B0000020000000000008000800000000040076 +:1096C00003412000020041201040088002400000B9 +:1096D00000C0808080004190111041000340218231 +:1096E00021800000C0028041800200008003000051 +:1096F00090208321108040000004000000800000C2 +:109700008040804100000000000000408080800018 +:1097100080008021800000000000000000000000A8 +:109720000000000000000000000000000000000039 +:1097300000000000000000880000000000000000A1 +:10974000002001C00100010001010020010800010A +:10975000040020020284A0000104000000000101B6 +:10976000414190A088C0880040210200200088016B +:109770000000C101084089041100820088000084B3 +:109780000800C00020A08440200020008282040441 +:1097900010000400020182004000000000000000F0 +:1097A00000000000000000000000000000000000B9 +:1097B0000000000000E007004200000000E0070099 +:1097C00000820041000007000000000000000700C8 +:1097D0000000000000E007000000000000000000A2 +:1097E0000000000000000000000000000000000079 +:1097F0004100000000000000070000000000000021 +:1098000000000000000000000700600000000000F1 +:1098100007004200000000000000000000000000FF +:109820000000000000000000000000000000000038 +:109830000000000000000000000000000000000028 +:109840000000000000000000001400000000000004 +:109850004B0A000014141414FF3C0F3C00000000DD +:10986000000000003C3C3C3C3C3C38383C053CFFA4 +:1098700055C355C30000C3FFB2B200B2FFB20041EE +:1098800000418E8E0C0C287D787DFFF07DF0FCFF72 +:10989000FEFFFFFFFFFFFCE8E8E80000000000001B +:1098A00000000000000000000000000000000000B8 +:1098B00000000000000000000000000000000000A8 +:1098C0000000000000000000000000000010000088 +:1098D00000005F1E000000555050003C0F3C00008F +:1098E0000000000000001010103C3C3C00383C0020 +:1098F0003CFA550F550F0000003CB2B200B2FFB267 +:1099000000004141CFCF4D4D287D282D00F028F09B +:10991000FCFCFEFE28F8FFFFC0E8E8E800000000BD +:109920000000000000000000000000000000000037 +:109930000000000000000000000000000000000027 +:10994000000000000000000000000000C1C3C1C012 +:10995000FD0DF808BEBEFFAA41EBAFAFFEFE0E0E36 +:1099600000000000000000000C0C303080C000003F +:10997000FC0C5C5C00000000000055550F0FBE148D +:10998000BE143C3C0F0F030303F3BFB0FFF0BEB4A3 +:10999000BEBEFF7FFF5FFFFFFFFF3C3C3C3C000083 +:1099A00000000000000000000000000000000000B7 +:1099B00000000000000000000000000000000000A7 +:1099C0000000000000000000000000000000C1C313 +:1099D000C1C0FD0DF8081414550041EB0505F4F461 +:1099E000040400000000000000000C0C30300000F7 +:1099F00000003C3C3C3C0000000000005555FF00CE +:109A0000FFFF0000FF005555F303F3F31F100F0095 +:109A10001E1414147F7F5F5F7F7D3F3C353F3530E0 +:109A20000000000000000000000000000000000036 +:109A300000000000000000000000000005610A0FA7 +:109A4000050D00A005610A0F050D00A00061003E94 +:109A5000009D01000061000E000D00010061500F2B +:109A60000009000100610006000D000000615006C1 +:109A7000000D000000614006000D00000000A06124 +:109A8000000E000D000080615006000D0000A06176 +:109A9000500E009D00050061000E000D00008000CA +:109AA00000000000000000000000000000000000B6 +:109AB00000000000000000000000000000000000A6 +:109AC00000003AF03AFF0000000000000000CF7DE7 +:109AD0000C7D2B2B03F30F0F3C3C0AFA0FFF000009 +:109AE000000000F00FFF2D2DFFAAAAF0FFF00000EC +:109AF000C3FF4500454500000000FFFFBEFA00001F +:109B0000FFFF2DFF0000000000000000000000002B +:109B100000000000C3008200000000000000000000 +:109B20000000000000000000000000000000000035 +:109B30000000000000000000000000000000000025 +:109B4000000000003A003A0F000000000000000092 +:109B5000CF410C41282800F05555FF000AFA00F0CB +:109B60000000000000F00FFF2D2D5500AAF000F0BE +:109B7000000082BECF00CFCF0000000000001450D4 +:109B8000000000002D0000000000000000000000A8 +:109B90000000000000000000820000000000000043 +:109BA00000000000000000000000000000000000B5 +:109BB00000000000000000000000000000000000A5 +:109BC0000000000000000000000000000000000095 +:109BD00000000000000030F33C3C00FF0514A03CF6 +:109BE000F53C000000000000000014FF14F54B00DD +:109BF0004B000F0F0A002D7D282800000000E8FC14 +:109C0000FCFC0000FFDF3C1C000000002D2D0000CC +:109C10000000000000C30000000000000000F00091 +:109C20000000000000000000000000000000000034 +:109C30000000000000000000000000000000000024 +:109C40000000000000000000000000000000000014 +:109C5000000000000000000030F3000000000500DC +:109C6000A03CF53C0000000000000000145F14550B +:109C70004BFF4BFF0F0F030028782828000000003F +:109C8000E8C0C0C00000C3D3001000000000FF0007 +:109C900000000000000000030003000000000000BE +:109CA0003030000000000000000000000000000054 +:109CB00000000000000000000000000000000000A4 +:109CC000000000000000200004052000100020001B +:109CD000000020002000200040008800400002001A +:109CE00084000400400020000000000384020400FF +:109CF000004120002003200220002003A00088044F +:109D00000000840020000002000088008804200475 +:109D100020040000200420050000000000000000D6 +:109D20000000000200000000000000000000000031 +:109D3000000000000004000000000000000000001F +:109D400000000000000000000000000000002000F3 +:109D5000000020040000000040000000000011008E +:109D60000000400000000000000000004100000072 +:109D7000000000000090000000000004000000004F +:109D8000210000000002000000000000410000006F +:109D900000000000000000000000000000000000C3 +:109DA00000000000000000000000000000000000B3 +:109DB00000000000000000000000000000000000A3 +:109DC0000000000000000000000000000000000093 +:109DD0000009000000000000000000410000000039 +:109DE000000000040000000000030000001000005C +:109DF0000003000000000000000000000000000060 +:109E00000000000000000010000000000011000031 +:109E1000000000000000000300000000000000003F +:109E20000000000000000011000000000000000021 +:109E30000000000010001102020800002040004055 +:109E400010000100010001002010050000000000CA +:109E5000008400000510000800C003880000001006 +:109E60000082040840000010020000880000008208 +:109E70000004000000040002008240880000000886 +:109E800000840904008200000000090000000000B6 +:109E900000080400000000080000000000000000AE +:109EA0000008000000000000000000000408000896 +:109EB0000008000800008002C001800100008091BD +:109EC00000058000100010001000800190040000C8 +:109ED0000800840800210200A02000000000880083 +:109EE0000008842040118808000000008400000061 +:109EF00008000000840000000000000000000000D6 +:109F00000000880084000800900000008400000029 +:109F1000402040000003820000000000200040407C +:109F200000081000400000008400A00010000002A3 +:109F300020400000000000000000000000000008B9 +:109F40000000000000000000000000000000000011 +:109F5000031008840000000003084100000000080E +:109F600000900040080003004100000003002100B1 +:109F70001000000810000000090841000540090019 +:109F800000A003200982050400900000008805A0BD +:109F9000000040A000000000009009000000040044 +:109FA00040A021A008000090080000000000000070 +:109FB0000000000000000888000000000000000011 +:109FC0000001000000000000000000000000000090 +:109FD0000000000000004040C000004088008408ED +:109FE0000409A011A00904020011100008090000D2 +:109FF0008200000090000000A0008200000000200D +:10A0000004000020C000C004080020000000080276 +:10A01000000900000000000000000000000000092E +:10A020009000C00008000000000002054040000051 +:10A0300000020021A000080000000800000001103C +:10A0400000200000000800840140001001020020F0 +:10A050000110000203001000008800000000210031 +:10A06000410000004010402040000090000000002F +:10A070000500000000000000000000000590022024 +:10A080001000000000100000000010000004084054 +:10A0900000000200000004000000000000000500B5 +:10A0A00041000000000004001000410000002100F9 +:10A0B00021000000008800000000000004000000F3 +:10A0C0002001210300000001000904010001020138 +:10A0D00000010201000100410000A0000800000092 +:10A0E0000000000000000000080000000000000068 +:10A0F0000000000008000000000008000000000050 +:10A100000000A0008200000000000000000000002D +:10A1100000030000000000000808000084000000A8 +:10A120000000004000001000A00000000800000037 +:10A130000000C000820082000000000000008400D7 +:10A1400008000000C00000008200000000000000C5 +:10A1500000000000000000000084030800C000842C +:10A1600000A000000000000800000000000800003F +:10A170000800030204C00990000003100300080255 +:10A1800000000300000005002100200000880902F3 +:10A190000000000200000508000040000000200848 +:10A1A0002088000200000304000000C00500210018 +:10A1B00000900800000008000800200000000000D7 +:10A1C000000000000000000000000000000000008F +:10A1D0000000000000000000000000050800000072 +:10A1E0000041400840090000000800000000000095 +:10A1F0000800000000000000040000000000C00093 +:10A200000000080000000000000000000000000046 +:10A21000000000000000000000000000000000003E +:10A22000000000000200000040000000400010009C +:10A2300000000000900000009000102000000000CE +:10A2400004008200820000000800080000000000F6 +:10A25000A000C1000000008000000000000000001D +:10A260000000000000000088200020000000110015 +:10A27000000400040040000000044000030000024D +:10A28000000000000000000020001188020004040B +:10A290000900020200004000000040000000000031 +:10A2A000020020200400030000000500050200A0B9 +:10A2B0000000080000000500008800004100400088 +:10A2C0000000040004000000000000000000000086 +:10A2D000000010002000000000100000000000003E +:10A2E000000000000000000000000000000000006E +:10A2F000000000000000000000000000000000005E +:10A30000000000000000000000000000000000004D +:10A31000000000000000000000000000000000003D +:10A32000000000000000000000000000000000002D +:10A33000000000000000000000000000000000001D +:10A34000C000C001000000820100C00001820105C0 +:10A350000100C000004000822100C1000100038212 +:10A3600000000000000000000000000000000000ED +:10A3700000000000000000000000000000000000DD +:10A3800000000000000000000000000000000000CD +:10A3900000000000000000000000000000000000BD +:10A3A00000000000000000000000000000000000AD +:10A3B000000000000000000000000000000000009D +:10A3C0000000C04183400000008002418041418084 +:10A3D000418341058321008000804100C12141412A +:10A3E000C18000000000000000000000000000002C +:10A3F000000000000000000000000000000000005D +:10A40000000000000000000000000000000000004C +:10A41000000000000000000000000000000000003C +:10A42000000000000000000000000000000000002C +:10A43000000000000000000000000000000000001C +:10A44000000000000080C1C100410005808041C1C2 +:10A4500000418341C1C1A103004100C100C180414D +:10A46000000080410000000000000000000000002B +:10A4700000000000000000000000000000000000DC +:10A4800000000000000000000000000000000000CC +:10A4900000000000000000000000000000000000BC +:10A4A00000000000000000000000000000000000AC +:10A4B000000000000000000000000000000000009C +:10A4C000000000000000000240210001000040C028 +:10A4D000002100018301C0C1204100014005C0C12D +:10A4E0002001000004010000000000000000000046 +:10A4F000000000000000000000000000000000005C +:10A50000000000000000000000000000000000004B +:10A51000000000000000000000000000000000003B +:10A52000000000000000000000000000000000002B +:10A53000000000000000000000000000000000001B +:10A54000000000000000000000400000C00000000B +:10A55000009000010583018200C00000C183C0019A +:10A5600000400000C14000A000000000000000000A +:10A5700000000000000000000000000000000000DB +:10A5800000000000000000000000000000000000CB +:10A5900000000000000000000000000000000000BB +:10A5A00000000000000000000000000000000000AB +:10A5B000000000000000000000000000000000009B +:10A5C0000000000000000000000000800041854104 +:10A5D000000000000003C183418000410000C183EE +:10A5E000800300800021C1C10000000000000000C5 +:10A5F000000000000000000000000000000000005B +:10A60000000000000000000000000000000000004A +:10A61000000000000000000000000000000000003A +:10A62000000000000000000000000000000000002A +:10A63000000000000000000000000000000000001A +:10A640000000000000000000000000000441008045 +:10A65000C1084082C02080C1838503C14180804100 +:10A660000341038080C10000C1A000410000000040 +:10A6700000000000000000000000000000000000DA +:10A6800000000000000000000000000000000000CA +:10A6900000000000000000000000000000000000BA +:10A6A00000000000000000000000000000000000AA +:10A6B000000000000000000000000000000000009A +:10A6C0000000000000000000000000000000002169 +:10A6D0000002409001C18521402183C0010500C0D6 +:10A6E0004001830101C040C1A020400400010000DE +:10A6F000000000000000000000000000000000005A +:10A700000000000000000000000000000000000049 +:10A710000000000000000000000000000000000039 +:10A720000000000000000000000000000000000029 +:10A730000000000000000000000000000000000019 +:10A740000000000000000000000000000000000009 +:10A750008112000000004842821200E000004842DE +:10A7600088120000000048428112000000004842A8 +:10A7700000000000000000000000000000000000D9 +:10A7800000000000000000000000000000000000C9 +:10A7900000000000000000000000000000000000B9 +:10A7A00000000000000000000000000000000000A9 +:10A7B0000000000000000000000000000000000099 +:10A7C0000000000000000000000000000000000089 +:10A7D0000000000000000000000000000000000079 +:10A7E0000000000000000000000000000000000069 +:10A7F0000000000000000000000000000000000059 +:10A800000000000000000000000000000000000048 +:10A810000000000000000000000000000000000038 +:10A820000000000000000000000000000000000028 +:10A830000000000000000000000000000000000018 +:10A840000000000000000000000000000000000008 +:10A8500000000000000000000000003000000000C8 +:10A8600000000000000000000000000000000000E8 +:10A8700000000000000000000000000000000000D8 +:10A8800000000000000000000000000000000000C8 +:10A8900000000000000000000000000000000000B8 +:10A8A00000000000000000000000000000000000A8 +:10A8B0000000000000000000000000000000000098 +:10A8C0000000000000000000000000000000000088 +:10A8D0000000000000000000000000000000400038 +:10A8E0000000000000000000000000000000000068 +:10A8F000000000000000C000000089008800C005C2 +:10A9000010008800208488008400000004828400F5 +:10A91000840040800420880800200080002000007F +:10A9200004200403880400000000C00502020000A7 +:10A930000400400020000003000088048800820416 +:10A940000200000020102084880000800002208483 +:10A950000000C00400042085008000800004000086 +:10A9600000000080008300040002000000000000DE +:10A970000000000000000004000800004000030088 +:10A980000482800000000920000000000000400355 +:10A990000400000000100001000000010020000180 +:10A9A000000080000000000000C0000000000083E4 +:10A9B0000000800000000000000000820001210073 +:10A9C00000018000000000010040000000020001C2 +:10A9D00000210000000100008004000400040001C8 +:10A9E00000000000000200200000009000000000B5 +:10A9F000000000000002000000000000000001084C +:10AA00000000000090000000410000000000000075 +:10AA1000010000000200000500000080010904A000 +:10AA2000040000000180000020000000820200807D +:10AA30000104000000000100400000000080000050 +:10AA400000000010000500040100008582000000E5 +:10AA500001000080000000000040028000040004AB +:10AA6000000400040000000000004000000084001A +:10AA7000000000000000000000000000050000844D +:10AA800040000000118402402084C00000840008BF +:10AA90000000400800000000200000820040040088 +:10AAA000A0418000208802204084800000000585AD +:10AAB000000240080000000040088900000000205B +:10AAC00005100404008400000001080000040000D8 +:10AAD00000004010092000000000020300100001E7 +:10AAE00000010001000100080000000080000002D9 +:10AAF0000584050000000000000040020000000086 +:10AB0000000000210004000008080800204108009F +:10AB100000100010002100030000000301000120CC +:10AB2000020000004004001008210010080000008E +:10AB300000028400C00000039004002120000000F7 +:10AB40000080002000200120000001840003040494 +:10AB500084000000000000020003080000118405CA +:10AB600000000020880808000010001000100010ED +:10AB700000000000000000000000002000000000B5 +:10AB80000000000021000001000000004100000062 +:10AB900000000000210008000000000011900800E3 +:10ABA000020180A0040021090000000200880520A5 +:10ABB00000000000000841A000884100418400908E +:10ABC00000000804008541012001000020050082EA +:10ABD0008001038800A000000000000021000000A8 +:10ABE0000800000041010000808200010001000116 +:10ABF000000121000000210008000000000000000A +:10AC000000008200000008020900410000880800DE +:10AC10001000100020000000101000000400400090 +:10AC20000900082082000000082020008200820025 +:10AC3000A00041C082004000000009000800820816 +:10AC4000000000000804040400040404820008005A +:10AC5000820090848200C00008800540822020008D +:10AC60008200C0000000000900800800000000C150 +:10AC70000080008008000000400982000000000001 +:10AC800000020000000021200001200040004003DD +:10AC90001188050000840840030020000000049093 +:10ACA00040080200002141001008000005A0080033 +:10ACB000030000400210000011001000100003000B +:10ACC00011012102000011014101000121010000D8 +:10ACD000410000000221020800002002A000000044 +:10ACE00080400008000000201184002000000000C7 +:10ACF0004140034000400000000000000000000050 +:10AD00000000090000000008A00000008400000806 +:10AD100040048221080000000000820808000000B2 +:10AD20000800840000001000A008000020408400FB +:10AD30000400080084080800C00010000880C0005B +:10AD400002A0A00020000000202020008402400576 +:10AD500000008240840303200400A00800021005C4 +:10AD6000C000080408008500201108008200820449 +:10AD700000000000000400050000002100000000A9 +:10AD8000000008001000A00000000000000000000B +:10AD90000000800000000000100000000000030020 +:10ADA0000000800040000900000000000000890150 +:10ADB0000000800085000500000009004000001030 +:10ADC000400080210000808200008084800000001C +:10ADD000000000000001000020010000000041010F +:10ADE00000000000000100002000800000001000B2 +:10ADF00000910000000000000800000000000000BA +:10AE00000000000000000000000000000000000042 +:10AE10000000000200804009000000000000400027 +:10AE2000824000212000400020808203C0004000BA +:10AE300082008411200408000820C00000002021A6 +:10AE4000040040801080080004020000A00002807E +:10AE5000000420004008C004100000A084029021DB +:10AE600000210000A02084009021008584000400BF +:10AE7000080000080400002108100000000000097C +:10AE800000000420000008001000080020000082DC +:10AE900020044140004000028208088241900000E6 +:10AEA000000400004020400011002120030841A0C0 +:10AEB00020040400000091000000000000000800D1 +:10AEC00000900000820483040000000800000800D5 +:10AED0000320000140840000000100000011030075 +:10AEE000000000000000410000000000000400001D +:10AEF0000800000000000800000000010000000041 +:10AF000000880000000000000000000200000000B7 +:10AF1000000000000000020111010101900000008A +:10AF200000000200000088C040880020908288C095 +:10AF3000014004C00408C10491004010040840020C +:10AF400001910402C091C005900108880002000030 +:10AF500040410110A0200008C010018490419005DC +:10AF600000000100020000000004014002C00020B7 +:10AF7000C04090018890900810C0004000A00808D0 +:10AF800000000000000000000000000000000000C1 +:10AF900000000000400000008004032140038010F6 +:10AFA000000003008000000040808000000000805E +:10AFB0000080100080008080898090200003800342 +:10AFC000808003028080802180C1C108C008008287 +:10AFD0000000800803110820098200851003400545 +:10AFE0008091091108408500002020830220C002C2 +:10AFF0000000800080080809000300800000008035 +:10B0000000800000000000000000000000000000C0 +:10B01000000000000300080011000200100083007F +:10B020004110000000000000000080008002008944 +:10B0300000808000004000008000200010218480FB +:10B04000C12020002090049080C00800830005915A +:10B05000C10000008000051008051088830005036A +:10B060000880A00803802000200008A18300202180 +:10B0700010000040880010002080830380800011B1 +:10B08000008000110000000000000000000000002F +:10B0900000000000000001000100002088888300FB +:10B0A000A0001110000000000000000008000201D4 +:10B0B00020058810080004000890C000002003400C +:10B0C00009A0C00091402105820210040300114034 +:10B0D00084A1C140000002A0A001019011108400D1 +:10B0E000A191A0A0C02000040000000000C1040045 +:10B0F0004000828200000502908201A082001004BC +:10B1000090019084408200000000000000000000D8 +:10B1100000000000000000000000000000000040EF +:10B120000104A189002100010001000000012002AA +:10B13000001000200402020300080040A0C10088A3 +:10B140000008848901C088010090000310090010E4 +:10B150004010891101410000400801404002109058 +:10B1600008020001020990C000010101080100006D +:10B170008200000100010201001101000220001004 +:10B18000208800088491A1900000000000000000C9 +:10B19000000000000000000000000000000011009E +:10B1A0000090200808210941002000020000004012 +:10B1B0000080000000008080809000A000A000912E +:10B1C00000200021852111A00040000000A100A066 +:10B1D00000118280C1200841000080030240C1A00C +:10B1E00000008009411182A10080000402409121E9 +:10B1F00004030000021141218020008203418510D8 +:10B2000003830040008380088920000000000000C4 +:10B2100000000000000000000000008900000000A5 +:10B22000000009C02021048010110000000000006F +:10B23000000000008040000000008040000400800A +:10B24000800010A19140048083038421A008410064 +:10B25000A04080000040008080100000C040200816 +:10B2600084800940A19009C04100C04141212108CA +:10B2700040001040A102828008004010002084A1FC +:10B28000840003038300884085000800000000005C +:10B2900000000000000000000000000000C00000EE +:10B2A0000000000001C0011001A001010000000029 +:10B2B00000000000820002024090C000C000049123 +:10B2C00020400200094105A00190A1010401A12133 +:10B2D000C0088300028810009090A0010000104078 +:10B2E0002020414088011103840490008201000164 +:10B2F0000000000001000590A1102020900040896E +:10B30000050202A08800C000042002100100000015 +:10B3100000000000000000000000000000008100AC +:10B3200000E000004200000000E007008400000090 +:10B3300000000000000000410000070000000000C5 +:10B3400000E007000000000000E0070082000000AD +:10B35000000000000006000000E00700824100003D +:10B36000000000E007000000000000E00700000609 +:10B37000884100E007000021000000E0000000001C +:10B38000000000E00700820000000000070000004D +:10B3900000000000000000000000000000000000AD +:10B3A0000000000000000000000000009F9FDB0084 +:10B3B00000000000000000000F0F00FFF0FF000081 +:10B3C000F0F0F0F066F366FFFFFF993C0C0FF3F02E +:10B3D000F0F0FF00000F0000666603F3F0FC666605 +:10B3E0000000F3F3F3F7606F6C6C00003000FF00B7 +:10B3F000FF0000000000000000003C3C363600006A +:10B40000000066CF66C07E7E7E7EF6F6FF66FFFF9A +:10B41000000000000000000000000000000000002C +:10B4200000000000000000000000000000009F9FDE +:10B43000DBFF00000000000000009999C3C3F0B1D9 +:10B440000000BD24FF00663066000000993C0C0F30 +:10B4500066667878FF0000060006666603F3F0FC77 +:10B460006666000003030307606F6C6C1000100039 +:10B470003C3C66660000000000000000FF00FF008A +:10B480000000000066CF66C042427E429090990064 +:10B49000060C060C00000000000000000000000088 +:10B4A000000000000000000000000000000000009C +:10B4B000000000000000000000000000000000008C +:10B4C000000000000000000000000000000000007C +:10B4D000000000000000000000000000000000006C +:10B4E000000000000000000000000000000000005C +:10B4F000000000000000000000000000000000004C +:10B50000000000000000000000000000000000003B +:10B51000000000000000000000000000000000002B +:10B52000000000000000000000000000000000001B +:10B530000000CF0C0F0F00000000000000009F1C57 +:10B540009F000000FF990F663C6600FF00FF3C3C37 +:10B550000F0F6F6F0FFF63666F66FFFF6F6F303007 +:10B560003F3FF000C0C000000000FFFF0F0F0F0FB3 +:10B57000000600004E4E0CCF00000000000000004E +:10B58000C7F7FFFF010101013C3C0F0F8080C0C0E5 +:10B59000E7E70CCF01813DBD000000000000000086 +:10B5A000000000000000000000000000000000009B +:10B5B00000000000CF0C999900000000000000007E +:10B5C0009F1C9F9F0000C9990F660F663C3C1E1E82 +:10B5D0003C3C0F0F606000F060666C66FFC36F4319 +:10B5E00030303F3FFF0FCFCF00002F20EFE0E7E7E5 +:10B5F0008181000200024E4E0CCF000000000000CE +:10B60000000004340000008100813C3C0F0F00006A +:10B61000404024240CCF01003D3C0000000000000D +:10B620000000000000000000000000610007C00DE5 +:10B6300000000061000F000D000000610006000D19 +:10B64000000080005038000000A0A061500E00995A +:10B65000000500610E0C0299000500610006001D46 +:10B66000000000610E0B00050005000000610009EC +:10B67000000100000061300D009900A50061003F4D +:10B68000C00D00A0806100050009000000610E09E6 +:10B6900000010000A061500E050D00010000000037 +:10B6A000000000000000000000000000000000009A +:10B6B0000000000002027F7F0F00000F000000006A +:10B6C000CDCDC4C400000000000000000000000058 +:10B6D000000AFDFFFF00FF0082F700F700000000F6 +:10B6E0009669C3BE000000003CFFBEBE0000555579 +:10B6F000FFFFAFACAFACFFF30F03B2B2B2B20000CA +:10B70000000000C30055CF00CFFF5555F0F07D413C +:10B710007D410AFA3C3C3C753CF5C000FC00000051 +:10B720000000000000000000000000000000000019 +:10B730000000000000000F2F0F2F00003C3C000015 +:10B740000000676789890000000000000000000019 +:10B7500000000000FFFFDF08FF0000FF00F700000F +:10B760000002003C967D0000000000C382820000C1 +:10B7700055550003A0ACA0ACFCF00C0000FF00FF8E +:10B78000707D007D00C3000F0C000CFFFF00FF0068 +:10B790003F033F030AFA3C3C3C753C55C000FC00AB +:10B7A0000000000000000000000000000000000099 +:10B7B000000000000000000F7D82827D04FB5555D3 +:10B7C0000000000000000000000000000000000079 +:10B7D000000000000000000000FC00FC7FFFFF7F75 +:10B7E00000C300C378D278D2FF000F0F0CFCAFAFBC +:10B7F000000014341434AAAAAAAA0F4F0040AAAA1F +:10B8000000FF000000EB80000000AAF0AA005C50DE +:10B810005C50DF5DDF5D3C7D78780000000000005B +:10B820000000000000000000000000000000000018 +:10B83000000000000000000000FF5DA2A25D00FF0C +:10B840005050000000000000000000000000000058 +:10B8500000000000000000000000000000000000E8 +:10B86000000000C300C378D278D255553C3C0CFC94 +:10B87000A0A000000030FFFFF0F000FFFFFFF0F09D +:10B88000AEAE00FF0000EBEB80000000AAF0AAFFC4 +:10B890005F535F538A088A083C28787800000000CC +:10B8A0000000000000000000000000000000000098 +:10B8B0000000000001008900028001002100010059 +:10B8C0008800210021000000850020830400000280 +:10B8D0008800A00088000203080005008885000099 +:10B8E000820040002000000000080200888800005C +:10B8F000840803000003880004842000040400106E +:10B900004000400000002000000000050285000407 +:10B91000200400040404000088000000000040002F +:10B92000200020000400200400008200200000000D +:10B93000040000050000020002008040020002A096 +:10B94000020000000200029000000200004000001F +:10B9500000012100400000000000800020000010D5 +:10B9600000000082008200000000000000000004CF +:10B970000000000020000000000085210000000100 +:10B9800000010082410004000000000000000002ED +:10B990000001800100018001000000002000000083 +:10B9A0000000000000000020000000000000000077 +:10B9B0000000000000000000000000000000000285 +:10B9C0000000000000040002000000000008004029 +:10B9D00000000000010000000289040001100420A2 +:10B9E0000040000000000400000000000080001083 +:10B9F0000000000000000000000000000000000047 +:10BA00000000000004000009048000000080000025 +:10BA1000004101801000108941000000000000007A +:10BA20000000000000850041000004410400050002 +:10BA30000400010000008800000000000000210058 +:10BA400000090040110400080911000800100088D6 +:10BA50000909000000820888000880028008084167 +:10BA600080850089000800088000001000000002A6 +:10BA70000009004000100040000800000008008499 +:10BA8000004000040040C108008280400000002007 +:10BA900000880008200880008008A0080008000036 +:10BAA000000000000000002000000000800085046D +:10BAB0008400800440004000000400080021004190 +:10BAC0000021002100080008000300050088000094 +:10BAD0000084201000050000002100030005000084 +:10BAE0000100004100000000001090110021002121 +:10BAF0000000882188040080000000800000080405 +:10BB000004030103000200800000008040020000E6 +:10BB100000418402001100000000100000800000BD +:10BB200000000008082100090000001000000000CB +:10BB3000900000000009000000410000000010100B +:10BB4000000000080500000000000000000041099E +:10BB50000004210580000000410008002100410090 +:10BB600010A008000308000003000300000000000C +:10BB70000008008400000001000408000004000028 +:10BB80000082808840A00900214005001010038336 +:10BB9000030005000000030008000000400000084A +:10BBA000210000C0080021C00008000000080002B9 +:10BBB0000000000000020000000021000000000062 +:10BBC000888008000041C000821100850900400003 +:10BBD00010088402200420848209400240020800E8 +:10BBE0008200080008008340100002400800820024 +:10BBF0004009C000400082009000001120110800A0 +:10BC000000008202400240008241021100020080D6 +:10BC1000A00000008200844108A000000010201055 +:10BC200000840010C010080000000000040482001E +:10BC30000000008000844002008400040004000032 +:10BC4000000400020000000005000300094002009B +:10BC5000000080010000414080050000000000005D +:10BC600000000008410000002001030080000400E3 +:10BC70000000000000000000000000000000800044 +:10BC800004000000000000002100110088001000E6 +:10BC90000010000000000040000000110040000003 +:10BCA0008008002000000000000000001000880054 +:10BCB00000000400202000200304002000000300F6 +:10BCC00000000900000802088221020200000803A7 +:10BCD0000000A02182080003200401000008C00029 +:10BCE000820000000000000082080000082100110E +:10BCF0000800080000208200A00010000000820060 +:10BD00000800004000008200C000002082000040C7 +:10BD1000880500000810A005040082200011000022 +:10BD2000000008000000000000000000000000000B +:10BD300040000000000000000000000000000000C3 +:10BD400000000000000000A0800000A0C000020071 +:10BD500000000000008400010000800120000000BD +:10BD60000008400400840300410411000300210086 +:10BD70000004800000080382000808840800008492 +:10BD800000400804008400002104058421054000CF +:10BD900003002100080000010000800800030000EB +:10BDA00005C00000100008000890088403C0038448 +:10BDB0000908400405001190000000000000000088 +:10BDC00000000000000000000021004100400805C4 +:10BDD000001090000800000500400040014084046D +:10BDE0000000C01100080400824082000000000230 +:10BDF00004080003040001000010400008000200D5 +:10BE00000804C004080490040000080208000000B0 +:10BE1000090940002010004000030200A020040097 +:10BE200040008821000000044000000000000000E5 +:10BE30000000000040210000000900008300000015 +:10BE400000000000080020000000000000000000CA +:10BE500000000000400008880000080502012003DF +:10BE6000004100000200000000000000000003008C +:10BE7000000000000000000004000800000080082E +:10BE800000000001000100010000000000000000AF +:10BE9000000008C0000000000000000008000001D1 +:10BEA000000002040000000000110000000000007B +:10BEB0000000000000000000000000000800040472 +:10BEC00000020800200020000000080010100005FB +:10BED000022010088402884002C0080840410885FA +:10BEE000910984A011000101840002010040900921 +:10BEF0009110880240A00082000888108200010092 +:10BF000002000000010004008401000100000200A2 +:10BF10009000041082A09110901040108200030045 +:10BF20000100020210A00001000003010000000057 +:10BF300000000000000000100090008400080202D1 +:10BF4000009000C000880000000100010001808214 +:10BF500040218002808900004080910080808083A1 +:10BF6000402184910002100420108020002100C094 +:10BF700080A10211004080000000000000000500C8 +:10BF80004100000000001003852120040002000091 +:10BF900080008500880080001000098000808000FB +:10BFA000900041000080000005414121020400038F +:10BFB0000000000000000000000000800000000001 +:10BFC000838000000000000000410003001000100A +:10BFD0000080001100000010030089418911200039 +:10BFE000410040820391C103100010009000000046 +:10BFF0002000020940A11105000000050082000098 +:10C000004000890005002100400005004100400378 +:10C01000000090004003A080C1C10000002180000A +:10C0200000000000000080800000080003000511EF +:10C03000418500000000000000000000000000003A +:10C04000000080000021000000000000000000044B +:10C050000000020802A0A084A0A1100082041088A1 +:10C06000840282C000C00091C1A1A1C0C1004100F2 +:10C07000A0409140000801A100000000100010A1A4 +:10C0800088008400200041009140019000000000E1 +:10C090000001000011A0C18285A0C10902001000AA +:10C0A000102000002000004040A0200091820200EB +:10C0B0000401859000000000000000000000000066 +:10C0C000000000000200000000401000000000001E +:10C0D0000001000202030004C0C0C00805400011B6 +:10C0E00084C1101188890120418591A10041010975 +:10C0F000A08300A1C00000119101C0C120A0008850 +:10C100000010A0C0004000210041004000010000DC +:10C1100084000000000000890040080204820482BC +:10C1200000880020C0C00090000100202002000014 +:10C130000001000000010000000000000000880075 +:10C14000000000000800008800404090000000004F +:10C1500000004000000011881005080300C0418362 +:10C16000009000219183828940838585910200C0DF +:10C1700004100321008280200502202140A000003D +:10C180000080000080800040000300840440001014 +:10C190000503054100050000002000918041840056 +:10C1A00000850083000380800000000200100082F0 +:10C1B00000022108200840410000000000000000AB +:10C1C00000000000000000000000008000000000EF +:10C1D000000041001000000002001000040089006F +:10C1E000008080C00000800989A1038002009011B6 +:10C1F000102104004100081041410340C00011100B +:10C20000800380A100000000000900800080000978 +:10C2100002C04000040004020000400982C011096D +:10C2200003118000800400000000000000050000F1 +:10C2300000004104108520002020000000000000C4 +:10C2400000000000000200000000000000050000E7 +:10C2500000000000000000000000020005040202CF +:10C260000800C0088282C0C0080189890504A100B5 +:10C27000900101A1019000400100A0051100419032 +:10C2800003000800A0102090A0000082000200021D +:10C290000000014100000100010000004001889001 +:10C2A00091C000018200A011048882002000822039 +:10C2B00090104000010101C00108010100000000D0 +:10C2C000000000000000000100000000000020400D +:10C2D00088200000000000000000000000000000B6 +:10C2E000000000000000000000008200480000E0A4 +:10C2F000000042000000000000000000000000E01C +:10C30000070082000000000007000000000000009D +:10C3100000004200000000E00000000000000000FB +:10C3200000E007000021000000000700008200007C +:10C33000000007004200000000E007008800000045 +:10C3400000000000000000000000070000000000E6 +:10C350000000070000000000000000000000758AD7 +:10C36000F50AE41BE41B5A5AA55A96693CC30FD838 +:10C370000F5A27A5D85A00000000C1C3C1C35050AE +:10C38000005000000F0F40C343C35541FFC30000DE +:10C3900000000041404000000000000000000000DC +:10C3A000AFAFA0A0FFFFAA3030303A3AAA82AF87E1 +:10C3B000F0C3AAAA003CC3FF000000000000000078 +:10C3C000000000000000000000000000000000006D +:10C3D00050505050080D080D0000000000000000F3 +:10C3E0008A750AF5CC33E41B5A5AA599966936C961 +:10C3F000F027F0A5F0F00F0F00000000C1C301030B +:10C4000014501450F0F0F0F000C300C355550F0F56 +:10C41000000000000041404000000000000000005B +:10C420000000AFA0AFA00000AA30303F303FFFD7E0 +:10C43000AF87F0C3AAAA283CEBFF00000000000071 +:10C4400000000000000000000000000000000000EC +:10C45000000000550055080D080D00000000000008 +:10C460000000AA55A55A6AAA95555A1BF0F05A1B06 +:10C47000F0F03333CC333C3C555500000000CF0C7A +:10C480007D7D0000FF3FFFFFFFFF5CFF50FFFF00CF +:10C49000000000000000FFFFFFFF000000000000A0 +:10C4A000000000008E8E8E8EFFF0A3A3A5A500A035 +:10C4B0000F000F001717171755FF55000000000059 +:10C4C0000F000F0000000000000000003F3F0303CA +:10C4D000000000003030F000AAAA828200000000B4 +:10C4E00000000000A956A55A55AAAA55A5E40F0FA9 +:10C4F000A5E40F0F9933CC333C3C555500000000A8 +:10C50000CF0C414100005030C3C3C3C35C00500096 +:10C5100000005F0A00000000FFFFFF7F0000000036 +:10C520000000000000008E8E8E8E0F00A3A3A505D4 +:10C530000000004D004D171717177DFF7D0000000C +:10C5400000007F4F70400000000000000000C34169 +:10C550008200000000003030F000282800000000B9 +:10C5600000000000000040618006002D10024061C4 +:10C570008006002D100240608007C0214202006149 +:10C580000006000D000000613E0F00990000000051 +:10C5900000080090000100610006000D000000612D +:10C5A000000100010000000000610E0D00090005FF +:10C5B0000061400E009D000100610E0E000D0000A4 +:10C5C000002100090005000000000000000000003C +:10C5D000000000080000000000000008000000004B +:10C5E00000610006000D000055557D71000000003F +:10C5F0000000000000000000FFFF5CFF8000D00092 +:10C60000F0F0F0E000FFCFCF2D0F2D0F3F30AFA0A7 +:10C61000000000000000000000000000FFFFFCBE62 +:10C62000FFFF7F3FBAFFFFFF000057027F2A3E7FD8 +:10C630003E7F00000000C200C20000000000AF0FFB +:10C64000AFFF7F437D4182AA8DA50000000000005E +:10C6500000000000000000000000000000000000DA +:10C660000000000000000000000055554D41010091 +:10C670000000000000000100000000005C009010BD +:10C68000D010F0F0F0E000FF5050AF0F050F3F303A +:10C69000AFA000000000000000000000000000004B +:10C6A000C082FFFF5F0FBAFFBAFF0000D700FF286C +:10C6B00002430243000000000200020000000000EC +:10C6C000A000A0F07C407D4182AA7D5500000000C2 +:10C6D000000000000000000000000000000000005A +:10C6E000000000000000000000000000F505F70752 +:10C6F0000000000000000000FFFFFFFFFC0CFC0C2E +:10C70000000300C0EB4F4141C5C5C5C5FF55BF156E +:10C71000F0F055550000000000000000000000008F +:10C72000E8AAE8AAFFFFFFFFFFFFFFFF00000000ED +:10C730000000303F3A3A0000000000000000000016 +:10C740000000000000005F5FFC0C50FA14BE000007 +:10C7500000000000000000000000000000000000D9 +:10C76000000000000000D71428EB00000000F505D1 +:10C77000F4040000000000000000FEFFFFFFFC0CBE +:10C78000F50500820014414F4141FF0FFF0FAA0041 +:10C79000AB01F03055550000000000000000000023 +:10C7A00000000000FFFFFF1F1F1FBABABAFF000002 +:10C7B00000000000303F3A3A000000000000000096 +:10C7C00000000000000000005050FC0C50FA14BEA5 +:10C7D0000000000000000000000000000000000059 +:10C7E0000000000000000000D81B28EB0000000043 +:10C7F0000000C000C000200088000000C005020446 +:10C80000880020008400020040000200840004042C +:10C810000000C00000000400200000008800840028 +:10C8200082000000840020000400000020000004BA +:10C83000000300000000C0008441200002008400CA +:10C84000000088000000000920002000000004040F +:10C85000000400000000000000002000200004048C +:10C860000000200000008200000084004000000062 +:10C870000088410000C00000410000000000048268 +:10C880000000110000002000000000000000040073 +:10C890000001000000002000030000000020040050 +:10C8A0000000000000000000000000000000040084 +:10C8B00000830000000000000000200000000000D5 +:10C8C0000000000000000000040000000000000064 +:10C8D000000000090000000000000000000400004B +:10C8E0002000000000A00000000000000000008206 +:10C8F0000000000400000020000000000000000014 +:10C900000004000000000010000000000000000013 +:10C910000004000000000000000000000000000013 +:10C920000000000000000000000000000000000007 +:10C9300000000000000000000000000000000000F7 +:10C9400000000000000000000000000000000000E7 +:10C9500000000000000000000000000000000004D3 +:10C9600000000000000000000000000000040000C3 +:10C970000000000000000008000000C040080000A7 +:10C9800000840082000800000004001000080088F5 +:10C9900000000000000400080010200000100084C7 +:10C9A0000000000800A000840484040000080010B7 +:10C9B0000000000000100000000400000000000063 +:10C9C0000000000020100088000002000200028821 +:10C9D0000084000000000000000000004100000092 +:10C9E0000000000000000000000400000000000043 +:10C9F000000000000000000400050000000000002E +:10CA000000000003200300050000000000000000FB +:10CA1000000000112040000000050000A000900070 +:10CA20000000C00388000800000000000200081099 +:10CA3000202100009000000000000003A0038400FB +:10CA40008400000500008200A00500000000100026 +:10CA50000800000000000000A000000000400800E6 +:10CA6000080000400000080020000000C000000096 +:10CA70000000000000000000000000000000008432 +:10CA8000110000004184000008C0000000004100C7 +:10CA9000000021000000000000084100000200002A +:10CAA00040A00000210200000008008400A0210234 +:10CAB00000900000080000000000000000000800D6 +:10CAC00040000000050041C005000804080400A063 +:10CAD00008880000000000000002000000000000C4 +:10CAE0002100000000000000410040400000000064 +:10CAF000000000820800050005A00000A000000062 +:10CB00004000000000000800040000008240001106 +:10CB10008200000410000000C00000008200C0007D +:10CB20008200000082000000000000050800820072 +:10CB30000000000008000000200000000000820447 +:10CB4000820400040004820000050000000082103E +:10CB500082000010201082000000080000118200F6 +:10CB60008200000082008200000010050041820067 +:10CB70008200000082008200840082030003100013 +:10CB800000000000000011002004050040004100EA +:10CB900040400000100000200000000021080000BC +:10CBA00000880540104000000002000000840000E2 +:10CBB00008A000000090000000100000000000002D +:10CBC000009004000000000010000000400200007F +:10CBD00040080000000000002000000000000000ED +:10CBE000000020000020002002C000C00300000060 +:10CBF000110000002084000000000000110200006D +:10CC000000000000080000000800A0008200820070 +:10CC1000000800081000C0000000C021080000004B +:10CC20000000000008000000000000008200000278 +:10CC300000210000000000000000000000000000D3 +:10CC4000000000000000100000000040000008008C +:10CC500000050000000000000000000000000000CF +:10CC60000000000000000000400000000000100074 +:10CC70000000000000000000000000000000004074 +:10CC80000000000005C009000000050000000010C1 +:10CC90000000000000000000000008080300000081 +:10CCA000080000820800059008000088410020006C +:10CCB0000002000000000800080000000000000062 +:10CCC000080000000000000410C020001100000057 +:10CCD0000000020200C0000021002100000021002D +:10CCE000000211001100000000000000000000021E +:10CCF00000004040104010400000084000000500C7 +:10CD0000050000000000400800000000820800004C +:10CD100000080000040000400000100400000000B3 +:10CD20008200000000000800000000000821000050 +:10CD300008000000000000000000001100080400CE +:10CD40000000002100000000000090000400080026 +:10CD50000200A00004000011041000008404000080 +:10CD600000001000000000000000000000000800AB +:10CD7000080000000000000000000011000090000A +:10CD80000000080400000040000020040000000033 +:10CD9000028800C009001190110004000290008870 +:10CDA0000400000000002000080002000000000055 +:10CDB0000002110000000000000000000000000060 +:10CDC0000000000000000000000000000000000063 +:10CDD00000000000402020020000000000000000D1 +:10CDE0000000000000000000000000000000000043 +:10CDF0000000020400C00000000000000004090060 +:10CE000000000000200011000000000000000000F1 +:10CE100001000000000000000000000000C0000051 +:10CE20000000000000000000000000000000000002 +:10CE300001000000000000000000000000C0000031 +:10CE400000000000000000000000000000000000E2 +:10CE5000000001000000000000000000010000C010 +:10CE600000000000000000000000000000000000C2 +:10CE7000000001000000000000000000010000C0F0 +:10CE800000000000000000000000000000000000A2 +:10CE90000000410000000000000040050800008084 +:10CEA0000000000000000000000000000000000082 +:10CEB0000000410000000000000040050800008064 +:10CEC0000000000000000000000000000000000062 +:10CED00000000000410000000000000040050200CA +:10CEE00000800000000000000000000000000000C2 +:10CEF00000000000410000000000000040050200AA +:10CF0000008000000000000000000000000003009E +:10CF1000000000800000800000000000900082807F +:10CF2000000080000000000000000041000003003D +:10CF30000000008000008000000000001000900051 +:10CF40000000800000000000000000410000000020 +:10CF5000030000000080000080000000000090003E +:10CF6000C0000020000000000000000000410000A0 +:10CF7000030000000080000080000000000090001E +:10CF800083000020000000000000000000410000BD +:10CF90000100000000C000002000000000000300AD +:10CFA00020020090100008000000000000010000B6 +:10CFB0000100000000C0000020000000000021006F +:10CFC0002040009008004000000000000001000028 +:10CFD00000000100000000C0000020000000000070 +:10CFE0004100214000918400400000000000000149 +:10CFF00000000100000000C0000020000000000050 +:10D0000041002140009140824000000000000001EA +:10D0100000000000C0000000000000000000000050 +:10D0200000400000020000000000000000000000BE +:10D0300000000000C0000000000000000000000030 +:10D0400000020000000000000000000000000000DE +:10D05000000000000000C000000000000000000010 +:10D0600000000002000000000000000000000000BE +:10D07000000000000000C0000000000000000000F0 +:10D08000000000020000000000000000000000009E +:10D090000000000000008000000000000000000010 +:10D0A0000000008000008000000000000000000080 +:10D0B00000000000000080000000000000000000F0 +:10D0C00000000080000000000000000000000000E0 +:10D0D00000000000000000008000000000000000D0 +:10D0E00000000000008000000000000000000000C0 +:10D0F00000000000000000008000000000000000B0 +:10D10000000000000080000000000000000000009F +:10D11000000000000000800000C1000000000000CE +:10D12000000000000041000000200000000000009E +:10D13000000000000000800000C1000000000000AE +:10D14000000000000041000000200000000000007E +:10D150000000000000000000800000C1000000008E +:10D1600000000000000000418000002000000000DE +:10D170000000000000000000800000C1000000006E +:10D1800000000000000000418000002000000000BE +:10D190000000000000000000400000C1000000008E +:10D1A00000000000000000834000000100000000BB +:10D1B0000000000000000000400000C1000000006E +:10D1C000000000000000008340000001000000009B +:10D1D00000000000000000000000400000C100004E +:10D1E00000000000000000000083040000010000B7 +:10D1F00000000000000000000000400000C100002E +:10D200000000000000000000008304000001000096 +:10D2100000000000000000000000000000000042CC +:10D220000000000000004800810000E0000048000D +:10D23000000000000000004200000000000000426A +:10D240000000000000004800810000E000004800ED +:10D25000000000000000004200000000000000008C +:10D2600000420000000000004800810000E00000D3 +:10D270004800000000000000004200000000000024 +:10D2800000420000000000004800810000E00000B3 +:10D290004800000000000000004200000000000004 +:10D2A000000000000000000000000000000000007E +:10D2B000000000000000000000000000000000006E +:10D2C000000000000000000000000000000000005E +:10D2D000000000000000000000000000000000004E +:10D2E000000000000000000000000000000000003E +:10D2F000000000000000000000000000000000002E +:10D30000000000000000000000000000000000001D +:10D31000000000000000000000000000000000000D +:10D3200000000000000000000000000000000000FD +:10D3300000000000000000000000000000000000ED +:10D3400000000000000000000000000000000000DD +:10D3500000000000000000000000000000000000CD +:10D3600000000000000000000000000000000000BD +:10D3700000000000000000000000000000000000AD +:10D38000000000000000000000000000000000009D +:10D390000000000000000000000000000000747B9E +:10D3A000000000000000000000000000000000007D +:10D3B000000000000000000000000000DE2E747B72 +:10D3C000000000000000000000000000000000005D +:10D3D000000000000000000000000000DE2E000041 +:10D3E000747B00000000000000000000000000004E +:10D3F0000000000000000000000000000000DE2E21 +:10D40000747B00000000000000000000000000002D +:10D410000000000000000000000000000000DE2E00 +:10D42000615603400000000000000231E0000000EF +:10D43000000000000C4000000000000002C06A86EE +:10D44000615603400000000000000231E0000000CF +:10D45000000000000C4000000000000002C06A86CE +:10D460000000615603400000000000000231E000AF +:10D470000000000000000C4000000000000002C09E +:10D480006A86615603400000000000000231E0009F +:10D490000000000000000C4000000000000002C07E +:10D4A0006A862000000404880000000000808800D4 +:10D4B0000000000021000000202001000482C003C1 +:10D4C0002000000000000000C080000088800400F0 +:10D4D000000082002080C0002000C000200000006A +:10D4E000400000030000400008000000000000842D +:10D4F00020000004200020000000204000102080B8 +:10D5000000000000820082000000C0000000400017 +:10D510002000000020002000820020008200820005 +:10D52000C000000000000001000400000000000234 +:10D5300000000400000004000082000110008021AF +:10D540000000040000000000000004400000000291 +:10D55000000000000084000400000000000005003E +:10D560002084000000000082000080000000000015 +:10D570000005090000010000000000000001050195 +:10D580000010000000000000000000000000008209 +:10D590008200000000000000000000000000000009 +:10D5A0000000000000000000000900000000000072 +:10D5B0000000000000000000002000100010000229 +:10D5C00001800005008000800000001000000000C5 +:10D5D0000000008500000000008000000000000046 +:10D5E0000000000000800000010500000000018331 +:10D5F0000000000000000003000000000000000820 +:10D60000000000000080008000000000000000001A +:10D6100000200140000000000000000000800141E7 +:10D6200000000000000000000008000000C000082A +:10D6300000080084000800000084000900840084C1 +:10D64000008508200908001000400000008300C089 +:10D65000000800C00902008800000004000000006B +:10D66000000000080008000200000400008400849C +:10D670000420000800080000000000000000100066 +:10D68000090000840008410441200000000000005F +:10D69000008400851008020000000200030000085A +:10D6A00020840900008409000000028500050004B0 +:10D6B000200200210003004000050010208020808F +:10D6C0000085001000084041400800039021080830 +:10D6D00000100008008990020021000000410000B5 +:10D6E00000000000000000024108000001050821C0 +:10D6F000A0000821000000210021210200030005F4 +:10D70000000300020002000909029000000000006E +:10D71000000500000002C005840390022000018083 +:10D7200001A00008000500000008000083040000BC +:10D73000091180A00000000000000000000080200F +:10D74000800400200000410091008000000000845F +:10D75000000000000301004000000000000000A0E5 +:10D76000000000A000820000030288820000080080 +:10D77000800009008082000000000010A00000006E +:10D780000000000000020000000084000000000013 +:10D79000000000A0000000000000000000000000E9 +:10D7A000100804210000000000000000000000003C +:10D7B0000800080082000000080008008800080037 +:10D7C00000002000830040808200088200000000EA +:10D7D00000008200000801000000080000000000B6 +:10D7E000000082000000000000004000080000006F +:10D7F0002000C0000800080000000800A00082000F +:10D800000000000008000200C000820000000800C4 +:10D8100040000100820000009000A0008800048009 +:10D82000400001802182C010C000080082008200F8 +:10D8300000A00390000000000082000000A000088B +:10D84000000000002000200000400090001100C0F7 +:10D8500011000008038411004000000000A0000037 +:10D8600000A0000000000000000000008000008414 +:10D870000000000000009000000000000000000018 +:10D88000000000820000000080000000040400820C +:10D8900000000000020021A00000020000000000C3 +:10D8A00041040340100804200001408200080200E7 +:10D8B0000208002120000040820000000041080012 +:10D8C00008100003C000C000000400000941A020AF +:10D8D0004020824000000011840000000008000485 +:10D8E0000004000000000000000000080000A090FC +:10D8F000000000000080000000100810004100003F +:10D9000000020000000082008200000000808210FF +:10D9100020008221C0000805084082030420004046 +:10D92000102182020000100204200002C000C0008A +:10D930000000000200008500000000100000000050 +:10D9400000000001000008000000080100001000B5 +:10D95000000180010000000009000090000005881F +:10D9600000010001000008000000080000000000A5 +:10D9700000101100000000400000000180000000C5 +:10D9800000000000000000000800000008900010E7 +:10D990000000800000A000000000000000008001E6 +:10D9A0000001000000000000880080010800000065 +:10D9B0000000000000010021840400082000000590 +:10D9C00020080005000500048221822000040009CF +:10D9D0000020000083020800004182004041000056 +:10D9E0000008002100000000000304000003000004 +:10D9F00000008200000000000000200082410008BA +:10DA00000021000900000005080000004000820419 +:10DA100008000021210000800003C0000121010056 +:10DA20000580000400840103A100110803A0848084 +:10DA3000A180C100A18220A1000000010008800097 +:10DA400000000000000000000090000000880000BE +:10DA5000000000000000400100000008000000007D +:10DA600000000000000000C00000000000000000F6 +:10DA700000000000000000000000000000000000A6 +:10DA8000080000000000000000000000000000A0EE +:10DA900000000000000084102020201000044082BC +:10DAA00040004040030000110890408290010411A2 +:10DAB0002040080240000802200840094000890870 +:10DAC000080900010000200100008389A12141888C +:10DAD000821141112003040382031090000400907E +:10DAE000841000010001820100000000000000001D +:10DAF0000000C000010002000200000089A0200810 +:10DB00000090020800018201900000010040002006 +:10DB100000100040892001200488C0A000000000FF +:10DB200002000000400088000901C0014011008986 +:10DB3000830202C1020020008801040180901105C7 +:10DB4000108880C0002009208008002020841091C7 +:10DB500082C1008489C1890900040010800000008E +:10DB600000000080110821080511001000000000CD +:10DB70004000000080000800000000000000098054 +:10DB8000808000000080001000200503004000801D +:10DB900000000000000009004100C08080800000FB +:10DBA0000400000000009041830941080003C0C147 +:10DBB000008904098008C0038503000880039000E1 +:10DBC0000200C0118208820089000300C0210440C5 +:10DBD000C111C111048390800300A002C184000020 +:10DBE000804100800000058003000805C1A10000FD +:10DBF00000000000000880000400890021000000EF +:10DC000080000000800000800480040020000003E9 +:10DC1000000000C1000400008900C12102110800B9 +:10DC200085001000A000100000008004838980039C +:10DC30008000000080200080108003040880200302 +:10DC40000810210083010900089004000000090168 +:10DC5000A1A18201A0018591100290821000098289 +:10DC6000A00002A104A0000090C04100890109A108 +:10DC7000000000000000000188000500080001000D +:10DC8000000008009000A088108201C00100000080 +:10DC900000010000001000010000020002000091DD +:10DCA0000100100010001000020090200801084040 +:10DCB000C0011000100084002008010200010108CA +:10DCC0000001400800C0210803A10001000001017B +:10DCD000000084C10185019184C11009012085855E +:10DCE00003C1404000881008A1C0000001000201EB +:10DCF00001000000000000000000004000880488CF +:10DD00000010000040020002108884C000010000E2 +:10DD100000010001400000000200100004000002A9 +:10DD2000840204020000000000000100001000084E +:10DD3000018400C18282008241900303000200A09E +:10DD40000188000380C00404089191C00020214094 +:10DD50002021050200041140050804840010040578 +:10DD600090A1A1C1808000000080218000202004BB +:10DD7000A0100304000000000000000000C1000229 +:10DD8000801011110000800000000000028000409F +:10DD90000005202100038000000000000000801129 +:10DDA000002100040040001000030010100300C018 +:10DDB00040A040A020C100832183118404C10083BE +:10DDC00002202005000320004084030009032104F1 +:10DDD000208002801002218485824100031100000E +:10DDE000090409000400000000808000800041094F +:10DDF00008A1020002050000021103000200000059 +:10DE00000000000000000000000300C0808000004F +:10DE1000214005114100004000008000000000008A +:10DE20008090004080008008000000800000000911 +:10DE3000900088820908080000020020000000000D +:10DE4000C100A0110800830801A000820184010123 +:10DE5000018300820008000005090821A084A101B7 +:10DE600000840088011000002000040284400400A7 +:10DE70000021010800C001000000000101000000B5 +:10DE80000004000000840000000002000210844032 +:10DE9000100001A10001000000008200400000000D +:10DEA0009000C04020880810040100040082001087 +:10DEB0000000900009C18805110000010009001050 +:10DEC00000000540050089000201000000E000009C +:10DED00000000000000000000000000000E007005B +:10DEE000000000000000070000000000000000002B +:10DEF0004100000000E000006000000000E00000C1 +:10DF0000000000000000000084000000000000008D +:10DF100007000000000000E00000500000000000CA +:10DF200000000000000000E0070042820000000046 +:10DF300000000000000000E007004181880000E0D0 +:10DF400007000000000000000000000000000000CA +:10DF5000F0FFF0000000000000000000FFFFCFFF16 +:10DF6000690F2B0F00000000060FF9F07F3F000043 +:10DF7000E4C0183C000000000000000000000000A9 +:10DF80000000000000000000F3F103010000300C6D +:10DF900030060303F000000000000000000000C392 +:10DFA00000FF00000000C0F0C9F960606060000080 +:10DFB0000000000000006F076F04A6C03F3F000094 +:10DFC0000000A93069F0717E4D42F090335300009B +:10DFD000000072FF7200000000000000000000005E +:10DFE00000002B2B2B2B00000000060F3C3C6F0F7A +:10DFF0000000E4C0DBFF00000000000000000000A3 +:10E0000000000000000000000000F2F0020000002C +:10E01000300C300603030E02000000000000000078 +:10E02000C3C3FFFF00000000CFFFC9F906060F00C1 +:10E0300000000000000000006007600499FF00007D +:10E0400000000000A9CF690F8181BDBDCCAC0F6F6E +:10E0500000000000000000000000000000000000C0 +:10E0600000000000000000000000000000000000B0 +:10E0700000000000000000000000000000000000A0 +:10E080000000000000000000000000000000000090 +:10E090000000000000000000000000000000000080 +:10E0A0000000000000000000000000000000000070 +:10E0B0000000000000000000000000000000000060 +:10E0C0000000000000000000000000000000000050 +:10E0D0000000707000006666272700000000000046 +:10E0E00000000F0F0F0F0F0F4F0D3C663F6F6F6655 +:10E0F0007F7E0000660F839F839F0000000000006A +:10E1000099C30000000000000000000000000F3C68 +:10E110000F3C0000DBF0DBF000000F0F0000000000 +:10E1200000000000FFEF0000000000000000000001 +:10E1300043434343000000003C3F7E7E000000005C +:10E14000F6F60935A5953C0C66677E7F0000000059 +:10E150000000000040400000666624E70000000068 +:10E16000424203030B0F2F0F0F0F0F0F00660F6FAD +:10E1700066667E7E0000663C9F9F9F9F00000000B9 +:10E180000000F0F0000000000000000000000000AF +:10E19000003C003C0000DBF0DB003C660F0F0000A1 +:10E1A000000000000000FFEFFFEF0000000000C3D0 +:10E1B00000804040404000000000000F6666000004 +:10E1C00000000000FFC3A595C3F300033C3F00001F +:10E1D000000000000000006140010011000000612B +:10E1E0000006000D00008061000500910000006144 +:10E1F0000A0E059D00A000003000009000000061A4 +:10E200000007000D000100610005000D0000006125 +:10E210000006001D0000000000000008009000A0A3 +:10E22000006100050009000000003000000000004F +:10E23000A061000F0015000000610006000D000144 +:10E240000061000F009000050061400FC50800004C +:10E2500000610006000D0000FFFF7F3FFFFFFFFF92 +:10E26000FF005400C302C382FFFFFFFF14FF54FEF0 +:10E27000C3AFC3AF55550000000000000000000010 +:10E28000FE3C0000BAAAFFFFCF03CF03000000004E +:10E290000000000000FF00FF000000000000000080 +:10E2A0000000F500F5FF8F80BFB000000000000007 +:10E2B000000000000000005F000A00000000B4B48D +:10E2C000B4FFFF35FF05828203030000000000AAAF +:10E2D00008086CC3AF00CF650CA6FFFF7D3C28F893 +:10E2E000FFFFFF000400C300C380FFBC3C3C00EB09 +:10E2F00040EA000F000F555400C30000000000006A +:10E300000000FEFF0000BAAABAAA0C030C0300002A +:10E31000000000000000C0C0828200000000000079 +:10E3200000000000050005FF8F80BFB00000000066 +:10E33000000000000000000000D700820000000084 +:10E34000A0A0A0FF3535050500C3030300000000B1 +:10E3500000AA080850FFAF00CF300CF3FFFFFF3DCD +:10E36000FFFFFFFF00C34141C3034141F0FF707F46 +:10E37000E8F028F02A2A5500F03000F000000000F4 +:10E3800000000000FF5DFF0CBEBE000000000000AA +:10E3900000000000000000000FFF0F000000000060 +:10E3A000000000000000C3C3C3C30F550F55000099 +:10E3B00000000000000000000000E8FF00AA0000CC +:10E3C000000050FA7CFEA555CC3CFF00FF00A6A53E +:10E3D0000C0F00000000CCA53C553A3A3AFFFFFF75 +:10E3E0003D3DF0FAFCFE0CCF3CFFFF0F5555F0FF12 +:10E3F000404FE8F0EBF02A2AF500000000F00000A2 +:10E400000000000000000C5D0C0CB4140FFF0000B5 +:10E4100000000000000000000000FFFFFF000000FF +:10E420000000000000000000F000F0FFC355C355DD +:10E43000000000000000000000000000E80000AA4A +:10E440000000000000AA3CBEAAAAC3C3FF00FF0050 +:10E45000F3F00C0F00000000C3AAC3AA303030FF55 +:10E46000200008000000882020002000200000007C +:10E470000000880020002000080020004009001053 +:10E4800020008805020002002000200020028404F1 +:10E490008400000020002000880088002000880000 +:10E4A0000001000004402000000002000200010002 +:10E4B00020800005000000000000004000000089EE +:10E4C00002000100850004000400200021008408EF +:10E4D000000000800040000084000040008084C0F4 +:10E4E000024000008000040005010400000000005C +:10E4F0000000000000000000040080000000800018 +:10E500000001000000080000000000000000800181 +:10E510000085000000000400000020000000000052 +:10E5200000000000002000010400000080008000C6 +:10E530000200004000000000000000000001000098 +:10E540000440000002000200000000000000020081 +:10E550000000000000400001000000000001004039 +:10E560000003A00100000000000000800000000087 +:10E57000000000000000000000000000000000801B +:10E58000000000800080008000800000000000800B +:10E59000000000000000000000000000000000007B +:10E5A000000000000000000000000000000000006B +:10E5B000008000000000000000800000000000005B +:10E5C000008000000000000000800080000000804B +:10E5D000008000000000000000000080008000803B +:10E5E000000000800000008800000084001000840B +:10E5F00000080084000800880008008800880008DF +:10E600000010000800020002000200080000008262 +:10E610000002000000400000000800080088000818 +:10E6200000000008008400000000000800080084CA +:10E6300000080040000800840000004000C0000006 +:10E640000008004000080084000000400040001066 +:10E65000004000400088004000A000000040004052 +:10E660000002000000080084002100030041002196 +:10E670000000000000100021002182000021002184 +:10E6800082100000004000210021000000418808A5 +:10E690000002002100080008002108050000000019 +:10E6A000000000210000000800000021000002A17D +:10E6B000008000000140000800080205024100053A +:10E6C0000040000000210041010800880002000015 +:10E6D000024000210041002102400003000001002F +:10E6E0000000018201800188000500004110030044 +:10E6F0000384000000000000008200000800030006 +:10E700000008000141000089080821A00300030857 +:10E71000000000000000080800000300000000A046 +:10E7200000000000000000000000000000000000E9 +:10E730008340004000820201000800828300C10083 +:10E74000030803A1000000A02100020803404100CB +:10E750001108830100A0000021A0888500A003000B +:10E76000020003A040031040100921A00000040093 +:10E770000800000004004000820082000000080041 +:10E78000A00000000880000003800000C000080016 +:10E7900000800800C000410000002000000082004E +:10E7A000040000000000A000C000020000000800FB +:10E7B00082000200080000000000080000000200C3 +:10E7C0000000400008000800000083000000000076 +:10E7D0000800820084008300A0000088000001007F +:10E7E00083000400010040004080010000000000A0 +:10E7F0000000000000000000000000000000000019 +:10E80000000000000000804000C084020000000002 +:10E810000082000200000000A00021008000000033 +:10E8200000000000000000000800000000000000E0 +:10E830000000000080000000000000080000000050 +:10E8400000000000800800000982000002000000B3 +:10E85000030000000000000002000000004000046F +:10E8600002000240000040008000000202A0000000 +:10E870000008000000080805000800000000A000D3 +:10E8800000000000C008000001000400048008002F +:10E890000000200800800080000800080008000830 +:10E8A00000210000000082000000000000000000C5 +:10E8B00000000100000000000000080300008208C2 +:10E8C000A00008080000C0400008000000A10841A6 +:10E8D0000900000000050000824100410041C041E4 +:10E8E0000000840000050002820040808221108820 +:10E8F000102100000800000021840000000000003A +:10E900002184080021000000008408008300834067 +:10E9100021000000918441020802000020820009C9 +:10E92000200000000000000000020000000000A025 +:10E930000084000002000882000200A00000030022 +:10E94000000003000000000000010000001008406B +:10E9500000840208000000000800000000A0000081 +:10E9600000A00808008200000000000080020000F3 +:10E97000800908A000080008002082110021020080 +:10E98000C021004000000000000088020800004094 +:10E9900040020802000301212003A0100002002110 +:10E9A000000800080000020000000000000000084D +:10E9B000000000000000000000009000400800007F +:10E9C000080000080000000400410804000484213D +:10E9D0000000002108080021040008C0A041002117 +:10E9E0004041A02100000003902104028440400225 +:10E9F0004009400840410000000000010000000004 +:10EA00000000000000000000000000000001800085 +:10EA10000000000000000000020080000001000073 +:10EA200000000000000000000000000000000000E6 +:10EA30000000000000000000000000000000800056 +:10EA400000000000000000000000000000000000C6 +:10EA500000000000000000000000000000030000B3 +:10EA600000000000000000000000000000010001A4 +:10EA7000000300000001800008020040008802102E +:10EA800000000000000000000000090082000000FB +:10EA9000A0A00002028888400001010108010000D6 +:10EAA00000011000910100010000000000000000C2 +:10EAB00000000000000000000000C00085020808FF +:10EAC00000821010A00800040000000004400004B0 +:10EAD000021000000102040010C0000200A00800A3 +:10EAE00011104002A0888402C0A1C00800880488D8 +:10EAF00010C089118288A08508888000000000006D +:10EB0000000000000000000000000000C0008900BC +:10EB100000008080040000000000004103218540C7 +:10EB20000009404100000211000400000000000044 +:10EB3000000000000000000000000000800008004D +:10EB40008080008080808080008000000000800045 +:10EB500000008080110020000000800000004100C3 +:10EB60008000A180000984840004008480801180DA +:10EB70008000800020C1401100030002000000005E +:10EB80008000000000000000000000000000000005 +:10EB90000000000008008902848040008280090093 +:10EBA0008000C0401100210002001003000000009E +:10EBB0000000000000000000000000000000000055 +:10EBC0008000000000000080800080800089090033 +:10EBD00082001000C080C0000283410082800900D2 +:10EBE000100209A01000090041890403840489006F +:10EBF000209009001080800002C080802083C00027 +:10EC00002000A000820000000000000000000000C2 +:10EC100000000000000021008200A084044002C027 +:10EC200002000200C10500400000000000010000D9 +:10EC300000000000000000000000000000000000D4 +:10EC40000000828402020084201008848204028270 +:10EC50000200044003001082090000C0A088A0A0A8 +:10EC6000000003A00010C008C0A00284204010884B +:10EC70000800C10520C0200810200509044004C078 +:10EC8000404000109008C004000000000000000098 +:10EC9000000100000001010102020003821108408E +:10ECA0000000400089010101000101010000010094 +:10ECB0000000000000000000000000000000000054 +:10ECC0000000C04000028408000000400008080462 +:10ECD000820001000010021008080808000102026A +:10ECE0008584000200C0A0A1A000A10200C009020A +:10ECF00005859009002140031111A0A0000385891A +:10ED000011858080008080800000000000000000ED +:10ED1000000000040004000304110009000800A121 +:10ED20008040000991038521081000401103004034 +:10ED300011020000000000000000000000000000C0 +:10ED400000000000808200200082002009800080F6 +:10ED50008080800008000000808080808382001016 +:10ED6000808285090509000300080011C1092020DF +:10ED70008404A0C104A000200020A041908900824A +:10ED80008282404100000085000000000000000079 +:10ED900000000000000000040000000080000041AE +:10EDA00080000041110309800500030804210200CE +:10EDB0004100050500000000000000000000000008 +:10EDC00000000000000000000000808000008400BF +:10EDD0008284028002000080000080008011800098 +:10EDE00000000021001080008080008000110200DF +:10EDF0009040022103118080008080800040A1A10A +:10EE0000058089029000000000020002000000005E +:10EE10000000000000000000000100000000C0022F +:10EE200004A0080202010088002001C000010011B6 +:10EE300000000000000000000000000000000000D2 +:10EE400000000000000000008400A0A008080000EE +:10EE5000080008110304000088C004001000080026 +:10EE600008200202000100000420080800A00000A1 +:10EE700002C082A002030300080204820808040002 +:10EE8000A1A1C02089A085000000000007000000AB +:10EE90000000000000000000000000E00000000092 +:10EEA0000000000007000012000000E00000600009 +:10EEB000000000E000000000000000000000000072 +:10EEC0000000000000000000000000000000000042 +:10EED00050000000000000000000000000000000E2 +:10EEE000420000000000000084000000000000005C +:10EEF0000000000000000000820000000000000090 +:10EF000042000000000000000012000000000AFFA4 +:10EF10003EFF0000000000000000000000000000B4 +:10EF200000008000C300FFFFFFFF000000000000A2 +:10EF300000000000000000000000000000000000D1 +:10EF400000000000000000000000000000A0FF5FC3 +:10EF50003C9C3C9C00A0FF5F3C9C3C9C003FFFC055 +:10EF60000FFF0F0F55FF555500FF3CC3AAAA55557B +:10EF700030CF30CF43435F003C1E000AF303F5055A +:10EF80005F1C43004545CF003C5C00500000000082 +:10EF900000FF3CFF00000000000000000000000037 +:10EFA000000000000000C300008220A2000000005A +:10EFB0000000000000000000000000000000000051 +:10EFC000000000000000000000000000000000A0A1 +:10EFD000FF5F3C9C3C9C00A0FF5F3C9C3C9C003F36 +:10EFE000FFC0F000F0F0AA00AAAA00FFFF00AA00EC +:10EFF00055FFF00FF00FE3E3FFA0FF5FC34BC3C368 +:10F000005555FFBCE3A07575FF30FF5FC3537F3ECE +:10F010007D3CD7140F0F000000000000000000002E +:10F020000000000000007D555555E0E0EBEB0000CE +:10F0300000000C0C050500000000000000000000AE +:10F0400000000000000000000000000000000000C0 +:10F05000333C333C5A0F5A0F5A555555F00FBE41A9 +:10F06000F807F807330FF00F6969696941FFBE00BF +:10F07000AA55BE415050FFFF0005C2C7C3A0C3AF91 +:10F0800082D7A0F500FFB2B2A0F5F0F080A0BCA03E +:10F090005F0A5500C3000F0F0000000000000000D1 +:10F0A00000000000000000005F5F555500EB00EB22 +:10F0B00000000000000C000500000000000000003F +:10F0C0000000000000000000000000000000000040 +:10F0D00000003C3C3C3C0F0F0F0F5A555555FF00AC +:10F0E000BE41F807F807330FF00F5569556941FF26 +:10F0F000BE00AA55BE41AFAF0000FAFFC2C7A0A034 +:10F10000AFAFC3C3F0F0B2B2B2B282D7C3C3C1F5DE +:10F11000FDF50000000800000000000000000000F5 +:10F12000000000610007000D0000A061000E001D3E +:10F1300000000061000700050005006100050001F6 +:10F1400000000000000000000000000000000000BF +:10F150000000000040618006002D10024061800622 +:10F16000002D100240618006002D100240618006D3 +:10F17000002D100240618006002D100240618006C3 +:10F18000002D100240618006002D100240618006B3 +:10F19000002D100200000000000000000000000030 +:10F1A000000000000000000000A050F0000000007F +:10F1B000EBFF4B5F3C3C00003C3CA0F51F0F1F0FDA +:10F1C00030FFBAFF00000000000000000000000057 +:10F1D00000000000000000000000B4B4B4FF5D5760 +:10F1E0005D5500000000000000000000000000006D +:10F1F0000000B4B4B4FF00000000A0BCFFFF5D5DE0 +:10F200005D5D2828D7270000000000FF5FA0FF5D9C +:10F21000FF0C2A2AD52A0000000000000000000090 +:10F22000000000000000000000002020202000005E +:10F230000000BEFF1E5F00000D083C3C00555F5FF4 +:10F240000F0F30FFBAFF00000000000000000000B8 +:10F25000000000000000000000000000A0A0A0FFCF +:10F26000080208000000000000000000000000008C +:10F2700000000000A0A0A0FF00000000A0BCA0A013 +:10F28000FF0C0C0CAAAA55A50000000000C35F9C4F +:10F290000C5D0C0C2A2AD5D50000000000000000EF +:10F2A000000000000000000000000000000000005E +:10F2B00000000000C3C355C30000FF00C1C13030CF +:10F2C00014140C0C3CBC3CBC00000000000000000E +:10F2D000000000000000000000000000000000002E +:10F2E000000000000000000000000000000010FF0F +:10F2F000BAFF00000000A0FFBCFF00000000A0FF5C +:10F30000B4FF3535CA35AA69F03300000000F0FAC1 +:10F31000FCFECC0C0000FFFFF0F00000000000003D +:10F3200000000000000000000000000000000000DD +:10F330000000000000000FC30FC34040FF4080806A +:10F34000303014140C0C3C3CFCFC000000000000AD +:10F3500000000000000000000000000000000000AD +:10F36000000000000000000000000000000000009D +:10F370001010BABA00000000A000BC3C0000000061 +:10F38000A0A0B4B4CACACACA55550F0F00000000E5 +:10F3900000AA0CAECC0C30F0000000000000000011 +:10F3A000040000058800200000002000000020006C +:10F3B00000100000200000000009200002000000F2 +:10F3C000840002002000040004000200001020005D +:10F3D0008400000020000000040000000000000085 +:10F3E0008400000020000000020000000200040071 +:10F3F000000000000400000002000200020084007F +:10F400000000840020008400000004000400840048 +:10F41000020000208800840084000000000000003A +:10F4200000000000000000000000000000000000DC +:10F4300000000000000000000000000000000000CC +:10F44000000000000000000000000000200000108C +:10F4500005000500000000000000000000000000A2 +:10F46000000000000000000000000000000000009C +:10F47000000000000000000000000000200000006C +:10F48000000000000000000000000000000000007C +:10F49000200000000000000000000000000000004C +:10F4A000000000000000000000000000000000005C :10F4B000000000000000000000000000000000004C :10F4C000000000000000000000000000000000003C :10F4D000000000000000000000000000000000002C @@ -73570,39 +73570,39 @@ :10F4F000000000000000000000000000000000000C :10F5000000000000000000000000000000000000FB :10F5100000000000000000000000000000000000EB -:10F5200000000000000000000000000000000000DB -:10F5300000000000000000000000000000000000CB -:10F5400000000000000000000000000000000000BB -:10F5500000000000000000000000000000000000AB -:10F56000000000000000000000000000000000009B -:10F57000000000000000000000000000000000008B -:10F58000000000000000000000000000000000007B -:10F59000000000000000000000000000000000006B -:10F5A000000000000000000000000000000000005B -:10F5B000000000000000000000000000000000004B -:10F5C000000000000000000000000000000000003B -:10F5D000000000000000000000000000000000002B -:10F5E000000000000000000000000000000000001B -:10F5F000000000000000000000000000000000000B +:10F52000000000000010001000100000000000109B +:10F53000000800880088008800080008008800C0D3 +:10F54000000000000040000000C0000000080000B3 +:10F550000008000800000000001000080000000083 +:10F5600000100000000000880000001000000040B3 +:10F5700000000040008800000000000000100000B3 +:10F5800000000000000000000088001000000000E3 +:10F590000000040000000088008800000000000057 +:10F5A0000020000000000008080382000010000096 +:10F5B00000000000000000000000002100008200A8 +:10F5C0000000000000000000000000080000000033 +:10F5D000000000000010000000000000000000001B +:10F5E0000000000000000000000000080000000013 +:10F5F0000000000000000000000000080000000003 :10F6000000000000000000000000000000000000FA -:10F6100000000000000000000000000000000000EA +:10F610000000400000000000000082000000000028 :10F6200000000000000000000000000000000000DA -:10F6300000000000000000000000000000000000CA +:10F630000000001000002100000000000000000099 :10F6400000000000000000000000000000000000BA -:10F6500000000000000000000000000000000000AA -:10F66000000000000000000000000000000000009A -:10F67000000000000000000000000000000000008A -:10F68000000000000000000000000000000000007A -:10F69000000000000000000000000000000000006A -:10F6A000000000000000000000000000000000005A -:10F6B000000000000000000000000000000000004A -:10F6C000000000000000000000000000000000003A -:10F6D000000000000000000000000000000000002A +:10F650000000000000000010000000A000000000FA +:10F660000300000008840000080000000000000003 +:10F670000000000000C00000410008000000000081 +:10F680000000031003000300000041000300000815 +:10F69000410008C021840800080000840000030025 +:10F6A0002100080008A008C00000000000000000C1 +:10F6B0000000040000000000000000000000000046 +:10F6C0000000080000000000000000000000000032 +:10F6D0000000080000000000000000000000000022 :10F6E000000000000000000000000000000000001A -:10F6F000000000000000000000000000000000000A -:10F7000000000000000000000000000000000000F9 -:10F7100000000000000000000000000000000000E9 -:10F7200000000000000000000000000000000000D9 +:10F6F00000000800C000080008000000000008002A +:10F700000000000000000000000000000000820077 +:10F7100004110000000000000000000000002000B4 +:10F72000020000008800020000100000000000003D :10F7300000000000000000000000000000000000C9 :10F7400000000000000000000000000000000000B9 :10F7500000000000000000000000000000000000A9 @@ -73611,31 +73611,31 @@ :10F780000000000000000000000000000000000079 :10F790000000000000000000000000000000000069 :10F7A0000000000000000000000000000000000059 -:10F7B0000000000000000000000000000000000049 +:10F7B0000000000000000008000000000000000041 :10F7C0000000000000000000000000000000000039 :10F7D0000000000000000000000000000000000029 :10F7E0000000000000000000000000000000000019 -:10F7F0000000000000000000000000000000000009 -:10F8000000000000000000000000000000000000F8 -:10F8100000000000000000000000000000000000E8 +:10F7F00000000800000000000800000000000000F9 +:10F800000000000000000000000082000000000076 +:10F8100008000000000000000000000000000000E0 :10F8200000000000000000000000000000000000D8 -:10F8300000000000000000000000000000000000C8 -:10F8400000000000000000000000000000000000B8 -:10F8500000000000000000000000000000000000A8 +:10F8300000000000000800000000000000000008B8 +:10F84000000000000000008400000010000800A07C +:10F850000008080000000000030000000000000095 :10F860000000000000000000000000000000000098 -:10F870000000000000000000000000000000000088 -:10F880000000000000000000000000000000000078 -:10F890000000000000000000000000000000000068 -:10F8A0000000000000000000000000000000000058 -:10F8B0000000000000000000000000000000000048 +:10F870000000000000A000000000000000000000E8 +:10F880000000210800000000030000000008000044 +:10F890002100000000C000C0000000000000008443 +:10F8A00008000000000008840084001000840000AC +:10F8B0000000000000000000080000000000000040 :10F8C0000000000000000000000000000000000038 -:10F8D0000000000000000000000000000000000028 +:10F8D000000900000000000000000000000000001F :10F8E0000000000000000000000000000000000018 -:10F8F0000000000000000000000000000000000008 -:10F9000000000000000000000000000000000000F7 -:10F9100000000000000000000000000000000000E7 -:10F9200000000000000000000000000000000000D7 -:10F9300000000000000000000000000000000000C7 +:10F8F00000000000000000000008000002000000FE +:10F9000000000000000000000000080000000000EF +:10F9100000000000000004000000000000000000E3 +:10F920000000020000000040000400000420040069 +:10F9300000020000000000000000000000000000C5 :10F9400000000000000000000000000000000000B7 :10F9500000000000000000000000000000000000A7 :10F960000000000000000000000000000000000097 @@ -73811,7 +73811,7 @@ :1003F00000000000000000000000000000000000FD :1004000000000000000000000000000000000000EC :1004100000000000000000000000000000000001DB -:1004200000000001000000000000000000000000CB +:10042000000000010040000000000000000000008B :1004300000000000000000000000000000000000BC :1004400000000000000000000000000000000000AC :10045000000000000000000000000000000000009C @@ -73819,7 +73819,7 @@ :10047000000000000000000000000000000000007C :10048000000000000000000000000000000000006C :10049000000000000000000000000000000000005C -:1004A000009000000000008000000000000000003C +:1004A00020800000000000000000000000000000AC :1004B000000000000000000000000000000000003C :1004C000000000000000000000000000000000002C :1004D000000000000000000000000000000000001C @@ -73827,7 +73827,7 @@ :1004F00000000000000000000000000000000000FC :1005000000000000000000000000000000000000EB :1005100000000000000000000000000000000000DB -:1005200000000900000001000000000000000000C1 +:1005200000000000000000000020000000000000AB :1005300000000000000000000000000000000000BB :1005400000000000000000000000000000000000AB :10055000000000000000000000000000000000009B @@ -73836,18 +73836,18 @@ :10058000000000000000000000000000000000006B :10059000000000000000000000000000000000005B :1005A000000000000000000000000000000000004B -:1005B0000200000000000000000000000000000039 +:1005B0002800000000000000000000000000000013 :1005C000000000000000000000000000000000002B :1005D000000000000000000000000000000000001B -:1005E00000000000200020002000000000000000AB -:1005F00020000000000088000000200020004000D3 -:1006000020002000200000002000000000008800E2 -:100610000000000000008800000020002000000012 -:10062000200020000000200000002000000000004A -:10063000880088000000C00020000000200020008A -:1006400000002000200010008800200000000000B2 -:1006500020000000000020002000000020002000FA -:10066000000020002000000000000000000000004A +:1005E0000000000000000000C000880000000000C3 +:1005F0000000000000000000C0002000000000001B +:10060000000020000000000020002000000000008A +:1006100000000000000000000000200000000000BA +:10062000000020000000000000008800880000009A +:1006300000000000000000000000C0002000C0001A +:10064000880088002000000000000000200000005A +:100650000000000000000000000020002000C0009A +:1006600020008800200000000000000000000000C2 :10067000000000000000000000000000000000007A :10068000000000000000000000000000000000006A :10069000000000000000000000000000000000005A @@ -73856,30 +73856,30 @@ :1006C000000000000000000000000000000000002A :1006D000000000000000000000000000000000001A :1006E000000000000000000000000000000000000A -:1006F00000000000000000020000000000000000F8 -:1007000000000000000000000000000000000008E1 +:1006F00000000000000041000000000000000000B9 +:1007000000000000000000000000000000000100E8 :1007100000000000000000000000000000000000D9 :100720000000000000004008000000000000000081 :1007300000000000000000000000000000000000B9 :100740004008000000000000000000000000000061 :100750001002000000000000000000000000000087 -:100760000000000000000000100200000000000077 -:100770000000000000000000000100000000000078 -:100780000000000000000000000809000000000058 -:100790000001000000000000000000000000000058 -:1007A0000000090020000000800900000000000097 -:1007B0000000000000000000000000000000000039 -:1007C0000000800100004000000000080000000060 -:1007D0000000800100000000000000000000000098 -:1007E0000000000000004000000080090000000040 -:1007F00000000000000000000000000000000000F9 -:1008000000000000000000000000000000000000E8 -:1008100000000000000000000000000000000000D8 -:1008200000000000000000000000000000020000C6 -:1008300000000000000000000000000000000000B8 +:100760000000000000000000110000080008000860 +:100770000008008400000000900800840008008445 +:10078000000800000040000000080004000800828B +:1007900040820000000000000040000000080084CB +:1007A00000080000000000008009000000000008B0 +:1007B0000008000800000000000000080000000819 +:1007C0000000800900000000000000400000004020 +:1007D00000088083000000000000000800000008FE +:1007E00000000082000000000008C00000000000BF +:1007F00000000000000300000005000000000000F1 +:1008000000000000000300000000000000030000E2 +:1008100000080000000000000000000000000000D0 +:1008200000000000000000000000000000000000C8 +:1008300000000002000000000000000000000000B6 :1008400000000000000000000000000000000000A8 :100850000000000000000000000000000000000098 -:100860000000000000000000000000000000000088 +:100860000000000000050000000000000000000083 :100870000000000000000000000000000000000078 :100880000000000000000000000000000000000068 :100890000000000000000000000000000000000058 @@ -73888,30 +73888,30 @@ :1008C0000000000000000000000000000000000028 :1008D0000000000000000000000000000000000018 :1008E0000000000000000000000000000000000008 -:1008F0008200C00000000000000000000000008036 -:1009000082000000000000001000C0000000000095 -:100910000000C000000000808200A000080000006D -:10092000000000008400000000008200820000003F -:1009300000001000000082000000000084000000A1 -:1009400000000000A0000000000000008200000085 -:10095000000008000000000000000000000000008F -:1009600000008200000010000000000000000000F5 +:1008F00000000000000000000000000000000000F8 +:1009000000000000000000000000000000000000E7 +:1009100000000000000000000000000000000000D7 +:10092000000000000800840000000000000000003B +:10093000000000000000000000000000C000C00037 +:1009400000000000000000000000000000000000A7 +:100950000000000000000000000000000000A000F7 +:100960000000000000000000000008000000080077 :100970000000000000000000000000000000000077 -:10098000000800000000000000000000000000005F -:100990000000000000000000000200000000000055 -:1009A000000000000800000000000000000000003F +:100980000000000000000000000000000000000067 +:100990000000000000000000000000000000000057 +:1009A0000000000000000000000000000000000047 :1009B0000000000200000000000000000000000035 :1009C0000000000000000000000000000000000027 -:1009D0001000000000000000000000000000000007 +:1009D0000000000000000000000000000000000017 :1009E0000000000000000000000000000000000007 :1009F00000000000000000000000000000000000F7 -:100A00000000100000000000C00000000000000016 -:100A100004000000000000000000000000000000D2 -:100A200000000000000000000000000000000000C6 -:100A300000000000000000000000000000000000B6 -:100A40000000000000008200400082000000000062 -:100A50000000000000000000000000110000000085 -:100A60000000000000000000000000000000000086 +:100A000000000000000000000000002000000000C6 +:100A100000000000000000000000000800000000CE +:100A200000000008000000000000000000000000BE +:100A300000000000000000000000080008000000A6 +:100A400000000000000000000000000000000000A6 +:100A5000000000080000000000000000000000008E +:100A60000000000000000000000000040000000082 :100A70000000000000000000000000000000000076 :100A80000000000000000000000000000000000066 :100A90000000000000000000000000000000000056 @@ -73919,19 +73919,19 @@ :100AB0000000000000000000000000000000000036 :100AC0000000000000000000000000000000000026 :100AD0000000000000000000000000000000000016 -:100AE00000000000080000000000000000000000FE +:100AE0000000000000000000000000000000000006 :100AF00000000000000000000000000000000000F6 -:100B000000000000000000000000000000000000E5 -:100B100000000000000000000000080000000000CD +:100B000000000000000000000000000000080000DD +:100B100000000000000000000000000000000100D4 :100B200000000000000000000000000000000000C5 :100B300000000000000000000000000000000000B5 -:100B4000000000000800000000000000000000009D -:100B5000000000000000000000008400840000008D -:100B60000000000000000000000000000000000085 -:100B70000000000000000000000000000000000075 +:100B400000000000000000000000000000000000A5 +:100B5000000000000000000000000000024008004B +:100B6000000800000000000000000000000000007D +:100B7000002100000000000000080000000000004C :100B80000000000000000000000000000000000065 :100B90000000000000000000000000000000000055 -:100BA0000000000000000000000000000000000045 +:100BA0001000000000000000000000000000000035 :100BB0000000000000000000000000000000000035 :100BC0000000000000000000000000000000000025 :100BD0000000000000000000000000000000000015 @@ -73943,14 +73943,14 @@ :100C300000000000000000000000000000000000B4 :100C400000000000000000000000000000000000A4 :100C50000000000000000000000000000000000094 -:100C60000000000000000000200000000000000064 +:100C60000000000000000000000000000000000084 :100C70000000000000000000000000000000000074 :100C80000000000000000000000000000000000064 :100C90000000000000000000000000000000000054 :100CA0000000000000000000000000000000000044 -:100CB0000000000000000000000000000000000034 +:100CB0000000000000000000000000000000000232 :100CC0000000000000000000000000000000000024 -:100CD0000000000000000000000000000000000014 +:100CD000000000000000000008000000000000000C :100CE0000000000000000000000000000000000004 :100CF00000000000000000000000000000000000F4 :100D000000000000000000000000000000000000E3 @@ -73959,16 +73959,16 @@ :100D300000000000000000000000000000000000B3 :100D400000000000000000000000000000000000A3 :100D50000000000000000000000080008000000093 -:100D60000003000000000000000080008000000080 -:100D70000003000000000000000000000000000070 +:100D600000090000000000000000000080000000FA +:100D7000000900000000000000000000000000006A :100D80000000000000000000000000000000000063 :100D90000000000000000000000000000000000053 :100DA0000000000000000000000000000000000043 :100DB0000000000000000000000000000000000033 :100DC0000000000000000000000000000000000023 -:100DD000000000000000000000000000020002000F -:100DE00000000000000000000000000004000400FB -:100DF00000000001000000000000000000000000F2 +:100DD00000000000000000000000000010002000E3 +:100DE000000000000000000000000000020082007F +:100DF00000000008000000000000000000000000EB :100E000000000000000000000000000000000000E2 :100E100000000000000000000000000000000000D2 :100E200000000000000000000000000000000000C2 @@ -73976,7 +73976,7 @@ :100E400000000000000000000000000000000000A2 :100E50000000000000000000000000000000000092 :100E60000000000000000000000000000000000082 -:100E70000000000000000000000000000000000072 +:100E700000008200000000000000000000000000F0 :100E80000000000000000000000000000000000062 :100E90000000000000000000000000000000000052 :100EA0000000000000000000000000000000000042 @@ -73984,31 +73984,31 @@ :100EC0000000000000000000000000000000000022 :100ED0000000000000000000000000000000000012 :100EE0000000000000000000000000000000000002 -:100EF00000000000000000000000000000000000F2 +:100EF0000000000080000000000000000000000072 :100F000000000000000000000000000000000000E1 :100F100000000000000000000000000000000000D1 :100F200000000000000000000000000000000000C1 :100F300000000000000000000000000000000000B1 :100F4000000000000000000000020000000000009F :100F50000000000000000000000000000000000091 -:100F60000000004000000000110000000000000030 -:100F700000000040000000004000000000000000F1 +:100F60000000000000000000080000000000000079 +:100F7000000000000005000011000000000000005B :100F80000000000000000000000000000000000061 :100F90000000000000000000000000000000000051 :100FA0000000000000000000000000000000000041 :100FB0000000000000000000000000000000000031 :100FC0000000000000000000000000000000000021 :100FD0000000000000000000000000000000000011 -:100FE0000000000000000000000000000000000001 -:100FF00000000000000000000000010000000000F0 +:100FE0000000000000000000000001000000000000 +:100FF00000000000000000000000000000000000F1 :1010000000000000000000000000000000000000E0 :1010100000000000000000000000000000000000D0 :1010200000000000000000000000000000000000C0 :1010300000000000000000000000000000000000B0 :1010400000000000000000000000000000000000A0 :101050000000000000000000000000000000000090 -:10106000000000000000818100900900C8430000DA -:10107000000000000000818100900900C8430000CA +:10106000000000000000484200500A009009000003 +:10107000000000000000842100500A0090090000D8 :101080000000000000000000000000000000000060 :101090000000000000000000000000000000000050 :1010A0000000000000000000000000000000000040 @@ -74031,17 +74031,17 @@ :1011B00000000200000000000040000000000000ED :1011C000000000000000000000000200000000001D :1011D00000400000000000000000000000000000CF -:1011E0000000000002000000000000400040030872 -:1011F00010C0020002000000000000400040030890 -:1012000010C002000000000000000000020000000A +:1011E000000000000200000000000040004003205A +:1011F00004C0020002000000000000400040032084 +:1012000004C0020000000000000000000200000016 :10121000000000400000000000000000000000008E :1012200000000000000000000000000000000000BE :1012300000000000000000000000000000000000AE :10124000000000000000000000000000000000009E :10125000000000000000000000000000000000008E :101260000000000000000000000000000000080274 -:1012700000081000401000000000000000000802FC -:1012800000081000401000000000000000000000F6 +:1012700000200400401000000000000000000802F0 +:1012800000200400401000000000000000000000EA :10129000000000000000000000000000000000004E :1012A000000000000000000000000000000000003E :1012B000000000000000000000000000000000002E @@ -74083,114 +74083,114 @@ :1014F0000000000900000000000000909A000000B9 :101500000000000900000000000000909A000000A8 :1015100000000000000000000000000900000000C2 -:101520002000200020002000C0002000200000003B -:101530002000200020002000200088000000200063 -:1015400020002000200020002000200020000000BB -:1015500088002000200020002000840000002000DF -:101560000001200040002000200088002000200012 -:101570000000200088002000200020002000000043 -:1015800020002000200084002000200020002000F7 -:101590000000200020002000200020002000880003 -:1015A000200000000000000000000000000000001B +:10152000040004000400040000000000000040006B +:1015300000000000000000000000000000000000AB +:10154000400000000000000000000000000020003B +:10155000000000000000000000000000000000008B +:10156000000304000400040000000000000000006C +:10157000200000000000000000000000000000004B +:10158000000000000000000000000000000040001B +:10159000200000000000000000000000000000002B +:1015A000000080008000800080000000000000003B :1015B000000000000000000000000000000000002B :1015C000000000000000000000000000000000001B :1015D000000000000000000000000000000000000B -:1015E00000000000000000000000000000000000FB +:1015E000000000008000800080000000000000007B :1015F00000000000000000000000000000000000EB :1016000000000000000000000000000000000000DA :1016100000000000000000000000000000000000CA :1016200000000000000000000000000000000000BA -:1016300000000000010002000200010000000000A4 -:101640000000000000000100000000000000000099 -:10165000000000000000000000000000000000008A +:1016300000000000000000000000000000000000AA +:101640000000000000000000000000000400040092 +:101650000400040000000000000000000000000082 :10166000000000000000000000000000000000007A :10167000000000000000000000000000000000006A :10168000000000000000000000000000000000005A :10169000000000000000000000000000000000004A -:1016A00000000000000000000000000000880000B2 -:1016B0000000000000000200800080000200000026 -:1016C000000000000088000004000000000000008E -:1016D000000000000000000000000000000000000A -:1016E00000000000000000000000000000000000FA -:1016F00000000000000000000000000000000000EA -:1017000000000000000000000000000000000000D9 -:1017100000000000000000000000000000000000C9 -:101720000000000000004000000000000000000079 +:1016A000000000001000000000000000000000002A +:1016B000000400080084000000000000000000009A +:1016C0000000000000040000000000000000800096 +:1016D0008000800480000000000000000000000086 +:1016E00000000000000800002000000000000000D2 +:1016F00000000000000400040000000000004000A2 +:1017000000000000000000080000000000000000D1 +:1017100000000000000800000000000000000000C1 +:101720000000000000000084000000000000000035 :1017300000000000000000000000000000000000A9 -:101740000000000000000000000000000000000099 +:101740000000000000000008000000000000000091 :101750000000000000000000000000000000000089 -:101760000000000000000000000000000000000079 +:101760000000000000000000000000000004000075 :101770000000000000000000000000000000000069 :101780000000000000000000000000000000000059 :101790000000000000000000000000000000000049 :1017A0000000000000000000000000000000000039 -:1017B0000000000000000000000000000000000029 +:1017B0000000000000001000000000000000000019 :1017C0000000000000000000000000000000000019 -:1017D00000000000000021000000000000000000E8 -:1017E00000000000000000000000000000000800F1 -:1017F00000000000080000000000000000000000E1 -:101800000000000041000300000000000000210073 -:1018100000000000000000000000000000000000C8 -:101820000000000000000000000000000000820036 -:10183000000000000800820000000000000082009C -:101840000000110000000000000000000400000083 -:101850000400820000000000000000000000000002 -:1018600000008200A000080000000000000000004E -:10187000C0000000820000008200000000000000A4 -:1018800000000000820000000000100000000000C6 -:10189000000000008200000000008200100800002C -:1018A0000000000082000000000000008200000034 +:1017D00000000000000000081008000000000000E9 +:1017E00000000000000000000000000000000000F9 +:1017F00000000000000000001008000010000000C1 +:1018000000000000000000000000000000000000D8 +:1018100000000000000000000000000810000000B0 +:101820000000000000000000000000400000000078 +:101830000000000008000800080008000000000088 +:101840000000000082008200820082000800000088 +:10185000080908000000A000000000008200A000AD +:101860008200820000000000000000000000000074 +:101870000000000000000000000000000000000068 +:101880000000000000000000000000000000000058 +:101890000000000000000000000000000000000048 +:1018A0000000000000000000000000000000000038 :1018B0000000000000000000000000000000000028 -:1018C0000000000004000300000000000000800091 -:1018D0000000800000000000000000000000000088 -:1018E00000000300000000000000000000000000F5 -:1018F00000000000000000000000000000000000E8 +:1018C0000000000000000000000000000000000018 +:1018D0000000000000000000000000000000000008 +:1018E00000000000000000000000000000000000F8 +:1018F00010001000000000000000000000000000C8 :1019000000000000000000000000000000000000D7 -:1019100000000000000000000000000000000000C7 +:1019100000000000080000000000000000000000BF :1019200000000000000000000000000000000000B7 -:101930000000000000000000820000000000000025 +:1019300000000000000000000000000000000000A7 :101940000000000000000000000000000000000097 -:101950000000000000000000000000000000000087 -:101960000000000000000000000000001000000067 +:101950000000000010000000000000000000000077 +:101960000000000000000000000000000000000077 :101970000000000000000000000000000000000067 -:10198000000000000800000000000000000000004F -:101990000000000000000000000000000000000047 +:101980000000000000000000000000000000000057 +:101990000000080008000000000000000000000037 :1019A0000000000000000000000000000000000037 :1019B0000000000000000000000000000000000027 :1019C0000000000000000000000000000000000017 :1019D0000000000000000000000000000000000007 :1019E00000000000000000000000000000000000F7 :1019F00000000000000000000000000000000000E7 -:101A000000000000000000000000000000000000D6 -:101A100000000000000000000800000000000000BE +:101A000000000000000000000000000000020000D4 +:101A100000000000000000000000000000000000C6 :101A200000000000000000000000000000000000B6 :101A300000000000000000000000000000000000A6 -:101A4000000000000000000000000000000008008E -:101A50000000000000000000100000000000000076 -:101A6000000000000800000000000000000000006E -:101A70000000000000000000000000000000000066 +:101A40000000000000000000000000000000000096 +:101A50000000000000000800000000000000C000BE +:101A600000000000000000210000000000008200D3 +:101A700000000000000000000000000000800000E6 :101A80000000000000000000000000000000000056 -:101A90001000000000000000000000000000000036 +:101A90000000000000000000000000000000000046 :101AA0000000000000000000000000000000000036 :101AB0000000000000000000000000000000000026 :101AC0000000000000000000000000000000000016 :101AD0000000000000000000000000000000000006 :101AE00000000000000000000000000000000000F6 -:101AF00000000000000000000000000000000000E6 +:101AF00000000000000000000000000000000020C6 :101B000000000000000000000000000000000000D5 :101B100000000000000000000000000000000000C5 -:101B200000000000000000000000000000000000B5 +:101B20004100000000004100000000000000000033 :101B300000000000000000000000000000000000A5 -:101B40000000000000000000000000900000000005 -:101B50000000000000000000010000200000000064 +:101B40000000000000000000000000000000000095 +:101B50000000000000000000000000000000000085 :101B60000000000000000000000000000000000075 :101B70000000000000000000000000000000000065 :101B80000000000000000000000000000000000055 :101B90000000000000000000000000000000000045 :101BA0000000000000000000000000000000000035 :101BB0000000000000000000000000000000000025 -:101BC0000000000000000000000000000080000095 -:101BD000000000000000000000000900008000007C +:101BC0000000000000000000000000000000000015 +:101BD0000000000000000000000000000000000005 :101BE00000000000000000000000000000000000F5 :101BF00000000000000000000000000000000000E5 :101C000000000000000000000000000000000000D4 @@ -74198,99 +74198,99 @@ :101C200000000000000000000000000000000000B4 :101C300000000000000000000000000000000000A4 :101C40000000000000000000000000000000000094 -:101C50000000000000000000000000000000008004 +:101C50000000000000000000000000000000000084 :101C60000000000000000000000000000000000074 :101C70000000000000000000000000000000000064 -:101C80000000000000000000000000000000000054 +:101C800000800000000000000000000000000000D4 :101C90000000000000000000000000000000000044 :101CA0000000000000000000000000000000000034 :101CB0000000000000000000000000000000000024 -:101CC0000000000000000000000000000000000014 -:101CD000009000000008000000000000000000006C -:101CE00000040000000000000000000000000000F0 +:101CC0000008000000080000000000000000000004 +:101CD0000000000000000000000000000000000004 +:101CE0000000000000000000004000000040000074 :101CF00000000000000000000000000000000000E4 -:101D000000000000000000000000000000000000D3 +:101D0000000000040000004000000000000000008F :101D100000000000000000000000000000000000C3 :101D200000000000000000000000000000000000B3 :101D300000000000000000000000000000000000A3 -:101D40000000000000000000000000000000000093 -:101D500000000000029000000000000000000000F1 -:101D60000100002040000100000000000000000011 +:101D40000000000020000000000000000000000073 +:101D50000000000000000000000000000000000083 +:101D60000000000000000000000000004000000033 :101D70000000000000000000000000000000000063 -:101D80000000000000000000000000000000000053 +:101D80000000000000004000000000000000000013 :101D90000000000000000000000000000000000043 :101DA0000000000000000000000000000000000033 :101DB0000000000000000000000000000000000023 -:101DC0000000000000000000000000000000000013 -:101DD00000002000000080800000000000000000E3 -:101DE0000000410000008000090000000000000029 +:101DC00000002000000000000000000000000000F3 +:101DD0000000000000000000000000000000000003 +:101DE00000000000000000000000400000000000B3 :101DF00000000000000000000000000000000000E3 -:101E000000000000000000000000000000000000D2 +:101E00000000000040000000000000000000000092 :101E100000000000000000000000000000000000C2 :101E200000000000000000000000000000000000B2 :101E300000000000000000000000000000000000A2 -:101E40000000000000000000000000000000000092 -:101E500000000000001180000000000000000000F1 -:101E60000000000000400000000000000000000032 +:101E4000000000000000000800000000000000008A +:101E50000000000000000000000000000000000082 +:101E60000000000000000000000000000000000969 :101E70000000000000000000000000000000000062 -:101E80000000000000000000000000000000000052 +:101E8000000000000000004000080000000000000A :101E90000000000000000000000000000000000042 :101EA0000000000000000000000000000000000032 :101EB0000000000000000000000000000000000022 :101EC0000000000000000000000000000000000012 -:101ED0000000000000000001200000880000000059 +:101ED0000000000000000000000000000000000002 :101EE00000000000000000000000000000000000F2 :101EF00000000000000000000000000000000000E2 :101F000000000000000000000000000000000000D1 :101F100000000000000000000000000000000000C1 :101F200000000000000000000000000000000000B1 :101F300000000000000000000000000000000000A1 -:101F40000000000000000000000000000000000091 -:101F5000000000000000000000000000070000007A -:101F600000000000000000000000000007008400E6 -:101F70000000000000000000000000000000000061 -:101F80000000000000000000000000000000000051 +:101F40000000000000000000000000004000000051 +:101F50000000000000000000000000000000000081 +:101F60000000000000000000000000000000000071 +:101F70000006000007000000000000000000000054 +:101F800000000000000000000000008100000700C9 :101F90000000000000000000000000000000000041 :101FA0000000000000000000000000000000000031 :101FB0000000000000000000000000000000000021 :101FC0000000000000000000000000000000000011 -:101FD0000000000000000000000000FF000000FF03 -:101FE0000000000000000000000000000000F0F011 +:101FD0000000000000000000000000000000000001 +:101FE00000000000000000000000000000000000F1 :101FF00000000000000000000000000000000000E1 :1020000000000000000000000000000000000000D0 :1020100000000000000000000000000000000000C0 :1020200000000000000000000000000000000000B0 :1020300000000000000000000000000000000000A0 :102040000000000000000000000000000000000090 -:1020500000000000000000000000000000FF000081 -:1020600000FF000000000000000000000000000071 -:10207000F0F0000000000000000000000000000080 +:102050000000000000000000000000000000000080 +:102060000000000000000000000000000000000070 +:102070000000000000000000000000000000000060 :102080000000000000000000000000000000000050 :102090000000000000000000000000000000000040 :1020A0000000000000000000000000000000000030 :1020B0000000000000000000000000000000000020 :1020C0000000000000000000000000000000000010 :1020D0000000000000000000000000000000000000 -:1020E000FF000000FFFF00000000000000000000F3 -:1020F000FF000000000000000000000000000000E1 +:1020E00000000000000000000000000000000000F0 +:1020F00000000000000000000000000000000000E0 :1021000000000000000000000000000000000000CF :1021100000000000000000000000000000000000BF :1021200000000000000000000000000000000000AF :10213000000000000000000000000000000000009F :10214000000000000000000000000000000000008F :10215000000000000000000000000000000000007F -:102160000000FF0000000000000000000000000070 -:102170000000FF0000000000000000000000000060 +:10216000000000000000000000000000000000006F +:10217000000000000000000000000000000000005F :10218000000000000000000000000000000000004F :10219000000000000000000000000000000000003F :1021A000000000000000000000000000000000002F :1021B000000000000000000000000000000000001F :1021C000000000000000000000000000000000000F -:1021D00000000000000000000000000000000000FF -:1021E000000015002A00054000A8000000000000C3 -:1021F000000005002A00054000000000000000006B -:1022000000000000000000000000000000000000CE -:1022100000000000000000000000000000000000BE +:1021D000000005000A08050000A000000000000043 +:1021E00000000000000000000000000000000000EF +:1021F0000000000000000000000005000A280500A3 +:1022000000A000000000000000000000000000002E +:102210000000000005000A28050000A000000000E2 :1022200000000000000000000000000000000000AE :10223000000000000000000000000000000000009E :10224000000000000000000000000000000000008E @@ -74326,143 +74326,143 @@ :1024200000000000000000000000000000000000AC :10243000000000000000000000000000000000009C :10244000000000000000000000000000000000008C -:10245000000000000000000000000000000020005C -:1024600020002000400000002000040000002000A8 -:1024700020002000200020002000200084002000F8 -:10248000200020002000000020002000000020008C -:1024900020002000200020008400200000022000F6 -:1024A0002000200020000400000020002000020086 -:1024B000200020002000200020002000200020001C -:1024C00020000000200088000000200020002000E4 -:1024D00000000000200020002000200088000000F4 -:1024E00000000000000020000400000000000000C8 +:10245000000000000000000000000000000000007C +:10246000000000000000000000000000000000006C +:1024700000002000000000000000400000000000FC +:102480000000000000000000000000000002C0008A +:1024900000002000000000000000200000000000FC +:1024A000000000000000000000000000000000002C +:1024B00000000000200000000000000020000000DC +:1024C00000000000000000000000A000000000006C +:1024D00000000000200000000000000000000000DC +:1024E00000000000000000000000000000000000EC :1024F00000000000000000000000000000000000DC -:1025000000000000000000000000000000000400C7 +:1025000000000000000000000000000000000000CB :1025100000000000000000000000000000000000BB -:102520000000000000000000000004004000000067 -:10253000800000000000000000000000000000001B -:102540000000000020000000000004000000000067 -:1025500000002000200000000000000040000000FB -:10256000000000000000000000000000000000006B +:1025200000000000000000000000000000000000AB +:10253000000000000000000000000000000000009B +:10254000000000000000000000000000000000008B +:10255000000000000000000000000000000000007B +:102560000000000000000003000000000000000068 :10257000000000000000000000000000000000005B -:10258000000000000000000000000000000000004B +:102580000000000000000000000000080000000043 :10259000000000000000000000000000000000003B -:1025A000000000000000000000000000000000002B +:1025A000000000000000000000100000000000001B :1025B000000000000000000000100000000000000B :1025C000000000000000000000000000000000000B -:1025D00000100000000000000000000000000000EB -:1025E00000000000000000000008000000080000DB -:1025F00000080000000000000008000000000000CB -:1026000000000000000000000008000000020000C0 -:102610000010000000000000008400000000000026 -:10262000000000000000000000000010000000009A -:10263000000000000000000000000000000000009A -:102640000000000000000000000000080000000082 -:10265000000000000000000000000000000000007A -:102660000000000000000000000000000003000067 +:1025D00000000000000000000000000000000000FB +:1025E00000000000000000000408000000000000DF +:1025F0000000000000080000008200000000000051 +:10260000040000000000000800840000000000003A +:102610000000000000040000008200000000000034 +:10262000000000000000000000040000400000085E +:102630000000000000000000000000080000000092 +:1026400000000000000000000000000000000090FA +:102650000000000000000000000000080000000072 +:10266000000000000000000000000000000000006A :10267000000000000000000000000000000000005A :10268000000000000000000000000000000000004A -:10269000000000000000000000000000000000003A -:1026A0000000000000000000000000000008000022 -:1026B0000000000000000000C0000000000000005A +:102690000000000000000000000000080000000032 +:1026A000000000000000000000000000000000002A +:1026B0000000000000000000000000000000880092 :1026C000000000000000000000000000000000000A -:1026D00000000000000000000000000000000000FA -:1026E00000000000000021000000000000002100A8 +:1026D00000000000900000000000000084000000E6 +:1026E00000000000000000000000000000000000EA :1026F00000000000000000000000000000000000DA -:1027000003000000000000000000000000000000C6 +:1027000000000000000000000000000000000000C9 :1027100000000000000000000000000000000000B9 :1027200000000000000000000000000000000000A9 :102730000000000000000000000000000000000099 -:102740000000000000000000000000000000000089 +:1027400000000000000000000090000000000000F9 :102750000000000000000000000000000000000079 -:102760000000000000000800000000000000000061 -:102770000000080000000800000000000000000049 -:1027800000000000000082000000000000000000C7 -:1027900000000000000082000000000000000000B7 -:1027A000000000000800820000000000000000009F -:1027B000000008000000000082000000000000008F -:1027C0000100020000000000830000000000000083 -:1027D000000008000000000082000000000000006F -:1027E0000000820000000000000000000000000067 +:102760000000000000000000000000000000000069 +:102770000000000000000000000000000000000059 +:102780000000000000000000000000000000000049 +:102790000000000000000010000000000000000029 +:1027A0000000000000000000000000000000000029 +:1027B0000000000000000000000000000000000019 +:1027C0000000000000000000000000000000000009 +:1027D00000000000000000000000000000000000F9 +:1027E00000000000000000000800000000000000E1 :1027F00000000000000000000000000000000000D9 :1028000000000000000000000000000000000000C8 :1028100000000000000000000000000000000000B8 -:1028200000000000000000000000000000000000A8 -:102830000000000000000000000000000000000098 -:102840000000040080000000000004000000000000 -:102850000000000000000000000000000000000078 -:10286000000800080008000000A0000000000000B0 +:10282000000000000000000000000000090000009F +:102830000000000040004000000000000000000018 +:102840000000000000000000000000000000050083 +:102850000000000000000000110011000000000056 +:102860000000210000000000000000000000000047 :102870000000000000000000000000000000000058 -:102880000000001000000000000000000000000038 +:102880000000000000000000000000000000000048 :102890000000000000000000000000000000000038 :1028A0000000000000000000000000000000000028 -:1028B0000000000000000000000082000000000096 -:1028C00000000020000000000000002000000000C8 -:1028D00000000000000000000000000000000000F8 -:1028E00000000000000000000000000000080000E0 -:1028F00000000000000000000000000000000800D0 -:102900000000000000840000000000000000000043 +:1028B0000000000000000000000000000000000018 +:1028C0000000000000000000000000000000000008 +:1028D00000000000000000000000400000000000B8 +:1028E0000000000000008400000000000000000064 +:1028F00000000000000000000000000000000000D8 +:1029000000000000000000000000000000000000C7 :1029100000000000000000000000000000000000B7 :1029200000000000000000000000000000000000A7 :102930000000000000000000000000000000000097 -:102940000000000000010000000000000001000085 +:102940000000000000000000000000000000000087 :102950000000000000000000000000000000000077 :102960000000000000000000000000000000000067 -:10297000080000000000000000000000000000004F -:102980000000000000000000000000000000000245 +:102970000000000000000000000000000000000057 +:102980000000000000000000000000000000000047 :102990000000000000000000000000000000000037 :1029A0000000000000000000000000000000000027 :1029B0000000000000000000000000000000000017 :1029C0000000000000000000000000000000000007 :1029D00000000000000000000000000000000000F7 -:1029E00000000000000000000000000000000000E7 -:1029F00000000000000000000000000000000000D7 -:102A000000000000000000000000000000000000C6 +:1029E00010000000000000000000000000000000D7 +:1029F00000000000000000080000000000000000CF +:102A000000000000000000000008000000000000BE :102A100000000000000000000000000000000000B6 -:102A200000000000000000000000000000000000A6 +:102A20000000000000000000052000000000000081 :102A30000000000000000000000000000000000096 -:102A40000000000000000000000000000000000086 +:102A4000000000000000080000000000000000007E :102A50000000000000000000000000000000000076 -:102A60000000000000820000000000A00000000044 +:102A60000002000000004100000000000000000023 :102A70000000000000000000000000000000000056 :102A80000000000000000000000000000000000046 :102A90000000000000000000000000000000000036 :102AA0000000000000000000000000000000000026 :102AB0000000000000000000000000000000000016 -:102AC0000000000000000000900000000000000076 -:102AD0009000000000000000000000000000000066 +:102AC0000000000000000000000000000000000006 +:102AD00000000000000000000000000000000000F6 :102AE00000000000000000000000000000000000E6 :102AF00000000000000000000000000000000000D6 :102B000000000000000000000000000000000000C5 :102B100000000000000000000000000000000000B5 :102B200000000000000000000000000000000000A5 :102B30000000000000000000000000000000000095 -:102B400000000000000000001100800000000000F4 -:102B500011008000000000000000000000000000E4 +:102B40000000000000000000000000000000000085 +:102B50000000000000000000000000000000000075 :102B60000000000000000000000000000000000065 :102B70000000000000000000000000000000000055 :102B80000000000000000000000000000000000045 :102B90000000000000000000000000000000000035 :102BA0000000000000000000000000000000000025 :102BB0000000000000000000000000000000000015 -:102BC0000000000000000000000000000080000085 -:102BD0000080000000800000008000000000000075 +:102BC0000000000000000000000000000000000005 +:102BD00000000000000000000000000000000000F5 :102BE00000000000000000000000000000000000E5 :102BF00000000000000000000000000000000000D5 :102C000000000000000000000000000000000000C4 :102C100000000000000000000000000000000000B4 :102C200000000000000000000000000000000000A4 :102C30000000000000000000000000000000000094 -:102C40000000000000000000000000000000002064 -:102C5000000000C000000020000000C000000000D4 +:102C40000000000000000000000000000000000084 +:102C50000000000000000000000000000000000074 :102C60000000000000000000000000000000000064 :102C70000000000000000000000000000000000054 :102C80000000000000000000000000000000000044 :102C90000000000000000000000000000000000034 :102CA0000000000000000000000000000000000024 :102CB0000000000000000000000000000000000014 -:102CC0000000000000000000000000000000910073 -:102CD0000088880001004100008888000100000091 +:102CC0000000000000000000000000000000000004 +:102CD00000000000000000000000000000000000F4 :102CE00000000000000000000000000000000000E4 :102CF00000000000000000000000000000000000D4 :102D000000000000000000000000000000000000C3 @@ -74470,7 +74470,7 @@ :102D200000000000000000000000000000000000A3 :102D30000000000000000000000000000000000093 :102D40000000000000000000000000000000000083 -:102D500041000080000009004100008000000900DF +:102D50000000000000000000000000000000000073 :102D60000000000000000000000000000000000063 :102D70000000000000000000000000000000000053 :102D80000000000000000000000000000000000043 @@ -74478,7 +74478,7 @@ :102DA0000000000000000000000000000000000023 :102DB0000000000000000000000000000000000013 :102DC0000000000000000000000000000000000003 -:102DD00000000011000000800000001100000080D1 +:102DD00000000000000000000000000000000000F3 :102DE00000000000000000000000000000000000E3 :102DF00000000000000000000000000000000000D3 :102E000000000000000000000000000000000000C2 @@ -74486,24 +74486,24 @@ :102E200000000000000000000000000000000000A2 :102E30000000000000000000000000000000000092 :102E40000000000000000000000000000000000082 -:102E50000000000000010000004000000001000030 -:102E60000040000000000000000000000000000022 +:102E50000000000000000000000000000000000072 +:102E60000000000000000000000000000000000062 :102E70000000000000000000000000000000000052 :102E80000000000000000000000000000000000042 :102E90000000000000000000000000000000000032 :102EA0000000000000000000000000000000000022 :102EB0000000000000000000000000000000000012 :102EC0000000000000000000000000000000000002 -:102ED0000000000000000000000007008221000048 -:102EE0000000070082210000000000000000000038 +:102ED00000000000000000000000000000000000F2 +:102EE00000000000000000000000000000000000E2 :102EF00000000000000000000000000000000000D2 :102F000000000000000000000000000000000000C1 :102F100000000000000000000000000000000000B1 :102F200000000000000000000000000000000000A1 :102F30000000000000000000000000000000000091 :102F40000000000000000000000000000000000081 -:102F50000000000000000000000000000000F0F091 -:102F6000000000000000F0F0000000000000000081 +:102F50000000000000000000000000000000000071 +:102F60000000000000000000000000000000000061 :102F70000000000000000000000000000000000051 :102F80000000000000000000000000000000000041 :102F90000000000000000000000000000000000031 @@ -74511,7 +74511,7 @@ :102FB0000000000000000000000000000000000011 :102FC0000000000000000000000000000000000001 :102FD00000000000000000000000000000000000F1 -:102FE000F0F0000000000000F0F000000000000021 +:102FE00000000000000000000000000000000000E1 :102FF00000000000000000000000000000000000D1 :1030000000000000000000000000000000000000C0 :1030100000000000000000000000000000000000B0 @@ -74526,8 +74526,8 @@ :1030A0000000000000000000000000000000000020 :1030B0000000000000000000000000000000000010 :1030C0000000000000000000000000000000000000 -:1030D0000000000000000000000000000000FFFFF2 -:1030E0000000FFFF0000FFFF0000FFFF00000000E6 +:1030D00000000000000000000000000000000000F0 +:1030E00000000000000000000000000000000000E0 :1030F00000000000000000000000000000000000D0 :1031000000000000000000000000000000000000BF :1031100000000000000000000000000000000000AF @@ -74543,8 +74543,8 @@ :1031B000000000000000000000000000000000000F :1031C00000000000000000000000000000000000FF :1031D00000000000000000000000000000000000EF -:1031E000000005002A00054000A805002A0005404F -:1031F00000A8000000000000000000000000000027 +:1031E00000000000000000000000000000000000DF +:1031F00000000000000000000000000000000000CF :1032000000000000000000000000000000000000BE :1032100000000000000000000000000000000000AE :10322000000000000000000000000000000000009E @@ -74578,178 +74578,178 @@ :1033E00000000000000000000000000000000000DD :1033F00000000000000000000000000000000000CD :1034000000000000000000000000000000000000BC -:10341000000000000000000000000000000040006C -:1034200040000000200020002000200000000000DC -:103430002000000000002000200004000000200008 -:1034400020000000200000002000200000000000FC -:103450008800400000002000200000022000000042 -:103460002000880000000000000020002000000074 -:103470000000C0000000000020000000000000006C -:1034800020002000C00000000000C000200000005C -:10349000000000000000000020000000000000000C -:1034A00000002000000000000000000000000000FC -:1034B00020000000000000000000000000000000EC -:1034C00000000000000000002000000000000400D8 -:1034D00000000000000000000000000000000000EC -:1034E00000000000000000002000100000000000AC -:1034F00000000000000000000000000020000000AC -:10350000000000000000000000000000200000009B +:10341000000000000000000000000000A00000000C +:103420000000000090000000880090000000A00054 +:10343000A0000800000200001000C000200088006A +:103440008800000020000000200220000000200072 +:10345000C000000000000008200000032000000061 +:103460000000880084000000000000000000000050 +:1034700088002000000088001004C0A000000000A8 +:1034800000000400880088000000C0000000000068 +:1034900020002000000000002000C000000000000C +:1034A00000000000000000000000000021000000FB +:1034B00041000000000000040000200000000000A7 +:1034C00000000000000000000000000421002100B6 +:1034D000000000000000000010000000000040009C +:1034E00000000000100000000000000000000000CC +:1034F000000000000000000000004001001140003A +:1035000000020000000000000000000000000000B9 :1035100000000000000000000000000000000000AB :10352000000000000000000000000000000000009B -:10353000000000000000000000000000000000008B -:10354000000000000000000000000000000000007B -:10355000000000000000000000000000000000006B +:103530000000000000000000000010004104000036 +:103540000000000000000000000000000003000078 +:10355000000000000000000000001000210000003A :10356000000000000000000000000000000000005B -:10357000000000000000000000000000000000004B +:10357000000000000000000000000000108020009B :10358000000000000000000000000000000000003B -:10359000000000000000000000000000000021000A -:1035A000000000000000000000000000000000001B -:1035B000000000000000000000000000000000000B -:1035C00000000000000000000000000000000000FB -:1035D00000000000000000000000000000000000EB -:1035E00000000000000000000000000000000000DB -:1035F00000000000000000000000000000000000CB -:1036000000000000000000000000000000000000BA -:1036100000000000000000000000000000000000AA -:10362000900000000000000000000000000000000A -:103630000000000000000000C000000000000000CA -:10364000000000000000000000000000000000007A -:10365000000000000000000000000000000000006A -:10366000000000000000000000000000000000005A -:10367000000000000000000000000000000000004A +:10359000000000000000000000000000100010000B +:1035A000000000000000000000080084000000008F +:1035B0000000000000000004000000848000900172 +:1035C0000000000000000084000200900000009055 +:1035D0000084008400900000000000008000900043 +:1035E00000000008000000000008000000000000CB +:1035F000000800080000000000000000000080201B +:1036000080840084000000000084000000000000AE +:103610000082009000000000000000000000800018 +:103620008000002108218821840800200008002053 +:103630000008000800080008000000000003002047 +:10364000002100210000000000080000000300002D +:103650000008000800000000000300000000000057 +:103660000000000000030021040000000000000032 +:103670000000000000000011000000000000000039 :10368000000000000000000000000000000000003A -:1036900000000000000000000000002100210000E8 -:1036A00000210008000000000000000000000000F1 -:1036B000000000000000000000000000000000000A -:1036C00000000000000000000000000000000000FA -:1036D00000000000000000000000000000000000EA -:1036E00000000000000000000000000000000000DA +:1036900000000011000900000000001100000000FF +:1036A000000000000000000000000000000000001A +:1036B00000000020000000000000000000000000EA +:1036C00000000020000000000000000000000400D6 +:1036D00000000800000000000000000000000000E2 +:1036E00000000008000000000000000000000000D2 :1036F00000000000000000000000000000000000CA -:1037000000000000000000000000000000000000B9 -:1037100000000000000000000000000000000000A9 +:1037000003000000000000000000000000000000B6 +:103710000000000004004100000000000000000064 :103720000000000000000000000000000000000099 -:103730000000000000000000000000000000000089 -:103740000000000000000000000000000400000075 -:103750000000000000000000000000000800000061 -:103760000000000000000000000000000000080051 -:103770000000000000000000000000000000080041 -:1037800000000000000000000000000000008200B7 -:103790000000000000000000000000000000000029 -:1037A0000000000000000000000000000000000019 +:103730000000000000000000000008001000000071 +:1037400000000000C00000000000000000000000B9 +:10375000A000000082000011C000C00008000000AE +:10376000820000008320000084000800C0000000E8 +:1037700000000800000000000800820000000000B7 +:10378000A000C000000000088200820000000800C5 +:1037900000000000C000000082008200C000820023 +:1037A000000008008400C084000000000000000049 :1037B0000000000000000000000000000000000009 :1037C00000000000000000000000000000000000F9 :1037D00000000000000000000000000000000000E9 -:1037E00000000000000000000000000000000000D9 +:1037E0000000000000004001000000000000000098 :1037F00000000000000000000000000000000000C9 -:1038000000000000000000000000000000000000B8 -:1038100000000000000000000000000000000000A8 -:103820000800000000000000000000000000000090 -:103830000000080000000000000000000000000080 -:103840000000000000000000000000000000000078 -:103850000000000000000000000000000000000068 -:103860000000000000000000000000020000000056 -:103870000000000000000000000000000000000048 -:103880000000000000000000000000000800000030 -:103890000000000000009000000000000000004058 -:1038A00000400000000000000000000000000000D8 +:1038000000000000000000000001000000000000B7 +:1038100000000000000005000000000000000000A3 +:103820000000000000000000000300000003000092 +:10383000000020080000000000000400000000005C +:103840000000021104000400000004090000000050 +:103850000000000004004000C00000040000000060 +:10386000000008009000000410030000A000000009 +:10387000081100000000000084000811000000048E +:1038800008000000000040000004000008000000E4 +:103890000000A000080090000000C00090000000A0 +:1038A000000088000000000082000000000000000E :1038B0000000000000000000000000000000000008 :1038C00000000000000000000000000000000000F8 :1038D00000000000000000000000000000000000E8 :1038E00000000000000000000000000000000000D8 :1038F00000000000000000000000000000000000C8 -:1039000000000000038400000000000000840000AC -:1039100000000000000000000000000000000000A7 +:1039000000000000000000000000000004000400AF +:103910000000000000000000000000000020000087 :103920000000000000000000000000000000000097 -:103930000000000000020000000000000000000085 -:103940000000000000000000000000000000000077 -:103950000000000000000000000000000000000067 -:103960000000000000000000000000000000000057 -:103970000000000000000000000000000000000047 -:10398000000000000000000008000000000000022D -:103990000000000000000002000000000000C00065 -:1039A00000000008000000080005002100000000E1 -:1039B0000000000000000000000000000000050002 -:1039C00000000000000000000000000005000000F2 -:1039D00000000000000000000000000005000500DD -:1039E00000000000100000000000000000000000C7 +:103930000000840000000000000000000000000003 +:10394000000000000000000500000000000000086A +:10395000C0008200820000000000000000000000A3 +:103960000000000000001000000000000000000047 +:10397000000082008200080000000000000000003B +:10398000040000000000000000000000000009002A +:103990000000000000000400820082000000880097 +:1039A000000000000000840000000000000008008B +:1039B0000000000000000300000000000000000004 +:1039C00000000000000000000000000000000000F7 +:1039D00000000000200000000000000000000000C7 +:1039E00000000000000000000000000000000000D7 :1039F00000000000000000000000000000000000C7 :103A000000000000000000000000000000000000B6 -:103A10000000210000000000000000000000000085 +:103A10004000000000000000000000000000000066 :103A20000000000000000000000000000000000096 -:103A30000000000000000000000000000000000086 -:103A40000000000000000000000000000000000076 +:103A3000000000000000000000010000080000007D +:103A40000082000100000010C09000000000000192 :103A50000000000000000000000000000000000066 -:103A60000000000000000000000000000000000056 +:103A600000880000C1000040C0820000C0000001CA :103A70000000000000000000000000000000000046 -:103A80000000000000000000000000000000000036 -:103A90000000000000010001000100C00001000161 -:103AA00000C0018900000101000400400001000184 -:103AB00000C1000000000000000000000000000045 -:103AC00000000000000000000000000000000000F6 -:103AD00000000000000000000000000000000000E6 -:103AE00000000000000000000000000000000000D6 -:103AF00000000000000000000000000000000000C6 -:103B000000000000000000000000000000000000B5 -:103B1000000000000000004100410041008200411F -:103B200000410082044100114041000000000041BA -:103B300000410085000000000000000000000000BF -:103B40000000000000000000000000000000000075 -:103B50000000000000000000000000000000000065 -:103B60000000000000000000000000000000000055 -:103B70000000000000000000000000000000000045 -:103B80000000000000000000000000000000000035 -:103B90000000000000000000410003000000008061 -:103BA0004100890000000800840002000010850028 -:103BB0004100C10000800000000000000000000083 -:103BC00000000000000000000000000000000000F5 -:103BD00000000000000000000000000000000000E5 -:103BE00000000000000000000000000000000000D5 -:103BF00000000000000000000000000000000000C5 -:103C000000000000000000000000000000000000B4 -:103C100000000000000000000000010001000000A2 -:103C200000C00100C00000000100400010C0000200 -:103C3000C0001100C100008410100000000000004E -:103C40000000000000000000000000000000000074 -:103C50000000000000000000000000000000000064 -:103C60000000000000000000000000000000000054 +:103A8000000101020101C1000040C0820000C0002D +:103A90000001000000000000000000000000900095 +:103AA00000000088000100000020820400000000E7 +:103AB00000010000000000000000004000000000C5 +:103AC00000200880104021000080800000000000DD +:103AD000004100000000000000000003080000009A +:103AE0000041080003028800008080800000800000 +:103AF00000030000000000000000000000030000C0 +:103B000000000010108020108800008080800000DD +:103B10008000000300000000000000000020000002 +:103B2000000000200500401021000000008000007F +:103B3000000000410000000008000000000000003C +:103B40001000000010000200410000080300000007 +:103B500000000000802000000800000000000000BD +:103B600005000000100008000800000003008000AD +:103B7000000000808010000000000800000000002D +:103B800000004000000011000200020000000300DD +:103B90008000000000808010000040000000000055 +:103BA0000000020000000300900005000000030078 +:103BB0000000000000008002000000000000000083 +:103BC00000000000000001000800100200000000DA +:103BD000020000000000C000000001000000000022 +:103BE000000000000000010010001088000001002B +:103BF0001000000000C08200000000000100000072 +:103C000000000000000000000000410021880000CA +:103C100001001000000000C0820100000000000050 +:103C200000000000010000000100040090080000F6 +:103C30000000900000000000C00100000000000033 +:103C400000000000000002018800008800008900D8 +:103C50000100000000000001000000000000000062 +:103C6000000000000000000004000010000001003F :103C70000000000000000000000000000000000044 -:103C80000000000000000000000000000000000034 -:103C900000000000000000000000000000C0000163 -:103CA000C0C100000000000100C0020200090001C4 -:103CB00000C1000000000001000000000000000042 -:103CC00000000000000000000000000000000000F4 -:103CD00000000000000000000000000000000000E4 -:103CE00000000000000000000000000000000000D4 -:103CF00000000000000000000000000000000000C4 -:103D000000000000000000000000000000000000B3 -:103D10000000000000000000000000000000008023 -:103D2000004180C10000000000410084008900C102 -:103D3000004100C100000000004100100000000030 -:103D40000000000000000000000000000000000073 -:103D50000000000000000000000000000000000063 -:103D60000000000000000000000000000000000053 -:103D70000000000000000000000000000000000043 -:103D80000000000000000000000000000000000033 -:103D90000000000000000000000000000000000023 -:103DA000C100800080C100004102800090004100FD -:103DB000C1418000801000004100000080004100EF -:103DC00000000000000000000000000000000000F3 -:103DD00000000000000000000000000000000000E3 -:103DE00000000000000000000000000000000000D3 -:103DF00000000000000000000000000000000000C3 -:103E000000000000000000000000000000000000B2 -:103E100000000000000000000000000000000000A2 -:103E20000000C1004000C0C10000010020001000DF -:103E30000100C1050800C000000001000000C00032 -:103E40000100000000000000000000000000000071 -:103E50000000000000000000000000000000000062 +:103C8000000000000000000000000400000200002E +:103C90000100000000000000000000000000000023 +:103CA00000000000000000000001020100A0000070 +:103CB0000100000000000000000100000000000002 +:103CC00000000000000000000010002000000000C4 +:103CD0000500080000000000004100000000000096 +:103CE0000000000000000000000380400080000091 +:103CF0004100000000000000004100000000000042 +:103D0000000000000000000000000005804000806E +:103D10000000410000000000000000410000000021 +:103D200000000000000000000000000880100000FB +:103D30000000020000000000000000410000000838 +:103D4000800000C10000000880008500000000C164 +:103D500080100008000000000000000008030008B8 +:103D6000800000C1000000000000A0000000004131 +:103D70000000000800000041000800000388000067 +:103D80000008800000C1000000038000A0000000C7 +:103D9000004100000008000000410008000003038B +:103DA0000040800000C10000000880008800000082 +:103DB000004180000040000000000000000020C121 +:103DC0000000200000400000000140004000000012 +:103DD0000009400100000000000000000000008811 +:103DE0000001200000400000000008000400000066 +:103DF000009102000000000000010001000001032A +:103E0000000000012000004000000000040040000D +:103E10000000009190000000000000010000000080 +:103E200001080000200000400000000002004000E7 +:103E300000000089020000000000000000000000F7 +:103E4000000500000000000000000000000000006D +:103E50000000811200E0070048810000000000001F :103E60000000000000000000000000000000000052 -:103E70000000000000000000000000000000000042 -:103E80000000000000000000000000000000000032 -:103E90000000000000000000000000000000000022 -:103EA00000000000000000000000004200000000D0 -:103EB0000000000081120088070048000000000098 -:103EC00000000000000000000000000000000000F2 +:103E70000000811200E080004842000000000000C5 +:103E800048420000000000000000000000000000A8 +:103E900000000000811200E04000484200000000E5 +:103EA0000000484200000000000000000000000088 +:103EB00000000000811200E0070048000000000040 +:103EC00000000006000000000000000000000000EC :103ED00000000000000000000000000000000000E2 :103EE00000000000000000000000000000000000D2 :103EF00000000000000000000000000000000000C2 @@ -74765,194 +74765,194 @@ :103F90000000000000000000000000000000000021 :103FA0000000000000000000000000000000000011 :103FB0000000000000000000000000000000000001 -:103FC00000000000000000000000000000000000F1 +:103FC0000000000000000000757B00000000000001 :103FD00000000000000000000000000000000000E1 -:103FE00000000000000000000000000000000000D1 +:103FE000000000000000DEAE757B00000000000055 :103FF00000000000000000000000000000000000C1 -:1040000000000000000000000000000000000000B0 +:10400000000000000000DEAE0000757B0000000034 :1040100000000000000000000000000000000000A0 -:1040200000000000000000000000757B00000000A0 +:104020000000000000000000DEAE757B0000000014 :104030000000000000000000000000000000000080 -:104040000000000000000000DEAE000000000000E4 -:104050000000000000000000000000000000000060 -:104060000000000000000000000000000000000050 -:104070000000000000000000000000000000000040 -:104080000000000000000000000000000000000030 -:104090000000000000000000000000000000000020 -:1040A00000000000000000000000000060C60300E7 -:1040B0000000000000000031E000000000000000EF -:1040C0000C0000000000000000C06306200000009B -:1040D0000000200020000000000020002000000060 -:1040E0000000000020000000000000002000000090 -:1040F000C000200020000000000088002000000018 -:1041000088000000200000000000000000032000E4 -:1041100000000000200020000000000040002000FF -:10412000000000000000200000000000000020004F -:1041300040000000200020000000000020002000BF -:10414000000000000000200000000000100000003F -:10415000000000000000000000000000000000005F -:10416000000000000000000000400000000000000F +:104040000000000000000000DEAE6126034000001A +:10405000000000000230A0000000000000000C4042 +:1040600000000000000002C06486612603400000DA +:10407000000000000230A0000000000000000C4022 +:1040800000000000000002C06486000061260340BA +:104090000000000000000230A0000000000000004E +:1040A0000C4000000000000002C06486612603404E +:1040B0000000000000000230A0000000000000002E +:1040C0000C4000000000000002C0648600000000F8 +:1040D00000000000040004000400110000000000C3 +:1040E00000004000A00000000000000000000000F0 +:1040F0000000000020002000A000000000000000E0 +:1041000000002000210000008800400000010000A5 +:10411000004000000000200020000000000000001F +:10412000000000402000040000002000A10000006A +:1041300000000000000000002000C000000090000F +:1041400000000000A000A00000000000200000000F +:1041500000000000000080008000800004000000DB +:10416000000000000004000000000000000000004B :10417000000000000000000000000000000000003F -:1041800000000000000000000000400000000000EF +:10418000000000000000400000000000800000006F :10419000000000000000000000000000000000001F -:1041A00000000000000000000000000000000040CF -:1041B00000000000000000000000000040000000BF -:1041C000000000000000000000000000400080002F -:1041D00000000000000000000000000000000000DF +:1041A00000000000000000000000000000004000CF +:1041B00000000000000000000000000000000000FF +:1041C00000000000050000000000000000000000EA +:1041D0000000000000008400040000000000000057 :1041E00000000000000000000000000000000000CF -:1041F00001000000000000000000000000000000BE -:1042000000000000000000000002000000000200AA -:104210000000000000000000080000000000000096 -:10422000000000000000000002000000000000008C -:104230000800000010001000020000000000000054 -:10424000000000000000000000000000100010004E -:10425000020000000000000000000000000000005C -:10426000000000000000000000000000000000004E -:10427000000010000000000000000000000000002E -:104280002000000000000000000000080000000006 -:10429000000000000000000000000000000000001E -:1042A000000000000000000000000000008200008C -:1042B000008200000000800080000000000000007C -:1042C000000000000000000000000000000080006E -:1042D000800000000000000000000100000000005D -:1042E00000000000000000000100000000000000CD -:1042F00000000000000000000100010000000000BC +:1041F00000000000000000000000000000000000BF +:1042000000000000000000000000000000000000AE +:10421000000000000000000084000000000000001A +:10422000000000000000000000000000000000008E +:10423000000000000000000000000000000000007E +:10424000000000800000000090000000000000005E +:1042500000000000000000002000800000000000BE +:10426000000000080008000800000008000000002E +:10427000000000000000000000000000000000003E +:104280000082000800080084000000840000000094 +:10429000000000000000009000000000000000008E +:1042A00000004008009000820000000000000000B4 +:1042B00000000000000000000000004000000000BE +:1042C0000000008200080000000000000000000064 +:1042D00000000000000000000011000000000000CD +:1042E00000000000000000000000000000000004CA +:1042F00000000000000000000000000000000000BE :1043000000000000000000000000000000000000AD -:104310000008000000000000000000000000000095 -:10432000000000000000000000000000000000008D -:10433000000000000000010000000000010000007B -:10434000000000000000000000000000000001006C -:10435000000000000000000000000000200000003D -:10436000000000000000000000002000000000002D -:1043700000000000000000000000200020000000FD -:10438000000000000000000000000000000000002D -:10439000000000000000000000000000000000001D -:1043A0000000000000000800000000000000000005 -:1043B00000000000000000001000000000001000DD -:1043C00000000000000000000000000000080000E5 -:1043D00010080082000800081000000001800000A2 -:1043E0000000080000000000000000000000008045 -:1043F000000000000080080000000000C0000080F5 -:1044000000000000000001000000000000000000AB -:104410000000000000000000000000000000080094 -:104420000000000000000000000000000000080084 -:10443000000000000000000000000000000000007C -:10444000010000000000000000000000000000006B -:1044500000000000000000000100800000002010AB -:104460000300000000000000000003000000000046 -:104470000004000000000010000000000000000028 -:1044800000200000418400A00400000000000000A3 -:10449000000000000000000000000000000000001C -:1044A0000000000000000000000000000000050007 -:1044B00000000000000000000000000000000000FC -:1044C00000002000000000000000000000000000CC -:1044D00000000000000000000000200000000800B4 -:1044E000000000000000000000009000100020000C -:1044F00000000000000882114009C00900200000EF -:104500008400100000000000000000000000000017 -:10451000000000000000000020002000000000005B -:10452000200000000000000020000000000000004B -:104530000000000900000000000000000000000072 -:10454000000000000000000000000000000000006B -:10455000000000000000000000000000000000005B -:1045600000000000000000000000000000008000CB -:10457000000000000000000000000000000000013A -:1045800000000000800000000000000000000000AB -:10459000000000000000000000000000000000001B -:1045A000000000000000000000000000000000000B -:1045B00000000000000000000000000000000000FB -:1045C00000000000000000000008000800000008D3 -:1045D00000000000000000000000000000000000DB -:1045E0000000000000000000000000008209000040 -:1045F00000000000000000000000000900000000B2 -:104600000000018001000000008004090109000091 -:104610000000000900000000000000000000000091 -:10462000000000000000000000000000000000008A -:10463000000000000000000000000000000000007A +:10431000000000000000000000000021000000205C +:10432000000000000000000800000009000000007C +:104330000008000000000000000000000000000075 +:104340000000040000000000000000000000000069 +:10435000000000000000008200004100200000007A +:1043600000001100008400040000000040202084B0 +:104370000000000000000000000000000900000034 +:10438000000000000800000000000000000440A041 +:104390000000000000000000000000001082090082 +:1043A00000000400000000000000000000001000F9 +:1043B0000000000100002100000000002100410079 +:1043C0000000000041000300000000001100089000 +:1043D00008000000000000000000000000090002CA +:1043E00000000000000000000000000000000000CD +:1043F00000000000000000000000000000000000BD +:1044000000000000090000000000000000000000A3 +:10441000000000000000000000008400C000000058 +:10442000000000000000C00000000000820000004A +:1044300000000000000000090800C0008200000029 +:104440000000080000000000000000000000000064 +:10445000C000000000000000840000000000000018 +:10446000000000000000000002000000000000004A +:104470000400000000000000000000001100000027 +:10448000000000000000080005000000000000001F +:10449000000000820000000000000000000000009A +:1044A00000000010000000000000000000000000FC +:1044B00000000040000000000000000000000000BC +:1044C00000000000000000000000000000000000EC +:1044D00000000000000000000000000000000000DC +:1044E00000000000000000009000000800800100B3 +:1044F00001000000000000000000000000000000BB +:1045000000000000000000000000000800000000A3 +:1045100000009010000000804080000000000000BB +:10452000000000000408000000210000040000005A +:104530000000C00000000800900000000000000023 +:1045400000000000C000900000000000100090007B +:10455000000001000000820000000000C000000018 +:104560000900000010000090200240000000002020 +:1045700004840400000240880000000000000000E5 +:10458000000800000000009000000500000020006E +:10459000000800A0000000840008000800000000DF +:1045A00000000004100000000000090008000000E6 +:1045B00003004002008820000000000040000000CE +:1045C0000000000000000000110400040500008845 +:1045D00020000088400040000000000000000500AE +:1045E0000403040004000400080008000800080098 +:1045F000000000000000002000000010000000008B +:1046000000030000000000000000000000000000A7 +:10461000000000000080000000000000000000001A +:104620000000002100000000000000000000000069 +:104630000000000082000000100000000000820066 :10464000000000000000000000000000000000006A -:10465000000000000000000000000000000000005A -:104660000000000041000000000000000000000009 -:10467000000000820082008200824100058200006A -:10468000000000000440040000000020800004003E -:1046900000000000210000000500000000000000F4 -:1046A0000000000000004100410000004100000047 -:1046B0000000008241000000030000000000000034 +:104650000000000000000000000000000000080052 +:104660000000800080008000C0000000000000000A +:104670000000000000000000000100000000000039 +:1046800000000000000000000000008200000000A8 +:1046900004040000000000100000000000004100C1 +:1046A0000200000000000000000000000000000008 +:1046B00000000000000000000000000000000000FA :1046C00000000000000000000000000000000000EA :1046D00000000000000000000000000000000000DA -:1046E00000000000010000000000000000000000C9 -:1046F00000000000010000000000000000000000B9 -:104700000000000001008800000000000000000020 -:104710000000000000000000000000000000000099 -:104720000000000000000000000000000000000089 +:1046E00000000200000000000000000000000000C8 +:1046F00000000000000000000000000000000000BA +:1047000000000000000000000000000000000000A9 +:104710000000000000000000000000000001000197 +:104720000800000000000000000000000000000081 :104730000000000000000000000000000000000079 -:104740000000000000000100000000000000000068 -:104750000000000000000000000000000000010058 -:104760000000000000001100210000000000000017 -:104770000000000000001100210000000000000007 -:1047800000000000000011002100000000000000F7 -:104790000000000000000000000000000000000019 -:1047A0000000000000000000000000000000000009 +:1047400000008800000000000000000000000000E1 +:104750000000000000000000000000000000000059 +:104760000000000000000000000000000000000049 +:104770000000000000000000000000000000000039 +:104780000000000000000000000000000000000029 +:1047900000000000000000000000000000000041D8 +:1047A00010100008000800000000000000000000D9 :1047B00000000000000000000000000000000000F9 -:1047C00000000000000000001100002100000000B7 +:1047C00000000300000000000000000000000000E6 :1047D00000000000000000000000000000000000D9 -:1047E00011000021000000000041090000090080C4 -:1047F00000000000000000000041090000030080EC -:10480000000000000000000000C109000009008055 -:104810000000008000100000000000000000000008 +:1047E00000000000000000000000000000000000C9 +:1047F00000000080000000800000008000000080B9 +:1048000000000000000000000000000000000000A8 +:104810000000000000000000000000000000000098 :104820000000000000000000000000000000000088 :104830000000000000000000000000000000000078 -:10484000000000000000000000000008000011400F -:104850000000000000000000000000000000000058 -:104860000000000800001108000000010100000025 -:1048700000880000000000000000000101000000AE -:10488000008800000000000000000003019000000C -:10489000008200000040000100080000000000004D +:104840000000000000000000000000000000000068 +:1048500000000000000000000000400041000308CC +:1048600041000000000000000000000000200000E7 +:10487000002000000004000000040000000400000C +:104880000004000000000000000000000000000024 +:104890000000000000000000000000000000000018 :1048A0000000000000000000000000000000000008 :1048B00000000000000000000000000000000000F8 -:1048C00000000000000000000000000000010000E7 -:1048D00001000000000000000000000000000000D7 -:1048E000000000000000000001000000000088003F -:1048F00000000100000000000000000000000800AF -:10490000000001000000000000000000000008009E -:1049100090000000000002004000000000000000C5 -:104920000000000000000000000000000000000087 +:1048C00000000000000000000000000000000000E8 +:1048D00000000000000000000000000000000000D8 +:1048E00000000100000000000000000000000000C7 +:1048F0002000000000000000040000000000000094 +:1049000004000000000000000000000000000000A3 +:104910000000000000000000000000000000000097 +:104920000000000000000001010000010000000084 :104930000000000000000000000000000000000077 -:104940000000000000000000000000000000000067 -:1049500090000001010000000000000000000000C5 -:1049600000000000000000009000000101000000B5 -:1049700000000000410000000000000000000000F6 -:10498000800000004100000000000000000008005E -:10499000800000004100080080008000000000004E -:1049A0000000000000000000000000000000000007 +:104940000000000000000001000000000001000065 +:104950000000000000000000000000000000000057 +:104960000000000000000000000000000000200027 +:1049700000000000000005000000800000000500AD +:1049800000008000000000000000000000000000A7 +:104990000000000000000000000000000000000017 +:1049A000000000000000000821101041004100003C :1049B00000000000000000000000000000000000F7 -:1049C00000000000000000000000000000000000E7 -:1049D00000000000000820000000000000000000AF -:1049E00000000000000000000000000000080200BD -:1049F00000000011000003000000000000000000A3 -:104A00000000001105000000000000000000000090 -:104A1000000000110000000000080000000000007D -:104A20000000000000000000000000000000000086 +:1049C0000000000000000000000800050008004191 +:1049D00000000000000000000000000000000000D7 +:1049E00000000000000000000000000000000000C7 +:1049F0000010002100000000000000020000000084 +:104A0000000000080000000000000000000000009E +:104A10000000000000000000000000000000000096 +:104A2000000000000000000000080000000000007E :104A30000000000000000000000000000000000076 :104A40000000000000000000000000000000000066 -:104A50000000000011000000000000000000000045 -:104A60000000000000000000000000001100000035 -:104A70000000000000010000000000000000000035 -:104A80000000000000010000000000000000000025 -:104A90000000000000010000000000010000000014 -:104AA0000000000000000000000000000000000006 +:104A50000000000000000000000000000000000056 +:104A6000000000000000000000080000000000003E +:104A70000000000100000000000000000000000035 +:104A80000000000000000000000000000000000026 +:104A90000000000000000000000000000000000016 +:104AA0000000000000000000000000010000000005 :104AB00000000000000000000000000000000000F6 :104AC00000000000000000000000000000000000E6 -:104AD00000000000000001000000000000000000D5 -:104AE00000000000000000000000000000000100C5 -:104AF00000000000000000E0000081410000000014 -:104B000000000000000000E0000081410000000003 -:104B100000000000000600E0070081000006000021 -:104B2000070000000000000000000000000000007E +:104AD00000000000000000000000000000000000D6 +:104AE0000000000000400000000000000000000086 +:104AF00000000000000000008000000000820000B4 +:104B00000700000000060000070000000000000091 +:104B10000000000000000000000000000000000095 +:104B20000000000000000000000000000000000085 :104B30000000000000000000000000000000000075 :104B40000000000000000000000000000000000065 -:104B5000000000000000000000E000000000000075 +:104B50000000000000000000000000000000000055 :104B60000000000000000000000000000000000045 -:104B700000E0000000000000000000000000000055 +:104B70000000000000000000000000000000000035 :104B80000000000000000000000000000000000025 :104B90000000000000000000000000000000000015 :104BA0000000000000000000000000000000000005 @@ -74984,219 +74984,219 @@ :104D40000000000000000000000000000000000063 :104D50000000000000000000000000000000000053 :104D60000000000000000000000000000000000043 -:104D700000000000000000000000000000000040F3 -:104D80000006000C000000000000000000000040D1 -:104D90000006000C000000000000000000000558A4 -:104DA0000A26050C05A105180A20050005A000002B -:104DB00000000000000000000000000000000000F3 +:104D7000000000000000000000000000000005002E +:104D80000A08050000A005000A28050000A005008B +:104D90000A28050000A0000000000000000000003C +:104DA0000000000000000000000000000000000003 +:104DB00000000000000000610006000D000000007F :104DC00000000000000000000000000000000000E3 -:104DD00000000000000000000000000000000000D3 -:104DE00000000006000C00000000000000000000B1 -:104DF000000000000000000000000006000C0000A1 -:104E000000003C3CFFFF000000000000000000002C -:104E100000000F0FFFFF0000000000000000000076 -:104E200000005555FFFF00000000000000000000DA -:104E30000000000000000000000000000000000072 +:104DD000000000000000000000610006000D00005F +:104DE00000000000000000000000000000000000C3 +:104DF00000610006000D000000000000000000003F +:104E000000000000000000000000000000000000A2 +:104E10000000000000000000000000000000000092 +:104E20000000000000000000000000000000000082 +:104E3000000000000000000000000000A0BC0A3ECE :104E40000000000000000000000000000000000062 -:104E50000000000000000000000000000000000052 -:104E600000000000FF0000FF000000000000000044 -:104E7000000000000000000000000000FF0000FF34 -:104E8000000000003C3C00000000000000000000AA -:104E9000000000000F0F00000000000000000000F4 -:104EA0000000000055550000000000000000000058 -:104EB00000000000000000000000000000000000F2 -:104EC00000000000000000000000000000000000E2 +:104E50000000000000000000000000000000A0BCF6 +:104E6000507C000000000000000000000000000076 +:104E70000000000000000000000000000000000032 +:104E80000000000000000000000000000000000022 +:104E90000000000000000000000000000000000012 +:104EA0000000000000000000000000000000000002 +:104EB0000000000000000000000000000000003CB6 +:104EC000003C0000000000000000000000000000A6 :104ED00000000000000000000000000000000000D2 -:104EE000000000000000FF0000FF000000000000C4 -:104EF0000000000000000000000000000000FF00B3 -:104F000000FF000000000000F0F0000000000000C2 -:104F10000000000000000000F0F0000000000000B1 -:104F20000000000000000000F0F0000000000000A1 -:104F30000000000000000000000000000000000071 +:104EE000003C003C0000000000000000000000004A +:104EF00000000000000000000000000000000000B2 +:104F000000000000000000000000000000000000A1 +:104F10000000000000000000000000000000000091 +:104F20000000000000000000000000000000000081 +:104F3000000000000000000000000000141F1F140B :104F40000000000000000000000000000000000061 :104F50000000000000000000000000000000000051 -:104F60000000000000000000FF0000FF0000000043 -:104F70000000000000000000000000000000000031 -:104F8000FF0000FF000000000000F0F00000000043 -:104F900000000000000000000000F0F00000000031 -:104FA00000000000000000000000F0F00000000021 -:104FB00000000000000000000000000000000000F1 -:104FC00000000000000000000000000000000000E1 +:104F60000000000000000000000000000000000041 +:104F70000000000000000000000028F8F8280000F1 +:104F80000000000000000000000000000000000021 +:104F90000000000000000000000000000000000011 +:104FA0000000000000000000000000000000000001 +:104FB00000000000000000000000000000001414C9 +:104FC00014140000000000000000000000000000B9 :104FD00000000000000000000000000000000000D1 -:104FE00000000000000000000000FF0000FF0000C3 -:104FF00000000000000000000000000000000000B1 -:105000000000FF0000FF00000000000000000000A2 -:1050100040000000A00000000000000000000000B0 -:1050200084000000200000000000000001000000DB -:105030008800000000008800000000000000000060 -:1050400020000000880000000003000000000000B5 -:105050000000200000000000200000000000000010 +:104FE00000000000000000000000000000000000C1 +:104FF0000000000000000000000000002828282811 +:105000000000000000000000200400042000210037 +:105010000000000000000000000000000000000090 +:105020000000000000000000200000002000004000 +:1050300000000004000000000000000088001000D4 +:10504000000010000000C00200020000000000008C +:1050500088000000000000000000000000000000C8 :105060000000000000000000000000000000000040 -:1050700000002000000000002000000000000000F0 -:105080000000000000000000000000000000000020 -:105090000000000000000000000000000000000010 -:1050A00000000000000000000000000000002000E0 -:1050B00000002000000000000000000000000000D0 +:1050700000004000880000008800000010000000D0 +:10508000000000000000000004008001000180001A +:1050900020000000000000000000000000000000F0 +:1050A0000000000000000000000000000000000000 +:1050B0000000090000000000100040000000000097 :1050C00000000000000000000000000000000000E0 -:1050D00000000000000000000000000000000000D0 +:1050D0000000000000000000400000004000000050 :1050E00000000000000000000000000000000000C0 -:1050F00000000000000000000000000000000000B0 -:10510000000000000000000000000000000000009F -:10511000000000000000000000000000000002008D -:10512000020000000000010000000000000000007C -:1051300000000000000088000000000000000000E7 -:10514000000000000000000000000000000000005F -:10515000000000000000880088008800880000002F -:10516000000000000000000000000000000000003F -:10517000008000000080000000000000000000002F -:10518000000000000000000000000000000000001F -:105190000000000000080000000000000000000007 -:1051A00000000000000000002000000000000000DF -:1051B00000000000000800000000000000000000E7 -:1051C00000000000000000000000000000000000DF -:1051D00000080000000800040000000000000000BB -:1051E0000000008400000004000000000000000037 -:1051F000008400200090002000000000000000005B -:10520000000000000000000000000000000000009E -:10521000000000800000000000000004000000000A -:1052200000000100000000000080000000000005F8 -:10523000000000000000000000030000000000006B -:105240000000000800000021000000000000000035 -:1052500000000000008000800008008000000000C6 -:1052600000000080000000000000000400040009AD -:1052700000000084000500840008000000200000F9 -:105280000000000800000000000000000000000016 -:10529000000000000004000000000000000000000A -:1052A0000000000020000000000000040000410099 -:1052B00000000000000000000000000000000000EE -:1052C00004000000000000000000000000000000DA -:1052D00000000000000000080004000000040200BC -:1052E00000000000000400000000000000010001B8 -:1052F000000000000021000000210001000000006B -:10530000000000000000000000000000000000009D -:105310000000000000000000C000010000000100CB -:10532000000001008800C0000000C0000800080064 -:105330000808080000000000C00082800000000093 -:105340000880010000000000A0000000A000A000F4 -:10535000A000A0000000000000000000010001000B -:10536000C00000800000010000000080010001007A -:1053700000000080010000000000000001000000AB +:1050F0000000000000000000000000004000000070 +:1051000000000000400000000000800000002000BF +:1051100000002080000000000000080000000000E7 +:10512000000000000000000000000000000000007F +:105130002000C00000000200020002000400040081 +:1051400004000000000000000000820000002000B9 +:10515000000000000000000000000000040000004B +:1051600000000000000000000000000082000000BD +:10517000000000000000000000000000000000002F +:1051800000000000000000800080000000410000DE +:105190008000000080040008000000000000000003 +:1051A00000000000000000000000000000100000EF +:1051B00000000000000002840000000000008000E9 +:1051C00080008000000000020000000000000000DD +:1051D00000000000000000000000000000000000CF +:1051E0000000000000000000000800900000000027 +:1051F00000000000000000000000000000000000AF +:10520000000000000000000000200020000000005E +:1052100000000404000000000000400000009000B6 +:1052200004000003400040000000000000000000F7 +:10523000C020000000000000A00000001000880056 +:10524000040040000000040000080000000084008A +:10525000000000000000000000000000002100002D +:10526000004100000000080008000000C008900095 +:105270000800900000000000000000008200000014 +:105280008200000004000000000000000000000098 +:105290000000000000050000000000000000000405 +:1052A000000000A0008200000000000000000000DC +:1052B00000200000000021000800000000000000A5 +:1052C0000000000000000000008811000000000045 +:1052D00000000000002000000000000000000000AE +:1052E000000000000000000000000000000000209E +:1052F000002000000000000010000000000000007E +:105300000000000000000000000004200000000079 +:10531000000000000000000000000000000000008D +:10532000000000200000000000004000100000000D +:105330000000400000000000A0000000004000202D +:10534000004000200000004000004000000000007D +:10535000000000000000000000000000000000004D +:10536000000000000000000000000000000000003D +:10537000080000001000000000000000080000000D :10538000000000000000000000000000000000001D -:1053900000000000000000000000000020000000ED -:1053A00020000000200000000000000000000000BD -:1053B00000000001000000000000000000040000E8 -:1053C00000000004200000000000000000000000B9 -:1053D000000008000000000000000008000020009D -:1053E00010000000000800001000000000082088E5 -:1053F0002000000000082000000000000000200045 +:10539000000090000200000000000000000000007B +:1053A00000000000000000000000000000000000FD +:1053B00000000000000000000000000000000001EC +:1053C00000010001000100000001000000000000D9 +:1053D00000000000000000000000000000000000CD +:1053E00000000000000000000000000000000000BD +:1053F00000000000000000000000000000000000AD :10540000000000000000000000000000000000009C -:105410000000000000000000000000000000C000CC -:1054200008002000400000000800200002001000DA -:1054300020890005C000C0830008200490080000F7 -:1054400020009000040084000000000020002008DC -:105450000000001182002000000320000000022054 -:105460000000880090080200000402050008000007 -:10547000008302024008080400080008000400003D -:10548000001100000000000000000000000000000B -:105490000000000000000000000000000000008488 -:1054A000000000000000000000C00000000000003C -:1054B000000000080900000000082000910000041E -:1054C0000000800040040000000000000000000018 -:1054D000000000000000000000000000800000004C -:1054E00000000000000000010000000100000001B9 -:1054F00000000004009000010001000121010001F2 -:105500000000008400000000000000000000000017 -:1055100000000000050000000000008400040002FC -:1055200082020000000400000002000000808800E9 -:1055300020000004002100038805000400048221EB -:10554000004100210008210008000008200020027E -:105550002000200200000000000000000000000801 -:105560000004000000080004C00400040008000358 -:10557000C004000400080808000300030000000045 -:105580000080010000000000000500000002000093 -:10559000000800000000000000000000000000857E -:1055A0000000000000000001000000000084000472 -:1055B0000000800000010084000000000001008560 -:1055C00000000000000000019000000000018000C9 -:1055D000A1008000C10000840084000000000000E1 -:1055E00000830001000000010001000100014101F1 -:1055F0000000000100830001000100000000000025 -:105600000000000810000000000000000000000082 -:10561000000000000000000000000000000000008A -:1056200001C090100120889001C0409001408290FC -:1056300001C000200108108801C088040190108377 -:1056400001C0A0040188900201C000A101088808DF -:1056500001C088900182109001C00890010288204A -:10566000000001C000110108901001C002100108E3 -:10567000821101C000080102901101C00088009051 -:105680009003010000000000000000000000000086 +:10541000000000000000000000000000010000008B +:10542000000000000000000000000000000000007C +:1054300000080400000000000000000008008400D4 +:105440000000000040008400000000050000008013 +:10545000000000210000002100000000000000000A +:105460000000000000000000000000000000040038 +:10547000000000000000000000000000000000002C +:10548000000000000000000000000000000002001A +:105490008200000000000000000008000000200062 +:1054A000000040000000009000000000000000002C +:1054B0000000000000200000000000000000880044 +:1054C00000000300000000000000000000000000D9 +:1054D0000020090009080000000000000000000092 +:1054E0000800000021000000000000000000000093 +:1054F000000000880000000400000090000400008C +:10550000000000000090000000000000000000000B +:1055100000880000000000000000090000000000FA +:10552000000000000000000000000000000000007B +:105530000000000000000000100000000800000053 +:1055400008008200010001000100010000040000C9 +:105550000003001100400021000900410000080084 +:10556000000000000000000000000000000000003B +:10557000000000000000000000000000000000002B +:10558000000000000000000000000000000000001B +:1055900000000000000000000000040000000800FF +:1055A00000000000000000000000000000000000FB +:1055B00000000000000000000000000000000000EB +:1055C000000080000000040002000400022000002F +:1055D00000000000000000011100000000000000B9 +:1055E00000000000000000000000000000000000BB +:1055F00000000000000000000000000000000000AB +:10560000000000000000000000000000000000009A +:10561000000000000000000000000000800000000A +:10562000000000000000000000000000000000007A +:10563000000000000000000000000000000000006A +:10564000000000000000000001C0C040000410087D +:1056500000C01040008210C00000000000000000E8 +:10566000000000000000000000000000000000003A +:10567000000000000000000000000000000000002A +:10568000000000000000000000000000000000001A :10569000000000000000000000000000000000000A -:1056A00000000380000009000000038000000900E2 -:1056B0008000038000000900800003808080098052 -:1056C00011A0038000000900008003800008090089 -:1056D00000800380000009808000038000000980B2 -:1056E00000000000038000080980008003800000A3 -:1056F000098080A003800080090000200380000052 -:1057000000000088110000210000000000000000DF +:1056A00000000000000000000000000000000000FA +:1056B00000000000000000000000000000000000EA +:1056C000000000000000000000001080008000804A +:1056D00080800480808000008000000000000000C6 +:1056E00000000000000000000000000000000000BA +:1056F00000000000000000000000000000000000AA +:105700000000000000000000000000000000000099 :105710000000000000000000000000000000000089 -:10572000000000000008008880038080004080A006 -:105730008005808000038088801180000003009035 -:1057400091088080000800858041800000408088AA -:105750001140808080100083004080800000008322 -:1057600080008080000000100089112080800040AF -:10577000808991408080800800C1110880800008E5 -:1057800080851102808000100080110800800000D8 +:105720000000000000080000000800000000000069 +:105730000000000000000000000000000000000069 +:105740000000000000000000000000008000804118 +:1057500080418000800080090041808000000000BE +:105760000000000000000000000000000000000039 +:105770000000000000000000000000000000000029 +:105780000000000000000000000000000000000019 :105790000000000000000000000000000000000009 -:1057A000000000000000100190C09001C0C0100077 -:1057B00040C09000C0C0020010C00800C00420001B -:1057C00088C00501C0C0040188838201C0C0880070 -:1057D00002C09100C0C0020188829000C0C02000B9 -:1057E00088828200C0C00000A000A0C09100C0C09C -:1057F000100010C01100C0C0020188839101C0C018 -:10580000880010C01100C0C00001000801010002A2 +:1057A00000800000008000000000000000000000F9 +:1057B00000000000000000000000000000000000E9 +:1057C0000000000000000000000000000000400099 +:1057D00040830401C040400040008201C008000036 +:1057E00000000000000000000000000000000000B9 +:1057F00000000000000000000000000000000000A9 +:105800000000000000000000000000000000000098 :105810000000000000000000000000000000000088 -:10582000000000000000000089A00820C09000C017 -:1058300091884002C09000C09188100804C001C047 -:1058400085A00821C09001C0C0A00890C00400C07D -:1058500091844088C08900C0C0200220C02000C0C0 -:10586000C0100020C02000C0000111840888C08939 -:1058700000C0C1084020C01100C010201020C0038B -:1058800000C091200820C02100C0000020000801B5 -:105890000100000000000000000000000000000007 -:1058A0000000000000000000000041000000800037 -:1058B00020804100008080002080410000800000A6 -:1058C0004080C100000580001080C1000000008001 -:1058D00008804180000080884080C10080008000F6 -:1058E0004080C1000000800008800001C1800000ED -:1058F00080880880418000808010408041008000C6 -:10590000808810804100000080080880020080002C -:10591000000810000000000000000000000000006F -:1059200000000000000000000000000080000003F4 -:105930000000000080000008000000008009004016 -:105940000080008080101103008000008020002073 -:10595000800080808020000580000800800800080A -:1059600080000000800000400080808000018009ED -:1059700080409000800080021108000080008002BA -:105980001105800000008040112100008000000807 -:1059900011000000000000000000000000000000F6 -:1059A0000000000000000000000000000000C00037 -:1059B000880088082000C000200040208200C0002D -:1059C000880088409008C0012100A0404000C0002D -:1059D000900040080208C000C0004088A100C0003C -:1059E000A00040088800C0008800908410080001D2 -:1059F000C000020041880800C00089008802080039 -:105A0000C000110040080200C0008300200802000E -:105A10000001010000000000000000000000000084 +:10582000000000C0000000080000020000000000AE +:105830000000000000000000000000000000000068 +:105840000000000000000000000000000000000058 +:10585000C0020082A08401C040080082108401C000 +:105860000000000000000000000100000000000037 +:105870000000000000000000000000000000000028 +:105880000000000000000000000000000000000018 +:105890000000000000000000000000000000000008 +:1058A00000000100000002000000000000000000F5 +:1058B00008000000000000000000000000000000E0 +:1058C00000000000000000000000000000000000D8 +:1058D000000089800080008041808080008080807E +:1058E00041800000000000000000000100000000F6 +:1058F00000000000000000000000000000000000A8 +:105900000000000000000000000000000000000097 +:105910000000000000000000000000000000000087 +:105920000000000010000000000000000000000067 +:105930000000000000000000000000000000000067 +:105940000000000000000000000000000000000057 +:10595000000000008040800880C18080800380219A +:10596000808900000000000000000000000100002D +:105970000000000000000000000000000000000027 +:105980000000000000000000000000000000000017 +:105990000000000000000000000000000000000007 +:1059A00000000000000000000008000000000000EF +:1059B00000000000000000000000000000000000E7 +:1059C00000000000000000000000000000000000D7 +:1059D000000000000000C001820084100804C00024 +:1059E00082008410C082000000000000000000015E +:1059F00000000000000000000000000000000000A7 +:105A00000000000000000000000000000000000096 +:105A10000000000000000000000000000000000086 :105A20000000000000000000000000000000000076 -:105A3000600002E041004842410002E0410048426B -:105A4000600002E041004800600043E0412248421B -:105A5000600002E041008482480043E04122484265 -:105A6000000002E0410041420000000041004142CC -:105A70000000600043E041224842600043E04122D0 -:105A80004842500043E041224242810043E041222B -:105A90004842600643E007260000000000000000C6 -:105AA00000000000000000000000000000000000F6 -:105AB00000000000000000000000000000000000E6 +:105A30000000000100000000000000000000000065 +:105A40000000000000000000000000000000000056 +:105A50000000000000000000000000004000424282 +:105A600000000000400000420000000000000000B4 +:105A70000000000000000000000000000000000026 +:105A80000000000000000000000000000000000016 +:105A90000000000000000000000000000000000006 +:105AA00000000000000000000000000600000700E9 +:105AB0006000000000000000000000000000000086 :105AC00000000000000000000000000000000000D6 :105AD00000000000000000000000000000000000C6 :105AE00000000000000000000000000000000000B6 @@ -75212,13 +75212,13 @@ :105B80000000000000000000000000000000000015 :105B90000000000000000000000000000000000005 :105BA00000000000000000000000000000000000F5 -:105BB0000000000000004008400000842000400871 -:105BC000400000842000400840000084200040087D -:105BD000400000842000400840000084200040086D -:105BE000400000842000400840000084200040085D -:105BF0004000008420000000400840000084200095 -:105C0000400840000084200040084000008420003C -:105C10004008400000842000000000000000000058 +:105BB00000000000000000000000000000000000E5 +:105BC00000000000000000000000000000000000D5 +:105BD000000000000000000000000000000043087A +:105BE0004000008421864108400000842106000016 +:105BF00000000000000000000000000000000000A5 +:105C00000000000000000000000000000000000094 +:105C10000000000000000000000000000000000084 :105C20000000000000000000000000000000000074 :105C30000000000000000000000000000000000064 :105C40000000000000000000000000000000000054 @@ -75236,104 +75236,104 @@ :105D00000000000000000000000000000000000093 :105D10000000000000000000000000000000000083 :105D20000000000000000000000000000000000073 -:105D300000000000000000000000000030650006C8 -:105D4000800F300030650006800F3000306500069F -:105D5000800F300030040006800E300030650006F1 -:105D6000800F300030040006800E300030650006E1 -:105D7000000F300030000000000010000000300470 -:105D80000006800E300030040006800E3000300423 -:105D90000006800E300000040006800E2800051C5E -:105DA0000A26850E24A0000000000000000000006C -:105DB00000000000000000000000000000000000E3 +:105D3000000000000000000000000000006100867C +:105D4000000D000000000000000000000000000046 +:105D50000000000000000000000000000000000043 +:105D600000000000100020080040000800000008AB +:105D7000000000080000000000100000000000000B +:105D80000000000000000000000000000000000013 +:105D90000000000000000000000000000000000003 +:105DA00000000000000000000000000000000000F3 +:105DB00000000000000005000A28050000A0000007 :105DC00000000000000000000000000000000000D3 -:105DD0000000000000000000FF00F0F000000000E4 -:105DE00000000000000000003C3C00FF000000003C +:105DD00000000000000000000000000000000000C3 +:105DE00000000000000000000000000000000000B3 :105DF00000000000000000000000000000000000A3 -:105E000000000F0F00FF00000000FF0000FF000077 -:105E10000000FF0000FF00000000FF0000FF000086 -:105E20000000FF0000FF0000000000000000000074 +:105E00000000000000000000000000000000000092 +:105E10000000000000000000000000000000000082 +:105E20000000000000000000000000000000000072 :105E30000000000000000000000000000000000062 :105E40000000000000000000000000000000000052 -:105E500000000000000000000000FF00F0F0000063 -:105E6000000000000000000000003C3C00FF0000BB +:105E50000000000000000000000000000000000042 +:105E60000000000000000000000000000000000032 :105E70000000000000000000000000000000000022 -:105E8000000000000F0F00FF00000000FF0000FFF7 -:105E900000000000FF0000FF00000000FF0000FF06 -:105EA00000000000FF0000FF0000000000000000F4 +:105E80000000000000000000000000000000000012 +:105E90000000000000000000000000000000000002 +:105EA00000000000000000000000000000000000F2 :105EB00000000000000000000000000000000000E2 :105EC00000000000000000000000000000000000D2 -:105ED0000000000000000000000000003C3C00FF4B -:105EE000000000000000000000000000FF0000FFB4 +:105ED00000000000000000000000000000000000C2 +:105EE00000000000000000000000000000000000B2 :105EF00000000000000000000000000000000000A2 -:105F0000000000000000FF0000FF000000003C3C1B -:105F100000FF000000003C3C00FF000000003C3C93 -:105F200000FF00000000FF0000FF00000000000074 +:105F00000000000000000000000000000000000091 +:105F10000000000000000000000000000000000081 +:105F20000000000000000000000000000000000071 :105F30000000000000000000000000000000000061 :105F40000000000000000000000000000000000051 -:105F500000000000000000000000000000003C3CC9 -:105F600000FF000000000000000000000000FF0033 -:105F700000FF000000000000000000000000000022 -:105F80000000000000000000FF0000FF0000000013 -:105F90003C3C00FF000000003C3C00FF0000000013 -:105FA0003C3C00FF00000000FF0000FF000000007C +:105F50000000000000000000000000000000000041 +:105F60000000000000000000000000000000000031 +:105F70000000000000000000000000000000000021 +:105F80000000000000000000000000000000000011 +:105F90000000000000000000000000000000000001 +:105FA00000000000000000000000000000000000F1 :105FB00000000000000000000000000000000000E1 -:105FC00000000000000004000000000000000400C9 -:105FD00000000000000000000000000000002000A1 -:105FE0000000000000002000000000000000000091 -:105FF0000000000000000400000000000000880015 -:10600000000000000000000000000000840000000C -:1060100088000000000000002000000000000000D8 -:1060200088000000000000000000000020000000C8 +:105FC00000000000000000000004000004000000C9 +:105FD000000000002000000000000000040000009D +:105FE000000000002000000000000000000200008F +:105FF0000000000020000000000000002000000061 +:1060000000000000A00000000000000000000000F0 +:106010000000400000002000000000000000200000 +:10602000000000000000040000000000000000006C :106030000000000000000000000000000000000060 -:106040000000000000000000000000000000000050 -:106050000000000010000000000000000000000030 +:1060400000001000100020000000000000004000D0 +:106050000000000000000000000000000000000040 :106060000000000000000000000000000000000030 -:10607000000000041000000000000000000000000C -:10608000000000000000040000000000000000000C -:1060900000000000000000000000400010000000B0 -:1060A00000000000000010000000000000000000E0 -:1060B00000000000000010000000000000000000D0 +:10607000000000000000000000020000100000000E +:1060800000000000000020000000000000000000F0 +:1060900010000000000000000000000000000000F0 +:1060A00000000000000000002000000000000000D0 +:1060B00000000000000000000000000000000000E0 :1060C00000000000000000000000000000000000D0 :1060D00000000000000000000000000000000000C0 :1060E00000000000000000000000000000000000B0 :1060F00000000000000000000000000000000000A0 :10610000000000000000000000000000000000008F :10611000000000000000000000000000000000007F -:10612000000000000000000000000000000000006F +:1061200000000000000000008200000000000000ED :10613000000000000000000000000000000000005F :10614000000000000000000000000000000000004F -:106150000000000000080000000000000000000037 +:10615000000000000000000000000000000000003F :106160000000000800000000000000000000000027 -:10617000000000000010000000000000000000000F -:10618000000000080000008800000000000000007F -:1061900000000000000000000000000000000000FF +:10617000000000000000000000000000000000001F +:106180000000000800000000000000000000000007 +:1061900000000002000000000000000000000000FD :1061A00000000000000800000000000000000000E7 :1061B00000000000000000000000000000000000DF :1061C00000000000000800000000000000000000C7 -:1061D00000000000000000000000001100000000AE -:1061E000000000000000000000008400000000002B -:1061F00088000000000000008800000090000000FF -:10620000002000000000000000000000000000006E -:10621000000000000000000000000000000000007E -:10622000000000000000000000020000000000006C -:10623000000000000000000000000000000000005E -:10624000000000000000000008000000C000000086 -:10625000090008000800218400902000000000844C -:10626000214002001100000000202084050000C031 -:106270000088200000840388200020001100000016 -:106280001100200040000900000000202020000034 -:1062900000000090000000C0008820842000000062 -:1062A00000840984050020C011000082008400845D -:1062B00000020088008200000000000000000000D2 -:1062C00000000800000000000000000000000000C6 -:1062D00000000000000000000000000000000000BE +:1061D000000000000000000000009000000000002F +:1061E00020002000040090000000200000000000BB +:1061F0000000000000000000000088000000000017 +:106200000000000000008400200004009000000056 +:10621000000000000400000000000000000000007A +:10622000000088000000000000000000040084005E +:106230000000000000000000000008001000000046 +:106240000000000004009000880000000000000032 +:10625000000000000000000000000000000000003E +:10626000000000000000000000000000000021000D +:10627000000000000000030000000000000000001B +:10628000000000000000040000000000000000000A +:1062900000000000000000000000000000000000FE +:1062A00000000000000000000000000000000000EE +:1062B00000000000000000000000000000000000DE +:1062C00000000000000000000000000000000000CE +:1062D000210000000000000000000000000000009D :1062E00000000000000000000800000000000000A6 -:1062F0000000000000000000A000080000000000F6 -:106300000000000000000000000008000000000085 -:10631000000000000000000000000000A0000000DD +:1062F0000000000000000000000000090009000983 +:10630000000900000000000000000009000000007B +:10631000000000000000000000000000000000007D :10632000000000000000000000000000000000006D :10633000000000000000000000000000000000005D -:10634000000000000000000000000000000000004D +:106340000000080000000000000000000000000045 :10635000000000000000000000000000000000003D :10636000000000000000000000000000000000002D :10637000000000000000000000000000000000001D @@ -75344,32 +75344,32 @@ :1063C00000000000000000000000000000000000CD :1063D00000000000000000000000000000000000BD :1063E00000000000000000000000000000000000AD -:1063F000000000000000000000000000000000009D -:10640000000000200000000000200000000000004C +:1063F0000000000000000000000000080000000095 +:10640000000000000000000000000000000000008C :10641000000000000000000000000000000000007C :10642000000000000000000000000000000000006C -:106430000000000000000000000000000000000557 -:106440000811000000000000000000000000C00073 -:1064500000000000000000004088218809900088AA -:106460002100218409902100008800840090118877 -:1064700002022188402005000984218809C0008289 -:1064800000842102008411844088098810200320A0 -:106490004088058809900020000000002100218428 -:1064A000008400A0210200C020C000400988090229 -:1064B000008408841100099011840000002011203C -:1064C000118400000000000009000000000000002E -:1064D000000000000000000000000800880000002C -:1064E0000800880000000000000200008802000090 -:1064F0000002000088080000080000008821000059 -:10650000000000090000000300000009000000096D -:1065100000020000880088000000000008008800D9 -:10652000000000000000000000090002000200005E -:10653000000000110002000000000002000200093B -:106540000011000200000000000000020000000036 -:10655000000000000000000000000000000000003B -:10656000000000000000000000000000000000002B -:10657000000000000000000000000000000000001B -:10658000000000000000000000000000000000000B +:10643000000000000000000000000000000000005C +:10644000000000000000000000000000000000004C +:10645000000000001000000000000000000000002C +:106460000000000005000002000000000000000025 +:10647000000000000000000000000000000000001C +:10648000000000000900210000880000000000005A +:1064900004000000000040000000000000000000B8 +:1064A00000000000000000000000002000000000CC +:1064B0000000008800000020000000000000000034 +:1064C000210010000000000000000000000000009B +:1064D0000020000000001000030000000000000089 +:1064E000200000000000000000000000000000008C +:1064F0000800000000000000000000000000000094 +:106500000800000000000000000000000000000083 +:10651000000000000000000000000000000000007B +:10652000000000000000000000000000000000006B +:106530000000000000000000000008000000000053 +:10654000000000000000000000000000000000004B +:106550000000080000000000000000000000000033 +:1065600020001100000000000000210000000000D9 +:106570000000000000000000000000820000000099 +:106580000000000009000000000000000000000002 :1065900000000000000000000000000000000000FB :1065A00000000000000000000000000000000000EB :1065B00000000000000000000000000000000000DB @@ -75472,338 +75472,338 @@ :106BC00000000000000000000000000000000000C5 :106BD00000000000000000000000000000000000B5 :106BE00000000000000000000000000000000000A5 -:106BF0000000000000000000000000000100200074 -:106C00000000200000000000000000000000000064 -:106C10000000000000000000002100000000200033 -:106C20008800200000000000880000000000000034 -:106C300000000000000000030000A00000000000B1 -:106C400000002000200000000000002100000004DF -:106C500000040003000000040400200004000404F9 -:106C6000000020002000000000008800000000005C -:106C700000000000000000000000000000004000D4 -:106C80000000000000000000000000000000000004 -:106C900000000000000000000000000000000000F4 -:106CA00000000000000000000000000000000000E4 -:106CB00000000000000000000000000000000000D4 -:106CC0000000000000400000000000000000000084 -:106CD00000000001000000000001800000008000B2 -:106CE0008000000000000000000000000000000024 -:106CF0000000000000000000000000000000000094 -:106D00004000000000000000000000000000000043 -:106D10000000000000000000000000000000000073 -:106D200000000000000000008800000000000000DB -:106D30000000000000000000000000000000000053 -:106D40000000000000000000000020000000000023 +:106BF0000000000000000000000000000000018014 +:106C0000042001800080000000000000000001005E +:106C10000080410000800000000000000000000033 +:106C20000000000000000000000000000000000064 +:106C30000002000000000000000000000000000052 +:106C40000000000000000000000000000000000044 +:106C50000000000000000000000000000000000034 +:106C60000000000000000000000000000000000024 +:106C70000000000000000000000000000000000014 +:106C8000042080010420002000000000000000001B +:106C900004020020049000204000000000000000DA +:106CA00000020000000000040000000000000000DE +:106CB0000000004020000000000040000002000230 +:106CC0000000000000000000400000000000400044 +:106CD00000004000004000020002400000400000B0 +:106CE0000000400000000002000200000000000060 +:106CF0000000000000000000004000000000000054 +:106D000000000100000001008300000000000000FE +:106D1000000004000100040000000000000000006A +:106D200000008200200000008200000082000000BD +:106D3000000000000000000000000000C000C000D3 +:106D40000000000000000000000000000000000043 :106D50000000000000000000000000000000000033 -:106D60000000000000000000000000000000000023 -:106D700000000000000000000000000040000000D3 -:106D80000000800000000000000000000000000083 -:106D900000000000000000000000000000000000F3 -:106DA00009000000090000000900000000000000C8 -:106DB00000000000000000000000000000000000D3 -:106DC0000000000000000000000000008000000043 -:106DD00000000000000000000000000000000000B3 +:106D60000000000000000000000000100000000013 +:106D700000000000000000000800004000000008C3 +:106D800000000000040000000400040000000000F7 +:106D900000000000800004008200020000040008DF +:106DA00000000000000000000000000000000000E3 +:106DB00000000000040000000200020000000000CB +:106DC00000020000000000000000000000000000C1 +:106DD00000000000000000000000020002000000AF :106DE00000000000000000000000000000000000A3 -:106DF000000000000000000000000000020082000F -:106E000020004000048000000000C000000000805E -:106E100020002000010000000000A0000000000091 -:106E20000000040040000480040004000000008012 -:106E3000418082009000000010000000000000006F -:106E4000040000004000000040000000A00000001E -:106E500000800080008090204020202004204000FE -:106E6000048000000000028000000000000000001C -:106E70000000000000000000000000000000000012 -:106E80000000800000200002000000000000000060 -:106E900000088000A10010000000000000000000B9 -:106EA000002000000000000000208000800000841E -:106EB0000004200800000000002000000000000086 -:106EC00000000000002000000000000002000000A0 -:106ED000008400040008000800010001800500850E -:106EE0000000002000000000002000000000000062 +:106DF0000000000000000000000000000000880803 +:106E000000009000000088002000000090000000BA +:106E1000000004000400000000000000000000006A +:106E200000000000000000000000880000000000DA +:106E3000040000000000000000000000000000004E +:106E40000000000000000000000000000000000042 +:106E5000000000000000000000000000040000002E +:106E60000000100000000000000000000000000012 +:106E7000000000000000000000000000880000008A +:106E800000000000050000000000000000000000FD +:106E900000000000000000020082008400000000EA +:106EA00000000008000000000000000000000000DA +:106EB00004000000000000000000000000000000CE +:106EC00000000020000000000000000000000000A2 +:106ED00000000000000000001000000000000000A2 +:106EE00000000000000000000000000000000000A2 :106EF0000000000000000000000000000000000092 -:106F00000000000000000000010000000000000080 -:106F1000000000000000A0000100080008000800B8 -:106F200008000000C0008200000000000000000017 -:106F30000000000000000000010000000000000050 -:106F4000000000000000000010000100010001002E -:106F500001000000A0000800000001000000000087 -:106F6000000000000000040000000000000000001D +:106F00000000000000000000000000000000000081 +:106F10000000000000000000000000000000000071 +:106F20000100000000000000000000000004000458 +:106F30000009000000000000000000000000000048 +:106F40000000000000000000000000000000000041 +:106F50000000000000000000000000000000000031 +:106F60000000000000000000000000000000000021 :106F70000000000000000000000000000000000011 -:106F800000000000000000000000200000000000E1 -:106F900000000000000000000000200000000000D1 -:106FA00000000000000000000000000000000000E1 -:106FB00000000000000000000000200000000000B1 -:106FC00000000000000000000000000004000400B9 -:106FD0000400040000000000000003002000000086 -:106FE0000000000000000000800000000000000021 +:106F80000000000000000000000000000000000001 +:106F900000000000000000000000000000000000F1 +:106FA00000000400000000000000000000000000DD +:106FB00000000000000000000000000000000000D1 +:106FC00000000000000000000000000000000000C1 +:106FD00000000000000000000000000000000000B1 +:106FE00000000000000000000000000000000000A1 :106FF0000000000000000000000000000000000091 -:1070000000000000000000800100010041020011AA -:107010002000C00000000080008001000880000007 -:107020000000C0000000000000008200000001001D -:107030000000A000008001000000008000000000AF -:107040000000000000000000000000000000400000 -:1070500000004000C0000000010301008280000029 -:10706000000000000100002000030080000000007C -:1070700000000000000000110000000000000000FF -:1070800000000000000000000004100410889001BF -:1070900021000800410000000004000810840004E2 -:1070A00000000000000200002004408400201100C5 -:1070B0000440000000840020100000880504000047 -:1070C00000004020402000000000100400000000EC -:1070D000800000008000000000001000200000047C -:1070E0002088000040822000000500000020008869 -:1070F00000881000000010000000000000000000E8 -:10710000000000000000000000001000000000046B -:10711000000000000000C00000000000000084002B -:1071200000000000000000040000000000008200D9 -:107130000000000000200000000000000000000827 -:107140000008000000000000000000000000000037 -:107150001000040008000000000004000120C1200D -:1071600000200008000000000000000000000000F7 -:1071700000200000000000000000000000000000EF -:10718000000000000000000000000000800000007F -:1071900000010000000000000000000000000000EE +:107000000000004000000000000000000000000040 +:1070100000000000000000000000000084020000EA +:107020000000000000000000000000000020000040 +:107030000000000000000000000000000000000050 +:107040000000000000000000000000000000000040 +:107050000000000000000000000000000000000030 +:107060000000000000000000000000000000000020 +:107070000000000000000000000000000000000010 +:107080000000000000000000000000000000000000 +:1070900000000000000400000020000000000000CC +:1070A00000000000000000000000000000000000E0 +:1070B00000000800000000000000002000000000A8 +:1070C00000000000000000200000000000000000A0 +:1070D00000000000000000000000040000000000AC +:1070E0000000000000880000000000000000000018 +:1070F0000000000000000000000000000000000090 +:10710000002000000000000002000000000900094B +:10711000000000000000000000000000000000006F +:107120000000000000000000000000000008000057 +:10713000000000000000000000000000000000004F +:10714000000000000000000000000000000000003F +:10715000000000000000000000000000000000002F +:10716000000000000000000000000000000000001F +:10717000000000000000000000000000000000000F +:1071800000000000000000000000000000000008F7 +:1071900000000000000000000000000000000000EF :1071A00000000000000000000000000000000000DF :1071B00000000000000000000000000000000000CF -:1071C00000010001000000000000000000000000BD -:1071D00000000000800000000000000080000401AA -:1071E0000401000121010000000000000000000077 -:1071F000000000010000000000000000000000008E -:10720000000000000000000000000000000001007D -:1072100001008800000000000000000000000100E4 +:1071C00000000000000000000000000000000000BF +:1071D00000000000000000000000000000000000AF +:1071E000000000000000000000000000000000009F +:1071F000000000000000000000000000000000008F +:10720000000000000000000000000000000000007E +:10721000000000000000000000000000000000006E :10722000000000000000000000000000000000005E -:10723000000000000000000000000000000001004D +:10723000000000000000000000000000000000004E :10724000000000000000000000000000000000003E -:10725000000000000000000000C0019000000000DD -:1072600001C000900000000000C00090000000007D +:10725000000000000000000000000000000000002E +:10726000000000000000000000000000000000001E :10727000000000000000000000000000000000000E :1072800000000000000000000000000000000000FE -:1072900011000821000000000000000000000000B4 -:1072A00011000021000000000000000000000000AC +:1072900000000000000000000000000000000000EE +:1072A00000000000000000000000000000000000DE :1072B00000000000000000000000000000000000CE -:1072C000110000210000000000000000000000008C -:1072D000000000000000000000000080118000009D -:1072E0000000118000A1000000000080008000006C +:1072C00000000000000000000000000000000000BE +:1072D00000000000000000000000000000000000AE +:1072E000000000000000000000000000000000009E :1072F000000000000000000000000000000000008E :10730000000000000000000000000000000000007D -:1073100000000020000011100080000000000000AC -:107320000000000300001108000000000000000041 -:10733000000000000000000000000000000000004D -:10734000000000080000110500000000000000001F -:10735000000000000000000000008080090009001B -:1073600082008291000800009108808000080000DF -:10737000801180800000000000000000000000007C +:1073100000000000000000000000000000800000ED +:1073200000000000000000000000000000800000DD +:1073300000800000000000000000000000000000CD +:10734000000000000000000000000000000000003D +:10735000000000000000000000000000000000002D +:10736000000000000000000000000000000000001D +:10737000000000000000000000000000000000000D :1073800000000000000000000000000000000000FD -:107390000000000000000000010100A0000000004B -:1073A00000000000000000000101000000000000DB -:1073B000000000000000000000000000000000408D -:1073C0000000004000000000010100080000000073 -:1073D00000000000000000000000000090A000027B -:1073E00000008400C091000100008501C0900001F0 -:1073F00000008400C0900000004000000020000059 +:1073900000000000000000000000000000000010DD +:1073A0000000008800000000000000000000001045 +:1073B0000000004000000008000000000000000085 +:1073C00000000000000000000000000000000000BD +:1073D00000000000000000000000000000000000AD +:1073E000000000000000000000000000000000009D +:1073F000000000000000000000000000000000008D :10740000000000000000000000000000000000007C -:1074100000000000000000019000000000010000DA -:10742000000000000000000020000001010000003A -:10743000000000000000000000000000000000004C -:1074400000004000000000000800000100000000F3 +:10741000000000000000000000000000000000006C +:107420000000080000000000000000000000010053 +:107430000000080000000000000000000000000044 +:10744000000000000000000000000000000000003C :10745000000000000000000000000000000000002C -:1074600000010000A09100C100001000409100C088 -:1074700000001000009000C000000000400000006C +:10746000000000000000000000000000000000001C +:10747000000000000000000000000000000000000C :1074800000000000000000000000000000000000FC -:10749000000000000000000000080011000840414A -:1074A0000000000000000000000080000008100044 -:1074B00000000000000000000000000000000000CC -:1074C000400000000000000000000000000808006C -:1074D000000000000000000000000000001000009C -:1074E0000000000800418091009100000000008829 -:1074F0001080000000000080088040000000800034 +:1074900000000000000000000000000000000000EC +:1074A00010000000000000000000000000000000CC +:1074B000400000000000000000000000000000008C +:1074C00000000000000000000000000000000000BC +:1074D00000000000000000000000000000000000AC +:1074E000000000000000000000000000000000009C +:1074F000000000000000000000000000000000008C :10750000000000000000000000000000000000007B -:107510000000000000000000000000411100000019 -:107520000000000000000000000000081100000042 +:10751000000000000000000000000000000000006B +:10752000000000000000000000000000000000005B :10753000000000000000000000000000000000004B -:10754000000000000000000000000000110000002A -:1075500000000000000000000000000000000041EA -:1075600000000000829191030900050380031121AE -:1075700000000000801180050000000000200000D5 +:10754000000000000000000000000000000000003B +:10755000000000000000000000000000000000002B +:10756000000000000000000000000000000000001B +:10757000000000000000000000000000000000000B :1075800000000000000000000000000000000000FB -:1075900000000000000000000000000000010100E9 -:1075A00000000000000000000000000000010100D9 +:1075900000000000000000000000000000000000EB +:1075A00000000000000000000000000000000000DB :1075B00000000000000000000000000000000000CB -:1075C00000000000000000000000000000000100BA +:1075C00000000000000000000000000000000000BB :1075D00000000000000000000000000000000000AB -:1075E000000100000000C091200000000000C00069 -:1075F000010000009000C001200000000000000019 +:1075E000000000000000000000000000000000009B +:1075F000000000000000000000000000000000008B :10760000000000000000000000000000000000007A -:1076100000000000000000000000000000008100E9 -:1076200043E000228800000000000000000060002D -:1076300043E0002200000000000000000000000005 -:1076400000000000000000060000070000006000CD -:1076500043E00022000000000000000000000000E5 -:107660000000000007008800000000E007000000A4 -:10767000840043E007220000600002E007000000F1 -:1076800000000000070000000000000000000000F3 +:10761000000000000000000000000000000000006A +:1076200000000000000000000000800000000000DA +:10763000000000000000000000004000000000000A +:10764000000000000000000000000000000000003A +:10765000000000000000000000000000000000002A +:10766000000000000000000000000000000000001A +:10767000000000000000000000000000000000000A +:1076800000000000000000000000000000000000FA :1076900000000000000000000000000000000000EA :1076A00000000000000000000000000000000000DA :1076B00000000000000000000000000000000000CA :1076C00000000000000000000000000000000000BA :1076D00000000000000000000000000000000000AA -:1076E00000000000000000000000000000FF00009B -:1076F00000FF00003C3C000000FF000000FF000015 -:1077000000FF00000000000000000000000000007A +:1076E000000000000000000000000000000000009A +:1076F000000000000000000000000000000000008A +:107700000000000000000000000000000000000079 :107710000000000000000000000000000000000069 :107720000000000000000000000000000000000059 :107730000000000000000000000000000000000049 :107740000000000000000000000000000000000039 :107750000000000000000000000000000000000029 -:10776000000000000000000000000000000000FF1A -:10777000000000FF00003C3C000000FF000000FF94 -:10778000000000FF000000000000000000000000FA +:107760000000000000000000000000000000000019 +:107770000000000000000000000000000000000009 +:1077800000000000000000000000000000000000F9 :1077900000000000000000000000000000000000E9 :1077A00000000000000000000000000000000000D9 :1077B00000000000000000000000000000000000C9 :1077C00000000000000000000000000000000000B9 :1077D00000000000000000000000000000000000A9 -:1077E00000000000000000000000FFFF0000FF009C -:1077F0000000FF000000FF000000FF000000FF008D -:10780000000000FFFFFF000000000000000000007B +:1077E0000000000000000000000000000000000099 +:1077F0000000000000000000000000000000000089 +:107800000000000000000000000000000000000078 :107810000000000000000000000000000000000068 :107820000000000000000000000000000000000058 :107830000000000000000000000000000000000048 :107840000000000000000000000000000000000038 :107850000000000000000000000000000000000028 -:10786000000000000000000000000000FFFF00001A -:10787000FF000000FF000000FF000000FF0000000C -:10788000FF00000000FFFFFF0000000000000000FC +:107860000000000000000000000000000000000018 +:107870000000000000000000000000000000000008 +:1078800000000000000000000000000000000000F8 :1078900000000000000000000000000000000000E8 -:1078A000000000000000000000040006800E200020 -:1078B000000000000000000000040006800E200010 -:1078C00000000000000000000000000000000000B8 -:1078D00005180A20050005A000040006800E2000FF -:1078E000000000000000000000000061000E000D1C -:1078F00010C003E3030E0C0992C00386030E8C0E26 -:10790000B2C003E7030E8C0FA2C005180A000500E1 -:1079100005A00000000000000000000000000000C2 -:10792000000000000000000000000000FF00AAAA04 -:10793000000000000000000000000000FF0000FF49 +:1078A00000000000000000000000000000000000D8 +:1078B00005000A00150000A0000000000000000004 +:1078C00005000A00150000A00000000000000000F4 +:1078D00000000000000000000000000000000000A8 +:1078E0000000000000000000000000000000000098 +:1078F0000000000000000000000000000000000088 +:107900000000000000000000000000000000000077 +:107910000000000000000000000000000000000067 +:107920000000000000000000000000000000000057 +:107930000000000000000000000000000000000047 :107940000000000000000000000000000000000037 -:10795000000000000000000000000000FF0000FF29 +:107950000000000000000000000000000000000027 :107960000000000000000000000000000000000017 -:107970000F0F0F0F0000002000303C3C0000FF0004 -:1079800000FF0000000000000000000000000000F8 +:107970000000000000000000000000000000000007 +:1079800000000000000000000000000000000000F7 :1079900000000000000000000000000000000000E7 -:1079A0000000000000000000000000000000FF00D8 -:1079B000AAAA300000000000000000000000FF0044 -:1079C00000FF0000000000000000000000000000B8 -:1079D0000000000000000000000000000000FF00A8 -:1079E00000FF000000000000000000000000000098 -:1079F00000000F0F0F0F0000000000003C3C0000D3 -:107A0000FF0000FF00000000000000000000000078 +:1079A00000000000000000000000000000000000D7 +:1079B00000000000000000000000000000000000C7 +:1079C00000000000000000000000000000000000B7 +:1079D00000000000000000000000000000000000A7 +:1079E0000000000000000000000000000000000097 +:1079F0000000000000000000000000000000000087 +:107A00000000000000000000000000000000000076 :107A10000000000000000000000000000000000066 :107A20000000000000000000000000000000000056 -:107A3000FF0000FF00000000000000000000000048 -:107A4000FF0000FF00000000000000000000000038 +:107A30000000000000000000000000000000000046 +:107A40000000000000000000000000000000000036 :107A50000000000000000000000000000000000026 -:107A6000FF0000FF00000000000000000000000018 -:107A70000000000000000000000000008000000086 -:107A80000000FF0000FF00000000000000000000F8 +:107A60000000000000000000000000000000000016 +:107A70000000000000000000000000000000000006 +:107A800000000000000000000000000000000000F6 :107A900000000000000000000000000000000000E6 :107AA00000000000000000000000000000000000D6 -:107AB0000000FF0000FF00000000000000000000C8 -:107AC0000000FF0000FF00000000000000000000B8 +:107AB00000000000000000000000000000000000C6 +:107AC00000000000000000000000000000000000B6 :107AD00000000000000000000000000000000000A6 -:107AE0000000FF0000FF0000000000000000000098 +:107AE0000000000000000000000000000000000096 :107AF0000000000000000000000000000000000086 -:107B000000000000FF0000FF000000000000000077 +:107B00000000000000000000000000000000000075 :107B10000000000000000000000000000000000065 :107B20000000000000000000000000000000000055 -:107B30000000200000000000000000002000000005 -:107B40002000000000000000000000000000000015 -:107B500000000004000000000002000020000000FF -:107B60002000000000000000000000800020000055 -:107B70000000000100000000000000000000000004 -:107B800000000000000000000000000000000000F5 -:107B900000000000004100000000000000000000A4 -:107BA00000000000000000000000000000000000D5 +:107B30000000000000000000000000000000000045 +:107B400000000000000200004000000000000000F3 +:107B50000000000000000000000000000000000025 +:107B600000000000000000002000000000000000F5 +:107B70000000000000000000000000000000000005 +:107B800000000000000000000000200000000000D5 +:107B900000000000000000000000000000000000E5 +:107BA00000000000000000000000200000000000B5 :107BB00000000000000000000000000000000000C5 -:107BC00000000000000000000000000000000000B5 -:107BD000000000000000000008000000000000009D -:107BE0000000000000000000000000000020000174 -:107BF0000000000000004000000000000000000045 -:107C00000000000000000000000000000000000074 -:107C10000000000000000000000000000000000064 -:107C20000000000000004000000000000000000014 -:107C30000000000000000000000000000000000044 +:107BC00000020000000000000000000200000000B1 +:107BD00000000000000000000000000000000000A5 +:107BE0000000000000000000000000000000100085 +:107BF0000000000000000000000000400000000243 +:107C00000000000200000000000000000000400032 +:107C10000000400000000000000000000000000024 +:107C2000000208000000400000000000000000000A +:107C30000000000000000000000000000000020042 :107C40000000000000000000000000000000000034 -:107C50000000000000000000000000000000000024 +:107C500000000000000000000000000084000000A0 :107C60000000000000000000000000000000000014 -:107C700000000400A0000000000000000000000060 +:107C70000000000000000000000000000000000004 :107C800000000000000000000000000000000000F4 -:107C900000000000000000400000000000000000A4 -:107CA00000000000000000000000000000000000D4 -:107CB000000000000200004000000000000000087A -:107CC00000000000000000000000000000000008AC -:107CD0000000000000000008000000000000000894 -:107CE000000000000000000000000000000000088C -:107CF00000000000800000400000000000000000C4 -:107D0000000800000000000000000000000000006B -:107D1000004000000000000000000000020002001F -:107D20000040000800000000000000080000000003 -:107D300000000000020000000008880000000000B1 +:107C900000000000000000000000000000000000E4 +:107CA0000000000000000000000000009000004004 +:107CB00000000000000000000000000000000000C4 +:107CC00000000000000000000004000000000000B0 +:107CD00000000000000000000000000000000000A4 +:107CE0000000000000000000000000000000000094 +:107CF0000002000000000000000000000000000082 +:107D00000200000000000000000000000000000071 +:107D10000000000000000000000000000000000063 +:107D20000000000000000000000000000000000053 +:107D30000000000000000000000000000000000043 :107D40000000000000000000000000000000000033 -:107D50000000000000009000000000000000000093 -:107D600000000000000000000000400000002000B3 -:107D700000004000000000000000000000000000C3 -:107D80000000000000000080000000210000000052 -:107D900000000000000000000000000800000000DB -:107DA00000000000000000080008000800000008B3 +:107D50000000000000000000000000000000000023 +:107D60000000000000000000000000000000000013 +:107D700000000000000000004000000000000000C3 +:107D800000000000000000000000000000000000F3 +:107D900000000000000000000000000000000000E3 +:107DA00000000000000000000000000000000000D3 :107DB00000000000000000000000000000000000C3 -:107DC0000000000000000000020000000020000091 -:107DD00000000000000000000000000000000000A3 -:107DE000002000040000000002000000000000006D -:107DF0000000000000000000000000000000000083 -:107E00000000000000000000004000000000000032 -:107E1000000000000000000003A0008803A0000094 -:107E200000A00000000000000000000000000000B2 +:107DC000000000000000000000002100008400000E +:107DD0000000000000000000000000400000000063 +:107DE0000000000000000000000000000000000093 +:107DF0000000000040004000000000000000000003 +:107E00000000000000000000000000000000000072 +:107E10000000000000000000000000000000000062 +:107E20000000000000000000000000000000000052 :107E30000000000000000000000000000000000042 :107E40000000000000000000000000000000000032 -:107E500000000000000000000000A0000000000082 -:107E60000000C0000000A000000082000000000030 -:107E700000000000000000000000000000200000E2 -:107E800000000000000000000000080000000800E2 +:107E50000000000000000000000000000000000022 +:107E60000000000000000004000400040004000002 +:107E70000000000000000000000000000000000002 +:107E800000000000000000000000000000000000F2 :107E900000000000000000000000000000000000E2 :107EA00000000000000000000000000000000000D2 :107EB00000000000000000000000000000000000C2 :107EC00000000000000000000000000000000000B2 :107ED00000000000000000000000000000000000A2 :107EE0000000000000000000000000000000000092 -:107EF0000000000000000000000000000000000181 -:107F00000000000000000000004000000000000031 +:107EF00000840000000000000000000000000000FE +:107F00000000000000000000000000000000000071 :107F10000000000000000000000000000000000061 :107F20000000000000000000000000000000000051 :107F30000000000000000000000000000000000041 :107F40000000000000000000000000000000000031 :107F50000000000000000000000000000000000021 -:107F60000800000000000000000000000000000009 -:107F7000000000000000820000000000000000007F -:107F80000000000000000000000000000000008071 +:107F60000000000000000000000000000000000011 +:107F70000000000000000000000000000000000001 +:107F800000000000000000000000000000000000F1 :107F900000000000000000000000000000000000E1 :107FA00000000000000000000000000000000000D1 :107FB00000000000000000000000000000000000C1 -:107FC00000000000210021880088008404000000D7 -:107FD000000000000000002040200084000000009D -:107FE000000000000000000000000004000000008D -:107FF00000000000000000000004008400000000F9 -:108000000000000000000000000000000000000868 -:108010000040000000000008000000840084000010 -:108020000000000021000004000000000004000027 -:10803000000000000000000000000000020000003E -:10804000000000000000000000000002000000002E -:108050000000000000020000000008000000000016 -:108060000000000000020800000000000000000006 -:108070000000000000000000000000000000000000 -:1080800000000000000200000000000000000000EE -:108090000000000000004000000000000000900010 -:1080A00000000000002100020000000000000000AD +:107FC0000000000000000000008802000000000027 +:107FD000000002900000000000000000000000000F +:107FE000000000000000000000000000000004008D +:107FF0000000000000000000000000000000000081 +:108000000000000000000000000000000000000070 +:108010000000000000000000000000000000000060 +:10802000000000040000000000000000000000004C +:108030000000000000000000000000000000000040 +:108040000200000000000002000200110200000017 +:108050000000000000000000000000000000000818 +:108060000000000000000000000000000000000010 +:1080700000000000000000000000000000000004FC +:1080800000000000000000000000000000000000F0 +:1080900000000000000000000000000000000000E0 +:1080A00000000000000000000000000000000000D0 :1080B00000000000000000000000000000000000C0 :1080C00000000000000000000000000000000000B0 :1080D00000000000000000000000000000000000A0 @@ -75811,7 +75811,7 @@ :1080F0000000000000000000000000000000000080 :10810000000000000000000000000000000000006F :10811000000000000000000000000000000000005F -:10812000000000000000400000000000000000000F +:10812000000000000000000000000000000000004F :10813000000000000000000000000000000000003F :10814000000000000000000000000000000000002F :10815000000000000000000000000000000000001F @@ -75819,7 +75819,7 @@ :1081700000000000000000000000000000000000FF :1081800000000000000000000000000000000000EF :1081900000000000000000000000000000000000DF -:1081A00000000400000000000000000000000000CB +:1081A00000000000000000000000000000000000CF :1081B00000000000000000000000000000000000BF :1081C00000000000000000000000000000000000AF :1081D000000000000000000000000000000000009F @@ -75827,7 +75827,7 @@ :1081F000000000000000000000000000000000007F :10820000000000000000000000000000000000006E :10821000000000000000000000000000000000005E -:1082200000000000800000000000000000000000CE +:10822000000000000000000000000000000000004E :10823000000000000000000000000000000000003E :10824000000000000000000000000000000000002E :10825000000000000000000000000000000000001E @@ -75835,38 +75835,38 @@ :1082700000000000000000000000000000000000FE :1082800000000000000000000000000000000000EE :1082900000000000000000000000000000000000DE -:1082A000000000000000800000000000000000004E +:1082A00000000000000000000000000000000000CE :1082B00000000000000000000000000000000000BE :1082C00000000000000000000000000000000000AE :1082D000000000000000000000000000000000009E :1082E000000000000000000000000000000000008E :1082F000000000000000000000000000000000007E -:1083000000000000000000000000002000000088C5 +:10830000000000000000000000000000000000006D :10831000000000000000000000000000000000005D -:108320000000A00082008200C000000000000000E9 +:10832000000000000000000000000000000000004D :10833000000000000000000000000000000000003D :10834000000000000000000000000000000000002D :10835000000000000000000000000000000000001D :10836000000000000000000000000000000000000D :1083700000000000000000000000000000000000FD -:108380000000000000000000000000000000840069 +:1083800000000000000000000000000000000000ED :1083900000000000000000000000000000000000DD -:1083A0000000000000820000000000C0000000008B +:1083A00000000000000000000000000000000000CD :1083B00000000000000000000000000000000000BD :1083C00000000000000000000000000000000000AD :1083D000000000000000000000000000000000009D :1083E000000000000000000000000000000000008D :1083F000000000000000000000000000000000007D -:10840000000000000000000000000000400000002C -:1084100080000200000000000000000000000000DA -:1084200000000000000000000000000000800000CC +:10840000000000000000000000000000000000006C +:10841000000000000000000000000000000000005C +:10842000000000000000000000000000000000004C :10843000000000000000000000000000000000003C :10844000000000000000000000000000000000002C :10845000000000000000000000000000000000001C :10846000000000000000000000000000000000000C :1084700000000000000000000000000000000000FC :1084800000000000000000000000000000000000EC -:10849000004000000000000000000000000000009C +:1084900000000000000000000000000000000000DC :1084A00000000000000000000000000000000000CC :1084B00000000000000000000000000000000000BC :1084C00000000000000000000000000000000000AC @@ -75875,14 +75875,14 @@ :1084F000000000000000000000000000000000007C :10850000000000000000000000000000000000006B :10851000000000000000000000000000000000005B -:1085200000000000000000000000000000A000A00B +:10852000000000000000000000000000000000004B :10853000000000000000000000000000000000003B :10854000000000000000000000000000000000002B :10855000000000000000000000000000000000001B :10856000000000000000000000000000000000000B :1085700000000000000000000000000000000000FB :1085800000000000000000000000000000000000EB -:1085900000000006000007000000000000000000CE +:1085900000000000000000000000000000000000DB :1085A00000000000000000000000000000000000CB :1085B00000000000000000000000000000000000BB :1085C00000000000000000000000000000000000AB @@ -75891,8 +75891,8 @@ :1085F000000000000000000000000000000000007B :10860000000000000000000000000000000000006A :10861000000000000000000000000000000000005A -:108620000000000000000000000000000000FFFF4C -:10863000FFFF3C3C000000000000000000000000C4 +:10862000000000000000000000000000000000004A +:10863000000000000000000000000000000000003A :10864000000000000000000000000000000000002A :10865000000000000000000000000000000000001A :10866000000000000000000000000000000000000A @@ -75900,7 +75900,7 @@ :1086800000000000000000000000000000000000EA :1086900000000000000000000000000000000000DA :1086A00000000000000000000000000000000000CA -:1086B000FFFFFFFF000000000000000000000000BE +:1086B00000000000000000000000000000000000BA :1086C00000000000000000000000000000000000AA :1086D000000000000000000000000000000000009A :1086E000000000000000000000000000000000008A @@ -75916,7 +75916,7 @@ :1087800000000000000000000000000000000000E9 :1087900000000000000000000000000000000000D9 :1087A00000000000000000000000000000000000C9 -:1087B000FFFFFFFFFFFFFFFF0006000000000000BB +:1087B00000000000000000000000000000000000B9 :1087C00000000000000000000000000000000000A9 :1087D0000000000000000000000000000000000099 :1087E0000000000000000000000000000000000089 @@ -75924,15 +75924,15 @@ :108800000000000000000000000000000000000068 :108810000000000000000000000000000000000058 :108820000000000000000000000000000000000048 -:108830000000FFFFFFFFFFFFFFFF0000000400003C +:108830000000000000000000000000000000000038 :108840000000000000000000000000000000000028 :108850000000000000000000000000000000000018 :108860000000000000000000000000000000000008 :1088700000000000000000000000000000000000F8 :1088800000000000000000000000000000000000E8 -:1088900000000000000000000000000000000500D3 -:1088A0000A28050000A000000000000000000000F1 -:1088B00000000000000010060000000000008A0018 +:1088900000000000000000000000000000000000D8 +:1088A00000000000000000000000000000000000C8 +:1088B00000000000000000000000000000000000B8 :1088C00000000000000000000000000000000000A8 :1088D0000000000000000000000000000000000098 :1088E0000000000000000000000000000000000088 @@ -75968,121 +75968,121 @@ :108AC00000000000000000000000000000000000A6 :108AD0000000000000000000000000000000000096 :108AE0000000000000000000000000000000000086 -:108AF00000000000000000002000200020002000F6 -:108B00000000000000000000000000000000400025 -:108B100000000000000000002000200020002000D5 -:108B20000000000000000000001100000400200010 -:108B30000003000000000000000000000000000032 -:108B400000000000000000000000012000002100E3 -:108B500020000000000000000004000000000000F1 -:108B600000000000000000040004000000002000DD -:108B700020000000000000000000000000000000D5 -:108B800000000000000000000000000000000000E5 -:108B900000000000000000000000000008820082C9 -:108BA0000000080000000400000000000000400079 -:108BB000000000000000000000C0000000000000F5 -:108BC00000000000000000000000000002010000A2 -:108BD0000400000000000000000000000000004051 -:108BE0000000000000000000000000000000000085 -:108BF0000000000000000000000000000100010073 -:108C00000100020000000000000000000000000061 -:108C10000000000000000000000000000000000054 -:108C20000000000000000000000000000000000044 -:108C30000000000000000000000000000000020032 -:108C40000000020002000000000000000000880098 -:108C50000000880088000000000000000000000004 -:108C60000000000000000000000000000000000004 -:108C700000000000000000000000000000000200F2 -:108C8000020002008000000002000200000000005C -:108C900000000000000800000000000000000000CC -:108CA00002000000000000000000000000000400BE -:108CB000000000000088000000000000000000002C -:108CC00000000200000000000000000000000000A2 -:108CD0000000090000000000000000000000000883 +:108AF0000000000000000000000000000004000072 +:108B00000000000000000000000000000000000065 +:108B10000000000000000000000000000000000055 +:108B20000002000000000000000000000000000241 +:108B30000000000000000000000000000000000035 +:108B40000000000000000000000000000000000025 +:108B50000000000000000000000000000000000015 +:108B60000000000000000000000000000000000005 +:108B700000000002000000000000000000001000E3 +:108B80000002400000000000000000900002000011 +:108B9000000400040000000000000000000040028B +:108BA00000024000000000020000009000000000F1 +:108BB000210400000002000021001000400000001D +:108BC0004000000040004002400000001000000291 +:108BD0000002000000000000000000000000000093 +:108BE00000000000400200000002000240000000FF +:108BF0000000000000000000000000000000000075 +:108C00000000020000000000000000000000000062 +:108C10000400040000000000020000000000040046 +:108C2000040004000200000000000000000000003A +:108C30000000000000000200000000000000000032 +:108C40000000000002000000000000000000000022 +:108C5000000000000800000000000000000000000C +:108C6000000004000400000000000000A00000005C +:108C700000000000080000000200000002000000E8 +:108C800000000400000000040000000000000400D8 +:108C900000000000000000000000000000000000D4 +:108CA00002000200020041004100410041000000BA +:108CB00000000000020000000000000000000000B2 +:108CC0000400000004000400000000000000000098 +:108CD0000000000000000200000000000000000092 :108CE0000000000000000000000000000000000084 -:108CF0000000000000000000000000000400200050 -:108D00000000000000000000000000000000000063 -:108D100000000000000000000000400000004000D3 -:108D2000000000000000000020008800400040001B -:108D300040008800900000000000000004000400D3 -:108D4000000004000000000000000000000000001F -:108D5000000040000500020090002000000000001C +:108CF0000000000000000000000000000000000074 +:108D000000000000000088000000000000000000DB +:108D100000000000000090000000020000000000C1 +:108D20000000000000000000000000000000000043 +:108D30000000000000000000000000000000000033 +:108D40000000000000000000000000000000000023 +:108D50000000000000000000000000000000000013 :108D60000000000000000000000000000000000003 -:108D700000000000000000000000002000000000D3 +:108D700000000000000000000000000000000000F3 :108D800000000000000000000000000000000000E3 :108D900000000000000000000000000000000000D3 -:108DA00000000000000000000000000003000000C0 -:108DB00000000000000400000000000000000000AF +:108DA00000000000000000000000000000000000C3 +:108DB00000000000000000000000000000000000B3 :108DC00000000000000000000000000000000000A3 -:108DD0000000000000008200800000000000000091 +:108DD0000000000000000000000000000000000093 :108DE0000000000000000000000000000000000083 :108DF0000000000000000000000000000000000073 -:108E00000000000000000000000001000000000061 -:108E10000000000000000000000000000000C00092 -:108E20000000000000000000000000000000000042 -:108E3000000000000000000000000005000000002D -:108E40000000000000000800080008000800000002 -:108E50000000000000000000000000000100000011 -:108E60000000000000000000000000000000000002 +:108E00000000000000000000000000000000000062 +:108E10000000000000000000000000000000000052 +:108E200000000000004100040004000400000040B5 +:108E300000400000000000000000000000000000F2 +:108E40000000000000000000000000000000000022 +:108E50000000000000000000000000000000000012 +:108E600000000000000000000000000000100000F2 :108E700000000000000000000000000000000000F2 -:108E800000000000000000000000000004000000DE +:108E800000000000000000000000000000000000E2 :108E900000000000000000000000000000000000D2 -:108EA00000000000000000000000000000000000C2 +:108EA00000000000020000000000000000000000C0 :108EB00000000000000000000000000000000000B2 :108EC00000000000000000000000000000000000A2 -:108ED000000000000000000000001100000004007D +:108ED0000000000000000000000000000000000092 :108EE0000000000000000000000000000000000082 :108EF0000000000000000000000000000000000072 :108F00000000000000000000000000000000000061 -:108F1000000000000000080000000000C000000089 +:108F10000000000000000000000000000000000051 :108F20000000000000000000000000000000000041 :108F30000000000000000000000000000000000031 :108F40000000000000000000000000000000000021 :108F50000000000000000000000000000000000011 -:108F60000080000000000000000000000000000081 +:108F60000000000000000000000000000000000001 :108F700000000000000000000000000000000000F1 -:108F80000000000000000088040200000000000053 -:108F90000000000000000000000000000000008849 +:108F800000000000000000000002000000000000DF +:108F900000000000000000002000000000000000B1 :108FA00000000000000000000000000000000000C1 :108FB00000000000000000000000000000000000B1 -:108FC000008400000000000000000000000000001D +:108FC00000000000000000000000000000000000A1 :108FD0000000000000000000000000000000000091 -:108FE0000000004000000000000000000000000041 +:108FE0000000000000000000000000000000000081 :108FF0000000000000000000000000000000000071 -:109000000000000000000800000000000000000058 +:109000000000000000000000000000000000000060 :109010000000000000000000000000000000000050 :109020000000000000000000000000000000000040 -:10903000000000000000000004000000000000002C -:109040000000000000000000000000000008000018 +:109030000000000000000000000000000000000030 +:109040000000000000000000000000000000000020 :109050000000000000000000000000000000000010 :109060000000000000000000000000000000000000 :1090700000000000000000000000000000000000F0 :1090800000000000000000000000000000000000E0 -:1090900000000000000000200000000000000000B0 +:1090900000000000000000000000000000000000D0 :1090A00000000000000000000000000000000000C0 -:1090B00000000000000000000000040000000000AC -:1090C000000021000000000000000000000000007F +:1090B00000000000000000000000000000000000B0 +:1090C00000000000000000000000000000000000A0 :1090D0000000000000000000000000000000000090 :1090E0000000000000000000000000000000000080 :1090F0000000000000000000000000000000000070 :10910000000000000000000000000000000000005F -:1091100000000090000000000000000000000000BF +:10911000000000000000000000000000000000004F :10912000000000000000000000000000000000003F :10913000000000000000000000000000000000002F :10914000000000000000000000000000000000001F :10915000000000000000000000000000000000000F -:10916000000000000090000000000000000000006F +:1091600000000000000000000000000000000000FF :1091700000000000000000000000000000000000EF :1091800000000000000000000000000000000000DF -:10919000000000000080000000000000000000004F +:1091900000000000000000000000000000000000CF :1091A00000000000000000000000000000000000BF :1091B00000000000000000000000000000000000AF :1091C000000000000000000000000000000000009F :1091D000000000000000000000000000000000008F -:1091E00000000000000000800000000000000000FF +:1091E000000000000000000000000000000000007F :1091F000000000000000000000000000000000006F :10920000000000000000000000000000000000005E -:1092100000000000000000800000000000000000CE +:10921000000000000000000000000000000000004E :10922000000000000000000000000000000000003E :10923000000000000000000000000000000000002E :10924000000000000000000000000000000000001E @@ -76090,94 +76090,94 @@ :1092600000000000000000000000000000000000FE :1092700000000000000000000000000000000000EE :1092800000000000000000000000000000000000DE -:10929000000000000000000000040000004000008A +:1092900000000000000000000000000000000000CE :1092A00000000000000000000000000000000000BE :1092B00000000000000000000000000000000000AE :1092C000000000000000000000000000000000009E :1092D000000000000000000000000000000000008E -:1092E00000000000000000000000004000000040FE +:1092E000000000000000000000000000000000007E :1092F000000000000000000000000000000000006E :10930000000000000000000000000000000000005D -:10931000000000000000000000000000409000007D +:10931000000000000000000000000000000000004D :10932000000000000000000000000000000000003D :10933000000000000000000000000000000000002D :10934000000000000000000000000000000000001D :10935000000000000000000000000000000000000D -:10936000000000000000000000000000000040902D +:1093600000000000000000000000000000000000FD :1093700000000000000000000000000000000000ED :1093800000000000000000000000000000000000DD -:10939000000000000000000000002000000000802D +:1093900000000000000000000000000000000000CD :1093A00000000000000000000000000000000000BD :1093B00000000000000000000000000000000000AD :1093C000000000000000000000000000000000009D :1093D000000000000000000000000000000000008D -:1093E000000000000000000000000000400000003D -:1093F00000800000000000000000000000000000ED +:1093E000000000000000000000000000000000007D +:1093F000000000000000000000000000000000006D :10940000000000000000000000000000000000005C -:1094100000000000000000000000000000118000BB +:10941000000000000000000000000000000000004C :10942000000000000000000000000000000000003C :10943000000000000000000000000000000000002C :10944000000000000000000000000000000000001C :10945000000000000000000000000000000000000C -:1094600000000000000000000000000000000011EB -:10947000800000000000000000000000000000006C +:1094600000000000000000000000000000000000FC +:1094700000000000000000000000000000000000EC :1094800000000000000000000000000000000000DC -:1094900000000000000000000000000000000001CB -:1094A0002000008800000000000000000000000014 +:1094900000000000000000000000000000000000CC +:1094A00000000000000000000000000000000000BC :1094B00000000000000000000000000000000000AC :1094C000000000000000000000000000000000009C :1094D000000000000000000000000000000000008C :1094E000000000000000000000000000000000007C -:1094F00000012000008800000000000000000000C3 +:1094F000000000000000000000000000000000006C :10950000000000000000000000000000000000005B :10951000000000000000000000000000000000004B -:109520000000000007000000000000000000000034 +:10952000000000000000000000000000000000003B :10953000000000000000000000000000000000002B :10954000000000000000000000000000000000001B :10955000000000000000000000000000000000000B :1095600000000000000000000000000000000000FB -:109570000000000A840007810000000000000000D5 +:1095700000000000000000000000000000000000EB :1095800000000000000000000000000000000000DB :1095900000000000000000000000000000000000CB -:1095A000000000FF000000FF0000000000000000BD +:1095A00000000000000000000000000000000000BB :1095B00000000000000000000000000000000000AB :1095C000000000000000000000000000000000009B :1095D000000000000000000000000000000000008B :1095E000000000000000000000000000000000007B -:1095F0000000000000FF000000FF0000000000006D +:1095F000000000000000000000000000000000006B :10960000000000000000000000000000000000005A :10961000000000000000000000000000000000004A -:109620000000000000FF000000FF0000000000003C +:10962000000000000000000000000000000000003A :10963000000000000000000000000000000000002A :10964000000000000000000000000000000000001A :10965000000000000000000000000000000000000A :1096600000000000000000000000000000000000FA -:1096700000000000000000FF000000FF00000000EC +:1096700000000000000000000000000000000000EA :1096800000000000000000000000000000000000DA :1096900000000000000000000000000000000000CA -:1096A0000000000000000000FF000000FFFF0000BD +:1096A00000000000000000000000000000000000BA :1096B00000000000000000000000000000000000AA :1096C000000000000000000000000000000000009A :1096D000000000000000000000000000000000008A :1096E000000000000000000000000000000000007A -:1096F00000000000000000000000FF000000FFFF6D +:1096F000000000000000000000000000000000006A :109700000000000000000000000000000000000059 :109710000000000000000000000000000000000049 -:1097200000000000000000000000FF00000000003A +:109720000000000000000000000000000000000039 :109730000000000000000000000000000000000029 :109740000000000000000000000000000000000019 :109750000000000000000000000000000000000009 :1097600000000000000000000000000000000000F9 -:10977000000000000000000000000000FF000000EA +:1097700000000000000000000000000000000000E9 :1097800000000000000000000000000000000000D9 :1097900000000000000000000000000000000000C9 -:1097A0000000000000000000000015002A00054035 -:1097B00000A8000000000000000000000000000001 +:1097A00000000000000000000000000000000000B9 +:1097B00000000000000000000000000000000000A9 :1097C0000000000000000000000000000000000099 :1097D0000000000000000000000000000000000089 :1097E0000000000000000000000000000000000079 -:1097F00000000000000000000000000015182A20F2 -:10980000054005A800000000000000000000000066 +:1097F0000000000000000000000000000000000069 +:109800000000000000000000000000000000000058 :109810000000000000000000000000000000000048 :109820000000000000000000000000000000000038 :109830000000000000000000000000000000000028 @@ -76211,190 +76211,190 @@ :1099F0000000000000000000000000000000000067 :109A00000000000000000000000000000000000056 :109A10000000000000000000000000000000000046 -:109A20000000000000000000000000000000000036 -:109A300000000000200020002000000000000000C6 -:109A40000000000000000002000000000000000014 -:109A500000000000000000000000000000020040C4 -:109A60000080C080000000880080008000010000AD +:109A20000000000000000000000000000000000234 +:109A30000000000000000000000000000000000026 +:109A40000008000000000000000500000002000007 +:109A50000000000000000000000000040000000002 +:109A600000000000000000000000000000000000F6 :109A700000000000000000000000000000000000E6 -:109A800000000000200000000000000000000000B6 +:109A800000000000000000000000000000000000D6 :109A900000000000000000000000000000000000C6 -:109AA0000000000020000000000000000000000096 -:109AB0000000000000000000004000000000000066 -:109AC0000000000000000002000000020000000092 -:109AD0000000000000000000004000C00000400046 -:109AE0000003002000200000000500040004000026 -:109AF0000000000000000000000000000000000066 -:109B000000400000000000000000004000000000D5 -:109B100040000002000200000000004000000000C1 -:109B20000000000000000000000000000000000035 -:109B30000000000000000000000000000000000025 -:109B40000100010001000100000000000000000011 +:109AA00000000000000000000002000000000000B4 +:109AB0000000000010000000000000000000000096 +:109AC0000000009000000000000000000000000006 +:109AD0000000000000040000000000000000000280 +:109AE00000020002110200000090000000000000CF +:109AF00000000002004000004000000040000000A4 +:109B0000000200000000000000000002000400004D +:109B10001000000000000000000000000000000035 +:109B2000000000024000000240020040000000006F +:109B30000000000000000000040004000400040015 +:109B40000000000000000000000000000000000015 :109B50000000000000000000000000000000000005 -:109B600000000000000000000000000000000000F5 +:109B600000000000000000000200000001000000F2 :109B700000000000000000000000000000000000E5 -:109B800008000000000000000000000000000000CD -:109B900000000000000000000000000000000000C5 -:109BA00000100000000004000000000000000000A1 +:109B800000000000000000000400000000000200CF +:109B900000000000000000000800000000000000BD +:109BA00000000000000000000000000000000000B5 :109BB00000000000000000000000000000000000A5 -:109BC0000000100010001000100000000000000055 +:109BC0000000000000000000000000000000000095 :109BD0000000000000000000000000000000000085 -:109BE000000000000000000009000000000000006C +:109BE000000000000000008200008000000008006B :109BF0000000000000000000000000000000000065 :109C00000000000000000000000000000000000054 -:109C1000000000000000050000000000000000003F -:109C20000000000000000400000000000000000030 +:109C10000000000000000000000000000000000044 +:109C20000000000000000000000000000000000034 :109C30000000000000000000000000000000000024 -:109C40000000000000000000900000000000000084 -:109C50000000000000000000000000009000000074 -:109C600000000000020000800080020010000000E0 -:109C700000000100000000000000000000000000E3 +:109C40000000000000000000000000000000000014 +:109C50000000000000000000000000000000000004 +:109C6000004000110000000000000000A000C00043 +:109C7000000088000000000000000000000000005C :109C800000000000000000000000000000000000D4 -:109C900000000000000000000400000000000400BC +:109C900000000000040000000000000000000000C0 :109CA00000000000000000000000000000000000B4 -:109CB0000000000000002100000000000000000083 -:109CC0000000002000200000000000000000000054 -:109CD0000000000000000000000000000000000084 -:109CE000000000000000800000200040808880000C -:109CF0000000000010000000000000000000000054 +:109CB00000000000000000000000000000000000A4 +:109CC0000000000000400000000000000000000054 +:109CD00000000082000000000000000000004000C2 +:109CE00040004000400000000000000000000000B4 +:109CF0000000000000000000000000000000000064 :109D00000000000000000000000000000000000053 -:109D1000000000000000000000000000000000083B +:109D10000000000000000000000000000000000043 :109D20000000000000000000000000000000000033 -:109D3000000000000000000008000000000000001B -:109D40000000000000000000000000000000010012 -:109D50000000000000000000000000000000A00063 -:109D600000000000000000000000000000000100F2 -:109D700000000000000001000000000000000000E2 +:109D30000000000000000000000000000000000023 +:109D40000000000000000000000000000000000013 +:109D50000000000000000000000000000000000003 +:109D600000000004000000000000000000000000EF +:109D700000000000000000000000000000000000E3 :109D800000000000000000000000000000000000D3 :109D900000000000000000000000000000000000C3 -:109DA00000000000000000000000000000000000B3 +:109DA00000000008000000000000000000000000AB :109DB00000000000000000000000000000000000A3 :109DC0000000000000000000000000000000000093 -:109DD0002000000000000000000000000000000063 -:109DE0000000000000000000000000000000210052 -:109DF000040000000000000020000000000000003F +:109DD0000000000000000000000000000000000083 +:109DE0000000000000000000000000000000000073 +:109DF0000000000000000000000000000000000063 :109E00000000000000000000000000000000000052 :109E10000000000000000000000000000000000042 :109E20000000000000000000000000000000000032 :109E30000000000000000000000000000000000022 :109E40000000000000000000000000000000000012 -:109E50000000000000000000000000000000000002 -:109E600000000000000000000000000001002000D1 -:109E70000000000001000000008000000000000061 +:109E500000000000000000000000000000000040C2 +:109E60000000000000009000900090000000100032 +:109E7000C00000000000A000000000000000000082 :109E800000000000000000000000000000000000D2 :109E900000000000000000000000000000000000C2 :109EA00000000000000000000000000000000000B2 :109EB00000000000000000000000000000000000A2 -:109EC00000000000002000000000000000840000EE -:109ED0000000000000000000000000000020000062 -:109EE000000000000000000000000000000004006E -:109EF000000000000000200000000008000000003A +:109EC0000000000000000000000002000000000090 +:109ED00000000000000000000000000000A00000E2 +:109EE0000000000000000000000000000000000072 +:109EF0000000000000000000000000000000000062 :109F00000000000000000000000000000000000051 -:109F100000000000000000000000000000000084BD +:109F10000000000000000000000000000000000041 :109F20000000000000000000000000000000000031 :109F30000000000000000000000000000000000021 :109F40000000000000000000000000000000000011 -:109F500000000000000000020000000000000800F7 -:109F600000000000000000000800080008000000D9 -:109F7000000000008400000000000000000000005D +:109F50000000000000000000000000000000000001 +:109F600000000000000000000000000000000000F1 +:109F7000C000C00000000000000000000000000061 :109F800000000000000000000000000000000000D1 :109F900000000000000000000000000000000000C1 -:109FA00000000000000000000002000000000000AF +:109FA00000000000000000000000000000000000B1 :109FB00000000000000000000000000000000000A1 :109FC0000000000000000000000000000000000091 :109FD0000000000000000000000000000000000081 -:109FE0000000000000000000000000000000000071 -:109FF0000000210021000000000000000088000097 -:10A000002000000000000000000000000000000030 -:10A01000000005000000000000000000000000003B +:109FE0000000000000000000000020000000200031 +:109FF000400400000000000000000000000000001D +:10A00000000000004100000000000000000000000F +:10A010000000000000000000000000000000000040 :10A020000000000000000000000000000000000030 :10A030000000000000000000000000000000000020 :10A040000000000000000000000000000000000010 -:10A0500000000000010000000000000000000000FF +:10A050000000000000000000000000000000000000 :10A0600000000000000000000000000000000000F0 -:10A07000000000000000009000000000010000004F -:10A0800000000000000000000000000000000000D0 +:10A0700000000000000000000000000002000000DE +:10A080000000900000000000000000000000000040 :10A0900000000000000000000000000000000000C0 :10A0A00000000000000000000000000000000000B0 :10A0B00000000000000000000000000000000000A0 :10A0C0000000000000000000000000000000000090 -:10A0D000000000000000110000210000000000004E +:10A0D0000000000000000000000000000000000080 :10A0E0000000000000000000000000000000000070 -:10A0F00000000000000000000080000000001100CF -:10A10000002100000000000000000000000000002E +:10A0F00000000000000000000000000000008000E0 +:10A10000000000000000000000000000000000004F :10A11000000000000000000000000000000000003F :10A12000000000000000000000000000000000002F :10A13000000000000000000000000000000000001F :10A14000000000000000000000000000000000000F -:10A15000000000000000000000400000114000006E +:10A1500000000000000000000000000000000000FF :10A1600000000000000000000000000000000000EF -:10A17000000000000000000000000080000000005F -:10A1800000030000110500000000000000000000B6 +:10A1700000000000000000000000000000000000DF +:10A1800000000000000000000000000000000000CF :10A1900000000000000000000000000000000000BF :10A1A00000000000000000000000000000000000AF :10A1B000000000000000000000000000000000009F :10A1C000000000000000000000000000000000008F -:10A1D000000000000000000000000000000001017D +:10A1D000000000000000000000000000000000007F :10A1E000000000000000000000000000000000006F -:10A1F000000000000000000000000000000400005B -:10A20000004000000000010000000000000000000D +:10A1F000000000000000000000000000000000005F +:10A20000000000000000000000000000000000004E :10A21000000000000000000000000000000000003E :10A22000000000000000000000000000000000002E :10A23000000000000000000000000000000000001E :10A24000000000000000000000000000000000000E -:10A25000000000000000000000000000000090006E -:10A2600000010000000000000000000000000000ED +:10A2500000000000000000000000000000000000FE +:10A2600000000000000000000000000000000000EE :10A2700000000000000000000000000000000000DE -:10A280000490000000002000000101000000000018 +:10A280000000000000880008009000C000000000EE :10A2900000000000000000000000000000000000BE :10A2A00000000000000000000000000000000000AE :10A2B000000000000000000000000000000000009E :10A2C000000000000000000000000000000000008E :10A2D000000000000000000000000000000000007E -:10A2E0000000000820000000000000000000000046 -:10A2F0000000000000000000000000000000050059 -:10A3000000008080000000008000000810000000B5 +:10A2E000000000000000000000000000000000006E +:10A2F000000000000000000000000000000000005E +:10A3000000000000000000000000000000800000CD :10A31000000000000000000000000000000000003D :10A32000000000000000000000000000000000002D :10A33000000000000000000000000000000000001D :10A34000000000000000000000000000000000000D :10A3500000000000000000000000000000000000FD -:10A3600000001100000000000000000000000000DC +:10A3600000000000000000000000000000000000ED :10A3700000000000000000000000000000000000DD -:10A380000011800000000000000811000000000023 +:10A3800000000000000000000000000000000000CD :10A3900000000000000000000000000000000000BD :10A3A00000000000000000000000000000000000AD :10A3B000000000000000000000000000000000009D :10A3C000000000000000000000000000000000008D :10A3D000000000000000000000000000000000007D -:10A3E000000000000100000000000000000000006C +:10A3E000000000000000000000000000000000006D :10A3F000000000000000000000000000000000005D -:10A4000000000001200000880000000101000000A1 +:10A40000000000000000000000000000000000004C :10A41000000000000000000000000000000000003C :10A42000000000000000000000000000000000002C :10A43000000000000000000000000000000000001C :10A44000000000000000000000000000000000000C :10A4500000000000000000000000000000000000FC -:10A4600000000000000000E000000000000000000C +:10A4600000000000000000000000000000000000EC :10A4700000000000000000000000000000000000DC -:10A4800000000000000A840007850000500043E03F -:10A49000002200000000000000000000000000009A +:10A4800000000000000000000000000000000000CC +:10A4900000000000000000000000000000000000BC :10A4A00000000000000000000000000000000000AC :10A4B000000000000000000000000000000000009C :10A4C000000000000000000000000000000000008C :10A4D000000000000000000000000000000000007C :10A4E000000000000000000000000000000000006C :10A4F000000000000000000000000000000000005C -:10A500000000000000000000FF000000FF0000004D -:10A51000000000000000000000000000000000003B +:10A50000000000000000000000000000000000004B +:10A5100000003C007C600000000000000000000023 :10A52000000000000000000000000000000000002B :10A53000000000000000000000000000000000001B :10A54000000000000000000000000000000000000B :10A5500000000000000000000000000000000000FB :10A5600000000000000000000000000000000000EB :10A5700000000000000000000000000000000000DB -:10A5800000000000000000000000FF000000FF00CD -:10A5900000000000000000000000000000000000BB +:10A5800000000000000000000000000000000000CB +:10A59000000000007C603C000000000000000000A3 :10A5A00000000000000000000000000000000000AB :10A5B000000000000000000000000000000000009B :10A5C000000000000000000000000000000000008B @@ -76409,774 +76409,774 @@ :10A6500000000000000000000000000000000000FA :10A6600000000000000000000000000000000000EA :10A6700000000000000000000000000000000000DA -:10A6800000000000000000000000000000FF0000CB -:10A69000FFFF0000000000000000000000000000BC +:10A6800000000000000000000000000000000000CA +:10A6900000000000000000000000000000000000BA :10A6A00000000000000000000000000000000000AA :10A6B000000000000000000000000000000000009A :10A6C000000000000000000000000000000000008A :10A6D000000000000000000000000000000000007A :10A6E000000000000000000000000000000000006A :10A6F000000000000000000000000000000000005A -:10A70000000000000000000000000000000000FF4A +:10A700000000000000000000000000000000000049 :10A710000000000000000000000000000000000039 :10A720000000000000000000000000000000000029 :10A730000000000000000000000000000000000019 :10A740000000000000000000000000000000000009 :10A7500000000000000000000000000000000000F9 :10A7600000000000000000000000000000000000E9 -:10A7700000000006000C00000000000000000000C7 +:10A7700000000000000000000000000000000000D9 :10A7800000000000000000000000000000000000C9 -:10A7900015182A20054004A800040006800E200099 +:10A790000000000000000000000000000090000029 :10A7A00000000000000000000000000000000000A9 :10A7B0000000000000000000000000000000000099 :10A7C0000000000000000000000000000000000089 :10A7D0000000000000000000000000000000000079 :10A7E0000000000000000000000000000000000069 -:10A7F00000000000FF0000FF00000000000000005B +:10A7F0000000000000000000000000000000000059 :10A800000000000000000000000000000000000048 -:10A81000000000000000000000000000FF0000FF3A +:10A810000000000000000000000000000000000038 :10A820000000000000000000000000000000000028 :10A830000000000000000000000000000000000018 :10A840000000000000000000000000000000000008 :10A8500000000000000000000000000000000000F8 :10A8600000000000000000000000000000000000E8 -:10A87000000000000000FF0000FF000000000000DA +:10A8700000000000000000000000000000000000D8 :10A8800000000000000000000000000000000000C8 -:10A890000000000000000000000000000000FF00B9 -:10A8A00000FF0000000000000000000000000000A9 +:10A8900000000000000000000000000000000000B8 +:10A8A00000000000000000000000000000000000A8 :10A8B0000000000000000000000000000000000098 :10A8C0000000000000000000000000000000000088 :10A8D0000000000000000000000000000000000078 :10A8E0000000000000000000000000000000000068 -:10A8F0000000000000000000FF0000FF000000005A +:10A8F0000000000000000000000000000000000058 :10A900000000000000000000000000000000000047 :10A910000000000000000000000000000000000037 -:10A92000FF0000FF00000000000000000000000029 +:10A920000000000000000000000000000000000027 :10A930000000000000000000000000000000000017 :10A940000000000000000000000000000000000007 :10A9500000000000000000000000000000000000F7 :10A9600000000000000000000000000000000000E7 -:10A9700000000000000000000000FF0000FF0000D9 +:10A9700000000000000000000000000000000000D7 :10A9800000000000000000000000000000000000C7 :10A9900000000000000000000000000000000000B7 -:10A9A0000000FF0000FF00000000000000000000A9 +:10A9A00000000000000000000000000000000000A7 :10A9B0000000000000000000000000000000000097 :10A9C0000000000000000000000000000000000087 :10A9D0000000000000000000000000000000000077 :10A9E0000000000000000000000000000000000067 -:10A9F0002000000000000000200000000000000017 -:10AA000000000000000000000000C000C000008046 -:10AA1000C000000000000000020000000000000074 -:10AA20008800008804800080008800032000000067 -:10AA3000000000000000000000002000880000006E -:10AA40000000200000002080010020802000000085 -:10AA500000000000000000000000200020000000B6 -:10AA600000002004000020000000000000000000A2 -:10AA70000090000000000000000010000000000036 -:10AA800000000000000000000000000000020002C2 -:10AA90000020000200000000400000000000000054 -:10AAA0000000000000050004000400050000000094 -:10AAB0000090000000000000000000000000000006 -:10AAC00000000000000000000004200080040000DE -:10AAD0000000000000000000000000000000000076 -:10AAE0000000000000000000000000000000000066 -:10AAF0000000000000000000000000000000000056 -:10AB00000000000000000000000000000000000045 -:10AB10000000000000000000000000000000000035 -:10AB20000000000000000000000000000000000025 -:10AB30000000000000000000000000000000020013 -:10AB400000000000000000000100050000000100FE -:10AB500000000000000000000000000000000000F5 -:10AB600000000000000000000000000000000008DD -:10AB700000000000000000000000000000000000D5 -:10AB800000000000000000000400040004000000B9 -:10AB900000000400040000000000000000000000AD -:10ABA00000000000000000000000000005000000A0 -:10ABB0000000000000000000000004000000000091 -:10ABC0000000000000000000000010001000000065 -:10ABD0001000000000000000000000000400000061 -:10ABE000000800000000000000000000000000005D -:10ABF0002000000000000000000000000000000035 -:10AC00000000000000000000000000000000000044 -:10AC1000000000000400000004000000000000002C -:10AC200000000000000004000400040010001000F8 -:10AC30000000000000000000000001000000000013 -:10AC400000000000000000000000000020000000E4 +:10A9F000000000000000000400040000000000004F +:10AA0000000000800000A00800000004000000001A +:10AA1000000000000000000000040003000000002F +:10AA20000000000000000000000000021000100004 +:10AA30000000000000000000000000040000000012 +:10AA40000000000000000000000000000000000006 +:10AA500000000000000000001000000000000000E6 +:10AA600000000000000000000000000040000000A6 +:10AA700000000000000000000000000000020002D2 +:10AA80000002000000020000400100004000000041 +:10AA9000000000840002000000000002000200022A +:10AAA00000000000400000024000000200004002E0 +:10AAB000419040C0000000000000000000020000C3 +:10AAC0000000000000000000009000900002400024 +:10AAD00000000000000040000000800200040000B0 +:10AAE0000000000000020000000000000000000064 +:10AAF0000000000000000000000000000400000052 +:10AB0000000000000000020000000400000000003F +:10AB100000000000000004000200000082000100AC +:10AB20000000000000000000000000000400000021 +:10AB3000020002000000000000000000000004000D +:10AB40000000000000008800000000000000040079 +:10AB5000000000000000000002000200004004406D +:10AB6000020002000040004002000200024000001B +:10AB700000000000000000000000000000080000CD +:10AB8000000004000000040000000000410000007C +:10AB900000000000000000000000000000040000B1 +:10ABA000400000000000000000000400040000005D +:10ABB0000000000000000000000000000000000095 +:10ABC00000000000000000000000040000900400ED +:10ABD0000000200020000000000080008000000134 +:10ABE0000001800080000001000180008000000161 +:10ABF0000000000000000000000000000000000055 +:10AC00000000000000000000000000001000000034 +:10AC10000000000000000000000000000000000034 +:10AC2000000000000000000000090000900000008B +:10AC300090000000000000008800000000000000FC +:10AC40000000000000000000000000000000000004 :10AC500000000000000000000000000000000000F4 -:10AC600000000000000000000000000000000000E4 -:10AC700000000000000000000000000000000000D4 -:10AC80000000410000000000000000000000000083 -:10AC900000000000000080000000840000000000B0 -:10ACA00002000800000000000000000000208000FA -:10ACB00080000000000000000000000020000000F4 -:10ACC0000000000000000000000000000000800004 +:10AC600000000000000000000000000000210021A2 +:10AC700000210000000000000000000000000000B3 +:10AC800000000000000000000000000000000000C4 +:10AC900000000000000000000000000000000000B4 +:10ACA00000000000000000000000000000000000A4 +:10ACB0000090000000000000000000000000000004 +:10ACC0000000000000000000000000000000000084 :10ACD0000000000000000000000000000000000074 :10ACE0000000000000000000000000000000000064 -:10ACF0000000000000000000000000000200000052 +:10ACF0000000000000000000000000000000000054 :10AD00000000000000000000000000000000000043 -:10AD1000000000000000000000000000C000000073 -:10AD200000000000A0000009000000000009000071 -:10AD300000000000828000001000000001000800F8 -:10AD400000000000000082000000000000008200FF -:10AD500000000000000000000200000000000100F0 -:10AD60000000000000000000820000000000000061 -:10AD700000000000000000000000000000000000D3 -:10AD800000000000000000000000000000000000C3 -:10AD90000000000041000000000000000000000072 -:10ADA00000000000000000000000000000000000A3 -:10ADB00000000000110020040000800000002000BE +:10AD100000000000000000000000000000002140D2 +:10AD20000085012000200000000400880000008051 +:10AD3000008000800080000000A000A000A0902003 +:10AD40000000000000000000000000000000000003 +:10AD500000000000000000000000000000000000F3 +:10AD6000100000050000000800000021A0000021E4 +:10AD700010000000A00000800000000000000000A3 +:10AD800000000000000002000000000000000000C1 +:10AD9000000000000200000000840000000000002D +:10ADA0001000002002010001000000400009000026 +:10ADB00000400040004000400000004000400040D3 :10ADC0000000000000000000000000000000000083 -:10ADD00000000000000000000000800000000000F3 -:10ADE000040000000000000000000000000000005F -:10ADF000000000000000000000000800000000004B +:10ADD0000000000000000000000000000000000073 +:10ADE00000008000000000000000000000000000E3 +:10ADF0000000800000000000004000000000000093 :10AE00000000000000000000000000000000000042 -:10AE1000820088000000C0000000008000000000E8 -:10AE20000000000000000000000000000000000022 -:10AE3000900000000000002000000000000008005A +:10AE10000000000000000000000000000000000032 +:10AE2000000000040080008000800000000000405E +:10AE30000000000000000000000000000000000012 :10AE40000000000000000000000000000000000002 -:10AE500000000000000000000004000000000000EE -:10AE600000200000000000000000000000000000C2 -:10AE700000000000000000000000000000000000D2 -:10AE800000000000000000000000000021000000A1 -:10AE90000088008400000000000000000020000086 -:10AEA0000000000000000000000000000020000082 -:10AEB000000000840000002040000084000000002A +:10AE500000000000000000000000000000000000F2 +:10AE6000000000000000100000044000004000004E +:10AE7000A040004000001000000020000000000082 +:10AE800000000000000000000000000000000000C2 +:10AE900000000000000000000000000000000000B2 +:10AEA0000000000000010004000400040000000095 +:10AEB000000111000000040808000000000000006C :10AEC0000000000000000000000000000000000082 -:10AED0000000000000000000000000010000000071 -:10AEE0000000000100000000000000000000000061 -:10AEF0000000000000000000000000000000000052 -:10AF00000000000000000800000000000000000039 -:10AF1000000000000000000000000000000200002F -:10AF20000000000008000000000000000000000019 -:10AF3000000000000000000000000000000200000F -:10AF400000000000000000020000000000090000F6 +:10AED0000000000000000000000000000000000072 +:10AEE00000000000000000008000000000000001E1 +:10AEF0000000000100010000800000008000000050 +:10AF00000000000000000000000000000000000041 +:10AF10000000000000000000000000000000000031 +:10AF20000000000000000020000000000000018080 +:10AF30000102008801000100010000800080000083 +:10AF40000000000000000100000000000000000000 :10AF500000000000000000000000000000000000F1 -:10AF600000000000000000000000000000000000E1 -:10AF700000000000000000000000000000000000D1 -:10AF800000000000000002000000000000000000BF +:10AF6000000000000000000000000000840020003D +:10AF700000000208C0000000000401000000000002 +:10AF800000000000000000000000000000000000C1 :10AF900000000000000000000000000000000000B1 -:10AFA00000000000000000000000000000000000A1 -:10AFB0000000000000000000000000000088000009 -:10AFC000000000000000000005000000000000007C -:10AFD0000508000000000000000000000000000064 +:10AFA0000000008200000000000120001100028269 +:10AFB0000240020120410200020002000040004065 +:10AFC000000000000000000002000000000000007F +:10AFD0000000000000000000000000000000000071 :10AFE0000000000000000000000000000000000061 -:10AFF0000000000000000000000000000000000051 +:10AFF000A0000000800000A000000001020000008E :10B000000000000000000000000000000000000040 -:10B010000000000000000000000000000000000030 -:10B020000000000000000000000000000000000020 -:10B03000000000000000000000000100000000000F -:10B0400000000000010000000000000000000000FF -:10B0500000000000000000000000000001000000EF -:10B060000000000000009000000000400000000010 -:10B0700000000000000000000000000000000000D0 -:10B0800000000000000000000000000000000000C0 -:10B0900000000000000000000000000000000000B0 -:10B0A00000000000000000000000000000000000A0 -:10B0B000000000000000000000000000110000215E -:10B0C000000000000000110021000000000000004E -:10B0D000000000000000000000000000000011005F -:10B0E00021000000000011008000000000000000AE -:10B0F0000000000000000000000000000000000050 -:10B10000000000000000000000000000000000003F +:10B01000000000000000000000000101000000002E +:10B02000000100000000000000000000000000001F +:10B03000000000C100000000008800C00000000007 +:10B040000000000000C00000000000200000000020 +:10B0500000000000000000000000000000000000F0 +:10B0600000000000000000000000000001C100001E +:10B070001001880002C000000000000400C10000B0 +:10B080001001880000000000000000000000000027 +:10B09000000000000000000000000000104100213E +:10B0A0000020001000000000000000000000000070 +:10B0B0000900000000C10020002100000080000005 +:10B0C0000000000000000080000000000000000000 +:10B0D0000000000000000000000000000000000070 +:10B0E000000000000000000000000000000011C18E +:10B0F000110282098008808000000000008000C1E9 +:10B100001102820980110000000000000000000010 :10B11000000000000000000000000000000000002F -:10B12000000000000000000000000000000000001F -:10B1300000000000000000000000000000000011FE -:10B14000000011100000000000410900000900800B +:10B1200000000000000000000000000000000021FE +:10B1300000C00408418000000000000080000040C2 +:10B1400000000000800000000000001000008000EF :10B1500000000000000000000000000000000000EF -:10B1600000C10000004100000000008000000080DD -:10B1700000000000000000000000000000000000CF -:10B1800000000000000000000000000000000000BF +:10B1600000000000000000000000000000000000DF +:10B17000118002218200C1088000000000008000D0 +:10B18000088008008200C1110000000000000000DB :10B1900000000000000000000000000000000000AF -:10B1A000000000000000000000000020000000205F -:10B1B000000000000000000000000000000000008F -:10B1C000000000000101000000000001010000007B -:10B1D00000880000000000000000000000000000E7 -:10B1E000000000110000000100000000002000002D -:10B1F00000C000000000000000000000000000008F -:10B20000000000000000000000000000000000003E +:10B1A000000000000000000000000000000000009F +:10B1B00000010041010101C0000010000000C000BA +:10B1C000000000000000C0000000000000010000BE +:10B1D000C0000000000000000000000000000000AF +:10B1E000000000000000000000000000000000005F +:10B1F0000000008800009000C1000800000000006E +:10B20000C000018801009000C100000000000000A3 :10B21000000000000000000000000000000000002E -:10B22000000000000000000000000000000002001C -:10B23000000000000000000000000000000000000E -:10B2400000000000C000C0000100000000008800F5 -:10B2500000000100000000000000000000000000ED -:10B26000000000000000C000000000000100008895 -:10B270008800010000000000000000000000000045 -:10B2800000000000000000000000000000000000BE +:10B22000000000000000010000000000000000001D +:10B23000000000008800A00001000000000000885D +:10B2400000C088000000008800C00000000000204E +:10B25000000000C00000000000000000000000002E +:10B2600000000000000000000000000000000000DE +:10B270000000000020009000200000C1000000003D +:10B28000000000C020009000000000C1000000008D :10B2900000000000000000000000000000000000AE -:10B2A000000000000000000000000000200000007E -:10B2B000800000000000000000000000000000000E -:10B2C00000000000000080030000100000000000EB -:10B2D000000000004100000000000000000000002D -:10B2E000000000000000000080000000400041005D -:10B2F00000800000090000000000000000000000C5 -:10B30000000000000000000000000000000000003D +:10B2A000000000000000080008000000000000008E +:10B2B0000000000000000000800008000000000006 +:10B2C000000000800000000000000080000000007E +:10B2D00000000000008000000000000000000000EE +:10B2E000000000000000000000000000000000005E +:10B2F00000000000000080028902410800C1000037 +:10B3000000000000008080028502050500C10000E9 :10B31000000000000000000000000000000000002D :10B32000000000000000000000000000000000001D -:10B33000000000000000000000000000000000000D -:10B3400000000000000000001100000000000000EC -:10B3500000000011000003000000000000000000D9 -:10B3600000000000000000000000001100000003C9 -:10B37000001100000080000000000000000000003C -:10B3800000000000000000000000000000000000BD +:10B33000000000000000800000090000000821005B +:10B34000000000000000800000000000000000007D +:10B35000800000000000000000000000000000006D +:10B3600000000000000000000000000000000000DD +:10B3700000000000000000004182020941000911A4 +:10B380008000000000000000C100020085000911DB :10B3900000000000000000000000000000000000AD :10B3A000000000000000000000000000000000009D -:10B3B000000000000000000000000000000000008D -:10B3C000000000000000000000000100000000007C -:10B3D000000000000001000000000000000000006C -:10B3E000000000000000000000000000000100005C -:10B3F000000100010000004000000000000000000B -:10B40000000000000000000000000000000000003C -:10B41000000000000000000000000000000000002C +:10B3B0000000000000000000C0A00000A000080085 +:10B3C0000100000000009000C00000889000000014 +:10B3D0000000C0000090000000000000000000001D +:10B3E000000000000000000000000000000000005D +:10B3F0000000000000000000000001C0000100008B +:10B400000100C000000000004000C10200008800F0 +:10B41000010000000000000000000000000000002B :10B42000000000000000000000000000000000001C -:10B4300000000006000007000000000000000000FF -:10B4400000000000000000000000840043E0002233 -:10B4500041000000000000E0000081410000000009 -:10B46000000000000000000000000000000002E0FA -:10B470000000484200000000070082210000000098 -:10B4800000000000000000000000000000000000BC +:10B43000000000000000000000000000000180008B +:10B4400000210000000000000000000000000000DB +:10B4500000000000000000000000000000000000EC +:10B4600000000000000000000000000000000000DC +:10B47000000000000000000000000000840000E068 +:10B48000000081000000000000000000600000E0FB :10B4900000000000000000000000000000000000AC :10B4A000000000000000000000000000000000009C -:10B4B000000000000000000000000000000000008C -:10B4C000000000000000000000000000000000007C -:10B4D000000000000000000000000000000000006C +:10B4B00000000000000000000000000030303C3CB4 +:10B4C000000000003C3C3C3C000000FF0000F0F0AD +:10B4D000000000FF00000000FFFF0000F0F000008F :10B4E000000000000000000000000000000000005C -:10B4F00000000000000000000000F0F0000000006C -:10B50000000000000000000000000000000000003B -:10B51000000000000000000000000000000000002B +:10B4F0000000000000000000000000000000FFFF4E +:10B50000FFFF0000FFFF00003C3C0000AAAA000073 +:10B51000F0F00000FFFF000000000000000000004D :10B52000000000000000000000000000000000001B -:10B53000000000000000000000000000000000000B -:10B5400000000000000000000000000000000000FB -:10B5500000000000000000000000000000000000EB +:10B5300000000000000000000000000000003030AB +:10B540000000000000003C3C3C3C000000FF00000C +:10B55000F0F0000000FF0000000000000000F0F02C :10B5600000000000000000000000000000000000DB -:10B57000000000000000000000000000F0F00000EB -:10B5800000000000000000000000000000000000BB -:10B5900000000000000000000000000000000000AB +:10B5700000000000000000000000000000000000CB +:10B58000000000000000000000003C3C0000AAAAEF +:10B590000000F0F0000000000000000000000000CB :10B5A000000000000000000000000000000000009B :10B5B000000000000000000000000000000000008B -:10B5C000000000000000000000000000000000007B -:10B5D000000000000000000000000000000000006B -:10B5E000000000000000000000000000000000005B -:10B5F0000000000000000000000000003C3C0000D3 -:10B60000FFFF00000000000000000000000000003C -:10B61000000000000000000000000000000000002A +:10B5C00000000000000000003C3C00000F0F0000E5 +:10B5D000FFFF00005555000000003C3C0000AAAAF7 +:10B5E000FFFF00000000000000000000000000005D +:10B5F000000000000000000000000000000000004B +:10B600000000FFFF0000FF0000003C3C00003C3C4D +:10B610000000FFFF0000FF0000000000000000002D :10B62000000000000000000000000000000000001A :10B63000000000000000000000000000000000000A -:10B6400000000000000000000000000000000000FA -:10B6500000000000000000000000000000000000EA -:10B6600000000000000000000000000000000000DA -:10B6700000000000000000000000000000003C3C52 -:10B6800000000000000000000000000000000000BA -:10B6900000000000000000000000000000000000AA +:10B64000000000000000000000003C3C00000F0F64 +:10B650000000000000005555000000003C3C0000C8 +:10B66000AAAAFFFF00000000000000000000000088 +:10B6700000000000000000000000000000000000CA +:10B680000000000000000000FF0000003C3C000043 +:10B690003C3C000000000000FF0000000000000033 :10B6A000000000000000000000000000000000009A -:10B6B00000000000000000000000000005180A2043 -:10B6C000050005A0000000000000000000000000D0 -:10B6D0000000000000040006800E20000000004072 -:10B6E0000006000C00000000000000000000000048 -:10B6F00000000000000000440006000E20000500CD -:10B700002A00054000A80000000000000000000022 -:10B710000000000000000000000000000000000029 +:10B6B0000000000000610006000D00000000000016 +:10B6C00000000000A0610A0F050500A0406380068D +:10B6D000002D9202408280000020920200004082F1 +:10B6E0008000002082020000000000000000000036 +:10B6F000000000000000000000000000000000004A +:10B700000000000000004002800180209202408280 +:10B71000800000209202408280018020920200007E :10B720000000000000000000000000000000000019 :10B730000000000000000000000000000000000009 :10B7400000000000000000000000000000000000F9 -:10B750000000000000000000FF00F0F0000000000A -:10B7600000003C3CFFFF0000000000000000000063 -:10B77000000000000000000000005555FFFF000021 -:10B7800000000000000000000000000000000000B9 -:10B7900000000000000000000000000000000000A9 +:10B75000FFFF0000000000000000000000000000EB +:10B7600000000000000000000000000000000000D9 +:10B7700000000000000000000000000000000000C9 +:10B78000000000000000000030005000A080F0C069 +:10B79000000000000000000030005000A080F0C059 :10B7A0000000000000000000000000000000000099 :10B7B0000000000000000000000000000000000089 :10B7C0000000000000000000000000000000000079 -:10B7D00000000000000000000000FF00F0F000008A -:10B7E000000000003C3C00000000000000000000E1 -:10B7F000000000000000000000000000555500009F -:10B800000000000000000000000000000000000038 -:10B810000000000000000000000000000000000028 +:10B7D0000000FFFF0000000000000000000000006B +:10B7E0000000000000000000000000000000000059 +:10B7F0000000000000000000000000000000000049 +:10B80000000000000000000000003C005500A08087 +:10B81000000000000000000000003C005500A08077 :10B820000000000000000000000000000000000018 -:10B830000000000000000000000000000000000008 -:10B8400000000000000000000000000000000000F8 -:10B85000000000000000000000000000FF0000FFEA -:10B860000000000000000000F0F0000000000000F8 +:10B83000000000000000000000002F0F1F0F00009C +:10B84000000000000000000000000000000000AA4E +:10B85000AAAA0F000FFF0000000000000000000077 +:10B8600000000000000000000000000000000000D8 :10B8700000000000000000000000000000000000C8 -:10B88000AAAA000000000000000000000000000064 -:10B8900000000000000000000000000000000000A8 -:10B8A0000000000000000000000000000000000098 -:10B8B0000000000000000000000000000000000088 +:10B880000000000000000000000000000300410074 +:10B89000008A00CF0000000000000000410003000B +:10B8A000000A000C00000000000000000000000082 +:10B8B000000000000000000000000000280014004C :10B8C0000000000000000000000000000000000078 -:10B8D0000000000000000000000000000000FF0069 -:10B8E00000FF0000000000000000F0F00000000079 +:10B8D00000AA00000F000FFF0000000000000000A1 +:10B8E0000000000000000000000000000000000058 :10B8F0000000000000000000000000000000000048 -:10B900000000AAAA000000000000000000000000E3 -:10B910000000000000000000000000000000000027 -:10B920000000000000000000000000000000000017 -:10B9300000002000200000000000000000000000C7 -:10B9400000000000000000000000000000000000F7 -:10B9500000002000000000000000000000000000C7 -:10B9600000000000000000020000000000000000D5 -:10B9700000000000200000000000000000000000A7 -:10B980004000000000000000000000000000000077 -:10B990000000000020000000000004000000000083 -:10B9A0002000000000000000000000000000000275 -:10B9B0000000000000000000000200020002000081 -:10B9C00000000000400000004000000000020002F3 -:10B9D0000000000000000000000000000000000067 -:10B9E0000000000000000000000000004000000017 -:10B9F00000000000000040000000400000000000C7 -:10BA000000000000000040000000000000000000F6 -:10BA10000000000000000000000000000000000026 +:10B9000000000000000000000000000000000F0028 +:10B910005500008A000000000000000000005500F3 +:10B920000F0000AA003C0000000000000000000022 +:10B9300000000000000000008880000000000000FF +:10B940000008A000000800008800000000000000BF +:10B9500000004000000000002040000001020180C3 +:10B960000000012000200003000020000000000073 +:10B9700010000000000000000000000000000000B7 +:10B980000000000000000000000020000000000097 +:10B9900020000000000400000000000088000000FB +:10B9A0000000000000000000000000000000000097 +:10B9B0000000000000020000000000080000000479 +:10B9C0000000000000000000000010000000000067 +:10B9D00000820000000000000000000100002000C4 +:10B9E000044000000401000100000000000000000D +:10B9F0000000000200000040000000000000000005 +:10BA000000000000000000000000000000004000F6 +:10BA10000000400000024000000040000000000064 :10BA20000000000000000000000000000000000016 -:10BA30000000000000000000000000000000000006 -:10BA400000000000000000000000000000000400F2 -:10BA500004000000000000000000000000000000E2 -:10BA600000000000000002000200000004000400CA -:10BA700004000400020002000200020000000000B6 -:10BA800000000000000000000000001000000000A6 -:10BA900000000000000000000000000001000000A5 -:10BAA0000000000000000000000000000000000096 +:10BA30000000020000000000000000000000000004 +:10BA400084000000100000000000000000008400DE +:10BA500002000000000000000000040002000000DE +:10BA6000212003200580032003A000000000000027 +:10BA7000000000000000880000000000000000003E +:10BA800000000000004000400040004002000200B2 +:10BA90000040A04000400040004000400040004006 +:10BAA00002400005020002000040004000000000CB :10BAB0000000000000000000000000000000000086 -:10BAC000000000000000000000000000040004006E -:10BAD0000000000000000000000000000000000066 -:10BAE00000000000000000000000000000008000D6 -:10BAF00080008000840080008000800080000000C2 -:10BB00000000000000000000000000000000000035 -:10BB10000000000000000000000000000000020023 -:10BB20000000000000080000000002000008000003 +:10BAC0000000000000000000000000000000000076 +:10BAD0000000000000000000000000008000800066 +:10BAE0000000840184018240840184410000000040 +:10BAF0000000000000000000000004000000000042 +:10BB000000000000000000010001000100018000B1 +:10BB1000800000010001000500010001000100019A +:10BB20000801000100008000800000010001000009 :10BB30000000000000000000000000000000000005 -:10BB400000000000000000000000000000000000F5 -:10BB500000000000000000000000000000000000E5 -:10BB600000000000000000000000000000000000D5 -:10BB700000000000000000000000000000000003C2 -:10BB8000000300000010000000030000000300009C -:10BB9000000200000009000000000000000000009A -:10BBA0000000000000000000000000000000000095 +:10BB400000000000400000000000000000000000B5 +:10BB50000000000000002000200020002000000065 +:10BB6000000000000000008001000800010000004B +:10BB700000000000000000000008000000000000BD +:10BB800000000000000000000000000000000000B5 +:10BB90000000000000000040000000000021000044 +:10BBA0000000000000000040000000000004000051 :10BBB0000000000000000000000000000000000085 -:10BBC0000000000000000000080008000000030062 -:10BBD0000000000000000000000000000000000065 -:10BBE0000000000000000000000000000000030052 -:10BBF0000000000000000000030000000000000042 -:10BC00000000000000000001000000000000000033 -:10BC10000000000000000000000000000000000024 -:10BC20000000000000000000000000000000000014 -:10BC30000000000000000000000000000000000004 -:10BC4000C000000000000000000000000000000034 -:10BC500000000000000000020000000000000000E2 -:10BC60000800000000000000A0000000000000002C -:10BC70000000000000000080000000000020002004 -:10BC80000020002000000000000000000000000074 -:10BC900000000000000000000000000000000000A4 -:10BCA0000000000000000000000001000000000093 -:10BCB0000000000000000000000000000000000084 +:10BBC00000000000030080000000000000000000F2 +:10BBD00000000000000000008000A0008000800045 +:10BBE000000000000000000000200200000004002F +:10BBF0000000000000000000000000000000000045 +:10BC00000000000000000000000000000000000034 +:10BC10000000000000000300000100000000000020 +:10BC20000000000000000000000100000000000013 +:10BC300000000800080008000000000000000000EC +:10BC400000000000100000000000000000000000E4 +:10BC5000000000000041000000000000008900001A +:10BC600000009000020000000000000084000000BE +:10BC700000000000000000000000000000000000C4 +:10BC80000000000000000000A00000000000000014 +:10BC90000000000000000000820000000000000022 +:10BCA00000090000000000210000880000210000C1 +:10BCB0000021000000000000000000000000000063 :10BCC0000000000000000000000000000000000074 -:10BCD0000000000000000000000000000000000064 -:10BCE0000000000000000000000021000000000033 -:10BCF0000000000000000000004000000300000100 -:10BD00000001000100010000000000000000000030 -:10BD10000000000000000000000000000000000023 -:10BD200000000000000800000000000004000008FF -:10BD300000000000000008000000000000000000FB +:10BCD0000000000000000000000000000000110251 +:10BCE00000000000000080000000000000C000C054 +:10BCF0000000000000000000000000000000000044 +:10BD00000000000000000000000000000000000033 +:10BD100000000000000000000000000041000000E2 +:10BD200000000000000021000000000000C0000032 +:10BD300000000010000000000000000000000000F3 :10BD400000000000000000000000000000000000F3 -:10BD500000000000000000000000000000000000E3 -:10BD600000000000000000000000000000000000D3 -:10BD70000000080004000000000000000000A00017 -:10BD8000000000000000000500000000001000405E -:10BD90000000000000000008000000030000000890 -:10BDA000000800000000000000000000002000006B -:10BDB0000000000000000000000000000000000083 -:10BDC0000000000000000000000000000000002053 -:10BDD000000000000000080000000000000000005B -:10BDE000000000000000000000000000000000C093 -:10BDF0000000050091000020000000000000008409 -:10BE00000000000000000000000000000000000131 -:10BE10000000000000000000000000000000000022 -:10BE2000008400000000000000000000000000018D -:10BE30000000000000000000000000000000000002 +:10BD500000000000000200000000000000000000E1 +:10BD600000001008000000804000A00200800021B8 +:10BD7000008001C100800000000000000000000001 +:10BD8000000000000000000000000800A00000000B +:10BD9000C000100020002000000000008200000011 +:10BDA00010001000200020000000000082000000B1 +:10BDB0001000100020002000000000000000000023 +:10BDC0000000000000000000000000000000000073 +:10BDD0000000000040000802000000000000000019 +:10BDE0000084000000850000002080000001002089 +:10BDF000000000200220214000002100030000007C +:10BE00000000000000000000000000000000000032 +:10BE100000000000800080008000000000000000A2 +:10BE2000000080008000800080000084000000008E +:10BE300000008000804080008000000000000000C2 :10BE400000000000000000000000000000000000F2 -:10BE500000000000000000000000000000000000E2 -:10BE600000000000000000000800000000000000CA -:10BE7000000000000000000088000000000000003A -:10BE80004000A0000021000000020000002100008E -:10BE90000021000800000000000000000000000079 -:10BEA0000000000000000000000000020000000090 -:10BEB0000000000000000000000000000000000082 -:10BEC0001100000000000000000000000000000061 -:10BED0000000000000000000000000000000000062 -:10BEE0000000000000000000000000000000000052 -:10BEF0000000000000000000000000000000000042 +:10BE5000000000000000000000000000000088005A +:10BE60000000890000001000010000020000020232 +:10BE70002000020000410005001100000000000049 +:10BE800000090000000000000800000000000000A1 +:10BE90000000000010000000000000000040004012 +:10BEA00000400000200000000000000000400040B2 +:10BEB0000040000000090000000000000000000039 +:10BEC0000000000000000000000000000000000072 +:10BED0000000000000C000000000000000000000A2 +:10BEE000000000824000008821001000000000884F +:10BEF00080008000800000000000000000000000C2 :10BF00000000000000000000000000000000000031 -:10BF10000000000000000000000000000000000021 -:10BF20000000000000000000000000000000000011 -:10BF30000000000000000000000000000000000001 +:10BF100000000000000080000000000000000001A0 +:10BF2000000100010000000000000000000000010E +:10BF300000010001090000000000000000000000F6 :10BF400000000000000000000000000000000000F1 -:10BF500000000000000000000000000000000000E1 -:10BF600000000000000000000000000000000000D1 -:10BF700000000000000000000000000000000000C1 -:10BF800000C010880002048801C010400020049006 -:10BF900000000000000000000000000000000000A1 -:10BFA0000000000000000000000000000000000091 -:10BFB00000009020000000000000000000000000D1 +:10BF500000000800000000000000000000000000D9 +:10BF60000000000000000001A000000100000040EF +:10BF70001090A008C01010C00090000400A00000A5 +:10BF800000000000000000000000000000000000B1 +:10BF9000000000000000000001C1000001010000DD +:10BFA00000C000000000000001C10000010100000D +:10BFB00000C000000000000201C1000001010000FB :10BFC0000000000000000000000000000000000071 -:10BFD0000000000000000000000000000000000061 -:10BFE0000000000000000000000000000000000051 -:10BFF0000000000000000000000000000000000041 -:10C0000000000980800000008000408080800000E7 -:10C0100080000000000000000000000000000000A0 -:10C020000000000000000000000000000000000010 -:10C03000000011008000000000000000000000006F -:10C0400000000000000000000000000000000000F0 +:10BFD0000000110000000000000000000000000050 +:10BFE00000000000000000000041000404200000E8 +:10BFF0001184210411A00004808000000080000052 +:10C000000000000000000000000000000000000030 +:10C010000000000000000000000011C1000008093D +:10C020000000008000000000000011C100000809AD +:10C030000000008000000000008011C1000008091D +:10C0400000080000000000000000000000000000E8 :10C0500000000000000000000000000000000000E0 -:10C0600000000000000000000000000000000000D0 -:10C0700000000000000000000000000000000000C0 -:10C0800000000000000000410002800080008041AC -:10C0900000418000000000000000000000000000DF -:10C0A0000000000000000000000000000000000090 -:10C0B0000000000000000080000000800000000080 -:10C0C0000000000000000000000000000000000070 +:10C0600000000000000000000000001100000005BA +:10C0700000800500A141839089000000001080002D +:10C080008000000000000000000000000000000030 +:10C09000000000000000000000000000028080217D +:10C0A0000900C18080000003000080000280802120 +:10C0B0000900C18080000003000080000280802110 +:10C0C0000900C18000000000000000000000000026 :10C0D0000000000000000000000000000000000060 -:10C0E0000000000000000000000000000000000050 -:10C0F0000000000000000000000000000000000040 -:10C10000000000000000020090008801C08840008C -:10C1100040918801C088000000000000000000007D -:10C12000000000000000000000000000000000000F -:10C1300000000000000000000020000000C000001F -:10C1400000000000000000000000000000000000EF -:10C1500000000000000000000000000000000000DF +:10C0E00000000000000000000000000000A00000B0 +:10C0F0000001008800A0090189A0C000880090010B +:10C100000800C00000000000000000000000000067 +:10C110000000000000000000000000000000008897 +:10C1200082000000C188020000000000C0000088FA +:10C1300082000000C188020000000000C0000088EA +:10C1400082000000C1880000000000000000000024 +:10C1500000000000000000000000000000010000DE :10C1600000000000000000000000000000000000CF -:10C1700000000000000000000000000000000000BF -:10C18000000000000000000140020082828401C023 -:10C19000C0200082028401C00000000000000000F6 -:10C1A000000000000000000000000000000000008F -:10C1B000000000000000000001000088880001006D -:10C1C000000000000000000000000000000000006F -:10C1D000000000000000000000000000000000005F +:10C170000000000001008810012009051003C0A084 +:10C180000090000401C0000000000000000000005A +:10C19000000000000000000000000000000000009F +:10C1A00000000090030085C104000002000000C0F0 +:10C1B00000000090030085C100000002000000C0E4 +:10C1C00000000090090085C1000000000000000090 +:10C1D0000000000000000000004000400008004196 :10C1E000000000000000000000000000000000004F -:10C1F000000000000000000000000000000000003F -:10C20000000000000000000000018080008000802D -:10C210004180890000800080418000000000000013 -:10C22000000000000000000000000000000000000E -:10C23000000000000000000000004100008000003D -:10C2400009000000000000000000000000000000E5 +:10C1F0000000000041000800000003411008A0C03A +:10C2000000000000008040800000000000000000EE +:10C21000000000000000000000000000000000001E +:10C22000000000094189050289C1800000800000EA +:10C23000008000094189050289C1000000800000DA +:10C24000008000090089050889C100000000000085 :10C2500000000000000000000000000000000000DE :10C2600000000000000000000000000000000000CE -:10C2700000000000000000000000000000000000BE -:10C280000000000000000000000000018002000328 -:10C29000804100008000800880898000000000004C -:10C2A000000000000000000000000000000000008E -:10C2B000000000000000000000000000001100006D -:10C2C00000800000000000000000000000000000EE +:10C2700000004110040041000000A10088112000CE +:10C28000A0098002802180800000000000000000E2 +:10C29000000000000000000000000000000000009E +:10C2A00000000000418041090309000080000000F7 +:10C2B00000000000C1804109030900008000000067 +:10C2C00000000000C1800900080900000000000013 :10C2D000000000000000000000000000000000005E :10C2E000000000000000000000000000000000004E -:10C2F000000000000000000000000000000000003E -:10C300000000000000000000000000000001C0006C -:10C31000880084828882C000820084041088000023 -:10C32000000000000000000000000000000000000D -:10C3300000000000000000000000000000000001FC -:10C3400000000040000000000000000000000000AD +:10C2F000000000000100010000000000C12040C05B +:10C3000089888801C0008200040440000000000009 +:10C31000000000000000000000000000000000001D +:10C320000000000000000140000101010000C00009 +:10C33000000000000000C140000101010000C00039 +:10C34000000000000000C1400100000100000000EA :10C3500000000000000000000000000000000000DD :10C3600000000000000000000000000000000000CD -:10C3700000000000000000000000000000000000BD -:10C3800000000000000000000000000000000000AD -:10C3900000000000800000420000000080006042B9 -:10C3A000000000000000000000000000000000008D -:10C3B000000000000000000000000000000000007D -:10C3C00000000000070082210000000000000000C3 +:10C370000000000000000000004200000000600615 +:10C3800000E0070050000006000007000000000069 +:10C39000000000000000000000000000000000009D +:10C3A0000000000000000000600000E0000000004D +:10C3B0000000000000000000600000E0000000003D +:10C3C0000000000000000000600000E0000000002D :10C3D000000000000000000000000000000000005D :10C3E000000000000000000000000000000000004D :10C3F000000000000000000000000000000000003D -:10C40000000000000000000000000000000000002C +:10C40000D0F0240030C000000C0C0F0000300060A1 :10C41000000000000000000000000000000000001C -:10C42000000000000000000000000000000000000C -:10C4300000000000000000000000000000000000FC -:10C440000000000000000000F0F00000000000000C +:10C4200000000000000000000000FFFFFFFFF0F030 +:10C430000000FFFF0000F0F00000FFFF0000F0F040 +:10C440000000FFFF0000F0F00000FFFF0000F0F030 :10C4500000000000000000000000000000000000DC :10C4600000000000000000000000000000000000CC :10C4700000000000000000000000000000000000BC -:10C4800000000000000000000000000000000000AC -:10C49000000000000000000000000000000000009C +:10C480000000000000240C03000000000000003049 +:10C49000006000000000000000000000000000003C :10C4A000000000000000000000000000000000008C -:10C4B000000000000000000000000000000000007C -:10C4C00000000000000000000000F0F0000000008C -:10C4D000000000000000000000000000000000005C +:10C4B000F0F0000000000000F0F0000000000000BC +:10C4C000F0F0000000000000F0F0000000000000AC +:10C4D000F0F000000000000000000000000000007C :10C4E000000000000000000000000000000000004C :10C4F000000000000000000000000000000000003C :10C50000000000000000000000000000000000002B -:10C51000000000000000410840000084210643089C -:10C5200040000084218600000000000000000000A0 +:10C51000000000000000000000000000000000001B +:10C52000000000000000000000000000000000000B :10C5300000000000000000000000000000000000FB :10C5400000000000000000000000000000000000EB :10C5500000000000000000000000000000000000DB :10C5600000000000000000000000000000000000CB :10C5700000000000000000000000000000000000BB -:10C5800000000000000000000000000000000000AB -:10C59000000000000000000000000000000000009B +:10C58000000000000000000000000F006600003006 +:10C5900000F00000000000000000000000000000AB :10C5A000000000000000000000000000000000008B -:10C5B000000000000000000000000000000000007B -:10C5C000000000000000000000FF0000FFFF00006E -:10C5D000000000000000000000000000000000005B +:10C5B0000000666600000F0F0000FFFF00003C3C1B +:10C5C0000000666600000F0F00003C3C00003C3C91 +:10C5D0000000666600000F0F000000000000000071 :10C5E000000000000000000000000000000000004B :10C5F000000000000000000000000000000000003B -:10C60000000000000000000000000000000000002A -:10C61000000000000000000000000000000000001A +:10C60000000000000000000000A000050000000085 +:10C61000003000000C0C000F0000000000000000C3 :10C62000000000000000000000000000000000000A -:10C6300000000000000000000000000000000000FA -:10C640000000000000000000000000FF00000000EB -:10C6500000000000000000000000000000000000DA -:10C6600000000000000000000000000000000000CA +:10C6300000000000666600000F0F00000000000010 +:10C640003C3C0000666600000F0F00003C3C000010 +:10C650003C3C0000666600000F0F00000000000078 +:10C660000000000000000000000000610006000D56 :10C6700000000000000000000000000000000000BA -:10C6800000000000000000000000000000000000AA -:10C690000000000000000000000000000000000892 -:10C6A0000000000810002008004000080000000002 -:10C6B000000000000000000000000000000000007A -:10C6C00000000000000000000000000005002A003B -:10C6D000054000A80000000000000000000000006D +:10C68000000000610005000D0000A061402F80093E +:10C6900000081000202800400008000000000000F2 +:10C6A000000000000000000000000000000000008A +:10C6B0000000000040028001802092024082800041 +:10C6C00000209202408280018020920240828000FD +:10C6D000002092024082800180209202000000002F :10C6E000000000000000000000000000000000004A -:10C6F000000000000000000000000000000000003A -:10C700000000000000000000000000000000000029 -:10C710000000000000000000000000000000000019 +:10C6F000F0F8F8F00000000000000000000000006A +:10C70000000000000F00050500000000069000007A +:10C710000000005A000000000000000000000000BF :10C720000000000000000000000000000000000009 -:10C7300000000000000000000000000000000000F9 -:10C7400000000000000000000000000000000000E9 -:10C7500000000000000000000000000000000000D9 +:10C7300000000000000055000F0000F0003C000069 +:10C7400000000000000055000F0000F0003C000059 +:10C7500000000000000005050F0000F0003C000094 :10C7600000000000000000000000000000000000C9 -:10C7700000000000000000000000000000000000B9 -:10C7800000000000000000000000000000000000A9 -:10C790000000000000000000000000000000000099 +:10C770000000002828000000000000000000000069 +:10C780000000000000000F000505000000000690FA +:10C790000000000000FF000000000000000000009A :10C7A0000000000000000000000000000000000089 -:10C7B0000000000000000000000000000000000079 -:10C7C0000000000000000000000000000000000069 -:10C7D0000000000000000000000000000000000059 +:10C7B000000000000000000055000F0000F0003CE9 +:10C7C000000000000000000055000F0000F0003CD9 +:10C7D000000000000000000005050F0000F0003C14 :10C7E0000000000000000000000000000000000049 :10C7F0000000000000000000000000000000000039 -:10C800000000000000000000000000000000000028 -:10C810000000000000000000000000000000000018 +:10C800000000000000000000FF000F0F000000000B +:10C8100004100820A00000A000000000000000009C :10C820000000000000000000000000000000000008 -:10C8300000000000000000000000000000000000F8 -:10C8400000000000000000000000000000000000E8 -:10C8500000000000000000000000000000000000D8 -:10C8600000000000000000000000000000000000C8 +:10C8300000000000000000000000050555553C3CCC +:10C8400000FF0000000000000000050555553C3CBD +:10C8500000FF00000000000000000C0C3C3C3C3CD1 +:10C8600000FF0000000000000000000000000000C9 :10C8700000000000000000000000000000000000B8 :10C8800000000000000000000000000000000000A8 -:10C890000000000000000000000000000000000098 +:10C8900000000140028080000080000000000000D5 :10C8A0000000000000000000000000000000000088 -:10C8B0000000000000000000000000000000000078 -:10C8C0000000000000000000000000000000000068 -:10C8D0000000000000000000000000000000000058 -:10C8E000000000000080C0800080C0002000200008 -:10C8F0000000000020008800000000000000000090 -:10C9000000000000020020000000200000002000C5 -:10C910000000000000000000000000000000000215 -:10C920000000000000032080208020002080000004 -:10C930002000020000000000000000008800040049 -:10C940000000000000002000200020002000040063 -:10C950000000200004000000000000002000200073 -:10C960000000000000000020002000200000000067 -:10C9700000000000000000000000000000000000B7 -:10C9800000004000000080000000000000000000E7 -:10C990000000000000000000000000000000000097 -:10C9A00000000000000000000004000480000004FB -:10C9B0000000000000000000000000000000000077 -:10C9C0000000000000000000000000000000000067 -:10C9D0000000000000000000000000000000000057 +:10C8B000000000000000000000000000050500006E +:10C8C000000000000000000000000000050500005E +:10C8D0000000000000000000000000000C0C000040 +:10C8E0000000000000000000000000000000000048 +:10C8F0000004000000000000000000000000000034 +:10C900000004000440000000400088000000000017 +:10C910000400000000021000010000000000000000 +:10C9200000040010000020000000000010000000C3 +:10C9300000002000000000002080000000800100B6 +:10C9400000800080000420000000000020000000A3 +:10C95000000020008400040004000000000000002B +:10C960004000000000020002000000000000000083 +:10C9700040024000000240000000000000000000F3 +:10C980000002000000000000000000000000400065 +:10C990000000400200024082000008020000000087 +:10C9A0000000000000030000004000000002000042 +:10C9B000000000000000000040000008000000022D +:10C9C0004000000800080000000000000000000017 +:10C9D0000000000000000000000200000002000251 :10C9E0000000000000000000000000000000000047 :10C9F0000000000000000000000000000000000037 -:10CA00000000000000000000000000000000000026 -:10CA10000000000000000000820000000000820012 -:10CA200000009000000084000000000001000000F1 -:10CA300000000200000000000000000000000000F4 -:10CA400000000200000002000200000000000000E0 -:10CA500000000000000000000000000000000000D6 -:10CA60000000000000000000000041000000410044 -:10CA700000000000000000000200000000000000B4 -:10CA800000000000000000000000000000000000A6 -:10CA90000000040004000400000000000400040082 -:10CAA0000000000000000000000000000000200066 -:10CAB0000000000000000000040000000000000072 -:10CAC0000000000000000000000000000000000066 -:10CAD0000000008800000400000000100088000032 -:10CAE0000000000000000400000000000000000042 -:10CAF0000000040000000000000000000000000032 -:10CB00000000000000000000000000000000000025 -:10CB10000000000000000000000000000000000015 -:10CB20000000000000000000900000000000010074 -:10CB300000002100000000000000000000000000D4 -:10CB400000000000000000000000000000000000E5 -:10CB500000000000000000000000000000000000D5 -:10CB600000000000000000000000000000000000C5 -:10CB70000000000080000000000000000000000035 +:10CA0000000000000000020001000000030004001C +:10CA1000040000000200020000000000000000000E +:10CA200000000000000001100000024000000000B3 +:10CA300000000000000000000000000000000000F6 +:10CA4000000040001000000803000000000000008B +:10CA5000000000000000021002090400040004109D +:10CA60000410000000000010021000000000000090 +:10CA700000000000000000000400000000000000B2 +:10CA80000000000000000200000808000000020092 +:10CA9000000080000900000000000000000000000D +:10CAA00000000000000000000805000080010000F8 +:10CAB0000000000000000400040002000000000864 +:10CAC0000000000080008000000140000000000025 +:10CAD000000000000408000004000000800080083E +:10CAE0008000800000000000000000000000000046 +:10CAF0000000000000000000000000000000000036 +:10CB00000000000000000000C00000000000000065 +:10CB10000000000000000000000000000280000093 +:10CB20000000000000000000000000000000000401 +:10CB300000000800000000000000000000000000ED +:10CB40000000000000000000000088000400000059 +:10CB5000000000000000000000000000882100002C +:10CB600000100000000000000000000000090000AC +:10CB700000000000000000000000000000000000B5 :10CB800000000000000000000000000000000000A5 -:10CB90000000000000000000000000000000000095 -:10CBA0000400000000000000000000000000000081 -:10CBB00002000000880000000000000000000000EB +:10CB90000000000000880000110040004000C0407C +:10CBA0002100000000000020002000200000000004 +:10CBB00000000000800000000000000000000000F5 :10CBC0000000000000000000000000000000000065 -:10CBD00000000000000000000082080000000000CB -:10CBE0000000000000000000000000000000000045 -:10CBF000000008000000000000000000000000002D -:10CC00000000000000000000000000000000000024 -:10CC1000000000000000010008000000000000000B -:10CC200000000800000000000000000000000000FC -:10CC300000000000000000002000000000000000D4 -:10CC400000000000000000000000000000000000E4 -:10CC500000000000000000000000000000000000D4 -:10CC600000000000000000000000000000000000C4 +:10CBD0000000000000000000000000000000000055 +:10CBE0000000000000000000000000000000020043 +:10CBF00000000000000000000000000000000040F5 +:10CC00000000000000008400000088000000000018 +:10CC100000200020002000200000004000110080C3 +:10CC200000000004000400040000000000000000F8 +:10CC300000000040000008000800000000000000A4 +:10CC400000000000000000000000000000000010D4 +:10CC50000002000000210010001000000000000091 +:10CC600000000000080000000000000000000000BC :10CC700000000000000000000000000000000000B4 :10CC800000000000000000000000000000000000A4 -:10CC90000000000000000000040000000000000090 -:10CCA0000000000000000000000000000000000084 -:10CCB00000000000000000000000800000000000F4 -:10CCC0000000000000000000000000000000000064 -:10CCD0000000000000000000000000000000000054 -:10CCE0000000000000000000000000000000000044 +:10CC90000000000100000001000100000000009001 +:10CCA0000020000000010001000100000000000061 +:10CCB0000000000020002000200000000000000014 +:10CCC0000000000000000000000003000000000061 +:10CCD000000000010000000000000000000000044F +:10CCE0000000200000000000000000000000000024 :10CCF0000000000000000000000000000000000034 -:10CD0000000000000000000000000000080000001B -:10CD100000000000000000000020000000000000F3 -:10CD200000000000080000000000000000000000FB -:10CD30000000C000000001808200008000000000B0 -:10CD40000000018000000000000000000000000062 +:10CD0000000000000000000000008400000000009F +:10CD1000000084000000000000000000008000000F +:10CD200000000000014000000000001000000000B2 +:10CD300000000000000000000000000000000000F3 +:10CD400000050000000000000000000000000000DE :10CD500000000000000000000000000000000000D3 -:10CD600000000000000000000000000000080000BB +:10CD600000000000000000000000000000000000C3 :10CD700000000000000000000000000000000000B3 :10CD800000000000000000000000000000000000A3 -:10CD90000000000000000000000000010000000092 -:10CDA0000000000000000000000000000000000083 -:10CDB00000000020000000000240000000100008F9 -:10CDC000208400000810000800000000000000009F -:10CDD000000000000000000000000000000000084B -:10CDE00000000000000000000000000000000084BF -:10CDF0000000000000000000000000000000000033 +:10CD90000000000000000000000000000000004053 +:10CDA00000000000000040C1050800000003200052 +:10CDB0000000000000000000000000000000000073 +:10CDC0000000000000000000000000000000000063 +:10CDD00000000000000000A00000000000000000B3 +:10CDE00000000000000000A00000000000000000A3 +:10CDF00000000000000000880000000000000000AB :10CE00000000000000000000000000000000000022 -:10CE10000000000000000000000000000000000012 -:10CE20000000000000000000000000000000000002 -:10CE30008200000000000000000000000000000070 -:10CE400000000000000000000000000800000000DA +:10CE10000000000000000000000000800000000092 +:10CE2000000091040909900000400040000001004A +:10CE300000000000000000000000000000000000F2 +:10CE400000000008000000000000000000080000D2 :10CE500000000000000000000000000000000000D2 :10CE600000000000000000000000000000000000C2 -:10CE700000000000000000000002000000000000B0 +:10CE700000000002000000000000000000000000B0 :10CE800000000000000000000000000000000000A2 -:10CE90000000000000000000000000000000000092 -:10CEA0000000000000000000000000000000000082 -:10CEB0000000000000000000000000000000000072 -:10CEC00000000000000000000000404000000000E2 -:10CED0000000000000000000000000000000000052 +:10CE90000000000000000000000000000020000072 +:10CEA00000000000040084042000000000010000D5 +:10CEB000040000000000000000000000002000004E +:10CEC0000000200000000000000000000000000042 +:10CED0000000000000000000000000100000000042 :10CEE0000000000000000000000000000000000042 -:10CEF0000000000000000000000000000000000032 +:10CEF00011000040000000000000000000000000E1 :10CF00000000000000000000000000000000000021 -:10CF10000000000000000000000000000000900081 -:10CF20000000000000000000000000000000000001 -:10CF300000000000000000000000000000000000F1 +:10CF10000000000000000000000000000000000011 +:10CF20000000000008000000000000000200820174 +:10CF300001000000000000000000000000000800E8 :10CF400000000000000000000000000000000000E1 -:10CF500000000000000000000000000000000000D1 +:10CF5000010020000000000100019000000000001E :10CF600000000000000000000000000000000000C1 :10CF700000000000000000000000000000000000B1 :10CF800000000000000000000000000000000000A1 -:10CF90000000000000000000000000000000110080 -:10CFA0008000000000000000000000000000000001 -:10CFB0000000000000000000000000000000000071 -:10CFC0000000000000000000000000000000000061 -:10CFD0000000000000000000000000000000000051 +:10CF90000000000000000000000000000000000091 +:10CFA00000000000000080000000000000000004FD +:10CFB000001004000020000000000000000000003D +:10CFC00080000000000000000000000000000000E1 +:10CFD00000000300000000000041000800080008F5 :10CFE0000000000000000000000000000000000041 :10CFF0000000000000000000000000000000000031 :10D000000000000000000000000000000000000020 :10D010000000000000000000000000000000000010 -:10D020000000008000000080000000000000000000 -:10D0300000000000000000000000000000000000F0 -:10D0400000000020000000030000000000000000BD +:10D02000000000C100040080000900800000000032 +:10D0300080000000000580000000000000000000EB +:10D0400000000000000000000000000000000000E0 :10D0500000000000000000000000000000000000D0 :10D0600000000000000000000000000000000000C0 :10D0700000000000000000000000000000000000B0 -:10D080000000000000200000002000000000000060 +:10D0800000000000000000000000000000000000A0 :10D090000000000000000000000000000000000090 -:10D0A000000000000020000000020000000000005E -:10D0B0000000000000000000000000000000000070 -:10D0C0000000000000000000000000000000000060 -:10D0D0000000000000000000000000000000000050 +:10D0A00000000000004100200020000100080000F6 +:10D0B00000A0880000000000C000880008000800F0 +:10D0C0002000000000000000000000000000000040 +:10D0D0000000000000000000000000400000000010 :10D0E0000000000000000000000000000000000040 -:10D0F0000000000000000000000000000000000030 -:10D1000000000000000000002000000000000000FF +:10D0F0000000000000000084000000840000000028 +:10D10000000000000000000000000000000000001F :10D11000000000000000000000000000000000000F -:10D1200000000000010000888800000000000000EE -:10D1300000000000000000000000000000000000EF -:10D1400000000000000000002000000000000000BF -:10D1500000000000000000000000000000000000CF -:10D1600000000000000000000000000000000000BF -:10D1700000000000000000000000000000000000AF -:10D18000000000000000200000000000000000007F +:10D120000000000001000000080000000084001062 +:10D13000C00000C000108888840000C0000000000B +:10D1400000000000000000100000001000C00000FF +:10D1500000000000000000010001000000010000CC +:10D1600000010100010100000000000000000000BB +:10D1700000000000000000000000040000000000AB +:10D18000000000000000000000000000000000009F :10D19000000000000000000000000000000000008F -:10D1A00000000000000041000080000000000000BE -:10D1B000000000000000000000000000000000006F -:10D1C00000000000000000000000800000000300DC -:10D1D000000000000000000000000000000000004F -:10D1E000000000000000000000000000000000003F -:10D1F000000000000000000000000000000000002F +:10D1A00000000000000040000000800000001100AE +:10D1B0000080000000800000840000000580000066 +:10D1C000000000000000000000000000008000805F +:10D1D00000000000000000000010001000400041AE +:10D1E00000200003101008410000000000000000B3 +:10D1F0000000000000000000090000000000000026 :10D20000000000000000000000000000000000001E :10D21000000000000000000000000000000000000E -:10D22000000000000000000000110000008000006D -:10D2300000000000000000000000000000000000EE -:10D2400000000000000000000000000500000000D9 +:10D220000000000000000000800000090000000075 +:10D2300000000004000000000000004100000000A9 +:10D24000001000000080000000000000000000004E :10D2500000000000000000000000000000000000CE :10D2600000000000000000000000000000000000BE -:10D2700000000000000000000000000000000000AE +:10D2700000000000000000000000000000020000AC :10D28000000000000000000000000000000000009E :10D29000000000000000000000000000000000008E -:10D2A000000000000000000000000001000000403D -:10D2B000000000000000000000000000000000006E -:10D2C000000000000000000000000000000000005E +:10D2A00000000000000000000000C0000800400076 +:10D2B000880000000001000000000000008400C0A1 +:10D2C0000000000000880040000000000000000096 :10D2D000000000000000000000000000000000004E :10D2E000000000000000000000000000000000003E :10D2F000000000000000000000000000000000002E -:10D30000000000000000000000000000000A000013 -:10D310000700000000000000000000000000000006 +:10D30000000000000000000000000000000000001D +:10D31000000000000000000000000000000000000D :10D3200000000000000000000000000000000000FD -:10D330000700820000000000000000000000000064 -:10D3400000000000000000000000000000000000DD -:10D3500002E00000000000000000000000000000EB +:10D330000800600000000000220000000000004221 +:10D3400012000000000000000000000000000000CB +:10D3500000000000000000000000000000000000CD :10D3600000000000000000000000000000000000BD :10D3700000000000000000000000000000000000AD -:10D38000000000000000000000000000000000009D +:10D38000000080000000000000000000000000001D :10D39000000000000000000000000000000000008D -:10D3A000000000000000000000000000000000007D -:10D3B0000000F0F00000000000000000000000008D -:10D3C000000000000000000000000000000000005D -:10D3D000000000000000000000000000000000004D +:10D3A0000000000000000000000000000000A0BC21 +:10D3B0000A3E00000000000000003030A0A0000085 +:10D3C0000000E1E1B4B40000000000000000000033 +:10D3D0000000000028283C000000000000000000C1 :10D3E000000000000000000000000000000000003D :10D3F000000000000000000000000000000000002D :10D40000000000000000000000000000000000001C :10D41000000000000000000000000000000000000C :10D4200000000000000000000000000000000000FC -:10D4300000000000F0F0000000000000000000000C -:10D4400000000000000000000000000000000000DC -:10D4500000000000000000000000000000000000CC +:10D43000003C003C00000000000000003030A0A0D4 +:10D4400000000000E1E1B4B40000000000000000B2 +:10D4500000000000000028283C0000000000000040 :10D4600000000000000000000000000000000000BC :10D4700000000000000000000000000000000000AC :10D48000000000000000000000000000000000009C :10D49000000000000000000000000000000000008C :10D4A000000000000000000000000000000000007C -:10D4B0000000000000000000FFFF0000000000006E -:10D4C000000000000000000000000000000000005C -:10D4D000000000000000000000000000000000004C +:10D4B000000000000000000000000000000000006C +:10D4C0000000000000003C3C141400000000555512 +:10D4D00055550000000000000000000000000000A2 :10D4E000000000000000000000000000000000003C :10D4F000000000000000000000000000000000002C :10D50000000000000000000000000000000000001B :10D51000000000000000000000000000000000000B :10D5200000000000000000000000000000000000FB :10D5300000000000000000000000000000000000EB -:10D5400000000000000000000000000000000000DB -:10D5500000000000000000000000000000000000CB +:10D5400000000000000000000000141400000000B3 +:10D550007F5F7D550000000000000000000000001B :10D5600000000000000000000000000000000000BB :10D5700000000000000000000000000000000000AB :10D58000000000000000000000000000000000009B -:10D5900000000000000005180A20050005A000009A +:10D59000000000000000000000000000000000008B :10D5A000000000000000000000000000000000007B -:10D5B00000000000000005000A00054000A800006F -:10D5C000000000000000000000000000000000005B -:10D5D000000000000000000000650006001F2000A1 -:10D5E000000000000000000000000000000000003B -:10D5F000000000000000000000000000000000002B -:10D60000000000000000000000000000000000001A +:10D5B000000000000000A5000A08050000A005000A +:10D5C0000A08009000A00061000F009D0005000007 +:10D5D00000000000000000000000000000900000BB +:10D5E000000000000000000000610006000D0000C7 +:10D5F00000610006000D00000000000000000000B7 +:10D60000000000000000000005000A08050000A05E :10D61000000000000000000000000000000000000A :10D6200000000000000000000000000000000000FA :10D6300000000000000000000000000000000000EA :10D6400000000000000000000000000000000000DA :10D6500000000000000000000000000000000000CA -:10D6600000000000000000000000000000000000BA -:10D6700000000000000000000000000000000000AA +:10D66000000000000000000000000000000028F89A +:10D6700000F00000000014FF50FF00000000000058 :10D68000000000000000000000000000000000009A :10D69000000000000000000000000000000000008A :10D6A000000000000000000000000000000000007A @@ -77184,196 +77184,196 @@ :10D6C000000000000000000000000000000000005A :10D6D000000000000000000000000000000000004A :10D6E000000000000000000000000000000000003A -:10D6F000000000000000000000000000000000002A +:10D6F00000F028F80000000014FF50FF00000000B8 :10D700000000000000000000000000000000000019 :10D710000000000000000000000000000000000009 :10D7200000000000000000000000000000000000F9 :10D7300000000000000000000000000000000000E9 -:10D7400000000000000000000000000000000000D9 +:10D7400000000000000000000000000096000096AD :10D7500000000000000000000000000000000000C9 :10D7600000000000000000000000000000000000B9 -:10D7700000000000000000000000000000000000A9 +:10D770000000000000000F0F0F0F0000000000006D :10D780000000000000000000000000000000000099 :10D790000000000000000000000000000000000089 :10D7A0000000000000000000000000000000000079 :10D7B0000000000000000000000000000000000069 -:10D7C0000000000000000000000000000000000059 -:10D7D0000000000000000000000000000000000049 +:10D7C00000000000000000000000000000009600C3 +:10D7D00000960000000000000000000000000000B3 :10D7E0000000000000000000000000000000000039 -:10D7F0000000000000000000000000000000000029 +:10D7F0000000000000000000FF0F3F3F000000009D :10D800000000000000000000000000000000000018 :10D810000000000000000000000000000000000008 -:10D820002000000000002000C000000000000000F8 -:10D8300000000000000020000000000000000000C8 -:10D840000000400000002000200000000000000058 -:10D8500000000000000020000000000000000000A8 -:10D860000000000020000000200000000000000078 -:10D870000000000000000000200000000000000088 -:10D880000000000020000000200840000000000010 -:10D890000000000000000000200000000000000068 -:10D8A00000000000000000000090000000004002A6 -:10D8B0000002400000000000000000020002000220 -:10D8C0000002000000000000000000000000000056 -:10D8D00000000002400200000000000000004000C4 -:10D8E00000000000400000000000000020000000D8 -:10D8F00040000000000000000000000000000000E8 -:10D90000000000000002000200020002000000000F -:10D9100000000000000000000000000000004000C7 -:10D9200000000000000000000000000000000000F7 +:10D8200010000180008000020000000000000000E5 +:10D830000000000000000000000000008800000060 +:10D8400020000000000000040000000000000000B4 +:10D8500000000000000000000000000000000000C8 +:10D860000001200000000000040000000000000093 +:10D8700000000000000000000000010000800080A7 +:10D880000080200000000000200000000000400098 +:10D8900000000000000000000000008310000040B5 +:10D8A00000008000100800020001000000000000DD +:10D8B0000000000000000000000000000000410027 +:10D8C0000000000200000000000000000000000056 +:10D8D0000000000200900090000200000000000024 +:10D8E0001000000000000002000000000000000026 +:10D8F0000000000000400000400000004000000860 +:10D90000400800024000000000000000000000008D +:10D910000000000000000040000000044010000271 +:10D920000001000000800100000040000000000035 :10D9300000000000000000000000000000000000E7 -:10D9400000000000000000000000000000000000D7 -:10D9500000000000000000000000000000000000C7 -:10D9600000000000000000000000000000000404AF -:10D97000040420202020000000000000040000001B -:10D980000000000000000000000000000011000086 -:10D99000000000000000000000000000080000007F -:10D9A000000000000000040004000000000000006F -:10D9B000000000000000000000000000000000085F +:10D9400000000000000000000000001000100000B7 +:10D9500000100010000000000000000000000000A7 +:10D9600000000000000004000400040001000000AA +:10D9700000000000000000000000000002000000A5 +:10D980000000020000000000000000000200000093 +:10D9900000008210001000000400041004002000A9 +:10D9A000200020002000000810000000800000007F +:10D9B0000000000000000000000000000000000067 :10D9C0000000000000000000000000000000000057 -:10D9D0000000000000000400040000000000000837 -:10D9E0000000000000000000000000000000000037 -:10D9F0008001800180018001000000000000000023 -:10DA0000000800000000000000000000000000000E -:10DA100000000000000000000000000000000008FE -:10DA200000080000000000000000000000000000EE -:10DA300000000000000000000000000000000000E6 -:10DA400000000000000000000000000000000000D6 -:10DA500000000000000000000000000000000000C6 +:10D9D0000000000000000000000000000000000047 +:10D9E0000000000000000000808280008000040031 +:10D9F0000400040004000400000000000000000017 +:10DA00000000000004000000000000000000000012 +:10DA10000000000000000000000080008000800086 +:10DA20008000C000800080000000000000000000B6 +:10DA3000000000000000000000000000A000A000A6 +:10DA40000000000082000000000000000000000054 +:10DA5000000000000000000000000000880004003A :10DA600000000000000000000000000000000000B6 -:10DA70000000000000004000000000000000000066 -:10DA80000000000000000000000000000000000096 -:10DA90000000000000000000000000000000000086 -:10DAA0000000000000000000000000000000000076 -:10DAB0000000000000000000000000000000000066 -:10DAC0000000000000000000000000000000000056 -:10DAD0000000000000000000000000000000000046 -:10DAE0000000210000000000000000000000000015 -:10DAF00000000000000000000000008400000000A2 +:10DA700000000000000000000000000000000000A6 +:10DA80000000000000000000001000000000000086 +:10DA90000010000000000000000000000000000076 +:10DAA0000000000000000000040000000000000072 +:10DAB0000000000000000000100000000000000056 +:10DAC000040000000000030000000000000000004F +:10DAD00000000000090000004000000000000000FD +:10DAE0004100002000000000004000000002000093 +:10DAF00000000000000400000300000040000000DF :10DB00000000000000000000000000000000000015 -:10DB10000000000000000000000000000000000005 +:10DB100000200000000000000000000000000000E5 :10DB200000000000000000000000000000000000F5 -:10DB300000000000000000000000000000000000E5 -:10DB400000000000000000000000000008000000CD -:10DB500000000000000000000000000000000000C5 -:10DB600000000000000000000000000000000000B5 -:10DB70000000000000000000000000000040000065 -:10DB80000000000000000000000000000000000095 -:10DB90000000000000000000000000000000000085 +:10DB30000000000000000000100000400000000095 +:10DB400000000000080000000000000000000000CD +:10DB50000000004100090004000000000000000077 +:10DB600000000000000000000800000000000000AD +:10DB700000110000100000101010821000210000A1 +:10DB80000000001000210011000082004000C000D1 +:10DB9000004100000000000000008200820082803E :10DBA0000000000000000000000000000000000075 :10DBB0000000000000000000000000000000000065 :10DBC0000000000000000000000000000000000055 -:10DBD0000000000000000000000000000000000045 +:10DBD000000000000000000000000088009000002D :10DBE0000000000000000000000000000000000035 -:10DBF000000000000000000009000000000000100C -:10DC00000000000000000000000000000000000014 -:10DC10000000000000000000000000000000000004 -:10DC200000000000000000000000000000000000F4 -:10DC300000000000000000000000000000000000E4 +:10DBF0000000000000000000000000000000000025 +:10DC000000000000000000100010001000100000D4 +:10DC100000100010001000000000100000000000C4 +:10DC200000200000000000000000000000000000D4 +:10DC300000000000000000000002000000000000E2 :10DC400000000000000000000000000000000000D4 -:10DC500000000000000000000000000000000000C4 -:10DC600000000000000000000000000000000000B4 +:10DC50000000000000000000820000000000000042 +:10DC6000000000000000000000000000000088002C :10DC700000000000000000000000000000000000A4 -:10DC80000000000000000000000000000000000094 +:10DC800000000000000000000000000088000020EC :10DC90000000000000000000000000000000000084 :10DCA0000000000000000000000000000000000074 :10DCB0000000000000000000000000000000000064 :10DCC0000000000000000000000000000000000054 -:10DCD00000000000000000000084000000000000C0 -:10DCE00000000000000000000000000000000088AC +:10DCD00000000008000000C0000000000004000078 +:10DCE0000000200400000088000000000000000286 :10DCF0000000000000000000000000000000000024 -:10DD00000000000000000000000000000000000013 -:10DD10000000000000000000000000000000000003 -:10DD200000000000000000000000000000000000F3 -:10DD300000000000000000000000000000000000E3 -:10DD400000000000000000000000000000000000D3 +:10DD000000000000110000000000030000200900D6 +:10DD100000040000000000000000000000000000FF +:10DD200010000000000000000000000000020000E1 +:10DD300000000000000000000000010000000000E2 +:10DD400010001000000000000000000000000000B3 :10DD500000000000000000000000000000000000C3 -:10DD6000000000028200000000000000000000002F -:10DD700000000000000000000000000000000000A3 -:10DD8000000000000000000000000000000800008B +:10DD600000000000000000000000000000000000B3 +:10DD700000000000000000000000000000000002A1 +:10DD8000000200020000000000000000000000008F :10DD90000000000000000000000000000000000083 :10DDA0000000000000000000000000000000000073 -:10DDB0000000000000000000000000000000000063 -:10DDC0000000000000000000000000000000000053 -:10DDD0000000000000000000000020000000000023 -:10DDE0000000000000000000000000000000000033 -:10DDF0000000000000000000000000000000000023 -:10DE00000000000000000000000000000000000012 +:10DDB0000000002100000000000000004000020000 +:10DDC00000400040000000000000000000000800CB +:10DDD0000000000000000000200009000000030017 +:10DDE0001100000000000000000000880000020098 +:10DDF0000000000000000000000000900000000093 +:10DE00000000000000000010000000000000000002 :10DE10000000000000000000000000000000000002 -:10DE200000000000000000000000000000400000B2 -:10DE300000000000000000000000000000000000E2 +:10DE200000000000000000000000000000000000F2 +:10DE300000000000000000000000010010000000D1 :10DE400000000000000000000000000000000000D2 :10DE500000000000000000000000000000000000C2 :10DE600000000000000000000000000000000000B2 :10DE700000000000000000000000000000000000A2 -:10DE800000000040000001840001000000000000CC -:10DE90000000000000000000000000000000000082 -:10DEA0000000000000000000000000000000000072 -:10DEB0000000000000000000000000000000000062 +:10DE80000000000000000000000000000000000092 +:10DE900000000001410040010001000000000000FE +:10DEA000000000000000000000000000A0000000D2 +:10DEB00000000000000000000000000009008000D9 :10DEC0000000000000000000000000000000000052 :10DED0000000000000000000000000000000000042 :10DEE0000000000000000000000000000000000032 :10DEF0000000000000000000000000000000000022 -:10DF0000000000000080000008080004000000007D -:10DF10000000000000000000000000000000000001 +:10DF00000000000000000000000000000000000011 +:10DF10000000000011410320800500030000000004 :10DF200000000000000000000000000000000000F1 -:10DF300000000000000000000000000000000000E1 -:10DF400000000000000000000000000000000000D1 +:10DF300000000000000000000200000010000900C6 +:10DF40000800410000000000000000000000000088 :10DF500000000000000000000000000000000000C1 :10DF600000000000000000000000000000000000B1 :10DF700000000000000000000000000000000000A1 -:10DF800000000000000000000400080800800000FD +:10DF80000080000000800000000000000000000091 :10DF90000000000000000000000000000000000081 :10DFA0000000000000000000000000000000000071 -:10DFB0000000000000000000000000000000000061 -:10DFC0000000000000000000000000000000000051 +:10DFB0000000000000000004001000040000010048 +:10DFC000010001000100000000000000000000004E :10DFD0000000000000000000000000000000000041 :10DFE0000000000000000000000000000000000031 :10DFF0000000000000000000000000000000000021 -:10E00000000000000000000000000100000000A06F -:10E010000000000000000000000000000000000000 +:10E0000000000008000000C0000000000000000048 +:10E01000000000000000000000000000000000827E :10E0200000000000000000000000000000000000F0 -:10E0300000000000000000000000000000000000E0 -:10E0400000000000000000000000000000000000D0 +:10E030000000008400000082000100010091000047 +:10E0400000010000000100010000000000000000CD :10E0500000000000000000000000000000000000C0 :10E0600000000000000000000000000000000000B0 :10E0700000000000000000000000000000000000A0 -:10E08000000000000000000000000101A000A0004E -:10E090000000000000000000000000000000000080 -:10E0A0000000000000000000000000000000000070 -:10E0B0000000000000000000000000000000000060 -:10E0C0000000000000000000000000000000000050 +:10E080000000000000000800000000000000000088 +:10E09000000000000000000000000001010100007D +:10E0A000000100000000000000000000000000006F +:10E0B0000000010000000200000000000400000059 +:10E0C00000000009001000080041000000000000EE :10E0D0000000000000000000000000000000000040 :10E0E0000000000000000000000000000000000030 :10E0F0000000000000000000000000000000000020 -:10E100000000000000000000000000002104800862 -:10E11000800000000000000000000000000000007F -:10E1200000000000000000000000000000000000EF -:10E1300000000000000000000000000000000000DF -:10E1400000000000000000000000000000000000CF +:10E100000000000009000000800000000000000086 +:10E1100000000000000000000000000000101010CF +:10E12000404000410000000000000000000000002E +:10E13000000000004000000000000000000000009F +:10E1400000000400000000000000001000000000BB :10E1500000000000000000000000000000000000BF :10E1600000000000000000000000000000000000AF :10E17000000000000000000000000000000000009F -:10E18000000000000000000000000000000000008F -:10E19000002000000000000000000000000000005F +:10E18000000000000000000000400000000000004F +:10E19000000000000000000000000000000000007F :10E1A000000000000000000000000000000000006F -:10E1B000000000000000000000000000000000005F -:10E1C000000000000000000000000000000000004F +:10E1B000000000000000000000410000000080009E +:10E1C000000000000000000000000000000100004E :10E1D000000000000000000000000000000000003F :10E1E000000000000000000000000000000000002F :10E1F000000000000000000000000000000000001F -:10E20000000000000000000000000000000000000E +:10E20000000000000000000000000001000000000D :10E2100000000000000000000000000000000000FE :10E2200000000000000000000000000000000000EE -:10E2300000000000000000000000000000000000DE -:10E2400000000000000000000000000000000000CE +:10E2300000000000000000000000000100000000DD +:10E24000C000400040004000600000E0000000000E :10E2500000000000000000000000000000000000BE :10E2600000000000000000000000000000000000AE :10E27000000000000000000000000000000000009E -:10E28000000000000000000000000000000000008E -:10E2900000000000000180000000000000000000FD +:10E28000000000000000000000000000000040004E +:10E29000000A000000000000000000000000000074 :10E2A000000000000000000000000000000000006E -:10E2B000000000000000000000000000000000005E -:10E2C000000000000000000000000000000000004E +:10E2B000000000000000000000000000000012004C +:10E2C00042000000002000000000000000000000EC :10E2D000000000000000000000000000000000003E :10E2E000000000000000000000000000000000002E :10E2F000000000000000000000000000000000001E @@ -77381,7 +77381,7 @@ :10E3100000000000000000000000000000000000FD :10E3200000000000000000000000000000000000ED :10E3300000000000000000000000000000000000DD -:10E3400000000000000000000000000000000000CD +:10E34000000000003E3C7C3C00000000000000009B :10E3500000000000000000000000000000000000BD :10E3600000000000000000000000000000000000AD :10E37000000000000000000000000000000000009D @@ -77389,7 +77389,7 @@ :10E39000000000000000000000000000000000007D :10E3A000000000000000000000000000000000006D :10E3B000000000000000000000000000000000005D -:10E3C000000000000000000000000000000000004D +:10E3C00000000000000006006000000000000000E7 :10E3D000000000000000000000000000000000003D :10E3E000000000000000000000000000000000002D :10E3F000000000000000000000000000000000001D @@ -77402,7 +77402,7 @@ :10E4600000000000000000000000000000000000AC :10E47000000000000000000000000000000000009C :10E48000000000000000000000000000000000008C -:10E490000000000000000000000000000F0F00005E +:10E49000000000000000000000000000000000007C :10E4A000000000000000000000000000000000006C :10E4B000000000000000000000000000000000005C :10E4C000000000000000000000000000000000004C @@ -77410,273 +77410,273 @@ :10E4E000000000000000000000000000000000002C :10E4F000000000000000000000000000000000001C :10E50000000000000000000000000000000000000B -:10E5100000000000000000000000000000000F0FDD +:10E5100000000000000000000000000000000000FB :10E5200000000000000000000000000000000000EB :10E5300000000000000000000000000000000000DB :10E5400000000000000000000000000000000000CB -:10E5500000000000000000000000000000000000BB +:10E550000000000000610006800C000000000000C8 :10E5600000000000000000000000000000000000AB :10E57000000000000000000000000000000000009B :10E58000000000000000000000000000000000008B -:10E590000000000000000000000000000000056115 -:10E5A000000B050100A000000000000000000000BA -:10E5B000000000000000000000000000000000005B -:10E5C000000000000000000000000000000000004B -:10E5D000000000000000000000000000000000003B +:10E5900000000000000005000A08050000A00000BF +:10E5A000000000000000000000000000000000610A +:10E5B0000006000D00000000000000000000000048 +:10E5C00000000000000005000A08050000A0A0618E +:10E5D0000007000D000000000000FFF5BEBE0000B7 :10E5E000000000000000000000000000000000002B :10E5F000000000000000000000000000000000001B :10E60000000000000000000000000000000000000A :10E6100000000000000000000000000000000000FA -:10E62000000000003030303000000000000000002A -:10E6300000000000000000000000000000000000DA +:10E6200000000000000000000000000000000000EA +:10E630000000000030BA3030000000000000000090 :10E6400000000000000000000000000000000000CA -:10E6500000000000000000000000000000000000BA +:10E650000000000000000000000000003C34BEBECE :10E6600000000000000000000000000000000000AA :10E67000000000000000000000000000000000009A :10E68000000000000000000000000000000000008A :10E69000000000000000000000000000000000007A -:10E6A00000000000000030303030000000000000AA -:10E6B000000000000000000000000000000000005A +:10E6A000000000000000000000000000000000006A +:10E6B000000000000000303030BA00000000000010 :10E6C000000000000000000000000000000000004A -:10E6D000000000000000000000000000000000003A -:10E6E000000000000000000000000000000000002A +:10E6D0000000000000000000000000000000000A30 +:10E6E00030300000000000000000000000000000CA :10E6F000000000000000000000000000000000001A :10E700000000000000000000000000000000000009 :10E7100000000000000000000000000000000000F9 -:10E72000000000000C0C0C0C00F000F000000000D9 -:10E7300000000000000000000000000000000000D9 +:10E7200000000000000000000000000000000000E9 +:10E730000000000075305D0C0000000000000000CB :10E7400000000000000000000000000000000000C9 :10E7500000000000000000000000000000000000B9 -:10E7600000000000000000000000000000000000A9 +:10E76000000A30300000000000000000000000003F :10E770000000000000000000000000000000000099 :10E780000000000000000000000000000000000089 :10E790000000000000000000000000000000000079 -:10E7A0000000000000000C0C0C0C00F000F0000059 -:10E7B0000000000000000000000000000000000059 +:10E7A0000000000000000000000000000000000069 +:10E7B00000000000000055005500000000000000AF :10E7C0000000000000000000000000000000000049 -:10E7D0000000000000000000000000000000200019 -:10E7E000000000000000880000002000000004007D -:10E7F0000000000000001000000000000000208069 -:10E8000000800080008088000000200000002000C0 -:10E8100000000000000020000000000000000003D5 -:10E820002000000000000000880000002000000020 -:10E830004000040000000000200000000000000074 -:10E8400020000000000088002000000020004000A0 -:10E850002000200000000000200004000000000054 -:10E860000000000000000000000000004040000028 -:10E870000000000000000000800000000000000018 -:10E880000020002000200020000000000000000008 -:10E89000000200020002000200020002000200006A -:10E8A0000000000000000000000000000000000068 -:10E8B0000000000000000000000000000000000058 -:10E8C0000000000000000000000000000000000048 -:10E8D0000000000000000000000000000000000038 -:10E8E0000000000000000000000000000000000028 -:10E8F0000000000000000000000000000000000018 -:10E9000004008800880088008800000000000000E3 -:10E9100000000000000000000000040004000400EB -:10E920000000000000000000000090000000000057 -:10E9300000000200040000000000000000000000D1 -:10E9400004000000000000000000000000000000C3 -:10E9500000000000000000000000000000000000B7 -:10E9600000000000000000000000000000000000A7 -:10E97000000000000900000000000000000000008E -:10E980000000000000000000000000000000000087 -:10E990000000000000000000400000000000000037 -:10E9A0000000000000000000040000000000000063 -:10E9B00000000000000080000000000000000000D7 -:10E9C0000200000000000000000000000000000045 -:10E9D0000000000000000000000000000000000037 -:10E9E00000000000400001000000000000000000E6 -:10E9F0000000000000000000000000000000000017 -:10EA00000000000000000000000000000000000006 -:10EA100000000000000000000000000000000000F6 -:10EA200000000000000000000000000000000000E6 +:10E7D0000000000000000000000000000000000039 +:10E7E0002000000000000000000000000004910074 +:10E7F000C000000000000000200000041000000025 +:10E800008800C00000000000000000040004200098 +:10E810002000000000000000200000002000000197 +:10E820000000200020000000000000000004880418 +:10E830002000000000000000400020000400000054 +:10E840000000200020000000000000004000200424 +:10E850000000000000000000C000200000000000D8 +:10E860004000000000000000000000000000000068 +:10E870000490009011900000100000004000000083 +:10E8800040000000000000000002000000000090B6 +:10E890000090409000000000000200900000000284 +:10E8A0000000400200000000000000000000000026 +:10E8B0000040000000000000000000000000000018 +:10E8C00000400000000000000000000040000004C4 +:10E8D0000000000000000000000400000000000034 +:10E8E0000000000000080000000400000000000814 +:10E8F00002000200000000002000000000000200F2 +:10E9000000000004200000000000000000400000A3 +:10E9100002100000000000000000000000200000C5 +:10E9200000000000004100000000000001020000A3 +:10E9300000100200000000000000000200000000C3 +:10E9400000000200000000000000000090400040B5 +:10E950000000000000400040001000100000000017 +:10E96000080000000000000000000000000800088F +:10E970000000008280000000000080000000000015 +:10E9800000000408000100C000000000004000C0BA +:10E99000002000000400000800000008000800003B +:10E9A0000900028200000000000000000000400199 +:10E9B000000000000400000000080000000800083B +:10E9C0000000000004000000000000000000000043 +:10E9D00000000000020000000008000000084008DD +:10E9E00000400000000000000000000000000000E7 +:10E9F00000000000002100000000000000080000EE +:10EA000000000000004000400000840300000000FF +:10EA100000400400040004000000000000000000AA +:10EA20008400C0050000000000001000000000008D :10EA300000000000000000000000000000000000D6 -:10EA400000000000000000000000000000000000C6 +:10EA400000000000040010000000000000000000B2 :10EA500000000000000000000000000000000000B6 -:10EA600000000000000000000200000000000000A4 -:10EA70000000000000000000000000000000000096 +:10EA600000000000000000000000000000000000A6 +:10EA7000000000840000000000840000210000006D :10EA80000000000000000000000000000000000086 -:10EA90000000000000000000000000000000000076 -:10EAA0000000000000000000000000000000050061 -:10EAB0000000000000000000000000000000000056 +:10EA90000000000000000000000000000000002056 +:10EAA0000000000000000000000000000000004026 +:10EAB00000000082000000000000000008000000CC :10EAC0000000000000000000000000000000000046 :10EAD0000000000000000000000000000000000036 -:10EAE0000000000000000000000004000800080012 -:10EAF0000900000000000000000008008200820001 -:10EB000082000800000001000080000000000000FA -:10EB100000000800000000000000000000000000ED -:10EB20000000820000000000000000000000000063 -:10EB300004000000000000000000000008000000C9 -:10EB40000000C00000000000000000008200000083 -:10EB500000000000000000000000000001000000B4 -:10EB60000000011100000000000000000000000093 -:10EB70000000040000000000000000000000000091 -:10EB80000000000000000000200000040000110050 -:10EB90000000000000000000000000000000000075 -:10EBA0000000000000000000000000000000000065 -:10EBB0000000000000000000000000000000000055 -:10EBC0000000000000000000000000000000000045 -:10EBD0000000000000000000000000000000020033 -:10EBE0000000000004000000000000000000000021 -:10EBF00000000020000000000000000000000000F5 -:10EC00000000000090000000000000000000000074 -:10EC100000000000000000000000000000000000F4 -:10EC200000000000000000000000000000000000E4 -:10EC300000000000000000000800000000000000CC -:10EC400000000000000000000000000000000000C4 +:10EAE0000000000000000000000000000000900096 +:10EAF000000000000000C00000110000080000003D +:10EB00000000000000000003000000000080008002 +:10EB10000080000000042000000000000000000051 +:10EB200000000000000401001009000000000000C7 +:10EB300000000000000000000000000000000000D5 +:10EB400000000000000000000000000000000000C5 +:10EB500000000000000000000000000000000000B5 +:10EB60000000000004000000084000000000000059 +:10EB70000000000000000000090000880000000004 +:10EB80000000000000080000000000000000080471 +:10EB90004104000400000000000400000010000018 +:10EBA000000000000000000120840000000021009F +:10EBB000000008002100050000000000000041C026 +:10EBC00000C041C0020000C004C000C0001000002E +:10EBD00000000004000400080000001004100008F9 +:10EBE00000000000000008400000002000000000BD +:10EBF00000000000A00000000000820000000800EB +:10EC00000000A020000000200020022008000000DA +:10EC100000080000000000000040000000000000AC +:10EC200000000000900000008400000000000000D0 +:10EC300000000000000000000000040000000400CC +:10EC400000000000000000200000000000000000A4 :10EC500000000000000000000000000000000000B4 -:10EC60000000000000200000000000000000000084 -:10EC70000000000000010000000000000000000093 -:10EC80000000000000000000000000000000000084 -:10EC90000000000000000000000000000000000074 -:10ECA0000000000000000000000000000000002044 -:10ECB0000000000000000000000000000000000054 -:10ECC00000880000000000000000000000000000BC -:10ECD0000000000000000000000000000000000034 -:10ECE0000000000000000001000000000000000023 -:10ECF0000000000000000000000000000000000014 -:10ED000000000000000004000000000000000000FF -:10ED100000000000000000000000000000000000F3 -:10ED200000000000000000000000000000000000E3 -:10ED300000000000000000000000000000000000D3 +:10EC600000000000000000000000000000000000A4 +:10EC700000000000000408A00000000000000800E0 +:10EC80000000000000010000000100010000000081 +:10EC9000000000010000000004000000000000006F +:10ECA0000000090000000004000000000300000054 +:10ECB00000000000000000000000008200000000D2 +:10ECC0000000000000000000000004000000000040 +:10ECD000080000000000000000000000000000002C +:10ECE00000000000000000000000210009000000FA +:10ECF0000000000000000000000000000000820092 +:10ED000000000000010800000000000800000020D2 +:10ED10000020008000000008010000000000002129 +:10ED20000000000020002000200020000000000063 +:10ED300020000000C00000000011000000000000E2 :10ED400000000000000000000000000000000000C3 :10ED500000000000000000000000000000000000B3 -:10ED600000000000000000000000000000000000A3 +:10ED6000000000000800000000000000000000009B :10ED70000000000000000000000000000000000093 -:10ED80000000000000000000000000000000000083 -:10ED90000000000000000000000000000000000073 -:10EDA0000000000000000000000000000000000063 -:10EDB0000000000000000000000000000000000053 -:10EDC0000000000000000000000003000000000040 -:10EDD0000000000000000000000000000000000033 -:10EDE0000000000000000000000000000000000023 -:10EDF0000000000000000000900000000000000083 -:10EE00000000000000000000000000000000010001 +:10ED8000000011040000200000000000020000004C +:10ED90000085110100080004000110000288020033 +:10EDA00004001100000000000020000080000000AE +:10EDB00000008000000000400040000000000090C3 +:10EDC0000000000000C00500000005000000000079 +:10EDD00000082010000400082000001000100000AF +:10EDE0000008000000000000000200000000000811 +:10EDF0000000000000000000000000000000000013 +:10EE000000000000000090C00020000890080000F2 :10EE100000000000000000000000000000000000F2 :10EE200000000000000000000000000000000000E2 :10EE300000000000000000000000000000000000D2 -:10EE400000000000000000000000000000000000C2 +:10EE400000000001000100010000000000000000BF :10EE500000000000000000000000000000000000B2 -:10EE60000000000000000000000090000000000012 -:10EE70000000000000000000110080000000000001 -:10EE80000000000000000000000000000000000082 -:10EE90001100210000000000000000000000000040 +:10EE600000000000000000000000000000000000A2 +:10EE70000000000000000000000000000000000092 +:10EE8000000000000000000091800080028080806F +:10EE90000000000000000000000000030900000066 :10EEA0000000000000000000000000000000000062 -:10EEB0000000000000000000000000000000000052 -:10EEC0000000000000000000000000000000000042 +:10EEB0000000000009000000000000000000000049 +:10EEC000000000050008001000080000000000001D :10EED0000000000000000000000000000000000032 -:10EEE0000000000000000000000011008000000091 -:10EEF0000000000000000000000000000080000092 -:10EF00000000000000000000000000000000000001 -:10EF10000000004109000003008000000000000024 +:10EEE0000000000000000000000000000000000022 +:10EEF0000000000000000000000000000000000012 +:10EF000000000000000000000000001000118090D0 +:10EF100080000000000000000080000400000004E9 :10EF200000000000000000000000000000000000E1 -:10EF300000000000000000000000000000000000D1 +:10EF3000000000400000000500000000000000008C :10EF400000000000000000000000000000000000C1 :10EF500000000000000000000000000000000000B1 -:10EF60000000000000000000000000000000008021 -:10EF700000000080000000000000000000000020F1 -:10EF800000000090000000000000000000000000F1 -:10EF900000000000000101000000008800000040A7 -:10EFA0000000004000000000000000000000000021 -:10EFB0000000000000000000000000000000000051 +:10EF600000000000000000000000000000000000A1 +:10EF70000000000000000000000000000000000091 +:10EF800000000000000000000000000088000201F6 +:10EF90009088C000000000080000000200A10000EE +:10EFA0000001000000000000000000000000000060 +:10EFB0000000000000010000000000000000000050 :10EFC0000000000000000000000000000000000041 :10EFD0000000000000000000000000000000000031 :10EFE0000000000000000000000000000000000021 -:10EFF0000020000000C00000000000000000010030 -:10F0000000888800000000000000000000000000F0 -:10F010000000000000000000880000000100000067 -:10F0200000004000000000000000000000000000A0 -:10F0300000000000000000000000000000000000D0 +:10EFF0000000000000000000000000000000000011 +:10F0000000000000000000000000000000000808F0 +:10F010002088002088C000000000400000000000A0 +:10F02000A00000000100000000000000000000003F +:10F03000000000000000000004004000000000008C :10F0400000000000000000000000000000000000C0 -:10F0500001000000000000000000000000000000AF +:10F0500000000000000000000000000000000000B0 :10F0600000000000000000000000000000000000A0 -:10F07000410000888800010000000000000000003E -:10F0800041000080000000000000000000000000BF -:10F09000000000000000000000000000000041002F -:10F0A0004000000000000000000000000000000020 -:10F0B0000000000000000000000000000000000050 -:10F0C0000000000000000000000000000000000040 -:10F0D000000002000000000000000000000000002E +:10F070000000000000000000000000000000000090 +:10F080000000000000000000000000000000000080 +:10F09000808000000000918020000000000000003F +:10F0A0000000000000040400000000000000000058 +:10F0B00000000000000000000000800000000500CB +:10F0C00000000000000000000000000020004100DF +:10F0D0000000000000000000000000000000000030 :10F0E0000000000000000000000000000000000020 -:10F0F0000000410000800000090000000000000046 -:10F10000000000110000008000000000000000006E -:10F1100000000000000000000000000000110500D9 -:10F1200000000000000000000000000000000000DF +:10F0F0000000000000000000000000000000000010 +:10F1000000000000000000000000000000000000FF +:10F110000000800980C08080000000000002000024 +:10F1200000000000000000000004000000000000DB :10F1300000000000000000000000000000000000CF -:10F1400000000000000000000000000000000000BF +:10F1400000000000000000000000000000110000AE :10F1500000000000000000000000000000000000AF :10F16000000000000000000000000000000000009F -:10F1700000000000001100000080000000000000FE -:10F18000000000000001000000400000000000003E -:10F19000000000000000000000000000000000016E +:10F17000000000000000000000000000000000008F +:10F18000000000000000000000000000000000007F +:10F1900000000000C000108810408800000000003F :10F1A000000000000000000000000000000000005F :10F1B000000000000000000000000000000000004F :10F1C000000000000000000000000000000000003F :10F1D000000000000000000000000000000000002F :10F1E000000000000000000000000000000000001F -:10F1F00000000000000000010000004000000000CE -:10F200000000000000000000000007008200000075 -:10F2100000000000000000000000000000000000EE -:10F2200000E000008141000A00000700000000002B +:10F1F000000000000000000000000000000000000F +:10F2000000000000000000000000000000000000FE +:10F21000000000000000600600E00700000000069B +:10F2200000000700000000000010000000000000C7 :10F2300000000000000000000000000000000000CE -:10F2400000000000000000000000000000000000BE -:10F2500000000000000000000000000007000000A7 +:10F24000004400000000000000000000000000007A +:10F2500000000000000000000000000000000000AE :10F26000000000000000000000000000000000009E -:10F2700000000000000000000000000007008221E4 -:10F28000000000000000000000000000F0F000009E -:10F29000000000000000000000000000000000006E +:10F27000000000000000000000000000000000008E +:10F28000000000000000000000000000000000007E +:10F290000000000000000000FCFC28EBC0FCBEBE2B :10F2A000000000000000000000000000000000005E :10F2B000000000000000000000000000000000004E :10F2C000000000000000000000000000000000003E :10F2D000000000000000000000000000000000002E :10F2E000000000000000000000000000000000001E -:10F2F0000000000000000000000000000000F0F02E -:10F300000000000000000000000000000000F0F01D -:10F3100000000000000000000000000000000000ED -:10F3200000000000000000000000000000000000DD +:10F2F000000000000000000000000000000000000E +:10F3000000000000000000000000000000000000FD +:10F3100000000000000000000000C0C028EBC0FC9E +:10F3200082820000000000000000000000000000D9 :10F3300000000000000000000000000000000000CD :10F3400000000000000000000000000000000000BD :10F3500000000000000000000000000000000000AD :10F36000000000000000000000000000000000009D :10F37000000000000000000000000000000000008D -:10F38000F0F000000000000000000000000000009D -:10F390000000FFFF0000000000000000000000006F -:10F3A000000000000000000000000000000000005D +:10F38000000000000000000000000000000000007D +:10F390000000000000000000000000005555FF00C4 +:10F3A00055550F0F00000000000000000000000095 :10F3B000000000000000000000000000000000004D :10F3C000000000000000000000000000000000003D :10F3D000000000000000000000000000000000002D :10F3E000000000000000000000000000000000001D :10F3F000000000000000000000000000000000000D -:10F40000FFFF0000FFFF0000000000000000000000 -:10F4100000000000000000000000000000000000EC -:10F4200000000000000000000000000000000000DC +:10F4000000000000000000000000000000000000FC +:10F4100000000000000000000000000000000F0FCE +:10F420003C3C3C3CFF0000000000000000000000ED :10F4300000000000000000000000000000000000CC :10F4400000000000000000000000000000000000BC :10F4500000000000000000000000000000000000AC :10F46000000000000000000000000000000000009C :10F47000000000000000000000000000000000008C :10F48000000000000000000000000000000000007C -:10F4900005000A00054000A8000000000000000070 -:10F4A000000000000000000000400006000C00000A -:10F4B00005180A20050005A000000000000000005B -:10F4C000000000000000000000000000000000003C -:10F4D000000000000000000000000000000000002C -:10F4E0000000050000000000000000000000000017 +:10F49000000000000000000000000000000000006C +:10F4A0001061202F804D000805000A28050000A0EB +:10F4B00000000007000C0000000000000000000039 +:10F4C000000000000000000000610007000D0000C7 +:10F4D0000000000000000000000000610006000DB8 +:10F4E000000000000000000000000000000000001C :10F4F000000000000000000000000000000000000C -:10F50000000005002A00054000A8000000000000DF +:10F5000000000000000000000000000000000000FB :10F5100000000000000000000000000000000000EB -:10F520000000000000000000000000000F0FFFFFBF -:10F5300000000000000000000000000000000000CB +:10F5200000000000000000000000000000000000DB +:10F5300000000000555500FF000000000000000022 :10F5400000000000000000000000000000000000BB :10F5500000000000000000000000000000000000AB :10F56000000000000000000000000000000000009B :10F57000000000000000000000000000000000008B :10F58000000000000000000000000000000000007B :10F59000000000000000000000000000000000006B -:10F5A00000000000000000000000000000000F0F3D -:10F5B000000000000000000000000000000000004B +:10F5A000000000000000000000000000000000005B +:10F5B000000000000000555500FF000000000000A2 :10F5C000000000000000000000000000000000003B :10F5D000000000000000000000000000000000002B :10F5E000000000000000000000000000000000001B @@ -77684,207 +77684,207 @@ :10F6000000000000000000000000000000000000FA :10F6100000000000000000000000000000000000EA :10F6200000000000000000000000000000000000DA -:10F630000000F0F0000000000000000000000000EA +:10F630000000000000000000FF00AAAA0000000077 :10F6400000000000000000000000000000000000BA :10F6500000000000000000000000000000000000AA -:10F66000000000000000000000000000000000009A +:10F66000FF00FF000000000000000000000000009C :10F67000000000000000000000000000000000008A :10F68000000000000000000000000000000000007A :10F69000000000000000000000000000000000006A :10F6A000000000000000000000000000000000005A -:10F6B00000000000F0F0000000000000000000006A +:10F6B00000000000000000000000FF00AAAA0000F7 :10F6C000000000000000000000000000000000003A :10F6D000000000000000000000000000000000002A -:10F6E000000000000000000000000000000000001A +:10F6E0000000FF1FFF1400000000000000000000E9 :10F6F000000000000000000000000000000000000A :10F7000000000000000000000000000000000000F9 -:10F7100000000000000000000000200020000000A9 -:10F720000000200200002000000040000400200033 -:10F730002000200000000000000020002000000049 -:10F740000000200000002000000020000000200039 -:10F750002000200000000000000000002000200029 -:10F760000000000020000000200000002000000039 -:10F770002000200000000000000000002000200009 -:10F780000000000020000000200000002000000019 -:10F790002000000084000000000000004000000085 -:10F7A0000000000400000000000000000002400211 -:10F7B0000002000200000000000000000000410004 -:10F7C00000040004000000004000000040000000B1 -:10F7D0000000000000000000400200C00000000027 -:10F7E0000000000000000000000000000000000019 -:10F7F00000000000000020000000000000000000E9 -:10F8000000000000000000004000000000000000B8 -:10F8100000000000000000000000400000000000A8 -:10F8200000000000000000000000000000000000D8 -:10F8300000000000000000000000000000000000C8 -:10F8400000000200020000000000000000000000B4 -:10F850000000000000000800080002100210000074 -:10F860000400040002000200020002000200024143 -:10F870000000000000000000000000000000000088 -:10F880000000000000000000000000000000000078 +:10F7100000000000000000000000000000000000E9 +:10F720000000000000004000200400000000000075 +:10F730002000000020000000000000000000000089 +:10F7400040000000840020002000020002000000B1 +:10F7500040020200200002004000000300000100FF +:10F76000400020804000880000002004200020008D +:10F770000000400020000400210020000000840060 +:10F78000880040001000C0000000000001000000E0 +:10F790000000840000000100400041000000000063 +:10F7A0000000000000000000000200000000000057 +:10F7B0000000000000000000000000000040000009 +:10F7C0000000000000000000000000000000000039 +:10F7D00000009083000040000000000000000000D6 +:10F7E00010004000000200C00000100000004000B7 +:10F7F00000000000000000002000020000000000E7 +:10F800000000400000004000200200000000040052 +:10F810000000000020000000200021000400000083 +:10F8200000000003100300000000000000000008BA +:10F83000040000000210200820002000200020000A +:10F8400005030500054000000000840000000400DE +:10F850000400002004000000000000000000000080 +:10F860000000000001000080000000000200000015 +:10F870000000000000000000000000000040000048 +:10F880000000000000000003000000000000000075 :10F890000000000000000000000000000000000068 -:10F8A0000008000800080008000000080000000030 -:10F8B0000400000000000000000000000000000044 -:10F8C000000800080008000800000508000000000B -:10F8D0000000000000000000000000000000000028 -:10F8E00000000008000800080008000000080000F0 -:10F8F0000000000000000000000000000000000008 -:10F9000000000008000800080008000000080000CF -:10F9100000000000000000040000000000000000E3 -:10F9200000000000000000000000040000000000D3 -:10F9300000000000000000000000000000000000C7 -:10F9400000000000000000000000000000000000B7 -:10F9500000000000000000000000000000000000A7 -:10F960000000000000000000000000000000000097 -:10F970004000000000000000000000000000000047 -:10F980000000000000000000000000001000000067 -:10F990000000000000000000000000000000000067 -:10F9A0000000000000000000000000000000000057 -:10F9B0000000000000000000000000000000000047 -:10F9C0000000000000000000000000000000000037 -:10F9D0000000000000000000000000000000000027 -:10F9E0000400000000000000000000000000000013 -:10F9F0000000000000000000000000000000000007 +:10F8A00000040004000800840040008200820082FE +:10F8B00000040082000000048008800080048000B2 +:10F8C0008000A008A040A0080000050009000982EF +:10F8D00080408040000180400040004000400040E7 +:10F8E000000000000004040000020000000080008E +:10F8F00000000000000000000900040000000401F6 +:10F9000000000000000000000000000000000000F7 +:10F91000000000000000000009000040004000005E +:10F92000000000000000000000410000000500038E +:10F9300000080000000000000005000000000000BA +:10F94000000000000000000400210041000410112C +:10F9500090040000C0008800900900000020000012 +:10F9600000000000000900000009000001009000F4 +:10F9700001000000840000000000000000050005F8 +:10F980000000040000080008000200000000000061 +:10F990000000000000410004000000000000000022 +:10F9A0000000000000000000000000000000020055 +:10F9B00041000000210000000000002000000020A5 +:10F9C00041000000000000000000000000000001F5 +:10F9D0000000000100002100000000000000000005 +:10F9E00000000000000004000300000000402000B0 +:10F9F00000001000000000000000000000000000F7 :10FA000000000000000000000000000000000000F6 -:10FA100000000000000000000000000000000000E6 -:10FA200000000000000000000000000000000020B6 -:10FA300000000000000000000000000000000000C6 -:10FA400000000000000000000000000000000000B6 -:10FA500000000000000000000000000000000000A6 -:10FA60000000000000000000004000400000000016 -:10FA70000000000000000000000000000000000086 -:10FA80000000000000000000000000000000000076 -:10FA90000000000000000000000000000000000066 -:10FAA0000000000000000000000000000000000056 -:10FAB0001000000000000000000000000000000036 -:10FAC00000000000410000000000000000000000F5 -:10FAD0001000050000000000000000000000000011 -:10FAE0000000000000000000000000000000000016 -:10FAF00000000000000000000000000000000008FE -:10FB000000000000000000000000000000000000F5 -:10FB100000001000000000000000000000000000D5 -:10FB200008000000000000000000000000000000CD -:10FB300000000000000000000000000000000000C5 -:10FB400010000000000000000000000000000000A5 -:10FB5000000000000000000000000000080000009D -:10FB60000000000000000000000000000000000095 -:10FB70000000000000000000000000000000000085 -:10FB80000000000000000000000000000000000075 -:10FB90000000000000000000000000000000000065 -:10FBA0000000000000000000000000000000000055 -:10FBB00008000084000000000000000000000000B9 -:10FBC000000000C0000000000084000000000000F1 -:10FBD0000000000000000000000000000000000025 -:10FBE0000000000000000000000000000000000015 -:10FBF0000000000000000004000000000000000001 +:10FA100000000000000004000000000000000000E2 +:10FA20000000000000000000000000008200001143 +:10FA300000000800A00000000000000000000021FD +:10FA40000021820082210400C0000000000000802C +:10FA50000000008000008200C0000000088000005C +:10FA6000020000000200000000200020C0028220EE +:10FA700000020000000000020000C000C0000020E2 +:10FA800000000000000004000000820000000800E8 +:10FA9000080000000000820008000800004100107B +:10FAA00010800011000000000000000000000008AD +:10FAB000000000001100208400820000008200820B +:10FAC0000000004000081110800000000900020042 +:10FAD00000040000110411000000000000000902F1 +:10FAE0000000008400000000000000010001000090 +:10FAF000000100000000000000000000000000A065 +:10FB0000000000900000410000000000000008001C +:10FB100000400000000000000000000000000000A5 +:10FB200000000020050008000300000000000000A5 +:10FB3000A0000000000000000000000000084000DD +:10FB400010100010C008821000089020040004006B +:10FB5000002100410400042000000000000000001B +:10FB60000000000000000000040000000000200071 +:10FB7000400000004000200008008200002010002B +:10FB8000042008000008000800050000002104000F +:10FB90000000000000110000400000000000900084 +:10FBA000000008000800A0000000000000000000A5 +:10FBB00000000000008400000000000000C0000001 +:10FBC00000A0000000000000000000000000000095 +:10FBD00000C00000000080000000000004000000E1 +:10FBE00000000020000000000000000000000000F5 +:10FBF000000000000000002088000020000000003D :10FC000000000000000000000000000000000000F4 :10FC100000000000000000000000000000000000E4 -:10FC20000000000000840000000000000000000050 -:10FC300000000000000000000000000000020000C2 -:10FC400000000000000000000000000000000000B4 -:10FC500000000002000000000000000000000000A2 -:10FC60000000000000000000000000000000000094 -:10FC70000000000000000000000000000000000084 -:10FC80000000000000000000000000000000000074 -:10FC90000000000000000000000000000000000064 -:10FCA0000000000000000000000000000000000252 -:10FCB0000000000000000000000000000000000044 -:10FCC0000000000000000000000000000000000034 -:10FCD0000000000000000000000000000000000024 -:10FCE00000000000000000004100000000000000D3 -:10FCF0000000000000000000000000000000000004 -:10FD0000000000000088000000100000000000005B -:10FD100005000000000000000000000000000000DE -:10FD200000000000000000000008000000000000CB -:10FD300000000000000000000000000000000000C3 -:10FD400000000000000000000000000000000000B3 -:10FD500000000000000000000000000000000000A3 -:10FD60000000000000000000000000000000000093 -:10FD70000000000000000000000000000000000083 -:10FD80000000000000000000000000000000000073 -:10FD90000000000000000000000000000000000063 -:10FDA0000000000000000000000000000000000053 -:10FDB0000000000000000000000000000000000043 -:10FDC0000000000000000000000000000000000033 -:10FDD0000000000000000000000000000000000023 -:10FDE0000000000000000000000000000000000013 -:10FDF0000000000000000000000000000000000003 -:10FE000000000000000000000000000000000000F2 -:10FE100000000000000000000000000000000000E2 -:10FE200000000000000000000000000000000000D2 -:10FE300000000000000000000000000000000000C2 -:10FE400000000000000000000000000000000000B2 -:10FE500000000000000000000000000000000000A2 -:10FE60000000000000000000000000000000000092 -:10FE70000000000000000000000000000000000082 -:10FE80000000000000000000000000000000000072 -:10FE90000000000000000000000000000000000062 -:10FEA0000000000000000000000000000000000052 -:10FEB0000000000000000000000000000000000042 +:10FC200000000000000003000000000000000000D1 +:10FC300000080000080008000000000000000009A3 +:10FC4000000300008208040004000400040900000E +:10FC50000000000020000400C000040004000000B8 +:10FC60000000004100000000000000000000000053 +:10FC7000000000080000010000000040000000003B +:10FC800000000009100484090000000000100010AA +:10FC9000004000400010000000410000001108007A +:10FCA000000004000400000000000000000000004C +:10FCB00000000000000000000082008400820000BC +:10FCC000000800000002000080008000800080002A +:10FCD0000000000002000000910000888000800009 +:10FCE00000000000000000400000000000000000D4 +:10FCF00000000000000100004000000000000002C1 +:10FD000000000000000000000000000000000500EE +:10FD100000000000000000000000000000000400DF +:10FD200000000000C1008040000200000800000048 +:10FD300008000000000000000000000000000000BB +:10FD4000000000000000000000000000001000A003 +:10FD5000909000000000000000001010840200A03D +:10FD60000040000000000200000000000000000051 +:10FD7000000000000000C000000000000341888572 +:10FD80002009828810820004000802088288008806 +:10FD900000042004908800900004900400000000FB +:10FDA00000000000000000000000010000009100C1 +:10FDB00082000000000000000000000000000000C1 +:10FDC00000000000000000000000000002000080B1 +:10FDD00041000000030000001100000091800000BD +:10FDE0000900000003000300000000000000000004 +:10FDF000000000000000400021000000000008C1D9 +:10FE00008010419080808000000000808080000091 +:10FE100000000000000020000000000000000000C2 +:10FE200000000000000000000000000011000300BE +:10FE300089008300000000000000000000000000B6 +:10FE400000000000000000000000000000000008AA +:10FE50000011000500000040008000400080800884 +:10FE600000218040000000000080000000800000B1 +:10FE70000000000000000000000000800000000002 +:10FE8000108000891091418080000090000800805F +:10FE9000000000A000008080800000A180000080A1 +:10FEA00000000000000000000000000000000080D2 +:10FEB000088005004011410900000000000000001A :10FEC0000000000000000000000000000000000032 -:10FED0000000000000000000000000000000000022 -:10FEE0000000000000000000000000000000000012 -:10FEF0000000000000000000000000000000000002 -:10FF000000000000000000000000000000000000F1 -:10FF100000000000000000000000000000000000E1 -:10FF200000000000000000000000000000000000D1 -:10FF300000000000000000000000000000000000C1 +:10FED00002011000004120040001000400010004A0 +:10FEE0000201100040030000000000200000000498 +:10FEF00000000000000000000000000000C0000042 +:10FF000000C0890204C0051185C0400002C19040B4 +:10FF100084C0040090C1908204C0080084C01020F6 +:10FF200008C00000000000000000000000400000C9 +:10FF300000040140018801010109000000000000E7 :10FF400000000000000000000000000000000000B1 -:10FF500000000000000000000000000000000000A1 -:10FF60000000000000000000000000000000000091 -:10FF70000000000000000000000000000000000081 -:10FF80000000000000000000000000000000000071 -:10FF90000000000000000000000000000000000061 -:10FFA0000000000000000000000000000000000051 -:10FFB0000000000000000000000000000000000041 +:10FF5000000010100420000240880000C0000400CF +:10FF600001001010200200020090000000000400B8 +:10FF70000000000000000000000000000001080177 +:10FF8000C0010001C1888202C105029111088210DE +:10FF9000C010021021108210C00491C0A10400887A +:10FFA000C00802080000000000000000010000007E +:10FFB000C00000000100000120010001000000005D :10FFC0000000000000000000000000000000000031 -:10FFD0000000000000000000000000000000000021 -:10FFE0000000000000000000000000000000000011 -:10FFF0000000000000000000000000000000000001 +:10FFD0000000000000800080000004000500800098 +:10FFE0008000100000008000008005000502000570 +:10FFF00080410020000000000000000000002108F7 :020000040013E7 -:1000000000000000000000000000000000000000F0 -:1000100000000000000000000000000000000000E0 -:1000200000000000000000000000000000000000D0 -:1000300000000000000000000000000000000000C0 +:10000000801080084141418380008810C1C14100B7 +:1000100080808080C180410080008080020041009B +:100020000000808080000000000000000000100040 +:100030000000000000001009004000110041000015 :1000400000000000000000000000000000000000B0 -:1000500000000000000000000000000000000000A0 -:100060000000000000000000000000000000000090 -:100070000000000000000000000000000000000080 -:100080000000000000000000000000000000000070 -:100090000000000000000000000000000000000060 +:100050000000000000000010808800008000000008 +:10006000000800000000000400080000000000403C +:100070000008000000000000000000000000000078 +:1000800000000004000000004108108000008810FB +:10009000000000000000000000038080000000005D :1000A0000000000000000000000000000000000050 -:1000B0000000000000000000000000000000000040 +:1000B000000800080000000041804008050003110E :1000C0000000000000000000000000000000000030 -:1000D0000000000000000000000000000000000020 -:1000E0000000000000000000000000000000000010 +:1000D00000000000000000000000201090900400CC +:1000E000000000000000000010014002822000001B :1000F0000000000000000000000000000000000000 -:1001000000000000000000000000000000000000EF -:1001100000000000000000000000000000000000DF -:1001200000000000000000000000000000000000CF -:1001300000000000000000000000000000000000BF -:1001400000000000000000000000000000000000AF -:10015000000000000000000000000000000000009F -:10016000000000000000000000000000000000008F -:10017000000000000000000000000000000000007F -:10018000000000000000000000000000000000006F -:10019000000000000000000000000000000000005F -:1001A000000000000000000000000000000000004F -:1001B000000000000000000000000000000000003F -:1001C000000000000000000000000000000000002F -:1001D000000000000000000000000000000000001F -:1001E000000000000000000000000000000000000F -:1001F00000000000000000000000000000000000FF -:1002000000000000000000000000000000000000EE -:1002100000000000000000000000000000000000DE -:1002200000000000000000000000000000000000CE +:10010000000000000001000000008500C1208420E4 +:10011000090104002002049010008400201008C08F +:100120008800C000C0022088C0000000000000005D +:100130000000000100010000000001880100000033 +:1001400000010000000000000000000000000000AE +:1001500000000000000000000000600000E0070058 +:100160000000880000E00700500000000042070087 +:100170000000000000000700000000000000000078 +:10018000000000000000000008008221410000E0A3 +:10019000000048420000000000004842000000004B +:1001A000000048420000000000004842000000003B +:1001B000000000000081000007000000884100E00E +:1001C0000700000000000000000000000000000028 +:1001D000000000000000000000000000303030305F +:1001E000FFC0FF000000000000000000F0F0F6F08B +:1001F000E666C000000000000000000000000000F3 +:100200000000000000000000000000000000284185 +:100210000000A0000500A005000028410000A0008B +:100220000500A00000A0220011002010040800001A :1002300000000000000000000000000000000000BE :1002400000000000000000000000000000000000AE -:10025000000000000000000000000000000000009E -:10026000000000000000000000000000000000008E -:10027000000000000000000000000000000000007E +:1002500000000000000000000000000000007630F8 +:100260007630C0C000000000000000000000000068 +:100270006600E666C000000000000000000000000C :10028000000000000000000000000000000000006E -:10029000000000000000000000000000000000005E -:1002A000000000000000000000000000000000004E +:100290000000284100A000050000A0050000284142 +:1002A00000A00005050000050022001140800201A9 :1002B000000000000000000000000000000000003E :1002C000000000000000000000000000000000002E :1002D000000000000000000000000000000000001E @@ -77896,233 +77896,233 @@ :1003300000000000000000000000000000000000BD :1003400000000000000000000000000000000000AD :10035000000000000000000000000000000000009D -:10036000000000000000000000000000000000008D -:10037000000000000000000000000000000000007D +:1003600000002F242F24666667670000000000004D +:10037000000000003C3C607C607C0000000000004D :10038000000000000000000000000000000000006D -:10039000000000000000000000000000000000005D -:1003A000000000000000000000000000000000004D -:1003B000000000000000000000000000000000003D +:100390000000000000008844010802040500000578 +:1003A000400220040000A0050088004400A00005D1 +:1003B00040200204000000000000000000000000D7 :1003C000000000000000000000000000000000002D :1003D000000000000000000000000000000000001D -:1003E000000000000000000000000000000000000D -:1003F00000000000000000000000000000000000FD +:1003E0000000000024242424000003030000000077 +:1003F00000000000000F3C3F003C003C00000000FB :1004000000000000000000000000000000000000EC -:1004100000000000000000000000000000000000DC -:1004200000000000000000000000000000000000CC -:1004300000000000000000000000000000000000BC +:100410000000000000008844000080104020A00080 +:1004200000A080011008A005000088004400A00082 +:10043000050080100108000000000000000000001E :1004400000000000000000000000000000000000AC :10045000000000000000000000000000000000009C -:10046000000000000000000000000000000000008C -:10047000000000000000000000000000000000007C -:10048000000000000000000000000000000000006C -:10049000000000000000000000000000000000005C -:1004A000000000000000000000000000000000004C -:1004B000000000000000000000000000000000003C -:1004C000000000000000000000000000000000002C +:100460000000000000000061000F800D0000056129 +:100470000A0F850D00A00061000F000D000005614E +:100480000A0E050D00A000000000000000000000A2 +:1004900005610A0E050D00A060000001800010003B +:1004A00000000000000008006000000000001000D4 +:1004B0000000000000000800000000000000000034 +:1004C00005000A28050000A005400A2D850000A0AF :1004D000000000000000000000000000000000001C :1004E000000000000000000000000000000000000C :1004F00000000000000000000000000000000000FC -:1005000000000000000000000000000000000000EB -:1005100000000000000000000000000000000000DB -:1005200000000000000000000000000000000000CB +:10050000000000003C7C7D7D000000000000000039 +:10051000000000000000FC3CFF3C003C00553C009B +:10052000AA00000000000000000000000000000021 :1005300000000000000000000000000000000000BB -:1005400000000000000000000000000000000000AB -:10055000000000000000000000000000000000009B +:1005400000000000000000000000FF3C550F303F9D +:10055000FAFA0000000000000000000000000000A7 :10056000000000000000000000000000000000008B :10057000000000000000000000000000000000007B -:10058000000000000000000000000000000000006B -:10059000000000000000000000000000000000005B -:1005A000000000000000000000000000000000004B +:100580000000000000003C7C3C7C000000000000FB +:100590000000000000000000FC3C3C3C003C00551A +:1005A0003C00AA0000000000000000000000000065 :1005B000000000000000000000000000000000003B -:1005C000000000000000000000000000000000002B -:1005D000000000000000000000000000000000001B +:1005C000000000000000000000000000003C550F8B +:1005D000303F0A0A00000000000000000000000098 :1005E000000000000000000000000000000000000B :1005F00000000000000000000000000000000000FB :1006000000000000000000000000000000000000EA -:1006100000000000000000000000000000000000DA -:1006200000000000000000000000000000000000CA +:100610000000000000000000000000000000F000EA +:10062000F0F0AA003C000000000000000000000004 :1006300000000000000000000000000000000000BA :1006400000000000000000000000000000000000AA -:10065000000000000000000000000000000000009A +:1006500000003CAAF0FF00000000000000000000C5 :10066000000000000000000000000000000000008A :10067000000000000000000000000000000000007A :10068000000000000000000000000000000000006A :10069000000000000000000000000000000000005A -:1006A000000000000000000000000000000000004A +:1006A000F0000000AA003C00000000000000000074 :1006B000000000000000000000000000000000003A :1006C000000000000000000000000000000000002A -:1006D00000000000000000000000100020000000EA -:1006E000000020002000200020000000000000008A -:1006F00000000000000088000400000084000000EA -:100700000000000000008800200000000000000041 -:100710000000000000002000000300000000200096 -:10072000C000000000000000200020000000880041 -:100730000000000000000000210000000000200078 -:100740000000000000008800880020000000200059 -:100750000000000000000000200000000000000079 -:100760000000000000000000000000000000000089 -:100770000000000000000000000000000000200059 -:100780000000000000000000000000020000000067 -:100790000000000000020002000000002000000035 -:1007A0000000000000000000000000000000000049 -:1007B0000000000000000000000020000000000019 -:1007C0000000000000000000000020000000000009 -:1007D0000000000000000000000000000000000019 -:1007E0000000000000000000000000000000000009 -:1007F00000000000000000000000000400000000F5 -:1008000000000000000000000000000002000000E6 -:1008100000000200000000000000000400000000D2 -:1008200000000000000000000000000000000000C8 -:1008300000000000000002000000000002000000B4 -:1008400000000000000000000000000000000000A8 -:100850000000000000000000000000000000000098 -:100860000000000000000008000000000008000078 -:100870000000000000000000000000000001000077 -:100880000000000000000008000000000008000058 -:100890000000000000000000000000000001000057 -:1008A0000000000000000000000800000000000838 -:1008B0000000000000000000000000000000000038 -:1008C0000000000000000000000800000000000818 -:1008D000000000080000000000840000000800087C -:1008E00000200000000000000000000000000000E8 -:1008F00000000000000000000000000000000000F8 -:1009000000000000000000000000000000000000E7 -:1009100000000000000000000000000000000000D7 -:1009200000000000000000000000000000000000C7 -:10093000000000000000000000210008000000216D -:100940000008002100000000002100000008002134 -:10095000000000080000000000210021000000212C -:10096000000800000000000000000000000000007F -:100970000000000000000000000000002100000056 -:10098000000000000800000000000000000000005F -:100990000000000000000000000004000000000053 -:1009A0000000000000000000000000000000000047 -:1009B0000000000000000000000004000000000033 -:1009C0000000000000000000000000000000000027 -:1009D0000000000000000000000000000000000017 -:1009E000000000008200820082008200820000007D -:1009F000C000040082008200820082000800000023 -:100A000082000800820082008200820082000000D2 -:100A10000000000000000000000000000000004096 -:100A200000009040000000000000040000000000F2 -:100A3000000000030000840004000000000000002B -:100A40000000C00010008200000000000000000054 -:100A50000000000000000000000000000000000096 -:100A60000000000040000000000000000000000046 +:1006D000000000003CAAF0000000C000C0000000C4 +:1006E00000000000880020000000C000000000089A +:1006F000200000000000A0020000200020001000E8 +:100700004000001000052008000420008800C00000 +:1007100020000004000420A000030400400020008A +:100720002000A000C000C000200088008800200237 +:10073000200004001000000420202000200084007D +:100740002000400020008400A000A0000000C000A5 +:100750002000C0008800C00488A000C00000000085 +:100760000000000000401000008240000000000077 +:100770000000000000020000000000001000000067 +:1007800000000000000000021082400210000090F3 +:1007900000000002000200410011000010000000F3 +:1007A0000090000020000000000040004000000019 +:1007B00000000000000040004009000100000000AF +:1007C0000000000009000000000000000008000018 +:1007D00000200020000000000001001100000000C7 +:1007E00000000000100900000009040010000000D3 +:1007F0000000000000000008100011400000000090 +:100800000040000000080000020002030000000099 +:1008100000000000000000001000210200000000A5 +:1008200000000000000000050000000000000000C3 +:1008300000000000000000000000008800820000AE +:1008400000000000000000000000020002000000A4 +:100850000000000000000000000082881004000872 +:10086000000800840084008400080082098200845B +:10087000000800820084000800848000C084008496 +:1008800000840084000800840008000800000008BC +:10089000008800900008001000848084908500008B +:1008A000008400840000009000040008008400849C +:1008B00000882082000000842040004000210411B4 +:1008C000000000020000000000000082000009009B +:1008D000000800002000000000000000002180014E +:1008E00000210021000802080008000300080000A1 +:1008F00000088421880990050021C0000000000044 +:100900000008000800000011000800050000004178 +:10091000880388058805000004080000040800001A +:100920000000001100000000000000000021004154 +:100930000002000800210000000000210021002129 +:10094000002100080021000800030003000900093D +:100950000004000000110000000000000000000082 +:10096000000000000000000000C000000000008443 +:1009700000C0000000C0000808C000000010000017 +:100980000000009000000000030000000082000052 +:10099000020000040000000000820000000080004F +:1009A00000080000000009000900090010200000F4 +:1009B000110040004000000008000500048800000D +:1009C000040004C0001040100000000000000000FF +:1009D0000004000200000800030000000000000006 +:1009E0000000000000000000000000000000000007 +:1009F00000000000000000000000080000000000EF +:100A00000000020400000000C00000000000000020 +:100A1000000000208800000000020000000000002C +:100A2000000000000000820008000000000000003C +:100A30000000000004110021C0000021000002009D +:100A4000C000000082840000820008000000000056 +:100A5000900000000820C00084000000C04010008A +:100A60000000000010C000000000000000000000B6 :100A70000000000000000000000000000000000076 -:100A80000000000000000000000000000000000066 -:100A90000000000000000000000000000000000056 -:100AA0000000000000000000000000000000000046 +:100A800000000008000900C0000000C00340000092 +:100A9000000008000000000000000000000000004E +:100AA0000000000000000000020021000000000023 :100AB0000000000000000000000000000000000036 -:100AC00000000000000080000000000000000000A6 -:100AD0000000000000000000000000000000000016 -:100AE0000000000000000000000000000000A00066 -:100AF00000000000C000080000000000001100001D -:100B000000000000000000000000000000000000E5 -:100B1000000000008200080000000000001100003A -:100B200000000000000000000002000000000000C3 -:100B300000000000000000000000000000080000AD -:100B40000400000000000008000500008200100002 -:100B50000000C000000000000000000000080000CD -:100B60000000000000000008200500000000000058 -:100B70000000000000000000000000000000000075 -:100B80000000000000000000000000000000000065 -:100B90000000000000000000000000000000000055 -:100BA0000000000000000000000000000000000045 -:100BB0000000000000000000000000000000000035 -:100BC0000000000000000000000000000000000025 -:100BD0000000000000000000000000000000000015 -:100BE0000000000000000000000080000000000085 -:100BF00000000000000008000800000000000800DD -:100C000000000000000000000000000000000000E4 -:100C100000000000000008000800000000000000C4 -:100C200000000000000000000000000000000000C4 -:100C300000000000840000000000000082000000AE -:100C4000000000000003000500000009000000088B -:100C50000000000808080000C0008200000000003A -:100C60000000000000030008000000001000000069 +:100AC000000000000000000900000000000000001D +:100AD0000000000008000000004000000840008402 +:100AE0000000000000000002000000000000000004 +:100AF0000000020040000000000200410802000067 +:100B000000000000000008210000000000000000BC +:100B100000000000000010000010000000050000B0 +:100B20000000000000200020000000000000840001 +:100B300000000000C008A0000000000000218400A8 +:100B400000000000000000000000000000000000A5 +:100B500000000800820000020000080000110000F0 +:100B60000011080008000000000000000000000064 +:100B70000000000000000000000000100000000065 +:100B8000000000020000400000000084000021007E +:100B90000000000000000800002000041100000018 +:100BA00000820000000000000000000010020008A9 +:100BB0000084001004024004000205200500090022 +:100BC00011001100051040100204000010000090F8 +:100BD00040100910040000000000000000C00004E4 +:100BE0000088210000000004000008000000000050 +:100BF00000000000000000000000200000000011C4 +:100C00000041844100080000200000100000900016 +:100C10000200020000400000000000000000000888 +:100C2000000000020000200800100000000000008A +:100C300000009000000000008400842000000000FC +:100C4000000000000021004000090000000000003A +:100C500000000000000082000800080010000000F2 +:100C6000100000000000900000000000C010000014 :100C70000000000000000000000000000000000074 :100C80000000000000000000000000000000000064 :100C90000000000000000000000000000000000054 :100CA0000000000000000000000000000000000044 -:100CB0000000000000000000020000000000000032 -:100CC00000000000000000000000000000400000E4 -:100CD00000A0000000000000000004000000000070 -:100CE0000000000000000000000000000000800084 -:100CF00000000000000000000000000000000000F4 -:100D0000000000000040000000000400000000009F -:100D100000000000000000000000000000000000D3 -:100D20000000000000400000000000000000000083 -:100D3000000000010001000100C00001000100C02E -:100D4000000500010001008800040001C00100C08E -:100D5000000000010001000100C00001000100C00E -:100D6000000500010001008800020001C00100C070 -:100D70000000000000000000000000000000000073 -:100D800000000011050000000000000080000000CD -:100D90000000000000000000000000000000000053 -:100DA000000000110500000000000000000000002D -:100DB000000000000041004100410082004100416C -:100DC000008202C1004011410000008000418041CA -:100DD00000890000004100410041008200410041C3 -:100DE000008202C1000211410000008000418041E8 -:100DF0000089000000000800000000000000000062 -:100E0000000000000200030000800000000000005D -:100E100000000003000008000000000000000000C7 -:100E2000000000000200030000800000000000003D -:100E3000000000200000410003000000008041008D -:100E4000880000000800080082000088C000C1007F -:100E5000C1000082800041000300000000804100CA -:100E60008800000008008800A00000808400C10005 -:100E7000C1000082800000000000000000000000AF -:100E80000000000000004100400800024000400057 -:100E90000000000000010000000000000000000051 -:100EA00000000000000041004082000240004000BD -:100EB000000000000000000001000100000000C070 -:100EC0000100C10000000100910040080008C100BD -:100ED0004100C1000082820001000100000000C04A -:100EE0000100C10000000100090004C00004C100AD -:100EF0004100C100008282000000000000000000EC -:100F000000000000000000000020000000000000C1 -:100F100000000000000000000000000000000000D1 -:100F200000000000000000000020000000000000A1 -:100F30000000000000000000000000C00001C0C16F -:100F400000000000000100C082080021000100C173 -:100F50000100000000010000000000C00001C0C14D -:100F600000000000000100C082080041000100C133 -:100F7000010000000001000000000000000000006F -:100F80000000000000000000000000000000000061 -:100F90000000000000000000000000000000000051 -:100FA0000000000000000000000000000000000041 -:100FB0000000000000000000000000000080004170 -:100FC00080C1000000000041008480900041004189 -:100FD00000C108000000004100090000008000413D -:100FE00080C100000000004100908090004100415D -:100FF00000C1080000000041000900000008800056 -:1010000000C10000000000000000000000410000DE -:101010000005000000000000000000000008800043 -:1010200000C10000000000000000000000410000BE -:101030000005000000000000000000000000C100EA -:10104000800080C100004102800890004100C1C1C1 -:101050008000800800004100000080004100C100C5 -:10106000800080C100004102800890004100C14121 -:101070008000800800004100000080004100000066 -:10108000200000400000000000000000000000916F -:1010900090000000000000000000000000000000C0 -:1010A000200000400000000000000000000000914F -:1010B00090000000000000000000000000000000A0 -:1010C000C1004000C0C1000001002001100001006B -:1010D000C1098200C000000001000000C000010042 -:1010E000C1004000C0C1000001002001110001004A -:1010F000C1038200C000000001000000C000010028 +:100CB0000000000000000000000000000000000034 +:100CC00000000000000000000000000000000040E4 +:100CD0000000000000000000000000000000000014 +:100CE00000000200000009000000000000000020D9 +:100CF000000000000000000000000000000000886C +:100D0000000020000082C00400000000000100007C +:100D100000000000000000010000000000000108C9 +:100D20000100C0000020C0820000C00000010000DF +:100D300000000000000000000000000000000000B3 +:100D400001100000C0000004C0820000C0000001CB +:100D50000000000000000000000000000000000192 +:100D600001100000C0000004C0820000C0000001AB +:100D70000000000000000000000400000000000966 +:100D800009000903110000800080000000000041FC +:100D90000000000000000000000200000000001140 +:100DA000208041118400000080800000800000034A +:100DB0000000000000000000000000110000000022 +:100DC000000208800009830000808080000080000D +:100DD0000003000000000000000000100000000000 +:100DE000000808800005C0000080808000008000AE +:100DF00000030000000020000000000000000900C7 +:100E0000000011001100C1000010020000000000ED +:100E1000000080080000080000000000000004003E +:100E2000000040001000108000000300800000005F +:100E300000808002000000000800000000000000A8 +:100E40000800000009000300850000100300800076 +:100E5000000000A080410000080000000000000029 +:100E600008000000100003000500000003008000DF +:100E7000000000A080410000000000000000000011 +:100E8000000000000000100020020001010002002C +:100E900000000000C0010000010000000000000090 +:100EA0000100000001009000030800000100100094 +:100EB000000000C0820100000000000000000000EF +:100EC000000001000000000090004004000001004C +:100ED00040000000008282010000000000000000CD +:100EE0000000010000000000900020C00000010090 +:100EF00040000000008282010000000000000000AD +:100F000000000000000104010002000001000000D8 +:100F100000000000000100000000000000000000D0 +:100F200000000000000105000088000091000000A2 +:100F300000000000000000000000000000000000B1 +:100F4000000000000000000102000082000001001B +:100F50000100000000000000000000000000000090 +:100F60000000000000000001080000A000000100D7 +:100F70000000000000000000000000000000000071 +:100F8000000000000000004000400080000002005F +:100F90000900000000000041000000000000000007 +:100FA0000000000000000005824000000000410039 +:100FB00000000000000000410000000000000000F0 +:100FC0000000000000000000000800100080000089 +:100FD000410010000000000000410000000000007F +:100FE00000000000000000000010001000000000E1 +:100FF00041000000000000000041000000208000CF +:1010000000C1000000040000410000000041800019 +:101010000008000000000000000010A00008800090 +:1010200000C1000000008000050000000091800069 +:10103000000800000041000000000420000000083B +:10104000800000C100000002000084100000004188 +:10105000800000080000004100080000081000089F +:10106000800000C100000011000088000000004165 +:10107000000000030000004100050000038800009C +:101080002000004000000000C0000400000000112B +:1010900082000001000000000000000001040001C7 +:1010A000200000400000000004008200000000401A +:1010B0002000000000000001000000000188000086 +:1010C000000020000040000000000200400100007D +:1010D000000982000000000000010000000001097A +:1010E00000002000004000000000880040000000D8 +:1010F0000009200000000000000100000000008343 :1011000000000000000000000000000000000000DF -:10111000810000E000004800000000000000000026 +:10111000811200E00700480000000000000000000D :1011200000000000000000000000000000000000BF -:10113000810000E000004800000000000000000006 -:10114000000000000000000000420000000000005D -:101150000000811200880700480000000000000025 -:1011600042000000000000000042000000000000FB -:101170000000811200880700480000000000000005 -:10118000420000000000000000000000000000001D +:10113000881200E0400048420000000000004842E1 +:10114000000000000000000000000000000000009F +:101150000000811200E0040048420000000000008E +:1011600048810000000000000000000000000000B6 +:101170000000811200E0080048420000000000006A +:10118000480A00000000000000000000000000000D :10119000000000000000000000000000000000004F :1011A000000000000000000000000000000000003F :1011B000000000000000000000000000000000002F @@ -78138,250 +78138,250 @@ :10125000000000000000000000000000000000008E :10126000000000000000000000000000000000007E :10127000000000000000000000000000000000006E -:10128000000000000000747B00000000000000006F +:10128000000000000000757B00000000000000006E :10129000000000000000000000000000000000004E -:1012A00000000000DE2E747B000000000000000043 +:1012A00000000000DEAE757B0000000000000000C2 :1012B000000000000000000000000000000000002E -:1012C00000000000DE2E0000757B00000000000022 +:1012C00000000000DEAE0000757B000000000000A2 :1012D000000000000000000000000000000000000E :1012E000000000000000DEAE757B00000000000082 :1012F00000000000000000000000000000000000EE -:10130000000000000000DEAE615603400000000057 +:10130000000000000000DEAE612603400000000087 :1013100000000230A0000000000000000C400000AF -:101320000000000002C06A86615603400000000011 +:101320000000000002C06486612603400000000047 :1013300000000230A0000000000000000C4000008F -:101340000000000002C06A86000060C603000000C2 -:10135000000000000031E0000000000000000C0070 -:1013600000000000000000C0630660C6030000002B -:10137000000000000031E0000000000000000C0050 -:1013800000000000000000C06306200000002000F4 -:1013900000002000000000040000200020002000C9 -:1013A0000004000000000000000004000000200015 -:1013B00000000000000000000000000000004004E9 -:1013C00000040000000000000000000220000000F7 -:1013D000000000000000000000000000000000000D -:1013E00000000000000000000000000020800080DD -:1013F00000800080000000000000000000000000ED -:10140000000000000000000000000000400040005C -:1014100000002000000000000002000200000000A8 -:101420000000000020020002400200022000000034 -:101430000000000000000000400000000004000464 -:10144000000000000000000000000000000000009C -:10145000000000000000000000000000000000008C -:10146000000000000000100040000000000000200C -:10147000002000200020000000004000000040008C -:10148000000000000000000000000000000000005C -:10149000000000000000000000000000000000004C -:1014A000000000000000000000000000000000003C -:1014B00000000000000000000000001000102000EC -:1014C00000002000000000000000000008000000F4 -:1014D00000000000000000001040004000400040FC -:1014E00000000000000002000000000000002000DA -:1014F00001000100040002000100000000000000E3 -:1015000000000000000002000000000000000000D9 -:1015100000000000000000000000000000000000CB -:1015200000000000000000000000000000000000BB -:1015300000000000000000000000000000000000AB -:101540000000000000000000000004000000000097 -:10155000000000000000000000000000000000008B -:10156000000000000000000000000000000000007B -:1015700080000200020080008000040800080008CB -:10158000000800080000000800080000000000003B -:10159000000000000000000000000000000000004B -:1015A000000000000000000000000000000000003B -:1015B000000000000000000000000000000000002B -:1015C000000000000000000000000000000000001B -:1015D00000000000000000000000000000001000FB -:1015E00010000000000000000000000000000000EB -:1015F00000000000000000000000000800000000E3 -:1016000000000000000000000000000000000000DA -:1016100000000000000000000000000008000000C2 -:1016200000000000000000000000000000000000BA -:1016300000000000000000000000000008000000A2 -:101640000000000000000000000041000000000059 -:10165000000020000000000000000000000020004A -:10166000000000000000000000000008000800006A -:10167000000000000000000000000000000000006A -:101680002100000000000000000000A00008000091 -:10169000000000000000000000000000000000004A +:101340000000000002C06486000061260340000027 +:10135000000000000230A0000000000000000C406F +:1013600000000000000002C0648661260340000007 +:10137000000000000230A0000000000000000C404F +:1013800000000000000002C06486001000000000A1 +:101390000210000200021000100000020005000010 +:1013A00040004002C00000001004000500000000E2 +:1013B0002004A000A0001005200040004000100004 +:1013C000200000004000400020000003000000005A +:1013D00000000000200088002000200020002041A4 +:1013E0002000880400002000200020024000880027 +:1013F00000000400040020000400A00040001000D1 +:1014000084001000400010001000200000000000C8 +:10141000000010000000000000000000000040007C +:10142000000209000000000040000000000200006F +:101430000000000000004000000040000004000028 +:1014400040020002400200000002000000004000D4 +:10145000080811002000000000000000000000004B +:10146000000040002000400200000090000000004A +:1014700000000002000020000000400020002100C9 +:10148000200000000000104020204002000000006A +:1014900000000000000082000000000000000000CA +:1014A000000000000000040004000400040000002C +:1014B0000000080000000000000000000000000024 +:1014C0000000040004000000000000000000000014 +:1014D00000000000000000002100210005100500B0 +:1014E00001000100200020000000000002000000B8 +:1014F0000000000000000200000000000200900058 +:1015000008000080000040090200024100000200C3 +:101510000084000800080084000800080004000897 +:101520000008001000880088800080848000808887 +:10153000000800840084000000080008000400087F +:10154000000204020000000000000000000000048F +:101550000000009000080000000084088408A0003B +:10156000A008200020008000820000000000000091 +:101570000000000000020000000000900084000055 +:10158000009080000040000080000000000000404B +:10159000000000000000000000000000000800083B +:1015A0000100004000088800001000000000040254 +:1015B0000000000000080200900000000020400031 +:1015C00000000011000940110000000000000003AD +:1015D00000000000000000000400000002001000F5 +:1015E000000000000000400040000000000000007B +:1015F0000000C000000000000000400004000000E7 +:1016000008000000000000001000000000000020A2 +:10161000C0008400000000A00000000000000401E1 +:1016200000004000000000000082008808820000E6 +:101630000040000000040000000000000000000066 +:101640000900110000000000000000040800000074 +:10165000400000000000000040000900400004209D +:10166000000010001100042000000890001000008D +:10167000002000000000000000000000000000004A +:1016800021002182000011000082082000200000BB +:101690000000000000000000000000000800000042 :1016A000000000000000000000000000000000003A :1016B000000000000000000000000000000000002A :1016C000000000000000000000000000000000001A -:1016D0000000000000000000000400000000000006 -:1016E00000000000000000000000000008000000F2 -:1016F00000000000000000000000000000000100E9 -:1017000000000000000000000000000000000000D9 -:1017100000000000000000000000000000000000C9 -:1017200000001000000000000000000000000000A9 -:1017300000000000000000000000000000000000A9 -:101740000000000000000000000000000000000099 -:101750000000000000000000000000000000000089 -:101760000000000000000000110000000000000068 +:1016D00008000000000000000200020002001000EC +:1016E00000000000000000000000A0008400004195 +:1016F000001100000008000000000000000084004D +:101700000041000008410000080000000005080436 +:1017100000110000000000000000000000000000B8 +:1017200000000000000000000800000000000000B1 +:1017300000000000000000080000000000000000A1 +:10174000000000000800400000000000000200004F +:101750000000000000000020000000000000000069 +:101760000000000000000000000000000008000071 :101770000000000000000000000000000000000069 -:10178000040000000000000000000000000000084D -:101790000000000000000000000000000000000049 -:1017A0000000000000000000000000000000000039 -:1017B0000000000000000000000000000000000029 -:1017C0000000A00000000000000000000000000079 -:1017D0000000000000000000000000000000000009 -:1017E0000000000000000000A00000000000C00099 -:1017F00000000000C0000000000000000000000029 -:1018000000000000000000000000000000000000D8 -:1018100000000000000000000000000000000000C8 -:1018200000000000000000000000000008000800A8 -:1018300008000000000000000000000000000000A0 -:101840000000000000000000000000000800080088 -:101850000800000000000000000000000000000080 -:101860000000000000000008000800080008000850 -:101870000000000009A000000000000000000000BF -:10188000000000000000000800081108000800081F -:101890000000000000A000000000000000000000A8 +:101780000000000000000000000000000200000057 +:101790000000000000000000000000000000C00089 +:1017A00000000000000000000000000000008800B1 +:1017B00000000000004000000000000000000000E9 +:1017C0000004000000000000000000000000000015 +:1017D00000000000000000000000000000000011F8 +:1017E0000000000000000000400000009000000029 +:1017F00000000000000000000400000000000000E5 +:1018000000000000000008000000000000000003CD +:101810000000088000200000080088000000000090 +:1018200000000000001000000000000000000200A6 +:101830000000009000000001000000880400000883 +:1018400000002100000000000000110011000988C4 +:1018500000000900009000000000000000000200ED +:1018600004000200000000080008082000084000F2 +:1018700000000504032000900004000000000000A8 +:10188000400040001000000409A00004008800008F +:101890000400008488100004000000000900000813 :1018A0000000000000000000000000000000000038 -:1018B0000000000000000000000000000000080020 +:1018B0000000000000000000000000000800000020 :1018C0000000000000000000000000000000000018 :1018D0000000000000000000000000000000000008 -:1018E00000000000080000000000000000000000F0 -:1018F00000000000000000000000000000000000E8 -:10190000000088000000000000000000000000004F -:1019100000000000000000000000000000000000C7 -:101920000000000000000000200000000000000097 -:1019300000000000000000000000000000000000A7 -:101940000000000000000000000000000000000097 -:101950000000000000000000000000000000000087 -:101960000000000020000000000000000000000057 +:1018E0002000200020002000400008000000000030 +:1018F00000000000002000000000000000000000C8 +:101900000000C00082000000000000000000000095 +:101910000000000000000000000000008202000043 +:1019200000000000000000000000000000000000B7 +:101930000000000000000000000000000000800027 +:101940000000000000000000000000000000000295 +:101950000000000000020000000000200020000045 +:10196000000000000000000008000000000000006F :101970000000000000000000000000000000000067 :101980000000000000000000000000000000000057 -:101990000000000000000000000000000000000047 -:1019A0000000000000000000000000000000000037 +:101990000000110000000200020000000000000032 +:1019A0000000000000000000000000000000200017 :1019B0000000000000000000000000000000000027 :1019C0000000000000000000000000000000000017 :1019D0000000000000000000000000000000000007 -:1019E00000000000000000000000000000000000F7 +:1019E00000000000000000000000000001000000F6 :1019F00000000000000000000000000000000000E7 -:101A00000000000000000090000000000000000046 -:101A100000000000000000000000000000000000C6 -:101A200000000000000000000000000000000000B6 +:101A000000000000000000000000000000000000D6 +:101A10000000000001000100840000000000000040 +:101A20000000000000000000000000000000200096 :101A300000000000000000000000000000000000A6 :101A40000000000000000000000000000000000096 :101A50000000000000000000000000000000000086 -:101A60000000000000000000000000000000000076 -:101A70000000000000000000000000000000000066 -:101A800000000000000000000080000000000000D6 -:101A90000000000000000000000000000000000046 +:101A60000000000000000000000000000000020074 +:101A700000004100000005000000410000000000DF +:101A80000000000000000000000000000000000056 +:101A90000000000000001000030000000000000033 :101AA0000000000000000000000000000000000036 :101AB0000000000000000000000000000000000026 -:101AC0000000000000000000000000000000000016 +:101AC0000000000080000000000000000000000096 :101AD0000000000000000000000000000000000006 :101AE00000000000000000000000000000000000F6 -:101AF00000000000000000000000000000000000E6 -:101B00000000000000000000000000000000008055 -:101B100000000000000000000000000000000000C5 +:101AF000000400800005008000400000004000005D +:101B000000000000000000000000000000000000D5 +:101B10000000000000000000800000210000000024 :101B200000000000000000000000000000000000B5 :101B300000000000000000000000000000000000A5 -:101B40000000000000000000000000000000000095 +:101B4000080008840800C0840000000000000000B5 :101B50000000000000000000000000000000000085 :101B60000000000000000000000000000000000075 -:101B70000000000000000000000000000000000065 -:101B80000000000000000000000000000020000035 -:101B90000002000000000000000000000000000043 -:101BA0000000000000000000000000000000000035 -:101BB0000000000000000000000000000000000025 -:101BC0000000000000000000000000000000000015 +:101B7000000000010004000000040000000000005C +:101B80000000000000000000000000000000000055 +:101B90000000000000000000000002000200888435 +:101BA000081000000000000000000000000000001D +:101BB0000000000000010000000100000000000023 +:101BC0000000000000000400000000000000000011 :101BD0000000000000000000000000000000000005 :101BE00000000000000000000000000000000000F5 -:101BF00000000000000000000000000000000000E5 -:101C00000000000000000000000001000090000043 -:101C10004000000001000000000000000000000083 -:101C200000000000000000000000000000000000B4 -:101C300000000000000000000000000000000000A4 -:101C40000000000000000000000000000000000094 +:101BF000000000000000820008000100000040001A +:101C000000000100000000000000000000000000D3 +:101C100000000000000000000000000000000000C4 +:101C2000A000000000000000000000000000000014 +:101C30000000000000030008000200410000000056 +:101C40000000000004000000000000000000000090 :101C50000000000000000000000000000000000084 :101C60000000000000000000000000000000000074 -:101C70000000000000000000000000000000000064 -:101C80000000000000000000000000004000208074 -:101C90000000000000002000000000000000000024 -:101CA0000000000000000000000000000000000034 +:101C700000000000000005000000800004000000DB +:101C80000000000004000000000000000000000050 +:101C9000000000000000000000000000000000083C +:101CA0000041002000400000000000000000000093 :101CB0000000000000000000000000000000000024 -:101CC0000000000000000000000000000000000014 +:101CC00000000000000000040021000000000000EF :101CD0000000000000000000000000000000000004 :101CE00000000000000000000000000000000000F4 -:101CF00000000000000000000000000000000000E4 +:101CF00000000000000000000002002100000000C1 :101D000000000000000000000000000000000000D3 :101D100000000000000000000000000000000000C3 -:101D200000000000000000000000000000000000B3 +:101D20008000000000000000000000000000000033 :101D300000000000000000000000000000000000A3 -:101D40000000000000000000000000000000000093 +:101D400000000000000000000001008800100000FA :101D50000000000000000000000000000000000083 :101D60000000000000000000000000000000000073 -:101D70000000000000000000000000000000000063 +:101D70000000000000000000000000010000000062 :101D80000000000000000000000000000000000053 -:101D900000000000000000880000000000000000BB -:101DA0000000000000000000000000000000000033 +:101D90000000000000000000000000000000000043 +:101DA0000000400008901088900000000000000033 :101DB0000000000000000000000000000000000023 -:101DC0000000000000000000000000000000000013 +:101DC0000000000000000000000000060000070006 :101DD0000000000000000000000000000000000003 :101DE00000000000000000000000000000000000F3 -:101DF00000000000000000000000000000000000E3 -:101E0000000000000000000000000000000000E0F2 -:101E100000000000000000000700000000000000BB -:101E200007000000000000000000000000000000AB +:101DF000000000000000000000000000418200E040 +:101E000007000000600000E000000000000000008B +:101E100000000000000000000000000000000000C2 +:101E200000000000000000000000000000000000B2 :101E300000000000000000000000000000000000A2 :101E40000000000000000000000000000000000092 :101E50000000000000000000000000000000000082 :101E60000000000000000000000000000000000072 :101E70000000000000000000000000000000000062 :101E80000000000000000000000000000000000052 -:101E9000000000000000000000003C3C00000000CA -:101EA0000000000000000000000000000000000032 +:101E90000000000000000000000000000000000042 +:101EA000000000000000F0AAF0AA000000000000FE :101EB0000000000000000000000000000000000022 :101EC0000000000000000000000000000000000012 :101ED0000000000000000000000000000000000002 :101EE00000000000000000000000000000000000F2 :101EF00000000000000000000000000000000000E2 :101F000000000000000000000000000000000000D1 -:101F10000000000000000000000000003C3C000049 -:101F200000000000000000000000000000000000B1 +:101F100000000000000000000000000000000000C1 +:101F200000000000000000003C003CFF000000003A :101F300000000000000000000000000000000000A1 :101F40000000000000000000000000000000000091 -:101F50000000000000000000000000000000000081 +:101F50000000000075555D55000000000000000005 :101F60000000000000000000000000000000000071 :101F70000000000000000000000000000000000061 :101F80000000000000000000000000000000000051 -:101F9000000000000000000000000000FF00000042 -:101FA000FFFF000000000000000000000000000033 +:101F90000000000000000000000000000000000041 +:101FA0000000000000000000000000000000000031 :101FB0000000000000000000000000000000000021 :101FC0000000000000000000000000000000000011 -:101FD0000000000000000000000000000000000001 +:101FD00000000000000030000C00000000000000C5 :101FE00000000000000000000000000000000000F1 :101FF00000000000000000000000000000000000E1 :1020000000000000000000000000000000000000D0 -:102010000000000000000000000000000000FF00C1 +:1020100000000000000000000000000000000000C0 :1020200000000000000000000000000000000000B0 -:1020300000000000000000000000000000000000A0 -:102040000000000000000000000000000000000090 -:102050000000000000000000000000000000000080 +:102030000040000000000000000000000000000060 +:102040000000000000610006000D0000000000001C +:102050000000000005000A28050000A5000000009F :102060000000000000000000000000000000000070 :102070000000000000000000000000000000000060 -:102080000000000000000000000000000000000050 -:1020900000000000000000610006000D00000518AF -:1020A0002A00054005A8050000000000000000000F -:1020B0000000000000000000000000000000000020 -:1020C0000000000000000000000000000000000010 +:1020800000000000000005610A2F850D00A000611E +:102090000007800D000000000000000000000000AC +:1020A00000000000000000000000000000000061CF +:1020B0000006000D0001000000000000000000000C +:1020C0000000000000000000000028F882F200007C :1020D0000000000000000000000000000000000000 :1020E00000000000000000000000000000000000F0 :1020F00000000000000000000000000000000000E0 :1021000000000000000000000000000000000000CF :1021100000000000000000000000000000000000BF :1021200000000000000000000000000000000000AF -:10213000000000000000000000000000000000009F -:10214000000000000000000000000000000000008F +:10213000000000003CE8FFE8000000000000000094 +:1021400000000000000000000000000000F000F0AF :10215000000000000000000000000000000000007F :10216000000000000000000000000000000000006F :10217000000000000000000000000000000000005F :10218000000000000000000000000000000000004F :10219000000000000000000000000000000000003F :1021A000000000000000000000000000000000002F -:1021B000000000000000000000000000000000001F +:1021B00000000000000000E8C3E80000000000008C :1021C000000000000000000000000000000000000F :1021D00000000000000000000000000000000000FF :1021E00000000000000000000000000000000000EF @@ -78398,181 +78398,181 @@ :10229000000000000000000000000000000000003E :1022A000000000000000000000000000000000002E :1022B000000000000000000000000000000000001E -:1022C0000000000000000000A0000000000000006E -:1022D000200000002000000000000000000020009E -:1022E00000000000000000000000000000000000EE -:1022F000200000002000000000000000000000009E -:1023000000000000000000020000000000000000CB -:1023100000000000000000000000000000001000AD -:1023200000000000000000000000000000000000AD -:10233000000000000000000000000000400000005D -:10234000000000000000000000000000000000008D -:10235000000000000000000000000000000000007D -:10236000000000000000000000000000000000006D -:102370000000000000000000000200020002000255 -:102380000002000200020002000000000000000045 -:10239000000000000000000000000000000021001C -:1023A000000000000000000000000000000000002D -:1023B000000000000000000000000000000000001D -:1023C000000000000000000000000000000000000D -:1023D00000000000000000000800000000000000F5 -:1023E00000000000000000000200020002000200E5 -:1023F00002000000000000000800000000000000D3 -:1024000000000200020002000000000000000000C6 -:102410000000020000000000820000000200000036 -:1024200000000400000000000200000000000000A6 -:10243000000000000000000000000000000000009C -:10244000000000000000000000000000000000008C -:10245000000000000000000000000000000000007C -:10246000000000000000000000000000000000006C -:10247000000000004000000000000000000000001C -:102480000000000000000000000003000000000049 -:10249000000000000000000000000000000000003C -:1024A00000000000800000000000000000000000AC -:1024B000000000000000000000000000000000001C -:1024C000000000000000000000000000000000000C -:1024D00040000000000000000000000000000000BC -:1024E00010000000000000000000000000000000DC -:1024F00008000000000000000000000000000000D4 -:1025000000000000000000000000000000000000CB -:1025100000000000000000000000000000000000BB -:102520000000040040000400000000000000000063 -:10253000000000000000000000000000000000009B -:102540000000000000000800000000000000000083 -:10255000000000000000000000000000000000007B -:10256000000000000000000000000000000000006B -:10257000000000000000000000000000000000005B +:1022C00000000000000020000000200020000005A9 +:1022D00000100000A00002004000000202808410F4 +:1022E0000000000000004000000000002000C000CE +:1022F000000000002000010020000000000041005C +:102300000000001101000003000440000000200054 +:10231000208040092080200040002000C0000000F4 +:102320004102000000001000000004000000200036 +:102330008800002000000000400020000000000095 +:10234000200000000000000040000000000000002D +:1023500000000000000000000000800000010002FA +:102360004000000000C00400200000000000000247 +:10237000000400020002089020001000000000028B +:1023800020020000000020C0000020C1000000006A +:10239000000000081000C10800001000000000004C +:1023A000009040010090000040000000400000004C +:1023B00000000400000000000400200000000000F5 +:1023C00000004000000000000400000000000000C9 +:1023D00000000000000000000000020000000000FB +:1023E00001000000000002000000000000400000AA +:1023F00000000000000090000800C0000100200064 +:102400002000000000000100000000001000100487 +:1024100011002088000000000800080020002000B3 +:10242000200008040000000000000200000000007E +:1024300000000000000000000800821004000400FA +:102440000400040000000000020000000000000082 +:102450000000000000080000000004100000000060 +:102460000010108800840000000000100000000030 +:1024700000820000000400000000040000022000B0 +:102480008000850000100000200000000000800097 +:102490008001A000802100000000000000008000FA +:1024A00080008000800100000000000003000000A8 +:1024B000000000000000000000000000000080009C +:1024C0008000800080000000000000000000880004 +:1024D000000000000000000000009000000000006C +:1024E0000000000000000008000040009000000014 +:1024F00000000000000000110000000000000000CB +:1025000040000000900000000000000000000000FB +:10251000000010000000C000900040802000040077 +:10252000C000A0000000C0000000100004008200F5 +:10253000900008210400002100000000000040007D +:102540004000A0100800001000200000C0000000A3 +:10255000000040900508000000000000000000009E +:10256000000040000000000000000000000000002B +:102570000000000000020000000000000000000059 :10258000000000000000000000000000000000004B -:10259000000000000000002000000000000000001B -:1025A00000040000000000000000410041000000A5 -:1025B000000000000000000000000000000000001B -:1025C000000000000000000000000000000000000B +:10259000000000000000000000000000000804002F +:1025A000000000000000000000000000000000002B +:1025B00004000000000000000000000000004000D7 +:1025C00000000000000000004100000000000008C2 :1025D00000000000000000000000000000000000FB -:1025E00000000000000000000000000000000000EB -:1025F00000000000000000000000000000000000DB -:1026000000000000000000000000000000000000CA -:1026100000000000000000000000000000000000BA -:1026200000000000000000000000000000000000AA +:1025E00000400000000000000002000000000000A9 +:1025F00000040000100008000000000010000000AF +:10260000000408800000400508410000820000111D +:10261000000000000080000000000000100000002A +:102620000000102000000000000000000800000072 :10263000000000000000000000000000000000009A -:10264000000000000000000000000000000000008A -:10265000000000000000000000000000000000007A -:10266000000000000000000000000000000000006A -:10267000000000000000000000000000000000005A -:10268000000000000000000000000000000000004A -:1026900000000000000000880000000000000000B2 -:1026A000000000000000000000000000000000002A +:10264000000000000000A0000800000000000000E2 +:102650000000000000000000080000000000000072 +:102660000000000000000000000000010000000069 +:1026700000000000000000000000000000900000CA +:1026800000C000000020000020000000000000004A +:1026900021000900000000200000000000000000F0 +:1026A00000000000800000000000000000000000AA :1026B000000000000000000000000000000000001A -:1026C000000000000000000000000000000000000A -:1026D00000000000000000000000000000000000FA -:1026E00000000000000000000000000000000000EA -:1026F00000000000000000000000000000000000DA -:1027000000000000000000000000000000000000C9 -:1027100000000000000000000000000000000000B9 -:1027200000000000000008000000A000C000000041 -:102730000000000000000000000000000000000099 -:102740000000000000000000000000000000000089 -:102750000000000000000000000000000000000079 -:102760000000000000000000000000000000000069 -:102770000000000000000000000000000000000059 -:102780000000000000000000000000000000000049 -:102790000000000000000000000000000000000039 -:1027A0000000000000000000000000000000040025 -:1027B0000000000000000000000000000000000019 -:1027C00000840000000000C00000000000000000C5 -:1027D00000000000000000000000000000000000F9 +:1026C0000000000000080000000000000000000002 +:1026D00000000000000800000000000000000000F2 +:1026E00000000000000000000000000300000000E7 +:1026F000002000200000000000000000000090000A +:102700000000000000000000100000200000080091 +:10271000040000110000000000000000900088008C +:1027200090802020002000A0000000110000040084 +:102730000004000000000000000000000000000095 +:102740000800000000000000000000000000A000E1 +:1027500040000000A0000000000000000000000099 +:102760000000000000040000000809000000000054 +:102770000090000000882000000000000000000819 +:1027800000900200000000020400000009050000A3 +:1027900041000000000000000000000009000000EF +:1027A0000000000480010083000500000000050017 +:1027B0000000030000000000000000000000000016 +:1027C000000020A00000000000000000080000043D +:1027D00004040000000004000800000000000000E5 :1027E00000000000000000000000000000000000E9 :1027F00000000000000000000000000000000000D9 -:1028000000000000000000000000000000000000C8 -:1028100000000000000000000000000000000000B8 -:1028200000000000000008000000000000000000A0 +:1028000000000000000000000000000082008200C4 +:10281000000004000100002000110000C0000000C2 +:102820000000000000201041000000000000000037 :102830000000000000000000000000000000000098 -:102840000000000000000000000000020000000086 -:102850000000000000000000000000000000000078 -:102860000000000000000000000011000000000255 +:102840000000000002000800000008000000000076 +:10285000080000000000000200000000000000006E +:102860000000000000000000000000000000000068 :102870000000000000000000000000000000000058 -:102880000000000000000000000000000000000048 -:1028900000000000080020000000200000000000F0 -:1028A0000000000000000000000000000200000026 -:1028B0000000000005000000000000000000000013 +:102880000000000000000000000002000000000046 +:102890000000100080002000000100000000210066 +:1028A00000000000000000010000000000400000E7 +:1028B0000000000000000000000000000000000018 :1028C0000000000000000000000000000000000008 -:1028D00000000000000000000000000000000000F8 +:1028D0000800080020880000000000002000000020 :1028E00000000000000000000000000000000000E8 -:1028F00000000000000000000000000000000000D8 +:1028F0000100900000000000000000000000000047 :1029000000000000000000000000000000000000C7 -:1029100000000000000000000000000000000000B7 -:1029200000000000000000000000000000000000A7 +:1029100090900084C0049008909000900090000077 +:102920000001910083000000000100000000000091 :102930000000000000000000000000000000000097 :102940000000000000000000000000000000000087 :102950000000000000000000000000000000000077 :102960000000000000000000000000000000000067 -:102970000000000000000000000000000000000057 +:102970000000030000000000000000000000000054 :102980000000000000000000000000000000000047 -:102990000000000000000000000000000000000037 -:1029A0000000000000000000000000000000000027 -:1029B0000000000000000000000000000000000017 -:1029C0000000000000000000000000000000000007 +:1029900011008000200000002000800020000000C6 +:1029A000000009418921A0100040004120081003C7 +:1029B00000000000000010000000002000080008D7 +:1029C00000200000000000000000000000000000E7 :1029D00000000000000000000000000000000000F7 :1029E00000000000000000000000000000000000E7 -:1029F00000000000000000000000000000000000D7 +:1029F000000011002100080010800000000000000D :102A000000000000000000000000000000000000C6 -:102A100000000000000000000000000000000000B6 -:102A200000000000000000000000000000000000A6 -:102A30000000000000000000000000000000000096 +:102A10000000000800100041008000100021008824 +:102A2000008000000880110010114189100008008A +:102A30000800410000040000000400000000000045 :102A40000000000000000000000000000000000086 -:102A50000000000000000000000000000000000076 +:102A50000000000000000080000000800000000076 :102A60000000000000000000000000000000000066 -:102A70000000000000000000000000000000000056 +:102A700000000000000801000000018800000000C4 :102A80000000000000000000000000000000000046 -:102A90000000000000000000000000000000000036 -:102AA0000000000000000000000000000000000026 -:102AB0000000000000000000000000000082000094 +:102A9000000000002001900100008290880090005A +:102AA000000420900000014000200001010300000C +:102AB000004001000184200190000001000000009E :102AC0000000000000000000000000000000000006 -:102AD00000000000000000000000000000000000F6 +:102AD00000000000000000000008000000C000002E :102AE00000000000000000000000000000000000E6 -:102AF00000000000000000000000000000000000D6 +:102AF00000000000000000000000000000010000D5 :102B000000000000000000000000000000000000C5 -:102B100000000000000000000000000000000000B5 -:102B200000000000000000000000000000000000A5 -:102B30000000000000000000000000000000000095 +:102B10000000000000000808C090000211102020F2 +:102B2000C09000C0019000000000010041010001C0 +:102B30000000000021000001000002002000000051 :102B40000000000000000000000000000000000085 -:102B50000000000000000000000000000000000075 +:102B50000000000000000000000000004000000035 :102B60000000000000000000000000000000000065 -:102B70000000000000000000000000000000000055 +:102B70000000000000000000000800080011001024 :102B80000000000000000000000000000000000045 -:102B90000000000000000000000000000000000035 -:102BA0000000000000000000000000000000000025 -:102BB0000000000000000000000000000000000015 -:102BC0000000000000000000000000000000000005 -:102BD00000000000000000000000000000000000F5 +:102B90000000000000000000000080000080C180F4 +:102BA00000008000000041000000204011100911C9 +:102BB000004105080000100800410000000000006E +:102BC00002000000030020000000000000000000E0 +:102BD0000000000000000000000005000000800070 :102BE00000000000000000000000000000000000E5 -:102BF00000000000000000000000000000000000D5 -:102C000000000000000000000000000000000000C4 -:102C100000000000000000000000000000000000B4 -:102C200000000000000000000000000000000000A4 -:102C30000000000000000000000000000000000094 +:102BF000000000000000000000004100080000008C +:102C000011080000000000000000000000000000AB +:102C1000000000000000000000000008002000800C +:102C200080000000802000000000000041801009AA +:102C30001100111141082104080008000000008063 :102C40000000000000000000000000000000000084 -:102C50000000000000000000000000000000000074 +:102C50000000000000000000000000000020000252 :102C60000000000000000000000000000000000064 -:102C70000000000000000000000000000000000054 -:102C80000000000000000000000000000000000044 -:102C90000000000000000000000000000000000034 -:102CA0000000000000000000000000000000000024 -:102CB0000000000000000000000000000000000014 -:102CC0000000000000000000000000000000000004 -:102CD00000000000000000000000000000000000F4 +:102C7000000000000000000000000000010801004A +:102C80000000000100000000000000000000000043 +:102C9000000000000000000000000000080088881C +:102CA00090400800900004109090000000000188FF +:102CB0000000000000010100000001000100000010 +:102CC00000100020000000000000000000000000D4 +:102CD00000000000000000000000000000000001F3 :102CE00000000000000000000000000000000000E4 :102CF00000000000000000000000000000000000D4 :102D000000000000000000000000000000000000C3 :102D100000000000000000000000000000000000B3 -:102D200000000000000000000000000000000000A3 -:102D30000000000000000000000000000000000093 -:102D4000000000000700000000000000000000007C +:102D200000E007008241000000E00700824100004F +:102D3000418200E007000000600600E0070000009C +:102D4000840000E00000000000000000000000001F :102D50000000000000000000000000000000000073 -:102D60000000000000000000000000000000000063 +:102D6000008200000700000A0000000000000000D0 :102D70000000000000000000000000000000000053 :102D80000000000000000000000000000000000043 :102D90000000000000000000000000000000000033 -:102DA0000000000000000000000000000000000023 +:102DA000F000FC3CFFFFC000F000F6666E660C0011 :102DB0000000000000000000000000000000000013 :102DC0000000000000000000000000000000000003 :102DD00000000000000000000000000000000000F3 @@ -78580,8 +78580,8 @@ :102DF00000000000000000000000000000000000D3 :102E000000000000000000000000000000000000C2 :102E100000000000000000000000000000000000B2 -:102E200000000000000000000000000000000000A2 -:102E30000000000000000000000000000000000092 +:102E20000000F000F000C000C000F000F0006E668E +:102E30000C00000000000000000000000000000086 :102E40000000000000000000000000000000000082 :102E50000000000000000000000000000000000072 :102E60000000000000000000000000000000000062 @@ -78596,369 +78596,369 @@ :102EF00000000000000000000000000000000000D2 :102F000000000000000000000000000000000000C1 :102F100000000000000000000000000000000000B1 -:102F200000000000000000000000000000000000A1 -:102F30000000000000000000000000000000000091 -:102F40000000000000000000000000000000000081 +:102F200000000000000024242424242424240F0072 +:102F30003F3C66667676000000000000000000005E +:102F40000000000000000000000000006E6E6E6EC9 :102F50000000000000000000000000000000000071 :102F60000000000000000000000000000000000061 :102F70000000000000000000000000000000000051 :102F80000000000000000000000000000000000041 :102F90000000000000000000000000000000000031 -:102FA0000000000000000000000000000000000021 -:102FB0000000000000000000000000000000000011 -:102FC0000000000000000000000000000000000001 -:102FD00000000000000000000000000000000000F1 +:102FA0000000000000000000242F242F24242F2FD5 +:102FB00000003C3C00003030000000000000000039 +:102FC00000000000000000000000000000000C0CE9 +:102FD0000C0C0000000000000000000000000000D9 :102FE00000000000000000000000000000000000E1 :102FF00000000000000000000000000000000000D1 -:1030000000000000000000000000000000000000C0 +:103000000000000000000000000000610006000D4C :1030100000000000000000000000000000000000B0 -:1030200000000000000000000000000000000000A0 -:103030000000000000000000000000000000000090 -:103040000000000000000000000000000000000080 -:10305000000000A0000000000000000000000000D0 -:103060000000000000000000000000000000000060 -:103070000000000000000000000000000000000050 -:103080000000000000000000000000000000000040 -:103090000000000000000000000000000000000030 +:10302000000000000000000000000061000F000D23 +:1030300000000061000F000D0000000005000A29DB +:10304000850000A005000A29850000A00061000796 +:10305000800D000000610006000D0000000000006F +:1030600000000000000000000000000005000A2829 +:10307000050000A0000000000000000000000000AB +:1030800000000000000000000000000000282800F0 +:10309000000002000000000000000000000000002E :1030A0000000000000000000000000000000000020 -:1030B0000000000000000000000000000000000010 -:1030C0000000000000000000000000000000000000 +:1030B0000000000000000000000000000000FF0F02 +:1030C000553C303FFAFA003C000F00C3C3C3000078 :1030D00000000000000000000000000000000000F0 :1030E00000000000000000000000000000000000E0 :1030F00000000000000000000000000000000000D0 -:1031000000000000000000000000000000000000BF -:1031100000000000000000000000000000000000AF +:103100000000000000000000000000000000002897 +:103110002800000000000000000000000000000087 :10312000000000000000000000000000000000009F :10313000000000000000000000000000000000008F -:10314000000000000000000000000000000000007F +:10314000000F553C303F0A0A003C000F00C300004E :10315000000000000000000000000000000000006F :10316000000000000000000000000000000000005F :10317000000000000000000000000000000000004F :10318000000000000000000000000000000000003F -:10319000000000000000000000000000000000002F +:1031900000000000000080000000000000000000AF :1031A000000000000000000000000000000000001F :1031B000000000000000000000000000000000000F -:1031C00000000000000000000000000000000000FF -:1031D00000000000000000000000000000000000EF +:1031C00000003F3FF5053CAAF0FF000F00FF0C0C8C +:1031D000000F0000000000000000AF2F2F2F0000A4 :1031E00000000000000000000000000000000000DF :1031F00000000000000000000000000000000000CF :1032000000000000000000000000000000000000BE :1032100000000000000000000000000000000000AE :10322000000000000000000000000000000000009E :10323000000000000000000000000000000000008E -:10324000000000000000000000000000000000007E -:10325000000000000000000000000000000000006E +:10324000000000003030F5053CAAF000000F00003F +:103250000C0C000F0000000000000000AF0F0F0F6B :10326000000000000000000000000000000000005E :10327000000000000000000000000000000000004E -:10328000000000000000000020000000008000009E -:10329000000000000080008000800080000000002E -:1032A0000004000000000000000000040000000016 -:1032B000000000000000000000000000000001808D -:1032C00001800000000300200020002000200000FA -:1032D00000000000000000000000000000000000EE -:1032E00000000000000000000000000000000000DE -:1032F00000000000000000000000000000000000CE -:1033000000000000000000000000000000020002B9 -:1033100000004000000000200020002000200000ED -:10332000000040000000000000002000000000003D -:10333000000000000000000000000000000000008D -:103340000802081000000000000100010001000157 -:10335000000040000000000000000000000000002D -:1033600000000000400000004000000000000000DD -:10337000000000000000000000000000000000004D -:1033800000000000400000000000000000000000FD -:1033900040004000000000000200020002000200A5 -:1033A00010000000100000000000000002000200F9 -:1033B000000000000000000000000000000000000D -:1033C00004840820212008200000020002000000E0 -:1033D00000001000020002000202000000000000D5 -:1033E00000000000000000000000000000000000DD -:1033F00000000800000000000000040004000000BD -:1034000000000400000000000000000000000000B8 -:103410000000800880000000000080088008800014 -:1034200080000008000800100010000000000000EC -:1034300000000084000000000000000800080000F8 -:1034400000008003801188110001000000000000CE -:1034500000000000800004000000000100080008D7 +:10328000000000000000000000002004000000001A +:1032900000080004000000000000000000004000E2 +:1032A000A0084000410200000000000088004080AB +:1032B00009020004000000210000011000000000CD +:1032C0001110000000032002000000000000400078 +:1032D0000000200000041020C0C00080004040001A +:1032E00010000000000000000000000000042000AA +:1032F000880020001000000020000000A000200036 +:10330000200000000000000040000000100040000D +:103310000000100200000000000000000002000099 +:1033200010020001100088A140841000000040003D +:10333000C002C0410090400000000040088300002F +:103340001020080300020000000000004000000000 +:103350001002004000040000400300400040210132 +:103360000000000009900000200200002100004041 +:10337000100040204000002010000000000000006D +:1033800040000000000000000000000000000200FB +:103390000000000000000000000002000000020029 +:1033A000020002000200020002000100000008000A +:1033B000000000000080400002000000000000103B +:1033C0000000000008108800000000000400000059 +:1033D00000000000000002000000000000000000EB +:1033E0008200040004000400040004000400000043 +:1033F0009010000000000000000004000400002005 +:10340000002000410000000000000000000000005B +:1034100000000000000000000000000000000000AC +:103420000000000000000000000082000800000012 +:103430008200000000000010800000000200000078 +:103440000201000000000501200000000000000053 +:103450004000050000000000000000000000000027 :10346000000000000000000000000000000000005C -:1034700000000000800000000000000000080008BC -:10348000000000000000000000000000000000003C +:10347000000000000000001000000000800080003C +:1034800000010301000000880000000000000000AF :10349000000000000000000000000000000000002C -:1034A000000000000000000000000000000000001C -:1034B000000000000000000000000000000000000C -:1034C00000000000001000000000000000000000EC -:1034D00000000000000000000000000001000000EB -:1034E00000000000000000000000000000000008D4 -:1034F00000000000000000000000000000000000CC -:1035000000000000000000000000000000000000BB +:1034A00000000000880040008800000000002000AC +:1034B0000080000002000400A021000001000020A4 +:1034C0008200000002000000080900000000000067 +:1034D0001000000004000000004040000000020056 +:1034E00004000400040000000000080004000000C4 +:1034F0001000040004000000900000000200020020 +:103500000400040040000000100000000000000063 :1035100000000000000000000000000000000000AB -:10352000000000000000000000000000000000009B -:10353000000000000000000000000000000000008B -:10354000000000000000000000000000000000007B -:10355000000000000000000000000000000020004B -:10356000000000000000000000000000000000005B -:10357000000000000000000000000000000000004B +:103520000000000004000000000000000000110086 +:103530000000004000004100000021A00000400009 +:103540000000030041409000100080000084000053 +:103550000000209002000000050000084000030465 +:10356000C10080048400C1000000000800000000C9 +:10357000000000000000000000000000000000400B :10358000000000000000000000000000000000003B -:10359000000000000000000000000000000000002B -:1035A000000000000000010000000000000000001A -:1035B00000000000100000000000000000000000FB -:1035C0000000000000000000004000020140000474 -:1035D0000000000000000000000000400000910911 -:1035E0000000000000000000000000000000820059 -:1035F00000000000000000000000000000000000CB -:1036000000000000000000000000000000000000BA -:103610000000000000000000000000000000008822 -:103620000000000000000000040000000000000096 -:10363000000000000000000000000000000000008A -:103640000000000000000000000000000041020037 -:103650000041000000000000000000000000000029 -:10366000200000000000000000000000000000003A +:103590000000000000000000000000000002000029 +:1035A0000000080000000000100000000000000003 +:1035B000C00084401000000000020002100910004A +:1035C00000020004000000000000000082008200F1 +:1035D0000000000000000002000000110000820056 +:1035E00000000000000000000000000410000000C7 +:1035F00000000000000000000020000000000000AB +:103600000000000900000000004100000000000967 +:1036100000000000000000000000000000000000AA +:103620000000000000000800000000000000000092 +:103630000000000000000000000000010001000088 +:1036400080000001000121000000000000000000D7 +:10365000000000000000000000000000000000006A +:103660000000000021000000000000000000000039 :10367000000000000000000000000000000000004A :10368000000000000000000000000000000000003A :10369000000000000000000000000000000000002A -:1036A0008400000000000000002000000000000076 -:1036B000000000000000000000000000000000000A -:1036C0000000000000000000820000000000000078 -:1036D00000020000000000000000000000000000E8 -:1036E00000000000000000000000000000000000DA +:1036A0000000000000000000000000000100100009 +:1036B000000000000000820002200800824040025A +:1036C0008420040001800120C000000000000000F0 +:1036D00000000000000000000000000000000800E2 +:1036E000080440000000000000000020000000006E :1036F00000000000000000000000000000000000CA :1037000000000000000000000000000000000000B9 -:1037100000000000000000000000000000000000A9 -:103720000000000000000000000000010000000098 -:103730000000000000000000000000000000000089 -:103740000000000000000000000000000000000079 -:103750000000000100000000000000000000000068 -:103760000000000000000000000000000000000059 -:103770000000000000000000000000000000000049 -:103780000000000000000000000000000000000039 +:10371000000000000000000041000000090000005F +:1037200000000008000004900900020400004000AE +:10373000000000000020000200000000000004C0A3 +:10374000800100000000400202002190002011C012 +:1037500008000500080000001004000004820000BA +:103760000004110000040088210041000000000056 +:1037700000880000000000000000000000000000C1 +:1037800000000000000000000000000000880000B1 :103790000000000000000000000000000000000029 :1037A0000000000000000000000000000000000019 -:1037B0000000000000000000000000000000000009 -:1037C00000000000000000000000000000000000F9 -:1037D00000000100000000000000000400000040A4 -:1037E000004000000020000000000021000000094F +:1037B0000000000000000000000000001080000079 +:1037C0000000840202210008000000001100000037 +:1037D00000000000000001000000000000000000E8 +:1037E00000090800000000000000000000000000C8 :1037F00000000000000000000000000000000000C9 -:1038000000000000000000000000000000000000B8 -:1038100000000000000000000000000000000000A8 +:103800000000200000002000000000000000000078 +:103810000000000000410000000000000000000067 :103820000000000000000000000000000000000098 -:103830000000000000000000000000000000000088 -:103840000000000000000000000000000000000078 -:103850000000000020000000000000000000000048 +:103830000000000000000000000000000000021076 +:10384000080000000001000000010000000010005E +:103850000000000000000000080000000000000060 :103860000000000000000000000000000000000058 -:103870000000000000000000000000000000000048 +:103870000000000000000008200000000000000020 :103880000000000000000000000000000000000038 -:103890000000000000000000000000000000000028 -:1038A0000000000000000001000000010000902066 -:1038B0000000820000000000000000000000000086 -:1038C00000000000000000000000000000000000F8 -:1038D000000000000000A000A1A1000800000000FE -:1038E00000000000000001000000000000000000D7 -:1038F00000000000000000000000000000000000C8 +:103890000004000000000000000000000000000024 +:1038A0000000000000000000000000000000000018 +:1038B0000000000000010000000000010140401075 +:1038C00000098208100001009000080100010000BA +:1038D00000010001A0000000000000000000000046 +:1038E000000000000000000000000000000010C008 +:1038F0000020009000000000000000000000000018 :1039000000000000000000000000000000000000B7 :1039100000000000000000000000000000000000A7 -:10392000000000000000002000080000001011004E -:103930008080000080000000000000000000000007 -:103940000000000000000000000000000000000077 -:103950000000000000001100800083A10089000029 -:103960000000000000000000110021000000000025 -:103970000000000000000000000000000000000047 +:103920000000000000000000000000000000000097 +:10393000000000000000004100080002000809919A +:103940000002002180911020032000200009004186 +:1039500000034020001000000000000000000000F4 +:103960000000000000000000000000000000000057 +:103970008080000000000000000000000000000047 :103980000000000000000000000000000000000037 :103990000000000000000000000000000000000027 -:1039A00000000000000000000000000000000020F7 +:1039A0000000000000000000000000000000000017 :1039B0000000000000000000000000000000000007 -:1039C00000000000000000000000000000000000F7 -:1039D000000000000000000080410480A180008001 -:1039E0000000000000000000000000410900000984 -:1039F0000080000000000000000000000000000047 +:1039C0008000802180A100001100210041001180B1 +:1039D0000000000000008010000000000000000057 +:1039E00000000000000000000000000000000000D7 +:1039F0000000000000200000800000000000000027 :103A000000000000000000000000000000000000B6 -:103A100000000000000000000000000000000000A6 -:103A20000000000000000000000000900000000006 -:103A3000000000000020000000C0000000000000A6 -:103A40000000000000000000000000000000000076 -:103A50000000000000000000000008010020A1A0FC -:103A600000A00000000000880000008800010100A4 -:103A700000000088000000000000000000000000BE +:103A10000000000000000000008000000000000026 +:103A20000000000000000000000000000000000096 +:103A30000000000000000000000000000000000086 +:103A40000000100040000809880000880100000004 +:103A50000088009040000800C001100000008200B3 +:103A60004000000000000000000000000000000016 +:103A700000000000100020000000C0000000000056 :103A80000000000000000000000000000000000036 -:103A90000000000000000000000000000000000026 +:103A900000000000000000C0000000C000000000A6 :103AA0000000000000000000000000000000000016 -:103AB00000000000000000002000000000000000E6 -:103AC00000000000000000000000000000000000F6 -:103AD00000000000000000000000000000038890CB -:103AE000C00001A0000001000000820000000000F2 -:103AF000880000010101000000000000000000003B +:103AB0000000000000000000000000000000000006 +:103AC0000100000000000090000400C00002010896 +:103AD00001100002000000000000000000020002CF +:103AE000008800C00000000000000000000000008E +:103AF00000000000000000900020000008C000004E :103B000000000000000000000000000000000000B5 -:103B100000000000000000000000000000000000A5 +:103B100000000000000000000000040000000000A1 :103B20000000000000000000000000000000000095 -:103B30002000000000000300000000000000000062 -:103B40000000000000000000000000000000000075 -:103B5000000000000000000000000000000000A0C5 -:103B60000000800021000000100000008000000024 -:103B7000000900000020414100000000000000009A +:103B30000000000000000000000000000000000085 +:103B4000200010000000000021000900008000A0FB +:103B5000032010A020A0000005004100000000800C +:103B600000000000008000000000000000000000D5 +:103B700000000000000000000000000000000080C5 :103B80000000000000000000000000000000000035 -:103B90000000000000000000000000000000000025 +:103B900000000000000000000500000080000000A0 :103BA0000000000000000000000000000000000015 -:103BB00008212000410020000011000000800000CA -:103BC00000000000000000000000000000000000F5 -:103BD00000000000000000000000000000000000E5 -:103BE000210000218000000000000000000800000B -:103BF0000000000000110000200000000000000094 +:103BB0000000000000000000000000000000000005 +:103BC000000000000000000000100089008080005C +:103BD00041000300100008402120200000000800E0 +:103BE0000000000000800000000000000000000055 +:103BF000000000000000000000008000000800003D :103C000000000000000000000000000000000000B4 -:103C100000000000000000000000000000000000A4 +:103C1000000000000000000000000000000900009B :103C20000000000000000000000000000000000094 -:103C300000000101010000000000000100008840B8 -:103C40000000000000000000000000000000000074 -:103C50000000000000000000000000000000000064 -:103C60000000010000010800000000000000000149 -:103C70000000000000000001000000000000000043 -:103C80000000000000000000000000000000000034 -:103C900000000000000040000000000000000000E4 +:103C30000000000000000000000000000000000084 +:103C40000000000000000000000004000210084016 +:103C500082000108000001000100010000900088BE +:103C6000010000000000000400000000000000004F +:103C7000000000000000000000000000C000000084 +:103C8000908890000000000000000000000000008C +:103C90000000000000000000000000000000000024 :103CA0000000000000000000000000000000000014 :103CB0000000000000000000000000000000000004 -:103CC00007000000000000000000000000000000ED -:103CD00000000000000000000000000000000000E4 -:103CE000000000000000000180008441000000424C -:103CF000000007000000000000E00000814100001B -:103D000000000000000000000000000000000000B3 -:103D100000000000000000000000000000000000A3 -:103D20000000000000000000000000000000000093 -:103D30000000000000000000000000000000F0F0A3 -:103D40000000FFFF00000000000000000000000075 -:103D50000000000000000000000000000000000063 -:103D6000000000000000A0A0A0A00303F3F30000E7 +:103CC00000000000000000000000000000000000F4 +:103CD000000000000000000000000000000000E004 +:103CE00000000000000000000000000000000000D4 +:103CF00000000000000000000000000000000006BE +:103D000000000700000000000000000000000000AC +:103D10000000000000000000000000000000000A99 +:103D200000000700000A0000000000000000000082 +:103D30000000000000000000000000000000000083 +:103D400000000000000000000000000000000E0E57 +:103D50000E0F0F0F000F00000000F0F4F5F500004B +:103D600000000000000000000000BE3CFC3C000021 :103D70000000000000000000000000000000000043 -:103D80000000000000000000000000000000000033 -:103D90000000000000000000FF00FF000000000025 +:103D8000000000000C0C0A0A000000000000000007 +:103D90000000000000000000000000000000000023 :103DA0000000000000000000000000000000000013 :103DB0000000000000000000000000000000000003 -:103DC000F0F0000000000000000000000000000013 -:103DD00000000000000000000000000000000000E3 -:103DE0000000000000000000A0A0A0A00303F3F367 +:103DC00000000000000000000000000000000000F3 +:103DD0000A0A0A0F0000000F00000000F0F4F0F4DF +:103DE000000000000000000000000000BE3CFC3CA1 :103DF00000000000000000000000000000000000C3 -:103E000000000000000000000000000000000000B2 -:103E100000000000000000000000FF00FF000000A4 +:103E00000000F0F03C3C0C0C0A0A0000000000002E +:103E100000000000000000000000000000000000A2 :103E20000000000000000000000000000000000092 :103E30000000000000000000000000000000000082 -:103E400000000000FF000000FFFF00000000000075 -:103E50000000000000000000000000000000000062 -:103E600000000000000000000000FCFCFCFC3C0026 -:103E70003C00000000000000000000000000000006 -:103E80000000000000000000000000000000000032 +:103E40000000000000000000000000000000000072 +:103E500000003F3C0F003C7F3C7D00000000000064 +:103E6000000000000000555F55FF00000000FF3C0F +:103E7000FF00000000000000000000000000000043 +:103E800000000000000F0055F0F03030000000008E :103E90000000000000000000000000000000000022 :103EA0000000000000000000000000000000000012 :103EB0000000000000000000000000000000000002 -:103EC000000000000000FF000000000000000000F3 -:103ED00000000000000000000000000000000000E2 -:103EE000000000000000000000000000FCFCFCFCE2 -:103EF0003C003C000000000000000000000000004A -:103F000000000000000000000000000000000000B1 +:103EC00000000000000000000000000000000000F2 +:103ED000000000003F3C0F003C3F3C3C0000000065 +:103EE0000000000000000000555F55550000000074 +:103EF0003C3C00000000000000000000000000004A +:103F0000000000000000000F0055000030300000ED :103F100000000000000000000000000000000000A1 :103F20000000000000000000000000000000000091 -:103F30000000000000000000000000000000006120 -:103F40000006000D000015182A00054005A8000015 -:103F50000000000000000000000000000000000061 -:103F60000000000000000000000000000000806170 -:103F70000A0F05010000000005180A20050005A031 -:103F800000400006000C00000000000000000000DF +:103F30000000000000000000000000000000000081 +:103F40000000000000000000000000000000006110 +:103F50000006000D000080610006009D0000006169 +:103F60000006000D000000610005000D00050000C6 +:103F700000000090000000000000000000000000B1 +:103F80000000000000000000100020280040000891 :103F90000000000000000000000000000000000021 -:103FA0000000000000000000000000000000000011 +:103FA000000000000000000005000A28050000A035 :103FB0000000000000000000000000000000000001 -:103FC0000F0F0000000000000000000000000000D3 +:103FC00000000000000000000000000000000000F1 :103FD00000000000000000000000000000000000E1 -:103FE00000000000000000000000000000000000D1 -:103FF0000000FFFF28282828000000000000000023 -:10400000000000003C3CFFFF003C000000000000FE +:103FE0002000400000200000D7555555000000007B +:103FF00000000000000000000000000000000000C1 +:1040000000000000000000000000000000000000B0 :1040100000000000000000000000000000000000A0 :104020000000000000000000000000000000000090 :104030000000000000000000000000000000000080 -:1040400000004B0A410000000000000000000000DA +:104040000000000000000000000000000000000070 :104050000000000000000000000000000000000060 -:104060000000000000000000000000000000000050 -:1040700000000000FFFF28282828000000000000A2 -:104080000000000000003C3C0000003C000000007C +:1040600000002000400000A00000C300000000008D +:104070000000000000000000000000000000000040 +:104080000000000000000000000000000000000030 :104090000000000000000000000000000000000020 :1040A0000000000000000000000000000000000010 :1040B0000000000000000000000000000000000000 -:1040C00000000000C300D7C3000000000000000093 -:1040D00000000000000000000000000000000000E0 -:1040E00000000000000000000000000000000000D0 -:1040F000000000000C0C0C0C00F000F000000000B0 -:1041000000000000000000000000F0F000000000CF +:1040C00000000000000000000000000000000000F0 +:1040D000000000000C5D5D0C00000000FFFF000010 +:1040E000000000000A003E3CFC3CFE3C01003D3C60 +:1040F00000000000000000000000000000000000C0 +:1041000000000000000000000000000000000000AF :10411000000000000000000000000000000000009F :10412000000000000000000000000000000000008F :10413000000000000000000000000000000000007F -:10414000000000000000C300D7C300000000000012 -:10415000000000000000000000000000000000005F -:10416000000000000000000000000000000000004F -:104170000000000000000C0C0C0C00F000F000002F -:10418000000000000000000000000000F0F000004F +:10414000000000000000000000000000000000006F +:104150000000000000000C0C0C0C00000000FFFF31 +:104160005D0C0000000000003C3C3C3CBE3C0000FC +:104170003C3C0000000000000000000000000000C7 +:10418000000000000000000000000000000000002F :10419000000000000000000000000000000000001F :1041A000000000000000000000000000000000000F :1041B00000000000000000000000000000000000FF -:1041C00000000000000000000400000000000000EB -:1041D00000000000000000002000000000000000BF -:1041E00000000000000000002000000000000000AF -:1041F00000000000000000000400000000000000BB +:1041C00000000000000020000000000000002000AF +:1041D00000000000000000000000000000000000DF +:1041E00000000000000000000000000000000000CF +:1041F00000000000000000000002000082400000FB :1042000000000000000000000000000000000000AE -:10421000000000000000000000002000000000007E -:10422000000000000000000000000000000000008E -:10423000000000000000000000002000000000005E -:10424000000000202000000000000000000000002E -:104250000000000000000000000009000000000055 -:10426000000000000000000000000000000000004E -:104270000000000200000000000200000002000236 -:10428000000000000000000000000000000000002E -:10429000000000000000000000020000000000001C -:1042A00000000000000000004000000000000000CE +:10421000000000000000000000000000000000009E +:1042200000000000000000000000000000009000FE +:10423000000000000000000000000000000000007E +:10424000000000000000000000001000000200005C +:10425000000040004100000000000000400200009B +:1042600000020004100000024100400000000002B3 +:104270000090000240000000000240C0404000C02A +:104280000004000040000000000000024082210005 +:10429000000010020000400000020040004000400A +:1042A000004000004000000200000002400000004A :1042B00000000000000000000000000000000000FE -:1042C00010000000000000000009000000000000D5 -:1042D00000000000000000000000000000000000DE -:1042E00000000000000000000000000000000000CE -:1042F0000000000000000009000090000000000025 -:1043000000000000000000000000000000000000AD -:10431000000000000000000000000000000000009D -:10432000000000000000000000000000000000008D -:10433000000000000000000000000000000000007D -:10434000000000000000000020000000000000004D -:10435000000000000000000000000000000000005D -:10436000000000000000000000000000000000004D -:10437000000000000000000000000000000000003D -:10438000000000000000000000000000000000002D -:10439000000000000000000000000000000000001D -:1043A000000000000000000000000000000000000D +:1042C00000000000000000000000000002000000EC +:1042D00000000200020000000000000000000000DA +:1042E00000000200000000000000040000000000C8 +:1042F00002000200000008000000080000000000AA +:104300000200020000000000000000000010000099 +:104310000000000000000000000004000000000099 +:104320000000000008000000000000000000000085 +:104330000000020004000000000000000000000077 +:10434000000002100000000000000000000000005B +:10435000000000000300000000000000000000005A +:104360000000000004000000000000000000000049 +:1043700000000000200000000000000003004100D9 +:1043800000000500000000000000000041000000E7 +:10439000000040000000400000000000000000009D +:1043A000000000000000000200000000000000000B :1043B00000000000000000000000000000000000FD :1043C00000000000000000000000040000000000E9 -:1043D00000000000000000000000000000000000DD -:1043E00000000000000000000000000000000000CD -:1043F00000000000000000000000000000000000BD -:1044000000000000000000000000000000000000AC -:104410000000000000000000000004000000040094 -:10442000000000000000000000000000000000008C -:10443000000000000000000000000000000000007C -:104440000000000000000000000003004100210007 -:1044500040002100030003000000000000000000F5 -:10446000000000000000000000000000000000004C -:10447000000000000000000000000000000000003C -:10448000000000000000000000000000000000002C -:104490000000000008000000000000000000000014 -:1044A000000000000000000000000000000000000C +:1043D000000000000000040088000400400000000D +:1043E0000000000088000000000000000000000045 +:1043F0000000000000000000880040000000840071 +:1044000084000000A0000211000000000000000075 +:104410000000000084000000900000000000000088 +:104420000000880004009000000000000000000070 +:104430000000000000004000020002000000000038 +:104440008800900000000000000000000000000054 +:104450000000000000000000000000000900000053 +:10446000000000001100000000000500050004002D +:10447000050000201000030000A000000000400024 +:1044800000000000000000000008000040000000E4 +:1044900000000000002005000000000000000000F7 +:1044A000000000020000000000000000000000000A :1044B00000000000000000000000000000000000FC :1044C00000000000000000000000000000000000EC -:1044D00000000000080000000000000000000000D4 -:1044E00000000000000000000000000000000000CC -:1044F00000000000000000000000000000000000BC -:1045000000000000000900000000000000000000A2 -:104510000000000000050000000000000000000096 -:10452000000000000000004000000000000000004B +:1044D00000000000000000000000002000000000BC +:1044E000000000000000000040020004000000097D +:1044F000000908110000000000000000000000009A +:104500000000000000000000000900200000000082 +:104510000000000000200000000000000004000077 +:104520000000000000000002000000000000000089 :10453000000000000000000000000000000000007B :10454000000000000000000000000000000000006B -:10455000000000000000000000000000000000005B -:10456000000000000000000000000000000000004B -:10457000000000000000000000000000000000003B -:10458000000000000000000000000000000000002B -:10459000000000000000000000000000000000001B -:1045A00000000000000000000000000000000040CB -:1045B00000000000000000000000000000000000FB -:1045C00000000000000000000000000000000000EB +:104550000000000008000000000000000000000053 +:104560000010000000000000000002000500000034 +:1045700000002100000000000000100020000500E5 +:104580000000000003000000000020000000000008 +:104590000000040000000000000000000400000013 +:1045A00000000000000000000000008800900000F3 +:1045B00000000000000000000000000000000200F9 +:1045C00000000000000000000000000000000040AB :1045D00000000000000000000000000000000000DB :1045E00000000000000000000000000000000000CB :1045F00000000000000000000000000000000000BB @@ -78967,31 +78967,31 @@ :10462000000000000000000000000000000000008A :10463000000000000000000000000000000000007A :10464000000000000000000000000000000000006A -:10465000000000000000000000000000002008042E -:1046600008000000000000000084000000000000BE -:10467000000000000000000000000000000000003A -:10468000000000000000000000000800000000849E -:1046900000000000000000200020112000000000A9 -:1046A0000084000000000000000000000000000086 -:1046B00000000000000000000000000000000000FA -:1046C00000000000000000000000000000000000EA -:1046D00000000000080000000000000000000000D2 +:10465000000000000000100000000000000000004A +:10466000000004000000000000000020080000001E +:1046700004000590000000000040008810001100B8 +:104680000000000402004000038800000000000059 +:1046900000900000000004000000000000880020DE +:1046A000000000000000090020004004000000207D +:1046B00000000900000000000000000000000002EF +:1046C00000000000000000000000000400000000E6 +:1046D00000000000000000000000000000000000DA :1046E00000000000000000000000000000000000CA -:1046F00000000002000000000000000000000000B8 -:1047000000000000000000000000000000000000A9 -:104710000000000000000000000000020000000097 -:104720000000000000200000000000020000000067 +:1046F000840000000000000000090000000000002D +:104700000000000000000000200000000000000089 +:104710000000000000000000000000000000000099 +:104720000000000000000000000000000000000089 :104730000000000000000000000000000000000079 -:104740000000000000000000000000000000000069 +:1047400000000000000000000000000088000000E1 :104750000000000000000000000000000000000059 -:104760000000000000000000000000000000000049 -:104770000000000000000000000000000000000039 -:104780000000000000000200000000000200000025 -:104790000000000000000000000000000000000019 +:104760000000000000000000000000002000000029 +:104770000000408400000000000000000000000075 +:104780000000030000000000110000001000000005 +:104790000000000000000000000010000000000009 :1047A0000000000000000000000000000000000009 -:1047B00000000000000000000000000000000000F9 -:1047C00000000000000000000000000000000000E9 -:1047D00000000000000000000000000000000000D9 +:1047B00000000000080000000000000000000000F1 +:1047C00000000000000000000000000000000900E0 +:1047D00000000000000021000000000000000000B8 :1047E00000000000000000000000000000000000C9 :1047F00000000000000000000000000000000000B9 :1048000000000000000000000000000000000000A8 @@ -79089,5508 +79089,1411 @@ :104DC00000000000000000000000000000000000E3 :104DD00000000000000000000000000000000000D3 :104DE00000000000000000000000000000000000C3 -:104DF000000000000000000000000000880000002B -:104E00000000000000000000208000800080208062 -:104E1000000000000000000000000000000400008E -:104E2000000000000000000420000000000020003E -:104E3000000300000000000000000000000000006F -:104E40000000000000000000000020000000000042 -:104E50002000000000000000000000000000000032 -:104E60000000000000000000000000000000000042 -:104E700020000000000000000000000000004002D0 -:104E800000020000000021000000000400040004F3 -:104E9000800400000000000000000000000000008E -:104EA00000000000000000000000000040000000C2 -:104EB00000000000000000000000000000000000F2 -:104EC0004000000040000000000000020000000060 -:104ED00000000000000000000000000000000000D2 -:104EE0004000000000000000000000000000000082 -:104EF00000000000000000000000000000000000B2 -:104F0000000000000000000000000000010001009F -:104F10000100000000000000000000000800080080 -:104F200000100010020001000200010082000000D9 -:104F300000008210000000000000000000000200DD -:104F4000000000410000000000000000020001001D -:104F5000000000000200010000000000000000004E -:104F60000000000000000000000000000040000001 -:104F70000000000000000008000000000000000029 -:104F800000000008000800000000000800002000E9 -:104F900020002000000000080000000000000000C9 -:104FA00000000008000800000200000804000000E3 -:104FB00000000000000000000008000000000000E9 -:104FC00000000000000800080000000000080000C9 -:104FD0002008040000000000100800000200020089 -:104FE00000000000000800080000000000080000A9 -:104FF00000080000000000000000000000000000A9 -:1050000000000000000000000000000000000000A0 -:105010000000000000000000000000000000000090 -:105020000000000000000000000000000000000080 -:105030000008000000000000000000000000000068 -:105040000000000000000000000000000000000060 -:105050000000000000000000000000000000000050 -:105060000000000000000000000000000000000040 -:105070000000000000000000000000000000000030 -:105080000000000000000000000000000000000020 -:105090000000000000000000000000000000000010 -:1050A0000000000000000000000000000000000000 -:1050B00000000000000000000000000000000000F0 -:1050C00000000000000000000000000000000000E0 -:1050D00000000000000000000000000000000000D0 -:1050E00000000000000000000000000000000000C0 -:1050F00000000000000000000000000000000000B0 -:105100000000000000000000C000000000000000DF -:10511000000000000000000000000000000000008F -:10512000000000000000000000000000000000007F -:10513000000000000000000000040000000000006B -:10514000000000000000000400000000000000005B -:10515000000000000000000000000000000000004F -:1051600000000100008000000000000000000000BE -:10517000000000000000000000000000000000002F -:10518000000000000000000000000300000000001C -:10519000000000000000000000000000000000000F -:1051A00000000000000000000000080000000000F7 -:1051B00000000000000000000000000000000000EF -:1051C00000000000000000000000000000000000DF -:1051D00000000000000000000000000000000000CF -:1051E000000000002000000400000000000000009B -:1051F00000000000000000000000000000000000AF -:10520000000000000000080008000000000000008E -:10521000000000000000C0000000000000000000CE -:10522000000000000000000000000000000000007E -:10523000000000000000000000000000000000006E -:10524000000000000000000000000000000000005E -:10525000000000000000000000000000000000004E -:1052600090000000000000000000000000000000AE -:105270000000000000000000000008000000000026 -:10528000000000000000000000000000000000001E -:10529000000000000000000000000000000000000E -:1052A00000000000000000000000000000000000FE -:1052B00000000000000000000000000000000000EE -:1052C0000000000000000000000000880000000056 -:1052D00000000000000000000000000000000000CE -:1052E00000000000000000000000000000000000BE -:1052F00000000000000000000000000000000000AE -:10530000000000000000000000000000000000009D -:10531000000000000000000000000000000000008D -:105320000000000000050000000000000021000057 -:10533000000000000000000000000000000000006D -:10534000000000000000000000000000000000005D -:10535000000000000000000000000000000000004D -:10536000000000000000000000000000000000003D +:104DF000000000000000200004000000200020004F +:104E000088000000A0002004000090009000010431 +:104E100088008202840000009000048020002000AE +:104E2000C000C0A0C0802004040320002000400473 +:104E300000030100200020004004210001002000A8 +:104E40002000880020022000A00000802084201183 +:104E5000884088000000000020002000880020001A +:104E60002000008000000080019004800480010484 +:104E700001040000000000900000C1401104000285 +:104E800009000002400041400000219040A0400283 +:104E900002C010900000080041004000C002000065 +:104EA0000000400440024004009090C000004040D8 +:104EB000000000004002800221000040204020004D +:104EC000004000C000024100000000024004401108 +:104ED0004000000500000002000200024000400007 +:104EE000000000000020410000200821C004C00490 +:104EF00002030401000000000000000002000400A2 +:104F00008300010000000000000000000200030018 +:104F100002000200000000000000001040004000FD +:104F20008310010000000002C00084000220030082 +:104F30000300030000004108010410000000000409 +:104F400020400204020020002000000402040000AF +:104F50000800020000000000000000100210000025 +:104F600000000000020002200440202090202000C9 +:104F7000200082040004000000002008000800084F +:104F8000890004080408090800000008400800001F +:104F90000800000800084100000040080008A008C0 +:104FA000800010084008040800010208020880017F +:104FB0008400C008C0080000C00110018308040874 +:104FC00002098201090900088008C000020940099D +:104FD00000008000000800080000000020082008F1 +:104FE00040080000000800080309C0010009090981 +:104FF000804080400009000900000000000000001F +:10500000000000000000000000000000010041005E +:1050100000009000081000400000000002000200A4 +:105020000100040440000500100001009000010090 +:10503000001100090000000900000000100000003D +:10504000000500000440104004400421000240001C +:105050000440400000000000200000080000400064 +:10506000002100000000000000000000008000009F +:1050700084050100010001000100000000000000A3 +:105080000000000009000000000000000000040013 +:10509000040009001100800105010000000000006B +:1050A00000000400000080001000880010000000D4 +:1050B00010000000000004000000000000002100BB +:1050C00000000000000000010001000100040000D9 +:1050D00000000001000000900000800400000000BB +:1050E00000000000000000000000000000000020A0 +:1050F000000000000200020004000200080000009E +:10510000000000000000010084004000A000040036 +:105110000000C0000200000000102080A00000007D +:1051200000000000A0809084C08200800080008089 +:105130000080C0A0020002000500030200001080F1 +:10514000002000401100820400002000832008009D +:105150000000000082100004900982000000A000FE +:10516000C000C0008204C010A0008240A000000067 +:105170000000840000020000080008000000000099 +:1051800000000000000000002000100010000000DF +:10519000800000004100800000000001804003000A +:1051A0000000000003000340204121410040114065 +:1051B0000440404000408082808482A0840000003F +:1051C000C14008844001A0A0000008008000200029 +:1051D0000000210004000420000000000000000086 +:1051E00000000000000000000000000000000000BF +:1051F0000000000000000040000800000000000067 +:10520000080000000000000008004000202100000D +:10521000C0009000100090000000A1800000A0409D +:10522000C0002000C00008002000000000000400B2 +:1052300000000000000001000400100040002000F9 +:1052400000000005A005A002042100118205100045 +:105250000000C04020000040840008000000C000A2 +:10526000C00000001000000000000000000000006E +:1052700000000800080008000800C000C00000008E +:10528000000000000000000000000000000080009E +:1052900000000900000000000400000008040000F5 +:1052A0000001400000000000000080000004000435 +:1052B00080000088000000002000800000008000C6 +:1052C000000000000000000000012000000000209D +:1052D0000000008840010000000100000000000004 +:1052E0000420050000000000000000000000000095 +:1052F000000000000002000020000000000000008C +:10530000000000000000000000000000820000001B +:105310000000000000000800840008002000098050 +:10532000011004801100830485044104A100008061 +:105330000180010400000000000000008200848061 +:1053400002020000000000210040000200050040B1 +:1053500084030000000300000040400000008208B9 +:10536000000800000000000008000000C00000006D :10537000000000000000000000000000000000002D -:10538000000000000000000000000000000000001D -:10539000000003000000000000000000000000000A -:1053A00000000000000000000000000000000000FD -:1053B00000000000000000000000000000000000ED -:1053C00000040000020000000000000000000000D7 -:1053D00000000000040000000000000000000000C9 -:1053E00000000000000000000000000000000000BD -:1053F00000000000000000000000000000000000AD -:10540000000000000000000000000000000000009C -:10541000000000000000000000000000000000008C -:10542000000000000000000000000000000000007C -:10543000000000000000000000000000000000006C -:10544000000000000000000000000000000000005C -:10545000000000000000000000000000000000004C -:10546000000000000000000000000100000000003B +:1053800000000000004000000000000000000000DD +:10539000000000000000000000001100000080007C +:1053A0008810200183400200020102410201020430 +:1053B00000400404020120002000000010A00000B2 +:1053C0000320800100A000000884008341830000C6 +:1053D000000140000400000000000001000008007F +:1053E000000000880000080000000000000000002D +:1053F000000000000000000000000000000020008D +:105400000000000011000800000000000000000083 +:1054100001002000000100000202002000080288B4 +:1054200088C00002009020C000C0009090000000E2 +:1054300000C100001001009000C00000A00020008A +:1054400040C0212084100802000000C1040088012F +:10545000000000C000000000409002C000000000FA +:10546000002000C0008800040008000000000000C8 :10547000000000000000000000000000000000002C -:10548000000000000000000000000000000000001C -:10549000000000000000000000000000000000000C -:1054A00000000000000000000000000000000000FC -:1054B00000000000000000000000000000000000EC -:1054C00000000000000000000000000000000000DC -:1054D00000000000000000000000000000000000CC -:1054E000000000000000000000000000110021008A +:10548000000000C040200000880000000000000074 +:1054900000001100880820040002808000000080C5 +:1054A0008000008000000500000000800500200052 +:1054B000050003C120100508000000800000100056 +:1054C0000000C080080080808000000005C18203C9 +:1054D0009008001000800000100000008080000094 +:1054E0000400000000800000208000000000000098 :1054F00000000000000000000000000000000000AC -:10550000000000000000000000000000000000009B -:10551000000000000000000000000000000000008B -:105520000000000000090000004000000000000032 -:10553000000000000000000000000000000000006B -:10554000000000000000000000000000000000005B -:10555000000000000000000000000000000000004B -:1055600000000000000000040000000000000041F6 -:10557000090000030080000000000000000000009F -:10558000000000000000000000000000000000001B -:10559000000000000000000000000000000000000B -:1055A00000000000000000000000000000000000FB -:1055B00000000000000000000000000000000000EB -:1055C0000000000000A0000000000000000000003B -:1055D00000000000000000000000000000000000CB -:1055E00000000000000000000000000000000000BB -:1055F0000091010000000088000000000000000091 -:10560000000000000000000000000000000000009A -:10561000000000000000000000000000000000008A -:105620000000000000000000000002000000010077 -:10563000000000000000000000000000000000006A -:10564000000000000000000000000000000000005A -:10565000000000000000000000000000000000004A -:10566000000000000000000000000000000000003A -:1056700000000000880000000100000000000000A1 -:10568000000000000000000000000000000000001A -:10569000000000000000000000000000000000000A -:1056A000000000000000000000000000800000007A -:1056B00008000000000000000000000000000000E2 -:1056C00000000000000000000000000000000000DA -:1056D00000000000000000000000000000000000CA -:1056E00000000000000000000000000000000000BA -:1056F0000000000000000000000041000000000069 -:105700000000000000000000000000000000000099 -:105710000000000000000000000000000000000089 -:105720000000000000000000000000000000000079 -:105730000000000000000000000000000000000069 -:105740000000000000000000000000000000000059 -:105750000000000000000000000000000000000049 -:105760000000000000000000000000000000000039 -:105770000000000000000000001100000000000018 -:105780000000000000000000000000000000000019 -:105790000000000000000000000000000000000009 -:1057A00000000000000000000000000000000000F9 -:1057B00000000000000000000000000000000000E9 -:1057C000000000000000000000A000000000000039 -:1057D00000000000000000000000000000000000C9 -:1057E00000000000000000000000000000000000B9 -:1057F00000000000000000000000000100000000A8 -:105800000000000000000000000000000000000098 -:105810000000000000000000000000000000000088 -:105820000000000000000000000000000000000078 -:10583000000002E000000000000000000000000086 -:105840000000000000000000000000000700000051 -:105850000000000000000000000000000000000048 -:105860000000000000000000000000000000000038 -:105870000000000000E000000000000000E0000068 -:105880008141000000000000000000000000000056 -:105890000000000000000000000000000000000008 -:1058A00000000000000000000000000000000000F8 -:1058B00000000000000000000000000000000000E8 -:1058C00000000000000000000000000000000000D8 -:1058D00000000000000000000000000000000000C8 -:1058E00000000000000000000000000000000000B8 -:1058F00000000000000000000000000000000000A8 +:10550000000000000080000000000000000000001B +:10551000000000001100080004004083800000002B +:10552000000000000003000080098000200005004A +:1055300005009000080510A1050280C010000000C1 +:105540000800C10082001009C08280000000208095 +:1055500002000300C11100080003002080000009C0 +:1055600000000004800000030000000000000000B4 +:10557000000000000000000000000000000000002B +:105580000000000000000010002000038000000068 +:1055900000000000000000000088000000C00200C1 +:1055A0000000080088008800A000A0000200004061 +:1055B00000000100C140900901020101C002014048 +:1055C00020000000C100090021000882C082000004 +:1055D000018800000100C100000000000000C000C0 +:1055E000000000000000C0000000000000000000FB +:1055F00000000000000000000000000000000000AB +:105600008400204002002040000120000001C00072 +:105610000000000000000000010001002000010067 +:10562000041000000008009090020802002010C042 +:1056300000880001100000C001880500910100C031 +:1056400020000201000100C1080800200009C0C1BB +:10565000000088000090010100C100000800000067 +:1056600001C000000800000000C000002000000091 +:105670002100000000000000000000000000000009 +:105680000000000000004000000040004020022018 +:1056900008C000000000000000004120104082020D +:1056A00011108380000000800000008080800000D6 +:1056B000098000200008001000804102850221219D +:1056C000058200008010001000C180A0004000A1F1 +:1056D0008088000080020085052140C10000000094 +:1056E0000000418000008000000002800000800077 +:1056F0000000410000000000000000000000000069 +:1057000000000000400000000000000000008000D9 +:1057100080004080000000000000000008102120F0 +:105720000200101000000020008000000000004077 +:10573000000000002080050010002080C10500004E +:1057400021001041C105081009000803800980905C +:105750000080800800004102210021808309800828 +:1057600000000000000080000000000000000008B1 +:105770000000000000000000000000000000000029 +:1057800000000000000000100000008000008010F9 +:105790000089000000000000000000000000000080 +:1057A0000000000000000000008800080000000069 +:1057B0000000004000000040000000888808C10090 +:1057C000000001000000C100210100000101C00033 +:1057D00020C0021010000000012000000102900112 +:1057E000C001004000000000C00000000040400078 +:1057F00000010000000000000000000000000000A8 +:105800000000000000000000000000100040000048 +:10581000C00140022008000000000000000000005D +:10582000000000E0070082210000000007000000E7 +:10583000000000E007000000000000E000000000A1 +:10584000008100E007006000810000E0000000002F +:1058500000410000070041120000880000E0000045 +:105860000000810000E000000006600000E0000091 +:105870000000000000E000000082000000000000C6 +:105880000000000000000000000000000000800098 +:10589000000000810001070000000000000000007F +:1058A00000000000000000000000000000000055A3 +:1058B0003C7D00000000F0F000003C3C3C3C00005F +:1058C0003C3C0000FFFF00003C3C000000FF0000EB +:1058D000FFFF004000410C00080000003C3C3C3C45 +:1058E0000000F0F00000FFFF0000FFFF00003C3C64 +:1058F0000000AAAA00000000000000000000000054 :105900000000000000000000000000000000000097 -:105910000000000000000000000000000000000087 +:105910000000000000000000000FFFFF000000007A :105920000000000000000000000000000000000077 -:105930000000000000000000000000000000000067 -:105940000000000000000000000000000000000057 -:105950000000000000000000000000000000000047 -:105960000000000000000000000000000000000037 -:105970000000000000000000000000000000000027 +:1059300000003C3C00000000F0F200023C3C3C3C1B +:1059400000003C3C0000000000003C3C000000FF68 +:1059500000000000004000000000080000003C3C87 +:105960003C3C0000F0F000000000000000000000DF +:105970003C3C0000AAAA000000000000000000005B :105980000000000000000000000000000000000017 -:105990000000000000000000000000000000000007 -:1059A00000000000000000000000000000000000F7 -:1059B00000000000000000000000000000000000E7 -:1059C00000000000000000000000000000000000D7 -:1059D000000000005555000000000000000000001D -:1059E00000000000000000000000000000000000B7 -:1059F00000000000000000000000000000000000A7 +:10599000000000000000F0F000FF000FF0F0000039 +:1059A00000000000000000000000000000003C00BB +:1059B0003F0FD755C300000000003C3C3F3CFF00B8 +:1059C0000000FFFF00003C3C00003C3C0000FFFFEB +:1059D0000000F0F0FFFF0028000A00100030000077 +:1059E000FFFF0000FFFF00003C3C00005555000099 +:1059F0003C3C00000000FFFFBE3C3E3E00000000BB :105A00000000000000000000000000000000000096 -:105A10000000000000000000000000000000000086 +:105A10000000000000000000005500FF5050F0F0B2 :105A20000000000000000000000000000000000076 -:105A30000000000000000000000000000000000066 -:105A40000000000000000000000000000000000056 -:105A5000000000000000555500000000000000009C -:105A60000000000000000000000000000000000036 -:105A70000000000000000000000000000000000026 +:105A30003C003C00555500000200000200000F0031 +:105A4000FF000000000000003C3C00003C3C000067 +:105A500000000000F0F0FFFF000000000010000058 +:105A6000000000000000000000003C3C0000555514 +:105A700000003C3C0000FFFFFFFFBE3C3E3E00003C :105A80000000000000000000000000000000000016 -:105A90000000000000000000000000000000000006 -:105AA00000000000000000000000000000000000F6 -:105AB0000000000000000000000000650006000F6C -:105AC00020000000000000000000000000000000B6 -:105AD000000000000000000000A80000000000001E -:105AE00000000000000000000000000000000000B6 -:105AF000000000000000000000000000006100063F -:105B0000000D000000400006000C00000000000036 -:105B10000000000000000000000000000000000085 -:105B20000000000000000000000000000000000075 -:105B30000000000000000000000000000000000065 -:105B40000000000000000000000000000000000055 -:105B50000000000000000000000000000000000045 -:105B60000000000000000000000000000000000035 +:105A90000000000000000010000000550000505001 +:105AA0000000000000000000000005610A09050177 +:105AB00000A000000008000000000061500F009DE1 +:105AC0000000406380050021920245E38A27052DEE +:105AD00092A240E28007802082021061202E004DB9 +:105AE00000080000404280058029920240E38007C0 +:105AF000802D920240E38007802D820200615007D2 +:105B0000000D000000000000000000000000000088 +:105B10000000000005000A00150000A1106120AE81 +:105B2000004D040800000000000000003C3C3F3C29 +:105B30000000F0F000000000000000000000000085 +:105B400000000000FF101010F8F0F8F0AFAF2F2F9A +:105B500080FFC3FF0F5F0F3FF000AA0000000000AE +:105B600082FFC2FF00004000C0000C0C08000000D3 :105B70000000000000000000000000000000000025 -:105B800000000000000000005555FFFF000000006D +:105B80000000000000000000000000000000000015 :105B90000000000000000000000000000000000005 :105BA00000000000000000000000000000000000F5 -:105BB00000000000000000000000000000000000E5 -:105BC00000000000000000000000000000000000D5 -:105BD00000000000000000000000000000000000C5 -:105BE00000000000000000000000000000000000B5 +:105BB0000F00003CF0FC00000000000000000000AE +:105BC000000000000000FF101010280028000F0F38 +:105BD0002F2F80FF80FF0F5F0F3FF000AA00000013 +:105BE000000000FFC0FF00004000000000000800AF :105BF00000000000000000000000000000000000A5 -:105C000000000000000000000000555500000000EA +:105C00000000000000000000000000000000000094 :105C10000000000000000000000000000000000084 :105C20000000000000000000000000000000000074 -:105C30000000000000000000000000000000000064 -:105C40000000000000000000000000000000000054 -:105C50000000000000000000000000000000000044 -:105C60000000000000000000000000000000000034 -:105C70000000000000000000000000000000000024 -:105C80000000000000000000000000000000F0F034 +:105C3000141F141F000CAAAE00000000000000009A +:105C40000000000000000000000000000000F0F074 +:105C5000FFFFFFFF202C202C000000001414005533 +:105C600000000000207020700000FFC3FF038000D0 +:105C700028280000000000000000000000000000D4 +:105C80000000000000000000000000000000000014 :105C90000000000000000000000000000000000004 :105CA00000000000000000000000000000000000F4 -:105CB00000000000000000000000000000000000E4 -:105CC00000000000000000000000000000000000D4 -:105CD00000000000000000000000000000000000C4 -:105CE00000000000000000000000000000000000B4 -:105CF00000000000000000000000000000000000A4 +:105CB000000014141414000CAAAE00000000000030 +:105CC0000000000000000000000000000000003C98 +:105CD000F0FC5050F000202C202C00000000141488 +:105CE000005500000000207020700000FF00FF033E +:105CF000A0001414000000000000000000000000DC :105D00000000000000000000000000000000000093 -:105D1000F0F00000000000000000000000000000A3 -:105D20000000000000000000000000000000000073 -:105D3000040004000000000000000000000000005B -:105D40000000000000000000200000000000000033 -:105D50002000020000000000000000000000000021 -:105D60000000000000000000200000000003000010 -:105D700000002000200000000000000000000200E1 -:105D800000000000000000000000200000000000F3 -:105D900000002000000000000000000000002000C3 -:105DA00000000000000000000000200000000000D3 -:105DB00000008000800000000000000000000000E3 -:105DC00000000000000000000000000000000000D3 -:105DD00000000000000000000000000000000002C1 -:105DE00000020002000200020002000200020000A5 -:105DF000000000000004000000000000000000009F -:105E0000000200024002000000000000000000004C -:105E10000000000000000000000000000000000082 -:105E20000000000000000000000041000000000031 -:105E3000000000002000000000000000000001C081 -:105E40000000000000000000000000000000020050 -:105E500000000800020000000000000000000040F8 -:105E600000000000000000008200000000000000B0 -:105E70000000000000000000000000000000000022 -:105E80000000000000000000000000000000020010 -:105E90000000010000000000000000000000000001 -:105EA00000000000000000000000000000000000F2 -:105EB00000000000000000000000000000000008DA -:105EC00020040000040000080000000000000000A2 -:105ED00000000200020000000000000000000008B6 -:105EE00000000000000000080000020002000200A4 -:105EF00000000000000000000000000000000000A2 -:105F0000000800000000000000080200000000007F -:105F100000000000040400000000008400000000F5 -:105F20000008000800000000000800000000000059 -:105F30000000000000000000000008000000000059 -:105F40000000200000000000000000000000000031 -:105F50000000000000000000000000000000000041 -:105F60000000000000000000000000000000000031 -:105F70000000000000000000000000000000000021 -:105F80000000000000000000000000000000000011 -:105F90000000000000000000000000000000000001 -:105FA00000000000000000000000000000050000EC -:105FB00000000000000000000000000000000000E1 -:105FC0000000000080000000000000000000000051 -:105FD00000000000000000000000000000000000C1 -:105FE00000000000000000000000000000000000B1 -:105FF00000000000000000000000000000000000A1 -:106000000000000000000000000000000000000090 -:106010000000000000000000000000000000000080 -:106020000000000000000000000000000000000070 -:106030000000000000000000000000000000000060 -:106040000000000000000000000000200000000030 -:106050000000000000000000000000000000000040 -:106060000000000000000000000000000000000030 -:106070000003000000000000000000080000000015 -:106080000040000000000040000000000000000090 -:106090000000000000000000000000000000000000 -:1060A00000000000000000000000000000000000F0 -:1060B00000000000000000000000000000000000E0 -:1060C00000000000000000000000000000000000D0 -:1060D00000000000000000000000000000000000C0 -:1060E00008000000000000000000000000000000A8 -:1060F0000000000000000900000000000000000097 -:106100000000000000000088000000000000000007 -:10611000000000000000000000000000000000007F -:10612000000000000000000000000000000000006F -:10613000000000000000000000000000000000005F -:106140000800000000000000000000000000000047 -:10615000000000000000000000000000000000003F -:10616000000000000000000000000000000000002F -:10617000000000000000000000000000000000001F -:106180000000000000080000000000000000000007 -:1061900000000000000000000000000000000000FF -:1061A00000000000000000000000000000000000EF -:1061B00000000000000000000000000000000000DF -:1061C00000000000000000000000000000000000CF -:1061D000000000000000009000000000000000002F -:1061E00000000000000000000000000000000000AF -:1061F000000000000000000000000000000000009F -:10620000000400000000000000000000000000008A -:10621000000000000000000000000000000000C0BE -:1062200000000000008408000000000000000000E2 -:10623000000000000000000000000000000000005E -:10624000000000000000000000000000000000004E -:10625000000000000000000000000000000000003E -:10626000000000000000000000000000000000002E -:10627000000000000000000000000000000000001E -:10628000000000000000000000000000000000000E -:1062900000080000000000000000200000000000D6 -:1062A00000000000000000000000000000000002EC +:105D10000000000000000000000000000000000083 +:105D2000000000000000000000000000C000C000F3 +:105D30000000C00000000000C000200000001000B3 +:105D40008400840000008800010020000000200082 +:105D500000000000040005000200208000C02100B7 +:105D600010004002100001000400210000030205A1 +:105D700020008400000021002080058385884100E8 +:105D80004000040084008200C00084008400C00041 +:105D900088000000C000000020002000000020005B +:105DA0004000000000002080008020202020100003 +:105DB00000000000000000004100000000000000A2 +:105DC000000000000000400041020202000000004C +:105DD000400000001002C000C040904010081010A9 +:105DE000400000000090400202008000040000001B +:105DF000800040000000000002C040020440022178 +:105E000008000000009000004000000400020000B4 +:105E100000000090000000000000000000000000F2 +:105E200000000000009000000020002000010001A0 +:105E30000000000000000000000010000000000052 +:105E4000020000000000000001000000020000004D +:105E50000300040000000200410000821100054020 +:105E600000000021004008004140000001008200C5 +:105E7000000003020200020003408800000200400C +:105E80000040020003000040002100000000000567 +:105E900000080000000000000000000000000840B2 +:105EA0004009020002000200020004000020044039 +:105EB0000080000000000008200000080000000032 +:105EC00003000008000000000000080000040908AA +:105ED0000000820080000308800082080021820008 +:105EE00040000008400000000000C0010000100851 +:105EF00040000000400100004108400140840001D2 +:105F0000000000000008400020000900008440005C +:105F1000400841002000000040080000090840003F +:105F200000088000008820084100000080844109AA +:105F300080080020000000000000000000000000B9 +:105F4000000000000000000004000000010000004C +:105F500000000000008000800000000001800100BF +:105F6000010001C110008840880000800008002066 +:105F700000210000000084210120008000000100B9 +:105F80000502000800020002000800000400048866 +:105F900000000000000000000000000000000002FF +:105FA0000020880200000000000000000000020045 +:105FB00000000000000008000000210000000000B8 +:105FC00021000300000000200000020003C00800C0 +:105FD000210003000900214005200000009002205C +:105FE0000200048804202002408800000004000011 +:105FF00041A1000000000000008802A11102000081 +:106000000400828400882101000100840300400014 +:106010000020000800000000000000000000000058 +:106020000000040004000400000003000800080051 +:10603000022000A00000410000000800080010003D +:10604000000010008200002000008200820000009A +:10605000000090000000202008208200A00009001D +:106060004020884040400120A00040008200A0095C +:10607000910008008840010000008280A000830099 +:10608000040204000000A00000040002C000C000E0 +:106090000800C0000000410908400000840008001A +:1060A0008200C000000000000840A00200000009BB +:1060B000000082000000000000000000000003005B +:1060C00000000000000000000000000011000000BF +:1060D00008000000000000000000000100000000B7 +:1060E0000800000110A18001020100000000000072 +:1060F00000000488000003010220000000200300CB +:10610000020003040300210004000000000121003C +:106110000000000020A00000040004000000210096 +:106120000300410000000000030000000001000027 +:1061300000000384000008000000030000000000CD +:1061400000000000000000000000000090000000BF +:1061500002008200400084000000C00001808480B2 +:106160009000A080C000A080A14101009080C0806C +:1061700008200003040200410040040200008421C2 +:106180004011C00400821100000008200805000032 +:1061900008040000C0008200008000800080000031 +:1061A0000800000000008400000000000000100350 +:1061B0000000820000000000000000000008000055 +:1061C00000000000000011000084000000000084B6 +:1061D0000084034004C0000040040000400002208E +:1061E00005200304004005004020020002020504CF +:1061F00040040089080002080000004000C10000BF +:10620000000080000000002140040088030000001E +:106210000000000000000000000004200004002036 +:10622000000000000000000000000000000000006E +:106230000000000000000000020400000000030055 +:106240000000080000000000000000000000000046 +:1062500000008202000000000811002082004000BF +:106260000000820083000000404184C1082140807A +:106270004000822110040000C041A0008200000004 +:1062800000000000109182204011000090000000EA +:106290000000000084080000C0400021042100210B +:1062A0000000000000008200000008000000000064 :1062B00000000000000000000000000000000000DE -:1062C00000080000000000000000000000000000C6 -:1062D000000000000000400000000000000000007E -:1062E00000000000000000000000000000000000AE -:1062F000000000000000400000000000000011004D -:1063000000000001000000000000208400000000E8 -:10631000000000000000000000000000000000007D -:10632000000000000000000000000000000000006D -:10633000000000000000000000000000000000005D -:10634000000000000000020000000000000000004B -:10635000000000000000000000000000000000003D -:10636000000000000000000000000000000000002D -:10637000000000000000000000000000000000001D -:10638000000000000000000000000000000000000D -:1063900000000000000000000000000000000000FD -:1063A00000000000000000000000000000000000ED -:1063B00000000000000000000000000000000000DD -:1063C000000000000000000080000000000000004D -:1063D00000000800000000000000000000000000B5 -:1063E00000000000000000000000000000000000AD -:1063F000000000000000000000000000000000009D -:10640000000000000000000000000000000000008C -:10641000000000000000000000000000000000007C -:10642000000000000000000000000000000000006C -:10643000000000000000000000000000000000005C -:1064400000000000000000000000000000000080CC +:1062C00000210000000000000000000000000000AD +:1062D000000000000000000000008000000100003D +:1062E00000040000200008C0090400A000200200F3 +:1062F0000340020000002101004000820000000075 +:1063000000000000000083080001200008080800C9 +:10631000000000000300000008000000080040002A +:1063200008900002000000001000000008001000AB +:106330000000030000000000000000A000000000BA +:10634000000000100000000000000000000000003D +:1063500000000000000000000000000001A000207C +:106360000084000010C0A040051000A082C10040C1 +:1063700004C004A100039090059004A101C18340D2 +:106380000410C010000000C1A0410090C00810C15E +:106390000040009190010000400100010000200237 +:1063A00000040040C00400000000000000000000E5 +:1063B00000000400000000010000000000000000D8 +:1063C000A00000000000000000000000000000002D +:1063D000000000000000000000000000000021009C +:1063E000008000000000008408892108000484C1A6 +:1063F00011898000004011C0A0110210802102C14B +:10640000109080118080000008880089000580407D +:10641000809000000002000800000010002000082A +:10642000208000804080808000000000000000008C +:1064300000000800800000000008001100080009AA +:10644000000000000000000000000000000000004C :10645000000000000000000000000000000000003C -:10646000000000000000000000000000000000002C -:10647000000000000000000000000000000000001C -:10648000000000000000000000000000000000000C -:1064900000000000000000000000000000000000FC -:1064A00000000000000000000000000000000000EC +:1064600000000003008000000200800090A10021D5 +:10647000A0800808801080000020040820C19190AE +:1064800080008041004180800000A00089410041DF +:10649000C02100008000000080080000000500808E +:1064A00000030000002180088000000000000000C0 :1064B00000000000000000000000000000000000DC :1064C00000000000000000000000000000000000CC -:1064D000008200000000000000000000000000003A -:1064E00000000000000000000000000000000000AC -:1064F000000000000000000000000000000000009C -:10650000000000000000000000000000000000008B -:10651000000000000000000000000000000000007B -:10652000000000000000000000000000000000006B +:1064D00000000000000000000000000000000000BC +:1064E000000000000000000200002088A00083A13E +:1064F000880182C088014091C0000041900188104D +:106500000290400040411001C002000040204121A3 +:106510009001C0C108A002000008C00100400000B6 +:106520000008000184000800402104000000000071 :10653000000000000000000000000000000000005B -:10654000000000000000000000000000000000004B -:10655000200000000000000000000001000000001A -:10656000000000000000000000000000000000002B -:10657000000000000000000000000000000000001B -:10658000000000000000000000000000000000000B -:1065900000000000000000000000000000000000FB -:1065A00000000000000000000000000000000000EB -:1065B00000000000000000000000000000000000DB -:1065C00000000000000000000000000000000000CB -:1065D00000000000000000030000000000110000A7 -:1065E00000000000000000000000000000000000AB -:1065F000000000000000000000000000000000009B -:10660000000000000000000000000000000000008A -:10661000000000000000000000000000000000007A -:10662000000000000000000000000000000000006A -:106630000500000000000000000000000000000055 -:10664000000000000000000000000000000000004A +:10654000000000000000002000000090000000009B +:10655000000000000000000000000000000000003B +:1065600000000000200000000000C000A041001159 +:1065700021A100C088880100030500C00402C0906A +:10658000019101A0C0890020824000C00001C0909C +:106590000120884000C182890090109000C0000056 +:1065A0000100000000004000000400C000200000C6 +:1065B00000000000000000000000000100000000DA +:1065C00001000000000000000000A000000000002A +:1065D00000000000000000000000000000000000BB +:1065E000000000000000000000000000800000A08B +:1065F00003100521208000020303212110908080D8 +:106600008504202141408540208909A0008900019E +:106610009105108503A003C100100041030300840D +:1066200000000200000000000000008000000000E8 +:1066300000000000000000000020001100100040D9 +:10664000000003000300020003000000000000003F :10665000000000000000000000000000000000003A -:10666000000000000000000000000000000000002A -:10667000000000000000000000000000000000001A -:10668000000000000000000000000000000000000A -:1066900000000000000000000000000000000000FA -:1066A00000000000000000000000000000000000EA -:1066B00000000000000000000000000000000000DA +:1066600000000000000000008000004000008000EA +:106670002180044103001108C14021412100101074 +:106680000921084041000820804180088084800062 +:10669000000180418040A0851010C100021011004F +:1066A0000000A109210009001000000080C00000C6 +:1066B000800000000000000000000000000000005A :1066C00000000000000000000000000000000000CA :1066D00000000000000000000000000000000000BA -:1066E00000000000000000000000000000000000AA -:1066F000000000000000000000000000000000009A -:106700000000000000000000000000000000000089 -:106710000000000000000000000000000000000079 -:106720000000000000000000000000000000000069 -:106730000000000000000000000000000000000059 +:1066E00000000000000000000000C0000800C00022 +:1066F0000200A108100300A00001C1A0A004010035 +:1067000090000201829090A04100C001200040C191 +:1067100010020001C001200041C11121C10091906F +:1067200000009000090008004000910000000404EF +:1067300090000400000000000000000000000000C5 :106740000000000000000000000000000000000049 -:10675000000000000000000021000000500000E0E8 +:106750000000000000000000000000000000000039 :106760000000000000000000000000000000000029 -:106770000000000000000000000000000000000019 -:106780000000000000000000000000000000000009 -:1067900000000000000000000000000000000000F9 -:1067A00000000000000000000000000000000000E9 -:1067B00000000000000000000000070000000000D2 +:106770000700000A00820000070042000006000037 +:1067800007004200000000E0070082410000000016 +:106790000700484200000000000007004842008255 +:1067A00000000700000000000000000000000000E2 +:1067B00000E00700000600000000000000000000EC :1067C00000000000000000000000000000000000C9 -:1067D00000000000000000000000000000000000B9 -:1067E00000000000000000000000000000000000A9 -:1067F0000000000000000000000000000000000099 -:106800000000000000000000000000000000000088 +:1067D00000001200000000000000000000000000A7 +:1067E00000000000000000000000000000000200A7 +:1067F000F2F000000000990000002442D0001818B8 +:10680000990018001818FFFF99103F0F3C00000076 :106810000000000000000000000000000000000078 -:106820000000000000000000000000000000000068 -:106830000000000000000000000000000000000058 +:106820000066003CFFF0003CFFC3FF40000000009A +:10683000E6C0E6C0F0F0000000000000000000002C :106840000000000000000000000000000000000048 :106850000000000000000000000000000000000038 :106860000000000000000000000000000000000028 -:106870000000000000000000000000000000000018 -:106880000000000000000000000000000000000008 +:106870000000F0F000000000990000002442D00069 +:106880000000000018000000FFFF10103C003C005A :1068900000000000000000000000000000000000F8 -:1068A00000000000000000000000000000000000E8 -:1068B00000000000000000000000000000000000D8 +:1068A00000000066003CFF66003CFF40FF40000027 +:1068B000000066006600F6F06600000000000000C0 :1068C00000000000000000000000000000000000C8 :1068D00000000000000000000000000000000000B8 :1068E00000000000000000000000000000000000A8 :1068F0000000000000000000000000000000000098 :106900000000000000000000000000000000000087 -:106910000000000000000000000000000000000077 -:106920000000000000000000000000000000000067 +:106910000000430840000084218600004308400036 +:10692000008421860000000000000000000000003C :106930000000000000000000000000000000000057 :106940000000000000000000000000000000000047 :106950000000000000000000000000000000000037 :106960000000000000000000000000000000000027 -:106970000000000000000000000000000000000017 -:106980000000000000000000000000000000000007 -:1069900000000000000000000000000000000000F7 -:1069A00000000000000000000000000000000000E7 -:1069B00000000000000000000000000000000000D7 +:106970000000000000006666000000000F000C0030 +:10698000000001080F003C00020200033C003F0F22 +:106990000066F0F6000000000000000000000000AB +:1069A000000000000000F0F000F0181809090000D5 +:1069B00000000000000000FF03FF063E0606000086 :1069C00000000000000000000000000000000000C7 :1069D00000000000000000000000000000000000B7 :1069E00000000000000000000000000000000000A7 -:1069F0000000000000000000000000000000000097 -:106A00000000000000000000000000000000000086 -:106A10000000000000000000000000000000000076 -:106A20000000000000000000000000000000000066 -:106A30000000000000000000000000000000000056 +:1069F000000000000000000F666F000000000000B3 +:106A00000C0001080000000000000202000300006A +:106A10000F0F00660066000000000000000000008C +:106A20000000000000000000000000F01818090934 +:106A3000000000000000000000000303063E060600 :106A40000000000000000000000000000000000046 :106A50000000000000000000000000000000000036 -:106A600000000000050000A0006100078009000090 -:106A70000000000000000000000000000000000016 -:106A80000000000000000000000000000000000006 -:106A900000000000000000000000000000000000F6 -:106AA00000000000000000000000000000000000E6 -:106AB00000000000000000000000000000000000D6 -:106AC00000000500000000000000000000000000C1 -:106AD00000000000000000000000000000000000B6 -:106AE00000000000000000000000000000003C3C2E +:106A60000000000000000000000000000000000026 +:106A70000000000000000000A0000008000000006E +:106A80000061202E004D00001061202E004D0008F6 +:106A90000061000F000D00001061200E004D000885 +:106AA00000001061200E004D00081061202E004DE6 +:106AB000040800610006000D00000061000F000DD9 +:106AC0000000000000000000000000610006000D52 +:106AD000000000610006000D000005000A0015001E +:106AE00000A0000000000000000000000000000006 :106AF0000000000000000000000000000000000096 -:106B00000000000000000000000000000000000085 -:106B10000000000000000000000000000000000075 -:106B20000000000000000000000000000000000065 -:106B30000000000000000000000000000000000055 +:106B000000004488000000220022CF0F4F4FBAFF40 +:106B100000FF04000800000A00A0000000000410AC +:106B2000082000003D3D3D3D3C00F0000F0F0F0FE1 +:106B3000303030FFFFFF4303000000000000000082 :106B40000000000000000000000000000000000045 -:106B50000000000000000000000000000000000035 +:106B5000F0AAF0AA00000000000000000000000001 :106B60000000000000000000000000000000000025 -:106B70003C3C00000000000000000000000000009D -:106B80000000000000000000000000000000000005 -:106B900000000000000000000000000000000000F5 -:106BA00000000000000000000000000000000000E5 -:106BB00000000000000000000000000000000000D5 +:106B70000000000000000000000000000000000015 +:106B8000000000000000000000110011CF0F4F4F67 +:106B900030FF00FF00040008000500500000000066 +:106BA000014002800000050505053C00F000FF0FD4 +:106BB0005F5F303030FFFFFF410000000000000049 :106BC00000000000000000000000000000000000C5 -:106BD00000000000000000000000000000000000B5 +:106BD00000003C003CFF000000000000000000003E :106BE00000000000000000000000000000000000A5 :106BF0000000000000000000000000000000000095 -:106C00000000000000000000000000000000000084 -:106C10000000000000000000000000000000000074 -:106C20000000000000000000000000000000000064 -:106C30000000000000000000000000000000000054 +:106C00000000000000000600900000690069FFFF1E +:106C1000FFFFA8A8A8A82400000005500AA00F5F45 +:106C20000FFF000000000000AF2FAF0FA0A0BCBC02 +:106C30003F3F0F0F00000000140C140C0000000078 :106C40000000000000000000000000000000000044 -:106C50000000000000000000000000000000000034 +:106C50000000000000000000C0CFA0A00000000065 :106C60000000000000000000000000000000000024 :106C70000000000000000000000000000000000014 -:106C80000000000000000000000000000000000004 -:106C900000000000000000000000000000000000F4 -:106CA00000000000000000000000000000000000E4 -:106CB00000000000000000000000000000000000D4 +:106C8000000000000000000000060090690069009C +:106C90002828AA00808080800000240005500AA0D7 +:106CA0000F5F0F0F0000000000002F2F0F0FA0A09C +:106CB000BCBC3C3C000000000000140C140C0000A4 :106CC00000000000000000000000000000000000C4 -:106CD00000000000000000000000000000000000B4 -:106CE0000000000000000000000000000000200084 -:106CF0002000000002000000000020002000200012 -:106D00002000000020000000200000000000200003 -:106D1000200000002000000084002000200020004F -:106D20002000000088000004200000030000040090 -:106D3000200020040000200000002000200020008F -:106D400020002000000020000000200000000000C3 -:106D50002000200002000000000020002000210090 -:106D600020002000000020000000200000000000A3 -:106D7000000000040000000000000000000000000F -:106D80000000000000000000000000000000000003 -:106D900000000000000040000000000000000000B3 -:106DA0000000000000000000400000000000400063 -:106DB00000000000000000000000000000000000D3 -:106DC0000000000000000000000040000000000083 -:106DD00000000000000000000000000000000000B3 -:106DE0002000000000000000400000000000000043 -:106DF000000000000000024000400200020002000B -:106E00000200020002000040020002100210020014 -:106E10000200020002000200020002000210020052 -:106E20000200020002000200000002100200000046 -:106E300004042020202004200000000000000000A6 -:106E40000000000000000000000000000000000042 -:106E50000000000000000000000000000000000032 -:106E6000000000000000040000040000000000001A -:106E700000080004000800080009004180088000A4 -:106E80008200820082088008000980008008800853 -:106E900080088000820882088408800084088000BE -:106EA000800080008008800800082000000800089A -:106EB0000000820982018009000902080000000820 -:106EC00000000000000000080008000800000008A2 -:106ED000000800082000000800080408040000085A -:106EE0000008020002000008000802080000000874 -:106EF000000800000000000000000000000000008A -:106F0000000000000000C0000000000000000000C1 -:106F10000000000000000000000000000000000071 -:106F20000000000000000000000000000000000061 -:106F30000000000000000000000000000000000051 -:106F40000000000000000000000000000000000041 -:106F50000000000000000000000000000000000031 -:106F60000000000000000000000000000000000021 -:106F70000000000000000000000000000000000011 -:106F80000000000000000000000000000000000001 -:106F900000000000000000000000000000000000F1 -:106FA00000000000000000000000000000000000E1 -:106FB00000000000000000000000000000000000D1 -:106FC00000000000000000000000000000000000C1 -:106FD00000000000000000000000000000000000B1 -:106FE0000000000000000000210000000000000080 -:106FF0000000000000000000000000000000000091 -:1070000000000000000000000000C0000000004080 -:10701000000084000000000000008200000000006A -:10702000040000000000000000000000000000005C -:1070300000000000000000000000000000000080D0 -:107040000000000000000000000000000000000040 -:107050000000000000000000000000000000000030 -:107060000000000000000000000000000000000020 -:107070000000000000000000000000000000000010 -:1070800000000000000000000000000000000200FE -:1070900000000000020000000000000000000000EE -:1070A00000000000000000000000000000000000E0 -:1070B000000011002000000000000000000000009F -:1070C00000040000000000000008000000000000B4 -:1070D00000000000000000000000000000000000B0 -:1070E0000010000000000000000004000000040088 -:1070F0000000000000000000000008000000000088 -:107100000000000020008440C00000002000C000FB -:1071100000000000200000000000000020008200AD -:10712000000000002000000000000000200000001F -:10713000000000000000000000000000000000004F -:10714000000000000000000000000000000000003F -:10715000000000000000000000000000000000002F -:10716000000000000000000000000000000000001F -:10717000000000000000000000000000000000000F -:1071800000000000000080000001000000008000FE -:1071900000000000080080000000000000008000E7 -:1071A00000000000000080000000000000008000DF -:1071B00000000000000000000000000000000000CF -:1071C00000000000000000000000000000000000BF -:1071D00000000000000000000000000000000000AF -:1071E000000000000000000000000000000000009F -:1071F0000000000000000000000000000000080087 -:10720000000000000000000000000000000000007E -:10721000C009C00000000000A000840000000000C1 -:10722000A005820000000000A00582000000000010 -:107230000009000000000000020000000000000043 -:10724000000000000000000000040040004000407A -:10725000000000000000000000000000000000002E -:107260000000000000000000000008000000000016 -:10727000000000000000000000000000000000000E -:1072800000000000000000000000000000000000FE -:1072900000000000000000000000000000000000EE -:1072A00000000000000000000000000000000000DE -:1072B00000000000000000000000000020040000AA -:1072C00000000900000000001000000000000000A5 -:1072D00000000000000000000000000000000000AE -:1072E000000000000000000000000000000000009E -:1072F0000500000000000000000000000000000089 -:107300000000000000000000000041C0000000007C -:10731000000041C000000201000041C00000000167 -:10732000000041C000000001000041C00000000159 -:10733000000041C00000000100000000000000004B -:107340000000000000000004010800000000000030 -:10735000000000000000000000000000000000002D -:10736000000000000000000000000000000000001D -:10737000000000000000000001000000000000000C -:1073800000000000000000000000000091910000DB -:107390001020000391800003A009000091800005E7 -:1073A000200900009180000505090000918000057A -:1073B0004009000091800005050900000000000060 -:1073C000000000000000000000000280000000003B -:1073D00000000000000000000000000000000000AD -:1073E000000000000000000000000000000000009D -:1073F000000000000000000000001000000000007D -:107400000000000000000000000000000000090073 -:1074100000212011830009000321031180000900CD -:10742000052100118000090005214011800009009C -:107430000521001180000900052140118000000095 -:10744000000000000000000009210000040080008E -:10745000000000000000000000000000000000002C -:10746000000000000000000000000000000000001C -:10747000000000000000000000000000000000000C -:1074800000000000000000000000000000000000FC -:10749000010000000001C000010000000001C00068 -:1074A000010000000001C000010000000001C00058 -:1074B000010000000001C000010000000001C00048 -:1074C00000000000000000000000000100000004B7 -:1074D00008000000000000000000000000000000A4 -:1074E000000000000000000000000000000000009C -:1074F000000000000000000000000000000000008C -:10750000000000000000000000000000000000007B -:10751000000000000001000003C0000000010000A6 -:1075200003C000000000000003C100000000400094 -:1075300003C100000000000003C100000000400083 -:1075400003C1000000000000000000000000A000D7 -:10755000A00001000000000000000000000000008A -:10756000000000000000000000000000000000001B -:107570000000000000000000000000000000040007 -:1075800000000000000000000000000000000000FB -:10759000000000000005000900209180000303099D -:1075A00000009180000300050500918300000005A4 -:1075B0004040918300030005050091830000000511 -:1075C0004040918300000000000000000000000027 -:1075D000800080002100000000000000000000008A -:1075E000000000000000000000000000000000009B -:1075F000000000000000000000000000000000008B -:1076000080000000000000000000000000000000FA -:10761000000000000000000020000380090083003B -:107620000300008009008380050900800900C10073 -:107630000509008009008380050900800900C10058 -:1076400005090080090000000000000000000000A3 -:1076500000008005000000000000000000000000A5 -:10766000000000000000000000000000000000001A -:10767000000000000000000000000000000000000A +:106CD00000000000000000000000C0CFAFAF0000C7 +:106CE0000000000000000000000020002000200440 +:106CF0002000C000880020002000100000002000BC +:106D000020002000201104000000210011802080BC +:106D1000209000000400200020020400110204055D +:106D20002080218021808880018000032091200024 +:106D30002000A0828900050021002090C0004000B2 +:106D400020002010208020002000000020002000D3 +:106D5000200004804100C000208020848800410081 +:106D600020002000880020002000000000004000DB +:106D70004102400000004002400200A089000000E3 +:106D800004C000C0214021C0000200821000C008E1 +:106D90002102090900C04000409040010000082184 +:106DA0000000054010042008410410040000000207 +:106DB00009020004200910842000200000090002BC +:106DC00020A00090000141404000004000000090E1 +:106DD000049000020002080040000040000240C091 +:106DE00010C0000000000000400000000000200073 +:106DF000200020002004000000000000000400002B +:106E00000200010002000400040020100202400001 +:106E10000102000040020800000000000800080015 +:106E20000910000300080800000040409000000026 +:106E30000000410008050410004100000200880025 +:106E400008000000001002104100040003100200BE +:106E5000001010100400C01089101002411008101A +:106E6000404000400800401008000000000084007E +:106E700080088002800882080008000000084000A6 +:106E800020080008100800008000820082004001F5 +:106E9000800810090008820909080000000889001C +:106EA000090840090008050140000084048404002A +:106EB0000000040882088408400800084000000818 +:106EC00004008408040800840000C0080208880147 +:106ED000000002088208000840080809800802082B +:106EE0008900800800080000C104808400080900AF +:106EF00040000000000000008800000002000000C8 +:106F0000000000000000880504001000880000094F +:106F10000000900090000000000020200000840984 +:106F2000C000000000218840004140080008002007 +:106F30000000000082000084A0100000C00000409B +:106F40008803008004414002024004004009000020 +:106F50000000090090000000042100000000000073 +:106F60000000000000000000000800000000000019 +:106F70000000C00000000908100000000000000030 +:106F80000000000041000500000000004100050075 +:106F9000040041004000030000000084040008A039 +:106FA00021000000080021001000000241C0101064 +:106FB0001084000000004182091000010000000060 +:106FC00008000000004008000540090221001000F0 +:106FD00003000000880040000000000000000000E6 +:106FE00000001000000000402100004000000000F0 +:106FF000000000000000A000200020002000080089 +:107000000000000000002005200020031000020006 +:1070100004040880050203200810A1008800A011C4 +:10702000000082110000100082020800900004009D +:107030008400A010020400008280C00083000000D1 +:1070400000098202A02040091010900000000409ED +:1070500004040002040010008200100084000040BC +:1070600008008400820000090003000010000000F6 +:107070000800000000410000000080008000800047 +:1070800000000000000000009000880080008000E8 +:10709000050084034120040010002100400000008E +:1070A00000000000200000000200000100000000BD +:1070B000000000A000A00000000010400200081026 +:1070C00000004100210840000000030100004020B2 +:1070D00021000200038802004188400000000010E7 +:1070E0000000A000000041004000210041000320FA +:1070F00004001090030010000008000400000000CD +:107100000000900002008800000004001000000051 +:10711000200004000008000400040400040004002F +:107120000021084000020000000000004000400074 +:10713000A0000000C0000800004100000000910015 +:107140004000010000110000000004118200824094 +:107150000000000000080000000000000000000027 +:1071600000000800080000001000000004000000FB +:1071700000008408A0008200840000410005000097 +:10718000000000000020000000000000000080005F +:107190000000800080A00000100100010904090027 +:1071A00000040004008421A0000041044004828403 +:1071B0008804030203000084000000000000200097 +:1071C00008A00004029011A0032002040390030011 +:1071D0000000000005000000000021840500000000 +:1071E000000000000000000040000000000000005F +:1071F0000088000000000000000003000000000004 +:1072000000000021000000000000002100008200BA +:1072100000000000840000048404040801008200CF +:107220009000820000000000200000000202000226 +:10723000002182000000000000111000004000004A +:107240000000211040044000000040000400200223 +:1072500000004003040000080000000000000109D5 +:107260000000820000028200200008800000000070 +:10727000091108000000C008041100000000A0006F +:1072800000000000000000000000000000020000FC +:10729000000000000000001003010001A000200019 +:1072A00000000000000004004100098800041000F4 +:1072B000000100000000008400000000C100000088 +:1072C00000000000080100000000000000000000B5 +:1072D000210003000000100000040900000200006B +:1072E000089010000000000040040000001020047E +:1072F000100008A000000000200000002100000095 +:107300000008000000000000000000000000000075 +:1073100000000001000088000000000000000300E1 +:10732000000000010000A0000001000000001000AB +:10733000000000C00101840200840001010000017E +:1073400000000000820100018200C001000008006E +:1073500001000000010000000000000002018400A4 +:107360000001200000000000200000000140008813 +:1073700040A0001000000000820100010000000099 +:1073800000000000000000000900000000000000F4 +:1073900000000000404111400940000305001100B9 +:1073A0000800000000400420000200080000400027 +:1073B0000000000000C010218000000900410820EA +:1073C00002080010000000101110000880100000DA +:1073D0008003410000001000000000000000800851 +:1073E000002000030020000040000000000020807A +:1073F00005008000000000094008000800040000AB +:10740000000000000000000800000008000000006C +:10741000000000000000008009000000414000085A +:10742000000000080080080010008500C100000076 +:1074300080000000000000002100000008A14100C1 +:107440000800080241000000000000008000000861 +:10745000880090002040C10300008021808000004F +:107460000000000300000000000000000000000019 +:1074700080000020000280000000001100000000D9 +:1074800000000041000000000000000000000000BB +:1074900000000000000000000008000000000100E3 +:1074A000000000900000000400A0880011000310FC +:1074B00002000200A000880000080100000001890D +:1074C0000090010000000100000010200200A00058 +:1074D000100140840300C000090182000400020280 +:1074E0008800000000012040204000000000000053 +:1074F0000000080008008801080000000000008863 +:10750000000000000001009000000000900000005A +:107510000100000000000000000000000000020068 +:107520000001000120002000010100000101010113 +:1075300000010000000002000000C0000001000087 +:107540001000000000002000000100000041008841 +:10755000C09000C00000000000000000000000001B +:107560000000000000A00188000000C00001000130 +:1075700000000001100000000000100100000000E9 +:1075800000000001000000000000000000000000FA +:107590000000100000000000000000000003004197 +:1075A00080110041204080100008100800000303F3 +:1075B00021211041000200090000001000200002FB +:1075C00041030020000800200000004100000020CE +:1075D0001141004000890000000000000000000090 +:1075E000000000000000000009801000008000087A +:1075F00000200008004180200003004104410020D9 +:1076000020081040004100000000000000000005BC +:1076100000000000000000000000000000004180A9 +:10762000000003000011000800020000000041807B +:1076300008002180100300000080000000004111BC +:10764000000000000509412021000000080800009A +:1076500041202100080020004121202110000809BC +:10766000000000008080800000008000008000009A +:10767000000000000000000080200000008080006A :1076800000000000000000000000000000000000FA -:107690000000000000000000000000000084010065 -:1076A000C000000000840100C0020001008401004D -:1076B000C000000100840100C0020001008401003C -:1076C000C000000100840100000000000000000074 -:1076D000000000000804000000000000000000009E -:1076E000000000000000000000000000000000009A -:1076F000000000000000000000000000000000008A -:107700000000000000000000000000000000000079 -:1077100000000000000000000000480000E0000041 -:107720000000500000E000000000480000E0000001 -:107730000000480000E000000000480000E00000F9 -:107740000000500000E00000000000000000000009 -:1077500000000000000000018000000000000000A8 -:107760000000000000000000000000000000000019 -:107770000000000000000000000000000000000009 -:1077800000000000000000E0000000000000000019 -:10779000000000000000000000000000FFFFFFFFED -:1077A0000000AAAA0000FFFF0000AAAA0000FFFF35 -:1077B0000000AAAA0000FFFF0000AAAA0000FFFF25 -:1077C0000000AAAA0000FFFF0000AAAA0000000013 -:1077D00000000000000000AA00AA00000000000055 -:1077E0000000000000000000000000000000000099 -:1077F0000000000000000000000000000000000089 -:107800000000000000000000000000000000000078 -:107810000000000000000000000000000000000068 -:1078200000000000AAAA000000000000AAAA0000B0 -:1078300000000000AAAA000000000000AAAA0000A0 -:1078400000000000AAAA000000000000AAAA000090 -:10785000000000000000000000AA00AA00000000D4 -:107860000000000000000000000000000000000018 -:107870000000000000000000000000000000000008 -:1078800000000000000000000000000000000000F8 -:1078900000000000000000000000000000000000E8 -:1078A00055550000FFFF000055550000FFFF000088 -:1078B00055550000FFFF000055550000FFFF000078 -:1078C00055550000FFFF0000555500000000FFFF68 -:1078D000000000000000000000000F000F005555E0 -:1078E0000000000000000000000000000000000098 -:1078F0000000000000000000000000000000000088 -:107900000000000000000000000000000000000077 -:107910000000000000000000000000000000000067 -:107920000000555500000000000055550000000003 -:1079300000005555000000000000555500000000F3 -:107940000000555500000000000055550000FFFFE5 -:10795000FFFF000000000000000000000F000F000B -:10796000555500000000000000000000000000006D -:107970000000000000000000000000000000000007 -:1079800000000000000000000000000000000000F7 -:1079900000000000000000000000000000000000E7 -:1079A00000000000406380018021920240E38001DA -:1079B0008021920240E380018021920240E3800115 -:1079C0008021920240E380018021920240E3800105 -:1079D0008021820200000000000000000000006121 -:1079E000000F05050000000000000000000000007E -:1079F0000000000000000000000000000000000087 -:107A00000000000000000000000000000000006115 -:107A10000007000D00000000000000000000000052 -:107A200000000000000000300030C000C000000076 -:107A3000003C404040400000003C000003030000C8 -:107A4000003C00000F000000003C000003030000A9 -:107A5000003C00000F0000000000000000000000DB -:107A60000000000000000000000000000000000016 -:107A70000000000000000000000000000000000006 -:107A800000000000000000000000000000000000F6 -:107A900000000000000000000000000000000000E6 -:107AA000000000000000000000300030C000C000F6 -:107AB0000000003C404040400000003C0000030348 -:107AC0000000003C00000F000000003C0000030329 -:107AD0000000003C00000F0000000000000000005B -:107AE0000000000000000000000000000000000096 -:107AF0000000000000000000000000000000000086 -:107B00000000000000000000000000000000000075 -:107B10000000000000000000000000000000000065 -:107B200000000000000000000000C0C000003C0099 -:107B30000000000A000A0C000C0000000000000019 -:107B40000000000000000C000C000000000000001D -:107B50000000000000000C000C000000000000000D -:107B60000000000000000000003C003C000000009D -:107B70000000000000000000000000000000000005 -:107B800000000000000000000000000000000000F5 -:107B900000000000000000000000000000000000E5 -:107BA000000000000000000000000000C0C0000055 -:107BB0003C000000000A000A0C000C00000F000F3F -:107BC0000C0C0C0C000F000F0C000C00000F000F31 -:107BD0000C0C0C0C000F000F0C000C00000000003F -:107BE00000000000000000000000003C003C00001D -:107BF0000000000000000000000000000000000085 -:107C00000000000000000000000000000000000074 -:107C10000000000000000000000000000000000064 -:107C200000000000000020002000200020002000B4 -:107C30002000200020002000200020002000200044 -:107C40002000000084002000200000002000200010 -:107C50002000200020002000200020002000200024 -:107C600020008800200000022000200000002000EA -:107C70002000200020002000200020002003200001 -:107C80002000200020002000200020000000200014 -:107C900020002000200020002008200020002000DC -:107CA0002000200084002000009000000000000060 -:107CB0000000004000000000000000000000000084 -:107CC00000000000000000000000000000000000B4 -:107CD0000000000000000000000200000000009012 -:107CE000000000020002000000000000000240024C -:107CF00000020000000000000090000000080008E2 -:107D00000000000000000000000000000000000073 -:107D10000000000000000000000000000000000063 -:107D20000000000000400000000000000000000013 -:107D30000000000000000000000000000000000043 -:107D400000000000000000000800000000008400A7 -:107D5000000000000000000000000000040000001F -:107D6000000000200040002090800000002004005F -:107D7000004000A000000000000000000000000023 -:107D800000000000000000000000000001000000F2 -:107D900000000000000000000000000004000000DF -:107DA00000000000000000000000000000000000D3 -:107DB00000000000000000080000000000000000BB -:107DC00000000000000000000000040000000000AF -:107DD000000000000000000800000000000000009B -:107DE000000000000001000100010020000000016F -:107DF00080000001004104000408040000000000AD -:107E00000000000000000000000000000000020070 -:107E1000000000000000000000080000000000005A -:107E200000080004008405000000000000080000B5 -:107E3000000000000000000000000400000000003E -:107E40000000000000000000000000000000000032 -:107E5000000000000008000000000000000000001A -:107E60000000000000000000000000000000000012 -:107E700000000400000000000000000300000000FB -:107E8000000000000003002100000000000000418D -:107E900000000000000001080000000000000000D9 -:107EA00000000000000000000000000000000000D2 -:107EB00000000000050000000000000004000000B9 -:107EC000000000200400000000000000000000008E -:107ED00000000000000000000000000000000000A2 -:107EE0000000000000000000000000000000000092 -:107EF0000000000000000000000000000000000082 -:107F00000000000000000000000000000000000071 -:107F1000000000000000000004000000000000005D -:107F20000000000000000000000000000000000051 -:107F30000000000000000000000000000000000041 -:107F4000000000000004000000210000000000000C -:107F50000008000000000000000000000000A00079 -:107F60000000000000000000000000000080000091 -:107F70000080000000000080000000000000000001 -:107F800000040000000000080008000000000000DD -:107F900000000000000000000000000000000000E1 -:107FA00000000000000000080000000000000000C9 -:107FB00008000000000000000000000000000000B9 -:107FC00000000000000000000000000000000000B1 -:107FD000000000000000040000000000000000009D -:107FE000000000000400000000000000000000206D -:107FF00000000002000000000040008800000000B7 -:108000000000000000000000000000000000000070 -:10801000000000000000000000000000040000005C -:108020000000000000000000000000000000000050 -:108030000000000000000000000000000000000040 -:108040000000000000000000000000000000000030 -:108050000000000000000000000000000000000020 -:108060000000000000000000000008009000000078 -:1080700000000000400000000000000000000000C0 -:1080800000000000001000210003000000000008B4 -:1080900000000003000000080008000000200000AD -:1080A00000000000000000000000000000000000D0 -:1080B0000000000000009000000000000000000030 -:1080C00000000000000000000000000000000000B0 -:1080D00000000000000000000000000000000000A0 -:1080E0000000000000000000000000008000000010 -:1080F0000000000000008000000000000000000000 -:10810000000000000000000100000000000000006E -:10811000000000000000000000000000000000015E -:10812000000000000000000000000000050000004A -:10813000000000000000000000000000000000003F -:10814000000000000000000000000000000000002F -:108150000000000000000000000000000000080017 -:1081600000000000000000000000000010000000FF -:108170000200000000000000880000000100000074 -:108180000105004100030000001000000000000095 -:1081900000000000000000000000000000000000DF -:1081A00000000000000000000009000000000000C6 -:1081B00000000000000000000000000000000000BF -:1081C00000000000000000000000000000000000AF -:1081D000000000000000000000000000000000009F -:1081E000000000000000000000000000000000008F -:1081F000000000000000000000000000000002007D -:108200000000040000000000000000010000000069 -:10821000000000000000000000000000000000005E -:10822000000000000000000000000000000000004E -:10823000000000000000000000000000000000003E -:10824000000000000000000000000000000000002E -:10825000000000000000000000000000000000001E -:10826000000000000000000000000000000000000E -:1082700000000000000001C002400008C0880000AB -:1082800000C0104000080490000000000000000042 -:1082900000000000000000000000000000000000DE -:1082A000000090000000000000000000000000003E -:1082B00000000000000000000000000000000000BE -:1082C00000000000000000000000000000000000AE -:1082D000000000000000000000000000000000009E -:1082E000000000000000000000000000000000008E -:1082F00000000000000000000480008000800000FA -:1083000000000980808000808000000000000000E4 -:10831000000000000000000000000000000000005D -:1083200000001100800000000000000000000000BC -:10833000000000000000000000000000000000003D -:10834000000000000000000000000000000000002D -:10835000000000000000000000000000000000001D -:10836000000000000000000000000000000000000D -:10837000000000000000000000008000802080411C -:10838000808000008000804180418000000000006B -:1083900000000000000000000000000000000000DD -:1083A00000000000000000800000008000000000CD -:1083B00000000000000000000000000000000000BD -:1083C00000000000000000000000000000000000AD -:1083D000000000000000000000000000000000009D -:1083E000000000000000000000000000000000008D -:1083F00000000000000000000000000040004001FC -:108400000801C0080000400040830801C08400004B -:10841000000000000000000000000000000000005C -:1084200000000000000000000020000000C000006C -:10843000000000000000000000000000000000003C -:10844000000000000000000000000000000000002C -:10845000000000000000000000000000000000001C -:10846000000000000000000000000000000000000C -:1084700000000000000000000000000000004002BA -:108480000082408401C00001C1200090020800C0A9 -:1084900000000000000000000000000000000000DC -:1084A000000000000000000021000088080001001A -:1084B00000000000000000000000000000000000BC -:1084C00000000000000000000000000000000000AC -:1084D000000000000000000000000000000000009C -:1084E000000000000000000000000000000000008C -:1084F000000000000000000000000000000000007C -:108500008080008580804180000184000000008020 -:1085100005800000000000000000000000000000D6 -:10852000000000000000000000004100008080000A -:108530000900000000000000000000000000000032 -:10854000000000000000000000000000000000002B -:10855000000000000000000000000000000000001B -:10856000000000000000000000000000000000000B -:1085700000000000000000000000000000000000FB -:1085800000008020800380880080000180000003BC -:10859000002080000000000000000000000000003B -:1085A00000000000000000000000000000110000BA -:1085B000008000000000000000000000000000003B -:1085C00000000000000000000000000000000000AB -:1085D000000000000000000000000000000000009B -:1085E000000000000000000000000000000000008B -:1085F000000000000000000000000000000000007B -:1086000000000000C0018200844188040001C00015 -:1086100088009083100200000000000000000000AD -:108620000000000000000000000000000000000149 -:1086300000000040000000000000000000000000FA -:10864000000000000000000000000000000000002A -:10865000000000000000000000000000000000001A -:10866000000000000000000000000000000000000A -:1086700000000000000000000000000000000000FA -:1086800000000000000000000000080000420000A0 -:108690000000000080008442000000000000000094 -:1086A00000000000000000000000000000000000CA -:1086B0000000000007008221000000000000000010 -:1086C00000000000000000000000000000000000AA -:1086D000000000000000000000000000000000009A -:1086E000000000000000000000000000000000008A -:1086F000000000000000000000000000000000007A -:108700000000000000000000000000000000000069 -:108710000000000000000000000000000000000059 -:108720000000000000000000000000000000000049 -:108730000000000000000000F0F000000000000059 -:108740000000000000000000000000000000000029 -:108750000000000000000000000000000000000019 -:108760000000000000000000000000000000000009 -:1087700000000000000000000000000000000000F9 -:1087800000000000000000000000000000000000E9 -:1087900000000000000000000000000000000000D9 -:1087A00000000000000000000000000000000000C9 -:1087B00000000000000000000000F0F000000000D9 -:1087C00000000000000000000000000000000000A9 -:1087D0000000000000000000000000000000000099 -:1087E0000000000000000000000000000000000089 -:1087F0000000000000000000000000000000000079 -:1088000000000000000000000000000041084000DF -:1088100000842106000043084000008421860000F7 -:108820000000000000000000000000000000000048 -:108830000000000000000000000000000000000038 -:108840000000000000000000000000000000000028 -:108850000000000000000000000000000000000018 -:108860000000000000000000000000000000000008 -:1088700000000000000000000000000000000000F8 -:1088800000000000000000000000000000000000E8 -:1088900000000000000000000000000000000000D8 -:1088A00000000000000000000000000000000000C8 -:1088B0000000000000000000FFFF0000FFFF0000BC -:1088C00000000000000000000000000000000000A8 -:1088D0000000000000000000000000000000000098 -:1088E0000000000000000000000000000000000088 -:1088F0000000000000000000000000000000000078 -:108900000000000000000000000000000000000067 -:108910000000000000000000000000000000000057 -:108920000000000000000000000000000000000047 -:108930000000000000000000000000000000000037 -:108940000000000000000000000000000000000027 -:108950000000000000000000000000000000000017 -:108960000000000000000000000000000000000007 -:1089700000000000000000000000000000000000F7 -:1089800000000000000000000000000000000000E7 -:1089900000000061000E000D00080000100020081B -:1089A000004000080000000000000000000000007F -:1089B00000000000000000000000000005002A0088 -:1089C000054000A8000000000000000000000000BA -:1089D0000000000000000000000000000000000097 -:1089E0000000000000000000000000000000000087 -:1089F0000000000000000000000000000000000077 -:108A00000000000000000000000000000000000066 -:108A100000000000000000000F0F0F0F000000001A -:108A20000000000000000000000000000000000046 -:108A30000000000000000000000000000000000036 -:108A40000000000000000000000000000000000026 -:108A50000000000000000000000000000000000016 -:108A60000000000000000000000000000000000006 -:108A700000000000000000000000000000000000F6 -:108A800000000000000000000000000000000000E6 -:108A9000000000000000000000000F0F0F0F00009A -:108AA00000000000000000000000000000000000C6 -:108AB00000000000000000000000000000000000B6 -:108AC00000000000000000000000000000000000A6 -:108AD0000000000000000000000000000000000096 -:108AE0000000000000000000000000000000000086 -:108AF0000000000000000000000000000000000076 -:108B00000000000000000000000000000000000065 -:108B10000000000000000000000000000000000055 -:108B20000000000000000000000000000000000045 -:108B30000000000000000000000000000000000035 -:108B40000000000000000000000000000000000025 -:108B50000000000000000000000000000000000015 -:108B60000000000000000000000000000000000005 -:108B700000000000000000000000000000000000F5 -:108B800000000000000000000000000000000000E5 -:108B900000000000000000000000000000000000D5 -:108BA00000000000000000000000000000000000C5 -:108BB00000000000000000000000000000000000B5 -:108BC00000000000000000000000000000000000A5 -:108BD0000000000000000000000000000000000095 -:108BE0000000000020000000200020000000200005 -:108BF000000000000000000220002004000001002E -:108C00000000000000000000200020000000200004 -:108C100000000000000000002000000084000000B0 -:108C200004000000000300000000200020000000FD -:108C30000400000400000000040020000004040000 -:108C4000880020000000000000002000200000003C -:108C50000000000084000000200000000000200050 -:108C600004002000000000000000000000000000E0 -:108C700000000004000400000000000000000000EC -:108C800008000000000000000000000000000000DC -:108C90000000400000004000000000002000000034 -:108CA00000000000000000000000000000000000C4 -:108CB00000000000400000000000000000000084F0 -:108CC00000000000000000000000000000000000A4 -:108CD0000000400000000000000000000000000054 -:108CE0000000200000000000100000000000000054 -:108CF0000010000000100010000000000000000044 -:108D000000000080000000100000040000000000CF -:108D100010400300100010000800080900100010A7 -:108D200000400000000000400000000000000000C3 -:108D30000000000000000000000000000000000033 -:108D4000020000000000000002000000000000001F -:108D50000000000800000000000000000400000007 -:108D60000000040000000000000080040000000873 -:108D700000000008000000080008000000000000DB -:108D8000000800C0001000080008040000000408EB -:108D9000000080081000801080080000000004001F -:108DA00000080400000000080008000000000000A7 -:108DB000000800000008000000000008000000009B -:108DC000000000080000000000080008000000008B -:108DD000000800080010000000000008000000006B -:108DE0000000000800080000000800080000000063 -:108DF0000040000000000000000000000000000033 -:108E00000000000000000000000000000000000062 -:108E10000000000000000000000000000000000052 -:108E20000000000001000000000000000000000041 -:108E30000000000000000000000000000000000032 -:108E40000000000000000000000000000000000022 -:108E5000000000020003000000000000000000000D -:108E60000000000000000000000001000000000001 -:108E700000000000000000000000000000000000F2 -:108E800000000000000000000000000000000000E2 -:108E900000000000000000000000000000000000D2 -:108EA00000000000000002000000000000000000C0 -:108EB00000000000000000000000000000000000B2 -:108EC0000000000000000000080000000082000018 -:108ED000000000000000000000000800000000008A -:108EE0000000000000000000000000002000000062 -:108EF000000000000100008000000000000082006F -:108F0000000000000000000000040000C000C000DD -:108F10000000000000000000000000000000010050 -:108F20000000000000000000000000410000000000 -:108F30000000000000000000000000000800000029 -:108F40000000000000000000000000000000000021 -:108F50000000000000000000000000000000000011 -:108F600000000000000008000000010000000000F8 -:108F7000008000000000200000040000000000004D -:108F800000000000000000000000000000000000E1 -:108F90000000410000000000000000004000000050 -:108FA0002000020000000200040000000000000099 -:108FB000000000000000008800000088020000009F -:108FC000000000000000000000A000820008000077 -:108FD0000000000000000000000000000000000091 -:108FE000000000000000000000A000A01008000029 -:108FF0000000000400000000000000000800000065 -:1090000000000000080000000000C0000000080090 -:109010000000000000000000000000000000000050 -:1090200000000000000000000000000000800000C0 -:1090300000000000000001000000018000000000AE -:109040000000000000000000000000000000000020 -:109050000000000300000000000300000000000802 -:109060000000000800000000000000009000000068 -:1090700000000000000000000000000000000000F0 -:1090800000000000000000000000000000000000E0 -:1090900000000000000000000000000000000000D0 -:1090A00000000000000000000000000000C00040C0 -:1090B000000000C000840000020000000810000052 -:1090C00000000000000000000000000000000000A0 -:1090D0000000000000000000000000000000000090 -:1090E0000000000000000000000000000000000080 -:1090F00000000000000000C00000000000000000B0 -:10910000000000000000000000000000000000005F -:109110000000000000000000080000000000000047 -:10912000000000000000000000000000000000003F -:10913000000000000000000000000000000000002F -:109140000008000000000000000000000000000017 -:10915000000000000000000000000000000000000F -:1091600000000000000000000000000000000000FF -:1091700000000000000000000000000000000000EF -:1091800000000000000000000000000000000000DF -:1091900008000000000000000000000000000000C7 -:1091A00000000000000000000000000000000000BF -:1091B00000000000000000000000000000000000AF -:1091C000000000000000000000000000040000009B -:1091D000000000A0000000000000000000000000EF -:1091E00000000082000000000000000000000000FD -:1091F000000000000000000000000000010000006E -:10920000000000000000000000000000000000005E -:1092100000000000009000900000004000000000EE -:10922000000000000100000000000000000000003D -:10923000000000000000000000000000000000002E -:10924000000000000000000000000000000000001E -:10925000000000000000000000000000000000000E -:1092600000000000000000000000000000000000FE -:1092700000000000000001000000000000001100DC -:1092800021000000000000000000000000000000BD -:1092900000000000000000000000000000000000CE -:1092A000000000000000110000210000000000008C -:1092B00000000000000000000000000000000000AE -:1092C000000000000000000000000000000000009E -:1092D000000000000000000000000000000000008E -:1092E000000000000000000000000000000000007E -:1092F000000000000000000011002100000000003C -:109300000041090000030080000000000000000090 -:10931000000000000000000000000000000000004D -:1093200000000000000000000008000011400000E4 -:10933000000000000000000000000000000000002D -:10934000000000000000000000000000000000001D -:10935000000000000000000000000000000000000D -:1093600000000000000000000000000000000000FD -:1093700000000000000000000000004109000003A0 -:1093800000800001010000000088000000000000D3 -:1093900000000000000000000000000000000000CD -:1093A00000000000000000000000000100000100BB -:1093B00000000000000000000000000000000000AD -:1093C000000000000000000000000000000000009D -:1093D000000000000000000000000000000000008D -:1093E000000000000000000000000000000000007D -:1093F000000000000000000000000000000101006B -:10940000000000880000880000000100000000004B -:10941000000000000000000000000000000000004C -:10942000000002000000000000000000000020001A -:10943000000100000000000000000000000000002B -:10944000000000000000000000000000000000001C -:10945000000000000000000000000000000000000C -:1094600000000000000000000000000000000000FC -:1094700000000000000000000000000000000000EC -:109480000800000001000000000000004100000092 -:1094900000000000000000000000000000000000CC -:1094A000000000008000000000000000000000003C -:1094B00080000008400000000000000000000000E4 -:1094C000000000000000000000000000000000009C -:1094D000000000000000000000000000000000008C -:1094E000000000000000000000000000000000007C -:1094F000000000000000000000000000000000006C -:109500000000800000004100000000111000000079 -:10951000000000000000000000000000000000004B -:10952000000000000000000000000000000000003B -:109530000005110000000000000000000000000015 -:10954000000000000000000000000000000000001B -:10955000000000000000000000000000000000000B -:1095600000000000000000000000000000000000FB -:1095700000000000000000000000000000000000EB -:1095800000000000201100000000000000010100A8 -:1095900000000000000000000000000000000000CB -:1095A00000000000000000000000000000000000BB -:1095B00000000000010000000000000000000000AA -:1095C000000000000000000000000000000000009B -:1095D000000000000000000000000000000000008B -:1095E000000000000000000000000000000000007B -:1095F000000000000000000000000000000000006B -:10960000000000000000000100000000000000E079 -:109610000000814100000000000000000000000088 -:10962000000000000000000000000000000000003A -:1096300000000000000000E000000000000000004A -:10964000000000000000000000000000000000001A -:10965000000000000000000000000000000000000A -:1096600000000000000000000000000000000000FA -:1096700000000000000000000000000000000000EA -:10968000000000000000000000E000008141000038 -:1096900000000000000000000000000000000000CA -:1096A00000000000000000000000000000000000BA -:1096B00000000000000000000000000000000000AA -:1096C000000000000000000000000000000000009A -:1096D000000000000000000000000000000000008A -:1096E000000000000000000000000000000000007A -:1096F000000000000000000000000000000000006A -:109700000000000000000000000000000000000059 -:109710000000000000000000000000000000000049 -:109720000000000000000000000000000000000039 -:109730000000000000000000000000000000000029 -:109740000000000000000000000000000000000019 -:109750000000000000000000000000000000000009 -:1097600000000000000000000000000000000000F9 -:1097700000000000000000000000000000000000E9 -:1097800000000000000000000000000000000000D9 -:1097900000000000000000000000000000000000C9 -:1097A00000000000000000000000001400000000A5 -:1097B00000000000000000000000000000000000A9 -:1097C0000000000000000000000000000000000099 -:1097D0000000000000000000000000000000000089 -:1097E0000000000000000000000000000000000079 -:1097F0000000000000000000000000000000000069 -:109800000000000000000000000000000000000058 -:109810000000000000000000000000000000000048 -:109820000000000000000000000000000014000024 -:109830000000000000000000000000000000000028 -:109840000000000000000000000000000000000018 -:109850000000000000000000000000000000000008 -:1098600000000000000000000000000000000000F8 -:1098700000000000000000000000000000000000E8 -:1098800000000000000000000000000000000000D8 -:1098900000000000000000400006000C0000000076 -:1098A00000000000000000000000000000000000B8 -:1098B00000000000000000000000000000000000A8 -:1098C0000006000C00000000000000000000000086 -:1098D0000000001000000000000000000010000068 -:1098E0000000000000000000000000000000000078 -:1098F0000000000000000000000000000000000068 -:109900000000000000000000000000000000000057 -:1099100000400006000C000000000F0FFFFF0000D9 -:109920000000000000000000000000000000000037 -:109930000000000000000000000000000000000027 -:109940000000FF0000FF0000000000000000000019 -:109950000000000000000000000000000000000007 -:1099600000000000000000000000000000000000F7 -:1099700000000000000000000000000000000000E7 -:1099800000000000000000000000000000000000D7 -:1099900000000000FF00FFFF000000000F0F0000AC -:1099A00000000000000000000000000000000000B7 -:1099B00000000000000000000000000000000000A7 -:1099C00000000000FF0000FF000000000000000099 -:1099D0000000000000000000000000000000000087 -:1099E0000000000000000000000000000000000077 -:1099F0000000000000000000000000000000000067 -:109A00000000000000000000000000000000000056 -:109A1000000000000000FF00000000000000000047 -:109A2000F0F0000000000000000000000000000056 -:109A30000000000000000000000000000000000026 -:109A4000000000000000FF0000FF00000000000018 -:109A50000000000000000000000000000000000006 -:109A600000000000000000000000000000000000F6 -:109A700000000000000000000000000000000000E6 -:109A800000000000000000000000000000000000D6 -:109A900000000000000000000000F0F000000000E6 -:109AA0000000F0F0000000000000000000000000D6 -:109AB00000000000000000000000000000000000A6 -:109AC0000000000000000000FF0000FF0000000098 -:109AD0000000000000000000000000000000000086 -:109AE0000000000000000000000000000000000076 -:109AF0000000000000000000000000000000000066 -:109B00000000000000000000000000000000000055 -:109B1000000000000000000000000000F0F0000065 -:109B200000000000000020002000200000000000D5 -:109B30000000000000000000000000000000020023 -:109B40000000000002000000000000000000000013 -:109B500000000000000000000000000000002000E5 -:109B600000030000000020000000000000000000D2 -:109B700000000000000000000000000004000400DD -:109B800010000000000000000000000000000000C5 -:109B90000000040000000000880000000000200019 -:109BA0002100000000000000000000000000000094 -:109BB00000000000000000000000000000000000A5 -:109BC0000000000041000000000000000000000054 -:109BD00000000002000240020090000200020002A9 -:109BE0000002000000000000000000000000000073 -:109BF00000000000008800840082000000000000D7 -:109C000000008000000000000000000000000000D4 -:109C10001000000000000000000000000000000034 -:109C20000000100000000000000000000000000024 -:109C30000000000000000000000000000000000024 -:109C40000000000400000000000000000000000010 -:109C500000000000000000000000000000400000C4 -:109C600000000004000000000000000000000000F0 -:109C700000000000000000000000000000000000E4 -:109C800000000200000000000000000000000000D2 -:109C900000000000000000000000000000000000C4 -:109CA00000000000000000000000000000000000B4 -:109CB00000820000008200820000000000002000FE -:109CC000000000000001000000000000000005008E -:109CD000000000000000000000000010001000A0C4 -:109CE0000088000000890000000000000000000063 -:109CF0000000000000000000000000000000000064 -:109D00000000000000000000000000000000000053 -:109D1000000000000000000000000008000000003B -:109D200000000000000000080000A000000000008B -:109D30000000000000000000000000000000000023 -:109D40000000000000000000000300000000000010 -:109D50000000000000000000000000000000000003 -:109D600004000000000000000000000000000000EF -:109D7000000000000000000000008800000000005B -:109D80000021002100210021000800000003000044 -:109D90000021002100210021000000080002000035 -:109DA0000021002100210021000800000000000027 -:109DB00000000000000000000000000000000000A3 -:109DC0000000000000000000000000000000000093 -:109DD0000000000000000000000000000000000083 -:109DE0000000000000000000000000000000000073 -:109DF0000000000000000000000000000000000063 -:109E00000000000000000000000000000000000052 -:109E1000000000000000000000080000000000003A -:109E200003000000000000000000000000008200AD -:109E3000824082000000000000000800000082054F -:109E4000820982050000000000000000000082403E -:109E500082008200000000000000000000000000FE -:109E600000000000000000000000400000000000B2 -:109E700000000000000000000000000000000000E2 -:109E8000000000000000040000000000080088003E -:109E900000000800A000000000000000000000001A -:109EA00000000000000000000000000000000000B2 -:109EB00000000000000000000000000000000000A2 -:109EC000008400000084000000000000000000008A -:109ED0000000000000000010001000100000001042 -:109EE0000000000000000000000000000000000072 -:109EF0000000000000000000000000000000000062 -:109F00000000000000000000000000000000000051 -:109F10000000000000000000000000000000000041 -:109F20000000000000000000000000000000000031 -:109F30000000000000000800000000000000000019 -:109F400000000000080000000000000000000011F8 -:109F500000000000000008000000000000000003F6 -:109F600000000000000500000000000000000000EC -:109F700000020000000000000000000000000000DF -:109F800000000000000000000000000000000000D1 -:109F90000002902100210000000082080000000063 -:109FA0000000000000400000000000000800000069 -:109FB00020000000000008840000000000000000F5 -:109FC0000000000000000000000008000000000089 -:109FD00003000090000000000000000000000000EE -:109FE00000840000000000000000000000000000ED -:109FF0000000000000000000000000000000000061 -:10A000000000000000000000000000000000000050 -:10A010000000000000000000000000000000000040 -:10A020000000000000000000000000C00000000070 -:10A030000000800000000000000000000800080090 -:10A04000C002000000000000000000000008080836 -:10A0500000000008000000000000000008000800E8 -:10A06000C00000000000000000000002000200002C -:10A0700000020000000000000000000000000000DE -:10A080000000000082000000000800000000000046 -:10A090000003000320000000000000080000000092 -:10A0A000000000008200000000080000000000081E -:10A0B000000300000000000000000000000000009D -:10A0C000000000000000000000001108200800004F -:10A0D0000000000020000000000000000000000060 -:10A0E0000000000000200000000000000000000050 -:10A0F0000000000000000000000000000000000060 -:10A10000000000000000000000000000000000004F -:10A1100000000000000080000000000000000000BF -:10A12000000000000000000000000000000000002F -:10A13000000000000000000000000000000000001F -:10A1400000000000000000000000090000400000C6 -:10A1500000000200000000000000000000000000FD -:10A1600000000000000000000000090000400000A6 -:10A1700000000000000000000000000100010001DC -:10A1800000C00001020100C001050001000100083B -:10A1900000040001C00100C0000000010001000136 -:10A1A00000C00001020100C0010300000101001015 -:10A1B00000040001C00100C0000000000000000019 -:10A1C0000000000000000000000008021000000075 -:10A1D00000000000800000000000000000000000FF -:10A1E0000000000000000000000008111000000046 -:10A1F00000000000000000000000000000410041DD -:10A2000000410082004100410082084100401141AC -:10A210000080008000418041008900000041004131 -:10A220000041008200410041008208C10040084115 -:10A23000000000800041804100890000000005000E -:10A24000000000000000000000000000A00021004D -:10A250000080000000000000000000030000050076 -:10A26000000000000000000000000000A00021002D -:10A2700000800000000000000000002000004100FD -:10A2800003000000008041008900000003008200FC -:10A2900009000002A0004100C100008080004100D0 -:10A2A00003000000008041008900000003008400DA -:10A2B0000900008083004100C10000808000000090 -:10A2C000000000000000000000000000000004008A -:10A2D00040840082400020000000000000010000D7 -:10A2E000000000000000000000000000000004006A -:10A2F00040820082400020000000000000000000BA -:10A3000001000100000000C00100C00000000100C9 -:10A31000410084040084C1001100C1000082820059 -:10A3200001000100000000C00100C00000000100A9 -:10A33000080084040084C0021100C1000082820071 -:10A34000000000000000000000000000000000000D -:10A3500000100000000000000000000000000000ED -:10A3600000000000000000000000000000000000ED -:10A37000009000000000000000000000000000004D -:10A38000000000C00001C0C100000000000100C0CA -:10A3900002100091000100C1010000000001000056 -:10A3A000000000C00001C0C100000000000100C0AA -:10A3B00002100091000100C1010000000001000036 -:10A3C000000000000000000000000000000000008D -:10A3D00000000080000000000000000000000000FD -:10A3E000000000000000000000000000000000006D -:10A3F000000000000000000000000000000000005D -:10A40000000000000080004180C100000000004109 -:10A41000008400200041004100C10800000000410C -:10A42000000900000080004180C1000000000041E0 -:10A43000008400200041004100C1080000000041EC -:10A4400000090000000080050083000000000000FB -:10A450000000000000C180000005000000000000B6 -:10A4600000000000000080050083000000000000E4 -:10A470000000000000C18000000500000000000096 -:10A48000000000000000C100800080C10000410207 -:10A49000800010004100C141800080100000410098 -:10A4A000000080004100C100800080C10000410226 -:10A4B000800090004100C1418000801000004100F8 -:10A4C0000000800041000000040000830000000044 -:10A4D000000000000000000904000000000000006F -:10A4E00000000000000000000400008300000000E5 -:10A4F000000000000000000904000000000000004F -:10A500000000000000000000C1004000C0C10000C9 -:10A510000100200084000100C1898200C000000009 -:10A5200001000000C0000100C1004000C0C10000E7 -:10A530000100200010000100C1898200C00000005D -:10A5400001000000C0000100000000000000000049 -:10A550000000000000000000810000E00000480052 -:10A5600000000000000000000000000000000000EB -:10A570000000000000000000810000E00000480032 -:10A5800000000000000000000000000000000000CB -:10A590000042000000000000000081120088070057 -:10A5A0004800000000000000420000000000000021 -:10A5B0000042000000000000000081120088070037 -:10A5C0004800000000000000420000000000000001 -:10A5D000000000000000000000000000000000007B -:10A5E000000000000000000000000000000000006B -:10A5F000000000000000000000000000000000005B -:10A60000000000000000000000000000000000004A -:10A61000000000000000000000000000000000003A -:10A62000000000000000000000000000000000002A -:10A63000000000000000000000000000000000001A -:10A64000000000000000000000000000000000000A -:10A6500000000000000000000000000000000000FA -:10A6600000000000000000000000000000000000EA -:10A6700000000000000000000000000000000000DA -:10A6800000000000000000000000000000000000CA -:10A6900000000000000000000000000000000000BA -:10A6A00000000000000000000000000000000000AA -:10A6B000000000000000000000000000000000009A -:10A6C0000000000000000000000000000000747B9B -:10A6D000000000000000000000000000000000007A -:10A6E000000000000000000000000000DE2E747B6F -:10A6F000000000000000000000000000000000005A -:10A70000000000000000000000000000DE2E00003D -:10A71000757B000000000000000000000000000049 -:10A720000000000000000000000000000000DEAE9D -:10A73000757B000000000000000000000000000029 -:10A740000000000000000000000000000000DEAE7D -:10A75000615603400000000000000230A00000002D -:10A76000000000000C4000000000000002C06A86EB -:10A77000615603400000000000000230A00000000D -:10A78000000000000C4000000000000002C06A86CB -:10A79000000060C603000000000000000031E0007F -:10A7A0000000000000000C0000000000000000C0DD -:10A7B000630660C603000000000000000031E000F6 -:10A7C0000000000000000C0000000000000000C0BD -:10A7D0006306200000000000000020002000200090 -:10A7E000200000040000000400000000000000043D -:10A7F0000004000000000000000400002000000031 -:10A800000000040000000000000000000400000040 -:10A810000000000000000000040000000400200010 -:10A8200000000000200000000000000000002000E8 -:10A8300000040000000000002000000420002000B0 -:10A8400000000000200000000000000000002000C8 -:10A8500000000000000000000000000000000000F8 -:10A8600000000000000100000001000000000000E6 -:10A870004000000040000000000000000000000058 -:10A8800000000000000000000000000000000000C8 -:10A890004000000000000000000000000000000078 -:10A8A00000000000000000000000000000000000A8 -:10A8B0004000000000000000000000000000000058 -:10A8C0000000000000000000000000000000000088 -:10A8D0000000000000000000000000000000020472 -:10A8E0000004004000100000000800000000080004 -:10A8F0000000000000000000000000100010000038 -:10A900000000000000100000000000000000000037 -:10A910000000004000000000004000400040000037 -:10A920000000000000000000000000000000000027 -:10A930000000000000000000000000000000000017 -:10A940000000000000000000000000000000000007 -:10A950000000000000000000008400000008000863 -:10A9600000850085008400840040004000400040D5 -:10A970000000004000400040004000400040004017 -:10A9800000400040004000400040004000400040C7 -:10A99000004000C0000000000000000000000000B7 -:10A9A00002000000000000000000000000000000A5 -:10A9B0000000000000000000000000000000000097 -:10A9C0000000000800000000000000080008000867 -:10A9D00002080000000000080088000800030021B1 -:10A9E00000050000000800080000000800880008BA -:10A9F00000880088002000200020000000000000E7 -:10AA00000000004100000000000000000000000005 -:10AA10000000000000000000000000000000000036 -:10AA20000000000000000000000000000000000026 -:10AA30000000000000000000000000000000000016 -:10AA40000000000000000000000000000000000006 -:10AA500000000000000000000000000800000000EE -:10AA600000000008080000000000000021000004B1 -:10AA7000000000040020410100010001000000006E -:10AA8000000000000800000000000000210000009D -:10AA90000000210000000000000000000000000095 -:10AAA0000000000011000000000000000000000095 -:10AAB0000000000800080000000000080008000076 -:10AAC00000000000118400000000000000000000F1 -:10AAD00000000008000800000084000800C000001A -:10AAE00000000000000000000000000000800000E6 -:10AAF000000000000000080000000000000000004E -:10AB000000000000C0000000000000000000000085 -:10AB10000000000000000000000000000000000035 -:10AB20000000000000000000000000000000000025 -:10AB30000000000000000000000000000000000015 -:10AB40000000000000000000000000000000000005 -:10AB500000000000000000000000000000000000F5 -:10AB6000008200080008008200820000000000044B -:10AB700000900088000000820084008400880000AB -:10AB800000840000000000000090000008000000A9 -:10AB90000000000000000000000000000000004075 -:10ABA00000000000000000000000000000000000A5 -:10ABB0000000000000000000000000000000000095 -:10ABC000000000000000000800000000000000007D -:10ABD0000000000000000000000000000000000075 -:10ABE0000008000000000800000000080000A004A9 -:10ABF000000800000000A0000008A0000000000500 -:10AC00000000000000410000000000000000000003 -:10AC10000000000000000000000000000000000034 -:10AC20000000000000000000000000000000000024 -:10AC30000000000000000000000000000000000014 -:10AC40000000000000000000000000000000000004 -:10AC500000000000000000000000000000000000F4 -:10AC600000000000000000000000000000000000E4 -:10AC700000010000090000000000000000000000CA -:10AC8000000000000800000000004100000000007B -:10AC900000000000090000000000030000000000A8 -:10ACA000000000000000000000000000000000089C -:10ACB0000000000000000008000800002000001054 -:10ACC000000000000000000000000000000000087C -:10ACD00000000000000000080008008820000000BC -:10ACE0000000000000000021002108000021820077 -:10ACF0000000A0000040081190090005000000219C -:10AD0000000800090000004100100041000082100E -:10AD1000000000000800000000000000000000002B -:10AD20000000000000000000000000000000000023 -:10AD30000000000000000000000000000000000013 -:10AD40000000000000000000000000000000000003 -:10AD500000000000000000210000000000000000D2 -:10AD600000000000000000000000000008000000DB -:10AD70000000000021000000008400841100090090 -:10AD8000000400000082000000000000000000003D -:10AD90000000000000000000000000000020000093 -:10ADA00000000000000000000000000000000000A3 -:10ADB0000000000000000000000000000000000093 -:10ADC0000000000000000000000000000000000083 -:10ADD0000000000000000000000000000000000073 -:10ADE0000000000000000000000000000000000063 -:10ADF000000000000000000000000000A0000000B3 -:10AE0000000000000400000000000000000000003E -:10AE10000000000000000000000000000000000032 -:10AE20000000000000000000000000000000000022 -:10AE30000000000000000000000000000000000012 -:10AE40000000000000000000000000000000000002 -:10AE500000000000000000000000000000000000F2 -:10AE600000000000000000000000000000000000E2 -:10AE700000000000000000000900000000000000C9 -:10AE80000900000000008000000000000000000039 -:10AE900000000000000000000000000000000000B2 -:10AEA00000000000000000000000000000000000A2 -:10AEB0000000000000000000000000000000000092 -:10AEC0000000000000000000000000000000000082 -:10AED0000000000000000000000000000000000072 -:10AEE0000000000000000000000000000000000062 -:10AEF0000000000000000009000000100000000930 -:10AF00000000002000000000008000000080000021 -:10AF10000000000000000000000000000000000031 -:10AF20000000000000000000000000000000000021 -:10AF30000000000000000000000000000000000011 -:10AF40000000000000000000000000000000000001 -:10AF500000000000000000000000000000000000F1 -:10AF600000000000000000000000000000000000E1 -:10AF700000000000000000000000000000000000D1 -:10AF800000000000000100000000000800000010A8 -:10AF900000000000000000000000000000000000B1 -:10AFA00000000000000000000000000000000000A1 -:10AFB0000000000000000000000000000000000091 -:10AFC0000000000000000000000000000000000081 -:10AFD0000000000000000000000000000000000071 -:10AFE0000000000000000000000000000000000061 -:10AFF000000000000000000000000000040000004D -:10B0000000000000080000000100010000004000F6 -:10B010000000000000000000000000000000000030 -:10B020000000000000000000000000000000000020 -:10B030000000000000000000000000000000000010 -:10B040000000000000000000000000000000000000 -:10B0500000000000000000000000000000000000F0 -:10B0600000000000000000000000000000000000E0 -:10B0700000000000000000000000000000000000D0 -:10B0800000000400000080000000400041000000BB -:10B090008000000000000000000000000000000030 -:10B0A00000000000000000000000000000000000A0 -:10B0B0000000000000000000000000000000000090 -:10B0C0000000000000000000000000000000000080 -:10B0D0000000000000000000000000000000000070 -:10B0E0000000000000000000000000000000000060 -:10B0F0000000000000000000000000000000000050 -:10B100000000000000000000000000000000000936 -:10B11000002000000000000000000000000000000F -:10B12000000000000000000000000000000000001F -:10B13000000000000000000000000000000000000F -:10B1400000000000000000000000000000000000FF -:10B1500000000000000000000000000000000000EF -:10B1600000000000000000000000000000000000DF -:10B1700000000000000000000000000000000000CF -:10B1800000000000000000000000000000000000BF -:10B1900000000001000000000000000000000000AE -:10B1A000000000000000000000000000000000009F -:10B1B000000000000000000000000000000000008F -:10B1C000000000000000000000000000000000007F -:10B1D000000000000000000000000000000000006F -:10B1E000000000000000000000000000000000005F -:10B1F000000000000000000000000000000000004F -:10B20000000060000020000000006000004200001C -:10B2100000000006000012004200000000000000D4 -:10B22000000000000000000000000000000000001E -:10B23000000000000000000000000000000000000E -:10B2400000000000000000000000000000000000FE -:10B2500000000000000000000000000000000000EE -:10B2600000000000000000000000000000000000DE -:10B2700000000000000000000000000000000000CE -:10B2800000000000000000000000000000000000BE -:10B2900000000000000000000000000000000000AE -:10B2A000000000000000000000000000000000009E -:10B2B000000000000000000000000000000000008E -:10B2C000000000000000000000000000000000007E -:10B2D000000000000000000000000000000000006E -:10B2E000000000000000000000000000000000005E -:10B2F000000000000000000000000000000000004E -:10B30000000000000000000000000000000000003D -:10B31000000000000000000000000000000000002D -:10B32000000000000000000000000000000000001D -:10B33000000000000000000000000000000000000D -:10B3400000000000000000000000000000000000FD -:10B3500000000000000000000000000000000000ED -:10B3600000000000000000000000000000000000DD -:10B3700000000000000000000000000000000000CD -:10B3800000000000000000000000000000000000BD -:10B3900000000000000000000000000000000000AD -:10B3A000000000000000000000000000000000009D -:10B3B000000000000000000000000000000000008D -:10B3C000000000000000000000000000000000007D -:10B3D000000000000000000000000000000000006D -:10B3E000000000000000000000000000000000005D -:10B3F000000000000000000000000000000000004D -:10B40000000000000000000000000000000000003C -:10B41000000000000000000000000000000000002C -:10B42000000000000000000000000000000000001C -:10B43000000000000000000000000000000000000C -:10B4400000000000000000000000000000000000FC -:10B4500000000000000000000000000000000000EC -:10B4600000000000000000000000000000000000DC -:10B4700000000000000000000000000000000000CC -:10B4800000000000000000000000000000000000BC -:10B4900000000000000000000000000000000000AC -:10B4A000000000000000000000000000000000009C -:10B4B000000000000000000000000000000000008C -:10B4C000000000000000000000000000000000007C -:10B4D000000000000000000000000000000000006C -:10B4E000000000000000000000000000000000005C -:10B4F000000000000000000000000000000000004C -:10B5000000000000000000000000000000000061DA -:10B510000007C00D000000610007C00D000005001D -:10B520000A38050000A00000000000000000000034 -:10B53000000000000000000000000000000000000B -:10B5400000000000000000000000000000000000FB -:10B5500000000000000000000000000000000000EB -:10B5600000000000000000000000000000000000DB -:10B5700000000000000000000000000000000000CB -:10B5800000000000000000000000000000000000BB -:10B5900000000000000000000000000000000000AB -:10B5A000000000000000000000000000000000009B -:10B5B000000000000000000000000000000000008B -:10B5C000000000000000000000000000000000007B -:10B5D000000000000000000000000000000000006B -:10B5E000000000000000000000000000000000005B -:10B5F000000000000000000000000000000000004B -:10B60000000000000000000000000000000000003A -:10B61000000000000000000000000000000000002A -:10B62000000000000000000000000000000000001A -:10B63000000000000000000000000000000000000A -:10B6400000000000000000000000000000000000FA -:10B6500000000000000000000000000000000000EA -:10B6600000000000000000000000000000000000DA -:10B6700000000000000000000000000000000000CA -:10B6800000000000000000000000000000000000BA -:10B6900000000000000000000000000000000000AA -:10B6A000000000000000000000000000000000009A -:10B6B000000000000000000000000000000000008A -:10B6C000000000000000000000000000000000007A -:10B6D000000000000000000000000000000000006A -:10B6E000000000000000000000000000000000005A -:10B6F000000000000000000000000000000000004A -:10B700000000000000000000000000000000000039 -:10B710000000000000000000000000000000000029 -:10B720000000000000000000000000000000000019 -:10B730000000000000000000000000000000000009 -:10B7400000000000000000000000000000000000F9 -:10B7500000000000000000000000000000000000E9 -:10B7600000000000000000000000000000000000D9 -:10B7700000000000000000000000000000000000C9 -:10B7800000000000000000000000000000000000B9 -:10B790002000000000002000200000000000200029 -:10B7A00020002000400020000000000000000000F9 -:10B7B0002000000000000000040000000000000065 -:10B7C00000000200840000000400000000000000EF -:10B7D0000003208000800080008020000000000026 -:10B7E00000000000200020000000200000000000F9 -:10B7F0000000200000000000000020000000000009 -:10B8000000000000200020000000200000000000D8 -:10B8100000000000000000000000000000A0000088 -:10B8200000000000002000000000000000000000F8 -:10B8300000000000000009000000000000000000FF -:10B840000000000200000000000000000090000264 -:10B8500000000000000400040004000400000000D8 -:10B8600000000000000000000000000000000000D8 -:10B8700000000000000000000000000000000000C8 -:10B8800000000000000000000000000000000000B8 -:10B890000000000000000040000000000080008068 -:10B8A00000800090008000800008008004800480F8 -:10B8B00000A004C000800080004000800010000054 -:10B8C0000000001000000000000000000000000068 -:10B8D0000000004000000100010001002000000005 -:10B8E0000000000000000000000000000000000058 -:10B8F0000000000000000000000000000000000048 -:10B900000000000000000000000000000000000037 -:10B910000000000000000088000100820088002074 -:10B920000020002000200008000800890008804056 -:10B930008040004180400040004000010040000085 -:10B9400000000000000000000000000000000000F7 -:10B9500000000000000000002000204020008000C7 -:10B9600000000000000000000000000000000000D7 -:10B9700000000000000000000000000000000008BF -:10B9800000000000000000000200000000000000B5 -:10B990000000000000000000004000000021004006 -:10B9A0000040004000400040084008400040004087 -:10B9B000000000000000000000000008000000007F -:10B9C00000200020000000000800080000000041E6 -:10B9D0004000000000000000000000000000000027 -:10B9E0000000000000000000000000000000000057 -:10B9F0000000000000000000000000000000000047 -:10BA00000000000000000000000000000000000036 -:10BA10000000000000000000000000010000000025 -:10BA200000010001000100010001000100A100016E -:10BA30000001000000000000000000000000000005 -:10BA400000000001000100000000000000000000F4 -:10BA500000000000000000000000000000000000E6 -:10BA600000000000000000000000000000000000D6 -:10BA7000000000000000000000C000000000000006 -:10BA800000000000000000000000000000000000B6 -:10BA9000000000000000000000C000000000900056 -:10BAA000A000000001000100A00000000080008054 -:10BAB000828000800000020082000000A0000000E0 -:10BAC000000008000800000000000800000000005E -:10BAD00008008200000000000000000000000000DC -:10BAE0000000000000000000000000000000000056 -:10BAF0000000000000000000000000000000000046 -:10BB00000000000000000000000000000000000035 -:10BB1000000000000000000000000000000000A085 -:10BB20000008030000A00200020021000000000441 -:10BB30000004000400040000800021000000000058 -:10BB400000000000000000000000000000000000F5 -:10BB500000000000090000000000000003000000D9 -:10BB600000000000000000000000000000000000D5 -:10BB700000000000000000000000000000000000C5 -:10BB800000000000000000000000000000000000B5 -:10BB900000000000000000000000000000000000A5 -:10BBA00002080221A040000800040000000000007C -:10BBB000020002218200880200040000A0000000B0 -:10BBC00000000000820002000000000000000000F1 -:10BBD0000000000000000000000000000000000065 -:10BBE0000000000000000000000000000000000055 -:10BBF0000000000000000000000000000000000045 -:10BC00000000000000000000000000000000000034 -:10BC10000000000000000000000000000000000024 -:10BC20000000800080000001000000010000000012 -:10BC300000008000800000000801000100000000FA -:10BC40000000000000000000800000000000000074 -:10BC500000000000000000000800000000000000DC -:10BC600000000000000000000000000800000000CC -:10BC700000000000000000000000000000000000C4 -:10BC800000000000000000000000000800000000AC -:10BC90000000000000000000000000C000000000E4 -:10BCA0000000000000040004200400000000000464 -:10BCB00000000000000000040880010402000004ED -:10BCC000000000110000C00402400021000000003C -:10BCD00000200020000000000000000082000000A2 -:10BCE0000000000000000000000000000000000054 -:10BCF0000000000000000000000000000000000044 -:10BD00000000000000000000000000000000000033 -:10BD10000000000000000000000000000000000023 -:10BD20000000000000000001000100000000000011 -:10BD3000000100000000000000000340020080003D -:10BD40000001000000000000000080000000000072 -:10BD500000000001000100000000000000000000E1 -:10BD600000000000000000000000000000000000D3 -:10BD700000000000000000000000000000000000C3 -:10BD800000000000000000000000000000000000B3 -:10BD900000000000000000000000000000000000A3 -:10BDA000000000000000000000C0000000010000D2 -:10BDB00000C004000000000000C00001A1880000D5 -:10BDC00000C000000000000000C0000000002008CB -:10BDD00000000040004000000000000000000000E3 -:10BDE0000000000000000000000000000000000053 -:10BDF0000000000000000000000000000000000043 -:10BE00000000000000000000000000000000000032 -:10BE10000000000000000000000000000000000022 -:10BE2000000000000000000000000080000040044E -:10BE3000000300800000400500030480004005006E -:10BE400000000080000005400003008000000000AA -:10BE50000080000000000000000000000000000062 -:10BE600000000000000000000000000000000000D2 -:10BE700000000000000000000000000000000000C2 -:10BE800000000000000000000000000000000000B2 -:10BE900000000000000000000000000000000000A2 -:10BEA0000000000000000000000000001180000001 -:10BEB000048080000080418005898080000420008B -:10BEC0000041808000804180408980800000000027 -:10BED00000008000000000000000000000000000E2 -:10BEE000000000000000000000000000000000084A -:10BEF0000000004000000000000000000000000002 -:10BF00000000000000000000000000000000000031 -:10BF10000000000000000000000000000000000021 -:10BF2000000000000000000000000000000000020F -:10BF300000000190C000000200080091C00800004D -:10BF400001000000C0A0000200080091C00800002D -:10BF500004000000C00000000000400000000000DD -:10BF600000000000000000000000000000000000D1 -:10BF700000000000000000000000000000000000C1 -:10BF800000000000000000000000000000000000B1 -:10BF900000000000000000000000000000000000A1 -:10BFA0000000000000000000000000000000000091 -:10BFB00000000010000190C100100000100090C1AE -:10BFC00000000410840000C100020000080090C1BD -:10BFD00000000000000000C000000040044000001D -:10BFE0000000000000000000000000000000000051 -:10BFF0000000000020000000000000000000000021 -:10C000000000000000000000000000000000000030 -:10C010000000000000000000000000000000000020 -:10C020000000000000000000000000000000000010 -:10C0300000000000008000048089040000008005EA -:10C04000808900000080000409C1040000008040D5 -:10C050008089000000000000008000000080800057 -:10C0600000000000000000000000000000000000D0 -:10C070000000000000008000000040000000000000 -:10C0800000000000000000000000000000000000B0 -:10C0900000000000000000000000000000000000A0 -:10C0A0000000000000000000000000000000000090 -:10C0B00000000000800000800400000080110021CA -:10C0C00005000000804000804000000080004040EB -:10C0D00000000000800000008000000000000085DB -:10C0E0000000000000000000000000000000000050 -:10C0F000000000000000000500000000000000003B -:10C10000000000000000000000000000000000002F -:10C11000000000000000000000000000000000001F -:10C12000000000000000000000000000000000000F -:10C13000000000000000C000000801000000C00076 -:10C14000001000000000C000880801000000C000CE -:10C15000000300000000C000000008000000000014 -:10C16000400200004000000000000000000000004D -:10C1700000000000000000000000000000000000BF -:10C1800000000000000000000000000000000000AF -:10C19000000000000000000000000000000000009F -:10C1A000000000000000000000000000000000008F -:10C1B0000000000000000000600000E0000000003F -:10C1C000600A00E01200000081000044000000004E -:10C1D000600000E0400000000000000000000000DF -:10C1E0000006000007000000000000000000000042 -:10C1F00000000000000000000000000002E000005D -:10C20000000000000000000000000000000000002E -:10C21000000000000000000000000000000000001E -:10C22000000000000000000000000000000000000E -:10C23000000000000000000000000000AAAA0000AA -:10C24000F0F00000AAAA00003C3C000000FF000043 -:10C25000F0F00000AAAA00003C3C0000F0F0000052 -:10C26000FFFF003C003C00F000F000000000000078 -:10C2700000000000000000000000000000000000BE -:10C2800000000000000000000000000000000000AE -:10C29000000000000000000000000000000000009E -:10C2A000000000000000000000000000000000008E -:10C2B0000000000000000000000000000000AAAA2A -:10C2C0000000F0F00000AAAA00003C3C000000FFC3 -:10C2D0000000F0F00000AAAA00003C3C0000F0F0D2 -:10C2E00000000000003C003C00F000F000000000F6 -:10C2F000000000000000000000000000000000003E -:10C30000000000000000000000000000000000002D -:10C31000000000000000000000000000000000001D -:10C32000000000000000000000000000000000000D -:10C330000000000000000000000000000000555553 -:10C3400000005555000055550000555500000F0FD1 -:10C3500000005555000055550000555500003C3C67 -:10C360000000F0F0FFFF0F000F0055005500000027 -:10C3700000000000000000000000000000000000BD -:10C3800000000000000000000000000000000000AD -:10C39000000000000000000000000000000000009D -:10C3A000000000000000000000000000000000008D -:10C3B000000000000000000000000000000000007D -:10C3C00055550000555500005555000055550000C5 -:10C3D0000F0F000055550000555500005555000041 -:10C3E0003C3C0000F0F0FFFF0F000F00550055002F -:10C3F000000000000000000000000000000000003D -:10C40000000000000000000000000000000000002C -:10C41000000000000000000000000000000000001C -:10C42000000000000000000000000000000000000C -:10C4300000000000000000000000000000000000FC -:10C44000000040E380018021920245E38A39852182 -:10C4500092A240828007C02C920245E38A0985217E -:10C4600092A240828000002082020000002800008A -:10C4700000000000000000000000000000000000BC -:10C480000000000000650006000F20000000000012 -:10C49000000000000000000000000000000000009C -:10C4A000000000000000000000000000000000008C -:10C4B000000000000000000000000000000000007C -:10C4C0000000000005050505000000FF0505050545 -:10C4D000000000FF00000F0FAAAAFF005500550042 -:10C4E000000000FF0000000000000000000000004D -:10C4F000000000000000000000000000000000003C -:10C50000000000000000000000000000000000002B -:10C51000000000000000000000000000000000001B -:10C52000000000000000000000000000000000000B -:10C5300000000000000000000000000000000000FB -:10C5400000000000000005050505000000FF0505CE -:10C550000505000000FF00000F0FAAAAFF0055000C -:10C560005500000000FF0000000000000000000077 -:10C5700000000000000000000000000000000000BB -:10C5800000000000000000000000000000000000AB -:10C59000000000000000000000000000000000009B -:10C5A000000000000000000000000000000000008B -:10C5B000000000000000000000000000000000007B -:10C5C00000000000000000000C0C0C0C003C003CC3 -:10C5D0000C0C0C0C00F000F00000FF00F0F000006C -:10C5E0000C0C0C0C00F000F000000000000000003B -:10C5F000000000000000000000000000000000003B -:10C60000000000000000000000000000000000002A -:10C61000000000000000000000000000000000001A -:10C62000000000000000000000000000000000000A -:10C6300000000000000000000000000000000000FA -:10C64000000000000000000000000C0C0C0C003C7E -:10C65000003C0C0C0C0C00F000F00000FF00F0F0AF -:10C6600000000C0C0C0C00F000F0000000000000BA -:10C6700000000000000000000000000000000000BA -:10C6800000000000000000000000000000000000AA -:10C69000000000000000000000000000000000009A -:10C6A000000000000000000000000000000000008A -:10C6B000000000000000000000000000000000007A -:10C6C000000000000000000000000000000000006A -:10C6D0000000000000000008000000000000000052 -:10C6E000000000000000000000000000000000004A -:10C6F0000000000000000000000400040000000032 -:10C70000000000040000000000008400000300009E -:10C710000000000000000000000000000000000019 -:10C720000000000000000000000000000200000007 -:10C7300000000000000000000000000400000000F5 -:10C7400000000000000400000000000020000000C5 -:10C750000000000000000000000040000000400059 -:10C7600000020000000000000000000000000000C7 -:10C770000000000000000000000040000000000079 -:10C7800000000000000000000000000000000000A9 -:10C790000000000000000000000040000000000059 -:10C7A0000000000000000000000000000000000089 -:10C7B0000000000000000000000000000000000079 -:10C7C0000000000000000000000000000000000069 -:10C7D0000000000000000000000000000000000059 -:10C7E0000000000000000000000000000000000049 -:10C7F00000000000840000000000000000000000B5 -:10C800000000000000100000000000000000000018 -:10C810000000000000000000000000000000000018 -:10C820000000000000000000040000000000000004 -:10C8300000000000000000000000010000000000F7 -:10C8400000000000000000000000020000000000E6 -:10C85000000002000000000000000088008800883E -:10C860000088000000000000000000000000000040 -:10C8700000080000028400000000020000400210D6 -:10C880000200001000400000000000000000000056 -:10C890000008000000000000000000000000000090 -:10C8A0000000000000000000000002000000000086 -:10C8B0000000000800000000000000001000000060 -:10C8C00000000000000000000000000082000000E6 -:10C8D0000000000800000000000000000000000050 -:10C8E0000000000000800080000000000000000048 -:10C8F0000000000000000000000000000000000038 -:10C900000000000000000010000000000000000017 -:10C910000000000000000000000000000000000017 -:10C920000000000000000000000000000000000007 -:10C9300000000000000000000000000000000000F7 -:10C9400000000000000000000000000000000000E7 -:10C9500000000000000000000010000000000000C7 -:10C9600000000008000000040004000000000000B7 -:10C9700000000000080000000000000000000000AF -:10C9800000000000000000000000000000000000A7 -:10C990000000000000000000000000000000000097 -:10C9A0000000000000000000000000000000000087 -:10C9B0000000000000000000000000000000000077 -:10C9C0000000000000000000000000000000000067 -:10C9D0000000000000000000000000000000000057 -:10C9E0000000000000000000000000000000000047 -:10C9F0000000000000000000000000000000000037 -:10CA00000000000000000000000000000000000026 -:10CA10000000000000000000000000000000000016 -:10CA20000000000000000000000000000000000006 -:10CA300000000000000000000800000000000000EE -:10CA40000000000000000100008000000000000065 -:10CA500000000000000000000100000000000000D5 -:10CA600000000000000000000000000800080010A6 -:10CA7000001008000000000000100000000000008E -:10CA80000000000000000000000000400000000066 -:10CA90000000000000000000000000000000000096 -:10CAA0000000000200000000000000000000000084 -:10CAB0000000000000000000000000000000000076 -:10CAC0000000000000000000200000040000000042 -:10CAD0000000000000000000000004000000000052 -:10CAE0000000000000000000000000000000000046 -:10CAF0000080008000000000000000000000000036 -:10CB00000000000000000000000000000000000025 -:10CB10000000000000000000000000000000000015 -:10CB20000000000000000000000000000000000005 -:10CB300000000000000000000000000000000000F5 -:10CB40000000000090000000000000000000000055 -:10CB500000000000000000000000002000000000B5 -:10CB600000000000000000000000000000000000C5 -:10CB700000000904000400000000000000000000A4 -:10CB800000000000000000000000000000000000A5 -:10CB90000000000000000000000000000000000095 -:10CBA0000000000000000000000000000000000085 -:10CBB0000000000000000000000000000000000075 -:10CBC0000000000000000000000000000000000065 -:10CBD0000000000000000000000000000001000054 -:10CBE00000000008000000000000000040000000FD -:10CBF0000000000000000000000000000000000035 -:10CC00000000000000000000000000000000000024 -:10CC10000000000000000000000000000000000014 -:10CC20000000000000000000000000000000000004 -:10CC300000000000000000000000000000000000F4 -:10CC400000000000000000000000000000000000E4 -:10CC500000000000000000000000000000000000D4 -:10CC600000000000000000000000000000000000C4 -:10CC700000000000000000000000000000000000B4 -:10CC800000000000000000000000000000000000A4 -:10CC90000000000000000000000000000000000094 -:10CCA0000000000000000000000000000000000084 -:10CCB0000000000000000000000000000000000074 -:10CCC0000000000000000000000000000000000064 -:10CCD0000000000000000200000000000000000052 -:10CCE0000000000000000000000000000000000044 -:10CCF00000000000000100008201000000000000B0 -:10CD00000000000000000000000000000000000023 -:10CD10000000000000000000000000000000000013 -:10CD20000000000000000000000000000000000003 -:10CD300000000000000000000000000000000000F3 -:10CD400000000000000000000000000000000100E2 -:10CD500000000000000000000000000000000000D3 -:10CD600090000000009000000000000000000000A3 -:10CD700000000000000000020000050200000000AA -:10CD800000000000000000000000000000000000A3 -:10CD90000000000000000000000000000000000093 -:10CDA0000000000000000000000000000000000083 -:10CDB0000000000000000000000000000000000073 -:10CDC0000000000000000000000000000000000063 -:10CDD0001100210000000000000000000000000021 -:10CDE00011008000000000000000000000000000B2 -:10CDF0000000000000000000000000000200000031 -:10CE00000000000000000000000000000000000022 -:10CE10000000000000000000000000000000000012 -:10CE20000000000000000000000000000000000002 -:10CE300000000000000000000000000000000000F2 -:10CE400000000000000000000000000000000000E2 -:10CE50000000004109000003000000000000000085 -:10CE600000000000008000000080000000000000C2 -:10CE700000000000000000000000000000000100B1 -:10CE800000000000000000000000000000000000A2 -:10CE90000000000000000000000000000000000092 -:10CEA0000000000000000000000000000000000082 -:10CEB0000000000000000000000000000000000072 -:10CEC0000000000000000000000000000000000062 -:10CED0000000000000010100000000000000000050 -:10CEE0000000000000000020000000C00000000062 -:10CEF0000000000000000000000000000000000032 -:10CF00000001000000000000000000000000000020 -:10CF10000000000000000000000000000000000011 -:10CF20000000000000000000000000000000000001 -:10CF300000000000000000000000000000000000F1 -:10CF400000000000000000000000000000000000E1 -:10CF50000000000000000000880000000000000049 -:10CF600000000000000001000088880001000000AF -:10CF700000000000000000000000000000000000B1 -:10CF80000000002000000000000000000000000081 -:10CF90000000000000000000000000000000000091 -:10CFA0000000000000000000000000000000000081 -:10CFB0000000000000000000000000000000000071 -:10CFC0000000000000000000000000000000000061 -:10CFD0000000000000000000000000000000400011 -:10CFE0000000000000000000410000800000090077 -:10CFF0000000000000000000000000000000000031 -:10D0000000000200020000400000000000000000DC -:10D010000000000000000000000000000000000010 -:10D020000000000000000000000000000000000000 -:10D0300000000000000000000000000000000000F0 -:10D0400000000000000000000000000000000000E0 -:10D0500000000000000000000000000000110000BF -:10D06000000000000000000000000011000000802F -:10D0700000000000000000000000000000000000B0 -:10D08000000000000100010000010000000000009D -:10D090000000000000000000000000000000000090 -:10D0A0000000000000000000000000000000000080 -:10D0B0000000000000000000000000000000000070 -:10D0C0000000000000000000000000000000000060 -:10D0D000000000000000000000000000000000014F -:10D0E000000000000000000000000000000100003F -:10D0F00000400000000000000000000000000000F0 -:10D1000000000000500000E00000000000000000EF -:10D11000000000000000000000000000000000000F -:10D1200000000000000000000000000000000000FF -:10D1300000000000000000000000000000000000EF -:10D1400000000000000000000000000000000000DF -:10D1500000000000000000000000000000000000CF -:10D1600000E000008100000000000000000000005E -:10D170000000070082210000000000000000000005 -:10D18000000000000000000000000000000000009F -:10D19000000000000000000000000000000000008F -:10D1A000000000000000000000000000000000007F -:10D1B000000000000000000000000000000000006F -:10D1C000000000000000000000000000000000005F -:10D1D000000000000000000000000000000000004F -:10D1E000000000000000000000000000000000003F -:10D1F000000000000000F0F000000000000000004F -:10D20000000000000000000000000000000000001E -:10D21000000000000000000000000000000000000E -:10D2200000000000000000000000000000000000FE -:10D2300000000000000000000000000000000000EE -:10D2400000000000000000000000000000000000DE -:10D2500000000000000000000000000000000000CE -:10D2600000000000000000000000000000000000BE -:10D270000000000000000000F0F0000000000000CE -:10D28000000000000000000000000000000000009E -:10D29000000000000000000000000000000000008E -:10D2A000000000000000000000000000000000007E -:10D2B000000000000000000000000000000000006E -:10D2C000000000000000000000000000000000005E -:10D2D000000000000000000000000000000000004E -:10D2E000000000000000000000000000000000003E -:10D2F000000000000000000000000000000000002E -:10D30000000000000000000000000000000000001D -:10D31000000000000000000000000000000000000D -:10D3200000000000000000000000000000000000FD -:10D3300000000000000000000000000000000000ED -:10D3400000000000000000000000000000000000DD -:10D3500000000000000000000000000000000000CD -:10D3600000000000000000000000000000000000BD -:10D370000000000000003C3C0000FFFF0000000037 -:10D38000000000000000000000000000000000009D -:10D39000000000000000000000000000000000008D -:10D3A000000000000000000000000000000000007D -:10D3B000000000000000000000000000000000006D -:10D3C000000000000000000000000000000000005D -:10D3D000000000000000000000000000000000004D -:10D3E000000000000000000000000000000000003D -:10D3F00000000000000000003C3C000000000000B5 -:10D40000000000000000000000000000000000001C -:10D410000061000180010000000000000000000029 -:10D4200000000000000000000000000000000000FC -:10D4300000000000000000000000000000000000EC -:10D4400000000000000000000000000000000000DC -:10D4500000000000000000000000000000000000CC -:10D460000000000000000000000000600006000C4A -:10D470000000000000000000000005002A00054038 -:10D4800000A80000000000000000000000000000F4 -:10D4900000000F000F0000AA00AA0000000000001A -:10D4A000000000000000000000000000000000007C -:10D4B000000000000000000000000000000000006C -:10D4C000000000000000000000000000000000005C -:10D4D000000000000000000000000000000000004C -:10D4E000000000000000000000000000000000003C -:10D4F000FFFF00000000000000000000000000002E -:10D50000000000000000000000000000000000001B -:10D51000000000000F000F0000AA00AA0000000099 -:10D5200000000000000000000000000000000000FB -:10D5300000000000000000000000000000000000EB -:10D5400000000000000000000000000000000000DB -:10D5500000000000000000000000000000000000CB -:10D5600000000000000000000000000000000000BB -:10D5700000000000000000000000000000000000AB -:10D58000000000000000000000000000000000009B -:10D590000000000000000F0F000000AA00AA000019 -:10D5A000000000000000000000000000000000007B -:10D5B000000000000000000000000000000000006B -:10D5C000000000000000000000000000000000005B -:10D5D000000000000000000000000000000000004B -:10D5E000000000000000000000000000000000003B -:10D5F00000000000F0F0000000000000000000004B -:10D60000000000000000000000000000000000001A -:10D6100000000000000000000F0F000000AA00AA98 -:10D6200000000000000000000000000000000000FA -:10D6300000000000000000000000000000000000EA -:10D6400000000000000000000000000000000000DA -:10D6500000000000000000000000000000000000CA -:10D6600000000000000000000000000000000000BA -:10D67000000000000000F0F00000000000000000CA -:10D68000000000000000000000000000000000009A -:10D69000000000000000000000000000000000008A -:10D6A00000000000000000000000840000000000F6 -:10D6B000000000000000000000000000000000006A -:10D6C00000000080008000000080000100000000D9 -:10D6D000000000000000000000000000000000004A -:10D6E0000000000000000000020000000000000038 -:10D6F000000000000000000000000000000000002A -:10D700000000000000000000000000000000000019 -:10D710000400000000000000000000000000000005 -:10D7200000000000000000000000000000000000F9 -:10D7300000000000000000000000000000020002E5 -:10D740000002009000040004000200040000000039 -:10D7500000000000000000000000000000000000C9 -:10D7600000000000000000000000000000000000B9 -:10D770000000000000000000004000000000000069 -:10D780000000000000000000000000000000000099 -:10D790000000000000000000000000100010000069 -:10D7A0000000000000000000000000000010000069 -:10D7B0000000000000000000000000000000000069 -:10D7C0000000000000000100010001000100000055 -:10D7D0000000000000000000000000000000000049 -:10D7E0000000000004000000000000000000000035 -:10D7F0000000000000000000000000000000000029 -:10D800000000000000000000000000000000000018 -:10D8100000000000001000000000000000000000F8 -:10D820000000000000100088001000000000000050 -:10D830000000000000000000008800000000001050 -:10D840000000000000000000200020002000200058 -:10D8500000000000000000000000000000000000C8 -:10D8600000000400040000000000000000000000B0 -:10D8700000000000000000000000000000000000A8 -:10D880000000000000000000000000000000000098 -:10D8900000000005000900000005000800410041EB -:10D8A0000041000000000000000000000000000037 -:10D8B0000000000000000000000000000000000068 -:10D8C0000000000000000000000004000000200034 -:10D8D0000000000008000000000000000000000040 -:10D8E0000000000000000000000000000000000038 -:10D8F0000000000000000000000000000000000028 -:10D900000000000000000000000000000000000017 -:10D910000000000000000000000000000000000007 -:10D9200000000000000000000000000000000000F7 -:10D9300000000000000000000000000000000000E7 -:10D9400000000000000000000000000000000000D7 -:10D950008000000000000000000000000000000047 -:10D9600000000000000000000000000000000000B7 -:10D9700000000000000000000000000000000000A7 -:10D980000000000000000000000000000000000097 -:10D990000000000000000000000000000000000087 -:10D9A0000000000000000000000000000000000077 -:10D9B0000000000000000000000000000000000067 -:10D9C0000000000000000000000000000000000057 -:10D9D0000000000000000000000000000000000047 -:10D9E0000000000000000000000000000000000037 -:10D9F0000000000000000000000000000000000027 -:10DA00000000000000000000000000000000000016 -:10DA10000000000000000000000000000000000006 -:10DA200000000000000000000000000000000000F6 -:10DA300000000000000000000000000000000000E6 -:10DA400000000000000000000000000000000000D6 -:10DA500000000000000000000000000000000000C6 -:10DA600000000000000000000000000000000000B6 -:10DA700000000000000000000000000000000000A6 -:10DA80000000000000000000000000000000000096 -:10DA90000000000000000000000000000000000086 -:10DAA0000000000000000000000000000000000076 -:10DAB0000000000000000000000000000000000066 -:10DAC0000000000000000000000000000000000056 -:10DAD00084000000000000000000000000000000C2 -:10DAE0000000000000000000000000000000000036 -:10DAF0000000000000000000000000000000000026 -:10DB00000000000000000000000000000000000015 -:10DB10000000000000000000000000000000000005 -:10DB200000000000000000000000000000000800ED -:10DB300000000000000000000000000000000000E5 -:10DB400000000000000000000000000000000000D5 -:10DB500000000000000000000000000000000000C5 -:10DB600000000000000000000000000000000000B5 -:10DB700000000000000000000000000000000000A5 -:10DB80000000000000C00000000000840000000051 -:10DB900000000000000000000000080000840000F9 -:10DBA000000000000000004100000000000800002C -:10DBB0000000000000000000000000000000000065 -:10DBC0000000000000000000000000000000000055 -:10DBD0000000000000000000000000000000000045 -:10DBE0000000000000000000000000000000000035 -:10DBF0000000000000000000000000000000000025 -:10DC00000000000000000000000000000000000014 -:10DC10000000000000020000000000000000000002 -:10DC200000000000000000000000000000000000F4 -:10DC300000000000000000000000000000000000E4 -:10DC400000000000000000000000000000000000D4 -:10DC500000000000000000000000000000000000C4 -:10DC600000000000000000000000000000000000B4 -:10DC700000000000000000000000000000000000A4 -:10DC80000000000000000000000000000000000094 -:10DC90000000110000000000000000000000000073 -:10DCA0000000000000000000000000000000000074 -:10DCB0000000000000000000000000000000000064 -:10DCC0000000000000000000000000000000000054 -:10DCD0000000000000000000000000000000000044 -:10DCE0000000000000000000000000000000000034 -:10DCF0000000000000000000000000000000000024 -:10DD00000000000000000000000000000000000013 -:10DD10000000000000000000000000000000000003 -:10DD200000000000000000000000000000000000F3 -:10DD300000000000000000000000000000000000E3 -:10DD400000000000000000000000000000000000D3 -:10DD500000000000000000000000000000000000C3 -:10DD600000000000000000000000000000000000B3 -:10DD700000000000000000000000000000000000A3 -:10DD80000000000000000000000000000000000093 -:10DD90000000000000000000000000000000000083 -:10DDA0000000000000000000000000000000000073 -:10DDB0000000000000000000000000000000000063 -:10DDC0000000000000000000000000000000000053 -:10DDD0000000000000000000000000000000002023 -:10DDE00000000041000000000000000000000000F2 -:10DDF0000000000000000000000000000000000023 -:10DE00000000000000000000000000000000000012 -:10DE10000000000000000000000000000000000002 -:10DE200000000000000000000000000000000000F2 -:10DE300000000000000000000000000000000000E2 -:10DE400000000000000000000000000000000000D2 -:10DE500000000000000000000000000000000000C2 -:10DE600000000000000100000000000000000000B1 -:10DE700000000000000000000000000000000000A2 -:10DE80000000000000000000000000000000000092 -:10DE90000000000000000000000000000000000082 -:10DEA0000000000000000000000000000000000072 -:10DEB0000000000000000000000000000000000062 -:10DEC0000000000000000000000000000000000052 -:10DED0000000000000000000000000000000000042 -:10DEE0000000000002000000000000000000000030 -:10DEF0000000000000000000000000000000000022 -:10DF00000000000000000000000000000000000011 -:10DF10000000000000000000000000000000000001 -:10DF200000000000000000000000000000000000F1 -:10DF300000000000000000000000000000000000E1 -:10DF400000000000000000000000000000000000D1 -:10DF500000000000000000000000000000000000C1 -:10DF6000000000000000800000000400000000002D -:10DF700000000000000000000000000000000000A1 -:10DF80000000000000000000000000000000000091 -:10DF90000000000000000000000000000000000081 -:10DFA0000000000000000000000000000000000071 -:10DFB0000000000000000000000000000000000061 -:10DFC0000000000000000000000000000000000051 -:10DFD0000000000000000000000000000000000041 -:10DFE0000000000000000000000000000000000031 -:10DFF0000000000000000000000000000000000021 -:10E000000000000000000000000000000000000010 -:10E010000000000000000000000000000000000000 -:10E0200000000000000000000000000000000000F0 -:10E0300000000000000000000000000000000000E0 -:10E0400000000000000000000000000000000000D0 -:10E0500000000000000000000000000000000000C0 -:10E0600000000000000000000000000000000000B0 -:10E0700000000000000000000000000000000000A0 -:10E080000000000000000000000000000000000090 -:10E090000000000000000000000000000000000080 -:10E0A0000000000000000000000000000000000070 -:10E0B0000000000000000000000000000000000060 -:10E0C0000000000000000000000000000000000050 -:10E0D0000000000000000000000000000000000040 -:10E0E00000000000000000000000000002E000004E -:10E0F00000420000000000000000000000000000DE -:10E10000000000000000000000000000000000000F -:10E1100000000000000000000000000000000000FF -:10E1200000000000000000000000000000000000EF -:10E1300000000000000000000000000000000000DF -:10E1400000000000000000000000000000000000CF -:10E1500000000000000000000000000000000000BF -:10E1600000000000000000000000000000000000AF -:10E17000000000000000000000000000000000009F -:10E18000000000000000000000000000000000008F -:10E19000000000000000000000000000000000007F -:10E1A000000000000000000000000000000000006F -:10E1B000000000000000000000000000000000005F -:10E1C000000000000000000000000000000000004F -:10E1D000000000000000000000000000000000003F -:10E1E000000000000000000000000000000000002F -:10E1F000000000000000000000000000000000001F -:10E20000000000000000000000000000000000000E -:10E2100000000000000000000000000000000000FE -:10E2200000000000000000000000000000000000EE -:10E2300000000000000000000000000000000000DE -:10E2400000000000000000000000000000000000CE -:10E2500000000000000000000000000000000000BE -:10E2600000000000000000000000000000000000AE -:10E27000000000000000000000000000000000009E -:10E28000000000000000000000000000000000008E -:10E29000000000000000000000000000000000007E -:10E2A000000000000000000000000000000000006E -:10E2B000000000000000000000000000000000005E -:10E2C000000000000000000000000000000000004E -:10E2D000000000000000000000000000000000003E -:10E2E000000000000000000000000000000000002E -:10E2F000000000000000000000000000000000001E -:10E30000000000000000000000000000000000000D -:10E3100000000000000000000000000000000000FD -:10E3200000000000000000000000000000000000ED -:10E3300000000000000000000000000000000000DD -:10E3400000000000000000000000000000000000CD -:10E3500000000000000000000000000000000000BD -:10E3600000000000000000000000000000000000AD -:10E370000000000000650006000F20000000000003 -:10E38000000000000000000000000000000000008D -:10E39000000000000000000000000000000000007D -:10E3A000000000000000000000000000000000006D -:10E3B000000000000000000000000000000000005D -:10E3C000000000000000000000000000000000004D -:10E3D000000000000000000000000000000000003D -:10E3E000000000000000000000000000000000002D -:10E3F000000000000000000000000000000000001D -:10E40000000000000000000000000000000000000C -:10E4100000000000000000000000000000000000FC -:10E4200000000000000000000000000000000000EC -:10E4300000000000000000000000000000000000DC -:10E4400000000000000000000000000000000000CC -:10E4500000000000000000000000000000000000BC -:10E4600000000000000000000000000000000000AC -:10E47000000000000000000000000000000000009C -:10E48000000000000000000000000000000000008C -:10E49000000000000000000000000000000000007C -:10E4A000000000000000000000000000000000006C -:10E4B000000000000000000000000000000000005C -:10E4C000000000000000000000000000000000004C -:10E4D000000000000000000000000000000000003C -:10E4E000000000000000000000000000000000002C -:10E4F000000000000000000000000000000000001C -:10E50000000000000000000000000000000000000B -:10E5100000000000000000000000000000000000FB -:10E5200000000000000000000000000000000000EB -:10E5300000000000000000000000000000000000DB -:10E5400000000000000000000000000000000000CB -:10E5500000000000000000000000000000000000BB -:10E5600000000000000000000000000000000000AB -:10E57000000000000000000000000000000000009B -:10E58000000000000000000000000000000000008B -:10E59000000000000000000000000000000000007B -:10E5A000000000000000000000000000000000006B -:10E5B000000000000000000000000000000000005B -:10E5C000000000000000000000000000000000004B -:10E5D00000000000200020000000000000000000FB -:10E5E000000000000000000000000000000000002B -:10E5F0000000000000000000040000000000000017 -:10E6000000000004000400030000000000000004FB -:10E6100000000000000000000000200000000000DA -:10E6200000000000000000000000000000000000EA -:10E6300000000000000000000000000000000000DA -:10E640000400000000040000400000000000000082 -:10E6500000000000000000000000000000000000BA -:10E66000000000004000000000000000000000006A -:10E67000000000000000000000000000000000009A -:10E68000000040000000000000000000000000004A -:10E69000000000000000000000000000000000007A -:10E6A000000000000000000000000000000000006A -:10E6B000000000000000000000000000000000005A -:10E6C000000000000000400000000000000000000A -:10E6D0000000020000000000000000000000000038 -:10E6E0000000000000000000000001000000000029 -:10E6F000000000000000000000000000000000001A -:10E700000000000000000000000000000000000009 -:10E7100000000000000000000000000000000000F9 -:10E7200000000000000000000000000000000000E9 -:10E7300000000000000000000000000001000000D8 -:10E7400000000000000000000000000000000400C5 -:10E7500000000004000000000000000004000000B1 -:10E760000000000000400000000000001000000059 -:10E770000010000000000000000000000000000089 -:10E78000000000000400000004000400000000007D -:10E790000000000000000000000000000000000079 -:10E7A0000000000000000000000000000000000069 -:10E7B0000000000004000000000000000000100045 -:10E7C0000000000000000000000000000000000049 -:10E7D0000000000000000000000000000000000039 -:10E7E0000000000000000000000000000000000029 -:10E7F0000000000000000000000000000000000019 -:10E800000000000000000000000000000000000008 -:10E8100000000000000000000000000000000000F8 -:10E8200000000000000000000000000000000000E8 -:10E8300000000000000000000000000000000000D8 -:10E8400000000000000000000000000000000000C8 -:10E8500000000000000000000000000000000000B8 -:10E8600000000000000000000000000000000000A8 -:10E870000000000000000000000000000000080090 -:10E880000800000000000000000000000000000080 -:10E890000000000000000000000000000000000078 -:10E8A0000000000000000000000000000000000068 -:10E8B0000000000000000000000000000000000058 -:10E8C0000000000000000000000000000000000048 -:10E8D0000000000000000000080000000000000030 -:10E8E00000000000000000008200000000000000A6 -:10E8F0000000000000000100008000000000000097 -:10E900000000000000000000000000000000000007 -:10E9100000000000000000000000000000000000F7 -:10E9200000000000000000000000000000000000E7 -:10E9300000000000000000000000000000000000D7 -:10E940000000000000000000010000800000000046 -:10E9500000000000000000000000000000000000B7 -:10E9600000000000000000000000000000000000A7 -:10E970000000000000000000200000040000000073 -:10E980000000000000000000000000000000000087 -:10E990000000000000000000000000000000000077 -:10E9A0000000000000000000000000000000000067 -:10E9B0000000000000000000000000000000000057 -:10E9C0000000000000000000000020000004000023 -:10E9D0000000000000000000000000000000000037 -:10E9E0000000000000000000000000000000000027 -:10E9F0000000000090000000000000000000000087 -:10EA00000000000000000000000000000000000006 -:10EA100000000000000000000000000000000000F6 -:10EA200000000000000000000000000000000000E6 -:10EA300000000000000000000000000000000000D6 -:10EA4000000000000000900000000800000000002E -:10EA5000C0000000000000000000000000080000EE -:10EA600000000000000000000000000000000000A6 -:10EA70000000000000000000000000000000000096 -:10EA80000000000000000000000000000000000086 -:10EA90000000000000000000000000000000000076 -:10EAA0000000000000000000000000000000000066 -:10EAB0000000000000000000000000000000000056 -:10EAC0000000000000000000000000000000000046 -:10EAD0000000000000000000000000000000000036 -:10EAE0000000000000000000000000000000000026 -:10EAF0000000000000000000000000000000000016 -:10EB00000000000000000000000000000000000005 -:10EB100000000000000000000000000000000000F5 -:10EB200000000000000000000000000000000000E5 -:10EB300000000000000000000000000000000000D5 -:10EB400000000000000000000000000000000000C5 -:10EB500000000000000000000000000000000000B5 -:10EB600000000000000000000000000000000000A5 -:10EB70000000000000000000000000000000000095 -:10EB80000000000000000000000000000000000085 -:10EB90000000000000000000000000000000000075 -:10EBA0000000000000000000000000000000000065 -:10EBB0000000000000000000000000000000000055 -:10EBC0000000000000000000000000000000000045 -:10EBD0000000000000000000000000000000000035 -:10EBE0000000000000000000000000000000000025 -:10EBF0000000000000000000000000000000010014 -:10EC00000000000000000000000000000000000004 -:10EC100000000000000000000000000000000000F4 -:10EC200000000000000000000000000000000000E4 -:10EC300000000000000000000000000000000000D4 -:10EC400000000000000000000000000000000000C4 -:10EC500001000000000000000000000000000000B3 -:10EC600000000000000000000000000000000000A4 -:10EC70000000000000000000000000000000000094 -:10EC80001100210000000000000000000000000052 -:10EC90000000000000000000000000000000000074 -:10ECA0000000000000000000000000000000000064 -:10ECB0000000000000000000000000000000000054 -:10ECC0000000000000000000000000000000000044 -:10ECD0000000110021000000000000000000000002 -:10ECE0000000000000000000000000000000000024 -:10ECF0000000000000000000000000000000000014 -:10ED00000000004109000003008000000000000036 -:10ED100000000000000000000000000000000000F3 -:10ED200000000000000000000000000000000000E3 -:10ED300000000000000000000000000000000000D3 -:10ED400000000000000000000000000000000000C3 -:10ED50000000000000410900000300000000000066 -:10ED600000000000000000000000000000000000A3 -:10ED70000000000000000000000000000000000093 -:10ED800000000000000101000000008800000000F9 -:10ED90000000000000000000000000000000000073 -:10EDA0000000000000000000000000000000000063 -:10EDB0000000000000000000000000000000000053 -:10EDC0000000000000000000000000000000000043 -:10EDD0000000000000000001010000000000000031 -:10EDE0000000000000000000000000000000000023 -:10EDF0000000000000000000000000000000000013 -:10EE00000000000000000000880000000100000079 -:10EE100000000000000000000000000000000000F2 -:10EE200000000000000000000000000000000000E2 -:10EE300000000000000000000000000000000000D2 -:10EE400000000000000000000000000000000000C2 -:10EE50000000000000000000000088000000010029 -:10EE600000000000000000000000000000000000A2 -:10EE70000000000000000000000000000000000092 -:10EE80000000000000000000000000000000410041 -:10EE90000000000000000000000000000000000072 -:10EEA0000000000000000000000000000000000062 -:10EEB0000000000000000000000000000000000052 -:10EEC0000000000000000000000000000000000042 -:10EED0000000000000000000000000000000000032 -:10EEE0002000000000000000000000000000000002 -:10EEF0000000000000000000000000000000000012 -:10EF000000000000000000000000000000114000B0 -:10EF100000000000000000000000000000000000F1 -:10EF200000000000000000000000000000000000E1 -:10EF300000000000000000000000000000000000D1 -:10EF400000000000000000000000000000000000C1 -:10EF500000000000000000000000000000000011A0 -:10EF600000000000000000000000000000000000A1 -:10EF70000000000000000000000000000000000091 -:10EF80000000000000000000000000000000000180 -:10EF90000000000000000000000000000000000071 -:10EFA0000000000000000000000000000000000061 -:10EFB0000000000000000000000000000000000051 -:10EFC0000000000000000000000000000000000041 -:10EFD0000000000000000000000000000000000031 -:10EFE0000001000000000000000000000000000020 -:10EFF0000000000000000000000000000000000011 -:10F000000000000000000000000000000000000000 -:10F0100000E000008141000000000000000000004E -:10F0200000000000000000000000000000000000E0 -:10F0300000000000000000000000000000000000D0 -:10F0400000000000000000000000000000000000C0 -:10F0500000000000000000000000000000000000B0 -:10F06000000000E00000810000000000000000003F -:10F070000000000000000000000000000000000090 -:10F080000000000000000000000000000000000080 -:10F090000000000000000000000000000000000070 -:10F0A0000000000000000000000000000000000060 -:10F0B0000000000000000000000000000000000050 -:10F0C0000000000000000000000000000000000040 -:10F0D0000000000000000000000000000000000030 -:10F0E0000000000000000000000000000000000020 -:10F0F0000000000000000000000000000000000010 -:10F1000000000000000000000000000000000000FF -:10F1100000000000000000000000000000000000EF -:10F1200000000000000000000000000000000000DF -:10F1300000000000000000000000000000000000CF -:10F1400000000000000000000000000000000000BF -:10F1500000000000000000000000000000000000AF -:10F16000000000000000000000000000000000009F -:10F17000000000000000000000000000000000008F -:10F18000000000000000000000000000000000007F -:10F19000000000000000000000000000000000006F -:10F1A000000000000000000000000000000000005F -:10F1B000000000000000000000000000000000004F -:10F1C000000000000000000000000000000000003F -:10F1D000000000000000000000000000000000002F -:10F1E000000000000000000000000000000000001F -:10F1F000000000000000000000000000000000000F -:10F2000000000000000000000000000000000000FE -:10F2100000000000000000000000000000000000EE -:10F2200000000000000000000000000000000000DE -:10F2300000000000000000000000000000000000CE -:10F2400000000000000000000000000000000000BE -:10F2500000000000000000000000000000000000AE -:10F26000000000000000000000000000000000009E -:10F27000000000000000000000000000000000008E -:10F28000000000000000000000000000000000007E -:10F29000000000000000000000000000000000006E -:10F2A000000000000000000000000000000000005E -:10F2B000000000000000000000000000000000004E -:10F2C000000000000000000000000000000000003E -:10F2D000000000000000000000000000000000002E -:10F2E000000000000000000000000000000000001E -:10F2F000000000000000000000000000000000000E -:10F3000000000000000000000000000000000000FD -:10F310000000000000000000000000400006000C9B -:10F3200000000000000000000000000000000000DD -:10F3300000000000000000000000000000000000CD -:10F3400000000000000000000000000000000000BD -:10F3500000000000000000000000000000000000AD -:10F360000000000000000000000000000060000637 -:10F37000000C000000000000000000000000000081 -:10F38000000000000000000000000000000000007D -:10F3900000000000000000000000000000000F0F4F -:10F3A000FFFF00000000000000000000000000005F -:10F3B000000000000000000000000000000000004D -:10F3C000000000000000000000000000000000003D -:10F3D000000000000000000000000000000000002D -:10F3E000000000000000000000000000000000001D -:10F3F0000000FFFF0000000000000000000000000F -:10F4000000000000000000000000000000000000FC -:10F4100000000000000000000000000000000000EC -:10F420000F0F0000000000000000000000000000BE -:10F4300000000000000000000000000000000000CC -:10F4400000000000000000000000000000000000BC -:10F4500000000000000000000000000000000000AC -:10F46000000000000000000000000000000000009C -:10F47000000000000000000000000000000000008C -:10F48000000000000000000000000000000000007C -:10F49000000000000000000000000000000000006C -:10F4A00000000000F0F0000000000000000000007C -:10F4B000000000000000000000000000000000004C -:10F4C000000000000000000000000000000000003C -:10F4D000000000000000000000000000000000002C -:10F4E000000000000000000000000000000000001C -:10F4F000000000000000F0F000000000000000002C -:10F5000000000000000000000000000000000000FB -:10F5100000000000000000000000000000000000EB -:10F52000000000000000F0F00000000000000000FB -:10F5300000000000000000000000000000000000CB -:10F5400000000000000000000000000000000000BB -:10F5500000000000000000000000000000000000AB -:10F56000000000000000000000000000000000009B -:10F570000000000000000000F0F0000000000000AB -:10F58000000000000000000000000000000000007B -:10F59000000000000000000000000000000000006B -:10F5A000000000000000000000000000000000005B -:10F5B000000000000000000000000000000000004B -:10F5C000000000000001000000000000000000003A -:10F5D000000000000000000000000000000000002B -:10F5E000000000000000000000000000000000001B -:10F5F000000000000000000000000000000000000B -:10F6000000000000000000000000000000000000FA -:10F6100000000000000000000000000000000000EA -:10F6200000000000000000000000000000000000DA -:10F6300000000000000000020000000000000000C8 -:10F6400000000002000000000000000000000000B8 -:10F6500000000000000000000000000000000000AA -:10F66000000000004000000000000000000000005A -:10F67000000000000000000000000000000000008A -:10F68000000000000000000000000000000000007A -:10F690000200000000000010000000000000000058 -:10F6A0000200020000000040000000000000000016 -:10F6B000000000000000000000000000000000004A -:10F6C000000000000000000000000000000000003A -:10F6D000000000000000000000000000000000002A -:10F6E000000000000000000000000000000000001A -:10F6F000000000000000000000000000000000000A -:10F7000000000000000000000000000004000000F5 -:10F710000400840000000000000000000000000061 -:10F7200000000000000000000000000000000000D9 -:10F7300000000000000000000000000000000000C9 -:10F7400000000000000000000000000000000000B9 -:10F750000000020004000400040004000000000097 -:10F760000000000000000000000000000400040091 -:10F770000000000000000000000000000000000089 -:10F780000000000000000000000000000000000079 -:10F790000000000000000000000000000000000069 -:10F7A0000000000000000000000000000000000059 -:10F7B0000000000000000000000000000000000049 -:10F7C0000000000004000000000000000000000035 -:10F7D0000000000000000000000000000000000029 -:10F7E0000000000000000000000000000000000019 -:10F7F0000000000000000000000000000000000009 -:10F8000000000000000000000000000000000000F8 -:10F8100000000000000000000000000000000000E8 -:10F8200000000000000000000000000000000000D8 -:10F8300000000000000000000000000000000000C8 -:10F8400000000000000000000000000000000000B8 -:10F8500000000000000000000000000000000000A8 -:10F860000000000000000000000000000000000098 -:10F870000000000000000000000000000000000088 -:10F880000000000000000000000000000000000078 -:10F890000000000000000000000000000000010067 -:10F8A0000000000000000000000000000000000058 -:10F8B0000000000000000000000000000000000048 -:10F8C0000000000000000000000000000000000038 -:10F8D0000000000000000000000000000000000028 -:10F8E0000000000000000000000000000000000018 -:10F8F0000000000000000000000000000000000008 -:10F9000000000000000000000000000000000000F7 -:10F9100000000000000000000000000000000000E7 -:10F9200004000000000000000000000000000000D3 -:10F9300000000000000000000000000000000000C7 -:10F9400000000000000000000000000000000000B7 -:10F9500000000000000000000000000000000000A7 -:10F960000000000000000000000000000000000097 -:10F970000000000000000000000000000000000087 -:10F980000000000000000000000000000000000077 -:10F990000000000000000000000000000000000067 -:10F9A0000020000000000000000000000000000037 -:10F9B0000000000000000000000000000000000047 -:10F9C0000000000000000000000000000000000037 -:10F9D0000000000000000000000000000000000027 -:10F9E0000000000000000000000000000000000017 -:10F9F0000000000000000000000000000000000007 -:10FA000000000000000000000000000000000000F6 -:10FA100000000000000000000000000000000000E6 -:10FA200000000001000000000000000000000000D5 -:10FA30000000000000C00000000000840000000082 -:10FA400000000000000000000000000000000000B6 -:10FA500000000000000000000000000000000000A6 -:10FA60000000000000000000000000000000000096 -:10FA70000000000000000000000000000000000086 -:10FA800000000000000000C0000000000084000032 -:10FA90000000000000000000000000000000000066 -:10FAA0000000000000000000000000000000000056 -:10FAB0000000000000000000000000000000000046 -:10FAC0000000000000020000000000000000000034 -:10FAD0000000000000000000000000000000000026 -:10FAE0000000000000000000000000000000000016 -:10FAF0000000000000000000000000000000000006 -:10FB000000000000000000000000000000000000F5 -:10FB100000000000000000020000000000000000E3 -:10FB200000000000000000000000000000000000D5 -:10FB300000000000000000000000000000000000C5 -:10FB400000000000000000000000000000000000B5 -:10FB500000000000000000000000000000000000A5 -:10FB60000000000000000000000000000000000095 -:10FB70000000000000000000000000000000000085 -:10FB80000000000000000000000000000000000075 -:10FB90000000000000000000000000000000000065 -:10FBA00000000000000090000000000000000000C5 -:10FBB0000000000000000000000000000000000045 -:10FBC0000000000000000000000000000000000035 -:10FBD0000000000000000000000000000000000025 -:10FBE0000000000000000000000000000000000015 -:10FBF0000000000000000000000000000000000005 -:10FC000000000000000000000000000000000000F4 -:10FC100000000000000000000000000000000000E4 -:10FC20000000000000001100800000000000000043 -:10FC300000000000000000000000000000000000C4 -:10FC400000000000000000000000000000000000B4 -:10FC500000000000000000000000000000000000A4 -:10FC60000000000000000000000000000000000094 -:10FC70000000000000000000000000000000000084 -:10FC80000000000000000000000000000000000074 -:10FC90000000000000000000000000000000000064 -:10FCA0000000000000000000000000800000008054 -:10FCB0000000000000000000000000000000000044 -:10FCC0000000000000000000000000000000000034 -:10FCD0000000000000000000000000000000000024 -:10FCE0000000000000000000000000000000000014 -:10FCF0000000000000000000000000000000000004 -:10FD000000000000000000000000000000000000F3 -:10FD100000000000000000000000000000000000E3 -:10FD200000000000000000000000000000200000B3 -:10FD300000C0000000000000000000000000000003 -:10FD400000000000000000000000000000000000B3 -:10FD500000000000000000000000000000000000A3 -:10FD60000000000000000000000000000000000093 -:10FD70000000000000000000000000000000000083 -:10FD80000000000000000000000000000000000073 -:10FD90000000000000000000000000000000000063 -:10FDA000000000000000000000000000910000883A -:10FDB00088000100000000000000000000000000BA -:10FDC0000000000000000000000000000000000033 -:10FDD0000000000000000000000000000000000023 -:10FDE0000000000000000000000000000000000013 -:10FDF0000000000000000000000000000000000003 -:10FE000000000000000000000000000000000000F2 -:10FE100000000000000000000000000000000000E2 -:10FE20000000000000000000000000000000410091 -:10FE30000080000009000000000000000000000039 -:10FE400000000000000000000000000000000000B2 -:10FE500000000000000000000000000000000000A2 -:10FE60000000000000000000000000000000000092 -:10FE70000000000000000000000000000000000082 -:10FE80000000000000000000000000000000000072 -:10FE90000000000000000000000000000000000062 -:10FEA0000000000000000000000000000000000052 -:10FEB00000110000008000000000000000000000B1 -:10FEC0000000000000000000000000000000000032 -:10FED0000000000000000000000000000000000022 -:10FEE0000000000000000000000000000000000012 -:10FEF0000000000000000000000000000000000002 -:10FF000000000000000000000000000000000000F1 -:10FF100000000000000000000000000000000000E1 -:10FF200000000000000000000000000000000000D1 -:10FF30000000000100000040000000000000000080 -:10FF400000000000000000000000000000000000B1 -:10FF500000000000000000000000000000000000A1 -:10FF60000000000000000000000000000000000091 -:10FF70000000000000000000000000000000000081 -:10FF80000000000000000000000000000000000071 -:10FF90000000000000000000000000000000000061 -:10FFA0000000000000000000000000000000000051 -:10FFB0000000000000000000070082210000000097 -:10FFC0000000000000000000000000000000000031 -:10FFD0000000000000000000000000000000000021 -:10FFE0000000000000000000000000000000000011 -:10FFF0000000000000000000000000000000000001 -:020000040014E6 -:1000000000000000000000000000000000000000F0 -:1000100000000000000000000000000000000000E0 -:1000200000000000000000000000000000000000D0 -:1000300000000000000000000000F0F000000000E0 -:1000400000000000000000000000000000000000B0 -:1000500000000000000000000000000000000000A0 -:100060000000000000000000000000000000000090 -:100070000000000000000000000000000000000080 -:100080000000000000000000000000000000000070 -:100090000000000000000000000000000000000060 -:1000A0000000000000000000000000000000000050 -:1000B000000000000000000000000000F0F0000060 -:1000C0000000000000000000000000000000000030 -:1000D0000000000000000000000000000000000020 -:1000E0000000000000000000000000000000000010 -:1000F0000000000000000000000000000000000000 -:1001000000000000000000000000000000000000EF -:1001100000000000000000000000000000000000DF -:1001200000000000000000000000000000000000CF -:10013000000000000000000000000000FFFF0000C1 -:10014000FFFF0000000000000000000000000000B1 -:10015000000000000000000000000000000000009F -:10016000000000000000000000000000000000008F -:10017000000000000000000000000000000000007F -:10018000000000000000000000000000000000006F -:10019000000000000000000000000000000000005F -:1001A000000000000000000000000000000000004F -:1001B000000000000000000000000000000000003F -:1001C000000000000000000000000000000000002F -:1001D000000000000000000000000000000000001F -:1001E000000000000000000000000000000000000F -:1001F00000000000000000000000000000000000FF -:1002000000000000000000000000000000000000EE -:1002100000000000000000000000000000000000DE -:1002200000000000000000000000000000000000CE -:1002300000000000000000000000000000000500B9 -:100240002A00054000A80000000000000000000097 -:10025000000000000000000000000000000000009E -:10026000000000000000000000000000000000008E -:10027000000000000000000000000000000000007E -:10028000000000000000000000000000000000006E -:10029000000000000000000000000000000000005E -:1002A000000000000000000000000000000000004E -:1002B000000000000000000000000000000000003E -:1002C000000000000000000000000000000000002E -:1002D000000000000000000000000000000000001E -:1002E000000000000000000000000000000000000E -:1002F00000000000000000000000000000000000FE -:1003000000000000000000000000000000000000ED -:1003100000000000000000000000000000000000DD -:1003200000000000000000000000000000000000CD -:1003300000000000000000000000000000000000BD -:1003400000000000000000000000000000000000AD -:10035000000000000000000000000000000000009D -:10036000000000000000000000000000000000008D -:10037000000000000000000000000000000000007D -:10038000000000000000000000000000000000006D -:10039000000000000000000000000000000000005D -:1003A000000000000000000000000000000000004D -:1003B000000000000000000000000000000000003D -:1003C000000000000000000000000000000000002D -:1003D000000000000000000000000000000000001D -:1003E000000000000000000000000000000000000D -:1003F00000000000000000000000000000000000FD -:1004000000000000000000000000000000000000EC -:1004100000000000000000000000000000000000DC -:1004200000000000000000000000000000000000CC -:1004300000000000000000000000000000000000BC -:1004400000000000000000000000000000000000AC -:10045000000000000000000000000000000000009C -:10046000000000000000000000000000000000008C -:10047000000000000000000000000000000000007C -:10048000000000000000000000000000000000006C -:10049000000000000000000000000000000000005C -:1004A000000000000000000000000000000000004C -:1004B000000000000000000000000000000000003C -:1004C0000000000000000000000000000004000028 -:1004D0000000000000000004000000000000000018 -:1004E000020000000000000000000000000000000A -:1004F00000000000000000000000000000000000FC -:1005000000010000000000000000000000000004E6 -:1005100000040000000000000204000000000000D1 -:1005200000000000000000000000000000000000CB -:10053000000000000000000020000000000000009B -:10054000000000000000000000000000000040006B -:100550000000000000020000000000000000000099 -:1005600000008000000000000000000040000000CB -:10057000000000000000000000000000000000007B -:10058000000000000000000000000000000000006B -:10059000000000000000000000000000000000005B -:1005A000000000000000000000000000000000004B -:1005B00040000000000000000000000000000000FB -:1005C000000000000000000000000000000000002B -:1005D000000000000000000000000000000000001B -:1005E000000000000000000000000000000000000B -:1005F00000000000000000000000000000000000FB -:1006000000000000000000000000000000000000EA -:1006100000000000000000000000000000000000DA -:1006200000000000000000000000000000000000CA -:1006300000000000000000000000000004000000B6 -:1006400000000000000000000000000000000400A6 -:10065000000000000000000000000000000000009A -:100660000000000000000400000000000000000086 -:100670000000000000000400000000000000000076 -:10068000000000000000000020000000000000004A -:10069000040000000400040000000000000000004E -:1006A000000000000000000000000000000000004A -:1006B000000000000000000000000000000000003A -:1006C0000200000000000000000000000000000028 -:1006D000000000000000000000000000000000001A -:1006E000000000000000000000000000000000000A -:1006F00000000000000000000000000000000000FA -:1007000000000000000000000000000000000000E9 -:1007100000000000000000000000000000000000D9 -:1007200000000000000000000000000000000000C9 -:1007300000000000000000000000000000000000B9 -:1007400000000000000000000000000000000000A9 -:100750000000000000000000000000000000000099 -:100760000000000000000000000000000000000089 -:100770000000000000000000000000000000000079 -:100780000000000000000000000000000000000069 -:100790000000000000000000000000000000000059 -:1007A0000000000000000000000000000000000049 -:1007B0000000000000000000000000000000000039 -:1007C0000000000000000000000000000000000029 -:1007D0000000000000000000000000000000040015 -:1007E0000000000000000000000000000000000009 -:1007F00000400100000000000000000000000000B8 -:1008000000000000000000000000000000000000E8 -:1008100000000000000000000000000000000000D8 -:1008200000000000000000000000000000000000C8 -:1008300000000000000000000000000000000000B8 -:1008400000000000000000000000000000000000A8 -:100850000000000000000000000000000000000098 -:100860000000000000000000000000000000000088 -:100870000000000004000000000000000000000074 -:100880000000000000000000000000000000000068 -:100890000000000000000000000000000000000058 -:1008A0000000000000000000000000000000000048 -:1008B0000000000000000000000000000000000038 -:1008C0000000000000000000000000000000000028 -:1008D0000000000000000000000000000000000018 -:1008E0000000000000000000000000000000000008 -:1008F00000000000002000000000000000000000D8 -:1009000000000000000000000000000000000000E7 -:1009100000000000000000000000000000000000D7 -:1009200000000000000000000000000000000000C7 -:1009300000000000000000000000000000000000B7 -:1009400000000000000000000000000000000000A7 -:100950000000000000000000000000000000000097 -:1009600008840000000000000000000000000000FB -:100970000000000000000001000000000000000076 -:100980000000000000000000000000000000000067 -:100990000000000000000000000000000000000057 -:1009A0000000000000000000000000000000000047 -:1009B0000000000000000000000000000000000037 -:1009C0000000000000000000000000000000000027 -:1009D0000000000000000000000000000000000017 -:1009E0000000000000000000000000020000000005 -:1009F00000000000000000000000000000000000F7 -:100A000000000000000000000000000000000000E6 -:100A100000000000000000000000000000000000D6 -:100A200000000000000000000000000000000000C6 -:100A300000000000000000000000000000000000B6 -:100A400000000000000000000000000000000000A6 -:100A50000000000000000000000000000000000096 -:100A60000000000000000000000000000000000086 -:100A70000000000000000000000000000000000076 -:100A80000000000000000000000000000000000066 -:100A90000000000000000000000000000000000056 -:100AA0000000000000000000000000000000000046 -:100AB0000000000000000000000000000000000036 -:100AC0000000000000000000000000000000000026 -:100AD0000000000000000000000000000000000016 -:100AE0000000000000000000000000000000000006 -:100AF0000000000000000000000090400000000026 -:100B000000000000000000000000000000000000E5 -:100B100000000000000000000000000000000000D5 -:100B200000000000000000000000000000000000C5 -:100B300000000000000000000000000000000000B5 -:100B400000000000000000000000000000000000A5 -:100B50000000000000000000000000000000000095 -:100B60000000000000000000000000000000000085 -:100B700000000000000000000000110080000000E4 -:100B80000000000000000000000000000000000065 -:100B90000000000000000000000000000000000055 -:100BA0000000000000000000000000000000000045 -:100BB0000000000000000000000000000000000035 -:100BC0000000000000000000000000000000000025 -:100BD0000000000000000000000000000000000015 -:100BE0000000000000000000000000000000000005 -:100BF0000000000000000000000000000000008075 -:100C00000000008000000000000000000000000064 -:100C100000000000000000000000000000000000D4 -:100C200000000000000000000000000000000000C4 -:100C300000000000000000000000000000000000B4 -:100C400000000000000000000000000000000000A4 -:100C50000000000000000000000000000000000094 -:100C60000000000000000000000000000000000084 -:100C70000000000000000000000000000000000074 -:100C80000020000000C00000000000000000000084 -:100C90000000000000000000000000000000000054 -:100CA0000000000000000000000000000000000044 -:100CB0000000000000000000000000000000000034 -:100CC0000000000000000000000000000000000024 -:100CD0000000000000000000000000000000000014 -:100CE0000000000000000000000000000000000004 -:100CF00000000000000000000000000000000000F4 -:100D000001000088880001000000000000000000D1 -:100D100000000000000000000000000000000000D3 -:100D200000000000000000000000000000000000C3 -:100D300000000000000000000000000000000000B3 -:100D400000000000000000000000000000000000A3 -:100D50000000000000000000000000000000000093 -:100D60000000000000000000000000000000000083 -:100D70000000000000000000000000000000000073 -:100D80000000410000800000090000000000000099 -:100D90000000000000000000000000000000000053 -:100DA0000000000000000000000000000000000043 -:100DB0000000000000000000000000000000000033 -:100DC0000000000000000000000000000000000023 -:100DD0000000000000000000000000000000000013 -:100DE0000000000000000000000000000000000003 -:100DF00000000000000000000000000000000000F3 -:100E00000000000000110000008000000000000051 -:100E100000000000000000000000000000000000D2 -:100E200000000000000000000000000000000000C2 -:100E300000000000000000000000000000000000B2 -:100E400000000000000000000000000000000000A2 -:100E50000000000000000000000000000000000092 -:100E60000000000000000000000000000000000082 -:100E70000000000000000000000000000000000072 -:100E80000000000000000001000000400000000021 -:100E90000000000000000000000000000000000052 -:100EA0000000000000000000000000000000000042 -:100EB0000000000000000000000000000000000032 -:100EC0000000000000000000000000000000000022 -:100ED0000000000000000000000000000000000012 -:100EE0000000000000000000000000000000000002 -:100EF00000000000000000000000000000000000F2 -:100F00000000000000000000000000000700822137 -:100F100000000000000000000000000000000000D1 -:100F200000000000000000000000000000000000C1 -:100F300000000000000000000000000000000000B1 -:100F400000000000000000000000000000000000A1 -:100F50000000000000000000000000000000000091 -:100F60000000000000000000000000000000000081 -:100F70000000000000000000000000000000000071 -:100F80000000000000000000000000000000000061 -:100F9000F0F0000000000000000000000000000071 -:100FA0000000000000000000000000000000000041 -:100FB0000000000000000000000000000000000031 -:100FC0000000000000000000000000000000000021 -:100FD0000000000000000000000000000000000011 -:100FE0000000000000000000000000000000000001 -:100FF00000000000000000000000000000000000F1 -:1010000000000000000000000000000000000000E0 -:101010000000F0F0000000000000000000000000F0 -:1010200000000000000000000000000000000000C0 -:1010300000000000000000000000000000000000B0 -:1010400000000000000000000000000000000000A0 -:101050000000000000000000000000000000000090 -:101060000000000000000000000000000000000080 -:101070000000000000000000000000000000000070 -:101080000000000000000000000000000000000060 -:101090000000000000000000000000000000000050 -:1010A0000000000000000000000000000000000040 -:1010B0000000000000000000000000000000000030 -:1010C0000000000000000000000000000000000020 -:1010D0000000000000000000000000000000000010 -:1010E0000000000000000000000000000000000000 -:1010F00000000000000000000000000000000000F0 -:1011000000000000000000000000000000000000DF -:1011100000FF0000FFFF00000000000000000000D2 -:1011200000000000000000000000000000000000BF -:1011300000000000000000000000000000000000AF -:10114000000000000000000000000000000000009F -:10115000000000000000000000000000000000008F -:10116000000000000000000000000000000000007F -:10117000000000000000000000000000000000006F -:10118000000000000000000000000000000000005F -:10119000000000FF00000000000000000000000050 -:1011A000000000000000000000000000000000003F -:1011B000000000000000000000000000000000002F -:1011C000000000000000000000000000000000001F -:1011D000000000000000000000000000000000000F -:1011E00000000000000000000000000000000000FF -:1011F00000000000000000000000000000000000EF -:1012000000000000000000000000000000000000DE -:101210000000000005002A00054000A800000000B2 -:1012200000000000000000000000000000000000BE -:1012300000000000000000000000000000000000AE -:10124000000000000000000000000000000000009E -:10125000000000000000000000000000000000008E -:10126000000000000000000000000000000000007E -:10127000000000000000000000000000000000006E -:10128000000000000000000000000000000000005E -:10129000000000000000000000000000000000004E -:1012A000000000000000000000000000000000003E -:1012B000000000000000000000000000000000002E -:1012C000000000000000000000000000000000001E -:1012D000000000000000000000000000000000000E -:1012E00000000000000000000000000000000000FE -:1012F00000000000000000000000000000000000EE -:1013000000000000000000000000000000000000DD -:1013100000000000000000000000000000000000CD -:1013200000000000000000000000000000000000BD -:1013300000000000000000000000000000000000AD -:10134000000000000000000000000000000000009D -:10135000000000000000000000000000000000008D -:10136000000000000000000000000000000000007D -:10137000000000000000000000000000000000006D -:10138000000000000000000000000000000000005D -:10139000000000000000000000000000000000004D -:1013A000000000000000000000000000000000003D -:1013B000000000000000000000000000000000002D -:1013C000000000000000000000000000000000001D -:1013D000000000000000000000000000000000000D -:1013E00000000000000000000000000000000000FD -:1013F00000000000000000000000000000000000ED -:1014000000000000000000000000000000000000DC -:1014100000000000000000000000000000000000CC -:1014200000000000000000000000000000000000BC -:1014300000000000000000000000000000000000AC -:10144000000000000000000000000000000000009C -:10145000000000000000000000000000000000008C -:10146000000000000000000000000000000000007C -:10147000000000000000000000000000000000006C -:10148000000000000000000000000000000000005C -:101490000000000000000400000000000000000048 -:1014A00000000000000000000000000000000080BC -:1014B0000080008000802000000000000000000389 -:1014C000000000000000000000000000000000001C -:1014D000000000000200000000000000000000000A -:1014E00000000000000000000000000000000000FC -:1014F00000000400000000000000000000000000E8 -:1015000000000000000000000000000000000000DB -:1015100000000000000000000000000000000000CB -:1015200000000000000000000000000000000000BB -:10153000000400040004000400000000009000000B -:10154000000000000000000000000000000040005B -:10155000000000000000000000000000000000008B -:10156000000000000000000000000000000000007B -:10157000000000000000000000000000000000006B -:10158000000000000000000000000000000000005B -:10159000001000000000000000000000000000003B -:1015A000000000000000000000000000000000003B -:1015B0000000010001000100010000000000000027 -:1015C000000000000000000000000000000000001B -:1015D000000000000000000000000000000000000B -:1015E00000000000010000000000000000000000FA -:1015F00000000000000000000000000000000000EB -:1016000000000000000000000000000000000000DA -:1016100000000000000004000000040000000000C2 -:1016200000000000000000000000000000000000BA -:10163000000000002000200020002000000000002A -:10164000000000000000000000000000000000009A -:101650000000000000000000000000000400040082 -:10166000040004000400020000000000000000006C -:101670000000000000000400000000000000000066 -:10168000000000000000000000000000000000005A -:10169000000000000000000000000000000000004A -:1016A000000000000000000000000000000000003A -:1016B000000000000000000000000000000000002A -:1016C000000000000000000000000000000000001A -:1016D000000000000000000000000000000000000A -:1016E00000000000000000000000000000000000FA -:1016F00000000000000000000000000000000000EA -:1017000000000000000000000000000000000000D9 -:1017100000000000000000000000000000000000C9 -:1017200000000000000000000000000000000000B9 -:1017300000000000000000000000000000000000A9 -:101740000000000000000000000000000000000099 -:101750000000000000000000000000000000000089 -:101760000000000000000000000000000000000079 -:101770000000000000000000000000000000000069 -:101780000000000000000000000000000000000059 -:101790000000000000000000000000000000000049 -:1017A0000000000000000000000000000000000039 -:1017B0000000000000000000000000000000000029 -:1017C0000000000000000000000000000000000019 -:1017D0000000000000000000000000000000000009 -:1017E00000000000000000000000000000000000F9 -:1017F00000000100000000000000000000000000E8 -:1018000008000000000000000000000000000000D0 -:1018100000000000000000000000000000000000C8 -:1018200000000000000000000000000000000000B8 -:1018300000000000000000000000000000000000A8 -:101840000000000000000000000000000000000098 -:101850000000000000000000000000000000000088 -:101860000000000000000000000000000000000078 -:101870000000000004000000000000000000000064 -:101880000000000000000000000000000000000058 -:101890000000000000000000000000000000000048 -:1018A0000000000000000000000000000000000038 -:1018B00000000000000000000000000084000000A4 -:1018C0000000000000000000000000000000000018 -:1018D0000000000000000000000000000000000008 -:1018E00000000000000000000800000000000000F0 -:1018F00000000000002000000000000000000000C8 -:1019000000000000000000000000000000000000D7 -:1019100000000000000000000000000000000000C7 -:1019200000000000000000000000000000000000B7 -:101930000000000000000084000000000000000023 -:101940000000000000000000000000000000000097 -:101950000000000000000000000000000000000087 -:101960000000000000000000000000000000000077 -:101970000000000000000001000000000000000066 -:101980000000000000000000000000000000000057 -:101990000000000000000000000000000000000047 -:1019A0000000000000000000000000000000000037 -:1019B0000000000000000000000000000000000027 -:1019C0000002000000000000000000000000000015 -:1019D0000000000000000000000000000000000007 -:1019E00000000000000000000000000000000000F7 -:1019F00000000000000000000000000000000000E7 -:101A000000000000000000000000000000000000D6 -:101A100000000000000000000000000000000000C6 -:101A200000000000000000000000000000000000B6 -:101A300000000000000000000000000000000000A6 -:101A40000000000000000000000000000000000096 -:101A50000000000000000000000000000000000086 -:101A60000000000000000000000000000000000076 -:101A70000000000000000000000000000000000066 -:101A80000000000000000000000000000000000056 -:101A90000000000000000000000000000000000046 -:101AA0000000000000000000000000000000000036 -:101AB0000000000000000000000000000000000026 -:101AC0000000000000000000000000000000000016 -:101AD0000000000000000000000000000000000006 -:101AE00000000000000000000000000000000000F6 -:101AF0000000000000000000000090000000000254 -:101B000000000000000000000000000000000000D5 -:101B100000000000000000000000000000000000C5 -:101B200000000000000000000000000000000000B5 -:101B300000000000000000000000000000000000A5 -:101B40000000000000000000000000000000000095 -:101B50000000000000000000000000000000000085 -:101B60000000000000000000000000000000000075 -:101B700000000000000000000000110080000000D4 -:101B800000800000000000000000000000000000D5 -:101B90000000000000000000000000000000000045 -:101BA0000000000000000000000000000000000035 -:101BB0000000000000000000000000000000000025 -:101BC00000000000000000000000002000000041B4 -:101BD0000000000000000000000000000000000005 -:101BE00000000000000000000000000000000000F5 -:101BF0000000000000000000000000000000008065 -:101C00000000008000000000000000000000000054 -:101C100000000000000000000000000000000000C4 -:101C200000000000000000000000000000000000B4 -:101C300000000000000000000000000000000000A4 -:101C40000000000000000000000000000000000094 -:101C50000001000000000000000000000000000083 -:101C60000000000000000000000000000000000074 -:101C70000000000000000000000000000000000064 -:101C80000020000000C00000000000000000000074 -:101C90000000000000000000000000000000000044 -:101CA0000000000000000000000000000000000034 -:101CB0000000000000000000000000000000000024 -:101CC0000000000000000000000000000000000014 -:101CD0000200000001000000000000000000000001 -:101CE00000000000000000000000000000000000F4 -:101CF00000000000000000000000000000000000E4 -:101D000001000088880001000000000000000000C1 -:101D100000000000000000000000000000000000C3 -:101D200000000000000000000000000000000000B3 -:101D300000000000000000000000000000000000A3 -:101D40000000000000000000000000000000000093 -:101D500000008000000041000000000000000000C2 -:101D60000000000000000000000000000000000073 -:101D70000000000000000000000000000000000063 -:101D80000000410000800000090000000000000089 -:101D90000000000000000000000000000000000043 -:101DA0000000000000000000000000000000000033 -:101DB0000000000000000000000000000000000023 -:101DC0000000000000000000000000000000000013 -:101DD0000000000000000000000000000000000003 -:101DE00000000000000000000000000000000000F3 -:101DF00000000000000000000000000000000000E3 -:101E00000000000000110000008000000000000041 -:101E100000000000000000000000000000000000C2 -:101E200000000000000000000000000000000000B2 -:101E300000000000000000000000000000000000A2 -:101E40000000000000000000000000000000000092 -:101E50000000000000000000000000000000000082 -:101E60000000000000000000000000000000000072 -:101E70000000000000000000000000000000000062 -:101E80000000000000000001000000400000000011 -:101E90000000000000000000000000000000000042 -:101EA0000000000000000000000000000000000032 -:101EB0000000000000000000000000000000000022 -:101EC0000000000000000000000000000000000012 -:101ED000000000000000000002E0000000420000DE -:101EE00000000000000000000000000000000000F2 -:101EF00000000000000000000000000000000000E2 -:101F00000000000000000000000000000700822127 -:101F100000000000000000000000000000000000C1 -:101F200000000000000000000000000000000000B1 -:101F300000000000000000000000000000000000A1 -:101F40000000000000000000000000000000000091 -:101F50000000000000000000000000000000000081 -:101F60000000000000000000000000000000000071 -:101F70000000000000000000000000000000000061 -:101F80000000000000000000000000000000F0F071 -:101F90000000000000000000000000000000000041 -:101FA0000000000000000000000000000000000031 -:101FB0000000000000000000000000000000000021 -:101FC0000000000000000000000000000000000011 -:101FD0000000000000000000000000000000000001 -:101FE00000000000000000000000000000000000F1 -:101FF00000000000000000000000000000000000E1 -:1020000000000000000000000000000000000000D0 -:10201000F0F00000000000000000000000000000E0 -:1020200000000000000000000000000000000000B0 -:1020300000000000000000000000000000000000A0 -:102040000000000000000000000000000000000090 -:102050000000000000000000000000000000000080 -:102060000000000000000000000000000000000070 -:102070000000000000000000000000000000000060 -:102080000000000000000000000000000000000050 -:102090003C3C0000FFFF00000000000000000000CA -:1020A0000000000000000000000000000000000030 -:1020B0000000000000000000000000000000000020 -:1020C0000000000000000000000000000000000010 -:1020D0000000000000000000000000000000000000 -:1020E00000000000000000000000000000000000F0 -:1020F00000000000000000000000000000000000E0 -:1021000000000000000000000000000000000000CF -:1021100000003C3C00000000000000000000000047 -:1021200000000000000000000000000000000000AF -:10213000000000000000000000000000000000009F -:10214000000000000000000000000000000000008F -:10215000000000000000000000000000000000007F -:1021600000650006000F20000000000000000000D5 -:10217000000000000000000000000000000000005F -:10218000000000000000000000000000000000004F -:10219000000005002A00054000A800000000000023 -:1021A000000000000000000000000000000000002F -:1021B000000000000000000000000000000000001F -:1021C000000000000000000000000000000000000F -:1021D00000000000000000000000000000000000FF -:1021E00000000000000000000000000000000000EF -:1021F00000000000000000000000000000000000DF -:1022000000000000000000000000000000000000CE -:1022100000000000000000000000000000000000BE -:1022200000000000000000000000000000000000AE -:10223000000000000000000000000000000000009E -:10224000000000000000000000000000000000008E -:10225000000000000000000000000000000000007E -:10226000000000000000000000000000000000006E -:10227000000000000000000000000000000000005E -:10228000000000000000000000000000000000004E -:10229000000000000000000000000000000000003E -:1022A000000000000000000000000000000000002E -:1022B000000000000000000000000000000000001E -:1022C000000000000000000000000000000000000E -:1022D00000000000000000000000000000000000FE -:1022E00000000000000000000000000000000000EE -:1022F00000000000000000000000000000000000DE -:1023000000000000000000000000000000000000CD -:1023100000000000000000000000000000000000BD -:1023200000000000000000000000000000000000AD -:10233000000000000000000000000000000000009D -:10234000000000000000000000000000000000008D -:10235000000000000000000000000000000000007D -:10236000000000000000000000000000000000006D -:10237000000000000000000000000000000000005D -:10238000000000000000000000000000000000004D -:10239000000000000000000000000000000000003D -:1023A000000000000000000000000000000000002D -:1023B000000000000000000000000000000000001D -:1023C00020002000000000000000000000000000CD -:1023D00000000000000000020000000000000000FB -:1023E00000100000000000000000000000000000DD -:1023F00000000000000000000000000100000000DC -:1024000000000000000000000000000000000000CC -:1024100000000000000000000002000200000000B8 -:1024200000000002000000000000000000000000AA -:10243000000000000000010000000000000000009B -:10244000000000000000000000000000000000008C -:10245000000000000000100000000000000000006C -:10246000000000010000000000000000000000006B -:10247000000000000000000000000000000000005C -:10248000000000000000000000000000000000004C -:1024900000000000000000000000400000000000FC -:1024A000000000000000000000000000000000002C -:1024B0000000000000000000080000000000000014 -:1024C000000000000000000000000000000000000C -:1024D0000000000000000000000088000000000074 -:1024E00000000000000000000000000000000000EC -:1024F00000000000000000000000000000000000DC -:1025000000000000000000000000000000000000CB -:1025100000000000000000000000000004000400B3 -:1025200000000000000000000000000000000000AB -:10253000000000000000000000000000000000009B -:10254000000000000000000000400000000000004B -:102550000000000000000000040000000000000077 -:10256000000000000000000000000000000000006B -:102570000400000000000000000000000000000057 -:102580000000040000000000000000000000000047 -:102590000000040000000000000004000000000033 -:1025A000000000000000000000000000000000002B -:1025B000000000000000000000000000000000001B -:1025C000000000000000000000000000000000000B -:1025D00000000000000000000000000000000000FB -:1025E00000000000000000000000000000000000EB -:1025F00000000000000000000000000000000000DB -:1026000000000000000000000000000000000000CA -:1026100000000000000000000000000000000000BA -:1026200000000000000000000000000000000000AA -:10263000000000000000000000000000000000009A -:10264000000000000000000000000000000000008A -:10265000000000000000000000000000000000007A -:10266000000000000000000000000800080000005A -:10267000000000000000000000000000000000005A -:10268000000000000000000000000000000000004A -:10269000000000000000000000000000000000003A -:1026A000000000000000000000000000000000002A -:1026B000000000000000000000000000000000001A -:1026C000000000000000000000000000000000000A -:1026D0000000A00000000000000000000800000052 -:1026E00000000000000000000000000401000000E5 -:1026F00000000000000000000000000000000000DA -:1027000000000000000000000000000000000000C9 -:1027100000000000000000000000000000000000B9 -:1027200000000000000000000000000000000000A9 -:102730000000000000000000000000000000000099 -:102740000000000000000000000000000000000089 -:102750000000000000000000000000000000000079 -:102760000000000000000000000000000000200049 -:102770000000000000000000000000000000000059 -:102780000000000000000000000000000000000049 -:102790000000000000000000000000000000000039 -:1027A0000000000000000000000000000000000029 -:1027B0000000000000000000000000000000000019 -:1027C0000000000000000000000000000000000009 -:1027D00000000000000000000000000000000000F9 -:1027E00000000000000082000000000088000000DF -:1027F00000000000000000000000000000000000D9 -:1028000000000000000000000000000000000000C8 -:1028100000000000000000000000000000000000B8 -:1028200000000000000000000000000000000000A8 -:102830000000000000000000000000000000000098 -:102840000000000000000000000000000000000088 -:102850000000000000000000000000000000000078 -:102860000000000000000000000000000000000068 -:102870000000000000000000000000000000000058 -:102880000000000000000000000000000000000048 -:102890000000000000000000000000000000000038 -:1028A0000000000000000000000000000000000028 -:1028B0000000000000840000000000000000000094 -:1028C0000000000000000000000000000000000008 -:1028D00000000800000000000000000000000000F0 -:1028E00000000000000000000000000000000000E8 -:1028F00000000000000000000000000000000000D8 -:1029000000000000000000000000000000000000C7 -:1029100000000000000000000000000000000000B7 -:1029200000000000000000000000000000000000A7 -:102930000000000000000000000000000000000295 -:102940000000000000000000000000000000000087 -:102950000000000000000000000000000000000077 -:102960000000000000000000000000000000000067 -:102970000000000000000300000000000000000054 -:102980000000000000000000000000000000000047 -:102990000000000000000000050000000000000032 -:1029A0000000000000000000000000000000000027 -:1029B0000000000000000000000000000000000017 -:1029C0000000000000000000000000000000000007 -:1029D00000000000000000000000000000000000F7 -:1029E00000000000000000000000000000000000E7 -:1029F00000000000000001000000000000000000D6 -:102A000000000000000000000000000000000000C6 -:102A100000000000000000000000000000000000B6 -:102A200000000000000000000000000000000000A6 -:102A30000000000000000000000000000000000096 -:102A40000000000000000000000000000000000086 -:102A500000900000000000000000000000000000E6 -:102A60000000000000000000000000000000000066 -:102A70000000000000000000040000000000000052 -:102A80000000000000000000000000000000000046 -:102A90000000000000000000000000000000000036 -:102AA0000000000000000000000000000000000026 -:102AB0000000000000000000000000000000000016 -:102AC0000000000000000000000000000000000006 -:102AD00000000000000000000000000000000000F6 -:102AE00000000000000000000000000000000000E6 -:102AF0000000000000000000800000000000000056 -:102B000000000000000000000000000000000000C5 -:102B100000000000000000000000000000000000B5 -:102B200000000000000000000000000000000000A5 -:102B30000000000000000000000000000000000095 -:102B40000000000000000000000000000000000085 -:102B50000000000000000000000000000000000075 -:102B60000000000000000000000000000000000065 -:102B7000000000000000000000008200000008408B -:102B80000000000000000000000000000000000045 -:102B90000000000000000000000000000000000035 -:102BA0000000000000000000000000000000000025 -:102BB0000000000000000000000000000000000015 -:102BC0000000000000000000000000000000000005 -:102BD00000000000000000000000000000000000F5 -:102BE00000000000000000000000000000000000E5 -:102BF00000000000000000000000000000000000D5 -:102C000000000000000000000000000000000000C4 -:102C100000000000000000000000000000000000B4 -:102C200000000000000000000000000000000000A4 -:102C30000000000000000000000000000000000094 -:102C40000000000000000000000000000000000084 -:102C50000000000000000000000000000000000074 -:102C60000000000000000000000000000000000064 -:102C70000000000000000000000000000000000054 -:102C80000000030000000000000000000000000041 -:102C90000000000000000000000000000000000034 -:102CA0000000000000000000000000000000000024 -:102CB0000000000000000000000000000000000014 -:102CC0000000000000000000000000000000000004 -:102CD00000000000000000000000000000000000F4 -:102CE00000000000000000000000000000000000E4 -:102CF00000000000000000000000000000000000D4 -:102D000000000000000000000000000000000000C3 -:102D100000000000000000000000000000000000B3 -:102D200000000000000000000000000000000000A3 -:102D30000000000000000000000000000000000093 -:102D40000000000000000000000000000000000083 -:102D50000000000000000000000000000000000073 -:102D60000000000000000000000000000000000063 -:102D70000000000000000000000000000000000053 -:102D800000000000008800000000000000000000BB -:102D90000000000000000000000000000000000033 -:102DA0000000000000000000000000000000000023 -:102DB0000000000000000000000000000000000013 -:102DC0000000000000000000000000000000000003 -:102DD00000000000000000000000000000000000F3 -:102DE00000000000000000000000000000000000E3 -:102DF00000000000000000000000000000000000D3 -:102E00000000600000E00000000000000000000082 -:102E100000000000000000000000000000000000B2 -:102E200000000000000000000000000000000000A2 -:102E30000000000000000000000000000000000092 -:102E40000000000000000000000000000000000082 -:102E50000000000000000000000000000000000072 -:102E60000000000000000000000000000000000062 -:102E70000000000000000000000000000000000052 -:102E80000000000000000000000000000000000042 -:102E90000000000000000000000000000000000032 -:102EA0000000000000000000000000000000000022 -:102EB0000000000000000000000000000000000012 -:102EC0000000000000000000000000000000000002 -:102ED00000000000000000000000000000000000F2 -:102EE00000000000000000000000000000000000E2 -:102EF00000000000000000000000000000000000D2 -:102F000000000000000000000000000000000000C1 -:102F100000000000000000000000000000000000B1 -:102F200000000000000000000000000000000000A1 -:102F30000000000000000000000000000000000091 -:102F40000000000000000000000000000000000081 -:102F50000000000000000000000000000000000071 -:102F60000000000000000000000000000000000061 -:102F70000000000000000000000000000000000051 -:102F80000000000000000000000000000000000041 -:102F90000000000000000000000000000000000031 -:102FA0000000000000000000000000000000000021 -:102FB0000000000000000000000000000000000011 -:102FC0000000000000000000000000000000000001 -:102FD00000000000000000000000000000000000F1 -:102FE00000000000000000000000000000000000E1 -:102FF00000000000000000000000000000000000D1 -:1030000000000000000000000000000000000F0FA2 -:10301000FFFF0000000000000000000000000000B2 -:1030200000000000000000000000000000000000A0 -:103030000000000000000000000000000000000090 -:103040000000000000000000000000000000000080 -:103050000000000000000000000000000000000070 -:1030600000000000F0F0F0F00000000000000000A0 -:103070000000000000000000000000000000000050 -:103080000000000000000000000000000000000040 -:103090000000F0F000000000000000000000000050 -:1030A0000000000000000000000000000000000020 -:1030B0000000000000000000000000000000000010 -:1030C0000000000000000000000000000000000000 -:1030D00000000000000000000000000000000000F0 -:1030E000000000000000F0F0F0F000000000000020 -:1030F00000000000000000000000000000000000D0 -:10310000000000000000000000000000000000615E -:103110000007800D200000000000000000000000FB -:10312000000000000000000000000000000000009F -:10313000000000000000000000000000000000008F -:10314000000000000000000000000000000000007F -:10315000000000000000000000000000000000006F -:10316000000000000000000000000000000000005F -:10317000000000000000000000000000000000004F -:10318000000000000000000000000000000000003F -:10319000000000000000000000000000000000002F -:1031A000000000000000000000000000000000001F -:1031B000000000000000000000000000000000000F -:1031C00000000000000000000000000000000000FF -:1031D00000000000000000000000000000000000EF -:1031E00000000000000000000000000000000000DF -:1031F00000000000000000000000000000000000CF -:1032000000000000000000000000000000000000BE -:1032100000000000000000000000000000000000AE -:10322000000000000000000000000000000000009E -:10323000000000000000000000000000000000008E -:10324000000000000000000000000000000000007E -:10325000000000000000000000000000000000006E -:10326000000000000000000000000000000000005E -:10327000000000000000000000000000000000004E -:10328000000000000000000000000000000000003E -:10329000000000000000000000000000000000002E -:1032A000000000000000000000000000000000001E -:1032B000000000000000000000000000000000000E -:1032C00000000000000000000000000000000000FE -:1032D00000000000000000000000000000000000EE -:1032E00000000000000000000000000000000000DE -:1032F00000000000000000000000000000000000CE -:1033000000000000000000000000000000000000BD -:1033100000000000000000000000000000000000AD -:10332000000000000000000000000000000000009D -:10333000000000000000000000000000000000008D -:10334000000000000000000000000000000000007D -:10335000000000000000000000000000000000006D -:10336000000000000000000000000000000000005D -:10337000000000000000000000000000200020000D -:1033800020002000000000000000000000000000FD -:103390000000000000000000000000002000040009 -:1033A00000002000000000000000000000000000FD -:1033B00000000000000000000003000000002000EA -:1033C000400000002000000000000000000000009D -:1033D0008800000000000000000000000000000065 -:1033E00020000000000004000400000000000000B5 -:1033F00020000000000000000000000000000000AD -:1034000000000000000000000000000000000000BC -:1034100000000000000000000000000000000000AC -:103420000000000000000000000000A000000000FC -:1034300000A00000000040A000000000000000000C -:10344000000000000000000000000000000000007C -:10345000000000000000000000000000000000006C -:10346000000000000000000000000000000000005C -:10347000000000000000000000000000000000004C -:10348000000000000200000000000000000000003A -:1034900000000000000000400000000001000000EB -:1034A000000000000000000000000000000000001C -:1034B00000002000030000000000200000000000C9 -:1034C00000000400040000000000000000000000F4 -:1034D00000000000000000000000000000000000EC -:1034E00000000000040000000000000000000500D3 -:1034F00000000000000000000000000000000000CC -:1035000000000000040000000000000000080000AF -:10351000000000000000004000000000000010005B -:10352000040000002000000000000000000800006F -:10353000000000008000A0000000000080000000EB -:10354000040004000000000000000000000000086B -:10355000000000000000000000000000000000006B -:10356000000000000000000004000400000000084B -:103570000200000000000000000000000000000049 -:10358000000000000000000000000000000000003B -:10359000000000000000000000000000000000002B -:1035A000000000000000000000000000000000001B -:1035B0000000000000000000000000000000A1006A -:1035C00000000000000000000000000000000000FB -:1035D00000000000000000000000000000000000EB -:1035E00000000000000000000000000000000000DB -:1035F00000000000000000000000000000000000CB -:1036000000000000000000000000000000000000BA -:1036100000000000000000000000000000000000AA -:10362000000000000000000000000000000000009A -:10363000000000000000000000000000000000008A -:103640000400000000000000000000000000000076 -:10365000000000000000000000000000000000006A -:10366000000000000000000000000000000000005A -:10367000000000000000000000000000000000004A -:10368000000000000000000000000000000000003A -:1036900000000000000000000000A000000000008A -:1036A000000008000000C00001000080C000000011 -:1036B0000000820000000000000000000000000088 -:1036C00000000100000000000000000008000000F1 -:1036D00000000000000000000000000000000000EA -:1036E00000000000000000000000080000000000D2 -:1036F00008000000000000000000000001000000C1 -:1037000000000000000000000000000000000000B9 -:1037100000000000000000000000000000000000A9 -:103720000000000000000000000020000004000075 -:103730000000000000000000000000000000000089 -:103740000000000002000000000000000000000077 -:103750000000000000000000000000000000000069 -:103760000000000000000000000000000000000059 -:103770000000000000000000000000000000040045 -:103780000000000000000000000000000000000039 -:103790000000000000000000000000000000000029 -:1037A00000000000080090000000A00000000000E1 -:1037B000080000000000000000008200000000007F -:1037C00000000000002000000000000000000000D9 -:1037D00000000000000000000000000000000000E9 -:1037E00000000000000000000000000000000000D9 -:1037F00000000000000000000000000000000020A9 -:1038000000000000000000000000000000000000B8 -:1038100000000000000000000000000000000000A8 -:10382000000000000000000000000900000000008F -:103830000084000000000000000000000000000004 -:103840000000000000000001000000000000000077 -:103850000000000000000000000000000000000068 -:103860000000000000000000000000000000000058 -:103870000000000000000000000000000000000048 -:103880000001000000000300000000000000000034 -:103890000000000000000000000008000000000020 -:1038A0000000000000000800000000000000000010 -:1038B0000000000000000000000000020000000006 -:1038C0000000C00000000000000000000000000038 -:1038D00000000009000000000000000000000000DF -:1038E00000000000000000000000000000000000D8 -:1038F00000000000000000000000000000000000C8 -:1039000000000000000000000000000000000000B7 -:1039100000000000000000000000000000000000A7 -:103920000000000000000000000000000000000097 -:1039300000000088000000000000000000000000FF -:103940000000000000000000000000000000000077 -:103950000000000000000000000000000000000067 -:103960000000000000000000000000000000000057 -:103970000000000000000000000000000000000047 -:103980000000000000000000000000000000000037 -:103990000000000000000000000000000000000027 -:1039A0000000000000000000000000000000000017 -:1039B0000100000000000000000000000000000006 -:1039C0000000000000000000000090000000004027 -:1039D00000000000000000000000000000000000E7 -:1039E00000000000000000000000000000000000D7 -:1039F00000000000000000000000000000000000C7 -:103A000000000000900000400000000000000000E6 -:103A100000000000000000000000000000000000A6 -:103A20000000000000000000000000000000000096 -:103A30000000110021000000000000000000000054 -:103A400000000000000000000000110080000000E5 -:103A50000000000000000000000000000000000066 -:103A60000000000000000000000000000000000056 -:103A70000000000000000000000000000000000046 -:103A800000000000110080000000000000000000A5 -:103A90000000000000000000000000000000000026 -:103AA0000000000000000000000000000000000016 -:103AB00000000000004109000003000000000000B9 -:103AC0000000000000000000000000000040008036 -:103AD00000000000000000000000000000000000E6 -:103AE00000000000000000000000000000000000D6 -:103AF00000000000000000000000000000000000C6 -:103B000000000000000000000080000000800000B5 -:103B100000000000000000000000000000000000A5 -:103B20000000000000000000000000000000000095 -:103B30000000000000000001010000000000000083 -:103B40000000000000000000000000000000000075 -:103B500000200000008800000000000000000000BD -:103B60000000000000000000000000000000000055 -:103B70000000000000000000000000000000000045 -:103B8000000000000000000000000020000000C055 -:103B90000000000000000000000000000000000025 -:103BA0000000000000000000000000000000000015 -:103BB000000000000000000000008800000000007D -:103BC00000000000000000000000000000000000F5 -:103BD0000100008808000000000000000000000054 -:103BE00000000000000000000000000000000000D5 -:103BF00000000000000000000000000000000000C5 -:103C000000000000000000000000010000888800A3 -:103C100001000000000000000000000000000000A3 -:103C20000000000000000000000000000000000094 -:103C30000000000000000000000000000000000084 -:103C40004000000000000000000000000000000034 -:103C5000030041000080800005000000000000001B -:103C60000000000000000000000000000000000054 -:103C70000000000000000000000000000000000044 -:103C80000000000000000000000000004100008073 -:103C9000000009000000000000000000000000001B -:103CA0000000000000000000000000000000000014 -:103CB00000000000000000000000000000000011F3 -:103CC00000000000000000000000000000000000F4 -:103CD0000000000000110000008000000000000053 -:103CE00000000000000000000000000000000000D4 -:103CF00000000000000000000000000000000000C4 -:103D000000000000000000000000000000000011A2 -:103D10000000008000000000000000000000000023 -:103D20000000000000000000000000000000000093 -:103D30000000000000000000000000000000000083 -:103D40000001000000000000000000000000000072 -:103D50000000000000000001000000400000000022 -:103D60000000000000000000000000000000000053 -:103D70000000000000000000000000000000000043 -:103D80000000000000000000000000000000000033 -:103D900000010000004000000000000000000000E2 -:103DA0000000000000000000000000000000000013 -:103DB0000000000000000000000000000000000003 -:103DC000000000E000008100000000000000000092 -:103DD000000000E000000000000000E0070082009A -:103DE00000000000000000000000000000000000D3 -:103DF00000000000000000000000000000000000C3 -:103E000000000000000000000000000000000000B2 -:103E100000000000000007008221000000000000F8 -:103E20000000000000000000000000000000000092 -:103E30000000000000000000000000000000000082 -:103E40000000000000000000000000000000000072 -:103E50000000000000000000000000000000F0F082 -:103E60000000000000000000000000000000000052 -:103E70000000000000000000000000000000000042 -:103E80000000000000000000000000000000000032 -:103E90000000000000000000F0F000000000000042 -:103EA0000000000000000000000000000000000012 -:103EB0000000000000000000000000000000000002 -:103EC00000000000000000000000000000000000F2 -:103ED00000000000000000000000000000000000E2 -:103EE000F0F00000000000000000000000000000F2 -:103EF00000000000000000000000000000000000C2 -:103F000000000000000000000000000000000000B1 -:103F100000000000000000000000F0F000000000C1 -:103F20000000000000000000000000000000000091 -:103F30000000000000000000000000000000000081 -:103F40000000000000000000000000000000000071 -:103F50000000000000000000000000000000000061 -:103F60003C3C0000FFFF00000000000000000000DB -:103F70000000000000000000000000000000000041 -:103F80000000000000000000000000000000000031 -:103F9000000000000000000000000F0F0000FFFF05 -:103FA0000000000000000000000000000000000011 -:103FB0000000000000000000000000000000000001 -:103FC00000000000000000000000000000000000F1 -:103FD00000000000000000000000000000000000E1 -:103FE00000003C3C00000000000000000000000059 -:103FF00000000000000000000000000000000000C1 -:1040000000000000000000000000000000000000B0 -:104010000000000000000000000000000F0F000082 -:104020000000000000000000000000000000000090 -:104030000000000000000000000000000000000080 -:104040000000000000000000000000600006000CFE -:104050000000000000000000000000610006000DEC -:10406000000005612A06054D00A8000000000000C0 -:104070000000000000000000000000000000000040 -:104080000000000000000000000000000000000030 -:1040900000000000000000000000000005002A00F1 -:1040A000054000A800000000000000000000000023 -:1040B0000000000000000000000000000000000000 -:1040C00000000000000000000000000000000000F0 -:1040D000FFFF0000000000000000000000000000E2 -:1040E00000000000000000000000000000000000D0 -:1040F00000000000000000000000000000000000C0 -:1041000000000000000000000000000000000000AF -:10411000000000000000000000000000000000009F -:10412000000000000000000000000000000000008F -:10413000000000000000000000000000000000007F -:10414000000000000000000000000000000000006F -:10415000000000000000000000000000000000005F -:10416000000000000000000000000000000000004F -:10417000000000000000000000000000000000003F -:10418000000000000000000000000000000000002F -:10419000000000000000000000000000000000001F -:1041A000000000000000000000000000000000000F -:1041B00000000000000000000000000000000000FF -:1041C00000000000000000000000000000000000EF -:1041D00000000000F0F000000000000000000000FF -:1041E00000000000000000000000000000000000CF -:1041F00000000000000000000000000000000000BF -:1042000000000000000000000000000000000000AE -:10421000000000000000000000000000000000009E -:10422000000000000000000000000000000000008E -:10423000000000000000000000000000000000007E -:10424000000000000000000000000000000000006E -:10425000000000000000F0F000000000000000007E -:10426000000000000000000000000000000000004E -:10427000000000000000000000000000000000003E -:10428000000000000000000000000000000000002E -:10429000000000000000000000000000000000001E -:1042A000000000000000000000000000000000000E -:1042B00000000000000000000000000000000000FE -:1042C000000004000000008020000000000020002A -:1042D00020000000000000000000000000000000BE -:1042E000000020000000000020000000000020006E -:1042F000200000000003000000000000000000009B -:10430000000000002000000000002000000000006D -:10431000200020000000000000000000000000005D -:10432000000000002000000000002000000000004D -:10433000200020000000000000000000000000003D -:10434000000000000000000000020000000000006B -:10435000000000000000000000000000000000005D -:10436000000000000000000000000000000000004D -:10437000000000000000000000000000000000003D -:1043800000000000400000000000000000000000ED -:10439000000000000000000000000000000000001D -:1043A000000000000000000000000000000000000D -:1043B00000000000000000000000000000000000FD -:1043C00000000000000000000000000000000000ED -:1043D00000000000000000000000000000000000DD -:1043E00004000000000000000000000000000000C9 -:1043F00000000000000000000000020000000000BB -:1044000000000000000000000000000000000000AC -:104410000000000000000000000004000000000098 -:104420000000040000000000000000000000000088 -:10443000000000000000000000000000000000007C -:10444000000004000000000009000000200000003F -:104450000900090000000000000000000000030047 -:10446000000000000000000000000000000000004C -:1044700000000000000000000000000080000000BC -:104480000000000000000000000000000400000028 -:10449000000000000000000000000000000000001C -:1044A000000000000000000000000000000000000C -:1044B00000000000000000000000000000000000FC -:1044C00000000000000000000000000000000000EC -:1044D00000000000000000000000000000000000DC -:1044E00000002000000000000000000000000000AC -:1044F00000000000000000000000000000000000BC -:1045000000000000000000000000000000000000AB -:10451000000000000000000000000000000000009B -:10452000000000000000000000000000000000008B -:10453000000000000000000000000000000000007B -:10454000000000000000000000000000000000006B -:10455000000000000000000000000000000000005B -:1045600000000000800000000000000000000000CB -:10457000000000000000000000000000000000003B -:10458000000000000000000000000000000000002B -:10459000000000000000000000000000000000001B -:1045A000000000000000000000000000000000000B -:1045B00000000000000000000000000000000000FB -:1045C0000000000000008200080000000000000061 -:1045D000C00000000000000000000000000000001B -:1045E00000000000000000000000000000000000CB -:1045F00000000000000000000000000000000000BB -:1046000000000000000000000100000000000000A9 -:10461000000000000000000000000000000000009A -:10462000000000000000000000000000000000008A -:10463000000000000000000000000000000000007A -:104640000000000000000000000003000300000064 -:104650000000000041000000000000000000000019 -:10466000000000000000200000000000000000002A -:10467000000000000000000000000000000000003A -:104680000000000000000000000004000000000026 -:10469000000000000000000000000000000000001A -:1046A000000000000000000000000000000000000A -:1046B00000000000000000000000000000000000FA -:1046C0000000000000000000000000008200080060 -:1046D0000800820000000800000000000000000048 -:1046E00000000800000000000000010000000000C1 -:1046F00000000000000000000000000000000000BA -:104700000000000000000000000000200000000089 -:104710000000000000000000000000000000000099 -:104720000000000000000000000000000000000089 -:104730000000000000000000000000000000000079 -:104740000000000000000000000000000000000069 -:104750000000000000000000000000000000000059 -:104760000000000000C000000000008440000000C5 -:104770000000000000000000000000000000000039 -:1047800000000000008400000000000000010000A4 -:104790000000000000000000000000000000000019 -:1047A0000000000000000000000000000000000009 -:1047B0000000000000000000000000000000008475 -:1047C00000000000000000000000000000000000E9 -:1047D0000800820000000800000000000000A000A7 -:1047E00000000000000000000000000000000000C9 -:1047F00000000000000200000000000000000000B7 -:1048000000000000000000000000000000000000A8 -:104810000002000000000000000000000000000096 -:104820000000000000000000000000000000000088 -:104830000000000000000000000000000000000078 -:104840000000000000000000000200000800080056 -:104850000800000000000000000000000000000050 -:104860000000000000000000210003000000000024 -:104870000000000000000000000000000000000038 -:104880000000000000000000000000000400000024 -:104890000000000000000000000000000000000018 -:1048A0000000000000000000000000000000000008 -:1048B00000000000000000000000000000000000F8 -:1048C00000000200000000000000000000000000E6 -:1048D00000000000000000000000000000010100D6 -:1048E0009000000100000000000000000000010036 -:1048F00001000000000000000000000000000000B7 -:1049000000000000000000000000000000000000A7 -:104910009000000000000000000000000000000007 -:104920000000000000000000000000000000000087 -:104930000000000000000000000000000000000077 -:104940000000000000000000000000000000000067 -:104950000000000000000000000000000000001047 -:104960000305000800210000000000000000000016 -:104970001000040000000000000000000000000023 -:104980000000000000000000000000000000000027 -:104990001100800000000000000000000000000086 -:1049A0000000000000000000000000000000000007 -:1049B00000000000000000000000000000000000F7 -:1049C00000000000000000000000000000000000E7 -:1049D00000000000000000000000000000000000D7 -:1049E000850090000800C08000000000000000006A -:1049F00000000000000000000000000000000000B7 -:104A000000000000000000000000000000000000A6 -:104A10000000000000800000008000000000000096 -:104A20000000000000000000000000000000000086 -:104A30000000000000000000000000000000000076 -:104A40000000000000000000000000000000000066 -:104A50000000000000000000000000000000000056 -:104A60000000020803000100020400000000000032 -:104A70000000000000000000000000000000000036 -:104A80000000000000000000000000000000000026 -:104A90000000000000000020000000C00000000036 -:104AA0000000000000000000000000000000000006 -:104AB00000000000000000000000000000000000F6 -:104AC00000000000000000000000000000000000E6 -:104AD00000000000000000000000000000000000D6 -:104AE00000000000000100000101000000000000C3 -:104AF00000000000000100000000000100000000B4 -:104B000000000000000000000000000000000000A5 -:104B100000000000000091000088880001000000F3 -:104B20000000000000000000000000000000000085 -:104B30000000000000000000000000000000000075 -:104B40000000000000000000000000000000000065 -:104B50000000000000000000000000000000000055 -:104B600000000000000000080010082103200000E1 -:104B700000000000000000100003000000400000E2 -:104B80000000000000000000000000000000000025 -:104B9000000000000000000041000080000009004B -:104BA0000000000000000000000000000000000005 -:104BB00000000000000000000000000000000000F5 -:104BC00000000000000000000000000000000000E5 -:104BD00000000000000000000000000000000000D5 -:104BE000000000000000000021800080000008217B -:104BF00000000000000000000000000000000000B5 -:104C000000000000000000000000000000000000A4 -:104C10000000000000000000000000110000008003 -:104C20000000000000000000000000000000000084 -:104C30000000000000000000000000000000000074 -:104C40000000000000000000000000000000000064 -:104C50000000000000000000000000000000000054 -:104C60000000000000000000000001C000020090F1 -:104C70000001000000000000000000000000000033 -:104C80000000000000000000000000000000000024 -:104C90000000000000000000000000000001000013 -:104CA00000400000000000000000000000000000C4 -:104CB00000000000000000000000000000000000F4 -:104CC00000000000000000000000000000000000E4 -:104CD00000000000000000000000000000000000D4 -:104CE00000000000000000000000000000000000C4 -:104CF000000084000000000000000000000000E050 -:104D000000000000000000000000000000000000A3 -:104D10000000000000000000000000000000000093 -:104D200000000700822100000000000000000000D9 -:104D30000000000000000000000000000000000073 -:104D40000000000000000000000000000000000063 -:104D50000000000000000000000000000000000053 -:104D60000000000000000000000000000000000043 -:104D70000000000000000000000000000000000033 -:104D80000000000000000000000000000000000023 -:104D90000000000000000000000000000000000013 -:104DA000000000000000F0F0000000000000000023 -:104DB00000000000000000000000000000000000F3 -:104DC00000000000000000000000000000000000E3 -:104DD00000000000000000000000000000000000D3 -:104DE00000000000000000000000000000000000C3 -:104DF00000000000000000000000000000000000B3 -:104E000000000000000000000000000000000000A2 -:104E10000000000000000000000000000000000092 -:104E20000000000000000000F0F0000000000000A2 -:104E30000000000000000000000000000000000072 -:104E40000000000000000000000000000000000062 -:104E50000000000000000000000000000000000052 -:104E60000000000000000000000000000000000042 -:104E70000000000000000000000000000000000032 -:104E80000000000000000000000000000000000022 -:104E90000000000000000000000000000000000012 -:104EA0000000000000000000000000000000000002 -:104EB00000000000000000000000000000000000F2 -:104EC00000000000000000000000000000000000E2 -:104ED00000000000000000000000000000000000D2 -:104EE00000000000000000000000000000000000C2 -:104EF00000000000000000000000000000000000B2 -:104F000000000000000000000000000000000000A1 -:104F10000000000000000000000000000000000091 -:104F2000000000000000FFFF0000FFFF0000000085 -:104F30000000000000000000000000000000000071 -:104F40000000000000000000000000000000000061 -:104F50000000000000000000000000000000000051 -:104F60000000000000000000000000000000000041 -:104F70000000000000000000000080800000000031 -:104F80000000000000000000000000000000000021 -:104F90000000000000000000000000000000000011 -:104FA0000000000000000000000000000000000001 -:104FB00000000000000000000000000000000000F1 -:104FC00000000000000000000000000000000000E1 -:104FD00000000000000000000000000000000000D1 -:104FE00000000000000000000000000000000000C1 -:104FF000000000000000000000610006000D00003D -:10500000000000000000000000610007000900002F -:105010000000000000000000000000000000000090 -:105020000000000000000000000005002A0005400C -:1050300000A80000000000000000000000000000C8 -:105040000000000000000000000000000000000060 -:105050000000000000000000000000000000000050 -:105060000000000000000000000000000000000040 -:10507000000000000000000000008282000000002C -:105080000000000000000000000000000000FCFC28 -:10509000FFFF000000000000000000000000000012 -:1050A0000000000000000000000000000000000000 -:1050B00000000000000000000000000000000000F0 -:1050C00000000000000000000000000000000000E0 -:1050D00000000000000000000000000000000000D0 -:1050E00000000000000000000000000000000000C0 -:1050F00000000000000000000000000082820000AC -:10510000000100000000000000000000000000009E -:10511000FCFC3C3C0000000000000000000000001F -:10512000000000000000000000000000000000007F -:10513000000000000000000000000000000000006F -:10514000000000000000000000000000000000005F -:10515000000000000000000000000000000000004F -:10516000000000000000000000000000000000003F -:10517000000000000000000000000000000000002F -:10518000000000000000000000000000000000001F -:10519000000000000000000000000000000000000F -:1051A00000000000000000000000000000000000FF -:1051B00000000000000000000000000000000000EF -:1051C00000000000000000000000000000000000DF -:1051D00000000000000000000000000000000000CF -:1051E00000000000000000000000000000000000BF -:1051F00000000000000000000000000000000000AF -:10520000000000300200000000000000000000006C -:10521000000000000000000000000000000000008E -:10522000000000000000000000000000000000007E -:10523000000000000000000000000000000000006E -:10524000000000000000000000000000000000005E -:10525000000000000000000000000000000000004E -:10526000000000000000000000000000000000003E -:105270000000000500050000200000000000000004 -:1052800020000000000000000400000000000000FA -:105290002000C000000000000000000000008400AA -:1052A00020000000040000000000000000000000DA -:1052B00020000002200000000000000000000000AC -:1052C00000002000040004000000000000000000B6 -:1052D000000020002000000000000000000000008E -:1052E0000000200020002000000000000400040056 -:1052F000000020000000000000000000000000008E -:10530000000000000000000000000000000000009D -:10531000000000000000000000000000000000008D -:105320001000000000000000000004000000000069 -:10533000000000000000000000000000000000006D -:10534000000000000000000000000000000000005D -:10535000000000000000000000000000000000004D -:10536000000000000000000000000000000000003D -:10537000000000000000008000800080008000002D -:10538000000000000000000000000000000000001D -:10539000000000000000000000000000000000000D -:1053A00000000000000000000000000000000000FD -:1053B00000000000000000000000000000000000ED -:1053C00000000000000000000000000000000000DD -:1053D00001000000000000000000000000000000CC -:1053E00000000000000000000000000000000000BD -:1053F00000000000000000000040004000400040AD -:105400000000001000080000000000000000000084 -:10541000000000000000000000000000000000008C -:105420000000000000080000040000000000000070 -:10543000000000000000000000000000000000006C -:105440000000040000000008000000000000000050 -:10545000000002000000000000000000000000004A -:105460000000000000000008000000000000000034 -:1054700000000000000000000000004000000000EC -:10548000000000400040004000400040004000405C -:1054900000400000000000000000000000000000CC -:1054A00000000000000000000000000000000000FC -:1054B00000000000000000000000000000000000EC -:1054C00000000000000000000000000000000000DC -:1054D00000000000000000000000000000000000CC -:1054E00000000000000000000000000000000000BC -:1054F00000000000000000000000000000010000AB -:10550000000000000001000100010901000100018C -:105510000001000100000004000000000000000085 -:10552000000000000000000000000000000000007B -:10553000000000000000000000000000000000006B -:10554000000000000000000000000000000000005B -:10555000000000000000000000000000000000004B -:10556000000000000000000000000000000000003B -:105570000000000000000000000000000000A0008B -:105580000800080000008200000000000000A000E9 -:105590000000080000000000000000000000000003 -:1055A00000000000000000000000000000000000FB -:1055B00000000000080000000000000000000000E3 -:1055C00000000000000000000000000000000000DB -:1055D00000000000000000000000000000000100CA -:1055E00000000000000000000000000000000000BB -:1055F00002000000000001000000000000000000A8 -:10560000000000000000000000000000000000009A -:1056100008000000000000002100400041000000E0 -:10562000000000000000000000000000400000003A -:10563000000000000000000000000000000000006A -:10564000000000000000000000000000000000005A -:105650000000000041000000000000000000000009 -:105660000400000000000000000000000000000036 -:1056700000008000000000000400000000000000A6 -:1056800000000021C00000000000000000008200B7 -:105690008200000000000000080000000000000080 -:1056A00000000000000000000000000000000000FA -:1056B00000000000000000000000000000000000EA -:1056C00000000000000000000000000000000000DA -:1056D00008000000000000000000000000000000C2 -:1056E000002000000000000000000000000000009A -:1056F000000000000000000000200000000000008A -:105700000000000000000000000000000000000099 -:10571000000000000800030403900890000000004F -:10572000000000000300000000000800000000006E -:105730000000000000000000000000000000000069 -:1057400000000000000000000000000003840000D2 -:105750000000000000000000000000000000000049 -:105760000000000100000000000000000000000038 -:105770000000000000000000000000010000000028 -:1057800000000000000000000021C02100210800EE -:1057900000000000000040000000000000000000C9 -:1057A00000000000000000000000000000000000F9 -:1057B00000000000000000000000000000000000E9 -:1057C00000000000000000000000000000000000D9 -:1057D00000000000000000020000080000000000BF -:1057E00000000000000000000000000000000000B9 -:1057F00000000000000000000000000000000000A9 -:105800000000000000000000000000000000000098 -:105810000000000000000000000003020300000080 -:1058200000000000008800000000000000001100DF -:105830000000000000000000000000000000000068 -:105840000000000000000000000000000000000058 -:105850001100000000000000000000000000000037 -:105860000000000000000500000000000000000033 -:105870000000000000000000000000000000000028 -:105880000000000000000000000000C00000000058 -:10589000000002C000400000000000C000000090B6 -:1058A00000000000000000000000000000000000F8 -:1058B00000000000000000000000000000000000E8 -:1058C00000000000000000000000000000000000D8 -:1058D00000000000000000000000000000000000C8 -:1058E0000000000000009004000000000000000024 -:1058F0000000000000000000000000000000900018 -:1059000000A0000000000000000000000080000077 -:105910000000000080800000000000000080000007 -:105920000000000000000000000000000000000077 -:105930000000000000000000000000000000000067 -:105940000000000000000000000000000000000057 -:105950000000000000000000000000000000000047 -:105960000000000000001100808000000000000026 -:105970000000000000000000000000000000110016 -:105980008000000000000000000000000000000097 -:105990000000000080000000000000008000000007 -:1059A0000000000080000000000000000000000077 -:1059B00000000000000000000000000000000000E7 -:1059C00000000000000000000000000000000000D7 -:1059D00000000000000000000000000000000000C7 -:1059E00000000000000000000000008000000080B7 -:1059F00000000000000000000000000000000000A7 -:105A00000000008000000080000000000000000096 -:105A1000000000000000C000000000000000C00006 -:105A2000000000000000C0000000000000000000B6 -:105A30000000000000000000000000000000000066 -:105A40000000000000000000000000000000000056 -:105A50000000000000000000000000000000000046 -:105A60000000000000000000000000000020000016 -:105A700000C0000000000000000000000000000066 -:105A8000000000000020000000C000000000000036 -:105A90000000A00000A0000000C000000000000006 -:105AA00000C000020000000000C000000000000074 -:105AB00000000000000000000000000000000000E6 -:105AC00000000000000000000000000000000000D6 -:105AD00000000000000000000000000000000000C6 -:105AE000000000000000000000000000010000882D -:105AF000880001000000000000000000000000001D -:105B00000000000001000088880001000000000083 -:105B10000000000000000000000000800000000005 -:105B200000000080008000000000008000000000F5 -:105B30000000000000000000000000000000000065 -:105B40000000000000000000000000000000000055 -:105B50000000000000000000000000000000000045 -:105B600000000000000000000000000000004100F4 -:105B7000008000000900000000000000000000009C -:105B8000000000000000410000800000090000004B -:105B90000000000000000000000000000000800085 -:105BA0000000008000008000008000000000000075 -:105BB0000000000000000000004000000080000025 -:105BC0000005000000800000000500030000030045 -:105BD00000000000000000000000000000000000C5 -:105BE00000000000000000000000000000000000B5 -:105BF0000011000000800000000000000000000014 -:105C00000000000000000000001100000080000003 -:105C10000000000000000000000000A00000820062 -:105C2000C000000000044000C0000002000040006E -:105C300000000000000000000000000000000082E2 -:105C400000000001000000820000000100010000CF -:105C50000100000000000000000000000000000043 -:105C60000000000000000000000000000000000034 -:105C700000000001000000400000000000000000E3 -:105C800000000000000000000000000100000040D3 -:105C90000000000000000000000000000000000004 -:105CA00000000000000000000000000000000000F4 -:105CB00000000000000000000000000000000000E4 -:105CC00000000000000000000000000000000000D4 -:105CD00000000000000000000000000000000000C4 -:105CE00000000000000000000000000000000000B4 -:105CF00000000000000000000700822100000000FA -:105D00000000000000000000000000000000000093 -:105D10000700822100000000000000003C3C3C3CE9 -:105D20000000F0F000003C3C0000AAAA00003C3C4F -:105D300000003C3C000000000000000000000000EB -:105D40000000000000000000000000000000000053 -:105D50000000000000000000000000000000000043 -:105D60000000000000000000000000000000000033 -:105D700000000000000000000000F0F00000000043 -:105D80000000000000000000000000000000000013 -:105D90000000F0F0000000000000000000003C3CAB -:105DA0003C3C0000F0F000003C3C0000AAAA0000CF -:105DB0003C3C00003C3C00000000000000000000F3 -:105DC00000000000000000000000000000000000D3 -:105DD00000000000000000000000000000000000C3 -:105DE00000000000000000000000000000000000B3 -:105DF000000000000000000000000000F0F00000C3 -:105E00000000000000000000000000000000000092 -:105E100000000000F0F000000000000000000000A2 -:105E2000FFFF000055550000FF000000FFFF0000CD -:105E30000F0F0000AAAAFFFF0000000000000000F2 -:105E40000000000000000000000000000000000052 -:105E50000000000000000000000000000000000042 -:105E60000000000000000000000000000000000032 -:105E7000000000000000000000000000FF00000023 -:105E8000FFFF000000000000000000000000000014 -:105E9000000000000F0F0000FFFF000000000000E6 -:105EA00000000000000055550000FF000000000049 -:105EB00000000F0F0000AAAAFFFF00000000000072 -:105EC00000000000000000000000000000000000D2 -:105ED00000000000000000000000000000000000C2 -:105EE00000000000000000000000000000000000B2 -:105EF0000000000000000000000000000000FF00A3 -:105F00000000000000000000000000000000000091 -:105F10000000000000000F0F000000000000000063 -:105F200000000000400280000020920240828000B9 -:105F300000209202408280000020820200000000C7 -:105F40000000000000000000000000000000000051 -:105F50000000000000000000000000000000000041 -:105F60000000000000000000000000000000000031 -:105F7000000000000000000000000000000005001C -:105F80002A00054000A800000000000000000000FA -:105F900000000000000005002A00054000A80000E5 -:105FA00000000000000000000000000000000000F1 -:105FB00000000000000000000000000000000000E1 -:105FC00000000000000000000000000000000000D1 -:105FD00000000000000000000000000000000000C1 -:105FE00000000000000000000000000000000000B1 -:105FF00000000000000000000000000000000000A1 -:106000000000000000000000000000000000000090 -:106010000000000000000000000000000000000080 -:106020000000000000000000000000000000000070 -:106030000000000000000000000000000000000060 -:106040000000000000000000000000000000000050 -:106050000000000000000000000000000000000040 -:106060000000000000000000000000000000000030 -:106070000000000000000000000000000000000020 -:106080000000000000000000000000000000000010 -:106090000000000000000000000000000000000000 -:1060A00000000000000000000000000000000000F0 -:1060B00000000000000000000000000000000000E0 -:1060C00000000000000000000000000000000000D0 -:1060D00000000000000000000000000000000000C0 -:1060E00000000000000000000000000000000000B0 -:1060F00000000000000000000000000000000000A0 -:10610000000000000000000000000000000000008F -:10611000000000000000000000000000000000007F -:10612000000000000000000000000000000000006F -:10613000000000000000000000000000000000005F -:10614000000000000000000000000000000000004F -:10615000000000000000000000000000000000003F -:10616000000000000000000000000000000000002F -:10617000000000000000000000000000000000001F -:10618000000000000000000000000000000000000F -:1061900000000000000000000000000000000000FF -:1061A00000000000000000000000000000000000EF -:1061B00000000000000000000000000000000000DF -:1061C00000000000000000000000000000000000CF -:1061D00000000000000000000000000000000000BF -:1061E00000000000000000000000000000000000AF -:1061F000000000000000000000000000000000009F -:10620000000000000000000000000000000000008E -:10621000000000000000000000000000000000007E -:10622000000000000000000000000000000000006E -:106230000000000000000000000800000000000056 -:1062400000000000000000000000000000800000CE -:10625000000000000000000000000000000000003E -:1062600000000000840000000200020002000200A2 -:10627000000300000000000000000000000000001B -:10628000000000000000000000000000000000000E -:1062900000000000000000000000000000000000FE -:1062A00000004000000000000000000000000000AE -:1062B00000000000000000000000000000000000DE -:1062C000000000000000000000000040000000404E -:1062D00000000000000000000000000000000000BE -:1062E0000000000000000000000080008000C000EE -:1062F000800000000000000000000000000000001E -:10630000000000000000000000000000000000008D -:106310000004000400000000000000040000000071 -:10632000000000000000000000000000000000006D -:10633000000000000000000000000000000000005D -:10634000000000000000000000000000000000004D -:1063500000000000000000080000000000400000F5 -:1063600000000000000000000008008000000000A5 -:10637000000000000000008000000000000000801D -:10638000008000800080000000800080000000008D -:106390000000020002000080000000800080000079 -:1063A00000000000000000000000000000000000ED -:1063B00000000000000000000004000000840084D1 -:1063C0000000000800000008000800000000008431 -:1063D0000084008400840008000000840084000918 -:1063E0000008000800840008008400080040000045 -:1063F0000000000000000000004000840000008455 -:106400000040004000400040000800400040000004 -:10641000000000000000000000200000002000201C -:106420000000000000000000000800000000000064 -:106430000000000000000000000800030008002128 -:106440000008000800080008A0000008080800086C -:10645000A003000000000000000000000000000099 -:1064600000210021002100400040004000400021A8 -:10647000004000400040004000000040004000009C -:1064800000400000000000000000000000210100AA -:1064900000400000000000000000000000080000B4 -:1064A00000000000000000000000000000000000EC -:1064B00000000000000000000000000000000000DC -:1064C00000000000000000000000000000000000CC -:1064D00000000800000000000000000000000000B4 -:1064E00000000000000000000001000100010001A8 -:1064F0000000000100010001000100000001000196 -:10650000000000010000000000000000000000008A -:106510000200000100000000000000000000000078 -:10652000000000000000000000000000000000006B -:10653000000000000000000000000000000040001B -:1065400008000000080000000800C0009000900053 -:1065500088000000000000000000000000000000B3 -:10656000A000000000000080008000008400C00047 -:106570008200008000000000A00000000000010078 -:10658000000082800000000000000000C0000080C9 -:1065900000000800000000000000000000000000F3 -:1065A000008000000000000000000000000000006B -:1065B00000000000000000000000000000000000DB -:1065C00000000000000000000000000000000000CB -:1065D000000000000000000000000000000000A01B -:1065E00000A0000000080008004000400008000073 -:1065F0000008000000400000000000000000000053 -:106600000200000011400000000000000000000037 -:10661000004000000000000000000000000000003A -:10662000000000200000000000000000000000004A -:10663000000000000000000000000000000000005A -:1066400008080021000000000040000000000000D9 -:106650000000000008000000200000008200000090 -:1066600000210021A000000800052008A000002152 -:1066700000002000000000000000000000000000FA -:1066800000008208200082000008000020000000B6 -:106690000000020002008200020008200800A000A2 -:1066A0008220000000000000000000000000000048 -:1066B00000000000000000000000000000000000DA -:1066C00000000000000000000000000000000800C2 -:1066D00000000000030003000000000000000000B4 -:1066E0000500000000000000000000008000000025 -:1066F000000000008000000000000000000000001A -:106700000000000000008000000000000000800089 -:1067100000000000800080000000800000010000F8 -:1067200000000085000000000000000000000000E4 -:1067300000000000000000000000008400000000D5 -:1067400000000000000500000021000808210000F2 -:10675000000000000800080082000800400000005F -:106760000200040000030020A021002000200005FA -:106770000008000801210021402000000000000066 -:10678000A000000000000000000000080000000061 -:106790000000000000000000000082000000000077 -:1067A0000020082008000000000000000002000097 -:1067B00000000000000000000000000000000000D9 -:1067C00000000000000200000000000000000000C7 -:1067D0000000000000000000000000000000002099 -:1067E00000000000000000000000000000000000A9 -:1067F0000000000000002000000000000000000079 -:106800000000000000000000000000000000000088 -:106810000000000000000000000000000000000078 -:106820000000000100010000040000000000000062 -:106830000000000000000000000000000000000058 -:106840000000000000000000000000000000000048 -:106850000000000000000000000000000000000038 -:10686000408800080008104088040008000810084C -:1068700041C000010001000041C000000101000012 -:1068800000C0000000000000000041C00000000146 -:10689000000041C000000001000000C0000800002E -:1068A00000000000000000020040000000000002A4 -:1068B00000040000000000000000000000000000D4 -:1068C00000000000000000000000000000000000C8 -:1068D00000000000000000000000000000000000B8 -:1068E0000000800000800080800000800080008028 -:1068F0008080918000100909000089A00000020931 -:1069000000000080000000000000000091C00000B6 -:10691000050900009180000040090003008000800C -:1069200000000000000000000080000000000000E7 -:106930000080008000000000000000000000000057 -:106940000000000000000000000000000000000047 -:106950000000000000000000000000000000000037 -:10696000000000008000008500050080000080829B -:1069700000808080090010210011800020000000AC -:1069800041118000000080000000800000004000F5 -:106990000021001180000900002100118300000087 -:1069A00080000000800080000000000000008000E7 -:1069B00000000000000000000000000000000000D7 -:1069C00000000000000000000000000000000000C7 -:1069D00000000000000000000000000000000000B7 -:1069E000000000000000080002C0208890C0C00025 -:1069F00002C1A01002C0010001000001C00000207F -:106A000000000001C000000010000000C0000000F5 -:106A1000004000000001C000010000000001C000B3 -:106A2000000010000000C000020000000000000094 -:106A30000200000000000000000000000000000054 -:106A40000000000000000000000000000000000046 -:106A50000000000000000000000000000000000036 -:106A6000000000000000000011400010C0020408F7 -:106A700041080040C082048800000001000003C1FA -:106A800000000001000003C088000000000800C0F2 -:106A9000000000000001000003C000000001000031 -:106AA00003C000000000000800C000000000000259 -:106AB0000040000000020002000000000000000092 -:106AC00000000000000000000000000000000000C6 -:106AD00000000000000000000000000000000000B6 -:106AE0000000000000000000000041000080800065 -:106AF00080804180000080008000000000100000C5 -:106B000091830020000900009180000000000080B7 -:106B10000080000000400009000091800000000992 -:106B20000003918000000000008000800000000051 -:106B300000800000000000800080000000000000D5 -:106B40000000000000000000000000000000000045 -:106B50000000000000000000000000000000000035 -:106B60000000000000000000000000008005800020 -:106B7000000000000010000000800000100000096C -:106B80000080090080000000008009008000800073 -:106B90000000000000008040000000800908800024 -:106BA0000000038009008000800000000000000059 -:106BB000000200000000000080C080000000000013 -:106BC00000000000000000000000000000000000C5 -:106BD00000000000000000000000000000000000B5 -:106BE00000000000000000000000000000000200A3 -:106BF00020028820020082004010104002000100A4 -:106C0000000100840100C000000000849100C00069 -:106C10001000000000000000C0000000008401011E -:106C2000C000000000840100C0001000000000004F -:106C3000A00000014040000000000202040000002B -:106C40000000000000000000000000000000000044 -:106C50000000000000000000000000000000000034 -:106C60000000000000000000000000000000000024 -:106C70000000000000004842000000000000484200 -:106C8000600000E000000000600000E00000000084 -:106C900000000000000000000000810000E0000093 -:106CA0000000600000E000000000000000000000A4 -:106CB00000000006000007000000000600000700BA -:106CC00000000000000000000000000000000000C4 -:106CD00000000000000000000000000000000000B4 -:106CE00000000000000000000000000000000000A4 -:106CF0000000201004082841000020400402A000E9 -:106D00000500FFFFFFFF666600003C3C0000666672 -:106D10000000FF000000FF0000000000FFFF000077 -:106D200066660000FFFF000066660000FF000000CE -:106D3000FF000000F0F00000FF000000F000F00095 -:106D4000F000F00000000000000000000000000063 -:106D50000000000000000000000000000000000033 -:106D60000000000000000000000000000000000023 -:106D7000000000004080020100002841108008014E -:106D800000A0000500000000666600003C3C00001A -:106D900066660000FF000000FF0000000000000029 -:106DA0000000666600000000000066660000FF004C -:106DB0000000FF000000F0F00000FF000000F00005 -:106DC000F000F000F00000000000000000000000F3 -:106DD00000000000000000000000000000000000B3 -:106DE00000000000000000000000000000000000A3 -:106DF0000000000000000000000000000000000093 -:106E00000000000000000000000000000000000082 -:106E10000000000000000000000000000000000072 -:106E20000000000000000000000000000000000062 -:106E30000000000000000000000000000000000052 -:106E40000000000000000000000000000000000042 -:106E50000000000000000000000000000000000032 -:106E60000000000000000000000000000000000022 -:106E70000000000000000000008800440102080437 -:106E80001020080405000005000066660000FFFFF2 -:106E9000000066660000FFFF0000FFFF00000F0F0C -:106EA0000000000066660000FFFF0000666600004C -:106EB000FFFF000000FFFFFFF0F00C0C0C0C3C3C4F -:106EC0003C3C0C0C0C0C242424240000000000008A -:106ED00000000000000000000000000000000000B2 -:106EE00000000000000000000000000000000000A2 -:106EF0000000000000000000000088004400804006 -:106F0000102080400102A00000A000006666000082 -:106F100000000000666600000000000000000000A5 -:106F20000F0F0000000066660000000000006666AB -:106F300000000000000000FFFFFFF0F00C0C0C0C44 -:106F4000000000000C0C0C0C242424240000000081 -:106F50000000000000000000000000000000000031 -:106F60000000000000000000000000000000000021 -:106F700000000000000000000000000060000000B1 -:106F800000001000000000000000080040638001C5 -:106F90008021920240E380018021920240828000A1 -:106FA00000209202000040E380018021920240E331 -:106FB0008001802192024082800000208202000035 -:106FC0000028000000000000002800000000000071 -:106FD00000000000000000000000000000000000B1 -:106FE00000000000000000000000000000000000A1 -:106FF0000000000000000000000000000000000091 -:1070000000000000000000000000000000003C3C08 -:1070100000000000F0F01414141430303030000080 -:107020000000000000000000141414143030303050 -:107030000C0C0C0C00F000F0000000000000000040 -:107040000000000000000000000000000000000040 -:107050000000000000000000000000000000000030 -:107060000000000000000000000000000000000020 -:107070000000000000000000000000000000000010 -:107080000000000000000000000000000000000000 -:107090003C3C00000000F0F0141414143030303088 -:1070A0000000000000000000000014141414303030 -:1070B00030300C0C0C0C00F000F000000000000060 -:1070C00000000000000000000000000000000000C0 -:1070D00000000000000000000000000000000000B0 -:1070E00000000000000000000000000000000000A0 -:1070F0000000000000000000000000000000000090 -:10710000000000000000000000000000000000007F -:1071100000000F000F00303030300F0F0000003C37 -:10712000003C000000000000000000000F0F000005 -:10713000282828280C0C0C0C00003C3C0000000007 -:10714000000000000000000000000000000000003F -:10715000000000000000000000000000000000002F -:10716000000000000000000000000000000000001F -:10717000000000000000000000000000000000000F -:1071800000000000000000000000000000000000FF -:10719000000000000F000F00303030300F0F0000F3 -:1071A000003C003C000000000000000000000F0F49 -:1071B0000000282828280C0C0C0C00003C3C000087 -:1071C00000000000000000000000000000000000BF -:1071D00000000000000000000000000000000000AF -:1071E000000000000000000000000000000000009F -:1071F000000000000000040000000000000000008B -:1072000000000000000020000000000000008800D6 -:1072100000000000000000008800000000000000E6 -:10722000000000000000000000000000000000025C -:10723000020000000000000000000000000000004C -:10724000000000000000000000000000000000003E -:10725000200000000000000004000000000000000A -:107260000200000000008800000000000000000094 -:10727000000000000000000000000000000000000E -:1072800000000000000000000000000000000000FE -:1072900000000000000000000000000000000000EE -:1072A00000000000000000000000000000000000DE -:1072B000000080000000000000000000000000004E -:1072C00000000000000000000000000000000000BE -:1072D00000000000000000000000000000000000AE -:1072E000000000000000000000000000000000009E -:1072F000000000000000000000000000000000008E -:10730000000000000000000000000000000000007D -:10731000000000000000000000000000000000006D -:10732000000000000000000000000000000000005D -:10733000000000000000000000000200000000004B -:10734000000000000000000000000000020001003A -:107350000200010000000000000002000000000028 -:10736000000000000000000000000000000000001D -:1073700000000000000000000000000800080008F5 -:1073800000000000000000840084000000880088E5 -:107390000084000000000000000000880008008851 -:1073A00000000000000000000000020002000000D9 -:1073B000000002000000040000000200000000883D -:1073C0000000000000000000000000000000840039 -:1073D00002888000020000000000000000000000A1 -:1073E000000000000000000000000000000000009D -:1073F000000000000000000000000000000000008D -:1074000000000000000000000000C00000000000BC -:107410000000820000000000004100410000000068 -:10742000000000210000000000000000000000003B -:10743000000000410000000000000000000000000B -:10744000000000000000000000000000000000003C -:10745000000000000000000000000000000000002C -:10746000000000000000000000000000000000001C -:107470000000000000000000000000820082000008 -:10748000000000000000000000000000410021009A -:1074900000000000000000C00082000000000000AA -:1074A000080800C000A0000000000000000000006C -:1074B00000000000000000000000000000000000CC -:1074C00000000000000000000000000000000000BC -:1074D00000000000000000000000000000000000AC -:1074E000000000000000000000000000000000009C -:1074F000000000000000000000000000000000008C -:1075000000000000000008000000A00000000000D3 -:1075100000000000880000000000000000000000E3 -:10752000000000000000000000000000000000005B -:107530000000080000000000000000000000000043 -:1075400000000100820008004000C00000000000B0 -:10755000000000000000000000000100000000002A -:10756000000090000000000000000000000000008B -:10757000000000000000000000000000000000000B -:1075800000000000000000000000000000000000FB -:1075900000000000000000000000000000000000EB -:1075A00000000000000000000000000000000000DB -:1075B00000000000000000000000000000000000CB -:1075C00000000000040000000000000000000000B7 -:1075D00000000000000000000000000004000000A7 -:1075E000000000000000000000000000000000009B -:1075F000000000000000000000000000000000008B -:107600000000000000000008000800000800000062 -:10761000000000000000000000000000000000006A -:107620000000000000000000000000000041000019 -:10763000000000000000000000000000000000004A -:107640000800000000200000000000000000000012 -:10765000000000000000000000000000000000002A -:10766000000000000000000000000000000000001A -:10767000000000000000000000000000000000000A -:1076800000000000000000000000000000000000FA -:107690000000000000000000000000840384008857 -:1076A00000C000880000000008000000000000008A -:1076B00000000000000000000000000800002100A1 -:1076C0000000008400000001000000000000000035 -:1076D00000000000000000000000000000000000AA -:1076E000000000000000000000000000000000009A -:1076F000000000000000000000000000000000008A -:10770000000000000000000000080200000000006F -:1077100082000000000000000000000000000000E7 -:1077200000000000004100410000000000000000D7 -:1077300000000000000000009000000000000000B9 -:107740000000000000000000000000000002000037 -:107750000000000000000000000000000000000029 -:107760000000000000000000000000000000000019 +:1076900000000000000000000000000000000000EA +:1076A0000140000000000000000000010000000098 +:1076B00001C0010201100000000000400020000095 +:1076C0000104000000000000012000000000010093 +:1076D0000000010000A0004000000189002001001E +:1076E0000100820010400404080020000408200269 +:1076F00090000000000000000000C0008290908414 +:10770000040002002000080008001000080090009B +:107710008200810000E00000000000000000000086 +:107720000000880000E000020000884100E007003F +:1077300000000000000000008400000000000000C5 +:107740000000500000E000000000840000E00000A5 +:10775000000000000000000000000082000000E0C7 +:107760000000008100000000000000000000000098 :107770000000000000000000000000000000000009 :1077800000000000000000000000000000000000F9 -:1077900000000000000000000000000000000000E9 +:107790000000600000000000000000000000000089 :1077A00000000000000000000000000000000000D9 :1077B00000000000000000000000000000000000C9 :1077C00000000000000000000000000000000000B9 -:1077D00000000000000000000000000000000000A9 -:1077E0000000000000000000000000000000000099 -:1077F0000000000000000000000000000000000089 -:107800000000000000000000000000000000000078 -:107810000000000000000000000000000000000068 +:1077D000000000000000000000000000CF0C0000CE +:1077E000000000000000F0F0F0F000000000AEAE7D +:1077F000AEAFF0F0F0F000000000000000000F0F4E +:107800000F0F0000000028FA7DFA00000000FA289F +:10781000FA7D0000000000000000000000000000F1 :107820000000000000000000000000000000000058 :107830000000000000000000000000000000000048 -:1078400000000000000000000000900000000000A8 -:107850000000000000000000000000000000000028 -:107860000000009000000000000000000000000088 -:107870000000000000000000000000000000000008 -:1078800000000000000000000000000000000000F8 -:1078900000000000000000000000000000000000E8 +:107840000000000000000000000000000000000038 +:10785000000000000000000000000000555500007E +:107860000000000000000000F8F8F8FF0000000031 +:10787000AAAAAAAFFCFCFAFA00000000000000006F +:10788000000F0C0C0000000028507D50000000008C +:107890005028507D000000000000000000000000A3 :1078A00000000000000000000000000000000000D8 -:1078B00000000000000000000000000000000000C8 -:1078C0000000000000000000000011008000000027 -:1078D00000000000000000000000000000000000A8 -:1078E0000000000000800000000000000000000018 -:1078F0000000000000000000000000000000000088 -:107900000000000000000000000000000000000077 +:1078B000000000000000000000000000AF05AF0560 +:1078C00000000000FEF4AEA47070F0F000000000B4 +:1078D000000000000000000000000000000000FFA9 +:1078E000003D000000007F702F2000000000FFFF1F +:1078F000FFFF0000000055550000000000000000E0 +:10790000000040C254D67F757A700000000000006D :107910000000000000000000000000000000000067 :107920000000000000000000000000000000000057 -:107930000000000000000000000000000000000047 -:1079400000000000000000000000000000000080B7 -:1079500000000080000000000000000000000000A7 -:107960000000000000000000000000000000000017 -:107970000000000000000000000000000000000007 -:1079800000000000000000000000000000000000F7 -:1079900000000000000000000000000000000000E7 -:1079A00000000000000000000000000000000000D7 -:1079B00000000000000000000000000000000000C7 -:1079C00000000000000000000000000000000000B7 -:1079D0000020000000C000000000000000000000C7 -:1079E0000000000000000000004000000040000017 -:1079F0000000000000000000000000000000000087 -:107A00000000000000000000000000000000000076 -:107A10000000000000000000000000000000000066 -:107A20000000000000000000000000000000000056 -:107A30000000000000000000000000000000000046 -:107A40000000000000000000000000000000000036 -:107A500021000088880001000000000000000000F4 -:107A60000000000000000000000000004090000046 +:107930000000000000000000000000000000AFAFE9 +:107940000505000000005E540E04707050500000E9 +:107950000000000000000000000000000000000027 +:10796000003D003D000000007F702F20000000005F +:1079700000001F140000000000FF000000000000D5 +:107980000000000068EA7CFE2F252A20000000008D +:10799000000000000000000000000000006100077F +:1079A000800D000000000000000000000000000149 +:1079B0008000000005610A2F850D00A0006100060F +:1079C000000D000000610006000D0000004150069F +:1079D000800D000000000001800200000000006136 +:1079E0004006009D00010040400500050000000029 +:1079F00000000000000080610006009D00010061A1 +:107A00000006000D0000A0610006000D00000061EE +:107A10000006000D00000000000000000000000053 +:107A20000000000000000000000000000000F0F076 +:107A30005050FAFC0F0F00000000303FFAFA4F4F91 +:107A4000CF0F0FFF0AFF000000000D0DFDFD2828DD +:107A5000AAAABAFB92D3003C00550C0C0F0F0000F1 +:107A60004F0F1F0FAAAAAAAA553CFF0F0000000043 :107A70000000000000000000000000000000000006 -:107A800000000000000000000000000000000000F6 -:107A900000000000000000000000000000000000E6 +:107A80000000000028F8F8F80000000028F8AAFA22 +:107A90000000000028F800F00000000000000000D6 :107AA00000000000000000000000000000000000D6 -:107AB00000000000000000000000000000000000C6 -:107AC00000000000000000000000000000000000B6 -:107AD00000004100008000000900000000000000DC -:107AE00000000000000000000000400000000080D6 +:107AB00000005050FAFC000000000000303F0A0AAD +:107AC0004F4FCF0F00FF0AFF000000000808F8F832 +:107AD0002828000038381010003C00550C0C00001D +:107AE000000041001400BABABAFF553C000F000074 :107AF0000000000000000000000000000000000086 -:107B00000000000000000000000000000000000075 -:107B10000000000000000000000000000000000065 +:107B000000000000000028F828280000000028F8E5 +:107B100000F00000000000F028F800000000000065 :107B20000000000000000000000000000000000055 -:107B30000000000000000000000000000000000045 -:107B40000000000000000000000000000000000035 -:107B50000000000000110000008000000000000094 -:107B60000000000000000000000000000011800084 -:107B70000000000000000000000000000000000005 +:107B30000000C3000303000000000000000000007C +:107B40000000FFFFFFFF000082BE000000000000F9 +:107B50000000FF3CFF00F0F0FAFA003C000F0000CC +:107B6000FFFF0000DFD01F100000000000FF00FF3B +:107B70003CF0FFAA0000000000000000D757575754 :107B800000000000000000000000000000000000F5 -:107B900000000000000000000000000000000000E5 +:107B900000000000BEAF14AF0000000000000000B5 :107BA00000000000000000000000000000000000D5 -:107BB00000000000000000000000000000000000C5 -:107BC00000000000000000000000000000000000B5 -:107BD0000000000000000001000000400000000064 -:107BE0000000000000000000000000000000000194 -:107BF00020000088000000000000000000000000DD -:107C00000000000000000000000000000000000074 -:107C10000000000000000000000000000000000064 -:107C20000000000000000000000000000000000054 -:107C30000000000000000000000000000000000044 -:107C40000000000000000000000000000000000034 -:107C5000000000000000000000000000070082217A -:107C60000000000000000000000000000000000014 -:107C700000000000070000000000000000000000FD -:107C800000000000000000000000000000000000F4 -:107C900000000000000000000000000000000000E4 -:107CA00000000000000000000000000000000000D4 -:107CB00000000000000000000000000000000000C4 -:107CC00000000000000000000000000000000000B4 -:107CD0000000000000000000000000000000F0F0C4 -:107CE0000000000000000000000000000000000094 -:107CF000000000FF000000FF000000000000000086 -:107D00000000000000000000000000000000000073 -:107D10000000000000000000000000000000000063 -:107D20000000000000000000000000000000000053 -:107D30000000000000000000000000000000000043 -:107D40000000000000000000000000000000000033 -:107D50000000000000000000000000000000000023 -:107D6000F0F0000000000000000000000000000033 -:107D70000000000000FF000000FF00000000000005 -:107D800000000000000000000000000000000000F3 -:107D900000000000000000000000000000000000E3 -:107DA00000000000000000000000000000000000D3 -:107DB00000000000000000000000000000000000C3 -:107DC00000000000000000000000000000000000B3 -:107DD00000000000000000000000000000000000A3 -:107DE000FFFF0000FFFF0000000000000000000097 -:107DF0000000000000000000FF000000FFFF000086 -:107E00000000000000000000000000000000000072 -:107E10000000000000000000000000000000000062 -:107E20000000000000000000000000000000000052 -:107E30000000000000000000000000000000000042 -:107E40000000000000000000000000000000000032 -:107E50000000000000000000000000000000000022 -:107E60000000000000000000000000000000000012 -:107E700000000000000000000000FF000000000003 -:107E800000000000000000000000000000000000F2 -:107E900000000000000000000000000000000000E2 -:107EA00000000000000000000000000000000000D2 -:107EB00000000000000000000000000000000000C2 -:107EC00000000000000000000000000000000000B2 -:107ED00000000000000000000000000000000000A2 -:107EE000000005002A00054000A800000000000076 -:107EF0000000000000000000000015002A000540FE -:107F000000A80000000000000000000000000000C9 -:107F10000000000000000000000000000000000061 -:107F20000000000000000000000000000000000051 -:107F30000000000000000000000000000000000041 -:107F40000000000000000000000000000000000031 -:107F50000000000000000000000000000000000021 -:107F60000000000000000000000000000000000011 -:107F70000000000000000000000000000000000001 -:107F800000000000000000000000000000000000F1 -:107F900000000000000000000000000000000000E1 -:107FA00000000000000000000000000000000000D1 -:107FB00000000000000000000000000000000000C1 -:107FC00000000000000000000000000000000000B1 -:107FD00000000000000000000000000000000000A1 -:107FE0000000000000000000000000000000000091 -:107FF0000000000000000000000000000000000081 -:108000000000000000000000000000000000000070 -:108010000000000000000000000000000000000060 -:108020000000000000000000000000000000000050 -:108030000000000000000000000000000000000040 -:108040000000000000000000000000000000000030 -:108050000000000000000000000000000000000020 -:108060000000000000000000000000000000000010 -:108070000000000000000000000000000000000000 -:1080800000000000000000000000000000000000F0 -:1080900000000000000000000000000000000000E0 -:1080A00000000000000000000000000000000000D0 -:1080B00000000000000000000000000000000000C0 -:1080C00000000000000000000000000000000000B0 -:1080D00000000000000000000000000000000000A0 -:1080E0000000000000000000000000000000000090 -:1080F0000000000000000000000000000000000080 -:10810000000000000000000000000000000000006F -:10811000000000000000000000000000000000005F -:10812000000000000000000000000000000000004F -:10813000000000000000000000000000001000002F -:10814000000000100000000000000000000000001F -:10815000000000000000000000000200000000001D -:10816000000000000000000000000001020000000C -:1081700000000000000000000000000020000000DF -:1081800000000000000000000000000002000000ED -:1081900000000000000000000004000400000000D7 -:1081A00000000004000000000000000000000000CB -:1081B000000000000000400000000000000000007F -:1081C00000000000000000000000000000000000AF -:1081D00000000000000000004000000080000000DF -:1081E000000000000000000000000000000000008F -:1081F000000000000000000000000000000000007F -:10820000000000000000000000000000000020004E -:10821000000000000000000000000000000000005E -:10822000000000000000000000000000000000004E -:10823000000000000000000000000000000000003E -:10824000000000000000000000000000000000002E -:10825000000000000000000000000000000000001E -:10826000000000000000000000000000000000000E -:1082700000000000000000000000000000000000FE -:1082800000000000000000000000000000000000EE -:1082900000000000000000000000000000000000DE -:1082A00000000000000000000000000000000000CE -:1082B00000000000000000000000000000000000BE -:1082C00000000000000000000000000000000000AE +:107BB00000000000C3000303AAAAF0F000000000C8 +:107BC000000000002A280A000F0F0000000000003B +:107BD000000000003C3C00000000AAAA003C000F8E +:107BE000F0F028EB0000DFD01F100000000000FFC5 +:107BF00000FF3CF000AA0000000000000000D75584 +:107C000055550000000000000000000000000000CA +:107C1000000000000000BE05140500000000000088 +:107C200000000000000020001000400020002000A4 +:107C300020802000200020002000200020004100A3 +:107C400040802000208088008441A0C08400200063 +:107C5000820820008800C0804100200020008400AD +:107C600088002000200000034000C0094000880573 +:107C70000480C00084100400040088008880200074 +:107C80004080880020002080000021800400C00087 +:107C90001000204040000000400020008400200030 +:107CA000400020002000208000A000000000000212 +:107CB0004000004000900002000240000000000070 +:107CC0001002050210901008104041C00508200065 +:107CD00040A00000004020000004020000000084DA +:107CE000418840000000000000000920040000005E +:107CF0000090402020900920000200000000201089 +:107D000000000002200200000040410008100000B6 +:107D10000090000000010000000000000000410091 +:107D200040000900000040000902010010040102A7 +:107D30000100100001000402008200009000900089 +:107D4000000000000000400082100402C01000008B +:107D500002212121000502000300000002000000B2 +:107D600008104080000809A00210000004009000E4 +:107D70000800080504000400040000100880010049 +:107D80000200011000400182091003008510080064 +:107D9000850000000821000008804008080000005D +:107DA00008000800400011100900010010008000C8 +:107DB00040854000800010000009021141000000D1 +:107DC000000000000008001080080284A0090000E4 +:107DD000200800008800410000084004000800005E +:107DE0000000800080020084100904080000800464 +:107DF0000008098403008500850884080009A04064 +:107E000002000000080100010209888840100801F2 +:107E1000840802004004C0000082001082848000B8 +:107E20000000C000800089008200020802040000F7 +:107E30000000000800000005000000000021000014 +:107E40000000000900008800400040008808000091 +:107E5000400010001000000004000000002100009D +:107E600082001000000004210010822100050000A3 +:107E70008400000900050808902104210403010082 +:107E800000000000080505200009A0210080010075 +:107E900000080000900500000000841000000011A0 +:107EA000000000008800880000008200000000211F +:107EB000212000000000000000004100000004003C +:107EC0004000020004000000000003000000000069 +:107ED000000009044000059005100000004021A0AA +:107EE000000003A0850000A04100030000080084FA +:107EF000000008000000119080A008009000801091 +:107F0000040021004000900084010000009041081E +:107F100002000900410000020000030005001100FA +:107F20000800000000000490008808000900000418 +:107F30000000858000000900000010C0820083005E +:107F400084048211C00000030400820082008209C0 +:107F500010208200080090000000C0040800040403 +:107F600020040810080082001000C0200400104007 +:107F70000000000000000800C00010008200A00304 +:107F8000014100041020C0030010820583008540D9 +:107F9000C00810000811A00004000000080010092B +:107FA000002005000410820004000010A00004035B +:107FB000000200001008000040000000C10821007D +:107FC0004000000800404100030000840000000061 +:107FD0000000000000000000008410840300000086 +:107FE000100011000390000004A0000000008800B1 +:107FF00004C00384000000001000000000A0030083 +:1080000000001000001041902100040111C0400048 +:10801000400141011100210005000420000003007F +:10802000000002000800080000000000000004003A +:108030004100214021020000C000A0008200820017 +:10804000000040020000000008000000000582005F +:108050000008000082000400A0009000000520003D +:1080600010008200C021A000C0000021000000001C +:108070000000A00010000000888000000800400000 +:10808000000010000800080000210004080005801E +:1080900008400084C000002100000000000008002B +:1080A00000000000C000000010212000841100002A +:1080B000C00000000000C0054020000011000000CA +:1080C00000000400800100000000020000000088A1 +:1080D0001004000011000004858800080010400012 +:1080E0008000000000000008410005000000009032 +:1080F0000020000400040902000002202020118852 +:1081000008A02004052009000400000008008000E9 +:108110008420002100100000000000000004000086 +:108120002000000005000820000000000000009072 +:1081300000C00000050004000000000082000000F4 +:108140000000018500000080000000080000000021 +:10815000C0000000900000000021000000000000AE +:1081600082000400000000090021000000008400DB +:108170002000080000000000010000000000820054 +:10818000840000214000C000001000800002820036 +:108190000400048505021000000800080000821099 +:1081A00010000020000000000041200082040000B8 +:1081B00082004000011101000100010000080000E0 +:1081C0000000000010080000000200900200000003 +:1081D000000041000300001003000588200000009B +:1081E0000000000000A000040000000000200000CB +:1081F00000020040412000000000040000000000D8 +:108200000000000000A08000080000C00020200442 +:10821000008800028420402005002000200000008B +:1082200000030800030040000020210000000000BF +:1082300009000804000002000200024002000000E1 +:108240000100000000000000040002000000000027 +:10825000000000000000000000000000000000011D +:1082600000000000000000000000C000000000014D +:1082700000000000000000C1A0820084C0200000B7 +:1082800000000000000000000001000000000001EC +:108290000800000000009000C0C1000002040808AF +:1082A00000400000000000828800010020008400DF +:1082B0008804002000A0889000C100018200000016 +:1082C00000000300000000000300800080000000A8 :1082D000000000000000000000000000000000009E -:1082E000000000000000000000000000000000008E -:1082F000000000000000000000000000000000007E -:10830000000000000000000000000000000000006D -:10831000000000000000000000000200000000005B -:10832000000000000000000000000000000000004D -:10833000000000000000000000000000000000003D -:10834000000000000000000000000000000000002D -:10835000000000000000000000000000000000001D -:10836000000000000000000000000000000000000D -:1083700000000000000000000000000000000000FD -:1083800000000000000000000000000000000000ED -:1083900000000000000000000000000000000000DD -:1083A00000000000000000000000000000000000CD -:1083B00000000000000000000000000000000000BD -:1083C00000000000000000000000000000000000AD -:1083D000000000000000000000000000000000009D -:1083E000000000000000000000000000030000008A -:1083F000000000000000000000000000000000007D -:10840000000000000000000000000000000000006C -:10841000000000000000000000000000000000005C -:10842000000000000000000000000000000000004C -:10843000000000000000000000000000000000003C -:10844000000000000000000000000000000000002C -:10845000000000000000000000000000000002001A -:10846000000000000000000000000000010000000B -:1084700000000000000000000000000000000000FC -:1084800000000000000000000000000000000000EC -:1084900000000000000000000000000000000000DC -:1084A00000000000000000000000000000000000CC -:1084B00000000000000000000000000000000000BC -:1084C00000000000000000000000000000000000AC -:1084D000000000000000000000000000000000009C -:1084E0000000000000000000000000000000040088 -:1084F000000000000000000000000000000000007C -:10850000000000000000000000000000000000006B -:10851000000000000000000000000000000000005B -:10852000000000000000000000000000000000004B -:1085300000000000000000004100000000000000FA -:10854000000000000000000000000000000000002B -:10855000000000000000000000000000000000001B -:1085600000000000000000000000000000000020EB -:1085700000000000000000000000000000000000FB -:1085800000000000000000000000000000000000EB -:1085900000000000000000000000000000000000DB -:1085A00000000000000000000000000008000000C3 -:1085B00000000000000000000000000000000000BB -:1085C00000000000000000000000000000000000AB -:1085D000000000000010000000000000000000008B -:1085E000001000000000000000000000000000007B -:1085F000000100000000000000000000000000007A -:1086000000000000008400000000000000000000E6 -:1086100000000000000000000000000000840000D6 -:10862000000000000000000000000000000000004A -:10863000000000000000000000000000000000003A -:10864000000000000000000000000000000000002A +:1082E00000410011000300030000400002000000F4 +:1082F000404100040403000340C1008000A0800945 +:1083000000000000000000000000004100400005E7 +:108310000008800000000000800000C10805808582 +:1083200000800000000000000000000010000000BD +:10833000000010000080000000000082030200091D +:1083400000092000100005004100A0008300C100CA +:10835000C10000000000000000002080110040006B +:1083600041050000000000000000001000020000B5 +:10837000000000008000800080008000804180417B +:1083800080800000000000000000000000000000ED +:10839000800080000000000380008000000080005A +:1083A0000000002000000003000000000900030599 +:1083B0008800C00000008010800000000000000065 +:1083C00000008000000001000000014010001000CB +:1083D0008200C10000000000000000000002000058 +:1083E000000001000000000000000000000100018A +:1083F00000880000900002004000C00040008201A0 +:108400008401C0C0000000000000000000009000D7 +:1084100090201000082088008200A010C08804046A +:1084200002009000C0010000000000A00000400019 +:1084300041000588C1208200100184849010000052 +:1084400000000000C000000000000001000100006A +:10845000000000010001000000000000000000001A +:108460000000000000000100000001000000000109 +:108470000001000100000000000020000000C040DA +:108480000040C18401C0000100000000080000009D +:10849000000000000300010000400002901000C036 +:1084A000008800A001A08305020000000000A000D9 +:1084B00000900010104100C0080200A0000020A0A1 +:1084C00088910001000000C1000900210021004145 +:1084D0000009002100210041000000000000000010 +:1084E000000000000000000002004000200000002A +:1084F00000200003000202110000400041000000C3 +:1085000080802180848041800001050000000000FF +:10851000000009000000A00004000080008000802E +:108520000080004000C0024109C18000000000003E +:1085300000000008008800A100408080008000004A +:10854000050000202010410500C100890000000046 +:108550000000000900800000004000000000000052 +:108560000000410008000800024000000010000068 +:108570000000000000008000000000080000000073 +:108580000000801180400083008000010000004155 +:1085900000000000000300830080000080008008CD +:1085A000000000000820098009800500800080008C +:1085B0008000000080200000000080080000800093 +:1085C0000000000000110000000000000003000097 +:1085D0000000000000010020000800000000000072 +:1085E0000000000001820000010000000000000106 +:1085F00000000000020090008400C0000000009015 +:1086000000880000C001400020C0A004000100005C +:1086100000000000000000000020008400001000A6 +:108620000404020090000100000201840000C00068 +:10863000A000020000004000A040049010000200D2 +:108640008288202088000000008800008800000048 :10865000000000000000000000000000000000001A -:10866000000000000000000000000000000000000A -:1086700000000000000000000000000000000000FA -:1086800000000000000000000000000000000002E8 -:1086900000000000000000000000000000000000DA -:1086A00000000000000000020000000000000000C8 +:108660000000000000000000000000000000008288 +:10867000000007000000600000E00000000084002F +:1086800040E0000000000000000007004842000039 +:108690000006000007000000008200000700000044 +:1086A0000082000007000000000000000000000041 :1086B00000000000000000000000000000000000BA :1086C00000000000000000000000000000000000AA :1086D000000000000000000000000000000000009A :1086E000000000000000000000000000000000008A -:1086F000000000000000000000000000000000007A +:1086F00000000000000000003F3F3E3C0000000082 :108700000000000000000000000000000000000069 :108710000000000000000000000000000000000059 -:108720000000000000000000000000000000000049 -:108730000000000000000000000000000000000039 -:108740000000000000000000000000000000000029 +:108720000000098109E724BDF0F000000000FF000F +:10873000FFF4FF00FF000000000002831A9BF67E9A +:10874000F6187F4F7343878787873C3C3C3C3C3C13 :108750000000000000000000000000000000000019 :108760000000000000000000000000000000000009 -:108770000000000090000000000000000000000069 +:10877000000000000000000000003E3C3E3C000005 :1087800000000000000000000000000000000000E9 :1087900000000000000000000000000000000000D9 -:1087A00000000000000000000000000000000000C9 -:1087B00000000000000000000000000000000000B9 -:1087C00000000000000000000000000000000000A9 -:1087D0000000000000000000000000000000000099 +:1087A000000000006F816FE7000000000000000083 +:1087B000FF00FF24FFF0FF660000000026A73EBF79 +:1087C000907E90187C4C70408181E7E73C3C3C3CBB +:1087D0003C3C000000000000000000000000000021 :1087E0000000000000000000000000000000000089 -:1087F00000000000110080000000000000000000E8 -:108800000000000000000000000000000000000068 -:108810000000000000000000000000000000000058 +:1087F0000000000000000000000000000000000079 +:1088000000000000000000000000000041084000DF +:1088100000842102000000000000000000000000B1 :108820000000000000000000000000000000000048 :108830000000000000000000000000000000000038 :108840000000000000000000000000000000000028 :108850000000000000000000000000000000000018 -:108860000000000000000000000000000000000008 -:108870000000000000000000008000000000000078 -:1088800000000000000000000000000000000000E8 +:1088600000000F6F0F3F000000000000000000003C +:1088700000000000000000000000000000000000F8 +:10888000000000000000000000003C3E3E3C0000F4 :1088900000000000000000000000000000000000D8 -:1088A00000000000000000000000000000000000C8 -:1088B00000000000000000000000000000000000B8 -:1088C00000000000000000000000000000000000A8 -:1088D0000000000000000000000000000000000098 -:1088E0000000000000000000000000000000000088 -:1088F00000000000000000000000002000000090C8 -:108900000000000000000000000000000000000067 +:1088A0000000000016761F7F0000000042FF03FF5B +:1088B000303060601F1F1F9F2424E7E70000000086 +:1088C00000000000666E66761C9D5EDF9999C3C34A +:1088D0000000FFFF000066660000000000000000CE +:1088E000000000000066003C0000000000000000E6 +:1088F0000000000000000000000000000000000078 +:10890000000000000000000000000000000606005B :108910000000000000000000000000000000000057 -:108920000000000000000000000000000000000047 -:108930000000000000000000000000000000000037 -:108940000000000000000000000000000000000027 -:108950000000000000000000000000000000000017 -:108960000000000000000000000000000000000007 -:1089700000000000000000000000010000888800E6 -:1089800000000000000000000000000000000000E7 -:1089900000000000000000000000000000000000D7 -:1089A00000000000000000000000000000000000C7 -:1089B00000000000000000000000000000000000B7 -:1089C00000000000000000000000000000000000A7 -:1089D0000000000000000000000000000000000097 -:1089E0000000000000000000000000000000000087 -:1089F00000000000000000000000000041000080B6 -:108A00000000000000000000000000000000000066 +:10892000000000000000107019790000000042FFF4 +:1089300003FF303060600F0F0F9F00000000000049 +:10894000000000000000000C0030048546C7FF0056 +:10895000F0F0000000000000666600610006000DF7 +:10896000000000610006000D00050000000000008E +:10897000000000610006000D00000571002E000DD2 +:10898000000000610007800D000000210003800D41 +:1089900000050061000E000D000000000510002819 +:1089A0000000000005610A2E050D00A0000000284F +:1089B000009000A500615006001D0001A00000000D +:1089C0000000000000610006000D0005000000002E +:1089D0000000000040638006002D920200000000AD +:1089E000FCFC3CFF00000000BCBC3CBE00000000E2 +:1089F000000000000C5D5D0C0000000000000000A5 +:108A000000000000000000000CFF0EFF000000004E :108A10000000000000000000000000000000000056 :108A20000000000000000000000000000000000046 -:108A30000000000000000000000000000000000036 -:108A40000000000000000000000000000000000026 -:108A50000000000000000000000000000000000016 -:108A60000000000000000000000000000000000006 -:108A700000000000000000000000000000000011E5 -:108A80000000008000000000000000000000000066 +:108A3000000000000000FFC3FF01AABABAAA0000AC +:108A4000000000000000000000008F83BFB30000A2 +:108A500000000000000000000000BCBCA0BC000042 +:108A600000003C3C3C3C00000000BCBC3CBE0000A4 +:108A70000000000000000C0C0C0C000000000000C6 +:108A80000000000000000000000000FF0AFF0000DE :108A900000000000000000000000000000000000D6 :108AA00000000000000000000000000000000000C6 -:108AB00000000000000000000000000000000000B6 -:108AC00000000000000000000000000000000000A6 -:108AD0000000000000000000000000000000000096 -:108AE0000000000000000000000000000000000086 -:108AF0000000000000000000000000000000000076 -:108B00000001000000400000000000000000000024 -:108B10000000000000000000000000000000000055 -:108B20000000000000000000000000000000000045 -:108B30000000000000000000000000000000000035 -:108B40000000000000000000000000000000000025 -:108B50000000000000000000000000000000000015 -:108B60000000000000000000000000000000000005 -:108B700000000000000000000000000000000000F5 -:108B8000000000000000070082000000000000005C -:108B900000000000000000000000000000000000D5 -:108BA00000000000000000000000000000000000C5 -:108BB00000000000000000000000000000000000B5 +:108AB0000000000000000000FF01FF010030300056 +:108AC0000000000000000000000000008C80BCB02E +:108AD000000000000000000000000000A0A0A0BCFA +:108AE000000000000000000000000000200008005E +:108AF000000000000000000000000000F0F8F0F4AA +:108B00005F553F3C00000000000000000000000036 +:108B100028285FFF0000000000004D4D000000000D +:108B2000000000000000000000000000CF0C00006A +:108B300000000000000000000000F000F0F0000065 +:108B400000000000000000000000000000003505EB +:108B500035F500000000000000007DAF28AF0000E8 +:108B600000000000000000C0C00000000000200065 +:108B700008000000000000000000000000000028C5 +:108B800000140F000F0000000000000000000000B3 +:108B9000000028285F5500000000C3C34D4D0000B1 +:108BA000000000000000000000000000C3C3CF0C64 +:108BB000000000000000000000000000F0000000C5 :108BC00000000000000000000000000000000000A5 -:108BD0000000000000000000000000000000000095 -:108BE0000000000000000000000000000000000085 -:108BF0000000000000000000000000000000000075 -:108C000000000000000000000000F0F00000000084 -:108C10000000000000000000000000000000000054 -:108C20000000000000000000000000000000000044 -:108C30000000000000000000000000000000000034 -:108C40000000000000000000000000000000000024 -:108C50000000000000000000000000000000000014 -:108C60000000000000000000000000000000000004 -:108C700000000000000000000000000000000000F4 -:108C8000000000000000000000000000F0F0000004 -:108C900000000000000000000000000000000000D4 -:108CA00000000000000000000000000000000000C4 -:108CB00000000000000000000000000000000000B4 -:108CC00000000000000000000000000000000000A4 -:108CD0000000000000000000000000000000000094 -:108CE0000000000000000000000000000000000084 -:108CF0000000000000000000000000000000000074 -:108D00000000000000000000000000000000000063 -:108D10000000000000000000000000000000000053 -:108D20000000000000000000000000000000000043 -:108D30000000000000000000000000000000000033 -:108D40000000000000000000000000000000000023 -:108D50000000000000000000000000000000000013 -:108D60000000000000000000000000000000000003 -:108D700000000000000000000000000000000000F3 -:108D80000000000000000000000000000000FFFFE5 -:108D900000000000000000000000000000000000D3 -:108DA00000000000000000000000000000000000C3 -:108DB00000000000000000000000000000000000B3 -:108DC00000000000000000000000000000000000A3 -:108DD0000000000000000000000000000000000093 -:108DE0000000000000000000000000000000000083 -:108DF0000000000000000000000000000000000073 -:108E00000000000000000000000000000000000062 -:108E10000000000000000000000000000000000052 -:108E20000000000000000000000000000000000042 -:108E30000000000000000000000000000000000032 -:108E40000000000000000000000000000000000022 -:108E50000000000000000000000000000000000012 -:108E60000000000000000000000000000000000002 -:108E700000000000000000000000000000000000F2 -:108E800000000000000000000000000000000500DD -:108E90000A00054000A800000000000000000000DB -:108EA00000000000000000000000000000000000C2 -:108EB00000000000000000000000000000000000B2 -:108EC00000000000000000000000000000000000A2 -:108ED0000000000000000000000000000000000092 -:108EE0000000000000000000000000000000000082 -:108EF0000000000000000000000000000000000072 -:108F00000000000000000000000000000000000061 -:108F10000000000000000000000000000000000051 -:108F20000000000000000000000000000000000041 -:108F30000000000000000000000000000000000031 -:108F40000000000000000000000000000000000021 -:108F50000000000000000000000000000000000011 -:108F60000000000000000000000000000000000001 -:108F700000000000000000000000000000000000F1 -:108F800000000000000000000000000000000000E1 -:108F900000000000000000000000000000000000D1 -:108FA00000000000000000000000000000000000C1 -:108FB00000000000000000000000000000000000B1 -:108FC00000000000000000000000000000000000A1 -:108FD0000000000000000000000000000000000091 -:108FE0000000000000000000000000000000000081 -:108FF0000000000000000000000000000000000071 -:109000000000000000000000000000000000000060 -:109010000000000000000000000000000000000050 -:109020000000000000000000000000000000000040 -:109030000000000000000000000000000000000030 -:109040000000000000000000000000000000000020 -:109050000000000000000000000000000000000010 -:109060000000000000000000000000000000000000 -:1090700000000000000000000000000000000000F0 -:1090800000000000000000000000000000000000E0 -:1090900000000000000000000000000000000000D0 -:1090A00000000000000000000000000000000000C0 -:1090B00000000000000000000000000000000000B0 -:1090C00000000000000000000000000000000000A0 -:1090D0000000000000000000000000000000000090 -:1090E0000000000000000000000000000000000080 -:1090F0000000000000000000000000000000000070 -:10910000000000000000000002000000000000005D -:10911000000000000000000000000000000000004F -:10912000000000000000000000032000000000001C -:10913000000000000000000000000400000000002B -:1091400000000000000000000000200000000000FF -:1091500000000000000000000000200000000000EF -:1091600000000000000000000000000000000000FF -:1091700000000000000000000000000000000000EF -:10918000000000000000000000008000000000005F -:10919000000000000040000000000000000000008F -:1091A00000000000000000000000000000000000BF -:1091B00000000000000000000000000000000000AF -:1091C000000000000000000000000000000000009F -:1091D000000000000000000000000000000000008F -:1091E000000000000000000000000000000000007F -:1091F000000000000000000000000000000000006F -:10920000000000000000000000000000000000005E -:10921000000000000000000000000000000000004E -:10922000000000000000000000000000000001003D -:10923000000000000400000000000000000000002A -:10924000000004000000000000000000000000001A -:10925000000000000000000000000000040000000A -:1092600000000000000000000000000000000000FE -:1092700000000000000000000000000000000000EE -:1092800000000000000000000000000000000000DE -:1092900000000000000000000000000000000000CE -:1092A00000000000000000000000000000000000BE -:1092B0001000000000000000040000000000040096 -:1092C000000000000000000000000000000000009E -:1092D0000000000000000000040004000000000086 -:1092E000000000000000000000000000000000007E -:1092F000000000000000000000000000000000006E -:10930000000000000000000000000000000000005D -:10931000000000000000000000000000000000004D -:10932000000000000000000000000000000000003D -:10933000000000000000000000000000000000002D -:10934000000000000000000000000000000000001D -:10935000000000000000000000000000000000000D -:1093600000000000000000000000000000000000FD -:1093700000000000000000000000000000000000ED -:1093800000000000000000000000000000000000DD -:1093900000000000000000000000000000000000CD -:1093A00000000000000000000000000000000000BD -:1093B00000000000000000000000000000000000AD -:1093C000000000000000000000000000000000009D -:1093D000000000000000000000000000000000008D -:1093E000000000000000000000000000000000007D -:1093F000000000000000000000000000000000006D -:10940000000000000000000000000000000000005C -:109410000000000000000100A000C10000000000EA -:1094200000000000000000000000820000000000BA -:1094300000000000000000000000010000800000AB -:10944000000000000000000000000000000000001C -:10945000000000000000000000000000000000000C -:1094600000000000000000000000000000000000FC -:1094700000000000000000000000000000000000EC -:1094800000000000000000000000000000000000DC -:1094900000000000000000000400000004000000C4 -:1094A00000000000000000000000000000000000BC -:1094B0000000000000000000000000002000000488 -:1094C000000000000000000000000000000000009C -:1094D000000000000000000000000000000000008C -:1094E000000000000000000000000000000000007C -:1094F000000000000000000000000000000000006C -:10950000000000000000000000000000000000005B -:109510000800000000000000000000000020000023 -:10952000000000000000000000000000000000003B -:10953000000000000000900000000000000000009B -:10954000000000000000000000000000000000001B -:10955000000000000000000000000000000000000B -:1095600000000000000000000000000000000000FB -:1095700000000000000000000000000000000000EB -:1095800000000000000000000000000000000000DB -:1095900000000000000000000000000000000001CA -:1095A00000000000000000000000000000000300B8 -:1095B0000084000000000000000000000000000027 -:1095C000000000000000000000000000000000009B -:1095D000000000000000000000000000000000008B -:1095E000000000000000000000000000000000007B -:1095F000000000000000000000000000000000006B -:10960000000000000000000000000000000000005A -:10961000000000000000080008000000000000003A -:10962000000000000000000000000000000000003A -:109630000000000000000000000000020000000028 -:10964000000000000000000000000000000000001A -:10965000000000000000000000000000000000000A -:1096600000000000000000000000000000000000FA -:1096700000000000000000000000000000000000EA -:1096800000000000000000000000000000000000DA -:1096900000000000000000000000000000000000CA -:1096A00000000000000000000000000000000000BA +:108BD000350535F500000000000000007D05280582 +:108BE00000000000000020002000200021002100E3 +:108BF000219021002080840020402010044020008B +:108C000020800588040020002000200000808900CA +:108C10002080200040000400100020802010200050 +:108C200084002000000300882080000520000480CC +:108C30008480208020802080200040842080A1002B +:108C4000411000801000890021850188200020004B +:108C50002000040020004000200020002000A1008F +:108C600088000400208410000000000000000400C0 +:108C70000400044004000010000000030000800015 +:108C800009004040044041000002040000002008A8 +:108C9000400009020000200000000000040800005D +:108CA000094000000000000020200520099000007D +:108CB0004120402000204020090441C0004104041C +:108CC000400082402002A000100002084002000282 +:108CD00005004000090040002000000000000000E6 +:108CE0001000400000040008000088030000840019 +:108CF00002000305041009108200010000050005B0 +:108D00000140080200100090000000000000000078 +:108D10000000044008004000000000020009084074 +:108D200002004040004001400000044004081010D0 +:108D30000002C08003000310090509400810040464 +:108D400009100000040240100010001004004080D0 +:108D500002050400040000100900020004000010D5 +:108D60008410000040004000000200880900000854 +:108D700000088008840880090209000002044000FD +:108D800000000801830900090009000800C00084F0 +:108D9000400802400008000884080000090920007B +:108DA000000900088008000808080000808484008A +:108DB000020005090320088404088208A010C008E6 +:108DC000050188082010C0410208040804080008B2 +:108DD00080020008000000000009C00804000040F4 +:108DE0004000091100408040800800090408C000CC +:108DF000A0020041014100000003004100000010FA +:108E000000000010040005400500080084008200F6 +:108E1000A010881084030000004188008200040034 +:108E20000010A1000800040004000000000004007D +:108E300088000400C0C1040000000000900000038E +:108E40002000000588000408000804400010040009 +:108E50000400042182000000820000900000000055 +:108E6000A0A1044090022080010040000100050004 +:108E70000000000004A00800000000000000030043 +:108E80000000000011011000040140000800210052 +:108E9000210000000000030010004100000003005A +:108EA000000010000800030021000800000000007E +:108EB0000000400000004020009000000000002062 +:108EC000000085000000000041000804800004014B +:108ED000000041004000100000000000411140006F +:108EE00000002102000200910840020000880400F6 +:108EF0008200C0008280100004401140840210C132 +:108F00004000C0000004840082024009844083C005 +:108F1000C0001000000082094008C0000040820527 +:108F20004011C000400088408420004090048284AA +:108F300000002020200000A00020A0410800C00464 +:108F40008200C011C0400800C082028040104189E8 +:108F500082008400C000A000050208004000A0823A +:108F60008200000010218280004010410800024071 +:108F70000400000000A02110000080000800000094 +:108F800000200000008203A0002000412108009082 +:108F900010200000001000001100800108000400F3 +:108FA000000000080990000010A00000009100825D +:108FB00000080000800080004005041100900800B7 +:108FC00004A004002000040000000211834000857A +:108FD00090101000100000101000C0048300210049 +:108FE0004140000000000008000200C00302000031 +:108FF00080001100A0000008000000000000040034 +:109000004020100020001008A00000000008100000 +:109010000020400000000000C000880000000000A8 +:109020004080100000000800C000884104000000DB +:109030008400A0000000A00000039100A080822115 +:1090400008008200400000000400C000C0000003CF +:10905000C1894000000200000000A0008210000052 +:109060000000080088008200C000C00000004080AE +:10907000A084408083000500000000200000000064 +:109080008000000100000004000000000008000053 +:109090000000050590020400090400900000000093 +:1090A00009008002040000000800000003C0000066 +:1090B00000004000020000000020000004204104E5 +:1090C000408411000088A100000003000082000419 +:1090D000000008100000080100000000002003004C +:1090E00009000004050421002088110405842000E3 +:1090F00008200020002002000041001100000000B4 +:10910000000088000203000000008200C00082000E +:10911000C08040000400000020000000000000109B +:1091200000008200000040808400080400004041EC +:10913000A0000000000004000000820040000800C1 +:1091400084008400000084000400881110040021C1 +:10915000880004000410402140004000400240000C +:10916000840000008200000000004000A0004000D9 +:109170000000C008C00082401000410000000084D0 +:1091800000000000000800100000000000100000B7 +:109190000488002082008000000000002000000001 +:1091A0000000200803002090000200008000004022 +:1091B000002000000000000000000000000000008F +:1091C00000000500208800000500A0400400000108 +:1091D00000000020800420010000000000000000CA +:1091E0004000000010000000219020400084008812 +:1091F00000400020040008000004000000000000FF +:109200000000000010C09090008290040000000058 +:109210000000000000C091820204820900000000EA +:1092200000000000000090008200000000C00490D8 +:109230000088004000000000000000000000000066 +:1092400000000200000000C09004009000400108EF +:1092500011C088080084049101C140828800000088 +:109260004100820000008200010000004000010077 +:1092700000001000000008C0401004A000A0000082 +:1092800000000000000080808000000080000000DE +:109290000000000000000082A120002080090000E2 +:1092A00000000000000000041109800000000080A0 +:1092B000800000000000000000000000000000002E +:1092C000000040000000000020808080000000803E +:1092D000020003000580000090410220800400107D +:1092E00000002000800000000000030000000000DB +:1092F00004000500000000008480858080000000DC +:1093000000000000000000000000801000808000CD +:109310000000002000008000830000081000891079 +:1093200000000000000000000500000040004100B7 +:10933000000000000000000300008000800080208A +:1093400000000020000000030000000000808000FA +:109350000000000800400083008005800800000035 +:109360009100030041004002C10080000020800005 +:109370000000A0000500410208118880C111914041 +:10938000C1030000000000000000000090410082C6 +:10939000C008000020009090C000100000C101A093 +:1093A000C0850000000000000000008800000000F0 +:1093B0000100008200000000000120820200020083 +:1093C000C001000000000008000000088800902094 +:1093D000820010080401C0C1A04184044004401070 +:1093E0002000C19008000000A001C100040020017D +:1093F000A082A04041108800200103000804100052 +:109400004010C101000000000000000083000000C7 +:10941000022002C0000000000000000002900000D6 +:109420008241A0C000000000000000000001000117 +:1094300001010001C00000000000900000000000D9 +:109440000000000000000001900002010100050082 +:10945000000102000201C00020001000C001839141 +:1094600000A008A140A1000000008201000100024C +:10947000002000000020000100010000000008A101 +:109480000020900400C10000000000000000400027 +:1094900000008000848000000000000000000883BD +:1094A0001005050503C000000000000000000009D1 +:1094B0002040211000108000000000000300000088 +:1094C000000000000400000003400008801041403C +:1094D000900800048005A0400020801180088311BE +:1094E0000804038841880003004100050021004171 +:1094F0000083002000050020001000200011000063 +:1095000080080008001000C00000000000000000FB +:1095100080118000008000008000008000000000BA +:10952000C1208000218040050000000000000000F4 +:10953000090409004100000241002000020004006B +:1095400041082100208004000000000800210000E4 +:109550000000000000830080000080050080000003 +:109560000000410540A021800502008000020000AB +:1095700000058000000380808000090005000800CD +:109580004010C1A0110983802041000000000000AC +:109590000000C0018220A040C000C000A0040082E2 +:1095A0008800C10120400902040000000000000002 +:1095B00000000100000000000001010000000100A7 +:1095C00000000100002000840000000000010000F5 +:1095D000000000000000000900080000C000200892 +:1095E000C0A0A0000100000501400001000400002F +:1095F00000C00000C0002040040482000040008839 +:1096000000040100C1050000400805000000000042 +:109610000000000000000000070000000000000043 +:109620000000000000000000070000000000000033 +:10963000000000000000000000000000000000002A +:1096400000008400000000000000000000004182D3 +:1096500000E0070000820006000007000000840010 +:1096600000E00000000A0082000007000000008205 +:1096700000000700000000000000000000000000E3 +:1096800000000000000000210000070000000000B2 +:10969000000000000000A0FF28FF00FF00AAAABEF3 +:1096A000AAEB0000000030BA303000FF003C0000A0 :1096B00000000000000000000000000000000000AA :1096C000000000000000000000000000000000009A :1096D000000000000000000000000000000000008A -:1096E000000000000000000000000000000000007A -:1096F000000000000000000000000000000000006A -:109700000000000000000000000000000000000059 -:109710000000000000000000000000000000000049 -:109720000000040000000000000000000000000035 +:1096E00020FF80FF000000000000000050FF54FF3A +:1096F00000000000000000003CFCAAFA000000008E +:10970000000000000000000000000000000504044C +:109710000000000000000000A0A02828000000AA0F +:10972000AAAAAAAA00000000303030BA0000003C0B :109730000000000000000000000000000000000029 -:109740000000010000000000000000000000000018 +:109740000000000000000000000000000000000019 :109750000000000000000000000000000000000009 -:1097600000000000000000000000000000000000F9 -:1097700000000000000000000000000000000000E9 -:1097800000000000000000000000000000000000D9 -:1097900000000000000000000000000000000000C9 -:1097A0000000110080000000000000000000000028 -:1097B00000000000000000000000000000000000A9 -:1097C0000000000011002100000000000000000067 -:1097D0000000000000000000000000000000000089 -:1097E0000000000000000000000000000000000079 -:1097F0000000000000000000000000000000000069 -:109800000000000000000000000000000000000058 -:109810000000000000000000000000000000000048 -:109820000000000000000080000000800000000038 -:109830000000000000000000000000000000000028 -:1098400000000000000000410900000300000000CB -:109850000000000000000000000000000000000008 -:1098600000000000000000000000000000000000F8 -:1098700000000000000000000000000000000000E8 -:1098800000000000000000000000000000000000D8 -:1098900000000000000000000000000000000000C8 -:1098A0000000000000000000002000000082000016 -:1098B00000000000000000000000000000000000A8 -:1098C0000000000000000000000101000000000096 -:1098D0000000000000000000000000000000000088 -:1098E0000000000000000000000000000000000078 -:1098F0000000000000000000000000000000000068 -:109900000000000000000000000000000000000057 -:109910000000000000000000000000000000000047 -:109920000000000000000000010000888800000026 -:109930000000000000000000000000000000000027 -:10994000000000000000000000000000880000008F -:109950000000000000000000000000000000000007 -:1099600000000000000000000000000000000000F7 -:1099700000000000000000000000000000000000E7 -:1099800000000000000000000000000000000000D7 -:1099900000000000000000000000000000000000C7 -:1099A000000000000000000000000800008000002F -:1099B00000000000000000000000000000000000A7 -:1099C0000000000000000000000000000000000097 -:1099D0000000400000000000000000000000000047 -:1099E0000000000000000000000000000000000077 -:1099F0000000000000000000000000000000000067 -:109A00000000000000000000000000000000000056 -:109A10000000000000000000000000000000000046 -:109A20000000000000000000000000000011000025 -:109A300000800000000000000000000000000000A6 -:109A40000000000000000000000000000000000016 -:109A500000110000000000000000000000000000F5 +:10976000000020208080000000000000000000FFBA +:1097700014FF000000000000000000F000F00000F6 +:10978000151500000000000000008282C0C0000526 +:10979000040400000000000000003D057D550505A3 +:1097A000555500000000FF0FFF053F3C3D3D55555E +:1097B0001414000000000000000000000000000081 +:1097C00000005D5DFF0C00000000000000005F5520 +:1097D0005D5D000000000000000000005D0CFF0C5B +:1097E00002C232F2FF00FF00FFFFFFFF000500553D +:1097F000FF05FF1400000000000000000000000052 +:109800005555555500000000FC5F0C5F000000003E +:10981000C0C0C00000000000000000003D053C008A +:109820000505000000000000FF00FF050F00050512 +:109830000000141400000000000000000000000000 +:10984000000000000C0C0C0C0000000000000000E8 +:109850000F000C0C000000000000000000005D0C78 +:109860000C0C0ECE3EFEFF5DFF0C70503000000071 +:10987000000005051414000000003C3CFF0000003F +:109880000000FF5D5D5D00000000FC500C50000F0B +:10989000003C0000C0000000000000000000A50027 +:1098A0005A00059000A5A000000000000005A56179 +:1098B0005A06059D00A500000000000000000061A0 +:1098C0000006000D000000615006000D0000006160 +:1098D0000006000D0005000005610A2E850D00A0A0 +:1098E00005615A2E050D00A0A0610007800D000043 +:1098F00005610A26051D00A50061002E000D000867 +:10990000A0610006000D000000610006000D0000CF +:109910001061202E004D0008000000000000000033 +:109920000000000000000000000000000000000037 +:1099300000000000B4A0A0A0000000000000000093 +:109940005F0F55000000FFFF3F0F3D0500000000C6 +:109950003E0A3D0500000000000000000000C0C2FB +:10996000FFFF00000000CFCFCF00000000004D3C03 +:109970004D00AF0F2F2F0C0CFCFC00000000BEBEF2 +:10998000C0FF000000003F003F003C553C550FC3A6 +:109990000FC30F1F1F0FA0A0AFAF000000000000FB +:1099A00000000000000000000000000000000000B7 +:1099B000000003030C0CA0A0A0A000000000000009 +:1099C00000005F0F550028F8FFFF3C003D05000038 +:1099D00000003C003C00000000000000000000000F +:1099E0000082FFFF00000000CFCFCF00000000008A +:1099F0004DFF4DC3AF0F2F2F0AFA0AFA00000000E7 +:109A00008282C0FF000000003F0000000FFF0F0037 +:109A100000550055001414000CFC0CFC0000000064 +:109A20000000000000000000000000000000000036 +:109A300000000000FF0000001414410000000000BE +:109A400000000000FFFF55003C00AA0000000000DD +:109A50000000000000000000000000000000000006 :109A600000000000000000000000000000000000F6 -:109A700000000000000000000000000000000000E6 -:109A800000000000000000000000000000000000D6 -:109A900000000000000000000000000000000000C6 -:109AA00000000000000000000000000000000001B5 -:109AB0000000004000000000000000000000000066 -:109AC0000000000000000000000000000000000096 -:109AD0000000000100000000000000000000000085 +:109A70000000000000003F3C7D3C10103838000022 +:109A80000000A3F3A0F000000000000000000000B0 +:109A900000000AFA0AFA0000000030BABA300000EA +:109AA00000000000000000000000000000000000B6 +:109AB000000000000000FF002C2C141441000000E6 +:109AC000000000000000550055003C00AA00000006 +:109AD0000000000000000000000000000000000086 :109AE0000000000000000000000000000000000076 -:109AF0000000000000000000000000000000000066 -:109B00000000000000000000000000000000000055 -:109B10000000000000000000000000000000000045 -:109B20000000000000000000000000000000000035 -:109B3000000000000700000000000000000000001E -:109B40000000000000000000000000000000000015 -:109B50000000000000E000008100000000000000A4 -:109B600000000000000000000000000000000000F5 -:109B700000000000000000000000000000000000E5 -:109B800000000000000000000000000000000000D5 -:109B900000000000000000000000000000000000C5 -:109BA00000000000000000000000000000000000B5 -:109BB000000000000000F0F00000000000000000C5 -:109BC0000000000000000000000000000000000095 -:109BD0000000000000000000000000000000000085 -:109BE0000000000000000000000000000000000075 -:109BF0000000000000000000000000000000000065 -:109C00000000000000000000000000000000000054 -:109C10000000000000000000000000000000000044 -:109C20000000000000000000000000000000000034 -:109C30000000000000000000F0F000000000000044 -:109C40000000000000000000000000000000000014 -:109C50000000000000000000000000000000000004 -:109C600000000000000000000000000000000000F4 -:109C700000000000000000000000000000000000E4 -:109C800000000000000000000000000000000000D4 -:109C900000000000000000000000000000000000C4 -:109CA00000000000000000000000000000000000B4 -:109CB000000000000000000000000000FFFF0000A6 -:109CC0000000000000000000000000000000000094 -:109CD0000000000000000000000000000000000084 -:109CE0000000000000000000000000000000000074 -:109CF0000000000000000000000000000000000064 -:109D00000000000000000000000000000000000053 -:109D10000000000000000000000000000000000043 -:109D20000000000000000000000000000000000033 -:109D30000000000000000000000000000000000023 -:109D40000000000000000000000000000000000013 -:109D50000000000000000000000000000000000003 -:109D600000000000000000000000000000000000F3 -:109D700000000000000000000000000000000000E3 -:109D800000000000000000000000000000000000D3 -:109D900000000000000000000000000000000000C3 -:109DA00000000000000000000000000000000000B3 -:109DB0000000000000000000000005000A0005404F -:109DC00000A80000000000000000000000000000EB -:109DD000000000000000000000000000006000061D -:109DE000000C000000000000000000000000000067 -:109DF0000000000000000000000000000000000063 -:109E00000000000000000000000000000000000052 -:109E10000000000000000000000000000000000042 -:109E20000000000000000000000000000000000032 -:109E30000000000000000000000000000000000022 -:109E40000000000000000000000000000000000012 -:109E50000000000000000000000000000000000002 -:109E60000000FFFF000000000000000000000000F4 -:109E700000000000000000000000000000000000E2 -:109E800000000000000000000000000000000000D2 -:109E900000000000000000000000000000000000C2 -:109EA00000000000000000000000000000000000B2 -:109EB00000000000000000000000000000000000A2 +:109AF00000000000000000000F0055001010383872 +:109B000000000000035300500000000000000000AF +:109B1000000000000C0CFCFC000000003030303075 +:109B200020008400200000001000000084000000DD +:109B30000400840804000400C00004002000200089 +:109B400020202000200084008800C000020088003F +:109B500088002000880020008800200020090404DC +:109B60000003000000002000200020002000200052 +:109B7000200220082000840084002000840004804B +:109B80002000C00004002000040020008800200005 +:109B900084000000040004002002000020002000D7 +:109BA00020000000210000000000410040000000F3 +:109BB00010000040109041C0090040002002050242 +:109BC00041000000050000C010400000404041403E +:109BD000044004000520040040C040C0040000020E +:109BE00000000000100000004000000040004000A5 +:109BF0000040090000000000040220024002400072 +:109C000020080000050000004100050005020002D8 +:109C100005020000410000000000000004020000F6 +:109C200040000000000000000000000900000040AB +:109C30000000820002000005000008000000000093 +:109C400003008304004000000000001000410000F9 +:109C500008410210000000008400020504410000D9 +:109C600000000900000000000200020002000000E5 +:109C700008000004000082400040900004008400BE +:109C800000090000840082000000000000000000C5 +:109C900000004009044002410200020002000000EE +:109CA0000000000000020084008200020908000891 +:109CB00000880008000000082010000200082008AA +:109CC00000081000400900040508090800080240C7 +:109CD0000008000800000008000800880008204074 +:109CE0000084000020080000020000080088001026 +:109CF0000900000804080400001000080088090892 +:109D0000000804C04000411004000008408800849E +:109D100000004008000800002084200800004008DF +:109D20000040098400400011C00500210021000509 +:109D300000210000002190414010000500030000B8 +:109D40000010200088214021400010030400100270 +:109D5000002100000021004100001000000000412F +:109D6000000800009021912100000005000500007E +:109D70001008880004219021004100208400020086 +:109D80000000000088080408C180000000050200EF +:109D90000040400040008200000010000000000071 +:109DA0000021000000000000200000000008410029 +:109DB0000000000021820084110000002100080042 +:109DC00000C004000000000000001000088800002F +:109DD000002004000000080000000800000002004D +:109DE000090004000000000010000000080000004E +:109DF0000900100004000200030000000000000041 +:109E000008880000419000000000100400200500B8 +:109E100011200800000000001100000000000500F3 +:109E2000000000040000008203108008C000000051 +:109E3000A00008008200000008008200004100002D +:109E4000820008008209A01100048220040084001E +:109E5000C00082000809001108000004A01182005F +:109E600000008200040040008204080000008241DB +:109E70008400000982000000A0094010C004820094 +:109E800082058400C009400008008404008282002A +:109E90008200820082008211080020001000000071 +:109EA000C00008110400900000030008832000088F +:109EB0000800000000000000210800000400000469 :109EC0000000000000000000000000000000000092 -:109ED0000000000000000000000000000000000082 -:109EE0000000000000000000000000000000000072 -:109EF0000000000000000000000000000000000062 -:109F00000000000000000000000000000000000051 -:109F10000000000000000000000000000000000041 -:109F20000000000000000000000000000000000031 -:109F30000000000000000000000000000000000021 -:109F40000000000000000000000000000000000011 -:109F50000000000000000000000000000000000001 -:109F6000000000000000F0F0000000000000000011 -:109F700000000000000000000000000000000000E1 -:109F800000000000000000000000000000000000D1 -:109F900000000000000000000000000000000000C1 -:109FA00000000000000000000000000000000000B1 -:109FB00000000000000000000000000000000000A1 -:109FC0000000000000000000000000000000000091 -:109FD0000000000000000000000000000000000081 -:109FE0000000000000000000F0F000000000000091 -:109FF0000000000000000000000000000000000061 -:10A000000000000000000000000000000000000050 -:10A010000000000000000000000000000000000040 -:10A020000000000000000000000000000000000030 -:10A030000000000000000000000000000000000020 -:10A040000000000000000000000000000000000010 -:10A050000000000000000000000000000000000000 -:10A0600000000000000000000000000000000000F0 -:10A0700000000000000000000000000000000000E0 -:10A0800000000000000000000000000000000000D0 -:10A0900000000000000000000000000000000000C0 -:10A0A00000000003000400000000000000000000A9 -:10A0B00000000000000000000000000000000000A0 -:10A0C0000000400000000000000000000000000050 -:10A0D0000000000000000000000000000000000080 -:10A0E0000000000000000000000000000000000070 -:10A0F0000000000000000000000000000000000060 -:10A10000000000000000000000000000000000004F -:10A11000000000000000000000000000000000003F -:10A12000000000000000000000000000000000002F -:10A13000000000000000000000000000000000001F -:10A14000000000000000000000000000000000000F -:10A1500000000000000000000000000000000000FF -:10A1600000000000000000000000000000000000EF -:10A1700000000000000000000000000000000000DF -:10A1800000000000000000000000000000000000CF -:10A1900000000000000000000000000000000000BF -:10A1A00000000000000000000000000000000000AF -:10A1B000000000000000000000000000000000009F -:10A1C000000000000000000000000000000000008F -:10A1D000000000000000000000000000000000007F -:10A1E000000000000000000000000000000000006F -:10A1F000000000000000000000000000000000005F -:10A20000000000000000000002000200000000004A -:10A21000000000000000000000000000000000003E -:10A22000000000000400000000000000000000002A -:10A23000000000000000000000000000000000001E -:10A24000000000000000000000000000000000000E -:10A2500000000000000000000000000000000000FE -:10A2600000000000000000000000000000000000EE -:10A2700000000000000000000000000000000000DE -:10A2800000000000000000000000000000000000CE -:10A2900000000000000000000000000000000000BE -:10A2A00000000000000000000000000000000000AE -:10A2B000000000000000000000000000000000009E -:10A2C000000000000000000000000000000000008E -:10A2D000000000000000000000000000000000007E -:10A2E000000000000000000000000000000000006E -:10A2F000000000000000000000000000000000005E -:10A30000000000000000000000000000000000004D -:10A31000000000000000000000000000000000003D +:109ED00002000000020000000000000000900000EE +:109EE0000000050009000000000000000200000062 +:109EF0000000000000002100090003000500000030 +:109F00000000210020000000040000900000000577 +:109F10000008008841001008000011000040000007 +:109F20000400009000000000080000000001100084 +:109F3000000300000008000000000000000088216D +:109F40008205002100080021001000410000C0002F +:109F500000000002000300000041001000000000AB +:109F60000000004100080000000000400000000068 +:109F70000000A000000000000000900000000000B1 +:109F80000000100010000800000000008405000020 +:109F90001000040000000003000000080041100051 +:109FA0000000000010000000000000008805000014 +:109FB000018000000000000000000500000000001B +:109FC000000000040500000000C000000890090027 +:109FD0000000408800001000000011000300050090 +:109FE0000000080000000800001000000000000051 +:109FF0000000000010A008900090002004880920B4 +:10A000000000090400000000040000A0001000048B +:10A010000904C108000000000088000000000000E2 +:10A020000400410000000004000221020000094079 +:10A03000000020080000840000008809200482003D +:10A0400000000003000010000004000000210010C8 +:10A050000000010000090200000002218800000049 +:10A0600000004002000000000000A01120200008B5 +:10A070000100A141000000008200000800008210E1 +:10A0800084100000000000000000000084000000B8 +:10A0900082048200824100000003A002A0001000A0 +:10A0A0000410040008000000000000008411C0003B +:10A0B000840020009011000000000000000000005B +:10A0C0000000000000100020000000000000000060 +:10A0D0000000000010000000000000000000000070 +:10A0E000000000001100000000000000000000005F +:10A0F0000000100040000000000000000000000010 +:10A100000200208820000000000000020000200063 +:10A1100011004100000000080000000000000000E5 +:10A1200000000004000000000000000040002100CA +:10A1300000002000000000200000000000000000DF +:10A140000000000000000010000001000010C0909E +:10A150000000C0000001000000000000000000003E +:10A1600001000000000000080000880000201082AC +:10A1700000000000000100000000000000000000DE +:10A18000000000000000000100200000020000208C +:10A19000821000000000000100000000000000002C +:10A1A0000001000000000001000800010100004063 +:10A1B0001008000000000001000000000000000086 +:10A1C000000900000000001105800005410000802A +:10A1D000800000008000000300000000000000007C +:10A1E000000904000000004111800011020000007D +:10A1F000808000000000004100000000000000001E +:10A20000000000050000000000200300000404001E +:10A21000000080000000000000410000000000007D +:10A220000000000200000000002005800002020083 +:10A2300000008080000000000041000000000800D5 +:10A240000000000000000300000004004000830044 +:10A250000004100080000000008080110000200039 +:10A260000000000000004100000404000500400060 +:10A270000000090000000000000080410000000014 +:10A280004000000000000000400000000800400006 +:10A2900040000000090000000000000080410000B4 +:10A2A0000500000000000000200000002000400029 +:10A2B000C000000504000000000000008010000045 +:10A2C00000000000000000000100000000C0850048 +:10A2D00041C0000001C00800000000C08200000072 +:10A2E000000000000000000000000000010002006B +:10A2F000031000000000880000000000C001000002 +:10A30000000000000000000000000000000001004C +:10A310000400854000000000820000000000C00131 :10A32000000000000000000000000000000000002D -:10A33000000000000000000000000000000000001D -:10A34000000000000000000000000000000000000D -:10A3500000000000000000000000000000000000FD -:10A3600000000000000000000000000000000000ED -:10A3700000000000000000000000000000000000DD +:10A330009000414000000100400000000000C0010A +:10A34000000000000000000000000000000002000B +:10A350000088000005000000000000000000000070 +:10A360000000000000000000000000000001A0014B +:10A3700000080000010000000000000000010000D3 :10A3800000000000000000000000000000000000CD -:10A3900000000000000000000000000000000000BD -:10A3A00000000000000000000000000000000000AD -:10A3B000000000000000000000000000000000009D -:10A3C000000000000000000000000000000000008D -:10A3D000000000000000000000000000000000007D -:10A3E000000000000000000000000000000000006D -:10A3F000000000000000000000000000000000005D +:10A390008201000400000000000000000000000135 +:10A3A00000000000000000000000000000000001AC +:10A3B0000401000400000000000000000000000193 +:10A3C000000000000000000000000000000000414C +:10A3D00000100000000041000000000000000041EB +:10A3E0000000000000000000000000000000000568 +:10A3F0000540008000001000000000000000004147 :10A40000000000000000000000000000000000004C -:10A41000000000000000000000000000000000003C -:10A42000000000000000000000000000000000002C -:10A430000000000000000000000000000000000913 -:10A44000000000000000000000000000000000000C -:10A4500000000000000000000000000000000000FC -:10A4600000000000000000000000000000000000EC -:10A4700000000000000000000000000000000000DC -:10A4800000000000000000000000000000000000CC -:10A4900000000000000000000000000000000000BC -:10A4A00000000000000000000000000000000000AC -:10A4B000000000000000000000000000000000009C -:10A4C000000000000000000000000000000000008C -:10A4D0000000000000000000008400000084000074 -:10A4E000000000000000000000000000000000006C -:10A4F0000000000000C00000000000000084000018 -:10A50000000000000000000000000000000000004B -:10A51000000000000000000000000000000000003B -:10A52000000000000000000000000000000000002B -:10A53000000000000000000000000000000000001B -:10A54000000000000000000000000000000000000B -:10A5500000000000000000000000000000000000FB -:10A5600000000002000000020000000000000000E7 -:10A5700000000000000000000000000000000000DB -:10A5800000000000000000020000000000000000C9 -:10A5900000000000000000000000000000000000BB -:10A5A00000000000000000000000000000000000AB -:10A5B0000000000000000000000000000000008219 +:10A410000020000300800000110000000000000088 +:10A4200000410000000000000000000000000000EB +:10A430000002004000800000410000000000000019 +:10A44000004100000008800000C100000011000071 +:10A4500082000000008080000011000000410040E8 +:10A46000000003890020800000C10000002080005F +:10A4700041000000004180000010000000000020AA +:10A480000000200300000040800000C10000000028 +:10A490000040200000000041800000030000000098 +:10A4A0000000000003910000800500830000000010 +:10A4B0000000A00000000004800000400000000038 +:10A4C0000000000004A00000200000400000000088 +:10A4D00088000800000000400800000000000001A3 +:10A4E00000000000011000002000004000000001FA +:10A4F0000400840000000085080000000000000047 +:10A500000000000000830000000020000040000068 +:10A51000000090018300000000850800000000009A +:10A5200000000000000000040000040000830000A0 +:10A53000000090000500000000050400000000007D +:10A540000000000000000004000000000000000007 +:10A550000000000000000000411200E040005042F6 +:10A560000000000000004842000000000000000061 +:10A570000000000000000000811200E00700480019 +:10A5800000000000000000120000000000000000B9 +:10A5900000000000000000000000811200E0070041 +:10A5A0004800000000000000001200000000000051 +:10A5B00000000000000000000000411200E0070061 :10A5C000000000000000000000000000000000008B :10A5D000000000000000000000000000000000007B :10A5E000000000000000000000000000000000006B @@ -84607,88 +80510,4185 @@ :10A6900000000000000000000000000000000000BA :10A6A00000000000000000000000000000000000AA :10A6B000000000000000000000000000000000009A -:10A6C000000000000000000000000000000000008A +:10A6C0000000000000000000000000000000757B9A :10A6D000000000000000000000000000000000007A -:10A6E000000000000000000000000000000000006A +:10A6E000000000000000000000000000DEAE757BEE :10A6F000000000000000000000000000000000005A +:10A70000000000000000000000000000DEAE0000BD +:10A71000757B000000000000000000000000000049 +:10A720000000000000000000000000000000DEAE9D +:10A73000757B000000000000000000000000000029 +:10A740000000000000000000000000000000DEAE7D +:10A75000612603400000000000000230A00000005D +:10A76000000000000C4000000000000002C06486F1 +:10A77000612603400000000000000230A00000003D +:10A78000000000000C4000000000000002C06486D1 +:10A790000000612603400000000000000230A0001D +:10A7A0000000000000000C4000000000000002C09B +:10A7B0006486612603400000000000000230A00013 +:10A7C0000000000000000C4000000000000002C07B +:10A7D000648600004000020084004180048020055F +:10A7E00021802000400020004000880088008880F0 +:10A7F00004004000041010000200200084008800C3 +:10A800008800400020002000200004002000880074 +:10A8100020000003A00020000200200020002000F3 +:10A820000211040088002000040020000000040041 +:10A83000200004000000200004002000200004008C +:10A84000C0100400040000002000200000002000D0 +:10A850002000200000000908890200000220A0401A +:10A86000400202200000040000040500000040C077 +:10A87000004020A0090200408400090200200000DE +:10A880004000000000400000000000000000400008 +:10A8900000400400000000000402840000000000EA +:10A8A00009C010900502404000000540110004005E +:10A8B00010000000410005004090099000000400D5 +:10A8C0004082000140400000000000000000400005 +:10A8D0000000000000000210020000081140080003 +:10A8E0008200001008410000020000080004084136 +:10A8F00002000000820003004000001090100200DF +:10A90000082108000210024102000000001082002D +:10A910008200000000210000411000000000000043 +:10A920000000000000000802001082000000820207 +:10A930000209000002400889000002000200001025 +:10A940000300028000000210000000000008020066 +:10A950000210000000000000000100880000080054 +:10A96000038800080008000800080008400141842E +:10A97000828204020008020840848008000800C0A7 +:10A9800004080008008420080010001000000008DF +:10A99000000800000010001000008284021000086F +:10A9A000021009080010201080110540000420004A +:10A9B000091100080200080982024000000040104E +:10A9C00040000408000240002011004000C00001C7 +:10A9D000000405090000001004000005002100101B +:10A9E00000100020002105008421012188050000BD +:10A9F00000000000080300214021000200001000B8 +:10AA000000080000000000080021002100000000F4 +:10AA10000021000002000408000800000003C1003B +:10AA2000080088034000040000009000C0080008EF +:10AA300000008400824088008410C021C003000010 +:10AA4000C000002100020000400088040000000057 +:10AA50008400402120030000880000004000000026 +:10AA6000000000000000038282000300400000009C +:10AA7000000010A00000210000000400009103006D +:10AA8000C000000000000084210000080300040052 +:10AA9000030000000320040000020000000000008A +:10AAA00002004100210000004100030003000000FB +:10AAB000400009004100080003002184000000005C +:10AAC000030000000300100120000000030000004C +:10AAD00010000000000040000000002004200800DA +:10AAE0000200044000000800400084008200820050 +:10AAF0000800820008400800000408000800400028 +:10AB000008008200000082000000080940000800E0 +:10AB10000000C00004040840A00040408400000081 +:10AB200009000400041004041009C009A000080072 +:10AB300000004008C0000400888340002000080096 +:10AB400008200000080004000800820008004000FF +:10AB5000090008048209100020028200820082009D +:10AB600000008000000000000390000000000000D2 +:10AB70000000000020000008000000001104000098 +:10AB800080000000410008000000040000000002F6 +:10AB900000000000000000002100110008880200F1 +:10ABA0000000040080A09004800000044108090017 +:10ABB0002100200003820390000000020004000036 +:10ABC00003000000000000840040800000000084BA +:10ABD00000004000110021000000101021000000C2 +:10ABE0000000000800000000000900000000000054 +:10ABF00000000005000001800000000000000000CF +:10AC000082000088000000880000000000000000B2 +:10AC10001000000000000000000040000000900054 +:10AC2000820000008800040008000000A000C004AA +:10AC300010211008080004000000000000040800B3 +:10AC400082101000000002000005900800000000C3 +:10AC50000000000800090000008000002000000043 +:10AC600000000000000000000000000000000000E4 +:10AC700003A0002000000084081000000000050070 +:10AC80000000000000020090000900000000000029 +:10AC90000000000000080200211000000000000079 +:10ACA00000200020000000901000110000001000A3 +:10ACB00008022020098400000000000000081000A5 +:10ACC0000900000000000000000000200004000057 +:10ACD00008000004000000000000001003009000C5 +:10ACE000000021000000000000000000000000083B +:10ACF0008210200000040000820000040000000810 +:10AD00000010000000000000000008000005000422 +:10AD1000000008000004820082080000000000001B +:10AD200000000000400000008200000082000200DD +:10AD3000000000000000000000048400100000205B +:10AD400000210000000000000000C00000410000E1 +:10AD50000000000020200000000040041040840893 +:10AD60001000008000000000000000080000080043 +:10AD700000000000000000000000000000000000D3 +:10AD80000000000402000084000000000000000039 +:10AD90000000000020002000000000000000000073 +:10ADA0000000008820000004000020000000004097 +:10ADB0008302108410880000004000000408110085 +:10ADC0000040008800000410000000000020000087 +:10ADD0002000000000000200000000000000000051 +:10ADE000050411C021020004020000000000000060 +:10ADF000000000C0002000000000000182000000F0 +:10AE000000010000840000000000000100000000BC +:10AE10000001000000000000000000000000000031 +:10AE200000000000000000000000000020C0000042 +:10AE30000001008800000000020000000000040083 +:10AE40009000000000000001200000000000000051 +:10AE500000000000020000010000080100010001E4 +:10AE600000000001000000000000000000000000E1 +:10AE7000000000000080000000000000004100050C +:10AE80000005000300000000000000004041002118 +:10AE900000000010000000000000000000000000A2 +:10AEA00000000000000000000000000000002088FA +:10AEB000000800080040000003000000000000003F +:10AEC000030000000000000410080020000400003F +:10AED0000000000000008840001000408010004189 +:10AEE00000100005001000000000020000008000BB +:10AEF000800380058080000000208000800000002A +:10AF00000000000000000000002000800000008021 +:10AF10000000000000090000000000000000000028 +:10AF20000000000000000000000000000000000021 +:10AF300000000021000080000000000000008000F0 +:10AF40000900210008001003800000080000000034 +:10AF50000000000000000000000000100080000859 +:10AF6000000000000000000000400003000000108E +:10AF70004000080104010804900020000800C000FF +:10AF8000000000000000000000000000008200003F +:10AF900000100000000000000000000000000000A1 +:10AFA00000000000000000000000000000000000A1 +:10AFB0000000200000000000C0000800020008009F +:10AFC0000200000201000000000110004000821099 +:10AFD000880000000000000000009090880004023B +:10AFE000C000000000000000000000900001000808 +:10AFF0000021000000000000000020880020908850 +:10B0000008C0000001000000000000000000000077 +:10B01000000000000100000000000000000000002F +:10B020000000000000000000000000000000000020 +:10B030000000000020880100000211C00000000094 +:10B0400008010001000000010001000000000001F3 +:10B0500001000000000000000000000000020108E4 +:10B060000140000800000100000000000000000096 +:10B0700000000000000000000000000000000000D0 +:10B080000000008000004000000000000000000000 +:10B090000000000000001000080000000000000098 +:10B0A00000000000000000000000000000000000A0 +:10B0B0000000000000000000030011800280000971 +:10B0C00000410004002000020008002104080011D3 +:10B0D000100805100811000000000000000000002A +:10B0E0000800058009000000020041000000000087 +:10B0F00000000000090000028000808080008008BD +:10B10000801000000000000000000000000080002F +:10B110000000000080000900081003000200000089 +:10B12000000000000000000000000000000000001F +:10B13000000000000000000080000002000080000D +:10B1400000040080008000002000110005000203C0 +:10B15000000080000000000000000000000000006F +:10B1600020100589080040000020000000000000B9 +:10B1700040002000A00089000200082004400800D0 +:10B18000C0002088901000000000000000000000B7 +:10B19000C000900040000800000000010100000015 +:10B1A000000000000000000000000000000000009F +:10B1B00000000000000000000000C000082000089F +:10B1C0000200000100200004000000000000010057 +:10B1D00000001000040410A008000000000000009F +:10B1E0000000000110100182880000010000000032 +:10B1F0000000030090008400040000000000000034 +:10B200000000002100000701000000000000000015 +:10B21000000000000000000000000000000000002E +:10B22000000000000000000000000000000000001E +:10B23000000000000000000000000000008200008C +:10B2400007000000000000000000000000000000F7 +:10B2500000000000000000000000000000000000EE +:10B260000000000000410000070000000000000096 +:10B2700000000000000000E00000000000C000C36B +:10B2800000000000000000000F000C0C0000000097 +:10B29000000000003C007C60000000000000000096 +:10B2A000000000000000000000000000000000009E +:10B2B000000000000000000000000000000000008E +:10B2C00000009900181800000000000000000000B5 +:10B2D000000000000000F03CF03C00000000000016 +:10B2E000000000000000FFFFFFFF01079197000032 +:10B2F000000000000000FF78667800000000C0C079 +:10B30000C3C300000000FF00F0F00F000C0C0000B1 +:10B310000000000000007C603C0000000000000015 +:10B32000000000000000000000000000000000001D +:10B33000000000000000000000000000000000000D +:10B340003C3CFF00990018180000000000000000BD +:10B350000000000000000000FF6600660000000022 +:10B3600000000000000000003C663C666167F1F7E9 +:10B370000000000000000000997800780000000044 +:10B3800000000000000000000000000000000000BD +:10B3900000000000000000000000000000000000AD +:10B3A000000000000000000000000000000000009D +:10B3B000000000000000000000000000000000008D +:10B3C000000000000000000000000000000000007D +:10B3D000000000000000000000000000000000006D +:10B3E000000000000000000000000000000000005D +:10B3F000000000000000000000000000000000004D +:10B40000000000000000000C66666600FF00FF3FC1 +:10B41000606000000000000000000000000000006C +:10B42000000000000000000000000000000000001C +:10B43000000000000000000000000000000000000C +:10B440000000000000000000C3C3424200000000F2 +:10B45000C0DBC01800000000000000000000000079 +:10B4600018FF19FF000000000000000000000000AD +:10B4700032F23EFE0000000000000000000000006C +:10B4800000000000000000000C0C66666600000072 +:10B490000F3F60600000000000000000000000009E +:10B4A000000000000000000000000000000000009C +:10B4B000000000000000000000000000000000008C +:10B4C00000000000000066663C3C000042420000B4 +:10B4D0000000FCDBFC180000000000000000000081 +:10B4E000000000FF09FF0000000000000000000055 +:10B4F000000002C20ECE00000000000000000000AC +:10B5000000000000000080000000000000011000AA +:10B5100020280040000800610006000D0000A00087 +:10B5200000000000000000610006000D00000000A7 +:10B53000000000000000000000000000000000000B +:10B5400000000000000000001061202E004D0008E7 +:10B5500000610006000D000000610006000D000003 +:10B5600080610006000D00000000000000000000E7 +:10B570000071002E000D000000610006000D0000AB +:10B5800000610007000D0000000000000000000046 +:10B5900000000000000000000000000000000000AB +:10B5A0000000000000000000FF00FF00000000009D +:10B5B000000000000000000000000000000000008B +:10B5C000000000000000000000000000000000007B +:10B5D000000000000000C0FFC2FFFF0F553C87873E +:10B5E0005500000000000D5DADFD000000000000F2 +:10B5F000000050FA50FA00000000000000000000B7 +:10B600000000F000F0FF000000000000000000005B +:10B61000000000000000000000000000000000002A +:10B6200000000000000000000000FF5DFF0C0000B3 +:10B63000000000000000000000000000000000000A +:10B6400000000000000000000000000000000000FA +:10B65000000000000000000000FF82FF000F553CCA +:10B660008787FFAA000000000858A8F80000000023 +:10B67000000000004141EBEB000000000000000072 +:10B6800000000000C3AAC3AA0000000000000000E0 +:10B69000000000000000000000000000FF0CFF148C +:10B6A0000000000000000000000000000000008218 +:10B6B000000000000000000000000000000000008A +:10B6C0000000000000000000000000000000C3AA0D +:10B6D000C3AA0000000000000000000000000000FD +:10B6E0000000AAAAF03CFF5CF05C00000000000033 +:10B6F000000000000000EF6DAE2C000000005D0CAB +:10B700007D3C000000000000000000000000000080 +:10B710000000000000000000000000000000FF0C1E +:10B72000FF140000000000000000000000000028DE +:10B730000000000000000000000000000000000009 +:10B7400000000000000000000000000000000000F9 +:10B75000F000F0FF0000000000000000000000000A +:10B7600000000000AAAAF03C0F5C005C0000000092 +:10B770000000000000000000C74586040000000033 +:10B780005D0C5500000000000000000000000000FB +:10B79000C0008810200020848880C0004000000085 +:10B7A000410041004000050003000380A180898022 +:10B7B000200005002000C000050088008400000073 +:10B7C0000008840004000100880000002000200020 +:10B7D000000320002003840088000400401004803F +:10B7E000888420002000400010008821848084107C +:10B7F0000400880088088800880020002000880055 +:10B800000400400088208800880484004000000074 +:10B81000208000C0090000000004402000000082D9 +:10B820000004108210022100200084A09020044017 +:10B830000220210002000000200010400000000053 +:10B84000000040000000400008202190200000007F +:10B850002100000005004082000000004000C09070 +:10B86000C002002080008000200085000490400875 +:10B87000040009001000200000002040000000002B +:10B88000040200000400002004002100400004C065 +:10B89000000000020080020000000000010004001F +:10B8A0000220000082100010900000108210820818 +:10B8B0000010400500000040011002090210008045 +:10B8C0000280884182000200000000C002000009DE +:10B8D0008200881000000900A0100040A002004073 +:10B8E00001000010009004408200020000000000EF +:10B8F000000002090900080000000209000002001F +:10B9000000000840404002000000004000400000ED +:10B9100010800005001000020000000800820400F2 +:10B9200080080001008800020201000000084008B1 +:10B93000090002008204000800000809001000004D +:10B940000040040202000000040000880002040815 +:10B950000008001000090000088440402008050984 +:10B960000000040000010403008800000000030040 +:10B9700000080008030840080284000000040008D2 +:10B98000008204008084800800880000000000829B +:10B99000004080100008001100008800000000082E +:10B9A0000000000000080100C000084021880021BC +:10B9B000000000000008C00802800000000000082D +:10B9C000000000210000000800000000000000004E +:10B9D000000000410021000000000008000300807A +:10B9E00000040000000000210000400800410000A9 +:10B9F0000008000000000821C00000000000000056 +:10BA0000000090008800000800000008000084008A +:10BA100000080402000000020008099005A021842B +:10BA20000300000000000000200000000884202027 +:10BA30000000000000000000000080400000000046 +:10BA400000000000000000000000000000000000F6 +:10BA500003000500000011000000000000000000CD +:10BA600010400000000041000000402000000020C5 +:10BA700009004100000000000090000000822082C8 +:10BA800008080000000000000500100000900008F9 +:10BA90000500210000014000080141200000840051 +:10BAA000000000000040080000008200C00200000A +:10BAB000014008000011A000080008000040844078 +:10BAC0000010820008000000080004000800084080 +:10BAD0000805090310110000000002000000A0404A +:10BAE000000300008800400008C00800112010007A +:10BAF00010001002200000000000A0000840080014 +:10BB0000C040A0090421840490008400A000081112 +:10BB1000080808040800080008402000820000000F +:10BB20000000400021A000820000000004A00000EE +:10BB30000000040800004100000000002010100078 +:10BB4000000140010000000008880000000000A083 +:10BB500000010000080000000000030000000000D9 +:10BB600010000500410011A000000520050810018B +:10BB70008000C0888090838240000388000000001D +:10BB8000000000000000400000011100080000005B +:10BB90000300000000000000210010000040000031 +:10BBA0000000000084000000000004000400050004 +:10BBB00085008220400000400000000000000000DE +:10BBC00000000000000000200000000000008200D3 +:10BBD0000000000084000021000090000008100018 +:10BBE000000009000000C000000008080000052057 +:10BBF00000004000000900000000080000001011D3 +:10BC00000000000004008400C00000880000C000A4 +:10BC10008210822140000000840004000000001116 +:10BC200010410008000000000000000040048504EE +:10BC3000A0880200000000000001000003000000D6 +:10BC400000001000080010000001000000000000CB +:10BC500000000000000000000000000000000020C4 +:10BC6000000000000840009005040584000000006A +:10BC700004000088000005000040000004000000EF +:10BC8000000400C000000000000000844004009098 +:10BC90000990090805008088030000008000050065 +:10BCA000410004000000000000000000000004004B +:10BCB00000210000020008900880008000000021A0 +:10BCC0000000000010000000000001000000000063 +:10BCD00000000000000000000005000082000000DD +:10BCE00000400000000000004000C000080000000C +:10BCF00000110000000800110000200000000000FA +:10BD00000000820000000000000010111000000080 +:10BD10000000000009208421C000C00000000100D4 +:10BD200000000000002100C000001102000000001F +:10BD300080000800081080000011414000402100F0 +:10BD4000008820000000000000080000040000003F +:10BD500011040300000200000300000000000000C6 +:10BD6000008800C003000000030403000304020075 +:10BD70000084000402002000000008008000100081 +:10BD8000000200000000090400080000000040005C +:10BD9000000000000000040100000000000000009E +:10BDA000040020000000000000000001010100006C +:10BDB000000008000100000089C00910034088004D +:10BDC00002C00020C0200088010000000000000028 +:10BDD0000000000000000000000000002000000043 +:10BDE0000000000000000000000000000000400013 +:10BDF0000000400000008200100000010000090067 +:10BE0000000000000000080000000000000000002A +:10BE1000000088008800040082000000000000008C +:10BE2000000002100141820900C108100008401002 +:10BE300000020000800003000000A18090008380C9 +:10BE40000000838005800000000009000000000061 +:10BE500000000000000000000000000002000000E0 +:10BE600000000000000000000000000003002000AF +:10BE700080000000800004000000800008410003F2 +:10BE800040000000000040008000000000000000B2 +:10BE9000000000000000200088008000000000007A +:10BEA0000000000080A0024000A000200000000070 +:10BEB000000000000000000000000000000003007F +:10BEC0000008410080008021008080000000800088 +:10BED0008000808090009000A000410000000000E1 +:10BEE0000000800080008000000000000000410091 +:10BEF0004003032020002000C00080044004100004 +:10BF000010000000410000000000000000000000E0 +:10BF10000000000000000341210020001083008089 +:10BF20000000000000411100A00085000400000096 +:10BF30000000000000000000009000000010000061 +:10BF4000000000000100020010008204C000400058 +:10BF50002000A000C0900500110009009100000021 +:10BF600040000000C000100002008400C00000007B +:10BF7000000001010003008209400508040111A02E +:10BF8000009001000000010000000000000000001F +:10BF90000000000000000000009101000000010509 +:10BFA00000C000000000000140001000A0002100BF +:10BFB000000000000000010001000000100000006F +:10BFC000004000A0908401C100890088000000C1E9 +:10BFD00000900020000000C00000000000000000F1 +:10BFE000000100000000000100000000000000004F +:10BFF0000000000000000001000000210091028309 +:10C000000004000001010100000100010001000125 +:10C0100000010000000000000000000800110041C5 +:10C02000000300000000000000009021004040C01C +:10C030008809000021000200080041000000800083 +:10C040000300008000C0808009C1001000210003AF +:10C0500000C100000000000000800000000000009F +:10C0600000000010000300000008000000000000B5 +:10C070000000000000000004002100110010000872 +:10C0800080040085000010100508084100020040EF +:10C09000001000410000000000000000002000909F +:10C0A00000A1000800000000000000000820038537 +:10C0B00020030041000400000000000000110021E6 +:10C0C0000000000080000005000000038040000226 +:10C0D0000000000000000080008000000000000060 +:10C0E00000000008000000000000000000100080B8 +:10C0F000000000000000000080000000001041105F +:10C100004004030040204100000010002000000017 +:10C110000000000000000000000000000000090412 +:10C120001008410002001100200020000900000951 +:10C1300000080000000200000000000000000000F5 +:10C14000000000000000C040100010000001C0010D +:10C150000090908800000000008800C0000000846B +:10C160000040000200010000008800000000000004 +:10C17000002000100000000082040800A000C001A0 +:10C18000010001050002000101080000010000009B +:10C19000000000000000000000000000000000009F +:10C1A000000301000000000000000000000000008B +:10C1B0000088009000080000880000E000000000F7 +:10C1C000600600E007008400820000E00700000035 +:10C1D0000006000007010000000000000700004109 +:10C1E000000000000000000000000000000000004F +:10C1F000000000000000000000000000000000003F +:10C2000000000081000007000000880000E000003E +:10C21000000000000000000000000000000000001E +:10C220000000600000E0070088000000000000003F +:10C230005006008100000700000000000000000020 +:10C2400000000000000000000000F00000F0AAFF65 +:10C25000FCFC0000000050501414000000003030BE +:10C260000C0C0000000000000000000000000000B6 +:10C2700000000000000000000000000082C3C2C3F4 +:10C280000000000000000000DC1CD01000000000D6 +:10C29000000000000000000000000000000000009E +:10C2A0000000000000000000C2EAD6FE000000000E +:10C2B00000000000000000008FBF80B00000000000 +:10C2C000000000000000000000000000F00000F08E +:10C2D000AA000C0CF0F0AAAA5050141400000000A0 +:10C2E00030300C0C000000000000000000000000D6 +:10C2F000000000000000000000000000000000C37B +:10C30000C0C30000000000000000DF1FD3130000C6 +:10C31000000000000000000000000000000000001D +:10C32000000000000000000000004068547C000095 +:10C33000000000000000000000008FBF80B000007F +:10C3400000000000000000000000000000000F00DE +:10C35000000F00000000000F003CC3C37D3F000041 +:10C3600000003CFF5C5C000000003F03D7D70000EA +:10C3700000000505505000000000BFBA1F1A000061 +:10C380000000000000000000000000005FBE0ABEC8 +:10C39000000000000000000000000000000000009D +:10C3A000000000000000000000000000000000008D +:10C3B00000000000000000003CFF0F553CFF4D4D09 +:10C3C000000000000000000000000000000000006D +:10C3D0000F00000F00000000000F003C00007D3F38 +:10C3E000000000003C005C5C000000003F031414EF +:10C3F000000000000505505000000000B5B0151009 +:10C4000000000000000000000000000000005F14B9 +:10C410000A140000000000000000000000000000FE +:10C42000000000000000000000000000000000000C +:10C43000000000000000000000003C000F5500C399 +:10C440004D4D00610007800D000005710A2F850D1C +:10C4500020A0A0605007804000001061202E004DF9 +:10C460000008000000000090000800610006000DB8 +:10C47000000100610006000D000500000000000042 +:10C480000000000080610006000D000000610A2E1F +:10C49000050D00A000000001800000000061000602 +:10C4A000000D000000000000000000000065000F0B +:10C4B000800D00A000610006000D00000561002E47 +:10C4C000000D00000000000000000000000000005F +:10C4D00000000000000000000F0F0A0A000000002A +:10C4E00030BA303000000000000000000000000002 +:10C4F0000000000000000000F5F57D7D0000000058 +:10C500000000000000000000000055FF00AA3F3CB2 +:10C510001F14FFC33C0041410303000F0A0A00003F +:10C52000000030BA30300000000000000000AFBE54 +:10C53000AF14DC1CD010A0C0AFC000000000000091 +:10C540000000F0FCA0BC00000000000000000000A3 +:10C550000000000000000000000000000A0A0000C7 +:10C560000000303030BA0000000000000000000081 +:10C5700000000000000000000000F5F52828000081 +:10C58000000000000000000000000000F5F5A0A081 +:10C590000F001F141717171741410303000F0A0A52 +:10C5A00000000000303030BA000000000000000041 +:10C5B00005BE0514DF1FD313A0CFAFCF00000000CE +:10C5C00000000000003CA0BCF5FC05FC00000000E1 +:10C5D000000000000000000000000000000000005B +:10C5E000000000000000000000000000000000004B +:10C5F00000000000A0BCF0FC0000000000000000F3 +:10C60000000000000000000000000000000055874E +:10C610000087000000003030BABAAAAAAA000F0FA3 +:10C620000C0C0000000000000000000000000000F2 +:10C630000000000000003CF03CFF00000000000093 +:10C640000000AF05BEBE0ECE3EFEF50C050C000090 +:10C650000000000000000000000000000000F0F0FA +:10C66000AAAA000000000000000000000000000076 +:10C67000000000000000A0BC003C00000000000022 +:10C6800000000000000000000000000000000000AA +:10C69000FF87AA87000000003030BABA0000AA0065 +:10C6A00000000C0C00000000000000000000000072 +:10C6B00000000000000000003CF03C000000000012 +:10C6C00000000000AF05141402C232F22000400244 +:10C6D000840088002000C0000000C00000000000AE +:10C6E000200084002000820040008800000020001C +:10C6F000204100048800C0004000A0000000850028 +:10C700000000000000002000100084000003111051 +:10C71000218021800000C011200084002000100032 +:10C72000400010008500050021004080A10000802D +:10C7300085C0888088800005200088008400402013 +:10C740000000C00004000400880004004000000055 +:10C75000100020C010000000400000000000400059 +:10C760000000418200A000C000C021002002410062 +:10C7700040C0000000010000400000A021000008AF +:10C7800008022000009020042140200004820000C4 +:10C79000A00410209020108209008000000090C0AA +:10C7A00084900900890020C00200020004200402D5 +:10C7B00040041005040804084100000000000000C7 +:10C7C000040009C0040020000300400041000400F0 +:10C7D000010002800010880208000040000000C034 +:10C7E0000040000000100090040000100100400014 +:10C7F0000800008300000810040202008200080202 +:10C80000041008C0880021400200020020088510A2 +:10C81000000000000400020009100800820002105D +:10C820000382000304000000021082002040000088 +:10C830004110040000000210010000080400000084 +:10C8400002000200000000000000008400200282BC +:10C850000002040200104108000900040002410027 +:10C8600005020000000800000410000802004084D7 +:10C87000C00000000008000880040009040841000E +:10C880008209000089030000400104088202800040 +:10C8900040000000000880000088A0840208000812 +:10C8A00009080411020802080200048400080500B7 +:10C8B0000008C0082008020020000800021002083A +:10C8C0000008020800080284208802080020028371 +:10C8D0000021200510000008010000000008A00849 +:10C8E000000000409002000000000041000900002C +:10C8F0000000820000080000040088000000000022 +:10C9000000030000000400000000000820210020B7 +:10C91000000000210000040040054000A000C0020B +:10C9200000041002100800000803C008000882007C +:10C93000400800000000400000002008200884009B +:10C94000000040001000040000000008040008106F +:10C9500000001000002000000800040000C00800D3 +:10C96000000000000009000000000320000000207B +:10C9700004200090040000000000000000000000FF +:10C98000000005000000030000000000000080001F +:10C9900004004000040000004104110009A0000050 +:10C9A00000010891000000000390000000080088CA +:10C9B000000000001100000003000800A10080003A +:10C9C00010A000000800100041A008004100410034 +:10C9D00000000800000010A104000000C0000800D2 +:10C9E0008411820908091000082108098400888040 +:10C9F000200020040802A0054000C0000400000040 +:10CA000000118209C01108008200C000C0000004AB +:10CA1000A0008321C004A080000082102000842098 +:10CA200010008400A04001044004C1A01020200098 +:10CA30001000C0000000C000000020021002A00092 +:10CA400010008400A0000020082004000000400026 +:10CA500082008200000008008200800000000004C4 +:10CA6000090041400000034008000000008441002C +:10CA70000002800080000000111000000000110082 +:10CA80000400000000004140041003080000000002 +:10CA90000040410020000300082000001001800039 +:10CAA000088580000000038804910011202190C1B6 +:10CAB0008002800009000000004008000082009011 +:10CAC0000000210003001000080010A00800080466 +:10CAD0000000000003880000000000080000400083 +:10CAE00000002110C00000400000A0000020000055 +:10CAF0008800004100800080048000800800000061 +:10CB000082000800000000008400C0000000C0088F +:10CB100000910205C005A0004080820400000220B0 +:10CB2000040090004000200008000011080082402E +:10CB3000200000008200000308409000C000008038 +:10CB400000000000000808001000000040408200C3 +:10CB500000000000840000008400C0000000118874 +:10CB600040000002040021880000000000000304CF +:10CB70000000000000000004200403042104000061 +:10CB800000000000030008900000050003000004FE +:10CB900000000040880000000020000400000000A9 +:10CBA0000000210000000000C10400000084080013 +:10CBB0000300900040A010000000080008000000E2 +:10CBC0000008000000000000089010040820100079 +:10CBD00011000000002000000008090410000400FB +:10CBE000100004200080020000030000004100004B +:10CBF000000000008800820400000008000000051A +:10CC000000008200820040088841000040080000C7 +:10CC10008403C0A10000840000042000820020885A +:10CC200000000040820082000000828400A1844154 +:10CC300001000000200000A1010000000000080029 +:10CC400084000000820000000000000000000000DE +:10CC50000000000000000000000040000000000094 +:10CC600000004100802100200000000000000302BD +:10CC70000584009000001000410000000008000042 +:10CC80000000000000000500050000000800000092 +:10CC900000000000001000000000000080004100C3 +:10CCA000C0040000008402002000000008210020D1 +:10CCB0000800040011000000102004000090030090 +:10CCC000000008000000000000000200000000005A +:10CCD0001100000000000002030400000008000032 +:10CCE000000000000002A0A1408900100002A088FE +:10CCF0000282009000000100880000000000000097 +:10CD00009000000000000000C00000000411A0021C +:10CD10009082080901C001201000000003000000FB +:10CD2000C00020000000000100000201010001011C +:10CD3000A1010401000000018401A1000000000025 +:10CD4000010084009000000100009000000000003D +:10CD500000000000000000000000000000000000D3 +:10CD60000000080000000809100880080004038083 +:10CD7000210080800000000003000000000000008F +:10CD8000080005000000000010001000000008026C +:10CD9000858900200008218010808000000091001B +:10CDA000210002000000000040410021890208002B +:10CDB0000208880590020020404100110341000054 +:10CDC0000000400080000000004100080203000055 +:10CDD0000000000000000000000000000000000053 +:10CDE000400004008000000010002100100011032A +:10CDF0000000000000000000000080000000800033 +:10CE000020400800112040008000000000000000C9 +:10CE10000000820082000320008000408000800823 +:10CE200080088000004000000000200020904100A9 +:10CE3000C120A1110210410303404000020005007F +:10CE40004111000000000000800080000800030085 +:10CE5000C100000000000000000000000000000011 +:10CE600000001000200010002080010401200100BB +:10CE700000210000000000000000900082008800F7 +:10CE800008900000000001000100080002000400FA +:10CE9000820090022000A0000100080408000400A5 +:10CEA00008008800040088002008000009400902EA +:10CEB00002C0030103C01109C0A0410800400108DD +:10CEC00000000109000090000000C0400200910035 +:10CED000A000C100000000000000000000000000F1 +:10CEE000000000000100001001000108080001001E +:10CEF00020010201C000000000010000000000004D +:10CF000002000000000020010000000100010001FB +:10CF10001000000110A0018800050804A000000016 +:10CF200000000001009008110088010500000000C9 +:10CF30000000040001010000080090010100000051 +:10CF400000001100000100010021000300C10000E9 +:10CF500000000001000100000000000000000000CF +:10CF6000000000000000010100004000000020401F +:10CF70004005082100088002001100200040000246 +:10CF80000003800300100020001000414011000247 +:10CF90000008000900418020032040A120820009F0 +:10CFA00000200041030800200090002008400000FD +:10CFB0000040200480000841402002200321080393 +:10CFC00005400000910300410010000200A0008213 +:10CFD00000000803000800410000000000000000FD +:10CFE0000000000000000000081000208003001175 +:10CFF0000284082109001000000000000000000069 +:10D000000000008000000000002000000000004040 +:10D01000002000800000000009804082088010117C +:10D02000881040880300040000080083008000008E +:10D0300000004100001020800000101004910280C8 +:10D0400010044110001020000000000000050080C6 +:10D0500000004102030808800803000000000000EF +:10D0600000000000000000000000000200000000BE +:10D07000000400A00100000001000000000000000A +:10D0800000000000004000200000004100000000FF +:10D0900000000000004000900000000200A000829C +:10D0A0000100C0002083018801000001001000C0C1 +:10D0B000000000009100A011888484008401C00455 +:10D0C00083409100010100000000000000000020EA +:10D0D0000002000001010083004001010000000087 +:10D0E000000000000000000000000000000400003C +:10D0F0000000000000060000070000000000000023 +:10D10000000060000000000000000000600000E07F +:10D1100000000000810000E00000000000000000AE +:10D12000000000000000000000000000818100E01D +:10D130000704000A0000418200E0070000006006CA +:10D1400000E007000000818100E00700000000828D +:10D15000000007000000600000E000000000000088 +:10D16000000000000000000000000000000000417E +:10D1700000000700000000000000000000000000A8 +:10D18000000000000000000000000000000000009F +:10D19000000000000000000000000000000000008F +:10D1A0000000FF660066FF000000000000000000B5 +:10D1B0000000FF66FF6600003636FF0F000000002B +:10D1C000EFE32F230000000000000000000000003B +:10D1D0000000000000F000FF000000000000000060 +:10D1E000000000000000000000000000000000003F +:10D1F000000000000000000000000000000000002F +:10D20000000000000000000000000000000000001E +:10D21000000000000000000000000000000000000E +:10D22000000000003CF03CF00000FF0000000000A7 +:10D23000000000000D0D040400003636F000000070 +:10D240000000ECE02C2000000000000000000000C6 +:10D2500000000000000000F00000000000000000DE +:10D2600000000000000000000000000000000000BE +:10D2700000000000000000000000000000000000AE +:10D28000000000000000000000000000000000009E +:10D29000000000000000000000000000000000008E +:10D2A000000000000000000000000000000000007E +:10D2B000000000000000000000000000000000006E +:10D2C000000000000000000000000000000000005E +:10D2D000000000000000000000000000000000004E +:10D2E000000000000000000000000000000000003E +:10D2F00000000000000000000000000024E724E718 +:10D30000000000003C3C0F0F000000000000000087 +:10D310000E9E6EFE000000000000000000000000F5 +:10D3200000F00FFF24CFE7CFBD81BD81000000FFDB +:10D33000989EF8FE00000000C1818181000000007D +:10D3400000006F6F303F0000000043675B7F00000C +:10D3500000000000000000000000000000000000CD +:10D3600000000F2F0F1F0000000000000000000051 +:10D3700000000000000000000000000000000C0C95 +:10D38000CFCF00000000FFFF00FF00000000000002 +:10D390000000089868F8000000000000000000008D +:10D3A00000006C6C6C6C240CE70CF0F0F0F000FFEB +:10D3B0000000080E686E00000000C3838181000039 +:10D3C000000000006060303F000000000125193DB2 +:10D3D0000000000000000000000000000F0F666663 +:10D3E0000000000000240018000000000000000001 +:10D3F000000000000000000000000000000000002D +:10D4000005610A2E050D00A000614006000D000018 +:10D4100000610006000D000000610007800D0000A3 +:10D42000006100078008000000610006000D000098 +:10D43000A0615006000D00010061002F801D00A1B9 +:10D44000000000000A298500000005610A2F850DF3 +:10D4500000A005000A29850000A00061002E004DF3 +:10D46000000800000001800000050000000000002E +:10D470000000000000000000000005610A26050D04 +:10D4800000A0D7CFD70CFF00C3C30000000014BE1C +:10D4900014BE00000000AAF0AAF000000000CFCFE8 +:10D4A0000C0C000000000041C0C0020EC2CECDC175 +:10D4B0000D01C3C300FFA0AFA0AF00000000B23C4D +:10D4C000B2FF00000A0AAAAAC0C08282FDF13D3163 +:10D4D000FCC0EBEBAAAA0A0A00C38282000000008B +:10D4E000FFFF0000000F003C0A0A000F00000000D0 +:10D4F000000000000000000000000000000000002C +:10D50000DCD01C1014CF140C55550F0F0000000078 +:10D510005050FAFA000000003C003CFF0000000000 +:10D52000D714D7140000000000410000323EF2FE84 +:10D53000FDF13D31AAAAF0F030303F3F000000007D +:10D54000B200B2C300000A0A0000C0C08282CDC18E +:10D550000D01FCC0282800000A0A00C382820000D6 +:10D560000000A0BC0000000F003C0A0A000F0000F1 +:10D5700000000000000000000000000000000000AB +:10D580000000DFD31F13553C553C3C3CF0FF00002E +:10D59000000000000000000000000000000000008B +:10D5A0000000C707C4040000000000000000FF0FD7 +:10D5B0003535AAFFAA0000000000000000000000AE +:10D5C00000000000000000000055000FF0003C00CB +:10D5D0000838C8F8DF8AD580F000F0F000C3C0C07A +:10D5E0000000000000000000F0005050AA00F00011 +:10D5F000000000000000000000000000000000002B +:10D6000000000000838FB3BFFF0F000F3C3CF00011 +:10D61000000000000000000000000000000000000A +:10D6200000000000F737F4340000000000000000A4 +:10D63000F0003535AA0FAA0F00000000000000001E +:10D64000000000000000000000000055000FF00086 +:10D650003C000B3BCBFBDF8AD580F000000000C311 +:10D66000C0C00000000000000000F0005050AA0000 +:10D67000F0000000000000000000000000000000BA +:10D68000000000000000808CB0BC210001044100BB +:10D690004004820000108800044120008800888037 +:10D6A00000040000208020800420C000040220002C +:10D6B0000000040004008800001000008200000048 +:10D6C000C00021002100010089000003400000008B +:10D6D00020001100048008802000880000112080B4 +:10D6E000008000804000200000002010880004001E +:10D6F0000420A000400003002000210084008800D6 +:10D7000084028400840088000000000020002000C3 +:10D71000200480400900000000C000000540000017 +:10D72000210400C10000A10400028001210000A02A +:10D730004002000220000000000040002100200004 +:10D74000110000A090004000100420020000000022 +:10D75000000005000490000409040500000200C058 +:10D7600000040404090420C0000200000403414036 +:10D77000800080A00000C0C088C000202000000001 +:10D780004100000100040020200000000000901073 +:10D790000100000008000900000000100102020062 +:10D7A000080082809010080010008400A010000083 +:10D7B000000000000800200010050400000900001F +:10D7C000080008008410020000008800001000001B +:10D7D0000000020284000509000002A02020400091 +:10D7E00004001100020003000200000000100210FB +:10D7F000000400200010411000000000000840104C +:10D8000002000200021008100000820000109002C6 +:10D81000000040000000000804C00000000008896B +:10D820000008000400402008000020000208400812 +:10D83000200004000000110800080000008402001D +:10D8400000840000008400840008000800100040EC +:10D850000000000000010000880804080005801195 +:10D86000800000840400000040080088048800084C +:10D87000008405090001000084880082410002093B +:10D880008200040800C00084008900082084000889 +:10D890000001C083000001000100000882000400B4 +:10D8A0000400000000008810000000000000890053 +:10D8B0000100100200000000000200000000000053 +:10D8C0000021000000000000000010038821010872 +:10D8D0000408000000100000014088A18821020512 +:10D8E00020008880411104050400054084080411CB +:10D8F00000008800002000040000002020048210A6 +:10D9000010080008000000000000C00800008200AD +:10D910008200084040040800400020000090000001 +:10D920008920880003000300030000002108410053 +:10D93000209020A0058205000300030004C0091008 +:10D9400041040884030000000200400000101000A1 +:10D95000200090000000080004000401030402827B +:10D960000082800041042084A184C184A00000843E +:10D9700000A00000000040010001000000010001C3 +:10D980000001A1014100000003002100000003008C +:10D9900000000400030082008400C0000000880032 +:10D9A00000000008004082040000C0004040040461 +:10D9B000C0002000088082000000000008008400F1 +:10D9C000C000080882A00800080008008404820043 +:10D9D0001002A00008A0000082008204828541405D +:10D9E0000821001004110084C040840082028211CA +:10D9F000400040000000008008808200008000207D +:10DA0000848009C110008420A00008000000A0400C +:10DA100008004000820082000000040008000000AE +:10DA200000000000080000000000000008001000D6 +:10DA3000000400008000022003001000000000C06D +:10DA40000000000000400002000020000940030028 +:10DA50000000800100200020000011004020002074 +:10DA600020000300090180001121000000000000D7 +:10DA7000080000A0000041844102000200000020D4 +:10DA800000000302201080200000000000040000BD +:10DA90000000000004000000000082008800000078 +:10DAA000400000800480902004042000400088088A +:10DAB0000000000020000500100000000000100021 +:10DAC000A0000000000000000004000000000000B2 +:10DAD00090004000820082000000000004000285E7 +:10DAE00090008402822090001010040004888204B8 +:10DAF0000010082100110008A000100040800080E4 +:10DB000008842088080082000004002000004000F3 +:10DB1000000000000800000082000000004020908B +:10DB20000004200200200020080940010000A1009C +:10DB3000410408200800A1088800800000000000BF +:10DB400003C0000008A04000000410010508000008 +:10DB500004202108110400880088040400008508BE +:10DB60000820009000040404118241898000C02034 +:10DB700000010000880003000000030421000304EA +:10DB80004004000580040490000000010000000033 +:10DB9000800000000000400010C0000003000003EF +:10DBA0008400C021081100008220000000008421B0 +:10DBB0000811000000000000010000000800200023 +:10DBC00020092009400000000000000010000000B3 +:10DBD000000004000008000000000800050000002C +:10DBE0000000910002001000400004050008004001 +:10DBF00000800808208804000003A0219021000074 +:10DC000084C08200820982212108820820100880B5 +:10DC1000001040040000402100000000000000004F +:10DC20000000001000C008002000000100000810E3 +:10DC300000000000000000A00004020000008000BE +:10DC400000000000000000000000000000000000D4 +:10DC50000000000020020200090400000000900003 +:10DC60000000000004002100050040008804008836 +:10DC70000005100400209120000041000000000079 +:10DC800020000020000420004000C00000008000B0 +:10DC900080400000000000000000000000000000C4 +:10DCA000000000000000C0000000000100010800AA +:10DCB000000000000200A001000190009100C000DF +:10DCC000A00000000000000000000000A1014000D2 +:10DCD0000001000000000000000000010000000141 +:10DCE00000000000000000000000000003C090A041 +:10DCF0000488C088000041002100000100000100EC +:10DD0000100000000000A1012000000101C101205D +:10DD100000010001904082080082C08200000100E2 +:10DD2000080000000300090002000000004010206D +:10DD3000100300410002882000020003000091004F +:10DD4000200080000000000000000000200590106E +:10DD500085200002000000000000000000410000DB +:10DD600004100000000002202120042000099180FE +:10DD7000A1008480800008402120041100200000C0 +:10DD8000080000000000080988080510000421C1EF +:10DD90002180200900080000000000800000000031 +:10DDA00040000000000040081000110302208080A5 +:10DDB0002180041088021100101008802041A085E5 +:10DDC00021008841C1030000008000000000200005 +:10DDD0002000000003050000000000000000020019 +:10DDE00008008500C191000010800903088005A18A +:10DDF00000200085000280008810A00002401188E9 +:10DE0000800000008000800008A0408003400041A6 +:10DE1000200503200305A00940800500A000404024 +:10DE200000000000000000000040010001000101AE +:10DE300002402104A001909100C00188000200016D +:10DE4000889001200901C0090000000200000000C4 +:10DE50000140000000000100000000000000000080 +:10DE60002104A1000300C1880000200208900404DE +:10DE70001003820020C008C08220051102A090007B +:10DE800005820800820008000800011000C001009F +:10DE90000021882091008800C0820002A000A0001C +:10DEA0000901000000000000000000002001400007 +:10DEB0000001010001010501000100010001010054 +:10DEC000000000100808900900C0000002000000D7 +:10DED000000000000000A10101000000000000009F +:10DEE000000000000000000000010000010000012F +:10DEF00082010000840410042091A09001014100DF +:10DF00008800000100010001000100010000200064 +:10DF100009010000000010000201100084040082CA +:10DF2000008410820000000000000000004000108B +:10DF30000003200310200810902120080010081072 +:10DF40004141000308200080009108C100008000CA +:10DF500000000000000305418308101000000000CD +:10DF600000000000000210214108004100001008DC +:10DF70001140002120088040000000108500082189 +:10DF8000020808034005002000020005200440119B +:10DF90000908082140000003000580210520000039 +:10DFA00000000000000000090005004100054100DC +:10DFB00020111000081109C0030908800503082179 +:10DFC000080010004010411121200341030500000A +:10DFD00000000000000010C002020200114000001A +:10DFE0000000000000004102090920800800000034 +:10DFF000211110828800408800000040001180003C +:10E00000209110C11121101000000000000000003C +:10E010001003080541001120A084090441000211E9 +:10E020000800208020001003000400000000000011 +:10E03000008200010100010000A000200102000098 +:10E040008509A000890002000189000000900001FC +:10E05000000000000000000001A00000010001001D +:10E060000000000000000000010101A10082010089 +:10E0700000008385112008888810900090889008FF +:10E0800010000083002100210100000000C000906A +:10E0900000000110010000000000C1090008008814 +:10E0A0002001008400A000820000000000000000A9 +:10E0B0000000880000E000000000818100E007000F +:10E0C0000000500000E000000006600600E00700CD +:10E0D00000820000000000000000810000E000005D +:10E0E00000000000000000000000410000E0070008 +:10E0F00000000000418200E007000000600600E030 +:10E1000007006012884100E00700420000000000A4 +:10E1100000000000884100E007006012842100E058 +:10E1200007000000000000000000000000000000E8 +:10E1300000000000000000000000000000000000DF +:10E1400000000000FA14FABE000000000000000009 +:10E150000505004000000000000000000000000075 +:10E1600000000000000000000000000000000000AF +:10E17000000000000000E8E83CFF00000000FC0A8E +:10E18000FCFAFFAAF03C00000000000000000000C4 +:10E1900000000000000000000000000000003C3C07 +:10E1A00000000000000000000000F505030300006F +:10E1B000000000000000000000000000000000005F +:10E1C000000000000000501450BE000000000000DD +:10E1D000000000000000000000000000000000003F +:10E1E000000000000000000000000000000000002F +:10E1F0000000000000000000E8E800C3000000008C +:10E200000C0A0CFA00AAF03C00000000000000001C +:10E2100000000000000000000000000000000000FE +:10E2200000003C3C0000000000000000F505F3F396 +:10E2300000000000000000000000000000000000DE +:10E2400000000000E8E8E8E800000000000000002E +:10E2500000000000000000000000000000000000BE +:10E2600000000000000000000000000000000000AE +:10E2700000000000BE14FCFC000000000000F7C716 +:10E2800037073030BE82FFFF8CBC00000000282022 +:10E29000EBEF00000000FC0CFC0C00000000000094 +:10E2A00000005500AA003C7DF0008083B0B30F0051 +:10E2B000FFF000000000000000000000000000006F +:10E2C00000000000000000C33CFF00000000000050 +:10E2D0000000000000003C00003C000000000000C6 +:10E2E000000000000000000000000000000000002E +:10E2F000000000000000BE140C0C00000000000034 +:10E30000F4C43404F3F3BE82734300000000000041 +:10E3100028A2EBAE000000005F5F5050000000003C +:10E32000000000005500AA003C28F0008C8FBCBF04 +:10E330000505F5F500000000000000000061000781 +:10E34000800D000005610A2F850D20A08061000668 +:10E350008001000005610A2F859D00A500000000D6 +:10E360000000000000610007800D20000000000098 +:10E37000000000000020000380020008000085610A +:10E380000A2F850D20A080615A2F850D00A0056100 +:10E390000A2F850D00A000610006000D0000056138 +:10E3A0000A2F850D00A0A061502F800D000800618C +:10E3B0000006000D000000610006000D0000825004 +:10E3C000D750370734047DAF7D05FA0A0C0CC3AA79 +:10E3D000C3AAFCBC7C3C0000004000000000000020 +:10E3E000000000000000AA00C3F0BCBCFDFD00005E +:10E3F0000000000000005555C3C30C0C000F0000C6 +:10E400007D7F55570CCF00C300000000BE82BE8246 +:10E410005555FF00F03A003A000000000ECE3EFED7 +:10E42000F0C3AA00D714D714AF7DAF28303FF0FF58 +:10E43000FF0FFF0F00000000000000005050CFC091 +:10E4400082FAD7FAF7C7F4C428AF28050000000005 +:10E4500000F0FFF0F0A05000AAAA00400000140055 +:10E460000000000000000000AAFFC3F0BCFDBCFDDE +:10E470000000000000000000FF00F0F00C0C000F96 +:10E480000000FF7FD7570CCF3CFF000000008282C6 +:10E4900082823C3C0F0FFF3A0F3A0000000002C29C +:10E4A00032F2F0C3AAFFCF0CCF0C057D0528303F18 +:10E4B000000FAA28002800000000000000005F5F95 +:10E4C000CFC00000000073704340FF0FF000550FF5 +:10E4D000550050FA50FAFFFF30A000000000000085 +:10E4E00000000000000000000000C300C3FF7878B7 +:10E4F0007D7D000000000000000000000000C0C0A2 +:10E50000FF3C00000F0FD7828F858A80000000003B +:10E5100000000000F0AAF0AA8C8FBCBF0000000031 +:10E5200000000000F53FF530808F808F03030C0C56 +:10E53000EBEB30F30000000045050505000000008E +:10E5400000000000000000007F7C4F4C5C5C5C5CC5 +:10E55000550F55FF4141EBEB30A030A0000000000B +:10E56000100000000000000000000000F0AAF0AA67 +:10E5700028282D2D00000000000000000F0F555529 +:10E58000C0C0FF3C00000F0FD782DFD5DAD00000FB +:10E5900000000000000000C3FFC38083B0B3000090 +:10E5A000000000000000053F0530D0DFD0DF03038E +:10E5B0000C0C282830F3000000004555050500002C +:10E5C0000000000000000102C00020802000408008 +:10E5D000000040802000000001000400000020082E +:10E5E0002185840088000000880020002000880029 +:10E5F00000000400040000000000000000102000E3 +:10E60000008004802180000300000400200000003E +:10E610002004008010002082830585002000C000B7 +:10E6200004000400040020000009000088008800A5 +:10E63000100001200000000084008800200040003D +:10E640008800200020000008400000002108000091 +:10E6500000100000054040400000200000000000C5 +:10E6600000000202202000000040000000000040E6 +:10E67000000000002000000041A000000000000198 +:10E6800000020004040408040000008221020900C2 +:10E69000110000A1000403400004200220008000BB +:10E6A00004000940A100800005000900000000A04E +:10E6B000000000001000090009000400050004002B +:10E6C00009000000000000020002000020400010CD +:10E6D00002108240821000000040002002008400EE +:10E6E0000800020040000000081002100210900014 +:10E6F000904000C040409040029002000200900014 +:10E7000000100200022190040490000082400000EA +:10E710008200041004008410400005100000034033 +:10E720000110020202000000000002020441020087 +:10E730000200050202000200000082020000000048 +:10E7400000100410004000000000000000000082E3 +:10E7500009000508000800002000008440000010A7 +:10E76000200000000000800000088400000000007D +:10E770000000008403108408001000080000000856 +:10E780000000000800080000000900020000000866 +:10E790000008000000004008040880000284000017 +:10E7A0008408048800090410000002080485840815 +:10E7B0000484040008010008001000000411000097 +:10E7C000040800000208040004000010048804008B +:10E7D00004000000200000000008000800210003E1 +:10E7E00084000000000000004000840000200000C1 +:10E7F000000800000000882100400000C000020363 +:10E80000900000088421880502048800C0210000CF +:10E81000040440002021842100042000100084080A +:10E8200000028400C04084C1000040000041048810 +:10E8300004042000202120000010000582000408AC +:10E840000000002100080000000800009000000007 +:10E85000200403000900410040200900009003400B +:10E86000048803A0400000C00502050000000088E5 +:10E8700004041000210000004008000000004108CE +:10E8800010000000000041820500880408004100DB +:10E89000000021000890210005840000050441A02B +:10E8A00040201101412000000320090002A00300C4 +:10E8B000832009018882A100C00008A041C0030094 +:10E8C000082000820090000000040000000000000A +:10E8D00041A0080008009000100000114040820490 +:10E8E0008400A0110804000000089000A0040000AB +:10E8F00082040000080000004020000082000000A8 +:10E9000008000000000008090004C004024040099B +:10E910008300000084000809820008009011200094 +:10E920000800C102A08040048200A1200000000075 +:10E9300008808200000088410005C0008800002097 +:10E94000000000000800C021C00008000000000016 +:10E95000000008000040000000000000000040002F +:10E960001100000000000000000000000010020084 +:10E97000040041C000000000000000100000210061 +:10E98000080008000000038800000300000184055F +:10E9900000102000000011000800000000C000006E +:10E9A00080000000204100048305000020010000D9 +:10E9B0000000002000000000000000002100009086 +:10E9C00000000010114000000800000000000000DE +:10E9D000000000000000000300008200A000000012 +:10E9E00004000000000882419000000008000000C0 +:10E9F000000000000008882100000021A00008009D +:10EA0000000000000000100082000021004089800A +:10EA1000200000024008000090112000C003A00068 +:10EA20008400841120009000040520008200400032 +:10EA3000040200200003081100C1000408040009BA +:10EA4000001000008200A000900000000000000400 +:10EA5000080000000000001005100500050000007F +:10EA6000200204004120400408004008030003087D +:10EA7000000009A040044020000000000000000049 +:10EA8000050000000900002000020000000000C096 +:10EA900020208988000500400000110411004190E9 +:10EAA000412041900520850404049100832000004A +:10EAB000409088C0410108409100092000010005F4 +:10EAC000004004820000000400020000000000007A +:10EAD0002100009000000000000000210000001153 +:10EAE00000000800000300000009C0002000000032 +:10EAF0000000000000002000040000088200000068 +:10EB000000000000000000001000102100000000C4 +:10EB10000000C00000008400400000000010080059 +:10EB20008200000082008400000082020821820925 +:10EB300084008200820382030420C003200020415D +:10EB40000000200000000020000408000000000277 +:10EB500000000000080000000000000000000000AD +:10EB60000000090000000000000000000804800010 +:10EB70001000000000000000000000400000000045 +:10EB80000000001000000004000000000000000071 +:10EB9000000000900000000204000000000000A03F +:10EBA000000000880000058400002004110480009B +:10EBB000000003900000000000820000050000003B +:10EBC00000000000800000000000000000000000C5 +:10EBD0000000000000000000000000000000000134 +:10EBE0000000000000000000000000000000000025 +:10EBF0000000010000000000000010000001000003 +:10EC000000000000000000000000100000000000F4 +:10EC10000000000000000000010091000000000062 +:10EC2000000000000000000001900084882000C067 +:10EC3000020340889088C09000000000A0000000FF +:10EC40000001A0008301000100000100400000005D +:10EC500000000000000000000000000000000000B4 +:10EC60000041000300400009000000000000000017 +:10EC70000000000008000000002000200003002128 +:10EC8000000000000000000008000200000000007A +:10EC900000000000000000000000040082000000EE +:10ECA00000000000000000000000110021004000F2 +:10ECB0000000C090000309100009080008000000CF +:10ECC00000000810A005A008000205000300800055 +:10ECD0000000000000000000000000000000000034 +:10ECE0000000000000000000000000000003000021 +:10ECF00000000000000000000000908002000840BA +:10ED000082100000000000000000020021110480B9 +:10ED10004021000000000000800020400800112079 +:10ED2000A0000000000000000000000009400809E9 +:10ED300041050400100591A1914082038005808067 +:10ED400080000000104040008240080500000000E4 +:10ED500000000000000000000000000000000000B3 +:10ED600000000000000000000000000000000000A3 +:10ED700000400000000000000000000041024000D0 +:10ED8000C100C101000000000000000001200000DF +:10ED900001020001100088001000040000010100C1 +:10EDA000C000C100000000000000000000000000E2 +:10EDB00000900010010083201140A10820C1100024 +:10EDC0000402040020A08590A000090004000000B7 +:10EDD00000000000004000000000000000000000F3 +:10EDE0000000000000000000000001000100000021 +:10EDF00000000000000000002000000000000000F3 +:10EE00000000010100000000000000000000000000 +:10EE100000000000000000000000000000000000F2 +:10EE200020000801010000000000000000000000B8 +:10EE30008200100000000201100510C008918891A6 +:10EE400000000001C000000100010900A000000056 +:10EE500000000000000000010000000000000000B1 +:10EE60000000000000000000000009000500400054 +:10EE70000000000000000000000000000000000092 +:10EE8000000511020521081000000000000000002C +:10EE90000008000500410020000000000000000004 +:10EEA000050200080008101100000000000000002A +:10EEB0000000002080050008C0100902850011A193 +:10EEC000051010020003801005020521114183087E +:10EED0004010000800050041004100000000000053 +:10EEE0000000000000000000000000000000000022 +:10EEF000000080008000000000000008000000000A +:10EF0000000021801000208040110000000000005F +:10EF10000000C1100200210002110000008000006A +:10EF200000000000000200000003000000000000DC +:10EF30000000000000000000000000411110A08946 +:10EF400003000310001100890000000008801082F7 +:10EF50000800201000030000000000000000000076 +:10EF600000000000000000000000000000000000A1 +:10EF700000000000C0001000A000400000000000E1 +:10EF800000000000010801840002000000000000F1 +:10EF9000000000000911090011009000000000C0ED +:10EFA0000020000000400005008400000000000078 +:10EFB00000000000000020902000C000100109891E +:10EFC00004A090A08200000100200008000000C002 +:10EFD000000801C000010000000000000000000067 +:10EFE0000000000000000000000000000000000021 +:10EFF0000000000000000000000000000000810090 +:10F0000000E0000000000000000000000000000020 +:10F0100000000000000000000000000000000000F0 +:10F02000000000004100842100E007000000000013 +:10F030000000000000000000600000E0000000820E +:10F04000818100E007000000004100000700000689 +:10F05000884100E0070060000000000000000000A0 +:10F0600000000000000000000000000000000000A0 +:10F0700000000000000000007E667C6000000000D0 +:10F080000000000000000000000000000000000080 +:10F09000000000000000000099C30F000000000005 +:10F0A0000000000000000000000000000000000060 +:10F0B0000000000000000000000000C30F990000E5 +:10F0C000000009C0F9C0090981E700000000000044 +:10F0D0000000000000000000000000000000000030 +:10F0E0000000000000000000000000000000000020 +:10F0F000000000000000000000003C007C600000F8 +:10F1000000000000000000000000000000000000FF +:10F110000000000000000000000099C30FFF000085 +:10F1200000000000000000000000000000000000DF +:10F13000000000000000000000000000FFC30F9965 +:10F140000000000009CFF9CF6F6F81E700000000D9 +:10F1500000000000000000000000000000000000AF +:10F16000000000000000000000000000000000009F +:10F17000000000000000000000000000000000008F +:10F18000000000000000000000000000000000007F +:10F19000000000000000000000000000000000006F +:10F1A000000000000000000000000000000000005F +:10F1B000000000000000000000000000000000004F +:10F1C000000000000000000000000000000000003F +:10F1D000000000000000000000000000000000002F +:10F1E000000000000000000000000000000000001F +:10F1F000000000000000000000000000000000000F +:10F2000000000000000000000000000000000000FE +:10F21000000004FF20FF00000000000000000000CC +:10F2200000000000000000000000C9C9C9C90000BA +:10F2300000000000000000000000000000000000CE +:10F24000D646D040000000001818FCC070737C7FC8 +:10F2500000000000C3C399C900000000FFFFFFFFCA +:10F26000000000000000000000000000000000009E +:10F27000000000000000000000000000000000008E +:10F28000000000000000000000000000000000007E +:10F290000000000004042020000000000000000026 +:10F2A000000000000000000000000000FF0FF00060 +:10F2B00000000000666600FF000000000000000083 +:10F2C0000000DF4FD94900000000DBDBFCC04043F9 +:10F2D0004C4F00000000939399C900000000000308 +:10F2E0004243000000000000000000000000000099 +:10F2F0000000000000000000000000610006000D9A +:10F300000000A00000000000000000610007800D68 +:10F31000000000610006000D000500000000000074 +:10F32000000000610006000D000000000000000069 +:10F3300000000571002F800D000500000000000096 +:10F340000000000000613007800D000005610A2FF9 +:10F35000850D00A105610A2E050D00A00561002F95 +:10F36000800D000000610006000D0000000000009C +:10F37000000000000000000000000000000000008D +:10F38000000000000000000000000000000000007D +:10F39000000000007F702F200535C5F5000000003B +:10F3A00000000000E1E1AAFF05510051000000004B +:10F3B0000000000000000000F328F3EB0000000054 +:10F3C00000000000000000000000151411103F3F75 +:10F3D000303000C382820000000000FFAAAA808AA9 +:10F3E000858FAA3C000000000000AABAAAAE000067 +:10F3F000000000000000000000000000000000000D +:10F4000000000000000000000000000000000000FC +:10F41000000000000000707020200535C5F50000D8 +:10F42000000000000000E1E10055F55DFF5D000017 +:10F4300000000000000000000000302830EB000059 +:10F44000000000000000000000000000D5D7DDDF54 +:10F45000BCBF1C1000C38282000000003C3CF0F0E6 +:10F46000D0DAD5DFF0F00000000000000030000C22 +:10F47000000000000000000000000000000000008C +:10F480005F0F7D3C00000000000000000000000055 +:10F4900000000000000000000FC355FFD7140C0C43 +:10F4A000000000000000000000000000D313D01096 +:10F4B000000000000000000000000000F434C4045C +:10F4C00000000000000000000000000000000AFA38 +:10F4D0000AFAAF057D7DA2B6E3F700000000000048 +:10F4E0000000C0CF0A0A8E8EC3FF0000000000009B +:10F4F000000000000000000000000000000000000C +:10F500000000550055000000000000000000000051 +:10F51000000000000000000000000FC35500D714D9 +:10F52000CFCF000000000000000000000000DF1F3F +:10F53000DC1C000000000000000000000000F737A5 +:10F54000C7070000000000000000000000000000ED +:10F5500030303F3FAF05282820346175000000009F +:10F5600000000000C0CFFAFA8E8E003C00000000C0 +:10F57000000000000000000000000000000000008B +:10F580000000000020000000000010000002080041 +:10F590002000100020910020C02020200400000046 +:10F5A0000000880020000004840002000000000029 +:10F5B00000004000200000000000000002000000E9 +:10F5C00000001000000300000011200020000000D7 +:10F5D000008082410080202000000000840420027E +:10F5E000000000008400A0000400000020050000CE +:10F5F0000000000084002000000000000400000063 +:10F600000400000020000000400000001000000482 +:10F61000000000000400402020C110010001000093 +:10F620000000000021000000000000000000400079 +:10F6300004000000040004000000000005000000B9 +:10F640000000412000000000090000000000000050 +:10F65000090000040040092000011002000000021F +:10F660004000000000000002004080000000000098 +:10F6700000000400000200000400000000000090F0 +:10F680002000400000020004000002000000001002 +:10F69000000000000200001002000000020000094B +:10F6A00002000000000002100000840000000010B2 +:10F6B000008000000010021002000800000000009E +:10F6C00020000804C0100480000002000241000075 +:10F6D0000000840020000000881083000340041014 +:10F6E000011005000100030001100200000090005D +:10F6F000041002000000001008400200000000009A +:10F700008210000002000010000000000000000055 +:10F710000000000800400000090000000000000098 +:10F7200000080000001000000008000000000000B9 +:10F73000050000100084000100000000000000002F +:10F740000484C0008001008200020000000000006C +:10F75000000003084100C184000800000400040107 +:10F7600083000408208420002008200800000000F6 +:10F77000020003880000000000840300000800006D +:10F7800000000008200804040408040888000000A1 +:10F790000000040000000000400002000000A02063 +:10F7A000C100C0000000A0009000200084020021E1 +:10F7B0000000000800008800000804000400004069 +:10F7C0000000A008C0008210000020000000880097 +:10F7D0000400820084418480828382800800840047 +:10F7E000C0008400C080000000080010C00040007D +:10F7F00088000800A000000300089000000000003E +:10F8000040000000C021040000009021000000889A +:10F8100000A00000080400000208004000044004AA +:10F8200040002000020000000000000000001190D5 +:10F830000084000005A0030000000000080005840B +:10F8400021C108200004082000A000008900000059 +:10F85000210004004000210009204020030403008F +:10F8600000900010000003200008108400000088B1 +:10F8700021200000009000000000000800000004AB +:10F8800000000000000000A00000000000000000D8 +:10F89000000000000000000000000000000408005C +:10F8A00000040411200200000811000008000820D4 +:10F8B00000000000820000008240080004400000B8 +:10F8C000A000002040050005100040008400084111 +:10F8D0000000000088000004C0000000A0840000B8 +:10F8E000C008000000050040C0200000000000002B +:10F8F00040000000000000100000000000000000B8 +:10F9000000000000000000000800000000020000ED +:10F910000000000000000888000000000000000057 +:10F9200000000000400090000000000008000000FF +:10F93000000000900000000000200300000003040D +:10F9400000000000404008C04110000040A00340FB +:10F950000004000000004000000000000000000261 +:10F9600000102001004000840000000000000000A2 +:10F970000090804000000000000000000000000037 +:10F98000084000000000000000000000000000002F +:10F990000000000000040000000000000200080059 +:10F9A000040004000000000000000000000000004F +:10F9B00000000002000082000000000082009000B1 +:10F9C000820000000000A00088000000830000000A +:10F9D0000080200000000820000088004000848093 +:10F9E0008300040041808408002000200000000003 +:10F9F00082000004828000410000000000009000AE +:10FA000000000000000000001000000000030000E3 +:10FA10000000004000000000210000000000200065 +:10FA20000000020000000000000400000084040246 +:10FA3000080005A0400000000000000008000300CE +:10FA4000080000000200000000900000088420046C +:10FA50004082200484880000040021040900000082 +:10FA600005042000830004040510038905C14182B8 +:10FA70000000000000010504002000000000030455 +:10FA8000000400000000030000000500000000006A +:10FA90004100000000200000000000000000000005 +:10FAA00010000800000000000000C000000000007E +:10FAB00000000000000800410000000000000000FD +:10FAC000C000080808000800880000008200000448 +:10FAD00082082000000808080000A00010000000B4 +:10FAE000400082410000008083000000900000057B +:10FAF00088002000008300100800000000200000A3 +:10FB000000000000000400000000000000000000F1 +:10FB100000000000000000000000000000000000E5 +:10FB200000000000000000002000000000000000B5 +:10FB3000000420000200000000000000000000009F +:10FB4000000000000000000003040000000021008D +:10FB500008000000A00200004040000005840000F2 +:10FB6000410002020004110000040800000000002F +:10FB70000000000080000004000000000000000001 +:10FB80000000000000000000000000000000000075 +:10FB90000000400000000000000000000000000025 +:10FBA00000000000000000000000000002020090C1 +:10FBB0000102C00200000000000000000000000080 +:10FBC000000000000800000000001000000000001D +:10FBD00000000000000001A09188008200000000E9 +:10FBE00000000000000001010500400000010000CD +:10FBF00000000000000001000000400000000000C4 +:10FC000000000000000000000000000000000000F4 +:10FC100000000000000000000000000000000000E4 +:10FC20000000000000000000000000000000008054 +:10FC300000000580800000000000000000000000BF +:10FC400000000000000000000000000000000000B4 +:10FC500000000000000000000800C00000000000DC +:10FC600000000000000000004010C00582030040BA +:10FC700020000000000000001100020091000000C0 +:10FC8000080000000000000000000000000000006C +:10FC90000000000000000000000000000000000064 +:10FCA0000000000000000000000000000000000054 +:10FCB000800080058020008000000000000000001F +:10FCC0000000000000000000000000200080000094 +:10FCD000800080008000000000050000001000008F +:10FCE0000000000000000000000010408200112011 +:10FCF00083218000800000000080000800000005D3 +:10FD00000000000000800000000000000000000073 +:10FD100000000000000000000000000000000000E3 +:10FD200000000000000000000000000000000000D3 +:10FD30000000040004000202A0080000000000000F +:10FD4000000000000000000000000000000000842F +:10FD500000840200020004002000000000000001F6 +:10FD600000000000000000000000000021219108B8 +:10FD7000090011411000029084008404000000007A +:10FD800000010020000000C0000000000000000092 +:10FD90000000000000000000000000000000000063 +:10FDA0000000000000000000000000000000000053 +:10FDB00000000000102000049008A0A00000000037 +:10FDC0000000000000000000000000000008000427 +:10FDD00000C0000800000000000000000201400018 +:10FDE000000085010000000000000000000000018C +:10FDF00021010900000100000000C0000000000116 +:10FE000004010201000000000000000000000000EA +:10FE100000000000000000000000000000000000E2 +:10FE200000000000000000000000000000000000D2 +:10FE30000000000000008000008000800000000042 +:10FE400000000000000000000000000000000000B2 +:10FE5000000000000080000000000000000080089A +:10FE60000011000510080000000000000000000064 +:10FE70004010020220400320050000008000000026 +:10FE80000010800280200503000000000000000038 +:10FE90000000000000000000000000000000000062 +:10FEA0000000000000000000000000000000000052 +:10FEB000000000000000000000048080000000003E +:10FEC0000000000000000000000000000000000032 +:10FED00000000000000000000000000000800000A2 +:10FEE0000010000000000000000000000000000002 +:10FEF000000041A1214121001005000000090080FF +:10FF000000000000000000000000000000090000E8 +:10FF100000000000000000000000000000000000E1 +:10FF200000000000000000000000000000000000D1 +:10FF30000000000000000000000088000220A088EF +:10FF40008800000000000000000000000000000029 +:10FF50000000880020004000100000000090000811 +:10FF60000000000000000000000000000000000091 +:10FF700000000000010500050184010000000020D0 +:10FF8000000200000000000000000000000000006F +:10FF90000000000000000000000000000000000061 +:10FFA0000000000000000000000000000000000051 +:10FFB000000000000000000000000000840A00E0D3 +:10FFC0000700000600000000000000000000000024 +:10FFD0000000000000000000000000000000000021 +:10FFE00000000000810000E00000000000000000B0 +:10FFF000000000000000600600E007004200004131 +:020000040014E6 +:10000000000007000006840000E00000000000413E +:100010000000070060000000000000000000000079 +:1000200000000000000000000000000000000000D0 +:100030000000000000000000000000000000F3D3FA +:10004000C3D33030BABA0000000000000000000046 +:10005000000000000000C3C35555A8E9BCFD000026 +:100060000000000000000000000000000000000090 +:100070000000000000000000000000000000000080 +:100080000000000000000000000000000000000070 +:100090000000000000000000000000000000000060 +:1000A0000000000000000000000000000000000050 +:1000B0000000000000000000000000000000000040 +:1000C000F0500050303030FF000000000000000011 +:1000D0000000000000000000FF000F0F80C194D559 +:1000E0000000000000000000000000000000000010 +:1000F0000000000000000000000000000000000000 +:1001000000000000000000000000000000000000EF +:1001100000000000000000000000000000000000DF +:1001200000000000000000000000000000000000CF +:1001300000000000000000000000000000000000BF +:100140000000FF1515155DFF0C0C000000000000FD +:10015000000000000000000000000000000000009F +:100160000000000000002034A2B63C0F3C0F00004D +:10017000000000000000000000000000000000007F +:10018000B200B2C300000000AF05AF0500000000E0 +:10019000000000000000000000000000000000005F +:1001A000000000000000000000000000000000004F +:1001B000000000000000000000000000000000003F +:1001C00000000000FF1010105D0C0C0C000000007F +:1001D000000000000000000000000000000000001F +:1001E00000000000000000006175E3F755FF55FFB7 +:1001F00000000000000000000000000000000000FF +:100200000000B23CB2FF000000007D7D2828000005 +:1002100000000000000000000000000000000000DE +:1002200000000000000000000000000000000000CE +:1002300000000000000000000000000000000000BE +:1002400000000000000000610027800D0000000099 +:10025000000000000000000000000000000000009E +:10026000000000000000000000000000000100612C +:100270000007800D000000000000000000000000EA +:1002800005610A2F850D00A005000A28050000A1C0 +:1002900000610007800D000000080A28000000002F +:1002A000000000000000000000000000000000004E +:1002B000000000000000000000000000000000003E +:1002C000000000000000000000000000000000002E +:1002D000000000000000000000000000000000001E +:1002E000000000000000000000000000000000000E +:1002F000000000003A3AF0FF00000000000000009B +:100300000000AF05EBEBFEFEAAAF0000000000000E +:100310000000000000000155015000000000000036 +:1003200000000000000000000000000000000000CD +:1003300000000000000000000000000000000000BD +:1003400000000000000000000000000000000000AD +:10035000000000000000000000000000000000009D +:10036000000000000000000000000000000000008D +:100370000000000000003A3A000F000000000000FA +:1003800000000000AF0541410202AAA000000000E9 +:100390000000000000000000FD55FD5F00000000AF +:1003A000000000000000000000000000000000004D +:1003B000000000000000000000000000000000003D +:1003C000000000000000000000000000000000002D +:1003D000000000000000000000000000000000001D +:1003E000000000000000000000000000000000000D +:1003F00000000000000000000000000000000000FD +:100400000000000000001E3C1E3C00FF0AFA000035 +:1004100000000000000000000000000000000000DC +:1004200000000000000000000000000000000000CC +:1004300000000000000000000000000000000000BC +:1004400000000000000000000000000000000000AC +:10045000000000000000000000000000000000009C +:10046000000000000000000000000000000000008C +:10047000000000000000000000000000000000007C +:1004800000000000000000000F0F2D2DA8ABA8AB4E +:10049000000000000000000000000000000000005C +:1004A000000000000000000000000000000000004C +:1004B000000000000000000000000000000000003C +:1004C00004000000000040000000880084000000DC +:1004D0002000000000008800048084800400008464 +:1004E0000400000004000000000000000000000004 +:1004F00020000000000020000400C084000040082C +:1005000000032000200020002005880001000000DA +:1005100000058800000000008200040000000000C8 +:100520000000000020002008200020020000002120 +:10053000000020008800880020100000000000005B +:100540000000200200202002000000000002000045 +:1005500000000082410000C00000A0200020000236 +:1005600020402000004000000000000000000000CB +:1005700000000000000200000000A0C0000505020D +:1005800021400000004080008090800000001000AA +:100590000002000000000000000000000000000059 +:1005A00000000002000000000000900000000000B9 +:1005B0000002000200000000009000002000000087 +:1005C00000020000000000000000000002000041E6 +:1005D0000000001008000010000089100909090837 +:1005E000001008000000000000008210020020003F +:1005F00002100210020000C082000210020020104F +:10060000010009020000018000100210401090401B +:1006100002000000031000000200000902100000A8 +:1006200000000000020000000000021000100400A2 +:1006300082000000004000400000040004000000B0 +:10064000000002100400000004000008050800007B +:100650000408000000000008000000002000040062 +:1006600008000000400000000000000800400000FA +:1006700002100000000005100040000020000000F3 +:100680008440040004010000401000000084804009 +:100690000008000002004000000000000008008880 +:1006A00020400400000000840200000000880008D0 +:1006B000001002000400008404000400000809087F +:1006C000000000000000000800001000080000000A +:1006D000040000000000A00004004000A000000092 +:1006E00000008800040004008400C000000000082E +:1006F00082008400400000000000000000000008AC +:10070000000800008200910000000000100000417D +:10071000000000008841400082210400C0008241A6 +:1007200008088200080000008208A0008200400043 +:1007300088000000820000009040000000000000DF +:100740000000080000000000001000100020000061 +:100750000000050000000300002000000000080069 +:10076000000011000000800090000008020003203B +:1007700000A003080000000004000000000009C001 +:1007800000024000000000000800000005902190D9 +:100790000908050005000000050000000000000039 +:1007A0000000080000000000000000000000000041 +:1007B0000000000000000400000000000000000035 +:1007C00000000000000000000000000082000000A7 +:1007D0000000084000040000C0090000821100046D +:1007E000C0200020840000000000104082000000B3 +:1007F00000000800A00008410800820082000000FC +:1008000000000000820409840840824000002000AB +:1008100000040802010084050000000982080800A5 +:10082000200000000002000002000000082000007C +:100830000400040409020400000000000400000099 +:100840000000900000000000000000000000000018 +:100850000040000000000000000020000000000038 +:1008600000000000000000880000000008040000F4 +:1008700000000300000000A0000000C010C0000045 +:10088000000000880000002020040000000000009C +:1008900080000000000020A0000400000000000014 +:1008A0000000000000000000000000400000000008 +:1008B00000000000000020010000000000004100D6 +:1008C00000000004400000000300000000000000E1 +:1008D000000000000000C000000000000000080050 +:1008E0000000400000008200004100000400000001 +:1008F00000000000000000000000000000000000F8 +:1009000000000000880800000000C080040004000F +:100910000000A00010040020000800110000820068 +:1009200000000000000000000000000000000000C7 +:1009300008000800000000000000000000000000A7 +:100940000000000000000000000082000000000025 +:10095000000000000020000008000000000000006F +:10096000000005904008000000A0009000008002F8 +:100970000000400000000000000010000004000023 +:100980000000000040000000000000900320898269 +:100990008084000000000901000004000000000045 +:1009A0000000030011000000008421000088000006 +:1009B00000000300032000004100000000000000D0 +:1009C0000090000000000000000000000000000097 +:1009D00000200000000000000000080000000000EF +:1009E000C0000000000000000000080000400000FF +:1009F00000000041080000000000000000000000AE +:100A000000000000400000000040820082008300DF +:100A100010000000000000040000000900080000B1 +:100A200000110000201100100000000000008200F2 +:100A300000000011000000000000000000000000A5 +:100A40000000000000000000000000000000840022 +:100A50000000000000000000000000000000000096 +:100A6000000000000300208400000000208400003B +:100A70000000000000000200000200C000000900A9 +:100A8000000011840482000011C040A0200000007A +:100A9000040000000000000000010200000000004F +:100AA0000000000000000000000000000000000046 +:100AB0000000000000000010000000000000000026 +:100AC0000000000000000000000000040000000022 +:100AD0000000000000000300000000000000000013 +:100AE0000000000000000000000000000000000006 +:100AF00000C08284000200820000000000000000AC +:100B000000000000000000000000000000000000E5 +:100B100009052083018482400000000001000000DC +:100B200000010000010010000000000000000000B3 +:100B300000000000000000000000000084008900A8 +:100B400000000000000000000000000000000000A5 +:100B50000000000000000000000000000000000095 +:100B60000000000000000000000000000000110074 +:100B700000000380000000800080000000000000F2 +:100B80000000000000000000000000000000000065 +:100B90000000A0C090080909802000000020210961 +:100BA0000203000800000200000000000000000036 +:100BB0000000000000000000000000000000100025 +:100BC0000300000000000000000000000000000022 +:100BD0000000000000000000000000000000000015 +:100BE0000000000000000000000000000000000005 +:100BF0000000000000000000000000800000000075 +:100C00000000000000000000000000008000000064 +:100C10000000000004001103A0C1A0050000200591 +:100C2000031011100809000000000000000000007F +:100C300000000000000000000000000000000000B4 +:100C400000000000000000000000000000000000A4 +:100C50000000000000000000000000000000000094 +:100C60000000000000000000000000000000000084 +:100C700000000000000000000090000000040000E0 +:100C80000000000000000000000000000000100054 +:100C900008000800020008909040A14184C00000B4 +:100CA00000200000018300000000000000000000A0 +:100CB0000000000000000000000000000000000034 +:100CC0000000000000000000000000000000000024 +:100CD0000000000000000000000000000000000014 +:100CE0000000000000000000000000000000000004 +:100CF0000000000000000000A00000008200A00032 +:100D000000000000000000000000000000000000E3 +:100D1000000000000000000090900091918402917A +:100D200000000001050001010101000000000000B9 +:100D300000010000000000000000000000000000B2 +:100D4000000000000001000101010000000000009F +:100D50000000000000000000000000000000000093 +:100D60000000000000000000000000000000000083 +:100D70000000000000000000200020000000000033 +:100D80000000000000000000000000000000000063 +:100D900000000000000000000000C0A0201105417C +:100DA000820500000008C00408210320000900405B +:100DB00000030041000000000000000000000000EF +:100DC00000000000004000100010081000000000AB +:100DD0000000000000000000000000000000000013 +:100DE0000000000000000000000000000000000003 +:100DF00000000000000800000000000000000040AB +:100E000000000000000000000000000000000000E2 +:100E1000000000000000008000000000802111821E +:100E200000214011000040101102A000A0080000A5 +:100E300000000000000000000000000000000000B2 +:100E4000000000000000000500000000000000009D +:100E50000000000000000000000000000000000092 +:100E60000000000000000000000000000000000082 +:100E70000000000000000000000000000000000072 +:100E80000000000000000000000000000000000062 +:100E9000000000000000000000C000100000082159 +:100EA00083A040018200000009A120010400030189 +:100EB0000000000000000000000000000000000032 +:100EC0000000000000000000000000000000000022 +:100ED0000000000000000000000000000000000012 +:100EE0000000000000000000000000000000000002 +:100EF0000000000000000000810000E00000000091 +:100F00000041000007000000000000000000000099 +:100F10000000000000000000000000000000410090 +:100F2000821100E0070000820000810000E0000064 +:100F300000000000000000000000000000000000B1 +:100F400000000000000000000000810000E0000040 +:100F50000000000000000000000000000000000091 +:100F60000000000000000000000000000000000081 +:100F70000000000000000000000000000000000071 +:100F80000000000000000000000000000000000061 +:100F90000000000000000000000000000000000051 +:100FA00000007E674264F0FF6C6C0000EF2FEC2CB9 +:100FB0000000000000000000000000000000000031 +:100FC0000000000000000000000000000000000021 +:100FD0000000000000000000000000000000000011 +:100FE0000000000000000000000000000000000001 +:100FF00000000000000000000000000000000000F1 +:1010000000000000000000000000000000000000E0 +:1010100000000000000000000000000000000000D0 +:10102000000000007E7F4240000F6C6C0000E32354 +:10103000E0200000000000000000000000000000B0 +:1010400000000000000000000000000000000000A0 +:101050000000000000000000000000000000000090 +:101060000000000000000000000000000000000080 +:101070000000000000000000000000000000000070 +:101080000000000000000000000000000000000060 +:101090000000000000000000000000000000000050 +:1010A0000000000000000000000000000000000040 +:1010B0000000000000000000000000000000000030 +:1010C0000000000000000000000000000000000020 +:1010D0000000000000000000000000000000000010 +:1010E0000000000000000000000000000000000000 +:1010F00000000000000000000000000000000000F0 +:101100000000000000000000063E06C700000000CE +:1011100000000000000000000000000000000000CF +:1011200000000000C09FC0900C0F060080BC83BF71 +:1011300000000000000000000000000000000000AF +:10114000000000000000000000000000000000009F +:10115000000000000000000000000000000000008F +:10116000000000000000000000000000000000007F +:10117000000000000000000000000000000000006F +:101180000000000000000000000006060606000047 +:10119000000000000000000000000000000000004F +:1011A000000000000000CF9FCF90CF0F9FFF80BCBA +:1011B00083BF0000000000000000000000000000ED +:1011C000000000000000000000000000000000001F +:1011D000000000000000000000000000000000000F +:1011E00000000000000000000000000000000000FF +:1011F00000000000000000000000000000000000EF +:101200000000000000610007800D000005005A2862 +:10121000050000A000000000000000000000000029 +:1012200000000000000000000000000185610A2CA1 +:10123000850D00A0000000610007800D0000006126 +:101240000006000D0000000000000000000000008B +:1012500000000000000000610007800D0000000099 +:10126000000000000000000000000000000000007E +:10127000000000000000000000000000000000006E +:10128000000000000000000000000000000000005E +:10129000000000000000000000000000000000004E +:1012A0000000000000000000000000000000C3007B +:1012B000C3000FCF3FFF00005F7D0A7DCF0CC3004E +:1012C00000000000A0BC0A3E00000000000000007A +:1012D000000000000000000000000000FCFCA0AFC7 +:1012E00000000000000000000000000000000000FE +:1012F00000000000000000000000000000000000EE +:1013000000000000000000000000000000000000DD +:1013100000000000000000000000000000000000CD +:1013200000000000000000000000000000000000BD +:10133000FF14FF1400C030F000005F280A28CF0C13 +:10134000FF3C00000000003C003C000000000000EA +:1013500000000000000000000000000000000C0C75 +:10136000A0AF00000000000000000000000000002E +:10137000000000000000000000000000000000006D +:10138000000000000000000000000000000000005D +:10139000000000000000000000000000000000004D +:1013A000000000000000000000000000000000003D +:1013B00000007F3E6B2A3C3C00FF0000828230F33D +:1013C000C1E9D5FD000000000000000000000000A1 +:1013D000000000000000000000000000000000000D +:1013E00000000000000000000000000000000000FD +:1013F00000000000000000000000000000000000ED +:1014000000000000000000000000000000000000DC +:1014100000000000000000000000000000000000CC +:1014200000000000000000000000000000000000BC +:101430000000000057164302AAAAF0F00000BEBE4A +:1014400030F380A894BC0000000000000000000001 +:10145000000000000000000000000000000000008C +:10146000000000000000000000000000000000007C +:10147000000000000000000000000000000000006C +:1014800020002000000040000000200000000000BC +:101490000000000020112002200400402000000075 +:1014A000008020410000400000000000000000001B +:1014B0000002000000000000000000040000000224 +:1014C000A0000000A000000040001000400040000C +:1014D000400088000000000004000400000000003C +:1014E000C00000000000000404000000040004002C +:1014F0002000200000002000040020000200040062 +:1015000040000000090000000084000000200000EE +:1015100000000000000000C04000000000000400C7 +:10152000000000100040002020000000000000002B +:10153000000009040082000000000000009040024A +:101540000000000200000002000220C04100000074 +:101550000002000040000000000000A000020000A7 +:101560000002000040000000000200004000800077 +:1015700000400000000021008000900000908000EA +:1015800080200000000000000010020000000000A9 +:101590000010020002000000401082400000001015 +:1015A00082000000001000000200000000000000A7 +:1015B00000020000020002004010020000000000D3 +:1015C00000100000000000000010041000000200E5 +:1015D00000000010020002410200021002000000A0 +:1015E00000100010C000000000000010000090007B +:1015F000002000C002000200020004C0000003003E +:1016000000000408000000000000040004000000C6 +:101610000000000000888000000080000000000042 +:1016200000000010000000010000000000000800A1 +:10163000021000010000000000008401000800000A +:10164000000000C0000000000000000000040400D2 +:1016500000000040000800000000000004080082B4 +:1016600000000000028404000400000004400000A8 +:1016700004000409002000000000000000044100F4 +:101680000200000800400000080000000000040004 +:1016900000001008000084008800080000000040DE +:1016A0000000000010000000002100000040C00009 +:1016B000C000000000000002004100000000100017 +:1016C0004000000000080000000000004000A000F2 +:1016D0000000040040088800000000000000000036 +:1016E000C000000000000000080000000000000032 +:1016F0000800080000000008100088000000000832 +:1017000002000000000000000800002000000000AF +:1017100008004100000041004100000000000000FE +:10172000048200000000000000000800002000000B +:1017300000000000000000004100400000004000E8 +:101740000800000003A0080800004002000040005C +:1017500000000082000000000000000000C0000047 +:101760000000000000000000000000000000000079 +:101770000000000800000000000021000000000040 +:101780000000080000004000000000000000000011 +:101790000840000000000000000008008411004024 +:1017A0008400A000C0000000000000000800C0008D +:1017B00040090004000008080008000000100000B4 +:1017C0000040000000000005000000000009A040EB +:1017D0000040000800001004A000004000000000CD +:1017E0000004000000110000820000000000000062 +:1017F000040400000000080008000800A000000029 +:1018000000200000020083000400020000400000ED +:101810000000100000000000000000000000009028 +:101820000000004000000000000000000000000078 +:10183000000000080040000020000000000021001F +:101840000000000011000000030000000000000084 +:1018500000100000004000820000000000000000B6 +:101860000000000020000000000000000008000050 +:101870000000000000A000000000001000000000B8 +:101880000000000000008000040080108000C00004 +:101890000000040000000000C000000090000000F4 +:1018A0000000080000000008000090001000000088 +:1018B0008200C00040200000C000000000000000C6 +:1018C0000041000000000000000000000041000096 +:1018D0000000000000000000000000000000000008 +:1018E00000000200000000030000000000080000EB +:1018F0000000000000000000000000000100008067 +:101900000000000082000000000000000000000055 +:1019100000000000000000000000000000000000C7 +:1019200040880000000000000800000000000000E7 +:1019300000000000000000000000000000000000A7 +:1019400000000300000000900800080009042104C2 +:10195000000040042104000000841020000000006A +:101960000000000000000000000000000020000057 +:101970000000400421000800008400000000040072 +:101980000020000000000000000000000000000037 +:101990000000004000000000000000000000900077 +:1019A000000084000000000000000003C040004070 +:1019B0000040820082000000840088008200C00095 +:1019C00000000003000000000800000008000021E3 +:1019D00008000000000000000840000000000000B7 +:1019E0000000000200000000000000000000820073 +:1019F000000000000800000000000000A00000003F +:101A000000000002A0000000000000000000000034 +:101A100000000000000000000000000000000000C6 +:101A200000040800000002A0080000000000000000 +:101A3000000000080000000000000000000000405E +:101A4000000000000000000400000008000000008A +:101A500000400000000000C0400020000000000026 +:101A60000000000000040000000000000000000072 +:101A70000000000000000000000000000000000066 +:101A80000000000000000000000000000000000056 +:101A90000000000000000000000000000000000046 +:101AA000000000000000A1C003208885820400001F +:101AB00000000000000002A0000400C0C0200000E0 +:101AC000000190000000A0A005A00485820900008C +:101AD0000000000000000000000000000000000006 +:101AE00000000000000000000000000000000000F6 +:101AF00000000000000000000000000000000000E6 +:101B000000000000000000000000000001000000D4 +:101B100008C0000200A0000000000000000000005B +:101B20000000000000000000840908090002802075 +:101B300000000000000000000080008000000000A5 +:101B4000000940080004000280041008802080047E +:101B50000000000000000000000000000000000085 +:101B60000000000000000000000000000000000075 +:101B70000000000000000000000000000000000065 +:101B80000000000000000000000000000000400015 +:101B90000000208000800000000000000000000025 +:101BA000000000000000000000001080210382837C +:101BB0008020000000000000000000000003800002 +:101BC0000000400021002000110808002108888042 +:101BD00008100010000000000000000000000000DD +:101BE00000000000000000000000000000000000F5 +:101BF00000000000000000000000000000000000E5 +:101C000000000000000000000000000000000000D4 +:101C10000000000000000021000080000000000023 +:101C200000000000000000000000000021409101C1 +:101C3000A0404020000000080000000090000000CC +:101C4000A0880400009001000000000111C089007C +:101C5000A0202000000100000000000000000000A3 +:101C60000000000000000000000000000000000074 +:101C70000000000000000000000000000000000064 +:101C800000000000000000000000000000900000C4 +:101C9000000000000000200000000000C000000064 +:101CA0000000000000000000000000000000C090E4 +:101CB00000A1000108020000000000000000200454 +:101CC00000020040880400000000010100000890AC +:101CD00001A0084182900000000000000000000008 +:101CE00000000000000000000000000000000000F4 +:101CF00000000000000000000000000000000000E4 +:101D00000000000000000000000000004000000093 +:101D1000000000000000010020200000009000C032 +:101D200000000000000000000000000000000000B3 +:101D300080202090052100400000000000000000ED +:101D40000000008000800000000521030221000542 +:101D50000020038840214010000000000000000027 +:101D60000000000000000000000000000000000073 +:101D70000000000000000000000000000000000063 +:101D80000000000000000000000000000000000053 +:101D90000000000000000000020000000000000041 +:101DA00000800000000000000000000000000000B3 +:101DB00000002080048009000908000000000000E5 +:101DC000000000400000000080002083200520006B +:101DD00003038880C080C080204100000000000014 +:101DE00000000000000000000000000000000000F3 +:101DF00000000000000000000000000000000000E3 +:101E000000000000000000000000000000050004C9 +:101E10000000000000050000000000008005000236 +:101E200000000000000000000000000000000000B2 +:101E30000000000020A0A110A090100100000000F0 +:101E400000000000900010020840A00001A0010066 +:101E50000100000104A040040904C00100000000CA +:101E60000000000000000000000000000000000072 +:101E70000000000000000000000000000000000062 +:101E80000000000000000000000000000000000052 +:101E90000000000000000000000000000000C00082 +:101EA00084408240000000000000000000000000AC +:101EB000000000000000000000000000880000009A +:101EC0000000000000000000000000000000000012 +:101ED00000000000000000000000000000110000F1 +:101EE00000000000000000000000000000000000F2 +:101EF00000000000000000000000000000000000E2 +:101F000000000000000000000000000000000000D1 +:101F10000081000007000000810000E000000000D8 +:101F20000081000007000000000000000000000029 +:101F300000000000000000000F0F55554D4D4D4DA5 +:101F40000000000000000000AF0CAFFC30FA3FFAC8 +:101F5000000000000000000055C355C328302830A1 +:101F60000000000000000000000000000000000071 +:101F70000000000000000000000000000000000061 +:101F80000000000000000000000000000000000051 +:101F90000000000000000000000000000000000041 +:101FA00000000000000000C382820000000000006A +:101FB00000000000000000000000FF00C3C300009C +:101FC000FFFF0000000000000000A00CA0FC300A91 +:101FD0003F0A0000000000000000FF0F000F3C3C23 +:101FE00000000000000000000000000000000000F1 +:101FF00000000000000000000000000000000000E1 +:1020000000000000000000000000000000000000D0 +:1020100000000000000000000000000000000000C0 +:1020200000000000F0F000FF00C38282000000000A +:10203000000000000000000000000000F0C3F0C33A +:10204000FDCD3D0D0000000000000000C7040404A9 +:102050007D287D28000000000000000000C33CFF38 +:102060004141EBEB00000000000000000000000018 +:102070000000000000000000000000000000000060 +:102080000000000000000000000000000000000050 +:102090000000000000000000000000000000000040 +:1020A000000000000000000000004141C3C3000028 +:1020B000000000000000000000000000000000AA76 +:1020C000FFAAF1C131010000000000000000C7C7F5 +:1020D00004C77D7D28280000000000000000B2B287 +:1020E000B2B25505FFAF0000000000000000000084 +:1020F00000000000000000000000000000000000E0 +:1021000000000000000000000000000000000000CF +:1021100000000000000000000000000000000000BF +:102120000000000000000000FF000F0F4141000010 +:10213000000000000000000000000000000000009F +:1021400000610006000D000100000000000000001A +:10215000000000000000000000610006000D00000B +:1021600000610006000D00000000000000000000FB +:10217000000000000000000000000000000000005F +:10218000000000000000000000000000000000004F +:102190000000000000000000000000000028050012 +:1021A00000A000610007800D000010002028004002 +:1021B0000008000000000000000000000000000017 +:1021C00000000F0F3C3C707C404C00000000000001 +:1021D00000000000000000000000EFAEC786A0AFC6 +:1021E0000000AA00C3F0A4F5AEFF0000000000004C +:1021F00000000000000000000000000000000000DF +:1022000000000000000000000000000000000000CE +:1022100000000000000000000000000000000000BE +:1022200000000000000000000000000000000000AE +:10223000000000000000000000000000000000009E +:10224000000000005555FF00737F434F0000000061 +:102250000000000000000000000000006D2C45049C +:10226000C3C30000AAFFC3F004550E5F00000000C6 +:10227000000000000000000000000000000000005E +:10228000000000000000000000000000000000004E +:10229000000000000000000000000000000000003E +:1022A000000000000000000000000000000000002E +:1022B000000000000000000000000000000000001E +:1022C000000000000000EFC76D45550355030000F6 +:1022D00000000000000000000000000000001EFFE1 +:1022E0001E55FF3CCB08F0C3F0C3001E00140000D5 +:1022F00000000000000000000000000000000000DE +:1023000000000000000000000000000000000000CD +:1023100000000000000000000000000000000000BD +:1023200000000000000000000000000000000000AD +:10233000000000000000000000000000000000009D +:102340000000000000000000AE862C04553F553F01 +:10235000000000000000000000000000000000007D +:102360001EAA1E00FF3CDF1C00AAFFAA001E00BE22 +:10237000000000000000000000000000000000005D +:10238000000000000000000000000000000000004D +:10239000000000000000000000000000000000003D +:1023A000000000000000000000000000000000002D +:1023B0000000000000000000000020002000840059 +:1023C0000000C0020000000000000000000000004B +:1023D0001000880000000000400000000000200005 +:1023E00004000000000000000002002100000000C6 +:1023F0000000C00000000000000000028400000097 +:102400002000000088000000000004000000000020 +:10241000000000000000880088000000200000008C +:10242000400000000000000000002000000000004C +:102430000000000000000000200000040020000058 +:102440000000000000C10000000204400000000085 +:102450004000000040000000000008C00000000034 +:102460000000000000000000090010044000090006 +:1024700000000000009000000000000200000000CA +:1024800000C000000040000000A0000200900040DA +:1024900000900000000000000000000000020000AA +:1024A0000000000000200000000000020002000008 +:1024B0000000000000000000100000020002000008 +:1024C000000000000840820000000800908000002A +:1024D0000200000002100200000008000841020093 +:1024E00002100200001000000210020002100200A0 +:1024F000021008800000C000020000400800000038 +:1025000000000000000000020000000000000000C9 +:102510000000000008000800020000000400021093 +:10252000000002000200020002000200001002008F +:102530000000000800080210000004100400000061 +:1025400000000010008400000000001000000040A7 +:102550000000000000000400000000400000000037 +:10256000000000004000000004000400000800001B +:1025700000000000000200820000000000000008CF +:10258000000000080000000800010200040000082C +:102590000000000000000008000000000000000033 +:1025A00004880010000021880000040004000008D6 +:1025B0000008041000000088000000000000000077 +:1025C000000000000000000000000000000000000B +:1025D0000002000088000008000000000021000543 +:1025E00000410408000000000000000000208200FC +:1025F000000000008200A000000040000000000079 +:1026000090000000000040000000080000000000F2 +:102610001000000800080000001100000000000089 +:102620000000000000000000880000000000000022 +:1026300000000000000000000020900000000000EA +:102640000000000000000000000000004000050045 +:102650000000090104000000000000000500000067 +:102660000000032000000000040000000800000239 +:102670000000030005000000000000200010000022 +:10268000000400A000000000100000000000009006 +:102690000000000000000000000000000000080032 +:1026A0000000000000000008000000000000000022 +:1026B00000000000000021000000000000000000F9 +:1026C00000000000000000000040000000001000BA +:1026D0000040900084110000000000000000000095 +:1026E00000008200084008000800000000400000D0 +:1026F000000000000000000000008800000008400A +:102700000004100000410000002000000000000054 +:102710000000840004000000000000000000000031 +:102720000000000000000000004000000004000461 +:102730000000000000000000000000000000000099 +:102740000000000000000000000000000000000089 +:10275000000008001100000011000000200020000F +:10276000009000200000000005C0000000000000F4 +:1027700000000000030004000000050000900010AD +:102780000000002000000040000000A000900310A6 +:102790000010000400400200028400200000000835 +:1027A00000400000000000000000000000000000E9 +:1027B0000000000000000000000000000000000019 +:1027C0000000000000000000000000008400000085 +:1027D00000000000000000080000002100000000D0 +:1027E00000000000000000000000000000000000E9 +:1027F000000000000000820000000000200000082F +:10280000080000000000C0000800000000001000E8 +:1028100000000000000000000000000000000000B8 +:1028200000000000000000000000000000000000A8 +:102830000000000000000000000000000000000098 +:102840000000000000000000000000000000000088 +:102850000000000000000000000000204088002070 +:102860000904058400000000002000002190000001 +:10287000008840000088040000044090030000200D +:102880002000090000000900000004000000000012 +:102890000000000000000000000003000000000035 +:1028A0000000000000000000000000000000000028 +:1028B00000000000000000000000210000001000E7 +:1028C0000000000000000000080000000000A00060 +:1028D00008000000000000000000000000000000F0 +:1028E00000090011000808000000000000080000B6 +:1028F000000000080000000000008200000000004E +:10290000000000000000000040008400880000007B +:102910000000000000000140000000000000000076 +:102920000000000000000041000000000000000066 +:102930000000000008000000080000000000000087 +:102940000000000000000000000000000000000087 +:102950000000000005000004021021002000008497 +:102960000004040402000000000000000000000059 +:1029700000000000000000000000000400900000C3 +:102980000090030040400000410400C0200020846B +:1029900000000200000000400420419000002000E0 +:1029A00020000000004000002000000000000000A7 +:1029B00020020000000000000000000000000000F5 +:1029C0000000000000000000000000000000000007 +:1029D0000000000000000000000000020009A0A1AB +:1029E0000282000000000000000000000000000063 +:1029F00000000000000000000000000000000000D7 +:102A0000000000008800000000000000000000003E +:102A1000000000000000000088010000000000002D +:102A200000000000000000000000000000000000A6 +:102A30000000000000000000000000000000000096 +:102A40000000000000000000000000000000000086 +:102A50000000000000000000000000000891058850 +:102A600000A00008000000000000000000000000BE +:102A70000000000000000000000000000000000056 +:102A80000000000000000000000000000000000046 +:102A90000000000000000020030800020008000001 +:102AA0000000000000000000000000000000000026 +:102AB0000000000000000000000000000000000016 +:102AC0000000000000000000000000000000000006 +:102AD0000000000000000000000000000000800076 +:102AE00000898000000000000000000000000000DD +:102AF00000000000000000000000000000000000D6 +:102B000000000000000011000300020003000000AC +:102B10000000000000000000200021000300200849 +:102B200000000000000000000000000000000000A5 +:102B30000000000000000000000000000000000095 +:102B40000000000000000000000000000000000085 +:102B50000000000000000000000000000000000075 +:102B60001000202084020208000000000000000085 +:102B70000000000000000000000000000000000055 +:102B80000000000000000000000000000100010043 +:102B90000000000000000000000001200100000013 +:102BA0000002000000000000000000000000000023 +:102BB0000000000000000000000000000000000015 +:102BC0000000000000000000000000000000000005 +:102BD00000000000000000000000000000000000F5 +:102BE000000088900010000908A00000000000000C +:102BF00000000000000000000000000000000000D5 +:102C000000000000000000000000000000000000C4 +:102C100000000000000000000000000000010100B2 +:102C200000010001000000000000000000000000A2 +:102C30000000000000000000000000000000000094 +:102C40000000000000000000000000000000000084 +:102C50000000000000000000000000000000000074 +:102C600000000000000805840284088900000000BC +:102C70000000000000000000000000000000000054 +:102C80000000000000000000000000000000000044 +:102C90000000000000000000000000000000001024 +:102CA00020050521001000000000000000000000C9 +:102CB0000000000000000000000000000000000014 +:102CC0000000000000000000000000000000000004 +:102CD00000000000000000000000000000000000F4 +:102CE00000000000000080008000000000000000E4 +:102CF00000000000000000000000000000000000D4 +:102D000000000000000000000000000000000000C3 +:102D10000020000000030000000000000000000090 +:102D200004900440040005000000000000000000C2 +:102D30000000000000000000000000000000000093 +:102D40000000000000000000000000000000000083 +:102D50000000000000000000000000000000000073 +:102D6000000000000000000004008288209088001D +:102D70000000000000000000000000000000000053 +:102D80000000000000000000000000000000000043 +:102D900000400000000000010000000000000000F2 +:102DA000000000A101000100000000000000000080 +:102DB0000000000000000000000000000000000013 +:102DC0000000000000000000000000000000000003 +:102DD00000000000000000000000000000000000F3 +:102DE00000000000000000000000000000000000E3 +:102DF00000000000000000000000000000000000D3 +:102E000000000000000000000000000000000000C2 +:102E100000000000000000000000000000000000B2 +:102E2000000000000081000007000000000000001A +:102E30000000000000000000000000000000000092 +:102E40000000000000000000000000000000000082 +:102E50000000000000000000000000000000000072 +:102E60000000000000000000000000000C060C063E +:102E7000F3FF30FF00000000000000000000000031 +:102E80000000000000000000000000000000000042 +:102E90000000000000000000000000000000000032 +:102EA0000000000000000000000000000000000022 +:102EB0000000000000000000000000000000000012 +:102EC0000000000000000000000000000000000002 +:102ED00000000000000000000000000000000000F2 +:102EE00000000000000000000000000000000F00D3 +:102EF0000000F300300000000000000000000000AF +:102F000000000000000000000000000000000000C1 +:102F100000000000000000000000000000000000B1 +:102F200000000000000000000000000000000000A1 +:102F30000000000000000000000000000000000091 +:102F40000000000000000000000000000000000081 +:102F50000000000000000000000000000000000071 +:102F60000000000000000000000000000000000061 +:102F70000000000000000000000000000000000051 +:102F80000000000000000000000000000000000041 +:102F90000000000000000000000000000000000031 +:102FA0000000000000000000000000000000000021 +:102FB0000000000000000000000000000000000011 +:102FC0000000000000000000000000000000000001 +:102FD00000000000000000000000000000000000F1 +:102FE00000000000000000000000000000000000E1 +:102FF00000000000000030303F3F000000000000F3 +:1030000000000000000000000000000000000000C0 +:1030100000000000000000000000000000000000B0 +:1030200000000000000000000000000000000000A0 +:103030000000000000000000000000000000000090 +:103040000000000000000000000000000000000080 +:103050000000000000000000000000000000000070 +:103060000000000000000000000000000000000060 +:1030700000000000002D992D606F606F00000000BF +:103080000000000000000000000000000000000040 +:103090000000000000000000000000000000000030 +:1030A0000000000000000000000000000000000020 +:1030B0000000000000000000000000000000000010 +:1030C0000000000000000000000000000000000000 +:1030D00000000000000000000000000000000000F0 +:1030E00000000000000000000000000000000000E0 +:1030F00000000000000000613006000D000000002C +:1031000000000000000000000000000000000000BF +:10311000000000000000000000000000000000614E +:103120000006000D0000000000000000000000008C +:103130000061002E000D00A0000000000000000053 +:10314000000000000000000000000000000000007F +:10315000000000000000000000000000000000006F +:10316000000000000000000000000000000000005F +:10317000000000000000000000000000FF55AA0051 +:10318000000000000000000000000000000000003F +:10319000000000000000000000000000000000002F +:1031A000000000000000000000000000000000001F +:1031B0000000AFAF0505E0E000C000000000000027 +:1031C00000000000000000000000000000000000FF +:1031D00000000000000000000000000000000000EF +:1031E00000000000000000000000000000000000DF +:1031F00000000000000000000000000000004B4B39 +:103200004B4B000000000000000000000000000028 +:1032100000000000000000000000000000000000AE +:10322000000000000000000000000000000000009E +:1032300000000000BE14BE14202000C000000000EA +:10324000000000000000000000000000000000007E +:10325000000000000000000000000000000000006E +:10326000000000000000000000000000000000005E +:10327000000000000000000000000000FD5DAD0D3A +:10328000000000000000000000000000000000003E +:10329000000000000000000000000000000000002E +:1032A0000000000000000000ACACACAC000000006E +:1032B000000000000000CFCF7D413CFF30F3000054 +:1032C00000000000000000000000000000000000FE +:1032D00000000000000000000000000000000000EE +:1032E00000000000000000000000000000000000DE +:1032F0000000000000000000000000000000F8587E +:10330000A80800000000000000000000000000000D +:1033100000000000000000000000000000000000AD +:103320000000000000000000000000F00FFF00009F +:1033300000000000000000000C0C7D4100C330F3D1 +:10334000000000000000000000000000000000007D +:10335000000000000000000000000000000000006D +:10336000000000000000000000000000000000005D +:1033700000000000000000000000880000000000C5 +:1033800089000000020088000000200020002100C9 +:103390000500000000000000880088008800A000F0 +:1033A000882000040000418000000000200020026E +:1033B000208089000100018000030000210400003A +:1033C0000000200000000004000088000100200030 +:1033D0000020200020000000C08000402000880065 +:1033E0000200200000000000000020000400000097 +:1033F000040400000400040020000000000000A0FD +:103400000000040400C000A02100000000900000A3 +:1034100020901000000000000000000000000000EC +:103420000000410100010090040400000000004081 +:103430000000A0040400209020040000219004015A +:1034400000000000000000000001000000A00420B7 +:1034500000000091002040000000002021400000FA +:1034600000000000000000000090000000000000CC +:10347000000000400000000000900000000002007A +:1034800000000800080000000000008002000004A6 +:1034900002000400020000004000021000000000D2 +:1034A000000008000000C0000409001002009000A5 +:1034B0000880901002404100040008000000020053 +:1034C00000000080080000000280001000100200D0 +:1034D000020000000010020000800200080002004C +:1034E000000000000800020000000000044000008E +:1034F00000002000000000000200000000000000AA +:103500000500008400000000000000002002000808 +:1035100000110004000000A0000880000500000069 +:1035200000000008000000080008800041000008BA +:103530000000001000048000C040000000000000F7 +:10354000000000000004040400080020000002083D +:1035500000080000008200080000002000000008B1 +:103560000000000000000008000800000908000832 +:103570000040000000080008000800000008008467 +:1035800000200000000800000000000800100000FB +:1035900004000000000800000200040000000021F8 +:1035A00000000000000040080000000000000008CB +:1035B0000000400040008408008088000100904125 +:1035C0000000080040008405000000210000A00861 +:1035D0000040000300400000000000080004000854 +:1035E00000408203A0000000004000000000000036 +:1035F000001000000000C000000208000000A01041 +:103600000000100005000000400000000000000065 +:103610004000080000000000000011000000000051 +:10362000000000000000000000000500210008006C +:1036300000002100000420000000410200080400F6 +:103640002108000000002100000000000000000030 +:10365000000000000000000000000000000000006A +:10366000000000000000000000000000000000005A +:103670000000000000000000000000010000000049 +:1036800000000000080040000000040020100002BC +:103690000000040082000400A0000000820000007E +:1036A000C00082000000100000000000A0008400A4 +:1036B000820000401002080200020004880084001A +:1036C0004000008000008811C010080000000000C9 +:1036D0000000C0001080850000000200000000040F +:1036E0000000C000000000000000000000200000FA +:1036F0000000002100000400000000040040000061 +:103700000010A0030010000000000800030080016A +:10371000000100000000030080880000000000009D +:103720000000000000000000000000000000210078 +:103730000000000000000001004100004000000007 +:10374000000080880010000008C00310080400007A +:1037500000000000000000042000000021840000A0 +:103760002100210000000000000000000000000017 +:103770000000000000000000000000000800000041 +:1037800000000000210000080800A00000008200E6 +:103790000400000000008400000008000000C008D1 +:1037A000000000000000084000000000C00004000D +:1037B0000000008008000000A00040000008A004F5 +:1037C00084008400C0040080000000004004000069 +:1037D000C041010500000003000000000004400893 +:1037E0000804000000000000000440000000000089 +:1037F0000000000000008200C04000000000000047 +:1038000000000000080000000000000000000000B0 +:10381000000080080004410240000300094000004D +:103820000000000000000000000021000000000077 +:103830000020000000200000000000000000400404 +:103840001000080000000000002000000800000038 +:103850001000080820000000000000000000000028 +:103860000300000000000000000000000000100045 +:103870000000000000000000000000000000000048 +:1038800000000004000000000000000088000009A3 +:103890000000000000000000080084000000000498 +:1038A0000002000008000000000000008200080084 +:1038B00010002000080000000000840000008211B9 +:1038C00084008400820020808421400800000800D9 +:1038D000C00084001000A040000040410800A00388 +:1038E00084000002400000000800001000210000D9 +:1038F000000000040021000000000000C0000000E3 +:1039000000000800000000000800000000000000A7 +:103910000000000020000088000000840300000078 +:103920000000000000000000000000000000000097 +:1039300002000000000000000000000008000088F5 +:103940000004000000000800840202008201000060 +:103950000000020000040000000000000000004021 +:103960000000000000000000042000000000000033 +:103970000000000002000000000000000000000045 +:103980000000000000002100000000000000000016 +:10399000000000000000000000000000080000001F +:1039A0000000000003010000000000000000000013 +:1039B0000000000000000000859100900985209023 +:1039C00010010000000010000401A001200190017E +:1039D000000002852008010090018802040421A053 +:1039E0009084000210400088820408A0000000A01B +:1039F000400800000000000000000000000000007F +:103A00000000000000009000000000000000000026 +:103A10000000000000000000000000001100900005 +:103A20000000400411089040002000000000000049 +:103A3000000000000000000000001010410310888A +:103A4000000280080003000200204008A04004118A +:103A5000000800008541000810110040008985859C +:103A6000109000080500800005808080088000001C +:103A70000000000000000000000000000000000046 +:103A80000000000000001000000000000000000026 +:103A90000000000000000000000000000083002083 +:103AA000008000082000100008001005030004003A +:103AB000020041000000000000000000020021217F +:103AC00005844020008000000000001008118500DF +:103AD0008304C0A00000830083C100218405C100CD +:103AE0002105822003418040001100000000800079 +:103AF0000021000080000000000000000000000025 +:103B0000000000000000200010001000080000006D +:103B1000000000000000000000000000000000C0E5 +:103B20000001000200010108004000000100000047 +:103B30000000010001000000000000000000908271 +:103B400090000005208400100000000000002120EB +:103B500010400501910300000802040204038300E1 +:103B6000080805400400A1018800400088A0C000AA +:103B70008800C000201004000000000000000000C9 +:103B80000000000000000000000001000100000033 +:103B90000000000000000000000000000000000025 +:103BA000000100010201010000000101010100010A +:103BB0000000000000000000000000000000000005 +:103BC000009100910001209000A00140820800C0F7 +:103BD0000002918390900089000002020188890010 +:103BE00000A01008010300020510902000900000C2 +:103BF0000888020200080008081000000000000009 +:103C000000000000000000000000000000000001B3 +:103C1000000000000000000000000500000000009F +:103C20000000052000038008200200080240052152 +:103C3000400800000000000000000000000000003C +:103C400000000002030305212005000020800880F9 +:103C500020000010200540910808000000000480AA +:103C6000A000000080C00490114084820000000089 +:103C70000000820080800000008000000000000042 +:103C80000000000000000000000000000008000329 +:103C900000210010000000000000000000000000F3 +:103CA00000000000C00090400800020008880421C5 +:103CB00004000208000000000000000800000000EE +:103CC0000000000021850890400040040800030027 +:103CD000090040804120212020004008000003A16D +:103CE000211085801108C0058210088090040020F2 +:103CF0000021008000000005000500008000000099 +:103D00000000000000000000000000000000008033 +:103D10000000000000200000000000000000000083 +:103D200000000000000011000901A000900000A1A7 +:103D300000000100000100820000000000010000FE +:103D4000000000000000911088092190010000008F +:103D500001000000010801080005009000010000BA +:103D6000024188210402900108A082C12108A0001C +:103D70000800000884840000080008408808080043 +:103D80000000000000000000000000000000000033 +:103D90000002000000000000000000000000000021 +:103DA0000000000000000000002100E007006000AB +:103DB000880000E007000000000000000000000094 +:103DC0000000000000000000818100E0070000000A +:103DD0000000000000000000884100E00700000033 +:103DE0000000884100E007000000818100E007003A +:103DF000000A884100E00700000000810000070081 +:103E000000000000000000000000000000000000B2 +:103E100000000000000000000000000000000000A2 +:103E200000000000000000000000A8BCE9FD000048 +:103E30000000000000000000000000000000000082 +:103E40000000000000000000000000000000000072 +:103E50000000000000008C8FBCBF0000000000FFCD +:103E6000AAAA0000FFFFFFFF4040404000FF00FF04 +:103E70003707F7C75555FFFFFFFF3C3C030303031C +:103E800004142C3C000000000000000000000000B2 +:103E90000000000000000000000000000000000022 +:103EA0000000000000000000000000008094C1D568 +:103EB0000000000000000000000000000000000002 +:103EC0000000000000000000000000000000000AE8 +:103ED00000008080000000008083B0B3000000007C +:103EE000F0F03C3C00003C0C2C2C00004141C3C3D2 +:103EF000C0C03404F4C40F0F0F0F0F0F0F0FFFAA31 +:103F000000AA001028380000000000000000000097 +:103F100000000000000000000000000000000000A1 +:103F20000000000000000000000000000000000091 +:103F30000000000000000000000000000000000081 +:103F40000000000000000000000000000000000071 +:103F50000800000001010000000000000000000057 +:103F60000000D7D71414000000FF00005F0A5F0AAA +:103F70003C0F3C0F00038203F0FFF0005353F3F3B8 +:103F8000C3C30000000000000000000000000000AB +:103F90000000000000000000000000000000000021 +:103FA0000000000000000000000000000000000011 +:103FB0000000000000000000000000000000000001 +:103FC00000000000000000000000000000000000F1 +:103FD00000000800000000000000000000000000D9 +:103FE00000000000CF0CCF0C000000000000BEBE9F +:103FF00014143C003CAAC3038203F07DF07D5303FC +:10400000F3A3808080807F3C3E3C000000000000E5 +:1040100000000000000000000000000000000000A0 +:104020000000000000000000000000000000000090 +:1040300000000561002F000D000000610A0D8009DD +:10404000000000610006000D0000000000000000FC +:1040500000000061002D8009000000610006000DD5 +:10406000000000610A2F851D00A0000000610E2DD8 +:104070008005000100610E2B800100008061002F8F +:10408000801D00000000002800100000000000005B +:1040900000000000000000000000000000610006B9 +:1040A000000D000000000000000000000000000003 +:1040B000000000007F757A705D491C08000005054E +:1040C00000008080000000000000000000000000F0 +:1040D000000000000A1E0A1E101FD0DF3C55FF0F13 +:1040E0000000000000F000700E0E0F0A0000FF003C +:1040F000080800000000FCAC000000000000000008 +:1041000000000000000000000000000000000000AF +:10411000000000000000000000000000000000009F +:10412000000080B0C0F000000000000000000000AF +:104130000000000000002F252A20DFCB9E8AC3FF4D +:10414000C3FF5500D5800000000000000000000003 +:104150000000000000000000FFFF000FC0CF3C5532 +:10416000000F0000000000F000200F0F0F0F0000F4 +:10417000FF00FFFF000000000CAC000008FFFFFF85 +:10418000000000000000000000000000000000002F +:10419000000000000000000000000000000000001F +:1041A000000000000030407000000000000000002F +:1041B00000000000000000000000000000000000FF +:1041C0007DCF7D0C5000D20000000000F8F828FFE1 +:1041D0000000000000000000F0F0AAAAAA3FFF3F84 +:1041E0007D41CFCF00000000D714CFCF707070FAA0 +:1041F0000000000C505FF8F8FBFB003F003FF4F0BC +:1042000000000000000000000000000000000000AE +:10421000000000000000000000000000000000009E +:10422000000000000000000FC35500000000000067 +:10423000000000000000000000000000000000007E +:10424000000041CF410CFA00D200000000002828F5 +:1042500028280000000000000000FF3CFF3CAA30BE +:10426000FF307D410C0C00000000D7140C0C202006 +:1042700020AA0000000C505008080B0B000000AAF8 +:10428000F4FC00000000000000000000000000003E +:10429000000000000000000000000000000000001E +:1042A0000000000000000000FF0FC35500000000E8 +:1042B0000000000040800480018040000000208059 +:1042C0008800840088008800110020002000000081 +:1042D000400040000000000000002000000000003E +:1042E000000200000000000004002000050004009F +:1042F0000400041000030000000000002000000083 +:1043000084008400000088000000C00088000000D5 +:10431000200020002000848000000000C0008800F1 +:104320002000200000002000200020008800040061 +:1043300000002000210041020002400880024000ED +:10434000001000002190000000002000800000000C +:1043500000000002000040000000002000000000FB +:10436000000009020000000020200000000084007E +:1043700080009002800100000000400000C00000AA +:104380000000000000020004000000002000000007 +:1043900000000000000000024020000000020000B9 +:1043A0000020000000020002800080008000000069 +:1043B0000000000000022000400420000004200251 +:1043C00002000000000040000200000000000000A9 +:1043D00002000200000002100000080000000200BD +:1043E0000000020002000040000000000200001077 +:1043F0008840400000800000000000000000000035 +:1044000000090000000000000000000002000000A1 +:1044100002000400040084100200000004000200F6 +:104420000020000002000000040000000000020064 +:104430000200000004000220020080018000000948 +:104440008011000000000508808400000000400882 +:1044500000000000000000080008000000000084C8 +:1044600000000000000009100084000000000008A7 +:104470000084048883000020004000000000000049 +:1044800000080040000000000088000800840000D0 +:104490000004000800000000000800080000800080 +:1044A0000010001140004108410000080008000011 +:1044B0004008208840000010410941080000000029 +:1044C0000000010088008802000004009000001035 +:1044D00000009008000800100040002100000000CB +:1044E0000008900000000000000008080000000024 +:1044F00000410000C000410000000808000000006A +:10450000C000000088400000000000000000040817 +:10451000000088000000000000000000000000080B +:10452000000000000040000000000000000000004B +:104530000000000000000100000001000000000079 +:1045400000004100400000000000000010000000DA +:10455000009000A0000000820000000000000800A1 +:104560000800000008000000000008000800050026 +:1045700041004100050000008420400800000000C8 +:104580000090000021000300110005000000000061 +:1045900000000088030008A00000000000400000A8 +:1045A00000000010000000021000000000000000E9 +:1045B000200000000000000020080000040000A00F +:1045C000080040000000400200000400000000104D +:1045D000000000000000000008000000A00000042F +:1045E000000000000000040082000800000000003D +:1045F0000000A000000082410041002000000000F7 +:104600000000A0000005A0008811001100020002B7 +:104610000000000000008200000008000000000010 +:1046200090000000000000040800024000000000AC +:1046300000000000000000A0008404A0218020826F +:104640000400000080A000008001000000000000C5 +:1046500010000000000000000210400003004100B4 +:1046600000000000000000000000000000C010007A +:104670000800020000000000000000040040008864 +:10468000008400000000000000000008400000005E +:104690000000021000000000000000000000009078 +:1046A0000000000000000000410000000240410046 +:1046B00010000300088241002104080583058404DA +:1046C000C00480000000080000001011000000007D +:1046D00000000000000000000000A000000000003A +:1046E00000000000000000000000000800000000C2 +:1046F0008400840008000800900000000000000012 +:10470000080000000000000000050000000000009C +:104710000000000000000000000000000000000099 +:1047200000000000400000000000C00090000000F9 +:10473000001002008200080000000800A000000035 +:1047400008000000000400000000000080000000DD +:1047500009000000000810901190210005000008D9 +:104760000000000000000000000000000000110038 +:1047700005000508058400080090000000000802FC +:10478000410440000020000000A003000588000054 +:104790001100050811001002218400000008090022 +:1047A00000000000000000400000000000000000C9 +:1047B00000000000000000000200050000000000F2 +:1047C00000000000000000010000000040000000A8 +:1047D0000021042110000800000000000800000073 +:1047E00000000000000000000000000000000000C9 +:1047F00000008400000000004000000010000008DD +:1048000008000000880000000000000400000040D4 +:10481000000802000040000000000000000000004E +:104820000000000200000000000000000000000086 +:10483000000002000000C000820000800080000034 +:104840000800000000800000008000000000000060 +:104850000000000003000002000000000000000053 +:104860000300000000000000000011000000000034 +:104870000804020000001100000000000900090007 +:104880000200000000000000000000002100000005 +:104890000000000000000000000000000000000018 +:1048A0000000000000000008000000880000000078 +:1048B00000000000000000000000000000040004F0 +:1048C00041880000050000200002002000010100D6 +:1048D0009001000000A100C1820500C0000004009A +:1048E00001000000000000000000000000000000C7 +:1048F00000000000000000000000000000000000B8 +:1049000000000000020840A0000490900000000099 +:104910000000000000000000000000000000000097 +:104920000000000000000000000000000000080877 +:1049300000000002109000000000000000000000D5 +:104940000000000000000000000000000000004126 +:10495000030540200000008820080090002000008F +:1049600080001000000000000000000000000000B7 +:104970000000000000000000000000000000000037 +:10498000000000000000C080000000808080000067 +:104990000000000000000000000000000000000017 +:1049A0000000000000000000000000000000000007 +:1049B00008000000008080000000000000000000EF +:1049C00000000000020000000000000011000000D4 +:1049D0002041090000082140028021411005020405 +:1049E00000000000000300000000000000000000C4 +:1049F00000000000000000000000000000000000B7 +:104A00000000000000000000800000808000001115 +:104A10000000000000000000000000000000000096 +:104A20000000000000000000000000000000000086 +:104A30000000000000218080000000000000000055 +:104A40000000000500000010000000400080001081 +:104A500000800091000000000182004001010088F8 +:104A60000101000000000001000000000000000043 +:104A70000000000000000000000000000000000036 +:104A80000000000000000000000088881020820064 +:104A90008420000000000000000000000000000072 +:104AA0000000000000000000000000000000000006 +:104AB000000000001000A000A0848490000000000E +:104AC00000000000000000000001000000000002E3 +:104AD000000100040000840101000000C001020088 +:104AE00000011001000000000000000000000000B4 +:104AF00000000000000000000000000000000000B6 +:104B0000000000000000000000000000A1A000A0C4 +:104B1000040282A00000000000000000000000006D +:104B20000000000000000000000000000000000085 +:104B30000000000000008420000200082090000017 +:104B40000000000000000000020000000100010061 +:104B50000200020001000010211021050041801018 +:104B60008408022100080000000000000500000089 +:104B70000000000000000000000000000000000035 +:104B80000000000000000000000000000000100015 +:104B90000080008000000000000000000000000015 +:104BA0000000000000000000000000000000000005 +:104BB0000000000000000000000000800000000075 +:104BC0000000000000000000000080000000100055 +:104BD00010008000800010004189080010000300D0 +:104BE00040800400200010000000000000000000D1 +:104BF00000000000000000000000000000000000B5 +:104C000000000000000000000000000000000000A4 +:104C1000040504040900200000000000000000005A +:104C20000000000000000000000000000000000084 +:104C300000000000000000000000000280020000F0 +:104C40000000000000000000000000000000000064 +:104C50000000000000110000000001080100010038 +:104C6000000088A0C1000200C00000000000000099 +:104C70000000000000000000000000000000000034 +:104C80000000000000000000000000000000000024 +:104C9000000000000108000001000000000000000A +:104CA0000000000000000000000000000000000004 +:104CB00000000000000000000000000010010241A0 +:104CC00020200000000000000000000000000000A4 +:104CD000000000000000000000000000000000E0F4 +:104CE000000060000000000000005000000000E034 +:104CF00000000000000000000000000000000000B4 +:104D000000000000000000000000000000000000A3 +:104D1000000000000081000007000000000000000B +:104D20000000000000000000000000000000000083 +:104D300000000000000000000000000000000081F2 +:104D4000000007000000000000000000000000005C +:104D500000E000000000000000E00700000000008C +:104D6000000000000000FCFCFCFC00000000000053 +:104D70000000000000000000000000000000000033 +:104D80000000000000000000000000000000000023 +:104D900000000000000000000000070F01090000F3 +:104DA0000000000000000000000000000000000003 +:104DB00000000000000000000000000000000000F3 +:104DC00000060000FE0E00000000000000000000D1 +:104DD00000000000000000000000000000000000D3 +:104DE0000000000000000000007E00420000000003 +:104DF00000000000000000000000000000000000B3 +:104E000000000000000000000000000000000000A2 +:104E1000000000000000000000000000070F070F66 +:104E20000000000000000000000000000000000082 +:104E30000000000000000000000000000000000072 +:104E4000000000000000F808000000000000000062 +:104E50000000000000000000000000000000000052 +:104E60000000000000000000000000000000000042 +:104E70000000000000000000000000000000000032 +:104E80000000000000000000000000000000000022 +:104E90000000000000000000000000000000000012 +:104EA0000000000000000000000000000000000002 +:104EB00000000000000000000000000000000000F2 +:104EC00000000000000000000000000000000000E2 +:104ED00000000000000000000000000000000000D2 +:104EE000000000000000000000000000FF000000C3 +:104EF00000000000000000000000000000000000B2 +:104F000000000000000000000000000000000000A1 +:104F100000000000000000000000000070703CFC79 +:104F20007E1E781800000000000000000000000055 +:104F30000000000000000000000000000000000071 +:104F40000000000000000000101000000000000041 +:104F50000000000000000000000000000000000051 +:104F60000000000000000000000000000000FFB191 +:104F70000000000000000000000000000000000031 +:104F80000000000000000000000000000000000021 +:104F900000000000000000000000000000001010F1 +:104FA0003C0C7E1E7818000000000000000000008D +:104FB00000000000000000000000000000000000F1 +:104FC00000000000000000000000000004FF46FF99 +:104FD00000000000000000000000000000000000D1 +:104FE0000000000000000000006100070009000050 +:104FF00000610006000D000000610007000D0000C8 +:1050000000000000000000000000000000000000A0 +:105010000000000000000000000000000000000090 +:1050200005610A2E051D00A0000000000000000020 +:105030000000000000000000000000000000000070 +:105040000000000000000000000000000028000038 +:105050000000000000000000000000610007000DDB +:10506000000005610A0F050D00A0A6A60400AF050B +:105070008705A0AFC0C000000000000000000000D5 +:105080000000000000000000000000000000000020 +:105090000000000000000000000000000000000010 +:1050A00000000F0F7F3F0000000000000000000024 +:1050B00000000000000000000000000000000000F0 +:1050C00000000000000000000000000000000000E0 +:1050D00000000000000000000000000000000000D0 +:1050E000000000000000000000000000A5A5050071 +:1050F00005052D05A0AFCFCF022AAAAA0000000007 +:10510000000000000000000000000000000000009F +:10511000000000000000000000000000000000008F +:10512000000000000F0F5F0F0000000000000000F3 +:10513000000000000000000000000000000000006F +:10514000000000000000000000000000000000005F +:10515000000000000000000000000000000000004F +:105160000000000000000000000000000000FFFF41 +:10517000FFFF3030F3F308C80BCBC3FFC3F00000D0 +:10518000000000000000000000000000000000001F +:10519000000000000000000000000000000000000F +:1051A00000000000000000000000000000000000FF +:1051B00000000000000000000000000000000000EF +:1051C00000000000000000000000000000000000DF +:1051D00000000000000000000000000000000000CF +:1051E00000000000000000000000000000000000BF +:1051F000AA000A0A0000000038F83BFBC300C3F015 +:10520000000000000000000000000000000000009E +:10521000000000000000000000000000000000008E +:10522000000000000000000000000000000000007E +:10523000000000000000000000000000000000006E +:10524000000000000000000000000000000000005E +:10525000000000000000000000000000000000004E +:10526000000000000000000000000000000000003E +:105270000000000084000000000020000402200064 +:1052800020000000040000002000000420000000B6 +:1052900088004000880488054004000020000000C9 +:1052A000000488002080880020000000880088001A +:1052B0002000000320000000000000084000A000C3 +:1052C000000010002000200000000408040020005E +:1052D0000000040400008804880082002000000010 +:1052E000000020402000210004002008840000006D +:1052F00000000008000000C0000000900000000155 +:1053000000000000000041004100000200200000F9 +:10531000000004000900000000A0100200000000CE +:10532000000000000000000221001000000000004A +:1053300000001020000000020000002000040020F7 +:1053400010000000000200002000000000008000AB +:10535000002000000040000000000000009040001D +:105360000000000000018000200080000590000087 +:1053700000000000000000000000000000000040ED +:10538000000200000410020004400000004002007F +:1053900000000800020000008400840003000000F8 +:1053A00020000000040090000200020008400200FB +:1053B00000000000200000000000000000000200CB +:1053C00000000200000000000200020002000200D3 +:1053D00002000000000000000000000000000000CB +:1053E00000000000000000000300030003000310A1 +:1053F000050002000500032000000000000000007E +:10540000000800030000008500000000000000000C +:10541000000000000000001000000000000020104C +:1054200000100008000800840000008800008000D0 +:105430000000000000100010000000000300000049 +:10544000001000000008000800000000000000003C +:10545000000000000000000000100000000000003C +:105460000902000000840008000804000400200075 +:105470002005A0000000A00820010000000000009E +:10548000820800000000C000080840008800840076 +:10549000002190000005000000080000000000004E +:1054A000C0080000000008009000000082004021B9 +:1054B000840010000400000008080000C0008800FC +:1054C00090020021400000000000C0080000880099 +:1054D000820000048800A000080882000800000084 +:1054E0000000002100000000000090000100880082 +:1054F00000008902100300030000900200000884ED +:1055000000002100009000000000080000000008DA +:105510000000008200000000000000000000030006 +:10552000030003000900000000004100000000002B +:105530000000410000000000030040000000009057 +:105540000800000000000000000021000000000032 +:1055500000000000009104000000000003000000B3 +:1055600020001000009000A00500000000A0200016 +:105570000000100004210800080021004101000083 +:10558000000084000000000000000000A0000800EF +:1055900040028400840000000000000000002000A1 +:1055A00008002000C0000000A0000800000000006B +:1055B0000000C000008000000000000004000000A7 +:1055C000000008040800000000000800000082003D +:1055D0004000824182000803040504000500040025 +:1055E0008200A000C000A000A00008000000100081 +:1055F000C00008028484820484000100000082024A +:10560000400000000000000000000000000000104A +:105610000000800100000000000000000000000009 +:10562000C000030080000000000000000000000037 +:10563000000000C0000000020000080000000000A0 +:105640000000200000000000000000000800000032 +:1056500000000000000008000000890080008400B5 +:10566000842041C021000500000000000200050068 +:10567000030000002100402003000000040400009B +:105680000900A0008210000082000000000000035A +:10569000000000000888000000044000A00000088E +:1056A00000001000A0000000C080C02040400000AA +:1056B00008000000002000000000000008000000BA +:1056C0000841000010000000000000000000080079 +:1056D00040008200C0000000000000000000200028 +:1056E0000811C000820000008200000082008400D7 +:1056F0000000C00008008400C00082208404000074 +:105700002000000003001100410205000482210472 +:10571000000840004000110200000090000000005E +:1057200000000000009000000000002000000000C9 +:1057300000000000008403000040000000000000A2 +:1057400000000800000004900000030000020000B8 +:10575000000000A000000000080003880000000016 +:1057600000000000000000000000030000880000AE +:10577000000000000000000003000500000100011F +:105780002100A100080008004000000008030000FC +:10579000000800000000000004800000000000007D +:1057A0000800000040000000202000000000080069 +:1057B0009000C0032009000000000000000000026B +:1057C000000000000021000000000000C0000000F8 +:1057D00000000400000000000000C0000000000005 +:1057E00000008200001108008241C0000000820019 +:1057F000000082001000A00040008280840482210A +:105800008205A10004000009000000000000000063 +:10581000000000000000080000000002000000007E +:1058200000000000000000000000800100000000F7 +:105830000000000000000000000000000000200048 +:105840000000000003000000000000000000410014 +:105850001100000000000000000000000000000037 +:10586000000000040000080000200200000000000A +:1058700000000000000003C000000500000410C18B +:10588000100209022084410008820000000000008C +:105890000000A000080082000000000000010001DC +:1058A00000010000000000000000A1080090008836 +:1058B00040080000000000000000A0910440040522 +:1058C00082820000000000000000000000000000D4 +:1058D0000000000000000000000000000000400088 +:1058E00009000000000000000000000000000000AF +:1058F0000000000004000002008240080000410196 +:10590000040100010000010182000001000000000C +:1059100000000000000511118000000800080010C0 +:1059200000200002000000000000000082000000D3 +:105930000200008000000000000000008020080538 +:10594000800480090000000000000000000000004A +:105950000000000000000000000000000000000047 +:10596000050003000000000000000000000000002F +:1059700000000000000000000080000000804004E3 +:10598000A1408208001003202110104100040000F3 +:10599000000000000000028085008200112100004C +:1059A00000000000002000000000000000000003D4 +:1059B0000041808200000000000000000000840020 +:1059C00084408390030400000000000000000000F9 +:1059D00000000000000000000000000000000000C7 +:1059E000200010004000080000000000000000003F +:1059F0000000000000000000000000030080000024 +:105A0000838282001120108520050880020509404C +:105A1000000000000000000020021000A00088012B +:105A20000000000000000000000000000000000076 +:105A300008009001A011A00000000000000000007C +:105A400003A04100A085418200000000000000008A +:105A50000000000000000000000000000000000046 +:105A600000000000010000000000000000C0000075 +:105A7000009000000000000000002000209084A0A2 +:105A80000800020390A00400C182002001C00000B1 +:105A90000091000000000000000000840084081154 +:105AA000008800000000000001000000000000006D +:105AB0000000C00082900040C01000000000000004 +:105AC0000000100001A00083089000000001000009 +:105AD0000000000000008200000000000000000044 +:105AE00000000000000100000001000100000000B3 +:105AF0004000000000000000000000009090002026 +:105B00000040A00401014001400100010101050025 +:105B1000840100010000000000000000004000417E +:105B200003A1001000002000400008000000000059 +:105B300000000000000000000000850000000000E0 +:105B4000000000008005088810A1801000000003FC +:105B50000000410000000000800000000400000080 +:105B600000000000000000080003002100020900FE +:105B700000008000000000000000000000000000A5 +:105B800000000080800002212110032140401021EC +:105B900085204110050500000000000000002140A4 +:105BA0000300410040042100200005000300000024 +:105BB0000000000000000040002180800000000084 +:105BC0000000000000002100050304008402000022 +:105BD0008000000000000000000000000000000045 +:105BE0000000000000000000008200000000000231 +:105BF0000040001000000000000000000000000055 +:105C000000118080000000000891108810000889B1 +:105C100008400211112140110000000000000000A6 +:105C200001000090000801000100000001000000D8 +:105C300000000000000000008800200410C0900058 +:105C40000000000000000000A100A020118204005C +:105C500000008200000000000000000000000000C2 +:105C60000000000000000000000000C10000000073 +:105C70000000000000000000000000000000000024 +:105C80000000080004C08290000000090105019096 +:105C900001900090010000010001000000000000E0 +:105CA00000000000000000000000000000000000F4 +:105CB00000000000000000000000004100E00700BC +:105CC000420A000000000000000000000000000088 +:105CD00000000000000000000000000000000000C4 +:105CE000000000000000000000000000810000E053 +:105CF000000042000000000007000000000000005B +:105D0000000000000000000000004200880000E0E9 +:105D100007000000600000E00700420000000000F3 +:105D200000000000000000000078FF780000000084 +:105D3000000000000000000000000000143F1403F9 +:105D400000FF00000000000000000000EB41EB41FC +:105D50000F550F550000000000000000000000007B +:105D60000000000000000000000000000000000033 +:105D70000000000000000000000000000000000023 +:105D8000000000000000A000A0F0C8CBF8FB00005D +:105D90000000000000000000000000000000000003 +:105DA000000000000000000000000078FF78000004 +:105DB0000000000000000000000000000000D73FCD +:105DC000D70300FA00FA0000000000000000AFAFA7 +:105DD00005050000FFFF00000000000000000000BB +:105DE00000000000000000000000000000000000B3 +:105DF00000000000000000000000000000000000A3 +:105E0000000000000000000000000000080B383B0C +:105E10000000000000000000000000000000000082 +:105E200000000000000000000000000003F303F386 +:105E30000000000000000000000000000000000062 +:105E40000A1E0A0A303000000000000000000000B6 +:105E50003082F38255553F0300000000000000002F +:105E60000000000000000000000000000000000032 +:105E70000000000000000000000000000000000022 +:105E8000000000000000000000000A000A008083FB +:105E90008C8F0000000000C33CFF000000000000E9 +:105EA00000000000000000000000000000000A0ADE +:105EB000FAFA0000000000000000000000000000EE +:105EC0000000AABEAAAA005500550000000000006C +:105ED000000030BEF3BE0000000000000000000023 +:105EE00000000000000000000000000000000000B2 +:105EF00000000000000000000000000000000000A2 +:105F0000000000000000000000000000030003008B +:105F1000B0B3BCBF00000000E8E8E8E80000000003 +:105F2000000000000000000000000000006100060A +:105F3000000D000000610006000D000000000000E0 +:105F4000000000000061002F000D000000000000B4 +:105F50000000000000610006000D000000000000CD +:105F60000000000000000000000000000000000031 +:105F7000000000000000006100078009000005002B +:105F80000A08050000A0000000000000000000005A +:105F900030000000000005610A0F850D00A00561BA +:105FA0000A0F850D00A0000000000000000005C3DE +:105FB0000500CFCFC0C0300000000000000000008E +:105FC00000000000000000000000000000000000D1 +:105FD0000000000000000000AAEA25752F7F0000E5 +:105FE00000000000000000000000000000000000B1 +:105FF0000000000000000000000000000B0F010F77 +:106000000000000000000000000000000000000090 +:1060100000000000000000000252075703035F5019 +:1060200010385179F5C005C00000000000000000E4 +:1060300005FF053C05F505F53030000000000000C7 +:106040000000000000000000000000000000000050 +:1060500000000000000000000000AAEF20702A7A73 +:106060000000000000000000000000000000000030 +:106070000000000000000000000000000000000F11 +:10608000000F000000000000000000000000000001 +:1060900000000000000000000000A2F2A7F7F3F3E8 +:1060A0005F5092BAD3FBF5CF05CF0000000000008F +:1060B0000000C33CC300FF005353A1F0A0A00000A8 +:1060C00000000000000000000000000000000000D0 +:1060D00000000000000000000000FF00FF35AAAA39 +:1060E000F03C000000000000000000000000000084 +:1060F00000000000000000000000000000000000A0 +:1061000000FC00AA000000000000000000000000E9 +:10611000000000000000000000000000808CB0BC07 +:10612000C3004D4D00F0C3AAFFC33C0000000000B7 +:1061300000000000003C0000FF005353E0F1A1A06C +:10614000000000000000000000000000000000004F +:106150000000000000000000000000000F000F35EC +:10616000AAAAF03C000000000000000000000000AF +:10617000000000000000000000000000000000001F +:106180000000000C00AA0000000000000000000059 +:106190000000000000000000000000000000838FED +:1061A000B3BFFF3C4D4DFFF0C3AA4D4D4D4D000018 +:1061B00000000000000000000000000000000000DF +:1061C00000000000000000000000000000000000CF +:1061D00000000000000000000000000000000000BF +:1061E00000000000000000000000000000000000AF +:1061F000000000000000000000000000000000009F +:10620000000000000000000000000000000000008E +:10621000000000000000000000000000000000007E +:10622000000000000000000000000000000000006E +:1062300000002000200000002000000000112000CD +:106240008800000020000000200000000000000086 +:1062500000002000200000000000000000042000DA +:1062600000000000200000002000400004000000AA +:10627000000300008400200004000000040000006F +:106280002000000004002000001001002000840015 +:1062900000040400040040020000000004000404A4 +:1062A0000402C000410020808210880020042000E9 +:1062B00005204000000021000000000000004040D8 +:1062C00010904000000200400000000000000402A6 +:1062D00000020000000204000000000200020002B0 +:1062E00000040000400200000002000080000002E4 +:1062F00021900000000000000000800000008000ED +:1063000000040000400080000000000020000000A9 +:106310000900000280008000850100000900800063 +:106320008002800500000400002000010040000100 +:106330000002C002000000000000904000000000C9 +:1063400040000210000000000000020002000000F7 +:10635000004008400200020002000010001000404F +:106360000200880902000200004000000200020052 +:106370000400004000000100840000000000000054 +:1063800004000010000000000000010000400200B6 +:106390000000020002008800020802001000030052 +:1063A00002000000200021002100110510400180A2 +:1063B00003000289011000080000000003000482AD +:1063C00000008090000000000002000000000000BB +:1063D00000000000000000080000000000000008AD +:1063E000000000000000000000000000001009088C +:1063F0000300000000080000040820080000000856 +:10640000050803000300000800000000040000006D +:1064100009040900000041080084008420040204EB +:10642000040820004184800890009010A008820198 +:106430000402040000044005000000000200000007 +:1064400000000100850010000400000000000000B2 +:10645000000800000000000000000008000000002C +:10646000000000000000000000000000000000002C +:10647000000000008200000000000000000000009A +:106480000000000000000002000000000000000802 +:106490000000000000000100844082800000000035 +:1064A00090000180000000030005000300080021A7 +:1064B0000003010401050040000008040000000082 +:1064C0000000000040004088C00000000000000004 +:1064D0000084000000000800000000000000000030 +:1064E0000000000000000200400800000000000062 +:1064F000000000000000004000200000000000003C +:106500000000000005000000000800A000000000DE +:10651000000000000000000020000001030441888A +:1065200041000000400403000300000003000900D4 +:10653000000000002001200041000500C000000014 +:106540000000000000400000010200048200004042 +:106550000000000000000000080008040000000027 +:106560000000000008000000820000000800000099 +:106570000009000000000009000000000000820087 +:106580009009900020000400A000A100C00082003B +:10659000830082008220A011201108008200820066 +:1065A000100084040900C0042005C0040840828053 +:1065B000A002000041834002402020202100000072 +:1065C0000000000020004000000040010300000027 +:1065D00000000000000000000000040000000000B7 +:1065E000000000000000400040C003000300000065 +:1065F0000000000000000004000000000000000097 +:106600000000118811882004200000000400000010 +:10661000000004000040410108C0800008000000A4 +:10662000030000A0410004004100C10040011084AB +:10663000032008001100202091050000A101A00006 +:10664000000500000000000000080000000000003D +:106650000000000000000008000000000000000032 +:10666000000000000000000000000000000000002A +:10667000000000000000000000000000000000001A +:106680000000040000000000000004000000000002 +:1066900000008200000004000000000300008408E5 +:1066A00020008280C00004002008C0008200821008 +:1066B000900084820003002010009002000000413E +:1066C00082080000000400000000058204000000B1 +:1066D0000002030400A00000000000000000000011 +:1066E000100003000004000000080000000000008B +:1066F0000320000004000920040000000000000046 +:10670000000000008300000000080000800000007E +:10671000000000000300000880000084000000006A +:1067200008008500000200008000800005000000D5 +:10673000050005200320050005A100900301054088 +:1067400008004104C00040030000200000210000B8 +:106750000000000000000000001100000000000028 +:106760000000000800000000000000000000000021 +:106770000000000000000000000000000000000019 +:1067800000000000000000000400042100002004BC +:1067900000000000000004008200820082008800E7 +:1067A000820000000002400020002004400321007D +:1067B000840040008804101110201000820800207E +:1067C00000418420010300000000000000000000E0 +:1067D000000002880000030000000000000000002C +:1067E00000000000000000000000000000000000A9 +:1067F0000000000000400800000000002000000031 +:1068000000000300000000000000C0048000000041 +:1068100000000000000000008000000200000000F6 +:106820000008000005000001000088008001110040 +:1068300020840000000000010300008900000084A3 +:1068400000A00390000440020000000000000000CF +:106850000000000000000000000000000000000038 +:106860000000000000000000000000000000000028 +:106870000000000000000000000000000000000018 +:106880000000000000000000000000000000000008 +:1068900000000000000000000000000000000000F8 +:1068A00000000010008884200002000004000001A5 +:1068B000000100000901000000001040020400C0B7 +:1068C00004020101000004010001000000000000BA +:1068D00000000000000009000000000000000000AF +:1068E00000000000000000000000000000000000A8 +:1068F0000000000000000000000000000000000098 +:106900000000000000000000000000000000000087 +:106910000000000000000000000000000000000077 +:106920000000000000801000820000800040800312 +:10693000021009034003212002080003C000800068 +:106940001000808040402105094000080000000040 +:10695000000000004080030008000808000000005C +:106960000000000000000000000000000000000027 +:106970000000000000000000000000000000000017 +:106980000000000000000000000000020000000005 +:1069900000000000000000000000000000000000F7 +:1069A0000000000000001004004120050300020563 +:1069B000100010401000038505804140408380880E +:1069C000002185840080004100008040008000009C +:1069D0000000000000000004010000000140000071 +:1069E00000000000000000000000000000000000A7 +:1069F0000000000000000000000000000000000097 +:106A000000000000000000900000000000000000F6 +:106A1000000000A0000000840000008400000000CE +:106A200000000040000000400100009100400020F4 +:106A3000000000400000014000020104000000C10D +:106A4000A00390C0A00908824001200884018804A6 +:106A50000000000000000000000000000000000036 +:106A60000000000000000000000000000000000026 +:106A70000000000000000000000000000000000016 +:106A80000000000000000000000000000000000006 +:106A9000000000000000A0000000010000008400D1 +:106AA0000000000000004000000088000401100108 +:106AB00008000000410040000000010083000401C4 +:106AC000000082400208400321C00000A0008201B3 +:106AD00000000000000000000000000000000000B6 +:106AE00000000000000000000000000000000000A6 +:106AF0000000000000000000000000000000000096 +:106B00000000000000000000000000000000000085 +:106B1000000000000900000000000000020000006A +:106B200000000000050000000000000000208020A0 +:106B30000021851005001100100040000220110006 +:106B400084210520850000004182410005042103C5 +:106B5000044009040000000000000000410205009C +:106B600021000520000000000000000000000000DF +:106B70000000000000000000000000000000000015 +:106B800000000000000000000000000008004000BD +:106B900009004000000000000008000000000000A4 +:106BA00000080000000000000011000000008080CC +:106BB0000000800000080000000200000002100237 +:106BC00011024110404000098020800000000004B4 +:106BD000000900000000000000000000000001218A +:106BE00000000100000000000000000000000000A4 +:106BF0000000000000000000000000000000000095 +:106C00000000000000000000000000000000010083 +:106C10000000000000000000000000010000000073 +:106C20000000000100000000000000000000000063 +:106C30000240200002009001000800000000000057 +:106C400000820000000100004000082102A0A00016 +:106C50000000004000A00000000000000000000054 +:106C6000810000E0000000000000000000000000C3 +:106C70000000000000000000000000000000000014 +:106C80000000000000000000000000000000000004 +:106C900000000000000000000000000000000700ED +:106CA00000000000000007000000000000000700D6 +:106CB0000000000000E000004200000000E00700CB +:106CC0000000000000E007000006000000E00700F0 +:106CD0000006000000E00700500000000000000077 +:106CE00000000000000000000000000000000000A4 +:106CF0000000000000000000000000000000000094 +:106D00000000000000000000000000000000000083 +:106D10000000000000000000000000000000000073 +:106D20000000000000000000000000000000000063 +:106D30000000000009C0F9C00000000000000000D1 +:106D40000000000000000000000000006F6F6060A5 +:106D50000C180CDB00000000000000000000000028 +:106D60000000000000000000000000000000000023 +:106D70000000000000000000000000000000000013 +:106D80000000000000000000000000000000000003 +:106D900000000000000000000000000000000000F3 +:106DA00000000000000000000000000000000000E3 +:106DB00000000000000009CFF9CF00000000000033 +:106DC0000000000000000000000000000000FC0CBB +:106DD000FC0CCF18CFDB000000000000000000001A +:106DE00000000000000000000000000000000000A3 +:106DF0000000000000000000000000000000000093 +:106E00000000000000000000000000000000000082 +:106E10000000000000000000000000000000000072 +:106E20000000000000000000000000000000000062 +:106E30000000000000000000000000000000000052 +:106E40000000000000000000000000000000000042 +:106E50000000000000000000000000000000000032 +:106E60000000000000000000000000000000000022 +:106E70000000000000000000000000000000000012 +:106E80000000000000000000000000000000000002 +:106E900000000000000000000000000000000000F2 +:106EA00000000000000000000000000000000000E2 +:106EB00000000000000000000000B383B08000006C +:106EC00000000000000000000000000000000000C2 +:106ED0000000033F7E7E68086E0E000000004373D2 +:106EE0004F7F0000000000000000000000000000D4 +:106EF0000000000000000000000000000000000092 +:106F00000000000000000000000000000000000081 +:106F10000000000000000000000000000000000071 +:106F20000000000000000000000000000000000061 +:106F3000000000000000000000000000BF8FBC8CBB +:106F40000000000000000000000000000000000041 +:106F500000000000033F4242F898FE9E000000003F +:106F600040704C7C00000000000000000041000761 +:106F7000800D000000000000000000000000000084 +:106F80000000000000000000000000000000000001 +:106F9000000000000000000000000000006100068A +:106FA000000D0000000005000A08050000A0050013 +:106FB0000A080500000005000A08050000A000619D +:106FC0003007000D000005610A0F050D00A00561E6 +:106FD0000A0F050D00A005004A0F050C00A0056171 +:106FE0000A0F050D00A000000000000000000000D6 +:106FF0000000000000000000000000000000000091 +:107000000000000000000000000000000000000080 +:1070100000000000000000000000000000003F7DB4 +:10702000037D0000000000000000000000000000E0 +:107030000000000000000000000000000000000050 +:1070400000000000022A00280000000000000000EC +:107050004068C2EA00C3C3C30000555500FF0000EA +:107060000000000000000000000000000000000020 +:107070000F0F0100000000000000000000000000F1 +:107080000000000000000000000000000000000000 +:1070900000000000000000000000000000000000F0 +:1070A0003F4103410000000000000000000000001C +:1070B00000000000000000000000000000000000D0 +:1070C00000000000000082AA80A80000000000006C +:1070D0000000547CD6FE00C300000000555500FFA0 +:1070E0000000000000000000100000000000000090 +:1070F0000000000000000000000000000000000090 +:10710000000000000000000000000000000000007F +:10711000000000000000000000000000000000006F +:10712000000000000000000000000000000000005F +:10713000000000000000000000000000000000004F +:10714000000000000000000055003C3CF000C3AA15 +:107150000080000030F328283E162A020000FFFFBE +:1071600000FF00000000040000000000000000001C +:107170000000000000000000D7D7D7E700000000A3 +:1071800000000000000000000000000000000000FF +:1071900000000000000000000000000000000000EF +:1071A00000000000000000000000000000000000DF +:1071B00000000000000000000000000000000000CF +:1071C0000000000000000000000055FF3C3CF0FF04 +:1071D000C3AA0000000030F3EBEB7F576B430000C5 +:1071E000000000FF000000000000000000000000A0 +:1071F000201100002000000000000000000021001D +:1072000004002000000000000000000000008800D2 +:10721000200000002000000202000000000000002A +:1072200000208400C084100000020000000400035D +:10723000000020008820000010002000C000900006 +:107240008400000085000404200020002100840048 +:10725000840004000100C10000000000000084025E +:10726000400084022100880000002000000020006F +:1072700000020000000000000000000000000040CC +:107280000800800000001000000200000000000064 +:10729000000000000002009010000000000000004C +:1072A000100000010000002040000000000000006D +:1072B00000000000000000000000000000000000CE +:1072C00000004000000004008000A0008000880052 +:1072D00010000000800020004000080000000000B6 +:1072E000000100000001400000000000000000005C +:1072F0000000000008400000004002000000000004 +:107300000000028000000280020000000000020075 +:1073100002000000000900100840000000000040CA +:107320000000020002000040020000000000000017 +:107330000040000000400000000021C0010021408A +:107340000000008002210200000000000200010095 +:10735000020501408840000021000000014020009B +:1073600020002000000000000000009088000200C3 +:1073700000880180000009000008051000000000DE +:107380000000040800100000004000840000000419 +:1073900000000000000000000009000000080000DC +:1073A00000000008110000000000040000000000C0 +:1073B0000200000800000900000000082004200866 +:1073C0002000050005200000000020000000410012 +:1073D0000400000020080000000004840040208415 +:1073E00080008000820800000000400400402084EB +:1073F0000000002004020000000000000000400027 +:107400009040900040000880000000000000100044 +:1074100000000000000082000000000000080000E2 +:10742000C000000000000000840082000000000096 +:10743000000000009000000000000000000000219B +:10744000100020001041000800000000080008089B +:10745000000000000021000000000100000000000A +:107460004004900400212000001088000005000066 +:107470004088040000400020038421000400000034 +:10748000210000000000000080100000000000202B +:1074900000000000000000000000000000000000EC +:1074A00000000000000000000000000000000000DC +:1074B00000000000000000000000100000000000BC +:1074C0000000000080000000000003000000080829 +:1074D0000800000000002100000003022000410815 +:1074E0000510040909834190880000C04100030091 +:1074F00008000020A1C0000003010000000084007B +:1075000000100000000900008811081000000000B1 +:10751000000900400000000000000000000084009E +:107520000000000000000000000040000000080013 +:107530000000000000410041C041000008000000C0 +:107540000000000000000000010001008200C000F7 +:10755000000000002020C000A080A000830982005D +:1075600090000400C00008000800A0108200820003 +:107570008504C1044120C0200020A10200001000A9 +:107580000000000121000000000000008001000058 +:1075900000000002000000000000000000000000E9 +:1075A00000000000000000000000000000000000DB +:1075B0000500400000000000000000000000110075 +:1075C0000000090021000000000020002000000051 +:1075D000000000000000200121002120000004A084 +:1075E000030021A085C04000030041000500000009 +:1075F00000002000200020012101080120080000D7 +:10760000000000000000000000200000000000005A +:10761000000000000000000000000000000000006A +:1076200000008400000000000000000000000800CE +:10763000000000000000000000000000000000004A +:10764000000000000000080000000000C000000072 +:107650000400040008000000000000000000050015 +:10766000820008001000840008008200C1050200AA +:10767000C090C00582004011C00282058200844192 +:1076800000000000000000000000000000000004F6 +:1076900000000000000000000000000000000000EA +:1076A00000000000000000000000000000000000DA +:1076B0000000080000000000000000880000020038 +:1076C000000000000000000800000000000000A012 +:1076D0000000800080000000000009080040000851 +:1076E00088000000210020A0090800C00000200040 +:1076F00080C00304000000008000001000000000B3 +:107700004184820000000000000000080800000022 +:107710004000000000000000000010000000000019 +:1077200082080000000000000000001100000000BE +:1077300000000000000000000000004000400021A8 +:10774000C0210000820000000000000000000000D6 +:1077500000800080040220208900210000004041B8 +:107760000400100010002000080021000008C000E4 +:10777000A000A000080082848240820440414104AD +:10778000A109C011000000000082000003000800F1 +:107790000000000000002000000040000000000089 +:1077A00000000000000000000000000000000000D9 +:1077B0000000000000000000000000000000008841 +:1077C00000000000000000000000000000080000B1 +:1077D00000000004002080000000040004000000FD +:1077E00000008000000011A080000002C0C000085E +:1077F0000300000011C003100005004005210088AF +:1078000020C1200020000000000000000000000057 +:1078100000000000000000A00000001000040000B4 +:1078200000000000000040080004001008040000F0 +:10783000000000000000A0900008000820020000E6 +:1078400000000000000000000000840001000000B3 +:107850000000000000000000000000000000000028 +:1078600002009000000002000000000090000000F4 +:107870000082014088080010914002208521828901 +:1078800000014100010000000000000000000000B5 +:1078900000000000000000000080000000000080E8 +:1078A0000000000000000000808000000000008058 +:1078B0000000000000000000800000800080000048 +:1078C00000000000000000000000000000000300B5 +:1078D00000000000000002000000000000000000A6 +:1078E0000000030080001000800002002100020060 +:1078F00000000000030002000080090311838802D9 +:10790000800200024011021000030000000080000D +:1079100080000000000000000000000000050000E2 +:107920000000000000000000000000000000000255 +:107930000000000000000000000000008010800037 +:107940000000000000000000000000000000000037 +:10795000000000000009000000020000000000001C +:107960000000000000058080801080800000000082 +:1079700000200080104040C0034008808389C00080 +:1079800011C0208203412100030502100000000005 +:1079900004001000000000000000000000000000D3 +:1079A0000040000000000000000000000000000097 +:1079B000000100000000000000000000900008012D +:1079C000A088880000000000000000000000000007 +:1079D0000000000000000000000000010040000066 +:1079E0000084000000849000020440018204000032 +:1079F000009000010004110040C0821082020202C7 +:107A0000038491101104000301C0000000840000F1 +:107A10000000000000000000000000000000400026 +:107A200000008200080000000000000000000004C8 +:107A300000900020108800000000000000000804F2 +:107A40000082002083080000000000000000000009 +:107A500000000000000000000000820000000100A3 +:107A600000000000C0000000019084A0044001104C +:107A700001004000400000001001C001000188002A +:107A800082034111C010C0A100010501C101010024 +:107A900000000000000000000000000000000000E6 +:107AA00080000000000080000000000000000000D6 +:107AB00000800000000000800000000000000000C6 +:107AC0008000008000002080000000000000000016 +:107AD00000000000000000000500000000000000A1 +:107AE000020004000000000000000400800080800C +:107AF000100020090010801011040002000900216C +:107B0000401000820205088589200502881008219E +:107B10004020004000000080000000000000000045 +:107B2000000000020004000000000000000000004F +:107B30000000000000000000000000000000000045 +:107B40000000000200020000000000000000000031 +:107B50000000000000000000000000000005000917 +:107B6000000000000000000900000080001100403B +:107B7000000000000008000800000000008580856B +:107B80008000808210A121802000804002801008A7 +:107B90000300024000000008004000000000000058 +:107BA00000000000200120012000820000000000F1 +:107BB00000000000000000000000000000000000C5 +:107BC00000000000880190A182A082000000000057 +:107BD00000000000000000000000000000000000A5 +:107BE0000000000000000000000000000002000192 +:107BF00000030020000000000001000000008210CF +:107C000008024020820800412004A190A00001A0A9 +:107C10000100000000400000000000000000000023 +:107C200000000000000000810000070000000000CC +:107C30000000000000000000000000000000000044 +:107C400000000000000000810000070000000000AC +:107C50000000000000000000000000E00000000044 +:107C6000008100E0070000000000000007000000A5 +:107C7000000000E007000000000000E00700000036 +:107C8000000000E000006000000000E000000006CE +:107C9000000000E00700820000000000000000007B +:107CA0000000000000000000F0F0000000000000F4 +:107CB00000000000000000000000000000000000C4 +:107CC00000000000000000000ECE3EFE000000FF9D +:107CD00000000000000000000000000000000000A4 +:107CE0000000000000000000000000000000000094 +:107CF0000000000000001F131C1000000000000026 +:107D000000003C3C00FF0000000000A300A3F3F3D0 +:107D100028EB000000000000000000000000000050 +:107D200000000000000000000000F0F0AA96000033 +:107D30000000000000000000000000000000A8AAF1 +:107D4000A828000000000000000002C232F2003A41 +:107D5000003A0000000000000000000000000000E9 +:107D60000000000000000000000000000000000013 +:107D70000000000000000000DFD3DCD000000000A5 +:107D800000000000AAAAF0F00000000000A300A379 +:107D9000303028EB00000000000000000000000070 +:107DA0000000FFAA00000000000000004141414126 +:107DB00000000000000000000000000082F0BEF0A3 +:107DC0000000000000000000000000000000BF3CB8 +:107DD000C303C3000000000000000000000000001A +:107DE0000000000000000000000000000000000093 +:107DF00000000000000000000000F7F4C7C400000D +:107E00000000000000000F3C55FF80D08ADA0F0010 +:107E1000050502320E3E00000000000000000000D8 +:107E200000000000550000000000000000000000FD +:107E3000030300000000000000000000000082F0CA +:107E4000BEF0000000000000000000000000000084 +:107E50003D3CC301C3010000000000000000000021 +:107E60000000000000000000000000000000000012 +:107E7000000000000000000000000000373407048C +:107E800000000000000000000F3C550085D58FDF8A +:107E90000C0C0505C2F2CEFE000000000000000040 +:107EA00000000000000000000000000000000000D2 +:107EB000800000280000000000000000000000001A +:107EC0000000400000000000000000000000000072 +:107ED000000000280000000000000000000000007A +:107EE000000000610007000D00000061002F000D80 +:107EF00001A005000A08050000A005610A0F050D94 +:107F000000A005610A0F050D00A000613007000DFB +:107F1000000100613007001D000005610A0F050D1A +:107F200000A00000000000000000000000000000B1 +:107F30000000000000000000000000000000000041 +:107F40000000000000000000000000000000000031 +:107F50000000000000000000000000000000000021 +:107F60000000000000000000000000000000000011 +:107F70000000000000000000000000000000000001 +:107F800000000000000000002000000000000000D1 +:107F90003030F3F3FFF0AFA0EBEB30F300F0CACAE0 +:107FA0003F3FFF0000000000000000000000000054 +:107FB00000000000000000000000000000000000C1 +:107FC00000000000000000000000000000000000B1 +:107FD00000000000000000000000000000000000A1 +:107FE0000000000000000000000000000000000091 +:107FF0000000000000000000000000000000000081 +:108000000000000000000000000000000000000070 +:1080100000007D417D415F500F00282830F30FFFA5 +:10802000CACA0303FF0000000000000000000000B7 +:108030000000000000000000000000000000000040 +:108040000000000000000000000000000000000030 +:108050000000000000000000000000000000000020 +:108060000000000000000000000000000000000010 +:108070000000000000000000000000000000000000 +:1080800000000000000000000000000000000000F0 +:1080900000000000F03AFF3A3C550FFF03037D411A +:1080A000D7D73F036120E3A20000000000000000DA +:1080B00000000000000000000000000000000000C0 +:1080C00000000000000000000000000000000000B0 +:1080D00000000000000000000000000000000000A0 +:1080E0000000000000000000000000000000000090 +:1080F0000000000000000000000000000000000080 +:10810000000000000000000000000000000000006F +:10811000000000000000003A0F3A3C550F003F3FBE +:108120007D4114143F037534F7B6200002040000AB +:10813000098000000000820002020000408200006E +:108140000400000000000000880020002000000063 +:1081500020000000000000000000000020000000DF +:1081600000000800000284048404000300002000D2 +:108170000000200004000000000484000000200033 +:10818000840082004000C0000204000000002100C2 +:10819000000021002004000020000408C00020008E +:1081A00040204010000004008204C0044000800011 +:1081B0000000A010000000000004A10000008003E7 +:1081C000000000000000000000020000000040006D +:1081D000000000000000000000900000000000000F +:1081E0000000000080000040000200080000400085 +:1081F000000000000000000000000002000200007B +:108200000400000000000000000000000902090056 +:108210001000049040008000400080020002000036 +:1082200040008401800104000000110200000000F1 +:108230000200000000400200000000900340020025 +:1082400041800000201008400200000002100000E1 +:108250000200001002000000020002000000000006 +:10826000000002000000000002000000000000000A +:1082700000000000000000000000000084008500F5 +:108280000000200000000200040004C004000200FE +:108290004090010502000000000003000000820081 +:1082A00001000000030002000100000003000204BE +:1082B0000208000000000400000800080410021179 +:1082C0000000C002000020000408000000000000C0 +:1082D000000200000000000000080204000000008E +:1082E0000000200000000000000800000000000066 +:1082F00000000000030000000000008404000000F3 +:10830000040000000200000000000208024100001A +:10831000000480031040000800000000200000005E +:108320000200200020002008040020040200200099 +:10833000000100008800C0050010000000000900D6 +:1083400002004000400000000000000000000000AB +:10835000000000000000020000000000000000001B +:108360000400000000000000000000000000000009 +:10837000080000004000000800000010000000009D +:1083800000020000000000000008000000200000C3 +:1083900000000000000010000000000000808821A4 +:1083A000040001000000000382021000000082416E +:1083B000000000000000000000000001000041007B +:1083C0008800830000008000000000000000001012 +:1083D00010000000000000000000000000001084F9 +:1083E000080008100000000000000000000000006D +:1083F00000008000000000000000410000000000BC +:108400000000000000000300000000C04100000068 +:10841000000000000800000080A0000003080040E9 +:1084200000A08310040200080010000121A000A099 +:1084300000104190000082000000820000009000C7 +:108440000000000005000009010400000000000019 +:108450000000000000040000000000000000000018 +:108460000000000008000000000000040000000000 +:1084700000000000000000000808000000000000EC +:1084800040000000000088000400000000004000E0 +:108490002004050408000182200020002004901020 +:1084A0000880040200002020A00000800902401182 +:1084B0008200080408208420000000000000000062 +:1084C000000000200000020000004000000000004A +:1084D000000000000000000000000000000000009C +:1084E000000000000000000000000000000000008C +:1084F0000000000000100000000000000004000068 +:10850000000000000000000000000000001000005B +:1085100000008800200000002003800080009100FF +:10852000000000200300400088000000000440011B +:108530000900000000C100210301C0000000C020AC +:1085400008000020C0000000000000000000000043 +:10855000000000000000000000000000000000001B +:10856000000000000000000000000000000000000B +:1085700020000000000000000800000000000000D3 +:1085800000080011A0000000000000000000000032 +:10859000000000000000200000000000C0002100DA +:1085A00000002000830000808220C0000005000041 +:1085B000A000C0100010C021A000A0080000000012 +:1085C000000000000000002000200000000000006B +:1085D0000000000000000000000000000900000092 +:1085E0000000000000000000000000000900202042 +:1085F000002008A00000000000A0002000000000F3 +:10860000000000000000000000000000000000006A +:108610000000000000000000A10021000800090087 +:10862000900020108000048800400901401003A041 +:108630000500100020100884090000882184000033 +:1086400008004000C0000200000008041000000004 +:10865000000000000000000000000000000000001A +:10866000000000000000000000000000000000000A +:1086700000210000000000000000000000000000D9 +:1086800008110000002100000000000000000000B0 +:10869000000090009000000000000000008000003A +:1086A00000114008400589804020882120100400E6 +:1086B000880000008889088000909183410941006A +:1086C0000000000000000000A000000000002000EA +:1086D000080000000000040000000000000000008E +:1086E000000000000000000000000000000000008A +:1086F0000000000000000000004000080990400059 +:108700000000000000000000000009000000000060 +:10871000000000000020000000000000000008042D +:1087200000000000000100A0200200000000000086 +:1087300000000084000000020004202004200482C5 +:108740000400000000001000000141A0009000A003 +:10875000A004000000010001000000000000000073 +:108760000000000000000000000000000000000009 +:1087700000000000000000000000C0000000000039 +:108780009000000000000000000000000000000059 +:1087900000000000000000000000000000000800D1 +:1087A000080000000001000100010001020090002B +:1087B00000008200A08200820220A00201000000CE +:1087C000010000000005080388050040A00000002B +:1087D00000800000000500100020000500000000DF +:1087E0000000000000000000000000000000000089 +:1087F00000000000000000000000000080000000F9 +:108800000000000000000000000000000000000068 +:108810000000000000000000000000000000000058 +:10882000090084000000004000400208002191007F +:108830008000110080008000100091000080200066 +:108840000000400000001100210008001008000096 +:1088500000A1008500000080000000000010000062 +:108860000000000000000000000000000000000008 +:108870000000000000000000000000000000800078 +:1088800000048080000000000000000000000000E4 +:1088900000000000000000000000000000000000D8 +:1088A00080400000000300000002000300820080FE +:1088B000000800800041008020408509C0409100F0 +:1088C0000005008000400080000801000100010157 +:1088D0000000000200020000000200000000000191 +:1088E0000000000000000000000000000000000088 +:1088F0000000000000000000000000000000000078 +:1089000008008401A00840000000000000000000F2 +:1089100000000000000000000082000000000000D5 +:1089200000000800040002018800000100010009A5 +:1089300000A0A001C0048400820482000200A110F3 +:10894000904000000020000100080001000100012B +:1089500000000090000400028204000000000000FB +:108960000000000000000000000000000000000007 +:1089700000000000000000000000000000000000F7 +:1089800000000088000800C0008200000000000015 +:1089900000000000000000000000000000000000D7 +:1089A0000000000000002000000100000000820024 +:1089B0000000010101A0C08404A00182041140A1B3 +:1089C0000883090400008400400000000021051015 +:1089D0002021002000000080008080800000000036 +:1089E0004100000000000000000000000000000046 +:1089F0000000000000000000000000000000000077 +:108A00000000000000000000000011000000000055 +:108A10000000000000000000000000000000000056 +:108A2000000000000000000400020008200400090B +:108A30000900090840410400800080004100808254 +:108A40000082801010200900000080000300030055 +:108A500010000880400000000040000000002102DB +:108A60004000050040000000000000000000000081 +:108A700000000000000000000000000000000000F6 +:108A800000000000000080008000000000000000E6 +:108A900000000000000000000000000800000000CE +:108AA00000000000000000000000008000800000C6 +:108AB0000000000900008000001100A100800000FB +:108AC0000010000400000004002000090000000065 +:108AD0000088010000080100200082002000400002 +:108AE0000101000000000000000000000000000084 +:108AF0000000000000000000000000000000000076 +:108B0000000000000000000010008200C082900001 +:108B10000000000000000000000000000001000054 +:108B20000000000000000000000000000008000835 +:108B30000000C000C0008800820000000002008425 +:108B4000000082898289880820010001000000005D +:108B50000000000000E00000000000000000000035 +:108B60000000000000000000000000000000000005 +:108B700000000000000000000000000000000000F5 +:108B800000000000000000000000000000000000E5 +:108B90006000000000000000000000000000000075 +:108BA000070000000000000000000000000000E0DE +:108BB00000000000000000E000000000000000E0F5 +:108BC00007008212008100E007000000000000E0C2 +:108BD000070000000000000000000000FF00FF0090 +:108BE00030720000000000000000000000000000E3 +:108BF0000000000000000000000000000000000075 +:108C0000000000000000000000000000FF0FF00066 +:108C10003C66F0FF000000000000000000000000C3 +:108C20000000000000000000000000000000000044 +:108C300000000000000000000040000000000000F4 +:108C400000001B1B00C30FC30099C300C3FF00003B +:108C500000000000000000000000000000009191F2 +:108C600010100000000000000000000000000000E4 +:108C700000000000000000000000000000000000F4 +:108C80000000000000000000000000000000363678 +:108C900036363C66F00000000000000000000000D6 +:108CA00000000000000000000000000000000000C4 +:108CB00000000000000000000000000000000000B4 +:108CC000000000001B1B3CFF0FC3FF99990F990F79 +:108CD0000000000000000000000000000000000094 +:108CE0000000000000000000000000000000000084 +:108CF0000000000000000000000000000000000074 +:108D00000000000000000000000000000000000063 +:108D10000000000000000000000000000000000053 +:108D20000000000000000000000000000000000043 +:108D30000000000000000000000000000000000033 +:108D40000000000000000000000000000000000023 +:108D50000000000000000000000000000000000013 +:108D6000000004FB00000000000000000000000004 +:108D700000000000000000000000000000000000F3 +:108D800000000000000000000000000000000000E3 +:108D90000000000000000CFCFFFF000000000000CD +:108DA00000000000000000000000000000000000C3 +:108DB0000000000000000000000040000000000073 +:108DC00000000000000000003CFF272700C3F099CE +:108DD000000F000F00000000000000000000000075 +:108DE000FFFFFFFF04FB0000000000000000000088 +:108DF0000000000000000000000000000000000073 +:108E00000000000000000000000000000000000062 +:108E10000000000000000000000000000000000052 +:108E20000000000000000000000000000000000042 +:108E30000000000000000000000000000000000032 +:108E40000000000000000000000000C32727FFC34F +:108E5000F09902020E0E0000000000000000006108 +:108E60000007000900010000300000100000006150 +:108E70000006000D000000000000000000000000DF +:108E800000000000000000000000000000000000E2 +:108E900000000000000000000000000000000000D2 +:108EA000000000000000000000000008000000A01A +:108EB000000000000000000000610007000D00013C +:108EC00000610007000D000005610A0F051D00A1EB +:108ED0000061002F050D00A005610A0F050D00A01F +:108EE00082BEC0C0FFFF20FF0000000000000000A5 +:108EF0002A6B6B2A00000000000000000000000048 +:108F00000000000000000000000000000000000061 +:108F10000000000000000000000000000000000051 +:108F20000000000000000000000000000000000041 +:108F300000000000000000000000000000000080B1 +:108F400000000000000000C3003C00000000000022 +:108F500000000000000083B38FBF0000000000008D +:108F6000000082BEFCFCFFFF20200000000000008B +:108F70000000024343020000000000000000000067 +:108F800000000000000000000000000000000000E1 +:108F900000000000000000000000000000000000D1 +:108FA00000000000000000000000000000000000C1 +:108FB00000000000000000000000000000000000B1 +:108FC000000000000000000000C3003C00000000A2 +:108FD000000000000000000080B08CBC0000000019 +:108FE0000000000017FF173C030000FF0000000016 +:108FF000000000000C000000000000000000000065 +:109000000000000000000000000000000000000060 +:109010000000000000000000000000000000000050 +:109020000000000000000000000000000000000040 +:109030000000000000000000000000000000000030 +:10904000000000000000000000040000000000001C +:109050000000000000000000000000100000000000 +:1090600000000000000017C317000300000000000C +:1090700000000000000000000000000000000000F0 +:1090800000000000000000000000000000000000E0 +:1090900000000000000000000000000000000000D0 +:1090A00000000000000000000000000000000000C0 +:1090B00000000000000000000000000000000000B0 +:1090C00000000000000000000000000000000000A0 +:1090D0000000000000000000000000000000000090 +:1090E00000000000000000000000000088000000F8 +:1090F0000000000000000040200000000000000010 +:1091000000008402000000000000000000000000D9 +:10911000000000020000000020000000000000002D +:10912000000020000180008000030000000000001B +:10913000400400800000008840840400000000001B +:1091400000000400200000000000000084008800EF +:1091500084020400004100000400200020004000C0 +:10916000880200002000000089004000000000008C +:1091700000024100000200000001000000000000A9 +:1091800000900000000000000000000000000090BF +:1091900000041090000000000000100000040040D7 +:1091A00000004040000002100002000040400000AB +:1091B00000000000002000000040402020000000CF +:1091C000400000400000000000000000050000001A +:1091D0000400000400000000000000000000800007 +:1091E000040000200000000000004000000000001B +:1091F0000400820040004000000002000000040063 +:1092000000000010820000000000000000000000CC +:109210000000020000000000000000000800020042 +:1092200002000010020500100000004100000000D4 +:109230000000000002000000020004000010020014 +:109240000000020000000200000000000400000016 +:109250000000000800000000000000008200030081 +:1092600003000300830000000200000002800000F1 +:109270000008000800088000840000008208000048 +:109280000000000004080002200000000484000028 +:1092900000020010000800000000000002100000A2 +:1092A0000000000000400008000000000000000076 +:1092B0000400000000000408000000000000000896 +:1092C000200000000000020000100000000000006C +:1092D00000000000000000080000110000102084C1 +:1092E0000400040804080400040000040000054011 +:1092F00000000000080000000200000000008800DC +:1093000082000000000000000008000000100000C3 +:10931000000000000000C000400000000000000845 +:1093200000000000000000000000000000800000BD +:10933000000000000000000000000003000000002A +:109340000000000000000000000000000008000015 +:109350000008000084000000000020000000200041 +:109360000400010000000000200020000000820036 +:109370000008000041000000210000000000000083 +:1093800000000000000000000000000000000000DD +:1093900000000000000000000000000000000000CD +:1093A000000000000000000000000020000000207D +:1093B00000000000000000000000000000000000AD +:1093C0000000000000004100000821000000000033 +:1093D000000000000000000000000000210010203C +:1093E00011004000200000000000214008C003825E +:1093F000008200000800004100000000000000049E +:10940000000000000000004000001000000000000C +:1094100000400000000000400000000000000000CC +:1094200000000000000500000041000000040004EE +:109430000084008400000000000000000000000024 +:109440000000000000000010000088000000200064 +:109450000409000088002000840090001000000330 +:1094600082004005820382004011A0044040014078 +:10947000A100414041A000000000030000000800DE +:10948000000011000000000000000000200000406B +:109490000000000000000000004008002100000063 +:1094A00000000000000000000000000000000001BB +:1094B0000001002100210000001000000000000059 +:1094C000000000000000000000200000000000007C +:1094D0000000000004000400200000000000000064 +:1094E00000000000000008000800009000000000DC +:1094F00020002000A0002008820008000000820058 +:10950000000000000000000000000000002000003B +:109510000400000000000000000000000000000047 +:109520000000040000000000C000000000009000E7 +:109530000000040001000000000004000000000022 +:10954000100000000000C000000000030008002020 +:1095500000410000000000000011000000000000B9 +:109560000000000000000000A00000002000000932 +:10957000200900000000000010004000090403045E +:1095800000884100000000002100030000000500E9 +:1095900000000000000000000000000000000000CB +:1095A00003000000000000000000000000000000B8 +:1095B00004000000802020000000000000000000E7 +:1095C0000000020000000000001002000000000087 +:1095D00000000000000000000000008400C0000047 +:1095E0000000081011000408000000000800C0C0BE +:1095F00003048088090000000900009000000400B6 +:109600000000040000000000000000000000001046 +:10961000001000090000000000000400000000002D +:10962000000000000000000000000000100000002A +:1096300000000000002000000000000000000010FA +:1096400000000000000000000000000010000020EA +:109650000040000000200000000000000000880022 +:1096600000000000081082000400400008002000F4 +:109670008200200400800100010041002000000061 +:10968000000000000000000000000000000020407A +:109690000000110000020000000000000040000077 +:1096A0000000020000000000020000000000004076 +:1096B00000000000000000010090000020400000B9 +:1096C0004100000000001000000000000000000049 +:1096D000000000000000000000000000000000008A +:1096E0000000000000000900000000000000080465 +:1096F00089000000C101090410001090109091042D +:109700000000000000000000004004040088A020C9 +:109710000000000000000000000000000000000049 +:109720000000000000000000000000000000000039 +:109730000000000000000000890091008900820004 +:1097400000000000000000000000088808020084FB +:1097500002100000000000000000000000000000F7 +:1097600000000000000000000000000000000000F9 +:109770000000000040000000000000900088908879 +:1097800000880000000000000000002080A0000908 +:109790000040000000000000000000000000000089 +:1097A00000000000000000000000000000000000B9 +:1097B000000000000000000000001100A0004000B8 +:1097C0008000000000000000000000000000800099 +:1097D0000080800000000000000000000000000089 +:1097E0000000000000000000000000000000000079 +:1097F00000000000000000000500000000800000E4 +:1098000089800080000000000000000000000005CA +:1098100000800003000000000000000000000000C5 +:109820000000000000000000000000000000000038 +:10983000000000000000000000000000000900100F +:1098400000C0000000000000000000000000000058 +:1098500000108080808000000000000000000000F8 +:1098600000000000000000000000000000000000F8 +:109870000000000000000040008000030000090517 +:10988000204104054100000000000000000000909D +:10989000009000A000010000000000000000000097 +:1098A00000000000000000000000000000000000B8 +:1098B00000000000000000000000000000000000A8 +:1098C000008500410084000000000000000000004E +:1098D00090009001A08290100000000000000000A5 +:1098E0000000000000000000000000000000000078 +:1098F000000000000000000000000004000100045F +:109900000000010101A001000000000000000000B3 +:1099100040020008850241840000000000000000B1 +:109920000000000000000000000000000000000037 +:109930000000000000000000000000000000000027 +:109940000008049084A101C1000000000000000094 +:1099500000009008008800200210000000000000B5 +:1099600000000000000000000000000000000000F7 +:109970000000000000000000000000000200820063 +:109980000000A00084010001C101000000000000EF +:10999000000080000380850010000000000000002F +:1099A00000000000000000000000000000000000B7 +:1099B00000000000000000000000000000000000A7 +:1099C00000000905008300200411000000000000D1 +:1099D0000000000080000000000000800000000087 +:1099E0000000000000000000000000000000000077 +:1099F00000000000000000000000000005008000E2 +:109A000000000500001180114109414100000000E3 +:109A100000000000A10040000300890000000000D9 +:109A20000000000000000000000000000000000036 +:109A30000000000000000000000000000000000026 +:109A400000000000800200218000000000000000F3 +:109A500000000000000080098011008080000000EC +:109A600000000000000000000000000000000000F6 +:109A700000000000000000000000000000000000E6 +:109A8000004000000080008404400000000300004B +:109A900000000000000041009000400010000000A5 +:109AA00000000000000000000000000000000000B6 +:109AB00000000000000000000000000000000000A6 +:109AC0000000000000009000A0000200C0000000A4 +:109AD0000000000000000000C000A004A01008006A +:109AE0000000000000000000000000000000000076 +:109AF0000000000000000000000000000000000066 +:109B0000000000010000000200890301040084013C +:109B10000000000000000000000000000000000045 +:109B20000000000000000000000000000000000035 +:109B30000000000000000000000000000000000025 +:109B40000000000000000000000000E0070000002E +:109B5000000000000000000000000081000007007D +:109B600000000000000000000000000000000000F5 +:109B700000000000000000000000000000000000E5 +:109B80000000000000E007000000000000E000000E +:109B90004106000000000000000000000000FFF08F +:109BA0003F30000000000000000000000000000046 +:109BB00000000000000000000000000000000000A5 +:109BC0000000000000000000000041CF410CF0FF49 +:109BD000AA3C00000000000000000000FFFF0000A1 +:109BE000F000F00000000000000000000000000095 +:109BF0000000000000000000000000000000000065 +:109C00000000000000000000000000000000000054 +:109C10000000000000000000000000003030505F35 +:109C20000F003F30000000000000000000000000B6 +:109C30000000000000000000000000000000000024 +:109C40000000000000000000000000007DCF7D0C3F +:109C5000F000AA3C00000000000000000000B4B4C6 +:109C600000FFF010F0000000000000000000000005 +:109C700000000000000000000000000000000000E4 +:109C800000000000000000000000000000000001D3 +:109C900000010000000000000000000000000014AF +:109CA00000140000000000000000000000000000A0 +:109CB00000000000000000000000000000000000A4 +:109CC0000000000000000000000000000000000094 +:109CD0000000000000000000000000000000000084 +:109CE000000800283000D0F0000000000000000054 +:109CF0000000000000000000000000000000000064 +:109D00000000000000000000000000000000000053 +:109D1000FF00FF0000000000000000000000000045 +:109D200000AF00050000000000000000000000007F +:109D30000000000000000000000000000000000023 +:109D40000000000000000000000000000000000013 +:109D50000000000000000000000000000000000003 +:109D60000000FFDFFFD72000C0F00000000000006F +:109D700000000000000000000000000000000000E3 +:109D800000000000000000000000000000000000D3 +:109D90000000FF00FD0000000000000000000000C7 +:109DA000000000613006000D00000000000000000F +:109DB00000000000000000000000000000000000A3 +:109DC0000000000000000000000000000000000093 +:109DD000000085610A0F050D00A0000000000000D2 +:109DE00000000000A00000280000000000000000AB +:109DF0000000000000000000000000000000000063 +:109E000000000000000000000000000005610A0FD3 +:109E1000050D00A080004007000C000000000000BD +:109E2000000000003CAF3CAF00000000000000005C +:109E30000000000000000000000000000000000022 +:109E40000000000000000000000000000000000012 +:109E5000000000000000000055C355C300000000D2 +:109E600000000000000000000000000000000000F2 +:109E700000000000000000000000000000000000E2 +:109E800000000000000000000000000000000000D2 +:109E90000000000000000000FF003C3C0500000046 +:109EA000000000000000FFAF00AF00000000000055 +:109EB00000000000000000000000000000000000A2 +:109EC0000000000000000000000000000000000092 +:109ED00000000000000000000000FF0F000F000065 +:109EE0000000000000000000000000000000000072 +:109EF0000000000000000000000000000000000062 +:109F00000000000000000000000000000000000051 +:109F100000000000000000000000FF003C3C0500C5 +:109F20000000000000000000F0F030F00000000031 +:109F30000000000000000000000000000000000021 +:109F40000000000000000000000000000000000011 +:109F50000000000000000000000000000000000001 +:109F600000000000000000000000000000000000F1 +:109F700000000000000000000000000000000000E1 +:109F800000000000000000000000000000000000D1 +:109F9000000000000000000000000000FFFF00FFC4 +:109FA00000000000000000000000B0B0F0F0000071 +:109FB00000000000000000000000000000000000A1 +:109FC0000000000000000000000000000000000091 +:109FD0000000000000000000000000000000000081 +:109FE0000000000000000000000000000000000071 +:109FF0000000000000000000000000000000000061 +:10A000000000000000000000000000000000000050 +:10A010000000000000000000000000000000000040 +:10A0200000FF01010000000000000000000000002F +:10A030000000000000000182000008000000000095 +:10A040000004000000000400000004000400000000 +:10A0500000000000000000040000200002000402D4 +:10A0600000000000000300000400100020000000B9 +:10A0700000000004000400000000000020000000B8 +:10A0800000000004040000002100000000000400A3 +:10A09000040000040004000000000200200000048E +:10A0A000010000002000000000000000000000028D +:10A0B0000000090200400000044000008000000091 +:10A0C000400000400002000000020000000000020A +:10A0D0000002400200024090000200020002000064 +:10A0E000000000020004000000000000000000006A +:10A0F0001000000000000000000000000000000050 +:10A100000000400000000082000004002000030066 +:10A1100080008000000200900000040000000200A7 +:10A1200000012000000240020000000000000010BA +:10A130000800000000000840900002020010020029 +:10A140000200000000008200020002000200000085 +:10A150000000000002000000020002008200000077 +:10A1600001000200000020000000000000000000CC +:10A170000000900000000000000008000000000047 +:10A1800000000200820000008200000002000204C1 +:10A1900000000200000001000800000000000000B4 +:10A1A0000100000002000200040040004000000026 +:10A1B0000000000000000000040004008000000017 +:10A1C0000400000000000000204000000400000027 +:10A1D000000000000000000005000000000000007A +:10A1E00000002000000000008008000000002000A7 +:10A1F0000000000000000210000000000000040049 +:10A200000000000800000400020002080000000036 +:10A2100000000000040004840400000000000000AE +:10A2200000000408000000000000000840000400D6 +:10A230009000040000000000000002000400000084 +:10A240000000000000000000000000080000000006 +:10A2500000000021000000000000020000000000DB +:10A2600000000008000000000400000000000400DE +:10A2700000000000000000000003000300000000D8 +:10A2800000000000000000000800000000000000C6 +:10A29000000001030800000000000000A000000012 +:10A2A00000800000A00091000008010000100800DC +:10A2B0004100000003000000000021000000000039 +:10A2C000000000000000000000000000000000008E +:10A2D000000000000000000000000000000000007E +:10A2E00000000000000000000000800000000000EE +:10A2F000000000004000000000000000000000001E +:10A300000000000000A000000000080000000000A5 +:10A310000000000004000000000000000000002019 +:10A32000000000200000000020000000204041400C +:10A3300000000000000000400000000000020000DB +:10A340000000000000000800000000000000040001 +:10A350000000000900008205000900000000000262 +:10A36000000500110041004100C10004011100007E +:10A3700000000004000000000000000000000000D9 +:10A3800000000000041000000000080000000000B1 +:10A3900000000000002000000000880220000400EF +:10A3A000054004000500048008200002040090001D +:10A3B000000000000800042002200000000000004F +:10A3C00000000002000000000088000000000400FF +:10A3D00040000000000000000000000000004000FD +:10A3E00010020000000000000000002000012040DA +:10A3F00000000000000000000000000000000082DB +:10A400000000000000000000000000000000080044 +:10A41000000000000040000000000008400005406F +:10A42000808884A08000A00080041101000000004A +:10A4300041000500000000000000080000000000CE +:10A440008800000000000000000000000000000084 +:10A4500000000000000000000000000000000000FC +:10A46000000000000000000000000000010000806B +:10A470000020048000000000000000000000000038 +:10A4800000000000000000100010000000000000AC +:10A4900000000000000000800000000000008200BA +:10A4A0000008880000000480C0000000C080A000F8 +:10A4B000A000828083002004000000000000210032 +:10A4C0000300030003A000000000000000000000E3 +:10A4D000000000000000000000000000000000007C +:10A4E00000000000000000000000000000C00400A8 +:10A4F000002000018020000000000000000000009B +:10A500000800000800040500000000000000000032 +:10A510000000000000000000002000000000020019 +:10A52000000000000004000080040000000000049F +:10A5300000C0100000402084080000000800000057 +:10A540000000000002000000000000000000000009 +:10A5500000110000002008000000000000000000C2 +:10A5600000000000000000400000000000000000AB +:10A5700000110100000000000000000000000000C9 +:10A5800000000000000000000000000000000000CB +:10A59000000020000000000000000400040004008F +:10A5A0000400400020000000200002000200010022 +:10A5B000200090000000C0002000410000000000CA +:10A5C0000000080000004100000000000000000042 +:10A5D0001000000000C00020000000000088000003 +:10A5E00021840088000800000340000000000000F3 +:10A5F0000300020020200000000000000000020014 +:10A600001100008800000010000000000000001091 +:10A61000000000000000000000000000800080003A +:10A620008004820000000000000000000090000094 +:10A630002000000003022000000080000000000055 +:10A64000000000000000000000000000C000C08406 +:10A650000082A0A000000000000000000000000038 +:10A6600000000000000000000000000000000000EA +:10A67000000000000000900000000000000000004A +:10A6800000000000000000000000000000000000CA +:10A6900000000000000000000000000000000000BA +:10A6A00000000000000000000000000000000000AA +:10A6B00000000100000009040420018204080000D9 +:10A6C000000000000000000000000000000080000A +:10A6D00000000080000000000000000000000000FA +:10A6E000000000000000000000000000000000006A +:10A6F00000000000000011008000020000000000C7 :10A700000000000000000000000000000000000049 :10A710000000000000000000000000000000000039 :10A720000000000000000000000000000000000029 -:10A730000000000000000000000000000000000019 +:10A730000000000004000000208080002080000055 :10A740000000000000000000000000000000000009 -:10A7500000000000000000000000000000000000F9 +:10A750000000004100210000000000000000000097 :10A7600000000000000000000000000000000000E9 -:10A7700000000000000000000000000000000000D9 +:10A770000000000000000000000800000041008010 :10A7800000000000000000000000000000000000C9 :10A7900000000000000000000000000000000000B9 -:10A7A00000000000000000000000000000000000A9 -:10A7B0000000000000000000000000000000000099 -:10A7C0000000000000000000000000000000000089 -:10A7D0000000000000000000000000000000000079 +:10A7A0000000000000000000000000000080000029 +:10A7B00000800005008000100000000380888003F6 +:10A7C0000080000000000000000000000000000009 +:10A7D0000000000000A000210000000000000000B8 :10A7E0000000000000000000000000000000000069 -:10A7F0000000000000000000000000000000000059 -:10A800000000000000000000000000000000000048 +:10A7F00000000000000000000000000100C0000098 +:10A8000000C0000000000000000000000000000088 :10A810000000000000000000000000000000000038 -:10A820000000000000000000000000000000000028 -:10A830000000000000000000000000000000000018 -:10A840000000000000000000000000000000000008 -:10A8500000000000000000000000000000000000F8 +:10A820000000000000000040000000820000000462 +:10A83000000000040000000400010084040010C0B7 +:10A840004084A0C0000000000000000000000000E4 +:10A8500000000000080800000082A01000000000B6 :10A8600000000000000000000000000000000000E8 -:10A8700000000000000000000000000000000000D8 -:10A8800000000000000000000000000000000000C8 +:10A870000000000000000000000000000000C00018 +:10A88000C000000000000000020000000000000006 :10A8900000000000000000000000000000000000B8 -:10A8A00000000000000000000000000000000000A8 -:10A8B0000000000000000000000000000000000098 -:10A8C0000000000000000000000000000000000088 -:10A8D0000000000000000000000000000000000078 +:10A8A0000000000000000000000082000000000026 +:10A8B0000000040000000000A0000200010091C0A0 +:10A8C00040A0C010848800000000000000000000CC +:10A8D0000000000000000080000000008000000078 :10A8E0000000000000000000000000000000000068 -:10A8F0000000000000000000000000000000000058 -:10A900000000000000000000000000000000000047 +:10A8F0000000000000000000000000000000040054 +:10A900008000000041000000000080000000000006 :10A910000000000000000000000000000000000037 -:10A920000000000000000000000000000000000027 -:10A930000000000000000000000000000000000017 -:10A940000000000000000000000000000000000007 -:10A9500000000000000000000000000000000000F7 +:10A920000000000000000000050000000000000022 +:10A93000050000008000000003000000800002000D +:10A940004100000080000500000000000000000041 +:10A950000000000000000000000400218000000052 :10A9600000000000000000000000000000000000E7 :10A9700000000000000000000000000000000000D7 -:10A9800000000000000000000000000000000000C7 +:10A9800000000002000000000000000000000000C5 :10A9900000000000000000000000000000000000B7 -:10A9A00000000000000000000000000000000000A7 -:10A9B0000000000000000000000000000000000097 +:10A9A0000000000000000000000000000020000087 +:10A9B0000000000000040000000000000020000073 :10A9C0000000000000000000000000000000000087 -:10A9D0000000000000000000000000000000000077 -:10A9E0000000000000000000000000000000000067 +:10A9D00000000000000000000000C0011020040082 +:10A9E0000200000000000000000000000000000065 :10A9F0000000000000000000000000000000000057 :10AA00000000000000000000000000000000000046 :10AA10000000000000000000000000000000000036 -:10AA20000000000000000000000000000000000026 -:10AA30000000000000000000000000000000000016 -:10AA40000000000000000000000000000000000006 -:10AA500000000000000000000000000000000000F6 -:10AA600000000000000000000000000000000000E6 +:10AA20000000000000000000000000000000000125 +:10AA30000000000000000000000000000000000115 +:10AA40000000000090000890C090C00000000000CE +:10AA500000000000000000000000000000060000F0 +:10AA6000070042000000000000000000000000009D :10AA700000000000000000000000000000000000D6 -:10AA800000000000000000000000000000000000C6 +:10AA800000000000000000E00700820A0000000053 :10AA900000000000000000000000000000000000B6 :10AAA00000000000000000000000000000000000A6 -:10AAB0000000000000000000000000000000000096 -:10AAC0000000000000000000000000000000000086 -:10AAD0000000000000000000000000000000000076 -:10AAE0000000000000000000000000000000000066 +:10AAB0000000070000000000000007000000000088 +:10AAC00000E007000000000000E000004842000035 +:10AAD00000000000000000000000000000003F3FF8 +:10AAE0009F0F81E781E700000000000000000000E8 :10AAF0000000000000000000000000000000000056 :10AB00000000000000000000000000000000000045 :10AB10000000000000000000000000000000000035 :10AB20000000000000000000000000000000000025 :10AB30000000000000000000000000000000000015 -:10AB40000000000000000000000000000000000005 +:10AB400000000000000000002040108020044002AF :10AB500000000000000000000000000000000000F5 -:10AB600000000000000000000000000000000000E5 +:10AB600030309000FFFF00000000000000000000F7 :10AB700000000000000000000000000000000000D5 :10AB800000000000000000000000000000000000C5 :10AB900000000000000000000000000000000000B5 :10ABA00000000000000000000000000000000000A5 :10ABB0000000000000000000000000000000000095 -:10ABC0000000000000000000000000000000000085 -:10ABD0000000000000000000000000000000000075 +:10ABC000000000000000000000000402080110085E +:10ABD00080010000000000000000000000000000F4 :10ABE0000000000000000000000000000000000065 :10ABF0000000000000000000000000000000000055 :10AC00000000000000000000000000000000000044 @@ -84697,30 +84697,30 @@ :10AC30000000000000000000000000000000000014 :10AC40000000000000000000000000000000000004 :10AC500000000000000000000000000000000000F4 -:10AC600000000000000000000000000000000000E4 +:10AC600000000000273F273F9999999900000000B4 :10AC700000000000000000000000000000000000D4 :10AC800000000000000000000000000000000000C4 :10AC900000000000000000000000000000000000B4 :10ACA00000000000000000000000000000000000A4 :10ACB0000000000000000000000000000000000094 :10ACC0000000000000000000000000000000000084 -:10ACD0000000000000000000000000000000000074 -:10ACE0000000000000000000000000000000000064 +:10ACD00088440088004400000000000000000000DC +:10ACE000000000000000031B031B999999990000C4 :10ACF0000000000000000000000000000000000054 :10AD00000000000000000000000000000000000043 :10AD10000000000000000000000000000000000033 :10AD20000000000000000000000000000000000023 :10AD30000000000000000000000000000000000013 :10AD40000000000000000000000000000000000003 -:10AD500000000000000000000000000000000000F3 -:10AD600000000000000000000000000000000000E3 +:10AD5000884400008800440000000000000000005B +:10AD6000000000000000000000000E2800000001AC :10AD700000000000000000000000000000000000D3 :10AD800000000000000000000000000000000000C3 -:10AD900000000000000000000000000000000000B3 +:10AD900005610A0F050D00A0000000000000000082 :10ADA00000000000000000000000000000000000A3 -:10ADB0000000000000000000000000000000000093 -:10ADC0000000000000000000000000000000000083 -:10ADD0000000000000000000000000000000000073 +:10ADB0000000000000000000000005000A08050077 +:10ADC00000A005000A08050000A005610A0F050D96 +:10ADD00000A060610007000D1000000000000000EE :10ADE0000000000000000000000000000000000063 :10ADF0000000000000000000000000000000000053 :10AE00000000000000000000000000000000000042 @@ -84753,437 +84753,437 @@ :10AFB0000000000000000000000000000000000091 :10AFC0000000000000000000000000000000000081 :10AFD0000000000000000000000000000000000071 -:10AFE0000000000000000000000000000000000061 -:10AFF0000000000000000000000000000000000051 -:10B000000000000000000000000000000000000040 -:10B010000000000000000000000000000000000030 -:10B020000000000000000000000000000000000020 -:10B03000000000000400000000000000000000000C -:10B040000000000000000000000000000000000000 -:10B0500000000000000000000000000000000000F0 -:10B0600000000000000000000000000000000000E0 -:10B0700000000000000000000000000000000000D0 -:10B080004000000000000000000000000000000080 -:10B0900000000000000000000000000000000000B0 -:10B0A00000000000000000000000000000000000A0 -:10B0B0000000000000000000000000000000000090 -:10B0C0000000000000000000000000000000000080 -:10B0D0000000000000000000000000000000000070 -:10B0E0000000000000000000000000000000000060 -:10B0F000000000000000000000000100000000004F -:10B10000000000000000000000000000000000003F -:10B11000000000000000000000000000000000002F -:10B12000000000000000000000000000000000001F -:10B13000000000000000000000000000000000000F -:10B1400002000000020000000000000000000000FB -:10B1500000000000000000000000000000000000EF -:10B1600000000000000000000000000000000000DF -:10B1700000000000000000000000000020000000AF -:10B1800000000000000000000000000000000000BF -:10B1900000000000000000000000000000000000AF -:10B1A000000000000000000000000000000000009F -:10B1B000020000000000000000000000000000008D -:10B1C0000000040000000000040000000000000077 -:10B1D000020000000000000000000000000000006D -:10B1E0000000040004000000000000000000000057 -:10B1F000000000000000000000000000000000004F -:10B20000000000000000000000000000000000003E -:10B21000000000000000000000000000000000002E -:10B22000000000000000000000000000000000001E -:10B23000000000000000000000000000000000000E +:10AFE0000000000000021010200402008800000091 +:10AFF0000000000000000000000800000000000049 +:10B0000000000000000000000580010001000000B9 +:10B010004080000001000000A084000000800000CB +:10B020000000000300000004000040800000020057 +:10B0300000000000000000000010000400000000FC +:10B040000008004010000000000000800000200008 +:10B050000000010000008800000000040000000063 +:10B06000000004000002004180014000000000C018 +:10B0700000000000000000000002000200020000CA +:10B080000000000008000000009040404002400026 +:10B090000000000210000400000021200000002039 +:10B0A00000000900000000000001100080101000E6 +:10B0B000000000000000000000000000040000008C +:10B0C00040000002000100000000400000200000DD +:10B0D0000000000040000000000000000000000030 +:10B0E00005000000000085800000010010100040F5 +:10B0F00008000000030902000800020002004000EE +:10B1000004001000020004000000040000102000F1 +:10B110000000000000000200020000000200000029 +:10B120000000010005000000000000000000000019 +:10B1300000000040000000000000020000000000CD +:10B140000200000002000000000090000000C000AB +:10B15000000001000100000000000000820000006B +:10B160000000020000000000020241000800800010 +:10B1700000008408050088A0000080000000820014 +:10B18000800000008200040080000000A000204039 +:10B190000082041000000000000000000000000811 +:10B1A0000000000820000410000000000000000063 +:10B1B0002000000000000000000000000900000066 +:10B1C000000211000002000000000000000000006A +:10B1D0000400000004000400000000000000000063 +:10B1E000030000000000000403004082000004008F +:10B1F00084000000000000000000000000000000CB +:10B2000000000240000000000000002100000000DB +:10B2100004004000100000000000000900000000D1 +:10B22000000000001000000000000000000000000E +:10B230000000000088004000000500000000000041 :10B2400000000000000000000000000000000000FE -:10B2500000000000000000000000000000000000EE -:10B2600000000000000000000000000000000000DE -:10B2700000000000000000000000000000000000CE -:10B2800000000000000000000000000000000000BE +:10B2500000000000000000000000C000000020000E +:10B2600000008302000000000000000080020000D7 +:10B2700000000020000000000300000000000000AB +:10B2800000000000000000080000000800000000AE :10B2900000000000000000000000000000000000AE :10B2A000000000000000000000000000000000009E -:10B2B000000000000000000000000000000000008E +:10B2B000000000001100000000000000000000007D :10B2C000000000000000000000000000000000007E -:10B2D000000000000000000000000000000000006E -:10B2E000000000000000000000000000000000005E -:10B2F000000000000000000000000000000000202E -:10B30000000000000000000000000000000000003D -:10B31000000000000000000000000000000000002D -:10B32000000000000000000000000000000000001D -:10B33000000000000000000000000000000000000D -:10B3400000000000000000000000000000000000FD -:10B3500000000000000000000000000000000000ED -:10B3600008000000000000000000000000000000D5 -:10B3700000000000000000000000000000000000CD -:10B38000410100000000000000000000000000007B -:10B3900000000000000000000000000000000000AD -:10B3A000000000000000000000000000000000009D -:10B3B000000000000000000000000000000000008D -:10B3C000000000000000000000000000000000007D -:10B3D000000000000000000000000000000000006D -:10B3E000000000000000000000000000000000005D -:10B3F000000000000000C000000000008200A080EB -:10B400000400000000000400000000000000000034 -:10B41000000000000000000000000000000000002C -:10B42000000000000000000000000000000000001C -:10B43000000000010000000000000000000000000B -:10B4400000000000000000000000000000000000FC -:10B4500000000000000000000000000000000000EC -:10B4600000000000000000000000000000000000DC -:10B4700000000000000000000000000000000000CC -:10B48000002080000000000080000000000000009C -:10B4900000000000000000000000000000000000AC -:10B4A000000000000000000000000000000000009C +:10B2D000410000000020000000000000000000000D +:10B2E000910000002001000000000000110001009A +:10B2F0000140418000000020000400000800000020 +:10B300002004000000000000000000038805008009 +:10B3100001800802000200840000A004C1100000A7 +:10B320000000000000000004000400840009000088 +:10B330000009C000000200000004004000110804E1 +:10B340000020000000000000C0000000000000001D +:10B3500002004000900008110400020502200220B3 +:10B360000400200020004020C0090441A000400249 +:10B370004000080010080508030005000000000058 +:10B380000000210000880000000000000004000010 +:10B390000004202021000000000508001101200009 +:10B3A0002000000000C0000011010001092103007D +:10B3B0000000119000C0000010000001000000001B +:10B3C000000102000000000000000000000000007A +:10B3D00000000000000000000000800000000001EC +:10B3E0000001800080008000000120000900200092 +:10B3F00005010800904008800000001100000000D6 +:10B400000000000000000000000000000800000034 +:10B410000000C000000300000800001020008804A5 +:10B4200000000000040000414000040000408200D1 +:10B43000000000000000000000000000000000000C +:10B440000000A00000008200C00008000000000012 +:10B45000C00000000400000300000041820300005F +:10B460000000000000800400000000040000000054 +:10B47000000000210000000180080000000008001A +:10B4800000000000000000000000000000000000BC +:10B49000000000000000000000000000000080002C +:10B4A0000001000000C0000000000000800000005B :10B4B000000000000000000000000000000000008C :10B4C000000000000000000000000000000000007C -:10B4D000000000000000000000000000000000006C -:10B4E000000000000000000000000000000000005C -:10B4F00000000000000000000000C0008800000004 -:10B5000004000000A0000000000000000000000097 -:10B51000000000000000000000000000000000002B -:10B52000000000000000000000000000000000001B -:10B53000000000000000000000000000000000000B -:10B5400000000000000000000000000000000000FB -:10B5500000000000000000000000000000000000EB -:10B5600000000000000000000000000000000000DB -:10B5700000000000000000000000000000000000CB -:10B58000000080000000000000000000000000003B -:10B5900000000000000000000000000000000000AB -:10B5A000000000000000000000000000000000009B -:10B5B000000000000000000000000000000000008B -:10B5C000000000000000000000000000000000007B -:10B5D000000000000000000000000000000000006B -:10B5E000000000000000000000000000000000005B -:10B5F000000000000000000000000000000000004B -:10B60000000000009000000000000000900000001A -:10B61000000000000000000000000000000000002A -:10B62000000000000000000000000000000000001A -:10B63000000000000000000000000000000000000A -:10B6400000000000000000000000000000000000FA -:10B6500000000000000000000000000000000000EA -:10B6600000000000000000000000000000000000DA -:10B6700000000000000000000000000000000000CA -:10B6800000000000000080000000000000008000BA -:10B6900000000000000000000000000000000000AA -:10B6A000000000000000000000000000000000009A -:10B6B000000000000000000000000000000000008A -:10B6C000000000000000000000000000000000007A -:10B6D000000000000000000000000000000000006A -:10B6E000000000000000000000000000000000005A -:10B6F000000000000000000000000000000000004A -:10B700000000000000000000000000000080038036 -:10B7100021001100118000000080000000000000E6 -:10B720000000000000000000000000000000000019 -:10B730000000000000000000000000000000000009 -:10B7400000000000000000000000000000000000F9 -:10B7500000000000000000000000000000000000E9 -:10B7600000000000000000000000000000000000D9 -:10B7700000000000000000000000000000000000C9 -:10B780000000000000000000000000400000000475 -:10B7900000C0019001000140000000020000000014 -:10B7A0000000000000000000000000000000000099 -:10B7B0000000000000000000000000000000000089 -:10B7C0000000000000000000000000000000000079 -:10B7D0000000000000000000000000000000000069 -:10B7E0000000000000000000000000000000000059 -:10B7F0000000000000000000000000000000000049 -:10B800000000000000000000000000000000C00078 -:10B81000000001000000C000000000000000000067 -:10B820000000000000000000000000000000000018 -:10B830000000000000000000000000000000000008 -:10B8400000000000000000000000000000000000F8 -:10B8500000000000000000000000000000000000E8 -:10B8600000000000000000000000000000000000D8 -:10B8700000000000000000000000000000000000C8 -:10B8800000000000000000000000000000000000B8 -:10B890008000000041000000800000000000000067 -:10B8A0000000000000000000000000000000000098 -:10B8B0000000000000000000000000000000000088 -:10B8C0000000000000000000000000000000000078 -:10B8D0000000000000000000000000000000000068 -:10B8E0000000000000000000000000000000000058 -:10B8F0000000000000000000000000000000000048 -:10B900000000000000000000000000000000000037 -:10B91000000000000000008005001100054100004B -:10B920000000000000000000000000000000000017 -:10B930000000000000000000000000000000000007 -:10B9400000000000000000000000000000000000F7 +:10B4D00000000000000080000000000000000000EC +:10B4E0000800000000000004830000000001118833 +:10B4F000200020000900A00000000000010000085A +:10B5000008000000C000002108000000000000004A +:10B510000000880000008800008041004104000015 +:10B5200009000011000000000000000400000100FC +:10B530000080880082800000200920412000200037 +:10B5400000000080011100000000820000110000D6 +:10B55000000000000000000004400400042000215E +:10B56000200000000000200020000004040400006F +:10B57000A04082028200822040200420410010006E +:10B580000800408800004100100000000500000095 +:10B59000000008000000000000002020200004013E +:10B5A0000810209041000020000000000000000072 +:10B5B0000400002041000004000080008000900092 +:10B5C00082000000000420000000000400000000D1 +:10B5D000002000000000000000008020800080416A +:10B5E00000000000080000000000808400048001CA +:10B5F0000000038400000000000008A10008008390 +:10B60000901002C020900088904000C000100040C0 +:10B610000088000100010001000101C00040888293 +:10B620000082000100000900000110A0002000823B +:10B6300020100000000000000000000001000000D9 +:10B6400040000000000000000000000000000000BA +:10B6500000000000020000840020402000000000E4 +:10B660000000000000000500040000000000400091 +:10B6700084000000000000000800000000C100403D +:10B680000010002080800000008000000880000082 +:10B69000008000000041000300100008118021001C +:10B6A0000900000011400021C00500100880008042 +:10B6B00000000080000000000200000000001100F7 +:10B6C00003008900000000000000090000000000E5 +:10B6D00000000000000080000000000000000000EA +:10B6E0000000000000000500C1000500000000008F +:10B6F0001100C00000004000210000000000000018 +:10B70000004180A100208000000480008000000033 +:10B7100000000000000000000000000000000041E8 +:10B7200000000085000005040800204040080000DB +:10B730008021800000000004008000040000000060 +:10B7400000208000800500000005000000050000CA +:10B750000000000000000000800080418021800087 +:10B7600000000000000000000000008000000080D9 +:10B77000000200800003008004001000040020008C +:10B7800088408400A011000108000200A02082006F +:10B790000000000000000000000000000000004069 +:10B7A000000100C0009000C00090000000010000F7 +:10B7B00090002000A0A08200000100C00001004015 +:10B7C00000009001020090009000000000000000C6 +:10B7D0000000000000000000000008001004082124 +:10B7E0001000000000820000002000000020000087 +:10B7F00000840001000800010004010001000100B4 +:10B80000000010080010002008C002200090001066 +:10B810002082400000004000040000000000010001 +:10B820000000910140000401850100000200A00118 +:10B830000000020800048282200200008400C00090 +:10B84000010000000001A001000000010000040050 +:10B85000000000000000000000000000C002002006 +:10B8600000080920000000000400000001000000A2 +:10B87000C001000000008201400000000001000043 +:10B88000A0000001008020800000108080000000E7 +:10B890000000008080000000000080000000050023 +:10B8A00008000000414000218002C10800008841DA +:10B8B0009020110580000080000000800900000039 +:10B8C0000000040000000010001000030508000044 +:10B8D00080000000050000000000000000008080E3 +:10B8E00000000000A1000300000000000000104064 +:10B8F0000041800400200540004080030902002030 +:10B90000004180080020C1102100108000000005C7 +:10B9100080A0008000000000000000000000000087 +:10B9200000000000000000110011001100004000A4 +:10B93000080005001103000000C000000000000026 +:10B94000000900110000000000030000008000005A :10B9500000000000000000000000000000000000E7 -:10B9600000000000000000000000000000000000D7 -:10B9700000000000000000000000000000000000C7 -:10B9800000000000000000000000000000000000B7 -:10B990000000000000000000009000000100000115 -:10B9A0000000000000000000000000000000000097 -:10B9B0000000000000000000000000000000000087 -:10B9C0000000000000000000000000000000000077 +:10B96000800800808000000000000010000000003F +:10B97000000000090000000000200004000000009A +:10B980000080000000000008030088884084200038 +:10B99000200020A0A0822000000000000000000085 +:10B9A0000000000000000000880100008201820009 +:10B9B00001880100000001009000204000200800E4 +:10B9C00000000000000100000000000100880040AD :10B9D0000000000000000000000000000000000067 -:10B9E0000000000000000000000000000000000057 -:10B9F0000000000000000000000000000000000047 -:10BA00000000000000000000000000000000000036 -:10BA1000000000060000410000116006008841009F -:10BA200060110000000000000000000000000000A5 -:10BA30000000000000000000000000000000000006 -:10BA400000000000000000000000000000000000F6 -:10BA500000000000000000000000000000000000E6 -:10BA600000000000000000000000000000000000D6 -:10BA700000000000000000000000000000000000C6 -:10BA800000000000000000000000000000000000B6 -:10BA900000000000000000000000000000000000A6 -:10BAA0000000000000000000000000000000000096 -:10BAB0000000000000000000000000000000000086 -:10BAC0000000000000000000000000000000000076 +:10B9E00000000801840440880400000000000000FA +:10B9F0000000000000000000000000010001000045 +:10BA0000000000080000000000000000000000002E +:10BA10000000000000000000000000000000000026 +:10BA200000000000000000000000000000E007002F +:10BA30005041000000E0000000000000000007008E +:10BA40000000000000E0070060000000000000E0CF +:10BA500000000000000000E0000000000000000006 +:10BA60000000000000000000000084000000000052 +:10BA7000070000000000000007004211000000E085 +:10BA8000070000000000000000000000004000C2AD +:10BA90000000FF007878AAFF7373FF3F00000000EA +:10BAA0000000000000000000000000000202C2C20E +:10BAB000000000000000000000000000C3FFC30001 +:10BAC0000A000AFF00000000000000000000000063 :10BAD0000000000000000000000000000000000066 -:10BAE0000000000000000000000000000000000056 +:10BAE000000000000000000A008214BEF5F500000E :10BAF0000000000000000000000000000000000046 :10BB00000000000000000000000000000000000035 -:10BB10000000000000000000000000000000000025 -:10BB20000000000000000000000000000000000015 -:10BB30000000000000000000000000000000000005 -:10BB400000000000000000000000000000000000F5 +:10BB10000082AC0F0000787800557F7FFF3F000067 +:10BB20000000000000000000000000000000020211 +:10BB3000C2C2000000000000000000000000AAAA2D +:10BB4000AAAA3C003C000000000000000000000029 :10BB500000000000000000000000000000000000E5 -:10BB600000000000000000000000000000000000D5 +:10BB60000000000000000000005F00D714BEA0A08D :10BB700000000000000000000000000000000000C5 :10BB800000000000000000000000000000000000B5 -:10BB900000000000000000000000000000000000A5 -:10BBA0000000000000000000000000000000000095 -:10BBB0000000000000000000000000000000000085 -:10BBC0000000000000000000000000000000000075 -:10BBD0000000000000000000000000000000000065 -:10BBE0000000000000000000000000000000000055 -:10BBF0000000000000000000000000000000000045 +:10BB90000000A2F30000000000AA0A28000005FF30 +:10BBA0000F553CFF000000000000000000000000F6 +:10BBB0004343FF0000000000000000000000000000 +:10BBC000C3D3E3F32F200F000000000000000000AB +:10BBD000000000000000F737C70700000000000069 +:10BBE00000000000000000000000F700F7001092C5 +:10BBF00051D3000000000000000000000000000021 :10BC00000000000000000000000000000000000034 -:10BC10000000000000000000000000000000000024 -:10BC20000000000000000000000000000000000014 -:10BC30000000000000000000000000000000000004 -:10BC400000000000000000000000000000000000F4 -:10BC500000000000000000000000000000000000E4 -:10BC600000000000000000000000000000000000D4 -:10BC700000000000000000000000000000000000C4 +:10BC100000000000F3F30100010000AA0A00000088 +:10BC200014FF0F553C000000000000000000000061 +:10BC300000004040FF000000000000000000000085 +:10BC40000000C3C3E3E3FFF00F00000000000000AA +:10BC50000000000000000000F434C40400000000F4 +:10BC6000000000000000000000000000F400F400EC +:10BC700038BA79FB0000000000000000000000005E :10BC800000000000000000000000000000000000B4 -:10BC900000000000000000000000000000000A306A -:10BCA000050000A005610A36C50500A000000000DF -:10BCB0000000000000000000000000000000000084 -:10BCC0000000000000000000000000000000000074 -:10BCD0000000000000000000000000000000000064 -:10BCE0000000000000000000000000000000000054 -:10BCF0000000000000000000000000000000000044 -:10BD00000000000000000000000000000000000033 -:10BD10000000000000000000000000000000000023 -:10BD200000000000000000200020000000000000D3 -:10BD30000000000000000000000000000000000003 -:10BD400000000000000000000000000000000000F3 -:10BD500000000000000000000000000000000000E3 +:10BC90000000000000610006009D000180005000CF +:10BCA00000000000000050000000000000610006DD +:10BCB000000D00000561340F050D00A000610007B4 +:10BCC000000D0000000000080000000005610A0FE0 +:10BCD000050D00A0000000610007000D00000061DC +:10BCE0000007000D00000000000000000000000040 +:10BCF00030000000000005000A08050000A00561F2 +:10BD00000A0E050D00A005610A0F050D00A00061D7 +:10BD10000006000D000005055500000000000000B1 +:10BD20000000000000000000000000000000000013 +:10BD3000000000000000000000000C7D0C41FFF03E +:10BD400035350F00AA0000000000000000000000D0 +:10BD500000000000000000000000000000C33CFFE5 :10BD600000000000000000000000000000000000D3 :10BD700000000000000000000000000000000000C3 -:10BD800000000000000000000000000000000000B3 +:10BD8000000000000303D714000000003F410341FE :10BD900000000000000000000000000000000000A3 -:10BDA0000000000000000000002000200000000053 -:10BDB0000000000000000000000000000000000083 -:10BDC0000000000000000000000000000000000073 -:10BDD0000000000000000000000000000000000063 -:10BDE0000000000000000000000000000000000053 +:10BDA0000000000000000000000000000000000093 +:10BDB000000000000000000000000000CF7DCF4127 +:10BDC0000F0035350F00AA00000000000000000041 +:10BDD0000000000000000000000000000000B2B2FF +:10BDE000B2B20000000000000000000000000000EF :10BDF0000000000000000000000000000000000043 -:10BE00000000000000000000000000000000000032 -:10BE10000000000000000000000000000000000022 -:10BE2000000000000000000000000000000000FF13 -:10BE300010FF0000000000000000000000000000F3 -:10BE400000000000000000000000000000000000F2 +:10BE00000000000000003F3FD714000000003F7D0D +:10BE1000037D000000000040000000C04455000009 +:10BE20000000000000000000000000000000000012 +:10BE300000004D4DFF3C000000000000000000002D +:10BE40000000A0A003F34D4D3C00000000000000E6 :10BE500000000000000000000000000000000000E2 :10BE600000000000000000000000000000000000D2 :10BE700000000000000000000000000000000000C2 :10BE800000000000000000000000000000000000B2 -:10BE900000000000000000000000000000000000A2 +:10BE900000000000000000000000000000C0445549 :10BEA0000000000000000000000000000000000092 -:10BEB00000FF00FF00000000000000000000000084 -:10BEC0000000000000000000000000000000000072 +:10BEB000000000004D4DC300000000000000000025 +:10BEC00000000000AFAF03F34D4DFFC300000000C2 :10BED0000000000000000000000000000000000062 :10BEE0000000000000000000000000000000000052 :10BEF0000000000000000000000000000000000042 :10BF00000000000000000000000000000000000031 -:10BF10000000000000000000000000000000000021 -:10BF20000000000000000000000000000000000011 -:10BF30000000000000000000000000000000000001 -:10BF400000000000000000000000000000000000F1 -:10BF500000000000000000000000000000000000E1 -:10BF600000000000000000000000000000000000D1 -:10BF700000000000000000000000000000000000C1 -:10BF800000000000000000000000000000000000B1 -:10BF900000000000000000000000000000000000A1 -:10BFA0000000000000000000000000004000000051 -:10BFB0000000000000000000000000000000000081 -:10BFC0000000000000000000000000000000000071 -:10BFD0000000000000000000000000000000000061 -:10BFE0000000000000000000000000000000000051 -:10BFF0000000000000000000000000000000000041 -:10C000000000000000000000000000000000000030 -:10C010000000000000000000000000000000000020 -:10C020000000000000000000000000000000000010 -:10C030000000000000000000000000000000000000 -:10C0400000000000000000000000000000000000F0 -:10C0500000000000000000000000000000000000E0 -:10C0600000000000000000000000000000000000D0 -:10C0700000000000000000000000000000000000C0 -:10C0800000000000000000000000000000000000B0 -:10C0900000000000000000000000000000000000A0 -:10C0A0000000000000000000000000000000000090 -:10C0B000000000000000000000000000050000007B -:10C0C0000000000000000000000000000000000070 -:10C0D0000000000000000000000000000000000060 -:10C0E0000000000000000000000000000000000050 -:10C0F0000000000000000000000000000000000040 -:10C10000000000000000000000000000000000002F -:10C110000000040004000000000000000000000017 -:10C12000000000000000000000000000000000000F -:10C1300000000000000000000000000000000000FF -:10C1400000000000000000000000000000000000EF -:10C1500000000000000000000000000000000000DF -:10C1600000000000000000000000000000000000CF -:10C1700000000000000000000000000000000000BF +:10BF10000000000000000000000001000000000020 +:10BF200000000000C00000002080000085800000AC +:10BF300000000000200000000000004000000000A1 +:10BF40000000000082000000000000040400000067 +:10BF500000008400000000000000820400000003D4 +:10BF600000000020000000000000000000000004AD +:10BF70000000040000000000000002002004000493 +:10BF80000000040000000000820000000004000027 +:10BF90000100210000080200020000000004000867 +:10BFA0001000000000C020000090402000020404A7 +:10BFB000000000000000000000000000400220001F +:10BFC00010020000000000000000000000900000CF +:10BFD0000000008200040000000000400002000297 +:10BFE000000000000001000000000000400000020E +:10BFF00000900000000000000000000200000000AF +:10C0000000020000000000000000000040000002EC +:10C0100040040400020000008300800000000002D1 +:10C0200000000002840000904000410000801000E9 +:10C0300000000040884040000140000090400000A7 +:10C0400004000000004000000000000000000000AC +:10C050000000000482000004C0040400030904007E +:10C0600004000000000000000000000000000000CC +:10C070000000000000000200080000008400000032 +:10C08000000002000000820000000000000000002C +:10C09000000004000000200000000200000000007A +:10C0A000020002000001001000088008C002000425 +:10C0B00080000000000000008084080000000000F4 +:10C0C000000000080400000000000402000000005E +:10C0D000000000080001040002010005C100040086 +:10C0E000C100898200000000000000000000000084 +:10C0F0000000020000080000040800000900000021 +:10C100000000000000000008000000000000000027 +:10C110000400040000080000000802000000040001 +:10C120000408000000840200041000110000000058 +:10C1300000000000000800002000000000000000D7 +:10C1400000000004000000000021002000000000AA +:10C15000000000000000000088080000000000004F +:10C1600000410000000000000008000090000000F6 +:10C170000000000500008400000000000000000036 :10C1800000000000000000000000000000000000AF -:10C19000000000000000000000000000000000009F -:10C1A000000000000000000000000000000000008F -:10C1B000000000000000000000000000000000007F -:10C1C000000000000000000000000000000000006F -:10C1D000000000000000000000000000000000005F +:10C1900000000000000090004000000000000100CE +:10C1A0000200C100C1000200100041014100412015 +:10C1B00003820000088400040000800000200000CA +:10C1C0000004000000000000000000000200000069 +:10C1D000000000004100080000A0000100900002E3 :10C1E000000000000000000000000000000000004F -:10C1F000000000000000000000000000000000003F -:10C20000000000000000000000000000000000002E -:10C21000000000000000000000000000000000001E -:10C22000000000000000000000000000000000000E -:10C2300000000000000000000000000000000000FE -:10C2400000000000000000000000000000000000EE -:10C2500000000000000000000000000000000000DE -:10C2600000000000000000000000000000000000CE -:10C2700000000000000000000000000000000000BE -:10C2800000000000000000000000000000000000AE -:10C29000000000000000000000000000000000009E -:10C2A000000000000000000000000000000000008E -:10C2B000000000000000000000000000000000007E -:10C2C000000000000000000000000000000000006E -:10C2D000000000000000000000000000000000005E -:10C2E000000000000000000000000000000000004E -:10C2F000000000000000000000000000000000003E -:10C30000000000000000000000000000000000002D -:10C31000000000000000000000000000000000001D -:10C32000000000000000000000000000000000000D -:10C3300000000000000000000000000000000000FD -:10C3400000000000000000000000000000000000ED -:10C3500000000000000000000000000000000000DD -:10C3600000000000000000000000000000000000CD -:10C3700000000000000000000000000000000000BD +:10C1F00000000000000000000000000041000800F6 +:10C200000300000000000000030000000000000028 +:10C210000300000000840000000000000000000097 +:10C2200020008000020002008000080008000811C1 +:10C230000120018284000082000000000000000054 +:10C240000000004100000000004000410200000921 +:10C250000040001100028540900000000082004173 +:10C2600000020000000400110109000000020000AB +:10C270000000080000000009001108400000001143 +:10C280000000824000400040004000000040880064 +:10C290000000880000000000000000400380010052 +:10C2A000010000000000C000090002000300084077 +:10C2B000030004004002000003084088000000A0C2 +:10C2C0004100210000400300000000000082808443 +:10C2D0000000200000001102040205040004000414 +:10C2E00000000000090400004104080000004100B3 +:10C2F00011002100000000200000000000020900E1 +:10C3000020040000000000000000004000000000C9 +:10C31000000000000000000000000000000082207B +:10C320000200020005000000000010009100000063 +:10C33000400000028400400400001008A00000003B +:10C3400000000000002000000000000000000000CD +:10C35000000000000800000000851100010301003A +:10C3600000000004020000009000840000000000B3 +:10C37000008000000080040000000000C0040100F4 :10C3800000000000000000000000000000000000AD :10C39000000000000000000000000000000000009D -:10C3A000000000000000000000000000000000008D -:10C3B000000000000000000000000000000000007D -:10C3C000110000000000000000000000000000005C -:10C3D000000000000000000000000000000000005D -:10C3E000000000000000000000000000000000004D -:10C3F000000000000000000000000000000000003D -:10C40000000000000000000000000000000000002C -:10C41000000000000000000000000000000000001C -:10C42000000000000000000000000000000000000C -:10C4300000000000000000000000000000000000FC -:10C4400000000000000000000000000000000000EC -:10C4500000000000000000000000000000000000DC -:10C4600000000000000000000000000000000000CC -:10C4700000000000000000000000000000000000BC -:10C4800000000000000000000000000000000000AC -:10C49000000000000000000000000000000000009C -:10C4A000000000000000000000000000000000008C -:10C4B000000000000000000000000000000000007C -:10C4C000000000000000000000000000000000006C -:10C4D000000000000000000000000000000000005C -:10C4E000000000000000000000000000000000004C -:10C4F000000000000000000000000000000000003C -:10C50000000000000000000000000000000000002B -:10C51000000000000000000000000000000000001B -:10C52000000000000000000000000000000000000B -:10C5300000000000000000000000000000000000FB -:10C5400000000000000000000000000000000000EB +:10C3A00020800280020002000010028001000000D4 +:10C3B0000000402041040000A100000084010000B2 +:10C3C00000040000000000000004020000000090D3 +:10C3D0000090008800000988000008200402040082 +:10C3E000200000080001080000000000000000001C +:10C3F0000000052000000520880400000000000067 +:10C400000400000000000000000000000008000020 +:10C410000008000000000000000000000000000014 +:10C420001100804080408000800021008040020098 +:10C430000084C000900000008200400000208200C4 +:10C4400082000020002000210008000000020000FF +:10C450000000000000000000010004000140000096 +:10C460000405000000042000200400009000820069 +:10C4700000000000040004000400040000820080AA +:10C4800001000100000000040000000000000000A6 +:10C4900000000000000004000000000090000040C8 +:10C4A0000000000020000103010000002104090435 +:10C4B00004840088040000000000000088400000A0 +:10C4C0000020022000000000000000001100000019 +:10C4D00000000000008811041190080491040490E9 +:10C4E00000C085842100000100002101000000A09F +:10C4F000000000200000C100C100910088820520DA +:10C5000000200400040000000004000000000200FD +:10C510000400080000000000008402000000200069 +:10C52000218400000004800020002000000002019F +:10C53000029141414141A1A101084010902010A168 +:10C540002008898482098211A0830009A0210000AB :10C5500000000000000000000000000000000000DB -:10C5600000000000000000000000000000000000CB +:10C5600000000000000000018800830000000000BF :10C5700000000000000000000000000000000000BB :10C5800000000000000000000000000000000000AB :10C59000000000000000000000000000000000009B -:10C5A000000000000000000000000000000000008B -:10C5B000000000000000000000000000000000007B -:10C5C000000000000000000000000000000000006B +:10C5A000000000000000000000C0000801000800BA +:10C5B00001C188000000820002C110210005800531 +:10C5C00003C1A0A1020380820010800204100008B1 :10C5D000000000000000000000000000000000005B -:10C5E000000000000000000000000000000000004B +:10C5E00000000000000000000011832090200008DF :10C5F000000000000000000000000000000000003B :10C60000000000000000000000000000000000002A :10C61000000000000000000000000000000000001A -:10C62000000000000000000000000000000000000A -:10C6300000000000000000000000000000000000FA -:10C6400000000000000000000000000000000000EA -:10C6500000000000000000000000000000000000DA -:10C6600000000000000000000000000000000000CA -:10C6700000000000000000000000000000000000BA -:10C6800000000000000000000000000000000000AA +:10C6200000000000000000000000008000804000CA +:10C63000800009C1A10304098000A080A14182807B +:10C6400008042080211184000240A100830083009F +:10C650000310000000000000000000008000000047 +:10C6600080000000000000000000008009001100B0 +:10C6700008030000000000000080000000000080AF +:10C6800000000000000000800000008000000000AA :10C69000000000000000000000000000000000009A -:10C6A000000000000000000000000000000000008A -:10C6B000000000000000000000000000000000007A -:10C6C000000000000000000000000000000000006A -:10C6D000000000000000000000000000000000005A -:10C6E000000000000000000000000000000000004A -:10C6F000000000000000000000000000000000003A -:10C700000000000000000000000000000000000029 +:10C6A0000000000000000000000000000008000082 +:10C6B00000408000830041000909C100021003010D +:10C6C000A110094189108800A1A020010420024086 +:10C6D000A1000801000000000000000000001000A0 +:10C6E00000000800000000A000000004001001008D +:10C6F0000100000100000004000000040000000030 +:10C70000000400000082000000040000000400009B :10C710000000000000000000000000000000000019 -:10C720000000000000000000000000000000000009 -:10C7300000000000000000000000000000000000F9 -:10C7400000000000000000000000000000000000E9 -:10C7500000000000000000000000000000000000D9 -:10C7600000000000000000000000000000000000C9 -:10C7700000000000000000000000000000000000B9 -:10C7800000000000000000000000000000000000A9 +:10C720000000000000000000000000000000000108 +:10C7300000000001C000080000000001C10010025C +:10C74000008202030101C0080083838582821040B9 +:10C75000029000041004000000000000000000002F +:10C7600000000000000001000000C0000000000107 +:10C7700000010000010101000000040000000000B1 +:10C780000000000082000000000000000400000023 :10C790000000000000000000000000000000000099 :10C7A0000000000000000000000000000000000089 -:10C7B0000000000000000000000000000000000079 -:10C7C0000000000000000000000000000000000069 -:10C7D0000000000000000000000000000000000059 -:10C7E0000000000000000000000000000000000049 -:10C7F0000000000000000000000000000000000039 -:10C800000000000000000000000000000000000028 +:10C7B00000004000000000C000000001000091C126 +:10C7C0000085050880A1211080850010042100202B +:10C7D00000008800208000800000000000000000B1 +:10C7E0000000000000000000400000000000000009 +:10C7F000001040030008114102000000800000000A +:10C80000000009000000000000000500000080009A :10C810000000000000000000000000000000000018 :10C820000000000000000000000000000000000008 -:10C8300000000000000000000000000000000000F8 -:10C8400000000000000000000000000000000000E8 -:10C8500000000000000000000000000000000000D8 -:10C8600000000000000000000000000000000000C8 -:10C8700000000000000000000000000000000000B8 -:10C8800000000000000000000000000000000000A8 +:10C830000000050000000000408000001003000917 +:10C8400089C1A00010A0890020000221A0C1900091 +:10C85000080220C04080058005080000000000009C +:10C860000000000000000080000000000002000046 +:10C8700000000880110008001108000000020000FC +:10C88000000000000004002100000000000000097A :10C890000000000000000000000000000000000098 :10C8A0000000000000000000000000000000000088 -:10C8B0000000000000000000000000000000000078 -:10C8C0000000000000000000000000000000000068 -:10C8D0000000000000000000000000000000000058 -:10C8E0000000000000000000000000000000000048 -:10C8F0000000000000000000000000000000000038 -:10C900000000000000000000000000000000000027 +:10C8B000000000008000001100800000C10983001A +:10C8C000090040000200C14185A0900009410420F8 +:10C8D0000804880101A000A0004000000000000042 +:10C8E0000000000000000002001000000000000036 +:10C8F0000000000000C00100000001010000000075 +:10C900000000000000000001000000000000000026 :10C910000000000000000000000000000000000017 :10C920000000000000000000000000000000000007 -:10C9300000000000000000000000000000000000F7 -:10C9400000000000000000000000000000000000E7 -:10C9500000000000000000000000000000000000D7 +:10C930000000000000000800000000080000C10125 +:10C94000200000000000004200000700600000001E +:10C9500000E007008200480000E000000000000046 :10C9600000000000000000000000000000000000C7 -:10C9700000000000000000000000000000000000B7 -:10C9800000000000000000000000000000000000A7 -:10C990000000000000000000000000000000000097 +:10C97000000007000000000000E00000840000004C +:10C980000000070000000000000000000700000099 +:10C990000000000007000000000000000000000090 :10C9A0000000000000000000000000000000000087 -:10C9B0000000000000000000000000000000000077 -:10C9C0000000000000000000000000000000000067 -:10C9D0000000000000000000000000000000000057 +:10C9B0000000000000000000000000E00700000090 +:10C9C000480000E00000000024003C3CC0E7C0E755 +:10C9D0000083838399FFFFFF000000003CF0FF66A7 :10C9E0000000000000000000000000000000000047 :10C9F0000000000000000000000000000000000037 :10CA00000000000000000000000000000000000026 :10CA10000000000000000000000000000000000016 :10CA20000000000000000000000000000000000006 -:10CA300000000000000000000000000000000000F6 -:10CA400000000000000000000000000000000000E6 -:10CA500000000000000000000000000000000000D6 -:10CA600000000000000000000000000000000000C6 +:10CA300000000000000000000000FFFF0000FFFFFA +:10CA40000000FF000000FFFF0000F0F0F0F0C02445 +:10CA5000C024009F9F9FFFC3FFF0000000003CF038 +:10CA60000066000000000000000000000000000060 :10CA700000000000000000000000000000000000B6 :10CA800000000000000000000000000000000000A6 :10CA90000000000000000000000000000000000096 :10CAA0000000000000000000000000000000000086 -:10CAB0000000000000000000000000000000000076 -:10CAC0000000000000000000000000000000000066 +:10CAB000000000000000000000000000FFFF000078 +:10CAC00000000000FF000000000000000000000067 :10CAD0000000000000000000000000000000000056 :10CAE0000000000000000000000000000000000046 :10CAF0000000000000000000000000000000000036 @@ -85191,492 +85191,492 @@ :10CB10000000000000000000000000000000000015 :10CB20000000000000000000000000000000000005 :10CB300000000000000000000000000000000000F5 -:10CB400000000000000000000000000000000000E5 -:10CB500000000000000000000000000000000000D5 -:10CB600000000000000000000000000000000000C5 -:10CB700000000000000000000000000000000000B5 +:10CB4000000000000000000000000000000000CF16 +:10CB5000FFCF00C380803C3C3C3CFF2FFF2F0F36B3 +:10CB6000FF36DB00D00000000000000000000000E5 +:10CB700000000000060600000000000000000000A9 :10CB800000000000000000000000000000000000A5 :10CB90000000000000000000000000000000000095 :10CBA0000000000000000000000000000000000085 :10CBB0000000000000000000000000000000000075 -:10CBC0000000000000000000000000000000000065 -:10CBD0000000000000000000000000000000000055 -:10CBE0000000000000000000000000000000000045 +:10CBC000000000FF0000FFFF0000666600003C3C24 +:10CBD000000CFF0C00C30000FCBC7C3CFF2FFFFFDF +:10CBE0000036F036DBDBD0D0000000000000000093 :10CBF0000000000000000000000000000000000035 :10CC00000000000000000000000000000000000024 :10CC10000000000000000000000000000000000014 :10CC20000000000000000000000000000000000004 :10CC300000000000000000000000000000000000F4 -:10CC400000000000000000000000000000000000E4 -:10CC500000000000000000000000000000000000D4 -:10CC600000000000000000000000000000000000C4 -:10CC700000000000000000000000000000000000B4 -:10CC800000000000000000000000000000000000A4 -:10CC90000000000000000000000000000000000094 -:10CCA0000000000000000000000000000000000084 +:10CC40000000000000FF0000000000006666000019 +:10CC50003C3C0061003E000D00A00061000D000999 +:10CC6000000000610007800D0000000000000000CF +:10CC70000000000000000000000105000A08050097 +:10CC800000A0006100010000000005000A08050086 +:10CC900000A0000005000A08050000A005000A0821 +:10CCA000050000A0000000000000000000000000DF :10CCB0000000000000000000000000000000000074 -:10CCC0000000000000000000000000000000000064 -:10CCD0000000000000000000000000000000000054 -:10CCE0000000000000000000000000000000000044 +:10CCC000000000004563800F002D92024082800129 +:10CCD0008020920200D7005587878787F7F3F5F009 +:10CCE000FF00FFF1F7F437340000000000000000FF :10CCF0000000000000000000000000000000000034 -:10CD00000000000000000000000000000000000023 +:10CD000000000000FBF40B043C55FF5A000000003B :10CD10000000000000000000000000000000000013 :10CD20000000000000000000000000000000000003 :10CD300000000000000000000000000000000000F3 -:10CD400000000000000000000000000000000000E3 -:10CD500000000000000000000000000000000000D3 -:10CD600000000000000000000000000000000000C3 +:10CD400000000000000000000000000000000F00D4 +:10CD50000C0C00FF00F000C70005D782D7D7F5F014 +:10CD6000F5F0FF00FF41C7C4070400000000000009 :10CD700000000000000000000000000000000000B3 -:10CD800000000000000000000000000000000000A3 +:10CD8000000000000000FFF00F003C55005A0000BA :10CD90000000000000000000000000000000000093 :10CDA0000000000000000000000000000000000083 :10CDB0000000000000000000000000000000000073 :10CDC0000000000000000000000000000000000063 -:10CDD0000000000000000000000000000000000053 -:10CDE0000000000000000000000000000000000043 +:10CDD0000F000C0C000000F0140038380C0C0F0C85 +:10CDE00000003C000455F4FF5FBE5F145F43000089 :10CDF0000000000000000000000000000000000033 -:10CE00000000000000000000000000000000000022 +:10CE000000000000000000002B3F1703AAAAF00F4B :10CE10000000000000000000000000000000000012 :10CE20000000000000000000000000000000000002 :10CE300000000000000000000000000000000000F2 :10CE400000000000000000000000000000000000E2 -:10CE500000000000000000000000000000000000D2 -:10CE600000000000000000000000000000000000C2 -:10CE700000000000000000000000000000000000B2 -:10CE800000000000000000000000000000000000A2 -:10CE90000000000000000000000000000000000092 +:10CE500000000F00050500F0003C140038380C0CF1 +:10CE60000F0CC00000000455FEFF0ABE0A145F4309 +:10CE70005F43000000000000000000000000000010 +:10CE8000000000000000000000002B3F1703AAAACA +:10CE900000FF000000000000000000000000000093 :10CEA0000000000000000000000000000000000082 :10CEB0000000000000000000000000000000000072 :10CEC0000000000000000000000000000000000062 -:10CED0000000000000000000000000000000000052 -:10CEE0000000000020000000000000000000000022 -:10CEF0000000000000000000200000000000000012 -:10CF000004000000200000000000000000000000FD -:10CF100000000000000000002000000000000000F1 -:10CF200000002000000020000000000000000000C1 -:10CF300000000200000000000000200000000000CF -:10CF4000000020000000200000000000040000009D -:10CF500000002000000000000000000000000000B1 -:10CF600000000000000000000000210000000000A0 -:10CF700000000000000000000000000000000000B1 -:10CF800000000000000000000000000000000000A1 -:10CF90000000000000000000000000000000000091 -:10CFA0000000000000000000000000000000000081 -:10CFB0000000000000000000000000000000000071 -:10CFC0000000000000000000000000000000000061 -:10CFD0000000000000000000000000002000000031 -:10CFE0000000000000000000000000000000000041 -:10CFF0000000000000000000000000000000000031 -:10D000000000000000000000000000000000000020 -:10D010000000000000000000000000000000000010 -:10D0200000000000000000000200000000000000FE -:10D0300000000000000000000400000000000000EC -:10D0400000000000000000000000000000000000E0 -:10D0500000000000000000000000000000000000D0 -:10D0600000000000000000000000000000000000C0 -:10D0700000000000000000000000000000000000B0 -:10D0800000000000000000000000000000000000A0 -:10D090000000000000000000000000000000000090 -:10D0A0000000000000000000000000000000000080 -:10D0B0000000000000000000000000000000000070 -:10D0C000000000000000000000000000040000005C -:10D0D000000002000000000000000400000000004A -:10D0E0000000000000000000000000000000000040 -:10D0F0000000000000000000000000000000000030 -:10D10000000000000000000000000000000000001F -:10D11000000000000000000000000000000000000F -:10D1200000000000000000000000000000000000FF -:10D1300000000000000000000000000000000000EF -:10D1400000000000000000000000000000000000DF -:10D1500000000000000000000000000000000000CF -:10D1600000000000000000000000000000000000BF -:10D1700000000000000000000000000000000000AF -:10D18000000000000000000000000000000000009F -:10D19000000000000000000000000000000000008F -:10D1A000000000000000000000000000000000007F -:10D1B000000000000000000000000000000000006F +:10CED000000000000F00050500F0003C000000000D +:10CEE00000000000000000020003400000000800F5 +:10CEF00000002004200005002000010004000400C0 +:10CF00000000008300820100000000A00000040077 +:10CF100001002100000000000000000000030000EC +:10CF200000000000000800000004000000000000F5 +:10CF3000000000000000840000000000020000006B +:10CF4000000000000004008000800080000000005D +:10CF5000000000008200000001000000000020002E +:10CF60000000000000080000000200008000000037 +:10CF700000000040004080882002800020008000E7 +:10CF800080020000000200200402000000030000F4 +:10CF900080002004A000009000A0000000A000007D +:10CFA0000000000000000000000040000000000041 +:10CFB0000000000040200000000000000000000011 +:10CFC000000000000000000800040004000400004D +:10CFD000000000000000000200004000000000000F +:10CFE00000000000000004000002028210020200A3 +:10CFF0000000020000000000000090008400040017 +:10D000000000000000000400000000000000050017 +:10D0100001000000004001000000200500000000A9 +:10D02000000000000004000000000000000082007A +:10D03000000082000000000000000000000000006E +:10D0400000000000011000000000000000000000CF +:10D0500000000000000000000400000000000000CC +:10D060000000008804000088000000410003808365 +:10D070000500040000000000001000002000000077 +:10D080000004000000000000000400000000040094 +:10D0900020000490020000000408000004000000CA +:10D0A0000000000000C0000000000240000002007C +:10D0B0000200000000400000000004080000000022 +:10D0C00000000004000008010000008200000000D1 +:10D0D0000000000000000200000000080000000046 +:10D0E00000000200C0210200000000210420000016 +:10D0F00000200000042000000000000800000000E4 +:10D1000000000000000000000100030040002000BB +:10D11000200020008500A00201000800400000005F +:10D1200000000000000000000000000001000000FE +:10D13000404100000000000000000010000000045A +:10D14000000000008200000000000000000000005D +:10D1500000000000010000000000000000000000CE +:10D160000000820040001100210002000200418204 +:10D1700000C002901190000000000088000400042C +:10D18000000000000088000000000400840000008F +:10D190008900C10088000400000004880000080025 +:10D1A0000088080000080000200000000000404047 +:10D1B00000008000000000000000000000010000EE :10D1C000000000000000000000000000000000005F -:10D1D000000000000000000000000000000000004F -:10D1E000000000000000000000000000000000003F -:10D1F000000000000000000000000000000000002F -:10D20000000000000000000000000000000000001E -:10D21000000000000000000000000000000000000E -:10D2200000000000000000000000000000000000FE -:10D2300000000000000000000000000000000000EE -:10D2400000000000000000000000000000000000DE -:10D2500000000000000000000000A000000000002E -:10D2600000000000000000000000000000000000BE -:10D2700000000000000000000000000000000000AE -:10D28000000000000000000000000000000000009E -:10D29000000000000000000000000000000000008E -:10D2A000000000000000000000000000000000007E -:10D2B000000000000000000000000000000000006E -:10D2C000000000000000000000000000000000005E -:10D2D000000000000000000000000000000000004E -:10D2E000000000000000000000000000000000003E -:10D2F000000000000000000000000000000000002E -:10D30000000000000000000000000000000000001D -:10D31000000000000000000000000000000000000D -:10D3200000000000000000000000000000000000FD -:10D3300000000000000000000000000000000000ED +:10D1D000000000000000040000000000000000004B +:10D1E000000000000000800000000000000090002F +:10D1F0000000000400000004A04120000000000026 +:10D20000000000000004000420002000200920404D +:10D210000404040004040400210820400040050028 +:10D22000004020210411A00000000041000900047A +:10D230000100000000000005040020400000004143 +:10D24000000000409002000000000000000000000C +:10D250000000040005000400200090400000004091 +:10D26000A00082000000000000000000008200001A +:10D2700000002084409021004021000004001000A4 +:10D28000400000000000000120018008C0008590DF +:10D290009000809180C0A0018900820080850021DB +:10D2A00082882090A100A0000000000040001188AA +:10D2B000000020000000000000040020000000002A +:10D2C00009000000000000000000008800000020AD +:10D2D000000000000000A00080000000000000002E +:10D2E0000000000000000400000000008200820036 +:10D2F00000000041000208000404000000200000BB +:10D300000000082000000000000000000180000074 +:10D310000180040000002000A000000000000000C8 +:10D320000000000004000090040004000000A000C1 +:10D330008200C080A0000000200000040000002047 :10D3400000000000000000000000000000000000DD -:10D3500000000000000000000000000000000000CD -:10D3600000000000000000000000000000000000BD -:10D370000000000000000084000000000000000029 -:10D38000000000000000000000000000000000009D -:10D39000000000000000000000000000000000008D -:10D3A000000000000000000000000000000000007D -:10D3B000000000000000000000000000000000006D +:10D3500000000000A0000400000020000480000085 +:10D360000000A000C00000000000000082000302D6 +:10D370000800080000902105008800010804080446 +:10D380001100080004000000000000000000040478 +:10D3900000000404040000008000000000001004ED +:10D3A00008001100050080000020800080000000BF +:10D3B00000000000004000000000800000010000AC :10D3C000000000000000000000000000000000005D -:10D3D000000000000000000000000000000000004D +:10D3D000000000000000000080C000008000800409 :10D3E000000000000000000000000000000000003D -:10D3F000000000000000000000000000000000002D -:10D400000004000000000000000000000000000018 -:10D41000000000000000000000000000000000000C -:10D4200000000000000000000000000000000000FC -:10D4300000000000000000000000000000000000EC -:10D4400000000000000000000000000000000000DC -:10D4500000000000000000000000080000000000C4 -:10D4600000000000000000000000000000000800B4 -:10D4700000000000000000000000000000000000AC -:10D48000000000000000000000000000000000009C -:10D49000000000000000000000000000000000008C -:10D4A000000000000000000000000000000000007C -:10D4B000000000000000000000000000000000006C -:10D4C000000000000000000000000000000000005C +:10D3F000840000040200000088000000000000001B +:10D400000008000000000000008000800000000014 +:10D41000000800002000000090001000000900003B +:10D420000041C002004140002000202120112000C6 +:10D43000000008800900A100C000000000020005F3 +:10D440000009000000000011000090000000000032 +:10D4500002000000000000000000000000002000AA +:10D46000020000009000C000C0000800040004009A +:10D4700008000000000000002140000000C0000083 +:10D4800000004000410004020300020400040020E8 +:10D49000080200880000000000080000009005005D +:10D4A00000884140000004820020A000A0108000FD +:10D4B000A00000004004200020880084200020827A +:10D4C000040020040000080002000000000000002A :10D4D000000000000000000000000000000000004C -:10D4E00000000000000000000000000000820000BA -:10D4F000000000000000000000000000000000002C -:10D50000000000000000000000000000000000001B -:10D51000000000000000000000000000000000000B -:10D5200000000000000000000000000000000000FB -:10D5300000000000000000000000000000000000EB -:10D5400000000000000000000000000000000000DB -:10D5500000000000000000000000000000000000CB -:10D5600000000000000000000000000000000000BB -:10D5700000000000000000000000000000000000AB -:10D58000000000000000000000000000000000009B -:10D59000000000000000000000000000000000008B -:10D5A000000000000000000000000000000000007B -:10D5B000000000000000000000000000000000006B -:10D5C000000000000000000000000000000000005B +:10D4E0000000000000000000000002000000020038 +:10D4F000000000000000000000000000000101002A +:10D500008200000100000000000000000000000098 +:10D510000100010000C001900884008401000000A7 +:10D520008900000000000000000000000000000072 +:10D530000100000000009140884090820488109013 +:10D54000019190A088090000000000000000000088 +:10D55000000000000000004000A000C000840100A6 +:10D56000000001000000000000000000000090C169 +:10D57000008202C00405000000000000000011410C +:10D580000321080500210000000000000000000049 +:10D5900000000400040000800580900000001100DD +:10D5A0002100400000000000000009000000000011 +:10D5B00000004000000000001100210089800000F0 +:10D5C00083912002090300210000000000000000F8 :10D5D000000000000000000000000000000000004B -:10D5E000000000000000000000000000000000003B -:10D5F000000000000000000000000000000000002B -:10D60000000000000000000000000000000000001A -:10D61000000000000000000000000000000000000A -:10D6200000000000000000000000000000000000FA -:10D6300000000000000000000000000000000000EA -:10D6400000000000000000000000000000000000DA +:10D5E00011000000400000000000000000000000EA +:10D5F00000104003800580040000000000000000CF +:10D600000800210000112090000000000000000030 +:10D61000000900000004000000400000004000007D +:10D6200000040000004000000008000000080000A6 +:10D630000008000000080000000020088890888290 +:10D640004000108521A0200205C00000000000005D :10D6500000000000000000000000000000000000CA -:10D6600000000000000000000000000000000000BA -:10D6700000000000000000000000000000000000AA -:10D68000000000000000000000000000000000009A -:10D69000000000000000000000000000000000008A -:10D6A000000000000000000000000000000000007A -:10D6B000000000000000000000000000000000006A -:10D6C000000000000000000000000000000000005A +:10D660000000002000800003008000000080000017 +:10D670000000808000A00009008000000000000081 +:10D68000000000040100000001890000000000000B +:10D6900000000000000000000000000000C00005C5 +:10D6A00000C00000000400010084000100400001EF +:10D6B000004000010040000100400000210102C1C3 +:10D6C00002052082109008C020C120C10000000087 :10D6D000000000000000000000000000000000004A -:10D6E000000000000000000000000000000000003A -:10D6F000000000000000000000000000000000002A -:10D700000000000000000000000000000000000019 -:10D710000000000000000000000000000000000009 -:10D7200000000000000000000000000000000000F9 -:10D7300000000000000000000000000000000000E9 -:10D7400000000000000000000000000000000000D9 -:10D7500000000000000000000000000000000000C9 -:10D7600000000000000000000000000000000000B9 -:10D7700000000000000000000000000000000000A9 -:10D780000000000000000000000000000000000099 -:10D790000000000000000000000000000000000089 -:10D7A0000000000000000000000000000000000079 -:10D7B0000000000000000000000000000000000069 -:10D7C0000000000000000000000000000000000059 +:10D6E00000000000000100200000004000000002D7 +:10D6F00000000000084004C104A182C00000000036 +:10D700000000000000010000900000010000000087 +:10D7100000000000000002000000010020014001A4 +:10D720000401C101000008000800010104002000FC +:10D73000408201000000200040000100000089112B +:10D7400020090203040911020589C0890290000022 +:10D7500000000000000000000000000000000400C5 +:10D7600000000000900001004000400001000000A7 +:10D7700000000000000085A10189C004C0A00000D5 +:10D7800000000000000000021141080320400000DA +:10D790000000000000000000800000002000C040E9 +:10D7A0000020000405110910802180054002C000FE +:10D7B00080000000410040008000000041000000A7 +:10D7C0004140009100A18910410391408321C0A0F4 :10D7D0000000000000000000000000000000000049 -:10D7E0000000000000000000000000000000000039 -:10D7F0000000000000000000000000000000000029 -:10D800000000000000000000000000000000000018 +:10D7E00080000000000000004000000080002000D9 +:10D7F0000000000000000000410808049109000931 +:10D800000000000000000000414020004100200313 :10D810000000000000000000000000000000000008 -:10D8200000000000000000000000000000000000F8 -:10D8300000000000000000000000000000000000E8 -:10D8400000000000000000000000000000000000D8 -:10D8500000000000000000000000000000000000C8 -:10D8600000000000000000000000000000000000B8 -:10D8700000000000000000000000000000000000A8 -:10D880000000000000000000000000000000000098 +:10D820000000800200400000000400100000000022 +:10D8300000080009000000000008000200000000CD +:10D8400000008000800000000020402121C0050071 +:10D8500003110000000000000000000000000000B4 +:10D8600000000000000000000000000800040000AC +:10D870000000000000000000000021408500408002 +:10D880004000000000000000000001200100000036 :10D890000000000000000000000000000000000088 -:10D8A0000000000000000000000000000000000078 -:10D8B0000000000000000000000000000000000068 -:10D8C0000000000000000000000000000000000058 -:10D8D0000000000000000000000000000000000048 -:10D8E0000000000000000000000000000000000038 -:10D8F0000000000000000000000000000000000028 -:10D900000000000000000000000000000000000017 -:10D910000000000000000000000000000000000007 -:10D9200000000000000000000000000000000000F7 -:10D9300000000000000000000000000000000000E7 -:10D9400000000000000000000000000000000000D7 -:10D9500000000000000000000000000000000000C7 +:10D8A00000000000900084018400000100000000DE +:10D8B0000000000100A0A000000000010000000026 +:10D8C000000000000404049008A09000A083081049 +:10D8D000C0900901000000000000000000000000EE +:10D8E0000000000000000000000000000001000136 +:10D8F0000000000000000000000000008300044061 +:10D90000824040000000000000000000000000E035 +:10D91000000000000000000000000000000000E027 +:10D9200000000000000000E007000000000000E030 +:10D9300007000000000000E007000082000000E097 +:10D94000070000820000000000E000004800000026 +:10D9500000E000004842000000000000000000005D :10D9600000000000000000000000000000000000B7 -:10D9700000000000000000000000000000000000A7 -:10D980000000000000000000000000000000000097 +:10D9700000E00700000000000000000000000000C0 +:10D98000000000004842000000000000000000000D :10D990000000000000000000000000000000000087 -:10D9A0000000000000000000000000000000000077 -:10D9B0000000000000000000000000000000000067 -:10D9C0000000000000000000000000000000000057 -:10D9D0000000000000000000000000000000000047 +:10D9A00000000000000002C202C2000000000000EF +:10D9B000000000000000F0F0000000FF0000000088 +:10D9C0000000000000000000020880200408102071 +:10D9D00000000960408010200000000000000000EE :10D9E0000000000000000000000000000000000037 :10D9F0000000000000000000000000000000000027 -:10DA00000000000000000000000000000000000016 +:10DA00002400002400090060000000000000000065 :10DA10000000000000000000000000000000000006 -:10DA200000000000000000000000000000000000F6 -:10DA300000000000000000000000000000000000E6 -:10DA400000000000000000000000000000000000D6 -:10DA500000000000000000000000000000000000C6 +:10DA2000000000000000000002C202C2000000006E +:10DA30000000000000000000F0F0000000FF000007 +:10DA4000000000000000000000000104401001027E +:10DA5000408009600000010204080000000000008E :10DA600000000000000000000000000000000000B6 :10DA700000000000000000000000000000000000A6 -:10DA80000000000000000000000000000000000096 +:10DA8000000081000081090060000000000000002B :10DA90000000000000000000000000000000000086 -:10DAA0000000000000000000000000000000000076 -:10DAB0000000000000000000000000000000000066 -:10DAC0000000000000000000000000000000000056 -:10DAD0000000000000000000000000000000000046 -:10DAE0000000000000000000000000000000000036 +:10DAA000000000000000000000004340FFFF0000F5 +:10DAB000000000000000000000000000FFFF000068 +:10DAC0005555000000000000000000000690000016 +:10DAD00024000024060000060410082000000000B6 +:10DAE000000000000000000000000000FF00FF1F19 :10DAF0000000000000000000000000000000000026 -:10DB00000000000000000000000000000000000015 +:10DB00000000000024810000240000240000000028 :10DB10000000000000000000000000000000000005 -:10DB200000000000000000000000000000000000F5 +:10DB20000000000000000000000000004340000072 :10DB300000000000000000000000000000000000E5 -:10DB400000000000000000000000000000000000D5 -:10DB500000000000000000000000000000000000C5 -:10DB600000000000000000000000000000000000B5 -:10DB700000000000000000000000000000000000A5 -:10DB80000000000000000000000000000000000095 -:10DB90000000000000000000000000000000000085 -:10DBA0000000000000000000000000000000000075 -:10DBB0000000000000000000000000000000000065 -:10DBC0000000000000000000000000000000000055 -:10DBD0000000000000000000000000000000000045 +:10DB4000000055550000000000000000000000002B +:10DB5000069081000081900000900140028000004A +:10DB60000000000000000000000000000000FF00B6 +:10DB7000FF14000000000000000000000000000092 +:10DB800000000000000000002481810000810000EE +:10DB900000000000000000610007000D0000000010 +:10DBA00000000000000000610007000D000005619A +:10DBB000340F050D00A005610A0F050D00A01561C9 +:10DBC0002A0F054D00A805610A0F050D00A00000F1 +:10DBD00060610007000D100000610007000D0800E3 :10DBE0000000000000000000000000000000000035 -:10DBF0000000000000000000000000000000000025 -:10DC00000000000000000000000000000000000014 -:10DC10000000000000000000000000000000000004 +:10DBF000000000000000000005610A0F050D00A0F4 +:10DC0000000000000000000060610006000D100030 +:10DC10000000000000000000003C0014F5A0F5F535 :10DC200000000000000000000000000000000000F4 -:10DC300000000000000000000000000000000000E4 +:10DC3000000000000CD70C1400000000F0AAFF3C0C :10DC400000000000000000000000000000000000D4 -:10DC500000000000000000000000000000000000C4 +:10DC5000000000000000FF000000000000000000C5 :10DC600000000000000000000000000000000000B4 :10DC700000000000000000000000000000000000A4 -:10DC80000000000000000000000000000000000094 -:10DC90000000000000000000000000000000000084 -:10DCA0000000000000000000000000000000000074 -:10DCB0000000000000000000000000000000000064 -:10DCC0000000000000000000000000000000000054 -:10DCD0000000000000000000000000000000000044 -:10DCE0000000000000000000000000000000000034 +:10DC80000000000000000000000055155555000080 +:10DC900000000000000000000000003C0505B4A0EA +:10DCA000B4F50000000000000000000000000000CB +:10DCB000000000000000CFD7CF1400000000F0AA41 +:10DCC000003C000000000000000000000000000018 +:10DCD0000000000000000000FF00040000008000C1 +:10DCE0000001000000000000000000000000000033 :10DCF0000000000000000000000000000000000024 -:10DD00000000000000000000000000000000000013 -:10DD10000000000000000000000000000000000003 -:10DD200000000000000000000000000000000000F3 +:10DD000000000000000000000000000055155555FF +:10DD1000010000000000000000000000AAAA2D2D54 +:10DD2000F0F0F0F000000000000000000000000033 :10DD300000000000000000000000000000000000E3 :10DD400000000000000000000000000000000000D3 -:10DD500000000000000000000000000000000000C3 +:10DD50000000000000000000000000FF00FF0000C5 :10DD600000000000000000000000000000000000B3 :10DD700000000000000000000000000000000000A3 :10DD80000000000000000000000000000000000093 -:10DD90000000000000000000000000000000000083 -:10DDA0000000000000000000000000000000000073 +:10DD9000000000000000000000000000000000FF84 +:10DDA0000F3CFFFF282800000000000000000000DA :10DDB0000000000000000000000000000000000063 :10DDC0000000000000000000000000000000000053 -:10DDD0000000000000000000000000000000000043 -:10DDE0000000000000000000000000000000000033 +:10DDD00000000000000000000000000000BF00FF85 +:10DDE0000000002001000000000000000000000012 :10DDF0000000000000000000000000000000000023 :10DE00000000000000000000000000000000000012 -:10DE10000000000000000000000000000000000002 -:10DE200000000000000000000000000000000000F2 -:10DE300000000000000000000000000000000000E2 -:10DE400004000000000000000000000000000000CE -:10DE500000000000000000000001000000000000C1 -:10DE60000000200000000000000000000000000092 -:10DE700000000000000000000000000000000000A2 -:10DE80000000000000000000000000000000000092 -:10DE90000000000000000000000000000000000082 -:10DEA0000000000000000000000000000000000072 -:10DEB0000000000000000000000000000000000062 -:10DEC0000000000000000000000000000000000052 -:10DED0000000000000000000000000000000000042 -:10DEE0000000000000000000000000000000000032 -:10DEF0000000000000000000000000000000000022 -:10DF00000000000000000000000000000000000011 -:10DF10000000000000000000000000002080400021 -:10DF200000802080000000000000000000000000D1 -:10DF300000000000000000000000000000000000E1 -:10DF400000000000000000000000000000000000D1 -:10DF500000000000000000000000000000000000C1 -:10DF600000000000000000000000000000000000B1 -:10DF700000000000000000000000000000000000A1 -:10DF80000000000000000000000000000000000091 -:10DF900000000000000000000000000000008002FF -:10DFA0008000000280020000000000000008000065 -:10DFB0000000000000000000000000000000000061 -:10DFC0000000000000000000000000000008000049 -:10DFD0000000000000000000000000000000000041 -:10DFE0000000000000000000000000000000000829 -:10DFF0000000000000000000000000000000000021 -:10E00000000000000000000000000000000000040C -:10E0100000000000000000000000000004000400F8 -:10E0200000000000000000020009000000000040A5 -:10E0300000000000000000000000000000000000E0 -:10E0400000000000000000000000000000000000D0 -:10E0500000000000000000000000000000000000C0 -:10E0600000000000000000000000000000000000B0 -:10E0700000000000000000000000000000000000A0 +:10DE1000000000200000000000000000C000200002 +:10DE200082000000000020400000000000004000D0 +:10DE30000000000000000000200020002000200062 +:10DE40000082008001000000000000A000000080AF +:10DE50000000200000040000000300000480000413 +:10DE60000084000000000004040000000000000026 +:10DE70000000000000000000010400000400020097 +:10DE80000400000000000004000400000000000086 +:10DE90000000000000000011000400C0000000901D +:10DEA00000000090000040402190000000C00000F1 +:10DEB00080000000000021000002800080408000FF +:10DEC0008000001000040240000400000041000235 +:10DED00000100000C0040002000200000000000466 +:10DEE000000100020000000000000000000000002F +:10DEF00000000000000020000000080000000000FA +:10DF000000000000000000000040000200000000CF +:10DF100000000000000000000002000200000509EF +:10DF2000000091000440000082000000400040100A +:10DF3000850010000809000003090000000010001F +:10DF40000200400082008400000000000040004009 +:10DF5000020084000100000000000000000000003A +:10DF6000000000000000020000000000000000406F +:10DF7000000000000000020002000000000000009D +:10DF8000000000000000020000000000820000000D +:10DF90000000000000000000020004000200001069 +:10DFA000021000000808000000040000004080008B +:10DFB00080401082800480000000C004030800003C +:10DFC000800400008308000000000200000004003C +:10DFD0000000000000002000008200000008000097 +:10DFE0000000000000000008000000000000000029 +:10DFF000000000000000030000000000000000829C +:10E0000000C020000000000400000000000000002C +:10E0100000000000000000000000040002000000FA +:10E02000000084088221840000009040000000006D +:10E030000800C000C02020000403840800009000F5 +:10E040000000001100040000000000000000028039 +:10E0500000844000000008000011000000000040A3 +:10E06000000000000000000000800400000000002C +:10E07000400002000000000000050004000400044D :10E080000000000000000000000000000000000090 -:10E090000000000000000000000000000000000080 -:10E0A0000000000000000000000000000000000070 -:10E0B0000000000000000000000000000000000060 -:10E0C0000000000000000000000000000000000050 -:10E0D0000000000000000000000000000000000040 -:10E0E0000000000000000000000000000000000030 -:10E0F0000000000000000000000000000000000020 -:10E10000000000000000000000000000000000000F -:10E1100000000000000000000000000000000000FF -:10E1200000000000000000000000000000000000EF -:10E1300000000000000000000000000000000000DF -:10E1400000000000000000000000000000000000CF -:10E1500000000000000000000000000000000000BF -:10E1600000000000000000000000000000000000AF -:10E17000000000000000000000000000000000009F -:10E18000000000000000000000000000000000008F -:10E19000000000000000A0000000000000000000DF -:10E1A000000000000000000000000000000000006F -:10E1B000000000000000000000000000000000005F -:10E1C000000000000000000000000000000000004F -:10E1D000000000000000000000000000000000003F -:10E1E000000000000000000000000000000000002F -:10E1F000000000000000000000000000000000001F -:10E20000000000000000000000000000000000000E +:10E090000000400000000000000000000000000040 +:10E0A000000000000300000009000820000000003C +:10E0B00000000000000000400000000000002100FF +:10E0C00000000000000041000000050000100000FA +:10E0D00004040020008400000000090011820000F8 +:10E0E0000900000020002000200020040020000083 +:10E0F000000080900090000000000000000100017E +:10E10000000100000000000000000000000000000E +:10E1100000000002000000000000000000000000FD +:10E12000000000000000C0410000C010824000104C +:10E13000C01100000800000000000000A00008114D +:10E140004011004020002041200020000100040078 +:10E1500004910400A0110011000000200000004004 +:10E1600000000800000000004080000000000040A7 +:10E1700000200000202000000004000000000080BB +:10E18000000000800000000000000000000000000F +:10E19000000000000200000000000000000000007D +:10E1A000000000000000000000000000200000004F +:10E1B0000000000000000000110041004140040088 +:10E1C00040004100400080408040800084004000CA +:10E1D0008000A00280000000008820000020400095 +:10E1E00000001100C004000000840504002000C0ED +:10E1F000000000000000200000880300000000C0B4 +:10E200002020200400200000000400000000002066 :10E2100000000000000000000000000000000000FE -:10E2200000000000000000000000000000000000EE -:10E2300000000000000000000000000000000000DE -:10E2400000000000000000000000000000000000CE -:10E2500000000000000000000000000000000000BE -:10E2600000000000000000000000000000000000AE -:10E27000000000000000000000000000000000009E -:10E28000000000000000000000000000000000008E +:10E2200000000000000000000000080000201100B5 +:10E23000C0008200040082000000820000004080D4 +:10E2400000200000080008110021000090001003C9 +:10E25000000000000020080082008280828082800E +:10E260008800828082808280000008080000090007 +:10E2700008000000000900000000000000209004D9 +:10E280002003000000000004000000000000000067 :10E29000000000000000000000000000000000007E :10E2A000000000000000000000000000000000006E -:10E2B000000000000000000000000000000000005E -:10E2C000000000000000000000000000000000004E -:10E2D000000000000000000000000000000000003E -:10E2E000000000000000000000000000000000002E -:10E2F000000000000000000000000000000000001E -:10E30000000000000000000000000000000000000D -:10E3100000000000000000000000000000000000FD -:10E3200000000000000000000000000000000000ED -:10E3300000020000000000000000000000000000DB -:10E3400000000000000000000000000000000000CD -:10E3500000000000000000000000000000000000BD -:10E3600000000000000000000000000000000000AD -:10E37000000000000000000000000000000000009D -:10E38000000000000000000000000000000000008D -:10E390000000000000000800000000000000000075 -:10E3A00000000000000000008800000000000000E5 -:10E3B0000000000100000000000000000800000054 -:10E3C000000000000000000000000000000000004D -:10E3D000000000000000000000000000000000003D -:10E3E000000000000000000000000000000000002D -:10E3F000000000000000000000000000000000001D -:10E40000000000000000000000000000000000000C -:10E4100000000000000000000000000000000000FC -:10E4200000000000000000000000000000000000EC -:10E430000001880020000000000000000000000033 -:10E4400000000000000000000000000000000000CC -:10E4500000000000000000000000000000000000BC -:10E4600000000000000000000000000000000000AC -:10E47000000000000000000000000000000000009C -:10E48000000000000000000000000000000000008C +:10E2B00020000000100008200920000000200000BD +:10E2C00084100004000000000000000000000000B6 +:10E2D000000011840000000000C000840020002025 +:10E2E000002000840004000400040000409040046A +:10E2F0000204040009900900400421040000000009 +:10E30000000000000000000000010000000000000C +:10E310002100000000000084000000000000000058 +:10E320000000000000000084001003000000000056 +:10E33000000500001021002104040000C00082003C +:10E34000C000880020110000C00000002000000074 +:10E35000081008100400000488000000A02000003D +:10E360000002000490040003900084000000008478 +:10E3700008000000842100090002000000020200E1 +:10E3800000050000000001000104040000840000FA +:10E39000000000000020000000000000000000005D +:10E3A0000002000000000000000000000000080063 +:10E3B00000002100040000040000000000000040F4 +:10E3C00000000000004041400800218440880910FE +:10E3D000000021042000880003000000000000016C +:10E3E0000004000000880001200020900040000090 +:10E3F000200540000000090000200000002000006F +:10E4000000001100000000000400040100000221CF +:10E4100000000040000005000000000000000800AF +:10E4200000000000110000001100000000000000CA +:10E43000000021002000000100000000000000009A +:10E440000305022190A082410001000000000000AD +:10E450000000000088000000000000000001000033 +:10E46000000000000000000002000000000040006A +:10E470000000830201908808900802C0010484888B +:10E480000802000000000000000000000000010081 :10E49000000000000000000000000000000000007C :10E4A000000000000000000000000000000000006C -:10E4B0000000000820200508000000000000000007 -:10E4C000000000000000000000000000000000004C -:10E4D000000000000000000000000000000000003C -:10E4E000000000000000000000000000000000002C -:10E4F000000000000000000000000000000000001C -:10E50000000000000000000000000000000000000B -:10E5100000000000000000000000000000000000FB +:10E4B00000000011210909200002000000000000F6 +:10E4C000000082C1118300208008000800050005BB +:10E4D00000080000030010000000002003400408B2 +:10E4E0000005000000000000000080000000110096 +:10E4F00000000000208002000400000000002080D6 +:10E50000000000800000000000000000000000008B +:10E5100002000000000000000000000000000000F9 :10E5200000000000000000000000000000000000EB -:10E530000000000010000800100003400000000070 -:10E5400000000000000000000000000000000000CB -:10E5500000000000000000000000000000000000BB -:10E5600000000000000000000000000000000000AB -:10E57000000000000000000000000000000000009B -:10E58000000000000000000000000000000000008B -:10E59000000000000000000000000000000000007B +:10E5300000000000C08003000320A00300000000D2 +:10E540000000000080000010888002A1400021200F +:10E5500010000241000500000040000040000220C1 +:10E560000200109000000000000080000040000049 +:10E57000802080000000800900A10005008041008B +:10E580008484200240800000000000000000801011 +:10E590008000000880000000000000000000000073 :10E5A000000000000000000000000000000000006B -:10E5B0000000000000000100010000000100000058 -:10E5C000000000000000000000000000000000004B -:10E5D000000000000000000000000000000000003B -:10E5E000000000000000000000000000000000002B -:10E5F000000000000000000000000000000000001B -:10E60000000000000000000000000000000000000A -:10E6100000000000000000000000000000000000FA +:10E5B00000000000000008400400A000C0010000AE +:10E5C000000000000000A0A08201A01000A10090A7 +:10E5D000010001080101000000000001000000909E +:10E5E00001C101900009020020C09000C082A0017A +:10E5F0004000A00108000000040008C082C0A0C0C4 +:10E60000020009C19184C0C00000000000000000A9 +:10E6100040010284040008400000000000000000E7 :10E6200000000000000000000000000000000000EA -:10E6300000000000000000000000000101010000D7 -:10E6400000000000000000000000000000000000CA -:10E6500000000000000000000000000000000000BA -:10E6600000000000000000000000000000000000AA -:10E67000000000000000000000000000000000009A -:10E68000000000000000000000000000000000008A -:10E69000000000000000000000000000000000007A +:10E6300000000000000000000000000100010000D8 +:10E640000000000000000000089001100005C0114B +:10E6500000000100000000000000080000000101AF +:10E66000000000000800000100000000040000009D +:10E6700000020402004000A0000041030803C09013 +:10E68000080991030002C0111009000000000000F9 +:10E69000000001008800840001000000000000006C :10E6A000000000000000000000000000000000006A -:10E6B0000000000000000000000000000008212110 -:10E6C000000000000000000000000000000000004A -:10E6D000000000000000000000000000000000003A -:10E6E000000000000000000000000000000000002A -:10E6F000000000000000000000000000000000001A -:10E700000000000000000000000000000000000009 -:10E7100000000000000000000000000000000000F9 +:10E6B000000000000000000000000008000205212A +:10E6C000004000000000000000008020202000A189 +:10E6D000000200000800100000000040800400411B +:10E6E000024105080320852000020400000080008C +:10E6F00000000080008000002000000041C08085F4 +:10E7000080118540418200A180A18020000000008E +:10E7100000000000040000000000410000000000B4 :10E7200000000000000000000000000000000000E9 -:10E730000000000000000000000000002180000038 -:10E7400010000210000000000000000000000000A7 -:10E7500000000000000000000000000000000000B9 -:10E7600000000000000000000000000000000000A9 -:10E770000000000000000000000000000000000099 -:10E780000000000000000000000000000000000089 -:10E790000000000000000000000000000000000079 +:10E7300000000000000000000000000010210205A1 +:10E740004100100300000000000000004100808034 +:10E7500003000800C080C00020000509000400007C +:10E760000000000088004004050008100000008937 +:10E77000000000000005008000800080000000080C +:10E780000080008000000082000000000002000005 +:10E790000000000000000005002100000000000053 :10E7A0000000000000000000000000000000000069 -:10E7B0000000000000000000000000000000010256 -:10E7C0000000010001000000000000000000000047 -:10E7D0000000000000000000000000000000000039 -:10E7E0000000000000000000000000000000000029 -:10E7F0000000000000000000000000000000000019 -:10E800000000000000000000000000000000000008 -:10E8100000000000000000000000000000000000F8 +:10E7B000000000000000000000000000000001C197 +:10E7C00001900084000100000000000000004100F2 +:10E7D00002A088A00900C1A010008200C0000000B3 +:10E7E000000000000000C102080020000901000034 +:10E7F0000002000000000000002000020090000065 +:10E80000A00120202002880088101008A0028801A2 +:10E810000000000000000000000000200090000048 :10E8200000000000000000000000000000000000E8 :10E8300000000000000000000000000000000000D8 :10E84000000000E0000000000000000000000000E8 -:10E8500000000000000000000000000000000000B8 -:10E8600000000000000000000000000000000000A8 -:10E870000000000000000000000000000000000098 -:10E880000000000000000000000000000000000088 -:10E890000000000000000000000000000000000078 -:10E8A0000000000000000000000000000000000068 +:10E850000000000000000000000000000000000AAE +:10E86000000000E000000000000000E007000000E1 +:10E870000000000007000000000000E000000000B1 +:10E880000000000000E0000048420000000000001E +:10E8900048420000000000000000000000E0070007 +:10E8A0000006000000000000000000000000000062 :10E8B0000000000000000000000000000000000058 :10E8C0000000000000000000000000000000000048 -:10E8D0000000000000000000000000000000000038 -:10E8E0000000000000000000000000000000000028 +:10E8D0000000663CFFF0C0E0C0F0FF00666600008C +:10E8E000000000000000000000000099787800009F :10E8F0000000000000000000000000000000000018 -:10E900000000000000000000000000000000000007 -:10E9100000000000000000000000000000000000F7 +:10E9000000000000201040802010408020041008EB +:10E910002004400200000000000000000000000091 :10E9200000000000000000000000000000000000E7 :10E9300000000000000000000000000000000000D7 :10E9400000000000000000000000000000000000C7 -:10E9500000000000000000000000000000000000B7 -:10E9600000000000000000000000000000000000A7 +:10E9500000000000663C00F0C3E7C3FFF0F03C3C61 +:10E9600000000000000000000000000066FF787852 :10E970000000000000000000000000000000000097 -:10E980000000000000000000000000000000000087 -:10E990000000000000000000000000000000000077 +:10E980000000000100000408020104080201400226 +:10E99000800110088001000000000000000000005D :10E9A0000000000000000000000000000000000067 :10E9B0000000000000000000000000000000000057 :10E9C0000000000000000000000000000000000047 @@ -85687,479 +85687,479 @@ :10EA100000000000000000000000000000000000F6 :10EA200000000000000000000000000000000000E6 :10EA300000000000000000000000000000000000D6 -:10EA400000000000000000000000000000000000C6 -:10EA500000000000000000000000000000000000B6 +:10EA4000000000000000000000000000BDBD069FA7 +:10EA50000000000000000000009966FF00C100C136 :10EA600000000000000000000000000000000000A6 -:10EA70000000000000000000000000000000000096 -:10EA80000000000000000000000000000000000086 -:10EA90000000000000000000000000000000000076 -:10EAA0000000000000000000000000000000000066 +:10EA7000000000000000000000000000F00036363A +:10EA8000000000000000000000000102080410085F +:10EA90002004102008040000A00500000000000071 +:10EAA000000000000000C3F000990000000000001A :10EAB0000000000000000000000000000000000056 -:10EAC0000000000000000000000000000000000046 -:10EAD0000000000000000000000000000000000036 -:10EAE0000000000000000000000000000000000026 -:10EAF0000000000000000000000000000000000016 -:10EB00000000000000000000000000000000000005 -:10EB100000000000000000000000000000000000F5 -:10EB200000000000000000000000000000000000E5 +:10EAC00000000000000000000000000000002424FE +:10EAD000069F00000000000000002D2D2D2D00F9E4 +:10EAE00000F900000000000000000000000000002D +:10EAF0000000000000000000000000000000F00026 +:10EB00003636000000000080000000008040102029 +:10EB10008001400280400102A005000000000000CA +:10EB20000000000000000000C3F0FF99000000009A :10EB300000000000000000000000000000000000D5 -:10EB40000000000000000000000000000061000361 -:10EB500000090000000000000000000000000000AC -:10EB600000000000000000000000000000000000A5 -:10EB70000000000000000000000000000000000095 -:10EB80000000000000000000000000000000000085 -:10EB90000000000000000000000000000000000075 -:10EBA0000000000000000000000000000000000065 +:10EB4000000000000000000000000000006100075D +:10EB50000009000500000000000000000061000640 +:10EB6000000D0000A0610006000D0000006100071C +:10EB7000000D0000A5610A0D050900A005000A08A6 +:10EB8000050000A500610007000D000000006061A5 +:10EB90000007000D100000610006000D08000000D5 +:10EBA00000000000000005610A0F050D00A0000034 :10EBB0000000000000000000000000000000000055 -:10EBC0000000000000000000000000000000000045 -:10EBD0000000000000000000000000000000000035 -:10EBE0000000000000000000000000000000000025 -:10EBF0000000000000000000000000000000000015 +:10EBC0000000000000000000000000000000EBF06A +:10EBD000EBF0000102030000000000000000000054 +:10EBE0000000000001017D41CFCF000000000000C7 +:10EBF0000000287DFAFAFFFF1C0CFFC0FFC00000D8 :10EC00000000000000000000000000000000000004 -:10EC100000000000000000000000000000000000F4 +:10EC100000000000FF000F0F0000000000000000D7 :10EC200000000000000000000000000000000000E4 :10EC300000000000000000000000000000000000D4 :10EC400000000000000000000000000000000000C4 -:10EC500003030000F0A0F0A000000000000000008E -:10EC600000000000000000000000000000000000A4 -:10EC70000000000000000000000000000000000094 +:10EC5000FFFF55FFFFFFFFFF000000000000000066 +:10EC6000EBEBF3F3000000017D410C0C0000000011 +:10EC700000000000287D5050FFFF3C3CFFC0FFFF1C :10EC80000000000000000000000000000000000084 -:10EC90000000000000000000000000000000000074 +:10EC9000000000000000C3C3555500000000000143 :10ECA0000000000000000000000000000000000064 :10ECB0000000000000000000000000000000000054 :10ECC0000000000000000000000000000000000044 -:10ECD0000000000F00000000002000000000000005 -:10ECE0000000000000000000000000000000000024 -:10ECF0000000000000000000000000000000000014 -:10ED00000000000000000000000000000000000003 +:10ECD0000000C0C0000040400183000000000000B0 +:10ECE000000000F300EB000000FFF5FC05FCFF1442 +:10ECF0000F00000000000000000055F000FC5F0F56 +:10ED00001C0C0000000000000000000000000000DB :10ED100000000000000000000000000000000000F3 :10ED200000000000000000000000000000000000E3 :10ED300000000000000000000000000000000000D3 :10ED400000000000000000000000000000000000C3 -:10ED50000000000000FF00000000000000000000B4 -:10ED600000000000000000000000000000000000A3 -:10ED70000000000000000000000000000000000093 -:10ED80000000000000000000000000000000000083 +:10ED500000000000C0CF000F000000820000000093 +:10ED60000000000000F300EB000000FFF50C050CB4 +:10ED7000FFD70F00000000000000000000F000F0CE +:10ED80005FFF1C3C000000000000000000000000CD :10ED90000000000000000000000000000000000073 -:10EDA0000000000000000000000000000000000063 +:10EDA0000000000001000000000000000000000062 :10EDB0000000000000000000000000000000000053 :10EDC0000000000000000000000000000000000043 -:10EDD0000000000000000000000000002000000013 -:10EDE0000000000000000000200000000000000003 -:10EDF00000000000000000000000400020000000B3 -:10EE000000000000000000002000000000000000E2 -:10EE100000000000000000010000000000002000D1 -:10EE20000000C0000000000000002000880000007A -:10EE300002000000000000000000000000000000D0 -:10EE400000000000000000000000000000000000C2 -:10EE5000200000000000040000000000000000008E -:10EE600000000000000000000000000000000000A2 -:10EE70000000000000000000000000000000000092 -:10EE80000000000000000000000000000000000082 -:10EE90000000000000000000000000000000000072 -:10EEA0000000000000000000000000000000000062 -:10EEB0000000000000000000000000000000000052 -:10EEC0000000000000000000000000000000000042 -:10EED000000000000000000000000000002004000E -:10EEE000002000000480002000200000000000003E -:10EEF0000000000000000000000000000000000012 -:10EF00000000000000000000000000000000000001 -:10EF100000000000000000000000000000000000F1 -:10EF200000000000000000000000000000000000E1 -:10EF300000000000000000000200000000000000CF -:10EF400000000000000000000000000000000000C1 -:10EF500000000000040000000000000000000001AC -:10EF6000800000010000802000010001000200007C -:10EF70000000000000000000000000000000000091 -:10EF80000000000000080000000000000000000079 -:10EF90000000000000000000000000000000000071 -:10EFA000000000000000000400000000000000005D -:10EFB0000000000000000000000000000000000051 -:10EFC0000000000000000000000000000000000041 -:10EFD0000000000000000000000000000000000031 -:10EFE00000800080000000080080C0200080000039 -:10EFF00000000000000900000000000000400000C8 -:10F000000000000000000000000000000000000000 -:10F0100000000000000000000000000000000000F0 -:10F0200000000000000000000000000000000000E0 -:10F0300000000000000000000000000000000000D0 +:10EDD00000000000000000000000000020002000F3 +:10EDE00004000000840020400008001140000000E2 +:10EDF0000141000000000002C000400000020000CD +:10EE0000000000002084000000000000000340001B +:10EE100000000400000000030000208020040080A7 +:10EE20000000000000000000820000080000000256 +:10EE30002000008204800080000000000000040028 +:10EE400000000000000000040000000000000003BB +:10EE500040000000000000000002000220001090AE +:10EE6000400000000000000000000000000221023D +:10EE700000020800000000004001000000C0000186 +:10EE800000020000000000200082000000000000DE +:10EE9000000021000000000000000000000440010C +:10EEA0000002000000000000000000000000000060 +:10EEB00000820000000200020002000000000000CA +:10EEC0000002000000000000000000000000000040 +:10EED00000000000000020000000000300800090FF +:10EEE0000200040002000000020000008800000090 +:10EEF000020090009000020084000408010000025B +:10EF00000002000000000000000000400200042198 +:10EF100000000000000000000200000000000000EF +:10EF2000000000000000040000000000000000409D +:10EF3000000400000020002000200020000000004D +:10EF400000000200000000000000000000000000BF +:10EF5000020010000000000000000000004000104F +:10EF600000410008000009C00008030803080484E9 +:10EF700000000008118811880000000000832000B4 +:10EF800000010009008200900082008220C000027F +:10EF900085000208000000000000000000000008DA +:10EFA00000000000000800004108000020000008E8 +:10EFB00000100001000802C10005000100010082EC +:10EFC00000080000008400000008000000000004A9 +:10EFD0000084000000080000000000000000A021E4 +:10EFE000000200000002A0000400900002110421B1 +:10EFF0000404000900404000100000000000000868 +:10F0000000210000000004000008000000000000D3 +:10F01000041000000000040091080000000000003F +:10F020000000400002008400C00040809084200066 +:10F0300088000000010500200004400000000100DD :10F0400000000000000000000000000000000000C0 -:10F0500000000000000000000000000000000000B0 -:10F060000088002000200000000000200001002097 -:10F070000000000000000000000000000000000090 -:10F080000000000000000000000000000000000080 -:10F090000000000000000000000000000000000070 -:10F0A0000000000000000000000000000000000060 -:10F0B0000000000000000000000000000000000050 -:10F0C0000000000000000000000000000000000040 -:10F0D000000000000000000000000000000003002D -:10F0E00000000000000000000080000000000000A0 -:10F0F0000000000000000000000000000000000010 -:10F1000000000000000010000000000000000000EF -:10F1100000000000000000000000000000000000EF -:10F1200000000000000000000800000000000000D7 -:10F1300000000000000000000000000000000000CF +:10F050000000000000000040000000000000000070 +:10F0600000000000000000000400210041000040FA +:10F070000000400000000300000000A0002000028B +:10F0800041001000410408000000081000000000CA +:10F090000000000000882100000020001100400056 +:10F0A000000000008040800000A0009000040004E8 +:10F0B00000000000008820000001000000000004A3 +:10F0C0002000000000000000000800000000000018 +:10F0D00000000000000000000090000000000000A0 +:10F0E000000000000809100982000000081100005B +:10F0F0000800080010408200080000408202080456 +:10F10000080400400005004000110000002000003D +:10F110000000002020200011A02004410005200054 +:10F120002000000000040004900200040000000021 +:10F130000000000000000080008404022005050596 :10F1400000000000000000000000000000000000BF -:10F15000C0000000000000000000000000000000EF -:10F16000000000000000000000000020000000007F -:10F17000000000000000000000000000000000008F -:10F18000000000000000000000000000000005007A -:10F19000000000000000000000000000000000006F -:10F1A000000000000000000000000000000000005F -:10F1B000050000000000000000000000000000004A -:10F1C000000000000000000000000000000000003F -:10F1D0000800000000000000000000000000000027 -:10F1E000000000000000080008800080A10000006E -:10F1F0000480000400000000000000000000000087 -:10F2000000000000000000000000000000000000FE -:10F2100000000000000000000000000000000000EE -:10F2200000000000000000000000000000000000DE -:10F2300000000000000000000000000000000000CE -:10F2400000000000000000000000000000000800B6 +:10F1500000000000000000000000000000000000AF +:10F160000000000000080020000000000300000074 +:10F1700008000408090000A00000000000C002C050 +:10F180000000000003000590108811040800000032 +:10F19000000003C00009000900000041A0040000B5 +:10F1A00080C090000000000108210800000100005C +:10F1B00005000000080011000020002000200000D1 +:10F1C0002020080000002100080008900300030030 +:10F1D0000300000000000000040000000000000028 +:10F1E0000000000000000000000300004040000597 +:10F1F0000005000000000000020000000000080000 +:10F20000080000000800C080202000208284000048 +:10F2100000000000000000000000000000002000CE +:10F220000800A00040000000000010080000C0809E +:10F230000141000000020000202000208200200088 +:10F24000004100002100000000000000000000005C :10F2500000000000000000000000000000000000AE -:10F2600000000000000000008000002005200400D5 -:10F27000000000200000000000000000000000006E -:10F28000000000000000000000000000000000007E -:10F29000000000000000000000000000000000006E -:10F2A000000000000000000000000000000000005E -:10F2B000000000000000000000000000000000004E -:10F2C000000000000000000000000000000000003E +:10F260000000000000000000040002004100000057 +:10F27000000000081000000005041000000040908D +:10F2800000000820008883200008900000C01002C1 +:10F29000008408A0030005200000210000000800F1 +:10F2A000820080C04000200000000590110405008D +:10F2B000000420904088000405889101000100C0EE +:10F2C000A10000000000A09011000000000000005C :10F2D000000000000000000000000000000000002E -:10F2E000000000000000000000000000000000001E -:10F2F00000020000000000000021000000000000EB -:10F3000000000000000000000000000000000000FD -:10F3100000000000000000000000000000000000ED -:10F3200000000000000000000000000000000000DD -:10F3300000000000000000000000000000000000CD -:10F3400000000000000000000000000000000000BD -:10F3500000000000000000000000000000000000AD -:10F36000000000000000000000000000000000009D -:10F370000000000000000000000000000000080085 -:10F38000000000000000000000000000000000007D -:10F390000000000000000000000000000000080065 -:10F3A000030000000000000000000000000000005A -:10F3B000000000000000000000000000000000004D -:10F3C0000800030000000000000000000000000032 -:10F3D000000000000000000000000000000000002D -:10F3E0000800080000000000000000000000A0A0CD -:10F3F00000880010088800A0010000000202000040 -:10F4000000000000000000000000000000000000FC -:10F4100000000000000000000000000000000000EC -:10F4200000000000000000000000000000000000DC -:10F4300000000000000000000000000000000000CC -:10F4400000000000000000000000000000000000BC +:10F2E000000000000000000000000800080000000E +:10F2F00000000008000000000000004000081000AE +:10F3000000000000000000000400000810000000E1 +:10F3100040002000041020008200000200002011A4 +:10F320000000880004040400042000004020A00421 +:10F3300000800402000000020000200200042004FB +:10F3400020204004200900040009000000020002FF +:10F3500000090000000000000000000000000000A4 +:10F36000000000000000020000000000000000009B +:10F370000000040000000004000000C020400090D5 +:10F380000040000809000090000002000001008415 +:10F390001110000002008000000008002040000062 +:10F3A000000200000008800480828000000000004D +:10F3B000000000040000000000000000800120891F +:10F3C00080410001000189040000020000000000EB +:10F3D0000200000000000000000000880000080497 +:10F3E000008800040000080000000000110001A0D7 +:10F3F0000088008200A00000000000000000000063 +:10F4000000000000000002C0409000881082000050 +:10F4100002014101000100A0009000020002000072 +:10F4200000000000000000A0002001040090000087 +:10F430008320000240909004021000C01110C040D0 +:10F44000000000000000000001000400890000002E :10F4500000000000000000000000000000000000AC :10F46000000000000000000000000000000000009C -:10F470008080000000008000008008200020808044 -:10F48000000000000000000000000000000000007C -:10F49000000000000000000000000000000000006C -:10F4A000000000000000000000000000000000005C -:10F4B000000000000000000000000000000000004C -:10F4C000000000000000000000000000000000003C +:10F4700010800000000000000000000000000000FC +:10F48000000000000000000080808000008080807C +:10F490000008400841020002008000000080008057 +:10F4A000000000000000000009800080048000804F +:10F4B000000011032089821100890080000084006F +:10F4C000000009000000110000001100A100200050 :10F4D000000000000000000000000000000000002C :10F4E000000000000000000000000000000000001C -:10F4F00000008000000000000000000000418008C3 -:10F5000080800000000000000000000000000000FB -:10F5100000000000000000000000000000000000EB -:10F5200000000000000000000000000000000000DB -:10F5300000000000000000000000000000000000CB -:10F5400000000000000000000000000000000000BB -:10F5500000000000000000000000000000000000AB +:10F4F000000000000021800000000000000000006B +:10F50000000000000000000000000000002080213A +:10F510000000418020000504418380008008809025 +:10F520000000000000000000008000040000000255 +:10F530000000000080C00085008200900009008269 +:10F5400080208080000400800004000020890200E8 +:10F55000030510880000000000000000000000000B :10F56000000000000000000000000000000000009B -:10F5700000000000A0009000900020000200900019 -:10F58000842102A000000000000000000000000034 -:10F59000000000000000000000000000000000006B -:10F5A000000000000000000000000000000000005B -:10F5B000000000000000000000000000000000004B -:10F5C000000000000000000000000000000000003B -:10F5D000000000000000000000000000000000002B +:10F570000000000090009000A002020000000000C7 +:10F58000000000000000000000000000A0002001BA +:10F590000491200000400100010101A1400004018C +:10F5A000A0098200000000C0000000080000000860 +:10F5B000000100020000040508C08805A0C0020088 +:10F5C00008C1084010C0000000200001008801C0F0 +:10F5D0000188010001C000000000000000000000E0 :10F5E000000000000000000000000000000000001B -:10F5F0000000000000008200000000000210400037 -:10F6000001404109008800000000000000000000E7 -:10F6100000000000000000000000000000000000EA -:10F6200000000000000000000000000000000000DA -:10F6300000000000000000000000000000000000CA -:10F6400000000000000000000000000000000000BA -:10F6500000000000000000000000000000000000AA +:10F5F00000000000000000100010001020000000BB +:10F60000000000000000000000000000000008886A +:10F6100000080082C1A00001010101000000A090CB +:10F620000008022004200000000004000000A100E7 +:10F63000A00040000800000091858441C0218203A1 +:10F6400005900810C0888804000004000400010030 +:10F650000000080120000001000000000000000080 :10F66000000000000000000000000000000000009A -:10F670000000000000000000000000000000828088 -:10F68000000008A0050503080000000000000000BD -:10F69000000000000000000000000000000000006A -:10F6A000000000000000000000000000000000005A -:10F6B000000000000000000000000000000000004A -:10F6C000000000000000000000000000000000003A -:10F6D000000000000000000000000000000000002A +:10F670000000000000000000000000000080020008 +:10F68000000000000000000000000000000000007A +:10F6900080000000000009000002100210030005B5 +:10F6A00000000000800080000500000080000000D5 +:10F6B0004100000080008400000041204040832081 +:10F6C00040884105808580400980040000000000DA +:10F6D00002001003800280030520030000000000E8 :10F6E000000000000000000000000000000000001A -:10F6F0000000000000000000000000000003808007 -:10F7000000000021008300008000000000000000D5 -:10F7100000000000000000000000000000000000E9 -:10F7200000000000000000000000000000000000D9 -:10F7300000000000000000000000000000000000C9 -:10F7400000000000000000000000000000000000B9 -:10F7500000000000000000000000000000000000A9 +:10F6F000000000000000000000008000800000808A +:10F700008000000000000000000000000000000079 +:10F710000000800000000080800009A1402102005C +:10F7200003100000800400008000000000090000B9 +:10F73000000080080004800080000000210090008C +:10F740000400000000000003800000000000000929 +:10F750000000000040000204090004040000000052 :10F760000000000000000000000000000000000099 -:10F770000000000000000000000000002000004029 -:10F78000028400002001A0201040020000000000C0 -:10F790000000000000000000000000000000000069 -:10F7A0000000000000000000000000000000000059 -:10F7B0000000000000000000000000000000000049 -:10F7C0000000000000000000000000000000000039 -:10F7D0000000000000000000000000000000000029 +:10F7700000000000000000000000000008008210EF +:10F780008804A0000000000000000000000000004D +:10F7900000000000100088A0A08410000189010072 +:10F7A000010000004000408808A0040000000000A4 +:10F7B0000000000090010001900090000000910006 +:10F7C0000208218440009000889082909000000000 +:10F7D000000000000000018801010000000000009E :10F7E0000000000000000000000000000000000019 :10F7F0000000000000000000000000000000000009 -:10F8000000000700000000000000070000000000EA +:10F8000000000000000000000000000000000000F8 :10F8100000000000000000000000000000000000E8 -:10F8200000000000000000000000000000000000D8 -:10F8300000000000000000000000000000000000C8 -:10F8400000000000000000000000000000000000B8 -:10F8500000000000000000000000000000000000A8 +:10F8200000E0000000810000000007000000000070 +:10F83000000007000000000000E007004100000099 +:10F84000000000E000004842000000E000004842E4 +:10F85000000000E007000000000000E00700601268 :10F860000000000000000000000000000000000098 :10F870000000000000000000000000000000000088 -:10F88000F0F00000AAAAFFFF0F0FCFC3F0F0F0F0D6 -:10F890000000000000000000000000000000000068 -:10F8A0000000000000000000000000000000000058 -:10F8B0000000000000000000000000000000000048 -:10F8C0000000000000000000000000000000000038 -:10F8D0000000000000000000000000000000000028 +:10F88000F404F404F303F30300000000000000009C +:10F8900000000000000000000CFC0CFCFFAAF03C83 +:10F8A0000000000000000000FF2C002CCFCFCF0094 +:10F8B0000000000000000000030300000000000042 +:10F8C0000000001100220410082000110022001185 +:10F8D0000022000000000000000000000000000006 :10F8E0000000000000000000000000000000000018 :10F8F0000000000000000000000000000000000008 -:10F900000000F0F00000AAAAAAAA0F0F0E02FF0042 -:10F91000FFFF0000000000000000000000000000E9 -:10F9200000000000000000000000000000000000D7 -:10F9300000000000000000000000000000000000C7 -:10F9400000000000000000000000000000000000B7 -:10F9500000000000000000000000000000000000A7 +:10F900000000F404FF0FF303F30300000000000005 +:10F9100000000000000000000000A0A0AFAF00AA9F +:10F92000F03C0000000000000000FFEF00EFCFCF30 +:10F93000CF000000000000000000030300000000F2 +:10F94000000000001100220001400280110022008E +:10F950001100220000000000000000000000000074 :10F960000000000000000000000000000000000097 :10F970000000000000000000000000000000000087 -:10F98000000000000000FF3FD7D7D4D4FFFF3C3C6D -:10F99000AAAAAA2A0000000000000000000000003F -:10F9A0000000000000000000000000000000000057 -:10F9B0000000000000000000000000000000000047 -:10F9C0000000000000000000000000000000000037 -:10F9D0000000000000000000000000000000000027 +:10F9800000000000F4F0FCF8F202F70700000000AD +:10F99000000000000000000000000000FF3CAAF092 +:10F9A0003B3FFBFF000000000000000094809480BB +:10F9B00057FFFFFF000000000000000000000000F3 +:10F9C0000000000000000410014006000006069040 +:10F9D00000000408102000000000000000000000EB :10F9E0000000000000000000000000000000000017 :10F9F0000000000000000000000000000000000007 -:10FA00000000000000000000EB0BD7D7D414C3C3E4 -:10FA100000000000AA2A0000000000000000000012 -:10FA200000000000000000000000000000000000D6 -:10FA300000000000000000000000000000000000C6 -:10FA400000000000000000000000000000000000B6 -:10FA500000000000000000000000000000000000A6 +:10FA0000000000000000F4F0FCF88080D0D000007E +:10FA10000000000000000000000000000000003CAA +:10FA2000AAF0393DF9FD00000000000000000000D0 +:10FA3000FFFF5757FFFF000000000000000000809C +:10FA400000000000000000000820028090000090EC +:10FA5000000006900102408000000000000000004D :10FA60000000000000000000000000000000000096 :10FA70000000000000000000000000000000000086 -:10FA8000000000000000000000000008000000006E -:10FA90000061000E000D00000000000000000000EA -:10FAA0000000000000000000000000000000000056 -:10FAB0000000000000000000000000000000000046 -:10FAC0000000000000000000000000000000000036 -:10FAD0000000000000000000000000000000000026 -:10FAE0000000000000000000000000000000000016 +:10FA800000000000000000008000000000000000F6 +:10FA90000000000000000000000000000000000066 +:10FAA000800050000000000000600005000D000014 +:10FAB000000000080000000005000A08050000A082 +:10FAC00005610A0F050D00A0000060610007000D30 +:10FAD000100000610007000D080005610A0F050D08 +:10FAE00000A005610A0F050D00A000000000000045 :10FAF0000000000000000000000000000000000006 :10FB000000000000000000000000000000000000F5 -:10FB1000000000000000F0F0F00000000000000015 -:10FB200000000000000000000000000000000000D5 -:10FB300000000000000000000000000000000000C5 +:10FB100000000000000000000000000000000000E5 +:10FB200000000000000000000000F9FCFCFC1000D8 +:10FB300010000000000000000000000000000000B5 :10FB400000000000000000000000000000000000B5 -:10FB500000000000000000000000000000000000A5 -:10FB60000000000000000000000000000000000095 +:10FB5000FC82FCBE0000000001000100000000006B +:10FB600000000000D7CF14CF0E3ECEFE00000000F4 :10FB70000000000000000000000000000000000085 :10FB80000000000000000000000000000000000075 -:10FB9000000000000000000000F000000000000075 -:10FBA0000000000000000000000000000000000055 -:10FBB0000000000000000000000000000000000045 -:10FBC0000000000000000000000000000000000035 -:10FBD0000000000000000000000000000000000025 -:10FBE0000000000000000000000000000000000015 +:10FB90000000000000000000000000000000000065 +:10FBA000000000000000000000000000090C0C0C28 +:10FBB0001000000000000000000000000000000035 +:10FBC000000000000000000000000000000000A095 +:10FBD0000000C082C0BE0000000001000100000063 +:10FBE000000000000000D70C140C0232C2F200002A :10FBF0000000000000000000000000000000000005 :10FC000000000000000000000000000000000000F4 :10FC100000000000000000000000000000000000E4 -:10FC200000000000000000000000000000000000D4 -:10FC300000000000000000000000000000000000C4 +:10FC200000000000000000000000000000004F4144 +:10FC30000F00CACA0F000000000000000000000012 :10FC400000000000000000000000000000000000B4 :10FC500000000000000000000000000000000000A4 -:10FC60000000000000000000000000000000000094 +:10FC60000000000000000000000000001ABA1FBFE2 :10FC70000000000000000000000000000000000084 :10FC80000000000000000000000000000000000074 -:10FC90000000000000000000A000A0000000000024 +:10FC90000000000000000000000000000000000064 :10FCA0000000000000000000000000000000000054 -:10FCB0000000000000000000000000000000000044 +:10FCB0000F000F003A3A0F000000000000000000A3 :10FCC0000000000000000000000000000000000034 -:10FCD0000000000000000000000000000000000024 -:10FCE0000000000000000000000000000000000014 -:10FCF0000000000000000000000000000000000004 +:10FCD0000000002000000000000000000000000004 +:10FCE000000000000000000000000000000010B054 +:10FCF00015B500000000000000000000000000003A :10FD000000000000000000000000000000000000F3 -:10FD1000000088002000000000000000880088002B -:10FD200088000000000000002000000088000000A3 -:10FD3000000420002000000000000000200020003F -:10FD40002000000000000000000000002000000073 -:10FD500000000003200000000000000000008800F8 -:10FD60002000000000000000000000000000000073 -:10FD70000000000000000000000000000000000083 -:10FD80000000000000000000000000000000000073 -:10FD9000000000040000000000000000000000005F -:10FDA0000000000000000000000000000000000053 -:10FDB0000000000100000000000000000000000042 +:10FD100000002002882000000000042004000000F1 +:10FD200088048400200020000000840088112080C6 +:10FD300041802000400000040004200020008802D0 +:10FD40000400000020022000820020002000200883 +:10FD500088880003040000008800000020002002C2 +:10FD600000042002000000000000000220008800C3 +:10FD700000082184200040008400000020002000B2 +:10FD80000000020400000400000000040000200045 +:10FD9000000820081090000200000002000200C0CD +:10FDA00000020000000000004002400200000000CD +:10FDB0000008A0080002000000C0000200001000BF :10FDC0000000000000000000000000000000000033 -:10FDD0000000000000000000000000000000000023 -:10FDE0000000000000000000000000000000000013 -:10FDF0000000000000000000000000000000000003 -:10FE000000000000000000000000000000000000F2 -:10FE100000000000000100000000000000000000E1 -:10FE20000000000000000000C00000000000000012 -:10FE300000000000000000002000000000000000A2 -:10FE400000000000000000000000000000000000B2 -:10FE5000000000000004000000000000000000009E -:10FE60000000000000000000000000000000000092 -:10FE70000000000000000080000000000000000002 -:10FE80000000000000000000000000000000000072 -:10FE90000000000000000000000000000000000062 -:10FEA0000000000000000000000000000000000052 -:10FEB000000000000000000800000000000000003A -:10FEC0000000000000000000000000000000000032 -:10FED0000000000000000009000000000000000019 -:10FEE0000000000000000000000000000000000012 -:10FEF00000000000000000000004000000000000FE -:10FF000000000000000000000000000000000000F1 -:10FF100000000000000000000000000000004000A1 -:10FF200000000000000000000000000000000000D1 -:10FF300000000000000000000000000000000000C1 -:10FF400000000000000000000000000000000000B1 -:10FF500000000000000000000000000000000000A1 -:10FF60000000000000000000000000000000000091 -:10FF70000000000000000000000000000000000081 -:10FF80000000000000000000000000000000000071 -:10FF90000000000000000000000000000000200041 -:10FFA00008000000000000820000000000000000C7 -:10FFB0000020000000000000000000000000080019 -:10FFC0000000000000000000000000000000000031 -:10FFD0000000000000000000000000000000000021 -:10FFE0000800000000000000000000000000000009 -:10FFF0000000000000000000000000000000000001 +:10FDD00000210003000000000000000000000000FF +:10FDE00000000040000000000000000000000002D1 +:10FDF00000000001100300000000000000000000EF +:10FE000000000002000000000000000000000000F0 +:10FE1000000000030000000002000000820000005B +:10FE20000000821088000000004002000400000072 +:10FE30000000000002000000820004040004000032 +:10FE4000000082000000820002000000A00000000C +:10FE50000000002000000000000000000000000082 +:10FE60001000000010001000000002000000000060 +:10FE70002000200000000008000002000000000038 +:10FE80000000000000002000000002000000000050 +:10FE900000008400020000000008030800000000C9 +:10FEA00003000000028400080008000800080000A9 +:10FEB0000008008400840084088408840000008412 +:10FEC0000088000004000088008800820084000090 +:10FED000008400400008000800000000000000004E +:10FEE00000040008000000080008000000000000F6 +:10FEF000000800A020000004020800000008000024 +:10FF00000008000800000008004000000000000099 +:10FF10000040008400000088004040218221002130 +:10FF20009021000040050000080540210003042145 +:10FF30000021400010418441040200050010000926 +:10FF400004050000904184080021400904210000BC +:10FF5000000800080000000000A1000040218421EA +:10FF6000840584081021000084008421400500419C +:10FF7000000040000008000090080005000000009C +:10FF8000000000000000000000000000040000006D +:10FF900000000000000800000000208000000010A9 +:10FFA00000900000110800020000000200000300A1 +:10FFB00040000300000008000000080000000000EE +:10FFC0000300050800A0000000000002000400007B +:10FFD000009000A040200900090009040000000072 +:10FFE000030011040200000000C000C00000000077 +:10FFF0000004000400000000000000000020008455 :020000040015E5 -:1000000000000000000000000000000000000000F0 -:10001000000000000000000000000000000082005E -:1000200082000000820000000800000000000000C4 -:10003000820000000800A00082000000000008000C -:10004000820000008200820000000000000000002A -:100050008200000008008200A000000000000000F4 -:100060000800820000008200820000000000000002 -:1000700000008200C0008200820008000000000032 -:100080000800820082008200820000000000000060 -:100090000000000000000000000000000000000060 -:1000A000000000000000000000000000410000000F -:1000B0000000000000000000000000000000000040 -:1000C0000000000000000000000000000000000030 -:1000D0000000000000000000000000000000000020 -:1000E0000000000000000000000000000800000008 -:1000F0000000000000000000000000000000000000 +:1000000000000000000000A0000000000000000050 +:100010000000000000000000000000008008000058 +:1000200082000000084000102041882000200000CD +:10003000002040008400000000008200A0000000BA +:100040000000C00088000000000000000800400020 +:10005000880084000440A0000000000000000000B0 +:100060004000A000000000008221A000C000A0000D +:100070008200820088400800400090000800820052 +:100080008200820082000000000000008200000068 +:100090000000000000000200000000000000080056 +:1000A0000084000000000000004000000840002024 +:1000B000000000404000000000000208000041086D +:1000C000211000000090000000000000000000006F +:1000D00000A00000000040000200009009000000A5 +:1000E0000000000000000000000000000004080004 +:1000F0000000000000000000000002000088000076 :1001000000000000000000000000000000000000EF -:1001100000000000000000000000000000000000DF -:10012000000000000000000008000000080082003D -:10013000820000200000000000000000000000001D -:100140000000000000000000000000008200080025 -:100150000800000000000000000000000000000097 -:10016000000000000000A0000000000000000800E7 -:10017000080008000000000000000000000000006F -:1001800000000000000000000000000000008200ED -:100190000800000000000000000000000000000057 -:1001A00000000000080204040002000009880000AA -:1001B0000088000000200000000000000000000097 -:1001C000000000000000000000000000000000002F -:1001D000000000000000000000000000000000001F -:1001E000000000000000000000000000000000000F -:1001F00000000000000000000000000000000000FF -:1002000000000000000000000000000000000000EE +:1001100008000000000000000000000000000000D7 +:1001200000000000000500000000000000000000CA +:1001300000000800000000000000A005A000000072 +:10014000C005C00000000000C0000000000000006A +:10015000000800000000000000000000A041400076 +:1001600000000000C010000000008200A004000099 +:100170000000000000000800080000008200C0002D +:1001800082000000A00000000000C000000000008D +:100190000000A00000000000000000000000084176 +:1001A0000000010011000000009020040000000089 +:1001B0000088000000000000000020400800092026 +:1001C0000004092021000800000400000900400488 +:1001D0000002030000000000000000200000008872 +:1001E0000090008800004084410440040500110490 +:1001F00020000504050400000000009009840000B0 +:1002000000840900008800000000000000000000D9 :1002100000000000000000000000000000000000DE -:1002200000000000000000000000000000000000CE -:100230008200C00000000800000000000000000074 -:1002400000000000000000000000000000000000AE -:100250000800000000000000840000000000000012 -:100260000800000000000000000000000000000086 -:10027000C00082000000000000000000000000003C -:10028000000000000000000000000000000000006E -:100290000000080000000000000000000000000056 -:1002A0000000000000000000000008000000000046 -:1002B00000000000000000004100000000000000FD -:1002C000000000000000000000000000000000002E +:1002200000000000400000000000000000088811ED +:100230000004002000004000082100080809080808 +:1002400000210021000900030000000082210008B5 +:100250000000000000200800080000002011000835 +:1002600002400000A00000000800080882004000D2 +:100270000020000000210000000000000000C0027B +:10028000C04000090000000900000002080004202E +:100290008202820000000000400000000000000018 +:1002A000080040000000020000000302118410005A +:1002B000080000A0009000000000000000004000C6 +:1002C00000002000200800000000400000000000A6 :1002D000000000000000000000000000000000001E -:1002E000000000000000000000000000000000000E -:1002F00000000000000000000000000000000000FE +:1002E0000200008202000200000000000082000004 +:1002F00009000004000000000000000000000000F1 :1003000000000000000000000000000000000000ED -:1003100000000000000000000000000021000000BC +:1003100000000000000000000000000000000000DD :1003200000000000000000000000000000000000CD -:10033000000001000000000000000000400000C0BC -:1003400000000000000000000000000000000000AD -:10035000000001000000000000000000400000C09C -:10036000000000000000000000000000000000008D -:10037000000000000100000000000000000040003C -:1003800000C00000000000000000000000000000AD -:10039000000000000100000000000000000040001C -:1003A00000C000000000000000000000000000008D -:1003B00000000000410000000000000000030500F4 -:1003C00000800000000000000000000000000000AD -:1003D00000000000410000000000000000030500D4 -:1003E000008000000000000000000000000000008D -:1003F00000000000000041000000000000000305B4 -:10040000210000800000000000000000000000004B -:100410000000000000004100000000000000000398 -:10042000200000800000000000000000000000002C -:100430000300000000800000800000000000200099 -:1004400010800080000080000000000000410000DB -:100450000300000000800000800000000000200079 -:100460000280008000000000000000000041000049 -:100470000000030000000080000080000000000079 -:100480002000828000800000000000000000004189 -:100490000000030000000080000080000000000059 -:1004A0002000828000800000000000000000004169 -:1004B00000000100000000C000002000000000005B -:1004C00041002102008290000400000000000001B1 -:1004D00000000100000000C000002000000000003B -:1004E0004100210200829000400000000000000155 -:1004F000000000000100000000C00000200000001B -:100500000000410005020082900040000000000051 -:10051000000100000100000000C0000020000000F9 -:100520000000410005020082900040000000000031 -:10053000000100000000C0000000000000000000FA -:100540000000009000000400000000000000000017 -:10055000000000000000C0000000000000000000DB -:1005600000000090000000000000000000000000FB -:100570000000000000000000C000000000000000BB -:1005800000000000009000000000000000000000DB -:100590000000000000000000C0000000000000009B -:1005A00000000000009000000000000000000000BB -:1005B00000000000000000008000000000000000BB -:1005C00000000000000000008000000000000000AB -:1005D000000000000000000080000000000000009B -:1005E000000000000000000000000000000000000B -:1005F000000000000000000000008000000000007B -:1006000000000000000000000000000000000000EA -:10061000000000000000000000008000000000005A -:1006200000000000000000000000000000000000CA -:100630000000000000000000800000C10000000079 -:1006400000000000000000C1800000400000000029 -:100650000000000000000000800000C10000000059 -:100660000000000000000041800000400000000089 -:1006700000000000000000000000800000C1000039 -:100680000000000000000000004180000040000069 -:1006900000000000000000000000800000C1000019 -:1006A00000000000000000000041000000400000C9 -:1006B00000000000000000000000400000C1000039 -:1006C00000000000000000000041020000000000E7 -:1006D00000000000000000000000400000C1000019 -:1006E000000000000000000000A102000000000067 -:1006F000000000000000000000000000400000C1F9 -:100700000000000000000000000000A10200000046 -:10071000000000000000000000000000400000C1D8 -:100720000000000000000000000000A140000000E8 -:1007300000000000000000000000000000000000B9 -:1007400000420000000000004800810000E00000BE -:10075000480000000000000000420000000000000F -:1007600000420000000000004800810000E000009E -:1007700048000000000000000042000000000000EF -:10078000000000420000000000004800810000E07E -:1007900000004800000000000000004200000000CF -:1007A000000000420000000000004800810000E05E -:1007B00000004800000000000000004200000000AF +:10033000000000008400000100080001000000022D +:1003400008C00000000000010000000000000000E4 +:1003500000000100000000000182000000000040D9 +:1003600010400000840000010000000000000000B8 +:1003700000000000000000000000010400008400F4 +:100380000020828200000000000100000000000048 +:1003900000000000000000000000018200000100D9 +:1003A000002010C00000000000010000000000005C +:1003B0000000000400000000004002800040110026 +:1003C000000080000000000000410000000000006C +:1003D00000000004020000000003200000090200E9 +:1003E000000080000000000000410000000000004C +:1003F0000000000000054000000000410400004132 +:1004000004000000808000000000004100000000A7 +:100410000000000000400000000000034000000554 +:100420000200000080000000000000410000000009 +:100430000400000000000000100000000300C100E4 +:100440000480000440000000000000008040000024 +:100450002000000000000000210000000500040052 +:100460004180004004008000000000408003000044 +:100470000000030000000000000010000000050064 +:100480001000820000400300800000000040800453 +:100490000000030000000000000010000000400009 +:1004A0009000A000000340008000000000008020B9 +:1004B000000001000000000000000000000001003A +:1004C0000800020800000100020000000000C00156 +:1004D000000001000000000000000000000000001B +:1004E0000200880800010000400000000001C00177 +:1004F00000000000010000000040000001000000BA +:10050000000003000940000101004000000000015C +:10051000C00000000000000000000000010000001A +:100520000000410004400000010004000000000041 +:10053000C0010000000000000000000000000000FA +:10054000100100040000090000000000000000018C +:10055000000000000000000000000000000000019A +:10056000080100040000010000000000000000017C +:10057000000000000000000000000000000000007B +:100580000000900000400000C100000000000000DA +:10059000000100000000000000000000000000005A +:1005A000000090000040000001000000000000007A +:1005B000000100000000000000000000000000003A +:1005C00000410008008000008300000000000000DF +:1005D00000410000000000000000000000000000DA +:1005E0000005A00300000000030000000000000060 +:1005F000004100000000000000000000400000007A +:10060000000000050009000000004100000000009B +:100610000000004100000000000000000000000099 +:1006200000000005002000000000030000000000A2 +:1006300000000041000000000004008300000004EE +:100640008000C000000000C18040000800000000E1 +:100650000020000003040020800000C10000000012 +:100660000020030000000041000400200000000002 +:10067000000900004003000000008000004000006E +:10068000000000000300000000C180000020000006 +:1006900000000000000005030003800000C100000E +:1006A00000000000030000000041004000200000A6 +:1006B00000000040000003410000840100830000AE +:1006C00000010800080000000041100100010000C6 +:1006D00000000001000001050001200000400000B2 +:1006E00000008201820000000003100100010000F0 +:1006F00000000000000000C1000000008200004077 +:10070000000000008200820000000009400000019B +:10071000000000000000000000A0000020000040D9 +:1007200000000000820082000000009140010001F2 +:10073000000000000000000001A100000000000017 +:1007400000000000000000000000811200E007002F +:100750004800000000000000000000000000000051 +:1007600000000000000000000000811200E007000F +:100770004800000000000000000000000000000031 +:10078000000000000000000000000000811200E0F6 +:1007900007004811000000000000000000000000F9 +:1007A000000000000000000000000000811200E0D6 +:1007B00007004800000000000000000A00000000E0 :1007C0000000000000000000000000000000000029 :1007D0000000000000000000000000000000000019 :1007E0000000000000000000000000000000000009 @@ -86176,251 +86176,251 @@ :100890000000000000000000000000000000000058 :1008A0000000000000000000000000000000000048 :1008B0000000000000000000000000000000000038 -:1008C000747B000000000000000000000000000039 -:1008D0000000000000000000000000000000DE2E0C -:1008E000747B000000000000000000000000000019 -:1008F0000000000000000000000000000000DE2EEC -:100900000000747B000000000000000000000000F8 +:1008C000757B000000000000000000000000000038 +:1008D0000000000000000000000000000000DEAE8C +:1008E000757B000000000000000000000000000018 +:1008F0000000000000000000000000000000DEAE6C +:100900000000757B000000000000000000000000F7 :1009100000000000000000000000000000000000D7 -:10092000DE2E747B000000000000000000000000CC +:10092000DEAE757B0000000000000000000000004B :1009300000000000000000000000000000000000B7 -:10094000DE2E615603400000000000000231E0008E +:10094000DEAE612603400000000000000230A0007F :100950000000000000000C4000000000000002C089 -:100960006A86615603400000000000000231E0008A +:100960006486612603400000000000000230A00001 :100970000000000000000C4000000000000002C069 -:100980006A8600006156034000000000000002314A -:10099000E0000000000000000C400000000000002B -:1009A00002C06A8661560340000000000000023168 -:1009B000E0000000000000000C400000000000000B -:1009C00002C06A8600000000000000000000200055 -:1009D00020000000000000000000000000000000F7 -:1009E0000000000000000000000000000000000007 -:1009F00000000004000000000000000000000000F3 -:100A000000000000000000000000000000000000E6 -:100A1000000000000000000000008800000000024C -:100A200000000000000000000000000000000000C6 -:100A300000000000000000000000000000000000B6 -:100A400000000000000000000000000000000000A6 -:100A50000000000000000000000005000000000091 -:100A60000000000000000000000000000000000086 -:100A70000000000000000000000000000000000076 +:100980006486000061260340000000000000023081 +:10099000A0000000000000000C400000000000006B +:1009A00002C064866126034000000000000002309F +:1009B000A0000000000000000C400000000000004B +:1009C00002C0648688020000830820002000000026 +:1009D0000000200400410000000000022000200070 +:1009E000202020040402000000008404040004000D +:1009F00000000000000000000000000000000000F7 +:100A00000000000400032000000004002004200077 +:100A100020000000000000000002840088000000A8 +:100A200000000000000000000000000000002000A6 +:100A300000020000000000000000000084008800A8 +:100A400000000000000400014000200140020004FA +:100A50001002000400C01002400005901005800044 +:100A600080028000800000000002000200002002DE +:100A70000082000020000000110040000000000083 :100A80000000000000000000000000000000000066 -:100A90000000000000000000000000000000000056 +:100A900000000000000000000082000000000000D4 :100AA0000000000000000000000000000000000046 -:100AB0000000000000000000000000000000000036 -:100AC0000000000000000000000000000000000026 -:100AD0000000000000000000000000000000000016 -:100AE0000000000000000000000000000000000006 -:100AF00000000000000000000000000000000000F6 -:100B000000000000000000000000000000000000E5 -:100B100000000000000000000000000000000000D5 +:100AB000040000000000000000000000000002022E +:100AC0000000000000000000010900000104020015 +:100AD00000041000000040004000820010000000F0 +:100AE00082008200020002000000020000000800F4 +:100AF00000000000000002000000040000000000F0 +:100B000000000200000000000000200400000000BF +:100B10000000000000000000000000400000000095 :100B200000000000000000000000000000000000C5 :100B300000000000000000000000000000000000B5 -:100B400000000000000000000000000000000000A5 -:100B50000000000000000000000000000000000095 -:100B60000000000000020000000000000000000083 -:100B70000000000000000004000000000000000071 -:100B80000000000000000000000000000000000065 -:100B90000000020000000000000000000000000053 -:100BA0000000020000000000000000000000000043 -:100BB0000000000000000000000000000000000035 -:100BC0000000000000000000000000000000000025 -:100BD000000000000000000000000400040000000D -:100BE0000000000000000000000000000000000005 -:100BF00000000000000000000000000000000000F5 -:100C000000000000000000000000000000000000E4 -:100C100000000000000000000000000000000000D4 -:100C200000000000000000000000000000000000C4 +:100B400000000000000000000000400800842009B0 +:100B500000820008830800088040800240888000EE +:100B600000880008000000040982001080080010BE +:100B700082840088009000080000000000880300C4 +:100B80000000000800000004000800000001001040 +:100B900000000008000000000008000000040088B9 +:100BA0000008000800080000000000080000000025 +:100BB00000000084000000000004000000000000AD +:100BC00000080240000400000000000800000000CF +:100BD000000004001005000000000000000584086B +:100BE00020001000400200009008001104000000E6 +:100BF00000211000880300004000400000000000B9 +:100C00000008000800002000200084000000000010 +:100C10008800880000000000200000008210000210 +:100C2000001100000000000084000000040000002B :100C300000000000000000000000000000000000B4 -:100C400000000000000000000000000000000000A4 -:100C50000000000000000020080000080000000064 -:100C60000000000000000000000000000000000084 -:100C7000000000000000000008000000000000006C -:100C80000000000000000000000000000000000064 -:100C90000000000000000000000000000000000054 -:100CA0000000000000000000000000000000000044 -:100CB0000000000000000000000021000000000013 +:100C4000000000000008000000000000000000A0FC +:100C50000008040000080000000000A00800008454 +:100C60000088400000840000000000040400000030 +:100C70000000400008A0000000004100000000004B +:100C80000000008800400000A08411001100000056 +:100C900000000000200020000000000041000000D3 +:100CA00000020000000000000000000000008000C2 +:100CB00000000000000021000000030041000000CF :100CC0000000000000000000000000000000000024 -:100CD0009000000000000000000000000000000084 -:100CE00000000000000200090000000000000000F9 -:100CF00000000000000000000000000000000000F4 -:100D000000000000A0000000000000000000000043 -:100D10000000000000008200000000000000000051 -:100D20000000000040000000000000000000000083 -:100D300000000000000000000000000000000000B3 -:100D4000000000090000000000000000000000009A -:100D50000000000000000000000000000000000093 -:100D60000000000000000000000000000000000083 -:100D70000000000000000000000000000000000073 -:100D80000000000000000000000000000000000063 -:100D90000000000000000000000000000000000053 -:100DA0000000000000000000000000000000000043 +:100CD00000C1000000C100100003004102008211A9 +:100CE000000000400010000000000008000000901C +:100CF00004000420000004000002C00400080000FA +:100D0000820082000000820000000000010020003C +:100D100000000000008000000400A00000000200AD +:100D2000000000000000000000008200040000003D +:100D300000004000000000000000A00000000000D3 +:100D400000000000A00008000000000000000000FB +:100D5000000011021100080803C100000304030091 +:100D600000000000008411000000000000210300CA +:100D700000038000A10000008000000000000000CF +:100D80000000030000000000000008000000020056 +:100D9000A100000000000004000000000000099015 +:100DA0000000001000000000000000000000000033 :100DB0000000000000000000000000000000000033 :100DC0000000000000000000000000000000000023 -:100DD0000000000000000000000000000000000013 -:100DE0000000000000000000000000000000000003 -:100DF00000000000000000000000000000000000F3 -:100E000000000000000000000000000000000000E2 -:100E100000000000000000000000000000000000D2 -:100E200000000000000000000000000000000000C2 -:100E300000000000000000000000000000000000B2 -:100E400000000000000000000000000000000000A2 -:100E50000000000000000000000000000000000092 -:100E6000000400004004030000002100090000000D -:100E70000000000000000000000000000000000072 -:100E80000000000000000000000021000900000038 -:100E90000000000000000000000000000000000052 -:100EA0000000000000000000000000000300090036 -:100EB0000000000000000000000000000000000032 -:100EC0000000000000000000000000000800090011 -:100ED0000000000000000000000000000000000012 -:100EE00000000000080000000000000000000000FA -:100EF00000000000000000000000000000000000F2 -:100F000000000000080000000000000000000000D9 -:100F100000000000000000000000000000000000D1 -:100F200000000000000000000000000000000000C1 -:100F3000000000000000000000000000820000002F -:100F400000000000000000000000000000000000A1 -:100F50000000000000000000000000000000000091 -:100F60000000000000000000000000000000210060 -:100F70000000000000000000000000000000000071 -:100F80000000000000000000000000000000000061 -:100F90000000000000000000000000000000000051 -:100FA0000000000000000000000000000000000041 -:100FB0000000000000000000000000000000000031 +:100DD0000000000008410000000000000021004168 +:100DE000002000000010844000000010C00000003F +:100DF00000000008000000000400080000000000DF +:100E00000000000000002000200000400980820057 +:100E10000880400000000004A04100040800000217 +:100E20000010000000110000000000000000008021 +:100E30000100008000000000000000000800000029 +:100E40000000000000000000000000000000820020 +:100E500000000000000000040000400000040084C6 +:100E600000000000000400000000000000C00400BA +:100E700000000900000000000000800000080000E1 +:100E8000009000000500000000080400000020049D +:100E900011000504800000000003000000110000A4 +:100EA00021000000210000000000000009000300F4 +:100EB00000200400002000000000000000000000EE +:100EC00003000000210000000300000000000800F3 +:100ED0000000000000000000010008800000000089 +:100EE00000000000000300210003840090000000C7 +:100EF00008410940400000110000002000000000EF +:100F00000000000000000000200020000000200081 +:100F10000000080090000000000004050090050497 +:100F200000840010001000100000000000002000ED +:100F3000200000000000000004000800000008007D +:100F40000000000008000000000000000000000099 +:100F5000000000000000000000004000200200909F +:100F60000300002004400882114000000800000037 +:100F7000080000000200030008200800000008002C +:100F80000000000000000000000000080000000059 +:100F90000000000000000000080000000000410404 +:100FA000200000030000000000000000000000001E +:100FB000000000000000050000000000000000002C :100FC0000000000000000000000000000000000021 -:100FD0000000000000000000000000000000000011 -:100FE0000000000000000000000000000000000001 -:100FF00000000000000000000000000000000000F1 +:100FD000000000000000000000000000408300212D +:100FE0000004049000000000C000000000010100A7 +:100FF00010010000000001000800000000000000D7 :1010000000000000000000000000000000000000E0 -:1010100000000000000000000000000000000000D0 -:1010200000000000000000000000000000000000C0 +:10101000000000000204A1880990A008000002401E +:10102000004005C0409000000000000000000000EB :1010300000000000000000000000000000000000B0 :1010400000000000000000000000000000000000A0 -:101050000000000000000000000000000000000090 -:101060000000000000000000000000000000000080 -:101070000000000000000000000000000000000070 +:1010500000000000000000000000000000008041CF +:10106000000311900009000005000000000000418D +:101070001020001000200000030004000000000009 :101080000000000000000000000000000000000060 -:101090000000000000000000000000000000000050 -:1010A0000000000000000000000000000000000040 +:101090000000000000008080200040000080000070 +:1010A00080004000820000000000000000000000FE :1010B0000000000000000000000000000000000030 :1010C0000000000000000000000000000000000020 :1010D0000000000000000000000000000000000010 -:1010E0000000000000000000000000000000000000 -:1010F00000000000000000000000000000000000F0 -:1011000000000000000000000000000000000000DF -:1011100000000000000000000000000000000000CF -:1011200000000000000000000000000000000000BF +:1010E00088000500024040000000000000000000F1 +:1010F00000000000000000008020000000048000CC +:10110000000080008000800000000000000000005F +:1011100000000000000000000004008300898080BF +:101120000000030409838920C08000000000000043 :1011300000000000000000000000000000000000AF -:10114000000000000000000000000000000000009F +:10114000008000000000000000000000000000001F :10115000000000000000000000000000000000008F -:10116000000000000000000000000000000000007F -:10117000000000000000000000000000000000006F -:10118000000000000000000000000000000000005F -:10119000000000000000000000000000000000004F -:1011A000000000000000000000000000000000003F -:1011B000000000000000000000000000000000002F -:1011C000000000000000000000000000000000001F +:1011600000008900040089000482000000000000E3 +:101170000000000000000000000002010200200149 +:10118000C040A00004820400C084000000000000F1 +:1011900000000000000000000000100110C0A010BE +:1011A00082C00000020102C0100310C00000000055 +:1011B00000000000000000000000000000000084AB +:1011C000000000040000000000000000000000001B :1011D000000000000000000000000000000000000F -:1011E00000000000000000000000000000000000FF -:1011F00000000000000000000000000000000000EF -:1012000000000000000000000000000000000000DE -:1012100000000000000000000000000000000000CE -:1012200000000000000000000000000000000000BE -:1012300000000000000000000000000000000000AE -:10124000000000000000000000000000000000009E +:1011E0000000000010020040000210C000000000DB +:1011F0000000000100010001000000010000A0004B +:101200000000010101000000840000000000000057 +:101210000000000000000000000000009188840829 +:10122000C0108305000011888420C01111890000BE +:1012300000000000000000000000000000000100AD +:10124000000004000000000000000000000000009A :10125000000000000000000000000000000000008E -:10126000000000000000000000000000000000007E -:10127000000000000000000000000000000000006E -:10128000000000000000000000000000000000005E -:10129000000000000000000000000000000000004E -:1012A000000000000000000000000000000000003E +:1012600000000000000000800300098080000011E1 +:1012700000110003004100080808000200080020D7 +:10128000000500050441040000000000000000000B +:101290000000000000000000000000000000410904 +:1012A0000021801182830000C1200083802104116D :1012B000000000000000000000000000000000002E -:1012C000000000000000000000000000000000001E +:1012C000040000008000000000000000000000009A :1012D000000000000000000000000000000000000E -:1012E00000000000000000000000000000000000FE +:1012E000000000000000000000801080098005411F :1012F00000000000000000000000000000000000EE -:1013000000000000000000000000000000000000DD +:101300000000008000000000000500840080000054 :1013100000000000000000000000000000000000CD -:1013200000000000000000000000000000000000BD -:1013300000000000000000000000000000000000AD -:10134000000000000000000000000000000000009D +:10132000000500050080800000000009800080802A +:1013300000030000000000000000000000000000AA +:10134000000000000040000000000000000000005D :10135000000000000000000000000000000000008D -:10136000000000000000000000000000000000007D -:10137000000000000000000000000000000000006D -:10138000000000000000000000000000000000005D +:101360000000000000000000000000A001A001102B +:10137000000100000000000000000000000000006C +:101380000000000000080020000000000021000212 :10139000000000000000000000000000000000004D -:1013A000000000000000000000000000000000003D -:1013B000000000000000000000000000000000002D +:1013A0000000900020102010100000001082041097 +:1013B0000208900000000000000000000000000093 :1013C000000000000000000000000000000000001D :1013D000000000000000000000000000000000000D -:1013E00000000000000000000000000000000000FD -:1013F00000000000000000000000000000000000ED -:1014000000000000000000000000000000000000DC -:1014100000000000000000000000000000000000CC -:1014200000000000000000000000000000000000BC -:1014300000000000000000000000000000000000AC -:10144000000000000000000000000000000000009C +:1013E000000000000000000000000000000000E01D +:1013F0000000000A000000000000000000000000E3 +:1014000000000000000000E00000000000000000FC +:1014100007000000000000000000000000000000C5 +:1014200000000000000000E0000048420000000052 +:1014300000E0000048420000000000000000000042 +:101440000000000000000000000007000000000095 :10145000000000000000000000000000000000008C :10146000000000000000000000000000000000007C -:10147000000000000000000000000000000000006C +:101470000000AAAAF0F00000000000000000000038 :10148000000000000000000000000000000000005C :10149000000000000000000000000000000000004C -:1014A000000000000000000000000000000000003C -:1014B000000000000000000000000000000000002C +:1014A00000000000000040801020008100240000A7 +:1014B000000081240410082000000000000000004B :1014C000000000000000000000000000000000001C :1014D000000000000000000000000000000000000C :1014E00000000000000000000000000000000000FC -:1014F00000000000000000000000000000000000EC +:1014F0000000000000FF3C3C000000000000000075 :1015000000000000000000000000000000000000DB :1015100000000000000000000000000000000000CB -:1015200000000000000000000000000000000000BB -:1015300000000000000000000000000000000000AB +:101520000000000000000000010204088100240007 +:101530000000812400000140028000000000000043 :10154000000000000000000000000000000000009B :10155000000000000000000000000000000000008B :10156000000000000000000000000000000000007B -:10157000000000000000000000000000000000006B -:10158000000000000000000000000000000000005B -:10159000000000000000000000000000000000004B -:1015A000000000000000000000000000000000003B -:1015B000000000000000000000000000000000002B +:101570000000FC0CF5F500C2C2C200000000000033 +:1015800000000000000000000000000000007D419D +:10159000CFCF0000000055550F0F000000000000E5 +:1015A00000000000000000000000440000440408A7 +:1015B0001020000044008800060000060000000023 :1015C000000000000000000000000000000000001B :1015D000000000000000000000000000000000000B :1015E00000000000000000000000000000000000FB -:1015F00000000000000000000000000000000000EB +:1015F00000000000FC0C050500FAFAFA00000000EB :1016000000000000000000000000000000000000DA -:1016100000000000000000000000000000000000CA -:1016200000000000000000000000000000000000BA -:1016300000000000000000000000000000000000AA +:101610007D410C0C000000003C3CFF00000000007D +:1016200000000000000000000000000088000088AA +:1016300001024080000000440088900000900000FB :10164000000000000000000000000000000000009A :10165000000000000000000000000000000000008A :10166000000000000000000000000000000000007A -:10167000000000000000000000000000000000006A -:10168000000000000000000000000000000000005A -:10169000000000000000000000000000000000004A -:1016A000000000000000000000000000000000003A -:1016B000000000000000000000000000000000002A +:10167000000000000000006100070015000000618C +:101680000006000D000000610006000D0000006172 +:101690000007000D000505000A08050000A5000070 +:1016A0000000000000000000000000000000606179 +:1016B0000007000D1000000000610007000D080089 :1016C000000000000000000000000000000000001A -:1016D000000000000000000000000000000000000A +:1016D00005000A08050000A000000000000000004E :1016E00000000000000000000000000000000000FA -:1016F00000000000000000000000000000000000EA -:1017000000000000000000000000000000000000D9 -:1017100000000000000000000000000000000000C9 +:1016F0000000000000000000C0CFC0CF00000000CC +:1017000000000000FCFC82BE0000000000EB00EBCB +:1017100000000000F0FFACAC000000000000000082 :1017200000000000000000000000000000000000B9 :1017300000000000000000000000000000000000A9 :101740000000000000000000000000000000000099 :101750000000000000000000000000000000000089 :101760000000000000000000000000000000000079 -:101770000000000000000000000000000000000069 -:101780000000000000000000000000000000000059 -:101790000000000000000000000000000000000049 +:1017700000000000000000000000C0CFC0CF00004B +:10178000000000000000C0C082BE0000000082AB6C +:10179000C2EB00000000000FACAC00000000000035 :1017A0000000000000000000000000000000000039 -:1017B0000000000000000000000000000000000029 -:1017C0000000000000000000000000000000000019 +:1017B0000000000000000100000000000000000028 +:1017C00000400000000000000000000000000000D9 :1017D0000000000000000000000000000000000009 :1017E00000000000000000000000000000000000F9 -:1017F00000000000000000000000000000000000E9 -:1018000000000000000000000000000000000000D8 +:1017F000000000000000000000000000F0F080D0B9 +:101800000F0F0F0F0000000000000000553C55F0C6 :1018100000000000000000000000000000000000C8 :1018200000000000000000000000000000000000B8 :1018300000000000000000000000000000000000A8 @@ -86428,199 +86428,199 @@ :101850000000000000000000000000000000000088 :101860000000000000000000000000000000000078 :101870000000000000000000000000000000000068 -:101880000000000000000000000000000000000058 -:101890000000000000000000000000000000000048 +:1018800080D00E0E0C0F0000000000000000553C40 +:1018900055F0000000000000000000000000000003 :1018A0000000000000000000000000000000000038 :1018B0000000000000000000000000000000000028 -:1018C0000000000000000000000000000000000018 +:1018C0000000000001000000000000000000000017 :1018D0000000000000000000000000000000000008 :1018E00000000000000000000000000000000000F8 :1018F00000000000000000000000000000000000E8 -:1019000000000000000000000000000000000000D7 -:1019100000000000200000000000000000000000A7 -:1019200000000000000000000000000000000000B7 -:101930000000000020000000000000000000000087 -:101940000000000000000000000000000000000097 -:101950000000000000002000000000000000000067 -:101960000000000000000000000000000000000077 +:1019000000000202000001000800888000020000C0 +:10191000000020000080008004000000040000049B +:101920000000000000000020000000000000000097 +:10193000040004000002000221000000200000005A +:101940000003000000000080008000000000000094 +:10195000000020000080004000042000000000047F +:10196000000000000000000000000000040000086B :101970000000000000000000000000000000000067 -:101980000000000000000000000000000000000057 -:101990000000000000000000000000000000000047 -:1019A0000000000000000000000000000000000037 -:1019B0000000000000000000000000000000000027 -:1019C0000000000000000000000000000000000017 -:1019D0000000000000000000000000000000000007 +:1019800000080000000040020400808210040003F0 +:101990000002000004020004000400020000000035 +:1019A000000200000000000000010004000000022E +:1019B000000000000000009100010200000000048F +:1019C00040020000000000000040000200A00000F3 +:1019D00000000000000020400001000000000000A6 :1019E00000000000000000000000000000000000F7 -:1019F00000000000000000000000000000000000E7 -:101A000000000000004020400000004000000000F6 -:101A100000000000000000000000000000000000C6 -:101A200000000000000000000000000000000000B6 -:101A300000000000000000000000000000000000A6 -:101A40000000000000000000000000000000000096 -:101A50000000000000000000000000000000000086 -:101A60000000000000000000000000000000000076 -:101A70000000000000000000000020000000000046 -:101A80000000000000000000000000000000000056 -:101A900000000000008400000000000000000000C2 -:101AA0000000000000040000000000000000000032 -:101AB0000000000000100000000000000000000016 -:101AC0000000000000040000000000000000000012 -:101AD0000000000000000000000000000000000006 -:101AE00000000000000000000000000000000000F6 -:101AF00000000000000000000000000000000000E6 -:101B000000000000000000000000000004000000D1 -:101B100000000000000000000000000000000000C5 -:101B200000000000000000080000000000000000AD -:101B300000000000000000000000000000000000A5 -:101B40000000000000000000000000000000000095 -:101B50000000000000000000000000000000000085 -:101B60000000000000000000000000000000000075 +:1019F0000000009000000000000000000000000057 +:101A00000002000200000400000000000300840245 +:101A100001410100204005400004030002000000D5 +:101A2000020001000400044000040320020084407E +:101A300000000000010000000200020000000000A1 +:101A40000000000000000000000000000000820014 +:101A5000000000000800200020000000000002003C +:101A60000200000000000000000000000000020072 +:101A70000000000004000000000000000000000062 +:101A800002000000020000000000008400001008B6 +:101A900011032008200080082000020920100408FB +:101AA00000840504400880828004000104010008CD +:101AB00002000008000440020090008200000008BC +:101AC0000000040800040000000400000000000200 +:101AD00000080000000800000000000000000000F6 +:101AE00000080000000800000000000000000000E6 +:101AF00000040000000202000000000000000000DE +:101B000000040000020400008400400800050020DA +:101B10004110840900210000400000034010000033 +:101B20000409000890080402000800210000850054 +:101B300000000440C00000004000900401000100CB +:101B4000C08000000200000000008280008002804F +:101B50000200008402210005020002400140020050 +:101B60000200008000400040000000000000000073 :101B70000000000000000000000000000000000065 -:101B80000000000000000000000000000000000055 -:101B90000000000000000000000000000000000045 -:101BA0000000000000000000000000000000000035 -:101BB0000000000000000000000000000000000025 -:101BC0000000000000000000000000000000000015 -:101BD0000000000000000000000000000000000005 -:101BE00000000000000000000000000000000000F5 +:101B80000000000000000000000000200000000035 +:101B9000000120A109A00000090841000000210067 +:101BA00021000000004100000000000200000000D1 +:101BB000040800000000000000000000008802008F +:101BC0000200114000C0800000840000004000407E +:101BD00080408000004180A000A0808280830201BC +:101BE00080008000004000010001000000000000B3 :101BF00000000000000000000000000000000000E5 :101C000000000000000000000000000000000000D4 -:101C100000000000000000000000000000000009BB -:101C200000000000000000000000000000000000B4 -:101C300000000000000000000000000000000000A4 -:101C40000000000000000000000000000000000094 -:101C50000000000000000000000000000000000084 +:101C10000000210001000004000008000000000492 +:101C2000000000410009000000000000000000006A +:101C30000100000000000000001000000200000091 +:101C4000000000000100020510000000000002007A +:101C500000000000000000000000820000001000F2 :101C60000000000000000000000000000000000074 -:101C70000000000000000000000000000000000064 -:101C80000000000000000000000000000000000054 -:101C9000000000000000000000000000000800003C -:101CA0000000000000000000000000000000000034 -:101CB0000000000000000000000000000000000024 -:101CC0000000000000000000000000000000000014 -:101CD0000000000000000000000000000000000004 -:101CE00000000000000000000000000000000000F4 +:101C7000000000000000000000000000000008005C +:101C80000000000000000800000000000000030049 +:101C900000100000048820021101024000A0210071 +:101CA00020010084000000001100118808000000DD +:101CB0000000200241000800000000000000800039 +:101CC00008000000000010008000800000000000FC +:101CD0008000000000000000000000000000000084 +:101CE0009000000000000000000000000000000064 :101CF00000000000000000000000000000000000E4 :101D000000000000000000000000000000000000D3 -:101D100000000000000000000000000000000000C3 -:101D200000000000000000000000000000000000B3 -:101D300000000000000000000000000000000000A3 -:101D40000000000000000000000000000000000093 -:101D50000000000000000000000000000000000083 -:101D60000000000000000000000000000000000073 -:101D70000000000000000000000000000000000063 +:101D10008208C04140000800820008000000000066 +:101D200000A10000000400000802104000000800AC +:101D3000000900000004050400000000000000008D +:101D40000000020000000000000000800080018010 +:101D50000000010003000200000000000000020873 +:101D600001000002100000402100004000000000BF +:101D70000040000000000000000000000000000023 :101D80000000000000000000000000000000000053 -:101D90000000000000000000000000000000000043 -:101DA000000000000000080000000000000000002B -:101DB0000000000000000000000000000000000023 -:101DC000000000000000080000000000000000000B -:101DD0000000000000000000000000000000000003 -:101DE00000000000000000000800000000000000EB -:101DF00000000000000000000000000000000000E3 -:101E000000000000000000000800000000000000CA -:101E100000000000000000000000000000000000C2 -:101E200000000000000000000000000000000000B2 -:101E300000000000000000000000000000000000A2 -:101E40000000000000000000000000000000000092 -:101E50000000000000000000000000000000000082 -:101E60000000000000000000000000000000000072 -:101E70000000000000000000000000000000000062 +:101D9000000000000500110200000000000000002B +:101DA0000000110420080002000000009000000460 +:101DB00000000000000000012001000040000000C1 +:101DC0004000000080000000004021002140004051 +:101DD0000240000002A082A0A1000000000000005C +:101DE000800102000000C10000018200000100002B +:101DF00000000001000000000000000000000000E2 +:101E000000000000000000000000000000000000D2 +:101E1000000000000800080000008804080000001E +:101E20002004830000000000000000100000008378 +:101E3000902082000000000002800080000000006E +:101E40000000000002000200020002004004000442 +:101E50009004000800000000004100000240020061 +:101E60000204000400080004000200040000000056 +:101E70000000004000000000000000000000000022 :101E80000000000000000000000000000000000052 -:101E90000000000000000000000000000000000042 -:101EA0000000000000000000000000000000000032 -:101EB0000000000000000000000000000000000022 -:101EC0000000000000000000000000000000000012 -:101ED0000000000000000000000000000000000002 -:101EE00000000000000000000000000000000000F2 -:101EF00000000000000000000000000000000000E2 +:101E9000000000000000110041C0000004408088E4 +:101EA00000048005200411000000008803010800E0 +:101EB00008081188038200000800000411041000C3 +:101EC000080021000500800080008000A0000001C3 +:101ED000000100010001000000000000000080017E +:101EE000000080010001000100010000000000006E +:101EF00000000000080100000000000000000000D9 :101F000000000000000000000000000000000000D1 -:101F100000000000000000000000000000000000C1 -:101F200000000000000000000000000000000000B1 -:101F300000000000000000000000000000000000A1 -:101F40000000000000000000000000000000000091 -:101F50000000000000000000000000000000000081 -:101F60000000000000000000000000000000000071 -:101F70000000000000000000000000000000000061 +:101F10000000000000000000C0000000000082007F +:101F200001000101410000000000000182010000E9 +:101F30000000010084000000201020200188029091 +:101F4000000000000000000000C0A108900008018F +:101F500001C1880000008200000000C0000882006B +:101F6000080001C188000000820000C100000101DA +:101F7000880002C000000002000000000000000015 :101F80000000000000000000000000000000000051 -:101F90000000000000000000000000000000000041 -:101FA0000000000000000000000000000000000031 -:101FB0000000000000000000000000000000000021 -:101FC0000000000000000000000000000000000011 -:101FD0000000000000000000000000000000000001 -:101FE00000000000000000000000000000000000F1 -:101FF00000000000000000000000000000000000E1 +:101F900000000000000000000000800000000000C1 +:101FA000000011032008A008000800000902110524 +:101FB0000003000008008000000000800000050011 +:101FC00080000000000000000000009083880008EE +:101FD000800309C1A110020580000000008000807C +:101FE0000000800009C1A1030911800005C1111082 +:101FF00004098000808000000080000000000000D4 :1020000000000000000000000000000000000000D0 :1020100000000000000000000000000000000000C0 -:1020200000000000000000000000000000000000B0 -:1020300000000000000000000000000000000000A0 -:102040000000000000000000000000000000000090 -:102050000000000000000000000000000000000080 -:102060000000000000000000000000000000000070 -:102070000000000000000000000000000000000060 +:102020008000000008040308110441A020000900FA +:1020300004000303000000000000000080000020F6 +:10204000808300000000000000000000000010007D +:10205000080083A0030010000900C105000005006E +:1020600020000500C000830041001109C105008067 +:1020700010008900C1000000000000008000000086 :102080000000000000000000000000000000000050 :102090000000000000000000000000000000000040 -:1020A0000000000000000000000000000000000030 -:1020B0000000000000000000000000000000000020 -:1020C0000000000000000000000000000000000010 -:1020D0000000000000000000000000000000000000 -:1020E00000000000000000000000000000000000F0 -:1020F00000000000000000000000000000000000E0 +:1020A0004000A000C00000910101002001A010C06C +:1020B000200002001040000000000000004002006C +:1020C0008800A00508200000000000000000008833 +:1020D00000000100C188000002000100C1000000F2 +:1020E000000001000000C100080000000001C10064 +:1020F000008800009000C100000000000000C00047 :1021000000000000000000000000000000000000CF :1021100000000000000000000000000000000000BF -:1021200000000000000000000000000000000000AF -:10213000000000000000000000000000000000009F -:10214000000000000000000000000000000000008F -:10215000000000000000000000000000000000007F -:10216000000000000000000000000000000000006F -:10217000000000000000000000000000000000005F -:10218000000000000000000000000000000000004F +:1021200000900082004000A000008200A00100009A +:10213000000100000100000000000000000100019B +:1021400040900002042000A00000000000000000F9 +:1021500000010001010101C000000000000191C167 +:10216000000000010000000100C0000000000001AC +:1021700091C100000000000082C1000000000000CA +:1021800000C000000000000000000000000000008F :10219000000000000000000000000000000000003F -:1021A000000000000000000000000000000000002F -:1021B000000000000000000000000000000000001F -:1021C000000000000000000000000000000000000F -:1021D00000000000000000000000000000000000FF -:1021E00000000000000000000000000000000000EF -:1021F00000000000000000000000000000000000DF -:1022000000000000000000000000000000000000CE +:1021A000000000000000000000000003410583085B +:1021B0000511002009100503100000110021002066 +:1021C0000041800000808000050000000000000049 +:1021D00000000008104008051090001002000005E3 +:1021E00089C100000020002100210084000040116E +:1021F000000589C100100511000080C10000000029 +:10220000000000800000000000000000000000004E :1022100000000000000000000000000000000000BE -:1022200000000000000000000000000000000000AE -:10223000000000000000000000000000000000009E -:10224000000000000000000000000000000000008E -:10225000000000000000000000000000000000007E -:10226000000000000000000000000000000000006E -:10227000000000000000000000000000000000005E +:10222000000000000000000200800000C021032127 +:1022300002000309000020901080031000400000FD +:10224000000000000010002100000000000000005D +:1022500000000000C108211010800003C1102100FF +:102260000000400000008002000000808002C109E0 +:10227000910000004000C110211180000920800061 :10228000000000000000000000000000000000004E :10229000000000000000000000000000000000003E -:1022A000000000000000000000000000000000002E -:1022B000000000000000000000000000000000001E -:1022C000000000000000000000000000000000000E -:1022D00000000000000000000000000000000000FE -:1022E00000000000000000000000000000000000EE -:1022F00000000000000000000000000000000000DE -:1023000000000000000000000000000000000000CD +:1022A000000000000000000000A00002000005097E +:1022B000C000C10083000000019001100100000176 +:1022C000000000000000A000009088829000000044 +:1022D0000000000000000988000100080001C100A2 +:1022E0000000000088000000C0C1000000081001CC +:1022F000C101200000000000C100000188000101B0 +:10230000C00000400000400000000000000000008D :1023100000000000000000000000000000000000BD -:1023200000000000000000000000000000000000AD -:10233000000000000000000000000000000000009D -:10234000000000000000000000000000000000008D +:102320000000000000000000000000000700500056 +:10233000000000E000000000000000E000000000DD +:102340000000000000000000000000E007000000A6 :10235000000000000000000000000000000000007D -:10236000000000000000000000000000000000006D -:10237000000000000000000000000000000000005D +:10236000480000E000000000000000000000000045 +:102370000000480000E000000000880000E00000CD :10238000000000000000000000000000000000004D :10239000000000000000000000000000000000003D -:1023A000000000000000000000000000000000002D -:1023B000000000000000000000000000000000001D -:1023C000000000000000000000000000000000000D -:1023D00000000000000000000000000000000000FD -:1023E00000000000000000000000000000000000ED -:1023F00000000000000000000000000000000000DD -:1024000000000000000000000000000000000000CC +:1023A000000000000000000000000000000087871F +:1023B00000993C3E00020000000000000000000008 +:1023C00000000000000000000000FEFE8080F3F02E +:1023D00003000000000000000000FFFF0000FFFFFE +:1023E00000003C3C0000FFFF000000003C3C0000FF +:1023F000FFFF0000FF000000FFFF0000F0F0000002 +:10240000FFFF00003C3C000066660000000000008A :1024100000000000000000000000000000000000BC :1024200000000000000000000000000000000000AC -:10243000000000000000000000000000000000009C -:10244000000000000000000000000000000000008C -:10245000000000000000000000000000000000007C -:10246000000000000000000000000000000000006C -:10247000000000000000000000000000000000005C -:10248000000000000000000000000000000000004C +:10243000878766FF3CFF00C300000000000000002B +:10244000000000000000000000000000F8F8E0E0DC +:10245000636363630000000000000000FFFF0000F2 +:10246000000000003C3C00000000000000003C3C7C +:10247000000000000000FF00000000000000F0F07D +:102480000000000000003C3C000066660000000008 :10249000000000000000000000000000000000003C :1024A000000000000000000000000000000000002C :1024B000000000000000000000000000000000001C @@ -86631,468 +86631,468 @@ :1025000000000000000000000000000000000000CB :1025100000000000000000000000000000000000BB :1025200000000000000000000000000000000000AB -:10253000000000000000000000000000000000009B -:10254000000000000000000000000000000000008B -:10255000000000000000000000000000000000007B -:10256000000000000000000000000000000000006B -:10257000000000000000000000000000000000005B -:10258000000000000000000000000000000000004B -:10259000000000000000000000000000000000003B +:10253000000000006F6F09090000000000000000AB +:102540000000000003C303C30000000000000000FF +:102550000F3C0F3C00F00EFE0000000000000000E9 +:10256000000000FF0000FFFF0000666600000F0F84 +:102570000000000000FF0000FFFF00006666000092 +:102580003C3C00006666000000FF00000F0FFFFFEC +:102590009999000000000000000000000000000009 :1025A000000000000000000000000000000000002B -:1025B000000000000000000000000000000000001B -:1025C000000000000000000000000000000000000B -:1025D00000000000000000000000000000000000FB -:1025E00000000000000000000000000000000000EB -:1025F00000000000000000000000000000000000DB -:1026000000000000000000000000000000000000CA -:1026100000000000000000000000000000000000BA +:1025B000000000000000FF00FF000000000000001D +:1025C000000000000000C3FF93FF000000000000B7 +:1025D00000000F0F3C3C00F002F200000000000081 +:1025E0000000000000FF0000000000006666000020 +:1025F0000F0F0000000000FF0000000000006666F2 +:1026000000003C3C00006666000000FF00000F0F69 +:10261000FFFF99990000000000000000000000008A :1026200000000000000000000000000000000000AA -:10263000000000000000000000000000000000009A -:10264000000000000000000000000000000000008A -:10265000000000000000000000000000000000007A -:10266000000000000000000000000000000000006A -:10267000000000000000000000000000000000005A -:10268000000000000000000000000000000000004A -:10269000000000000000000000000000000000003A +:10263000000000000000000800000000006100072A +:10264000000D0000006100010001000000610006B3 +:10265000000D00000061000F000D000000000000F0 +:102660000000000040638006002D9202408280013D +:1026700080209202000040E38006002D92024082FA +:10268000800180209202408280018020920240825C +:102690008000002082020000000000000000000016 :1026A000000000000000000000000000000000002A -:1026B000000000000000000000000000000000001A -:1026C000000000000000000000000000000000000A -:1026D00000000000000000000000000000000000FA -:1026E00000000000000000000000000000000000EA -:1026F00000000000000000000000000000000000DA -:1027000000000000000000000000000000000000C9 +:1026B0000000000000000000000000000000FFEF2C +:1026C000F0E0CFCFC0CF14BE14BEF0F0F0F00000A9 +:1026D0000000F0FFC05500000000000000000000F6 +:1026E000000000000000000A0000A0A0A0A0FF0061 +:1026F0003C003C3C003C0000000000005557555594 +:10270000FF003C00F0F000F03C00550030303C3C55 :1027100000000000000000000000000000000000B9 :1027200000000000000000000000000000000000A9 :102730000000000000000000000000000000000099 -:102740000000000000000000000000000000000089 -:102750000000000000000000000000000000000079 -:102760000000000000000000000000000000000069 -:102770000000000000000000000000000000000059 -:102780000000000000000000000000000000000049 +:10274000EFEFE0E05F5F505FB4B4B4B4AA3CAA3CE2 +:1027500000000000F000C0000000000000000000C9 +:102760000000000000000000000A00AAF1F1E1F5FD +:1027700000003C000000003C000000000000555735 +:10278000555500003C00000000F03C005500303082 :102790000000000000000000000000000000000039 :1027A0000000000000000000000000000000000029 :1027B0000000000000000000000000000000000019 -:1027C0000000000000000000000000000000000009 -:1027D00000000000000000000000000000000000F9 -:1027E00000000000000000000000000000000000E9 -:1027F00000000000000000000000000000000000D9 -:1028000000000000000000000000000000000000C8 -:1028100000000000000000000000000000000000B8 +:1027C0000000023E82BE033FC3FFFFFFFFFFAAAF30 +:1027D000ABAB0000000000000000000000000000A3 +:1027E000000000000000000000000043C3C35F0AB7 +:1027F0005F5F0F00550000F0303000000000000067 +:102800000100000005050F0000F0003C55000F001E +:1028100000F0A0A000000000000000000000000088 :1028200000000000000000000000000000000000A8 :102830000000000000000000000000000000000098 -:102840000000000000000000000000000000000088 -:102850000000000000000000000000000000000078 -:102860000000000000000000000000000000000068 -:102870000000000000000000000000000000000058 -:102880000000000000000000000000000000000048 -:102890000000000000000000000000000000000038 +:10284000000000003F3FFFFF033F417DA220A22088 +:10285000AAAFABAB000000000000000000000000C9 +:102860000000000000000000000000000043C0C3A2 +:102870000A0A5F5F0F00550000F0303000000000D2 +:1028800000000000000005050F0000F0003C5500AE +:102890000F0000F0A0A000000000000000000000F9 :1028A0000000000000000000000000000000000028 -:1028B0000000000000000000000000000000000018 -:1028C0000000000000000000000000000000000008 -:1028D00000000000000000000000000000000000F8 -:1028E00000000000000000000000000000000000E8 -:1028F00000000000000000000000000400040000D0 -:1029000000000000000000000000000000000000C7 -:1029100000000000000000000000000000000000B7 -:1029200000000000000000000000000000000000A7 -:102930000000000000000000000000000000000097 -:1029400000000000000000000090000000000000F7 -:102950000002000000000000000000000000000075 -:102960000000000000000000000000000000000067 -:102970000000000000000000000000000000000057 +:1028B0000000000000000000000000000000008593 +:1028C000010388800304880388008800000000005A +:1028D0000400040000000420000000820220000028 +:1028E000400820002002208020002020002000003E +:1028F0000080000000040000000000000000000153 +:10290000000000002000000400000000000200049D +:102910000000000000000002000000800000000035 +:10292000000800000000000000000000000000009F +:102930000000000000000000000000000004000093 +:10294000002008080020820200900000000000081B +:102950000090800000A010028041009000040091CF +:10296000000000412140008200020000000100C17F +:1029700000020020000000400000000000000000F5 :102980000000000000000000000000000000000047 -:102990000000000000000000000000000000000037 -:1029A0000000000000000000000000000000000027 +:102990000000000000000000000400000002000031 +:1029A0000000000000000000000200000000000025 :1029B0000000000000000000000000000000000017 -:1029C0000000000000000000000000000000000007 -:1029D00000000000000082008200000000000000F3 -:1029E00000000000000000000000000000000000E7 -:1029F00000000000000000000000000000000000D7 -:102A000000000000000000000000000000000000C6 +:1029C00000000008010800000000820088000000EC +:1029D000400004008420040001208820842020205E +:1029E000218008000182852000800400010004008D +:1029F0000420050021400000040000000000080041 +:102A00000200000000000000002020002000020062 :102A100000000000000000000000000000000000B6 -:102A200002000000000000000000040000000000A0 -:102A30000000000082000000000000000000000014 -:102A400000000000000000000000008800000000FE -:102A50000000000000000000000000000000000076 -:102A60000000000000000000000000000000000066 -:102A70000000000000000000000000000000000056 -:102A80000000000000000000000000000000000046 -:102A90000000000000000000000000000400000032 -:102AA0000000000000000000000000000000000026 -:102AB0000000000000000000000000000000020014 -:102AC0000000000000009000000000000000000076 -:102AD0000000400040004000000000000000000036 -:102AE00000000000000000000000000000000000E6 -:102AF00000000000000000000000000000000000D6 -:102B000000000000000000000000000000000000C5 -:102B100000000000000000000000000000000000B5 -:102B200000000000000000000000000000000000A5 -:102B30000000000000000000000000000000000095 -:102B40000000000000000000000000000000000085 -:102B50000000000000000000000000000000000075 -:102B60000000000000000000000000000000000065 -:102B70000000000000000000000000000000000055 -:102B80000000000000000000000000000000000045 +:102A200000000000C00000000000020000000000E4 +:102A30000000400000001000400002020000000002 +:102A400000000000008208001108058400C0020890 +:102A50001184830480080201800804090201020134 +:102A6000899184048208042004830002808204087F +:102A70008000840584080400000800080002008427 +:102A80008000200800000004000004840000000012 +:102A9000000200000008008440000008090800004F +:102AA000000000000084008400000008000009000D +:102AB000000800008004000280008004000900007B +:102AC00000000000000000020410040000004000AC +:102AD0000000004000110820000020039040400842 +:102AE00000A1820502A10000000002000100000018 +:102AF00000200405020800000000000000000000A3 +:102B00000000A0800000000000100000000800008D +:102B10000000000800000000000800000040000065 +:102B20000000000000000000002000000000004045 +:102B3000000000000000000300080000000000008A +:102B40000000000000000000000002894100210890 +:102B500008002000008400000021000000000002A6 +:102B600021204102080241080084000000002040AA +:102B7000008200010000400000000000000000880A +:102B800000020082001000020000000800000000A7 :102B90000000000000000000000000000000000035 -:102BA0000000000000000000000000000000000025 +:102BA00000000084000000000000000000000000A1 :102BB0000000000000000000000000000000000015 -:102BC0000000000000000000000000000000000005 -:102BD00000000000000000000000000000000000F5 -:102BE00000000000000000000000000000000000E5 -:102BF00000000000000000000000000000000000D5 -:102C000000000000000000000000000000000000C4 -:102C100000000000000000000000000000000000B4 -:102C200000000000000000000000000000000000A4 -:102C30000000000000000000000000000000000094 -:102C40000000000000000000000000000000000084 -:102C50000000000000000040000000000000000034 -:102C60000000000000000000000000000000000064 -:102C70000000000000000000000000000000000054 -:102C80000000000000000000000000000000000044 +:102BC00000000000000000000000080004100809D8 +:102BD0000440A04001000400001004020804A08486 +:102BE0000840000001200040100482008204000020 +:102BF0000080000484000008000000800000000045 +:102C000000000000000000000000000000000800BC +:102C10000000080008000800080000000000000094 +:102C200000000000820000008200000000000000A0 +:102C30000800000000000000000000000008000084 +:102C4000004000000000000000000000110003012F +:102C50000000800100A01000000040010000000002 +:102C600000202100000004000000C1080000040052 +:102C700000000004100041000003000000200000DC +:102C8000000000000800000000000000000000003C :102C90000000000000000000000000000000000034 -:102CA0000000000000000000000000000000000024 -:102CB0000000000000000000000000000000000014 -:102CC0000000000000000000000000000000000004 -:102CD00000000000000000000000000000000000F4 -:102CE00000000000000000000000000000000000E4 -:102CF00000000000000000000000000000000000D4 -:102D000000000000000000000000000000000000C3 -:102D100000000000000000000000000000000000B3 -:102D200000000000000000000000000000000000A3 -:102D30000000000000000000000000000000000093 -:102D40000000000000000000000000000000000083 -:102D50000000000000000000000000000000000073 -:102D60000000000000000000000000000000000063 -:102D70000000000000000000000000000000000053 -:102D80000000000000000000000000000000000043 +:102CA00000000000000041000300030000000000DD +:102CB0000000000000000000000000000000000113 +:102CC0000000000000000000000000000000C00044 +:102CD00040000020004000080800002008210800F3 +:102CE0000800840000000000C0080800C000C00503 +:102CF000108020000882C003000000008200002134 +:102D000000000000002000000000000000000000A3 +:102D10000021000000000000000000000000000092 +:102D20000000820000000000000000000000000021 +:102D30000000000004000004000000008200000009 +:102D40000021000000200000000000000000000042 +:102D500000000000000408010302000404040390C2 +:102D6000000000000300000000000020000400003C +:102D70000000830803008311008800000000210088 +:102D80000010059008A000900084000000000000E2 :102D90000000000000000000000000000000000033 :102DA0000000000000000000000000000000000023 :102DB0000000000000000000000000000000000013 :102DC0000000000000000000000000000000000003 -:102DD00000000000000000400000000000000000B3 -:102DE00000000000000000000000000000000000E3 -:102DF00000000000000000000000000000000000D3 -:102E000000000000000000000000000000000000C2 -:102E100000000000000000000000000000000000B2 -:102E200000000000000000000000000000000000A2 -:102E30000000000000000000000000000000000092 +:102DD00000002000A0030004040008000000080018 +:102DE000020082008200C02090000111C003900008 +:102DF0000005C0000008400888100003000000091A +:102E00004000000000000209000000000002000075 +:102E100000000000000200000000000000000000B0 +:102E2000000000000000820000008200000000009E +:102E30000000000000210000000000000000000071 :102E40000000000000000000000000000000000082 -:102E50000000000000000000000000000000000072 -:102E60000000000000000000000000000000000062 -:102E70000000000000000000000000000000000052 -:102E80000000000000000000000000000000000042 +:102E50000000000000000000000002004000000030 +:102E600000000000000000004001000040000004DD +:102E70000000000000000001000000010000000050 +:102E8000200000000000000008000000000000001A :102E90000000000000000000000000000000000032 :102EA0000000000000000000000000000000000022 :102EB0000000000000000000000000000000000012 -:102EC0000000000000000000000000000000000002 -:102ED00000000000000000000000000000000000F2 -:102EE00000000000000000000000000000000000E2 -:102EF00000000000000000000000000000000000D2 -:102F000000000000000000000000000000000000C1 +:102EC00000000000000000000000030000000000FF +:102ED00000000000000010C0008200408482C00298 +:102EE0000140A040C0900008008200A0C008C0C0FF +:102EF00009028201C0090200018204A0C0A000A151 +:102F00000040000202030140004000A0000408004D :102F100000000000000000000000000000000000B1 :102F200000000000000000000000000000000000A1 -:102F30000000000000000000000000000000000091 -:102F40000000000000000000000000000000000081 -:102F50000000000000000000000000000000000071 -:102F60000000000000000000000000000000000061 -:102F70000000000000000000000000000000000051 -:102F80000000000000000000000000000000000041 +:102F30000000000108000001000000000000000087 +:102F40000000000020000000000000004000000021 +:102F50000000000000000000808000000000000071 +:102F6000008003000000000000800080000000805E +:102F700000008380910800C08000088083000080EA +:102F8000004100A0009180A002000000000000802D :102F90000000000000000000000000000000000031 :102FA0000000000000000000000000000000000021 -:102FB0000000000000000000000000000000000011 -:102FC0000000000000000000000000000000000001 -:102FD00000000000000000000000000000000000F1 -:102FE00000000000000000000000000000000000E1 -:102FF00000000000000000000000000000000000D1 -:1030000000000000000000000000000000000000C0 +:102FB000000000201110004000210000000000006F +:102FC00000000000030000000000000008000000F6 +:102FD00000000000000000000000000080408000B1 +:102FE00000008000000080000080800000000000E1 +:102FF00080000080A1030500A0C000000011800037 +:103000000000000000048005800000000021008016 :1030100000000000000000000000000000000000B0 :1030200000000000000000000000000000000000A0 -:103030000000000000000000000000000000000090 -:103040000000000000000000000000000000000080 -:103050000000000000000000000000000000000070 -:103060000000000000000000000000000000000060 -:103070000000000000000000000000000000000050 -:103080000000000000000000000000000000000040 -:103090000000000000000000000000000000000030 +:103030000000000002001000400000050000000039 +:10304000000000000000000000000000200003005D +:103050000800410000000000000000009000100186 +:103060000484020004008400A000040404000000A2 +:10307000888808049002110000000989C0004001FE +:1030800008008882C00000010282020000000000E7 +:1030900000020000200040000800080000000000BE :1030A0000000000000000000000000000000000020 -:1030B0000000000000000000000000000000000010 +:1030B000000000000000010200000000000000000D :1030C0000000000000000000000000000000000000 -:1030D00000000000000000000000000000000000F0 -:1030E00000000000000000000000000000000000E0 -:1030F00000000000000000000000000000000000D0 -:1031000000000000000000000000000000000000BF -:1031100000000000000000000000000000000000AF +:1030D00000000100010000000000000000000400EA +:1030E00000A00488A110902000C00003080340083D +:1030F000004020040008820300000002C00902A171 +:1031000000000083A1A140400102830401200000CF +:1031100000000000900000100088009000100000E7 :10312000000000000000000000000000000000009F -:10313000000000000000000000000000000000008F -:10314000000000000000000000000000000000007F -:10315000000000000000000000000000000000006F -:10316000000000000000000000000000000000005F -:10317000000000000000000000000000000000004F -:10318000000000000000000000000000000000003F -:10319000000000000000000000000000000000002F +:10313000000000000000000000010000A1000001EC +:10314000000000000000000000000000000100017D +:10315000000000010001000100000000000000006C +:1031600000000080000009800040000500C000C190 +:10317000808000800000008000A00005200005A0E5 +:1031800080400005000290C18080208005801000F2 +:1031900000000000000000000000008000000000AF :1031A000000000000000000000000000000000001F -:1031B000000000000000000000000000000000000F -:1031C00000000000000000000000000000000000FF -:1031D00000000000000000000000000000000000EF -:1031E00000000000000000000000000000000000DF -:1031F00000000000000000000000000000000000CF -:1032000000000000000000000000000000000000BE -:1032100000000000000000000000000000000000AE +:1031B0000000000000000000000000021040900825 +:1031C000000300000000000000000040001100109B +:1031D0000008002000100021004100000000000055 +:1031E00000008000004100800000000000210080FD +:1031F0000000000000090000800041C08911840027 +:1032000090200000001100000000801180218080CB +:103210000000000080088000800000000000000026 :10322000000000000000000000000000000000009E -:10323000000000000000000000000000000000008E -:10324000000000000000000000000000000000007E -:10325000000000000000000000000000000000006E -:10326000000000000000000000000000000000005E -:10327000000000000000000000000000000000004E -:10328000000000000000000000000000000000003E -:10329000000000000000000000000000000000002E -:1032A000000000000000000000000000000000001E -:1032B000000000000000000000000000000000000E -:1032C00000000000000000000000000000000000FE -:1032D00000000000000000000000000000000000EE -:1032E00000000000000000000000000000000000DE -:1032F00000000000000000000000000000000000CE -:1033000000000000000000000000000000000000BD -:1033100000000000000000000000000000000000AD +:103230000000000000000000000000002120054107 +:103240004100200800000000000000000000000015 +:103250000000000000000000000000080000000066 +:10326000000000000400A088C084040000000003E7 +:10327000008200004000202004040800A1C1820058 +:103280004000090188001082109000000400022014 +:1032900004040000000008000200040000000020F8 +:1032A000009000000000000000000000000000008E +:1032B0000000000000000000000000000000018984 +:1032C00000000000000100000000000000000000FD +:1032D00000000000000000200000000000010000CD +:1032E00000000000000000000000070000000000D7 +:1032F00000000000000000000000070000000000C7 +:1033000000E007008200000000E00700000000006D +:10331000000007000000000000000700000000009F :10332000000000000000000000000000000000009D :10333000000000000000000000000000000000008D :10334000000000000000000000000000000000007D :10335000000000000000000000000000000000006D -:10336000000000000000000000000000000000005D -:10337000000000000000000000000000000000004D -:10338000000000000000000000000000000000003D -:10339000000000000000000000000000000000002D -:1033A000000000000000000000000000000000001D +:103360000000000000000000F3FBC3EBFFFFA0FF24 +:103370000000000014BE14BE34043EFE0000C30F63 +:103380000CFC00FF003CC3FF0F000000C382C3D74A +:103390000AFFFAFFFCFFC000AEAFAEAF00000000B6 +:1033A00000000000E343FF000000000000000000F8 :1033B000000000000000000000000000000000000D :1033C00000000000000000000000000000000000FD :1033D00000000000000000000000000000000000ED -:1033E00000000000000000000000000000000000DD -:1033F00000000000000000000000000000000000CD -:1034000000000000000000000000000000000000BC -:1034100000000000000000000000000000000000AC -:10342000000000000000000000000000000000009C +:1033E00000000000000000000000C3EBC3EBFFFF83 +:1033F000FFFF00000000A0A0F5F534043EFE3CF005 +:10340000FFFF0CFC3C3C00AA55FFFFFFF0FF0082D1 +:10341000FFD700F50005FCF0C0F0AAABAAAB000096 +:10342000000000000000E343FF0000000000000077 :10343000000000000000000000000000000000008C :10344000000000000000000000000000000000007C :10345000000000000000000000000000000000006C -:10346000000000000000000000000000000000005C -:10347000000000000000000000000000000000004C -:10348000000000000000000000000000000000003C -:10349000000000000000000000000000000000002C -:1034A000000000000000000000000000000000001C +:103460000000000000000000000000000028000034 +:10347000C7C7C7FFFF350F358082C0C3F0F0F03CEF +:10348000EBEB4141FFBE7D3CCFCFC0C017D717D774 +:1034900055140F0C3FFF03005555FF00FF004D4D25 +:1034A00000000000000000002400000000000000F8 :1034B000000000000000000000000000000000000C :1034C00000000000000000000000000000000000FC :1034D00000000000000000000000000000000000EC :1034E00000000000000000000000000000000000DC -:1034F00000000000000000000000000000000000CC -:1035000000000000000000000000000000000000BB -:1035100000000000000000000000000000000000AB -:10352000000000000000000000000000000000009B +:1034F000C000C3C3C3C3F0350035A0AAF0FF3CF041 +:103500003C3CC3FFC3000014283CCFCFC0C01714FD +:103510001714410003003F0F030FD714D714FF0007 +:103520004D4D000000000000000000000000000001 :10353000000000000000000000000000000000008B :10354000000000000000000000000000000000007B :10355000000000000000000000000000000000006B :10356000000000000000000000000000000000005B -:10357000000000000000000000000000000000004B -:10358000000000000000000000000000000000003B -:10359000000000000000000000000000000000002B -:1035A000000000000000000000000000000000001B +:10357000000050080000000000610006000D00007F +:1035800000000008000000000061000F00010000C2 +:103590000061000F000D00000061000E000D000032 +:1035A0000000000800000000000000000000000112 :1035B000000000000000000000000000000000000B -:1035C00000000000000000000000000000000000FB -:1035D00000000000000000000000000000000000EB -:1035E00000000000000000000000000000000000DB -:1035F00000000000000000000000000000000000CB -:1036000000000000000000000000000000000000BA -:1036100000000000000000000000000000000000AA +:1035C0000000000000000000000000610006000D87 +:1035D0000000000000000000000000610006000D77 +:1035E000000000610006000D000000000000000067 +:1035F0000000000000000000000000000000C3FF09 +:10360000E8E800000000000000000C0C0C00FFFFC8 +:10361000FFFF000000000005000F00000000000098 :10362000000000000000000000000000000000009A :10363000000000000000000000000000000000008A -:10364000000000000000000000000000000000007A -:10365000000000000000000000000000000000006A -:10366000000000000000000000000000000000005A +:10364000000000000000000000000000D0D70000D3 +:10365000ACED0C4D00000000000000000000000078 +:10366000E8E8AAAA0000000005050000000000002C :10367000000000000000000000000000000000004A -:10368000000000000000000000000000000000003A -:10369000000000000000000000000000000000002A +:10368000003CE8E8000000000000000014141400F2 +:103690001414505000000000C305FF0F000000008C :1036A000000000000000000000000000000000001A :1036B000000000000000000000000000000000000A -:1036C00000000000000000000000000000000000FA -:1036D00000000000000000000000000000000000EA -:1036E00000000000000000000000000000000000DA +:1036C0000000000000000000000000000000D0D753 +:1036D000D0D7A0E100410000000000000000000081 +:1036E0000000E82828280000000000000003000077 :1036F00000000000000000000000000000000000CA -:1037000000000000000000000000000000000000B9 -:1037100000000000000000000000000000000000A9 -:103720000000000000000000000000000000000099 +:1037000000000000000000000000000000003F3F3B +:103710003F3FF0F0F0F000000000000000005C5CB3 +:1037200000FF00000000000000000000000000009A :103730000000000000000000000000000000000089 :103740000000000000000000000000000000000079 -:103750000000000000000000000000000000000069 -:103760000000000000000000000000000000000059 +:103750000AFA02C20CD70CD70000000000000000DB +:103760000000000000000000000000002023000016 :103770000000000000000000000000000000000049 :103780000000000000000000000000000000000039 -:103790000000000000000000000000000000000029 -:1037A0000000000000000000000000000000000019 +:1037900003030303FF005555000000000000000074 +:1037A0005C5CFF0000000000000000000000000062 :1037B0000000000000000000000000000000000009 :1037C00000000000000000000000000000000000F9 -:1037D00000000000000000000000000000000000E9 +:1037D0000000FFFFC3C3CFD7CFD700000000000019 :1037E00000000000000000000000000000000000D9 -:1037F00000000000000000000000000000000000C9 -:1038000000000000000000000000000000000000B8 -:1038100000000000000000000000000000000000A8 -:103820000000000000000000000400000000000094 -:103830000000000000000000000000000000000088 -:103840000000000000000000000000040000000074 -:103850000000000000000000000000000000000068 -:103860000000000000000000000000000000000058 -:1038700000000000000000000000000000820000C6 -:1038800000000000000000000000000000C0000078 -:1038900000C0000000000000000000000000000068 -:1038A0000000000000000000000000000000000018 -:1038B0000000000000000000000000000000000008 -:1038C00000000000000000000000000000000000F8 -:1038D00000000000000000000000000000000000E8 -:1038E00000000000000000000000000000000000D8 -:1038F00000000000000000000000000000000400C4 -:1039000000000000000000000000000000000000B7 -:103910008200000000000000000000000000000025 -:103920000200000000000000000000000000000095 -:103930000000000000000000000000000000000087 -:103940000000000000000000000000000000000077 -:103950000000000000000000000000000000000067 -:103960000000000000000000000000000000000057 -:10397000000000000000000000000000000008003F -:10398000000000000000000000000000000000082F -:103990000000000000000000000000000000000027 -:1039A000000000000000000000000000000000080F -:1039B0000000000000000000000000000000000007 -:1039C00000000000000000000000000000000000F7 -:1039D00000080000000000000000000000000000DF -:1039E00000000000000000000000000000000000D7 -:1039F00000040000000000000000000000000000C3 -:103A000000000000000000000000000000000000B6 -:103A10000020000000000000000000000000000086 -:103A20000000000000000000000000000000000096 -:103A30000000000000000000000000000000000086 -:103A40000000000000000000000000000000000076 -:103A50000000000000000000000000000000000066 -:103A60000000000000000000000000000000000056 -:103A70000000000000000000000000000000000046 -:103A800000000000002000C0000000000000000056 -:103A90000000000000000000000000000000000026 -:103AA0000000000000000000000000000000000016 -:103AB0000000000000000000000000000000000006 -:103AC00000000000000000000000000000000000F6 -:103AD00000000000000000000000000000000000E6 -:103AE00000000000000000000000000000000000D6 -:103AF00000000000000000000000000000000000C6 -:103B000000000000000000000000000000000000B5 -:103B10000000000000000000004000000000000065 -:103B20000000000000000000000000000000000095 -:103B30000000000000000000000000000000000085 -:103B40000000000000000000000000000000000075 -:103B50000000000000000000000000000000000065 -:103B60000000000000000000000000000000000055 -:103B70000000000000000000000000000000000045 -:103B8000000000000000000000000000080000002D -:103B90000000000000000000000000000000000025 -:103BA0000000000000000000000000000000000015 -:103BB0000000000000000000000000000000000005 -:103BC00000000000000000000000000000000000F5 -:103BD00000000000000000000000000000000000E5 -:103BE00000000000000000000000000000000000D5 -:103BF00000000000000000000000000000000000C5 -:103C000000000000000000000000000000000000B4 -:103C100000000000000000000000000000000000A4 -:103C20000000000000000000000000000000000094 -:103C30000000000000000000000000000000000084 -:103C40000000000000000000000000000000000074 -:103C50000000000000000000000000000000000064 +:1037F0000F0F00000000000000008400400588005A +:10380000040500800400C00000100000000000005B +:103810000000000000008800000020000000000000 +:10382000900000008403C0820002840000080000B1 +:103830000000C0020404000000040000200000009A +:10384000400000040000A000400400052002020027 +:103850000000000000004000000000000000000028 +:103860002000000408000000200400000000020006 +:103870000000000000020000000040000002000202 +:103880000000008200101000000400010000004051 +:10389000004000822000000200020002000200003E +:1038A0000002000400C0000000034001009000037B +:1038B0000000000400A00000000000000000200044 +:1038C00000000000000000000082800000020000F4 +:1038D00000000000000400020000000000040000DE +:1038E0000000000000008000000000020040000016 +:1038F00000000000000000000000000200000800BE +:1039000008000410000000C0080000000280000051 +:103910000000000502100400040004000000000084 +:1039200004000200040040008400C1000080020086 +:103930004000400004820000884120000000000098 +:10394000040040000000000002024000028003006A +:10395000880000000000000002000040000200009B +:103960000000020000000000080008000000020043 +:1039700020002000000000000000020002000400FF +:10398000048800080000000800418300000882400D +:10399000000805840008050800000000000002007F +:1039A000000000900000058284880090100800024A +:1039B0000004800880080202008409020000000060 +:1039C00000000000800000000000000180000402F0 +:1039D0004004000000020004000000840000000415 +:1039E0000000050040000000000080008000000092 +:1039F00000080000000000000000000400000000BB +:103A00000008002140000800000590080808080090 +:103A10008200040500400400404100000005002130 +:103A20004000002100200002A01100000400000856 +:103A3000040804919000880090000000000000211C +:103A40000000000000000002001100000011000052 +:103A50000004000000000000000000000000000062 +:103A60000000000800000000000000000009000045 +:103A70000000000004000000000000000000000042 +:103A80000000000041000000000000200088808449 +:103A90008300000000A000000300000000000008F8 +:103AA000000000A0000008000302080004002088B5 +:103AB00000A10040050200002100000000000000FD +:103AC00000000000000000820001000000820000F1 +:103AD000000000000000080000000000000041009D +:103AE00000000000000000200090400000002100C5 +:103AF00021000000000000000000000000000000A5 +:103B000000000000000000000040820900400000AA +:103B1000000004400400000000000800000400044D +:103B20000000001182200000C040040000020000DC +:103B300008000004820000000040C00000000000F7 +:103B4000000008000000000040000000000000002D +:103B5000000000000802000000000000000000005B +:103B600000000000820000000000000000000000D3 +:103B7000000000000000000000000009000000003C +:103B800000000000000000004000000000000000F5 +:103B9000000000000000000000A011100200000062 +:103BA00000000000000000000000400000000000D5 +:103BB000000000000040000000001188000000002C +:103BC00000000000000000000000000000004100B4 +:103BD00000000000000000010000000000000000E4 +:103BE0000000000000000000000000004000400055 +:103BF0000000210000000000050008000000100087 +:103C00000000000000001000000000000000200084 +:103C10000000000000000020000000000000004044 +:103C200000210000000082000000000000000000F1 +:103C30000000000202008400A000000389080000C8 +:103C400010000000000000218203000000000000BE +:103C50008202000000000000000400080000A00034 :103C60000000000000000000000000000000000054 :103C70000000000000000000000000000000000044 :103C80000000000000000000000000000000000034 -:103C90000000000000000000000000000000000024 -:103CA0000000000000000000000000000000000014 -:103CB0000000000000000000000000000000000004 -:103CC00000000000000000000000000000000000F4 +:103C9000000203820000000010004000000000004D +:103CA0000010040400000000000008C00000000430 +:103CB00008C02184000100040800000000901001E9 +:103CC00003000000000003004100040000000000A9 :103CD00000000000000000000000000000000000E4 -:103CE00000000000000000000000000000000000D4 -:103CF00000000000000000000000000000000000C4 -:103D000000000000000000000000000000000000B3 -:103D100000000000000000000000000000000000A3 -:103D20000000000000000000000000000000000093 -:103D30000000000000000000000000000000000083 -:103D40000000000000000000000000000000000073 -:103D50000000000000000000000000000000000063 +:103CE0000000000000000808088800000000000034 +:103CF0000000000000000020080000000000089004 +:103D0000000000A000000000000000000000000013 +:103D1000000000000000000000000000000800217A +:103D200000080021001000080000000090210000A1 +:103D3000000300000400010000000800A0200005AE +:103D4000002100020003000800000008000000003D +:103D50004000000000000800000008000000000013 :103D60000000000000000000000000000000000053 -:103D70000000000000000000000000000000000043 +:103D700008004000000000000000000000000000FB :103D80000000000000000000000000000000000033 -:103D90000000000000000000000000000000000023 -:103DA0000000000000000000000000000000000013 -:103DB0000000000000000000000000000000000003 -:103DC00000000000000000000000000000000000F3 +:103D9000000000000000000000000000080000001B +:103DA00000000000000000010000081000004000BA +:103DB0000800000000004000400000000400000077 +:103DC00000000000000100000000000000000000F2 :103DD00000000000000000000000000000000000E3 :103DE00000000000000000000000000000000000D3 -:103DF00000000000000000000000000000000000C3 -:103E000000000000000000000000000000000000B2 -:103E100000000000000000000000000000000000A2 -:103E20000000000000000000000000000000000092 -:103E30000000000000000000000000000000000082 -:103E40000000000000000000000000000000000072 +:103DF00000000000000000000000210000000000A2 +:103E00000000080000000000000010000800000092 +:103E10000000000000000000000090C00002080246 +:103E2000A0080000000000000000000000000000EA +:103E3000000000000000000000000001A1000201DD +:103E400000000001410182000000000000000000AD :103E50000000000000000000000000000000000062 :103E60000000000000000000000000000000000052 -:103E70000000000000000000000000000000000042 -:103E80000000000000000000000000000000000032 -:103E90000000000000000000000000000000000022 -:103EA0000000000000000000000000000000000012 -:103EB0000000000000000000000000000000000002 -:103EC00000000000000000000000000000000000F2 -:103ED00000000000000000000000000000000000E2 -:103EE00000000000000000000000000000000000D2 -:103EF00000000000000000000000000000000000C2 -:103F000000000000000000000000000000000000B1 +:103E700000000000000000000000000000A0004062 +:103E80000010000000000000000000000000000022 +:103E9000000000000000000000000000008003009F +:103EA0008000808000000000000000000000000092 +:103EB00000000000000000000000000000410309B5 +:103EC00000030040000810108009000000000000FE +:103ED00000000000000000000000000000000005DD +:103EE000030000400005000000000000000000008A +:103EF0000000000000000000000000000000008042 +:103F00000080000000000000000000000000000031 :103F100000000000000000000000000000000000A1 -:103F20000000000000000000000000000000000091 -:103F30000000000000000000000000000000000081 -:103F40000000000000000000000000000000000071 +:103F2000800200800000000000008000800000008F +:103F300000000000000000000000000000000980F8 +:103F400021002008118003800200091041100000A8 :103F50000000000000000000000000000000000061 -:103F60000000000000000000000000000000000051 +:103F60000000100000000810000000000000000029 :103F70000000000000000000000000000000000041 -:103F80000000000000000000000000000000000031 +:103F80000000000000080000000000000000000029 :103F90000000000000000000000000000000000021 -:103FA0000000000000000000000000000000000011 +:103FA000880010010084004088001000840008820E :103FB0000000000000000000000000000000000001 -:103FC00000000000000000000000000000000000F1 +:103FC00000400100000000880040010000010100E5 :103FD00000000000000000000000000000000000E1 -:103FE00000000000000000000000000000000000D1 +:103FE000000000900100000000010000000000003F :103FF00000000000000000000000000000000000C1 -:1040000000000000000000000000000000000000B0 +:104000000000000000000090000000000000000020 :1040100000000000000000000000000000000000A0 -:104020000000000000000000000000000000000090 +:104020000000881000A000008900000000000000CF :104030000000000000000000000000000000000080 -:104040000000000000000000000000000000000070 -:104050000000000000000000000000000000000060 -:104060000000000000000000000000000000000050 +:104040000000000001008800000000000000A10046 +:10405000000100000000000000000000000000005F +:104060000000000000000000A000000000000000B0 :104070000000000000000000000000000000000040 -:104080000000000000000000000000000000000030 +:104080000000000088000000000082000000000026 :104090000000000000000000000000000000000020 -:1040A0000000000000000000000000000000000010 +:1040A0000000000000090090000409110000000059 :1040B0000000000000000000000000000000000000 -:1040C00000000000000000000000000000000000F0 -:1040D00000000000000000000000000000000000E0 -:1040E00000000000000000000000000000000000D0 +:1040C0000000000000100811C11100400041212132 +:1040D00090200041000000000000000000000000EF +:1040E00000000000000000414110A0080002000094 :1040F00000000000000000000000000000000000C0 -:1041000000000000000000000000000000000000AF +:10410000000000000000000000000000800000002F :10411000000000000000000000000000000000009F -:10412000000000000000000000000000000000008F +:10412000000000000000000080000080800000000F :10413000000000000000000000000000000000007F -:10414000000000000000000000000000000000006F -:10415000000000000000000000000000000000005F -:10416000000000000000000000000000000000004F +:104140000000000000004104104109000309098932 +:104150004100020003050000000000000000000014 +:10416000000003001000110041000800000008409A :10417000000000000000000000000000000000003F -:10418000000000000000000000000000000000002F +:1041800000000000000000000000004000000000EF :10419000000000000000000000000000000000001F -:1041A000000000000000000000000000000000000F -:1041B00000000000000000000000000000000000FF -:1041C00000000000000000000000000000000000EF -:1041D00000000000000000000000000000000000DF -:1041E00000000000000000000000000000000000CF -:1041F00000000000000000000000000000000000BF -:1042000000000000000000000000000000000000AE +:1041A000000000000000000082000808A084A000B9 +:1041B0000000008400020000000000000000000079 +:1041C00000000000000000000110000000000100DD +:1041D00001030000000000000000000000000000DB +:1041E00000000000000000000000000001000000CE +:1041F00001000000000000000000000000000000BE +:104200000000000000000000000090000800000016 :10421000000000000000000000000000000000009E :10422000000000000000000000000000000000008E :10423000000000000000000000000000000000007E @@ -87102,22 +87102,22 @@ :10427000000000000000000000000000000000003E :10428000000000000000000000000000000000002E :10429000000000000000000000000000000000001E -:1042A000000000000000000000000000000000000E -:1042B00000000000000000000000000000000000FE +:1042A0000000000000000000000000001E7E9FFFD4 +:1042B000181818180000000000000000000000009E :1042C00000000000000000000000000000000000EE :1042D00000000000000000000000000000000000DE :1042E00000000000000000000000000000000000CE :1042F00000000000000000000000000000000000BE -:1043000000000000000000000000000000000000AD -:10431000000000000000000000000000000000009D -:10432000000000000000000000000000000000008D -:10433000000000000000000000000000000000007D +:104300000000000000000000000000000000FF6648 +:104310000066000000000000000000000000000037 +:1043200000000000000000000000000000000E6E11 +:104330000F6F1B1B1B1B0000000000000000000093 :10434000000000000000000000000000000000006D :10435000000000000000000000000000000000005D :10436000000000000000000000000000000000004D :10437000000000000000000000000000000000003D :10438000000000000000000000000000000000002D -:10439000000000000000000000000000000000001D +:10439000FF66006600000000000000000000000052 :1043A000000000000000000000000000000000000D :1043B00000000000000000000000000000000000FD :1043C00000000000000000000000000000000000ED @@ -87127,404 +87127,404 @@ :1044000000000000000000000000000000000000AC :10441000000000000000000000000000000000009C :10442000000000000000000000000000000000008C -:10443000000000000000000000000000000000007C -:10444000000000000000000000000000000000006C +:104430000000F690C3C3DBDBDBDB00000000DB1811 +:10444000DB18000000000000000000000000000079 :10445000000000000000000000000000000000005C :10446000000000000000000000000000000000004C :10447000000000000000000000000000000000003C :10448000000000000000000000000000000000002C -:10449000000000000000000000000000000000001C +:1044900000000000F060FF6F00000000000000005E :1044A000000000000000000000000000000000000C -:1044B00000000000000000000000000000000000FC -:1044C00000000000000000000000000000000000EC +:1044B00000000000000000001B1B1B1B0000000090 +:1044C000FCFCC0C000000000000000000000000074 :1044D00000000000000000000000000000000000DC :1044E00000000000000000000000000000000000CC :1044F00000000000000000000000000000000000BC :1045000000000000000000000000000000000000AB -:10451000000000000000000000000000000000009B +:1045100000000000000000600F6F000000000000BD :10452000000000000000000000000000000000008B -:10453000000000000000000000000000000000007B +:1045300000000000000000615006001D00000000A7 :10454000000000000000000000000000000000006B -:10455000000000000000000000000000000000005B -:10456000000000000000000000000000000000004B -:10457000000000000000000000000000000000003B +:1045500000000000000000610006000D0000006186 +:104560000006000D00000000000000000000000038 +:1045700000610006000D000000610006000D000053 :10458000000000000000000000000000000000002B :10459000000000000000000000000000000000001B :1045A000000000000000000000000000000000000B -:1045B00000000000000000000000000000000000FB +:1045B0000000000000000000000000000000F0F01B :1045C00000000000000000000000000000000000EB -:1045D00000000000000000000000000000000000DB -:1045E00000000000000000000000000000000000CB -:1045F00000000000000000000000000000000000BB -:1046000000000000000000000000000000000000AA +:1045D000000000000000000000A0008230303030F9 +:1045E0000D4D9DDD550000F00000000000000000B2 +:1045F00000003F033F030000000082BE82BE303F48 +:104600003F3F00000000000000000000000000002C :10461000000000000000000000000000000000009A :10462000000000000000000000000000000000008A -:10463000000000000000000000000000000000007A -:10464000000000000000000000000000000000006A -:10465000000000000000000000000000000000005A -:10466000000000000000000000000000000000004A -:10467000000000000000000000000000000000003A -:10468000000000000000000000000000000000002A +:104630000000000000000000000000000000C0C2F8 +:10464000FDFF00000000000000000000000000006E +:104650000000000000000000000000A00082F370D5 +:10466000F3F22D6DBDFD5500003C00000000000080 +:10467000000000003F033F03000000003C3CFFFF40 +:1046800030303F300000000000000000000000005B :10469000000000000000000000000000000000001A :1046A000000000000000000000000000000000000A :1046B00000000000000000000000000000000000FA :1046C00000000000000000000000000000000000EA -:1046D00000000000000000000000000000000000DA -:1046E00000000000000000000000000000000000CA -:1046F00000000000000000000000000000000000BA -:1047000000000000000000000000000000000000A9 +:1046D0000000000000000000000000005F5FBE144A +:1046E0003C3C3C3CF0F0FFFFA0AFFCFC00000000B5 +:1046F00000000000000000000000000000000F0F9C +:104700000F0FF0F0AAAA0000000000000000000057 :104710000000000000000000000000000000000099 :104720000000000000000000000000000000000089 :104730000000000000000000000000000000000079 :104740000000000000000000000000000000000069 -:104750000000000000000000000000000000000059 -:104760000000000000000000000000000000000049 +:1047500000000000000000000000000000000A0A45 +:10476000BE140F0F040EF000F0AAA0AF0C0C000056 :104770000000000000000000000000000000000039 -:104780000000000000000000000000000000000029 +:104780000D0D0101F0F0AAAA0000000000000000D9 :104790000000000000000000000000000000000019 :1047A0000000000000000000000000000000000009 -:1047B00000000000000000000000000000000000F9 -:1047C0000000000200800000000000000000000067 -:1047D00000000000000000000000000000000000D9 -:1047E00000000000000000000000000000000000C9 -:1047F00000000000000000000001000000000000B8 -:1048000000000000000000040004000000000000A0 -:104810000000000000000000000000000000000098 -:104820000400000000000000000000000000000084 -:104830000000000000000000000000000000000078 -:10484000000000A00000004000A0000000000000E8 -:104850000000000000020000000000000000000056 -:104860000000000000000000000000000000000048 -:104870000000000000000000000000000000000038 -:104880000000000000000000000000000000000028 -:104890000000000000020000000000000000000016 -:1048A0000000000000000000000000000000000008 -:1048B00000000000000000000000000000000000F8 -:1048C0000000000000000000088000000000000060 -:1048D00000000000000000000000000000000000D8 -:1048E00000000000000000000000000000000000C8 -:1048F00000000000000000000000000000000000B8 -:1049000000000000000000000000000000000000A7 +:1047B00000000000000000000000400482110040E2 +:1047C00000000102A0100085004000000000040469 +:1047D00020002080C0040202000040000000040409 +:1047E00000000000000204000400884000002008CF +:1047F000200084004004C004000304000400000002 +:1048000040040000880088002000880400000000A8 +:10481000C00200002000200000042000200000044E +:104820000004C00000800000200000000000000024 +:104830000004000020000400400400000002000802 +:104840000004000220C0004000040002200010C04C +:10485000100209000020009000C000C00002000209 +:104860000000400200000000000000000002000004 +:104870000000000000000000000000000000200018 +:104880000000000000000000000000000000000226 +:104890000000000000000000000000000000000018 +:1048A0000000000000000002000000000000000006 +:1048B00000000082000000008000000004000041B1 +:1048C000000000000800901000021000020002002A +:1048D00002008200020000400200004100000800C7 +:1048E00090000300040004020000048000000400A3 +:1048F00004000000000002000000040000000200AC +:1049000000040000200000000000840004000000FB :104910000000000000000000000000000000000097 -:104920000000000000000000000000000000000087 -:104930000000000000000000000000000000000077 -:1049400000000000050000000000801000000000D2 -:104950000000000000000000000000000000000057 -:104960000000000000000000000000000000000047 -:1049700000000082000000000000000000000000B5 -:104980000000000000000000000000000000000027 -:104990000000000000000000000000000000000017 -:1049A0000000000000000000000000000000000007 -:1049B00000000000000000000000000000000000F7 -:1049C00000000000000000000080C100040005009D -:1049D000880000000000000000000000000000004F -:1049E00000000000000000000000000000000000C7 -:1049F00000000000000000000000000000000000B7 -:104A000000000000000000000000000000000000A6 -:104A10000000000000000000000000000000000096 -:104A20000000000000000000000000000000000086 -:104A30000000000000000000000000000000000076 -:104A4000000000000040000000000020080080007E -:104A500088000000000000000000000000000000CE -:104A60000000000000000000000000000000000046 -:104A70000000000000000000000000000000000036 -:104A80000000000000000000000000000000000026 -:104A90000000000000000000000000000000000016 -:104AA0000000000000000000000000000000000006 -:104AB00000000000000000000000000000000000F6 -:104AC00000000000A0000002000000000000000044 -:104AD00000000000000000000000000000000000D6 -:104AE00000000000000000000000000000000000C6 -:104AF00000000000000000000000000000000000B6 -:104B000000000000000000000000000000000000A5 -:104B10000000000000000000000000000000000095 -:104B20000000000000000000000000000000000085 -:104B30000000000000000000000000000000000075 -:104B40000000000000000000000000000000000065 -:104B50000000000000000000000000000000000055 -:104B60000000000000000000000000000000000045 -:104B70000000000000000000000000000000000035 -:104B80000000000000000000000000000000000025 -:104B90000000000000000000000000000000000015 -:104BA0000000000000000000000000000000000005 -:104BB00000000000000000000000000000000000F5 -:104BC000000000000000000000008200080000005B -:104BD00000000000000000000000000000000020B5 -:104BE00000000000000000000000000000000000C5 -:104BF00000000000000000000000000000000000B5 +:104920000000000000000000000000002000000067 +:104930000000820000800500050000000440000027 +:1049400000840004001000000000000000080008BF +:104950000010001000000008400000000410008457 +:104960000000000408000000050304080008000817 +:10497000008400000000000800000000200000008B +:10498000000800000000000800000000008400048F +:1049900000084000000800080008000000000000B7 +:1049A000008400000000001009000000000000006A +:1049B0000002098409080040820882000008800182 +:1049C000000804100000040004409008820804401D +:1049D00090004040000000001000000004049020FF +:1049E0000221000090000000000000000080100381 +:1049F000002000009009000082000000C000C000FC +:104A00000000000000200000000000000000002066 +:104A1000000000000000000000000000000082080C +:104A2000100000200000000800000400000000004A +:104A300000000008C00000000000000000080000A6 +:104A4000000000000000100800000000000800A0A6 +:104A5000002000A00008000000000084000000000A +:104A6000008500000900080000000900000008029D +:104A70008008102000A0000000000000000000A03E +:104A80000000000000000000040000000000000022 +:104A9000008400000000000800000000000000008A +:104AA00000000000000000000000080000000000FE +:104AB00000000000000000A0000000000000000056 +:104AC0000000000000000020000000008200A04064 +:104AD0000810A04010040020000400200000002066 +:104AE000002010058200A0200000000084000009C2 +:104AF00000020040840000000000000000000820C8 +:104B000008000020000082000000000000000000FB +:104B100000008200000008000800040000000800F7 +:104B20000000820008008200040082004000820031 +:104B300008020002820008020000000000091020A4 +:104B40000805004000000000000000000200000016 +:104B50000000000000000000000400000000000051 +:104B60000004030000A0000000400000000041001D +:104B700000000021000000000040001000000000C4 +:104B80001000000000000000000000000000000015 +:104B9000000000000000080000A000000000080065 +:104BA0000000000000000000000000000000800085 +:104BB00041000000000003000000000000000000B1 +:104BC0000000000000010000000000000000820062 +:104BD00000000800000000000000000000001000BD +:104BE000000000000000820000000800000000201B +:104BF0000000400004800100820000000008A000C6 :104C000000000000000000000000000000000000A4 :104C10000000000000000000000000000000000094 -:104C20000000000000000000000000000000000084 -:104C30000000000000000000000000000000000074 -:104C40000000000000000000000000000000000064 -:104C50001000000000000000000000000000000044 +:104C2000000000000000820004000000820000007C +:104C30000000000000000800000000050000000067 +:104C40000800000000000803000000080000000049 +:104C5000000000C000040000200000000000000070 :104C60000000000000000000000000000000000044 -:104C70000000000000000000000000000000000034 -:104C80000000000000000000000000000000000024 -:104C90000000000000000000000000000000000014 -:104CA0000000000000000000000000000000000004 -:104CB00000000000000000000000000000000000F4 -:104CC00000000000000000000000000000004000A4 -:104CD0000000840000000000000000000000000050 -:104CE00000080000000000000000000000000000BC -:104CF00000000000000000000000000000000000B4 +:104C700000010000800000024000040041A000008C +:104C80000020000000000000000000000000000004 +:104C9000040000000404000011A00900000000004E +:104CA00000000000000000000040000000001000B4 +:104CB0000000000005001084000000000400000057 +:104CC00000000000000000000000000000002000C4 +:104CD000000020000000000000000000C0000000F4 +:104CE0000020000000000200840000008208000490 +:104CF00000210008000000000000820000000021E8 :104D000000000000000000000000000000000000A3 :104D10000000000000000000000000000000000093 -:104D20000000000000000000000000000000000083 -:104D30000000000000000000000000000000000073 -:104D40000000000000000000000000000000000063 -:104D50000000000000000000000000000000000053 -:104D60000000000000000000000000000000000043 -:104D70000000000000000000000000000000000033 -:104D80000000000000000000000000000000000023 +:104D20000000002100000000000000000000000062 +:104D3000C00000000400000040004000A009000581 +:104D40000008000040000002000000000000000019 +:104D50000000000000000300000000000000200030 +:104D60000000002005000000000004040000000016 +:104D70000000000000002000000000000000000013 +:104D80000000000008000000000008000000000013 :104D90000000000000000000000000000000000013 :104DA0000000000000000000000000000000000003 -:104DB00000000000000000000000000000000000F3 -:104DC00000000000000000000000000000000000E3 -:104DD00000000000000000000002909000900040E1 -:104DE00000000000000000000000000000000000C3 -:104DF00000000000000000000000000000000000B3 +:104DB00000000000000000000300000000000000F0 +:104DC000000041000000050000880300080000000A +:104DD00000000000000000000000000100000000D2 +:104DE000000000000000000040A04084001040824D +:104DF0000000880000000000000083009000000018 :104E000000000000000000000000000000000000A2 :104E10000000000000000000000000000000000092 :104E20000000000000000000000000000000000082 -:104E30000000000000000000000000000000000072 -:104E40000000000000000000000000000000000062 -:104E50000000000000000000000000808000000052 -:104E60000000000000000000000000000000000042 -:104E70000000000000000000000000000000000032 +:104E3000000000000000020000000001010140012C +:104E4000000082A0004000201004A0C000400040EC +:104E500020A00000000000000000004020100920F9 +:104E600000200000000000000000008000000000A2 +:104E7000008000000000000000002000080000008A :104E80000000000000000000000000000000000022 :104E90000000000000000000000000000000000012 :104EA0000000000000000000000000000000000002 -:104EB00000000000000000000000000000000000F2 -:104EC00000000000000000000000000000000000E2 -:104ED000000000000000000000000000800000C092 -:104EE00080008000000000000000000000000000C2 -:104EF00000000000000000000000000000000000B2 -:104F000000000000000000000000000000000000A1 +:104EB0000000000000001000800000000810020246 +:104EC0000002002000800000000000804080000000 +:104ED0000080000000000000000000001000200022 +:104EE0001000020500000000000000008000000922 +:104EF0008000000000008000800000801080210001 +:104F00000408400300000000000000000000000052 :104F10000000000000000000000000000000000091 :104F20000000000000000000000000000000000081 -:104F30000000000000000000000000000000000071 -:104F40000000000000000000000000000000000061 -:104F500000000000000000000000000000008800C9 -:104F600040108282040800000000000000000000E1 -:104F70000000000000000000000000000000000031 -:104F80000000000000000000000000000000000021 +:104F300000000000000000000000000000000380EE +:104F400021001100202100008000800000000000EE +:104F50008040008080000000000000000000019000 +:104F6000010000000000000000000000000004003C +:104F70000800A0A0C000200004000400208201401E +:104F8000000001010001000000000000000000001E :104F90000000000000000000000000000000000011 :104FA0000000000000000000000000000000000001 :104FB00000000000000000000000000000000000F1 -:104FC00000000000000000000000000000000000E1 -:104FD00000000000000000000000000000000000D1 -:104FE00091000000102000200000000000000000E0 -:104FF00000000000000000000000000000000000B1 -:1050000000000000000000000000000000000000A0 +:104FC000000800000000010184000200A090000021 +:104FD000400008009040C0000000000000000000F9 +:104FE00000000000080100000000000000000000B8 +:104FF00040A000408208881000000000000000006F +:10500000000000000001000100000000000000009E :105010000000000000000000000000000000000090 :105020000000000000000000000000000000000080 :105030000000000000000000000000000000000070 -:105040000000000000000000000000000000000060 -:105050000000000000000000000000000000000050 -:1050600000004100000000000000000000000000FF -:105070000000000000000000000000000000000030 -:105080000000000000000000000000000000000020 +:1050400000000000000000010000088800040004C7 +:10505000A00008400040000000C000000000000068 +:105060000000004100054121000500000000000093 +:105070000000800000000080000000000000000030 +:1050800000000008000900050320000000000000E7 :105090000000000000000000000000000000000010 :1050A0000000000000000000000000000000000000 -:1050B00000000000000000000000000000000000F0 -:1050C00000000000000000000000000000000000E0 -:1050D00000000000000000000000000000000000D0 -:1050E00000000000800380850080000000000000B8 -:1050F00000000000000000000000000000000000B0 -:10510000000000000000000000000000000000009F +:1050B00000000000000000000000000000030040AD +:1050C0000008000900100802102100008000008084 +:1050D0000080800000000000000000800000000050 +:1050E000000000002102030041000804000000004D +:1050F000000000008000008200008000001000A07E +:105100000000000041800400210011100000000098 :10511000000000000000000000000000000000008F :10512000000000000000000000000000000000007F :10513000000000000000000000000000000000006F -:10514000000000000000000000000000000000005F -:10515000000000000000000000000000000000004F -:105160000000000000000200A0A0904040000000ED -:10517000000000000000000000000000000000002F -:10518000000000000000000000000000000000001F +:1051400000000000000021000500200005400000D4 +:10515000000000008000804080830000800000008C +:1051600000000000000001850000000000010000B8 +:1051700000000000000010002003084008000001AB +:10518000000300A000000104000001000001000075 :10519000000000000000000000000000000000000F :1051A00000000000000000000000000000000000FF :1051B00000000000000000000000000000000000EF -:1051C00000000000000000000000000000000000DF -:1051D00000000000000000000000000000000000CF -:1051E0000000000000000000000000000700420076 -:1051F00000000000000000000000000000000000AF -:10520000000000000000000000000000000000009E +:1051C00000000000000000000120000001000000BD +:1051D0000000400020401000C00008204082040071 +:1051E0000000000000000000000000E000000000DF +:1051F00000000000000000000000000007000000A8 +:105200000081000007000000000000000000000016 :10521000000000000000000000000000000000008E :10522000000000000000000000000000000000007E :10523000000000000000000000000000000000006E :10524000000000000000000000000000000000005E -:10525000000000000000000000000000000000004E -:10526000000000000000000000000A003C00FF00F9 -:10527000000000000000000000000000000000002E -:10528000000000000000000000000000000000001E +:105250000000000000000000000000000000070047 +:10526000000000000000000000000000000000003E +:10527000000000000000000000000F0503013C0CCE +:1052800028080000000000000000000000000000EE :10529000000000000000000000000000000000000E :1052A00000000000000000000000000000000000FE :1052B00000000000000000000000000000000000EE :1052C00000000000000000000000000000000000DE -:1052D00000000000000000000000000000000000CE -:1052E000000000000000000000000000FF00FF00C0 -:1052F000FF000000000000000000000000000000AF -:10530000000000000000000000000000000000009D +:1052D0000000000080A080A015001500F0003C3CFC +:1052E000FCFCA8A800000000000000000000000076 +:1052F000000000000000000000000000FF55C34156 +:105300003C0C3C0C0000000000000000000000000D :10531000000000000000000000000000000000008D :10532000000000000000000000000000000000007D :10533000000000000000000000000000000000006D :10534000000000000000000000000000000000005D -:10535000000000000000000000000000000000004D -:10536000000000000000000000000000000000003D -:10537000000055FF51F30000000000000000000095 -:10538000000000000000000000000000000000001D +:1053500000000000000080A080A010001000A0004D +:1053600028280000A8A8000000000000000000009D +:1053700000000000000000000000000000005D5D73 +:10538000FF5D2DFF00FF0000000000000004000092 :10539000000000000000000000000000000000000D :1053A00000000000000000000000000000000000FD :1053B00000000000000000000000000000000000ED :1053C00000000000000000000000000000000000DD -:1053D00000000000000000000000000000000000CD -:1053E00000000000000000000000000000000000BD -:1053F0000000000C55FF55FF0000000000000000F9 -:10540000000000000000000000000000000000009C +:1053D0000000000000000000FFFFFF0F00000000C1 +:1053E0003C0CFF0F70707000000000000000000017 +:1053F00000000000000000000000000000000000AD +:10540000FFFFFFFF00FF00FF0000000000000000A2 :10541000000000000000000000000000000000008C :10542000000000000000000000000000000000007C :10543000000000000000000000000000000000006C :10544000000000000000000000000000000000005C -:10545000000000000000000000000000000000004C -:10546000000000000000000000000000000000003C -:10547000000085000A08051000A0000000000000E0 -:10548000000000000000000000000000000000001C -:10549000000000000000000000000000000000000C +:1054500000000000000000000000D7D7D70703F3CA +:1054600003F33C0C0000000070000000000000008E +:1054700000000061000500090000000000000000BD +:1054800000000000000800000000000000380000DC +:1054900000A000610006000D0000000000000000F8 :1054A00000000000000000000000000000000000FC :1054B00000000000000000000000000000000000EC -:1054C00000000000000000000000000000000000DC -:1054D00000000000000000000000000000000000CC -:1054E00000000000000000000000000000000000BC -:1054F00000000000000000000000000000000000AC +:1054C0000000000000000000000000000061000675 +:1054D000000D000000610006000D0000000040000B +:1054E000000000001000200800400008000000003C +:1054F00000000000D7F7C3E3FFC0FFC000000000BA :10550000000000000000000000000000000000009B -:10551000000000000000000000000000000000008B +:10551000000000005F5F3F3001000100000000005C :10552000000000000000000000000000000000007B :10553000000000000000000000000000000000006B :10554000000000000000000000000000000000005B -:10555000000000000000000000000000000000004B +:105550000000B0B030F03C3C3C3C007800780000EB :10556000000000000000000000000000000000003B -:10557000000000000000000000000000000000002B +:10557000000000000000C3C3C3C3FFC0FFFF000062 :10558000000000000000000000000000000000001B -:10559000000000000000000000000000000000000B +:1055900000000000000050503F30BDBCB5B400001A :1055A00000000000000000000000000000000000FB :1055B00000000000000000000000000000000000EB :1055C00000000000000000000000000000000000DB -:1055D00000000000000000000000000000000000CB +:1055D00000000000B0B000C00800000000550055F9 :1055E00000000000000000000000000000000000BB -:1055F00000000000000000000000000000000000AB +:1055F000000000000000000000003C3CAA8AAA0055 :10560000000000000000000000000000000000009A -:10561000000000000000000000000000000000008A +:10561000000000000000000000000000000020006A :10562000000000000000000000000000000000007A :10563000000000000000000000000000000000006A :10564000000000000000000000000000000000005A -:10565000000000000000000000000000000000004A -:10566000000000000000000000000000000000003A -:10567000000000000000000000000000000000002A -:10568000000000000000000000000000000000001A +:1056500000000000000000000000FF35F035AABE89 +:10566000300000000000000000000000000000000A +:105670000000000000000000000000000F00AA8AE7 +:10568000AA8A0000000000000000000000000000E6 :10569000000000000000000000000000000000000A :1056A00000000000000000000000000000000000FA :1056B00000000000000000000000000000000000EA :1056C00000000000000000000000000000000000DA -:1056D00000000000000000000000000000000000CA -:1056E00000000000000000000000000000000000BA -:1056F00000000000000000000000000000030000A7 -:105700000003000000000000000000000000000096 -:105710000000000000000000000000000000000089 -:105720000000000000000000000000000000000079 -:105730000000000200000000000000000000000067 -:105740000000000000000000000000000000000059 -:105750000000000000020000000000000000000047 -:105760000000000000000000000000000000000039 -:105770000000000000020000000400000000000023 -:105780000000000000000000000000000000000019 -:105790000000000000000000000000000000000009 -:1057A00000000000000000000000000000000000F9 -:1057B00000000000000000000000000000000000E9 -:1057C00000000000000000000000000000000000D9 -:1057D00000000000000000000000000000000000C9 -:1057E00000000000000000000000000000000000B9 -:1057F00000000000000000000000020000000000A7 -:105800000000000000000000000000000000000098 -:105810000000000000000000000000000000000088 -:105820000000000000000000000000000000000078 -:105830000000000000000000000000000000000068 -:105840000000000000000000000000000000000058 -:105850000000000000000000000000000000000048 -:105860000000000000000000000000000000000038 -:105870000000000000000000000000000000000028 -:1058800000900082000000000000000800000000FE -:105890000000000000000000000000000000000008 -:1058A00000000000000000000000000800000000F0 -:1058B00000000000000000000000000000000008E0 -:1058C00000000000000000000000000000020000D6 -:1058D00000000000000000000000000000000002C6 -:1058E00000000000000000000000000000000000B8 -:1058F00000000000000000000000000000000003A5 -:105900000000000000000000000000000000000097 -:105910000000000000000000000000000000000087 -:105920000000000000000000000000000000000077 -:105930000000000000000000000000000000000067 -:105940000000000000000000000000000000000057 +:1056D0000000000000000000000000000F35003551 +:1056E000AAAA300000000000000000000000000036 +:1056F00000000000000000030000C00088002040FF +:1057000000004000C00000002000880000002000D1 +:1057100010040000020000028408040020002000A1 +:105720000000040084004000400000080004200045 +:105730000000100400002004840020002004200049 +:1057400004048800880420000000200000020000FB +:10575000200040022003400000004002200400001E +:1057600020002008100404000000000000020000D7 +:1057700040002004200000400004108208000004C3 +:1057800000020084000200000090000000020002FD +:1057900000000090400200000000004020000002D5 +:1057A00000000004000000040000200000000000D1 +:1057B0000000000000020000000000000000009057 +:1057C0000000200000000000000020000000000099 +:1057D0000000000000000000100000002000000099 +:1057E0002000000021024000000000000000000036 +:1057F000000000000002000200000200000004108F +:105800000000000000000000000090000000020006 +:10581000000000090000100000000200000000006D +:105820000200020900000000000000000000020069 +:105830000010000004000000000000000000400014 +:105840000000020000000000000000400200000014 +:105850000000020000000000040020000000000022 +:1058600000004000000000000200000000000000F6 +:1058700000000000000000000000000000840000A4 +:1058800003C00008000400080084000002000000BB +:10589000038800000000000000000000000000007D +:1058A00000040008200000080008000000000000BC +:1058B000000004004000000800080000000000088C +:1058C00000040000008840000010000800000000F4 +:1058D0000000000400004000000400040000000874 +:1058E00000000008000000000000000805000000A3 +:1058F0000000000000000000000000004000040064 +:1059000000100008002000008800900800000040FF +:105910000000020088000000000888050000000068 +:105920000200000000000000200000000000400015 +:105930000000000000000000004000000000000027 +:1059400000000000000800001000000090000000AF :105950000000000000000000000000000000000047 -:105960000000000000000000000000000000000037 -:105970000000000000000000000000000000000027 -:10598000000005000500000000000000000000000D -:105990000000008400000000000000000000000083 -:1059A00000000000000000000000000000000000F7 -:1059B00000000000000000000000002000000000C7 -:1059C00000000000000000000000000000000000D7 +:1059600000004000000000000000400000000000B7 +:105970000000000000000003000000000000000024 +:1059800009001100110000000000000004000000E8 +:1059900000C041200000050040000000030021007D +:1059A00000080000000204000000000000000000E9 +:1059B00000000000080000000000000000000000DF +:1059C00000000000000000000000000000002100B6 :1059D00000000000000000000000000000000000C7 -:1059E00000000000000000000000000000000000B7 -:1059F00000000000000000000000000000000000A7 -:105A00000000000000000000000000000000000096 -:105A10000000000400000000000000000000000082 -:105A20000000000000000000000000000000000076 -:105A30000000000000000000000000000000000066 -:105A40000000000000000000000000000000000056 -:105A50000000000000000000000000000000000046 -:105A60000000000000000000000000000000000036 -:105A700000000000000000400000000000000000E6 -:105A80000000000000000000000000000000000016 -:105A90000000000000000000000000000000000006 -:105AA00000000000000000000000000000000000F6 -:105AB00000000000000000000000000000000000E6 +:1059E000080011000000400000A0000003000300B8 +:1059F00000080000000421000000000000840040B6 +:105A000000000004000408000040000000049009A9 +:105A1000080000000000000000400000004082116B +:105A20000000000400410820000000000000000009 +:105A30000000000400400400002000000800C00333 +:105A40000000000000000000002000000010000422 +:105A50000040000000000000000000000000040002 +:105A600040000000080000000000004000000008A6 +:105A70000000080900050000000000000000000010 +:105A800000400300000010000000000005000000BE +:105A9000000004000000008800880000008800006A +:105AA0000400004021000000004000000010200021 +:105AB0000300210000000088040000000000050031 :105AC00000000000000000000000000000000000D6 -:105AD00000000000000000000000000000000000C6 -:105AE00000000000000000000000000000000000B6 -:105AF00000000000000000000000000000000000A6 -:105B00000000000000000000000000000002000093 -:105B10000000000000000000000000000000000085 -:105B2000000000000000000800000000000000006D -:105B30000000000000000000000000000000000065 -:105B40000000000000000000000000000000000055 +:105AD00000000800080000000000000000000800AE +:105AE000000000000000000000001000000008009E +:105AF000000011001000030000000000008800906A +:105B00000000000000000000000000000000000095 +:105B1000000008000000002000000000020000005B +:105B20000000000000000000000000000000000075 +:105B3000000000000800000000000000000000005D +:105B40000000000000000000000000040000000051 :105B50000000000000000000000000000000000045 :105B60000000000000000000000000000000000035 :105B70000000000000000000000000000000000025 -:105B800000000000000000000000000000004000D5 -:105B900003000300210000000000000008000000D6 -:105BA00000000000000000000000000000000000F5 -:105BB00000000000000000000000000000000000E5 +:105B8000000000000000000000000000000004040D +:105B90000040000008000000000000000000008835 +:105BA00000000000000803000000002000000000CA +:105BB000400000A0080000000000008803A00000D2 :105BC00000000000000000000000000000000000D5 -:105BD00000000000000000000000000000000000C5 +:105BD0000000000040400000000000000000000045 :105BE00000000000000000000000000000000000B5 -:105BF00000000000000000000000000000000000A5 -:105C0000000000000000000000000000000008008C +:105BF0000000000000000900000003040000000095 +:105C0000000008000000000000000000000000008C :105C10000000000000000000000000000000000084 -:105C20000000000000030000000000000000000071 -:105C30000000000000000000000000000000000064 +:105C20000800040000000000000000000000001058 +:105C3000080000000000000000000000000000005C :105C40000000000000000000000000000000000054 -:105C50000000000000000000000000000000000044 +:105C500082000000000000000000000000000000C2 :105C60000000000000000000000000000000000034 -:105C70000000000000000000000000000000000024 -:105C80000000000000000000000000000000000014 -:105C900000000000000000000000000008000000FC -:105CA00000000000000000000000000000000000F4 -:105CB00000000000000000000000000000000000E4 -:105CC00000000000000000000000000000000000D4 -:105CD00000000000000000000000000000000000C4 -:105CE00000000000000000000000000000000000B4 -:105CF00000000000000000000000000000000000A4 -:105D00000000000000000000000000000000000093 +:105C7000000000000000000008000000000000001C +:105C800000000000004000000000000000002000B4 +:105C90002000000002C0008200020200000000009C +:105CA0000900000404002000200000000020000083 +:105CB0004104000000C000C01100000000001000FE +:105CC00004000000110000000000000000000000BF +:105CD00010000300000000000000000000000000B1 +:105CE0000000400000000200000000000000000072 +:105CF000080000000000100000000000000020204C +:105D000008884000000011000000000000000000B2 :105D10000000000000000000000000000000000083 :105D20000000000000000000000000000000000073 :105D30000000000000000000000000000000000063 @@ -87679,917 +87679,917 @@ :10668000000000000000000000000000000000000A :1066900000000000000000000000000000000000FA :1066A00000000000000000000000000000000000EA -:1066B00000000000000000000000000000000000DA -:1066C00000000000000200000000000000000000C8 -:1066D00000000000000000000000000000000000BA -:1066E00000000000000000000000000000000000AA -:1066F0000000000200000000000000000000000098 -:106700000000000000000000000000000000000089 -:106710000020002000000000000002000000000037 -:106720000000000000000000000000000000000069 -:106730000000000000000000000000000000000059 -:106740000000000000020001000000000000000046 -:106750000000000000000000000000000000000039 -:106760000000000000000000000000000000000029 -:106770000000000000000000000000000000000019 -:106780000000000000000000000000000000000009 -:1067900000000001000100000000000000000000F7 -:1067A00000000000000000000000000000000000E9 -:1067B00000000000000000000000000000000000D9 -:1067C00000000000000200800000000200800000C5 -:1067D00000000000000000000000000000000000B9 -:1067E00000000000000000000000000000000000A9 -:1067F0000000000000000000000000000000000099 -:106800000000000000000000000000000000000088 -:106810000000000000000000000000000000000078 -:106820000000000000000000000000000000000068 -:1068300000000000000000000000000000000082D6 -:106840000000000000000001001000000001000234 -:106850000000000000000000000000000000000038 -:106860000000000000000000000000000000000028 -:106870000000000000000000000000000000000018 -:106880000000000000000000000000000000000008 -:1068900000000000000002000000000000000000F6 -:1068A00000000000000000000000000000000000E8 -:1068B00000000000000000000000102100000000A7 -:1068C0000000000000000000900000020000000036 -:1068D00000000000000000000000000000000000B8 -:1068E00000000000000000000000000000000000A8 -:1068F0000000000000000000000000000000000098 -:106900000000000000000000000000000000000087 -:106910000000000000000000000000000000000077 -:106920000000000000000000000000000000000067 -:106930000000000000000000000000000000000057 -:1069400000000000000000000000000000890000BE -:1069500000880000000000000000000000000000AF -:106960000000000000000000000000000000000027 -:106970000000000000000000000000000000000017 -:106980000000000000000000000000000000000007 +:1066B0000000410040080010001020004000880445 +:1066C0000104828040200205C0848504000000008F +:1066D0002004400020039000848400000000021188 +:1066E0000010C0002000400804914000A0004000BD +:1066F0008400000390000800200004000000C00097 +:10670000401140048800200420008811000020006F +:106710000000C002C00420002000C00010000000E3 +:10672000C004000220008400880402040400000069 +:106730001000100008041003008305910800204099 +:10674000004008000002410100040020404000C059 +:10675000000400002000000421000010000041900F +:106760004100000100900000000010100002000035 +:106770000000000000000000A000000080000000F9 +:106780000082000410000000080000000004000067 +:106790002100000000000090004000000082400046 +:1067A000000000000500000240000084800083001B +:1067B0000000400000000000104100000000000048 +:1067C00011080008400000009080020000800010C6 +:1067D00008000000004100408800000000000000A8 +:1067E000000000080000020000000000000000009F +:1067F00001000000200000000004000000800404EC +:106800000000000000100000000000000000000078 +:106810000000400010000000000400000000020022 +:106820000000000000000840912002000300040066 +:10683000040004000882000009088008000009081C +:1068400000009009410088080000000200000002DA +:1068500020090300090802084184000800004008DC +:1068600041002008209004820002001000000084F3 +:1068700000040200000440040000408509044104B3 +:10688000C009000000040005040000080984000895 +:10689000410405000000000000000900000800009D +:1068A0000904000000844000000002910008044038 +:1068B000A0004100800080210000000000000000D6 +:1068C0004000000000100280040040009000000022 +:1068D00000000000900000004020000400110008AB +:1068E00000200000880000000000000800000000F8 +:1068F0000000000000000000000000000000000890 +:106900000000002000002000000000000021000026 +:106910000000000000000000000000000020004017 +:10692000000088409000000090000000000000007F +:106930000000000000000805010000000000080041 +:10694000000080000800008800020000080000002D +:106950000000000000000000000000000000000037 +:1069600000000000000000000000002000000040C7 +:106970000400000000000000000000000000000013 +:106980000000000000010000000000000000000006 :1069900000000000000000000000000000000000F7 -:1069A00000000000000000000000000000000000E7 -:1069B00000000000000000000000000000000000D7 -:1069C0008400000000000000000000000000000043 -:1069D0000000004000400000000000000000000037 -:1069E00000000000000000000000000000000000A7 -:1069F0000000000000000000000000000000000097 -:106A00000000000000000000000000000000000086 -:106A10000000000000000000000000000000000076 -:106A20000000000000000000000000000000000066 -:106A30000000000000000000000000000000000056 -:106A400000A02000008400000300000003000000FC -:106A50000000000000000000000000000000000036 -:106A60000000000000000000000000000000000026 -:106A70000000000000000000000000000000000016 -:106A80000000000000000000000000000000000006 -:106A900000000000000000000000000000000000F6 -:106AA00000000000000000000000000000000000E6 -:106AB00000000000000000000000000000000000D6 -:106AC00000000000000000000000000000000800BE -:106AD00000000000000000000000001100000000A5 -:106AE00000000000000000000000000000000000A6 -:106AF0000000000000000000000000000000000096 -:106B00000000000000000000000000000000000085 -:106B10000000000000000000000000000000000075 -:106B20000000000000000000000000000000000065 -:106B30000000000000000000000000000000000055 -:106B40000000000000000000000000000000000045 -:106B50000000000000000000000000000000000035 -:106B60000000000000000000000000000000000025 -:106B70000000000000000000000000000000000015 -:106B80000000000000000000000000000000000005 -:106B900000000000000000000000000000000000F5 -:106BA00000000000000000000000000000000000E5 -:106BB00000000000000000000000000000000000D5 -:106BC00000000000000000000000002000000000A5 -:106BD0000000042000000000000000000000000091 -:106BE00000000000000000000000000000000000A5 -:106BF0000000000000000000000000000000000095 -:106C00000000000000000000000000000000000084 -:106C10000000000000000000000000000000000074 -:106C20000000000000000000000000000000000064 -:106C30000000000000000000000000000000000054 -:106C4000000000000000000000000000000008003C -:106C50000000000000000000000000000000040030 -:106C60000000000000000000000000000000000024 -:106C70000000000000000000000000000000000014 -:106C80000000000000000000000000000000000004 -:106C900000000000000000000000000000000000F4 -:106CA00000000000000000000000000000000000E4 -:106CB0000000000000000000000000400000000094 -:106CC00000000000000000000000000000000000C4 -:106CD00000000000000000000000000000000001B3 -:106CE00000000000000000000000000000000000A4 -:106CF0000000000000000000000000000000000094 -:106D00000000000000000000000000000000000083 -:106D10000000000000000000000000000000000073 +:1069A0000000000000820000000000000000000065 +:1069B00000000000000000000000040000000000D3 +:1069C0002000080509009002020408100004A040FD +:1069D000020008040000C00900409040004110007F +:1069E0000004021100020000C004820484408200FE +:1069F00002000002094000020004004008400000BC +:106A0000A00010850000020000000040000082008D +:106A1000080000030009402108021000080082005D +:106A200000009000C000080300098200A000C0021E +:106A30002010020210210040C00909008200040257 +:106A4000000020002100408200010204000121A07A +:106A50000008030800A01100418405000088000020 +:106A6000100000C01000008403404084118820847E +:106A7000210082000888020000880400042021040C +:106A8000000000A00004000088400040100808003A +:106A900000000000000800080500050021000000BB +:106AA0000800020000004100008211880804000470 +:106AB000400041008000030000040004840221849F +:106AC000880108008200A0004000000404000008C3 +:106AD000A0000020A000C0200000C00200000000B4 +:106AE0000000A01184208220880082000000004164 +:106AF0000000000002211000C080C000C000900013 +:106B0000200000000000080000200000000000003D +:106B10000000000004000000000000000011000060 +:106B200000000800080000000000000082000800CB +:106B300008080800100004004000820000008200E5 +:106B400000000000200000000040002000001000B5 +:106B500000000020000000000000000000000020F5 +:106B600040001000000000000000000000000000D5 +:106B70000000000000008000000000100000000085 +:106B80000000000000000000800000000000000085 +:106B900000000000000200000000000000000000F3 +:106BA00000000000000000000004000000000000E1 +:106BB0000000040000000000800000000000000051 +:106BC00000000000000000008200000040004100C2 +:106BD00002C0C0088800000082000000080884404D +:106BE0000000001000000008840000000000080001 +:106BF00000000000001100000008000084080800E8 +:106C000083808200400000000000000000000000BF +:106C100000000008000000000000820000000000EA +:106C2000000000000000000000004000C000000064 +:106C30000000A00082008200000008000880080018 +:106C400000A000040000000000000084000000021A +:106C500002400008200502C00084008200000004F9 +:106C600003C0119002012100039003C0008800823C +:106C700000000020410000200800058800084000B6 +:106C8000000008100000400200000800008800001A +:106C900021000000000000000000000800000000CB +:106CA000080011000000000041000000002000006A +:106CB00000001100000010000000208811080840AA +:106CC00003900010400000000000080001000100D7 +:106CD0008200020101000100C00010A0048402092A +:106CE0008209010000000000000100000000000017 +:106CF00000000240000800901002000000000000A8 +:106D0000000000000000000000000000C0C0A0045F +:106D100000A0824100000000000000000000000010 :106D20000000000000000000000000000000000063 -:106D30000000000000000000000000000000000053 -:106D40000000000000000000000000000000000043 -:106D50000000000000000000000000000000000330 -:106D60000010000000000000000000000000000013 -:106D70000000000000000000000000000000000013 -:106D80000000000000000000000000000000000003 -:106D900000000000000000000000000000000000F3 +:106D300000000000000000000000000004C002404D +:106D400000A00482852004082084020000000300C3 +:106D500008000000804109050208804080C18205CA +:106D6000808880101020000800100008000000003B +:106D70000000000080000000000080800000000093 +:106D800000000000000000000000000000009083F0 +:106D9000218808A08008000000000000000000001A :106DA00000000000000000000000000000000000E3 -:106DB00000000000000000000000000000000000D3 -:106DC00000000000000000000000000000000000C3 -:106DD0000000000000000000000000000000200093 -:106DE0001000080008100000000000000000000073 -:106DF0000000000000000000000000000000000093 -:106E00000000000000000000000000000000000082 -:106E10000000000000000000000000000000000072 +:106DB0000000000000000000000000000000008053 +:106DC0008000000080802000A10000008000000002 +:106DD000800380000000100008000500850090007E +:106DE00008038310052080008000800000008000E0 +:106DF0000000800000008000800000000000000013 +:106E00000000000080000000000080000000000082 +:106E1000C180020088208080000000000000000087 :106E20000000000000000000000000000000000062 :106E30000000000000000000000000000000000052 -:106E40000000000000000000000000000000000042 -:106E50000000000000000000000000000000000032 -:106E6000010001000100010100000000000000001D -:106E70000000000000000000000000000000000012 -:106E80000000000000000000000000000000000002 -:106E900000000000000000000000000000000000F2 +:106E400080000004808080000400099020002180E0 +:106E500020000800104082400900010091000890C5 +:106E600008008201A04000850200020040A020002E +:106E7000040088008400081088000400A0000400BA +:106E800088009000A000C000200010000200400018 +:106E9000000010409000410082020000000000004D :106EA00000000000000000000000000000000000E2 -:106EB000008800000000000000000000000000004A -:106EC00000000000000000000000000000000000C2 -:106ED00000000000000000000000000000010000B1 -:106EE000000100010000000100010000000000009E -:106EF0000000000000000000000000000000000092 -:106F00000000000000000000000000000000000081 -:106F10000000000000000000000000000000000071 +:106EB00000000000000000000000000000000000D2 +:106EC0000000080004000282C0009100000390004E +:106ED0000182009000090021008900C0001100C05B +:106EE00000C1201100020040880800040040849086 +:106EF00000A00000000000000000884000202004E6 +:106F000008C00000000000000000000000000000B9 +:106F100000000000400200900882A09100000000E4 :106F20000000000000000000000000000000000061 -:106F30000800000000000000000000000000000049 -:106F40000000000000000000000000000000000041 -:106F500000000000000000000000000000400010E1 -:106F600000000010000800110521000800000000CA -:106F70000000000000000000000000000000000011 +:106F30000000000000000000000000000000000051 +:106F40000000000004080004000282C0908200904B +:106F5000082100A0000000A000200041002020889F +:106F6000040300C100100388108510030000408056 +:106F700011001180000000000000000000800000EF :106F80000000000000000000000000000000000001 -:106F900000000000000000000000000000000000F1 +:106F90000000000000000088000941208009000076 :106FA00000000000000000000000000000000000E1 :106FB00000000000000000000000000000000000D1 -:106FC00000000000000000000000000000000000C1 -:106FD00000000000000000000000000000000000B1 -:106FE00000000000000021008000A100100000004F -:106FF0000000000000000000000000000000000091 -:107000000000000000000000000000000000000080 -:107010000000000000000000000000000000000070 +:106FC0000000000000000080008000800080800938 +:106FD0000003001000C080080000008000000000D6 +:106FE00000000000000309100420218000030000BD +:106FF0008080008000000000000000800000000091 +:107000000080000000000000000900800000002057 +:107010000000008000000000080810A00500100318 :107020000000000000000000000000000000000060 -:107030000000002000000000000000000000000030 -:107040000000000000000000000000000000000040 -:107050000000000000000000000000000000000030 -:10706000000000000000000089401000A10088001E -:107070000000000000000000000000000000000010 -:107080000000000000000000000000000000000000 -:1070900000000000000000000000000000000000F0 -:1070A00000000000000000000000000000000000E0 +:107030000000000000000000000000000000000050 +:107040000000000000000000800000C00080000080 +:1070500000000040800080050400089020404000AF +:107060000090002000000000200390914184020065 +:1070700088000410888400000000008800020000DE +:10708000000000A000C000000000004100820000DD +:1070900000000020004000000000000901410088BD +:1070A00001000000000000000000000000000000DF :1070B00000000000000000000000000000000000D0 -:1070C00000000000000000000000000000000000C0 -:1070D00000000000000000000000000000000000B0 -:1070E00000000000000000000000000000000000A0 +:1070C00000000000000000000000C0000408C00430 +:1070D0008200829020200290A000000000E00000CA +:1070E0000000600000E000000082000000000700D7 :1070F0000000000000000000000000000000000090 -:10710000000000000000000000000000000000007F -:10711000000000000000000000000000000000006F -:10712000000000000000000000000000000000005F -:107130000000000000000000070000000000000048 +:107100000000000000000000000000000000070078 +:10711000000000000000000000000000000000E08F +:1071200007006000000000000000000000000000F8 +:10713000000000000000000000000000000000004F :10714000000000000000000000000000000000003F -:10715000000000000000000000000000000000002F -:107160000000000000000000000000003C3C3C303B -:10717000000000000000000000000000000000000F -:1071800000000000000000000000000000000000FF +:107150000700000000000000070000000280082077 +:10716000A0AFA0AF00000000BEBEA0F5F000000080 +:107170003A3A3A3AFF550F05CFCFCF000000000052 +:10718000000000000000000020702020000000002F :1071900000000000000000000000000000000000EF -:1071A00000000000000000000000000000000000DF +:1071A0000000F505F50500000000000000000000EB :1071B00000000000000000000000000000000000CF -:1071C00000000000000000000000000000000000BF -:1071D00000000000000000000000000000000000AF -:1071E00000000000000000000000000000003C3C27 -:1071F0003C30000000000000000000000000000023 -:10720000000000000000000000000000000000007E +:1071C0000000000000000000000000000000AAAA6B +:1071D000AAAABEBE40FE00F0FFF0BFFFBAFA01400F +:1071E00004100C0CFCFC000000001414A0F5AA0014 +:1071F000C300000FF0FFFF550F05CFCFCF000000F9 +:1072000000000000000000000000202020200000FE :10721000000000000000000000000000000000006E -:10722000000000000000000000000000000000005E +:1072200000000000F3F30303000000000000000072 :10723000000000000000000000000000000000004E :10724000000000000000000000000000000000003E -:10725000000000000000000000000000000000002E -:10726000000000000000000000000000000000001E -:10727000000000000000000000000000000000000E -:1072800000000000000000000000000000000000FE -:1072900000000000000000000000000000000000EE -:1072A00000000000000000000000000000000000DE +:10725000E8E828EB000040FEC3C3C3C315051000D7 +:1072600000000000F5F5FC0C0000000041000000EB +:10727000FFFFF5F03E0A3E0A00000000DF1FDC1CA5 +:1072800000000000FFC33C001717FF3CC3C303838B +:1072900000000000FFAA3FFF00000000CF7D0C7D32 +:1072A000000000FFC3C303030AFA0000000000004F :1072B00000000000000000000000000000000000CE :1072C00000000000000000000000000000000000BE -:1072D00000000000000000000000000000000000AE -:1072E000000000000000000000000000000000009E -:1072F000000000000000000000000000000000008E -:10730000000000000000000000000000000000007D -:10731000000000000000000000000000000000006D -:10732000000000000000000000000000000000005D +:1072D00000003C3C3C3CFF3F2A0000FF00F0143C17 +:1072E000143C000000000505FC0C000000004100FB +:1072F0000000FFFFFCF0FFFFFFFF00000000D313C2 +:10730000D010000000004D4D4D4D1717C300C3C3F2 +:10731000C38300000000AAAA3F0000000000CF4184 +:107320000C4100000F0F5555F3F30AFA000000005E :10733000000000000000000000000000000000004D :10734000000000000000000000000000000000003D -:10735000000000000000000000000000000000002D -:1073600000000000000000000000000000610006B6 -:10737000000D000000610006000D0000000000008C -:1073800000000000000000000000000000000000FD -:1073900000000000000000000000000000000000ED -:1073A00000000000000000000000000000000000DD +:10735000000000001E1EBE14C0002A00FFFFFFF048 +:10736000BE3CBE3C00610007000C0000006100074D +:10737000C09C00000061000E000D000000610006CE +:10738000000D0000000000000000000000000000F0 +:107390000010000000004000000000080000000095 +:1073A00000000001000000615009000100A0000081 :1073B00000000000000000000000000000000000CD -:1073C0000008050000A00000000000000000000010 -:1073D00000000000000000000000000000000000AD -:1073E000000000000000000000000000000000009D -:1073F00000003030F3F3F0F0F0F000000F3F000039 +:1073C00000000000000000000000000000000000BD +:1073D00000000000000010002008004000080061CC +:1073E0000A0E050D00A00000000000FFFFF00000E5 +:1073F00000000003000000F000FFAAFF7878000002 :10740000000000000000000000000000000000007C :10741000000000000000000000000000000000006C -:10742000000000000000000000000000000000005C +:107420000000000000000000AF05EB41FFF3FF305B :10743000000000000000000000000000000000004C :10744000000000000000000000000000000000003C :10745000000000000000000000000000000000002C -:10746000000000000000000000000000000000001C -:10747000000000003030F3F3C3C3F0F000000F3F12 +:1074600000000000FCA8FCFD000000000000FFF090 +:107470000000000000C300FFF0F0FFFF0055787827 :1074800000000000000000000000000000000000FC :1074900000000000000000000000000000000000EC -:1074A00000000000000000000000000000000000DC -:1074B00000000000000000000000000000000000CC +:1074A00000000000000000000000AF05EB4100F309 +:1074B000003000000000000000000000000000009C :1074C00000000000000000000000000000000000BC :1074D00000000000000000000000000000000000AC -:1074E000000000000000000000000000000000009C -:1074F0000000000000000000000000000000FC3C54 -:10750000FF3F00000000000000000000000000003D +:1074E0000000000000000C080C5D0000000000001F +:1074F000000055000F3CFCFCA0AF5F7D0A7DB4AAE4 +:10750000B4FFFF551E1E0000000000000000000038 :10751000000000000000000000000000000000006B -:10752000000000000000000000000000000000005B -:10753000000000000000000000000000000000004B +:107520000000000000000000000000003F3030308C +:1075300030F330F300000000000000000000000005 :10754000000000000000000000000000000000003B :10755000000000000000000000000000000000002B -:10756000000000000000000000000000000000001B -:10757000000000000000000000000000F000F0002B -:10758000C000C30300000000000000000000000075 +:10756000000000000000000071F071F00000000059 +:107570000000000055FF0F3C0C0CA0AF5F280A284C +:10758000B400B455AA001E1E000000000000000058 :1075900000000000000000000000000000000000EB -:1075A00000000000000000000000000000000000DB -:1075B00000000000000000000000000000000000CB +:1075A00000000000000000000000000000003F3F5D +:1075B000303F14D714D70000000000000000000086 :1075C00000000000000000000000000000000000BB :1075D00000000000000000000000000000000000AB -:1075E0000000000000000000000000000000020099 -:1075F000000000000000040000000005000800007A -:10760000002000000000000000000000000020003A -:10761000000000000000000000000000000000006A -:107620000000C00000000000000000000000000199 -:10763000200000000000000000000000000000002A -:10764000000000000000000000000000000000003A -:10765000000000000000000000000000000000002A -:10766000000000000000000000000000000000001A -:107670000020000000000000800000000000000466 -:1076800000000001000000000000000000000000F9 -:1076900000000000000000000000000000000000EA -:1076A00000000000000000000000000000000000DA -:1076B00000000000000000000000000000000000CA -:1076C00000000000000000000000000000000000BA -:1076D00000000000000000000000000000000000AA -:1076E000000000000000000000000000000000009A -:1076F0000000020200000080008000000000000086 -:10770000000000000400080000A0000000000000CD -:107710000000000000000000000000000000000069 -:1077200000002080000000000000000000000000B9 -:107730000000000000000000000000000000000049 -:107740000000000000000000000000000000000039 -:107750000000000000000000000000000000000029 -:107760000000000000000000000000000000000019 -:107770000000020080010000002000020000000064 -:1077800000000000000880008004001100000000DC -:107790000000008400000000000000000000000065 -:1077A0000000000880040000000000040000000049 -:1077B00000000000000000000000000000000000C9 -:1077C00000000000000800000000000000000000B1 -:1077D00000000000000000000000000000000000A9 -:1077E000000000000008000000000300000000008E -:1077F00000000000000000200000004000A0042164 -:107800000021000000800000000000400005002072 -:107810000020002000000000000000000000000028 -:107820000000000000400000000000000000000018 -:107830000000000000000000000000000000000048 -:107840000000000000000000000000000000000038 -:107850000000000000000000000000000000000028 -:107860000000000000000000000000000000000018 -:10787000000000000000000000000000008900413E -:107880008000000000000002000000000000000076 -:10789000000100010001008800000000000000005D -:1078A00000000000000000000000000000000000D8 -:1078B00000000000000000000000000000000000C8 -:1078C00000000000000000000000000000000800B0 -:1078D00000000000000000000000000000000000A8 -:1078E0000000000000000000000000000000000098 -:1078F0000000000000000000000008000800000078 -:10790000080000000800A00000000000200400099A -:1079100000000000000000000080000000400000A7 -:107920000000000000000000000000000000000057 -:107930000000000000000000000000000000000047 -:107940000000000000000000000000000000000037 -:107950000000000000000000000000000000000027 -:10796000000000000000000000000000000088117E -:107970000000000000000000000000000200000005 -:1079800000000000030000000800000040000000AC -:1079900008000000000000000000002008000300B4 -:1079A00000000000000000000000000000000000D7 -:1079B00000000000000000000000000000000800BF -:1079C00000000000000000000000000000000000B7 -:1079D000000000000000000000000000000008009F -:1079E0000000000000000000000000000000000097 -:1079F0000000000000000000000000000000000087 -:107A00000000100000000000000000008210008054 -:107A100000008880008000000000000000000000DE -:107A2000000000000000080000000000000000004E -:107A30000000000000000000000000000000000046 -:107A40000000000000000000000000000000000036 -:107A50000000000000000000000000000000000026 -:107A60000000000000000000000000000000000016 -:107A70000000000000000000000000000000000006 -:107A8000000000000000000021000000040000854C -:107A90002010080421100020400000000000000019 -:107AA00000000000000000000000000000000000D6 -:107AB00000000000000000000000000000000000C6 -:107AC00000000000000000000000000000000000B6 -:107AD00000000000000000000000000000000000A6 -:107AE0000004000000000000000000000000000092 -:107AF0000000000000000000000000000000000086 -:107B0000000082050040900500210021400008216E -:107B100008100000A000000901080000000000009B -:107B20000020000000000000000000000000000035 -:107B30000000000000000000000000000000000045 -:107B40000000000000000000000000000000000035 -:107B50000000000000000000000000000000000025 -:107B60000000000000000000000000000000000015 -:107B70000000000000000000000000000000000005 -:107B800000000000000000010000000000000002F2 -:107B90000000000100000200210040000000000081 -:107BA00000000001000000000000000000000000D4 -:107BB00000000000000000000000000000000000C5 -:107BC00000000000000000000000000000000000B5 -:107BD00000000000000000000000000000000000A5 -:107BE0000000000000000000000000000000000095 -:107BF0000000000000000000000020000000000065 -:107C000000000000000001C089400020C009000001 -:107C1000010090000000400000000000000400008F -:107C20000000000000000000000000000000000054 -:107C30000000000000000000000000010000000043 -:107C40000000000000000000000000000000000034 -:107C50000000000000000000000000000000000024 -:107C60000000000000000000000000000000000014 -:107C70000000000000000000000000000000000004 -:107C80000000000000000000088011C00000808299 -:107C90000000410000000000000010000000008013 -:107CA00000000000000000000000000000000000D4 -:107CB0000000000000000000000000002010000391 -:107CC00000000000000000000000000000000000B4 -:107CD00000000000000000000000000000000000A4 -:107CE0000000000000000000000000000000000094 -:107CF0000000000000000000000000000000000084 -:107D000000000000000000000000800080410041F1 -:107D10008000000000100000000000000020800033 -:107D20000000000000000000000000000000000053 -:107D30000000000000000000000000000000000043 -:107D40000000000000000000000000000000000033 -:107D50000000000000000000000000000000000023 -:107D60000000000000000000000000000000000013 -:107D70000000000000000000000000000000000003 -:107D800000000000000000000000000040004091E2 -:107D90002001C0020000000100000000900040002F -:107DA000A0080000000000400000002000000000CB -:107DB00000000000000000000000000000000000C3 -:107DC00000000000000000000000000000000000B3 -:107DD00000000000000000000000000000000000A3 -:107DE0000000000000000000000000000000000093 -:107DF0000000000000000000000000000000000083 -:107E00000000000000000000000000000000C110A1 -:107E10000082902001C0000100000000000100214C -:107E200000000001004000000000400000000000D1 -:107E30000000000000000000000000000000000042 -:107E40000000000000000000000000000000000131 -:107E50000000000000000000000000000000000022 -:107E60000000000000000000000000000000000012 -:107E70000000000000000000000000000000000002 -:107E800000000000000000000000000000000000F2 -:107E900090A000C0410041800010002000090010A7 -:107EA00000020000002008000300000000000000A5 -:107EB00000000000000000000000000000000000C2 -:107EC00000000000000000000000000000000000B2 -:107ED00000010000000000000000000000000000A1 -:107EE0000000000000000000000000000000000092 -:107EF0000000000000000000000000000000000082 -:107F00000000000000000000000000000000000071 -:107F10000000801100408088800080000002000086 -:107F200000000000808500008000000000050000C7 -:107F30000000000000000000000000000000000041 -:107F40000000000000000000000000000000000031 -:107F50000000000100000000000000000000000020 -:107F60000000000000000000000000000000000011 -:107F70000000000000000000000000000000000001 -:107F800000000000000000000000000000000000F1 -:107F900000000000C001200084C1080802000001A8 -:107FA00000000000900082029082A000000000000B -:107FB00000000000000000000000000000000000C1 -:107FC00000000000000000000000000000000000B1 -:107FD00000000000000100000000000000000000A0 -:107FE0000000000000000000000000000000000091 -:107FF0000000000000000000000000000000000081 -:108000000000000000000000000000000000000070 -:1080100000000000000000000000070048420000CF -:108020000000070041000000000007000000000001 -:108030000000070000000000000000000000000039 -:10804000000000000000000000E000000000000050 -:108050000000000000000000000000000000000020 -:108060000000000000000000000000000000000010 -:108070000000000000000000000000000000000000 -:1080800000000000000000000000000000000000F0 -:1080900000000000000000000000000000000000E0 -:1080A000FFFFFFFF00000000FFB4FFBDC3C39999AD -:1080B00000000000000000000000000000000000C0 -:1080C00000000000000000000000000000000000B0 -:1080D00000000000000000000000000000000000A0 -:1080E0000000000000000000000000000000000090 -:1080F0000000000000000000000000000000000080 -:10810000000000000000000000000000000000006F -:10811000000000000000000000000000000000005F -:108120000000FFFF000000000000FFB4FF24C3C3F5 -:10813000999900000000000000000000000000000D -:10814000000000000000000000000000000000002F -:10815000000000000000000000000000000000001F -:10816000000000000000000000000000000000000F -:1081700000000000000000000000000000000000FF -:1081800000000000000000000000000000000000EF -:108190000000000000000000000000004308400054 -:1081A00000842186000000000000000000000000A4 +:1075E000000000000000000000003030F3F3401005 +:1075F0008804020000032000400040000002100048 +:1076000008052008210040400003000084004000DD +:107610000283002002A08800210020041000200026 +:1076200020838400020320008400C0404000000347 +:107630002011020000008400000508008810840466 +:1076400041108800C1100204088008030888200344 +:1076500040008800C0001010C00020008810C00842 +:1076600000000200C0002040040040000000401163 +:107670000005004000000004000400000002400972 +:107680000000800200844000000000020090009092 +:1076900000022010100500030002200000408002BC +:1076A0000000001020000004008810C00008000046 +:1076B000000080000000000000000000A000200189 +:1076C00000020883000208018900A11084008010D4 +:1076D0000900210200000000000100C00400004178 +:1076E0000002000080000000000180020000009005 +:1076F0000000400002000000000008000800080030 +:10770000028004008420900004200200020088000F +:1077100040090800400000000900080403040100BB +:10772000A000020002040380020402080202414099 +:10773000900200000200020000080200A040024186 +:1077400009008840080508000800080008800800B3 +:107750000090080000802080888020804080020205 +:10776000820040000000000800024108088008086C +:1077700091100908800000000008200080008208A5 +:1077800085000010800800010000808500000000D6 +:107790000000800091088000030882040201400379 +:1077A00020840004000800850804418580090988B8 +:1077B00084010001000041080500058283000408DF +:1077C00040888804030080048000C004C100801049 +:1077D00084820003C0040004910411048004C010DA +:1077E000400100C0A0004000020000050800C020C9 +:1077F0008000040984000400002100400000000013 +:10780000400000080005000000089000002100086A +:10781000404100050402008500200011000201081B +:1078200091040000010000408800004000000000BA +:1078300000080009004000000000010800890488D9 +:1078400088000000C04100000000000000000000AF +:10785000002100090000000000050021A0054000F3 +:10786000000800008405000000410009020004082F +:1078700000410000004100114000210011000020E3 +:10788000030008000040080003004000100040040E +:1078900005900304009000400820039108000400B4 +:1078A0002000208900202000030003000300008244 +:1078B000000000000400000100000020080000207B +:1078C0008004000000000000080008820090000012 +:1078D00008900800000000000400000000002100E3 +:1078E000000000000000000000400800000005004B +:1078F000000041000000000041008800C041A000DD +:10790000A00083000810100900098205080000206B +:10791000054082099011A01108048209102010402E +:107920000005080082008808000000040004000030 +:107930009002000000C0400008000000008408041D +:107940002000080408200404000082100200100037 +:10795000908800008240C000A080400900100840CC +:10796000C0000002A0050008400002409041001144 +:1079700008090011082000404000080400004100F0 +:107980002000000040820000C10009A000000000AB +:1079900000018200000040000200110041C0090007 +:1079A00008C00004000000080200038200830000F9 +:1079B0000004089005044009114021080000082136 +:1079C0000001A188030000000000024002011040F5 +:1079D0000390411008000008108441400300038513 +:1079E00088082184410000000500800891000004FF +:1079F000000021A000004109089000C000820002A0 +:107A000000008800820800210800080000000041F2 +:107A1000040500000002040590211005000000206C +:107A200082048520C041820940002005000000003A +:107A3000080004080020000004204011001100008C +:107A400008C141C100A00484000000008208C000F9 +:107A5000080008000821A000C00008110208A020AA +:107A60000882840201408803820084000021C00053 +:107A7000C0410800820540000002044108000000E7 +:107A800000204000000011841100098440024040A1 +:107A900005400804020004900002210800001002C2 +:107AA00004014189200500002082C00480000000FC +:107AB00005000000000000000000800000840000BD +:107AC000000005042010090500210000000000004E +:107AD0002100000000000000000020000000000065 +:107AE000000000040000200000000000000000046E +:107AF0000000000000000000800021009000210034 +:107B00001100000820211000004100000000A0002A +:107B100000020111880204080008C0218810000337 +:107B20008400200420000041830801040221104148 +:107B300010040000000000401000820000009021AE +:107B400020C100000041400000040280000000004D +:107B500000804000850340218200100384008200E1 +:107B600008210841840008088400082100408200A0 +:107B700008020041C040822110081000842000202B +:107B8000822000000200000004000000200021A06C +:107B90000900400004C00000800005202000000013 +:107BA00003040000800180000900042120910308E3 +:107BB0000000830100000000000011004090002040 +:107BC0000002002000000010000000019040004072 +:107BD0002100201020020800000040820000000068 +:107BE000000011820000000041020000000020A0FF +:107BF00000822001004000C020080900000000A110 +:107C000000A1004102000001000100010001400547 +:107C100004830221028302C0909000A090820000A1 +:107C2000010020000000A0C0910804A011880000FD +:107C3000A1000200000011A1010491C0C00200C017 +:107C4000408810C0C082000090C0909000A020A08A +:107C500000A000020002000800A0008800A0088820 +:107C60000110882000A00082000400040000080029 +:107C700082000001821000051000000402042010A0 +:107C800000000090000820000040000300400010A9 +:107C9000804100400004008400808000008000805B +:107CA00000004100110009009180858009801100C9 +:107CB0000000050084000000099002800804809103 +:107CC000118091008000800000009180800005807C +:107CD0000000008000000080008000800000008024 +:107CE00000002180008000800080000000804000B3 +:107CF0008000000009080009009009004100800090 +:107D000000800000000000000000000000410000B2 +:107D1000000008008941108920000800020090003E +:107D20008200000000000000000040031000084135 +:107D300020852005030002030321030003039000B4 +:107D400011A0090000C10910C100000000088080D6 +:107D5000004180008000800980A1800000000000B8 +:107D600080000000000005009100030000050041B4 +:107D700080058000038008410080000003000405A6 +:107D8000A0A0A1000000000380008000000000010E +:107D900000100020900010011110C0009000094058 +:107DA000090011400000000000000000A005208232 +:107DB0008410A002008200000101010140A0100116 +:107DC00041A00208A00088038801C18800002001AA +:107DD0000202080082901000400002A1080000008A +:107DE0004000A000880090000000A0004000820039 +:107DF0008801A09008000002010100100000A0000E +:107E000008C040A1C1008200000808000200000074 +:107E1000000001000000C0C000830041A0A09090BD +:107E2000001004C1A0020000000100010001900345 +:107E3000C0112089A11000000401000101010441CA +:107E40000020910488C0C1890082408401C10001E2 +:107E50000420C02090C0A002080000040090101070 +:107E6000C0020000008808001090000000200802F6 +:107E70004010820410C09010C04000002105A010E6 +:107E8000C08500840088A0A10040002000020240BC +:107E900000000800020000008009032011A1828375 +:107EA00083000080802180910011000200201008D2 +:107EB000054080840021C08300208005000203115A +:107EC000030541000591038590110080009141C197 +:107ED0000001880080800000858080000080000014 +:107EE0008000808000000000910080000000000001 +:107EF000908080000000000005008002410521A163 +:107F000000828002009100208302000000000080B7 +:107F10008000000080000000000000A000000000C1 +:107F20008040000000400000000800000000000049 +:107F30000000411184C000114088418040052100AB +:107F400005A10002101191A084058010802080C13D +:107F500000030001001100A0000000000009000063 +:107F60008080800000100080008000008000008081 +:107F7000000000110000800000000000A000802030 +:107F800021008803000000828080000300208080A0 +:107F90008080800088001000100002008802828823 +:107FA0000488A0000088000200900001000000008A +:107FB0000000000001830421029110900182000161 +:107FC00001000090080109A10841A001C00582013B +:107FD00084C0820800010001009100C0000002007E +:107FE000020240400800000090208208900004082F +:107FF0009082880200000200A00490049000050016 +:10800000A0004100030520A0C0091002A00120002B +:1080100004020240040000000000000060000000B4 +:1080200000000000840000000000070000000000C5 +:10803000000000008400000000E007008200000053 +:1080400000E000000000000000E0000000810000EF +:108050000000070048420000000000E00700820026 +:10806000000000000000000000000000000084008C +:108070000000000000000000000000E000006000C0 +:10808000000000000000600000000000000084000C +:108090000000000007000000007E007E00000000DD +:1080A0000103090F0089898900000000FCFCC0C0A1 +:1080B0000000000000000000C140C140C1C0C1C0BC +:1080C00000000000000000009000C3C3E724030389 +:1080D000000000000000000000000000000003811C +:1080E00003BD30070007F0F0FF00F330F3303CFF32 +:1080F0003CFFFF0FF000FF3CC3003C3CBF260F00DD +:108100000F00FF7E81006624420000400040CFC384 +:10811000C7C73F30FFF030FF3000667FE6FF00004A +:10812000000081C399FF00CFCFCF000000007E4246 +:108130007E420000000000000000C140C140010973 +:10814000F1F9000000000000000000000000E7243A +:108150003F3F0000000000000000000000000000A1 +:108160003F813FBD30040004F0F0FF00F330F330F6 +:108170003C003C00FF0FF000FF3CC3003C3CB9203A +:108180003F3F3030EF6E8908662442000C4C0040BF +:108190000C0006063F300F003FFF3F0000000000CC +:1081A00000000000000000000000000000000000CF :1081B00000000000000000000000000000000000BF :1081C00000000000000000000000000000000000AF -:1081D000000000000000000000000000000000009F +:1081D00000000000430840000084218600000000E9 :1081E000000000000000000000000000000000008F :1081F000000000000000000000000000000000007F :10820000000000000000000000000000000000006E :10821000000000000000000000000000000000005E -:108220000000000000000000000000000000C3C3C8 -:10823000C3C3FDF4FDF400000000000000000000D6 -:10824000000000000000000000000000000000002E -:10825000000000000000000000000000000000001E -:10826000000000000000000000000000000000000E -:1082700000000000000000000000000000000000FE -:1082800000000000000000000000000000000000EE -:1082900000000000000000000000000000000000DE -:1082A00000000000000000000000000000000000CE -:1082B000C3C3C3C30D040D04000000000000000090 -:1082C00000000000000000000000000000000000AE -:1082D000000000000000000000000000000000009E -:1082E000000000000000000000000000000000008E -:1082F000000000000000000000000000000000007E -:10830000000000000000000000000000000000006D -:10831000000000000000000000000000000000005D -:1083200000001061200E004D00080061000E000DDD -:1083300000000061000E000D000005000A080500A5 -:1083400000A000000000000000000000000000008D -:10835000000000610003000D0000000000000000AC -:10836000000000000000000000000000000000000D -:1083700000000000000000000000000000000000FD -:1083800000000000000000000000000000000000ED -:1083900000000000000000000000000000000000DD -:1083A00000000000000000003F3F3F3F00000000D1 -:1083B000DF5D000000000000C3FFC3FF00000000FD -:1083C00000000000000000000000000000000000AD -:1083D000000000000000000000000000000000009D -:1083E000000000000000000000000000000000008D +:10822000000000000000C1C1C10000000000663C69 +:108230000FFF0CCF0CCF00000000000000007E42BA +:108240000303FFFCF3F00000000000000000FFD873 +:10825000FFD8F7F7F7F7000000000000000000006B +:1082600042423F03FFC33C00FFFF00009999818118 +:10827000000FFF0F00FF00FFE7E70CCF00FF00FF3C +:108280000000009924240909F0F0F0F0000000003B +:10829000007C007CFF006666F909F909999900FFE6 +:1082A0000000000000000000F9F9F90010000000D3 +:1082B000663C0F002424E7E70000000000000000F7 +:1082C0007E423F3F9F9C9390000000000000000012 +:1082D000FFD8000099FF187E000000000000000099 +:1082E00000007E7E3F03B1B1B1B1FFB100009090BC +:1082F00099003C663C6666660F0F24240CCF424210 +:108300007E7EFFFF66FF00FF00FFB4B4B4B4000040 +:10831000000000400040C3C30F0FF909F909999903 +:10832000C3C300610006000D000000610006000DDF +:10833000000005615A0E050D00A000610006000D49 +:10834000000005615A0F050D00A000610007000D37 +:10835000000000610001009100001061200E004D3E +:108360000008000005615A0F050D00A00000000084 +:1083700000000000000040000000000080610006D6 +:10838000000D000000610007000D000000614006C4 +:10839000000D000000613006000D000500000A001D +:1083A00000000000000000000000000000000000CD +:1083B000410030300000000000FF0000000000001D +:1083C00043434300FFC3AA823C3C43025F0AEBEBFA +:1083D000C31700175C5F5C5F3CFF3CAA0000000015 +:1083E00055FF14BE00000000000000000000000067 :1083F000000000000000000000000000000000007D -:10840000000000000000000000000000000000006C -:10841000000000000000000000000000000000005C -:10842000000000000000000000003030303000008C -:108430000000DF5DDF5D00000000003C003C00004C -:10844000000000000000000000000000000000002C -:10845000000000000000000000000000000000001C -:10846000000000000000000000000000000000000C +:108400000000000000000000000000000000828268 +:10841000C0C00200000000000000D7FF14000000F0 +:10842000000000000000000000000000000000004C +:108430000000410030300000000000FF000000009C +:1084400000005F5F5F003C0028003C3C7F3E5F0A0D +:108450004141FF173C175C505C503C553C0000000C +:10846000000000AA14BE0000000000000000000090 :1084700000000000000000000000000000000000FC :1084800000000000000000000000000000000000EC -:1084900000000000000000000000000000000000DC -:1084A00000000000000000003CFF3CFF0000000056 -:1084B00000000000000000000000000000000000BC -:1084C00000000000000000000000000000000000AC -:1084D0000000000000000000030303030000000090 -:1084E000000000000000000000000000000000008C +:108490008282C0C00000000000000000170F170F0C +:1084A0000000000000000000FF0F5C5C0000000006 +:1084B00055FF3C0FF2A2520200000000FCFCA0AFEE +:1084C000000000000000000000000000C0C0FCFC34 +:1084D00000000000BE30BEF3EFEF2C2CF0F03CAA01 +:1084E000000000003CFFBEBE0000000000000000D5 :1084F000000000000000000000000000000000007C -:10850000000000000000000000000000000000006B -:10851000000000000000000000000000000000005B -:10852000000000000000000000003C003C000000D3 -:10853000000000000000000000000000000000003B -:10854000000000000000000000000000000000002B -:10855000000000000000000000000303030300000F -:10856000000000000000000000000000000000000B +:108500000000000000000000A0A00000000000002B +:108510000000BF1FBF1F7878787800000000F7FFC9 +:10852000F4FC0000000000000000F0005C5C0000B3 +:10853000000055003C0FF7A75707000000000C0C87 +:10854000A0AF00000000000000000000000028EBC9 +:1085500028EB00000000823082F3C7C70404F0F06B +:108560003CAA0000000000C382820000000000005E :1085700000000000000000000000000000000000FB -:1085800000000000000000000000000000000000EB -:1085900000000000000000000000000000000000DB -:1085A00000000000000000000000000000000000CB -:1085B00000000004000000000000000000000000B7 -:1085C0008200000000000080200000000000000089 -:1085D000000000000000000000000000000000009B -:1085E000200000000000000020000000000100004A -:1085F000000000000000000000000000000000007B -:10860000000020000000000000002000000000002A -:1086100000000000000084000000040000000000D2 -:10862000000020000000000000002000000000000A -:108630000000000000000000000200000000000038 -:1086400000000000008200000002000000000000A6 -:10865000000000000000000000000000000000001A -:10866000000000000000000000000000000000000A -:1086700000000000000000000000000000000000FA -:1086800000000000000000000002000000000000E8 -:1086900000000000000000000000000000000000DA -:1086A00000000000000000000000000000000000CA -:1086B0000000000000000000880000000200000030 -:1086C000000000000000000000000000000000802A -:1086D000000000000000000000000000000000009A -:1086E000000000000000000000000000000000008A -:1086F000000000000000000000000000000000007A -:108700000000000000000000000000000000000069 -:108710000000000000000000000000000000000059 -:108720000000000000000000000000000000000049 -:10873000000000A0008200102002000400000000E1 -:1087400000000000000000000088000000000000A1 -:108750000002000000000000000000000000000017 -:108760000008000000000000000000000000000001 -:1087700000000000000000000000000000000000F9 -:1087800000000004000000000000000000000000E5 -:1087900000000000000000000000000000000000D9 -:1087A00000000000000000000000000000000000C9 -:1087B0000000000000400000004000020003000034 -:1087C00000000008000000000000000000000000A1 -:1087D0000000000000000000000000000000000099 -:1087E0000000000000000000000000000000000089 -:1087F0000000000000000000000000000000000079 -:108800000000000000000000000000000000000068 -:1088100000000000900000000000000000000000C8 -:108820000000000000000000000000000000000048 -:1088300000000000000000000300000000004100F4 -:1088400021000000000000000000000008200004DB -:108850000000000000000000000000000000000018 -:108860000000030000000000000000000000000005 -:1088700000000000000000000000000000000000F8 -:1088800000000000000000000000000000000000E8 -:1088900000000000000000000000000000000000D8 -:1088A00000000000000000000000000000000000C8 -:1088B0000000000000000000000000008200000036 -:1088C000000000008811820040000000000200004B -:1088D0000004000482020004000000000000000008 -:1088E0000000000000000000000000000000000088 -:1088F0000000000000000000000000000000000078 -:108900000000000000000000000000000000000067 -:108910000000000000000000000000000000000057 -:108920000000000000000000000000000000000047 -:108930000000000000000000000000000000000037 -:108940000000400008000000030000000000008854 -:108950000000000100010000000100000000000014 -:108960000000400040000000000000000000000087 -:1089700000000000000000000000000000000000F7 -:1089800000000000400005000000000000000000A2 -:1089900000000000000000000000000000000000D7 -:1089A0000000000040000000000000000000000087 -:1089B00000000000000000000000000000000800AF -:1089C00000000000000000000000000000000000A7 -:1089D000080000110000000000040000000000007A -:1089E0000000000000000000000000000000000087 -:1089F0000000000000000000000000000000000077 -:108A00000000000000000000000000000000000066 -:108A10000000000000000000000000000000000056 -:108A20000000000000000000000000000000000046 -:108A30000000000000000000000000000000110025 -:108A400004020088108803000800080021020800C2 -:108A500008000300090000040000000100000000FD -:108A60000000000000000000000000000000000006 -:108A700020000000000000000000000000000000D6 -:108A800000000000000000000000000000000000E6 -:108A900000000000000000000000000000000000D6 -:108AA00000000000000000000000000000000000C6 -:108AB00000000000000000000000000000000000B6 -:108AC0000002840000000800000000000000000018 -:108AD0000000900000000000000000000080008006 -:108AE0000000000000000000000000000000000086 -:108AF0000000000000000000000000000000000076 -:108B00000000000000000000000000000000000065 -:108B10000000000000000000000000000000000055 -:108B20000000000000000000000000000000000045 -:108B30000000000000000000000000000000000035 -:108B4000000000000000000000000000000008001D -:108B500000001100000020000004000000000004DC -:108B60000002000000000000000000000000000003 -:108B700000000000000008000000000000000800E5 -:108B800000000000000000000000000000000000E5 -:108B900000000000000000000800000000000000CD -:108BA00008000000000000000000000000000000BD -:108BB000000000000000110008000000000000009C -:108BC000080000000000000000000000000000009D -:108BD0000000000000000000000000000000000095 -:108BE0000000000000000000000000000000000085 -:108BF0000000000000000000000000000000000075 -:108C00000000000000000000000000000000000064 -:108C10000000000000000000000000000000000054 -:108C20000000000000000000000000000000000044 -:108C30000000000000000000000000000000000034 -:108C40000000000000000000000000000000000024 -:108C50000000000000000000000000000000000014 -:108C600000004000000000000000000000000000C4 -:108C700000000000000000000000000000000000F4 -:108C800000000000000000000000000000000000E4 -:108C900000000000000000000000000000000000D4 -:108CA00000000000000000000000000000000000C4 -:108CB00000000000000000000000000000000000B4 -:108CC00000000000000000000000000000000000A4 -:108CD0000000000000000000000000000000000094 -:108CE00011104100081010210000000000000000D9 -:108CF0000000000000000000000000000000000074 -:108D00000000000000000000000000000000000063 -:108D10000000000000000000000000000000000053 -:108D20000000000000000000000000000000000043 -:108D30000000000000000000000000000000000033 -:108D40000000000000000000000000000000000023 -:108D50000000000000000000000000000000000013 -:108D6000000000830000000101010000000000007D -:108D700000000000000000000000000000000000F3 -:108D800000000000000000000000000000000000E3 -:108D900000000000000000000000000000000000D3 -:108DA00000000000000000000000000000000000C3 -:108DB00000000000000000000000000000000000B3 -:108DC00000000000000000000000000000000000A3 -:108DD0000000000000000000000000000000000093 -:108DE000000000000000900182010100000000006E -:108DF0000000000000000000000000000000000073 -:108E00000000000000000000000000000000000062 -:108E10000000000000000000000000000000000052 -:108E20000000000000000000000000000000000042 -:108E30000000000000000000000000000000000032 -:108E40000000000000000000000000000000000022 -:108E50000000000000000000000000000000000012 -:108E600000000000000000200008002108000000B1 -:108E700000000000000000000000000000000000F2 -:108E800000000000000000000000000000000000E2 -:108E900000000000000000000000000000000000D2 -:108EA00000000000000000000000000000000000C2 -:108EB00000000000000000000000000000000000B2 -:108EC00000000000000000000000000000000000A2 -:108ED0000000000000000000000000000000000092 -:108EE000000000000000000003800500400020405A -:108EF0000000000000000000000000000000000072 -:108F00000000000000000000000000000000000061 -:108F10000000000000000000000000000000000051 -:108F20000000000000000000000000000000000041 -:108F30000000000000000000000000000000000031 -:108F40000000000000000000000000000000000021 -:108F50000000000000000000000000000000000011 -:108F600000000000000000000000004000000000C1 -:108F700000000000000000000000000000000000F1 -:108F800000000000000000000000000000000000E1 -:108F900000000000000000000000000000000000D1 -:108FA00000000000000000000000000000000000C1 -:108FB00000000000000000000000000000000000B1 -:108FC00000000000000000000000000000000000A1 -:108FD0000000000000000000000000000000000091 -:108FE000000000000000000000000000000000E0A1 -:108FF0000000000000000000000000000000000071 -:109000000000000000000000000000000000000060 -:109010000000000000000000000000000000000050 -:109020000000000000000000000000000000000040 -:109030000000000000000000000000000000000030 -:109040000000000000000000000000000000000020 -:109050000000000000000000000000000000000010 -:109060000000000000000000000000000000000000 -:1090700000000000000000000000000000000000F0 -:1090800000000000000000000000000000000000E0 -:1090900000000000000000000000000000000000D0 -:1090A00000000000000000000000000000000000C0 -:1090B00000000000000000000000000000000000B0 -:1090C00000000000000000000000000000000000A0 -:1090D0000000000000000000000000000000000090 -:1090E0000000000000000000000000000000000080 -:1090F0000000000000000000000000000000000070 -:10910000000000000000000000000000000000005F -:10911000000000000000000000000000000000004F -:10912000000000000000000000000000000000003F -:10913000000000000000000000000000000000002F -:10914000000000000000000000000000000000001F -:10915000000000000000000000000000000000000F -:1091600000000000000000000000000000000000FF -:1091700000000000000000000000000000000000EF -:1091800000000000000000000000000000000000DF -:1091900000000000000000000000000000000000CF -:1091A00000000000000000000000000000000000BF -:1091B00000000000000000000000000000000000AF -:1091C000000000000000000000000000000000009F -:1091D000000000000000000000000000000000008F -:1091E000000000000000000000000000000000007F -:1091F000000000000000000000000000000000006F -:10920000000000000000000000000000000000005E -:10921000000000000000000000000000000000004E -:10922000000000000000000000000000000000003E -:10923000000000000000000000000000000000002E -:10924000000000000000000000000000000000001E -:10925000000000000000000000000000000000000E -:1092600000000000000000000000000000000000FE -:1092700000000000000000610007000D0000000079 -:1092800000000000000000000000000000000000DE -:1092900000000000000000000000000000000000CE -:1092A00000000000000000000000000000000000BE -:1092B00000000000000000000000000000000000AE -:1092C000000000000000000000000000000000009E -:1092D000000000000000000000000000000000008E -:1092E000000000000000000000000000000000007E -:1092F00000000000000000001C14BCB40CCF0CCF18 -:10930000000000000000000000000000000000005D -:10931000000000000000000000000000000000004D -:10932000000000000000000000000000000000003D -:10933000000000000000000000000000000000002D -:10934000000000000000000000000000000000001D -:10935000000000000000000000000000000000000D -:1093600000000000000000000000000000000000FD -:10937000000000000000000000001C1EBCBE0CCF5E -:109380000CCF000000000000000000000000000002 -:1093900000000000000000000000000000000000CD -:1093A00000000000000000000000000000000000BD -:1093B00000000000000000000000000000000000AD -:1093C000000000000000000000000000000000009D -:1093D000000000000000000000000000000000008D -:1093E000000000000000000000000000000000007D -:1093F000000000000000000000000000000000006D -:10940000EB41EB4100000000000000000000000004 -:10941000000000000000000000000000000000004C -:10942000000000000000000000000000000000003C -:10943000000000000000000000000000000000002C -:10944000000000000000000000000000000000001C -:10945000000000000000000000000000000000000C -:1094600000000000000000000000000000000000FC -:1094700000000000000000000000000000000000EC -:1094800000005F5F0A0A000000000000000000000A -:1094900000000000000000000000000000000000CC -:1094A00000000000000000000000000000000000BC -:1094B00000000000000000000000000000000000AC -:1094C000000000000000000000000000000000009C -:1094D000000000000000000000000000000000008C -:1094E000000000000000000000000200200004084E -:1094F0008800200000000000C00082002000000062 -:109500000000880000000004000082000004200029 -:10951000200000000000000000000000200000000B -:1095200000002000000000040003000020000000F4 -:1095300020040000000000000000000000002000E7 -:10954000000000000000000000800000200000007B -:1095500000000000000000000000000000002000EB -:10956000000000000000000000800000000000007B -:1095700000000000000000000000000000000000EB -:1095800000000000000000000001000000000000DA -:1095900000000000000000000000000000000000CB -:1095A00000000000000000040003000000000000B4 -:1095B00000000000000000000000000000020000A9 -:1095C0000000000000000000000000040000000295 -:1095D000000000000000000000000000000000008B -:1095E0000000000000000000000000040000000077 -:1095F00000002020000000000000000000000041EA -:109600000000000200000000000000000000200038 -:10961000000000000000000000000000000000004A -:10962000000000000000000000000000000000003A -:10963000000000000000000000000000000000002A -:10964000000000000000000000000000000000001A -:1096500000000000000088000000000000008400FE -:1096600000000000000000000000000000000000FA -:1096700000000000000000000082008800000000E0 -:1096800000000000000000000000000000000008D2 -:1096900000000000000400000000000000000000C6 -:1096A00000000000000000000000000000040000B6 -:1096B00000020002000000000000000000000000A6 -:1096C000000000000000000000000000000000009A -:1096D000000000000000000000000000000000008A -:1096E000000000000000000000000000000000007A -:1096F0000000000000000000080000000002000060 -:109700000000000004000000040000000000002031 -:109710000000000800000000000000000000000041 -:109720000000000000000000000000000000000039 -:109730000000000000000000000000000000000029 -:109740000000000000000000000000000000000019 -:109750000000C00000000000000000000000000049 -:1097600000000000000000000000000000000000F9 -:109770000000000000000000000000000084000065 -:1097800000A00300000000000090050000000000A1 -:1097900000080000000000000000000000000000C1 -:1097A0000000000000000000000000200000000099 -:1097B00000000000000003000000000000000000A6 -:1097C0000000000000000000000000000000000099 -:1097D0000000000000000000000000000000000089 -:1097E0000000000000000000000000000000000079 -:1097F000000000000400A0000000C0100000C00035 -:109800000000000088000000000090000000000040 -:109810000000000082002000080082000000080014 -:1098200000000000820008000000820000008200AA -:109830000000000000008200080000008200080014 -:109840008200000000008200000000008200820010 -:1098500082000000000082000800000082008200F8 -:1098600082000000000082090009C000820082001E -:109870008200000000000000000000000000000066 -:109880000000000000000300000200000000009043 -:1098900000000000000000000000000000000000C8 -:1098A00000000000000008000000000000000000B0 -:1098B00008000000000000000000000000000000A0 -:1098C0000000000000000000000000000000000098 -:1098D0000000080000000000000000000000000080 -:1098E0000000000000000000000000000000000078 -:1098F0000000000000000000000000000800000060 -:10990000000008000000A0000000000000000000AF -:109910000000000000000000000000000000000047 -:10992000080008000000A000000000000000000087 -:109930000000000000000000000000000000000027 -:109940000000080082000000A000000000000000ED -:109950000000000004000000000000000000000003 -:109960000000820082000000A00000000000000053 -:1099700000000000000000000000000800000000DF -:10998000000800000000000000000000000040008F -:10999000000009880900110409000000000000000F -:1099A00000000000000000000000000000000000B7 -:1099B00000000000000000000000000000000000A7 -:1099C0000000000000000000000000000000000097 -:1099D0000000000000000000000000040000000083 -:1099E0000000000000000000000000000000000077 -:1099F0000000000000000000000000000000000067 -:109A0000000004000000C000000008000000002169 -:109A10000800000000000005000000000000000435 -:109A2000000008000000000000000000000000002E -:109A30000800000000000009000000000000000015 -:109A4000000000000800000000000000000000000E -:109A500000000800000000000009000000000000F5 -:109A600000000000080000000000000000000000EE -:109A700000000800000000000009000000000000D5 -:109A8000000000000000000000880000000000004E -:109A90000000000421020000000000000900000096 -:109AA00000000000000000000000000000000000B6 -:109AB00000000000000000000000000000000000A6 -:109AC0000000000000000000000000000000000096 -:109AD0000000000000000000000000000000000086 -:109AE0000000000000000000000000000000000076 -:109AF0000000000000000000000000002100000045 -:109B00000000000000000000010000000000000054 -:109B10000001000000C00000000000000000000084 -:109B20000000000000000000010000000000000034 -:109B30000000000000C00000000000000000000065 -:109B40000000000000000000000001000000000014 -:109B500000000000000000C0000000000000000045 -:109B600000000000000000000000010000000000F4 -:109B700000000000000000C0000000000000000025 -:109B80000000000000000000000041000000000094 -:109B90000000004005000080000000000000000000 -:109BA0000000000000000000000041000000000074 -:109BB00000000040410000800000000000000000A4 -:109BC0000000000000000000000000004100000054 -:109BD00000000000004020000080000000000000A5 -:109BE0000000000000000000000000004100000034 -:109BF0000000000000402000008000000000000085 -:109C00000000000000000300000000800000800051 -:109C10000000000082000900000000008000000039 -:109C200000050041000003000000008000008000EB -:109C30000000000082004080004000008000000022 -:109C4000000500410000000003000000008000004B -:109C500080000000000082004080000000008000C2 -:109C6000000000050041000003000000008000002B -:109C700080000000000082004080000000008000A2 -:109C800000000005004100000100000000C00000CD -:109C9000200000000000030084400090A00040006D -:109CA00000000000000100000100000000C00000F2 -:109CB00020000000000003008208009040004000E7 -:109CC000000000000001000000000100000000C0D2 -:109CD0000000200000000000030082080090400007 -:109CE000400000000000000100000100000000C072 -:109CF00000002000000000000300840800904000E5 -:109D0000400000000000000100000000C000000052 -:109D10000000000000000000002000000000000023 -:109D2000000000000000000000000000C000000073 -:109D30000000000000000000002000000000000003 -:109D40000000000000000000000000000000C00053 -:109D500000000000000000000000002000000000E3 -:109D60000000000000000000000000000000C00033 -:109D70000000000000000000000000A00000000043 -:109D80000000000000000000000000000000800053 -:109D900000000000000000000000000000000000C3 -:109DA0000000000000000000000000000000800033 -:109DB00000000000000000000000000000000000A3 -:109DC0000000000000000000000000000000000093 -:109DD0008000000000000000000000000000000003 -:109DE0000000000000000000000000000000000073 -:109DF00080000000000000000000000000000000E3 -:109E000000000000000000000000000000008000D2 -:109E100000C1000000000000000000000000800001 -:109E20000040000000000000000000000000800072 -:109E300000C10000000000000000000000008000E1 -:109E4000000300000000000000000000000000000F -:109E5000800000C1000000000000000000000000C1 -:109E6000800000030000000000000000000000006F -:109E7000800000C1000000000000000000000000A1 -:109E8000800000030000000000000000000000004F -:109E9000400000C10000000000000000000000A021 -:109EA00002000000000000000000000000000000B0 -:109EB000400000C10000000000000000000000A001 -:109EC0000200000000000000000000000000000090 -:109ED0000000400000C10000000000000000000081 -:109EE00000A00200000000000000000000000000D0 -:109EF0000000400000C10000000000000000000061 -:109F000000A00200000000000000000000000000AF -:109F100000000000000000420000000000004800B7 -:109F2000410000E0000000000000000000000042CE -:109F30000000000000000042000000000000480097 -:109F4000410000E0000000000000000000000042AE -:109F500000000000000000000042000000000000BF -:109F60004800410000E00000000000000000000088 -:109F7000004200000000000000420000000000005D -:109F80004800410000E00000000000000000000068 -:109F9000004200000000000000000000000000007F +:10858000000000000000000000A000A000000000AB +:1085900000000000B010B01078787878000000007B +:1085A000070304000000000000000000100000832A +:1085B0004004200040008540880520888203400058 +:1085C0008802204182000002000220842000000076 +:1085D00000412004884040002004200440804002E4 +:1085E0008400202120008200880000000003880011 +:1085F0008802000020002005040002052005040078 +:108600000005200084004000C005C003C004200411 +:10861000880410002004880084000000200021400D +:10862000000401002140200020002004020000047A +:108630004004009000C0808240030002112021020B +:10864000008220820502000000910001000200006B +:108650000002058400010403008404C004840402B1 +:10866000C0840000408200004000040005000000BB +:1086700000000091000000C0000020000004000085 +:1086800000000002040000828900000020020000B7 +:108690000985210140000003000000004100009016 +:1086A00020030001200002010000000009008000FA +:1086B00004000100028220000280401008000384B0 +:1086C00020411000020000000009200000411000BD +:1086D000000209004021000088100280080305C044 +:1086E0004005400400834008408083C08200880029 +:1086F0000000020885400200104000000040020314 +:1087000002408804020002800040028202042083AA +:108710000010008001080084024002804100000037 +:10872000030511410109218201020280A00010000D +:108730004011020040088005808800028085800882 +:1087400040050010000005080008008440080010E3 +:1087500080840001C008850000080091840280C068 +:108760002041800080884108851180044005000078 +:1087700004080000850040C1890089050008000147 +:108780008008850104898000C14000018541C10144 +:1087900009400982090402844041C001A00282000C +:1087A0004110C0000284020002412001834002887F +:1087B0000010A00090009100C000200882088409E9 +:1087C00010400102040090009003102188089021BD +:1087D000040920000000880284020482001184A1A0 +:1087E0004021400884021000004000030220C00322 +:1087F00000030003000000218208104040210040D7 +:1088000000210040040200400041000000028821D5 +:10881000900800210021004090402003000000400B +:108820000040004000400008022140000000000518 +:1088300008050002A005008440000200110009A004 +:1088400000A000080240080000A002A005000000EF +:108850000800050040080504008800010009088898 +:10886000081000A003A1080100001000002021044E +:108870000090000041900000000000000001000096 +:1088800003010000038503010801000003000085C7 +:10889000088203001000009009010889C1000388C4 +:1088A00000090821210903030400C10880002140B8 +:1088B0000000000005000000841000020805000808 +:1088C000000200001008000800400011A000C002D3 +:1088D000C0000802084140418421A00200090008AC +:1088E0001020C00420110203C005820302050421E8 +:1088F00082000411C02008200000C0400200840251 +:108900000280A005100008400400080308000400CD +:1089100004111141008441080484C0100400824005 +:1089200084000041401109000205C0800005088450 +:108930001000A021080504800804000103000300C2 +:1089400021012111210888000311400002002104A7 +:10895000028420820089000011000090410002047E +:1089600000A100080000040820C000C008000000AA +:1089700020C0000021000085020900000982890052 +:108980001108800200000900118802000000110097 +:10899000000008001000000510C0000510001000C5 +:1089A00040091000090010000200200021021110EF +:1089B0000004041002000090044010400000400039 +:1089C00090001000044002000000018090000800A8 +:1089D00000008800000000828200C0000003024105 +:1089E0000805001100008200408020214000200086 +:1089F00008080400010803A00121008000000020F5 +:108A000004040020830082000221200302110010D0 +:108A10000241A00804052000204000002183C0007E +:108A20000880C04100050800C003A0111000C00369 +:108A300020050808C003C00000030008004000042F +:108A4000A004042080880400840400040208400478 +:108A5000099008041100400400024100100000A029 +:108A6000050040902084000000A0800280001008D3 +:108A700003000000218820C0A0102010090400007D +:108A80002100110011001090000083000000A000E0 +:108A90000008910000840084000088010008A00400 +:108AA00000000804030000000020002008A00500CA +:108AB0000000800000A0002011000000000000095C +:108AC00010000820400000000002030041080000E0 +:108AD000201100210009000020000400040000040F +:108AE00000030000A105824100050000900490A150 +:108AF000821002214041000004A1830000080421EB +:108B0000000008A1100000C10205A00000004041C3 +:108B100000050021040000088405000840210088A9 +:108B20008384C021000082000400C000C000400314 +:108B3000A0088220000500214008A1040041400057 +:108B4000C01090C011080004008803054004080507 +:108B5000110400202100200004880040000400408F +:108B6000092000840200400020400040029000C024 +:108B70000008000003001104000009200440000068 +:108B80002000000002400000000221000900000453 +:108B9000000021000000000040004000080000002C +:108BA00000400241000000000000000041200000E1 +:108BB0000000110211C0008800408804400000003D +:108BC00000880910000000000000000000C100A1A2 +:108BD00091A090890000000000000000000001004A +:108BE0000000000100A005830003008982C0010885 +:108BF0008484020000014101020000000000910194 +:108C000084000001000040820190001008084082AA +:108C10000402024082081040059002100882408938 +:108C200004100882828802020088C00388040304BA +:108C3000C0094004100902024009008402034005F3 +:108C4000000304C01002100000001100000000C169 +:108C500003A00289808900000000000000000005D8 +:108C60000302000900080089830240020089008095 +:108C70002180800000001141C10300200002000992 +:108C8000882104080021000080002100000080806D +:108C9000840084000080808000892100850280801B +:108CA0008041082000C08000838000200890009050 +:108CB000028321A100058002C08503A1004000833A +:108CC00085842190004100C010002121092141909C +:108CD000838508008820A00000000000000000003C +:108CE000908021008000A082100004000800008312 +:108CF0000800100420801010098021000911108044 +:108D0000C02084804003891000000080008540025C +:108D100011888000004180028000030020030820A9 +:108D200091020400052020104108C00090214080DD +:108D30009003000080030000808885822121830049 +:108D4000C0820000000200408000012001000020DD +:108D50000189084001000500C0000000000000007B +:108D60000000080205000800088801000100010059 +:108D700000890100010089A08409000200000000B0 +:108D800000A002900502020108A00000C01010100F +:108D9000024082C1400090A002100810880288841E +:108DA000090482A091829005048883110208058835 +:108DB00010020984908402A00210108302C005A052 +:108DC00041020811000000040004C000000000007F +:108DD0000000010040010010C001900300000000ED +:108DE000000000000000000100000101020000017D +:108DF0000001030040A000838284112100000000D4 +:108E00000001000001012000C1010100000011105B +:108E100002821021108821A0004084828908020269 +:108E20000004040309C020209041048591C1C0A022 +:108E300001038808108202020020091084094140C1 +:108E4000058505820411110400024002828300009E +:108E500000000000410000200908082140910000A6 +:108E60000000000000000000110302211021820513 +:108E700000020008820080080082004009110003FF +:108E80000310052111090408A01108210511000093 +:108E900010000008002189000809001180C14091DC +:108EA00091C0004000A189408983800300A19110F6 +:108EB0008820038340C00320918820A1C00800843B +:108EC0000410400205854002C1A0200391918090CA +:108ED000C1000800400000024188212021004020FC +:108EE000000000000000000041800200110011217C +:108EF00041009000210000114100408005800500E4 +:108F00004121102111000341101110C00511410031 +:108F1000000041008805A1800303800200100000CA +:108F2000800089A00982030084038380118503895E +:108F300085050000408088808303890500008580C6 +:108F400080008080C089000088008040000480008C +:108F50000000C10483000200000001C0000101A064 +:108F60000000000000000000000001A0000200025C +:108F700000001100020001000001030090A0880819 +:108F80009000010301000000010100010003001135 +:108F900000000000111082A0118408011000901040 +:108FA0000840040004C190208588090020C0059075 +:108FB000218591001000820208081000040020881A +:108FC000100210000802040888C08200040010008B +:108FD00002201000000000E000000041840000E0DA +:108FE000070060000000000000000000000000001A +:108FF00000000000500000E000000000000000E061 +:10900000000000000000000000008411000000E0EB +:109010000700000000000000000000000012000037 +:10902000000000000000000000E0000084000000DC +:1090300000E000006000000000E0000042000000CE +:10904000000000000000000000E0000060000000E0 +:10905000000000004200AAFFF0FF00000000000036 +:109060000000F0F000000000000000000000000020 +:1090700000000000000000FF000000000000FFFFF3 +:1090800004000028AA2800000000000000000000E2 +:109090000000000000000000C35566F0E8E82B2B3C +:1090A000D22DEEEE0F66C3AA6A6AA9A9B2B2717197 +:1090B000595903FC8E7E717EF0A5A5F01BB141EBE2 +:1090C000AA55F0F078BB77B4963C693CC5F9063AEE +:1090D00033C3A5AA17422B7EAA00F00000000000AF +:1090E00000000000FFFF0000000000000000000082 +:1090F000000000000000000000FF00000000000071 +:10910000FFFFC7C3A0A0A0A0000000000000000057 +:10911000000000000000000000003CAA66F018E714 +:10912000DB2478874444F0663CAA30CFF30CB24D80 +:109130008E719A9AC03FB2424D423C9669C314BEAA +:109140004EE49696CC33884B87445AF05A0F90AC35 +:10915000536F3CCCAAA5E842D47E0000000000007A +:109160000000020200003C3C3C0000000000000047 +:10917000000000000000FFFF82820000E0EB000022 +:109180000000A0A0FF5FFFAA550000000000000043 +:10919000000000000000FF00CC33000095955656FB +:1091A0006F606F6035609FCAB41EB4E13C96963C18 +:1091B000BE7D82418D8D2727F5A05F0A3FCFA9593B +:1091C0005C9FF635FF0069695FAFA050FF00CC33AC +:1091D00055F096CC9556C0FC0000FFFF0000000043 +:1091E000000000000202000F00003C000000000030 +:1091F00000000000000000002AAA0200E0EBE0EB03 +:1092000000000000A0A0A00000000000000000007E +:1092100000000000000000005A5A69690000C03FC9 +:10922000FC03ACA3535CF6A35C09B41E4B1EF0A573 +:109230005A0FE427D81B41BEEB1436636336C030A7 +:10924000A95960A3CA09A55A3333636C636C696971 +:109250005A5A9633550F95563F03FFFFFFFFA06103 +:109260000005000D00000061500FC00D0008000057 +:1092700000000000000000610006000D0000006119 +:109280000007C00D000000615006001900010061D8 +:109290000006000D000005610A0F050D10A2000078 +:1092A00040618006002D100240618006002D1002F2 +:1092B00040618003002D10024061800400291002EB +:1092C000406180010021100240618006002D1002E3 +:1092D000406180060021100240618006002D0200DE +:1092E000AA000A0A000000008282030000000005B4 +:1092F000000000000000000000000000000F000F50 +:109300000FFF0F00CF00CF000C0C000020002F0F2C +:109310000082000200000000FF33CC00B0B3BFBFEA +:1093200000004141CD6E000F000F00000000000062 +:109330000000000000000100000000000000C0FC70 +:10934000C0FCFC55FC553CAF3CA0FFFFAFAF383B29 +:10935000F8FBC355C3550CFC0CFC00000000F03CAE +:10936000F03CAA00000A00000000828203000020F6 +:1093700000200000000000000000FF001700FF0FA9 +:10938000000F0000FF00CFCFCFCF0C0C000C00006F +:109390000F0F0082000200000400FF55AA00000029 +:1093A0000000000041414C190000000000000000D6 +:1093B0000100000000000080000000000808FF001D +:1093C000C0FCE8FCC055C0553CAF3CA0505000006C +:1093D000080BC8CBC3C3C3C30C0C000000000000C3 +:1093E000AA00AAFF000000003030AAAA5500000021 +:1093F0000000000000000000000000003CBE3CBE79 +:109400005555FFFFC0C3F0FF010001000000000040 +:10941000FFF3000000000000FFFFFFFFBEBEBEBE66 +:10942000C30F0F0F00000000000000FFFF0000004E +:10943000000000000000FFFF0F0FFFFFFFFF00F024 +:10944000F0003C140000B4B4B4B40078FF78555573 +:109450005555000000001C1CBE14C0FCC0FC5C5C28 +:109460005C5C00000000000000003030AA8A55005B +:109470000002500040000000000000000000003E1C +:1094800000341010BABAC0C3F0FF010001000000A0 +:109490000000FFF3000005050105FEFFFFFF55502A +:1094A000FFFAC30F0F0F000000000000AAAAAAAA2B +:1094B0000000000000000000FFFF0F0FFEFFFFFF95 +:1094C00000F0F0003C1400C0FF00FF000078FF78BF +:1094D0003535FF0000000000BCBCBE14FCFCC0C061 +:1094E000FF0FF0000000000000C08809890220087A +:1094F000880200020500010040088582210804104E +:109500002040200000042104884020212000880001 +:1095100020000000880000020400200020048404D1 +:109520002000200000082002000300102000200579 +:10953000840420000000840000002000A000C0007F +:109540000000020020001085858800020000200431 +:1095500004032000C01088000209840084008805EC +:10956000100088002000C08020820003000808004E +:109570000003210411040490040410012041402040 +:109580000091000300022000400800000008009045 +:1095900009C00002000000004100000000000000BF +:1095A000090000000500004100090000200005003E +:1095B0000200040000000400000009004000000058 +:1095C000000000020400040000081002090000006E +:1095D00041022000210004000008040000000000F7 +:1095E0002100000200000400000800050000001037 +:1095F00000800089000000809000900000008840FA +:109600000041020084000000000000000000001083 +:10961000000000000210000084100010000088000C +:109620000000022100000000000000800000000097 +:10963000000004000000004000000820000320009B +:109640000400200000002000001000002080000026 +:109650002000000000000000080008094000000091 +:1096600082000400840000100000001020000000B0 +:10967000000000080010000800400000000000008A +:109680000008000000000000040004000088000042 +:1096900000840000000000080000000800900300A3 +:1096A0000002001004000488040004080008000000 +:1096B00000080508000800A00084040000820008DB +:1096C000000040400008098800004108000802042A +:1096D00000C041104010000805884000080000103C +:1096E0000000040005880084400204C000840008D3 +:1096F00085800500048400000280108420804000E2 +:10970000218040001080A080C0801180108009005E +:1097100004410000A008A002C0004002C0000008F0 +:10972000000084408800000200210010200500C1D4 +:109730000000202188058841002100080000000564 +:109740000005000500000003822108082000002118 +:10975000002190000000000540050000000000030B +:10976000044100001004001000000000880388007D +:10977000102120100804A1411104910880038008E1 +:10978000840082100040C0040902041088042104EF +:109790009002000021A0008802000482001008A0AE +:1097A000000009000900000800080020008441C0F2 +:1097B0000004000204820040008400000088204071 +:1097C00008100900000008C0038408880900092067 +:1097D000000009020004412003A00890000400A03A +:1097E00000020040080008A00882050800A005004B +:1097F0000300801004002010000000100011202041 +:109800000008020908110200040408000000000416 +:109810008400104000000200000008100000A0407A +:1098200000008200A009A00900000000A000820042 +:1098300000408200000182008204A00008110000A4 +:10984000820088090004820040410841040020058C +:1098500082000409841182028200C002A000021169 +:10986000001108000000C000A000C011C0410804A1 +:1098700020020000C0091100000021000000008843 +:1098800021891100800000880000800000002182F2 +:1098900000104000090000080388050000C0000017 +:1098A00040000000000008040300002000000088C1 +:1098B0000090410000A0000010040000000000041F +:1098C00040004000000021002100020010000002C2 +:1098D00021904000000010880000410000000300BB +:1098E00000004000000011000000002010200002D5 +:1098F0000090050010000010008000800802A00009 +:10990000000000000000010401050441A100000066 +:1099100010000085040004030000C0000041C008DE +:10992000A021020000000000000000080002084121 +:109930000000000000000005000000000000000022 +:109940000000000010000000004000000041000086 +:10995000100000000011A0000805840000050005AB +:1099600010001000A00000008200A0000010000005 +:109970000000100000210000840500080020029172 +:10998000110200900904098820004000842002048C +:1099900000208008004085008302058400004120EB +:1099A000401040000920088802A000882000000024 +:1099B000400000000488090420880000400200885C +:1099C0000088029003884004000011000800402035 +:1099D000008802C00284009041041104110811A003 +:1099E0000502021000000000040809200020000009 +:1099F0000000004002000000080000000800020211 +:109A0000100002008800A08020000808400000111B +:109A10001002200000024021100820219011200394 +:109A200090040002901188000000880008000021C6 +:109A3000000020000010820810210010000000002B +:109A400000119021900802000002000300000400B1 +:109A50000040040400080404820800410403A040FC +:109A6000100000200008820082419009C0044000DC +:109A7000000000000000040000040005041100C004 +:109A8000009109000000000000100000911000008B +:109A90000000110000020010800080008000200201 +:109AA0000908000400040000000000000000008815 +:109AB0000000400000000000000400001100000051 +:109AC0000000000000000000000000000082000014 +:109AD0004120000000004000000000000084110050 +:109AE0000500000004002000200000000000050028 +:109AF000200004902020210440020000000000C04B +:109B0000010008000000082100000000000304100C +:109B10008801A000008210020000C00001828400C1 +:109B200000000000000000000000020000010088AA +:109B300000000000000802C000000000000100005A +:109B40000000000000000000000100008400000090 +:109B5000000400000000008408080000000000016C +:109B60000000000000000000000000008400000071 +:109B70000082000100000008A0C0000000000001F9 +:109B8000000041080521000009410041000940C0D2 +:109B90008080002004090080800000040003048904 +:109BA0000000000000000000000200000000004073 +:109BB0000400094111000080800000000000004105 +:109BC0000000000000000000000000040000000091 +:109BD00000050280004111000000808000000000AC +:109BE00000410000000000000000004000000000F4 +:109BF000000304000040110000800000000000008D +:109C0000004100001000402000800000054041415C +:109C100000C0000484048011004109008900034150 +:109C200000C1004000000400000000000000090026 +:109C30000000030085008580004105000000000051 +:109C4000000080400000000005000000000000004F +:109C5000020000000300C00040800041020000003C +:109C6000000000008011000005000000000000005E +:109C70000200000003004000418000040900800051 +:109C800000000000801001000100008200000001BF +:109C900001010085000540910440000100004000E2 +:109CA000410100098883000001000000000000005D +:109CB0000000000001000200200800010000020076 +:109CC00000000000C00100000000000000000000D3 +:109CD00000000100000001000400820800010000F3 +:109CE000020000000000C0000000000000000000B2 +:109CF00000000100000001002000400800000000FA +:109D0000040000000000C0010010000101820000FA +:109D1000000000010004880000040000028501002A +:109D20000000000100000100000000000000000031 +:109D300000000000100010000002000005000000FC +:109D40000000000000010000000000000000000012 +:109D500000000000000000000800000800000000F3 +:109D6000000000000000000100000000840000006E +:109D700000000000000000000200000400000000DD +:109D80000000000000000001000000800008418386 +:109D900000000000000209C10400008200211088B8 +:109DA0004100000000020409410000000000000022 +:109DB00000000000000080410011000000000300CE +:109DC0000900000000000041000000000000000049 +:109DD0000000000000000000004180100080000032 +:109DE0000200000000000000004100000000000030 +:109DF0000000000000000000004100100080000092 +:109E000005000000000000000041000002C0804189 +:109E100000C10000034080058341400241840000EE +:109E2000808000000440002080800983000000043E +:109E300000830000000480000500000000C18004D1 +:109E400000020000000000000000054100000000CA +:109E50008005008300000004800020000000004115 +:109E60000000000200000000004000000384000029 +:109E70008005008300000005000082000000004112 +:109E800000000040000000000020000003029105D7 +:109E90002001A040000000011000858300C11008CF +:109EA000008808C000000101000184400005000096 +:109EB0008401008300000000400084000000004195 +:109EC000820100000000000000000000008300008C +:109ED00000000400008300000001080003000000EF +:109EE00000A1A000000100000000000000000141EE +:109EF000000004000083000000009000110000003A +:109F00000003A00000000000000000010000018527 +:109F10000000000000004806000000000000484269 +:109F2000821200E0070000420000000000004842EA +:109F30000000000000000000000000000000000021 +:109F4000811200E007004805000000000000000A40 +:109F50000000000000000000000000000000000001 +:109F60000000811200E0070048230000000000000C +:109F700000000000000000000000000000000000E1 +:109F80000000811200E0070048000000000000000F +:109F900000000000000000000000000000000000C1 :109FA00000000000000000000000000000000000B1 :109FB00000000000000000000000000000000000A1 :109FC0000000000000000000000000000000000091 @@ -88605,1697 +88605,1697 @@ :10A0600000000000000000000000000000000000F0 :10A0700000000000000000000000000000000000E0 :10A0800000000000000000000000000000000000D0 -:10A09000000000000000747B0000000000000000D1 +:10A09000000000000000252B000000000000000070 :10A0A00000000000000000000000000000000000B0 -:10A0B00000000000DE2E747B0000000000000000A5 +:10A0B00000000000D4A4757B000000000000000038 :10A0C0000000000000000000000000000000000090 -:10A0D00000000000DE2E0000747B00000000000085 +:10A0D00000000000DEAE0000757B00000000000004 :10A0E0000000000000000000000000000000000070 -:10A0F000000000000000DE2E747B00000000000065 +:10A0F000000000000000DEAE757B000000000000E4 :10A10000000000000000000000000000000000004F -:10A11000000000000000DE2E615603400000000039 -:10A1200000000231E0000000000000000C400000D0 -:10A130000000000002C06A86615603400000000073 -:10A1400000000231E0000000000000000C400000B0 -:10A150000000000002C06A86000061560340000053 -:10A16000000000000231E0000000000000000C4090 -:10A1700000000000000002C06A8661560340000033 -:10A18000000000000231E0000000000000000C4070 -:10A1900000000000000002C06A860000000000000D -:10A1A0000000000020000000000500820000000305 -:10A1B000000400400000000000000000000000005B -:10A1C000000000000000000000000000000000008F -:10A1D000000000000000000000000001000000007E -:10A1E00000000000000000000000000000008800E7 -:10A1F00000000000000000000000000400008400D7 -:10A20000000000000000000000000000000020002E -:10A21000000000000000000000000000000000003E -:10A22000000000000000000000000000000400002A -:10A23000000000010001000000000000000000001C -:10A24000000000000000000000000000000000000E -:10A2500000000000000000000000000000000000FE -:10A2600000000000000000000000000000000000EE -:10A2700000000000000000000000000000000000DE -:10A2800000000000000000000000000000000000CE -:10A2900000000000000000000000000000000000BE -:10A2A000000000000000000000000000001020007E -:10A2B0000000000400040000000000000080000016 -:10A2C000000000000000000000000000000000008E -:10A2D000000000000000000000000000000000007E -:10A2E000000000000000000000000000000000006E -:10A2F000000000000000000000000000000000005E -:10A30000000000000000000000000000000000004D -:10A31000000000000000000000000000000000003D -:10A320000084008400000000000400000000000120 -:10A330008000000203010001000000000000002076 -:10A34000000000000000000000000000000000000D -:10A3500000000000000000000000000000000000FD -:10A3600000000000000000000000000000000000ED -:10A3700000000000000000000000000000000000DD -:10A3800000000000000000000000000000000000CD -:10A3900000000000000000000000000000000000BD -:10A3A00000000000000000000000000000000000AD -:10A3B0000000000500040000000000000440400010 -:10A3C000000200000000000000000000000000008B -:10A3D000000000000000000000000000000000007D -:10A3E000000000000000000000000000000000006D -:10A3F000000000000000000000000000000000005D -:10A40000000000000000000000000000000000004C -:10A41000000000000000000000000000000000003C -:10A4200000000000000000000000000041000000EB -:10A430000000000040000085008400000000800152 -:10A440000000000100000000000000000300000008 -:10A4500000000000000000000000000000000000FC -:10A4600000000000000000000000000000000300E9 -:10A4700021000000000000000000000000000000BB -:10A4800000000000000000000000000000000000CC -:10A49000210000000000000000000000000000009B -:10A4A0000000000000000000000000000000C000EC -:10A4B00000002004000000000000000400008300F1 -:10A4C000000001000000000000000000000000008B -:10A4D0000000000000000000A0000000000040009C -:10A4E00000000000000000000000820000000000EA -:10A4F000000000000000000000000000000000005C -:10A50000000000000000000000000000000000004B -:10A51000000000000000000000000000000000003B -:10A52000000000090000000000000500000000001D -:10A53000000000000000000000000000000000001B -:10A540000400000002000000000000000000000005 -:10A5500000000000000000000000210000000000DA -:10A5600000000000000000000000000000000000EB -:10A5700000000000000000000000000000000000DB -:10A5800000000000000000000000000000000000CB -:10A5900000000000000000000000000000000000BB -:10A5A000000000000000000000000000C0000000EB -:10A5B000001100000000000000000000000000800A -:10A5C0000000010000A001A0010000000000000048 -:10A5D00000000000000000000000000000000080FB -:10A5E000000000000000000000000000000000006B -:10A5F000000000000000000000000000000000005B -:10A6000000800000000000000000000000000000CA -:10A61000000000000000000000000000000000003A -:10A6200000800000000000000000000000000000AA -:10A6300000000000000000000000000000002100F9 -:10A640000010000002000041022102000000000092 -:10A6500000000000000000000000000000002100D9 -:10A6600000100000000000000000000000000000DA -:10A6700000000000000000000000000000000000DA -:10A6800003000010000000000000000000000000B7 -:10A6900000000000000000000000000000000000BA -:10A6A0000800001000000000000000000000000092 -:10A6B0000000000000000000080000000000000092 -:10A6C0000000000000200020000200200020000008 -:10A6D0000000000000000000080000000000000072 -:10A6E000000000000000000000000000000000006A -:10A6F000000040000000000000000000000000001A -:10A700000000000000000000000000000000000049 -:10A7100000004000000000000000000000000000F9 -:10A720000000000000000000000000000000000029 -:10A73000000000000500000008000000000000000C -:10A7400000000000000000002003000120010001C3 -:10A7500000000000000000000000000000000000F9 -:10A7600000000000000000000000000000000000E9 -:10A7700000000000000000000000000000000000D9 -:10A7800000000000000000000000000000000000C9 -:10A7900000000000000000000000000000000000B9 -:10A7A00000000000000000000000000000000000A9 -:10A7B0000000000000000000000000000000000099 -:10A7C00000000001000001010000000190010001F3 -:10A7D0000000000000000000000000000000000079 -:10A7E0000000000000000000000000000000000069 -:10A7F0000000000000000000000000000000000059 -:10A800000000000000000000000000000000000048 -:10A810000000000000000000000000000000000038 -:10A820000000000000000000000000000000000028 -:10A830000000000000000000000000000000000018 -:10A8400000000000004020082004091000058803D3 -:10A8500000040008000000000000000000000000EC -:10A8600000000000000000000000000000000000E8 -:10A8700000000000000000000000000000000000D8 -:10A8800000000000000000000000000000000000C8 -:10A8900000000000000000000000000000000000B8 -:10A8A00000000000000000000000000000000000A8 -:10A8B0000000000000000000000000000000800018 -:10A8C000000000108000080040000400001141005A -:10A8D000040020040300000000000000000000004D -:10A8E0000000000000000000000000000000000068 -:10A8F0000000000000000000000000000000000058 -:10A900000000000000000000000000000000000047 -:10A910000000000000000000000000000000000037 -:10A920000000000000000000000000000000000027 -:10A930000000000000000000000000000000000017 -:10A940004000200004010800000201000100000096 -:10A9500000000184000101840000000000000000EC -:10A9600000000000000000000000000000000000E7 -:10A9700000000000000000000000000000000000D7 -:10A9800000000000000000000000000000000000C7 -:10A9900000000000000000000000000000000000B7 -:10A9A00000000000000000000000000000000000A7 -:10A9B0000000000000000000000000000000000097 -:10A9C0000000000000000000000000010000000185 -:10A9D000000089010108A001000000000000000043 -:10A9E0000000000000000000000000000000000067 -:10A9F0000000000000000000000000000000000057 -:10AA00000000000000000000000000000000000046 -:10AA10000000000000000000000000000000000036 -:10AA20000000000000000000000000000000000026 -:10AA30000000000000000000000000000000000016 -:10AA400000000000000000000000000000400009BD -:10AA50004104000904020900202100000000000058 -:10AA600000000000000000000000000000000000E6 -:10AA700000000000000000000000000000000000D6 -:10AA800000000000000000000000000000000000C6 -:10AA900000000000000000000000000000000000B6 -:10AAA00000000000000000000000000000000000A6 -:10AAB0000000000000000000000000000000000096 -:10AAC000000000000000000000000000000040093D -:10AAD0000000040040110221214020000009000074 -:10AAE0000000000000000000000000000000000066 -:10AAF0000000000000000000000000000000000056 -:10AB00000000000000000000000000000000000045 -:10AB10000000000000000000000000000000000035 -:10AB20000000000000000000000000000000000025 -:10AB30000000000000000000000000000000000015 -:10AB400000000000000000000000000200C0000043 -:10AB500001040000010001000189000088080001D3 -:10AB600000000000000000000000000000000000E5 -:10AB700000000000000000000000000000000000D5 -:10AB800000000000000000000000000000000000C5 -:10AB900000000000000000000000000000000000B5 -:10ABA00000000000000000000000000000000000A5 -:10ABB0000000000000000000000000000000000095 -:10ABC0000000000000000000000000000000000085 -:10ABD0000000000000E0000000000000000007008E -:10ABE0000000000000000000000000000000000065 -:10ABF0000000000000000000000000000000000055 -:10AC00000000000000000000000000000000000044 -:10AC10000000000000000000000000000000000034 -:10AC20000000000000000000000000000000000024 +:10A11000000000000000DEAE60DE03400000000032 +:10A120000000023000000000000000000C400000B1 +:10A130000000000002C07B06612603400000000012 +:10A1400000000230A0000000000000000C400000F1 +:10A150000000000002C06486000061260340000089 +:10A16000000000000230A0000000000000000C40D1 +:10A1700000000000000002C0648661260340000069 +:10A18000000000000230A0000000000000000C40B1 +:10A1900000000000000002C06486880020008800E3 +:10A1A0004004400004000400400440110441200425 +:10A1B000200088030080200288058500012005001A +:10A1C000C10020000400C0002002A0100000A00078 +:10A1D0002000840088008804400400031000002050 +:10A1E00084054008000040002000040084000400B2 +:10A1F0000800200488002100200421004000000005 +:10A2000000000280A000A00020008884048040009C +:10A21000200020008800058089800400004009405B +:10A220000000410200902000009010900082000089 +:10A2300000020000100010100000000404000403DD +:10A24000840208040000400000000005008409C0EA +:10A2500021A0000000020500000000000000000036 +:10A26000000100C0800005000000404000202000E8 +:10A270000500C00005000000040000000402000802 +:10A280000000000009080000009000000510000216 +:10A29000850000000400000004400410A1008204B6 +:10A2A00000880000001090410000851004000200AA +:10A2B000844008000004080082C020004000100014 +:10A2C000048008020180008000108200000000412C +:10A2D0000441000208410000088800000802000054 +:10A2E0000800C000200400800841040200040000AF +:10A2F0008200104040102120000000200220009029 +:10A30000041008000010001001000041000002418C +:10A310000100884102884021A01020000010041094 +:10A32000000800100008418520080000048480080F +:10A330008004020880080008008400020004809065 +:10A340008010A0108411042000104000000400C000 +:10A350002004001000C100044000004120088021BA +:10A36000000040000004030800200000000900086D +:10A37000001004000085890802014090058541090C +:10A3800004200300000403080002400020084104E8 +:10A390004108400804400010828400010308054180 +:10A3A00040014010400204000408000010000808AA +:10A3B0000200101004000000884010024021041028 +:10A3C00040000005040884000103004004088808D8 +:10A3D0001004100000110040000000050208902148 +:10A3E00000200000002100884000201140210000D2 +:10A3F0000021080000020100C0A1000001209040DF +:10A4000005050000C000840882211121004090054C +:10A4100000008800040000000005004190050000D5 +:10A4200000000000002100000040000000000000CB +:10A4300080008020009000000400000011C0800017 +:10A4400009080000100000000000042000000300C4 +:10A450000000000800000008000000C00008000024 +:10A46000008800C000000000000400828008002076 +:10A4700000000900000000C00200004004080401C0 +:10A48000030004000000008841000000A008030051 +:10A4900000000002100400000800408403A0000037 +:10A4A000100009000000000220050905000020102E +:10A4B0000010081108048804900040000000840087 +:10A4C000848800040441A0A0108400040810A000A7 +:10A4D000C0000800C000102108118500000208001B +:10A4E0000404000500000000088082008284082027 +:10A4F00084004021A010A000C00004000800040057 +:10A5000040042002A0098200820840000021208827 +:10A51000A00482000420904100119005C0001002A8 +:10A52000040482001020820300101104080020009F +:10A53000000000A12000020000A0000400100000A4 +:10A540002100080800000010081100201000200061 +:10A550001000000000C00000028240000400000162 +:10A56000008200000010040800000020000000210C +:10A57000004000008000208204000400C1000000B0 +:10A58000000000A000002004200008000300048850 +:10A5900080040420040021000420050000001000B5 +:10A5A0001100C140034003100082108000028400AB +:10A5B00000000021011000000080A00808009000A9 +:10A5C0000000C000A00582008800C000000508004F +:10A5D00000089000080002058200820005000020AB +:10A5E0000100A00008008400C01000000100200449 +:10A5F0000080A09008000805C01084001000102002 +:10A6000002008200098004081120C100000020849B +:10A61000202082000000A000820008100800A00591 +:10A620000009000008050804A00000001140000017 +:10A630000504030210C0080100000010000000A083 +:10A64000408420A000000000000000840000000002 +:10A650000000009005A00000000000040900900424 +:10A6600000010400000490000082000000002000AF +:10A67000850000040004000000100501200800907F +:10A6800000010000001004028200100104400000DC +:10A690008003800100000000100020004000000046 +:10A6A0000000000000004000090008000000400019 +:10A6B00000050884200020000040010900840400F7 +:10A6C00082208200840008004000A0210000A00039 +:10A6D0002010000820912005002100210000042105 +:10A6E000002104080021C0002004000408400000EC +:10A6F000000400002021200082008200A000000051 +:10A7000084008810C00000000000840082008420C3 +:10A71000202040209004C02000008200000990000A +:10A72000C00900080402080083208904000508000D +:10A730000000004080200000009000000800001091 +:10A7400000000800004020000000800000002008F9 +:10A750000000024000024120000000000000000054 +:10A7600080000084080000000000000400000304D2 +:10A770000000000000000400801000000010000035 +:10A780000800200800000020000020000204000053 +:10A79000000480118001080108094100030200083B +:10A7A0000000028420002001820008200800000030 +:10A7B0000000000408040008101004A002080104AE +:10A7C00000840000040000008200C00283020088B0 +:10A7D000888208A090020004A0820000850020006A +:10A7E00000000000A1000200000000000100C00005 +:10A7F0000000000000C0C082218400100000200082 +:10A800000000000101C0204000A01008000100016C +:10A8100000010000000001004000000008090004E1 +:10A82000000408880200A0002000A000000400909E +:10A830000040A0000000800000800080A080808098 +:10A84000218000800000000000008000A080C08007 +:10A850000080008080800080008000800000210057 +:10A8600000000000000089008000000000000300DC +:10A87000000000000000058083800480000040107C +:10A880008020000800082180800000808080004136 +:10A890000021000211030300110085000000800860 +:10A8A00000400003000580000320000000040000B9 +:10A8B00000000000000080000041801000008000C7 +:10A8C0008008808000000000000000000000008080 +:10A8D00000218000800383001005C080410010002B +:10A8E00002001000030802800800080003110000A5 +:10A8F0000000800080000000804080008040808058 +:10A9000000000000000000034000A005208084003B +:10A9100010800580050011C102082080210820A1B7 +:10A920000005800080090000A00041001011851082 +:10A93000800000038000800040000200A0C00000F2 +:10A94000040002014082000000000000000000003E +:10A9500090022000A0200488880008400902C182DB +:10A960000140010001000101001001A001000141AE +:10A97000000004000400C0400000020082008400C7 +:10A98000C0C00020000000000001410082009004CF +:10A99000C10200100008010001090120018400002B +:10A9A00001C190004000A001A000092008000200A1 +:10A9B000820104000003082004A0C082004020900F +:10A9C000080082020002022004000004004000107F +:10A9D00000C0208800200090A001209000204002AC +:10A9E000C0C0000000004001000000000001840021 +:10A9F00000010000000000000001000100402041B3 +:10AA0000C01100C000000100000000001088000814 +:10AA10000088029000000000850000000001040191 +:10AA200020010000080200A0000410100040018274 +:10AA3000091101A108C000088210828480000080F2 +:10AA40000000800000800000800080000000000006 +:10AA5000008000800011000500108041408000004F +:10AA6000008080800041002080210010050300400C +:10AA7000800309410002000000090041000100A01C +:10AA800000908010208300000800050000000000F6 +:10AA900000000000840009000300A1001100110261 +:10AAA00080208010050303001080110000800084C6 +:10AAB00004C083C00283000000000080800000000A +:10AAC000809100000000000280A1000080000000D2 +:10AAD0000000000000000520040041800400800404 +:10AAE0000002008000000840890002008903048001 +:10AAF00004090900034000000000000000000001FC +:10AB00008000800500038000214021000500040032 +:10AB1000800800C10080000203800540050040401D +:10AB200041800320210002200004008000800000FA +:10AB300010210805418000408011002180000000A4 +:10AB40000000A0A0C0C08400100040104000A00081 +:10AB50000000000000000000200090902010A000E5 +:10AB600090C1842002408400050004000500040018 +:10AB70000090000000000000000000A00040000065 +:10AB80000001C0004000100010880100000000001B +:10AB900000000490A083A002400000040000010017 +:10ABA000010101900001010001009001042004084E +:10ABB0004000018901A0001000014001080802A026 +:10ABC00000000000000007008200000000000700F5 +:10ABD0000000000000000000000000000000000075 +:10ABE0004200000000000700000600000000000016 +:10ABF0000000000000E0070000000000000000006E +:10AC000000000000000000E00700604200000000BB +:10AC1000000000000081000007008200000000002A +:10AC200007000012000000E0070000120000000012 :10AC30000000000000000000000000000000000014 -:10AC40000000000000000000000000000000000004 -:10AC50000000000000000000000000000000F0F014 -:10AC60000000F0F000000000000000000000000004 +:10AC40000700000066666666C300C30033C353C3D3 +:10AC5000F766F766000000003F303F3F0000000C41 +:10AC6000C90FC90F0089898900FF0F0FFC3CF00054 :10AC700000000000000000000000000000000000D4 :10AC800000000000000000000000000000000000C4 -:10AC900000000000000000000000000000000000B4 -:10ACA00000000000000000000000000000000000A4 -:10ACB0000000000000000000000000000000000094 -:10ACC0000000000000000000000000000000000084 -:10ACD0000000000000000000000000000000000074 -:10ACE000F0F00000F0F000000000000000000000A4 -:10ACF0000000000000000000000000000000000054 +:10AC90000000000000006460606000F0C3C30000BA +:10ACA000000000000000000000000000000000FCA8 +:10ACB000000C4E8D4ECF000000003C3C3C3CFF0F92 +:10ACC000000FF303F303626662660300030053C3DD +:10ACD00053C3F766F766000000003F3030300000D5 +:10ACE0000006C9FFC9FF00CFCFCF9999C3C3FC3C71 +:10ACF000F000000000000000000000000000000064 :10AD00000000000000000000000000000000000043 -:10AD10000000000000000000000000000000000033 +:10AD10000000000000000000606060600FFFC3C31F :10AD20000000000000000000000000000000000023 -:10AD30000000000000000000000000000000000013 -:10AD40000000000000000000000000000000000003 +:10AD300000FC000CCF8DCFCF0000000030903F9F73 +:10AD400099999999FFFF00000000000000000000A1 :10AD500000000000000000000000000000000000F3 :10AD600000000000000000000000000000000000E3 :10AD700000000000000000000000000000000000D3 -:10AD800000000000000000000000000000000000C3 -:10AD900000000000000000000000000000000000B3 +:10AD800000000000000000000000410840000084B6 +:10AD90002102000000000000000000000000000090 :10ADA00000000000000000000000000000000000A3 :10ADB0000000000000000000000000000000000093 -:10ADC0000000000000000000000000000000000083 -:10ADD0000000000000009981999000000000000030 -:10ADE0000000FFFF0000FFFF000000000000000067 +:10ADC00000000000000000000000000000000F0F65 +:10ADD0000F0F1F009F0000C200C200000000000013 +:10ADE00000003C000C0CBC80BD813808FBCBFFFF91 :10ADF0000000000000000000000000000000000053 -:10AE00000000000000000000000000000000000042 -:10AE10000000000000000000000000000000000032 -:10AE20000000000000000000000000000000000022 -:10AE30000000000000000000000000000000000012 -:10AE40000000000000000000000000000000000002 -:10AE50000000000000000000FFC3FFF00000000041 -:10AE600000000000000000000000000000000000E2 -:10AE700000000000000000000000000000000000D2 -:10AE800000000000000000000000000000000000C2 -:10AE900000000000000000000000000000000000B2 -:10AEA00000000000000000000000000000000000A2 -:10AEB0000000000000000000000000000000000092 -:10AEC0000000000000000000000000000000000082 -:10AED0000000000000000000000000000000006111 -:10AEE00000010001000015612A0E054D00A80000B8 -:10AEF0000000000000000000000000000000000052 -:10AF00000000000000000000000000000000000041 -:10AF10000000000000000000000000000000000031 -:10AF20000000000000000000000000000000000021 -:10AF30000000000000000000000000000000000011 -:10AF40000000000000000000000000000000000001 +:10AE000000000000000000FF00FF00000000000044 +:10AE1000000000000000000000000000F6F624BD65 +:10AE2000FF0F3C6600000000000000000000000072 +:10AE30000000000036F036FF3C1808080000000053 +:10AE4000FF00C3C30F9F009081E781E700800000EF +:10AE50000F0D0F0D0000000000C200C20000000036 +:10AE60000000000024240C0C3C003D01B989B98984 +:10AE7000FC6CFC6C00000000000000000000000002 +:10AE800000000000000000000F0F666600000000D8 +:10AE90000000000000000000000000000000909092 +:10AEA00024BD000F3C660000000000000000000010 +:10AEB0000000000000003600360F240000000000F3 +:10AEC0000000F909C9C9FF9FF090FFFF00000000D2 +:10AED0000008001000000000400800000000000012 +:10AEE00000000090000080610006000D0000056178 +:10AEF0000A0E059D00A000610006000D000005611E +:10AF00000A0E050C00A000610006000D00050000FF +:10AF10000061000F000D000000610006000D000040 +:10AF20008061503E000D000805610A0E050D00A06D +:10AF300005610A0F050D00A080610006000D0000EC +:10AF400000610006000D000000000A000000000182 :10AF500000000000000000000000000000000000F1 -:10AF6000FCFCFAFA00FCFFFC0F0FFF0000C300C35B -:10AF700000000000000000000000000000000000D1 -:10AF800000000000000000000000000000000000C1 -:10AF900000000000000000000000000000000000B1 -:10AFA00000000000000000000000000000000000A1 -:10AFB0000000000000000000000000000000000091 -:10AFC0000000000000000000000000000000000081 +:10AF6000000000000000000000EF00FF0FFF0CFCDD +:10AF700000000000000000000252A2F2FF007F006B +:10AF800000800000FF4130300000000000FF00FFA3 +:10AF9000000000000000FFC0AAC0FFFF0400000086 +:10AFA00000000000000000000000FF4DC34D000045 +:10AFB0000000AA0FC3FF3D0D31010000000000009A +:10AFC0000000AFA5A55AAAFFB4B40000000000001D :10AFD0000000000000000000000000000000000071 -:10AFE00000000C0C0A0A00C0FFC00F0FFF003CFF5E -:10AFF0003CFF000000000000000000000000000016 -:10B000000000000000000000000000000000000040 -:10B010000000000000000000000000000000000030 -:10B020000000000000000000000000000000000020 -:10B030000000000000000000000000000000000010 -:10B040000000000000000000000000000000000000 +:10AFE000000000000000000000000000000000F071 +:10AFF0000CFC00000000000000000757A7F7CF007E +:10B000004F000000000000413030000000003C3CD8 +:10B01000AAAA000000000000FFCFAACFFFFF000097 +:10B020000000000000000000000000003C4D004D4A +:10B0300000000000AA0FC300FDCDF1C10000000018 +:10B0400000000000A5055F050055B4B40000000035 :10B0500000000000000000000000000000000000F0 -:10B0600000000000FFF0F3F3AA30AA305C5C5C5CE7 -:10B07000CF410C4100000000000000000000000073 -:10B0800000000000000000000000000000000000C0 -:10B0900000000000000000000000000000000000B0 -:10B0A00000000000000000000000000000000000A0 -:10B0B0000000000000000000000000000000000090 -:10B0C0000000000000000000000000000000000080 +:10B0600000000000000000000000000000000000E0 +:10B070000000000000000000C3FFC0FC0000000052 +:10B0800000A030B0000000003CC03CC00000000048 +:10B0900000000000000000000000000000000004AC +:10B0A00000000000000000000000B2C3B2FFCF0C9F +:10B0B000EBEB4F454A40000000001F131C100F3CF3 +:10B0C000FF5500000000AA55AA5508090B0B000007 :10B0D0000000000000000000000000000000000070 -:10B0E0000000000000000F000303AA3FAA3FFFF08A -:10B0F0000F00CF7D0C7D000000000000000000006C -:10B10000000000000000000000000000000000003F +:10B0E0000000000000000000000000000000000060 +:10B0F00000000000000000000000003CC0FC000058 +:10B10000000000A030B0000000003CC03C80000007 :10B11000000000000000000000000000000000002F -:10B12000000000000000000000000000000000001F -:10B13000000000000000000000000000000000000F -:10B1400000000000000000000000000000000000FF -:10B15000000000000000000000800000001000104F -:10B1600000020000000000000000000000000000DD -:10B1700000000000000000000000000000000000CF -:10B1800000000000000000000000000000040004B7 -:10B1900000000000000000000001000000000000AE -:10B1A0000000000000000004000400000000000097 -:10B1B000000400000000000000000000000000008B -:10B1C000000000000000000000000000000000007F -:10B1D000000000000000000000000020000000014E -:10B1E000000100000002000000000000000000005C -:10B1F000000000000000000000000000000000004F -:10B20000000000000000000000000000000000003E -:10B21000000000000000000000000000000000002E -:10B22000000000000000000000000000000000001E -:10B23000000000000000000000000000000000000E -:10B2400000000000000000000000000000000000FE -:10B2500000000000000000000000000000000800E6 -:10B26000008000C10000000000000000000000009D -:10B27000004000000000000000000000000000008E -:10B2800000000000000000000000000000000000BE -:10B2900000000000000000000000000000000000AE -:10B2A000000000000000000000000000000000009E -:10B2B000000000000000000000000000000000008E -:10B2C00000000000000000000000000000008200FC -:10B2D000820000000000000000000000004000406C -:10B2E000000000200002000000000000000000003C -:10B2F00020400000000000000000000000000000EE -:10B30000000000000000000000000000000000003D -:10B310000000000000000000050000000000000028 -:10B32000000000000000000000000000000000001D -:10B33000000000000000000000000000000000000D -:10B3400000000000000000000000000000000000FD -:10B3500000000000000000000000000000000000ED -:10B36000002000200020001000000020000000004D -:10B3700000000000040000000000000000808800C1 -:10B3800000000000000000000000000000000000BD -:10B3900000000000000000000000000000000000AD -:10B3A000000000000000000000000000000000009D -:10B3B000000000000000000000000000000000008D -:10B3C000000002000000000000000000000000007B -:10B3D000000000000000000000000000000000006D -:10B3E0000000000121010001000000000501000033 -:10B3F0000000000000000300400000000000000208 -:10B40000000000000000000000000000000000003C -:10B41000000000000000000000000000000000002C -:10B42000000000000000000000000000000000001C -:10B43000000000000000000000000000000000000C -:10B4400000000000000000000000000000000000FC -:10B4500000000000000000000000000000000000EC -:10B46000000000000080000040000000000000001C -:10B4700000000000000000000000000000000000CC -:10B4800000000000000000000000000000000000BC -:10B49000000000000040000000000000000000006C -:10B4A000000000000000000000000000000000009C -:10B4B000000000000000000000000000000000008C -:10B4C000000000000000000000000000000000007C -:10B4D000000000000000000000000000000000006C -:10B4E0000000000000000520000000000000000037 -:10B4F000000000000000000000000000000000004C -:10B50000000000000000000000000000000000003B -:10B51000000000000000000000000000000000002B -:10B52000000000000000000000000000000000001B -:10B53000000000000000000000000000000000000B -:10B5400000000000000000000000000000000000FB -:10B5500000000000000000000000000000000000EB -:10B5600000000000000000000005C02000200005D1 -:10B570000000000000000000000000008200000049 -:10B5800000000000000000000000000000000000BB -:10B5900000000000000000000000000000000000AB -:10B5A000000000000000000000000000000000009B -:10B5B000000000000000000000000000000000008B -:10B5C000000000000000000000000000000000007B -:10B5D000000000000000000000000000000000006B -:10B5E0000000000000000000000000000001000159 -:10B5F0000000000005000000030000000000000043 -:10B600000000000000900000008800000000000022 -:10B61000000000000000000000000000000000002A -:10B62000000000000000000000000000000000001A -:10B63000000000000000000000000000000000000A -:10B6400000000000000000000000000000000000FA -:10B6500000000000000000000000000000000000EA -:10B660000000000000000000000000000000820058 -:10B67000000000A0002000200020002000000000AA -:10B6800000000000000000000000000000020000B8 -:10B6900000020000000000000000000000000000A8 -:10B6A000000000000000000000000000000000009A -:10B6B000000000000000000000000000000000008A -:10B6C000000000000000000000000000000000007A -:10B6D000000000000000000000000000000000006A -:10B6E000000000000000000000000000000000005A -:10B6F00000000000000300010001000100890000BB -:10B700000000000000000000000000000000000039 -:10B710000000000000000000000000000000000029 -:10B720000000000000000000000000000000000019 -:10B730000000000000000000000000000000000009 -:10B7400000000000000000000000000000000000F9 -:10B7500000000000000000000000000000000000E9 -:10B7600000000000000000000000000000000000D9 -:10B7700000000000000000000000000000000000C9 -:10B7800000000000000000000000A0000000000019 -:10B7900000000000000000000000000000000000A9 -:10B7A0000000000000000000000000000000000099 -:10B7B0000000000000000000000000000000000089 -:10B7C0000000000000000000000000000000000079 -:10B7D0000000000000000000000000000000000069 -:10B7E0000000000000000000000000000000000059 -:10B7F0000000000000000000000000000000000049 -:10B8000000000000000000000000000080000000B8 -:10B810000000000000000000000000000000000028 -:10B820000000000000000000000000000000000018 -:10B830000000000000000000000000000000000008 -:10B8400000000000000000000000000000000000F8 -:10B8500000000000000000000000000000000000E8 -:10B8600000000000000000000000000000000000D8 -:10B870000000000011002080020010800000000085 -:10B880000000000000000000000000000080100028 -:10B890004000032000000000000000000000000045 -:10B8A0000000000000000000000000000000000098 -:10B8B0000000000000000000000000000000000088 -:10B8C0000000000000000000000000000000000078 -:10B8D0000000000000000000000000000000000068 -:10B8E0000000000000000000000000000000000058 -:10B8F0000000000000000000210801001108000005 -:10B90000008200000040000000000000000000086D -:10B910000100010001010000000000000000000023 -:10B920000000000000000000000000000000000017 -:10B930000000000000000000000000000000000007 -:10B9400000000000000000000000000000000000F7 -:10B9500000000000000000000000000000000000E7 -:10B9600000000000000000000000000000000000D7 -:10B970000000000000000000000000880804001122 -:10B980000000000040000000000000000000000077 -:10B9900000000000000000000000000000000000A7 -:10B9A0000000000000000000000000000000000097 -:10B9B0000000000000000000000000000000000087 -:10B9C0000000000000000000000000000000000077 -:10B9D0000000000000000000000000000000000067 -:10B9E0000000000000000000000000000000000057 -:10B9F000000000000000000000000905000080A019 -:10BA000000054000000000000000000000000000F1 -:10BA10000000000000000000000000000000000026 -:10BA20000000000000000000000000000000000016 -:10BA30000000000000000000000000000000000006 -:10BA400000000000000000000000000000000000F6 -:10BA500000000000000000000000000000000000E6 -:10BA600000000000000000000000000000000000D6 -:10BA700000000000000000000000000000C00021E5 -:10BA800000A100030000000500000000000000000D -:10BA90000000000003202100090008000000000051 -:10BAA0000000000000000000000000000000000096 -:10BAB0000000000000000000000000000000000086 -:10BAC0000000000000000000000000000000000076 -:10BAD0000000000000000000000000000000000066 -:10BAE0000000000000000000000000000000000056 -:10BAF0000000000000000000000000000000004006 -:10BB00000000000500000000000000000000000030 -:10BB10000000000000000001000000000100000023 -:10BB20000000000000000000000000000000000015 -:10BB30000000000000000000000000000000000005 -:10BB400000000000000000000000000000000000F5 -:10BB500000000000000000000000000000000000E5 -:10BB600000000000000000000000000000000000D5 -:10BB700000000000000000000000000000000000C5 -:10BB800000000000070000000000000007000000A7 -:10BB900000000000000000000000000000000000A5 -:10BBA0000000000000000000000000000000000095 -:10BBB0000000000000000000000000000000000085 +:10B12000000000000000000000000000B200B23C7F +:10B13000CF0C2828EFE5EAE000000000DFD3DCD0E8 +:10B140000F3C0055000000003C3C3C3C0001030368 +:10B1500000000000000000000000200010000002BD +:10B160002008C000200020840080A008000000808B +:10B1700040022002C0000002840084038800000016 +:10B180000080400000108902840020000208108026 +:10B190002010C080A0024000000304002003200310 +:10B1A00004044000880000008800400002020910EA +:10B1B000000401008441C000208588000800088246 +:10B1C0000404840020008800C000000089000510ED +:10B1D00000008880400088000004109000004000BB +:10B1E000008280000000218210040004210200C0BF +:10B1F000000400000090000200C0000200200002D5 +:10B2000000000040000205030804400000C00000E8 +:10B2100000040090050400018000000009024000C5 +:10B22000410805000000000000002002000041036A +:10B23000C00105001000090000C08904000284005C +:10B24000A003000041000000400000022000400078 +:10B2500040030000040200004000200000400221E2 +:10B26000000500008340000021C0038020059104F8 +:10B270008400200008000009020000080000840487 +:10B2800000000800020800000808200588000004EB +:10B2900000090200000200C0004090100000880079 +:10B2A0000204000000000180020083C000000000D2 +:10B2B000034108A103000221400090102000A109D1 +:10B2C0008905018284020800C000001020000100EE +:10B2D0000010219008000000881001000003058480 +:10B2E00000842108000810040040900410048040ED +:10B2F000208500A091400288008200820040020464 +:10B300000282000802082088040885840000008862 +:10B310000208028400820285410505820041000086 +:10B320000282000800880308400200044002030073 +:10B330000000400885024084030084040011820854 +:10B34000400040084011028502000200008404848D +:10B3500008004085A0038508400002004000030269 +:10B3600082000408401040001021000484084000BE +:10B370001004201020040408400800000009000008 +:10B380000008000800002000040004030000000082 +:10B3900040000000000040000041000800219041F2 +:10B3A00000000400000000210000000308004088A5 +:10B3B00000080000040000880000000300020005EF +:10B3C000040002409040002140021009C00000002B +:10B3D000000800100004020200020002000800033E +:10B3E000000505840000054000000000000305A1E1 +:10B3F000219005A188008901210021402100050834 +:10B4000008001040080011C0800000A000000800E3 +:10B41000000000000000030000080300080008000E +:10B4200003000000080021000400100003000300D6 +:10B43000C01000400000400008104100108441008E +:10B44000000000C00401000003000800090008001B +:10B450000200000000010009830400891000008838 +:10B4600000000000C000200000002000A0850908A6 +:10B4700000000400901008050209C011001100002E +:10B480000010C010901040008209000440000040ED +:10B49000040008008204A0000008000010000380DF +:10B4A000900002000000C000A00010210002044033 +:10B4B00004000020114082C00410024101098202F0 +:10B4C0000940C01141A102410885C0104083090410 +:10B4D000A000A011A0001002084108418240C00550 +:10B4E000080002418402008203C00390008200042D +:10B4F00020090000000000892140080000000084AD +:10B500002108000041042101000000900301000017 +:10B5100008004100104000840000000010C04000FE +:10B52000200420C000A0000005000500000040002D +:10B5300000A0100003204000000208010040088223 +:10B5400021010800210488048000090202850810F6 +:10B550004000400400000200C0884002000221A018 +:10B5600011040082020011A1000800100000000078 +:10B57000080000000008000382000000000800002E +:10B58000820882000000000000000000400010005F +:10B5900000000040000000000040000082000000A9 +:10B5A0000000A000001000000000000000000000EB +:10B5B000000082000810000240002021000040002E +:10B5C000080208001002840208049009000002101A +:10B5D000000800050000820582038200A0008404A8 +:10B5E00010000000C000080400200000050000005A +:10B5F000000000000008000000004020000040881B +:10B600000000000221A008000308414000000000E3 +:10B610000000000005A00000050200000302002059 +:10B62000400000000000002000100000030405009E +:10B6300000000000009004000021890011000308B0 +:10B6400083000008000000210001000100001088B4 +:10B650000001000021040040200008001182008841 +:10B660000584002010000400000100000800000014 +:10B670000000880000041000100004000808020800 +:10B6800000400000080002040000820000110000D9 +:10B6900000000000000020000000000020009000DA +:10B6A00000051005001121009008000800000000AE +:10B6B0009004000000400000028000004000088567 +:10B6C00020004080000240110120000520210811C7 +:10B6D0000205908508034021400840089080024000 +:10B6E0000800400200004000000040400841000007 +:10B6F00000000000000000010904000004040088AC +:10B70000088240084000000000000088000003009C +:10B7100003000082210400000004000040000040FB +:10B720002000000000002100A00000000000000038 +:10B730000900030021820000000021020090A00007 +:10B7400000100020A0082101000008000800A0004F +:10B7500020000000201080081100A020020010022C +:10B76000C003C02005890300020004000400020297 +:10B7700000000000000000000001040101000001C1 +:10B7800000000000000000000000000000000000B9 +:10B7900000000104900000C090000000000088003C +:10B7A00000000000010000000100900141000001C4 +:10B7B0000000000000000000000000000000100178 +:10B7C000000020A103C108030090008500040210BE +:10B7D000A00000A08840200882040000000084002F +:10B7E000000108A10410418400040000A101080028 +:10B7F00000000000000000000000004109200404D7 +:10B800000003000000000500000000000000000030 +:10B810000000000011800000000000000000000097 +:10B820000000000000004000000002051002C020DF +:10B8300000030000000000000000000000410000C4 +:10B840008004090000C103218082000911020089DF +:10B850008420000311800091008280840020400237 +:10B86000800500210582031182000002002083046C +:10B870008520000000000000000000000000020021 +:10B88000100041000004000500040000000000005A +:10B890000000000000000011000000008000000017 +:10B8A0000000800000000000000000008580830090 +:10B8B0002010A1900000000000000000000009809E +:10B8C0000000042000008980894182A180110000CD +:10B8D0000000850041C18580032180820220400054 +:10B8E0000800200003004000210091054103208052 +:10B8F0000400030310090000000000000000000223 +:10B900000100000001000001000000A10000000093 +:10B91000000000000000000000010000000088009E +:10B92000000082000800000000000000000010403D +:10B930000900A101C1090000000000000000000092 +:10B94000001000000101000008840800A009820422 +:10B9500000008800A10009A10240A000A0118300FE +:10B9600000000100000000080182A100A10141A126 +:10B970000010000001000040000000000000000076 +:10B980000000000001000001000040000000000075 +:10B9900000000000000000000001000000000001A5 +:10B9A00000020008000800C00000000000000100C4 +:10B9B0000000000041010000000000000000000045 +:10B9C000000000000001A1000000040800000401C4 +:10B9D000C0C1000301210490828802080140A10334 +:10B9E000838300000001000100000000210109051F +:10B9F00020410000010001000000000000000000E4 +:10BA000000000004101002200041000000000000AF +:10BA100040000000000000000000000800100008C6 +:10BA20000011008000000080008000000000000085 +:10BA300041000008080903030004000000000000A2 +:10BA40000000000000410208C00200100091100038 +:10BA50004121800800200308410091A00085034196 +:10BA6000A190821000020008002100200020821016 +:10BA700005A189100509400503030010000000001E +:10BA8000000000004120100009000210000000002A +:10BA900000000000000000000000000000000000A6 +:10BAA0008000000000000000000000000000000016 +:10BAB0000000000005832011038005030000000042 +:10BAC000000000000000102120211000030384105A +:10BAD00085080400030010C0031110001109410083 +:10BAE00011C1890085002100000002000008A18426 +:10BAF000021108000403108010041000110300005C +:10BB000000000000000001C0000000000101000072 +:10BB100020008200900000000000000000000000F3 +:10BB2000000002000000000000200088000000006B +:10BB300000000000000000020001014000010000C0 +:10BB400000000000000000000001000000000100F3 +:10BB500010004001A002910000410100008401009A +:10BB60000000C0080800040001900000000000016F +:10BB700041C001C14110830100A00100010000008B +:10BB80000000000000000000810000E00000000054 +:10BB9000000000E0000000000000000000000000C5 +:10BBA000000000E0070000000000000000000000AE +:10BBB000000000E000000082840000E000000000BF :10BBC0000000000000000000000000000000000075 -:10BBD0000000000000000000000000000000000065 -:10BBE0000000000000000000000000000000000055 -:10BBF0000000000000000000000000000000000045 -:10BC000000000000000000F0FFF000000000000055 -:10BC10000000000000000000000000000000000024 -:10BC20000000000000000000000000000000000014 -:10BC30000000000000000000000000000000000004 +:10BBD00000000000000000000041880000E00000BC +:10BBE0000012000000000000000000000000000043 +:10BBF0000000000000E000006000000000E0000025 +:10BC00000000000000000000000000000000000034 +:10BC10000000FFACFFAC00000000000000000000CE +:10BC20000000000000000000000000000000AA006A +:10BC3000B4B400000000000000000000000000009C :10BC400000000000000000000000000000000000F4 -:10BC500000000000000000000000000000000000E4 -:10BC600000000000000000000000000000000000D4 -:10BC700000000000000000000000000000000000C4 -:10BC8000000000000000000000F0FFF000000000D5 -:10BC900000000000000000000000000000000000A4 -:10BCA0000000000000000000000000000000000094 -:10BCB0000000000000000000000000000000000084 +:10BC500000000000787D00008282BEBE000000006F +:10BC6000CC0FF3FC3D0D3D0D00FF30300000000017 +:10BC70000000000030303F3F00FFAAAA0000000093 +:10BC800000000000000000000000000000000000B4 +:10BC900000000000FF00FF000000000000000000A6 +:10BCA000000000000F0F0F0F000000000000000058 +:10BCB000FF55B4B4000000000000000000000000C8 :10BCC0000000000000000000000000000000000074 -:10BCD0000000000000000000000000000000000064 -:10BCE0000000000000000000000000000000000054 -:10BCF0000000000000000000000000000000000044 -:10BD0000000000000000000000000F0F0F0F0000F7 +:10BCD000000000000000782800008282BEBE000044 +:10BCE0000000300CCCF0FDCDFDCD00FF00000000C9 +:10BCF00000000000000030303F3F00FFAAAA000013 +:10BD00000000000000000000000000000000000033 :10BD10000000000000000000000000000000000023 -:10BD20000000000000000000000000000000000013 -:10BD30000000000000000000000000000000000003 -:10BD400000000000000000000000000000000000F3 -:10BD500000000000000000000000000000000000E3 -:10BD600000000000000000000000000000000000D3 -:10BD700000000000000000000000000000000000C3 -:10BD8000000000000000000000000000FFFF0000B5 +:10BD20000000000000003C003C000000000000009B +:10BD30000000AA82FF820000000000000000000056 +:10BD40000000FF3CFF0F00000000000000000000AA +:10BD5000000000000000000005AF05AFFF00FF007D +:10BD6000F0550F55FFFF000FFF3E003E41EB50FA2C +:10BD7000000000000000000028F3EBF3FF00FF00CC +:10BD800000000000000000000000000000000000B3 :10BD900000000000000000000000000000000000A3 -:10BDA0000000000000000000000000000000000093 -:10BDB0000000000000000000000000000000000083 -:10BDC0000000000000000000000000000000000073 -:10BDD0000000000000000000000000000000000063 -:10BDE0000000000000000000000000000000000053 -:10BDF0000000000000000000000000000000000043 -:10BE00000000000000000000000005610A0E050DA2 -:10BE100000A005000A08050000A0000000000000C6 -:10BE2000000000610006000D00000000000000009E -:10BE30000000000000000000000000000000000002 -:10BE400000000000000000000000000000000000F2 -:10BE500000000000000000000000000000000000E2 -:10BE600000000000000000000000000000000000D2 -:10BE700000000000000000000000000000000000C2 -:10BE800000000000000000000000000000000000B2 -:10BE9000003CC3FF000000000000000000000000A4 -:10BEA00000000000C3F000AA000000000000000035 -:10BEB0000000000000000000000000000000000082 -:10BEC0000000000000000000000000000000000072 -:10BED0000000000000000000000000000000000062 -:10BEE0000000000000000000000000000000000052 -:10BEF0000000000000000000000000000000000042 -:10BF00000000000000000000000000000000000031 -:10BF10000000003CC3FF0000000000000000000023 -:10BF2000000000000000C3F0FFAA000000000000B5 -:10BF30000000000000000000000000000000000001 -:10BF400000000000000000000000000000000000F1 -:10BF500000000000000000000000000000000000E1 -:10BF600000000000000000000000000000000000D1 -:10BF700000000000000000000000000000000000C1 -:10BF800000000000000000000000000000000000B1 -:10BF900000000000BE50BEFA0000000000000000DB -:10BFA000000000000000000000000000000FFF0F74 +:10BDA00000000000000000003C003C00000000001B +:10BDB000000000000082558200000000000000002A +:10BDC00000000000003C000F000000000000000028 +:10BDD00000000000000000000000FFFF3C3CCFCF4F +:10BDE0000C0CF0550F55FFFFF0FFFFFE00FE41EB7E +:10BDF00050FA000000000000000028F3EBF3555556 +:10BE00000F0F000000000000000000000000000014 +:10BE1000000000210001C001000000610007000DCA +:10BE200000000000000000000000006100060009A2 +:10BE30000000000000000090000000610007000DFD +:10BE4000000000610005C00D0005000000000000BA +:10BE50000000000000610006000D00000061000607 +:10BE6000000D000000614007C009000000610006ED +:10BE7000001D000000610006000D0000806000074A +:10BE8000001D000000610007000D00000000000020 +:10BE9000000000000F3C0F553F3F303F0000000006 +:10BEA0000000000000000000000000000000000092 +:10BEB000000200D7000000000000000000000000A9 +:10BEC00000000000E3EFCFCF0C004D550000000054 +:10BED0000000000000003C7647193CAA00F07D7D80 +:10BEE000F0003C143C14FF3CC30000001010008024 +:10BEF00040C0005000140F0F00000000A8FFF0F732 +:10BF00000007C341C343CF0014008ACB0849000097 +:10BF10000000000000000F3C0F553030303F0000A3 +:10BF20000000000000000000000000000000000011 +:10BF30000000000200FF0000000000000000000000 +:10BF4000000000000000E3EFFFFFCFFF4D550000B1 +:10BF500000000000000000003C7647193CAA00F0F9 +:10BF60007D7DFF0F3C3C1414CF0CCF0C0000101053 +:10BF7000038343C3005000140F0F0000000080FF34 +:10BF8000FFF70F07C3C3C3C30C0014009EDF1C5D83 +:10BF90000000000000000000AFAFBE14AAF0FFF0E8 +:10BFA0000000000000000000000000000000000091 :10BFB0000000000000000000000000000000000081 -:10BFC0000000000000000000000000000000000071 -:10BFD0000000000000000000000000000000000061 -:10BFE0000000000000000000000000000000000051 -:10BFF0000000000000000000000000000000000041 -:10C000000000000000000000000000000000000030 -:10C01000000000000000145014FA000000000000AE -:10C020000000000000000000000000000000000F01 -:10C03000FF0F0000000000000000000000000000F2 -:10C0400000000000000000000000000000000000F0 -:10C0500000000000000000000000000000000000E0 -:10C0600000000000000000000000000000000000D0 -:10C0700000000000000000000000000000000000C0 -:10C0800000000000000000000000000000000000B0 -:10C090000000000000000002000400020000000098 -:10C0A0000004880000000000000000000002000002 -:10C0B0000000000000000000000000000000000080 -:10C0C0000000000000000000000000000000000070 -:10C0D000000000000001000000000000000000005F -:10C0E0000000000000000000000040000000000010 -:10C0F0000000000000000000000000000000000040 -:10C10000000000000004000000000000000000002B -:10C110000000000000000002000000000005000018 -:10C120000002000100000000000000000004000107 -:10C1300000000000000000000000000000000000FF -:10C1400000000000000000000000000000000000EF -:10C1500000000000000000000000000000000000DF -:10C1600000000000000000000000000000000000CF -:10C1700000020000000000000000000000000000BD -:10C1800000000000000000000000000000000000AF -:10C19000000000000000000000000000002100106E -:10C1A000000000000000000000000000000000008F -:10C1B0000400040000200020000000000000000037 -:10C1C000000000000000000000000000000000006F -:10C1D000000000000000000000000000000000005F -:10C1E000000000000000000000000000000000004F -:10C1F000000000000000000000000000000000003F -:10C20000000000000000000000000000000000002E -:10C210000000000082000000000000000000008418 -:10C2200000020200000000004100000000000000C9 -:10C2300000008000800000010001000000000400F8 -:10C2400000000000000000000000000000004004AA -:10C2500000000000000000040000000000000000DA -:10C2600000000000000000000000000000000000CE -:10C2700000000000000000000000000000000000BE -:10C2800000000000000000000000000000000000AE -:10C29000000000000000000000000000840000001A -:10C2A0000010000000020000002100001000080043 -:10C2B00000080000000084000408040000000000E2 -:10C2C000000000000000000000000000000000006E -:10C2D000000000000000000000000000000000005E -:10C2E000000000000000000000000000000000004E -:10C2F000000000000000000000000000000000003E -:10C30000000000000000000000000000000000002D -:10C31000000000000000000000000000000000001D -:10C32000400000000000000100000040004000004C -:10C3300000000000000000000000800080000000FD -:10C3400000000000000000000000000000000000ED -:10C3500000000000000000000000000000000000DD -:10C3600000000000000000000000000000000000CD -:10C3700000000000000000000000000000000000BD -:10C3800000000000000000000000000000000000AD -:10C39000000000000000000000000000000000009D -:10C3A000000000000000000000000000200000006D -:10C3B000000000000000000000000000000000007D -:10C3C0000000000000000000000000000000080065 -:10C3D000000000000000000000000000000000005D -:10C3E000000000000000000000000000000000004D -:10C3F000000000000000000000000000000000003D -:10C40000000000000000000000000000000000002C -:10C41000000000000000000000000000000000001C -:10C420000000000000000000030000000000020007 -:10C4300000000000000000000000000000000000FC -:10C4400000000000000000000000000000000000EC -:10C4500010000000000000000000000000000000CC -:10C4600003000000000000000000000000000000C9 -:10C4700000000000000000000000000000000000BC -:10C4800000000000000000000000000000000000AC -:10C490000000000000000000080000000000000094 -:10C4A00000000000000082000000A0030000000067 -:10C4B00000040000100000000000000000800100E7 -:10C4C000000000000000000000000000000000006C -:10C4D000000000000000000000000000000000005C -:10C4E000000000000000000000000000000000004C -:10C4F000000000000000000000000000000000003C -:10C50000000000000000000000000000000000002B -:10C51000000000000000000000000000000000001B -:10C520000000000000000000000005040000000002 -:10C5300000000001000000000000000000000520D5 -:10C5400004000500000000000000000000000000E2 -:10C5500000000000000000000000000000000000DB -:10C5600000000000000000000000000000000000CB -:10C5700000000000000000000000000000000000BB -:10C5800000000000000000000000000000000000AB -:10C59000000000000000000000000000000000009B -:10C5A00000000000000000000011000040214002D7 -:10C5B00000000000008000000000000000040000F7 -:10C5C000000000000000000000000000000000006B -:10C5D000000000000000000000000000000000005B -:10C5E000000000000000000000000000000000004B -:10C5F000000000000000000000000000000000003B -:10C60000000000000000000000000000000000002A -:10C61000000000000000000000000000000000001A -:10C62000000000000000000000000000000000000A -:10C6300000000000000000020000000000000000F8 -:10C6400000000000000000000000000000000000EA -:10C6500000000000000000000000000000000000DA -:10C6600000000000000000000000000000000000CA -:10C6700000000000000000000000000000000000BA -:10C6800000000000000000000000000000000000AA -:10C69000000000000000000000000000000000009A -:10C6A0000800000000000000000000000000000082 -:10C6B0000000000000010101410100000000000035 -:10C6C0000000000000000000000000010000000069 -:10C6D000000000000000000000000000000000005A -:10C6E000000000000000000000000000000000004A -:10C6F000000000000000000000000000000000003A -:10C700000000000000000000000000000000000029 -:10C710000000000000000000000000000000000019 -:10C720000000000000000000000000000000000009 -:10C73000000000000000001021100410000500009F -:10C7400000000000000000080000000000100000D1 -:10C7500000000000000000000000000000000000D9 -:10C7600000000000000000000000000000000000C9 -:10C7700000000000000000000000000000000000B9 -:10C7800000000000000000000000000000000000A9 -:10C790000000000000000000000000000000000099 -:10C7A0000000000000000000000000000000000089 -:10C7B000000000000000000011800300090002C01A -:10C7C0000000000000000000000000000000000069 -:10C7D0000000000000000000000000000000000059 -:10C7E0000000000000000000000000000000000049 -:10C7F0000000000000000000000000000000000039 -:10C800000000000000000000000000000000000028 -:10C810000000000000000000000000000000000018 -:10C820000000000000000000000000000000000008 -:10C8300000000000000000000000000201000000F5 -:10C8400000A0000000000000000000000020000028 -:10C8500000200000000000000000000000000000B8 -:10C8600000000000000000000000000000000000C8 -:10C8700000000000000000000000000000000000B8 -:10C8800000000000000000000000000000000000A8 -:10C890000000000000000000000000000000000098 -:10C8A0000000000000000000000000000000000088 -:10C8B0000000000000000000000000010001000175 -:10C8C0000000000000000000000000000000000068 -:10C8D0002000000000000000000000000000000038 -:10C8E0000000000000000000000000000000000048 -:10C8F0000000000000000000000000000000000038 -:10C900000000000000000000000000000000000027 -:10C910000000000000000000000000000000000017 -:10C920000000000000000000000000000000000007 -:10C93000000000000000000800000040001000217E -:10C940000005002000200000000000000000200082 -:10C9500000000300000000000000000000000000D4 -:10C9600000000000000000000000000000000000C7 -:10C9700000000000000000000000000000000000B7 -:10C9800000000000000000000000000000000000A7 -:10C990000000000000000000000000000000000097 -:10C9A0000000000000000000000000000000000087 -:10C9B00000000000000000000000000000000080F7 -:10C9C00021400300050000000000000000000000FE -:10C9D0000000004000000000000000000000000017 -:10C9E0000000000000000000000000000000000047 -:10C9F0000000000000000000000000000000000037 -:10CA00000000000000000000000000000000000026 -:10CA10000000000000000000000000000000000016 -:10CA20000000000000000000000000000000000006 -:10CA300000000000000000000000000000000000F6 -:10CA40000010018300000000000000000000000052 -:10CA500000000000000000000000000000000000D6 -:10CA600000000000000000000000000000000000C6 -:10CA700000000000000000000000000000000000B6 -:10CA800000000000000000000000000000000000A6 -:10CA90000000000000000000000000000000000096 -:10CAA0000000000000000000000000000000000086 -:10CAB0000000000000000000000000000000000076 -:10CAC00000000000810000E0000000000000000005 -:10CAD000000000000000000007000000000000004F -:10CAE0000000000000000000000000000000000046 -:10CAF0000000000000000000000000000000000036 -:10CB00000000000000000000000000000000000025 -:10CB10000000000000000000000000000000000015 -:10CB20000000000000000000000000000000000005 -:10CB300000000000000000000000000000000000F5 -:10CB400000000000000000000000000000000000E5 -:10CB500000000000000000000000000000000000D5 -:10CB600000000000000000000000000000000000C5 -:10CB700000000000000000000000000000000000B5 -:10CB800000000000000000000000000000000000A5 -:10CB90000000000000000000000000000000000095 -:10CBA0000000000000000000000000000000000085 -:10CBB0000000000000000000000000000000000075 -:10CBC0000000000000000000000000000000000065 -:10CBD0000000000000000000000000000000000055 -:10CBE0000000000000000000000000000000000045 -:10CBF0000000000000000000000000000000000035 -:10CC00000000000000000000000000000000000024 -:10CC10000000000000000000000000000000000014 -:10CC20000000000000000000000000000000000004 -:10CC300000000000000000000000000000000000F4 +:10BFC0000000000000000000040C143CEFFF2CFFF8 +:10BFD000000000000000000000005A5A5A5A82BEB9 +:10BFE00082BEA5A5A50030F330F30082C38200AA6B +:10BFF0005555BF1FBF1FF0F03C3C00C303035E5EFE +:10C0000010155500EBEBA903AA000000000000008A +:10C01000000000000000000000000505BE14AAF0AA +:10C0200000F0000000000000000000000000000020 +:10C030000000000000000000000000000000000000 +:10C040000000000000000000000055FF55FFC70081 +:10C05000040000000000000000000000FFFF0000DE +:10C0600082BE82BEA5A5242430F330F3C082C082F4 +:10C0700000AA0000B010B010F0F03C3C00C3030375 +:10C080000E0E1015550041410303AA0000000AFAE4 +:10C09000D5D5C3D7020240000082C0854000000011 +:10C0A00010008885880884004008C00388000200CA +:10C0B00084004040200820804040820588004100E4 +:10C0C000040441040000848020008282A00804202F +:10C0D0000210210400038809200084102008400574 +:10C0E0004000080220040000841040098400100071 +:10C0F0002000400320000400100488000284820411 +:10C1000020842010028484800002A000410089095C +:10C11000880083028484410000900004000410021F +:10C12000008200040002218240002085009020004F +:10C1300010900000100141000002000300004002C6 +:10C140000200800004002000002000020020009077 +:10C1500009A14000080000000484050009840000D3 +:10C1600004000000840500010400008300A000001A +:10C1700000000300008210000000000220004003C5 +:10C1800000910405040109050002000002000202FA +:10C19000200000002001410490000400030040033F +:10C1A000880090100020100082830200080020897F +:10C1B00088008210A009830200000000094084105A +:10C1C0000340031002000340004190080008404073 +:10C1D0000000000500050240000002000108820383 +:10C1E00000000100208002892010080800080010CB +:10C1F00000100200000082808410210085000010E1 +:10C2000020100210904008100110880401840040A2 +:10C210000000410000200405081003080008400841 +:10C22000820003080082400082000202000002082F +:10C23000040400080008040040844010034008087B +:10C240000000020984048284020100400089041075 +:10C2500080080010000809088982000000404000A2 +:10C260000240020040848004201080080200008404 +:10C2700004042084098202400310000820842084E2 +:10C280000508044104080501800820880041400594 +:10C2900000900904881020000200820888214010C4 +:10C2A0000003A00400004008000810A10440040599 +:10C2B0001000000800400020000588200840A10070 +:10C2C00000100110000500000103002140000041A2 +:10C2D0008811002100054020000300090000000033 +:10C2E000000002C1001008000021901000030004AB +:10C2F0000804020400100003400200000000900047 +:10C3000000080200000504040400900090080208E0 +:10C310000808100800044004880888008804000009 +:10C32000080041000001030000000400911000001B +:10C330000008412000000900000000000000800308 +:10C34000021021850801000000A00200000000008A +:10C35000080003000088030008210800000800000E +:10C360000084000002100000088241820082000068 +:10C3700000044000080404C100080084410011903A +:10C380000884031008A00800030100004000008892 +:10C39000400000A003000801808308001002030091 +:10C3A00010082021400400048800000082090000D9 +:10C3B000A009829100000811042140000802A14058 +:10C3C00082044080028082040805820008098210ED +:10C3D00002202100108082000840004000009000F0 +:10C3E000000000004000100082808241020008002E +:10C3F0002040C00008401111C0110908400208097E +:10C40000111082080010A000A0008800020089041A +:10C410000809020040040200082108200002080563 +:10C42000080090000000202103010482000000A009 +:10C43000088241000004000041000082020000C0A8 +:10C440004000008400402010088400C0000805005F +:10C4500000C000010490212040200088001000004E +:10C4600000000000400802020000111000008010CF +:10C47000919080C0050003880800030002040010AA +:10C4800021C040C0000021C02120409011A083C0E5 +:10C4900040044000002000002100C00400C0400112 +:10C4A000418820881040840208000009C000402014 +:10C4B0000820040008212000C0210821C00000003D +:10C4C000820800000000002000C008201021002089 +:10C4D000C003000082000008000008000000010006 +:10C4E000820010000000080000100800400003084F +:10C4F00008009000004000400020400840058421D2 +:10C5000000418200A000840002004000C021080019 +:10C51000000082008400000008210084A0000020A8 +:10C52000200010410000000000000000000000009A +:10C5300080000000000000008800000002200000D1 +:10C54000000000002008000003A00010000000040C +:10C5500000000000080800000000000000042100A6 +:10C56000040009000020000000000000000080001E +:10C570008205000002080000001000001182000087 +:10C5800000904190000411000000082021200000CC +:10C590001004000400040500042080000805008247 +:10C5A00000008800034000000004824100020810DF +:10C5B000820000000000000000099000000520003B +:10C5C00000000240C0040000000020000021C00064 +:10C5D000842000008808000204408220000000201F +:10C5E000000000000000000000008283820240087A +:10C5F00020000408A000000000850000C003042003 +:10C6000008080800410002408221000010100100CB +:10C6100090909005102120020403004008809000B3 +:10C6200020000290002004002041000000040001CE +:10C630000500094002040200202005400308088884 +:10C6400088080000000000004100000000200000F9 +:10C6500003C0000102000900080180000200000080 +:10C660000001080000000000008800000002000037 +:10C67000000003000000000000040910000000900A +:10C680000288000080088800030021000000118457 +:10C6900002000010002002C01104000021840004E8 +:10C6A00004000884000408400000840000008900A1 +:10C6B00020000000084002048209108201010000ED +:10C6C000C001000100000088008400880988008201 +:10C6D0000010C09100C02040C090C02040008404E1 +:10C6E0000282820810000090008488100000A000E0 +:10C6F000830100018200400001009000400000889A +:10C700004004008282820809090082080404109013 +:10C71000000290022090000103002000840000C06D +:10C720000020859104020001000188010001000041 +:10C730000800400000008040030400040088084115 +:10C740004003C108001000000000008000002040ED +:10C7500000030011002004800080000080008000A1 +:10C760000000008080000000008000000000000049 +:10C7700000021003000880090005030309000003FC +:10C7800000800080000080800020100380208080D6 +:10C790001000108089800000200883100403000529 +:10C7A00004C00983C005008200202003201000215E +:10C7B0000500080002104100200021008200000353 +:10C7C00041000400080440100800089004000480A0 +:10C7D0000000002180808041800080C100418000F5 +:10C7E00000008004800800000000809180808000AC +:10C7F000000041000200020208C00200840085001F +:10C80000C1020000000000000000000080000000E5 +:10C810008003800400038084000008002000C10021 +:10C82000108308020500831108212000400010A099 +:10C830002184000001000000010041200500A1004A +:10C84000900000200000010001000100010401002F +:10C850000010A0400000A0A0C001400040099001CD +:10C86000C08200000201820482000400900908A036 +:10C870001000000002202000010020A010A01100E4 +:10C88000A000C1210800A00008000800400004002A +:10C8900010000801A0019000A041400000A0A000ED +:10C8A000A0002003A0882000A000A12101C0110049 +:10C8B0008505910400000000020101001003011031 +:10C8C00001A1108800000100A1010100100000007A +:10C8D0000001C00040400082009010C0C1880020CC +:10C8E000404100C0040100040002902100880002C1 +:10C8F000009082100001009000A0034100A0009170 +:10C900000010001000C00400008200402088009049 +:10C9100001410182A0A188C102200008038801050D +:10C920000100001100A020A005C0A00882020000A4 +:10C93000A00008010000004100028021080000045E +:10C9400008854021008500201141851011048002D6 +:10C950000000002100000000210011008080820002 +:10C96000008500A000898020002000840041000094 +:10C9700000000000000000010003030803A1008084 +:10C980000009098341880089800000000000000040 +:10C990000003102041A080900002001000108421AC +:10C9A0000420100520A1081000412008C0409082FA +:10C9B0000000030580100900008000000000001145 +:10C9C00041A01000408008414090104041000311F8 +:10C9D0008080000080000011A14082001000020051 +:10C9E0008041802080C00080000000100080000096 +:10C9F0000000808400800000000121C02011100090 +:10CA00000840218202080880050300080080008099 +:10CA10000000212021081000000080058090008087 +:10CA200000000880050003801010210410A0108071 +:10CA30001011028002800200030500C00000000007 +:10CA4000000001A001820040010100C001000000BF +:10CA500001001002100010008800C101A1A088A0F0 +:10CA60000800C001200040C010040000200582041E +:10CA7000200090000205A002820000010140008217 +:10CA800001000101010501030182000000000020F6 +:10CA9000000800001101000811209000C00020A132 +:10CAA0002082900001C000080084010001090020DC +:10CAB0000104010185C0054010104000000000E0A5 +:10CAC000000082000000000000000012000000E0F2 +:10CAD00000005021000000000000000000000000E5 +:10CAE0000000000A000000000700484200000000AB +:10CAF0000700000000000000070000000000000028 +:10CB0000000000000000000000E000000000000045 +:10CB1000000000000000000000000000000600000F +:10CB200000E000000000000000E0000050000000F5 +:10CB300000E000000000000000E0000060000000D5 +:10CB40000000000000000000000081F6E7F6000091 +:10CB500000000000000003C300C000000000242407 +:10CB600000FFC0C0D0DC00000000000000007E1804 +:10CB70007E18F606F606040C0C0C4000400000007F +:10CB8000000000006660666F00000000000000000A +:10CB9000000000000000FFFF3030CFCF2C2C2C2CE9 +:10CBA000002020206602FFFB00000000C3C3FF003E +:10CBB00000000000F0C0F3C33F3936300000000031 +:10CBC00000000000000000000000000099F6FFF6E1 +:10CBD000000000000000000003C303C300000000C9 +:10CBE00024246060C0C0D3DF00000000000000000B +:10CBF0001E1E1E1E0606F6F604040000400000007D +:10CC00000000000000006C606C6F0000000018184D +:10CC100000100000000000F00FFF3030CFCF252DB6 +:10CC20004343000000006000FFFF000000003C3CA8 +:10CC3000FF0000000000FCCCFFCF3F393630000081 :10CC400000000000000000000000000000000000E4 :10CC500000000000000000000000000000000000D4 -:10CC600000000000000000000000000000000000C4 -:10CC700000000000000000000000000000000000B4 +:10CC600000000000000000000000430840000084B5 +:10CC7000218600000000000000000000000000000D :10CC800000000000000000000000000000000000A4 :10CC90000000000000000000000000000000000094 :10CCA0000000000000000000000000000000000084 :10CCB0000000000000000000000000000000000074 -:10CCC0000000000000000000000000000000000064 -:10CCD0000000000000000000000000000000000054 -:10CCE0000000000000000000000000000000000044 -:10CCF0000000000000000000000000000000000034 -:10CD00000000000000000000000000000000000023 -:10CD10000000000000000000000000000000000013 -:10CD20000000000000000000000000000000000003 -:10CD300000000000000000000000000000000000F3 -:10CD400000000000000000000000000000000000E3 -:10CD500000000000000000000000000000000000D3 -:10CD600000000000000000000000000000000000C3 -:10CD700000000000000000000000000000000000B3 -:10CD800000000000000000000000000000000000A3 -:10CD90000000000000000000000000000000000093 -:10CDA0000000000000000000000000000000000083 -:10CDB0000000000000000000000000000000000073 -:10CDC000000000000000000000610006000D0000EF -:10CDD00000610007C0070000000000000000000024 -:10CDE00005610A0E050D00A0000000000000000013 -:10CDF0000000000000000000000000000000000033 -:10CE00000000000000000000000000000000000022 -:10CE10000000000000000000000000000000000012 -:10CE20000000000000000000000000000000000002 -:10CE300000000000000000000000000000000000F2 -:10CE40000000000000000000000000000000003CA6 -:10CE5000FF3C000F0F0F1F0F0F0F0000000000001E -:10CE600000000000000000000000000000000000C2 -:10CE700000000000000000000000000000000000B2 -:10CE800000000000000000000000000000000000A2 -:10CE90000000000000000000000000000000000092 -:10CEA0000000000000000000000000000000000082 -:10CEB0000000000000000000000000000000000072 -:10CEC0000000000000000000000000000000000062 -:10CED000003CFF3C0A0A0F0F0A0F0F0F0000000072 -:10CEE0000000000000000000000000000000000042 -:10CEF0000000000000000000000000000000000032 -:10CF00000000000000000000000000000000000021 -:10CF10000000000000000000000000000000000011 -:10CF20000000000000000000000000000000000001 -:10CF300000000000000000000000000000000000F1 -:10CF400000000000000000000000000000000000E1 -:10CF5000000000000000300000000F3C0FFF000048 -:10CF6000000000000000FFFF3C3C0000000000004B -:10CF700000000000000000000000000000000000B1 +:10CCC000000000000000000000000000FF3C0F66B4 +:10CCD0000BDB09990000000000000000C1C1C1C1C8 +:10CCE0000000000099F099F04242000000000000AE +:10CCF00000000000FF36FF36096F6F6F04460446E0 +:10CD000009096F6F0000000000003D3D3434000051 +:10CD1000000000020042FFBF0FBFE760F6F07C7C1E +:10CD20007E7E0043000003030000C2C200C3000077 +:10CD3000000090F9FF0000FF6666B1B1F3F3000058 +:10CD400000000000FFFF0000000000000000003CA9 +:10CD50000F660FFF0DBD0000000000000000C101C4 +:10CD6000C10100000000C3FFC300000000810000FB +:10CD70000000000000000036003609096F09044673 +:10CD8000044624BD24BD0000000000003D3D3434B5 +:10CD90000000000000000000F0800080F660F6F067 +:10CDA0007C7C7E7E000000000343000082820082C3 +:10CDB00000000000F99696600F0F3C3C00FF00FF5A +:10CDC00000000000606F606F00610007000D000050 +:10CDD00000614006000D0000006100050009000030 +:10CDE00000613006000D0000A0610006009D0005F6 +:10CDF0001061200E004D00080061000E000D0000C3 +:10CE000000003E0800000000000000610006000D68 +:10CE100000000061000500990005000000000010FE +:10CE2000000000610006001D0000A0610007000D69 +:10CE30000000006100010009000100615007000DC1 +:10CE4000000000610003000D000000000000FFC3AF +:10CE5000FFC33F3F0AFADFD0DFD0FFFFEBAFF0F0B8 +:10CE6000F0F000000000C300C300F5FFF5FF000074 +:10CE7000000000000000A0A0A0FF000000003A3A5F +:10CE8000303F00000000000000000000A8A80808D3 +:10CE90000C000C0000B0FFFFFFFFFFFF00000000D0 +:10CEA00000000000000000000041505100000000A0 +:10CEB0003CAAF0FF3CBF00834B0A5F0A0000F2FE71 +:10CEC00030100010030F030A05550555000000003F +:10CED0005F435F4330300AFAF0F0FFFF0000410586 +:10CEE000F0F4FCF400000000C300C300EB00EBFF13 +:10CEF0000000000000000000A0A0A0FF0000000053 +:10CF00003A3A303F00000000000000000000A8088E +:10CF1000A8083C003C0000F0FFFF3C3F3C7F0000C5 +:10CF20000000000000000F00FFFF555555550000A0 +:10CF300000003CAAF00028AB008343025702000027 +:10CF400000003030303000000000F555F55500008D +:10CF50000000003C550055FF3C0F55C055C05555CD +:10CF6000E4E700000000000000005F5FFF0FD7D77C +:10CF70003F0300000000000000000000000000006F :10CF800000000000000000000000000000000000A1 -:10CF90000000000000000000000000000000000091 -:10CFA0000000000000000000000000000000000081 -:10CFB0000000000000000000000000000000000071 -:10CFC0000000000000000000000000000000000061 -:10CFD0000000000000000000300000000F3C0F00C7 -:10CFE0000000000000000000C3C3000000000000BB -:10CFF0000000000000000000000000000000000031 +:10CF90000000000000C003C3AAAA00C3F0F00F0FF6 +:10CFA0000000000000000000FF50FFFA0000000039 +:10CFB0000000000000000000F555F55540555055A3 +:10CFC00005AF00005F5F1C5FF5C305C3FDFFF8FA06 +:10CFD0000000000000F0550055003C0F00C000C0EC +:10CFE0000000F0F341717D71000000005353F30322 +:10CFF00014143F03000000000000000000000000C7 :10D000000000000000000000000000000000000020 -:10D010000000000000000000000000000000000010 -:10D020000000000000000000000000000000000000 -:10D0300000000000000000000000000000000000F0 -:10D0400000000000000000000000000000000000E0 -:10D0500000000000000020000400200020008800E4 -:10D0600088002000200000000000000000000000F8 -:10D0700000000000020000000000000000000000AE -:10D080000000200020000000880000800000000058 -:10D09000000000030080008000200020000000004D -:10D0A0000000000000800000000000000080000080 -:10D0B0000020002000000080000000200000000090 -:10D0C0000000002000000000000000000000000040 -:10D0D0000000000000000000000000000000000050 -:10D0E000000000000000000200000002000000003C -:10D0F000000000040000000000000000000000002C -:10D10000000000000000000000000000000400001B -:10D1100000000004000000200020000100010000C9 -:10D1200000000000000000040000000000000020DB -:10D1300000000001000100000020000000010000CC -:10D1400000000000000100000000000000000000DE -:10D1500000000000000000000000001002000000BD -:10D160000180000088000000000000210000000095 -:10D1700000000000000000000000000000000000AF -:10D18000000000000000000001800000000000001E -:10D19000000000000000000000002000000000006F -:10D1A00000000000880000000000000000000000F7 -:10D1B000000000000000000000000000000000006F -:10D1C000020000000000001002000000000000004B -:10D1D000000000000000000000000000000000004F -:10D1E0000000042000080000000000020000000011 -:10D1F000000000000000000000000400000000002B -:10D2000000000000000800000000200400000000F2 -:10D21000000000000000000000000000000000000E -:10D220000000000004000084000000000000000076 -:10D2300000000000000000000000000000000000EE -:10D2400000000000000000000000000000000000DE -:10D2500000000000000000000000000000000000CE -:10D2600000030000000000000000000000000000BB -:10D27000100000000000000000000021000000007D -:10D28000000000000000000000000002000000009C -:10D29000000000000000000000000000000000008E -:10D2A000000000000000000000000000000000007E -:10D2B0000000000000000000000900000000000263 -:10D2C000000000000000000000000000000000005E -:10D2D000000000400000000000000000000000000E -:10D2E0000300030000000000000000001000040024 -:10D2F000100010000000000000000000000000000E -:10D30000000000000000000000000000000100001C -:10D31000000000000000000000000000000000000D -:10D3200000000000000000000000000000000000FD -:10D3300000000000000000000000000000000000ED -:10D3400000010000000000000000000000000000DC -:10D3500000000000000100000000000000000000CC -:10D3600000000000000000000000000000000000BD -:10D3700000000000000000000000000000000000AD -:10D38000000008000800080008000800080000006D -:10D390000000A0000000000000008200000000006B -:10D3A00001000000000000000000000082000000FA -:10D3B00000000000A0000800000000008200000043 -:10D3C000000000000000000000000000000000005D -:10D3D000000000000000000000000000000000004D -:10D3E000000000200000000000000000030000001A -:10D3F00000004100400008000000000000000000A4 -:10D400000000000000000000000000000800000014 -:10D410000000000000000000030003000000030003 -:10D42000000040002100000040000000000000005B -:10D4300000000000000000000800000000000000E4 -:10D4400000000000000000000000000000000000DC -:10D450000000000041880000000000000000000003 -:10D460000000000000000000000000000000820337 -:10D4700000000000000800000000000000000000A4 -:10D48000000000000000000000000000000000009C -:10D49000000000000000000000008204820000097B -:10D4A00082000000000000000000000000000000FA -:10D4B000000000000800840000000000C000A00080 -:10D4C0008400C000C010C0000240C0000000000581 -:10D4D00084000005000000000000000000000000C3 -:10D4E000000000000000000020000000080008000C -:10D4F0000000030000000000000000000000000029 -:10D500000800000000000000000000000000000013 -:10D51000000000000000000000000000000100000A -:10D5200000000000000000000000000000000000FB -:10D5300000000000000000000000000000000000EB -:10D540000000000000000001000080010000000059 -:10D5500000000000000000000000000000000000CB -:10D5600000000000000000000000000000000000BB -:10D57000000000000000002100000000000000008A -:10D58000000000000000000000000000000000009B -:10D590000000080000000000000000000000000083 -:10D5A0008200000000000000008000000000000079 -:10D5B00000000000820000000000080000000000E1 -:10D5C0000000000084000000400200000000002174 -:10D5D00000000000840000000000000200000010B5 -:10D5E0000000000000000000000000000000030038 -:10D5F000000000000000000000000000000000002B -:10D60000000000000000000000000000000000001A -:10D61000000000000000000000000000000000000A -:10D6200000000000000000000000000200000000F8 -:10D6300040000000000000000000000000000000AA -:10D640000000000000000000000080010000000059 -:10D6500000000000000000000000000000010000C9 -:10D660000001000000004002000000000000000077 -:10D670000000000800000000008200000000000020 -:10D68000000000000000000000000000000000009A -:10D690000000000000000000000000010000000089 -:10D6A0000001000000010001000000000000000077 -:10D6B0000000000000000000000000000101000068 -:10D6C00000000000020000200088000200A000030B -:10D6D000000202020000000000000000900000A113 -:10D6E0000001100100000000000000000000000028 -:10D6F00000000000008000000000000000000000AA -:10D700000000000000000000000000000000000019 -:10D710000000000000000000000000000004000005 -:10D720000040000800000010400800000000000356 -:10D7300000000003000300000000000000001108CA -:10D7400000020041002083000000000000800080F3 -:10D7500000A1008500A000000000000000000020E3 -:10D7600000A00010001000000000000000000000F9 -:10D7700000000000000000000000000000000000A9 -:10D780000000000000000000000000000000000099 -:10D790000000000000000000000000000000000089 -:10D7A0000000000000200000000000000000000059 -:10D7B0000000000000000000000000000000000069 -:10D7C0000000000000000000800000218080800038 -:10D7D00000808000800000118000800080008000B8 -:10D7E00000000000800000000000000000000000B9 -:10D7F0000000000000000000000000000000000029 -:10D800000000000000000000000000000000000018 -:10D810000000000000000000000000000000000008 -:10D8200000000000000000000000000000000000F8 -:10D830000000000000080000009000000000000050 -:10D8400000000000000000000000020000001010B6 -:10D85000080000020200A000000002000200020016 -:10D86000080008081000A0000000000000000000F0 -:10D8700000000000000000000000000000000000A8 -:10D88000C0000000000000000000000000000000D8 -:10D890000000000000000000000000000000000088 -:10D8A0000000000000000100000000000000000077 -:10D8B000000000000000000009000100000000005E -:10D8C000000000000000000001000000000000A0B7 -:10D8D0002020081020200102000802100000000093 -:10D8E00000000000000201A00090A09000000000D5 -:10D8F0000000000000000000000000000000000028 -:10D900000000000000000000000000000000000017 -:10D910000000000000000000000000000000000007 -:10D9200000000000000011000500110000000000D0 -:10D9300000000000000020000000050002000000C0 -:10D9400000000000000000002000080000000000AF -:10D950000080000080800000038003004000000081 -:10D9600000000000000000801000050080000000A2 -:10D9700000000000000000000000000000000000A7 -:10D980000040000000000000000000000000000057 -:10D990000000000000000000000000000000000087 -:10D9A0000000000000002100110040000200000003 -:10D9B0000000000000000000000000400000000027 -:10D9C0000000000000000000000000000000000057 -:10D9D00080098040008080001121084010801000E4 -:10D9E000000500C0008000000021210010000000A0 -:10D9F0000000000000000000000000000000000027 -:10DA00000000000000000000000000000000000016 -:10DA10000000000000000000000000000000000006 -:10DA200000000000000000000100010000000100F3 -:10DA300000000000000000000000000000000000E6 -:10DA400000000000000000000000000000000000D6 -:10DA50000000400004200002080000018988010243 -:10DA6000100000000008000200000001000000009B -:10DA700000000000000000000000000000000000A6 -:10DA8000000000000000070000000000000000008F -:10DA90000000000000000000000000000000000086 -:10DAA00000000000000000000000000000E0000096 -:10DAB0000000000000E00000000000000000000086 -:10DAC000070000000000000000000000000000E06F -:10DAD000000000000081000007000000008100003D -:10DAE00007000000008100000700000000000000A7 -:10DAF0000000000000000000000000000000000026 -:10DB00000000000000000000000000000000000015 -:10DB10000000000000000000000000000000000005 -:10DB200000000000000000000000000000000000F5 -:10DB300000000000000000000000000000000000E5 -:10DB400000000000000000000000000000000000D5 -:10DB50000000000000000000000000005000C300B2 -:10DB6000C300FFFC000000000000000000000000F7 -:10DB70000000830383030000000000000000000099 -:10DB80000000000000000000000000000000000095 -:10DB90000000000000000000000000000000000085 -:10DBA0000000000000000000000000000000000075 -:10DBB0000000000000000000000000000000000065 -:10DBC0000000000000000000000000000000000055 -:10DBD00000000000000000000028000000005000CD -:10DBE000C300C300000000000000000000000000AF -:10DBF0000000000030203030000000000000000075 -:10DC000000000000000000003C3C555500000000F2 -:10DC10000000000000000000000000000000000004 -:10DC200000000000000000000000000000000000F4 -:10DC300000000000000000000000000000000000E4 -:10DC400000000000000000000000000000000000D4 -:10DC500000000000000000000000145414540000F4 -:10DC60008200000100C3F0F0F0F0000000000001AD -:10DC7000000300AA00AA30003000000000000000ED -:10DC8000000000000000000000003C3C5555000072 -:10DC90000000000000000000000000000000000084 -:10DCA0000000000000000000000000000000000074 -:10DCB0000000000000000000000000000000000064 -:10DCC0000000000000000000000000000000000054 -:10DCD0000000000000000000000000001454145474 -:10DCE00082008200004100C3F050F05000000000AC -:10DCF0000001000100AA00AA30003000000000006E -:10DD0000000000000000000000000000000000080B -:10DD10000000000000000000000000000000000003 -:10DD200000000000000000000000000000000000F3 -:10DD30000000000000610004000D0000006100030D -:10DD4000000D0000000005610A0E050D00A0000096 -:10DD500000000000000000610002000D0000000053 -:10DD60000038000000008061003E000D000000004F -:10DD700000380000000000614006000D00000000B7 -:10DD80000000000000000000000000000000000093 -:10DD90000000000000000000000000000000000083 -:10DDA0000000000000000000000000000000000073 -:10DDB000000000000000FF0FFC0C0000000000004D +:10D010000000AAA0A2A005C505C5AAAAC3C3000016 +:10D020003C14000000000000000055FA55FA000012 +:10D0300000000000000000000000F3C300000055E5 +:10D04000005514BE0000435F435FF5C305C30D05E3 +:10D050000800114020004005400008000240A000E8 +:10D0600008108800200000101000881088000400BC +:10D0700084042000000000808400049100008400EB +:10D0800010800002048500002000C0000002400063 +:10D0900004040003010400080000080020008800C8 +:10D0A00088008200020040104000000485008403D4 +:10D0B00004008403880010800000000400000002C7 +:10D0C000C10000048800002020808802880020031E +:10D0D000840010000890800000020090C0028003CD +:10D0E000004080C140020090000109200002404041 +:10D0F0000000200240000000000409901008000217 +:10D1000000008002000140042100090040020900E3 +:10D110000000C0200000020000000000800040006D +:10D120000500000000000000C090000000020200A6 +:10D1300000C040000500000241200004400009003A +:10D140002008200200080340000100100204000231 +:10D1500020000000200401040210840008200202C4 +:10D160000540021002000404030582090280020047 +:10D170001003080040050200020308100808A1116E +:10D180000840001008100003010000000000A0107B +:10D190000420A1900080000000000040901090400A +:10D1A000044190040200090000400009001004102E +:10D1B00002410000081002000100022000032000CC +:10D1C0000584400382C04080400000820489000042 +:10D1D0000404020900000200208880040400808802 +:10D1E00080C002894185051084880882049020044B +:10D1F00084848088890084888082858803038402EF +:10D200001008000100889184000440100384040089 +:10D210000489800808400020000041000089028441 +:10D220000085052004000384C00404C12082000896 +:10D230004008000040048908000020000009009018 +:10D2400080842002800400028410840800210902E6 +:10D2500004104108840020840400400004082003D6 +:10D26000020800080021200805000408040804033F +:10D270000000040000400410000000000005080049 +:10D2800083000010000408080008080800080000D7 +:10D290004088002082008408001100000000401037 +:10D2A000000800000008000820080000000810081E +:10D2B00000210010000000210005402100A1001005 +:10D2C00000820400000005040004840408C100007A +:10D2D00000000408000400030100000041100800E1 +:10D2E000800000000500008400008208008880841F +:10D2F00000840002100800000084000841A041A042 +:10D30000211002000020034040A00300880000001C +:10D3100000000010050103000300030200000000EC +:10D320000000000808084000000000040388030013 +:10D330000000030021010800402000001000040448 +:10D34000020221054102034020A1088508010010C6 +:10D3500041002140908200000084400021A0A000F4 +:10D36000A0210811822090110804820001100009F8 +:10D37000C000C011C003A040A00000004005C000D4 +:10D38000824120001000080908414040400800097F +:10D3900020410000104000000400041008000000BC +:10D3A000C0008820050008002010C00008101000F0 +:10D3B00020048221004109041000820440414010F1 +:10D3C0009009C10504040884080084C00000A0106E +:10D3D000C010002102001021081000009011100858 +:10D3E00000000300009008000000C190032004002A +:10D3F00009841110009021040000210008882010E9 +:10D4000000000400910000000000000091000003F3 +:10D41000000082C00308000021000000C001008855 +:10D420000000000000A008008000000021A0000013 +:10D43000409010A02010000440840400110000005F +:10D44000908300A00420001021040000024021006D +:10D450000884200002044104A00000C0091020003C +:10D46000001100000000824110008400021002053B +:10D47000A0000000828000082080C0000821C008B1 +:10D4800000110041000800000800000009800000B1 +:10D490000041000090000005000000001041000065 +:10D4A0000000000010000000A000000000000000CC +:10D4B0000000C00508000000C0808200900010003D +:10D4C0000821824141A1A00011410100000982C050 +:10D4D00010032000000008208200002000401041BE +:10D4E0000040000200A000840002400000049001FF +:10D4F00088900090009005020308800400040084D6 +:10D5000040A0020000001010040000A0000008105D +:10D51000000000000004080005000000034008406F +:10D5200000000000000009A0000021002190000080 +:10D530002000000408088004000000020000119090 +:10D540008500400011C0200409822000200010083E +:10D55000001000408320000005000200038810C076 +:10D560000800080010090008000000092000004021 +:10D5700000100000080090008288001100000004E4 +:10D580000008824100100000080288080020000501 +:10D5900082890000080004410840000000000000EB +:10D5A0000021042040000000000082000000000074 +:10D5B00000000000000008210000004000000103FE +:10D5C00090004011C00008040041A003400804007E +:10D5D00000002010A0000200000404020040A1C1CD +:10D5E000902100000000400400000084000880003A +:10D5F0004001080003000000000411100088080228 +:10D60000000205000000000000000000000000080B +:10D610000200000200000000000080000000000086 +:10D62000080040C0080100000000000000080000E1 +:10D630000004090021000020030002100010020075 +:10D6400002C00008008220004120000021040002E6 +:10D6500000000000840000020000080000000090AC +:10D6600040200000000000000800010082002000AF +:10D67000000111C0000200880010A0A0A00091C00D +:10D6800040400200010084009000100000000000F3 +:10D690000000000000000400000001030008010178 +:10D6A000001000000000000004000000882000407E +:10D6B000000408400000010090000000A0C0110814 +:10D6C000C0A00408C0000000400002008501409096 +:10D6D00003A0418403A000900090820808880141C3 +:10D6E000908382400000010008000000022010101A +:10D6F00005200003A0800000008000004000A00082 +:10D700000300000080001000000080000000000006 +:10D7100000000000000009008000000004C100A11A +:10D720000202008500000000000000000000200050 +:10D730000080008080000000020000000000808067 +:10D740008380008000808800090080000000114074 +:10D75000808582C10288118321030540000480086E +:10D7600003C00008000900002100800000008000C4 +:10D770001040A08083830000002100808000910081 +:10D780009000A00040100000000080000000040095 +:10D79000C0009100C000080002002000C12000006D +:10D7A000000400000002000000050000000000006E +:10D7B000000000A1002000000000000000000000A8 +:10D7C00040004104040404830000800000000000C5 +:10D7D0004180211105118803208085098400009172 +:10D7E00080000440A089118204808500040040412B +:10D7F000044001004084C103A000A00082C0C020FA +:10D8000002A010004000C1018400040010000000CC +:10D81000010010008500C084052040009100C10077 +:10D8200000100000002000000000000200080002BC +:10D8300000000000008200209020820020001000E4 +:10D8400088009184A000908590890000020000006B +:10D850008200840201410589109121C08400A10049 +:10D8600090A002108800A111A08821080200910058 +:10D87000C0010001010100000000889000880084C0 +:10D88000A0C04041004010C1A0A100100000001045 +:10D8900000C100C00008000200C000000001A0009C +:10D8A0000000400000000000000000C000040082F2 +:10D8B00000820000C01000880004A0C00001000029 +:10D8C00000010001C0020002A0832183000800893A +:10D8D000004100C110A10040C01083114090091008 +:10D8E00082030289820201038541110300010000C5 +:10D8F00000010000031008020041000000000000C9 +:10D900000080838088A00009802189A00000000594 +:10D9100000A000C1000000800080008000410004E1 +:10D920008000000000004000110000000000000026 +:10D93000000000000000808000800080C08000089F +:10D9400000100020000480020041800409C0009003 +:10D9500000A000A000C100022085008891918009EC +:10D96000402180C0894000110320218890100010C0 +:10D970000040002103059008A0900300800880006B +:10D9800080400000000020004000038008400000AC +:10D9900000400000000000800000008000404100C6 +:10D9A000038010000811041091000900830000009A +:10D9B00000000000000000000000800080008000E7 +:10D9C0000000008000800000C10010880480030374 +:10D9D000004000000080000010A003A04100880368 +:10D9E0001104080905000004C108C1082100090349 +:10D9F000418421002100040908110405C10210011D +:10DA0000C00002A0A0C0880000820184008401013F +:10DA1000000000900090000000080040000200009C +:10DA2000019000040100010084010500210088002C +:10DA3000C000040090000000000000008200048488 +:10DA4000A0000000000800C00000110088A10484AC +:10DA5000410100000004000800001105214082047B +:10DA6000A100A084218300889000C1C0042001404F +:10DA7000080001C1001001200000000000E00000CB +:10DA800000000000000007000082000000E0070026 +:10DA900000000000000007000000000000E000009F +:10DAA00000000000000000000000810002E0000013 +:10DAB000000000000000070000000000000000005F +:10DAC00000005000000000000000000A00000000FC +:10DAD000000041000000000000006000000000E0C5 +:10DAE00007000000000000E00000880000000000C7 +:10DAF00007000000000000000000841270FF7FFF9C +:10DB00000000000002000F0F0F1E00550000000073 +:10DB10003038353D00000000287D7D7D000000008C +:10DB2000AAF03CF000000000000000003CAAAAAAF5 +:10DB300000000000FFFFF0AA00300C3C000020E0D5 +:10DB400020E0003FACAC0000000000000000AA0292 +:10DB500000021400170300000000414155050F4F5B +:10DB6000FF7FEFC7FFFFC30000000ACB0000003CAF +:10DB7000828241C1C3C100000000000000004000DB +:10DB80004F0000000000000000000F1E00550000C4 +:10DB900000003A383F3D00000000287D28280000A2 +:10DBA0000000AAF03CF000000000000000003CAAC9 +:10DBB000F0AA000000000000F0AAC3F3CFFF0000AD +:10DBC000000000000030ACAC0000000000000000CD +:10DBD000AAA200A2D7C3170300000000EBEB550573 +:10DBE0000040F07000001038C3FF0000FFFF00008D +:10DBF000003CAAAAC3C3C3C3000000000000000089 +:10DC000000000000FF557D7DA0A0002000C30000A3 +:10DC1000CFCF555555557D41000000000F0F0F0F18 +:10DC2000000000000F0F0F0F000000005F503F309A +:10DC3000FFC3FF0000000000000000000000000023 +:10DC400000000D080505FFFF000000000000553C26 +:10DC5000553CC355000F0017003F00000000AFAF58 +:10DC60000505EF2CEF2C000000005550FFF000F0F0 +:10DC700000FFD310D3101414F0F0000000001E1E9B +:10DC80001E1E00000000AA002828A0A0000000C15D +:10DC90000002C0C05555F0F0FCC0000000002F0786 +:10DCA0002F07000000005555FF00000000005F50E6 +:10DCB0003F303C00FF0000000000000000000000BA +:10DCC000000000000D08000000000000000000003F +:10DCD0000FFF0F00C355FF0F0017000300000000E7 +:10DCE00005050505CF0CCF0C7D3C413C5514FF3C90 +:10DCF00000B200FF3030F3F31414FF000000000006 +:10DD0000FFAA55000061000100010005A0005008B5 +:10DD1000009000A505610007000900000061000EE9 +:10DD2000009D0000006140060095000500610006AE +:10DD3000000D000500614005C00D000080000A00D4 +:10DD4000000000A000000000300000900001006111 +:10DD50000006000D000000615006001D000000617B +:10DD60000006009D000100610E030001000000613B +:10DD7000000300050001A061000E000D000000611D +:10DD80000006000D00010F0F0F0F04FE04FE00003F +:10DD9000000000000000FF00FD0000FF82FF000007 +:10DDA0000000F0FFFAFA000000000000000000FF91 +:10DDB000A020151515153C3CFA0A000000000000D3 :10DDC0000000000000000000000000000000000053 -:10DDD0000000000000000000000000000000000043 -:10DDE0000000000000000000000000000000000033 -:10DDF0000000000000000000000500050000000019 -:10DE00000000000000000000000000000000000012 -:10DE10000000000000000000000000000000000002 -:10DE200000000000000000000000000000000000F2 -:10DE30000000000000000000FF00FF0000000000E4 +:10DDD00000000000ACF0ACFFF7C70838C7C704C7A5 +:10DDE00000000000FF000000C3C141C103A3F3A372 +:10DDF000FAFF0A0F00003F000F0F5555383C383C22 +:10DE0000AAC3AAC35F0F1C0C0F550F0F00FF00FF22 +:10DE100000000000000000000000000000FFC0FF44 +:10DE200000000000000F0A0A0000000000000000CF +:10DE30000000A0A03F3F3F3FFF00FA0A00000000A3 :10DE400000000000000000000000000000000000D2 -:10DE500000000000000000000000000000000000C2 -:10DE60000000000000000000000000000040000072 -:10DE70000000000000000000000000050005000098 -:10DE80000000000000000000000000000000000092 -:10DE90000000000000000000000000000000000082 -:10DEA0000000000000000000000000000000000072 -:10DEB00000000000000000000000F0F0F0F00000A2 -:10DEC0000000000F000F00000000000030300000D4 -:10DED0000000000000000000000000001717173FBE -:10DEE0000000000000000000000000000000000032 -:10DEF000000000000000000000000000FFFF02FF23 -:10DF00000000000000000000000000000000000011 -:10DF10000000000000000000000000000000000001 -:10DF200000000000000000000000000000000000F1 -:10DF3000000000000000000000000000F0F0707021 -:10DF400000000000000F000F0000000000000000B3 -:10DF500000000000000000000000000000000F0FA3 -:10DF60000F0F000000000000000000000000100083 -:10DF70001000000000000000000000000000FF0092 -:10DF8000FAFF000000000000000000000000000098 -:10DF9000204020002000000088000000C0042080F5 -:10DFA0000080201020100400000020200420000029 -:10DFB0000000400000200000200000008800000059 -:10DFC000000000000000000000000000000000034E -:10DFD000000000000402000000000000001000002B -:10DFE0000000000000000000000000000000000031 -:10DFF0000000000000000000000000000000000021 -:10E000000000000000000000000000000000001000 -:10E0100020000001000000000000000000000000DF -:10E0200000100010000100010000000000012001AC -:10E0300000000000200000010000000000000000BF -:10E0400000000000000000000000000000000000D0 -:10E05000000000000000200100000000000000019E -:10E0600000000000000000000000000000000000B0 -:10E0700000000000000000000000000000000000A0 -:10E080000000000000000000000000000000000090 -:10E09000000100000000000004080400000000006F -:10E0A000041000400080008000000000000000001C -:10E0B0000000000000000000002000000000000040 -:10E0C00088000000000000000000200000000000A8 -:10E0D0002000000000000020000001008800000077 -:10E0E0000000020000000000008088000000000026 -:10E0F000000084000000000000000000000000009C -:10E10000000000000000000000000000000000000F -:10E11000000000000008008400000004000000006F -:10E120000010000000020020002000040000200079 -:10E1300000000000000800000000000500000000D2 -:10E1400000000004000000000008000000000002C1 -:10E1500000000000000000840001000002840000B4 -:10E160000000000089000000000000040000000022 -:10E17000000000000000000000004100000000005E -:10E18000000000000000000000000000000000008F -:10E19000000000000000002108000021080000032A -:10E1A00000000000000800200040000800000400FB -:10E1B00000200000000000000040000000000000FF -:10E1C000000000000000000000000000000000004F -:10E1D000000000000000000000000000000000003F -:10E1E0000000000000000000000900000000000422 -:10E1F000000000000000000000000000000000001F -:10E20000000000000000000000000000000000000E -:10E2100000000000000000400000000000000000BE -:10E22000000000A00000000000010000000000004D -:10E23000800000010000000000000000000000005D -:10E2400000000000000003000000000000000000CB -:10E25000200000000000000000000000000000009E -:10E260000000000004000000080000001100400051 -:10E270000001410000000000030000000000400019 -:10E28000000011000000000000A0000000000000DD -:10E29000000000900000009000010000000200005B -:10E2A00000000000000008000800A000000040007E -:10E2B000A000000000000000400000000800000076 -:10E2C0000000000000000000080000008200400084 -:10E2D0000800A000C000080082000000000040000C -:10E2E00082004000000000000000088000000000E4 -:10E2F0000002000000000000000000000000840098 -:10E300008400000084000000000000000000000005 -:10E3100000000000000000000000000000000000FD -:10E3200000000000000000000000000000000000ED -:10E3300000000000000000000000000000000000DD -:10E3400000000808000000000000000000000000BD -:10E3500000000000000000000000000000000000BD -:10E36000C10000008000000000000000000200006A -:10E37000000000010000000000000000000000009C -:10E38000000000000000000000000000000000008D -:10E39000000000000000000000000000000000007D -:10E3A0000000000000100800000000000000400015 -:10E3B000A0000000C020C0000000C000000000005D -:10E3C00000400020000000000000001000000000DD -:10E3D00000000800000000001000A0000000000085 -:10E3E0004000C000A000A000C0030800C0008203DD -:10E3F00000009000000400040000000088000000FD -:10E400000000400000800000840000410000000087 -:10E4100000008200820000000000000000000000F8 -:10E4200000000000000000010000000000000000EB -:10E4300000000000000000010000000000000000DB -:10E4400000000001000100000000000000010000C9 -:10E4500000040000000000000800000000000004AC -:10E46000000080000000110000000000000000001B -:10E470000000000000040001008500000000000012 -:10E480000090000080000802000000000000000072 -:10E490000000210003000300410000000000000014 -:10E4A0000000000000200000000808000800000034 -:10E4B000080000000000000000000000000800004C -:10E4C000C00000200020000000000000000000004C -:10E4D0000000080000000400000000000000A00090 -:10E4E0000800000040000100000040008200080019 -:10E4F00008100800000000000000000400000000F8 -:10E500000000000200000000000000008400000085 -:10E5100000000000000000000000000000000000FB -:10E5200000000000000000000000000000000000EB -:10E5300000000000000000000000000000000000DB -:10E5400000000000000100010000000000000000C9 -:10E5500000000000000000000000000000000000BB -:10E5600000000000000000000400000000000000A7 -:10E570008000800180000000000000000001000019 -:10E58000000000000000000000000000000000008B -:10E59000000000000000000000000000000000007B -:10E5A000000000000000000000000000000000006B -:10E5B0000000000000008800900200820082080233 -:10E5C00000000082840001C002400020C0900000D2 +:10DE5000000000000000AC00AC0F3404CBFBC70492 +:10DE6000040400000000CF002828C1C3C14103A35F +:10DE7000F3A3F0F5000500003FFF3C3C00FF38280D +:10DE8000383CAAC30F0FFFAF3C2CD5551555F0AA4F +:10DE9000AAAA000000000000000000000000050524 +:10DEA00041550000000000000000000000000000DC +:10DEB000007D000000000055C30F0000008200003C +:10DEC0000000000000000000000000000000000052 +:10DED0000000000000000000000000000000000042 +:10DEE0000000202A0000000000000000170017FFBB +:10DEF0002D2D05AFD4D4C0FC1EBE1EBEFFFE0000FB +:10DF0000AFAFA0A000000000D4FCD7FFD555155539 +:10DF1000AAAAAAAA00000000000000000000000059 +:10DF200005050014000000000000000000000000D3 +:10DF3000000050FF00000000FF55C30F000C0082DE +:10DF400000000000000000000000000000000000D1 +:10DF500000000000000000000000000000000000C1 +:10DF600000000000202A0000000000000000170050 +:10DF700017FF3D3D15BFD4D4C0FC14B414B4FAFE51 +:10DF800000000FFF00F000000000D4C0D7C38400E1 +:10DF9000C000000484028800000402002000200267 +:10DFA00088808800888040000000880420000008E5 +:10DFB0008800C0100400000240000400200020007F +:10DFC0002000844188004000880204040404000307 +:10DFD0008400C0000200A000880088000400000443 +:10DFE00040002011900090002000C0040411C008DF +:10DFF00000052003200321002000A0004000840031 +:10E000002004214188008400000082008400040470 +:10E010000002418240020004000000000090C002A3 +:10E020004003000404900004094002020090040030 +:10E030000002009040C00004009000004000040076 +:10E04000000000002000000021020401000000A0E8 +:10E050000000000000002100000000C0000041009E +:10E0600004000000040000024100210009400000FB +:10E0700000040000000021004008000000004100F2 +:10E08000008280012000200000000000200010001D +:10E0900000000802400000000010A0000900040079 +:10E0A0009003030802000290820402410811000854 +:10E0B000100402200800041084100004000800006E +:10E0C000820488000000000800000000000900052C +:10E0D000080800000210000408040800000088007E +:10E0E0000000000000401040080802080909848070 +:10E0F00090104090841002850005A08989000020BE +:10E100009080031000090289020002100200020040 +:10E110000010001004098384008200840004200899 +:10E1200000000208100440082002048800100004C7 +:10E1300002820010009020040283008220840010DC +:10E140000984409040840008051040400404404089 +:10E1500000080040000008080084000841840040D6 +:10E16000000840840088004100C0801000820890B0 +:10E1700000020040C002001009100004001002005C +:10E180000488080208000400001082088404038444 +:10E19000040009000208000388414000002000003C +:10E1A00090104008C0409008014000000008042181 +:10E1B000001088020000400000090004000310085D +:10E1C00084040040000890000000080008000802D5 +:10E1D000020000030000000000030000900004089B +:10E1E0000000100000080400C00040104000401073 +:10E1F000A008400088411000000000008800A0A195 +:10E2000010008488840010908404C004A010204171 +:10E21000000000000000000008000000210008834A +:10E2200011C00300211000000000082003080000B6 +:10E23000008200890000008203100040000003C03B +:10E24000008200C01100210005000000400000A075 +:10E250004109000008000800000000001000000054 +:10E2600000020000000000004000000402414100E4 +:10E270000000000008A04100000008A00988030079 +:10E280000802000804020310000941010011000007 +:10E2900021080500000021000000C04008004004E3 +:10E2A00041840840040208040000040409210041DC +:10E2B0004010080240021020002008400002000226 +:10E2C000A0000800A0028800000010040000002048 +:10E2D0000040A0004004001090200000000000005A +:10E2E00000020800904108414041820408004009B2 +:10E2F000084082A0040082098200080482400004D1 +:10E3000084058200000040000400089108411020AC +:10E310000808080908020002900008002002000412 +:10E3200004000420110011C003C00810418820829D +:10E33000400808C08808400820A002A008910008F2 +:10E34000000800040384030040080010008400203B +:10E350000000008400041104000000000000000020 +:10E360000808040000C041A000C01100098200009C +:10E3700041400400001020040000090080A021009A +:10E380004110009000001100000000008502000014 +:10E3900000042188028200200000000440209080B8 +:10E3A000018800830000000008028240820400040B +:10E3B000C000A0002010004000000011000000007C +:10E3C00000400003000800000020004100000000A1 +:10E3D000100000000808000000000000000000001D +:10E3E0000000081000000000000082000800080380 +:10E3F00084000000000308000000000508008200FF +:10E40000848010000021100000000800840000003B +:10E4100000C100040008000000000000080800001F +:10E420000320044000200300000800080488218421 +:10E43000039003840800900103000300080000001B +:10E44000009000000000110005A02100080000005D +:10E450000300001000000000000000004100000068 +:10E460000000000000C00800100000880502000045 +:10E470000410000402002088208405000000000031 +:10E4800000C020100000088400001104118408104E +:10E49000039000101091080003900000030000009A +:10E4A000030000001002880010009000A0418410BA +:10E4B000400000400000041084020000002100051C +:10E4C00010100000020800080804000000000010FE +:10E4D0000000040802000000000000090000000025 +:10E4E0000008000000000000000000802000020082 +:10E4F00000009000840020000000A00040000009FF +:10E500000041C002840484048410400500200102FC +:10E510000810200800040004102000110000000072 +:10E52000000000000000000000080008118808003A +:10E53000000100C02191209009A100A00404020064 +:10E540002182208500000300000000002004030059 +:10E550000204008800A0000000020500000000087E +:10E56000000000000000009002000900000200000E +:10E57000000000C0000009000990090400C0A004C8 +:10E58000201009840800040010C00400002041008D +:10E590000811200000821091000111880000000085 +:10E5A00000000088000000C040400008C0090100D1 +:10E5B000010040000000000500821104C0011002AB +:10E5C000000200A008102000000000000000000071 :10E5D000000000000000000000000000000000003B -:10E5E000000000000000000002019040A0098283AA -:10E5F000C0A0C00284A0000800004000020000008B -:10E60000000000000000000000000000900000007A -:10E6100000000000000000000000000000000000FA -:10E620002090829000A0C082000000000000000046 -:10E6300000000000000000000000800000000080DA -:10E640008080000040008000038080800000800007 +:10E5E000000100000000000000000000900000009A +:10E5F0000000000000000000C0A000900090008219 +:10E600000001A1018400000141A0208200A082C07D +:10E6100000A00420840810C00020000201880084AB +:10E62000000000000000000040820084008080089C +:10E63000200220418011001000A0050802A08008DF +:10E64000808000800080800000000000000000004A :10E6500000000000000000000000000000000000BA -:10E66000000000000000000000008002800000A008 -:10E670008082C08091808080008000008000C00087 -:10E68000000000000000000000000000200000006A -:10E69000000000000000000000000000000000007A -:10E6A000000020000000008000808000800000004A -:10E6B00000000000000000000000000080100000CA -:10E6C00080000000000000008000800080410041C8 -:10E6D00080000000000000000000000000000000BA -:10E6E00000000000000000000000000000000083A7 -:10E6F000088040A105008221808082800380210063 -:10E70000051103030000000000000000210010209C -:10E7100008001121000000000000000000000000BF -:10E720000000000080008021008000000400020042 -:10E73000A000200000000000000000000000080110 -:10E74000822090000000080082001000400040017C -:10E750008801C04000000000000000000000000030 -:10E760000000000000000000000000000000009019 -:10E77000000300A000A140000300A00283020004E7 -:10E7800001000001010100000000000000000188FC -:10E7900001000090000100000000000000000000E7 -:10E7A000000000000000020002A000A00000000025 -:10E7B0000000000000000000000000000000004019 -:10E7C0000008908200000808000000821000C0408D -:10E7D0000020C04000C00000000000000000000059 -:10E7E0000000000000000000000000000000000128 -:10E7F00000100011A0000005900100410021A0823E -:10E800000000000002000000000000000000000006 -:10E8100000000000000000010000000000000000F7 -:10E820000000000000000000404000880840889080 -:10E8300000000000000000000000000000000000D8 -:10E8400000800080800000000000000000008000C8 -:10E8500080800080808000800000000000000000B8 -:10E8600000000000000000000000000000000000A8 -:10E87000000100C1008280200082000200100021FF -:10E8800080910005000580030040000000000000AA -:10E890000000002000000020000800000000000030 -:10E8A00000000000000000000000800000800080E8 -:10E8B0000000000000000000000000000000000058 -:10E8C00000008000800000000000000080020000C6 -:10E8D00000008041804080838080000000000000B4 -:10E8E0000000000000000000000000000000000028 -:10E8F000000000012111404041000200000880C0DA -:10E900008080000503C010004100110500000000D8 -:10E910000000000010802000000020030000000024 -:10E9200000000000000000000000000000200000C7 -:10E9300000000000000000820090000000000000C5 -:10E94000000000009000080082100000080008018C -:10E9500082404000C001200040C0100400000000C0 -:10E9600000000000000000000000000000000000A7 -:10E9700000000000000101009100880040008200BA -:10E98000202002A000000040010000000100000063 -:10E9900000000000000001022000200088000000AC -:10E9A00000000000000000000000000000009000D7 -:10E9B0008200900000000000000000000000000045 -:10E9C0000000000000000000000007000000000040 -:10E9D000000007000000000000000700484200009F +:10E6600000400010000200200000400021000000D7 +:10E67000000000000000000000008080000000009A +:10E6800000004010082100100010890020000080C8 +:10E690000000038085008080000000000080028070 +:10E6A0000000000000000000000080008041804168 +:10E6B00080000900410009202041880000008300FB +:10E6C00041040000002080008000000000000000E5 +:10E6D000000000000000000000000000000000003A +:10E6E000000000000000000000200000000000000A +:10E6F0000000000000000000000000000000000911 +:10E7000080000000090009100480830280000002DC +:10E71000808300808580212190800591000800037E +:10E7200000000080000000000000000040024001E6 +:10E730000801C04000C000000000010189902000D5 +:10E74000A0002101C0008200A08804000000000099 +:10E7500000000000000000000000000000000000B9 +:10E7600000000000000400000000000100000000A4 +:10E770000000000000000000000000000000000099 +:10E780000800A0A0080084848201A04009010800BC +:10E790004001A04188A002082100A1A0008800013A +:10E7A0000001000000040000000000000000C04064 +:10E7B0000020C04000C00000010000010101020370 +:10E7C0000003011190C0A09000080084118800840B +:10E7D0000082000800C000000000000000000000EF +:10E7E0000000000000000000000001000000000127 +:10E7F0000001000000010001000000000000000016 +:10E80000400000081010A0A000010000010100015C +:10E8100090200008002000C0A0A102110000828406 +:10E820000200900000000000000000000000000056 +:10E830008080098080800080001103020221101175 +:10E84000808905081005058900000080008004000B +:10E8500000000000008000800000000000000000B8 +:10E8600000000000000000000000000002000000A6 +:10E870000001001000080005031000000000000067 +:10E88000000080000080008082000008050821212F +:10E89000002100200090000000C1001080900003C3 +:10E8A00080000000000000000000000000000000E8 +:10E8B0000000A1419040848391002120401141003B +:10E8C0002003218005210580090000008000808050 +:10E8D0000000000000000000000000000000000038 +:10E8E0000000000000000000000021000540400082 +:10E8F0000300000100000000000000000000000014 +:10E9000000000000800080008080000040C0208067 +:10E91000C0008911004100828000800041C00320B6 +:10E92000908585400000000000000000000000000D +:10E9300000000000C101210040C00490011100014D +:10E940000000000001C0000101080000840002C0B6 +:10E950000408820000000000000000000000000029 +:10E9600000000000000000000000000001000000A6 +:10E970000100010000010000000000000000000094 +:10E98000000000000000040004088408840083C123 +:10E99000C12003C00400020188024010820021C08F +:10E9A00020204108090004008200000082000000CD +:10E9B00000000000000000000000070048420000C6 +:10E9C00000E000000081000000E000005081000035 +:10E9D0000000000000000000000000000000000037 :10E9E0000000000000000000000000000000000027 -:10E9F0000000000000000000000000000700000010 -:10EA00000000000000006000000000E000000000C6 -:10EA100000000000000000000000000000000000F6 -:10EA200000000000000000000000000000000000E6 +:10E9F0000000000000000000000000000000000017 +:10EA000000000000000000000000000000006000A6 +:10EA1000000000000000420000000000000088002C +:10EA20000000000000008200000000E00000000084 :10EA300000000000000000000000000000000000D6 -:10EA400000000000000000009F0F9000063C063C04 -:10EA50003F30FF007E667E66000000000000000080 +:10EA40000000000000000000000000000F0F0F0F8A +:10EA5000FF00F4F4000000080000000036363F30EC :10EA600000000000000000000000000000000000A6 -:10EA700000000000000000000000BDB1BDB10202B6 -:10EA800000000000090F600000000000000000000E -:10EA9000000000000000000000000A0A0A0A00004E -:10EAA0000000000000000000000000000000000066 -:10EAB0000000009900002F6F4B4B00000000000089 -:10EAC000000000000000000000009F9F9090063CA6 -:10EAD000063C3F30FF004266426600000000000036 -:10EAE0000000000000000000000000000000000026 -:10EAF000000000000000000000000000B1B1B1B152 -:10EB0000FDFDFFFF99FF99FF60000000000000007D -:10EB10000000000000000000000000000E000E00D9 -:10EB200000000000000000000000000000000000E5 -:10EB300000000000009F000F66660000000000005B -:10EB400000000000000000000000000000000000C5 -:10EB5000000000000000000000000000410840002C -:10EB600000842106000000000000000000000000FA +:10EA70000000000000000000000000000000000096 +:10EA800000000000000000000000C3C3424206F680 +:10EA9000F606101C0000000000004000000080800E +:10EAA00000FFCFCFCFCFCCCCFFFFC3C33C3C000097 +:10EAB0000000000000000000000000000000000056 +:10EAC0000000000000000000000000000000FF0047 +:10EAD0003F03FF002424090909090000000036361D +:10EAE0003F300000000000000000000000000000B7 +:10EAF0000000000000000000000000000000000016 +:10EB0000000000000000000000000000606F606F67 +:10EB100006F6F606D3DF000000000000000000004B +:10EB200000000000CF008900CCCC0000FF00FF00F7 +:10EB3000000000000000000000000000410840004C +:10EB4000008421060000000000000000000000001A +:10EB500000000000000000000000000000000000B5 +:10EB600000000000000000000000000000000000A5 :10EB70000000000000000000000000000000000095 :10EB80000000000000000000000000000000000085 :10EB90000000000000000000000000000000000075 :10EBA0000000000000000000000000000000000065 :10EBB0000000000000000000000000000000000055 -:10EBC0000000000100000000000000000000303FD5 -:10EBD000303F0000FF0060606F6F000FFFFF00001C +:10EBC0000000000000000000000000000000FF0F37 +:10EBD00099993C3C0CFC003C003C8FBF8CBC000075 :10EBE0000000000000000000000000000000000025 :10EBF0000000000000000000000000000000000015 -:10EC0000303F303F0000000024E0E7E0303F707FFD -:10EC100000000000000000000000000000000000F4 -:10EC200000000000000000000000000000000000E4 -:10EC3000000000000000000024E43CFC0303030388 +:10EC00000000000000000000000000000000000004 +:10EC1000000000F0699FF06F00000000F3F3303057 +:10EC2000000C3C3CF1B170307FFF000053BE53BE7E +:10EC30003FCC0F0F000000000000000000000000AB :10EC400000000000000000000000000000000000C4 -:10EC5000303F303F00F0FFF0666666660000FFF070 +:10EC500000000000303F00FF009C009983B380B0AB :10EC600000000000000000000000000000000000A4 :10EC70000000000000000000000000000000000094 -:10EC80000000303F303F0000000024E7E7E7000FBE -:10EC9000606F0000000000000000000000000000A5 -:10ECA0000000000000000000000000000000000064 -:10ECB0000000000000000000000024FC3CFC0303F6 -:10ECC000030300000000000000010000000000003D -:10ECD000000000000000000000000000000800002C -:10ECE0000000000000080000000800000000000014 -:10ECF0000000000000000000000000000000000014 -:10ED00000000000000613E0E000D000000614006A2 -:10ED1000000D00000061000700010000000000007D -:10ED20000000000000610006000D0000000000006F -:10ED300000000000000000000000000000003000A3 -:10ED400000000001000000000000000000000000C2 -:10ED500000000000000000000000000000000000B3 +:10EC80000000000000000000000000000000000084 +:10EC9000000000360036000F69960000000072F395 +:10ECA00072F3000C0000F1F3707267FF0000225C49 +:10ECB000225C0C3330FC000000000000000000006B +:10ECC00000000061000E000D000800610004000952 +:10ECD0000000006100050099000000000000000035 +:10ECE0000000000000000090000000000000000094 +:10ECF0000000000000000000000000610006000DA0 +:10ED00000000000000610006000D0000000000008F +:10ED1000000000000000000000100000006100067C +:10ED2000000D000000610006009D0000006100066B +:10ED3000001D000080614007000D00000000000081 +:10ED400000000000A0B0AABE00000000F0F0F5F73F +:10ED50002D282D285FD70A8254FE54FE00000000A3 :10ED600000000000000000000000000000000000A3 -:10ED70000000000000000000000000000000000093 -:10ED8000000000000000008822AA0000040000002B -:10ED90000000F0B0FA3A83AFAFAF0F0F2F0F0000B3 -:10EDA000000000000000FFD70000AAAA822800008F -:10EDB0000000000000000000000000000000000053 -:10EDC0000000000000000000000000000000000043 -:10EDD0000000000000000000000000000000000033 +:10ED7000000000000000000000000000000F002F55 +:10ED800000000000000000000000FCF3FEFB00009B +:10ED90000000000000000000000000000000FBFB7D +:10EDA000FBAB0F030C00000000000000000000009F +:10EDB00003000F0D0F0D0000000000000000000018 +:10EDC000000000000000A0B0AABE0000000000008B +:10EDD00005070000FFFF0FC30FC3FEFE54540000E1 :10EDE0000000000000000000000000000000000023 -:10EDF0000000000000000000000000000000000013 -:10EE0000000000000000000000CC33FF0000040000 -:10EE100000000000FCACF0B02CAFAFAF0F0F2F0F15 -:10EE20000000000000000000FFD7FFFFAAAA00AA10 -:10EE300000000000000000000000000000000000D2 -:10EE400000000000000000000000000000000000C2 -:10EE500000000000000000000000000000000000B2 +:10EDF000000000000000000000000000000000AF64 +:10EE000000AF00000000000000000000FFF0EFFA7B +:10EE100000000000000000000000000000000000F2 +:10EE2000515151010A0A0A0A000000000000C0C046 +:10EE3000010003000F0F0F0F000000000000000092 +:10EE40000000000000000000287D7D280000000078 +:10EE5000CFEB000007020F007F7F0A3E003C3C3CE6 :10EE600000000000000000000000000000000000A2 :10EE70000000000000000000000000000000000092 -:10EE8000000000000000000000000C0C000000006A -:10EE900000FF000000000808383800000000003CB7 -:10EEA000557D000000000000000000000000000090 +:10EE80000000000000000000000000000000000082 +:10EE90000000000000000000000000000000000072 +:10EEA0000000FFCFAFAF41EBC0CF0000000000007B :10EEB0000000000000000000000000000000000052 -:10EEC0000000000000000000000000000000000042 -:10EED0000000000000000000000000000000000032 +:10EEC00000000000000000000000287D7D280000F8 +:10EED0000000C041000003030B013E3E0A3E003C1F :10EEE0000000000000000000000000000000000022 :10EEF0000000000000000000000000000000000012 -:10EF00000000000000000000000000000C0C0000E9 -:10EF1000000000FF00000000080838380000000072 -:10EF20000F0F5F5F00000000000000000000000005 -:10EF3000000030550000000000000000000000004C -:10EF400000000000000000000000000000000000C1 -:10EF500020008400000000000400000410000000F5 -:10EF60000000100000000400000000000000880005 -:10EF70002000200000000000000084044000000089 -:10EF80000000200000002000A00000000000880019 -:10EF90000400000000000000000000000004000069 -:10EFA00000000000000000008800200000000000B9 -:10EFB0000000000000000000000000000000000051 -:10EFC0000000000000000000000000000000400001 -:10EFD00000004000100000020002000000000000DD -:10EFE000000200000000000000000000000000001F -:10EFF0000000000000000000000000000000000011 -:10F000000000000000000000000000000000000000 -:10F0100000000000000000000000000000000000F0 -:10F0200000000000000000000000000000000000E0 -:10F0300000000000000000000000000000000000D0 -:10F0400000000000000000000000000000000000C0 -:10F05000000002000010000000000000000000009E -:10F060000000000000002000000000000000000080 -:10F070000000000000000000000000000000000090 -:10F080000000000000000000000000000000000080 -:10F090000000000000000000000000000000000070 -:10F0A000000000000000000000000000040000005C -:10F0B0000800000000000000000000000000000048 -:10F0C000000002000200000000000000000000003C -:10F0D0000000000000000000000000000000000030 -:10F0E000000000020000000000000000000000001E -:10F0F0000088000000000000000000000000000088 -:10F1000000080000040000000000000000000000F3 -:10F1100000000000000000000000000000000500EA -:10F1200000000002000000000000000000000400D9 -:10F1300000000000090000000000000000000000C6 -:10F1400000000000000000000000000000000000BF -:10F1500000000000000000000000000000000000AF -:10F16000000000000000000000000000000000009F -:10F17000010000000000000000000000000000008E -:10F18000000000000000000000000000000000007F -:10F1900000000000000000004000000088000000A7 -:10F1A000000000000000000000000000000000005F -:10F1B000000000000000000000000000100000003F -:10F1C00000000000000082000000000000000000BD -:10F1D00000000000000000820000000008000000A5 -:10F1E000000010000000000000000000000000000F -:10F1F0000000088200000000000000000000000085 -:10F2000000000000000000000000000000000000FE -:10F2100000000300000400000000000008000000DF -:10F2200000000000000000000000000000000000DE -:10F230002100030041004100030000000000000025 -:10F2400000000000000000000300030000000000B8 -:10F2500000000000000000000000000000000000AE -:10F2600000000000000000000000C00000000000DE -:10F27000000000000000000000000000000000008E -:10F28000000000000800000008000000000000006E -:10F29000000000000000000000000000000000006E -:10F2A00000000000A00000000000080000000000B6 -:10F2B000000000000000000000000800080000003E -:10F2C000000000000000000000000000000000003E -:10F2D000000000000000000000000000000000002E -:10F2E000000000000000000000000000000000001E -:10F2F000000000000000000000000000000000000E -:10F3000000000000000000000000000000000000FD -:10F3100000000000000000000000000000000000ED -:10F3200000000000000000000000000000000000DD -:10F3300000000000000000000000000008000000C5 -:10F3400000000000000000000000000000000000BD -:10F3500000000000000000000000000000000000AD -:10F36000000000000000000008000008000000008D -:10F37000000000000000000000000000000000404D -:10F3800001800000000000000000000000000000FC -:10F39000000000000000000000000000000000006D -:10F3A0000000000000000000000000000000080055 -:10F3B000000000000800000000000800000000003D -:10F3C000000000000000000000000000000000003D -:10F3D000000000000000000000000000000000002D -:10F3E00000000800000000000000000000002100F4 -:10F3F0000088000000000000000000000000000085 -:10F4000000000810000000000000000000000000E4 -:10F4100000000000000000000000000000000000EC -:10F4200000000800000408C02100000000000800DF -:10F43000000005200000000000040800000000009B -:10F4400008904100000010000000000000000000D3 -:10F4500000000000000000000590000008004000CF -:10F460000000000000000000080000000000000094 -:10F47000000000000000000000000000000000008C -:10F48000000000000000000000000000000000007C -:10F49000000000000000000000000000000000006C -:10F4A00000009000100000000000000000000000BC -:10F4B0000000080000000000000000000000000044 -:10F4C000000000000000000000000000000000003C -:10F4D000000000000000000000000000000000002C -:10F4E0000000000003000000030000000000000016 -:10F4F000000000000000000000000000000000000C -:10F5000000000000000000000000000000000000FB -:10F5100000000000000000000000000000000000EB -:10F5200000000000000000000000000000000000DB -:10F5300000000000000000000000000000000000CB -:10F5400000000000000000000000000000000000BB -:10F5500000000000000000000000000000000800A3 -:10F560000800000000000000000000000000000093 -:10F57000000000000000000000000000000000008B -:10F58000000000000000000000000000000000007B -:10F59000000000000000000000000000000000006B -:10F5A000000000000000000000000000000000005B -:10F5B000000000000000000000000000000000004B -:10F5C000000000000000000000000000000000003B -:10F5D000000000000000000000000000000000002B -:10F5E000000000000000000000000000000000001B -:10F5F000000000000000000000000000000000000B -:10F6000000000000000000000000000000000000FA -:10F6100000000000000000000000000000000000EA -:10F6200000000000000000000000000000000000DA -:10F6300000000000000000000000000000000000CA -:10F6400000000000000000000000000000000000BA -:10F6500000000000000000000000000000000000AA -:10F66000000000000000000000000000000000009A -:10F67000000000000000000000000000000000008A -:10F68000000000000000000000000000000000007A -:10F69000000000000000000000000000000000006A -:10F6A000000000000000000000000000000000005A -:10F6B000000000000000000000000000000000004A -:10F6C000000000000000000000000000000000003A -:10F6D000000000000000000000000000000000002A -:10F6E000000000000000000000000000000000001A -:10F6F000000000000000000000000000000000000A -:10F7000000000000000000000000000000000000F9 -:10F7100000000000000000000000000000000000E9 -:10F7200000000000000000000000000000000000D9 -:10F7300000000000000000000000000000000000C9 -:10F7400000000000000000000000000000000000B9 -:10F7500000000000000000000000000000000000A9 -:10F760000000000000000000000000000000000099 -:10F770000000000000000000000000000000000089 -:10F780000000000000000000000000000000000079 -:10F790000000000000000000000000000000000069 -:10F7A0000000000000000000000000000000000059 -:10F7B0000000000000000000000000000000000049 -:10F7C0000000000000000000000000000000000039 -:10F7D0000000000000000000000000000000000029 -:10F7E0000000000000000000000000000000000019 -:10F7F0000000000000000000000000000000000009 -:10F8000000000000000000000000000000000000F8 -:10F8100000000000000000000000000000000000E8 -:10F8200000000000000000000000000000000000D8 -:10F8300000000000000000000000000000000000C8 -:10F8400000000000000000000000000000000000B8 -:10F8500000000000000000000000000000000000A8 -:10F860000000000000000000000000000000000098 -:10F870000000000000000000000000000000000088 -:10F880000000000000000000000000000000000078 -:10F890000000000000000000000000000000000068 -:10F8A0000000000000000000000000000000000058 -:10F8B0000000000000000000000000000000000048 -:10F8C0000000000000000000000000000000000038 -:10F8D0000000000000000000000000000000000028 -:10F8E0000000000000000000000000000000000018 -:10F8F0000000000000000000000000000000000008 -:10F9000000000000000000000000000000000000F7 -:10F9100000000000000000000000000000000000E7 -:10F9200000000000000000000000000000000000D7 -:10F9300000000000000000000000000000000000C7 -:10F9400000000000000000000000000000000000B7 -:10F9500000000000000000000000000000000000A7 -:10F960000000000000000000000000000000000097 +:10EF00000000FCFFFFFF0000000000000000000008 +:10EF100000000000000000000000000000000000F1 +:10EF2000000000003F0FAFAF41EB03F30000000013 +:10EF30000000000000000000004000000000000091 +:10EF400000000000000000000000000010804008E9 +:10EF5000C000840582082000030484000409040919 +:10EF60000410840084800080200020000410200011 +:10EF70002000200020002108204088918200840089 +:10EF80004000A00004004004400020000003C00531 +:10EF90008400200004004020202004800504880212 +:10EFA0002000000084000000A00800001040400085 +:10EFB000040082000203C00000084000200084100A +:10EFC000040004200120820488080004880540020F +:10EFD0000040000000022000400002020000C002C9 +:10EFE000C00280C12100000400040090000200045F +:10EFF0004000004004C04002080211020820200026 +:10F00000000000A000004000000000040490000088 +:10F01000204021A0100040000903020110208402BA +:10F020000040008205004100210000C0048200A1D0 +:10F03000000440000000040020000400800041049F +:10F040004001C100C005040500024000400020044A +:10F050002004024100000108000809880409841006 +:10F060000220A0000820020810042008080009045B +:10F0700090030404A003000008C004100104090563 +:10F08000850540880882080008000000820000040E +:10F090000000000002000000021000000083008554 +:10F0A00004008200001040400090081008C00008D2 +:10F0B0008800844182100800400002000000000027 +:10F0C0000040000004000404040000050000840067 +:10F0D0008441040805880802408220054010058804 +:10F0E00009080305001000C0A0402011800400881A +:10F0F000209105080082000011040410808404405F +:10F100008408400484020409048400080010008478 +:10F1100040040000020804820084800400000020F3 +:10F120000220800800880082890002038084000297 +:10F1300002840408040800000000800005104188D3 +:10F1400041000008110080848010820004C000107B +:10F150000082040840210402000340098841400065 +:10F160008202004000080805400502020010400528 +:10F1700004000040002100080040002104040400B5 +:10F180000421010300084010C010200300210021C9 +:10F19000A008012000000041C00000000021050877 +:10F1A00000400010048000090200101000118200CD +:10F1B0008205101040000403000500000205000352 +:10F1C0000010081104000800840082000002C01131 +:10F1D000102100000003008800050300004010001B +:10F1E0004184100310000084884000840041210005 +:10F1F000008441A0040008004100000800820300D0 +:10F2000080008008044000000000000008000000AA +:10F21000400000000401000000000800050000009C +:10F220000400000000009020100021A00000080051 +:10F23000030003040304004000000590050010C013 +:10F240004100000221840000080000000082000943 +:10F250000000000000080000000282084021A08495 +:10F2600008400021A180004009400040000500093D +:10F2700082040810A0400405400900000002840038 +:10F28000018282110410A0042003001008028305EB +:10F29000080000008200A00000008200A009821087 +:10F2A000820004040421040482411005820000202D +:10F2B00001110008084190400804A0008209A080C4 +:10F2C000080800051009822010800010000000408E +:10F2D0000009000408002010A000009000C140A018 +:10F2E0001010A02020A04010208408A0400004009E +:10F2F0000282029000820000400821824004000047 +:10F300000202042011080300084000040890008352 +:10F3100040080000008403820082000011100900F0 +:10F32000050005C08020C0088384210040004108FA +:10F330000804020400414000089003900084080083 +:10F3400005021004000011880908000200050000F1 +:10F3500000C000000084000003000004080000104A +:10F360008210100400C0C04100080800880240025A +:10F3700040200800001000031108004000020009AE +:10F38000000800000000000000210809002004001F +:10F3900000400420000000410840820800000000F6 +:10F3A0000004004082008200008008000400000089 +:10F3B0000011C01104000200A021000200008440DE +:10F3C0008408080090084000400490118420000048 +:10F3D000090000000003A0080010004040080204DB +:10F3E0000800000000000040000408002020050480 +:10F3F00083008808080000880400400811001000FD +:10F4000000000008000800820000008400000000E6 +:10F4100000000000000021000000000000000000CB +:10F4200000004100059005000000002000000000E1 +:10F430000800200000000084A000030440054000F4 +:10F440000420040000080202A1A088202000080077 +:10F450001100400000000400000400000000400013 +:10F4600000100108082100210021C00540004020B3 +:10F4700004110008020000200821012000210003DF +:10F480000041022100004041000000000080000017 +:10F490008240002090090204000082000011004018 +:10F4A00000001000000500000800A000104140000E +:10F4B000080300000200A0080005080888000205F3 +:10F4C000024088000008100400401008C00400003A +:10F4D0008204040300000008081100000200000874 +:10F4E000001100100282402009C040844182410086 +:10F4F000022011820390000221110000020021204D +:10F5000009880000000204C08800200000000010EC +:10F51000040020820004042008900000000800007D +:10F5200021C000000000201004000300081040402B +:10F530004182098404000088000003C00520040003 +:10F5400021000000084002880982118200900040DA +:10F55000030008C008824100000000000000000015 +:10F5600000000000000009010001000001C0882027 +:10F5700040200204404121200410820009408808F4 +:10F58000A19084020000000040000000904090889C +:10F590000088820400010001080100010000000051 +:10F5A000000000000000008800040002004000008D +:10F5B00000000000000001A08800884000000088D2 +:10F5C0000984108200080000010090010000000181 +:10F5D00001010401000002A001000203A0090000D3 +:10F5E0000000000000000040902100040009090014 +:10F5F000C0000000800082C0211000C18004908300 +:10F600002103020000112000200080000000008083 +:10F6100080000000800000410021800200100000F6 +:10F6200000000000000000000080000000800000DA +:10F6300000000000000000001000100000000900A1 +:10F640000080058000000000000321100002000976 +:10F650000020212100100010A0831040800580218F +:10F660000000000000000000000080000000800397 +:10F67000C1000821400541830200041104841140A7 +:10F6800011000200C01090410000000000000000C6 +:10F6900000000000801100800400100020002141C3 +:10F6A00000000000000000800000000000000000DA +:10F6B0008000000000800008000088002102008017 +:10F6C000892002800511858841A1200000002000CA +:10F6D000080302804000030008201000100420806E +:10F6E000028900000000000000000200020000008B +:10F6F000C00110000500018989A1000800018405EE +:10F70000028588200900A10083000000001000008D +:10F710000000A0000284A000A008019000000000EA +:10F72000010100000000000000C0000090008802FD +:10F73000040408000000004000000088090091C097 +:10F7400020408201C040A000831005A1019000006C +:10F750000000000000020000000000012140200025 +:10F76000C040850400000000000000000000000010 +:10F770000501000100050088009182C18585011105 +:10F780004141A0A010A101900005820800010000E5 +:10F7900000000000010800088420A0900000010083 +:10F7A0000100000000000000000000000000C08810 +:10F7B0000020002000000000000008000000900071 +:10F7C0000000C001040020000889100888A1000082 +:10F7D00000000001000100010101100000000440D0 +:10F7E00001A10241A0050000000000000000000986 +:10F7F00041030202004100200090000511C14110A8 +:10F800000388882182900008030403A190840020CB +:10F8100000080041002040800080000080000004BB +:10F820000221211000110000000000000000000073 +:10F830000000008000000000200000000000000028 +:10F8400000400008002180418000008480C109211F +:10F850000020050010210020002002020303000800 +:10F860008082200883A104900000000000000000B6 +:10F87000200502800400000090800980A000830918 +:10F8800010A0828290008540041020C010800840A3 +:10F890000010000000000000001100058080000042 +:10F8A00000080400080009030000004000000000F8 +:10F8B0000000000300000000800000000040000085 +:10F8C0000000848584009100091180A089C008800F +:10F8D00003030921210004000510418002002000DB +:10F8E000020921409140890003200000000000002F +:10F8F00000000000002000820000C00202A0119061 +:10F90000080183A104090840080100A000A00040EC +:10F910000100000100000000000004000410084085 +:10F92000C000008300000100000000000000000093 +:10F9300000000000880020204020A00000000000FF +:10F940000000000040C021100210A000024102830C +:10F9500085084101002100000100000100A0000015 +:10F9600000000000099004848440080000000000AA :10F970000000000000000000000000000000000087 -:10F980000000000000000000000000000000000077 +:10F98000000000000000000007006000000000E030 :10F990000000000000000000000000000000000067 -:10F9A0000000000000000000000000000000000057 -:10F9B0000000000000000000000000000000000047 -:10F9C0000000000000000000000000000000000037 +:10F9A000070000000000000000000006000000004A +:10F9B000070000060000000000000000000000003A +:10F9C00000000700000000000000000042000000EE :10F9D0000000000000000000000000000000000027 -:10F9E0000000000000000000000000000000000017 -:10F9F0000000000000000000000000000000000007 -:10FA000000000000000000000000000000000000F6 -:10FA100000000000000000000000000000000000E6 -:10FA200000000000000000000000000000000000D6 -:10FA300000000000000000000000000000000000C6 -:10FA400000000000000000000000000000000000B6 -:10FA500000000000000000000000000000000000A6 -:10FA60000000000000000000000000000000000096 +:10F9E0000000000000000000000007000000000010 +:10F9F0000000000000000000000000000000AAF06D +:10FA00003C3C003CF0C3E1C3F0F020F0E3F0000028 +:10FA1000000043C34303000000000000000000F0AA +:10FA20003CFC1F101F1F0000000000000000000031 +:10FA300000000000000000007530303000C000C041 +:10FA40000000000000000000BABF0000000000003D +:10FA50006969096000FFF0F000000000000000008C +:10FA600000000000000000005F5F1E0AFFFF00C0F2 :10FA70000000000000000000000000000000000086 -:10FA80000000000000000000000000000000000076 -:10FA90000000000000000000000000000000000066 -:10FAA0000000000000000000000000000000000056 -:10FAB0000000000000000000000000000000000046 -:10FAC0000000000000000000000000000000000036 -:10FAD0000000000000000000000000000000000026 -:10FAE0000000000000000000000000000000000016 -:10FAF0000000000000000000000000000000000006 -:10FB000000000000000000000000000000000000F5 -:10FB100000000000000000000000000000000000E5 -:10FB200000000000000000000000000000000000D5 -:10FB300000000000000000000000000000000000C5 -:10FB400000000000000000000000000000000000B5 -:10FB500000000000000000000000000000000000A5 -:10FB60000000000000000000000000000000000095 -:10FB70000000000000000000000000000000000085 -:10FB80000000000000000000000000000000000075 -:10FB90000000000000000000000000000000000065 -:10FBA0000000000000000000000000000000000055 -:10FBB0000000000000000000000000000000000045 -:10FBC0000000000000000000000000000000000035 -:10FBD0000000000000000000000000000000000025 -:10FBE0000000000000000000000000000000000015 -:10FBF0000000000000000000000000000000000005 -:10FC000000000000000000000000000000000000F4 -:10FC100000000000000000000000000000000000E4 -:10FC200000000000000000000000000000000000D4 -:10FC300000000000000000000000000000000000C4 -:10FC400000000000000000000000000000000000B4 -:10FC500000000000000000000000000000000000A4 -:10FC60000000000000000000000000000000000094 -:10FC70000000000000000000000000000000000084 -:10FC80000000000000000000000000000000000074 -:10FC90000000000000000000000000000000000064 -:10FCA0000000000000000000000000000000000054 -:10FCB0000000000000000000000000000000000044 +:10FA800000000000003CF0FFE1C3C3C334F0F7F016 +:10FA9000000000005FFF5F0F00000000000000009A +:10FAA00000F03CFCDFD0DFDF0000000000000000C1 +:10FAB000000000000000000000007530303000C081 +:10FAC00000C0000000000000000010150000000051 +:10FAD0000000FFFF0FF000FFF0F00000000000004A +:10FAE000000000000000000000005F5F5F4BFFFFB0 +:10FAF00000E000000000000000000000000055557C +:10FB0000555540C27CFE0505C0C00F0F00FF0055D3 +:10FB1000FFFFFAFAFA385500550000000000000017 +:10FB20000000004000410000F7000000000000005D +:10FB3000000000000000000000000000FF003F0087 +:10FB4000FAFA0AFA00000000000000000F0F0F0F81 +:10FB5000243CA5FF173F1703FEF4FFFF0000000041 +:10FB60000000000000000000000000000000FFFF97 +:10FB7000FDF53D0500000000000000000000000051 +:10FB80003C3C0F0F40C27CFE0505CFCF5555555567 +:10FB90000000FFAAFAFA00FA510055000000000028 +:10FBA0000000000000400041F7F7F70000000000EF +:10FBB0000000000000000000000000000000FF0046 +:10FBC0000F00F4FA00FA000000000000000000003E +:10FBD000555581C3A5FF030303030E040000000075 +:10FBE0000000000000000000000000000000E0E055 +:10FBF000FFFFFFF7FFC700000000000000000061EA +:10FC00000006000D0005A0614006009D0001056191 +:10FC1000400E050D00A00061000100090001006117 +:10FC20000006000D000005000A08050000A00061A4 +:10FC30000006000D000000000008000000A0000009 +:10FC4000000030000010000005000A08050000A0B8 +:10FC500000613006000D000000614006001D00013B +:10FC600000610006000D000000610006000D0000AC +:10FC70000061000E000D0000000000000000000008 +:10FC8000FFFF0FFFF03CFF3CF0FCF3FF030328EB0A +:10FC900000000000C3C1C3C3FFFFFF02F0FFFEFF6F +:10FCA000000000000003000300000000000000004E +:10FCB0003F033F033C383C3C0000000000000000D4 :10FCC0000000000000000000000000000000000034 -:10FCD0000000000000000000000000000000000024 -:10FCE0000000000000000000000000000000000014 -:10FCF0000000000000000000000000000000000004 -:10FD000000000000000000000000000000000000F3 -:10FD100000000000000000000000000000000000E3 -:10FD200000000000000000000000000000000000D3 -:10FD300000000000000000000000000000000000C3 +:10FCD0000000FFC30F0F3C3C3C3CD2FAD2FA0F5558 +:10FCE0000F55ABBF8397EB69AA2800000000AAAAB2 +:10FCF000AAAACFCF0C0C7D287D28000000000000B0 +:10FD00000000F0000000F03C003C303C333F3F3F3F +:10FD100028EB80F0B0F0C300C300FF00FF00F0FF4D +:10FD2000FFFF0000000000280000000000000000AD +:10FD300000007D417D413C383C3C0000000000005B :10FD400000000000000000000000000000000000B3 -:10FD500000000000000000000000000000000000A3 -:10FD60000000000000000000000000000000000093 -:10FD70000000000000000000000000000000000083 -:10FD80000000000000000000000000000000000073 -:10FD90000000000000000000000000000000000063 -:10FDA0000000000000000000000000000000000053 -:10FDB0000000000000000000000000000000000043 +:10FD5000000000003C000F0F1C1C3C145078507831 +:10FD6000FFFF0000293D0115FF7DBE3C15105555D4 +:10FD7000AAAAAAA8417D417D7D287D380000000007 +:10FD8000000000003C3C3C3C000000000000000083 +:10FD90000055FF00F7F2A7A20000BCBFFFFFFFFF66 +:10FDA000AAF0BEF00000000000000000000000000B +:10FDB000000000005500343000000000000000008A :10FDC0000000000000000000000000000000000033 -:10FDD0000000000000000000000000000000000023 -:10FDE0000000000000000000000000000000000013 -:10FDF0000000000000000000000000000000000003 -:10FE000000000000000000000000000000000000F2 -:10FE100000000000000000000000000000000000E2 -:10FE200000000000000000000000000000000000D2 -:10FE300000000000000000000000000000000000C2 +:10FDD000000000000000000000003030B2B200005F +:10FDE000000000552D2D04540E5E96D71496000089 +:10FDF000020A0003FF3F0E0F0F0FFFFFAAAA000029 +:10FE0000000000000000F404FE0E000000000000EE +:10FE100000003CF00000575207020000B0B3410060 +:10FE2000FF0000F03CF000000000000000000000B7 +:10FE300000000000000055003C3C43005F00000053 :10FE400000000000000000000000000000000000B2 -:10FE500000000000000000000000000000000000A2 -:10FE60000000000000000000000000000000000092 -:10FE70000000000000000000000000000000000082 -:10FE8000000000000000000000020080000200806E -:10FE90000000000000000000000000004000001012 -:10FEA00000000000000000040000000288000004C0 -:10FEB0000000040000000000000000042000000416 -:10FEC00000000000000000040001C000000000006D -:10FED0000000000000000000000000000000000022 -:10FEE0000000000000000000000000000000000012 -:10FEF0000000000000000000000000000000000002 -:10FF000000000000000000000000004100020001AD -:10FF100000020000000200000000000000001000CD -:10FF200000000000000000000000000000000000D1 -:10FF300000000000040000000000000000000000BD -:10FF400000000000000000000000000000000000B1 -:10FF500000000000000000000000000000000000A1 -:10FF6000000000000002000000000000000000008F -:10FF70000000000000000000000000000000000081 -:10FF800000000000000000000000000000000080F1 -:10FF90000000000000000000000000000000000061 -:10FFA0000000000000000000000000000000000051 -:10FFB00088000000000000000000000000000000B9 -:10FFC0000000000000000000000000000000000031 -:10FFD0000000000000000000000000000000000021 -:10FFE0000000000000000000000000000000000011 -:10FFF0000000000000000000000000000000000001 +:10FE5000000000000000000000000000F3F3B2B258 +:10FE600000000000AAFF2D2DA4F4AEFE7D961469BB +:10FE700000000000080BDF1F0A0F0A0FC0C38082BA +:10FE800000000000000000000400200440042003E3 +:10FE90008802208240800400000084004083208487 +:10FEA00084A005408883889000024002000020085A +:10FEB0002185888302032008C00088044000219027 +:10FEC0002008840040044085000301000000020077 +:10FED00088008805400041048804100085082085BA +:10FEE0004080100084000500C04000418283010072 +:10FEF000C0000080840400000404C08082802010C0 +:10FF0000A080400000002000880041900400808212 +:10FF1000900440904102A0020590000200000502FA +:10FF20000002414102034020042120000484000219 +:10FF3000048420042004000080000000040100204C +:10FF40002003000041200400000200001000000017 +:10FF500000000000000080002001050100000410E6 +:10FF60000010040290000000404009011090412060 +:10FF7000048800C0000400010000004000040004E8 +:10FF800000010002200809000000000090030303A4 +:10FF90000010080904410002000290080221884074 +:10FFA0000984080501900240004000898209000888 +:10FFB00002100082090400859005008984028809E6 +:10FFC000884100C0000000000041820400000200DF +:10FFD0000800820009000082821008030911040051 +:10FFE000C110400209410108201020000110010049 +:10FFF000020020004008000440040280001020009D :020000040016E4 -:1000000000000000000000000200000000000010DE -:100010000004000000000000008400000400000054 -:10002000000800000000004000400008000000023E -:10003000008400040000000000040000000000082C -:10004000001000040008000000020004000000008E -:10005000000000040000000000000000000000009C -:100060000004000400000004000000000000000084 -:100070000000000000000000000000000000000080 -:100080000000000000000000000000000000000070 -:10009000000400000004000000030008000000004D -:1000A0000408002100030000000008080000000010 -:1000B0000000000800000000000000000000000038 -:1000C0000000040800000000000000000000000024 -:1000D000000004000000080000000000080000000C -:1000E0000000000000001000000000000000000000 -:1000F000000000000000820000000000000000007E -:1001000000000000000000000000000000000000EF -:10011000400000010000000100000000000000009D -:1001200000000000000000000000000000000000CF -:1001300000000000000000000000000000000000BF -:1001400000000000000000000000000000000000AF -:100150000000000000000000000000000000080097 -:10016000000000000000000000000000000000008F -:10017000000000000000000000000000000000007F -:10018000000000000300000000000000000000006C -:1001900000008000000000000000000000000000DF -:1001A0000000000000000000080000100000000037 -:1001B000000000000000000000000000000000003F -:1001C000000000000000000000000000000000002F -:1001D000000000000000000000000000000000001F -:1001E00000000000000000000000080400200000E3 -:1001F00000000000000008000000000000004000B7 -:1002000000000000000000000000000000000000EE -:1002100000000000000000080000000000000000D6 -:1002200000000000080000000000000000000000C6 -:1002300000000000000000000000000000000000BE -:1002400000000000000000000000000000000500A9 -:10025000000000000000000000000000000000009E -:10026000000000000000000000000000000000008E -:10027000000000000000002000000000000000005E -:10028000000000000000000003000000000000006B -:10029000000000000000000000000008000801004D -:1002A0000000000000000040000000000000000806 -:1002B00000000040000000000000000000000000FE -:1002C000000000000000000000000000000000002E -:1002D000000000000000000000000000000000001E -:1002E000000000000000000000000000000000000E -:1002F00000000000000000000000000000000000FE -:1003000000000000000000000000000000000000ED -:1003100000000100000000000000000000000000DC -:1003200020000000000000000000000000000008A5 -:1003300000000000000000000000000000000000BD -:1003400000000000000000000000000000000000AD -:10035000000000000000000000000000000000009D -:10036000110000000000000000000000000000007C -:100370000000000000000000000000000800000075 -:10038000000000000000000000000000000000006D -:100390000000000008000000000000000021000430 -:1003A000000000000000000000000000000000004D -:1003B000000000000000000000000000000000003D -:1003C000000000000000000000000000000000002D -:1003D000000000000000000000000000000000001D -:1003E000000000000000000000000000000000000D -:1003F00000000000000000000000000000000000FD -:1004000000000000000000000000000000000000EC -:1004100000000400000000000000000000000000D8 -:1004200000000000000000000000000000000000CC -:1004300000000000000000000000000000000000BC -:1004400000000000000000000000000000000000AC -:10045000000000000000000000000000000000009C -:10046000000000000000000000000000000000008C -:10047000000000000000000000000000000000007C -:10048000000000000000000000000000000000006C -:1004900000000000000000000388000021000000B0 -:1004A00000010000A00000010000000000000000AA -:1004B000000000000000000000000000000000003C -:1004C000000000000000000000000000000000002C -:1004D000000000000000000000000000000000001C -:1004E000000000000000000000000000000000000C -:1004F00000000000000000000000000000000000FC -:1005000000000000000000000000000000000000EB -:10051000000000000000000000000000010040009A -:1005200000000002000500050010000000000000AF -:1005300000000000000000000000000000000000BB -:1005400000000000000000000000000000000000AB -:10055000000000000000000000000000000000009B -:10056000000000000000000000000000000000008B -:10057000000000000000000000000000000000007B -:10058000000000000000000000000000000000006B -:1005900000000000000000000000000040002000FB -:1005A00080000000000005000500020800000000B7 -:1005B000000000000000000000000000000000003B -:1005C000000000000000000000000000000000002B -:1005D000000000000000000000000000000000001B -:1005E000000000000000000000000000000000000B -:1005F00000000000000000000000000000000000FB -:1006000000000000000000000000000000000000EA -:1006100000000000000000000000000000000000DA -:1006200000210000000000A0000000000000000009 -:1006300000000000000000000000000000000000BA -:1006400000000000000000000000000000000000AA -:10065000000000000000000000000000000000009A -:10066000000000000000000000000000000000008A -:10067000000000000000000000000000000000007A -:10068000000000000000000000000000000000006A -:10069000000000000000000000000000000000005A -:1006A0000000000000000000000000000000000149 -:1006B000000000000000000000000000000000003A -:1006C000000000000000000000000000000000002A -:1006D000000000000000000000000000000000001A -:1006E000000000000000000000000000000000000A -:1006F00000000000000000000000000000000000FA -:1007000000000000000000000000000000000000E9 -:1007100000000000000000000000000000000000D9 -:1007200000000001000100000000001102050005AA -:1007300000080000000000000000000000000000B1 -:1007400000000000000000000000000000000000A9 -:100750000000000000000000000000000000000099 -:100760000000000000000000000000000000000089 -:100770000000000000000000000000000000000079 -:100780000000000000000000000000000000000069 -:100790000000000000000000000000000000000059 -:1007A00000000000002000100005002010000500DF -:1007B0000500001000000000000000000000000024 -:1007C0000000000000000000000000000000000029 -:1007D0000000000000000000000000000000000019 -:1007E0000000000000000000000000000000000009 -:1007F00000000000000000000000000000000000F9 -:1008000000000000000000000000000000000000E8 -:1008100000000000000000000000000000000000D8 -:100820000000000000000000000000000000014087 -:1008300000000000000100000000000000000000B7 -:1008400000000000000000000000000000000000A8 -:100850000000000000000000000000000000000098 -:100860000000000000000000000000000000000088 -:100870000000000000000000000000000000000078 -:100880000000000000000000000000000000000068 -:100890000000000000000000000000000000000058 -:1008A0000000000000000000A00000002000000088 +:10000000001000800284000800000020041000841A +:100010000284020880080008410941850209048819 +:1000200000000810030804400083038405100484C2 +:1000300000090404001182030004200408040003E2 +:1000400000840484094000880990000803400000EF +:10005000001000084108C0102010040900084008E2 +:1000600000840400830904084004C082048440041E +:100070004084008205888085048380090004009004 +:1000800080C0040500048041004000000000020020 +:100090000040002088090203000200050202040259 +:1000A00089210840000904210021001104400408AE +:1000B0008402880284058421000882080404002147 +:1000C00020080021200800219002002100400003A8 +:1000D0000000004000218803A0210008000500085E +:1000E0000810001004208400042040092000900023 +:1000F00090020005000041A00010000083000008ED +:100100000008000500100021001000210000000080 +:10011000000000000582410480100400030000017B +:100120002011080880A041080000210821108088C3 +:100130004082118200A04184000800C000104021CC +:1001400000008000008880000000418200000888D4 +:10015000080000004000000000000000000000C097 +:100160004000A10108008003410080018988C1840A +:10017000410200A1410020104021080021C00800D8 +:10018000051000084000008800020001000208007D +:1001900000001000020204052004080402110005FA +:1001A000100010100009A0040040001182800420FB +:1001B00002800840C00082002008A0418241C01097 +:1001C000104082110100C010000040088203C000EE +:1001D00000000400000004000002A120041082209E +:1001E000084008000840C002002000000800C0408D +:1001F0002004820008409000400410000840820063 +:10020000080400112080824108040000098982004E +:1002100082000200C000000500C040C0041011842C +:1002200011000000000120000020218241884108C7 +:10023000A10582108900400003A0092000A003024C +:1002400040C10408000020900840008821000920D7 +:10025000080000A0000200000408058340C0000060 +:1002600003000582400040C003C12185110011A098 +:100270002100910002C0008400400900210010000C +:100280000040030103C0080400C000090502020485 +:100290000004002000200800000800020000820086 +:1002A000081000000008080200401008820000004A +:1002B00000020920A00809A0A008002108090021C7 +:1002C0008280A0202080000582050202080400022E +:1002D00000400200A005C011000000000802010259 +:1002E000000840088240000420009008090585109D +:1002F000044108058200001103001008A00002411B +:1003000008408200201184808200A00400091004AB +:100310000011000000000008100008100084000018 +:1003200000000000210440100284048200000088C4 +:100330000384080202A12190400208000000008806 +:100340000000001000008810080400008002040172 +:100350004008000080000000000000000000009045 +:100360004001080080100000000180041100408856 +:100370000802829000C0000000001010000005007C +:10038000000010C000042100020421000801000048 +:1003900040040500400000000000000000030408C5 +:1003A000002100020211029020800021084108086B +:1003B0000821004002890208002102900000082163 +:1003C000000800110321200000030200001000219A +:1003D00040100021002100080911820800000400DB +:1003E000902140100800A0008541200440040840EE +:1003F0000805401082000000208482214000021085 +:10040000840840211008080800000800000000408F +:10041000821100880000000800080000010011009F +:1004200009820402020200102140000200001110A3 +:10043000210411880940004080C008848320000006 +:100440001120118200400200004011104102009072 +:1004500021900000408200000000400005000000E4 +:10046000000000A0000000A0408240828283098337 +:10047000080008021188408240020804080000C0F9 +:10048000004000002108880000001140090000041D +:1004900020040002200400C00400410400104000B9 +:1004A00000010001000100010000A1018200000024 +:1004B00001A0400484038885C0C0918810A08840B2 +:1004C0000000A10084000000040800080088100853 +:1004D0009089A11085A002A0000003004000000048 +:1004E00000000000890088010000C0A08588908974 +:1004F000C008C0A0098920C0040302A0000502A012 +:10050000A0418440859100C0030989A1098400822B +:10051000020901C08808908240020000000020000B +:1005200000000040000800040004040283408041F1 +:1005300000000985890582C000A08080A10080009C +:100540000080000004008000000000800080048023 +:1005500080800211904040A00003000003000000D2 +:100560000000000000039003004000020385022009 +:10057000851180418084911100208091C00900C0C4 +:1005800085800004038003A10010A0021188A0A0B0 +:100590000520800220802180C08000000000030030 +:1005A0000000000090000800000090000280210080 +:1005B000022091A00500A1100420A0A09180A08499 +:1005C0008220C11080000080800000000010000028 +:1005D000000800008388408383C183200002040058 +:1005E000000003800000208040001000C1402080F7 +:1005F000201182C102038000040511000321900034 +:100600001091058041881100211141048283A010BE +:100610002103918390C10009000080400000000088 +:100620000000000000000800A000A000C100004081 +:1006300085008200C089104021010910838888400C +:1006400011040990C1090800100482000282000010 +:10065000000000050000041182C121A004840200F2 +:10066000C100A0001110000001C0000090000900AE +:1006700085108800A110C10188029182A040090163 +:100680000320082001A0A1A020A009A104851189B0 +:1006900088C0C001080311A01000902002011000C2 +:1006A000000000000000000000000001A1010100A6 +:1006B0000000000091010000C089C08800A082C035 +:1006C00084020090409102C0000000000000000180 +:1006D000101010A0004001A040101102830584A05A +:1006E00000000001A0000000000000000000010167 +:1006F000000102080105A104850500400082820472 +:1007000005C104400120009090A1C04100089083E1 +:1007100004A10803C04141898810020440A0840458 +:100720001185000000000000000100410903C00223 +:100730001109001011414020002000042105050589 +:1007400080840591000900A182900003000400004C +:100750000041008080800000410080A0A00488212A +:1007600004890041001080030040000000020403DF +:100770000321004100C120848310201100202000AB +:100780000089C185800304210009008800900502CA +:10079000C1A0808880A1008808210380000580A076 +:1007A000008388030009000500030010000000809A +:1007B000000000404121218009004100C184051151 +:1007C000090088029100880285001009001000804D +:1007D0000000000000000000800000002040219088 +:1007E000100040400000008000800004000021084C +:1007F0000902418010850500820590008040C021DB +:10080000214184218400C12180910280C0034110D4 +:10081000900440008303110040401080A0030003B7 +:1008200000A00000000000000000000000000040E8 +:10083000000400000001019100020090000009A1E5 +:10084000C0908808A00110C0A09111108400000180 +:1008500000200010000000000200080082008984CF +:100860001008A08210010020000800040000000011 +:10087000010500A00008000811A009C10884A0001B +:100880000503828884C105000589041191020401D1 +:10089000C1100288C01004000290108811C0A1018C +:1008A00000000020004000000000000000000000E8 :1008B000000000E000000000000000000000000058 -:1008C0000000000000000000000000000000000028 -:1008D0000000000000000000000000000000000018 -:1008E0000000000000000000000000000000000008 -:1008F00000000000000000000000000000000000F8 -:1009000000000000000000000000000000000000E7 -:1009100000000000000000000000000000000000D7 -:1009200000000000000000000000000000000000C7 +:1008C000000000000000000000000000070082009F +:1008D0000000000000000000000000E00000000A2E +:1008E000000000E0000042000000000000000000E6 +:1008F00000000000000000008200000000E0000096 +:10090000000A000000000700600A000000E000008C +:1009100000000000000007000000000000E00000F0 +:10092000000A000000E000000000000000000000DD :1009300000000000000000000000000000000000B7 -:1009400000000000000000000000000000000000A7 -:100950000000000000000000000000000000000097 -:100960000000000000000000000000000000000087 -:100970000000000000000000000000000000000077 -:100980000000000000000000000000000000000067 -:100990000000000000000000000000000000000057 -:1009A0000000000000000000000000000000000047 +:100940000000FD00000000C0F0C000E600E900006B +:10095000000000000000000000005AF05AF064643B +:100960004064D0F010F03C3FFCFF000000000000AD +:10097000000000000000000000000000BDFC240C8E +:100980000042664280888000C0C00004606C606FD6 +:10099000F7D33410FFBF0F8F7C1C7C7CF76791016D +:1009A0000DBD00000000000003033F3F00000000F9 :1009B0000000000000000000000000000000000037 -:1009C0000000000000000000000000000000000027 -:1009D0000000000000000000000000000000000017 -:1009E0000000000000000000000000000000000007 -:1009F00000000000000000000000000000000000F7 -:100A000000000000000000000000000000000000E6 -:100A100000000000000000000000000000000000D6 -:100A20000000000000000000000000000000F0F0E6 +:1009C000000000009D00000000C0000000EF00E9F2 +:1009D0002400006000000000000000005AF05AF0FF +:1009E00000000000D03010301313D3D300000000FB +:1009F00000000000000000000000000000007EFC7D +:100A0000180C066606663C330000C0C00000606C2F +:100A10006060DBDB1818F0B000801C1C7C7CF66684 +:100A20009000BDBD00000000000000C33CFF0000BE :100A300000000000000000000000000000000000B6 :100A400000000000000000000000000000000000A6 :100A50000000000000000000000000000000000096 @@ -90304,405 +90304,405 @@ :100A80000000000000000000000000000000000066 :100A90000000000000000000000000000000000056 :100AA0000000000000000000000000000000000046 -:100AB0000000000000000000000000000000000036 -:100AC0000000000000000000000000000000000026 -:100AD0000000000000000000000000000000000016 -:100AE0000000000000000000000000000000000006 -:100AF00000000000000000000000000000000000F6 -:100B000000000000000000000000000000000000E5 -:100B100000000000000000000000000000000000D5 -:100B200000000000000000000000000000000000C5 -:100B300000000000000000000000000000000000B5 -:100B400000000000000000000000000000000000A5 -:100B50000000000000000000000000000000000095 -:100B60000000000000000000000000000000000085 -:100B70000000000000000000000000000000000075 -:100B80000000000000000000000000000000000065 -:100B90000000000000000000000000000000000055 -:100BA0000000000000000000000000000000000045 -:100BB00000000000000000000000000000610000D4 -:100BC0000001000000000000000000000000000024 -:100BD0000000000000000000000000000000000015 -:100BE0000000000000000000000000000000000005 -:100BF00000000000000000000000000000000000F5 -:100C000000000000000000000000000000000000E4 -:100C100000000000000000000000000000000000D4 -:100C200000000000000000000000000000000000C4 -:100C300000000000000000610006000D0000F5F556 -:100C4000F5050CAAFCAA000000000000000000004E -:100C50000000000000000000000000000000000094 -:100C60000000000000000000000000000000000084 -:100C70000000000000000000000000000000000074 -:100C80000000000000000000000000000000000064 -:100C90000000000000000000000000000000000054 -:100CA0000000000000000000000000000000000044 -:100CB000000000000000000000000000845100005F -:100CC00005F505050CAAFCAA0000000000000000C4 -:100CD0000000000000000000000000000000000014 -:100CE0000000000000000000000000000000000004 -:100CF00000000000000000000000000000000000F4 -:100D000000000000000000000000000000000000E3 -:100D100000000000000000000000000000000000D3 -:100D200000000000000000000000000000000000C3 -:100D3000000000000000000000000000000004515E -:100D400004513F5F30500AFFFAFF0000000000002E -:100D50000000000000000000000000000000000093 -:100D60000000000000000000000000000000000083 -:100D70000000000000000000000000000000000073 -:100D80000000000000000000000000000000000063 -:100D90000000000000000000000000000000000053 -:100DA0000000000000000000000000000000000043 -:100DB0000000000000000000000000000000000033 -:100DC000000000003F5F30500A00FA000000000001 -:100DD0000000000000000000000000000000000013 -:100DE0000000000000000000000000000000000003 -:100DF00000000000000000000000000000000000F3 -:100E000000000000000000000000000000000000E2 -:100E100000000000000000000000000000000000D2 -:100E200000000000000000000000000000000000C2 -:100E300000000000000000000000000000000000B2 -:100E40000000000000000000000000002000200062 -:100E500020002000200420000000000000002000EE -:100E6000200000000004000000000000400000001E -:100E70000000000000000000000200000000000070 -:100E800040000000000400030000000000002000FB -:100E90000000000000000000000000000000010051 -:100EA000000000000000000400000000000000003E -:100EB0000000000000000000000000000000000032 -:100EC0000000000000000000000000000000000022 -:100ED00080008000800080010040000200000002CD -:100EE00000000000000000004000000000000000C2 -:100EF00000000000000000000000090000000000E9 -:100F00000000800000000000000000000000000061 -:100F100000000000000000000000000000000000D1 -:100F200020000000000000000000000000000000A1 -:100F300000000000000000000000000000000000B1 -:100F400000000000000000000000000000000000A1 -:100F5000020000000000000000000000000000008F -:100F60000000000020000000000000000000000061 -:100F70000000000000000000000000000000000071 -:100F8000000000000000000000000000000002005F -:100F90000000000000000000000000000000000051 -:100FA0000000000000000000000000000000000041 -:100FB0000000000000000000000000000000000031 -:100FC0000000000000000000000000000408000015 -:100FD0000000000000000000000000000008000009 -:100FE00000000000000000000000000000080000F9 -:100FF00000002000000200000000000000040000CB -:1010000000000000000000000000000000000004DC -:1010100000000000000000000000020000000000CE -:1010200000000000000000000000000000000000C0 -:1010300000000000000000000000000000000000B0 -:1010400000000000000000000000000000000000A0 -:101050000000000000000040000000000000000050 -:101060000000000000000000000000000000000080 -:101070000000000000000000000000000000000070 -:1010800000000000000000000000880000000000D8 -:1010900020002000000020000000000000000000F0 -:1010A0000000000000000000000008000000000038 -:1010B0000000000000000000000000000000000030 -:1010C00000000000000000000000000000004000E0 -:1010D000008400000000000000000000000000008C -:1010E0000000000000000000000000000000000000 -:1010F00000000000000000000000000000000000F0 -:1011000008000000000000000900000000000000CE -:10111000000080008000000080000000000000004F -:1011200000000000000000000000000000000000BF -:1011300000000000000000000000000000000000AF -:10114000000000000000000003000000000000009C -:101150008000000000000000000000040004000007 -:10116000004000000000000000020000000000003D -:10117000000000001000A0000000000008000800AF -:101180000800A000000000000000000000000000B7 -:10119000000000000000000000050000000000004A -:1011A00000000000000000000000004100000020DE -:1011B00000000000000000000000080000400020C7 -:1011C00000000000004000000000000000000000DF -:1011D000000000000000000000000000000100010D -:1011E00000000000000000000000000000000000FF -:1011F00000000000000000000000000000000000EF -:1012000000000000000000000000000000000000DE -:1012100000000000000000000400000000000000CA -:1012200000000000000000000000000000000000BE -:1012300000000000000000000000000000000000AE -:10124000000000000000000000000000000000009E -:10125000000000000000000000000000000000008E -:10126000000000000000000000000000000000007E -:10127000000000000000000000000000000000006E -:1012800000000000000000000000820000000000DC -:10129000C0000000000000000000A000008000046A -:1012A000000000000000000000000000000000003E -:1012B000000000000000000000000000000000002E -:1012C000000000000000000000000000000000001E -:1012D0000000000000000000209000000500000059 -:1012E00000000000000020000000000000000000DE -:1012F00000000000000000000000000000000000EE -:1013000000000000000000000000000000000000DD -:1013100000000000000000000000000000000004C9 -:1013200000010000000000000000000000000000BC -:1013300000000000000000000000000000000000AD -:10134000000000000000000000000000000000009D -:10135000000021000000000000000000000000006C -:101360000000000800000100000000000000000074 -:101370000000000000000800000000000000000065 -:1013800000000800000000000000000082000000D3 -:101390000000080008000000000000000004000435 -:1013A00000040000000000000240000000000000F7 -:1013B000000000000000000000000000000000002D -:1013C0000000000000000000000000000400000019 -:1013D000000000000000000000000000000000000D -:1013E00000000000000000002000000000000000DD -:1013F00000000000000000000000000000000000ED -:1014000000000000000000000000000000000000DC -:1014100000000000000000000000000000000001CB -:1014200000010001000000000000000000000000BA -:1014300000000000000000000000000000000000AC -:10144000000000000000000000000000000000009C -:10145000000000000000000000000000000000008C -:10146000000000000000000000000000000000007C -:10147000000000000000000000000000000000006C -:10148000000000000000000000000000000000005C -:101490000000000000000000040000000000000048 -:1014A000000000000000000000000000000000003C -:1014B000000000000000000000000000000000002C -:1014C000000000000000000000000000000000001C -:1014D00000000000000000000000910082000000F9 -:1014E00000000000000000000000000040000000BC -:1014F00000000000000000000000000000000000EC -:1015000000000000000000000000000000000000DB -:1015100000000000000000000009801100400040B1 -:1015200000000500000009000000000000000000AD -:10153000000008000000050000000000000000009E -:10154000000000000000000000000000000000009B -:1015500000000000000000000000000040008000CB -:10156000000000000000000000000010000000105B -:10157000000000000000000000000000000000006B -:10158000000000000000000000000000000000005B -:10159000000000000000000000000000000000004B -:1015A00000030000000300000041000000000000F4 -:1015B000000000000000000000000000000000002B -:1015C000000000000000000000000000000000001B -:1015D000000000000000000000000000000000000B -:1015E00000000000000000000000000000010000FA -:1015F00000010000000000000000000000000000EA -:1016000000000000000000000000000000000000DA -:10161000000000000000000000000000009000003A -:1016200000000001000000000000000000000000B9 -:1016300000000000000000000000000000000000AA -:10164000000000000000000000000000000000009A -:10165000000000000000000000000000000000008A -:10166000000000000000000000000000000000007A -:1016700090000000010000000000000000000000D9 -:10168000000000000000000000000000000000005A -:10169000000000000000000000000000000000004A -:1016A000000000000000000000002000000000001A -:1016B000000000000000000000000000000000002A -:1016C000000000000000000000000000000000001A -:1016D000000000000000000000000000000000000A -:1016E00000010001000000010000000000000000F7 -:1016F00000000000000010000000000000000000DA -:1017000000000000000000000000000000000000D9 -:1017100000000000000000000000000000000000C9 -:101720000000090009000000000000008000000027 -:10173000030000000000000000000000000000089E -:101740000020000000000000000000000000000079 -:101750000000000000000000000000000000000089 -:1017600000000002002000410020000000000000F6 -:101770000000000000000000000000000000000069 -:101780000000000000000000000000000000000059 -:101790000000000000000000000000000000000049 -:1017A0000000214010004100400000000002000045 -:1017B0000000000000000000000000000000000029 -:1017C0000000000000000000000000000000000019 -:1017D0000000000000000000000000000000000009 -:1017E00000000000000500000000000000000000F4 -:1017F00000000000000000000000000000000000E9 -:1018000000000000000000000000000000000000D8 -:1018100000000000000000000000000000000000C8 -:1018200000000000010001000000000000000001B5 -:1018300000000000000000000000000000000000A8 -:101840000000000000000000000000000000000098 -:101850000000000000000000000000000000000088 -:101860000000000000000000000000000000000078 -:10187000000000000000000000E000000000000088 -:101880000000000000000000000000000000000058 -:101890000000000000000000000000000000000048 -:1018A0000000000000000000000000000000000038 -:1018B000000000E000000000000000000000000048 -:1018C000880000E0000000000000000000000000B0 -:1018D0000000000000000000000000000000000008 -:1018E00000000000000000000000000000000000F8 -:1018F00000000000000000000000000000000000E8 -:1019000000000000000000000000000000000000D7 -:1019100000000000000000000000000000000000C7 -:1019200000000000000000000000000000000000B7 -:1019300000000000000000000000000000000000A7 -:101940000000000000000000000000000000000097 -:101950000000000000000000000000000000000087 -:101960000000000000000000000000000000000077 -:101970000000000000000000000000000000000067 -:101980000000000000000000000000000000000057 -:101990000000000000000000000000000000000047 -:1019A0000000000000000000000000000000000037 -:1019B0000000000000000000000000000000000027 -:1019C0000000000000000000000000000000000017 -:1019D0000000000000000000000000000000000007 -:1019E00000000000000000000000000000000000F7 -:1019F00000000000000000000000000000000000E7 -:101A000000000000000000000000000000000000D6 -:101A100000000000000000000000000000000000C6 -:101A200000000000000000000000000000000000B6 -:101A300000000000000000000000000000000000A6 -:101A40000000000000000000000000000000000096 -:101A50000000000000000000000000000000000086 -:101A60000000000000000000000000000000000076 -:101A70000000000000000000000000000000000066 -:101A80000000000000000000000000000000000056 -:101A90000000000000000000000000000000000046 -:101AA0000000000000000000000000000000000036 -:101AB0000000000000000000000000000000000026 -:101AC0000000000000000000000000000000000016 -:101AD0000000000000000000000000000000000006 -:101AE00000000000000000000000000000000000F6 -:101AF00000000000000000000000000000000000E6 -:101B000000610007000D0000000000000000000060 -:101B100000000000000000000000000000000000C5 -:101B200000000000000000000000000000000000B5 -:101B300000610006000D0000000000610007000DBC -:101B40000000000000000000000000610007C00964 -:101B50000000000000000000000000000000000085 -:101B60000000000000000000000000000000000075 -:101B7000000000610006000D0000000000000000F1 -:101B80000000000000000000000000000000000055 -:101B90000000000000000000000000000000000045 -:101BA0000000000000000000000000000000000035 -:101BB00000005555555500000000000000000000D1 -:101BC0000000000000000000000000000000000015 -:101BD0000000FF0000000000000000000000000006 -:101BE00000000000000000000000000000000000F5 -:101BF000000000000000000080800F0000000000D6 -:101C000000000000000000000000000000000000D4 -:101C100000000000000000000000000000000000C4 -:101C200000000000000000000000000000000000B4 -:101C300000000000EAFFAAFF000000000000000012 -:101C40000000000000000000000000000000000094 -:101C500000000000FF000000000000000000000085 -:101C60000000000000000000000000000000000074 -:101C70000000000000000000000000000000000064 -:101C80000000000000000000000000000000000054 -:101C90000000000000000000000000000000000044 -:101CA0000000000000000000000000000000000034 -:101CB00000000000000000800000000000000000A4 -:101CC0000000000000000000000000000000000014 -:101CD0000000000000000000000000000000000004 -:101CE00000000000000000000000000000000000F4 -:101CF00000000000000000000000000000000000E4 -:101D000000000000000000000000000000000000D3 -:101D100000000000000000000000000000000000C3 -:101D200000000000000000000000000000000000B3 -:101D300000000000000000000000000000000000A3 -:101D40000000000000000000000000000000000093 -:101D50000000000000000000000000000000000083 -:101D60000000000000000000000000000000000073 -:101D70000000000000000000000000000000000063 -:101D80000000000000080000000000080000000241 -:101D900000000000000000000000200040000000E3 -:101DA00040050000000000000000000000020000EC -:101DB0008804000000000002000220000002000071 -:101DC000000000000000000200020003000000000C -:101DD00000030004000000020000000020000000DA -:101DE00000000000000200020000000200000000ED -:101DF00000000000000000000000000000000000E3 -:101E000000000000000000001000000000000000C2 -:101E100000000000000200000000000000000000C0 -:101E200000000000000000000000000000000000B2 -:101E30000000000000000000000000000000008220 -:101E40000000000000000000000021000000004031 -:101E50000000000000000000000000000000000082 -:101E60000000000000000000000000000000000072 -:101E70000000000000000000000000000000000062 -:101E80000000000000000000000000000000020050 -:101E90000000000000000000000000000000000042 -:101EA0000000000000000000000000000000000032 -:101EB0000000000002000000000000000000000020 -:101EC00000000000004000000000000000000000D2 -:101ED0000000000000000000000000000000000002 -:101EE00000000000000000000000000000000000F2 -:101EF00000000000000000000000000000000000E2 -:101F0000000000000000000000000082000000004F -:101F100000000000000000000004000000000004B9 -:101F2000000000080000000000000008000000841D -:101F3000000200000000400000000000000000005F -:101F4000000000820000020000000000008200008B -:101F50000000000000000000000000000000000081 -:101F6000000200000000000000000000000000006F -:101F70000000000000000000000000000000000061 -:101F80000000000000000000000000000000000051 -:101F900090000000000000000000000000000000B1 -:101FA0000000000000000000000000000000000031 -:101FB0000000000000000000002000000000000001 -:101FC0000008000000000000000000000000000009 -:101FD0000000000000000000000000000000000001 -:101FE00000000000000000000000000000000000F1 -:101FF00000000000000000000000000000000000E1 -:1020000000000000000000000000000000000002CE -:1020100000000008000000000000000000000000B8 -:10202000008200000000000000000000000000002E -:1020300000000000000000000000000000000000A0 -:102040000000000000000000000000000000000090 -:102050000000000000000000000000000800000078 -:102060000000000000000000000000000000000070 -:102070000000000000000000000000000000000060 -:102080000000000000000000000000000000000050 -:102090000000000000000000000000000000000040 -:1020A0000000000000040000000000000400000028 -:1020B0000000000000000000000000000000000020 -:1020C00000000000000000400000000000000000D0 -:1020D0000000000000000000000000000000000000 -:1020E00000000000000000000000000000000040B0 -:1020F00000000000000000000000000000000000E0 -:1021000000000000000000000000000000000000CF -:1021100000000000080002000000000000000200B3 -:1021200000000000000000000000000000000000AF -:10213000000000000000000000000000000000009F -:10214000000000000000000000000000000010007F -:10215000000000000000000000000200400000003D -:102160000800000000000000000000000000000067 -:10217000000000000000000000000000000000005F -:10218000000000000000000000000000000000004F -:10219000000000000000000000000000000000003F -:1021A000000000000000000000000000000400002B -:1021B000000000000000000000000000000000001F -:1021C000000000000000000000000000000000000F -:1021D00000000000000000000000000000000000FF -:1021E00000000000000000000000000000000000EF -:1021F00000000000000000000000000000000000DF -:1022000000000000000000000000000000000000CE -:102210000000000040000000000004002100080051 -:10222000080008000000000000000000000000009E -:10223000000000000000000000000000000000009E -:102240000000000000000000000000000000080086 -:102250000000080000000000000000000000000076 -:10226000000000000000000000000000000000006E -:10227000000000000000000000000000000000005E -:102280000000000000000000000000000000080046 -:10229000000000000000100000000000000000002E -:1022A000000000000000000000000000000000002E -:1022B000000000000000000000000000000000001E -:1022C000000000000000000000000000000000000E -:1022D00000000000000000000000000000000000FE -:1022E00000000000000000000000000000000000EE -:1022F00000000000000000000000000000000000DE -:1023000000000000000000000000000000000000CD -:1023100000000000000000000000000000000000BD -:10232000000011000000000000000000000000009C -:10233000000000000000000000000000000000009D -:10234000000000000000000000000000000000008D -:10235000000000000000000000000000000000007D -:10236000000000000000000002000000000020004B -:1023700020400000000000000000000000000000FD -:10238000000000000000000000000000000000004D -:10239000000000000000000000000000000000003D +:100AB0000000000000000000000000006C6C0CFC56 +:100AC00000000000660FFF0FF000F000FF307630EE +:100AD000C3810C0C0020002000000000F5F500F59B +:100AE000300FFC0F0000000000303C303C003CFFA9 +:100AF00000000000BD187E7E0000000000006600BF +:100B00000000303030308D0C8D0C00F40FF42D2DA2 +:100B10002D2D060606062424CFCF0FFF0EFE3E3EE7 +:100B2000003E2C00240018001010303F6F6FF0F0D2 +:100B30003C3C0000000000000000000000006C6C65 +:100B40000CFC00000000660F000FF0E0F0F0000069 +:100B50000000FF990C0C0000002000000000F5F5DB +:100B6000F5000C3333CF00000000240024000F6692 +:100B70000F6600000000B8B87E7E00000000000094 +:100B800000000000606F6F6FBD3C810000F40FF447 +:100B90006666FF663E063E9F24240C0C01F100F0C1 +:100BA000FFFFC1FF2C2C242418001818303F606070 +:100BB000F900FF0000000000000000000061400696 +:100BC0000009000500610006000D00050061000637 +:100BD000009D000085615A0E059D00A5006100067C +:100BE000000D000080610007001D0000006130075B +:100BF000000D000100610006000D00010000006111 +:100C00000006000D000000610007000D00000061FB +:100C1000000E009D000000413005000D0000006145 +:100C20000E06000D000000610007001D00000061BD +:100C30005007000D000000610006000D00000000DC +:100C40000000F03CF0FF0C0C3E0EF7FF000000C36C +:100C5000AAF0BECCBEC0FAFAC2FAF7F4FCFC00005F +:100C600000003C3C3C3C0000000000000000EB00A9 +:100C7000EBFCCF004F0000000000FFC30F0300009B +:100C800041550000AF8300FFF0F0F5F0F0F0F040C8 +:100C9000000000001441EBFF28280000886E72F16C +:100CA0001700D4D40000CC0FFF5C0F5C0C0C0C0CB4 +:100CB0000000000028F3EBF300000000F03CFFAA66 +:100CC00000000000F03CF0FF0C0CFECEC3C300009F +:100CD000FFC3AAF0BEFCBEF0FAFAFAFA0000000068 +:100CE00000000000AAAAF0F00000000000000000D0 +:100CF000EBC3EBFCFF007F0000000000FFC3554189 +:100D0000000050550000AF83000000000000F050CC +:100D1000F0400000000228BE146928280A0A886EE4 +:100D200072F11700E8E80000F0CCF05C005C0C3CCD +:100D30000C3C000000002830EB3000000000F03CCC +:100D400000AA00000000000000000050AAFA000005 +:100D50000000000000000A0A28AA000000000CFCA5 +:100D6000FAFA00000000000000000000000000008F +:100D70000000D779FF791C001C0000000000FFFF75 +:100D80005A5A0000FFFF82C01C1400AAC0C03020C5 +:100D9000FFFFF3B3D56E6518FFFFF00F287D7D28A8 +:100DA00000410041FFB0FFB03014303CFFFFFF0FA7 +:100DB00055FF7878000000000000000000000000EF +:100DC0000000000000000200FEFEFFFF0555AFFF1F +:100DD000FFFFFFCF820800AA000000000000000013 +:100DE0000CFC0A0A000000000000000000000000E7 +:100DF00000000000D7FBFFFB1C00140000000000F7 +:100E000000005A5A0000FFFF00001C3C00AA00002E +:100E10000000D7D7FFFFD56E65180000F00F287DC2 +:100E20007D2840405454FF10FF1030003028C3C3C9 +:100E3000C30300AA78780000000000000000000052 +:100E400000000000000082002011C000200240834A +:100E5000000004091002C0030400408020022008A2 +:100E600040008404401004028420042020840000F8 +:100E70000210890004050410001000020411000093 +:100E800020002004841100031005400040022000CF +:100E9000000084058803041104008800A002008477 +:100EA000C1000084200010848485880001000000B7 +:100EB0000080C0800500048504054000020803800E +:100EC0000380020020808904100209000002000053 +:100ED00000080002400000902002C0040040109072 +:100EE000400200020000C00280000083A0410020F8 +:100EF0000484C09108002000900140010001A0007E +:100F00001020100200001000000020008500C00129 +:100F10000000000000000500000040004000090043 +:100F20004010400010100000C010204000000808D1 +:100F30000000002040204008000400000082000063 +:100F400082041008410000024000000402000080FA +:100F5000000510080080031100008404000000094F +:100F600005008210021089100009004000100002E4 +:100F70000002858390400140A0C0000000080000EE +:100F80000190000000040410000300000190000024 +:100F9000104102089021204002001080004100050D +:100FA0000009C0C1840000800140008200000040B0 +:100FB000400002090020002000830009000901838D +:100FC0000005000000000009000000001008008279 +:100FD00000100808834000024084110804880910AA +:100FE00000080484008200044084410820100009A5 +:100FF000008400094040108210C1004040080004F5 +:1010000005844010008405100084000400000203E1 +:1010100000088010001000100009030802020008F8 +:1010200009040000000200000004020000084082E1 +:101030000084800400C000110085022000080040E8 +:10104000400200C000842010008400000000400323 +:1010500004080208400208030408404000109008F9 +:1010600040020402040200402008000305100203AD +:101070000040A01000210009400800210008402184 +:101080000400004005080040100200410008000074 +:101090008802A00008080021000800030210844014 +:1010A00000100000A00300080210090840401008CA +:1010B00000030010000888080000000205880800EE +:1010C000C003080800008810A005021000000810E6 +:1010D0000000908404102111001000A002884182B9 +:1010E0000910800008058040080000881088400131 +:1010F00000080020008200880308002008080388F8 +:1011000080908808008804000084410810020008CC +:10111000000000080800809000002100030805007E +:10112000000809844000000803008301202000A17A +:10113000850103C010850308000009820808841097 +:101140002088008400A003A0008400000000008428 +:1011500003018805A0200020004090200840824024 +:10116000084088090440A004000040409004044066 +:10117000404082040840000500000003A08288115E +:101180000109082000020921040010409003824058 +:10119000082000008220041008000480824000C063 +:1011A0008200080008090400100008004004200420 +:1011B00000040840A180880010090011C01100201F +:1011C000001183000000C01140024000C080A00058 +:1011D000A041080904884084000000840008001031 +:1011E000000800000200200002000000009000A0A3 +:1011F000088400A0210003100908044000401141A8 +:1012000041000490030540830800000400000282AE +:10121000000000840000000000000040410202883D +:10122000000208000004000200000082020080406A +:10123000800110000000101000000810040000845D +:101240000305009004822108000000040000000251 +:101250000008048200900800000000400021900572 +:10126000000040000040830508000041C108000064 +:10127000080001418283830002098220900508034F +:101280000008840088050041040004880040C00371 +:1012900000410000000000000040000082054010F6 +:1012A00000000021000300218321000800410841C3 +:1012B000A000A084828011800000080000000800C7 +:1012C00083858341080210A000418202824100040C +:1012D00000002000080000080000400005840040D5 +:1012E00021001000A00000001004050800904090AC +:1012F0001108200008080040040000000001002040 +:1013000000020000008800000220808280034190DB +:10131000080000000000000800002100080800008C +:10132000898300040010000200A0400000000008B3 +:10133000000000881005080810400090000000041C +:1013400009000402084008020005028400000004AD +:10135000000100000000080021009010900202210E +:1013600000100008821140414004000300210210D7 +:1013700000000421822090000504040504418840F7 +:10138000008088A140210010C0100020000000A1B2 +:101390000004404182210009002100008803400030 +:1013A0000200004040040041402100210405821059 +:1013B0004003402190080004C02183100021C00890 +:1013C00090000000C00902028804021008210809E8 +:1013D000084188210008112090081002080020010F +:1013E00000201121200121040984000020000000B8 +:1013F00004000204000000002000400000048000FF +:101400000000002000402000000110000302000442 +:10141000202000C004000000000000820000000046 +:1014200080000020000000A00000830000A0000059 +:1014300000000000000000C00000040010000000D8 +:101440002000002000840040000041000000000057 +:1014500003000000000000204000000002008402A1 +:1014600001908884C0C00000000121000000C0403D +:1014700091C000A084820088000408A0C00408A0D5 +:10148000919088008220A0C1820300A08284204124 +:1014900083088220909100000000000000000000FE +:1014A00090010801C0008201A08804200804828401 +:1014B00082A001890291880920C1A1208321820391 +:1014C0004188112082041004A141118982C01110A9 +:1014D000000200040820002000000000200000019D +:1014E00080801080000080000008100802090010B1 +:1014F0008080A000008000800080040080800000C8 +:101500008080A0000000800089C100A10009800344 +:1015100000C10403800380030000000000000000FD +:10152000000000418021001080218000890080801F +:101530008000000503020002000280C14005044053 +:101540000083898020008080840090C005020341D0 +:1015500082C00391050980100005001020111005BC +:1015600000100000009180000020000009004000F1 +:1015700041809000A002880441A18000890085007C +:101580000300A000A040830004808080802180A010 +:10159000809090800009A090048300030000000068 +:1015A00000000000800009050400404009000441DB +:1015B000C004C0100000000080008000C000024095 +:1015C000058020218900082105C0C18020000084F9 +:1015D0008011A180040991A1850083000300080007 +:1015E00088004185048404C1A0828400009000002A +:1015F000010001A0A1000201850121910800101045 +:1016000002048800030008C0A020820488408200F1 +:10161000A010C091401010C021080511000000006A +:101620000000000000008882C0008490C00190206B +:101630000100A19109018800C000A000080809006C +:10164000919190A001010200830083C103A00300D7 +:10165000040982200920850010840420020084A04F +:101660000300110021A04003000282C1010000011B +:1016700000000100000140820008C00310042000A7 +:101680000002A08288C0880500108483A008040896 +:101690000040050483C0A0910140C09102100000E9 +:1016A000000000000000000000090104000100002B +:1016B000100200A11089108282A0010941849021AA +:1016C00020A101090090918220400010048405C1EE +:1016D000030300844009A1A0040101010101830169 +:1016E000000000008401000080080011001021406B +:1016F000000811040805004080020085002180894F +:10170000001000418080008404900011002180833B +:1017100080804100820089800908402110219005C5 +:1017200000000000000000000000008803210221EA +:10173000090480C100A00021808200412088400966 +:101740000003000211824105098500830011009009 +:10175000A1844103000584888884802110094021E8 +:101760008910000504054140110310000500050023 +:10177000080002A1210040000210C0008400208067 +:10178000C0400000004080000000000080400000D9 +:101790000010840490840203400003A1848882A185 +:1017A0008502000000000000000000000840000268 +:1017B000C10011838800911020001040000000A09B +:1017C00000000000C10408212180100580808004F1 +:1017D00000C00011000480900080001020040382EB +:1017E000A080110403892180020040C10000401044 +:1017F0008410C10000C1000000000000C188400248 +:101800008504020100884091A0C00400028204887F +:101810009010C000C00182880508C000830505C083 +:101820008491090000000000000000000000090190 +:101830008401109010A184C002A04108040100009E +:1018400000A100A00000C18291032184850010C086 +:1018500002212008C00000011011C0044000C00493 +:101860000421838441010041008201020111000032 +:1018700000000700840A000000E00000880000006B +:101880000000070050000000000000000000000001 +:1018900000000700000000810000070000000000B9 +:1018A00000000700410000000000000000000000F0 +:1018B0000000000000000000000000000000000028 +:1018C0000000000000000000000000E00000000038 +:1018D0000000000007005082500000E00700840074 +:1018E000000000E000000000000000E000000041F7 +:1018F000D7F3D7F3CF45CF4500000000000000002C +:10190000FF00033F5050FAFABA10BA1000F0000F6F +:10191000070DD77DFFF06960000400140082F0F825 +:10192000FFF03CAA43831C2C0000000000000000D4 +:1019300000000FFF0969CCCCCCCC000000000000F7 +:101940000000000000009E9EFF3C05050A3A003C96 +:10195000003C4515CF3FFFFF82D7C5CFC5CF8F0CC9 +:10196000DF5D010101010000000000000000000037 +:101970000000143014300045004500000000000055 +:1019800000000000033F4050EAFABA10BA1000000D +:101990000000D77D070DFF0F690900000014F0F269 +:1019A000002800F03CAA5FAF5FAF0000000000001D +:1019B00000000000FF0F6909AAAAAAAA01000000FE +:1019C0008000000000000000DFDFFF3C5555AAAAA0 +:1019D00055500050CF3F4515FDF882D7050F050F34 +:1019E0008300820005000F0A0000000000000000D4 +:1019F00000000000CF0CC300F000F7000000000062 +:101A000000000000783C283CC1C1CBCBC3C301C35C +:101A100054FC51F3140000000C000800000000000A +:101A2000FF0F7D7DCCFF88AA445588AA00000000E6 +:101A3000000000000000000000003C3CCF0300005C +:101A40000000000000005555FF0004040000A0A0A5 +:101A50003F30A300A30054FC51F37171417D3C3C25 +:101A60003C3C54540404000002A2501450140000E2 +:101A700000009600FF00CF0CFF3CF000F0000000DB +:101A80000000000000007D3C2D3CFF00FF0001C372 +:101A900001C3A8FCA2F30000000008000C008000B5 +:101AA0002000000F414188AACCFFCCFFCCFF0000F2 +:101AB000000000000000000000000000FC33330CB8 +:101AC00000000080410000000F0F3C3C0CFC0000B7 +:101AD000AFAF3F30A3F0A3F0A8FCA2F3F3F3C3FF32 +:101AE000343E14BE54045404A0A002A2501450006A +:101AF0000000000006060F0F00610E06000D00003A +:101B000000600007000D0000A0610006000D00004D +:101B100000613006009D000005610A0E050D00A061 +:101B2000A0615036009D000805610A0E050D00A059 +:101B30000000000000000000000000610006001D21 +:101B4000000000610006000D000100610006000DAC +:101B50000000A0415005001D00000061000E004D76 +:101B6000000005610A0FC50D00A0006130060009E4 +:101B7000000100600007000D0000D7D0EBE0A58158 +:101B8000A5240400000035053F0FCFC3000000C3AB +:101B90003CFF00000000F2F2B1B1000000000000C4 +:101BA000002CC3C04340000000000FC35500D2D238 +:101BB000FFFF00000000000000000000C3C3D9D9EF +:101BC0006A90BB56070BD0E005050014000000002A +:101BD0000F09FF69C3CFC3FFAA2AF27200000000F9 +:101BE000FF3CC3000000000070757A7F0FF0C3C394 +:101BF0003D3D7D3C4488CCCCFFCF3F0FD0D7E0EBC0 +:101C0000FFC3FF3C04000000F5C5FFCF00C3000088 +:101C1000C0C0FCFC0000000088886E6E0000000060 +:101C20000000001C0300434000000000FFFF5500BF +:101C3000FFFF00AA000000000000000000001D1DC2 +:101C400046466A90BB56D7EBD7EB050541550000D9 +:101C50000000FF690F09C3CFC3C3A808B07000001C +:101C600000004D4D4D4D0000000020252A2F0FF0A3 +:101C7000C3C33838283C55AAFFFFF5C53505000019 +:101C800000000000000045CF51F3F0FAFF550000BE +:101C90000000E1410FFF00000000F00FF00F000016 +:101CA0000000D7D07D70AA08FF0C0000000050FA99 +:101CB000BF3DC35500000000000000000000000010 +:101CC0008282AA00F50505F500000000870F0F8746 +:101CD00002AA220000000000FFFFFFFF3FEF3FFFCE +:101CE0000000000000000000C0C000F00000828280 +:101CF000AB01BF15280F3C0F458ACFCFFDFF828275 +:101D000000000000000000008ACFA2F3FFFA005597 +:101D100000000000EB4B00F0000000000000FFFF9F +:101D200000000000D7077D0DAA28FF3C000000003E +:101D300050FA8301C355FFFF0000000000000000BF +:101D4000000082825F5FF50505F500000000C34BCF +:101D50004BC30228420000000000FF03FF5F30C0B9 +:101D60003FCF0000000082005050F0F0F0F0000083 +:101D70008282AA00FF550000000051A2F3F3F1FF98 +:101D8000BEBE880000034010200004008400020052 +:101D900000410010200420040040840004040402D8 +:101DA00020002005C010840420112000820020059E +:101DB00084000200C00004080000840084000409BC +:101DC0008800000020002000040004002004880097 +:101DD00020021010201188000400000004000402FA +:101DE000C0008200200004002009C0008409040013 +:101DF0002011840204000202C000C008200020104C +:101E00000000200200900500049000900000009067 +:101E100041000090009009900000009000000082B6 +:101E200009000000009000000400000000020040D3 +:101E3000040010000000000000000000000400008A +:101E400041000000000000000000008220000000AF +:101E50000400000440000500000021C01100000043 +:101E6000000000000000100000000500000020C07D +:101E70000000000010000000100020000000000022 +:101E80000084000009009005000400000000020327 +:101E900000200004080500004020901008400000C9 +:101EA0000241002100030000000400410000000086 +:101EB0009004000400090004000300030004004132 +:101EC00000000000000000000003000000100010EF +:101ED0000004200400000000004100000000001089 +:101EE000004000000200200000090005A0000020C2 +:101EF0000008000000030040004100000002000054 +:101F000000400000000000000440088804844008ED +:101F10000310000400000008098400880082008883 +:101F200000400084008800020008008404C040884B +:101F30001084000800100010000800C00084008811 +:101F40000010001000080008000041040010000408 +:101F50000004401000080084050800820000020808 +:101F60000808000800080082001000002010000887 +:101F70000084000800080008041000880008008899 +:101F800000880010008800020010C003902100416A +:101F90002040000588211021000390030003040560 +:101FA00082030840004140028408004100080021EB +:101FB00000100000000390080008200500210040E8 +:101FC0009040000300082040000200009003000839 +:101FD0000008000800080021200882020400000315 +:101FE0000005C00500008410004108080021880099 +:101FF00082002040000004000041A0088809002061 +:1020000004210405044100080000000000900008BD +:102010002182002010A0400800041000211000A020 +:1020200000884140000803080200091000820000F7 +:1020300005000000210000A005A0008400A000040D +:10204000000000A000A000A0009000A00000090077 +:1020500041C020A005A000040010000021040300DE +:10206000030803022102030021000800050000000C +:1020700008002100000000A003A0038410000082DB +:1020800003C0100820A000000010210000841010E0 +:102090000800000884208409080982050009084115 +:1020A0000010000908210000000208090004004097 +:1020B0000040080082408420881100048440000011 +:1020C00040000008820482008203001008400000E3 +:1020D000A00040002040820482410004A00084044B +:1020E00000410000080000400004204090098202E6 +:1020F0009040C0401000000000000000000282007C +:102100000800A00000400005040000400009000095 +:102110002090028200001190400005040008094050 +:1021200000C041C00220000003820888038804C068 +:10213000009000000210208240084000408404000B +:10214000009040C0030240840490008400A011204D +:1021500000000040008400820040000421000500CF +:102160000400050000040000044008C0080400004A +:1021700002004100000404C004C0040011900340A8 +:102180000300008800040000000040880090000068 +:102190000000000000000008001008030002020018 +:1021A00000020000000000210008001000000021D3 +:1021B00000110000000000000021000000000009E4 +:1021C00000200003000000000000000000020800E2 +:1021D000001000000041A00000000041C0002003EA +:1021E000000040400008000000000021001008002E +:1021F0000800000000000041000000000000000096 +:10220000000000000000080000000000C000000303 +:102210000000000811082090000000A000200084A9 +:10222000001005A000C000081008210000040210E2 +:10223000001002A0028200C02008050800C000A013 +:10224000030000A0040008040800210800000000AA +:1022500000001100000000000902200008000082B8 +:102260000884200003A000A0090041040300080026 +:10227000088403A00000100000A02000211000101E +:102280000800001008840300000003000000008420 +:1022900000A0081000009000000000040000820070 +:1022A000000000000800020800090004000000000F +:1022B0000000000800008200000000000000000094 +:1022C00000000000040000000000000300110808E6 +:1022D0000800000000410000000082210800880082 +:1022E000000000110000080000000840400000004D +:1022F00000009000A0080421000000200000084019 +:10230000000008002000000000000000040300029C +:102310000000000008000008000004041100200074 +:102320002108021000900004209020400000208826 +:10233000210000100500004004100090200400203F +:10234000208808901100200804A0119009001100B5 +:1023500000004000400000000000000000040000F9 +:1023600000002090028800C0000441000000050029 +:10237000000000002090118210840900212000A09C +:102380002090020009040020050000040202210040 +:1023900020400000000000000000000000000000DD :1023A000000000000000000000000000000000002D :1023B000000000000000000000000000000000001D :1023C000000000000000000000000000000000000D @@ -90800,194 +90800,194 @@ :102980000000000000000000000000000000000047 :102990000000000000000000000000000000000037 :1029A0000000000000000000000000000000000027 -:1029B00000000000000040000000008000800020B7 -:1029C0008404210001000080830000042000000036 -:1029D00000000000000000000000000000000000F7 -:1029E00020040000000000000000000000000000C3 -:1029F00000000003000200000000000000000000D2 -:102A000000000084002000800000000000000000A2 -:102A100000000000000000000000000000000000B6 -:102A200000000004000000000000000000000000A2 -:102A30000000000000002000002000000020002016 -:102A4000000100C004820490002004000001800006 -:102A50000000000000000000000000000000000076 -:102A60000000000000000000000000000000000066 -:102A70000000000000000001000000000000000055 -:102A8000000000000002000100040000000000003F -:102A90000000000000000000000000000000000036 -:102AA0000000000000000000000000000000000026 -:102AB00000000000000000008840000000008200CC -:102AC0000000000000800000000000200000000462 -:102AD0000004000021004000000000000008000089 -:102AE00000000000000000000000000000000000E6 -:102AF000000000000000000000000003000000854E -:102B000000000000000000000000000001000000C4 -:102B100000000000000002000000000000000000B3 -:102B200000000000000000000000000000000000A5 -:102B30000000000000000000400040000000000015 -:102B4000000000000000002004820000000102825A -:102B5000000100010000A0000000000000000000D3 -:102B60000000000000000000000000000000040061 -:102B70000000000000000000000000000000000055 -:102B80000004000000000000000000000000400001 -:102B90000000000000000000000000000000000035 -:102BA0000000000000000000000000C00040000025 -:102BB0000000000000000000000000000000000015 -:102BC00000000000002100000000000000000000E4 -:102BD00000000000000400000000000000000000F1 -:102BE00000000000000000000000000000000000E5 -:102BF00000000000000000000000000000000000D5 -:102C00000000000000000000000000004000000084 -:102C10000000880200000000000000020000000028 -:102C200000000000000000000000000000000000A4 -:102C30000000000000000000000000000000000094 -:102C400000000000000000A00000000000000000E4 -:102C50000000000000000001000000000000000073 -:102C60000000000000000000000000000000000064 -:102C70000000000000000000000000000000000054 -:102C80000088000000000000008400000084800034 -:102C900000000088000000000000000000010000AB -:102CA0000000000000000000000000000000000024 -:102CB000000000000000000000000000000008000C -:102CC0000040000000008220080082000000828096 -:102CD000C0800000000401000100000000000000AE -:102CE00000000800000000000000000000001000CC -:102CF000000082000820A00000000000000000008A -:102D000084008400010084008200000000000000B4 -:102D100000080000000000020000000000000000A9 -:102D200000000000000000000000000000000000A3 -:102D30000040000000000000000000000000000053 -:102D40000000080008000800100005A04000200056 -:102D500000204120410041002000200041000000EF -:102D60000000000000000000000000000000000063 -:102D70000000000000000000100000000000000043 -:102D800000000000000040040000000000000000FF -:102D900021002100000000000001000005000400E7 -:102DA0000000000000000000000000000000000023 -:102DB0000000000000000000000000000000000013 -:102DC000000002000000000082000800000008006F -:102DD0000800000000000000C0000000000000002B -:102DE00000000000000000000000000000000000E3 -:102DF0000000000000000000000000000800840047 -:102E000000000000000000000000000000030000BF -:102E1000A00010000000820000000002000000007E -:102E200000000000000000000000000000000000A2 -:102E30000000000000000000000000000000000092 -:102E400000000000800000000000002000000000E2 -:102E50000000000000000000000000000000000072 -:102E60000000000000000000000000000000000062 -:102E70000000000000000000000000000000000052 -:102E80000000000000000000000000000000000042 -:102E90000000000000000000000000000000000032 -:102EA0000000000000000000000000000000000022 -:102EB0000000000000000000000000000000000012 -:102EC0000000000000000000820000000000000080 -:102ED000A00000000000000000000000082000002A -:102EE00000000000000000000000000000000000E2 -:102EF00000000000000008000000000000000000CA -:102F00000000000000000000C0000000840040003D -:102F1000A000100090000821010001200000012005 -:102F200000000004002000800000000000000000FD -:102F30000000000000000000000000000000000091 -:102F40000000000000000000000000000000080079 -:102F50000000000041000000000008000000000325 -:102F6000000000000000000010000300000000004E -:102F70000000000000000000000000000000000051 -:102F800000000000000000000000410000000004FC -:102F900080000000000000000000040004090000A0 -:102FA0000401000002000400000200000000000014 -:102FB00000002000000400000000000400400000A9 -:102FC0000000000000000000000000000000000001 -:102FD000000001C0848200840002000000000000A4 -:102FE00000000000000000000000000000000000E1 -:102FF00000000000000000000000000000000000D1 -:1030000000000000000000000000000000000000C0 -:10301000010000010000000000000100C08400A0C9 -:10302000000200210000010000000000000000007C -:103030000000000000000000000000000000000090 -:103040000000000000000000000000000000000080 -:103050000000000020800080008000800000000050 -:10306000000000004020004040410000000000003F -:103070000000000000000000000000000000000050 -:103080000000000000000000000000000000004000 -:10309000004104110002000009000000210000802E -:1030A000000009890021000010000000000000005D -:1030B0000000000000000000000000000000000010 -:1030C0000000000000000000000000000000000000 -:1030D000000000000000800080008041808000002F -:1030E0000080000000000000000000000000000060 -:1030F00000000000000000000000000000000000D0 -:1031000000000000000000000000000000000000BF -:103110000300210008104000000000000000000033 -:10312000400003039000C000000000000000000009 -:10313000000000000000000000000000000000008F -:10314000000000000000000000000000000000007F -:103150000000000000000000400082008401C0C0A8 -:10316000000000C0000000840040000000000000DB -:10317000000000000000000000000000000000004F -:10318000000000000000000000000000000000003F -:10319000000000200100000000000000000000000E -:1031A000000090008201A1A090200000000000001B -:1031B000000000000000000000000000000000000F -:1031C00000000000000000000000000000000000FF -:1031D0000000000000000000000000400082C084E9 -:1031E00001C000000000020000000000000100001B -:1031F00000000000000000000000000000000000CF -:1032000000000000000000000000000000000000BE -:1032100000000001000001010001010000000001A8 -:1032200000000000908200090005048400010000F5 -:10323000000000000000000000000000000000008E -:10324000000000000000000000000000000000007E -:10325000000000000000000000000000008000806E -:1032600080804180030000008000000000400010CA -:103270000000000500000000000000000000000049 -:10328000000000000000000000000000000000003E -:1032900000000000000100000308402111090000A7 -:1032A0000008000000090005009000A18000001047 -:1032B00000200020002000000000000000000000AE -:1032C00000000000000000000000000000000000FE -:1032D000000000000000000000000000000080046A -:1032E0008005804100800000000500000000000013 -:1032F000200000004000000000000000000000006E -:1033000000000000000000000000000000000000BD -:103310000000000000000001209010202000032089 -:1033200000000000000000008021808510000203E2 -:10333000000000000000000000000000000000008D -:10334000000000000000000000000000000000007D -:10335000000000000000000000000000000000006D -:10336000C00182008400100800000000000000007E -:10337000000000000000000000000000000000004D -:10338000000000000000000000000000000000003D -:103390000000000000000000000100020100000029 -:1033A000010000000000000000908421020289203A -:1033B00041000000000000000000000000000000CC -:1033C00000000000000000000000000000000000FD -:1033D00000000000000000000000000000000000ED -:1033E000000000000000070000420000000007008D -:1033F0006000000000E0000000000000000000008D -:1034000000000000000000000000000000000000BC -:10341000000000000000000000000000810000E04B -:10342000000000000000000000000000810000E03B -:103430000700000000000000000000000000000085 -:10344000000000000000000000000000000000007C -:10345000000000000000000000000000000000006C -:10346000000000000000000000000000000000005C -:10347000000000000000000000000000000000004C -:10348000000000000000000000000000000000003C -:10349000000000000000000000000000000000002C -:1034A0000000000000000000000000000000666650 -:1034B000F03CFB00FF0000000000000000000000E6 -:1034C00000000000000000000000000000000000FC -:1034D00000000000000000000000000000000000EC -:1034E00000000000000000000000000000000000DC -:1034F00000000000000000000000000000000000CC -:1035000000000000000000000000000000000000BB -:1035100000000000000000000000000000000000AB -:10352000000000000000000000000000000000009B -:1035300066666666FB00FF000000000000000000F9 -:10354000000000000000000000000000000000007B -:10355000000000000000000000000000000000006B -:10356000000000000000000041084000008421022B +:1029B0000000400440052100200020044105401093 +:1029C000040000058440001001044000040240118E +:1029D0008804210920408200000421108282832083 +:1029E00002034010C00503004082000020002000C8 +:1029F00082030003C0000010090441030004050322 +:102A0000C188051082848800C1800400000021056F +:102A100040800490008000022000400200002082DC +:102A200020808484050020000005200000000005AF +:102A3000880002040090C000C0048004400004002C +:102A40000840210200900090000440000090C090D7 +:102A50000040204040004000000000400241202192 +:102A6000044100000008000004A000210000000054 +:102A7000000000000000400040418800024000418A +:102A800004402021A0054005090004048000000046 +:102A900040000040020800020501000000010000A3 +:102AA000204000100540080009002002000000A09E +:102AB0000000000000002080208400C10080000091 +:102AC0000010000000100003080000C100200003F7 +:102AD000000384100803020400040105000400043C +:102AE00000200820000900040008881000100000E1 +:102AF00000800041000900000000084000100110A3 +:102B000000040020018803200800000400040020C5 +:102B100000400000041000800000C08801C040C1D7 +:102B200000400000000000000008008000000000DD +:102B30000000000000030000800480040004000482 +:102B40000408000841020009090803040002000803 +:102B50000040200800848084030802104082041092 +:102B60000084020504C10084008400000088004045 +:102B7000004000404004050000000410A041041182 +:102B80000285008411094004400980840885008280 +:102B90000501000400C00008200200841010084055 +:102BA00080100000000809082082008820100082A0 +:102BB00000400000000004880084400890054008A0 +:102BC0008908A00300204021021040058402000073 +:102BD0008400400800210008010000400008008037 +:102BE0000003000840081003024000000800844071 +:102BF0000020020800050005000800000808202148 +:102C00000008010800802000018040000489058838 +:102C1000202185080090002140A10021001000051E +:102C200000A109000008000400890005000300005D +:102C30000004401000090000000000110800080016 +:102C400010024000098800850090000000C0008448 +:102C5000080009A0000041000840400011000004E5 +:102C600003084108000009100000000000000000F7 +:102C7000410000A1080000080008090000008000D1 +:102C800000820800088408028088200290008020CA +:102C9000A020A100041000100000800221100001FB +:102CA00010000002900000000008410240000000F7 +:102CB00000000082000000000000411000000285BA +:102CC0000040088882048204000482040209020988 +:102CD000404182118241A011091004840010820435 +:102CE0000000082108040009010588029020040062 +:102CF000000000114000000440908200824100006A +:102D000041000910842005404102080000080080AD +:102D10008200091000908280900000002011400580 +:102D20008400840088090100200010204000011167 +:102D3000880000000800400000008200C000080079 +:102D4000040240201102400000C008C002080584AF +:102D50002004004000C040824100040203204104DE +:102D6000409000004104110100000482080021820B +:102D700000820090409000000088000203C0000024 +:102D800000000282820905000810C00141002101F3 +:102D9000080404040884002108040000008408904A +:102DA00010080040004020101088000000110000B2 +:102DB000400000000040004080A0000000000040F3 +:102DC00000080000840882411041000282000000D7 +:102DD0008210A0000821C00808100840040000412B +:102DE000A000904000000008080200000041820896 +:102DF00008000008004082208221000502410000F6 +:102E0000081100000800000308050000202020022F +:102E10000821101000082041080800050021004189 +:102E20000010000001210010000008000003002035 +:102E3000002082400000000000408511A000000337 +:102E40000040001011002088000000004004000035 +:102E50000000000000000000000000900000800062 +:102E6000410000000000000000008200000000009F +:102E700000A0000800000000000100880090000091 +:102E80000500002000000300000000000300800196 +:102E900080010000800009008000000000000000A8 +:102EA000000000000000080000000000000000001A +:102EB0000001000000010000000800010400000003 +:102EC0000000000000002000824100200020C0110E +:102ED00000110011000208410003004102400421DA +:102EE0000240824100404000A02000404005001107 +:102EF00020008400029040400011000800410020A2 +:102F00000800402000030000000420108803400057 +:102F1000040404000410A0030841840302032002F7 +:102F20000021829091210110401004200041402195 +:102F3000822100410020400040000011828401886D +:102F40000000080008000010111020884010030045 +:102F50000010404008C002040410200002840084D5 +:102F60002010080402C0112021200904400008009C +:102F70000340038400044002000000402088000059 +:102F800000100020204008000000000000000000A9 +:102F90000000A0008084889011C00284418241001A +:102FA000800103A002024084100508000000000018 +:102FB000820000C02100030411000800100000027C +:102FC00004020000000000002001010000011000C8 +:102FD000000082A00002000210C000000100A0005A +:102FE0000000000090A08808000800010101100006 +:102FF00000004005892084100889C08805A0401081 +:1030000008A000009001000000000000C0C00020E7 +:1030100000209000C00184018200C0018802049059 +:10302000894082828908A1208404C0101091010483 +:103030008488C04104400088C002A0108810008825 +:1030400020A08208000000000000000010032121E1 +:10305000A0090009008000800080000000004000FE +:10306000000000000400A100008000800041030275 +:10307000002000408904108280848010C0008200FB +:1030800080808000040500040000000000008480AF +:1030900000800000090011410440C000804005800C +:1030A0008280020000800280218080008080404079 +:1030B000089100A000090580040000800000008045 +:1030C000000000000080000000000000000003403D +:1030D00021000410040500008003800000000300AC +:1030E00040002100020000100083008080009080DA +:1030F00021001000888800000041001100038000BA +:1031000080040080800000008000800080020000B9 +:103110000000000580808000A0058500894191A104 +:1031200080118003808980802000830084808083D8 +:103130000000082184801021200089410488A0001B +:1031400020808440802090850000000080000000E6 +:1031500000010100000000C0A0000801A0C0202064 +:1031600000000100000001000001880300A082406F +:10317000090241004000118902900001C0088483C7 +:10318000A00002010208100000200200400082019D +:10319000000000000000A004C00009891040A00049 +:1031A000080590000282409002040900040010A06B +:1031B000088920A02100A104900183002002A1021F +:1031C000C1009140A101A082051040001000040040 +:1031D00000000000C000000001002002008200107A +:1031E0000010000100000001000140000010C009B3 +:1031F0001002000001019000000140100088020050 +:10320000A0C0A00900020440C08900000000000026 +:103210000000000008020088000200C0010840030E +:1032200002910002030882880890021004090040FD +:1032300004100404C008011010028210408200052E +:10324000904003A0C0400041A008A0100000000072 +:1032500000000000000284054103411000000080CE +:1032600000801080002000210004002080400089A0 +:10327000001080840041100803050011809003A114 +:1032800009030090008400048090859000000000F5 +:103290000000000000008000000000000080050029 +:1032A00000080021051085100089801085A0808409 +:1032B000008900850020800902C1C10200808020B1 +:1032C0000084008909A080410003804085A000009F +:1032D000000000000000059110000000040000093B +:1032E0008040808080000082000000000008801084 +:1032F00000C000000000412121804000400821055D +:103300009020900000000003804100000000202178 +:103310002180110003000000800080A10080008057 +:10332000410000A040890580000000208005800049 +:10333000C120840021800000C10204002100881007 +:10334000800500C000000005C1804002020040006E +:1033500000000080000000000010010000000000DC +:10336000000004020840A000000900000000000165 +:10337000100088209010080001A100040104010140 +:10338000A10004A0900090000400821002820400BA +:10339000010100020090000000001000880310826C +:1033A00000080100001000030110A000404090A0A0 +:1033B0008400C1C0A1108540C000C141A010C10857 +:1033C000A1004088888210A00200C0040411C0201F +:1033D00020000000000200840000000000E0000067 +:1033E0005041000000000700000000000000000045 +:1033F00000000000000007000000000000E00000E6 +:10340000000000000000070041000000000007006D +:10341000820A000000000000000000000000000020 +:1034200000006000000000E007000082000000E0F3 +:103430000700000000000000000000820000000003 +:10344000000042000000000007000000000A000029 +:103450000700600000000000000000000000000005 +:103460000000000041414141662666660000000000 +:1034700000000000272727270FFF00F000000000B2 +:1034800000000000F39191F3FFFFFFFF3FFF7FFF7C +:103490000000343C000000000000000000000009B3 +:1034A000000F3030F00000000000E7DBE0D03C66A9 +:1034B0003C660000BD3CF0C0E0E09CFF00630600FD +:1034C000000000FF00F4BDBD242409CB01C30000AF +:1034D000EF004040404000000000000000000000FD +:1034E000000000000000C33CC33C66666664000048 +:1034F0000000000000002727E7270FFF00F0000072 +:10350000000000000000CF8989CF2F2F0F0F00008F +:1035100040000000FFFF000000000000000000006D +:1035200009090F0F3030FF9900000000070B000061 +:10353000F0FFF0000D0CBD3CF0C0E0E09FFF00602C +:103540000600FBFF00FF00249F990600FFFFC3C396 +:103550009999EF0040C340400000000000000000C7 +:10356000000000000000000000000000000000005B :10357000000000000000000000000000000000004B :10358000000000000000000000000000000000003B :10359000000000000000000000000000000000002B @@ -90995,474 +90995,474 @@ :1035B000000000000000000000000000000000000B :1035C00000000000000000000000000000000000FB :1035D00000000000000000000000000000000000EB -:1035E00000000000000000000000000000000000DB -:1035F00000000000000000000000000000000000CB -:1036000000000000000000000000000000000000BA -:1036100000000000000000000000000000000000AA -:10362000000000000000000000000000000000009A -:103630000000000000FF00FF7F433D01000000008C -:10364000000000000000000000000000000000007A -:10365000000000000000000000000000000000006A -:10366000000000000000000000000000000000005A -:10367000000000000000000000000000000000004A -:10368000000000000000000000000000000000003A -:10369000000000000000000000000000000000002A -:1036A000000000000000000000000000000000001A -:1036B0000000000000002CEF20E3FF00FF000000EE -:1036C00000000000000000000000000000000000FA -:1036D00000000000000000000000000000000000EA -:1036E00000000000000000000000001000000000CA -:1036F00000080000000005000A08050000A00061A5 -:1037000000010009000000000000000000000000AF -:1037100000000000000000000000000000000000A9 -:10372000000000000000000000610007C009000068 -:1037300000610006000D00000061000DC00D0000DA -:1037400000610006000D0000000000000000000005 -:103750000000000000000000000000000000000069 -:103760000000000000000000000000000000000059 -:103770000000000000000000000000000000000049 -:10378000EB41EB410C0CCFCF00000000000000002B -:103790000000000000000000000000000000000029 -:1037A0000000000000000000000000000015FFF015 -:1037B000FFFF00000000F0F00F0F0C0C0C0C00C01D -:1037C00000C0000000000000000000000000000039 -:1037D00000000000000000000000000000000000E9 -:1037E00000000000000000000000000000000000D9 -:1037F00000000000000000000000000000000000C9 -:103800000000EB41EB410C0CCFCF000000000000AA -:1038100000000000000000000000000000000000A8 -:103820000000000000000000000000000000001583 -:10383000FFF0FFFF000000000F0FF0F00C0C0C0C6D -:1038400000C000C0000000000300000000000000F5 -:103850000000000000000000000000000000000068 -:103860000000000000000000000000000000000058 -:103870000000000000000000000000000000000048 -:1038800000000000F000FF0F00000000000000003A -:103890000000000000000000000000000000000028 -:1038A0000000000000000000000000000000AA0A64 -:1038B000AA8A7F3E551400000000000000000303A8 -:1038C00003030008000C00000000000000000000DE -:1038D00000000000000000000000000000000000E8 -:1038E00000000000000000000000000000000000D8 -:1038F00000000000000000000000000000000000C8 -:10390000000000000000F000FF0F000000000000B9 -:1039100000000000000000000000000000000000A7 -:103920000000000000000000000000000000000097 -:10393000AA2AAAAAFFBE5514000000000000000039 -:10394000030303030000000000000000000000006B -:103950000000000000000000000000000000000067 -:103960000000000000000000000000000000000057 -:1039700084000000C040C0028800200484008880C9 -:1039800020008800000000004000840084008400C3 -:1039900084A0008020002004000020000000880097 -:1039A0000000200000000000880001800000008866 -:1039B0000003000000000000000000000000000004 -:1039C0000000000000000000000000800000000077 -:1039D00000200000000000000000000000000000C7 -:1039E00000000000000000000000000000000000D7 -:1039F000000000000000000100010000C18500007F -:103A00004120000000400000000000000000000015 -:103A10000900000500200000000000000000000078 -:103A2000200000A0000000000000000010080000BE -:103A30000004000000000000000000000000000082 -:103A40000000000000000000000000000002000074 -:103A50000000000100000000000000000000000065 -:103A60000000000000000000000000000000000056 -:103A70000000000000800080000000000009000934 -:103A80000000010000000000000300000000000032 -:103A90000180200000000000008000800000000085 -:103AA00000000000000000000000000000410000D5 -:103AB0000000000000000080000000000080000006 -:103AC00000000000000000000000000000000000F6 -:103AD0000000000000800000000000000000000066 -:103AE00000000000000000000000000000000000D6 -:103AF000000000000000004005404108008400086C -:103B00000008000404080008000000840000000011 -:103B10000000400280000000000400200920000492 -:103B20000004000000040004000400000000000085 -:103B3000410009000000000000020000000800042D -:103B4000000000000000000009000000000000006C -:103B500000000008000000100000000000900000BD -:103B60000000000000000000000000000000000055 -:103B700000000040000000000400000800000040B9 -:103B80000000000000100005000000100000001000 -:103B90000000000902000080000000000002000098 -:103BA0000000000000000000000000110000000004 -:103BB0000000000000000000000000000000C00045 -:103BC00000000000000000000000000000000000F5 -:103BD0000000004000040000008000000000000021 -:103BE00000000000000000000000000000000000D5 -:103BF00000000000000000000000000008000000BD -:103C00000009410000000001000003000001030062 -:103C10000083008400000000000400000000000198 -:103C20000000000000000000000000000000100084 -:103C3000000005000800080008000000080000005F -:103C40000000000000A041A00000030000000800E8 -:103C50000300030000010001000000040000000058 -:103C60000000000000000000000000000000000054 -:103C700000000000000000000000000008024000FA -:103C800008000821080000028200088200004000AD -:103C900000028200840300020802080001022002E0 -:103CA00000020009A00000000800C0100000100081 -:103CB00010000000000000000000040000000800E8 -:103CC0008200080008090000080040000800000900 -:103CD0000000820900090002000900050000000040 -:103CE00000000000000000000000000000000000D4 -:103CF00000000000000000000000000000000300C1 -:103D0000000003000000000011000000002000007F -:103D1000000000000002000041004184000020007B -:103D2000A100414141002100000000000500000009 -:103D3000080000000000000000000000000000007B -:103D40000000000000000000000000000000000073 -:103D500000000000119000000000000000000000C2 -:103D6000000000000000000000000000090000004A -:103D70000000000000000000000000000000000043 -:103D8000000282210000820088000000C0000000C4 -:103D90000011080008000800080000000010820060 -:103DA000A0000000000000080820040082000000BD -:103DB000C00000000000C000080008088200C00029 -:103DC0000000000000008200000000000000000071 -:103DD0004000000000000000828040001008000247 -:103DE00000000000000000110000000000000000C2 -:103DF00000000000000000000000000000000000C3 -:103E000000000000000000000000000000000000B2 -:103E1000000000000000000000000300000000019E -:103E20000000000000000000000000000000000092 -:103E30000000000000000000000000000000000082 -:103E4000000000000000030000040000000000006B -:103E500000040000030003004100210208000000EC -:103E6000000103000000000000000000000000004E -:103E70000000000000000000000000000000000042 -:103E800000000000000000410000A0000000080247 -:103E9000000000000000000800000004840008008A -:103EA0008200200008080000000800020000000056 -:103EB00000000000000082000000000000008400FC -:103EC000400082000000000200000000000000002E -:103ED0000000000004000000000000004100000994 -:103EE00000000000000000000000000200020000CE -:103EF00000000000000000000000000000000000C2 -:103F000000000000000000000000000000000000B1 -:103F10000000000000000800000000000000000099 -:103F20000000080080000008000000000001000000 -:103F300008000800000008004100008200000000A6 -:103F400000008000000000000800000000000800E1 -:103F5000000000000000080000840000098240000A -:103F6000080000884100000400000000000000017B -:103F7000000000000000110000000900090000001E -:103F80000000020000000000401083040282880844 -:103F9000000020000000000083A000000082908448 -:103FA0000000000020000000008300830220024087 -:103FB0000000000000000000000000000000000001 -:103FC0000000010002000000000000000101C0012B -:103FD00000010000000000000000000000000000E0 -:103FE000000010A000414000889000000100400047 -:103FF00000000000000000000000000000000000C1 -:1040000000000000000000000000C00008008080E8 -:1040100000000000000040000000208000000000C0 -:104020000000000011004000000005204003854111 -:1040300080200000000000000000000000000000E0 -:1040400000000000090084000000000000002110B2 -:1040500080100020000000000000000000000000B0 -:104060000000000088802110090000000000080006 -:104070000000000000000000000000000000000040 -:104080000000000000000000000000000000809020 -:1040900000C000808000000000008000800000213F -:1040A00000000000000003000800000008004100BC -:1040B000081105A100000000000000000000000041 -:1040C00000000000090009001000030000000300C8 -:1040D00003000300052000000000000000000000B5 -:1040E0000000000000000000402190A188000000B6 -:1040F00000000000000000000000000000000000C0 -:104100000000000000000000000000000000880027 -:104110008208044088C00200040000008200880079 -:10412000000090008200000000000100000000A0DC -:104130002000202000A1000000000000000000007E -:10414000000000000000000001000100000000006D -:1041500000000100000000A00000000000000000BE -:10416000000000000000000090000100A103910089 -:10417000000000000000000000000000000000003F -:10418000000000000000000000000000000000002F -:1041900010100004400840820090821000000004CB -:1041A000C00200040010A002000000000001000096 -:1041B0000082018283210001000000000000000055 -:1041C00000000000000000000000000000000001EE -:1041D000000000000100A00001010000000000003C -:1041E00000000001000000010001004000A04109A2 -:1041F00009020000000108000000000000000000AB -:1042000000000000000000000000000000000000AE -:104210000000400000040000A080000000800000BA -:1042200000800080008000008080000900030021E1 -:10423000000900000202022100200000000000002E -:104240000000000000000000000000000005000366 -:1042500000410000004103208320114000000000C5 -:1042600000000000002000030020002000800080EB -:1042700005A191830041000200030000000000003E -:10428000000000000000000000000000000000002E -:1042900000000000000000A00000000000400940F5 -:1042A000020000000000000080000000000000008C -:1042B00000000008410202052080401000000000BC -:1042C00000000000000000000000000000000005E9 -:1042D00000000003000003000500050000200000AE -:1042E00000000000000000000000000000000800C6 -:1042F000100803808500000000000000000000009E -:1043000000000000000000000000000000000000AD -:1043100000000000000082000482080888000000FD -:1043200000040120000090000000021000000008BE -:10433000000000000001820183820040880100002B -:1043400000000000000000000000000000000084E9 -:1043500000000000000100000082000000000000DA -:10436000000000000000000000000000000000004D -:1043700011000900210810000000000000000000EA -:10438000000000000000000000000000000000002D -:104390000000000000000000000000000000000A13 -:1043A000008100E0070000000000000000000000A5 -:1043B000000000E000000000000000E00700000036 -:1043C00000000000000000000000000000000000ED -:1043D000000000E0000000000000000000E000001D -:1043E00000210000000000000000000000000000AC -:1043F0000000820000E00700000000000000000054 -:1044000000000000000000000000000000000000AC -:1044100000000000000000000000AAAA5595AAAA0A -:1044200055550000000030303F3FFFFFF0F0010025 -:10443000A50000000000000000003CAAAAAA03FF9B -:1044400003FF00000000000000000000000000006A -:10445000000000000000000000000000000000005C -:10446000000000000000000000000000000000004C -:1044700000000000C0C000000000000000000000BC -:10448000000000000000000000000000000000002C -:10449000000000000000000000000000AAAA55551E -:1044A000AAAA55650000000030303F3F0000F0F040 -:1044B0000000A40000000000000000003CAAAAAA1E -:1044C00000FC00FC000000000000000000000000F4 -:1044D00000000000000000000000000000000000DC -:1044E00000000000000000000000000000000000CC -:1044F00000000000000040108020000800000000C4 -:1045000000000000000000000000000000000000AB -:1045100000000000000000000000000000005A5AE7 -:10452000565A5A5A4E5A0000000004040000EFEF99 -:104530002F2F00C3C3C300000000000000000F0FB6 -:104540000F3CFF00FF000000000000000000000022 -:10455000000000000000000000000000000000005B -:10456000000000000000000000000000000000004B -:10457000000000000000000041000000C300C30074 -:10458000000000000000000000000000000000002B -:10459000000000000000000000000000000000001B -:1045A0005A5A5A5A5A5A5A5A00000000000000003B -:1045B000E0E02020C3C3C3C30000000000000000EF -:1045C0000F0F0F3C5F0A5F0A0000000000000000B0 -:1045D00000000000000000000000000000000000DB -:1045E00000000000000000000000000000000000CB -:1045F0000000000000000000000041000000FFFF7C -:10460000C3000000000000000000000000000000E7 -:10461000000000000000000000000000000000009A -:10462000000040618006002D00020061003D000D89 -:1046300000000000000000100000006100070009F9 -:10464000000000610009000D0000000000000000F3 -:1046500000000000000000000000006100070008EA -:1046600000000000006100060009000000000000DA -:104670000000000000610006000D00000061000560 -:10468000C019000000610006000D000000000000DD -:10469000000000000000000000000000000000001A -:1046A000000000000000000005050505F000F00016 -:1046B00000000000000000000000000000000000FA -:1046C0000000FF3C0020000000000000000000008F -:1046D00000000000000000000000000000000000DA -:1046E000AAAA000000000000000FAAAAFFFF000015 -:1046F00000000000000000000000C00C3FF3C0C339 -:1047000003C3AAAAAAAA00000000220022000000F7 -:104710000000000000000000000000000000000099 -:1047200000000000000000000000F5F5F5F5F000C5 -:10473000F000000000000000000000000000000089 -:1047400000000000FF3E00000000AA0A0000000078 -:104750000000000000000000000000000000000059 -:104760000000AAAAF000000000000F0FAAAAC000D3 -:10477000000000000000000000000000C00C3FF33B -:10478000C0C303C3AAAAAA000000000011C311C33A -:104790000000000000000000000000000000000019 -:1047A0000000000000000000000000000000000009 -:1047B00000000000000000000000000000000000F9 -:1047C000000000000A0A0A0A000000000002AFAF61 -:1047D00000000000000000000000000000000000D9 -:1047E000000000000E0E0000000000500050FFFF0F -:1047F000FFFE0000000000000000000000000000BC -:104800000000000000000F000F0F0000000000007B +:1035E000000000000000000000003CFF00C3040FCA +:1035F00000000000000000000000660F660F9090C1 +:10360000999900000000C1C23834FFFFFFFF66C374 +:10361000000000C300400000FFFF000000000000A9 +:10362000000000000F000FFF00009999000000004B +:10363000000000046C6C6C6C9791070163C36363BA +:10364000FC98FC64C3C3C2C299991999FCFFF6F6B1 +:103650003F3F6F600F0F000F00007E66000000000C +:1036600000E600E6000000000000000030F330F348 +:10367000010F00000000000000000000663C663CF6 +:103680000000090900000000F9F6F9F66EFF0CFFD2 +:1036900066C3000000C30000363CFFFF00000000CE +:1036A00000000006000000000000990099000000E2 +:1036B000000000000000000FF0FFF7F1676166C630 +:1036C0006666F391F362C3C3C2CB999918990C0F44 +:1036D0000606101C6F600F0F00010F0F0F0F000088 +:1036E000000000FE00FE00610007000D0000000069 +:1036F00000080000000000610006000D00000061ED +:103700000E0E000D000000610006000900000061BF +:10371000000E009D00010061400E000D00000061E0 +:103720000006000D000100000000500000900005A0 +:1037300005610A0F050D00A005610A0F050D00A126 +:10374000A0610006000D0000A0610006000D000051 +:1037500000613E0E000D0005A061003E000D00A0BE +:103760000000000000000000C3FF3CFF07D00D7008 +:10377000000000000000000000000000828200AA9B +:1037800000000000CFF38AA2EAEBFAEB0000FFFB97 +:10379000050000000FF0096000000000E700E7E707 +:1037A00010140000000000000000000000000000F5 +:1037B000000004040F0F0AFF05FA00000000331197 +:1037C000113300F0000F070000002B2BC3FF05870B +:1037D000058700000000E8C3E8FF000000FF986EC6 +:1037E000E23C0000000000000000C3003C00D7D70E +:1037F0007D7D00000000000000000000000003F3D9 +:1038000003F300000000CFF34551D6D7C6D700041C +:10381000FFFF00000000FFFF696900000000E7E70C +:10382000E7000000000000000000000000000000B1 +:103830000000000004040303A00AFAA50000000031 +:10384000FF5555FF00000000070700002B2B003C30 +:10385000AF87AF8700000000E800E83C00B200B28C +:10386000986EE23C0000000000000000F3F351F30A +:10387000CC333FF00000000000000000000000001A +:10388000F5C1F53400000000000000000000C30096 +:10389000B43CE1C30400140000000000000000007C +:1038A0000000000000FFFF0000000000000000001A +:1038B00000000000000000C3003CF0F03CC300002A +:1038C00000000000000000000000F3CFF3CF4545EA +:1038D000404000AF000500000000FF35003500004B +:1038E0000000CCCCCCCC0000000000000000515106 +:1038F000F3F300F0CCF30000000000000000000033 +:1039000000005F435F1C00000000000000005555F0 +:10391000C000E1C3E1C3100014000000000000007B +:1039200000000000000000FFFF0000000000000099 +:10393000000000000000000000C3003CF0F03CC3A9 +:10394000000000000000000000000000300C300CFF +:1039500055055000FFAFFF0500000000000000000B +:10396000000000000000FFFF000000000000000059 +:1039700040080210200020C1888888002000208292 +:103980000000200420008440040000844084008063 +:103990008880888320102009028800840085001018 +:1039A0000080848984100000000000038408010066 +:1039B000000320052000C00840108282820000041D +:1039C000A08082040200890400A0400400080002D4 +:1039D000858400002000000084000200880084002C +:1039E00002002000000000008402000000004000EF +:1039F000020000000485088200201110008200826D +:103A0000004100C0000000C0200180000005080344 +:103A100000200040000200C1000000200021002022 +:103A20000001001000100000000040000000000035 +:103A30002000000000000000000000000011000055 +:103A4000000121100501800040010003000000007A +:103A500000011002000000000200000080000000D1 +:103A600000008000000020000000000100000000B5 +:103A7000000080000180012000840210000000107E +:103A8000000400040000100820000004008000046E +:103A9000002001200088001000000020018000119B +:103AA00001400084032000000141001000020000DA +:103AB0000000004100000000000000040009008038 +:103AC0000089208940000008002000080004004010 +:103AD00002000040004000000040000000400040A4 +:103AE000010000080040000800000000000900007C +:103AF0000000104100000240400800100004008453 +:103B0000000900004140000000104004008404202F +:103B10000010098504090402008800080001080457 +:103B200000040404002104052008048400850089A1 +:103B300000842000008400000208004000C000084B +:103B40002004001080208500008400830084030886 +:103B50000085800400050009008200C100100008F3 +:103B600000110288050400890040000420080008B4 +:103B70000000008400000408000390020021892155 +:103B80009009901088000821900388059021000377 +:103B900088080483081000100010848500050008C0 +:103BA0004040002100030040000800090908000906 +:103BB0000041000800210008000000030008000583 +:103BC0000021008020080021058504109088C00095 +:103BD00020410002000900410009002100210021CC +:103BE00000000008000000414005002100210021E4 +:103BF00000210003002100080021214000841082E0 +:103C00004084008210110008891000080000001094 +:103C1000000800A080202100000000A00004039004 +:103C200000828000088221A0008821A0008288C034 +:103C30000002100000C0038400000000000000002B +:103C4000080000820020830041A0A020800008041A +:103C5000000085101110030008A00000030000C040 +:103C6000000021A000000008410888821100000027 +:103C7000004000100800000800820800080002024E +:103C800040848400C0000400A000C02182008202A1 +:103C90008200040000000920200008800821900212 +:103CA00082090000002121042184A01100000005E8 +:103CB00004080010000082008211C041000084103E +:103CC000000002002000A00040890021830990C06C +:103CD000028410A14089890041001100C1400840C0 +:103CE0000300C040084082000209020200000040B8 +:103CF0000220024003408200020002000200118202 +:103D00009090092011C0040408C010C000900488DD +:103D10000904200200000000208980C00902050477 +:103D20000904419003880800840120040304001062 +:103D30000300214000820010001020880090000045 +:103D400000000082000002840908000411402000E5 +:103D500003020021022000200290029002101001B4 +:103D60000001020011010001030082880000000030 +:103D700003918408800182000000A000A0000000E0 +:103D8000A002080000C14020000340400110914003 +:103D90000803A003A0081005008200050805C04024 +:103DA000A04008100010082010002000828800A108 +:103DB000828882A10800100200080005002100008E +:103DC0000000081000080000084000109120820246 +:103DD000A041100400044004898482054004A0101E +:103DE000840210218200080010000800000000007A +:103DF00000000021002100400000020300038200B7 +:103E0000020400002188090490010000808208005B +:103E100008010008000008000000000403824004BC +:103E200020821140020000A0091140100000080289 +:103E300008200020001002002100080000004000BF +:103E40000000000000100000030802000000200134 +:103E5000000500080001021100010405000080C0F7 +:103E60000000001100100084208403000000088876 +:103E700000A000080000009003C0030080000020A4 +:103E8000000091000800004040100402000084215E +:103E9000C00200082005824004030205201100082A +:103EA00000008204402101080821A11088040008B4 +:103EB000A004200500210040820008080000001135 +:103EC000000202000000100002214003080041002F +:103ED000408000084040042090800800004004001A +:103EE0000040A04004000021002104210020000027 +:103EF00000210121000500210021202100050000F2 +:103F00008200000000050200111000082001094095 +:103F10002002110420000290112002C020C0800065 +:103F200020401190110102000800084008054100DE +:103F300003900302C00000000000080000200820D9 +:103F40001100008220A0000000000000000400001A +:103F500004000220030000002001004000000010C7 +:103F60000000004000000000000000000000000011 +:103F700000000000020000000888002000A00004EB +:103F80000000200020000000404008400988828294 +:103F900010C0A0890220020800A000021084009036 +:103FA0002002A00910859041080102000101820051 +:103FB000910810200084000220A0004000C0008270 +:103FC0000000A000840000000000000000000000CD +:103FD000000011089085408290840001880004014F +:103FE0000000820800088808900202844002000253 +:103FF00002824040C1028284021002024002A002FA +:1040000082080908000800A0020880008000828061 +:10401000800085832110009100090080110000803C +:10402000000000C0A0108411000280418002020341 +:104030000002910800A103040083008000800000BA +:104040000000000080110511004000000000000089 +:10405000000005001182A1210580802000200903B5 +:1040600003110011008041800080000000008000EA +:104070000000808080800880800000804000210057 +:104080000000808090800080000000809080A0412F +:104090008282C1820380840905C04083001100022E +:1040A00000800080C02089118240030400808000CD +:1040B0008000800089201141880441800000008236 +:1040C0008009000020801000030003400000000071 +:1040D00000000000000091108404919010030882F9 +:1040E000218082404085200085C1A084204080003E +:1040F00000820082800080000089800900000000AA +:1041000000880080808080008021800000000210F4 +:10411000020105A105C0A002400005A12105000083 +:104120000000000200A0A1010200A09141010208CC +:1041300010008400088804018805A000A082000007 +:10414000A003A09000000002010000000100000098 +:10415000000000000000000089858410A090A111DB +:10416000210421C0110110C02100080309094141A7 +:1041700004000240200508A00200020210209090D6 +:1041800002000210201010100800100204040202A5 +:1041900082100088008508C18801030808A11088E2 +:1041A000000100000000400002048810001000051B +:1041B00000404188899001C091828800C040C000C1 +:1041C000048800880010C088000000010101000080 +:1041D00000000000000000000000911002A0C08854 +:1041E00003C101008800C100000103080009C008E4 +:1041F0008402024000024002080809090009020581 +:104200000341101100034002080903400008100890 +:10421000101000040084008402C000218541C121E7 +:104220000084000800040010000985092105108998 +:10423000088300808380A0000880A00009004180DE +:1042400003000000000000800000000000040521C1 +:10425000050000000000000000000000908905112A +:104260000341C1C00811210411091105C18500A035 +:1042700080A002040380000000008080C1A00083B1 +:1042800080A0400288100008800300A010800080F9 +:1042900000809180028911A1088009C109842080D1 +:1042A0001180000300008000000000004082A04058 +:1042B0002000A04010212140000000000011000457 +:1042C00000008010000000400080000021830340B7 +:1042D00041000308000000000000000000000491FD +:1042E0001120911183101003050208210810C10448 +:1042F0008490C180C00300000000000080008000A6 +:1043000000C08080800000100000000000008009D4 +:104310008080808080008483400841029008820869 +:1043200040A040C0820010000800A000100089A139 +:1043300002000088090001010088001000000291BD +:1043400010A1021088001000880000028400010201 +:10435000000100000100000000000000000000005B +:10436000840989A0908310010091000301030100DA +:104370000984091184840900200002020202080055 +:104380000800400808080800020002020202C000FB +:104390001000080840841000000000E00700508171 +:1043A000000000000000000A000000000000000003 +:1043B000000000E007000000000000E0070000002F +:1043C000000000E0070041000000000007000000BE +:1043D000000000E0000000000000000000000000FD +:1043E0000000000000E007000041000000E00700BE +:1043F0008221000000000000810600000000000093 +:10440000000000000000000081000000000000002B +:104410000000000000000000000000FF0053AAAAF6 +:104420003000FFFF0F0F55555555D77DD070000058 +:10443000000055C300C30050145000000000FFFFEF +:10444000FFFF0F00030028822882FF14FFBECACAA4 +:104450000AFA000000000000000000000000000058 +:104460000000000000FFF0F003035F5000000000B8 +:1044700000000000BC43BE41A58DA50FAA55A55A5A +:10448000339933CC758AF50AF0A50F5AE31CF30C67 +:10449000339933CCBA45BE41CC33CCCC00000000BC +:1044A000AA283000E020E0200FFF0F00D77D070D85 +:1044B0000000000055C3FFC300001400000000000E +:1044C000832C7CD30F0F030328822882001400BEA4 +:1044D000CACA0AFA00000000000000000000000044 +:1044E000000000000000AAAA3C3CF3F35F5000006B +:1044F00000000000000043BC41BE5A725AF0AA55A9 +:10450000659ACCCCCCCC8A750AF5F0270FD81CE381 +:104510000CF3CCCCCCCC45BA41BECC33CC990028E2 +:10452000002A0400000000FF0F0F103010300400BC +:104530000000000000000CCF0CCFFF0FC3C3000031 +:1045400000003C3C3C3CBFB5BAB00034000000AFBA +:1045500000050F0F0F0F000000000000000000001A +:104560000000000000000000F60000F6EAEA00008B +:104570000000000055D7AAEB50AF51AEF0CC0F337E +:1045800033CCC33C69699969C33C33CCAA9A55655D +:1045900050AF51AE6AAA95550AF50BF46AAA955523 +:1045A0000000000000000000C3C35555003030304B +:1045B000040000000000000000C33CFFF000C3C383 +:1045C000000000003C353C3C1F151A10003800006C +:1045D00000D700D7FF00FF0000000000000000002F +:1045E00000000000000000000000F6F6F6F60050A3 +:1045F000000000000000A5A5A5A5AF50AE51D8CC85 +:10460000273339C6C33C96699669639C33CC96962A +:104610006969AF50AE5155AAAA55F50AF40B55AACF +:10462000AA5580610007009500A100615006000DA9 +:10463000000000614006000D00000561000F000D44 +:1046400000000061000F009D000105614A0F050D8B +:1046500000A0000000080000000000610007000941 +:1046600000000000000000000000000005610A0FCB +:10467000059D00A005610A0F050D10A2406180068E +:10468000002D1002400080000020100240618006D2 +:10469000002D100240618006002D100240008000B5 +:1046A00000201002A0A0F5F500000001FF005F004F +:1046B000CF00CF0000000000E70000E7CF00C300FC +:1046C00000000D00FFAA55000000000000000000DF +:1046D000000000000000000000000000C300C00354 +:1046E000F0A0F0A0000000000000000000007D7DB0 +:1046F000AF05F5F514BEC0C1C0C3000500010CFC38 +:10470000F303C340C34300000000000000000000AA +:104710000000FFF10F0100000000C3C3C3C300008D +:1047200000000000000082D782D700000001550081 +:104730005F00FF005F0000000000E7E7E7E7C3005D +:10474000C3000000FFFFFFAA5500000000000000AA +:104750000000000000000000000000000000C30096 +:10476000C201F0A0F0A00000000000000000000066 +:104770002828AF05A0A014BE0041C0C30505010153 +:104780000000F303C300C3000000000000000000AD +:104790000000000000000000000000000082C000D7 +:1047A000000000000000000000000000FF0A0C0CE8 +:1047B0000F0F3C3C020A020A00000000000000004B +:1047C000FFAA2D2D5F4F0000EBF0140F000000003A +:1047D000BFB5BAB06F006F6F0000000000000000AE +:1047E00030303030FFFFFAFA000000000000000017 +:1047F000000055005500FCFCA0AF55FF0F3C00FF2A +:1048000000D70000000050405040000000000000B1 :104810000000000000000000000000000000000098 -:104820000000000000000000000000000000000088 -:104830000000000000000000000000000000000078 -:10484000000000000000000A000A00000200000250 -:10485000AFAF0000000000000000000000000000FA -:104860000000000000000E0000000000001000101A -:10487000FFFFFEFE0000000000000000000000003E -:1048800000000000FF00FF000F000F0F00000000FD +:104820000000000000000000000000000000000A7E +:104830000C0CFF005555020222220000000000006F +:10484000000055002D2DFFEF0000F0F00F0F0000CD +:1048500000001F151A106F6F6F00000000000000AD +:104860000000003C003C7FFF7AFA000000000000DE +:1048700000000000141400000C0CA0AF55000F3C09 +:1048800000FF00D0000000005040000000000000C9 :104890000000000000000000000000000000000018 -:1048A00000000000000000000000000020002000C8 -:1048B000200002000000200020000400040004008A -:1048C000400088002000200000000004200020009C -:1048D0000000040000002000200040000000000054 -:1048E0000000200020000000000000040003200061 -:1048F0000200000004000000200020000000000072 -:1049000000000000000000000000000000040000A3 -:104910000000000000000000000000000000000097 -:104920000000000000000000000000000004000083 -:104930000000000000000000000000000000040073 -:104940000008000000080000000000000001040052 -:1049500000000000000005820000000000000000D0 -:1049600000040000000000004000000040010000C2 -:104970000000000000000000000000000000000037 -:104980000000000000000000000000000000000126 -:104990000000000000000000000000000000000017 -:1049A0000000000000000000000000000000000106 -:1049B00000000000000000000000000000040000F3 -:1049C00000000000000000000000004000040000A3 -:1049D00000000000000000000000000000002000B7 -:1049E00000000000000000000000000000000000C7 -:1049F00000000000000000000000000000000000B7 -:104A000000000000000000000000000000000000A6 -:104A10000000000000000000000000000000000096 -:104A20000000000000000000000000000000000086 -:104A300000000000050000100084000000080008CD -:104A400040080000000800880008000809400082B3 -:104A50000004000000000000000000000004000846 -:104A6000000800000010000000100082000000009C -:104A70000000000000000000000000000000000036 -:104A8000008800840000000000000000000000001A -:104A90000000000000000000000000000000000016 -:104AA000000000000000000000000000000000887E -:104AB0000000000090000000000000000010000056 -:104AC000000000400000000088000010000000000E -:104AD00000000000002100000000000000000000B5 -:104AE00000000000000300000000000000000000C3 -:104AF00000000000000000000000100000000000A6 -:104B000000000000000000000000000000000000A5 -:104B10000000000000090000000000050000000582 -:104B20000000000000000000000000000000000085 -:104B3000000000000000000021000090218800100B -:104B40000000000000001000000041000000000014 -:104B5000030041C00200000000000000030000004C -:104B60000000000000000500080000000000000038 -:104B700041001000030000000300000000000000DE -:104B80000000000000000000000000000000200005 -:104B9000000000000000000000880000000000008D -:104BA0000000000000000000000000000000000005 -:104BB0000000000000000000820008028200820065 -:104BC00082000400000000008200000082008200D9 -:104BD00000000000000000008200080082000800C1 -:104BE00000000009000208000802000000000000A8 -:104BF000000000020000A000000008000800000003 -:104C00000800000010000009080000000000000972 -:104C100000000000A0000000A00008000800000044 -:104C20000000000000000000000000000000000084 -:104C30000000000000000000000000000002000072 -:104C4000000000040010000000C000000000000090 -:104C5000200000000088000010000000000000009C -:104C600000001100408800004000400000000000EB -:104C7000210000000000000003000001000000000F -:104C8000110000000000000000881000000000007B -:104C90000500200000900000009000880000000047 -:104CA00000200000000000000000000000000000E4 -:104CB00000000000000000000000000000000000F4 -:104CC00000000000000008000808080000000000C4 -:104CD00000000800000000000000000000000000CC -:104CE00008000000000008000800000000000000AC -:104CF00008000000000000000000000500000000A7 -:104D0000000000000000000008000841A0000000B2 -:104D1000000000008400000000000000000000000F -:104D2000000000000000000008000800A0000000D3 -:104D30000000000000000000000000000000000271 -:104D40000000008800880000000000000500080046 -:104D5000080008000000000200000002000000043B -:104D6000000000000000000000000000080000003B -:104D70000800000000000000080000000000000023 -:104D8000100009000000000000000000000000000A -:104D90000000000000000000089003884100038824 -:104DA000000000000590000000000000000000006E -:104DB00000000000000000000000000000000000F3 -:104DC00000002004000000030000A000000000001C -:104DD00000000000000000000000000000000000D3 -:104DE00000000000000000000000C00000004000C3 -:104DF00000000000000008000000000000000000AB -:104E0000000000000000000004030000000000009B -:104E1000820000008200000008000021000800005D -:104E2000000000000000000008000000820090095F -:104E300082000004000000000000000000410000AB -:104E4000000040000000080040C040100010400278 -:104E50000000080004000000000000000000000046 -:104E6000000000000902000210000500000200001E -:104E70000400000000000800000000000500000021 -:104E800000000000100000001100110000000000F0 -:104E90000588000000000000000000000000110074 -:104EA0004002008800000000000000000000000038 -:104EB00000000000000000000000000000000000F2 -:104EC00000000000000084000000010001008400D8 -:104ED000000001000000000000C000000000000011 -:104EE00000000000000000000000000001000000C1 -:104EF000000000000000000000C0000000000000F2 -:104F000000000000000000000000000000000100A0 -:104F10000000000000000000000000C000000000D1 +:1048A00000000000000000000000000040C02000E8 +:1048B00089842090880888820400899089880185ED +:1048C0008585008289A101C0058301802080209018 +:1048D0000082841000090080212020C02184030967 +:1048E00021880490018403100590018800032008AA +:1048F00000100010000488100200000800000400EE +:104900008200820402004008000084008804000045 +:10491000000002084000880320000000040000009E +:10492000200004000000840000008800200400092A +:104930000040080900090420404120400802020507 +:10494000202020020011101040091004041004104F +:10495000000200090383000000082001001110106C +:10496000A00002081102080890042020082000007E +:10497000090000000000000000000000040020000A +:10498000000020000008040000204104000000098D +:104990000000040000000000000000000000000013 +:1049A0000000000000000000000000000000040102 +:1049B00000000003002000000010000400000020A0 +:1049C0000041000400040005004000000000000851 +:1049D0000002000800100004004000000000004039 +:1049E0000009000000050000000000410000000375 +:1049F0000000000400410021004100000000000010 +:104A00000000000400100000000000000000004151 +:104A1000000000040000000000000000000300008F +:104A2000000400000000000000000003000000007F +:104A30000000000800040084008202100010001032 +:104A400000840000000800080010001000840284A8 +:104A500000840011000000080008008502040084A2 +:104A60000010008405081110008800C00088008430 +:104A7000008800000000009000880084000000080A +:104A80000088008400080084058400100010008461 +:104A9000000804C00008000003400084008800846F +:104AA00000A00084008220002010000809820084F9 +:104AB0000084008221100400024100081008112126 +:104AC00020A105880808029010C1000802082108EA +:104AD0000408911140000020C04000210009048515 +:104AE000C0100008000800000000002100080000BD +:104AF000000800210000004100000008000800003C +:104B00009002000500080000820000000008C000BC +:104B100000000000004000214021000220000005AC +:104B200000412008880800210008001020400008EB +:104B3000000500000021888890A0880003108010E4 +:104B4000A0408020A04082008302832003888882C6 +:104B500088108010200200A0008500C10000100015 +:104B600080020084000005C00010008800080810C2 +:104B7000000008000010000000000088210008006C +:104B800020004100000011C0088200C003C00800DE +:104B90000082218803A0000800100000210000000E +:104BA00000A000080300000000000000000000005A +:104BB00000C0000008004100820004000810C0008E +:104BC0000800080910000000080000000000A00014 +:104BD000040084001000A00082000000A004000473 +:104BE000000000000011900040000000044100009F +:104BF00008000000A0400009000008002003020097 +:104C00000200C009000008000400000000000400C9 +:104C100000008200000004000008080000000000FE +:104C2000020008000000A0000404000000000000D2 +:104C30000000A00000028200A000008203C000204B +:104C40000000008491880000008202020010000031 +:104C500009C00000004000000010009011002188F1 +:104C600000C000001140100800A0802011100010AA +:104C70000000210004A0000000000000000000006F +:104C80004000000002000000201002000090000020 +:104C90000900000000400020009000A0400040C03B +:104CA0004000000000000088000000000090052087 +:104CB00000000090000005000020400000A10183DA +:104CC0000190002100C0A1002100004001119000CE +:104CD000009000000021080008001141A00500110B +:104CE00000050810000000000200000000050000A0 +:104CF000001100000000000800000000000000415A +:104D000008008200001000080000A0000000000061 +:104D100010001000820010000008000000030000D6 +:104D200000008221C00800000000C0000000080050 +:104D30000000000000000000002100000000000250 +:104D40000802402020022040048810080210400081 +:104D5000008208400000209021900202C01011043F +:104D600005000502000810400082000200900002C9 +:104D700020400002000021000000000000000000B0 +:104D8000000000000000000000C000C003C020843C +:104D90004004000208082184008841002184008426 +:104DA000000000000000000000C00000051000002E +:104DB00000000900000808000000000000002008B2 +:104DC00000050205880800110021000802000805FE +:104DD00000104000880408404004000582040004DC +:104DE000C000C02008008209084008080004000034 +:104DF0000400C02020030000000300004000000069 +:104E000000000000000020410011C0000000000070 +:104E100090000000040008100002002100000800BB +:104E2000002100000000822100028200C00000007A +:104E300000008205000088008200080900090000C7 +:104E40000000000000002000000000000000000042 +:104E5000000000000004000000000010000000023C +:104E600000002000400000000900000004040008C9 +:104E700000C00000400040C0001000100002000010 +:104E800011000000000000C000000000110411C06B +:104E90000290000208000000000000000040000036 +:104EA0004100000000000000000004000000400479 +:104EB00000002000000040001090090000000000E9 +:104EC0002100030001010100000009850001040127 +:104ED00000828390C1010100000408A000010001CC +:104EE000011110000101C1000000C1830000000099 +:104EF00000844082C001C1000040C0820001C000A7 +:104F0000011104000000000000000000000001008A +:104F10000000000000000000010000C000000000D0 :104F20000000000000000000000000000000010080 -:104F30000000000000000000000000C000000000B1 -:104F4000000000000000000080000000030041009D -:104F500080000000030000402000008000000000EE -:104F60000000000000000000000000000000410000 -:104F7000000000000000004005000080000000006C -:104F80000000000000000000000000000000000021 -:104F90004100000000000000004009000080000007 +:104F30000000000000000000010000C000000000B0 +:104F4000000000000000412002210000A0410420D8 +:104F500000020541A00041020404008080000020FE +:104F60000004208280004120C1210000C18340054F +:104F7000004008C1000080028341000084800020BE +:104F800080042083000000000000000000000000FA +:104F9000410000000000000000400400008000000C :104FA0000000000000000000000000000000000001 -:104FB00041000000000000000040090000800000E7 -:104FC000000000000000000000000300000000805E -:104FD00000008000000000008500C080000000008C -:104FE00000000000000000410000030000000080FD -:104FF0000000800000000000C100C08000410000EF -:10500000000000000000004100000000030000005C -:10501000008000008000000000008400C0800000CC +:104FB00041000000000000000040400000800000B0 +:104FC00000000000000000000800040300000000D2 +:104FD00004024141000000040540809000040400E8 +:104FE000830004410041000420004141008500008D +:104FF0002010024100000040C0C180410041030078 +:105000008400854100C180400000000003000000D2 +:10501000008000008000000000008200028000008C :1050200080000000000000000041000003000000BC -:1050300000800000800000000000A000058000004B -:10504000800000000000000000410000010000009E -:1050500000C0000020000000000003000402004027 -:1050600040004000000000000001000001000000BE -:1050700000C0000020000000000002008202004189 -:105080008240C0000000000000010000000001009C -:10509000000000C0000020000000000003008202A9 -:1050A00000C00440C000000000000001000001003A -:1050B000000000C0000020000000000003004002CB -:1050C00000820400A00000000000000100000000B9 -:1050D000C000000000000000000000000088000088 -:1050E00000000000000000000000000000000000C0 -:1050F000C0000000000000000000000000A0000050 -:10510000000001000000000000000000000000009E -:105110000000C000000000000000000000000008C7 -:10512000000000000000000000000000000000007F -:105130000000C0000000000000000000000000842B +:1050300000800000800000000000900082800000DE +:105040008000000000000000004100000101008815 +:105050000082000101010084000021A1400800013C +:10506000010040008201008320000100000100C017 +:105070000000010101010082008510C104C100018E +:1050800001824100840100C1820000000000010093 +:10509000000000C000002000000000000900900295 +:1050A00000901000820000000000000100000100DC +:1050B000000000C000002000000000000900020401 +:1050C000009010004000000000000001008400007B +:1050D000018501000000000101918800001100011C +:1050E00000830000000000000001000000400000FC +:1050F000C183000000000000009090000004000048 +:10510000C14000000000000100000000000000009D +:105110000000C000000000000000000000000004CB +:10512000000010000000000000000000000000006F +:105130000000C000000000000000000000000004AB :10514000000000000000000000000000000000005F -:1051500000008000000000000000000000000000CF -:10516000000000000000000000000000000000003F -:1051700000008000000000000000000000000000AF -:10518000000000000400000000000000000000001B +:105150000003208241000000004003200000009076 +:1051600000404188000000000004050200000080AB +:105170000041C1830000000000054004000000C1A0 +:105180000041C1C1000000000040094100000000D2 :10519000000000008000000000000000000000008F :1051A000008000000000000000000000000000007F :1051B000000000008000000000000000000000006F -:1051C00000000000000000000000000000000000DF -:1051D0000000800000C1000000000000000000008E -:1051E000004100000020000000000000000000005E -:1051F0000000800000C1000000000000000000006E -:1052000000C180000020000000000000000000003D +:1051C000008000000000000000000000000000005F +:1051D00002800004008300000400800409410203EF +:1051E00089200041808000002041000080000911DA +:1051F000C18000418085000002040009C1C105038F +:10520000C141008080800000404100008000408457 :1052100000000000800000C100000000000000004D -:1052200000000041800000020000000000000000BB +:10522000000000418000002000000000000000009D :1052300000000000800000C100000000000000002D -:105240000000004180000005000000000000000098 -:1052500000000000400000C100000000000000004D -:1052600000000003820000010000000000000000B8 -:1052700000000000400000C100000000000000002D -:10528000000000118200000100000000000000008A -:10529000000000000000400000C10000000000000D -:1052A0000000000000A1020000000000000000005B +:10524000000000418000002000000000000000007D +:105250000000050484018883000001001001A0C142 +:105260000184029100A108C000000101000040C0BB +:1052700000C040C08801820400000101A0000205B6 +:1052800000C1402100C040C00000010100004002F8 +:10529000010900000000400000C100000000000003 +:1052A00000000000000540000001000000000000B8 :1052B000000000000000400000C1000000000000ED -:1052C0000000000000A1020000000000000000003B -:1052D000000000000000000000000042000000008C -:1052E00000004800810000E00000480000000000CD -:1052F000000000420000000000000042000000002A -:1053000000004800810000E00000480900000000A3 -:105310000000004200000000000000000042000009 +:1052C0000000000000830800000100000000000052 +:1052D0000000000000000000000048420000000044 +:1052E00000004842881200E0070048420000000029 +:1052F000000048420000000000004842000000009A +:1053000000004842811200E007004842000000000F +:1053100000004842000000000000000000420000C1 :10532000000000004800810000E00000480000008C :1053300000000000004200000000000000420000E9 :10534000000000004800810000E00000480000006C @@ -91482,210 +91482,210 @@ :10542000000000000000000000000000000000007C :10543000000000000000000000000000000000006C :10544000000000000000000000000000000000005C -:1054500000000000000000000000747B000000005D +:1054500000000000000000000000252B00000000FC :10546000000000000000000000000000000000003C -:105470000000000000000000DE2E747B0000000031 +:105470000000000000000000D4A4757B00000000C4 :10548000000000000000000000000000000000001C -:105490000000000000000000DE2E0000747B000011 +:105490000000000000000000DEAE0000747B000091 :1054A00000000000000000000000000000000000FC :1054B00000000000000000000000DE2E747B0000F1 :1054C00000000000000000000000000000000000DC -:1054D00000000000000000000000DE2E61560340C6 -:1054E0000000000000000231E000000000000000A9 -:1054F0000C4000000000000002C06A8661560340B4 +:1054D00000000000000000000000DE2E60DE03403F +:1054E000000000000000023000000000000000008A +:1054F0000C4000000000000002C07B0660DE03409C :105500000000000000000231E00000000000000088 -:105510000C4000000000000002C06A8600006156D6 +:105510000C4000000000000002C07B060000615645 :1055200003400000000000000231E0000000000025 :1055300000000C4000000000000002C06A866156B6 :1055400003400000000000000231E0000000000005 -:1055500000000C4000000000000002C06A8600004D -:1055600020C0010000008840004000800040008012 -:10557000000004000000200000008208200000005D -:1055800002000400C000000000840000028000004F -:10559000C0050080848400200020880020200003B3 -:1055A000000200A0008000000000010000000000D8 -:1055B00000000080000000800000000000000000EB -:1055C000008000800000008000000000000000005B -:1055D00000000000000000000000000000000000CB -:1055E000000000051084000041010001004000019E -:1055F000002000000000000000000000000000008B -:105600000000C100C100000000840003000000048D -:1056100000000000002000030001008500000001E0 -:10562000000000010003000200000000080000006C -:105630000000000000040000000400000000000062 -:1056400000000020002000000020000000000000FA -:10565000000000000000000000000000000000004A -:1056600000000085008000840000000000000000B1 -:1056700000800000008000800082004100000000E7 -:105680000010000000000000000000000000000505 -:105690000002000000100080000000000000000078 -:1056A00000880000000000000000008000000000F2 -:1056B00000800000000000800000008000000080EA -:1056C0000080008400000080008000800000000056 -:1056D00000000000000000000000000000000000CA -:1056E000000000000004400200090004000009005E -:1056F000000000020000002000200021008400843F -:105700000084000100000000000000080008008480 -:10571000000800010000000100100400000000006B -:1057200000082002000000000000000000100084BB -:105730000000000200000088004000840002000019 -:1057400000200004000500000040001000100000D0 -:105750000000000000000000000000000000000049 -:10576000000000000000020000000080210000088E -:1057700000080008002100210000000800000000CF -:10578000080000000008052000000480000000035D -:1057900000020005000000100108000000030003E3 -:1057A000000500210000000000A100080108880099 -:1057B0000005000500058921000200020005000225 -:1057C00088200010838500100010001000200200C7 -:1057D00000000000000000000000000000000000C9 -:1057E000000000000000000080A000000040200039 -:1057F0000084210000000000000000000000000004 -:105800000000000000000000849100008002000001 -:105810004100000000000000008540000000000082 -:105820000000000000000000000000100000080060 -:1058300000000000000041004000000100010000E5 -:10584000000100010001041000010001000100013D -:1058500080000000000000000000000000000000C8 -:105860000000000000000000000020008280000016 -:105870000800080000000000000090000000000088 -:10588000820000000000080005002000A000008049 -:105890008280080000008280C000820000000800B2 -:1058A000A0000800000084008200000082000800C0 -:1058B0000800080082008400A0008800400040002A -:1058C00000000800820000800000010000000000CD -:1058D0000080000000000000000000000000000048 -:1058E0000000000000000000000000004100000473 -:1058F000000000000000009009000000000000000F -:10590000000000000000000000004000030420042C -:1059100000200010418405001102418400080300AA -:10592000000041000000000803000000000000002B -:10593000008800C02000000000000000000080047B -:1059400080000000008400840002000404020000C3 -:105950000000004000000000000000000000000007 -:105960000000000000000000000000000000000037 -:105970000000201000820000400008000800000025 -:10598000000000000800A00008040000000004005F -:10599000080040208400C0004000A000C000C000FB -:1059A000000000000005000000118208080000004F -:1059B00082214000C021A008000010000005A000C6 -:1059C00082000821840082410480000000840800D5 -:1059D0000000008001000000000000000000000046 -:1059E00000000000000000000000000000000000B7 -:1059F00000A0000085002040000000000000000022 -:105A0000000041C000000000000000000000000095 -:105A10008000000080010000000080000000000005 -:105A20000000000000000000000000000000000076 -:105A300000000300800000000000000000000000E3 -:105A400000000000000000000000890200000005C6 -:105A50000000000000400400000000000000000002 -:105A60000000000000000000000000000000000036 -:105A700000000011900010214008020510111000D4 -:105A80001020082182200820000982002000200028 -:105A9000000000050080050484004010C00088005C -:105AA000820900214000000802080021A010001017 -:105AB0008203000082218421408020100003002006 -:105AC000C020080020210021C00420000000200088 -:105AD000082000200020000000400000000000001E -:105AE00000000000000000000000000000000000B6 -:105AF00000000000000008C00800080000000000CE -:105B00000000000000A000000000000000000004F1 -:105B10002000000200000810840000008000000047 -:105B2000002020400300110208008000000205014F -:105B3000080103A0000000004100830200830382EB -:105B40001000410041000004000020000304000098 -:105B50000000000100010000000000010000000042 -:105B60000000000000000000000000000000000035 -:105B700000000000000000050001080000A04040F7 -:105B8000848800C0C082080200002004C008000011 -:105B90000000000000000002059082C090C00000DC -:105BA0000001A100000100A000900002004001904F -:105BB00000000088A0020000000000090209008324 -:105BC00004A002A0028240900000010090000001A9 -:105BD000C09190400588200800C0409000008208D5 -:105BE00000000000000000000000000000000000B5 -:105BF00000000000000000000041002140080000FB -:105C00008080000000008080008003000080800011 -:105C10000000000000000000008084008000000000 -:105C200000022003400900210580000005800000DB -:105C300020000000008080800000001020A18085EE -:105C40000008C080110000800000004041200405D1 -:105C500000029104C12184C00003408000000000C4 -:105C600080000000000000000000000000000000B4 -:105C7000000000000000000000008080A0008800FC -:105C8000852080008041004080000000004100002D -:105C900080000000000000000000110084041000DB -:105CA000210002802100201000C1830089008900AA -:105CB0000900000000098000000000000900904178 -:105CC000004084858200A0054121110004000300EA -:105CD0000400C0108500210008208200000000217F -:105CE0000000800000000000000000000000000034 -:105CF0000000000000000000000000000810080480 -:105D00008400084008008285C0C10484000020018E -:105D1000848404000800080008000000400083019B -:105D200005088384004001000001000908002000EC -:105D3000A000100000000000A09000000000400241 -:105D40009000002004A002004000408320000100D9 -:105D50004100010004910400A14000400590400072 -:105D600000002000C0000000000000000000000053 -:105D70000000000000000000000000000000000023 -:105D80000411832000010908008840C083C040003E -:105D900000048484C0900000000000000001A008FE -:105DA000008420A084A00000000003010000020283 -:105DB00000A0A01190008440000000000009000035 -:105DC00090020101214101A1888800900084A091E6 -:105DD0000001000100010100A09000009188A0A135 -:105DE000400000A0040288880000000000000000BD -:105DF00000000000000000000000000000000000A3 -:105E00000500091090000004C18300008005A0096E -:105E1000800000C000118008000900030009001084 -:105E2000004100200005A083000910410810000572 -:105E30008000008580A100008020001100400082C9 -:105E4000000000800820102104900000002100A024 -:105E500085400021030340210403030908030204D1 -:105E6000A0C00000008080800080000000000000D2 -:105E70000000000000000000000000000000000022 -:105E800000008000051000000400802000090000D0 -:105E90000000000500A1000000000000008000805C -:105EA00000000005808280218009090002000200B4 -:105EB000080041000002830000A1801100858000DD -:105EC00080000000C100A085000004118082002035 -:105ED00080800003210410804000030489408384F3 -:105EE0000500002080000085000000000000000088 -:105EF00000000000000000000000000000000000A2 -:105F0000000000000400A0040010000008018888C0 -:105F1000C0C040000800080200202000000000046B -:105F2000000400000002A0820285A0000000000022 -:105F3000000001004082000303020011080002A0DB -:105F40004000040000000200898240A09100020885 -:105F5000209004820000010001200020000140A1E7 -:105F6000822190409000C0009002904040000000CC -:105F70000000000000000000000000000000000021 -:105F8000000000000000000000E000000000000031 -:105F900000000000841200000000070060060000FE -:105FA0000000000000000081000007000000000069 -:105FB00000E000000006000000E0070000000041D3 -:105FC00000000700000000000000000007000000C3 -:105FD0000000000000000000000000E000004100A0 -:105FE000000000E007008200000000000700000041 -:105FF00000000000000000000000000000000000A1 -:10600000000000000000000000FFFF000FF00FF094 -:10601000C3C3E3C34000BFFF7E187E18F066F0667E -:1060200000000000000000002030203000000000D0 -:1060300000000000000000000F0F0000CF0CCF0C8C -:10604000000C000900000000000070007000FFC399 -:106050000000FF9FFF0FC3C300000000000000000E -:1060600000003C3018100099005AF0F03C3CF00061 -:106070000F00000000000000000000000000000011 -:106080000000000000000000000000FFFF000FF013 -:106090000FF03C3C1C3CFFFF0000FF996600F0FF46 -:1060A000F0000000000000000000000000003C0CB8 -:1060B000000000000000000000000F0F0000CF0CE7 -:1060C000CF0C000000003C3C00000000000070000D -:1060D000FFC30000FF99000087C30000000000001C -:1060E000000000003C30181081184218FF003C3CB2 -:1060F00000F0000F000000000000000000000000A1 -:10610000000000000000000000000000000000008F +:1055500000000C4000000000000002C06A868805C0 +:105560000400000588808805200820002010200401 +:10557000040588040005000000100009208588004B +:10558000000304098810040020202080002020054A +:10559000200084000100C002C0102010200200037F +:1055A0004010841004000000010020000080828070 +:1055B00020008800C005001004004080C00020804A +:1055C000201088008800000500082004218420881D +:1055D00021802080008088000000880020902080AA +:1055E000000000000900204000200000040000002E +:1055F000000000080000000005000000002000047A +:1056000000000000000009002082000100100009D5 +:1056100004000000000040000001000080000001C4 +:105620000000090000002000000008000000044005 +:10563000000409000000000003000000004000001A +:105640000010000000000000000000A1800188217F +:10565000000502020002000200A000000000000499 +:1056600000040009000500080009004000100010B7 +:1056700000040000000000400008000000000000DE +:1056800000040005000500000002011000400000B9 +:105690000008000500050000000500000008008566 +:1056A00000050000000500000008000000100008D0 +:1056B00000030180008000000100000900100000CC +:1056C0000000001000000009004100410105000039 +:1056D00000000008000000000100000400000000BD +:1056E0000000000000084104008400080008058450 +:1056F00000840000008400040008001000080084FA +:105700000008000820080088000400830884008244 +:105710004082001000080082000800080004090010 +:1057200000020004000000080008008800080009CA +:1057300000000008042000200010048200080084FB +:10574000000800000208000800840040091020083A +:105750000008000800850008000840000005000857 +:105760002084000800080002000800050000A103D2 +:1057700000028240200800080008002100210005E6 +:10578000412040102010C010000800080008040844 +:105790000041040200A1004000030010002100218C +:1057A0000000208800050000080300050005002116 +:1057B00000210000001004210008008808000040BB +:1057C0000008000010080003002100000005000888 +:1057D00000400008001000210021830200000002A8 +:1057E0000889010500000021008200820000008479 +:1057F00002000082000800A00000218800001100C3 +:1058000000C08801A00080840000000000A0008487 +:10581000C100210080A00010000000000010000066 +:10582000008800008003000000000000000000006D +:105830000084000000000000800800002120008299 +:105840000000000000A000A00000000000002100F7 +:1058500000000000050100820000008402850000B5 +:105860000001410404004184210004000000040000 +:10587000040008000000A000A00082000200000058 +:1058800082000000080082000000200000002000CC +:105890000800C000100004000400020000410000E5 +:1058A00082008200400000800000000082000400AE +:1058B0000000000082108200C040C000C00008004C +:1058C000C000040008000800400020008204080016 +:1058D0009000040082800800200001002000048065 +:1058E000200041000000C000A000000000400004B3 +:1058F000000400000020008400000004008440A098 +:10590000089000400002000000A004900004000481 +:105910000010000000000082000800008000000865 +:10592000000400040400400000040004000004001F +:105930000000050000000000020008A100000000B7 +:105940000000200080A0000000000800042000A04B +:1059500080001000008400040000200020000000EF +:10596000A12000A0A0100000000000842100004140 +:105970008441000000400040004100400040000819 +:105980000000000000410080200000000000C00076 +:105990000811000082210000108004200002002174 +:1059A00000008200000500040002820400210000C3 +:1059B00008000000000008000000100000004088FF +:1059C000A041004104410000000000210000C0008F +:1059D00010000800C0084000000082000000844160 +:1059E0008200842040082008000404030000001006 +:1059F000000000100040090200C021001108000052 +:105A0000111000C0000021840802210000000002E3 +:105A10000000210000842000000003208301080111 +:105A20000000000008000310000100000001000059 +:105A300000000000000000100000000000840000D2 +:105A400080400500030080000000000000A000105E +:105A500000000000000000008000000000002100A5 +:105A600000000900080180008300000180000000A0 +:105A70000000080040210805081000008408000804 +:105A80000241000020100800000000210200000078 +:105A900000419021824110040003200000082002F0 +:105AA0002011001100040010000000080011002067 +:105AB000000800004000C021880008100800840988 +:105AC0002004001000200004200200090000000053 +:105AD0004040842100210005080020001000212101 +:105AE00000080021A003A1000805108400210488FB +:105AF000012000A1000008000000000000000000DC +:105B0000000820000020000000000000000000004D +:105B10000008000000042000000000000000000158 +:105B20000000000000000000000000000000000075 +:105B300003000000000020004100000003000800F6 +:105B40000000000000000000000021A04000000054 +:105B50000000800000000000000002000000800043 +:105B600010002005410000000400000080084100F2 +:105B70000002208421044088000400080210000074 +:105B8000000000000000000000000000000000898C +:105B90009085080800100000000040000000C0C010 +:105BA00090044088402040000000020020000001D6 +:105BB00000010001000000000000000000000000E3 +:105BC0004008C088C1080282C00200900084840896 +:105BD00000000100840000001002000800A004087A +:105BE00041010000C101400010219120000002018C +:105BF000C0028200A0010420830000000080008019 +:105C00000000000000000000000000000000000094 +:105C10000008A004058900A04000090080000000E1 +:105C200003808900808080000500210000000000C2 +:105C3000114103214040004000000000000000002E +:105C4000000000800900418080808000008000000A +:105C500000800000100080000000800000800080B4 +:105C60008080A0410003201000098020A102044090 +:105C7000002185820021051080038000802100849E +:105C80000000000000000000000000000000000014 +:105C9000000000002000400002034000030020003C +:105CA00020008000808400800080410020808509E1 +:105CB00005802000210020041010000000000000DA +:105CC00000000000800000048080008000000011BF +:105CD00080008080080003000500A1000000000093 +:105CE00000000000830084009002C141008009117F +:105CF000A080A0004180210040908308020008A0FD +:105D000020A02000000000000000000000000000B3 +:105D1000000000000040000001000101000001003F +:105D200001000140080010C19082880240000382F7 +:105D3000840040100010000001010100000000007C +:105D40000000000000008800C0000284A0908400D1 +:105D500002018484089041004000C000C12000007E +:105D600000000000000008201000410105010002B1 +:105D7000028582A0080088C001A010A1C1011010F6 +:105D80000088000802100000000000000000000071 +:105D900000000000000002000000000120010000DF +:105DA00000010001000085100010C00403890002FA +:105DB0000004008500A100010000A1010000000016 +:105DC00000000000000000002005001100901005F8 +:105DD000820200409084840800000000000100005E +:105DE000100300100011400800830102854100A14A +:105DF00090410010001001C088900089400301020A +:105E00008000008000808080000000000000000012 +:105E100000000000000000000011100941210008EE +:105E2000001000080021000420040003000584C1C4 +:105E300000090010002100C000082141A108004015 +:105E40000000000000000000000000A00084000529 +:105E500082C00000008080008080000900090005E9 +:105E600011028004000400040080001010A004103F +:105E700000C10008108009804080004141094110A4 +:105E800021918000800000008000000000000000E0 +:105E9000000000000000000000002102051040008A +:105EA00000100080000000000003800080820000DD +:105EB00000000091008200800003080321094000D7 +:105EC000030000000000000000000000802080852A +:105ED0008000800080028005801180000080000426 +:105EE00000000002000000000000000041800404E7 +:105EF00005000810C1000305A100C000A089C085ED +:105F0000908088201000041010020400000000009F +:105F1000000000000000000000000000010000017F +:105F2000000000000010000000000000040082A13A +:105F30008410A000000200090040000101200000C0 +:105F40000000010000000000000000000000C0018F +:105F5000201010820800900020100885080000081A +:105F60000040004000000000000000000000014070 +:105F700000830088000009A088A009029000400862 +:105F800002208590110000000000000000000000C9 +:105F90000000000000000000000000000000000001 +:105FA00000E007000000000000000000000000000A +:105FB0000000070042000000000000000000000098 +:105FC00000E00000000000000000000000000000F1 +:105FD000000000E0070000810000000007008800CA +:105FE000000A0000070000000000000000000000A0 +:105FF000000000E007000012000000E007000000C1 +:10600000000000E007004200D9F900004B6F6F6FFD +:106010000000000000000000000000000000000080 +:106020000000000000000000000000000000000070 +:106030006FFC60FC4242D2D200000000F1FFF10090 +:106040000000000000000000000000000000000050 +:10605000000037AA060600109900FFF79910F0E734 +:10606000F0E4000000000000000000000000FDC19E +:10607000FF000000000000000000013DFDFDC30F17 +:106080009900663C66F0B920B92099B900004B0927 +:106090006F09000000000000000000000000000088 +:1060A00000000000000000000000000000000000F0 +:1060B00000006F0C600C4242D2DB0000000070FF59 +:1060C0007000000000000000000000000000000060 +:1060D00000000000BA300606F0CC000066F70010A1 +:1060E000F024F0E4000000000000000000000000C8 +:1060F0007C40FF0000000000000100000101FDC124 +:10610000C30F99FF663C66F0FFFF0000000000002F :10611000000000000000000000000000000000007F :10612000000000000000000000000000000000006F :10613000000000000000000000000000000000005F @@ -91693,324 +91693,324 @@ :10615000000000000000000000000000000000003F :10616000000000000000000000000000000000002F :10617000000000000000000000000000000000001F -:1061800000000000000000000000000000003C3C97 -:10619000C3C300FFFD025A5A5A5A0F0FF0B2000053 -:1061A000FFFF09FF6FFF0000000081018101000077 -:1061B0000000C0008000000000000000000099996D -:1061C000999980401020F0F0C0C0FF99FF9900001D -:1061D000F0C0F0C00F0F0F0F00060000B000B000BD -:1061E0000000000000006666040CFFFFF3F30C0CD7 -:1061F000666600FF6666C3FF000000000000000046 -:10620000000000000000000000000000000000008E -:106210003C3CC3C300FFFF005A5A5A5C0F0FF0F01A -:106220001E1E1E1E09006F0000000000000100017C -:10623000004000C0F00090000000000000000000DE -:106240009999999100000000F0F03030FF99FF9982 -:106250000000000000000F0F0B0B00040000B0B0A6 -:10626000B0000000000000006060060FFFFFFFFFAD -:10627000999966663C3C6666003C000000000000A0 -:10628000000000000000000000000000000000000E -:106290000000402180030021100240618006002D93 -:1062A00000020061000E000D000000610006000DFC -:1062B00000000061003E000D0001006100050009C2 -:1062C00000000061400F000900008061003E000DE9 -:1062D000000000000061000E000D000100610006DA -:1062E000000D0000006100050009000185610A0F32 -:1062F000050100A0100020080500000800000000B3 -:10630000000000000000000000000000000000008D -:106310000000000041554155FAFA505000000000BD -:10632000FF00C3C3000000000F0A000000000000CF -:106330000000000300000000C3C371F30333013900 -:10634000E023CC0F0F0F0000000F000F0000000033 -:1063500030CF3FC00000AAAAAAAAFF5AFFFF000040 -:106360000000F5AFF5AF000000C3BC803F03FF00A5 -:10637000F00070648F9B000000000000000000002F -:10638000000000000000000000000000000000000D -:10639000000000000000EBFFEBFFFAFA5050000095 -:1063A0000000FF00C3C300000000000A000000005E -:1063B00000000000000300000000DFFFFBFB003CCA -:1063C000013920230C0F0F0F0000000F000F0000F9 -:1063D000000030CF3FC0000082AAAAAA5A5AAAAA37 -:1063E00000000000AFAFFAAFF0F000C3BC80FCC00B -:1063F000FF00F000706082920000000000000000CA -:10640000000000000000000000000000000000008C -:106410000000000000000000F0FF5555F0FFF00004 +:106180000000000000000000000000000000663079 +:10619000663F00001F00000000000000000000003B +:1061A00000000000000006FF04FD000000000000E9 +:1061B0000000000000000F0F3C1866666624000017 +:1061C0000000646764670000000000000000000039 +:1061D00000000000000000007EFF66FFFFFF0009D6 +:1061E00030FF606F00FF00FF000000000004242467 +:1061F00024E76666000000000000000010000000B8 +:1062000000FFFFFF909000903C3CFFFF66FF7E7E0A +:10621000000000001F1F1F1F000000000000000002 +:10622000000000000000000000F904FD0000000074 +:1062300000000000000000000000FF996464646436 +:1062400000000000646467670000000000000000B8 +:10625000000000000000000000007FFF6FFF000052 +:106260003C3C00CF606F06F63636000000000000B0 +:1062700024240F0F0F0F000000000000000000009A +:1062800000000000FF00000000903C3C000000996E +:10629000181800003000000000010000000000108D +:1062A000000000000000000000000061000F000975 +:1062B000000000610006000D000085615A0E050D0A +:1062C00000A000610006001D000000610003000D39 +:1062D000000000000000000000000000A061400F6E +:1062E000001D000000000008000000000061003EEA +:1062F000000D000800610006000D000000610009AB +:106300000001000000610E0F009D000100610E0BF6 +:106310000001000500000000000000000000000077 +:106320000000000000000000000000000FAF00A00F +:10633000BF30BF300000000008380000000000003F +:106340000A0500CC0000000045000500550F000FB5 +:1063500000300F3F000000000000000000000000BF +:1063600000007370434000000000000000000000C7 +:106370000000F0F0F3B200000000FCFFFCFF14BED0 +:106380001E1EAAF0C3F0280008080000000000F359 +:1063900055F3C0AAFCAA00000000000000000000A5 +:1063A0000000000000000000000000000000FFAF3F +:1063B000F0A0BF3CBF300000000000300000000033 +:1063C0000000080C00C30000000045450505D70F7C +:1063D000C30F0000FFFF00000000000000000000ED +:1063E000000000007F7C4F4C000000000000000017 +:1063F00000000000F0F030B200000000FCFFFCFFE5 +:106400001E1E1E1EAAF0C3F028000808C3C3C3C383 +:1064100000F3FFF3C0AAFCAA000000000000000087 :10642000000000000000000000000000000000006C -:10643000000000000000000000000000FFBFFF009F -:10644000FBF7EFDF33003300000000007000D000E6 -:1064500000000000000000000000000010003030CC -:106460005A5A0000000000110022400000005F5F47 -:106470005569F00FF00F4444411400000000000083 -:10648000000000000000000000000000000000000C -:1064900000000000000000000000000F5555F0FF54 -:1064A000F0000000000000000000000000000000FC -:1064B0000000000000000000000000000000FFAF2E -:1064C000FF00FEFDBF7F3300330000000000F0003E -:1064D000F0000000000000000000000000000010BC -:1064E00030305A5A0000000011002200050500005B -:1064F0005F5F5569F40BF00F1414441100000000A5 -:10650000000000000000000000000000000000008B -:1065100000000000000000000000000021008400D6 -:1065200020000000840088000000000088000000B7 -:106530002000010020002000000821108800200019 -:106540000000000020000100011089080000840004 -:10655000850000000000211000000800000320005A -:106560000010000008000000000000000000000013 -:10657000000000000000000000000000000000001B -:10658000000000000000000000000000000000000B -:1065900000000000000000000000000000000800F3 -:1065A0000000410000080000000000002000000082 -:1065B0000000000040000000000000000801000092 -:1065C00000000000000000000800080108000900A9 -:1065D00000004000000000000801000085000000ED -:1065E000000000010000800000000000000000002A -:1065F000000000000000000000000000000000009B -:10660000000000000000000000000000000000008A -:10661000000000000000000000000000000000007A -:10662000000000000080008000000000000000006A -:1066300000000000000000800080008000000000DA -:1066400000000000000000000080000000000000CA -:1066500000000080000000000000000000000000BA +:1064300008FB00F3AFAFAFA0000000000030000089 +:106440000000000000000000000000003CF0AAFF77 +:106450000A0AFF0000000000000000000000000029 +:10646000000000000000000000000000000000002C +:1064700000000000000000F0FFF00000000000003D +:1064800000003F305F50F03CAA3C000000000000DC +:106490000F002F207F7003032B2B00000000000053 +:1064A00000000000000000000000000000000000EC +:1064B000000008FB0CFFAFAFAFA00000000082B2ED +:1064C00082820000000000000000000000003CF09C +:1064D000AA000F0F3C3C003000000000000000004C +:1064E00000000000000000000000000000000000AC +:1064F000000000000000000000B4FFB40000000035 +:10650000000000005F505F50F03CF03C7C503C00CD +:1065100000000000AF00FF50AB03AB2B02030210E2 +:1065200000108400881020058890028000008810E8 +:1065300020000000201088208509001088008803B2 +:106540004005840000002010040020000000C0006E +:1065500020000009880520218200820000038403B6 +:106560002010C000200084032020840002000205C7 +:106570000800840089050000880088004000200889 +:10658000200004102000400020842000000488081F +:106590002000208084000000880000008820000087 +:1065A0000000000000000001000004038010000053 +:1065B000000000000000040000850800000000004A +:1065C000000080000000000000000000000000004B +:1065D0000000000000000000000000000082000039 +:1065E000000004002000000009000001000000007D +:1065F0000000800000000800000000000000800093 +:1066000000000000050100008000000900080001F2 +:10661000200000000002090000000000000000014E +:1066200000000000000000000000000500800000E5 +:10663000000000000000000000000000000000005A +:10664000000000000000000000000000000000004A +:10665000000000000000000000000000000000003A :10666000000000000000000000000000000000002A :10667000000000000000000000000000000000001A -:10668000000000000000000000000000000000000A +:10668000000000000000000000000080000000008A :1066900000000000000000000000000000000000FA -:1066A00000000000008800100020004000000010E2 -:1066B000008400000000000000020010002000889C -:1066C000008400880000008800880010000000841A -:1066D00000840084000200000000000000000008A8 -:1066E0000008000000000084000000000088000096 -:1066F000000000880000000000000088000000008A -:1067000000880040000000000000000000000000C1 -:106710000000000000000000000000000000000079 -:106720000000000000210000000000000000000543 -:106730000009000800080000000000000000000040 -:1067400000100008000082000000000000000000AF -:106750000000000500000100000000000000000033 -:1067600001100005000000210000000001000000F1 -:10677000000000000000000400040000000400000D -:106780000000000000000000000000000000000009 -:1067900000000000000000000000000000000000F9 -:1067A00000000000000041A0000000080000000000 -:1067B000081008084108090000000000000000005F -:1067C00003000301030000000300090000000000B3 -:1067D000080000000000210040C04100000000004F -:1067E00008000809000000000000080041000284C1 -:1067F00000C0030041000300000100010800030184 -:106800004100000041000000000000000000000006 -:106810000000000000000000000000000000000078 -:106820000000000000000000400090009000020006 -:106830000000C000C0008200080008000000000046 -:106840000000820082000400C000900000000000F0 -:10685000000004000000880000000000400020004C -:1068600000004000080082000000000000008200DC -:106870000200000000000000000000000800080006 -:106880000000000000000000000000000000000008 -:1068900000000000000000000000000000000000F8 -:1068A00000000000000000000000000008820084DA -:1068B0008000000000000000000000000000000058 -:1068C0000000000000000000004000000008000080 -:1068D00000000008000000000300000000000000AD -:1068E00080000000000080000000000000000000A8 -:1068F0000000800000000000030000000000000015 -:106900000000000000000000000000000000000087 -:106910000000000000000000000000000000000077 -:1069200000000000000000000000000082000000E5 -:10693000820082000008000000000000000000004B -:1069400000000000000004000841000000000000FA -:10695000000000000800820082008200C000C00029 -:10696000000000000800080000000800000000808F -:10697000A0210080C02109000080820009000000E1 -:1069800040000000C0800000000000000000000087 -:1069900000000000000000000000000000000000F7 -:1069A00000000000000000000000000000000500E2 -:1069B00005000000000000000000000800000000CA -:1069C00000000500000000008000880000000800B2 -:1069D00041000800000080080800000000080800CE -:1069E0000000080000000000030000008800000014 -:1069F00000100800411003000800211003000200ED -:106A00000000880008000010000008002100088431 -:106A100008900300030008000000000000000000D0 -:106A20000000000000000000000000000000000066 -:106A300000080040000000080000000000210000E5 -:106A40000000040802008200000004000041000071 -:106A50000200A000001140000800400000000000FB -:106A60000800A000080090080000200000000010AE -:106A70000000000008104000002100000011000488 -:106A8000401000000000C0000000000000000000F6 -:106A900000000000000000000002000000000000F4 -:106AA00000000000000000000000000000000000E6 -:106AB00000000000000000000000000000000000D6 -:106AC00000000000000080000000000080000000C6 -:106AD00000000000000000000000000000000000B6 -:106AE0000000000000008000000000000000000026 -:106AF0000001000000000001000000000000000094 -:106B00000000000100000000000000000000000084 +:1066A000000000080000000800820084000800408C +:1066B00000080000004000080008000800840008EE +:1066C0000008000800080088000000820088000818 +:1066D0000008000000080088008400080008000886 +:1066E00000080000008400840088008400C000844A +:1066F000000800880000008400000000000800106E +:106700000008000800880000000800840008000855 +:1067100000840008000000080008000000080008CD +:1067200000080008A010000800000010000500107C +:1067300000020040000000210000000200020008EA +:1067400000050000200090A00008002000210008A3 +:106750008241004100000000001000000021000301 +:10676000000000030000000800852021000800024E +:106770000005000000080810080800210040000281 +:10678000000800000010000508210021000300108F +:10679000002100080000000300210041002100004A +:1067A00001410005000000820308000000C000084D +:1067B00000C100A000C10000210800A011000000DD +:1067C0000000000000000010002100004109000846 +:1067D0000082008221A003A0031000A0000000009E +:1067E00000A0210000A000001100082080C00000CF +:1067F000030000000300000080008000080803017F +:10680000000000A000A000004100C1000000110035 +:10681000410041C008C0030000000800000021083A +:106820000300048841000000080008008200040002 +:106830000400080000000000820088000000000042 +:1068400000000000C00000000800080000800000F8 +:10685000080000000200000000000000200000000E +:106860000800040008000000000008000200040006 +:106870000400C00082800800008082004000080000 +:10688000A000C00008000000080082000300820091 +:10689000400090002000008008800000C00004003C +:1068A000840000000080C0008200000000000000A2 +:1068B00000820000800400000000001000000010B2 +:1068C00000A00000410008000090004021000020CE +:1068D00000000000000008040000000008000000A4 +:1068E0000010000000000000000000000000000098 +:1068F00000088000000800200000082000000000C0 +:1069000080000000000000000200000000000800FD +:1069100000000008000080000004000800900082D1 +:106920000000000000C0004000A000000041004145 +:106930000003000000000003000800108241000076 +:1069400082008210820008000000000000000500A4 +:1069500000000002000900020000000000100021F9 +:106960000000000000000000000000000000001017 +:1069700004000002000000100005001000000000EC +:106980000800000000000005820008000003A000CD +:10699000820008080000000000002008000000003D +:1069A0000800004108000003008309008221000064 +:1069B0000002110011000010000000C000000000E3 +:1069C0000000008400C000A02108000000000000BA +:1069D000840000A000000000200000000002000071 +:1069E00000000000000000000008210000A00000DE +:1069F00000008000000100000001210000110000E3 +:106A000000840000000000000300000000000000FF +:106A1000000000000000000008002100800021C0EC +:106A2000008400100084080000C0082004100382C5 +:106A300000100021040400050000200000000010E8 +:106A4000004108000041000800000400004002006E +:106A5000000000000010082000000021004100108C +:106A60000000000002000000000090000000000094 +:106A70000000000040000400200000210008000584 +:106A80000200000000100021001108218205000012 +:106A90000004C021A009000002000008000000213D +:106AA00004009021000040410080001141050009D0 +:106AB00008000000040000000000000000000000CA +:106AC0000001000000000000000000008000000045 +:106AD00000000000000000000001000000000000B5 +:106AE00000000000000000000000000000000000A6 +:106AF0000000000000000000000080000000000016 +:106B00000000004000000001000000000000000044 :106B10000000000000000000000000000000000075 -:106B20000000000000000000000000000000000065 -:106B30000000000000A00400004000400000000031 -:106B400000000000000000000800000000900000AD -:106B500000080004000000000000000010040040D5 -:106B600000A02090020000008500000002A082A189 -:106B700000048200000002C000080008C0000002FB -:106B800000C0008400A00000C10000000000000060 -:106B900000000000000000000000000000000000F5 -:106BA00000000000000000000000000000000000E5 -:106BB00000000000000000000000000000000000D5 -:106BC0000000000000000000000080000000000045 -:106BD0000000008000000000000000000000000035 -:106BE00000800000000000000500C000000080A040 -:106BF000008400848000000080000080008000008D -:106C00000080000000000000000421000440000596 -:106C10000000000000000000000000000000000074 -:106C20000000000000000000000000000000000064 -:106C30000000000000000000800080008000800054 -:106C40000000000000000000000000000000000044 -:106C5000910020118400C00000000000000000002E -:106C600080000000808480000300030000000020FA -:106C700080000011000080110000000000408080B2 -:106C800000008000000000800000000003000400FD -:106C900003000000000000000000000000000000F1 -:106CA00000000000000000000000000000000000E4 -:106CB0000000000000000000000088000400100038 -:106CC0008200000000000000000000000000000042 -:106CD00000008800C101040405000000000000005D -:106CE000000004008400A0A1040000400000000097 -:106CF00000A188200000A00004000000A000A00166 -:106D0000080200008800A000A0A082000000A000EF -:106D10000000010000000000000000000000000072 -:106D20000000000000000000000000000000000063 -:106D3000000000000000000000000000008200A031 -:106D400000000088000000000000000000000000BB -:106D5000000000000004000000000002000000002D -:106D600000000000C08200000090A0C0008500A0CC -:106D7000A0900108A00401A0000200820000009081 -:106D80000002828200A0A0A000020000C0A00001BA -:106D90000000A00100000000000000000000000052 -:106DA00000000000000000000000000000000000E3 -:106DB00000000000000000000000000000000000D3 -:106DC0000000000000800000000000000000004003 -:106DD00000400040000000000000000000800000B3 -:106DE00000000000000000000000000089000020FA -:106DF0000041800311A000804000118000000000CD -:106E00000000008000800080000000800000800002 -:106E10000040004180040004000000000000000069 -:106E20000000000000000000000000000000000062 -:106E30000000000000000000000000000000000052 -:106E4000000000048000800000000000000000003E -:106E5000000000000000000000000005008000208D -:106E600000000000000000008000008000800000A2 -:106E70004000050005000200210084802000A100E0 -:106E80000000800080A18080000000000021808040 -:106E900000002100200000000004000000000000AD -:106EA00000000000000000000000000000000000E2 -:106EB00000000000000000000000000000000000D2 -:106EC00000000000A02108C08800000000000000B1 -:106ED00000000000C0008200000004404040C0A04C -:106EE000A001000000000000000004000004008475 -:106EF00000000082000001000100C10008048800B9 -:106F0000A1000000400008090802900000000041B4 -:106F10000482000001A001C0000000000000000089 -:106F20000000000000000000000000000000000061 -:106F30000000000000000000000000000000000051 -:106F4000000000000000000007000000000000003A +:106B2000000000000000000000000002000004005F +:106B300000000000000000000000000040C08410C1 +:106B4000000882080000000000000000040090041B +:106B50000020020240A0C0828208108400000000D1 +:106B60000000000000000000000000000000000025 +:106B700000000000000011A09040029010A040A072 +:106B800000400004100890C00010008404020000BF +:106B900000000000000010C002A0008240020000BF +:106BA00001019100000000000100820000000204C9 +:106BB0009000002082A00000000000000000008083 +:106BC0000000008080800000000000000000000045 +:106BD0008000000080000080058080808000000030 +:106BE00000000000000000000000000000000000A5 +:106BF00000000000000000002080908041000000A4 +:106C00008080000000800080008000800080000004 +:106C10004000210000000000808000000080000093 +:106C2000000920080509001000000800000000000D +:106C30008080800000008000000000000000000054 +:106C40000200100083800900000000000000000026 +:106C500000008082800080004100090984C02180FA +:106C60000000000000000000000000000000000024 +:106C7000000000000000000000008000090389A05F +:106C800091800000001080850000000080208000BE +:106C90000080000000000000000000000000000074 +:106CA00000004080050002004103088021004000F0 +:106CB00002408000002000808000000000000000F2 +:106CC00000000400840005A0000000000000000097 +:106CD000000088001002829008009000100010113F +:106CE000210400000000000000000000000000007F +:106CF00000000000000000000000000040008401CF +:106D0000A01082A020001000A0048800100008003D +:106D10001040880400000000000000000000000097 +:106D200000000000000400000100018401100100C7 +:106D30000000002002000085A0A008000000000064 +:106D400000000000041000A010A0110000000000CE +:106D50000000000000100088000200A08821001040 +:106D60000085100800000000000000000000000086 +:106D70000000000000000000000000000000C04013 +:106D8000008288400110101000080008A002401086 +:106D900000A00240A0080000000000010000080060 +:106DA00000820002C110000000000101010100008A +:106DB0000000000000010008000804A00008000016 +:106DC00000000000000000800080000009000000BA +:106DD0000000000000000000000000000380002010 +:106DE000008400110090000000000000000000007E +:106DF0000000000000000000000000000000000093 +:106E0000808900800011088300000080008000005D +:106E100080000080008080800004002100020004C7 +:106E200080000080000089800005102005201141AD +:106E3000000000100004000200800080800000803C +:106E40000000000000000000808080000080004002 +:106E50000000000000000000000400850080000029 +:106E600000C000210000000300000000000000003E +:106E70000000000000000000000000000000000012 +:106E800000000000000500000041004080C080803C +:106E9000800000400021800000000002000000008F +:106EA0000000000000000000000041402100100030 +:106EB000401040800900110008030000808200009B +:106EC00000000000000000000000C04010404084AE +:106ED0000001000000000000000090008220888473 +:106EE000100000C01010108400000000000000001E +:106EF0000000000000000000000000000000000092 +:106F000000000000881040908800880102000820DE +:106F100008040400A000A00382100000000000008C +:106F200000000000000000000000000001A00000C0 +:106F30000100010100C00000000001000400400346 +:106F4000C0028200000000000000000000000000FD :106F50000000000000000000000000000000000031 -:106F6000070000000000000000000000000000001A -:106F700000000000000000E0000000000000000031 -:106F80000000000000000000000000000000000001 -:106F9000000000000006000000E00000000000000B -:106FA00000000000000000000000000000000000E1 -:106FB00000000000000000000000000000000000D1 -:106FC000000000000000300030000000030300005B -:106FD00000000000000000F000F0000000000000D1 -:106FE00000003C3C0000000000000000000055557F -:106FF0000000FFD700000000000009605500C0033A -:107000000000000000020000C3C74145F0F0F8FA9C -:107010000A0A0A0AC0C000000000000000000000C8 -:107020000000000000000000000000000000000060 +:106F600007000000000000000700420000000000D1 +:106F70000000000000000000000000000000000011 +:106F8000000000000000000000E00700500A0000C0 +:106F900000000700000000000000000000000000EA +:106FA00000000000000000000000000000120000CF +:106FB00000E0000000000000000000008800000069 +:106FC000000007000000000000000000000000A01A +:106FD00000AFF03CF03C0000000000000000F3F3C4 +:106FE000303000FEFFFE5F005F00BEFFFEFF0000CE +:106FF0000000000000000000000000000000000091 +:1070000000000000000000000A0A080A0000C1C3D6 +:10701000EB41E141555F414B0000A000CFFF4555DA +:10702000000000000000000000000000F0550055C6 :107030000000000000000000000000000000000050 -:1070400000000000000000003000300000000303DA -:10705000000000000000000000F000F00000000050 -:10706000000000043C3C00000000000000000000A4 -:1070700055550000FFFF00000000000009605500AA -:107080000C0CCC0F000000000000D3D35151F0F0E5 -:10709000FCFF0A0A0A0AC0C000000000000000004D -:1070A00000000000000000000000000000000000E0 -:1070B00000000000000000000000000000000000D0 -:1070C000000000000000000000000C0C00000000A8 -:1070D000550000000000000000000000000000005B -:1070E0000000C3C3CFCFC3DFFFDF000000000000FC -:1070F00000007FFF00000000008000000000000092 -:107100000000000F00000014000000000FFFF0F06E -:1071100000A800A83C430000400000000000000060 -:10712000050505050000000000000000000000004B +:10704000EB2B2B2BFFFEFFAA00000000000000002E +:1070500000A000AFAA3CAA3C000000000000000015 +:10706000F3F3B2300040FF405F5F5F5F3CFFFCFF27 +:107070000000000000000000000000000000000010 +:1070800000000000000000000000FAFAF8FA3C3CA2 +:10709000FDFFFF55F5555F5F4B4B5050F0500F0F04 +:1070A0000505000000000000000000000000F0FFE7 +:1070B00000FF0000000000000000000000000000D1 +:1070C00000002B2B2B2B00FE00AA0000000000006C +:1070D0000000F5F503F383BF83BF0000000000004C +:1070E00000003F303F30FFDF2808FE0EFFFFFFFFAC +:1070F000FFFF000000000000000000000000000092 +:107100000000000000000000000000000F0CFFFC69 +:1071100015BF01AB140014FF55FF00BE0F00F0FFB8 +:10712000F3F3F3F30000000000000000F0F08ACF5A :10713000000000000000000000000000000000004F -:107140000000000000000000000000000C0C000027 -:107150001400050000000000000000000000000016 -:1071600000000000C3C3CFCFC3CFFFCF000000009B -:10717000000000000000000000000000000000000F -:1071800000000000000000000014000000000FFFDD -:10719000F0F0FCFCFCFC00003C434555555500005C -:1071A00000000505050500000000000000000000CB -:1071B00000000000000000000000000000000000CF -:1071C00000000000000000000000000000000000BF -:1071D0004008001000000000000000000000806176 -:1071E0000006000D00000061000E001D0000000000 -:1071F000000000000000000000000000000000612E -:1072000000070009000000610006001D00000000EA -:1072100000004000000000000000400000100000DE -:1072200000610001000900000000000000000000F3 -:10723000000000000000000000000000000000004E -:10724000000000000000000000000000000000003E +:10714000000000003F3F03033C55FF5500000000D6 +:1071500000000000050503F380BC80BC00000000B7 +:10716000000000003F303F30F7D72000F000FFFF65 +:107170007F7D3F3C00000000000000000000000098 +:107180000000000000000000000000000000000CF3 +:10719000F0FC15BF01AB343034FFF5FF00BE00003A +:1071A0004141F351F3F30000000000000000000033 +:1071B000AAFF000000000000000000000000000026 +:1071C0000000000000003F3F03033C553C55000019 +:1071D000000000000000A0615006000D000000004B +:1071E00000000000000000000E0800000000006128 +:1071F000000E000D00000000000000000000000074 +:10720000000000000000000000000000000000007E +:107210000061000F000100000000000800000000F5 +:10722000000050000000000000610006000D00009A +:107230000000500000000000006100050001000097 +:1072400000610006000D000000000E0800000001B3 :10725000000000000000000000000000000000002E -:1072600000000000505450540000000000000000D6 -:10727000000000000000000000000000000000000E -:10728000050F070F003C0000DC1FDFDF00000000DF -:1072900000000000000000000000000000000000EE -:1072A0000000000000FF00000000000000000000DF -:1072B00000000000000000000000000000000000CE -:1072C00000000000000000000000000000000000BE +:10726000000000000000000000000000000000001E +:1072700000000000EF40AF00000000000000000030 +:1072800000000000000000000000000000000000FE +:1072900000000000000014FF14FF000000000000C8 +:1072A0000000000000000000000000000000C0001E +:1072B000C3000000000000000000AF87AFAF82BE37 +:1072C000033FC3C3FFFF555F000A0000000000003A :1072D00000000000000000000000000000000000AE -:1072E0000000000000005054505400000000000056 -:1072F000000000000000000000000000000000008E -:1073000000000F0F0F0F00380000FC3FFFFF0000D0 -:10731000000000000000000000000000000000006D -:1073200000000000000000FFCCCCF00F00000000C7 -:10733000000000000000000000000000000000004D -:10734000000000000000000000000000000000003D +:1072E000000000000000000000000000000000009E +:1072F000000000000000EF40FF5000000000000010 +:10730000000000000000000000000000000000007D +:1073100000000000000000000000FFFF000000006F +:10732000000000000000000000000000000000005D +:10733000C000000000000000000000002D05050551 +:1073400082BE82BE41C155F5FF5FAA0A000000005F :10735000000000000000000000000000000000002D -:10736000000000000000000000000000000000001D -:1073700000000514000000000000000000000000F4 -:10738000000000000000000000000000A00000A0BD -:1073900000000000000000000000000000000000ED -:1073A0000000000000000F0F3F3F000000550000EC -:1073B00000000000000000000000000000000000CD -:1073C00000000000000000000000000000000000BD +:107360003C103C380000000000000000000000005D +:107370000000000000000000B2F0B2F000000000C9 +:1073800000000000000000000000000000000000FD +:1073900000000000000000000000F000FFFF0000FF +:1073A00000000000000000000000000000000000DD +:1073B00000000000000000000000000000007F3F0F +:1073C0005F0F303F353500000000FF05C3C30000EC :1073D00000000000000000000000000000000000AD -:1073E000000000000000000000000000000000009D -:1073F0000000AA00001400000000000000000000CF -:1074000000000000000000000000C0C0C0C05F001D -:10741000005F00000000000000000000000000000D -:1074200000000000000000000F0F3F3F00A0000A16 +:1073E0000000001000380000000000000000000055 +:1073F00000000000000000000000FFFF000000008F +:10740000000000000000000000000000000000007C +:10741000000000000000000000000000AAAAAAAAC4 +:10742000000000000000000000000000000000005C :10743000000000000000000000000000000000004C -:10744000000000000000000000000000000000003C -:107450000000000000000000840004000000840020 -:10746000000084000000000000000400000000098B -:107470000000040000000000000000000000000008 -:1074800000000000000000000000000000000000FC -:1074900000002000000000000000000000000000CC -:1074A00004000000000000000000000000000000D8 -:1074B00000000000000000000000000000000000CC -:1074C00000000000000000000000000000000000BC -:1074D00000000000000000000000000000000000AC -:1074E000000000000000000000000000000000009C -:1074F000000000000000000000000000000000008C -:10750000000000200000000000000000000000005B +:1074400075305500303F303F000000000000000064 +:1074500000000000000000000005040800082000F3 +:107460000005040000000009880004100021000548 +:1074700020100400880520100005841084090000F5 +:107480000000200088000009200020008405000082 +:10749000200084000400200000000009000000001B +:1074A000000088102000200000108800200000004C +:1074B000840020008800000020000000000004007C +:1074C000000920002000000004000000200000004F +:1074D00000000405880000002000000000000000FB +:1074E000000000000000000000000000000002009A +:1074F000000000002000200000000000000000004C +:107500000000000000000000000004000000000077 :10751000000000002000000000000000000000004B -:10752000000000000000000000000000000000005B -:10753000000000000000000000000000000000004B +:107520000000000000000400020000002000000035 +:10753000200000000000000000000000000000002B :10754000000000000000000000000000000000003B -:10755000000000000000000000000000000000002B +:107550000000000000000008000000000000000023 :10756000000000000000000000000000000000001B :10757000000000000000000000000000000000000B :1075800000000000000000000000000000000000FB @@ -92018,39 +92018,39 @@ :1075A00000000000000000000000000000000000DB :1075B00000000000000000000000000000000000CB :1075C00000000000000000000000000000000000BB -:1075D00000000000000000000000000000000000AB -:1075E000000000000010001000000000001000006B -:1075F000000000000000000000880010001000885B -:10760000001000000000000000000000001000005A -:10761000000000000000000000000000000000006A -:10762000000000000000000000000000000000005A -:10763000000000000000000000000000000000004A -:10764000000000000000000000000000000000003A -:10765000000000000000000000000000000000002A -:10766000000000000800000000000800000000000A -:10767000C00082000800824108000800820000006B -:1076800000008200C00000000000000000000000B8 -:1076900000000000000000000000000000000000EA -:1076A00000000000000000000000000000000000DA -:1076B0000010000000000000000000000000A0001A -:1076C0008200000000000000080000000000000030 -:1076D00000000000000000000000000000000000AA -:1076E000000000080008000000A0000000000800E2 -:1076F000000000000000000000000000000000008A -:107700000000000000000000210000000000000058 -:107710000320030000000000030000000000000040 -:107720000000000000000000000000000000000059 -:107730000000000000000000000000000000000049 -:107740000000000000000000000000000000000039 -:107750000000000000000000000000000000000029 -:107760000000000000000800000008000000000009 -:1077700004000800000008000000000000000000F5 -:1077800008000800080000000000080000000000D9 -:1077900000000000000000000000400000000000A9 -:1077A00000000000000000000000000000000000D9 -:1077B00000000000040000000000000000000000C5 -:1077C00000000000000000000000000000000000B9 -:1077D00000000000000000000000000000000000A9 +:1075D00000000000000000000000000000000008A3 +:1075E0000084002000080008008400080008001043 +:1075F0000008000800100088000800080084000847 +:10760000008400840008008400840008000800084A +:1076100000C0000800080008000800100008000072 +:10762000000800080084008400C0000800C00008B2 +:1076300000840008001000080008004000000088D6 +:1076400000C0000800080010008800880000000842 +:1076500000880010008800080008000000000000FA +:10766000A0000000001000210000000800410021DF +:10767000001000210000002100030010A0410003C1 +:107680000010000500080021000000000021000398 +:107690000010000300100021001000050041000050 +:1076A00000000005000000080008000000000000C5 +:1076B0000000000800100021001000000000002160 +:1076C000001000030000004100080000000000035B +:1076D0000000080800080000000000000000000092 +:1076E0000000008400840084000000A000840000EA +:1076F00000100084000021A00008410000000000EC +:10770000411000100000000000A0000821840010BB +:10771000001000A000080000008200000000080027 +:107720000000000003000000000000C0000841004D +:1077300000A0000000080000000800A000100000E9 +:107740000082000000A041000000000000000000D6 +:1077500000000300000000A003A0000000000808D3 +:107760000000000090000000000002000000000087 +:107770000400000000000000000000000000000005 +:10778000A000000000000000000000000000400019 +:107790000000000002000000000000000400820061 +:1077A0000000000000008200000000000000000057 +:1077B0008200000000000000000000000000000047 +:1077C000080000000400000000004000000000006D +:1077D000400000000000000000000000040008005D :1077E0000000000000000000000000000000000099 :1077F0000000000000000000000000000000000089 :107800000000000000000000000000000000000078 @@ -92059,31 +92059,31 @@ :107830000000000000000000000000000000000048 :107840000000000000000000000000000000000038 :107850000000000000000000000000000000000028 -:107860000000000000000000000000000000000018 -:107870000000820000000000000000000000000086 -:107880000000000000008200000000000000000076 -:1078900000000000000000000000000000000000E8 -:1078A00000000000000000000000000000000000D8 -:1078B00000000000000000000000000000000000C8 -:1078C00000000000080000000000000000000000B0 -:1078D00000000000000000000000000000000000A8 -:1078E0000000000000000000000000000000000098 -:1078F0000000000000000000000800000000000080 -:107900000800000000000000030000000800000064 -:107910000000000008000300000000000800000054 -:10792000000000000000000000A0000000000000B7 -:107930000000030000000000000021000000000023 -:1079400000000000000000000000000041000000F6 -:107950000000000000000000000000000000000027 -:10796000000000000000000000000000000800000F -:107970000000000000000000000000000000000007 -:1079800000000000000000000000020000000000F5 -:1079900000000000000000000000000000000000E7 +:107860000000000000000000000000000005000013 +:107870000000080008000000C008C0000000000070 +:1078800000000000000000000000000000030010E5 +:1078900000000010000000000000000000030000D5 +:1078A000000300100041000000000000000008007C +:1078B00000100000000000000000000000000000B8 +:1078C000000000000000080000000000002100008F +:1078D000000000000000000000030000004100085C +:1078E0000000000000000000000000000000000890 +:1078F0000010000000000000000000A000000000D8 +:1079000000C02100210000C00008000000080000A5 +:107910000800000000080000000000000000000057 +:1079200000000010000000000000000000A008C0DF +:107930000000000800000000000000A0000000009F +:10794000000021080000000000000000000000000E +:1079500000000010008403000808000000840000FC +:107960000084080000000000000800000000004142 +:107970000008000000410003042100000800084046 +:1079800008000000000800000000000000000800DF +:1079900000000000000000080000000000000008D7 :1079A00000000000000000000000000000000000D7 -:1079B0000000000082000000000000000000000045 -:1079C0000000400000000000000000000000000077 -:1079D00000000000000000000000000000000000A7 -:1079E0000000000000000000000000000000000097 +:1079B0000021000000000011000000000200000093 +:1079C00000000000000000000000000000000000B7 +:1079D0000000000000000000000000000000001196 +:1079E000000000000000000900000040000000004E :1079F0000000000000000000000000000000000087 :107A00000000000000000000000000000000000076 :107A10000000000000000000000000000000000066 @@ -92266,16 +92266,16 @@ :10852000000000000000000000000000000000004B :10853000000000000000000000000000000000003B :10854000000000000000000000000000000000002B -:10855000000000000000000000000000009000008B -:108560000000000200000000000000000000000009 +:10855000000000000000000000000000208000007B +:10856000000000000000000000000000000000000B :1085700000000000000000000000000000000000FB :1085800000000000000000000000000000000000EB :1085900000000000000000000000000000000000DB :1085A00000000000000000000000000000000000CB :1085B00000000000000000000000000000000000BB :1085C00000000000000000000000000000000000AB -:1085D0000000000000000000000000000000090092 -:1085E0000004000000000000000000000000000087 +:1085D0000000000000000000000000000000080093 +:1085E000000000000000000000000000000000008B :1085F000000000000000000000000000000000007B :10860000000000000000000000000000000000006A :10861000000000000000000000000000000000005A @@ -92283,19 +92283,19 @@ :10863000000000000000000000000000000000003A :10864000000000000000000000000000000000002A :108650000000000016A80038000000000000000024 -:108660000000000000000000850081810000000083 +:108660000000000000000000850000000000000085 :1086700000000000000000000000000000000000FA :1086800000000000000000000000000000000000EA :1086900000000000000000000000000000000000DA -:1086A0002000000000000000000000008800000022 -:1086B000200000000000200020000000000020003A -:1086C000000000000000000000000000200000008A -:1086D00088000000000020002000000000002000B2 -:1086E000000010004000000000000000000020001A -:1086F00000000000000000002000200040000000FA -:108700002000200020008800000000000000200061 -:108710000000000000000000200020000000100009 -:108720002000000000000000000000000000000029 +:1086A00000000000000000000000000000002000AA +:1086B00000000000000000000000000000000000BA +:1086C00000000000000000000000000000000000AA +:1086D000000000000000C0000000000000000000DA +:1086E000000000000000000000000000000000008A +:1086F000000000000000000020000000000000005A +:108700000000000000000000000000000000000069 +:108710000000000000000000C00000000000000099 +:108720000400000000000000000000000000000045 :108730000000000000000000000000000000000039 :108740000000000000000000000000000000000029 :108750000000000000000000000000000000000019 @@ -92303,31 +92303,31 @@ :1087700000000000000000000000000000000000F9 :1087800000000000000000000000000000000000E9 :1087900000000000000000000000000000000000D9 -:1087A00000000000000000000000110000000000B8 -:1087B0000000410000000000000000000000000078 -:1087C00000000000000000000000000000000000A9 +:1087A0000000000000000000000041000000000088 +:1087B00000001100000000000000000000000000A8 +:1087C00000000000000000000000000800000000A1 :1087D0000000400000000000000000000000000059 -:1087E0000000000000000000000000000000000089 +:1087E0000000000000000000000000050000000084 :1087F0000000000000000000000000000000000079 :108800000000000000000000000000000000000068 -:108810000000000000000000000000000008000050 -:10882000000000000000000009000000C00000007F -:108830000000000090000000000000000002008422 -:108840000900400000082000400000000000000077 -:10885000000000008900200000000000000000006F -:1088600040000000000800000000000000000000C0 -:1088700000000000000000000000000000000000F8 -:1088800000000000000000080000000000000000E0 -:1088900000000000000000000000000000000001D7 -:1088A0000000200000000908000000000000000097 -:1088B00000000000000000000000000000000000B8 -:1088C00000000000000000000000000000000000A8 -:1088D0000004000000000000000000000000000094 -:1088E0000000000000000000000300000000000085 -:1088F0000000000000000000000000000000000078 -:108900000000000000000000000000000000000067 -:108910000000000000000000000000000000000057 -:108920000000000000000000000000000000000047 +:108810000000000000000000000000001100000047 +:108820000000000000000008000800089008000890 +:1088300000840008C00800080008008200080082C8 +:10884000008400080008000800840008000200847A +:108850000084000880020008000800080008008268 +:108860000000000800080000000800000008008464 +:1088700000080000008200080008000800840002D0 +:1088800000000008000800080008000000820082C4 +:108890000008000000000084000800080008C0086C +:1088A0000084000800840040002100000000000057 +:1088B000000000080005002000210000000000006A +:1088C000000000090000000000030000000000009C +:1088D000000000050000002100000003000000006F +:1088E0000021000800000021000000000005000039 +:1088F000000000210000000000210000000000082E +:10890000000800030005000000210000000000082E +:10891000000000000000000000080000000000004F +:10892000000000000000000000080000000000003F :108930000000000000000000000000000000000037 :108940000000000000000000000000000000000027 :108950000000000000000000000000000000000017 @@ -92336,30 +92336,30 @@ :1089800000000000000000000000000000000000E7 :1089900000000000000000000000000000000000D7 :1089A00000000000000000000000000000000000C7 -:1089B00000000000C000C00010000000C000000067 -:1089C0000000000000000000820010008200000093 -:1089D00000000000C000000082000000C000000095 -:1089E0000000000084000000820000000000100071 -:1089F0000000C000000000000000820000008200B3 -:108A00000000820000000000000000000000820062 -:108A100000000000000000000000000010008200C4 -:108A20000000000000000000000000000000000046 -:108A300000000000000000000000000041000000F5 +:1089B00000000000000000000000000000000000B7 +:1089C00000000000000000000000000000000000A7 +:1089D0000000000000000000000000000000000097 +:1089E0000000000000000000000000000000000087 +:1089F0000000000000000000000000000000000077 +:108A00000000000000000000000000000000000066 +:108A10000000000000000000000000000000000056 +:108A2000000000000800000000000000000000003E +:108A30000000000000000000000000000000000036 :108A40000000000000000000000000000000000026 :108A50000000000000000000000000000000000016 :108A60000000000000000000000000000000000303 :108A700000000000000000000000000000000000F6 -:108A800000000000000000000000410000000000A5 +:108A800000000000000000000000000000000000E6 :108A900000000000000000000000000000000000D6 :108AA00000000000000000000000000000000000C6 -:108AB00082000800820000008200820000000000A6 -:108AC00000000000000000000000000000000000A6 -:108AD00000008400000000000000400000000000D2 -:108AE0000000000000000000000000001000100066 -:108AF00000008200000000000000000000000000F4 -:108B0000C00000000000C0000000000000000000E5 -:108B10000000000000040000000000000000000051 -:108B20000000000000000000000000000000100035 +:108AB00000000000000000000000000000000000B6 +:108AC0000000000000000000000000050000002180 +:108AD000000000000000000000080000000008087E +:108AE0000000000000000000000300000000000083 +:108AF0000000000000000000000800000005000069 +:108B0000000000000000000000000008000000005D +:108B1000000000000000000000080000000000004D +:108B20000000000000000000000000000000000045 :108B30000000000000000000000000000000000035 :108B40000000000000000000000000000000000025 :108B50000000000000000000000000000000000015 @@ -92368,22 +92368,22 @@ :108B800000000000000000000000000000000000E5 :108B900000000000000000000000000000000000D5 :108BA00000000000000000000000000000000000C5 -:108BB0000000000000000000000000001000840021 -:108BC0000000000000000000000000000021000084 -:108BD0000000000000000000000000000000000095 -:108BE0000000000000000000000000008200000003 +:108BB00000000000000000000000000000000000B5 +:108BC0000000000000000000000800000008002174 +:108BD0000000000000000003000000000000000092 +:108BE0000000000000000021C000000000000000A4 :108BF0000000000000000000000000000000000075 -:108C0000000000000000080000000000000000005C -:108C10000000000000000000000000000000000054 -:108C20000000000000000000000000000100000043 +:108C00000021000000000000000300000000000040 +:108C1000000000000000000000080000000000004C +:108C20000000000000000000000000000000000044 :108C30000000000000000000000000000000000034 :108C40000000000000000000000000000000000024 :108C50000000000000000000000000000000000014 :108C60000000000000000000000000000000000004 -:108C700000000000000000000000000000000000F4 +:108C700000002100000000000000000000000000D3 :108C800000000000000000000000000000000000E4 :108C900000000000000000000000000000000000D4 -:108CA0000000000000000000000000000000400084 +:108CA00000000000000000000000000000000000C4 :108CB00000000000000000000000000000000000B4 :108CC00000000000000000000000000000000000A4 :108CD0000000000000000000000000000000000094 @@ -92396,25 +92396,25 @@ :108D40000000000000000000000000000000000023 :108D50000000000000000000000000000000000013 :108D60000000000000000000000000000000000003 -:108D700000000000000000000000000040000000B3 +:108D700000000000000000000000000300000000F0 :108D800000000000000000000000000000000000E3 :108D900000000000000000000000000000000000D3 :108DA00000000000000000000000000000000000C3 :108DB00000000000000000000000000000000000B3 :108DC00000000000000000000000000080008000A3 -:108DD0000000000300000000000000000000000090 +:108DD0000000001100000000000000000000000082 :108DE0000000000000000000000000000000000083 -:108DF00000000000000000000000000000008000F3 -:108E000080000000001000000000000000000000D2 -:108E100000000000000080000000000000110000C1 +:108DF0000000000000000000000000000000000073 +:108E000080000000001100000000000000000000D1 +:108E100000000000000000008000000000040000CE :108E20000000000000000000000000000000000042 :108E30000000000000000000000000000000000032 -:108E4000000000000000000000000000000004001E -:108E5000040000000000000000000000000000000E +:108E4000000000000000000000000000000008001A +:108E50001000000000000000000000000000000002 :108E60000000000000000000000000000000000002 :108E700000000000000000000000000000000000F2 -:108E800004000200000000010000000000000000DB -:108E900000000000000000000400200000000000AE +:108E800090008200000000080000000000000000C8 +:108E90000000000000000000100082000000000937 :108EA00000000000000000000000000000000000C2 :108EB00000000000000000000000000000000000B2 :108EC00000000000000000000000000000000000A2 @@ -92434,12 +92434,12 @@ :108FA00000000000000000000000000000000000C1 :108FB00000000000000000000000000000000000B1 :108FC00000000000000000000000000000000000A1 -:108FD0000000000000090000000040000000000048 -:108FE0000000000000000000000000000008000079 +:108FD0000000000000000000000008000000000089 +:108FE0000000000000000000000000000000000081 :108FF0000000080000000000000000000000000069 -:10900000000000000002000000000000400000001E +:10900000000000000002000000000000200000003E :109010000000000000000000000000000000000050 -:1090200000400000030000000000000000000000FD +:109020000008000003000000000000000000000035 :109030000000000000000000000000000000000030 :109040000000000000000000000000000000000020 :109050000000000000000000000000000000000010 @@ -92447,15 +92447,15 @@ :1090700000000000010000000000000000000000EF :1090800000000000000000000000000000000000E0 :1090900000000000000000000000000000000000D0 -:1090A00000000000000001000000000000000000BF +:1090A00000000001000001000000000000000000BE :1090B00000000000000000000000000000000000B0 :1090C00000000000000000000000000000000000A0 -:1090D0000000000000000000818100900900C843EA +:1090D0000000000000000000484200500A00900913 :1090E0000000000000000000000000000000000080 -:1090F000008100000900C80000000000000000001E -:1091000000000000000000000000884100900900FD -:10911000C843000000000000000000000000000044 -:109120000000600600900900C84300000000000035 +:1090F000004200000A009000000000000000000094 +:1091000000000000000000000000484200500A007B +:1091100090090000000000000000000000000000B6 +:109120000000484200500A009009000000000000C2 :10913000000000000000000000000000000000002F :10914000000000000000000000000000000000001F :10915000000000000000000000000000000000000F @@ -92475,19 +92475,19 @@ :10923000000000000000000000000000000000002E :10924000000000000000000000000000000002001C :10925000000000000040020000000000004000404C -:10926000030810C002000000000000000000000021 -:109270000000000000000040030800000040000063 +:10926000032004C002000000000000000000000015 +:10927000000000000000004003200000004000004B :1092800000000000000000000000000000000000DE -:109290000040030810C002000000000000000000B1 -:1092A00000000000000000000040030810C00200A1 +:109290000040032004C002000000000000000000A5 +:1092A00000000000000000000040032004C0020095 :1092B00000000000000000000000000000000000AE :1092C000020000000000004000000000000000005C :1092D000000000000000000000000000000000008E -:1092E000080200081000401000000000000000000C -:1092F000000000000000000008020008000000005C +:1092E0000802002004004010000000000000000000 +:1092F0000000000000000000080200200000000044 :10930000000000000000000000000000000000005D -:1093100000000802000810004010000000000000DB -:10932000000000000000000000000802000810001B +:1093100000000802002004004010000000000000CF +:10932000000000000000000000000802002004000F :1093300040100000000000000000000000000000DD :10934000000000000000000000000000000000001D :10935000000000000000000000000000000000000D @@ -92530,22 +92530,22 @@ :1095A0009A00000000000000000000000000000021 :1095B00000000000000000909A0000000000000081 :1095C0000000000000000000000000000000000992 -:1095D00000000000000000000000000088002000E3 -:1095E000200020002000200020002000400020005B -:1095F0002000840020002000000000002000200047 -:10960000200020002000200020000000000020009A -:109610002000200020004000000088000000200002 -:1096200020002000200020002000200000008800F2 -:10963000200020002000200020000000200020004A -:109640008400C000200088002000200000002000CE -:10965000880020002000C000200000002000000042 +:1095D000000000000000000000000000000000008B +:1095E000000000002000000000000000000000005B +:1095F0000000C000000000000000000000000000AB +:10960000000000000000000000000000000000005A +:10961000000000000000000000000000000000004A +:10962000000000000000000000000000000000003A +:10963000000000000000000000000000000000002A +:10964000000000000000040004000400040000000A +:10965000000000000000000000000000000000000A :1096600000000000000000000000000000000000FA :1096700000000000000000000000000000000000EA :1096800000000000000000000000000000000000DA :1096900000000000000000000000000000000000CA :1096A00000000000000000000000000000000000BA :1096B00000000000000000000000000000000000AA -:1096C000000000000000000000000000000000009A +:1096C000000000000000000080008000800090008A :1096D000000000000000000000000000000000008A :1096E000000000000000000000000000000000007A :1096F000000000000000000000000000000000006A @@ -92555,76 +92555,76 @@ :109730000000000000000000000000000000000029 :109740000000000000000000000000000000000019 :109750000000000000000000000000000000000009 -:1097600000002000000000000000000000000000D9 -:109770000000400000000000200040000000000049 -:109780000000400000000000000000004000400019 -:109790004000000000000000000000000000000089 -:1097A0000000000040000000000000000000000079 -:1097B00000000000000000000000000000000000A9 -:1097C0000000000000000000000000080000000091 -:1097D0000000000000000000000000000000000089 -:1097E0000000000800000000000000000000000071 -:1097F0000000000000000000000000000000000069 +:10976000000000840000000000000000000000086D +:109770000008000000000008000000000000008455 +:1097800000040000000000000000000000000008CD +:109790000004000000000084000000000000000839 +:1097A00000080000000000000000000000000008A9 +:1097B0000004008400000000000000000000000021 +:1097C0000004000400000000000041000000000848 +:1097D0000008000800000000000000000000000079 +:1097E000000000080003000000000003000000006B +:1097F0000000000000030000000000000000000066 :109800000000000000000000000000000000000058 -:109810000000000000000000000000000000000048 -:109820000000000000000000000000000000000038 +:109810000040000000000000000000000000000008 +:109820000000000000000000000000050000000033 :109830000000000000000000000000000000000028 -:109840000000000000080000000000000000000010 +:1098400000000000400800000000000000000000D0 :109850000000000000000000000000000000000008 -:1098600000000000000000004100000000000000B7 +:1098600000000000000000000000000000000000F8 :1098700000000000000000000000000000000000E8 -:1098800005000000000000000000000000000000D3 -:1098900000000000000021000000000000000000A7 -:1098A00000000000000000000000000000000000B8 -:1098B0000000000000000000000041000000000067 -:1098C0000000000000000000000000000000000098 -:1098D0000000000000000000000000000000000088 -:1098E00000000000000000000000000082000000F6 -:1098F0008200000000000000000000008200000064 -:109900008200000000000000000000008200000053 -:109910000000000000000800000084008200000039 -:1099200010000000000000000000C00082000000E5 -:109930000000820000000000000000008200000023 -:109940000000820000000000000000008200000013 -:1099500000000000100000000000000008000000EF -:10996000000008008200000000000000000000006D -:1099700000000000030000000000000000000000E4 +:109880000000004000000082000000000000000016 +:1098900000000000040000000000000000000000C4 +:1098A0000000000000000000048200000000000032 +:1098B0000000000000000000000000000040000068 +:1098C0000000000000000002000000000000000096 +:1098D00000000000004010400000000000000000F8 +:1098E0000000000010000000000000000000000068 +:1098F0000000000000000000000000000000000068 +:109900000000000000000000000000000000000057 +:10991000000000080000000000000000000000003F +:109920000000000000000000000000000000000037 +:10993000000000000008000000000000000000001F +:109940000000000000000000000000000000000017 +:1099500000000000000800000000000000000000FF +:1099600000000000000000000000000000000000F7 +:1099700000000000000000000000000000000000E7 :1099800000000000000000000000000000000000D7 -:1099900000000000000000000000000000000000C7 -:1099A0000000000000000000000000000082000035 +:1099900000000000000000000000210000000000A6 +:1099A00000000000000000000000000000000000B7 :1099B00000000000000000000000000000000000A7 -:1099C000000000000000000000000000000008008F -:1099D0000800000008000000000000000000000077 -:1099E00000880000000000000000000000000000EF -:1099F0000000000000000000000000000000000067 -:109A00000000000000000000000000000000000056 -:109A100000000000008000000000000000000000C6 -:109A200000000000000908009000900900000000FC -:109A300000000000000000000000100000210000F5 +:1099C0000000000000000000000000000000000097 +:1099D0000000000000000000000000000000000087 +:1099E0000000000000000000000000000000000077 +:1099F00000000000000000000040004000000000E7 +:109A0000000000000000000000000008000000004E +:109A100000000000008000000000000800000000BE +:109A20000000000000000000000000000000000036 +:109A3000000000000000000000000000000800001E :109A40000000000000000000000000000000000016 -:109A50000000000000000000000000000000000006 -:109A600000000000000000000000000000000000F6 +:109A50000000000084000000000000000000000082 +:109A60000000000000000000000000008400000072 :109A700000000000000000000000000000000000E6 -:109A800000000000000000000000000000000000D6 +:109A800000000000000000000000000800000000CE :109A90000000000000000040000000000000000086 :109AA00000000000000000000000000000000000B6 -:109AB00000000000030000000000000000000000A3 -:109AC0000000000000000000000000000000000096 +:109AB0000000000000001100000000000000000095 +:109AC0000000000000000000000000000020000076 :109AD0000000000000000000000000000000000086 :109AE0000000000000000000000000000000000076 :109AF0000000000000000000000000000000000066 :109B00000000000000000000000000000000000055 -:109B100000000000000000008200000000000000C3 -:109B200000000000000000000000000000800000B5 -:109B30000000000000000000000000000000000025 +:109B1000000000000000000008000000000000003D +:109B2000000000000080080000000000008000002D +:109B3000000000000000000000000000000000081D :109B40000000000000000000000000000000000015 :109B50000000000000000000000000000000000005 :109B600000000000000000000000000000000000F5 :109B700000000000000000000000000000000000E5 -:109B800000001000000000000000000000000000C5 +:109B800000000000000000000000000000000000D5 :109B900000000000000000000000000000000000C5 -:109BA0000000088200820000000000000000001099 -:109BB000000000000000410041000008000000001B +:109BA000000000000000001000000000008800100D +:109BB0002100000000000000000000000000000084 :109BC0000000000000000000000000000000000095 :109BD0000000000000000000000000000000000085 :109BE0000000000000000000000000000000000075 @@ -92659,7 +92659,7 @@ :109DB00000000000000000000000000000000000A3 :109DC0000000000000000000000000000000000093 :109DD0000000000000000000000000000000000083 -:109DE0000000000000000000000000000000000073 +:109DE000000000000000000800000020000000004B :109DF0000000000000000000000000000000000063 :109E00000000000000000000000000000000000052 :109E10000000000000000000000000000000000042 @@ -92667,7 +92667,7 @@ :109E30000000000000000000000000000000000022 :109E40000000000000000000000000000000000012 :109E50000000000000000000000000000000000002 -:109E600000000000000000000000000000000000F2 +:109E600000000000000000000000200000000000D2 :109E700000000000000000000000000000000000E2 :109E800000000000000000000000000000000000D2 :109E900000000000000000000000000000000000C2 @@ -92675,7 +92675,7 @@ :109EB00000000000000000000000000000000000A2 :109EC0000000000000000000000000000000000092 :109ED0000000000000000000000000000000000082 -:109EE0000000000000000000000000000000000072 +:109EE0000000000000000000200000000000000052 :109EF0000000000000000000000000000000000062 :109F00000000000000000000000000000000000051 :109F10000000000000000000000000000000000041 @@ -92683,7 +92683,7 @@ :109F30000000000000000000000000000000000021 :109F40000000000000000000000000000000000011 :109F50000000000000000000000000000000000001 -:109F600000000000000000000000000000000000F1 +:109F600000000000000000000000000000080000E9 :109F700000000000000000000000000000000000E1 :109F800000000000000000000000000000000000D1 :109F900000000000000000000000000000000000C1 @@ -92700,7 +92700,7 @@ :10A040000000000000000000000000000000000010 :10A050000000000000000000000000000000000000 :10A0600000000000000000000000000000000000F0 -:10A0700000000000000000000000000000000000E0 +:10A0700000004000000000000000000000000000A0 :10A0800000000000000000000000000000000000D0 :10A0900000000000000000000000000000000000C0 :10A0A00000000000000000000000000000000000B0 @@ -92740,7 +92740,7 @@ :10A2C000000000000000000000000000000000008E :10A2D000000000000000000000000000000000007E :10A2E000000000000000000000000000000000006E -:10A2F000000000000000000000000000000000005E +:10A2F000000000000000000005000A08050000A0A2 :10A30000000000000000000000000000000000004D :10A31000000000000000000000000000000000003D :10A32000000000000000000000000000000000002D @@ -92774,178 +92774,178 @@ :10A4E000000000000000000000000000000000006C :10A4F000000000000000000000000000000000005C :10A50000000000000000000000000000000000004B -:10A5100000000000000000002000200020002000BB -:10A52000880020002000040020008400200020007B -:10A53000880000002000880020002000200020006B -:10A54000880020002000200020002000200088003B -:10A5500020008800200004000002200020002000CD -:10A560002000200020002000C000880020002000E3 -:10A57000880020002000880020002000200020000B -:10A58000200020008400840020008400200020009F -:10A590002000020020002000200000000000000039 -:10A5A0000000000000004000200000000400000047 +:10A51000000000000000000000000000000020001B +:10A52000000000000000200000000000000000000B +:10A530000000000000008800000000000000000093 +:10A5400000000000000000000000000000004000CB +:10A5500000000000000020000000000000000000DB +:10A5600000000000000000000000000000000000EB +:10A5700020000000000000000000000000000000BB +:10A5800000000000000000000000000000000000CB +:10A59000200000000000000000000000000000009B +:10A5A00000000000000000000000000000000000AB :10A5B000000000000000000000000000000000009B -:10A5C000000000000400040010000400040000006B +:10A5C000000000000000000000000000000000008B :10A5D000000000000000000000000000000000007B -:10A5E0000000000000000400000000000000000067 -:10A5F000000000000000000000004000000000001B -:10A60000000000000000000020000000000000002A -:10A6100000000000800000000000100000000000AA +:10A5E000000000000000000000000000000000006B +:10A5F000000000000000000000000000000000005B +:10A60000000000000000000000000000000000004A +:10A61000000000000000000000000000000000003A :10A62000000000000000000000000000000000002A -:10A630000000040000000000000004000000000012 +:10A630000000000000000000000004000000000016 :10A64000000000000000000000000000000000000A -:10A6500000000000040004000020002000000000B2 +:10A6500000000000000000000100010000000000F8 :10A6600000000000000000000000000000000000EA :10A6700000000000000000000000000000000000DA :10A6800000000000000000000000000000000000CA :10A6900000000000000000000000000000000000BA :10A6A00000000000000000000000000000000000AA -:10A6B0000000000000080000000000000000000092 +:10A6B000000000080410000000000000000000007E :10A6C000000000000000000000000000000000008A -:10A6D0000000000000088000800000010001000070 +:10A6D0000000001000000000000002000200000066 :10A6E000000000000000000000000000000000006A -:10A6F0000000000000000008000000000000000052 -:10A7000000000000000000080000000800880008A9 -:10A71000000000000000000800840000000000109D +:10A6F00000000008000000080000000000000082C8 +:10A7000000020000000000080000000000000082BD +:10A710000000000800000008000000000000000029 :10A720000000000000000000000000000000000029 -:10A730000000000000000000000000000000000019 -:10A740000000000000000000000004000000000005 +:10A7300000000000000000002000000000000000F9 +:10A740000000000000000000000000000000000009 :10A7500000000000000000000000000000000000F9 -:10A7600000000000000000000000002100000008C0 -:10A77000002100000000000000210008000000008F -:10A78000000800000000A000001000000000000011 +:10A7600000000000000000002000000000000000C9 +:10A7700000000000000000000000000000000000D9 +:10A780009000000000000000000000000000000039 :10A7900000000000000000000000000000000000B9 :10A7A00000000000000000000000000000000000A9 -:10A7B0000000000008000000000000000000000091 -:10A7C0000000000000000000000000000300000086 +:10A7B0000300000000000000000000000000000096 +:10A7C0000000000000000000000000000000000089 :10A7D0000000000000000000000000000000000079 :10A7E0000000000000000000000000000000000069 :10A7F0000000000000000000000000000000000059 -:10A800004100000000000000000000000000000007 -:10A810000000000008000000000000000000000030 -:10A82000000000000000000000008200080000009E -:10A830008200820000000000000000000800C0004C -:10A8400082000000000000000000A0000000C00026 -:10A850008200000000000000000000000000000076 -:10A86000820000000000040000000000A0000000C2 -:10A870000000820000000000000000000000000056 -:10A8800000000000000000000000000000000000C8 -:10A8900008000000000000000000000000000000B0 -:10A8A00000000000010000000000000000000300A4 -:10A8B0000000000010000000000000000300000085 -:10A8C0000000000000000000000000000000080080 -:10A8D0000000000000000000000000000000000078 -:10A8E00000000000000000000000008400000000E4 -:10A8F0001000000005000808000000000000000033 -:10A900000000000000000000000000000000000047 -:10A91000000008000000000000000000000000002F -:10A920000000000000000400000000000000000023 -:10A930000000000000000000000000001000000007 -:10A94000000000000000100000000000C000000037 -:10A9500000000000000000000000000008000800E7 -:10A9600000800080008000800000000000050000E2 -:10A9700000080000000000000000000000000000CF -:10A9800008000000000000000000000000000000BF +:10A80000000008004000000040004002000000007E +:10A810000000000000000000000003000300000032 +:10A820000300000000000000000000000000000025 +:10A830000000820000000000000000000000000096 +:10A840000000080000000000000008000000C00038 +:10A8500000008200000000000000000000400040F6 +:10A8600000200020000000000000000000000000A8 +:10A8700000000000000000000000000000000000D8 +:10A88000000000000000000000000000A000100018 +:10A8900000001000000000000000000000000000A8 +:10A8A00000000000000000000000000000000000A8 +:10A8B0000000000000000000000000000000000098 +:10A8C0000000000000000000000000000000000088 +:10A8D000000000000000000000000000000800016F +:10A8E000000100010009000000080000000000084D +:10A8F0000000000000000008000000000000000848 +:10A900000000000000000000000000000000210026 +:10A91000000000000000000000000000000000082F +:10A920000000000000000000000000000000000027 +:10A930000000000000000000000000000000000017 +:10A94000000000000000A00000000000C0000000A7 +:10A95000000000000000000000000000080082006D +:10A9600000000000000000000000000800000000DF +:10A9700000000000000000000000000000000000D7 +:10A9800000000000000000000000000000000000C7 :10A9900000000000000000000000000000000000B7 -:10A9A0000000000000000020000000000000000087 +:10A9A00000000000000000000000000000000000A7 :10A9B0000000000000000000000000000000000097 :10A9C0000000000000000000000000000000000087 :10A9D00000000000000000000000000000008000F7 -:10A9E0000000004000400040004000000000000067 -:10A9F0000000000000000000000000000000000057 +:10A9E0000000000000000000000000000000000067 +:10A9F00000000090000000000000000000000000C7 :10AA00000000000000000000000000000000000046 :10AA10000000000000000000000000000000000036 -:10AA20000000000000000000000100000000000025 +:10AA20000000000000000000000000000000000026 :10AA30000000000000000000000000000000000016 -:10AA400000000000000000000000080000000000FE -:10AA5000000000000000000000000000000088006E -:10AA600008000000000000000000080000000011C5 -:10AA700000090000002100000008000000000000A4 -:10AA800000000000000000000000080000000000BE +:10AA400000000800000000000000000000000000FE +:10AA500000000000000000000000080000000000EE +:10AA60000800A00001000100000000000000000834 +:10AA700000000000000000000000000000000000D6 +:10AA800000000000000000000000000008000000BE :10AA900000000000000000000000000000000000B6 -:10AAA000000000000000080000000000000000009E +:10AAA00000000000000000000000000000000000A6 :10AAB0000000000000000000000000000000000096 -:10AAC00000000000008800000000000000000000FE +:10AAC0000000000000000000000000000000000086 :10AAD0000000000000000000000000000000000076 -:10AAE0000000809000880000218400000000000029 -:10AAF0001100000000000000000000000000000045 -:10AB0000080000000000000000000000000000003D +:10AAE000000880000000040004000088000000004E +:10AAF0000000000000000000000000000000000056 +:10AB00000000000800000000000000000000080035 :10AB10000000000000000000000000000000000035 -:10AB20000000000000000000000000000000000025 +:10AB2000000000080000000000000000000000001D :10AB30000000000000000000000000000000000015 :10AB40000000000000000000000000000000000005 :10AB500000000000000000000000000000000000F5 -:10AB6000000000000000000000C01040000410C001 +:10AB6000000000000000000001C0C002000488C016 :10AB700000000000000000000000000000000000D5 :10AB800000000000000000000000000000000000C5 :10AB900000000000000000000000000000000000B5 -:10ABA00000000000000000000000000090400000D5 +:10ABA00000000000000000000000000000000000A5 :10ABB0000000000000000000000000000000000095 :10ABC0000000000000000000000000000000000085 :10ABD0000000000000000000000000000000000075 -:10ABE000000000000000000000000980808000805C -:10ABF00080000000000000000000000000000000D5 +:10ABE0000000000000000000000002808080008063 +:10ABF0000000000000000000000000000000000055 :10AC00000000000000000000000000000000000044 :10AC10000000000000000000000000000000000034 -:10AC20000000000000000000000000001100800093 +:10AC20000000000000000000000000000000000024 :10AC30000000000000000000000000000000000014 :10AC40000000000000000000000000000000000004 :10AC500000000000000000000000000000000000F4 -:10AC600000000000000000000000000080008008DC -:10AC70008041808000000000000000000000000013 +:10AC60000000000000000000000000000000804123 +:10AC700080118000000000000000000000000000C3 :10AC800000000000000000000000000000000000C4 :10AC900000000000000000000000000000000000B4 :10ACA00000000000000000000000000000000000A4 -:10ACB0000080000000800000000000000000000094 +:10ACB0000000000000000000000000000000000094 :10ACC0000000000000000000000000000000000084 :10ACD0000000000000000000000000000000000074 -:10ACE0000000000000000000000000000000400024 -:10ACF00040030401C0080000000000000000000044 +:10ACE0000000000000000000000000000000C000A4 +:10ACF00002400400C040000000000000000000000E :10AD00000000000000000000000000000000000043 :10AD10000000000000000000000000000000000033 :10AD20000000000000000000000000000000000023 -:10AD300000000020000000C0000000000000000033 +:10AD30000000000000000000000000000000000013 :10AD40000000000000000000000000000000000003 :10AD500000000000000000000000000000000000F3 :10AD600000000000000000000000000000000000E3 -:10AD700088020082028401C000010000000000007F +:10AD700009020082C08401C0000100000000000040 :10AD800000000000000000000000000000000000C3 :10AD900000000000000000000000000000000000B3 :10ADA00000000000000000000000000000000000A3 -:10ADB0000000010000888800010000000000000081 +:10ADB0000000000000000000000000000000000093 :10ADC0000000000000000000000000000000000083 :10ADD0000000000000000000000000000000000073 :10ADE0000000000000000000000000000000000063 -:10ADF000000004800080008041800001000000000D +:10ADF0000000908000800080418000010000000081 :10AE00000000000000000000000000000000000042 :10AE10000000000000000000000000000000000032 :10AE20000000000000000000000000000000000022 -:10AE30000000000041000080000009000000000048 +:10AE30000000000000000000000000000000000012 :10AE40000000000000000000000000000000000002 :10AE500000000000000000000000000000000000F2 :10AE600000000000000000000000000000000000E2 -:10AE70000000000080108021808800000001000098 +:10AE70000000000080098010808800800001000030 :10AE800000000000000000000000000000000000C2 :10AE900000000000000000000000000000000000B2 :10AEA00000000000000000000000000000000000A2 -:10AEB0000000000000000011000000800000000001 +:10AEB0000000000000000000000000000000000092 :10AEC0000000000000000000000000000000000082 :10AED0000000000000000000000000000000000072 :10AEE0000000000000000000000000000000000062 -:10AEF000000000000000C00182008411C0020001B7 +:10AEF000000000000000C00082008441C004000186 :10AF00000000000000000000000000000000000041 :10AF10000000000000000000000000000000000031 :10AF20000000000000000000000000000000000021 -:10AF300000000000000000000001000000400000D0 +:10AF30000000000000000000000000000000000011 :10AF40000000000000000000000000000000000001 :10AF500000000000000000000000000000000000F1 :10AF600000000000000000000000000000000000E1 -:10AF7000000000000000000000000000400000424F +:10AF700000000000000000000000000080006042AF :10AF800000000000000000000000000000000000C1 :10AF900000000000000000000000000000000000B1 :10AFA00000000000000000000000000000000000A1 -:10AFB000000000000000000000000000000007008A -:10AFC00082210000000000000000000000000000DE +:10AFB0000000000000000000000000000000000091 +:10AFC0000000000000000000000000000000000081 :10AFD0000000000000000000000000000000000071 :10AFE0000000000000000000000000000000000061 :10AFF0000000000000000000000000000000000051 @@ -92953,7 +92953,7 @@ :10B010000000000000000000000000000000000030 :10B020000000000000000000000000000000000020 :10B030000000000000000000000000000000000010 -:10B040000000F0F000000000000000000000000020 +:10B040000000000000000000000000000000000000 :10B0500000000000000000000000000000000000F0 :10B0600000000000000000000000000000000000E0 :10B0700000000000000000000000000000000000D0 @@ -92961,7 +92961,7 @@ :10B0900000000000000000000000000000000000B0 :10B0A00000000000000000000000000000000000A0 :10B0B0000000000000000000000000000000000090 -:10B0C00000000000F0F000000000000000000000A0 +:10B0C0000000000000000000000000000000000080 :10B0D0000000000000000000000000000000000070 :10B0E0000000000000000000000000000000000060 :10B0F0000000000000000000000000000000430805 @@ -92977,7 +92977,7 @@ :10B1900000000000000000000000000000000000AF :10B1A000000000000000000000000000000000009F :10B1B000000000000000000000000000000000008F -:10B1C000000000FF0000FFFF000000000000000082 +:10B1C000000000000000000000000000000000007F :10B1D000000000000000000000000000000000006F :10B1E000000000000000000000000000000000005F :10B1F000000000000000000000000000000000004F @@ -92985,7 +92985,7 @@ :10B21000000000000000000000000000000000002E :10B22000000000000000000000000000000000001E :10B23000000000000000000000000000000000000E -:10B240000000000000FF00000000000000000000FF +:10B2400000000000000000000000000000000000FE :10B2500000000000000000000000000000000000EE :10B2600000000000000000000000000000000000DE :10B2700000000000000000000000000000000000CE @@ -92993,7 +92993,7 @@ :10B2900000000000000000000000000000000000AE :10B2A000000000000000000000000000000000009E :10B2B000000000000000000000000000000000008E -:10B2C00000000000000005002A00054000A8000062 +:10B2C000000000000000000000000000000000007E :10B2D000000000000000000000000000000000006E :10B2E000000000000000000000000000000000005E :10B2F000000000000000000000000000000000004E @@ -93026,177 +93026,177 @@ :10B4A000000000000000000000000000000000009C :10B4B000000000000000000000000000000000008C :10B4C000000000000000000000000000000000007C -:10B4D0000000000000008800200004002000880018 -:10B4E000880088008800040000002000840000001C -:10B4F0001000200084000400200000000400000070 -:10B5000020000000000020000000200020000000BB -:10B5100088008800200000030000000000002000D8 -:10B5200000008800400000000400000020008400AB -:10B5300000000000200020000000000000002000AB -:10B54000880020001000880020000000200020005B -:10B55000000000002000200020000000000000008B -:10B5600004000000000000002000000000000000B7 -:10B570000000200009002000000000000000000082 -:10B5800004001000000000000400000000000000A3 -:10B5900000000000040000000000000000000000A7 +:10B4D000000000000000000000000000000000006C +:10B4E000000000020002000000000000C000000098 +:10B4F000000000082008000000000000000000001C +:10B500000000000200020000000000002000000017 +:10B510000000000400200003000000000000000004 +:10B5200000000000000000000000000000002000FB +:10B5300000000000000810000000C0000002000031 +:10B5400000000000000200020000000008000000EF +:10B5500000000000000410A0000000000000000037 +:10B5600000000000000000000000000000000000DB +:10B5700000000000000000000000000000000000CB +:10B5800000000000000000000000000000000000BB +:10B5900000000000000100010000000000000000A9 :10B5A000000000000000000000000000000000009B -:10B5B000000000002000000000000000000000006B -:10B5C000000000000000000000000000000000007B -:10B5D000000000000000000000000000000000006B +:10B5B000000000000000000040000000000000004B +:10B5C000000000000000100000000000000000006B +:10B5D0000000000000001001201100000000000029 :10B5E000000000000000000000000000000000005B -:10B5F0000000000000000000000400000000000047 +:10B5F000000000000000000000000000000000004B :10B60000000000000000000000000000000000003A -:10B610000000000090000000000400030000000093 +:10B6100020000000000010804180000000000000B9 :10B62000000000000000000000000000000000001A -:10B630000000000000000000000000040000000006 +:10B6300000000000000000001000410000000000B9 :10B6400000000000000000000000000000000000FA -:10B650000000000000000000000000000084000066 +:10B650000000000000000000108011000000000049 :10B6600000000000000000000000000000000000DA -:10B6700000000000000000000000000100000000C9 +:10B6700000000000000000000000000000000000CA :10B6800000000000000000000000000000000000BA -:10B69000090000000000000000000085000000001C -:10B6A00040000084000000000000000000000000D6 -:10B6B0000000000000000000000000000001000089 -:10B6C000000000000000000000002000000000005A -:10B6D000000000000000000000000000000000006A -:10B6E000000000000000000000000000000000401A -:10B6F0000000000000000000000000000000002129 -:10B7000000000021000000000000000000000021F7 -:10B710000000000500000000000000000000000024 -:10B7200000210000002100000000000000000004D3 -:10B730000004000000040000000000000000000001 -:10B7400000000000000000000000000000000000F9 -:10B7500000000000000000000000000000000000E9 +:10B6900000000000000000008020A010000000005A +:10B6A000000000000000000000080000000000088A +:10B6B0000008000000000008000880009000000062 +:10B6C0000000000000000008000800000000000466 +:10B6D000000400000000008200088020C00000007C +:10B6E000000000000000000000000000000000005A +:10B6F000000000000000000000000000000000004A +:10B700000000000000000000000000000000000039 +:10B7100000000000000500000000002100210000E2 +:10B720000021000000210021000000000021002174 +:10B730000021000000210021000000210021402103 +:10B740000021002100210021000084218821002106 +:10B750000021002100210021000000210021002102 :10B7600000000000000000000000000000000000D9 -:10B7700000000000000000000000000000000000C9 +:10B7700000000000000000000000000000000020A9 :10B7800000000000000000000000000000000000B9 :10B7900000000000000000000000000000000000A9 -:10B7A0000000000000000200040000000000000093 +:10B7A0000000000000400000000000000000002039 :10B7B0000000000000000000000000000000000089 -:10B7C0000000000000000000000000000000000079 -:10B7D0000000000000000000000000000000000069 -:10B7E000000082000800080000008200000008003D -:10B7F000C000000000008200000000000000000007 -:10B80000000008000800820000000800C000C0001E -:10B81000000082000000A000000082000400000080 -:10B82000002000008200080082000000820000006A -:10B83000000000000000000000000000A000000068 -:10B840000000A00300000000000000000000000055 -:10B8500000000000000000020000000000000000E6 -:10B8600000000000000000000000000000000000D8 +:10B7C00000000000000000000082000000000000F7 +:10B7D0000040000000000000000800000000000021 +:10B7E0000000000000000000000000000000000059 +:10B7F0000000000000000000000000000000000049 +:10B80000A000000000000000000000000000000098 +:10B810000000000000000000080000000000000020 +:10B820000008000000000000000000000000000010 +:10B830000000000000000000000000000000000008 +:10B840000000A00400000000000000000000000054 +:10B8500000000000000000000000040000000000E4 +:10B860000000A00400000000000000000000000034 :10B8700000000000000000000000000000000000C8 :10B8800000000000000000000000000000000000B8 -:10B890000000080040000000000000000000000060 -:10B8A0000000000000000000000000000000000098 -:10B8B0000000000010000000000000000000000078 -:10B8C0000000000041000000000000000000000037 +:10B8900000000000000000000000000000000000A8 +:10B8A0000000000100000000000000000000000097 +:10B8B00000A00000000000000000000000000000E8 +:10B8C0000000110000010000000000000000000066 :10B8D0000000000000000000000000000000000068 -:10B8E000000000000000C000C000000000000000D8 -:10B8F0000800000000000000000000000000000040 -:10B90000040008000008000000000808080000000B -:10B91000A000000000000000000000000000000087 -:10B92000000000000021000020000040A0000000F6 -:10B930000000C00000000000040000000000000043 -:10B9400000000000000000000000000000040000F3 -:10B9500000000000000000000000000000000000E7 -:10B9600000000000000000000000000000000000D7 +:10B8E0000000000021010000000000000000000036 +:10B8F0000000000000000000000000000000000048 +:10B900000000000000000000000000000000000037 +:10B910000008000082004008000000000000000055 +:10B92000000800000000000000000003000000000C +:10B93000000800080000A000000000000000000057 +:10B9400000000000000000000000000300000000F4 +:10B95000000800080003820000400003000000000F +:10B96000002140000000000900000000000000006D :10B9700000000000000000000000000000000000C7 :10B9800000000000000000000000000000000000B7 :10B9900000000000000000000000000000000000A7 -:10B9A000090000C00000008400000000000000004A -:10B9B0000000000000000000000000000000000087 -:10B9C0000000000000000000000000000000000077 +:10B9A00000C00000000008C000000000000000000F +:10B9B0000000000000000000020000000000000085 +:10B9C0000000000000000000002000000000000057 :10B9D0000000000000000000000000000000000067 -:10B9E00000000000000000000084000000000000D3 -:10B9F0000000C00082008200000000000000000083 -:10BA0000000000000000000000030000C000000073 -:10BA10000000000008000800000000000000000016 -:10BA200000000000080008030000000008000000FB -:10BA300000000041A0000800000000000800000015 -:10BA400000000800000000000000000000000000EE -:10BA500000000000000000000000000000000000E6 -:10BA600000000000000000000000000000000000D6 +:10B9E0000000000000000000000000000000000057 +:10B9F0000000000000000000000000000000000047 +:10BA000084000000000000000000000000000000B2 +:10BA10000000000000080000000000000008000016 +:10BA20008441000800000003000500000000000041 +:10BA3000000082410000000800000000000800082B +:10BA400000000805000800080003000500000000D1 +:10BA500000000003000000080000000500000000D6 +:10BA600000000808000000080003000000000000BB :10BA700000000000000000000000000000000000C6 :10BA800000000000000000000000000000000000B6 :10BA900000000000000000000000000000000000A6 -:10BAA0000000090011000000090000000000000073 -:10BAB0000000000011000000000000004100000034 -:10BAC0000000050011000000000000000000000060 -:10BAD0000000000000000000000000000000000066 -:10BAE000000005000500000000000000000000004C +:10BAA00000000000110000000000098800000000F4 +:10BAB0000000000000000000000000000000000086 +:10BAC0000000000000000000000011000000000065 +:10BAD0000000000000000000000000004000000026 +:10BAE0000000000000000000000000000000000056 :10BAF0000000000000000000000000000000000046 -:10BB00000000000400000000000000000000000031 -:10BB10002000000000000000000000000000000005 -:10BB20000000000400000000000000000000000011 -:10BB30000000000000000000000000000000000005 -:10BB400000000000004000000000000000000000B5 -:10BB500000000000000000000000000000000000E5 -:10BB600000000000000000000000000000000000D5 +:10BB00000000000000000000000000000000000035 +:10BB1000000000000000000000000000010800001C +:10BB2000C1000008C0820000C00000010000000049 +:10BB300000000000000000000000000000000108FC +:10BB40000000C1000008C0820000C0000001000029 +:10BB500000000000000000000000000000000110D4 +:10BB60000000C1000008C0820000C0000001000009 :10BB700000000000000000000000000000000000C5 -:10BB80000305050000800000000000000000000028 -:10BB90000300800000000000000000000000000022 -:10BBA000000305000080000000000000000000000D -:10BBB0000000000000000000000000000000000085 -:10BBC0000000080305000000000000000000000065 -:10BBD0000000000000000000000000000000000065 -:10BBE0000000000000000000000000000000000055 -:10BBF0000000000002000000000000000000000043 -:10BC00000000020011000080800000000000000021 -:10BC100000400000210000000000000000000000C3 -:10BC20000000020011000080000000000000000081 -:10BC300000080000000005000000000000000000F7 -:10BC40000000000002002100008000000000000051 -:10BC500000000003000000000000000000000000E1 -:10BC600000000000000000000000000000000000D4 -:10BC700000000000000000000000000000000000C4 -:10BC8000000000004100402000400800400000008B -:10BC900000000000000000000000000000000000A4 -:10BCA000000000004100402000C0020040000000F1 -:10BCB0000000000000000000000000000000000084 -:10BCC0000000000000004100402000C008004000CB -:10BCD0000000000000000000000000000000000064 -:10BCE0000000000000000000000000000000000054 -:10BCF0000000000000000000000000000000000044 -:10BD000000000000000000C0000000000000000073 -:10BD100000000000000000000000C0000000000063 -:10BD200000000000000000C0000000000000000053 +:10BB800000000000000000000000000000000000B5 +:10BB9000000000000000000200000000001108800A +:10BBA0000002880000808080000080000003000008 +:10BBB0000000000000000000000409000000004137 +:10BBC0000880000288000080808000008000000360 +:10BBD000000000000000000000090000000000114B +:10BBE0000880000288000080808000008000000340 +:10BBF0000000000000000000000000000000000045 +:10BC00000000000000000000000000000000000034 +:10BC10000000000009000000000000000400000017 +:10BC2000020002000300000003800000000000800A +:10BC30008003000000000900000000000000040074 +:10BC400000000200020009000000030000000000E4 +:10BC500000808010000009000000000000000400C7 +:10BC60000000020002008900000003000000000044 +:10BC700000808010000000000000000000000000B4 +:10BC800000000000000000000000000000000000B4 +:10BC900000000000000000000000000000000100A3 +:10BCA0000000000090001188000001100200000058 +:10BCB00000C0820000000000000000000000000042 +:10BCC0000100000000009000108800000100020048 +:10BCD000000000C082000000000000000000000022 +:10BCE0000100000000009000108800000100020028 +:10BCF000000000828201000000000000000000003F +:10BD00000000000000000000000000000000000033 +:10BD10000000000000000000000000000000000023 +:10BD200000000001200000400000C10001000000F0 :10BD30000000000000000000000000000000000003 -:10BD400000000000000000000004000000000000EF +:10BD4000000000000001200000400000C1000000D1 :10BD500000000000000000000000000000000000E3 -:10BD600000000000000000000000000000000000D3 +:10BD6000000000000001200000400000C1000000B1 :10BD700000000000000000000000000000000000C3 :10BD800000000000000000000000000000000000B3 -:10BD90000000000000000000000000008000000023 -:10BDA0000000000000000000000000000000000093 -:10BDB0000000000000000000000000000000000083 -:10BDC00000000000000000000000008000000000F3 -:10BDD0000000000000000000000000000000000063 -:10BDE0000000000000000000000000000000000053 -:10BDF000000000000000000000000002800000C100 -:10BE000000000000000000000000004100000002EF -:10BE1000000000000000000000000000800000C1E1 -:10BE200000000000000000000000004100000009C8 -:10BE3000000000000000000000000000000080057D -:10BE4000008300000000000000000000004100002E -:10BE500000020000000000000000000000000000E0 -:10BE600000000000000000000000000000000000D2 -:10BE700000000000000000000000000000002000A2 -:10BE8000004000000000000000000000000340002F -:10BE90000000000000000000000000000000400062 -:10BEA00000C100000000000000000000000340008E -:10BEB0000000000000000000000000000000000082 -:10BEC00004000083000000000000000000000009E2 -:10BED0000800000100000000000000000000000059 -:10BEE0000000000000000000000000000000000052 -:10BEF0000000000000000000000000000000000042 -:10BF000000000000000000000000000000008100B0 -:10BF100000E00000480000000000000000000000F9 -:10BF2000000000000011000000000000000081007F -:10BF300000E00000481300000000000000000000C6 +:10BD900000000000000000000000000000000000A3 +:10BDA00000000000000504100080000041000800B1 +:10BDB0000000000000410000000000000000000042 +:10BDC0000000000000000005041000800000410099 +:10BDD0000000000000000041000000000000000022 +:10BDE0000000000000000005041000800000410079 +:10BDF0000000000000000041000000000000000002 +:10BE00000000000000000000000000000000000032 +:10BE10000000000000000000000000008000009111 +:10BE20000000000000099000000000C18000000236 +:10BE30000000004100000000050800000000800034 +:10BE400000910000000000099000000000C1000007 +:10BE500000020000004100000000201000008000EF +:10BE600000910000000000001000000000410000F0 +:10BE7000000200000041000000000341000000003B +:10BE800000000000000000000000000000000000B2 +:10BE9000000000000000000000000000000008009A +:10BEA0000010000000001000820000000009820065 +:10BEB0000000000000010000000000090000000078 +:10BEC00008000010000000000200820000000009CD +:10BED0000200000000000001000000000009000056 +:10BEE0000800001000000000020090000000001197 +:10BEF00002000000000000010000000000910000AE +:10BF00000000000000000000000000000000000031 +:10BF10000000000000000000000000000000000021 +:10BF2000000000000000000000000000000081127E +:10BF300000E04000484200000000000048420000CD :10BF400000000000000000000000000000000000F1 -:10BF5000810000E000004813000000000000000025 +:10BF5000811200E04000484200000000000048421A :10BF600000000000000000000000000000000000D1 -:10BF700000000000000000000000000000000000C1 +:10BF7000811200E0400048420000000000004882BA :10BF800000000000000000000000000000000000B1 :10BF900000000000000000000000000000000000A1 :10BFA0000000000000000000000000000000000091 @@ -93213,449 +93213,449 @@ :10C0500000000000000000000000000000000000E0 :10C0600000000000000000000000000000000000D0 :10C0700000000000000000000000000000000000C0 -:10C0800000000000747B00000000000000000000C1 +:10C0800000000000000000000000000000000000B0 :10C0900000000000000000000000000000000000A0 -:10C0A0000000DE2E747B0000000000000000000095 +:10C0A00000000000757B00000000000000000000A0 :10C0B0000000000000000000000000000000000080 -:10C0C0000000DE2E0000747B000000000000000075 +:10C0C0000000DEAE0000757B0000000000000000F4 :10C0D0000000000000000000000000000000000060 -:10C0E00000000000DE2E0000000000000000000044 +:10C0E00000000000DEAE757B0000000000000000D4 :10C0F0000000000000000000000000000000000040 -:10C100000000000000006156034000000000000035 -:10C110000230A0000000000000000C400000000001 -:10C12000000002C06A866156034000000000000063 +:10C1000000000000DEAE00000000000000000000A3 +:10C11000000000000000000000000000000000001F +:10C120000000000000006126034000000000000045 :10C130000230A0000000000000000C4000000000E1 -:10C14000000002C06A860000615603400000000043 +:10C14000000002C064860000612603400000000079 :10C1500000000230A0000000000000000C400000C1 -:10C160000000000002C06A8600000000000000001D -:10C1700000000000000000000000000000000000BF -:10C18000000000000000000020002000000020004F -:10C1900000008800000020002000000000002000B7 -:10C1A0002000880020000000200020000000000087 -:10C1B00088002000000020000000000000000000B7 -:10C1C0002000200000000000000388002000C000C4 -:10C1D000C0002000000000000000880000000000F7 -:10C1E0008400880000000000000020002000000003 -:10C1F00084002000880000001000200000000000E3 -:10C200000000200000000000880000000000200066 -:10C2100000000000000000004000000000000000DE -:10C22000000400000000000000000000000000000A -:10C2300000000000000000000000000000000000FE -:10C2400000000500000000000040000000000000A9 -:10C25000000000000000000000004000000000009E -:10C2600000000000000000000000000000000000CE -:10C2700000000000000000000000000000000000BE -:10C28000000000004100004000000000000000002D -:10C29000000002000000000000000200000000009A +:10C160000000000002C06486612603400000000059 +:10C1700000000230A0000000000000000C400000A1 +:10C180000000000002C06486000000000000020001 +:10C19000000000000000020000000000000000009D +:10C1A000000000000000000000000000000020006F +:10C1B000000000000000020000000000000000007D +:10C1C00040004000000000000000000000000000EF +:10C1D000200000000000000000000000000000003F +:10C1E0000000010000000100040000000000000049 +:10C1F000200004000400040004000000000000000F +:10C20000000000000000000000000000000000002E +:10C21000000000000000000000040000000000001A +:10C22000000000000000000000000000000000000E +:10C2300004040000000000000004000000000000F2 +:10C2400000008000800000000000000000000000EE +:10C2500000000000000000000000000000000000DE +:10C260000000000404000000040080000000000042 +:10C2700000000000800080008000800000000000BE +:10C2800000000000000000000000000000000000AE +:10C29000000000000000000000000000000000009E :10C2A000000000000000000000000000000000008E -:10C2B000000000000000000008000800000000006E +:10C2B000000000000000000000000000000000007E :10C2C000000000000000000000000000000000006E -:10C2D000000000000000010000000000000002005B -:10C2E0000200020002000000000000000000000048 -:10C2F00040004000000000000000000000000100BD +:10C2D000000000000000000000000000000000005E +:10C2E000000000000000000000000000000000004E +:10C2F000000000000000000000000000000000003E :10C30000000000000000000000000000000000002D -:10C310000000000000000000000000000008000015 +:10C31000000000000000000000000000000000001D :10C32000000000000000000000000000000000000D -:10C33000000000002000000000000000004000009D +:10C3300000000000000000000000000020000000DD :10C3400000000000000000000000000000000000ED -:10C3500000000000000000001000000000000000CD -:10C3600080008000800080000000000000000000CD +:10C3500000000000000000000000000000000000DD +:10C3600000080008000800080008000000000000A5 :10C3700000000000000000000000000000000000BD -:10C3800002000000000000000900000000000000A2 +:10C38000000800080008021000080000000000007B :10C39000000000000000000000000000000000009D :10C3A000000000000000000000000000000000008D :10C3B000000000000000000000000000000000007D -:10C3C000000000000000000000000000000000006D -:10C3D000000000000000000000000000000001005C -:10C3E000000000000000000000000000000000004D -:10C3F000000000000000000000000011000001002B -:10C40000010000000000000000000000000000002B -:10C410000000000000000000000000000300000019 -:10C42000000000000000000000000000000000000C -:10C4300000000000000000000000000008000000F4 -:10C4400000000000000000000000000000000000EC -:10C450000000000000000000000000840000080050 -:10C4600020000000000000000000000000000000AC -:10C4700000000000000000000000000000000000BC -:10C48000200020000000000000000000000000006C -:10C490000000000000000000000000000000080094 -:10C4A000080000000000000000000000100008006C -:10C4B00001000880000000000000000010000000E3 -:10C4C000010000800200000000000900820000005E -:10C4D000080000000000020000000000C10082000F -:10C4E00000008200080000000000000001000800B9 -:10C4F0000800838082000000000008000100110095 -:10C50000A1000100C0000000000000000900008040 -:10C510000100858000800000000000000000000095 -:10C52000000000000000000000000000000080008B -:10C530000000200000040000000000000000800057 -:10C540000300200000048000000000000400000040 -:10C550000000000000000000800000000000040057 -:10C5600000000000000000001000000000000400B7 -:10C57000000000000810000010001000100004006F -:10C580008400040004000000008200000000040099 -:10C59000000420000404002000000000000000004F -:10C5A00000000000000000000000000000009000FB -:10C5B00000000000000000000000000000009000EB -:10C5C000000000000000000000000000002000004B -:10C5D000A000000000000000000008000000002093 -:10C5E0000000000000002000C0000011000000005A -:10C5F0002000000000000000820002000000002077 -:10C60000000082002000880010009000C0009020F0 -:10C6100000000020000020000004000000000000D6 +:10C3C000000000000000000000210000000000004C +:10C3D00000000000004100210000000900000000F2 +:10C3E000000000000000002100000000010000002B +:10C3F00000002000010020212000000000000000BB +:10C40000000000000000002100000000000000000B +:10C41000000000000000000000000000000000001C +:10C420000800000000000000000000000000000004 +:10C4300000000000000000001100000000000000EB +:10C440001000000000A000A000080008000000008C +:10C4500000000000000000000000110000000000CB +:10C46000000000000000000000A000080508040013 +:10C470000000000080002000808491000000000087 +:10C48000000000000000000000A000100084000078 +:10C490002000080000000000000000000000000074 +:10C4A000000000000000000000000000000000008C +:10C4B000000000000000000000000000000000007C +:10C4C00000000000000000000000000000800000EC +:10C4D00000040004000000000000C000A000C00034 +:10C4E000C000040000000000000082008200210063 +:10C4F00020002000200000000000000000000000DC +:10C50000000000000000000000000000000000002B +:10C51000000000000000000000000000000000001B +:10C52000000000000000000000000000000000000B +:10C5300000000000000000000000000000000000FB +:10C5400000000000000000000000000000000004E7 +:10C5500000000001000100000000000000000000D9 +:10C5600000000000000000000000000000000000CB +:10C5700090008000800080000000000000000000AB +:10C5800000000000000000000000000000000000AB +:10C59000000000000000000000000000000000009B +:10C5A000000000000000000000000000000000008B +:10C5B000000000000000000000000000000000007B +:10C5C000000000000000000000000000000000006B +:10C5D000000020000000100000000000A000A000EB +:10C5E0000000000000000000080000000000000043 +:10C5F000000000000000000020000000000000001B +:10C6000000000000000000000000000000400000EA +:10C61000000000000000000090000000000000008A :10C62000000000000000000000000000000000000A :10C6300000000000000000000000000000000000FA -:10C6400000000000000000000000000000000001E9 -:10C65000000000000000000040000000000000009A -:10C6600000010000000000000000000000000000C9 -:10C67000000000000000000000000000800000003A -:10C680000001000000000000000080000000000029 -:10C690000001000000010000000000010000000097 +:10C64000000000A000000000000000080008000832 +:10C6500011000090000000008000000000000000B9 +:10C66000000000000088000000000000000000083A +:10C6700000081100000000000000000000000000A1 +:10C6800000002000008809002000000000000008D1 +:10C690000008110000080000040000200000000055 :10C6A000000000000000000000000000000000008A -:10C6B0000000000000000100000000000000000079 -:10C6C0000000000000000000000000000800000062 -:10C6D000000000000000000000000000000000005A -:10C6E000000000090000010000000000000400003C -:10C6F0000009000000000000000000000000000031 -:10C700000800000000000000000000000080C000E1 -:10C710000009000900000080010001000100000084 +:10C6B000000000000000000000000000000000007A +:10C6C000000000000000000000000000000000006A +:10C6D00000000000000011001000400000000000F9 +:10C6E0000000000000000000000000000400000046 +:10C6F00000000000A000080008000000000000008A +:10C7000000000080000000000000000300000000A6 +:10C710000000000000000000000000000000000019 :10C720000000000000000000000000000000000009 -:10C7300000000000000000002000000000000000D9 +:10C7300000000000000000000000000000000000F9 :10C7400000000000000000000000000000000000E9 -:10C7500000000088000000001100008411000000AB -:10C76000000000000000000002000082050000013F -:10C77000000041000000050000A000004100000092 -:10C780000000050005000800000000000000002077 -:10C7900000000082030000000004040020002000CC +:10C750000000000000000000A00091008000000028 +:10C7600000000000000000000000000000000000C9 +:10C770000000000041000000000000000000000078 +:10C780000000000000100000050000001100000083 +:10C790000000000000000000000000000000000099 :10C7A0000000000000000000000000000000000089 -:10C7B0000000000000000000010000000000000078 -:10C7C0000000000000000000010000000000000068 -:10C7D00000009000000000000000000000000000C9 -:10C7E00000000000900000000000010000000000B8 -:10C7F00000000000009000000000000000000000A9 -:10C800000000000090000002000001000000000095 -:10C810000000000090000000000200000000000086 +:10C7B0000000000000000000000000000000000079 +:10C7C0000000000000000000000000000000000069 +:10C7D0000000000000000000000100000000000157 +:10C7E0000000000000000000000000000000000049 +:10C7F000000000000000000000000000A000000099 +:10C800000000000000000000000000000000000028 +:10C810000000000000000000000000000000000018 :10C820000000000000000000000000000000000008 -:10C8300000000000000000000000110021000000C6 -:10C8400000000000000000000000110021000000B6 -:10C850000000110080000000000000000000000047 -:10C860000000000011008000000000001100210005 -:10C870000000000000000080000000000000000038 -:10C880000000000011008000008000001100210065 -:10C890000000000011008000000000800000000087 +:10C8300000000000000000000000000000000000F8 +:10C8400000000000000000000000000000000000E8 +:10C850000000000000000000000000411010100067 +:10C8600000040000000000000000000000000000C4 +:10C8700000000000000000000000000000000000B8 +:10C880001000000000000000030000000000000095 +:10C890000000000000000000000000000000000098 :10C8A0000000000000000000000000000000000088 -:10C8B0000000000000000000000000000008090067 -:10C8C000000300000000000000000000004109001B -:10C8D00000030000000000800000000000000000D5 -:10C8E0000000000000000000008000000000004187 -:10C8F000090000200080000000800000000000000F -:10C9000000000000000000000080000000800041E6 -:10C910000900000900000000008000000080000302 -:10C9200000800020008000000000000000000000E7 -:10C9300000000000000000000000000000000001F6 -:10C9400001000000000000000000000000000001E5 -:10C950000100000000000000002000000082000034 -:10C960000000000000000000000000200000004067 -:10C970000001010000010088000000C0000000402C -:10C98000000000000000000000000020000000C0C7 -:10C99000000101400000004000000020000000C035 -:10C9A000000000C0000000020000000000000000C5 +:10C8B0000000000000000000000000000000000078 +:10C8C0000000000000000000000000000000000068 +:10C8D0000000000000000000000000000000000058 +:10C8E000000500A0000000000000000000000000A3 +:10C8F00000000000000000000000000000000040F8 +:10C9000008004000418000050000004000000000D9 +:10C910000000000000000000000000000000000017 +:10C920000000000000000000000000000000000007 +:10C9300000000000000000000000000000000000F7 +:10C9400000000000000000000000000000000000E7 +:10C9500000000000000000000000000000000000D7 +:10C96000000000010089000000000000000000003D +:10C9700000000000000000000000000000000000B7 +:10C9800000000040000001C00000000000000000A6 +:10C990000000004000000040000000000000000017 +:10C9A0000000000000000000000000000000000087 :10C9B0000000000000000000000000000000000077 -:10C9C00000008800000001000000000000000000DE -:10C9D00000008800000000000100008888000000BE -:10C9E0000000000000000000000001000088880036 -:10C9F0000000000008000000010000000000A090FE -:10CA00000000000000000000000001000088880015 -:10CA100001000000080040000000010002888800BA -:10CA20000100000040004000010000000000000084 +:10C9C0000000000000000000000000000000000067 +:10C9D0000000000000000000000000000000000057 +:10C9E0000001000100000001000000000000000044 +:10C9F0000000000000000000000000000000000037 +:10CA0000000000004000A0000100000004008200BF +:10CA100000000000000040000000000000000000D6 +:10CA20000000000000000000000000000000000006 :10CA300000000000000000000000000000000000F6 -:10CA400000000000000000000300000000000000E3 -:10CA500000000000000000004000410000800000D5 -:10CA60000000000000000000000000004100008005 -:10CA700000000000000080000000410008000000ED -:10CA80000080000000000000000000004100008065 -:10CA9000000009004000800000004100410080804B -:10CAA00000000900050000008000410000000000B7 +:10CA400000000000000000000000000000000000E6 +:10CA500000000000000000000000000000000000D6 +:10CA60000000004000044100004100000000000000 +:10CA700000000000000000000000000000000000B6 +:10CA8000000000004000000080000800000080005E +:10CA90000000400040000000000000000000000016 +:10CAA0000000000000000000000000000000000086 :10CAB0000000000000000000000000000000000076 -:10CAC0000000000000000040000000000000000026 -:10CAD0000000000000000011000000000011000034 -:10CAE00000800000000000000000000000000011B5 -:10CAF0000000008000000000401100000000001154 -:10CB00008000000000000000000000000000001194 -:10CB1000000000800000000810110000000000115B -:10CB20000000008000000003001100000000000071 +:10CAC0000000000000000000000000000000000066 +:10CAD0000000000000000000000000000000000056 +:10CAE00000000000410400000400030000000000FA +:10CAF0000000000000000000000000000000000036 +:10CB00000000000000000000000800000005000018 +:10CB100000000000000000100021000000000000E4 +:10CB20000000000000000000000000000000000005 :10CB300000000000000000000000000000000000F5 :10CB400000000000000000000000000000000000E5 -:10CB500000000000000000000001000000000001D3 -:10CB60000000004000000000000000000000000085 -:10CB70000001000000400000000000010000000073 -:10CB800000012000008800000000000000000000FC -:10CB90000001000000400000000101010000000051 -:10CBA0000001000000400000000000010000000043 +:10CB500000000000000000000000000000000000D5 +:10CB600000000000000001010000010000000000C2 +:10CB700000000000000000000000000000000000B5 +:10CB800000000000000000000000000100000000A4 +:10CB90000000000000000000000100000000000094 +:10CBA0000000000000000000000000000000000085 :10CBB0000000000000000000000000000000000075 -:10CBC0000000000000000000000000E00000000085 -:10CBD0000000000000000000000000E000008100F4 -:10CBE00000000000070082000000000000000000BC -:10CBF00000000000000007008200000000E00000CC -:10CC000081410000000007006000000000000000FB -:10CC100000000000000007008221008100E0070002 -:10CC200081000000000007008221418202E007002D -:10CC300081820000000000000000000000000000F1 +:10CBC0000000000000000000000000000000000065 +:10CBD0000000000000000000000000000000000055 +:10CBE0000000000000000000000000010000000044 +:10CBF0000000000000000000000000000000000035 +:10CC000000000000000000000000000000421200D0 +:10CC1000002100000044000000000000000080002F +:10CC20000000000000000000000000000000000004 +:10CC300000000000000000000000000000000000F4 :10CC400000000000000000000000000000000000E4 :10CC500000000000000000000000000000000000D4 -:10CC6000000000000000F0F00000000000000000E4 -:10CC70000000000000000000F0F0000000000000D4 -:10CC80000000000000FF000000FF000000000000A6 -:10CC90000000000000000000F0F0000000000000B4 -:10CCA0000000000000000000F0F0000000000000A4 +:10CC600000000000000000000000000000000000C4 +:10CC700000000000000000000000000000000000B4 +:10CC800000000000000000000000000000000000A4 +:10CC90000000000000000000000000000000000094 +:10CCA0000000000000000000000000000000000084 :10CCB0000000000000000000000000000000000074 :10CCC0000000000000000000000000000000000064 :10CCD0000000000000000000000000000000000054 -:10CCE0000000000000000000F0F000000000000064 -:10CCF00000000000000000000000F0F00000000054 -:10CD000000000000000000FF000000FF0000000025 -:10CD100000000000000000000000F0F00000000033 -:10CD200000000000000000000000F0F00000000023 +:10CCE0000000000000000000000000000000000044 +:10CCF0000000000000000000000000000000000034 +:10CD00000000000000000000000000000000000023 +:10CD10000000000000000000000000000000000013 +:10CD20000000000000000000000000000000000003 :10CD300000000000000000000000000000000000F3 :10CD400000000000000000000000000000000000E3 :10CD500000000000000000000000000000000000D3 -:10CD6000000000000000000000000000FFFF0000C5 -:10CD70000000000000000000000000000000FFFFB5 -:10CD800000000000000000000000FF000000FFFFA6 -:10CD9000000000000000000000000F0F0000FFFF77 -:10CDA000000000000000000000003C3C0000FFFF0D +:10CD600000000000000000000000000000000000C3 +:10CD700000000000000000000000000000000000B3 +:10CD800000000000000000000000000000000000A3 +:10CD90000000000000000000000000000000000093 +:10CDA0000000000000000000000000000000000083 :10CDB0000000000000000000000000000000000073 :10CDC0000000000000000000000000000000000063 :10CDD0000000000000000000000000000000000053 :10CDE0000000000000000000000000000000000043 :10CDF0000000000000000000000000000000000033 -:10CE0000000000000000000000000000FF00000023 -:10CE10000000000000000000000000000F0F0000F4 -:10CE20000000000000000000000000003C3C00008A +:10CE00000000000000000000000000000000000022 +:10CE10000000000000000000000000000000000012 +:10CE20000000000000000000000000000000000002 :10CE300000000000000000000000000000000000F2 :10CE400000000000000000000000000000000000E2 -:10CE5000000000600006000C000000000000000060 -:10CE6000000000600006000C000005000A000540FC -:10CE700000A80000000000000000000005000A00FB -:10CE8000054000A800400006001C000015002A0014 -:10CE9000054000A8000000000000000005002A0076 -:10CEA000054000A805580A26050C05A005002A0023 -:10CEB000054000A8057D0A26850F25A0000000007A +:10CE500000000000000000000000000000000000D2 +:10CE600000000000000000000000000000000000C2 +:10CE70000000006100010009000000000000000047 +:10CE800000000000000000000000000000000000A2 +:10CE90000000000005610A0F050500A00061000701 +:10CEA000000D000005000A08050000A000000000B9 +:10CEB0000000000000000000000000000000000072 :10CEC0000000000000000000000000000000000062 -:10CED0000000000000000000FFFF00000000000054 -:10CEE0000000000000000000FFFF00000000000044 -:10CEF0000000000000000000000000000000000032 -:10CF00000000000000000000FF00FFFF0000000024 +:10CED0000000000000000000000000000000000052 +:10CEE0000000000000000000000000000000000042 +:10CEF000000000000C0C3C3CF0F03C3C000000004A +:10CF00000000000000000000000000000000000021 :10CF10000000000000000000000000000000000011 -:10CF20000000000000000000FF00FFFF0000000004 +:10CF20000000000000000000000000000000000001 :10CF300000000000000000000000000000000000F1 :10CF400000000000000000000000000000000000E1 :10CF500000000000000000000000000000000000D1 :10CF600000000000000000000000000000000000C1 -:10CF700000000000000000000000000000000000B1 -:10CF800000000000000000000000FF0000000000A2 +:10CF70000000000000000C0C000000000000000099 +:10CF800000000000000000000000000000000000A1 :10CF90000000000000000000000000000000000091 -:10CFA00000000000000000000000FF000000000082 +:10CFA0000000000000000000000000000000000081 :10CFB0000000000000000000000000000000000071 :10CFC0000000000000000000000000000000000061 -:10CFD000000000000000000000000000F0F0000071 -:10CFE000000000000000000000000000F0F0000061 -:10CFF0000000000000000000000000000000000031 -:10D000000000000000000000000000000000F0F040 -:10D010000000000000000000000000000000000010 -:10D020000000000000000000000000000000F0F020 +:10CFD0000000000000000000000000000000000051 +:10CFE0000000000000000000000000000000000041 +:10CFF00000000000000000003C00FF0000000000F6 +:10D000000000000000000000000000000000000020 +:10D01000000000000000000000000000000000F020 +:10D02000A0A00000000000000000000000000000C0 :10D0300000000000000000000000000000000000F0 :10D0400000000000000000000000000000000000E0 -:10D050000000000000000000000000000000F0F0F0 -:10D060000000000000000000000000000000F0F0E0 -:10D0700000000000000000000000000000000000B0 +:10D0500000000000000000000000000000000000D0 +:10D0600000000000000000000000000000000000C0 +:10D07000000000000000000000003C000000000074 :10D0800000000000000000000000000000000000A0 -:10D09000F0F00000000000000000000000000000B0 -:10D0A0000000000000000000000000000000000080 -:10D0B000F0F0000000000000000000000000000090 -:10D0C00000000000200020002000200020002000A0 -:10D0D0002000200020000000200020002000200070 -:10D0E0002000200088022000000000002000200016 -:10D0F000200020002000010004002000200020006B -:10D1000021002100000320002000880000002000F2 -:10D110002000200020002000000200008800840081 -:10D12000200020002000000000000000000020007F -:10D1300000000000000020000000000000002000AF -:10D14000200020002000000000000000000000007F +:10D090000000000000000000000000000000000090 +:10D0A00000F0A0A000000000000000000000000050 +:10D0B0000000000000000000000000000000000070 +:10D0C0000000000000000000000020000000000040 +:10D0D0000000000000000000000000000000000050 +:10D0E0000000000000000000000020000000000020 +:10D0F0000000000000000000000000000000000030 +:10D1000000000000000000000000000020000000FF +:10D11000000000000000000000050000000000000A +:10D12000000000040000400000000000200000009B +:10D1300000000000000000000000000000000000EF +:10D1400000000000000200000000000000000000DD :10D1500000000000000000000000000000000000CF :10D1600000000000000000000000000000000000BF -:10D17000000000000000000002008000000000002D -:10D18000000010000200000000000000000000008D -:10D19000000000000000000000000000000000008F -:10D1A000000000000000000000000000000000007F -:10D1B000000000000000000000000000090009005D +:10D1700000000002000000000000000000000000AD +:10D18000000000000002000000000000000000009D +:10D19000000000000000100000000000000000007F +:10D1A00000000000000200008000000000000000FD +:10D1B000000000000002000000000000000000006D :10D1C000000000000000000000000000000000005F -:10D1D000010000000000001000000000000000003E -:10D1E000020000000000000002000000000000003B -:10D1F000000000000000001001000100000001001C -:10D20000010001000100010000000000000000001A -:10D2100004000000000000000010000000000000FA -:10D2200000000000000000000100200000000000DD -:10D2300000000000000000000000000000000000EE -:10D2400000000000000000000000000000000000DE -:10D2500000001000000000000000000000000000BE -:10D2600000008000000000000000A000000000009E -:10D270000000000000000000000004000484000022 -:10D280000400020002000400200000000000000072 -:10D29000000080000000000000000000000000000E -:10D2A000000000000000000000002000000000005E -:10D2B000200000000000000000000000000000004E -:10D2C000000000000000000000000000000000005E -:10D2D0000000000000000005000000000000000049 +:10D1D000000000000000000000000000000000004F +:10D1E000000000000000000000000000000000003F +:10D1F000000000000000000000000000000000002F +:10D20000000000000000820000000000000000009C +:10D21000000000000000000004000000000000000A +:10D2200000000000000000008200000200800000FA +:10D2300000000000000000000400000000000000EA +:10D24000000000000000000082000000000000005C +:10D2500000000000000000000000000000000000CE +:10D2600000000000000000000000000000000000BE +:10D2700000000000000000000000000000000000AE +:10D28000000000000000000000000000000000009E +:10D290000000000800000000000000000000000086 +:10D2A0000000000000000000000000080001000273 +:10D2B00000000008000000840000000000000000E2 +:10D2C0000000000000000000000000080000000056 +:10D2D000000000000000000000000000000000004E :10D2E000000000000000000000000000000000003E -:10D2F000000000000000000000000000000000002E -:10D3000000000000000000000100400000000000DC -:10D3100000210100000000000000000001000400E6 -:10D3200004A182000400000301000080000000004E -:10D3300000210000200000000005000000000000A7 -:10D3400000050000000000000000000000000000D8 +:10D2F000000000000000000000000000900000009E +:10D30000000000000000000000000000000090008D +:10D31000000000000000000000000000000000020B +:10D3200000000000000000000000000040000500B8 +:10D3300000910080000000000000000000000000DC +:10D340000000000000000000C040000000000000DD :10D3500000000000000000000000000000000000CD :10D3600000000000000000000000000000000000BD :10D3700000000000000000000000000000000000AD -:10D38000000000000000000000002000410000003C -:10D39000000000002000000000000000000020004D -:10D3A0000000000400000000000020004004000015 -:10D3B00000000000000080000000000000000000ED -:10D3C00041C000002100000000000000000000003B -:10D3D00000000000000000000000040005000480C0 -:10D3E000A00000000000000000000000000001009C -:10D3F00000000000C000010000000000A0000000CC -:10D400000000C00083000000010001000100118045 -:10D410000000C00000000400C10001000000A100E5 -:10D42000C0008200000090001000200000001000EA -:10D43000820082000000C100C000000000008200E5 -:10D4400008000002000220020100A000A00082806B -:10D45000A080000000000000000000008000A0008C -:10D460008004000000000000000000000300030032 -:10D4700004000000000000000400000000000000A4 -:10D480000000000000000200000020000400020074 -:10D4900084040000000000000000200020000000C4 -:10D4A00010000300000000000000210090000000B8 -:10D4B000000010000000000020000000000000003C -:10D4C00000000000000000008000200000000000BC -:10D4D00000040004000000000000900000000000B4 -:10D4E000000010000000000000000000000000002C -:10D4F0000020820000000000002008000000000062 -:10D50000C0000000020000000000900004001000B5 -:10D510000000A0000002A000100002009000000027 -:10D52000200000009000010000000800000008003A -:10D53000A0008200A01108002000080010080000D0 -:10D54000A000200082002000000090000000A00049 -:10D55000200090009000000000000000000000008B -:10D5600000000000800000840000000000C00000F7 -:10D5700000000085000000000000000100C0000065 -:10D580000000008400008000000000000084800093 -:10D590008000000000000000000080000000008407 -:10D5A00000000000000000002000000000000084D7 -:10D5B0000000000000000000000080000000008467 -:10D5C00003C00884000000000000000000C00084C8 -:10D5D000000080000088000400000000000000003F -:10D5E000040000000000000000000008000000002F -:10D5F0000009000000000000000000000802000018 -:10D60000000000000000000000000000080202808E -:10D610001000008500000002000000802021C000F2 -:10D6200010080121C18589001002100004210009A1 -:10D630000804A000C02100002002000408098200A4 -:10D640000000880000050800000220002005880076 -:10D65000080000040021002000020000000000007B -:10D66000000080000000000000000000000000003A +:10D38000000000000000000000000000000000009D +:10D3900000A00008000000000000000000000000E5 +:10D3A0000400000000000000000000000000000079 +:10D3B0001000000200080000000000000040000013 +:10D3C000000000A000000000210003000300030093 +:10D3D000000000000000000000000000000000004D +:10D3E000000000000000000000000000000000003D +:10D3F000000000000000000000000000000000002D +:10D4000000410000000000000000000900000000D2 +:10D41000000000000000000000000000000000000C +:10D4200000000000900000008400000000000000E8 +:10D43000000021000002002000000000A009A00060 +:10D44000A00000000000000000000000000000003C +:10D4500000000000000000000000000000000000CC +:10D4600000000000000000000000000000000000BC +:10D4700000000000000000000000000000000000AC +:10D48000000000000000000000000000000000009C +:10D49000000000000000000000000000000000008C +:10D4A000000000000000000000000000000000007C +:10D4B00000000000900000010001000000080000D2 +:10D4C000000000000000000000000000000000005C +:10D4D000000000000000000000000000000000004C +:10D4E000000000000000000000000000000000003C +:10D4F000000000000000000000000000000000002C +:10D50000000000000000000000000000000000001B +:10D51000000000000000000000000000000000000B +:10D5200000000000000000000000000000000000FB +:10D530000000080090000000020000000000000849 +:10D5400000000000000000000000040000000000D7 +:10D5500000000000000000000000000000000000CB +:10D5600000000000000000000000000000000000BB +:10D5700000000000000000000000000000080000A3 +:10D5800000000000000000000000000000842000F7 +:10D590000000000000000000000000000000000883 +:10D5A00000000008000000000000000000000084EF +:10D5B0000084000080880000000080000000000857 +:10D5C000210000A000000000000000000000008416 +:10D5D0000000000000000004000000000000000047 +:10D5E000000000000000000000000000000000003B +:10D5F000000000000000000000000000000000002B +:10D60000000000000000000000000000000000001A +:10D610000000000000000008000000000000000002 +:10D6200000000000000000000000000000000000FA +:10D6300000000200000008000008400221002180D4 +:10D64000200000080009000000098200000000001E +:10D6500000000000000000000008000000000000C2 +:10D6600000000000000000000000000000000000BA :10D6700000000000000000000000000000000000AA :10D68000000000000000000000000000000000009A -:10D690008920910000041100098400000008800026 -:10D6A00000000001100010042000800000000000B5 -:10D6B00000000001008400000000000000010000E4 -:10D6C00000000000090000000000000080848000CD -:10D6D00000000000008500000000000000000000C5 -:10D6E0000000000001000000000000000000000039 -:10D6F000000000000000900000000000000090000A -:10D700000000000000000000000000000000009089 -:10D710000000000001000090000000000000000078 -:10D7200000000000000001C004C001C082C101C0AF -:10D7300010880102900801C000A00110901001C0E3 -:10D7400000880188900401C000880182900801C00F -:10D7500000020182900801C008020120820200003C -:10D760000000000000001100210000000000000087 -:10D770000000000000001100800000000000110007 -:10D780008000000000000000000000000000000019 -:10D79000008000000000110000A100000000000057 -:10D7A0000000000000000000088080800980898857 -:10D7B0000380800009800000038000000900000051 -:10D7C00003800000090000800380000009000000C1 -:10D7D00003800080090000000380808009008080B1 -:10D7E00000000000000000000041090000030000EC -:10D7F00000000000000000000000008000000000A9 -:10D800000000008000000000000000000000000098 -:10D8100000000000000000000008000011400000AF -:10D82000000000000000110800008010008011209E -:10D83000800080038085800380000008008900103C -:10D8400080808008809000418080000000828000FD -:10D850008080000300828040808000200090802033 -:10D860008000000000000000000000010120000016 -:10D870000008000000000000000000000020000080 -:10D880000020000000200000000800000000000050 -:10D89000000088000082000000200001002001003C -:10D8A0000020000000000000010000000201A0C0F4 -:10D8B0009100C0A0840010C09001C0042001088223 -:10D8C0009000C0C002010483A001C040200020C11C -:10D8D0000200C0C04000A0C10200C0C00400A0837C -:10D8E0000800C004000000000000000000008800E4 -:10D8F000200000000000020000000000010000887D -:10D90000880000000100008888000000000000007E -:10D9100000000000000000002090000000009000C7 -:10D9200004900100000100004000000100000120FF -:10D9300020C040C000C091A02084040401C0109009 -:10D940000890C02000C0C0020820822000C00390C0 -:10D950000020C02000C005908490C00800C0C0A076 -:10D9600090C0040400C0000000000000000020007F -:10D9700000000000410000008000000000004100A5 -:10D980000080000000004100008000000000000056 -:10D9900000000000000008000000008000002000DF -:10D9A0000003808004000001000000000008200047 -:10D9B0004100008080890580410080800080418096 -:10D9C0004100000080000880C180008000000880C5 -:10D9D000C100008080000080C10000008080408085 -:10D9E000C100000000804080000000000000000036 -:10D9F00000202111000000000000000000000000D5 -:10DA000000110000008000000011000000800000F4 -:10DA10000000000000000000001180000000000075 -:10DA20000011910000000000000100091100000039 -:10DA30000000804191098080808080080002008081 -:10DA4000000080200002800000008005000200002D -:10DA500080008002000980800000800200098000B0 -:10DA60000000800000020080800000000000000034 -:10DA700000000000000100000000000000000000A5 -:10DA80000000000100000040000000010000004014 -:10DA90000000000000000000000000012000000065 -:10DAA00000000001210000880000000100000100CA -:10DAB00000000000C001C100C0C0C002C001900051 -:10DAC00020840800C000C0004020A000C0009000DA -:10DAD00020400200C001900002048800C0019000B4 -:10DAE00040208800C000900020C00200000000001C -:10DAF00000000000004200E0070481000000000078 -:10DB0000000000000000000007008200000000008C -:10DB100007008200000000000000000000428400B6 -:10DB2000078500004842C7E007A7000000004881C1 -:10DB300003E007260000480043E041224806480071 -:10DB400002E041004882410002E0410000424800FA -:10DB500002E0410084820000000041004842480089 -:10DB600002E041004842410002E04100840A000016 +:10D690000000110000000000000000000000000079 +:10D6A000000000000000000000000000000000007A +:10D6B0000000000080000000800000008000840066 +:10D6C000C008800000000000000000000000000012 +:10D6D000000000000000000000000000000000004A +:10D6E000000000000000000000000000000000003A +:10D6F000000000000000000000000000000000002A +:10D700000000000000000000000000000000000019 +:10D710000000000000000000000000000000000009 +:10D7200000000000000000000000000000000000F9 +:10D73000000000000000000000000000000000C128 +:10D740004002000588C10000000000000000000049 +:10D7500000000000000000000000000000000000C9 +:10D7600000000000000000000000000000000000B9 +:10D7700000000000000000000000000000000000A9 +:10D780000000000000000000000000000000000099 +:10D790000000000000000000000000000000000089 +:10D7A0000000000000000000000000000000000079 +:10D7B0000000000000000000000000000000000069 +:10D7C00010C1008003900011000000000000000064 +:10D7D0000000000000000000000000000000000049 +:10D7E0000000000000000000000000000000000039 +:10D7F0000000000000000000000000000000000029 +:10D800000000000000000000000000000000000018 +:10D810000000000000000000000000000000000008 +:10D8200000000000000000000000000000000000F8 +:10D8300000000000000000000000000000000000E8 +:10D840000000801080419011C10000000000000025 +:10D8500000000000000000000000000000000000C8 +:10D8600000000000000000000000000000000000B8 +:10D8700000000000000000000000000000000000A8 +:10D880000000000000000000000000000000000098 +:10D890000000000000000000000000000000000088 +:10D8A0000000000000000000000000000000000078 +:10D8B0000000000000000000000000000000000068 +:10D8C00000000000040102000500C140000000004B +:10D8D0000000000000000000000000000000000048 +:10D8E0000000000000000000000000000000000038 +:10D8F0000000000000000000000000000000000028 +:10D900000000000000000000000000000000000017 +:10D910000000000000000000000000000000000007 +:10D9200000000000000100000000000000000000F6 +:10D9300000000000000000000000000000000000E7 +:10D9400000000000000008402040C00400C00000AB +:10D9500000000000000000000000000000000000C7 +:10D9600000000000000000000000000000000000B7 +:10D9700000000000000000000000000000000000A7 +:10D980000000000000000000000000000000000097 +:10D990000000000000000000000000000000000087 +:10D9A0000000000000000001000000000000000076 +:10D9B0000000000000000000000000000000000067 +:10D9C000000000000000000080800080808009804E +:10D9D0000000000000000000000000000000000047 +:10D9E0000000000000000000000000000000000037 +:10D9F0000000000000000000000000000000000027 +:10DA00000000000000000000000000000000000016 +:10DA10000000000000000000000000000000000006 +:10DA200000000000000000000001000000000000F5 +:10DA300000000000000000000000000000000000E6 +:10DA400000000000000000000000A189801080A0FC +:10DA500000030000000000000000000000000000C3 +:10DA600000000000000000000000000000000000B6 +:10DA700000000000000000000000000000000000A6 +:10DA80000000000000000000000000000000000096 +:10DA90000000000000000000000000000000000086 +:10DAA0000000000000000000000000010000000075 +:10DAB0000000000000000000000000000000000066 +:10DAC000000000000000000000000000C1904001C4 +:10DAD0000440C090000000000000000000000000B2 +:10DAE0000000000000000000000000000000000036 +:10DAF0000000000000000000000000000000000026 +:10DB00000000000000000000000000000000000015 +:10DB10000000000000000000000000000000000005 +:10DB200000000000000000000000000000000000F5 +:10DB300000000000000000000000000000000000E5 +:10DB400000000000000000000000000000000000D5 +:10DB5000002004000042000000000000000000005F +:10DB600000000000000000000000000000000000B5 :10DB700000000000000000000000000000000000A5 -:10DB8000000000000000000000000000F0F00000B5 -:10DB900000000000F0F000000000000000000000A5 -:10DBA000FF000000FF000000FF000000FF00000079 +:10DB80000000000000000000000000000000000095 +:10DB90000000000000000000000000000000000085 +:10DBA0000000000000000000000000000000000075 :10DBB0000000000000000000000000000000000065 :10DBC0000000000000000000000000000000000055 :10DBD0000000000000000000000000000000000045 :10DBE0000000000000000000000000000000000035 :10DBF0000000000000000000000000000000000025 -:10DC00000000000000000000000000000000F0F034 -:10DC1000000000000000F0F0000000000000000024 -:10DC20000000FF000000FF000000FF000000FF00F8 +:10DC00000000000000000000000000000000000014 +:10DC10000000000000000000000000000000000004 +:10DC200000000000000000000000000000000000F4 :10DC300000000000000000000000000000000000E4 :10DC400000000000000000000000000000000000D4 :10DC500000000000000000000000000000000000C4 @@ -93664,164 +93664,164 @@ :10DC80000000000000000000000000000000000094 :10DC90000000000000000000000000000000000084 :10DCA0000000000000000000000000000000000074 -:10DCB00000000000000000000000000040084000DC -:10DCC00000842000400840000084200040084000FC -:10DCD00000842000400840000084200040084000EC -:10DCE00000842000400840000084200040084000DC -:10DCF0000084200000000000000000000000000080 +:10DCB0000000000000000000000000000000000064 +:10DCC0000000000000000000000000000000000054 +:10DCD0000000000041084000008421060000000010 +:10DCE0000000000000000000000000000000000034 +:10DCF0000000000000000000000000000000000024 :10DD00000000000000000000000000000000000013 -:10DD1000FFFF000000000000FFFF00000000000007 -:10DD20000000000000FF00003C3C000000FF00007D -:10DD3000FFFF0000000000000000FFFFFFFF0000E9 +:10DD10000000000000000000000000000000000003 +:10DD200000000000000000000000000000000000F3 +:10DD300000000000000000000000000000000000E3 :10DD400000000000000000000000000000000000D3 :10DD500000000000000000000000000000000000C3 :10DD600000000000000000000000000000000000B3 :10DD700000000000000000000000000000000000A3 :10DD80000000000000000000000000000000000093 :10DD90000000000000000000000000000000000083 -:10DDA00000000000000000FF00003C3C000000FFFD -:10DDB000000000000000000000000000FFFFFFFF67 +:10DDA0000000000000000000000000000000000073 +:10DDB0000000000000000000000000000000000063 :10DDC0000000000000000000000000000000000053 :10DDD0000000000000000000000000000000000043 :10DDE0000000000000000000000000000000000033 :10DDF0000000000000000000000000000000000023 -:10DE000005580A26050C04A00000000000000000D0 -:10DE100005000A00054000A805000A00054000A80A -:10DE2000000000000000000015182A20054004A88A -:10DE3000151C2A26854E24A8000000400036800EBE -:10DE400030D030040006800E300030650006800FB0 -:10DE5000300030650006800F300030650006800F0E -:10DE60003000300000000000100030650006800F18 -:10DE7000300030650006800F300000000000000018 -:10DE800000000000FF00FFFF000000000000000095 +:10DE00000000000000000000000000000000000012 +:10DE10000000000000000000000000000000000002 +:10DE200000000000000000000000000000000000F2 +:10DE300000000000000000000000000000000000E2 +:10DE400000000000000000000000000000000000D2 +:10DE5000000000000000001000000061000F00053D +:10DE600000080000000000000000000000000000AA +:10DE700000000000000000000000000000000000A2 +:10DE80000000000000000000000000000000000092 :10DE90000000000000000000000000000000000082 :10DEA0000000000000000000000000000000000072 -:10DEB00000000000FF00F0F0000000000000FF0084 -:10DEC00000FF00000000FF0000FF00000000000055 -:10DED0000000000000000000000000000000000042 +:10DEB0000000000000000000000000000000000062 +:10DEC0000000000000000000000000000000000052 +:10DED0000000000000000000000000000000FFFF44 :10DEE0000000000000000000000000000000000032 :10DEF0000000000000000000000000000000000022 -:10DF0000000000000000FF00000000000000000012 +:10DF00000000000000000000000000000000000011 :10DF10000000000000000000000000000000000001 :10DF200000000000000000000000000000000000F1 -:10DF3000000000000000FF00F0F000000000000002 -:10DF4000FF0000FF00000000FF0000FF00000000D5 +:10DF300000000000000000000000000000000000E1 +:10DF400000000000000000000000000000000000D1 :10DF500000000000000000000000000000000000C1 -:10DF600000000000000000000000000000000000B1 +:10DF6000FFFF0000000000000000000000000000B3 :10DF700000000000000000000000000000000000A1 -:10DF800000000000000000000000F0F000000000B1 +:10DF80000000000000000000000000000000000091 :10DF90000000000000000000000000000000000081 :10DFA0000000000000000000000000000000000071 -:10DFB0000000000000000000FF0000FF0000000063 -:10DFC0000000000000FF000000003C3C00FF0000DB +:10DFB0000000000000000000000000000000000061 +:10DFC0000000000000000000000000000000000051 :10DFD0000000000000000000000000000000000041 -:10DFE0000000000000000000000000000000000031 +:10DFE0000C0CFCFC00FF00AA000000000000000078 :10DFF0000000000000000000000000000000000021 -:10E00000000000000000000000000000F0F0000030 +:10E000000000000000000000000000000000000010 :10E010000000000000000000000000000000000000 :10E0200000000000000000000000000000000000F0 -:10E0300000000000000000000000FF0000FF0000E2 -:10E0400000000000000000FF000000003C3C00FF5A +:10E0300000000000000000000000000000000000E0 +:10E0400000000000000000000000000000000000D0 :10E0500000000000000000000000000000000000C0 -:10E0600000000000000000000000000000000000B0 +:10E0600000000C0CFCFC000000AA000000000000F6 :10E0700000000000000000000000000000000000A0 -:10E080000000840000002000200000002004200088 -:10E090002000200000002000200088000000200058 -:10E0A0002000200084008400000400000000200004 -:10E0B000000020000000200020000000000084007C -:10E0C0002000000084008400840084000000000020 -:10E0D0008800000020000000200020000400000054 -:10E0E000000020008400200020002000000000002C -:10E0F00000000000000000000000200020000000E0 +:10E080000000000000000000200000000000000070 +:10E090002000000000000000200000000000000040 +:10E0A000200400000000000020000000000000002C +:10E0B000200000000000000020020000000000001E +:10E0C0000404000000000000000000000000000048 +:10E0D0000000880000000000000020000000000098 +:10E0E000000020000000000000000002000000000E +:10E0F00000002000000000000000200000000000E0 :10E1000000002000000000000000000000000000EF :10E1100000000000000000000000000000000000FF -:10E1200000000000000000000000000000020000ED -:10E1300000020000100000000000000000000000CD -:10E14000000040000000200000000000000000006F -:10E1500000000000000005000900090000000000A8 -:10E1600000000000000000000000000000000000AF -:10E17000000010000000000000000000000000008F -:10E18000000000020000000000000000000000008D -:10E19000000000000000000000000000020000007D +:10E1200000004000000000000000000000000000AF +:10E1300000000000000000000000000000000000DF +:10E1400000000000000000000000000000000000CF +:10E1500000000000000000000000000000000000BF +:10E160000000000000000088000000000000000027 +:10E17000000000000000000000000000100000008F +:10E18000000000000000000000000000000000008F +:10E19000000000000000000000000000000000007F :10E1A000000000000200000000000000000000006D -:10E1B000000000000000000000000000000000401F -:10E1C000004000000000000000000000000000000F +:10E1B000000000000000000000000000000000005F +:10E1C000000000000000000000000000000000004F :10E1D000000000000000000000000000000000003F :10E1E000000000000000000000000000000000002F :10E1F000000000000000000000000000000000001F :10E20000000000000000000000000000000000000E -:10E2100000080000000000000000000000000008EE -:10E2200000000000000000020000000000000000EC -:10E2300000080000000000000000000000000008CE +:10E2100000000000000000000000000000000000FE +:10E2200000000000000000000000000000000000EE +:10E2300000000000000000000000000000000000DE :10E2400000000000000000000000000000000000CE -:10E2500000000008000000000000000000000000B6 -:10E2600000080000000000000000000000000000A6 -:10E270000000000800000000000000000000000096 -:10E280000008000000000084000000000000000002 +:10E2500000000000000000000000000000000000BE +:10E2600000000000000000000000000000000000AE +:10E27000000000000000000000000000000000009E +:10E28000000000000000000000000000000000008E :10E29000000000000000000000000000000000007E :10E2A000000000000000000000000000000000006E :10E2B000000000000000000000000000000000005E -:10E2C000000000000000000004000000000000004A -:10E2D0000000000000000000000000000000C0007E -:10E2E000000000000000000000000000000000002E +:10E2C000000000000000000000000000000000004E +:10E2D000000000000000000000000000000000003E +:10E2E000000000000000200000000000000000000E :10E2F000000000000000000000000000000000001E -:10E3000000000000000000000000000040000300CA -:10E3100040000000000000000000000000000000BD -:10E3200000004100000000000000000000000000AC -:10E330000000000000000000210021000300030095 -:10E340000000210000000000000005000000210086 -:10E350002100210000000000000000001100412009 -:10E3600020000500050000000000080011000390D7 -:10E3700003200388000000000000000021000800C6 -:10E380000088080041C0000040001100200000008B -:10E39000000000000000A0000000000000000000DD -:10E3A0000000000000000000000000000000A000CD -:10E3B000A0000000000000000800000000000000B5 -:10E3C000000000090000000000008800A009000013 -:10E3D00000000800080000000000000088000000A5 -:10E3E000A000A00040004000A0000000820040000B -:10E3F0000800000000008200000000000000000093 +:10E300000000000800000000000000000000000005 +:10E3100000000000000000000000000000000000FD +:10E3200000000000000000000000000000000000ED +:10E3300000000000000000000000000000000000DD +:10E3400000000000000000000000002000000000AD +:10E3500000000000000000000000000008000000B5 +:10E360000000000000000002110000000300000097 +:10E370000000000000A000000000000000000000FD +:10E38000000000000000000000000000000000008D +:10E39000000000000000000000000000000000007D +:10E3A000000000000000000000000000000000006D +:10E3B000000000000000000000000000000000005D +:10E3C0000000000000000000000000000800000045 +:10E3D0000000000000000000000000000000A0009D +:10E3E000000000000000000000000000000000002D +:10E3F000000000000000000000000000000000001D :10E40000000000000000000000000000000000000C :10E4100000000000000000000000000000000000FC :10E4200000000000000000000000000000000000EC :10E4300000000000000000000000000000000000DC -:10E4400000000000000000000000110011000000AA +:10E4400000000000000000000000000000000000CC :10E4500000000000000000000000000000000000BC -:10E46000110000000000000000000000000000009B +:10E4600000000000000000000000000000000000AC :10E47000000000000000000000000000000000009C -:10E48000110000000000000000000000000000007B -:10E490000000000000000000000008000000000074 +:10E48000000000000000000000000000000000008C +:10E49000000000000000000000000000000000007C :10E4A000000000000000000000000000000000006C :10E4B000000000000000000000000000000000005C :10E4C000000000000000000000000000000000004C -:10E4D00000000000000000000000000000009000AC -:10E4E0000800000000000000000000000000000024 -:10E4F000000000000000000000000000820000009A -:10E5000000200000000000000000000000000000EB -:10E510000000000000000000000000C0000000003B -:10E520000084000000000000000000000000000067 -:10E53000000000840000000000000084008400004F -:10E540000000000000040000000000C008000000FF -:10E55000000000840000000000000000008400842F -:10E5600021020000039000020920049011200504FC -:10E570000900090805001100210009841082000427 -:10E580000900039003000388090021C0030005046B -:10E59000210000A0000208000000000000000000B0 -:10E5A0000000000000000000000000020000080061 -:10E5B0000800000000000000000008000802000041 -:10E5C00000000000080200110000000004008800A4 -:10E5D0008200080000000000000088000000000227 -:10E5E00090009000000000020802000000000000FF -:10E5F0000000880000000000000000000000400053 -:10E600000000000008020000000088000000000078 -:10E610000000880000004000000000000000000032 -:10E6200000000000000005000000000000000000E5 +:10E4D000000000000000000000000000000000003C +:10E4E000000000000000000000000000000000002C +:10E4F000000000000000000000000000000000001C +:10E50000000000000000000000000000000000000B +:10E5100000000000000000000000000000000000FB +:10E5200000000000000000000000000000000000EB +:10E5300000000000000000000000000000200000BB +:10E540000000000000000000000000000088000043 +:10E5500000000000000000000000000000000000BB +:10E5600000000000000000000000000000000000AB +:10E5700000000000008400C009000000110000003D +:10E580000000000008000000000000000000000083 +:10E59000000000000000000000000000000000007B +:10E5A000000000000000000000000000000000006B +:10E5B000000000000000000000000000000000005B +:10E5C000000000000000000000000000000000004B +:10E5D0000000000000000000000000000000080033 +:10E5E000000000000000000000000000000000002B +:10E5F000000000000000000000000000000000110A +:10E60000000000000000000000000000000000000A +:10E6100000000000000000000000000000000000FA +:10E6200000000000000000000000000000000000EA :10E6300000000000000000000000000000000000DA :10E6400000000000000000000000000000000000CA -:10E6500000000000000000000000000000000000BA +:10E6500000000000200020880000000000000000F2 :10E6600000000000000000000000000000000000AA -:10E67000000000000000000000000000000000009A -:10E68000000000000000000000000000000000008A +:10E67000000000000000000000000088008800008A +:10E68000000040000000000000000000000000004A :10E69000000000000000000000000000000000007A :10E6A000000000000000000000000000000000006A :10E6B000000000000000000000000000000000005A @@ -93920,196 +93920,196 @@ :10EC80000000000000000000000000000000000084 :10EC90000000000000000000000000000000000074 :10ECA0000000000000000000000000000000000064 -:10ECB0000000200020000000200020002000200094 -:10ECC0002000000020000000400020002000200064 -:10ECD0002000200000000000000020800000200034 -:10ECE0004000040000000000200020002000200060 -:10ECF00020000003200004000000000020000400A9 -:10ED00002000200020000011000020002000200032 -:10ED10002000200000000000000000002000200073 -:10ED20002000000000000000000020002100200062 -:10ED30002000200000000000000000000000000093 -:10ED400000000000000000000000000000020000C1 -:10ED50000000000000000000000000000040000073 -:10ED6000000000000000000000000900000000009A -:10ED70000000000000000400000000020400040085 -:10ED80000000040004400000000000000500000036 -:10ED90000000000000000000000000000000000073 -:10EDA0000040000000000000000000000000100013 -:10EDB0000000000000000000000000000000000053 +:10ECB0000000000000000000000000000000000054 +:10ECC0000000000000000000000000000000000044 +:10ECD0000000000000000000000000000000000034 +:10ECE0000000000000000000000000000000000024 +:10ECF0000000000100000000000000000000000013 +:10ED00000000000000000000000000000000000003 +:10ED10000000000000000000008000000000000073 +:10ED200000020000000000000000000000000000E1 +:10ED300000040000000000000000000000000000CF +:10ED400000040004000000000000000000000000BB +:10ED500000000002000000000000000000000000B1 +:10ED6000000400040000000000000000000000009B +:10ED70000000000000000000000000000000000093 +:10ED8000000000040000000000000000000000007F +:10ED900000000002009000000000000200000000DF +:10EDA000004000040004000000000000000000001B +:10EDB0000040000200000000000000000000000011 :10EDC0000000000000000000000000000000000043 -:10EDD0000000000000100000000000000000000023 -:10EDE0000000000000000000000000000000000023 -:10EDF000004000000010000000000000840000003F +:10EDD0000000000000000000000000000000000033 +:10EDE00000000000000004000400002002200000D9 +:10EDF0000000000000000000000000000000000013 :10EE00000000000000000000000000000000000002 :10EE100000000000000000000000000000000000F2 :10EE200000000000000000000000000000000000E2 -:10EE300000000000000000000400000000000000CE -:10EE400000000000000009000900000000000000B0 +:10EE300000000000000002000000000000000000D0 +:10EE400000000000000000000000000000000000C2 :10EE500000000000000000000000000000000000B2 -:10EE600000000000000000000000000000000000A2 -:10EE70000000000000000000000000000000000092 +:10EE600000000000000000008000800000010001A0 +:10EE7000000000000200020000000000000000008E :10EE80000000000000000000000000000000000082 -:10EE90000000000000000000000000000000000072 +:10EE90000000000000000200020000000008000066 :10EEA0000000000000000000000000000000000062 -:10EEB0000000000000000000000000000000000052 -:10EEC0000100000000000000C00000000000000081 +:10EEB0000000000000000200000000000000000050 +:10EEC0000000000000000000000000000000000042 :10EED0000000000000000000000000000000000032 -:10EEE0008200000000000000000000000800000098 -:10EEF000000000000000000004000000000000000E -:10EF0000C000000000000000010000000000000040 -:10EF100000002000C000C000040000000421000028 -:10EF20008400000084000000000040000005000094 -:10EF300000002000000000000000000000000000B1 -:10EF400000000400000000000000000000000000BD +:10EEE0000000000000000000000000000000000022 +:10EEF000000000000000000000000000000000080A +:10EF000000000000000000030000000000000000FE +:10EF1000000000000000000000000200008000006F +:10EF200000000000000000000000000000210000C0 +:10EF300000000000000000000000000000000000D1 +:10EF400000000000000000000000000000000000C1 :10EF500000000000000000000000000000000000B1 :10EF600000000000000000000000000000000000A1 -:10EF70000000410000000000000000000000000050 -:10EF8000000000000000000000001000110021003F -:10EF900000880000A1000020000000000000000028 -:10EFA0000000000000000000000000000000080059 -:10EFB00000000000800000000000000000000300CE -:10EFC0000000018001800000000000000000080037 -:10EFD0000000000008000000000000000000000029 -:10EFE000000000000800000008000000C100000050 -:10EFF00000000000000000008200C00000000000CF -:10F0000000000002000000001000200000000100CD +:10EF70000000000000000000000000000000000091 +:10EF80000000000000000000000000000000000081 +:10EF90000000000000000000000000000000000869 +:10EFA0000000000000000000000000000000000061 +:10EFB0000000000000000000000000000000000051 +:10EFC0000000000000000000000000000000000041 +:10EFD0000000000000000000000000000000000031 +:10EFE0000000000000000000000000000000000021 +:10EFF0000000000000000000000000000000000011 +:10F000000000000000000000000000000000000000 :10F0100000000000000000000000000000000000F0 -:10F0200008000000000000000000000000000000D8 -:10F03000820500000000A000000000000100008028 -:10F0400090000000202002040000000000000000EA +:10F0200000000000000020000000A000A000A000E0 +:10F0300000000000000000000100010000000000CE +:10F0400000000000000000000000000000000000C0 :10F0500000000000000000000000000000000000B0 -:10F06000000000000000000000000000000004009C +:10F0600000000000000000000000000000000000A0 :10F070000000000000000000000000000000000090 -:10F080000000000000000000000080008000000080 -:10F090002000000000000000000000000000000050 -:10F0A0000000000000000000000000000000000060 -:10F0B0000000000000000000000000000000200030 -:10F0C00000048800000000001000000000000000A4 +:10F080000000000000000000000000000000000080 +:10F090000000000000000000000000000000000070 +:10F0A00000000000000000008000000000000000E0 +:10F0B0000000000000000000000020002000000010 +:10F0C0000000000000000000000000000000000040 :10F0D0000000000000000000000000000000000030 -:10F0E00000008200080000000000C00000000020B6 -:10F0F0000000000000000000A00000000000000070 -:10F1000082000000000000000000000000000080FD -:10F110000000000001002000A1200000000000000D -:10F1200000000000000000000000000000000000DF -:10F13000000000000100008000809000000000003E -:10F14000000000000000000000008000000000003F +:10F0E00000000000000000000000000000004000E0 +:10F0F0000000000000000000000000000000000010 +:10F1000000000000000000000000000000000000FF +:10F1100000000000001000000000000000000000DF +:10F12000000000000100000000000080000000005E +:10F13000000000000000000000008200000000004D +:10F1400000000000000000000000000000000000BF :10F1500000000000000000000000000000000000AF :10F16000000000000000000000000000000000009F -:10F17000000100000000000000000000000000008E +:10F17000000000000000000000000000000000206F :10F18000000000000000000000000000000000007F -:10F190000008000000042000800020000404038810 -:10F1A0000300000000880400080000000084400004 -:10F1B00000004000000020000004000400000000E7 -:10F1C00000000084000000000100000000000000BA -:10F1D0000000000900000000000000000000000026 +:10F19000000000000000000000000000000000006F +:10F1A00000840000000010000000000000020000C9 +:10F1B000000000000000000000000000000000004F +:10F1C000000000000000000000000000000000003F +:10F1D000000000000000000000000000000000002F :10F1E000000000000000000000000000000000001F -:10F1F0000000000008000000000000000000000007 -:10F2000000000000000000000000000000000000FE -:10F21000200000002000100000210000000000007D -:10F2200000000000000000000000000000000000DE -:10F2300000000000000008200000000000000000A6 -:10F24000000300000000000000002000000000009B +:10F1F00000000000000020000000000000000020CF +:10F20000002000200020000000000000000000009E +:10F2100000000000000000000000000000000000EE +:10F2200000000000000000000000040804000400CA +:10F2300000000004000000090000000000000000C1 +:10F2400000000000010001000000000000000000BC :10F2500000000000000000000000000000000000AE -:10F26000002000000000000000000000000000007E +:10F26000000000000000000000000000000000009E :10F27000000000000000000000000000000000008E -:10F28000000000000000000000000000000000007E -:10F2900000008000000080008000000000000000EE -:10F2A000000000000000000000000000000000005E -:10F2B000000000000000000000000000000000202E -:10F2C00000000000000000000000010090000000AD +:10F28000000100010001000100000000000000007A +:10F29000000000000000000000000000000000006E +:10F2A000000000000000000000000000800180005D +:10F2B00080000000000000000000000000000000CE +:10F2C00000000000000020002000000000000000FE :10F2D000000000000000000000000000000000002E :10F2E000000000000000000000000000000000001E -:10F2F000000000009000000000020000000000007C -:10F3000000000000000000000000000000000000FD -:10F3100000000000010000000000000000000000EC -:10F3200000000000000000000000000000000000DD -:10F3300000000000000000000000000000000000CD -:10F340000000000001000000000000001100A1000A +:10F2F000000000000000000000000000000000000E +:10F300000000000084000000000000000000000079 +:10F3100000000000000000000000000000000000ED +:10F320000000000000000000000000000000840059 +:10F3300001000000000000000000000000000000CC +:10F3400000000000000000000000000000000000BD :10F3500000000000000000000000000000000000AD :10F36000000000000000000000000000000000009D -:10F37000000000001100800000000080000000007C +:10F37000000000000000000000000000000000008D :10F38000000000000000000000000000000000007D -:10F39000000000000000110000210000000011002A +:10F39000000000000000000000000000000000006D :10F3A000000000000000000000000000000000005D -:10F3B000000000000000000000000000000000004D -:10F3C0000000000000001100210000000000000803 -:10F3D00009800003000000000000000000000000A1 +:10F3B000000003000000000000000000000000004A +:10F3C0000000000000000000000009000000000034 +:10F3D000000000000000000000000000000000002D :10F3E000000000000000000000000000000000001D -:10F3F000000000000000000000800000008000000D -:10F4000000000000000000000000000000000000FC -:10F410000000000000000000000800001140000093 -:10F420000008000000410000000000000000000093 -:10F4300000000000000000000000000000000000CC -:10F4400000040000000400000041090000030080E7 -:10F450000001010200000088000000000000000020 +:10F3F000000000000000000000000000000000000D +:10F40000008000000080000000000000008000007C +:10F4100000000000000000000000000000000000EC +:10F4200000000000000000000000000000000000DC +:10F430000000028000004180000000000000000089 +:10F44000000000000000000000410000004000003B +:10F4500000000000000000000000000000000000AC :10F46000000000000000000000000000000000009C -:10F47000000000000000000000000020000000C0AC -:10F48000000000000000000000000000000000007C -:10F49000000000000000000000000000000001006B +:10F47000000000000000000000000000000000008C +:10F480000000000800000008000000C0000000C0EC +:10F49000000000000000000000000000000000006C :10F4A000000000000000000000000000000000005C -:10F4B000000000000000000000000000000000004C -:10F4C0000000000100000001000000010100000038 -:10F4D00000889100888808000000000002000000F9 +:10F4B00000000000008800000108000000000000BB +:10F4C000000000000000000000000001000000003B +:10F4D000000000000000000000000000000000002C :10F4E000000000000000000000000000000000001C -:10F4F00000000000000000000000010000888800FB -:10F5000001000000000000000000000000000000FA -:10F5100000000000000000000000000000004000AB -:10F5200000010000000008000000000000000000D2 -:10F5300000000000000000000000000000000000CB -:10F5400000000000000084000000010000008800AE -:10F5500000000100410000808000410000008000A8 +:10F4F000000000000000000000000000000000000C +:10F5000000000000000008000000000000004000B3 +:10F5100000000000000000000000000000000000EB +:10F5200000000000000000000000000000000000DB +:10F530000000000000010001C00100010000000007 +:10F54000000000000000000000000000000040007B +:10F5500000000000000000000000000000000000AB :10F56000000000000000000000000000000000009B -:10F5700000000000000000000000000041000080CA -:10F580000000090000000000000000000000000072 -:10F59000000000000000000000000000000000006B -:10F5A000000000082000000000000000080000002B -:10F5B000000000000000000000000000000000004B -:10F5C0000000000000000000000000000200000039 -:10F5D0000000000041000011000000802000000039 +:10F57000000000000000000000000000000000008B +:10F5800000000000090000008000000005000000ED +:10F5900080000000000000000000000000000000EB +:10F5A000000000000000000000000000000000005B +:10F5B00000000000000000090040000400410000BD +:10F5C000000000000000000000000000000000003B +:10F5D00000000000400000000000000000000000EB :10F5E000000000000000000000000000000000001B -:10F5F00000000000000000000000000000000011FA -:10F60000000000800000000000000000000000007A -:10F6100000000000000000000000000000000000EA -:10F6200000091100000000000002000000000000BE -:10F6300000000000000000000000000000000000CA -:10F6400000000000000000000009000000000000B1 -:10F650000000001100004000000100000040000018 +:10F5F000000000000000000000000000000000000B +:10F6000000000000000000000002000000000020D8 +:10F6100000020000000000000000000000000000E8 +:10F6200000000000000000000000000000000000DA +:10F6300000000000000000000000000400000008BE +:10F6400000000000000000000000000000000000BA +:10F6500000000000000000000000000000000000AA :10F66000000000000000000000000000000000009A :10F67000000000000000000000000000000000008A -:10F680000001000000400000000000000000000039 -:10F69000000000000000000000000000000000006A -:10F6A0000000000001000000000000000000000059 -:10F6B000000000000000000000000000000000004A -:10F6C000000000000000000000000000000000003A -:10F6D00000000000000100000000000000E0070042 -:10F6E0008200000000000000000000000000000098 +:10F68000000000000000000000000000000000007A +:10F690000001000000000000000000000000000069 +:10F6A000000000000000000000000000000000005A +:10F6B0000000000000000000000000100001000039 +:10F6C0000001000000000000000000000000000039 +:10F6D000000000000000000000000000000000002A +:10F6E000000000000000000000000000000000001A :10F6F000000000000000000000000000000000000A -:10F70000000000000000070082210000000000004F -:10F7100000000000000000000000000000000000E9 -:10F7200000000000810043E000220000810002E0B0 -:10F7300000000000000000000000000000000000C9 -:10F74000000000000000000000000000810002E056 -:10F7500000000000000000E0000081410000000007 -:10F76000F0F00000000000000000000000000000B9 +:10F7000000000000000000000000000600000700EC +:10F710000000000000001200000A000000000000CD +:10F7200000000000000000000000000000000000D9 +:10F7300000000000000000000000000000000020A9 +:10F7400004000000000000000000000000000000B5 +:10F750000000000000000020000060000000000029 +:10F760000000000000000000000000000000000099 :10F770000000000000000000000000000000000089 -:10F780000000000000000000F0F000000000000099 +:10F780000000000000000000000000000000000079 :10F790000000000000000000000000000000000069 :10F7A0000000000000000000000000000000000059 :10F7B0000000000000000000000000000000000049 :10F7C0000000000000000000000000000000000039 :10F7D0000000000000000000000000000000000029 -:10F7E0000000F0F000000000000000000000000039 +:10F7E0000000000000000000000000000000000019 :10F7F0000000000000000000000000000000000009 -:10F8000000000000000000000000F0F00000000018 +:10F8000000000000000000000000000000000000F8 :10F8100000000000000000000000000000000000E8 :10F8200000000000000000000000000000000000D8 :10F8300000000000000000000000000000000000C8 :10F8400000000000000000000000000000000000B8 :10F8500000000000000000000000000000000000A8 -:10F860000000FFFF0000FFFF00000000000000009C +:10F860000000000000000000000000000000000098 :10F870000000000000000000000000000000000088 -:10F88000000000000000000000003C3C0000FFFF02 +:10F880000000000000000000000000000000000078 :10F890000000000000000000000000000000000068 :10F8A0000000000000000000000000000000000058 :10F8B0000000000000000000000000000000000048 @@ -94117,143 +94117,143 @@ :10F8D0000000000000000000000000000000000028 :10F8E0000000000000000000000000000000000018 :10F8F0000000000000000000000000000000000008 -:10F900000000000000000000000000003C3C00007F +:10F9000000000000000000000000000000000000F7 :10F9100000000000000000000000000000000000E7 :10F9200000000000000000000000000000000000D7 :10F9300000000000000000000000000000000000C7 :10F9400000000000000000000000000000000000B7 :10F9500000000000000000000000000000000000A7 -:10F960000000000005402A06054C00A80000000029 +:10F960000000000000000000000000000000000097 :10F970000000000000000000000000000000000087 -:10F9800000000000000000000000000005002A0048 -:10F99000054000A80000000000000000000000007A -:10F9A0000000000000000000000000000000000453 -:10F9B0000006800E200000650006800F2000000079 -:10F9C0000000000000000000000000000000000037 -:10F9D00000000000000000650006800F20000040CD -:10F9E0000006000C000000003C3CFFFF000000008F +:10F980000000000000000000000000000000000077 +:10F990000000000005000A28050000A005000A0874 +:10F9A000050000A0000000000000000000000000B2 +:10F9B0000000000000000000000000000000000047 +:10F9C00000000000000000610A0F050900A000000F +:10F9D00000000000000000000000000000000061C6 +:10F9E0000007000D00000000000000000000000003 :10F9F0000000000000000000000000000000000007 :10FA000000000000000000000000000000000000F6 :10FA100000000000000000000000000000000000E6 :10FA200000000000000000000000000000000000D6 -:10FA30000000FF0000FF00000000000000000000C8 -:10FA400000000000000000000000000000000000B6 +:10FA300000000000000000000000000000000000C6 +:10FA40000000000000000000000000003030003C1A :10FA500000000000000000000000000000000000A6 -:10FA600000003C3CFFFF000000003C3C00000000A8 +:10FA60000000000000000000000000000000000096 :10FA70000000000000000000000000000000000086 :10FA80000000000000000000000000000000000076 :10FA90000000000000000000000000000000000066 :10FAA0000000000000000000000000000000000056 -:10FAB00000000000FF0000FF000000000000000048 -:10FAC0000000000000000000000000000000000036 -:10FAD0000000000000000000000000000000000026 -:10FAE000000000003C3C0000000000000000F0F0BE +:10FAB0000000000000000000000000000000000046 +:10FAC00000000000000000000000000000003030D6 +:10FAD000003C0000000000000000000000000000EA +:10FAE0000000000000000000000000000000000016 :10FAF0000000000000000000000000000000000006 :10FB000000000000000000000000000000000000F5 :10FB100000000000000000000000000000000000E5 :10FB200000000000000000000000000000000000D5 -:10FB3000000000000000FF0000FF000000000000C7 +:10FB300000000000000000000000000000000000C5 :10FB400000000000000000000000000000000000B5 -:10FB500000000000000000000000000000000000A5 -:10FB60000000000000000000F0F0000000000000B5 -:10FB7000F0F00000000000000000000000000000A5 +:10FB5000AAAAAAAA000000000000000000000000FD +:10FB60000000000000000000000000000000000095 +:10FB70000000000000000000000000000000000085 :10FB80000000000000000000000000000000000075 :10FB90000000000000000000000000000000000065 :10FBA0000000000000000000000000000000000055 -:10FBB0000000000000000000FF0000FF0000000047 +:10FBB0000000000000000000000000000000000045 :10FBC0000000000000000000000000000000000035 -:10FBD0000000000000000000000000000000000025 -:10FBE00000000000000000000000F0F00000020033 -:10FBF0000000200000000000200000002000200085 -:10FC00002000A0002000200000040000C000200010 -:10FC10000000000000000000200000002000200084 -:10FC200000002000000420008800000020000001E7 -:10FC300088000000000000000000200000002000FC -:10FC40002000000020000000200020000000200014 -:10FC50002000000000000000000020000000200044 -:10FC60000000000020000000000000000000200054 -:10FC70008000000000000000000000000000000004 +:10FBD00000000F0FF0F00000000000000000000027 +:10FBE0000000000000000000000000000000000015 +:10FBF0000000000000000000000000000000000005 +:10FC000000000000000000000000000000000000F4 +:10FC100000000000000000000000000000040000E0 +:10FC200000000000000000000000000000000002D2 +:10FC300000000000000000000000000000000004C0 +:10FC400000000000000000000000000000000000B4 +:10FC500000000000000000000000000000000000A4 +:10FC60000000000000000000000000000000000094 +:10FC70000000000000000000000000000000100074 :10FC80000000000000000000000000000000000074 -:10FC90000000000000000000000000000000100054 +:10FC90000000000000000000000000000000000064 :10FCA0000000000000000000000000000000000054 :10FCB0000000000000000000000000000000000044 -:10FCC0000000000000000000210000000000000013 -:10FCD0000000000000000000000000000000000222 -:10FCE0000000000000000000000000000000000014 -:10FCF00000000000000000000040000000000000C4 -:10FD00000040000000000000008000000000000033 -:10FD10000000000000000000000008000800004093 -:10FD20000040000000000000000000000000000093 -:10FD3000000000000000000088000000000000003B -:10FD40000000880000000000020000000000000029 +:10FCC0000000000000000000000000000000000034 +:10FCD0000000000000000000000000000000000024 +:10FCE0000000000000000000100000000002000002 +:10FCF0000002000000000000000000000000000002 +:10FD000000000000000000000000000000000000F3 +:10FD100000000000000000000000000000000000E3 +:10FD200000000000000000000000000000000000D3 +:10FD300000000000000000000000000000000000C3 +:10FD400000000000000000000000000000000000B3 :10FD500000000000000000000000000000000000A3 -:10FD60000000000000000000000000000000000093 -:10FD7000000000000000000000000000050000007E -:10FD80000000000000000000000000100000000063 -:10FD90000000000800000000000000080000000053 -:10FDA000000000000000000000000008000000004B -:10FDB0000000000800000000000000000008000033 -:10FDC0000000000000000200020000000208000025 -:10FDD0000000000000080000000000000008000013 -:10FDE000000000000000000000000000000800000B -:10FDF000000000000008080000038400000000006C +:10FD60000000000000000000000000000100010091 +:10FD70000100010000000000000000000000000081 +:10FD80000000000000000008000000000002000267 +:10FD90000000000000000000000000000000000063 +:10FDA000000000000000000800000000000000004B +:10FDB0000000000000000000000000000000000043 +:10FDC000000000000000000000080000000000002B +:10FDD0000000000000000000000000000000000023 +:10FDE00000000000000000000004000000002000EF +:10FDF00020002000200000000000000000000000A3 :10FE000000000000000000000000000000000000F2 :10FE100000000000000000000000000000000000E2 -:10FE200000000000000000000800000000000000CA +:10FE200000000000000000000000000000000000D2 :10FE300000000000000000000000000000000000C2 :10FE400000000000000000000000000000000000B2 -:10FE5000000004000000000000000000000000009E -:10FE60000000900000000000000000000000000002 -:10FE7000000020000000000008000000000000005A +:10FE500000000000000000000000000000000000A2 +:10FE6000000000000000000000080000000000008A +:10FE70000000000000000000000000000000000082 :10FE80000000000000000000000000000000000072 :10FE90000000000000000000000000000000000062 :10FEA0000000000000000000000000000000000052 :10FEB0000000000000000000000000000000000042 -:10FEC000030000000000000000000000000000002F -:10FED000000000000000040000000400000000001A -:10FEE0000000000000000000000000000000000012 -:10FEF000000021000000000000008200000000005F -:10FF0000010000000000000000008200000000006E -:10FF1000010000000000000000008200000000005E -:10FF200000000000C000000000008200000020006F -:10FF30000800000000000000200000000000000099 +:10FEC0000000000000000000000000000000000032 +:10FED0000000000000000000000000000000000022 +:10FEE0000000000200000000000000000000000010 +:10FEF00000000000000011000000000000000000F1 +:10FF000000000000000000000000000000000000F1 +:10FF100000000000000000000000000000000000E1 +:10FF200000000000000000000000000000000000D1 +:10FF300000000000000000000000000000000000C1 :10FF400000000000000000000000000000000000B1 :10FF500000000000000000000000000000000000A1 :10FF60000000000000000000000000000000000091 :10FF70000000000000000000000000000000000081 -:10FF8000000004000000000000000000000000006D -:10FF90000000200000000900000000000000000038 +:10FF80000000000000000000000000000000000071 +:10FF90000000000000000000000000000000000061 :10FFA0000000000000000000000000000000000051 :10FFB0000000000000000000000000000000000041 :10FFC0000000000000000000000000000000000031 -:10FFD00000004100000000000000000000000000E0 -:10FFE000020002000000000000000000000000000D -:10FFF0000000000000900000000000000000000071 +:10FFD0000000000000000000000000000000000021 +:10FFE0000000000000000000000000000000000011 +:10FFF0000000000000000000000000000000000001 :020000040017E3 -:1000000000000020000800030000000000000000C5 -:1000100000000000000800000000000000000000D8 -:1000200000000800000000000000000000000000C8 +:1000000000000000000000000000000000000000F0 +:1000100000000000000000000000000000000000E0 +:1000200000000000000000000000000000000000D0 :1000300000000000000000000000000000000000C0 -:100040000800000000000000000000000000C000E8 +:1000400000000000000000000000000000000000B0 :1000500000000000000000000000000000000000A0 :100060000000000000000000000000000000000090 :100070000000000000000000000000000000000080 -:10008000000000000085088400000000000000005F +:100080000000000000000000000000000000000070 :100090000000000000000000000000000000000060 -:1000A00000000000000000000000000000000084CC +:1000A0000000000000000000000000000000000050 :1000B0000000000000000000000000000000000040 :1000C0000000000000000000000000000000000030 -:1000D000008400000000002000000020002000003C -:1000E0000000000000000000000000000000000010 -:1000F000000000000000000000C0000000000084BC -:1001000000000009000000000000000000000002E4 -:1001100000020000000000000000000000000000DD +:1000D0000000000000000000000000000000000020 +:1000E000000000A000000000000000000000000070 +:1000F0000000000000000000000000000000000000 +:1001000000000000000000000000000000000000EF +:1001100000000000000000000000000000000000DF :1001200000000000000000000000000000000000CF -:1001300000000000000000000002000000000000BD +:1001300000000000000000000000000000000000BF :1001400000000000000000000000000000000000AF -:10015000000000000000000000000002000000009D +:10015000000000000000000000000000000000009F :10016000000000000000000000000000000000008F -:100170000000000008000000000000000800080067 +:10017000000000000000000000000000000000007F :10018000000000000000000000000000000000006F :10019000000000000000000000000000000000005F :1001A000000000000000000000000000000000004F @@ -94262,7 +94262,7 @@ :1001D000000000000000000000000000000000001F :1001E000000000000000000000000000000000000F :1001F00000000000000000000000000000000000FF -:10020000000000000000000090000020000000003E +:1002000000000000000000000000000000000000EE :1002100000000000000000000000000000000000DE :1002200000000000000000000000000000000000CE :1002300000000000000000000000000000000000BE @@ -94270,48 +94270,48 @@ :10025000000000000000000000000000000000009E :10026000000000000000000000000000000000008E :10027000000000000000000000000000000000007E -:1002800000000000000000001100800000000000DD -:100290000000000000000000000000000800000056 +:100280000000A000000000000000000000000000CE +:10029000000000000000000000000000000000005E :1002A000000000000000000000000000000000004E :1002B000000000000000000000000000000000003E :1002C000000000000000000000000000000000002E :1002D000000000000000000000000000000000001E :1002E000000000000000000000000000000000000E :1002F00000000000000000000000000000000000FE -:10030000000000000000000000000000008000006D -:10031000008000000000000000000000000000005D +:1003000000000000000009000000000000000000E4 +:1003100000000000000000000000000000000000DD :1003200000000000000000000000000000000000CD :1003300000000000000000000000000000000000BD :1003400000000000000000000000000000000000AD :10035000000000000000000000000000000000009D :10036000000000000000000000000000000000008D :10037000000000000000000000000000000000007D -:10038000000000000000000000000000000000204D -:10039000000000C0000000000000000020009000ED +:100380000000000000090000000300000000000061 +:10039000000000000000000000000000000000005D :1003A000000000000000000000000000000000004D :1003B000000000000000000000000000000000003D :1003C000000000000000000000000000000000002D :1003D000000000000000000000000000000000001D :1003E000000000000000000000000000000000000D :1003F00000000000000000000000000000000000FD -:1004000000000000000000000000000000000100EB -:1004100000888800010000000000000000000000CB +:1004000000000000000000000000000100000000EB +:1004100000000000000000000000000000000000DC :1004200000000000000000000000000000000000CC :1004300000000000000000000000000000000000BC :1004400000000000000000000000000000000000AC :10045000000000000000000000000000000000009C :10046000000000000000000000000000000000008C :10047000000000000000000000000000000000007C -:10048000000000000000000000000000000000006C -:100490004100008000000900000000000000000092 -:1004A0000000000000000800000000000000000044 +:100480000000000000000000000008000000010063 +:10049000000000000000000000000000000000005C +:1004A000000000000000000000000000000000004C :1004B000000000000000000000000000000000003C :1004C000000000000000000000000000000000002C :1004D000000000000000000000000000000000001C :1004E000000000000000000000000000000000000C :1004F00000000000000000000000000000000000FC -:1005000000000000000000000000000000000000EB -:10051000000000110000008000000000000000004A +:10050000000000000000000000000000800000006B +:10051000410000000000000000000000000000009A :1005200000000000000000000000000000000000CB :1005300000000000000000000000000000000000BB :1005400000000000000000000000000000000000AB @@ -94319,23 +94319,23 @@ :10056000000000000000000000000000000000008B :10057000000000000000000000000000000000007B :10058000000000000000000000000000000000006B -:10059000000000000001000000400000000000001A -:1005A00000000000000000000088000000000000C3 +:10059000000000000000000000000000000000005B +:1005A000000000000000000000000000000000004B :1005B000000000000000000000000000000000003B :1005C000000000000000000000000000000000002B :1005D000000000000000000000000000000000001B :1005E000000000000000000000000000000000000B :1005F00000000000000000000000000000000000FB :1006000000000000000000000000000000000000EA -:100610000000000000000000000007008221000030 -:10062000000000000000410000E0000000000000A9 +:1006100000000000000000000000000000000000DA +:1006200000000000000000000000000000000000CA :1006300000000000000000000000000000000000BA :1006400000000000000000000000000000000000AA :10065000000000000000000000000000000000009A :10066000000000000000000000000000000000008A :10067000000000000000000000000000000000007A :10068000000000000000000000000000000000006A -:100690000000000000000000000000000000F0F07A +:10069000410000E00000000A00000000000000002F :1006A000000000000000000000000000000000004A :1006B000000000000000000000000000000000003A :1006C000000000000000000000000000000000002A @@ -94344,7 +94344,7 @@ :1006F00000000000000000000000000000000000FA :1007000000000000000000000000000000000000E9 :1007100000000000000000000000000000000000D9 -:10072000F0F00000000000000000000000000000E9 +:1007200000000000000000000000000000000000C9 :1007300000000000000000000000000000000000B9 :1007400000000000000000000000000000000000A9 :100750000000000000000000000000000000000099 @@ -94359,32 +94359,32 @@ :1007E0000000000000000000000000000000000009 :1007F00000000000000000000000000000000000F9 :1008000000000000000000000000000000000000E8 -:1008100000000000000000000000000000000F0FBA -:100820000000FFFF000000000000000000000000CA -:1008300000003F3F3F3F00000000000000000000BC +:1008100000000000000000000000000000000000D8 +:1008200000000000000000000000000000000000C8 +:1008300000000000000000000000000000000000B8 :1008400000000000000000000000000000000000A8 :100850000000000000000000000000000000000098 :100860000000000000000000000000000000000088 :100870000000000000000000000000000000000078 :100880000000000000000000000000000000000068 :100890000000000000000000000000000000000058 -:1008A0000F0F00000000000000000000000000002A -:1008B000000000000303030300000000000000002C +:1008A0000000000000000000000000000000000048 +:1008B0000000000000000000000000000000000038 :1008C0000000000000000000000000000000000028 :1008D0000000000000000000000000000000000018 :1008E0000000000000000000000000000000000008 :1008F00000000000000000000000000000000000F8 :1009000000000000000000000000000000000000E7 :1009100000000000000000000000000000000000D7 -:10092000000005002A00054000A8000000000000AB -:10093000000000610007800D2000000000000000A2 +:1009200000000000000000000000000000000000C7 +:1009300000000000000000000000000000000000B7 :1009400000000000000000000000000000000000A7 :100950000000000000000000000000000000000097 :100960000000000000000000000000000000000087 :100970000000000000000000000000000000000077 :100980000000000000000000000000000000000067 -:100990000000000000000000000000000000000057 -:1009A0000000000000000000000000000000000047 +:1009900000000000000000000000000000610007EF +:1009A000800D0000000000000000000000000000BA :1009B0000000000000000000000000000000000037 :1009C0000000000000000000000000000000000027 :1009D0000000000000000000000000000000000017 @@ -94417,70 +94417,70 @@ :100B80000000000000000000000000000000000065 :100B90000000000000000000000000000000000055 :100BA0000000000000000000000000000000000045 -:100BB00000000000200020002000200000000000B5 -:100BC00000002000880000000000000002008400F7 -:100BD000000000002000200020002000880000000D -:100BE00000002000000000000000000000022000C3 -:100BF0002000000000002000200020002000200035 -:100C00000000000020000000000084000000000040 -:100C10002000000000002000200020002000000034 -:100C200000000000200000000000000000000000A4 -:100C300000000000040000000000000000000000B0 -:100C4000000000000000000000000000040000029E -:100C50000000000000000000000000000000000094 -:100C60000000000000000000000000000000000084 -:100C70004000000000000000000000000000000430 -:100C8000000200020002000000000000400000001E -:100C90000000000000000000000000000000000054 -:100CA000090000000000000000000000000000003B -:100CB0000000000000000000000000000000001024 +:100BB0000000000000000000000400000000000031 +:100BC000000000000000000000040004000000001D +:100BD0000000000000000000000000000000000015 +:100BE00000000000000000000004000400000000FD +:100BF00000000000000000000000000000000000F5 +:100C000000000000000000000000000200000000E2 +:100C100000000000000000000000000400000000D0 +:100C200000000000000000000000000400040000BC +:100C300000000000000000000000000000000000B4 +:100C400000000000000000000000000000000000A4 +:100C50000000000000000000000000020000000092 +:100C60000000000000000000000000000002000082 +:100C70000000000000000000000000000002000270 +:100C8000000000000000000000000000400400041C +:100C90000000000000000000000000004002000012 +:100CA0000000000200000000000000000000000240 +:100CB0000000000000000000000000000000000034 :100CC0000000000000000000000000000000000024 -:100CD0000000000000000000000000000000001004 +:100CD00000000000001000100000000000000000F4 :100CE0000000000000000000000000000000000004 :100CF00000000000000000000000000000000000F4 -:100D000000000000000000000000000000000000E3 +:100D000002000000000000000000000000000000E1 :100D100000000000000000000000000000000000D3 -:100D200000000000000000000000000000000000C3 -:100D300000000004000400000000000000080000A3 -:100D4000000004020000000000000200000000009B -:100D5000000800000000000000000000001000007B -:100D60000000000000000000000000000000000083 -:100D70000008000000000000000002000000000069 -:100D80000000000000000000000000000000000063 -:100D9000000000080000000000000000000000004B -:100DA0000000000000000000000000000000000043 -:100DB000000000080000000000000000000000002B +:100D200002000000000000000000000000000000C1 +:100D300000000000000000000000000400040000AB +:100D40000000000000000000000000080008000093 +:100D50000002000000000000000000000000000091 +:100D6000000000000000000000000002000200007F +:100D70000200000000000000000000000000000071 +:100D8000040004000000000000000000000000005B +:100D90000000020000000000000000000000000051 +:100DA000040004000000000000000000000000003B +:100DB0000000020000000000000000000000000031 :100DC0000000000000000000000000000000000023 :100DD0000000000000000000000000000000000013 -:100DE0000000000000000000000000000000000003 -:100DF0000000000000000000000000000000820071 -:100E00000000000000002000000040000000400042 -:100E100000000000000000000000000000002000B2 -:100E20000000200020000000000000000000000082 -:100E300000000000000000000000000000000300AF -:100E40000000000000000000000000000900000099 +:100DE00004000000000000000000000000000000FF +:100DF00000000000000000000000000000000000F3 +:100E000000000000000000000000000000000000E2 +:100E100000000000000004000000000000000000CE +:100E200000000000000000000000000000000000C2 +:100E300000000000000000000000000000000000B2 +:100E400000000000000000000000000000000000A2 :100E50000000000000000000000000000000000092 :100E60000000000000000000000000000000000082 :100E70000000000000000000000000000000000072 :100E80000000000000000000000000000000000062 :100E90000000000000000000000000000000000052 -:100EA00080000000800080000000000000000000C2 +:100EA000000000000000000000080000000000003A :100EB0000000000000000000000000000000000032 -:100EC0001000000000000000000000000000000012 -:100ED000000000000000000004000000000000000E +:100EC0000000000000000000000000000000000022 +:100ED0000000000000000000000000000000000012 :100EE0000000000000000000000000000000000002 -:100EF00008000000000000000000000000000000EA +:100EF00000000000000000000000000000000000F2 :100F000000000000000000000000000000000000E1 -:100F100000000000000000000000080000000000C9 +:100F100000000000000000000000000000000000D1 :100F200000000000000000000000000000000000C1 -:100F30000000000000000800C000000000000000E9 -:100F4000000003000000000000000000000000009E -:100F50000000080000000000000000000000000089 +:100F300000000000000000000000000000000000B1 +:100F400000000000000000000000000000000000A1 +:100F50000000000000000000000000000000000091 :100F60000000000000000000000000000000000081 -:100F7000000000000000000000000000000000046D +:100F70000000000000000000000000000000000071 :100F80000000000000000000000000000000000061 :100F90000000000000000000000000000000000051 -:100FA00000000000008400000000000000000000BD +:100FA0000000000000000000000000000000000041 :100FB0000000000000000000000000000000000031 :100FC0000000000000000000000000000000000021 :100FD0000000000000000000000000000000000011 @@ -94488,24 +94488,24 @@ :100FF00000000000000000000000000000000000F1 :1010000000000000000000000000000000000000E0 :1010100000000000000000000000000000000000D0 -:101020000000000000000000008000000000080038 +:1010200000000000000000000000000000000000C0 :1010300000000000000000000000000000000000B0 -:1010400000000000008400000000000000004000DC -:10105000000000900084000000000000000000007C +:1010400000000000000000000000000000000000A0 +:101050000000000000000000000000000000000090 :101060000000000000000000000000000000000080 :101070000000000000000000000000000000000070 :101080000000000000000000000000000000000060 :101090000000000000000000000000000000000050 -:1010A000000000000000000000000004000000003C -:1010B0000000000000000000000000000000000030 -:1010C000000000000000000000000000000000021E -:1010D000000000000000000000000000000000020E +:1010A0000000000000000000000000000000000040 +:1010B00000000000000000000000000000900000A0 +:1010C0000000000000000000000000000000000020 +:1010D0000000000000000000000000000000000010 :1010E0000000000000000000000000000000000000 :1010F00000000000000000000000000000000000F0 :1011000000000000000000000000000000000000DF :1011100000000000000000000000000000000000CF -:1011200000000200000000000000000000000000BD -:1011300000000004000000000000000000000000AB +:1011200000000000000000000000000000000000BF +:1011300000000000000000000000000000000000AF :10114000000000000000000000000000000000009F :10115000000000000000000000000000000000008F :10116000000000000000000000000000000000007F @@ -94537,7 +94537,7 @@ :1013000000000000000000000000000000000000DD :1013100000000000000000000000000000000000CD :1013200000000000000000000000000000000000BD -:1013300000000005000000020000000000000000A6 +:1013300000000000000000000000000000000000AD :10134000000000000000000000000000000000009D :10135000000000000000000000000000000000008D :10136000000000000000000000000000000000007D @@ -94545,7 +94545,7 @@ :10138000000000000000000000000000000000005D :10139000000000000000000000000000000000004D :1013A000000000000000000000000000000000003D -:1013B000000000000000000000010000000000002C +:1013B000000000000000000000000000000000002D :1013C000000000000000000000000000000000001D :1013D000000000000000000000000000000000000D :1013E00000000000000000000000000000000000FD @@ -94553,7 +94553,7 @@ :1014000000000000000000000000000000000000DC :1014100000000000000000000000000000000000CC :1014200000000000000000000000000000000000BC -:10143000000000000000000082000000000000002A +:1014300000000000000000000000000000000000AC :10144000000000000000000000000000000000009C :10145000000000000000000000000000000000008C :10146000000000000000000000000000000000007C @@ -94561,7 +94561,7 @@ :10148000000000000000000000000000000000005C :10149000000000000000000000000000000000004C :1014A000000000000000000000000000000000003C -:1014B0000000000000000000000000000000040028 +:1014B000000000000000000000000000000000002C :1014C000000000000000000000000000000000001C :1014D000000000000000000000000000000000000C :1014E00000000000000000000000000000000000FC @@ -94569,7 +94569,7 @@ :1015000000000000000000000000000000000000DB :1015100000000000000000000000000000000000CB :1015200000000000000000000000000000000000BB -:1015300000000000000000000000000900000000A2 +:1015300000000000000000000000000000000000AB :10154000000000000000000000000000000000009B :10155000000000000000000000000000000000008B :10156000000000000000000000000000000000007B @@ -94585,8 +94585,8 @@ :1016000000000000000000000000000000000000DA :1016100000000000000000000000000000000000CA :1016200000000000000000000000000000000000BA -:101630000000000000000000000000000000810029 -:1016400002E00000000000000000000000000000B8 +:1016300000000000000000000000000000000000AA +:10164000000000000000000000000000000000009A :10165000000000000000000000000000000000008A :10166000000000000000000000000000000000007A :10167000000000000000000000000000000000006A @@ -94626,7 +94626,7 @@ :101890000000000000000000000000000000000048 :1018A0000000000000000000000000000000000038 :1018B0000000000000000000000000000000000028 -:1018C000000000000000000000650006800F2000FE +:1018C0000000000000000000000000000000000018 :1018D0000000000000000000000000000000000008 :1018E00000000000000000000000000000000000F8 :1018F00000000000000000000000000000000000E8 @@ -94661,96 +94661,96 @@ :101AC0000000000000000000000000000000000016 :101AD0000000000000000000000000000000000006 :101AE00000000000000000000000000000000000F6 -:101AF0002000200020000000000000000000000086 -:101B0000040000000000200084000000000000002D -:101B100020802002208000800000000000000000E3 -:101B20002000000000002000000120000000000054 -:101B30000004200020002000000000000000000041 -:101B40000000200000000000200020000000000035 -:101B50000000200020002000000000000000000025 -:101B60000000000000000000200000000000000055 +:101AF00000000000000000000000000000000000E6 +:101B000000000000000000000000000000000000D5 +:101B100000000000000000000000000000000000C5 +:101B200000000000000000040000000000000000B1 +:101B300000000000000000000000000000000000A5 +:101B40000000000000000000000400000000000091 +:101B50000000000000000000000000000000000085 +:101B60000000000000000000000000000000000075 :101B70000000000000000000000000000000000065 -:101B800000000000000000000084000000000000D1 -:101B9000000000020001000200020000000000003E -:101BA0000000000000000002000000000000000033 -:101BB0000000000000000000000000000002000221 -:101BC000000000020000000000000000000000C053 -:101BD0000000000000000040004000000000000085 -:101BE00000000000000000000002000000000000F3 +:101B80000000000000000000000000000000000055 +:101B90000000004000000000000000000000000005 +:101BA000000400000000000000020000000000002F +:101BB0000000000000000000000000000000000025 +:101BC0000000000000000000000000000000000015 +:101BD0000000000400000000000000000000000001 +:101BE00000020000000000000000000000000000F3 :101BF00000000000000000000000000000000000E5 -:101C000000000200000000000010021000000000B0 +:101C000000000000000000000000000000000000D4 :101C100000000000000000000000000000000000C4 -:101C20000000000000009000000000000000000024 +:101C200000000000000000000000000000000000B4 :101C300000000000000000000000000000000000A4 :101C40000000000000000000000000000000000094 :101C50000000000000000000000000000000000084 :101C60000000000000000000000000000000000074 :101C70000000000000000000000000000000000064 -:101C80000000000000000000000000000000000054 +:101C80000000000000000000000000000200000052 :101C90000000000000000000000000000000000044 :101CA0000000000000000000000000000000000034 :101CB0000000000000000000000000000000000024 :101CC0000000000000000000000000000000000014 -:101CD00004000400000004000000000000000000F8 +:101CD0000000000000000000000000000000000004 :101CE00000000000000000000000000000000000F4 :101CF00000000000000000000000000000000000E4 -:101D00000000000040000000900000000000000003 -:101D100000000000000000000000000000000004BF +:101D000000000000000000000000000000000000D3 +:101D100000000000000000000000000000000000C3 :101D200000000000000000000000000000000000B3 :101D300000000000000000000000000000000000A3 -:101D4000000000000000000004000000000000008F +:101D40000000000000000000000000000000000093 :101D50000000000000000000000000000000000083 :101D60000000000000000000000000000000000073 :101D70000000000000000000000000000000000063 :101D80000000000000000000000000000000000053 :101D90000000000000000000000000000000000043 -:101DA0000001000000000000000000000000000032 +:101DA0000000000000000000000000000000000033 :101DB0000000000000000000000000000000000023 -:101DC000000000000000000000000088000000008B +:101DC0000000000000000000000000000000000013 :101DD0000000000000000000000000000000000003 :101DE00000000000000000000000000000000000F3 :101DF00000000000000000000000000000000000E3 :101E000000000000000000000000000000000000D2 -:101E100008000000000000000000000000000000BA -:101E200000000100000000000000000000000000B1 +:101E100000000000000000000000000000000000C2 +:101E200000000000000000000000000000000000B2 :101E300000000000000000000000000000000000A2 :101E40000000000000000000000000000000000092 :101E50000000000000000000000000000000000082 :101E60000000000000000000000000000000000072 :101E70000000000000000000000000000000000062 -:101E8000000000000800000000000000000000004A -:101E90000000000000A000000000000000000000A2 -:101EA0000000000020000000000000000000000012 +:101E80000000000000000000000000000000000052 +:101E90000000000000000000000000000000000042 +:101EA0000000000000000000000000000000000032 :101EB0000000000000000000000000000000000022 :101EC0000000000000000000000000000000000012 -:101ED000000000000000000000C000000000000042 +:101ED0000000000000000000000000000000000002 :101EE00000000000000000000000000000000000F2 :101EF00000000000000000000000000000000000E2 :101F000000000000000000000000000000000000D1 -:101F1000A000000000000000000000000000000021 +:101F100000000000000000000000000000000000C1 :101F200000000000000000000000000000000000B1 :101F300000000000000000000000000000000000A1 :101F40000000000000000000000000000000000091 :101F50000000000000000000000000000000000081 :101F60000000000000000000000000000000000071 :101F70000000000000000000000000000000000061 -:101F8000000000000000000000000000000004004D +:101F80000000000000000000000000000000000051 :101F90000000000000000000000000000000000041 :101FA0000000000000000000000000000000000031 :101FB0000000000000000000000000000000000021 :101FC0000000000000000000000000000000000011 :101FD0000000000000000000000000000000000001 :101FE00000000000000000000000000000000000F1 -:101FF00000000000000000000000000000000000E1 -:1020000000000000000000000000000008000000C8 +:101FF00000000000000000000400000000000000DD +:1020000000000000000000000000000000000000D0 :1020100000000000000000000000000000000000C0 -:102020000000C000000000000000000000000000F0 +:1020200000000000000000000000000000000000B0 :1020300000000000000000000000000000000000A0 :102040000000000000000000000000000000000090 :102050000000000000000000000000000000000080 :102060000000000000000000000000000000000070 -:102070000000000000000800000000000000000058 -:10208000000000000000000000000000000000024E +:102070000000000000000000000000000000000060 +:102080000000000000000000000000000000000050 :102090000000000000000000000000000000000040 :1020A0000000000000000000000000000000000030 :1020B0000000000000000000000000000000000020 @@ -94760,7 +94760,7 @@ :1020F00000000000000000000000000000000000E0 :1021000000000000000000000000000000000000CF :1021100000000000000000000000000000000000BF -:1021200000000000000000000000000101000000AD +:1021200000000000000000000000000000000000AF :10213000000000000000000000000000000000009F :10214000000000000000000000000000000000008F :10215000000000000000000000000000000000007F @@ -94768,15 +94768,15 @@ :10217000000000000000000000000000000000005F :10218000000000000000000000000000000000004F :10219000000000000000000000000000000000003F -:1021A0000000000000000000000000100010080007 -:1021B00000200000000000000000000000000000FF +:1021A000000000000000000000000000000000002F +:1021B000000000000000000000000000000000001F :1021C000000000000000000000000000000000000F :1021D00000000000000000000000000000000000FF :1021E00000000000000000000000000000000000EF :1021F00000000000000000000000000000000000DF :1022000000000000000000000000000000000000CE :1022100000000000000000000000000000000000BE -:10222000000000000000000000000000100010008E +:1022200000000000000000000000000000000000AE :10223000000000000000000000000000000000009E :10224000000000000000000000000000000000008E :10225000000000000000000000000000000000007E @@ -94785,7 +94785,7 @@ :10228000000000000000000000000000000000004E :10229000000000000000000000000000000000003E :1022A000000000000000000000000000000000002E -:1022B000010000000000000000000000000000001D +:1022B000000000000000000000000000000000001E :1022C000000000000000000000000000000000000E :1022D00000000000000000000000000000000000FE :1022E00000000000000000000000000000000000EE @@ -94793,7 +94793,7 @@ :1023000000000000000000000000000000000000CD :1023100000000000000000000000000000000000BD :1023200000000000000000000000000000000000AD -:10233000000000010000000100000000000000009B +:10233000000000000000000000000000000000009D :10234000000000000000000000000000000000008D :10235000000000000000000000000000000000007D :10236000000000000000000000000000000000006D @@ -94801,7 +94801,7 @@ :10238000000000000000000000000000000000004D :10239000000000000000000000000000000000003D :1023A000000000000000000000000000000000002D -:1023B00000000010001000000511000000000000E7 +:1023B000000000000000000000000000000000001D :1023C000000000000000000000000000000000000D :1023D00000000000000000000000000000000000FD :1023E00000000000000000000000000000000000ED @@ -94809,7 +94809,7 @@ :1024000000000000000000000000000000000000CC :1024100000000000000000000000000000000000BC :1024200000000000000000000000000000000000AC -:10243000000000001000400000001110000000002B +:10243000000000000000000000000000000000009C :10244000000000000000000000000000000000008C :10245000000000000000000000000000000000007C :10246000000000000000000000000000000000006C @@ -94817,7 +94817,7 @@ :10248000000000000000000000000000000000004C :10249000000000000000000000000000000000003C :1024A000000000000000000000000000000000002C -:1024B000000000000000010000000000010000001A +:1024B000000000000000000000000000000000001C :1024C000000000000000000000000000000000000C :1024D00000000000000000000000000000000000FC :1024E00000000000000000000000000000000000EC @@ -94825,7 +94825,7 @@ :1025000000000000000000000000000000000000CB :1025100000000000000000000000000000000000BB :1025200000000000000000000000000000000000AB -:102530000000000000000000000000E000000000BB +:10253000000000000000000000000000000000009B :10254000000000000000000000000000000000008B :10255000000000000000000000000000000000007B :10256000000000000000000000000000000000006B @@ -94874,7 +94874,7 @@ :1028100000000000000000000000000000000000B8 :1028200000000000000000000000000000000000A8 :102830000000000000000000000000000000000098 -:102840000000000000610007000D00000000000013 +:102840000000000000000000000000000000000088 :102850000000000000000000000000000000000078 :102860000000000000000000000000000000000068 :102870000000000000000000000000000000000058 @@ -94882,7 +94882,7 @@ :102890000000000000000000000000000000000038 :1028A0000000000000000000000000000000000028 :1028B0000000000000000000000000000000000018 -:1028C000000000000000FF003C3C30303F3F0000B3 +:1028C0000000000000000000000000000000000008 :1028D00000000000000000000000000000000000F8 :1028E00000000000000000000000000000000000E8 :1028F00000000000000000000000000000000000D8 @@ -94890,7 +94890,7 @@ :1029100000000000000000000000000000000000B7 :1029200000000000000000000000000000000000A7 :102930000000000000000000000000000000000097 -:102940000000000000000000FF003C3C30303F3F32 +:102940000000000000000000000000000000000087 :102950000000000000000000000000000000000077 :102960000000000000000000000000000000000067 :102970000000000000000000000000000000000057 @@ -94898,106 +94898,106 @@ :102990000000000000000000000000000000000037 :1029A0000000000000000000000000000000000027 :1029B0000000000000000000000000000000000017 -:1029C000000000000000000000003CFF3C00ACAC38 -:1029D000ACAC00000000000000000000000000009F +:1029C0000000000000000000000000000000000007 +:1029D00000000000000000000000000000000000F7 :1029E00000000000000000000000000000000000E7 :1029F00000000000000000000000000000000000D7 :102A000000000000000000000000000000000000C6 :102A100000000000000000000000000000000000B6 :102A200000000000000000000000000000000000A6 :102A30000000000000000000000000000000000096 -:102A40000000000000000000000000003CFF3C000F -:102A5000ACACACAC000000000000000000000000C6 +:102A40000000000000000000000000000000000086 +:102A50000000000000000000000000000000000076 :102A60000000000000000000000000000000000066 :102A70000000000000000000000000000000000056 :102A80000000000000000000000000000000000046 :102A90000000000000000000000000000000000036 -:102AA00000000000000000000000000020002000E6 -:102AB0002000200020000002000200000000200092 -:102AC00000000000000004000000000020000400DE -:102AD0002000200020000000000000000000000096 -:102AE00000000000000000032000000000002000A3 -:102AF000200000000000880000000000000000002E -:102B00000080008000000082200000000000200003 -:102B10002000000000002000000000000000000075 -:102B200000000000000000000000000000000000A5 +:102AA0000000000000000000000000000000000026 +:102AB000000000040004000000000000000000020C +:102AC0000002000400000000000000000000000000 +:102AD00000000004000400000000000000000000EE +:102AE00000000000000000000000000000000000E6 +:102AF00000000000000400040000000000000000CE +:102B000000000000000000000000000000000000C5 +:102B100000000000000400040000000000000000AD +:102B200000000000000400000000000000000000A1 :102B30000000000000000000000000000000000095 -:102B40000002000000000000000000000000000083 -:102B50000000000000000000400000000000000035 -:102B60000000000000020000000000000000000261 -:102B70000000000000004000000000000000000213 -:102B800000000020002000000020000000000000E5 -:102B90000000000000000000000000000000000035 -:102BA0000000000000000000000000000000000025 -:102BB0000000000000000000000000000000000015 -:102BC00000090000000000000010000000000000EC -:102BD00000000000000000000000000000000000F5 +:102B40000000000000000002000000000000000083 +:102B50000000000000000000000000000000000075 +:102B60000000000200000000000000000000000063 +:102B70000000000000004000000000000000000015 +:102B80000000000000004002000000000000000003 +:102B9000000000000000000800000000000000002D +:102BA0000000000000000002000000000000000023 +:102BB0000000000000000000000000000000001005 +:102BC00000100000000000000000000000000000F5 +:102BD00000000000000000000000020002000000F1 :102BE00000000000000000000000000000000000E5 -:102BF00002000000000000000000000000000000D3 -:102C00000000040090000000000000000000000030 -:102C100000000000000000000000000000000000B4 -:102C200000000000000000000000000000000000A4 -:102C30000000000000000000000000000000000094 +:102BF00000000000000000000000040000000000D1 +:102C000000000000000000000000040000000000C0 +:102C100000000000000000000000040000000000B0 +:102C2000000000000000000004000400000000009C +:102C3000000000000000000000000008000000008C :102C40000000000000000000000000000000000084 -:102C50000000000000000000000000000000000074 +:102C5000000000000000000000000008000000006C :102C60000000000000000000000000000000000064 -:102C70000000000000000000000000000000000054 -:102C80000000000000000900090009000900000020 +:102C70000000000000000000000000000002000052 +:102C80000000000000000000000004000000000040 :102C90000000000000000000000000000000000034 -:102CA0000000000000000000000000000000000024 -:102CB00000000000000000000000000000002000F4 +:102CA0000000000000000000000000000200000022 +:102CB0000000000000000000000000000000000014 :102CC0000000000000000000000000000000000004 :102CD00000000000000000000000000000000000F4 :102CE00000000000000000000000000000000000E4 :102CF00000000000000000000000000000000000D4 -:102D000000000000040000000400000001000000BA +:102D000000000000000000000000000000000000C3 :102D100000000000000000000000000000000000B3 :102D200000000000000000000000000000000000A3 :102D30000000000000000000000000000000000093 -:102D40008000000000000000000000000000000003 -:102D500000000000000003000000000000000084EC -:102D6000000400000000002000000000000000003F +:102D40000000000000000000000000000000000083 +:102D50000000000000000000000000000000000073 +:102D60000000000000000000000000000000000063 :102D70000000000000000000000000000000000053 -:102D8000000000000000000000000000000004003F +:102D80000000000000000000000000000000000043 :102D90000000000000000000000000000000000033 :102DA0000000000000000000000000000000000023 :102DB0000000000000000000000000000000000013 -:102DC00000000000000000004000000000000000C3 +:102DC0000000000000000000000000000000000003 :102DD00000000000000000000000000000000000F3 -:102DE00000000000000000000000080000000000DB -:102DF000C000000000000000000000008200080089 -:102E000008000800000000000000000000000000B2 +:102DE00000000000000000000000000000000000E3 +:102DF00000000000000000000000000000000000D3 +:102E000000000000000000000000000000000000C2 :102E100000000000000000000000000000000000B2 :102E200000000000000000000000000000000000A2 :102E30000000000000000000000000000000000092 :102E40000000000000000000000000000000000082 :102E50000000000000000000000000000000000072 -:102E60000000000000000000000000000000000062 +:102E60000000000000000000000000400000000022 :102E70000000000000000000000000000000000052 :102E80000000000000000000000000000000000042 :102E90000000000000000000000000000000000032 :102EA0000000000000000000000000000000000022 :102EB0000000000000000000000000000000000012 -:102EC0000000000000000080000000000000000082 +:102EC0000000000000000000000000000000000002 :102ED00000000000000000000000000000000000F2 -:102EE0000000000000009000000000000000000052 +:102EE00000000000000000000000000000000000E2 :102EF00000000000000000000000000000000000D2 :102F000000000000000000000000000000000000C1 :102F100000000000000000000000000000000000B1 :102F200000000000000000000000000000000000A1 :102F30000000000000000000000000000000000091 -:102F4000000000000000000000020000000000007F +:102F40000000000000000000000000000000000081 :102F50000000000000000000000000000000000071 -:102F600008000000000000880000000000000000D1 +:102F60000000000000000000000000000000000061 :102F70000000000000000000000000000000000051 -:102F80000000000000000000000000200000000021 +:102F80000000000000000000000000000000000041 :102F90000000000000000000000000000000000031 :102FA0000000000000000000000000000000000021 :102FB0000000000000000000000000000000000011 :102FC0000000000000000000000000000000000001 :102FD00000000000000000000000000000000000F1 :102FE00000000000000000000000000000000000E1 -:102FF00000020000000000000000000000000000CF +:102FF00000000000000000000000000000000000D1 :1030000000000000000000000000000000000000C0 :1030100000000000000000000000000000000000B0 :1030200000000000000000000000000000000000A0 @@ -95010,8 +95010,8 @@ :103090000000000000000000000000000000000030 :1030A0000000000000000000000000000000000020 :1030B0000000000000000000000000000000000010 -:1030C00000000000000000000000000000000001FF -:1030D00000010000000000000000000000000000EF +:1030C0000000000000000000000000000000000000 +:1030D00000000000000000000000000000000000F0 :1030E00000000000000000000000000000000000E0 :1030F00000000000000000000000000000000000D0 :1031000000000000000000000000000000000000BF @@ -95019,7 +95019,7 @@ :10312000000000000000000000000000000000009F :10313000000000000000000000000000000000008F :10314000000000000000000000000000000000007F -:103150000010001008000004000000000000000043 +:10315000000000000000000000000000000000006F :10316000000000000000000000000000000000005F :10317000000000000000000000000000000000004F :10318000000000000000000000000000000000003F @@ -95040,23 +95040,23 @@ :10327000000000000000000000000000000000004E :10328000000000000000000000000000000000003E :10329000000000000000000000000000000000002E -:1032A000004000000040000000000000000000009E +:1032A000000000000000000000000000000000001E :1032B000000000000000000000000000000000000E :1032C00000000000000000000000000000000000FE -:1032D00000000000000000000100000000000000ED +:1032D00000000000000000000000000000000000EE :1032E00000000000000000000000000000000000DE :1032F00000000000000000000000000000000000CE :1033000000000000000000000000000000000000BD :1033100000000000000000000000000000000000AD -:10332000000000004000000000000000000000005D +:10332000000000000000000000000000000000009D :10333000000000000000000000000000000000008D :10334000000000000000000000000000000000007D -:10335000000000000000000000004000000000002D +:10335000000000000000000000000000000000006D :10336000000000000000000000000000000000005D :10337000000000000000000000000000000000004D :10338000000000000000000000000000000000003D :10339000000000000000000000000000000000002D -:1033A00000004000000000000000000000000000DD +:1033A000000000000000000000000000000000001D :1033B000000000000000000000000000000000000D :1033C00000000000000000000000000000000000FD :1033D00000000000000000000000000000000000ED @@ -95064,7 +95064,7 @@ :1033F00000000000000000000000000000000000CD :1034000000000000000000000000000000000000BC :1034100000000000000000000000000000000000AC -:103420000000000000040000000000000000000098 +:10342000000000000000000000000000000000009C :10343000000000000000000000000000000000008C :10344000000000000000000000000000000000007C :10345000000000000000000000000000000000006C @@ -95076,11 +95076,11 @@ :1034B000000000000000000000000000000000000C :1034C00000000000000000000000000000000000FC :1034D00000000000000000000000000000000000EC -:1034E00000E00000000000000000000000000000FC +:1034E00000000000000000000000000000000000DC :1034F00000000000000000000000000000000000CC :1035000000000000000000000000000000000000BB :1035100000000000000000000000000000000000AB -:103520000000000000000000008100000700000013 +:10352000000000000000000000000000000000009B :10353000000000000000000000000000000000008B :10354000000000000000000000000000000000007B :10355000000000000000000000000000000000006B @@ -95116,12 +95116,12 @@ :103730000000000000000000000000000000000089 :103740000000000000000000000000000000000079 :103750000000000000000000000000000000000069 -:10376000000000000000000000610003000D0000E8 +:103760000000000000000000000000000000000059 :103770000000000000000000000000000000000049 :103780000000000000000000000000000000000039 :103790000000000000000000000000000000000029 :1037A0000000000000000000000000000000000019 -:1037B000000005180A20050005A000000000000018 +:1037B0000000000000000000000000000000000009 :1037C00000000000000000000000000000000000F9 :1037D00000000000000000000000000000000000E9 :1037E00000000000000000000000000000000000D9 @@ -95140,8 +95140,8 @@ :1038B0000000000000000000000000000000000008 :1038C00000000000000000000000000000000000F8 :1038D00000000000000000000000000000000000E8 -:1038E0000000000000000000000000000000FFBE1B -:1038F0007D3C00000000000000000000000000000F +:1038E00000000000000000000000000000000000D8 +:1038F00000000000000000000000000000000000C8 :1039000000000000000000000000000000000000B7 :1039100000000000000000000000000000000000A7 :103920000000000000000000000000000000000097 @@ -95149,47 +95149,47 @@ :103940000000000000000000000000000000000077 :103950000000000000000000000000000000000067 :103960000000000000000000000000000000000057 -:10397000FFBE7D3C000000000000000000000000D1 +:103970000000000000000000000000000000000047 :103980000000000000000000000000000000000037 :103990000000000000000000000000000000000027 :1039A0000000000000000000000000000000000017 :1039B0000000000000000000000000000000000007 :1039C00000000000000000000000000000000000F7 :1039D00000000000000000000000000000000000E7 -:1039E0000000200000000000000000000000200097 -:1039F0000000000000000000000020002000000087 -:103A00002000200000000000000000000000200056 -:103A10004000000000000000000020002000000026 -:103A20002000000020000000000000000000000056 -:103A30002000200000000000000000042000200002 -:103A40000000200020000000000000000000000036 -:103A500020002000000000000000000020002000E6 +:1039E00000000000000000000000000000000000D7 +:1039F00000000000000000000000000000000000C7 +:103A000040000000400040000000000000000000F6 +:103A100000000000000000000000000000000000A6 +:103A20002000000000002000200000040000000032 +:103A30000000000400000000000000000000000082 +:103A400000002000400020002000000000000000D6 +:103A5000000000040000000000000004000000005E :103A60000000200000000000000000000000000036 -:103A70000000000000000000000000000000000046 +:103A700000400000000000000000000000024002C2 :103A80000000000000000000000000000000000036 -:103A90000002000000000000000000000000000024 +:103A90000000000000000000000000000000000026 :103AA0000000000000000000000000000000000016 -:103AB0000000000000000000000000020000000202 -:103AC00000024000100200000000000000000000A2 -:103AD00000000002000000000000000000000000E4 -:103AE0000000400000000000000000000000000096 -:103AF00000000010001000000000000000000000A6 -:103B000000000000000000000000000000000200B3 -:103B100002000000000000000000000000000000A3 -:103B20000000000000000000000000000040000055 -:103B30000000000000000040000000000000000045 +:103AB0000000000000000000000000000000000006 +:103AC00000000000000000000000000000000000F6 +:103AD00000000000000000000000000200000000E4 +:103AE00000020000000200000000000004000000CE +:103AF00000000000000000000000000000000000C6 +:103B000000000000000000000000000000000000B5 +:103B10000000000090000000000000000000000015 +:103B20000000000000000000000000000000000095 +:103B30000000000000000000000000000000000085 :103B40000000000000000000000000000000000075 -:103B50000000000000000000000000000000040061 +:103B50000000000000000000000000000000000065 :103B60000000000000000000000000000000000055 :103B70000000000000000000000000000000000045 :103B80000000000000000000000000000000000035 -:103B90000000000000000000000000000000000025 +:103B90000000000000000400000000000000000021 :103BA0000000000000000000000000000000000015 -:103BB0000000000000000000000000000000020003 +:103BB0000000000000000000000000000000000005 :103BC00000000000000000000000000000000000F5 -:103BD00000000000000000000000040004000000DD +:103BD00000000000000000000000000000000000E5 :103BE00000000000000000000000000000000000D5 -:103BF0000000000000000000000000000000400085 +:103BF00000000000000000000000000000000000C5 :103C000000000000000000000000000000000000B4 :103C100000000000000000000000000000000000A4 :103C20000000000000000000000000000000000094 @@ -95230,8 +95230,8 @@ :103E50000000000000000000000000000000000062 :103E60000000000000000000000000000000000052 :103E70000000000000000000000000000000000042 -:103E80000000000011000000000009000000000018 -:103E90000000000000000000000000000020000002 +:103E80000000000000000000000000000000000032 +:103E90000000000000000000000000000000000022 :103EA0000000000000000000000000000000000012 :103EB0000000000000000000000000000000000002 :103EC00000000000000000000000000000000000F2 @@ -95408,42 +95408,42 @@ :104970000000000000000000000000000000000037 :104980000000000000000000000000000000000027 :104990000000000000000000000000000000000017 -:1049A00000002000000400042000000000000000BF -:1049B00000000000000000002000200000000000B7 -:1049C00000002000000000002000000000000000A7 -:1049D0004000000000000000200020000000000057 -:1049E0000003000020000000000020000000000084 -:1049F0000000200000000000000020000000000077 -:104A00000000000020000000000020000400000062 -:104A10000000200000000000000020000000000056 -:104A20000000000000000000000000000000000086 -:104A300000000090000000000000000000000000E6 -:104A40000000400200000000000000000000000024 -:104A50000000000000000000000000000000400016 -:104A60000000000000000000000000000000000046 -:104A700000000000009000020002000000000000A2 -:104A80000000000000000000000000000000000026 -:104A90000000000000000000000000000000000016 -:104AA0000000000000000000000000000400000002 -:104AB00000000010000000000000000000000000E6 +:1049A00000000000000000000000000400040000FF +:1049B00000000000000000000000000000040004EF +:1049C00000000000000000000000000000040000E3 +:1049D00000000000000000000000000000040004CF +:1049E00000000000000000000000000000000000C7 +:1049F00000000000000000000000000000000002B5 +:104A000000020000000000000000000000000000A4 +:104A10000000000000000000000000000000000294 +:104A20000004000000000000000000000000000082 +:104A30000000000000000000000000000000000076 +:104A40000008000000000000000000000004000258 +:104A5000000000000000000000000004000440000E +:104A6000000800000000000000000000000000003E +:104A700040020002000000000000000000000000F2 +:104A8000000400040000000000000000000000001E +:104A900000020000400000020000000000000000D2 +:104AA00000000008000000000800001000000000E6 +:104AB00000000000000000000000000000000000F6 :104AC00000000000000000000000000000000000E6 :104AD00000000000000000000000000000000000D6 :104AE00000000000000000000000000000000000C6 :104AF00000000000000000000000000000000000B6 :104B000000000000000000000000000000000000A5 -:104B10000000040000000100000000000000000090 -:104B200000000000000000000000000000108000F5 +:104B10000000040000000000000000000000000091 +:104B20000000000000000000000000000000000085 :104B30000000000000000000000000000000000075 -:104B40000000000000000000000000000000000065 +:104B4000000000080000000000000000000000005D :104B50000000000000000000000000000000000055 -:104B60000000000000000000000000000000000045 -:104B70000000000000000000000000000000000035 -:104B80000000000000000000000000000000000025 -:104B9000040000000000040002000000000000000B -:104BA0000000000000000000000000000000000005 -:104BB0000000000000000000000000008400000071 +:104B60000000000200020000000000000000000041 +:104B70000000000000000200000000000000000033 +:104B8000000000000000000800000000000000001D +:104B90000000000000000200000000000000000013 +:104BA0000000000000000002000000000000000003 +:104BB00000000000000000000000000000000000F5 :104BC00000000000000000000000000000000000E5 -:104BD00000000000000000000000040000000000D1 +:104BD00000000000000000000000000000000000D5 :104BE00000000000000000000000000000000000C5 :104BF00000000000000000000000000000000000B5 :104C000000000000000000000000000000000000A4 @@ -95457,45 +95457,45 @@ :104C80000000000000000000000000000000000024 :104C90000000000000000000000000000000000014 :104CA0000000000000000000000000000000000004 -:104CB00000000010000000000000000000000000E4 +:104CB00000000000000000000000000000000000F4 :104CC00000000000000000000000000000000000E4 :104CD00000000000000000000000000000000000D4 :104CE00000000000000000000000000000000000C4 :104CF00000000000000000000000000000000000B4 :104D000000000000000000000000000000000000A3 :104D10000000000000000000000000000000000093 -:104D20000000000001000000000000000000000082 -:104D30000000000000100000000000000000000063 -:104D4000000000000000000000000500000000005E +:104D20000000000000000000000000000000000083 +:104D30000000000000000000000000000000000073 +:104D40000000000000000000000000000000000063 :104D50000000000000000000000000000000000053 :104D60000000000000000000000000000000000043 :104D70000000000000000000000000000000000033 :104D80000000000000000000000000000000000023 :104D90000000000000000000000000000000000013 -:104DA00000000000000004000000000000000000FF -:104DB0000000000000000000008000000000000073 +:104DA0000000000000000000000000000000000003 +:104DB00000000000000000000000000000000000F3 :104DC00000000000000000000000000000000000E3 :104DD00000000000000000000000000000000000D3 :104DE00000000000000000000000000000000000C3 :104DF00000000000000000000000000000000000B3 :104E000000000000000000000000000000000000A2 -:104E100000000000A00000000000C0000000000032 -:104E20000000000000000020000000000000000062 -:104E30000000000000000000000000200000000052 -:104E4000000000000000040000000000000000005E +:104E10000000000000000000000000000000000092 +:104E20000000000000000000000000000000000082 +:104E30000000000000000000000000000000000072 +:104E40000000000000000000000000000000000062 :104E50000000000000000000000000000000000052 :104E60000000000000000000000000000000000042 :104E70000000000000000000000000000000000032 :104E80000000000000000000000000000000000022 :104E90000000000000000000000000000000000012 -:104EA0000000000000000000000100000000000001 -:104EB000000000008400000000000000000000006E +:104EA0000000000000000000000000000000000002 +:104EB00000000000000000000000000000000000F2 :104EC00000000000000000000000000000000000E2 :104ED00000000000000000000000000000000000D2 :104EE00000000000000000000000000000000000C2 :104EF00000000000000000000000000000000000B2 :104F000000000000000000000000000000000000A1 -:104F10000800000000000000000000000000000089 +:104F10000000000000000000000000000000000091 :104F20000000000000000000000000000000000081 :104F30000000000000000000000000000000000071 :104F40000000000000000000000000000000000061 @@ -95512,7 +95512,7 @@ :104FF00000000000000000000000000000000000B1 :1050000000000000000000000000000000000000A0 :105010000000000000000000000000000000000090 -:1050200000000000000000000000000090000000F0 +:105020000000000000000000000000000000000080 :105030000000000000000000000000000000000070 :105040000000000000000000000000000000000060 :105050000000000000000000000000000000000050 @@ -95520,7 +95520,7 @@ :105070000000000000000000000000000000000030 :105080000000000000000000000000000000000020 :105090000000000000000000000000000000000010 -:1050A000000000000000000000000000110080006F +:1050A0000000000000000000000000000000000000 :1050B00000000000000000000000000000000000F0 :1050C00000000000000000000000000000000000E0 :1050D00000000000000000000000000000000000D0 @@ -95529,7 +95529,7 @@ :10510000000000000000000000000000000000009F :10511000000000000000000000000000000000008F :10512000000000000000000000000000000000007F -:10513000008000000080000000000000000000006F +:10513000000000000000000000000000000000006F :10514000000000000000000000000000000000005F :10515000000000000000000000000000000000004F :10516000000000000000000000000000000000003F @@ -95537,31 +95537,31 @@ :10518000000000000000000000000000000000001F :10519000000000000000000000000000000000000F :1051A00000000000000000000000000000000000FF -:1051B00000000020000000020000000000000000CD -:1051C00000000000000000000100000000000000DE +:1051B00000000000000000000000000000000000EF +:1051C00000000000000000000000000000000000DF :1051D00000000000000000000000000000000000CF :1051E00000000000000000000000000000000000BF :1051F00000000000000000000000000000000000AF :10520000000000000000000000000000000000009E :10521000000000000000000000000000000000008E :10522000000000000000000000000000000000007E -:10523000000001000088880000000000000000005D -:10524000000000000000000000001000000000004E +:10523000000000000000000000000000000000006E +:10524000000000000000000000000000000000005E :10525000000000000000000000000000000000004E :10526000000000000000000000000000000000003E :10527000000000000000000000000000000000002E :10528000000000000000000000000000000000001E :10529000000000000000000000000000000000000E :1052A00000000000000000000000000000000000FE -:1052B000000000004100008000000000000000002D -:1052C00000000000000000000000000000050021B8 +:1052B00000000000000000000000000000000000EE +:1052C00000000000000000000000000000000000DE :1052D00000000000000000000000000000000000CE :1052E00000000000000000000000000000000000BE :1052F00000000000000000000000000000000000AE :10530000000000000000000000000000000000009D :10531000000000000000000000000000000000008D :10532000000000000000000000000000000000007D -:1053300000000000000000110000008000000000DC +:10533000000000000000000000000000000000006D :10534000000000000000000000000000000000005D :10535000000000000000000000000000000000004D :10536000000000000000000000000000000000003D @@ -95569,16 +95569,16 @@ :10538000000000000000000000000000000000001D :10539000000000000000000000000000000000000D :1053A00000000000000000000000000000000000FD -:1053B00000000000000000000001000000400000AC +:1053B00000000000000000000000000000000000ED :1053C00000000000000000000000000000000000DD -:1053D0000082000007000000000000000000000044 +:1053D00000000000000000000000000000000000CD :1053E00000000000000000000000000000000000BD :1053F00000000000000000000000000000000000AD :10540000000000000000000000000000000000009C :10541000000000000000000000000000000000008C :10542000000000000000000000000000000000007C -:105430000000000000000000000000000000070065 -:1054400082000000000000000000000000000000DA +:10543000000000000000000000000000000000006C +:10544000000000000000000000000000000000005C :10545000000000000000000000000000000000004C :10546000000000000000000000000000000000003C :10547000000000000000000000000000000000002C @@ -95586,7 +95586,7 @@ :10549000000000000000000000000000000000000C :1054A00000000000000000000000000000000000FC :1054B00000000000000000000000000000000000EC -:1054C000F0F00000000000000000000000000000FC +:1054C00000000000000000000000000000000000DC :1054D00000000000000000000000000000000000CC :1054E00000000000000000000000000000000000BC :1054F00000000000000000000000000000000000AC @@ -95594,7 +95594,7 @@ :10551000000000000000000000000000000000008B :10552000000000000000000000000000000000007B :10553000000000000000000000000000000000006B -:105540000000F0F00000000000000000000000007B +:10554000000000000000000000000000000000005B :10555000000000000000000000000000000000004B :10556000000000000000000000000000000000003B :10557000000000000000000000000000000000002B @@ -95602,7 +95602,7 @@ :10559000000000000000000000000000000000000B :1055A00000000000000000000000000000000000FB :1055B00000000000000000000000000000000000EB -:1055C000000000000000FFFF0000000000000000DD +:1055C00000000000000000000000000000000000DB :1055D00000000000000000000000000000000000CB :1055E00000000000000000000000000000000000BB :1055F00000000000000000000000000000000000AB @@ -95611,14 +95611,14 @@ :10562000000000000000000000000000000000007A :10563000000000000000000000000000000000006A :10564000000000000000000000000000000000005A -:10565000000000000000000000000510002800000D +:10565000000000000000000000000000000000004A :10566000000000000000000000000000000000003A :10567000000000000000000000000000000000002A :10568000000000000000000000000000000000001A :10569000000000000000000000000000000000000A :1056A00000000000000000000000000000000000FA :1056B00000000000000000000000000000000000EA -:1056C0000000000005000A00054000A800000000DE +:1056C00000000000000000000000000000000000DA :1056D00000000000000000000000000000000000CA :1056E00000000000000000000000000000000000BA :1056F00000000000000000000000000000000000AA @@ -95651,190 +95651,190 @@ :1058A00000000000000000000000000000000000F8 :1058B00000000000000000000000000000000000E8 :1058C00000000000000000000000000000000000D8 -:1058D0000000000000000000000000002020000088 -:1058E000C0000000200000000000000000000000D8 -:1058F0000000200000002000200020002000000008 -:105900000000000020000000000000000000000077 -:1059100000002000000020002000200000012000E6 -:105920000000000000002000000000000000000057 -:1059300000000000200000002000200020002000C7 -:105940000000000040020000000000000000000015 -:105950000000000020000000000000000000000126 -:105960000000000000000000000000000000000037 -:105970000020000000000000000000000200000005 +:1058D00000000000000000000000000000000000C8 +:1058E00000000000000000000004000400000000B0 +:1058F0000000000040000000000000000000000068 +:105900000000000000000000000000000000000097 +:105910000000000020000000000000000000000067 +:105920000000000000000000000000000000000077 +:10593000000000000004200000000000000400003F +:105940000000000000000000000000000000000057 +:105950000000000000002000000000000004000023 +:1059600000000000000000004000000010000000E7 +:1059700040004000000000000000000000000000A7 :105980000000000000000000000000000000000017 -:105990000000000000000000000000900000000077 -:1059A00000000000000000000000000040000000B7 -:1059B00000020002000200020000000000000000DF -:1059C0000000000000008001000000004000000016 -:1059D00000000000000000000000000000020000C5 +:105990000000000000000000000000000002000005 +:1059A00000000000000000000000000000000000F7 +:1059B00040000000000000000000000000000000A7 +:1059C00000000000000000000000000000000000D7 +:1059D0000000000000020000000000C00000000005 :1059E00000000000000000000000000000000000B7 -:1059F00000000000000002000000000000000200A3 -:105A00000040004000400040104000400040004086 -:105A10000040004000400040004000400040004086 +:1059F00000000000000000000000000000000000A7 +:105A00000000000000000000000000000000000096 +:105A10000000000000000000000000000000040082 :105A20000000000000000000000000000000000076 :105A30000000000000000000000000000000000066 -:105A40000000000000004080400000000000000056 +:105A40000000000000000000000000000000000056 :105A50000000000000000000000000000000000046 :105A60000000000000000000000000000000000036 -:105A7000000000000000000000000008000000001E -:105A80000000000100010001000100090001000107 -:105A900000010001000100010001000900010001F6 -:105AA00000010000000000000000000000080000ED -:105AB00000000000000000000000000000080000DE -:105AC000000000000000000084028000008400004C -:105AD00000000000000000000000000010040000B2 -:105AE00000000000000000000000000000080000AE -:105AF0000000000000000000821100000000000013 +:105A70000000000000000000000000000000000026 +:105A80000000000000000000000000000000000016 +:105A90000000000000000000000000000000000006 +:105AA00000000000000000000000000000000000F6 +:105AB00000000000000000000000000000000000E6 +:105AC00000000000000000000000000000000000D6 +:105AD00000000000000000000000000000000000C6 +:105AE00000000000000000000000000000000000B6 +:105AF00000000000000000000000000000000000A6 :105B00000000000000000000000000000000000095 :105B10000000000000000000000000000000000085 :105B20000000000000000000000000000000000075 :105B30000000000000000000000000000000000065 :105B40000000000000000000000000000000000055 -:105B5000000000000000000000000000000000083D +:105B50000000000000000000000000000000000045 :105B60000000000000000000000000000000000035 -:105B700000004000000000000000030000000000E2 +:105B70000000000000000000000000000000000025 :105B80000000000000000000000000000000000015 :105B90000000000000000000000000000000000005 :105BA00000000000000000000000000000000000F5 :105BB00000000000000000000000000000000000E5 :105BC00000000000000000000000000000000000D5 :105BD00000000000000000000000000000000000C5 -:105BE0000300080008000800000000008400000016 -:105BF00000000005A0050005C080000000000000B6 -:105C00000080008082800080820000000800000088 -:105C10000000000000000000000000000010000074 -:105C20000000004000000010000000000000000024 +:105BE00000000000000000000000000000000000B5 +:105BF00000000000000000000000000000000000A5 +:105C00000000000000000000000000000000000094 +:105C10000000000000000000000000000000000084 +:105C20000000000000000000000000000000000074 :105C30000000000000000000000000000000000064 :105C40000000000000000000000000000000000054 -:105C5000000008000000000000000000000000003C +:105C50000000000000000000000000000000000044 :105C60000000000000000000000000000000000034 -:105C700000000000000000000000004000000000E4 -:105C80000000004000400040004000000000000014 +:105C70000000000000000000000000000000000024 +:105C80000000000000000000000000000000000014 :105C90000000000000000000000000000000000004 :105CA00000000000000000000000000000000000F4 -:105CB00000080000000000000000000000000000DC -:105CC00000000000000000000000000000000000D4 +:105CB00000000000000000000000000000000000E4 +:105CC00000000000000000000000000000080000CC :105CD00000000000000000000000000000000000C4 :105CE00000000000000000000000000000000000B4 -:105CF00000000000000040009000040000000000D0 -:105D00002000200000000000200020000000000013 -:105D10002000200000000000200020000000000003 -:105D20002000200000000000000000000000000033 +:105CF00000000000000000000000000000000000A4 +:105D00000000000000000000000000000000000093 +:105D10000000000000000000000000000000000083 +:105D20000000000000000000000000000000000073 :105D30000000000000000000000000000000000063 -:105D4000000000000000000004000000000000004F -:105D5000040000000000000000000000000000003F -:105D60000000000000000000000000000000000033 -:105D7000000000000000000000000090A0000000F3 -:105D80000000800080000000000080008000000013 -:105D90000000800080000000000080008000000003 -:105DA00000008000800000000000000000000000F3 +:105D40000000000000000000000000000000000053 +:105D50000000000000000000000000000000000043 +:105D600000000000000000000000840000000000AF +:105D70000000000000000000000000000000000023 +:105D80000000000000000000000000000000000013 +:105D90000000000000000000000000000000000003 +:105DA00000000000000000000000000000000000F3 :105DB00000000000000000000000000000000000E3 :105DC00000000000000000000000000000000000D3 :105DD00000000000000000000000000000000000C3 -:105DE000000000000000008400000000000000002F -:105DF0000000000084000004000000000400000017 -:105E0000C000C040004000400000A0000040004032 -:105E10008200A000004000400000A00000400040C0 -:105E20000000000000400040000000000040004072 +:105DE00000000000000000000000000000000000B3 +:105DF00000000000000000000000000000000000A3 +:105E00000000000000000000000000000000000092 +:105E10000000000000000000000000000000000082 +:105E20000000000000000000000000000000000072 :105E30000000000000000000000000000000000062 :105E40000000000000000000000000000000000052 :105E50000000000000000000000000000000000042 :105E60000000000000000000000000000000000032 -:105E7000000200000000000000010000000080009F -:105E8000000000000001000100010000000000010E -:105E900000010000000000010001000000000001FE -:105EA00000010000000000010001000000000001EE -:105EB00000010000000000000000000000000000E1 +:105E70000000000000000000000000000000000022 +:105E80000000000000000000000000000000000012 +:105E90000000000000000000000000000000000002 +:105EA00000000000000000000000000000000000F2 +:105EB00000000000000000000000000000000000E2 :105EC00000000000000000000000000000000000D2 :105ED00000000000000000000000000000000000C2 :105EE00000000000000000000000000000000000B2 :105EF00000000000000000000000000000000000A2 -:105F00000000000090C100000002000090C10000ED -:105F10000002000090C100000102000090C10000DA -:105F20000002000090C100000002000000C000005C -:105F3000000200000000000000000000000000005F +:105F00000000000000000000000000000000000091 +:105F10000000000000000000000000000000000081 +:105F20000000000000000000000000000000000071 +:105F30000000000000000000000000000000000061 :105F40000000000000000000000000000000000051 :105F50000000000000000000000000000000000041 :105F60000000000000000000000000000000000031 -:105F7000000000000000030000000200000000001C -:105F80000000000000008389000340800000808939 -:105F9000000540800000C089000502800000808963 -:105FA000000540800000C08900054080000000809E -:105FB0000000008000000000000000000000000061 +:105F70000000000000000000000000000000000021 +:105F80000000000000000000000000000000000011 +:105F90000000000000000000000000000000000001 +:105FA00000000000000000000000000000000000F1 +:105FB00000000000000000000000000000000000E1 :105FC00000000000000000000000000000000000D1 :105FD00000000000000000000000000000000000C1 :105FE00000000000000000000000000000000000B1 :105FF00000000000000000000000000000000000A1 -:106000000000000000008000000003000900800084 -:10601000000005030900800000000503090080005E -:10602000000005030900800000000503090080004E -:1060300000000003000080000000000000000000DD +:106000000000000000000000000000000000000090 +:106010000000000000000000000000000000000080 +:106020000000000000000000000000000000000070 +:106030000000000000000000000000000000000060 :106040000000000000000000000000000000000050 -:10605000000000000000000000000300100010001D -:106060000800000000000000000000000000000028 +:106050000000000000000000000000000000000040 +:106060000000000000000000000000000000000030 :106070000000000000000000000000000000000020 -:106080000000000000000000080000000000000008 -:10609000C000000000000000C00000000000000080 -:1060A000C000000000000000C00000000000000070 -:1060B000C000000000000000C00000000000000060 +:106080000000000000000000000000000000000010 +:106090000000000000000000000000000000000000 +:1060A00000000000000000000000000000000000F0 +:1060B00000000000000000000000000000000000E0 :1060C00000000000000000000000000000000000D0 -:1060D00000000000000000000000000000000100BF -:1060E00001000100000000000000000000000000AE -:1060F000000000000000000000000000010000009F -:1061000000000000000000880008000000000000FF -:10611000000000C000000000000000C000000000FF -:10612000000000C000000000000000C000000000EF -:10613000000000C000200000000000C000000000BF +:1060D00000000000000000000000000000000000C0 +:1060E00000000000000000000000000000000000B0 +:1060F00000000000000000000000000000000000A0 +:10610000000000000000000000000000000000008F +:10611000000000000000000000000000000000007F +:10612000000000000000000000000000000000006F +:10613000000000000000000000000000000000005F :10614000000000000000000000000000000000004F :10615000000000000000000000000000000000003F -:10616000000000010000000000000000000000002E -:10617000000000000000000000000000000005001A -:10618000000000002000000000000080000000036C -:1061900000000000008900000005000000890000E8 -:1061A00000050000008900000005000000890000D3 -:1061B00000050000008900000000000000800000D1 +:10616000000000000000000000000000000000002F +:10617000000000000000000000000000000000001F +:10618000000000000000000000000000000000000F +:1061900000000000000000000000000000000000FF +:1061A00000000000000000000000000000000000EF +:1061B00000000000000000000000000000000000DF :1061C00000000000000000000000000000000000CF :1061D00000000000000000000000000000000000BF -:1061E000000000000021000300000000000000008B +:1061E00000000000000000000000000000000000AF :1061F000000000000000000000000000000000009F -:106200000000000800000000000800080000000076 -:10621000030009808000000080050589030000005C -:106220008000058903000000800505890300000047 -:1062300080000589030000008000000000000000CD +:10620000000000000000000000000000000000008E +:10621000000000000000000000000000000000007E +:10622000000000000000000000000000000000006E +:10623000000000000000000000000000000000005E :10624000000000000000000000000000000000004E :10625000000000000000000000000000000000003E :10626000000000000000000000000000000000002E :10627000000000000000000000000000000000001E -:106280000000000000010000000000000088000085 -:1062900000000000019004000000C0000091010017 -:1062A0000000C000009101000000C000009101004A -:1062B0000000C000009101000000C000009000003C +:10628000000000000000000000000000000000000E +:1062900000000000000000000000000000000000FE +:1062A00000000000000000000000000000000000EE +:1062B00000000000000000000000000000000000DE :1062C00000000000000000000000000000000000CE :1062D00000000000000000000000000000000000BE :1062E00000000000000000000000000000000000AE :1062F000000000000000000000000000000000009E -:1063000000000000884100E007000000008100005C -:1063100007000000880000E000000000810000E0AD -:1063200000000000880000E000000000810000E0A4 -:1063300000000000880000E00000000000000000F5 +:10630000000000000000000000000000000000008D +:10631000000000000000000000000000000000007D +:10632000000000000000000000000000000000006D +:10633000000000000000000000000000000000005D :10634000000000000000000000000000000000004D :10635000000000000000000000000000000000003D :10636000000000000000000000000000000000002D :10637000000000000000000000000000000000001D :10638000000000000000000000000000000000000D -:106390000000F000F000F0F0F0F066660000FFFF93 -:1063A000000066660000FFFF000066660000FFFF59 -:1063B000000066660000FFFF000066660000FFFF49 -:1063C00000003C3C00000000000000000000000055 +:1063900000000000000000000000000000000000FD +:1063A00000000000000000000000000000000000ED +:1063B00000000000000000000000000000000000DD +:1063C00000000000000000000000000000000000CD :1063D00000000000000000000000000000000000BD :1063E00000000000000000000000000000000000AD :1063F000000000000000000000000000000000009D :10640000000000000000000000000000000000008C -:1064100000000000F000F000F0F0F0F06666000010 -:1064200000000000666600000000000066660000D4 -:1064300000000000666600000000000066660000C4 -:10644000000000003C3C00000000000000000000D4 +:10641000000000000000000000000000000000007C +:10642000000000000000000000000000000000006C +:10643000000000000000000000000000000000005C +:10644000000000000000000000000000000000004C :10645000000000000000000000000000000000003C :10646000000000000000000000000000000000002C :10647000000000000000000000000000000000001C @@ -95847,232 +95847,232 @@ :1064E00000000000000000000000000000000000AC :1064F000000000000000000000000000000000009C :10650000000000000000000000000000000000008B -:1065100000000000000000000000666600000F0F91 -:106520000000666600000F0F0000666600000F0F97 -:106530000000666600000F0F0000666600000F0F87 -:106540000000666600000F0FFFFF99990000000031 +:10651000000000000000000000000000000000007B +:10652000000000000000000000000000000000006B +:10653000000000000000000000000000000000005B +:10654000000000000000000000000000000000004B :10655000000000000000000000000000000000003B :10656000000000000000000000000000000000002B :10657000000000000000000000000000000000001B :10658000000000000000000000000000000000000B -:10659000000000000000000000000000666600002F -:1065A0000F0F0000666600000F0F00006666000017 -:1065B0000F0F0000666600000F0F00006666000007 -:1065C0000F0F0000666600000F0FFFFF9999000093 +:1065900000000000000000000000000000000000FB +:1065A00000000000000000000000000000000000EB +:1065B00000000000000000000000000000000000DB +:1065C00000000000000000000000000000000000CB :1065D00000000000000000000000000000000000BB :1065E00000000000000000000000000000000000AB :1065F000000000000000000000000000000000009B :10660000000000000000000000000000000000008A -:106610000561002F800D0000000000280000000030 -:10662000406380018021920240E380018021920238 -:1066300040E380018021920240E3800180219202A8 -:1066400040E380018021920240828000002082028B +:10661000000000000000000000000000000000007A +:10662000000000000000000000000000000000006A +:10663000000000000000000000000000000000005A +:10664000000000000000000000000000000000004A :10665000000000000000000000000000000000003A :10666000000000000000000000000000000000002A -:10667000000000610006000D0000000000000000A6 +:10667000000000000000000000000000000000001A :10668000000000000000000000000000000000000A :1066900000000000000000000000000000000000FA -:1066A0000000FF00000000003C3C0F000F00000055 -:1066B000F0F00F000F000000F0F00F000F000000DE -:1066C000F0F00F000F000000F0F0000000000000EC +:1066A00000000000000000000000000000000000EA +:1066B00000000000000000000000000000000000DA +:1066C00000000000000000000000000000000000CA :1066D00000000000000000000000000000000000BA :1066E00000000000000000000000000000000000AA -:1066F000000000000000000000FFFFFF000000009D +:1066F000000000000000000000000000000000009A :106700000000000000000000000000000000000089 :106710000000000000000000000000000000000079 -:1067200000000000FF00000000003C3C0F000F00D4 -:106730000000F0F00F000F000000F0F00F000F005D -:106740000000F0F00F000F000000F0F0000000006B +:106720000000000000000000000000000000000069 +:106730000000000000000000000000000000000059 +:106740000000000000000000000000000000000049 :106750000000000000000000000000000000000039 :106760000000000000000000000000000000000029 -:106770000000000000000000000000FFFFFF00001C +:106770000000000000000000000000000000000019 :106780000000000000000000000000000000000009 :1067900000000000000000000000000000000000F9 -:1067A000000000000000FF00000000F000F0FF000B -:1067B000000000F000F0FF00000000F000F0FF001B -:1067C000000000F000F0FF00000000F000F000000A +:1067A00000000000000000000000000000000000E9 +:1067B00000000000000000000000000000000000D9 +:1067C00000000000000000000000000000000000C9 :1067D00000000000000000000000000000000000B9 :1067E00000000000000000000000000000000000A9 -:1067F0000000000000000000000000000000000C8D +:1067F0000000000000000000000000000000000099 :106800000000000000000000000000000000000088 :106810000000000000000000000000000000000078 -:106820000000000000000000FF00000000F000F089 -:10683000FF00000000F000F0FF00000000F000F09A -:10684000FF00000000F000F0FF00000000F000F08A +:106820000000000000000000000000000000000068 +:106830000000000000000000000000000000000058 +:106840000000000000000000000000000000000048 :106850000000000000000000000000000000000038 :106860000000000000000000000000000000000028 :106870000000000000000000000000000000000018 -:10688000000C0000000000000000000000000000FC -:1068900000000000000000000000200000000000D8 -:1068A0000000200000002000200010800080000474 -:1068B0000004200000002000000020000000000074 -:1068C0000000000000002000200000000000000088 -:1068D0000000200000002000000000032000040051 -:1068E00004000400000000002000000088000000F8 -:1068F0000000000020000000000000002000200038 -:106900002000200000000000200000002000000007 -:1069100000000000880000000000000000000000EF -:10692000000000000000000000000000410400041E -:106930000001000100020000000000004000000013 +:106880000000000000000000000000000000000008 +:1068900000000000000000000000000400040004EC +:1068A00000040000000000080000000020000000BC +:1068B000000000804088C004880000004000000004 +:1068C00000000000000000048804400020000000D8 +:1068D0000000000020200004200000030000200031 +:1068E00000000000000400040004A0842000200038 +:1068F00088000000000020000000200000002000B0 +:106900000000880000000000000420042000200097 +:1069100000000000000020000000C0000001000195 +:106920000001000100000000000000000000000065 +:10693000000000000004000500000004000000004A :106940000000000000000000400000000000000007 -:106950000000000200000000000200000000000033 -:106960008000804080000000000000000000000265 -:10697000000200020002000000000000000400000D +:1069500000000000000000024000000000000000F5 +:106960000000000000000001000100000004000021 +:1069700000000000000000000000000200004000D5 :106980000000000000000000000000000000000007 -:1069900000000000000000000000000000004000B7 -:1069A0000000A00000000080008000802080000027 -:1069B00000000000000000000000000000000000D7 -:1069C00000000000000000000000000000000000C7 -:1069D00000000000000000000000000000000000B7 -:1069E00000000000000000000000000000000000A7 -:1069F0000000000000000200000000000000000095 -:106A00000000000000000000000000000000000086 -:106A10000000000000000000040000000000000072 -:106A200000000000000000000004000400048004D6 -:106A30000000000000000000000000000000000056 -:106A40000000000000000000000000000000000046 -:106A500000000000000000000000000000880000AE -:106A60000000000000000000000000000000000026 -:106A70000000000000000000000000000000000016 -:106A800000004100000000000000000000000000C5 -:106A900000000000000000000000000000000000F6 +:106990000000000000000000400040400000000037 +:1069A00000000000000000000000000000000000E7 +:1069B0000000000000000000000000800000000057 +:1069C00000000000000000000004000000000000C3 +:1069D0000040000000000000000000000000000077 +:1069E0000000000000000000000800050080020018 +:1069F0000000000000000000000000000000020095 +:106A00000000000000000000000000000000020084 +:106A10000000000000000000000000000200020072 +:106A20000000000000000000000000000000000066 +:106A3000000800000000000000000000000400004A +:106A4000000800000000000000000004000800082A +:106A500000400000000000000000000000000000F6 +:106A60000000008400000000000000000008000496 +:106A7000000800000004000000000000000000000A +:106A800004000000000000000000000800080000F2 +:106A900000080000000000000000000000000000EE :106AA00004000000000000000000000000000000E2 -:106AB0000000000088000005000000000000000049 +:106AB00000000000000000030000000000000000D3 :106AC00000000000000000000000000000000000C6 :106AD00000000000000000000000000000000000B6 :106AE00000000000000000000000000000000000A6 -:106AF0000000000000004000000000000000000056 -:106B00000000000000000000000000000000000085 +:106AF0000000000000050000000000000000002170 +:106B00000000000000000000000000000000000382 :106B10000000000000000000000000000000000075 -:106B20000000000000000000000000000000000065 -:106B30000000000000000000000400000000000051 +:106B20000000002100000000000000000000000044 +:106B30000000000000000000000000000000000055 :106B40000000000000000000000000000000000045 -:106B5000000000000800000000000000000000002D +:106B50000000000000000000000000000000000035 :106B60000000000000000000000000000000000025 :106B70000000000000000000000000000000000015 :106B80000000000000000000000000000000000005 -:106B900000000000000000000000000000000000F5 -:106BA00000000000000000000000000000000000E5 -:106BB00000000000000000000000000000000000D5 -:106BC000000000000000000000000000C0000800FD -:106BD0000000000000000000000000008200000033 -:106BE00000000000000000000400000000000000A1 -:106BF0000000000000000000000000000000A000F5 -:106C00000000000000000000000000000000010083 -:106C1000A0000000000000000000000000000000D4 -:106C2000080000000000000010001000000020001C -:106C3000050000000000000000C0000000C000C00F -:106C40000000000000000000000000000000000044 -:106C50000000000000000000000000001000000024 -:106C60000000000000000000000080000000004064 -:106C70000000000000000000000000000000000014 -:106C800000000000000008000000000000000000FC -:106C900004000000000000000000000000000000F0 -:106CA00000000000000000000000000000000000E4 -:106CB00000000000000088000000002000410020CB -:106CC0000400A00000000000000000000000000020 +:106B900000000000000000000000080000000000ED +:106BA00000000000000000000000000004000000E1 +:106BB00000000000C0000000000000000000000015 +:106BC00000000000200000000000000000000000A5 +:106BD00000080000000000000008000000000000A5 +:106BE000000000000000000000000000A000000005 +:106BF0000088000800000000000000000000A00065 +:106C00000000000000000000000000000000000084 +:106C10000000000000000021000000000000000053 +:106C200000000000A0000000000000000000800044 +:106C30000000000000000000000000000000000054 +:106C400000000000000080000000000000000000C4 +:106C50000000000000000000000000000000000034 +:106C60000000000000000000000000000000000024 +:106C700000000020000000000000000000000000F4 +:106C80000000000000000000000000000000000004 +:106C900000000000000000000000000000000000F4 +:106CA000000000000000000000008800000000005C +:106CB00000000000000000000000000000000000D4 +:106CC0008200000000030000000000080000002017 :106CD00000000000000000000000000000000000B4 -:106CE0000000820000000000000000000000000022 -:106CF0000000000000000000000000000000000094 +:106CE00000000000000000000000000000000000A4 +:106CF000A0000000000000000020040000050000CB :106D00000000000000000000000000000000000083 -:106D10000020000000000000000000000000000053 -:106D20000000000000000000000000000000000063 -:106D300000A0000000000000092000000001000089 -:106D40004001800000000000000000000000000082 +:106D10000000000000000000000000000003000070 +:106D2000000000000000000000000008000000005B +:106D30000000000000000000000000000000000053 +:106D40000000000000000000000000000000000043 :106D50000000000000000000000000000000000033 -:106D60000000000000001000000000000000000013 -:106D70000000000000000000000000000000000013 -:106D800000000000000000000000000000000500FE -:106D90000900000100900000000000000000000059 +:106D60000000000000000000000000000000000023 +:106D70000000000000000000000000018000000092 +:106D80000000000000000000000000000000000003 +:106D900000000000000000000000000000000000F3 :106DA00000000000000000000000000000000000E3 -:106DB00000000000000000000000000000000800CB -:106DC00000000000000000000000000800000000BB +:106DB00000000000000000000008000000080000C3 +:106DC00000000000000000000000000000000000C3 :106DD00000000000000000000000000000000000B3 -:106DE00000000000000000000000000000000000A3 +:106DE000000000000000000000000800000000009B :106DF000000000000000000000000000000008008B -:106E00000000000000000000000000000000000082 -:106E10000200000000000000000000000000000070 -:106E20000000000000000000000000000000000062 -:106E3000000000000000000000C000000082000010 -:106E4000000008000000000000000000000000003A +:106E00000000000000000000004100000000000041 +:106E10000000000000000000000000000000000072 +:106E20000000000008000000000000000000080052 +:106E30000008000000000000000000080000000042 +:106E400000000000000000000000008200000000C0 :106E50000000000000000000000000000000000032 -:106E60000000000000000000000000000000100012 +:106E60000000000000000000000000000000000022 :106E70000000000000000000000000000000000012 -:106E800000000000000000000000004000000000C2 -:106E90000000800000000000000000000000000072 +:106E80000000000000000000000000000000000002 +:106E900000000000000000000000000000000000F2 :106EA00000000000000000000000000000000000E2 -:106EB00000000000000000000000000000000000D2 -:106EC0000000000090000000000000000000000032 +:106EB0000000010090000000000000000000000041 +:106EC00000000000000000000000010000000000C1 :106ED00000000000000000000000000000000000B2 :106EE00000000000000000000000000000000000A2 -:106EF0000000000000000000000000000000000092 +:106EF0000000000000000000000000000000900002 :106F00000000000000000000000000000000000081 -:106F100000000000000090000000000000000000E1 +:106F10000000000000000000000000000000000071 :106F20000000000000000000000000000000000061 -:106F30000000000000000000000000000000000051 -:106F40001100000011008000090000000000000096 -:106F50000000000000000000000000000000000031 +:106F300000000000100080000200000000000000BF +:106F40000000000000000000000000000800000039 +:106F50001100000000000000000000000000000020 :106F60000000000000000000000000000000000021 -:106F70000000000000000000000000000000000011 -:106F80000000000000000000000000000000000001 -:106F90000000000000001100800000000000000060 +:106F70000000000000000000000000000000110000 +:106F80008000110000000000000000000000000070 +:106F900000000000000000000000000000000000F1 :106FA00000000000000000000000000000000000E1 -:106FB00000000000000000000000000000000008C9 -:106FC0000000000800000003000000410000000075 -:106FD00000000000000000000000000000000000B1 +:106FB00000000000000000100080000300800000BE +:106FC0000000000000000000000000000000004180 +:106FD0000000004100000000000000000000000070 :106FE00000000000000000000000000000000000A1 -:106FF0000000000000000000000000800000000011 -:107000000000000000000000000000000000000080 -:1070100000000000000000000000008000000000F0 +:106FF0000000000000000000000000000000000091 +:107000000008000000410000000000000000000037 +:107010000000000000000000000000000000000070 :107020000000000000000000000000000000000060 -:107030000000000000000000000000000000000050 -:10704000000100000001000000010008000000082D -:107050000000000000000000000000000000000030 +:107030000000000000000000000000200001000827 +:107040000000000000000000000000000000000040 +:10705000000100000000000000000000000000002F :107060000000000000000000000000000000000020 -:1070700000000000000000000000000000C0000050 -:1070800000400000000000000000000000000000C0 -:1070900000000000000000000000000000200000D0 -:1070A00000400000000000000000000000000000A0 -:1070B00000000000000000000000000000000000D0 -:1070C000000000002000900001000000C00040000F -:1070D00000000000020000000000000000000000AE +:107070000000000000000000000000000000000010 +:107080000000000100900000000800000000000067 +:1070900000000000000000000000000000000000F0 +:1070A00000000000000000000000000000000000E0 +:1070B0000000000000000000000000002000900020 +:1070C00001000000000000000000000000000000BF +:1070D00000000000900120000000000000000000FF :1070E00000000000000000000000000000000000A0 -:1070F000000000000000000000000000010000008F -:10710000020000000000000000000000000000007D -:1071100000000000000000000000000001000088E6 -:1071200088000000000000000000000000000000D7 -:10713000000000000000000000000000000000004F -:1071400000000000000080000000410020008000DE -:1071500080004100000080000000000000000000EE +:1070F0000000000000000000000000000000000090 +:10710000000000000000C0001000000000000200AD +:10711000000000000000000000000000000000006F +:10712000000000000000000000000000000000005F +:1071300000000000000000000000000020008000AF +:10714000000005000000000000000000000000003A +:107150000000000000000008000011000000000016 :10716000000000000000000000000000000000001F -:1071700000000000000000000000000000004100CE -:10718000000080000000000000000000000000007F -:1071900000000000000000000000000000004100AE -:1071A000008000000000000000000000000000005F -:1071B00000000000000000000000000000000000CF -:1071C00000000000000000080000000000000010A7 -:1071D00000080000000000000000000000000000A7 +:10717000000000000000000000000000000000000F +:107180000000000000000800800000004100000036 +:10719000800000000000000000000000000000006F +:1071A00000000000000000000000000000000000DF +:1071B00000000000000000000000000000000011BE +:1071C00000090011000000000000000000000000A5 +:1071D00000000000000000000000000000000000AF :1071E000000000000000000000000000000000009F :1071F000000000000000000000000000000000008F -:10720000000000000000000000000000000000007E +:10720000000000000000000000000002000000007C :10721000000000000000000000000000000000006E -:1072200000110000008000000000000000000000CD +:10722000000000000000000000000000000000005E :10723000000000000000000000000000000000004E -:10724000000000000000000000010000000000003D -:10725000000100000000000000000000000000002D +:10724000000100000001000000000000000000003C +:10725000000000000000000000000000000000002E :10726000000000000000000000000000000000001E :10727000000000000000000000000000000000000E :1072800000000000000000000000000000000000FE :1072900000000000000000000000000000000000EE -:1072A000000000010000004000000000000000009D +:1072A00000000000000000000000000000000000DE :1072B00000000000000000000000000000000000CE -:1072C00000000000000000000000840000E000005A -:1072D0000082600600E0070082000000000000005D -:1072E000000000000000000000000000000000009E +:1072C0000000600600E00700000000000000000071 +:1072D00000000000000000000000840000E000004A +:1072E000600000000000000000000000000000003E :1072F000000000000000000000000000000000008E -:10730000000000000000000007004800000000002E -:10731000000000000000000000000000000000006D -:1073200000000000000000000700820000000000D4 +:10730000000000000000000000000000600600E037 +:1073100007008200000000000000000000000000E4 +:10732000000000000000000000000000000000005D :10733000000000000000000000000000000000004D :10734000000000000000000000000000000000003D :10735000000000000000000000000000000000002D @@ -96080,7 +96080,7 @@ :10737000000000000000000000000000000000000D :1073800000000000000000000000000000000000FD :1073900000000000000000000000000000000000ED -:1073A00000000000000000000000F0F000000000FD +:1073A00000000000000000000000000000000000DD :1073B00000000000000000000000000000000000CD :1073C00000000000000000000000000000000000BD :1073D00000000000000000000000000000000000AD @@ -96088,7 +96088,7 @@ :1073F000000000000000000000000000000000008D :10740000000000000000000000000000000000007C :10741000000000000000000000000000000000006C -:10742000000000000000000000000000F0F000007C +:10742000000000000000000000000000000000005C :10743000000000000000000000000000000000004C :10744000000000000000000000000000000000003C :10745000000000000000000000000000000000002C @@ -96097,7 +96097,7 @@ :1074800000000000000000000000000000000000FC :1074900000000000000000000000000000000000EC :1074A00000000000000000000000000000000000DC -:1074B000FFFF0000000000000000000000000000CE +:1074B00000000000000000000000000000000000CC :1074C00000000000000000000000000000000000BC :1074D00000000000000000000000000000000000AC :1074E000000000000000000000000000000000009C @@ -96106,17 +96106,17 @@ :10751000000000000000000000000000000000006B :10752000000000000000000000000000000000005B :10753000000000000000000000000000000000004B -:10754000000000000000000000000000000000003B -:107550000000000000610006800D000005610A2F98 -:10756000850D00A0000000000000000000000000E9 +:1075400000000000000000000000000005610A2F9C +:10755000850D00A0000000000000000000000000F9 +:107560000000000000610007800C00000000000027 :10757000000000000000000000000000000000000B -:1075800000000000000000000000000000000518DE -:107590000A00050005A00000000000000000000037 -:1075A00000000000000000000000000000000500D6 -:1075B0000A00054000A800000000000000000000D4 +:1075800000000000000000000000000000000000FB +:1075900000000000000005610A2F850D00A000001A +:1075A00000000000000000000000000000000000DB +:1075B00000000000000000000000000000000000CB :1075C00000000000000000000000000000000000BB :1075D00000000000000000000000000000000000AB -:1075E000000000000000000000000000000000009B +:1075E00000000000000000000000F0F000000000BB :1075F000000000000000000000000000000000008B :10760000000000000000000000000000000000007A :10761000000000000000000000000000000000006A @@ -96124,7 +96124,7 @@ :10763000000000000000000000000000000000004A :10764000000000000000000000000000000000003A :10765000000000000000000000000000000000002A -:10766000000000000000000000000000000000001A +:10766000000000000000000000000000F0F000003A :10767000000000000000000000000000000000000A :1076800000000000000000000000000000000000FA :1076900000000000000000000000000000000000EA @@ -96147,187 +96147,187 @@ :1077A00000000000000000000000000000000000D9 :1077B00000000000000000000000000000000000C9 :1077C00000000000000000000000000000000000B9 -:1077D00000000000000000002000000088002000E1 -:1077E0008400200000002000200020002000000075 -:1077F0000000000000000000200000002000200029 -:1078000000002000400020000000200020000000B8 -:107810000000000000000003000040000000000025 +:1077D0000000000000000020002000200220A00087 +:1077E00000004000100000000000000020000080A9 +:1077F0000080000488040000000000002000200039 +:10780000000020002000000000000000C000000078 +:107810000000000020000001000000000000200027 :1078200020000000200020000000000000002000D8 -:107830000080008000800080400020008400000064 -:1078400020000000200000000000000004000200F2 -:1078500040000000000000000000000000000000E8 -:107860000000000000000000000000000000000018 -:107870000000000000000000000000000000000008 -:107880000082000000020000000000000000000074 -:1078900000000000400000000000000000000000A8 -:1078A00000000000000000000000000000000002D6 -:1078B0000000002000204020002000000000000008 -:1078C0000000000000000020000000000000000098 -:1078D0000000000000004000000000000000000068 -:1078E00020008800000002000000000000000000EE +:10783000000000000000200000000000000088049C +:107840002000000020002004000000000000400094 +:107850000000100000000080000121011101000162 +:1078600040000000000000000000000000000000D8 +:1078700000040004000100010000000000000000FE +:1078800000000000000000000000000000000000F8 +:1078900000000000000000000000400000000000A8 +:1078A00000000000000000000000000000000000D8 +:1078B00000000000000000000000000000000000C8 +:1078C000000000000000000000000000000000A018 +:1078D0000000000000022100210800080000000054 +:1078E0000000000000000000000000000000000098 :1078F0000000000000000000000000000000000088 :107900000000000000000000000000000000000077 -:10791000000004040404202020A000000000000057 -:107920000000000000000000000000000000000057 -:107930000000000000008800000088000000000037 -:107940000000000000000000000000000000000037 -:107950000000000000000000000000000008000817 -:1079600000080008008200088000000040000000BD -:1079700000000000000000000008000800080008E7 -:10798000000800080040000800000000000000009F -:1079900000000000800180018009800300000008D1 -:1079A00000080008000800000008000000000000B7 -:1079B00000000000000000000000000800000008B7 -:1079C0000008000800080000000800000000000097 -:1079D00000000000000000000000000400000000A3 -:1079E00000000000000000088200400000000000CD -:1079F0000000000000000000000000000000001077 -:107A00000010001000100010001000100010000006 -:107A100000000000000000000000000088000000DE -:107A20000000000000000000000000000000000056 -:107A30000000000000000000000000000000000046 -:107A40000000000000000000000000000000000036 -:107A50000000000000000000000000000000000026 -:107A600004000000000000002000000000000000F2 -:107A70000000000000000000000000000000000006 +:107910000000000000000000000000000000000067 +:107920000003000400030000000800000000000045 +:107930000000000000000000000000000000000047 +:10794000000800000000000000000005000000002A +:107950000000000400080002000000000000008495 +:1079600000000008000000080084008400000000FF +:10797000000000000000000000000084000800007B +:1079800000000008000000080000000000080000DF +:1079900000040000000800080008000800000008BB +:1079A0000000000000840008000800000008000833 +:1079B000000000000084000800840008000800089F +:1079C000000800000082000800840008000800048D +:1079D000000800000084000400050084008200000C +:1079E0000000000000A100000000004000000000B6 +:1079F0000003000000030000000000090008000070 +:107A0000000000000000000000000000000800006E +:107A10000000000000210000000000210000000024 +:107A20000000000800000008000000000003000043 +:107A3000000000000000000800000000000000003E +:107A40000000000000000008000000080000000026 +:107A500000000000000000000000002100000021E4 +:107A6000000000880000000400000000000000008A +:107A700000000000400000000000000000000000C6 :107A800000000000000000000000000000000000F6 :107A900000000000000000000000000000000000E6 :107AA00000000000000000000000000000000000D6 -:107AB00000000000000000000000040000000000C2 +:107AB0000000000000000082000000000000000044 :107AC00000000000000000000000000000000000B6 -:107AD00000000000000000000000000000000000A6 -:107AE0000000000010000000100000000000000076 -:107AF0000002000000000000000000000000000084 -:107B00000000000000000000000000000000000075 -:107B10000000000000000000000000000000000065 -:107B20000000000000000000000000000000A000B5 -:107B30000000A00000000000000000000000001194 -:107B40000000000000000000000000000000000035 -:107B50000000000000000000000000000000000025 -:107B600000000000000000000000000010004000C5 -:107B70000000000000000000000000000000000005 -:107B8000410000000000000000000000000008406C -:107B900000000000000000000000000000000000E5 +:107AD000000000000000000008000000000000009E +:107AE000000000000100000000000000000088000D +:107AF000080000000000000000000000000000007E +:107B00000100000000000000000000000000000074 +:107B1000000000000000000008000000000000005D +:107B200000000000000000000000820000000000D3 +:107B300000000000000000000000820000000000C3 +:107B4000000000000000000000000800000000002D +:107B5000000000000000000000000800000000001D +:107B600000000000000020000000000000000000F5 +:107B7000000000A0000800000008008200000008CB +:107B8000008204A000000000000000A0000000002F +:107B900000000000000000A000002108000000001C :107BA00000000000000000000000000000000000D5 -:107BB00000000000000000000000000000000000C5 -:107BC0000000210000000000000000000000000094 -:107BD000000000000000000000000000080000009D -:107BE0000000000000008200040000000800C00047 -:107BF0000080008000800010000000008200002152 -:107C00000010001000100000000000000000000044 +:107BB00000000000000000000000000000A0000025 +:107BC00000000000000000000000000000000000B5 +:107BD000000000080000000800000000030800008A +:107BE00000840008000000000021200000000000C8 +:107BF00000000000004000000000400000000008FD +:107C000000000088000000000003000000000008E1 :107C10000000000000000000000000000000000064 -:107C20000000001100000000000000000000000043 -:107C30000000000000000000000000000000000044 -:107C40000000000000000000000000000000000034 +:107C20000000000000000000000000000000000054 +:107C3000000000000000000000000008000000003C +:107C4000000000080000000000000000000000002C :107C50000000000000000000000000000000000024 -:107C60000000000000000000008400000000000090 -:107C700000000304000400041000000000000000E5 -:107C800000000000000000000000000000000000F4 +:107C60000000040000000000000009008000040083 +:107C70000000000000000000000000000000000004 +:107C80004000002000200000000000000000000074 :107C900000000000000000000000000000000000E4 -:107CA00000000000000000000000000000000000D4 -:107CB00000000000000000000000000000000000C4 -:107CC0000000000000000000000021000000000093 -:107CD0000084000000000000080000000000000018 -:107CE00000000000000000000000A00000000800EC -:107CF00084000004000000000000000000100010DC -:107D000000100010002100210021000000000000F0 -:107D1000000000000000000000000000080000005B -:107D2000000000000000000000000000000008004B -:107D30000000080000000000000000000800000033 -:107D4000080000001000000000000000000000001B -:107D50000000000000000000000000020000000021 -:107D60000000000000000000000000000000000013 -:107D70000000000000010000000000000000000002 +:107CA0000000000000000000000000C00000000014 +:107CB00000001100000000000000000000000000B3 +:107CC00000000000000000000000000000000000B4 +:107CD00000000000000000000000000000000000A4 +:107CE0000000000000000000000000000000000094 +:107CF0000000000000000011000000000000000073 +:107D00000000000000000000000000000000000073 +:107D10000000000000000000020000000000000061 +:107D20000000000000000000000000000000000053 +:107D30000000000000000000000000000000000043 +:107D40000000000000000000000000000000000033 +:107D50000000000000000000000000000000000023 +:107D6000000000000000000000000800000000000B +:107D70000000000000000008000000000000008279 :107D800000000000000000000000000000000000F3 -:107D900000000000000000000000000000000000E3 -:107DA00000000000000000000000000000000000D3 -:107DB00000000000000000000000000000000000C3 -:107DC0000000000000002100000000000000000092 +:107D9000000000000000000000A000000000000043 +:107DA00000002100000000000000000000000000B2 +:107DB0000008000000000000000000820000000039 +:107DC00000000000000000000000000000000000B3 :107DD00000000000000000000000000000000000A3 -:107DE0000000000000000000000000000000000093 -:107DF000000000000000204100840004C004822034 -:107E00000040000208100000000000000000000018 +:107DE000000000000300000000000000000001008F +:107DF000080000000000000000000000000000007B +:107E000000000000000000008800010000000000E9 :107E10000000000000000000000000000000000062 -:107E2000000001000000000100840100009100003A +:107E20000000000000000000000000000000000052 :107E30000000000000000000000000000000000042 :107E40000000000000000000000000000000000032 :107E50000000000000000000000000000000000022 :107E60000000000000000000000000000000000012 -:107E700000000000000000000002000008000020D8 -:107E80000000000000000080000000000000000072 +:107E700011000000090000000000000000000000E8 +:107E800000000000000000000000000040000000B2 :107E900000000000000000000000000000000000E2 -:107EA00000000000040000000003000005000010B6 +:107EA00000000000000000000000000000000000D2 :107EB00000000000000000000000000000000000C2 :107EC00000000000000000000000000000000000B2 :107ED00000000000000000000000000000000000A2 :107EE0000000000000000000000000000000000092 -:107EF000000000000000000000008000908800806A -:107F00008282000080A0000080800000000000004D -:107F10000000000000000000000000000000000061 -:107F20000000000000000000000011000000000040 -:107F300004800000000000000000000000000000BD +:107EF00000000003008000030080000000800000FC +:107F00000000000000000000000000100000002041 +:107F100000800000000000000000000000000000E1 +:107F20000000000000000000000000000000000051 +:107F30000000000000000000000000000000000041 :107F40000000000000000000000000000000000031 -:107F500000400000000000000000000000000000E1 +:107F50000000000000000000000000000000000021 :107F60000000000000000000000000000000000011 -:107F7000000000000000000000000000040008C035 -:107F8000400409C1880008C0081008C000000000B3 -:107F900000000000000000000000000000000000E1 +:107F7000000000100000002000010040000000028E +:107F800000000000000000000000000000000000F1 +:107F9000000000820000000000000000000000005F :107FA00000000000000000000000000000000000D1 -:107FB000000091A000000000000000000000000090 +:107FB00000000000000000000000000000000000C1 :107FC00000000000000000000000000000000000B1 -:107FD0000040000100400000000000000000000020 -:107FE0000000000000000000000000000000000091 -:107FF00000000000000000000000000000009105EB -:108000000002C108410509020002C0080220000068 -:108010000000000000000000000000000000000060 -:10802000000000000000000000000000000001004F -:10803000A000A001010100000000000000000000FD +:107FD00000000000000000000000000000000000A1 +:107FE0000000000000000000000000000000009001 +:107FF0000000000000010000100040000000000030 +:108000000000000000000000000000000000000070 +:10801000900090000100000000000000000000003F +:108020000000000000000000000000000000000050 +:108030000000000000000000000000000000000040 :108040000000000000000000000000000000000030 -:10805000000000000400000000000000000000001C +:108050000000000000000000000000000000000020 :108060000000000000000000000000000000000010 -:108070000000000000000000000000000000000000 -:10808000410800908580028241000000808000004D -:1080900000000000000000000000000000000000E0 +:108070000000000000000000110000008000080067 +:1080800000000000000000000000000000000000F0 +:1080900000000000000010000000000000000000D0 :1080A00000000000000000000000000000000000D0 -:1080B000210080008002211000000000000000006C +:1080B00000000000000000000000000000000000C0 :1080C00000000000000000000000000000000000B0 -:1080D000000005000000800000000000000000001B +:1080D00000000000000000000000000000000000A0 :1080E0000000000000000000000000000000000090 -:1080F0000000000000000000000000000000000080 -:1081000000000040108000800820801100808080E6 -:1081100080000000000000000000000000000000DF +:1080F0000000000000000000000000080040000038 +:10810000000000000000000000000000000000006F +:10811000000000000040000000000000000000001F :10812000000000000000000000000000000000004F -:10813000000000000005000000000000000000003A +:10813000000000000000000000000000000000003F :10814000000000000000000000000000000000002F :10815000000000000000000000000000000000001F :10816000000000000000000000000000000000000F -:1081700000000000000000000000000000000000FF -:10818000000000009000C11084028401080020104B -:10819000400210000000000000000000000000008D +:1081700000000000410008000800030000010001A9 +:1081800000000000000000000000000000000000EF +:1081900000000000000000000000000000000000DF :1081A00000000000000000000000000000000000CF -:1081B00000000000000000000004000000000000BB +:1081B00000000000000000000000000000000000BF :1081C00000000000000000000000000000000000AF :1081D000000000000000000000000000000000009F :1081E000000000000000000000000000000000008F -:1081F000000000000000000000000000000000007F -:10820000000000000000810000E000004842000083 -:1082100000000000484200000000000000000000D4 +:1081F00000000000000001000000000000004182BB +:1082000000E0070000000000000000000000000087 +:10821000000000000000600600E007000000000011 :10822000000000000000000000000000000000004E -:1082300000000000000000000001800000000000BD +:10823000000000000000000000000000000000003E :10824000000000000000000000000000000000002E -:108250000000000000000000001100000704000002 +:10825000000000000000000000000000000000001E :10826000000000000000000000000000000000000E :1082700000000000000000000000000000000000FE -:10828000000000000000000020100408A00500000D -:108290002800002820100408000000000000000052 +:1082800000000000000000000000000000000000EE +:1082900000000000000000000000000000000000DE :1082A00000000000000000000000000000000000CE :1082B00000000000000000000000000000000000BE :1082C00000000000000000000000000000000000AE :1082D000000000000000000000000000000000009E :1082E000000000000000000000000000000000008E :1082F000000000000000000000000000000000007E -:1083000000000000000000000000408002010000AA -:10831000A005410000414080020100000000000073 +:10830000000000000000000000000000000000006D +:10831000000000000000000000000000000000005D :10832000000000000000000000000000000000004D :10833000000000000000000000000000000000003D :10834000000000000000000000000000000000002D @@ -96342,234 +96342,234 @@ :1083D000000000000000000000000000000000009D :1083E000000000000000000000000000000000008D :1083F000000000000000000000000000000000007D -:1084000000000000000000000000000000000082EA -:108410000014400220040102080400008844000007 +:10840000000000000000000000000000000000006C +:10841000000000000000000000000000000000005C :10842000000000000000000000000000000000004C -:108430000000000000000000000000000000003C00 -:10844000003C0000FFFF00000000000000000000F2 +:10843000000000000000000000000000000000003C +:10844000000000000000000000000000000000002C :10845000000000000000000000000000000000001C :10846000000000000000000000000000000000000C :1084700000000000000000000000000000000000FC :1084800000000000000000000000000000000000EC -:1084900082001400800110088040102088440000F1 +:1084900000000000000000000000000000000000DC :1084A00000000000000000000000000000000000CC :1084B00000000000000000000000000000000000BC -:1084C000003C003C00000000000000000000000034 +:1084C00000000000000000000000000000000000AC :1084D000000000000000000000000000000000009C :1084E000000000000000000000000000000000008C :1084F000000000000000000000000000000000007C -:10850000000000000000000000000000000000006B -:108510000000606100018001100000000000000008 -:108520000800000000000000000000000000000043 +:108500000000000000000000000005610A2F850D3A +:1085100000A00000000000000000000000000000BB +:1085200000000061002F850D00A000000000000089 :10853000000000000000000000000000000000003B -:1085400000000561000B05050000000000000000B0 +:10854000000000000000000000000000000000002B :10855000000000000000000000000000000000001B -:108560000000000005180A20050004A0000000001B +:10856000000000000000000000000000000000000B :1085700000000000000000000000000000000000FB -:1085800000000000000000000000000000000000EB -:108590000000000000000000FCFC000000000000E3 +:108580000000000000610006000D00000000000077 +:1085900000000000000000000000000000000000DB :1085A00000000000000000000000000000000000CB :1085B00000000000000000000000000000000000BB -:1085C0000000000000000000FFFF00FF00000000AE +:1085C00000000000000000000000000000000000AB :1085D000000000000000000000000000000000009B :1085E000000000000000000000000000000000008B :1085F000000000000000000000000000000000007B -:10860000000000000000000000000000000000006A -:10861000000000000000FFC3FFC3FCFC00000000DE +:108600000000000000007C3C3D3C00000000000039 +:10861000000000000000000000000000000000005A :10862000000000000000000000000000000000004A :10863000000000000000000000000000000000003A -:1086400000000000000000000000FFFF00FF00002D +:10864000000000000000000000000000000000002A :10865000000000000000000000000000000000001A :10866000000000000000000000000000000000000A :1086700000000000000000000000000000000000FA -:1086800000000000000000000000000000000000EA -:10869000000000000000000000000000AFAF00007C +:108680000000000000000000500005000000000095 +:1086900000000000000000000000000000000000DA :1086A00000000000000000000000000000000000CA :1086B00000000000000000000000000000000000BA -:1086C00000000000000000003C3C000000003C3CBA +:1086C00000000000000000000000000000000000AA :1086D000000000000000000000000000000000009A :1086E000000000000000000000000000000000008A :1086F000000000000000000000000000000000007A :108700000000000000000000000000000000000069 -:1087100000000000000000000000FFFFC3C3AFAF77 +:108710000000000000000000000000000000000059 :108720000000000000000000000000000000000049 :108730000000000000000000000000000000000039 -:10874000000000000000000000003C3C00000000B1 -:108750003C3C0000000000000000000000000000A1 +:108740000000000000000000000000000000000029 +:108750000000000000000000000000000000000019 :108760000000000000000000000000000000000009 :1087700000000000000000000000000000000000F9 :1087800000000000000000000000000000000000E9 -:108790000000000000000000200000000000200099 -:1087A000000088000000C0001000000020008800C9 -:1087B00020002000000000008400000000002000D5 -:1087C00000002000000020002000C0002000200049 -:1087D0000000200000030000000020000000000056 -:1087E00088000000200000002000000000000000C1 -:1087F0000000000020000000000020000000000039 -:1088000020008800201104002000000000008800E3 -:108810000000000020000000000000000000000038 -:10882000000000000000400000C000000000000048 -:108830000000400000000082000020000000000056 -:10884000400000000900000200000000400000009D -:108850000000000000000000000000000000000018 -:1088600000000000000000000000002000A0000048 -:1088700000000000000000000000000000000000F8 -:1088800000000000000000000000000000000000E8 -:1088900000000000100005000000000000000000C3 -:1088A0000040000000000000000000000000000088 -:1088B00000000000000000040000000000000000B4 +:1087900000000000100000000000000000000000C9 +:1087A0000000200000000000880020000000000001 +:1087B0000000200000000000000000000000000099 +:1087C0000004400400000000200020000000001011 +:1087D000008420A000030000000000000000000052 +:1087E0000000000420000000000020002000C00065 +:1087F0000000008488A000000008000000000000C5 +:108800000000000020000000000088002000200080 +:108810000000008484A000000000000000000000B0 +:1088200010000000000000004000000000000000F8 +:108830000000100000002000000000000000000008 +:108840000000100200000000000000000000000016 +:1088500000000021001100000000000000000000E6 +:1088600000000000000200024000000000000000C4 +:1088700000000000002100110000000000000000C6 +:108880000000100010024000400000020000000044 +:1088900000000000002100110000000000000000A6 +:1088A00000000000000000000000000000000000C8 +:1088B0000000000010021100000000000000000095 :1088C00000000000000000000000000000000000A8 -:1088D0000000000000000004000000000000000094 +:1088D0000000000010001100000000000000000077 :1088E0000000000000000000000000000000000088 -:1088F00000000000000000000004000000008400F0 -:108900000000000000000200000000000000000065 -:10891000000000000000000000040000000800004B -:108920000000000800000000000800000000000037 -:1089300000000000000000000001000000880000AE -:10894000000000080000000000080008000000000F -:108950000000000000000000000100000000000016 -:1089600000000000000800000000000800040000F3 -:1089700000000000000000000000000100000000F6 -:1089800000000000000800000000000800000000D7 -:1089900000000000000000000000000100000000D6 -:1089A0000000000000000000000000000000840043 -:1089B0004000840000000000000000000020004093 -:1089C00000000000000000000000000000000000A7 -:1089D0000000000000000000000000210000000076 -:1089E0000000000000000000000000000002000085 -:1089F00088000000000000000000000000000000EF -:108A00000000000000000000000000000004000062 -:108A100000000000000000000000000000004040D6 -:108A2000000000000800090005000500052000A066 -:108A300000A0000000000000009000000000000006 -:108A40000000000000000000000000000000000422 +:1088F0000000000000001000110000000000000057 +:108900000000000000000200040000000000000859 +:1089100000000000000010004100000800000000FE +:108920000084008400000088000000000088000827 +:108930000008008400088000A008008400100000E7 +:1089400000000000000000000000000000000084A3 +:108950000008000800088000C00800000082000035 +:1089600000080008000800000008000000080008D7 +:1089700000080002000800088008C0080000008409 +:1089800000080008000800000004000000080010B3 +:1089900000840008000800848010A008000800215E +:1089A000002100210002000300210000000000035C +:1089B00000210021000500000021004100210003EA +:1089C0000008002100080000000800000008000066 +:1089D000000000210000002100080021000000002C +:1089E00000210021002100218809000090400000A2 +:1089F00000030040000800400000000800000000E4 +:108A000000210041000000410000000000000000C3 +:108A1000000800000000004000400021000000208D +:108A20000000000000000000002000000000000026 +:108A30000000200000000000000000000084000092 +:108A4000000000000000000000000000080000001E :108A50000000000000000000000000000000000016 -:108A60000000000000000000000000000000000006 -:108A700000000000000000000000000000000000F6 -:108A800000000000000000000000000000000000E6 +:108A6000000000000000000000000000008800007E +:108A70000084000000000000000000000000000072 +:108A800000000000000000000000000000000008DE :108A900000000000000000000000000000000000D6 -:108AA00082008200820082008200A000C0000000DC -:108AB0008200820082008200080000008200A00084 -:108AC000820082008200820082000000000000001C -:108AD00082008200820082000800A000A000000046 -:108AE00000008200820082008200820000000000FC -:108AF0000000820082008200820008000000A000C6 -:108B000000098200820082008200820000000000D2 -:108B100000008200820082008200820000000000CB -:108B20000000000000000000000000000000000045 +:108AA00000000000C0000000000000000000000006 +:108AB00000000000000000000000000000000002B4 +:108AC0000000000000008400000000000000000022 +:108AD00084000000000000000000000000004004CE +:108AE0000000000000000000000000000000000086 +:108AF00082000000000000000000000000000000F4 +:108B0000000400000000C0000000000000000000A1 +:108B10000000000000000009000000000000A000AC +:108B20000808000000000040000000C00000000035 :108B30000000000000000000000000000000000035 -:108B4000000000000000000000000000080000001D -:108B50000000000000000000000000000000000015 -:108B600000000000000000000000000000000800FD +:108B40000001000000000000000000000000000024 +:108B50000000000000000000000000100000000005 +:108B60000001000000000000000000000000000004 :108B700000000000000000000000000000000000F5 -:108B800000000000000000000000000000000000E5 +:108B800000000001000000000000000000000000E4 :108B900000000000000000000000000000000000D5 -:108BA00000000000000000000000A00000008200A3 -:108BB000C0008200C008000000110000000000009A -:108BC00000000000000000000000000000000000A5 -:108BD00082000800000000000011000000000000FA -:108BE0000000000000000000000000000000000085 -:108BF000000000000800000000000011000000005C -:108C00000000000000210000000000000000000043 -:108C100000000000080040000000001100000000FB -:108C200000000000000000000000000000000588B7 -:108C3000408200000800000000000000000000006A -:108C40000000000000000000000000000000000024 +:108BA000000000010000000800009000000000002C +:108BB000000000000005004100080000000300085C +:108BC000000000080000000000000008000800414C +:108BD0000000000000000008000800000021000064 +:108BE0000000000200000000000000000000000083 +:108BF00000000000820000000000000800000005E6 +:108C000090000000080000000000000000000000CC +:108C1000000800080000040000210002000000001D +:108C2000402000000041040000840090000000008B +:108C30000000000000000000000000000000110023 +:108C40004000112000C000000000000000000000F3 :108C50000000000000000000000000000000000014 -:108C600000000800000000000000000000000000FC +:108C60000000000000000000000200000000000002 :108C700000000000000000000000000000000000F4 :108C800000000000000000000000000000000000E4 :108C900000000000000000000000000000000000D4 -:108CA0000000000000000000A000A0000000000084 -:108CB000A000080000000000000000000000080004 -:108CC00000000000000000000000000000000000A4 -:108CD0000000080000000000000040000800000044 -:108CE0000000000000000000000000000000000084 -:108CF0000000000082008200000000000000080068 -:108D00000800000008000000000000000000000053 -:108D100000000000080082000000000000000000C9 -:108D20000000000000000000C00000000000000083 +:108CA00000000000110009000000000000000000AA +:108CB0000000000200000000000000000000004171 +:108CC0000008000000000000000800000000000292 +:108CD0000000004100000041000000000000820090 +:108CE0000000000500000000000000000008000077 +:108CF000000000000000000000410000000800002B +:108D0000000000210005000000000008000800002D +:108D10000003000000000000000000000000080048 +:108D2000001000210008000000000000000000000A :108D30000000000000000000000000000000000033 -:108D40000000000000000000000000000000000023 +:108D40000000000000100000080008000000000003 :108D50000000000000000000000000000000000013 :108D60000000000000000000000000000000000003 :108D700000000000000000000000000000000000F3 :108D800000000000000000000000000000000000E3 :108D900000000000000000000000000000000000D3 :108DA00000000000000000000000000000000000C3 -:108DB00000000000000000000000000000000100B2 -:108DC0000040000000000000000000000000000063 -:108DD0000000000000000000000000000000010092 -:108DE0000040000000000000000000000000000043 -:108DF0000000000000000000000000000000000073 -:108E00000000004000000000000000000000000022 -:108E10000000000000000000000000000000000052 -:108E20000000004000000000000000000000000002 -:108E30000000000000000000000000000000001121 -:108E40000200000000000000000000000000000020 -:108E50000000000000000000000000000000001101 -:108E60000200000000000000000000000000000000 -:108E700000000000000000000000000000000000F2 -:108E800000110500000000000000000000000000CC -:108E900000000000000000000000000000000000D2 -:108EA00008110500000000000000000000000000A4 -:108EB00000000500000000000000000000000000AD -:108EC000020003000080000000000000000000031A -:108ED0000000100000000000000000000000000082 -:108EE00002000300008000000000000000000020DD -:108EF0000000000010000000000000000000000062 -:108F000000001000110000800000000000000000C0 -:108F10000005000005000000000000000000000047 -:108F20000000100021000080000000000000000090 -:108F3000000200000000000000000000000000002F -:108F4000000041004010000240004000000000000E -:108F50000000000000000000000000000000000011 -:108F600000004000402000024000400000000000DF -:108F700000000000000001000000000000000000F0 -:108F800000000000400040080002400040000000D7 -:108F900000000000000000000000000000000000D1 -:108FA00000000000400040020002400040000000BD -:108FB00000000001000000000000000000000000B0 -:108FC000000000000004000000000000000000009D -:108FD0000000000000000000000000000000000091 -:108FE0000000000000100000000000000000000071 -:108FF0000000000000000000000000000000000071 -:109000000000000000000020000000000000000040 +:108DB00000000000000000000000008800008200A9 +:108DC00000C0C08200009000000100000000000010 +:108DD0000000000000000000000001880000C0004A +:108DE0000010C0820000C000000100000000000070 +:108DF00000000000000001002000000001820000CF +:108E0000C0000010C0820000C0000001000000008F +:108E10000000000000000000000000000110000041 +:108E2000C0000004C0820000C0000001000000007B +:108E300000000000000400000000000409000941D7 +:108E40009100000080800000000000410000000050 +:108E500000000000000900000000001040000011A8 +:108E60008900008080800000800000030000000076 +:108E70000000000000000009040080000010408095 +:108E800020118200000080800000800000030000AC +:108E90000000000000000011000000000002088037 +:108EA00000099100000080800000800000030000A5 +:108EB0000000080000000000000004000000110095 +:108EC0001100900000020400000000000000800378 +:108ED0000000090000000000000004000000020083 +:108EE0008200900000080300000000000080801055 +:108EF000000000000300000000000000040000006B +:108F00000200900090800008030000000000008034 +:108F100080100000080000000000000008000000B1 +:108F20000900110090000000030080000000009084 +:108F300080030000010000000000000000000000AD +:108F400000000200200200000004020000000000F7 +:108F5000C00100000000000000000000010000004F +:108F6000000040001184000101001000000000C05A +:108F70008201000000000100000000C000000100AC +:108F80000000000041002108000101001000000065 +:108F900000C082000000000000000000000001008E +:108FA0000000000004000802000001004000000072 +:108FB00000C082000000000000000000000000006F +:108FC00000011000008800001000000000000000F8 +:108FD0000001000000000000000000000000000090 +:108FE00000011000008800000100000000000000E7 +:108FF00000000000000000000000C00000000000B1 +:10900000000000018800008800000100000000004E :109010000000000000000000000000000000000050 -:109020000000000000000020000000000000000020 +:109020000000000184000088000011000000000022 :109030000000000000000000000000000000000030 -:1090400000000000000000800000000000000000A0 -:109050000000000000000000000000000000000010 -:109060000000000000000000000000000000000000 -:1090700000000000000000000000000000000000F0 -:1090800000000000000000000000000000000000E0 -:1090900000000000000000000000000000000000D0 -:1090A00000000000000000000000000000000000C0 -:1090B00000000000000000000000800500830000A8 -:1090C00000000000000000000041800000080000D7 -:1090D00000000000000000000010800000C100003F -:1090E00000000000000000000041800000080000B7 -:1090F000000000000000000000000010800000C11F -:109100000000000000000000000000410000000519 -:109110000000000000000000000000008005008347 -:1091200000000000000000000000004100000005F9 -:1091300000000000000000000000000004000083A8 -:10914000000000000000000000000091040000008A -:1091500000000000000000000000000020000040AF -:10916000000000000000000000000091040000006A -:1091700000000000000000000000000000012000CE -:10918000004000000000000000000000009190007E -:1091900000000000000000000000000000000400CB -:1091A000008300000000000000000000009190001B -:1091B00000000000000000000000000000000000AF -:1091C000000000000000000000000000810000E03E -:1091D0000000480000000000000000000000000047 -:1091E000000000000000000000000000810000E01E -:1091F0000000480000000000000000000000000027 -:1092000000000000000000000000000000008100DD -:1092100000E0000048000000000000000000000026 -:1092200000000000000000000000000000008100BD -:1092300000E0000048000000000000000000000006 +:109040000000004000040000000084000000000058 +:1090500000000041000000000000000000000000CF +:1090600000000008000800000000410000000000AF +:1090700000000041000000000000000000000000AF +:10908000000000000005102000000000410000006A +:10909000000000000041000000000000000000008F +:1090A000000000000008001000000000C1000200E5 +:1090B00000000000004100000008800000C1000026 +:1090C000001080004100000000C18000000200008C +:1090D00000000020000008830000800000910000D4 +:1090E000000000009000000000410000001000009F +:1090F000004100000000052000000000800000404A +:109100000000000000099000000000C18000000283 +:10911000000000410000000009900008800000C12C +:109120000000000200009000000000C100000005E7 +:109130000000004100000000030800012000004082 +:1091400000000000020002000000004110000000CA +:10915000000000000000000001C100000800001035 +:1091600000000000020011000000001102000000D9 +:10917000000000010000000000400000000040006E +:1091800000C10000000088008300000000091000FA +:1091900000000000000100000000000200002000AC +:1091A00000400000000002004000000000410400F8 +:1091B00000010000000100000000000900000000A4 +:1091C000000000000000000000000000811200E02C +:1091D000070048410000000000000082000000007D +:1091E000000000000000000000000000811200E00C +:1091F00080004842000000000000484200000000DB +:1092000000000000000000000000000000008112CB +:1092100000E040004842000000000000484200001A +:1092200000000000000000000000000000008112AB +:1092300000E08000484200000000000048420000BA :10924000000000000000000000000000000000001E :10925000000000000000000000000000000000000E :1092600000000000000000000000000000000000FE @@ -96586,171 +96586,171 @@ :10931000000000000000000000000000000000004D :10932000000000000000000000000000000000003D :10933000000000000000000000000000000000002D -:109340000000747B0000000000000000000000002E +:109340000000757B0000000000000000000000002D :10935000000000000000000000000000000000000D -:10936000DE2E747B00000000000000000000000002 +:10936000DEAE757B00000000000000000000000081 :1093700000000000000000000000000000000000ED -:10938000DE2E0000747B00000000000000000000E2 +:10938000DEAE0000757B0000000000000000000061 :1093900000000000000000000000000000000000CD -:1093A0000000DE2E747B00000000000000000000C2 +:1093A0000000DEAE757B0000000000000000000041 :1093B00000000000000000000000000000000000AD -:1093C0000000DE2E61560340000000000000023065 +:1093C0000000DEAE61260340000000000000023015 :1093D000A0000000000000000C40000000000000A1 -:1093E00002C06A866156034000000000000002309F +:1093E00002C06486612603400000000000000230D5 :1093F000A0000000000000000C4000000000000081 -:1094000002C06A86000061560340000000000000B0 +:1094000002C06486000061260340000000000000E6 :109410000230A0000000000000000C40000000002E -:10942000000002C06A866156034000000000000090 +:10942000000002C0648661260340000000000000C6 :109430000230A0000000000000000C40000000000E -:10944000000002C06A86200000002000000020000A -:10945000000020002000200000002000000000008C -:109460000000000020000400000020000000200098 -:109470000000200000002000840020000000000008 -:109480000000000000000003200000002000000099 -:109490000000000000000000208084802080008008 -:1094A000000000000000000020000000200010006C -:1094B00088000000000000002000200020000000C4 -:1094C000A0000000000000004000000000000000BC -:1094D000000000000000000000000000000000008C -:1094E000000000000000400000000000000000003C -:1094F00000000000400000000000400000000000EC -:10950000000000000000000000000000000000005B -:10951000000010000000400000004020002000205B -:109520000020000200000000000000C00000000059 -:10953000000010000000400000004000000000009B -:1095400000002100000000020000000000000000F8 -:1095500000000000000000200000000000000000EB -:1095600002000000000000000000000000000000F9 -:1095700000000010080008000800000000000000C3 -:1095800000000000000000000000000000000000DB +:10944000000002C064860000000000001000000858 +:10945000000000000000000000000000000000000C +:1094600010000205000400000000000020000000C1 +:1094700000000000000000000000000000000000EC +:109480002000000000800001000000000005200016 +:1094900000000000000000001000000000000008B4 +:1094A000000020000000000000000000000020007C +:1094B0000000000000000000200000000000000488 +:1094C0004000000000000004000000000000000058 +:1094D000000000000002000000000000000000008A +:1094E00000000000800000010000000000000000FB +:1094F000000000000000000040000000000000002C +:10950000000000000000004000000000000000001B +:10951000000000000000000000000000000000004B +:10952000000000000000000000000000000000003B +:109530001000000000000000000000000000000219 +:10954000000080000000400000000000000000005B +:10955000000000000000000000000000000000000B +:1095600000000000000000000000000000000000FB +:1095700000000000000000000000000000000000EB +:109580000000000000800000020000000000000059 :1095900000000000000000000000000000000000CB -:1095A0000000880000000000000000000000000033 +:1095A00000000000000000000000000000000000BB :1095B00000000000000000000000000000000000AB -:1095C000000000000000000000000000000000009B -:1095D000000000000000000000010000000000008A -:1095E0000000000000000000000002000000000079 -:1095F000000000000000000000000000000000006B -:10960000000000000000000000000000000000005A -:10961000000000000000000000000000000000004A -:1096200041000000000000000000000000000000F9 -:10963000000000000000000000000000000000002A -:10964000000000000090000000000000000000008A -:109650000000000000000000A000830000000200E5 -:1096600010001000100000000000000000000000CA -:1096700000000000000000000000000000000000EA +:1095C0000000000000000000000300000000008414 +:1095D0000000000800000008000000080908000062 +:1095E0000008000800000008000000000000000063 +:1095F0000000000800080008000000080008000043 +:109600000010001000000010000000000000000822 +:109610000000000000080008000800000008000822 +:10962000008400840084000000000008001000088E +:1096300000000000001000100010000000040008EE +:109640000008001000100000008400040008004121 +:109650000400000000009021000000210000000034 +:1096600000038200000204050080002100000000C9 +:1096700000000000000000000000004000000000AA :1096800000000000000000000000000000000000DA -:1096900000000000000000000000000000000000CA -:1096A00000000000000000000000000000000000BA -:1096B00000000000000000000000000000000000AA -:1096C000000000000000000000000000000000009A -:1096D0004000400040004000000004000400400042 -:1096E0000000000000000000000200000000000078 -:1096F00000000000000000000088050000000800D5 -:109700000000000000004100008200000000000096 -:109710000000000000000000000040000000000009 -:109720000000000000000000000800000000000031 -:109730000000000000000000000003000000000026 -:109740000000000000000000000400000000000015 -:1097500000000000000000000000000010000000F9 +:109690000000002100000021000000000000000088 +:1096A00000000008000800050000000000000000A5 +:1096B0000000000800080008000000000000000092 +:1096C0000000000000000000000000004008400012 +:1096D00000000000000000A00000000000000000EA +:1096E00000020000040000080084000400000400E0 +:1096F0000000000000000000410000000000000029 +:10970000000000A0000000A01010000000100008E1 +:1097100000000000000000001102202000000000F6 +:10972000000010000008000000A0000000820000FF +:109730000010000000000084008200000000000013 +:10974000000000000000000800080084080011A1CB +:109750000000C0000000C000000000000000000089 :1097600000000000000000000000000000000000F9 :1097700000000000000000000000000000000000E9 -:109780000000C00000000000000000000000000019 -:1097900000000000000000000000A0000000000029 -:1097A00000000000000000050000000010000000A4 -:1097B0000000000000000000004000000000000069 +:1097800000000000000000000000000000000000D9 +:1097900000000000000000000000000000000000C9 +:1097A00000000000000000000000000000000000B9 +:1097B00000000000000000000000000000000000A9 :1097C0000000000000000000000000000000000099 :1097D0000000000000000000000000000000000089 -:1097E0000000030000000000000000000000000076 -:1097F0000000000000000000000000000200000067 +:1097E0000000000000000000000000000000000079 +:1097F0000000000000000000000000000000000069 :109800000000000000000000000000000000000058 -:109810000000000000000000000000000000000048 -:1098200000000000000021000000210000000000F6 +:109810000008000000000000000000000000000040 +:109820000000000000000000000000000000000038 :109830000000000000000000000000000000000028 :109840000000000000000000000000000000000018 -:10985000000000000000000000000000C000000048 -:1098600000000000000000000000000000000000F8 -:109870000000000000000000000000000000A00048 -:109880009000000000000000000000000000000048 -:1098900000000000000000000000000000000004C4 -:1098A00000000000000000000000000000000000B8 -:1098B00000000000000000000000000000000000A8 -:1098C0000000000000000000000000000000000098 -:1098D0000000000000000000000000000000000088 -:1098E0000000000400001000080000000800000054 -:1098F0000000030000000000000000000000000065 -:109900000000000000000000080000000800000047 -:109910000000000000000000000003000000000044 -:10992000000000000000000000000800080008001F -:109930000000000000000000000000000000000027 -:1099400000000000000000000000080008000800FF -:1099500000000000000000000000000008000000FF +:1098500000000000000000000000000000002000E8 +:1098600000000000000082000000820000000120D3 +:10987000000000A100800000A00000000000000027 +:1098800000000000000000000000000000000000D8 +:1098900000000000000000000000000000000000C8 +:1098A00000000000000000000000000000000005B3 +:1098B00000000000000000000002000000000000A6 +:1098C0000000000000210000000000000000000077 +:1098D0000000000000004000000000A0410000085F +:1098E0000008000000000000008400880000000064 +:1098F0000804000000040010000000000000000048 +:10990000008400001100008411000008000800001D +:10991000000000000800000000000000000000003F +:1099200000000482000011840020110000A000A0AB +:10993000110000000008000000000000000000000E +:10994000000000080008000000080000008400007B +:1099500000000020000004020000000000000000E1 :1099600000000000000000000000000000000000F7 -:1099700000000000000000000000080000000000DF -:1099800000000000000000000000000000000000D7 -:1099900000000000000000000800000000000000BF -:1099A00000000000080000000800000000000000A7 -:1099B00000000000000000040000000000000000A3 -:1099C0000000000000000000000000000000000097 -:1099D000000000000000000000000000000008007F -:1099E0000000000000000000000003040000000070 -:1099F0000000000000000000000000000000000067 +:10997000C000000402000000000000080000000019 +:10998000000900000000000000000041000000008D +:1099900000080000000000000000000000000000BF +:1099A00000000000000000000000000000000000B7 +:1099B000001000000000000000000008000000008F +:1099C000000000000000000000080000000000008F +:1099D000000000000000000800000000000000007F +:1099E0000000000000000000000000000000000077 +:1099F00000000000000180000000000000000000E6 :109A00000000000000000000000000000000000056 :109A10000000000000000000000000000000000046 :109A20000000000000000000000000000000000036 :109A30000000000000000000000000000000000026 -:109A40000000000002000000000000000000000014 +:109A40000000000000000000000000000000000016 :109A50000000000000000000000000000000000006 :109A600000000000000000000000000000000000F6 -:109A700000000000000000000000000000000000E6 +:109A700000000000000000000000010000000000E5 :109A800000000000000000000000000000000000D6 -:109A900000000000000000000000000000000000C6 +:109A900000000000000000C00090002000900000C6 :109AA00000000000000000000000000000000000B6 :109AB00000000000000000000000000000000000A6 :109AC0000000000000000000000000000000000096 -:109AD0000000000000000000000000000000000086 +:109AD0000000000000000000000100010000000084 :109AE0000000000000000000000000000000000076 -:109AF0000000000000000000000000000000000066 +:109AF0000000000000000000000000004000000026 :109B00000000000000000000000000000000000055 -:109B10000000000000000000000000000000000045 +:109B100000000000000000000080000000000000C5 :109B20000000000000000000000000000000000035 :109B30000000000000000000000000000000000025 :109B40000000000000000000000000000000000015 -:109B50000000000000000000000000000000000005 -:109B600000000000000000000000000000000000F5 -:109B700000000000000000000000000000000000E5 -:109B800000000000000000000000000000000000D5 +:109B500000000000000000000000004100080008B4 +:109B600000100000000000000000000000000000E5 +:109B700000000000000000000000800800080088CD +:109B80008000000000000000000000000000000055 :109B900000000000000000000000000000000000C5 :109BA00000000000000000000000000000000000B5 :109BB00000000000000000000000000000000000A5 :109BC0000000000000000000000000000000000095 :109BD0000000000000000000000000000000000085 :109BE0000000000000000000000000000000000075 -:109BF0000000000000000000000000000000000065 -:109C00000000000000000000000000000000000054 +:109BF00000000000000000000000000010008801CC +:109C00009084C0020000000000000000000000007E :109C10000000000000000000000000000000000044 :109C20000000000000000000000000000000000034 -:109C300000000000000000000020000000400000C4 +:109C30000000000000000000000000000000000024 :109C40000000000000000000000000000000000014 :109C50000000000000000000000000000000000004 :109C600000000000000000000000000000000000F4 -:109C700000000800000000000000000000000000DC -:109C800000000000000000000000000000000000D4 -:109C900000000000000000000000000000000000C4 -:109CA00000000000000000000000000000000000B4 -:109CB00000000000000000000000000004000000A0 +:109C700000000000000000000000000000000000E4 +:109C80009000000000000000000000000000000044 +:109C9000000000000000000000000000000088003C +:109CA0000000000020000000000000000000000094 +:109CB00000000000000000000000000000000000A4 :109CC0000000000000000000000000000000000094 :109CD0000000000000000000000000000000000084 :109CE0000000000000000000000000000000000074 :109CF0000000000000000000000000000000000064 -:109D00000000000000000000000000000000000053 +:109D0000000000000000050000000000000000004E :109D10000000000000000000000000000000000043 :109D20000000000000000000000000000000000033 -:109D3000000000000000000000000500000080009E +:109D30000000000000000000000000000000000023 :109D40000000000000000000000000000000000013 :109D50000000000000000000000000000000000003 -:109D600000000000000000000000000000000000F3 -:109D700000000000000300000000000000000000E0 -:109D800000000000000000000000000000000000D3 +:109D600000000000100008000000000000000000DB +:109D700000000000000000000000000000000000E3 +:109D800000008000000080808000000000000000D3 :109D900000000000000000000000000000000000C3 :109DA00000000000000000000000000000000000B3 :109DB00000000000000000000000000000000000A3 @@ -96758,23 +96758,23 @@ :109DD0000000000000000000000000000000000083 :109DE0000000000000000000000000000000000073 :109DF0000000000000000000000000000000000063 -:109E00000000000000000000000000000000000052 +:109E000000000000C00088A002020800000000005E :109E10000000000000000000000000000000000042 :109E20000000000000000000000000000000000032 :109E30000000000000000000000000000000000022 :109E40000000000000000000000000000000000012 :109E50000000000000000000000000000000000002 :109E600000000000000000000000000000000000F2 -:109E700000000000000000000000070000000000DB -:109E800000000000000000000000000000000000D2 +:109E700000000000000000000000000000000000E2 +:109E8000000000000000600000E000000000000092 :109E900000000000000000000000000000000000C2 :109EA00000000000000000000000000000000000B2 :109EB00000000000000000000000000000000000A2 -:109EC0000042000007000000000000000000000049 +:109EC0000000000000000000000000000000000092 :109ED0000000000000000000000000000000000082 :109EE0000000000000000000000000000000000072 :109EF0000000000000000000000000000000000062 -:109F00000000000000000000000000000000000051 +:109F0000000000000000000028F8282F00000000DA :109F10000000000000000000000000000000000041 :109F20000000000000000000000000000000000031 :109F30000000000000000000000000000000000021 @@ -96782,7 +96782,7 @@ :109F50000000000000000000000000000000000001 :109F600000000000000000000000000000000000F1 :109F700000000000000000000000000000000000E1 -:109F800000000000000000000000000000000000D1 +:109F80000000000000000000000028282828000031 :109F900000000000000000000000000000000000C1 :109FA00000000000000000000000000000000000B1 :109FB00000000000000000000000000000000000A1 @@ -96791,29 +96791,29 @@ :109FE0000000000000000000000000000000000071 :109FF0000000000000000000000000000000000061 :10A000000000000000000000000000000000000050 -:10A010000000000000000000000000000000000040 -:10A020000000000000000000000000000000000030 +:10A0100014141F14000000000000000000000000E5 +:10A020000000000000000000000000000F1F1F0FD4 :10A030000000000000000000000000000000000020 :10A040000000000000000000000000000000000010 :10A050000000000000000000000000000000000000 :10A0600000000000000000000000000000000000F0 :10A0700000000000000000000000000000000000E0 :10A0800000000000000000000000000000000000D0 -:10A0900000000000000000000000000000000000C0 -:10A0A00000000000000000000000000000000000B0 -:10A0B00000000000000000000000000000000000A0 +:10A0900000001F1414140000000000000000000065 +:10A0A000000000000000000000000000000000149C +:10A0B000140000000000000000000000000000008C :10A0C0000000000000000000000000000000000090 :10A0D0000000000000000000000000000000000080 :10A0E0000000000000000000000000000000000070 :10A0F0000000000000000000000000000000000060 -:10A100000000000805000000000000000000000042 -:10A11000000000000000000000000000000000003F +:10A10000000000000000000000000000000000004F +:10A11000A0610007800D00050000000000000000A5 :10A12000000000000000000000000000000000002F -:10A13000000000000000000000000000000000001F -:10A140000000000000000000000005180A200500C3 -:10A1500005A000000000000000000000000000005A +:10A1300000005000000000000000000000000000CF +:10A14000000000000000000000000000000000000F +:10A1500000000000000000000000000000000000FF :10A1600000000000000000000000000000000000EF -:10A1700000000000000000000000000000000000DF +:10A17000000000610006000D00000000000000006B :10A1800000000000000000000000000000000000CF :10A1900000000000000000000000000000000000BF :10A1A00000000000000000000000000000000000AF @@ -96837,7 +96837,7 @@ :10A2C000000000000000000000000000000000008E :10A2D000000000000000000000000000000000007E :10A2E000000000000000000000000000000000006E -:10A2F000000000000000000000000000000000005E +:10A2F00000000000000000003C003D0500000000E0 :10A30000000000000000000000000000000000004D :10A31000000000000000000000000000000000003D :10A32000000000000000000000000000000000002D @@ -96845,179 +96845,179 @@ :10A34000000000000000000000000000000000000D :10A3500000000000000000000000000000000000FD :10A3600000000000000000000000000000000000ED -:10A3700000000000000000000000000000000000DD -:10A380000000000020008800000000002020008065 -:10A3900020800005000000002000000001000000F7 -:10A3A000000000002000200000000000200000004D -:10A3B000200000000002000000001000000000006B -:10A3C000000000030000000000000000000020006A -:10A3D000000020000000000000000000200000003D -:10A3E000000000000002000000000000000020004B -:10A3F000000020000000000000000000200000001D -:10A40000000000004000000000000000000000010B -:10A4100040100020000000000000000000022000AA -:10A42000000000000000000000001000000000001C -:10A43000000000000000000000000002000000001A -:10A44000000200000000000000000000000000000A -:10A4500000000000000000020002000200020000F4 -:10A4600000000000000000000000000000000000EC +:10A37000000000000000000000003D053C0000005F +:10A38000000000000000400000000000000000008D +:10A3900000000000000000000000000000000000BD +:10A3A000000000000000200000000000000000008D +:10A3B0000000000000000000000000000080000419 +:10A3C0000004000000000000200000000000000069 +:10A3D000000000000000000000000000000000007D +:10A3E00000040008100000002010400000080000D9 +:10A3F000000000000000000000000000000000005D +:10A4000000100000000040000000000000000000FC +:10A41000000000000000000000000000000000003C +:10A42000000010000000000000C00000000000005C +:10A430000000000000000000000000000000000814 +:10A4400000000000000040000000000000000000CC +:10A4500000000000000000000000000000000000FC +:10A46000000000401000400000000000000000005C :10A4700000000000000000000000000000000000DC -:10A4800000000000000000000000000000000000CC -:10A49000008000100210000000000000000000001A -:10A4A000000000000000000000000000000010009C -:10A4B0000000000008000121000000000000000072 -:10A4C000000000000000000000000000000000008C -:10A4D0000000000000000800000000000000020072 -:10A4E00084000000840082000000000000000000E2 -:10A4F0000000000000000800000000000000000054 -:10A50000000000000000000000000000004000000B -:10A51000000000200001000000000000000000001A -:10A52000000000000000000000000000000000002B -:10A53000800000000000000004A0000000000000F7 -:10A5400000000000000000000000000000002000EB -:10A5500000000000000000000000000000000000FB -:10A5600000000000000000000000000000000000EB -:10A5700000000000000000000000000000000000DB -:10A580000000020000000000000084000000000045 -:10A590000000001020030000000000000000400048 -:10A5A000080000000004000000000021000000007E -:10A5B000000000000000000000000020400000003B -:10A5C0000800000000000000000000000000000083 -:10A5D0000000000000000000000000000000020079 -:10A5E000000000000000000000000000000000006B -:10A5F0000000000000000000000000000400000057 -:10A60000000000000000000000000000000000004A -:10A610000000000000010000000000000000000039 -:10A6200000000000000000010000000000044000E5 -:10A630000000000000000000000000000001000019 -:10A64000000000000000000000000000000000000A -:10A6500000000000000000002100000000000000D9 -:10A6600000000000000000001100000000000000D9 -:10A6700000000000000000000000000000000000DA -:10A6800000000000000000000000000000000200C8 -:10A69000000082000000000000000800010000002F +:10A48000000040000000000000000000000000008C +:10A4900000000000040000000000000000000000B8 +:10A4A000000000008200000000000000000000002A +:10A4B0000000000004000000000000000000000098 +:10A4C000000000008280000000000000000000008A +:10A4D0000000000000000408000000000000000070 +:10A4E000000000000000020000000000000000006A +:10A4F00000000000000004000000000082000000D6 +:10A500000000000002000000000000000000000049 +:10A510000000000000000000000000000008000033 +:10A520000000000800000000000000000000000023 +:10A530000000000000000000000000000088000093 +:10A54000000800820000000200000000000000007F +:10A5500000000008000000000200000000000008E9 +:10A5600000000008000000000300000000000000E0 +:10A570000000008400000000020800000000000845 +:10A5800000080010000000000208000000000000A9 +:10A5900000000000000000100000000000000000AB +:10A5A00000000000040000000000000000000000A7 +:10A5B0000000000000000000000002000000000099 +:10A5C000000000000000000000000000000000008B +:10A5D000000000000000000000000000000000007B +:10A5E0000000000000000000000000000000040067 +:10A5F000000000000000000000000000000000005B +:10A60000000000000008040000000000000000003E +:10A61000000000000000000000000020000000001A +:10A62000000000000008000000000008000000001A +:10A63000000000000000000000000000000000001A +:10A6400003000900000000000000000000000000FE +:10A650000000000000000000000000000084000076 +:10A6600000000000000000000000000000000000EA +:10A6700000000000000000080000000000000000D2 +:10A6800000000000000000000000000000000000CA +:10A6900000000000000000000000000000000000BA :10A6A00000000000000000000000000000000000AA -:10A6B0000000000000000000000001000080000019 +:10A6B0000000840000000000000000000000000016 :10A6C000000000000000000000000000000000008A -:10A6D0000000000008000000000000000000000072 +:10A6D000000000000000000000000000000000007A :10A6E000000000000000000000000000000000006A :10A6F000000000000000000000000000000000005A -:10A700000000000000000000000000000000000049 -:10A71000008800000000000009900000A100040073 -:10A7200000A0000000004000000000000000000049 -:10A7300000A0000000000000000000002000000455 +:10A700000000000000000000000000000000000445 +:10A710000000000000000000000000000000000039 +:10A720000000000000000000000000000000000029 +:10A730000000000000000000000000000000000019 :10A740000000000000000000000000000000000009 :10A7500000000000000000000000000000000000F9 -:10A7600000000000000003000000000000000000E6 +:10A7600000000000000000000000000000000000E9 :10A7700000000000000000000000000000000000D9 :10A7800000000000000000000000000000000000C9 -:10A7900000008200000082000000000000000800AD -:10A7A00000000008C00082000000C000000000009F -:10A7B0000000000000000000900000000000000009 +:10A7900000000000000000000000000000000000B9 +:10A7A00000000000000000000000000000000000A9 +:10A7B0000000000000000000000000000000000099 :10A7C0000000000000000000000000000000000089 :10A7D0000000000000000000000000000000000079 -:10A7E00000000000000000008200000000000000E7 +:10A7E0000000000000000000000000000000000069 :10A7F0000000000000000000000000000000000059 :10A800000000000000000000000000000000000048 -:10A810000000000000000000000000000000000038 -:10A820000000000000000000000000000000000028 -:10A8300000000000000000000000000000000020F8 -:10A840000000000000000000000000000000000008 -:10A8500000000000000000000000000000000000F8 -:10A8600000000000000000000000000000000000E8 +:10A8100000000000008800000000000000000000B0 +:10A8200000000000000000000008000011002008E7 +:10A83000000400000000000000000000000800000C +:10A8400000840000000000000000000005000088F7 +:10A85000200000000000000000000000008400084C +:10A8600000000084000000000000000000840000E0 :10A8700000000000000000000000000000000000D8 :10A8800000000000000000000000000000000000C8 -:10A890000000000000000000000040000000000078 -:10A8A0000000000000000021000000000000000087 -:10A8B000010000000000000000000000C0000000D7 -:10A8C0000100000000000000000000000000000087 -:10A8D0000000000000000000000008000000000070 -:10A8E0000000000000000000000000000000000068 -:10A8F000018001000180010000000000000900004B +:10A890000000008800000000000000000000000030 +:10A8A00000000000000000000000000000000000A8 +:10A8B0000000000000000000000000000000000098 +:10A8C0000000000000000000000000080000000080 +:10A8D0000000000000000000000000000000000078 +:10A8E0000000000000000008000000000008000850 +:10A8F0000000000000000008000000000000000050 :10A900000000000000000000000000000000000047 :10A910000000000000000000000000000000000037 -:10A920000000050000000000000000000000000022 -:10A9300000002000000000000000000000000000F7 -:10A9400000002000000000004000000000000000A7 +:10A920000000000000000000000000000000000027 +:10A930000000000000000000000000000000000017 +:10A940000000000000000000000000000000000007 :10A9500000000000000000000000000000000000F7 :10A9600000000000000000000000000000000000E7 -:10A97000000020042000200420000000000011003E +:10A9700000000000000000000000000000000000D7 :10A9800000000000000000000000000000000000C7 :10A9900000000000000000000000000000000000B7 -:10A9A0000000C0A000900000C002000000000000F5 -:10A9B0000000000000000100000000000000000096 -:10A9C0000000010000000000000000000000000086 -:10A9D0000000000000000000000000000000000077 +:10A9A00000000000000000000000000000000000A7 +:10A9B0000000000000000000000000000000000097 +:10A9C0000000000000000000000000000000000087 +:10A9D0000000000000001000000000000000000067 :10A9E0000000000000000000000000000000000067 -:10A9F0000000000001010000000100000000000054 +:10A9F0000000000000000000000000000000000057 :10AA00000000000000000000000000000000000046 :10AA10000000000000000000000000000000000036 -:10AA20000000000000800080000080800000000026 -:10AA30000000000000000000100000000000000006 -:10AA400000000000110021000000000000000000D4 -:10AA500000000000000000000000000000000000F6 +:10AA20000000000000000000000000000000000026 +:10AA30000000000000000000000000000000000016 +:10AA40000000000000000000000000000000000006 +:10AA500000000000000020000000000000000000D6 :10AA600000000000000000000000000000000000E6 -:10AA70000000000000001108002109100000000083 +:10AA700000000000000000000000000000000000D6 :10AA800000000000000000000000000000000000C6 :10AA900000000000000000000000000000000000B6 -:10AAA0000000000000000000004080008000000066 +:10AAA00000000000000000000000000000000000A6 :10AAB0000000000000000000000000000000000096 -:10AAC0000000000000000008090000030000000072 +:10AAC0000000000000000000000000000000000086 :10AAD0000000000000000000000000000000000076 :10AAE0000000000000000000000000000000000066 -:10AAF00000000000000000000080080011110000AC +:10AAF0000000000000000000000000000000000056 :10AB00000000000000000000000000000000000045 :10AB10000000000000000000000000000000000035 -:10AB2000000000000000000000000001A0A0900054 +:10AB20000000000000000000000000000000000025 :10AB30000000000000000000000000000000000015 -:10AB40000000000000000000000101000000000003 +:10AB40000000000000000000000000000000000005 :10AB500000000000000000000000000000000000F5 :10AB600000000000000000000000000000000000E5 -:10AB70000000000000000000000000400100010192 +:10AB700000000000000000000000000000000000D5 :10AB800000000000000000000000000000000000C5 :10AB900000000000000000000000000000000000B5 -:10ABA0000000000000000000000000100010000481 -:10ABB000008800000000000000000000000000000D -:10ABC00000000000000000000000000088000000FD -:10ABD0000000010000000000000000000000000074 -:10ABE0000000000000000000000000000000000065 -:10ABF0000000000000000000000000000001000054 -:10AC00000000000100000000000000000000000043 +:10ABA00000000000000000000000000000000000A5 +:10ABB0000000000000000000000000000000000095 +:10ABC0000000000000000000000000000000000085 +:10ABD0000000000000000000000000000001000074 +:10ABE0000001000000000000000000000000000064 +:10ABF0000000000000000000000000000000000055 +:10AC00000000000000000000000000000000000044 :10AC10000000000000000000000000000000000034 -:10AC200000000000000000000000000000000080A4 -:10AC30000080000000000000000000000000000094 +:10AC20000000000000000000000000000000000024 +:10AC30000000000000000000000000000000000014 :10AC40000000000000000000000000000000000004 -:10AC500000000500020000000000000000000000ED -:10AC600000000000000000000000000000000000E4 -:10AC700000000000000000000000000000000008CC -:10AC800000000000001100000000000000000000B3 +:10AC500000000000000000000000000000200008CC +:10AC6000000800410000000000000000000000009B +:10AC700000000000000000000000000000000000D4 +:10AC800000000000000000000000000000000000C4 :10AC900000000000000000000000000000000000B4 -:10ACA0000000000000000000000000000000800024 -:10ACB0008010800000000000000000000000000084 -:10ACC0004011030000000000000000000000000030 -:10ACD000000000000000000800210000000000004B +:10ACA00000000000000000000000000000000000A4 +:10ACB0000000000000000000000000000000000094 +:10ACC0000000000000000000000000000000000084 +:10ACD0000000000000000000000000000000000074 :10ACE0000000000000000000000000000000000064 :10ACF0000000000000000000000000000000000054 -:10AD00000800110000001111000000000000000008 +:10AD00000000000000000000000000000000000043 :10AD10000000000000000000000000000000000033 :10AD20000000000000000000000000000000000023 -:10AD300008001003040040000000000000000000B4 -:10AD40000000000101000000000000000000000001 +:10AD30000000000000000000000000000000000013 +:10AD40000000000000000000000000000000000003 :10AD500000000000000000000000000000000000F3 :10AD600000000000000000000000000000000000E3 :10AD700000000000000000000000000000000000D3 -:10AD800000000100010000000101000000000000BF +:10AD800000000000000000000000000000000000C3 :10AD900000000000000000000000000000000000B3 :10ADA00000000000000000000000000000000000A3 -:10ADB0000000000600000700000A0000000000007C -:10ADC0000000600000E00000000000000000000043 -:10ADD0000000000000E0000000000000000007008C +:10ADB0000000000000000000000000000000000093 +:10ADC0000000000000000000000000000000000083 +:10ADD0000000000000000000000000000000000073 :10ADE0000000000000000000000000000000000063 :10ADF0000000000000000000000000000000000053 -:10AE000000000000600000E0000000000000000002 +:10AE00000000000000000000000000000000000042 :10AE10000000000000000000000000000000000032 :10AE20000000000000000000000000000000000022 -:10AE3000000000000000000081818181000000000E +:10AE30000000000000000000000000000000000012 :10AE40000000000000000000000000000000000002 :10AE500000000000000000000000000000000000F2 :10AE600000000000000000000000000000000000E2 @@ -97025,7 +97025,7 @@ :10AE800000000000000000000000000000000000C2 :10AE900000000000000000000000000000000000B2 :10AEA00000000000000000000000000000000000A2 -:10AEB000000000000000C3C343C381810181000082 +:10AEB0000000000000000000000000000000000092 :10AEC0000000000000000000000000000000000082 :10AED0000000000000000000000000000000000072 :10AEE0000000000000000000000000000000000062 @@ -97041,16 +97041,16 @@ :10AF800000000000000000000000000000000000C1 :10AF900000000000000000000000000000000000B1 :10AFA00000000000000000000000000000000000A1 -:10AFB0000000000000000000000000003CC300662C -:10AFC00000990000000000000000000000000000E8 +:10AFB0000000000000000000000000000000000091 +:10AFC0000000000000000000000000000000000081 :10AFD0000000000000000000000000000000000071 :10AFE0000000000000000000000000000000000061 :10AFF0000000000000000000000000000000000051 :10B000000000000000000000000000000000000040 :10B010000000000000000000000000000000000030 :10B020000000000000000000000000000000000020 -:10B0300000000000000000000000000000003CC311 -:10B040000066009900000000000000000000000001 +:10B030000000000000000000000000000000000010 +:10B040000000000000000000000000000000000000 :10B0500000000000000000000000000000000000F0 :10B0600000000000000000000000000000000000E0 :10B0700000000000000000000000000000000000D0 @@ -97058,386 +97058,386 @@ :10B0900000000000000000000000000000000000B0 :10B0A00000000000000000000000000000000000A0 :10B0B0000000000000000000000000000000000090 -:10B0C00000280000000000000000000000000061F7 -:10B0D0000005800D0000000000000000000000607E -:10B0E0000006000C00000500000800000000000041 -:10B0F0000000000000000000000000000000000050 +:10B0C0000000000000000000000000000000000080 +:10B0D0000000000000000000000000000000000070 +:10B0E00000000000000000000000000000000061FF +:10B0F0000006000D0000000000000000000000003D :10B10000000000000000000000000000000000003F -:10B11000006100018001000000000000000000004C +:10B11000000000000000000000000000000000002F :10B12000000000000000000000000000000000001F :10B13000000000000000000000000000000000000F :10B1400000000000000000000000000000000000FF -:10B15000F000F0000000000000000000000000000F -:10B1600000000000FFFF00000000000000000000E1 -:10B1700000000000000000000000000000000000CF +:10B1500000000000000000000000000000000000EF +:10B1600000000000000000000000000000000000DF +:10B170000000000028F882F200000000000000003B :10B1800000000000000000000000000000000000BF -:10B190000000EB1400003C3C000000000000000038 +:10B1900000000000000000000000000000000000AF :10B1A000000000000000000000000000000000009F :10B1B000000000000000000000000000000000008F :10B1C000000000000000000000000000000000007F -:10B1D0000000F000F000000000000000000000008F +:10B1D000000000000000000000000000000000006F :10B1E000000000000000000000000000000000005F -:10B1F000000000000000000000000000000000004F +:10B1F00000000000000000F000F00000000000006F :10B20000000000000000000000000000000000003E -:10B2100000000000EB1400003C3C000000000000B7 +:10B21000000000000000000000000000000000002E :10B22000000000000000000000000000000000001E :10B23000000000000000000000000000000000000E :10B2400000000000000000000000000000000000FE :10B2500000000000000000000000000000000000EE -:10B260000000000000000000F0F0000000000000FE +:10B2600000000000000000000000000000000000DE :10B2700000000000000000000000000000000000CE :10B2800000000000000000000000000000000000BE -:10B29000000000000000F00F0000A050A0500000CF +:10B2900000000000000000000000000000000000AE :10B2A000000000000000000000000000000000009E :10B2B000000000000000000000000000000000008E :10B2C000000000000000000000000000000000007E :10B2D000000000000000000000000000000000006E -:10B2E00000000000000000000000F0F0000000007E +:10B2E000000000000000000000000000000000005E :10B2F000000000000000000000000000000000004E :10B30000000000000000000000000000000000003D -:10B310000000000000000000F00F0000A050A0504E +:10B31000000000000000000000000000000000002D :10B32000000000000000000000000000000000001D :10B33000000000000000000000000000000000000D -:10B34000400040002000000000000000000000005D -:10B3500000000000000000000000200000000002CB -:10B360002000000020000000000000000000040099 -:10B3700000000000000000000000200000000000AD -:10B38000000200000000200000000000000000009B -:10B39000000000000000000000000000200000008D -:10B3A000000000000000200000000000000000007D -:10B3B000000000000000000000000000000000008D -:10B3C00000000090200021000900000000000000A3 -:10B3D000100000000000000000000000000040001D -:10B3E000000100002000000000000000000000023A -:10B3F000000000000000000000000000000040000D -:10B4000000000000200000000000000040000000DC -:10B4100000000000000000000002004000000000EA -:10B42000400000004000000000000000000000009C -:10B43000000000004000400000000000000020006C -:10B4400000000000000000000000000000000000FC +:10B3400000000000000000000000000000200000DD +:10B35000000040004000000000000000000000006D +:10B36000000000000000400000000000000000009D +:10B370000000200020000000000000000005000088 +:10B38000000000000000000020000000000000009D +:10B39000000000002000200000000000000000006D +:10B3A000000000000000000020000000000000007D +:10B3B00000000000200020000000000000800000CD +:10B3C0000010000000000002000000000000000269 +:10B3D000000000000000000000000000000200006B +:10B3E00000004000000000000000400000000000DD +:10B3F000000000000000000000000000000000004D +:10B4000000000000400000000000000000000000FC +:10B41000000000000000000000000000000000002C +:10B42000000000000000000000000000000000001C +:10B43000400000000000000000000000000200408A +:10B4400000000001000000000000400000000000BB :10B4500000000000000000000000000000000000EC -:10B460000080010200000000000000000000000059 -:10B47000000000000000000000000000004000404C -:10B48000004000400000000000000000000000003C -:10B490000000000000000400040000200020000064 -:10B4A0000202000002000000040000000000000092 +:10B4600000000000000000000000000000000000DC +:10B4700000000000000000000000000000000000CC +:10B4800000000000000000000000000000000000BC +:10B4900000000000000000000000010004000000A7 +:10B4A000000000000000000000000000000000009C :10B4B000000000000000000000000000000000008C -:10B4C0000000000000000000008400000000008870 -:10B4D0000000000000000008000400000000000858 -:10B4E0000000000240010000000000000000000019 -:10B4F000000000000000000800080000000000023A +:10B4C00000000000000000000000000080000000FC +:10B4D000000000000000000000000000000000006C +:10B4E000000000000000000000000000000000005C +:10B4F000000000000000000000000000000000004C :10B50000000000000000000000000000000000003B -:10B510000000000000000000800880080001000119 -:10B52000000000010000000000000000000000001A -:10B5300000000000000000000008000800000000FB -:10B54000000800080008000882418800A000C00030 -:10B5500000000000C00040000000000800000000E3 -:10B5600000000000000000000000000000000000DB +:10B5100000000000000000000000000004008000A7 +:10B52000000000000000000000000000000000001B +:10B530000000008400100000000000000000000077 +:10B5400000000000000000000000000000000000FB +:10B5500000000000000000000000000000000000EB +:10B5600088000400C000000000000000000000008F :10B5700000000000000000000000000000000000CB :10B5800000000000000000000000000000000000BB -:10B59000000010000000000000000000000000009B +:10B5900000000000000000080000000000000000A3 :10B5A000000000000000000000000000000000009B -:10B5B0000000000800000000000000000000000083 -:10B5C00000008400000000000000000008000000EF -:10B5D000000000000000000000000040000000002B -:10B5E000000000000000000000000000000000005B -:10B5F000000000000000000000000000000000004B -:10B60000000000000000000000000000000000003A +:10B5B000000000000000000000000000000000008B +:10B5C0000000000000118800900000000000000052 +:10B5D000000000000000000000000000000000006B +:10B5E000000000000000090004000020000000002E +:10B5F0000000000000000000000003002100000027 +:10B6000000000000000000000000000000000084B6 :10B61000000000000000000000000000000000002A :10B62000000000000000000000000000000000001A :10B63000000000000000000000000000000000000A -:10B6400000000000000000000000000000000000FA -:10B650000000000082001000020000000002000054 -:10B6600000000000000000000000000200000000D8 +:10B6400000000000000000000900000000000000F1 +:10B6500000000000000000000000000000000000EA +:10B6600000000000000000000000000004000000D6 :10B6700000000000000000000000000000000000CA -:10B6800000000009000000000000000000000000B1 +:10B6800000000000000000000000000000000000BA :10B6900000000000000000000000000000000000AA :10B6A000000000000000000000000000000000009A -:10B6B000000900040000000000000000000000007D +:10B6B000000000000000000000000000000000008A :10B6C000000000000000000000000000000000007A -:10B6D000000000000000004000000000000000002A -:10B6E00000000000000000100000210040000000E9 +:10B6D000000000000000000000000000000000006A +:10B6E000000000000000000000000000000000005A :10B6F000000000000000000000000000000000004A :10B700000000000000000000000000000000000039 :10B710000000000000000000000000000000000029 :10B720000000000000000000000000000000000019 -:10B730000000000000040000000000000000000005 +:10B730000000000000000000000000000000000009 :10B7400000000000000000000000000000000000F9 -:10B7500000000000000440000040004000400040A5 -:10B7600000000000000000000000000000000000D9 +:10B7500000000000000000000000000000000000E9 +:10B76000000000000000A000000000000000000039 :10B7700000000000000000000000000000000000C9 :10B7800000000000000000000000000000000000B9 :10B7900000000000000000000000000000000000A9 -:10B7A0000800000000000000400000080100002028 +:10B7A0000000000000000000000000000000000099 :10B7B0000000000000000000000000000000000089 -:10B7C0000000000000000000000000000000000079 -:10B7D0000000000000000000000000C01000000099 -:10B7E0000000000000000000000000000300000056 -:10B7F000000000840000000000C000000000008481 -:10B800000000000000000000000000000000000038 +:10B7C0000000000000000000000000000000042055 +:10B7D0000000000000200000000000000000000049 +:10B7E0000000000200000000000000000000000057 +:10B7F0000000000000000000000000000000000049 +:10B80000000000000000210000000000000000A077 :10B810000000000000000000000000000000000028 -:10B82000000000000000000000000000000008040C -:10B830000001000000000000000000000000000007 +:10B820000000000000000000000000000000000018 +:10B830000000000000000000000000000000000008 :10B8400000000000000000000000000000000000F8 -:10B85000000000000041000000000040000900005E -:10B860000000000000000000400040000000000058 -:10B8700000000000000000000000000000090000BF -:10B8800000000000000000000002000000000000B6 +:10B8500000000020000000000000000000000000C8 +:10B8600000000800000000000000000000000000D0 +:10B8700000000000000000000000000000001000B8 +:10B8800010000000000000000000000000000000A8 :10B8900000000000000000000000000000000000A8 -:10B8A0000000000000000000000000000000002177 -:10B8B0000008000800080000000900000000000067 +:10B8A0000008000000000000000000000000000090 +:10B8B0000000000000000000000000000000000088 :10B8C0000000000000000000000000000000000078 :10B8D0000000000000000000000000000000000068 :10B8E0000000000000000000000000000000000058 :10B8F0000000000000000000000000000000000048 :10B900000000000000000000000000000000000037 -:10B910000000000000000000000000000000000027 -:10B9200000000000000000000000200041000000B6 +:10B910000000000000000002000000000000000025 +:10B920000000000000000000000000000000000017 :10B930000000000000000000000000000000000007 :10B9400000000000000000000000000000000000F7 -:10B950000000000000000000088800820002401083 +:10B9500000000000000000000000000000000000E7 :10B9600000000000000000000000000000000000D7 -:10B9700001000000040000000000000000000000C2 +:10B9700000000000000000000000000000000000C7 :10B9800000000000000000000000000000000000B7 :10B9900000000000000000000000000000000000A7 :10B9A0000000000000000000000000000000000097 -:10B9B000000040A0010190A190C100000000000023 +:10B9B0000000000000000000000000000000000087 :10B9C0000000000000000000000000000000000077 -:10B9D00000000000000000000000000000000080E7 +:10B9D0000000000000000000000000000000000067 :10B9E0000000000000000000000000000000000057 -:10B9F0000000200010008000000000000000000097 +:10B9F0000000000000000000000000000000000047 :10BA00000000000000000000000000000000000036 :10BA10000000000000000000000000000000000026 :10BA20000000000000000000000000000000000016 -:10BA3000000000008011204000058011000000007F +:10BA30000000000000000000000000000000000006 :10BA400000000000000000000000000000000000F6 -:10BA50000000000000000000000000008000808561 -:10BA60000080808000000000000000000000000056 -:10BA70000000000040000800410005000000000038 +:10BA500000000000000000000000000000000000E6 +:10BA600000000000000000000000000000000000D6 +:10BA700000000000000000000000000000000000C6 :10BA800000000000000000000000000000000000B6 :10BA900000000000000000000000000000000000A6 :10BAA0000000000000000000000000000000000096 -:10BAB00000800000008080000000004080910000B5 +:10BAB0000000000000000000000000000000000086 :10BAC0000000000000000000000000000000000076 -:10BAD0000000000000000000000000000000100056 -:10BAE00010C0080410C000000000000000000000AA -:10BAF0000000000000000000010000000000000045 +:10BAD0000000000000008000000000008000000066 +:10BAE0000000000000000000000000000000000056 +:10BAF0000000000000000000000000000000000046 :10BB00000000000000000000000000000000000035 :10BB10000000000000000000000000000000000025 :10BB20000000000000000000000000000000000015 -:10BB3000000000080000000840200000000190A163 +:10BB30000000000000000090000000000000000075 :10BB400000000000000000000000000000000000F5 -:10BB500000000000000000000000000000000000E5 -:10BB600009100010C00210100000000000000000CA -:10BB7000000000000000000000000000A000000124 +:10BB50000000000000000000100088000000C0008D +:10BB600000000000000000000000000000000000D5 +:10BB700000000000000000000000000000000000C5 :10BB800000000000000000000000000000000000B5 :10BB900000000000000000000000000000000000A5 :10BBA0000000000000000000000000000000000095 -:10BBB0000000000000000800000000010108829160 -:10BBC00001890000000000000000000000000000EB +:10BBB0000000000000002000000000000000000065 +:10BBC0000000000000000000000000000000000075 :10BBD0000000000000000000000000000000000065 -:10BBE0000000C10000008080008000000000000014 -:10BBF0000000000000000000000000040041804040 -:10BC00000002000000000000000000000000000032 +:10BBE0000000000000000000004000000000000015 +:10BBF0000000000000000000000000000000000045 +:10BC00000000000000000000000000000000000034 :10BC10000000000000000000000000000000000024 :10BC20000000000000000000000000000000000014 -:10BC30000000000009000000800000000020210337 -:10BC400020A009900000000000000000000000009B +:10BC30000000000000000000000000000000000004 +:10BC400000000000000000000000000000000000F4 :10BC500000000000000000000000000000000000E4 -:10BC600000000000000800800080000000000000CC +:10BC600000000000000000000000000000000000D4 :10BC700000000000000000000000000000000000C4 :10BC800000000000000000000000000000000000B4 :10BC900000000000000000000000000000000000A4 :10BCA0000000000000000000000000000000000094 -:10BCB0000000000000000000001100000000210052 -:10BCC000210920802000000000000000000000008A +:10BCB0000000000000000000000000000000000084 +:10BCC0000000000000000000000000000000000074 :10BCD0000000000000000000000000000000000064 -:10BCE000000000000000900088108840080000005C +:10BCE0000000000000000000000000000000000054 :10BCF0000000000000000000000000000000000044 :10BD00000000000000000000000000000000000033 :10BD10000000000000000000000000000000000023 :10BD20000000000000000000000000000000000013 :10BD30000000000000000000000000000000000003 -:10BD40000100010801840000000000000000000064 +:10BD400000000000000000000000000000000000F3 :10BD500000000000000000000000000000000000E3 -:10BD60000000000000000000000000000000484249 +:10BD600000000090008800000000000000000000BB :10BD700000000000000000000000000000000000C3 :10BD800000000000000000000000000000000000B3 :10BD900000000000000000000000000000000000A3 :10BDA0000000000000000000000000000000000093 -:10BDB0000000000000000000000000000000400043 -:10BDC000000000210000070000000000000000004B +:10BDB0000000000000000000000000000000210062 +:10BDC0000000000000000000000000000000000073 :10BDD0000000000000000000000000000000000063 -:10BDE000000000000000000000006000006004107F -:10BDF000082000000000000000000000000000001B +:10BDE0000000000000000000000000000000000053 +:10BDF0000000000000000000000000000000000043 :10BE00000000000000000000000000000000000032 :10BE10000000000000000000000000000000000022 :10BE20000000000000000000000000000000000012 :10BE30000000000000000000000000000000000002 -:10BE4000000000000000000000F0A0500000000012 +:10BE400000000000000000000000000000000000F2 :10BE500000000000000000000000000000000000E2 -:10BE600000000000000000000000000009000009C0 -:10BE700001400280000000000000000000000000FF +:10BE600000000000000000000000000000000000D2 +:10BE700000000000000000000000000000000000C2 :10BE800000000000000000000000000000000000B2 :10BE900000000000000000000000000000000000A2 :10BEA0000000000000000000000000000000000092 :10BEB0000000000000000000000000000000000082 -:10BEC0000000000000000000000000F000F0000092 +:10BEC0000000000000000000000000000000000072 :10BED0000000000000000000000000000000000062 -:10BEE0000000000000000000000000000000040846 -:10BEF0001020040801020000000000000000000003 +:10BEE0000000000000000000000000000000000052 +:10BEF0000000000000000000000000000000000042 :10BF00000000000000000000000000000000000031 :10BF10000000000000000000000000000000000021 :10BF20000000000000000000000000000000000011 :10BF30000000000000000000000000000000000001 -:10BF400000000000000000000C0C0000414114142F +:10BF400000000000000000000000000000000000F1 :10BF500000000000000000000000000000000000E1 -:10BF600000000000000000000000000000000000D1 -:10BF7000010240801020408000000000000000000E +:10BF60000000000000000000000000003C3C3D3DDF +:10BF700000000000000000000000000000000000C1 :10BF800000000000000000000000000000000000B1 :10BF900000000000000000000000000000000000A1 :10BFA0000000000000000000000000000000000091 :10BFB0000000000000000000000000000000000081 -:10BFC000000000000000000000000C0C00005555AF +:10BFC0000000000000000000000000000000000071 :10BFD0000000000000000000000000000000000061 -:10BFE0000000000000000000000000000000000051 -:10BFF0000000000000000000080000000000000039 -:10C000000000000000000000000000610006000DBC +:10BFE00000000000000000000000000000003D3DD7 +:10BFF0003C3C00610006000D000000000000000055 +:10C000000000000000000000000000000000000030 :10C010000000000000000000000000000000000020 :10C020000000000000000000000000000000000010 :10C030000000000000000000000000000000000000 -:10C040000000000005000A08050000A00061402E65 -:10C05000000D0000000000000000000000000000D3 +:10C040000000000000000000050000A0000000004B +:10C0500000000000000000000000000000000000E0 :10C0600000000000000000000000000000000000D0 -:10C0700000000000000000000000000000000000C0 +:10C070000000000500000000FFFF000000000000BD :10C0800000000000000000000000000000000000B0 -:10C090007D78FFF0000000000000000000000000BC +:10C0900000000000000000000000000000000000A0 :10C0A0000000000000000000000000000000000090 :10C0B0000000000000000000000000000000000080 -:10C0C000000000000000000000000000000012441A -:10C0D00000000006600000000000000000000000FA +:10C0C0000000000000000000000000000000000070 +:10C0D0000000000000000000000000000000000060 :10C0E0000000000000000000000000000000000050 -:10C0F0000000000000000000000000000000000040 +:10C0F00000000000000000000000FFFF0000000042 :10C10000000000000000000000000000000000002F -:10C110000000FFFAFFF00000000000000000000037 +:10C11000000000000000000000000000000000001F :10C12000000000000000000000000000000000000F :10C1300000000000000000000000000000000000FF :10C1400000000000000000000000000000000000EF -:10C1500021880000600000090000000000000000CD +:10C1500000000000000000000000000000000000DF :10C1600000000000000000000000000000000000CF :10C1700000000000000000000000000000000000BF :10C1800000000000000000000000000000000000AF -:10C1900000000000FCF0FC30000000000000000087 +:10C19000000000000000000000000000000000009F :10C1A000000000000000000000000000000000008F :10C1B000000000000000000000000000000000007F :10C1C000000000000000000000000000000000006F -:10C1D00000000B0F04000000000000000000000041 +:10C1D000000000000000000000000000000000005F :10C1E000000000000000000000000000000000004F :10C1F000000000000000000000000000000000003F :10C20000000000000000000000000000000000002E -:10C21000000000000000FCF0FC3000000000000006 +:10C21000000000000000000000000000000000001E :10C22000000000000000000000000000000000000E :10C2300000000000000000000000000000000000FE :10C2400000000000000000000000000000000000EE -:10C250000000000004000B0F0000000000000000C0 +:10C2500000000000000000000000000000000000DE :10C2600000000000000000000000000000000000CE :10C2700000000000000000000000000000000000BE -:10C28000000000002000000000000000000000008E -:10C29000200000000000200020000000000010002E -:10C2A000000000002000000000000000000000006E -:10C2B000200000000000200020000000000004001A -:10C2C0002000000000002000000040000000880066 -:10C2D00000002000000000002000200000002020BE -:10C2E00020000000000020000000200040000000AE -:10C2F00000000000000040000000000000000000FE -:10C3000000000000000000000000000000400000ED -:10C310000002000000000000000000000000000417 -:10C32000000000000000000000000000000000907D +:10C28000200020000000000020000000000000004E +:10C29000000000000000000000009000000000000E +:10C2A000200020000000000020000000000000002E +:10C2B000000000000000000000000010000000006E +:10C2C0000000000020000000000000040004000046 +:10C2D000000000000000000000000000000000005E +:10C2E0000000000020000000000000040400000026 +:10C2F000000000000000000010000000000000022C +:10C300000000000000000002000200000000000029 +:10C310000000000000000000000200020000000019 +:10C3200000000000000000000002000200004000C9 :10C3300000000000000000000000000000000000FD -:10C3400000000000000000000000000000000000ED -:10C3500000000000000000000000000000000000DD -:10C3600000000000000000000000000000000000CD -:10C3700000000000000000000000000200000000BB +:10C3400000000000000000000000000000024002A9 +:10C350004000000000001004000000000000000089 +:10C360000000000000000000000200401002000277 +:10C370004000000200000000000000020000000079 :10C3800000000000000000000000000000000000AD -:10C39000000000000000000000000000000000009D +:10C390000000000000000000000000000200020099 :10C3A000000000000000000000000000000000008D -:10C3B000000000000000000000000000000000007D +:10C3B000000000000000000000000000020000007B :10C3C000000000000000000000000000000000006D -:10C3D0000000000000000000000000000000000954 -:10C3E000000000000000020000000000000000004B -:10C3F000000000000000000000000000000000003D -:10C40000000000000000000000000000000000002C -:10C410000000008800000000000000000000000094 +:10C3D000000000000000000000000000000002005B +:10C3E0000200000000000000000000000000020049 +:10C3F0000200000000000000000000000000020039 +:10C40000020000000000000000000000000000002A +:10C41000000000000000000000000000000000001C :10C42000000000000000000000000000000000000C :10C4300000000000000000000000000000000000FC -:10C4400000000000000000000000000000000000EC +:10C4400002000000000000000000000000000000EA :10C4500000000000000000000000000000000000DC -:10C4600000000000000000000000000000000000CC -:10C4700002000000000000000000000000000000BA -:10C4800000000000000000000000000000000000AC -:10C490000000000000000000A000000000000000FC -:10C4A0000000000000000400000000000000000088 -:10C4B000000000000000C0000000000000000000BC -:10C4C000000000000000000000000000000000006C +:10C4600000000400000000000000000000000000C8 +:10C4700000000000000000000000000000000000BC +:10C4800000000400000000000000000000000000A8 +:10C49000000000000000000000000000000000009C +:10C4A000000040000000000000000000000000004C +:10C4B000000000000000000000000000000000007C +:10C4C0000000080000000000000000000000000064 :10C4D000000000000000000000000000000000005C :10C4E000000000000000000000000000000000004C :10C4F000000000000000000000000000000000003C -:10C5000000000000000000C0000000000000000269 -:10C510000002000200020000000000000000000015 -:10C5200000000000000000100000000000000000FB +:10C50000000000000000000000000000000000002B +:10C5100000000000000000000000000000000020FB +:10C52000000000000000000000000000000000000B :10C5300000000000000000000000000000000000FB :10C5400000000000000000000000000000000000EB -:10C5500000000000000000000900000005000000CD -:10C5600011000000000000000000000000000000BA -:10C5700000000000000000000400000000000000B7 +:10C5500000000000210000000000000000000000BA +:10C5600000000000000000000000000000000000CB +:10C5700000000000000000000000000000000000BB :10C5800000000000000000000000000000000000AB :10C59000000000000000000000000000000000009B :10C5A000000000000000000000000000000000008B :10C5B000000000000000000000000000000000007B -:10C5C000000000000000000000001000000000005B -:10C5D0000000000000000000000000090009000049 +:10C5C000000000000000000000000000000000006B +:10C5D000000000000000000000000000000000005B :10C5E000000000000000000000000000000000004B -:10C5F0000000000000000000000008000000000033 -:10C60000000000000800A000000000000000000082 +:10C5F000000000000000000000000000000000003B +:10C600000000000000000000000400000000000026 :10C61000000000000000000000000000000000001A :10C62000000000000000000000000000000000000A :10C6300000000000000000000000000000000000FA -:10C6400000000000000000000000000000200000CA +:10C6400000000000000000000000000000000000EA :10C6500000000000000000000000000000000000DA -:10C66000000000000000000000C00000000000000A +:10C6600000000000000000000000000000000000CA :10C6700000000000000000000000000000000000BA :10C6800000000000000000000000000000000000AA :10C69000000000000000000000000000000000009A :10C6A000000000000000000000000000000000008A -:10C6B0000000000000000000040000000000000076 +:10C6B000000000000000000000000000000000007A :10C6C000000000000000000000000000000000006A :10C6D000000000000000000000000000000000005A :10C6E000000000000000000000000000000000004A :10C6F000000000000000000000000000000000003A -:10C7000000000000100000000000C0000000080051 -:10C710000002000200900000000000000000000085 -:10C720000000000000000000008800000000000081 +:10C700000000000000000000000000000000000029 +:10C710000000000000000000000000000000000019 +:10C7200000000000000000000400000020000000E5 :10C7300000000000000000000000000000000000F9 :10C7400000000000000000000000000000000000E9 :10C7500000000000000000000000000000000000D9 -:10C7600000000000000000000000050005000000BF +:10C7600000000000210000000000000000000000A8 :10C7700000000000000000000000000000000000B9 -:10C7800000000000000000000000000000000000A9 -:10C790000000000000000000000000001000000089 +:10C780000000000000000000000004040000002081 +:10C790000000000000000000000000000000000099 :10C7A0000000000000000000000000000000000089 :10C7B0000000000000000000000000000000000079 :10C7C0000000000000000000000000000000000069 -:10C7D0000000000000000000000000000000000059 +:10C7D0000000000000000800000000000000080049 :10C7E0000000000000000000000000000000000049 :10C7F0000000000000000000000000000000000039 -:10C800000000000000000800000000000000080018 +:10C800000000000000000000000000000000000028 :10C810000000000000000000000000000000000018 :10C820000000000000000000000000000000000008 -:10C8300000000000000000024000000000000000B6 +:10C8300000000000000000000000000000000000F8 :10C8400000000000000000000000000000000000E8 :10C8500000000000000000000000000000000000D8 -:10C8600000000000000000000400000000000000C4 -:10C8700000000000080000000000000000000000B0 +:10C8600000000000000000000000000000000000C8 +:10C8700000000000000000000000000000000000B8 :10C8800000000000000000000000000000000000A8 :10C890000000000000000000000000000000000098 :10C8A0000000000000000000000000000000000088 @@ -97536,433 +97536,433 @@ :10CE700000000000000000000000000000000000B2 :10CE800000000000000000000000000000000000A2 :10CE90000000000000000000000000000000000092 -:10CEA0000000000000000000000000000000000082 -:10CEB0000000000000000000000000000000000072 -:10CEC0002000000000400040204000400010001002 -:10CED0000000C00040000000000040000000000012 -:10CEE0004000880000000000000000000003000077 -:10CEF00000000000200020000000000000000000F2 -:10CF00000000200000000000000000000000010000 -:10CF100001000080208040000000000000000000B0 -:10CF20000000000000008800000000000000000079 -:10CF30000000000000000040000040000000000071 -:10CF400000000000000000010001000100010001DC -:10CF50000001000000000000000040000000000090 -:10CF60000000000000004000000000000000000081 -:10CF700000000000000000C0400000004000000071 -:10CF8000400000000000000000020000000000005F -:10CF90002000200000040004000000000000000049 -:10CFA000000000000000000000000000400200003F -:10CFB0000000000000000000000000000000001061 -:10CFC000004000400040024000400040004000009F -:10CFD0000000080000000000000000000000004009 -:10CFE00088000000000000000000000000000000B9 -:10CFF0000000000000000010001000000000000011 -:10D000000000000000000000200000000000000000 -:10D01000000000008200000000000000000000008E +:10CEA0000000000000000000000000002000000062 +:10CEB00000002000400000002000200000000000D2 +:10CEC0000000000000002000000020002000000002 +:10CED00000002000400000002000200000000000B2 +:10CEE000000000008800200000002000000020005A +:10CEF00000000000200020000000200020000000B2 +:10CF000000000000C00020002000000020002000E1 +:10CF1000000004002000200000002000200000008D +:10CF2000400000002000000000000000000000029F +:10CF3000400010020000000000000002000010008D +:10CF4000000200004090100240004002000000007B +:10CF50000000000000000000000000000000400091 +:10CF600000000000000000000000000000000000C1 +:10CF700000000000000000020002000000000002AB +:10CF80000000000000000000000000004000000061 +:10CF9000000000000002000000000000000000008F +:10CFA00000001000000400001090000200000000CB +:10CFB000000000000004000400042000000400043D +:10CFC0000000000000000000000000000000000061 +:10CFD0000000000000000000000000000000000051 +:10CFE0000000000000000000000000000000000041 +:10CFF0000000000000000000000000000000000031 +:10D000000000000000000000000000000000000020 +:10D010000000000000000000000000000000000010 :10D020000000000000000000000000000000000000 -:10D0300000000000000000000000000840000008A0 -:10D040000004000100010001000100850085008549 -:10D05000008400088000000000000008004000403C -:10D0600000080900000000080000000000000000A7 -:10D0700000000000000800000000000000040000A4 -:10D080000008000800000000000802000000000086 -:10D090000000000000080000000000000000000088 -:10D0A0000008000800000000000800000000000068 -:10D0B00000000000108010801080108002050088A1 -:10D0C00000800200008000800080008000000000DE -:10D0D0000000000000000000000000000010001030 -:10D0E0000010001000000000000000000000000020 +:10D03000000000000000000100010001800000016C +:10D0400000010000000000000000000000000000DF +:10D0500000000000000000000000000800000008C0 +:10D0600000000008000000080008000000000008A0 +:10D07000020800000000000000080008000800008E +:10D080000008000800080000000800080000000078 +:10D090000008000800000000000800080008000068 +:10D0A0000008000800080000000800080000000058 +:10D0B000000800080000000000000000000300005D +:10D0C0000008000000030000000800080000000342 +:10D0D0000000000800000000000000000000000048 +:10D0E0000000000000000000000000000000000040 :10D0F0000000000000000000000000000000000030 -:10D1000000100100000000000100010020000000EC -:10D1100000004000000000000000000000000000CF +:10D10000000000000000000000000000000000001F +:10D11000000000000000000000000000000000000F :10D1200000000000000000000000000000000000FF -:10D13000000000000000004000400040004080006F -:10D14000004000400000004000400040004000005F -:10D1500000000000000000000000000000000000CF +:10D1300000000000000000000000000000000000EF +:10D1400000000000000000000000000000000000DF +:10D1500000000000000000000000002000000000AF :10D1600000000000000000000000000000000000BF :10D1700000000000000000000000000000000000AF -:10D1800000000000040000000000200020008000DB +:10D18000000000000000000000000000000000009F :10D19000000000000000000000000000000000008F :10D1A000000000000000000000000000000000007F -:10D1B000000000000000000000000080840000006B -:10D1C00000800000008000802000000000000000BF -:10D1D00000000000000020808200000000008800A5 -:10D1E000000000000000000000000000000000003F -:10D1F0000000002108000000000000000000000006 -:10D20000000000000000000000000000900084000A +:10D1B000000000000000000000000000000000006F +:10D1C000000000000000000000000000000000005F +:10D1D000000000000000000000000000000000004F +:10D1E0000800000000000000000000000000000037 +:10D1F000000000000000000000000000000000002F +:10D20000000000000000000000000000000000001E :10D21000000000000000000000000000000000000E -:10D2200000000800000000000000000000000000F6 -:10D23000000000000000A000000000080040000006 -:10D24000000000400000004000400000000000001E -:10D25000000000000000000000400000000000008E -:10D2600000000000000000080300000000000800AB -:10D27000000000C0000000000000000000000000EE -:10D280000000000000000000030008000000000093 -:10D290000000080000000000000000000000000086 +:10D2200000000000000000000000000000000000FE +:10D2300000000800080000000800000000000000D6 +:10D2400000000000000000000000000800000000D6 +:10D2500000000000000000000000000000000000CE +:10D2600000000000000000000000000000000000BE +:10D2700000000000000000000000000000000000AE +:10D28000000000000000000000000000000000009E +:10D29000000000000000000000000000000000008E :10D2A000000000000000000000000000000000007E -:10D2B000000000000000000000000000000020004E -:10D2C000A0400000000020400000010000002040BD -:10D2D000020000000000200000000000000000002C -:10D2E00000000000000000004000100000000000EE +:10D2B000000000000000000000000000000000006E +:10D2C0000000000000080000000000000005000051 +:10D2D000000000030000000000080003000300003D +:10D2E0000008000800000000000000080000000026 :10D2F000000000000000000000000000000000002E -:10D30000000000000000000000000000000000809D +:10D30000000000000000000000000000000000001D :10D31000000000000000000000000000000000000D :10D3200000000000000000000000000000000000FD :10D3300000000000000000000000000000000000ED -:10D3400080000001000000008001000002000000D9 -:10D3500080000000000000008000002000000000AD +:10D3400000000000000000000000000000000000DD +:10D3500000000000000000000000000000000000CD :10D3600000000000000000000000000000000000BD :10D3700000000000000000000000000000000000AD :10D38000000000000000000000000000000000009D -:10D390000004000000002100000000000000000068 +:10D39000000000000000000000000000000000008D :10D3A000000000000000000000000000000000007D :10D3B000000000000000000000000000000000006D -:10D3C00001000000840001000005C0000000000012 -:10D3D0002004A000000800000000A00000000000E1 -:10D3E000000000000000000000000000000000201D -:10D3F00000800000000000000000000000000000AD +:10D3C000002100000021000000000000000000001B +:10D3D000000000000000000000030000000000004A +:10D3E000000000000000000000000000000000003D +:10D3F000000000000000000000000000000000002D :10D40000000000000000000000000000000000001C -:10D4100004000000000900000000000000000000FF +:10D41000000000000000000000000000000000000C :10D4200000000000000000000000000000000000FC -:10D4300000000000000008000000000000000000E4 -:10D4400000000200030000820202000000000084CD -:10D4500000080000000000000000000000000000C4 +:10D4300000000000000000000000000000000000EC +:10D4400000000000000000000000000000000000DC +:10D4500000000000000000000000000000000000CC :10D4600000000000000000000000000000000000BC -:10D470000000032000001000030400000000000072 -:10D48000000000000000000000000000000000009C -:10D490000000800000000000080000000000000004 -:10D4A00000000000000000000000008800000000F4 +:10D4700000000000000000000000000000000000AC +:10D48000000000010000000000000000000000009B +:10D49000000000000000000000000000000000008C +:10D4A000000000000000000000000000000000007C :10D4B000000000000000000000000000000000006C -:10D4C0000000000041C000000000000041C000005A -:10D4D0000001000041C100000001000041C0000047 -:10D4E0000001000000A00000000000080000000093 +:10D4C000000000000000000000000000000000005C +:10D4D000000000000000000000000000000000004C +:10D4E000000000000000000000000000000000003C :10D4F000000000000000000000000000000000002C :10D50000000000000000000000000000000000001B :10D51000000000000000000000000000000000000B -:10D5200000000000000000000000010000000000FA +:10D5200000000000000000000000000000000000FB :10D5300000000000000000000000000000000000EB -:10D54000000000000000919100002005000091897A -:10D550000003050900009184000540090000918541 -:10D5600000050809000000800000000000800000A5 +:10D5400000000000000000000000000000000000DB +:10D5500000000000000000000000000000000000CB +:10D5600000000000000000000000000000000000BB :10D5700000000000000000000000000000000000AB :10D58000000000000000000000000000000000009B -:10D590000000000000000000000000000400000087 -:10D5A0000000000000000000000000000400000077 +:10D59000000000000000000000000000000000008B +:10D5A000000000000000000000000000000000007B :10D5B000000000000000000000000000000000006B -:10D5C000000000000000000009000021051180009B -:10D5D000098003210011800009000521001180004D -:10D5E0000900052100118000000000050000000076 +:10D5C000000000000000000000000000001100004A +:10D5D0000002000000110000000000000000000038 +:10D5E000000000000000000000000000000000003B :10D5F000000000000000000000000000000000002B :10D60000000000000000000000000000000000001A -:10D6100000000000000000000000000800000008FA -:10D62000000000000000000000000020000000409A +:10D61000000000000000000000000000000000000A +:10D6200000000000000000000000000000000000FA :10D6300000000000000000000000000000000000EA -:10D6400000000000000000000000010000000001D8 -:10D65000C000010800000001C0000100000000013E -:10D66000C000010000000001C000000000000090A8 +:10D6400000000000000000000000000000000000DA +:10D6500000000000000000000000000000000000CA +:10D6600000000000000000000000000000000000BA :10D6700000000000000000000000000000000000AA :10D68000000000000000000000000000000000009A -:10D690000000000000000000000000880001000001 -:10D6A0000001000000000000000000000000000079 +:10D69000000000000000000000000000000000008A +:10D6A000000000000000000000000000000000007A :10D6B000000000000000000000000000000000006A -:10D6C0000000000000000000000000000000000159 -:10D6D000000003C000000001100003C000010000B2 -:10D6E000000003C100000000000003C14000000072 -:10D6F0000000000000000000000000000100000029 +:10D6C000000000000000000000000000000000005A +:10D6D0000000010000000200000000000000000047 +:10D6E000000000000000000000000000000000003A +:10D6F000000000000000000000000000000000002A :10D700000000000000000000000000000000000019 -:10D710000000000000000000000084000100000084 -:10D7200020000000010000000000000000000000D8 -:10D7300020000000000000000000000000000000C9 -:10D7400000000000000000000000000000000009D0 -:10D750000009410591800003000980419180000487 -:10D760000005000091830005000500009183000082 -:10D770000000000000000000000000000000410068 +:10D710000000000000000000000000000000000009 +:10D7200000000000000000000000000000000000F9 +:10D7300000000000000000000000000000000000E9 +:10D7400000000000000000000000000000000000D9 +:10D7500000000000080000000000000002000000BF +:10D7600000000000000000000000000000000000B9 +:10D7700000000000000000000000000000000000A9 :10D780000000000000000000000000000000000099 -:10D7900000000000000000000000000080001000F9 -:10D7A00000008000000041000000000000000000B8 -:10D7B0000000000000002000000000000000000049 +:10D790000000000000000000000000000000000089 +:10D7A0000000000000000000000000000000000079 +:10D7B0000000000000000000000000000000000069 :10D7C0000000000000000000000000000000000059 -:10D7D0008989000005800900838900000080090014 -:10D7E00084000509008009008500050900800940C2 +:10D7D0000000000000000000000000000000000049 +:10D7E0000000000000000000000000000000000039 :10D7F0000000000000000000000000000000000029 -:10D800000000000800000000000000000000000010 -:10D810000000000000000000000000000008000000 -:10D8200000000008000000000000000000000000F0 -:10D8300000000040000000000000000000000000A8 +:10D800000000000000000000000000000000000018 +:10D810000000000000000000000000000000000008 +:10D8200000000000000000000000000000000000F8 +:10D8300000000000000000000000000000000000E8 :10D8400000000000000000000000000000000000D8 -:10D850000000C008000000840100C008000000842F -:10D860000100C184000100840100C00000010084A7 -:10D8700001002000A0009000C00000000000000097 +:10D8500000000000000000000000000000000000C8 +:10D8600000000000000000000000000000000000B8 +:10D8700000000000000000000000000000000000A8 :10D880000000000000000000000000000000000098 -:10D890000000000000000000000000000000000187 -:10D8A0000000000000010000000000000000000077 +:10D890000000000000000000000000000000000088 +:10D8A0000000000000000000000000000000000078 :10D8B0000000000000000000000000000000000068 :10D8C0000000000000000000000000000000000058 -:10D8D00000000000410000E000000000840000E0C3 -:10D8E00000000000410000E000000000600000E0D7 +:10D8D0000000000000000084000000000000008440 +:10D8E0000000000000000000000000000000000038 :10D8F0000000000000000000000000000000000028 -:10D9000000000000000600000700600000000000AA -:10D9100000000000000000000000000000000042C5 -:10D92000000007000000500000E00000008200003E -:10D93000000000000000810000E000000000000086 +:10D900000000000000000000000000000000000017 +:10D910000000000000000000000000000000000007 +:10D9200000000000000000000000000000000000F7 +:10D9300000000000000000000000000000000000E7 :10D9400000000000000000000000000000000000D7 -:10D950000000000000000000FFFF0000AAAA000075 -:10D96000FFFF0000AAAA0000FFFF0000AAAA000013 -:10D97000FFFF0000AAAAC0F0C2FA000000000000E9 +:10D9500000000000000000000000000000000000C7 +:10D9600000000000000000000000000000000000B7 +:10D9700000000000000000000000000000000000A7 :10D980000000000000000000000000000000000097 :10D990000000000000000000000000000000000087 :10D9A0000000000000000000000000000000000077 :10D9B0000000000000000000000000000000000067 :10D9C0000000000000000000000000000000000057 -:10D9D0000000000000000000000000000000AAAAF3 -:10D9E000000000000000AAAA000000000000AAAA8F -:10D9F000000000000000AAAAC0F0C0F00000000073 +:10D9D0000000000000000000000000000000000047 +:10D9E0000000000000000000000000000000000037 +:10D9F0000000000000000000000000000000000027 :10DA00000000000000000000000000000000000016 :10DA10000000000000000000000000000000000006 :10DA200000000000000000000000000000000000F6 :10DA300000000000000000000000000000000000E6 :10DA400000000000000000000000000000000000D6 -:10DA50000000000000000000000055550000FFFF1E -:10DA6000000055550000FFFF000055550000FFFF66 -:10DA70000000555500000000FFFF000000000000FE +:10DA500000000000000000000000000000000000C6 +:10DA600000000000000000000000000000000000B6 +:10DA700000000000000000000000000000000000A6 :10DA80000000000000000000000000000000000096 :10DA90000000000000000000000000000000000086 :10DAA0000000000000000000000000000000000076 :10DAB0000000000000000000000000000000000066 :10DAC0000000000000000000000000000000000056 -:10DAD000000000000000000000000000555500009C -:10DAE00000000000555500000000000055550000E2 -:10DAF0000000000055550000FFFFFFFF00003C3C08 +:10DAD0000000000000000000000000000000000046 +:10DAE0000000000000000000000000000000000036 +:10DAF0000000000000000000000000000000000026 :10DB00000000000000000000000000000000000015 :10DB10000000000000000000000000000000000005 :10DB200000000000000000000000000000000000F5 :10DB300000000000000000000000000000000000E5 :10DB400000000000000000000000000000000000D5 -:10DB5000000000000000000000000000000040E3A2 -:10DB600080018021920240E380018021920240E303 -:10DB700080018021920240E3800180218202000026 -:10DB80000000000000000000000000000000051080 -:10DB9000002800000000000000000000000000005D -:10DBA000000000000000000000000028050000A0A8 -:10DBB00000610007800D0000000000000000000070 -:10DBC00000610007800D0000000000000000000060 +:10DB50000000000000000000000000000000006164 +:10DB60000006000D000000610006000D000000002E +:10DB700000000000000000000000000000000000A5 +:10DB80000000000000000000000000000000000095 +:10DB90000000000000000000000000000000000085 +:10DBA0000000000000000000000000000000000075 +:10DBB0000000000000000000000000000000000065 +:10DBC0000000000000000000000000000000000055 :10DBD0000000000000000000000000000000000045 -:10DBE00000003030C000C00000002828C000C00085 -:10DBF0000000003C000003030000003C00000303A1 +:10DBE0000000000000000000000000000000000035 +:10DBF0000000000000000000000000000000000025 :10DC00000000000000000000000000000000000014 :10DC10000000000000000000000000000000000004 :10DC200000000000000000000000000000000000F4 :10DC300000000000000000000000000000000000E4 :10DC400000000000000000000000000000000000D4 :10DC500000000000000000000000000000000000C4 -:10DC6000000000003030C000C00000002828C000C4 -:10DC7000C0000000003C000003030000003C000066 -:10DC8000030300000000000000000000000000008E +:10DC600000000000000000000000000000000000B4 +:10DC700000000000000000000000000000000000A4 +:10DC80000000000000000000000000000000000094 :10DC90000000000000000000000000000000000084 :10DCA0000000000000000000000000000000000074 :10DCB0000000000000000000000000000000000064 :10DCC0000000000000000000000000000000000054 :10DCD0000000000000000000000000000000000044 -:10DCE0000000000000000000000000000000000F25 -:10DCF000000000000000000F000000000000000F06 -:10DD00000404040400000000000000000000000003 +:10DCE0000000000000000000000000000000000034 +:10DCF0000000000000000000000000000000000024 +:10DD00000000000000000000000000000000000013 :10DD10000000000000000000000000000000000003 :10DD200000000000000000000000000000000000F3 :10DD300000000000000000000000000000000000E3 :10DD400000000000000000000000000000000000D3 :10DD500000000000000000000000000000000000C3 -:10DD6000000000000000F0F000003C003C0000005B -:10DD7000000F0C0C0C0C0000000F0C0C0C0C000025 -:10DD8000000F040404040000000000000000000074 +:10DD600000000000000000000000000000000000B3 +:10DD700000000000000000000000000000000000A3 +:10DD80000000000000000000000000000000000093 :10DD90000000000000000000000000000000000083 :10DDA0000000000000000000000000000000000073 :10DDB0000000000000000000000000000000000063 :10DDC0000000000000000000000000000000000053 :10DDD0000000000000000000000000000000000043 -:10DDE000000000000000000040008800000000006B -:10DDF000400040004000400088000000000020007B -:10DE000000000000000020002000C0000000000012 -:10DE100020002000200020000010000088008480E6 -:10DE2000000000008400000000030000000000006B -:10DE30000000000000000000000000800080008062 -:10DE400002800000000020000000000000004000F0 -:10DE50008900000000000000000000000000000039 -:10DE6000000000000000040000004000000000006E -:10DE700000000000000000000000000000000000A2 -:10DE8000000000020000000000000000000000028E -:10DE900000000000000200000000400100820000BD -:10DEA00000200000000040200000000000000000F2 -:10DEB0000000000000000000000000000020002022 -:10DEC000002000200000000000000500009000007D -:10DED0008000200040000000000000020000000060 -:10DEE0000000000000000000000000000000000032 -:10DEF0000000000000800080000002800084008498 -:10DF00000080008000000080008000800000000091 -:10DF10000000000000000000000800404000012058 -:10DF2000000000A000000000000000000000000051 -:10DF300000000000000000000000000000400000A1 -:10DF4000820000000000000000000000020000004D -:10DF50000000000001000000000000000040000080 -:10DF60000000000020000000000000000000000091 -:10DF70000000008400840020002000000020200910 -:10DF8000200920080008000000040004000400002C -:10DF900000000000000002000000000000008000FF -:10DFA0000401000000030000000000000000000069 -:10DFB0000000000000000000000000000008000059 -:10DFC00000000900050841000200000002000000F6 -:10DFD0000000000000002000000000000008000019 -:10DFE0000000000000080000000000000000000029 -:10DFF000000000000004000000000000000000001D -:10E0000000000000000400040010010000000000F7 -:10E0100000000009002100000000000000000000D6 -:10E0200000000400000800020000000000000000E2 -:10E0300000000000000400000000000000000000DC +:10DDE00000000000000000002000200020000000D3 +:10DDF00000000000000040000000000040000000A3 +:10DE00000000000020000200200020002000000090 +:10DE1000000000000000880000000000200000005A +:10DE20000000000020002000000020002000200052 +:10DE300000000000000000000200000000002000C0 +:10DE400088000000000020042004200020002000A2 +:10DE5000400400000000000020000000000000005E +:10DE60002000000000000002200000000000000070 +:10DE700000000000000000000002000000000000A0 +:10DE8000000000020000000200001000000000007E +:10DE90000000000000000000000000000000000082 +:10DEA0000000000000000000100000001000000052 +:10DEB0000000000000000000000000000000000062 +:10DEC00000000000000000004002000240020000CC +:10DED0000000000000000000000000000000000042 +:10DEE0002100000000900000000000000000000081 +:10DEF000000000000000040000000000000000001E +:10DF000000000020000000001008000000000000D9 +:10DF100000000000000000000000020000000000FF +:10DF200000000000000000001000000000000000E1 +:10DF300000000000000000000000000000000000E1 +:10DF400000000000000000000000000000000000D1 +:10DF500000000000000000000000000004000000BD +:10DF6000000000000000000000000000820000002F +:10DF7000000000000000000080000000020000001F +:10DF80000000000000010000000800000000000088 +:10DF90000000000800000000000000000000000079 +:10DFA000000000000000000040080008020000001F +:10DFB0000000000000080000000800000000000051 +:10DFC0000008000000000000000000080008020037 +:10DFD000000000000008000000080000000002002F +:10DFE000000800000000000000000082020800009D +:10DFF0000000000000000000000000000000000021 +:10E0000000000000000000000005000000004000CB +:10E010000000000000000000000000000000000000 +:10E0200000080000000000000000000000000000E8 +:10E0300000000000000000000000000000000000E0 :10E0400000000000000000000000000000000000D0 :10E0500000000000000000000000000000000000C0 -:10E0600000030000000000000000000000000000AD -:10E070000000000000000090000000000000000010 -:10E080000000000000000001000100010800000085 -:10E090001000000000000000000000000000000070 -:10E0A00000000000800000000001000000000000EF -:10E0B000000000001100000000000000000000004F -:10E0C0000800000000000000000000000300030042 -:10E0D000000003000000000000000000000000003D +:10E060000000000000000000000000000000400070 +:10E0700000000000000000000000000000000000A0 +:10E080000000000000000000000000000000000090 +:10E090000000000000000000000000000000000080 +:10E0A0000000000000000000000000000000000070 +:10E0B0000000000000000000000000000000000060 +:10E0C0000000080000000000000000000000000048 +:10E0D0000000000000000000000000000000000040 :10E0E0000000000000000000000000000000000030 -:10E0F0000000000008000000C00000000000000058 -:10E10000008000000000000000000000000000008F -:10E11000000000000000000084000000000000007B -:10E12000A00000000000000000000000A0000000AF -:10E1300000000800000008000800000000000800BF -:10E14000080000000800000090000800080000001F +:10E0F0000000000000000000000000000000000020 +:10E10000000000000000000000000000000000000F +:10E1100000000800000000000000000000000000F7 +:10E1200000000800000000000000000000000000E7 +:10E13000000000000000000000000000A00000003F +:10E1400000000000000000000000000000000000CF :10E1500000000000000000000000000000000000BF -:10E1600000000000000000000000000000000000AF -:10E17000000000000000000000000000000000009F -:10E18000000000200000000000000000000000006F +:10E160000000000000000000000008400000000067 +:10E17000000808000000000000000000000000008F +:10E18000000000000000000000000000000000008F :10E19000000000000000000000000000000000007F -:10E1A0000000000000000000000000000800000067 +:10E1A000000000000000000000000000000000006F :10E1B000000000000000000000000000000000005F -:10E1C0000000000000000000210000000000080026 +:10E1C000000000000000040000000000000000004B :10E1D000000000000000000000000000000000003F :10E1E000000000000000000000000000000000002F :10E1F000000000000000000000000000000000001F -:10E200000003000000000000000000008200000881 -:10E2100000000000000000000000000000000000FE -:10E22000840000000000000000000000000000006A +:10E20000000000000000000000000000000000000E +:10E2100000000005000000000000000000000000F9 +:10E2200000080000000000000000000000000000E6 :10E2300000000000000000000000000000000000DE -:10E24000000000000000010000800000008000804D -:10E25000008000000000000000000000000000003E -:10E260000000000000000000000800000000001096 -:10E270000000000000000800000000000000009006 -:10E2800000000000000000000000000000000090FE -:10E290000000000000000000000000000800210055 +:10E2400000000000000000000000000000000000CE +:10E2500000000000000000000000000000000000BE +:10E2600000000000000000000000000000000000AE +:10E27000000000000000000000000084000000001A +:10E28000000000000000000000000000000000008E +:10E29000000000000000000000000000000000007E :10E2A000000000000000000000000000000000006E :10E2B000000000000000000000000000000000005E -:10E2C0000000000000840000201000040000000492 -:10E2D0000004000400000000000000000000000036 +:10E2C000000000000000000000000000000000004E +:10E2D000000000000000000000000000000000003E :10E2E000000000000000000000000000000000002E :10E2F000000000000000000000000000000000001E -:10E3000000090009002100000020000500000000B5 -:10E3100000000041000000000805000000000000AF -:10E32000844100210000000084000000080040003B -:10E3300000000000000000000000002000000000BD -:10E340000000100000008200000000000000000437 -:10E350000009000000000000000000004000000074 +:10E3000000080000004100000000000000000000C4 +:10E3100000000000000000000000000000210003D9 +:10E3200000000000000000000000000000000000ED +:10E33000000000000000000000008200000000005B +:10E3400000000000000000000000000000000000CD +:10E3500000000000000000000000000000000000BD :10E3600000000000000000000000000000000000AD -:10E37000000000000000000000000000000000009D +:10E370000000000000000000000008000000002075 :10E38000000000000000000000000000000000008D :10E39000000000000000000000000000000000007D :10E3A000000000000000000000000000000000006D -:10E3B00080000000000000000000000000010001DB +:10E3B000000000000000000000000000000000015C :10E3C000000000000000000000000000000000004D -:10E3D000000100000000000000000000000000003C +:10E3D000000000000000000000000000000000003D :10E3E000000000000000000000000000000000002D :10E3F000000000000000000000000000000000001D -:10E40000A020008800881004000000000000000028 -:10E41000000000000000000000A010020000000842 +:10E40000000000000000000000000000000000000C +:10E4100000000000000000000000000000000000FC :10E4200000000000000000000000000000000000EC -:10E4300010A10091009090A00000040000000000D6 +:10E4300000000000000000000000000000000000DC :10E4400000000000000000000000000000000000CC -:10E4500000000000000001000000000000000000BB +:10E4500000000000000000000000000000000000BC :10E4600000000000000000000000000000000000AC :10E47000000000000000000000000000000000009C -:10E480000000050000000000008000000000000007 -:10E49000000000000000001000000080008000006C -:10E4A00000800000000000000000000000000000EC -:10E4B0000000209000C040410000000080000000EB +:10E48000000000000000000000000000000000008C +:10E49000000000000000000000000000000000007C +:10E4A000000000000000000000000000000000006C +:10E4B000000000000000000000000000000000005C :10E4C000000000000000000000000000000000004C -:10E4D0000800000000000000100000000000000024 -:10E4E00000000000000000004000000000000000EC +:10E4D000000000000000000000000000000000003C +:10E4E000000000000000000000000000000000002C :10E4F000000000000000000000000000000000001C -:10E5000000000000800000C08080808000000000CB -:10E5100000000000004000000802000000000000B1 -:10E5200000030000000000000000000000000000E8 -:10E53000000000008000804080000080000000009B -:10E54000000000800000000000000000000000004B -:10E55000000000050000004000000008000000006E -:10E56000000000000000020040000500050000005F +:10E50000000000000000000000000000000000000B +:10E51000000000000000000000000080000000007B +:10E5200000000000000000000000000000000000EB +:10E5300000000000000000000000000000000000DB +:10E5400000000000000000000000000000000000CB +:10E5500000000000000000000000000000000000BB +:10E5600000000000000000000000000000000000AB :10E57000000000000000000000000000000000009B -:10E58000000000000000080010C1104008C000009A -:10E5900000C0000000880001000001000000000031 -:10E5A000000000010000000000000000000000006A -:10E5B0000000000000008800820104A0A09000007C -:10E5C00000000000008200000000000000000000C9 -:10E5D00000000000000000000000004000010020DA -:10E5E00000000000000000000000010001000040E9 +:10E58000000000000000000000000000000000008B +:10E590000002000000000000000000000010000069 +:10E5A000000000000000000000000000000000006B +:10E5B000000000000000000000000000000000005B +:10E5C000000000000000000000000000000000004B +:10E5D000000000000000000000000000000000003B +:10E5E000000000000000000000000000000000002B :10E5F000000000000000000000000000000000001B -:10E60000000000000000000003880002C008C0886D -:10E6100000000000840000000000C00010000000A6 -:10E6200000001000000001000000000000000000D9 -:10E630000000000000000000008800030010208897 +:10E60000000000000000000000000000000000000A +:10E6100000000000000000000000000000000000FA +:10E6200000000000000000000000000000000000EA +:10E6300000000000000000000000000000000000DA :10E6400000000000000000000000000000000000CA -:10E650000000000000000000000000002000820018 -:10E6600001000000000000000000000000000001A8 -:10E670000001000000000000000000000000000099 -:10E6800000000000000000000000C1000080808049 -:10E690000000100000008000100000008000000258 -:10E6A0001000000000000000080000000000000052 -:10E6B0000000000000000000000000200011000029 -:10E6C0000009000000000000000000000000000041 -:10E6D00000000000000000000000400005000000F5 -:10E6E0000000020000000000000000000011000017 -:10E6F00000210011000000000000000000000000E8 -:10E700000000000000000000000000000000800089 -:10E7100000000000000000000000000000004100B8 +:10E6500000000000000000000000000000000000BA +:10E6600000000000000000000000000000000000AA +:10E67000000000000000000000000000000000009A +:10E68000000000000000000000000000000000008A +:10E69000000000000000000000000000000000007A +:10E6A000000000000000000000000000000000006A +:10E6B000000000000000000000000000000000005A +:10E6C000000000000000000000000000000000004A +:10E6D000000000000000000000000000000000003A +:10E6E000000000000000000000000000000000002A +:10E6F000000000000000000000000000000000001A +:10E700000000000000000000000000000000000009 +:10E7100000000000000000000000000000000000F9 :10E7200000000000000000000000000000000000E9 -:10E730000000000000000000000000002100004078 -:10E74000A0000000000000400000000000000000E9 -:10E7500000000000000000000000000000000004B5 -:10E760000000000000000000000000000000004069 -:10E770000000000000200000000000000000000079 -:10E780000000000000000000000000000000040085 -:10E790000410040804000000000000000000000055 -:10E7A00000000000000090009000880000000000C1 -:10E7B0000000000000000000000000000000050054 -:10E7C000201003888200000000000000000000000C +:10E7300000000000000000000000000000000000D9 +:10E7400000000000000000000000000000000000C9 +:10E7500000000000000000000000000000000000B9 +:10E7600000000000000000000000000000000000A9 +:10E770000000000000000000000000000000000099 +:10E780000000000000000000000000000000000089 +:10E790000000000000000000000000000000000079 +:10E7A0000000000000000000000000000000000069 +:10E7B0000000000000000000000000000000000059 +:10E7C0000000000000000000000000000000000049 :10E7D0000000000000000000000000000000000039 -:10E7E0000001000000000000000000000000000028 -:10E7F0000008000000000000000000000000000011 +:10E7E0000000000000000000000000000000000029 +:10E7F0000000000000000000000000000000000019 :10E800000000000000000000000000000000000008 -:10E81000000000000000484200000000210000004D -:10E82000000000840000420000000084000000009E +:10E8100000000000000000000000000021000000D7 +:10E8200000000000210000000000000000000000C7 :10E8300000000000000000000000000000000000D8 -:10E84000500A02E00700000000000000070000007E -:10E8500000000000000000000000480000E0000090 -:10E860000000508100E007040000000000000000EC -:10E870000000810000E00000000000000000000037 +:10E8400000000000000000000000000000000000C8 +:10E8500000000000000000000000000000000000B8 +:10E8600000000000000000000000000000000000A8 +:10E870000000000000000000000000000000000098 :10E880000000000000000000000000000000000088 -:10E890000000A00000A02200110000000000000005 -:10E8A00000000000000000000000FF00F0F0000089 +:10E890000000000000000000000000000000000078 +:10E8A0000000000000000000000000000000000068 :10E8B0000000000000000000000000000000000058 -:10E8C00000004FFF0DBD000F000F00000000000012 +:10E8C0000000000000000000000000000000000048 :10E8D0000000000000000000000000000000000038 :10E8E0000000000000000000000000000000000028 :10E8F0000000000000000000000000000000000018 :10E900000000000000000000000000000000000007 -:10E9100000000000050000050022001100000000BA -:10E92000000000000000000000000000FF00F0F008 +:10E9100000000000000000000000000000000000F7 +:10E9200000000000000000000000000000000000E7 :10E9300000000000000000000000000000000000D7 -:10E94000000000004FFF4FFF000F080F0000000005 +:10E9400000000000000000000000000000000000C7 :10E9500000000000000000000000000000000000B7 :10E9600000000000000000000000000000000000A7 :10E970000000000000000000000000000000000097 @@ -97975,253 +97975,253 @@ :10E9E0000000000000000000000000000000000027 :10E9F0000000000000000000000000000000000017 :10EA00000000000000000000000000000000000006 -:10EA100000000000000000004020020400008844C4 +:10EA100000000000000000000000000000000000F6 :10EA200000000000000000000000000000000000E6 -:10EA3000C300000000000000000000000000000013 -:10EA40000000000000000000C202C003C8EC00008B +:10EA300000000000000000000000000000000000D6 +:10EA400000000000000000000000000000000000C6 :10EA500000000000000000000000000000000000B6 :10EA600000000000000000000000000000000000A6 :10EA70000000000000000000000000000000000096 :10EA80000000000000000000000000000000000086 -:10EA90000000000000000000000080100108884411 +:10EA90000000000000000000000000000000000076 :10EAA0000000000000000000000000000000000066 -:10EAB0000000C30000000000000000000000000093 -:10EAC00000000000000000000000C202C003F0F0DF +:10EAB0000000000000000000000000000000000056 +:10EAC0000000000000000000000000000000000046 :10EAD0000000000000000000000000000000000036 :10EAE0000000000000000000000000000000000026 :10EAF0000000000000000000000000000000000016 :10EB00000000000000000000000000000000000005 :10EB100000000000000000000000000000000000F5 -:10EB20000000080005000A00050000A00000000623 -:10EB3000000C000000610006000D00000000000055 -:10EB40000000000000000000000000000061002D37 -:10EB5000801D000000000008000000A00000000070 -:10EB600000000000000000610007800D0000057932 -:10EB70000A27850D04A000000000000000000061CD -:10EB800000078009000000000000000000000000F5 +:10EB20000000000000000A000000000000000000DB +:10EB3000000000A000000000000000000000000035 +:10EB400000000000000000000000000000000000C5 +:10EB500000000000000000000000000000000000B5 +:10EB600000000000000000000000000000000000A5 +:10EB70000000000000000000000000000000000095 +:10EB80000000000000000000000000000000000085 :10EB90000000000000000000000000000000000075 :10EBA0000000000000000000000000000000000065 -:10EBB000FF0000FF00000000000000000000000057 -:10EBC0000000000000000000000000000000FFFF47 -:10EBD0000F0F3030F3F300000000000000000000D1 +:10EBB0000000000000000000000000000000000055 +:10EBC0000000000000000000000000000000000045 +:10EBD0000000000000000000000000000000000035 :10EBE0000000000000000000000000000000000025 :10EBF0000000000000000000000000000000000015 -:10EC000000000000003C00C3000000000000000005 +:10EC00000000000000000000000000000000000004 :10EC100000000000000000000000000000000000F4 :10EC200000000000000000000000000000000000E4 -:10EC30000000FF0000FF00000000000000000000D6 +:10EC300000000000000000000000000000000000D4 :10EC400000000000000000000000000000000000C4 -:10EC5000FFFF0F0F3030F3F3000000000000000052 +:10EC500000000000000000000000000000000000B4 :10EC600000000000000000000000000000000000A4 :10EC70000000000000000000000000000000000094 -:10EC8000000000000000003C00C300000000000085 +:10EC80000000000000000000000000000000000084 :10EC90000000000000000000000000000000000074 :10ECA0000000000000000000000000000000000064 -:10ECB000000000000F0F00FF000000000000000037 +:10ECB0000000000000000000000000000000000054 :10ECC0000000000000000000000000000000000044 -:10ECD0000000FFF00F000000000000000000000036 +:10ECD0000000000000000000000000000000000034 :10ECE0000000000000000000000000000000000024 :10ECF0000000000000000000000000000000000014 :10ED00000000000000000000000000000000000003 :10ED100000000000000000000000000000000000F3 :10ED200000000000000000000000000000000000E3 -:10ED30000000000000000F0F00FF000000000000B6 +:10ED300000000000000000000000000000000000D3 :10ED400000000000000000000000000000000000C3 -:10ED500000000000FFF00F000000000000000000B5 +:10ED500000000000000000000000000000000000B3 :10ED600000000000000000000000000000000000A3 :10ED70000000000000000000000000000000000093 -:10ED80000000000000000000000055555155000033 +:10ED80000000000000000000000000000000000083 :10ED90000000000000000000000000000000000073 -:10EDA00000000000000020008800040004000400AF -:10EDB000000000008800200020002000200000004B -:10EDC000040000200010000000402000200020006F -:10EDD00000000000200020002000200020004180D2 -:10EDE000C000C000840000010400000020002000DA -:10EDF0002000000000000000200020002000200073 -:10EE000088022000000020002000000020002000D8 -:10EE10000000000000000000200020002000200072 -:10EE20002000200000002000000000008000800082 -:10EE300000000000000200000000000000000000D0 -:10EE400040000000400020000000000040000000E2 -:10EE50004000000000400000000000000000000032 -:10EE600004200000400000000000400000000000FE -:10EE70000000000000000000000000000000000290 -:10EE80000000200000000000000000000000000062 -:10EE90000000000000001000000000000000000062 -:10EEA0000000000000004000000000000000000022 -:10EEB0000000200000000000000000000000000032 -:10EEC0000000000000000000000001000000000041 -:10EED000000000000000000000000000000008002A -:10EEE000080000000000000000000000000000001A -:10EEF000000000000000000000000000020002000E -:10EF000000000000000002000000022100000000DC -:10EF100000000400000000000000000000000000ED -:10EF200000000000000000000000000000000000E1 -:10EF30000088000000000000000000000000000049 -:10EF400000000000000000020000000002000000BD -:10EF500000000000000000000000000000000000B1 -:10EF60000000000800000000000800080000000881 -:10EF70000000000800080008000000080000000071 -:10EF8000000000080008050800000008000800084C -:10EF9000020800080008000800080008000000003F -:10EFA0000000000800080008000000080008000039 -:10EFB0000000000000000000000000000000000051 -:10EFC00000000000000000000000400000080000F9 -:10EFD00000000008000000080000A0000000000081 -:10EFE00000034008000000000000000000000000D6 -:10EFF0000000000800000000000000080000000001 -:10F0000000000000000000000000000008000000F8 +:10EDA00000000000000020002000200020000000E3 +:10EDB000000020052000400020004000000020004E +:10EDC0002080208000002000200020002000000083 +:10EDD00088002000200020002000200000002000EB +:10EDE0002000200000000003200020002000200060 +:10EDF0004000200020002000200020002000020011 +:10EE00002000200020000000200020002000200022 +:10EE10002000000020002000200020002000200012 +:10EE2000200020002100000000000002000410006B +:10EE30000000400040020000000000000000000050 +:10EE4000409000040004000040400000000000006A +:10EE500000000000000000000000000000000000B2 +:10EE600000000000000000000000000000000000A2 +:10EE70000000000000004000000000000000000052 +:10EE80000000000000000000000000000900000079 +:10EE90000000000000000000000000000000000072 +:10EEA0000000009040902090100200000000000040 +:10EEB0000000000000000000000000000000000052 +:10EEC0000000000000000000000000000000000042 +:10EED0000000000000000000000000000000000032 +:10EEE000000000000000000000000000000800001A +:10EEF00000080008000000000000040000000000FE +:10EF00000000000000000000000000000000000001 +:10EF100000000000000000000000000000000000F1 +:10EF200000000000000000000004000000000000DD +:10EF300000000000000000000000000000000000D1 +:10EF400000000000000000000000000000000000C1 +:10EF500000000000000800000008000000000000A1 +:10EF60000008000000000000000000000000000099 +:10EF70000000000000000008000000080020000061 +:10EF80000000000800000000000000000000000871 +:10EF90000008000800080008000040080000000801 +:10EFA0000008000800000000000000000000000051 +:10EFB000000000000000000000000000000300004E +:10EFC0000000000000002000000000090000000018 +:10EFD0000000000000000000000000210008000008 +:10EFE000000000000000000000000003000000001E +:10EFF0000000000000000000000000000000000011 +:10F000000000000000000000000000000000000000 :10F0100000000000000000000000000000000000F0 -:10F0200000000000000000000000000000000000E0 -:10F0300000000000000000000010001000100000A0 -:10F0400000840000000000080000088840080084D8 -:10F05000080800A0410000000300000003000300B6 -:10F060000000000000000020000000A000400000A0 -:10F07000000000000000000000000000030000008D -:10F080000800000000000000000000000000000078 -:10F090000000080000000000000000000000000068 -:10F0A000000000000000000000000000000041001F -:10F0B0000000000000000000000008000000000048 -:10F0C00008000000000000000000820000000800AE -:10F0D0008200000009001000A100000000000000F4 -:10F0E0000000000000000000000084000800000094 -:10F0F0000000000000000000000000008200000886 -:10F1000000000000000000000000000000000000FF -:10F1100000000000000000000000000000000000EF -:10F1200000000000000000000000000000000000DF -:10F1300000000000000000000000000000000000CF +:10F02000000000000000000001009000000001004E +:10F0300000000000000000000000000000000000D0 +:10F040000000000000000000800000000000000040 +:10F0500000000000000000000000000000000000B0 +:10F0600000000000000000000000000000000000A0 +:10F070000000000000000000000000000000000090 +:10F080000000000000000000000000000000000080 +:10F090000000000000000000000000000000000070 +:10F0A000000000000000000000001000030000004D +:10F0B000200000000011000000000008000000080F +:10F0C000000000000000000000050000C00000007B +:10F0D0000000000000000000000000080000000028 +:10F0E0000008000000000000000000000000000018 +:10F0F00000000000000800000008000000080000F8 +:10F10000000000200000C00000000000000000001F +:10F1100000000000000000000000000000000800E7 +:10F1200000000000000000000000000000001000CF +:10F1300000000000000000000000030000000000CC :10F1400000000000000000000000000000000000BF -:10F1500000000000000004000000040000000000A7 +:10F15000000000000000100000000000000000009F :10F16000000000000000000000000000000000009F :10F17000000000000000000000000000000000008F -:10F18000000000000000000000000000000000007F -:10F19000000000000000000000000000000000006F +:10F18000000000000000000800080000000000006F +:10F19000000000002100100000000000000000003E :10F1A000000000000000000000000000000000005F -:10F1B000000000000000000000000000000000004F -:10F1C000000000000000000000000000000000003F -:10F1D0000000000082800000000000200008000005 -:10F1E000000000080000000000008200830000080A -:10F1F000000000000000000000000000000000000F -:10F2000000000000000000000000000000000000FE +:10F1B00080000000000000000000000000000000CF +:10F1C000000000000000000000000808000000002F +:10F1D000000000000000000000000000000000002F +:10F1E000000000000000000000000000000000001F +:10F1F0000000000000000000000000080000000007 +:10F2000000000000040000000000000000000000FA :10F2100000000000000000000000000000000000EE -:10F220000800000000000000000000000000C00016 -:10F230000000000000000000001000100810001086 -:10F2400000000000000000A00000000040A000003E -:10F2500003A00400000000200000000000A1000046 -:10F260000000000000000000000403A004002004CF -:10F2700000900000000000000000000000000000FE -:10F2800000000000000000000000000010000088E6 +:10F2200000000000000000000000040004000400D2 +:10F2300000000000000000000000000000000000CE +:10F2400000000000000000000000000000000000BE +:10F2500000000000000000000000000000000000AE +:10F26000000000000000000000000000000000009E +:10F27000000000000000000000000000000000008E +:10F28000000000000000000000000000000000007E :10F29000000000000000000000000000000000006E :10F2A000000000000000000000000000000000005E :10F2B000000000000000000000000000000000004E -:10F2C000000000000000000000000000000000003E -:10F2D0000000000300000000080000000000100013 -:10F2E000000300000000000000000000000000001B +:10F2C00000000000000000000000000000008400BA +:10F2D000000000000000000000210000000000000D +:10F2E000000000000000000000000000000000001E :10F2F000000000000000000000000000000000000E :10F3000000000000000000000000000000000000FD -:10F3100000000000000000000000000000000000ED +:10F3100000004000000000000000000000000000AD :10F3200000000000000000000000000000000000DD -:10F3300000000000000000000000000000000000CD -:10F3400000000000000000000000000000000000BD +:10F3300000000000C000000000000000000000000D +:10F34000000000400000000000000000000000007D :10F3500000000000000000000000000000000000AD :10F36000000000000000000000000000000000009D -:10F37000000000000000000000000000000100008C +:10F37000000000000000000000000000000000008D :10F38000000000000000000000000000000000007D :10F39000000000000000000000000000000000006D :10F3A000000000000000000000000000000000005D :10F3B000000000000000000000000000000000004D -:10F3C000020000000000000000000000000000003B +:10F3C000000000000000000000000000000000003D :10F3D000000000000000000000000000000000002D -:10F3E00020000000000000000000000000000000FD +:10F3E000000000000000000000000000000000001D :10F3F000000000000000000000000000000000000D :10F4000000000000000000000000000000000000FC :10F4100000000000000000000000000000000000EC :10F4200000000000000000000000000000000000DC -:10F4300000000000000000000000000000000000CC -:10F44000000080000000000000000000000000003C -:10F4500000000000000000000000000000000000AC -:10F46000110000000000000000000000000000008B -:10F470000000000008000000000000000000000084 +:10F4300000000000000000000000000010000000BC +:10F4400000000000000000000000000000000000BC +:10F4500000000000000000000000000002000000AA +:10F46000000000000000000000000000000000009C +:10F47000000000000000000000000000000000008C :10F48000000000000000000000000000000000007C :10F49000000000000000000000000000000000006C :10F4A000000000000000000000000000000000005C -:10F4B000000000000000000000000000000000004C -:10F4C00000000000000000000080000000000000BC -:10F4D000000000000000000000000000000000002C -:10F4E000000000000080000000800000000000001C -:10F4F0000000000000000000000000000004000008 +:10F4B00000000000000000000000030000008900C0 +:10F4C000000000000000000000000000000000003C +:10F4D000000000000000000000000008000000051F +:10F4E000000000000000000000000000000000001C +:10F4F000000000000000000000000000000000000C :10F5000000000000000000000000000000000000FB :10F5100000000000000000000000000000000000EB :10F5200000000000000000000000000000000000DB -:10F5300000000000000000000000000000000000CB -:10F540000000000000000000000000820000000039 -:10F5500000000000000000000000000000000000AB -:10F5600000000008000000200000008200000000F1 -:10F57000000000000000000000000000000000018A -:10F58000002000000000000000000000000000005B +:10F5300000000000000000000000000000001000BB +:10F540000300410000000000000000000000000077 +:10F5500000000000000000000000000000010000AA +:10F56000000000000000000000000000000000009B +:10F57000000000000000000000000000000000008B +:10F58000000000000000000000000000000000007B :10F59000000000000000000000000000000000006B :10F5A000000000000000000000000000000000005B :10F5B000000000000000000000000000000000004B -:10F5C00000000000000000000000400000000000FB +:10F5C000000000000100000000000000000000003A :10F5D000000000000000000000000000000000002B -:10F5E000000000000000010000888800000000000A +:10F5E000080088000000000000000000000000008B :10F5F000000000000000000000000000000000000B :10F6000000000000000000000000000000000000FA :10F6100000000000000000000000000000000000EA :10F6200000000000000000000000000000000000DA :10F6300000000000000000000000000000000000CA -:10F6400000000000000000000000000000000000BA +:10F6400000000001000000010000000000000000B8 :10F6500000000000000000000000000000000000AA -:10F660000000000000000000080000800000000012 -:10F67000000000000000000000000000000040004A +:10F66000000000000000000000000000000000009A +:10F67000000000000000000000000000000000008A :10F68000000000000000000000000000000000007A :10F69000000000000000000000000000000000006A :10F6A000000000000000000000000000000000005A :10F6B000000000000000000000000000000000004A -:10F6C000000000000000000000000000000000003A +:10F6C00000000010000800000041000000000000E1 :10F6D000000000000000000000000000000000002A -:10F6E0000000000000080000000000110000008081 +:10F6E000000000000000000000000000000000001A :10F6F000000000000000000000000000000000000A -:10F7000000000011800080000000000000000000E8 +:10F7000000000000000000000000000000000000F9 :10F7100000000000000000000000000000000000E9 :10F7200000000000000000000000000000000000D9 :10F7300000000000000000000000000000000000C9 -:10F7400000000000000000000000000000000000B9 +:10F740000000000000800000000000000000000039 :10F7500000000000000000000000000000000000A9 -:10F760000000000000000000000000000001000098 -:10F770000040000000000000000000000000000049 -:10F78000000000000801020040002000000000000E +:10F760000000000000000000000000000000000099 +:10F770000000000000000000000000000000000089 +:10F780000000000000000000000000000000000079 :10F790000000000000000000000000000000000069 :10F7A0000000000000000000000000000000000059 :10F7B0000000000000000000000000000000000049 -:10F7C0000000000000000000000000000000000039 -:10F7D0000000210000000000000000000000000008 -:10F7E0000000000000000000000007000000000012 -:10F7F0000000070000000000000000000000000002 -:10F8000000E000000000000600000700000000000B +:10F7C0000000000000000002000000000000000037 +:10F7D0000000000000000000000000000000000029 +:10F7E000000000000000840000E0000000000000B5 +:10F7F0000000000000000000000000000000000009 +:10F8000000000000000000000000000000000000F8 :10F8100000000000000000000000000000000000E8 :10F8200000000000000000000000000000000000D8 :10F8300000000000000000000000000000000000C8 -:10F8400000000000000000000000000000000000B8 +:10F840000000000000000000880000E00000000050 :10F8500000000000000000000000000000000000A8 :10F860000000000000000000000000000000000098 -:10F8700000000000F0F000000000000000000000A8 -:10F880000000000000000000505050540000000034 +:10F870000000000000000000000000000000000088 +:10F880000000000000000000000000000000000078 :10F890000000000000000000000000000000000068 :10F8A0000000000000000000000000000000000058 :10F8B0000000000000000000000000000000000048 :10F8C0000000000000000000000000000000000038 :10F8D0000000000000000000000000000000000028 :10F8E0000000000000000000000000000000000018 -:10F8F000000000000000F0F0000000000000000028 -:10F9000000000000000000000000F0F0F0FC00002B +:10F8F0000000000000000000000000000000000008 +:10F9000000000000000000000000000000000000F7 :10F9100000000000000000000000000000000000E7 :10F9200000000000000000000000000000000000D7 :10F9300000000000000000000000000000000000C7 :10F9400000000000000000000000000000000000B7 :10F9500000000000000000000000000000000000A7 :10F960000000000000000000000000000000000097 -:10F9700000000000000000000000FFFF0000000089 +:10F970000000000000000000000000000000000087 :10F980000000000000000000000000000000000077 :10F990000000000000000000000000000000000067 :10F9A0000000000000000000000000000000000057 @@ -98235,15 +98235,15 @@ :10FA200000000000000000000000000000000000D6 :10FA300000000000000000000000000000000000C6 :10FA400000000000000000000000000000000000B6 -:10FA5000000000000000000000000000050000A001 +:10FA500000000000000000000000000000000000A6 :10FA60000000000000000000000000000000000096 -:10FA700000000008000000A005000A00054000A8E2 -:10FA8000000000000000000000610007000D000001 -:10FA90000000002000000000000000000000000046 +:10FA700000610007800D0000000000000000000091 +:10FA80000000000000000000000000000000000076 +:10FA90000000000000000000000000000000000066 :10FAA0000000000000000000000000000000000056 :10FAB0000000000000000000000000000000000046 :10FAC0000000000000000000000000000000000036 -:10FAD0000000000000000000000000000000000026 +:10FAD000000000600007800000000000000000003F :10FAE0000000000000000000000000000000000016 :10FAF0000000000000000000000000000000000006 :10FB000000000000000000000000000000000000F5 @@ -98251,7 +98251,7 @@ :10FB200000000000000000000000000000000000D5 :10FB300000000000000000000000000000000000C5 :10FB400000000000000000000000000000000000B5 -:10FB500000000000000000000000000000000000A5 +:10FB500000000000000000008282C0C00000000021 :10FB60000000000000000000000000000000000095 :10FB70000000000000000000000000000000000085 :10FB80000000000000000000000000000000000075 @@ -98259,7 +98259,7 @@ :10FBA0000000000000000000000000000000000055 :10FBB0000000000000000000000000000000000045 :10FBC0000000000000000000000000000000000035 -:10FBD0000000000000000000000000000000000025 +:10FBD000000000000000000000008282C0C00000A1 :10FBE0000000000000000000000000000000000015 :10FBF0000000000000000000000000000000000005 :10FC000000000000000000000000000000000000F4 @@ -98267,7 +98267,7 @@ :10FC200000000000000000000000000000000000D4 :10FC300000000000000000000000000000000000C4 :10FC400000000000000000000000000000000000B4 -:10FC500000000000000000000000000000000000A4 +:10FC5000000000000000000000000000000F0F0F77 :10FC60000000000000000000000000000000000094 :10FC70000000000000000000000000000000000084 :10FC80000000000000000000000000000000000074 @@ -98275,106 +98275,106 @@ :10FCA0000000000000000000000000000000000054 :10FCB0000000000000000000000000000000000044 :10FCC0000000000000000000000000000000000034 -:10FCD0000000000000000000000000000000000024 -:10FCE00000000400040004000400200020002000A4 -:10FCF00020001000200020002000880088008800DC -:10FD0000000020000400040020002000200020004B -:10FD10002000880020008800200020002000200013 -:10FD20000000000020002000000020002000200033 -:10FD3000200020002000200088002000200020005B -:10FD4000000000002000200088002000200020008B -:10FD500020002000200020002000200020002000A3 -:10FD60000000000000000000000000000000000093 -:10FD700000001000000000900000000000000000E3 -:10FD800000000000404000000000000000000002F1 -:10FD90004000000000000000210000000000000002 +:10FCD0000000000000000000000000000000000F15 +:10FCE00000008400000088002000C0002000000008 +:10FCF00020008800C00020002000200020002000FC +:10FD000020002000C000200020002000880000000B +:10FD10008800200020008800200020002000200013 +:10FD2000200000022000200000002000200004002D +:10FD3000880020000000200020002000200020007B +:10FD40002000200088000000400084008400200083 +:10FD50008804200488002080200020020080000009 +:10FD600020002000004000002000000000400002B1 +:10FD70000000000000000000000000000090009063 +:10FD8000000200000000000000000000000005402C +:10FD90000040000000000000000000000000000023 :10FDA0000000000000000000000000000000000053 -:10FDB0000000000000000000000000000000400003 -:10FDC0000000000000000000000000000000000033 -:10FDD0000000000000900000000000000000000093 -:10FDE00000400000000000000000000000000000D3 -:10FDF0000000000000000000000000000000000003 -:10FE00000000008008800000000000000800008062 -:10FE10000080008000800000000000000000000062 -:10FE200000000000080000000000000000000000CA -:10FE300000000000000000000000000000000000C2 -:10FE4000000000000000080000000400040004009E -:10FE5000040000000000000000000000000004009A -:10FE6000000000000000080000100010000000006A -:10FE70000008000800080008000000000000000062 -:10FE800000000084000400040000001000000000D6 -:10FE900000200020002000200000000000000000E2 -:10FEA0000000000000000000000000000000000052 -:10FEB000000000000008000000000000000000003A -:10FEC0000000000000000000000000000000000032 -:10FED000000000000008000000000000000000001A -:10FEE000000000000000000000000000000800000A -:10FEF000A000000000000000000000000000000062 -:10FF000000000000000000000000000000000000F1 -:10FF100000000000000800000000000000000000D9 -:10FF200000000000000000000000000000020000CF -:10FF30000200000000000000880000000000000037 -:10FF4000000000000000000000000000000084002D +:10FDB000000040400002400000000002410000003E +:10FDC00000000000000000000000000000000040F3 +:10FDD0000040004000020000000800000901000887 +:10FDE0004008000000C000000000000000100000FB +:10FDF00000000000040000000000000000000000FF +:10FE000000000200040000000000000000040020C8 +:10FE100000200020002000200020002000800000A2 +:10FE200000000200000000000000000000000000D0 +:10FE300000090009000000000000000000000000B0 +:10FE400000000000000000000000000000000000B2 +:10FE5000000000000200040000002000000000007C +:10FE60000008000002024000000000000000000046 +:10FE70000000000000000000000000040000000876 +:10FE80000000000000000000000000000000000072 +:10FE90000001000100832001000100010001002099 +:10FEA000000800000000000000000000000000004A +:10FEB000000000000000000004000000000000003E +:10FEC000000000040000008202080000000000089A +:10FED000000000000000000002000000800000841C +:10FEE0000000000000000009848200000000000003 +:10FEF0000000000000000000000000000000000002 +:10FF0000000000000000000084000000000000006D +:10FF100000000000000000000000000000000000E1 +:10FF200000000000000000000000000000030000CE +:10FF300000080000000000000000000000000000B9 +:10FF400000000000000000000000000000000000B1 :10FF500000000000000000000000000000000000A1 -:10FF60000000000000000000000000000000000091 -:10FF70000000000000000000000000000000000081 -:10FF80000000000000000800000000000000000069 -:10FF90000000000000000000000000000800410018 -:10FFA0000800000021000000000000000000000028 +:10FF60000400000000000400880000000000000001 +:10FF70000000000000000000400000000000000041 +:10FF80000000000000000000000000000000000071 +:10FF90000000000000000000000000000000000061 +:10FFA0000000000000000000000000000000000051 :10FFB0000000000000000000000000000000000041 :10FFC0000000000000000000000000000000000031 :10FFD0000000000000000000000000000000000021 -:10FFE0000000000000000000000000000000000011 -:10FFF00000000000000004000400C0000000000039 +:10FFE0000000000000000000000005000000880084 +:10FFF00000000000000000000000001000000000F1 :020000040018E2 -:1000000000000000000000000000000000000400EC -:1000100000000800000000000000000000000000D8 -:1000200000000000000000000000000000000000D0 -:100030000000002008000000000000000000000098 -:1000400000000000080000000000000000000000A8 -:100050000000000000400000000000000000000060 -:100060000000000000000000000000000000000090 +:10000000000000000000000084000000020000006A +:100010000000C00000000000000000000000000020 +:1000200000000000000000000000A0000008000028 +:1000300000000000000000000000080000000000B8 +:100040000800C000000000000000000002080000DE +:10005000C00082000000080008000000000000004E +:10006000000020000004C0001080080040000000D4 :100070000000000000000000000000000000000080 -:100080000000000000000000080000000000000068 -:100090000000080000000000000000000000000058 -:1000A000000000000000000004000000000000004C +:1000800000000082000000000000000000000000EE +:100090000000000000000000000008000000000058 +:1000A0000000000000000000000000000000000050 :1000B0000000000000000000000000000000000040 -:1000C0000000000010000000000000000000080018 -:1000D000000000000000000000000000000004001C -:1000E0000000000000000000000000000000000010 -:1000F00000000000000000000800000000000000F8 -:1001000000000000000000000000000000000000EF -:1001100000000000000000000000000000000400DB +:1000C0000000000000000000000000000000000030 +:1000D00000000800000041000000000021000000B6 +:1000E0000008000080000000000080080000800080 +:1000F00002A0080000000000000000000000000056 +:10010000C00000000000000000000002000000002D +:10011000840000000000000000000000000000005B :1001200000000000000000000000000000000000CF -:1001300000000000000000000000000000000000BF -:1001400000000000000000000000000000000000AF -:10015000000000000000000000000000000000009F -:10016000000000000000000000000000000000008F -:10017000000000000000000000000000000000007F -:10018000000000000000000000000000000000006F -:100190000010000000000084000000840000000047 -:1001A000000000000000000000000000210000002E +:1001300000020000000000000000000000000000BD +:10014000A000000300000000000800000000820082 +:100150000000100000000000000000000800000087 +:1001600000000000000000000000820000080008FD +:10017000C0000000000000000000000000000000BF +:1001800000000000008400000000000000000000EB +:10019000000000200000000000000000000000003F +:1001A000000000000000000000000000000000004F :1001B000000000000000000000000000000000003F -:1001C000000000000000000000000000009000009F +:1001C000000000000000000000000000000000002F :1001D000000000000000000000000000000000001F -:1001E000000000000000000000000000000000000F -:1001F00000000000000000000000000000000000FF -:1002000000000000000000000000000000000000EE +:1001E000000000000000000000000000000000010E +:1001F00000200004000000000000000000000000DB +:1002000000000000000000000000000000000008E6 :1002100000000000000000000000000000000000DE -:100220000002000000021021000000000000000099 -:1002300000000000000000000000000000000000BE +:1002200000000000000000030000082100000000A2 +:1002300000000008000000000000000008000000AE :1002400000000000000000000000000000000000AE -:10025000000000000000000000000000000000009E +:100250000000000000000000000008000000000096 :10026000000000000000000000000000000000008E -:10027000000000000000000000000000000000007E -:10028000000000000000000000000000000000006E -:10029000000000000000000000000000000000005E +:1002700008210080848000001000000000000000C1 +:100280000000000000080002000000004100000023 +:100290000000000000000500000000000000000059 :1002A000000000000000000000000000000000004E :1002B000000000000000000000010000000000003D :1002C000000000000000000000000000000000002E :1002D000000000000000000000000000000000001E -:1002E000000000000000000000000000000000000E -:1002F00000000000000000000000000000000000FE +:1002E000000000000000080800000000000000827C +:1002F00000000000200800020008000000000000CC :1003000000000000000000000000000000000000ED :1003100000000000000000000000000000000000DD :1003200000000000000000000000000000000000CD @@ -98382,7 +98382,7 @@ :1003400000000000000000000000000000000000AD :10035000000000000000000000000000000000009D :10036000000000000000000000000000000000008D -:10037000000000000000000000000000000000007D +:1003700088000000000000000000000000000000F5 :10038000000000000000000000000000000000006D :10039000000000000000000000000000000000005D :1003A000000000000000000000000000000000004D @@ -98390,40 +98390,40 @@ :1003C000000000000000000000000000000000002D :1003D000000000000000000000000000000000001D :1003E000000000000000000000000000000000000D -:1003F00000000000000000000000000000000000FD +:1003F000000000000000400021000000000000009C :1004000000000000000000000000000000000000EC -:1004100000000000000000000000000800000000D4 +:1004100000000000000000000000000000000000DC :1004200000000000000000000000000000000000CC :1004300000000000000000000000000000000000BC :1004400000000000000000000000000000000000AC :10045000000000000000000000000000000000009C :10046000000000000000000000000000000000008C -:10047000000000000000000000000000000000007C +:100470000000000000000000080000002000410013 :10048000000000000000000000000000000000006C -:10049000000000000000000000000000000100005B +:10049000000000000000000000000000000000005C :1004A00000000000000000000000001000000088B4 -:1004B000000000000000000000000000000000003C +:1004B00000000010000000880000000000000000A4 :1004C000000000000000000000000000000000002C :1004D000000000000000000000000000000000001C :1004E000000000000000000000000000000000000C :1004F00000000000000000000000000000000000FC -:1005000000000000000000000000000000000000EB +:1005000001000000000000000000000000000000EA :1005100000000000000000000000000000000000DB -:100520000100000000000000000000000000840046 -:1005300000000000000000000000000000000000BB +:1005200000000000000000000000000000000800C3 +:1005300000000000000008000000000000000000B3 :1005400000000000000000000000000000000000AB :10055000000000000000000000000000000000009B :10056000000000000000000000000000000000008B -:10057000000000000000000000000000000000007B -:10058000000000000000000000000000000000006B +:100570000000000000004000000000010000000139 +:100580000001000100000000000000000000000069 :10059000000000000000000000000000000000005B -:1005A0000000410000000000000000000900000001 -:1005B00080001000000000000000000000000000AB +:1005A0000000000000000000000000000900000042 +:1005B0008000000002000000800000000000000039 :1005C000000000000000000000000000000000002B :1005D000000000000000000000000000000000001B :1005E000000000000000000000000000000000000B -:1005F00000000000000000000000000000000000FB -:1006000000000000000000000000000000000000EA +:1005F000000000000000000900110003004100029B +:100600000010002100410000000000000000000078 :1006100000000000000000000000000000000000DA :1006200000000000000000000000000000000000CA :1006300000000000000000000000000000000000BA @@ -98431,7 +98431,7 @@ :10065000000000000000000000000000000000009A :10066000000000000000000000000000000000008A :10067000000000000000000000000000000000007A -:10068000000000000000000000000000000000006A +:1006800000800000000000000000000000000000EA :10069000000000000000000000000000000000005A :1006A000000000000000000000000000000000004A :1006B000000000000000000000000000000000003A @@ -98439,15 +98439,15 @@ :1006D000000000000000000000000000000000001A :1006E000000000000000000000000000000000000A :1006F00000000000000000000000000000000000FA -:1007000000000000000000000000000000000000E9 +:10070000000000C000000000000000000000000029 :1007100000000000000000000000000000000000D9 -:1007200000000000008400000082000000000000C3 -:100730000000000000002100000000000000000098 +:1007200000000000000000000000000000000000C9 +:100730000000000000002100000000000000210077 :1007400000000000000000000000000000000000A9 :100750000000000000000000000000000000000099 :100760000000000000000000000000000000000089 -:100770000000000000000000000000000000000079 -:100780000000000000000000000000000000000069 +:10077000000000000000000000000000000000E099 +:100780000000000000000000000060000000000009 :100790000000000000000000000000000000000059 :1007A0000000000000000000000000000000000049 :1007B0000000000000000000000000000000000039 @@ -98489,22 +98489,22 @@ :1009F00000000000000000000000000000000000F7 :100A000000000000000000000000000000000000E6 :100A100000000000000000000000000000000000D6 -:100A20000000000000000000000000000000006165 -:100A30000006000D0000000000000000000005009E -:100A40000A00050000A000000000000000000000F7 +:100A200000000000000000000000000000000000C6 +:100A300000000000000000000000000000000500B1 +:100A40000A00050000A005000A00050000A0000043 :100A50000000000000000000000000000000000096 :100A60000000000000000000000000000000000086 :100A70000000000000000000000000000000000076 -:100A80000000000000000000000000000000000066 -:100A90000000000000000000000000000000000056 +:100A8000000000000000000000610006000D0000F2 +:100A900000610006000D00000000000000000000E2 :100AA0000000000000000000000000000000000046 :100AB0000000000000000000000000000000000036 :100AC0000000000000000000000000000000000026 :100AD0000000000000000000000000000000000016 :100AE0000000000000000000000000000000000006 :100AF00000000000000000000000000000000000F6 -:100B000000000000000000000000000000000000E5 -:100B100000000000000000000000000000000000D5 +:100B000000000000000000000000000000003CBCED +:100B10003C7C000000003CFC3C3F0000000000006A :100B200000000000000000000000000000000000C5 :100B300000000000000000000000000000000000B5 :100B400000000000000000000000000000000000A5 @@ -98512,7 +98512,7 @@ :100B60000000000000000000000000000000000085 :100B70000000000000000000000000000000000075 :100B80000000000000000000000000000000000065 -:100B90000000000000000000000000000000000055 +:100B90003CBC3C7C000000003C3C3C3C00000000B5 :100BA0000000000000000000000000000000000045 :100BB0000000000000000000000000000000000035 :100BC0000000000000000000000000000000000025 @@ -98520,7 +98520,7 @@ :100BE0000000000000000000000000000000000005 :100BF00000000000000000000000000000000000F5 :100C000000000000000000000000000000000000E4 -:100C100000000000000000000000000000000000D4 +:100C100000000000000000000000003C3C0000005C :100C200000000000000000000000000000000000C4 :100C300000000000000000000000000000000000B4 :100C400000000000000000000000000000000000A4 @@ -98529,421 +98529,421 @@ :100C70000000000000000000000000000000000074 :100C80000000000000000000000000000000000064 :100C90000000000000000000000000000000000054 -:100CA00020000000000020002000000000000000E4 -:100CB000C000000020000200000040000080200072 -:100CC000840040000000200020008400000000009C -:100CD0000400000020002000000020000000200090 -:100CE000000120000000000020002000200000047F -:100CF000000088000000000020000000200000002C -:100D000020002000000084002000200020000000BF -:100D100000002000000084002000000020000000EF -:100D20000000000000000000000040000000400043 -:100D30000000000000002100000041000000002031 -:100D40001000000000000000000040000000400013 -:100D50000000400000000000000000000000000053 -:100D60000000000000002000000000000000000063 -:100D70000000000000000000000000000020000053 -:100D80000000000000000000000000000000000063 -:100D90004000000000000000000000000000000013 -:100DA0000002000000000000000000000000000041 -:100DB000000000000000000000000000000000052E -:100DC0000020000000000200000040004000000081 -:100DD0000000000000000000000000000000000013 -:100DE0000000000000000000000000000000000003 -:100DF00000000000000000000000000000000000F3 -:100E000000000000000000000000000000000400DE -:100E100000000000000000000400000000000000CE -:100E200000000000000000000008000000000000BA -:100E300000000008000000000000000000000000AA -:100E40000000000100000000000800008000800099 -:100E5000000000080000000000002000000000006A -:100E6000000000084000000000000008000800002A -:100E70000000400000080000200000000000000802 -:100E800000000008000800080008004000080000FA -:100E900000080000000800080000000000840008AE -:100EA0000008000800080008000000000000000022 -:100EB00000000000000000000000000040000000F2 -:100EC0000000000040009000000000000000000052 -:100ED000000000210000000000000400820000006B -:100EE00004000808000000080000000300000000E3 -:100EF00000000000000000000000000000000008EA -:100F000000000000000000000000000000000000E1 -:100F100000000000000000000000000000000000D1 -:100F200000000000000000000000000000000000C1 -:100F300000000000000000000000000000000000B1 -:100F400000000000000000000000000000000000A1 -:100F50000000000000000000000000A000000000F1 -:100F60000008000000000000000000000000000079 -:100F70000000000000080000000000000000000069 -:100F80000000000000001000000000000000000051 -:100F90000000000000000000000000000000000051 -:100FA0000000000000000000100000000000000031 -:100FB000000000008400000000000000080008009D -:100FC000000000408200000000000000000000005F -:100FD00010000000000000000000000000400000C1 -:100FE00000000000000000000000000000004008B9 -:100FF00000000021000000000004000000100000BC -:1010000000000000004000000000000000000000A0 -:1010100000000000000000000000000000000000D0 -:1010200000000000000000000000000008000000B8 -:1010300000000000000005000800000000000000A3 -:1010400000000000000000000000000000000000A0 -:101050000000000000000300000000004100080044 -:101060000000000000000000000000000000000080 -:101070000000000000000000000010000000000060 -:101080001000000000000000000000000000000050 -:10109000000000000000000021000000000000002F -:1010A0000000000000000000001000100000000020 -:1010B0000000000800000000000000000000000028 -:1010C0008800000040000000000000000000000058 -:1010D000080082000008000000000000000000007E -:1010E0000000000000000000000000000000000000 -:1010F00000000000000000000000000000000000F0 -:1011000000080000000000000000000000000000D7 -:1011100000000000000000000000000000000000CF -:1011200000000000000000000000000000000000BF -:10113000900000000000000000000000000000001F -:101140000000000000000000000000000000000897 -:10115000008200000000000000000000000000000D -:1011600000A00000000000000000000000000000DF -:10117000000000000000000000000000000021004E +:100CA0000000200041002000000320000080208080 +:100CB0000500018020412080C08088002000C00005 +:100CC0000000200020002000000020000000200084 +:100CD0002000840020002000C00020002000200010 +:100CE0000003000020002000200000002000000081 +:100CF0002000000000002000200020002000200034 +:100D0000100000002000200020008400210084004A +:100D10002000088001002000218000000200040063 +:100D2000400020400040C0020000400000000020C1 +:100D300000208800041000000040001000000002A5 +:100D400000000000000000020000000000000000A1 +:100D50000000000000000000000020000000400033 +:100D6000000000000000000000000002000200007F +:100D70000000000220000000000000000000000051 +:100D80004000000000000000000200000000080019 +:100D90000000000080200800210004400000C0C0C6 +:100DA000400020000004000404000008090008407E +:100DB00001100110020002000310001000080004DE +:100DC0000000000000000000000000000000000023 +:100DD0000000000000100000000000000003000000 +:100DE00000000000000000000000000000000008FB +:100DF00000040000000000080000000000000000E7 +:100E000000000000000400000000000500050008CC +:100E100000000004000002890204011008104000D4 +:100E20000800000400100009008580080001840803 +:100E30008041040104098000800884010001000051 +:100E40000000000000000004000000040004000492 +:100E500000040082000200100004001000100004D2 +:100E6000000800000000000000080004000000006E +:100E700000840008000000840000000800840000D6 +:100E8000008400080008008400080000000000083A +:100E900000040082410809088004800902018000E2 +:100EA000808880820008001101000000000300001B +:100EB0000000010000080021000000050000010002 +:100EC000002104219000002100000000000000002B +:100ED0000021000800000021000000000000004088 +:100EE00000080000000000080000000300000000EF +:100EF00000000000000000000000000000000000F2 +:100F00000000000800000000000800000000004091 +:100F100000000005000000000021000000000004A7 +:100F20000004000090000400880804000000000095 +:100F300000000000040000000000000008000000A5 +:100F4000040000000800000000000008000000008D +:100F50000000000000000000000000A000000008E9 +:100F600000000082000000000000000000000000FF +:100F70000000000800000000000010000000000059 +:100F80000000000000000000000000000000000061 +:100F90000008000000000000000000000000000049 +:100FA00041010001110000000000000000200020AD +:100FB00001031000004010000100010000200000AB +:100FC0000000000000000000000000000000000021 +:100FD0000000000000000000000000000000000011 +:100FE0000000000000000000000000000000000001 +:100FF00000000000000000000000000000000000F1 +:101000000000000000000000000000000800840054 +:1010100000000000C000000090000000000004A0DC +:101020000403040000000011820000000011000110 +:101030000001040080000001000802000200000915 +:101040000000000800080082008441000000000049 +:1010500000000000008200004100000000000000CD +:101060000000001000000000000000000000000070 +:101070000000000020000000000000001000000040 +:101080000000000000000000000000000000000060 +:1010900000000000000000C000000000050000008B +:1010A0008021800080A0008200A0080800000000CD +:1010B0000000002000000000840020080000000064 +:1010C0000000000000208200002100000003000456 +:1010D00000000003200000210008000000030000C1 +:1010E00000000008000000000000000000080000F0 +:1010F00000000000000000000003000000000008E5 +:1011000000080000080000000000C000000000000F +:10111000000000000000000000008400000000004B +:1011200082000000000000208800004140050821E6 +:10113000002100000000000000000000000000008E +:10114000000000000000000100000000000000009E +:10115000000000000000000000000000000000008F +:1011600000080000000000000082000000000000F5 +:10117000000000000000000000000000000000006F :10118000000000000000000000000000000000005F -:10119000000010000000000000000000000000003F -:1011A000000000000000000000000000000000003F -:1011B000000000000000000000000000000000002F -:1011C000000000000000000000000000000000001F -:1011D000000000000000000000000000000000000F -:1011E00000000000000000000000000000000000FF -:1011F00000000000000000000800000000000000E7 -:1012000000000000000000000000000000000000DE -:1012100000000000000010000000000000000000BE -:1012200000000000000000000000000000000000BE -:1012300000000000000000000000000000000000AE -:10124000000000000000000000000000000000009E -:10125000000000000000000000000000000000008E -:10126000000000000000000000000000000000007E -:10127000000000000000000000000000000000006E -:101280000000000000000000000000000800000056 -:101290000008000200000000000000000000000044 -:1012A000000000000000000000000000000000003E -:1012B000000000000000000000000000000000002E -:1012C000000000000000000000000000000000001E +:10119000000000000000000000000000000000004F +:1011A000000000000000000000010088110009009C +:1011B0000000000000000000000000880000002186 +:1011C0000000000000000000000000000000000817 +:1011D00000090000000000080000000000000000FE +:1011E00000002000000000000000000000000000DF +:1011F00000000000000000000000000000000000EF +:1012000000000000200000000000000000000000BE +:1012100000000000000000000000000000000000CE +:1012200000000000000000050000000000000811A0 +:101230000000C10301210000000000000020200088 +:10124000000020000000000000000000200000005E +:10125000000000000000000000000000000020006E +:10126000000000000000000000000000210000005D +:10127000000000000000000020000000000000004E +:10128000200000000000000000000000000021001D +:10129000000000000000000000000000000000004E +:1012A0000000000800100000000000000084009012 +:1012B0000000000010900200000100000001000189 +:1012C00000C09004008890C000C0902000108220D0 :1012D000000000000000000000000000000000000E :1012E00000000000000000000000000000000000FE :1012F00000000000000000000000000000000000EE :1013000000000000000000000000000000000000DD :1013100000000000000000000000000000000000CD -:1013200000000000000000000000000000000000BD -:1013300000000000000000000000000000000000AD -:10134000000000000000000000000000000000009D -:10135000000000000000000000000000000000008D -:10136000000000030000000000000000000000007A +:101320000000000800000010000210C010108841EA +:10133000909000C10021002000C1001100050008AC +:1013400000200080800000008000118080800080EC +:10135000800000000000000000000000000000000D +:10136000000000000000000000000000000000007D :10137000000000000000000000000000000000006D :10138000000000000000000000000000000000005D :10139000000000000000000000000000000000004D -:1013A000000000000000000000000000000000003D -:1013B000000000000000000000000000000000002D -:1013C000000000000000000000000000000000001D -:1013D000000000000000000000000000000000000D +:1013A0000000000000800000000000009188109004 +:1013B0000090800400C100100000001002800900AD +:1013C0002000092000000002808080000000002131 +:1013D00080808080000000410000000000000000CC :1013E00000000000000000000000000000000000FD :1013F00000000000000000000000000000000000ED :1014000000000000000000000000000000000000DC :1014100000000000000000000000000000000000CC -:1014200000000000000000000000000000000000BC -:1014300000000000000000000000000000000000AC -:10144000000000000000000000000000000000009C -:10145000000000000000000000000000000000008C +:1014200000000000000000000000000000004080FC +:10143000902110888820800000000000800000902B +:10144000008400000121000090C082C0C00820007C +:1014500000A00810C0020000000100900000000081 :10146000000000000000000000000000000000007C :10147000000000000000000000000000000000006C :10148000000000000000000000000000000000005C :10149000000000000000000000000000000000004C :1014A000000000000000000000000000000000003C -:1014B000000000000000000000000000000000002C -:1014C000000000000000000000000000000000001C -:1014D000000000000000000000000000020000000A +:1014B00089C091820110C040080088002000C0004F +:1014C000000001000200000002000090409082C075 +:1014D00011200000909088C0000000000000000073 :1014E00000000000000000000000000000000000FC :1014F00000000000000000000000000000000000EC :1015000000000000000000000000000000000000DB :1015100000000000000000000000000000000000CB -:1015200000000000000000000000000000000000BB -:1015300000000000000000000000000000000000AB -:10154000000000000000000000000000000000009B -:10155000000000000000000000000000000080000B -:10156000000000400000000000000000000000003B +:10152000000000000000000000004000000020005B +:10153000400004000000021188C088000000010083 +:10154000030005001100C00000000800000000803A +:1015500080809000000000800080000000000000FB +:10156000000000000000000000000000000000007B :10157000000000000000000000000000000000006B :10158000000000000000000000000000000000005B :10159000000000000000000000000000000000004B -:1015A000000000000000000000000000000000003B -:1015B000000000000000000000000000000000002B -:1015C000000000000000000000000000000000001B -:1015D0000000000000000000000000000000000209 +:1015A00000000000000000000000000080000000BB +:1015B0000000000040201021881000A00000200042 +:1015C000050040004140110008004000801100214A +:1015D000008080008011000000808000000000007A :1015E00000000000000000000000000000000000FB :1015F00000000000000000000000000000000000EB :1016000000000000000000000000000000000000DA :1016100000000000000000000000000000000000CA :1016200000000000000000000000000000000000BA -:1016300000000000000000000000000000000000AA -:10164000000000000000000000000000000000009A -:10165000000000000000000000000000000000008A -:10166000000000000000000000000000000000007A +:10163000000000000000880210001100822000401D +:101640000000008000000188010001000000C001CE +:10165000880088400200C00188002040100002007D +:101660000200200002000000000000000000000056 :10167000000000000000000000000000000000006A :10168000000000000000000000000000000000005A :10169000000000000000000000000000000000004A :1016A000000000000000000000000000000000003A -:1016B000000000000000000000000000000000002A -:1016C000000000000000000000000000000000001A -:1016D000000000000000000000000000000000000A -:1016E00000060000070000000000000000000000ED +:1016B0000000000000000000C11089009010080127 +:1016C0000001008800400000810000E007000000E9 +:1016D000000000000700008100000000070000007B +:1016E000000000000000600000000000000000009A :1016F00000000000000000000000000000000000EA :1017000000000000000000000000000000000000D9 :1017100000000000000000000000000000000000C9 :1017200000000000000000000000000000000000B9 -:1017300000000000000000000000000000000000A9 -:101740000000000000000000000000000000000099 -:101750000000000000000000000000000000000089 -:101760000000000000000000000000000000000079 +:1017300000000000000000000000820000E0070040 +:101740008200000000000000000000000000000017 +:101750000000F0F8F0F200F0F0F0BCBCA0FF3C3C60 +:10176000003C3030AAAA0000000000000000000089 :101770000000000000000000000000000000000069 :101780000000000000000000000000000000000059 :101790000000000000000000000000000000000049 :1017A0000000000000000000000000000000000039 -:1017B0000000000000000000000000000000000029 -:1017C0000000000000000000000000000000000019 -:1017D0000000000000000000000000000000000009 -:1017E00000000000000000000000000000000000F9 +:1017B000000000000000000000000000BABA30FF86 +:1017C00000AA00FF00000000000000000000000070 +:1017D000000000000028008200F00000A0A0A0A0EF +:1017E0000000003C3000AAAA000000000000000039 :1017F00000000000000000000000000000000000E9 :1018000000000000000000000000000000000000D8 :1018100000000000000000000000000000000000C8 :1018200000000000000000000000000000000000B8 -:1018300000000000000000000000000000000000A8 -:101840000000000000000000000000000000000098 -:101850000000000000000000000000000000000088 -:101860000000000000000000000000000000000078 +:101830000000000000000000000000000000303048 +:10184000303000AA0000000000000000000000008E +:101850000000000000001F1F5F0F0F000F0FAE0CF5 +:101860005D0C3C3C3C00000000000000000000005B :101870000000000000000000000000000000000068 :101880000000000000000000000000000000000058 :101890000000000000000000000000000000000048 :1018A0000000000000000000000000000000000038 -:1018B0000000000000000000000000000000000028 -:1018C0000000000000000000000000000000000018 -:1018D0000000000000000000000000000000000008 -:1018E00000000000000000000000000000000000F8 +:1018B00000000000000000000000EBEB0000000052 +:1018C0003E0A3D050F0F3C3C555D5D555F0F3F0FD8 +:1018D0000000000000000000141455000F0000007C +:1018E0000C0C0C0C00003C0000000000000000008C :1018F00000000000000000000000000000000000E8 :1019000000000000000000000000000000000000D7 :1019100000000000000000000000000000000000C7 :1019200000000000000000000000000000000000B7 -:1019300000000000000000000000000000000000A7 -:101940000000000000000000000000000000000097 -:101950000000000000000000000000000000000087 -:10196000000000000000000000000000002805004A -:10197000000000610006000D000000610006000D7F +:10193000000000000000000000000000E0E00000E7 +:1019400000003C003C0000000000000C0C005500B2 +:101950003C0005610A00850D00A0A5005A00059015 +:1019600000A5A5005A00059000A500000000000099 +:101970000000000000000000000000000000000067 :101980000000000000000000000000000000000057 :101990000000000000000000000000000000000047 :1019A0000000000000000000000000000000000037 :1019B0000000000000000000000000000000000027 -:1019C0000000000000000000000000000000000017 -:1019D0000000000000000000000000000000000007 +:1019C00000000000A5615A00859100A50061500645 +:1019D000000D0005EBC30AAA000000000000000093 :1019E00000000000000000000000000000000000F7 -:1019F0000000000000000000C3C3C3C300000000DB +:1019F00000000000000000000000000000000000E7 :101A000000000000000000000000000000000000D6 :101A100000000000000000000000000000000000C6 :101A200000000000000000000000000000000000B6 :101A300000000000000000000000000000000000A6 -:101A40000000000000000000000000000000000096 -:101A50000000000000000000000000000000000086 +:101A40000000000000007D553C003C7D3CFC000097 +:101A5000000000000000CBC30AAA00000000000044 :101A60000000000000000000000000000000000076 -:101A700000000000000000000000C3C3C3C300005A +:101A70000000000000000000000000000000000066 :101A80000000000000000000000000000000000056 :101A90000000000000000000000000000000000046 :101AA0000000000000000000000000000000000036 :101AB0000000000000000000000000000000000026 -:101AC0000000000000000000000000000000000016 -:101AD0000000000000000000000000000000000006 +:101AC00000000000000000005F550F00005500F00E +:101AD0000000000000000000F0F0404000000000A6 :101AE00000000000000000000000000000000000F6 :101AF00000000000000000000000000000000000E6 -:101B00000000FFFF000000000000000000000000D7 +:101B000000000000000000000000000000000000D5 :101B100000000000000000000000000000000000C5 :101B200000000000000000000000000000000000B5 :101B300000000000000000000000000000000000A5 -:101B40000000000000000000000000000000000095 -:101B50000000000000000000000000000000000085 -:101B60000000000000000000000000000000000075 +:101B400000000000000000000000FF0C0C0CF0FA88 +:101B5000F0FCBE3C7D3C00000000F0FF4040000C6B +:101B6000003C000000000000000000000000000039 :101B70000000000000000000000000000000000065 -:101B800000000000FFFF0000000000000000000057 +:101B80000000000000000000000000000000000055 :101B90000000000000000000000000000000000045 :101BA0000000000000000000000000000000000035 :101BB0000000000000000000000000000000000025 -:101BC0000000000000000000000000000000000015 -:101BD00000000000000000000000000020002000C5 -:101BE0000000200088000000200000008400840025 -:101BF0002000C0008800C00000000000000020009D -:101C000000002000200088002000000000000000EC -:101C10002000200084000000880000000003000075 -:101C200000000000200088002000200000000000CC -:101C300000022000000020008800000000000000DA -:101C4000000082002000200020000000880000002A -:101C50000000200000002000200000000000000024 -:101C60000000000000000000000000000000400034 -:101C700005000000000000C000004000000040001F -:101C8000000000020000000000A0000000000000B2 -:101C90000000000000000000000000000000000044 -:101CA00000002000000000004100000000000000D3 -:101CB0000000000000000000000000000000000024 -:101CC0000000000000000000000000001000009074 -:101CD00000000000000000000000000040000000C4 -:101CE00000000000000000000000000000000000F4 -:101CF00000000000000000000000000000000004E0 -:101D000000000000000000000000000000000000D3 -:101D100000400000880000000000000000000004F7 -:101D200000000000000000000000000000000000B3 -:101D3000000000000000000000000000880000001B -:101D4000020400000000000000000000000000008D -:101D50000000000000000000020000000000000081 -:101D60000004000000080000000000000000000067 -:101D70000000000000000000000000000000000063 -:101D8000000100000004000000000000000000004E -:101D900000000000000040000000000400000000FF -:101DA0000001000000000000000000000000000032 -:101DB0000000000000000000000000000000000023 -:101DC000000000010000000000000000000000080A -:101DD000000000080008008800000000000000006B -:101DE00000000001000000000000000000000000F2 -:101DF0000000000000000000A00000000000000043 -:101E000000000000000000000000000000000000D2 -:101E100000000000000000000800000000000000BA -:101E200000000000000000000000000000000000B2 -:101E300000000000000000000000000000000000A2 -:101E40000000000000000000000000000000000092 -:101E500000000000000084000002000000000000FC -:101E6000000000000000030000000000000010005F -:101E70000000000000002100000000000000000041 -:101E80000000000000000000000000000000000052 -:101E90000000000000000000000000000000000042 -:101EA0000000000000000000000000000000000032 +:101BC000000000000000000000000000FF05050507 +:101BD00000AA003C3C3C3C3C00000000000000002F +:101BE00088002000000004008400000088008800B5 +:101BF00084008400200010001100218000000004F7 +:101C000084002000000020002000100020002000A0 +:101C10002000200820000000218005800003000033 +:101C200000002000200000000000200088002000AC +:101C3000C000840020000000A0002180218040001E +:101C400010001000200000030000880000000000C9 +:101C50002000840020004000C000C08420900000CC +:101C600000000000000000000000000000900000E4 +:101C700000000000000000020000204008200000DA +:101C80000000000000000000000000000000000054 +:101C900000000000000000000000202004100000F0 +:101CA00040000000000000000000000000002000D4 +:101CB00000000000090000000000400004040820AB +:101CC0000082000000000000000010000000000082 +:101CD0000000000020000000100000000021002192 +:101CE00000000000200000000008000000000000CC +:101CF00000000000000000000000000001001105CD +:101D000000080008000000000000000010000000B3 +:101D10000000000000000000000800051000110095 +:101D200000000000000000080000000800000000A3 +:101D3000000000000000000000000005000001009D +:101D40002000000000000000000000000000000073 +:101D50000200000000000808000000000000100061 +:101D600000100008000800080008000020400002E1 +:101D700000820008000000842008001000101010ED +:101D8000A01000100010001000040008000200085D +:101D900002020002000800080082001020108000EB +:101DA000A00800000004000800840008000400846B +:101DB00000080008008400080008000800840008EB +:101DC00010008008000000040008008400100008D3 +:101DD00000100004000000100010000800080008B7 +:101DE00080000408004000020000002000030040C2 +:101DF0000421000800400000000000000008100856 +:101E000004210008002100210040000800400003D8 +:101E1000004000080021002100000000002100080F +:101E20000021000800000021002100090021000914 +:101E30000008002100000003000300020021000050 +:101E400000030021000800210000000300400008FA +:101E500000000008000000080000000000408400AE +:101E60000000000084004182000000000000050026 +:101E70000000000004000920000000000300000032 +:101E800000008000000000000000000000000000D2 +:101E9000008200000000410000000020000000005F +:101EA00000000000000000000082000000000000B0 :101EB0000000000000000000000000000000000022 -:101EC0000000000000000000000000000000000012 -:101ED0000000000000000000000000000000000002 -:101EE0000000000000000000080082008200820064 -:101EF0000800C000840000400000820082008200D0 -:101F000082088200820000000800820082008200B5 -:101F1000820000008200000008008200820082002F -:101F2000A00000000000000000008200820082008B -:101F300082000000A00000000000820082408200B9 -:101F40008200000000000000A000820082008200E9 -:101F500082000000000000000000000082008200FB -:101F600082000000000000000000000000000000EF +:101EC00008000000000000000300000008000000FF +:101ED0000400000000000500000040082100000090 +:101EE00005880090009000008800C000000082007B +:101EF00000000000000000000000000000000000E2 +:101F000000000000020001000000000000020000CC +:101F100000000000000000000000000000000000C1 +:101F20000000000002001002000000000000C000DD +:101F300000000000000000000000C00000000000E1 +:101F4000000000000000A0000008000000000000E9 +:101F5000000000000000000004000000000000007D +:101F6000A000A000080000008304000000000000A2 :101F70000000000000000000000000000000000061 -:101F80000000000000000800000000000000000049 -:101F90000000000000000000000000000800000039 -:101FA0000000080000000000000000000000050024 -:101FB0000000000008840008000000080000000085 -:101FC000100000000000000000000000000000A061 -:101FD00000820000000000000000000000C000C0FF -:101FE00000000000000000000000000000000000F1 -:101FF00008000800000000000800000000000000C9 -:10200000000000000000000082000000000000004E -:1020100000000800000000000800000000000000B0 -:1020200000000000000000000000000000000000B0 -:102030000000000008000800000008000000000088 -:102040000000000000000000000008000000000088 -:102050000000000008000000004008000000000030 -:10206000000020000000000000000000000200004E -:102070000000000000000000000000000000000060 -:1020800000000000080000000000000000880000C0 +:101F80000000000000000000400000000000000011 +:101F90000000000000000000000000000000000041 +:101FA0000000000000000000000100000000000030 +:101FB0000000000000000000000000000084080095 +:101FC0000000000000000000000000010000000010 +:101FD00000002100001000000000000000000000D0 +:101FE00020000000000000000010100100000005AB +:101FF00000000009A000020000000020000000080E +:102000000000002100210040000000030000000546 +:10201000080800000000C0000000000000080008E0 +:102020000000002100000021000008030000000063 +:1020300000000021900000000800C0000003000024 +:10204000000800050021000300080000001100083E +:102050000008000000080000000800400000000028 +:10206000004000030000002104030000882100005C +:1020700000C000000004050000000008000400206B +:1020800008000008410000004000000200000000BD :102090000000000000000000000000000000000040 :1020A0000000000000000000000000000000000030 :1020B0000000000000000000000000000000000020 :1020C0000000000000000000000000000000000010 -:1020D0000000000000000000000000000000000000 -:1020E000000000000000000000000000000000C030 -:1020F00000000000000000008200C000C0000000DE -:1021000000000000000008000000000000000000C7 -:10211000000000000000000008008200C000000075 -:1021200082000000000040000000080000000000E5 -:1021300000000000A0000000000082000800C000B5 -:10214000000000080000000008000000000000007F -:102150000000000000000000000008000800C000AF -:102160000000000000000000000000000800000067 -:10217000000000000000000000000000000000005F +:1020D000000000000000000000C000000000000040 +:1020E00004042002041000842100002005100000D8 +:1020F00008000000000000000000000800000000D0 +:10210000000000410000001000000021000000005D +:1021100000000000000000000000000800000000B7 +:10212000000000000000000800080000000000009F +:10213000000000000000000000000000000000009F +:102140000000000000000803000800080000000470 +:102150004000000000000000000300000000080034 +:1021600008050800000000050021000000410821CA +:10217000010300000000000000000000000000005B :10218000000000000000000000000000000000004F :10219000000000000000000000000000000000003F -:1021A000000010000000000000000000000000001F -:1021B00000000000000020000000000000000000FF -:1021C0000000000000001108000000000000009066 -:1021D00000000000000000000000000000000000FF -:1021E000000000000082000000000000000041002C -:1021F00000000000000000000000000000000000DF -:102200000000000000010900004000000000000084 -:1022100000000000000000000000000000000000BE -:102220000000000000010900004000000000000064 -:10223000000000000000000000000000000000009E -:102240000000000000000000090000400000000045 -:10225000000000000000000000000000000000007E -:102260000000000000000000090000400000000025 -:10227000000000000000000000000000000000005E -:102280000000000000000802100000000000000034 -:10229000000000000000000000000000000000003E -:1022A0000000000000000802100000000000000014 -:1022B000000000000000000000000000000000001E -:1022C00000000000000000000840100000000000B6 -:1022D00000000000000000000000000000000000FE -:1022E0000000000000000000084010000000000096 -:1022F00000000000000000000000030000000000DB -:10230000000000000000000020002100008000000C -:1023100000000000000000050000030000000000B5 -:1023200000000000000000002000210000800000EC -:102330000000000000000005000000000500000093 -:1023400000000000000000000000A000210000804C -:10235000000000000000000000400000030000003A -:1023600000000000000000000000A000210000802C -:10237000000000000000000000100000000000004D -:1023800000000000000000000000400040820082C9 -:1023900040004000000000000000000000000000BD -:1023A00000000000000000000000400040880082A3 -:1023B000400040000000000000000000000000009D -:1023C0000000000000000000000000000400408247 -:1023D00000824000820000000000000100000000B8 -:1023E0000000000000000000000000000400402089 -:1023F00000824000200000000000000100000000FA -:1024000000000000000000000000000000040000C8 -:1024100000000000000000000000000000000000BC -:1024200000000000000000000000000000040000A8 -:10243000000000000000000000000000000000009C -:10244000000000000000000000000000000000404C -:10245000000002000000000000000000000000007A -:1024600000000000000000000000000000000082EA -:10247000000000000000000000000000000000005C -:1024800000000000000000000000000000000080CC -:10249000000000000000000000000000000000003C -:1024A00000000000000000000000000000000080AC -:1024B000000000000000000000000000000000001C -:1024C000000000000000000000000000000000000C -:1024D00000800000800000000000000000000000FC -:1024E00000000000000000000000000000000000EC -:1024F00000000000000000000000000000000000DC -:102500000003800000C10000000000000000000087 -:1025100000C1800000050000000000000000000075 -:102520000003800000C10000000000000000000067 -:1025300000C1800000050000000000000000000055 -:102540000000000080050083000000000000000083 -:10255000000000C180000005000000000000000035 -:1025600000000003800000C1000000000000000027 -:10257000000000C180000005000000000000000015 -:1025800000000000200000400000000000000000EB -:102590000000000304000000000000000000000034 -:1025A00000000000200000400000000000000000CB -:1025B0000000000304000000000000000000000014 -:1025C0000000000000000400008300000000000084 -:1025D00000000000000304000000000000000000F4 -:1025E000000000000000200000400000000000008B -:1025F00000000000000304000000000000000000D4 -:1026000000000000000000000000000000000000CA -:1026100000000000810000E0000048000000000011 -:1026200000000000000000000000000000000000AA -:1026300000000000810000E00000480000000000F1 -:10264000000000000000000000000000000000008A -:10265000000000000000810000E0000048000000D1 -:10266000000000000000000000000000000000006A -:10267000000000000000810000E0000048000000B1 -:10268000000000000000000000000000000000004A +:1021A000000000000000000000000000000000002F +:1021B000000000000000000000000000000000001F +:1021C000000000000000000000000000000000000F +:1021D000000084000000000000000000000000007B +:1021E00000000000000000000000000021000000CE +:1021F0000000404000000000000000000000A000BF +:10220000000000A00001C0000010C0820000C0005B +:1022100000010000000000000000000100000200BA +:10222000000100A00001C1000090C0820000C000B9 +:10223000000100000000000000000000000100009C +:102240000000000000A00001C0000010C0820000DB +:10225000C0000001000000000000000000000000BD +:102260000000000000100000C0000010C08201004B +:10227000A00000000000000000000000004102007B +:1022800000000041110000088900008080800000EB +:1022900080000003000000000000000000080000B3 +:1022A0000000000311000008820000008080000090 +:1022B000800000030000000000000000000000207B +:1022C00000000000000911000208A1000000808049 +:1022D0000000800000030000000000000000000972 +:1022E0000000000000100480000291000080808047 +:1022F000410000000041000000000200000000005A +:102300000000090000000300030084000000030037 +:10231000000000000080801100001000000000009C +:1023200000000200000002004100830000100300D2 +:10233000000000000080801000000000110000007C +:1023400000000000080000000200C10083800010AF +:102350000300000000000080801100001000000059 +:10236000000000000300000010004000890000048D +:1023700003000000000000800003000000000000D7 +:1023800000000000000400000100880010020000AE +:1023900001008800000000C0820000000000000072 +:1023A0000000000000000000000088001102000092 +:1023B00001028800000000C0820000000000000050 +:1023C0000000000000000100000000000800821072 +:1023D000000101108800000000C082000000000021 +:1023E0000000000000000100000000C0890040045F +:1023F00000000100C000000000C004010000000057 +:102400000000000000000000840102000010000035 +:1024100001000000000000000000000000000000BB +:10242000000000000000000000000200001000009A +:10243000010000000000000000000000000000009B +:10244000000000000000000000000000020000107A +:10245000000001000000000000000000000000007B +:1024600000000000000000000000000110000088D3 +:1024700000008500000000000000000000000000D7 +:10248000000000000000000000000005040900003A +:1024900000004100000000000000004100000000BA +:1024A00000000000000000000000004100090000E2 +:1024B000000041000000000000000041000000009A +:1024C00000000000000000000000000000410009C2 +:1024D000000000004100000000000000004100007A +:1024E0000000000000000000000000000008801054 +:1024F000000000004100000000000000004100005A +:102500000002800000C10000000080028400000082 +:10251000004100000011000000410000000008041C +:102520000010800000C100000011001084000000B5 +:1025300000C1000000110000004100000000081070 +:1025400000000011800000C1000000110010820096 +:102550000000004180000002000000410000000077 +:1025600009080010800000C1000000000000090000 +:1025700000000041000000020000004100200000B7 +:102580004083000020000040000000004000820066 +:1025900000000091020000000000000100000000A7 +:1025A00001100000200000400000000040008200F8 +:1025B000000000090200000000000001000000000F +:1025C00001840000000020000040000000004000E6 +:1025D00083000000009110000000000000010000D6 +:1025E00000000005000020000040000000008800FE +:1025F0000400000000C10200000000000001000112 +:1026000000000109000000000000000000000000C0 +:1026100000000000811200E080004842000000003D +:102620000000484200000000000000000000000020 +:1026300000000000811200E080004842000000001D +:102640000000484200000000000000000000000000 +:10265000000000000000811200E0800048420000FD +:1026600000000000484200000000000000000000E0 +:10267000000000000000811200E02200484200003B +:1026800000000000484200000000000000000000C0 :10269000000000000000000000000000000000003A :1026A000000000000000000000000000000000002A :1026B000000000000000000000000000000000001A @@ -98959,210 +98959,210 @@ :102750000000000000000000000000000000000079 :102760000000000000000000000000000000000069 :102770000000000000000000000000000000000059 -:1027800000000000000000000000747B000000005A +:1027800000000000000000000000757B0000000059 :102790000000000000000000000000000000000039 -:1027A0000000000000000000DE2E747B000000002E +:1027A0000000000000000000DEAE757B00000000AD :1027B0000000000000000000000000000000000019 -:1027C0000000000000000000DE2E0000747B00000E +:1027C0000000000000000000DEAE0000757B00008D :1027D00000000000000000000000000000000000F9 -:1027E00000000000000000000000DE2E747B0000EE +:1027E00000000000000000000000DEAE757B00006D :1027F00000000000000000000000000000000000D9 -:1028000000000000000000000000DE2E61560340C2 +:1028000000000000000000000000DEAE6126034072 :102810000000000000000230A000000000000000E6 -:102820000C4000000000000002C06A8661560340B0 +:102820000C4000000000000002C0648661260340E6 :102830000000000000000230A000000000000000C6 -:102840000C4000000000000002C06A8600006156D3 +:102840000C4000000000000002C064860000612609 :1028500003400000000000000230A0000000000063 -:1028600000000C4000000000000002C06A866156B3 +:1028600000000C4000000000000002C064866126E9 :1028700003400000000000000230A0000000000043 -:1028800000000C4000000000000002C06A86040046 -:102890000400200020002002C000200010000000E2 -:1028A0008800200082000080900000000000880066 -:1028B00020008400200020002000200020000000D4 -:1028C00000000800A000C00040000000000000035D -:1028D00084000000400000002000210020000400CF -:1028E00084000000000000000000000088040000D8 -:1028F0000400000020000000200020002100200033 -:10290000200000000000000088000000000000001F -:102910008000000080008000000121000002000013 -:1029200000004000210000004104000240000000BF -:102930004000000000000000000000000000A000B7 -:1029400000000002800000020000050000000000FE -:1029500000000500000080000000000008000000EA -:10296000100005000000000200000002000040000E -:102970000000000000000000000000000040020015 -:102980000000000000000000000000000000000047 -:1029900000000000000001000100004000000010E5 -:1029A0000000000000000000000000000000000027 -:1029B0000000000000000000000000000100000016 -:1029C0000000000000002040004000000000000067 -:1029D00000000000200820882020202000000000A7 -:1029E00008000020020002000000000000000000BB -:1029F00000000000000000000000020000000000D5 -:102A000000000000000000000000000000000000C6 -:102A10000000000000000008040004000000001096 -:102A2000000000000000000000000000090000009D -:102A3000000000000000000800000000000020006E -:102A40000000400000000000000000000000000046 -:102A50000000000000008001802180018001000052 -:102A600000008000000100000000000000000000E5 -:102A70000000000002000000000000000000000450 -:102A80000008000800080000000000080000001016 -:102A900000040084000800000000000000000000A6 -:102AA0000000000000000000000082000000002183 -:102AB000000082000000000000000000000000058F -:102AC0000000000000000000000000000000000006 -:102AD00000000000000000000000000000000000F6 -:102AE00000000000000000000000000000000000E6 -:102AF000000000000021000000000005000500218A -:102B000000410021004000050000002100210021BB -:102B10000010000800080008000000000800000085 -:102B2000080000000000090000000800000000008C -:102B30000000000000000000000000000000000095 -:102B4000080000000000000000000000000000007D -:102B50000000100000000000000005000000000060 -:102B6000000008000000000000000000000000005D -:102B70000000000000000000000000000000000055 -:102B80000000080003000001000003000000000036 -:102B90000000000000A00000000005000500840007 -:102BA000000002400000C00000008200000082001F -:102BB0000800000008008200080008000800080063 -:102BC00008000000C0000100000020040000080010 -:102BD000000000008200A000C0000000C0800800CB -:102BE0000080098000000000A00008000000000034 -:102BF00000800000080004400011000008000000F0 -:102C000000000000A0000000000000000000000024 -:102C10000000000082000000000000002000A00072 -:102C200000000400000000000000000000000000A0 -:102C30000000000000000000030000000000000091 -:102C400000000000008400002000000003000800D5 -:102C5000000000000000080000000000000000204C -:102C600000000008400800000000000041000000D3 -:102C7000000000400000000000080090000000007C -:102C8000000000000000030000000582000000A01A -:102C90000000000000000000000000100010000014 -:102CA00008000000C000000000000000000000005C -:102CB0000000820000000080000000000000000012 -:102CC0000000820082009000000020002000A00090 -:102CD0000000000000000000A0000011A0000000A3 -:102CE0008200000082000000A008104082008200E4 -:102CF000000000000808081100080821000800086A -:102D00004008842184080008900000002000000092 -:102D10000008000800210021000500050021000531 -:102D200000000000000000000000000000000000A3 -:102D30000900000000000000000200000000000088 -:102D40000000000000000000000000008000800083 -:102D500009000084000000000000000000000000E6 -:102D60000000000000000000000000000000000063 -:102D7000000009000000000000000000000000004A -:102D80000000000000000000000000000000000043 -:102D90000000090000000000000000000000080022 -:102DA0000000000000000000000000210000000002 -:102DB00000000000000000002000000000000000F3 -:102DC0000000000000000000000020002000820041 -:102DD00000002004080082000800A0000002000596 -:102DE00000000000080000000820000000000008AB -:102DF000000800080000000000000004002100009E -:102E000000000021080000000021000082000003F3 -:102E100084210000000000000008000800090000F4 -:102E2000000000000000000005004100000000005C -:102E3000000000000000000003000000000000008F -:102E4000000021000000000003000000800080005E -:102E500003000000000080000000080000000000E7 +:1028800000000C4000000000000002C06486000050 +:1028900082000000000000000000000000000000B6 +:1028A00000000000400000000000040004000000E0 +:1028B0002000000084000000400800001000000517 +:1028C0000000000840040010042020002100000344 +:1028D000400020080000200800052000880020009B +:1028E00000004005000010000000840840002000A7 +:1028F0002000000000002000400088008800400503 +:1029000040002080C0892000882020002020200056 +:102910000000009000020000000000000002000023 +:1029200000000000000000000000000000000000A7 +:102930000000000000000000000000004000000057 +:1029400000000000000000000000800140000200C4 +:102950000000000000000000000000000002400035 +:102960000000000000000000000000000000000067 +:1029700000000000000000000000000040004000D7 +:102980001000009000200020410000011000000312 +:10299000040200008400001000108200000000000B +:1029A00000008200000000000000040000000000A1 +:1029B0000000000000000000000000000000000017 +:1029C0000000000000000000000000000000000007 +:1029D00000400000000000000000000000000000B7 +:1029E00000000000000000000000000000000000E7 +:1029F0000000000000000000009000000000000047 +:102A000000000000004182209009000000000880C2 +:102A1000001040100508000800080508001000100C +:102A2000008400080004000000082084000400085E +:102A300000040004000800080408000800080084DE +:102A400000000008000800000084000800080002E0 +:102A500000080001000000100004000800040088C5 +:102A60000084000002100008000800100010001090 +:102A70000084001000080000001000040010000096 +:102A800000000008051000084009000000840084D0 +:102A90000020000880080000000000000000000086 +:102AA00008210000080000000000000000000000F5 +:102AB0000040000800004000002100000004002148 +:102AC00000000000000000000005000000000021E0 +:102AD000001000000008000000400000004000005E +:102AE000004000000000000000400000000000085E +:102AF000002000200000000000000008000000008E +:102B000000000008000000004100004002008300B7 +:102B100000021000000000201188000000040004E2 +:102B20000000000800000000000000000000000895 +:102B300000080000000000000000000000400084C9 +:102B4000001000000000000000000008000000006D +:102B500000080082000000840000000000000084E3 +:102B600000840000090000000000000000080000D0 +:102B700000000010008200080000000000000000BB +:102B8000050000A00000000000000882091004A059 +:102B900004080090A108000000010000008000046B +:102BA000081000000000000000000000000000000D +:102BB0000000000000000000000000000000000015 +:102BC0000000000000000000000000000000000005 +:102BD000000000000000C000000000000000000035 +:102BE00000000000000000000000000000000000E5 +:102BF00000000000000008000809000000000800B4 +:102C00000000840084000800000000000021C000D3 +:102C1000C020002088008200400020040000004006 +:102C20000000000100000000000000002000000083 +:102C30000000000000000000000000000000000094 +:102C40000000000000100000000000000000000074 +:102C5000000000000000000000000000000000A0D4 +:102C60000000000000000000000000000000000064 +:102C70000000000000000000000041000000001003 +:102C80000000000000000000000000000000000044 +:102C9000000000010001000400001100800100009C +:102CA0000000000000000000000000000000000024 +:102CB0000000000000000000000000000000000014 +:102CC0000000000000000000000000000000000004 +:102CD00000000000080000001000000000000000DC +:102CE00000210000000000000000000000000000C3 +:102CF00000000000000008000000000000000000CC +:102D00000041000000000000000000000800080072 +:102D1000000004000200820000080000000000041F +:102D2000000400000000090000080000000000008E +:102D3000110800A00000030000A000000000000037 +:102D4000001000000000000000080000000000006B +:102D50000008208400000000000280000000000045 +:102D600000000000000000000008000000840000D7 +:102D700000001108028400000000000800000000AC +:102D80000000000000000000020000080000001029 +:102D90000008000000A000000000000040900400B7 +:102DA0000000000000000000000000000000000023 +:102DB0000000000000000000000000000000000013 +:102DC0000000000000000000000000000000000003 +:102DD00000210000000000000000000000080000CA +:102DE00000000000000000000000002100000000C2 +:102DF0000008000800000021000000000000002181 +:102E00000000000000000000000000000000820040 +:102E10000800000000008200000000000000000028 +:102E2000040004000000000000000000000000009A +:102E30000000000000000000000000000000000092 +:102E40000000000000000000000000000000000082 +:102E50000000000000000000000000000000000072 :102E60000000000000000000000000000000000062 -:102E7000030000004100000000000000000000000E -:102E800000000000000000000000000000004108F9 -:102E9000410000004100000041000000000000006F -:102EA000000000000000000800000000000000001A -:102EB0000000000000010000000000000000000011 +:102E70000000000000000000000000000000000052 +:102E80000000000000000000000000000000000042 +:102E90000000000000000000000000000000000032 +:102EA0000500000020880000000000000000000075 +:102EB0000000000000000000000000000000000012 :102EC0000000000000000000000000000000000002 -:102ED00000000000000008A0002002909008000000 -:102EE00000000000000000000100000001000000E0 -:102EF00000A000880002000840A0002000C0402080 -:102F000041100020000210900000000000000000AE -:102F1000022020040008100810040040009002085D -:102F200000000000000000000589000041000005CD -:102F30000020000800000010000000000000000059 -:102F40004002000840410020000000000000000096 -:102F500000090000400300004080058080008000E0 -:102F60000000000000000000000020000000081128 -:102F70000000008000000000008091000080000040 -:102F80000000908000000080800000000000000031 -:102F90000000800000000080800080800080000031 -:102FA0008000000000000000000089800000100088 -:102FB0000000000000000000000000000000000011 +:102ED000000000000000000000000000000040C0F2 +:102EE000899082A00008000000000000000000009F +:102EF00000000000000000000000000000000000D2 +:102F000000000000000000000000000000000000C1 +:102F100000000000000000000000000000000000B1 +:102F200008040590821088020000000000000000E4 +:102F30000000000000000000000000000000000091 +:102F40000000000000000000000000000000000081 +:102F50000000000000000000000000000000000071 +:102F600080809180808000800000000000000000D0 +:102F70000000000000000000000000000000000051 +:102F80000000000000000000000000000000000041 +:102F90000000000000000000000000000000000031 +:102FA000000000008300800000000000000000001E +:102FB0008000000000000000000000000000000091 :102FC0000000000000000000000000000000000001 -:102FD00000000900000020000000800000080080C0 -:102FE00080000000000000000000000020040080BD -:102FF000410441800000801180800000800080C07A -:10300000801080800000009180020080000000009D -:10301000000000000000009100808080000080829D -:103020000010808000000000000000000802000086 -:10303000010000000000000000000000000000008F +:102FD00000000000000000000000000000000000F1 +:102FE000000041001100031141000000000000003A +:102FF00000000000000000000000000000000000D1 +:103000000000000000000000000000000800200098 +:103010000802200000000000000000000000008501 +:103020000080000080000011008000008800840003 +:103030000000C000000000000000000000000000D0 :103040000000000000000000000000000000000080 -:1030500000000000000000000000000088004001A7 -:103060004008A0A0000000000000000000000001D7 -:1030700000080001010800000200A0C000000200DA -:1030800010C0108910C0080010C0401110C000000E -:10309000000000000000900090C0028202C01000FA -:1030A00010C020C010C00000000000000000000898 -:1030B00000002040020000000000000000000000AE +:103050000000000000000000000000000000000070 +:10306000000000000000010001010100000000005C +:103070000000000000000000000000000000000050 +:103080000000000000000000000000000000000040 +:10309000000001000000000000000000000000002F +:1030A000001000040008020090009002108400004C +:1030B0000000000000000000000000000000000010 :1030C0000000000000000000000000000000000000 -:1030D00000000000000000000000000000002000D0 -:1030E000009004001000000000000000000000003C -:1030F000000004010801000104000084200284880B -:1031000021020002C002081089020004C0088802DF -:10311000000000000000000003880010C0020890BA -:1031200011080002C0041020000000000000000090 -:1031300000890000000080400000200040000000E6 +:1030D00000000000000000000000000000000000F0 +:1030E000000000000000C088000000858903000087 +:1030F00000000000000000000000000000000000D0 +:1031000000000000000000000000000000000000BF +:1031100000000000000000000000000000000000AF +:103120000000000090000000404000909020C091FE +:10313000000000000000000000000000000000008F :10314000000000000000000000000000000000007F -:103150000000000000000000000900000000004026 -:10316000000000008003C00000000000000000001C -:10317000000004100008802104418000000000804D -:10318000008041800000800080004180000080803D -:1031900000800000000000000000C10000808000EE -:1031A000820041800000808080000000000000005C -:1031B0000000890500A100000000000000000000E0 +:10315000000000000000000000000000000000006F +:10316000000000000000000080800000008591C188 +:10317000000000000000000000000000000000004F +:10318000000000000000000000000000000000003F +:10319000000000000000000000000000000000002F +:1031A000000000000000000002008080004000419C +:1031B000A0410004000000800000000000000000AA :1031C00000000000000000000000000000000000FF -:1031D0000000000000000000000009402100000085 -:1031E0000000800300C1008080000000000000009B -:1031F0000000000000800041110000108040000825 -:1032000000000000800000808000000000000080BE -:1032100000008000000000000000000000020080AC -:10322000008000000003008000800000000000001B -:103230000000000008000002000040000000000044 +:1031D00000000000000000000000000000000000EF +:1031E0000000000000000000000000880000000057 +:1031F00000110000000000000000000000000000BE +:1032000000000000000000000000000000000000BE +:10321000000000000000000000000010000000009E +:1032200000000000000880110000000000200011D4 +:10323000808000000001000000400000000000004D :10324000000000000000000000000000000000007E :10325000000000000000000000000000000000006E -:1032600000000000040020822040A00000000000B8 -:103270000000000000000004000100000000400009 -:10328000820010904000080020020290020090008E -:103290009010400410000000000000000000040036 -:1032A00090201084200088008810104088000000C2 -:1032B000000000000000842100E007000000000082 -:1032C000000000000000000000000000000060009E -:1032D00000E00000000000000000000000006000AE -:1032E00000E00000000000000000070000000000F7 -:1032F0000000000000000000000000084000410045 -:103300000081000007000082000000000000484229 -:103310000000000000004842000000000000000023 -:103320000000000000004842000000000000484289 -:10333000000000000000000000003C3CC300C3008F +:1032600000000000000000000000000000880000D6 +:10327000000000010000000000000000000000004D +:10328000000000000000000000000000000000003E +:10329000000000000000009000000000000000009E +:1032A00000000000000090008200200088008800DC +:1032B000900282C02000000000000000000000001A +:1032C00000000000000000000000000000000000FE +:1032D00000000000000000000000000000000000EE +:1032E00000000000000000000000000000008181DC +:1032F00000E0070060000000000000000000000087 +:1033000000000000000000000000000000000000BD +:103310000000000000000000820000E0000000004B +:103320000000000000000000008100000700000015 +:10333000000600E00700000600000000000000009A :10334000000000000000000000000000000000007D :10335000000000000000000000000000000000006D -:10336000000000000000000000000000F9F9F9F979 -:10337000000000000000000000000000000000004D -:103380000000000000000000000F221100002800D3 -:103390004100221100002211000000000000000086 -:1033A0000000220000222841000022001100200419 -:1033B0004002000000000000000000003C3CC30090 -:1033C000C30000000000000000000000000000003A +:10336000000000000000000000000000000000005D +:103370000000000024000000000000000000000029 +:10338000000000000000000000000000000000003D +:10339000000000000000000000000000000000002D +:1033A000000000000000000000000000000000001D +:1033B0000000FF383838FCF07C600000000000009E +:1033C00000000000000000000000000000000000FD :1033D00000000000000000000000000000000000ED -:1033E0000000000000000000000000000008606015 -:1033F000606000000000000000000000000000000D -:1034000000000000000000080000000F0000221172 -:1034100000280041000022110000221100000000DD -:1034200000000000110000110000284100220011DE -:1034300010088001000000000000000000000000F3 +:1033E00000000000000000000000000000000000DD +:1033F00000000000000024000000000000000000A9 +:1034000000000000000000000000000000000000BC +:1034100000000000000000000000000000000000AC +:103420000000000000000000000000000202030293 +:1034300000000000FF202020BC903C0000000000A5 :10344000000000000000000000000000000000007C :10345000000000000000000000000000000000006C :10346000000000000000000000000000000000005C @@ -99170,494 +99170,494 @@ :10348000000000000000000000000000000000003C :10349000000000000000000000000000000000002C :1034A000000000000000000000000000000000001C -:1034B0000000000000000000000000000000666640 -:1034C00000004242424200000000000000000000F4 +:1034B000000000000000000000000000000000000C +:1034C00000003C3C0C0C000000000000000000006C :1034D00000000000000000000000000000000000EC :1034E00000000000000000000000000000000000DC -:1034F00000000000000000000000000000000000CC -:10350000000000000000000000E700E700F000F00D -:103510004020020400008214102008041008200437 -:10352000000000000000000000A0000510082004BA -:10353000010802040102080400000000000000006D -:1035400066660000424242420000000000000000A7 +:1034F000000000000000180024F0000000000000A0 +:1035000000000000000000000000000000000000BB +:1035100000000000000000000000000000000000AB +:10352000000000000000000000000000000000009B +:1035300000000000000000000F2F0FBF063E063EF7 +:103540000000000000000C0C000000000000000063 :10355000000000000000000000000000000000006B :10356000000000000000000000000000000000005B -:10357000000080000000800000000000000000004B -:103580000000000000000000000000E707E7000066 -:1035900000008010010882140000804001028001B8 -:1035A00040020000000000000000A00005008001B3 -:1035B00040028010402080401020000000000000E9 -:1035C0000000006100298001000000610006000D7C -:1035D0000000000000000000000000650003800DF6 -:1035E00000000000000000000000006100018001F8 -:1035F00000000061000E001D00A00000000000009F -:103600000000000005000A0F050C00A00000402883 -:10361000000000006000000000001000000000003A -:103620000000080000000000000000006000000032 -:103630000000100000000000000008000000000072 -:1036400000000000000055550000C3C3000000004A +:103570000000000000000000000000F0000000005B +:10358000000000000000000000000000000000003B +:10359000000000000000000000000000000000002B +:1035A000000000000000000000000000000000001B +:1035B00000000000000000000000002400BD003CEE +:1035C0000F3F0000000000000005000000000000A8 +:1035D00000000000000000000000000000000000EB +:1035E00000000000000000000000000000000000DB +:1035F00000000000000000000000006020268000A5 +:1036000000000000000000000000000000000000BA +:1036100000000000000000000000000000000000AA +:1036200000000000006100068005000000000000AE +:103630000000000000000A28050000A0006100262C +:10364000000D00000000000000000000000000006D :10365000000000000000000000000000000000006A -:103660000000000000000000000000000000FF005B -:103670000000C3C3000000000000000000000000C4 -:1036800000000000000000000F0F3C3CF0000000B4 +:10366000000000000000000000000000000000005A +:10367000000000000000000000000000000000004A +:103680005555AA5500000000000000000000000091 :10369000000000000000000000000000000000002A :1036A000000000000000000000000000000000001A :1036B000000000000000000000000000000000000A -:1036C000000000000000000055550000C3C30000CA +:1036C0000000F0FAFAF00000000000000000000026 :1036D00000000000000000000000000000000000EA :1036E00000000000000000000000000000000000DA -:1036F000FF000000C3C3000000005500550000009B -:10370000000000000000000000000F0F3C3CF00033 +:1036F00000000000000000000000000000000000CA +:1037000000000000000000000000000000000000B9 :1037100000000000000000000000000000000000A9 :103720000000000000000000000000000000000099 :103730000000000000000000000000000000000089 -:10374000000000000000000000003C3C00C300C37B -:103750002800000000000000000000000000000041 -:10376000FFFF3F30000000000000000000000000EC -:1037700000000F0F00C300C30000000000000000A5 -:103780000000000000000000000000000F0FAAAAC7 -:10379000FFC3000000000000000000000000000067 -:1037A0000000000000000000000000000000000019 -:1037B0000000000000000000000000000000000009 -:1037C0000000000000000000000000003C3C00C3BE -:1037D00000C3000000000000000000000000000026 -:1037E0000000FFFF3F30000000000000000000006C -:1037F000000000000F0F00C300C300000000000025 -:1038000000000000000000000000000000000F0F9A -:10381000AAAA3C0000000000000000000000000018 +:1037400000000000F0F0F0F00000000000000000B9 +:103750000000000000000000000000000000000069 +:103760000000000000000000000000000000000059 +:103770000000000000000000000000000000000049 +:1037800000000000F0503090000000000000000039 +:103790000000000000000000000000000000000029 +:1037A0000000000000000000000000000000FF30EA +:1037B0007530000000000000000000000000000064 +:1037C00000000000000000000000000000000000F9 +:1037D00000000000000000000000000000000000E9 +:1037E00000000000000000000000000000000000D9 +:1037F00000000000000000000000000000000000C9 +:1038000000000000000000A03030000000000000B8 +:1038100000000000000000000000000000000000A8 :103820000000000000000000000000000000000098 -:103830000000000000000000000000000000000088 -:1038400000000000000000000000000088004004AC -:103850004000200484008400008084802000200038 -:1038600020002000200000000000000020000400D4 -:103870008500200088002000000020002000200299 -:103880008400200084008400C00088000003200021 -:10389000200004004000200800000000000020007C -:1038A0002000400020000000000000000000200078 -:1038B0000000000040002000000001004000200047 -:1038C00020008800200000000003000000004000ED -:1038D000000100000001000000004004000440005E -:1038E0000000800000000000000000000000210037 -:1038F0008000040000000000000200000000000042 +:1038300030303030000000000000000000000000C8 +:103840000000000000000000000000002000000058 +:1038500000000000C0008800880020001010200038 +:1038600000002000000800080000020020090000FD +:1038700000000400200020100400040000002002CA +:103880008810200400100000880820000003200099 +:10389000000000002000200005002000208000081B +:1038A000200088002000C004C00088002000000024 +:1038B00000008400880000002000020002000000D8 +:1038C000C084C000100500000080880520040000AE +:1038D0000000000000000000400200001000000096 +:1038E00000000000000000000000000200020000D4 +:1038F00000000000000000000000000010001000A8 :1039000000000000000000000000000000000000B7 -:10391000000000000900000000000000000000009E -:103920000000000000000000000000000000000097 -:103930000000000000000000000000000200000085 -:103940000000000000000000000000000000000077 -:103950000080000000800000008000800080009057 -:103960000080008000800004008800800004004087 -:1039700008000000000001400400040000200410C2 -:1039800000000000000000000000000000000040F7 -:103990000000000000000000000000000000000027 -:1039A00000102000200000040004000000000000BF -:1039B00000400000000002000200000000000000C3 -:1039C00000100000000000000000000000000040A7 -:1039D0000040000400000004000000040004000493 -:1039E00000040904000400040001000400040009AC -:1039F0000008090000002000040080008000000191 -:103A00008000000000002000000000880084008882 -:103A1000008800000000000000000900000000080D -:103A2000000800088000800011010501000000006E -:103A300000000000000002000084000002080008EE -:103A4000000800080008000820820008008800889C -:103A500000010088000000000000000000000000DD -:103A60000000000008000800000000000000000046 -:103A700000000004008000000000000000000008BA -:103A8000000000080800080000000000000300001B +:10391000000000000000000000004000000000085F +:10392000090000000002000000010000000000008B +:103930000000000000000000400000000000004007 +:103940000000000800000000000241080000000024 +:1039500020000000840000000000000004000400BB +:103960000000000000000000000000002000000037 +:103970000000000000000000000000000000000047 +:103980000000000000000000000000000000000037 +:103990000000000000000000000000050000000022 +:1039A0000000000000000000000000000080008017 +:1039B0000080000000000000000000000000000087 +:1039C000000000000200000040100000080002009B +:1039D0000200840004000408000804000000000045 +:1039E0000210000000102000000005000402020088 +:1039F000000800000000000800080010000000009F +:103A00002000000000000000000000880008020004 +:103A1000030800000000000000080008000000008B +:103A20000000000000000000200000001100000461 +:103A300000040004000000000010008400000000EA +:103A40000000001000084100000080080000000095 +:103A50000000400000000000000000000400000022 +:103A6000000000000400000000000000000004004E +:103A70000000000000000000000000000000000046 +:103A80000000000000000000000000000000000036 :103A90000000000000000000000000000000000026 -:103AA00000050000000008000800000000000003FE -:103AB00000000000000800000005000400000003F2 -:103AC00000000000000308040880000800800021B6 -:103AD000002100210003210003000000000000007D -:103AE0000000000000004100000000001100000084 -:103AF00000000000000100040000030000000800B6 -:103B00000000410008000300000000000000080061 -:103B100000000000000000000000000003000000A2 -:103B200003A00000410008A00000030000A0000066 -:103B30000000030041000082210803820804000005 -:103B40002100000011002100000100040002000417 -:103B500000C000C000C000000800A000000001007C -:103B60000900080000000800200082000800200072 -:103B7000C0000000000000000400090020028200D4 -:103B8000080000000000A000000000008200820089 -:103B9000820000000000000000000000400008005B -:103BA0000000040004000400040004000404820077 -:103BB00000008200C000820082000000080082082D -:103BC000000000000000840000000000000082806F -:103BD000008000800080A000008000000000110034 -:103BE000200020000000000000A080000000000075 -:103BF0008000000000000000000080002000800025 -:103C00000000000011000000000000000300008818 +:103AA00000000000000000000000000000000041D5 +:103AB00010000000000000000000000000000000F6 +:103AC000000800000000000084000000004000002A +:103AD000000000000008000000900000000000004E +:103AE00000000000000000000000000000000000D6 +:103AF00000000000000000000000000000000000C6 +:103B000000000000000000000000000000000010A5 +:103B10000000000000000000008200000000000023 +:103B20000000000000000000000000000000000095 +:103B3000000005000000050041000000000000003A +:103B400000000000100041080000050040000800CF +:103B5000080000002100000001000000000000003B +:103B60000000000000000000000000000000000055 +:103B7000000000000000000000000000C000000085 +:103B80000000000008000000080000000000000025 +:103B90000000000000000000000082000000C000E3 +:103BA0000000000000001000000000000000000005 +:103BB00010000000000008000000000000000000ED +:103BC00008000000000008000800000008000000D5 +:103BD0008200C011000000098202200000000000E5 +:103BE00021000000000000000300000000000000B1 +:103BF00000000000000000000000000000000000C5 +:103C000000000000000000000000000000000000B4 :103C100000000000000000000000000000000000A4 -:103C2000000000008000808280008084800080008E -:103C30000000000000000000000000000000000084 -:103C40000000000000000000000000000000000074 -:103C5000000402040040004000840040000008000E -:103C6000A0008200C0002000C04000000000200032 -:103C700000000000820000000000820000850000BB -:103C8000000008000000000000000000000000002C -:103C90000000000000000000000000000000000024 -:103CA00000000800080500000000000000000008F7 -:103CB000000004000400000000000000000082007A -:103CC00000000041000820410000840000000021A5 -:103CD0000000A0410041020802038203002100000D -:103CE000410000000000000080000801000000000A -:103CF0008000000008000000000000000000000438 -:103D000000000000000000000000000000001000A3 -:103D100021840000080000000000050000000000F1 -:103D200000000000000800840000000040C0000205 -:103D3000000021008808880008080808080008001A -:103D400000A0000000000000400003040300030086 -:103D500000900390009008008000800000000000A8 -:103D6000000000098200000000000000A000200404 -:103D700000000000000000000000820008000000B9 -:103D800000000000000520000021080000080000DD -:103D90000000000000000000000000020000000021 -:103DA000000000000000000000009000080000007B -:103DB000000200000008000000088221000000004E -:103DC0000021820082000000080000000011840031 -:103DD000A000000300008200002100030008820808 -:103DE00000080000000000000000000000000300C8 -:103DF00000000000000000000000000000081100AA -:103E000000000084000000008000000000000000AE +:103C20000000210000000800000004000000000067 +:103C3000000000080000000000000000000000007C +:103C40000000000800000000040000000000000068 +:103C5000000000000000000008000001000000005B +:103C60000000000000000000000000000000000054 +:103C7000000000000000000000000800000000003C +:103C80000000000000000000000000000000000034 +:103C90000000000000000000000010000000000014 +:103CA00000000000000000000000000000081000FC +:103CB00000000000000000000400000000000800F8 +:103CC0000000000000000000000082000000000072 +:103CD000C000000000000000000000000011000013 +:103CE000002040000000000800000000000000006C +:103CF00000000000000000000000000000000000C4 +:103D000000000000000000000000000000000000B3 +:103D100000000000000000000000000000000000A3 +:103D20000000000000000000101000000000000073 +:103D30000000000000000000000000000000000083 +:103D4000210000000008000000000000000000004A +:103D500021C0110000000000080808200200000037 +:103D60000000000000000000000000000000000053 +:103D70000000000000000000000000000000000043 +:103D80000000000000000000000000000000000033 +:103D9000000000000000000000000000000004001F +:103DA0000000000000000000000000000000000013 +:103DB000000000000000000000008400000000007F +:103DC00000000008000000000005080000000000DE +:103DD00000210000000008000000000000001009A1 +:103DE00020000000000000000400000000000000AF +:103DF00000000000000000000000000200000000C1 +:103E000000000000000000040000000000000000AE :103E100000000000000000000000000000000000A2 :103E20000000000000000000000000000000000092 -:103E3000000000000000000003000000000000007F -:103E40000000000000000000000000000000000072 -:103E50000000000000000000000000000000000062 -:103E60000000000041C001010001000040C000004E -:103E70000000000141C0000000010000000000003F -:103E800000000000000400400100000000000000ED +:103E30000000000000000000000000000000000082 +:103E4000000000040000000000000000000000006E +:103E500000000000008200000000000000000000E0 +:103E60000000000000000000000000000000000052 +:103E70000000000000000000000000000000000042 +:103E80000000000000000000000000000000000032 :103E90000000000000000000000000000000000022 -:103EA0000000000000000000000000000000010809 -:103EB000000000A0000000008400009000820000CC -:103EC000000000000000000000000000000040A012 -:103ED00040200010A008918200400008040800C0A3 -:103EE0000000000000009180030340090009839155 -:103EF000212105030004918000030509000500004D -:103F00000000110000000004000002000003000097 +:103EA0000000000000000000000000000000000012 +:103EB0000000000000000000000000000000000002 +:103EC000000084010000000000000000000000006D +:103ED00000000000000000000000080000000000DA +:103EE0000000A00000000000000000000000000032 +:103EF00000000000000000000000000000000000C2 +:103F000000000000000000000000000000000000B1 :103F100000000000000000000000000000000000A1 :103F20000000000000000000000000000000000091 -:103F3000200000000000000000000000040000005D -:103F40000000000000000000000000000000000071 -:103F5000C000008000000080A00800004080808831 -:103F600000800000050000000900002105118909FA -:103F70000980210003118404090003210011830535 -:103F80000004000000090000000004100000100000 +:103F30000000000000000000000000000000000081 +:103F4000000820208005000900000000000000009B +:103F500000000000000000000000030080000000DE +:103F600000002000000000000040000000000000F1 +:103F70000000000000000000000000000000000041 +:103F80000000000000000000000000000000000031 :103F90000000000000000000000000000000000021 :103FA0000000000000000000000000000000000011 -:103FB00000000000000000000000000900000004F4 -:103FC00000000000000000000000000000000000F1 -:103FD00000008000009000C0008080008090880079 -:103FE0008880000041000989800001000000010173 -:103FF000C040010200000001C101010000000001F9 -:10400000C00000010000000000009000040100005A -:10401000010000000088000000880000000000008F +:103FB00000000000000000000020000000000000E1 +:103FC0000000200010000500082000000000000094 +:103FD00000000000000000000000000000000000E1 +:103FE00000000000000000000000000000000000D1 +:103FF00000000000000000000000000000000000C1 +:1040000000000000000000000000000000000000B0 +:1040100000000000000000000000000000000000A0 :104020000000000000000000000000000000000090 -:1040300000000000900000000000000000000000F0 -:1040400000008200000000000000000000000000EE -:1040500000000000080002C0A08288C0080020C143 -:10406000909002C0000000000091C000000000011C -:10407000010182C000000000000103C10000000136 -:10408000000003C000000200000000000004000067 -:10409000820400000000000010000000000000008A +:104030000000000000200000000000000000000060 +:10404000000000000020010001000120000000002D +:104050000000000000000000000000000000000060 +:104060000000000000000000000000000000000050 +:104070000000000000000000000000000000000040 +:104080000000000000000000000000000000000030 +:104090000000000000000000000000000000000020 :1040A0000000000000000000000000000000000010 -:1040B0000000000000000000000000A00090009040 -:1040C000020000000082000000000000000000006C -:1040D00000000000000091080010C00202829188D8 -:1040E0000010C082118200080000000090C1000092 -:1040F0000009050583890000000300039184000383 -:104100000009030391850000000000000200000484 -:10411000000300800000100000000000000000000C +:1040B0000000000000000000000000000000000000 +:1040C00000000000000000000000000000010000EF +:1040D00000000000000000000000000000000000E0 +:1040E00000000001000100010001000100010000CA +:1040F00000000000000000000000000000000000C0 +:1041000000000000000000000000000000000000AF +:10411000000000000000000000000000000000009F :10412000000000000000000000000000000000008F :10413000000000000000000000000000000000007F -:104140000000000000000900000000000000000066 -:10415000000000000000000041000080800000809E -:1041600041000080800890A0008000000009808944 -:1041700000000311400009038000030900800900CA -:10418000830000000380090500000000000000001B -:1041900004000541000000000002002100000000B2 +:10414000000000000000000000200208031000082A +:10415000000000000000000000000000000000005F +:104160000004002000080041002000100008004169 +:10417000000000000000000000000000000000003F +:10418000000000000000000000000000000000002F +:10419000000000000000000000000000000000001F :1041A000000000000000000000000000000000000F -:1041B00000000000000000000000000300210000DB -:1041C00000000005004000000000000000000000AA -:1041D00000000000000000000000000080088000D7 -:1041E000000020008009088000000000008000001E -:1041F00000000000010100880100C00000010084EF -:104200008900C000000000840100000000000000E0 -:10421000000004000000000000000000000000009A +:1041B0000000000000000000000041022100080093 +:1041C0004000000000000000000020092010410015 +:1041D00003100000000000000000000000000000CC +:1041E00000000000000000000000000000000000CF +:1041F00000000000000000000000000000000000BF +:1042000000000000000000000000000000000000AE +:10421000000000000000000000000000000000009E :10422000000000000000000000000000000000008E -:104230000000000000000000000000009000A0A0AE -:1042400000000000200000200000820000000000AC -:1042500000000000000000000000000088000402D0 -:104260000240100010008210021010000000000830 -:1042700000000000500000E000000000600000E0CE -:1042800000000000500000E00000000000000001FD -:1042900000000000500A00E00700000000000000DD -:1042A0000800000000000000000000000000000006 -:1042B00000000000000000000000000000000041BD -:1042C000000007000000008100420700000000001D -:1042D00000000000000000000000000000000000DE -:1042E000000000004842600000E00000484260001A -:1042F00000E000000000FFFFFFFF0000AAAA00008E -:104300003C3C0000AAAA0000FFFF0000AAAA00008F -:10431000000000000000FFFF000000C300C3000019 +:10423000000000000000000000000000010000007D +:10424000010000000000000000000000002000004D +:10425000000001000000000000000000000000005D +:10426000000000000000000000000000000000004E +:1042700000000000000000E000000000000000005E +:10428000000000000000000000000000000000002E +:10429000000000000000000000000000000000001E +:1042A000000000000000000000000000000000000E +:1042B00000000000000000000000000000000000FE +:1042C00000000000000000000000000000004100AD +:1042D00000E00000000000000000000000000000FE +:1042E00000000000000000000000000000000000CE +:1042F00000000000000000000000000000000000BE +:1043000000000000000000000000000000000000AD +:10431000000000000000000000000000000000009D :10432000000000000000000000000000000000008D :10433000000000000000000000000000000000007D -:104340000000FF000000FF000000C3C33C3C000071 +:10434000000000000000000000000000000000006D :10435000000000000000000000000000000000005D -:1043600002088020600000606000006000000960BA -:10437000AAAAAAAA00003C3C000000000000AAAAC9 -:1043800000003C3C0000AAAA000000000000AAAA0D -:1043900000000000000000000000000000C300C397 +:10436000000000000000000000000000000000004D +:10437000000000000000000000000000000000003D +:10438000000000000000000000000000000000002D +:10439000000000000000000000000000000000001D :1043A000000000000000000000000000000000000D :1043B00000000000000000000000000000000000FD -:1043C00000000000FF000000FF000000C3C33C3CF1 +:1043C00000000000000000000000000000000000ED :1043D00000000000000000000000000000000000DD -:1043E00000000104401009000009090000090960EB -:1043F0000000AAAAAAAA00003C3C55550000FFFFF5 -:10440000000055550000FFFF00005555000000005A -:10441000FFFF00000000000000000000FF0030303F -:10442000303000000000000000000000000000002C +:1043E00000000000000000000000000000000000CD +:1043F00000000000000000000000000000000000BD +:1044000000000000000000000000000000000000AC +:10441000000000000000000000000000000000009C +:10442000000000000000000000000000000000008C :10443000000000000000000000000000000000007C -:1044400000000000F0F000002828282803030303E0 -:1044500000005555000000000000000000000000B2 -:10446000000000000408102004100820040110407F -:104470004400880055550000555500005555000072 -:1044800000000000555500000000000055550000D8 -:10449000FFFFFFFF00000000000000000000FF0021 -:1044A000303030300000000000000000000000004C +:10444000000000000000000000000000000000006C +:10445000000000000000000000000000000000005C +:10446000000000000000000000000000000000004C +:10447000000000000000000000000000000000003C +:10448000000000000000000000000000000000002C +:10449000000000000000000000000000000000001C +:1044A000000000000000000000000000000000000C :1044B00000000000000000000000000000000000FC -:1044C000000000000000F0F0000028282828030366 -:1044D000030300005555000000000000000000002C -:1044E000000000000000010240800140028008023C -:1044F0002080004400885555000055550000406359 -:1045000080018021920240E380018021920240E3F9 -:1045100080018021820200610007000D000000611F -:1045200000298001000005000A08050000A0000025 +:1044C00000000000000000000000000000000000EC +:1044D00000000000000000000000000000000000DC +:1044E00000000000000000000000000000000000CC +:1044F000000000000000000000000000000000615B +:104500000006000D00000000000000000000000098 +:10451000000000000000000000000000000000009B +:10452000000000000000000000000000000000008B :10453000000000000000000000000000000000007B -:104540000000000000000000000000280000000043 -:104550000061002F000D00000000000000000000BE -:1045600000000000000000006000000000001000DB -:1045700000610001800108004063800780219202F1 -:10458000000C000CF000F0002800280000000000E3 -:1045900030300000F000300000000000000000009B -:1045A0000000FF00C0C0C0C000000000000000000C +:10454000000000000000000000610006000D0000F7 +:104550000000000000000000006100008001000079 +:10456000000000000000000000000000000000004B +:1045700000610006000D000000610006000D000053 +:10458000000000000000000000000000000000002B +:10459000000000000000000000000000000000001B +:1045A000000000000000000000000000000000000B :1045B00000000000000000000000000000000000FB -:1045C00000000000000000000000000000000000EB -:1045D00000000000000000000000000000000000DB -:1045E00000000000000000000000000000000000CB -:1045F0000000F0F000000000FF00000000000000DC -:1046000000FF003C003CF00000002828282800FFA4 -:1046100000F030303030F0003000000000000000CA -:1046200000000000FF00C0C0C0C00000000000008B +:1045C00000000000000000000000AE0C5D0C0000C8 +:1045D0000000000000000000000005FF0505F0F4E9 +:1045E000F8FC0000000000000000000000000000D7 +:1045F000000000000000A0BC0A3E0000000028F8F7 +:1046000082F2000000000000000000000000000036 +:10461000000000000000000000000000000000009A +:10462000000000000000000000000000000000008A :10463000000000000000000000000000000000007A -:10464000000000000000000000000000000000006A -:10465000000000000000000000000000000000005A -:10466000000000000000000000000000000000004A -:1046700000000000F0F000000000FF00000000005B -:10468000000000FF000000001414001400CF000020 -:104690000C0C000C0000000034340000000000008E -:1046A0000000000000003C3C00000F0F0000000074 +:104640000000000000000000000000000C0C0C0C3A +:1046500000000000000000000000000014FF14141F +:104660000014283C000000000000000000000000D2 +:104670000000000000000000003C003C00000000C2 +:1046800000F000F00000000000000000000000004A +:10469000000000000000000000000000000000001A +:1046A000000000000000000000000000000000000A :1046B00000000000000000000000000000000000FA :1046C00000000000000000000000000000000000EA -:1046D00000000000000000000000000000000000DA -:1046E00000000000000000000000000000000000CA -:1046F000000000000000C3C3000000FF0000000035 -:10470000000000F000F00F030F031414001400CF9A -:1047100000000C0C000C0F030F03343400000000E9 -:1047200000000000000000003C3C00000F0F0000F3 +:1046D00000000000000000000000000000005C5C22 +:1046E000FF5C0F2F3F2F00000000000000000000C3 +:1046F00000000000000000000000000000000000BA +:1047000000000000000000000000000000000000A9 +:104710000000000000000000000000000000000099 +:104720000000000000000000000000000000000089 :104730000000000000000000000000000000000079 :104740000000000000000000000000000000000069 :104750000000000000000000000000000000000059 -:104760000000000000000000000000000000000049 -:104770000000000000000000C3C3000000FF0000B4 -:104780000000000000F000F00000200020002000E9 -:104790000000000020004000000020000400040091 -:1047A0002000000000002000000020002000880001 -:1047B00000000000200020000400040004000400A9 -:1047C0000000840000000400000100000000000060 -:1047D0000000000000000000200020002000200059 -:1047E0002000C000000800000000000000000000E1 -:1047F00000000000000000040000000000000000B5 -:1048000000002010000000008400000040000000B4 -:104810000000000000004000800040000000000098 -:10482000000000000000004009000000000000003F -:1048300000000000050000000000800280008000F1 -:1048400080020000040000000000000000000000E2 -:104850000000000000000000400000000000000018 -:104860000000000000000000400000000000000008 -:104870000000000000000000000000000000000038 -:104880000000000000000000000200000000000026 -:104890000000000000000000000000000000000018 -:1048A00000000004040004040020002000000200B6 -:1048B0000010021000000000000000000041000095 -:1048C00000000000000000000000080000000000E0 -:1048D00000000000000000000000000000000000D8 -:1048E00000000000000000000000000000000000C8 -:1048F00000000000000000000000000004000000B4 -:10490000000000090000000000000000001000008E -:1049100000040000008800000000000040000008C3 -:104920000008000800098000800100010009000063 -:104930000000000000000200000000000000001065 -:10494000001000100010000000000000000800002F -:104950000000008800000088000000080000000837 -:10496000000000000000000000000000000000083F -:104970000000000000000000020800080008000815 -:10498000000002000000000000000010000000080D -:10499000000000000000000000000800000000000F -:1049A00000000000C0000000000020000000000027 -:1049B00000000000000000000000000000000000F7 -:1049C000A00000000000080000000000000000003F -:1049D00000000000000000000000000800000408C3 -:1049E00000000000000000000000020000000000C5 -:1049F0000000400000000000000000000000000077 -:104A00000800000000000000080000000000000096 -:104A10000000000000000000000000000000000096 -:104A20000000000000000000000000008000000006 -:104A30000000000000000000000000000000000076 -:104A40000000008400000884000000000000000056 -:104A50000000000000000000000000000000210035 -:104A600008000000000000000000004000000000FE -:104A7000000000000000000005000000000003002E -:104A8000000003C000C000C0000000C000C000C0A3 -:104A9000001000C0000000000000000000009000B6 -:104AA00000020800080000000800080000000000E4 -:104AB00000000000000000000000000000000000F6 -:104AC00000000000000008000000000008000000D6 -:104AD0000000080000000000820000000800000044 -:104AE00000000000000000000000000000000000C6 -:104AF00008040000080000000000000000000000A2 -:104B000000000000000000000000000000000000A5 -:104B10000000000000000000000000000000000095 +:104760000000FF0000283C280000000000000000BE +:104770000000000000000000000000000000000039 +:104780000000000000000000000000410000850063 +:1047900084000000100884001000000000002000C9 +:1047A0001080C000008040004002000000000400B3 +:1047B00020020004200410840000000000042000F7 +:1047C0000000000000008800000320001000C0006E +:1047D0002004200088002000840000208420002085 +:1047E00020200002C0008300880040081000200044 +:1047F000200020000000400020009000880084106D +:104800000000A000000020000400000000C0000222 +:104810000400000000000000000000000000000094 +:1048200000000002400040080000000000000002FC +:10483000200000000001400000040900000000000A +:1048400000000000000040000000000000004000E8 +:104850000000000400080000400000020001000108 +:1048600000010001100140001002040010002000AF +:1048700000020000000000000000000000004000F6 +:104880000000000010000090100000C00000840034 +:10489000000082000400000000000000020002008E +:1048A00002000400000000000000000500000000FD +:1048B0000000000000080000008000000000000070 +:1048C00000000000000000000000000000000000E8 +:1048D0000000000000004000000000000000000098 +:1048E00000000010000000000000000004000000B4 +:1048F000000000000000010000040904080808404E +:104900000204000402040200020000104000000043 +:104910000400050004000208020000000000040278 +:104920000000000805000008410800000000000029 +:1049300000820000000000090002000400100000D6 +:10494000000004040000000800080000000000004F +:1049500000000000000000008008000000000008C7 +:10496000000000080000050000840008000020008E +:104970000000000000000008100400011000008585 +:104980000000000900010001008400840000008490 +:104990000400080090000220040000000000000055 +:1049A0000000000000000000000000000000000007 +:1049B000900000000000000020000000000000083F +:1049C00000000000000000000000200000000000C7 +:1049D00000000000000000000008000000000000CF +:1049E00000000000000000000000000000000000C7 +:1049F0000000400300200000002100080008000023 +:104A000000214000C00000009008C00840000000E5 +:104A100000100900808400008001000000000000F8 +:104A20000000000000000000000000000000000086 +:104A300000000000000000000000800000000000F6 +:104A40000000000000000000000000000000000066 +:104A50000000000041000000000003000000000012 +:104A600000000000050005000500400000000000F7 +:104A7000000000000000000800080002000008001C +:104A80000800000000000800000000000900040009 +:104A900009000000000000000040000400000000C9 +:104AA00000000000080000000000000000000000FE +:104AB0000000000082000000000000001000000064 +:104AC00000000808080000000000C00008000800FE +:104AD00000000800000000000000000000000000CE +:104AE00000000000080000000000000000000000BE +:104AF0000000000082000840840001000040000027 +:104B00000000000400008280000000000804000093 +:104B1000C00510001010008200000000000000001E :104B20000000000000000000000000000000000085 -:104B30000000000000000000000000000000002055 -:104B40000000000000000000000000000000000065 +:104B300000000000000000000000000000008000F5 +:104B40000000000000000000000000000000030062 :104B50000000000000000000000000000000000055 -:104B60000000000000000000000011000000000034 -:104B70000000000020000000000000000000000015 -:104B80000000000000000000000000000000000025 -:104B90000000008400000000080000000000000089 -:104BA000000000000000C000000000000000A08025 -:104BB00000000000000000000000000800000008E5 -:104BC0000000000084000000000000000000000061 -:104BD00000000000000000000000000000000000D5 -:104BE00000000000000000000000000000000000C5 -:104BF00000000000000000000000000000000000B5 -:104C000000000000000000000000000000000000A4 -:104C10000000000000000000000000000000000094 -:104C2000008400840000000000000000000000007C -:104C3000000400000000000000000300000003006A -:104C400008000000000800C000080000000000008C +:104B6000000000000800000000000000000000003D +:104B70000900000000841000001100000200000184 +:104B800000A00000000100004104009000000000AF +:104B900010000000000005000000000000000020E0 +:104BA00000000000000000080000000000000000FD +:104BB00000000000000000000000000000000000F5 +:104BC00010000000000000000000000000000021B4 +:104BD00000000800000000000000100000000000BD +:104BE00000000000000004000000000000000000C1 +:104BF000000000000000000000080010002000007D +:104C00000000100010008800200800400200C04092 +:104C10000040000320008808080000000400000095 +:104C20002001000000000000000000000000000063 +:104C30000000000000000000000000000000000074 +:104C40000000000000000000000000000000000064 :104C50000000000000000000000000000000000054 -:104C6000000000000300000021000300000003001A -:104C70000000030000000000000000000000000031 -:104C8000000000000000008800C0088808000888B4 -:104C90000800080000000000000000000000000004 -:104CA0000000C00000000000000010020002000030 -:104CB000C000000000000000000000000000001123 -:104CC00000000000040000000000000000000000E0 -:104CD0000000000000210000002100000000000092 -:104CE00008000800000000000000000000000000B4 -:104CF00000000000000000000000000000000000B4 -:104D000000000000000000000000000000000000A3 -:104D10000000000000000000000000000000000093 +:104C6000000000000000000000000008000000003C +:104C70000000000005080000008200C000000000E5 +:104C80000000000080008000000080000001002083 +:104C9000000100914000000000000010000000082A +:104CA00000000000000000080000000000000000FC +:104CB00000000000000000000000000000000000F4 +:104CC00000000000000000000000000000000008DC +:104CD0000000000000000000000000000000820052 +:104CE00000000000000000000000000000000000C4 +:104CF0000000000000000000002100000000000093 +:104D000002000010000001040080200000000000EC +:104D1000004000000010000008000000000000003B :104D20000000000000000000000000000000000083 :104D30000000000000000000000000000000000073 :104D40000000000000000000000000000000000063 :104D50000000000000000000000000000000000053 :104D60000000000000000000000000000000000043 :104D70000000000000000000000000000000000033 -:104D8000000005000000000000000000000000001E -:104D90000000000000000000000000000000000013 -:104DA0000000000000000000000000000100000002 -:104DB00000000000000000000000A0000000000053 -:104DC00000000000000000000000000000000000E3 -:104DD000008400200000000000000000000000002F -:104DE00000000000000000000000000000000000C3 -:104DF00000000000000000000000000000000000B3 -:104E000000000000000000000000000000000000A2 -:104E10000000000000000000000000000000000092 -:104E20000000000000000000000000000000020080 -:104E3000000000000000030000000000000005006A -:104E40000000000000000000000000000000000062 -:104E50000000000000000000000000000000000052 -:104E60000000000000000000000000000000000042 -:104E70000000000000000000000000000000000032 -:104E80000000000000000000000000000000000022 -:104E90000000000000000000000000000000000012 -:104EA0000000000000000000000000000000000002 -:104EB0000000000000000000000000000000008072 -:104EC00000000000000000000000000000000000E2 -:104ED00000000000000000100000000000000000C2 +:104D8000000080100000000020A105408000038486 +:104D900005000001200000000000000000002000CD +:104DA00000C0008800200088000000000000000013 +:104DB00000000000000000000001C001000100012F +:104DC0000000000000000000000100009001000051 +:104DD00000000000000000000000000000000000D3 +:104DE00000000000000000000000000000010000C2 +:104DF0000000209000200040100800010001000089 +:104E0000000000C000880000000000C190011001F7 +:104E1000880100C000000000000200000000000047 +:104E20000000008000000000000000000000000002 +:104E30000000000000000000000000410008000326 +:104E40000008000000000000000000101011001019 +:104E50000020000000000000000000000000000032 +:104E600000000000000000000000000040050008F5 +:104E700000410040200000000080000000410008C8 +:104E800000100002008000000000000000C10910B6 +:104E9000A0098008008000000000008000000000E1 +:104EA0000000000000008000000080000000000002 +:104EB00000000000000000000000000000000000F2 +:104EC0000000000000000000000000004080200002 +:104ED0001020410800000000000000000000000059 :104EE00000000000000000000000000000000000C2 -:104EF00000000000000000000000000000000000B2 -:104F000000000000000000000000000000000000A1 -:104F10000000000000000000000000000000000091 -:104F20000000000000000000000000000000000081 +:104EF0000000000000000000002080820000000090 +:104F00000000000000008000000000008000088019 +:104F100002000300C10380040000000280000000C2 +:104F200000000000000090001000900090000000C1 :104F30000000000000000000000000000000000071 -:104F40000010000000C00000000000000000000091 -:104F500000000000000084000001000000000000CC +:104F40000000000000000000000000000000014020 +:104F5000000001000101000000000000000000004E :104F60000000000000000000000000000000000041 -:104F70000000000000000000000000000000000031 -:104F80000000000000000000000000000000000021 -:104F90000000000000000000000000000000000011 -:104FA0000000000000000000000000000000000001 -:104FB00000000000000000010000000000000000F0 -:104FC00001000200100000000000000000000000CE -:104FD00000000000000000000084000000000090BD +:104F7000000000000000000004008800404008001D +:104F80000000000000000000080000000000C00059 +:104F9000018800000100C101020100000000C00002 +:104FA0000000000000000000880000000000000079 +:104FB00000000000000000000000000000000000F1 +:104FC00000000000010000000000000000000000E0 +:104FD00000000000000000000000000000000000D1 :104FE00000000000000000000000000000000000C1 -:104FF00000000000000000000000000000000000B1 -:1050000000000000000000000000000000000000A0 -:105010000000000000000000000000000000000090 -:105020000000000000000000000000000000000080 -:1050300000000020000000410511000000000000F9 -:10504000050041008000800000000000000000001A -:105050000000000000000000000000000000000050 +:104FF0000000000000000000000002020020000885 +:105000001002000000000000000000080000000086 +:1050100000C000000001900083C1000010020000E9 +:1050200000C00000000000000000000000000000C0 +:105030000000000000000000000000000000000070 +:105040000000000020000500020000000000000039 +:105050000000002009214120001000000000000095 :105060000000000000000000000000000000000040 -:105070000000000000000000000000000000000030 -:105080000000000000000000000000000000000020 -:105090000000000000000000000000000000000010 -:1050A0000000000000000000000000000000000000 -:1050B00000000000000400000000000000000000EC -:1050C0000000000000400009000000000000000097 -:1050D00000000000000000000000000000000002CE +:10507000000000000000200003000000008000008D +:105080000000000000001100090000000000000006 +:105090000000008000100510414189C1000080809F +:1050A000000011800000000000000000000500006A +:1050B00000000000000000000000000000000000F0 +:1050C00000000000000000000000000000000000E0 +:1050D000000000000909100008000840000000005E :1050E00000000000000000000000000000000000C0 -:1050F00000000000000000000000000000000000B0 -:10510000000000000000000000000000000000009F -:10511000000000000000000000000000000000008F -:10512000000000000000000000000000000000007F -:10513000000000000000000100000000000000006E +:1050F0000000000000000000000000000000802010 +:10510000800000800000000000000000000000009F +:10511000000000000000C1822111850008118000FC +:1051200000008000000000000000000000000000FF +:1051300000A000840000000000000000000000004B :10514000000000000000000000000000000000005F -:1051500000000000000000000000000000008400CB -:10516000000100200000000000000000000000001E +:1051500000000000000001910100000001000000BB +:10516000000000000000000000000000000000003F :10517000000000000000000000000000000000002F -:10518000000000000000000000000000000000001F -:10519000000000000000000000000000000000000F -:1051A00000000000000000000000000000000000FF -:1051B0000000000000000000500000E000000000BF -:1051C000000000E000000000810002E01200410049 -:1051D00000000000000000000000000000000000CF -:1051E00000060000070000000000000000000000B2 +:1051800010000888084088000000000000000000AF +:105190008800000000000000C110000189880100A3 +:1051A000C00000000400000000000000000000003B +:1051B0000081000007000000000000000000000067 +:1051C00000000000000000000000000000000000DF +:1051D0000000000000000000410000E000000000AE +:1051E00000000000000000000000000000000000BF :1051F00000000000000000000000000000000000AF -:10520000000000000000000000000000000000009E -:10521000000000000000000000000000000000008E -:10522000000000000000000000000000000000007E +:105200000000001100000700000000000000000086 +:1052100000000000000000000000840000E000002A +:105220000000600000E0000000000000000000003E :10523000000000000000000000000000000000006E :10524000000000000000000000000000000000005E :10525000000000000000000000000000000000004E -:1052600000000000FFFFC3C30000000000000000BA +:10526000000000000000000000000000000000003E :10527000000000000000000000000000000000002E -:10528000000000000000000000000000000000001E -:10529000000000000000000000000000000000000E -:1052A00000000000000000000000000000000000FE +:10528000000000003C7E3C3E767630760000000058 +:1052900000000000FFFF00003C3C0000F0F00000B8 +:1052A000FFFF0000F0F00000F0F000000000000040 :1052B00000000000000000000000000000000000EE :1052C00000000000000000000000000000000000DE :1052D00000000000000000000000000000000000CE -:1052E0000000000000000000C3C300000000000038 +:1052E00000000000000000000000000000000000BE :1052F00000000000000000000000000000000000AE -:10530000000000000000000000000000000000009D -:10531000000000000000000000000000000000008D -:10532000000000000000000000000000000000007D +:10530000000000000000006600067630303000002B +:10531000000000000000FFFF00003C3C0000F0F037 +:10532000000000000000F0F00000F0F000000000BD :10533000000000000000000000000000000000006D :10534000000000000000000000000000000000005D :10535000000000000000000000000000000000004D @@ -99666,495 +99666,495 @@ :10538000000000000000000000000000000000001D :10539000000000000000000000000000000000000D :1053A00000000000000000000000000000000000FD -:1053B00000000000000000000000000000000000ED +:1053B00000000000000000000FFF0CFC00000000D7 :1053C00000000000000000000000000000000000DD :1053D00000000000000000000000000000000000CD -:1053E000000000000000000000FF0000C3C3C3C3B2 +:1053E00000000000000000000000000000000000BD :1053F00000000000000000000000000000000000AD -:10540000000000000000000000000000000000009C -:10541000000000000000000000000000000000008C -:10542000000000000000000000000000000000007C -:10543000000000000000000000000000000000006C -:10544000000000000000000000000000000000005C +:10540000000000000000000000000E0E0EFF66F617 +:1054100066760000000000000000000000FF0000B1 +:105420003C3C000066660000FFFF00003C3CFFFFC4 +:10543000C3C3000000000000000000F00CFC42DBD1 +:10544000F9F900000000000000000000000000006A :10545000000000000000000000000000000000004C -:105460000000000000000000000000FF000000003D +:10546000000000000000000000000000000000003C :10547000000000000000000000000000000000002C -:10548000000000000000000000000000000000001C -:10549000000000000000000000000000000000000C -:1054A00000000000000000000000000000000000FC -:1054B00000000000000000000000000000000000EC -:1054C0000000000000610007800D2000006100075F -:1054D000000D000005610A0F850D00A0000000000E -:1054E0000000000000000000000000000000002894 +:10548000000000000000000000000000020202FF17 +:1054900000F000300000000000000000000000FFED +:1054A00000003C3C000066660000000000003C3C40 +:1054B000FFFFC3C3000000000000000000005020F8 +:1054C00000000000000000000000000000000000DC +:1054D0000000000000610006000D00000000000058 +:1054E00000000000006100008001000000000000DA :1054F00000000000000000000000000000000000AC -:10550000000000000000000000000000000000009B -:10551000000000000000000000000000000000008B -:10552000000000000000000000000000000000007B -:10553000000000000000000000000000000000006B -:10554000000000000000000000003C003CFF0000E4 +:1055000000000000000000610006000D0000000027 +:1055100000200000000000610006000D00004002B5 +:10552000800000209202408280018020920240E3AD +:105530008006802D820200000000000000000000B4 +:10554000000000000000000000000000000000005B :10555000000000000000000000000000000000004B -:10556000000000000000000000000000000000003B +:105560000000000000004F410F00F828282800002C :10557000000000000000000000000000000000002B :10558000000000000000000000000000000000001B :10559000000000000000000000000000000000000B -:1055A00000000000000000000000000000000000FB +:1055A000000000000000000003034141C3C08280EE :1055B00000000000000000000000000000000000EB -:1055C0000000000000000000000000003C003CFF64 +:1055C00000000000000000000000000000000000DB :1055D00000000000000000000000000000000000CB -:1055E00000000000000000000000000000000000BB +:1055E0000000000000000000EFEB0F00F8F828F8C2 :1055F00000000000000000000000000000000000AB :10560000000000000000000000000000000000009A :10561000000000000000000000000000000000008A -:10562000000000000000000000000000000000007A -:10563000000000000000000000000000000000006A +:105620000000000000000000000000030041000036 +:105630008280000000000000000000000000000068 :10564000000000000000000000000000000000005A -:10565000000000000000000000000000000000004A -:10566000000000000000000000000000000000003A -:10567000000000000000000000000000000000002A -:10568000000000000000000000000000000000001A -:10569000000000000000000000000000000000000A -:1056A00000000000000000000000000000000000FA -:1056B00000000000000000000000000000000000EA +:1056500000000000000000000000FF08FF04000040 +:1056600000000000000000000000ABAB03FF4100A1 +:10567000C3F0000000000000000000000000000077 +:105680000000000000000000000000001EFF1EAA35 +:105690000000000000000000000000007D553D05F6 +:1056A00000000000000000000000000041000300B6 +:1056B00003C30282000000000000000000000000A0 :1056C00000000000000000000000000000000000DA -:1056D00000000000000000000000000000000000CA -:1056E00000000000000000000000000000000000BA -:1056F00000000000000000000000000000000000AA -:105700000000000000000000000000000000000099 -:105710000000000000000000000000000000000089 -:105720000000000000000000000000000000000079 -:105730000000000000000000000000000000000069 -:1057400000000000000000002000000020002000F9 -:105750000000000004000000200020000000000005 -:1057600000000000200005002000000020002000B4 -:105770000000000000000400000004000000000021 -:1057800000000000200000030000000000002000D6 -:105790000000000000000000880000002000000061 -:1057A00000000000000000000000000000000000F9 -:1057B0000000000000000000000088000000000061 -:1057C0000000000000000000400000000000000099 -:1057D00000000000000000000000000000000000C9 -:1057E0000000000000000000200000000002000097 -:1057F00000000000000000000000000000000400A5 -:105800000000000000000000000000000000040094 -:105810000000000000000000000000000002000086 -:105820000400000000000000200000000000000054 -:105830000000000000400000000000000000000028 -:105840000000000000000000000000000000000058 -:105850000010000000000000001000000000000028 -:105860000000000000000010001000000000820096 -:105870000000000000000000001000000000020016 -:105880000000000000000000001000000000000008 -:1058900000100010000000000000001000000000D8 -:1058A0000000000000008400000000102000200024 -:1058B000000404040000000000000010202020204C -:1058C00004040404000000000000001000000000B8 -:1058D00000000000001000000010000000000000A8 -:1058E000000000100000000009000000000000009F -:1058F00000000000000000000000000000000000A8 -:105900000000000000000000000000000000000097 -:10591000000000080000000000000000000000007F -:1059200000000000000000000200000000008000F5 -:10593000800000090001000000000000000080015C -:1059400084018001820104000000000000000000CA -:105950000000000000000000000000000000000047 -:1059600000000000000000000000000000004000F7 -:10597000000000000009000000000000000000001E -:105980000000000000000000000000000000000017 -:105990000000000000000000C000000084000000C3 -:1059A00000000000000000000000010000000000F6 -:1059B00000000000000008000800900084000000C3 -:1059C000080000030800820800000000000000003A -:1059D00003000000000000000000000000000000C4 -:1059E00000000000000000000000000000000000B7 -:1059F00080000000210000000000030000000800FB -:105A00000000000000000000000000000000000096 -:105A10000000000000000000000000000000000086 -:105A2000000008000000000000000000020011005B -:105A30000000000000000000800080000000000066 -:105A40000000000000000000000000000000000056 -:105A50000000000000000000000000000000040042 -:105A60000000000000000000080000000800000026 -:105A70000000A00000000000000000000000000086 -:105A8000000000000800000000000000000000000E -:105A900000000000080000000000000000000000FE -:105AA00000000000A0002000000000000000000036 -:105AB000000000408200820004000400000000009A -:105AC00000000000000000000000000000000000D6 -:105AD00000000000000000000000000000000000C6 -:105AE0000000000000000000000000A00000000016 -:105AF00000000000000000000000000000000000A6 +:1056D00000000000000000000000000008080404B2 +:1056E00000000000000000000000000003030303AE +:1056F000410000F000000000000000000000000079 +:1057000000000000000000000000000000001E5526 +:105710001E000000000000000000000000003C002F +:105720003D050000000000000000000000004141B5 +:1057300003030000028200000000000000000000DF +:1057400000000000000000000000880400000000CD +:105750000000040000000000000088008800000035 +:10576000000000000000000000002000C000000059 +:1057700000002000880000000000200088000000D9 +:1057800000000200040000020000000000002004ED +:10579000000000002000200008000000C0002000E1 +:1057A0000000000020002000840040000400880069 +:1057B00000000000200002001000100088002000FF +:1057C000840004002100200000000000000000020E +:1057D000000000080002000400200000000000009B +:1057E0000002004000000000000000000000000077 +:1057F000000000020002400400020000000400005B +:105800004000000040000000000005000000000013 +:105810004001000040000000000000000000000007 +:1058200000004000000040000000404080400000B8 +:105830000040004000004000200280008020000066 +:1058400000024082804004000000000000000400CC +:105850000000000004000000000000000000000044 +:105860000000000000000000000000000000040034 +:105870000000000000000000000000000000000028 +:105880000000000000000000000000000000000018 +:105890000000000000000000000000000000000008 +:1058A00000090000000000000000000000000000EF +:1058B000000008000400000500004000A0000000F7 +:1058C00000000000000000000010090000080000B7 +:1058D000020804080008000400080000040004088E +:1058E00004000008040000000000000000040000A4 +:1058F0000004000400080404040441000000000245 +:10590000000000080010000000000000000000007F +:1059100000000000000000840904040000000008EA +:105920000000000000080004000000080000000063 +:1059300000000000000000000000000080000008DF +:105940000008000000080084000000088400000037 +:10595000000004000000000000080000000000003B +:105960000000000000000000000000000000000037 +:105970000000000000000000000000000000000027 +:10598000000000000000000800000000000000000F +:105990000000000000000000000000000000000007 +:1059A000000000000000000040080000400000006F +:1059B00000000100000000000000000500000008D9 +:1059C00000210002040800800004002000110008EB +:1059D0000000000000000000000000000040000087 +:1059E00000000800000000000000000000000000AF +:1059F0000400410041000300000000080000000016 +:105A000000080000000000820000000041000000CB +:105A10000000000404000000000021000300040056 +:105A2000000004004100000000000000410000846C +:105A300000A000001082090000002100000000000A +:105A400000A000A00000000011042100200121009E +:105A5000050000200000C000A000000000000000C1 +:105A6000000000000000000010000800100000000E +:105A70000200000000000000A000002082000040A2 +:105A80000000000000000000000000008200000094 +:105A90000000000000000000000000000000000006 +:105AA00000000000000000000000A0002141840070 +:105AB000208084058500A0004000000000008200D6 +:105AC0000000A000830000002040000004048200C9 +:105AD00002040000000000000000000000000000C0 +:105AE00000000000000000000000000000000000B6 +:105AF0000000100000000000000000000000000096 :105B00000000000000000000000000000000000095 -:105B10000000000000000000030000000000000082 -:105B20000000000000000000000000000000000075 -:105B30000000000000000000000000000000000065 -:105B40000000000000000000001000000000000045 -:105B50000000000000000000000000000000000045 +:105B10000000000000000000000000002100210043 +:105B20000000000000000000000000000000A000D5 +:105B300000A08004020002A000828000000041C09A +:105B4000219003A0110020A00000800000008084AC +:105B50000000000020000000000000000000000025 :105B60000000000000000000000000000000000035 -:105B7000000082000000000000000008000000009B -:105B80000000000000000000080000000000C0004D -:105B900000000000000000000000080000000000FD -:105BA00000000000000000000000000000000000F5 -:105BB0000000840000000400000000000000080055 -:105BC0000080000000000000000000000000000055 -:105BD00000080000000000000000000000000000BD +:105B7000000008001000000000000000000000000D +:105B8000000000000000000000000000080000000D +:105B900000000008000000000000000000000000FD +:105BA00000000000A000000000000000080000004D +:105BB0002000200088000000840084000000000015 +:105BC0000208000200000082820400008800000534 +:105BD00090058200002010000090080400040300DB :105BE00000000000000000000000000000000000B5 -:105BF0000000000000000082000000000000000023 -:105C00000000000000000000030000000800000089 +:105BF000000800000040000000000000000000005D +:105C000003A00300009005880000000000000000D1 :105C10000000000000000000000000000000000084 -:105C20000000000000000000000000000000000074 -:105C300000000000000000008000000000000000E4 -:105C4000000000100000001000000000000000082C -:105C50000000000000000000000000000000000044 +:105C20000000000000000088000000040008008858 +:105C30000500800080000004000000A000840088AF +:105C40000000838403000000000800010000000041 +:105C500000020040030000014000000000000000BE :105C60000000000000000000000000000000000034 -:105C7000000008000000820000000000000000009A +:105C70000000000000000000040000000000000020 :105C80000000000000000000000000000000000014 -:105C90000000000000000000000000000000000004 -:105CA00000000000080000000000000000000000EC -:105CB000000000000000400000000000C000A00044 -:105CC00000000020000000000000000000000000B4 -:105CD0000000000000210021002100210000000040 -:105CE00000000302000008000000000000000000A7 -:105CF00000000000000000000000000000C00000E4 +:105C90000000000082000000020000004000000040 +:105CA00008000000000000000000040000000000E8 +:105CB000000000000000200001000100404102211E +:105CC00000210808002102040200020008219004BB +:105CD0000808100801050000000000200000000076 +:105CE000000010000000000000000500000000009F +:105CF00000000000000000000000000000000000A4 :105D00000000000000000000000000000000000093 :105D10000000000000000000000000000000000083 -:105D20000000000041000000000000000000000032 -:105D30000000000000000000000000000000410022 -:105D40000000000000000000000000000000000053 -:105D50000000000000000000000000000000000043 +:105D20000000000000000000000000000000000073 +:105D30000000400000000000800020002000C18220 +:105D4000800000004100000080018000800003A06E +:105D500003890001910104002100110000010000ED :105D60000000000000000000000000000000000033 :105D70000000000000000000000000000000000023 -:105D80000001010000010000000000000000000010 +:105D80000000000000000000000000000000000013 :105D90000000000000000000000000000000000003 -:105DA00000000000000000000000000000000000F3 +:105DA00001000000400000000000000000000000B2 :105DB00000000000000000000000000000000000E3 -:105DC0000000400001000000000000000000000092 -:105DD0000000400000000000000000000000000083 +:105DC00000C102888800000100C00008010108002D +:105DD00001C1400011000001100000000004880211 :105DE00000000000000000000000000000000000B3 :105DF00000000000000000000000000000000000A3 -:105E00000020000304000008000000000000000063 +:105E00000000000000000000000000000000000092 :105E10000000000000000000000000000000000082 -:105E20000000000000000000000000000000000072 +:105E200000001000100080000000000000000000D2 :105E30000000000000000000000000000000000062 -:105E40000000000000000200000000000000000050 -:105E50000000000000004000000000000000000002 -:105E60000000000000000000000000000000000032 +:105E4000000002888582A141000302832191100590 +:105E5000800309C121050511000380000000000036 +:105E600000800000000000000000000000000000B2 :105E70000000000000000000000000000000000022 :105E80000000000000000000000000000000000012 :105E90000000000000000000000000000000000002 :105EA00000000000000000000000000000000000F2 -:105EB00000000000000000000000000000000000E2 -:105EC00000008000800800000004000000000000C6 -:105ED00000000000000900800002008000000000B7 -:105EE00000000000000000000000000000000000B2 +:105EB00000000000000000000000000000090000D9 +:105EC00000080000208020001000C00203054000F0 +:105ED000200089404180C0001089C10300000000FB +:105EE0008000000000000000000000000000000032 :105EF00000000000000000000000000000000000A2 -:105F00000000000000000000000000400000000051 +:105F00000000000000000000000000000000000091 :105F10000000000000000000000000000000000081 :105F20000000000000000000000000000000000071 -:105F300000000000000000000000000000009000D1 -:105F40002000000008000201000000010000000025 -:105F50000000000000000000000800000008000031 -:105F60000000000000000000000000000000000031 +:105F30000000000000000000000000000000000061 +:105F4000000000010000000800000000C101004046 +:105F500001000100C141000888000091C1A10800B2 +:105F60000810A00040200000000000000000000019 :105F70000000000000000000000000000000000021 :105F80000000000000000000000000000000000011 :105F90000000000000000000000000000000000001 -:105FA00000000000000000000000000000000000F1 +:105FA00000000000000000000001000000010000EF :105FB00000000000000000000000000000000000E1 -:105FC00000000000000000000100020000000000CE -:105FD00000000000C00000000000040008000000F5 -:105FE00000000000000000000000000000000000B1 +:105FC000000008000000000000100000000101C1F6 +:105FD00000010000A10100C088000000008501C18F +:105FE000000200200402040800000000000000007D :105FF00000000000000000000000000000000000A1 -:10600000000000000000000000000000410000004F +:106000000000000000000000000000000000000090 :106010000000000000000000000000000000000080 -:106020000000000000000000000000000000000070 -:106030000000000000000000000000000000000060 -:106040000000000000000000000020000000000030 -:10605000020000000000800000000200000080003C -:10606000020000000000000000000000000000002E +:106020000000000000000000000000020005000861 +:106030000010000000000000000000000000000050 +:1060400000000000800000000900000205020005B9 +:1060500009C1002104418508108080021040058399 +:1060600011C10580000080808080000000000000D9 :106070000000000000000000000000000000000020 -:10608000000000000000000000000004000000000C +:106080000000000000000000000000000000000010 :106090000000000000000000000000000000000000 -:1060A00000000000000000000000000000000000F0 +:1060A00000000000000000000000000000080000E8 :1060B00000000000000000000000000000000000E0 -:1060C0000000000000000002000000000011008538 -:1060D00000800000800000058000000000000040FB -:1060E00000000000000000000000000000000000B0 +:1060C00000000000002000000000000020900900F7 +:1060D00020809120C1C0C00002800840C11010097A +:1060E00003000509004000C100000000000000009E :1060F00000000000000000000000000000000000A0 :10610000000000000000000000000000000000008F :10611000000000000000000000000000000000007F :10612000000000000000000000000000000000006F :10613000000000000000000000000000000000005F -:10614000000000000000000000010020000000012D -:106150000002004000000400000090004000000029 -:10616000000000000000000000000000000000002F +:10614000000000000000000000000000000000C18E +:10615000000000109101C1C0110001080100C1033D +:10616000000100000001000000A100880000000004 :10617000000000000000000000000000000000001F -:1061800000000000000000000000000000006000AF -:1061900000E000000000000000000000000000001F +:10618000000000000000000000000000000000000F +:1061900000000000000000000000000000000000FF :1061A00000000000000000000000000000000000EF -:1061B00000000000000000000000000000000000DF -:1061C0000000000000000000008200000700000046 -:1061D0000000004207000000000000000700000669 -:1061E000000000421200000000000000000000005B +:1061B000810000E00000000000000000000000007E +:1061C0000000000000000000810000E0000000006E +:1061D000810000E000004100810000E0000042007A +:1061E000810000E000000000008100000700420084 :1061F000000000000000000000000000000000009F :10620000000000000000000000000000000000008E :10621000000000000000000000000000000000007E :10622000000000000000000000000000000000006E :10623000000000000000000000000000000000005E :10624000000000000000000000000000000000004E -:1062500000000000000000000000F0F03C3C0000E6 -:10626000000000000000000000000000000000002E -:10627000000000000000000000000000000000001E +:1062500000003C3C3C3C00003C3C000000FF0000D7 +:10626000FFFF0000AAAA000000FF00000000003CA1 +:10627000FF3C0000000000000000000000000000E3 :10628000000000000000000000000000000000000E :1062900000000000000000000000000000000000FE :1062A00000000000000000000000000000000000EE :1062B00000000000000000000000000000000000DE :1062C00000000000000000000000000000000000CE -:1062D000000000000000000000000000F0F03C3C66 -:1062E00000000000000000000000000000000000AE -:1062F000000000000000000000000000000000009E +:1062D000000000003C3C3C3C00003C3C000000FF57 +:1062E000000000000000AAAA000000FF000000005B +:1062F000AAF0AAF00000000000000000000000006A :10630000000000000000000000000000000000008D :10631000000000000000000000000000000000007D :10632000000000000000000000000000000000006D :10633000000000000000000000000000000000005D :10634000000000000000000000000000000000004D -:106350000000FFFFFCFC00000000D7D7D7D70000EB -:10636000000000000000000000000000000000002D -:10637000000000000000000000000000000000001D +:10635000000000000000FF000000FFFF0000FF0041 +:106360000000FFFF0000FFFF0000F0F0FFFF171725 +:106370001717F101FD0D00000000000000000000F3 :10638000000000000000000000000000000000000D :1063900000000000000000000000000000000000FD :1063A00000000000000000000000000000000000ED :1063B00000000000000000000000000000000000DD :1063C00000000000000000000000000000000000CD -:1063D00000000000FFFF0C0C000000001414141457 -:1063E00000000000000000000000000000000000AD -:1063F000000000000000000000000000000000009D +:1063D0000000000000000000FF00000000000000BE +:1063E000FF0000000000000000000000F0F0FFFFD0 +:1063F0001717171700000000000000000000000041 :10640000000000000000000000000000000000008C -:10641000000000000000000000650003800D000087 +:10641000000000000000000000000000000000007C :10642000000000000000000000000000000000006C -:10643000000000000000000000000000000000005C +:10643000000000000000000000000061000680096C :10644000000000000000000000000000000000004C -:10645000000000000028000001010561000F000D90 -:106460000000000000080500000005610A0F050D8E -:1064700000A000000000000000000000000000007C +:10645000000000610006800D000040638007802876 +:10646000920240C38005802D9202408280018020EC +:10647000820205000A28050000A0000000000000BC :10648000000000000000000000000000000000000C :1064900000000000000000000000000000000000FC :1064A00000000000000000000000000000000000EC :1064B00000000000000000000000000000000000DC -:1064C00000000000000000000000000000000000CC -:1064D00000000000000000000000000000000000BC -:1064E00000000000000000000000000000000000AC -:1064F000000000000000000000000000000000009C +:1064C000F414FC3C0000000000000000000000008C +:1064D000000000000000000000000000A0F54141A5 +:1064E00000C38282010341C3000F000F28280A0A5B +:1064F00000C1C1C100000000000000000000000059 :10650000000000000000000000000000000000008B :10651000000000000000000000000000000000007B :10652000000000000000000000000000000000006B :10653000000000000000000000000000000000005B -:10654000000000000000000000000000000000004B -:10655000000000000000000000000000000000003B -:10656000000000000000000000000000000000002B -:10657000000000000000000000000000000000001B +:106540000000F000F828000000000000000000003B +:106550000000000000000000000000000000A0F5A6 +:10656000EBEB000302020103000000C300C300289C +:10657000000A00C100000000000000000000000050 :10658000000000000000000000000000000000000B -:106590000000000000000000000000000000FFFFFD -:1065A0003C3C000000000000000000000000000073 +:1065900000000000000000000000000000000000FB +:1065A00000000000000000000000000000000000EB :1065B00000000000000000000000000000000000DB :1065C00000000000000000000000000000000000CB :1065D00000000000000000000000000000000000BB -:1065E00000000000000000000000000000000000AB -:1065F000000000000000000000000000000000009B +:1065E000EFCFAF0F38F83BFB828230F33D29150126 +:1065F000B0B0B0000000000000000000000000008B :10660000000000000000000000000000000000008A :10661000000000000000000000000000000000007A -:10662000FF3CFF3C000000000000000000000000F4 +:10662000000000000000000000000000000000006A :10663000000000000000000000000000000000005A :10664000000000000000000000000000000000004A :10665000000000000000000000000000000000003A -:10666000000000000000000000000000000000002A -:10667000000000000000000000000000000000001A -:1066800000000000000000400000000000000000CA -:1066900020002000000200000000000000000000B8 -:1066A00004004000000000000000000000000000A6 -:1066B0002000200088000000000000000000000012 -:1066C00000000003200000000000000000000000A7 -:1066D000000020002000000000000000000000007A -:1066E00000000000000000000000020800000000A0 -:1066F000000020002000000000000000000000005A -:106700000004000040000000000100000000000044 -:106710000040100000000000000000000000000227 -:1067200000000000800000000000000000000000E9 -:106730000000000000000002000000020000000055 +:106660000000EFCFAF0F08C80BCBBEBE30F3BFABFF +:1066700097830000B000AAA03C300000000000009A +:1066800000000000000000002000400000000000AA +:1066900011000000000004002000000000001000B5 +:1066A00040004000000000008400200000000000C6 +:1066B0000000000000002000C00000004000200496 +:1066C000000400032000000004040000200000007B +:1066D0008800840084004000200020040000400066 +:1066E00040001000200088002000840020000000EE +:1066F00082004000200088000400200004022100E5 +:106700002088200000000000004000000000400041 +:10671000404008004000000080000000020000002F +:106720004000000000000000000000000000000029 +:106730004020000040004000000000000000000277 :106740004000000000000000000000000000000009 -:10675000000040A000000000000000020000000255 -:106760000000000000000000000000000000000029 -:106770000000000000000000000000000000000019 -:1067800000001000000000000000000000000000F9 -:1067900000000010001000000000001000100000B9 -:1067A00000000000000000000000000000000000E9 +:106750004040000040004000000000020000000235 +:106760008002A00000000000400000000000410086 +:106770000000200204004040109080000000004013 +:1067800020C00004C12000000200820000000000C0 +:1067900000000000000000000000040004000000F1 +:1067A0000000A00000000000000000000400000045 :1067B00000000000000000000000000000000000D9 -:1067C00000000000000000000040004000400040C9 -:1067D00000008400000000800200020000000000B1 -:1067E00001000000000000000000000000000000A8 -:1067F0000000000000000010000000000000000089 -:106800000000000000000000000800080008000868 -:106810000000001000000000000000000000000068 -:1068200000000000000000840004000400040004D4 -:106830000004000400040004000400040004000438 -:10684000040400040004000400000004000000042C -:106850000004000000000004002000000000000010 -:106860000000100000000000000000000000000018 -:106870000000000000000000000000000000000018 -:1068800000000408000000000000000000000000FC -:1068900000100000000000000000000800080008D0 -:1068A000000000080008002100080008000000089F -:1068B00000080000000000080008000000000000C0 +:1067C00000000000000000000000000000000000C9 +:1067D0000000000000050000840000000009010026 +:1067E0000000000004000010400000000000001045 +:1067F0000004000000000000000001400010001034 +:106800000000031000000210000000000502040058 +:1068100000000000040000000000040084000000EC +:106820000400040000080000040000000000000054 +:106830000000000000000000000000000000000058 +:106840000000000000080000000000080000001028 +:106850000000000800000008000000000000000028 +:10686000080000000088C1100900C11000000000ED +:106870000000000800000010200040004008000058 +:1068800000000000C0C000840011000500110009D4 +:1068900000000000000000000000000000000000F8 +:1068A00000000005000000210000000000000008BA +:1068B0000000000000000008400000000000000090 :1068C00000000000000000000000000000000000C8 :1068D00000000000000000000000000000000000B8 -:1068E00000000000000000000000000008000000A0 -:1068F0000000000000000000000000000000000098 -:106900000000000000000000000000000000000087 -:106910000000000000000000000000000000000077 -:106920000000000003000000000000000000000064 -:106930000000000000000000000000000000000057 +:1068E0000000820000030000000501084000104085 +:1068F0000000004000000000002100080420008586 +:106900000040008090004004A02100000000000032 +:106910000000040000000000000000000000000073 +:106920000000000000000000000004000000000063 +:10693000000008000000000000000000000000004F :106940000000000000000000000000000000000047 -:106950000000100000000000000000000000000027 -:10696000080000000300000000000000000000001C -:106970000000040000000000000000000000000013 -:106980000000000000000000000000000000000007 -:1069900000000000000008000000000000000000EF -:1069A00000000000000000000000000000000000E7 -:1069B000880000000000000000000000000000004F -:1069C000000000400000000000000000080000007F -:1069D00000000000000020800000000000400400D3 -:1069E0000000000000000000000000000100008026 -:1069F000000000000010000900000000000000007E -:106A00000000000000000000000000000000000086 -:106A10000000000000000000000000000000000076 -:106A2000000000000000000000000000000800005E -:106A30000000000000000000000000000000000056 -:106A40000000000000000000000000000000000046 -:106A500000000000000000008004000000000000B2 -:106A60008000000000000000000000000000200086 -:106A70000004000000000000000000000000000012 -:106A80000000000000000000000000000000000006 -:106A900000000800080008000800000800080008BE -:106AA000000000210040000000080000000000007D +:1069500000000000000000A00000040004A00000EF +:10696000400000001000400009000000200000006E +:10697000800000000001008200A000000000000173 +:10698000400800012140000004A109000588000022 +:106990000000001000100000000001050040000091 +:1069A00000000021000300000000000000000000C3 +:1069B00000000000000000000000000000000000D7 +:1069C00000000000000000000000C00008000000FF +:1069D000000000000000080000000000000082002D +:1069E0000000C00000000000C0000100000900001D +:1069F000C000C008C00000008200C000000000000D +:106A0000000009400300000000000000A00008840E +:106A100021840000000110050000000008000001B2 +:106A20000000000000000000001000000000000056 +:106A3000000800000000000000000000000000004E +:106A4000000000000000000000000008000000003E +:106A50000000000000000000000000000000000036 +:106A60000000000000000084000000C002840088D4 +:106A70000000000000010000000000000000000015 +:106A80002100030002000200110000000040008409 +:106A900000044000000000000000000200000000B0 +:106AA00000000000000000000000000000000021C5 :106AB00000000000000000000000000000000000D6 -:106AC00000000000000000000000000000000000C6 -:106AD0000000000000000000840000000000000032 -:106AE0000000000000000000000090000000000016 -:106AF0000000000000000000000000000000000096 -:106B00000000000000000000000000000000000085 -:106B10000000000000000000000000000000000075 +:106AC00000000000000000000800000000000000BE +:106AD00000000000000000000000000000000000B6 +:106AE000100000000000400000000200040209083D +:106AF000840082000021110840000088024100004B +:106B00000200020082800120400000841000002169 +:106B10004121000002000000000000000000000011 :106B20000000000000000000000000000000000065 -:106B30000000000000100000000000000000000045 -:106B40000000000000000000000000000000000045 -:106B50000000000000000000000000000000000035 -:106B6000000000000000000000000000000000081D -:106B70000000009003000000000000000000000082 -:106B800000C0000000000000000000000000000045 -:106B90000000000000000000000000008200000370 -:106BA000010000000008000000000021002100009A -:106BB00000000000000000000000000000000000D5 +:106B3000000000000000000000000000000800004D +:106B40004000000000000000000000000000000005 +:106B50000000000000000000000000000804000029 +:106B600000000000002000000000000080208001E4 +:106B70000400000800002100C0108000000480C054 +:106B80002100800080082140040180000021009045 +:106B90000000200000A000008400C000840000402D +:106BA00000000000000000000000002100000000C4 +:106BB00000000000000000080000000000000000CD :106BC00000000000000000000000000000000000C5 -:106BD00000000000080000000000000000000000AD -:106BE00000000000000000000000000000000000A5 -:106BF0000000000000000000000000000000000095 -:106C00000000000000000000000000000000000084 -:106C10000000000000000000000000000000000074 -:106C20000000200000000000000000000000000044 -:106C30000000000000000000000000000000000054 -:106C40000000000000000000000000000000000044 +:106BD00000000000000000000000000000000000B5 +:106BE00000000000000000000000050000000000A0 +:106BF000C1400110C0080121014140900210041061 +:106C000082000200A0031000114000400820202054 +:106C1000000000210021840000000000410000006D +:106C20000000000011000010020000000000000041 +:106C30000200000000000000000000000000000052 +:106C40000000002000000004000000000000000020 :106C50000000000000000000000000000000000034 -:106C60000000000000000000000000000000000024 -:106C70000000000000000000000000000000000014 -:106C80000000000000000000000000000000000004 -:106C900000000000000000000000C0020002001020 -:106CA0001008902000020108900800000000000079 +:106C60000000000000000000000000008408000098 +:106C70000000400104000000040002008040800089 +:106C8000000000028000000000000401000100017B +:106C900080014002000000201100410200900088A5 +:106CA00008204010041000820802000000000000CC :106CB00000000000000000000000000000000000D4 :106CC00000000000000000000000000000000000C4 :106CD00000000000000000000000000000000000B4 -:106CE00001000000000000000000000000000000A3 -:106CF0000000000001000000000000000000000093 -:106D00000000000000000000000000000000000083 -:106D10000000000000000000000000004080008033 -:106D200000008080800000000480008400000000DB -:106D3000000000000000000000000000002000082B +:106CE00000000000000000000000000040C0008222 +:106CF0000008100200C089898900000001C0A000BE +:106D00004105000100C000000000080040C08940AB +:106D10009108C090000002008201000090800000F5 +:106D20000000000080008000008000800000000063 +:106D30000000000000000000000000000000000053 :106D40000000000000000000000000000000000043 :106D50000000000000000000000000000000000033 -:106D60000000200000000000000000000000000003 -:106D700000000000000011002100000000000000E1 -:106D80000000000000000000000000000000000003 -:106D90000000000000000000000000000000800073 -:106DA00000A000800080008003A0800080800000A0 +:106D60000000000000000000000000000000808023 +:106D70000080008080000384A0A0C1020000048481 +:106D8000840283A00020008000000000800080803A +:106D90008280208080004009C0108910000000001F +:106DA00000A1800800000000802000880000000092 :106DB00000000000000000000000000000000000D3 :106DC00000000000000000000000000000000000C3 :106DD00000000000000000000000000000000000B3 :106DE00000000000000000000000000000000000A3 -:106DF00000000000000000000041090000030080C6 -:106E00000000000000000000000000000000000082 -:106E10000000000000000000000000000000000072 -:106E2000080002C0A04020C0880210C0902010C0FE +:106DF0008000000980108000410010802003C083C3 +:106E000020000300030084000000800000008000D8 +:106E1000A000C020C082C003200010001108832100 +:106E20000800208210909084080004022004880248 :106E30000000000000000000000000000000000052 :106E40000000000000000000000000000000000042 :106E50000000000000000000000000000000000032 :106E60000000000000000000000000000000000022 -:106E700000400000000000000000000101000000D0 -:106E8000008800000000000000000000000000007A -:106E900000000000000000000000000000000000F2 -:106EA000000005200010C0021082A1890010C0025D -:106EB00021040000000000000000000000000000AD -:106EC00000000000010000000000000000000000C1 +:106E70000000A0008800A0040804009000080001A1 +:106E8000C009008200000000C000000008000000EF +:106E9000C000401004000805C1010120A10001004C +:106EA000C0019008002000A088900920000408205C +:106EB000882000000000200000000000000000000A +:106EC00000000000000000000000000000000000C2 :106ED00000000000000000000000000000000000B2 -:106EE00000000000000000000000000000000000A2 -:106EF000000000000000000000000000000088000A -:106F00000000010000000000000000000000000080 -:106F10000000000000000000000000000000000071 -:106F200000000000C100008080008000411000804F -:106F30008300118400000000000000000000000039 -:106F40000000000000004000000000000000000001 +:106EE00000000001000000000000000000000000A1 +:106EF00000000000089000820008890800000005DA +:106F0000090001C100010000000901C108000000E2 +:106F1000000000C0040300C1000821C100012001DD +:106F20000101010005000000000000004100008098 +:106F300080000000000000000000000000000000D1 +:106F40000000000000000000000000000000000041 :106F50000000000000000000000000000000000031 -:106F6000000000000000000000000000050000001C -:106F70000000000000000000000000000000000011 -:106F800000000000410000000000000000000000C0 -:106F900000000000000000000000000000000000F1 -:106FA00000000000000000000000000000000040A1 -:106FB00080000080040400000000000000000000C9 +:106F60000000000000010000000000000000000020 +:106F700000000000000080000080000009000904FB +:106F80004183910209C100020411038504C18000FC +:106F900000000000008000A00040009104C1000833 +:106FA00091100821080000108020002080000000BF +:106FB0000020000080000000000000000000000031 :106FC00000000000000000000000000000000000C1 :106FD00000000000000000000000000000000000B1 -:106FE00000000000000000000000000000000000A1 -:106FF000000000020000000000000000000000008F -:10700000000004110000000000000000000000006B -:107010000000000000000000000000000000000070 -:10702000000000000000000010002002109010007E -:10703000020002881084020000000000000000002E +:106FE00000000000000000010000000000000000A0 +:106FF0000000000000000000000800110000000078 +:10700000102110A111008320840504110300030343 +:107010008000000080000000820503202080821193 +:107020002105101003800205400120088808840013 +:107030004000880910080400000000000000000063 :107040000000000000000000000000000000000040 :107050000000000000000000000000000000000030 -:107060000000000000000000000000000000000020 -:10707000000000000001000000000000000000000F -:1070800000000000010100000000000000000000FE -:1070900000000000000000000000000000000000F0 -:1070A00000000000000000000000000000000000E0 -:1070B0004842810000E0000048420000000000005B +:10706000000000000000000000010000000000001F +:1070700000000000000000000000A0000200080066 +:1070800008000189001000009000C01000C002003C +:107090000100C000000008000000C190C1C08302D0 +:1070A0001101012000210104000000000000070080 +:1070B000000000000000070048000000000007007A :1070C00000000000000000000000000000000000C0 :1070D00000000000000000000000000000000000B0 -:1070E000000000000000000000000000000000E0C0 -:1070F000000000000006000007040000000000007F -:1071000000000000000000E00000814100000000DD -:10711000000000000000000000000000000000006F -:10712000000000000000000000000000280000280F -:107130002841000020401080201040800000000006 +:1070E00000000000000000000000000000000000A0 +:1070F000000000000000000000000000008100000F +:1071000007000000884100E007000081810000E0E6 +:10711000000000000000000000000000818100E08D +:1071200007000006880000E00000000000000000EA +:10713000000000000000000000000000000000004F :10714000000000000000000000000000000000003F :10715000000000000000000000000000000000002F :10716000000000000000000000000000000000001F -:10717000000000000000000000000000000000000F -:1071800000000000000000000000000000000000FF -:1071900000000000000000000000000000000000EF -:1071A000000000000000000000000000000041009E -:1071B0000041000028410402080104080201000007 +:107170000000000000000000000000000000080BFC +:10718000C8CB0FC300993C3C3C3CF0F00000F0F051 +:107190000000FF000000F0F00000FFFF000000F31F +:1071A0000062040C060F0000000000000000000058 +:1071B00000000000000000000000000000000000CF :1071C00000000000000000000000000000000000BF :1071D00000000000000000000000000000000000AF :1071E000000000000000000000000000000000009F :1071F000000000000000000000000000000000008F -:10720000000000000000000000000000000000007E -:10721000000000000000000000000000000000006E -:10722000000000000000000000000000000000005E -:10723000000000000000000000000000000000004E +:10720000383BF8FB0FC3FF993C3C3C3CF0F00000DE +:10721000F0F00000FF000000F0F0000000000000AF +:1072200000000062040C00000000000000000000EC +:107230000210200000881004021020000088108432 :10724000000000000000000000000000000000003E :10725000000000000000000000000000000000002E :10726000000000000000000000000000000000001E @@ -100162,496 +100162,496 @@ :1072800000000000000000000000000000000000FE :1072900000000000000000000000000000000000EE :1072A00000000000000000000000000000000000DE -:1072B0000000010802041008200410200804000047 -:1072C000A005000000000000000000000000000019 +:1072B00000000000000000000000000000000000CE +:1072C00000000000000000000000000000000000BE :1072D00000000000000000000000000000000000AE :1072E000000000000000000000000000000000009E :1072F000000000000000000000000000000000008E -:10730000000000000000000000000000000000007D -:10731000000000000000000000000000000000006D -:10732000000000000000000000000000000000005D -:1073300000000000801040208001400280400102D7 -:10734000A005000000000000000000000000000098 +:10730000000000001018909900000CFC000000FF25 +:107310000000666600000F0F000066660000FFFFB9 +:10732000FFFFF0F0000000000908991800000000BD +:107330006666060600000000000000000000000075 +:10734000000000000000000000000000000000003D :10735000000000000000000000000000000000002D :10736000000000000000000000000000000000001D :10737000000000000000000000000000000000000D -:1073800000000000000000000000000000000000FD -:1073900000000000000000000000000000000000ED -:1073A00000000000000000000000000000000000DD -:1073B00000000000000060000000000010000061FC -:1073C0000001800108000000000000000000000033 -:1073D00000000000000000610006000D0000000039 +:107380000000000000001018000000000CFC0000CD +:1073900000FF0000666600000F0F00006666000038 +:1073A0000000FFFFF0F0303C6066090800000000BC +:1073B00000000000060600000000000000000000C1 +:1073C0004000000000000000000005000000000078 +:1073D00000000000000000000000000000000000AD :1073E000000000000000000000000000000000009D -:1073F000000000000000000000610007000D000018 -:1074000000000028000000A00000000000000000B4 -:1074100000400006000C000000000000000000001A -:10742000000000000000000000000000000000005C -:10743000000000000000000000000000000000004C -:10744000414141413C3C00000000000000000000C0 +:1073F000000000000000000000000000000000008D +:107400000000000000000000000020280000000034 +:1074100045638A27852892A240E38007802892024C +:1074200040828000002082021061202F80480008E6 +:1074300000610007800D0005000000000000000052 +:10744000000000000000000000000000000000003C :10745000000000000000000000000000000000002C :10746000000000000000000000000000000000001C :10747000000000000000000000000000000000000C :1074800000000000000000000000000000000000FC -:1074900000000000FF00FFFF0000000000000000EF -:1074A00000000000000000000000000000000000DC -:1074B00000000000000000000000000000000000CC -:1074C0000000414141413C3C000000000000000040 +:107490000000FFC34D4DC0C08282FEFCBE3C080808 +:1074A000000C00000000000000005C5CFF0F0F0CEF +:1074B0000A08FFDFFF1C013D013D00000000000045 +:1074C00000000000000000000000000000000000BC :1074D00000000000000000000000000000000000AC :1074E000000000000000000000000000000000009C :1074F000000000000000000000000000000000008C :10750000000000000000000000000000000000007B -:10751000000000000000FF0000000000000000006C -:10752000000000000000000000000000000000005B -:10753000000000000000000000000000000000004B -:1075400000000000C3C3C3C35050505000000000EF -:10755000000000000000000000000000FFAA55002D +:10751000000000003C004D4DC0008200FEFCBE3C5F +:107520000A0A000F00000000000000005C5CF00090 +:1075300000000A08FFD3FF10C1FDC1FD00000000DC +:10754000000000000000000000000000000000003B +:10755000000000000000000000000000000000002B :10756000000000000000000000000000000000001B :10757000000000000000000000000000000000000B :1075800000000000000000000000000000000000FB -:1075900000000000000000000000F0F0000000000B -:1075A00000000000000000000000000000000000DB -:1075B00000000000000000000000000000000000CB -:1075C000000000000000000000005050505000007B -:1075D0000000000000000000000000000000FFAA02 -:1075E0005500000000000000000000000000000046 +:10759000000000000000FFFF000F438202822CAFBA +:1075A0002CAF2220EEEF00000000000000000000E1 +:1075B00000002220EEEF00050F050505F303000093 +:1075C00000000000000000000000000000000000BB +:1075D00000000000000000000000000000000000AB +:1075E000000000000000000000000000000000009B :1075F000000000000000000000000000000000008B :10760000000000000000000000000000000000007A -:10761000000000000000000000000000F0F000008A -:10762000000000000000000000000000000000005A -:10763000000000000000000000000000000000004A -:10764000000000000000000000000000000000003A -:10765000000000000000000000000000000000002A -:10766000000000000000000000000000000000001A -:107670000000000000000000000000008800000082 -:1076800000020000000000000000000000000000F8 -:1076900000000000000000000000000000000000EA -:1076A00000000000000000000000000000000000DA -:1076B00000000000000000000000000000000000CA -:1076C00000000000000000000000000000000000BA -:1076D00000000000000000000000000000000000AA -:1076E000000000000000000000000000004000005A -:1076F0000000000000020000000000000000000088 -:107700000000000000000000000000000000000079 -:107710000000000000000000000000000000000069 -:107720004000000000000000000000000000000019 -:107730000000000000000000000000000000000049 -:107740000000000000000000000000000000000039 -:107750000010001000000000000000000000000009 -:107760000000001002000000000000000200020003 -:1077700004000210000000000010001000000000D3 -:1077800000000010000000000000000000000000E9 -:1077900000000000001002000200001000100100B4 -:1077A0000000000000100800080002100010000097 -:1077B00004000000001000000000000000000000B5 -:1077C0000000001000100000000000000000040095 -:1077D00004000000040000000000000000000000A1 -:1077E0000000000000080000000000000000000091 -:1077F0000082000000000000000000000000000007 -:1078000000000000008800000000000000000000F0 -:107810000000000000000000000000000000000068 -:107820000200000000000000000000000000020054 -:107830000000000000000000000000000000000048 -:107840000000000000000000000000000000000038 +:107610000000000000000000FFFF555FE3D7F7D730 +:1076200000002CAF2A28EAEB000000000000000058 +:10763000000000002A28EAEBF0F5FFF5F5F5F3036A +:10764000401100000004000200200100010420821B +:1076500000000000000400000000000400042004FA +:1076600020000000000000000100C0000141C080B7 +:1076700000034000C0032003C000000204022004F5 +:107680000003000000000004000000004000C000F3 +:107690002000200020000000C00000800202210025 +:1076A00020108800000088008800000888008800FA +:1076B00020002000200000008400880088002000B6 +:1076C000200000000002000010A00001080240029B +:1076D000050200000000000000000002000200841B +:1076E0001002000000000000000040000000100236 +:1076F0000040000000040000900000004000000076 +:107700000000000000000000000000004000000039 +:107710002100000090004000400200004040C000F6 +:107720000800000100000000000000004000000010 +:107730004000100000000000400200004040000235 +:107740000000000002000000020000000100001024 +:10775000020084000000000000000400000000009F +:107760000200000000000000040000000000C10052 +:107770000000C00000009000A00000000000000019 +:1077800000000000000000000000000000000000F9 +:1077900000000009000000090000000004020000D1 +:1077A00000000000081000000000000000000000C1 +:1077B0002000000000000800000000090000000098 +:1077C000200802100800040000000400040010005B +:1077D000040100000400000000000400000000009C +:1077E000000000000000040004000000000004008D +:1077F0000800000000000000000000004008000039 +:107800000400000004000000000000000000000070 +:1078100000002000000000000000000800008009B7 +:1078200000000000000080010000000000000000D7 +:107830000000000040000000000000880000020876 +:10784000050000000000000000000000020390009E :107850000000000000000000000000000000000028 :107860000000000000000000000000000000000018 -:107870000000000000000000000000000000000008 -:1078800000000000000000000000000000000000F8 -:1078900000000000000000000000000000000000E8 -:1078A00000000000000000000000000000000000D8 -:1078B00000000000000000000000000000000000C8 -:1078C0000000000000000000000021000300030091 -:1078D000030000020002000200020002000000C0DB -:1078E0000000050000000000000000000000000093 -:1078F0000000000000000000000000000000000088 -:107900000000000000000300000000000000000074 +:1078700000000000001100000000000000000000F7 +:107880000000000000000000000000009000001058 +:1078900000000000000000000000000004000000E4 +:1078A00000000400000010000800000000000000BC +:1078B00000000000000800050000000000000000BB +:1078C0000000400090000000040040004100110052 +:1078D0004000000000000300009000880000000449 +:1078E0000000000000000000000000000000000098 +:1078F0000000000000000000080000000000000080 +:107900000000000000000000000000000000000077 :107910000000000000000000000000000000000067 -:107920000000000000000000000000000000000057 -:107930000000000000000000000000000000000047 -:107940000000000000000000000000000000000037 -:107950000000000000000000000000000000000027 -:107960000000000000000000000000000000000017 -:107970000000000000000000040000000000000003 -:1079800000000000000000000000000000000000F7 -:1079900000000000000000000000000000000000E7 -:1079A00000000000000000000000000001000000D6 -:1079B00000000000000000000000000000000000C7 -:1079C00000000000000000000000000000000000B7 -:1079D00000000000000000000000000000000000A7 -:1079E0000000000000000000000000000000000097 -:1079F0000000000000000000000000000000000087 -:107A00000000000000000000000000000000000076 -:107A10000000000000000000000000000000000066 -:107A2000000000000000000000000000080004004A -:107A30000000000000000000000000000000000046 -:107A40000000000000000000000000000000000036 -:107A50000000000000000000000000000000000026 -:107A60000000000000000000000000000000000016 +:107920000800000008000010000080000904008426 +:1079300000000000030421004100210005000500B3 +:10794000050008C04000080003000000000400001B +:107950000000000000110000000000020000000014 +:1079600000000000004100000000000000000000D6 +:1079700000000000000000000000000000000008FF +:1079800000000000000000000000000000000800EF +:1079900000000000000000000000000000004000A7 +:1079A0000000C0000800080004200400840000005B +:1079B000000088000000820008000800820000002B +:1079C00000000000000900000000000083400000EB +:1079D0004100000000004090008800000285008403 +:1079E00000000000000000C000000000008800004F +:1079F000000000000000000000000900000000007E +:107A0000000800000000000000000000000000006E +:107A10000000000000000000000000000000100056 +:107A200080000000000000840000000000A00000B2 +:107A30000000000000001000000000000010000026 +:107A400000000000000000000004004000000200F0 +:107A50000000000082002000000000040000000080 +:107A600000410000000000080000000000000000CD :107A70000000000000000000000000000000000006 :107A800000000000000000000000000000000000F6 :107A900000000000000000000000000000000000E6 -:107AA00000000000000000000000000000000020B6 -:107AB00000000000000000000000000000000000C6 -:107AC00000000000000000000000000000000000B6 -:107AD0000000008400000800000000000008038887 -:107AE000080000000000000000000000000000008E +:107AA0000400000000000000000000000040000092 +:107AB0000000000000000000A020000040000000C6 +:107AC0000000A00000000000000000000000000016 +:107AD000000009900900400005040088000000042F +:107AE0000090000000000000000000000000000006 :107AF0000000000000000000000000000000000086 :107B00000000000000000000000000000000000075 :107B10000000000000000000000000000000000065 -:107B20000000000000000000000000C00000000095 -:107B300008850000000000000000000000000000B8 -:107B40000000000000000000000000000000000035 -:107B5000000000000000000000000000000900001C -:107B60000000000000000000000000000000000015 +:107B20000000000000C0000200000900400000A0AA +:107B30000000050000000000000000000000000040 +:107B40000000000041202100030000004004110259 +:107B5000000000080000000000000000000000001D +:107B6000000000800000000000000009004100004B :107B70000000000000000000000000000000000005 -:107B800004000000000000000000000000000000F1 -:107B90008200000000000000000000000000000063 -:107BA00000000000000000000000000000000000D5 -:107BB00000000000000000000000000200000000C3 -:107BC00000000000000000000000000000000000B5 -:107BD00000000000000000000000000000000000A5 -:107BE0000000000000000000000000000000000095 +:107B80000000100000000041002100000000000083 +:107B900000000000000000000000000000000000E5 +:107BA00000000000000000000000000001000000D4 +:107BB00000000009910400004000000090008200D5 +:107BC0008808000000000000000000040000000021 +:107BD000400000000000000041884100000000005B +:107BE0000000000000020000000000020000000091 :107BF0000000000000000000000000000000000085 -:107C00000000000000000000000021000000000053 -:107C10000000030000000000000000002100000040 -:107C20000000000000000000000000000000000054 -:107C3000000000000800000000000000000000003C -:107C40000000000000000000000000000000000034 -:107C50000000000000000000000000000000000024 -:107C60000000000000000000000000000000000014 +:107C00000000000000000000000000000000000074 +:107C10000000000000000000000000000000000064 +:107C2000000000000000000011C0000000000884F7 +:107C30000000040000A00800000000000000000098 +:107C400000000000000000000000004020000000D4 +:107C50000000008220000900000000000000000079 +:107C60000040009002900090000000000000000022 :107C70000000000000000000000000000000000004 -:107C800000000000000000000000000000000000F4 +:107C800001C100200084002100000000000000006D :107C900000000000000000000000000000000000E4 -:107CA00000000000000000000000000000000000D4 -:107CB00000000000900000000084000000000000B0 +:107CA0000000000000000000000000010100890049 +:107CB0000001C000000000001000000000000000F3 :107CC00000000000000000000000000000000000B4 -:107CD00000000000000000000000000000000000A4 -:107CE0000000000000000000000000000000000094 +:107CD00000000808014010A0A0A000000000000063 +:107CE000000000000800800000000000000000000C :107CF0000000000000000000000000000000000084 -:107D00000000000000000000000000000000000073 +:107D0000000004C1008900090010000000001000FC :107D10000000000000000000000000000000000063 -:107D20000000000000000000000000000000000053 -:107D300000000000110080000000000000000000B2 +:107D200000000000000000000000000000104110F2 +:107D30004000001180000000000000000000000072 :107D40000000000000000000000000000000000033 -:107D50000000000000000000000000000000000023 -:107D60000000000000000000000000000000000013 +:107D500000000000080040808080008000000000DB +:107D60000000000041000311089041800000000065 :107D70000000000000000000000000000000000003 :107D800000000000000000000000000000000000F3 :107D900000000000000000000000000000000000E3 -:107DA00000000000000000000000000000000000D3 -:107DB00000000000000000000080000000800000C3 +:107DA0000000000000000000000000000000400093 +:107DB000000084008000000080000000000000003F :107DC00000000000000000000000000000000000B3 -:107DD00000000000000000000000000000000000A3 -:107DE0000000000000000000000000000000000093 +:107DD0000000000000000000002100100000000072 +:107DE00000000000000000000100011001A00000E0 :107DF0000000000000000000000000000000000083 -:107E00000000000000000000000000000000000072 +:107E000000000000000000000000000000C00000B2 :107E10000000000000000000000000000000000062 :107E20000000000000000000000000000000000052 -:107E3000000000000000000000000020000000C062 +:107E300010000400080008202000100090009000AE :107E40000000000000000000000000000000000032 -:107E50000000000000000000000000000000000022 -:107E60000000000000000000000000000000000012 +:107E50000000000000000000000000880082000018 +:107E600000000000000000002000000000012001D0 :107E70000000000000000000000000000000000002 -:107E800000000000000000000000000000000000F2 -:107E900000000000000000000000000000000000E2 +:107E80000000000000000000C00000000000C00072 +:107E90000000000090000000000000000000000052 :107EA00000000000000000000000000000000000D2 -:107EB00000000000000000000000010000888800B1 -:107EC00001000000000000000000000000000000B1 -:107ED00000000000000000000000000000000000A2 -:107EE0000000000000000000000000000000000092 -:107EF0000000000000000000000000000000000082 -:107F00000000000000000000000000000000000071 -:107F10000000000000000000000000000000000061 +:107EB00000000000000004010000008400880002AF +:107EC00000C00000000000000000000000000000F2 +:107ED000000000000000000000000083009000404F +:107EE00088C100000000000000000003002000081E +:107EF000000800000000000000000000000000007A +:107F00000000000000000000000000002000410010 +:107F100080000000000000000500000000000000DC :107F20000000000000000000000000000000000051 -:107F30000000000000000000000000004100008080 -:107F40000000090000000000000000000000000028 -:107F50000000000000000000000000000000000021 -:107F60000000000000000000000000000000000011 -:107F70000000000000000000000000000000000001 -:107F800000000000000000000000000000000000F1 +:107F30000000000000000041112100090000008045 +:107F400000000080000000000000000000000000B1 +:107F500000000000000000000000000000100021F0 +:107F6000008300100000000000000000004000211D +:107F70008000001000000000000000000000000071 +:107F800000000000000000000000000000400000B1 :107F900000000000000000000000000000000000E1 :107FA00000000000000000000000000000000000D1 -:107FB00000000000000000000000000000000011B0 -:107FC0000000008000000000000000000000000031 -:107FD00000000000000000000000000000000000A1 -:107FE0000000000000000000000000000000000091 -:107FF0000000000000000000000000000000000081 -:108000000000000000000000000000000000000070 +:107FB0000000000000000000000800000020000099 +:107FC00000000000000000000000000000000000B1 +:107FD000000000000000000000000000000000049D +:107FE000000000000000000000000000000010C0C1 +:107FF000200182008200000000000000000000005C +:10800000000000000000000000000000000000016F :108010000000000000000000000000000000000060 :108020000000000000000000000000000000000050 -:108030000000000000000000000000000000000040 -:1080400000010000004000000000000000000000EF +:10803000000000000000000000000001000400013A +:108040000000002000080000000000000000000008 :108050000000000000000000000000000000000020 -:108060000000000000000000000000000000000010 -:108070000000000000000000000000000000000000 +:108060001000A000200082000000000000000000BE +:108070000081000007000000000000000000000078 :1080800000000000000000000000000000000000F0 -:1080900000000000000000000000000000000000E0 +:108090000000000000000041840000E0000000003B :1080A00000000000000000000000000000000000D0 -:1080B00000000000000000000000000000000000C0 -:1080C0000000000000000700822100000000000006 +:1080B00000000000000000000000000000E00700D9 +:1080C000420000000000000041000000000000002D :1080D00000000000000000000000000000000000A0 :1080E0000000000000000000000000000000000090 -:1080F0000000000000000000000000000000000080 +:1080F000000028F800F00000000000000000000070 :10810000000000000000000000000000000000006F :10811000000000000000000000000000000000005F :10812000000000000000000000000000000000004F :10813000000000000000000000000000000000003F -:108140000000000000000000F0F00000000000004F +:108140000000000000000000BCBCA0BC000000005B :10815000000000000000000000000000000000001F -:10816000000000000000000000000000000000000F -:1081700000000000000000000000000000000000FF +:10816000000000002828EBEB9E8A1C08000000009D +:1081700000000000AAFA82F20000000000000000E7 :1081800000000000000000000000000000000000EF :1081900000000000000000000000000000000000DF :1081A00000000000000000000000000000000000CF :1081B00000000000000000000000000000000000BF -:1081C00000000000000000000000F0F000000000CF +:1081C00000000000000000000000A0A0A0BC000013 :1081D000000000000000000000000000000000009F -:1081E000000000000000000000000000000000008F -:1081F000000000000000000000000000000000007F +:1081E00000000000000030F330F3DFCB5D490000F9 +:1081F000000000000000000001000000000000007E :10820000000000000000000000000000000000006E -:10821000000000000000000000000000000000005E +:108210000000000000003E3C3D3C0000000000006B :10822000000000000000000000000000000000004E :10823000000000000000000000000000000000003E -:10824000000000000000000000003C3C0000FFFFB8 +:10824000000000000F3F0F3F00000000AAAA5702E5 :10825000000000000000000000000000000000001E -:10826000000000000000000000000000000000000E +:108260000000000000000000F055F03C000000009D :1082700000000000000000000000000000000000FE :1082800000000000000000000000000000000000EE -:1082900000000000000000000000000000000000DE +:1082900000000000000000000A00050000000000CF :1082A00000000000000000000000000000000000CE :1082B00000000000000000000000000000000000BE -:1082C0000000000000000000000000003C3C000036 -:1082D000000000000000000000000000000000009E -:1082E000000000000000000000000000000000008E -:1082F000000000000000000000000000000000007E +:1082C000000000000000FFFF0F3F00000000000062 +:1082D0005702000000000000000000000000000045 +:1082E00000000000000000000000F055F03C00001D +:1082F0000000000000000000000000610026000DEA :10830000000000000000000000000000000000006D -:10831000000000000000000000000000000000005D -:10832000000000000000000000000000000000004D +:108310000000000000000000000000615006000D99 +:10832000000000610007800D000000000000000058 :10833000000000000000000000000000000000003D -:1083400000000000000000000000000005002A00FE -:10835000054000A800000000000000000000000030 -:10836000000000000000000000000000000000000D -:1083700000000000000000000000000000000000FD -:1083800000000000000000000000000000000000ED +:10834000000000000061000B000D00A00000000014 +:10835000009000010000000000000000000000008C +:108360000000000000000000000000000061300676 +:10837000000D0000000000000000000000000000F0 +:1083800028552D55000000000000000000000000EE :1083900000000000000000000000000000000000DD :1083A00000000000000000000000000000000000CD :1083B00000000000000000000000000000000000BD -:1083C00000000000000000000000000000000000AD +:1083C0000000000000000000000000FF00F00000BE :1083D000000000000000000000000000000000009D :1083E000000000000000000000000000000000008D -:1083F000000000000000000000000000000000007D -:10840000000000000000000000000000000000006C +:1083F0000000F3F5F0FF00000000000000000000A6 +:10840000000028002D000000000000000000000017 :10841000000000000000000000000000000000005C :10842000000000000000000000000000000000004C :10843000000000000000000000000000000000003C -:10844000000000000000000000000000000000002C +:108440000000000000000000000000000055005087 :10845000000000000000000000000000000000001C :10846000000000000000000000000000000000000C -:1084700000000000000000000000000000000000FC -:1084800000000000000000000000000000000000EC +:108470000000000030A0F00000000000000000003C +:1084800000000000F8F8F0FA000000000000000012 :1084900000000000000000000000000000000000DC -:1084A00000000000000000000000000000000000CC +:1084A0003D3D7D3C00000000000000000000000099 :1084B00000000000000000000000000000000000BC -:1084C00000000000000000000000000000000000AC -:1084D000000000000000000000000000000000009C +:1084C00000000000000000000000FFFFFF00C3826A +:1084D000C382000000000000000000000000000057 :1084E000000000000000000000000000000000008C :1084F000000000000000000000000000000000007C -:10850000000000000000000000000000000000006B +:10850000000000000000282800AA00000000000071 :10851000000000000000000000000000000000005B -:10852000000000000000000000000000000000004B +:1085200000000505550000000000000000000000EC :10853000000000000000000000000000000000003B -:10854000000000000000000000000000000000002B -:10855000000000000000000000000000000000001B +:10854000000000000000000000000000FF3CFF3CB5 +:10855000C382C38200000000000000000000000091 :10856000000000000000000000000000000000000B -:1085700000000000000000000000000000000000FB -:1085800000000000000000000000000400000000E7 -:1085900000000000000000000000000000000005D6 -:1085A00000000000000000000000000000100010AB -:1085B0000110001000400040004000400003004057 -:1085C00000400040004000400040004000400040AB -:1085D00000000040004000000000004000000000DB -:1085E0000000000000000000000000000200000089 -:1085F000000000000000000000000000000000007B -:10860000000000000000000000000000000000006A -:10861000000000000000000000000000000000005A -:108620000000000000000000000040000000000208 -:1086300000000200000800010001400100010000EC -:1086400000010001000100010001008300010001A0 -:108650000001000000010001000000000001000016 -:10866000000000000000000000000000000000000A -:1086700040000000000000000000000000020000B8 -:1086800000000000000000000000000000000000EA -:1086900000000000000000000200020000000000D6 -:1086A00000000200000002000000000000000000C6 -:1086B00000800080008000800000000000000000BA -:1086C00000000000000000000000000000000000AA -:1086D000000000000080000000000080008000001A -:1086E00000900000000000000000000000000000FA -:1086F000000000000000000000000000000000007A -:108700000000000000000000000000000000000069 -:108710000000000000000000000000000000000059 -:108720000000000000000000000000000000000049 -:108730000000004000400040004000080000000031 -:10874000000800000000000000000000040000001D -:108750000000000000000040000000040040004055 -:1087600000000040000000000000000004000000C5 -:1087700000000000000000000000000000000000F9 -:1087800000000000000000000000000000000000E9 -:1087900000000000000000000000000000000000D9 -:1087A00000000008000004000000000000000000BD -:1087B00000000000000000050000000000000000B4 -:1087C00000000000000000000000000500000000A4 -:1087D0000000000000000000000000000000000099 -:1087E0000000000000000000000000000000000089 -:1087F0000000000000000000000000000000000079 -:108800000000000000000000000000000000000068 -:108810000000000000000808000800080008000828 -:108820000000000000000000000000000000000048 -:108830000000000000000000000800000000000030 -:108840000000000000000000000000000000000028 -:108850000000000000000000000000000000000018 -:108860000000000000000000000000000000000008 -:1088700000000000000000000000000000000000F8 -:1088800000000000000000000000000000000000E8 -:1088900000000000000000000000000000000000D8 -:1088A00000000000000000000000000000000000C8 -:1088B00000000000000000000000000000000000B8 -:1088C0000000900000000000000000000000000018 -:1088D00000000000A00000000000000000000000F8 -:1088E000000000000009000000000000000000027D -:1088F0000000000000000000000000000000000078 -:108900000000000000000000000000000000001057 -:108910000010000000000000000000000000000047 -:108920002100000000000000000000000000000026 -:108930000000000000000000000000000000000037 -:108940000000000000000000000000000000000027 -:108950000000000000000000000000000000000017 -:1089600000000000000041000000000000000000C6 -:1089700000000000000000000000000000000000F7 -:1089800000000000000000000000000000000000E7 -:1089900000000000000000000000000000000000D7 -:1089A00000000000000000000000000000000000C7 -:1089B0000000000000000000000000000000200097 -:1089C0000000000000002000A040000000000000A7 -:1089D00020000040000000002000004000000000D7 -:1089E0002000A04000000000200000000000000067 -:1089F0000000000000000000000000000000000077 -:108A00000000000000000000000000000000000066 -:108A100000000000000000000000000000A00000B6 -:108A20000000000000000000000000000000000046 -:108A30000000000000000000000000000000000036 -:108A40008000000000000000800000010000000025 -:108A50000000800000010000000080000001000014 -:108A60000000800000010000000080000000008481 -:108A700000000000000000000000000000000000F6 -:108A800000000000000000000000000000000000E6 -:108A900000000000000000000000000000000800CE -:108AA00000000000000000000000000000000000C6 -:108AB00000000000000000000000000000000000B6 -:108AC000000000002000000000000008000000403E -:108AD00000000000C000000500000000A00020040D -:108AE00000000000A00000000000000000090000DD -:108AF0000000000000000000000200000000000074 -:108B00000000000000000000000000000000000065 -:108B10000000000000000000000000000000000055 -:108B20000000000000000000000000000000000045 +:1085700000000000000000000000000000000200F9 +:108580000080400000000000000000C0000000006B +:10859000000040800000000020002000C00000001B +:1085A0000000C00000000000A0000000200000004B +:1085B0000000200040000000200021000003208077 +:1085C0002100A00021000000000020040084000021 +:1085D00001004002C0802000000000000000208058 +:1085E000000020804002000000000000840088009D +:1085F000001040002080A0020080000004004040E5 +:108600000000000280040000000240001010100270 +:1086100000000000801000000000100000001002A8 +:1086200040000002000000024002404000008000C4 +:10863000000000000000000040004000200000009A +:1086400040089000000090000000000200000002BE +:1086500000004000800100080000000000024140CE +:10866000100840200002800140004000000000008F +:10867000000000200000100240020008400010002E +:1086800005000000000000800000000082000000E3 +:108690000040004004000200000000000400000050 +:1086A0000000000000200000000000002180218068 +:1086B00000000000000000000000010000100000A9 +:1086C0000000100010002010000400000000010055 +:1086D000A11000000000000020000120014000A0C7 +:1086E0000400000000000010401000000000000026 +:1086F00000100240100908100010020002100000D3 +:1087000040001000210000000502020000000000EF +:108710004000000000000200040000000000000013 +:108720000000000004040400000004000400A00491 +:10873000A004040800080508000000001000000064 +:108740004000000080008000800020010000000048 +:108750004000400800080084008880000409028569 +:108760000041820000000000400084000000000082 +:108770000000008480088000008300000010008258 +:10878000008889C09000C041C0098803840090001F +:108790004008400000000008001100000000000038 +:1087A0000040000000000000000000000021000068 +:1087B00002000400000000000000000000080000AB +:1087C0000000000000000000002101000021100056 +:1087D0000000000501410000884000059120900044 +:1087E0000020000000080200001000080000000047 +:1087F00000080000000000008200C000000500002A +:108800000200A0000010030009000400080000009E +:1088100000000008000000080008000000C0000080 +:108820000000000000000000080000000800000038 +:10883000000009000000110000000000000000829C +:1088400000080082008200000000000020000000FC +:108850000000000000004000400000014100041141 +:10886000001000090000000000000000008200006D +:108870004100210003000000000000000000030090 +:108880000000000000000000844084404004110407 +:1088900084000100000500088402000000000002BE +:1088A00000000100010001000000000000030000C2 +:1088B0000000000020002008020000050000020067 +:1088C0000200000082008200000082000000100010 +:1088D000820000000000820001000800C021C0C129 +:1088E000C000000900210800088082000800000084 +:1088F000820800000010044004401000000900003D +:1089000000400000C000A0000200000100010000C3 +:10891000400000900800000020000000000000005F +:1089200000820000080008000800000000000000AD +:1089300000000000000080008000800000000000B7 +:10894000800080080000000000000000000000001F +:1089500080000000020000A0030020000000009042 +:1089600000020000000000000000002000000000E5 +:1089700010000000000000000000000000000000E7 +:108980000000000000000088000000009000400887 +:10899000400340804000001108081008000000005B +:1089A0009011900000200000001100000000000065 +:1089B0000000000000000041000000000000400036 +:1089C0000211000000000008020002000000000484 +:1089D000000440080008A00000008200824100005E +:1089E00000000008010000000200A00800030000D1 +:1089F000C00000410000000000058200820000006D +:108A000000000800000008800000000000000900CD +:108A100000000004100241020804888400080000DD +:108A200000880000090000000000000000000000B5 +:108A300000000000000000000000400000000000F6 +:108A40004000800000000000000180008000000065 +:108A5000000100050001000100000000000000000E +:108A60000000000003A0201000008900030000089F +:108A700000000000000008000000000000000000EE +:108A8000000000000000000040020002030003009C +:108A90008441000088001005840000008205000861 +:108AA00082008280A0080004000000000000000096 +:108AB00000000000000300050000000000000008A6 +:108AC0000000020000000000C000020800000004D6 +:108AD0000000200000000021000000000000000550 +:108AE000404184000000080900000000000000046C +:108AF0000000000020000000000000000005000051 +:108B00000000040000040800000000000000000055 +:108B10000004000000000000004000000000000809 +:108B20001000000000100000000000000000000025 :108B30000000000000000000000000000000000035 -:108B40000000000000000000000000000000000025 -:108B50000000000000000000000000000000000015 -:108B60000000000000000000000000000000000005 -:108B7000000000000000000040042004000000008D -:108B800000000000000000000000000000000000E5 -:108B900000000000000000000000000000000000D5 -:108BA00000000000000000000000000000000000C5 -:108BB00000000000000000000000000000000000B5 -:108BC0000000000040C000008500000041C000001F -:108BD00004000000000041C000000100000041C08E -:108BE00000000001000041C000000000000041C082 -:108BF0000000000100000000000000000000000074 -:108C00000000000000000000000000000000000064 -:108C10000000000000000000000000000000000054 -:108C20000000000000000000000000000000000044 -:108C30000000000000000000000000000000000034 -:108C400000000000000080800000080000009191FA -:108C50000000900900000000919100030809000045 -:108C6000919100051004000091910005100500008D -:108C700091800003100900000000000000000000C7 -:108C800000000000000000000000000000000000E4 -:108C900000000000000000000000000000000000D4 -:108CA00000000000000000000000000000000000C4 -:108CB00000000000000000000000000000000000B4 -:108CC0000000000000000000090000000411820004 -:108CD0000900002109118000000009000321091189 -:108CE00080000900052104118000090005210511FB -:108CF0008000090003210011800000000000000036 -:108D00000000000000000000000000000000000063 -:108D10000000000000000000000000000000000053 -:108D20000000000000000000000000000000000043 -:108D30000000000000000000000000000000000033 -:108D40000000000000000000000001000000010120 -:108D5000C000010000000001C00000000100000090 -:108D60000001C000010000000101C000010000007E -:108D70000001C000010000000001C0000000000070 -:108D800000000000000000000000000000000000E3 -:108D900000000000000000000000000000000000D3 -:108DA00000000000000000000000000000000000C3 -:108DB00000000000000000000000000000000000B3 -:108DC00000000000000000000000000000000001A2 -:108DD000840003C000000001040003C00000000084 -:108DE0000001000003C000000000000103C10000FA -:108DF0000000000003C100000000000003C10000EB -:108E00000000000000000000000000000000000062 -:108E10000000000000000000000000000000000052 -:108E20000000000000000000000000000000000042 -:108E30000000000000000000000000000000000032 -:108E40000000000000000000000000000000000022 -:108E5000000900029180000000098509918000004E -:108E600000030009000991800000000500049183BF -:108E700000000005000591830003050500009183B3 -:108E800000000000000000000000000000000000E2 -:108E900000000000000000000000000000000000D2 -:108EA00000000000000000000000000000000000C2 -:108EB00000000000000000000000000000000000B2 +:108B4000000000008000100000000000800000080D +:108B50000001000080000000000000000000000094 +:108B60000300800000000000C100080011000000A8 +:108B700000000008000000000000000000000000ED +:108B8000080000000000204000000000000000007D +:108B900000002000C02000A0908890104010080223 +:108BA0000082080240100188A08808020910000213 +:108BB0000002088800000000000000000000000023 +:108BC0000000000000C008000100000200C000001A +:108BD00008000000000001C10000100000000000BB +:108BE000010088000000100000000000A0000090BC +:108BF000908200A090820000000020000000000091 +:108C0000000000000000040001000000000000005F +:108C10000000840100008800110000000080800036 +:108C20000080008000808080100080000080108024 +:108C30000080008000000000000000000000000034 +:108C4000000020000000008080000300000003807E +:108C5000100082000000000009C121030910000972 +:108C6000000003000000000080000000020000007F +:108C700000008080000080800000400000000000B4 +:108C800000000000000000000000040000000000E0 +:108C900008052021804000401000C1A00982410049 +:108CA00000000002808800808000004000A00000DA +:108CB000000000058080008000000000000000002F +:108CC0000000000000100000001100000000800003 +:108CD0000000800000008000000041009100108929 +:108CE000C102100041000811410008000300830088 +:108CF0009004000000118080808040000900050081 +:108D000041800000000000000000000000000000A2 +:108D1000000000000000000000008800208208C061 +:108D200003820800080502042008040008048802E1 +:108D30009084400090020440900800000000000071 +:108D40000000000000000001000000000000000022 +:108D5000C000000010000000C000000000028800F9 +:108D60000091C10000000000000101404002C0006D +:108D70000800C000900008018484C0900100000039 +:108D8000010001A000000000000000000000000041 +:108D9000000000000000000000000084A00300119B +:108DA00000082010892000208440902089040020A1 +:108DB0008405089189400090080408900000000094 +:108DC00000000000000000000000010000000002A0 +:108DD000000000C000000000001110C10001880068 +:108DE0000001028401C10000000000000100001029 +:108DF00000880088008840900020909002020000C7 +:108E0000000100000001000000000000000000025E +:108E1000000000C000C10000010100000001058841 +:108E20000010004020114100008000000500418337 +:108E30000091009040404100000080800000000050 +:108E4000000000000000000000000000080000001A +:108E500000000000008000030005008582C10001C1 +:108E600080110309028211C1000800210040031093 +:108E70000080008000000500850000008080808068 +:108E8000002000100040000800000000000000006A +:108E900000840003004100C1000341204004004160 +:108EA00000208084001180048008801000000000F1 +:108EB00000088040000000008008802000000000C2 :108EC00000000000000000000000000000000000A2 -:108ED0004100000002808900C18000000980090073 -:108EE000000083000000098009008040050904801B -:108EF000090080000509058009008300050900803C -:108F00000900000000000000000000000000000058 -:108F10000000000000000000000000000000000051 -:108F20000000000000000000000000000000000041 -:108F30000000000000000000000000000000000031 -:108F40000000000000000000000000000000000021 -:108F500000000000000000840900C0400000008400 -:108F600001000000C000000000840100C0000001FA -:108F700001840100C000000100840100C040000124 -:108F8000008401000000000000000000000000005C -:108F900000000000000000000000000000000000D1 -:108FA00000000000000000000000000000000000C1 -:108FB00000000000000000000000000000000000B1 -:108FC00000000000000000000000000000000000A1 -:108FD00000000000500000E000000000500000E031 -:108FE000000000000000500000E0000000008100D0 -:108FF00000E000000000480000E000000000500019 -:1090000000E0000000000000000000000000000080 +:108ED000000800000080800080008000000000008A +:108EE0000001C185051003004009000900210000B0 +:108EF00000104110022021001102000080A080001B +:108F0000000000000000000000020000000000005F +:108F10000000002000000000000000000000000031 +:108F200000001005200288908400040082080208D6 +:108F3000200020008220200888000400200820084B +:108F400040000000000000000000000000000000E1 +:108F500000000000000000100800C0001000000029 +:108F600000000001C140000001000001009100006C +:108F700000000001011100C10140000100008888CB +:108F80009020000000100000000000000000000021 +:108F900000000000000100000000000000000000D0 +:108FA0000000000000000000070060210000000039 +:108FB0000700480000000000070048000000000013 +:108FC000070048000000000000000000000000E072 +:108FD00000000000810000E000000000880000E0C8 +:108FE000000000000000810000E0000000006000C0 +:108FF00000E000000000818100E0070000000000A8 +:109000000000070000000000000000000000000059 :109010000000000000000000000000000000000050 -:109020000000000000000000000000000000000040 +:1090200000000000500000000000000000000000F0 :109030000000000000000000000000000000000030 :109040000000000000000000000000000000000020 -:109050000000000000003C3C3C3C66660000FFFF56 -:109060000000666600000000FFFF0000666600006A -:10907000FFFF000066660000FFFF0000666600005C -:10908000FFFF000066660000000000000000000016 -:1090900000000000000000000000000000000000D0 +:109050000000000000003C3C3C3CF0F00000FF0041 +:109060000000FF000000000066660000FF00000036 +:10907000000000000000000000000000000FC39985 +:109080006000600030F3F3300000000000000000DA +:1090900000000000000000000000000024243C004C :1090A00000000000000000000000000000000000C0 :1090B00000000000000000000000000000000000B0 :1090C00000000000000000000000000000000000A0 -:1090D00000000000000000003C3C3C3C66660000D4 -:1090E00000000000666600000000000000006666E8 -:1090F00000000000000066660000000000006666D8 -:109100000000000000006666000000000000000093 -:10911000000000000000000000000000000000004F -:10912000000000000000000000000000000000003F -:10913000000000000000000000000000000000002F -:10914000000000000000000000000000000000001F +:1090D00000000000000000003C3C3C3CF0F00000C0 +:1090E000FF000000FF000000000066660000FF00B7 +:1090F0000000000000000000000000000000FF0F62 +:10910000C39900000000F330F330000000000000BD +:109110000000000000000000000000000000242407 +:109120003C00000000000000000002102000008849 +:109130001004021020000088108402102000008813 +:10914000108402102000008810840000000000003D :10915000000000000000000000000000000000000F :1091600000000000000000000000000000000000FF :1091700000000000000000000000000000000000EF @@ -100660,1296 +100660,1296 @@ :1091A00000000000000000000000000000000000BF :1091B00000000000000000000000000000000000AF :1091C000000000000000000000000000000000009F -:1091D00000000000000000000000000000006666C3 -:1091E0000000FFFF000066660000FFFF00000000B7 -:1091F00066660000FFFF000066660000FFFF0000DB -:1092000066660000FFFF00006666FFFF00000000CA +:1091D00000000000000000000000000000003C3C17 +:1091E0000000FFFF0000666600000F0F0000000097 +:1091F000FFFFFFFFF0F00000000000000000000093 +:109200000000101890993C5A0F0FBDBD4E8D000004 :10921000000000000000000000000000000000004E :10922000000000000000000000000000000000003E :10923000000000000000000000000000000000002E :10924000000000000000000000000000000000001E :10925000000000000000000000000000000000000E -:109260006666000000000000666600000000000066 -:109270000000666600000000000066660000000056 -:10928000000066660000000000006666FFFFFFFF4A +:109260003C3C000000000000666600000F0F00009C +:1092700000000000FFFFF0F0000000000000000010 +:1092800000000000101800003C3C0F0F81814E8D43 :1092900000000000000000000000000000000000CE :1092A00000000000000000000000000000000000BE -:1092B00000000000000000000000000000000000AE -:1092C000000000000000000000000000000000009E -:1092D000000000000000000000000000000000008E -:1092E000406380058021920240E380018021920248 -:1092F000000040E380018021920240E38001802150 -:10930000920240E380018021920240E380018021AB -:1093100082020000000000000000000000000000C9 -:10932000000000000000000000000000000000003D -:10933000000000000000000000000000000000002D -:10934000000000000000000000000000000000001D +:1092B00000610006001D0001000000000000000029 +:1092C00000610006000D000000000000000000002A +:1092D000000000000000000000610007000D000019 +:1092E00040638007802D920240E38007802892022D +:1092F000000040828001802082020061000680051B +:1093000000000061002F800D20088500000800008B +:10931000000800610006000D0000000000000000D1 +:10932000000000610006009D000000610006000DC5 +:10933000000000000000AAAA0000000000000000D9 +:10934000000000000000AA00AAFF000000000000CA :10935000000000000000000000000000000000000D -:10936000000000000C0C0050005000000C0C0050DD -:109370000050000000000C0C00C000C0000C000CED -:109380000000000F000C000C0000000F003C00006B -:1093900000000C0C000000000000000000000000B5 -:1093A00000000000000000000000000000000000BD -:1093B00000000000000000000000000000000000AD -:1093C000000000000000000000000000000000009D +:1093600000000000000000000000000000000000FD +:10937000000000003030F000405041550000000077 +:10938000AA00AA003D3D3D050000000000000000CD +:109390000000000000000000F000F00000000000ED +:1093A0000000000000000000FCFCF0FC00000000D9 +:1093B00028F82828000000000C0C00FF0000000026 +:1093C0000000000000000000F03CF03C0000000045 :1093D000000000000000000000000000000000008D -:1093E0000000000000000C0C0050005000000C0CAD -:1093F00000500050000000000C0C00C000C0000C29 -:10940000000C0000000F000C000C0000000F003CDE -:10941000000000000C0C0000000000000000000034 -:10942000000000000000000000000000000000003C -:10943000000000000000000000000000000000002C +:1093E000000000000000000000000000000000007D +:1093F000F0A03C2800002020A00040500000000009 +:10940000000000F0C3F005053D050000000000006D +:109410000000000000000000000000AAC3AA000035 +:1094200000000000000000000000F0F0F0FC000070 +:109430000000282828F800000000BCBC3CBE00004A :10944000000000000000000000000000000000001C :10945000000000000000000000000000000000000C -:109460000000000000000000000000003C000000C0 -:109470000000000000000000000F0000000C000CC5 -:10948000000F0000000C000C000F0000000C000C8E -:109490000A000A00000000000000000000000000B8 +:1094600000000000000000000000000000000000FC +:109470000000000000000000F0005050AA003C0076 +:10948000000000003CFFF0AA00000000030AF30AFD +:10949000000000000000000000000000F0FA3CBEE8 :1094A00000000000000000000000000000000000BC -:1094B00000000000000000000000000000000000AC +:1094B0005555FF000000000000000000A0A000AA19 :1094C000000000000000000000000000000000009C :1094D000000000000000000000000000000000008C -:1094E00000000000000000000000000000003C0040 -:1094F0000F0F0000003C003C0000000F0000000CBB -:10950000000C000F0000000C000C000F0000000C0D -:10951000000C0A000A00303030300000000000006B -:10952000000000000000000000000000000000003B -:1095300000000000000000000000200020002000CB -:109540002000000000002000000088000000200033 -:109550000000040000002000040020002000200083 -:10956000200000000000200000002000000020007B -:109570000000200000002000200000020000000089 -:1095800000000000000000000000000000000000DB -:1095900000000000000000000000000000000000CB -:1095A00000000000000000000000000000000000BB -:1095B00000000000000000000000000000000000AB -:1095C000000000000000000000000000000000009B -:1095D000000000000000000021000000000000006A -:1095E0000002000000000000000000000000000079 -:1095F000000000000000000000000000000000006B -:10960000000000000000000000004000000000001A -:109610000002000000000000000000000000000048 -:10962000000000000000000000000000000000003A -:10963000000000000000000000000000000000002A -:10964000000000000000000000000000001000000A -:1096500000000000000000000000000000100000FA -:1096600000000010000000000000000000100000DA -:1096700000000200000000000000000000100000D8 -:10968000100000000010001000000000000000109A -:10969000000000000010001000000000000000109A -:1096A00008100200000003A00000000000100010DD -:1096B000004000400040004000000000000000109A -:1096C0004000000000000008000000000000000052 -:1096D0000000000000000000000004000000000086 -:1096E000000000000000001000000000000000006A -:1096F000000000000000000000000000000000006A -:109700000000000000000000000000000000000059 -:109710000000000000000000000000000000000049 -:10972000000080410000000004410400000000002F -:109730000000000000000000040000000000000025 -:109740000000000000000000000000000000000019 -:109750000000000000000000000000000000000009 -:1097600000000000000000000000000000000000F9 -:1097700000000000000000000000000000000000E9 -:1097800000000000000000000000000800000000D1 -:1097900000000000000000210000000000000000A8 -:1097A0000000000000000090000000000000000029 -:1097B00000000000000000000000000000000000A9 -:1097C0000000000000000000000000000000000099 -:1097D0000000000000000000000000000000000089 -:1097E0000000000000000000000000000000000079 +:1094E000000000000000000000000000000000007C +:1094F00000000000000000000000C00040400A0022 +:109500000C00000000003C00F0AA00000000000A6F +:10951000F00A00000000000000000000000000AAA7 +:1095200000AA000000000000000000000000000091 +:1095300000005F507D41000000004000008084007A +:1095400040830004000004042040000000400004A8 +:109550004000000000000004400040000000200423 +:10956000400000000004200420048800C000000027 +:10957000880000000000000000000003000000025E +:10958000200004004000200020000404200000000F +:1095900084048800A100C0000000400010004000CA +:1095A00020002000100001102000200020000100F9 +:1095B0004000208020002000000020000000000863 +:1095C0000000000200000000004000000000000059 +:1095D0000000800000020000000021908000400098 +:1095E00000000900000040020040000000040004E8 +:1095F00000000000400040000000080000000004DF +:10960000400040000000410090C021000090000098 +:1096100000000000100002000000400000000000F8 +:1096200000001000000020000200000000400000C8 +:10963000100200000002090000000000000000000D +:109640000100200000000000000000008400000075 +:1096500000000400000040000000000000000000C6 +:1096600000000400000000000000000000000000F6 +:1096700000000000000000000000001000000000DA +:109680004003200300004010000004000009000413 +:1096900000000000000000000000000008000400BE +:1096A0000000000000100000000008000010010091 +:1096B0000000000000000010000000000000821008 +:1096C00000002000C00004080000000000000400AA +:1096D00004000000000004008400040000000408EE +:1096E00000004104020820040000000000000900FE +:1096F0000400040000840004040004000008008446 +:1097000000008000C0880082C0000000000000004F +:109710000001400020000000000000000000800464 +:10972000C100000000000000000000042000000054 +:109730000800000000000000030000000088000096 +:109740000200C0009000100088008800040004039C +:109750008200004000000008844000000000000873 +:1097600000000000000800000000000000000000F1 +:1097700000000000000000210000000000000000C8 +:1097800000000000000000000021000000000000B8 +:109790001000001000000000001101414000000016 +:1097A0000000C00000001000000000000011A00533 +:1097B0000000000000000000000000000800080099 +:1097C00000000000410000900084098441044090A2 +:1097D000400009C0002000881100050021000000A1 +:1097E0000000040000000000400000000000000035 :1097F0000000000000000000000000000000000069 -:10980000000000000000000000A0000000000000B8 -:10981000000000000000000000A0000000000000A8 -:1098200000840000000000000011000000000000A3 -:109830000000000000000000000000000000000028 -:109840000000000000000400000000000000000014 -:109850000000000000000000000000000000080000 -:1098600000000000000200000000000000000000F6 -:1098700000000000000000000000000000000000E8 -:1098800000000000000000000800080000000800C0 -:1098900000000000A00000008200820000008200A2 -:1098A00000000000000000000000000200100000A6 -:1098B00000000000000000000000000000000000A8 -:1098C0000000000000000000000000000000000098 -:1098D0000000000000000800000000000000000080 -:1098E0000000000000000000000000000000000078 -:1098F0000300000000000000000000000000000065 -:109900000000000000000000000000000000000057 -:109910000000000000000000000000000000000047 -:1099200000000800000000004100000000000001ED -:109930000000000000000000000000000000000027 -:109940000000000000000000000000000000000017 -:109950000000000000000000000000000000000007 -:1099600000000000000000000000000000000000F7 +:109800000000000000000010000000000000040044 +:1098100000C0000008840000110003004020052063 +:109820000000412000000000000000000000008453 +:1098300000000000000000004100000000000000E7 +:10984000000000A000000000000011400000000423 +:109850000040000020040000000000080800000094 +:1098600000001000820008000000002140000000FD +:109870000000820000000000000000000000000066 +:10988000000082000821000000080041400008009C +:10989000040000002041A00010000800000000802B +:1098A00000000000840000400000000000000000F4 +:1098B000840000000000004000090000A00000003B +:1098C0000005000000000000090000004000410009 +:1098D00000000400110000900000000000000000E3 +:1098E0000000000041000000000000004100800076 +:1098F000008400000000000000C000880000080094 +:1099000000000000000000000000000100008000D6 +:1099100000A0800011008000000080000000000016 +:109920000002009000A00000058500000300100068 +:10993000000000001100400000000200000008903C +:10994000000000840000040000000004C0000000CB +:10995000000000000000000000050000002182005F +:10996000840000000000000008000020002000002B :1099700000000000000000000000000000000000E7 -:1099800000000000000000000000000000000000D7 -:109990000000000000000000080000000800C000F7 -:1099A000080000000000C0000800080000000200DD -:1099B0000000000000000000001100000000000096 -:1099C0000000000000000000000000000000000097 -:1099D0000000000000000000000000000000000087 -:1099E0000000000000000000000000000000000077 -:1099F0000000000000000000000000000000000067 -:109A0000000000A0000000000000000000000000B6 -:109A1000000000000008000000000000000000003E -:109A20000000000000000000000000000000000036 +:109980000000000000008200000000000000C00095 +:109990000002880020002000882000804040000055 +:1099A0004000C00000004008001100110000A000AD +:1099B0000000000000000000820000000000000025 +:1099C0000000000000000800000000001100050871 +:1099D000050041900000218840000000059005042A +:1099E00003040004400400042100080000000000FB +:1099F000000000000020090000000000000000003E +:109A00000500000000000000000000000000000051 +:109A1000000000010000A10080000001000490048B +:109A2000000000000804030000000000030003041D :109A30000000000000000000000000000000000026 -:109A40000000000000000000000000000000000016 -:109A50000000000000000000000000000000000006 -:109A600000000000000000000000000000000000F6 -:109A700000000000000000000000000000000000E6 +:109A400000000000000000000000000000000041D5 +:109A5000C00000080000000000000021000210000B +:109A6000000082000008000000000000000000006C +:109A700000000000000000000000000000000041A5 :109A800000000000000000000000000000000000D6 -:109A900000000000080000000000000000000000BE -:109AA0000000000000000000000002008200C00072 -:109AB0000000009000000000000000000000000016 -:109AC0000000000000000000000000000000000096 -:109AD0000000000000000000000000000000000086 -:109AE0000000000000000000000000000000000076 -:109AF0000000000002000000000000000000000064 -:109B00000000000000000000000000000000000055 -:109B10000000000000000000000000000000000045 -:109B200000000000000000000000410000400000B4 -:109B3000000000000011008800000000000000008C -:109B40000000000000000000000000000000000015 -:109B50000000000000000000000000000000000005 -:109B600000000000000000000000000000000000F5 -:109B700000000000000000000000000000000000E5 +:109A900008000000000040000008010000800400F1 +:109AA000000000000100008200000400000000002F +:109AB0000000100000000040020000001000100034 +:109AC00000080041000500000000004100090000FE +:109AD000000041000000000041000000030003906E +:109AE0000000000000000500210441000000080003 +:109AF000000000020000000000000500100005004A +:109B00000000000400000000000000000000000051 +:109B1000000000000000000080000000040003209E +:109B200083000000000010820040000020000300BD +:109B300011004100000000000000000000000000D3 +:109B4000100000000500090021000000000000884E +:109B500000080000A0000401000000000000000058 +:109B6000000000000100C000000000000001000132 +:109B700000010001000020000001000000000000C2 :109B800000000000000000000000000000000000D5 -:109B900000000000000000000000000000000000C5 -:109BA00000000000000000000000000000000000B5 -:109BB0000000000002A021040201A0C0000000007B -:109BC0000000000000000000000000000000000095 -:109BD0000000000000000000000000000000000085 -:109BE0000000000000000000000000000000000075 -:109BF0000000000000000000000000000000000065 +:109B9000000000000000000002000000100390918F +:109BA00090218240010101888290000840900000CD +:109BB000009008900000000000000000000000007D +:109BC000000000000000000008000000000000008D +:109BD000000000000002911083110002000000004C +:109BE0000000000000000200000000000020001043 +:109BF00000080008001020200010000200000000F3 :109C00000000000000000000000000000000000054 -:109C10000000000000000000000000000000000044 -:109C20000000000000000000000000000000000034 -:109C300000000000000080C010C0800880100000FC -:109C40000000000000000000000000000000000014 -:109C50000000000000000000000000000000000004 +:109C100000000000000011100810411000028091A7 +:109C200080838308804011412021002000108000A3 +:109C300000000000800000000000000000000000A4 +:109C40000000000000000000030080000000000091 +:109C500000000000000008000300030210200000C4 :109C600000000000000000000000000000000000F4 :109C700000000000000000000000000000000000E4 :109C800000000000000000000000000000000000D4 -:109C900000000000000000000000000000000000C4 -:109CA00000000000000000000000000000000000B4 -:109CB0000000000000000000100021009000834020 -:109CC0000000000000000000000000000000000094 -:109CD0000000000000000000000000000000000084 +:109C9000000000000000000040001000100041A182 +:109CA0008080C1101111408002004100201141004C +:109CB0000000000000028000000000000000000022 +:109CC0008000000000008000000000000000000094 +:109CD00000000000000000000084010001010002FB :109CE0000000000000000000000000000000000074 :109CF0000000000000000000000000000000000064 :109D00000000000000000000000000000000000053 -:109D10000000000000000000000000000000000043 -:109D20000000000000000000000000000000000033 -:109D3000000000000000000000000020C100A100A1 -:109D4000050000000000000000000000000000000E -:109D50000000000000000000000000000000000003 -:109D600000000000000000000000000000000000F3 -:109D700000000000000000000000000000000000E3 -:109D800000000000000000000000000000000000D3 +:109D10000000000000000000000001C00100010080 +:109D200001A110908201400140900100001000014B +:109D30000100880002100000C000000000000000C8 +:109D400000000200A0004000C00000000000000071 +:109D5000000000000000000000000000C000000043 +:109D600000010000000000000000000000000000F2 +:109D700000010000000000000000000001010101DE +:109D800000010000000000000000000000000000D2 :109D900000000000000000000000000000000000C3 -:109DA00000000000000000000000000000000000B3 -:109DB00000000000000000000000000000C00020C3 -:109DC000000900000000000000000000000000008A -:109DD0000000000000000000000000000000000083 -:109DE0000000000000000000000000000000000073 -:109DF0000000000000000000000000000000000063 -:109E00000000000000000000000000000000000052 -:109E10000000000000000000000000000000000042 -:109E20000000000000000000000000000000000032 -:109E3000000000000000000000000000000000031F -:109E4000009000210003000000000000000000005E -:109E50000000000000000000000000000000000002 -:109E600000000000000000000000000000000000F2 +:109DA00000000000900000404085000900004101D3 +:109DB0008901110000C000200020A0C000000000A8 +:109DC0000000000000000000000000000000000093 +:109DD00000010001000000000000000000009000F1 +:109DE00008090041000000000000000000200020E1 +:109DF00000200002000011001100000000101010EF +:109E0000050220100000000000000000000000001B +:109E10000000000000000000000000000000000939 +:109E2000040841080008802041C10085401100114C +:109E30009110882183050000000000008080000050 +:109E4000000000000000000000000000000000050D +:109E5000000900100041000000000000000008821E +:109E60000800410010080000000000000000000091 :109E700000000000000000000000000000000000E2 :109E800000000000000000000000000000000000D2 :109E900000000000000000000000000000000000C2 -:109EA00000000000000000000000000000000000B2 -:109EB00000000000000000000000000000000000A2 -:109EC0000890882105000811000000000000000033 +:109EA00010891100410010418880C1034000030364 +:109EB00000890021000000110000000000000000E7 +:109EC0000000000000000000000000800080000092 :109ED0000000000000000000000000000000000082 -:109EE0000000000000000000000000000000000072 +:109EE00001A10000000000010000000000000000CF :109EF0000000000000000000000000000000000062 :109F00000000000000000000000000000000000051 :109F10000000000000000000000000000000000041 -:109F20000000000000000000000000000000000031 -:109F30000000000000000000000000000000000021 -:109F4000000011A0058300080100000000000000CF +:109F2000000000890100000000019140400840004D +:109F3000900000C1000000000001000000880088BF +:109F40000000000000000000000000000008000801 :109F50000000000000000000000000000000000001 -:109F600000000000000000000000000000000000F1 +:109F60000000000000E000004100000000000000D0 :109F700000000000000000000000000000000000E1 :109F800000000000000000000000000000000000D1 :109F900000000000000000000000000000000000C1 -:109FA00000000000000000000000000000000000B1 -:109FB00000000000000000000000000000000000A1 -:109FC00000000000000A0000070000000000000080 +:109FA00000000000000000E000000041000000E0B0 +:109FB00007000000600000E0000050000006000004 +:109FC000070000000000000000000000000000008A :109FD0000000000000000000000000000000000081 :109FE0000000000000000000000000000000000071 :109FF0000000000000000000000000000000000061 :10A000000000000000000000000000000000000050 :10A010000000000000000000000000000000000040 -:10A020000000000000000000000000000000000030 -:10A030000000000000000000000000000000000020 -:10A04000000000000000000000FF70B070B00000D1 +:10A020000000000000000000000000000000F0C37D +:10A03000FFC3FAFF0A0F000000000000000000004C +:10A04000000030BABA30000000000000000000003C :10A050000000000000000000000000000000000000 :10A0600000000000000000000000000000000000F0 :10A0700000000000000000000000000000000000E0 :10A0800000000000000000000000000000000000D0 :10A0900000000000000000000000000000000000C0 :10A0A00000000000000000000000000000000000B0 -:10A0B00000000000000000000000000000000000A0 -:10A0C0000000000000000000000000FF0000000091 +:10A0B00000C30FC3FAF00A00000000000000000017 +:10A0C00000000000303030300000000000000000D0 :10A0D0000000000000000000000000000000000080 :10A0E0000000000000000000000000000000000070 :10A0F0000000000000000000000000000000000060 :10A10000000000000000000000000000000000004F :10A11000000000000000000000000000000000003F :10A12000000000000000000000000000000000002F -:10A13000000000000000000000000000000000001F -:10A1400000000000000000000000FFFFC3000055F9 -:10A1500005550000000000000000000000000000A5 +:10A130000000F0F0FF3C553C550F41034103000087 +:10A14000000000005C5C00003333000000000000F1 +:10A150000000000000000F1F1F0F000000000000A3 :10A1600000000000000000000000000000000000EF :10A1700000000000000000000000000000000000DF :10A1800000000000000000000000000000000000CF :10A1900000000000000000000000000000000000BF :10A1A00000000000000000000000000000000000AF -:10A1B000000000000000000000000000000000009F -:10A1C000000000000000000000000000FFFFC300CE -:10A1D000000000000000000000000000000000007F -:10A1E000000000000000000000000000000000006F -:10A1F000000000000000000000000000000000005F -:10A20000000000000000000000000000000000004E -:10A21000000000000000000000000000000000003E -:10A22000000000000000000000000000000000002E -:10A23000000000000000000000000000000000001E -:10A2400000000000000000000000000000000061AD -:10A25000402E000D00000000000000000000000083 -:10A2600000000000000000000000000000000000EE -:10A2700000000000000000000000000000000000DE -:10A2800000000000000000000000000000000000CE -:10A2900000000000000000000000000000000000BE +:10A1B00000000000F0F0C300553C550F410341037F +:10A1C0000000000000005C5C252533330000000027 +:10A1D0000000000000000000001414000000000057 +:10A1E0000000000000000000000000000061000707 +:10A1F000000D0000000000000000000000610006EB +:10A20000000D000000610006000D00000061000666 +:10A21000000D000000000000000000000000000031 +:10A2200000000000000000000000000000000060CE +:10A230000005000D00000061000900010000006140 +:10A240003002800500000000303000900010000057 +:10A250000000000000000000000000000005006198 +:10A260000006000D00000000000000000000FF3CA0 +:10A270001717AAFF005500000000000000000000B2 +:10A280000000C8CBF8FB0000000000000000000048 +:10A290000000A0AFA0AF0000000000000000000020 :10A2A00000000000000000000000000000000000AE -:10A2B000000000000000000000000000000000009E -:10A2C000000000000000000000000000000000008E -:10A2D000448800000081002400000000000000000D -:10A2E000000000000000000000000000000000006E -:10A2F000000000000000000000000000000000005E -:10A30000000000000000000000000000000000004D -:10A31000000000000000000000000000000000003D +:10A2B0003C3C3C3C00001000FF350035303A3F3A52 +:10A2C00000000000000055550000000000000000E4 +:10A2D000000000000000000000000000000000007E +:10A2E0000000000030BA00AA0000000000000000DA +:10A2F000C3001717005500550000000000000000C3 +:10A3000000000000080B383B0000000000000000C7 +:10A310000000000030303F3F00000000000000005F :10A32000000000000000000000000000000000002D -:10A33000000000000000000000000000000000001D -:10A34000000000000000000000000000000000000D -:10A350000000000044880000000000000000000031 -:10A3600000000000000000000000000000000000ED -:10A3700000000000000000000000000000000000DD -:10A3800000000000000000000000000000000000CD -:10A3900000000000000000000000000000000000BD +:10A330000000FA05FF0000000000FF350035303A4C +:10A340003F3A0000000004AE04AE00000000000030 +:10A3500000000000000000000000000000000000FD +:10A3600000000000000000AA30BA00000000000059 +:10A370000000B2B2003CFFC3FFC3000000000000B9 +:10A3800000000000000000000000FDF13D31000071 +:10A3900000007DAF7D05000000000000000000000F :10A3A00000000000000000000000000000000000AD -:10A3B000000000000000000000000000000000009D -:10A3C000000000000000000000000000000000008D -:10A3D000000000000C0330C040801020000000008E +:10A3B00000000000FB04FF0041EBFAFAAF872D0517 +:10A3C00000FF00FFFF0F5C5CAA3CF0FF00000000F4 +:10A3D000000000000000000000000000000000007D :10A3E000000000000000000000000000000000006D -:10A3F000000000000000000000000000000000005D -:10A40000000000000000000000000000000000004C -:10A41000000000000000000000000000000000003C +:10A3F00000000000B2B2C3FFFFC3FDC100000000B7 +:10A40000000000000000000000000000CDC10D01B0 +:10A410000000000028AF2805000000000000000038 :10A42000000000000000000000000000000000002C -:10A43000000000000000000000000000000000001C -:10A44000000000000000000000000000000000000C -:10A450000000000000000C0330C0000000000000FD +:10A43000000000000000FF00FF0014BEFAFAAF8722 +:10A440002D05F0F0AAAAF0005C5CAA3CF000000028 +:10A4500000000000000000000000000000000000FC :10A4600000000000000000000000000000000000EC -:10A470000000000000000000000020002000880014 -:10A48000000000000000400040000000200020000C -:10A49000200020000002000000002000200020001A -:10A4A000000000000000000020000000000020006C -:10A4B000200000000000000200000000200020003A -:10A4C00020000000880000000000000000000000E4 -:10A4D0000000000000000000000000808200200258 -:10A4E00020000000000000000000000000008800C4 -:10A4F000000000000000000000000000000000005C -:10A500000000000000020000000000020000000047 -:10A5100000000002400000000000000000000000F9 -:10A5200000000000400000000000000200000002E7 -:10A53000000000000000000000000000000000001B -:10A540000000000000000000000000000000000209 -:10A5500000000002000000000000400000100000A9 -:10A5600000000000000000000000000000000000EB -:10A57000000000000040100000000000000000008B -:10A5800000000000000000000000000000002000AB -:10A5900000000000000000000000000000000000BB -:10A5A00000000000000000000000000000000000AB -:10A5B000000000000000000000000000000000009B -:10A5C000000000000000000000000010000000007B -:10A5D000000000000000000000000000000000007B -:10A5E000000000000000000000000000000000006B -:10A5F000000000000000000000000000000000005B -:10A6000040000000000000000000400000080008BA -:10A61000000000000004090000000000000000002D -:10A62000000000000000000000000000000800081A -:10A6300040000000000000000000000000000900D1 -:10A6400000000000000000000000000009000040C1 -:10A650002040000000000400030000000000000093 -:10A6600000000000000000004000000000000000AA -:10A670000000000000000400000000004000000096 -:10A6800000000000000000000000000000000000CA -:10A6900000000000000000000000000000000000BA -:10A6A00000000000000000000000000000000000AA -:10A6B000000000000000000000000000000000009A -:10A6C000000000000000000000000000000000008A -:10A6D000000000000000000000000000000000007A -:10A6E000000000000000000000000000000000006A -:10A6F000000000000000000000000000000000005A -:10A700000000000000000000000000000000000049 -:10A710000000000000000000000000000000000039 -:10A720000000000000000000000000000000000029 +:10A470000000000000002008200000000000001183 +:10A48000C000000020001000880084008804200024 +:10A49000A000200020002000200040004000880094 +:10A4A0002000002120008800880420002000C00037 +:10A4B000202040002000000320002000A000880091 +:10A4C00088000480000004000100400000800400B7 +:10A4D000108088800004200420002000010000007B +:10A4E000000020000000000200000000000000004A +:10A4F000C00000000000200010010000004000002B +:10A500000000000000020000000040000000000009 +:10A510000000100240022100000000004100800005 +:10A52000400010002100100040000000000000006A +:10A530001000000200000000000000000000000009 +:10A54000000000000010009000204000C100200822 +:10A5500000C020044004000300014000000004008B +:10A560000000400000004002000800402000000001 +:10A57000200000C0000000000002000002000000F7 +:10A580000102000000008400100000001000000024 +:10A5900002000000000000000000000000000400B5 +:10A5A0000400000010000800000000000000080087 +:10A5B000001000000000000010100000100000005B +:10A5C000000000000000008009000000000901C137 +:10A5D00008410809000000000200040402400800CD +:10A5E00008000800000000100041100000000000FA +:10A5F0000000000000000200000008000010001031 +:10A600000090400100900000000000C0040000081D +:10A61000000003000404000000080008000400001B +:10A620004100000041000008000041084108040802 +:10A63000040020000400040041040088000004001D +:10A64000000040000000400000100200208800844C +:10A65000400200000902000010000000001000117C +:10A660000000400000000400040011000408000085 +:10A670000500000000000000200800000000900815 +:10A680004021C000A00084008808840088080008D9 +:10A690008804001088008800A000830089008803D7 +:10A6A00000000000000900C100800400000000005C +:10A6B0008800001100000000000000000000000001 +:10A6C00000000000A00000000000880084000000DE +:10A6D000840000000000000000008208000000006C +:10A6E0000020000300000002000000000002002122 +:10A6F00000000004000000101041000000000021D4 +:10A700000000000000040000038403200202400255 +:10A710001100000000010000000003000800080014 +:10A720000000410000000300004010400400000051 :10A730000000000000000000000000000000000019 -:10A740000000000000000000000000000000000009 -:10A7500000000000000000000000080008000000E9 -:10A760000000000000000000000400080002008853 -:10A7700000000000000000000000000000000000D9 -:10A780000000000000000002000000008200000045 -:10A7900000000000000000000002000000000000B7 -:10A7A00000000000000900000000000000000000A0 -:10A7B0000000080200000000000000000000080087 -:10A7C000A0000000000000000000000000000040A9 -:10A7D0000000000000000000000000000000000079 -:10A7E00000000000000000000011880200000000CE -:10A7F0000000000000000000000000000000000059 -:10A8000000000000000010004100000000000800EF -:10A8100000000000210000002100000000000000F6 -:10A820000000000000000000000021000000000007 -:10A830000000000000000000000000000000000018 -:10A840000000000000000000000000000000000008 -:10A8500000000000000000000000000000000000F8 -:10A8600000000000110000000000000000000000D7 -:10A8700000000000000000000000000000000000D8 -:10A8800000000000000000000000000000000000C8 -:10A8900000000000000000000000000000000000B8 -:10A8A00000000000000000000000000000000000A8 -:10A8B0000000000000000000000000000000000098 -:10A8C0000000000000000000000000000000000088 -:10A8D0000000000000000000000000000000000078 -:10A8E0000000000000000000010000000000000067 -:10A8F0000000000000200000000000000000000038 -:10A900000000000000000000000000000000000047 -:10A910000000000000000000000000000000000037 -:10A920000000000000000000000000000000000027 -:10A930000000000000000000000000000000000017 -:10A940000000000000000000000000000000000007 -:10A9500000000000000000000000000000000000F7 -:10A96000000000000000000000004002400200045F -:10A97000009000000000080000000000000000003F -:10A9800000000000000000000000000000000000C7 -:10A9900000000800000008000000000000000000A7 -:10A9A000000000000000000008000000000000009F -:10A9B0000000000000000000000000000000000097 -:10A9C000080000000000000000000000000000007F -:10A9D0000000000000000000000000000000000077 -:10A9E00000000000000000008800000000000000DF -:10A9F0000000000000000000000000000000000057 -:10AA0000000000000000000000000000080000003E -:10AA100000001000000000001000002000000000F6 -:10AA20000000000000000000000000000000000026 -:10AA30000000000000000000000000000000000016 -:10AA40000000000000000000000000000000000006 -:10AA500000000000000000000000000000000000F6 -:10AA600000000000000000000000000000000000E6 -:10AA700000000800090000000000000000000000C5 -:10AA800000000000000000000000000000000000C6 -:10AA900000000000000000000000000000000000B6 -:10AAA00000000000000000000000000000000000A6 -:10AAB0000000000000000000000000000000000096 +:10A74000000003000000040000820010001005104B +:10A75000004005000300030021000040000000A0AD +:10A7600000000202000000000001000040000001A3 +:10A7700000000000000000000001000000000000D8 +:10A78000000090001000004011418400820084000D +:10A790000000C000842040000800A0090011000053 +:10A7A0008400840010000000004000000000000051 +:10A7B0000000080000000000A000080000000400E5 +:10A7C00040000000000084000400A0009000081079 +:10A7D000000000410800A00000200920000008003F +:10A7E0000000000082008200080008050800000048 +:10A7F000000000040000000000200004000200101F +:10A800000000004000840000400020C00000110053 +:10A810000000000000000020001008000000000000 +:10A8200000001000000000000000000021000000F7 +:10A83000000000840000080000200000000000006C +:10A840000000000000000000000000000000080000 +:10A85000C10100000000090041C000018201008226 +:10A86000000004002100030021001000400000004F +:10A8700000004000080000002100100004000090CB +:10A8800021000002009000000000A00040801003A2 +:10A89000C00010008810A0000000C00082108200DC +:10A8A00040118403020082008411012185000011FF +:10A8B0000000000000200000000000110000000067 +:10A8C000000000000000000000000000A0000800E0 +:10A8D00000000000821000000400A080A0102000F2 +:10A8E0000003000009100002402004098403000452 +:10A8F00000209008A0008403000000000010200049 +:10A90000000000000000000000400440210002029E +:10A910000000090041904001030000000004000114 +:10A92000400200000000800205000000080008004E +:10A930000400000000000000000000000000000013 +:10A9400000000000000000000000100005000800EA +:10A950000000090041A00000000805A00902020350 +:10A9600011A0000009000889090200000000000091 +:10A97000400040000000000000000000080000014E +:10A980000000000000000000000000210000C000E6 +:10A99000000084119000A01040040821A000A00035 +:10A9A00010208200820000000100C000000084042A +:10A9B000C00500000010000082040000000000112B +:10A9C0000008000000000800040000000000000073 +:10A9D000A000A00000000800A000A0000200088065 +:10A9E00008000900C0009080C0800180A00000081D +:10A9F0008408088400008400001000850009090014 +:10AA0000002000048200000000000000000005009B +:10AA100000000000090000002001200021000402C5 +:10AA2000004000000500000002002020000000821D +:10AA30000500100000000089000000000000000474 +:10AA400000000000000000000020040000000000E2 +:10AA5000000008200000000011881188000000009C +:10AA60000002800008820082204008100840000098 +:10AA70000300000000204100030420892140100051 +:10AA800008040388030008000000410000000000E3 +:10AA9000010090000000410802A0000290A04008C0 +:10AAA000000400A0900290A090400082900290408C +:10AAB00090400282900240029004008290040000C4 :10AAC0000000000000000000000000000000000086 -:10AAD0000000000000000000000000000000000076 -:10AAE0000000000000000000000000000000000066 -:10AAF00000010001008800C000000000000000000C -:10AB00000000000000000000000000000000000045 -:10AB10000000000000000000000000000000000035 -:10AB20000000000000000000000000000000000025 -:10AB30000000000000000000000000000000000015 +:10AAD000000000000000000000A00090004000C046 +:10AAE00001912021009100111101009040A10090DE +:10AAF000A00000000800400008889020008290021A +:10AB0000400290040082902000000000000000003D +:10AB100000000300000000009000800000800000A2 +:10AB2000800000800000000000000080088000809D +:10AB30000300098080800080858000000080008004 :10AB40000000000000000000000000000000000005 -:10AB500000000000000000000000000000000000F5 -:10AB600000000000000000000000000000000000E5 -:10AB700000000002001005000010000000000000AE -:10AB800000000000000000000000000000000000C5 -:10AB900000000000000000000000000000000000B5 -:10ABA00000000000000000000000000000000000A5 -:10ABB0000000000000000000000000000000000095 -:10ABC0000000000000000000000000000000000085 -:10ABD0000000000000000000000000000000000075 -:10ABE0000000000000000000000000000000000065 -:10ABF0000000000000000000000000000000000055 -:10AC00000000000000000000000000000000000044 -:10AC10000000000000000000000000000000000034 -:10AC20000000000000000000000000000000000024 -:10AC30000000000000000000000000000000000014 -:10AC40000000000000000000000000000000000004 +:10AB50000000000000000000000000800000000075 +:10AB60000000094180A1000400401008102180A0CD +:10AB700000119000110080000000A0000000008083 +:10AB80000080808000800080000000000000000045 +:10AB90000000A100880511804180000000A180A074 +:10ABA00080808000008380208000000000088005F5 +:10ABB00080808000002100200080000000218003B0 +:10ABC0008000000000000000000000000000000005 +:10ABD00000000000000000000000000000000091E4 +:10ABE000008900008000000000000085200089111D +:10ABF0004180891000000021808000000200214077 +:10AC00001080088000000020000300000000000009 +:10AC10000000000003001000850803082000908257 +:10AC200004C0820804009082048210204000900238 +:10AC300004A01008040090042040020820009004A2 +:10AC400004820284000000000000000000000000F8 :10AC500000000000000000000000000000000000F4 -:10AC600000000000000000000000000000000000E4 -:10AC700000000000000000000000000000000000D4 -:10AC800000000000000000000000000000000000C4 -:10AC900000000000000000000000000000000000B4 -:10ACA00000000000000000000000000000000000A4 -:10ACB0000000000000000000000000000000000094 -:10ACC0000000000000000000000000000000000084 -:10ACD0000000000000000000000000000000000074 -:10ACE0000000000000000000000000000000000064 -:10ACF0000000000000000000000000008400900040 -:10AD00000000000000000000000000000000000043 -:10AD10000000000000000000000000000000000033 -:10AD20000000000000000000000000000000000023 -:10AD30000000000000000000000000000000000013 -:10AD40000000000000000000000000000000000003 -:10AD500000000000000000000000000000000000F3 -:10AD600000000000000000000000000000000000E3 -:10AD700000000000000000000000000020000000B3 -:10AD80009100000000000000000000000000000032 -:10AD900000000000000000000000000000000000B3 -:10ADA00000000000000000000000000000000000A3 -:10ADB0000000000000000000000000000000000093 -:10ADC0000000000000000000000000000000000083 -:10ADD0000000000000000000000000000000000073 -:10ADE0000000000000000000000000000000000063 -:10ADF0000000000000000000000000000000000053 -:10AE00000000000000000000000000000000000042 -:10AE10000000000000000000000000000000000032 -:10AE20000000000000000000000000000000000022 -:10AE30000000000000000000000000000000000012 -:10AE40000000000000000000000000000000000002 -:10AE500000000000000000000000000000000000F2 -:10AE600000000000000000000000000000000000E2 -:10AE700000000000000000000000000000000000D2 -:10AE800000000000000000000000000000000000C2 -:10AE900000000000000000000000000000000000B2 -:10AEA00000000000000000000000000000000000A2 -:10AEB0000000000000000000000000000000000092 -:10AEC0000000000000000000000000000000000082 +:10AC60000041000300001020101008009082119095 +:10AC7000102000C0C00000001010A00400009000D0 +:10AC8000900221081108200090042082088400000E +:10AC900000000000000000000001000101019120FF +:10ACA0000090000483020304009000040410034099 +:10ACB0000090080405100304009084212003A120C3 +:10ACC00000900804201000000000000000000000B8 +:10ACD0000000000000000001000000000000000073 +:10ACE000880000000000040010020110000010C0E5 +:10ACF000000100400488A00000000000008501C1A0 +:10AD00000390889004202002032000904020C084FB +:10AD100000000000000000000009001000210308EE +:10AD2000020000000080028084800000008080809B +:10AD3000C10000008080A080C1A0000500404089C3 +:10AD40004100000080800080000000000000000042 +:10AD500000000000000000000001000000000000F2 +:10AD6000000000000000000080008000048041001E +:10AD700090800020218589418002004000020090DF +:10AD80000983C100800000000580C1000000800030 +:10AD90008080000000000000000000898021808089 +:10ADA0000021000800210000000000008008800051 +:10ADB0000000000080030000000000088021000067 +:10ADC00000000000009000000000000000000000F3 +:10ADD0000000000000000000000000010000000072 +:10ADE0000000000080110021000080002004020209 +:10ADF000038040000485A1800300110800000008C2 +:10AE0000000000008088008280000040002000C018 +:10AE100000080000000000000000000084C1108451 +:10AE2000020284012000A02008904000200004209D +:10AE30000290020020000440209008004000820898 +:10AE4000829088002000A0034090200000000000B5 +:10AE500000000000000000000000000000010000F1 +:10AE6000000000000000C00120004000820001003E +:10AE7000019001840000910410109088100190004E +:10AE8000100020A008000420A021849008004001A8 +:10AE9000A0024090080000000000000000006000D8 +:10AEA00000E0000041000000000007000021000059 +:10AEB000000007000000000000E00700480000005C +:10AEC00000000700480000000000070048000000E4 :10AED0000000000000000000000000000000000072 -:10AEE0000000000000000000000000000000000062 -:10AEF0000000000000000000000000000000000052 -:10AF0000840000E0000000000000000000000000DD -:10AF10000000000000000000000000000000000031 -:10AF20000000000000000000000000000000000021 +:10AEE0000000000000000000000600000700000055 +:10AEF0000082000007000000600000E00000008207 +:10AF000000060000070000000000000007004800E5 +:10AF100000000000070048060000000000000000DC +:10AF2000FFF00F0000000000000000000000000023 :10AF30000000000000000000000000000000000011 :10AF40000000000000000000000000000000000001 :10AF500000000000000000000000000000000000F1 -:10AF600000000000000000000000000000000000E1 -:10AF700000000000000000000000000000000000D1 -:10AF800000000000000000000000000000000000C1 +:10AF600000000000000000000000F03C66FF000050 +:10AF7000000000000000CFCF030300000200000922 +:10AF80000009000000000000FFFF000000000000BA :10AF900000000000000000000000000000000000B1 -:10AFA00000000000000000000000000000000000A1 +:10AFA00000003636363600000000000000000000C9 :10AFB0000000000000000000000000000000000091 :10AFC0000000000000000000000000000000000081 :10AFD0000000000000000000000000000000000071 -:10AFE0000000000000000000000000000000000061 -:10AFF0000000000000000000000000000000000051 -:10B000000000000000000000000000000000000040 +:10AFE000000000000000000000000000F03C6600CF +:10AFF0000000000000000000CFCF030300000000AD +:10B000000009000900000010FF0066660000000053 :10B010000000000000000000000000000000000030 -:10B020000000000000000000000000000000000020 -:10B030000000000000000000000000000000000010 -:10B040000000000000000000000000000000000000 -:10B0500000000000000000000000000000000000F0 +:10B0200000000000000000000000000002102000EE +:10B030000088100402102000008810040210200074 +:10B040000088108402102000008810840210200064 +:10B0500000881084000000000000000000000000D4 :10B0600000000000000000000000000000000000E0 :10B0700000000000000000000000000000000000D0 -:10B0800000000000000000000000000000000000C0 -:10B0900000000000000000000000000000000000B0 -:10B0A00000000000000000000000000000000000A0 +:10B0800000000000000000000000000000000210AE +:10B090002000008810840210200000881084000026 +:10B0A0000000000000000000000024E724E700008A :10B0B0000000000000000000000000000000000090 :10B0C0000000000000000000000000000000000080 :10B0D0000000000000000000000000000000000070 :10B0E0000000000000000000000000000000000060 -:10B0F0000000000000000000000000000000000050 -:10B1000000000000000000002727272700000000A3 +:10B0F000B020B92900000000242400000000000254 +:10B100004203420383830303000000000FFF0FFF8D :10B11000000000000000000000000000000000002F -:10B12000000000000000000000000000000000001F +:10B1200000000000000000000000000003033F3F9B :10B13000000000000000000000000000000000000F :10B1400000000000000000000000000000000000FF :10B1500000000000000000000000000000000000EF :10B1600000000000000000000000000000000000DF -:10B1700000000000000000000000000000000000CF -:10B180000000000000000000000027272727000023 -:10B1900000000000000000000000000000000000AF -:10B1A000000000000000000000000000000000009F +:10B1700000002020292900000000242700000000F2 +:10B18000000042034203434342420000000000FF2C +:10B1900000FF0000000000000000000000000000B0 +:10B1A00000000000000000000000006100068005B3 :10B1B000000000000000000000000000000000008F -:10B1C000000000000000000000000000000000007F -:10B1D000000000000000000000000000000000006F +:10B1C000000000614007000D000000614006000D16 +:10B1D000000000000000001000010000000000005E :10B1E000000000000000000000000000000000005F -:10B1F000000000000000000000000000000000004F -:10B2000000000000000000000000000000610007D6 -:10B21000800D200000000000000000000000000081 +:10B1F00000000000A0000A200000000000613036BE +:10B20000009D00A000613000800100050061303623 +:10B21000004D000000614006000D0001000000002C :10B22000000000000000000000000000000000001E -:10B23000000000000000000000000000000000000E +:10B230008282828200000000000000000000000006 :10B2400000000000000000000000000000000000FE -:10B2500000000000000000000000000000000000EE +:10B250002CEC2FEF000000000000000000000000B8 :10B2600000000000000000000000000000000000DE -:10B2700000000000000000000000000000000000CE -:10B2800000000000000000000000000000000000BE -:10B2900000000000000000000000000000000000AE +:10B270000000000000000000000000000000003C92 +:10B28000003C00000000CF0FC3000CAE0C0C00000F +:10B290000000B2C3B2FF0000000000000000000088 :10B2A000000000000000000000000000000000009E -:10B2B000000000000000000000000000000000008E +:10B2B0000000003C033F0000000000000000000010 :10B2C000000000000000000000000000000000007E -:10B2D000000000000000000000000000000000006E +:10B2D000000020E023E30000000000000000000068 :10B2E000000000000000000000000000000000005E :10B2F000000000000000000000000000000000004E -:10B30000000000000000000000000000000000003D -:10B31000000000000000000000000000000000002D +:10B30000FF0A000A000000008F0F82000CFF0C5D96 +:10B3100000000000B200B23C00000000000000008D :10B32000000000000000000000000000000000001D -:10B33000000000000000000000000000000000000D +:10B33000000000003F3FA0AF000000000000000040 :10B3400000000000000000000000000000000000FD :10B3500000000000000000000000000000000000ED :10B3600000000000000000000000000000000000DD :10B3700000000000000000000000000000000000CD -:10B3800000000000000000000000000000000000BD -:10B3900000001428418200000000000000000000AE -:10B3A000000000000000000000000000000000009D -:10B3B000000000000000000000000000000000008D +:10B380000000FF0CFF14000000005F1F5514F82898 +:10B39000F8FF00000000000000000000000055B4AD +:10B3A000FFB40000000000000000000000000000EA +:10B3B0000000000000003030A0AF000000000000DE :10B3C000000000000000000000000000000000007D :10B3D000000000000000000000000000000000006D :10B3E000000000000000000000000000000000005D :10B3F000000000000000000000000000000000004D -:10B40000000000000000000000000000000000003C -:10B41000000000001428418200000000000000002D -:10B42000000000000000000000000000000000001C -:10B43000000000004000200000002000000020006C -:10B44000200020004000000000002000200020001C -:10B45000200020000000200000004000000040000C -:10B4600020002000C0000000C00000000000880094 -:10B470000000200000038800000000002000000001 -:10B48000200000002000000000000000000000007C -:10B4900004000400040000000000020020008800F6 -:10B4A0002000000020000004000000000000000058 -:10B4B000200020002000000000000000000000002C -:10B4C000000000000000000000000000000000007C -:10B4D000000000000000000000000000000000006C -:10B4E0000000000000000000000400000000000058 -:10B4F000000040000000000000000000000000000C -:10B50000000000000000000000000000000000003B -:10B5100000008000800080000000000000000000AB -:10B52000000000000000000000000000000000001B -:10B53000000000000000000000800000000000008B -:10B5400000000000000008000000000000000000F3 -:10B550002000200020000900004000000000000042 -:10B5600000000000000008000000000008000010BB -:10B5700000000000000008000000000000000000C3 -:10B580000000000000000000080000400000000073 -:10B59000080000000000000008000000004000005B -:10B5A0000000000002000000080000000000000091 -:10B5B0000000040000000000001000100000000067 -:10B5C00004004008000800000008000800084110BE -:10B5D0000004800080008000208400000000000043 -:10B5E000000000400040000000400004000840004F -:10B5F000200000000000000000000000000000002B -:10B6000000000000000000000000000800100040E2 -:10B610000000000000000000090000000010001001 -:10B6200003100010000000000000000800000000EF -:10B630000000000000080000000000000000000002 -:10B6400000020000000000000000000000040000F4 -:10B650000000000000000000A00000040000000046 -:10B6600000000000000000000000000800000000D2 -:10B6700000000000000000000000000000000000CA -:10B6800000000008000800000000000000000000AA -:10B6900000000000000000000000000000000000AA -:10B6A0000000000088000000000000000000000012 -:10B6B000000000000000000000000000000000008A -:10B6C000000000000000000000000000000000007A -:10B6D000000000000000000000000000000000006A -:10B6E000000000000000000000000000000000005A -:10B6F000000000000000000000000000000000004A -:10B700000000000000000000000000000000000039 -:10B710000000000000000000000008000000000021 -:10B720000000000000000000004000400002000097 -:10B7300000000040000000000000000000000000C9 -:10B7400000000000080000000003000000000021CD -:10B7500000000000000000000000000000000000E9 -:10B7600000000000000000000000040000000002D3 -:10B7700008000000000000000800000000000000B9 -:10B78000000000000800000000008200C000080067 -:10B79000C0000000000000000000040800000010CD -:10B7A0000000000000000000000200000000000097 -:10B7B0000000000000000000000000000000000089 -:10B7C000000008000002100010000000400003000C -:10B7D0000300080008000300000000000000210032 -:10B7E0000000080000000000080000000800000041 -:10B7F00000000008000000A000A000000000000001 -:10B8000000000000000810080010001000000000F8 -:10B810000000000008000300080000008000000095 -:10B8200000000000004000000000000000000000D8 -:10B830000000000000000000000004000000000004 -:10B840000000000090000000000000000000000068 -:10B850000000001100000000000000400000000097 -:10B8600000000000000000000000000000000000D8 -:10B8700000000000000000000000000000000800C0 -:10B88000000000000000C0000000A0000000000058 -:10B8900000000000000000000000000000000000A8 -:10B8A0000000000000000000000000000000000098 -:10B8B0000000000000000000000000000000000088 -:10B8C0000000000000000000000000000000000078 -:10B8D0000000000000000000000000000000000068 -:10B8E0000000000000000000000000000000000058 -:10B8F0000000000000000000000000000000000048 +:10B40000000000000C0C1414000000000F1F0014BA +:10B41000282828280000000000000000000000008C +:10B4200000B4AAB40000000000000000000000000A +:10B43000000000000000C080000020A0C000884084 +:10B440000084028210000000400088000084010097 +:10B4500041848500C0030000020320030100200096 +:10B460008884200040000504C0900504C100848445 +:10B470002104200400034002C00288004004400070 +:10B480002000C0A00180842004008800200010005B +:10B4900020000000880205100000A002000000004B +:10B4A0000000408282008900400088804000201116 +:10B4B00000000000840010000008410200030000AA +:10B4C0000041210221110000400000004000000462 +:10B4D0002004080420C0000000000000800040009C +:10B4E00040000008000000002000400504000800A3 +:10B4F0000010020200000000200000000000000018 +:10B50000000000004005200800C040004040000846 +:10B5100080000002200020000801000021000090AF +:10B52000000000008003000040A080000008200010 +:10B530000900000440C0000000000020820000005C +:10B540001041000002004000000004000000400024 +:10B55000020800000200050004080000400004008A +:10B5600004000400080004000000000004000800BB +:10B5700000030110000308000000000005000400A3 +:10B58000018004004000000000008800000000105E +:10B590000000200021041010022008000800000014 +:10B5A0000800000000004000080502101002020020 +:10B5B000089002801004200002C000000001020078 +:10B5C0000000800000000000A00000000008000053 +:10B5D00082008000000000000404000400008900D4 +:10B5E0002004090040040000000005004010000095 +:10B5F0004184400404010008040000000404040025 +:10B60000A0000402000084002000000000000504E7 +:10B61000000004008000820080022009C000800039 +:10B620000000000000000000800040000001000950 +:10B63000800880108004C1058000040540C084009B +:10B64000884088000000A008A00000000000000062 +:10B65000A00008000800080008088200040200009A +:10B660008411000200000000000000000000000043 +:10B67000000000000002012000000008000000009F +:10B680009000C000901140400000400000200400E5 +:10B690004000900320000408080800020000000099 +:10B6A00088000000000000040000000900400008BD +:10B6B000010200210000000000080180001041206C +:10B6C00005204100000800002100210003001000B7 +:10B6D000030021A0050221004100410008004102B1 +:10B6E00008000000210241000000000000000900E5 +:10B6F0000000080000000000080100000000000039 +:10B7000000000000400000000300090000000001EC +:10B71000110020000000000000A0800003A01184A0 +:10B7200009820500098209820504098805000501CE +:10B7300008004000009000000000080008400001E0 +:10B74000000084000000040000030000C00041006D +:10B7500084000000080000200800000009098200A1 +:10B76000840000008200000008000040000000008B +:10B7700000000000C100080082000110000002204B +:10B78000000004000000C0000800000000000800E5 +:10B7900008000000080000008240080801028280C2 +:10B7A0000180080008000800820082000000C0003C +:10B7B00011000000080000008200C000000000002E +:10B7C00008000300000000028000200000C0008884 +:10B7D000C00010004000210011901000000008007F +:10B7E00010000000108841904100100000A00000EF +:10B7F0000500081000082084000000000801000077 +:10B80000800000008804110000A00000000000007B +:10B810000004000000002100089000000091089042 +:10B820000302200811000320000000822188080084 +:10B8300003882000008800880088000000040002BF +:10B840000200101040000400A0201020000000049E +:10B850000800C04000004000080008081000080070 +:10B8600000001000000088000040000800000000F8 +:10B870000000820000000000000000000000000046 +:10B880000000100000000000000000008200040022 +:10B8900004000000010009000000880002001003FD +:10B8A00000208200C0009000040000008403080013 +:10B8B00084210820A00800008200824100110008B5 +:10B8C00000210021000011088400000100840340D1 +:10B8D0000000030009002100000021000000080012 +:10B8E00041000800080021902100210021000300F0 +:10B8F0000800030000000300000003000000000037 :10B900000000000000000000000000000000000037 -:10B910000000000000000000000000000000000027 -:10B9200000000000000000000200000000000020F5 -:10B9300000000000000002400000000000000000C5 -:10B9400000000000000000000020010000000000D6 -:10B95000000000000000000000004000080000009F -:10B9600000000000000000000000000000000000D7 -:10B9700000000000020000000000000000000000C5 -:10B9800000000000080000000000000000000000AF -:10B9900000000000000000000000000000000000A7 -:10B9A0000000000000000000000000000000000097 -:10B9B0000000000000000000000000000000000087 -:10B9C00000000000000000000000008240001100A4 -:10B9D00003880090110000024100002000001000C8 -:10B9E0000500000000000000000000000000000052 -:10B9F000000000000000020000000008000021001C -:10BA00000000000000000000000000000000000036 -:10BA10000000000000000000000000000000000026 -:10BA2000000000000000000000000800080020885E -:10BA300011040000000000000000000000000000F1 -:10BA400000000000000000000000000000020210E2 -:10BA500000A100080000000000000000000000003D -:10BA600000000000000000000000000000000000D6 -:10BA700000000000000000000000000000000000C6 -:10BA800000000000000000000000000000000000B6 -:10BA900000000000000000000000000000000000A6 -:10BAA0000000000000000000000000000000000096 -:10BAB0000000000000000000000000000000000086 -:10BAC0000000000000000000000000000000002056 -:10BAD000802000080020000000000000000000009E -:10BAE0000000000000000000000005000000000051 -:10BAF0000000000000000000000000000000000046 -:10BB00000000000000000000000000000000000035 -:10BB10000000000000000000000000000000000025 -:10BB20000000000000000000000000000000000015 -:10BB30000000000000000000000000000000000005 -:10BB400000000000000000000000000000000000F5 -:10BB500000800008008000050000000000000000D8 -:10BB600000000000000000000002000000020000D1 -:10BB700000000000000000000000000000000000C5 -:10BB800000000000000000000000000000000000B5 -:10BB900000000000000000000000000000000000A5 -:10BBA0000000000000000000000000000000000095 -:10BBB0000000000000000000000000000000000085 -:10BBC0000000000000000000000000000000000075 -:10BBD00000000002000000820000000000000000E1 -:10BBE0000000000000000000000000010000000153 -:10BBF0000000000000000000000000000000000045 -:10BC00000000000000000000000000000000000034 -:10BC10000000000000000000000000000000000024 -:10BC200000000000000000000000000000000040D4 -:10BC300000000040000000000000000000000000C4 -:10BC400000000000000000000000000000000000F4 -:10BC500000000000900001000000C0000000000093 -:10BC600000000000000000000000000000000400D0 -:10BC700000000100000000000000000000000000C3 -:10BC800000000000000000000000000000000000B4 -:10BC900000000000000000000000000000000000A4 -:10BCA0000000000000000000000000000000000094 -:10BCB0000000200000000000000000000000000064 -:10BCC0000000000000000000000000000000000074 -:10BCD00000000000000000000800050080000000D7 -:10BCE0000000000000000000000000000000000054 -:10BCF00080000000040000000000000000000000C0 -:10BD00000000000000000000000000000000000033 -:10BD10000000000000000000000000000000000023 -:10BD20000000000000000000000000000000000013 -:10BD300040000000000000000000000000000000C3 -:10BD400000000000000000000000000000000000F3 -:10BD500000000000000000002100A0000300A0007F -:10BD600000000000000000000000000000000000D3 -:10BD700000000000000000000000000000000000C3 -:10BD800000000000000000000000000000000000B3 -:10BD900000000000000000000000000000000000A3 -:10BDA0000000000000000000000000000000000093 -:10BDB0000000000000000000000000000000000083 -:10BDC0000000000000000000000000000000000073 -:10BDD0000000000000000000000091000400A0002E -:10BDE00088000000000000000000000000000000CB -:10BDF0000000000000000000000000000000000043 -:10BE00000000000000000000000000000000000032 -:10BE10000000000000000000000000000000000022 -:10BE20000000000000000000000000000000000012 -:10BE30000000000000000000000000000000000002 -:10BE400000000000000000000000000000000000F2 -:10BE500000000000000000000000000000000000E2 -:10BE600000000006000000000000000000000000CC -:10BE700000000000000000E00000000000000000E2 -:10BE800000000000000000000000000000000000B2 -:10BE900000000000000000000000000000000000A2 -:10BEA0000000000000000000000000000000000092 -:10BEB000000000000000000000000700000000007B -:10BEC0000000000000000000000000000000000072 -:10BED0000000000000000000000000000000F0F57D -:10BEE000F3F300000000000000000000000000006C -:10BEF0000000000000000000000000000000000042 +:10B910008300808800000400020011000590A00848 +:10B920002004004011000302200003000008000072 +:10B930001100210403000590110000002100000007 +:10B94000000000000000000000008400C020000093 +:10B9500082002000820000020800C00000001000E9 +:10B960000803C0000800088000000000000000027A +:10B970000000000000110221000000400040000013 +:10B980000000000000100400000008009000820089 +:10B9900000000021040000050000000000089008DD +:10B9A00000000000010011001000040082004000AF +:10B9B0000803000510408200040000210000080078 +:10B9C000C0000210032000000100034000004101FC +:10B9D0000000000011000088208800000000002006 +:10B9E000080000900888080008100300000000000C +:10B9F0000000000000001000100000000000418462 +:10BA000005000000000000002000000000002000F1 +:10BA1000000000001100800000000900000000008C +:10BA20000888410011001002040020000088410035 +:10BA3000000040000902008809900900008400000D +:10BA40001100090080010800030008001000908820 +:10BA50004082101000000000A00000000000010063 +:10BA60008401000003000000200104000000100118 +:10BA700000010001000100000000000000000000C3 +:10BA8000010090000002008800A000C0000000003B +:10BA9000010088000000A000000800C000C088C0AD +:10BAA000000000A08810C011888820C082C100A0BA +:10BAB0000040002040020010008882880002040933 +:10BAC0000805008940A091C0882083900420A00030 +:10BAD00080008080808000001100000000000002D3 +:10BAE0002120000800028903080841088005200879 +:10BAF0000008090300080041000900090040400057 +:10BB000000004000000000000000000000000000F5 +:10BB1000000010000000000005000080020000008E +:10BB2000000000000080000080419100800580023C +:10BB30000080008000000080008010000000008075 +:10BB4000004180A1004000041183A080A141800039 +:10BB500000000000800080800400A0000500C1807B +:10BB60000900000000000240108041002040200534 +:10BB700010802100040010090000000000000000F7 +:10BB80000000000000100080000000100000000015 +:10BB9000000000000000000000800000000300849E +:10BBA00080100000000000000000100002410800AA +:10BBB000C10080100009808580001000020005008F +:10BBC0000200008080088000000340800909119174 +:10BBD0000003100000008488901009000300010099 +:10BBE000C1A00008000000000001010200000000E8 +:10BBF0000108011001000100010000000000000028 +:10BC0000000000000000000100040000000000101F +:10BC1000000000000000002000000004A0C0A001FF +:10BC2000000390C10000001000000000829000039B +:10BC300001C0C10008000800A002040001000108C2 +:10BC40000000010020020201A088080188400901CB +:10BC50008391A0019000008800881003000000017B +:10BC600004010001000001000101000000210100A9 +:10BC7000008800C100000000010001000000000079 +:10BC80000000000000900800008800204000000034 +:10BC90000000020000000100000140010000908847 +:10BCA00000A09090020200040010000010C00002EA +:10BCB00000A0A09101112002000200020210000069 +:10BCC00000000001A000081000100010A0102002C9 +:10BCD0008989854089C180110010000300C10020BE +:10BCE00000100002202000001003102100000010AE +:10BCF0000305404009A000002000100041000000A2 +:10BD0000210004000000000000000000000000000E +:10BD100000000000000000001009000800100020D2 +:10BD2000800000008080C080000000800000008053 +:10BD3000000303A100210941000000000000800071 +:10BD400000110003002100020000110041808880E2 +:10BD500080C1898990A091C1001180088080000075 +:10BD600000800080000000200880052003001008EB +:10BD700008104008080009080080000010001004A6 +:10BD800000020000000000000000000800000000A9 +:10BD90008008802100000000000000000041000039 +:10BDA0000000C110048505801000000000000000A4 +:10BDB0000000C182008005800240000000000000F9 +:10BDC000800000050000000000119004A0808400A5 +:10BDD0000500C1A09109C080A12188012088109090 +:10BDE0009000004000820002000101A0000001005C +:10BDF0000001000900010100000100A00000010095 +:10BE00000000000000000000000000000001000031 +:10BE10000000C001A00010001000000000000001A0 +:10BE200000000000910102400040C100000000003D +:10BE3000000000001140888202041001C000088840 +:10BE40000888A0000020000000000000C101A0023E +:10BE500084828200C0C1910820049101000000008A +:10BE600007000000000000000000000000000000CB +:10BE700000000000818100E007000000880000E071 +:10BE80000000000A0000000000000000880000E040 +:10BE90000700000000000000070000000000000094 +:10BEA000000007004200880000E0070000000000DA +:10BEB000000000000000500A00E007004100000000 +:10BEC000000000000000810000E000000000000011 +:10BED000000000000000000000E007008400F8FD02 +:10BEE000080D00FF00FF000000000000000000003F +:10BEF00000000000000000000000FFD7004100002B :10BF00000000000000000000000000000000000031 -:10BF10000000000000000000000000000000000021 -:10BF20000000000000000000000000000000000011 -:10BF30000000000000000000000000000000000001 -:10BF400000000000000000000000000000000000F1 -:10BF500000000000000000000000000000000000E1 -:10BF6000FFF5F3F3000000000000000000000000F7 -:10BF700000000000000000000000000000000000C1 +:10BF100000003CFF3C3C28FF30FF00000000000018 +:10BF2000000000000000000000FF00FF282D787DC9 +:10BF3000000000000D0D09090A000000BA7530BAB2 +:10BF40000A0CFAFCCFC0CFC00000000000000000C7 +:10BF5000EF2030303C300C00F0F00000303FFAFAB7 +:10BF6000F8FD080D0A0AFAFA0000000000000000BF +:10BF7000000000000000000000000000FFFF0000C3 :10BF800000000000000000000000000000000000B1 -:10BF900000000000000000000000000000000000A1 -:10BFA0000000000000000000000000000000000091 -:10BFB0000000000000000000000000000000000081 -:10BFC0000000000000000000000000000000000071 -:10BFD0000000000000000000000000000000000061 -:10BFE0000000FFF708000000000000000000000053 -:10BFF0000000000000000000000000000000000041 +:10BF9000000000003C003C3C28283030000000003D +:10BFA000000000000000000000002828EBEB282D16 +:10BFB000787D000000000A0A04040C000000303004 +:10BFC00030300A0C0A0CFFF00F00000000000000E7 +:10BFD0000000202030301C101C10B1F00100303F58 +:10BFE000F0F0D717D7173CFF3C550000000017179B +:10BFF0003F3F0000000000000000000000000000C3 :10C000000000000000000000000000000000000030 -:10C010000000000000000000000000000000000020 -:10C020000000000000000000000000000000000010 -:10C030000000000000000000000000000000000000 -:10C0400000000000000000000000000000000000F0 -:10C0500000000000000000000000000000000000E0 -:10C0600000000000FF34CB000000000000000000D2 -:10C0700000000000000000000000000000000000C0 +:10C0100000000000000000000000313101010000BC +:10C020000000000000000000000000007F707F7032 +:10C03000FDFD3D3D4343020200000000003C000FB7 +:10C04000000000002F2F28282F7F2A7A00000010E0 +:10C050000000000053535353F0F07050000A3C3C72 +:10C0600000000004141714173CAA3C000000000054 +:10C07000171703030000000000000000000000008C :10C0800000000000000000000000000000000000B0 -:10C0900000000000000000000000000000000000A0 -:10C0A0000000000000000000000000000000000090 -:10C0B0000000000000000000000000000000000080 -:10C0C0000000000000000000000000000000000070 -:10C0D0000000000000000000000000000000000060 -:10C0E00000000000000000614006000D000000009C -:10C0F00000000000000000000000000000000061DF -:10C100000007000D0000000000000000000000001B -:10C11000000000000000000000000000000000001F -:10C12000000000000000000000000000000000000F -:10C1300000000000000000000000000000000000FF -:10C1400005180A00050005A000000000000000001E -:10C1500000000000000000000000000000000000DF -:10C1600000000000000000000000000000000000CF -:10C1700000000000000000000000000000000000BF -:10C1800000000000000000000000000000000000AF +:10C09000000000000000000000000000F131C101BC +:10C0A00000000000000000000000000000004F4001 +:10C0B0004F40C1C101014343020200000000003CA7 +:10C0C000000F55553C3C0FFF00F025752070000017 +:10C0D000001000000000FFF30000F0F07070000A94 +:10C0E000555A000000000061000E000D00000061C4 +:10C0F0000006000D000500610006000D0000006153 +:10C100000029809100A000610007800D00000061FF +:10C110000006000D00000061000F800D00A0A000CF +:10C12000400800000000000005610A0E050D00A097 +:10C130000061000F800D0000000030000090000042 +:10C1400000003030C00900080000000000000000BE +:10C1500000613006C0090000A0610006000D00006B +:10C16000A061200900400001000000003CF03CAA52 +:10C1700000000000EAEA00551717FFC30A0F0A0F74 +:10C180000004000000100000ECECECEC00000000EB :10C19000000000000000000000000000000000009F -:10C1A000000000000000000000000000000000008F -:10C1B000000000000000000000000000000000007F -:10C1C000000000000000000000000000000000006F -:10C1D000000000000000000000000000000000005F -:10C1E00000000000000000000000008000000000CF -:10C1F000000000000000000000000000000000003F -:10C20000000000000000000000000000000000002E +:10C1A0000000000000000000000000000000040487 +:10C1B0000000AE0C5D0C000000000000000000005C +:10C1C000000030305050000000000000000000006F +:10C1D000000000000000000000FFB3B0333000009A +:10C1E0000000CF0CCF0C05F5F9F9000000003CF081 +:10C1F0003CAA000000004040005517173C00FAFF21 +:10C20000FAFF0000000000000000EFEFEFEF000079 :10C21000000000000000000000000000000000001E :10C22000000000000000000000000000000000000E -:10C2300000000000000000000000000000000000FE -:10C2400000000000000000000000000000000000EE -:10C2500000000000000000000000000000000000DE -:10C2600000000000000000000000000000000000CE -:10C2700000000000000000000000000000000000BE -:10C2800000000000000000000000000000000000AE -:10C29000000000000000000000000000000000009E +:10C23000005000000C0C0C0C00000000000000007E +:10C240000000000030305050000F001000000000CF +:10C250000000000000000000BCBC00FF8380030061 +:10C2600000000000CF0C4D8E05F50909000000000C +:10C270000000000000000000AABEF0FCCF0C7D7D95 +:10C28000C3C3414100000000200000005FFC5F0CC0 +:10C290000100AB001F1FFF140000000000000000A1 :10C2A000000000000000000000000000000000008E :10C2B000000000000000000000000000000000007E -:10C2C000000000000000000000000000000000006E -:10C2D000000000000000000000000000000000005E -:10C2E000000000000000000000000000000000004E -:10C2F000000200000000000000000000000000003C -:10C30000000000000000000000000000000000002D -:10C31000000000000000000000000000000000001D +:10C2C00000000000000050503030E000C3000000CB +:10C2D0000000000000000000000000AA50503D05D2 +:10C2E0007D5500000000F5F5A0A0287D287D000008 +:10C2F00000000000000000000000003C003CCF0CEB +:10C300004141C3C3C3C3080000000000000050FC4B +:10C31000500C01000100141414140000000000006F :10C32000000000000000000000000000000000000D :10C3300000000000000000000000000000000000FD -:10C3400000000000000000000000000000000000ED -:10C3500000000000000000000000000000000000DD -:10C3600000000000000000000000000000000000CD -:10C370002100210020102002200088102004040049 -:10C3800000000000200088000000200000000400E1 -:10C390002080200084002000000900000000000030 -:10C3A0000080200020002000C0002000C0002000ED -:10C3B00000030000000004004000200020000000F6 -:10C3C0002000000020000000200020002000880045 -:10C3D0002000000020002000200020002000880015 -:10C3E0002000000020008800000000000400400041 -:10C3F000C000840084008001800100000001400032 -:10C4000000000000000000000000000000004000EC -:10C4100000000020000009000000000000000000F3 -:10C420000000000480000000800000000000000008 -:10C4300000000000000000000000000080008000FC -:10C440000000800040000000000000008000A0000C -:10C4500000008000000080008000800000000000DC -:10C460004000090000000000000000000000000083 -:10C470000002000008000000000000000000008032 -:10C4800000000000000000000000000001000100AA -:10C490000000000020002000000400040109010049 -:10C4A0000100010005000400012000200000000040 -:10C4B000000000000000000000000000001100006B -:10C4C00000000000008000000000000000000000EC -:10C4D000010000000400000021000004010400002D -:10C4E000000000000000000000000000000000004C -:10C4F00000000000000080000000000000000000BC -:10C5000000200000000800000000000000000440BF -:10C5100004400000000080008000000102012008AB -:10C52000200820002008A004800020010001000055 -:10C530000000008400000000000000000000000077 -:10C5400000900090000000200000000000000000AB -:10C550000088040000008000000084000001040145 -:10C5600004000000000000000000000000000000C7 -:10C5700000000000000000000003008000800009AF -:10C58000000000000180010000000008000400031A -:10C590000000000200000000000000000002000097 -:10C5A000000000000000000000000000000000008B -:10C5B0000008000000000000000000000000000073 -:10C5C000000000000000001100000000000000005A -:10C5D00000000000000000000000000090000000CB -:10C5E000900090000000000000000000000000002B -:10C5F00000000040000000000000100000200020AB -:10C6000000000008000020200400000000010001DC -:10C61000000000000000000000000000000000001A -:10C6200000000800000008000000000000000000FA -:10C6300000000000000000000000000000000000FA -:10C6400000000000000000000000000000000000EA -:10C6500008000000000000000000000000000000D2 -:10C6600000000000000000000000000000000000CA -:10C670000002000000000000000000000880000030 -:10C680000400040040802000820920000100010015 -:10C690000500090000004000822008200000004042 -:10C6A00000008200000008090000080000000000EF -:10C6B00000000800840082000000820000000800E2 -:10C6C00008000800820000008200A004830000002F -:10C6D000000082000000002000202020082091207F -:10C6E0000009082000000000000000000000000019 -:10C6F00000000000080008000800000008004020BA -:10C700004000210085000320A1A021008302200811 -:10C71000208820A020020002000008010083000001 -:10C720000000400000000000410000000000000088 -:10C7300011000000000000000000000000000000E8 -:10C740000000080000000800030040000001040091 -:10C7500003001000000000000801400183011001E7 -:10C76000400100002001088800A000000000000037 -:10C770000300000000000000000000000000400076 -:10C7800040000000000040001000000800200020D1 -:10C79000000008000011A00000000000C008000018 -:10C7A0000000000008400000004100000000000000 -:10C7B0000000000000000000000000000000000079 -:10C7C0000000000000000000000000000000000069 -:10C7D00000000000820000000000000000000000D7 -:10C7E0000000000000000000000000000000000049 -:10C7F0000000000000000000000000000000000039 -:10C800000000030000000088089000000000000104 -:10C810000001000000000000030000000000000014 -:10C820000000000000000000000000000000000008 -:10C8300000000000000000000000000000000000F8 -:10C8400000000000000000000000000000000000E8 -:10C8500000000000000000000000000000000000D8 -:10C8600000000000000000001100000000000000B7 -:10C8700000000000000000000000000000000000B8 -:10C8800000000000C020042040020010200004002E -:10C89000828208030080A0800089018000000000DF -:10C8A000000000000000000000000000002100095E -:10C8B00082410041000000000000000000410041F2 -:10C8C00000410041000000000000080000000000DE -:10C8D00000000000000004000000000082000000D2 -:10C8E00000000080040000000020000000000000A4 -:10C8F0000020000000000000000000000000000018 -:10C900000000000000001000000008004101A1200C -:10C91000080000044100210800080008100200007F -:10C92000030000000300000020044000000000009D -:10C9300011200000030000000000000000000000C3 -:10C9400000000000001000000000000000000000D7 -:10C9500000000004000000000300100005000000BB -:10C96000410000000820000000000000000011004D -:10C9700000000000000000000000000000000000B7 -:10C980000000000008000000409002A003400210D8 -:10C9900000A0909000A0009000000100880000001E -:10C9A0000000000000000000000000000000000087 -:10C9B0000000000000000000000000000000000077 -:10C9C0000000000000000000000000000000000067 -:10C9D0000000000000000000000000000000000057 -:10C9E0000000000000000000000001000001010044 -:10C9F0000001000000000000000000000000000036 -:10CA00000000000000000000000040008200200044 -:10CA100080801180800040000000000002000500BE -:10CA200000030000000000000000000000001100F2 -:10CA300000000000000040000000000000000500B1 -:10CA400000000000000000000000000000000000E6 -:10CA500000000000000000000500000000000000D1 -:10CA60000000000000000000400000000800210855 -:10CA700004000004000000000000000000000000AE -:10CA80000000000000000000000000002010022153 -:10CA90008004A080000800800041000000400000E9 -:10CAA00002400000000000800000000000090000BB -:10CAB00000090000000200000010000000040080D7 -:10CAC00000080080000000000000000000000000DE -:10CAD0000000000000000008000000080000000046 -:10CAE0000000000000000002008000020080200022 -:10CAF00010000000008000000000000000000000A6 -:10CB00000000000000000000000000000000910094 -:10CB1000A12008C1820400010004000800400000B8 -:10CB200000000100000000000004000000080000F8 -:10CB300000000000000000010000000100000001F2 -:10CB400000080000000800000000000000000000D5 -:10CB500000000000000000000000000000000020B5 -:10CB600000000000000000000001000800010004B7 -:10CB700001A00020000000040000000000000000F0 -:10CB800000000000000000000000000000000000A5 -:10CB9000028504A182410941A000C00004000900EF -:10CBA0000001C0000001010100000000820000003F -:10CBB0000000100000000000000040000000010024 -:10CBC00000008200080000000000000000000000DB -:10CBD0000000000000000000000000002000000035 -:10CBE0000100000000000000000000004000A00064 -:10CBF000000000010100C000000100000000000072 -:10CC00000000000000000000000000000000000024 -:10CC100000008588808800A182104000800080008C -:10CC200041000010002100100441400000000000FD -:10CC300000000300000000000900000000000000E8 -:10CC40000200090000008000400000000000000019 -:10CC50000000000000000000000000000000800054 -:10CC600000001000000000000000000005000000AF -:10CC700000004000202020210000004000000000B3 -:10CC800000000000000000000000000000000000A4 -:10CC90000000000000400003808000200000804071 -:10CCA0000000000000090000000003000000004038 -:10CCB0000000000000000004000000000000000070 -:10CCC0000000000000000040000000000000000024 -:10CCD000000000000000000000000000000000084C -:10CCE0000004000000000000000000000000000040 -:10CCF00000400000000021A100400800404000006A -:10CD00000000000000000000000000000000000023 -:10CD100000000000000090092040049002008800FC -:10CD200002012000C000000100000000000000001F -:10CD300000000000000000000001000000000000F2 -:10CD400000000000000000000001000000000000E2 -:10CD500000000000000000000000000000000000D3 -:10CD600000000001000000000000000000000000C2 -:10CD7000000000000000000001A10000010001010E -:10CD800000000000000000000000000000000000A3 -:10CD90000000000000000000000000E007000000AC -:10CDA000000000E007008212000000E00000000028 -:10CDB0000000000007000000484200E007000000FB -:10CDC000000000E000000000000A00E00700000092 -:10CDD0000000000000000000000000000000000053 -:10CDE0000000000000E0070000000000000000005C -:10CDF0000000000000E007000000480000E007001D -:10CE00000000000000000000000000000000000022 -:10CE1000000000000000000000003F3F3030000034 -:10CE2000FFFF000100000000000000000000000003 -:10CE300000000000000000000000000000000000F2 -:10CE400000000000000000000000000000000000E2 -:10CE500000000000000000000000000000000000D2 -:10CE600000000000000000000000000000000000C2 -:10CE700000000000000000000000000000000000B2 +:10C340000000000000000000505030302000C3000A +:10C3500000000000000000000000000014BE50506B +:10C360003D053C00000000005F5F0A0A2D782D7833 +:10C37000000021004002C000400020000100C082F7 +:10C3800010052008000404008980101000000080BF +:10C39000848020008800C010208588800100200053 +:10C3A0004105C0000500880004002000840004004E +:10C3B000000388002005880020008800210000205C +:10C3C00082002000200088000200050020002100DB +:10C3D000009020002002000000000011200000005A +:10C3E00020400000000088000000218000000000C4 +:10C3F000000000004084800105000000800240022F +:10C4000020030002410041001000404009410000AB +:10C4100000104010000000C00001000200024002B5 +:10C420008000080000000200000020000000000062 +:10C430000000000000000000000000000000A090CC +:10C440000001000040000000040080000200000025 +:10C450000402001141001000100000004000000024 +:10C4600000000000000000000002000020040000A6 +:10C470000002000002000000000010001000020096 +:10C4800000000800880000000200020000002000F8 +:10C49000020000000410020300008210400040006F +:10C4A000000008080900010001000000052000004C +:10C4B0000000020000000240041000100000048090 +:10C4C0000420000000000510200001408220000030 +:10C4D0002010000020800000200020008408008040 +:10C4E000040000080000020002000040840903C0AC +:10C4F000020008000241000000000000A0088000C7 +:10C5000080000000800040000000000000000000EB +:10C51000400000080000000180000000401184007D +:10C52000808800000009A000208420000004A001F1 +:10C5300000000004808400008000008200010000F0 +:10C540000020000100000010080180002089200167 +:10C5500000008000000082100000000000000000C9 +:10C5600000040000000000000000000000080000BF +:10C57000A040000080080000000490000000C000FF +:10C58000A00002000000A00082000020C000A00067 +:10C590002000C00020001000C004A000A000000087 +:10C5A0000000000041000021000500000000000024 +:10C5B0000005000900000008000000210009092111 +:10C5C0000000000000000000902100050003C008EA +:10C5D00000000008001100000021A0000000080871 +:10C5E00020002004C00000400040904100000805E9 +:10C5F000840382000000000000080500000000C065 +:10C6000009840400A00810002102080000000800AE +:10C610000000880011000500000800000000000074 +:10C620000400000200004090080209000000000021 +:10C630000000000021000000200000000010001099 +:10C6400008100010000011000300000000000000AE +:10C650000000000010A1410041A003A0210005003E +:10C660008308412088000000030000A00084080027 +:10C6700083000300008208A000000000C0009011A9 +:10C68000C10201208200020002000104A002C000D9 +:10C69000C0001020000040008400000000001000D6 +:10C6A0000010102000080000204000400900000990 +:10C6B000C000000010A000C0830901200000A009F4 +:10C6C000000210400203A00000000000C0000010A3 +:10C6D000A000082001408220004104000410A005B1 +:10C6E0008820080508408280011100001010000019 +:10C6F00000000800101000200820080000200000A2 +:10C700002100200108010300800011004001000009 +:10C71000000003000400000000000800000000000A +:10C72000410808850000410008888000410004009D +:10C7300003000000100000041005040020080000A1 +:10C740000000004041008482080000000400000056 +:10C750000082000011A120900008110000100801C3 +:10C7600000000000000000200304080010000091F9 +:10C77000410000020000000021000800000000004D +:10C780008400A000410040000000080020000800D4 +:10C7900040008200A0000808840008002000040077 +:10C7A00082008200900082031000C0218204A00059 +:10C7B00000000000010000020000004000111040D5 +:10C7C0000000081100000000000400210000824168 +:10C7D000090500000900098020200803000000046A +:10C7E00009040003A000C0040320C002C000A00090 +:10C7F00000400000001000000100000000000040A8 +:10C80000880000001020A002000209000000830040 +:10C81000910011A02008000000020802000080849E +:10C820000504412005004088400000000000000190 +:10C8300000000000080002A0088800000004008832 +:10C84000000000002000110400040804028200021D +:10C85000212004000082C08240022100000220004A +:10C8600000A1020404902100418888840591000001 +:10C870000040204004880089050408900000210041 +:10C8800000002100C00082000000C0022100020060 +:10C89000820008088202A0049000880020008280A4 +:10C8A000900000804000000000020800A02100006D +:10C8B000000441000021080000080005404100007C +:10C8C0000580002000000405000204410003000868 +:10C8D000080000000221000040000021100309218F +:10C8E000C000000800419000A0024000C000840287 +:10C8F000A0000085A0084000880004044000000952 +:10C900002000842000001000000021041000A0007E +:10C910008000000080000000080000000802808203 +:10C9200000044100000485000000100041000000E8 +:10C9300000000085A00000000800100008000000B2 +:10C940002100A004002100000400000021C000001C +:10C9500000022004000020000000A10008848000E4 +:10C9600020004100001000000000008203000000D1 +:10C9700000004000001020900800000000000800A7 +:10C9800000040000000000000000C00000000000E3 +:10C990000000110082000000000000000000000004 +:10C9A0000285A0040004828208010000000010013A +:10C9B000000000009000000000820190842000A090 +:10C9C000008800100004001000004000000000007B +:10C9D00088000010909000A082A040C0900000004D +:10C9E00008C0890110000000A000401090040082DF +:10C9F000900282909005008290050240900400828F +:10CA000090048800000000004000000000001000BA +:10CA100000000000900090000000000000000000F6 +:10CA200000008010002010208020800800100020CE +:10CA3000802011411121C003000000000800820085 +:10CA40000080200000804100000000008000000005 +:10CA500000000000000080800900800080808000CD +:10CA600000008000A041A1110041000580800080ED +:10CA700003800380A00400C0088300A0858000809C +:10CA800000800080800000001000000020001000E6 +:10CA900008050403200309000503C180000000000D +:10CAA000000000000040000380088000000000003B +:10CAB00000008000090000001108080203100203B2 +:10CAC00010031180004000048020808000000000DE +:10CAD00000100011000000008008000080008000AD +:10CAE00083201185808040000010A08041038000D9 +:10CAF000000400830000800200210080000000008C +:10CB00000021002000000004000080008000408818 +:10CB100089000100A001830040009100C1A0000035 +:10CB2000000000000000A000908404C104C0820046 +:10CB300010000088C0000000000001000101000199 +:10CB4000000001A000021001909010119008000058 +:10CB5000000000020002000000001001A000900090 +:10CB6000080010000483088811C02002851091116C +:10CB70000400900240080884840090A0900840C0FF +:10CB80004000900404842084A001A000040004005C +:10CB9000000000000000000000012000080000016B +:10CBA0000000000000000000C1A002904004C0048A +:10CBB00000040090000200100000000101010100CB +:10CBC00010002000A001040009000800A0001000CF +:10CBD000000100100000009000C09040020890A0EA +:10CBE00000A004080010A004400200880088829180 +:10CBF00000C0A10400900240C020058201908490F2 +:10CC0000032003400090080288200040008808A00C +:10CC100000C0000000000000000000408041000350 +:10CC200003400000000000000000C000A1000880D8 +:10CC300082800080040010800000000200020220B8 +:10CC4000100980050041800880114100800000002B +:10CC500009000001008000000000008080800000CA +:10CC60008000000000910080800000800011098594 +:10CC700041A104804180000000008000C1800200CA +:10CC800091008400C10000008080000000800080CE +:10CC90000000008041000400210020040083008087 +:10CCA0000080000400000000000000008002000579 +:10CCB000800080000002800000800000418421008C +:10CCC0000400111180008000000000028000800834 +:10CCD00000000000000180000000000080008002D1 +:10CCE000008200000000C191048041000020820207 +:10CCF000890009000800804080A0000300000003B4 +:10CD00000084008000800020008280000000000578 +:10CD10000000000000000120004001400101000867 +:10CD20000004008400000000000000000000040176 +:10CD300082A002820200000002104040820001C076 +:10CD4000000000000101C010A000200088011000B8 +:10CD500090881010100000010800880020000800D2 +:10CD60009001A041A0A04000C1C0001084040401B3 +:10CD70001000828203C008000800200304824000E3 +:10CD80008200A020040488024001A0854082400067 +:10CD90000000000000000000000600E007000000A6 +:10CDA000000000E0000000000000000000000000A3 +:10CDB000000000E00700820A000000000000000000 +:10CDC000000000E000004200000000E0070000005A +:10CDD000000000E00700420000000000000000002A +:10CDE0000000810000E007000000840A00E0070066 +:10CDF0006000840000E00700000000000000070061 +:10CE00004806000000E0070048000000000007009E +:10CE10004800008100E00700000000000000000062 +:10CE20000000000000000000000000000000000002 +:10CE300000000000000000000000E626E626624632 +:10CE4000F3CF0000000000000000101000F0000010 +:10CE500000002C2030300000000000000000000026 +:10CE60003C006600FCFFFCF0F0F0FF3CC3C36666CC +:10CE7000FFFF000000090009F330F0F0000000009F :10CE800000000000000000000000000000000000A2 -:10CE90000000000000000000000000006F606F60F4 -:10CEA0000000FF87000100000000000000000000FB -:10CEB0000000000000000000000000000000000072 -:10CEC0000000000000000000000000000000000062 -:10CED0000000000000000000000000000000000052 -:10CEE0000000000000000000000000000000000042 -:10CEF0000000000000000000000000000000000032 +:10CE900000000000000000000C0CFF60000000001B +:10CEA0000000000000000000000000000000000082 +:10CEB000000000000000000000000000E626E6265A +:10CEC0009189F3CF00000000000000000000000086 +:10CED000000000002C200000000000000000000006 +:10CEE0000002000066000C0F0C00F0F0003C0F0F79 +:10CEF0000000FFFF100000010008F330666600002C :10CF00000000000000000000000000000000000021 -:10CF10000000000000000000000000000000000011 +:10CF1000000000000000000000000C0C0060000099 :10CF20000000000000000000000000000000000001 -:10CF300000000000000000000000000000000000F1 +:10CF300000000000000002102000008810840000A3 :10CF400000000000000000000000000000000000E1 :10CF500000000000000000000000000000000000D1 :10CF600000000000000000000000000000000000C1 :10CF700000000000000000000000000000000000B1 -:10CF800000000000000000000000000000000000A1 -:10CF90000000000000000000000000000000000091 -:10CFA000363666668DFF81FF3C3C3C3C000000004D +:10CF80000210200000881084021020000088108405 +:10CF90000210200000881084000000000000000043 +:10CFA0000000000000007E7E000000000000000085 :10CFB0000000000000000000000000000000000071 -:10CFC0000000000000000000000000000000000061 -:10CFD0000000000000000000000000000000000051 -:10CFE0000000000000000000000000000000000041 -:10CFF0000000000000000000000000000000000031 -:10D000000000000000000000000000000000000020 -:10D010000000000000000000000000000000000010 -:10D0200000003636663C0072007E3C3C1C3C000032 -:10D0300000000000000000000000000000000000F0 -:10D0400000000000000000000000000000000000E0 -:10D0500000000000000000000000000000000000D0 -:10D0600000000000000000000000000000000000C0 -:10D0700000000000000000000000000000000000B0 -:10D0800000000000000000000000000000000000A0 +:10CFC000000000004E4E3F3F000000000000000047 +:10CFD000FBFBFB000000000001420166000FF0FFB8 +:10CFE0000000000000000000000003C33FFF0F0F1F +:10CFF0000F0FC3C342422065000000000000000084 +:10D00000C3C300000000000000000000000000009A +:10D010000000000000000000000000000000FF030E +:10D02000C3000000000000007C7C0000000008003D +:10D0300004000000000000000000000000000000EC +:10D040000000000000004E4E03030000000000003E +:10D050000000FFFFFF000000000001000124363641 +:10D0600036360000000000000000000000C03CFC5C +:10D070000066FF6600004242000000000000000061 +:10D0800024E424E400000000000000000000000090 :10D090000000000000000000000000000000000090 -:10D0A0000000000005610A0F050D00A005610A0FD0 -:10D0B000050D00A000000007000C000005000A0894 -:10D0C000050000A00571002F800D00000061000721 -:10D0D000000D000005610A2F050D00A000000000F2 -:10D0E00000000000000000000000000000000061DF -:10D0F000000F000D00A0000000000000000005610E -:10D100000A0F050D00A005610A0D850100A00000B1 -:10D11000000000000000000000000000000000000F -:10D12000000000000000000000000F0F000F0000D2 -:10D1300000000000000000003C3CFFFF0100000078 -:10D1400000000000000000000000000000000000DF -:10D1500000000000000000000000000000000000CF +:10D0A000FF03C30000610027000D000000610007BE +:10D0B00000090005000000000000000000610007FA +:10D0C000001D000000610006000D00050061000762 +:10D0D000000D0000A0610007000D00000561300F89 +:10D0E000050D00A10000000030000090000000616C +:10D0F000000F800D0000A0612034C0090000006016 +:10D100003000C0410001000040000000000000614C +:10D110000007000D0000000000000000000000619A +:10D120000037004D00013D3DFF05000000000000FC +:10D130000000BE3CC0C00000000000000000000075 +:10D140000000000000000000000000000000FF00E0 +:10D150003C3C5FAF1C2C00000000000000200000E1 :10D1600000000000000000000000000000000000BF -:10D1700000000000000000000000000000000000AF -:10D180000000000000000000050501013C3C3030BB +:10D170000000000000000000F000000FC3C3C3C3A4 +:10D18000FF575757C0FFC0FF00000000000000001D :10D19000000000000000000000000000000000008F -:10D1A0000000000000000000000000001F1F001F22 -:10D1B000000000000000000000003C3C00000100F6 +:10D1A000000000000000000005050505000000006B +:10D1B000000000008200C0C000000000000000006D :10D1C000000000000000000000000000000000005F -:10D1D000000000000000000000000000000000004F +:10D1D0003C3C0F0F5FAF43830000000000000000E5 :10D1E000000000000000000000000000000000003F -:10D1F000000000000000000000000000000000002F -:10D200000000000000000000000005050101000012 +:10D1F00000000000000000000000F000000FC3C3AA +:10D20000C3C3FF5D5D5D00FF00FF00000000000084 :10D21000000000000000000000000000000000000E -:10D2200000000000000000000000000000000000FE -:10D230000000000000000000000000003C3C00FF77 -:10D2400000000000000000000000000000000000DE -:10D2500000000000000000000000000000000000CE -:10D2600000000000000000000000000000000000BE +:10D220000000000000000000000000000000A0E17D +:10D23000555500000000A0FF28FF0000000000007E +:10D2400000000C00040000000000FCA8F3A2000095 +:10D250000000FF00FF00AAFF000000000000D77DD3 +:10D26000D07000000000000000000000000000007E :10D2700000000000000000000000000000000000AE -:10D2800000000000000000000000000041144114F4 -:10D2900030303030000000000000000000000000CE +:10D28000FFFFFFFF575D03033CFF00C300000000EA +:10D2900000000000AF7DAF2800000000000000008B :10D2A000000000000000000000000000000000007E -:10D2B00004040000000000000000000000003C3CEE -:10D2C00000FF00000000000000000000000000005F -:10D2D000000000000000000000000000000000004E -:10D2E000000000000000000000000000000000003E +:10D2B000A0E1000000000000A0A02828000000005D +:10D2C000000000000C00000000000000A8FCA2F319 +:10D2D00000000000FF0FF000EBFFC3C300000000E0 +:10D2E000D77D070D000000000000000000000000D6 :10D2F000000000000000000000000000000000002E -:10D3000000000000000000000000000000004114C8 -:10D310004114101010100000000000000000000078 -:10D3200000000000000000000000000000000500F8 -:10D330000409050020002000040000000000200077 -:10D3400020002000200004002000000000008800D1 -:10D3500020008800882004000400040004008800E5 -:10D3600084002000200020002000C000880000036E -:10D3700000102010040004000400880000000000D9 -:10D380002000008020008400000000000000200039 -:10D3900000002000200002002000000000008405A2 -:10D3A0002000000020008800000500050005200581 -:10D3B00020000000100080000000000000000000BD -:10D3C0000000000000000400000040000000000019 -:10D3D000000000002002000180008000900080001A -:10D3E0000000050000000000000000000000000038 -:10D3F00000000000000100000000800000000000AC -:10D40000000000000002000000000000000000001A -:10D41000000000000000000000000000000000000C -:10D4200000000000000000000000000000000000FC -:10D430000000000001000100000000000000840066 -:10D4400000000000000000000000000000000000DC -:10D45000000000000000008000000140010000808A -:10D4600001000000000002000000000000000000B9 -:10D4700000000000004000000000000000800000EC -:10D48000000000000000000000000000000000009C -:10D49000000000000000004000000000000000004C -:10D4A00000000000000000000000000320202020F9 -:10D4B0002020202020002000200000000008000084 -:10D4C0000000040000100000000000000000000048 -:10D4D000008400000000000000200010200920004F -:10D4E00000402000000000000000090000000000D3 -:10D4F000000000000000000000000000000000200C -:10D500000000000800000000001000000000000003 -:10D51000000000000000000000000000000000000B -:10D52000000000080000000000000000000085016D -:10D530008001800180010000820300880800000053 -:10D540000000000000000002100200400000000285 -:10D5500000020002000920200080000200110002E9 -:10D5600000400088004001000000010000000000B1 -:10D5700000000000000000000000000000000000AB -:10D58000000000000000000000000000000000009B -:10D59000000000000000000000000000001100007A -:10D5A000000300020002000200020002000200006C -:10D5B000000000000000000521000000000803201A -:10D5C0000000000000000000000000010001000059 -:10D5D000000000000000000000010020000000002A -:10D5E0000000008500400001200000002000000035 -:10D5F000000000000000000000000000000000002B -:10D60000080000000000080000000000000000000A -:10D6100000000800080000000000000000000000FA -:10D620000000008400000000000000000000000076 -:10D6300008000000000000840000820010001000BC -:10D6400004000000200020002000400040004000B6 -:10D6500040001000000008000000080000008400E6 -:10D660000800100000001004100008000900080065 -:10D670008300820040008200000000000000820061 -:10D68000000082008200080082000000000082008A -:10D69000000010000000000000000000000010006A -:10D6A00001000840400008004000000000000000A9 -:10D6B0000000000004002109040004000000000034 -:10D6C00003001000008880008082800010000002AB -:10D6D0000082050000000000000000A02100000002 -:10D6E0000900210011002100400104000000200079 -:10D6F0000000200000000000000000000000080002 -:10D7000000000800080000000000080000000500FC -:10D7100005000500000020000000200009000000B6 -:10D72000000020000000410000080000211000005F -:10D7300000000000000080008400800080000000E5 -:10D74000C000090810800005088000050100C00322 -:10D75000A002000982020003002100090821000044 -:10D7600000090000000900000000000000000000A7 -:10D7700000000000000000000000000000000000A9 -:10D7800000000000A00008009000C0008200080017 -:10D79000000000000000C0000004401182000041B1 -:10D7A000002120400040200000020009000000008D -:10D7B0000000000000000002000000002000200027 -:10D7C00009C000A002A0880809000002050040006E -:10D7D0000000030010002184000000000000000091 -:10D7E0000000000000000000000008000000000031 -:10D7F0000000000000000000000000000000000029 -:10D800000000000000000000000000000000110007 -:10D810000000000000000000000000000000000008 -:10D8200000000008800800088008000000000000D8 -:10D830000000000000000000000000000000800068 -:10D8400080001000100082004008200410800003B7 -:10D850000802A0210000000390030821000200003C -:10D86000100200009000402000000800000040006E -:10D87000000000000008000000000000000084001C -:10D880000000000000000000000000000800400050 -:10D8900000004000A0000800C000A0008200900925 -:10D8A000084000000100000000002000000000000F -:10D8B0000020000000210000040000002000000003 -:10D8C0000000000080A0C000008803008000000469 -:10D8D0000308000000000500000000000000000137 -:10D8E00000000000008800000000000000000000B0 -:10D8F0000000000000000000000000000000000028 -:10D900000000000000001000000000000000000007 -:10D9100008000000000000000000000008000000F7 -:10D9200000A000830082204010A0100080000000B2 -:10D930000000410000001000030000000000800013 -:10D9400000000000000002101004008808A08240BF -:10D9500010824011040508030004009004414110A6 -:10D960008288009004820000000000000000000097 -:10D970000000019090000000000000000000000086 +:10D300000000F5FFF5FF030C03033CFF00C3000022 +:10D31000000000000000057D05280000000000005E +:10D3200000000000000000000000000000002000DD +:10D330000800A00020102080848020008800881031 +:10D3400001002005820020042000410805052080FE +:10D3500000002000C0002004000420040404200475 +:10D36000C000200488040400200220038800000379 +:10D370000400848488002004208400032004200406 +:10D3800085048800A000040440084000208000803C +:10D3900088002011000020804000000220002000B2 +:10D3A0000400208000002000000020000000000099 +:10D3B0002100C000200041014104000410002000B1 +:10D3C00000400200000000000891400020202000E2 +:10D3D000402020A04000000040900002000010000B +:10D3E0001000000000000400050000002100000003 +:10D3F0000000000040101000044021040000400024 +:10D40000090040000000004000020041C10000028D +:10D41000091000000040000004020000000040006D +:10D4200009004000000200000000000000000000B1 +:10D43000000000000040000004020008000000801E +:10D4400000800404000085050041020005002189D8 +:10D45000A00001000020020004000000000088007D +:10D46000000001030110400000000000000900005E +:10D4700000000000000400000000000000020200A4 +:10D4800000100800040010000400000000000880E4 +:10D49000020000900000000000004010000000406A +:10D4A00000000000002100800000000000000000DB +:10D4B000000002000008000141840001000409008E +:10D4C00000040404A0010000200200000000C000CD +:10D4D00010080002080200090008200000080000EF +:10D4E00000000000100840058400008420080000AF +:10D4F00000020008000000004190001000000483BA +:10D5000000100000008800880400000400000002F1 +:10D5100084020000001100000000000080000000F4 +:10D52000000800000010000000020082000000005F +:10D53000008800000400C0210000100000008400EA +:10D5400000008400400040889003000400000108AF +:10D55000822101004008400000000021002100005D +:10D560000008002000050002000282030002000003 +:10D570000000000000020000000000090800002177 +:10D5800090040000020000080020C00000000021FC +:10D59000000004000000000000008800C000C0027D +:10D5A00004089000A00000214000900000008200CC +:10D5B0004000200084000008000000080000210056 +:10D5C00000000984210400A0412011020500030885 +:10D5D0002002090004002188009000A00000000043 +:10D5E00000824110418203A00302000000000002FB +:10D5F00000A00000000002840000000000840088F9 +:10D60000008800C0030800000002000008080000B5 +:10D61000000021002100000420C008C000000020FC +:10D620000501000000002190050000000000082016 +:10D6300000000300000000000000A00000004008FF +:10D64000C000040084000100000040000804022023 +:10D6500001008580A10040911100A0001000C100D0 +:10D660001000C000100000000811000800000400B5 +:10D6700000008200040400000841000000000400D3 +:10D6800008001000000982110009040008000000D1 +:10D690000008C0040800000004000800C000A0103A +:10D6A0000000C0000800041000000800080082000C +:10D6B00000008200080082000000000000A0008836 +:10D6C00002000000000000000800110000820009B4 +:10D6D0008289040008020400A00404000000410044 +:10D6E00004840000000040000000000011820300DC +:10D6F00021080800098811200000000000000040F7 +:10D700000088000011900300000041000000008824 +:10D71000418808C0000008000000002009000084C3 +:10D72000001000000000008800C0008800200000F9 +:10D7300000020000210000000900000000000000BD +:10D740000000844000000010080000000080080075 +:10D75000020000200200100220001000A0210100A1 +:10D76000A000A000400082028200100040000000E3 +:10D77000004100044091004000080000002100002A +:10D780000000000000000800A000000008000000E9 +:10D790000000040082088200C0210900012004006A +:10D7A00000040002C000000090000000000008001B +:10D7B00000008200000000000000000000001005D2 +:10D7C000050000040404000010842100000004048B +:10D7D0000000800000018000030180908084080028 +:10D7E00004000088000480A000000000050000087C +:10D7F00005084100000388102000000241040020B9 +:10D80000000020A021040002000000000020000011 +:10D8100000020000000000000000000040081000AE +:10D820000000210000002100008803842100030083 +:10D8300005002184004021040000000000000800D1 +:10D84000040000008203100001000000000000003E +:10D85000002140840403000411004000900008A04F +:10D86000008000210020002100200005080240095E +:10D870000005C0410100010000410000040000005B +:10D880000002000008000000000004022000002048 +:10D8900000110000104108094000082108008280A2 +:10D8A0000400020400109020081100058211C0003D +:10D8B000820082082002000000000000A002000098 +:10D8C00000038221002040000000049005000000B9 +:10D8D00000200202004180820485200280000000B6 +:10D8E0000809401000004101000200010010080476 +:10D8F000111000000000208204880884212000020A +:10D9000000002090000000200200408402008000FF +:10D910000084110040000088008805000000208875 +:10D9200000020400091100102100210040C0110074 +:10D93000000000000900800000000000000000005E +:10D9400000000000000000080088A002000208019A +:10D9500000002000C0000000000000A00100000145 +:10D96000010088000101000001001000000000001B +:10D970000000000000000000018884880002000010 :10D980000000000000000000000000000000000097 -:10D99000000000000000000000A04008000200108D -:10D9A000400400400002901004900040011010104C -:10D9B0000000000000000000000000000000000067 -:10D9C00040830000000400088000008040118000B7 -:10D9D000401105088503008884C000A10040802014 -:10D9E000A00300210003808300000000000000006D -:10D9F0000000000002000000000000000500000020 -:10DA000000000000000000000000400000000000D6 -:10DA100000000000000000000000058300830011EA -:10DA200000858080000000000080000000000200EF -:10DA30000080000000000000000000000000000066 -:10DA400000004002212140850080110500A080884F -:10DA50008080830880844008A0A0000000C00000EF -:10DA60000090000000900002008300000000000011 -:10DA7000000000200010000500000005000000402C -:10DA80000000000000000000000000000000002175 -:10DA90000000000000000000000000000000001076 -:10DAA00080800041000000828085808080080085A1 -:10DAB00080890080000000000000000000000000DD -:10DAC000000000000200212185800000400102C109 -:10DAD000088202C004A004C003C009C010C010C066 -:10DAE000C040C0C1A08210C1A04188C10000004058 -:10DAF0000000004000000009000000C0000000001D -:10DB000000000000000000C0000000000000000055 -:10DB1000000000000000000000000000000090A0D5 -:10DB2000820182409001100088C1100204C00200EE -:10DB300010C0041002C0000000000000000000003F -:10DB400000000000000083400000400800008388BF -:10DB50004088C082828811882004C0031002218876 -:10DB60000088C02004C083880082C0104188000063 -:10DB70000000400000000000200040000100000004 -:10DB80002000000000000000000000000000000075 -:10DB9000000000000000000001000000C0000000C4 -:10DBA000820001000200A00091820088C0880288E3 -:10DBB00005028202C0A08390000000000000000067 -:10DBC000000000000000000040830010000400007E -:10DBD000C109000080008400C1031140C021C005BC -:10DBE00041000900A0000000410000808000020008 -:10DBF00040000000000000004000000000000400A1 -:10DC000000000000000020000000000000000000F4 -:10DC10000000000000000040000041000000000083 -:10DC2000000000002100C100200041000000800031 -:10DC30000000C1800000800004000000000000001F -:10DC400000000000000000000000000200820285C9 -:10DC500000008003049000800000A18220800480E6 -:10DC600008402105A01041804000A140A040C08094 -:10DC70000300000000030000000000000005000099 -:10DC80000000000000000000000000000000000094 -:10DC90000000000000000000008000000040004183 -:10DCA00000000000A12083800900C0000000008265 -:10DCB00080008000000200008000000000000000E2 -:10DCC000000000000000000000000000024000C052 -:10DCD0008580020004002002104010000304890225 -:10DCE000A0408400050011A002820300050021105D -:10DCF000100811000000000000000000000000A05B -:10DD00000000000000000000000000000000000013 +:10D990000000000100000000000000000000000185 +:10D9A00011A104000010C0040000010000000000EC +:10D9B00000000000000000000001010084010000E0 +:10D9C0000000000000000000000000000080008057 +:10D9D0000011410205208008000000001100110024 +:10D9E0000341050421102110000005008000000003 +:10D9F000000000000000000040002000C100000006 +:10DA00000000000000000000000000000000000016 +:10DA100000000009000304030009001100030011C5 +:10DA2000094091C180030041809100000200000084 +:10DA3000000000000000000000000010100088112D +:10DA400000200000000000000000000000000000B6 +:10DA500080004180020020110808002080000002A0 +:10DA6000000002054010410989C10905208909000B +:10DA70000380000000000000000088801000820584 +:10DA8000C1100000000000000000000000000000C5 +:10DA90000000000000400000004000800000000086 +:10DAA00000000000850003419111410302001000B5 +:10DAB00003004000000000000000000000C0110052 +:10DAC000030209A100000000000000000000A00007 +:10DAD0000000C0020090000000010000000110C022 +:10DAE000000100842002C108849008050800090490 +:10DAF00040049008000000000000000002109000A8 +:10DB000090000983000000400000000000000000B9 +:10DB10000000000000000000000000010004000000 +:10DB200000000000000003904000A190830100006D +:10DB3000010000000000000000000000000000C024 +:10DB400000000001000300000000000000001000C1 +:10DB5000000100012000000200830082009101000A +:10DB60002000820201000001A1001000000000005E +:10DB700000000201000100000000000000000001A0 +:10DB8000040104002101000000000000000000006A +:10DB90000000000000000000000000000100000084 +:10DBA000000000000000000008104102890409087C +:10DBB0000000000002010000000000000000000062 +:10DBC000000000010801000100000000000000004A +:10DBD00000020010000208090080009041081111A5 +:10DBE000200080000000040000050803022002035A +:10DBF000400000400021000800000000000000007C +:10DC000000028011800341110000000000000000AC +:10DC10000000000000000000000000000000020002 +:10DC20000000000021001000000080008880838038 +:10DC30000580004100058021000500000000000073 +:10DC400000000010000383212020000000000000DD +:10DC50000000000000820000000000042011080005 +:10DC60000303004000100000008009880921408063 +:10DC700003110003002180000021000000000000CB +:10DC80000000104002101180101100000000000080 +:10DC90000000000000000000008000000000000004 +:10DCA00000000000000500000000000021890411B0 +:10DCB0000241841000000000000000080000000085 +:10DCC0000000000021800500400003020000000069 +:10DCD000000000000000008200A000000001000120 +:10DCE000010001010001400000000090900908C0FF +:10DCF00083028801021090A090A0020100000000A1 +:10DD000000000000008201820140000100000000CC :10DD10000000000000000000000000C00000000043 -:10DD2000000000000000110105404000A0000200BA -:10DD3000200482A0100020018890404010000000C4 -:10DD4000000000000000000000000000000083024E -:10DD5000000804040000000000E000004842000049 -:10DD600000E00000484200000000000048420000BF -:10DD70000000000048420000000007000000000012 -:10DD800000E007000000000000E0000000000000CC +:10DD2000000000000000000000000000000021C111 +:10DD3000210109A0A0000020000000000001000057 +:10DD40000000000000000140000000000000000092 +:10DD500000000000000000000000070000000000BC +:10DD600000E000000012000000E0070000000000DA +:10DD700000E00700000600000000070000000000AF +:10DD8000000000000000000000E0070000060000A6 :10DD90000000000000000000000000000000004241 -:10DDA0000081000007006000000000000000000685 -:10DDB0000000000000004842000000E0000048426F -:10DDC0000000000000000000000000000000000053 -:10DDD000818100E007000000020880202400002468 -:10DDE000000011220410082004081020040810204C -:10DDF0000208802000110022000000000000000046 -:10DE0000FFFF0000FFFF0000000000000000000016 +:10DDA000820000E000000000000000000000000011 +:10DDB000480000E000004282000000000000000077 +:10DDC0000000000000000000000000E00000500023 +:10DDD0000000000000000000000000000000000043 +:10DDE000000000003F3F152A00FF000000FF000078 +:10DDF000F3F351A200000000B2B23CFF00000000AB +:10DE00000000000000000000000000000000000012 :10DE10000000000000000000000000000000000002 :10DE200000000000000000000000000000000000F2 -:10DE30000000000009600011002202800820000993 -:10DE40000060000000000000000000000000000072 -:10DE500000000000AAAA30203020010440108100F8 -:10DE60000081112200000140028001024080010275 -:10DE7000408001044010110022000000000000005A +:10DE3000000000AA30AAEAEA40400000000000000A +:10DE400000000000000000000000000000000000D2 +:10DE500000000000000000000000000000000000C2 +:10DE6000000000000000CFCF458A00FF000000FF47 +:10DE70000000CFCF458A00000000B2B200C300000E :10DE80000000000000000000000000000000000092 :10DE90000000000000000002000000000000000080 -:10DEA000000000000000000000000000040000006E -:10DEB0000000000009600000110022000140041071 -:10DEC00009006000000000000000000000000000E9 -:10DED0000000000000000A0A302030200410014039 -:10DEE000040108024400880004100820440088004F -:10DEF00006900000240081000408010200000000D8 -:10DF00000000000000000F0F000055550000000049 -:10DF10000000000000000000000000000000000001 +:10DEA0000000000000000000000000000000000072 +:10DEB0000000000000AA3FAAAABE00140000000053 +:10DEC0000000000000000000000000000000000052 +:10DED0000000000000000000000000001C000C001A +:10DEE00000005555000000000000000000000F0F6A +:10DEF00000000F0F0000000034F538FA00000000A9 +:10DF000054FC51F30000000000000000BC1CBC1CCD +:10DF1000CF8A8ACF0000000000000000000000004F :10DF200000000000000000000000000000000000F1 -:10DF300000000000008004081020040810202400C5 -:10DF40000024069000000000000000000000000017 -:10DF50000000000000003C3C0000140014000820F9 -:10DF6000028010402080004400880140028000446C -:10DF700000880000069000240081102040800000EE -:10DF800000000000000000000F0F000055550000C9 -:10DF90000000000000000000000000000000000081 +:10DF30000000000000000F0F0F0FFF3CCF0C00008F +:10DF400000000000000000000000000000000000D1 +:10DF500000000000000000000000000000000000C1 +:10DF600000000F0F0F0F0000000000000000000075 +:10DF70000F0F00000F0F00000000C1F5C2FA0000F3 +:10DF80000000A8FCA2F30000000000000000BC1C80 +:10DF9000BC1CF3A2A2F3000000000000000000007F :10DFA0000000000000000000000000000000000071 -:10DFB00000800000000000800102408001024080DB -:10DFC00081000081000006900000000000000000B9 -:10DFD0000000000000000000303000001414141491 -:10DFE00060000007000C100000610007000D080031 -:10DFF00060610006000D100000610006000D0800C1 -:10E0000005000A08050000A015612A0F054D00A8AB -:10E0100000610007000D000000000000000000008B -:10E0200000000000000000000000051000280000B3 -:10E03000000000610006000D00006000000000000C -:10E04000100000610007000D080000000000000043 -:10E0500000000000000000000000006100298001B5 -:10E0600000000000FF003C3C000000000000000039 -:10E0700000000000000000000000000000000000A0 -:10E080000000000000000000000000000000000090 -:10E090000000000000000000000000000000000080 +:10DFB0000000000000000000BEBE0000F330C300FF +:10DFC0000000000000000000000000000000000051 +:10DFD0000000000000000000000000000000000041 +:10DFE0000061000E000D00A50061000100010000AD +:10DFF00015612A0F054D00A800610A0F050D00A04C +:10E0000005610A0E050D00A00000000000000000E0 +:10E010000061000F050D000000000000000000007E +:10E020000000000000000000000000610007800DFB +:10E03000000000610006000D000000610002800584 +:10E04000000000610006000D00000000000000005C +:10E05000000000610007000D00000000000000004B +:10E0600000000000000000FB04FF0F550F550A5F81 +:10E070005F5F0000000000000000AFAF7D2869096D +:10E08000096900000000000000A00000000000007E +:10E090000000CF0C7D7DF5C1C1F50000000000003F :10E0A0000000000000000000000000000000000070 -:10E0B000000000000F0F0F0F000000000000000024 -:10E0C0000000000000000000000000000000000050 -:10E0D00000000000000000000000000034340000D8 -:10E0E000303030300000FF003C3C00000080000079 -:10E0F000000100000080000000000000008000001F -:10E10000000000000000000000000000000000000F -:10E1100000000000000000000000000000000000FF +:10E0B000000000000000000000000000C30C000C85 +:10E0C0000000000000000000F330FF3C00000000F2 +:10E0D0000000000004F40404A1AB010B00000000E8 +:10E0E000000000000000000000FB04FF0F3C0F3C9C +:10E0F0000A0A5F0A000000000000000005057D28F4 +:10E10000FF0F0FFF000000000000000000000000F3 +:10E1100000000000CF0C41415F43435F000000005E :10E1200000000000000000000000000000000000EF -:10E130000000000000000F0D0F0F000000000000A5 -:10E1400000000000000000000000000000000000CF -:10E150000000000000000000000000000000343457 -:10E1600000003000300000000F0F3C3C00000000B9 -:10E17000000000000000000000000000000000009F -:10E1800000C00000000000000000000000000000CF -:10E19000000000000000000000000000000000007F +:10E130000000000000000000000000000000C34DCF +:10E14000004D0000000000000000C300CF0C0000E4 +:10E15000000000000000F4F4F404F1FB515B000047 +:10E160000000000000000000000000000000FFF0C0 +:10E170003F303CF0AAF00000000000000000040462 +:10E18000140030F330F30000000000008020000095 +:10E1900000000000000000000000FAFC00F0000099 :10E1A000000000000000000000000000000000006F -:10E1B000000000000000000000000000000000005F -:10E1C000000000000000000000000000000000004F -:10E1D000000000000000000000000000000000003F -:10E1E000FFF000003C303C3000000F0F3C3C0000D2 -:10E1F000000000804100000000400000000000001E -:10E20000000000C00000000000000000000000004E -:10E2100000000000000000000000000000000000FE +:10E1B0000F0F0F0F00000000FF553C0F0000000084 +:10E1C0003C0F55FFFCFCA0AF00000000AFC3A5C38F +:10E1D0000000000000000000C3C3000000A0F0A089 +:10E1E000000000000000000000000000000000002F +:10E1F000CFC00F003CF0AAF00000000000000000BB +:10E20000000000008282BEBE000000000000A0A04E +:10E210000000000000000000000000000AFC00F008 :10E2200000000000000000000000000000000000EE -:10E23000000000000000000000000000004000009E -:10E2400000000000000000000000000000000000CE -:10E2500000000000000000000000000000000000BE -:10E26000000000000000000000000000D6CE1002F8 +:10E2300000000F3C0F0F0000000000553C0F0000D5 +:10E2400000003C0F55000C0CA0AF00000000FFC305 +:10E25000F5C300000000000000000C0C0C0C0FAF18 +:10E26000FFAF00000000000000000000D6CE10024A :10E270000E9620B60000C02A472B4062DF5F0B22BB :10E28000FC21400312100200020C800800A80A00C2 :10E29000080220281004011100A10D40410181084D @@ -101957,685 +101957,685 @@ :10E2B00000000000001617084400000000080006D7 :10E2C000000000000000000000000000000000004E :10E2D000000000000000000000000000000000003E -:10E2E00000000000000000000000000020002000EE -:10E2F000200040000400040004000400200000800E -:10E30000020088000000000082048200200020003B -:10E31000200020002000200020002000200000809D -:10E320000440208088008400200020000003044076 -:10E33000010004000000880040008200400040000E -:10E34000400020004000000000000000000020000D -:10E3500000002000008020000000200000002000BD -:10E360002000200020000400000000000000000049 -:10E37000000000000000000000004002000000005B -:10E380000002000000000000000200000004000085 -:10E39000000000000000800080008000800000007D -:10E3A00000208001042000000000000000000000A8 -:10E3B000400104000000000000000000000009000F -:10E3C0000000000000020000000200004000000009 -:10E3D00000000000000000020000000040C000003B -:10E3E00000000000000000000000004000000000ED -:10E3F000000000000000000000000000000000001D -:10E4000000000000001000100000000000000000EC -:10E410000000000000100010008000C0018801A072 -:10E420000140010000800100008000800080008029 -:10E43000000000000040008000800080008000801C -:10E4400000800000008000900090000000000000AC -:10E450000000200020000004000400000000000074 -:10E4600000000000000000000000000500000000A7 -:10E470000000000004080000000000000000000090 -:10E48000000000080000000000080010000000006C -:10E490000008000000080000000000400441104097 -:10E4A0001041040904840040041000400040004072 -:10E4B000004000000084000900402040004000406F -:10E4C0000040004000080040004000400000000004 -:10E4D0000000000080008008000100010000000032 -:10E4E0000000000000080000000000000000000024 -:10E4F00000080084A000C0000100880000000000A7 -:10E5000020000000820300210005004100210021BD -:10E510000005082100050021000500000008000892 -:10E520000088000800800040080800080000000083 -:10E53000000000000000000000400000000040005B -:10E54000400040000000004000000000000000000B -:10E55000000000000000000000000000000000219A -:10E560000021000500000003000200000000000878 -:10E57000000800050005000010000200408420088B -:10E580002108C108210800020008000000840008DA -:10E590000008080000A02108210200A000080000D7 -:10E5A00003000040080000400001090000000000D6 -:10E5B000000000000000000000000001000000005A -:10E5C0002100080008000300000100000300000013 -:10E5D000000008000000000800000000000000002B -:10E5E0000008008400A000A000A000A100A000A0DE -:10E5F000000800A00002000840000000820008118E -:10E60000000008004000840000000000000000003E -:10E61000A000A000820040000400200000000000D4 -:10E6200010802180408000000080000040000040F9 -:10E630000400820082004000000000800800040006 -:10E6400004000802C00000020802C100820090001D -:10E65000080008000000080008002000000020005A -:10E660009000000084000000000000000000000096 -:10E67000000000000000000000808000000000009A -:10E680000000000000C000000000000000000000CA -:10E690000000008200820000008280000000000074 -:10E6A00000848420102000200000004000080000AA -:10E6B00040090000000000000000000000400000D1 -:10E6C0008000A10000000000030000002000000006 -:10E6D000000000000000000000000000000000003A -:10E6E00000000000000000000000000000A000008A -:10E6F00000000020000000000008000200000000F0 -:10E7000000008400088040008240010840020200AE -:10E71000820808090004000800210008000800021F -:10E720000421040888030040A0000100000002004A -:10E7300000000008000082000000000000000880C7 -:10E74000200008000000000082000000000000001F -:10E75000200088000800A000020000040000002142 -:10E760000000000900008200000590210800000060 -:10E770008400C000C0000008000000080021000262 -:10E7800000A000A01102000480A000A02000000052 -:10E7900011A02184008211A020A000A00084008488 -:10E7A0000000800880000800080108000200000046 -:10E7B00080000000000000000000000000000000D9 -:10E7C00000208000000000000000000000040000A5 -:10E7D0002100800003000300008808A02108218890 -:10E7E00000002000030211000000000000080000EB -:10E7F0000000000000000000000000000000000019 -:10E8000090008200A000040009088308880808031B -:10E8100010000808840084000808080200080008A6 -:10E8200000000403100800210040000440400040A4 -:10E8300000008200000000000000A0008200040030 -:10E8400000000900A000000000009000A00082006D -:10E8500000000800820040008200200082000200C8 -:10E8600040000000000000000008400808204008A8 -:10E8700082218200040882A1040000000008000038 -:10E880000008000000000000000020002000000040 -:10E890000000000000000000000000000001000077 -:10E8A00000000000800000000000000100000001E6 -:10E8B0000001000000000000000000000020002017 -:10E8C0000000000020000000000000000000000028 -:10E8D00000004100000000000000000000000000F7 -:10E8E0008000800020000004000000008000000084 -:10E8F00000000000000000000040000000000000D8 -:10E9000000000000040200080002900890100008B7 -:10E910000184C00209100290002090048882002027 -:10E9200000024002000000840000000800C0000552 -:10E930000000000041C000000001000041C00000D4 -:10E9400000010000000040C000000001000041C0C4 -:10E9500000000001000040C0000000010000411064 -:10E960009090020388C10210C02009082010000006 -:10E9700000000000000082890004000304A10210CE -:10E98000014090028810C0A000A100A000C000803B -:10E9900000C002400020208380090088008500001C -:10E9A0000003002000000000000000000080008044 -:10E9B0000090400000009180004005090000918017 -:10E9C00000054009000000008380000505090000E3 -:10E9D00091800005400900008380000505090000C2 -:10E9E00004A0032080100004C08002000380008087 -:10E9F0000000002040400040800200C10008800864 -:10EA000080001000000000808000009100A00080C5 -:10EA100000080090008800908080808200898083B8 -:10EA2000000880910080808300000000000000004A -:10EA30000040000000208000090040A1001180007B -:10EA400009000521001180000000090005000011E7 -:10EA50008000090005210011800009000500001157 -:10EA60008000900021C0C1020883800208C0050216 -:10EA7000038000000000000000000080808380858B -:10EA800000A00000058500000080400002C0C041D9 -:10EA900008C0022088C0109088C0084020824083AF -:10EAA00008C0900808C0100410C0000084000000D6 -:10EAB0000000000000080000C0400100000200014A -:10EAC000C008010000000001C0000000010000209B -:10EAD0000001C0A0010000000001C0000100000012 -:10EAE0000001C000414003C1100840C1080110C02E -:10EAF000102182C00000000000000000820408C055 -:10EB0000040282C0900088C0108810C0211000024A -:10EB1000C002100405029002C04091888882010260 -:10EB2000C008400211024002C020201000080084EA -:10EB30000000000001020800080001C02000900051 -:10EB4000020001C000008800000083C00000000037 -:10EB50008800200003C000008800000083C000007F -:10EB60000000000003C121890120C11108202105F6 -:10EB700004A1C0C140100000010001000000A1106C -:10EB80000010C184021021020002C00904204100CB -:10EB9000050083000080C100000088808200418061 -:10EBA0000800A080A080410040008000008000801C -:10EBB00000000000000002A00000000002808800A9 -:10EBC00080408000118300218005000091800000BA -:10EBD00008218005000091800021800500009180BF -:10EBE0000000000500009183410204058521C0203A -:10EBF00041A00010802104900000200008000000C7 -:10EC000041002000858040804120000380A18020B9 -:10EC10008004008080000000A1208580050800009D -:10EC2000A10091901080030021088880C100050098 -:10EC30000000004080800000000010C000000020A4 -:10EC4000C002000200800900804005110080090018 -:10EC50000000800005400080090080400511008010 -:10EC600009008000050900800900A1038220040238 -:10EC7000032000808080000080050000000000006C -:10EC80000000211105C09080830080898080800071 -:10EC900080000800202008044000110190100204A8 -:10ECA00090000500048303101100090103100810EF -:10ECB000880000008401081000000000010200002C -:10ECC0004000C001000100840100C0000001008478 -:10ECD00001000000C000000000849100C00000019D -:10ECE00000840100C00000010084890005402182E9 -:10ECF000C183110088820408100808000000000089 -:10ED00000000000009000210024009000402102067 -:10ED1000049008000000000000004842000000E0ED -:10ED20000000484200000000000000420000000017 -:10ED3000000048420042000007000000000000E020 -:10ED400007000000810000E007000000810000E0F3 -:10ED5000000000000000880000E0070000008100C3 -:10ED600000E000000000880000E00000000000005B -:10ED7000000000004842880000E000004842000017 -:10ED800000000000000000000000000048420000F9 -:10ED9000000000004842280000282010040822003B -:10EDA0001100A005000020400402221100002004F0 -:10EDB000400220401080F000F000303030303C3C09 -:10EDC0003C3C3C3C0000FFFF000066660000FFFF8B -:10EDD00000006666000000003C3C00006666000023 -:10EDE000FFFF0000666600003C3C00006666000015 -:10EDF0002841000020104080280000282800410001 -:10EE00000000000000000000A0050000A00000A01D -:10EE100020041008A00005004100004140800201CC -:10EE2000002200110000A00510800801000022113E -:10EE30001008800104020801F000F000303030308A -:10EE40003C3C3C3C3C3C000000000000666600008E -:10EE5000000000006666000000003C3C00006666A2 -:10EE6000000000000000666600003C3C0000666692 -:10EE70000000000028410408020141000041002870 -:10EE8000004100000000000000000000A005050097 -:10EE900000054002800100A0000500000000000005 +:10E2E0000000000000000000000000002040A0002E +:10E2F00040000040A0002010840082C020002100C7 +:10E300002000880088002000200000000400000099 +:10E3100084044000008040800000408040002000D5 +:10E3200020000000200020800000400000032000AA +:10E3300004000400200400000004880840022000BB +:10E340000000200004042000840000002000408021 +:10E35000200020000000400000000000200000001D +:10E36000000020000000200000004104C0040491CF +:10E3700000008000210100004021404021034000B6 +:10E380000400050004004040004000400000200060 +:10E3900000004000092040028402000241200000E9 +:10E3A00000004000004000000002000000000000EB +:10E3B0004000004000000000400000010000000399 +:10E3C00000000000000080904000000005020200F4 +:10E3D000100400000000040000020000000200021F +:10E3E000400000000000000040000000C0014105A6 +:10E3F0000100400300000041040800000204010085 +:10E40000080009000000001005000000000809A035 +:10E41000890000000000020000000080034121008C +:10E420000010000000400000848088000100A0C0AF +:10E430000000201001000800021000000110000080 +:10E440000000000000000040024082000000004088 +:10E45000000002800200084082100000200000003E +:10E46000020008000000001000418200020021822A +:10E4700085C02000800800082000208200000000E5 +:10E48000400009040400000002C0C0000008058824 +:10E490000805200000820208828400820002100029 +:10E4A000200800080010000000080920410208C0F0 +:10E4B000000800008400408420C080000400200088 +:10E4C0000084000200C02000030080100000000053 +:10E4D00000000000040400000000000008008000AC +:10E4E00020080800000000000000030000000300F6 +:10E4F000C0054004004002030040840000410000C9 +:10E5000000008811A0000000002100210000000090 +:10E5100000080800400040004021200201030000E4 +:10E52000C011000000200000000300050002900060 +:10E5300004800020000000040080400420802004AB +:10E540000002050300050002002100090004000587 +:10E550000009000800002008002100008880000059 +:10E560002080101000000000004000008400000027 +:10E5700000000180A0000300C10009890000000420 +:10E580000000410000000500000005000000000040 +:10E5900000080000030000A0000802820000021032 +:10E5A000090000002000008500000000000000833A +:10E5B000418800020083000000010004008900047B +:10E5C0000001000020A0000000A002820200002044 +:10E5D0000000080000100900800400820090090279 +:10E5E0000000804000014100000000000200000027 +:10E5F0000088000040020800C10000400000200820 +:10E6000082000000902088408800884088008400B4 +:10E61000880001040900C000820009000000000415 +:10E62000080908000400080000008200C01004115E +:10E630002020880082202080000000402000000070 +:10E64000A00082008200C104C000C000A000C00081 +:10E65000000502000000000002000809001100206F +:10E660000800000000001000A000000000000000F2 +:10E670000000A00000000000080404020090110443 +:10E6800000092100000811C009840090110009C090 +:10E69000400021000401A00005080000200008003F +:10E6A00000841100004080002190038800000000D9 +:10E6B00021004084210011014002000011884184A2 +:10E6C0004188050041000082088321824000030048 +:10E6D00040000000A0C000000984A000000000006D +:10E6E0000004004000000084000021000000000041 +:10E6F00000000000000000000000200100000003F6 +:10E70000880004080009820000000000A008000042 +:10E71000100008080500C00000000400A0830005E8 +:10E720000091C004844140020000822108020410CC +:10E730000400C020820000100820A0000000A040BB +:10E7400002210002A0110000080010110800880337 +:10E75000A0110003000582021041A011080540002D +:10E7600000000811000000020080000000400000CE +:10E77000100000000010000008000000000004006D +:10E780000000002000000900000008000008000050 +:10E790000004000000002008090804048088050225 +:10E7A00003000504000100008001000000002101B9 +:10E7B000800085040005000000000001200000002A +:10E7C00000A0800000020090000080000000800097 +:10E7D00000000000000000000000090000A0850407 +:10E7E000400400008000000000000004040000015C +:10E7F000030000880000030000000000000000008B +:10E80000888000008200200004000000000000005A +:10E810008800000090008820090084009000848017 +:10E8200000030000A0808800840040024000828431 +:10E83000002120008800081020102000200920213D +:10E84000000040088804820040004100A009004008 +:10E850000804000388098841820582118200A0080B +:10E8600000088204080000410404000800040000BD +:10E87000000408000008000008000000000000007C +:10E8800000000320100000A0000000004100210053 +:10E890000800000409080000000084821100410003 +:10E8A00009044088008420040500000002010808D3 +:10E8B0000020000000000000000100C10000400432 +:10E8C00000C000000000030100008000A0840800D8 +:10E8D0000008000100000800008220000000000085 +:10E8E000000011404000A00005000004008200006C +:10E8F0000000040000000000000000000000000014 +:10E900000000030000C000000100000200C000047D +:10E9100010028890000000000000000088009000B5 +:10E92000010090000010080800090011404100A1FA +:10E930000041028900010001000000010000900078 +:10E94000400111010000010201850390000804113B +:10E9500041058882C002044000200020900440103D +:10E96000A0C0008882404110A00202408202400004 +:10E9700000000000C00000000000000000000000D7 +:10E9800000001000000020800000080000800080CF +:10E9900011000000008000000000000000000010D6 +:10E9A0008010080200050003802040100002804112 +:10E9B0000021044080400040002000200008110396 +:10E9C000A10908109003000004020388908809023E +:10E9D00080900805089080A0808000000000808062 +:10E9E0008380000000008000828009808880808011 +:10E9F000000000000800800000000000000000008F +:10EA000000002000C0000000110221002000900042 +:10EA1000000000008800C00000000080000000002E +:10EA20000008000280C00000004000030003000056 +:10EA3000000000000011008800000000000080803D +:10EA4000890040C00580C00000000004800280856D +:10EA500080080040000500110000800000000089CF +:10EA600080000000002180400080800980408020DC +:10EA70000000800000000000000000000000000016 +:10EA80000000030010001000400001A02000010061 +:10EA9000C1000800C000A0000800000000820000C3 +:10EAA000008402010208108282200000008900090F +:10EAB0000082008400000000000490001084040024 +:10EAC00008C002C0820502C08382000088200208BC +:10EAD000844002414001401004029004080000906C +:10EAE00000A0900040004004048890C0040004C0CE +:10EAF00004859082040084000400400000000000AF +:10EB000000000000000001000100000001000040C2 +:10EB1000400000C0002100000021A008000000000B +:10EB2000000000000090039011900010900005007C +:10EB30000100C000080201A00488000800000100D4 +:10EB40000800000001100010A00200A100018800D0 +:10EB5000840000001100C140A14011C0409102108A +:10EB6000000200900808C040004008040490C0045F +:10EB700000050404C09000020884002000A00000EA +:10EB80000000000000000000000000010000020082 +:10EB900000000000008000080011002105030000B3 +:10EBA0000000000000000500888091804080000087 +:10EBB00082000300850080004080910003800400F3 +:10EBC000080082000000020303A010202091000131 +:10EBD00000030521090304208811100908021111FE +:10EBE000800000000000800088000000808080001D +:10EBF0009184008900C0840900808000000000002A +:10EC000000000000000000000010000900212003A7 +:10EC1000C1C08441410000020000000300800010D8 +:10EC200000040021000000008003004180800000FB +:10EC30000000801100008000100020020400040089 +:10EC40000000000500800000411100880300111140 +:10EC500000012140108002000000000480A080809C +:10EC60000000000080000000000080208004808000 +:10EC70008000002080040080000000000080000070 +:10EC80000000000000000000000000800000000004 +:10EC90000020C1410301000000000020009000841A +:10ECA000000000000000000000000800108940047F +:10ECB0008800080010011000900001000001010010 +:10ECC000010000000082000400000902042140A0AD +:10ECD00009010001A10082020820100002002003A7 +:10ECE0000408820008001010880088000801044110 +:10ECF00002400200840182A020408800000000043D +:10ED000000A00000000000000000000000C00000A3 +:10ED100000000000000000E00700410000000000CB +:10ED2000070000000000000007000000000000E0F5 +:10ED300007004100000000E000000006000000E0C5 +:10ED400007000000000000000700000A000000E0CB +:10ED5000070000820000000000E00000000000004A +:10ED600000E0070042120000000007000000000061 +:10ED700000000700820A000000E00700820A00008D +:10ED800000E00000000A0000000000000000000099 +:10ED900000E00000410000FFFFFF0F0FFFFF000039 +:10EDA000000000FF00FF0000000000000000381C11 +:10EDB000F99F2C6F436F64640600000000000000A0 +:10EDC0000000200000000000000000000000263FBE +:10EDD00046CF00FC00C000007C704C4000000000EA +:10EDE0000000000000000000FE7EF66600240030F7 +:10EDF0000000000000000000000000000000000013 +:10EE000000000000FF0F3636000000000000000088 +:10EE1000000000000000000000FFFFFF0F0FFFFFD9 +:10EE20000000000000C300FF000000000000000020 +:10EE3000C183F99F1C9F839F04040600000000000B +:10EE400000000000000000000000000000000000C2 +:10EE5000193F89CF003C00000000030303030000BA +:10EE600000000000000000000000FE7EF6660024A6 +:10EE70000000000000000000000000000000000092 +:10EE8000000000000000F000363600000000000026 +:10EE90000000000000000000000000000000000072 :10EEA0000000000000000000000000000000000062 :10EEB0000000000000000000000000000000000052 :10EEC0000000000000000000000000000000000042 :10EED0000000000000000000000000000000000032 -:10EEE0000000000000000000000000000000000022 -:10EEF0000000000000000000000000000000000012 -:10EF00000000000000000000000000000000000001 -:10EF100000000000000000000000000010082004B5 -:10EF20001400001410200804010208041020080432 -:10EF3000402002044020020440022004003C003C27 -:10EF40000F0F0F0F000000FF000066660000FFFFBC -:10EF50000000FFFF000066660000FFFF00000000E9 -:10EF600066660000FFFF000066660000FFFF00000D -:10EF70006666FFFF0000400220040102080405004D -:10EF8000000500A0000500000000000000000000D7 -:10EF90008844102008040500000500820014800148 -:10EFA00040028200008280400102804010208040A8 -:10EFB0000102801001088010010880011008003C47 -:10EFC000003C00000000000000FF0000666600003A -:10EFD0000000000000000000666600000000000065 -:10EFE0000000666600000000000066660000000089 -:10EFF00000006666FFFFFFFF8001100880401020C0 -:10F00000A00000A0A000050000000000000000001B -:10F010008844000080400102A00000A0820014008B -:10F0200060610006000D100000610007000D08007F -:10F0300060610006000D100000610006000D080070 -:10F04000000000280000000045028A0F052C92A253 -:10F0500045E38A09852192A240E380018021920242 -:10F06000000045E38A09852192A240E380018021C6 -:10F07000920240E380018021820260610006000D5F -:10F08000100000610007800D080000610006000DFF -:10F09000000060610006000D100000610006000D18 -:10F0A0000800000000000000000000000000000058 -:10F0B00000005555555500000000000000000000FC -:10F0C000000000000000000000000000FF003C3CC9 -:10F0D00000003C3C00000000F0F03C003C00303000 -:10F0E000303000003C003C00303030303C003C0010 -:10F0F000303030303C003C000000F0F000000000F8 -:10F100000000000000000000FF00010000000000FF +:10EEE00000000000021020000088108400000000D4 +:10EEF0000000000002102000008810840210200092 +:10EF000000881084000000000000000000000000E5 +:10EF1000000000000000000000000000FFFFC3C36D +:10EF200000000F0F096F2D2D9918890800000000AF +:10EF3000000000000000000083A79BBF0007C0077F +:10EF4000000000000000030C0000000000000000B2 +:10EF500091F398FC000000006F186F7E0000818123 +:10EF60000446FFFFA3C30000000000000000069F4E +:10EF70007E7E2424E7E7000000000000000000007F +:10EF8000000000000000000000000CFC0CFC000071 +:10EF90000000000000000000000000000000FFFF73 +:10EFA000C3C300000F0F096F2D2D810089080000D9 +:10EFB0000000000000000000000002261A3E0004CD +:10EFC000C0040000000000000F0F0000000000005F +:10EFD0000000F391FC98000000000918097E000071 +:10EFE00000000446FFFFC3C3000000000000000053 +:10EFF000069F18182424E7E7000000000000000026 +:10F000000000000000000000000000000606F6F608 +:10F0100000000000000000000000000000000000F0 +:10F0200045E3800F002D8A020061500E000D0000A4 +:10F0300000000A080000000005610A0F050D00A08D +:10F0400000613007000D00000061000F051D00A0E9 +:10F0500005610A0E050D00A005610A0F050D00A04F +:10F06000000000613007000D000100610007000D85 +:10F070000000000030000000000000004000001010 +:10F08000000000610007000D000100614007000D55 +:10F090000001000000000000000000610007000502 +:10F0A00000005500050500000000000000000055AC +:10F0B00030300000000000000000000000000000F0 +:10F0C000000000000000000000001310D3D000007A +:10F0D0000000000000000000000050505C5C431C79 +:10F0E000832C00000000A0F0FF0FFFF000000000E4 +:10F0F0000FFF096900000000000000000000000090 +:10F100000000000000000000C0FCC0FC0000000087 :10F1100000000000000000000000000000000000EF -:10F1200000000000000000000000000000A000003F -:10F13000000000005515555500000000008000003B -:10F140000000000000000000000000000000FF00C0 -:10F150003C3C00003C3C00000000F0F03C003C0067 -:10F160003030303000003C003C00303030303C006B -:10F170003C00303030303C003C000000F0F00080BB -:10F1800000000001000000000000FF00000000007F -:10F19000000000000000004000000000000000002F -:10F1A000000000010000000000000000000000005E -:10F1B000000000000000000000000000000000A0AF -:10F1C00000A000000000000000000000000000009F -:10F1D000FF00AAAA00000F000F00303030300F00EF -:10F1E0000F003030303000000F000F003030303072 -:10F1F0000F000F00303030300F000F003030303053 -:10F2000000000000000000000000000000FF00FF00 +:10F12000C30F550055000505000000000000000059 +:10F13000AAFF3030000000000000000000000000C6 +:10F140000000000000000000000000001310131079 +:10F1500000000000000000000000000050505C5C57 +:10F160005F5FAFAF00000000AAFFFF0FFF8D000040 +:10F170000000FF0F6909000000000000000000000F +:10F18000000000000000000000008282BEBE0000FF +:10F19000000000000000000000000000000000006F +:10F1A0000000C30F55FF00000000AAFF78780000A0 +:10F1B00000000055AA5500000000000000007DAFCF +:10F1C0007D0500000000CFF38AA2000000005D0C66 +:10F1D0005F0F00000000069690960000000007D721 +:10F1E0000BEB431C832C0000001700000000000004 +:10F1F000F505FCFC0000000000000000000000001D +:10F2000000000000000000000000000000000000FE :10F2100000000000000000000000000000000000EE -:10F22000000000000000000000000080000000005E -:10F2300000C000C0000000008000000000000000CE -:10F2400000A000A00000000000000000000000007E -:10F250000000FF00AAAA00000F000F00303030307D -:10F260000F000F003030303000000F000F00303042 -:10F2700030300F000F00303030300F000F003030D2 -:10F28000303000000080400000000000000000F569 -:10F2900000FF00800080000000000000000200006D -:10F2A0000000000000000F0F0F0F04000500050014 -:10F2B000040088000400000020008800040004000E -:10F2C00020000200020002000000200020002000B8 -:10F2D0002000000020008200000084008400200044 -:10F2E0002000040020000000840000032000200013 -:10F2F000200020000000000088008400880000003A -:10F300000000400000000000000088000000000035 -:10F310000000008000000000200020000000000825 -:10F32000000800000200000000000000A000A00093 -:10F33000A000800004004000000040000000000029 -:10F3400000000000090000000900040000000000A7 -:10F3500000000000000000000000000009000000A4 -:10F36000000000000000000000000000000000009D -:10F370000000000004000000000000000000000089 -:10F38000200009000000000000000000000009004B -:10F390000000000000040000000000000000000069 +:10F220000000000000001041000000000055787848 +:10F23000000000000000AA00000000000000000024 +:10F2400028AF2805000000008AA2CFF300000000CC +:10F250005D0C5500000000000FFFF0FF00000000F3 +:10F26000D0D7E0EB5F5FAFAF0000001400000000FC +:10F270000000F5050C0C000000000000000000007C +:10F28000000000000000000000000000000000007E +:10F29000000000000000000000000000000000006E +:10F2A00000000000000055555555008000824000C8 +:10F2B00021801104C1000200888020000200054165 +:10F2C0000800880584008500040002000000040096 +:10F2D00020102000400020000000200000008800D6 +:10F2E0004000210800080084840800030084108482 +:10F2F0000408C00410042000840840002008000214 +:10F3000089004084200820820088008400040400D2 +:10F31000008820040000C000008000008800000079 +:10F32000200000000000000000000000002010216C +:10F3300080904020080102001100040440000300F6 +:10F3400008009000400004002000000800000000B9 +:10F35000000000010000000000000000000040006C +:10F3600000000400400100011009000100004008F5 +:10F3700080080001100184011000000080040000DA +:10F38000000040008003040180084005000940831C +:10F390000000000400010000000000042000000044 :10F3A000000000000000000000000000000000005D -:10F3B00000000021002100000000000000400000CB -:10F3C00000000000000000000000000000400000FD -:10F3D00000000000000000000000000000400000ED -:10F3E00000000000000000000000000000400000DD -:10F3F00000000000000000000000000000000040CD -:10F40000000000000000204000000000000000405C -:10F41000000000000000000008000010001008407C -:10F4200000000000000000000000000000000000DC -:10F4300000000000000000000000000000000000CC -:10F44000040800080008090000000008000000008F -:10F450000000000000000000008800880000008814 -:10F4600000100008004000000088000800000000B4 -:10F47000000000000000000000000000000000008C -:10F48000000000000010000000000000000200006A -:10F49000000000000000000000000000000000006C -:10F4A000000000000000000000000008000800004C -:10F4B000000020000000100000000800A00008006C -:10F4C0000000A0000000000000000000000000009C -:10F4D0000000000000000041000000008200000069 -:10F4E000000000000000000000000000000000001C -:10F4F000000000000000000000000000000000000C -:10F500000000000000000000000000000000C0003B -:10F5100000000000400000000000010000000000AA -:10F52000000000000000000000410000000000009A -:10F5300000880000880000000000080000080000AB -:10F540000900030200C003C003840500001000008E -:10F55000000000C0038800C021C00000030000C0FC -:10F560000000000000000000000000000000050096 -:10F570000500000000000000000000000000000086 -:10F5800000000000000041004100030003000300F0 -:10F590000800030008000000080000A04010000858 -:10F5A000410800A0218403000000000003000008BF -:10F5B0000008002000842000090009002000A000AD -:10F5C0000000A00000000800000000000000C000D3 -:10F5D0000800000000001000000000000000000013 -:10F5E000000000000000080000000000000008000B -:10F5F000040088008800000082000000A000A00035 -:10F60000820000009000820008000000400000001E -:10F6100000000000000000000800000000000800DA -:10F62000000000400000000000000000000000009A -:10F630000000000000000800800020002000800082 -:10F6400000000800000000000000000000000000B2 -:10F6500000000000000000000000000000000000AA -:10F66000000000000000000000000000000000009A -:10F67000000000000000000000000000000000008A -:10F68000000000000000000000000000000000007A -:10F69000000000000000000000000000000000006A -:10F6A000000000000000000000000000000000005A -:10F6B000000000000000000000000000000000004A -:10F6C00000800000000000000000000008000000B2 -:10F6D0000041000000000000000000410041000067 -:10F6E000000000000000000000000000000000001A -:10F6F000000000000000000000000000000000000A -:10F70000000000000000820008000000000000006F -:10F7100008000000000000000000000000000000E1 -:10F720000800000000410000000000000000000090 -:10F7300000000000018001800100012000000000A5 -:10F740000300000405820008000009082084030269 -:10F7500008A02100000800820088110000000000BD -:10F76000000000000800050000000800000008007C -:10F770000000000000000000000000000000000089 -:10F7800000000000000000000000000021000084D4 -:10F79000210000000000080808080000080003001D -:10F7A00000820000000800000000008400C0008209 -:10F7B0000008000000C00420042004080401040024 -:10F7C0008200040000009000000000009000000093 -:10F7D0000000000000000008000008030000000016 -:10F7E0000000000000000000000000000000000019 -:10F7F00000000000000000000000080004000000FD -:10F800000000000000009000000008000000000060 -:10F8100000000000000000000002000000000000E6 -:10F820000000000000009000000000000000000048 -:10F83000080000000008081100000000000000009F -:10F8400000000000000000000000000000000000B8 -:10F8500000000000000000000000000000000000A8 -:10F860000000000000000000000000000000000098 -:10F870000000000000000000000000000000000088 -:10F880000000000000000000000000000000000078 -:10F890000000000000000000000000000000000068 -:10F8A0000000000000000000000000000000000058 +:10F3B000900090000008000005000020A04001001F +:10F3C000A000002100090000008002000384010069 +:10F3D00008000200020800000200084003000000CC +:10F3E0002000030800400900100001102140000027 +:10F3F000880002001000C080840520000100088001 +:10F40000008000800004409088001000840091007B +:10F4100003802184210000C00000004100800040E2 +:10F4200088400000000002000800084000000210B0 +:10F4300010000000028400850288828200014008DA +:10F440000208000800080208000800040000082163 +:10F45000080800080000008202000400C00008083C +:10F46000040880082004050804888004200090080F +:10F4700000002084040880000508020082004090FB +:10F480000002020409040009800202008500020053 +:10F4900020080420900990000508000004000004E2 +:10F4A00000000008400002080500000020080000DD +:10F4B000000484080000C01004020421008400102D +:10F4C000850490000000000208020003A0088800E4 +:10F4D0008908A02188C100008441000308000021A0 +:10F4E0000821824100000000000000200000C0212F +:10F4F0000411000000000041200000411000200025 +:10F500000002000000050000880000000004000860 +:10F51000010090212085044110000000000000003F +:10F520000000000810000000820004000400000039 +:10F5300000000000100008002100000185000021EB +:10F540000300040100A00504000083040900050075 +:10F55000090020844010002008004008000000102E +:10F56000030800A000100800082003001183000019 +:10F57000000083000000008200008084030000007F +:10F5800083820802000200C0008800C0040000035B +:10F590000084020008000008000083000000000052 +:10F5A0000000000004000020200000000800080007 +:10F5B00000000000000001080000040040101000DE +:10F5C000000001000880A000C00020000800080022 +:10F5D0000800080040000500000082008280000052 +:10F5E00000000400101140030000000020008511FD +:10F5F00008030800088000000008C1800204A10878 +:10F6000021092000A08400800200000040000000CA +:10F610000080004000040100A084090410000008DC +:10F6200008000800080000000800824000000000F8 +:10F63000820000000000000010000900A00090C03F +:10F640000000000004000020008200A00000030071 +:10F650001140110021A021A0040000000000102092 +:10F660000084080000A0009000040000000080005A +:10F670001000000041000008000000092004088577 +:10F680002001400040000041004080001084000044 +:10F690000800004003101101100000410200008426 +:10F6A000210100000090418841000000000000009E +:10F6B00000000040000003000000000204001040B1 +:10F6C00004008200208009200000000000000005E6 +:10F6D0000100010020802000824182100000010210 +:10F6E0000102000000000008080200110000C00232 +:10F6F000090500004180110000020000C004000262 +:10F7000010402020084002000080A082C0408200FB +:10F710000200A00000088200100002041004100083 +:10F7200020002000004000000040004000000000D9 +:10F730000000000800000000000000800000C00081 +:10F740000400804000208540A001040000840000E7 +:10F75000000008000490802091A0109000002188F3 +:10F760000401040103A00000210000210082000028 +:10F7700000842000008484208488000200000001AE +:10F78000094080C180080401808821044004214090 +:10F790004000800003020401000083C080858011C6 +:10F7A00080008800800000010000000100010000CE +:10F7B000000000040000030009A000000010000089 +:10F7C0000008002100080400012100000080000062 +:10F7D000841040004000200988800004904100000F +:10F7E00000000409001190000002042100050284B9 +:10F7F000020000040041000002410020400400001B +:10F800009009100504000800820000042008C000D0 +:10F8100000000200A000021189910004C0840200CF +:10F82000000200040008000900030040004000003E +:10F830000000000000000000000082000200000044 +:10F84000001000020000000080000800000000100E +:10F850000000000000000000800000200000000008 +:10F860004100000080000082000000000000000451 +:10F870008005800000010000000080000001000100 +:10F8800000000400800000000000000000002000D4 +:10F89000000000008400080080002008000100092A +:10F8A000000000000040008500080000000100008A :10F8B0000000000000000000000000000000000048 -:10F8C0000000000000000000000000000000000038 -:10F8D0000000000000000000000000000000000028 -:10F8E0000000000000000000000000000000000018 -:10F8F0000000000000000000000000000000000008 -:10F9000000000000000000000000000000000000F7 -:10F9100000000000000000000000000000000000E7 -:10F9200000000000000000000000000000000000D7 -:10F9300000000000000000000000000000000000C7 -:10F9400000000000000000000300000000000000B4 -:10F9500000000000000000000000000000000000A7 -:10F960000000000000000000000000000000000097 -:10F970000000000000000000000000000000000087 -:10F980000000000000000000000000000000000077 -:10F990000000000000000000000000000000000067 -:10F9A0000000000000000000000040000000000017 -:10F9B0000000000000000000000000000000000047 -:10F9C00000000000000000020080000200000000B3 -:10F9D0000000000000000000000000000000000027 -:10F9E0000000000000000000000000000000000017 -:10F9F0000000000000000000000000000000000007 -:10FA000000000000000000000000000000000000F6 -:10FA100000000000000000000000000000000000E6 -:10FA200000000000000000000000000000000000D6 -:10FA300000000000000000000000000000000000C6 -:10FA40000000000000000080000100040001000828 -:10FA500000000000000000000000000000000000A6 -:10FA60000000000000000000000000000000000096 -:10FA70000000000000000000000000000000000086 -:10FA80000000000000000000000000000000000076 -:10FA90000000000000000000000000000000000066 -:10FAA0000000000000000000000000000000000056 -:10FAB0000000000000000000000000000000000046 -:10FAC00000000000002000000004000004002000EE -:10FAD0000100000000000000000000000000000025 -:10FAE0000000000000000000000000000000000016 -:10FAF0000000000000000000000000000000000006 -:10FB000000000000000000000000000000000000F5 -:10FB100000000000000000000000000000000000E5 -:10FB200000000000000000000000000000010000D4 -:10FB300000010001000000000000000000000000C3 -:10FB40000000000000000000200000000500000090 -:10FB500000000200000000000000000000000000A3 -:10FB60000000000000000000000000000000000095 -:10FB70000000000000000000000000000000000085 -:10FB80000000000000000000000000000000000075 -:10FB90000000000000000000000000000000000065 -:10FBA0000000000000000000000000000000001045 -:10FBB00000200040000400000000000000000000E1 -:10FBC0000000000000000500000000000000000030 -:10FBD0000002000000000000000000000000000023 -:10FBE0000000000000000000000000000000000015 -:10FBF0000000000000000000000000000000000005 -:10FC000000000000000000000000000000000000F4 -:10FC100000000000000000000000000000000000E4 -:10FC200000000000000000000000000000000000D4 -:10FC300000000000000000000000000000000000C4 -:10FC400000000000000000000000000400000000B0 -:10FC500000000001000000000000000000000000A3 -:10FC60000000000000000000000000000000000094 -:10FC70000000000000000000000000000000000084 -:10FC80000000000000000000000000000000000074 -:10FC90000000000000000000000000000000000064 -:10FCA0000000000000000000000000000000000054 -:10FCB0000000000000000000000000000000000044 -:10FCC0000000000000000000000000000001000033 -:10FCD0000000000000E0070000000000000000003D -:10FCE0000000000000000000000000000000000014 -:10FCF0000000000000000000000000000000000004 -:10FD000000000000000000000000000000000000F3 -:10FD100000000000000000000000000000000000E3 -:10FD200000000000000000000000000000000000D3 -:10FD300000000000000000E00000000000000000E3 +:10F8C000000001900888028282001101400290012C +:10F8D0008200400000000000020000000000010063 +:10F8E0000000000290108290000410C001400888BF +:10F8F0000888000000000000000001C1A001039082 +:10F900000000000040C101001000008900C1010595 +:10F910000001000000C001009008000002C10201C7 +:10F92000C008010084C140011001008900C000002E +:10F9300000000002000000000000000000000000C5 +:10F94000000000001000100000808000A01100A145 +:10F950008805800280000000000000000000000018 +:10F96000020000000000830000000080008008808A +:10F9700080000000000000000500000009C1C14037 +:10F9800083840011000083C10305411100900091A0 +:10F99000108340100010008010000380000080C120 +:10F9A00085088385091083C1892085020082008033 +:10F9B00000002000008000000000000000000000A7 +:10F9C000000000000000208041210391C100088058 +:10F9D00041114111A0000000000080408000002083 +:10F9E000000080058080880008098280A000000057 +:10F9F0000040808900000005000000028000020035 +:10FA000003094109C1000000098002001011C12052 +:10FA1000050408000240C100024088002004A10043 +:10FA2000090083000200C183210091001009C10375 +:10FA30008000000300408000000000000000000083 +:10FA4000000000000000000091C008000083910049 +:10FA5000009000012083C0209000900084010810D5 +:10FA60001001C0A0080090041100A120A18208820A +:10FA70002000100010850802000000000000C000F7 +:10FA8000018800850001C18400000110010000010F +:10FA9000C182000103000001C1A0000111000101A9 +:10FAA000C100004089000100C10500A002840001DE +:10FAB000C101020000000001C000000000000000C1 +:10FAC000000040002000400020009091004090087D +:10FAD000030300830009884101100082008800C0F0 +:10FAE00000C00100A0000400000091110003C0400C +:10FAF0008988401100A18240111100000800000017 +:10FB0000000801880001840001C10000000000011C +:10FB1000890101C100034001840100C000010210FD +:10FB2000000000C100010001100000C10000000041 +:10FB3000010001C100000002000000C00000000040 +:10FB400000000000000000000000000080090089A3 +:10FB5000800388C008200390000511A000000080E9 +:10FB600000000080200000008000050082830083E8 +:10FB700000891091804000A000838940000080002F +:10FB80000000028040851020C11140C100000041EA +:10FB90001008100209C10089A002080209C0002053 +:10FBA00000A10003008200021002031000C105053D +:10FBB0001010410909C10000008000000080000011 +:10FBC0000000000000000000000000000000C1056F +:10FBD0008488200010110800882020000303000002 +:10FBE000000000800000000000A00011000000C024 +:10FBF0000040800080100011008000000000000024 +:10FC0000000000000000C14005C0110040090000D4 +:10FC1000C1099009058020038000800000000002D7 +:10FC20008002800000000004C1C0A009100008404C +:10FC3000C1009008050005118000000000000000D0 +:10FC40000000000000000000001000000080000024 +:10FC50009120204001109001A10089110400A00012 +:10FC6000000000400002000000000011000300003E +:10FC70000882820108A01001040090824010020056 +:10FC80000000000000880000C18900100000000191 +:10FC90000000C183900101400101C010020000007A +:10FCA0000001C003080000000001C1401001000075 +:10FCB0000100C1C0900001000000C0000000000071 +:10FCC00000000000000000000000000100A0004053 +:10FCD0000000600000E007004100000000E00700B5 +:10FCE00000000000000000000000000000E007002D +:10FCF00000000000000007000000000000000000FD +:10FD00000000000000E000000000480000E00700E4 +:10FD100000000000480000E000000000000000E0DB +:10FD200000000000000000E000000000810000E092 +:10FD300000000081884100E007000006000000E0AC :10FD400000000000000000000000000000000000B3 -:10FD5000070000000000000000000000000000009C -:10FD60000000000000000000000000000000000093 -:10FD70000000000000000000000000000000000083 -:10FD80000000000000000000000000000000000073 -:10FD90000000000000000000000000000000000063 -:10FDA0000000000000000000000000000000000053 -:10FDB0000000000000000000000000000000000043 -:10FDC0000000000000000000000000000000000033 -:10FDD0000000000000000000000000000000000023 -:10FDE0000000000000000000000000000000000013 -:10FDF0000000000000000000000000000000000003 -:10FE000000000000000000000000000000000000F2 -:10FE100000000000000000000000000000000000E2 -:10FE200000000000000000000000000000000000D2 -:10FE300000000000000000000000000000000000C2 -:10FE400000000000000000000000000000000000B2 -:10FE500000000000000000000000000000000000A2 -:10FE60000000000000000000000000000000000092 -:10FE70000000000000000000000000000000000082 -:10FE80000000000000000000000000000000000072 -:10FE90000000000000000000000000000000000062 -:10FEA0000000000000000000000000000000000052 -:10FEB0000000000000000000000000000000000042 -:10FEC0000000000000000000000000000000000032 -:10FED0000000000000000000000000000000000022 -:10FEE0000000000000000000000000000000000012 -:10FEF0000000000000000000000000000000000002 -:10FF000000000000000000000000000000000000F1 -:10FF100000000000000000000000000000000000E1 -:10FF200000000000000000000000000000000000D1 -:10FF300000000000000000000000000000000000C1 -:10FF400000000000000000000000000000000000B1 -:10FF500000000000000000000000000005610A0F22 -:10FF6000050D00A0000000000000000000000000DF -:10FF70000000000000000000000000000000000081 -:10FF80000000000000000000000000000000000071 -:10FF90000000000000000000000000000000000061 -:10FFA0000000000000000000000000000000000051 -:10FFB00000000000000000000000000000000061E0 -:10FFC0000007000900000000000000000000000021 -:10FFD00000000000000005000A08050000A0000065 -:10FFE0000000000000000000000000000000000011 +:10FD50000000000082D782D7FF00FF00CFF38AA205 +:10FD6000EBEB0BE000000000A0BCBCBC00000000FE +:10FD70000000000083B38FBF0000003092BAD3FBB5 +:10FD8000C0C2C0C2000000000000FFFF0000FFFF73 +:10FD900000003C3C0000000000FF0000AAAA000098 +:10FDA00000FF00003C3C000000FF0000F0F00000FD +:10FDB00000FF0000AAAA000000FF0000AAAA00009D +:10FDC000FFFF0000F0F00000000000000000000055 +:10FDD0000000000000008282D7D7C0C0FCFCCFF337 +:10FDE0004551D7D707D000000000A0BCA0A000005C +:10FDF00000000000000080B08CBC00000030103813 +:10FE00005179C0C2FCFE000000000000FFFF0000AE +:10FE1000000000003C3C0000000000FF0000AAAA17 +:10FE2000000000FF00003C3C000000FF0000F0F07C +:10FE3000000000FF0000AAAA000000FF0000AAAA1C +:10FE4000000000000000F0F00000000000000000D2 +:10FE50000000000000000000FFF05F50DFDF1F1F08 +:10FE600000FF00FF00FF5555000000000055FF3067 +:10FE700000000000AFAF050545CF8ACF0C000000A1 +:10FE80005555A2F33F5F3F5000000000FFFF000008 +:10FE90000F0F00005555000000003C3C0000FFFF24 +:10FEA0000000FF0000000F0F00000F0F00000F0FF9 +:10FEB00000000F0F00000F0F00003C3C00000F0F70 +:10FEC00000003C3C0000C3C3FFFF00000000000036 +:10FED000000000000000341400000F005F50D0D07C +:10FEE000101000FF00FF00FF5555000000000055F6 +:10FEF000003000000000BE14BE1451F3A2F3000055 +:10FF000000000000A2F33F5F3F5F00000000000020 +:10FF100000000F0F00005555000000003C3C0000A1 +:10FF200000000000FF0000000F0F00000F0F000096 +:10FF30000F0F00000F0F00000F0F00003C3C0000EF +:10FF40000F0F00003C3C0000C3C3FFFF0000000097 +:10FF50000000000000000000DFFF00000061000E54 +:10FF6000800500000561000905010008000000008F +:10FF70000090000105610A0F050D00A005614A0E01 +:10FF8000050D00A080615006000D00000061000713 +:10FF9000002D120245828A0FC52092A200004082E5 +:10FFA0008001C020920240E38007002D920240E3CE +:10FFB00080070029920240828001C020920245827F +:10FFC0008039C020920240E38007002D82020000A9 +:10FFD0000000000000000000000000000000FC0C19 +:10FFE000F50500005555FF0035350CCF8E8E00000D :10FFF0000000000000000000000000000000000001 :020000040019E1 -:1000000000000000000000000000000000000000F0 -:1000100000000000000000000000000000000000E0 -:1000200000000000000000000000000000000000D0 -:1000300000000000000000000000000000000000C0 -:1000400000000000F03CFFFF000000000000000086 +:100000000000FF3CF0AA0000000045158A2A00000D +:10001000000000000000AFAFFC0CFFF03CAA0000A5 +:100020003C55FF0FBEBE50FA00000000000C3C3CE7 +:100030000000000015550155FFF03535AAF0FF3CD2 +:100040003CFF550F3F3F0AFA00000000000000008F :1000500000000000000000000000000000000000A0 -:100060000000000000000000000000000000000090 +:10006000FC0CF50578287828FF0035350CCF8E8EEE :100070000000000000000000000000000000000080 -:100080000000000000000000000000000000000070 -:100090000000000000000000000000000000000060 -:1000A0000000000000000000000000000000000050 -:1000B0000000000000000000000000000000000040 -:1000C000000000000000F03CFFFF00000000000006 +:1000800000000000003CF0AA00000000CF3FCF3F7E +:100090000000000000000000AFAFFC0C00F03CAA24 +:1000A00000003C55000F141450FA0000000000003E +:1000B000000000000000BFFFABFF0F003535AAF0C5 +:1000C000003C3C00550F30300AFA000000000000F0 :1000D0000000000000000000000000000000000020 -:1000E0000000000000000000000000000000000010 -:1000F0000000000000000000000000000000000000 -:1001000000000000000000000000000000000000EF -:1001100000000000000000000000000000000000DF -:1001200000000000000000000000000000000000CF -:1001300000000000000000000000000000000000BF -:1001400000000000000000000000000000000000AF +:1000E000000000000000AAFFF03C3CF53C05F03C9D +:1000F000AA3C00000000000000000000000000001A +:10010000000000000000B400B4B4000000000000D3 +:1001100000000000000000000000FF0F7D7D3C3C5F +:10012000F0F00000FF551E1EAAF03CFFCF0CCF0CD4 +:100130002828F0FF000000003F3F0AFAFFC34D4DA2 +:100140003C3C00FFAF05BEBEF03CAAFF0000000033 :10015000000000000000000000000000000000009F -:10016000000000000000000000000000000000008F -:10017000000000000000000000000000000000007F -:10018000000000000000000000000000000000006F -:10019000000000000000000000000000000000005F -:1001A000000000000000000000000000000000004F -:1001B000000000000000000000000000000000003F -:1001C000000000000000000000000000000000002F +:100160000000000000000000AA00F03C3CF53C0547 +:10017000F03CAA3C0000000000000000000000006D +:100180000000000000000000B4B4B4000000000053 +:10019000000000000000000000000000F0004141ED +:1001A00000FFAAAA0000AA001E1EAAF03C00D7D792 +:1001B00014142828000F0000000030300AFA3C0018 +:1001C0004D4DAAAAF0F0AF051414F03CAA000000AF :1001D000000000000000000000000000000000001F -:1001E000000000000000000020002004200020008B -:1001F000840084000400000084002000000000004F -:10020000200020100000001000000000200000006E -:100210002000200400040000000020000000000076 -:100220002000040000000002000000000000200088 -:10023000000020002000000000000000000000007E -:1002400000000000000000000000000000000000AE -:10025000001000000000000000000000000000008E -:100260000000000000000000090000000000000085 -:10027000000000000000000000000000400000003E -:10028000000000000000000000000000000000006E -:10029000000000000000000040000000000000001E -:1002A000000004000000040000000400040000003E -:1002B00004000000000040000000000000000000FA -:1002C00000000000000040000000000000000000EE -:1002D00000000000000040000000000000000000DE -:1002E00000000000000000020000000000000010FC -:1002F000821000000000000000000000000000105C -:1003000000100000000000000000020002000000D9 -:1003100000000000000000000000020002000000D9 -:1003200000000000000000000000000000000000CD -:10033000001000100000000082000000000000001B -:10034000001000100000000000000000000002008B -:10035000000000000000000000000000000000009D -:100360000000000000000000000000000040040049 -:100370000000040000000000000000000000000079 -:10038000000040000000000000000000000000002D -:10039000000000000000000000000000000000005D -:1003A000000000C00000000000000000000000008D -:1003B000000000000000030000000000000000003A -:1003C000000000000000000000000000000000002D -:1003D000000000000000000000000000000000001D -:1003E000000000000000000000000000000000000D -:1003F00000000000880082000000100082008200DF -:100400000000C00000000800C00000000000000064 -:1004100000000000000000008200880008000000CA -:1004200008100000100000000000000000000000A4 -:1004300000008800000000002000200020002000B4 -:10044000000000000000000000000000A000A0006C -:100450000000C000A000A00000000000000000009C -:100460000000C000000000000000000000000000CC -:10047000080000000000000000000000000008006C -:100480000000000000000008000000100000000054 -:100490000000080000000000000000000000000054 -:1004A0000000030003000000000000000000000046 -:1004B00000000000000000000000800080008000BC -:1004C00080000000000000000000000008000000A4 -:1004D000000000000000000000000000000000001C -:1004E00000000000210021000000000000000000CA -:1004F00000000400000000000000000000000000F8 -:10050000000000000800000000000000A000000043 -:100510000000000082000800000000000000000051 -:100520000000000000000000000000000000C0000B -:1005300000000000000000000000000000000000BB -:1005400000000000000000000000000000000000AB -:100550000800000000000000000000000000000093 -:10056000000000000000000000000000000000008B -:10057000000000000000000000000000000000007B -:10058000000000000000000000000000000000006B -:10059000000000000000000000000000000000005B -:1005A000000000000000000000000000000000004B -:1005B000000000000000000000000000000000003B -:1005C000210000000000000000000000000000000A -:1005D000000000000000000000000000000000001B -:1005E000000000000000000000000000000000000B -:1005F00000000000000000000000000000000000FB -:1006000000000000080000000000A0000000000042 -:1006100000000000000000000000000000000800D2 -:10062000000000000000000000000000C00000000A -:1006300000000800000000000000000000000000B2 -:1006400000000000000000000000000000000000AA -:1006500000000000A00000000000000000000000FA -:100660000000000082000000000000000000000008 -:10067000000000000000000000000000000000007A -:10068000000008000300000000000000000000005F -:100690000000000000000010000000A000000000AA -:1006A000000000000000000000000000000000004A -:1006B000000000000000000000000000000000003A -:1006C000000000000000000000000000000000002A -:1006D000000000000000000000000000000000001A -:1006E0000800000000000000000000000000000002 -:1006F00000000000000000000000000000000000FA -:1007000000000000000008000000000004000000DD -:1007100000000000000000000000000000000000D9 -:1007200000000000000000000000000000000000C9 -:100730000000000000000000000000000000C000F9 -:1007400000000000000000000000000000000000A9 -:100750000800040000000000080002000000000083 -:100760000000000000000800080000000000000079 -:100770000000000000000000000000000000000079 -:100780000000000000000000000000000000000069 +:1001E00000000000000020000400010040902000FA +:1001F000858041808980A0080000200020002180A7 +:100200008800A008840020908800848020002000BE +:1002100088002000000020008408210420008800BD +:1002200000002000C00000030000200000002000AB +:1002300004000400200000002008840020002004A6 +:1002400088000000C0008400881104110000208292 +:10025000000000002000000004000000000020005A +:1002600000000000000000004000800204000021A7 +:10027000C000400420024008008200020502040081 +:100280004020000000C040000404000040040000C2 +:100290001000000000902000090000004000000055 +:1002A00021000000400004000000000000000000E9 +:1002B00000002000200000040000400000000000BA +:1002C00000022000000020020004400202C00000E2 +:1002D00000211000000000000002400000000002A9 +:1002E000000000000000400240000000828004087E +:1002F000081000000280820202410200000010008B +:1003000000000004020402800204000040C000104B +:10031000050008400200040004104010000005021F +:1003200040100000080000000000000082400000B3 +:100330008400000000008400001000000000400065 +:100340008810400800000000000900000000910033 +:1003500000100190000000000800000802000200E8 +:100360000000840504000200000082100000210447 +:10037000000002830200000200014010040000009F +:100380000208000009010085000480890200800441 +:1003900000084088840000000090000280400908A6 +:1003A0004009830002000088048802000000000069 +:1003B00002000084410002820288040800840200D6 +:1003C000840804088300040000840000000003087F +:1003D000400200000220000000080008050000881C +:1003E0000008058402100000000000000200012047 +:1003F0002008002088414000100082002000404179 +:100400000008C00000000003820000212100C0009D +:10041000880940000000000000080008900000214A +:1004200000030000040004098200084000000000EE +:10043000820890009000201000000000880000005A +:100440000000900000400000200002210000000396 +:1004500084098402A000000000080002820000005D +:100460000011000000040000000000000000000077 +:10047000048390000801030800C00800000890826F +:1004800000000804000000000000030000102084A9 +:100490000300000000000000000800000000000849 +:1004A0000420000000040082000000000002080098 +:1004B00000000000038400000008000000A000000D +:1004C000000000840000030400020000800000001F +:1004D000008200880384218200040088000200005A +:1004E00000000000080000004100000800000800B3 +:1004F000000002000080C00005038211080583008F +:1005000008008200C00000008240040002000800D1 +:100510000020C0800402000000408211A000000002 +:1005200000000420880000000020080000002000D7 +:1005300000000000080200000800840082000000A3 +:10054000000400000400080000008210A100001157 +:1005500008000011001120040011000200000840F2 +:10056000100000000800000008000010004000001B +:1005700008400820000008200000040011000000CE +:10058000200000000000000000000000000000004B +:1005900003000000000200000000200040000000F6 +:1005A00003000000004000000000000020000000E8 +:1005B0000000000000000000000800101100000012 +:1005C00011000000400000000200000000000800D0 +:1005D0000400100011000004400000204001000051 +:1005E00000000000001000000300000000000000F8 +:1005F000000000000000002100000000108000004A +:1006000000000810100840000020820304000100D0 +:1006100009080080000001000000010082050000C0 +:100620000400000000000000000000000041004144 +:1006300000000004000000000000000000000000B6 +:100640000000000082800000004100000000000067 +:1006500084000000080000000000080000200000E6 +:10066000080000020000001100001000000000005F +:100670000800A0000400A00000840000000803207F +:100680000420009000820288880000000000110011 +:10069000200220000904080020C008A020C011008A +:1006A0000082080000A0050804900000000000C0BF +:1006B000000000080000009000000900210005C0B3 +:1006C00020C00300200800100000030008C0000440 +:1006D000000000C000000084009000000000000046 +:1006E000000000000000000000000000000000000A +:1006F00000000800000000000000000210110002CD +:100700000008000200000020000000000004C000FB +:100710000000000020008800C00000000800000069 +:100720000004002100000000004000000000000064 +:1007300000000000080000000000000000000000B1 +:1007400000000000000000034000400040000000E6 +:1007500000000000002184000800080000000000E4 +:10076000004000000000000200000005000008003A +:100770000000C021C000820004000000042000002E +:100780000000000400000400000000000000000061 :100790000000000000000000000000000000000059 -:1007A0000000000000000000000000000000000049 +:1007A0000000000100000000000000000000000048 :1007B0000000000000000000000000000000000039 :1007C0000000000000000000000000000000000029 -:1007D0000000000000000000000000000000000019 -:1007E0000000000000000000000000000000000009 -:1007F00000000000000000000000000000000000F9 -:1008000000000000000000000000000000000000E8 -:1008100000000000000000000000000000000000D8 -:1008200000000000000000000000000000000000C8 -:1008300000000000000000000000000000000000B8 +:1007D0000000000000400000004000000200000097 +:1007E0000000200002900000000000000000000057 +:1007F00000000000000000000000030000000000F6 +:10080000040000000000000101018500000100015A +:1008100000000000000000010003000000000001D3 +:10082000890000000001000000000000000000003E +:10083000010088000000000000000000000000002F :1008400000000000000000000000000000000000A8 -:100850000000000000000000000000000000000098 -:100860000000000000000000000000000000000088 +:100850000000000084000000000000000000000014 +:10086000011100208202008300000000000000004F :100870000000000000000000000000000000000078 -:100880000000000000000000000000000000000068 -:100890000000000000000000000000000000000058 -:1008A0000000000000000000000000000000000048 -:1008B0000000000000000000000000000000000038 -:1008C00000000000000000000000000000004000E8 -:1008D0000000000000000000000000000000000018 -:1008E0000000000000000000000000000000000008 +:1008800000008000000000004008211082200010BD +:1008900000080002000400044010009008400040DE +:1008A00000401005100400200000000000000000BF +:1008B00000032110001000000000000000000000F4 +:1008C0000000000000000000000000000000000028 +:1008D0000000000002008000000000000000000096 +:1008E00000002190058800080021000000000000A1 :1008F00000000000000000000000000000000000F8 -:1009000000000000000000000000000000000000E7 -:1009100000000000000000000000000000000000D7 -:1009200000000000000000000000000000000000C7 -:1009300000000000000000000000000000000000B7 -:1009400000000000000000000000000000040000A3 -:100950000004000000000000000000000000000093 -:100960000000000000000000000000000000000087 +:10090000000000000080801000031011200003048C +:10091000029000000000000000000041000800906C +:100920000000100202000802410300000004000061 +:10093000000020000800040020000000000000006B +:1009400000000000000000000000000000000000A7 +:100950000000000020802000051008850000000233 +:1009600000000000200020080800058000000000B2 :100970000000000000000000000000000000000077 -:100980000000000000000000000000000000000067 -:100990000000000000000000000000000000000057 -:1009A0000000000000000000000000000000000047 -:1009B0000000000000000000000000000000000037 -:1009C0000000000000000000000000000000000126 -:1009D0000000000100000000000000000000000016 -:1009E0000000000000000000000000000000000007 +:10098000000000000020004008018209010800006A +:1009900000000188000000000000000000010001CC +:1009A00000050000018900000001010100000000B5 +:1009B00000000000008801000100000000000000AD +:1009C0000000000000000000000000000000000027 +:1009D000000000000000014001000000008800004D +:1009E0000001000000000088000101100008000064 :1009F00000000000000000000000000000000000F7 -:100A000000000000000000000000000000000000E6 -:100A100000000000000000000000000000000000D6 -:100A200000000000000000000000000000000000C6 -:100A300000000000000000000000000000000000B6 +:100A000000000000000000000000400000000000A6 +:100A100008010000010000000000000000000000CC +:100A2000A00000000000000183010000010100009F +:100A300000000000000000010101010100010000B0 :100A400000000000000000000000000000000000A6 -:100A50000000040000000100000000000000000091 -:100A60000000000000000000000000000000000086 +:100A5000000000000000000000000000A0000000F6 +:100A600000000000000000000001010100018800FA :100A70000000000000000000000000000000000076 -:100A80000000000000000000000000000000000066 -:100A90000000000000000000000000000000000056 -:100AA0000000000000000000000000000000000046 -:100AB0000000000000000000000000000000000036 +:100A800000000000000000000800000080000000DE +:100A9000000280080002044000002100080000005D +:100AA0000000800020002000000911080504021049 +:100AB00000000000000000000010080321210808C9 :100AC0000000000000000000000000000000000026 -:100AD0000000000080000000040000000000000092 -:100AE0000000000000000000000000000000000006 -:100AF00000000000000000000000000000000000F6 -:100B000000000000000000000000000000000000E5 -:100B100000000000000000000000000000000000D5 -:100B200000000000000000000000000000000000C5 -:100B300000000000000000000000000000000000B5 -:100B400000000000000000000000000000000000A5 -:100B50000000000000000000000000000000000095 -:100B60000000000000000000000000000000000085 -:100B70000000000000000000000000000000000075 -:100B80000000000000000000000000000000000065 -:100B90000000000000000000000000000000000055 -:100BA0000000000000000000000000000000000045 -:100BB0000000000000000000000000000000000035 +:100AD000000000000000000000000002004180084B +:100AE00000200000000000000000000403100321AB +:100AF0004020000000000000000000000000000096 +:100B0000000000000000000000001008114040003C +:100B100000004180050021000008001000000000D6 +:100B2000000080008000000080001080080021008C +:100B30000508000080000000000008001000000010 +:100B400000020000000000000000000000000000A3 +:100B500000000000000000000000000041822100B1 +:100B6000080008080000000000000000A1030421A4 +:100B70000800080300000000000000000000000062 +:100B80000000000000000000000000000101010260 +:100B90000190000001A00000010000000000000022 +:100BA000000000009000A000080002000108000002 +:100BB0000100000184000200080082000000010022 :100BC0000000000000000000000000000000000025 -:100BD0000000000000000000000000000000000015 -:100BE0000000000000000000000000000000000005 -:100BF00000000000000000000000000000000000F5 -:100C000000000000000000000000000000000000E4 -:100C100000000000000000000000000000000000D4 -:100C200000000000000000000000000000000000C4 -:100C300000000000000000000000000000000000B4 +:100BD0000000000000000000000000000000010212 +:100BE00000000100010000002000000000001102D0 +:100BF000210005004000000000000000000000008F +:100C00000000000000000000000000000000600084 +:100C100000E007000000880000E000000000000085 +:100C2000000000000000004100E00700600000003C +:100C300000E00000000000000000000000000000D4 :100C400000000000000000000000000000000000A4 -:100C50000000000000000000000000E000000000B4 +:100C50000000000000000000000000000000000094 :100C60000000000000000000000000000000000084 -:100C70000000000000000000000000000000000074 +:100C7000000000000700000000000000000000006D :100C80000000000000000000000000000000000064 :100C90000000000000000000000000000000000054 -:100CA0000000000000000000000000000000000044 -:100CB0000000000000000000000000000000000034 +:100CA0000000000000000000FFFF00000000000046 +:100CB0000000000000000000FFFC00C00000000079 :100CC0000000000000000000000000000000000024 :100CD0000000000000000000000000000000000014 -:100CE0000000000000000000000000000000000004 -:100CF00000000000000000000000000000000000F4 +:100CE00000000000000000000000FF00FF00000006 +:100CF000000000B40024000000000000000000001C :100D000000000000000000000000000000000000E3 :100D100000000000000000000000000000000000D3 -:100D200000000000000000000000000000000000C3 -:100D300000000000000000000000000000000000B3 +:100D200000000000000000000000FFEF10000000C5 +:100D300000000000000000000000FFFF00000000B5 :100D400000000000000000000000000000000000A3 :100D50000000000000000000000000000000000093 :100D60000000000000000000000000000000000083 @@ -102649,493 +102649,493 @@ :100DE0000000000000000000000000000000000003 :100DF00000000000000000000000000000000000F3 :100E000000000000000000000000000000000000E2 -:100E100000000000000000000000000000000000D2 -:100E200000000000000000000000000000000000C2 -:100E300000000000000000000000000000000000B2 +:100E100000000000000000000000666600FF000007 +:100E20000000000000000000000000000000FF00C3 +:100E3000FF000000000000000000000000000000B3 :100E400000000000000000000000000000000000A2 :100E50000000000000000000000000000000000092 :100E60000000000000000000000000000000000082 -:100E70000000000000000000000000000000000072 +:100E70000000000000000000F900C10000000000B8 :100E80000000000000000000000000000000000062 -:100E90000000000000000000000000000000000052 +:100E900000000000000000000000000000FF00FF54 :100EA0000000000000000000000000000000000042 -:100EB0000000000000000000000000000000000032 +:100EB000FF00FF0000000000000000000000000034 :100EC0000000000000000000000000000000000022 :100ED0000000000000000000000000000000000012 :100EE0000000000000000000000000000000000002 -:100EF00000000000000000000000000000000000F2 +:100EF00000000000000000000000F900C100000038 :100F000000000000000000000000000000000000E1 -:100F100000000000000000000000000000000000D1 -:100F200000000000000000000000000000000000C1 -:100F300000000000000000000000000000000000B1 -:100F400000000000000000000000000000000000A1 +:100F10000000000000000000000005610A0C850DC3 +:100F200000A000610007800D000000610006000DB8 +:100F3000000000614027000D000000610007000D67 +:100F40000000000000000000000000610006000D2D :100F50000000000000000000000000000000000091 -:100F60000000000000610007000D0000000000000C -:100F70000000000000000000000000000000000071 -:100F80000000000000000000000000000000000061 -:100F90000000000000000000000000000000000051 -:100FA0000000000000000000000000000000000041 -:100FB0000000000000000000000000000000000031 -:100FC0000000000000000000000000000000000021 -:100FD0000000000000000000000000000000000011 -:100FE0000000000000000000000000000000000001 -:100FF00000000000000000000000000000000000F1 -:1010000000000000000000000000000000000000E0 -:1010100000000000000000000000000000000000D0 -:1010200000000000000000000000000000000000C0 -:1010300000000000000000000000000000000000B0 -:1010400000000000000000000000000000000000A0 -:101050000000000000000000000000000000000090 +:100F6000000000000000000000000000006100061A +:100F7000000D000000000000000000010061400EB4 +:100F8000000D00A0000000000000000000000000B4 +:100F90000000000000000000000000005F5F0A0A7F +:100FA00000000000AA0A005F0F0F0F0F00000000F2 +:100FB000000000000000000000000000FFFFFFC371 +:100FC000F0FFFFFF00000000000000005555FF008B +:100FD0000A02AAA2000000000000000000000000B9 +:100FE00000000000000000000000000000003F3092 +:100FF00055FF30303030000000000000000055C0C8 +:1010000055002828282800000000000000000000EB +:1010100000000000000000000000000000005F0A67 +:101020005F0A00000000000A005FC34B4BC30000D2 +:101030000000000000000000000000000000AAFF07 +:10104000F0C3C0C0CFCF0000000000000000555525 +:10105000FF000800A8A00000000000000000000041 :101060000000000000000000000000000000000080 -:101070000000000000000000000000000000000070 -:101080000000000000000000000000000000000060 +:101070003F30550028820000000000000000000002 +:1010800055C05500F0F000FF000000000000000017 :101090000000000000000000000000000000000050 -:1010A0000000000000000000000000000000000040 -:1010B0000000000000000000000000000000000030 -:1010C0000000000000000000000000000000000020 -:1010D0000000000000000000000000000000000010 +:1010A00000000000000000000C00F3FF20008A0098 +:1010B000F001C00100000000C0FFCFFF00000000F1 +:1010C0005F503F3F28F0AAAA000000000000000087 +:1010D00050F000A03F00BE00000000000000000033 :1010E0000000000000000000000000000000000000 -:1010F00000000000000000000000000000000000F0 -:1011000000000000000000000000000000000000DF +:1010F000000000000000A0F5BEBE000000000000DF +:1011000000003F0F050FCB0BFB3B00000000000071 :1011100000000000000000000000000000000000CF -:1011200000000000000000000000000000000000BF -:1011300000000000000000000000000000000000AF -:10114000000000000000000000000000000000009F -:10115000000000000000000000000000000000008F +:10112000000000000000000000000C00F3FF75004C +:10113000DF0030010001000000000000000000009E +:1011400000005F50303028F0000000000000000078 +:1011500000005FFF0FAF3F00BE0000000000000076 :10116000000000000000000000000000000000007F -:10117000000000000000000000000000000000006F -:10118000000000000000000000000000000000005F +:101170000000000000000000A0F5141400000000B2 +:10118000000000003F0FF50FC808F838000000000D :10119000000000000000000000000000000000004F -:1011A0000000000000000000000000002000880097 -:1011B00000000000000000000000000020002000EF -:1011C00020000000040000000000040000000000F7 -:1011D00000000000000000000000000020002000CF -:1011E00020000000000020000000000000000000BF -:1011F00000000000000000000000000000002000CF -:10120000200020000000000000000000000000009E -:1012100000000000000000000000000000002000AE -:1012200020002000000000000000000000A00000DE -:10123000000000000000200000000000000000008E -:10124000000000000000000000000002000000009C -:10125000004000000000000000000000000000004E -:10126000000000000000000000000000000020005E -:10127000000000000000000000000000000000006E -:10128000000000000000000000000000000000005E -:10129000000000000000000000000000000000004E -:1012A000000000000000000000000000000000003E -:1012B000000000000200001000000000000000001C -:1012C000000000000000001000000000000000000E -:1012D00000000000000000100000000002000000FC -:1012E00000000000000000100000000000000000EE -:1012F00000100000000000000010000000000000CE -:1013000000000000080000100010000000000000B5 -:10131000000000008200000000000000000000004B -:101320000000020002000040004000000000000039 -:1013300000000400000000000000000000000000A9 -:10134000000000000000000000000000000000009D -:10135000000000000000000000000000000000008D -:10136000000000000000000000000000000000007D -:101370000000000000000000000000000000050068 -:10138000000000000000000000000000000000005D -:10139000000000000000000000000000000000004D -:1013A000000000000000000000000000000000003D -:1013B00000008200000000000000000000000000AB -:1013C000000000000000000000000000000000001D -:1013D000000000000000000000000000000000000D -:1013E00000000000000000000000000000000000FD -:1013F00000000000000000000000000000000000ED -:1014000000000000000000000000000000000800D4 -:1014100000000000000000000000000000000000CC -:1014200000000000000000000000000000000000BC -:1014300000000000000000000000000000000000AC -:10144000000000000000000000000000000000009C -:10145000000000000000000000000000000000008C -:10146000000000000000000000000000000000007C -:10147000000000000000000000000000000000006C -:10148000000000000000000000000000000000005C -:10149000000000000000000000000000000000004C -:1014A000000000000000000000000000000000003C -:1014B000000000000000000000000000000000002C -:1014C000000000000000000000000000000000001C -:1014D000000000000000000000000000000000000C -:1014E000A00000000000000000000000000000005C -:1014F00000000000000000000000000000000000EC -:1015000000000000000000000000000000000000DB -:1015100000000000000000000000000000000000CB -:1015200000000000000000000000000000000000BB -:1015300000000000000000000000000000000000AB -:10154000000000000000000000000000000000009B -:10155000000000000000000000000000000000008B -:10156000000000000000000000000000000000007B -:10157000000000000000000000000000000000006B -:10158000000000000000000000000000000000005B -:10159000000000000000000000000000000000004B -:1015A000000000000000000000000000000000003B -:1015B000000000000000000000000000000000002B -:1015C000000000000000000000000000000000001B -:1015D000000000000000000000000000000000000B -:1015E00000000000000000000000000000000000FB -:1015F00000000000000000000000000000000000EB -:1016000000000000000000000000000000000000DA -:1016100000000000000000000000000000000000CA -:1016200000000000000000000000000000000000BA -:1016300000000000000000000000030000000000A7 -:10164000000000000000000000000000000000009A -:10165000000000000000000000000000000000008A -:101660000800000000000000000000000000000072 -:101670000000000000000000030000000000000067 -:10168000000000000000000000000000000000005A -:10169000000000000000000000000000000000004A -:1016A000000000000000000000000000000000003A -:1016B000000000000000000000000000000000002A -:1016C000000000000000000000000000000000001A -:1016D000000000000000000000000000000000000A -:1016E00008000000000000000000000000000000F2 -:1016F00000000000000000000000000000000000EA -:1017000000000000000000000000000000000000D9 -:1017100000000000000000000000000000000000C9 -:1017200000000000000000000000000000000000B9 -:1017300000000000000000000000000000000000A9 -:101740000000000000000000000000000000000099 -:101750000000000000000000000000000000000089 +:1011A00000000000C0000420000440002000840073 +:1011B0004000200040008800200588050200200033 +:1011C0000200000040008800400040002000208015 +:1011D00020008880200088008400C00020000000DB +:1011E0000400C000000320008800821000002000DE +:1011F000000420000000200288100000000004808D +:1012000004002000200284042000A0000000C00090 +:101210000000000000008800000000000000000046 +:1012200004000000000040000040000000004000FA +:1012300000408002050000000000000440000000A3 +:1012400040001000040400024000000020000000E4 +:1012500000020090000210000000000000004000AA +:10126000000200040004000000000940000000002B +:1012700000000002400000004020000009000004BF +:101280000010000000A000014000090000400082A2 +:10129000000000020000000000002000000200002A +:1012A0000000000000C00000041000000440821094 +:1012B0000000050004001000844000000040000011 +:1012C00020000400001002000000000000000410D4 +:1012D00000000000080004100000000000000000F2 +:1012E0000041000090000000000000000008001015 +:1012F0000490000000000000040000000000000056 +:10130000841009000010020008020980000000009B +:10131000020500000000C000001000008210000064 +:101320000410000040000000100000010000000157 +:1013300002000400400000008000000800080400D3 +:101340000010040000080000000804000000021063 +:101350000200000000840000050005C00008000035 +:101360000000041004C0000004080000040800008D +:1013700009820302040002000400050804000402BC +:10138000020004008802020104004109042004084C +:101390000000050004000410040004080400040216 +:1013A000000400042008A00000008008880010004D +:1013B0000808400084000400A000000800000000AD +:1013C000C005000008000000000000210800A00087 +:1013D00000088208000000000000900800000000E3 +:1013E00000000000000000410000001100000000AB +:1013F0000000000000000000000800009000000055 +:1014000020000008000000000000000000000000B4 +:10141000000082000000000000000000000000004A +:101420000000000082080000000000000000000032 +:1014300009844100002000000000000000110000AD +:10144000000041904000000800000000000000087B +:10145000000000080300410000020000030000003B +:1014600000000000080000080088080010000000CC +:1014700000000000000200000000000000881100D1 +:1014800004400800080000000500411009000304A2 +:1014900000000000000000000000009000000000BC +:1014A00000000040000000000000000009000800EB +:1014B00000110800001008090000080000001020BA +:1014C00000200800000010000800822000008200B8 +:1014D000000008000000000000410021000000049E +:1014E00000000800020000000000C004000000002E +:1014F00000000002088008000800000482000000CC +:10150000084040400840C0000800000000001004EF +:10151000830004040002A0028204A000000208006C +:101520008202100000008200C00882000000C0009B +:1015300082400000000000A0000000000000080041 +:10154000800000000000000000000000000000001B +:101550000000000000000000000003000000020086 +:10156000080004000000000000000000000000006F +:10157000000000002000000804A00000000000009F +:1015800000000000890040004100000000002084AD +:101590000000400009004100110021C000000000CF +:1015A0000000000000002100040000000000000016 +:1015B0000000000000038200001100000000100085 +:1015C0000000100800000000000000000000000003 +:1015D0000000000000000800000000000000000003 +:1015E00000000000000000000800000000000000F3 +:1015F0000000000000000000A00000000100C0008A +:1016000008000000A0000000000040008200000070 +:1016100000000200000000000000000000000800C0 +:101620000000000000000820000000008200000010 +:1016300084000800000008000420030000004004AB +:10164000212003848901000000900000004008C0B0 +:10165000090400000800400400000204040800908F +:101660000000000000A01004049000040504000025 +:1016700000A00000000000000000000200A04000E8 +:1016800000002100000000000084000800000008A5 +:1016900000400000000000000340000400080304B4 +:1016A00000000082000000000400000000000200B2 +:1016B0000000000000000000000010000800000012 +:1016C0000000000800000000000000000002000010 +:1016D0000000020000400000000000004000000088 +:1016E00000000000000000000000000000000000FA +:1016F00000000800000000000000000010000000D2 +:101700004000000000000000000000000800100081 +:101710000000000800001000400008000009000060 +:1017200000080000400200000000840020001000BB +:101730008400000000000000C00020000000000045 +:101740000020000000000000000041000000100028 +:101750000000000000000000000000000800000081 :101760000000000000000000000000000000000079 -:101770000000000000000000000000000000000069 -:101780000000000000000000000000000000000059 -:101790000000000000000000000000000000000049 -:1017A0000000000000000000000000000000000039 +:1017700000000000000000000000000000008000E9 +:1017800000008000000000000004000000000800CD +:101790000000000008C0210000908300000020002D +:1017A000080003000000000003000000000000002B :1017B0000000000000000000000000000000000029 :1017C0000000000000000000000000000000000019 :1017D0000000000000000000000000000000000009 -:1017E00000000000000000000000000000000000F9 +:1017E00000000000000001000000000000000000F8 :1017F00000000000000000000000000000000000E9 -:1018000000000000000000000000000000000000D8 -:1018100000000000000000000000000000000000C8 +:101800000100400000000000000000000000000097 +:1018100000010000000110A00000A00890080000D6 :1018200000000000000000000000000000000000B8 -:1018300000000000000000000000000000000000A8 +:1018300000000000000000000000040000000000A4 :101840000000000000000000000000000000000098 :101850000000000000000000000000000000000088 -:101860000000000000000000000000000000000078 +:101860000000000000000000110000000000000067 :101870000000000000000000000000000000000068 -:101880000000000000000000000000000000000058 -:101890000000000000000000000000000000000048 +:101880000000100000000000000000000000000048 +:101890000003001000080011008009000000000093 :1018A0000000000000000000000000000000000038 -:1018B0000000000000000000000000000000000028 -:1018C0000000000000000000000000000000000018 +:1018B00000000000000000000000080080000000A0 +:1018C000000000100000000020802100080008092E :1018D0000000000000000000000000000000000008 -:1018E00000000000000000000000000000000000F8 +:1018E0000000000000000000008000000002000472 :1018F00000000000000000000000000000000000E8 :1019000000000000000000000000000000000000D7 -:1019100000000000000000000000000000000000C7 -:1019200000000000000000000000000000000000B7 -:1019300000000000000000000000000000000000A7 -:101940000000000000000000000000000000000097 -:101950000000000000000000000000000000000087 -:101960000000000000000000000000000000000077 -:101970000000000000000000000000000000000067 +:10191000000000000000000000802000830285001D +:1019200008000000000000000000000000000000AF +:101930000000000000000000000008000500030097 +:1019400005210000000000C00000010201000100AC +:101950000001000000000000000000000000000086 +:1019600000000000000000000000004000400000F7 +:101970000001000000000000000000000000000066 :101980000000000000000000000000000000000057 -:101990000000000000000000000000000000000047 -:1019A0000000000000000000000000000000000037 -:1019B0000000000000000000000000000000000027 -:1019C0000000000000000000000000000000000017 +:101990000000000000000000000000022000020122 +:1019A000A100414000000000000000000000000015 +:1019B0000000000000000000000000000190000096 +:1019C0000000000100000000000000000000000016 :1019D0000000000000000000000000000000000007 :1019E00000000000000000000000000000000000F7 :1019F00000000000000000000000000000000000E7 -:101A000000000000000000000000000000000000D6 -:101A100000000000000000000000000000000000C6 -:101A200000000000000000000000000000000000B6 +:101A000000000000000000000000020000010000D3 +:101A10000000000000000000000000000000902016 +:101A2000000200412008010000000000000000004A :101A300000000000000000000000000000000000A6 -:101A40000000000000000000000000000000000096 +:101A40000001000000000000000000000000000095 :101A50000000000000000000000000000000000086 -:101A60000000000000000000000000000000000076 -:101A70000000000000000000000000000000000066 -:101A80000000000000000000000000000000000056 +:101A60000000000000000000000000000000004036 +:101A70000020000500000000000000000000000041 +:101A800000000000000000000010004100100041B4 :101A90000000000000000000000000000000000046 -:101AA0000000000000000000000000000000000036 +:101AA0000004008500A1008040000000000000004C :101AB0000000000000000000000000000000000026 -:101AC0000000000000000000000000000000000016 -:101AD0000000000000000000000000000000000006 +:101AC0000005002000400020800000000000000011 +:101AD0004140200020000210000000000000000033 :101AE00000000000000000000000000000000000F6 -:101AF00000000000000000000000000000000000E6 +:101AF00004000820080010000000000000000000A2 :101B000000000000000000000000000000000000D5 -:101B100000000000000000000000000000000000C5 -:101B200000000000000000000000000000000000B5 +:101B10000000000000000000000000000040000085 +:101B200000000003800000808020000000400000D2 :101B300000000000000000000000000000000000A5 -:101B40000000000000000000000000000000000095 -:101B50000000000000000000000000000000000085 +:101B400000004100020021002003C000100002003C +:101B500084000110000000000000000000000000F0 :101B60000000000000000000000000000000000075 :101B70000000000000000000000000000000000065 :101B80000000000000000000000000000000000055 :101B90000000000000000000000000000000000045 -:101BA0000000000000000000000000000000000035 +:101BA00000000000044004200404A0000000000025 :101BB0000000000000000000000000000000000025 -:101BC0000000000000000000000000000000000015 -:101BD0000000000000000000000000000000000005 +:101BC0000000000001900100010000000000000082 +:101BD00000000000810000E00000000000000000A4 :101BE00000000000000000000000000000000000F5 -:101BF00000000000000000000000000000000000E5 +:101BF00000000000000000000700000000000000DE :101C000000000000000000000000000000000000D4 :101C100000000000000000000000000000000000C4 -:101C200000000000000000000000000000000000B4 -:101C300000000000000000000000000000000000A4 -:101C40000000000000000000000000000000000094 -:101C50000000000000000000000000000000000084 +:101C2000000007000000000000000000000000426B +:101C3000000007000000000000000000000000009D +:101C4000000000000000000000000000000050FA4A +:101C5000BEBE000000000000000000000000000008 :101C60000000000000000000000000000000000074 :101C70000000000000000000000000000000000064 :101C80000000000000000000000000000000000054 :101C90000000000000000000000000000000000044 -:101CA0000000000000000000000000000000000034 +:101CA0000000000000000000C3FFC3F0C371FF711B :101CB0000000000000000000000000000000000024 :101CC0000000000000000000000000000000000014 -:101CD0000000000000000000000000000000000004 +:101CD00050FA141400000000000000000000000092 :101CE00000000000000000000000000000000000F4 :101CF00000000000000000000000000000000000E4 :101D000000000000000000000000000000000000D3 :101D100000000000000000000000000000000000C3 -:101D200000000000000000000000000000000000B3 -:101D300000000000000000000000000000000000A3 +:101D200000000000000000000000C300C3F00071CC +:101D30003C710000000000000000000000000000F6 :101D40000000000000000000000000000000000093 :101D50000000000000000000000000000000000083 :101D60000000000000000000000000000000000073 :101D70000000000000000000000000000000000063 :101D80000000000000000000000000000000000053 :101D90000000000000000000000000000000000043 -:101DA0000000000000000000000000000000000033 -:101DB0000000000000000000000000000000000023 +:101DA000000000000000000000000000FFFF000035 +:101DB00000FFCECE00000000000000000000000088 :101DC0000000000000000000000000000000000013 :101DD0000000000000000000000000000000000003 :101DE00000000000000000000000000000000000F3 :101DF00000000000000000000000000000000000E3 :101E000000000000000000000000000000000000D2 :101E100000000000000000000000000000000000C2 -:101E200000000000000000000000000000000000B2 -:101E300000000000000000000000000000000000A2 +:101E20000000000000000000000000000000D3D30C +:101E3000D3D300FFFEFE0000000000000000000001 :101E40000000000000000000000000000000000092 -:101E50000000000000000000000000000000000082 -:101E60000000000000000000000000000000000072 -:101E70000000000000000000000000000000000062 -:101E80000000000000000000000000000000000052 -:101E90000000000000000000000000000000000042 -:101EA0000000000000000000000000000000000032 -:101EB0000000000000000000000000000000000022 +:101E5000000000000000A0000000000000000041A1 +:101E60000006C00D0000000000000000000000009F +:101E70000000000000000000000000000000006101 +:101E80000A0E000D0000000000000000000000002D +:101E9000000000000000000000610006000D0000CE +:101EA00000000000000000000061000E000D00A016 +:101EB00000610006000D0000050000380000000071 :101EC0000000000000000000000000000000000012 -:101ED0000000000000000000000000000000000002 -:101EE00000000000000000000000000000000000F2 +:101ED00000610006000D000000000000000000008E +:101EE000C3C3FAFF00000000000000000000000073 :101EF00000000000000000000000000000000000E2 -:101F000000000000000000000000000000000000D1 -:101F100000000000000000000000000000000000C1 -:101F200000000000000000000000000000000000B1 -:101F300000000000000000000000000000000000A1 +:101F00000000FFFFC33FC33F0000000000000000CF +:101F10000000000000000000000000000000003091 +:101F20000028000000000000000000000000000089 +:101F3000000000000000101F101F00000000000043 :101F40000000000000000000000000000000000091 -:101F50000000000000000000000000000000000081 -:101F60000000000000000000000000000000000071 +:101F5000000055F0C3000000000000000000000079 +:101F6000000000000A0F0000000000000000000058 :101F70000000000000000000000000000000000061 -:101F80000000000000000000000000000000000051 +:101F800000000004FBFFFF3FFF3F000000000000D7 :101F90000000000000000000000000000000000041 :101FA0000000000000000000000000000000000031 -:101FB0000000000000000000000000000000000021 +:101FB0000000000000000000D0DFD0DF00000000C3 :101FC0000000000000000000000000000000000011 -:101FD0000000000000000000000000000000000001 -:101FE00000000000000000000000000000000000F1 +:101FD0000000000055F0C3FFF4F0B4B400000000AE +:101FE000000000000000000000C2FFC2000000006E :101FF00000000000000000000000000000000000E1 :1020000000000000000000000000000000000000D0 :1020100000000000000000000000000000000000C0 -:1020200000000000000000000000000000000000B0 -:1020300000000000000000000000000000000000A0 +:102020000000000000000000000000000000300F71 +:102030003000000000000000000073FF730000008B :102040000000000000000000000000000000000090 -:102050000000000000000000000000000000000080 -:102060000000000000000000000000000000000070 +:1020500000000000000000000000FFFF3C00000046 +:102060000000000000000000000000FEFFFE000075 :102070000000000000000000000000000000000060 :102080000000000000000000000000000000000050 :102090000000000000000000000000000000000040 :1020A0000000000000000000000000000000000030 -:1020B0000000000000000000000000000000000020 +:1020B000300F300000000000000000007FFF7F00B4 :1020C0000000000000000000000000000000000010 -:1020D0000000000000000000000000000000000000 -:1020E00000008800000088000000000000000000E0 -:1020F00000000000000400000000000000000000DC -:10210000000020000000200000000000000000008F -:102110000000000000004000000000000004000477 -:10212000000000002000000000000000000000008F -:10213000000000000000000020000000000000007F -:10214000000000000000000000000000000000008F -:10215000000000000000000000000000000000007F -:1021600000000000000040002000000000000040CF -:10217000000000000000000000000000000200005D -:10218000000040000000000004000000000000000B -:1021900000000000000000000000000000004000FF -:1021A000000000000000000000000000000000002F -:1021B00021000000000000000020000000020000DC -:1021C00040000000000000000000000000000000CF -:1021D00000000000000000000000000000004000BF -:1021E00000000000000000000010001000000000CF -:1021F00000000000000000000000000000000000DF -:1022000000000000000000000000000000000000CE -:10221000000000000000000000100010000000009E -:10222000000000000000000000000010201000006E -:10223000000000000000000000000000000004009A -:10224000000000000000020020400000000000002C -:10225000000000000000000000000000000000007E -:10226000000000000000000000002000000000004E -:10227000000000000000000004000000000000005A -:10228000000000000000000000000000000000004E -:10229000000000000000000000000000000000003E -:1022A000000000000000000000000000000000002E -:1022B000000000000000000000000000000000001E -:1022C000000000000000000000000000000000000E -:1022D00000000000000000000000000000000000FE -:1022E00000000000000000000000000000000000EE -:1022F00000000000000000000000000000000000DE -:1023000000000000000000000000000000000000CD -:1023100000000000000000000000000000000000BD -:1023200000000000000000000000000000000000AD +:1020D000000000000000000000000000D7CFD7CFB4 +:1020E0000000200020000000000000000000A00010 +:1020F00000000000200010802000200000040000EC +:1021000000000000200088004000000000000000E7 +:1021100084000000200084002000200040004000D7 +:1021200000030200040020040200400088000003B5 +:102130004000000000002000200000002000C0043B +:1021400088808800040020042002048000800000B1 +:10215000002000000000000004000000000000005B +:1021600004000000000000A00000000000000000CB +:10217000100000000000410000020000008200008A +:10218000000000000000000000000000000040020D +:1021900000000000000000000000000000880000B7 +:1021A00000000000400000000000000000000002ED +:1021B0004000000240000000000000040000000099 +:1021C000200200024000200000000000002000204B +:1021D000400240034000000000000000000000003A +:1021E000000002000000002000000000000000418C +:1021F0000004001003000210092104000800000080 +:102200000000041002000000001082000000000026 +:102210000040000000000000000582800040000037 +:10222000001000000000000000000210001000007C +:102230000000000005000000000000100210020075 +:102240000000C00840000300034002000900000035 +:1022500040400000000002000400000000100000E8 +:1022600000400000001000000000000000C004005A +:102270000000020004002000000020000000040014 +:10228000000000820000040000840400020000003E +:102290000000000000000410000000000420040002 +:1022A0000000008800000000000000000400040896 +:1022B00004040000040008000000040041000000C5 +:1022C00004000400040080000800C0004000081062 +:1022D000050080C005004100090000000000030067 +:1022E00000000500411004080000880000004021A3 +:1022F00084030040000000008800000040028802C3 +:10230000000000000800080000000000900000002D +:102310000000000000000200000002050000900024 +:1023200004000000000004000000000000000005A0 :10233000000000000000000000000000000000009D -:10234000000000000000000000000000000000008D -:10235000000000000000000000000000000000007D -:10236000000000000000000000000000000000006D -:10237000000000000000000000000000000000005D -:10238000000000000000000000000000000000004D -:10239000000000000000000000000000000000003D -:1023A000000000000000000000000000000000002D -:1023B000000000000000000000000000000000001D -:1023C000000000000000000000000000000000000D -:1023D00000000000000000000000000000000000FD -:1023E00000000000000000000000000000000000ED -:1023F00000000000000000000000000000000000DD -:1024000000000020000000000000000000000000AC -:1024100000000000000000000000000000000000BC -:1024200000000000000000000000000000000000AC -:10243000000000000000000000000000000000009C -:10244000000000000000000000000000000000008C -:10245000000000000000000000000000000000007C -:10246000000000000000000000000000000000006C -:10247000000000000000000000000000000000005C -:10248000000000000000000000000000000000004C -:10249000000000000000000000000000000000003C -:1024A000000000000000000000000000000000002C -:1024B000000000000000000000000000000000001C -:1024C000000000000000000000000000000000000C -:1024D00000000000000000000000000000000000FC -:1024E00000000000000000000000000000000000EC -:1024F00000000000000000000000000000000000DC -:1025000000000000000000000000000000000000CB +:1023400088002000000000000000000084008800D9 +:102350000000840000000000008000000000000079 +:102360000400000400000004000004000000050058 +:1023700003000010001000000000000800008001B1 +:102380000021000000000000000000000800030021 +:1023900000000000000000000800000000840000B1 +:1023A00008840000000000000000000000000000A1 +:1023B0000000000000400002008200000800000051 +:1023C0004100400008200000000000080800000054 +:1023D00004000000080000000000080400001000D5 +:1023E00000004100210000000000000008118240B0 +:1023F00000000004080400000000000001080104BF +:10240000A002090202000000000800000009000408 +:1024100000000010000000000000000000000000AC +:1024200000000105000202000000000000000000A2 +:10243000000010400000400084000000C0000809B7 +:1024400010418200C0040000000400098409040057 +:1024500000040020002000210800000000100020DF +:10246000000000000800000008000840080000000C +:102470000000000000000000002008000000040030 +:1024800020210001200100000000000000400000A9 +:102490000000000000080308000000000200200007 +:1024A00000004000040000000000000000000000E8 +:1024B00020000000000000000000000000000000FC +:1024C0000800100000000400000040004000200050 +:1024D00021000000000020001000218800000300FF +:1024E0000000000000000000200000004000000488 +:1024F000000000000000840084000800C0001000FC +:102500000000400000000008000000000000000083 :1025100000000000000000000000000000000000BB :1025200000000000000000000000000000000000AB -:10253000000000000000000000000000000000009B -:10254000000000000000000000000000000000008B -:10255000000000000000000000000000000000007B -:102560000000000000000000080000000000000063 -:10257000000000000000000000000000000000005B -:10258000000000000000000000000000000000004B -:10259000000000000000000000000000000000003B -:1025A000000000000000000000000000000000002B -:1025B000000000000000000000000000000000001B -:1025C000000000000000000000000000000000000B -:1025D00000000000000000000000000000000000FB -:1025E00000000000000000000000000000000000EB -:1025F00000000000000000000000000000000000DB -:1026000000000000000000000000000000000000CA -:1026100000000000000000000000000000000000BA -:1026200000000000000000000000000000000000AA -:10263000000000000000000000000000000000009A -:10264000000000000000000000000000000000008A -:10265000000000000000000000000000000000007A -:10266000000000000000000000000000000000006A -:10267000000000000000000000000000000000005A -:10268000000000000000000000000000000000004A -:10269000000000000000000000000000000000003A -:1026A000000000000000000000000000000000002A +:10253000000004000000000000000800000000008F +:10254000A000080000400000900000000000000013 +:1025500040009000840404009000900004030000F8 +:102560000000002000000000001100202000A0005A +:1025700000000900000041001100000000000504F7 +:1025800000000000840009000000030000000000BB +:102590000000000000000000000004000000000037 +:1025A000008800000900000000000000000000405A +:1025B00000000000210000000000110000000000E9 +:1025C00000000004080000000000000000000400FB +:1025D00020009010000000000000000000009000AB +:1025E00000000000000400000000000005000300DF +:1025F0000000050000000408002108090800000090 +:1026000008000000000000000000000000000000C2 +:1026100000000000000000000000000004000000B6 +:102620000000000000000000000000001000004159 +:102630000000004000000000100000000800000042 +:102640000000001000008400000000000000820074 +:102650000000C000000000002000900040000000CA +:1026600000000000000084000003080000000000DB +:102670000000000000000000000000000000054015 +:1026800021000000210008000400000000040000F8 +:1026900000000000200000100000000000002008E2 +:1026A00000000000050040000000000000000000E5 :1026B000000000000000000000000000000000001A -:1026C000000000000000000000000000000000000A -:1026D00000000000000000000000000000000000FA -:1026E00000000000000000000000000000000000EA -:1026F0000000000041000000000000000000000099 -:1027000000000000000000000000000000000000C9 +:1026C0000000000800000000000000000000000002 +:1026D0000000000000820800110400020304020050 +:1026E0000000200000A00202002000000000000006 +:1026F00002000000000400000000000000000000D4 +:102700000000000000000000000000008500000044 :1027100000000000000000000000000000000000B9 :1027200000000000000000000000000000000000A9 :102730000000000000000000000000000000000099 -:102740000000000000000000000000000000000089 -:102750000000000000000000000000000000000079 -:102760000000000000000000000000000000000069 +:102740000000400000000000C00000000000000089 +:102750000000000001000000000000000000000078 +:1027600000001140000202889008000000000000F4 :102770000000000000000000000000000000000059 -:102780000000000000000000000000000000000049 +:102780000000000000000000000040004000820047 :102790000000000000000000000000000000000039 :1027A0000000000000000000000000000000000029 :1027B0000000000000000000000000000000000019 -:1027C0000000000000000000000000000000000009 -:1027D00000000000000000000000000000000000F9 -:1027E00000000000000000000000000000000000E9 +:1027C0000000000080000000000000000000000089 +:1027D0000000000000004000000000000041002058 +:1027E0000003001109830388000580050000000034 :1027F00000000000000000000000000000000000D9 -:1028000000000000000000000000000000000000C8 -:1028100000000000000000000000000000000000B8 +:102800000000000000000000000000002003100095 +:1028100041000388000000000000000000000000EC :1028200000000000000000000000000000000000A8 :102830000000000000000000000000000000000098 -:102840000000000000000000000000000000000088 -:102850000000000000000000000000000000000078 -:102860000000000000000000000000000000000068 +:102840000000000000000000000080028000000086 +:102850000000000000000500400020000300800090 +:102860000008802080401000820383A141100000F6 :102870000000000000000000000000000000000058 -:102880000000000000000000000000000000000048 -:102890000000000000000000000000000000000038 +:1028800000000000000000000000000000000090B8 +:1028900001000000008800000000000000000000AF :1028A0000000000000000000000000000000000028 -:1028B0000000000000000000000000000000000018 -:1028C0000000000000000000000000000000000008 -:1028D00000000000000000000000000000000000F8 -:1028E00000000000000000000000000000000000E8 +:1028B0000000000000020000000000000000000016 +:1028C000000000000000000020001000A001100027 +:1028D00000000000000000000000000001000000F7 +:1028E0000420A0018411C0900920030040854141CB :1028F00000000000000000000000000000000000D8 :1029000000000000000000000000000000000000C7 -:1029100000000000000000000000000000000000B7 +:102910000000A00100000001000000000000000015 :1029200000000000000000000000000000000000A7 :102930000000000000000000000000000000000097 -:102940000000000000000000000000000000000087 -:102950000000000000000000000000000000000077 -:102960000000000000000000000000000000000067 -:102970000000000000000000000000000000000057 +:1029400000000000000000000000004000108410A3 +:10295000000800000000000000000001000020014D +:102960000001000000000100000010900090A08510 +:1029700040C0000000000000000000000000000057 :102980000000000000000000000000000000000047 -:102990000000000000000000000000000000000037 +:1029900000000520001000030020000000000000DF :1029A0000000000000000000000000000000000027 :1029B0000000000000000000000000000000000017 -:1029C0000000000000000000000000000000000007 -:1029D00000000000000000000000000000000000F7 -:1029E00000000000000000000000000000000000E7 -:1029F00000000000000000000000000000000000D7 +:1029C0000000000000000000000000000080000087 +:1029D00000000000000000000000000000200021B6 +:1029E0000021004000004000100000008002204153 +:1029F000838803C000000000000000000000000009 :102A000000000000000000000000000000000000C6 -:102A100000000000000000000000000000000000B6 +:102A100000000000418003200800200300000000A7 :102A200000000000000000000000000000000000A6 -:102A30000000000000000000000000000000000096 +:102A30000000000000050009000000000000000088 :102A40000000000000000000000000000000000086 -:102A50000000000000000000000000000000000076 -:102A60000000000000000000000000000000000066 -:102A70000000000000000000000000000000000056 +:102A50000080000000000000000000000000008274 +:102A6000000000000004210004000500200088A1EF +:102A7000058041000011000000000000000000007F :102A80000000000000000000000000000000000046 -:102A90000000000000000000000000000000000036 +:102A90000000000000000102000001000000000032 :102AA0000000000000000000000000000000000026 :102AB0000000000000000000000000000000000016 :102AC0000000000000000000000000000000000006 -:102AD00000000000000000000000000000000000F6 -:102AE00000000000000000000000000000000000E6 -:102AF00000000000000000000000000000000000D6 +:102AD00000000004000000000000000000000000F2 +:102AE0000041000000000000210021882010880023 +:102AF000899110088888080100000000000000008B :102B000000000000000000000000000000000000C5 -:102B100000000000000000000000000000000000B5 +:102B10000000000000000000000000E007000000CE :102B200000000000000000000000000000000000A5 -:102B30000000000000000000000000000000000095 +:102B3000000000000000000000810000070000000D :102B40000000000000000000000000000000000085 :102B50000000000000000000000000000000000075 :102B60000000000000000000000000000000000065 -:102B70000000000000000000000000000000000055 +:102B70000000000000E0070000000000000000006E :102B80000000000000000000000000000000000045 :102B90000000000000000000000000000000000035 :102BA0000000000000000000000000000000000025 :102BB0000000000000000000000000000000000015 :102BC0000000000000000000000000000000000005 -:102BD00000000000000000000000000000000000F5 +:102BD0000000000000000000FC0C6F6F000000000F :102BE00000000000000000000000000000000000E5 -:102BF00000000000000000000000000000000000D5 +:102BF00000000000F242F242F330E7E7000000007C :102C000000000000000000000000000000000000C4 :102C100000000000000000000000000000000000B4 :102C200000000000000000000000000000000000A4 :102C30000000000000000000000000000000000094 :102C40000000000000000000000000000000000084 -:102C50000000000000000000000000000000000074 -:102C60000000000000000000000000000000000064 -:102C70000000000000000000000000000000000054 +:102C500000000000000000000000FC0C60600000AC +:102C60000000000000000000000000000000243010 +:102C7000242400000000FFFFF242F330242400006F :102C80000000000000000000000000000000000044 :102C90000000000000000000000000000000000034 :102CA0000000000000000000000000000000000024 @@ -103149,489 +103149,489 @@ :102D200000000000000000000000000000000000A3 :102D30000000000000000000000000000000000093 :102D40000000000000000000000000000000000083 -:102D50000000000000000000000000000000000073 -:102D60000000000000000000000000000000000063 -:102D70000000000000000000000000000000000053 -:102D80000000000000000000000000000000000043 +:102D50000000000000000000000000000000919151 +:102D600091000000000000000000000000000000D2 +:102D7000000000000000666600FF0C0CFF0C66F609 +:102D80007EFE0000000000000000000000000000C7 :102D90000000000000000000000000000000000033 :102DA0000000000000000000000000000000000023 :102DB0000000000000000000000000000000000013 :102DC0000000000000000000000000000000000003 :102DD00000000000000000000000000000000000F3 -:102DE00000000000000000000000000000000000E3 -:102DF00000000000000000000000000000000000D3 -:102E000000000000000000000000000000000000C2 +:102DE0009191910000000000000000000000000030 +:102DF00000000000000000003C3C0F0F6E6EFF6EF4 +:102E000000F03CFC0000000000000000000000009A :102E100000000000000000000000000000000000B2 -:102E200000000000000000000000000000000000A2 +:102E2000000000000561000F00010000000000002C :102E30000000000000000000000000000000000092 -:102E40000000000000000000000000000000000082 +:102E40000000000000000038000000A000000000AA :102E50000000000000000000000000000000000072 -:102E60000000000000000000000000000000000062 -:102E70000000000000000000000000000000000052 -:102E80000000000000000000000000000000000042 +:102E60000000000000000000000000000000006101 +:102E70000006000D000000610006000D0005006165 +:102E800000060099000000000000000000000000A3 :102E90000000000000000000000000000000000032 -:102EA0000000000000000000000000000000000022 +:102EA0000000000000000055D2D201C33DC3000065 :102EB0000000000000000000000000000000000012 :102EC0000000000000000000000000000000000002 :102ED00000000000000000000000000000000000F2 :102EE00000000000000000000000000000000000E2 -:102EF00000000000000000000000000000000000D2 -:102F000000000000000000000000000000000000C1 +:102EF0000000000000C33CFF0F3C0FBE00000000BC +:102F00000000FF0A003C557D0000000000000000AA :102F100000000000000000000000000000000000B1 -:102F200000000000000000000000000000000000A1 +:102F20000000000000000000AAFFD2D201003D0016 :102F30000000000000000000000000000000000091 :102F40000000000000000000000000000000000081 :102F50000000000000000000000000000000000071 :102F60000000000000000000000000000000000061 -:102F70000000000000000000000000000000000051 -:102F80000000000000000000000000000000000041 +:102F700000000000000030F330F30F000F8200006B +:102F800000000000000A0F3F5F7F0000000000000B :102F90000000000000000000000000000000000031 -:102FA0000000000000000000000000000000000021 -:102FB0000000000000000000000000000000000011 +:102FA00000000000000000000000000000003D3DA7 +:102FB00000C300000000000000000000000000004E :102FC0000000000000000000000000000000000001 :102FD00000000000000000000000000000000000F1 :102FE00000000000000000000000000000000000E1 -:102FF00000000000000000000000000000000000D1 -:1030000000000000000000000000000000000000C0 +:102FF00000000000000000003C55005500000000EB +:1030000000000000F5F75555F3F37D410000000086 :1030100000000000000000000000000000000000B0 :1030200000000000000000000000000000000000A0 -:103030000000000000000000000000000000000090 +:10303000010100C3000000000000000000000000CB :103040000000000000000000000000000000000080 :103050000000000000000000000000000000000070 :103060000000000000000000000000000000000060 -:103070000000000000000000000000000000000050 -:103080000000000000000000000000000000000040 +:10307000000000000000000000000055F055F0FFC7 +:10308000D7FF000000000507555530307D41000096 :103090000000000000000000000000000000000030 -:1030A0000000000000000000000000000000000020 -:1030B00000000000400000000000000000000000D0 -:1030C0000000000000000000000000000000000000 -:1030D00000000000200000000000000000000000D0 -:1030E00000000000000000000000000000000000E0 -:1030F00000000000000020000000000000000000B0 -:1031000000000000000000000000000000000000BF -:1031100000000000000000000000000000000000AF -:10312000000000000000000000000000000000009F -:10313000000000000000000000000000400000004F -:10314000000000000000000000000000000000007F -:10315000000000000000000000000000000000006F -:10316000000000000000000000000000000000005F -:10317000000000000000000000000000000200004D -:10318000000000000000000000000000000000003F -:10319000000000000000000000000000000000002F -:1031A000000000000000000000000000000000001F -:1031B00000100000000000000000040000000000FB -:1031C00000100000000000000000000000000000EF -:1031D00000100000000000000010000000000000CF -:1031E00000100000000000000000000000000000CF -:1031F00000100010000000000000020000000000AD -:1032000000000000000000000000000002000000BC -:103210000010084000000000000000000000000056 -:10322000000000000000000000000000000000009E -:103230000000000000000000000000000000000886 -:10324000000000000000000000000000000000007E -:10325000400000000000000000000000000000022C -:10326000000000000000000000000000000000005E -:10327000000000000000000000000000000000004E -:10328000000000000000000000000000000000003E -:10329000000000000000000000000000000000002E -:1032A000000000000000000000000000000000001E -:1032B000000000000000000000000000000000000E -:1032C00000000000000000000000000000000000FE -:1032D00000000000000000000000000000000000EE -:1032E00000000000000000000000000000000000DE -:1032F00000000000000000000000000000000000CE -:1033000000000000000000000000000000000000BD -:1033100000000000000000000000000000000000AD -:10332000000000000000000000000000000000009D -:10333000000000000000000000000000000000008D -:10334000000000000000000000000000000000007D -:10335000000000000000000000000000000000006D -:10336000000000000000000000000000000000005D -:10337000000000000000000000000000000000004D -:10338000000000000000000000000000000000003D -:10339000000000000000000000000000000000002D -:1033A000000000000000000000000000000000001D -:1033B000000000000000000000000000000000000D -:1033C00000000000000000000000000000000000FD -:1033D00000000000000000000000000000000000ED -:1033E00000000000000000000000000000000000DD -:1033F00000000000000000000000000000000000CD -:10340000000000000000000000000000000000209C -:1034100000000000000000000000000000000000AC -:10342000000000000000900000000000000000000C -:10343000000000000000000000000000000000008C -:10344000000000000000000000000000000000007C -:10345000000000000000000000000000000000006C -:10346000000000000000000000000000000000005C -:10347000000000000000000000000000000000004C -:10348000000000000000000000000000000000003C -:10349000000000000000000000000000000000002C -:1034A000000000000000000000000000000000001C -:1034B000000000000000000000000000000000000C -:1034C00000000000000000000000000000000000FC -:1034D00000000000000000000000000000000000EC -:1034E00000000000000000000000000000000000DC -:1034F00000000000000000000000000000000000CC -:1035000000000000000000000000000000000000BB -:1035100000000000000000000000000000000000AB -:103520000000000000000000000000000000A000FB -:10353000000000000000000000000000000000008B -:10354000000000000000000000000000000000007B -:10355000000000000000000000000000000000006B -:10356000000000000000000000000000000000005B -:10357000000000000000000000000000000000004B -:10358000000000000000000000000000000000003B -:10359000000000000000000000000000000000002B -:1035A000000000000000000000000000000000001B -:1035B000000000000000000000000000000000000B -:1035C00000000000000000000000000000000000FB -:1035D00000000000000000000000000000000000EB -:1035E00000000000000000000000000000000000DB -:1035F00000000000000000000000000000000000CB -:1036000000000000000000000000000000000000BA -:1036100000000000000000000000000000000000AA -:103620000000000000000000000008000000000092 -:10363000000000000000000000000000000000008A -:10364000000000000000000000000000000000007A -:103650000000080000000000000000000000000062 -:10366000000000000000000000000000000000005A -:10367000000000000000000000000000000000004A -:10368000000000000000000000000000000000003A -:10369000000000000000000000000000000000002A -:1036A000000000000000000000000000000000001A -:1036B000000000000000000000000000000000000A -:1036C00000000000000000000000000000000000FA -:1036D00000000000000000000000000000000000EA -:1036E00000000000000000000000000000000000DA +:1030A000000000038283000001058808041100006D +:1030B0000000000404002000840020000000000044 +:1030C00040004004A004C000400040000010000088 +:1030D0000210C100C000100020008800840000031E +:1030E00082004000C00040000280000088041004FC +:1030F0000400000040000100040020042000000043 +:10310000820400000000040488048204008082001D +:10311000000588000000000000000400000000001E +:103120004002008409080540002008000004000057 +:103130004000200005900900000000000000000091 +:1031400041000000000000004000000000001003EB +:103150000000000008040000000000024000000021 +:1031600000004000000020020008000400004101AF +:1031700000014000000200020440000000A0000026 +:1031800000004003000021000000000100010008D1 +:1031900000004102000000020040000000000000AA +:1031A000000000000040401000021000900040109D +:1031B00010000000000000000010080000000000E7 +:1031C000001001000200030000000400C000020023 +:1031D0000041040300400010001002000000000045 +:1031E0000000000002000008000008108400080829 +:1031F00000000410000000000000040000000000B7 +:10320000020002100000049002008480000005000B +:1032100000001103000000210000900002000440A3 +:103220000000830003000000820000A18000020073 +:1032300080008000000000400000000084000000CA +:1032400002000500400000002002020000100204FD +:10325000000402000000000004000400000002005E +:1032600000000282000000000000020000000400D4 +:10327000040400000011000000000000090000002C +:1032800002000302050004004004040003040500DA +:1032900010080400200000000400000004000000EA +:1032A0000004000002020000000000000400900082 +:1032B0004008000004000000000200008405000037 +:1032C0000021840000009000900000809100000028 +:1032D00000080800C00000000400000040000400D6 +:1032E00000000008000000000000000000000000D6 +:1032F00000000000000000000000000008000000C6 +:10330000002100088400020090210000C004010098 +:1033100009040004000000830021000000000000F8 +:1033200000008400000300000810000008000000F6 +:103330002100000041000000040000000000000027 +:1033400000000000000000000000008400082000D1 +:1033500000000000800000000000000000000000ED +:103360000000000000000000000002000900000052 +:103370000000030000001100000000A0000208A0EF +:103380002100030009001100039040000820000103 +:103390004000900100910004000411000088080022 +:1033A0001000000000000000000000000005000008 +:1033B0000402000901830020014000000000000217 +:1033C00090000000002000000040010000808420E8 +:1033D00000000100000008000000000000000040A4 +:1033E000C0000800000040000000000000000200D3 +:1033F00000008200100402000800A000C0000804C1 +:10340000040008400800400282090800024002103F +:1034100008110809A000C00008098202400010003D +:103420000000C00282000800080090200000000098 +:1034300004004002000820020000400008000000D4 +:10344000000000C0000000000088000040C0000232 +:103450000084000002000000410008084000000055 +:103460000000100000000000000004000000002028 +:10347000410000000200000010A005902000200084 +:103480000300080010104000052141004108030816 +:10349000419100889010100003001000218400006A +:1034A0000900000000020400410005200040100057 +:1034B00008000000400000000800000400000003B5 +:1034C000000000000000000010000000A0414000CB +:1034D00090002004820004000000000000000100B1 +:1034E00000000000080000000000080000000000CC +:1034F00004000000020000002000A00000200400E2 +:10350000A02000000003400008091004200004036C +:1035100000020200C004840009200020010800000D +:103520000811000082030000000000208200C0009B +:103530008200000000009020000000000001000058 +:103540004100080004000804000000000000000022 +:1035500080000000808500000040000000000000A6 +:103560000200000000000004000000000000000055 +:10357000000000000000000000408000000000008B +:1035800000000000000020000020002000000000DB +:10359000000000042004100200821000002020011E +:1035A000080400000000000000000000000000000F +:1035B0000200820040210000018200000011000092 +:1035C0000104000000000000900000000000000066 +:1035D00000080080000000000800004000110121E8 +:1035E000000000000000000040000000000000009B +:1035F00000000000000008000000080008000800AB +:103600000000C00000402000000082000200820094 +:103610009000A000080000000000080000200080CA +:10362000012100A00400000000000040080000008C +:10363000000000000004000020004002000009001B +:1036400000004005209002400800000040000004F7 +:103650000000050000020090000000002001200092 +:1036600008002000000000000000000040000004EE +:1036700041082100000000000000000000004000A0 +:103680001000000002000001218205000000080275 +:1036900000A000200020000011C0030000840000F2 +:1036A00000082000080802000002000003040000D7 +:1036B000080000000900004000020490009000A0F3 +:1036C000000000A000A000000000000000000000BA +:1036D0000000000000000001400000000001880020 +:1036E000000000000400880000000000A0000000AE :1036F00000000000000000000000000000000000CA -:1037000000000000000000000000000000000000B9 -:1037100000000000000000000000000000000000A9 -:103720000000000000000000000000000000000099 -:103730000000000000000000000000000000000089 -:103740000000000000000000000000000000000079 -:103750000000000000000000000000000000000069 -:103760000000000000000000000000000000000059 +:103700000000000185010000100000000000900092 +:10371000000000000000000102A18500111000114E +:10372000000141010800000100000000000000004D +:103730000188002000900040208020808000090047 +:1037400000800000030000000000000000000000F6 +:103750000000000000000000034180080303001087 +:103760008000000000008000000000000000000059 :103770000000000000000000000000000000000049 -:103780000000000000000000000000000000000039 -:103790000000000000000000000000000000000029 -:1037A0000000000000000000000000000000000019 -:1037B0000000000000000000000000000000000009 -:1037C00000000000000000000000000000000000F9 -:1037D00000000000000000000000000000000000E9 -:1037E00000000000000000000000000000000000D9 +:103780000000000903089108000380000000000009 +:1037900080000008000800100002A090214002A054 +:1037A00000830041900311080002000000000000A7 +:1037B0000000100000800000000008001021050833 +:1037C000418011000500054141A1000000000000FA +:1037D00000000000004100000000910010001011E6 +:1037E000C108000000008000000000000000000090 :1037F00000000000000000000000000000000000C9 -:1038000000000000000000000000000000000000B8 -:1038100000000000000000000000000000000000A8 -:103820000000000000000000000000000000000098 -:103830000000000000000000000000000000000088 -:103840000000000000000000000000000000000078 -:103850000000000000000000000000000000000068 -:103860000000000000000000000000000000000058 +:1038000000000000088021000800038500008000FF +:103810000021800000000000000000418805A10395 +:1038200083200882410040004008418300000000DE +:1038300000000000000000210000000000000182E4 +:10384000012001A000020100010101A1000000000F +:103850000000000000000001000000000888910046 +:103860009101830184000000A000A000000000007E :103870000000000000000000000000000000000048 -:103880000000000000000000000000000000000038 -:103890000000000000000000000000000000000028 -:1038A0000000000000000000000000000000000018 -:1038B0000000000000000000000000000000000008 -:1038C00000000000000000000000000000000000F8 +:10388000000000000000211001000100208910004C +:10389000400008010400009000000000000109023F +:1038A0008200A08521050010010000000109000030 +:1038B00000000000000000000040000000002000A8 +:1038C00000001000020004011001000002000000CE :1038D00000000000000000000000000000000000E8 -:1038E00000000000000000000000000000000000D8 -:1038F00000000000000000000000000000000000C8 -:1039000000000000000000000000000000000000B7 -:1039100000000000000000000000000000000000A7 -:103920000000000000000000000000000000000097 -:103930000000000000000000000000000000000087 -:103940000000000000000000000000000000000077 +:1038E0000100000001010002000000A000C0004033 +:1038F0000020402000C00000000000000000000088 +:1039000000000000000000000000000101000000B5 +:1039100000100002000200C00000010001000000D1 +:10392000400383200541A141000100010101010183 +:10393000000000000000000004000000000004007F +:1039400000410004000380108008800800038820E4 :103950000000000000000000000000000000000067 -:103960000000000000000000000000000000000057 -:103970000000000000000000000000000000000047 -:103980000000000000000000000000000000000037 -:103990000000000000000000000000000000000027 -:1039A0000000000000000000000000000000000017 -:1039B0000000000000000000000000000000000007 -:1039C00000000000000000000000000000000000F7 -:1039D00000000000000000000000000000000000E7 -:1039E00000000000000000000000000000000000D7 +:1039600000000900410011110080000000000080EB +:103970000080000000000080000000000000000047 +:103980000000000000000000000000101108050306 +:103990001010008000800080008000000200030002 +:1039A000000000A1110483A1A01000202008052020 +:1039B0004041000000000000000080000000000006 +:1039C0001000808000000000001041808200100084 +:1039D0002041000000000000000000000000000086 +:1039E00000002189090009800311002000030080E4 :1039F00000000000000000000000000000000000C7 -:103A000000000000000000000000000000000000B6 -:103A100000000000000000000000000000000000A6 -:103A20000000000000000000000000000000000096 -:103A30000000000000000000000000000000000086 -:103A40000000000000000000000000000000000076 -:103A50000000000000000000000000000000000066 -:103A60000000000000000000000000000000000056 -:103A70000000000000000000000000000000000046 -:103A80000000000000000000000000000000000036 -:103A90000000000000000000000000000000000026 -:103AA0000000000000000000000000000000000016 -:103AB0000000000000000000000000000000000006 -:103AC00000000000000000000000000000000000F6 -:103AD00000000000000000000000000000000000E6 -:103AE00000000000000000000000000000000000D6 -:103AF00000000000000000000000000000000000C6 +:103A00000000000000000000000000004102210052 +:103A1000100011100000000000000000102105112E +:103A20004100400002108885898010034100A000F9 +:103A300008004010000000000000000000008000AE +:103A400000000000028890009000880101C004007E +:103A50000800890100000000000000009000A000A4 +:103A600008001000010900880084000100000084A3 +:103A70000002000000000000000000000000000044 +:103A80000000000000000000000000000000012015 +:103A9000001000C0010000000090002000000101A3 +:103AA000000000000100109041100202C1000988CE +:103AB00002002100880100000000000000008800D2 +:103AC000820004008800000000E000000000000008 +:103AD00000E0000084820000000000000000000000 +:103AE000000000004100880000E0000000000081AC +:103AF000000007800000000000000000000000003F :103B000000000000000000000000000000000000B5 -:103B100000000000000000000000000000000000A5 -:103B20000000000000000000000000000000000095 -:103B30000000000000000000000000000000000085 -:103B40000000000000000000000000000000000075 -:103B50000000000000000000000000000000000065 -:103B60000000000000000000000000000000000055 -:103B70000000000000000000000000000000000045 +:103B1000000000E0000000000000000007000000BE +:103B20000000000000000081000000E00000000034 +:103B3000000000E0000000000000000000000000A5 +:103B400000000000000000003030303000000000B5 +:103B50003CF03CF00000000000000000000000000D +:103B60000CFC0FFF0000000000000000000000003F +:103B70000000000055AA000000000000F000000056 :103B80000000000000000000000000000000000035 -:103B90000000000000000000000000000000000025 -:103BA0000000000000000000000000000000000015 -:103BB0000000000000000000000000000000000005 -:103BC00000000000000000000000000000000000F5 -:103BD00000000000000000000000000000000000E5 -:103BE00000000000000000000000000000000000D5 -:103BF00000000000000000000000000000000000C5 -:103C000000000000000000000000000000000000B4 +:103B900000000000000000000000000000005F5076 +:103BA000C0C00000000000000000CFCF4545FF1757 +:103BB000C3170F0F000C0000000000000000000001 +:103BC00000000000000000000000303090300000D5 +:103BD00000003CF03CF0000000000000000000008D +:103BE00000000CFC00F000000000000000000000DD +:103BF00000000000000055AA001400000000003C76 +:103C0000AAFF00000000000000000000000000000B :103C100000000000000000000000000000000000A4 -:103C20000000000000000000000000000000000094 -:103C30000000000000000000000000000000000084 -:103C40000000000000000000000000000000000074 -:103C50000000000000000000000000000000000064 +:103C20005F50CFCF0000000000000000CFCFCF00DA +:103C3000FF17C3170F0F000C00000000000000006A +:103C40000000000000C3C0C00000000024141414D1 +:103C50000000000003030303000000000000000058 :103C60000000000000000000000000000000000054 -:103C70000000000000000000000000000000000044 +:103C70000AC00AC0000000007D283C3C0000000093 :103C80000000000000000000000000000000000034 -:103C90000000000000000000000000000000000024 -:103CA0000000000000000000000000000000000014 -:103CB0000000000000000000000000000000000004 -:103CC00000000000000000000000000000000000F4 -:103CD00000000000000000000000000000000000E4 +:103C900000000000000000000000FFFF7D7D00002C +:103CA000000014FF14140000000000000000282889 +:103CB000E8E88000A0000000000000000000000014 +:103CC0000000000000000F000C5000000000141461 +:103CD00014140000000082820000000000000000B8 :103CE00000000000000000000000000000000000D4 -:103CF00000000000000000000000000000000000C4 +:103CF00000000AF008F0000000003C3C3C3C0000E2 :103D000000000000000000000000000000000000B3 -:103D100000000000000000000000000000000000A3 -:103D20000000000000000000000000000000000093 -:103D30000000000000000000000000000000000083 -:103D40000000000000000000000000000000000073 -:103D50000000000000000000000000000000000063 +:103D10000000000000000000000000000000414121 +:103D200000000000F4FFF4F40000000000000000B8 +:103D30002020E0E0AA00AA0000000000000000002F +:103D4000000000000000000000000C500000000017 +:103D500000603006000D000000610007000D00004B :103D60000000000000000000000000000000000053 -:103D70000000000000000000000000000000000043 -:103D80000000000000000000000000000000000033 -:103D90000000000000000000000000000000000023 -:103DA0000000000000000000000000000000000013 -:103DB0000000000000000000000000000000000003 -:103DC00000000000000000000000000000000000F3 -:103DD00000000000000000000000000000000000E3 +:103D700000610007C003200100000038004000007F +:103D800000000000009000000000000000000000A3 +:103D900000000000000000000000006100020001BF +:103DA0000000000000000090000000610006000D0F +:103DB000000000610007000D00000000000100008D +:103DC00000000000000000000000000030000000C3 +:103DD00000000000000080F000F00F0F555500C0FB :103DE00000000000000000000000000000000000D3 -:103DF00000000000000000000000000000000000C3 +:103DF000000020000000FFFF0000000000000000A5 :103E000000000000000000000000000000000000B2 -:103E100000000000000000000000000000000000A2 -:103E20000000000000000000000000000000000092 -:103E30000000000000000000000000000000000082 -:103E40000000000000000000000000000000000072 -:103E50000000000000000000000000000000000062 -:103E60000000000000000000000000000000000052 -:103E70000000000000000000000000000000000042 +:103E1000000000000000000000000000505082D7A9 +:103E200005C7FFFF0000000000000000E1F1F3F310 +:103E300000000000008000C050005C0C00FF3C3C13 +:103E4000787855FF0000000000000000000000002E +:103E50000000000000000000000000003C3CFF00EB +:103E600000C0000000000000000000000000000092 +:103E70000000000000000000FFFF00000000000044 :103E80000000000000000000000000000000000032 -:103E90000000000000000000000000000000000022 -:103EA0000000000000000000000000000000000012 -:103EB0000000000000000000000000000000000002 -:103EC00000000000000000000000000000000000F2 -:103ED00000000000000000000000000000000000E2 -:103EE00000000000000000000000000000000000D2 -:103EF00000000000000000000000000000000000C2 +:103E90000000000000000000000000000000FAFA2E +:103EA00082D705C705C70000000000000000A0F091 +:103EB000F3F3000000008080C0C05F0F5F0FF0F0E0 +:103EC0005555787800AA00000000000000000000AE +:103ED0000000000000000000000000AA0000000038 +:103EE0000000FFF0AA3C00000000000000000000FD +:103EF0000000000000000F000B0B04003C3C000021 :103F000000000000000000000000000000000000B1 :103F100000000000000000000000000000000000A1 -:103F20000000000000000000000000000000000091 -:103F30000000000000000000000000000000000081 -:103F40000000000000000000000000000000000071 -:103F50000000000000000000000000000000000061 -:103F60000000000000000000000000000000000051 -:103F70000000000000000000000000000000000041 +:103F20002F2F2FFFAFAAEFEB0000000000000000D2 +:103F3000FCFCFCFC000000003535FFF07F3C703CD1 +:103F4000ACAC000F003C8E8E0000000000000000B2 +:103F500000000000000000000000000000AACF45A3 +:103F60000000000000F0AA3C00000000000000007B +:103F700000000000000000000F0008082028696908 :103F80000000000000000000000000000000000031 :103F90000000000000000000000000000000000021 -:103FA0000000000000000000000000000000000011 -:103FB0000000000000000000000000000000000001 -:103FC00000000000000000000000000000000000F1 -:103FD00000000000000000000000000000000000E1 -:103FE00020000000000000000000000000001000A1 -:103FF00000000000000000000000000000000004BD -:104000004000000000000000000000000000000070 -:10401000000000000000000000000002000000009E -:104020000000000000000000000400040000000088 -:104030000000000040000000000000000000000040 -:104040000000000000000000000000000000000070 -:104050000000000000000000000000000000000060 -:104060000000000000000000000000004000000010 -:104070000000000000000000000000000000000040 -:104080000000200000000000100000000000000000 -:104090000000000000000000000000000000000020 -:1040A00000000000000000000000400000000000D0 -:1040B0000000000000008000000000000000000080 -:1040C00000000000000000004000000000000000B0 -:1040D00000000000000000000000000200000000DE -:1040E000000000000200000040000000000000008E -:1040F00000000000000000000000000000000200BE -:104100000440001000100000000000000000020049 -:104110000200081100100000000000000000000074 -:104120000000000000000000000000020000008409 -:104130000000080000000000400020000000000017 -:10414000000002000000000000000000000000006D -:10415000000000000000000000000000000000005F -:1041600000000000050000000000800000000008C2 -:104170000000000200000000000000000000000835 -:1041800000000400000000004000000000000008E3 -:1041900000080000200000000000000000000004F3 -:1041A000000000000000000000000000000100000E -:1041B00000050004000000000000800080000000F6 -:1041C00000000000000000000000000000000000EF -:1041D00000000000000000000000000000000000DF -:1041E00000000000000000000000000000000000CF -:1041F000000000000000000000400000000000047B -:1042000000000000000000000000000000000000AE +:103FA0000000282828FF0F00CFC3000000000000F9 +:103FB00000000F050A000000000035350F007FFFEC +:103FC00070FFACACF0FFC3FF8E8E0000000000005D +:103FD00000000000000000000000040004002000B9 +:103FE000200020001000840020004000100000800D +:103FF00004001000880302082000880088004000A8 +:10400000208084004000020400008400000084003E +:10401000840020002000020420000003C01188005A +:10402000880004000000840020038800000088004D +:10403000200488800409200020008800408040C1BE +:10404000200020C0080020002004008000000000A4 +:1040500000828800000000000000040000000084CE +:104060000000008400400000000000000000008408 +:10407000000280002100000040000000000000005D +:104080000000000805020000400010A040A0090048 +:104090000902000440000000890021000000100017 +:1040A000210000000000000000000000110040009E +:1040B00000004100000809002100400240001004F7 +:1040C000C0020084000580000000000100044000E0 +:1040D00020000003000000000090000200008200A9 +:1040E000080000004010000200000000020900006B +:1040F0008500028904800000000004100000000018 +:104100000300051010020202020800100010020055 +:104110000005840008410000004003000100000089 +:10412000020200000204001004000200000000026D +:104130000000089003204008888000100409000552 +:104140000000021000100209000000100500081015 +:1041500000400540400005100000000000000889F4 +:10416000000011000500800100C100000284001061 +:1041700020000200000289200400000000880440A2 +:104180000400400040008989040100000008020981 +:1041900000000008021002000084008488844008A7 +:1041A0000000040100080010058400080008000851 +:1041B0004009200082024000820141020384110074 +:1041C0000408000084090001C0100408041108401C +:1041D000401100824084800008000402000040C0BA +:1041E00000044011002000008800000000000005CD +:1041F00004210005000800108521000800000005CA +:104200000005000000020008000800000000000097 :10421000000000000000000000000000000000009E -:10422000000000000000000000000000000000008E -:10423000C0000000000000000000000000000000BE -:10424000000000000000000000000000000000006E -:10425000000000000000000000000000000000005E -:10426000000000000000000000000000000000004E -:10427000000000000000000000000000000000003E -:10428000000000000000000000000000000000002E -:10429000000000000000000000000000000000001E -:1042A000000000000000000000000000000000000E -:1042B00000000000000000000000000000000000FE -:1042C00000000000000000000000000000000000EE -:1042D00000000000000000000000000000000000DE -:1042E00000000000000000000000000000020010BC -:1042F0008200820000000000000000200004000294 -:104300000040000900020000000000000000000062 -:10431000000000000000000000000000000000009D -:10432000000000000000000000000000000000008D -:10433000000200000040010000000000000000003A -:10434000000000000000000000000000000000006D -:10435000000000000000000000000000000000005D -:10436000000000000000000000000000000000004D -:104370000001000000000000000000000800000034 -:10438000000100010000000100000000000000002A -:10439000000000000000000000000000000000001D -:1043A000000000000000000000000000000000000D -:1043B00000000001000000002000000000000000DC -:1043C00000000000000000000000000000000000ED -:1043D00000000000000000000000000000000000DD -:1043E00000000000000000000000000000000000CD -:1043F000820000000000000000000000000000003B -:1044000000000000000000000000000000000000AC -:10441000000000000000000000000000000000009C -:10442000000000000000000000000000000000008C -:10443000100010000000000000000000000000005C -:10444000000010000000000000000000000000005C -:10445000000000000000000000000000000000005C -:10446000000000000000000000000000000000004C -:10447000000000000000000000000000000000003C -:10448000000000000000000000000000000000002C -:10449000000000000000000000000000000000001C -:1044A000000000000000000000000000000000000C -:1044B00000000000000000000000000000000000FC -:1044C00000000000000000000000000000000000EC -:1044D00000000000000000000000000000000000DC -:1044E00000000000000000000000000000000000CC -:1044F000000000000421000000000000000000088F -:1045000000000000000000000000000000000000AB -:10451000000000000000000000000000000000009B -:10452000000000000000000000000000000000008B -:104530000000000000000800000000000000000073 -:10454000000000000000000000000000000000006B -:10455000000000000000000000000000000000005B -:10456000000000000000000000000000000000004B -:104570000800000000000000000000000000000033 -:104580000000000000000000000000000300000028 -:10459000000000000000000000000000000000001B +:10422000000000000000002100000000002100212B +:104230000010000220000008000520040004000413 +:104240000005000300090003100800414005400874 +:1042500000008440400084000008000200091000B3 +:10426000004110000000008200A04000000000009B +:10427000000809020000000040A0400011000008F2 +:10428000080000000800080100000003000003000F +:1042900008001000000000000000000000080000FE +:1042A000410000000000090005000800410800006E +:1042B00000000200110000A005A0040400884000D6 +:1042C00021044000090000001120030041004104C6 +:1042D0000040002000910000090010000084000050 +:1042E00041004000080000020011901082080009FF +:1042F000C00000054002844008040041080200009C +:10430000084100008400100010000800004108105F +:104310000000C0008200082008001000040008000F +:10432000A0000800C00000000800080000040810F9 +:104330000902408200098300200040020421080491 +:10434000890300114084081182000009000082885E +:10435000000000000040100504000080881190005B +:104360000840084020040240000204881140400434 +:1043700009000040404000402040000009040304C0 +:104380000002410000000088000400040000020058 +:10439000000008000000080000000000000000000D +:1043A00080A000000900100000000000410041C092 +:1043B00010004001C10300000800210090014100ED +:1043C0000400400803002002000040004040008438 +:1043D0004141099041001100000003040002212026 +:1043E0000200000000000000000000210000C000EA +:1043F0008400002100000000880000000000400050 +:1044000000000000000000000008000000000000A4 +:1044100010000008000800000000820000000000FA +:10442000080002400000A000820000001000000907 +:104430000800040040008200040082008208C000DE +:104440000020C000081110401008820500408200C2 +:1044500040200009000204200004820082000420A1 +:104460000800001140004000400082210490080034 +:104470000300000000900004008810080000000005 +:10448000800000000208000000000020100010085A +:10449000100400080000000000000000000000847C +:1044A0000000000000000000000000000000030207 +:1044B0000000000000000000000000880004000070 +:1044C00002000000000002040004809009000900BE +:1044D000000005A040084004048800890804040086 +:1044E000000000041000000440040000030000412C +:1044F0000040900082000000000000C000000000AA +:104500000121008800800082004100090040000075 +:10451000001100030008000000050000000000007A +:1045200082030400200400000008000000000000D6 +:104530000000104184218221400008001000A000EA +:104540008403100384000003A0000200A0080021DF +:10455000080008020421000440004000102100026D +:104560000003000000000005100040000400C00827 +:104570000090200200840340050400001104032081 +:1045800000002090080420040003004009000300FC +:1045900000040000000020040000000000000000F3 :1045A000000000000000000000000000000000000B -:1045B00000000000000000000000000000000000FB -:1045C00021000000000000000000000000000000CA -:1045D00000000000000000000000000000000000DB -:1045E00000000000000000000000080000000000C3 -:1045F00000000000000000000000000000010000BA -:104600000000000000000000000000000000400169 -:10461000000000000000000000000000000000009A -:10462000000000000000000000000000000000008A -:10463000000000000000000000000000000000007A -:10464000000000000000000000000000000000006A -:10465000000000000000000000000000000000005A -:10466000000000000000000000000000000000004A -:104670000000000000000000000000000009001021 -:1046800000000000000000000000000000000040EA -:104690000010000800000000000000000000000002 -:1046A000000000000000000000000000000000000A -:1046B00000000000000000000000000000000020DA -:1046C00000030003000000000000000000000020C4 -:1046D00000080020000000000000000000000000B2 -:1046E00000000000000000000000000000000000CA -:1046F00000000000000000000000000000000000BA -:104700000000000000400000000000000000000069 -:104710000000000000000000000000000000000099 -:104720000000000000000000000000000000000089 -:104730000000000000000000000000000000000079 -:1047400008000300080020800000000000000000B6 -:104750000000000000000010000000000000000049 -:104760000000000000000000000000000000000049 -:104770000000000000000000000000000000000039 -:104780000020000000000000000000000000000009 -:104790000800000000000000000000000000000011 -:1047A0000000000000000000000000000000000009 -:1047B00000000000000000000000000000000000F9 -:1047C00000000000010000000004000000000000E4 -:1047D00000000008000000000000000000000000D1 -:1047E00000000000000000000000000000000000C9 -:1047F00000000000000000000000000000000000B9 -:1048000000000000000000000000000000000000A8 -:104810000000000100000000000000000000000097 -:104820000000000000000000000000000000000088 -:104830000000000000000000000000000000000078 -:104840000000000000000001010101010000000063 -:104850000000000000000000000000000000000058 -:104860000000000000000000000000000000000048 -:104870000000000000000000000000000000000038 -:1048800000000000000040000000000000000000E8 -:104890000000000000080000000800000000000008 -:1048A0000000000000000000000000000000000008 -:1048B00000000000000000000000000000000000F8 -:1048C0000000000000000008000805211111000090 -:1048D00000000000000000000300000000000000D5 -:1048E00000000000000000000000000000000000C8 -:1048F00000000000000000000000000000000000B8 -:104900000000000000002110A10010009000000035 -:104910000000000000000000000000000000000097 -:104920000000000000000000000000000000000087 -:104930000000000000000000000000000000000077 -:1049400000000000000000002180080000000008B6 -:104950000000000000000000210008110800030012 -:104960000000000000000000000000000000000047 -:104970000000000000000000000000000000000037 -:10498000000000000000000001010200030005001B -:104990000000000000000000000000A0000800006F -:1049A0000000000000000000000000000000000007 -:1049B00000000000000000000000000000000000F7 -:1049C0000000000000000000000001A00000000046 -:1049D00000000000000000000000010000010000D5 -:1049E00001000000000000000000000000000000C6 -:1049F00000000000000000000000000000000000B7 -:104A000000000000000000000000000000000000A6 -:104A10000000000000000000000000000000000096 +:1045B0000000000005000000000080000000000076 +:1045C000400020002000000041A005008000419034 +:1045D000000003002005000000002100000003008F +:1045E0002002039000000090080011000000080065 +:1045F00005000000010004000000000100000001AF +:104600000000000000008400000000000000000026 +:104610000000000001000000000000010001000196 +:10462000000100000000000000004004010290A012 +:1046300000020000000100000000000140412108CC +:104640008402A0021002014010881004A11184838A +:104650000091100202C001021011202002C0048843 +:1046600084408208000109000801000100000000E8 +:10467000000000000000030080000000004000096E +:104680000505000500001100C00000000004001036 +:1046900000040009000021000000000000200020AC +:1046A0000020002000000000000000008008210819 +:1046B0000010000200000010000000100008089028 +:1046C000889080C1001000A003A00085800990C1DF +:1046D000002100040080A08821A0098280828580BA +:1046E00083008080800000020805000200020000B4 +:1046F000000000000000000000008000000000003A +:104700000000000300000000000080009080000016 +:104710000000000000001000090011000940000026 +:104720000000000080000000000000000000040005 +:1047300009020589090500000000000000000000D2 +:104740009000A120A0021003A0000405800282C0F6 +:10475000A0800320C1201002C000202104808240DC +:1047600020852110050009C0C0000000030084213D +:1047700000000000000000000400A0000400004051 +:104780000000000000000082A000A0000800C1900E +:104790000000000000000000008400000000010193 +:1047A000A000A000A0000800000000000000000021 +:1047B0000140000001C100C0000000000000000036 +:1047C0000000A0900300A140410903048300A091D0 +:1047D000058888400500820885A1A1881100010490 +:1047E00008019010030120081089042090000000A7 +:1047F0008201000000000000000000010000000134 +:1048000000000000000000000000000002000000A6 +:104810000001000000000100000000010000000194 +:104820000001000001000000000000000000000086 +:104830000000828900000110A003000000000000B9 +:104840000000000020A100A100031002C00901A186 +:1048500000C0A002821000A088080882A00800A161 +:1048600020901190841000A020912182000001016D +:10487000A000000000000000000001000002000095 +:10488000000200020000000040000000000880005C +:1048900000080908000009000400000000100000E2 +:1048A00000080010000003004100090000000000A3 +:1048B0000000000000210205088309050000000037 +:1048C000000003000000002105900321808080216A +:1048D0000810201088800000048080008080000084 +:1048E000059011100920009000A000080904004163 +:1048F00003028002032000000000000041000000CD +:1049000000000000000000000000000000000000A7 +:1049100000800000000000000000000000004110C6 +:10492000210040000810000200800000000000008C +:10493000000000000000A0000821892102400000C2 +:10494000000000000000000090401080A080901047 +:10495000C104218008A185000288C089028004204A +:104960004185830021800240C120A08041809104C4 +:10497000202110214000030400000000000000007E +:1049800000000002004000000000000000000000E5 +:104990000000000800A0000000000000000000006F +:1049A00001880000000001000001002000A00000BC +:1049B0000000000000000000C10202018401C101EA +:1049C0000000000000000000000008082010044063 +:1049D0000901110104029185110090411120210863 +:1049E0001001C1402082898489004121A182901058 +:1049F0000300008501A001C00100000000000000CC +:104A000000000000000000000000000000E00000C6 +:104A10000000000000E007000000000000000000AF :104A20000000000000000000000000000000000086 :104A30000000000000000000000000000000000076 -:104A4000000000000000000000000000000000E086 -:104A5000000000000000000000000000000000E076 -:104A60000000000000000000000000000000000046 -:104A70000000000000000000000000000000000036 -:104A8000000000000000000000000000FC0CFC0C16 +:104A400000810000000000000000000000000000E5 +:104A500000000000000000000000600000000000F6 +:104A600000000000000000E000000000000000E086 +:104A7000000000000000000000000000000000E056 +:104A80000000000A0000000000000000000000001C :104A90000000000000000000000000000000000016 :104AA0000000000000000000000000000000000006 -:104AB00000000000000000000000000000000000F6 -:104AC00000000000000000000000000000000000E6 -:104AD00000000000000000000000000000000000D6 -:104AE00000000000000000000000000000000000C6 -:104AF00000000000000000000000000000000000B6 -:104B00000000000000000000000000000000FC0C9D -:104B1000FC0C00000000000000000000000000008D +:104AB00000000000000000000000000008080003E3 +:104AC0006600242400000000000000000000F33015 +:104AD0007E7EC0C0FF66FCFCE724F9BDF924BD243E +:104AE000F9F900D000DB030FC3FF839F839F4202CD +:104AF000C3034042C0C300000000000000000000EB +:104B000000000000000000000000000000000000A5 +:104B10000000000000000000000000000000000095 :104B20000000000000000000000000000000000085 :104B30000000000000000000000000000000000075 -:104B40000000000000000000000000000000000065 -:104B50000000000000000000000000000000000055 -:104B60000000000000000000000000000000000045 -:104B70000000000000000000000000000000000035 +:104B400000006600242400000000000000000000B7 +:104B5000F3304242C0C06666C0C0E72460BD602436 +:104B6000BD246060D0D0DBDB010981999F9F009F4D +:104B70006606FF0F6066F0FF000000000000000006 :104B80000000000000000000000000000000000025 :104B90000000000000000000000000000000000015 :104BA0000000000000000000000000000000000005 @@ -103640,974 +103640,974 @@ :104BD00000000000000000000000000000000000D5 :104BE00000000000000000000000000000000000C5 :104BF00000000000000000000000000000000000B5 -:104C000000000000000000000000000000000000A4 -:104C10000000000000000000000000000000000094 -:104C20000000000000003C3C3C3C00000000000094 -:104C30000000000000000000000000000000000074 -:104C40000000000000000000000000000000000064 -:104C50000000000000000000000000000000000054 -:104C60000000000000000000000000000000000044 -:104C70000000000000000000000000000000000034 -:104C80000000000000000000000000000000000024 -:104C90000000000000000000000000000000000014 -:104CA000000000000000000066666666000000006C -:104CB00000000000000000000000000000000000F4 -:104CC00000000000000000000000000000000000E4 -:104CD00000000000000000000000000000000000D4 -:104CE00000000000000000000000000000000000C4 -:104CF00000000000000000000000000000000000B4 -:104D000000000000000000000000000000000000A3 -:104D100000000000000000610006000D000000001F -:104D200000000000000000610006000D000100000E -:104D30000000000000000000000000000000000073 -:104D40000000000000000000000000000000000063 -:104D500000000000000000000061000600090000E3 -:104D6000000000000000000000610004000D0000D1 -:104D70000000000000000000000000000000000033 -:104D80000000000000000000000000000000000023 -:104D90000000000000000000F3D373530000000087 -:104DA000000000000000000000000000AA3CAA3C37 -:104DB00000000000000000000000000000000000F3 -:104DC00000000000000000000000000000000000E3 -:104DD000000000000000000000000000FF00C0C054 -:104DE000FFCF000000000000000000003C3C00007D -:104DF00000000000000000000000000000000000B3 -:104E000000000000000000000000000000000000A2 -:104E100000000000000000000000F3F373730000C6 -:104E20000000000000000000000000000000AA3C9C -:104E3000AA3C00000000000000000000000000008C -:104E40000000000000000000000000000000000062 -:104E50000000000000000000000000000000FF0053 -:104E6000C0C0FFCF0000000000000000FAFF3C3C83 -:104E70000000000000000000000000000000000032 -:104E80000000000000000000000000000000000022 -:104E9000000000000000000000000000AA00AAFFBF -:104EA000000000000000000000000000CF0CCF0C4C -:104EB00000000000000000000000000000000000F2 -:104EC00000000000000000000000000000000000E2 -:104ED00000000000000000000000000000000000D2 -:104EE0000000070F05AF0000000000000000000AEE -:104EF00000000000000000000000000000000000B2 -:104F000000000000000000000000000000000000A1 -:104F10000000000000000000000000000000AA00E7 -:104F2000AAFF000000000000000000000000CF0CFD -:104F3000CF0C000000000000000000000000000096 -:104F40000000000000000000000000000000000061 -:104F50000000000000000000000000000000000051 -:104F6000000000F0070F050F000000000000000027 -:104F7000000A000000000000000000000000000027 -:104F80000000000000000000000000000000000021 -:104F900000000000000000000000000020000000F1 -:104FA00004000000000000000400200000002000B9 -:104FB0000000000084000000C0000000400000006D -:104FC000200000000000400000000000C0000000C1 -:104FD00000000000040000000001000000002000AC -:104FE00000002000000000000000000000000000A1 -:104FF0000000000000002000400000000000000051 -:105000000000200000000000000000000000000080 -:105010000000000000002000000000000000000070 -:105020004000000000004000000080000000000080 -:10503000000000000000200000000000000000024E -:105040000000000000000000000000000000000060 -:105050000000000000000000000000000000000050 -:105060000000000000000000000000000000000040 -:105070000000000000000000000000000000000030 -:105080000000000000000000000000000000000020 -:105090000000000000000000000000000000000010 -:1050A0000000840000000000000004008880000070 -:1050B00000000000000000000000080000000000E8 -:1050C00000000010000000000000080000000000C8 -:1050D0000000000000000000201000100000000090 -:1050E00000000000000000000000000000000000C0 -:1050F0000000000000000000004000100010000050 -:10510000000000000000000002000000000000009D -:10511000000000000000004000400000000000000F -:105120000000000020000900000002000010002024 -:1051300000000000000400000000000000000082E9 -:1051400000002000000000004000000000000000FF -:10515000000000000000000000000000000000004F -:10516000000000000000000000000000000000003F -:1051700000000000000000000000008400000000AB -:10518000000000000000000000000000000000001F -:10519000000000000000000000000000000000000F -:1051A00000080000000000000000000000000000F7 -:1051B00000000000000000000000000000000000EF -:1051C00000000000000000000000000000000000DF -:1051D00000000000000000000000000000000000CF -:1051E00000000000000000000000000000000000BF -:1051F00000000000000000000000000000000000AF -:10520000000000000000000000000000002000007E -:10521000000000000000000000000000000000008E -:10522000000003000000000000000000000000007B -:10523000000000000000000000000000000000006E -:10524000000000000000000000000000000000005E -:10525000000000000000000000000000000000004E -:10526000000000000300000000001100000000002A -:1052700000000000050000004100000000000000E8 -:10528000000000000000000000820000000000009C -:10529000000000000000000000000000000000000E -:1052A00000000000C000000000200000000000001E -:1052B00000000000000000000000000000000000EE -:1052C00000000000000000000000000000000000DE -:1052D0000000000008000000004000000000000086 -:1052E00000000000000008000000000000000000B6 -:1052F00000000000000000000000000000000000AE -:10530000000000000000000000000000000000009D -:105310000000A000000000000000000000000000ED -:1053200000000000000000000000000000880500F0 -:10533000000003000300000000000800000000005F -:1053400000880000000000000000000000000000D5 -:105350000000000000000800000000000000000045 -:10536000000808000000000000000000000000002D -:105370000000000005000800000000000800000018 -:10538000000000000000000000000000000000001D -:10539000000000000000000000000000000000000D -:1053A00000000000000008000000000000000000F5 -:1053B00000000000A000000000000000000000004D -:1053C00000000000000000000000000000000000DD -:1053D00000000000000000000000000000000000CD -:1053E00000000000000000000000000000000000BD -:1053F000000000000000000040000000000000006D -:10540000000000000000000000000000000000009C -:10541000000000000020000000000000000000006C -:10542000000000000000000000000000000000007C -:105430000000050000000500000000000000000062 -:105440000900000009020000000000000000000048 -:10545000000000000000000000000000000000004C -:10546000000000000000000000000000000000003C -:105470000000000000000000000400000000000028 -:10548000000000000000000000000000000000001C -:10549000000000000000000000000000000000000C -:1054A00000000000000000000000000000000000FC -:1054B00004000000000000000000000000000000E8 -:1054C00000000000000000000000000000000000DC -:1054D00000000000000000000000000000000000CC -:1054E00000000000000000000000000000000000BC -:1054F00000000000000000000000000000000000AC -:10550000000000000000000000000000000000009B -:105510000000080000000000000000000000000083 -:10552000000000000000000000000000000000007B -:10553000000005020500000000000000000000005F -:105540000000000000000000000005020000000054 -:10555000000000000000000000000000000000004B -:10556000080000000800000000000000000000002B -:1055700000000000000000000000000000880000A3 -:1055800003000000000040000000000000000000D8 -:105590000000000400000000000000000000000007 -:1055A00000000000000000000000000003001100E7 -:1055B00000000000000000000000000000000000EB -:1055C00000000000000000000000000000000000DB -:1055D00000000000000000000000000000000000CB +:104C000000000000000000000000000000000F0F86 +:104C10000F0F0000000000000000000000000C0C5E +:104C20000F0600000000000000000000000000006F +:104C30000000000000000020000000000000000054 +:104C40000000B1C3B100000000000000000000003F +:104C500000000000FF3C660FFF0FF9F90600003C62 +:104C6000427242729900D2D23C303830FF004E4E30 +:104C7000C7C7FFFF09F93030F030602000000000A6 +:104C80000000FFFF00000000000000000000000026 +:104C90000F8D0F8D000000000000000000000000DC +:104CA0000C0C0900000000000000000000000000E3 +:104CB0000000000000000000FFFBFFFF00000000FC +:104CC00000000000B1FFB13C000000000000000047 +:104CD000000000000000003C660FFF0FCFCF660011 +:104CE00066004272C3F3FF66D2D23C3C3838000003 +:104CF0004E4EC7C7000009F93F3FFF3C6624000045 +:104D000000009898989800000000000000000061E2 +:104D10000006000D000000610007000D00000061AA +:104D200000070005000500610006000D000000619D +:104D30000006000D000000610006000D00000000EC +:104D4000000000000000A0610006000D000000004F +:104D500000610006000D000000610006000D00006B +:104D600080610006000D000000610006001D0001CA +:104D700000615003000900010061500600010000BD +:104D800000610006000D000000610006000D00003B +:104D90000000000000FF00FF000000000000000015 +:104DA000000000001455000000000000000000009A +:104DB0008080FF553CFFFFFF000000000000000066 +:104DC000000000000000000035353535100F1F0FC2 +:104DD0000000000000000000000000000000FF20B4 +:104DE000FF203C0F00FFEBFBEBFB00ACF0AC000046 +:104DF000000000000000FF5FFFFFF0AAFF3C303022 +:104E000030FF3A0A3AFAAF3C3C3C00000000000098 +:104E100000000000000082FF007D00000000000094 +:104E200000000000000055550000000000000000D8 +:104E300000008080AA0000C3000000000000000005 +:104E400000000000000000000000FFF00F00100054 +:104E50001F000000000000000000000043000200EE +:104E6000FF34FF343C0F0055415141510FACFFACB2 +:104E700000000000AA0028A0FF5FFF5FF0AA003C2E +:104E8000BABABAFF3AFA3AFAA03C3C3C0000000039 +:104E9000000000000000000000000000FF3FC00014 +:104EA0000000000000000000FFFF000000100000F4 +:104EB0000000000000000000FFFF0000C2C7C3C3E5 +:104EC000000000000000000000000000DFCB9E8A10 +:104ED0002828000000003C3C3C3C00000000C303CC +:104EE00043430301C3412028303C3F3F03030F00ED +:104EF000050500C00000FFBFFEBEF555C141000022 +:104F000000002F28FFFFF0AAC3AA82C3BEFF000043 +:104F10000000000000000000000000000000FFFF93 +:104F200000000000000000000000FFFF0000000083 +:104F300000000000000000000000FFE3FFE3C3C327 +:104F4000C3C30000000000000000000000005D4935 +:104F50001C080050000000003C3C0F0F0000000047 +:104F6000030343430F05FF55A0AAF0FF3F3F030390 +:104F70000F00050500C0A0A0BEBEBEBEFFFFC3C39C +:104F8000000000002F282F28F0AAC3AA82C382C3E2 +:104F90000000000000000000008000800009040004 +:104FA000C0000000002004022000A000C10000009A +:104FB0002000200021022000C00088008204C000E0 +:104FC0004000C00000002000200084008204C002D5 +:104FD0008820001000041000000320002000A02002 +:104FE00004004100840084002002880020824000E8 +:104FF0008820408040090000C0002000A000A000E0 +:1050000000000000848200102000040200000480E0 +:1050100002040000400000004000201000100000CA +:10502000000200C00540000200010000080020004E +:10503000000040000202080100000004000000021D +:10504000200000000000100000C01002400000001E +:10505000400040002004000000000000400000006C +:1050600009000900880040840000004041024020FF +:1050700008001101080800000800000000000900F5 +:105080000000400010000002000100020082000247 +:105090004004100100008000000000000280A0C158 +:1050A000028084004000828002099040A00000003D +:1050B0000000000000024000092108020800000072 +:1050C000080003000100A000000084000020000090 +:1050D00000000400000000000000080500000000BF +:1050E00000000400020283000000411002100000D2 +:1050F0000010040084028440908203090021404093 +:1051000085000810820008004082000082800000B4 +:10511000014000000403880088000402020000101F +:105120004010091000888088020211820088054022 +:1051300000000000000010018000C084C109800050 +:10514000000000004008400000000082020004004F +:1051500020080400000800080484400004840000C3 +:10516000000800840500400840080408900104116C +:10517000000000C0000000C1040804110200028405 +:1051800082C00800800500C08008844100840008B7 +:1051900000840800000002100410098800010310B8 +:1051A0008905000082050010000040000021401029 +:1051B00020210008000088000404000800102000DE +:1051C0000008040800004000000000080005000876 +:1051D00000410000000090000200000800000008EC +:1051E000000000000000000800000102002001088B +:1051F000002100000005840004000510C021888201 +:105200000010C00040024000100000208808840008 +:105210001040840000000000000000000000002199 +:105220000011040400A00020000010008000000015 +:105230001000000000000000040800000000000151 +:10524000000000A000820000002000080000000014 +:1052500000A0000000000000000009000400080099 +:105260000000000009004190080009004004098284 +:10527000100000900508209011020202100104881D +:105280000403210009080900210802880204090218 +:1052900000020903008800000088080008A005003B +:1052A00000004108041108000800081082000000F6 +:1052B00000080000012040004000A00002000000A3 +:1052C0000000C010000000100000001008200000C6 +:1052D0000500002000000000080040100800100039 +:1052E000822108000000C0008400C000400040216E +:1052F0000800000082000800400484000840828802 +:10530000419000028405C000820008000020400097 +:10531000901000200002820008000000001000022F +:10532000084000000020008400C0042002090000A2 +:10533000402000050004402080000420008400007C +:1053400004C0009000040000000200000000000003 +:1053500000001040000000000000000000000000FD +:10536000000000C010000000118200C00000050015 +:1053700088000300038805084188400000842088D5 +:10538000400208110084090840042000408211886E +:10539000000008C000040001080003000800000825 +:1053A00000012100000041100000041005418200AE +:1053B000000020000004088040000221002020009E +:1053C00000000000C0000000000200040000000017 +:1053D0000040000000000000840000000000000009 +:1053E000000008008400C0000000000000009000E1 +:1053F00084008200020004080411A008C000C0005C +:105400001040C00008001002100040200800A0005A +:105410008200104082100800880008218400C00229 +:10542000000200004011000000000400800188001C +:10543000000040008000080100400004000041001E +:105440008000000000000000000000100088400004 +:105450000504000000000000000000000000000043 +:1054600000000000082000000020000000080000EC +:1054700000200800040000000505050402040300E4 +:10548000089020082004832010010800024010200A +:1054900003000404080021011008050203000500B0 +:1054A0000090200000000020000008009080880488 +:1054B000000004080841C00002080200004000008B +:1054C00000090000004002000080001000110000F0 +:1054D00000020000000000000000000000000000CA +:1054E000002100000000000000000000000000009B +:1054F000000000000000110000000100000000009A +:1055000000000009C005000008084082904110001A +:10551000400240119040A041000202000000000043 +:10552000822008000021000090000000400011408F +:1055300040040020C09021040000802003000300EC +:105540000000090000840000059000100200000027 +:10555000000000010000000000000000000000004A +:1055600000101000000000A000000040000000003B +:1055700000000000000800004000000010000002D1 +:105580004008000005C0118208008000A041000210 +:1055900011C0001010000800000211890000002056 +:1055A00003001000800008880000002000001100A7 +:1055B000008200000000000011C120900120820044 +:1055C000C0104090018304888200010000010001A6 +:1055D00001000100A0000000000100000000000028 :1055E00000000000000000000000000000000000BB -:1055F00000000000000000000000000000000000AB -:10560000000000000000000000000000000000009A -:10561000000000000000000000000000000000008A -:10562000000000000000000000000000000000007A -:10563000000000000000000000000000000000006A -:10564000000000000000000000000000000000005A -:10565000000000000000000000000000000000004A -:10566000000000000000000000000000000000003A -:10567000000000000000000000000000000000002A -:10568000000000000000000000000000000000001A -:10569000000000000000000000000000000000000A -:1056A00000000000000000000000000000000000FA -:1056B00000000000000000000000000000000000EA -:1056C00000000000000000000000000000000000DA -:1056D00000000000000000000000000000000000CA +:1055F00000000000000000000000C001A000000149 +:105600000001C108912040A09008000801408420BA +:10561000001108A0000400C0A00240C083100210C6 +:1056200082A008A04102104002C000000000040057 +:105630000001000000000000000091C180900209FC +:105640008011058900200482000500000804002064 +:1056500000021000400000000000004100020000B5 +:1056600000400000000000000000000000000000FA +:1056700000000000000000000000000080418041A8 +:105680000010001089008300008080000002088064 +:105690008011001080800089002000880080218017 +:1056A0008080800000808380000080000003031160 +:1056B00080200021000000000000000080090000A0 +:1056C0000040008000A000858041008009000400A7 +:1056D000890080110200210040004000000000000D :1056E00000000000000000000000000000000000BA -:1056F00000000000000000000000000000000000AA -:105700000000000000000000000000000000000099 -:105710000000000000000000000000000000000089 -:105720000000000000000000000000000000000079 -:105730000000000000000000000000000000000069 -:105740000000000000000000000000000000000059 -:105750000000000000000000000000000000000049 +:1056F000000000000000000000000000000010801A +:1057000088200809831000000000800000001000BD +:105710001020030841210000800880808000208044 +:10572000A00520800908A080212085111083400059 +:1057300009000200102000000200820084C0020064 +:1057400090209001A0C0C09088C0042088C0909094 +:105750000000A00010000000000000080000000091 :105760000000000000000000000000000000000039 :105770000000000000000000000000000000000029 -:105780000000000000000000000000000000000019 -:105790000000000000000000000000000000000009 -:1057A00000000000000000000000000000000000F9 -:1057B00000000000000000000000000000000000E9 -:1057C00000000000000000000000000000000000D9 -:1057D00000000000000000000000000000000000C9 -:1057E00000000000000000000000000000000000B9 +:1057800001108300110809820800080040008810F9 +:10579000018200000090012108000201A002040023 +:1057A0004002030009840483880409000291A0894F +:1057B00000C0000001000100000000000002000025 +:1057C00021020102C088850291A0A108C090C002F8 +:1057D00000040084014100000000000000010001FD +:1057E00000000000010000000000000000000000B8 :1057F00000000000000000000000000000000000A9 -:105800000000000000000000000000000000000098 -:105810000000000000000000000000000000000088 -:105820000000000000000000000000000000000078 -:105830000000000000000000000000000000000068 -:105840000000000000000000000040000000000018 -:105850000000000000000000000000000000000048 -:105860000000000000000000000000000000000038 +:1058000000000084000201820082080500080040B8 +:1058100088C0C001000000004000104000408482A9 +:105820000010889000A004041103409000090008B3 +:1058300000C0000100000001000100000000008025 +:10584000000040002003840091804100110080008E +:1058500040800010100221A100200010000500214E +:105860000010000000001000000000000000000018 :105870000000000000000000000000000000000028 -:105880000000000000000000000000000000000018 -:105890000000000000000000000000000000000008 -:1058A00000000000000000000000000000000000F8 -:1058B00000000000000000000000000000000000E8 -:1058C00000000000000000000000000000100021A7 -:1058D00000000000000000000000000000000000C8 -:1058E00000000000000000000000000000000000B8 +:105880000000000000001100058020000040001012 +:10589000008000A08009100900030009000020809A +:1058A00000000000001000898003899000000002C1 +:1058B0000020009000022120082100080000004084 +:1058C000000000000011000500C1028009008000F6 +:1058D0000200400010100011210000030080800031 +:1058E0000000004000000000000000000000000078 :1058F00000000000000000000000000000000000A8 -:105900000000000000000000000000000000000097 -:105910000000000000000000000000000000000087 -:105920000000000000000000000000000000000077 -:105930000000000000000000000000000000000067 -:105940000000000000000000000000000000000156 -:105950000000000000000000000000000000000047 -:105960000000000000000000000000000000000037 +:10590000000000000000A111A01002801000001093 +:10591000000000000000A10003218800000000003A +:105920000080000080004100C1802100050241028A +:10593000A10082801104210820000000400800001E +:1059400008A1001000000001A00800840104040068 +:1059500084402108080000A1000001020001880223 +:105960001000200000000000000000000000000007 :105970000000000000000000000000000000000027 -:105980000000000000000000000000000000000017 -:105990000000000000000000000000000000000007 -:1059A00000000000000000000000000000000000F7 -:1059B00000000000000000000000000000000000E7 -:1059C00000000000000000000000000000000000D7 -:1059D00000060000070000000000000000000000BA +:105980000000000000000000039020A000C0000004 +:105990000001000200080000C1A084018200A000F4 +:1059A000080008109020A000C18282824102840079 +:1059B000890388C011C08901014101000000000075 +:1059C0000000000007000000000000E007000042A7 +:1059D000000000E00000484200000000000000005D :1059E00000000000000000000000000000000000B7 :1059F00000000000000000000000000000000000A7 :105A00000000000000000000000000000000000096 -:105A10000000000000000000000000000000000086 -:105A20000000000000000000000000000000000076 -:105A30000000000000000000000000000000000066 -:105A40000000000000000000000000000000000056 -:105A50000000000000000000000000000000000046 -:105A60000000000000000000000000000000000036 +:105A10006006000000000700820000000000000097 +:105A20004100000000000000000000000000000035 +:105A30000000000000E00000000A0000000000007C +:105A40000000FF00FF00FF00FF0000FF00006000FB +:105A500000600208802000110022000000002B28B6 +:105A60002B2800FA05FF00000000000000000000E5 :105A70000000000000000000000000000000000026 -:105A80000000000000000000000000000000000016 -:105A90000000000000000000000000000000000006 -:105AA00000000000000000000000000000000000F6 -:105AB00000000000000000000000000000000000E6 -:105AC00000000000000000000000000000000000D6 -:105AD00000000000000000000000000000000000C6 -:105AE00000000000000000000000000000000000B6 +:105A8000000000000000000000000000FFFFAAFF6F +:105A90003C783C3C00000000C0C0F5052B2800000D +:105AA00000000000C300AF005F5F5F5F5F00430066 +:105AB000C3C04140AAAAAAAA0A0A287D0000000081 +:105AC00000000000FF00FF00FF00FF0000FF0000DB +:105AD000090000090104401011002200000000002C +:105AE0002B282B2800FA05FF000000000000000012 :105AF00000000000000000000000000000000000A6 :105B00000000000000000000000000000000000095 -:105B10000000000000000000000000000000000085 -:105B20000000000000000000000000000000000075 -:105B30000000000000000000000000000000000065 -:105B40000000000000000000000000000000000055 -:105B50000000000000000000000000000000000045 -:105B60000000000000000000000000000000000035 +:105B1000AAFF3C783C3C00000000CFCFF5052B28C5 +:105B20003C3C00000000C300A0003CFF3C3C5F5F29 +:105B30004343FFF05550CF0CFF3C5F5F287D0000D2 +:105B40000000000000000000FFFFFFFF5FFF0550A6 +:105B50000000040108020600900004100820000064 +:105B60000000FF00FFC30000000000000000000074 :105B70000000000000000000000000000000000025 :105B80000000000000000000000000000000000015 -:105B90000000000000000000000000000000000005 -:105BA00000000000000000000000000000000000F5 -:105BB00000000000000000000000000000000000E5 -:105BC00000000000000000000000000000000000D5 -:105BD00000000000000000000000000000000000C5 -:105BE00000000000000000000000000000000000B5 +:105B90000000000055555555FF28FFF8AFEFAAEB60 +:105BA00014000400000000003FFF3F0FFFF08F8053 +:105BB000B2B2FF3C82AAC3FFCF0CCF0C00C0F0C032 +:105BC00000000000000000000000FFFF00000A00CD +:105BD0000AA00000104020800006009001400280D2 +:105BE00000000000FF003C0000000000000000007A :105BF00000000000000000000000000000000000A5 :105C00000000000000000000000000000000000094 -:105C10000000000000000000000000000000000084 -:105C20000000000000000000000000000000000074 -:105C30000000000000000000000000000000000064 -:105C40000000000000000000000000000000000054 -:105C50000000000000000000000005000038000007 -:105C60000000000000000000000000000000000034 -:105C70000000000000000000000000000000000024 +:105C1000000000000000F55505552828F8F80FCFC2 +:105C200000C3000000000000000030F03000FFF072 +:105C3000BFB0B2B2C30080A0C0F00C0CCFCF00C088 +:105C400050C000000000000000000000000800102C +:105C500000A015639A0D0009100000610007000DF7 +:105C6000080000610006000D000000610006000D44 +:105C7000000000610006000D0000000000000000B0 :105C80000000000000000000000000000000000014 -:105C90000000000000000000000000000000000004 -:105CA00000000000000000000000000000000000F4 -:105CB00000000000000000000000000000000000E4 -:105CC00000000000000000000000000000000000D4 -:105CD00000000000000000000000000000000000C4 -:105CE00000000000000000000000000000000000B4 -:105CF00000000000000000000000000000000000A4 +:105C90000000000000610006000D00000061000629 +:105CA000009D0000A0610006000D000000610006DC +:105CB000000D000000615006000D000100610006AB +:105CC0000091000100610006000D000000000000CE +:105CD00000000000C3C3C3C30F0F0F0F50500C0CC4 +:105CE00000000000F0F0F0F0FF00FF0000000000F6 +:105CF00000005353000000000000000000000000FE :105D00000000000000000000000000000000000093 -:105D10000000000000000000000000000000000083 -:105D20000000000000000000000000000000000073 -:105D30000000000000000000000000000000000063 -:105D40000000000000000000000000000000000053 -:105D50000000000000000000000000000000000043 -:105D60000000000000000000000000000000000033 -:105D70000000000000000000000000000000000023 +:105D10000000000000000000FCA8000000000000DF +:105D20000000C3C3C3C3055505003F1500000000B4 +:105D3000000000000000C3410F007D3F0000FFF0A5 +:105D400035350FAFFFAF7D55FFD7FCFF3CFF00009F +:105D5000000000000000C3C3C3C30F0F0F0F50505B +:105D60000C0C00000000FAFA50500F0F3F3F0000EB +:105D70000000000000FF0000000000000000000024 :105D80000000000000000000000000000000000013 -:105D90000000000000000000000000000000000003 -:105DA00000000000000000000000000000000000F3 -:105DB00000000000000000000000000000000000E3 -:105DC00000000000000000000000000000000000D3 -:105DD00000000000000000000000000000000000C3 -:105DE00000000000000000000000000000000000B3 -:105DF00000000000000000000000000000000000A3 +:105D90000000000000000000FCA8FCA800000000BB +:105DA000000000000F0FAAAAFFFFFFFF3F153F15DD +:105DB000000000000000000000410F007D3FFFFFD9 +:105DC0000F00353500A0F0A02800AA82F5F50505E2 +:105DD0000000000000000000FFAA1E1E00000000DE +:105DE0008383C0C300000000BF00BF00C0CFC0CF8E +:105DF0000000000055AF3C3C0000C3000000000064 :105E00000000000000000000000000000000000092 -:105E10000000000000000000000000000000000082 -:105E20000000000000000000000000000000000072 -:105E30000000000000000000000000000000000062 -:105E40000000000000000000000000000000000052 -:105E50000000000000000000000000000000000042 -:105E60000000000000000000000000000000000032 -:105E70000000000000000000000000000000000022 +:105E100000000000000000000000007D0082FFF094 +:105E20003CF00000000000000000F5F5C5C5F0C31F +:105E3000FF007F407F400000000000000000CFCF47 +:105E4000C0C000000000FC3CFEBE20A03CFF7D7DE9 +:105E50000F0F000000000000000055001E1E000093 +:105E600000008383C0C300000000FF40FF40505F7C +:105E7000505F00000000FFAF3C3CFF00C30000008B :105E80000000000000000000000000000000000012 -:105E90000000000000000000000000000000000002 -:105EA00000000000000000000000000000000000F2 -:105EB00000000000000000000000000000000000E2 -:105EC00000000000000000000000000000000000D2 -:105ED0000000000000000000400000000000200062 -:105EE000000000004000000000000000880000806A -:105EF000A0002000880000002000404188008800A9 -:105F000000004000200000000120010020000000EF -:105F1000000000000003200000000000200020001E -:105F200000000000002020000000000000000080B1 -:105F30000000000400040020000000000000000039 -:105F40000000000040000000000000000000000011 -:105F50000000000000004000000000000000000001 -:105F6000000000000000800000000000050010009C -:105F70000020000000000000000000000000000001 -:105F80000000000000000000000004010400000008 -:105F90000000400000000000000000000000400081 -:105FA00000000000000000010000000000000000F0 -:105FB00000040900000100010001000000000000D1 -:105FC00000000000000000000000000000000000D1 -:105FD0000000000040000000000020000000888059 -:105FE0000400000004000400001008100510001058 -:105FF0000000A000000001000000000000000010F0 -:106000002000000020002000080000000400000024 -:106010000000080000000000000000000000000078 -:106020000200000000000000010000100000040059 -:10603000040020002000200088040440020000002A -:1060400000800000000000000000000000000000D0 -:106050000000008000000000000204008000040036 -:10606000030400000000000041082001800808002F -:1060700000040000000000002004000000000000F8 -:10608000000080080082C000800880000488800032 -:106090000000000000000000000800000084000074 -:1060A00000000000008200000000040800010084DD -:1060B0008000800080908000800000098000000047 -:1060C00010000010000000000000000800000000A8 -:1060D0000000000000020000000000850000000435 -:1060E0000000000000040008001100210021004011 -:1060F0000011001140000000000990080008000095 -:10610000001000050004000400030004000000006B -:10611000000404000008000000000005000000402A -:1061200000000000000809000800C0000000900501 -:106130000000000000000800C000900008000000FF -:106140000009000000050000000000000000000041 -:106150000000000000000000000000000004080033 -:106160000000080000000000000000000000000027 -:1061700000000800000040000000000000000000D7 -:106180000020000000000091000109000001000053 -:10619000000000008000000000000000000000007F -:1061A00000000000100000008800800000000000D7 -:1061B00000000000000000008000000000008000DF -:1061C00000000000000000000000000000000000CF -:1061D00000000000000000000000000000000001BE -:1061E0000000400000000810820400400000000091 -:1061F0004005090000000000C000A00400000104E8 -:106200000000840000000000C00008000000000042 -:1062100000000000900900000400000008000800D1 -:106220000000000000000400100800000800A000AA -:106230008800C080A080A00082000800000000004C -:10624000000004000000000082088200000000003E -:10625000C00082000000000082000000000000007A -:1062600001000800000000004101030000010800D7 -:106270000000008220004100030000000000000038 -:1062800008000000000000100000000000000000F6 -:1062900000000000030000000000000000000000FB -:1062A00000000000000000000300000003000000E8 -:1062B000030000000810002000000000008400001F -:1062C00003000084800000000000080000000000BF -:1062D000100000000000000000000000100000009E -:1062E0000000200000200800000004000000004022 -:1062F0008440080541008200000000000002040004 -:1063000000020820000082000400000000000000DD -:1063100000000021000084080020000000000000B0 -:10632000000000100000000000001000100000003D -:10633000C0000020040000000400C0200000000095 -:10634000C00082000000A000000000000000080063 -:10635000000000000000080000000000C000000075 -:10636000000090000000000000000000000000009D -:10637000000000000000C000000011000000040048 -:10638000800000010000000000000000000000008C -:1063900000000000000000000000000000000000FD -:1063A000000000000000000000000000000000826B -:1063B000000000000000000000008000000100005C -:1063C00000000000000000000000000000000000CD -:1063D00000000000000000000000000000000000BD -:1063E0000000000000000000000000000003002189 -:1063F0008208018000000082000008000400000301 -:106400000002000000000000000300000021000066 -:106410000000000001000003002100000000000057 -:106420000002000000000005000000000000400025 -:10643000000300008400840082000100002182002B -:1064400090000208000000000000000800000008A2 -:106450000008000000000000002100000000100003 -:106460000000000000009000000008000000000094 -:106470000484030008101000031140008000000293 -:1064800008000005008800004100000000004100F5 -:1064900005000000000020001000000000000000C7 -:1064A00000000300030000000000000000000000E6 -:1064B00008000000200400000000080008000000A0 -:1064C00000002100000000000000000008000000A3 -:1064D00000000000000000000000000000000000BC -:1064E000000000000000000000000000904001A03B -:1064F000002102C00000008800020000010000002E -:106500000011000200A000100001000000000000C7 -:1065100000000000000000010100000010A0004089 -:10652000000000000000000000000000000000006B -:1065300000000000000000A0002000020088A0A1D0 -:1065400000210041000100000000010000000000E7 -:10655000000000000000000000000000000000003B -:106560000000000000000000010091010000004058 -:10657000100802108020000000000000000002004F -:1065800000030084002000800000020800000000DA -:106590000000000000000009001010000002800050 -:1065A00000000000000000000000000000000000EB -:1065B000000000000000000011800080008000004A -:1065C00091880088000800110900000302000010F3 -:1065D00000000000000000000000000000000000BB -:1065E000000000000000000000402100050800201D -:1065F0000380410085080500000000000000000045 -:106600000000002100000000C000000204000000A3 -:10661000000000000000000000001000000000006A -:1066200080000011808080800000000000000000D9 -:1066300000000000000000000000000000008000DA -:106640000000800080100000001100000321800085 -:1066500010008000000000000000000000000000AA -:10666000000000000000000000000800100005000D -:10667000089088080200A001820000008800000045 -:1066800000000000000000040000020000000110F3 -:1066900000000000000000000000000000000000FA -:1066A000000010002000848408900000000000001A -:1066B00000000000000000000000000000000000DA -:1066C00004200000A000A00000A000010200900033 -:1066D00008009100020040000000000000000000DF -:1066E00000000000000000000000000000020000A8 -:1066F00000000002021100A0A1A1209000000000F3 -:1067000000008200000000A00200018200000000E2 -:106710000100030100000000000000000000000074 -:1067200000010000400000A090880202000000006C -:1067300000000000000000000000000000008400D5 -:1067400000000000C000A0A00140908202000000F4 -:106750000101000000000000000000000000000037 -:106760000000000000000000000000000000000128 -:10677000000008010001802105C1820808030020F3 -:1067800000000002800000000080000009000000FE -:1067900008000205914000000000000000000020F9 -:1067A00000000005021080000080800080000000D2 -:1067B00000000000000000000000000000000000D9 -:1067C0000000000000000000808010808000A00019 -:1067D0000003100800000005000000000000000099 -:1067E00000000000000000000000000000000000A9 -:1067F00000100341802140080880020005804011FC -:10680000000000A000000000A14100118200000073 -:1068100080800000800000400000000000000000B8 -:1068200002C0100000000202800080000000800012 -:106830000000000000000000000000000000000058 -:1068400000000000000900000000080088030800A4 -:106850000800034008000500804080000008000098 -:106860000000000000000000000000000000000028 -:10687000000002000810030040110110008801040C -:1068800000000000000200100000050188009100D7 -:10689000840008C002880888020000000000000090 -:1068A000000000020000000000000800400408088A -:1068B00008000000000000000000000000000000D0 -:1068C0000000000020008800008400002100050175 -:1068D00001A0830008000890004008000200004169 -:1068E000C0400000000000000000000000000000A8 -:1068F000000000000088010001000001000000E02D -:10690000000000000000000000000000008100E026 -:1069100007008400000000E0070084000000000081 -:1069200000000000810000E0000000000000000006 -:106930000700000000000000000000000000000050 -:106940000000000000000000000007000000000040 -:10695000000007000000810000E0000000000000CF -:106960000000070000000000000000000000000020 -:10697000000000000000500000E0000000000000E7 -:1069800000006600000000000000000000000000A1 -:1069900000660000F0F000000000000000000000B1 -:1069A00000000000000000000000000000003C3C6F -:1069B0003C3C6660606000000000000000000000D9 -:1069C000000000000000000000000099000000002E -:1069D00000000000DD44DD44000000000000000075 -:1069E000F0F00000000000000000000000000000C7 -:1069F0000000000000000000000000000000000097 -:106A0000000000003C063C06000000000000000002 -:106A10003C0000F00000F0F000000010000000005A -:106A20000000000000000000000000000000000066 -:106A30003C3C3C2C666060600000000000000000F0 -:106A400000000000000000000000000000990000AD -:106A5000000000000018DD44DD44000000C3000019 -:106A60000000F0F000000000000000000000000046 -:106A70000000000000000000000000000000000016 -:106A80000000000000000000000000000000000006 -:106A900000000000000000000000000000000000F6 +:105E9000000000000000000000000000003F00C003 +:105EA000FFF000F00000000000000000F5F5C5C59F +:105EB000F0C300007F407F400000000000000000B1 +:105EC000F505F50500000000F000FAAA2CAF3CFF34 +:105ED000FFC30F0FC0004000400020002040A00082 +:105EE000000020002180A1004080200084002000CC +:105EF00020002000040040004000000521000000B8 +:105F00000000200020009000200004004000C0009D +:105F100088082000000320001000400040112002EB +:105F2000008004102080840088008841C000208008 +:105F300020022080210084408200002040C12000F7 +:105F40000002C00020808804000000000000000063 +:105F50008541C0002000200000000000000000007B +:105F6000000040400000040404000910102000005C +:105F700040004000100040000000200000024000EF +:105F8000000000C0400041000800000009A000001F +:105F90000000080404C000004000C00080000000B1 +:105FA00000001002400140080900400010004000BD +:105FB00000048000A010200020000090200110208C +:105FC0001100100020401002099000000040000065 +:105FD00000040400000000000102200020008400F2 +:105FE00000000010080984000440890004400900F2 +:105FF00000400000002000100200400000001000DF +:106000000800000000000010081004000403000253 +:10601000000000800000001000000000000290005E +:1060200040040000414009004008900500020800BB +:10603000080220000810908420100840020001008F +:10604000C1411000040082004080000010000010D8 +:10605000900000002000000000002005800091005A +:1060600000A00300000185100088800004000310D8 +:1060700008840910001000100085000884840008BE +:106080000008840000000008000584080000418822 +:1060900002090488004000004008000000080811C0 +:1060A0000408898500888805C010840904080083D5 +:1060B0000588828880000001001184098010041086 +:1060C00020882008800002000400890200400000AF +:1060D0000084000004000484030003024008000957 +:1060E000000090000041000004080008000091003A +:1060F00088088200882100000000000300000010D2 +:10610000000004100021000000000008000000084A +:106110000005002140028821C0038800000000081B +:10612000C000000000030421A002002182410400FD +:10613000901000089110202020002021409020087D +:1061400010024003A0000400840540020400041073 +:10615000084008030811A0400820080000080900B2 +:106160000300400800080900030040840200000802 +:10617000080000C00908210000000000050000021E +:10618000088200A0000010080000000004000000C9 +:1061900000001010000000000800000003000000D4 +:1061A0000001080002000400030040010300040095 +:1061B0000040088205A0402080889010C0A04104C3 +:1061C0001082002021904000218805041001001059 +:1061D000009009A003904008104000A00008004073 +:1061E0000009A08020108211100000000002208011 +:1061F000010400200020014000000008A0008240AF +:1062000008000000C04104048400001082008200E5 +:1062100082030800A041A00082050041080084110B +:1062200000008200840008100404880000008441FB +:106230004040082108000800400200400800C0104B +:106240004002A0000808084104400000008040808F +:1062500000048200C040C009040040020800001190 +:106260000420000040108001038804000000008822 +:1062700000020805204000C104A0000000040088BE +:1062800000110000400000A00020000000000000FD +:1062900000000004100000900010000000008800C2 +:1062A000050000000082000800004000030000100C +:1062B0002000031010C080C000C0040100000000D6 +:1062C00003012041000000001100110004901002A1 +:1062D00000020000080004000000000000000000B0 +:1062E0000484000000030040A0218205000000009B +:1062F0000800001000000000004100000003004101 +:106300000000840000000000C040001000211008C0 +:106310000000000500000000400008000800040024 +:10632000040000400000884082400480000804000F +:10633000C08004208202A000020000050940000283 +:106340000400410310208200081182098205002107 +:1063500000214000A0200020000010088209080051 +:106360000041080010000000000100004000110082 +:106370004000000000A140904088110021900800DA +:106380000000008405000000004040A0080000005C +:1063900008000000000000000000000000A0000055 +:1063A0000000000005000000000009000402400099 +:1063B0000900410204A005000282410009204002B8 +:1063C0000000050040A0210405208088080004008A +:1063D00005000008850020080090032040002020D0 +:1063E00000400220030000009008A0084110411165 +:1063F0000421000000048411100400000810008033 +:106400000009000000110008000300400021040002 +:106410000000000084210400002100090000822106 +:10642000820000050021010000000005082102A1F2 +:10643000C01010042000840000000011821000042D +:1064400084002004A00810212003842100000405FA +:10645000081000030102000400038200400800004D +:106460000000000008009000000000000002400052 +:10647000400000A0000011044004000000C020C043 +:1064800020400008008400020040000000090000D5 +:10649000054000000000000000004100100040081E +:1064A00000000500410000084084000000000010CA +:1064B00000020000410000000000000000C01104C4 +:1064C00000880004858420022040918404004088D4 +:1064D000084011000000080021000400090000002D +:1064E0000004008800040004080000000582040283 +:1064F00001820902844004020382C09008C0908493 +:106500000088828800080008000800C00000000021 +:106510000000000000000001000000010000000079 +:1065200008000000A00400088410C09000000000D3 +:1065300001000801000110A1011040A1000108A004 +:10654000830200A000838240001003A0044091C198 +:106550009103C020829101830021C02100820000AC +:1065600000000000000000880082000890908489EC +:10657000A1A1048482848080808082800000858044 +:106580008000090080000080000000800000000002 +:1065900000000000000000090008000800100000D2 +:1065A000000080000000800010808000800000005B +:1065B00000004103400500080890218980880020E0 +:1065C00020910310009000A1000000001080000046 +:1065D00008C1034041108082212010C00002000247 +:1065E000000000000000000000800000000000002B +:1065F0000240A1409004C0000040800800028000DA +:10660000004180A0008480800000000000000000A5 +:106610000080800080000011000000030000800066 +:106620000000002000000000800080028091000037 +:106630000000031041002010410309008041850043 +:10664000090503000908C10082A003041000900995 +:106650000800090021038000A082080008100580BE +:1066600041A1000000000000000000008002008046 +:1066700000004001048504A020A0400104052089F9 +:1066800084A0880090034010081000000200A000C1 +:10669000880000C010008400840284000200000012 +:1066A0000400000000000040000008004000A0209E +:1066B0000040000000020000000101200804100159 +:1066C000A190010200908200A000090320000900AF +:1066D000A000010020C02100020083880002000108 +:1066E000011001A1000000000000000008000209E4 +:1066F00082028400A140C004080482C10540000554 +:1067000084200584C0900008904008A0000000008C +:106710000000100000000000000000000000000069 +:106720000000000000010000000000004003002005 +:10673000021182100001000100000101010190001E +:1067400001000008100000080021A01082C1C0084C +:1067500002010000010940200008910911022001F6 +:106760000001010082000000000000000000008223 +:10677000009000A000084109038380900004C1023A +:10678000008300048490A08000000000000000004E +:1067900000000000000000000000000000000000F9 +:1067A0002000080000000010000900040002801012 +:1067B00000800005850900010008001021214041EA +:1067C000000020080380C02000C105408509800228 +:1067D00000840020000402908009050988090980CE +:1067E000002100400503A00400000000000000009C +:1067F0000000000000000000008500C00000000054 +:1068000080040040808280000011000200800000AF +:1068100000000000000000000000020010800000E6 +:1068200000008000000000000000000000000000E8 +:10683000001100848000000000012180200004007D +:106840000411418008000500041021000304100019 +:106850008008008000000000000341218421208086 +:106860001003030020401000204100000000000041 +:106870000000800080C10000000010088820C08255 +:1068800010000801A04140051000C001200308408D +:10689000040000000010004000000000002001087B +:1068A00000000000080210401000A0000000880056 +:1068B00000008800C0A008200800000101040000BA +:1068C0000100000183A001080800020021900804D3 +:1068D00041041000001000080000000009411008E9 +:1068E00004840101204090000100A001000000008C +:1068F000000000000400880590848800000000E08B +:10690000070048000000000007004800880000E081 +:1069100007008200000000000000000000000000EE +:106920000000600000000000000000000000000007 +:1069300000000000000000000000008200000000D5 +:1069400000E00000410000000000000084000000A2 +:10695000000000000000000000E000000000000057 +:1069600000E007000000000000000000000600003A +:1069700000000000000000000000070042000000CE +:106980000000000000000000000000000000F69081 +:106990007E7EFFDBFFDB0000000000000000000047 +:1069A000000000000000F0F0F0F000000000F0F047 +:1069B000F9F900000000424242420F0F0F0F0000A1 +:1069C00000000000000000000C0C3C3C0099009905 +:1069D000030F0303000093FF00000000C3C3C3C301 +:1069E000F0F0F0F024FF2FFF0000DBDB00000000E0 +:1069F000000000000000000003030303000000FF8C +:106A00000000000000000000000000000000000086 +:106A1000F6901818FCC3FCFF000000000000000006 +:106A20000000000000000000F03CF03C000000000E +:106A3000F0F0606000000000C309C38166667E66F6 +:106A4000000000000000000000002C2C2C2C0099FD +:106A50000099030F0F0F000093FF000000000000DB +:106A60004242F0F0FF0024242F2F0000C3FF00005B +:106A70000000000000000000000000F006F6C0C0AA +:106A8000C0C002102000008810840210200000887E +:106A90001084000000000000000000000000000062 :106AA00000000000000000000000000000000000E6 :106AB00000000000000000000000000000000000D6 :106AC00000000000000000000000000000000000C6 :106AD00000000000000000000000000000000000B6 :106AE00000000000000000000000000000000000A6 :106AF0000000000000000000000000000000000096 -:106B000000000000D2D29900DB00FF00F900F9007C -:106B1000666666660303030300000000660066FF06 -:106B200066666666000000000000000000000000CD -:106B300000000000FF99FF00183C0030000000003A -:106B40000000000000000000000000000000BDBDCB -:106B50008DBD00FF00FF0F0F6699CFCFCFCF000094 -:106B6000000000100F000000000000000000000006 -:106B70000000000000000000000000000000000015 -:106B8000000000000000D2D2FF66F700F700F90015 -:106B9000F9000F0F0F0F030303030000000066004E -:106BA00066FF3C3C3C3C0000000000000000000090 -:106BB00000000000000000000000003C003C00005D -:106BC00000000000000000000000000000000000C5 -:106BD000BDB98DB9000000000F0F66660C0C0C0CDF -:106BE0000000000000100000000000004040404095 -:106BF0000000000000000000000000000000000095 -:106C00000000000000000000006100050009000015 -:106C100000610006000D00010061403C050D000010 -:106C200000610007000900000000000000000000F3 -:106C300000610001C0010000000000000000000031 -:106C40000000000000000000000000000000000044 -:106C5000000000000008000000000061000E000DB0 -:106C6000000000610001C0010000000000080000F9 -:106C70000000000000000000000000000000000014 -:106C8000000000610007C00D000007FF04FFF0FFD7 -:106C9000F3FF00000000003C003C0F0F000000006C -:106CA000000000000000000000FF000000000000E5 -:106CB0000000FFC33C00003CFF3C0000000000005F -:106CC00000000000000000000000000000000000C4 -:106CD000000000000000000000000000F3FFFFFFC4 -:106CE000000000000F0FFF00C0C0FCFC000000000F -:106CF0000000000000000000000000000000000094 -:106D000000000000000000001414541407FF04FFEA -:106D100000FFC3FF00000000003C003C0F0F00001C -:106D20000000000000000000000000FF0000000064 -:106D300000000000FFC33C00003CFF3C00000000DE -:106D40000000000000000000000000000000000043 -:106D500000000000000000000000000000000C0027 -:106D60000000000000000F0FFF00C0C0FCFC00008E -:106D70000000000000000000000000000000000013 -:106D8000000000000000000010000000500028EB90 -:106D9000C0C00FC0AFC000000000000000000C0029 -:106DA0000C0000000000F5F5F5F541C341C30000FB -:106DB000000000000000FFC33C00FAFAFAFA0000ED +:106B00000000000000000000000000000000000085 +:106B100000000000F0009900C3FFC3F09C9C0CFC37 +:106B200000FF00FF0000000006FF0600000000005C +:106B30003C3C3C3C0000000000000000F090C080A5 +:106B40009D9D9D9D000000000000000000009F9F93 +:106B5000069F017F017F99B400B4FFFF0000FFFC96 +:106B6000FFFF7F017F01CFC00909003CF0FC00FE60 +:106B700000FF000000000000000000000000000C0A +:106B8000FF0CFF00C3C30000000000000000000075 +:106B90000000000000003C3C990099FF99FF9C9C7C +:106BA0000CFC06F600FF00000000F6FFF6000000F7 +:106BB000000036363C3C0000000000000000FF9959 +:106BC000C381BD99BD9900000000000000000000D5 +:106BD0009F9F0606017F017F99B400B460F960F9B8 +:106BE00000C000007F017F01CFC0F9F999BDF9FD18 +:106BF00000FF00FF00000000000000000000000097 +:106C0000000CFF0CF0F0999900610007000D0001E5 +:106C100000610006000D000005615A0FC50D00A0BF +:106C2000000040000000000000610006000D0001AF +:106C300000610006000D000000610006000D00006C +:106C400000610006000D0001000000610007000D5A +:106C5000000000610006000D000100610006000D4B +:106C6000000000610007000D0000006150070001F6 +:106C7000000000610006000D0000000000000000A0 +:106C8000000000000E08001000010000000000FFDE +:106C900000FF0000000000FB04FF000000000000F7 +:106CA00000000000000000000000FFA0FFA00000A6 +:106CB000000000000000000000000000000050FA8A +:106CC00014BE00000000283C7D3C00000000FAFFDC +:106CD0000F00C35500C30C0CFAFAFFFF0F55FFFF5E +:106CE00000000000000000007D287878FF003C3C98 +:106CF000FE7CFE7CFF2AFF0200CF00C700000000E0 +:106D00000000000000000000000000000000000083 +:106D10000CFF00F30000000000FB04FF0000000077 +:106D20000000000000000000000000005F005F00A5 +:106D30000000000000000000000000000000000053 +:106D400050FA14BE000000003C3C3C3C0000000037 +:106D500078FF0FFFC35500C38E8E000005050000AD +:106D6000FFFF3C003F00000000007D2878780F0FF7 +:106D70005555C240C240002A000200CB00C30000AB +:106D800000000000000000000000000000000F2DC7 +:106D90000F0F0CFC00FF00000000000000000000CE +:106DA00000000000000000000000000000000000E3 +:106DB0000000000000005FFF55140000000000000C :106DC00000000000000000000000000000000000C3 -:106DD00000000000000000000000000000000000B3 -:106DE00004000000000000003C553C55A0A0AFAFDF -:106DF0000000000000000000000000000000000093 -:106E0000000000000000000000001717FFFFFFFF58 -:106E100028EBFCFC00C0A0C0000000000000000047 -:106E20000C000C0000000000050505050082008232 -:106E30000000000000000000FFC33C005050505014 +:106DD0003C0F3C0F020000000000A2F3140014FF5F +:106DE00080C082C3EBC3000000000000BFBE0A0ADF +:106DF000C0C00AFACFCF4D4D000F030F027F7D7D3B +:106E00000000000000000000000000000000000082 +:106E10000F2D0F0F00FF00FF00000000000000001A +:106E20000000000000000000000000000000000062 +:106E300000000000000000001FFF1414000000000C :106E40000000000000000000000000000000000042 -:106E50000000000000000000000000000000000032 -:106E6000000004000000000000003C553C55A0A0BC -:106E7000AFAF0000000000000000000000000000B4 -:106E80000000000000000000000000001717FFFDD8 -:106E9000FFFF04000000204140000000200020000F -:106EA000200000000000200020002000000004005E -:106EB00021002000400020002005000020002000CC -:106EC000100000000000200020002000040020002E -:106ED00020000003000020002000200040002000CF -:106EE000400088000000000000000000200020009A -:106EF00000002000000020000000880000000000CA -:106F000000000000000088000000000000000000F9 -:106F10000000000000000000000000000000000071 -:106F20000000000000000000090000000000200038 -:106F30000000200000000000000000000000000031 -:106F400000000000000000000000000000008002BF -:106F50000000000000000000000000000000000031 -:106F60000000000020000000000000000000000001 -:106F7000000400000000000000000000000000000D -:106F80000000000000000000000000000000000001 -:106F9000000000000000C0000480000000000000AD -:106FA00000000000000000000200A0884010000067 -:106FB00040000400888088000000000000000000FD -:106FC0002000000000001000080000000800010080 -:106FD0000400080008000000000000048800000011 -:106FE00000000000000000002000888000800404F1 -:106FF0000000000000000000000000000000000091 -:107000000010001000000000080200000000000254 -:107010000000000000000000000800400000000028 -:1070200000080000090805080084800000028000B4 -:107030000000800800000002008400000000000042 -:1070400000080008091000100000800004088000FB -:107050000800800480008000000000000000008420 -:107060000000000800880010001080880004001054 -:107070008089008400002000000000000000000063 -:1070800000000040000800000040800900000000EF -:1070900000010000000000000000001100000021BD -:1070A00000000004001100000009000000000004BE -:1070B0000000002000000003011100200021000852 -:1070C0000000002100000000000000100008000087 -:1070D000000500080000000000050000000000009E -:1070E00000000000000000080000832000000000F5 -:1070F000000400200000000000400000000000002C -:10710000000000000020000000000000000000005F -:1071100000000000000000000000000005000084E6 -:1071200005A0040000A00000000004000000000012 -:1071300000840000000009000000200040A000843E -:1071400000000000000003000000000000090082B1 -:107150000000000800000000000000000000000027 -:107160004100210000000000030000004001000871 -:10717000000000010001009000000000000000007D -:1071800000000020000000000000000000000000DF -:1071900000000000030000000800400000008280A2 -:1071A00000002000820000020000C000A009820050 -:1071B000C00300050091000040000802001000809C -:1071C0000000C000000000000000000000000010EF -:1071D00000008200000000004000C000C00000006D -:1071E000080090008200000000000000000000097C -:1071F0000000000000000800400000000000000047 -:107200000000C0000800900008000000080008000E -:1072100000000000828000000800000082000800DA -:10722000091040000000050009880000419000207E -:1072300008000000110010020000000041010001E0 -:10724000001041000000000241001000000800088A -:1072500000010000200000001000000000000000FD -:1072600000000000000000000000000000104000CE -:107270000008000000000000000000000000000006 -:1072800000000000000040000800000008000000AE -:1072900000000000000000100000000000000000DE -:1072A000000082000000C000080000090000080083 -:1072B00040000000000382008200400200008200C3 -:1072C00041C0080082210000000000000000000012 -:1072D0000000080000000000A000002004004000A2 -:1072E000C005000000000000C00000000000000019 -:1072F0008200400001C0008000800080000000008B -:10730000A00000000000000000800000000000005D -:10731000900040000000000000000000820000001B -:10732000002082004100050404A0080200000008BB -:107330004182800000000000410400008000000045 -:107340000088A0020000000000000000040005000A -:10735000000000008000000000000090000080009D -:10736000000000000000000000000000000000908D -:10737000000000A08000200400040004000440007D -:107380000800400400000000000000400000000071 -:1073900000000000000000000000000000000020CD -:1073A000082000A01184A000000082000400040056 -:1073B00000080000018000000000000201A0400061 -:1073C0008800000200000000000900090000000021 -:1073D0000009000008210800000000000000000073 -:1073E0000000080000210000000000000000002153 -:1073F0000000C00008008400000000000800000039 -:1074000000000000000000000080000000000000FC -:1074100000008400000040000000000000000000A8 -:1074200000210000000082000800000011000000A0 -:10743000000000002100020200820000000008108D -:107440008220000040910002210021000000410044 -:1074500000000000008841008000000020002100A2 -:10746000000000208000000000000000000000007C -:10747000000000000000008800000300410021001F -:1074800000400000080000000000001000000000A4 -:1074900000000000000000000000000003000000E9 -:1074A000000000000000000000008200000000005A -:1074B000A00004040000A0A002820000000002005E -:1074C00000000001000001000001000000000000B9 -:1074D0000000000000000000000000080088008894 -:1074E000000008049090008200900000000000005E -:1074F000000000000000000020000000000100016A -:10750000A0010001000000000000000000000000D9 -:10751000000000000000000000000000092101211F -:1075200000030088000000000000000000000000D0 -:1075300000000000008000000000000000000000CB -:1075400000000000001000102000002100000000DA -:10755000000000000000000000000000000000002B -:10756000008000000080800000800000000000001B -:1075700000000000000000004000000000000011BA -:1075800000100311002000000000000000000000B7 -:1075900000000000000000000000000000004108A2 -:1075A00021A1009000050000000000000000000084 -:1075B000000380000000000080C1802180000200E4 -:1075C00003000800200008002000090090210000AE -:1075D00000080000000000000000000000000000A3 -:1075E000800000008000000000118000000000000A -:1075F000000000000000000000000000000080000B -:107600000080410002112080000000000000000006 -:10761000000000000000000000000000000000006A -:107620001000100583001010000000000000000092 -:1076300000000001A0900010400002C008A1080056 -:107640000100010000000990000000000000A101FD -:10765000000000000000000000000000000000002A -:10766000000010000000080000000001A000000061 -:107670000000000000000000000010004000C000FA -:107680009000004000000101010400000000000023 -:1076900000000000000000000000000000000000EA -:1076A000000000200000A082000000000000000098 -:1076B000000000900010008200904082008884103A -:1076C00011A1000000009000000000000000000177 -:1076D00000000000000000000000000000000000AA -:1076E00000000000000000000000A00000000000FA -:1076F000A0020000000000000000000000000000E8 -:1077000000010000004001404109010100000000AB -:107710000000000000000000000000000000000069 -:107720000000000040000120A189090000000000C5 -:107730000000000000000000008000008000000346 -:107740008003210200050000000900000000000382 -:1077500000214000000000000000000000000000C8 -:107760000000000000000000000000000000000019 -:107770000000008000000000000000000000000485 -:1077800000110010004000801100050511200000CC -:1077900000000000000000000000000000000000E9 -:1077A00000000000000080102105A121210500003B -:1077B0000000000000000000001100800000002018 -:1077C0000080000000000080000000800010020027 -:1077D00000800000084000008000000080000000E1 -:1077E0000000000000000000000000000000000099 -:1077F0000000000000000000000000000000000089 -:10780000001000800000000002001105200011118E -:107810000000000000000000000000000000000068 -:10782000000000000000000003808320030088089F -:10783000000000000000000082008800A004080092 -:1078400000014020024082000040000200080000C9 -:107850000090000800040000000002000000080082 -:107860000000000000000000000020009000000068 -:1078700000000208000000000000000000000000FE -:107880000000000100200040000001000100010094 -:107890000101000000000000000000000000820064 -:1078A000400000000000000000000008A02021109F -:1078B00011010000000000000000000000000000B6 -:1078C0000000000000000000600000000000000058 -:1078D0000000600000E00000000000000000000068 -:1078E0000000000000000000000000000000000098 -:1078F0000000000000000700000000000000000081 -:10790000000000000000000007000000000000E090 -:107910000700000000000000000000000000000060 -:107920000000000000000000000000000000000057 -:107930000000840000000000000000005050CFC094 -:10794000EBEB4141008000801414CF0C00000000DC -:10795000000000000000000000000000C3FFC3FFA3 -:1079600000000000000000000000000000F000F037 -:10797000000000000000000055550000000000005D -:1079800000000000000000000000000000000000F7 -:107990000000F330F33000000000000000003F3F23 -:1079A0003F3F0000000000000000000000008000D9 -:1079B000800050FA50FA00000000000000005F5FF5 -:1079C000CFC05F0A5F0A82808280D7D7CF0C0000C9 -:1079D0000000000000000000000000000000C300E4 -:1079E000C30000000000000000000000000000F0E4 -:1079F00000F00000000000FF00FF555500000000EF -:107A00000000000000000000000000000000000076 -:107A100000000000F330F330000000000000000020 -:107A20003F3F3F3F0000000000000000000000005A -:107A30000000000050FA50FA0000000000000000B2 -:107A400000000000000000000D0D0101003CC3FF1C -:107A500000000000FFFF0000000000005555FFFF80 -:107A60000000000000000000000000000000000016 -:107A70000F00000000000F0F3CFF2DAFAA00AA006E -:107A80000000000000000000000000000000414174 -:107A900001000000000000000000000000000000E5 -:107AA00000000000000000000000000000000000D6 -:107AB00000000000000000000000000000000000C6 -:107AC00000000000000000FF00FFCDCDC1C1E8E8CC -:107AD000E8E80000000055555555000000005555D8 -:107AE0000000000000000000000000000000000096 -:107AF00000000F00000000000F0F00FF05AFAA00FC -:107B0000AA000000000000000000000000000000CB -:107B1000C3C30000000000000000000000000000DF -:107B20000000000000000000000000000000000055 -:107B30000000000075D77575FF55FF550000000067 -:107B4000000000000000000000000001006130069D -:107B5000000D000000610006000D0001006100073B -:107B6000C00D000000000000000000000000000048 -:107B70000000000080000000000000000000000085 +:106E5000000000000000FF0FFF00A2F3A2F3FF00FC +:106E6000FFFFA0F0AAFFEBC3F0F000000000BFBFDF +:106E70000A0BCFCF0AFA0C0C4D4D0F0F030F072F43 +:106E800028280000000000000000000000000000B2 +:106E90000000888088000020202020009000100042 +:106EA00020000000048040002000C0004000C0001E +:106EB000840090110100C0002080C1008800000003 +:106EC000058001208800002040808805880000009F +:106ED000880000038800040020042004000020042F +:106EE0000404040085002080A1800580C0021000F9 +:106EF00082002004A00020110203C04104002040B1 +:106F00008200200204400000008288412020C0004E +:106F1000880020000020000000090005400000005B +:106F200000040002000000080000000020008000B3 +:106F300000000000000002002104101002002000E8 +:106F40001002080240C100000001890820004040F2 +:106F5000000000A000004000400005C00500400007 +:106F6000400109C1400010829020102020084041BB +:106F7000000004822100004021024000000000A027 +:106F80000082000009000020000000400000000016 +:106F900000020000000400000000020000200200C7 +:106FA000000002800220000040000020C00200001B +:106FB0004000040011000400020002000400000070 +:106FC0000000010004080000000210021000A002EE +:106FD00001008804881000000200A00900000000E1 +:106FE000020004400800080021000000A0208200E8 +:106FF0000441820041800400000001401080100024 +:1070000040000500840000200000080000894000C6 +:10701000004004100010000400C0000000A00000A8 +:1070200000100040004000000000800000880001C7 +:10703000000080080008A000008200000008800016 +:107040000084000008000304000000010001038424 +:107050000441200800112000000000000008008406 +:10706000008800080010801002049010030000A0A7 +:107070004088200400108240008220080808800216 +:107080008008808440000410034000088084004091 +:107090008000400005820082008400008400C00857 +:1070A00000000400004104210441C000040002214A +:1070B00088009008880000200100000000044009BA +:1070C00040210240000000000000000000210000FC +:1070D000000800C10111002100080000000000218B +:1070E000A00800080010820540219021900009218D +:1070F000C010A04082008400880388408402A11050 +:107100004008A01040024005A00800008200842131 +:1071100008000800000390000000840000080084BC +:107120002100038203C000C005100084000000009D +:10713000000011A00000000009002000090005A0C7 +:1071400009001008090202000800000040000800C1 +:10715000000808104008100005080500000000089D +:1071600000A0032011A04000418210000408050087 +:10717000100000000020410209842182030411094B +:1071800040A0A1000820210000020000000400042B +:10719000000010900000000005000804030000003B +:1071A00000050002000000000002000000000004D2 +:1071B00000090009841100110402004100000811B7 +:1071C00008000000828502000200044008008200DE +:1071D00040021005040840110800840000800000EF +:1071E000080082000400A000080084008205080551 +:1071F0002000000000910840831020204020400023 +:107200008400A00240411002000000409008842049 +:1072100000050020000010110200200900000004F9 +:10722000008400880000000400200000002000000E +:1072300000000000000000C0000000000000080482 +:10724000080000080900202000000008008400C099 +:1072500003088001080000918008410000880404B0 +:1072600000000400001009000010030000000000EE +:10727000C100801000000008400202A108848000C4 +:10728000020000000089800002900000030041001D +:10729000000800A00000000002A000080208008210 +:1072A000000000000800000000000008400000414D +:1072B0000002000000800000000000008400882020 +:1072C000900000109003840000080808100040009F +:1072D00000218400000008001000080800080220B7 +:1072E00000040000820000004000820020008200B4 +:1072F000000884008211080482024080880040084F +:107300000400900082410102A0008200A000C000A1 +:107310008211C000080000050040000000000000CD +:10732000000004000040800000C0040400840088C5 +:107330002104030041840808082000080000000020 +:10734000000010C00000000040000000000000002D +:1073500085A000000000000000009008090100A1C5 +:107360008800030900000404038800004020000096 +:1073700003000009089020000921200020080200D5 +:107380000802400000080800404105041190210057 +:10739000102040002100084000000400000004907C +:1073A0000000080041000080002088090041002101 +:1073B0000009000000080011000000000811000290 +:1073C000000001000000C0032000000900210000AF +:1073D000000010211010000000020021C000000079 +:1073E00000002004A00000008200C000080002008D +:1073F000820000410021C00020218208C1088205CE +:107400000000A0008208900484000005090202091F +:1074100000009004080000000005000800000000C3 +:107420004010000410030000002021000000210093 +:107430000000000020000910000000000000000013 +:10744000020000004090000000000000000000006A +:1074500004000040000800000200030100002000BA +:10746000000000C08000000000000000000080005C +:10747000000021000000000021008908080020828F +:10748000000000000000004000000000000040017B +:1074900080000000000800000000080000000084D8 +:1074A0000008000411900090020040C0001000028B +:1074B000089000000000000000000000880082002A +:1074C0000000000121000801000000000000000091 +:1074D0000000400000000400080040C01141820884 +:1074E00088110000000141000000000000000000C1 +:1074F0000000020084C10005000582A040A10183B4 +:10750000200910044121C0210884100900A10300B2 +:1075100082A10091000100000001000082A0000291 +:10752000400202C000000000000000000080008057 +:1075300000008080000000000000000000009000BB +:107540008000000002080211910300090000000001 +:1075500000000000800005000000000040838388D8 +:10756000802000A004200302C108000800000000E1 +:1075700000000000800011C100080011002085C13A +:10758000048341C00089A0020520804100C000C1E1 +:10759000A00000200009002000400010000820800A +:1075A000218000808000000000000000000000003A +:1075B000004000000000000000000000000000008B +:1075C00000000000000000802100410005210000B3 +:1075D000000080008080A0009000902008002080A3 +:1075E0000340059108824180404140044100000071 +:1075F0000000000000000000A000A100900088032F +:10760000118020112089410300002100030921037A +:1076100003802005200503210080000000000011E8 +:107620008000002180000000000000000000000039 +:1076300040004000404090000000000000C00000FA +:107640000000000000000000000801000000000130 +:10765000900010000200C00802000300A00001001A +:10766000010200000040008800100101002101001B +:1076700000000000000000000000082004000500D9 +:107680000900000200010091010200C00100002178 +:1076900001C1004000000088010100080000000056 +:1076A000000002004000A040840000000000000034 +:1076B000000040080040904021020000000000004F +:1076C00000000000000000010001000101000000B6 +:1076D00001000000000000000000000400030002A0 +:1076E00000C19009004101098588000001010001E5 +:1076F0000101000000880008000800C00890010295 +:10770000000801820809018200820205024100028C +:107710000302C011A0000000910010010000000051 +:1077200001000100089100830005880900000000A5 +:1077300000000000800000008000098000000000C0 +:107740000000000000000004004000410010401054 +:10775000041040100000000000000000008400023F +:1077600000410090800820202185C0A0000203086D +:1077700003081041000000000080008000000000AD +:107780001180118009800020408220C183C185883A +:10779000401105C085080020410540038004000019 +:1077A0002000050002008040000800880021000041 +:1077B000000000000000801000A180808000000018 +:1077C00000000000000020020200080011004190AB +:1077D0002100110020080003009000800000000438 +:1077E000008000800020410080002111000503A1DD +:1077F0000021000040020000000000000000000026 +:1078000004A1212108800808C110A0108200840270 +:10781000C0A1C0044100100341800905A10003403C +:1078200021000300080011008040008080008000DB +:10783000000000000000000002002010028482000E +:10784000C000A000880082000101000001000000CB +:1078500001A000000000000100000021000800005D +:1078600000890008000800000990A0001101A00094 +:1078700020039000A00009000000000000000000AC +:1078800000000005004100840101C1880200910050 +:107890002000C1C1A0012000010109C00400A10015 +:1078A00089000100000001000000C001880440A020 +:1078B000A000000000000000000000000000070021 +:1078C00000000000000000000000810000E0000057 +:1078D0000000000000E000000000000000000700C1 +:1078E0000000000000000000000000000000070091 +:1078F0000000000000E000006081000000000000C7 +:1079000000000000000000E000000000000000E0B7 +:1079100007000000000000000000504100000000CF +:1079200000006000000000000000000000000000F7 +:10793000000000000000000000000000FC3CFD7D95 +:10794000FF30303080FD00FF00000000000000002C +:107950000000000000000000000000000000000027 +:10796000000000000000000003835050FF3E3E3E38 +:10797000FBF3FAF0AAAFEBAF00000000000000003C +:1079800000000F000F0300000000555500550F5573 +:1079900000C341F1FFFF000A00AAFF05C3C30C0C9E +:1079A0000A0A0000000000000000000000000505B9 +:1079B000FA0AB4B414140000000000000000F00043 +:1079C000F555FFBABABA80FD00FF000000000000C4 +:1079D00000000000000000000000000000000000A7 +:1079E0000000000000000000000003D35050FF0A18 +:1079F0000A0AEBC3AA00000000000000000000001B +:107A0000000000000F0F0F03000000005555000498 +:107A10000F55FFC341F141F1000A00AAFFAFC3C3F4 +:107A2000000F000F00000000000000000000000038 +:107A30000505FB0BA0F5005500000000000000004C +:107A4000505082D72F2F282800000000000000008F +:107A50000000000000000000000000000000000026 +:107A6000000000000C0C5555000000001455145582 +:107A70000303A0AF000000000000000000000000B1 +:107A800000000000000000000000C0F0F0F0C000A6 +:107A9000C100053D053D000000000000AE500000A3 +:107AA0000000353535350000000000000000000002 +:107AB0000000D714D714E020E020000000000000F0 +:107AC0000000FAFA82D72FFF28FF00000000000014 +:107AD00000000000000000000000000000000000A6 +:107AE0000000000000000C0C3C0C0000000014051D +:107AF0001405F3F3A0AF0000000000000000000038 +:107B0000000000000000000000000000C0F000F0D5 +:107B1000C3C3C3C3053DFFFF000000000000AA501F +:107B200000000000F5F50505000000000000000061 +:107B3000000000000C0CCFCFC000F03000000000AF +:107B40000000000000005000000000008000000065 +:107B50000000000000610006C00C0000006100078A +:107B6000000D000000000008000000A500610006F4 +:107B7000009D000000615006000D000080600005BF :107B80000000000000000000000000000000006194 -:107B90000006000D000000610009000100A00000C7 -:107BA0000000000000008000000000000000000055 -:107BB00000000000000000610006000D0000000051 +:107B9000500400050000A000000100000000A061EA +:107BA0000006001D000000614006000D000000619D +:107BB0000006000D0000A0610006000D000000009E :107BC00000000000000000000000000000000000B5 -:107BD000000000FF00A500000000AA3CAA3C3C3CBD -:107BE0003C3C00F000F0000000000000000000003D -:107BF0000000000000000000000000000000000085 -:107C00000000000000000000000000000000000074 -:107C1000000000000000BC3CFBF40B04AAAAFF001B -:107C20000000000000000000000000000000000054 -:107C300000000000000000004169416900FF000FE2 +:107BD000000000000000FF3F00300AFA000041E111 +:107BE000EBEB3F3F550000000000000000000000EC +:107BF00000004551CFF3A0A000000FAA03AAC3C301 +:107C0000AAAA3C3C00FF00000000000000000000A9 +:107C1000FFFF05C7000000000F003CAAFFAAE1E13A +:107C200000C300C3141450143030F0F000030F0FE1 +:107C30000405000100000000000000008E008E001E :107C40000000000000000000000000000000000034 -:107C50000000000000FF00A500000000AA3CAA3CB4 -:107C6000FFFF000000F000F0000000000000000036 -:107C70000000000000000000000000000000000004 -:107C800000000000000000000000000000000000F4 -:107C900000000000000000003C3CFBF40B04AAAA1A -:107CA000FF000000000000000000000000000000D5 -:107CB000000000000000000000000333E3E3C3FF06 -:107CC000030F0000000000000000000000000000A2 -:107CD000000000000000000000000000000003039E -:107CE000D71400C300FF00002020000000000000A7 -:107CF0000000000000000000000000000000000084 -:107D00000000000000000000000000000000000073 -:107D1000000000000000000000000000FB38C70465 -:107D200000FF5A5A000000000000000000000000A0 -:107D3000000000000000000000000000B2B2B2B27B -:107D400050F090B0000000000000000000000000B3 +:107C50000000000000000000FF3F00300AFAAAAA5E +:107C600041E141413F3F55FF00000000000000009E +:107C700000000000CFF34551A0A05F5F0FAA00AA4B +:107C8000C3C3AAAA0F0F5555000000000000000052 +:107C9000000005C705C7000000000FFF3CAA550003 +:107CA000E1E155C35FC30000000030304000A0A0F8 +:107CB000AFAF0C0D08090000000000000000CF006D +:107CC0008E00000000000000000000000000000026 +:107CD00000000000000000000000000000000000A4 +:107CE0000000C200C2C20A0A00AA00000000000090 +:107CF00000000000000055555551FA0AFA0A80C0EC +:107D0000101000000000FF00F0F000000000000074 +:107D10000000000082BEC0C0FFFF053DF0F03C3C0B +:107D2000AAF03CFFF3ECFFECAAAFFFFF0F0FCACAAB +:107D300020000000AAAAAAAA00000000000000007B +:107D40000000000000000000000000000000000033 :107D50000000000000000000000000000000000023 -:107D60003F3FD71400C300FF0000200000000000C8 -:107D70000000000000000000000000000000000003 -:107D800000000000000000000000000000000000F3 -:107D90000000000000000000000000000000FF3CA8 -:107DA000C30000FF5A5A000000000000000000005D -:107DB00000000000000000000000000000008282BF -:107DC00082B2A0A090B000000000000000000000FF -:107DD0002000200002002000202000000000000001 -:107DE0001000040000000000200220210400100008 -:107DF00020024000880888008400000088020000FB -:107E00002000200000000000880004002000000383 -:107E10008400040020002000000088000000100002 -:107E20000003200000000000000000000000A0008F -:107E3000200020004000200000008800000000001A -:107E40008800000000008800000000000000000022 -:107E50000000000000000000000000010000000021 -:107E600000000002000010000000000109002000D6 -:107E700000000000000000000000004010000000B2 -:107E80000000000040002100000000000000000091 -:107E900000000000000000000000000000000000E2 -:107EA00000000000000000000000000000002000B2 -:107EB0002000000000004100000040000000100011 -:107EC0000000000000000000000000000000004072 -:107ED0000000400808080200000010000000000434 -:107EE00020008400004001000010088020100000E5 -:107EF0000100000020402000000000000000000001 -:107F000000000040004000400000000000000000B1 -:107F100000040000000000000000820000000000DB -:107F200000000800001000400000000000000040B9 -:107F30000000000000000000000000000000000041 -:107F400000000000000000000000C0000000000071 -:107F500000000004800080008010001080000000FD -:107F600000018000000000091000000880080001E6 -:107F70000084048400400008058800880000000098 -:107F80000000048200080084000000840002000851 -:107F90000000000900000010008800000084008438 -:107FA000000000000008000200820500000009082F -:107FB0000004000000080000004000000000000075 -:107FC000000000000084000000000000000000022B -:107FD0000000000000030080A000820800080400E8 -:107FE00008800080002000080003004000000441D9 -:107FF0000000040400110011000300000003002130 -:10800000000000030008000000000000400000081D -:1080100000000000000000000000000800200041F7 -:10802000000000000000000000000000000000054B -:108030000020400088000000000000000000000058 -:108040000000000000000000000000000000000030 -:10805000820000000000080800100000000000007E -:108060000000800200080040000040000084000280 -:10807000000000000000008800080300000000006D -:1080800000000000030000000000000000000000ED -:1080900000000000000000000000000000000500DB -:1080A00004000000000000000020000000000000AC -:1080B00000000000000000000000000003000000BD -:1080C0000000040004004000080000000000000060 -:1080D00000040090410004880300A1049020A188BE -:1080E0000808004000C0100940C0218008A0018499 -:1080F000821040400180C00090100000C0000020AD -:1081000000000800C0000000000000004000000067 -:108110000000A00008004000840000000800820069 -:1081200000000000820000000000001100090809A2 -:108130000000C0090040C00000000000C0000800AE -:10814000C00082008400C00000004000C009400060 -:1081500000008200000082008400A00010110011C5 -:10816000402120010001000400000003200800035A -:108170000441000100010208000000890000000025 -:1081800000000800000000000000000000000000E7 -:1081900000000000000000000000000000000000DF -:1081A00000000000000000000000000000002100AE -:1081B0000000210021000000000000000400000079 -:1081C0000900000020000000000000000000000086 -:1081D000000000200000000000000000000001007E -:1081E0000000000082410200018202002011001004 -:1081F00001008300100900080002A0000008000030 -:1082000000000800000000080800900400000000C2 -:108210000008000000000000000000000000000056 -:108220000000080000000000C00000000000820004 -:10823000000000000800000000000800000010001E -:108240000000A0000800080000000800C0000000B6 -:10825000000000008200000000110000000000008B -:1082600002000400098409000040104000040000DE -:1082700000012000400000004000000040000320FA -:1082800000000000000021000000000000000000CD -:108290000000000005A0000003000000080004002A -:1082A0000000000000000000000040000800000086 -:1082B00000000300000000000000040000000000B7 -:1082C000000000000000000000000000000000C0EE -:1082D00000000020088200000020000000000000D4 -:1082E00000C000004080C18090A00003000000207A -:1082F000018805808200080900A00021010801848E -:108300004180002000000009000982000000900068 -:108310008200C0008200000000000000A0000000F9 -:108320000000000000000000000000000800000045 -:108330008200080000000000000000000000C000F3 -:10834000000000040000000000000000C000C000A9 -:108350000000000082000000000084000000000017 -:1083600000000000000000020804021000900082DB -:1083700000010820404000004020000200002000D2 -:108380001021900400000000000000000000000028 -:1083900000000000000000000000000000000000DD -:1083A00000000000000000000000000000000000CD -:1083B000000000000000000000000000000011406C -:1083C00000000000000100000000000000000000AC -:1083D000000000020010000000000000000000008B -:1083E00000000000000001000000000008890100FA -:1083F0000000000390108801910100840202000037 -:1084000084000182C00000000000000000000000A5 -:108410000000000000000000A10000820000000039 -:10842000000000000000000000000000000000004C -:108430000000000000000000000000000004000038 -:10844000000000000000000000000000000000002C -:1084500001000000000000000000820000C00000D9 -:1084600000000000000000004109022100009041CE -:1084700004020021408804000005410800800080BB -:1084800000090005030900000000000000000000D2 -:108490000000000000000000000502000080000055 -:1084A00000000000000000000000000000000000CC -:1084B00000000000000000000000000540000080F7 -:1084C00000000000000000000000000000000000AC -:1084D00000004100000000000000000505000080D1 -:1084E0000000000000000000000002000403000083 -:1084F000000002404141000000408808000900419E -:1085000003009000204100C1800200000300000031 -:1085100000000000000000000000400020800080FB -:108520008000800000000000004000000000050006 -:1085300000000000000000000000000040000800F3 -:108540000080800000000000000000100000030018 -:10855000000000800000800000000000A00040003B -:1085600000800000800000000000004100000001C9 -:108570000088008801000101008800004003C0025B -:10858000000101204100C1010009080100000000B4 -:1085900000000000000000000000000091008802C0 -:1085A00000040400040000000000000100000000BE -:1085B000000000000000000000000000000091002A -:1085C000C090008404A040000000000000010000F2 -:1085D0000100000000C000002000000000000300B7 -:1085E000208800829000040000000000000100903C -:1085F0000000048200000000000000410400004070 -:10860000000188840100000000000100010000005A -:10861000000000000000000000000000000000401A -:108620000000A000000000000000000000000000AA -:10863000000000000000000000000000000000003A -:1086400000A000000000000000000000000000008A -:1086500000000000C000000000000000000000005A -:10866000009000000000000000000000000000007A -:1086700000000010118200000000000505851000B8 -:108680000090004011904100000000210309040007 -:1086900000000000000000000000000000000000DA -:1086A000008000000000000000000000000000004A -:1086B00000000000000000000000000000000000BA -:1086C00000000000000000000000000000000000AA -:1086D000000000000000800000000000000000001A -:1086E000000000000000000020000000000000006A -:1086F000000088028041800400002040000209C17F -:1087000005098311000080800000030500400080FF -:1087100004400003800000C10000000000000000D1 -:108720000000004100000004000000000000000004 -:108730000000000000008005008300000000000031 -:108740000000000000418000000200000000000066 -:10875000000000000000800000C1000000000000D8 -:108760000000000000C18000004000000000000088 -:10877000000000001190400140040000010084014D -:10878000028300400882000240C000000000000197 -:10879000908400A0000020000040000000000000C5 -:1087A00000000000008388000001000000000000BD -:1087B0000000000000000000040000830000000032 -:1087C00000000000000000A1020000010000000005 -:1087D0000000000000000000400000C10000000098 -:1087E0000000000000000003820000000000000004 -:1087F0000000000000000000000000004800000031 -:10880000000000004842821200E0070060420000C1 -:1088100000000000484200000000000000000000CE -:10882000000000000000810000E00000480000009F +:107D600000000000FA00FAFAFFFFFFFF0000000029 +:107D7000000000000000000055555555FA0ACFCF0D +:107D8000808010100C040C34C3C3AAAA00000000A9 +:107D900000000000000082BEFCFC053D053D00FF28 +:107DA0005555AAF03C00F3EFFFEF000555550000D4 +:107DB000CACA00000000F0FFF03C00000000000014 +:107DC0000000000000000000000000000000200093 +:107DD0002000200000000000000020111000048896 +:107DE0001100200082802100C000000220802000BD +:107DF000040004008400000088002000200020000F +:107E0000004102402000200020008900218300035F +:107E10000011900004008400840000022003040884 +:107E2000840288040400C00020008805028011C17B +:107E300004030000400004022000080088008800BD +:107E400040004000200088008200200021002180A6 +:107E5000090000A01000000000A0200040C00000A9 +:107E60004004C00040000010020010000000100498 +:107E7000000041002000000004A0000000A040001D +:107E800040002000000240001000000010004008E8 +:107E90000000200040000090200000001090090029 +:107EA0001000400010020002040000002000400802 +:107EB000A002000000C004900800400200C0009032 +:107EC0000420000200C000002000204040001020DC +:107ED0009002000000000000A0000004000000006C +:107EE00000000000820005000000000000000120EA +:107EF0000000080000000000040000000000000076 +:107F0000000900000000000000100000080002004E +:107F1000000000000000000002000000000000005F +:107F20000010001000000009000002000000040022 +:107F30000400040000000200000000000000000037 +:107F40000202000000000000844002000000000067 +:107F500004000400001000000010030000100000E6 +:107F60000082008800840008200811000000000042 +:107F7000100010100000000002000900004000087E +:107F800000000004000804040088008804C000C049 +:107F90000004001000000408000000000082000837 +:107FA0000010000803000910040800040000000885 +:107FB00000000000050805020084000000000088A1 +:107FC0000000000805080000040400000400008808 +:107FD000008200040008900900000241900000089F +:107FE0000408901000080500050085008203880041 +:107FF00021000100000800050000840000000005C9 +:1080000000218200A0020003000884080000020092 +:108010000005000901080000402100088803040051 +:1080200084001021840340008821A0008200000009 +:108030001000840282094008900808088800200087 +:10804000840082404000000900008408C000100045 +:10805000C002A0219003000200000000410000A027 +:10806000004000000000080002880400040000082E +:108070002004A00008000000110800A00510002046 +:108080000540020041004000419010200300030021 +:108090000000000000A0200000000300030000001A +:1080A000090005004100030000400800030008002B +:1080B0000382098804A00408080011901020008899 +:1080C0001188410021000090000005080890000080 +:1080D0004100000000000000050000040000000056 +:1080E000A00000000009000900210100004000403C +:1080F000A0400000400084001104000008408400FB +:10810000824000002000A000400090008200000497 +:10811000020000008200400082000000020008000F +:108120008404A0000000820084041041A00290009A +:1081300000000010C000104108048400000000008E +:108140000004080500000000000000000000080412 +:10815000002000000000004100000200000000902C +:1081600000000000000000000020030020000000CC +:10817000200000000000C1002100C0011000040028 +:1081800021C00000400000400090000000000000FE +:10819000000041000002000000000000000010008C +:1081A000400000000010020000000000110000006C +:1081B00000A000402000000000000000400400007B +:1081C00003880000020000000000000000400008DA +:1081D0000200000000881100002020001040004133 +:1081E0000000000000050000880040000000A00022 +:1081F000400004040000000001000008000000210D +:1082000000000000840090001000000000100040FA +:108210000000000000000005000000000041000018 +:108220000010000008000000A00000050000000091 +:1082300000401020000300009000000300200021F7 +:1082400002038400000000008200000508001008FE +:108250000000C00300000000001000000000000546 +:10826000000000004000000000000000001000A01E +:10827000008800000400000404080808000011C081 +:108280000000042000000508200000202000040455 +:1082900011900010000400000000090021A004104B +:1082A000000000000002004000040004090000C0BB +:1082B0000840040000C000001100409004040500C4 +:1082C0000320000403000890412000000500210065 +:1082D0004140009000004004218809000020000077 +:1082E000000000400040000900408800000000003D +:1082F000101000000000400000000000000002001C +:108300000000000300412021841000080000000844 +:1083100000000040000008099040000800038200AF +:108320001000000002400010A000820004000800BD +:10833000000800000000001100000800000800080C +:108340000000004100009000101000020000000535 +:1083500000000804000008100008000500080008DC +:1083600000080021000000000004000000000000E0 +:1083700020100040200000008000000000200000CD +:1083800000001000000000000000200000000000BD +:1083900000000900110000000000000000000000C3 +:1083A00000000000000000000000000000200002AB +:1083B0000040000000C01188034000004000204041 +:1083C000000000004090000020020000200000009B +:1083D00000000000410000004000200010000000EC +:1083E00000900000200000000000000000000000DD +:1083F0000000000000000001010000C000000000BB +:1084000000010110C000000000000000000000009A +:1084100000000000018200000900001082820000BC +:10842000000000010000000000000000000000014A +:108430000000000000000140010000000084C008AE +:10844000000000000001000000000000000000002B +:108450000000000000010008000100000002C0C090 +:10846000000000000001000000000000000000000B +:108470000000000000000000001008000080000064 +:108480000009000805800000000000000000000452 +:10849000000000000011200000098800008080809A +:1084A000000000000041000000000000000000008B +:1084B00000040000000000110800410902000080D3 +:1084C00000800000000000410000000000000000EB +:1084D0000004000000000040028000401100000085 +:1084E000000000000000004100000000100000003B +:1084F0000000000000000000000083008000000079 +:108500000000C100840800040020000041000009B0 +:108510000000000004000000020004001000000041 +:1085200003008000000000028040000000004100C5 +:10853000000900000000040000000200110010000B +:108540000000208080000000001080410000090031 +:10855000000000000000020000000200C1000480D2 +:108560000004040000000000000080400000010042 +:1085700000000000000000000000000010000220C9 +:10858000000000000200090100000085000000005A +:10859000000000000000000000000000030002884E +:1085A00000000100400000000000C00100000000C9 +:1085B00000000000000000000000000000000200B9 +:1085C000028800000102400000000000C00100001D +:1085D0000000000000000000000000000000080093 +:1085E000020800000000020000000000C0010000BE +:1085F000000000000000000000000000000000205B +:10860000000000000000000000000000000000006A +:10861000000008000000000000000000C00000048E +:108620000000010000000000000000010000000048 +:108630000000000008000000000000000001100021 +:108640000004000000000000000000000001000025 +:108650000000000000000000000000000000040115 +:1086600000100000080000000000000000010000F1 +:1086700000000000000000000000000000000000FA +:1086800000000000000000000000000241000000A7 +:1086900000000000800000000000000000098009C8 +:1086A0000000000041000000000000000041000048 +:1086B000000000000000800000000000000000201A +:1086C0000005000000004100000000000000004123 +:1086D0000000000000000000000000000000001189 +:1086E00010030000000084000000000000000041B2 +:1086F00000000010800000C1000000000000000029 +:108700000000004100000000000020020000808006 +:10871000108200008000008900000000000082003C +:108720000000004100000002000000000004000002 +:108730000305000000008000008900000040800068 +:108740008200000000848040000300000000000060 +:10875000000005C000008000009100000000001033 +:108760008500000000C1000000080000000000209B +:108770000000034000012000004000000000000055 +:1087800000000000009190000000000001000000C7 +:1087900002080008000040000008000000008400FB +:1087A00005000000000902000000000000000000B9 +:1087B00000000184000000004000000800000000EC +:1087C0002000050000000011080100010000000069 +:1087D0000000000000080000080000100000000079 +:1087E000020009000000004102000001000000003A +:1087F00000010000018300000000000000000000F4 +:10880000000000000000810000E0000048000000BF +:108810000000000000000000000000000000000058 +:10882000000000000082811200E0070048110000F3 :108830000000000000000000000000000000000038 -:108840000000000000000000810000E0000048007F -:1088500000000000000000000000000000000042D6 -:108860000000000000004800810000E00000480017 -:1088700000000000000000420000000000000000B6 +:108840000000000000000000881200E0070048005F +:108850000000000000000012000000000000000006 +:108860000000000000000000811200E00700480046 +:1088700000000000000000000000000000000000F8 :1088800000000000000000000000000000000000E8 :1088900000000000000000000000000000000000D8 :1088A00000000000000000000000000000000000C8 @@ -104623,455 +104623,455 @@ :108940000000000000000000000000000000000027 :108950000000000000000000000000000000000017 :108960000000000000000000000000000000000007 -:10897000000000000000000000000000252B0000A7 +:10897000000000000000000000000000747B000008 :1089800000000000000000000000000000000000E7 -:1089900000000000000000000000D4A4747B000070 +:1089900000000000000000000000DE2E757B0000DB :1089A00000000000000000000000000000000000C7 -:1089B00000000000000000000000DE2E0000747BBC +:1089B00000000000000000000000DEAE0000757B3B :1089C00000000000000000000000000000000000A7 -:1089D000000000000000000000000000DE2E747B9C +:1089D000000000000000000000000000DEAE757B1B :1089E0000000000000000000000000000000000087 -:1089F000000000000000000000000000DE2E60DE2D -:108A000003400000000000000230000000000000F1 -:108A100000000C4000000000000002C07B06615610 +:1089F000000000000000000000000000DEAE615E2C +:108A000003400000000000000231E0000000000010 +:108A100000000C4000000000000002C07A866126C1 :108A200003400000000000000230A0000000000031 -:108A300000000C4000000000000002C06A86000038 -:108A4000615603400000000000000230A00000005A -:108A5000000000000C4000000000000002C06A8618 -:108A6000615603400000000000000231E0000000F9 -:108A7000000000000C4000000000000002C06A86F8 -:108A8000000000090000000000400000C0000004D9 -:108A900000000000000020000000C00004000000F2 -:108AA00000000000000000000000000088008402B8 -:108AB0000000000000002000000020000000000076 -:108AC0000002000000000400000000000008000098 -:108AD0002000000000020000000000000000000074 -:108AE00000000002000000000000000088200410C8 -:108AF0000000000000000000000000000000000076 -:108B00000000000000000000020000000000000063 -:108B1000000000004000000000000000090000000C -:108B20000000000000000002000010000000000033 -:108B300000000000000000000000400000000400F1 -:108B40000000000000000000000000000000000025 -:108B50000000000000000000000000000000000015 -:108B60000000000000000000000000000000009174 -:108B700000010000000000000000000000000000F4 -:108B80000000000000000000000000008400000061 -:108B900084000010020082000000408900000000F4 -:108BA000002182400000840000000000000000005E -:108BB0000000000000410000000000000000000074 -:108BC000020800000000000000000000001000008B -:108BD000000000000000000000000000200008204D -:108BE0000820849004100010000020000000000005 -:108BF000020008000021000000000000000000004A -:108C0000000000000000000000000000001000084C -:108C100000000000020900000000000080100008B1 -:108C2000000000000000000000000000000800023A -:108C30000000000000400084001000080008000848 -:108C40000008009000000000000000000000000884 -:108C50000000008400000000000000080090008474 -:108C600085118003002185010004000000000082BE -:108C70000000000280000000000000020000000070 -:108C800000000008000000000000000004000008D0 -:108C9000880010000000000000000000900090001C -:108CA00040000020000800114000400000000000CB -:108CB000000000000000000040000008000000006C -:108CC0000400000040000000000000080000000058 -:108CD0000000000000000000000000000000000094 -:108CE0000400080000080800080000000000000060 -:108CF0000010000000020041040504000000000014 -:108D000000004000000040100010000000000000C3 -:108D10000000000000A000A01100000000840090EE -:108D20000020008400000082004000000084000059 -:108D300000000000410008000000000000000000EA -:108D400011400000000008000000000000000000CA -:108D50000000000000000000000000000000000013 -:108D600000000000809000109100800011000000C1 -:108D700000000000000003000000080000000000E8 -:108D80004000000000000000000000000011000989 -:108D9000001100110011C011000008040000004182 -:108DA000000000800011000908040011000000000C -:108DB00000000000000000000000000000000000B3 -:108DC0000000000000000000000000000000A00003 -:108DD0000000000000000400000008000000000087 -:108DE0000000000000000000080000009000A0004B -:108DF0000000000000000000000000000000000073 -:108E00000000000000000000000000000000100052 -:108E10000000000000000082009011002000090006 -:108E2000110000002002000000000400000000000B -:108E300000000000000000004100000000000000F1 -:108E40000000000000000000000000000000000022 -:108E50000000000000000000000000000000000012 -:108E60000000000000000000000000000000000002 -:108E700000000000000000000000000000000000F2 -:108E800000000000000000000000000000000000E2 -:108E90000000002008000000200082000000000008 -:108EA00000000000000000080000000001000800B1 -:108EB00000000021C0000000000000000000004091 -:108EC00000000000000000000000000000000000A2 -:108ED0000000000000000000000000000000000092 -:108EE0000000000000000000000000000100000081 -:108EF00000000000000000008403000000000021CA -:108F00000000000000000000001000000000000051 -:108F100000001102040209101120008400000888DA -:108F200000A0112000080008102000020000080026 -:108F3000030009000000000002000000000000889B -:108F40000000000000880088080000000000000009 -:108F50000000000000000000000000000000000011 -:108F600000000000030000000000080000000800EE -:108F700003000000000000000000000000000000EE -:108F80000000000000000004210009004000000073 -:108F900000000004000000000000000220000000AB -:108FA000000020000008000000000000000200088F -:108FB0000020002000030000000000000000000866 -:108FC000000000000000000000000000840000001D -:108FD0000000000000000000000000000000000091 -:108FE00000000000000000000000000000008200FF -:108FF000000000000000000000000000400500002C -:10900000000004000021000000100000001000001B -:1090100000000000000000000000008800C02004E4 -:10902000109009C0200221000900000000901100EA -:10903000000011000000000000000000000000001F -:10904000000000000000000400000000000000001C -:109050000000000000000000000000000000000010 -:1090600000000000000020000000000000000000E0 -:109070000000000000A0110000000000000000003F -:1090800000000000000000000000000000000000E0 -:1090900000000000000000000000000000000000D0 -:1090A0000000000000000000080000900000A00286 -:1090B00000000000000000000000000000000000B0 -:1090C00000000000000000000000000000000000A0 +:108A300000000C4000000000000002C0648600003E +:108A4000612603400000000000000230A00000008A +:108A5000000000000C4000000000000002C064861E +:108A6000612603400000000000000230A00000006A +:108A7000000000000C4000000000000002C06486FE +:108A8000000000000004848000000400200040007A +:108A90000002100000008408080008000840C00020 +:108AA0000080844040002000C0002080C000208062 +:108AB00000000000C0048203200220000400880996 +:108AC000000300008800020004000400040000000D +:108AD00020008880880021044004880004000400ED +:108AE000200320002080830020110409008004005E +:108AF000821000000403000040002000200000005D +:108B00008800000000004140000200000000000852 +:108B10000800000000000002414080008902C101FD +:108B2000410000040000050405040000102040007E +:108B300000204002400000010008400240022040A6 +:108B4000058200000000000000040982050040A02A +:108B50000040000200044084049110400002C084E0 +:108B6000C0000000809090102002044020020020ED +:108B700021000005000200022102800010000040D8 +:108B8000400000000000002000000810020000006B +:108B90000000000002000800020001400100020085 +:108BA000021002800300000000404000000084002A +:108BB00000000000A0030000004100800000000051 +:108BC00000048840000000000005080002020200C6 +:108BD0000000004104410000080002000282010080 +:108BE0008200020004050200210021C102000008E9 +:108BF000000000900821000820040000000002008E +:108C00000280020000000000000102008040090410 +:108C100000400000020820008000800002010200E5 +:108C200000000501001020000088000082000010F4 +:108C3000090000080010000000000000020400000D +:108C400000100000040000000000000020080009DF +:108C500000040000020802840008000800C020048C +:108C6000080000088200001000048804A010110809 +:108C700000100000002080400004830900000282F0 +:108C8000000000022000000000000420000001009D +:108C9000400004000021A0000000000000000021AE +:108CA000000000000010010000001009880004030B +:108CB00000000004000004009000A000A000880054 +:108CC0000440000884000800000090088808A00301 +:108CD00004218821A0001009400000008421100018 +:108CE000094100054002840090039000C021041057 +:108CF00040408810900810008208040010400000D6 +:108D00000040900800000000A008000000010000E2 +:108D100008000200400004000000000010000902EA +:108D20000000000005004101088440000000000030 +:108D30000088000000000400000400000010000093 +:108D400000A000A0000009000000000005000000D5 +:108D5000090000840004002000002102000020001F +:108D6000404004840584080008000000040008084E +:108D70000200000002051000212000000000008217 +:108D8000000003C000C0000000000000000004203C +:108D900000100800C0008400000000000000000077 +:108DA0000004000900000800090008800004000019 +:108DB000000040000000000008000440000008001F +:108DC000A000080000000000100000000000880063 +:108DD000C0008200100004208400880000002000F1 +:108DE0008400822190000004000040001000002058 +:108DF0002004080941040000404000000808C000A9 +:108E0000080082002000000040040409080002005D +:108E1000A0012000A1000008000000A00000000444 +:108E200020002084030441000090400080020000E4 +:108E30000010008800001000004000000300000047 +:108E400000000008200000040000002000000000D6 +:108E500000000000410000848009409000000000F4 +:108E6000850041000000410005000000A000400016 +:108E7000110021000040200000102100002000000F +:108E8000201021000010200000000382000020209C +:108E900000048402001000210800000020082000C7 +:108EA00088008200C0008200000400000020000052 +:108EB0000000A000001000040000020000100000EC +:108EC00000084021000000000000000082000800AF +:108ED0000000000000000000000008000041080041 +:108EE00002000000400000040000001100400805DE +:108EF00000008200824082088280002108048240B3 +:108F000000000000A00000000000A0210400A0005C +:108F10008200020000080000080209000000002092 +:108F200000004000092000401000000400080084F8 +:108F300002100020000000000000000800000000F7 +:108F400000080400800800A00000080000000000E5 +:108F500000080000000010000300000020100000C6 +:108F600000000000009080080000032008040002B8 +:108F7000000009100904030040000004000800007C +:108F80000400000041022000000000080040000032 +:108F900000080400000000080010020300000000A8 +:108FA000000000000000C08000000280218020003E +:108FB000000401800000000000080008000082009A +:108FC00082000000002100000000000000000000FE +:108FD000042100000000000008000000080000005C +:108FE00008008800000800000000000020000221A6 +:108FF0000221000300030088C0001004100001409B +:1090000020000008000008200000090008000000FF +:109010000400901184000000020000000000009095 +:1090200020880240219000000010000080100810ED +:10903000000000C008100000000000002000000038 +:1090400000400000000000002000000003000800B5 +:1090500000000400000000000000000041000000CB +:10906000009000A0000000000000000000000008C8 +:10907000000000001100000021040440200540020F +:109080004000001000044010008803004000200051 +:109090000000400000000200A0109090040800882A +:1090A000000000000000000011C0001000A010022D +:1090B00002A00040A002201000000000900000006C +:1090C00002A0820200402010000000008400000086 :1090D0000000000000000000000000000000000090 -:1090E0000000000000000000000000000000000080 -:1090F0000000004000000002A0000000000000008E -:109100000000C0009000002004C00000000000002B -:10911000000000000000000000000000000000004F -:1091200000000000000000000000800000000000BF -:1091300000800000000000000000000000000000AF -:10914000000000000000000000000000000000001F +:1090E0000000000000000000000000A00004840355 +:1090F0008803000000000000000004A0029001109E +:1091000082000302902001030484000140009001CA +:1091100000010000840000000000838085800000C2 +:10912000000000000000000000001080000000802F +:109130000080918003000080000000000000040017 +:109140000000828000000080008000000500800098 :10915000000000000000000000000000000000000F -:1091600000000000000000000000000000000000FF -:1091700000000000000000000000000000000000EF -:10918000000000008000800000008000000000005F -:1091900000000000000000000000000000000000CF -:1091A000000000000000000000000000800000003F -:1091B00080008000000000000000000000000000AF -:1091C000000000000000000000000000000000009F -:1091D000000000000000000000000000000000008F -:1091E000000000000000000000000000000000007F -:1091F00000000000000000000003000080000000EC -:10920000000000000000800000118000000000004D -:10921000000000000000000000000000000000004E -:10922000000000000000840004000400840002002C -:109230000800A0000800000000000000000000007E -:10924000000000000000000000000000000000001E -:10925000000000000000000000000000000000000E +:10916000000000000000000000000000008920A0B6 +:1091700080A000A00000000000000000808000002F +:1091800040808000889180880988808200200010BB +:109190001020000400000000000000000000000893 +:1091A00080800000000000000000000000000008B7 +:1091B0008080000088000808108021000005000061 +:1091C0000000000000000002800080000280050016 +:1091D00008112090000000000000000000000000C6 +:1091E000000000000000000000000000000090806F +:1091F0002009A01120911000412004081000002037 +:1092000000080020000000000003008000000400AF +:10921000030020000310000000000000000308000D +:109220000000A08200000000000000000000880094 +:109230002000401020008800900109400900000033 +:1092400000000000000020001001A0828200014008 +:109250000000000101880000000000000000000084 :1092600000000000000000000000000000000000FE -:10927000000000000000000000009001000008A0B5 -:109280000000000000000000A00000008410820424 -:1092900000000000000000000000000000000000CE -:1092A00000000000000000000000000000000000BE -:1092B000000400A10083040400000000000000007E -:1092C000000000000000000000000000000000009E -:1092D000000000000000000000000000000000008E -:1092E000000000000000000000000000000000007E -:1092F00000000000000000000000881000000002D4 -:109300000088000000000000000000C00002029081 -:1093100000A00000000000000000000000000000AD -:10932000000000000000000000000000000000003D -:109330000000008000040084808000000000000025 -:10934000000000000000000000000000000000001D -:10935000000000000000000000000000000000000D -:1093600000000000000000000000000000000000FD -:10937000000000000000000000000000008000006D -:10938000000000000000000000000000000000805D -:10939000000002800000000000000000000000004B -:1093A00000000000000000000000000000000000BD -:1093B00000000000002000A100800000000000006C -:1093C000000000000000000000000000000000009D -:1093D000000000000000000000000000000000008D +:109270001140080009019188010000C0004101006F +:1092800000010001008900000200100008820800AF +:109290000084000000000100000800000000000140 +:1092A000402000210808822100000000000000008A +:1092B00000000002000811888240002000201008F1 +:1092C000000000000001000108200082008400026C +:1092D000000000010000000100000000000000008C +:1092E0000000000000000001000000000000040079 +:1092F000000002A001A10209100900000000840082 +:109300000100080804A010000082900800020184F7 +:1093100083A0000101010001000100000000000025 +:1093200000008005000800108040000000000000E0 +:10933000000000000000008009000020000500037C +:1093400080050000000800200004800000000000EC +:10935000008000040003000910200000000000004D +:109360000000000000200002001000094100000081 +:1093700000000000802008C0418882020000000038 +:109380008000200000808080800004000080088031 +:1093900010809080002020100921000400000000AF +:1093A000000000000000002000800000000000001D +:1093B00000000000000000098080000080800000A4 +:1093C000000080100000000000000000000000A06D +:1093D0000000000041001000050011030000000023 :1093E000000000000000000000000000000000007D -:1093F000000000000000000000000000000000006D -:10940000004000000000000000000000000080009C -:10941000808200000000000000000000000000004A -:10942000000000000000000000000000000000003C -:1094300000080020000000010021000800000000DA -:10944000000000000000000000000000000000001C -:10945000000000000000000000000000000000000C +:1093F000004000000000411040C1850011038000C2 +:109400000040000080020000800080000000800911 +:1094100000218000800021000404030003081010D4 +:109420002000410003008800109088021000000016 +:109430000000000000008800889182840800C010AD +:1094400002100490A0000000000000000000820054 +:109450002011889090000110000000000100000021 :1094600000000000000000000000000000000000FC -:1094700000000000000000000000000000000000EC -:109480000000028902A002000000000000000000AD -:10949000400082090440400000000000000000007D -:1094A00000000000000000000000000000000000BC +:1094700000000001000000008388101005C00100FA +:10948000C040900188000400100040000800100057 +:10949000C000A0900210020001880001010000013C +:1094A0000100010000000000004100000700000072 :1094B00000000000000000000000000000000000AC -:1094C000000000000000000000000000000000009C -:1094D000000000000000000000000000000000008C +:1094C0000000000000000000000000E000000000BC +:1094D0000000000007000000000000E000000000A5 :1094E000000000000000000000000000000000007C -:1094F000000000000000000000000000000000006C -:109500000000000000000700000000000000000054 -:1095100000000000000007008200000000000000C2 -:10952000000000000000000000000000000000003B -:109530000000000000000000000000000000010D1D -:10954000000C00000000000000000000000000000F -:10955000000000000000000000000000000000000B +:1094F00000000000000007000000000000E007007E +:1095000000000000000007000000000000E0000074 +:1095100000000000000007000000000000E0000064 +:109520000000000000000000000000000045303294 +:109530000000000000000000000000000000A0008B +:10954000AA0041000303000000000000000000002A +:1095500000000000003C10D300C300000000000029 :1095600000000000000000000000000000000000FB -:1095700000000000000000000000000000000000EB -:1095800000000000FFFFFFFF0000000000000000DF -:109590000000000010101040000100030000000057 -:1095A00000000000000000000000000000000000BB -:1095B00000000000000000000000000000000000AB -:1095C000010D030F0000000000000000000000007B -:1095D000000000000000000000000000000000008B +:10957000000000000000000000000000FF0F0000DD +:10958000C0C0FCFC0CFCFAFA000000000F0A0F0A35 +:10959000CBCBEBEBFF00C3C355F57DFD0000000016 +:1095A00000000000000000000000000000000100BA +:1095B0003032000000000000000000004D0CCF8E93 +:1095C00000000A0041C30303000100000000000086 +:1095D00000000000550F55001CDF0CCF00000000FC :1095E000000000000000000000000000000000007B -:1095F000000000000000000000000000000000006B -:109600000000000000000C3C0C3C3C003C3C000016 -:109610000000000000003C3C3CC3010103030000CB -:10962000000000000000000000000000000000003A -:1096300000000000000000000000C0C028EB41EB6B -:1096400041EB0004000500000000000000000000E5 -:10965000000000000000000000000000000000000A +:1095F0000000000000000000000000000000FF0F5D +:10960000FF0FC0FFFCFF0CFC0A0A00000000150A57 +:10961000010ACBCBC3C355550F0F00F03CFC000033 +:109620000000000000000000000000000000BF0F6C +:10963000BE0000000000000000000000000080D01C +:109640007020AAAAC3FF002A00AA0004000000009C +:10965000000000000000FFFF30FF1414C0C0000035 :1096600000000000000000000000000000000000FA :1096700000000000000000000000000000000000EA -:109680000000000000000000FFFF0000F5F5F5F508 -:1096900000000000000000000C0C0C0C000000009A +:1096800080808080FFFFFFFF0000000000000000DE +:10969000F0F0F0F0000000005F55DFD73C3CF0F048 :1096A00000000000000000000000000000000000BA -:1096B000000000000000000000000000FCFC28EB9F -:1096C00041EB41EB0004000F00000000000000002F -:1096D000000000000000000000000000000000008A +:1096B000FF0FFF0028AA28AA0000000000000000F9 +:1096C00080D070200A0A030F002000000000001064 +:1096D0000000000000000000FFFF3030FF00FF002E :1096E000000000000000000000000000000000007A :1096F000000000000000000000000000000000006A -:1097000000000000000000000000F0F00000F5F58F -:10971000000000000000000000000C0C0C0CFFAA70 -:10972000FF28000000000000000000000000000012 -:109730000000000000000000000000000000000029 -:10974000000000610006000D0000000000000000A5 -:109750000000000000000000000000000000000009 -:1097600000000000000000000000000000000000F9 -:1097700000000000000000000000000000000000E9 -:1097800000000000000000000000000000000008D1 -:1097900000000000000000000000000000000008C1 -:1097A00000000000000000000000000000000000B9 -:1097B00000000000000000000000000000000000A9 -:1097C00000000000000000000F000F00000000007B -:1097D0000000000000000000000000000000000089 -:1097E0000000000000000000000000000000000079 -:1097F0000000000000000000000000000000000069 -:109800000000000000000000000000000000000058 +:109700000000003CC3FFFFFF170000000000000046 +:109710000000FFFFFF00000000000F00CFC33C3C33 +:10972000FAF000000000000000000000000000004F +:10973000000000610036000D000000000000000085 +:1097400000008000500000000001A0610006001D24 +:10975000000000610007000D00000000000800008C +:109760000000006100060001000000000000000091 +:109770000000000000610006000D00000500000868 +:10978000000000000061000A00010000A0610A0E54 +:10979000050D000000610007000D0000A06100063B +:1097A000000D000000610005000D000000610006D2 +:1097B000000D000000000000C0C0FCFC0000000024 +:1097C0000000000000000000000000000000000099 +:1097D0000702D78200000000FA00FF050000000029 +:1097E00000000000A0A0C0CF003CF0FC0000000082 +:1097F00000000000000000000000C000FCFF0000AE +:10980000000000000000F0AA00C300F03CFC0000D3 :109810000000000000000000000000000000000048 -:109820000000000000000000000000000000000038 -:109830000000000000000000000000000000000028 -:10984000000000000000000000000F000F000000FA -:109850000000000000000000000000000000000008 -:1098600000000000000000000000000000000000F8 -:1098700000000000000000000000000000000000E8 -:1098800000000000000000000000000000000000D8 +:109820000000000000002D2D2D2D0CCF555500AA55 +:10983000FFAA000000000000000082BE82BE0000FF +:109840000000000000000000000000000000000018 +:1098500000000707D7D700000000FA00FF0500004E +:10986000000000000000AFAFC0CF557DF5FD000047 +:10987000000000000000000000000000C000FCFF2D +:109880000000000000000000F0AAFFC355F57DFDB8 :1098900000000000000000000000000000000000C8 -:1098A00000000000000000000000000000000000B8 -:1098B00000000000000000000000000000000000A8 +:1098A0000000000000000000FFFFFF000CCF555536 +:1098B000C3F0C3F000000000000000000000000042 :1098C0000000000000000000000000000000000098 :1098D0000000000000000000000000000000000088 -:1098E0000000000000000000000000000000000078 +:1098E000000000000000000000000000050505FF6A :1098F0000000000000000000000000000000000068 -:109900000000000000000000000000000000000057 -:109910000000000000000000000000000000000047 -:109920000000000000000000000000000000000037 -:109930000000000000000000000000000000000027 +:10990000000000000000000000003E3E3EFF05FF9A +:109910003DFF00000000E800EB0000000000000038 +:109920000000C341C341000000004D000C001717A8 +:1099300000FF000000000000000000000000000028 :109940000000000000000000000000000000000017 -:109950000000000000000000000000000000000007 -:1099600000000000000000000000000000000000F7 -:1099700000000000000000000000000000000000E7 -:1099800000000000000000000000000000000000D7 -:1099900000000000000000000000000000000000C7 -:1099A00000000000000000000000000000000000B7 -:1099B0000000000000000000000000002000000087 -:1099C000000402000000000000000003000000008E -:1099D0002000000800020005000000040000000054 -:1099E0008211200000000000000000000000840040 -:1099F0004000000000000000000004000003000020 -:109A0000000088000200000000000080100000003C -:109A10000000200000000000000000000000000026 -:109A20000200000000000000000400000000000030 -:109A30000000200000000000000000000000000402 -:109A400000000002410000000000000000000000D3 -:109A500000004100000200000000200000020000A1 -:109A600000024000000000000000000000000000B4 -:109A7000000000C000000000000000000000000026 -:109A80000000000000000000000000000020400076 -:109A90000000000040000000400000000000000046 -:109AA0000000000000000000000000000000200096 -:109AB00000000000000000000000000000000000A6 -:109AC0000000204040000804820000800080828066 -:109AD0000100089089000100000008400000840097 -:109AE0000800080000100000000000050000001041 -:109AF0000000000000000100000000400000000025 -:109B00000000001008000000200000000800008095 -:109B100082000000000000408240084008C00000B1 -:109B20000200020000000000200000000000000011 -:109B30000000000000000000000000000000000025 -:109B4000000000008088800000010200080402106C -:109B50000204040000410484040400048082009094 -:109B600000000000000000000000000800000000ED -:109B700000000000050004000402000200000000D4 -:109B8000000000000000090000000000008200004A -:109B900000200000030003004000008480008020BB -:109BA00002000000000000000400000004000000AB -:109BB00000000000030000000000000000000000A2 -:109BC000000000080000000000000000000000008D -:109BD0000000040088008800002000000808000041 -:109BE000C0008400000000000009000000000040E8 -:109BF000000802000000000000000420000000082F -:109C000000000000000000000000000000008800CC -:109C1000000000000000000008000000000000003C -:109C20000800004090000000000000000005000057 -:109C300000000400000000000000000000004000E0 -:109C4000000000000000000000004100400000A0F3 -:109C50000020000000200000410000010000800002 -:109C600000000000000000200000000000000000D4 -:109C7000000000000000040000000000800100005F -:109C800000000000000000000000000000000000D4 -:109C900000000000000000000000000000000000C4 -:109CA0000000800000000800000000000800000024 -:109CB000000000000000000800000002000000009A -:109CC00000000000000000000004000408048800F8 -:109CD000820300000000000000110140000200A00B -:109CE0000010000200000000000000000002000060 -:109CF0000000000000000000000088000840042070 -:109D00000000000000000000000000000000000053 -:109D10000000000000000120000000000000000022 -:109D20000000002000000000000000000000000013 -:109D30000000000000000000000000000000000023 -:109D400000000000000000000000400000000000D3 -:109D5000000000000000009011000000040002005C -:109D600040210005400000002188000000000002A2 -:109D70000000004000000040004000400090000053 -:109D8000800900000000000000000000000000004A -:109D9000000000000000000004010000008200003C -:109DA00000000000000100000000000000000000B2 -:109DB0000000000000000000000000004100410021 -:109DC0000000000000000000000000000400A000EF -:109DD00000000000000800008202000000090000EE -:109DE000000008A0000000000000000000000000CB -:109DF0000000000000000000A000000000000000C3 -:109E00000000000000000000000000000000000052 -:109E1000000008000000000000000000000000003A -:109E20000000000000000100000000000008000029 -:109E3000000000000000000004000400000000001A -:109E40000000000000000000000000000000000012 -:109E500004000000009000040000000005C00200A3 -:109E600000001120002100000000000000000000A0 -:109E700000000000050000000000000000200000BD -:109E8000000000040090000000000000000000003E -:109E900000000000000000000000000000000000C2 -:109EA00000000000000000000820008800200000E2 -:109EB0000000000000000000000011000000000091 -:109EC000000000000800000000000000000000008A -:109ED000C000000000210800000000000000000099 -:109EE000008000000080040000020000000000006C -:109EF0000800000020000021000000000000000019 -:109F00000000000000000000000000000000000051 -:109F1000000000008200000082000000000000003D -:109F20000000000000000000000000000000000031 -:109F30000000000000000000000000000000000021 -:109F40000010000000000000000000000000000001 -:109F50000000009000100000200003900004110495 -:109F60001100002000042020C000000011020000A9 -:109F7000200000000000040200002100000000009A -:109F800004000000090000000000000000000000C4 -:109F900000000000000000000000000000000000C1 -:109FA00000000000000000000000000000000000B1 -:109FB00000000000000000000000000000000000A1 -:109FC0000000000000000000000000000000000091 -:109FD0000000000001010100100100000420012127 -:109FE00041890041080800000010820000A0001014 -:109FF0000020000000000000000000000000000041 -:10A000000000000000000000000000000000000050 -:10A0100000000000000000000000000000008800B8 -:10A0200000000000C000000000000000000000A0D0 -:10A030000000008800000000000000000000000098 -:10A040000000000000000000000000000000000010 -:10A050000000000000001008412180080000881165 -:10A060001088C0A0002080000000000000000080D8 -:10A0700000000000000000000000000000000000E0 -:10A0800000000000000000000000000000000000D0 -:10A0900000000000000000000000000000000000C0 -:10A0A0000000000000008000000000000000000030 -:10A0B0000080000000000000000000000000000020 -:10A0C0000000000000000000000000000000000090 -:10A0D0000000000000000000020008001000034122 -:10A0E0002000081000000820000000008000000090 -:10A0F0000000000000000000000000000000000060 -:10A10000000000000000000000000000000000004F -:10A11000000000000000000000000000000000003F -:10A12000000000000000000000000000000000002F -:10A13000000000000000000000000000000000001F -:10A14000000000000000000000000000000000000F -:10A1500000000000000000000000010800000100F5 -:10A1600000010110010000C00001200090C0A0000B -:10A17000004000000000000000000000000000009F -:10A1800000000000000000000000880090000000B7 -:10A1900000000000000000000000000000000000BF -:10A1A00000000000000000000000000000000000AF -:10A1B000000000000000000000000000000000009F -:10A1C000000000000000000000000000000000008F -:10A1D000000000000000000000000000000000007F -:10A1E0000001010182100020010901890008000816 -:10A1F000208409A0400000000000C0000000000012 -:10A20000000000000000000000000000000000004E -:10A21000000000000000000000000000000000003E -:10A2200000000000000000900040900200040000C8 -:10A23000000000000000000000000000000000001E -:10A24000000000000000000000000000000000000E -:10A2500000000000000000000000000000000004FA -:10A2600008102021110800A01121052140830300BE -:10A2700000000080040000000000000080000000DA -:10A2800000000000000000000000000000000000CE -:10A2900000000000000000000000000000000000BE -:10A2A000000000000000000000000080800000802E -:10A2B000000000000000000000000000000000009E -:10A2C000000000000000000000000000000000008E -:10A2D000000000000000000000000000000000007E -:10A2E000210008112000030311211008880008052F -:10A2F000000000C00000000000000000000080001E -:10A30000000000000000000000000000000000004D -:10A3100000000040000000000000000000000000FD -:10A320000000000000000000000000000005000028 -:10A3300000000000000000000000000400210000F8 -:10A34000000000000000000000000000000000000D -:10A3500000000000000000000000000000000000FD -:10A3600000000120010100000100A041A100020045 -:10A37000A100000000A0000000000000000002009A -:10A3800008000000000000000000000000000000C5 -:10A39000000000000001002000000000000000009C -:10A3A00000000000000000000000000000000000AD -:10A3B0000000000000000000000000000001A000FC -:10A3C0000000C000000000000000000000000000CD -:10A3D000000000000000000000000000000000007D -:10A3E00000000000000000E000008406000000E023 -:10A3F0000000000000000000070000000000000056 -:10A400000000000600000000000000000000000046 -:10A41000000000000006000007000000000000002F -:10A420000000000000000000000000000000000626 -:10A4300000000700000A000000000000000000000B -:10A440000000070000000000000000000000000005 -:10A4500000000000000000000000000000000000FC -:10A460000000000000000000000000000000068165 -:10A470009F81F7FF0000000000000F0F9999303016 -:10A48000303000000000000000000000000000006C -:10A4900000000000000000000000000000000000BC +:109950000000000000003EFE02C200000000000007 +:1099600000000000000000000000000000003D3D7D +:109970003DFF0000000000000000000000000000AB +:109980000000000000000000000000000A0A0AFFBA +:1099900005053D3D00000000E80028000000000033 +:1099A000000000008280828A000000004D00CF008D +:1099B0003F3F00FF000000000000000040004000AA +:1099C0000200200000030000880040100000000496 +:1099D0002000A000200488000000080020002000D3 +:1099E00004000000000000000000880040000100AA +:1099F0000400080020050000C00020050003400905 +:109A00000408008002840080018000A08800880093 +:109A1000890001112000880084000000840284096C +:109A200090100082028000000300008040C000000F +:109A3000820000200000400884050000848320008C +:109A4000000040000000000000400000090102008A +:109A5000000000020000000040000002C0004000C2 +:109A600041000002400200000000002021004100EF +:109A7000080000008000008441C000004000000099 +:109A8000200040C10002000241400840051100844E +:109A9000000004A0040200824084009000004009FD +:109AA0000402044100118910000204020002400374 +:109AB0000020008200012020800000020000002021 +:109AC00000100000000000020000820000090000F9 +:109AD000080000000200004040008409900440009B +:109AE00002000200840002100200000000100002C8 +:109AF0000200000000410000A000000000109000E3 +:109B000000001000000902C1001000000100104018 +:109B100000400040000000008205020040000009F3 +:109B2000004002C002000010108084408440028087 +:109B30008480000002000400030000000108080007 +:109B4000010821010200000040850004000000001F +:109B50000040800000080084000080000000000039 +:109B6000801005000004000000000000000000015B +:109B70000001008402080208008400000000400088 +:109B8000000000008008000000020009048240403C +:109B900002840008040000082084020800048000F9 +:109BA000118400000011090000C080100084000929 +:109BB00000100402040000408300400800002082DE +:109BC0004008040400210000900000000021004033 +:109BD0009080901100080480008088408821044013 +:109BE0000000000000000000000800080021002123 +:109BF00000000800400020000000C0080021000212 +:109C000000080000000002034000000002021008EB +:109C100084000203C0200100002000000080C0007A +:109C20000000880890110040A08000080405000989 +:109C3000001108020403000000210421884000886C +:109C400000000021000000024084008800A0000005 +:109C500009A0001003900200081005040808000481 +:109C600000000040008203000040080408A000003B +:109C70000000080080000004000008000000030845 +:109C8000008400A000020000000085000000002108 +:109C90000900050000000021020009012100004028 +:109CA00000040008000000000000000200000002A4 +:109CB00000400000C10100820020000000080300F5 +:109CC000000211820088004000008400C000A02033 +:109CD0000000820000001000020082000000090065 +:109CE000C021000000094009001000000000000031 +:109CF0008200002184000000000002000800000033 +:109D00008200080010004010000040000810080009 +:109D1000000002000000C184080020004000A000F4 +:109D200003000200000482000880080008110010EF +:109D3000C000008000058241820008004000C00091 +:109D40000000400020000000040003880000000024 +:109D50004100110010000000080000000000200079 +:109D600082000000080041000800008500004188D2 +:109D700020000000000004A0000800C00000000057 +:109D800000000000000000849100000080004100FD +:109D900000000000800000004002208403900000CA +:109DA0004100C0000000410000040002008800885B +:109DB00000880200030200000090400000008000C4 +:109DC0000000000080000840008208C0C041000080 +:109DD00000000000000000001010C00000008241E0 +:109DE00082208200000200110000824000004041F9 +:109DF00000080000100010000000820000000000B9 +:109E0000C0000000000000028200040000004000CA +:109E1000820040004000C002000040048520000095 +:109E20000240C000000008030000A0000002000083 +:109E30000021000009400008400000080905000852 +:109E4000004000200000408000008241000000909F +:109E50004008008400A000840000000005004008C5 +:109E600040880008050002004020020000000008B1 +:109E70000300000800000090000021000020000006 +:109E800000000800020000A0100000000000000018 +:109E900084004100800080000000000080000491E8 +:109EA000080480880502099004200900082003881E +:109EB0000200000400040200000089080500088276 +:109EC0001184400200000000910200000000000028 +:109ED000200000000000020000000010104082047A +:109EE000000482400000102000210000000000005B +:109EF00000000000080000000008840088088400BA +:109F000000000000A0410800002100001000000037 +:109F1000000040800021840810000080020008A09A +:109F200000008200C00082400010000010210210DA +:109F30000021820082109000011100210003000323 +:109F40000040000020210000002100080000000067 +:109F500000000000000000C0000040000001000000 +:109F60000300000120000800200000000000400065 +:109F7000400003002000080004000000100800C09A +:109F800004000000000000000020000000000000AD +:109F90000000000080020000000080000040000877 +:109FA00080210800020000000000000103002140A1 +:109FB0000004040003000001000202900000000001 +:109FC00000000000000000C0000000000800024087 +:109FD000000000000000000084000000C0100840E5 +:109FE0000082C088C0C1908804030482C0030004BA +:109FF0008884A0C0000000000000000000000000F5 +:10A000008800880002C00088002082100000010043 +:10A010000400000000000000010005000001C1A0D4 +:10A0200002C100C082A0C0C08204008220020000E1 +:10A0300000018400000141C1882002A0828591C0F6 +:10A04000090501A082850000A000A0000000830196 +:10A0500004010000820000002000800000008080D9 +:10A0600080800080000089C00011831080808010F3 +:10A070000300009000050000000000000000000048 +:10A080000000000000008080000000000080000050 +:10A0900021008000000000000041411190110021CA +:10A0A00089888810000980A080800380008000805B +:10A0B0000005202080400021C0A009830085800287 +:10A0C00040A00388214080A10000000000000000A3 +:10A0D00002418004114180090000000300000000DB +:10A0E0000000804000020000A080912111808008C3 +:10A0F0008000000000000000000000200080000040 +:10A1000080000000000000000000800080000000CF +:10A11000000020001000102000001000100003209C +:10A1200041004180902108838808800000100000D1 +:10A13000000041009000080208899080A1202010B2 +:10A1400020211100090880800384200002002000E3 +:10A150002003000000008000000800000001000053 +:10A160000020A000080582A1C0821088820008A0FB +:10A17000042088008200C0008220000000000084CB +:10A180000040020010000000C000A0000400A00079 +:10A190001000009001000000010000000102890091 +:10A1A000000011002002020001029009A00002003C +:10A1B0009008000090400200010001104140110190 +:10A1C00003018901880008018840098801400100D5 +:10A1D0000000000120A00400A00082010000000196 +:10A1E0000000000005A0000884820408084000A1C7 +:10A1F00008C18921C041000208848985000000004F +:10A2000000000000004000000004008382080002FB +:10A210000084048800000000A0000001000100008C +:10A2200001014101000104110088410503C090C1F2 +:10A230000088008410C000000000000100000888B1 +:10A2400001030182A00240100000C004A0A1000090 +:10A2500000014001000000020182000400900000A3 +:10A2600000080000000988000080000085808091BF +:10A2700021850510112100880520009002100000A2 +:10A28000000000000000004000000010008300807B +:10A29000008000008080000300418009000200016E +:10A2A00000410320212111418008008021A104A048 +:10A2B000000800830088028000102110082100108F +:10A2C00080102040408480108008080905108040DC +:10A2D0000040004080210040000003800400100086 +:10A2E0000000000000000000002000C0808000800E +:10A2F00011881091850000040000002100800000FA +:10A3000000098000800000000000002000800000A4 +:10A3100000000000000000000200200020000805EE +:10A320000001410320802100204021C08021040041 +:10A330009005800480A18000800021020980040033 +:10A340002102418010111080880041051021080071 +:10A35000A003204040082100110421212091090080 +:10A360000000200000001000100020018283104037 +:10A3700004101002918310C00200000000030010BE +:10A380000000900020000800080000000002000803 +:10A390000000000000A00004000000000000010018 +:10A3A00001000001010000200184000011028288E8 +:10A3B0000308090010010810080008000103000448 +:10A3C0000010010021A040888408880091049000BA +:10A3D000028810000090010101000000010101202D +:10A3E000014000000000000000000000000000002C +:10A3F00007008400000000E0000081000000000071 +:10A4000000008100000000000000000000000000CB +:10A41000000000000000000000000000000000003C +:10A42000000000000000000000E00000420000000A +:10A43000000007006000000000000700820000002C +:10A44000000000000000000000000000000000000C +:10A4500000000700000000000000070000000000EE +:10A4600000E007000000C3C3C3C3000000000000F9 +:10A47000000000000000009900FCC303C3030000BB +:10A480000000F02600260000000000000000000090 +:10A49000000000FFC3FF00000000424242420000F3 :10A4A00000000000000000000000000000000000AC -:10A4B00000000000CBCBFFF3000000000000000014 -:10A4C000003C003C00000000000000000000000014 -:10A4D000000000000000000000000000000000007C -:10A4E000000000000000000000000000000000006C -:10A4F00006E79FE7F7FF000000000000C3C300FF6E -:10A50000303030300000000000000000000000008B -:10A51000000000000000000000000000000000003B +:10A4B000000DFF0D919180800F066F676F098181FC +:10A4C0000000000000000000F0F0F0F0667F0019CE +:10A4D0000F0FFFFF999999990000000000000000FC +:10A4E0000000000040004060C3C3F0F00000000026 +:10A4F00000000000000000000099000C9909FF0F07 +:10A5000000000000F0F600069999FCC00000000071 +:10A510000000000000FF003C00000000FF0FF00002 :10A52000000000000000000000000000000000002B -:10A53000000000000000FBFBFFF300000000000033 -:10A540000000003C003C0000000000000000000093 -:10A5500000000000000000000000000000000000FB -:10A5600000000000000000000000000000000000EB -:10A5700000000000000000000000000000000000DB +:10A530000000FFBDFFBD909900900F066F7F6F096F +:10A54000E7E70000000000000000FF3C003C66FF61 +:10A5500000090F000F1BFFFF3C000000000000007F +:10A56000000000000000D000D060000000000000EB +:10A57000000002102000008810840000000000008D :10A5800000000000000000000000000000000000CB :10A5900000000000000000000000000000000000BB :10A5A00000000000000000000000000000000000AB @@ -105079,494 +105079,494 @@ :10A5C000000000000000000000000000000000008B :10A5D000000000000000000000000000000000007B :10A5E000000000000000000000000000000000006B -:10A5F00000000000C3C3C303000000009999F0F0FD -:10A60000E0E7E0E7000000060000000000000000B6 -:10A61000000000000000000000000000000000003A -:10A620003F3F3F3F0000000000000000000000002E -:10A63000000000000000000000000000000000001A -:10A6400000000000000000000F0F000000000000EC -:10A6500000000000000000000000000000000000FA -:10A6600000000000000000000000000000000000EA -:10A67000000000000000FFFFFF0F0000000099999C -:10A68000F0F0E0E7E0E7000000000000000000005C -:10A6900000000000000000000000000000000000BA -:10A6A00000000000000000000000000000000000AA -:10A6B000000000000000000000000000000000009A -:10A6C000000000000000000000000F0F000000006C -:10A6D000000000000000000000000000000000007A -:10A6E000000000000000000000000000000000006A -:10A6F00000610004000900008061400500090000BD -:10A7000005000A08050000A100000000000000008C -:10A710000000000000000000000000000000000039 -:10A7200000000038000000000000000000000000F1 -:10A7300000000000000000000000000000380000E1 -:10A740000000000000000000000000000008000001 -:10A7500000000000000000000000000000000000F9 -:10A7600000000000000000000000000000000000E9 -:10A7700000003A3F30355F4F0F4F03FF03FFFF3CB0 -:10A78000FF080000000000000000000000000000C2 -:10A7900000000000000000000000000000000000B9 -:10A7A00000000000000000000000000000000000A9 -:10A7B0000000000000000000000000000000000099 -:10A7C0000000000000000000000000000000000089 -:10A7D0000000000000000000000000000000000079 -:10A7E0000000000000000000000000000000000069 -:10A7F000000000003C3C3C3C5040004003FF0BFF8D -:10A80000FF08FF080000000000000000000000003A -:10A810000000000000000000000000000000000038 -:10A820000000000000000000000000000000000028 -:10A830000000000000000000000000000000000018 -:10A840000000000000000000000000000000000008 -:10A8500000000000000000000000000000000000F8 -:10A8600000000000000000000000000000000000E8 -:10A870000000000000000F5F0F0AF5F7FFFF08C897 -:10A8800038F8D7D7D0D0000000000000000000004A -:10A8900000000000000000000000000000000000B8 +:10A5F00000000000000000000000000080804F40CC +:10A60000F9F9C3C30F0F00000000000000000000B4 +:10A610000000000000000000DBDB0000434300F00E +:10A6200000000CFF0000000000000000000000001F +:10A6300000000000909000000C18C0C00000909F27 +:10A64000FCFC18F018F0000000009191919166FF59 +:10A65000F0C3FFBF3C3C660FC3FFFF0FFF3F00008E +:10A6600000000000000000000000FF007F0000006C +:10A6700000000000000000000000000000008F80CB +:10A680004040F900C30081C381C33C3C3C3D000015 +:10A6900000000000000000000000F9F90000404048 +:10A6A00000F0000024E700000000000000000000AF +:10A6B000000000006F6FFFFF00003C3CC9C90909A2 +:10A6C000909F0C0C18F018F000000000F3F3F3F367 +:10A6D0006600F0C3C3020000660FC300F000F03054 +:10A6E0000000000000000000000000006F007F007C +:10A6F00000610006000D00000000000000000000E6 +:10A70000006150010011000000610006001D000002 +:10A71000000000000000000000610006000D0000C5 +:10A72000000050000000000000610006000D000065 +:10A73000000000610007000C00000061000E059D94 +:10A7400000A10061200E004D000100610006000D17 +:10A75000000000615006001D00008061200E000D09 +:10A7600000010061000E050D00000061000D000DEC +:10A770000000000000000000FFFF000000000000DB +:10A78000000000AA00F07C004000000000000E0263 +:10A790000F0300000000000000000000000082BE67 +:10A7A00000FF0000000000000000050CF5FC505008 +:10A7B00051550000550000D0FEFEFFAA55555555D5 +:10A7C000FF00C30000000000CF00CF00F0F0F0F069 +:10A7D0000F0F0F0FD250FAFA140CD7CF00C300C0DE +:10A7E000FFFFC3C37DC041C0EAEF4045F0F05050C9 +:10A7F00000000000000000005050FAFA00000000C5 +:10A800000000000000AA00007C00400000000000E2 +:10A810000E020C000000000000000000000000001C +:10A8200082BE00FF0000000000000000050C050CC7 +:10A83000505050540000550000D0020200AA0C0CE9 +:10A84000FFFFFFFFC3C300000000CFCFCFCFC3D7B0 +:10A85000FFFF82FF8282D2505050D7CFD7CF000067 +:10A8600000C0FC3CC0007DFC41FCEAEF4045F0F03C +:10A8700000FF0000000000000000000000000000D9 +:10A880000000000000000000F000404040400F0FBA +:10A890002D2D00000000000000000000000000005E :10A8A00000000000000000000000000000000000A8 -:10A8B0000000000000000000000000000000000098 -:10A8C0000000000000000000000000000000000088 -:10A8D0000000000000000000000000000000000078 -:10A8E0000000000000000000000000000000000068 -:10A8F0000000000000000000FFFF0000000000005A -:10A900000BCB3BFB0000000000000000000000003B -:10A910000000000000000000000000000000000037 +:10A8B000000000A000AF000040404040B0B03C00AD +:10A8C0000000030F40C340400000000000000000F3 +:10A8D0000038FFFAFF00FF00020A030F00000F3CE0 +:10A8E00000FFFFFFAAAAC3C300000000CFC38A82F3 +:10A8F00005050C0C00000000000000000000000036 +:10A9000000000000000000000050F05040434043B1 +:10A910000F0F2D2D000000000000000000000000BF :10A920000000000000000000000000000000000027 -:10A930000000000000000000000000000000000017 -:10A940000000000000000000000000000000000007 -:10A9500000000000000000000000000000000000F7 -:10A9600000000000000000000000000000000000E7 -:10A9700000000000000000000000000000000000D7 -:10A98000010000000000888020030000000000009B -:10A99000000088800000000084041000A000000077 -:10A9A0004000410000000000A0040000000000047E -:10A9B00010000000000000008804000300002000D8 -:10A9C0000000200400000000400000000000000023 -:10A9D00000002000000040000000200000000000F7 -:10A9E0000000000000000000000000000002000065 -:10A9F0000000000000800080000000000000408295 -:10AA000000404000000000000002000000000000C4 -:10AA100000000000000200000000000000900000A4 -:10AA2000000000900800000000020000000000008C -:10AA30000000000000020002000000000000000012 -:10AA40000000000000000000000000000000000006 -:10AA500000000000000000000000000000000000F6 -:10AA6000000000A0000000900000000000000000B6 -:10AA700000000000000000020004000200000200CC -:10AA80000000040000100000008005020400000027 -:10AA900002054000020000000280020000020000E7 -:10AAA00000009000000000000200080020000200EA -:10AAB000400000000000000402000000020200004C -:10AAC00000000080000000000800001000100800D6 -:10AAD000000202000000000000000000100008005A -:10AAE000000000000000000004000000000004005E -:10AAF0000000000000000000000020004080000274 -:10AB0000000002000084000800080020400100103E -:10AB100000040008808440000000001000040001D0 -:10AB200002080002000000080008008800000088F9 -:10AB3000000080020000000000000008000000008B -:10AB4000000020840040000000080088008400000D -:10AB500000000000000009000000000000080000E4 -:10AB60000000000000000000090800000090000044 -:10AB7000000000400000000000000000800480048D -:10AB8000000100030000000000050000000040007C -:10AB900000200000C00000030100A0000000000928 -:10ABA00001000400048800030021000200000009E5 -:10ABB00000008202000000000010000000000200FF -:10ABC000080000000000000000000000000000007D -:10ABD000000000000010000000000800000000203D -:10ABE0000000000000000000000000000000000065 -:10ABF0004000000000000000A00000008400008071 -:10AC000090000000058209000000400003000008D9 -:10AC100021000021009000000820408800000088EA -:10AC200000004000001000100000000000000000C4 -:10AC300000004000000100000000000000000000D3 -:10AC40000000800000000000000000000000000084 -:10AC5000000000000000000800000000800000006C -:10AC600000000000000000000000000000000000E4 -:10AC700000000000000000000000000000000000D4 -:10AC80000004000000008400C0040004000082A052 -:10AC900000004000200000410011020500020000F9 -:10ACA000000200001040C000000000000000000092 -:10ACB00000410000080000000040000000400000CB -:10ACC0000000004000000000000000000240000002 -:10ACD0000000000000000000000000000000C000B4 -:10ACE000000000000000000000000000000008005C -:10ACF0000000A000000000000000000000000000B4 -:10AD0000000000000000000008824090090041009F -:10AD100040022000A10020000000000080904001BF -:10AD2000218805000888040000C00000030009C055 -:10AD30000000000000000000000000000000000013 -:10AD40000000000000000000000000000000000003 -:10AD50000000000000000000000000400000400073 -:10AD600000000000000000000000000000000000E3 -:10AD700000000000000000000000000000000000D3 -:10AD80000000000000000000000000000000820041 -:10AD900084000020A0808200004184200000008008 -:10ADA0000102000004080000A009002100000000CA -:10ADB000000000000008000000000000000000008B +:10A930000000000000A000AF00000000C300B0B0A5 +:10A940003C00030F030F41414141000000000000A3 +:10A950000000FF38FFFA8383010182AAC3FFFFFFD3 +:10A96000FFFF3838FAFAFAFAC3C300000000FFF319 +:10A97000AAA20505000F00000000C0000000002092 +:10A9800021008800000000000010C08000000002CC +:10A990000002040910002040100004000000A04044 +:10A9A0008400A0000000000484002000C000840493 +:10A9B00000020002A000A000C00000030000000090 +:10A9C000200004008804020002080100200020008A +:10A9D00004040000100200800202840088000000CD +:10A9E000020402040200201120008400201002054D +:10A9F00000000240000000002004000400004000AD +:10AA0000000408024000000200400003000810009B +:10AA1000210300002100000010840000100010003D +:10AA200000900000400040C02140100000004000A5 +:10AA300000004101000040004008109000000000AC +:10AA4000400040044020400040004008080000A0B2 +:10AA5000000405000904C121400820000000000096 +:10AA600010840000000200000090100000040000AC +:10AA7000210200024002080000020008000200104B +:10AA800000000205080040080000020008000880DD +:10AA900002008200000040094000840540000200DE +:10AAA000030002000000210021002000111004001A +:10AAB0000010020902100000000400400200000023 +:10AAC00002000000000000048200000000040202F6 +:10AAD000000010000840000991000884048040052F +:10AAE0004000008082004000880000000400000058 +:10AAF000210001000010040000000004000000001C +:10AB00000009000800088008840800000000848410 +:10AB1000800800840000000080828000020084041D +:10AB20000084408200040004909090008484A0A0DF +:10AB3000008400840008040000840000000000027B +:10AB40000000000000400000008800000082008437 +:10AB5000048300000008800800081010800800101E +:10AB600082008000000200888000040002C000080B +:10AB7000000040004088000200880010000000082B +:10AB8000000884402002A003840582000409000814 +:10AB90000040400884080008000010882000900051 +:10ABA000C00208100002C0000008080000081008D9 +:10ABB00000082011000840000000000000210004EF +:10ABC0000021000000400008000800000041C0080B +:10ABD0000000202100004000C0009000400020053F +:10ABE0000088001000102000080088084008400578 +:10ABF0000202C0080008004088000008900000051C +:10AC000000210021000121A00082040003020000B5 +:10AC1000418805090082050000000300800821002A +:10AC2000000000000090090841100400030000002B +:10AC3000100000000084090021A010000008080096 +:10AC400008100000000008002184000003400000FC +:10AC500000000408080000A0020000000000000836 +:10AC6000C100001000A041A0000204900004402098 +:10AC700009A0418821A003A00002000800004000B4 +:10AC80001040000000000000000082101000A040F2 +:10AC90000005900084C000880000040040000840C7 +:10ACA00000000009A1400000000900000009004167 +:10ACB000000000080000000000000000A0001000DC +:10ACC0000000000000100000000088400000C000EC +:10ACD00000408800000000000200000000040000A6 +:10ACE00020000080911008202000000000000804CF +:10ACF000000000000800A004008005050405000015 +:10AD00000809200020000800050000000085001050 +:10AD1000000003002100000200020500008800007E +:10AD20000001004000C00800000000000300000017 +:10AD3000008800004111000004000000000800002D +:10AD4000000000080008000000000000000000C033 +:10AD5000000000000000009000000000000000C0A3 +:10AD60000000000000044000000000C000040000DB +:10AD700011000000000000000000000202000000BE +:10AD80000000210000000000000084008200040296 +:10AD900084408200204000030000900084400010A6 +:10ADA0000010001108000000080800020000000068 +:10ADB0000841000000000000000500200000000025 :10ADC000000008000000000000000000000000007B -:10ADD000000000000800000000000000000000006B -:10ADE0000000000000000000000000000000000063 -:10ADF0000000000000000000000000000000000053 -:10AE00000000820000000000000000000008082090 -:10AE10000020022003820802001004000500002028 -:10AE200000024000000000000000000000000000E0 -:10AE30000000002000C0000000000000040000002E -:10AE400000000000000000000000040000000000FE -:10AE500000000000000000000008000008000000E2 -:10AE6000000000000000000000000008009000004A -:10AE700000000000000000000004000000000000CE -:10AE80000000000000000000000000000000C00002 -:10AE900040080841400000208200000000088200B5 -:10AEA0000800081040002000000500044000C00019 -:10AEB00040090041000200000000000900000000FD -:10AEC0000000000000000000000000000000000082 -:10AED0000000000000400000000000000000000032 -:10AEE0000000000000000000000000000000000062 -:10AEF0000000080000000000000000000800000042 -:10AF00000000000000000800000000000000000039 -:10AF10002000000011002104030400000388110434 -:10AF20000000030000410002000000000002400297 -:10AF3000001040004100400000C021000800000057 -:10AF400000000040000000000000000000000800B9 -:10AF500000000000000000000000000000000000F1 -:10AF600000000000000003020200000000000000DA +:10ADD000040000100000000000002000000000003F +:10ADE00008100000108082400000880020400040D1 +:10ADF0000000840382020008822182000000000219 +:10AE0000000000000003A0410005820205000000D0 +:10AE100000080084058400020020004008040500AA +:10AE2000040820010004200209000840210000005D +:10AE30000000000004040000000000040000000006 +:10AE40000004000000880000210008000000040049 +:10AE50002120000008000200008800A002820400F7 +:10AE60000204058240002008200000400508000878 +:10AE70002010000804A04090404000080420212039 +:10AE800000000840000000000004030000C00800AB +:10AE9000200808000020000082000010002190021D +:10AEA0008409002002211000002101000008000098 +:10AEB000000000410020000000001000020400110A +:10AEC0000000402100080003040000000000000012 +:10AED0000000000000004000000000210000001001 +:10AEE0000800000002000000020000000000000056 +:10AEF0000000000400000400080000040203000039 +:10AF00004000082100000000A00002048804900016 +:10AF100000000000800400000000000000000000AD +:10AF20000000000000000000800000004000400021 +:10AF30000000000200000200040000000000000009 +:10AF400000000000000000000200000000000000FF +:10AF5000000000000000000000840000000000006D +:10AF600000000800000000000200000002000000D5 :10AF700000000000000000000000000000000000D1 -:10AF800000000000000000000000000008000000B9 -:10AF90000800000000000000000004A000C00091B4 -:10AFA000C0050200000000000100A0040020021102 -:10AFB000820200A00082009000C00000000000009B -:10AFC0000000000000010000000000000000000080 +:10AF800000000000000000000000000000000000C1 +:10AF900000000240008800002010A0C10120080924 +:10AFA000A00200000101A0000001020010008201C7 +:10AFB0008200000100008801000000010101820000 +:10AFC0000001000000001000000000000000000070 :10AFD0000000000000000000000000000000000071 -:10AFE0000000000000000000000000000000000061 -:10AFF0000000000000000000000000000000000051 -:10B00000000000000000000000000000000000013F -:10B0100021000000000000000000000080901040AF -:10B02000002000A18000000000004000C0A00088B7 -:10B0300000C0008800800000000000000000000048 -:10B0400000000000000000080000000000000000F8 +:10AFE00000000000100000000000880040A10105E2 +:10AFF00002C108C1000101010200000000000000C0 +:10B0000000000000009008890003104000000000CC +:10B01000000000008080000000000080838808C0DD +:10B0200000880088001110020040001080200511E7 +:10B030008003801000040211000200090041410356 +:10B0400002090002000000000000000000000000F3 :10B0500000000000000000000000000000000000F0 -:10B0600000000000000000000000000000000000E0 -:10B0700000000000000000000000000000000000D0 -:10B08000000000000000000000000000000020415F -:10B090002108101000000000000000000000000067 -:10B0A0000540800000000000850409000000000049 -:10B0B000A11080008404000000080080000000004F -:10B0C000000300000000000000000000000000007D -:10B0D00000008000000000000000000000000000F0 -:10B0E0000000000000000000000000000000000060 -:10B0F0000000000000000000000000000000000050 -:10B10000000000000000000000000000000000003F -:10B1100010001000031100000000000000000000FB -:10B1200000889000A0A0840088000801A008820088 -:10B1300090088500A09008010000000100080000B0 -:10B1400000000001000800400010000000000000A6 -:10B150000000000008004000000000009000000017 -:10B1600088000000000000000000000090000000C7 -:10B1700000000000000000000000000000000000CF -:10B1800000000000000000000000000000000000BF -:10B1900000000100000000010000000000000000AD -:10B1A00000000803014100C104090088002000A03C -:10B1B0000189844000050941A004400000002000EE -:10B1C000020000000000000000000000010001007B +:10B060000000000000008000000000000000858853 +:10B07000080941080008000821218020000800007C +:10B080000000000000000820000300908003000082 +:10B09000000000000000000000038021800000008C +:10B0A0008003800000002000210585004189050003 +:10B0B00088000200C1031000080002001021408037 +:10B0C00004002000414000000000000000000000DB +:10B0D0000000000000000000000000000000000070 +:10B0E00000000000000080000000000000000000E0 +:10B0F0000400020882904100050002002000201197 +:10B10000000000000000000080008021808000031B +:10B11000000000000000000020000200A011040058 +:10B1200082000800A040820088008900119011A0D0 +:10B13000908883004100098301A001000000000104 +:10B1400000C00000000001900000000000000000AE +:10B1500000000000000000000000000000000000EF +:10B16000000000009000A0000400C000400020008B +:10B170008200A1021000A00491000008010001005B +:10B1800000000000000000000000A0880200A008ED +:10B19000C0830000000000000000008200840084E2 +:10B1A00010C04091000200908840000000000000A4 +:10B1B0000000008900890002000200000101110165 +:10B1C000000000000000010100010000000100007B :10B1D000000000000000000000000000000000006F -:10B1E000000000000000000000000000000000005F -:10B1F000000000000000000000000000000000004F -:10B20000000000000000000000000000000000003E -:10B210000000000000010001000100010009001110 -:10B220000000000500880303092104040011000048 -:10B230000009024080800882A10480808000000014 -:10B2400000000000000000000000000000001000EE -:10B2500008000000000000000000000000000000E6 -:10B2600000000000000000000000000000000000DE -:10B2700000000000000000000000000000000000CE -:10B2800000000000000000000000000000000000BE -:10B290000000000000000002000209210008000078 -:10B2A0000000000000004000918405000300002021 -:10B2B0000080800000820802840040800508800031 -:10B2C00080000000800080000000000000002100DD -:10B2D000000020001000000000000000000000003E -:10B2E00000000000008000000000000000000000DE -:10B2F00000000000008000000000000000000000CE -:10B30000000000000000000000000000000000003D -:10B310000000000000000000000000000000052008 -:10B320000000000000000000A0400403090290009B -:10B330001001A020840804A0910021202004820193 -:10B34000040002000800040004002000A000A00087 -:10B350000100000000000000000000000088000064 -:10B3600000000000000000020000000000000000DB -:10B37000000000000040000200000000000000008B -:10B3800000000000000000000000000000000000BD -:10B39000000000000000000000000040000000006D +:10B1E00000000000000000010001000000100088C5 +:10B1F000008200A0004001081111A0110001000010 +:10B20000000100000000000000000000401000A04D +:10B210000400041000000000000000000000000016 +:10B2200000808980000821C02020800900110009C9 +:10B2300041080010008905834109200800410308E6 +:10B2400020214010000903021020004100000010DE +:10B2500000100005000000000000000000000000D9 +:10B260000000000000000003000200400002000097 +:10B270000000000000800091101183210041004077 +:10B2800020090321000000000000000000008000F1 +:10B29000118080000080000000000000000080009D +:10B2A0008000000000008002808000008000108983 +:10B2B00020008800100409090590040003032120E0 +:10B2C00021002000081041801100400002400000D1 +:10B2D000000000000000000000000000000000006E +:10B2E000000000000000000000000000000000005E +:10B2F00000000080000000001100111100009020EB +:10B3000010001100090010400000000000000000C3 +:10B310008802A18010002000000000000000000052 +:10B320000400A0901002C000100004A040400200E1 +:10B33000038911020288400101A1001000400001B0 +:10B34000010900000100010001C00000010000012E +:10B3500000000000000000000000000000000000ED +:10B3600000000000000000000000000000020020BB +:10B3700000000000000200A0000082200091048272 +:10B38000A100008800000000010100000000000092 +:10B390000000110108208804910000000000000056 :10B3A0000000000000000000000000000000070096 -:10B3B000000000000000000000000000000000008D -:10B3C000000000000000000000000000000000007D -:10B3D000000000000000000000000000000000006D +:10B3B0000000000000E000000000000000000000AD +:10B3C00000000000000000000000000000E000009D +:10B3D000600000000000000000000000000000000D :10B3E000000000000000000000000000000000005D -:10B3F000000000000000000000000000000000004D +:10B3F000000000000000000000000000000000E06D :10B40000000000000000000000000000000000003C -:10B41000000000000000000000000000000000E04C -:10B4200000000000000000000000000014141414CC -:10B430000000000053F0530087FF87AAFF7DABABED -:10B44000AAA0FFC3D70C140C0000000000000000ED +:10B41000000000000000000000000000000000002C +:10B420000000000000000000020255FF04000400BC +:10B43000DFDF00DF0C0F0C00000000000000000048 +:10B44000044504450000000000000000000000006A :10B4500000000000000000000000000000000000EC :10B4600000000000000000000000000000000000DC -:10B4700000000000000000000000000000000000CC -:10B4800000000000000000000000000000000000BC -:10B4900000000000000000000000000000000000AC -:10B4A0000000000000000000000000000000B414D4 -:10B4B000141475FF70F053FF530F87FF87AAFF7DA9 -:10B4C000BFBFAAA0FFFFD7CF14CF000000005000DD -:10B4D000400000000000000000000000000000002C +:10B4700000000000000000000000F5F5E1F53C3C94 +:10B480000808FF53555500000000000000000000B0 +:10B4900000000000000028F57DF50F0F03030000F9 +:10B4A000000000000000FFC3DFC300000000000038 +:10B4B0000400DFDFDFDF0A0F0A00000000000000E9 +:10B4C00000000404454500000000000000000000EA +:10B4D000000000000000000000000000000000006C :10B4E000000000000000000000000000000000005C -:10B4F000000000000000000000000000000000004C -:10B50000000000000000000000000000000000003B -:10B51000000000000000000000000000000000002B -:10B52000000000000000000000000000000000001B -:10B5300028FF00FF0FFF05FF0000000000C3F0AA76 -:10B540000AAAAAAA808000F0F0FFF0FF0000000025 +:10B4F000000000000000000000000000F5F5E1E1A0 +:10B500003C3C3838000055550000000000000000A9 +:10B51000000000000000000028A07DA0FFFFC3C3C2 +:10B520000000000000000000AA003C00BFFF3D7DBD +:10B5300000000F5504040454000000000000000443 +:10B5400000000000C3AAC0A000000000000000002E :10B5500000000000000000000000000000000000EB -:10B5600000000000FF0000000000000000000F0FBE -:10B570000000000000000000000000000000F5F5E1 -:10B58000F5F50000000000000000000000000000D1 -:10B5900000000000000000000000000000000000AB -:10B5A000000000000000000000000000000000009B -:10B5B000000038FF10FF00FF05FF00000000FFC380 -:10B5C000F0AA0282AAAA0000000000EB00280000F6 +:10B5600000000000000000000000000000000000DB +:10B570000000000000005000F0F000000000C2FADF +:10B58000F0F0C350C3FFA200A2A200000000000020 +:10B59000000000000000000000005FBE0ABEC10005 +:10B5A000F5000000000000000000AA003C008382BB +:10B5B0000100C0C00F550000005000000000000056 +:10B5C000000000000000C3FFC0F000000000000009 :10B5D000000000000000000000000000000000006B -:10B5E000000000000000FFFF00FF0000000000005E -:10B5F000000000000000000000000000000000004B -:10B60000A0A0A0A0000000000000000000000000BA -:10B61000000000000000000000000000000000002A -:10B6200000000000000000000000000000610006B3 -:10B63000000D00000061000E000D0000806100069A -:10B64000000D000000610006000D00000000000079 -:10B650000000000000000000000000000061000683 +:10B5E000000000000000000000000000000000005B +:10B5F00000000000000000005055F0F000000000C6 +:10B60000C2FAFFFFC350C3FFF300F3F300000000D2 +:10B610000000000000000000000000005F140A1499 +:10B62000C300FF0000000000000000000000000058 +:10B630000090000000612006000D00000060000680 +:10B64000000D000000610006001D00010061000601 +:10B65000000D000000000001000000000061000675 :10B66000000D0000000000000000000000000000CD -:10B6700000000000000100000000000000000000C9 -:10B6800000000000000000000000000000000000BA -:10B6900000000000000000000000000000000000AA -:10B6A000000000000000006100050005000000002F -:10B6B00000000F0F3C3CAAAAAAA200F0000C000058 -:10B6C00000003C003CFF08C838F8AAF0AAF00000CF -:10B6D0000000000000000000000000000000F0F08A -:10B6E000707000000000000000000000000000007A -:10B6F000000000000000000000000000000000004A -:10B700000000000000000000000000000000000039 -:10B710000000000000000000000000000000000029 -:10B720000000000000000000C3C3C3C30C0CAAAAA1 -:10B73000000000000F0F3C3CAAAAAAA20000000CC7 -:10B74000000000003C003CFF0BCB3BFBAAF0AAF042 -:10B7500000000000000000000000000000000000E9 -:10B76000F0F0707000000000000000000000000019 -:10B7700000000000000000000000000000000000C9 -:10B7800000000000000000000000000000000000B9 -:10B7900000000000000000000000000000000000A9 -:10B7A00000000000000000000000C3C3C3C3FFFF8F -:10B7B000F0FF0000000000000000ACAC0C0C00002A -:10B7C000000000000000AAF0AAF0FAF0F8F80F0F4D -:10B7D000AAAA000000000000000000000000000015 -:10B7E000000000AA00AA0000000000000000000005 +:10B6700000000000000000610006000D0000000056 +:10B6800000000000000000610005000C00000061E7 +:10B690000006000D00000000000000000000006136 +:10B6A0000006000D00010000000000000000000086 +:10B6B00000000000000000000000BF008300F0F068 +:10B6C000CF004175417500C3000F00000000F0AFCE +:10B6D000F0A000C300C0BE14AFAF00FFF0F0000048 +:10B6E0000000FF550F0500000000000000000000F2 +:10B6F0000000000000000000000000000003FCFF4C +:10B7000000000000000000003C553C00AFAF00F01E +:10B710000000507DF330F330000000000000000016 +:10B720000000000400000000000000000000000015 +:10B73000000000000000000000000000BC008000CD +:10B74000000000005555415500C300554D0CCF8EEB +:10B7500030AF30A00082003CBE1405053C3CAAAAD4 +:10B7600000000000FF550F05000000000000000071 +:10B7700000000000000000000000000000000003C6 +:10B78000FCFF00000000000000003C553C00A3A3AB +:10B7900000F0FFFF507DF3B2F3B2000000000000A4 +:10B7A0000000000000000000000000000000000099 +:10B7B0000000000000000000000000000000000089 +:10B7C0000000FFFF3F30FFC355550000AAAA050542 +:10B7D0003C3C0F550F55FFFA3CFAEBEBAF055555C6 +:10B7E000F0F0000000000000000000000000000079 :10B7F0000000000000000000000000000000000049 :10B800000000000000000000000000000000000038 -:10B810000000000000000000000000000000000028 -:10B8200000000000000000000000000000F000FF29 -:10B83000EF2FEF2F0000000000000000ACAC0CACBC -:10B840000F0F0F0F00000000AAF0AAF00A0008086E -:10B850000F0FAAAA00000000000000000000000076 -:10B860000000000055FF55FF000000000000000030 +:10B81000A0A00000024302430F0503010000000046 +:10B820000000000000100000000000000000000008 +:10B83000000000000000000000000000AAAA3C0F69 +:10B8400000000000F0F03F300C00000008A808A83D +:10B850000505FF003CFF3C00000000004141AF0532 +:10B8600000FF3C3C00000000000000000000000061 :10B8700000000000000000000000000000000000C8 :10B8800000000000000000000000000000000000B8 -:10B8900000000000000000000000000000000000A8 -:10B8A0000000000000000000000000000000F0F0B8 -:10B8B000FFFFE020E0200011000000000000000079 -:10B8C000000000002004A0024080C104208000008D -:10B8D00000000000000284000080A000042000049A -:10B8E00000000000204000000000400000000000B8 -:10B8F00000020004000000030000000000008800B7 -:10B900000000000000000000008004000000008033 -:10B910000000000000000000000000000400000023 -:10B920000000000000020000000000000000000015 -:10B9300000000010000000800082000000000020D5 -:10B940000000000000000002008500042083800445 -:10B950000000009000000082000000024000800112 -:10B960000000004000000005000000000000000092 -:10B9700000040000008241000000000000002020C0 -:10B980000000400000000040000200100000000025 -:10B990000010000200000000000000000000000095 -:10B9A0000002004000400000000000C00000000055 -:10B9B0000090000200910000001000004000080309 -:10B9C0000000840208200000002082800900851009 -:10B9D0000000900002000000040904100280020030 -:10B9E00001100000880000000000080000000000B6 -:10B9F0002080000000800000000000002000040003 -:10BA0000040800000800000000000205000000001B -:10BA10000000000082000400040004000400040090 -:10BA2000000000000000000004000000000008000A -:10BA30000400020004200000020004000000C1080D -:10BA4000C000040800010009000800090904A0085A -:10BA50002000030800040002040040100001001050 -:10BA6000000408850000100800840008000000821F -:10BA70002000411000000040000000820000008211 -:10BA800000000010200800880010000000080008D6 -:10BA9000000000000008000080008000809000008E -:10BAA0000000008200840000000000000008001078 -:10BAB000000000000090000100008000808404006D -:10BAC000080240029000C000040004008280400090 -:10BAD0008400900000100200000800004080002058 -:10BAE0000003012190080008000000000020000071 -:10BAF0000000002104030000000000090000000015 -:10BB00000000000000200010000000000000000005 -:10BB1000000000000000000000000000000000081D -:10BB20000000000000000000000000000000000015 -:10BB300000000000000000100400000000000000F1 -:10BB400000820041009100A0410021040000000299 -:10BB500040900800040002910020000003008010C3 -:10BB600000080000020000000000000000000400C7 -:10BB70000008000000000084000000000000002019 -:10BB800000000000000000000000000000000000B5 -:10BB900000000000000000000000000000000000A5 -:10BBA0000000000000000000000000000000000095 -:10BBB00000000900000009000000840000000000EF -:10BBC0000000080084900809A00082404000820024 -:10BBD0008240894000048200080282202000080080 -:10BBE0004000000000000100040000000000000010 -:10BBF00082000000000000000800000000000000BB -:10BC00000000000000000000000004000000000030 -:10BC10000000080000000000080000000000001004 -:10BC200000000010000000000000080000000000FC -:10BC30000000000000000000000000000000000004 -:10BC4000008900000000000211080000009000843C -:10BC50000400000020000000210040010004210039 -:10BC600000000000000000900808210000000910FA -:10BC70000000000000000800059000000000000027 -:10BC800000000000000000000000000000000000B4 -:10BC90000000000400000000040000000300000099 -:10BCA000000100000001000000000300000000008F -:10BCB0000000000000000000000000840000000000 -:10BCC0002100001021008200404004000000040018 -:10BCD00008008200C003C00000000002C000000095 -:10BCE0008209822000210000000000110000A00352 -:10BCF0000004000000000000000000408208000076 -:10BD00000000002000000000000000000000000013 -:10BD100000000000000000000000000000008200A1 -:10BD20000000000000110000000000000000000002 -:10BD300000000000000000000000000000001000F3 -:10BD4000000000000000000010C08000000009009A -:10BD50000888081000000000110400840001110090 -:10BD600003A0034000404108000021200000000023 -:10BD7000000000000000008408000000000400042F -:10BD800000000000000000040000080000000000A7 -:10BD90000020000000000000000002000000000081 -:10BDA0000000000000000000000000000000000093 -:10BDB000040000000000000000000000000000007F -:10BDC000000000402100004004000000824000000C -:10BDD00000000800900090004000000082820004F3 -:10BDE00020008200101000058211C000C000040471 -:10BDF00001000000000982000000000000000000B7 -:10BE00000021000000000000000800000000000009 -:10BE100000000000000000002000000000000400FE -:10BE20000000000000100000008000000000000082 -:10BE300000000000000000000000000000000800FA -:10BE4000000082000000000000200000204020418F -:10BE50000040000080000002000000000900000215 -:10BE6000000040000204040400840002000800886E -:10BE700004000400000000000000000000000000BA -:10BE8000000420001000000000000000000000007E -:10BE9000000000000440000000000000000000005E -:10BEA000008800000900000121004010000000008F -:10BEB000000000000000050000000000000000007D -:10BEC00008000000000011000000008900000001CF -:10BED0000001000000000341A14110008209A008F8 -:10BEE00000000002400104C0A120A01000211001A8 -:10BEF0009120A001904100A0000400A082900000C9 +:10B890008000A0A0002882C30041FF55C3410000E2 +:10B8A0000000000000000010000000000000000088 +:10B8B00000000000000000000000000082042000E2 +:10B8C0000408001000001000040000000400C0057F +:10B8D00089110000001188000041000002052008C5 +:10B8E00000050011A00204002009000020008400CF +:10B8F00020000000000000010000000000082000FF +:10B900008800000004000003000020004004200420 +:10B9100004002002000040000000000304000000BA +:10B9200000080000020000080005000002000008F6 +:10B9300020058400000088000000000200002100B3 +:10B94000000209000002400240900002000010C006 +:10B95000409002000040000041C000400000000292 +:10B960000000088421901001200041880008004058 +:10B9700041000000009000000000000000000004F2 +:10B9800000001008080200024002000200842102A8 +:10B9900000000008000800A08904008200040000E4 +:10B9A00000020002000010080000009000004000AB +:10B9B00000000000000400000090040000050000EA +:10B9C0000800000008004009400041000200020099 +:10B9D0000810400002400810088002000000000922 +:10B9E00008004000A100400000840000080008009A +:10B9F0000800000002000200080000000000000033 +:10BA00000209000000000000001008000000000013 +:10BA100000100200080004100200020000000200F2 +:10BA20008400000200000000100000000000200060 +:10BA3000000010000000080002000200008400085E +:10BA400004041100098800008000800088000000C4 +:10BA50000008800080908001008541200000008265 +:10BA600000008000800240908008000200080088EA +:10BA70000008000000000000000021040000001089 +:10BA80000000040000080008000000020000001090 +:10BA9000008800080000009000080000000404086E +:10BAA0000084008200080090000000000000009068 +:10BAB00000040008028400020002000000000002EE +:10BAC0000400000500000008000500050008080942 +:10BAD00020889000902100029021000404000000C2 +:10BAE000100300091021C0A100020003C000C02102 +:10BAF000882100080005000800080000002100005F +:10BB000000080008000000004000022100000810AA +:10BB10000000200020004000000040040200C0009F +:10BB2000000000219000900020002000880090007C +:10BB30000000840800000000000000000000000079 +:10BB4000030000A0090003A0030841080010000042 +:10BB50008882001000000800000000A000A000087B +:10BB60000020008403C00004000808A1001010A0F9 +:10BB70000000000000000384000000A000C00000DE +:10BB80000000000000000000030000000000400072 +:10BB90000000080008080008100808C0050041005F +:10BBA000042000200008008200880302001000002A +:10BBB0000000000800000020000000A000A000021B +:10BBC0000000A0000000A00000C000000800080065 +:10BBD0000000C0200000A0000000000000090802D2 +:10BBE000C140000400000010080000000000000335 +:10BBF0000100000000410000C0000800000000003B +:10BC00000009000000110004000000000000840092 +:10BC100020000800000000000009000908000000E2 +:10BC20000000000000000004000008000000000008 +:10BC30000804A000000000000800820000000000CE +:10BC4000820004000000400000000002000000A08C +:10BC5000000000000082000000C00000000010A0F2 +:10BC600000890401000010001000100000A0000472 +:10BC7000000808000000000040080000000000006C +:10BC800000000000000008900020000000100000EC +:10BC9000000000C0000000000000000000000000E4 +:10BCA0000000040000000000000020000000000070 +:10BCB0000004000000000000002000000008000058 +:10BCC0000000000000000002820088000000000068 +:10BCD000A00004008200C000C0000003400000007B +:10BCE00000040420042004410409C021A003904062 +:10BCF00004000041004000000008000000000000B7 +:10BD00000000000000000000000000000000000033 +:10BD10000800000000000000020000000000C00059 +:10BD20000000000000000000000000000000000013 +:10BD300000040020000000000000000000000000DF +:10BD40000000080000000000000009000090000052 +:10BD5000000803A00008054005081108080000A01D +:10BD60000200212000A0040040A0000400024008BE +:10BD70000000400010000000020000000000000071 +:10BD800000000004000000000000000000000000AF +:10BD9000000040000000002000000008000000102B +:10BDA0000020210840080304004000000082040035 +:10BDB000020008C00000000020100020084000849D +:10BDC00008200000000000001100000040000005F5 +:10BDD00000004021002110210000820040210008C5 +:10BDE000000000000021820084000008C0038809D0 +:10BDF000400000000002000000000000004100417F +:10BE00000005000000000000000800000000000025 +:10BE1000000000000000000000000000080000001A +:10BE20000000000000000000000000000000000012 +:10BE300000000400000000000000000000000000FE +:10BE400000000000000000000010000000004002A0 +:10BE5000000008900000000000000000000000004A +:10BE60000000000000040000000420000082000028 +:10BE700000000000000800010000100000000000A9 +:10BE80000002000000000000001020000000000080 +:10BE900000000000000000000000000000000000A2 +:10BEA0000000000000000000020000000000000090 +:10BEB000000000000000000000000400400000003E +:10BEC000000000000000000000000000080000006A +:10BED000010090000000000004009000000000013C +:10BEE000000000000001028840080088820800006D +:10BEF00000000000000002000101820010000000AC :10BF00000000000000000000000000000000000031 :10BF10000000000000000000000000000000000021 -:10BF2000000000000000000010A00040008200900F +:10BF20000000000000000000000001000800000008 :10BF30000000000000000000000000000000000001 -:10BF4000000000000000000011A000200020000000 -:10BF500000400003000300038240081000208040DE -:10BF60009108210005000008110083C00020000294 -:10BF70008320A003000280024000008000800000B7 +:10BF400000000000000000000000000000000000F1 +:10BF5000000002000000000000008500000000005A +:10BF600000100009000300080805808200108010FE +:10BF7000000000000000000080022121050980402F :10BF800000000000000000000000000000000000B1 :10BF900000000000000000000000000000000000A1 -:10BFA0000000000000000000000000800080000091 +:10BFA000000000000000000000000000040000008D :10BFB0000000000000000000000000000000000081 -:10BFC00000000000000000000000108000000000E1 -:10BFD00000000000210082000000000080088000B6 -:10BFE00000001040C004A00811210200400083009E -:10BFF000020240002100100080218000801080801B -:10C0000000000000800080100000800000000000A0 +:10BFC0000000000000000000000000000000000071 +:10BFD0000000000000000000000003000800020054 +:10BFE0000300000080100000000089000590828896 +:10BFF000A000000080000000800041008300854018 +:10C00000C1A00000000000000000000000000000CF :10C010000000000000000000000000000000000020 -:10C020000000000000000020008000000000000070 -:10C030008020000000000000000000000000000060 -:10C0400000000000000000000000000000000021CF -:10C05000808080009000A1000300A020200020002C -:10C06000A082880001820200A01020014020400030 -:10C07000A10083410820900088008211040082A161 -:10C0800040408840100040000401400010002000A3 -:10C09000A000900000000000000000000000000070 -:10C0A000000000000000000000010804000008007B -:10C0B0000000A00088000000000000000000000058 +:10C020000000000000000000000000000000000010 +:10C030000000000000000000000000000000000000 +:10C0400000000000000000000000000000000000F0 +:10C0500000000000000000000000000000000100DF +:10C0600000000100900008014082020002008811D7 +:10C070001002C090400008000200040008100800F0 +:10C08000A10009A100000000000000000000000065 +:10C0900000000000000000000000000000000000A0 +:10C0A0000000000000000000000000000000000090 +:10C0B0000000000000000000000000000000000080 :10C0C0000000000000000000000000000000000070 -:10C0D0000000A00204880000011001A000828491E9 -:10C0E0000121002040A010A002A0080800C0408844 -:10C0F000000011A0820500080009004100A008000E -:10C100000000008210080000000000000000000095 +:10C0D000000000000000000000000000000100005F +:10C0E0000000000100010000000001000000081035 +:10C0F0000188001089880000000000000000004155 +:10C10000010283080003000000000000000000009E :10C11000000000000000000000000000000000001F :10C12000000000000000000000000000000000000F -:10C13000C00000080800002000000000000000000F +:10C1300000010000000000000000000000000000FE :10C1400000000000000000000000000000000000EF -:10C15000009000100090000400000800040000801F -:10C160000040400209800003850282C1009009005E -:10C170008040202110080585000509030821088555 -:10C1800000000000000080800000000000000000AF +:10C1500000000000000000000009000900100003BA +:10C1600000030002000800100000040003000000AB +:10C170000000028003802180000000000000000019 +:10C1800000901085C1110088000000000000000030 :10C19000000000000000000000000000000000009F :10C1A000000000000000000000000000000000008F -:10C1B00040008000000000000000000000000000BF +:10C1B000000000200004004100000000000000001A :10C1C000000000000000000000000000000000006F -:10C1D00000000000000000000080029000C000800D -:10C1E0000500000380090000000008A1219108005B -:10C1F00005044021038000A1040521822140008024 -:10C20000801000008000008080000000000000809E -:10C21000000000000080000000000000000000009E -:10C22000000000000000000000000000800080000E -:10C2300000008000000000850000000000000000F9 +:10C1D000000000000000000000000000002000003F +:10C1E000000000800000000000118000000200003C +:10C1F000008000008003008000110000000000802B +:10C2000000000880100820802005000000000000C9 +:10C21000000000000000000000000000000000001E +:10C22000000000000000000000000000000000000E +:10C2300000000000004000000000000000000000BE :10C2400000000000000000000000000000000000EE -:10C2500000000000000000050000000001A1002017 -:10C2600000020000C00020020440C000C1C19005CF -:10C270000490820101C100A00085000009C108836B -:10C280009010A000400004882004A0000000008856 -:10C29000000200000000000200400000000000005A -:10C2A0000000000000000000000000000000080086 -:10C2B00082A0900810000000080240828800000060 +:10C2500000000000000000000000000000000000DE +:10C260000000000000020000000000000400108335 +:10C270001020901088208491880808000000001089 +:10C280000004000001C001020002000000000000E4 +:10C29000000000000000000000000000000000009E +:10C2A000000000000000000000000000000000008E +:10C2B000000000000000000000000000000000007E :10C2C000000000000000000000000000000000006E -:10C2D000000000000000000008200800900000009E -:10C2E0000000000000000000000007000000000047 -:10C2F00000E00000810000000000000000000000DD -:10C3000000000700500000000000000000000000D6 +:10C2D000000000000000000000000000000000005E +:10C2E000000000000000000000000000000000004E +:10C2F00000000000000000410000070000000000F6 +:10C30000000000000000000000E0000060060000E7 :10C31000000000000000000000000000000000001D :10C32000000000000000000000000000000000000D -:10C330000000000000000000000000000700600096 +:10C3300000000000000000000000000000000000FD :10C3400000000000000000000000000000000000ED -:10C3500000000000000000000000000007000000D6 -:10C3600000000000000F0F0F8181033F307000605C -:10C3700081BD0C0C0303030300000000FFC399FF01 -:10C380000C0F000000E700F70000D3000000FFFFE3 +:10C3500000000000000000000000000000000000DD +:10C3600000000000000000000000000000000000CD +:10C37000FF00DFC700000000F6F63F30F090F0004D +:10C3800000000000000000000000000000000000AD :10C39000000000000000000000000000000000009D :10C3A000000000000000000000000000000000008D -:10C3B0000000F0F0F0F000000000C30FC30F606059 -:10C3C0006F6F00000000000000000000000000008F -:10C3D000000000000000000000000F0F0F0F3F1BC7 -:10C3E000031B00000000000F0F0FBDBD033FF0F066 -:10C3F000F0F081BDCFCFFF99009900000000FFC38E -:10C4000099FF0C0F0000E7E7F7F70000C300FF00FB -:10C41000FF0000000000000000000000000000001D +:10C3B000000000000000000000000000000000007D +:10C3C000000000000000000000000000000000006D +:10C3D000000000000000000000000000000000005D +:10C3E000000000000000000000000000000000004D +:10C3F0000000FF001C040000000006063F30F08033 +:10C40000F000000000000000000000000000000834 +:10C41000000000000000000000000000000000001C :10C42000000000000000000000000000000000000C -:10C4300000000000E100E1FF00000000C30FC30F97 -:10C4400060606F6F0000000000000000000000004E -:10C450000000000000000000000000003C663C6698 -:10C460003F1B031B00000000000000000000000054 +:10C4300000000000000000000000000000000000FC +:10C4400000000000000000000000000000000000EC +:10C4500000000000000000000000000000000000DC +:10C4600000000000000000000000000000000000CC :10C4700000000000000000000000000000000000BC :10C4800000000000000000000000000000000000AC :10C49000000000000000000000000000000000009C @@ -105574,405 +105574,405 @@ :10C4B000000000000000000000000000000000007C :10C4C000000000000000000000000000000000006C :10C4D000000000000000000000000000000000005C -:10C4E00000000000000000000000FF99009942FFDA -:10C4F00000FFFFFF6EFF0000F0F096F60666424276 -:10C50000F960FEFE3EFE3CFF3CFF00000010F00024 -:10C5100042FFFFFFFFFF0000000000FF0099000046 -:10C5200000000000061800000000000000000000ED -:10C5300000000000000000000000000099009900C9 -:10C54000C0CFC0CF24BD24BD00000000000000000B +:10C4E000000000000000000000000000000000004C +:10C4F0000000000000000000000083C380C0606FE7 +:10C500003F3F9F9F667E000000007F70000000009C +:10C510000000FFFDFFFF0000000000000000000021 +:10C52000000000000000000000000000000000000B +:10C5300000000000000000000000000000000000FB +:10C5400000000000000000000000000000000000EB :10C5500000000000000000000000000000000000DB -:10C56000000FF0FF009966FF00000000F0C3F0C369 -:10C5700000FF00FF0CFF0CFFFFFFF0F090F00060E9 -:10C58000DBDBF960FFFF3FFF3CFF3CFF00000000EA -:10C59000F0004200E7FF243F0000000000C300F06D +:10C5600000000000000000000000000000000000CB +:10C570000000000000000000000000000343004035 +:10C58000606F30309F9F6666000000004F400000E3 +:10C5900000000000FFFFFFFF00000000000000009F :10C5A000000000000000000000000000000000008B -:10C5B0000000000000000000000000000000999949 -:10C5C0009999FFFF0000009966FF0000000000003D +:10C5B000000000000000000000000000000000007B +:10C5C000000000000000000000000000000000006B :10C5D000000000000000000000000000000000005B -:10C5E0000000000FF0FF009966FF00610006000DDB -:10C5F00000010061000E000D000000610007000D49 -:10C60000000000610006000D00008061000E000DBA -:10C6100000A000003000000000000000000000004A -:10C620000000000000000000000100000000000009 +:10C5E0000000000000000000000000610006000DD7 +:10C5F000000000610006000D000000610006000D53 +:10C6000000000061303E000D00A8000000000000A6 +:10C61000000000600007000D0000000000000000A6 +:10C62000000000000000000000000000000000000A :10C6300000000000000000000000000000000000FA -:10C6400000000000000000080500000000000000DD +:10C640000000000000610006000D00000000000076 :10C6500000000000000000000000000000000000DA -:10C660000000000080000008000000A00000C3C31C -:10C67000000000000000000000000B0BC303C30318 -:10C6800000300030C3C3FFFFC3C3008300000000BD -:10C690000000C38000000000000000000000000057 +:10C6600000000000000000000000000000000000CA +:10C67000AAFAAFFF0000000000C003C300000000E2 +:10C6800000000000000000000000000000000000AA +:10C6900000000000A000A080555555550000000086 :10C6A000000000000000000000000000000000008A :10C6B000000000000000000000000000000000007A -:10C6C000000000000000000000000000000000006A +:10C6C00000000000000000000000C303C3030000DE :10C6D000000000000000000000000000000000005A :10C6E000000000000000000000000000000000004A -:10C6F000C3C3000000000000000000000808FB0B9E -:10C70000FF0FF030F03000FFAAAA00000000AA00DE -:10C71000FFFF0000C3000000000000000000000058 +:10C6F0000000AEFEAEFE0000000002C202C200005A +:10C700000000000000000000000000000000000029 +:10C710000000000000000000000054145555000007 :10C720000000000000000000000000000000000009 :10C7300000000000000000000000000000000000F9 -:10C7400000000000000000000000000000000000E9 +:10C7400000000000000000000000000043434343DD :10C7500000000000000000000000000000000000D9 :10C7600000000000000000000000000000000000C9 -:10C77000FDF13D31000F000F303082BE000000009F -:10C78000AAAAC3C31F1F1F0028F328F3F0FFFAFF54 -:10C790000555007D3FFF3FFF000000000000000046 +:10C77000000000000000000000000000FFFFFFFFBD +:10C780000000AA0F0000000082AA8200FA3C00000C +:10C790000000000000000000FFFFFFFF000000009D :10C7A0000000000000000000000000000000000089 :10C7B0000000000000000000000000000000000079 :10C7C0000000000000000000000000000000000069 :10C7D0000000000000000000000000000000000059 :10C7E0000000000000000000000000000000000049 -:10C7F0000000CDC10D0100FF00FFF3F382BE000079 -:10C800000000AAAAC3C3DFDFDF00EBF3EBF3EAEF1C -:10C81000FAFF05FF007D35F535F50000000000004A -:10C820000000000000000000000000000000000008 +:10C7F0000000000000000000000000000000AAF09F +:10C800003CF00000AA3C00000000820A820A0A3CB8 +:10C8100000000000000000000000F0D7F014C05538 +:10C82000FF00000000000000000000000000000009 :10C8300000000000000000000000000000000000F8 :10C8400000000000000000000000000000000000E8 :10C8500000000000000000000000000000000000D8 :10C8600000000000000000000000000000000000C8 -:10C870000000000000002010200088020000C0001E -:10C880000000050000000000C040888020008800F3 -:10C890000400000000082000C00004800000200008 -:10C8A0000410A010080008008800828020002000EA -:10C8B00000000010000340000000201000000005F0 -:10C8C000402000002010000020800000080220000E -:10C8D000208088008400000000002000000000008C -:10C8E00000800000000000000000000000000000C8 -:10C8F0000000000000000082000200002004000090 -:10C90000000000008400000200000000101005007C -:10C9100000020000000000000000004000100004C1 -:10C92000000080010009800080000000002000005D -:10C9300000004000000100000000000000010000B5 -:10C9400000002000000000010000001000908001A5 -:10C9500000000002000000000002000000000000D3 -:10C9600000000020000200020000000200000000A1 -:10C970000000000000000000001000004000401017 -:10C980000400000020000800000002000000004138 -:10C99000000082000021820000000000400088802A -:10C9A00000000000042084000400080000000400CF -:10C9B00008020000201000020000080040100000E3 -:10C9C000400400001000000000000800000000000B -:10C9D00002000200020003000040001000000200FC -:10C9E0000000008020208809008400000000000072 -:10C9F000000004000000002004800001008480008A -:10CA000080090008000000000000008880080984F8 -:10CA100000900008008400840084008411008000DD -:10CA200000400010000080054004000080C040006D -:10CA3000800280850910000800000000801080013D -:10CA40000088800100000004410800048400000008 -:10CA500000044100000000000884000800010000FC -:10CA6000000000040020808505080021000000006F -:10CA70004100000080000000200180200003000031 -:10CA800000000405002120210408400804000005DE -:10CA900004108840892140418408900000008800EB -:10CAA00000052000102000050804400200210000BD -:10CAB0000000002100000000000000000000000352 -:10CAC000000000000004004000080000000000001A -:10CAD0000009000000100009000000100000010023 -:10CAE000000000000000000090040420001000007E -:10CAF00000000000000000000020000000002100F5 -:10CB00000300110000A0008809840820030003002E -:10CB1000028841010200080005900020000000008A -:10CB20000088002008880000002090840810000081 -:10CB3000050000004104000000A00000000000000B -:10CB40000000000000840008000800000000000051 -:10CB50000000000008000301000000000001009038 -:10CB60004000000000000000000041010041000002 -:10CB70000000210003000000000000010000002070 -:10CB80000841000082101002820008050011000018 -:10CB90000041000040110810000200048402080354 -:10CBA00000000009080002020000080082001000D6 -:10CBB0008400A0008409080000000000201000008C -:10CBC000000040110882900408000000000082006C -:10CBD0000000040000000009000008009002C000EE -:10CBE000400200000000040000030000820000403A -:10CBF00008000000080000410020000008000000BC -:10CC000082090008000008010082000400004000C2 -:10CC100000000200410000000005000000010000CB -:10CC2000000000000000000080010000000810006B -:10CC3000000000002000008403000000410000010B -:10CC4000000000008000000500C00000000000009F -:10CC5000000000000000000008000000800041000B -:10CC6000000041A0000021000000000000000200C0 +:10C87000000000000000202000000000C0090000AF +:10C88000000004000000000000400005A1000105B8 +:10C89000010082200000A0080000000000009000BD +:10C8A000A00000050000000000050010200020008E +:10C8B000000420000003000000000004000000004D +:10C8C0001010000000000008000000028811200481 +:10C8D0002000000500000005000300080010010012 +:10C8E00021024084008000830210000400842000A4 +:10C8F0002005000000040084000100000000000288 +:10C900000002009011000002000200022100080055 +:10C9100008400890090100C0050000A0050041C0C2 +:10C92000408241C000840090400040004040A00888 +:10C93000C1024000000000000000000000080000EC +:10C940000500402000000004000000000003000279 +:10C9500000020000000000020002000400041001B8 +:10C9600020841003000200040010000400020002F2 +:10C970000002000000020000000000004000000073 +:10C98000020002000010400082000000020040008F +:10C99000820002000000021002000000000002906D +:10C9A00000000002820004050200000000000000F8 +:10C9B0002000000010000210000000000000000035 +:10C9C00002000040000000000200000040004000A3 +:10C9D0000200000000000000200002000800080023 +:10C9E0001000000000000080000000000241000074 +:10C9F00000000400040002000000000800008000A5 +:10CA00000000000080000000808200000040000064 +:10CA100080000000000000000400008400100000FE +:10CA2000004000840010048400080000040000009E +:10CA300000008400040084000000000000000008E2 +:10CA40000010041000000008000800080000800822 +:10CA500080000000000802000200040800008008B6 +:10CA600000820200000000100002044000100008D4 +:10CA70000000000000080084008400840002000020 +:10CA80000000000800100040A000A0001021880055 +:10CA9000400088001100020000210000C003C021F6 +:10CAA00088008802882120081008000090110040AA +:10CAB0000200C00000088800881010080000020072 +:10CAC000000000080000000000000000000000005E +:10CAD000040010004000200082002000900002218D +:10CAE0000000000082032020898010210000042122 +:10CAF0002000000900050421002140400000000042 +:10CB000000000082418204080000000811000400B7 +:10CB10000300000041000288A1A00482000000A0E0 +:10CB2000008200080400400009020082008409001D +:10CB300000000000000000000000000000000000F5 +:10CB400000000800000000000000000000000000DD +:10CB5000000005000000808200A000080000000026 +:10CB6000000000000000000000841008808400C065 +:10CB700000A0000000820000000000000000000093 +:10CB8000A011400800040040000400040041840497 +:10CB900084400000000084000820000500400011CF +:10CBA0000000000400100004000400400010000019 +:10CBB000000000000000000000080104010400045F +:10CBC0000000000000000040C00000040800000059 +:10CBD0000000A0008440004084000009000000081C +:10CBE0000040000000400040000000080000000578 +:10CBF000000000000021000008002000000090005C +:10CC000000000900000000002100000000000000FA +:10CC10000000000000000000000000000000000014 +:10CC200000000000000000000000000021000000E3 +:10CC300000000000000000000084000110012089B5 +:10CC400000000000000000000000000000000000E4 +:10CC500000000010000000000000000000000000C4 +:10CC600000002000000000000000000000010000A3 :10CC700000000000000000000000000000000000B4 -:10CC80000000000000080000000000000004000098 -:10CC900008210820000000000800A0008200820097 -:10CCA000C000000000000000000800008411000027 -:10CCB0000400820000001000080040000000820014 -:10CCC0000000002000000000000000000000000044 -:10CCD00000000400000808008200A0000800000016 -:10CCE000000000000091080008004000000004005F -:10CCF00008000041820000000004C000080000009D -:10CD000082000000000004000000049011040920CB -:10CD10000004002005854002090403880820000063 -:10CD2000200400400500090000000590004040007C -:10CD3000000083200020000004000020000000000C -:10CD400000000800000800000000000000000000D3 -:10CD500000000000000000000000000008000000CB -:10CD600000400000040000020000800000000000FD -:10CD7000000000000000000000000500000041006D -:10CD8000000003000000080400020041002100032D -:10CD900000400000004004080000004000000008BF -:10CDA0000000C008004110090000C0400009000058 -:10CDB000020020004008080010000010C008000019 -:10CDC000000200000004000000000000000020003D -:10CDD000000000000800082100000000000088009A -:10CDE00000000000400000000182820000000800F6 -:10CDF00000000000840000000004000000408400E7 -:10CE000000200800000000000000000000000000FA -:10CE1000000000000000000080000000040000008E -:10CE20000200000000C004000040000000000000FC -:10CE300000A08000000400000000000000010000CD -:10CE40000000000140002140000000000000000040 -:10CE50000088000000000000000000000000030047 -:10CE600003000000000000000000080200000000B5 -:10CE70008000000000000000000000010000000130 -:10CE8000000000000000000000000000000401C0DD -:10CE9000028400820000000000000000100000007A -:10CEA0000000080000C0C008001000822088C18275 -:10CEB00000902002010000000000000000A000829D -:10CEC000000800840220008200040808000040A03E -:10CED0000101A00010000000000000000000104050 -:10CEE000010490C02008000000000000000040A0E5 -:10CEF00004900008821010880140042008400000BF -:10CF0000000000000000008820020000A0C009000E -:10CF1000040080800000000000000000000000000D -:10CF20000000000080000000008000090002008076 -:10CF3000028000000080100000000000000000805F -:10CF40000000008000008000000800880000000051 -:10CF50008080030800000040000000000000000086 -:10CF60000000418000000080000000000000000080 -:10CF7000808080100008801020081003801080003E -:10CF80000000000000000000000000800000000021 -:10CF900010000410058002000000000000000000E6 -:10CFA00000000000800000000000004100A000031D -:10CFB00091008883409003000000800080210000E1 -:10CFC000800000118000800000000003008000004D -:10CFD0000000008010400884000000000000800075 -:10CFE000000000008000800000001000A000880009 -:10CFF00008210000000000080000030021080800CC -:10D0000000200000000000008000000080038080FD -:10D010000000A1000401104083A0000000000000F7 -:10D02000001000000000080000000008000000A040 -:10D0300000010200044120A0012020004000400126 -:10D04000040004000000040804000000880090A010 -:10D0500000000000000201010109001000000000B2 -:10D060000400000000000200A0000000A0880200F0 -:10D07000A10282010000000000100000904040006A -:10D080000182100100000000000002000800020000 -:10D0900082042000080000820800108900000000BF -:10D0A000000000000084002000A000A0A04000A01C -:10D0B000040090C0904000900891919000000008FA -:10D0C00000080010020000000000C000904000A016 -:10D0D0008220004000000020004004A108820000DF -:10D0E000000000000000C09000884011A010000067 -:10D0F000000200030101100000A00140100804001C -:10D1000001408810014100000000000000000802FA -:10D11000000200400290000400410009008200006B -:10D12000000000000000000000000000000000807F -:10D130000380000000000080001100400940000052 -:10D1400000800000000080000000000082000080DD -:10D150000080000000000000002002C100A100804B -:10D160000000000000000000804100080040800333 -:10D170000010008000A1021000000080058088805F -:10D18000800008410083110500000000000000003D -:10D19000008000800080800000038080000000404C -:10D1A000000000020000000000000000000000007D -:10D1B00021000402020003000000008400808003BC -:10D1C0000000008400000000800000058080000056 -:10D1D00080008000000000000000210020200400EA -:10D1E00002000000000000000000800000000000BD -:10D1F0000000202003000580401000100000000007 -:10D20000000021A009900821032000000000000078 -:10D21000000000400020008000000488102084C02E -:10D220008201000000000000000000000084008473 -:10D23000000091008800C0001100000090C09084A0 -:10D240000401000000050082000008002084840220 -:10D25000C0000400024000A0400000004110410155 -:10D2600090008800000000200088000010000010DE -:10D27000C00088000189834000400101000188004E -:10D280000000000041C00021404108010000009062 -:10D2900000000000400000000840200000000000E6 -:10D2A0000000000000000000070000000000000077 -:10D2B00000000000000000E000000000000000008E -:10D2C0000000420000000000070000000000000015 -:10D2D0000700000A0000000000000000000000003D -:10D2E00000E000000000000000000000000000005E -:10D2F00000000000500000000000000000000000DE -:10D30000000000000000000000E0070084000000B2 -:10D3100000000000000000000000070000007D4148 -:10D3200003030F0F000000000000000000000000D9 -:10D330000000C300550F0A0A0A0A0F0F3C3CFFEA1F -:10D34000FFEA0101414100000000FFF0FFFFC3C3FD -:10D35000C3830000000082C382C3F100F00000001C -:10D36000000000017D2838380000000000000000A7 -:10D3700030303F3F0F0055C355005500F000F0001E -:10D3800000550055050F050F3C3CAFAF0AFAFAFAFD -:10D3900000000000000000003C3CAAAA003FFF3F44 -:10D3A0007D413F3F0F0F0000000000000000000023 -:10D3B00000000000C3FF550F0ACA3AFA0F0F3C3CA9 -:10D3C000FABAFABA4155415500000000FFF0FFFFDC -:10D3D000C3C3C3C3000000008200828200000000BB -:10D3E0000000000000007D283D3D0000000000001E -:10D3F000000030303F3F0FFF55C355005500F0008F -:10D40000F000005500550000FFFF3C3CA0A00AFAC8 -:10D410000A0A00000000000000003C3C0F0F00035F -:10D42000FF0300C3E8E8A0AF030300000000000012 -:10D4300000000000000055555555E8E8003C00008C -:10D440000000FFFFFFEF00300030000000000F0081 -:10D450008F00FF00FF00FFFFC3C3FF00CF0CAA0037 -:10D46000AA000000AAAA00000000000000000000BE -:10D47000550055003F00FFC0FA50FA500000000070 -:10D48000000000004B004B00000000003FFF3F0089 -:10D49000F5F505050000000000005555BEAABEFFC9 -:10D4A0000F00FFF03CFFE8E8A0AFF3F3000000003E -:10D4B0000000000000000000FF00FF00E8E8C3FFDC -:10D4C00000000000FFFFFFFF1030103000000000E0 -:10D4D0000F000F00FFA0FFA8FFFF41C300000C0CCE -:10D4E0000A0A0A0A0000AAAA0000000000000000C0 -:10D4F000000055FF55FF2F20EFE0FA50FA500000D2 -:10D50000000000003020C3000F000000000003FFF7 -:10D510000300F3F30303000000000000555514005E -:10D5200014553C3C3C3C00614006000D00000000EE -:10D530000008000000A000000000000000010061E1 -:10D540000004000D000000613006001D0000000016 -:10D55000000800100000000000080000000000614A -:10D560000006000D0000000000610004000900003A +:10CC8000000000008200400800000000C000001109 +:10CC90000009084090000800C000080000000400DF +:10CCA0004020000000000008000082000802000090 +:10CCB00000000011000000080000C0100400000087 +:10CCC0000000000000000000000000000000000064 +:10CCD0000000000000000000000000000000000351 +:10CCE00000000008000300000000001040080000E1 +:10CCF00001000002000000210021000000000000EF +:10CD00000020000000000200400040000000000081 +:10CD1000050803000008038400A000C041900988B2 +:10CD200021A009001088000200000004000803048C +:10CD300004200000080004000000000000000000C3 +:10CD400000000000000000000000000000000000E3 +:10CD500000000000000000000000000000000000D3 +:10CD6000000000000000000000A000000088800219 +:10CD70000000400000000040000000000000000033 +:10CD800000000000000000209000000008000400E7 +:10CD9000A00000000000000084001041000000001E +:10CDA0000021000001008200000008410000008016 +:10CDB00000030000000000000000000000218802C5 +:10CDC0000100000000000088000000000004004195 +:10CDD0000000400000000000000000000000000013 +:10CDE00000000000000800080000000000004000F3 +:10CDF00000000000002100030008000800000008F7 +:10CE0000000000400040000000080000000000009A +:10CE10000000000000000000000000000000000012 +:10CE20000000000000000800000000C0000000003A +:10CE300000400000000000000000000000000000B2 +:10CE40000000200000004000040500000000000079 +:10CE500000000000000000000000000000000000D2 +:10CE60002000000000000000200000000000000082 +:10CE70000000200000200000000000000000000072 +:10CE800000000000000000000000000000A00004FE +:10CE90000004000000000000840000000000010009 +:10CEA00010000000084000C000A0C09040C0022058 +:10CEB0000020829040200082000882900000000044 +:10CEC00000000000000100008200000100000000DE +:10CED0000000000000000000000000000000000151 +:10CEE00000002000000000000000000000001040D2 +:10CEF0000040089008400001A10105010001000068 +:10CF000001000000000000000000000000000080A0 +:10CF1000008000800000030021008000000000006D +:10CF20000800000000001180000000000080048064 +:10CF300000800000800080000000008000000000F1 +:10CF40000000000000000041040908090010000072 +:10CF500000000000000000000000000000000000D1 +:10CF6000000809100011000200000000000000008D +:10CF7000000009008000800000418320A00200031F +:10CF80000000100000000000000000000000000091 +:10CF900010000800048040008000000000008000B5 +:10CFA0000000000000000000000080098021808057 +:10CFB0008000000000000080000000880010008059 +:10CFC00000000000000000002000100008004105E3 +:10CFD0000000000000000000000000000000000051 +:10CFE0000000418010000908082100000000000036 +:10CFF00000008000000000000000090041008311D3 +:10D0000041000000000000000000000000000000DF +:10D010000000000000000002010002008200880001 +:10D020000240000000000000000020002000A0A13D +:10D03000C00208001000900004C0100002C108A047 +:10D0400020C000000000000000000090010001006E +:10D0500001000000000000000000000000000000CF +:10D0600000000000000400000001010100000000B9 +:10D07000000000008800100004000200100890006A +:10D08000080011840000000000880000000000007B +:10D0900000000000C00000000000C0000000000010 +:10D0A000000001000000000000000000C00200209D +:10D0B000001091C000020020C0880482911000205E +:10D0C000C08282020000000000000000000000009A +:10D0D00083010001000000000000000000000000CB +:10D0E000000000000000000000000101010100003C +:10D0F000000000000000408900091089A002000023 +:10D10000000000010001000000000000000000001D +:10D11000000000000000000000000000800000058A +:10D1200000090002081000050004000300038080CD +:10D13000000000002180000000008000808041008D +:10D1400000008000800000000000000000000004DB +:10D150000320020800410000000000000000000061 +:10D16000000000000000000000020921052108085D +:10D1700000000000000000008010008800089011EE +:10D180000010040402210041000900090000001001 +:10D1900000000000000000008000004080008003CC +:10D1A000000000800080000000000000000000007F +:10D1B00080108005000000000008000200800000D0 +:10D1C000000080400000000000000000000000009F +:10D1D000418010001000044000000000000000002A +:10D1E0000000000000000000000020A1100020004E +:10D1F0000802000000000000000000020080008023 +:10D2000000000200110000002110000000000000DA +:10D21000000000000000000000001002900002006A +:10D22000040100000008008400000000000000006D +:10D2300000000401828884888800000000C100404A +:10D240000000900002211004900000000000000087 +:10D25000000001400100000000010000000000008B +:10D2600000000000000000000000000000110100AC +:10D27000000000000000000000000000000000822C +:10D2800000400000002000020088010088008400A7 +:10D29000840000000000000000000000000000000A +:10D2A0000700000A0000000000000000000000006D +:10D2B0000000000000810000070060000000000086 +:10D2C0000000004200000000000048420000000092 +:10D2D00000000000000000E000000000000000006E +:10D2E000000000000000000000000000000000003E +:10D2F000000000000000000000000000000000002E +:10D30000000000000000000000E00000000000003D +:10D31000000000000000000000000000000000BC51 +:10D3200000000000000000000000000000000000FD +:10D3300000000000000000000A0A0000C0C0000059 +:10D3400000000000112200810024240000240000BD +:10D3500000000000000000000000000000000000CD +:10D3600000000000000000000000000000000000BD +:10D3700000000000000000000000000000000000AD +:10D380000000000007000400000000000000000092 +:10D39000A000AF000000000000000000000000003E +:10D3A00000BC0000000000000000000000000000C1 +:10D3B0000000000000000000BEB4BEB480BFC0C0CA +:10D3C0000000000011220000810024008100008183 +:10D3D000000000000000000000000000000000004D +:10D3E000000000000000000000000000000000003D +:10D3F000000000000000000000000000000000002D +:10D40000000000000000F7F0F4F000000000000051 +:10D410000000A000AF0000000000000000000000BD +:10D420000000FF550055000000000000000082C30E +:10D4300080C100000000000000000F3F0535C30060 +:10D44000F0AA4488000044000044041008200600AC +:10D45000900000000000000000000000000000003C +:10D4600000000000000000000000000000000000BC +:10D4700000000000000000000000000000000000AC +:10D4800000000000820382C30000FFFF00000000D4 +:10D4900041C1414100000000000000000000000008 +:10D4A00000000000FF5000500000000000000000DD +:10D4B000024300410000000000000000003005357C +:10D4C000C3FFF0AA44880000880000880140028061 +:10D4D00000060090000000000000000000000000B6 +:10D4E000000000000000000000000000000000003C +:10D4F000000000000000000000000000000000002C +:10D5000000000000000082038200F828F8280000D4 +:10D5100000005FDFDFDF000000000000000000000F +:10D5200000000000000000610006000D0000006126 +:10D530000006000D000100610006000D0000000063 +:10D540000038009000A500029000000010000000CC +:10D5500000000000080000000000000000000000C3 +:10D5600000010000000000000000000000000000BA :10D57000000000000000000000610006000D000037 -:10D5800000610006000D000000610006000D0000B3 -:10D590000061000C00090000000000000000000114 -:10D5A0000000000800000000000000003C004D4D9D -:10D5B000000000000000000000000000000000006B -:10D5C000000000000000000000000000F0F000FF7C +:10D58000000000000000000000610006001D000017 +:10D59000002100030008000000610006000D0000EB +:10D5A000000000000000000000000000000000007B +:10D5B00000000000FFFFFFFF00000000A300AF001D +:10D5C000000000000000000000000000000000005B :10D5D000000000000000000000000000000000004B -:10D5E00000000000000000000000C500C5FF75201D -:10D5F0007520000000000000000000000000030093 -:10D600003FFF5535F53500FF3C3C000000000000B1 -:10D610000000AAA0A8A0000AFFFA00000000000075 -:10D620000000000000000000000000000000FFC338 -:10D630004D4D000000000000000000000000000050 -:10D6400000000405050500000000000000000000C7 +:10D5E0000F0F3C3CFAFA287D00000000000000000C +:10D5F00000000000000000000000F0F07020E828AB +:10D60000E8E80000000000000000000000003030EA +:10D61000303055FF55C3F3F3AFA0000000000C0CF1 +:10D6200000000000000000000000000000000000FA +:10D63000000000000000F808FB0B00000000A00044 +:10D64000AC0000000000000000000000000000002E :10D6500000000000000000000000000000000000CA -:10D66000000000000000000000000000C500C5FF31 -:10D670007F2A7F2A00000000000000000000000058 -:10D68000170017FF5535053500FF3C3C0000000032 -:10D6900000000000A2A0A0A0AA0AAAFA00000000B0 -:10D6A000000000000000000000000000000000007A -:10D6B0005F50C0C00000000000000000000000003B -:10D6C0000000000002020202000000000000000052 -:10D6D00000201434000000000000000000000000E2 -:10D6E00000000000F000F000000000000000AAC3ED -:10D6F000AAC30F000F00000000000000000000009F -:10D700000000000000000000000082F3BEF33C3C7B -:10D710003C3C0000000005F500FFD5D7D5D7000040 +:10D6600000005555FF005050287D000000000000CC +:10D67000000000000000000000000000000070201A +:10D68000E8E8E8E8000000000000000000000000FA +:10D69000FCF0BEF055FF55C30303AFA0000000002F +:10D6A0003C3C3030000000000000000000000000A2 +:10D6B0000F030A030000000000000000000000004B +:10D6C000000000000000000000000000000000005A +:10D6D000000000000000000000000000000000004A +:10D6E00000000000F0F0FF00AAAAFF000000000008 +:10D6F0000000000000000000000000000000FFFF2C +:10D7000000AAD585D08000000000000000000000C5 +:10D710000000000000002D2DAAFF828203000000FF :10D7200000000000000000000000000000000000F9 -:10D7300000005F50CFCF000000000000000000009C -:10D7400000000000000002020202000000000000D1 -:10D750000000002014340000000000000000000061 -:10D76000000000000000F000F000000000000000D9 -:10D77000AAC3AAC30FFF0FFF0000000000000000B3 -:10D780000000000000000000000000008230BE30F9 -:10D79000F03CF03C0000000005F500FF8082808234 +:10D73000000000030A0300000000000000000000D9 +:10D7400000000000000000000000000000000000D9 +:10D7500000000000000000000000000000000000C9 +:10D760000000000000003C3C55553C3CF0F000003F +:10D7700000000000000000000000000000000000A9 +:10D78000FFDF555DDF8FDA8A000000000000000037 +:10D7900000000000000000002D2D00558282F3F0F3 :10D7A0000000000000000000000000000000000079 -:10D7B000840204002002840020008800000010037E -:10D7C000200020410400000000000000A000001123 -:10D7D00000000400000200050002004004040400F0 -:10D7E00040002000001004000011840000008402AA -:10D7F00000000000200000050400000200002004DA -:10D800000000200020000000200000002000C000D8 -:10D8100020030000000000002000000000000000C5 -:10D820000000000040000000200000000000000098 -:10D830000000009020000004000000004002009062 -:10D84000040400000000100200C0000200004000BC -:10D850000002009000C04100000021000000000014 -:10D860000040000000000000000440040000000030 -:10D870004000000000000000000000000000000068 -:10D880000040000000000000000000000004100044 -:10D890004004000000000000000021000002009091 -:10D8A0000000000000000000000000000000000078 -:10D8B0000000000000008200001000400000000096 -:10D8C00000000010000002000200000082000000C2 -:10D8D00000000004004004400002000000000004BA -:10D8E0000000000000000000200400080000040008 -:10D8F000000000030000000084400000020000045B -:10D9000002000011020400000000000002000204F6 -:10D910000040000002000040000000000200000380 -:10D920000000000000030000840000000000000070 -:10D9300000000000000000080000000000040000DB -:10D9400000000000000809100484400000100000DE -:10D9500000080084000804080004410020020000C0 -:10D96000090000000008000000000900000000029B -:10D970000088000000100000000800900000000077 -:10D9800000004090000000840008000000000088B3 -:10D9900000000000000000000084050000000008F6 -:10D9A000008400000000000000080000009000005B -:10D9B00000000000000400044000900090000000FF -:10D9C00000112000100090008800100082009000DC -:10D9D000000000002000400008008241080382008F -:10D9E0000200820804090000000000000003042077 -:10D9F00040000000000000000000020000000000E5 -:10DA0000000800000000000000000000000084404A -:10DA100088008400000084008408020000000000E8 -:10DA20000000000000000040000000200000000096 -:10DA3000000090110000080040000090030000006A -:10DA4000090800404002410000200004040005A035 -:10DA500010044108000008000300032000820000B9 -:10DA600000040800102041200000050000002100F3 -:10DA700000A04100000000000000000000000000C5 -:10DA800003000000000800000084080000004100BE -:10DA90000000008200000002000200904004080024 -:10DAA000050000000008100408200082000008A003 -:10DAB000418840004000000000000800084100408C -:10DAC0008200000000000000000208401000A000DA -:10DAD00008210400001108020011000000000000ED -:10DAE0000421000000000000000000000800000009 -:10DAF000080000000000000000000000000000001E -:10DB00000000000000110000000000000000000004 -:10DB10000000000000000000000000000000000005 -:10DB200000000000000200000000000000000000F3 -:10DB300000000000000000000800C0000000000815 -:10DB4000000000404000000000000400000000044D -:10DB5000080040880000000000A000900000109025 -:10DB60001008000000204100000009C00000410032 -:10DB70001000030005004188000000001090000024 -:10DB8000000000000020000000080000000000006D -:10DB90001188000000840400000000001102000051 -:10DBA0000000080000000500001041000000000017 -:10DBB0000800080000000000000000000000000055 -:10DBC000000000000000040000000000C000000091 -:10DBD0000000C00000000000000000000000000085 -:10DBE000000002000000840000040803840090008C -:10DBF00000080800000000000000002000000000F5 -:10DC00000000000000000000000000000000040010 -:10DC100000000000000000000000000000000008FC -:10DC20000000000000002000000000000000400094 -:10DC3000400000000000001108000000000000008B -:10DC40000000110000040288102040000040000085 -:10DC50000200400000004004002020004000058435 -:10DC60000490109008000304080005000000000064 -:10DC70000800000000000000000000002004000078 -:10DC800011000000039000000504000000000000E7 -:10DC90000000002000901100008405000000000436 -:10DCA00020020000400000000088200011000988C8 -:10DCB00000201002000041000000000000000004ED -:10DCC0001100000000000008000000000000080033 +:10D7B0002000000500000000000088108800000024 +:10D7C000000000000008000400002000000000101D +:10D7D0002000000000000003000020000000040002 +:10D7E0000000840000000000404000000000000233 +:10D7F0000000200000000000000000000000000009 +:10D80000000840000000000400002002A00000000A +:10D810000005000000000004A0020000400200001B +:10D82000020420000004401100004000200000001D +:10D830000000400000000000000040001000000058 +:10D84000210000C0100010C0100000400040204027 +:10D850002100000000000004000240000000000061 +:10D860000002000000000000000000000000004076 +:10D8700010400000000000004000410400000000D3 +:10D8800000000084000000000090009000080000EC +:10D8900000400000000200004002000000020004FE +:10D8A000000200000004410200840000000000406B +:10D8B0001000000000000000000000000000000058 +:10D8C00000100008000000000200040002008200B6 +:10D8D00000000000020000400000000000400000C6 +:10D8E0000000900000400000900000000040000098 +:10D8F00000000000000000400000020400000000E2 +:10D900000000000000000000000004001000020001 +:10D9100000000000000000400000000002000200C3 +:10D9200000000200000000000000080000000000ED +:10D9300000000000000000000000000000000008DF +:10D9400000080000000000000000041000000000BB +:10D950000000000000000400000000000008008437 +:10D9600000840008000800000000001000000040D3 +:10D97000000000000000000000000000000000881F +:10D9800000000010004000840000000800000010AB +:10D990000008000000000000000002000000000875 +:10D9A0000000000800000002000000020210000851 +:10D9B000008400000000000400000000000090004F +:10D9C0000000000000000000000040030000840090 +:10D9D0001000040002008800040000009000902164 +:10D9E0002000400840204000000000000003000824 +:10D9F00000080021900090000000000000000000DE +:10DA000000084000000802000000000000000200C2 +:10DA10000400000002000400902100030000000048 +:10DA200000000000020000000008000040000000AC +:10DA3000004000000000000000000488118800027F +:10DA400004080440000000000400410041000004FC +:10DA500000A0000041A0020000004000400040A0E3 +:10DA6000410000200000000000084088410800102C +:10DA700000000000000000000000000000000000A6 +:10DA8000001000000000030040000800000000003B +:10DA900000000000008200000000000800001108E3 +:10DAA000000000A000080002000400040084000040 +:10DAB00000A0002000040000000000A00000000002 +:10DAC00000000000000000400000000200400000D4 +:10DAD00000000000000000400040C04000110011A4 +:10DAE00000400040000000000004000000000004AE +:10DAF00000000000001104000009000900000000FF +:10DB00000002000000000000000000000000000013 +:10DB1000A0090000004000000040000000000800D4 +:10DB20000000000900000000004000040040040064 +:10DB300000400000004008000000004000004000DD +:10DB400000000000201000000000000000000004A1 +:10DB5000000000100000000000880000000000002D +:10DB600000000000000000000000000000000000B5 +:10DB700000000000000000000000000000000000A5 +:10DB80000000000400100000000000000000000081 +:10DB90000000000041000000000000000000000044 +:10DBA00000000000000000000000099000000000DC +:10DBB0000000000000000000000000000000100055 +:10DBC000000000000000000000000800100000003D +:10DBD00004000000100000000440000000000000ED +:10DBE000000000000000000000000000080000002D +:10DBF00000000000000000000008002000000000FD +:10DC00000000000000000000000000000000000014 +:10DC100010000000000000000000000000000000F4 +:10DC200000000000000000000040000000000000B4 +:10DC300000040000000000000000000000000000E0 +:10DC400000000000090000001100000802000008A8 +:10DC5000000809000000020800001008052008A0C4 +:10DC6000044000001000100000A021A00084050066 +:10DC70000300020000000000110009000800041069 +:10DC8000040200000000000000000000000000008E +:10DC90000000000000A008200008000800000000AC +:10DCA0000000004000000308008411400200000052 +:10DCB0000000008403000088000400400000000011 +:10DCC0000000000000000000000000000000000054 :10DCD0000000000000000000000000000000000044 -:10DCE0000000000000000000002100000000000013 -:10DCF00084000000000000000000000000000000A0 +:10DCE0000000200010000000000400000000000000 +:10DCF0000000000000000003000000000000000021 :10DD00000000000000000000000000000000000013 -:10DD100000000000000000000000000800000000FB -:10DD200000000021000000000000000000000000D2 -:10DD300000000000000000000000000000000000E3 -:10DD4000000000000000000008002000000020404B -:10DD50000000000020C0110020000002200400028A -:10DD6000114009000200000000000000000008004F -:10DD70000800049000000000410041021000000073 -:10DD8000108808C010000000000000000000000023 -:10DD900000000000080000001100008800000000E2 -:10DDA00009002000400020000000000000000000EA -:10DDB0000000000210000000000005000500000047 -:10DDC000000000000004000000000000000000004F +:10DD100008000000000000000000000000000000FB +:10DD200000000000000000000000000000000000F3 +:10DD300000000008000000000000000000210010AA +:10DD40000000000000000000000000020000400091 +:10DD50000010000040000000000000000000002053 +:10DD60001188208400000004000000002100000051 +:10DD700000000000000000000000000000A0000003 +:10DD800011880010020400002000000000020000C2 +:10DD90000000000000000400050000000004200056 +:10DDA0000000110000000000000020000000400002 +:10DDB000000000000008000000000000000000005B +:10DDC0000000000000000000000000000000000053 :10DDD0000000000000000000000000000000000043 :10DDE0000000000000000000000000000000000033 :10DDF0000000000000000000000000000000000023 @@ -106126,439 +106126,439 @@ :10E7300000000000000000000000000000000000D9 :10E7400000000000000000000000000000000000C9 :10E7500000000000000000000000000000000000B9 -:10E760000000000000000000000000000000200089 -:10E7700088910083C08420000000820020002000D7 -:10E78000000088000004A18020002000C080A011AB -:10E7900000000002000200004000C04040002100D4 -:10E7A000000020000004C020018020042004000399 -:10E7B000820000000000000000008800000000004F -:10E7C0000080000000008800000400042000001009 -:10E7D000000000000011040000040000820000009E -:10E7E0000000000000000104000000000003000021 -:10E7F00000000002000240020002000000020508C2 -:10E8000000020090009040002010800009000904E0 -:10E8100041C00902040000820000000040A0000284 -:10E820004000000200900000002140048003000529 -:10E8300000000000000000000000000000000000D8 -:10E8400000000020000000000000000100030000A4 -:10E8500000010000000000000000000100000000B6 -:10E86000000000020000000020000000000000A0E6 -:10E8700000000200000002080800900000000800EC -:10E88000880000802004840400040102048402053E -:10E890009109000200049008001000040202409058 -:10E8A000200800100840000320800004200084009D -:10E8B00020030000000040400082000002900000A1 -:10E8C0000000080200900400008240A02000001018 -:10E8D000020402904020048000000020001020026A -:10E8E0000800008000820000880000020802024048 -:10E8F000004020800000400205C0000000820000AF -:10E9000000084100090480010209000120838011F0 -:10E9100040000482000100000040000100024101AB -:10E9200080028204400900820008C0100000C190EB -:10E93000110482840000000880C10011008240039D -:10E940002082008200850003800000218011800267 -:10E95000000000110040808980400000000902058D -:10E960000001008400020005000000000083800117 -:10E97000000100008002000088000000402190405B -:10E980001000020402001008002184000011084158 -:10E990000200050000210000C0210000A0091003B2 -:10E9A00000080040202100410011C0008210040234 -:10E9B00004004020100500000021000900000000B4 -:10E9C000040800000000000800100000080091008A -:10E9D000000000000100880800000090408900034A -:10E9E0004004408401834010200800000800000417 -:10E9F0008800900001099100000000000020000044 -:10EA000000000000040000000204009004000090D8 -:10EA10008000000020000988400000044100000040 -:10EA2000410000000000880000000000000000001D -:10EA3000000100004001000000000088000000000C -:10EA400000400000000008000400080000008500ED -:10EA500002000000000008000300000000050004A0 -:10EA60000084000188210404000180080000800067 -:10EA700000090000000020002000C02100008240AA -:10EA8000820000110005024102050089A000A0409B -:10EA90000911000400094000048808050004001062 -:10EAA00084040800C0090840C10900C1000000003A -:10EAB000000808000905088000000000C0000000F0 -:10EAC0002000400082050000000008400000001007 -:10EAD000080000108209C02100092084000084047D -:10EAE000A0042110000000008800C0C00000000049 -:10EAF00000040000C000000208000000200008829E -:10EB0000002120840084042020C00200204041080D -:10EB100010004008108400A009109004210000A0FB -:10EB2000030110A01108000003004088000200004B -:10EB300020000082000820400004000000000800BF -:10EB40000000200400000000000000000584100008 -:10EB50000201200400010000200000000804080059 -:10EB600021850301840141000300410000044100AC -:10EB70000000210000000000000000202100000033 -:10EB8000040000004000A0088400080000002000ED -:10EB90000800080000000203000020030800A00590 -:10EBA000080840000808C00084048208029040035E -:10EBB00040004000000800030402001182850000AC -:10EBC0000000000000000008000000048241000076 -:10EBD00000000000820000000221000000218200ED -:10EBE000A000201020202100C000C0008404821159 -:10EBF0000004A004210008840000000000000000C0 -:10EC00004000000210908020100000000000002052 -:10EC100000000000000005028000000080000000ED -:10EC20004000000080000200000000000000000220 -:10EC30000000800000000000000000000000002034 -:10EC40000000410000000000000000000000000083 -:10EC50000000080000A00900000000000000000003 -:10EC6000000000A080018000A020090000000083B7 -:10EC7000000000050001A000000509000000009050 -:10EC800000000200000900000080002104040200CE -:10EC900000219010004000009040082100084088AA -:10ECA000840084030004000082034090900000214F -:10ECB0009000024084094004104100000020000838 -:10ECC00000200000000000082002000200050020D3 -:10ECD000080000000808020020000008080921219F -:10ECE000040940008420A0042080850004008209DB -:10ECF000880004050000A000000020400000000083 -:10ED00000000000003880388000008100408009039 -:10ED100011041100200121A021842000200002C044 -:10ED2000030403C000080300418241004110008237 -:10ED300000000900880004A0000000000000008519 -:10ED40000000090800000000000020210001000070 -:10ED50001100000800000000008200000000000018 -:10ED600020042100200000000001802020049000E9 -:10ED70001102202083004100000000002101000258 -:10ED800040000000090000010801400000010000EF -:10ED90000000000000000000010184010201A00049 -:10EDA0008200018304840000400100010000000093 -:10EDB0000001000000002004000991A0C00200082A -:10EDC00000014000004000000000000020000000A2 -:10EDD00000000000000000010000000004880001A5 -:10EDE000011005200505008500A0000085000088B1 -:10EDF00000009100010000000102A0200020028517 -:10EE00000000010100000000401008038000001015 -:10EE100000000000000000000003210804080008B2 -:10EE20000000000004824009000080030008002068 -:10EE30000009000300090010000810A10208009159 -:10EE400020020008850400050000000010000000FA -:10EE500000000000004000050008000000008040A5 -:10EE60000020098283808890000400911041820371 -:10EE70000002004082034011002109000085054086 -:10EE8000800800030310400900000800212003004F -:10EE900003830000000000000000000910002011A2 -:10EEA0004041800300118020000005002100C020A7 -:10EEB0000390000000000300000500808200108025 -:10EEC0001020030005001000032000008000100047 -:10EED00003000000000000000000000080000900A6 -:10EEE000C08400008280800305822003000010415E -:10EEF0000591830300850000800880008005804123 -:10EF00008083000080008000000380000140A10198 -:10EF100000000005000000000000000000200100CB -:10EF2000000000010800040110010210010021008E -:10EF30000400010400200000000000400002020064 -:10EF400089A00000008200008400C09000000882B8 -:10EF500001000000900000000000000000004000E0 -:10EF60000000A011A0000840020900A001850000D7 -:10EF70000091019108082002080804008282020022 -:10EF8000024190A140000200020000000484000140 -:10EF9000000000010000000002000000000000016D -:10EFA0000400100300C00282C00800C000A000409E -:10EFB000010805040000000000000001000000A19D -:10EFC00000A001A1080804010041008900400000E0 -:10EFD0000001000900840010000000000000000192 -:10EFE000000200000821001008010108020889023F -:10EFF0000000890020000300000020002100000024 -:10F00000C0008200009020A000000000000000006E -:10F01000000800020008000300008000000000005B -:10F020000021104110A111008080008003000580A4 -:10F030000080080021800000002009000021090054 -:10F04000000220A1052111908020202040200008EE -:10F050000000000800880011008000040000000586 -:10F06000001009800000821000008002208005113D -:10F070000910110003001003910540110340100016 -:10F0800005008020000500088580030000050000C1 -:10F09000401088800280080003410000000000004A -:10F0A00000002003A00041021010000500880000AD -:10F0B0000000020020030900030321800200000079 -:10F0C000401190A111801000C00021800241080071 -:10F0D00010410000040000000400000000000000D7 -:10F0E0008000000000000000000000008080880018 -:10F0F0008580040490000005080085051021218505 -:10F1000000800000002000808000000000008000DF -:10F110000000000009A008080182000000000000B3 -:10F120000000000088C008000001C000000084C189 -:10F1300000909000004000000090000103040100D6 -:10F140000800000105C120044100040091020101F2 -:10F15000404083010000000000000184000008001E -:10F160000000040040000088400204C000000804C1 -:10F17000400004848901200090002000900041019B -:10F1800088020010A00002012020202084008800B6 -:10F1900004000000C00000000000000000000000AB -:10F1A000000000000000000000E00000000A0081F4 -:10F1B00000E0070041000000000000000000000027 -:10F1C00000E000000000000000E00000420000003D -:10F1D00000E00700424100000000000000000000C5 -:10F1E0000000000000000000000000000700000018 -:10F1F000000000E000000000000000E00700410007 -:10F20000000000E007000000000000E000006000D7 -:10F21000000000E00000000000FF00FF0000000010 -:10F22000000000000000000000C33CFFFFFF00FFE3 -:10F23000000000000008FFFF00000000C3F0C3F062 -:10F2400000000F0F000000000282C2C200C100C017 -:10F2500030303F3F00FFF0F000000000000000F001 -:10F26000FFF00C0CFCFC00000000AAF0AAF0C3FFA9 -:10F27000C300F5F5050500F00FFFAE862C04000075 -:10F28000000000FF3C3C0000000055C355C300FFD8 -:10F2900000FF003CFF3C000000000000FFFF0000FA -:10F2A0000000000000000000000000C33CFF000060 -:10F2B00000FF3CFF3CFF0000FFFF00000000C3F028 -:10F2C000C3F000000F0F000000000282C2C200C0A5 -:10F2D00000C030303F3F00FFF0F0000000000000B1 -:10F2E00000F0FFF00C0CFCFC00000000AAF0AAF0FB -:10F2F000C3FFC3000C000C0000F00FFFEFC76D450B -:10F300000000000000FF3C3C0000000000000F0077 -:10F310000000FFFF003CFF3C000000000000000078 -:10F32000A0A0A0A00000000000000000000000005D -:10F3300000000000CFCFCFCF000010000000000081 -:10F340000FFF0FFF0000000000000000FD010101A1 -:10F35000F505F505FFFF3C3CFF00FF000000000045 -:10F360000000FFFF00000000000000000000F0F0BF -:10F37000F0F0BEBE828283B3C3F30C0C0C0CEBEB3B -:10F3800041410000FFFF000000001EFF1EAA03F322 -:10F3900003F37D7DCF0C000000003F3F030300001E -:10F3A0000000AAAAAAAA00000000000000000000B5 -:10F3B0000000000000000C0C0C0C0000000000001D -:10F3C00000000F000F000000000000000000FD0121 -:10F3D0000101F505F505C3C30000FFFF00000000B3 -:10F3E000000000003C3C3C3C00000000000000002D -:10F3F000F0F0F0F000FF00FF8FBFCFFFFCFCFCFC43 -:10F40000EBEB41410000FFFF000000001E551E0015 -:10F41000AFAFFFFF4141CF0C000000003F3F0303AF -:10F4200080610006000D00000000000000000000E8 -:10F4300000610007001D00000061003F001D00A0EA +:10E760000000000000000000000000000000A10008 +:10E77000000000800000088000000080010200000E +:10E7800008800000008088000190000000830000E5 +:10E7900083000200C080210082000080020000008F +:10E7A00000000000400020000000040004000003FE +:10E7B0004000040320002000000004004004000387 +:10E7C00002000000200400000000000020002004DF +:10E7D0002000200020002000400220002000000433 +:10E7E00040000002410440004000000000042004FA +:10E7F0004000204000082140C110009040404041AE +:10E8000000908002009000080040080840020002CA +:10E81000004010004002400240000000400840005C +:10E8200000C00000000000000002210080C0804005 +:10E830000000000000C01100000000000002000005 +:10E8400000028000000080000000000000002102A3 +:10E8500000000002008200020004004000400002AC +:10E8600000020082400804020008100000040000BA +:10E87000210200001000000000008400A10005003B +:10E88000A000000003004000A000000000000205FE +:10E8900000410200004000020000000000000000F3 +:10E8A0000000000000000003000009000100040057 +:10E8B0000100000002000000C00000000200000093 +:10E8C00004000200010002000141200000000000DD +:10E8D0008210000020400900000000200000040019 +:10E8E00082000000014082000000000000000805D6 +:10E8F00020000000000000000000020002044000B0 +:10E9000002000200000040000200080000000200B7 +:10E9100000000000090000820009038200000200DC +:10E9200000000410000020000000000002080200A7 +:10E930000008020800000008000800084008200441 +:10E94000000800080004080403000800840003080D +:10E9500000000009020880080208020241090000C4 +:10E96000400802840000080041C0000000000008C8 +:10E9700000000010000800008800100500000000E2 +:10E980000140000040080000000040210209880208 +:10E9900000210208880800088408000820081000E8 +:10E9A000100820080000000804000000000000001B +:10E9B0000000C0090000000000000000000000008E +:10E9C0000000000000000000000500000000004002 +:10E9D00004000000000000000000004100000000F2 +:10E9E0000400000500000008000000000000000016 +:10E9F000000000000408010000000000000000A06A +:10EA00000000400000A0110000000800000080008D +:10EA100000000000000000000000000020000000D6 +:10EA200000000000000000080000000000000000DE +:10EA300000000000000011000000000000000000C5 +:10EA40000090040000000000000000000000000032 +:10EA500000000000000000000000000000000000B6 +:10EA60000000000041000000000000000040000025 +:10EA700000000000000000000800840020000840A2 +:10EA800082000404000000400010C0058400000063 +:10EA900000880000C0118800004000000011000044 +:10EAA00000000040820020000040840000000000C0 +:10EAB000000504042104118401020000000000008C +:10EAC000201000001020822082000800C1000103F5 +:10EAD00091400100080900400040A00004090184A1 +:10EAE000828405C0A000000084200000082040208F +:10EAF0000820044082000000080004001004080000 +:10EB00000000200000A000040000000020A000C0C1 +:10EB10001000000900000000000000100000008448 +:10EB2000000400000000000000A0000800400000F9 +:10EB300000000000900004000440040100000000F8 +:10EB40000800000109A00300080000880000200060 +:10EB5000200020002000030010A005000004C100D8 +:10EB600020040304A0040000000000000400004191 +:10EB700040050301000000000000050000008400C3 +:10EB800000008200001100000800A04140020000C7 +:10EB90002000100002000000000000000000000043 +:10EBA000000000200004000400000000000000201D +:10EBB00000008400A000840010000000000000009D +:10EBC000A000000000000000820010000000100003 +:10EBD0004000000000002000000210009000000033 +:10EBE00000000000200000008200A00000000000E3 +:10EBF00000000000000000000000000040000000D5 +:10EC000040000008000800A0000000000000800193 +:10EC100000000000000003000000000040000000B1 +:10EC200000000000000400200000000000000000C0 +:10EC30000000002000000020000000000020402014 +:10EC400000000000000000000000000000000000C4 +:10EC50000000000000000000800000010000000033 +:10EC600000A00000008880000002000000000000FA +:10EC7000000000000000008800000000000000000C +:10EC80000000828000002100080801000400010447 +:10EC9000042100000121000000210008000088215B +:10ECA00000000000820000000000000400030000DB +:10ECB00010000000100002000200058000000000AB +:10ECC00001400000002100000000000020000400BE +:10ECD0000000000001002000018009000040010048 +:10ECE000008000002184048405200180020010209F +:10ECF000A00082000400041000000480A0000000B6 +:10ED00008200000000020000100000000800000067 +:10ED100002002000020040A00000000020401190EE +:10ED20000004098208A000040088200000082000D8 +:10ED3000004000080090000000000000C02000001B +:10ED400000000200000000000800000000A0040015 +:10ED50001000000041002000A1082040080010849D +:10ED60000800031000008421C12184010820200034 +:10ED7000000000000090A14080000000A1200000E1 +:10ED800000000000000000014001000000004005FC +:10ED90000102A004A0A100400402020200400008F9 +:10EDA0000084881000000000000020000000000126 +:10EDB000000000010001000000000000000090C001 +:10EDC000400500050485000000000000000002006E +:10EDD000000000000000000020000000010088008A +:10EDE00008A0000900A04008010020000000000069 +:10EDF0000000000000000000000000000000000013 +:10EE00000000000000000000004100210005000398 +:10EE100080820409008280A14000A18080800000DF +:10EE200000001100000000000000080000000000C9 +:10EE30000041000500080010000000000000000074 +:10EE400020A0218300888040000000000000000016 +:10EE50008000000000000000000000000000200012 +:10EE600000000080008800A0002011008000400009 +:10EE7000000000000000000000000300000000008F +:10EE80000000000000000000000020001100080049 +:10EE9000030240000310108420004000030009001A +:10EEA0000321000000000000000000001000080026 +:10EEB0000000000000000000000000000000000052 +:10EEC00000008000000300808000000000000000BF +:10EED000000000000000000000000000001000081A +:10EEE00000100000000000088080800000408000CA +:10EEF00000208000000000000000000000000080F2 +:10EF00000000000000000000000080000020000061 +:10EF1000010001000100010101A101C00020000069 +:10EF200000000101000000000000000000000100DE +:10EF300000000000000000000000000000000000D1 +:10EF400000000000080040000882C090000000009F +:10EF500000000000000000000000000000000001B0 +:10EF600090001089000040004001A0A00200200095 +:10EF70000888A000C0880000000000000000000019 +:10EF8000002000880040900008009000040000006D +:10EF90000100850000001002004002058208020006 +:10EFA000000000000200A00100000001820100003A +:10EFB000000000000001000001000000000000004F +:10EFC000000000000000A009000400C002C1000011 +:10EFD00000000010002000A0000000000000000061 +:10EFE00000040202004001C0409000201040A090A8 +:10EFF00001002000200000000000000000000000D0 +:10F0000000000000040000000000000000000000FC +:10F010000000100021000000008241A085A1808333 +:10F0200000090040004180050010000300408041BD +:10F030000020001100050041000010004000000009 +:10F0400000000000000000000008000000048090A4 +:10F0500000000000000000000000000000000000B0 +:10F0600000000080800000002080800000800900F7 +:10F070008000410000008000080003000000000044 +:10F0800000004000000080000000000000000000C0 +:10F0900000001180080004000911A1008041200037 +:10F0A000A002418320402100030800000008000066 +:10F0B00000000080001000000003000000000000BD +:10F0C00000000000000000000000804000038000FD +:10F0D0000000000000000000000000000000000030 +:10F0E0000000000080000080008000008008808810 +:10F0F0000000800000000040000000000000000050 +:10F10000000000008000804080008000002000801F +:10F11000008000000040000001000000C104A000C9 +:10F120004000040101C000000100010100000000D6 +:10F1300000000000000800000000000100000000C6 +:10F14000000000000000000000000000C00140A01E +:10F15000402040000000000000000000000000000F +:10F16000000000000000C00002048402C00008008B +:10F1700004020882820000000004009000000000E9 +:10F180000000000000000400040002000400000071 +:10F19000000400400000000000000000000000002B +:10F1A00000000000000000000000000060000000FF +:10F1B000000000000000000000000000000000004F +:10F1C000000000000000000000000000000000003F +:10F1D0000000070000000000000000000000000028 +:10F1E0000000000000000000000000E0000000003F +:10F1F0000000000000000000000000E007008200A6 +:10F2000000000000000000000000000007000000F7 +:10F2100000000000000000000000000000000000EE +:10F220003C3CF0F0555F555000000000000000002D +:10F2300000000000000000000000000000000000CE +:10F2400000000000000000000000000000000000BE +:10F25000BE14F5F5AAF03CFF00000000000000001D +:10F26000FFFF0000000000000000F0AA3CFFA0AF7C +:10F27000FCFC0000E31C0080000000000000000017 +:10F280000000000000000000000000AA00E80000EC +:10F29000000000000000000000000000000000006E +:10F2A0000000555500FF5353535300000000000069 +:10F2B000000000000000000000000000000000004E +:10F2C000000000000000000000000000000000003E +:10F2D0000000BE14A0A0AAF03C0000000000000046 +:10F2E000F000F0FF0000000000000000F0AA3C0069 +:10F2F000A0AF0C0C431CA0000000000000000000A8 +:10F3000000000000000000000000000000AA00E86B +:10F3100000000000000000000000000000000000ED +:10F3200000000000FFF77D750000000055553F35D7 +:10F330000000000055FF5500000000000000000024 +:10F3400000000000000000000000000000000000BD +:10F35000000000003C3C0F0FFCFCF5050000000025 +:10F36000000000000000000000000000000000009D +:10F37000000005AA05AA00AA0000AAAAA6AA0000E1 +:10F380000000FF551E1E00000000000000000000ED +:10F390000000000000000000000004100140000018 +:10F3A0000000000000008A8208000000000055559F +:10F3B000303500000000550F550F00000000000020 +:10F3C000000000000000000000000000000000003D +:10F3D0000000000000005555FF000C0CF505000072 +:10F3E000000000000000000000000000000000001D +:10F3F00000000000AFAAAFAAA2080000555555555D +:10F4000000000000AA001E1E000000000000000016 +:10F410000000000000000000000000000820028042 +:10F4200000610006000D0000A0610006000D000054 +:10F4300000614006000D000000610006000D0000A4 :10F4400000610006000D000000610006000D0000D4 -:10F4500000610007001900000061000D00010000BC -:10F46000000000610006000D000100610006000DB3 -:10F47000000005614006050D00000061300100112B -:10F48000000005610A0D0501000105610A0F050D67 -:10F4900000A000613007001D000000610007000DA2 -:10F4A0000001F00A0A0A3C413C4100000000000053 -:10F4B00000000F0F0F0FC3C3C3C300000000000004 -:10F4C000000030F03CFF00000000FF143C1400C3BB -:10F4D00000C33CFF3DFF933CC33CFF00FF00FFBF68 -:10F4E00000100000F5F50505000000000000000018 -:10F4F000003CFF3C00000000005500555C5F5C5F75 -:10F5000028287D7D00000000FFAA0000FF55AA000A -:10F51000FCFCFCFC00000000303F303F000000001D -:10F52000F0F0FFFFF0320A0A30453C4100000000D5 -:10F53000000000000C000800C1C3C1C300000000AF -:10F5400000000000F3F0FFFF00000000FFFF3C3C64 -:10F5500000C300C33CFF38FA963CC63C5454FFFF3E -:10F56000FFBF00100000F5F50505C500C50000004F -:10F570000000003CFF3C00000000005500555053C7 -:10F580005053AA00FF550000C0C0AAAA0000FF55B2 -:10F59000AA000C0C0C0C00000000303F303F0000B3 -:10F5A000000000000F0F0000003C0F0F0F4D000087 -:10F5B000000000000000AAAA30F30F0F0F0F3F3F1A -:10F5C0003F3F00000000F0D0F0D000000505001023 -:10F5D0000000AAAAAAAA00EB00EF000F0000A0E01A -:10F5E000AAEB3C3C3CBC0000000000000FFF0FFFFA -:10F5F0003F303F3000000000FCFCFCFCF0FFF0FF5F -:10F60000D4D4D4D43CAA3CFFA082F582500055004B -:10F61000FF1E551E000000000F3C0F3C00000000C4 -:10F620000F0FFF00000000000000003C0F550F4DC1 -:10F630000000000000000000FFFF0000000A0000C2 -:10F640003030303000000000300030000000150580 -:10F650000010000000AA00AA00EF00EF000F00FF5A -:10F66000B0F0BEFF3CFC3CFC0000000000000FFFBF -:10F670000FFF3F303F30000000000C0C0C0CF0007E -:10F68000F000FFFF00003C003C55A0D7F5D750002C -:10F690005500AA1E001E000000000F3C0F3C000099 -:10F6A00000000F0FFF000000000020008900840010 -:10F6B0002180400020100002101100008440001141 -:10F6C00010041040204084400041A0801100C00080 -:10F6D000000000002100000020100002001088003F -:10F6E0002003200020820820C00000034000C0004A -:10F6F0002084A0108402200000000205C000100039 -:10F700008800000000200500011088042000880007 -:10F71000009020800020200088A02011000004001C -:10F720008400000000000000000400004000040409 -:10F73000200004200002009140010002400020024D -:10F740000000000100901084210200400404209079 -:10F75000000040004000040000824004000100015D -:10F7600000900000000004108003408200000000B0 -:10F77000000000200003000100004000800800009D -:10F78000000000000000000304000401100000005D -:10F79000200000050002000100000003000000003E -:10F7A0000000000000C000020000002100000480F2 -:10F7B000908284800220020000400000000002903D -:10F7C0000490024100208400022082000220008078 -:10F7D0000204022100040080020040000400080826 -:10F7E0009010900440210100002000A000040000BF -:10F7F000080000000200000400400880200002020F -:10F80000088000000082900402200202844002402E -:10F8100020808480208082804100008040A0000001 -:10F82000840002828400000288000000900008C06A -:10F8300083200021002089010000000000902000AA -:10F840000004800400104185004000110008008978 -:10F850002004000900100083201000840084800030 -:10F8600084400008000880080884008400030083A6 -:10F870000000820000080008008800820040850027 -:10F88000000900400084004141840011008500828D -:10F8900000118002000280020010840000408011EC -:10F8A00000840508001100080205008800000040DF -:10F8B0008040020090004008010002000208008021 -:10F8C0000200024140084000020040408809080050 -:10F8D00040400441102100080405400810200002A7 -:10F8E0000008000000210040002104004088401072 -:10F8F00000100000000800214011890800030008E2 -:10F90000400820C0000500100003000301000010A3 -:10F91000A00001084000C0050008C0080010001049 -:10F9200088114002000000200000080820000000AC -:10F93000084110100008040000004000080040408A -:10F940002110400000400000000008C005000384B2 -:10F9500003A08508404041000488000821000301FD -:10F96000414021201000030000A105008008800212 -:10F97000400800080000000000208000048400907F -:10F980000000850080020000000900A000002000A7 -:10F9900009010800208411002100080000C00805AA -:10F9A000000103849001000000000000800080003E -:10F9B00008008000000982410800824190058241D0 -:10F9C0004000C00540000821004108081008828955 -:10F9D0004000848000008240042008008200C000B3 -:10F9E000000090024009004184800400044000406F -:10F9F000000040400003000003000800C180000038 -:10FA0000C00910008441A0020000C00008000800E6 -:10FA1000820908804108A0C000000040A0008411B5 -:10FA20004000900000408802080040008240000032 -:10FA3000414000110000080011908904020000827A -:10FA4000210041004104008800080040008421009A -:10FA500021104088111000A0114111200020100237 -:10FA600000000000000080001102004000C010846F -:10FA700000110000000300000000880000000410D6 -:10FA800000000010000000C00801100800820908F2 -:10FA900000000000002020080003020040A00088B1 -:10FAA00000000800008803002101000000000000A1 -:10FAB000000020C000000000000090200003A00211 -:10FAC00082114008A01100088210A0000400C0416B -:10FAD00084020000A04008000008000408000000A4 -:10FAE0002040080804081000100200044011900093 -:10FAF0000040000040111000A0200000020008801B -:10FB000002214000000000004000000582200000AB -:10FB1000A000000808028240050282200020820026 -:10FB2000C020000400000004040001111000A00027 -:10FB30000800000001004085010001842040000809 -:10FB40000500050400000000000000000382909002 -:10FB500000A0002000A00000048402A000200000FB -:10FB6000040208C000008000000000001000040033 -:10FB7000412000000300800008840090000008007D -:10FB80008020032021000040000011000000000040 -:10FB900003840000009000081101200000A02188CB -:10FBA0000900002000C0040010000004400000A074 -:10FBB0004100000004002000800420002003A080F9 -:10FBC000020584000088400088410000C0C1820016 -:10FBD00082004109C0000008008800044000900233 -:10FBE00020118209201000410002000900210002BA -:10FBF000000004038221010000001009822000009F -:10FC000000034000002082200000002141C100408C -:10FC1000000000001000400511032002880008A029 -:10FC20000003820200004041000008028800000238 -:10FC30004000042040090000000000000000000017 -:10FC40000010000000900010000000020000000200 -:10FC500011001100088240C00004202040021190D1 -:10FC6000030091000020C0024000000100021102C8 -:10FC7000410008000900000004000000000000012D -:10FC800000000000114000000005000000002002FC -:10FC9000000003000084000080002008C00008026B -:10FCA000001100002102000000000000000100001F -:10FCB0000800000008020000000000000000020030 -:10FCC0000000010000900400000010820040C08885 -:10FCD00002C0400000910008101188A002900402A8 -:10FCE000108200000001C0000000210500822110E8 -:10FCF000C0840100000008C0000800A000402004EB -:10FD00000000000000A09020009084880089000579 -:10FD1000000800050008001000000008832000A073 -:10FD200003100000020000880000100203A0012060 -:10FD30004008A001100000820004A01001880220E9 -:10FD400001A0009010000000800000009000210041 -:10FD5000008000008000008809C000A00080908022 -:10FD6000808000800003101089020005211040856A -:10FD700021008080200021108000009100800380FD -:10FD80004000000000000080800000000000002013 -:10FD900000A1004000C00080008000000080210021 -:10FDA0002110402000208000004005080005A080B0 -:10FDB00041800000000800000000008000801080EA -:10FDC00000800200000020801080400203A1080093 -:10FDD00011410500200091009000C0821080800039 -:10FDE00080118005808041001100041111084080BD -:10FDF0009041051120210000001000008000090042 -:10FE00000808208502000000820002C0830510005F -:10FE10002000A1054000840020000800050000002B -:10FE200040880200000510109000400003004009C7 -:10FE3000000009108080028800000000800000009F -:10FE4000028902A105892003014002200189901145 -:10FE50008300A00189108308880082200208219075 -:10FE600040000200A0050490009000000100000086 -:10FE7000410820009040C089000000010088020075 -:10FE800000200001000400C000004000A00809009C -:10FE9000840209200308100802000000010000008D -:10FEA000000000A10800A00408008808C00020008D -:10FEB000880000822001A084400582000000A0008C -:10FEC00000004102400282A004011001000008016C -:10FED0000000C0410004088301A14090000802C155 -:10FEE0004005C041004020C004080000000001019E -:10FEF0000000409000219011080300000001000064 -:10FF0000090100C10001820100000000000200A000 -:10FF10000808C090C000000005009100000000101B -:10FF200000051021820310A00201C0004000000063 -:10FF3000100800014002000041210821001000913A -:10FF40000082004004040200A00282028802000431 -:10FF500000210040808200A000A0040280000590E3 -:10FF6000802140A080400091000390C00009210939 -:10FF7000052110028011001000A1809000030003F1 -:10FF8000001020100010000300211003000000806A -:10FF90000080008000008000410002000902000093 -:10FFA00000110088800209A180A1802191008010A9 -:10FFB0000310C003000500800040212100030080E1 -:10FFC000000200040002008500418088898005004D -:10FFD00020020000050200100089008000039080CC -:10FFE000C0802000C01080000082008080000810C7 -:10FFF00009002100050841A14020410040040011F2 +:10F4500000000000000000001061200E004D0008B8 +:10F46000000000000000000000000000000000009C +:10F470000000A0610007009D000000610006000D73 +:10F48000000005610A0F050D00A500000000000046 +:10F49000000005000A08050000A0000000000000B0 +:10F4A0000000FDFDFF5500000000CFCF0C0C000058 +:10F4B00043415F0ABEBEF0F0F0F0000000000055CE +:10F4C0000FC30000000000C30F5500000000000043 +:10F4D000000000000000000000000000000000FF2D +:10F4E00000FF00000000000000000000000000001D +:10F4F000000000000000000000000000000000000C +:10F5000000000000000000000000000000000000FB +:10F5100000000000000000000000000000000000EB +:10F52000000000000808AA0000000000CFCF0C0C6B +:10F53000000081815F0A1414A028F57D00000000FE +:10F54000FF550FC300000000FFC30F55000000006F +:10F5500000000000000000000000000000000000AB +:10F560003C3C00FF00000000000000000000000024 +:10F57000000000000000000000000000000000008B +:10F58000000000000000000000000000000000007B +:10F59000000000000000000000000000000000006B +:10F5A000000000000000BE14AFAF28E82BEBAF87CF +:10F5B0002D0500200000000000002AEA2AEA0000D1 +:10F5C00000000000000000000000FAFFFAFF3C3CD1 +:10F5D0000F0F000000000000000000000000C3C387 +:10F5E000C30F000000000000000000000000000049 +:10F5F000000000000000000000000000000000000B +:10F600000C030C03000000000000000000000000DC +:10F6100000000000000000000000000000000000EA +:10F620000000000000000000BE140505A8A8ABAB58 +:10F630008F8F0D0D00000000000000002828EBEB6C +:10F640000000000000000000000000000A000A00A6 +:10F65000FF00555500000000000000000000000001 +:10F66000C3C3C30F00000000000000000000000042 +:10F67000000000000000000000000000000000008A +:10F68000000030C030C0000000000000000000009A +:10F69000000000000000000000000000000000006A +:10F6A00000000000000000000000028000000000D8 +:10F6B0000000A0004000C080410000000000C00029 +:10F6C000000002080480C0000280028000030400E1 +:10F6D00000820010000500000104C00000000010BE +:10F6E000900000000000820088030003200000005A +:10F6F0002000008000008400000002002000840040 +:10F700008908400890008405000084000000000281 +:10F710000004100041022080A000400800002000EA +:10F72000C004880800840084000005040010004024 +:10F73000210000000590080221100890410041902E +:10F7400040400000C0018002009080048040000022 +:10F750000000001109854000004002004000000048 +:10F760002000000000000000000020000000050054 +:10F770000000000000100000000800024004000823 +:10F7800000000402008200004004009000020040DB +:10F79000004041000002044000024000200100023D +:10F7A0000800208400900004000410008801000973 +:10F7B00000201000004000000000000000000000D9 +:10F7C00000100000000004100100014003000200CE +:10F7D0008303010010090040000000400000000009 +:10F7E00002000000020000000000020000400000D3 +:10F7F0000000002002100000000084000000000053 +:10F8000008008400000000000000000820004140C3 +:10F8100010000000C01001104000400010404000E7 +:10F820000000020040800200008000C005800080CF +:10F8300000000001000000000000000202080000BB +:10F840000082000000000200808402000400844066 +:10F8500000100200100880881184004000C00000E1 +:10F86000000800001100000000002000000000005F +:10F870000000000000010009050000000008000071 +:10F8800002000008000800000000000800840008D2 +:10F890009008800000000209208380008008830017 +:10F8A00083084108000400200004000400108410B4 +:10F8B00000040005000500000011002100000020E8 +:10F8C0004000000340000000400000040000000071 +:10F8D000100010801000100000850010080404853E +:10F8E0000400020000000000000000080008000002 +:10F8F00000080000000000000000000802000000F6 +:10F900000400000000000000010004000411400099 +:10F9100000000108000900110080C009000000205B +:10F920000000040040004000000090100000200093 +:10F930000000000004A041000000080821001000A1 +:10F9400003000000000200000000000040A01000C2 +:10F9500003000800004000900000000808000308B1 +:10F96000882080A0030000040000210000000000A7 +:10F97000080800000000000000000000000009006E +:10F980000040000000000000000040009140100016 +:10F990000902100020010000000008100000000013 +:10F9A00003080000000400002100040000002020E3 +:10F9B000000005000800824000090000000000412E +:10F9C00000091009004082090000001100090540EB +:10F9D00008118904018084000100008001000000FA +:10F9E00000000000881100000000A00000000800D6 +:10F9F0000011000908090000900084028200000044 +:10FA000082000000C0008200010000C1000000C0B0 +:10FA1000404020C0210001910800C0000009A00062 +:10FA20008220840040004000001182000000400459 +:10FA30000800000000000020000009000000000095 +:10FA400000000204000011840200004002000000D7 +:10FA500090A000000201200408002084001010047F +:10FA600000000000008200000010410000000000C3 +:10FA70002000020000000000000000000504000259 +:10FA80000000110041001100110040002002038419 +:10FA9000090221008004C0004010210200022090D1 +:10FAA000008800C1200000000004000009002100BF +:10FAB0000088000040002000000100210000040038 +:10FAC0000000000000000000010004000000000031 +:10FAD00020000000080000000004000000114000A9 +:10FAE0000810002108008200000300000008001038 +:10FAF0000021080004004000000000000000040095 +:10FB00008200C000820084000000400040008400A9 +:10FB100088008400820420C1409100410011C0038C +:10FB20000000000000110000000000004000200064 +:10FB30001000080000050000C020C0000300000005 +:10FB40000008000021000800000004400008000038 +:10FB5000000000000000000004002121050000005A +:10FB6000000080012100800010000004000000005F +:10FB70000000000000000008080040020000000033 +:10FB80000000000000000000000000001000A002C3 +:10FB90000300004008000001800208040800000083 +:10FBA00000844020008400000000000000000000ED +:10FBB0000000002000200000080000010300820077 +:10FBC00000200000000000080008000800040000F9 +:10FBD0000000000008410000020088000000C00092 +:10FBE000000000000004000900218200084000001D +:10FBF00000040040002100000000000000000000A0 +:10FC000000000100000000000000000000004008AB +:10FC1000200084008280C0002000400010C182804B +:10FC200000000100010201000041400282000002C8 +:10FC3000080000110000000800008200100084216C +:10FC4000000800010000000000000000000000C0EB +:10FC50002000000000000000110000000000200053 +:10FC6000000000000004004000000000000000014F +:10FC7000002009000000000008040000000420002B +:10FC80000000000004040002050000A000000000C5 +:10FC900003A091021182000411008300A0880202D7 +:10FCA0000804000040404002020000000000000084 +:10FCB00000000000202000000000000000000040C4 +:10FCC000020000A0000400040008880000000000FA +:10FCD0009000000000000000000090C01085918599 +:10FCE000C010880101001001880108C0C002000294 +:10FCF00008100000000000000000000000000000EC +:10FD000000000000C002909000A0108200000000DF +:10FD1000000000004041A08208C002050301080461 +:10FD20008401200389A00340202082900101050066 +:10FD300082000000A140000000A090A0021000007E +:10FD40000300909000800000008000800000000010 +:10FD50000000800000000000000000000090A010E3 +:10FD60004008009080410409850500200080008043 +:10FD70000080808000000000000000000000000003 +:10FD80000000000000000380800000800080000070 +:10FD900000000000000090201102C010001082102E +:10FDA0000521850200C00980A08000008000084174 +:10FDB000211080410009A18000000000800080899E +:10FDC0000010021180840000000400800000000088 +:10FDD0008000000080800000000000000000100093 +:10FDE00010080500C1A1C00005000000208000002F +:10FDF0008003000080800000000000000000000080 +:10FE000000000000000000000000802100800000D1 +:10FE10000000000000000000A0802100A0041003EA +:10FE2000910221208002408509800540A0214121C6 +:10FE300002004100040810090000800300898000CE +:10FE40000800110000008080000000000008000091 +:10FE5000080002002000C0080000000000000000B0 +:10FE60008202C000A104C1A108000000A000C08857 +:10FE70000800100190848290000000000000000043 +:10FE8000000000000000000000000400900800A036 +:10FE90000000000000000000000002C00800850013 +:10FEA0008509A0910100A0C1A088C10208014021DC +:10FEB00021C100900000010100004000200100115C +:10FEC0009002410090000000900802000000000035 +:10FED0000000001000880088008200000000000080 +:10FEE000000040410003820411C000110188000598 +:10FEF00000C1041000C00090880200000000000053 +:10FF00000000000000000000000000000288001057 +:10FF1000C08802080000000000000000900101A15C +:10FF20000085C0090083831004820188A0910041EC +:10FF30000289C1C001010001A1010001404000A0EF +:10FF400090009000200400899009888880000000BB +:10FF50000000000000000080000000000000000021 +:10FF6000000000008088001041030888008440A140 +:10FF700004A100C00000000000000080000000009C +:10FF800000000000000000000000000000008000F1 +:10FF900000008000808000000000000000000008D9 +:10FFA000089041A190200020418340410284000537 +:10FFB0000082802183850240410885050820800059 +:10FFC00000808000000000900003002102048000F7 +:10FFD000800000000000000200020000000000009D +:10FFE000000000000000A191830820009141412100 +:10FFF000200810000304001080C080800000000072 :02000004001AE0 -:1000000080800000800090000000000009100000C7 -:1000100000008080000000020000A080108080406E -:100020000000000080000000A191210921000008CB -:100030002108108041A10810A1418802410003401D -:100040000000020002002000020010910500830859 -:1000500084000100C0C00001820302831040C00080 -:100060004108824089400301080010020884820090 -:10007000012000000100008288858911108810008D -:100080000200A020888202004100A00008000000B9 -:100090000000908840A0009000008800021090842A -:1000A00004012000000004000800111088401182A3 -:1000B0000800010000A00011000103A0059182903A -:1000C000010100000100002001000520A105904071 -:1000D0008301000000000700000000000000000095 -:1000E0004100000000E007000000000000000700E1 -:1000F0008400000000E00000002100000000070074 -:1001000000120000000000000000000000E00700F6 -:10011000000000000000000007000000000000E0F8 -:10012000000060000000000000000000000000E08F -:100130000700000A000000E00000000000000000CE -:10014000070050000000000000000000000000E078 -:1001500000000000F6F6060600000000003C003C2F -:100160001808FF0F18781E1E99F099F00000000083 -:10017000F9FF000000000000000000000F0FFFFF6B -:1001800080999899838281800000000066FF0F0F9C -:10019000C3C3C3C30000000000FF3C003C00420298 -:1001A000662600000000FCFC0C0CFFF000F01C1C9C -:1001B000101CE4E4E4E400000000FF66FF66F06663 -:1001C0000066FF66BD24000000000F000FFF06F66A -:1001D00006F6C3FF003CF6F60606000000008D8D13 -:1001E0000C0CDB0BFF0F18781E1E99F099C0EFE680 -:1001F000FFFF00DB0000000000000000000010D046 -:1002000010D0C0FFFCFFC3C2C1C0000000006600E8 -:100210000F0FC3C3C3C30000FF00FFFF00000F0F99 -:10022000DB9BFFBF00000000FCFC0C0CFFF000F0AB -:100230001C1C101CE4E4E4E40000000000660066FE -:10024000F066FF66DB4299000000000099C399C385 -:1002500003030000C3FF003C00000000000000009A +:1000000000000000000000000000000000000000F0 +:10001000800200400000800000000000000000009E +:100020002102100411804105C12108A09180408067 +:10003000858920A10380A011410821092100080918 +:1000400080000000000080001088094041800420EA +:1000500008000800820000000001000500200000E8 +:100060000000000000000000C1A040090382090157 +:100070000101001000880100C00008A090400200AB +:100080000000000000000000000000000000000070 +:100090000000400100000004020000000000000019 +:1000A0000000010301050084000003018240820872 +:1000B00005904009C0048804020101890000010084 +:1000C0000000C00002A088A008000003000000900B +:1000D0000000000000000700000000810000070091 +:1000E00000000000000000000000000000E0070029 +:1000F0000011000000E00700000000000000070001 +:1001000000000000000000000000000000000000EF +:100110000000000000810000070000110000000046 +:1001200000000000000000E007004106000000E0C1 +:1001300000008200000000E000000041000000001C +:10014000070000000000000007000000000000E0C1 +:10015000070000000900000000000000000000008F +:10016000999999900000000000000000C3FF0F66FD +:10017000FCFC7E4200000000F0F0C0663C003C0049 +:10018000FEF9FFFF0000000000000000000000007A +:10019000000000000000FFFFFFFF010381C300001B +:1001A000000000000000000000006F6F0F6FD7FF1D +:1001B000FFD70000220000880008A5C39966000050 +:1001C00000000000000046060000FFFFFFFF0000E7 +:1001D0000000C340C3C30000000000000000000096 +:1001E0000000189918900000000000000000C300F3 +:1001F0000F66C0C07E420000000000004066FC4068 +:10020000FC00F6F9FFFF0000000000000000000005 +:100210000000000000000000DBDB9999090F99FF46 +:100220000000000000000000000000006F0F0F0F32 +:10023000BEFFFFBE000000226611E710CFCF66664A +:100240000000000000000000000006060808080882 +:1002500000000000C3C3C3C3000000000000000092 :10026000000000000000000000000000000000008E :10027000000000000000000000000000000000007E :10028000000000000000000000000000000000006E @@ -106566,478 +106566,478 @@ :1002A000000000000000000000000000000000004E :1002B000000000000000000000000000000000003E :1002C000000000000000000000000000000000002E -:1002D0000000000000000000000000FF00FF000020 -:1002E000FFFF0000F0F0D8D8C30008F808F80F0F9F -:1002F0000F1800F308FB3E383838000000000000FB -:100300000000B0BD303C999999996C6C6C6C000000 -:10031000FFFF000FF0FF000000000000C099CF9920 -:100320000C0C0C3CFC0CF0000400040F24BD242435 -:10033000000000009FFF0666900090FFFF00FF0096 -:100340000066FFF0FF996F099F069F063C0F3C0F68 -:1003500000C300C3BD30BDF3002C0024000000002A -:100360000F0F0F0F00C0F0F0D8D8FF3C03F303F3DA -:100370000F0F0F5A04F708FB3E38383E000000000C -:1003800000000000B0BDB0BDF0C000006C6C6C6C33 -:1003900066666666000FF0FF000000000000C0996E -:1003A000CF999C9C0C3CFD0DF1010700070F24BD6B -:1003B0002424000000009F99060090009000C3C311 -:1003C000C3C3C366FFF0F69066006666FFFF3C0F8E -:1003D0003C0F3CFF3CFFFF30FFF3002C003C05616D -:1003E0004A0E050D00A080610006000D00010061AD -:1003F0000E010019000000610006000D0000006100 -:100400000001001900000061000E000D0000806175 -:100410000006000D000180610007001900A0000027 -:1004200000610A06001D00A0006130060001000105 -:1004300080610006001D00000561400F050D0001F0 -:1004400000610003001500000061000E000D0001B6 -:1004500000610006000D000000613007001D000073 -:100460000000FFD70000551000000000D714030360 -:100470003FFF30F000FFF0F0000000003C343C286B -:1004800000F014B44B410A00AF0F0000FF00FF87DB -:1004900000000000DFDFDF004141EBEB00FF00FF69 -:1004A00000000000000000000000F0AAF0AAFFFF1A -:1004B000000000000000FFF00F00A0A0A0A00000BE -:1004C000000028FEAAFEFFC33F030C000C00000042 -:1004D000A0A03C0F3C0F00F00FFFA0AFC0C0FCC0BD -:1004E000FCC0000014140000551000000000D714D8 -:1004F0003F3F3FFF30F000FFF0F0000000003C34D1 -:100500003C0000F000F05F550A00BF0F0000000043 -:10051000000000000000FFFFFF004141EBEB4545FC -:10052000404000000000000000000000F0AAF0AA17 -:10053000FFFF000000000000FFF00F00A0A0A0AA35 -:10054000FF51FF517DFEFFFEFFC33F031C140C0053 -:100550000000AAFF3C0F3C0F00F00FFFA0AFCFCF71 -:10056000FCC0FCC000000000FF8F7D0D00000000FB -:100570007D7D000D171417142AFFEAFF000000000C -:1005800000000000FFFF0A0F0702000000FF00004C -:10059000BEFFAAEB3C003C00000000000000000091 -:1005A0000A3C5F3C00000000000083828382FFFF62 -:1005B00000000F550F3C00000000F03CF03CF0C381 -:1005C000F0C3555514142DFF2DFF0A3AFA3A0000D6 -:1005D000000000000A0A0000000000000000000007 -:1005E0000000413F410300000000FF8F7D0D00002F -:1005F00000007D7D7D0D171417142A00EA0000000D -:100600000000000000003C3C3C3CFFFF000000FFFD -:1006100000005D5D08083C003C0000000000000098 -:1006200000000A3C5F3C00000000000083838282DF -:1006300007F702F20F550F3C00000000F03CF03CC1 -:10064000F0C3F0C3555505052D002D000A3AFA3ABE -:100650003C3C3C3C0F0F0A0A000000000000000078 -:10066000000000007D3F7D03200084002000100476 -:1006700010412004200505000000040088008904C2 -:1006800020100141400385112000200000000004DB -:1006900020058800040020004000200320032000E3 -:1006A000A00500002002000400030000200000005C -:1006B0000402840504000409200400000000000076 -:1006C000021004000080200082000000880000006A -:1006D00020110000200020000000A10088804000C0 -:1006E0008800000500002000000040000004108287 -:1006F000419041820082A09020040002008200020A -:1007000040024001040240C0040021000000000239 -:100710000200000200020004050400400000000284 -:10072000000440000000000000020000040000007F -:1007300000000001000000020000000000000000B6 -:100740000000000040000002000000000002000065 -:10075000000000C00000000200C000904000000245 -:1007600080000000000000000000000400000008FD -:100770000010841004020000000420050410908280 -:10078000042000008200090008820210000000001E -:100790000220001000080041028000000004020056 -:1007A00000000200001000000208840000000003A6 -:1007B00000040009001000020010000004000010F6 -:1007C00000000009000502410200000900000000CD -:1007D000900400000000000002210200000500005B -:1007E000C0000000848202008200000002000008B5 -:1007F0000010004000080009000200098000808409 -:100800000021040141000300400800110001001014 -:100810000010050000090004008800400084020860 -:100820000010000800082004048400840008000070 -:10083000000800080000000809092008000800104E -:10084000004000C0009000880010001000840008E4 -:1008500000100008030000840010001000100000C9 -:10086000008400000000000500000000000000847B -:100870000400882140008821004100000004100489 -:100880000000900390008820042100000108000867 -:10089000044005A04000002100040004082182005B -:1008A0000420008082009008C0030000040582102C -:1008B0000000C0030021000300090041084120108E -:1008C000000000000041004000080021C000084076 -:1008D0004000002100004000201008088200A040D5 -:1008E0000804000420000000202100000000010096 -:1008F0000010008220000082008800A00300008316 -:1009000008890900001004880501851002900484FC -:1009100000820904400205100302000341010004A3 -:10092000039005A0004009A003A00090410000A092 -:10093000008800000800000010000088030041004B -:100940000002030008A0008221821100000000C004 -:1009500085002100008205020982838880900004BE -:100960000084900004018300000040084100000062 -:10097000080000008200000004000411084000107C -:10098000821182040804000008090841401108A0EF -:10099000C0008405000440040800080504050002A6 -:1009A0000004A04000090000084100058202000088 -:1009B00000004009000000400000000000000804A2 -:1009C0000040000000040010080000004000080083 -:1009D000040002052004100008000200A0008200AC -:1009E00000000000000000C1C00020020004080058 -:1009F00000000000080000000300000000C00082AA -:100A0000200020C002090300000000080000800848 -:100A1000000300000400000880008082090000201C -:100A20000082000008C00000000000000004000870 -:100A3000008200000000000000880000091000A0F3 -:100A400000000000082000900008000000001104D1 -:100A5000000000000004000000000000000000088A -:100A6000400000000300200000020000800400019C -:100A70000020000000000000000000200400002111 -:100A8000200082418400880300000821A004841013 -:100A90008220102140004008000010080840000398 -:100AA00000410008000200100005A1001021000014 -:100AB0000003A000004000000000001000008200C1 -:100AC0000021000000020003002000004020100070 -:100AD0000000000300830000010000080000400047 -:100AE000000200108804100082040000840000004E -:100AF00001000000000000000000058400020384E3 -:100B0000400009000200008802102000090009844A -:100B100020082000008880208200030000200000C0 -:100B2000102040002084100803902100080005A038 -:100B300000A00900400800000800000009C0098466 -:100B400010000500110000040804000000040088E3 -:100B50000000009003880002002002000500002031 -:100B6000000800020821090040200890030000004E -:100B70000000400000840400210008000000000084 -:100B8000000000C04011400020100400880208212D -:100B900010000000C000C0040003081090200004F2 -:100BA0004010904008100800008082080004822154 -:100BB00000100000004000000000002000000000C5 -:100BC0000000002100400000004140000000000043 -:100BD000000088000800000000000000A0000009DC -:100BE00000044004080000000000000000000000B5 -:100BF00000004004000000000009000000082090F0 -:100C00000390200221022010410882020204000900 -:100C100002082010208421C0029000002000000063 -:100C200000000004000000000000080404020000AE -:100C30000008000000820000000400C000840000E2 -:100C400000000200000002000000000000A00900F7 -:100C5000000000040800000009001100000000006E -:100C6000000000000000A0000000000000000000E4 -:100C70000000000003010800000000000800000060 -:100C800000000000040000000088A08820090090F7 -:100C9000024021028282020840A00004C0400008F5 -:100CA000208905112000828804210001A0A0C083B2 -:100CB0001020000800A088020000000000000000D2 -:100CC000000001000000040000000000000000011E -:100CD0000000000000000000000000A001C008A10A -:100CE000A0C1000000000100000090A02002000848 -:100CF00010820000000082000000000000000000E0 -:100D0000000000000000000000001000800304113B -:100D10000000808041A005880003840003108090BB -:100D20000090000282880040800580100010890039 -:100D30000020800000000080000000000000000093 -:100D4000000000002000210000000000000000045E -:100D50000008000000000000000000000320102137 -:100D600080828020000000004000000000800080A1 -:100D700000000080002000200002000000000000B1 -:100D800000000000000000000000000021800908B1 -:100D9000108803102000051182821121908005899E -:100DA0008508400083000300200083210000080024 -:100DB000088020008000002080808000000000006B -:100DC0000000000000000000000000000000000023 -:100DD0000000000000000000000000000000000013 -:100DE000004100A100000000000000000000000021 -:100DF00000008000800000000400020410000000D9 -:100E000000000000000000000000000000000140A1 -:100E10000001014101010290A000838208050982BE -:100E2000A010A0048902048800000100090100004C -:100E3000000000A00100A0004001A010040000007C -:100E400000000000000000000000000000000000A2 -:100E50000000000000000000000000000000000092 -:100E60000082000800050000020002000800900057 -:100E700020008200A000042000000000010100000A -:100E80000000000000000000000000000000000161 -:100E90004000000091010900104100030009C0C199 -:100EA000C00100A00801842102C001A0A003C0A1CC -:100EB000088200A004049083400400821088100877 -:100EC0000000000000000000000000010001000020 -:100ED0000000000001000000000000000000000011 -:100EE00000004010010882008501000000000000A1 -:100EF0000000C0020008008808020001080001018B -:100F000000000000000000000000000800000000D9 -:100F100000408009000905031111802003022021EF -:100F20008020082100A00421844000410383888898 -:100F300003908020008000808020800000800000DE -:100F40000200000000000000000000000040000857 -:100F50000040001100002000000000000000000020 -:100F600000000000800941A0840404030000000088 -:100F70000000080080800000000000800002830361 -:100F80000221000900000000000000000000000035 -:100F900000000000410808214100081102830009F7 -:100FA000A088850090110304A141C000092111000F -:100FB00041000440C00010002000000000008080BC -:100FC0000000000000000000000000000000000021 -:100FD0000000000000000000000000000000000011 -:100FE000000000000000A1000904800000000000D3 -:100FF00000800080000000100080008000002100C0 -:10100000000040000340000000000000000000005D -:10101000000000000000080108019000080005041D -:101020000202404084A08501A14191400900009145 -:101030000010002001004100410009008400080068 -:1010400040A000A00200000000000000000000001E -:101050000000000000000000000000000000000090 -:1010600000000000000000004100C0018400C0003A -:1010700000000010001000009001A0A00040A0009F -:10108000010000000100000000000000000000005E -:101090000000000000000000000000E00000000070 -:1010A0000000000007005041000000000700002180 -:1010B0000000000000000000000000E00000000050 -:1010C0000000000000000000000000000000000020 +:1002D0000000000000000000000000C0F0F000007E +:1002E0000000000000007E7E069F0000000000006D +:1002F000000000FFF0F03C3C00FF000000000000A8 +:1003000000242F0F303000600000000000000000CB +:10031000000000000000000000000000F8F8FFF8F6 +:100320003C3C3C3C00000000000000003C3CFFF076 +:10033000C7C7FFFF3CC33CC30000004200002010C1 +:10034000FF6FFF7F0000000000000000F3F3FFFFDD +:10035000000000000000C3C30000CCCC0000F0F09F +:1003600000000000000000001818069F00000000B8 +:100370000000000066663C3C66660F0F000000004F +:10038000000000002000303000620020000000006B +:100390000000000000000000000000000000F8F86D +:1003A000F8F80F0F0F0F00000000000000003C3CA9 +:1003B00066FFC3E7FFFF3CC33CC3000000810000B1 +:1003C000498969F971F10000000000000000F3F3B1 +:1003D0009999040400002424C3C3CCCCCCCC0000E5 +:1003E00000000000000000000038000000A5000030 +:1003F0000000000000001061200F0045000800010F +:100400000005004D00010000200800000000000071 +:1004100000000000000000000000000000000000DC +:1004200000000E3800000000000000000000000086 +:100430000061000B0005000000614007000D000096 +:1004400000614006009D00000561000E000D0000E7 +:10045000A00000000000000000610009050900A0E4 +:10046000000000000000000000000000000000008C +:100470000000000000000000000400040F0F0F0F38 +:10048000000FFF3C00000000000000000000000022 +:10049000000000000000000000000000000000005C +:1004A000000000000000000000000000000000004C +:1004B00000000C0330C0142810200000E00B0010D6 +:1004C00000200006AA9000C000900000D454000054 +:1004D00053000000000000000000FF000C0CF3308F +:1004E000B2B20000000000000000000000000000A8 +:1004F00000000000000000000000000000040F00E9 +:100500000F08000FFF3C000020000000000000006A +:1005100000000000000000000000000000000000DB +:1005200000000000000000000000000000000000CB +:1005300000000000080220804182408000FFE000AF +:100540000000000000000000C000900000FFD4C0C8 +:100550000000FFFF0000000000000000FF000C0C86 +:10056000F330B2B200000000000000000000000004 +:10057000000000000000000000000000000000007B +:10058000FFA03CFFCF0050507F7FFFFF0000000026 +:10059000000000000000000000000000000000005B +:1005A000000000000000000000000000000000004B +:1005B000000000000000B2717171FF001E1E81304A +:1005C000A500C0C0000000000000F0FF0C000A0AF7 +:1005D000000075207F2A0000000000000000FFCF0F +:1005E00000CF4B4B4B4B0000000000000000000010 +:1005F00000000000000000000000000000000C00EF +:100600000C0CA0A03CFFCFCF50507F7FFFFF00001D +:1006100000000000000000000000000000000000DA +:1006200000000000000000000000000000000000CA +:100630000000000000000000B2713030F000A0A007 +:1006400000B100A5C0C0000000000000AAAA0C0074 +:10065000AA2A303000000000000000000000000066 +:10066000FFCF00CF0F0F0F0F00000000840010001D +:100670009000C000000000000000000000008200A8 +:100680002105010220000400000004008441200034 +:1006900082008402000000000500000088000400C1 +:1006A00020000100200001000003000000002000E5 +:1006B000200090000000000000002000000020004A +:1006C00090002108000040048484000404002008F5 +:1006D0002005000000008200880820000200C00001 +:1006E0008204000004002000100441000000090002 +:1006F000000800824002410000C000C040C040C06D +:100700001000C08240C141C02100000041000084AF +:1007100005000508208402000002200000000000FF +:1007200020400200049002000400000000000000CD +:100730000000000041402000000000000082000096 +:1007400000020082020441004100000510C0C00008 +:1007500040C0410040020002000000024000400092 +:1007600000400082008210021184408400000000DA +:1007700000000009000000000800820000000000E6 +:1007800000000000008090404000020000000000D7 +:1007900000090220000910000000000001200011E3 +:1007A0000000820001000800000005000000002198 +:1007B000A000000010000200001000001002401015 +:1007C00000100202111000028400014000004000ED +:1007D0000420401003000000000084000009000015 +:1007E0000000000000000000000002000000000007 +:1007F00000000084000000000000000000000084F1 +:10080000000000100400000203908000200000405F +:10081000000005840002058800000000020020009E +:10082000000800000000040080020000040800002E +:10083000000000080010410084080009000082093F +:100840008000004100098411008500020401008439 +:10085000804080408001200800080084000000885B +:100860000000001000080000008402840400000062 +:1008700004000005A0088800000800008803880024 +:1008800000008800882188001000002189000000F5 +:1008900000218400820804051008082100000000DF +:1008A00000040000000800000000C108C0809100A2 +:1008B0000000000000000003000000000100000034 +:1008C000010090000308010001038200A008C0039A +:1008D000820000000002000000200821000000004B +:1008E00000210000000000000008000804100400BF +:1008F00090080000000005004100090011001100EF +:10090000000000C02000080000000502000010C028 +:1009100021040082000000100090080000080084FC +:100920000000008500000000000000000200002020 +:10093000040000000000400000000040030040A050 +:1009400000A0080000000800080010A0008800882F +:100950000300034009000402000000002100000021 +:1009600005000040020800002084040008A0800068 +:1009700080002004000200000000000000080000C9 +:1009800000000000000400000885000000040003CF +:100990000008000200000000080084000041000080 +:1009A000004000000000880000000008200421042E +:1009B0002004002000004005A000880084110820C9 +:1009C00008000809100002400902051088C1400013 +:1009D000000308000209010401040504012040008D +:1009E0000010000000200009040482040800082010 +:1009F00000201020882000080000200000000900CE +:100A00004000000000000200000002101140002120 +:100A10000400040100010090000800200090000084 +:100A200000200000200000000000000000840040C2 +:100A300004C0110000910000000803000004090038 +:100A40004100A104800080008001A001A0010208F3 +:100A5000002000000000000020844001209040059C +:100A6000000000000000000011004000090000002C +:100A700005010001008900010040000000000000A5 +:100A8000000000000000000000000010080000004E +:100A90000100000000000000002100030000000031 +:100AA0000008000000000008000000008400820030 +:100AB0000000000004000800000000000800020020 +:100AC000A0008200820482109000C100A1A1090050 +:100AD00082A100418241821108000010000800003C +:100AE0000000000000000000000000000000A00066 +:100AF00000000100000000000400000000000000F1 +:100B0000000000000084000002100000000000004F +:100B10000000408404080004020800820400000071 +:100B2000002000880200000000000000000000001B +:100B3000000000000000800000000000040000A091 +:100B4000800000080000000000004000020040108B +:100B5000C00408080400000041008300038840022C +:100B600009001020040000080008050000880000AB +:100B7000080000A004081108001080000000000018 +:100B80000000000800000221000000000000080230 +:100B90000080080000000080000200000002000049 +:100BA000002100050000000000000002000000001D +:100BB0000021000002080480088090400000A0008E +:100BC0000400A0000800820482008210040884004F +:100BD00083002000A0020000C00008020000040002 +:100BE00000000010008000200000820000000000D3 +:100BF00000000000040000000000000808000002DF +:100C000009C000400000204000C000040040000077 +:100C100021080010000202020404110020880000D4 +:100C20002000000000000004000000002000004040 +:100C300000000000000000040440822020000000AA +:100C4000110040004100804000000400000000014D +:100C5000000004900000082120882088A1040000E2 +:100C600000002088020104200000000000000000B5 +:100C700011044000040020000200410000000000B8 +:100C80000000000000000000000000000000000064 +:100C9000000000000000000000018400410000008E +:100CA0000000000000000000000000000000000044 +:100CB000000000000000000000004000008490825E +:100CC000000000000000000000001109410200883F +:100CD000880505052003A082A0A01003020489A1B5 +:100CE000C020A0030100000400000000000000007C +:100CF00000000000000000000000000000000000F4 +:100D000000000000000000000000000000000000E3 +:100D100000000000000000000000204103008308E4 +:100D200000090000000000000000000000000000BA +:100D30000000000000000000000000008000000033 +:100D40008080000000000000000000008910A191D8 +:100D5000008300908982A1C089050003C0C0A088DB +:100D6000020300040084100500C000000000000021 +:100D70000000000000000000000000000000000073 +:100D80000000000000000000000000000000000063 +:100D90000000000000000000000000000200100041 +:100DA000000008110000000000000000000000002A +:100DB000000000000020000000000000000000040F +:100DC0000009800000000000800300008000118006 +:100DD0008221850809039000A000110388908000FB +:100DE00000210009800080008400042140000000F0 +:100DF00000000000000000000000000000000000F3 +:100E000000800000008000000000000000000000E2 +:100E100000000000000000000000000000000004CE +:100E200001000000010000000000000000000000C0 +:100E30000000000000000001000000000000880029 +:100E4000840104A1C000000000000201000008208D +:100E500002041100A00005018940A00004001183D4 +:100E6000A0000400080004C0028202009101820078 +:100E70000000000000000000000000000000000072 +:100E80000000000800000004000000000000000056 +:100E90000000000000000000000000000000000052 +:100EA000000040008800000000000000000000007A +:100EB0000000000000000000000000000000000032 +:100EC00000900000C09000A00000000000000000A2 +:100ED0000000C0040140001108C0400300C0A1A1EF +:100EE00003C1044000899040C0C0000401A000A0DC +:100EF0000082000000000000000000000000000070 +:100F0000000000000000820000000000000000005F +:100F100000000000000000000000000000000000D1 +:100F2000000000109100800000040000000000009C +:100F300000000000000000000000000000000000B1 +:100F400000000000000080800000000000000000A1 +:100F50000000050000A040041105048980A04103A1 +:100F600085A020888082219004108082002010C0FB +:100F700041410004000000000000000000000000EB +:100F80000000000040000000000000000000000021 +:100F90000000000000000000000000000000000051 +:100FA0000000000021800205090003080000000085 +:100FB0000000000000000000000000000000000031 +:100FC000000000008004800200000000000000001B +:100FD00000808080800041C02190A08008034100F3 +:100FE00040022100020380028091800080001004F2 +:100FF00004A141004040000000000000000000008B +:1010000000000000000000000002000000000000DE +:1010100000000000000000000000000000000000D0 +:10102000000000000000014000000000010100007D +:1010300000000000000000000000000000000000B0 +:10104000000000000000C00120C10400C00000003A +:101050000000A0820808080091A0C003A0101101A0 +:101060000140008501C00100C001A00402C00400CD +:101070000190010200820001000000000000000059 +:10108000000000000000000000000001000000005F +:101090000000000000000000000000000000000050 +:1010A0000000000000000000000000E00000000060 +:1010B0000000000000000000000000000000000030 +:1010C000000000E000000000000000000700001128 :1010D0000000000000000000000000000000000010 -:1010E0000000000000000000000000000000000000 -:1010F0004200000000E000000000000000000000CE -:101100008800000000E00000000000000000000077 -:10111000000000000000000000000A0A00000000BB -:101120000000DFFF20005559FFF3D75507050F0FCB -:10113000AAAA000000007F2A7F2A828082C30000C2 -:10114000505000008282282828280000000000005B -:10115000000000000000000000000000000000008F -:10116000000000000000000000000000DFDFDFDC06 -:10117000CFCFCFCF0000000000000000FF003C3CBC -:1011800035553C5C0000000000000000000000003D -:1011900000000000000000000000000080A000002F -:1011A00000000000FFFF0000000CAAA6FF7D0F0D4D -:1011B0000F0FAAAA0000000069287D3C828082C32C -:1011C00000005450000000C3AAA00A000000000064 -:1011D000000000000000000000000000000000000F -:1011E00000000000000000000000000000001F1FC1 -:1011F0001F1CC0C0C0C00000000000000000FF00B5 -:101200003C3C3C5C3C5C0000000000000000000036 -:1012100000000000000000000000000000005F5F10 -:10122000FFF70000000055555955D8F0F0F020AAFE -:1012300030FFFF5D00003C2800009696969675757D -:1012400045450000000080F000F055555053000067 -:10125000000000000000000000000000000000008E -:10126000000000000000000000000000000000007E -:1012700001011515000000000000000000281428DE -:101280000080008A0F030F03000000000000000030 +:1010E0000000000000E007000000001100E0070021 +:1010F0000041001100E007000000000000000000B7 +:1011000000000000000000000000000000000700D8 +:1011100000000000000000000000000000000000CF +:1011200000000000000000000000000000000000BF +:1011300000000000000000000000000000000000AF +:101140000000000000000000000055FFF0F0FFFF6D +:1011500000FF000000300030000000000000C0C0B0 +:10116000FF00000000000000F0AA004100C30F0FC4 +:10117000AA00F3FF00000000301000000000000093 +:10118000000000000000000000000000000000005F +:10119000000000000000000000000000000000004F +:1011A000000000000000000000000000000000003F +:1011B000000000000000000000000000000000002F +:1011C00000000000000000000000000000FFB4B4B8 +:1011D000C3C300C3000000FF00FF000000000000C8 +:1011E000C000DF00202000000000F0AA0F41C3C3B0 +:1011F0000000AA00F0FF0000000030100000000016 +:1012000000000000000000000000000000000000DE +:1012100000000000000000000000000000000000CE +:1012200000000000000000000000000000000000BE +:1012300000000000000000000000000000000000AE +:101240000000000000000000000000000000C0C01E +:10125000C0C05757FF030000000000000F0F0A0A2C +:10126000000100000071FF8EAA55AA0004100000C2 +:10127000FFC37DEF0F0F00000000F0F02AAAAAAA1A +:10128000000000000000000000000000000000005E :10129000000000000000000000000000000000004E -:1012A000D5DFF5FE0000000055555555F0F0F0F083 -:1012B000A2AAF3FFFF7D0000140000000000FFFF62 -:1012C000303000000000000080F0C0F000C3505338 -:1012D000000000000000000000000000000000000E -:1012E00000000000000000000000000000000000FE -:1012F000000083019715000000000000000000308E -:101300000C302A80208A0C000E0200000000000031 -:101310000000000000000000000000610006000D59 -:10132000000000610007000100000061000E000DD8 -:10133000000005610A0E050D00A000610006000D09 -:1013400000008061000100010000000000000000BA -:101350000001000000000000000000000061000625 -:10136000000D000000610006000D000000000000FC -:101370000000000000613006000D00000061000761 -:10138000000D0000000000000000000000610002ED -:101390000009000000000000000000000000000044 -:1013A0003C3CAAAAFFF0D7FFFAFA3F300000FDFD4F -:1013B0000A000A00852666AFF0F0EBEB008200C35E -:1013C000C34B870FFF0FF0003C3CAAAA00000000AF +:1012A000000000000000000000000000000000003E +:1012B000000000000000000000000000000000002E +:1012C000000000000000000000000000000000001E +:1012D000C0C0C0C05757FF030000000000000A0A4A +:1012E0000A0A00020000000CFFF329292929014005 +:1012F0000000FFFF7DEF2F2F24200000F0F02A2AAE +:10130000AAAA000000000000000000000000000089 +:1013100000000000000000000000000000000000CD +:1013200000000000000000000000000000000000BD +:10133000000000610003000D00000000000000003C +:101340000000000000000000000000610006000D29 +:101350000000A00000080500000800008000000058 +:101360000000000080610006009D00000061000D8B +:10137000009D00A0A061003F0099000100610038BD +:10138000000100000000000000000000000000005C +:101390000000000005000A08050000A00000000091 +:1013A000000000000000000000000000000000003D +:1013B0000000000010101010FFFF000000000000EF +:1013C000000000000000000000000000000000001D :1013D000000000000000000000000000000000000D -:1013E000000000FF00FF00000000000000000000FF -:1013F000000000000000AAFFAA00554B004B0000AF -:101400000000000000000000000000000000FCFCE4 -:101410000C0C7F702F200000000000000000000076 -:1014200000003C3CAAAAFDF3F7FCFAFA3F300000AA -:101430000C0C0A000A08852666AF50FAAAAA808218 -:10144000C0C300000000FF0FF0003C3CAAAA00004F +:1013E000000000000000EFFF410000000030F5F5B4 +:1013F0003F30005100A2000000000F0F0F0FFF0050 +:101400005C5C0000FFFF0000000000000000000026 +:1014100000000000000000000000000000000000CC +:1014200000000000000000000000000000000000BC +:1014300000000000000000000010BEBE14140000F8 +:10144000000000000000000000000000000000009C :10145000000000000000000000000000000000008C -:1014600000000000032B173F0000000000000000F8 -:101470000000000000000000AAFFAA00FF4BAA4BDA -:10148000000000000000000000000000000000005C -:10149000FCFC0C0C7F702F200000000000000000FE -:1014A0000000000000000000000F000F5A7A50708A -:1014B00020002000FFFF0F0F00000000CFF30C30D2 -:1014C000303C3014000055FFFF3CC300F0F000FF3B +:10146000000000000000000000004100000000003B +:1014700005053F305151A2A200000000C3C3C3D7ED +:10148000FF005C5C3CF03CF000000000000000004D +:10149000000000000000000000000000000000004C +:1014A000000000000000000000000000000000003C +:1014B0000000000000000000BFBFAFAF0000000050 +:1014C000000000000000000000000000000000001C :1014D000000000000000000000000000000000000C -:1014E00000000000000000000000550F550F000034 -:1014F000000000000000000000008282D7D700003A -:1015000000000000000000000000000000000000DB -:1015100000005500FFAAFAAA0AAA00000000000075 -:101520000000000000000000000000FF00FF5A7AE9 -:10153000507000000000FFC30FC30C000C00CFF37D -:101540000C303C3C3C143CF03C3CFF3CC300F0F015 -:1015500000FF00000000000000000000000000008C -:10156000000000000000000000000000550F550FB3 -:10157000000000000000000000000000A0F5A0F541 -:10158000000000000000000000000000000000005B -:10159000000000005050FAFAFAAA0AAA000000005F -:1015A00000000000C0900100014004840400851088 -:1015B0000504890201080120C080889084904102BE -:1015C00088840490001000004003C00000404008E0 -:1015D00020200040000240004080A0C10080218007 -:1015E000002000100003040002002010020400008C -:1015F000200084000008000020022002000400886F -:1016000010000000004100000000200002108800CF -:101610002000000082050000000020000000000003 -:1016200000000000000040410400204120080000AC -:101630004003100304A1204120C10002040340091B -:101640000801202110031003000000022002000303 -:10165000000241A12001040100000008000200086E -:1016600010402000000300004000000021000000A6 -:10167000040200C0000000040000000000000000A0 -:101680000008900000001000400000000000000072 -:101690000002000000C01000000200001000000066 -:1016A0000000000000000000001008040800001006 -:1016B0000000008400000000000002100008000488 -:1016C0000000000000040000910900021002041054 -:1016D000004000A00004084000080204020200418B -:1016E00000040000000000040000011004021000CB -:1016F00000108240032020200040008820050200C6 -:1017000000028280000004100000000000002000A1 -:101710002000000000000000004100000000000068 -:1017200000000400000000000000000800080002A3 -:1017300000820000002000040084000800880004EB -:10174000041000080000000200024004008980012B -:1017500000890005000300058583000980898084D5 -:10176000030200080000008800080000400980090A -:10177000808400010083101180090083041180001F -:1017800080880009001000028000000400842010FE -:1017900000000000008800020008001000000000A7 -:1017A000000400040004000000000000848303859E -:1017B0000490908088C010888880904009800480C0 -:1017C00011008400020010821008A0C00800400828 -:1017D000C00882211005000000000008000002007F -:1017E0000009880808000802208240050000002146 -:1017F000000000022010C0214008882100100011C4 -:101800000009000800214009080000212009840087 -:101810002040C00010110200880088419000901004 -:101820000000000000000000000000009004090813 -:101830004010880900102108044140200820C040C1 -:101840000502A000089083008004900208084190DF -:101850000020008200001000001040000004002062 -:1018600000000082000080000084802008C000008A -:1018700000000000000100000084000000000000E3 -:101880001000102004840000100008000000000078 -:101890000504210000000300410003080000008847 -:1018A00000000000008200000000080000A000010D -:1018B000200000000000820890080000820088805C -:1018C000000000000000100000400080000004093B -:1018D0000000002000400010840085090000000284 -:1018E0000080A000000008008210824084000000F8 -:1018F00000009005000090C1000000000080001072 -:1019000000000000008900820800C0408400000040 -:10191000A040080020000000840000000000000437 -:1019200000000000000000000000C00000000000F7 -:1019300000008000004000C009820000001000008C -:1019400000100000000011400000000009400000ED -:1019500080000000021100110000000010001110B2 -:10196000000000100000080000A000C000A000005F -:101970000000000000000000004000000000000225 -:1019800000100200000000400008000000000000FD -:101990000420000000000000000000000000000023 -:1019A0000000200000000000000000000000000017 -:1019B000000000000080C0000100040000808400DE -:1019C000000801900011008801800000000008005C -:1019D000000020088808000340008402000800215D -:1019E00000110010001100020008001000000008A3 -:1019F00000000100000088404003000008210008AA -:101A0000000008110080A003C0028241080000000D -:101A10000000000485410000100300000011004197 -:101A20000005080082008200080000000000C000DD -:101A300000200000000009020000400000000040FB -:101A400004044190020410002040044004900890D7 -:101A50004000000288042190002005900304080043 -:101A6000080000002100004002000000044008902F -:101A700000000000040000004004000000200300FB -:101A80000000000000000010000000000040008482 -:101A900005000020000004000020080021000000D4 -:101AA000020000000000051000000000000005001A -:101AB0000090000000000000900000002000900056 -:101AC0008804880400000008C00000118804080091 -:101AD00082030003000000210010000000054011F7 -:101AE0000000C000000800000041000000110005D7 -:101AF0000000000300000010000000098221000027 -:101B000000410410000000000000820200000011EB -:101B1000020300000200C0040010000000000009E1 -:101B20000000000000050000000000000040000070 -:101B30000000000090040000000000000000000011 -:101B4000000000001109000000000020000000104B -:101B500000080088000000000088008200040000E7 -:101B600000000900000000042090000000000200B6 -:101B7000400004000000000005000000000000001C -:101B80000000000000000000000400000001000050 -:101B900003000000000080000001000100000000C0 -:101BA00000002020000000000000000000000000F5 -:101BB000000000000000000000000000010104001F -:101BC000000004850000100000C11010C0000100DA -:101BD0000082080201000000000510000000C100A2 -:101BE0000000C1830001100000118808C001C1007D -:101BF0000088C0820100C00000C110000000000089 -:101C0000C1000000C1830001000000408808C1013C -:101C1000C0000088C0820101C0000009100000005F -:101C200000000000000000000000000000000000B4 -:101C300001000082000000000000000000004104DC -:101C400090210000094100200002022080000005D0 -:101C500020090000800004040021090580000041E3 -:101C6000C1410000C1830010800309900000804042 -:101C7000884100008080040280210203800000006F -:101C80000041C1410000C18310100005091100800E -:101C9000C1108821000080802008802102838000FC -:101CA0000000000000000000000000000000000034 -:101CB0000004200000000000000000000000000000 -:101CC0004100050800400000030841410080000376 -:101CD0009084008400020200C000024100800040A5 -:101CE0004100034100C100001120104100800009A3 -:101CF00004C100C1004103008900114100C18004FA -:101D000000004100104100C100001140044100806A -:101D1000000482C10041000203008500914100C11E -:101D2000802000000900000000000000000000000A -:101D300000009000038000A00000000000000000F0 -:101D40000003000000010009000000000101000480 -:101D500000010341828300000082050088010084A5 -:101D600040410000010100C10002000000010082AA -:101D7000000091C11009000101004000C00100C134 -:101D8000820100000000000100C10000000000010D -:101D90000040000140C1201100000100400002018C -:101DA00000C18201000000000000000000000000EF -:101DB00000000000410020080003820084000000B1 -:101DC0000000000000040001C183010000000001C8 -:101DD0000009200000A18200C08301000000000172 -:101DE000010100000084000003400000000000002A -:101DF0000002820000880000C140000000000001D5 -:101E000001000000000000400000C183000000004D -:101E100000000102C00000880000C1400000000076 -:101E200000010101000000000000000000000000AF -:101E30000000000000000082000000000000000020 -:101E40000000000000000000000805A002000000E3 -:101E500000080904C10005080005C1850400000050 -:101E60000008200540000000002141C100000000E2 -:101E700000031082800000410041C1C10000000049 -:101E8000000808410000000000800041C1830000FC -:101E9000000000030890080000410041C1C100009B -:101EA0000000000804030000000000000000000023 -:101EB00000000000000000000000000000004000E2 -:101EC0000000000000000000A0C0804180C10000B0 -:101ED00010008009054103888904009000800000FB -:101EE000094100008080108920C18000800200002C -:101EF0002010000811C11102C14100808080000043 -:101F000008410000800010400000C190804180C165 -:101F100000004010002091C11103C1410080808069 -:101F2000000010000041808010020000800000913D -:101F300000000000000000000000004180000004DC -:101F4000000000000000000000004109040140C141 -:101F5000000001001000A1050105109000C010C094 -:101F6000000000010000400400C020C14000400209 -:101F700000000001100188410004400300C040C07F -:101F800000000101000040840003000040C0200167 -:101F9000824000000001100184410005409100C012 -:101FA00040C000000000000182020085000008001F -:101FB000001000000000000000000000004182004E +:1014E00000000000000000000000022A28000000A8 +:1014F0000C0C4040BFBF00A00000440000440000AE +:101500000000FF55AA0000FF00FF000000000000DF +:1015100000000000000000000000000000000000CB +:1015200000000000000000000000000000000000BB +:1015300000000000000000000000BFBFAFAF0000CF +:101540000202000000000000000000000000000097 +:10155000000000000000000000000000000000008B +:101560000000000000000000000000002A2A000027 +:1015700000A50C8D40EABF1500A000088800008877 +:10158000000000005F5F0A0AA0A0AFAF00000000EB +:10159000000000000000000000000000000000004B +:1015A0000000000010000000A18001800080030006 +:1015B000888021804180858005800080009189801D +:1015C00082802088A00084008400000010000400B5 +:1015D00004002000000004000400840004000080D7 +:1015E000208041080003400084000000000000004B +:1015F0000000C0002000880005004180001000802D +:10160000018221004002C000000082041008000096 +:10161000000800000000880000000205100084009F +:1016200084008800890000000000041008084008B9 +:10163000A0000008400420404020A002001000400C +:101640004004090820034000000000000040002082 +:101650000000000200020000000000000000000086 +:10166000000400082003000000000000000040000B +:1016700020000400100000000000C004400400012D +:101680004140080210004101000200000908000466 +:101690000008000440020004400000022000000294 +:1016A0000000108410002000000000000000000076 +:1016B0000000000000000000000400000000000026 +:1016C0000040000000000000020000000000A00038 +:1016D00000000000000000000000000000100004F6 +:1016E000000000000004C00000000000000400042E +:1016F00000000000000000000000000000000000EA +:1017000000000000000008000008000000000004C5 +:1017100000000040840000000000000000000009FC +:101720000041000400000400000000000000000070 +:10173000000000000000000000080000001000048D +:101740000010000800000000000000000000000081 +:101750000000000000000000001000000010000069 +:1017600000000088000000000000000000000000F1 +:101770000040000000080010000008080000000001 +:101780000000020020000000000000000000000037 +:1017900000000000000800000000008400000000BD +:1017A0000000000000000000008204C000000004EF +:1017B0002140000083001100111009004080020840 +:1017C0000200400010100400C010200090400000F3 +:1017D00084000009400000401000000008000000E4 +:1017E00008000011000000000400080000000000D4 +:1017F000880000000000000000000000040000005D +:101800008800010004009000830082001080000026 +:101810000800840000000000000088000000900024 +:10182000080000000000020000000009900800000D +:1018300021A0900000020200C00020008220C01001 +:1018400080008300A10000400800000084000084A4 +:101850000000000000000000000008000000000080 +:101860000000000000000000000000000300000075 +:101870004000000000004100400040000000002047 +:101880000000080004100810212020000020C004DF +:101890000000000041840900000000202100000039 +:1018A000040000000000000021000084050000404A +:1018B00000000021020000000000A020080000003D +:1018C0000821081000400000080010000804000073 +:1018D0008205820008080000820000000000044128 +:1018E0000041081100000002000008110011001161 +:1018F00000000811824104020000C0000800080036 +:1019000000020000000408090020000000000000A0 +:1019100000028800000900110000A0040000080077 +:10192000080200099000A040000090000000400064 +:10193000000020000900800000000000040000A05A +:1019400000000000000000000004000200A00020D1 +:101950000000000000000000002000000000110056 +:101960002000000000C000000000118811002000CD +:1019700000000000000020C00020008800000000DF +:10198000100000000000000009000020000003001B +:1019900000000000110000000000020040000000F4 +:1019A00021000000000000880488000021000000E1 +:1019B0000000002000050000010500000000A180DB +:1019C000010001000141010501009000000001003B +:1019D00000000000000000410000000000000000C6 +:1019E0008200000000000000000000001000000065 +:1019F000000000800000000008000000000000005F +:101A00008200A000000000000000000000000000B4 +:101A100000000000080000000005000000000000B9 +:101A20000000840008000000000000110000900089 +:101A3000000000000800000000004000000000005E +:101A400004100420040010002000100000002040BA +:101A5000080000000040000000000000000000003E +:101A600000080000040000C00000000000000000AA +:101A70000000000003020000000000000000000061 +:101A800021040800080020C00002000003000890A4 +:101A900008000304030800081100212000000500CD +:101AA000000000000000000000000008000000002E +:101AB00000020088000000820000201088008800DA +:101AC0000010200000211000000000000011004064 +:101AD00000090040000000000800000000000000B5 +:101AE000A0088200000000000000000002000000CA +:101AF000000020000000000000008400000008003A +:101B00000000000040000000000090000000020003 +:101B10002000000082000000000008000000C0005B +:101B20000000020000100221000008000000000078 +:101B30000000820010000800900005040000000072 +:101B40000000200000000000000000000000200055 +:101B5000000000000000090000000000000000007C +:101B60000000000000900000020800C0000000001B +:101B700000C000002004000000000000000021045C +:101B80000400000011000520000005000000000016 +:101B900000000000004000020302202000000000BE +:101BA00000880000000010004000040000040090C5 +:101BB0002100002000000500000000000001C0001E +:101BC0000000C18301010000008908A0C000C0001E +:101BD00000C0C0820000000101A010000000000051 +:101BE00000000000000000000000000000000000F5 +:101BF00000C00000000000000084C00000000000E1 +:101C000000000000000000000000000000000001D3 +:101C1000010000C00000010100010040A000000020 +:101C200000000000000001000000000000000001B2 +:101C3000010000C000000000000000000000114191 +:101C400080410000C18340080021114080008003D2 +:101C50008541008080800004004002048000000074 +:101C60000000000000000000000000000000002054 +:101C700005000080000000000000058080000000DA +:101C80000000000000000000000000000000000054 +:101C90000010020000800000042000040480000006 +:101CA00000000000000000004100000000000000F3 +:101CB000052020000080000000000000000000005F +:101CC0004100214100C1000005410841000000041D +:101CD00082C10041004103000200C0410084002095 +:101CE00000001000000000000000000000000000E4 +:101CF0004000C10000080000000000000000008457 +:101D000000000000200000000000000000000000B3 +:101D100000000300800000000000410084410041F9 +:101D20000040000003000000008000008000000070 +:101D30000000900083000080000000000000000010 +:101D400000410000000100C100000101010100820A +:101D5000000141C1C08300010100C00041010084B5 +:101D60000405000001000000000000000000000069 +:101D700000009000824000000020400000000000B1 +:101D800000C0000000000100000000000000000092 +:101D9000000000008200020400000000400040013A +:101DA0000001000100000100000000C00000200050 +:101DB000000000001100212000040484A0000000A5 +:101DC0000000000100400001C1830000000000008D +:101DD0000010C00000840000C140000000000000AE +:101DE00001000100000000000000000000000000F1 +:101DF00000000000000400000000000000000000DF +:101E000001000100000000000000000000000000D0 +:101E100000000000000000C0000000000000000002 +:101E200000010000000000000000C00000000000F1 +:101E300000000000000000020000C00000000000E0 +:101E400000000000000000800041C183000000008D +:101E500000210905000000410041C1C1000000004F +:101E60000021030441000000000000000000000009 +:101E700000000000000000800000000000000000E2 +:101E800000004100410000000000000000000000D0 +:101E90000000000000000000000000000000000042 +:101EA000000000400500000000000000800000006D +:101EB0000000000000000000008000008000000022 +:101EC0000000000000000000C18000418089000087 +:101ED0000802000011042005C1C1008080800000BC +:101EE00020040004800002200010800000C10000D7 +:101EF000000000000000000000C100000000000021 +:101F0000000000208000032000000020800000C1AD +:101F10000000000000000000000000418000000000 +:101F2000000020410000808040840000800000C14B +:101F30000000000000000000000000800000002001 +:101F40000000000000000000000041C0880182087D +:101F500000000100C00084200104400900C040C00E +:101F600000000101000184880105000120000040FB +:101F7000000000000000000000000003400000001E +:101F80000000000000018400018500000001200025 +:101F900000400000000000000000000000410400BC +:101FA000000000000101000040100104000040009A +:101FB00000C10000000000000000000000C0A00000 :101FC0000001000000000000000000000000000010 -:101FD000000048110000000000004842841200E0A8 -:101FE000070041420000000000004882000000009D -:101FF000000048420000000000004842811200E05A -:1020000007004842000000000000484200000000B5 -:102010000000000048420000000000004842811219 -:1020200000E00700484200000000000048420000B5 -:10203000000000000000000000000000000081001F -:1020400000E0000048000000000000000000000068 +:101FD000000048420000000000004800811200E0BC +:101FE00007004842000000000000484200000000D6 +:101FF000000000000000000000000000810000E080 +:102000000000480000000000000000420000000046 +:10201000000000000000000000000000000081003F +:1020200000E00000480000000000000048420000FE +:102030000000000000420000000000004800840092 +:1020400000E00000604200000000000000420000CC :102050000000000000000000000000000000000080 :102060000000000000000000000000000000000070 :102070000000000000000000000000000000000060 @@ -107054,209 +107054,209 @@ :1021200000000000000000000000000000000000AF :10213000000000000000000000000000000000009F :10214000000000000000000000000000000000008F -:102150000000252B0000000000000000000000002F +:102150000000257B000000000000000000000000DF :10216000000000000000000000000000000000006F -:10217000D4A4757B000000000000000000000000F7 +:10217000DEA4747B000000000000000000000000EE :10218000000000000000000000000000000000004F -:10219000DEAE0000757B00000000000000000000C3 +:10219000DE2E0000747B0000000000000000000044 :1021A000000000000000000000000000000000002F -:1021B0000000DEAE747B00000000000000000000A4 +:1021B0000000DE2E747B0000000000000000000024 :1021C000000000000000000000000000000000000F -:1021D0000000DE2E60DE0340000000000000023040 -:1021E00000000000000000000C40000000000000A3 -:1021F00002C07B0660DE03400000000000000231E8 +:1021D0000000DE2E60DE034000000000000002313F +:1021E00040000000000000000C4000000000000063 +:1021F00002C07B0661F603400000000000000231CF :10220000E0000000000000000C40000000000000A2 -:1022100002C07B06000060DE0340000000000000FA +:1022100002C06F860000615E034000000000000005 :102220000231E0000000000000000C40000000004F -:10223000000002C07B066156034000000000000061 -:102240000230A0000000000000000C400000000070 -:10225000000002C06A86000020008400880300009D -:102260008280088408000000004000000004001183 -:1022700000040004200488000000400040030041E6 -:1022800002002010200000100000C0208210000278 -:102290000000844020040001201000000000000223 -:1022A0000008200000050004000000100000840069 -:1022B00000000000200000040000000000410000B9 -:1022C000C0002000000200000080000400000000A8 -:1022D0000000000000040000009000040582008857 -:1022E0001090090489028002000420880000100078 -:1022F000000000404100000040004002C102000414 -:102300004090000000000090000000021101000554 -:1023100000910000002000000000000000002000EC -:102320000040040000000002000010000000000057 -:10233000000000020002400040000000000000C059 -:102340000004000000000000000000100000000079 -:10235000400000000000000000000204000900002E -:10236000000882000004891000050000209082050A -:10237000001000000200020300800002001100C0F3 -:1023800000C10005020000C00208080000408241B0 -:1023900000108200001090100200000000000000F9 -:1023A000900000000003000000900880000000037F -:1023B0000000000002000000024100000200004096 -:1023C0000000000200020000004000000041000088 -:1023D0000000820000000200000000400010041015 -:1023E000021000040000000504080010000800416D -:1023F000020000080084001009840010001105820A -:102400002002000200100408004000408084008880 -:1024100000C000400008000000050008000004C0E3 -:10242000004000880010001004880011804000085F -:102430000008000000040008000000000010000474 -:102440000002050000110008000400000004000262 -:102450000002000400040040000000000008900892 -:102460001180200302024009202140109183400086 -:10247000004088040411001021A1080904219008DB -:102480004000400808040441A00208034003000380 -:10249000A000010401A0401004000021000200007F -:1024A00000080041000200000040000804404021F4 -:1024B00000808800004088000000A005002040083F -:1024C00000080021C0000000900000204000000033 -:1024D000040000080000C020000000000000000010 -:1024E00005000840000000018008030041012002AF -:1024F0000084000000100000008208104108100055 -:10250000210021404002000800000000808800C037 -:10251000090800100888040300A000A000000000C3 -:1025200000000000000809A000080082020000026C -:102530000008051041A000081008108200A000004B -:1025400008000088000000202110009041000000D9 -:10255000400000000000000000000000000000003B -:10256000000000001000080002009010000004119C -:1025700008C0C004001108030004000000000002AD -:10258000822100000000000500000020000200047D -:102590000004004140004120000020000000020033 -:1025A0000000000000000000000000000040C0210A -:1025B00001101011000000000800000000000000E1 -:1025C00000002080880000004000000000000000A3 -:1025D00000000000000400000000000000000000F7 -:1025E000000000000082000805842000008500082B -:1025F000410420200000030021000900208409007C -:1026000000000200030020900020000000000000F5 -:1026100005000000000000880803000000000040E2 -:102620000040110000000000000000000000000455 -:10263000000008C0004000000040000002000082CE -:1026400000200000030200000000008800000000DD -:102650000000000003000300000003000000000071 -:1026600000002100000008090421042108000000E6 -:1026700008400000000800000000824010020040F6 -:10268000C041000000850010000000410040000033 -:1026900000000020002101000003001000000020C5 -:1026A0000000000000210000000000008210000077 -:1026B0000000000082000000000000000000004058 -:1026C00000000000000084000002000082000021E1 -:1026D0001000000400008200000000000000000064 -:1026E000000000000800000000000088008804A02E -:1026F00009A0020104A010022100000800000384C8 -:102700000300008400C00202030000000300100068 -:102710001108020008A008880200000805A020088F -:102720000400000200880082000000000000000099 -:102730000800111004000800080420000008002010 -:1027400020400020009000880000000000000000F1 -:102750000000042010000000200200000000000023 -:102760000800100000000000000402000000000843 -:102770002000020900040305000400030000000813 -:1027800000001008100300000008002108080011D4 -:10279000042100008400001000000004000000205C -:1027A0000000000000000009000900000004000013 -:1027B0008200000000000000000000002000100067 -:1027C000000000050000000000008240000000083A -:1027D00000000000000002000000000000000000F7 -:1027E00004400000000000000000000000000000A5 -:1027F0000300200011820000208410A1000002824A -:102800000000000000000000000200400004000082 -:1028100000000000000008000008000000000000A8 -:102820001100000000000000000000040000000093 -:10283000030000C00000030020000010009000A072 -:10284000110000C00800040003100000000408008C -:1028500000400000000000000000008400000304AD -:102860002100204040000082000021000000000004 -:102870000800000000000402008800080202C000F6 -:10288000000000A002840000000000000000000022 -:102890000101000000009084000400A0C0A010000E -:1028A00000000010082000010001000100000000ED -:1028B00000000000000000000190002000A09084B3 -:1028C00000000000000000000000000010000000F8 -:1028D00000000100A0000000000000000000000057 -:1028E00000000000000000000000000000000000E8 -:1028F000000080000000000080850003048900853E -:102900000000000000800000000000000000000047 -:1029100000002121000000100000008000000000E5 -:102920008000100000008000000800080010002057 -:102930000000000000000000000010000000008007 -:1029400000000000000000000000000010008000F7 -:10295000000000000800000000000000000000006F -:102960000000000000000000000000000000000067 -:102970000000090010004000030020000041044056 -:1029800005000000000080000000000000000000C2 -:1029900000000380100020000810000000000080EC -:1029A00000008000000000808000000000000000A7 -:1029B00000000000000000000000000000000021F6 -:1029C0008080800000000002000000000000000085 -:1029D00000000000000000000000000000000000F7 -:1029E00000000000000000050000000000000000E2 -:1029F0000000000000000000000085002000000131 -:102A00000100000000001000100000004000C000A5 -:102A1000C000840000100100000000000000000061 -:102A200000A00000100004008408088800000000D6 -:102A30000000000000000000000000000000200076 -:102A40000808A0A00800000000000000000000002E -:102A50000000000000000000000000000000000076 -:102A60000000000000000000000000400000000026 -:102A70000000000000000001000000010000000252 -:102A800003A10009010000020088002010C000001E -:102A90000000000100010000000011010000C0085A -:102AA000008408080088000000A00084109100083D -:102AB000000000000008000000000000000000000E -:102AC00002400000000082C0000000000000000082 -:102AD00000000000000100000000000000000000F5 -:102AE0000000000000000000000000008400000062 -:102AF0000000000000000000001000210021030081 -:102B00000589A19110C00210000000000000000023 -:102B100000090000000200080010214121210000EE -:102B2000008000000080008000040080000000049D -:102B30000080080008000000000000000000000005 -:102B40000000800000000000800000000000000085 -:102B500000000005001000052040001000030011D7 -:102B60000005000000000000000000000000000060 -:102B70000000000000000000000000050080008050 -:102B800000090000000000000000000000800000BC -:102B90000000000000000080000011102100020071 -:102BA0002011800000000000800000000080000074 -:102BB0000000000000000000000000000000000015 -:102BC0000000000000000002008000008000000003 -:102BD00000000000000000000000000000000000F5 -:102BE00000000000000000000000000080008000E5 -:102BF00000000000000000000000000000900082C3 -:102C0000002000002000200000000000000000085C -:102C10000010000000000084000800000000000018 -:102C2000000000004000100040000400000002A06E -:102C300008900000000000000000000000000000FC -:102C4000000000000000200002200004000002003C -:102C50000000040000000000000000000000000070 -:102C60000000000000000000000000000000400024 -:102C7000020088009000000000000000000000003A -:102C8000000000000000000000E00700410000001C -:102C90000000000000000000000000000000000034 +:10223000000002C07A8661560340000000000000E2 +:102240000231E0000000000000000C40000000002F +:10225000000002C06A860000000300004000000089 +:10226000000004000000002000002000000000002A +:102270000000000400004000000000000400820094 +:102280009000200504000000000020004000000431 +:1022900000000200040000030000880002000000AB +:1022A0002000200020002000880041004000200481 +:1022B0000400C00020004000000288002000000050 +:1022C0001082200020108410000441008800880043 +:1022D000100020002000000400004000400000002A +:1022E00041000000000000000001000000000000AC +:1022F0001000000000910000000000000002000437 +:102300004000000000000000000200080000000281 +:102310000002090000900090000000000000000092 +:1023200000C000000040210000400000200021000B +:1023300021020400000000020000414041000004AE +:10234000400200400000040540052100080240044E +:102350000090000000022100000200050040010082 +:102360000000004000000003000301000200828022 +:1023700008100100000000C08300020000000000FF +:102380000008000002050141000000830000000574 +:102390000000020301040302041000000200001107 +:1023A00000048200004000000002024000402000C3 +:1023B00003902102400040884004400000000000DB +:1023C00000418205020090000209090082004108D4 +:1023D00040104009000420104004400000000004A8 +:1023E000040200000500050402000008048400083F +:1023F000002000091000000000020200000000049C +:102400000004008200828000020000080802000828 +:1024100000A0000200082010A00900040000041021 +:1024200000080082000804110500021100410009A3 +:102430008284A002A0C0C108804085828408000870 +:10244000200800000008C00800000004880800847C +:10245000880885088008108380088201A008000091 +:1024600000000080000800080000000300A0000930 +:10247000000200000040000900102009082104218A +:102480000021000000020000000000000021000800 +:102490000005020501210000002190040021000038 +:1024A0000000112100200111100000050400400867 +:1024B00090210008000840080000C000A0000000B3 +:1024C0000021024000080000001100000000000090 +:1024D00000080000000000400004000000040004A8 +:1024E0000000008400202100000000000000002106 +:1024F0000000000000C0000000000001400080203B +:102500000000000000000000410000000000210069 +:1025100000000000800002004000000000000000F9 +:102520000000000002004000020000000000000067 +:102530000000410000000004210010840000410060 +:102540002100000000000300000000004100000026 +:10255000000000001000080000004101050000011B +:1025600020010000000000004000000340030000C4 +:10257000834000800080011000000000C0100008AF +:102580000000001000000000A000000082410011C7 +:102590000002001110000000000220042004A0042A +:1025A000200400008409900010800802C040004010 +:1025B0002000004184008200080400002011200552 +:1025C00020402010200002001000A0111000004048 +:1025D00001200000A0800409C01008800002014012 +:1025E0000040101020040000218400A000A0000082 +:1025F00003A00400002000100400000000001105EA +:1026000000040008000041A0410000A000000000FC +:10261000050800010082058440024008A120C18312 +:1026200000409000000020840010404041850300DD +:102630002101200811000300410021A12100832075 +:1026400089909100A00000000000000000000888B0 +:1026500000000808000000028040038300044101DC +:102660004000008400000020200000000011000055 +:10267000008000000402900800400400A011001037 +:10268000000010031000880010020000000000008D +:1026900000030003880000051040A0008211844060 +:1026A00000000000010500000021A0000000C000A3 +:1026B000000082008200000000000000841104007D +:1026C000000090110040A00000000011A0000000D8 +:1026D00000000000A0000800000008210000020423 +:1026E00000000005000000000000000000C0110014 +:1026F00000000010000080C00000000080000020EA +:1027000000200000000000C02108000000000000C0 +:1027100000000000000000000000000100000500B3 +:102720000001000000004000000008000000000060 +:1027300000000000000000000000208800000000F1 +:10274000030000040000000110000000000004006D +:10275000000000040800000000000020000041000C +:10276000830100000000000800400003000004880E +:1027700000094002401000030800050500000300A6 +:1027800000400808000000100285008002080008D0 +:10279000080302000000200500008910000504085D +:1027A00000040084200400840108000000084000A8 +:1027B00000210010820800028800820520002040CD +:1027C00040000540000000090809090000402040C1 +:1027D0002000002040008200000020000010820441 +:1027E0000004A0200008000400210004008409085F +:1027F000802003002085022000000084C00411A076 +:1028000010080000200020080001804000408010D7 +:1028100000840000890821202088008402C00982E9 +:102820000000008411042008090420C000000002F8 +:1028300003880910000020884002110004000000F5 +:10284000001100000282030009881100020041000B +:102850004000410000000000208411822000080197 +:10286000000100010000080010010000000100004C +:102870000000000000000000000000000001400512 +:1028800000910010900020C04190918402820000CD +:102890000000000000000000000410900000000490 +:1028A0000021000000010000050410000088000065 +:1028B0000100000040C0008800000004001000007B +:1028C00000020002000000002040041120A01010AF +:1028D0000000000000000000104000A000080802F6 +:1028E00040C10102841104100001850100000000B4 +:1028F00000000000000000000002001000050020A1 +:1029000080410002000300400080100083008080AE +:1029100000000000000000000000110000000000A6 +:102920000005001000200008100004000300000053 +:10293000000009001000800000000000008000007E +:10294000000040800080400000002005834000001F +:1029500080890000000000000000000000000080EE +:10296000000000C040208011808900040310000393 +:102970000005000000000040000000000000000012 +:10298000000000000002008980002105A08085056C +:1029900041800000000000000080000080900004E2 +:1029A0000000000080000000000020038490410827 +:1029B0001000000000008080000000000200C190B4 +:1029C00003091000108021A1A020A0880300892104 +:1029D00000000803000000000000000080008009E3 +:1029E0008000800041800309020405850300050082 +:1029F00002001103000000000001000000000000C0 +:102A000000000000020090000221080000004008C1 +:102A1000030041A0000000000000001000008241FF +:102A2000000000C00000820400000082000083C19A +:102A30000001010400000000820800000084000082 +:102A40008204000101A02140910284001005410090 +:102A500020884090888900000000000000000800E5 +:102A6000100088400800000800000001000400A0D9 +:102A70000000010000850088000200000002000044 +:102A8000000001000000C088001000901002908833 +:102A900000A00008C11100020000000200000000B8 +:102AA0000040A021010001400002830000000088D6 +:102AB0004041C0000001000001010041820000907F +:102AC000010000008410000400000008040500015B +:102AD0002041018982A00540000082000000000022 +:102AE00002900020028441C08800010001C10289D7 +:102AF00000000000840000000000000000000080D2 +:102B000000000200100000008000110000008000A2 +:102B10000008009000838908008000000000000089 +:102B200009200089000509200380028003000000BD +:102B3000052000890009041000000408009000200E +:102B4000000304000000800004004000000080A199 +:102B5000000402400404C141848000000000000021 +:102B6000000000000000008021800010100211050C +:102B7000048900400009000900050004002100004C +:102B80000000000200020000000080050005800037 +:102B9000800000000004008000030000008000802E +:102BA0000000800000000084000000000009800098 +:102BB000000080800000000000090000000000000C +:102BC000000000000004800000000011800004806C +:102BD0000480001008080408C080084000000000BD +:102BE000000000008000808000000000058082045A +:102BF00083000909008003090000050300010000AB +:102C0000000000000001001100880000C000200446 +:102C10009088880000A000210084000100000002CC +:102C20000010000008000000000300000000080081 +:102C3000040800000408000000880001000084006F +:102C40000088880000000091200000880000040037 +:102C50000108010800019008A19185C04101000010 +:102C6000000000000000400004A02090000082C08E +:102C7000040191000101004000000000000100116A +:102C80000000070000000081000007000000008134 +:102C9000000007004200000000E000000082000089 :102CA0000000000000000000000000000000000024 -:102CB000000007000000000000000000000000000D +:102CB000000000000000000000E0000082000000B2 :102CC0000000000000000000000000000000000004 -:102CD00000000000000000000000000000000000F4 +:102CD000410000E000000000000000E00000000AE9 :102CE00000000000000000000000000000000000E4 -:102CF00000000000000000000000000000000000D4 -:102D00000000000000000000FF00FFFF6F0F6F0FCA -:102D10000000000000FBFBFB0000000000000000C2 -:102D200000000000000000000E060E020000060673 -:102D3000909F909FFFF066F0000000003C3C000078 -:102D400000000000000000000000009999993C3C40 -:102D50000000FFFF0F0F0000000000000000000057 -:102D60000000000000000000000000000000000063 -:102D70000000FFF67EF600000000000000000000EA -:102D800000000000000000000000FF0000003F0FF6 -:102D90003F0F0000000000FFFFFF000000000000E8 -:102DA000000000000000000000000E060E020400FB -:102DB0000606909F909F99F000F0000000003C3CB8 -:102DC00000000000000000000000000000FFFFFF06 -:102DD00000000000F0F00000000000000000000013 -:102DE00000000000000000000000000000000000E3 -:102DF000000000000090189000000000000000009B +:102CF000000000E007004200000000E000000000CB +:102D000000000000C0C0FFFF000000000000000045 +:102D1000C3E700F0F6F6F6F6000000003C34FFF7DB +:102D200000000000C33CC33C0000FFFF0FF00FF0A9 +:102D30000FF00FF0CCCCCCCC0000FFFFCCCCCCCC37 +:102D400000000F0FF0F00F0FF0F000FF00FF00FF8A +:102D5000FF000000FFFF0FF00FF01F0FE0F00F0F5C +:102D6000F0F0000000000000000060009000C30FC1 +:102D70000099F0000F00FF6666660000000000008A +:102D8000000000000000C0C0FFFF000000000000C5 +:102D90000000C3E7FFFF76F67676000000003434CB +:102DA000FFFF00000000C33CC33CFFFF00000FF02A +:102DB0000FF00FF00FF0CCCCCCCCFFFF0000CCCC50 +:102DC000CCCC00000F0FF0F00F0FF0F0FF00FF0071 +:102DD00000FFFF00FFFF00000FF00FF00F0FF0F0FB +:102DE0002B0FF0F0000000000000000000600090D9 +:102DF000C30FFF9900F0000FFF000000000000006B :102E000000000000000000000000000000000000C2 :102E100000000000000000000000000000000000B2 :102E200000000000000000000000000000000000A2 @@ -107265,1892 +107265,1892 @@ :102E50000000000000000000000000000000000072 :102E60000000000000000000000000000000000062 :102E70000000000000000000000000000000000052 -:102E8000000000000000000000006666FFFF3FFF3A -:102E90003F0FC3C3C3C3F4F4F4F4000F000F0000EA -:102EA0000000D0D0DB000000000000000000FF0F99 -:102EB000300000000000C6C6C6C660C06FFF00003C -:102EC0000000000000000000000000000000000002 -:102ED000FF99F090C381C381000000000000000052 -:102EE00000000000000000000000000000000000E2 -:102EF00000000000000000000000000000000000D2 -:102F000000000000000000000000000066660000F5 -:102F10003FFF3F0FC3C3C3C3F4F4F4F40606060631 -:102F200000000000DBDBDBDB000000000000000035 -:102F3000FF0FFF0F00000000C6C6C6C660006F3F4F -:102F40000000000000000000000000000000000081 -:102F50000000C381C080C381C08000000000000069 -:102F60000000000000000000000000000000000061 -:102F70000000000000000000000000000000000051 -:102F80000000000000000000000000610006000DCD -:102F9000000100610007000D0001000000000000BA -:102FA000000100610006000D000000610006000D38 -:102FB0000000800040000000000000610006001DCD -:102FC00000A000610006000D0000000000000000ED -:102FD00000000000000030000000000000000000C1 -:102FE0000000000000610006000D00000061000606 -:102FF000000D0000000000000000000000000000C4 -:1030000000000000000000000000000000000000C0 -:10301000F330F33000000000000F0C0C0000000043 -:1030200000000000000000003C003CFFFFFFFFFF2D -:103030000F3F0F3F000000000000000000000000F4 -:10304000C3C3FFFF000000000000000000000000FC -:103050000000000000000000000000000000000070 -:103060000000000000000000000035FF00CA000062 -:1030700000000C05CFAF00000000000000000000C1 -:103080000000000000000000000000000000000040 -:103090000000F330F33000000000000F0C0C0000C3 -:1030A000000000000000000000003C003CFFC30ADC -:1030B000C3FA000000000000000000000000000053 -:1030C000000000003C3C0000000000000000000088 -:1030D00000000000000000000000000000000000F0 -:1030E00000000000000000000000000030FF00CFE2 -:1030F000000000000F050FAF0000000000000000FE -:1031000000000000000000000000000000000000BF -:1031100000000000CF45CF45BFBF8282C3C300FF80 -:10312000000000000000000000000000000000009F -:10313000FF00FF0005C3F5C3000000000000000011 -:10314000000000000000000030203C2C00000000C7 -:10315000000000000000000000000000000000006F -:10316000000000000000000000000000000000005F -:10317000000000000000000000000000000000004F -:10318000000000000000000000000000000000003F -:10319000000000000000CFCFCF00BFBE8382C3C3BA -:1031A00000FF000000000000000000000000000020 -:1031B0000000EB00EB0005C3F5C3000000000000B9 -:1031C000000000000000000000003F7F3C7C000089 -:1031D00000000000000000000000000000000000EF -:1031E00000000000000000000000000000000000DF -:1031F00000000000000000000000000000000000CF -:1032000000000000000000000000000000000000BE -:103210000000000000000000400088090088211024 -:103220008480200040112004C0800084200300839B -:1032300002108203888000804004001000002000FB -:1032400002052010200400000000C000000800005B -:103250000008040000032003200000002082000575 -:10326000000040000004008901000000000200800E -:1032700000000000840300000000000800040000BB -:10328000000000000004000004020080000500802F -:1032900000000000000040824000000004004002E6 -:1032A000400121020002000000020202000211405F -:1032B000020200020090000402040202000000006A -:1032C00000000000000440820000008200000000B6 -:1032D0000002000200040000410089A00084801068 -:1032E0002100000000000000210240000000210138 -:1032F00000020090000200020020000000200040B8 -:1033000000000040000000000000008400020000F7 -:103310000002000000000000900302040009000009 -:10332000200400000002000002831040020200108E -:103330000904021090000821001002410208000256 -:1033400000089000400900400808901000000800A4 -:1033500008C10090840000000000204040000002EE -:10336000004000000000000000000000000000021B -:103370002040000300C0001000C00000000000005A -:1033800000800000000000000000048002A0000493 -:1033900008200080008000800280020800820284F1 -:1033A000000800C000844011000400020041000930 -:1033B00000004008058802400384008405080000DE -:1033C00005080910008491044041044000900084E5 -:1033D0000000004000020084001000008090800483 -:1033E000020900090004110208840084040800088E -:1033F000000100040008040400890002040800849D -:1034000000400040000000000000000080041005A3 -:1034100000014003002000200020002000030008DD -:10342000080200000211002004040808000800102F -:1034300000020000000520080008004004004010C1 -:1034400084080021100000088208042020210000C8 -:1034500000009040000200080010402000004040A2 -:103460008800204000000000080000100009200033 -:103470008800000400058404000000089008000093 -:103480000400000000000000000500000000000033 -:10349000000200A00000000001000100000003A0E5 -:1034A0004110A100000000A00090080280020088E6 -:1034B00000000888000200400000038400400984E6 -:1034C00004002188000000A000840888058800000E -:1034D00000C00000050100900088008280400000CC -:1034E00021004108C10000104100000000880000D8 -:1034F0000002000000900808000100080090400051 -:1035000008400002000000000082000000000000EF -:10351000000000010003008400000400040000001B -:103520000400000082050010824000008209002192 -:103530000800A00000020000820400000802000051 -:103540000082000508000802000900028200000451 -:1035500000001040824182000000000010000000C6 -:103560000000201000800000400088000000824021 -:1035700000110840000000000811001100000000C8 -:103580009000C00002000200A00000000000000047 -:10359000000000008200000000820402000004001D -:1035A000048010840000008200040000000803086A -:1035B00040A0088400A0411000A00240000000408C -:1035C00040082104059000044000400020C0000095 -:1035D00000000082008800C000400082000400005B -:1035E00000200000C1084140080003201182004073 -:1035F0000000210000000000008800820990000007 -:10360000020040000800020010A0110000000000AD -:1036100002000900000003080300210480000000EC -:1036200082008802840282410080008290000003B0 -:103630008200820284400000000000030040080075 -:10364000002100C000080004A000004000000000AD -:103650000000000800000811080000100002C0006F -:1036600082000805000000002010004100410021F8 -:1036700008001011000000000000010000410000DF -:10368000410000040090820000000008000888004B -:1036900000000000C00040004000880000A10000C1 -:1036A0000400A002010505000088000203100000CC -:1036B0000008000411050000110000400000000493 -:1036C00000000000110202080001000000000002DA -:1036D00000000000218400000000200009410000DB -:1036E0002084000200080000000491000000000097 -:1036F000000000000800210003000000020000009C -:103700000000C00000010002000400A00020000032 -:103710000400000000000000800000000000000223 -:103720000000800000010200080090210000084015 -:10373000A011100000210000001000000000000097 -:1037400088030121020000000003000010100400A3 -:10375000000884400000000000000008000000088D -:103760000800C000080001850000004100030000BF -:103770000521000000410004080090000000400006 -:10378000880000000000000040040000000000214C -:103790008408000300000800820002008202020088 -:1037A0004000A00010104002000500004002001080 -:1037B0004100080000000000090200C000001000E5 -:1037C00000020000408200000202410005002100CA -:1037D000400400024002210010000000000002002E -:1037E00000000000000000000810000020000000A1 -:1037F000000020000000000008001140008220C0EE -:10380000000003000200000002008805004005409F -:1038100000400200020000002040210002A00989AF -:103820000000409002000001004100000000000084 -:10383000000000000009A005008300030001000053 -:103840000201000000000000000000000000000075 -:10385000000000000190020200840010001000042B -:10386000008200200008000000001000000001009D -:10387000119190A000C100000000000000000000B5 -:10388000000088010000A00001000101A000000864 -:103890000088001000400000000000000000004010 -:1038A00008A10408828300090100048900000000C7 -:1038B00000000000000000C000A100850082002080 -:1038C000110900100020000000000020002000006E -:1038D00000000500000010008080008000800000D3 -:1038E0000080000000000000000000000000000058 -:1038F0000800081005A00003000000000000000000 -:103900000000000300080005004003114005000509 -:103910000080000000000000000000000000000027 -:1039200000C19120808000101102202180820005BA -:103930000500000020000800030000000000050250 -:1039400000002000400010000000000000000008FF -:103950000020000000000000200041A11090210084 -:103960000000004100008000030020000800100853 -:1039700000001020859004C14021000000000000DC -:10398000000003000300040008004005100040028E -:103990000000000000000000000000000000000027 -:1039A000000020C020028382A12005802111108008 -:1039B0000011900000000100010000002000000044 -:1039C0008210000000000000010000400000000024 -:1039D00000000000000000000000090002C0008399 -:1039E00001100200900900820800000000000000A1 -:1039F00001010000A10208C001A0000100000000B8 -:103A00000000000000000100010001900000000023 -:103A1000000000A000000000000000000000000006 -:103A200000000000A1C0A1008584098300020108F4 -:103A3000010400080008000000A00082100101003D -:103A40004001A10000000000020100000000000091 -:103A50000000000100004000000000001000000015 -:103A600004001100100000000000A000C01000A120 -:103A700000A11082000010004041A1401001000090 -:103A800000000000000000000000010100000084B0 -:103A90000090010500A040000000C000820000006E -:103AA000000000000000001001A00002A0040400BB -:103AB00000002000000100000000000000808010D5 -:103AC0000308082140020003412188210000002052 -:103AD000080000030040000000000000000080001B -:103AE00000000040210900000000000080000009E3 -:103AF000008800A180800000004110909020882163 -:103B00000000000000000000000010202121000043 -:103B10000040212121A10089800000000000000058 -:103B2000000000000000000000204003000340806F -:103B30008303201103410008000000200000000062 -:103B40004100400021004008000500800000000006 -:103B50002100020011000800000000000000000029 -:103B600080A0800000000040000000800000800075 -:103B700008002020210002080000212110218000DF -:103B8000C003000000000000000021004000000011 -:103B90001000004000000080101100000000000034 -:103BA00000000000000000000000212021A0000013 -:103BB00011022011020505008300000000A0009002 -:103BC000000000000190010000010000001000C092 -:103BD00000000100010000000100000000000000E2 -:103BE00000001040200810881001100090102000E4 -:103BF000A000010000000100000000009121100061 -:103C00000802A1000000000000000000890005007B -:103C10000000C1000001009000080000000000004A -:103C2000000000000000000000000000A101880961 -:103C30000000C001A101C000080008000000000051 -:103C40000000000000000000000000000000000074 -:103C5000000000000000000000000000000000E084 -:103C600000000000000000000000840000000000D0 -:103C70000000410000000000000000000000000003 -:103C800000E00000810000000000000000000000D3 +:102E80000000000000000000000000000000000042 +:102E90000000666666666666666091F391002C0CBB +:102EA00090F0FFFFFFFF00000000999999990FF043 +:102EB0000FF0F0F0F0F000FFFF00F0F0F0F03CC396 +:102EC0003CC3F0F0F0F000003333333369696969D3 +:102ED0000FF00FF0F0F0F0F000FFFF00629D669938 +:102EE0006699649B00F7FF080000000000000000E6 +:102EF000FFFF5FFA00100008C0C3C0E70000000039 +:102F000000000000000000000000000000000000C1 +:102F100000000000FFFFFFFF60606060F3F3F3F369 +:102F20000C0CF0F00006000000000000666666660B +:102F30000FF00FF00F0F0F0F00FFFF000F0F0F0F1D +:102F40003CC33CC30F0F0F0F0000333333336969A9 +:102F500069690FF00FF00F0F0F0F00FFFF00669968 +:102F600066996699669900FFFF0000000000000066 +:102F700000005FFAFFFF00000000C0C30024000053 +:102F80000000000000000000000000000038000009 +:102F900000000061003E000D0000A061403E000DF9 +:102FA0000000006150070005000000000000002044 +:102FB000100240618006002D100240618006002D45 +:102FC000100240618007002D100200004061800661 +:102FD000002D100240618006002D10024061800526 +:102FE000C0211002406180000001000200000000CA +:102FF000000000008000000000900000006150040C +:10300000000100000061000000010000000000005D +:1030100000000000000000000000000000000000B0 +:103020000000000000000000F505F50500000000AC +:103030000000000000000000D7D7D0000000000012 +:103040000000000000000000FFC30F0300000000AC +:103050000000CF00CF45000000000000000000008D +:103060000000FFFFFF003C3CFF0FFA3CFA3C000071 +:103070000000000000000000000000000000FFFF52 +:103080000C4D0CAEFFFFFF14FF140FFF3FFF0000BD +:103090000000000000000000000000000000000030 +:1030A00000000000000000000000FD01F505000028 +:1030B00000000000000000000000D7D7D707000084 +:1030C00000000000000000000000FFC355410000A8 +:1030D00000000000CFCFCF4500000000000000003E +:1030E000000A000AFFFFFF003C3C000F0A3C0A3CBC +:1030F00000000000000000000000000000000000D0 +:103100000C4D0C4D0CAE00AA1414141400FF3CFF1F +:1031100000000000000000003C003C000000000037 +:1031200000F5C3A000000000000000000000AA2A73 +:10313000000000000000000000000000000000008F +:10314000A0F0AAFF0000000000000000C3C343403D +:103150000000000000000000000000000000FFC3AD +:103160000F03000000000F0F0B07FF00FF00F0F03F +:10317000F0F000000000000000000000000000006F +:103180000000069000007D28FDF83F0F3C003C3C0D +:103190007DFD00000000000000003D053C00000037 +:1031A000000000F5C3A00000000000000000AAAA73 +:1031B000AA2A00000000000000000000000000003B +:1031C0000000A2F3A2F30000000000000000FFFFD7 +:1031D0005F50000000000000000000000000000040 +:1031E000FFC35541000000000F0F0B077D7D28280D +:1031F0008282BEBE0000000000000000000000004F +:1032000000000000000006902828F8F83F0F3C005E +:10321000282828A8A0000000000040000010898095 +:1032200088020010A000000008100000020000004A +:1032300000000000880800000008000000022000D4 +:103240000000002082080200000001000000884009 +:10325000C00000000003400000000000A003840044 +:1032600020008411000000008440820800008800D3 +:103270002100C00020002000C0030000000020004A +:1032800020004000400084008800880400022000E4 +:103290008802200020044000004000008000400020 +:1032A0000202008500914000000080010000200023 +:1032B000000210000020000000000000000041009B +:1032C000000000001000100000000000200000C0FE +:1032D000000140000000000000A0000040000000CD +:1032E0000000000400024000000000010002008213 +:1032F0000000A0002100800209000004000200027A +:1033000000024102000400000004000221040082C7 +:103310000090002000000090010800410000010022 +:103320000085008010000840008200090808001194 +:1033300008100082000002000200004000020200AB +:10334000001000040100000200410010900200C0C3 +:1033500000000000C0080011000000000011020879 +:1033600000000002000000020010028500080000BA +:1033700000080904008402402004008000000010BE +:103380000802102090004100020082000000840921 +:10339000001090000108004008000809000000002B +:1033A000400800020002000480851011008491840E +:1033B0000000800100030500000000C005090301B2 +:1033C0000004008500004008000900C0000400055A +:1033D00000040084000000000084000005040004D4 +:1033E00000410084000900080008008400400083B8 +:1033F0000510050020090041000980410240000835 +:10340000008820048210020890080008000800824A +:103410000384020800080284098480080000000276 +:10342000020000050041000000000000C08300858C +:1034300000C100020002409000400008C0030021CB +:1034400000100010040500000005000200830008C1 +:103450000803004000080041004000020000100086 +:103460000080000800028883820500000008000038 +:10347000000800000021004000401002A0080021C8 +:1034800000210040000800030100000000000008C7 +:103490000010000000000000004000080000410093 +:1034A000000180820000000800880300000005027F +:1034B000054041080009000100030000000003006E +:1034C00000A0100003A000001008410021410304E7 +:1034D00000C0000000000884000003010085000017 +:1034E00085840040000000010340000021A0050089 +:1034F000080808A0030800201100090000010000CE +:1035000000C040000009050000002000000000206D +:10351000000004000000000000A0004011000400B2 +:1035200000094080000000000002000000000000D0 +:103530004090000000004002000501020000000071 +:103540008205001100001000A0402002C010881168 +:103550000004C040A0400004901110118209001125 +:10356000000000840011210084009000820000000F +:10357000C080400200004000008020004000088021 +:10358000C00040094009A0400002014110000204AF +:1035900000041000841008400000000000410000FA +:1035A000000000888002020000820000000000820B +:1035B00000888003000800C0C001419040C1009015 +:1035C00000840300004000A00310000180C00990A7 +:1035D00000A00985009009090089008805A0409095 +:1035E000400000000040408282C000000002020053 +:1035F00000880002008400C0090000028088008862 +:1036000000040004000820020000048240880384B3 +:103610000801030000000040210800000000000035 +:10362000408200888200008800030080002082031E +:103630000008094041108283014000800008081002 +:103640000000212100400000C00082000008A040CE +:10365000080000080080000000020004404110083B +:103660004000820800008400400040054000000443 +:1036700000000000000008000000010800402121B7 +:1036800000A00080C0C0000000000000000000009A +:10369000000001400000000082000000000800005F +:1036A00008000004000000000010000000020020DC +:1036B000090000000808C0010310100100022120C9 +:1036C0000003000002A00000000000001000210024 +:1036D0002101100000000340000000010000400430 +:1036E0000004030421900000080400A0400400042A +:1036F000039000000300028408000020028203916E +:10370000A08803040004030500002100000000005D +:103710000300000020000400090000080000000071 +:1037200041900000000000000021008501210011EF +:1037300000210021000000090902200440110102BB +:1037400000000002000000101021102100410808B4 +:10375000000300C18821200800040040002102214C +:1037600000409005400240400000000890084000E2 +:1037700000408221000000409000A00000050000F1 +:1037800010082040820820002000000000002000D7 +:1037900000400000000082800000000000210000C6 +:1037A00000000000000000000000001021021000D6 +:1037B00000A00090000000000082C0010000890409 +:1037C00040A100880001000000010300000000008B +:1037D0000300008211020000000100C0000500107B +:1037E000A084110140040205208900001100030497 +:1037F000890009090300000003014000080020407F +:103800000004000091010800800084020000000014 +:103810000000000100080200021000000300080080 +:10382000200011001100008200001000014101A1E0 +:1038300040000002400801111008400803890040C0 +:103840008805A0100108082100C000080000000041 +:103850000000000000000200910000000002008350 +:1038600008010000000000820400000000000001C8 +:103870000085002000000002010104C000011000CA +:103880008202028200000000008200000000A0828C +:1038900004A0008282829101200102010401000043 +:1038A000000000000000000000000000000002C155 +:1038B000108880110005809140210082008284419F +:1038C000048880080082218300A100110084000088 +:1038D000000000000000000003004000000011A0F4 +:1038E00021A1851000100000000000000000000071 +:1038F000004120404005000508C040200040000273 +:10390000800011000080000000000000080000009E +:1039100000008000000080809141821000100003B0 +:103920000000000000000000000000000000000097 +:103930000880034102404102910021008802208951 +:10394000200010034109A1000080000280800020B7 +:10395000400089008800400040004009400003000A +:1039600008800983900005002000028040020800C2 +:1039700000000480210003004102000000A180003B +:103980000000000000000000000080080000A020EF +:10399000A000000080410000808041000300201052 +:1039A00041800000000000000000800000000000D6 +:1039B0008000011001010103018288822100A10120 +:1039C000A0A1910040011091A1C090C09000A082E0 +:1039D0000201400008000900C000019001008304BA +:1039E0000104019000838400008401000040000174 +:1039F0008382000090020184000001C100000004E5 +:103A00000200848400000082000082820401A082FF +:103A10008500038282000405408204040000010046 +:103A2000010101A0000000000000000010002000C3 +:103A30000000C0001000000001018801A005018401 +:103A400002C088C0100301A0008204A1400400A0AD +:103A50001000900200000000100000000000008331 +:103A60000005000000000001C08300854001004007 +:103A700082900000000001020105820101000102A4 +:103A8000004183000101000000008401018509005C +:103A9000904082000090C08200020482A082000157 +:103AA000410088C0019100000000000000000000FB +:103AB000000000000000800900030821000200103F +:103AC00008090310009080084002081109838080D3 +:103AD00000800500030000000000800000000008D6 +:103AE0000005000800094103081080101011C120D2 +:103AF00000A000400011000002A00283C1080502DE +:103B000002C0028905400902040500218020044109 +:103B10000200008000000500850000808000008019 +:103B200000049109850403C00000000000000000AB +:103B3000000000000000000004218921040003109F +:103B400041C0004103800002009100A100800041BB +:103B5000080005808480100000800080000000A024 +:103B60004110A1002100200403841100080010105E +:103B700080000000000000000000210200058421F8 +:103B800040400000000000000000004000800000F5 +:103B900080000040008000000009000080C180001B +:103BA00000000009002100000011000000000000DA +:103BB000000000000000000000008221A000C00002 +:103BC0008300014000050140000090A08808908417 +:103BD000C0011100040809029000004000100040DC +:103BE000000911050200A104410000C000000140CD +:103BF00041014000200000200000000083A10000DF +:103C000003C100018200000000000000020100105A +:103C1000000004008200002000C040008200040276 +:103C20000282820000A100000000000100000000EC +:103C300000000000000000040088000000000000F8 +:103C400000005000000000E00000880000000000BC +:103C5000000000410000000000008400000000009F +:103C600000000000000000E000000000810000E013 +:103C7000000084410000000000000000000000007F +:103C800000E0000000000000000000000000000054 :103C9000000000000000000000E000000000000044 -:103CA0000000000000000000000000000000000014 -:103CB00000E007008800000000000700000000008E -:103CC00000003C003CFF000000000000000000007D -:103CD00000000000000000000000000000000000E4 -:103CE0000000000000007D28FDA800000000FFAAE1 -:103CF000F7A20000000000000000003C003C0000B3 -:103D000000F000F0F000F0000000000000000000F3 -:103D1000003CC3FF0000000000000000EF000000B6 -:103D20000000000000000000000000000000000093 -:103D3000FFFF7D28000FF0FFBEBEA0F500000000D1 -:103D4000000000003C003CFF0000000000000000FC -:103D50000000000000000000000000000000000063 -:103D60000000000000000000FFAA5F0A0000000041 -:103D70005F0A77220000000000000000C0C0FCFCC9 -:103D800000003CFF55FFF000F000000000000000C4 -:103D90000000003CC3FF0000000000000000EFEF47 -:103DA0000000000000000000000000000000000013 -:103DB000000000007D28303F303F1414A0F50000C3 -:103DC000000000000000BEBEBEBE20AAA2AA55553B -:103DD0000F0F000000005555555500000000000071 -:103DE00000000000000000000000FFC300C33838DE -:103DF00038380EFE06F68A8ADFDFFFFF55550000D1 -:103E000000000000101010100F0F0F0F0000000036 -:103E100000000000000000000000000000000000A2 -:103E2000555555553A3AAA3A0000000000000000E6 -:103E300000000000D4FFD400FCF50C05FFFF0000DB -:103E400000000000000000001414141430FFF3FF01 -:103E500055550F0F0000000000000000000000009A -:103E6000000000000000000000000000F5C30FC3C8 -:103E70003C3C3C3C0CFC0CFC8A8ADFDF00005555C6 -:103E8000000000000000A000A0003C3C3C3C000002 -:103E90000000000000000000000000000000000022 -:103EA0000000000000003C3CAC3C000000000000B2 -:103EB000000000000000D4FFD400FCF50C050F0F3B -:103EC0000F0F0000000000610006000D00000061FF -:103ED0000006000D000000610006000D00010061F9 -:103EE0000006000D000000610007000D00000061E9 -:103EF0003006000D000000003000000000000061EE -:103F00000006001D0000000000613007000D0001E8 -:103F1000000000000000000080610006000D0000AD -:103F200000610005000900000000400000000000E2 -:103F300000000000000000000061000C000500000F -:103F400085614A0E050D00A0000000000000000081 -:103F5000C3C3F000303000F00000000030F330F355 -:103F60000000000000FF3C3C0000000000000000DA -:103F700000000000000000FF000000000000000042 -:103F8000C0C0FCFCCFC0CFC0000055554155A0AF0C -:103F9000A0AF0000000000000000003CC3FFAF0025 -:103FA000AF00C3C3C3C33F30FFF0000000000000F8 -:103FB000000000000000000000005541FFEBE1FFA1 -:103FC000E1FFCACA000FD782D782000000000000BC -:103FD0000000C3C3F0FF303000F000000000B2B2B8 -:103FE000B2B20020000000FF3C3C000000000000D6 -:103FF000000000000000000000FF000000000000C2 -:10400000000000C33CFFCFC0CFC00000FFFFC3FFD4 -:10401000C0C0CFCF0000000000000000003CC3FF84 -:10402000AF00AF00C3C3C3C30F00CFC00000000088 -:104030000000000000000000000000000041AAEBAA -:10404000E100E100CACAF0FF5F5F0A0A0000000059 -:10405000003CFF3C0D0D0C0C28287D7D10301C3CD5 -:10406000F0F000FF08080808000000000000000051 -:104070000000000000000000D7D700000000000092 -:1040800000000000000000000A3C5F3C000000400F -:104090000040CF45000000000000000000003CFF91 -:1040A0003CFF0000303F0D0D4D0C7F407F40000075 -:1040B00000000000000000000000000000003C289C -:1040C0003C7D202A757F1F3F0020FCC0FCC0000003 -:1040D0000000003CFF3C0D8F0C8E28287D7DBF3FEB -:1040E000BC3CF0F000FF08080808000000000000D9 -:1040F00000000000000000000000D70700000000E2 -:10410000000000000000000000000A3C5F3C0000CE -:10411000C340C340CF45FFFF000000000000000087 -:104120003C503C500000303F8F8FCF8E7F407F400F -:10413000000000000000000000000000000000007F -:104140003C283C7D202A757FDFFFC0E0FCC0FCC01E -:10415000000020000080408001004185201089037C -:104160002188888340842088208200820004000007 -:1041700010020002C004C004828908A0A004410209 -:10418000C000044000000005211088800080A0804D -:1041900000032000000000000008000000000004F0 -:1041A0002002040020008800000088114000000464 -:1041B0000010000000000004000400000080000067 -:1041C00000100011020000000003000000020000C7 -:1041D0000004000000C01002100208008802210044 -:1041E0000800401040020002411041100010004041 -:1041F00000C000900002000200C100040011000194 -:10420000080300040001004000000400002000201A -:104210004120000000000900000040002100009043 -:10422000050021090000008200000000400041005C -:104230000090000100040090000010001084002095 -:104240000084004100000000000000000020000089 -:104250000000000000040005000508108220002076 -:104260008205041000040400080200090003022073 -:1042700008400820A004009002050004000000414E -:1042800000099003000002088200000200090400F7 -:104290000000880000000009000000800000840089 -:1042A0000000000008000000008000200000004026 -:1042B00002050800000001020040018001800000AA -:1042C000012100000190000000000000008001407A -:1042D00002000000020000840008008889080091A4 -:1042E0000009048820890040201000C10010000847 -:1042F0000085841000090505001000080009000869 -:104300000008008200040008410000080009008441 -:1043100000880284000800000084001000020004ED -:1043200000840008038480000004002000090010BD -:10433000000804020000000840030002400440049A -:104340000000044000000202000002000084020499 -:10435000400200000000051002004000000800407C -:10436000000388820403002104100021000340029E -:1043700000000240014000210008200284024002A7 -:1043800002042010000884021003000300219002A0 -:1043900002000200888384000000A003004100089E -:1043A00000210003080000098200842000100000A2 -:1043B0000008001000000009880300000000000051 -:1043C0000004000000412000C00400000040000084 -:1043D0000040002100000021000000088984000046 -:1043E00000A109080302038403A02100000005883E -:1043F000C0A02110020008A000A0008288080000D0 -:1044000008850000800000000800008404A0040269 -:1044100000881082A1080340000000000004000092 -:104420000088000000A041020000000040010000E0 -:10443000000000A0008208A000000300001000009F -:10444000000000A021000002000000000000210088 -:104450001100000108844100050000000880C01020 -:1044600084020040030201050009A0C0000400000E -:1044700000410000C021008000200000000308412E -:10448000012000800009200008000803000008093E -:104490000800080000000000009002C000001000AA -:1044A000000008000809080040094009020400094A -:1044B0000000000900028200900090000800400007 -:1044C000880288020000000010200000C0000000E8 -:1044D00082000400400000000002A00082000002F0 -:1044E000030040850884080008000000202000C068 -:1044F000028804C000844040100210832084009091 -:10450000008820004104030400C002A0210000A094 -:10451000000241080200008400000020802000000A -:10452000000010000088000005000000210040A0ED -:1045300000C000900090038200900800110000006D -:10454000000000914090000000001001210000C018 -:10455000009021000420808800000000000000007E -:104560008202404182100009C10800000810C08882 -:10457000102140401008844082020008000890008A -:10458000A011A0038421844000042000000008043E -:104590000800001190040011010200030020002017 -:1045A00000000005000810100004000000020000D8 -:1045B0009041000000000000822008200020002020 -:1045C0008200840000000008C00800000400C00051 -:1045D00008000000A00008800000000000000000AB -:1045E0000000008200002084214004880800800030 -:1045F0001002000020200500008400C00000000020 -:10460000008800000000000002A0004182000000BD -:104610000841020003000200008802000084210417 -:1046200000410000020003200083030000A00000FE -:104630002000004002000082100000414000030002 -:10464000400008400000000000040000000080005E -:1046500000000300000009004110000000C003003A -:1046600000000000000300000000A021400810032B -:104670000008004082000004402120054080C00066 -:10468000000500048421A121059040904010000203 -:104690000000002000411000100300050508000084 -:1046A0000000824100000008002182000000000498 -:1046B0000000080000000802000000008200000066 -:1046C000000900001000080000008800A000400061 -:1046D0008200004000000000004040002000000078 -:1046E00000000021A002008200A000004084089089 -:1046F000080011881108000000000200400080023C -:104700000082111002040088201020044004900947 -:10471000089004104101008200000400008484001D -:10472000000000000000000000000000030000087E -:104730000000000040102000000000822100000066 -:104740000000088800000000000000000090000049 -:10475000000000000000400008000800080280007F -:10476000000000020000000100100011820800108B -:1047700090000090000000001000000140000000C8 -:10478000101102410084848500908908A0820002F3 -:1047900008090291908482820000200082000000BB -:1047A00000C0024000A0C090000000000000000017 -:1047B0000000000001008200000000040008000268 -:1047C000108800000000000002000100C10083000A -:1047D000000100000108200200040040C04008C0A1 -:1047E000048200000001900000011188020300A073 -:1047F00000040000000000000000800005210011FE -:10480000000983C080A10041000305002100418010 -:104810000080C002A12021050005000010008000DA -:104820000000118080800000800000000000000077 -:1048300000000000000008000000000008000080E8 -:104840000080800000000000000000000200212124 -:104850004009000200000380050000800000058080 -:10486000C00000800003112100020020200000A1F0 -:10487000100020A100000000800080002000001037 -:10488000A080001000000091004180001108050088 -:104890000403200003052121830308800005000094 -:1048A0000000000080008041004180800000100076 -:1048B000080020002100C100400010050000000099 -:1048C00080098080000080008000002180004180FD -:1048D0002100021103200000801100800000400030 -:1048E00000C020A1000010002000090010200004DA -:1048F0000002A000000982000000A0000800900053 -:104900000801A008900088A010C1820102C000091F -:1049100000000100010040000984A0098208840011 -:10492000000000000000400040058801C0020000B7 -:1049300001000000000001000800A100A1008400A7 -:10494000A0000800401000000400400040010400E6 -:1049500000100100000101009000904182A020821F -:104960000100000301A1000001000000000001009F -:104970000800000001011100000300880000000091 -:104980000009011082010000400001820808A0A077 -:10499000C0000800000191004141208405118509F3 -:1049A0000001000000010000C0C00020104000C055 -:1049B0000001000000000001000000000001A00153 -:1049C00000009004000800A00010002000020090E9 -:1049D00000A0000100008301010100020005400267 -:1049E00002C1A0880001000183A000000101820132 -:1049F0000001800000052121C00400C00009000062 -:104A00000008004040080021090880001080C18093 -:104A1000C08080098005002108200410038540A182 -:104A2000C1040002000400050402890000808080A7 -:104A30000080000100000010000800000041000498 -:104A40008010002000000080000000800000008036 -:104A50000000000000200302200511400041000872 -:104A600000C1901100200003002111090041020340 -:104A7000052105400811A180C000A0000400040029 -:104A800000000200C1058310A18008030911048001 -:104A90001080050020000811200040C090A103A153 -:104AA000801103020000008000000000804180208F -:104AB00080888000000100800000000000050000E8 -:104AC00000000000004000040040008000000000E2 -:104AD00000000000000010A1200041002040002044 -:104AE000000200800000000500400000800000007F -:104AF0000000210000091100108209C01000000010 -:104B000000A00888000002008289410282010000A2 -:104B100000080404020000100001000000089011C9 -:104B20002004089182010000001000200000C00154 -:104B3000200040C11008000100100000000000002B -:104B4000009000820004000004002011C04000001A -:104B5000000000900004000001410000000000007F -:104B60009001A091A04040008400A001C0008200FC -:104B700000900000010000000000000000000000A4 -:104B8000000000000700000000000000000000001E -:104B90000000000007006021000000E0000081002C -:104BA000000000E00700000A000000000000000014 -:104BB0000000000007004842000000000000000064 -:104BC00000000000000000000000000000000700DE -:104BD00000000000000000000000000000E00000F5 -:104BE0000000000000E007000000810000E000007D -:104BF00000000000000000000000FC0000000000B9 -:104C000000000F0F0F0F939393937072F1F31B1B20 -:104C10001B1B03030303F000F0FF00000000000073 -:104C20000000003CC3FF003CC3FF00000000000088 -:104C30000000000000000000000000000000000074 -:104C4000000000000000000000000000F0F0FF0085 -:104C5000FFCFF0C000000000F300F3F00000000000 -:104C60000000000043C3000000003C3006F306FFD4 -:104C7000C3C3FFFF00000000000000000C000000A4 -:104C8000000000000F0F0F0F939393937030F1B15A -:104C90001B1B1B1B3F3F3F3F990099FF000000007B -:104CA000000000001B1B1B1B8D8D8D8D0000000064 -:104CB00000000000000000000000000000000000F4 -:104CC0000000000000000000000000000000666618 -:104CD00066663F0F300000000000F30FF3FF000096 -:104CE0000000000000004200000000003C30F6F32D -:104CF000F6FFC3C300000000000000000000000039 +:103CA000000000006000000000E0000000000000D4 +:103CB00000000000000000000000000000003F3F86 +:103CC000BF3F0000000000000000D7820F0FB0F0DF +:103CD000A0A0AB00AF00505050140000C0C00000C6 +:103CE000000000000000CF8ACF00F00FF00FC3C328 +:103CF000C3C300FFFF0000FFFF00F00FF00F000044 +:103D0000F0F00F0FCCCCCCCCFFFF0000CCCCCCCC57 +:103D10003C3CC3C3AAAA55553C3CC3C3F0F00F0FAB +:103D2000CCCCE4CCAAAA555500000000000055AA4E +:103D30000000000000000000000000000000000083 +:103D4000030383030000000000000000D782030388 +:103D5000F0F0F0F0AF00AF00000000000000C0C0C5 +:103D60000000000000000000CFCFCF45F00FF00FA3 +:103D70003C3C3C3C00FFFF0000FFFF00F00FF00F59 +:103D80000000F0F00F0FCCCCCCCC0000FFFFCCCC6F +:103D9000CCCC3C3CC3C3AAAA55553C3CC3C3F0F0B1 +:103DA0000F0FCCCCCCCCAA8A55750000000055AAC8 +:103DB0000000000000000000000000000000000003 +:103DC00000000000EB0000000000FFFF1C10C0C05E +:103DD000C0C00A2A00005555555500AAA8AAFFFFE1 +:103DE00000200000000000E00BEB0000000000FFDE +:103DF00000FF00FFFF0000FF00FF00FF00FF0000CA +:103E0000FFFF0000F00FF00FC3C3C3C3F0F00F0FAC +:103E100000FFFF00F00FF00FAAAA555500FF00FFAA +:103E200008F700FFA955AA5510FFEF000000000099 +:103E30000000000000000000000000000000000082 +:103E4000AFAF2D2D0000EBEB000000001C101C108C +:103E5000A0F000F00A0A000054145000A8AAA8AA72 +:103E60000020002000000000EBEBEBEB0000000066 +:103E7000FF00FF0000FFFF00FF00FF00FF00FF004A +:103E8000FFFF00000000F00FF00F3C3C3C3CF0F066 +:103E90000F0F00FFFF00F00FF00FAAAA5555FF000B +:103EA000FF00FF00FF00AA55AA5500FFFF00000019 +:103EB0000000000000000000000000000000000002 +:103EC000000005052D2D80610006000D0000004159 +:103ED0004006009D000180610006000D00010061A8 +:103EE0004006000D000000610006000D00010061A9 +:103EF0000005002D100240618003C02910024061BE +:103F00008006002D1002000040618007002510028D +:103F100040618006002D100240618006002D1002D5 +:103F200040618007002D100240008000002000004A +:103F30000061000200050000000000000000000019 +:103F40000000000000000005C3C3000000000000E6 +:103F50005555AFAF00000000000000003030303495 +:103F6000C3C3C3C300000000000000000000000045 +:103F7000000800281404040400F300A200AFC3EFFB +:103F800000000000F0D0F01000000000000000333E +:103F9000000000000000FF035501000000004D4D2F +:103FA0003C000000000000000000000000000000D5 +:103FB000000000000000F8F8000000000000000011 +:103FC00000000000000000000000F7FF0000FFF20A +:103FD000FF000000050580000000000000003C3CE0 +:103FE0003C3CC380C3C30000000000000000000090 +:103FF0000000000800281414040400F300A2FFFFCE +:10400000FFFF00000000F0D0F010000004040000EA +:104010000000000000000000FF3F551500000000F8 +:104020004D4DFFC300000000000000000000000034 +:10403000000000000000000028F800000000000060 +:104040000000000000000000000000000000003C34 +:104050000000000000000000000000000000000060 +:10406000C3C343023C3C303C0000000000000000A1 +:10407000FFC35040000000001410140403FF07FFAA +:10408000070707000000000000C000FC0000000C53 +:104090000001363CF5FFE0EBE0E00000000000002E +:1040A000000000000000000000005555FF00000067 +:1040B0000000000000003F305F5FBEBE303C0000EB +:1040C0000000000000000000000000000000F0F010 +:1040D000003CA0AFCFCF00004000002000000C3C0F +:1040E0000414FFFF5F0A003C003C000000000000D9 +:1040F0000000FFC35F43000000001414141403FF0A +:1041000007FFD7D7D7000000000000C000FC000068 +:10411000000000013339F0FAE0EBEBEB00000000A7 +:104120000000000000000000000000005555FF00E6 +:1041300000000000000000003F3050508282303C00 +:10414000000000000000000000000000000000006F +:10415000400000000080000000000000010001009D +:10416000C100004100009000C000040900001000E0 +:104170001000212020800020000000008200C000EC +:1041800020009108000588040000000001002000C4 +:10419000000320008800C000840002038808880013 +:1041A00082092000850089082180A00040000400C9 +:1041B000118000002000880082020000000020041E +:1041C000400020080402880488002180010088A0A3 +:1041D00000A0800000000008000000000002200095 +:1041E0002000080020000020000010040000000053 +:1041F000000000028401800410830000000200001F +:1042000041020000080005000000400000044000DA +:1042100000C0000040000500400000001000000049 +:10422000000020000000040040020404030000021B +:104230000000404000400400100000840002100410 +:10424000000009040900410010204100C020400284 +:10425000002110210000000000000000000000000C +:1042600000080200000000000008000000000040FC +:10427000000000000000000000000000000000043A +:1042800000C1004100000000008982000000880495 +:104290000000000000000409000808000000881069 +:1042A000A041000000400000850000100000000256 +:1042B0000000090001400200900402000000A00874 +:1042C00000039005080202208240830040000400A1 +:1042D00082009000900800040000008400000000AC +:1042E0000008001000080000008204840008000498 +:1042F0000084040005820410000000840008040803 +:10430000001000020084008200880002008400087F +:104310000008000802100000401000000008001013 +:104320000389001000000008040040080284001007 +:1043300040080084080808890008000800080002F6 +:104340000000000800008485858500110208808433 +:1043500080084084028400840021000000000000E6 +:1043600001400102000000100010004100030005A0 +:104370000008C011C0088841000800000004004087 +:1043800000210008000000000000000082088440B6 +:10439000C010010500008908000002080005200483 +:1043A000010800400021C00088A100050002A0090A +:1043B0009004004108050000A10500000021001044 +:1043C0000000002188100000400040080005004166 +:1043D0000008021000408405008900002100000050 +:1043E0000308080102000000000300A10008008487 +:1043F000001000A0000200000000110400400011A5 +:10440000000221000000000000000004030003007F +:104410000500040002840910088400000000000068 +:1044200080010800000000000000004000000000C3 +:10443000100000010000A108000004200000090095 +:1044400000000000000008880000000000000900D3 +:10445000000000000500050809000004000000003D +:1044600000000000000000000040000000050041C6 +:10447000000000110000000400100040080440008B +:104480008500040040002041000000000004880076 +:104490004005004008099005880000850000008064 +:1044A000A000820000001000000304001000004182 +:1044B0000800880400118210C000000008000800F5 +:1044C000A0100400040082100009040482110000FE +:1044D00008000802040004000000C0000400008876 +:1044E00000880920001000C000000000000400083F +:1044F000000000C000C00000008402000000400076 +:104500004000200080404000020409104084000068 +:1045100000104088088420900888202010020000A5 +:10452000210400884090408800A00400040000821C +:10453000118400C0009000880405000400000008F9 +:1045400000A00200080000000088210000400000D8 +:10455000211021A00800911008041000081000008C +:10456000000002400005024101212000000000007F +:104570000041008010008400000000400041010064 +:10458000000020000011004000100040000901035D +:10459000900010000210A000000220020020C021A4 +:1045A000000000210040000010A1000000030400F2 +:1045B0000410000804008241000800000000000010 +:1045C000820200008205C021002100004041040059 +:1045D0000800001040000000080082000000008871 +:1045E000400508080000000800840808000000A03A +:1045F000110002000202020402A0090000084000AB +:10460000400000008000000805001040400000004D +:10461000081003000300000000080000050000006F +:104620002010000000000000000005102000000025 +:1046300000000801000400000000000021000084C8 +:1046400003002100000000000000000008008300BB +:104650000000000000000000000010000400000046 +:104660000003800800090100002000000000000095 +:1046700040C00121001100020000002104200410AC +:1046800000040008400000040000000000000021B9 +:1046900000414008004100000009000420210221DF +:1046A00000418821000000A002400089024000056E +:1046B0000041041000001040C00000000200000390 +:1046C00004402009000500411020A0030810040048 +:1046D0008204000000008200A10982A18305040079 +:1046E000000400040820090040A0090000000000A8 +:1046F00008044105200005C01101000400880420C1 +:10470000002000000082210000C10088110041004B +:1047100009000000040000C0000000000390000039 +:1047200020002000008400000904080008040000A4 +:104730000000400808001100008403000000000091 +:10474000090000000000000000000000000002401E +:1047500000000000001021000000040008200200FA +:104760000300080000020001000100010001000137 +:1047700084000400000082000000880000000000A7 +:104780000000010084000000018390829089108263 +:10479000A00004000000820001A0080000C08210F8 +:1047A000A088401082848482000085022003900249 +:1047B000C003004000100002001000A0A082880882 +:1047C000C00440C0A002820808840000000000006D +:1047D00000000001C00108000001A0C00040020864 +:1047E000A0040403049001042004004100400008D8 +:1047F000000803000000110080000000000000001D +:1048000000000000400080000000100280118405BC +:1048100080840000000000008000408080000000D4 +:1048200080008411A19000100080000011208021E0 +:10483000C003800400000080008000000480C0806D +:1048400040000000808085808080800000000000A3 +:1048500000000000002010080004001000801180FB +:104860000080000000C11009408400C000800000EA +:1048700000020004800000080041800000000009E0 +:104880000080000300000000000000000200022180 +:104890008080A100820084009010020090008209B4 +:1048A0004100850090002108859108410000A0008A +:1048B00082A0802121030000800300008000098085 +:1048C0004103849041800000880902841190000017 +:1048D0000000000000002180900285008403800019 +:1048E0000040808280002080A003900040030040B0 +:1048F0000000000000000800880102C00800000855 +:1049000000000004000100000000000000829190FF +:104910008390A08291A009004000A001210088009E +:104920000800200810000382C101A110C108000086 +:1049300008A041098801010184000401000804A0C5 +:10494000A0408200A0400108A0900300218400093B +:104950000000000000000000110203011000080127 +:10496000040082000809C0000010100111882021F5 +:10497000000000000100000000C000080004010267 +:104980000000000000000000000000000001000026 +:104990009089000500A1100000080040840800086C +:1049A000082000100090890084080040008288C11F +:1049B00000008403010300C0851110000000000006 +:1049C00010000401000320C0102102840008A08907 +:1049D00088890000000000000000000100010001C3 +:1049E0000000040400020009A0C0089000A0018992 +:1049F000A004000011004000000000000080000042 +:104A000041800000000000000000001100030010C1 +:104A10000004001011081005820900800080008049 +:104A20000080800000800000210000C00803209169 +:104A30000020000000200208000989080000000092 +:104A4000000000000009001000200008004100A044 +:104A5000800510A0000000000000000000210010F0 +:104A6000002100038083008000882090000521A1A0 +:104A700021210000214010004100020080090000B7 +:104A80008000800040001000200082000000000034 +:104A900000000000210509050900831000800000C6 +:104AA00000800004801000808080004003210221EB +:104AB0004180020300001140081011C08004000072 +:104AC000000000000000898084090880804184087B +:104AD00004214180A011000000000000000020100F +:104AE000820089000002800080050000000021890A +:104AF0001085218004410101000000000000C00079 +:104B0000028840880800A100A100A0001000000059 +:104B10000000000000000110829000021001000857 +:104B2000000400080000100402108440100084A15A +:104B300004A1840810000000042001A004850400E2 +:104B4000A000A088820088001040028809080201A5 +:104B500009100501888288000000000000000000A4 +:104B60001111081040029001C00082A0A0A0820094 +:104B7000050409A0891005010000000000000000E4 +:104B8000000000E00000000600000000000000003F +:104B90000000000000000000818100E0070000002C +:104BA0000000000000000000000000000000000005 +:104BB00000000000000000000000810000E0000094 +:104BC00000810000000000000000000000E007007D +:104BD00000110000000007000000000000000000BD +:104BE00000000000000000000000000000000700BE +:104BF0000000000000E00700000A000000000000C4 +:104C0000000030F0000000000000009F839F0000C3 +:104C100000000000000000000000FFC3FFC3FC0014 +:104C2000FC000000000010901C900000000CFC0C28 +:104C3000FC0C154010432000040000003030C0C0C0 +:104C4000C0200C408199C3FF00000000020B0B0B39 +:104C5000F000F00000000000020000000000000072 +:104C60000000000000FF00000000000067676764AC +:104C7000FF00FF00FF000B0B90D290F60000000039 +:104C80000000000030F02060F040F0009F9F839F04 +:104C9000000000000000000000000000FFE7FFE748 +:104CA0000C000C0000000000303070302424000C98 +:104CB000F000F000401540134000020000000C0C12 +:104CC00003030304309B030FC3FF000000000F0F1A +:104CD0000F0F000000FF0020000000000000000097 +:104CE00000000000000000FF0C0C000000006464E5 +:104CF00067647E42FCC00B0B0B0BF0F0F0F0000081 :104D000000000000000000000000000000000000A3 :104D10000000000000000000000000000000000093 :104D20000000000000000000000000000000000083 -:104D300000000000000043084000008421860000BD +:104D30000000000000000000000000000000000073 :104D40000000000000000000000000000000000063 :104D50000000000000000000000000000000000053 :104D60000000000000000000000000000000000043 :104D70000000000000000000000000000000000033 -:104D80000060006F00FF00FFFF00FF00FF66BD2412 -:104D900000000000C4C4C300C0FF003FFD01FD01CE -:104DA000C33C821400000000BDBD818166FF40D974 -:104DB000000000007E7E7E7E0000000000000000FB -:104DC0000000000000000000000000000000DBDB2D -:104DD000DBD03CF03CFF0CFC0CFC000000000F8121 -:104DE0000FFF0000000000000000202C202C067E99 -:104DF0009F7EC0C009F90000000000000000000014 -:104E00000000000C000C66666666FF00FF0099005B -:104E1000BD24000000000404C300909F909FFDFD8E -:104E20000101FFFF969600000000FCC0FCC066FF79 -:104E300064FD000000004242424200000000000009 -:104E40000000000000000000000000000000000062 -:104E5000DBDBDBDB3CF03C0006F606F60000000086 -:104E60000FE70FFF0000000000000000202C202CA6 -:104E700006189F18000009F900000000000000005B -:104E80000000000000613006000D00000061000617 -:104E9000000D000000610006000D000000610A0620 -:104EA000000D00A000610007000D000005610A0F61 -:104EB000050D00A000610006000D00011000200893 -:104EC00000400008000000610006000D00000061C5 -:104ED0000006000D000000000008000000000000B7 -:104EE00000000000000000610007000100000061F8 -:104EF0003E0F000D000000613007C0092000006176 -:104F00000006000D0000FFFFCACA0A0A5F0A00C3BC -:104F10003CFF3030F3F3FF00F3F3080808280400E7 -:104F20000000000000004F4C43400A5F5C5CC3007F -:104F3000C3FF0000FF0000000000282028A200009E -:104F4000000000000000000000000000F000F00081 -:104F500000000000EBE30000000000000000000083 -:104F6000000000000000000000000000202A757F03 -:104F70000000000080A880A8000000007878787801 -:104F800000000000F5F5F0B400FF00CA5F5F5F0AA3 -:104F900000C33CFF3030F3F3FF00303028280828EE -:104FA00004000000000000004F4C4340AAFFFCFC3E -:104FB000C300C3FF0000A3A300000000002000A264 -:104FC0000000000000000000000000000000F000F1 -:104FD000F0000000000041E10000000000000000BF -:104FE0000000000000000000000000000100207F21 -:104FF000207F000000000000282800000000F000D2 -:10500000F0FFF0F0F0F0A0A0F0B4FFFFFCFF3C00D8 -:105010003CFF000000000000000002FE02FE55C33D -:1050200055C3FF04FF0000000000000000004F45D2 -:105030004A40000000007CD67C54000000000000C4 -:105040000000000000000000000000000000000060 -:105050000434003C0000000041CF41CF00000000BC -:105060000000000000000000000000000014001418 -:105070003CAA3CAA00000000000000000000000064 -:10508000C300C3000505000000000000F3FFF0FFAF -:105090003C003CFF000000000000000002FE02FE99 -:1050A00055C355C3040400000000000000000000C8 -:1050B000EFE5EAE0000000047CFE7C7C00000000DC -:1050C00000000000000000000000000000000000E0 -:1050D00000001414101C000000007DCF7DCF0000E4 -:1050E00000000000000000000000000000000010B0 -:1050F00000100C0CFCFC0000000000000000000090 -:105100000000C300C30005150014000800000005DE -:105110002000840484094010888300840010040067 -:105120000004000088021004C00004802190880858 -:1051300000022005408204110400890002052000BD -:1051400000008440880504000000200920080003B6 -:105150000003000000004002208020000000000941 -:1051600008020802208488002084008088802004AF -:10517000000000004000001020002080000000001F -:105180002082200000002010000000008400001099 -:105190002000000002020000000240020010009106 -:1051A00000900000202000012101000000202020AC -:1051B000409040C180020004000200C04000000096 -:1051C000000400000004008800000000400000040B -:1051D00000000000000000020000001000000000BD -:1051E00000008001809105020000210500041104E7 -:1051F000000000C000000000200000400910000274 -:10520000000000100040000000010000000200004B -:1052100000010000880000400010200221209020A2 -:1052200084040009021082088404900340040404EA -:1052300001028290011020040010000400100008F8 -:10524000048500104040A0212010000000840000D0 -:1052500000030000000300400210001008000009D5 -:10526000081000000000000000000080020420047C -:10527000000400040000840000400000000000085A -:1052800000000000200020000004000400000000D6 -:1052900000000000040840082008040480058485FC -:1052A00005840485001040000020000800009102E1 -:1052B0008309048502100408090502C1008800085A -:1052C00004900002008884000210800400000002A4 -:1052D00000820400000000C000080000098840109F -:1052E0000010804000080000004041400002000122 -:1052F0008089000105090484000400100288000070 -:105300000000000000048000800000010001000097 -:105310000000200000040205C0100003002100036B -:105320000010880891080221020900218210012141 -:105330002008092008200221200001100008402137 -:10534000004040C100080040A00040410000200291 -:1053500000081009000200002008040000080008EE -:1053600082000021010000109002000000004000B7 -:10537000000000049000202100408821002100400E -:10538000000000000008004100042010000400009C -:105390004000A0000000A0002100008200000000EA -:1053A000081000200408400041000084000000C0F4 -:1053B00020A09188200303894084A10020A103003C -:1053C000841041A08010210000A00000A140080826 -:1053D00000840000414000A0000008A00000000080 -:1053E0000300040000040800000008000904000095 -:1053F000800008000021030088000300000009006D -:10540000410003000000000000000000A10940006E -:1054100003A004000000210000200000A0000009FB -:105420000800A009001100A110210800C009A00572 -:1054300008030911201108020041418400040040C2 -:10544000080482049000040000020000900000C1E3 -:1054500004800800820082000000000004000000B8 -:10546000000008008400840008410011C000000012 -:1054700004001080900082000841002110000010FC -:10548000820082000000820000410000000900004C -:1054900008102000000000008800080000100282B0 -:1054A000200400080390080000041110108241C07D -:1054B000001000842082C190008303900805408979 -:1054C0000001000308100304118400200090200054 -:1054D00040020404000000001000008800004100A9 -:1054E000410021000084000011880000000000003D -:1054F0000000400000200000040002000000000046 -:10550000000000000900000000000088000000000A -:105510001100000100100000030200000000004024 -:105520000011820008000021040808050005400061 -:105530000020084008050000082120100404010292 -:10554000202084020040000000001002000500003E -:1055500000080008082100000821C1C00000000068 -:10556000000000000400000020000800A000080067 -:1055700000000000000000008200000000040000A5 -:105580000011000000000000000000008200000088 -:105590000100000008800000000000000000000082 -:1055A00040400082000000000400802000880420A9 -:1055B0000484080008C021840884000000000082E0 -:1055C000409180010889400040000900200011003E -:1055D00000200500002000020000020008100588DD -:1055E0000000000000000000110411000500009000 -:1055F000000200020000000008000000030040015B -:1056000000202100000000000000090003000088C5 -:1056100011002000002000040000080041000800E4 -:105620000800101188210021010300080000040077 -:105630001041000282020403082100112004A00589 -:1056400000040002090010C0080000084021040204 -:105650000000000000000003004100000000820084 -:1056600000000000C0110000080000000000400021 -:1056700020000421000000000011000408000003C5 -:1056800000210000000000000000000000000800F1 -:1056900000000000000020002000200000000000AA -:1056A000000000000000000009104004000000009D -:1056B000100020C0000800000010000003108083CC -:1056C0000090038300890404000220040000880085 -:1056D00000000088400000002000000000000000E2 -:1056E00000204000000000000388000000000200CD -:1056F000020000008000000000000800000000041C -:105700000300092000020000000040000900000022 -:10571000002003020000040080008000A09002002E -:1057200000020000000000000100A0000000A00036 -:10573000910800018210000000000000000001003C -:1057400021010300000141A182904182C0010101B9 -:105750000000400090000000000020000000000158 -:105760000000000100000000000000000000000038 -:10577000000400080008008408A000000208008956 +:104D80000000000000000000000000000000000023 +:104D90000000000000000000000000000000000013 +:104DA000999F9999090FCBCF0000000000CF00DF39 +:104DB000C1C10000F3638F8F9966956A00180024C3 +:104DC0000000CCCCCCAA242C242C000000000C0C1D +:104DD0006E6EFFFFC3C3F8FFF8FF00201818FFFF37 +:104DE000FFFF0000000000000000000000002F0096 +:104DF0002FFF0F0F0F0F00FF00FF0000000000FF4C +:104E0000606F000000000000000000000000C060B3 +:104E1000C0C0000000000000000000000000000012 +:104E20000000BDBFBDBDFFFFFFFF0000000000CFC1 +:104E300000CFF9F90000F363FFFFF906F50A141437 +:104E400014140000C5C5C5A3242424242000000098 +:104E50000C0C6E6EFFFFE3C3181F181F000000004C +:104E6000303F303F00000000000000000000000064 +:104E7000240024FF1E1E069F033F427EBF8FFFFFBC +:104E800000FF00FF00610006000D0000A0610007A8 +:104E9000001D000100610006000D00000061000619 +:104EA000000D000000610E3DC0050000006100061D +:104EB000000D000000610006001D000000610006FA +:104EC000000D0001000080614003C00500000000EB +:104ED0004000000000000061000F000900000061B8 +:104EE0005006000D000000000000000000000061FE +:104EF0000006000D00001061200E004D000800614A +:104F0000000B000900000E00FF0000000000000080 +:104F10000000000000000000000000000000000091 +:104F20000000AAA80080FFFF2F287D0D00000000D0 +:104F30000000000000000000000000000000003C35 +:104F400000000F035F430000000050557D0D00007E +:104F500000000000000000000F5AA50F0000000034 +:104F60003CFF0F55C303414100000000000000005A +:104F700000000A0F0000C1C300000000AA82AA00BE +:104F80005000500CFCFCFCFC0400FF000000000082 +:104F900000000000000000000100155500000000A6 +:104FA0000000000000000000FFFF2F287D0D000022 +:104FB00000000000000000000000000000000000F1 +:104FC00000D400D4FFC35F4300000000F0FF7D0D5C +:104FD000000000000000000000000F5AA50FCACA20 +:104FE000CAC53C000F55C3C3C3C300000000000086 +:104FF00000000A0F0A0F0000818300000000AA824F +:10500000AAAA50005C0CFCF0FCF0EBEB5500000091 +:105010000000000000000000000000000000000090 +:105020000000000000000000000045415555FFFF52 +:10503000808000000000FFC35541000000005F5F5A +:105040004343A00FA0FF0000F4FE000041FF45FF16 +:10505000FFFFD0D0000000000000000000000000B2 +:10506000955633CC0000000000A0AAAA0000000062 +:1050700000000000FC0C0000FF003C3C00000000B1 +:105080000000000028000C0C00000020E0E05500AB +:105090000000000000000000000000000000000010 +:1050A00000000000000000000000000045414541F4 +:1050B000FFFFF0F000000000FFC30F03000000003E +:1050C0005F5F5F00AF0FAFFF0000F0F0000041FF37 +:1050D00045FFFFFF505000000000000000000000EE +:1050E0000000555533CC0000000000A000A00000D7 +:1050F000000000000000FC0C000005053C3C000026 +:1051000000000000000028280C0C00000000020035 +:1051100000000000840004000000040004002100DE +:10512000010001000100000000002008C00500008F +:1051300000000000000020000000001000000040FF +:1051400000008400000800004088880041400003FF +:105150004000C0108440004004000480040004802B +:105160000004400500008800880041040108210077 +:105170000000880020004000000584108400A0008A +:10518000000020040000C005880004000404100092 +:10519000C1000000000000000000000080408040CE +:1051A00020002000200020000002090089020000E9 +:1051B000000000000000004000004100404000905E +:1051C0001001000009000000000000400000400540 +:1051D000000000000000000105018000800488023A +:1051E00080040000000000020000000204020440ED +:1051F00004004004000200020000000000080090CB +:1052000009400000008441020002400284020500BF +:1052100080000000001020040000000800000004CE +:105220000000050001002000040489410040000442 +:105230009008000001008500090001040000010839 +:105240008209908090040010008000899080900472 +:1052500010100000002101C1000000000000010941 +:1052600090A00800000000000010000901200400C8 +:105270000280000000000000000000080009022178 +:105280001010820090000841A008A0008520004175 +:1052900003008400000000008001000000000008FE +:1052A0000083000020002088800000012008000901 +:1052B0000085000009822000201020002009000441 +:1052C000200000840002040800000040114000405B +:1052D00004110004000000904040000840000084D9 +:1052E0000200050380080008000800000010040107 +:1052F0008902002000841184000800100082040844 +:1053000000884084008804100084031000080811FD +:1053100000080210408204040003000000000102A3 +:10532000000001210021022120100002200820108D +:10533000400000050040000800210021004000401E +:10534000100000840010000000400209002120101D +:1053500020032040C103000002412008200820044F +:10536000A00320A1010504A100410041004000006C +:105370000008A021082100400000040300090000EB +:1053800000000008000300080003000010000000F7 +:105390000008890000210900000100100010001021 +:1053A0002000001020004000108200080001004092 +:1053B0008000001041A040010000000800000583AB +:1053C00003A00000204108A0000041A18200008449 +:1053D0008320830088832008000080A080A08008AC +:1053E000808500008004100085040082400008A031 +:1053F00000C0400000A0000000A000080000000065 +:105400000008000009000000219003080308400084 +:10541000400009004000400004022000000000009D +:105420000000830004000400A0008204400409047A +:105430000000C0848800881100002010C100822074 +:1054400001C14000020490000004000000020000BE +:1054500084000003908240000188000000A1010246 +:10546000000010000880A000820800000041A04158 +:105470000000000000020000002010000800A00052 +:1054800000410000C0000802000008008409400933 +:105490009000080000200100410201808088000087 +:1054A0000008000002108000C0C021C000838001FD +:1054B000028500900041000409840000801020C093 +:1054C000049020020000800008C0080803000004C7 +:1054D0001000050000900005008410050000110474 +:1054E0002000000080000002110021100000008256 +:1054F000410000080000000000000301000040908F +:1055000000000000001008000800410008000084AE +:105510000084218200000884200404000204A0000A +:105520000005201000050404C00020030400C04052 +:10553000C040A004C00420008200200300100240EC +:1055400000108541084020849000082103020800D3 +:105550000005A040C00200058500900884050000F9 +:1055600000052005004010080010A010820800105F +:1055700000000000000000080000002000000008FB +:10558000000008000000A000004000000000000033 +:1055900020000003A000200040041021200000088B +:1055A00000100000800100A08001008880048008B5 +:1055B00000002001000300008004090090000900A1 +:1055C00088000310020808828041050000000208DC +:1055D000000802000000000000A020A0040008084D +:1055E00000000008800000080000000800004109D9 +:1055F00000002184000000020008001000094000A3 +:1056000004A00500000000000000020000002108C6 +:10561000000009000000000011020241080080049F +:10562000408820080009002140102000011040217E +:10563000002000400011C0210180000000008840CF +:105640000000000002000008020000040000040442 +:105650000000C00582100021844184C184058204B9 +:10566000204000002010210420020110402010885A +:1056700000210004202040114003000000410800E8 +:10568000000009000000000090000400000000007D +:105690000800000000008400000004000421201025 +:1056A0004000000000000000000000008004020034 +:1056B00000880900200900000010020400002000FA +:1056C0000001110004408000090011C00000050025 +:1056D000000100000000400404000000000400007D +:1056E000000180000000800440018000200880014B +:1056F00000200090000100000000000000000000F9 +:105700000000000004002000200004040004200029 +:105710004002208809000000000000C0090080004D +:105720000005000000009000A001900104000000AE +:1057300008019001900011C0C08801021010C0C083 +:1057400084889188900389C01102C002909008C19A +:1057500083039088101040C100400088108510A07D +:1057600000021002842000000202009008020410CF +:1057700000010200A0000000000000000000000086 :105780000000000000000000000000000000000019 -:105790000004008800040000A02000200184001004 -:1057A00000000000000000000000020000000000F7 -:1057B00088028305040480900000000000000000BF -:1057C0001104821084000021A08403908300000251 -:1057D00020080811800200114000000000000000B5 -:1057E0000010001000020002000000000000000095 -:1057F000000000800000008000000080080000839E -:105800000021000000000400000000000000000073 -:105810000000000000000000000080000000028086 -:105820000000000000000000000002001100000065 -:105830004000100902008208080800000000000073 -:1058400000001004400020020285000009038011BE -:1058500002218000850008002002408003004000F3 -:1058600002020080000000000000000000000000B4 -:1058700000000000000000030080000040800004E1 -:10588000A0082180000800000010000000000000B7 -:1058900000000000000000000000000000400000C8 -:1058A00080080080000000000000000001000000EF -:1058B0000000000085A00500412101080000000053 -:1058C0000000000001910100000100021090C001E1 -:1058D00004A19103100002000000840001100000E8 -:1058E00001000100001000000000000000000000A6 -:1058F0000000000000000000400000A00000824006 -:105900000000A00091040000000000000000000062 -:105910000000000000000000000000000000100077 -:105920000000A00088908400000000000800000033 -:1059300000000401000010010805050311A000008B -:105940000000000100010001A00008010101008821 -:10595000C0100010019000910004090500A1000092 -:105960000000040100010000000001000000000030 -:105970000000000000000000108800A00000C0022D -:10598000000200A00001001000000800000000005C +:105790000000000000000000000000000000000009 +:1057A000A1C0210405A020C00000802085030010B6 +:1057B00000090021C00200009180000003000000E9 +:1057C00080A11003C00000881180848005000000C3 +:1057D000808208A1C0000089808200900904000234 +:1057E000A000118040000000000080801000858033 +:1057F0000080034109404000000400000000000058 +:105800000000000000000000000000000000000098 +:105810000000000000000000000000000000000088 +:1058200000001180838002800000028020000800B8 +:105830002100118041800210A1032008A1101085D1 +:105840008410028083C183C0A1410004800380884A +:105850008080028085030380A10800008002002070 +:1058600080000588089010830590000090A0A08516 +:1058700088C0402120802080820082030000000038 +:105880000000000000000080000000000000000098 +:105890000000000000000000000000000000000008 +:1058A000000000004008C111110804A1009001008F +:1058B000010001009090A002A100C121910103010B +:1058C0002041C1A1909082A10511C12110011001B8 +:1058D0000841C002039002008584C1A0900010001E +:1058E000A020C000208220C0854010C1000005918A +:1058F00010C003118201011009200300C1910000B2 +:1059000000000000000000000004000000A00000F3 +:105910000000000000000000000000000000000087 +:1059200000000000000040919089910104030005EF +:10593000009001C000A101880088030800C008048D +:105940008808100282C002400108004002C0409056 +:105950004010100383C140020108828810C0C0C0FB +:105960000140418888C021210421C0030320000098 +:105970000504A002C0031190000101000501000010 +:105980000000000000000000000000000400000013 :105990000000000000000000000000000000000007 -:1059A0000000829000402000000000000000000085 -:1059B00000410003802100090020832005219184FB -:1059C00000000020002000100010000500214140D0 -:1059D00000080010001003030008214105A11083F6 -:1059E000000000000021001100000300080000007A -:1059F0000000000000000000000000000080000027 -:105A00000000008200020508008200000000000083 -:105A1000080000000000000000000000000000007E -:105A2000000000000000000008000000000000006E -:105A300000000080000000000008A000404121009C -:105A4000044000000000000000002180020420004B -:105A50000308C00203080480000021022140210045 -:105A60000002008000000000104021004000000003 -:105A700000000000000000000000000000000040E6 -:105A80000000800010219090C10082000000000002 +:1059A0000000000000000000914020032004A1A09E +:1059B000000802100309000220041011C082000533 +:1059C000008000000000838000110400410980C0B5 +:1059D000800980900020C1C08090028303098080EC +:1059E0008000408004000080411080108088820286 +:1059F0000000C18900A08008404005024140A1216B +:105A0000000400000000000000000500000080000D +:105A10000000000000000000000000000000000086 +:105A200000000000000000000000414000838009E9 +:105A3000C140020420090900020311050009028087 +:105A40000500C000829105000011804090004000D8 +:105A500008118000001100000000914003000900BF +:105A6000000580048021000080004104118821008D +:105A700003080000C103A1A0A100051004A1044077 +:105A80004100200300000000000000000000004072 :105A90000000000000000000000000000000000006 -:105AA0000000000080000000000000000000000076 -:105AB0000000000000020000000000010390A100AF -:105AC00021900201000000000000000001C0010060 -:105AD0000000000110054005C008400001200089B9 -:105AE00001C00000004000000000000001000000B4 -:105AF00000000000000000000000000000000400A2 -:105B0000A01004000800850109040208A10000009B +:105AA000000000000000000000000000C1C02082D3 +:105AB000219185050001000000000101000200881D +:105AC00000080000C188404102028800C00102882D +:105AD00090884000C00020210202A000C000020403 +:105AE00088888800C001102088888200218985214B +:105AF0002120050100000588020483A08801000917 +:105B00000010001001000000000000000000000074 :105B10000000000000000000000000000000000085 -:105B200000000000000002000000A0820000000051 -:105B300000000082000000000000000000000000E3 -:105B400000E007000000000000000000000000006E -:105B500000E00700820A008100E00700000000006A -:105B6000000000000000880000E0000000000000CD -:105B70000000000000000000000000000000000025 -:105B80000000000007000000000000000700000007 -:105B9000000000E000000000000000000000000025 -:105BA0000000000000000000000000E0070000000E -:105BB00000000000000000000000000000000000E5 -:105BC000000C0004000000000000000000000000C5 -:105BD00000000000000000000028F0F8ACF0ACFF6E -:105BE000000000000F0FCFCF0000000000000000F9 -:105BF00000000000000000000000000000000000A5 -:105C00000000F3F3B2F0F0F03C3C00F300FF8A8AAE -:105C1000A2A2000000000000000000000000000040 -:105C2000000000000000000000000000F0F0A000F4 -:105C3000A0000000000000000000000000000000C4 -:105C40000000000C0004000005000000000000003F -:105C50000000000000000000000000280028AC0048 -:105C6000AC0F000000000C000C0000000000000061 -:105C70000000000000000000000000000000000024 -:105C8000000000003030B2F0F0F03C3C00F300F3D4 -:105C90008A8AA2A2000000000000000000000000AC -:105CA0000000000000000000000000000000F0F014 -:105CB000A000A000000000000000000000000000A4 -:105CC00000000000FF7DFF7DF300F30000000000F6 -:105CD0000000000000000000000000000F0FFF00A7 -:105CE000F60000F6000000000000050500000000BE -:105CF00000000000000000000000000000000000A4 -:105D00000000000000007F6B3E2A0A0A0A0A000019 -:105D1000C0C0000000000000000000000000000003 -:105D2000000000000000FF0FF0000000000006006F -:105D30000006FFFFFF00000000003C3C3C3C000070 -:105D40000000000000007D7D7D7D0000000000005F -:105D500000000000000000000000000000000F0F25 -:105D6000FF00F6F6F6F6000000000C0C0000000044 -:105D70000000000000000000000000000000000023 -:105D80000000000000000000574316020A0A0A0A39 -:105D90000000C0C0EBFFFFFF00000000000000009B -:105DA0000000000000000000FF0FF00000000000F5 -:105DB00006000006FF3CFF3C00000000FFFF000063 -:105DC00000610006000D00000061000F00090000E6 -:105DD00000610006000D00000061000F050D00A02D -:105DE000806100330005000000610006000D000026 -:105DF00000610006C009000000610006000D0000FF -:105E0000000000000000000000000000000800008A -:105E100000000061000E000D00A000610007000DF1 -:105E20000000000000000000000000000000000072 -:105E3000000000610007000D0000000000000000ED -:105E40000000000000002838282855F755F0FFF022 -:105E5000FF3000000000F000F0FFEBFF0000838344 -:105E6000808FFF55FFFFF3500350F0000000F30355 -:105E700000008282828200AAFFAAAA00FF0000001E -:105E80000000000000000000000000000000000012 -:105E90000000000082008000000000800000000080 +:105B20000000000000000000000000000000C102B2 +:105B3000849191411001810000E00000000081008B +:105B400000E007000000000000E00000000082000C +:105B500000E000004112000000E0000000118100A0 +:105B600000E00000000000000000000060000000F5 +:105B700000E0000048420000000000E00000484251 +:105B8000000000E0070050000000000000000000DE +:105B900000000000070000000000000000000000FE +:105BA00000000000000000000000000000000000F5 +:105BB000000000E00700828200000000C3C3410330 +:105BC000000000000CFFFCFF00003F3A0000AAF0BC +:105BD0000000AAAA0000A0F50000AFAC00003CAA9B +:105BE00000000CFC0000B2FF0000F4FE000078FF93 +:105BF0003D3D05FFB2BEF0FF00003CAAAAAAA8AB3B +:105C0000FCFF000000000000000000000000000099 +:105C10000000000000000000000000000000000084 +:105C20000000000000000000000000000000000074 +:105C30000000FF3CF03C3F14031400000000FFFF95 +:105C4000550F000000000C00FC000000303A00007E +:105C50003CF000000CFC0000B4B40000A0AC00005C +:105C6000F0AA00000AFA0000B2000000040E0000D2 +:105C70007800383800FA828E000F00003CF0F0F017 +:105C80000003545700000000000000000000000066 +:105C90000000000000000000000000000000000004 +:105CA00000000000000000000000000000000000F4 +:105CB00000000000003CF03C3FD703D7000000008C +:105CC00000000000000000003C3C0000DF1F00005E +:105CD0003C3C00005F3F00003C3C0000F53500000C +:105CE0003C3C000035F50000FF0000005F3F000075 +:105CF0003C3C0000FF55AA005F505F5000003C3C58 +:105D0000FF005010FA3800000000FFAA5F0A0000F0 +:105D10000000000000000000000000000000000083 +:105D20000000000000000000000000000000000073 +:105D3000000000000000C3C3FF007D7D3F030000A2 +:105D4000000000000000000000005F0A0000D0100A +:105D500000005F0A0000503000005F0A0000C50527 +:105D60000000AF050000350500005C5C000050300D +:105D70000000AF0500003F172B03DFD31C1000000D +:105D80005C5C5F5050D3FAFB0000000055005F0AD6 +:105D90000000000000000000000000000000000003 +:105DA00000000000000000000000000000000000F3 +:105DB00000000000000000000F0F555541413F0357 +:105DC00000610003C015000005610A0BC52512A281 +:105DD00040E38007002D920240E38003C025920239 +:105DE00040E38007002D920240E38003C025920229 +:105DF00040E38006002D920240618007002D1002D2 +:105E0000000040618007002D000205610A0D0509B0 +:105E100000A5000000000000000005000A080500C1 +:105E200000A00000000000000000000000000000D2 +:105E300000000000000000000000A5615A0F050DE1 +:105E400000A000B000BE4101C3030000B0B00501D6 +:105E50000F0300000FFF000000000083008300001C +:105E6000000000000000FF0F41010000F0A0C10091 +:105E7000C1000000000000000000033FD7D7BFFFB3 +:105E8000BAFA0000C30FAAFF0F00C5C58380C1C2C4 +:105E9000AEAE0C5800000000000000000000000042 :105EA00000000000000000000000000000000000F2 -:105EB00000000000000000000000000000000000E2 -:105EC00000000000000000000030000055F455F014 -:105ED000FF00FF3000000000F000F0FFC3FF030FE1 -:105EE000D3D3D0DF0F550FFFF35F035FFFFF000039 -:105EF0000A0A0000BEBEBEBE00AAFFAAAA00FF009A -:105F00000000000000000000000000000000000091 -:105F1000000000000000820080000000004000003F +:105EB0000000000000000000000000000A5FBEBEFD +:105EC00092D3BAFB00B000BE4101C3030000BEBEC6 +:105ED00005010F030FFF0FFF000000008383838382 +:105EE0005541FFC300000000FF0FEB0B0000FFAAAD +:105EF000C1C1C1C10000000000000000033F141434 +:105F0000054500400000C30FAA00FFF0C5C540438F +:105F100002015050F0A4000000000000000000004A :105F20000000000000000000000000000000000071 -:105F30000000000000000000000000000000000061 -:105F400000000000000000000000808000005555A7 -:105F5000F0D4FAEBAAAA0000000000000000003C08 -:105F60003C3CDF5F8F0FFF3CC300F0F0FFFF0FAF43 -:105F70005FFFAAF0FFF000000000003CA0BCD4F0DE -:105F8000D4F000000000000000000000000000004D -:105F90000000000000000000C0C0C0C03C3C00FF8A +:105F300000000000000000000000000000000A5FF8 +:105F4000141410513879FAFEFAFEFFFFAA0850FF28 +:105F500000FFFFFF3000000000000F0F8FBF415512 +:105F6000FFFFFFFF005D000000000000000041FF98 +:105F700055FFFFFF00D500D3D3D300000000000081 +:105F800000004141AF05000000000000F303505045 +:105F90002828BE00202000000000000000000000B3 :105FA00000000000000000000000000000000000F1 :105FB00000000000000000000000000000000000E1 -:105FC00000000000000000000000000000000000D1 -:105FD000F0F0F0D4FAEBFFFF00000000000000003A -:105FE000003C3C3CDFFF8FAFFF3CC300F0F0000003 -:105FF0008F8FDFDF00F055F0000000000000A0A050 -:10600000D455D4F0000000000000000000000000A3 -:1060100000000000000000000000FCFCFCFC3C3C18 -:1060200000FF000000000000000000000000000071 +:105FC000000000004D4DC300F0F0F0F0FFFFAA0804 +:105FD00055FF55FFFFFFF0F000000000000000003B +:105FE0004141FFFFFFFF005D0000000000000000D6 +:105FF00041FF41FFFFFF00D500FBFBFB000000005D +:1060000000000000EBEBAF05000000000000F30310 +:106010005F5F0000BE0000200000000000000000E4 +:106020000000000000000000000000000000000070 :106030000000000000000000000000000000000060 -:106040000000000000000000000004040100200027 -:10605000208400020100C100830400098400C00004 -:1060600020040000000000000000840988900091D6 -:1060700001080041000804410200040820008811C2 -:106080002089001002000000000300030008000245 -:10609000A000008201000100048020912000840003 -:1060A0002000200400800000848400028802C08058 -:1060B0008800C008200020802084208204100080F6 -:1060C000200420900000040088000400C002049016 -:1060D0000990002000014002400020020000000062 -:1060E0000002800120000000008204004000041033 -:1060F0000820204041000000008200000500090443 -:10610000410040100003800000000000000000007B -:1061100000012100001120C0200200042004000022 -:10612000000000080000000211020002000140010E -:10613000002000C0000280908002800280110005D3 -:10614000000200000003000000000000000000202A -:10615000822000200120020909A102090004000296 -:10616000030202049080A0081000020091000404C1 -:10617000820204204010A0200204A0042100020496 -:106180000000002100000000A0A1021001C00000DA -:10619000000000030080000020058480108008C0FB -:1061A000004100000000000002000000000000109C -:1061B00002800000828000800010008000002180AA -:1061C000000000000000009000000000000001003E -:1061D000414100C10085041100084002000004098B -:1061E00000094009000209020084054004C00804B7 -:1061F0008009110180098500090500850001A0843E -:1062000005110008008200880040001003C108103A -:106210000000008400080002000480000004000464 -:106220008004000800040304008200000000004015 -:1062300000000020000820200020000104100008B9 -:106240000810000200000084002000000000000090 -:106250000200040310210041000500030209C005EB -:106260009002900008C0100420032041000000406C -:106270000008080220A020000282041021208420AF -:106280000403C01100820005412100030021002108 -:1062900008400000840020000008000588900010DD -:1062A0009008900802100010000000218221400098 -:1062B00040008800000800004000880840100000EE -:1062C000000000000400880000100000000300002F -:1062D000002000208010000009900520000091009F -:1062E0000000000000A021020382880000000000DE -:1062F000080000000082A10488A0090480028489AB -:1063000003898000000000040008A0840000000051 -:10631000000080A0000004020800001000A000049B -:106320000000080000C0000200200000002000045F -:1063300084108000000000000020000000008300A6 -:106340000200000003000000000000010020000027 -:10635000000000050001401100000520A020C0043D -:10636000C00400100410080408100400C0108205C6 -:106370000803A011A00800831120200340A0008979 -:1063800000080002014000800000C0000004081066 -:10639000C0000004002100000800040010000005F7 -:1063A000820200000000200082008209820020009A -:1063B0002000201020202000C0000800000008005D -:1063C000A000C02008000000000000000000000045 -:1063D000000040040000000004200082048800C087 -:1063E00005A0118200008300000400908084091140 -:1063F00020C0091000A005A0402004A11100000544 -:10640000000400840009400000024004088400A148 -:1064100080010084218802C000000000000000000C -:1064200000000000000000820000000000000000EA -:1064300000008000800080008900008280002184AC -:1064400083000000030003000900000800840088A6 -:1064500000000000004000901188A0030800041014 -:10646000040008030008204100200010C000044080 -:106470009002C000C005201008052009000085001A -:106480008280010390110040A0080005000008046C -:106490000008000000008400000000000000080068 -:1064A00000200008000000000000000000000020A4 -:1064B00000000000000008000000000000000400D0 -:1064C00008000000822100000400104100020808BA -:1064D00000088200002100000800000000080800F9 -:1064E0000000400005000500890421A10000000013 -:1064F00088100000400800C000044000110000881F -:1065000020880820400000020884080400000000E1 -:10651000000100000004000000001102000000085B -:10652000000000000090008800904000000040A0A3 -:10653000080009000008000000000004000020001E -:1065400083008000000000000000000408A0080193 -:1065500000000000000800000000000000000041F2 -:1065600040048408820210110800402110410002FA -:106570000041A008A008882182219008820020A064 -:10658000820890044005210441C000C1014100027D -:106590001004022101000003A02100084021000096 -:1065A00000000021000000050009000800000004B0 -:1065B0000005400000002000002100000200A000B3 -:1065C00008004000402100002021900000214000F0 -:1065D0000080829004000540C000004000000021BF -:1065E00000400000000020A0001000008004000017 -:1065F00000100884080400200000001041900010E2 -:1066000003050304030109C08402C0210020040023 -:1066100000010001000040000000000000000040F8 -:106620000000000000000202000000000002000064 -:10663000000000000000000000000000000000005A -:10664000000080002000000000008000200000000A -:1066500000000340080511102000000000000800A1 -:10666000000000080000001002C00001A0000101AD -:1066700000000000A10089010000000000000000EF -:10668000000000A0C08282C00800000090009000BE -:106690000000000000000100000000A000020084D3 -:1066A000C0840000881000040041000100000000C8 -:1066B00001000000000000000000000000010101D6 -:1066C00084000000400820840084821041014001C1 -:1066D00000041009A0880182A01000082040821048 -:1066E0000004820800800000008000000310802168 -:1066F000031100200020A12004030010000000006E -:106700000000000005801100890080002011A140D8 -:1067100084050005200000090200000200800080BE -:1067200000000000000000900010000800210000A0 -:106730000000020000000000000000000000004017 -:106740004008800900408080004000098008C11195 -:10675000001000888082801110800080008300007B -:106760000000008080808000002000000000800089 -:10677000C0000203008991800300100004000000A3 -:106780000000800000008040000980C100059009E1 -:1067900089808321880080200000004100000000E3 -:1067A00080000000800000008000900888049004B1 -:1067B0008008000000080000000000000000000049 -:1067C0004080410009404020000000110005800089 -:1067D000C10088008811820210000005A10080C15C -:1067E00000008005008080000800C001100000004B -:1067F00040040300A10084A004100400200008004D -:10680000820010000800A00002414090A00482080D -:10681000050202A011000584900000002000A000E5 -:1068200000000800A00008000000A0104100A09097 -:106830000501080040008401840000000000000001 -:1068400000000040000000010040C000840084847B -:10685000900088000900400183012140C000A12070 -:1068600004912000108804A09000880800100010F7 -:1068700010100001000101000100000000000500EF -:106880000101000000000000000008A1200310200A -:1068900001820001900002000100000005010000DB -:1068A000000090020000000482A000000803000421 -:1068B0008285008800002000000001000000000028 -:1068C0000000000000010100830000004008018476 -:1068D00000840284000000100041A11102000100A8 -:1068E00000019020C010004090C005A000800080F2 -:1068F0000080800000400508050011100000020221 -:10690000901002050000000000000000821080913D -:106910008004412009408003890204110000A00284 -:10692000000900020000000000808080000080A0BC -:10693000094100A103800000800000004100000028 -:106940000000000000000020402005090303008033 -:106950002000040080800020008800059102004093 -:10696000110441218010808000808000A1008000FF -:10697000808400800000200904090380400409820B -:10698000400400A100020000000000000000080315 -:10699000C0411080C0000480008200000803000590 -:1069A0000080000000000000001080008000000057 -:1069B0002190A110100090020008000000000000CB -:1069C000000000000000000020800500090003080E -:1069D000801100A0801180000000889103008800D1 -:1069E000030584000280080000108084800080007D -:1069F0000800101184088800010000200004000035 -:106A0000001101080009000000000004001000004F -:106A1000C10010218402A0000020000500400100F8 -:106A20000000002000400000000000820482A0005E -:106A3000000021C00440C0C003000001008400A089 -:106A40000000000000000000000001400000000005 -:106A50000000080184114021040000000483C140AB -:106A6000A10000000204A0C001004000020940C0D3 -:106A700008000000000007000000818100E007001E -:106A80000000008100E0070000000000000000009E -:106A90000000000000E007004282000000E0070064 -:106AA0000000000000E00000000000000000000006 -:106AB000000000000000000000008100000000E075 -:106AC000000000820000000000000000000000E064 -:106AD000000000000000000007000000000000E0CF -:106AE00000008100000000E00700000A0000000034 -:106AF000070084003C3CF0FFFFFF3F3C000000002B -:106B00000000000000000000000000000000000085 -:106B1000000000002C3C000000C30FFF000000003C -:106B20000000000000000000000000000C0C0C0C35 -:106B3000000000000000101CD0DC603F00000000DE +:106040000000000000004D4DFF3C00002000010258 +:1060500000000000001000000000002000080020E8 +:106060000000000008008800002004020105041060 +:106070000000000800100000840001000010000073 +:106080004010010820100200A100000320000002BF +:1060900088008405C0008404000004040000020895 +:1060A0008400C00004092000A000200004000400B7 +:1060B0000000890088000200A00088008880200974 +:1060C0004000A0802100000421054003000880005A +:1060D00040910000000000000000000000010000EE +:1060E0000001008241028000000000918001400018 +:1060F00000900000400000000000040020C00001EB +:106100004000410504020000800004000000090076 +:10611000000020080000090040020000000000000C +:106120004000004000048000000000404100008268 +:106130000004000020400090C00000000000410268 +:10614000C0C0000000042000008220000002000007 +:1061500000000100000000000200200000200100FB +:1061600002002180020000100041001082020100A4 +:106170000100000840000080000300000003080345 +:1061800020000084032020000041000302410000A1 +:106190000000000500100040000900000000080891 +:1061A0000000A00000008200020089040300020930 +:1061B000A100090040050110080002400041040050 +:1061C0000309020403080308010302110204080082 +:1061D0000008000040000000000080008000000176 +:1061E0002000000084040000000100000000000105 +:1061F00008821000008480880010000004840000E1 +:10620000000080100003C00184100000100000088E +:106210000000008800000088000005100000000851 +:106220000000008405040040200011100208021044 +:106230000004400840088408400982840301048463 +:106240000008200820080804401002008084000193 +:1062500084000000000000000000000500000000B5 +:106260000000900500020088040000850004898277 +:106270000110000011400040000000101041000516 +:1062800000050002A0082010012000410008400580 +:106290008490000000210008002100000004000399 +:1062A0008241000000088210C0082008020004009B +:1062B0000000002100090003000000000041000070 +:1062C000020390210803082100110040000402008D +:1062D000880300030082000000A021000000008865 +:1062E00041C0000000C000C00020030000080011F1 +:1062F0004003040000A0908800000002000300A0FA +:106300000382090003834120000308C100821100B9 +:1063100008A000020000000200A0008404000008A1 +:106320000000000000A000000010008200009000AB +:1063300000000040000000000000000000004100DC +:1063400008001100408880001100080008C0030107 +:106350000000080400A0000000004100A108008027 +:1063600000000404000400050003000000031010F6 +:1063700020414000008010000009400000000000A3 +:106380004000A0000003040000801111010208A0D9 +:106390000004020000800000C000C0110000C00026 +:1063A0000000C0050000C0118204004000048240CB +:1063B0000441000008100420C020A0044005200073 +:1063C000A000004020000840C104A0848305820092 +:1063D000C0000890821084400000000040001001BE +:1063E00000400900000109010084200400A02000F1 +:1063F00080018000800402202040089000C000A09E +:1064000000080010000000A011040002200020007D +:10641000C0112000000020200000008800000000C3 +:1064200005000000200000900000040000000000B3 +:1064300000002000401021008011000041A0080051 +:106440008800080000C1029009820201081120841E +:1064500000902100210409C1210000000000000873 +:10646000900800080021011021030120000084C1D0 +:1064700040000908000009A104080009000000020A +:1064800000000005A0118200842100402041C008C6 +:10649000048310042004082000100000A01100094B +:1064A000A011A00800000000C00010000202C000FF +:1064B0000000000000000420040004000800200385 +:1064C000200000000808C000824182108200820380 +:1064D000000300008208210800900088020000A04C +:1064E000001002000084008220A12000209100C042 +:1064F0002104110090090000C00282A000000002E7 +:106500002103200000A00040000800840008800053 +:1065100000009140218983031005028500000308D3 +:1065200000040888058800000000210008008000A1 +:1065300000000000000000008000800080000000DB +:106540008000800000A0090000000000000000841E +:106550000000000005080404A084100408040000E2 +:10656000010040800080904100002008000000846D +:10657000000082009000844184034002044100082E +:1065800084214021000982030204840000009084D9 +:106590000103824100402040010421882080000046 +:1065A000001100009008000200000000000500003B +:1065B0000000001020050000058002000009008096 +:1065C00020212000000002400400A1088840A0050E +:1065D000400041008200412100040000404102804F +:1065E00000002000000200040000009000000000F5 +:1065F0000921000000400000000000A0A010800061 +:1066000000840800008200000000038200000000F7 +:106610000004200000020001800404A08440C004A3 +:106620000000004000000300000000000000000027 +:1066300000400000001020040000842082000000C0 +:1066400000408010800000020201000008000304E6 +:10665000000021A040C02184200000010040030868 +:106660008304000001000900000000000000000099 +:1066700004000000C0039005C083A0A0028920048C +:10668000A090000100008200000000000000000057 +:10669000000003C00002410191208888018200208F +:1066A00082900000000000000000000000000000D8 +:1066B00000000000000000000000000000C040409A +:1066C0000090C00205010100000110010482004099 +:1066D0000088100400008989A011C010000000008B +:1066E0000000020000000300020000001100000092 +:1066F0000500000000001121C0020003808080031B +:106700000520800211401105411100050000000024 +:106710000000000091901089C010820000000880E5 +:1067200005000080000000000000000000000000E4 +:1067300000000000000000000000000000000380D6 +:1067400000800000808091402021000200408000F5 +:10675000008000800080000541214003802000006F +:10676000000005008000098010000900049100006D +:106770000000002080000280800002002141108083 +:10678000900083204183108003102000001000003F +:106790000040000000001089090000208000004136 +:1067A0000005008200000000000000000000000062 +:1067B00000000000000000000000000000000000D9 +:1067C00080008041004180808000C1008211A000D3 +:1067D000800000100004000000400003000400835B +:1067E000800580000002800000100000000000888A +:1067F000000000000001C000209008000104830197 +:1068000001A00900A00101A1010400010082000112 +:106810000000000000200000899002000200100427 +:106820000001840300A184100000000000000000AB +:106830000000000000000000000000000000000058 +:106840000000400040039001C01002A00200A1011E +:1068500009008800A000A0218400000100010005BB +:106860000083020082000001C090000000000000D0 +:106870000001000200C0000001C0900500049082E9 +:1068800088A1200201852003088800010000A000E3 +:10689000000100000000000000000403A010080533 +:1068A000A1880282109110408209000100000000BE +:1068B00000000000000000000000000000000000D8 +:1068C00000000000C0880020024000C00010000945 +:1068D00000830111A084000400028200409008049B +:1068E000080200C00020049008C000C00002002080 +:1068F00000080008000000000000408080880400BC +:106900008904008200A011111021910200210920A8 +:10691000040300410000000000000000808800C166 +:10692000C1848491880980048080110400010000E2 +:106930000000000000000000000000000000000057 +:1069400000000000000089000080008000800080BE +:106950000083008211C00000008000808000800061 +:1069600004000985118500008000000005804100B9 +:10697000111021000304000000400000000000840A +:1069800088C004008220218090039000050020111F +:10699000830020002000000080000000800004042C +:1069A000094010000003801000400000800000013A +:1069B00000000000000000000000000000000000D7 +:1069C00000000000000000008041800280C08000C4 +:1069D0000000118502004040800300880000800014 +:1069E00082009020820080000000008000000000F3 +:1069F00001040000010001000000001100880000F7 +:106A000082C1A1408204090103409101098800006C +:106A100001852000010091000800080082000800A4 +:106A20000004008801020000C000C002088888003D +:106A30000001000000000000000000000000000055 +:106A400000000000000000000000C001200140C064 +:106A500008400000010201000101C000102088A0D0 +:106A6000A0000200A000090082000000004000C059 +:106A70000000000000E000000000004100E007000E +:106A80000000818100E007005006001100E00700CF +:106A90000000840000E0070000000000000000008B +:106AA0000000000000E007000000000000E0070018 +:106AB0006000000000000000000000000000000076 +:106AC00000000000000000000000000000000000C6 +:106AD00007004842000000E0000000000000000045 +:106AE00000000000000000E000004106000000E09F +:106AF0000000000000000000000000000000000096 +:106B0000C0C0000046FF42FF0030FFFFF0FF000062 +:106B100060626262BD3CBD3C0000000007070707E1 +:106B2000000000000000000007E7E7E70C0CF60695 +:106B3000B4B4B4B400000000000000000000000085 :106B40000000000000000000000000000000000045 -:106B5000000000000000BDB4F9F0FF6F3C60FCC015 -:106B6000FCC06090000000600060666600007F4F1F -:106B70007343FCF6FC903C3CF000C3C303000000F0 -:106B80000000000000000000000000000000000005 -:106B90000000000000002C3C6FFFFFC30FFF00004F -:106BA00000000000000000000000000000000C0CCD -:106BB0000C0C003C00000000131FD3DF603F0000FE +:106B500000000000000000000000000000000C0C1D +:106B6000E724A000A0003D343D34FF0FFC0C0000E2 +:106B70000000F0FFF03C00000000000000000000FA +:106B80000000C0C0F0F046FF42FFF0F0FFFFF0FF52 +:106B90000000606060609900990000000000070F2D +:106BA0000F0F00000000000000000FFFFFFFFCFCC3 +:106BB000F606FF99660000000000000000000000DB :106BC00000000000000000000000000000000000C5 -:106BD000000000000000000024B460F0C36F0060FB -:106BE000FCC0FCC000006090000000006666000071 -:106BF0007C4C7040C0F6C090000000000000000017 +:106BD0000000000000000000000000000000008035 +:106BE000CFCFE72405000500BDB42D24F000FC0C38 +:106BF00000000000F000F03C000000000000000079 :106C00000000000000000000000000000000000084 :106C10000000000000000000000000000000000074 :106C20000000000000000000000000000000000064 :106C30000000000000000000000000000000000054 :106C40000000000000000000000000000000000044 -:106C50000000000000000000000000000000000034 +:106C5000000043084000008421860000000000007E :106C60000000000000000000000000000000000024 -:106C7000000000000000000000006C6CFFFF0C8DA5 -:106C80000C8D000000000000426000000000C3C046 -:106C900042400000000099FF88CC0000000006F68A -:106CA00002F20000000090992020000000006666BB -:106CB0003C3CF39100000000000000000FF0FFF0EA -:106CC000FFFFBFBF00000000F3F3F39100000000DE -:106CD00000000000000000000000000066366F3F6A -:106CE0000C66FCFFD2D2D2D20400000400000014D3 -:106CF000000081E727C327FF0606F6F66C6C00004C -:106D00004ECF4ECF0000000000006666000000007D -:106D1000FFF0666000000000FF99CC88F0000000E2 -:106D200006F60BFB00000000000920200000000018 -:106D300000FF0000F391F391060F0000000000F047 -:106D4000F0F0FF00BFBF00000000F3F3F3F300001A -:106D50000000000000000000000000000000663697 -:106D600060300C00FC99D2D2D2D208000008001486 -:106D70000000000080802700273C003CC3FF00008B -:106D80000008000000000061003FC00100A1006198 -:106D9000003F050D0000000000000000000005613C -:106DA0000A0F050D00A005610A0D050D00A1006187 -:106DB00000030009000000000000000000010000C6 -:106DC00000614006000D000000610007000D00009A -:106DD0000000000000000000006100000001000051 -:106DE0000061000E000D00000061000000110000B5 -:106DF00000610004001900000000300800000000DD -:106E00000000000000000000000004043030F3F334 -:106E100000550000AAAAAAAA000000000000000075 -:106E2000A581FFC35FF51C347D7D28283F3F152ACF -:106E30000000000000FFF0F0000000000000000073 -:106E400000003C08FFCBC0CFC0CF00000000000016 -:106E500000000000000000000000878282820028FD -:106E600000280000000000000000003C003C00FF83 -:106E70000C0C2C0F2C0F41F14FFF00000000000004 -:106E800000000000000000000000FF00FF043030A0 -:106E9000F3F300550000FFFFFFFA000000000000C0 -:106EA000000024003C005FF543C17D7D2828CFCF42 -:106EB000458A0000000000FFF0F000000000000024 -:106EC000000000000008C3CBC0CFC0CF000000000E -:106ED00000000000000000000000000005000000AD -:106EE000F0F0FFFF00000000000000000F0F0F0F88 -:106EF00000FF0C0CAFAF050500B00EBE0000000097 -:106F000000000000000000000000000006960FFFD7 -:106F1000A0AFA0AFD0F0103092BAD3FB00000000B9 -:106F2000000000000000000000000000CFCCC3C043 -:106F30007D410C0CD714D7140000000000000000A5 -:106F40000000000000003CFF0F550AAA0A000000E4 -:106F50000000000000000000000000000000040429 -:106F60000000C2C202C20A000A0000000000F3C30F -:106F700030003C3CF00014142828003C003C000089 -:106F800000000000000000000000000000000600FB -:106F90000F00A0AFA0AFD0F0D0F0103851790000B2 -:106FA00000000000000000000000000000000F0CC6 -:106FB00003007D41CFCFD714D7140000000000009C -:106FC00000000000000000003CFF0F555FFF5F5510 +:106C70000000000000000000000000000000000014 +:106C80000000000000006666999938003800808096 +:106C9000C0C0000000000000000000000000000074 +:106CA0000000000000000000000081817E007E7274 +:106CB000818D9090E7810606FFFF00000000000034 +:106CC00000000000000000000000000000000000C4 +:106CD00000000000000000000000000000000000B4 +:106CE000FF7F0000FF66FF6600000804CFC3CFC32C +:106CF00000000000000000000F0F0F0F0000000058 +:106D0000000000000000000000000000F900F90091 +:106D10008181C3C300000020000F000F00000000AD +:106D20000000000000000000000000000000FF0064 +:106D30004272BD8DF6F6E7810606060600000000E9 +:106D40000000000000000000000000000000000043 +:106D50000000000000000000000000000000000033 +:106D60000000FF7F00003F003FC300000000C0C3E1 +:106D7000C0C3000000000000000066663C3C0061EB +:106D80000005000900000061003F009D000800614F +:106D9000003BC00500000060003D000D00000061E8 +:106DA0000007C00C000000000000000000000061AF +:106DB000500F000D00A0A5614A0F050D00A00000B6 +:106DC00000000000000000000000000000000000C3 +:106DD0000000000000100000100020080040000823 +:106DE0000061400000010000A00000000010000150 +:106DF00000610007009D000000614007009D000544 +:106E00008300050051101010000000000000000079 +:106E100000B000B04100C30055505550FF3F5A1A12 +:106E2000F5F7FFFF000CA0A000000000000000002C +:106E30005F0F550000FF00FF000000003030FFFF33 +:106E40000000000000000000000000000000000042 +:106E50000000000000000000000000000000000032 +:106E60000000F101F101F0FFF0000000000000005F +:106E70000000FFFF00005500FF00000000000000C0 +:106E8000000000000F0000000000000000000000F3 +:106E9000000000BE00BE4141C3C355505551FF3FE5 +:106EA0005A1A000000000000A0A00000000000002E +:106EB00000005F0F55002828F8F80000000030306F +:106EC0003030000000000000000000000000000062 +:106ED00000000000000000000000000000000000B2 +:106EE00000000000F101F101F000F00000000000DE +:106EF000000000000FFF0F0055FFFFFF0000000023 +:106F000000000000000000003C0C28080000000009 +:106F10000000000051FF51FFFFFFAA82002C002C4F +:106F20003C3C00003C0C3C040C3C0C3C00000000D1 +:106F300000000000FF0F0F0FBCBCBCBC0000000035 +:106F40000000000000000000000000000000000041 +:106F50000000000000000000000000000000000031 +:106F6000000000000000F303F000F000F055000006 +:106F70000000000000001C1CBCBC00000000000061 +:106F8000000000000000000000003C3C3C3C000011 +:106F900000000000000041FF41FFFFFF828200FF70 +:106FA00000FF3C30000C3C003C00000000000000F2 +:106FB000000000000000FF000000A0A0A0A0000052 +:106FC00000000000000000000000000000000000C1 :106FD00000000000000000000000000000000000B1 -:106FE000AE04AA00C2C20202140014000000000095 -:106FF000F3C330003C3CF00041418282003C003C45 -:107000000000000000000000040088028200040369 -:107010000010001084040484001000802010040478 -:10702000C010C0000010C091404004102084010432 -:10703000100000100400888200000400000400100A -:107040000005840800000000000300020400200284 -:107050000084000400042040200400000000000020 -:107060000400000001000000008000000000200279 -:107070008400A000000084000004000200820000E0 -:107080000490000000000000000420000400000044 -:1070900000000000009000000010210021100401F9 -:1070A00005000000000002820002809180000020A4 -:1070B000200500000000098400100000000000000E -:1070C00004002000008200A00084000000000000F6 -:1070D0000000404000010005000000002100000009 -:1070E00009000000000020000002000400900000E1 -:1070F0004004000400000000000000000001000245 -:107100000000000300000000000000000205021063 -:107110000010000400840041000000020208020880 -:1071200000100009028400108200404000040200A8 -:1071300004020041041000108420042000400009D3 -:1071400004090221000000030410000000000000F8 -:10715000000000000000001000800000000000009F -:107160000000080000000000000000000000000017 -:1071700000000410000000000000000000000040BB -:10718000000000100200000000000000020009885A -:1071900000080311410800020008008440000004B8 -:1071A000001002000510001004C00900800809103A -:1071B000000880090010800900090089840100820C -:1071C00000100010208800080010000000080000D7 -:1071D000000000400088000800840010001000102B -:1071E000000000080000000800880010008800046B -:1071F000000000C0000000100088008800000000AF -:1072000004080040000000880000000000000008A2 -:1072100002400002000300108408044100004011F5 -:10722000842140410000001040000040000488001C -:10723000080421820110042105209005822090007D -:1072400000100000000900080008002100090000EB -:1072500000000000000000000000200802102000D4 -:107260000004820890008400C0214002000404024F -:107270000000040000000000000401040000000001 -:1072800000000000900084002080840000000000C6 -:1072900040000208414021004100410003820300F8 -:1072A000008200008000000003A180000084080428 -:1072B000211090A1C0022084C082820300000841F6 -:1072C00000020088002010880000110003820008DE -:1072D00000000000000041080000000200880008D3 -:1072E0008082000100004000000040000090080083 -:1072F00000000308202000000000002040000000E3 -:107300000882080003000000000080040000000064 -:1073100000000308400500110809080010100800CB -:10732000041008100411C00300418204A000824030 -:10733000049004030920000404048410C021408048 -:107340000008080000050000000400200000000004 -:1073500004400000000008000000100200110000BE -:107360000000000004100000000000000000010008 -:107370000000000000009000080000000000000075 -:10738000000000000400000082000000080000006F -:10739000000000000000001000A00420108203C0C4 -:1073A000109000C009842102009010040004100411 -:1073B00000080803108288C103C1A041030910041A -:1073C00004200088200000202100030000000000AD -:1073D000000010000000000000400000002000003D -:1073E000000000000000200000000000000000007D -:1073F00002A00000200000000000000000000000CB -:10740000000000000000000011000000200000004B -:10741000210000000000000000408403C00800219B -:10742000A0050040080800C1820500000008C00354 -:107430000041A041C04020418220088308C1008251 -:10744000000500A100100008000000080000000076 -:107450000000080084000800000000210000000077 -:107460000080080000000000000020000003000071 -:1074700000000004200001000000000000000000E7 -:1074800000040000000004000000008000C10000B3 -:1074900000000020000000000011001008A0030000 -:1074A00000000004059000100540000008000000E6 -:1074B0000084008200000000000008010020C004D9 -:1074C000080300A041200003200203000000000088 -:1074D0000000000000000000034000004100080818 -:1074E000410000400000042000201020000008009F -:1074F000000000000001000020400000000000002B -:107500000200000040040004000000000410000419 -:1075100000000800000000880000000004030005CF -:107520001000001040400021A080000008038809DE -:1075300083210808200810008821401084032109B5 -:1075400000000104000002000008000000100040DC -:10755000000900008840000000000000000000005A -:10756000900000000000000000000000000000008B -:1075700000000000004000000000000000000000CB -:1075800000000000000000000000000000002000DB -:1075900000000000001100000000000000000920B1 -:1075A0002100000000002000008404100984110064 -:1075B0004020400009002090088200200810008828 -:1075C0000420411004090000402002821010000035 -:1075D0000000080003000300000004020000000097 -:1075E00000A00000000000000000000020000000DB -:1075F0000000000000000000002000000000410426 -:107600000000000000000000000000000004400036 -:107610000000000000000000000011000000030056 -:107620008800200000008200000808C000A08883B5 -:1076300010A1C08300880082400000000000840088 -:1076400004011001050100010104044000A0000232 -:10765000000000000000000000000000000000002A -:10766000000000029002008200900011000400C09F -:107670000090000000000000000000011000010068 -:1076800000010000000000000000000100000000F8 -:1076900000000000010104010001000000000000E2 -:1076A0000000000000000000800008208020008909 -:1076B0000084002000020084008480000020000874 -:1076C00009208005800484030004208080000000DD -:1076D000008000000000000000000000000000002A -:1076E0000000000003800080008000000010028283 -:1076F000400000080000000000000000000890109A -:10770000040800030000000000000000002000202A -:1077100000040009004120020002000800000000EF -:10772000000000008000000000100000000080A1A8 -:1077300000800000C100A0008210C00005004004CD -:107740001005110091C008801020200000008088E2 -:107750000080008000000000000000000000000029 -:107760000000000000000000009000800000000009 -:1077700002000200080000000000000000000000FD -:1077800008000800100000000000000000000000D9 -:107790000000000000000000C000401000200000B9 -:1077A0000000000000004000040004008800000009 -:1077B000080200A0000004400200A0201100000008 -:1077C000000000020000030583020501118810007B -:1077D00090200482C0C000000000000000000000F3 -:1077E0000000000000000000000000C10040000098 -:1077F0000002000000000000000000000000000087 -:107800000000010000000000000000000000000077 -:10781000000000000000000000841000A1C0000172 -:10782000000000000000000000900088001000042C -:10783000101000000100C1080488010001008282CC -:1078400000080182009100040010010800000000FF -:1078500040820010000091040000000000000000C1 -:107860000000000000000000000004000000000014 -:10787000080088000001000008000000000000006F -:1078800000000001000000000000000000000000F7 -:1078900000000000000000000000000101000001E5 -:1078A00000010000000000000000000000800080D7 -:1078B00000800080100004000980000041000800E2 -:1078C00080000080208003081110040511001100C1 -:1078D000000504000000000040000000000000005F -:1078E0000000000000000000000000008000000018 -:1078F00000000800000200104102800000000000AB -:107900000000000000080008000000100000000057 -:107910000000000000000000080000000008111135 -:107920001021002000000000000000000002000004 -:107930000080000000000009808000000021042079 -:10794000C10003400000800000008008C0028008E1 -:1079500002800002800080C0008000000000000063 -:107960000000000000000000000000000000800097 -:107970008000000000000202020008000000000079 -:1079800000000000000008020800410003000000A1 -:1079900000000000000000000000000000002003C4 -:1079A0004000410002000000000000000000000054 -:1079B0000088004000001000C0848284C0000209DA -:1079C0008388041089001002100040002001058502 -:1079D00004C1C040000190000883A0908400000012 -:1079E0000000000000000000000000000000000097 -:1079F00002008200900082000010000000000000E1 -:107A00000000000000000000011000000000000065 -:107A10000000000000000000000000000000000066 -:107A20000100918800C0010000000000000000007B -:107A30000000000000000000000000000000000046 -:107A400000000000000042000000000000000000F4 -:107A5000000000E007000000000000000700001226 -:107A60000000000000000000000000000000000016 -:107A700000000000000000006000000000E00000C6 -:107A800000000000000000000000000000E0000016 -:107A900000000000000000000000000000000000E6 -:107AA0000000000000E000000000000000000000F6 -:107AB0000000000000004555455514140C0C3C3CDA -:107AC000FFFFFF87558700004141FFF06960C381D8 -:107AD0003C2400FFF0F0787878787D0D0D7DF0F093 -:107AE0003C3C00000000000000000000000000001E -:107AF00000000000C3C3FF00000000000000000001 +:106FE0000000000000000000F303F000F000F05586 +:106FF0000000000000000000BE14BE1400000000ED +:107000000000000000000000000000000000200060 +:107010000085000288009000000000000000400091 +:107020002100210001008802200800000000000467 +:1070300000802000208041800003000040002005E7 +:10704000200389040405840000038808C102100994 +:1070500000001000880088008404890088802005D2 +:10706000898020000040400002000505200021101A +:1070700000000400850440800840209120000400A6 +:107080001003041040008400408010000000000045 +:1070900000000002000010000000000000000000DE +:1070A0000000A0A0889008001000800000000800E8 +:1070B00000080010C00080402010100000000000F8 +:1070C00009000000040080000000000000014000F2 +:1070D0000000000000004000000420004000000408 +:1070E0008002400400000002200000208800000010 +:1070F000020200024102040200208903000210047F +:1071000090004004100090020002A1200000000046 +:10711000000000000000000001000220000000004C +:1071200002000000900490009190091002001100EC +:1071300000058400000500000000000000002000A1 +:1071400002040000000000000800010000000088A8 +:107150000020890800100000000004000000034126 +:1071600020414000000002000209820001032000CB +:1071700009090920A040080804840900080503053E +:10718000090800058510901040210005400000000E +:10719000000000000000000000004010001000008F +:1071A00000000000000000110000200340840000E7 +:1071B00020100000200805080088000800080010C2 +:1071C000800000010000040800100908040000000D +:1071D00005020909040009040004000020840008D5 +:1071E00020009088800000080040840004100800FF +:1071F0000004840484054008A01000108400820864 +:107200000200901002824008050980100404808268 +:1072100000000000000000000008028800082000B4 +:1072200000000400040000004008848020210800C1 +:1072300008400000004001020041000000039040AF +:107240004005008800050141822020210000000047 +:10725000000000A084C000210020002108080003D5 +:10726000000000210400002100000410000040087C +:107270000000000800210005004001000008004156 +:10728000820000090005A000051010400100081050 +:107290009008000000080082000004100002400076 +:1072A00000004100C184C1400000800005020300CD +:1072B000800480000000038820000010048808106B +:1072C000088400A000044100208400A18020001058 +:1072D0001100000009200020004000000010000004 +:1072E000000041000000000000000800000800004D +:1072F00000900000000000004100000104A0000018 +:107300000808410003080002008404010000041082 +:10731000000800008800000000000000000040415C +:107320004011040804000020C105044100210109A6 +:107330002008A1059004C0202000A000040008003F +:10734000820002009010040004000411C100219189 +:1073500041201000000004000400409004888200D6 +:10736000000082008200000000098200C041400944 +:10737000081082050808C08210209009A10082052B +:10738000040400400911C0A0040882020021002169 +:107390008220A004094000C000820000000000001C +:1073A00080000000400183A040910400C000000460 +:1073B000200020A0049003C000C0800400C0000092 +:1073C000808441848010040000902120418220901C +:1073D000402020008800000080048400A120800458 +:1073E0000490088420000000000004A000A0049085 +:1073F0000910001002A01100004000854084080020 +:107400000288828403A004C00411910003C0088490 +:1074100000400009200004C00000000000000040FF +:107420000088401040401000010000000041108022 +:1074300000008400201000000021000200038202EE +:107440002005210341402000C004C010210001009C +:107450000900080000848288000008000002002162 +:10746000C080A0000000C00000002000200808210B +:10747000C0000003C1A1A021C00008000005000851 +:107480000011080008004000828200000000090886 +:107490000090000010001002820000840000000034 +:1074A00000100002000080C0800804A00004000456 +:1074B000002002900300831005022100000805400F +:1074C0000800800288000201820000011108208863 +:1074D00020082000009000210021000010840001FD +:1074E00010040020000000000000000080000000E8 +:1074F0000000000000000810000000000000001064 +:107500000000000080A0000000201004000000C067 +:10751000840805210804050008000000004100005F +:107520000000000800080000400040000008400083 +:10753000A02190000200000820212000200420212A +:10754000201020040021000083802000200500047A +:107550008221882040098282020301020000C020AB +:107560000002002100A00008000000000000000050 +:107570000041400001008200000010218200000054 +:10758000000000090080820040108505C0800410C2 +:1075900090100808000082000010001182111100F4 +:1075A000000000000000000100008284800000084C +:1075B0000002000021000000000800C08040802080 +:1075C00080008000828200884000020485048000E0 +:1075D0000000000000002100000500002000000065 +:1075E000410100910200400521000000410000001F +:1075F00000042002800820104104050800A0008239 +:1076000000820008000009200000200008A00040BF +:10761000000203910908008421044188200009C068 +:1076200000000000000000000000880001000001D0 +:10763000000000000000000010A101821140C00401 +:10764000000000000000000011C0008400A0C088FD +:107650000000000002000000828201840400908289 +:1076600000000000A1010100000100000000000076 +:107670000000000000010000000000000000000009 +:107680000000400400880040101000C04088000244 +:107690008210841000830400C0A0402009A08388C9 +:1076A000908400000000000000000911880440419F +:1076B0000003000000000000000011910811C083C9 +:1076C00000110000000005000000A08000004080C4 +:1076D0008000000000020902000300002000C0003A +:1076E000000000000303A0020300000200000000ED +:1076F000000000000011002100090020000000002F +:1077000000000000808000000000000000800000F9 +:1077100000008000119100A180048040800088005A +:10772000890080800000000000000000000041008F +:107730000804412100000000000000008240800297 +:107740009104910000080000004000000005801036 +:107750000085000010800400400002402009101045 +:1077600010080321000011802100030041100000D7 +:1077700000000000000000102100050002110000C0 +:1077800000000000800000000009000480000000EC +:107790000080800000008080802180800000000048 +:1077A000881184049100000000000000000000C067 +:1077B00000000100010100000084000000A0880317 +:1077C00082010520C0900001000000890000C00077 +:1077D00008011040C0000102010001000000839078 +:1077E00004010183C00100000004004000000140CA +:1077F0000000000000000000000001000100002067 +:1078000040000000C000C00000000000C0849020C4 +:10781000880002108440048202102001024000040B +:1078200090000501A0010800000000000000000019 +:1078300000010000030000010100000084000000BE +:10784000080220A0020521C1000010000000000075 +:107850009088040800104020000100010100000091 +:107860000284200000091084000001000000400094 +:1078700000010000000000000000000010010100F5 +:10788000000100000000000000000040002004088B +:107890000400402000A082049110A09000A00341A9 +:1078A00004C1100300A0000902C100000000000094 +:1078B0000000000910080841004104000000000019 +:1078C000000080108009001002910000800000007C +:1078D0000200000080000000050000204004034179 +:1078E000000580200010009089200000020500059E +:1078F0004102000800000000000000000000A10894 +:10790000400002400300000000000000038000006F +:1079100080800000800000800000088000A0210519 +:10792000C04080C180C0000400A1800300000000AE +:107930000000000041842000410008110000000206 +:1079400000000000880480859100911180000000F3 +:107950000000000080000020008000000084090476 +:107960000200030041004089A18005410000028916 +:10797000000402000340000000000000000000833B +:107980000200020021110000008000800000800041 +:1079900080020000000000000000008080008305DD +:1079A0000904000011008980091021000311000062 +:1079B0000000000000000140000000000100000085 +:1079C000000100000000090088400888030008004A +:1079D000100000001000C0009002080840000010D5 +:1079E000000100000100830801C00908C001000077 +:1079F0000005000100000100000000000000000080 +:107A00000002000000000000000000020010000062 +:107A1000C000A0A140040000A00004000408100061 +:107A2000040000034004C000C0C02008851001000D +:107A30000000000000000000000000E00000000066 +:107A40000000000007000000000000E00700000048 +:107A5000000000E000000000000000E00700000659 +:107A6000000000E000000000000000E00700410A04 +:107A70000000000000E0070000000000000000001F +:107A80000000000000E00000000000000000000016 +:107A900000000000000007000000000000E00700F8 +:107AA0000000000000000700000A000000000700BE +:107AB0005000000000000000000000000000000076 +:107AC00000000000000000000000000082820100B1 +:107AD000BE0000AA3CBE000000000000F0F0687C80 +:107AE000EAFE00000000000000003F3FAFAFFF28AB +:107AF000FF7D00000000000000000000000000000A :107B00000000000000000000000000000000000075 -:107B10000000000000000000000000000000000065 -:107B20000000000000AA00AA000000000000000001 -:107B300000000000000000004555041414D70C0C90 -:107B40003C3C0000FF87558700004141FF0F690959 -:107B5000FFA5FFA500FFF0F078787878D70707D762 -:107B6000F0F03C3C000000000000000000000000BD -:107B7000000000000000C3C3F5F500000000000095 +:107B100000000000F0F0F0F0553C553C202FE0EF65 +:107B2000F0FFF03CC7C7EFEFFF003A300F0F0F0038 +:107B3000D5FF557F0000000000000000000000009D +:107B4000000000000000000000000000000080C3F2 +:107B500000AABE0000AA3CBE0000000082FF000098 +:107B60004054C2D600000000000000003030A0A049 +:107B70000028007D00000000000000000000000060 :107B800000000000000000000000000000000000F5 -:107B900000000000000000000000000000000000E5 -:107BA00000000000000000AA00AA00000000000081 -:107BB000000000000000000000007D28AFAFEBEBEC -:107BC000EBEB05050505EB000F0F030301030000B8 -:107BD00000000000000000000000E7E700E7F600FA -:107BE00000F60EB0BEBE0000000000000000000065 -:107BF00000000000000000000A00CA0000000000B1 -:107C0000F055F055000000000000000000000000EA -:107C10000000000000000000000000000000000064 -:107C200000000000000000000000000005500550AA -:107C30000000000000000000000000007D28050595 -:107C400050FAFAFAAFAFAFAFEB550F0F03030303D0 -:107C500000000000000000000000000000E7E7E76F -:107C6000F6F6F6F60BE0EBEB00000000000000007B -:107C7000000000000000000000000AFFCAFF000032 -:107C80000000555571710000000000000000000068 -:107C900000000000000000000000000000000000E4 -:107CA00000000000000000000000000000000AA02A -:107CB0000AA000000000000000000000000000001A -:107CC000000100613006000D000080610006000D1B -:107CD000000000610006000D000000610A0D00199F -:107CE00000A005000A08001000A00000000000002D -:107CF0000000000000000000000000000000300054 -:107D00000000000000610001000100000000000010 -:107D100000000000006100010011000000000000F0 -:107D20000000000000610006000D0000006100047A -:107D3000000900000000000000000000000000003A -:107D40000000000000000000000000008ECF8ECF79 -:107D5000000000000000000000FF00005F5F0A0A52 -:107D60002828EBEB000000000000000000000000ED -:107D70000000000000000000000000000000000003 -:107D80000000000000000F0F0F55F0F0F0F00000B1 -:107D900000000000000000000F0C0000C3C3000042 -:107DA00000000000000000000000000000001400BF -:107DB000000014BE14BE000000000000000000001F -:107DC00000000000000000000000000000008ECF56 -:107DD0008ECF000000000000000000FF00005F5F89 -:107DE0000A0A2828EBEB0000000000000000000059 -:107DF0000000000000000000000000000000000083 -:107E000000000000000000000F0F0F5530F330F3AA -:107E1000000000000000000000000F0C0000C0C0C7 +:107B9000000000000000AAAA00FFF0F0F0F0202F83 +:107BA000E0EFF000F03C04042C2C00003A30000020 +:107BB0000F0080AA002A0000000000000000000062 +:107BC00000000000000000000000000000000000B5 +:107BD000FFFB550014140000000000000000FF002F +:107BE0005555FF5F00500000000000000000BEBEC1 +:107BF000AAFFFCFCC0C00000000000000000000064 +:107C00000000000000000000000000000000000074 +:107C10000000000055555555F3B230B2FFFF00008B +:107C20003F3F0AFA0F0FC3C355FFC3FFCFC0CFC0FA +:107C3000FFBF3C3C3C3C7C2C0000000000000000EE +:107C40000000000000000000000000000000000034 +:107C50000000FFFF550004040000000000000000C9 +:107C60003C3C0F0FFF5C005C0000000000000000C7 +:107C70001414005555555555000000000000000033 +:107C800000000000000000000000000000000000F4 +:107C9000000000000000FF003C3CF3B230B2AA003C +:107CA000AA0030300AFAFF00C3C35500C30055557F +:107CB0005555FFBC3C3C3D387D28000000000000CD +:107CC000000000410007000D000005000A08050043 +:107CD00000A00061000F009D00A500610007000DDD +:107CE00000001061500F000D000000610001000154 +:107CF00000000061000F000D0000000005600A0F89 +:107D0000050900A00000000000000000006100065E +:107D1000000500000000000000000005A50040086C +:107D2000001000A000615A06000D00000061000E66 +:107D3000059D0000A0610006000D0000000000008D +:107D40000000000000F0FFFBFFFFC0C000000000CB +:107D5000000000005D5D0C0C82BEC2FE0000000051 +:107D60000000000000000000000000005F5C5F5C9D +:107D70002A207F755F0AEBEBD70C140C00000C0C6B +:107D80000808FFC0FFFC00000000000000003000F9 +:107D900030000000F0F000000000000000000000D3 +:107DA0000000000000000000000000000000EBC325 +:107DB00041C33CAAF0AA00003F0FFF0F5505000089 +:107DC0000000000000000000FFEB3CFFC0C000000E +:107DD0000000000000005D5D0C0C003CC0FC0000D9 +:107DE00000000000000000000000000000005350F0 +:107DF00053502A207F755F0A4141D7CF14CF00002E +:107E00002C2C282800C000FC00000000000000000E +:107E10003FFF3FFF0000F0F0000000000000000006 :107E20000000000000000000000000000000000052 -:107E300014000F0FF0F03C3C0000000000000000B8 -:107E40000000000000000000100000000000000022 -:107E5000C3F000AAF5F5C1340151015145CF51F3EA -:107E600045CF51F36909696000000000000000007F -:107E70000000000000000000000000000000000002 -:107E8000000000000000000000003C3C3C3C0F00F3 -:107E9000FFFF000000000000000000003C0C00009C -:107EA0000F0F0000000000000000F000FFCF0000F6 -:107EB0000000F9FFFFF900F000F0000000000000F2 -:107EC0000000000000000000000050000000000062 -:107ED0000000C3F0FFAA5F5F431CABFBABFBCF45C9 -:107EE000F3518ACFA2F3FF0FFFF000000000000063 -:107EF0000000000000000000000000000000000082 -:107F00000000000000000000000000003CFF3C00FA -:107F10000000F0FF000000000000000000003C0C2A -:107F20000000000F0000000000000000F030FFFF24 -:107F3000000000006FFFFF6F00F000F00000000085 -:107F400000000000C000408084008802880000001B -:107F5000840520002020210020000002008088806D -:107F60000200048220802102C08540000000000041 -:107F700000030090008004A00010000020102000EA -:107F8000204020000003000000100000200000003E -:107F9000880000008804000020000000001000801D -:107FA000008000800020008000A000A0008400006D -:107FB00000000010400000000000040000000084E9 -:107FC00004800002000000000020054000000000C6 -:107FD00000020000000221014040000000011010DA -:107FE00000100000001000028403000410000000D4 -:107FF000000000000040001000114001000080005F -:1080000080008090000000000000002100000000BF -:10801000000000000000000040000000000000011F -:1080200000200002002020010040004100410040EB -:10803000000000000001000000000000000000003F -:108040000003000200010000004189009008004088 -:1080500008200411008904418200904108050109AB -:1080600008020010914109050209004184840004BE -:10807000A009041000000000000000200088042077 -:108080000010000004000010000000800000C0008C -:1080900000000200000800030800000000000000CB -:1080A00000000020014000000000020000400480A9 -:1080B0000880000000000000000000000002000036 -:1080C00000000000000000000490091004080910DE -:1080D0004188000900880420828400844010000840 -:1080E0000410058540880808C004000800820021AB -:1080F0000085000821040000008400840041001075 -:10810000000100C10004C0080004000004100900C0 -:1081100000000000008400020082000200820000D3 -:10812000008400A000092008000800088008000161 -:1081300000400040000000080000000400000000B3 -:1081400000000000000800080004000220080005EC -:108150000410400300210021000310080003000266 -:10816000C000040088080008001004080021001066 -:1081700000824010000300080021000804080000ED -:10818000002108210008100800410021000000081B -:10819000088082080008C0000000100000080400E9 -:1081A0000000000500000010040000004000400036 -:1081B00000080440040000000440020040000000E9 -:1081C0000000000000000000008000802000080483 -:1081D000410200100808040003820300004010C0A0 -:1081E000098200008840080000840002030000109B -:1081F00000830021808900C000A00084001000904E -:10820000001040A080A000C000000000000000009E -:108210000000002000000000000000000400000436 -:1082200000C000000000008200008000000000008C -:1082300000020300000280020000000004000000B1 -:108240004000000000000000000000040004800066 -:10825000A00288000404040008111080004040803F -:1082600082208200004004098205000008090840BD -:108270008284080000410900080540008220820035 -:10828000000002008400000200208209000020009B -:108290000000C000000000100000200000000020CE -:1082A000C040000020000000000008000020000086 -:1082B000018000000000000000000000000000003D -:1082C0000000000008000000000000000040000066 -:1082D0000040410000A0000000880284412008887E -:1082E0000402200902004188408400C0008200008E -:1082F00000004021008400A004A000000088089035 -:10830000209005000010000020090000110000006E -:10831000800400000000210021010000000000880E -:108320000000002003000000008440000000200145 -:1083300020002020000000000000000003000000DA -:108340000000080000000000000000000000000025 -:1083500000000000C003082108410002C021000005 -:108360001020044100100440001100000002A00091 -:1083700010109011C00421830804828500210000A0 -:108380000008084008008280000000C08200080841 -:10839000100000000000C0004000000000000000CD -:1083A00000000000000000000000000000000100CC -:1083B00000040004080004000000000300000000A6 -:1083C000000900030005000000400000000000005C -:1083D000020000000000000000100010020800046D -:1083E0000900000000000010000800880282001050 -:1083F0000800210000A00001840400110002000018 -:10840000000821000008009000200000002000006B -:108410000000000000080000210000000300000030 -:108420004000000411000300000000A00000000054 -:10843000200000A10001800080000000000000007A -:10844000000000000000000000A0080800A00000DC -:1084500000000000000800000041001000100000B3 -:10846000000090084004000000411041100000008E -:10847000900304040002000400100041C009040439 -:108480000002000400024040001008000803000041 -:108490000420900010008800000000000000000090 -:1084A00000000000000000200000000000000000AC -:1084B000400000002000004009800000A0000002F1 -:1084C00000000000000000000000000000000000AC -:1084D00000100000200040000000110003C0100147 -:1084E00020C009000800000041000520418411005F -:1084F00000000904028209001100209004000040DD -:108500000090110040000010002000010202020053 -:1085100004A0000000400802044000000810000011 -:108520000000200400000000000000000000200007 -:1085300000000000089008040804A02000000000CB -:10854000000008000000080000000000000000001B -:10855000000000000000000400000000C08800903F -:108560000090A0909020018488A0C00811080121EB -:108570008402100800A1000208A1C002051190A108 -:108580000021828341C000000002081040A00008C2 -:10859000A008000400004000000000000000C0A08F -:1085A00090400082028200000000000000000000F5 -:1085B000000000000000010020010001000000C0D8 -:1085C00010400002C0900000000000009000000079 -:1085D0000000000000000000000082010000808018 -:1085E000008000000000090003000000800082807D -:1085F00002A080A000C00488210080A00908918505 -:108600008040090280118900000000800000008085 -:10861000000000000080002005400800002000004D -:10862000808080800000808000000000000000004A -:10863000000000000000110011118008090400056D -:108640001180808000808000000000000000800019 -:1086500000000000000000000009091000200000D8 -:1086600000000011008000000000001080000000E9 -:108670002080051085102020000000000000000070 -:1086800088098540A0840283000080A10004800046 -:108690008000000080000000008000100500030042 -:1086A000000000000040002000000000000000006A -:1086B00000000000000000000000004000800040BA -:1086C00000008000804100418000000000000000A8 -:1086D00080000000000000000000200004000200F4 -:1086E0000011C000100300A0000088000401400039 -:1086F000000809400400A00185A00000900010C0FF -:108700009000A1A02141A1C190A14000820200A13E -:10871000049008000000A000820000020000002079 -:10872000010000000000000000C000000000000088 -:1087300000000000080000000000000000000084AD -:1087400000010088400040098801C0080000840042 -:108750000000020000000000000000000100010015 -:108760000100000040100010840410A008080088D8 -:108770000040000190090020A008821000200001A4 -:10878000000010A00288410885C0110284C00020AA -:1087900000880000084000022000000000000040A7 -:1087A000004000A000019002000800020004000048 -:1087B00000000000000000000000000000000100B8 -:1087C0000900A1000000C1820020904001C000000B -:1087D000000000A000C00000000000000000000039 -:1087E0000101010100008080008080009080809065 -:1087F000000800A0000880200241848508030009C9 -:1088000000030011098489040380200891A000005E -:10881000000000000000808000A100200000000097 -:108820000040000300000001008000000000008004 -:108830000000000000000000000000000000000038 -:108840004100400011004000880000800080088046 -:108850000000000000000000000000000000000018 -:1088600000000404020800110004000880008000D9 -:1088700080040009000000002104C020C08002081C -:108880000040008000000000909191050280A0024D -:108890000004800080008000000200020000000050 -:1088A000400000084000000000010000000500003A -:1088B00000000000000000000000000000000000B8 -:1088C00000004021210410000000804180058085C7 -:1088D0008080000000050000000000000000000093 -:1088E0000000020004020200030300009001840063 -:1088F00010000801A0A0C0A0C0002189A00185022D -:108900009001000188200240000010C103080440CB -:108910009100C00120080208A000A0012009409099 -:108920000000842082008400C000000190008800C4 -:108930000000000000000000000000000000000037 -:10894000001000000101000101000000C001200032 -:1089500040C104100000008800100000000000006A -:108960000000000001020100010001000081000080 -:1089700007004200000000000700000A008100001C -:10898000070000000000000000000000000000E000 -:1089900007008482000000000000000000000000CA -:1089A00007000000000000E00700000000000000D9 -:1089B000000007004200000000000000000000006E -:1089C000000000000000000000E00700820000003E -:1089D00000000700484200000000070000000000FF -:1089E000000000000000000000E000000000DBFBD1 -:1089F000DBFB000000BFF03CFFFFFCC0FCC000FF41 -:108A000030FF91F391F3096F096FC3C3C3C3BD0D69 -:108A10000DBD283C41C3004F0042263F263F0F00BA -:108A20000FFF1B1B1B1B018103C3FF0FF000000086 -:108A300000000000001919190000000000000000EB -:108A40000000000000000000000000000000000026 -:108A5000000000000000000000000000FF00FFFF19 -:108A60000000000000000000000000000000000006 -:108A700099F999F90000BFBFF03C0000E4E4E4E498 -:108A80003CFF3CFF000091F3096F096FFFFF0000FE -:108A9000DB0B0BDB69FF69FF00FF00FF66FF66FF72 -:108AA0000F000FFF1B1B1B1B09990FFFFF0FF0008F -:108AB0000000FFFF66FF003F3F3F00000000000096 -:108AC00000000000000000000000000000000000A6 -:108AD0000000000000000000000000000000FF0097 -:108AE0000000000000000000000000000000000086 -:108AF0000000000000000000000000000000000076 +:107E3000EBC341C33CAAF0AA00003F0FFF0355016A +:107E40000000000000000000C3C3C3000F0F00AA21 +:107E500000000000000000003F3C0F00282828FF21 +:107E60000000000000000000000000000000000012 +:107E7000353535353C3C00F000000000AAB4FFB4B5 +:107E80000000FF3C3C3CB2B2CF0C00000000000000 +:107E9000000055555555FA50FAFA00000000000050 +:107EA00000000000000000000000000000000000D2 +:107EB00000005555555500000000000000000F0A55 +:107EC0000F0F0000000000000000C3C3C383050FB4 +:107ED00000AA00000000000000003F3C0F0028281E +:107EE00028FF00000000000000000000000000006B +:107EF0000000303F303F3C3C0FFF0000000000B46A +:107F000055B40000FF00000082BECF0C000000004E +:107F100000000000F505F303FA5050500000000087 +:107F20000000000000000000000000000000000051 +:107F300000000000F505F303000000000000000051 +:107F40000F000F050000000000000000100010806E +:107F50004000000801000000001000801100010036 +:107F6000008020804000000001800100840020008B +:107F70002110C00090000405C00400008800200407 +:107F800004000100000304200100040005888900AA +:107F9000840088094000200082002080100020001A +:107FA0008491208088848400898400002040888017 +:107FB00090044010020320001003840020808400FD +:107FC000048504808500000000000000000080009F +:107FD0008002800000000200000000000002C000DB +:107FE00040000020802080020000200220000900C4 +:107FF00000204000000200000000000000200000FF +:108000009101008408000000800104008000041039 +:10801000400000020002C00000400000000200001A +:108020000890410200100020000008044100009167 +:108030000040000804011000000020841000090224 +:1080400000000002002010000000000000000000FE +:1080500000001000400002000400000000000000CA +:108060000900850091020010040284410808008084 +:108070008400901000000010040000200000001098 +:108080000008000000000009000001200120088015 +:10809000002004080000000800008200000000002A +:1080A0008210400208000308850203040440020510 +:1080B0000200410001844105400008090300020359 +:1080C0000505050590000200821000000000000078 +:1080D0000000000080008000000080000000000020 +:1080E00000008800080002090900000100880488D7 +:1080F000050400840000000000C00008000805100E +:10810000038200C000820004000000000801040592 +:1081100080200501000400080020000000C0208429 +:10812000000400008009A084040904014088400084 +:1081300000088084A0102003A01089080400020217 +:10814000200008100840030200080004002100007D +:10815000200090000040000000000000002000000F +:1081600001002140000000000003004088000000E2 +:10817000002104000000400000080005000000107D +:108180000008000300102088100882100000A003DF +:108190000040A00800000000201000030000004183 +:1081A00000000003004000900008C000010500002E +:1081B00000080000001000412008200220000008F4 +:1081C00000218203C0020000820540C108040000B3 +:1081D00000822000000000000000000000000001FC +:1081E00005880804040000000000040000A000103E +:1081F000008820001120000000100000001003C0C3 +:10820000111000882100000211040000000000008D +:108210000088008900000000000000000002080043 +:1082200000000300000000820021030000000200A3 +:1082300008000000080000850500000080C18500DE +:108240000500200005200008000010080820008814 +:108250000000000040000800000000002000200096 +:108260000800C00020002000A000C004C08400114D +:108270008800000000080000080010800000208036 +:108280000000000820000000200000002002400044 +:108290000000000041000000000900404010000202 +:1082A00082001011C0400000C000048004000400DF +:1082B000A00000000104400004040041020000008E +:1082C0000804A000A0040000820508020840008401 +:1082D00000410000000000000088000000000000D5 +:1082E000000020040000C1C08004000440024003DC +:1082F000219003000004000100C0000880080088ED +:1083000080040000000000A0000080000040800009 +:1083100000000000084008840040000008009100B0 +:1083200000001110119009C0118400081020801065 +:108330008004208408A00810111000851140C1207D +:1083400002002005409008C009A021C0000821209B +:1083500011020000000000030000200000080000DF +:10836000C000200088089008080282000000100069 +:10837000200020028200C0088208000000800082E5 +:1083800000000104004000000000000001000000A7 +:1083900001040880000000800405002001000400A2 +:1083A000080508000008000082400000840000006A +:1083B00040410521000000102041080000400888CD +:1083C000101000201121040000008808020800009D +:1083D00008210000050000000000000080000010DF +:1083E00000000010008200000000000000002008D3 +:1083F000021089A080850000000000100010030218 +:10840000210900C020A1000000C000002140200080 +:10841000030020C1030400000020800000010400CC +:10842000000000000000000000000000001000003C +:1084300000000000020000000084800000C0000076 +:10844000000200000802C000000000400000000020 +:108450000000800200A002A0000000000002000056 +:10846000000000000000000004000805880808085B +:1084700001000008010440040005820020090002F8 +:1084800000110008000089000021000000050040E4 +:108490002000200090414000000000020000000287 +:1084A000A0000000024001A000008400400800413C +:1084B0002004000000000010010088081000900057 +:1084C0000010041108210808824100090411040465 +:1084D0000211000010000000000800000008400821 +:1084E00020080010001000100010800409901120D6 +:1084F00020C00804000202C1210109000000800020 +:10850000000000000300030008000000000000005D +:108510000000800000A00000000000000008000033 +:1085200000000000000000104002000400C0200015 +:108530001104209009040010001004080004000039 +:10854000119040080082030400A0408220404002B5 +:10855000008240840000402011C003400000000061 +:10856000010000000001890040010000000000003F +:108570001100040002A18904208982100001A000DA +:10858000010100000100880040000001000000001F +:108590000000000088000000010000000000100240 +:1085A00000040008100200000101000000010001A9 +:1085B000040000010000C10300004004C0C109C064 +:1085C00000000003109090000101000084010000F1 +:1085D000C1008200000090C1A0A002A08408000099 +:1085E0000000020000000408901080030002000058 +:1085F00010004000000080C0410085C0C004004160 +:108600008011020300052003850390080003000089 +:108610000000000000000000000002000000000058 +:10862000800000000080800000410321000900104C +:10863000002080030002000088C111208008002172 +:1086400021C10309004000040000031005040008D4 +:10865000000020008000000000C08208880980918E +:108660000000000000000000100020001100418206 +:1086700040008900000902808800040480C0C121F4 +:1086800011A009000240044082000900090004030F +:1086900000000000000000000009000080098000C8 +:1086A000000000000002000080000000080002102E +:1086B0000884048021000200100302809000100052 +:1086C00010A040808411851040898080210089009D +:1086D00009A0000000008000800009008409080053 +:1086E0000321000000000000000000020100000063 +:1086F00001A085001000A00082900290210088084F +:1087000083010084000000000000082041000200F6 +:108710000201000000000000000082000400A00030 +:10872000100000002000C084A010C0C000000100A4 +:108730000000010801020100000000010004040023 +:108740008890C01020C02000A18900080410890072 +:10875000A00040880000A0000400C000A0888200A3 +:10876000830405C1000000000000010000000000BB +:108770000101000100400084C00900C11003001184 +:1087800000030290000001008800000000000101C9 +:108790000000000100000000000000000004401084 +:1087A000C00001880000C0020004400802880000E8 +:1087B0000101000100000000000001000000C0A055 +:1087C00000044005838302090103210911080040C8 +:1087D000A040419000C000010000000100014020C5 +:1087E00000219088A102000000000000200000107D +:1087F0000409412100410384000980210988008285 +:10880000001041A1C008000040009100400000405D +:1088100020400500004100000000000000000000B2 +:108820008000000041000000840000008080800083 +:1088300000020410042100040000050040000000B4 +:1088400084200311A02121080010114004A1092057 +:10885000008905090504098900200003000400407F +:1088600080030203800588850000000000000000EE +:10887000218011001100080900A000C000100008AC +:1088800083898082000000084088030441001103AE +:1088900002001100088040040000000000000000F9 +:1088A00000000000000000000000802000C0000068 +:1088B00000000000040021000502210240004100E8 +:1088C0001008A18208001000034110809020910040 +:1088D00003114180050008004003000200800000F1 +:1088E0000000C182A14020800803000000000000B9 +:1088F000000001C000000000010000C000200010C6 +:108900000001C1090403049090010141000000002E +:10891000010101A000400002000000000000000072 +:1089200000000000001000A00000000090010404FE +:1089300000020000000800000100000001C1010069 +:1089400000000001C108C000A1041001884010010E +:108950008488022101020108008201000000002039 +:108960000010000041A010A111024101000000E030 +:10897000000000000000000000004241000000E094 +:1089800007004141000000E007004100000000E056 +:1089900000000000000000E00000000000000000F7 +:1089A00000000000000000E00000000A00000000DD +:1089B0000000070060000000000000000000000050 +:1089C000000000000000000000000700848200009A +:1089D00000E007005000000000E000000000000080 +:1089E0000000000000000000000007000000000080 +:1089F0000000000000000000000000000000000077 +:108A00000000FCFCFF0F00010100FFFF7E7E000064 +:108A10000000000000000000000000000000000056 +:108A2000000000000000000000002F2F2C2C000090 +:108A300099999999FF7C7C7C00000000000000005F +:108A4000000000000000000072727200FFFC000CC9 +:108A500038C11C83B00DD00B000000000F0FC3C342 +:108A60000000000000000000BDBD24246E7E6242B4 +:108A700000000000000000000000000000000000F6 +:108A8000000000000000FF0F00000100FFFFFFF6E4 +:108A900000000000000000000000000000000000D6 +:108AA0000000000000000000000000002F2F2C2C10 +:108AB000000000FFFFFFC340404000000000000036 +:108AC0000000000000000000000072727200F6F664 +:108AD0000606F9F99F9FBDBDDBDB000000009999F8 +:108AE00000FF0000000000000000F960F960666609 +:108AF00066660000000000000000000000000000AA :108B00000000000000000000000000000000000065 :108B10000000000000000000000000000000000055 :108B20000000000000000000000000000000000045 :108B30000000000000000000000000000000000035 :108B40000000000000000000000000000000000025 -:108B5000000000004308400000842186000000005F +:108B50000000000000000000000000000000000015 :108B60000000000000000000000000000000000005 -:108B700000000000FFFFF3FB0C0C0C0CF0FF000FDB -:108B80000F7E0F7E00000F07FFFFF030C3720072F0 -:108B9000F9609900CF89CF46000000140000000062 -:108BA00038380808303F303F6624FFBD0000000021 -:108BB000000000000000F0FFFCFC000000000000CE -:108BC00000000000000000000000C3C3C3C3000099 -:108BD0000000000000000000000000000000000095 -:108BE00000000606F6F6000000000000000000008D -:108BF000000000000000FFFF00990C0C0C0C3C3C36 -:108C00003C3C0F180F180000FFE7FFFFC000C372C5 -:108C10000072F960FF66F391F3620000003C0F0FF1 -:108C2000C3C3FBFBCBCB3F3F30304200DB9900009E -:108C30000000000000000000000000000000000034 +:108B700000000000000000000000000000000000F5 +:108B800000000000000000000000000090908080C5 +:108B9000C3C3666600000000000000000000000083 +:108BA000FF4FFF0200000000000000000000000076 +:108BB000F600E6E600000F6F3C3C242F3C3C000032 +:108BC0000000000000000000000000000000C7C717 +:108BD000F7F7FF00FF00E3E3F0F0000C000C0000EB +:108BE0000000636363630000000006F6F6F63C666F +:108BF000FFF00191FD9D000000000000000000005A +:108C00000000000000000000000000000908909033 +:108C1000008003C366660000000000000000000042 +:108C200000004F00020000000000000000000000F3 +:108C30000000FF00EFEF000000663C3C242F000026 :108C40000000000000000000000000000000000024 -:108C50000000000000000000000000000000000014 -:108C6000000000000000FFFF000000000000000006 -:108C7000000000000000000000000E38001000009E -:108C80000061000E000D00000061003E000D0000BC -:108C900000610006000D000005610A0F050900A033 -:108CA00000003000001000000061000E000D000008 -:108CB0000061000900010000000000000008000041 -:108CC00000000000000000000000000000000000A4 -:108CD000000005610A0F050D00A0100020080040EB -:108CE0000008000000080000000000000000000074 -:108CF0000000006100000001000000000000000012 -:108D00000000000000009E8A1C0804000000F0C063 -:108D1000F1C000000000435FC1F5CACA00F0003C8A -:108D2000FF3C000000000000000000000000F0AA6E -:108D3000F0AA0F0F5555FF0FFF0F000000000000B5 -:108D40000000000000000000000000000000000023 -:108D5000000000000F0FFF000000000000000000F6 -:108D60000000000000000000000000000000000003 -:108D7000000000003FFF30F0AAFAAFFF0000000043 -:108D80000000000000000000DFCB5D490000000093 -:108D900000000000000000005F43F5C1CACA0FFFD9 -:108DA000003CFF3C0000000000000000000000004C -:108DB000F0AAF0AA0F0F5555F000F00000000000D7 -:108DC00000000000000000000000000000000000A3 -:108DD0000000000000000F0FFF0000000000000076 -:108DE0000000000000000000000000000000000083 -:108DF0000000000000003F0F30000050055500004B -:108E0000000000000000000000000000000004005E -:108E1000040000FF30AAFCFC0C0C00000000C0A005 -:108E2000C0AFF5F514BE0000000000000000000017 -:108E30000000000000003CFF3C00FFFF00FF0000BE -:108E40000000000000000000000000000000000022 -:108E50000000000000000000DFD3DCD000000000B4 -:108E60000000000000000000000000000000000002 -:108E700000000000000000000F0F0F0FAF3CAF3CE0 -:108E800000000000000000000000000000000000E2 -:108E900000000000000030AAFCFC0C0C00000000E8 -:108EA000CFA0CFAFA0A014BE0000000000000000C3 -:108EB00000000000000000003CFF3C00000000FF3C -:108EC00000000000000000000000000000000000A2 -:108ED000000000000000000000001F131C10000034 -:108EE0000000000000000000000000000000000082 -:108EF00000000000000000000000FFAA5500A03C98 -:108F0000A03C001020090400208288100410048472 -:108F100020A00505880520000090100800830204A9 -:108F20002008004120000580048400050010400254 -:108F30002000200500004102010400000000402143 -:108F4000200000034080208088840480000000000E -:108F5000000000200000000000000002000400A04B -:108F6000C00000840000000000002000000000009D -:108F70000004000484800004000400048800888049 -:108F80002100008400000000200200414102402036 -:108F90000020020320000002000000042000001056 -:108FA00000C0400000000000A020800400900000ED -:108FB0004101000000A00000A041200000000000CE -:108FC0000000210000000010001000100010000040 -:108FD000000000000001000000002000000100016E -:108FE000000300000020000000000000000000005E -:108FF00000000040000040040091400100410000DA -:109000000004400000040008020000098802000477 -:109010000000A000000984042041050082410000F6 -:109020000841888390100440000904C10100000039 -:1090300000000000004000000000000020100000C0 -:10904000000000000000000000800000044000203C -:10905000000000800000004100000000000000004F -:109060000084004000040004000000000000000034 -:10907000010001002000200000400000000000006E -:109080002000000000000000000000104010040953 -:1090900000C1000000C00008000900880810040892 -:1090A00000108010400200058010000009040484B4 -:1090B00000080084000800A00408000040C08009E7 -:1090C0000010000000000004000000200000838465 -:1090D00011010008002000884184000800080000F9 -:1090E0000004002100000001000100100500001034 -:1090F00000002004200080008000000800400000E4 -:1091000000008988000000000000050000400040C9 -:109110000010042104000405082140402002002121 -:10912000004000400000821084100409C0040205C1 -:1091300004030010A04100050003002000110040BE -:1091400000030008002100000010000000080000DB -:1091500000080000202000210000840010002005ED -:1091600000402041402100022080002100008800B2 -:109170000000000020212000208004A0000000004A -:10918000000000000021000000040200020000A016 -:109190000908000882C0C108030083A00302800000 -:1091A0000000000000A00040218820A180820589E5 -:1091B00000088090038500080300000021002100C2 -:1091C00021A00300000000000300000100000008CF -:1091D000000000000000000100000000000000008E -:1091E0000000001000000008000000200000000047 -:1091F00000000000000080A08000800480050000C6 -:109200000000001000000000000000010000084104 -:109210001004854100000105C10008410504114109 -:10922000094011400100100500058241049010041E -:10923000820010840804880900800804900000005F -:109240000840C082404100110000081104020000E3 -:109250000020002000090800000000020002840035 -:1092600008000000000000009040900488110902EE -:10927000820000020002000082098200000000005B -:109280000002000000000002000000008800000052 -:1092900000040400409040000440204000082010DA -:1092A000208408844004200000C000402000000307 -:1092B000000809002105000000000402210000C090 -:1092C000000000880005000000A000000000000071 -:1092D0000000210109010000000000000000210041 -:1092E0000800000000000000030000000001000072 -:1092F00020900000000000000000000000000000BE -:10930000000000000000000000000000000000005D -:10931000000020090004C04100040940002010A002 -:10932000011000021100000000110000824108102D -:109330000905000020108202400500020000000321 -:109340008208820008080840A00000000000000415 -:109350000003000000000000002000000000880062 -:1093600000800000000000000000000000008800F5 -:1093700000800000000000000980000000200000C4 -:1093800000002000000000000000000000000002BB -:1093900000000000008203004184000004880001F6 -:1093A00000214003081040A010000020088200A007 -:1093B00003A0881000A0808508000284000000003F -:1093C0000300009004008000030000000000000083 -:1093D0000000000000002100000000A103000000C8 -:1093E000000000200000000000000000000000005D -:1093F00000004004008400081182081000000000F2 -:10940000000000A08000000000000000000000003C -:1094100000000000009000020005000010219008EC -:10942000080802C0102100050089210821004040E1 -:109430001002404108410011209002900490080061 -:1094400008050410A0020011820800402000081145 -:109450009000200001000000000000000820000033 -:109460000040000082408200000000000000000078 -:10947000000000020000002100000800900200022D -:10948000000000008200000000000000000040001A -:1094900000210000000000001100000003824000D5 -:1094A000002000000204000000040004A00020408E -:1094B000004000C1000080041100000400201104DD -:1094C00020000000000000A0000000081102004081 -:1094D0000010000000004000000000000002000139 -:1094E0000000000000000800000000000000000074 -:1094F0000000000009010800000008000040000012 -:10950000000000000000000000000000000000005B -:1095100000000300000000000000C0890821A0C076 -:109520000410C000000000009000A0A001829088FC -:109530000802A0A0402100A0104002884102088833 -:1095400004C00000100000000000408400A00110D2 -:109550008890820000000200020000000800C04065 -:10956000008400A0000200020000002001000000B2 -:1095700000000000A103A000011000A100000000F5 -:1095800000000000000100000000000000000000DA -:1095900000000000000000000100000011A0C183D5 -:1095A00000020090910000000400880000804080CC -:1095B0008500808000840020008480048003C11026 -:1095C00084028020200000000000000080000000D5 -:1095D00040000000000020008000800000008000AB -:1095E00000000080000000000000000000000800F3 -:1095F000210000000000400200214009000200009C -:109600000000000000000020030008200000000906 -:10961000002005030011400200214010000003005B -:10962000212103C00903021021008820030005083E -:109630000508020810A080000002208020054000DC -:109640000805911103804000210303000803A000D6 -:1096500000008010820003008800890008000000DC -:10966000000000C180048000000000000000000035 -:109670001000080005000500000800000008800038 -:109680000000000000000000200000000500400075 -:1096900009000000000011000000080000000500A3 -:1096A000008801A000A0008301010088A001A0881B -:1096B00000200101019001A008008801A082820021 -:1096C00000888900840589900000000000100101D5 -:1096D00009004000A000050040000300A000820037 -:1096E00000000000C004A0058284000002000020E9 -:1096F0002000000001000000000000010200002026 -:109700008200000000000000000001A00000000036 -:109710000010000000000000000000000100000038 -:1097200000000409000011012001001020110209AD -:109730000011100320828408830400080140018581 -:1097400000A1000900A00410840500000000000032 -:109750000100001000A000890508002100880021F8 -:1097600000C000001020000004A00402000200025B -:1097700000900220000100001001000000022110F2 -:10978000C100404000000000000000000001000097 -:1097900001000000000000000000000000000000C8 -:1097A0000001000009211100842100202080008890 -:1097B00080210520809080050091208300004000DA -:1097C00040A111A000080891402080110000000075 -:1097D0000000080000A000800021040000400005F7 -:1097E00000210005000000000000800000000000D3 -:1097F000000000008000002000410021000900005E -:10980000C10008000300000000000000000000206C -:1098100000051000000000090021001100000002F6 -:1098200000100021000010009008052088030000AF -:109830000009000000104108081108001103210070 -:109840009080A080A000A18503C185118300100035 -:1098500020108300C0040000000000800000000011 -:1098600000000000000800000000800280000000EE -:109870000000000200000000008000000000001056 -:109880002108404105000000000000000000000029 -:1098900000000040200040000902200011000010DC -:1098A000024010004100000004024000C00084019A -:1098B000001000000020000020904101C1000201C2 -:1098C000090088081008110091C0001004910400DC -:1098D00021820201850011000000002000840000A8 -:1098E000000200A0008800010000C000A00308845E -:1098F0000000020002032090000000400000000071 -:1099000000000300111041400000000000000000B2 -:109910000000000000000000000000010000000046 -:109920000001000000000000000000000000000036 -:109930000000000000E007008400000000E00000DC -:1099400000000000000000000000818100E007002E -:1099500041000000000000000000000000E00000E6 +:108C500004043434FF000F0FC3C300000000000001 +:108C6000000000000FFF0F0F0000000006F60606D0 +:108C70003C6600F091919D9D00610007000D000091 +:108C800000610006000D00000561000F009D00005E +:108C9000A060000F000D000000610007000D000043 +:108CA0000061000700080000000000000000000054 +:108CB00000610007000D0000000005000A08050023 +:108CC00000A500610006000D000000610006000D17 +:108CD0000000A5614006050D00A00061200C000900 +:108CE0000000006100030091000100610006000D1A +:108CF000000500615006000D0000000000000000AB +:108D00000000FAF30000000F002F00000000A2F79F +:108D1000A0F500000000400000000A0AC0CF0000DB +:108D20000000FF3CC3000000000000000000000045 +:108D30000000000000000000000000000000000033 +:108D4000000000000F0F0F0FFFFF00FF00FAFFFAF7 +:108D5000000000003C003C00FF00DF0078287D2878 +:108D6000C3C3C3C37D41FCFCFFC3FFF00000000090 +:108D7000AAAAAAAA30300D000000F0FF00000000EF +:108D800000000000FAFF0000000F002C00000000AF +:108D9000A2F7AAFF0000AAAA40004000FAFAC0CF3A +:108DA0000000000017171717C2C2010100000000E1 +:108DB00000000000000000000000000000000000B3 +:108DC0000000000000003C0F3C0F3C3CF0F000EBCA +:108DD000FFEB0000000028000800FF00FF007D2DD1 +:108DE0007D28C3C3CFC07D41C0C000C300F00000D8 +:108DF0000000F0C3F0AA3030FF000000F7F70000D9 +:108E0000000000000000F3FA0000C028000000008D +:108E10000000D5D5D0D0F3F30000FFFF0000C30F52 +:108E200055FFFA3C783CEFAEC7860A0AFAFA000012 +:108E30000000000000000000000000000000000032 +:108E40000000000000000000BC1CBC1CF5F5F5A0F3 +:108E5000AA000500F0D0F0100082000200080020F7 +:108E60005FFC5F0C414D7D7D35353535F0AAF0FF57 +:108E70000000000000000000AAA0A8A85555450564 +:108E80000000000000000000F3FAF3FFC028C30058 +:108E900000000000DFDFDADA0C0CFFFF3C3C0505C8 +:108EA000C30F5500503C783C6D2C45040CFC0CFC69 +:108EB00000000000000000000000000000000000B2 +:108EC00000000000000000000000B414BE1EA0A0BE +:108ED000F5A000000500F0D0F0D000AA00020028A4 +:108EE000002850FC500C55555555303F303FF0AAE6 +:108EF000F0000000000000000000AAA0A8A855553E +:108F0000000000000000000001000004000000005C +:108F10000000000000000000000800050100201112 +:108F2000210004008800850584040000000004007E +:108F30000480011088040104000488000000000976 +:108F400000020003200000000000400084004011E7 +:108F50000000400040004010881110080010A08060 +:108F6000C1208820880088000000030002008900DA +:108F70000000400011204020C02011800500412049 +:108F800041000180000000000000200000000000FF +:108F900000000000000000000000000000020400CB +:108FA0008002840080000000040000000000000037 +:108FB000000000042000000120000000009040405C +:108FC0000000000100000000000000008000000020 +:108FD0008000200280000000A00000028400000445 +:108FE000002010914001000200020040A000A000FB +:108FF00008000900000008018901104140104002EA +:109000000403400040200000010020000000080090 +:10901000010000000000000000009000000020009F +:1090200020040000100800040000A000020000005E +:1090300000000020400000000000000000000009C7 +:1090400000400040000000000000000000000000A0 +:109050000400900300000210000001800010A088AE +:1090600082000400020301000004000000410189A5 +:10907000000504008240020002028404820004050C +:109080009010200304002120000020008200000036 +:109090000000200008001100000800000084030008 +:1090A000850091010000830110010000000000080C +:1090B000000800840000800000840000000003100D +:1090C0000088038803000000000000100000000476 +:1090D00000C0008800080000000104002004000017 +:1090E000400400008000110004102188000000C02E +:1090F000080400000588001004888311080005405A +:109100008982058580080004A00800000000000096 +:10911000000800002180C00000020000000540108F +:109120004041010300050485008204080010000985 +:10913000010000400040C041400040030008001012 +:1091400000880002A04100000000000000080000AC +:1091500000210208000900080000000900040003C3 +:1091600000040005010000408400004000000000F1 +:1091700000000041018400408204000000410221FF +:109180000000008800900205820804020000000030 +:10919000000000000000A0040000001000A0090072 +:1091A00080C08000101000080002000305A00089A4 +:1091B000000202000000000803008000000000849C +:1091C0000000000411000000000000080000004042 +:1091D000001000000000400000A000000300020595 +:1091E00041104109030008000000038202880808BA +:1091F0000084001041C008020020410800A0412066 +:1092000021000008002004401140001000A00004CC +:1092100020092000002140000011200440110040DE +:1092200020410011004001000011100900400080A1 +:109230000900A0100000C00200000000010010049E +:10924000000400040404000000410800084000007D +:10925000000008110805084100034041C020080033 +:10926000A0051002404100050002A00204204000B9 +:10927000100010000009880500020802A0028241C7 +:1092800082401041C0410409004020040204104003 +:1092900000018000800000008000000000C080000D +:1092A000000011A0000000000200000404A0100053 +:1092B0002120A00000400000000000000000040089 +:1092C0000041004100011001040000000000000006 +:1092D00000000000080000040084008400000082F8 +:1092E000040011000400848809100000000400013B +:1092F0008000412009100000008200010941008522 +:1093000000000888000011820000000888C0008466 +:109310000082000000000000048000102000000017 +:109320000000C00520008441000000400000A18032 +:10933000008000020400202004C0000000000000A3 +:1093400000000000000000000000004100000800D4 +:10935000004000000000C000A008820000040000DF +:109360008200020000410041002000410805820205 +:1093700000008800C0040021824010400000C0218D +:10938000A00308000003080808080805000582106B +:10939000000000100000000000008020110880087C +:1093A0000000000000A0008200C005200309210089 +:1093B00008400304000080C08009910500000000FF +:1093C00000000000000000100000000800900004F1 +:1093D00000000000000000A000400040000020004D +:1093E00000100800800800080000000000000008CD +:1093F000200810A0000800001190032008080808A9 +:109400000410000005000008200000000000000813 +:10941000000000A003020000000000000000002186 +:109420000021012100000000040502098805030451 +:109430000004882100840141402000200000002118 +:10944000000000050240000004000021002104008B +:1094500000218800000000008200000300000000DE +:109460001000000004400010880404000080000484 +:10947000004100100008004184100008200800107E +:109480000010400800002008850508000521401054 +:109490000008C021081108110000000000000000B1 +:1094A0000000200040000004000080000004009044 +:1094B000080400000000000804040001000100840A +:1094C000000000000000000000000000000021007B +:1094D000000000000000000000000000000000008C +:1094E00000000000000008080000000100900004D7 +:1094F00009210082020000000090008404C00000E6 +:10950000000200020004092000C004000220040040 +:10951000020400000000000020000001000008011B +:1095200000010000010011000001100441C0824050 +:1095300000C003A100A18310A0A088C0908400A057 +:10954000820400000100880000000000000000000C +:10955000000000000000C00000000000000001004A +:1095600088000000C0880002040804100001010007 +:1095700040010001C0010190081184211084010400 +:10958000C08808080405A0851105C00801050091E0 +:10959000889040C040A10405114183830008001059 +:1095A0008240004000040809840400408300080051 +:1095B00080800000A18200404020000500808000E3 +:1095C0000580800000000300000000000000000093 +:1095D0004000000000000900000000000000000042 +:1095E0000300000000000080048000000900110555 +:1095F000200985080002004121040082002080002B +:109600002000800000800008A00240830003400288 +:1096100020C00011000588A010A1048211C0020022 +:1096200009001000C01002800400100004418000F6 +:109630000003908088009100830091044189800993 +:10964000800080090000200020002000100000049D +:109650000000000400000000000000000000000006 +:1096600011001000020009009080C1000491110453 +:109670000282100009401121100004110480419061 +:1096800000000000800000001000400489802102DA +:10969000838002418804C110A000A11188058510B3 +:1096A000C088A000A000910000C0000000000001E0 +:1096B000A000C001A008098489002100A0890189B7 +:1096C000100040889000A004010001000100000883 +:1096D0000001000000000000000000000000000089 +:1096E000000000000100000000400204828810A079 +:1096F000904000090000000000011104890111845C +:10970000409082002084A0000000A0848500048492 +:109710000584891088904183912102002100A09046 +:10972000820000000000000100010001010083012F +:10973000000088A0000840A0A00402100002A08839 +:1097400010C0022002042040A0A000000000000180 +:1097500000000000100000000000000000010000F8 +:1097600000000000000000010001000008080021C6 +:1097700000C18989000140010001010010040009B5 +:10978000C1090008C0C00003002083021040018509 +:109790000509A0A08801004111C01184C085018382 +:1097A00084A0100800090011414000400021040974 +:1097B00083210009000000900000801080400441D7 +:1097C00083080480A08000008080820003000010D5 +:1097D00000210009000080000000050000020003D5 +:1097E00000101002000000050040002100020005EA +:1097F0000088002109400020100404201002800588 +:10980000418820A10084800400C0001011098085D7 +:109810000810A105898408092103A14110058010C1 +:109820002008400010820040080040004040408076 +:109830004011400002400089808400000010C120D7 +:1098400011C00000401100400002000000000000B4 +:1098500000050000001000000000000000000000F3 +:1098600000000000000000000000000000000008F0 +:109870002090048821000310418008202100030467 +:109880000980400804001040000000000080000033 +:10989000908011080800880321838904418005080D +:1098A000A04088C109800802000101020190010165 +:1098B0000140010101000001C040082010840400A3 +:1098C00009890220002089010000000500820000B3 +:1098D0000082000000000001000000000000000005 +:1098E00000000000000000000000008800000000F0 +:1098F000000109C00883C188890001A0010101009D +:10990000010102A0210209889001000000880010D6 +:1099100000001008A09083C0A10111C0A011100880 +:10992000C0010491210204844101000000E007000D +:109930000000000000E000006012000000000700CE +:109940000000000000E007000000000000E0070049 +:109950000000000000E007000000000000E0000040 :1099600000000000000000000000000000000000F7 -:1099700007000000000000000700000000000000D9 -:1099800000000000000000E00700500000000000A0 -:1099900000000000000000E007000000000000E000 -:1099A00000000000000000E000000000AAAAC3C3FD -:1099B000D7D7D7D700000000AFAF0CFC3F153F2A28 -:1099C00055FF5500000000005555141055555F5FB8 -:1099D000CFDFFFFFD7CF0000000000000000000035 -:1099E0000F7DFF2800000000696909600000F0F0A9 -:1099F000AAAABE3C143CAAF0F0F00003FCFF000051 -:109A0000000000000000AAF0F0F00202FEFE0000DC -:109A10000000000000000000000000000000000046 -:109A20000000000000000000000000000000F00046 -:109A300000008282828200000000A0A00CFCCF45C2 -:109A4000CF8AC30FC30F0FFF0F1F000000007D7DE3 -:109A50007F7F0F0FFFFFD7CFD7CF000000000000A0 -:109A600000000F28FF2800000000FFFF0FF000009B -:109A700000FF00FFBE3C143CAAF0F0F00003FCFF26 -:109A80000000000000000000AAF0F0F00202FEFE5C -:109A900000000000000000000000000000000000C6 -:109AA00000000000000000000000000000000000B6 -:109AB000AAFFAAFF0000000000000000FFFFFF0057 -:109AC000E7000000000000003C003CF000FF00BE8A -:109AD00082C282C35F005500000000000000000049 -:109AE0000353A3F3CF3CAAAA0000000004000C001B -:109AF00000005DFD5DFD5F5F50503C3C3C55FFFF4D -:109B0000A0A0000000000000000055553535FFFF03 -:109B10005F5F000000000000000000000000000087 -:109B20000000000000000000000000000000000035 -:109B30000000FFF300F30000000000000000000040 -:109B4000FF0000000000000000003C003CF000FFAF -:109B500000FE82C282C3FFFFFFFF00000000000082 -:109B600000000353A3F3AAAAAAAA00000000080059 -:109B70000C00000008A808A800FF00FF3C3C3C5572 -:109B80005F5F000000000000000000005555353503 -:109B9000A0A0000000000000000000000000000085 -:109BA00000000000000000000000000000000000B5 -:109BB0000000000000613006001D000005610A0F72 -:109BC000050D00A000610007000D00000061000607 -:109BD000000D00010061003DC001000000610006B1 -:109BE000000D000000610007000100000061000698 -:109BF000000D0000000000000A0805000000000041 -:109C000000080000000000610006000D0000006177 -:109C1000000F000D000000000000000000000061C7 -:109C20000009000100A000610001000100000061C6 -:109C3000000100010000010100000000FFFF000022 -:109C4000000000FFF0F02481A5A5E7E700E7F0F0B1 -:109C5000F0FF00FF0000BABAFFBA55FFFDFFC0C019 -:109C6000C0C000000000000000003C003C000000FC -:109C70000000000028A2000000000000000000001A -:109C8000000000000000000000000000000000C014 -:109C90000FFF0F00000000000000000000000000A7 -:109CA00078787878CFCFCFCFFF000F0030F030F04A -:109CB0000F0F0F0000FC00FC010001004155415551 -:109CC0000000000000FFF0F03CC3FFFFE7E7E70003 -:109CD000C0C0C0C300FF0000BABAFFBA55FFF5FF0D -:109CE000C0C3C3C300000000000000003C003C00F3 -:109CF00000000000FFFF7DF70000000000000000F2 -:109D00000000000000000000000000000000000053 -:109D100000C30FFF0F000000000000000000000063 -:109D20000000787878780C0C0C0CFF000F0030F0F5 -:109D300030F00F0F0F0000FC00FC00000E000000D0 -:109D4000FFF80000000014BE14BE00000000EBEBA2 -:109D50000BE0202C232F00FF0000C3C08280C3C370 -:109D6000F3FF0000000050FA7D7D00000000FFFFBF -:109D70003C3C00000000414105F5000000000000EF -:109D800000000000000000000000000000000000D3 -:109D900060006060FD3DCD0D00000000000000008F -:109DA000000000000F0FFFFF3CFF00C3FF003F0358 -:109DB0002828AAAAFF000F0000000F0F00000E0EB7 -:109DC0000000F8F8000000005050FAFA000000000F -:109DD000D7D707D0E0ECE3EF00FF0000FFF0AAA028 -:109DE000C3C3C3FF0000000050FA28280000000091 -:109DF000FFFF3C3C00000000414100F0000000007B -:109E00000000000000000000000000000000000052 -:109E1000000069006969F131C10100000000000023 -:109E20000000000000000F0F00003CFF00C3FF0017 -:109E30003F032828AAAAFF000F0000000F0F4000D0 -:109E40008410200520031003040088104010200017 -:109E500040002004000040002000200020030000FB -:109E6000200820102002000004004000201088007C -:109E7000400000000000200040100000200500000D -:109E80000000000020000004840088108800000406 -:109E90000000000000000000200000000000880416 -:109EA0000000000002000000000020002000C000B0 -:109EB0000000000000040002200000080000000272 -:109EC000209009402140004000000990200000043B -:109ED000000000000002040000000000000000007C -:109EE0000000008410000000000041000500020096 -:109EF000000000000000000000820000410000C0DF -:109F0000000010000000000200000000000200003D -:109F100000000000000200000082000200040000B7 -:109F20002000000000C000000082000000C000000F -:109F300000040002400000000008000000000000D3 -:109F4000000000040400001000000010000982005E -:109F50000000901000008240000408000040000053 -:109F6000000000030040000000000041004000002D -:109F7000000002000021000000000041000000007D -:109F8000000000000000000000000000004084000D -:109F900000000000000000000000000000000004BD -:109FA0000000000000000000000000000000002091 -:109FB00000000000000000000000000000000000A1 -:109FC000000000000084008204080910000800401E -:109FD00000880084048804840010401000880082F7 -:109FE00004084108000040884182001040402008D9 -:109FF000208800840084000000044108000800005C -:10A000004040408200000008000840000084000832 -:10A01000000840000000000004100900008800084B -:10A020000000000000000004001000000084000296 -:10A0300020042000001000900082000000000002B8 -:10A0400000000000000000411041000388410003AF -:10A0500088088808A0008808900000020000900886 -:10A06000000300009003000000022005A000001083 -:10A070000021C000020000008408881100000021B7 -:10A080000003A000840500000021200588000000D6 -:10A0900010050004400000084021000000000040BE -:10A0A000000000008800900020218800000040404F -:10A0B0000000000000009020400800000000004068 -:10A0C00000000000000000001100080800C0058426 -:10A0D00008A008A000020800008403000500020890 -:10A0E0000082049003000300030003A040A00000CE -:10A0F00040A0000021900000080441A003000000DF -:10A10000030000A00000000000000000000041006B -:10A1100008000010000000000020000000004100C6 -:10A1200000A000820000008200A0000000080800DB -:10A13000030000000800080000000000000000828A -:10A1400000000000000004000000000590058204EB -:10A15000C0098200900940400400400008008200CD -:10A1600000040040001120400004084000210204C7 -:10A170000009080000418200000000000009000002 -:10A1800000110000080408000000000000000000AA -:10A19000C00000000000084000200803000000008C -:10A1A00000004000000082000000000000000000ED -:10A1B000000000000000000000000040000000005F -:10A1C000000000000000000000000000000005404A -:10A1D0000000050802C0409000004082008402C0D8 -:10A1E000002000080002400040C000082190041038 -:10A1F000008809200082100204840020009040841E -:10A2000010840000000400202100008200000000F3 -:10A210000800009010000000100020000800082036 -:10A22000410000001000414008000500000000400F -:10A23000000010900000000000000000000000007E -:10A240000000000000000000000400000000840383 -:10A250000000000090000041A010C00900080000AC -:10A260000000000800410800000000410000000854 -:10A2700000000004C04100000000A0000000000039 -:10A2800000000000000300000000001008000000B3 -:10A2900000020000000500000000000008000800A7 -:10A2A0000040080000400000000000000000000026 -:10A2B000000000400000004000000000000000001E -:10A2C000000000000000000000000040000000004E -:10A2D000000008820000000000000084009041841B -:10A2E0004100411010A0038400A000100000218450 -:10A2F0000000000410A000400208080000002084B4 -:10A3000000C0400008001090009000A0001000A0C5 -:10A310000000000000000000000010000300030027 -:10A32000000000020008000000000900000000001A -:10A330000084400000040000000000000300000052 -:10A340000000000000000000000000000008000005 -:10A3500008001000A00000008800000400090000B0 -:10A360000011000000020000400282030000000013 -:10A3700002020000000082110008000000000040FE -:10A38000000000000800841100080000001100090E -:10A39000000000000000000084000008000000032E -:10A3A0000040000000080000000000000000000065 -:10A3B000000000000000000000000002000000009B -:10A3C000000000000000000000000000000000008D -:10A3D0000000000020001184418805822100000057 -:10A3E000000040000904119011900282090403A0AA -:10A3F00009840020209000004090004009200800BF -:10A400000304114000001000000220000000214061 -:10A41000030000A000000000000000040000000095 -:10A4200011002120020400000000000200001100C1 -:10A4300020880000400000000000004011000800DB -:10A44000000000000000000000000000000000000C -:10A4500000000000110400000000000000000000E7 +:10997000000000000000000000008100000000E086 +:10998000000000000000000007000000000000E0F0 +:109990000000502100000000000000000000000056 +:1099A00007005000000000E0070060000000000019 +:1099B0000000000000000000000000008282003C67 +:1099C00080000F0FAAAAAA820F00BABA00000000F6 +:1099D000C0C0F5050000000000000000000000000D +:1099E0000000000000000000000000000000000077 +:1099F000000000000000EAEAFBEF000000000000A9 +:109A0000000000000000D7D0EBE0FF1CFF3C00008E +:109A1000000000002820404050F07555FFFFC2FFB5 +:109A2000000000FFFF000F0D0F0F202F202C000063 +:109A30000000000000000000000000000000808026 +:109A4000003C80000F0FAAAAAA82000000000000BC +:109A50000000CFCFF505000000000000000000006E +:109A600000000000000000000000000000000000F6 +:109A70000000000000000000EAEAFBEF0F0DFF0D00 +:109A80000000000000000000D707EB0BFF14FF3CB4 +:109A90000000000000002808E040F0F04555CFFF2E +:109AA00040FF0000F0F0F0F00F0C0F0F202F202FE0 +:109AB00000000000FFFF0F0F00000000000000008A +:109AC000000000003C3C00000000DFDF0F8F0F8F24 +:109AD000033F414100AAD2D2000000000000000074 +:109AE0000000000000000000000000000000000076 +:109AF00000000000000000000000FFFFFFF7000072 +:109B00007FFF0000000000000000FFFCFFFCFFFFE3 +:109B1000C300FFFF000004000400A8A000000035FF +:109B2000003507030303004101413FBF0383AFAF8B +:109B3000FF0000000000F4F004000000000000003E +:109B400000001000000000000A000000DF140F0FEA +:109B50000F0F033F7D7D55FFD2D2000000000000B3 +:109B600000000000000000000000000000000000F5 +:109B7000000000000000000000000000FFFFFFFFE9 +:109B80000000FFFF0000000000000000FF3CFF3C61 +:109B9000FFFFCB00FFFF080000000000ABAF030F8A +:109BA00000F5000507070303005505557FFF43C374 +:109BB000CFCFFF000061000100010000006100053F +:109BC000000D00000061000E000D00008041000942 +:109BD000009D000005615A0F050D00A00061000EF8 +:109BE000000900A000610007000D000000610006F0 +:109BF000000D0000000000610006000D0000006183 +:109C00003006001D000000610007000D000000612B +:109C1000000E000D00000061400600090000006118 +:109C20000006001D000005610A0E051D00A0006170 +:109C3000000D001900007D4D7D4DAAAAC3F070FFF4 +:109C4000F0FFF7F5FFFF00000000F0F0FAFAC3C3E1 +:109C5000C300382838280000000000000000000081 +:109C6000000000A000000000000000000000000054 +:109C7000000000000008000000000000417D4D7D54 +:109C8000AAAAAAAA82C3C2C30C0C0C08020303032B +:109C9000CACF0000BEBE141400000000A0B0000037 +:109CA00028003C3CC3C355553EFE0000FCFF505FFE +:109CB000FFCFC3CF3A3A3A3A71417141AAAAC3F0F1 +:109CC00050FFF0FFC7C5CF8F000000000000AAAA18 +:109CD0000000C30038283828000000000000000001 +:109CE0000000000000000000000000000000000074 +:109CF00000000000000000000000000000005555BA +:109D000055552A0A0A0AC2C3C2C3FFFFFFFF020356 +:109D10000003C0C50000BEB414B400000000AAAA2D +:109D2000000028083C3CC3C30F00FCFC0000FCFF03 +:109D30005F5F3C0C000C0000FFFFCFFFC3F3FA5045 +:109D40007878000000000000000000000000AAAACF +:109D5000AAFF000000003C3C43000000000000009F +:109D6000000000000000AAFF20AA00000000000080 +:109D700000000000000000000000000000000000E3 +:109D8000AAA2AAAE0000000000000000FFAA5D0821 +:109D9000000000002D2DFF555D55FDF50000000071 +:109DA0000000000000C040C0FFFFB080F3F3D7FF09 +:109DB0001717C30053530000145055500C3C00308B +:109DC000FA50787800008000000080000000000059 +:109DD000000000FF20000000000043000000000021 +:109DE0000000000000000000AAFF00AA0000000020 +:109DF0000000000000000000000000000000000063 +:109E00000000AA20AAEF00000000AA3CF03C5D0878 +:109E10005D08FFFFBEBF2D2DAA005855F8F50000C4 +:109E200000000000000080C0C0C000000000F3F38C +:109E3000557D1717FF3CC35500001450005000001B +:109E400000000000000000000000020020000000F0 +:109E500000000000000010080000000010000000DA +:109E600000008200840200100000000000101000BA +:109E700000000000000020000000880084000000B6 +:109E8000000900000041200400008400C005880093 +:109E9000C0000008A000040020031000840010008F +:109EA000000004020002820482002000000010036F +:109EB0002004C004C00020052000C0088400200049 +:109EC0000000000000000000000010000000000082 +:109ED00000000000000400000084000000000000FA +:109EE0000000000000000000000000001000000062 +:109EF000000000040000000000040000000040001A +:109F000000000500100200400000100000400000AA +:109F10000000000004000000000000020990400062 +:109F2000000000000000000000000000040000002D +:109F300000000000000000000004100000004100CC +:109F400041040000000000000000000000000000CC +:109F500000000000100002001000000000100000CF +:109F600000100000000000000000000000000005DC +:109F70000000000000400404000000000000000396 +:109F800000000000000000000000000000000000D1 +:109F90000008000900100003880400000004000904 +:109FA000000002000010000402090000024100400D +:109FB00000110041001004099005000090050009FF +:109FC0000003A010000000000000000000000000DE +:109FD00000000000000000000800000000880000F1 +:109FE000000000000008000000C0000000000000A9 +:109FF000000004000000001000000010001000002D +:10A000000000000000000008008400884182401029 +:10A010000000001000000008001000000500020011 +:10A0200000880000000000840384000000C01100CC +:10A0300000000084000400400210008240880800F4 +:10A04000208800840088000000000000000000005C +:10A0500000000000000000000008000084008800EC +:10A06000000000000000A000001000000000000838 +:10A0700010000800A000000000090000000000001F +:10A0800000000010000000000000000000000000C0 +:10A09000000088000000000000000020000900000F +:10A0A0000041200220080000C008840000090011BF +:10A0B0002008002140414010000300210000001151 +:10A0C000000090109010002100000000000000002F +:10A0D000008400C041840400000000100900410811 +:10A0E0001188001000820010008400080000008227 +:10A0F000004000000008000000000008008400008C +:10A100000000000000000000000000C0000000A0EF +:10A110000002000000000000000800A000021188FA +:10A1200009080282110841000040008841820008AD +:10A1300040A010002100088408A011840420000021 +:10A14000000000820010410803820000000000416E +:10A150000000000900000000001000000021004184 +:10A1600000000000000200000000000000000008E5 +:10A170000000000200410800000000080004000088 +:10A180000040004000000004084000000000000003 +:10A19000040000100021C0020041004008080041F6 +:10A1A0000021000000411040004000020011004169 +:10A1B00000110808000500090011A0110409004160 +:10A1C0000005004040200020A0090004000000001D +:10A1D000000000000090114000000000099000C045 +:10A1E000000009000000009000001100409000A055 +:10A1F0000002001000C00000000000000040000449 +:10A200000000040000000000000000C0000000008A +:10A21000000000200482050000880000098204007C +:10A2200000040088008440900090001040C0008826 +:10A23000049010820082009040000000000009A0FD +:10A2400011020988000800C002C02000042000009C +:10A2500000000000040004000000000000000000F6 +:10A2600000000000000000000000000000000000EE +:10A2700000100000000000000000002000000400AA +:10A28000000000000000000000000000C00000000E +:10A29000000000080800000000000000004000006E +:10A2A00000000000000804000000840040000000DE +:10A2B000000002000000001000100208000300006F +:10A2C00000040005000082000000021000000008E9 +:10A2D000000800A02008000000000000001000009E +:10A2E000040000100010000800A0000400C0008856 +:10A2F00000000084008400080000000000000084CA +:10A30000001000000000210002000000000000001A +:10A310000000020400040000000800880088090210 +:10A32000001000000000031000A011A000A0081001 +:10A3300008080000090800020908411040880002CE +:10A340000008410820082108001005040404000446 +:10A3500004000000000000000000000000000000F9 +:10A360000000001000000010000088000000000045 +:10A370000000000000000000900000080002002023 +:10A3800008000000000000000002000000000003C0 +:10A3900000000000000000000000000000000000BD +:10A3A00000000000000000000000000000000000AD +:10A3B00000000021000002000000840000000003F3 +:10A3C00088000000001000000810000000080021B4 +:10A3D00008200000000000A0000000000990118883 +:10A3E00000000000000002C00000004000002090BB +:10A3F000200002040000009000000210040004008D +:10A4000004080800000000000088000000000008A8 +:10A4100000C00000000000000000410020002000FB +:10A4200020A000040040090402C0090009401100F6 +:10A43000401008A000000340008400100010408479 +:10A4400003900400022000C020080282208800043B +:10A4500020000284028200000000000000000000D2 :10A4600000000000000000000000000000000000EC :10A4700000000000000000000000000000000000DC :10A4800000000000000000000000000000000000CC @@ -109247,194 +109247,194 @@ :10AA30000000000000000000000000000000000016 :10AA40000000000000000000000000000000000006 :10AA500000000000000000000000000000000000F6 -:10AA600000000000000000000000000000000100E5 -:10AA70002080010404042100400520000180C00062 -:10AA80004002040820040209000040050200404082 -:10AA90002000000000888240204040034040200009 -:10AAA0004084824020028800C0004000A0000003D3 -:10AAB000208020000083201020002080008020843F -:10AAC00088004000000440002000208000800180B9 -:10AAD0002100200085032082C000200020002004E7 -:10AAE0002000208000002000000200000011000271 -:10AAF00040000402400100012084050009004002DA -:10AB000009000001210000018000000020008000F9 -:10AB1000000180000900100200010001840000050E -:10AB200041000003000100010000000000000000DF -:10AB30000000401000000010800180840004000428 -:10AB4000800400000000000000008000800400027B -:10AB5000400420208000208480212000009080007C -:10AB60008090000000020000000000C10000000012 -:10AB7000000100400040008000100004000200C0FE -:10AB800000C00110010820020100820283000000C1 -:10AB9000030201000083004001100040000000009B -:10ABA000008000C001C000900240204100210088C8 -:10ABB00000C10000000300100000000300050100B8 -:10ABC0000020000200000080200000000080002023 -:10ABD00020A00080008500000080008000000000B0 -:10ABE0000000000000000000000000C000000000A5 -:10ABF0000000000000090005404000084005000179 -:10AC00004105400520842040831120000041028836 -:10AC10000008401120C0204040002004000009002E -:10AC200000080002404120054040090180840008DE -:10AC3000004040040000408400090000400400106F -:10AC40002008001100110084050402000500000422 -:10AC500000C1800520040004410402040004000037 -:10AC6000418200000082008200000000000200001B -:10AC70004000000040820003A00840020040202164 -:10AC80000000201020082002200020A10100000266 -:10AC90004008010200020003A0030202C040008934 -:10ACA000C00901C00002000000080089002120083E -:10ACB0000021014020030000000800210008008955 -:10ACC00000830021000000040008002100000008AB -:10ACD00020A004040500008800100004000000000B -:10ACE000000000008200000000080000880400004E -:10ACF00000000000000000000082000080A100832E -:10AD00000000008485008040808580008002020071 -:10AD1000000080000283000100001108800000A1F3 -:10AD200000022182400221010000000009021000FF -:10AD30004100000020000000000000900000000022 -:10AD400000040004000000000001000000000800F2 -:10AD5000000080218001A00000100000000111000F -:10AD600021880000000000000084000000000000B6 -:10AD70000000000000900000000008400200408039 -:10AD80000004C04008100000080008400804020445 -:10AD9000000000000800100408008400004011209A -:10ADA000A000A00040028200828082000080080093 -:10ADB000A00010000000000000000000040000805F -:10ADC0004000000082800004098008000000C000EC -:10ADD0004020080008000000820083000100C00439 -:10ADE00083000800200000808280008000000400B2 -:10ADF0000000020082000000820000000382004088 -:10AE0000C102008500C10020218800C021900510EA -:10AE10008388402003900000200420A0000400004C -:10AE2000208200880890418808C0210241004040EB -:10AE30000084001020001100088400A00000200001 -:10AE400041040400000010200001200400A02100A3 -:10AE5000050000010000030000000804200020009D -:10AE6000080020002100000000040004110420005C -:10AE7000040000002000040004A000000000821074 -:10AE8000C010C004028400210104000800A100A138 -:10AE900020C0200300020802824000038200000854 -:10AEA000202104040808880820089102840800086A -:10AEB00008000105000300001010A00400100000AD -:10AEC000880021008403824008000010C02084080C -:10AED000000000000000400400000800C00009005D -:10AEE00000000400000082000000000000000004D8 -:10AEF000000000000000000000040000000000004E -:10AF000000000000100111050300200121000004D1 -:10AF10000040804080000401000011000000000893 -:10AF2000000080000001000000008000020100001D -:10AF300000000900200000002000000100012000A6 -:10AF400000000000A0000000000000000000000160 -:10AF500000000000000000000001000008000000E8 -:10AF6000049040000000000000000000000000000D -:10AF700000080000000000000000000000000000C9 -:10AF8000000000040085A121000282218440000409 -:10AF90000010000800218221000401084021010363 -:10AFA0001041C000100000210421004100031100E5 -:10AFB00040090003000504000020081101100240B0 -:10AFC000080500008200000000042008A000C00264 -:10AFD000200040000800C0000420042001800182FD -:10AFE00000840505000000000004001100000000BE -:10AFF0000000000500000000000000080011000033 -:10B000000000000020C02002200400910004041170 -:10B010000083001000040300039011A14088890000 -:10B020004040200800000000000000082000000050 -:10B0300040408240000010000204000400000201B1 -:10B040000804000800000000000400008000000068 -:10B0500000000000000000000800020000000420C2 -:10B06000042100200400000000000000000008008F -:10B0700000000000088400000020000000400800DC -:10B0800008001100020008C101400102C01010C0F8 -:10B0900000020108A09041C00008911140C088C082 -:10B0A000A0101003A08311C0019083041010A0C051 -:10B0B00003880283900821400105820210100000DD -:10B0C000008240000000000000A003008401000096 -:10B0D00084A0C08200A0888200000001020002005B -:10B0E0008800900005008400C0004100890008002D -:10B0F0000000000000000000000000004000000010 -:10B1000000000000900000010585201040038089A8 -:10B1100080890003048209009180058008C08000B6 -:10B1200000821120000800A191802000080000008A -:10B130001180411141A0008020840810098080A066 -:10B14000000000000440004000004085880805031E -:10B15000051083008080030000800504000289053B -:10B160008008000080004100000080001000030003 -:10B1700080000000000040000000000040000000CF -:10B180000000000020020020000882000310058853 -:10B190008841004000828005800380410804A0C0EF -:10B1A000908000800290850088A00940401003C074 -:10B1B0008400840041024003A18090009083A0821B -:10B1C0008008808040004040100000000300030021 -:10B1D000A0000800800800000041808040000900B5 -:10B1E00002000010004004008010A00800020000CF -:10B1F000802080001000000002000000000000001D -:10B2000000000000000000000000000009A0C001D4 -:10B210008340C102048802101090C0008401A10084 -:10B220008541C00804C011020890C1A0900190019E -:10B230000441C10009001000890405C0098803C049 -:10B24000034008000240A0000000010000000020B0 -:10B250001000A00001001001C00088200808012093 -:10B2600000000100000100010082A00183C0000174 -:10B270000200A001080001400000010000000008D9 -:10B2800000000000000000000000000000000808AE -:10B290000040040382C002024003000811C008A05D -:10B2A0002011050302C190100002881090C04004D4 -:10B2B0004091848302C020200188008402C00302E0 -:10B2C0000003C0038204100000000101000100001F -:10B2D000000000904001A020900240019003C0A017 -:10B2E000000101000191000400A0C0844009010296 -:10B2F000008882210010000300010000000000000F -:10B30000000000000000000000000000010000003C -:10B31000809110848021A0900000008800A082907D -:10B320008041C182212189820040110241000090A8 -:10B330008040800200A18889000320100010009145 -:10B34000C18000848021801080000000021000086D -:10B35000000000002109202180028084802080904C -:10B36000058000101105022100900500800080A1D9 -:10B370000289001100080002208800040003000078 -:10B3800000400009000400200040000800080808F0 -:10B390000008A102A10520001005A10084008480FE -:10B3A00004008209808021008810A08841080500DF -:10B3B0008803800080C000000004820000888000B4 -:10B3C00040002100C09085802040100020110080A6 -:10B3D00080000000219108000400401080050084D6 -:10B3E000000080000821214020000911040203050B -:10B3F000050005110000000400000000040020000A -:10B40000000000000000110008000800000000001B -:10B4100000000000C10010A003024100C10008406C -:10B4200008082100C100101003021100C0C002036F -:10B43000C0040901C0C008831010C000C1822009E7 -:10B44000822083000304020910022101A1000001EF -:10B45000C0828200000001401100010011010200C1 -:10B4600008C1208488000191000000000001010152 -:10B47000000000A000010000000100820000018423 -:10B4800000000000000000000000000001000000BB -:10B49000000000000000000000E0000000120000BA -:10B4A00000E000000000000000E00000420000009A -:10B4B000000000008800000000E000000000000024 -:10B4C00000E000004142000000E0000048420000AF -:10B4D00000E0000000000000880000E00000000024 -:10B4E000008100E007004200880000E00700000043 -:10B4F000000000E007005081000000E0070060004D -:10B50000000000E00000000000000000000000005B -:10B510000000000000000000FF360000FC7E00007C -:10B52000FF000000E4E70000FF6C00003F36000071 -:10B5300066660000FE3E0000FF0000003636000098 -:10B5400066FC0000FEC20000FFFC000C7E427E4252 -:10B55000C3C30F0F000000000000003C003CF0F0EF -:10B560000000C3F3E3F34200FFFF0000000000FF10 -:10B5700000FF000000000F000FFF000000003F3F31 -:10B580003F2000000000000000000000000000005C -:10B590000000000000000000000000360000C04273 -:10B5A00000006C6C0000E4240000006C00003036E9 -:10B5B0000000F03C0000C20200006C6C00003F3054 -:10B5C0000000660C00003E020000666C666C7F4F57 -:10B5D0007040C3C30F0F000000000000003C003C9F -:10B5E000F0F00000C3F3E3F3FF00FFFF00000000F2 -:10B5F000FFFF00000000000099C399C30000000095 -:10B600003F3F3F000000000000000000000000007D -:10B61000000000000000000000000000000000002A +:10AA600000000000000000000000000000000000E6 +:10AA70000000000000800000000001000100000054 +:10AA800084000400000000400000400000804100FD +:10AA900000000000010000000100000040800000F4 +:10AAA00020000000C04001040010200084000003CA +:10AAB00021804080A004018588000000050000116D +:10AAC0004104210488040500A00088000000200241 +:10AAD00004004000408001002091418520020109CE +:10AAE000200941002088049089002110400088003E +:10AAF00000000000000000020000004020002000D4 +:10AB00000000000000000000000100008090000232 +:10AB10004000000000002000004020004000000431 +:10AB20000000000000000001200100020000000001 +:10AB30000000200421040001400400000000100077 +:10AB40004000880304010009849000000004000014 +:10AB5000210100002000000420020004080421411B +:10AB60000840000440908002002008400805214071 +:10AB700000C0820000000000000000000000000093 +:10AB80000100000000000000000001400200000081 +:10AB9000040000000300000010200000000000007E +:10ABA0000000000500000000000000000004000894 +:10ABB0000000000000040000000000080083008482 +:10ABC000029040048240004082094041000400009D +:10ABD0000841A00000080100000000C121022084FB +:10ABE0000004040440400800010400059003000331 +:10ABF0000100A1041100000000000000000020007E +:10AC0000000004000000000000000300100000002D +:10AC10000000800000002000000080000000000014 +:10AC20000000000000080000000000081000000004 +:10AC3000000005000000000100080000008400087A +:10AC400000020002A000001000000210A00402C0D8 +:10AC50000000008400000800021002000220888327 +:10AC600089210082800180848584200500824084BF +:10AC70000008088240820000000000000000000080 +:10AC8000008000000121000000000000000000031F +:10AC90000000000302200000000000000000000887 +:10ACA00000080000C00204000000000000020020B4 +:10ACB00020102000011000000021002101210011BE +:10ACC000400020009000008000412020004120082A +:10ACD00000211008A0000400004002200008040821 +:10ACE0000040040820A0888800108408000500089F +:10ACF00040400021C00000080000000000000000EB +:10AD000000000040000004000000000000000000FF +:10AD100000000000000080010000000000000000B2 +:10AD20000000000000000000000000000000000023 +:10AD300000008000800020000000090000002010BA +:10AD400000009100000000000004000090010010CD +:10AD500080000000048400000400000800080000D7 +:10AD600000000000A100411100042100080009A01A +:10AD700011408004000000100900000200040000DF +:10AD8000000000000000200000040004000000009B +:10AD900000000000A0008209000400000000000084 +:10ADA0000008A000002100001000000000001000BA +:10ADB0004000820000000000009100000000A000A0 +:10ADC000020582000000C10300020080400020084C +:10ADD000A121202140000205200000004040C0A029 +:10ADE00082844005A02020100009044004040800CB +:10ADF000080002800804C0052080084000C0000050 +:10AE000000000000000000C0208220040900200093 +:10AE1000090000080090000009200202008400845C +:10AE200020880484001000840000008200A000003C +:10AE300002A080C0000800040040200400000000C0 +:10AE40000084200000100090400420830004009043 +:10AE5000809020008010208220000090009040C050 +:10AE60000220002140902001C0C009848000000021 +:10AE7000C00080A00308208802202010208200004B +:10AE8000004100000000000000000004000000007D +:10AE90000041000020000000040000410000C00547 +:10AEA00000080000000500410010820800030000B7 +:10AEB0000000008800050000000000000000000005 +:10AEC0000000000082009040040041000000A0004B +:10AED000000820082110C00000084080080808056C +:10AEE00082040421080082048210A0008208000964 +:10AEF0000005C041082182000400A000002100419B +:10AF00000000000000000000000000000001000040 +:10AF1000001011000000000000A000A000001100BF +:10AF20000000000000000000000000000000000021 +:10AF30000000000000100000000000000000000001 +:10AF40000000000000000000000020004004008419 +:10AF5000000000020000822000A00000004000006D +:10AF600000000400808808000009000400000008B8 +:10AF70001100000000000000000000080020002078 +:10AF8000110040410004000000000000000000002B +:10AF90000000000804002011000000000000020072 +:10AFA0000000100000050089402100200020001052 +:10AFB00000208400002100000000000002050000C5 +:10AFC0000010000000000008000004000008040851 +:10AFD0002008400300000000A021002100100041D3 +:10AFE000C0028408080082088221901088080000AE +:10AFF000002000108208881089A108214010824199 +:10B000000008A00000000000000000040000001084 +:10B0100000A00210110000C009400000400004041C +:10B0200021100402820000842104028400A003C0D5 +:10B0300000000000040002000840000000828000C0 +:10B0400000000300000000A020C00088208420A091 +:10B0500000C000C0000011C0000000C0200402A019 +:10B060000582020100000000099003042020020074 +:10B0700011400200202003001141080200C041409D +:10B08000110011000020000000000000000000007E +:10B090000100C100000000000000000000001104D9 +:10B0A0000004000482080100880010010001000073 +:10B0B000000000000000C08800822084C002000060 +:10B0C0000000010000000000000000000800000077 +:10B0D0000001000109000001A110200320C082101E +:10B0E00000010001200000010208A10008001090EA +:10B0F000C008C0900005900211A10041888490C052 +:10B10000829000080089000200000000000000009A +:10B110000400040004000000000000000000000023 +:10B12000A0000200008000804000A111A0030010D8 +:10B130000011000240000002828021800000000017 +:10B1400000000000400000000000000008001000A7 +:10B150000000004110100403000991839103054190 +:10B16000000900100208000900200000A100C00032 +:10B170000500808200890508801120A0210340106D +:10B180000008000500A0008200110000000000007F +:10B1900000002080840041009111000000000000A8 +:10B1A00000009000A00383A1418009004000090035 +:10B1B00041402000200000002000000000090000A5 +:10B1C0000000000800000041000000000010000026 +:10B1D0000040000002800300110241C0044021042D +:10B1E00089030003A000200008050480A000088453 +:10B1F0000580830200808020200089A02080A1108B +:10B200008808082100000040808000000000000045 +:10B21000000000009110A100C000C001000000006B +:10B220000000000041001111104105100004010050 +:10B230000000010100A001000000010000000084E6 +:10B24000008400842000080010019000000000012C +:10B2500000000000000000400100000001A1882162 +:10B260000501A0A084A141000500100120100802E2 +:10B2700003C010A0C1012010849040828205A1402B +:10B28000A100A1A1858500008801A0840020000103 +:10B290000000000100000000000084000000000029 +:10B2A000000000000000A0C0000808C103C00000AA +:10B2B0000000000000010001000000010000840007 +:10B2C0000008001011C00000200000000000000075 +:10B2D0000000A000000000010001000100000100CA +:10B2E000900305040141400201000001000001003B +:10B2F000C011008200880103030500880391032028 +:10B30000041101A00102100508A000850100A00899 +:10B3100000040010004000100004000400110010A0 +:10B32000000000000000000000020090800409906E +:10B330000009200910110041000200210021000530 +:10B34000000300820002048400008000000004006A +:10B35000000000090009000904080020000808098D +:10B3600020090008881110A105842110020310098A +:10B3700010040088009100054088A0100204C0213C +:10B38000850000880890088880040011034008099F +:10B39000829100000000000000000905214120000A +:10B3A00011410000000000000000000000C080808B +:10B3B00080004100090905000903218420002000C4 +:10B3C00005400000800000000000000500000000B3 +:10B3D000000000000000000000000000410908001B +:10B3E000410010081009408008001121000300806E +:10B3F00000000003100008400800090208118491B1 +:10B400008490110041211040410008048000008018 +:10B41000808000000000000000000000000200101A +:10B420000110010100000000000000000400880875 +:10B430000484080001040000000000010111010063 +:10B44000010000018400820010001000000000884C +:10B4500000040000000000000000000000000101E6 +:10B46000010000000000A140100885048800008849 +:10B4700000200002000020822090C020080011015E +:10B48000832091909000C1018588C0880101C0008F +:10B49000820404844000000000000000000000005E +:10B4A00000E0070000120000000000000000002182 +:10B4B000000007000000000000E0000000000000A5 +:10B4C00000E0000000000000000000008400000018 +:10B4D00000E0000000820000000000E0000000002A +:10B4E000000000E000000000000000E00700000095 +:10B4F0000000000000000000000000E00700600005 +:10B50000000000E007006000484200E00700000083 +:10B51000000000000000000000000000000000002B +:10B52000000000000000000000000000000000001B +:10B53000E88ED49600C30002000000000000000066 +:10B540000000000000000000E1D91E2600FF096F86 +:10B5500000000000000000000000000000000000EB +:10B56000000000000000000000003C3CFF60000004 +:10B570000019000000000000000024E724E7B9FBE8 +:10B5800020620099C30F26463FCF9999F9F9000030 +:10B5900000003C0C2C2C5A5AF0F000000000000077 +:10B5A000000000000000000000000000000000009B +:10B5B00000008EE896D400000000000000000000AB +:10B5C00000000000000000000000879B78640F0F5F +:10B5D000096F0000000000000000000000000000F3 +:10B5E0000000000000000000000000003C3C606023 +:10B5F00000FF00FF000000000000000027E724E734 +:10B6000099DB0042FF99C30F19893FCF009900F9D8 +:10B610006FFFEFFF000000005A5AF0F0000000003A :10B62000000000000000000000000000000000001A :10B63000000000000000000000000000000000000A :10B6400000000000000000000000000000000000FA @@ -109443,478 +109443,478 @@ :10B6700000000000000000000000000000000000CA :10B6800000000000000000000000000000000000BA :10B6900000000000000000000000000000000000AA -:10B6A0003C3C00004E4E000000FF0000303F000018 -:10B6B000FC6C00001E1E0000663C00001F7F0000A6 -:10B6C000E70F0000303F00006666000FFF0F00C06C -:10B6D0003FFF870F810000FF00FFC0C0C0C0000017 -:10B6E0000000666600F000F0060606040F0F0F0665 -:10B6F000000000000000000000000000FFFF00004C -:10B700000000000000000000000000000000000039 -:10B710000000000000000000000000000000000029 -:10B72000000006F600000CCF000036360000606F07 -:10B7300000000C6C0000069F00000F3C0000107021 -:10B740000000240F0000606F00003C0F181E7E1EDA -:10B7500026E626E6E7FFE1F0FFFFFFFFCFCFCFCFE2 -:10B7600000000000666600F000F00F0F0F0C0303EE -:10B77000030200000000000000000000000000FFC5 -:10B7800000FF00000000000000F0000000000000CA -:10B7900000000000000000000000000000000000A9 -:10B7A000000040E38007002D920240E38007002D57 -:10B7B000920240E38007002D920240E38006002DB4 -:10B7C000920240E38007002D920240E38005002DA5 -:10B7D00090024061800500250002806100010001A7 -:10B7E0000001000000610005C00900000061403F49 -:10B7F000000D00000061000DC009000005610A0F86 -:10B80000050D00A00061000F000D000000610005A3 -:10B810000001000000610006000D0000006100064C -:10B82000000D000005050505CF00FF000F5F0FFFAD -:10B83000000F0000C0C0CFCF1C000000F0E0F0F00F -:10B840000202030300000000000000203C3C000056 -:10B850000000FFFFFFFFFFFFFF00AAAAAAFF00559D -:10B86000AA00FF550000D3C3D3F3FFFF50500000E0 -:10B870000000C30FC30F41FF41FFFFAAFF0800CF25 -:10B88000CFCF00FF55550000000040108020FF0082 -:10B8900055553030F3F324812481434300430000A5 -:10B8A00000002400002405AF8787CFCFFFFF82D799 -:10B8B00000FF000F0000C0C0CFCF08000000FFEB6A -:10B8C000FFFF0303030300000000000000003C3CF6 -:10B8D0000000000038007F750000F0F0FFFFAAFFB5 -:10B8E0000055AA00FF550000D3C3D3F3FFFF550056 -:10B8F00000000000C30FC30F03FFC3FFFFAAFF0830 -:10B9000000FFFFFF00FF5555000000000104020882 -:10B91000FF0055553030F3F3248124815F5F005FD1 -:10B920000000000081000081455541417000F00099 -:10B930000F000F0F00000000F0F0F0F0000F000506 -:10B9400010003000FF0F550500000000000000202F -:10B95000A0F5A0F5000CFFFF3C00FF003A3A3A3A90 -:10B96000FCFCFCFC000FFF0F0000D0D7D0D7010576 -:10B97000030F0000000000000000008300AF700013 -:10B98000700000000000F0F05555000000000000BD -:10B990000000000000003C3C3C3C000000000000B7 -:10B9A00000000F0C0F0C00000000455541417000D5 -:10B9B000F0000F000F0F00000000A0A0A0A0000FDB -:10B9C000000510000000FF0FFF0F00000000000046 -:10B9D0000000A0F5A0F50000FFFF3C00FF000AFA00 -:10B9E0000AFA0C0C0C0C000FFF0F00000000D0D75F -:10B9F0004155C3FF00000000000000008383AFAF8B -:10BA00007070707000000000F0F0555500000000EC -:10BA1000000000000000000000FF00FF0000000028 -:10BA200000000000000C000C00000000200020803E -:10BA3000201184842120C08082802080201020005A -:10BA40004000208084002100888020822000200087 -:10BA5000020285032000200000008880000088008A -:10BA60004000200284000400882020000003200001 -:10BA700020000205000020004000820000000000BD -:10BA800088002000200820008400000000042040DE -:10BA900004008408A0022000880400008202C04044 -:10BAA00088042000840488008440C00084040000CE -:10BAB0000502040041210401002000020020009042 -:10BAC00041008400000220004000202000210000EE -:10BAD0000404C041400000000900410004020000CD -:10BAE0000000850009014000200004010000000062 -:10BAF0000000000000000400000000080000000832 -:10BB00000000000004000000000000000000000031 -:10BB1000000121C000000001000800A00000000199 -:10BB20000901000500000001000000010000000103 -:10BB3000001000040280200000400108018200C0C3 -:10BB4000001100000002000400100020000000208E -:10BB50000840010200000188208000400000000031 -:10BB600000800080000500800010000000400005FB -:10BB700000000000000000000002000002080002B7 -:10BB800000000180C04000400084004000080080A8 -:10BB9000000000080000000000400000000000C09D -:10BBA0000000000000000000008000800000000095 -:10BBB00000004008400800208910000804C004214B -:10BBC0000020410000000541048400C040010288BB -:10BBD00000418008080500880810801002C0048217 -:10BBE000000420020002000800024008408800080B -:10BBF000000800000004050805880009008480840E -:10BC000000830084200400090005004105090000AC -:10BC1000004000840000008802000584000800083D -:10BC2000000300080008008800080040000200042B -:10BC30000000058400009000040800A10002010239 -:10BC400004020021000300020003001000100000A5 -:10BC5000000500050180000809054185202100003C -:10BC600000030000000040080080000200200000E7 -:10BC7000002100000000002100000003000000007F -:10BC80000010200901022008000000050040000506 -:10BC9000004000050008C003000088414008000083 -:10BCA000000000000021880040C1000000A1000049 -:10BCB0000000000800400000030083A00020218550 -:10BCC0000811800100A000004100000021A1210115 -:10BCD0000000008400840810001082088810C10051 -:10BCE0000008000821002184888408020001030163 -:10BCF0000000080003A00000000000000388080006 -:10BD0000410808080088400800000000000000000A -:10BD10000000030100000382030003002100000073 -:10BD20000000000008A000000000C0400300000266 -:10BD300000400000000000008241020008000009ED -:10BD40008220088440030020904000090800000081 -:10BD500020040400000004001000102108020485E3 -:10BD6000A000C0094041080900110400040040027D -:10BD7000098490040140840000004000100000404D -:10BD800084058280C000000008401040080840413F -:10BD900000000000100008090891A000084108C137 -:10BDA000C0418411A0000008A002A0000800A0115A -:10BDB000080408020820A0090200000011848090F5 -:10BDC000098411010020000010090008004000C093 -:10BDD00000A0000080100004800440C000A0854145 -:10BDE000000200000000000800C0030800002184D9 -:10BDF0008041040500000400000000000000000075 -:10BE0000009000A000404000000000001101000070 -:10BE10000008000021000000090011400000000897 -:10BE200000400000410041002100400003004100AB -:10BE3000000003011100400000A0110000400003B9 -:10BE40001010080008210003A00801401020102154 -:10BE50000008C00810218220048800208500C00549 -:10BE60000810002110080000000800051000000262 -:10BE70000800000801800000012000000000000010 -:10BE800082000800820500808202100882020021E0 -:10BE9000A0000000000010040200000000080000E4 -:10BEA00010008202000002000800824000400000F2 -:10BEB000A00000000000008000000000020011024D -:10BEC000000000008008800020000340400000C007 -:10BED0000308000000C000080209A0202085080017 -:10BEE0000090000111C0001000841108038440007C -:10BEF000210100A041C0040403000401000000006F -:10BF000010C000000084088200102100000411000D -:10BF10002100410421002100000008100000000061 -:10BF20000940000400410982800000000000030174 -:10BF300000040900000000000040400000008004F0 -:10BF4000C00302214140020400118240004104105C -:10BF500002118208820920110040000040400000C8 -:10BF600004040041A01008210211824108210008A8 -:10BF700040000008000010110011002100840000A2 -:10BF8000000000004000020200050200A0000420A2 -:10BF90000421A000000800000000100000000409B7 -:10BFA00000000040100004414041400040004000BB -:10BFB0000000C00000C18800000000000020002038 -:10BFC000200000882100200080C000000004209094 -:10BFD000000100000010008400A000000010000418 -:10BFE00000080000208200010000000000000000A6 -:10BFF0000000110000002100000004000000000506 -:10C00000000000000000000200000000000000002E -:10C0100000000000110011000000000003000000FB -:10C02000000000000000000004000000000000000C -:10C030001100110000902104059000000000000094 -:10C0400004008000211001050088A0100091040266 -:10C05000040000030000010010000000C1409090A7 -:10C060008802A08483888410008982110001000066 -:10C0700088000000000008018800000101A02003E2 -:10C0800091092083000000000100C00000000000B2 -:10C09000000082000000010120012010000000A02B -:10C0A000000000080000000200080000000000007E -:10C0B000002000900000000000088900000000A09F -:10C0C00000A0A00110000884082010C10004002076 -:10C0D000008400040008000021008000000090009F -:10C0E000A18000000000100900A1008200030008E8 -:10C0F0000000040000090000092100400021100098 -:10C1000091A1C18500C000000000410000000000B6 -:10C1100000002000000000001102A1210403002003 -:10C12000000000000080000040804100000000008E -:10C13000200000000000000000000080400000001F -:10C140000000400900090000A0002100800020003C -:10C150008000891180A18283C000050008000004CE -:10C160008880040508838500800080001110800409 -:10C17000000000110080000008000200100003040D -:10C18000918010088500A10300000000000000005D -:10C1900000001000040210800400208011801000B4 -:10C1A00040030000008000008080100020218202F7 -:10C1B000200000000921000010000080009000090C -:10C1C0000000000080000000000011840300A000B7 -:10C1D0008588A0824090080504111010A00021005D -:10C1E000020040028200A182100002904000400143 -:10C1F00002010000000000040000019000000000A7 -:10C2000001001190A101410009210000000000007F -:10C210000000000000000101001001020002008285 -:10C2200001000803000000C000000808000000082A -:10C230008400000800000090000083829040000904 -:10C2400000010020100008A090008240C0030009F7 -:10C2500011848511C00000A1118340C00000A0011D -:10C26000A0010000101000A1024111C010C0001177 -:10C27000858588A000000000020100010000000187 -:10C280000101010190910191011008A0000000003E -:10C290000000000000000008000000020000400153 -:10C2A00000100203000000000000080800C00001A8 -:10C2B00000019090009000030000040400000002C0 -:10C2C0008800080803000188010140000100000205 -:10C2D0000883902040A0880405832121890400411F -:10C2E00000108008111080410008802182050000A4 -:10C2F000410421A11189002000008020004000009D -:10C30000000205210240809010201103808500006A -:10C3100000110000001100040003000300050020CC -:10C32000C102208300210000410000008080000045 -:10C3300040080009000000002088000880800000FC -:10C3400040800004808383000205080380111102ED -:10C350008021218410008040400240842180080216 -:10C360000910400041802000408509408080000481 -:10C3700021042100020090408000800000000000A5 -:10C38000200004001000041040808204090009000D -:10C39000000000000000000000000000800000001D -:10C3A000004011000800400002030000000080006F -:10C3B000000000000000000000090000000900006B -:10C3C00000030000040210000000000800800000CC -:10C3D00000000889C0C10104A0018901110389403E -:10C3E0009100000001100084010091088441840440 -:10C3F0004000C10010880120A00040000800020099 -:10C40000100001100100010001009004A19120889A -:10C4100090000000000000000000000090820888EA -:10C420008802900000900100020240000000C0A0BD -:10C43000080000001082002000000001000000A1A0 -:10C44000A000000100000000402000008201001058 -:10C45000A0400000000000E00700420000000000D3 -:10C460000700410000000000000000000081000003 -:10C47000070050000000000000000000000000E085 -:10C48000000000000000000000000000000000E0CC -:10C4900007000081000000000000000041000000D3 +:10B6A000000000000000000000000000FFFF00009C +:10B6B000000000000000F00FF00F00000008000084 +:10B6C000000000000000000000000000000080C03A +:10B6D0008FCF0000000000000000FCFC9864000018 +:10B6E000000000000000000000000000000000005A +:10B6F000000091019191918100000000F3CF62461A +:10B70000C3C3FFFF03F3606099668844D0E0DBE7C2 +:10B71000FF00FF000000000898FC00FC0099009961 +:10B720000000000000000000000000000B0B24FFE0 +:10B730000000000000000000717169690000000055 +:10B7400000000000000000000000000000000000F9 +:10B750007F3F70300000000000000000F3F39162B2 +:10B7600000000000000000000000000000000000D9 +:10B770000000FFFF9DFD8191818100000000F3CF5B +:10B78000918900003C3C03F36F6FFFFFCCCCDBE7FB +:10B79000D0E04200620000000000990099006F6F45 +:10B7A0006F6F00610006000D00000061000F0001D6 +:10B7B000000500000000000000000061303E009D18 +:10B7C00000000040000500000000006100050009C5 +:10B7D000000000613006009D000000610007000DC0 +:10B7E0000001000000610007000D0000006100077B +:10B7F000000D000080610007000D000000610006E0 +:10B80000000D000100610E0F0001000805610A092A +:10B81000050900A00061003FC0050000A06100060E +:10B82000000D00000000000000F03CFC0070007003 +:10B8300000200000000000000000000000000000E8 +:10B84000FF00000055555555FEFEFCFFBE82BC8032 +:10B8500000C3F0F0000000002B033F1700000000C1 +:10B86000000000000000000000003F410341000014 +:10B87000000000000000CFF38AA2000000200000BA +:10B8800000006F00006FFFFF0000E8E8E8E8FFFF3E +:10B89000FFFFFFFCFFFC003C3000D33FF33F000004 +:10B8A00000000030F0300000000000F03CFC000020 +:10B8B0000070000000000000000000000000000018 +:10B8C0000000FF00FC00550F553C02020003BE8241 +:10B8D000BC8000C3F0F0000000003F033F03000005 +:10B8E0000000000000000000000000003F7D037D1C +:10B8F00000553034000000048AA2CFF3000000009D +:10B90000000000006F6F6F6F00BA0000FCE8E8E80D +:10B91000FF17FF00FFFCFFFC003C3828D33FF37FFC +:10B92000000000000030F0300000000000000000C7 +:10B930000000000000000000000000000000000007 +:10B940000000000000C3C0C041404140F1F1B0F12F +:10B950003C003C3C0C0C0404000000000000000013 +:10B9600000000000000000000000000000000000D7 +:10B970000000000FCF008A0A30F00E0BBEEB002053 +:10B980000020EE0000EED7D07D7000000000AAAAD3 +:10B99000AAAA000017FFFF000000B5B7B5B7000066 +:10B9A00040000505415500000000000000000000B7 +:10B9B0000000000000000020000000000000000067 +:10B9C00000000000000000C3C0C055545554B0B082 +:10B9D000B0F13C003C3C0C0CFFFF000000000000FC +:10B9E0000000000000000000000000000000000057 +:10B9F00000000000000F0F008A0A30F0B0E0BEEB3C +:10BA000000000000EEEEEEEED7077D0D0000000016 +:10BA1000BFBABABA000014FFFF000000B7B7BFB743 +:10BA2000000040000505410000000000000000008B +:10BA300000000000000002000000400002000000C2 +:10BA400000000000200001808400000000000000D1 +:10BA50000002028000004000C0004180020000009F +:10BA60000000010003040000A100040000034000E6 +:10BA700000040208008400108880410008102000A3 +:10BA80000000C080C01005008280400400008800D3 +:10BA90008400080808040010200040004090209115 +:10BAA000028820008220000488002100021000008B +:10BAB0000000000000000000000000008000000006 +:10BAC000000000000000800040200000000000C0D6 +:10BAD000000000C1800200000000000040100000D3 +:10BAE000000000000800A00100001000000000009D +:10BAF0008000000100000011000140024020800190 +:10BB00000000000040040001400000400000000070 +:10BB100000000000800084000000000000200002FF +:10BB200002040020A082020141000084089040012C +:10BB30000000010000000000000000000000000004 +:10BB400000000000000000000000000001000000F4 +:10BB500000000000000000000000000000000000E5 +:10BB6000000000000000000000000004019000053B +:10BB7000000000020000010000000000820011C16E +:10BB80000003000000030010000000000111000489 +:10BB9000200800040000090000408400080001049F +:10BBA00000040104010584000109900000840040A4 +:10BBB0000020000040000000000000000000000025 +:10BBC0000008000800000000000000000000200045 +:10BBD00000080000000000000000000000900000CD +:10BBE000008409C000000000000020C00000200404 +:10BBF00000C0000000090010401000840008000090 +:10BC000040020004000800080084040420004000F2 +:10BC100000A0800900080082401000841090059068 +:10BC2000208500002005204002082008020800208E +:10BC300041100005000000000000000000000000AE +:10BC400000000041000000000000000000000000B3 +:10BC5000200800410000000000080004000000006F +:10BC600000000000000000000000000800210004A7 +:10BC700000C0001000000004080588000002000554 +:10BC800000410003002100400121C003000901C15F +:10BC90000009910201400002004000109008008855 +:10BCA00040401040200300009010000400210021BB +:10BCB0009000041188210000000000000000000036 +:10BCC00000100000001000000082008400840000CA +:10BCD0002000A110000041C0000800000008100072 +:10BCE000000021100800090000000000008400008E +:10BCF00000000004000800000000800400000000B4 +:10BD000010000010030000A000844000100005880F +:10BD100008022182401110002110418408052100F1 +:10BD20000002828280400000008241A000A01084B6 +:10BD3000111008C0A1000010000040000000000029 +:10BD400000000008001100040000000000000000D6 +:10BD50000040040002050011A000000000200000C7 +:10BD600000058240821100080008204100080009F7 +:10BD7000A0001000C0052005000088212005020059 +:10BD8000080002218408081000110280A000402150 +:10BD9000024108409041A005080000039040821134 +:10BDA00002218211911040040800C00340A0A0218C +:10BDB000A0219020040082C1400200008000000009 +:10BDC000000003200000020002000000000000004C +:10BDD0001100000080000000000000000200028846 +:10BDE000008800080000000800002100000000009A +:10BDF000000400000084080090C0000000008000E3 +:10BE00000000000082820090000908C000020900C2 +:10BE10000008008480A0021003409010020020C19E +:10BE2000020000A004002001880091C0114000041D +:10BE3000099000000988910820202084000000005B +:10BE400000000000000000050000002100008280CA +:10BE500000004021000810000800008000000000E1 +:10BE600000020000000008008400004100051021CD +:10BE70000040400000000021000000100000000011 +:10BE800082080041000000210800004082020010EA +:10BE900000408240A0410000000808084000000364 +:10BEA0000808004082020002A000C10008080090BB +:10BEB000018085C0828020001000100400830000F3 +:10BEC0000000000000000000000000001100000061 +:10BED00000020000800000000000000802020000D4 +:10BEE0000000200100000000000000000000000031 +:10BEF0000000000080000000000040080004000076 +:10BF000000040000000009C00310800000080300C6 +:10BF100010C002100088038200000004080408001A +:10BF2000008485101190000809A0038408100308FC +:10BF3000000420044004080480888010900103401D +:10BF400000000000000000000004000000000000ED +:10BF50000000200441000000900002050040004164 +:10BF6000020000090810400502418800004100025B +:10BF70000841004100002009002100410021000487 +:10BF800000000010000800210008002108410021E5 +:10BF90001110C04082004000020810080004000098 +:10BFA00010098809022188410100400220088940C7 +:10BFB0002000002182418240820008040204200502 +:10BFC000200200000000000000000000000011003E +:10BFD00000C00000080008000890400002000000B7 +:10BFE0000000000841108000000000000800000070 +:10BFF0000000208200080000009000A00000400027 +:10C00000040500000008000000000000000000001F +:10C010000000408320844008400202840010090090 +:10C0200000040200080000004184080000401102E2 +:10C03000208411402004211003C00004200000844B +:10C0400080088208000000000001000000000000DD +:10C050000200000000010101040100000404A084AA +:10C0600082C1C0A0008800108808C004A008210177 +:10C0700082200808020440020408A0A00901080068 +:10C0800041008200000000A1C0881100820102A0CE +:10C090000120008408C00000C10182010000048466 +:10C0A000024110C0880540C0834010A0828441C175 +:10C0B0000141841103899182909088A0C0A000035F +:10C0C0008903831008900010001100040004000090 +:10C0D00000000000000000100320004000090004E0 +:10C0E00084098505800400800080008000000889A4 +:10C0F0008408000280898000858000800000114152 +:10C10000004084408005000004080011C141800205 +:10C1100000802100000080000040084080100000E6 +:10C1200004028910054100894080108000008000D1 +:10C1300088C108A140210202400021004080000087 +:10C14000004182A188110000008000000000001161 +:10C150000000110010004000020004000400024032 +:10C1600080000900840089800000408002000000F7 +:10C1700088002120910011038000000280218000AE +:10C180001180210040000820000082800800800407 +:10C19000C1020980410088042140410090008211C1 +:10C1A00021030000A108C080842110008800100431 +:10C1B00021000400A010C1A0020209030905858521 +:10C1C000C1801180020311C00303000800000000B9 +:10C1D0000000000000000100010000020100010059 +:10C1E00000830204A000A000A188000089041100BF +:10C1F00010008902030088C0C001080010008811E7 +:10C200008200890211001100910000004008C10065 +:10C21000A000098400020200A100A101908808008A +:10C220000301A10140021101A1821001830021003C +:10C230002001010011204000880504008200A08533 +:10C2400009A083A0009089100803A101000000004C +:10C2500000000000000100000001000100000001DA +:10C2600001010000A0C000040482A02008100011F9 +:10C27000A001A004900500A00183900200A000A1ED +:10C280000041048200110188001100090000000132 +:10C2900001A001890100008800020088A0C10000FF +:10C2A0000100000100019008000200218502848342 +:10C2B00000000020C103020100A100211182C0087A +:10C2C0002091008408088888012089910591000048 +:10C2D00004000400000000400000002100400000B5 +:10C2E0000920052104040004040910418011804143 +:10C2F0000020804080090084028905A11189000581 +:10C30000008800880082000810A041A00488000076 +:10C3100000094182204009110000000000008084D3 +:10C320000002042104200040009020821005111119 +:10C3300000080011000209880020038410A1098070 +:10C34000049000080010858900410211890591417F +:10C35000402100004100000000000000000000102B +:10C360002021210021000241414005022000090452 +:10C3700000000000000000008990218900808905EC +:10C38000002080040080000009042080108000113B +:10C390000000082102210980401104080080028069 +:10C3A00000104021080010004020C1008809828050 +:10C3B0000400000000000080000288C021914100BC +:10C3C00080000089804000800089059100050941B6 +:10C3D00011110101000000000000008800000000B1 +:10C3E00000000105000001000101010500A100900D +:10C3F0000000000004880084000008A090C0101015 +:10C40000080004010884A0109000000101080084C5 +:10C41000000000000111009000840101840210104E +:10C420000140040001010110008401010504A191F3 +:10C4300082081000004000820084000005099183FA +:10C4400008881000C0050284A040401089401002F6 +:10C450009190910100000000000000000000000029 +:10C46000000000000000000000000082840000E0E6 +:10C4700007000006000000000000000000000000AF +:10C48000000041000000000000000000000000E08B +:10C49000000000000000000000E0000088810000B3 :10C4A000000000000000000000E0000000000000AC -:10C4B000000000004200000000000000000000003A -:10C4C000000000000000000000E00000000000008C -:10C4D00000E0000000003C3C3C00D75F820A000006 -:10C4E0000000F0F000F00000000000000000530029 -:10C4F0005303FFFFAAAA0000C300510055000FCF4D -:10C50000054500000000000000000000000000FFE2 -:10C51000F3F330303F3F0000000000000000000057 -:10C520005FCF00003CC33CC3CCCCCCCCF00FF00FB1 -:10C53000F00FF00F00FFFF00FFFF000000FFFF0003 -:10C540000F0F0F0F3CC33CC30F0F0F0F3CC33CC377 -:10C55000F0F00F0FC3C3C3C33C3C3C00FFFFFFFF21 -:10C5600000A02020F0F000F000000000000000001B -:10C57000FF00FF0FFFFF2A0A0000C30000000000B9 -:10C58000FFCF554500000000000000000000000043 -:10C5900000FF030300F00FFF000000000000000098 -:10C5A00000005FCF5FCF3CC33CC3CCCCCCCCF00F02 -:10C5B000F00FF00FF00F00FFFF000000FFFF00FF83 -:10C5C000FF00F0F0F0F03CC33CC3F0F0F0F03CC3EF -:10C5D0003CC3F0F00F0F3C3C3C3C0B0B0F0FF0F05A -:10C5E000F5A082C3AAFFFF00FFFC0000000040414D -:10C5F000F0FFFFFFDFC3FE00FC0000A200A2E44E3C -:10C60000E44E0000000000000000000000000000F8 -:10C610000000307DB2FF3AAA3A000000000000009E -:10C620000000000000000000AAAAAAAAF0F0F0F0A2 -:10C630000000FFFFF0F00F0FAAAA555500FFFF0002 -:10C64000AA55AA55F00FF00FAAAA5555AA55AA55F2 -:10C65000C3C3C3C300FFFF000004FFFFAA0AFF0F0C -:10C66000C3C3F5A0AAFFAAFF0202FEFE000000005D -:10C67000E0EBF0FFFFFFCFC3FFFFFFFF000000A2D2 -:10C68000F05AA50F000000000000000000000000AC -:10C6900000000000004D82CF3AAA3AFF00000000DF -:10C6A00000000000000000000000555555550F0F18 -:10C6B0000F0FFFFF0000F0F00F0FAAAA555500FF63 -:10C6C000FF00AA55AA55F00FF00FAAAA5555AA5572 -:10C6D000AA553C3C3C3C00FFFF00FFFB0000806192 -:10C6E000400F050100A005610A0E050D00A00061C4 -:10C6F0000006000D00000061003E000D000080619A -:10C700000006000D000000610003000D0000006144 -:10C710000006000D00000061000B00050000000095 -:10C7200000610006000D000000610006002D1002EF -:10C7300040618003002910024000800000201002A8 -:10C7400040618006002D100240618006002D10021D -:10C7500040618007002D1002406180060029100210 -:10C76000AF05AF05FFFF3F30AA2820282901ABAB5A -:10C770004141EBEB3F153F15FF55005545EF50FA92 -:10C7800000000000000F000000000000EBEBFF5570 -:10C79000AAA2AAAA0FFF000050505F5FFB08FB0887 -:10C7A000000000000000FF553C5500000000AAAA50 -:10C7B000AAAA343404F4F734F7340000000000006F -:10C7C000000000000000C3C3C3C3000000003333F7 -:10C7D0003333F0AAF0AA5F505F500000000010FB56 -:10C7E00010FBAF05AF0500003F30AA28AA28290199 -:10C7F000ABABA0F5A0F53F150000FF55005545EF88 -:10C8000055FF0151FFFF000F000000000000EBEB9F -:10C81000FF55000000005FFF0000C300FF3CFBCBA2 -:10C8200038080000000000000000000000000000C8 -:10C830002A2828283E3E0EFEC704C7040000000038 -:10C8400000000000000000000F0F0F0F00000000AC -:10C8500033333333F0AAF0AA5F505F50000000007A -:10C8600030F310FB7D413F3FFFFF7878EBEBCBC10E -:10C870000F0F0505000000000FC30FC300000000EC -:10C880005500C30FC3C1C30100AA00AAC3C300005F -:10C8900000000000FF0CFF0CC0C1C0C0EF45EF4519 -:10C8A00000300F3F0000000000000000000000000A -:10C8B0000000AA0F2B0FC5C500FFFFFAC3C300007D -:10C8C000000000000000000000000F0F0503000042 -:10C8D0000000F5F505050000000000000000550F00 -:10C8E000550F000000007D41030300007878EBEB5A -:10C8F000C3C10F0F0505000000000FC30FC30000E8 -:10C90000000055FFC30F0000000000AA00AAC3C327 -:10C910000000000000000000000000410000EA40AC -:10C92000EA40F030FF3F000000000000000000007F -:10C9300000000000AAAA2BAAC5C500FF0000C3C3BF -:10C94000000000000000000000000000FFFF55C3D1 -:10C9500000000000F5F505050000000000000000E3 -:10C96000550F550F000000008410000084000204E1 -:10C970002009820000080404000020050208840049 -:10C980000409000000002004880088100000000056 -:10C990000000200888008800000020000400200417 -:10C9A0008400C0000010C00400032000200000002C -:10C9B0000000000020008805400004002000200046 -:10C9C00004042000200000002004200020000404B3 -:10C9D0000000000020002000200084002003200030 -:10C9E00084000200040000000004000004000008AD -:10C9F0000000000800082000090009004004200091 -:10CA000000040000000002000401200003002000D8 -:10CA10002100200004000500204004100000000058 -:10CA200004000800000000000001000300000400F2 -:10CA300000000400000000000000000000000000F2 -:10CA400000000000000000000000000100000000E5 -:10CA50000000000000C0410000000400400004008D -:10CA6000040000002000000000000001000400009D -:10CA70000003000300000004004000000000000468 -:10CA8000000400030000000000040000000000009B -:10CA90000010000900040000000000000010000465 -:10CAA0000004001000000000000900000000000069 -:10CAB0000000000000000000000000000000001066 -:10CAC0000000000000000000000000000000000066 -:10CAD0000000000000000000000000000000000056 -:10CAE0000000000000000000000000000000408482 -:10CAF000408800084084000840840488208400089E -:10CB00000008401009100084094000080900418411 -:10CB10000400000804000082408200880000408871 -:10CB20000410008402080010000800820088000041 -:10CB3000408400004008008400820010008800004B -:10CB40000084000000000088000800880000000841 -:10CB500005000400000800080000000800080008A4 -:10CB60000000000800880008000800000008008499 -:10CB700082080021820000410003000800050041F6 -:10CB80000002001010050011000020400000000805 -:10CB90000005000500020000A04100000000004167 -:10CBA0000008002100408400000000400021C00077 -:10CBB00000000000A0050005000300000008200898 -:10CBC0000008000900000000082100000000000823 -:10CBD00082008409000000000010000000008800AE -:10CBE0000000880000100000900000009000A000ED -:10CBF00084000082080200100084211008C04188CF -:10CC000000000084008400A00084081000C003001D -:10CC100005C0411000A010C000000008001000086E -:10CC200000100000000000881002000800A00000B2 -:10CC300003A000000000110000904100210021002D -:10CC4000210003840000000800400008000021903B -:10CC5000030005000500210000000090030400000F -:10CC60002100210000000000210000000000000061 -:10CC70000390039004000200000082000000040002 -:10CC800082001002200020000000080000000000C8 -:10CC900088008800820082000421080040002000F3 -:10CCA0001000100082000000820000000800000058 -:10CCB0004000900000008200080082000008000090 -:10CCC0000000C000040082000000A000A00040009E -:10CCD0000400A0000000820008048200820000001E -:10CCE0000000020002008200000082008200C000FA -:10CCF0000000000000000000009041000500050059 -:10CD000000022190000010A00040102000000090C0 -:10CD10000000008400000488100041900310000807 -:10CD2000000000C000000000000000000200000041 -:10CD3000000000000900000040C0000040000000AA -:10CD400000000000000000001000000000001000C3 -:10CD50000000000000C000000000100000000400FF -:10CD600041000300110000001100080000900800BD -:10CD7000000000000000030800050000000008009B -:10CD80000000000000000002000000000000000899 -:10CD90000003080500001003000000000005000863 -:10CDA00000000800A00000001000000000000000CB -:10CDB0008203000082000008000010000000000054 -:10CDC0001021000008008221000000008400000003 -:10CDD000000000030000000000050000100000003B -:10CDE000001082000800080800000800840000000D -:10CDF00000000000000000000005000041880388DA -:10CE0000009020840004000011100800000000843D -:10CE100020902100000000C021A0000840880004EC -:10CE20002184008400A0001000C000000000080061 -:10CE300008A002000304000003100000000000002E -:10CE4000000021080300000000020090050010000F -:10CE50000008110000000000000000000000400277 -:10CE60001000200041000590200000000800000094 -:10CE70000008088800A02008000200000800001038 -:10CE80000800000000049000000000054040000081 -:10CE900000110241000800080040024002000004A6 -:10CEA00002400041001000218221820500030000A1 -:10CEB0000000002000000400000008000000040042 -:10CEC000C00004000000000000040810080000007A -:10CED000400082000008000004050000000000007F -:10CEE0000021040004030000000082000000000094 -:10CEF0000000880000000000080500000800090488 -:10CF0000110041A0200004000000009005C0109016 -:10CF100000000090000000000000202000840508B0 -:10CF200000002000000000000000000000200000C1 -:10CF300000000000000000000000000000000000F1 -:10CF400000000000029010000000000000004100FE -:10CF50000000400000040000050000000000110077 -:10CF600000000088050240000000110000002100C0 -:10CF70000000000200020900400040880000410259 -:10CF80000000840000000100010084000000010096 -:10CF90000001010000C000000000000000000000CF +:10C4B00000E000000000000000000000000000009C +:10C4C00000E000000000000000E007000000820023 +:10C4D00000E0070000000000000000000000000075 +:10C4E000000000000000000000000000000000004C +:10C4F0000000AFAFAEAFFF00FF003F3F3030FCFCAD +:10C5000082BE0FFF0555303FAFAFF8F82828000076 +:10C510000000F0F0BEFF000000000000F0F0F0F0BE +:10C52000FF3CC300A8FD0303000000000000000062 +:10C53000FFFF0000FF00FE00000000000028FFFFDA +:10C54000E0EBF0FFFF00FF00ACACACAF0000085D1B +:10C55000AAAAF0F33CFF30F3000000000000000046 +:10C5600000000000000000000000000000000000CB +:10C5700000000000A5A5A4A5FF00FF00303030306A +:10C58000C0C082BE0FFF0FC3303FA0A0F0F000AAD2 +:10C5900000000000F0F0820000000000000000FF3A +:10C5A00000FFFF3CC300085DF3F300000000000043 +:10C5B0000000FEFF0001FFFFFEFE00000000000083 +:10C5C000FFFFEBEBFFFF5F5F0A0AACACACAC000017 +:10C5D00000FFAAAA000300C330F30000000000001F +:10C5E000000000000000000000000000000000004B +:10C5F0000000000000003CFF1C5FF0F0FF00550F42 +:10C60000550F04040F0F202C3C3C14003F00000089 +:10C61000EAFE000000007C7C2C2C000000FF0000E3 +:10C62000FFDCFFD0C8F808385555F0FF00000000C7 +:10C630003A300E0CC38241003C3C0000040008006C +:10C64000FFFFFFFF0F0F0F3C555500F00CCF8ECFB3 +:10C6500005870505FFC33F03FFF00F000000000042 +:10C6600000000000000000000000000000000000CA +:10C6700000000000040400043CFF3CFFFE40FE40BC +:10C6800055FF550004040C0C303C3C3C14003F00AA +:10C690000000EBFF000000007C2C7C2C000000FF61 +:10C6A000000023002F00C8F808385555000F00007F +:10C6B00000003F300F0C43024302A0FF00000000C7 +:10C6C0000000010001005555553C5555C3F30CCFF2 +:10C6D0000CCF0587AFAF55555555FAFA0A0A0061D8 +:10C6E0000006000D000000610006000D0000006162 +:10C6F0000006000D00000061000BC0050000006195 +:10C700003006001D000080610006001D00008061F1 +:10C710000006000D000000210003001100010000D0 +:10C72000006140050009000000610006009D000056 +:10C73000006100060005000000610007000900011B +:10C7400000615006000D00018061500500050000E9 +:10C7500000610E0F000D000000213E0BC000000024 +:10C76000000055550000000000000000D714EB2821 +:10C7700000BF00FFF0F0A0A0003C0040C3C3CBC34B +:10C7800000000000A00300FF3C007D7DC3C05550A9 +:10C7900000000000FF3CA52400AFFFAFC282C2C36F +:10C7A00000003CF03CFA0EFE04F400005050000083 +:10C7B000FFFFD7D782820FFF00F0F355F3000A3E48 +:10C7C000FFFF000000007DFDFFFD55550F0F15BF59 +:10C7D00015BF00000000C3C300FFA6A6AAAA909040 +:10C7E00020D0050555550000000000000000D714BA +:10C7F000EB28003F00FF000000FF003C004000006D +:10C80000000000000000A00300FF3C004141FFF0D9 +:10C81000FFF000000000FFC3A5810005FF05C282F4 +:10C82000C2C300003CF03CF00EFE04F40000000027 +:10C8300000000000D7F782020EFF00F1F355F3FF6E +:10C84000003CFFFF0000000000808280FF000F0F0F +:10C8500010BA10BA000000000F0FAAAAAAAAAAAA2A +:10C8600000000000000003030000000000000000C2 +:10C870005A5AFF00000000003C3C04040000000085 +:10C8800000000A000000000000F000F0D7D7CF0C35 +:10C8900050AA78AA00000000000000004040C0003C +:10C8A000C0E8FCFC0000FF0CAE0CFCFCFAFA000037 +:10C8B0000000AAFFEAFFAA00A0003CF53C05554194 +:10C8C0004141F0F0F0F000000000A8AAFDFF55552E +:10C8D00005AF3CFF3CF000000000D7D75F5F0005CC +:10C8E0000000003000900000000400000000000084 +:10C8F00000005A5A00FF02EAFF003C043C04080012 +:10C900000000000000000000000000F000F014141F +:10C91000CF0C5000780000000000000000005050D4 +:10C92000F000C0E8FCFC0000FF00AA000C0C0A0AA2 +:10C930000000000000FFC0FFFF00F5003CF53C05D3 +:10C9400055515151FFFFFF000000000008005D55E8 +:10C95000414105AF3C003CF0000000000000FF003A +:10C960000005050500300030200000000000000038 +:10C9700000000000000000000000000000000000B7 +:10C98000028003800180048000000000000000009D +:10C99000040000008800020088000400000000007D +:10C9A000000020004000210000030000000084007F +:10C9B000000020000008A0000200840000008800A1 +:10C9C00084088800020840000108018088808400F3 +:10C9D00084098890050321008380828301808580FB +:10C9E000848089888980889101800000000000008F +:10C9F0000000000000000000000004000000000033 +:10CA000000840040400410100208000000001100E3 +:10CA100000000000000000000000000041000000D5 +:10CA200000000000000000002000000000000800DE +:10CA30000000000000004000004000000000410035 +:10CA40004184000000002000000020000802402077 +:10CA500000400000204090040400084040082040AE +:10CA6000020809021010020820200820000000001F +:10CA700000000000000000000000000000000000B6 +:10CA800000000000000000000000000000000000A6 +:10CA9000000000000000002100000000000000096C +:10CAA0000000000000000000000000030000000083 +:10CAB000000000030003000000410000000000002F +:10CAC0000000000000040011000000000000000051 +:10CAD0000020000000000009000900040000000020 +:10CAE00000040000004000090040000000080000B1 +:10CAF000000002000000001000000000000000081C +:10CB00000008000800000000000000840000000091 +:10CB100000000000000000000010000000880084F9 +:10CB200000840084001000000000001000000000DD +:10CB30000010001000000008000000400084008485 +:10CB40000000000800C000880084000400000010FD +:10CB500008840505090800040408000802080010FC +:10CB6000000402100284048804000082058800107A +:10CB70000000000000000000000000000000002194 +:10CB8000000000000000001000000100000021056E +:10CB9000000000000000000200000000000500008E +:10CBA0000000000000400000881088000000000322 +:10CBB0000000002184212021000000008800204185 +:10CBC00008412021004100410000880090038408B2 +:10CBD0008840C0104002404040088411402120009D +:10CBE00000000121004182080209004020092003C1 +:10CBF000004100000000000000A000000000000054 +:10CC0000000000000000000021A00000080000005B +:10CC1000C0000010110003840000008200080082A0 +:10CC200000000010090000820500000800900000CC +:10CC30000000000000844008008200000010000096 +:10CC400011000908000040A009000010001010A009 +:10CC500003400000058285A100A1001000A0C110C2 +:10CC60008300008440042108080200A000A04100C5 +:10CC7000804010008200A000000000008200000040 +:10CC8000000000000000000040000000000900005B +:10CC9000C00000009000000000000000000900003B +:10CCA0000000000000000000000000418800A0110A +:10CCB0000005200300000041A01010080041020000 +:10CCC0000000900000000041C00990000000A0009A +:10CCD000880008000841000500044004040488009E +:10CCE0008800A000000002000403040008114000B6 +:10CCF000A0040040C00400040004000000000290F2 +:10CD00000000000000000000000000000000000023 +:10CD10000200000000000000009003C0204021003D +:10CD2000000440000000000000C0000800004000B7 +:10CD300000081182000000000084009020044002DE +:10CD40000020100000100482008211881008008268 +:10CD5000118840041100048220840088918809A071 +:10CD600010040288004000841120110200C000203D +:10CD700000040400008800820000000000000000A1 +:10CD8000000000000000000000000000000008009B +:10CD9000000000000000000000080000000000008B +:10CDA00000000000820800000000000800000008E9 +:10CDB0000000000500000021000000000008004104 +:10CDC0000000004000080809000000000000000901 +:10CDD00000000000100000030003A008004009103C +:10CDE0000083000800000003821108910002C000C7 +:10CDF0000000080800000008A0110000000000006A +:10CE00000000000011080000000800000000000001 +:10CE10002110000000002100000000C0000800A058 +:10CE20000082000002002110050800880000008434 +:10CE3000110208840010200020100000000040C0F3 +:10CE40000510001000C000A0000800A0001008009D +:10CE5000008420A0118220C00002210005900082E1 +:10CE600010100910009011A000A009020210008209 +:10CE700000101104000008880200000200000000F9 +:10CE800000000000000090000000200000000000F2 +:10CE90000200400000000020000000000800000028 +:10CEA00002000020A00000000008000082008800AE +:10CEB0000011000000119000002100040000000893 +:10CEC00000030008000082088200000082000800C1 +:10CED00000040000020002000000001088000000B2 +:10CEE00040000400A00000081000024008080000F4 +:10CEF00088050020A008020200080000004005008C +:10CF0000000400000000000000000000000000001D +:10CF10000000000000080000000000080000000001 +:10CF200000000090050800A02010000000A00000F4 +:10CF300000C0000000000000000000000008000029 +:10CF400000000082200800820908008400040420F8 +:10CF5000110809900004090400000210004000823A +:10CF60000000000800A011840000110400400040EF +:10CF7000008240C0099000840008021000001100E7 +:10CF800000000000000000000000000000000000A1 +:10CF90000001000000C00000000000000104840047 :10CFA0000000000000000000010000000000000080 :10CFB0000000000000C000000000000000000000B1 :10CFC0000000000000000000000001000000000060 -:10CFD00000000100000000C0000000000000000090 -:10CFE0000000000000000000000001000000000040 -:10CFF00000000000010000C0000000000000000070 -:10D0000001000000800000000300410080000000DB -:10D010000300000408000080000000000000000081 +:10CFD00000000000000000C0000000000000000091 +:10CFE00000000000C1000000C18301004000018278 +:10CFF000C020C000C1000004C0820000C0000111B8 +:10D000008800000000000000000000000000000098 +:10D010000000002005000080000000000000040067 :10D0200000000000000000000000410000000000BF -:10D03000000000400300008000000000000000002D +:10D03000000000020200008000000000000000006C :10D04000000000000000000000000000410000009F -:10D0500000000000204021000080000000000000CF -:10D06000000000000000000000000000410000007F -:10D0700000000000004020000080000000000000D0 -:10D08000000041000000030000000080000080005C -:10D090000000000005000480000000000000000007 -:10D0A000000000410000030000000080000080003C -:10D0B00000000000C100C00000C18000800000002E -:10D0C000002000410000000003000000008000007C -:10D0D000800000000000C100C08000C1800080000E -:10D0E000000000000041000003000000008000007C -:10D0F000800000000000C100C080004100008000EE -:10D1000000000000000800000100000000C0000056 -:10D11000200000000000C100410400040400C00021 +:10D05000000000000002040000800000000000004A +:10D06000000000000041C1410000C18302410005F1 +:10D070000891800080048841008080800011800237 +:10D080000883000000000400000000000000000011 +:10D09000000000004000C0800020000000000000F0 +:10D0A000000000020000030000000080000080007B +:10D0B000000000000900C10000C0800080000000E6 +:10D0C000000000410000000003000000008000009C +:10D0D0008000000000000500050000808000800046 +:10D0E0000000000000414100034100C10000204059 +:10D0F00021410040001004C180410041030089002B +:10D10000894100C1804000000000000000000000D4 +:10D110000000000000000200410800010000400083 :10D1200000000000000100000100000000C000003D -:10D13000200000000000020082A000050440400022 +:10D13000200000000000900010C0008508C004001E :10D14000000000000001000000000100000000C01D -:10D15000000020000000000002000802000504009A -:10D16000020000000000000100000100000000C0FB -:10D170000000200000000000020008020041400002 -:10D18000020000000000000000000000C0000000DD -:10D1900000000000000000000040000084000000CB -:10D1A000000000000000000000000000C0000000BF -:10D1B00000000000000000000040000040000000EF +:10D1500000002000000000009000C040008404C0D7 +:10D1600004000000000000010000010100C100886F +:10D170000101000100850000C1C182C1000101A0C0 +:10D180004000100100C1820100000000000000000A +:10D19000000000000000000000820000000000000D +:10D1A000000000000100000000000000C0000000BE +:10D1B000000000000000000000020000020000006B :10D1C0000000000000000000000000000000C0009F -:10D1D00000000000000000000000004000004000CF -:10D1E0000000000000000000000000000000C0007F -:10D1F00000000000000000000000004000000400EB -:10D20000000000000000000000000000000080009E -:10D21000000000000000000000000080000000008E -:10D22000000000000000000000000000000080007E +:10D1D0000000000000000000000000020000040049 +:10D1E0000000000000000000000000400000C183BB +:10D1F00000000000000004C1040001080000C1405C +:10D20000000000000000000000000000000000001E +:10D21000000000000000000000000000000000000E +:10D220000000000000000800000000000000800076 :10D23000000000000000000000000080000000006E :10D2400000000000000000000000000000000000DE :10D2500080000000000000000000000000800000CE -:10D2600000000000000000000000000000000000BE -:10D2700080000000000000000000000000800000AE -:10D28000800000000000000000000000000080009E -:10D2900000C10000000000000000000000C180008C -:10D2A00000110000000000000000000000008000ED -:10D2B00000C10000000000000002000000C180006A +:10D2600000000000000000000000000000800041FD +:10D27000C1830000000000418402800002C100411F +:10D28000C1C100000000000409410000000480004A +:10D2900000C1000000000000000000000004800049 +:10D2A0000000000000000011000003840000800066 +:10D2B00000C10000000000000000000000C180006C :10D2C000002000000000000000000000000000003E -:10D2D000800000C10000000000000000000000C14C -:10D2E000800000200000000000000000000000009E -:10D2F000800000C10000000000000000000000C12C -:10D30000000000030000000000000000000000001A -:10D31000400000C1000000000000000000000011FB -:10D3200010000000000000000000000000000000ED -:10D33000400000C100000000000000000000008369 -:10D3400010000001000000000000000000000000CC +:10D2D000800000C1000000000000000000000041CC +:10D2E0008000002000000000000000000000C1805D +:10D2F0000041800900004041000983C10403C1418D +:10D3000000808080000040410000800040820000DA +:10D31000200000400000000000000000000000416C +:10D3200020000000000000000000A0000104000038 +:10D33000400000C1000000000000000000000005E7 +:10D34000400000010000000000000000000000009C :10D350000000400000C100000000000000000000CC -:10D36000001110000001000000000000000000009B -:10D370000000400000C100000000000000000000AC -:10D380000011C000000000000000000000000000CC -:10D390000000000000000042000000000000480003 -:10D3A000810000E000004800000000000000004292 +:10D3600000914000000100000000000000000000EB +:10D3700040C088018288000001018200200801036A +:10D38000408900C040C000000101000040020108C7 +:10D39000000000000000000000000000000000008D +:10D3A000500000E00000000000000000000000004D :10D3B00000000000000000420000000000004800E3 -:10D3C000810000E00000480B000000000000004267 +:10D3C000810000E000004800000000000000004272 :10D3D000000000000000000000420000000000000B -:10D3E0004800810000E00000480B00000000000041 -:10D3F00000420000000000000042000000000000A9 -:10D400004800810000E00000480B00000000000020 -:10D41000000B000000000000000000000000000001 +:10D3E0004800810000E0000048000000000000004C +:10D3F0000042000000000000484200000000000061 +:10D40000480A811200E007004842000000000000C6 +:10D410004842000000000000000000000000000082 :10D4200000000000000000000000000000000000FC :10D4300000000000000000000000000000000000EC :10D4400000000000000000000000000000000000DC @@ -109936,204 +109936,204 @@ :10D5400000000000000000000000000000000000DB :10D5500000000000DE2E0000747B000000000000D0 :10D5600000000000000000000000000000000000BB -:10D57000000000000000DE2E747B000000000000B0 +:10D57000000000000000DE2E757B000000000000AF :10D58000000000000000000000000000000000009B -:10D59000000000000000DE2E615603400000000085 +:10D59000000000000000DEAE61F603400000000065 :10D5A00000000231E0000000000000000C4000001C -:10D5B0000000000002C06A866156034000000000BF +:10D5B0000000000002C06F866156034000000000BA :10D5C00000000231E0000000000000000C400000FC :10D5D0000000000002C06A8600006156034000009F :10D5E000000000000231E0000000000000000C40DC -:10D5F00000000000000002C06A866156034000007F +:10D5F00000000000000002C06A8660DE03400000F8 :10D60000000000000231E0000000000000000C40BB -:10D6100000000000000002C06A8688004000401040 -:10D62000208205058802C0008202C00988102000FF -:10D6300040002080200020108809C00020802000A9 -:10D640000404041004002000040021004003C00072 -:10D6500004002000C000820040020003C0008800D7 -:10D660000480400084008800400000000002200088 -:10D670002000200000808800400020000000820080 -:10D680008240824004C100008800880240A000005F -:10D690002004208004804002042004800400020052 -:10D6A0000000001102000401000000010400040059 -:10D6B00041084100051000000001000004000004C2 -:10D6C00000000983A0008400000080004000890061 -:10D6D0000000000000002000040000910000410054 -:10D6E0000000802000000400048400000084000189 -:10D6F00004820000000000040000000000000000A0 -:10D70000000000010001004000000000008500034F -:10D7100000000001000280408085800180400010F0 -:10D72000001000880010000901C00008012000104E -:10D73000000000020003000000100005004000008F -:10D74000004100020000008000200120008800004D -:10D7500000000000001000000004001000000000A5 -:10D760000000001000020000000000000082000025 -:10D770000000004000000002000000400080008027 -:10D7800000800000004100000000000000000000D8 -:10D7900000000088000000800000008000000002FF -:10D7A00000840085040404110010041120C00485C5 -:10D7B00000854108090920080040000809082001E7 -:10D7C000200000040909000005200085040900204C -:10D7D000004040080984208403000408401120A070 -:10D7E0000000000000080011001000840210001169 -:10D7F000000800104009040800110008000900405A -:10D8000000400440000820082084000040844000BC -:10D81000000800002004000800400010000420C0A0 -:10D82000000100050008201005090000900800050F -:10D8300000000010202100000121A0400000000293 -:10D840000021000200080010001000080000002164 -:10D850000110C00840000000000000020010000895 -:10D860000000000000000000000800080010C008D0 -:10D870000000A00000400080400011000004C0042F -:10D880000008000400001000880010000000008064 -:10D8900020C000000011208000400008000004901B -:10D8A00000000020088400008001840000000010B7 -:10D8B00000A00008000080000000081003830000A2 -:10D8C0000082000800A1000000000001000000002C -:10D8D000001040000084C1842100210000000000ED -:10D8E000000000080000000000000084000021008B -:10D8F00003000000000008890002800440000801C5 -:10D900000001100000010000030000000000000002 -:10D9100008400005000000008040000109000000F0 -:10D9200080400000000100008400C0002000C00012 -:10D9300008201000400000008200400004000000A9 -:10D94000000004800080A000A00005000000880006 -:10D950000000A00001008200080008000000820012 -:10D96000C0000800A00000000800100082000000B5 -:10D9700008000800080008000000A00000000011D6 -:10D980008200200020804000A000080088000000E5 -:10D99000A000000090004000000082002020050050 -:10D9A00040000580000000800088000000C00004E6 -:10D9B0000804000900404188000400000000000045 -:10D9C000000010000002100200840000400010005F -:10D9D00041A00082200404000004000000080000B0 -:10D9E00000002004200400000000008208881100CC -:10D9F00000000000100040000000000000040004CF -:10DA0000000000008000900403842108100400003E -:10DA1000000403040000088400000000410000002E -:10DA2000200483A0A02000000020C000080008847B -:10DA300082A182000800100000000800820000009F -:10DA400000020021821000000100000320051010D8 -:10DA50000808000008008240001000090000A00033 -:10DA60000000000008008200000000000021820089 -:10DA7000080000008200C000820082050000000053 -:10DA800010008900204008000821000300000880E1 -:10DA9000002100020800820020000100C080000078 -:10DAA000000001000088088001080000000000005C -:10DAB0008021002000008000000011100000000004 -:10DAC00000C000000000000000000800000000008E -:10DAD0000002000000000000000000000000000044 -:10DAE000000000080000000000000000000000002E -:10DAF000008810000000000000000000000000008E -:10DB00000002000040088001080000000000000042 -:10DB100000400000000100002000800002000040E2 -:10DB20000000000020020020000402000000A00904 -:10DB3000820508C14004A011000400098200020807 -:10DB40000800002190008200040082020000C00052 -:10DB5000000983840004A0A0010804040820000038 -:10DB6000000000002000200800211000000000003C -:10DB700004088200A00408001000100010210021F9 -:10DB8000A0008200A00010110800000020902105D4 -:10DB90000800100000001008900040000000200065 -:10DBA000000082002004C00020204008002008203F -:10DBB000080008000302000100080000000409003A -:10DBC000000000040200000000000000000000004F -:10DBD00000C02004400200000021040400002001D5 -:10DBE0000000002000000000000000000004000011 -:10DBF0000000000000000000000000000000000025 -:10DC000020000000000000000000000000000004F0 -:10DC1000200000000800000000000000000200C01A -:10DC200000000000000000002000000108000001CA -:10DC3000000108A00110C088C0820021040404056E -:10DC40004090004020401084001000A00008100800 -:10DC500000020000000108000000000000020002B5 -:10DC600084000000000000000000400000000000F0 -:10DC700010000000020000004000840021000200AB -:10DC80000400820002018400100000010000014035 -:10DC90000800000100000184200000C000000420F2 -:10DCA000008200000082830089830001A0C10084FB -:10DCB00020000021008003008400000004C02183B4 -:10DCC0000082000200852002808000C04080008029 -:10DCD0000080008000001040090900000000008062 -:10DCE0000080000000000300000200000900210085 -:10DCF0000000000000008800080080000000020012 -:10DD0000200080008000C02020210011002140055B -:10DD1000101140030020000020000000000000005F -:10DD2000800009800000400941030491091000852A -:10DD3000050205020008900020418004038009804C -:10DD4000110009000503820040030583A1000300C0 -:10DD5000A100C080850000000000900008080000BD -:10DD60000000000000000080000000000021000012 -:10DD7000000000000000000040000300050021003A -:10DD80008300820005004180200003000300A1A160 -:10DD90000580A0210300A0200000800000000000FA -:10DDA0000000008000048080890003A11111908090 -:10DDB00000800010000080090900A001A08808046C -:10DDC00020C04040000000010300000001090520C0 -:10DDD00000000400A0A00800000040000400A10111 -:10DDE0000000000090828400000400000000000198 -:10DDF0000000000000000000000000000000000023 -:10DE0000010002002000830010A001A000400100DA -:10DE100009090004824000000541000082840000DE -:10DE20000084000000040001040404000004010058 -:10DE300005049008008400A0C04088010001402033 -:10DE40008901004100024003208802000100010016 -:10DE50000900048500A00005000000010001000188 -:10DE6000000000000091000084820000000000001B -:10DE70000000000400101008000400000040002012 -:10DE8000900800C10041000404A100A100010100AC -:10DE9000040000C10002000004050201000000406F -:10DEA00084000004000000409021000000010800F0 -:10DEB00040C100C083002120C0C001C00004000593 -:10DEC00080094120002141840821009080034040C6 -:10DED0000520400800400011000800110008001053 -:10DEE00000210000000000020000000300091000F3 -:10DEF00000000000000200C10089008000000085D1 -:10DF000000408085000200820085801000830008A8 -:10DF10000403410300034085050388888020030033 -:10DF200000A10003008305100090000800024011CA -:10DF3000A100092104104020C1000903028500034B -:10DF4000000900808003210421042100100210A197 -:10DF5000910041800040008000000000000004218A -:10DF6000040020001109000000040000000040210E -:10DF70000900410005000000000000000000000052 -:10DF80000000000000000009008000020080004145 -:10DF90001184400409000311020003002000101046 -:10DFA00080020000008000008000000000000000EF -:10DFB0008011002000008000A111100410800200D8 -:10DFC0008809C0008204A0000100000101200000B7 -:10DFD0004103A10090024000001000000000C000BA -:10DFE00000010190000400002000002100008400D6 -:10DFF0000001000000000000000000000000000020 -:10E0000000000040000000000000004000900004FC -:10E01000000100410001000801000108A00000000B -:10E0200000010200A00000040000040000000090B5 -:10E030008800C001000182001000C1000140A084DE -:10E040000000000000E00700410A00000000070097 -:10E050004200000000E0000000000000000000009E -:10E060000000810000E00000000000000000070048 -:10E0700000000000000000000000000000000000A0 -:10E080000000000000000000070000000000000089 -:10E090000000000A0000000000000000000000E096 -:10E0A000000000000000000000000000000000E090 -:10E0B00000000000000000E007004200000000E057 -:10E0C00007004100C3C3FFFF00FF00FF0000000086 -:10E0D000FFC3FF3CF330F3300000000081818181F9 -:10E0E0003C303C3000000000000000007E7E4242D8 -:10E0F000FFFF000000000000000000000000000022 -:10E1000000006000000000000000F0B4F0B4000067 -:10E11000000067FF6700000000009999666600FF35 -:10E1200000FFC33CC33C00FFFF000F0FF0F0C3C370 -:10E130003C3C0FF00FF00F0F3C3C00FFFF009696A9 -:10E14000FFFF9966F0F00000F60699999999000092 -:10E150000000FFF3FFFCF330E724000000008181A2 -:10E1600081813C303C3000000000000000007E7ED9 -:10E170004242F0F0F0F0000000000000000000005B -:10E18000000000002400000000000000F0B4B4B45F -:10E190000000000064FF64000000000099996666BA -:10E1A000FF00FF00C33CC33C00FFFF000F0FF0F077 -:10E1B000C3C33C3C0FF00FF0F0F03C3C00FFFF000D -:10E1C000969600009966F0F0000000000000000044 +:10D6100000000000000002C07B0600000000008047 +:10D6200000800080010000802080000004000800CD +:10D63000008021001100208011000000000008007F +:10D640000080020083800490218084000000840018 +:10D6500000000500040005000100000305800080B3 +:10D660000120088021000410200405000000008033 +:10D670000000840088008200C1838910200984840E +:10D6800002A084042000040005C085101008008555 +:10D690008908018220840505000588080000000033 +:10D6A00000040004000420000004000400008000C6 +:10D6B00080000020900084008008A0000000050089 +:10D6C00080000002800002400002081000000000FC +:10D6D00000000000A000A000C000400000000410F6 +:10D6E000001004018002200080000401A00000005E +:10D6F00000020008000000C00000401040010000CF +:10D7000000210021040100008000C021400085A00C +:10D71000050808002041000204004120000000002C +:10D7200000000000000000000000000000000100F8 +:10D7300000000000020001000100010000000100E3 +:10D740000000000000000000000000000121004176 +:10D7500000000008000000000000000000080000B9 +:10D7600000000000010400000000000000080100AB +:10D7700000100005004101800008000800100104AD +:10D780000009010800020010010400040005000067 +:10D790000041000400840088000000C000410084B3 +:10D7A0000000000000000000000000000000000079 +:10D7B0000800040000000000040020001000000029 +:10D7C0000800000000000008000000840004088237 +:10D7D00000040082000000000000000000C0000003 +:10D7E0000000000800820884000800C000080382CE +:10D7F0004010008400082082080400000084008497 +:10D800002009001004040001000404C0208400105A +:10D810000000000002840305000400084103111009 +:10D8200000080000000000000008000000000000E8 +:10D830000008002100080000000000210005000091 +:10D8400001000008000300000121022100880200FD +:10D85000018800080008002100050441A1082008F3 +:10D8600000100000A000040504100021000984C07D +:10D87000000000210040000001200090000300058E +:10D880002041201000080010002182030008040835 +:10D890000208A00000044085002120020080001042 +:10D8A00008831005000000000000000000000000D8 +:10D8B0000000000000000000000000000000000068 +:10D8C000000004000000000000000400800041107F +:10D8D00080000240000000000000000080002000E6 +:10D8E00083000088000000008084808200820000A5 +:10D8F00041044184008200000088200100020800E9 +:10D900000800800880000908000000A02100000035 +:10D910008000800000000000801000100002000263 +:10D92000000800028000000000000000C0000000AD +:10D9300000000000000000000200C00000000180A4 +:10D940000000050004000000010000000000C0000D +:10D950000000090082008400000008002000200070 +:10D960000000008004080000000000000800000023 +:10D970000400080290008200C000010200002000A4 +:10D980000000410404808211C000C10290008200A6 +:10D990000400040000000400820000080400A0004D +:10D9A00082000020040000000000000000000000D1 +:10D9B00000A000000000000000000000000003A024 +:10D9C000042000C09000A100410004C000004100FC +:10D9D00000080000820003100000200421822004BF +:10D9E00089C000000020A084000000C0000403845F +:10D9F00000C0208200C14004410421C00484110001 +:10DA000080C000C004000004000000A02004200822 +:10DA100008900284031008C080820000008800A0E3 +:10DA2000008200820085008408040041000000009C +:10DA3000A0030000000000080400020000009000A5 +:10DA4000000010020400040800000000A021820869 +:10DA50000021000502408203400500000208020583 +:10DA60000205202001410000200000008221020860 +:10DA7000C000040001040804018300800040054048 +:10DA80002004200500050400080300118200201076 +:10DA9000000000080105080401408240C005022181 +:10DAA000000808410040082100100010000000009C +:10DAB00000000000000000080000800000000000DE +:10DAC0000000000080008000800000C0000000080E +:10DAD00000000000000000000000800021008084A1 +:10DAE00000002190A001200000008800000000003C +:10DAF00000000000800020010001200200040890C6 +:10DB000084008001A1080000804009000900410054 +:10DB1000000021C0008404000010020000C0214069 +:10DB2000001000C0021000020000000900A0004127 +:10DB3000C00088020008000000000000000040084B +:10DB400000000000020000001005000000A100001D +:10DB500040210009002108040010200808002010BE +:10DB6000C041C00240048241212082200004000004 +:10DB7000A0009000A01100032008882004100800D5 +:10DB8000000300800408402100048220840502056F +:10DB90000121404040058804880282054021081187 +:10DBA000001120218840000400208288002102000A +:10DBB0000000000000000000000000000000000065 +:10DBC000000000000040000020008000000000086D +:10DBD0000000000000000000A000000020022084DF +:10DBE000000008A02040800808C08483081120009D +:10DBF00000000000001000000000208400911100CF +:10DC00000010000000200040000409C000090304C7 +:10DC10000000400405A1000400C041000000000411 +:10DC2000000003000082108208014040002011081B +:10DC300000000000000001000000000000000000E3 +:10DC40000000C010900800889010020302888484AD +:10DC50009040108800408888908840C0040400C02C +:10DC6000821000000000C000000005020102081040 +:10DC70002020000041C00488C0020290030401007B +:10DC80001004A00420888900C100000400C00284A0 +:10DC9000C1A088004009000801081088820000081F +:10DCA0008402100289C1200410218882410291005F +:10DCB0008805820300000000400000000000000012 +:10DCC0000500000000008080008080000241820981 +:10DCD00084108090800011000080800080809180FE +:10DCE00000008080090021000000000090801000EA +:10DCF0008300000000008200A100008080800400FA +:10DD00000300820000000000080004000000000082 +:10DD1000840002800000808205802089800200004B +:10DD2000118000008080108411A1050400C08904C6 +:10DD30008305000480A180000000000500808010A1 +:10DD4000000000030000800080100080800011802F +:10DD500009110080C1038000009000000000200035 +:10DD60004003C082840080008000000080000240E8 +:10DD700010034140880000008000808480910000F2 +:10DD800010050521910590112000C09188C08320C5 +:10DD9000A00090C1118890800200000084114141D0 +:10DDA0009000880411801000090009009011C11131 +:10DDB000200021A1009191C10200020010010090F9 +:10DDC0000801880000008400880008000082080024 +:10DDD0008804020190400985880002028400000046 +:10DDE000C10021008384C0900800080000000800E2 +:10DDF00020001100101010000000080090C08210D8 +:10DE00000408008804C0A000108901C0918210A1FC +:10DE1000098309009083210509048382C00008005A +:10DE20000301090008010004C000201008000300DD +:10DE30000500A09009C000A0C089000000000000FB +:10DE40000100000004000000000000100088000035 +:10DE500020C01090018800910209101000000010ED +:10DE600011C0C0100084101102C0000000000000AA +:10DE7000000002028810000440030000040200A019 +:10DE80000441410200848402004101890011001014 +:10DE90000403100300908210008900C00083000872 +:10DEA000010890A0A08804400208880004080188A6 +:10DEB000A040888500880108110800C0000000000B +:10DEC0000000200000008000000040000000000072 +:10DED0000000808090100309418885C10009000975 +:10DEE0000089889080020004008880910000001161 +:10DEF000000400098082001100840408000005105D +:10DF00000010808240840003000300820211001090 +:10DF100000088021C1C0000880030010041000091F +:10DF20000089088900910010008500C100020002EC +:10DF300005C18889834100410884C0C10088000070 +:10DF400000020080000000000004000000008002C9 +:10DF5000008200800000C1102104918090400000E8 +:10DF60000011008000008080808800800010000088 +:10DF70000000000000000003808400008008000012 +:10DF8000001180830080000011894004C0008011CE +:10DF9000098004A0A10000400004000200800041AC +:10DFA000218009200200411180848040000000850A +:10DFB00041C0400808004003C12010028580901035 +:10DFC00000000003000200000000000300840000C5 +:10DFD000C00100108840100091888888020809015B +:10DFE000C000000202848800C0400409021002013F +:10DFF0000000000200C0000088C00420209004013E +:10E000000000840120214002400010C021A040C037 +:10E01000080002404005098800010220000110406C +:10E0200090010110008901C00001C04008080202EF +:10E03000A00800A0018801100101118400C1109006 +:10E04000A100008200E007000000000000E00700DF +:10E0500000000000000007000000000000E00700D2 +:10E0600000000000000007000000000000000700A2 +:10E0700042000000000000000000000000E0070077 +:10E08000000000000000000007004200000000E067 +:10E0900007004200000000E007000000000000E070 +:10E0A00007004211000000E007000012000000001D +:10E0B00007000000000000E0070000000000000072 +:10E0C00007006012000000000000000000000000D7 +:10E0D000000000003C3C3C3CE7E7E4E4FEFFC242B9 +:10E0E000FF007F763030F3F3E7E7E72466FFFCF0CC +:10E0F000F03CF0660000000000000000FFFFFEFCA6 +:10E10000FFFFFFFF00003F303F30808C838FF3F331 +:10E11000030399F0993066666666F9FD60643F3FD7 +:10E120000303FCF333F000000000F0F2FFFF66FC95 +:10E13000663C66666666000000006666F0F0FFFFFB +:10E1400093930F03F9FD00000000000000000000A1 +:10E150000000000000006666F0F02424E4E4BCBD8A +:10E160008000FF001910F3F3F3F32424E724660082 +:10E17000FCF0F03CF03C0000000000000000FEFC61 +:10E18000FEFCFF7CFF6000006F6F6060B0BCB3BF3F +:10E19000FFF00F0099F099F00F00FFF0F9FD6064B7 +:10E1A0007E7E42420FCCCC000000000000020F0F28 +:10E1B000660C663CFC0CFC0C00000000E724F0F050 +:10E1C000000093930F036064000000000000000053 :10E1D000000000000000000000000000000000003F :10E1E000000000000000000000000000000000002F :10E1F000000000000000000000000000000000001F @@ -110141,397 +110141,397 @@ :10E2100000000000000000000000000000000000FE :10E2200000000000000000000000000000000000EE :10E2300000000000000000000000000000000000DE -:10E2400000000000000000000000107699FFC0FCF4 -:10E2500000003C3C181E303030303C0F660F000090 -:10E26000C3C3FFFFC3C3F00000000000000060F064 -:10E270000000069F069F00FF666600000000000089 -:10E28000000000000000000000000000000000008E -:10E29000000000000000000001433D7F000000007E -:10E2A000FFFF0000669966990F0FF0F03CC33CC376 -:10E2B000F0F0F0F00FF00FF0FFFF00000F0FF0F0A4 -:10E2C0003C3CC3C33C3CFF003C3C999900009999FD -:10E2D000C0FCFFFF3C3C181E3C3C3C3C0F0F0F0FAA -:10E2E000FFFFC3C3F0FFC0C3F00000000000000048 -:10E2F00060000000069F069F00FF666600000000A9 -:10E30000000000000000000000000000000000000D -:10E31000000000000000000000000000FFFF0000FF -:10E3200000000000FFFF669966990F0FF0F03CC3F4 -:10E330003CC30F0F0F0F0FF00FF00000FFFF0F0F88 -:10E34000F0F03C3CC3C33C3C00FF3C3C66660061D3 -:10E35000000F050D00A00061400E001D00010061CE -:10E360000004000D000000614006001D0000006177 -:10E370000005C00900000061000E000D00000061F2 -:10E380000006000D000000610006000D0000000006 -:10E3900000610006000D000000610006000D000095 -:10E3A00000610006002D1002406180010021100272 -:10E3B00040618006002D100240618007002D100290 -:10E3C0004861800F002D10024861840F022D101249 -:10E3D00000000000CF0C1414003E003F0F0E0000A0 -:10E3E0000F0FFF00A2AEA2AE0000000000F500C3B8 -:10E3F000000C00000010001000000000F0F0000011 -:10E40000A2AAA2AA3C3C3C3C0000000000FC00FC8C -:10E41000000000000000AAA0AAAF000000000A0847 -:10E42000FFFD80C0A8FC00010001FF7DFF3CFFFF55 -:10E43000F8FF000000000A0A00000000000033009E -:10E4400000330000000000140028B0BEF0FF000000 -:10E45000000000000000CF0CD7D7C13EC03F0041F4 -:10E46000FFFF0F0FFF00A2A2AEAE0000000000F5FC -:10E4700000C3000000000000000000000000F0F0F9 -:10E480000000AAAAA2AA0000000000000000000CE0 -:10E49000000C000000000000AAACAAAC00000000C4 -:10E4A0000008F5FDAAFFAAFF00000001FF7FFF3F63 -:10E4B000F8FFF8FF00000000000F0000000000005F -:10E4C000330000330000000000410082F0FFF0FF45 -:10E4D000004182C30000000000000505141414145C -:10E4E0000E0F0E0A3C7DBEFF28287D7D0000000037 -:10E4F000000303030F000F000000005500000000A0 -:10E50000000000000A0A0A0A0000000000000000E3 -:10E51000000000000000000000003030F3F30000B5 -:10E5200000000055AAFF00D3D3D3CFCF0045FFDFB3 -:10E53000FFCFFEFFBEFF0000000000000000000053 -:10E540000000000000000410014003C00C3008026D -:10E550000000000000000000000004040404003C6F -:10E560000C0C0E0F0E0A004182C3202A757F00009A -:10E570000000000003000F000F0000000055000025 -:10E580000000000000000A0A0A0A00000000000063 -:10E590000000000000000000000000002830EBF345 -:10E5A0000000000080D5A8FD00FBFBFBCFCFCF45CE -:10E5B000FF5FFF0FFAFFAAFF00000000000000004D -:10E5C00000000000000000000820028003C00C30A2 -:10E5D00000000802000000000100050021002000EA -:10E5E00004000400C00004008808000003808805BF -:10E5F0000000010800002010410020904090080217 -:10E6000020002020041020000000C000880020000E -:10E61000040800008800210000032000880820036F -:10E6200000200000840484004000040000008800F2 -:10E63000000000008800020020002180200020024D -:10E640000020000020008800200084008800841042 -:10E650000000040084008800030020002000200047 -:10E6600000008000800000008400000004004002E0 -:10E6700000000000020004000401A0000002800469 -:10E680008401000000018000000004000000200060 -:10E6900004008000000000000800000041000400A9 -:10E6A00000000401000000010000800000000500DF -:10E6B0000400000000000000000000004002800094 -:10E6C0000001000100000000000000000000000048 -:10E6D0000001000080000000000084000000000035 +:10E240000000000000000000000000000000FFFFD0 +:10E25000FFFF0000000009096F6F4B004BFF7F7F3D +:10E260001F1F66666666B0BFFFFF90F690F690F6D9 +:10E2700090F67E3F7E7E3C3C3C3C000000004242EB +:10E2800000003EFFFFFFFFFFFFFF00001E1E1E1EDF +:10E29000998866440F0F3C3CF960FF662424E7E749 +:10E2A000990900000F0F00FF00000000930093FF8A +:10E2B000C390C399F63CF63C0606F6F6663C000FA2 +:10E2C00000FC03FF0C0CFCFC81819090000000001E +:10E2D000040004000000000018187E7E4B004BFF75 +:10E2E00070701010660F3C3C202F000090F691F7E4 +:10E2F000187E187E42034242660F666600000000E8 +:10E30000030300003E3EFFFF3E3E3EFF000000993B +:10E3100066FFFFCCFFCC0F0F3C3C99009F062424E6 +:10E32000E7E7000900000F0F00FF0CCF000093008B +:10E3300093FFFF90FF99063C063C36363636660062 +:10E34000000F02FE02FE0C0CFCFCE7E7F6F6006193 +:10E35000003F000D00000061000F000D0000A00054 +:10E3600000080090000000610009000100008061C9 +:10E37000000E009D0000A061200E004D000800610D +:10E380000006000D00010061000F000D00000000FC +:10E3900005610A0E050D00A000610E0F000D0000C2 +:10E3A00000610E0F000D000000610E0F000D000057 +:10E3B0000061000D00090001A061000E000D0000C9 +:10E3C00000612007000D000100610E0E029D000596 +:10E3D000000000000000000000000000000000003D +:10E3E000000000000000000035F5F5F5A0AFA0A387 +:10E3F000000000002828EBEB0000000000000000F7 +:10E4000000000000000000000000000005F305030C +:10E41000000000000000AFAF832C0000005FF52873 +:10E42000F57D00000000DF00FF0000000000AF836A +:10E43000AF2C0F000FFFFCFFFCF000000000003CC1 +:10E440000034FFFF5500F0FCFAFAFF000F0F000048 +:10E450004505000000000000000000000000000072 +:10E460000000000000000000000035050505A0AF19 +:10E47000ACAF0000000030F330F30000000000C03B +:10E4800003C30000000050FA000000000000F5F394 +:10E49000F5030000000000005F5F431C0000000A5D +:10E4A000A028A07D00A0FFA0FF00FF00000000004A +:10E4B0005F435F1C0F280FFF0C0F0C0000000000D3 +:10E4C000FF3CFF3EFFFF5D0CF0FCF0F03C3C55557F +:10E4D00000005515000000000000000000000000D2 +:10E4E000000000000000000000000000550F553C37 +:10E4F000FCFCF5F50000000000000000000000003A +:10E50000008000000000000000000000000000008B +:10E51000F5F5C1340000000000000000000000001C +:10E520000000F0ACFFAC00000000000002000000A2 +:10E5300000005FF51C340C0CFCFC3CFFBEBE000070 +:10E540000000FFC3FFC3FCFCF505EB0B3C3C0000E7 +:10E5500050FA4141050500000000000000000000E5 +:10E560000000000000000000000000000000553C1A +:10E57000553C0C0C050500000000000000000000E8 +:10E58000000000000000000000000000000000008B +:10E5900000005F5F431C000000000000000000005E +:10E5A0000000000000AC0FAC000000000000000004 +:10E5B000000000005FF543C1FCFCFCFC00C382824C +:10E5C00000000000FFC3FAC20C0CF505EB0B0000C5 +:10E5D000141450FAEBEBAFAF040004000400040085 +:10E5E0000000000000000000000000000400000027 +:10E5F000008000000000000020002000200020001B +:10E6000088008400010084800000000001000000F8 +:10E6100000A0018004004100000320000400041059 +:10E62000008000008900030000000020C10040803D +:10E6300001000184840010802080210020800000DF +:10E6400000900000081000080010000084208500E1 +:10E6500000850400210220850110800080008000D8 +:10E66000800000000000000000000000000000002A +:10E670000000000800000000000000000000000092 +:10E68000000000000000200000100000000040001A +:10E6900000000005200280008800000000008000CB +:10E6A00083010010000004000800000000C1080001 +:10E6B00080200400020509008004000440000002DC +:10E6C0000084000800008000000005000400020132 +:10E6D0000800000400001085040240010000000052 :10E6E000000000000000000000000000000000002A :10E6F000000000000000000000000000000000001A -:10E700000000000000000000000000000080000089 -:10E710000000000000000000000000000000008079 -:10E7200000000000000000000000008000800000E9 -:10E730000080008000000000000000800000000059 -:10E7400000800080000000000000000000000000C9 -:10E750000000000000000000000000000000008435 -:10E7600000100010001000840084000800840000E5 -:10E7700000000084000000100000000800400010AD -:10E780000000000000100088008400880082000261 -:10E7900000000000004000400088000800840000E5 -:10E7A00000020084008400C0000800000002001085 -:10E7B0000000004000100008008800080010000859 -:10E7C00000880004000200000008000000000008AB -:10E7D0000000000000000008000800880008000891 -:10E7E00000040003000000000041000020100003AE -:10E7F00000050002000000020021000500020103E4 -:10E800000000200000A1202100200003008500005E -:10E8100000000000000800210020002082200008E5 -:10E820000000000300050002000500030041000293 -:10E830000008000000090005000000080041000376 -:10E84000004100008208000000080000882100004C -:10E850000000008000000000000000000008000030 -:10E86000088009A1000009000508088203000500CE -:10E87000210000000001000000C121000000000094 -:10E8800002840000A182030480000085008421022C -:10E8900000880000210000000000030121090001A0 -:10E8A000000000000510410000830000000003008C -:10E8B000000000000000030000C00500000000A0F0 -:10E8C0000800000000000800030000020000000033 -:10E8D0000000000008200582030041000000050040 -:10E8E0000800882008000080820002000200040066 -:10E8F00000000800400008000800080008000400AC -:10E9000000008300000082088400400004008900A9 -:10E91000080005000080050000004000820004009F -:10E92000C0000080000004000880408082200800B1 -:10E93000C00040000800C000C000040008008200C1 -:10E940000000A000820000808200400041008200A0 -:10E950004000C000820004000000080082000000A7 -:10E96000820000008400000000040000800080009D -:10E970000082088400080000210000100008004008 -:10E98000000000000200000000900000000080A0D5 -:10E99000040000A00400081008000900000800009E -:10E9A0000000000003200000000000020010080129 -:10E9B0000000080080000000000008A00000000027 -:10E9C00041000000000000000010000000084000AE -:10E9D0000000050000000000080004000000000026 -:10E9E0000300000000000300C00800040000012133 -:10E9F00000080008820000020003C00000020010AE -:10EA000000000000840000088200000008080800E0 -:10EA1000040800218400C008A005000500002000B3 -:10EA2000000582008200C000000040080000400095 -:10EA30004000000002410802002100000800000020 -:10EA400000410800000082000080000083100020C8 -:10EA500004008200A00000000000C02100020100AC -:10EA6000400000A0090000000082000800C100C0B2 -:10EA7000200800000088030000A108000000030136 -:10EA800000000000000000000084030009080000EE -:10EA900000A0830003000000000000000008000048 -:10EAA0008000000000000000000000008000000066 -:10EAB000800880000000850000000000000080A0A9 -:10EAC0000800000005000000000000020000200116 -:10EAD0000001910000902100080000C00800000023 -:10EAE0000400808400210800000003029009202116 -:10EAF0000004204100000808002120080400C00094 -:10EB00000041042182088240000000000008000843 -:10EB100004058208902004054008C02100028221DB -:10EB200000210400822100210000A0110000000249 -:10EB300000020008000082210021002100210400C1 -:10EB40000021404000210800004100080041000968 -:10EB50008200000200000000402100088800000040 -:10EB6000A00000000000000908050010008200005D -:10EB70008000000180000000000000000000000094 -:10EB80000000000000000000000000000000000085 -:10EB90000000000000000001000000000000000173 -:10EBA00000000000800000000000000000000000E5 -:10EBB000000100080000000000000000000000004C -:10EBC0000000000000000000000000A000000000A5 -:10EBD00000000000000000000000800000000000B5 -:10EBE0000000000000000000000000000000002005 -:10EBF0000088002185880010C0881040000008109F -:10EC000000010000000000000240000200A000041B -:10EC1000A041C0008490009000000000000290829B -:10EC200001020002C1884002000000000000000054 -:10EC30000000C040000800821041400000000200B7 -:10EC40000000000000000088008808009000A0007C -:10EC5000C0004000008240000082000182000001EC -:10EC60000000400000004000040000A0890200886D -:10EC7000000804A003889020008380000580000025 -:10EC8000800000080000001000108080000000805C -:10EC900000808008201104090009000000000080A5 -:10ECA000000009002109029000800000000000001F -:10ECB0000000000080830080000000108000110030 -:10ECC000840000000000000000000000850021001A -:10ECD00000000000040409898400000340020021B0 -:10ECE00000050020820011008000800000802100CB -:10ECF00000000080410040A002C00303800000002B -:10ED00008010000000800900000005408000000520 -:10ED100080080000910820099008C02100008000B0 -:10ED2000090011002000210082000502000080007F -:10ED3000800900800000808089008202C0A1C1009B -:10ED40009000204000008000800080008000800053 -:10ED500000008000800011008300000040800080DF -:10ED60000000000000030200200000110000080065 -:10ED7000020508802003002000C1014000A04000DF -:10ED80000000A0C00000001000000000000108000A -:10ED900000040803020004011100A1018301200006 -:10EDA00002000000000082208900A00082052000EF -:10EDB000400210000202000040041000090010058B -:10EDC000882003000500100004000800A0000800CF -:10EDD00008002000080082000000020000004090AF -:10EDE00000020000000000410100000000000000DF -:10EDF00001880100010200039004009105414001D7 -:10EE000000020002008400C00000000000010000B9 -:10EE10008820008800002100000140A010C182C1AC -:10EE2000C0000000C0A00040C00100030405101095 -:10EE300000000000840000000000049000A01011F9 -:10EE400008A00090009102A101080000000000400D -:10EE5000A04000040041900800A0400290019121D0 -:10EE6000000100000000010000000091000408A162 -:10EE70000004C100000000010200002003038282A0 -:10EE80000540000500200083024000000020002112 -:10EE90000000000000000000090000209084902184 -:10EEA000100880000000000000008021008800A100 -:10EEB000000904000000800003000000804103906E -:10EEC00080A1809100410003802108A00000000083 -:10EED00000008000008900900089008080A18010DF -:10EEE000A121000800002000400000000490001054 -:10EEF0008021000088090000002100001120C100CD -:10EF00000200C010000000200000000021202100AD -:10EF1000080002080008000080808000A184210011 -:10EF2000000000020000004100008008C18082044F -:10EF30000300020200110009008000000000092106 -:10EF40002182020009000000409109804003000076 -:10EF50000000008000000000000000800000A18090 -:10EF60002084898000002100110011000000008031 -:10EF7000000900000040C00002090300081090834F -:10EF8000080041000800000010891010000001A0D6 -:10EF90000000010001019001880240840400090280 -:10EFA000908202C002010000A0A02000040108021B -:10EFB000108888C0000000010088004000000000A8 -:10EFC00000010009018200000000000900020001A8 -:10EFD0000000008800080000000000A000040000FD -:10EFE000052000919090000001000000000000004A -:10EFF000000800000000000008101100400001009F -:10F00000000000E000004200000000000700820055 -:10F0100000000000000000000000000000000000F0 -:10F02000000000E0000000000000000007005000A9 -:10F03000000000E00700880000000000070000005A -:10F0400000000000000007008800000000E0000051 -:10F0500000000000000000000000000000000000B0 -:10F060000000000000E007000000000000000000B9 -:10F070000000000000000700000000000000070082 -:10F080008800BC43906F3F033F03AAAFAAAF0004C0 -:10F09000000000000000000000005A569AA65353DA -:10F0A00053533000F00055005000F03CF03CFFFF9F -:10F0B000FF00000F0000000F000000000000000033 -:10F0C0000000000000000000B000FFFF0000000092 -:10F0D00028F8FFFF00000000000000FF0000000013 -:10F0E0003430F7F30000F0F00082008200000000EE -:10F0F00000000000000000006000006000005FF5FC -:10F1000000000000906FBC433F033F03AAAFAAAFCB -:10F110000000000000000000000000009AA65A56FF -:10F1200053535353F0F0F0F055005000F03CF03CD6 -:10F1300000FF0000000F00000000000000000000C1 -:10F1400000000000000000000000000000000000BF -:10F15000000028F8FFFF00000000000000FF000092 -:10F1600000002030E3F30000F0F000820082000095 -:10F170000000000000000000000009000009FFFF7F -:10F180005FF500000000CCCCC3C300000000FFFF0F -:10F19000C3007D557D5500000000000000000FF009 -:10F1A0000FF0FFFF000000005C5C0BAB0000F0F014 -:10F1B000F0F078787878AAFFFFFD141014000000B2 -:10F1C0000000EBD7EBD7000041000000FF0020005B -:10F1D000000000000000000001010101FF14FF0415 -:10F1E00000000000D755D4553C3C3C3CFFFFF5F5F2 -:10F1F000000000000000000000000000000000000F -:10F2000000000600000000003C6C336300000000BA -:10F21000FFFFC3007D7D7D7D000000000000000039 -:10F22000AA55827D00D7000000005C5C0BAB0B0B85 -:10F230003C3C3C3C78787878FFFFFFBE0000000043 -:10F2400000000000EBD7E0D7000041002000FF00E5 -:10F2500000000000000000000002010101010000A8 -:10F26000000000000000175514553C003C00000051 -:10F27000000000000000000000000000000000008E -:10F28000000000009000000000000061300100114B -:10F2900000000061000E001D000000610006000D6E -:10F2A0000000000030000000000100610007000DB8 -:10F2B00000000061000E000D00008061000F0019C9 -:10F2C000000005000A08050000A000000061000E13 -:10F2D000000D00A000610005001D000100000000FD -:10F2E0000000000100610006000D00000061000D3B -:10F2F000000D000000610006000D00000561000E19 -:10F30000050D00000561400E000D00A0FFFF5F0F1E -:10F310002FFFFFFF000000000300C30082D780D54D -:10F32000000F000F000000000000000000000000BF -:10F33000000000000000000000000000FFFDFF15BD -:10F340000020202000000000000000000000BF009E -:10F35000FF0000030000E000E000080A08080000C9 -:10F360000000000000000000000000000000FFFF9F -:10F370000FFF9F9F000050A0000000000000000051 -:10F380000000000A000A822804A13C003C00FFFFA4 -:10F390007F3F28FFFFFF000000000000C000AAFF21 -:10F3A000A0F5000F000F000000000000000000FFAB -:10F3B0000000A200AA0000000000000000002B00D6 -:10F3C000FFFF0020002000000000000000000000FF -:10F3D000BFB7FFFF00030000E000E000080A0000E4 -:10F3E00000000000000000000000000082C082C099 -:10F3F000FFFF0FFF9F150000500A000000000000F3 -:10F400000000000000440044144108A2FFC3FFC3F1 -:10F41000FFFFFFFFFEFFBEFF000000000000000036 -:10F42000C3C3F0F000000000000000000000000076 -:10F43000000000002F3F00000000000000AAAAAA60 -:10F44000000F000F0F0D0F0500000000000000006E -:10F45000000000008282000F000000000000410157 -:10F46000410100000000000000000000000000005A -:10F470000000003C00000000000004010802000041 -:10F48000000000000000606060600000000081215A -:10F490003003FF57FF03FAFFAAFF0000000000003F -:10F4A0000000C3C3F0F05050000000000000000056 -:10F4B0000000C343FF5F2F0F00000000000000AA00 -:10F4C000AAAA000F000F0F050F05000000000000A2 -:10F4D0000000000000008282000F00000000000019 -:10F4E0004101410100000000000000000000000098 -:10F4F00000000000000000003030000010402080BC -:10F5000000000000000000000909090900000000D7 -:10F5100003090CC0040020000400040020080400BB -:10F520002010880000008800040004008800840087 -:10F530000400040088000400040084000200880025 -:10F540002000200004008410040084000400200037 -:10F5500084082000000088000400200084000000CF -:10F5600020108800840000000200000082000000DB -:10F57000840020002000000004000400200000009F -:10F5800088002000840000008800820004008400BD -:10F5900004000400880000000000000005000000D6 -:10F5A0000900000020000084000005002000000089 -:10F5B000000000000000000020000000000000002B -:10F5C00000000400040000000900200020000900E1 -:10F5D000090004000000000000000900040004000D -:10F5E00000000000040000000000200000002000D7 -:10F5F00000000900090000000500000000000000F4 -:10F6000000000000000000000000050004000000F1 -:10F6100000000500090020080000000000000000B4 +:10E700000000000000000000000000000000000009 +:10E7100000000000000000000000000000000000F9 +:10E720000000008000000010000000000000000059 +:10E7300000000000000000000000000000000000D9 +:10E7400000090000000000000000000000000000C0 +:10E7500000000000008000000000008000000000B9 +:10E7600000000000000000000000000000000000A9 +:10E770000000000000000000004000000000000059 +:10E7800000000000000000000082000000000008FF +:10E790000008008400840000000000000008000061 +:10E7A000000000820020000000880000008400407B +:10E7B000000800080008004000000010001000825F +:10E7C000008800100088000800080008008200404F +:10E7D0000040000800080004000000000020004085 +:10E7E00000000000000000000000000000210041C7 +:10E7F00000410008000000080000000000020000C6 +:10E8000000210000000000000108000000080000D6 +:10E8100000210000000000100021004100080082DB +:10E820000000000509080008000800030008400374 +:10E830000000000302100003002100412105002117 +:10E840000000000800034021408800C000020010C2 +:10E85000000000000405000400000808000900088A +:10E860000200000000A0000000A0000000820000E4 +:10E870000000000000000000002000A0000000A137 +:10E88000000800C020080008000020080000000068 +:10E8900000822002000000081108000000080000AB +:10E8A0000020000000028408110000001182008294 +:10E8B0008000008200A0C10003A00000008284A0AC +:10E8C00000080000008400A08008800921410500A4 +:10E8D0000801000041A088000885000280000310A4 +:10E8E00003C08808020000000000000000000000D3 +:10E8F000000000008200000000000000880000000E +:10E900000000000000000000400040002000200047 +:10E910000000890000800000C0000000C0009100DD +:10E920002000912000000000C080830000800800CB +:10E93000A000A00082000000000002000080000093 +:10E9400000804002820000004000000090000200B1 +:10E95000080040008880000004009000008004004F +:10E960000000040082000000000000000000000021 +:10E97000000000000000000000000000090000008E +:10E980000000000000000000000000000200000085 +:10E9900080000000200000100000030003000000C1 +:10E9A0000410800020010000000808204000000240 +:10E9B00000000800000800080040000000000020DF +:10E9C000000000040041000400900000000000006E +:10E9D0000000000000000020000000000090002067 +:10E9E00080C0000080000000000000000000000067 +:10E9F000000500000000000000080000000000000A +:10EA00000000000000000000820000100008000567 +:10EA10008200000020002000A003C0218210C0035B +:10EA2000018084000402014100000021A0030021B4 +:10EA30000810080804208209000001200420004179 +:10EA40000008C041202000044004004000410809A3 +:10EA500000050003C002002100410000200000105A +:10EA6000010300410002004100000000000000849A +:10EA70000000000000080000030000020000000881 +:10EA80000084000020100082208400C00088000064 +:10EA900011A000000000A084801000000000000011 +:10EAA0002000202000A0A0C1200000000084000061 +:10EAB0000088000000C08083000000080801800377 +:10EAC0000008200200108501084191090082000021 +:10EAD00020821102001000100000050000840310C5 +:10EAE00000842008000000080082111000000000CF +:10EAF000000000000000000500210041002100414D +:10EB000000000000000000000000000340000200C0 +:10EB10000800084182800000000040089011900524 +:10EB20000802A0110009820400092000000000046E +:10EB3000A00008004000000805000011080088003F +:10EB400020048403A0000000414140000311200480 +:10EB50000003000000110040404000410008400058 +:10EB600040210400001102100004001100400000C8 +:10EB70000000000000000000000000000000000095 +:10EB80000000000000000000000000000040000045 +:10EB90000000000000000004000000000000000071 +:10EBA0000000000000000000000000000000000065 +:10EBB0004100080000000000000084000000000088 +:10EBC0000000000000000000000084000000400081 +:10EBD000000000000000000000080201000000002A +:10EBE0000000000000000000000000000000000025 +:10EBF0000404909000109008000000000000000045 +:10EC000000000000000000000100000010000000F3 +:10EC10000000000000000000C1C18204A08204A026 +:10EC200000000000C000000090040111C1008282B9 +:10EC30000000028201000004040402009000100899 +:10EC40000410A0880090C09090900401918304006B +:10EC500084880000000084000001201000200004CF +:10EC600088401010000000A084A088A001108484B7 +:10EC700002A0000080800080808000000000000072 +:10EC80000000000000000000000004000000000080 +:10EC900000000000000000000000820821910485AF +:10ECA0000021040021000000000000040884041179 +:10ECB00000000000800003000000808080008400CD +:10ECC00000808000800002800000008040418311AD +:10ECD000111000040309052185020009028000804B +:10ECE00000000000008000001180000040854020EE +:10ECF0008020004000000004008080000000000030 +:10ED000000000000000000000000000008002100DA +:10ED10000500418000000000000000008800830220 +:10ED20000889118509100204090021008009209139 +:10ED3000C003119100000900040089000080400018 +:10ED400002100500C080100010C091202180030532 +:10ED50002010104190C041000800404020210000D8 +:10ED60008000000080000000808500058000038096 +:10ED70000221A100C140020004008882900000002E +:10ED80000000000000000000000000000000010082 +:10ED90000000010001A00000000000000000891038 +:10EDA000410003C102200000000000100100A0107B +:10EDB0008403A190A0050000C0008400A00084107E +:10EDC000400002A0038283A088002140A082210489 +:10EDD000208204A1C1008208A00001000100C0112E +:10EDE00004000800020008A0880090C0881110C02C +:10EDF00004089000A1020984404000109088100887 +:10EE00000000000000000000000000000000000002 +:10EE100000000000000100010000000000000000F0 +:10EE2000008401051002C00800000001000000017C +:10EE30000440098203044089000040000010C0C063 +:10EE400010030002000200C104A011840004028823 +:10EE5000C089000940890440A0210001010084000C +:10EE60000001C0400010840485C00000000800407C +:10EE7000010802200100011140C180800080800053 +:10EE80000080000000000000000000000000000002 +:10EE90000000001100040008002000000000000035 +:10EEA0000000001008089191009000020003000487 +:10EEB0000404891020118890059100008009000544 +:10EEC0000009840200020082004000A0C0040091FA +:10EED00080110902008888889100054000400809D7 +:10EEE00003090521808000008000A18000000080CF +:10EEF00000800880000020040521114180028089E3 +:10EF00000080800000000000000000000000000001 +:10EF1000000000000080000000000002000000006F +:10EF200000000000C1A088A11080100280028000B3 +:10EF30008000000204A184054100021100000000CD +:10EF4000000400800010000000090000800580021D +:10EF5000008980808010214002854080C00341806C +:10EF60000384218004030000004000910000002081 +:10EF70000002000080000921A1850980200990007D +:10EF80001010104008000000000000000000000009 +:10EF900000000000000000880000000000010000E8 +:10EFA00000000000000008051109A0400400020450 +:10EFB00020000800000104C19104028283000000C7 +:10EFC0000088000200840000C090C010A0C00200B1 +:10EFD0000205888290401000031088080340110049 +:10EFE0000140010301100101000000040091000034 +:10EFF000040184054004A000010108109004C10030 +:10F0000000000000070000000000000000000000F9 +:10F010000000000000000000000000E00000000010 +:10F020000000000000000000000000E000008182FD +:10F030000000000000000000000000E00700500099 +:10F0400000000000000007000000000000000700B2 +:10F0500000000000000007000000000000E00700C2 +:10F060000000000000E000000000000000000700B9 +:10F070004100000000E00700500000000000070011 +:10F0800000008282BEBEAEFE3C3C000000000000DC +:10F090000000000000000000000000000000000070 +:10F0A00000000000000000000000838FB3BFF5C126 +:10F0B000F5C100000000000000004D4DC300003C01 +:10F0C0000F3F00000000000000AAFFAAFAFF0A009C +:10F0D000B2F0B2F0B4AAB4FFFF00FFD7C303FF3F02 +:10F0E00000BE41FF00000000000000000000000022 +:10F0F000FCF0030F5F0F3C3CF0F5A5FACBFBCBFB1C +:10F100003C3C00AA00C0FFFC04543C3C0000000052 +:10F1100000000000000000000000000000000000EF +:10F12000000000000000000000000000808CB0BC67 +:10F13000F5F5C5C5000A0F0A000000004D4DFF3C63 +:10F1400020202F2F00000000000000F0FFF0FA3C0C +:10F150000A3C0000FFFFB400B455FF00FF070003A6 +:10F160003C3FF0F0F0F00000000000000000000064 +:10F170000000AAAA030F0F0F3C3C005A5A0F083890 +:10F1800008383C3C55FFFFC3FD01FFBF43030000AF +:10F19000000000000000000000000000000000006F +:10F1A00000000000000000000000000000005541C9 +:10F1B0000101103838380000000000000000140081 +:10F1C000555500AC00FC0000D4D4D4D400C300C317 +:10F1D0002D2D2D2D3C3C3C3C07D7D0D7003C0028A2 +:10F1E0007D287D28FFFEFFF400000000FFFFFFFFE9 +:10F1F000FD5DFC0CFF3CFF3D3C3C0F0F1717171744 +:10F2000000000000F3F3C3C33C00FD01FCBC400060 +:10F2100000000000000000000000000000000000EE +:10F2200000000000000000000000000000000000DE +:10F23000554101013C3C3C3C000000000000000046 +:10F240001400141400FF00FF0000FFFF0000C0C006 +:10F2500082822D2D2D2D353F35300BEBE0EB002C30 +:10F26000002C7D287D28000E000400000000BEBE9A +:10F27000AAAA5D5D0C0C3C3C3D3D3C3C0F0F1717B2 +:10F28000173FDF5D8A0841714171000000080000EE +:10F29000000000000000000000000000000000006E +:10F2A000000000600006000D0000000000000000EB +:10F2B0000000806100010011000000610006000DE7 +:10F2C000000005614A0F050D00A000000061000E5E +:10F2D000000D000000610E0E000D000005610A0E19 +:10F2E000050D00A100610E0F001D00010041000787 +:10F2F000000D000000000008059000A100610E0F45 +:10F30000000D00000061400E000D00000000000034 +:10F3100000000000000000000000000000000000ED +:10F3200000000000000000000000040000000000D9 +:10F3300000000000FFFF7F7DBAFFFFFF000000001C +:10F3400000FF00FF3F03173F50BEFABE0000000061 +:10F350000000FC000000000000003800FBFF00007F +:10F36000000000C03FFF45EFEFEFFFFF000000F09F +:10F37000FF0F8000AAAA00000000000000000000AB +:10F38000000000000000AA8EAA0FFF0A005500002E +:10F39000000000000000000000000000000000006D +:10F3A0000000000000000000000000000400000059 +:10F3B0000000000000007F7D7F7DBABAFFFF0000E3 +:10F3C000000028EB30F30303173F5014FA14000039 +:10F3D00000000000C0000000000000000800CBFF9B +:10F3E000000000008080BFBF45C7C7C7FDFD00000B +:10F3F00030F0CF0F0000000000000000000000000F +:10F400000000000000000000AA0FAA0FFF0F005527 +:10F4100000000000000000000000000000000000EC +:10F42000000000000000000000000000FF0F8080CE +:10F430000000000000000000FF7FFF3FFCFEFFFF18 +:10F440000000000000AAFFAAFF550F000000000006 +:10F450000000000000000E000E0000000000A8FDEB +:10F46000AAFF000000003030F3F355550000FF0004 +:10F470000F0F2C8338C2F8F8F8FF000000000000DE +:10F4800000000000000000000000EB00EB00AFA057 +:10F49000303000000000000000000000000000000C +:10F4A0000000000000000000000000000000F0006C +:10F4B00080800000000000000000FF7DFF3CFCFE9B +:10F4C000FCFE0000000000ACFFAC00550F00F00097 +:10F4D000AA0000000000000002000200000000007E +:10F4E000085D0055000000002830EBF300413F3F6D +:10F4F0005555C3C3AFAFFAFA0808080F0000000063 +:10F50000000000000000000000000000E8C3E80068 +:10F51000AFA030300000000000000000000000003C +:10F5200000000000000000000000000000000000DB +:10F53000000084080400040000000000040004002F +:10F54000040084000400000000000000000900091D +:10F5500000108400000000102008001000000000CF +:10F5600084008400200020108400040900000000B2 +:10F57000001004000200001000050000040000005C +:10F5800020052000000020002008020000080408D8 +:10F590000405200820050000000000000000000015 +:10F5A000000000000000000000000000000000005B +:10F5B000000000000000000000000000000000004B +:10F5C000000000000000000000000000000000003B +:10F5D000000000000000000000000000000000002B +:10F5E000000000000000000000000000000000001B +:10F5F0000000000000000000000000000200000009 +:10F6000000000000000000000000000000000000FA +:10F6100000000000000000000000000000000000EA :10F6200000000000000000000000000000000000DA :10F6300000000000000000000000000000000000CA :10F6400000000000000000000000000000000000BA :10F6500000000000000000000000000000000000AA :10F66000000000000000000000000000000000009A :10F67000000000000000000000000000000000008A -:10F68000000000000000000000000000000000007A -:10F6900000000000000000000000001000880010C2 -:10F6A0000008000000C00088001000840008000866 -:10F6B000008400000000000800100000000000842A -:10F6C000001000400010001000080000008400102E -:10F6D000000000000000001000000000000000100A -:10F6E00000000010000800400000000800080000B2 -:10F6F000000800C00088000800880000000000101A -:10F7000000000000000800000000000800100000D9 -:10F710000010000000000088008800008203C00084 -:10F7200000088210000000080000A0000000000097 -:10F730000010000008000010001000000021000070 -:10F740000800000800000008000000000008000396 -:10F750000008000000000041004100000000080017 -:10F760000808000000000000004100000003000045 -:10F7700000000000820000000800A00882000000D5 -:10F780000000000000000000000000000000000079 -:10F790000000000000000000000000000000000069 -:10F7A000418408840000000008000000000803A055 -:10F7B000001003820300000020A00882000008005F -:10F7C000000003C0080041C008A000A0008403009E -:10F7D0000000000000C0080000A0000000A0000021 -:10F7E0000300080000000800000000C000A0410065 -:10F7F0000800030000840000000000000800000072 -:10F8000000000300000003000000210000000010C1 -:10F81000000008000000080021000808080000009F -:10F8200008000400C0000800820000000000000082 -:10F83000080008008200000000000400A000000092 -:10F840000200A000000004000800A000000000006A -:10F850008200080000008200000000000800000094 -:10F8600000000000080000008200040004000800FE -:10F870000400000040000000080008000400000030 -:10F880000000000008000000000000000800A000C8 -:10F8900008000000000000000000000082000000DE -:10F8A0000000000000000040000000000000000018 +:10F680000000000000000009000000090000000068 +:10F69000000000000000000000000000000000006A +:10F6A000000000000000000000000000000000005A +:10F6B00000000000000000000000000000000084C6 +:10F6C000000800000000000800000000000000002A +:10F6D0000000000800840000000800000000000096 +:10F6E0000088008400840000000800100000001062 +:10F6F0000008000800100008000000C00008000812 +:10F70000000800080000000000840084001000C011 +:10F7100000080010000000080010001000000000A9 +:10F7200000000000000000000000000000000000D9 +:10F7300000000000000000000000000000000000C9 +:10F740000000000000000000000000000000004178 +:10F750000010000000000008000340410000000805 +:10F7600000000000A000000000050021004100088A +:10F770000005A01000100003A000000800210000F8 +:10F7800000000000000300088208A0100010000024 +:10F79000A0050800A0210000A01000210003000027 +:10F7A00000000000000000000000000800820000CF +:10F7B0000000000000000008000000000000001031 +:10F7C00000A00008000000080000000000A000A049 +:10F7D0002108000800080082008400A000A00000AA +:10F7E00000820084000803080010081008000308C5 +:10F7F00021080384008403C0000000A0000808A0C2 +:10F8000021100810000821C000000010000800C0EE +:10F810002100031041A0008400100084000000C0FB +:10F8200000000000000000000000000000000000D8 +:10F8300000000000000000000000000000000000C8 +:10F8400000000000000000000000000000000000B8 +:10F850000000000000004000000000000002200046 +:10F8600000009000400000009000A0000000000098 +:10F87000000000000000000000000000C0000009BF +:10F880000000000020000000000002000000000056 +:10F890000000000000000000000000000000000068 +:10F8A0000000000000000000000000000000000058 :10F8B0000000000000000000000000000000000048 -:10F8C000000000A000000000000000000000000098 +:10F8C0000000000000000000000000000000000038 :10F8D0000000000000000000000000000000000028 :10F8E0000000000000000000000000000000000018 :10F8F0000000000000000000000000000000000008 :10F9000000000000000000000000000000000000F7 :10F9100000000000000000000000000000000000E7 :10F9200000000000000000000000000000000000D7 -:10F930000000004100000000000000000000004145 -:10F94000000000000000400800000000000000006F -:10F950000000004100000000000000000008000856 -:10F96000000000000000A0000000000000000000F7 -:10F970000000000000000000000000100000000077 -:10F98000000000080000000000000000000000006F -:10F990000000000000000000000000000000000067 -:10F9A0000000000000000800030000C008C00000C4 -:10F9B00000A000A0000000C00010000000A02184F2 -:10F9C000001000100000038240A003C000000008E7 -:10F9D0000000030000000000008400820008000016 -:10F9E0000000008400000000000000002100400032 -:10F9F0000808000000000800000800000010008255 -:10FA00000300080000000000088400000000000857 -:10FA10000300000000000000008400000000080057 -:10FA20000084000800080008000000000021824057 -:10FA30000000001000080000820000000800000024 -:10FA400000000800000000000041820000000000EB -:10FA50000000000000000000000000000000004165 -:10FA6000400000020400000000000000000000113F -:10FA7000000000000000000000000000000008007E -:10FA800000000000000000110000000082000800DB -:10FA9000000000080000000000000400000000005A -:10FAA0000000001100000000000000000000000045 +:10F9300000000000000000000003000000000008BC +:10F9400000000000000000000000000000000000B7 +:10F9500000000000000000000000000000000000A7 +:10F96000000000000000000000080000000300008C +:10F970000000001000410000000002000000000034 +:10F980000003000000000010000000000010000054 +:10F990000000000808000000000000000000000057 +:10F9A0000000000000000000000000080008000047 +:10F9B00000000000000000840000000000000000C3 +:10F9C000000000000010008400000010008400000F +:10F9D00000A000A0000800000000000000080000D7 +:10F9E000020000040884000000A0001000A000C075 +:10F9F00008C00000000000A0038421C0028200A013 +:10FA000003A021040010000800000084001000A0E2 +:10FA10000084000000000008000800000010000042 +:10FA20000300004002840008000000000000000005 +:10FA300000000000000000000000000000000000C6 +:10FA400000110000000000000000000000000000A5 +:10FA500000418800000000100000000000000000CD +:10FA60000000000000000400000008000021000069 +:10FA700000029000020402000000000020080000C4 +:10FA80000000904100040021040000000000040078 +:10FA900000009000884000000400001004000000F6 +:10FAA0000000020000040000001000000000000040 :10FAB0000000000000000000000000000000000046 :10FAC0000000000000000000000000000000000036 :10FAD0000000000000000000000000000000000026 @@ -110715,7 +110715,7 @@ :1005E000000000000000000000000000000000000B :1005F00000000000000000000000000000000000FB :1006000000000000000000000000000000000000EA -:1006100000000000000000000000000000000010CA +:1006100000000000000000000000000000000000DA :1006200000000000000000000000000000000000CA :1006300000000000000000000000000000000000BA :1006400000000000000000000000000000000000AA @@ -110730,25 +110730,25 @@ :1006D000000000000000000000000000000000001A :1006E0000000A40000000000000000000000000066 :1006F00000000000000000000000000000000000FA -:1007000000000000000000000000000000000000E9 -:100710000000008001000000000000000000000058 -:100720000000000000000000800000000000000049 +:1007000000000000000000000800000000000000E1 +:100710000000000040000000000000000000000099 +:1007200000000000000000000000000000000000C9 :1007300000000000000000000000000000000000B9 :1007400000000000000000000000000000000000A9 -:100750000000000300000000000000008800880086 -:10076000000000000000000000000000C000C00009 -:1007700000000000200020000000200020002000D9 -:1007800000000000880000000000000020002000A1 -:1007900000000000200020000000200000002000D9 -:1007A0002000000000000000000000000000200009 -:1007B0008800000000002000200010002000200021 -:1007C0008800000000000000000000000000880019 -:1007D0000000000088002000000000002000000051 +:100750000000000300000000000000000000000096 +:100760000000000000000000000000000000000089 +:100770000000000000000000000000000000000079 +:100780000000000000000000000000000000000069 +:100790000000000000000000000000000000000059 +:1007A0000000000000000000000000004000000009 +:1007B0000000000000000000000000000000000039 +:1007C0000000000000000000000000002000000009 +:1007D0000000000000000000000000000000000019 :1007E0000000000000000000000000000000000009 :1007F00000000000000000000000000000000000F9 :1008000000000000000000000000000000000000E8 :1008100000000000000000000000000000000000D8 -:1008200000000000000000000000000000000000C8 +:100820000000000000000000000000000000800048 :1008300000000000000000000000000000000000B8 :1008400000000000000000000000000000000000A8 :100850000000000000000000000000000000000098 @@ -110756,59 +110756,59 @@ :100870000000000000000000000000000000000078 :100880000000000000000000000000000000000068 :100890000000000000000000000000000000000058 -:1008A0000000000000000000000000000000000048 -:1008B00000000000000000004008000000000000F0 -:1008C0000002000000000000110200000000000013 -:1008D0001002000000000000000000000000000006 -:1008E0000000000000000000000000000008000000 -:1008F00000000900200000000008000809080000AE -:1009000000080000000000000000000000020900D4 -:1009100000000000000000000008000800080000BF -:1009200000080000000000000000000000000000BF -:1009300000000000000020000000800900080008FE -:1009400000000009000000000000C00109000000D4 -:1009500009008001000000000000000800080002FB -:10096000000040080000000000000000000000003F -:100970000000000000000000000000000000000077 -:100980000000000000000000000000000000000067 -:1009900000009000000000000000000000000000C7 +:1008A0000000000000000000010000000000000047 +:1008B00001000000000000004100000000000008EE +:1008C00001000000000000004100000000000000E6 +:1008D00011000000000000080000000000000000FF +:1008E000000800080084000800080008000800084C +:1008F000000800080008000800080084000800083C +:10090000000800080008000800080082000800082D +:10091000000800080008000800080000000800089F +:100920000008000000080008000810080008008403 +:10093000000810080084000800089008000800085B +:10094000008440080008008400089008000800089F +:100950000008C0080008000800820008000800081D +:100960000084008400000008000000000000000077 +:100970000000000000000021000000000000000056 +:10098000000000000000002100000000000800003E +:100990000000000000000003000000000000000054 :1009A0000000000000000000000000000000000047 -:1009B000000000000008000000000000000000002F -:1009C0000000000000000000000000000000000027 -:1009D0000000000000000000000000000000000017 +:1009B000000800000000000000000000000000002F +:1009C00000090000000000210000000000000000FD +:1009D00000000009000000210005000000000000E8 :1009E0000000000000000000000000000000000007 :1009F00000000000000000000000000000000000F7 :100A000000000000000000000000000000000000E6 :100A100000000000000000000000000000000000D6 :100A200000000000000000000000000000000000C6 -:100A300000000000000000010000000000000000B5 +:100A300000000000000000000000000000000000B6 :100A400000000000000000000000000000000000A6 :100A50000000000000000000000000000000000096 -:100A60000000000000000000080008000000000076 -:100A70000000820000000000000082000000000072 -:100A8000A00000000800000000008200000000003C -:100A900000000000000000000000820000000000D4 -:100AA0000000100000000021000000008200000093 -:100AB000008008000000000000000000A00000000E -:100AC0000000820000001000000084000000000010 -:100AD000A000000000000000000008000800C000A6 -:100AE0000000C00008000800000000000000000036 +:100A60000000000000000000000000000000000086 +:100A70000000000000000000000000000000000076 +:100A80000000000000000000000000000000000066 +:100A90000000000000000000000000000000000056 +:100AA0000000000000000000000000000000000046 +:100AB0000100000000000000000000000000000035 +:100AC0000000000000000000000000000000000026 +:100AD0000000000000000000000000000000000016 +:100AE0000000000000000000000000000000000006 :100AF00000000000000000000000000000000000F6 :100B000000000000000000000000000000000000E5 :100B100000000000000000000000000000000000D5 -:100B200000000000000000000000000000000000C5 -:100B300000000002000000000000000000000000B3 -:100B4000000000000000000000000000000008009D +:100B20000000000000A00000000000000000000025 +:100B3000000040000000000000000000000800006D +:100B4000000000000000000000000000000000089D :100B50000000000000000000000000000000000095 -:100B60000000000000000000000000000000000085 +:100B6000000000000000000000080000000000007D :100B70000000000000000000000000000000000075 :100B80000000000000000000000000000000000065 :100B90000000000000000000000000000000000055 -:100BA0000000000000000000000000000000000045 +:100BA000000000000008000000000000000000003D :100BB0000000000000000000000000000000000035 :100BC0000000000000000000000000000000000025 -:100BD0000000000000000000000000001000000005 -:100BE00010000000000000000000000000000000F5 +:100BD0000000000000000000000000000000000015 +:100BE0000000000000000000000000000000000005 :100BF00000000000000000000000000000000000F5 :100C000000000000000000000000000000000000E4 :100C100000000000000000000000000000000000D4 @@ -110818,19 +110818,19 @@ :100C50000000000000000000000000000000000094 :100C60000000000000000000000000000000000084 :100C70000000000000000000000000000000000074 -:100C8000080000000000000000000000000000005C +:100C80000000000000000000000000000000000064 :100C90000000000000000000000000000000000054 :100CA0000000000000000000000000000000000044 -:100CB0000000000000000000008000008200000032 -:100CC0000100000000000000000000000000000023 -:100CD0001080000000000000000000000000000084 -:100CE0000000000000000000000000000000000004 +:100CB0000000000000000000000000000000000034 +:100CC0000000000000000000000000000000000024 +:100CD0000080000000000000000000000000000094 +:100CE00000000000000000000000000000210000E3 :100CF00000000000000000000000000000000000F4 :100D000000000000000000000000000000000000E3 :100D100000000000000000000000000000000000D3 -:100D200000000000000000000500000000000000BE -:100D300005000000000000000000000800000000A6 -:100D40000000400000000000000000000000000063 +:100D200000000000000000000000000000000000C3 +:100D300000000000000000000000000000000000B3 +:100D400000000000000000000000000000000000A3 :100D5000000000080000000000000000000000008B :100D60000000000000000000000000000000000083 :100D70000000000000000000000000000000000073 @@ -110979,181 +110979,181 @@ :101660000000000900000000000000090000000068 :101670000000000900000000000000090000000058 :101680000000000900000000000000000000000051 -:101690000000000000000000000020008800200082 -:1016A0002000880020002000200088008800200002 -:1016B00020002000000000004000200088002000E2 -:1016C0000200200020002000100020002000200048 -:1016D00002002000000000000001000020002000A7 -:1016E0002000200088002000200040004000200052 -:1016F000200088002000000000008800200020005A -:101700002000200084002000200000002000200095 -:101710002000200088000000000000000000000001 +:10169000000000000000000000000000000000004A +:1016A000000000000000000000000000000000003A +:1016B000000000000000000000000000000000002A +:1016C000000000000000000000000000000000001A +:1016D000000000000000000000000000000000000A +:1016E00000000000000000000000000000000000FA +:1016F00000000000000000000000000000000000EA +:101700000000880000000000000000000000000051 +:1017100000000000000000000000000000000000C9 :1017200000000000000000000000000000000000B9 :1017300000000000000000000000000000000000A9 -:101740000000800000000000000080000000000099 -:101750000000800000000000000000000000000009 +:101740000000000000000000000000000000000099 +:101750000000000000000000000000000000000089 :101760000000000000000000000000000000000079 :101770000000000000000000000000000000000069 :101780000000000000000000000000000000000059 :101790000000000000000000000000000000000049 :1017A0000000000000000000000000000000000039 -:1017B00000000000000000000000000000008800A1 -:1017C00000000000000000000000000020000000F9 +:1017B0000000000000000000000000000000000029 +:1017C0000000000000000000000000000000000019 :1017D0000000000000000000000000000000000009 :1017E00000000000000000000000000000000000F9 :1017F00000000000000000000000000000000000E9 :1018000000000000000000000000000000000000D8 -:1018100000000000000000000000000000000000C8 -:1018200000000000000000000000000000000000B8 -:101830004000000000000000000000000000000068 -:101840000000000000000000000400000000000094 -:101850000000000000002000000000000000000068 -:101860000000000000000000000000000000000078 -:101870000000000000000000400000000000000028 -:10188000000000000000000000000900000000004F -:1018900000000000090000004000000000000000FF -:1018A0000000000000000000000000000000000038 -:1018B0000000000000000000000000000000000028 -:1018C0000000000000000000000000000000010017 -:1018D0000000000000000100000000000000000007 -:1018E00000000000000000000000000000000000F8 -:1018F00000000000000000000000000000000000E8 -:1019000000000000000000000000000000000000D7 -:1019100000000000000000000000000000000000C7 -:101920000000000000000000000021004100000055 +:1018100000000000000000000000000000000008C0 +:101820000000000800080008000000080008000888 +:101830000008008400080084000800080008000870 +:101840000000008400080008000000080008008470 +:1018500000880000000800000008000800080000E0 +:101860000008000000080084008800000008050847 +:10187000000800000008008400000088000800083C +:101880000008000000840000000000000008008440 +:1018900000840000008800840000000000080004AC +:1018A0000000000000000000000000000021000017 +:1018B0000000000000000000000000000021000007 +:1018C00000000000000800000005000000210000EA +:1018D00000000000000800000000000000400000C0 +:1018E00000000021000000000000000000000000D7 +:1018F00000000003000000000008000000000000DD +:1019000000000000000000000003000000000000D4 +:1019100000000000000000080000000000000000BF +:1019200000080000000000000000000000000000AF :1019300000000000000000000000000000000000A7 :101940000000000000000000000000000000000097 -:101950000400000000000000200000000000000063 +:101950000000008200000000000000000000000005 :101960000000000000000000000000000000000077 -:101970000000000000000000000000004100000026 +:101970000000000000000000000000000000000067 :101980000000000000000000000000000000000057 :101990000000000000000000000000000000000047 -:1019A000000000000000C000C000000000000000B7 -:1019B0000000000000000800080000000000000017 -:1019C00000000000000000000800000010000000FF -:1019D0000180018000000000010000008200C000C2 -:1019E0000000010000000000000000000000820074 -:1019F0000800000000000800000000000000840053 -:101A000082000000000000000000100000008200C2 -:101A1000080000000000100000001000000082001C -:101A2000080000000000100000000000000000009E +:1019A00000400000000000000000000000000000F7 +:1019B0000000000000000000000000000000000027 +:1019C0000000000000000000000000000000000017 +:1019D0000000000000000000000000000000000007 +:1019E00000000000000000000000000000000000F7 +:1019F000000000000000000000000000000088005F +:101A000000000000000000000000000000000000D6 +:101A100000000000000000000000000000000000C6 +:101A200000000000000000000000000000000000B6 :101A300000000000000000000000000000000000A6 -:101A4000000000000000000000000000000088000E -:101A50000000202002040000000020000000000020 -:101A600000000000040000000890000000000000DA -:101A700000000000008800000000000000000000DE -:101A800008900000000000000000000000000000BE -:101A9000000000000000000008000000000000003E -:101AA000000000000000000000000000080000002E +:101A40000000000000000000000000000000000096 +:101A50000000000000000000000000000000000086 +:101A60000000000000000000000000000000000076 +:101A70000000000000000000000000000000000066 +:101A80000000000000000000000000000000000056 +:101A90000000000000000000000000000000000046 +:101AA0000000000000000000000000000000000036 :101AB0000000000000000000000000000000000026 -:101AC00000000000000000000000000090009000F6 -:101AD00000000000000000800800000082000000FC -:101AE00000000000002000000000000000000000D6 -:101AF00000000000000000000000000008000000DE -:101B000000000000000000000000000000000000D5 -:101B100000000000000000000000000000000000C5 -:101B2000100000000000C0000000000000000000E5 +:101AC0000000000000000000000000000000000016 +:101AD0000000000000000000000000000000000006 +:101AE00000000000000000400000000000000000B6 +:101AF00000000000000000000000000000000000E6 +:101B00000000000000000000004000000000000095 +:101B10000000000000000040000000000000000085 +:101B200000000000000000000000000000000000B5 :101B300000000000000000000000000000000000A5 :101B40000000000000000000000000000000000095 -:101B5000000000000000000000080000000000007D -:101B60000000000000000001000000000000000074 +:101B50000000000000000000000000000000000085 +:101B60000000000000000000000000000000000075 :101B70000000000000000000000000000000000065 -:101B80000000000000000000000000000000000055 -:101B90000000000000000000000000000000000045 -:101BA000000000000000000000000000080000002D +:101B80000000000000000000004000000000000015 +:101B9000000000000000000000000008000000003D +:101BA0000000000000000000000000000000000035 :101BB0000000000000000000000000000000000025 -:101BC0000000000000000000000000000000820093 -:101BD0000000000000000100000000000000000004 -:101BE00000090000000000000009000000000000E3 +:101BC0000000000000000000000000000000000015 +:101BD00000000000000000000000000000080000FD +:101BE00000000000000000000000000000000000F5 :101BF00000000000000000000000000000000000E5 :101C000000000000000000000000000000000000D4 :101C100000000000000000000000000000000000C4 :101C200000000000000000000000000000000000B4 -:101C3000000000000000000000080000000000009C +:101C300000000000000000000000000000000000A4 :101C40000000000000000000000000000000000094 -:101C50000000000000000000200000000000000064 -:101C600000000000000000000000000000C00000B4 +:101C50000000000000000000000000000000000084 +:101C60000000000000000000000000000000000074 :101C70000000000000000000000000000000000064 :101C80000000000000000000000000000000000054 :101C90000000000000000000000000000000000044 :101CA0000000000000000000000000000000000034 :101CB0000000000000000000000000000000000024 :101CC0000000000000000000000000000000000014 -:101CD000000000000000000001009004000000006F -:101CE0000100000000000000000090000000000261 +:101CD0000000000000000000000000000000000004 +:101CE00000000000000000000000000000000000F4 :101CF00000000000000000000000000000000000E4 :101D000000000000000000000000000000000000D3 :101D100000000000000000000000000000000000C3 :101D200000000000000000000000000000000000B3 :101D300000000000000000000000000000000000A3 :101D40000000000000000000000000000000000093 -:101D5000000000000000000000001100A180000051 -:101D600000001100210000000000110080000000B0 -:101D700000800000000000000000000000000000E3 +:101D50000000000000000000000000000000000083 +:101D60000000000000000000000000000000000073 +:101D70000000000000000000000000000000000063 :101D80000000000000000000000000000000000053 :101D90000000000000000000000000000000000043 :101DA0000000000000000000000000000000000033 :101DB0000000000000000000000000000000000023 :101DC0000000000000000000000000000000000013 -:101DD0000000000000000000000000000008098072 -:101DE000000300000041090000090080000000809D -:101DF0000000008000000000000000000000000063 +:101DD0000000000000000000000000000000000003 +:101DE00000000000000000000000000000000000F3 +:101DF00000000000000000000000000000000000E3 :101E000000000000000000000000000000000000D2 :101E100000000000000000000000000000000000C2 :101E200000000000000000000000000000000000B2 :101E300000000000000000000000000000000000A2 :101E40000000000000000000000000000000000092 -:101E50000000000000000000000000000000000181 -:101E600001020000008800910100000000880000CD -:101E70000020000000C00000000000000000000082 +:101E50000000000000000000000000000000000082 +:101E60000000000000000000000000000000000072 +:101E70000000000000000000000000000000000062 :101E80000000000000000000000000000000000052 :101E90000000000000000000000000000000000042 :101EA0000000000000000000000000000000000032 :101EB0000000000000000000000000000000000022 :101EC0000000000000000000000000000000000012 :101ED0000000000000000000000000000000000002 -:101EE000010088880800010000008800000001004F -:101EF00001000088880001000000000000000000D0 +:101EE00000000000000000000000000000000000F2 +:101EF00000000000000000000000000000000000E2 :101F000000000000000000000000000000000000D1 :101F100000000000000000000000000000000000C1 :101F200000000000000000000000000000000000B1 :101F300000000000000000000000000000000000A1 :101F40000000000000000000000000000000000091 :101F50000000000000000000000000000000000081 -:101F6000000041000080800004000000000000002C -:101F70004100410000800000090000000000000056 +:101F60000000000000000000000000000000000071 +:101F70000000000000000000000000000000000061 :101F80000000000000000000000000000000000051 :101F90000000000000000000000000000000000041 :101FA0000000000000000000000000000000000031 :101FB0000000000000000000000000000000000021 :101FC0000000000000000000000000000000000011 :101FD0000000000000000000000000000000000001 -:101FE0000000000000110800008000000000001147 -:101FF0000000000000110000008000000000000050 +:101FE00000000000000000000000000000000000F1 +:101FF00000000000000000000000000000000000E1 :1020000000000000000000000000000000000000D0 :1020100000000000000000000000000000000000C0 :1020200000000000000000000000000000000000B0 :1020300000000000000000000000000000000000A0 :102040000000000000000000000000000000000090 :102050000000000000000000000000000000000080 -:10206000000000000000000100000040000000002F -:10207000000100000000000100000040000000001E +:102060000000000000000000000000000000000070 +:102070000000000000000000000000000000000060 :102080000000000000000000000000000000000050 :102090000000000000000000000000000000000040 :1020A0000000000000000000000000000000000030 :1020B0000000000000000000000000000000000020 :1020C0000000000000000000000000000000000010 :1020D0000000000000000000000000000000000000 -:1020E0000000000000000000000000E00700820087 -:1020F000000000E000008141000000000700822194 +:1020E00000000000000000000000000000000000F0 +:1020F00000000000000000000000000000000000E0 :1021000000000000000000000000000000000000CF :1021100000000000000000000000000000000000BF :1021200000000000000000000000000000000000AF :10213000000000000000000000000000000000009F :10214000000000000000000000000000000000008F :10215000000000000000000000000000000000007F -:102160000000000000000000000000000000F0F08F -:102170000000000000000000000000000000F0F07F +:10216000000000000000000000000000000000006F +:10217000000000000000000000000000000000005F :10218000000000000000000000000000000000004F :10219000000000000000000000000000000000003F :1021A000000000000000000000000000000000002F @@ -111161,106 +111161,106 @@ :1021C000000000000000000000000000000000000F :1021D00000000000000000000000000000000000FF :1021E00000000000000000000000000000000000EF -:1021F000F0F00000000000000000000000000000FF -:10220000F0F00000000000000000000000000000EE +:1021F00000000000000000000000000000000000DF +:1022000000000000000000000000000000000000CE :1022100000000000000000000000000000000000BE :1022200000000000000000000000000000000000AE :10223000000000000000000000000000000000009E :10224000000000000000000000000000000000008E :10225000000000000000000000000000000000007E :10226000000000000000000000000000000000006E -:10227000FF000000FFFF0000000000000000000061 -:102280003C3C0000FFFF00000000000000000000D8 +:10227000000000000000000000000000000000005E +:10228000000000000000000000000000000000004E :10229000000000000000000000000000000000003E :1022A000000000000000000000000000000000002E :1022B000000000000000000000000000000000001E :1022C000000000000000000000000000000000000E :1022D00000000000000000000000000000000000FE :1022E00000000000000000000000000000000000EE -:1022F0000000FF00000000000000000000000000DF -:1023000000003C3C00000000000000000000000055 +:1022F00000000000000000000000000000000000DE +:1023000000000000000000000000000000000000CD :1023100000000000000000000000000000000000BD :1023200000000000000000000000000000000000AD :10233000000000000000000000000000000000009D :10234000000000000000000000000000000000008D :10235000000000000000000000000000000000007D :10236000000000000000000000000000000000006D -:10237000000005402A06054C00A800400006000C9D -:10238000000005002A00054000A800000000000031 +:10237000000000000000000000000000000000005D +:10238000000000000000000000000000000000004D :10239000000000000000000000000000000000003D :1023A000000000000000000000000000000000002D :1023B000000000000000000000000000000000001D :1023C000000000000000000000000000000000000D :1023D00000000000000000000000000000000000FD :1023E00000000000000000000000000000000000ED -:1023F000000000000000FF00FFFF00000000555536 -:10240000FFFF0000000000000000000000000000CE +:1023F00000000000000000000000000000000000DD +:1024000000000000000000000000000000000000CC :1024100000000000000000000000000000000000BC :1024200000000000000000000000000000000000AC :10243000000000000000000000000000000000009C :10244000000000000000000000000000000000008C :10245000000000000000000000000000000000007C :10246000000000000000000000000000000000006C -:102470000000000000000000FF000000000000005D -:1024800055550000000000000000000000000000A2 +:10247000000000000000000000000000000000005C +:10248000000000000000000000000000000000004C :10249000000000000000000000000000000000003C :1024A000000000000000000000000000000000002C :1024B000000000000000000000000000000000001C :1024C000000000000000000000000000000000000C :1024D00000000000000000000000000000000000FC :1024E00000000000000000000000000000000000EC -:1024F000000000000000000000000000F0F00000FC -:1025000000000000F0F000000000000000000000EB +:1024F00000000000000000000000000000000000DC +:1025000000000000000000000000000000000000CB :1025100000000000000000000000000000000000BB :1025200000000000000000000000000000000000AB :10253000000000000000000000000000000000009B :10254000000000000000000000000000000000008B :10255000000000000000000000000000000000007B :10256000000000000000000000000000000000006B -:102570000000000000000000000000000000F0F07B -:10258000000000000000F0F000000000000000006B +:10257000000000000000000000000000000000005B +:10258000000000000000000000000000000000004B :10259000000000000000000000000000000000003B :1025A000000000000000000000000000000000002B :1025B000000000000000000000000000000000001B :1025C000000000000000000000000000000000000B -:1025D00000000000200000008400200020002000F7 -:1025E00004002000000000008800200020000000FF -:1025F0000000200004000400200020002000200033 -:10260000200040008400880020004000C00000003E -:102610000400200000014000200020002000840071 -:1026200020002000880088002000200020002000DA -:102630000000200020008400040020002000200072 -:1026400020002000200088002000200004008400DA -:10265000000040002000000000000000000000001A +:1025D00000000000000000000000000000000000FB +:1025E00000000000000000000000000000000000EB +:1025F00000000000000000000000000000000000DB +:1026000000000000000000000000000000000000CA +:1026100000000000000000000000000000000000BA +:1026200000000000000000000000000004000000A6 +:102630000000000004000000000000000400000092 +:102640000000000004000000000000002000000066 +:10265000000000002000000000000000000000005A :10266000000000000000000000000000000000006A :10267000000000000000000000000000000000005A -:102680000400000000000000000000000000000046 +:10268000000000000000000000000000000000004A :10269000000000000000000000000000000000003A -:1026A000000000001000100000000000000000000A -:1026B00000000000000010000000200000000000EA -:1026C00000000000000010000000000000000000FA -:1026D00004000000040000000200020002000200EA -:1026E000020002000200020002000200004000405E +:1026A000000000000000000000000000000000002A +:1026B000000000000000000000000000000000001A +:1026C000000000000000000000000000000000000A +:1026D00000000000000000000000000000000000FA +:1026E00000000000000000000000000000000000EA :1026F00000000000000000000000000000000000DA :1027000000000000000000000000000000000000C9 -:1027100004400440022002200000000000000000ED +:1027100000000000000000000000000000000000B9 :1027200000000000000000000000000000000000A9 -:102730000800000000000000001000000000000081 +:102730000000000000000000000000000000000099 :102740000000000000000000000000000000000089 -:1027500000000000000000000000800080008000F9 -:1027600080008000800080008000800080000001E8 -:102770000001000000000000000000000000000058 -:102780000000000000000000000009000000000040 -:10279000000080018901800180010000000000002C -:1027A00000040000090041000000000000000000DB -:1027B0000000000000000000000000000000000019 -:1027C0000000000000000000000000000000000009 -:1027D00000000008000000000000000000000000F1 -:1027E00000040000000000000021000000000000C4 -:1027F00000000000000000000005000000000000D4 +:10275000040000000000000000000000000000086D +:102760000000000000000008000800000000000851 +:102770000008000000000000000000000000000849 +:102780000000000000000008000800000000000831 +:102790000008000000000000000000000000000031 +:1027A0000008000000000000001000080000000009 +:1027B0000008000800000000000000000000000009 +:1027C00000100000000000000000001000000000E9 +:1027D00000080008000000000000000000000000E9 +:1027E00000000000000000000000000000000000E9 +:1027F00000000000000000000000000000000000D9 :1028000000000000000000000000000000000000C8 :1028100000000000000000000000000000000000B8 -:102820000000000000000000000000000010004157 +:1028200000000000000000000000000000000000A8 :102830000000000000000000000000000000000098 :102840000000000000000000000000000000000088 :102850000000000000000000000000000000000078 @@ -111269,141 +111269,141 @@ :102880000000000000000000000000000000000048 :102890000000000000000000000000000000000038 :1028A0000000000000000000000000000000000028 -:1028B0000800000000000000000000000000000010 +:1028B0000000000000000000000000000000000018 :1028C0000000000000000000000000000000000008 :1028D00000000000000000000000000000000000F8 -:1028E000000000000800000000000000C000000020 -:1028F0000000C00008000000000000000000000010 -:1029000008008200000000000000840000000000B9 -:102910000000000000000000080000000000A0000F -:102920000000080000000000000008000000000097 -:10293000080000000000000000008200000000000D -:10294000000008000000000000000000000000007F -:102950000000000000000000100008000000080057 -:10296000C000000000000000000040000500000062 +:1028E00000000000000000000000000000000000E8 +:1028F00000000000000000000000000000000000D8 +:1029000000000000000000000000000000000000C7 +:1029100000000000000000000000000000000000B7 +:1029200000000000000000000000000000000000A7 +:102930000000000000000000000000000000000097 +:102940000000000000000000000000000000000087 +:102950000000000000000000000000000000000077 +:102960000400000000000000000000000000000063 :102970000000000000000000000000000000000057 -:1029800000004100000003000000000005000000FE -:10299000080000000000000000000000000000002F -:1029A000000000000000000000000000030005001F -:1029B0001000000000000000000000000000000007 -:1029C00000000300000000000000000003001000F1 -:1029D00000000000000000000000080000000000EF -:1029E0000000000000002002000440000000200061 -:1029F0000840000002000200A000000000200800C3 -:102A000000000020000000000000000000000000A6 -:102A10000000000020000000080000000000C000CE -:102A20000000000000000000000300000010000390 -:102A3000000000000000000000000000000800008E +:102980000000000000000000000000000000000047 +:102990000000000000000000000000000000000037 +:1029A0000000000000000000000000000000000027 +:1029B0000000000000000000000000000000000017 +:1029C0000000000000000000000000000000000007 +:1029D00000000000000000000000000000000000F7 +:1029E00000000000000000000000000000000000E7 +:1029F00000000000000000000000000000000000D7 +:102A000000000000000000000000000000000000C6 +:102A100000000000000000000000000000000000B6 +:102A200000000000000000000000000000000000A6 +:102A30000000000000000000000000000000000096 :102A40000000000000000000000000000000000086 -:102A5000000000000000080000000000000000006E -:102A600000000000000000008000000000000000E6 -:102A700080000001000080008000000000000001D4 -:102A80000000000000010084000000C000C0000041 -:102A90000000008400840000000080840500000025 -:102AA00000000000008400000000000000000000A2 +:102A50000000000000000000000000000000000076 +:102A60000000000000000000000000000000000066 +:102A70000000000000000000000000000000000056 +:102A80000000000000000000000000000000000046 +:102A90000000000000000000000000000000000036 +:102AA0000000000000000000000000000000000026 :102AB0000000000000000000000000000000000016 :102AC0000000000000000000000000000000000006 :102AD00000000000000000000000000000000000F6 :102AE00000000000000000000000000000000000E6 -:102AF000000000008421000000000000020002002D -:102B0000000000200020000000000000000800007D -:102B10000009000000000000000000000802080298 -:102B20000000000000020000000000210000004141 -:102B30000002000000000000000000000000000093 +:102AF00000000000000000000000000000000000D6 +:102B000000000000000000000000000000000000C5 +:102B100000000000000000000000000000000000B5 +:102B200000000000000000000000000000000000A5 +:102B30000000000000000000000000000000000095 :102B40000000000000000000000000000000000085 :102B50000000000000000000000000000000000075 :102B60000000000000000000000000000000000065 -:102B700000000000000000000000000000008000D5 -:102B800080000000080100010000000000000000BB -:102B900000000000000000000000000000008000B5 +:102B70000000000000000000000000000000000055 +:102B80000000000000000000000000000000000045 +:102B90000000000000000000000000000000000035 :102BA0000000000000000000000000000000000025 :102BB0000000000000000000000000000000000015 :102BC0000000000000000000000000000000000005 :102BD00000000000000000000000000000000000F5 -:102BE00000000000000000000000000041C00000E4 -:102BF0000801000041C000000100000000C0000802 -:102C000000000000C00000000040020400000000BE +:102BE00000000000000000000000000000000000E5 +:102BF00000000000000000000000000000000000D5 +:102C000000000000000000000000000000000000C4 :102C100000000000000000000000000000000000B4 -:102C20000000000000C010400004029000000000FE +:102C200000000000000000000000000000000000A4 :102C30000000000000000000000000000000000094 :102C40000000000000000000000000000000000084 :102C50000000000000000000000000000000000074 -:102C60000000000000000000000000000000918053 -:102C700000009009000891910000400300000080CE -:102C80000080000000008000000000008080000044 +:102C60000000000000000000000000000000000064 +:102C70000000000000000000000000000000000054 +:102C80000000000000000000000000000000000044 :102C90000000000000000000000000000000000034 -:102CA000000000000000098080800080800000009B +:102CA0000000000000000000000000000000000024 :102CB0000000000000000000000000000000000014 :102CC0000000000000000000000000000000000004 :102CD00000000000000000000000000000000000F4 :102CE00000000000000000000000000000000000E4 -:102CF00009800021091188000900002103118200C8 -:102D000000008000000080008000000000800000C3 +:102CF00000000000000000000000000000000000D4 +:102D000000000000000000000000000000000000C3 :102D100000000000000000000000000000000000B3 -:102D20000000000000000000800080108041800052 +:102D200000000000000000000000000000000000A3 :102D30000000000000000000000000000000000093 :102D40000000000000000000000000000000000083 :102D50000000000000000000000000000000000073 :102D60000000000000000000000000000000000063 -:102D7000000001C000000001C000010000000001CF -:102D8000C000000010000000C000020000000004AD +:102D70000000000000000000000000000000000053 +:102D80000000000000000000000000000000000043 :102D90000000000000000000000000000000000033 -:102DA0000000000000000000000040004005040199 -:102DB000C0840000000000000000000000000000CF +:102DA0000000000000000000000000000000000023 +:102DB0000000000000000000000000000000000013 :102DC0000000000000000000000000000000000003 :102DD00000000000000000000000000000000000F3 :102DE00000000000000000000000000000000000E3 -:102DF0000000000000000001000003C0000000000F -:102E0000200003C100000000000800C0C000000056 -:102E10000040000000000000000000000000000072 -:102E2000000000000000000000000000210290826D -:102E3000088401C000010000000000000000000044 +:102DF00000000000000000000000000000000000D3 +:102E000000000000000000000000000000000000C2 +:102E100000000000000000000000000000000000B2 +:102E200000000000000000000000000000000000A2 +:102E30000000000000000000000000000000000092 :102E40000000000000000000000000000000000082 :102E50000000000000000000000000000000000072 :102E60000000000000000000000000000000000062 -:102E70000000000000000000000909089180000027 -:102E800000030202918300000000008000808000A7 +:102E70000000000000000000000000000000000052 +:102E80000000000000000000000000000000000042 :102E90000000000000000000000000000000000032 -:102EA0000000000000000000000000000000C080E2 -:102EB00000808080418000010000000000000000D0 +:102EA0000000000000000000000000000000000022 +:102EB0000000000000000000000000000000000012 :102EC0000000000000000000000000000000000002 :102ED00000000000000000000000000000000000F2 :102EE00000000000000000000000000000000000E2 -:102EF00000000000000000008000000008800900C1 -:102F000080000309028009008000800000000000AA -:102F10000008002180800000000000000000000088 +:102EF00000000000000000000000000000000000D2 +:102F000000000000000000000000000000000000C1 +:102F100000000000000000000000000000000000B1 :102F200000000000000000000000000000000000A1 -:102F300080108008809180000001000000000000E7 +:102F30000000000000000000000000000000000091 :102F40000000000000000000000000000000000081 :102F50000000000000000000000000000000000071 :102F60000000000000000000000000000000000061 -:102F700000000000000000000000C000000000840D -:102F80000100C000000100840100C000100000002A -:102F900000000001404008080000000000000000A0 +:102F70000000000000000000000000000000000051 +:102F80000000000000000000000000000000000041 +:102F90000000000000000000000000000000000031 :102FA0000000000000000000000000000000000021 -:102FB0000000C00182008440020200010000000005 +:102FB0000000000000000000000000000000000011 :102FC0000000000000000000000000000000000001 :102FD00000000000000000000000000000000000F1 :102FE00000000000000000000000000000000000E1 -:102FF000000000000000000000000000600000E091 -:1030000000004200840000E000000000000000001A -:103010000000000000060000070042000000000061 +:102FF00000000000000000000000000000000000D1 +:1030000000000000000000000000000000000000C0 +:1030100000000000000000000000000000000000B0 :1030200000000000000000000000000000000000A0 -:103030000000000000000000080000420000000046 +:103030000000000000000000000000000000000090 :103040000000000000000000000000000000000080 :103050000000000000000000000000000000000070 :103060000000000000000000000000000000000060 -:103070000000000000000000000000000000FFFF52 -:10308000000066660000FFFF000066660000FF00AB -:103090000000FF00000000060006009900990000F3 +:103070000000000000000000000000000000000050 +:103080000000000000000000000000000000000040 +:103090000000000000000000000000000000000030 :1030A0000000000000000000000000000000000020 :1030B0000000000000000000000000000000000010 :1030C0000000000000000000000000000000000000 :1030D00000000000000000000000000000000000F0 :1030E00000000000000000000000000000000000E0 :1030F00000000000000000000000000000000000D0 -:103100000000000066660000000000006666000027 -:10311000FF000000FF0000000006000600000000A5 +:1031000000000000000000000000000000000000BF +:1031100000000000000000000000000000000000AF :10312000000000000000000000000000000000009F :10313000000000000000000000000000000000008F :10314000000000000000000000000000000000007F @@ -111413,45 +111413,45 @@ :10318000000000000000000000000000000000003F :10319000000000000000000000000000000000002F :1031A000000000000000000000000000000000001F -:1031B0000000000000000000000043084000008400 -:1031C0002186000000000000000000000000000058 +:1031B000000000000000000000000000000000000F +:1031C00000000000000000000000000000000000FF :1031D00000000000000000000000000000000000EF :1031E00000000000000000000000000000000000DF :1031F00000000000000000000000000000000000CF -:1032000000000000000066660000FFFF0000666628 -:103210000000FFFF000000FFFFFFF0F000000000D3 +:1032000000000000000000000000000000000000BE +:1032100000000000000000000000000000000000AE :10322000000000000000000000000000000000009E :10323000000000000000000000000000000000008E :10324000000000000000000000000000000000007E :10325000000000000000000000000000000000006E :10326000000000000000000000000000000000005E :10327000000000000000000000000000000000004E -:103280000000000000000000666600000000000072 -:10329000666600000000000000FFFFFFF0F0303025 -:1032A000303018181818000000000000000000005E +:10328000000000000000000000000000000000003E +:10329000000000000000000000000000000000002E +:1032A000000000000000000000000000000000001E :1032B000000000000000000000000000000000000E :1032C00000000000000000000000000000000000FE :1032D00000000000000000000000000000000000EE :1032E00000000000000000000000000000000000DE :1032F00000000000000000000000000000000000CE -:10330000000000000000000040E3800180219202E4 -:1033100040E38001802192024082800000208202EE -:103320000000002800000000000000000000000075 +:1033000000000000000000000000000000000000BD +:1033100000000000000000000000000000000000AD +:10332000000000000000000000000000000000009D :10333000000000000000000000000000000000008D -:1033400010002008004000080000000000000000FD +:10334000000000000000000000000000000000007D :10335000000000000000000000000000000000006D :10336000000000000000000000000000000000005D :10337000000000000000000000000000000000004D -:10338000000000000000000000002020202050006D -:1033900050000030003000000F000000000000006E +:10338000000000000000000000000000000000003D +:10339000000000000000000000000000000000002D :1033A000000000000000000000000000000000001D :1033B000000000000000000000000000000000000D :1033C00000000000000000000000000000000000FD :1033D00000000000000000000000000000000000ED :1033E00000000000000000000000000000000000DD :1033F00000000000000000000000000000000000CD -:10340000000000000000000000000000202020203C -:10341000500050000030003000000F00000000009D +:1034000000000000000000000000000000000000BC +:1034100000000000000000000000000000000000AC :10342000000000000000000000000000000000009C :10343000000000000000000000000000000000008C :10344000000000000000000000000000000000007C @@ -111459,7 +111459,7 @@ :10346000000000000000000000000000000000005C :10347000000000000000000000000000000000004C :10348000000000000000000000000000000000003C -:1034900000003C000000000000003C0000000000B4 +:10349000000000000000000000000000000000002C :1034A000000000000000000000000000000000001C :1034B000000000000000000000000000000000000C :1034C00000000000000000000000000000000000FC @@ -111467,7 +111467,7 @@ :1034E00000000000000000000000000000000000DC :1034F00000000000000000000000000000000000CC :1035000000000000000000000000000000000000BB -:10351000030303033C000000F0F000003C00000047 +:1035100000000000000000000000000000000000AB :10352000000000000000000000000000000000009B :10353000000000000000000000000000000000008B :10354000000000000000000000000000000000007B @@ -111475,95 +111475,95 @@ :10356000000000000000000000000000000000005B :10357000000000000000000000000000000000004B :10358000000000000000000000000000000000003B -:10359000000020002000200020008800000088009B -:1035A000200000002000000020002000000020007B -:1035B000000020002000200020008800000084007F -:1035C00020008800A0000000C00088001004C00097 -:1035D0004000000388008800880020002000880048 -:1035E000880020002000200084002000200020000F -:1035F000200020002000C0002000840000002000E7 -:1036000020000000840000002000000000000400F2 -:10361000200020000000100000000000000000005A -:10362000000000004000000000000000000000005A +:10359000000000000000000000000000000000002B +:1035A000000000000000000000000000000000001B +:1035B000000000000000000000000000000000000B +:1035C00000000000000000000000000000000000FB +:1035D00000000000000000000000000000000000EB +:1035E00000020008000000000000000000000000D1 +:1035F00000000400000000000000000000000000C7 +:1036000000020002000000000000000000000000B6 +:103610000002200000000000000000000000000088 +:10362000000000000000000000000000000000009A :10363000000000000000000000000000000000008A :10364000000000000000000000000000000000007A -:103650000000000000004000100000000000040016 -:103660000000000000000000000009000000000051 -:1036700000000000000040000000090020000400DD +:10365000000000000000000000000000000000006A +:10366000000000000000000000000000000000005A +:10367000000000000000000000000000000000004A :10368000000000000000000000000000000000003A :10369000000000000000000000000000000000002A :1036A000000000000000000000000000000000001A -:1036B0000000000000040000000000000000000006 +:1036B000000000000000000000000000000000000A :1036C00000000000000000000000000000000000FA -:1036D00000000000200000000000000000000000CA +:1036D00000000000000000000000000000000000EA :1036E00000000000000000000000000000000000DA -:1036F00000000000000000040000000000000000C6 +:1036F00000000000000000000000000000000000CA :1037000000000000000000000000000000000000B9 -:10371000000000000000000400020084000000001F -:10372000000000000000000000840000000800000D -:1037300000000084000000010002008400820000FC -:103740000000000000000000008400000090000065 -:1037500000000004000080000000000000000000E5 +:1037100000000000000000000000000000000000A9 +:103720000000000000000000000000000000000099 +:103730000000000000080000000000000000000081 +:103740000000000000000000000000000000000079 +:103750000000000000080000000000000000000061 :103760000000000000000000000000000000000059 -:103770000000000000000000000100080000000040 -:103780000000000000000000000000000000000039 -:1037900000000000000000000001002000080008F8 -:1037A00000000000002100000021000000030008CC -:1037B000000000000008000000210020002100029D -:1037C000000000000003400000040000001100049D -:1037D00000000000000000000000000000080000E1 -:1037E00000000000000000000009000000000000D0 -:1037F00000000000000000000000000000000011B8 +:103770000000000000000002000000000000000047 +:103780000000000000000000000400000000000035 +:103790000000000000000000000000000000000029 +:1037A0000000000000000000000000000000000019 +:1037B0000000000000000000000000000000000009 +:1037C00000000000000000000000000000000000F9 +:1037D00000000000000000000000000000000000E9 +:1037E00000000000000000000000000000000000D9 +:1037F00000000000000000000000000000000000C9 :1038000000000000000000000000000000000000B8 -:103810000000000000000000000000000000048420 -:1038200005000000000000A00000000000000000F3 -:103830000000000000000000000000000000040084 -:1038400000000000000000000000400040000000F8 -:103850000000000400000000000000000000000064 -:103860000800000000000000000000000000000050 +:1038100000000000000000000000000000000000A8 +:103820000000000000000000000000000000000098 +:103830000000000000000000000000000000000088 +:103840000000000000000000000000000000000078 +:103850000000000000000000000000000000000068 +:103860000000000000000000000000000000000058 :103870000000000000000000000000000000000048 :103880000000000000000000000000000000000038 -:1038900000000000000000000000000000008200A6 -:1038A0000000000000008200000000000000400056 -:1038B000000000000000A0000000000000008200E6 -:1038C0001000000000000800000008000000840054 -:1038D0000800C00008020800C000822100000000AB -:1038E00008008200A000820082000000A00000000A -:1038F00082000000A0008200820000008200000020 -:103900008200080000008200820000000000000029 -:1039100008000000000000000800A000C0004000F7 -:10392000000800A0000000000000000000000000EF -:10393000030800000000000000000000000000007C +:103890000000000000000000000000000000000028 +:1038A0000000000000000000000000000000000018 +:1038B0000000000000000000000000000000000008 +:1038C00000000000000000000000000000000000F8 +:1038D00000000000000000000000000000000000E8 +:1038E00000000000000000000000000000000000D8 +:1038F00000000000000000000000000000000000C8 +:1039000000000000000000000000000000000000B7 +:1039100000000000000000000000000000000000A7 +:103920000000000000000000000000000000000097 +:103930000000000000000000000000000000000087 :103940000000000000000000000000000000000077 -:103950000000030000000000000000000000000064 +:103950000000000000000000000000000000000067 :103960000000000000000000000000000000000057 :103970000000000000000000000000000000000047 :103980000000000000000000000000000000000037 :103990000000000000000000000000000000000027 -:1039A00000000000000000210000000000000000F6 -:1039B00000000000000000000000002004000000E3 -:1039C0000000C00000000021000000000000000016 -:1039D000C00000040000880000000000000000009B +:1039A0000000000000000000000000000000000017 +:1039B0000000000000000000000000000000000007 +:1039C00000000000000000000000000000000000F7 +:1039D00000000000000000000000000000000000E7 :1039E00000000000000000000000000000000000D7 -:1039F000A00008000000000000000000000000001F +:1039F00000000000000000000000000000000000C7 :103A000000000000000000000000000000000000B6 -:103A1000820008000000000000000800000008000C -:103A2000080000000000000000000000000000008E -:103A3000000000000000000000000000000000087E +:103A100000000000000000000000000000000000A6 +:103A20000000000000000000000000000000000096 +:103A30000000000000000000000000000000000086 :103A40000000000000000000000000000000000076 -:103A50000000000000000000000000004000000026 -:103A600011A00000000000000000000000000000A5 +:103A50000000000000000000000000000000000066 +:103A60000000000000000000000000000000000056 :103A70000000000000000000000000000000000046 :103A80000000000000000000000000000000000036 :103A90000000000000000000000000000000000026 -:103AA0000000000000000000000000000002000014 -:103AB00000210000000008000000000000000009D4 -:103AC000002100000003000004000000000040008E -:103AD000A000000000000000000000000000000046 -:103AE00000000800000000000000000008000000C6 -:103AF00008000000080000000000000000000000B6 +:103AA0000000000000000000000000000000000016 +:103AB0000000000000000000000000000000000006 +:103AC00000000000000000000000000000000000F6 +:103AD00000000000000000000000000000000000E6 +:103AE00000000000000000000000000000000000D6 +:103AF00000000000000000000000000000000000C6 :103B000000000000000000000000000000000000B5 -:103B10000800840000000000000008000000000011 +:103B100000000000000000000000000000000000A5 :103B20000000000000000000000000000000000095 :103B30000000000000000000000000000000000085 :103B40000000000000000000000000000000000075 @@ -111573,79 +111573,79 @@ :103B80000000000000000000000000000000000035 :103B90000000000000000000000000000000000025 :103BA0000000000000000000000000000000000015 -:103BB0000000000000000000000000010000000202 +:103BB0000000000000000000000000000000000005 :103BC00000000000000000000000000000000000F5 -:103BD0000000000000000000000000010000008460 +:103BD00000000000000000000000000000000000E5 :103BE00000000000000000000000000000000000D5 -:103BF00000000000010000000000000000000100C3 -:103C000000C00000000000000000000000000000F4 -:103C100000000000010000000000000000000100A2 -:103C200000C00000000000000000000000000000D4 -:103C30000000000000000000000000000008090073 +:103BF00000000000000000000000000000000000C5 +:103C000000000000000000000000000000000000B4 +:103C100000000000000000000000000000000000A4 +:103C20000000000000000000000000000000000094 +:103C30000000000000000000000000000000000084 :103C40000000000000000000000000000000000074 -:103C50000000000000000000000000000008080054 -:103C600000800000000000000000000000000000D4 -:103C700000000000000041000000000000000040C3 -:103C800010000080000000000000000000000000A4 -:103C900000000000000041000000000000000040A3 -:103CA0001000008000000000000000000000000084 -:103CB00010000000000000000000000000000200F2 -:103CC0000200000080000000000000000041000031 -:103CD00008000000000000000000000000000800D4 -:103CE00005000000000000000000000000080000C7 -:103CF00000000300000000800000800000000000C1 -:103D000090004000000000000000000000000041A2 -:103D100000000300000000800000800000000000A0 -:103D20009000400000000000000000000000004182 +:103C50000000000000000000000000000000000064 +:103C60000000000000000000000000000000000054 +:103C70000000000000000000000000000000000044 +:103C80000000000000000000000000000000000034 +:103C90000000000000000000000000000000000024 +:103CA0000000000000000000000000000000000014 +:103CB0000000000000000000000000000000000004 +:103CC00000000000000000000000000000000000F4 +:103CD00000000000000000000000000000000000E4 +:103CE00000000000000000000000000000000000D4 +:103CF00000000000000000000000000000000000C4 +:103D000000000000000000000000000000000000B3 +:103D100000000000000000000000000000000000A3 +:103D20000000000000000000000000000000000093 :103D30000000000000000000000000000000000083 -:103D4000820003080002080040000000000000019B -:103D50000000010000000000000000000000000062 -:103D60004000824000900820400000000000000158 -:103D7000000000000100000000C000002000000062 -:103D80000000050082080090400040000000000094 -:103D9000000100000100000000C000002000000041 -:103DA0000000050082080090400040000000000074 -:103DB0000001000000000000000000000000000002 -:103DC00000000040000000000000000000000000B3 +:103D40000000000000000000000000000000000073 +:103D50000000000000000000000000000000000063 +:103D60000000000000000000000000000000000053 +:103D70000000000000000000000000000000000043 +:103D80000000000000000000000000000000000033 +:103D90000000000000000000000000000000000023 +:103DA0000000000000000000000000000000000013 +:103DB0000000000000000000000000000000000003 +:103DC00000000000000000000000000000000000F3 :103DD00000000000000000000000000000000000E3 -:103DE00000000020000000000000000000000000B3 -:103DF0000000000000000000C00000000000000003 -:103E00000000000000820000000000000000000030 -:103E10000000000000000000C000000000000000E2 -:103E20000000000000200000000000000000000072 +:103DE00000000000000000000000000000000000D3 +:103DF00000000000000000000000000000000000C3 +:103E000000000000000000000000000000000000B2 +:103E100000000000000000000000000000000000A2 +:103E20000000000000000000000000000000000092 :103E30000000000000000000000000000000000082 :103E40000000000000000000000000000000000072 -:103E50000000100000000000000000000000000052 +:103E50000000000000000000000000000000000062 :103E60000000000000000000000000000000000052 -:103E700000000000000000000000800000000000C2 +:103E70000000000000000000000000000000000042 :103E80000000000000000000000000000000000032 -:103E900000000000000000000000800000000000A2 +:103E90000000000000000000000000000000000022 :103EA0000000000000000000000000000000000012 -:103EB0000000000000000010800000C100000000B1 -:103EC00000000000000000C18000001000000000A1 -:103ED0000000000000000008800000C10000000099 -:103EE00000000000000000C1800000100000000081 -:103EF00000000000000000000000800000C1000081 -:103F0000000000000000000000C1000000410000AF -:103F100000000000000000000000800000C1000060 -:103F2000000000000000000000C18000004100000F -:103F30000000000000000000000020000040000021 -:103F40000000000000000000000910000000000058 -:103F50000000000000000000000120000040000000 -:103F6000000000000000000000050200000000004A -:103F7000000000000000000000000000400000C140 -:103F8000000000000000000000000003020000012B -:103F9000000000000000000000000000400000C120 -:103FA0000000000000000000000000030400000109 +:103EB0000000000000000000000000000000000002 +:103EC00000000000000000000000000000000000F2 +:103ED00000000000000000000000000000000000E2 +:103EE00000000000000000000000000000000000D2 +:103EF00000000000000000000000000000000000C2 +:103F000000000000000000000000000000000000B1 +:103F100000000000000000000000000000000000A1 +:103F20000000000000000000000000000000000091 +:103F30000000000000000000000000000000000081 +:103F40000000000000000000000000000000000071 +:103F50000000000000000000000000000000000061 +:103F60000000000000000000000000000000000051 +:103F70000000000000000000000000000000000041 +:103F80000000000000000000000000000000000031 +:103F90000000000000000000000000000000000021 +:103FA0000000000000000000000000000000000011 :103FB0000000000000000000000000000000000001 -:103FC00000000000000000000000810000E0000090 -:103FD0004800000000000000002100000000000078 -:103FE00000000000000000000000810000E0000070 -:103FF0004800000000000000000000000000000079 -:10400000000000420000000000004800810000E0C5 -:104010000000480600000000000000420000000010 -:10402000000000420000000000004800810000E0A5 -:1040300000004806000000000000004200000000F0 +:103FC00000000000000000000000000000000000F1 +:103FD00000000000000000000000000000000000E1 +:103FE00000000000000000000000000000000000D1 +:103FF00000000000000000000000000000000000C1 +:1040000000000000000000000000000000000000B0 +:1040100000000000000000000000000000000000A0 +:104020000000000000000000000000000000000090 +:104030000000000000000000000000000000000080 :104040000000000000000000000000000000000070 :104050000000000000000000000000000000000060 :104060000000000000000000000000000000000050 @@ -111662,118 +111662,118 @@ :10411000000000000000000000000000000000009F :10412000000000000000000000000000000000008F :10413000000000000000000000000000000000007F -:10414000747B000000000000000000000000000080 -:104150000000000000000000000000000000DE2E53 -:10416000747B000000000000000000000000000060 -:104170000000000000000000000000000000DE2E33 -:104180000000747B00000000000000000000000040 +:10414000000000000000000000000000000000006F +:10415000000000000000000000000000000000005F +:10416000000000000000000000000000000000004F +:10417000000000000000000000000000000000003F +:10418000000000000000000000000000000000002F :10419000000000000000000000000000000000001F -:1041A000DE2E747B00000000000000000000000014 +:1041A000000000000000000000000000000000000F :1041B00000000000000000000000000000000000FF -:1041C000DE2E615603400000000000000230A00017 -:1041D0000000000000000C4000000000000002C0D1 -:1041E0006A86615603400000000000000230A00013 -:1041F0000000000000000C4000000000000002C0B1 -:104200006A86000061560340000000000000023191 -:10421000E0000000000000000C4000000000000072 -:1042200002C06A86615603400000000000000231AF -:10423000E0000000000000000C4000000000000052 -:1042400002C06A8620002000400088000000200094 -:10425000200020002000200000002000200020007E -:1042600020002000880020002000880000000000BE -:1042700020002000200020000000200020008400FA -:104280002000880000022000C0002000C0000000C4 -:104290008800200088002000880000032000200003 -:1042A00020002000880020002000200020000000C6 -:1042B00020002000200020000000000088002000D6 -:1042C000C0002000200000000000000000000000EE +:1041C00000000000000000000000000000000000EF +:1041D00000000000000000000000000000000000DF +:1041E00000000000000000000000000000000000CF +:1041F00000000000000000000000000000000000BF +:1042000000000000000000000000000000000000AE +:10421000000000000000000000000000000000009E +:10422000000000000000000000000000000000008E +:10423000000000000000000000000000000000007E +:10424000000000000000000000000000000000006E +:10425000000000000000000000000000000000005E +:10426000000000000000000000000000000000004E +:10427000000000000000000000000000000000003E +:10428000000000000000000000000000000000002E +:10429000000000000000000000000000000000001E +:1042A000000000000000000000000000000000000E +:1042B00000000000020000000000000000000000FC +:1042C00000000000000000000000000000000000EE :1042D00000000000000000000000000000000000DE -:1042E000000000004000000000000000200000006E -:1042F000000200000000400000000000000000007C -:10430000000040000000000000000000000000006D +:1042E00000000000000000000000000000000000CE +:1042F00000000000000000000000000000000000BE +:1043000000000000000000000000000000000000AD :10431000000000000000000000000000000000009D -:104320000000044000000000000000000000400009 -:10433000000000004000000000000000000000003D -:1043400000000004400040000000000000000000E9 +:10432000000000000000000000000000000000008D +:10433000000000000000000000000000000000007D +:10434000000000000000000000000000000000006D :10435000000000000000000000000000000000005D :10436000000000000000000000000000000000004D -:104370000010080000000000000000000000000025 +:10437000000000000000000000000000000000003D :10438000000000000000000000000000000000002D :10439000000000000000000000000000000000001D :1043A000000000000000000000000000000000000D -:1043B00002000000000000000200000000000000F9 +:1043B00000000000000000000000000000000000FD :1043C00000000000000000000000000000000000ED -:1043D0000000000000000000000000000084000059 +:1043D00000000000000000000000000000000000DD :1043E00000000000000000000000000000000000CD :1043F00000000000000000000000000000000000BD -:10440000000000000000009000000000000000001C +:1044000000000000000000000000000000000000AC :10441000000000000000000000000000000000009C -:104420000000000000000000090000000000000083 -:104430000000000000000000000000080000000074 +:10442000000002000000000000000000000000008A +:10443000000002000000000000000000000000007A :10444000000000000000000000000000000000006C -:104450000000040000000000000000000000000058 -:10446000000000000000000000000000000000212B -:10447000000000000000000000000000000000112B -:1044800000000000000000008400000000000000A8 +:10445000000000000000000000000000000000005C +:10446000000000000000000000000000000000004C +:10447000000000000000000000000000000000003C +:10448000000000000000000000000000000000002C :10449000000000000000000000000000000000001C :1044A000000000000000000000000000000000000C :1044B00000000000000000000000000000000000FC :1044C00000000000000000000000000000000000EC -:1044D00000000020000000C00000000000000000FC -:1044E00000000000000000000000000800000000C4 -:1044F0000000000000200300000000044000000055 -:10450000000009000000000000000004000000009E +:1044D00000000000000000000000000000000000DC +:1044E00000000000000000000000000000000000CC +:1044F00000000000000000000000000000000000BC +:1045000000000000000000000000000000000000AB :10451000000000000000000000000000000000009B -:104520000000000000000000000003000000000088 -:104530000000030000000000030000000000000075 +:10452000000000000000000000000000000000008B +:10453000000000000000000000000000000000007B :10454000000000000000000000000000000000006B -:1045500082000000001000100000000000000000B9 -:10456000820000000000C0004000000000000000C9 -:104570000000000000000000000000000000C0007B -:10458000000000000000000000000800000008001B -:104590000000040008000000000000000400C0004B -:1045A0000800820008000000004004000000000035 -:1045B0000000820000000000A000000000000000D9 -:1045C00000000000000000000000000008000000E3 +:10455000000000000000000000000000000000005B +:10456000000000000000000000000000000000004B +:10457000000000000000000000000000000000003B +:10458000000000000000000000000000000000002B +:10459000000000000000000000000000000000001B +:1045A000000000000000000000000000000000000B +:1045B00000000000000000000000000000000000FB +:1045C00000000000000000000000000000000000EB :1045D00000000000000000000000000000000000DB :1045E00000000000000000000000000000000000CB -:1045F00000000000000000000000000008000010A3 -:10460000001000000000000000000000000000009A +:1045F00000000000000000000000000000000000BB +:1046000000000000000000000000000000000000AA :10461000000000000000000000000000000000009A -:104620000000000800000000000000000000000082 +:10462000000000000000000000000000000000008A :10463000000000000000000000000000000000007A :10464000000000000000000000000000000000006A -:104650000000000000000000000000000800000052 +:10465000000000000000000000000000000000005A :10466000000000000000000000000000000000004A -:104670000000000008000000000000000000000032 +:10467000000000000000000000000000000000003A :10468000000000000000000000000000000000002A -:104690000080000000000000000000000800000092 +:10469000000000000000000000000000000000001A :1046A000000000000000000000000000000000000A :1046B00000000000000000000000000000000000FA :1046C00000000000000000000000000000000000EA :1046D00000000000000000000000000000000000DA -:1046E000000000000000000000A00000000000002A -:1046F000000000000000000000200000000000009A -:104700000000000000000000049000000000000015 -:104710000000001000880000000000000000000001 -:10472000000000000000001003000300000008006B -:104730000000000000000000000003000000000076 -:104740000000000000000000030008000000080056 +:1046E00000000000000000000000000000000000CA +:1046F00000000000000000000000000000000000BA +:1047000000000000000000000000000000000000A9 +:104710000000000000000000000000000000000099 +:104720000000000000000000000000000000000089 +:104730000000000000000000000000000000000079 +:104740000000000000000000000000000000000069 :104750000000000000000000000000000000000059 :104760000000000000000000000000000000000049 :104770000000000000000000000000000000000039 -:1047800000000000000000000000000000800000A9 +:104780000000000000000000000000000000000029 :104790000000000000000000000000000000000019 :1047A0000000000000000000000000000000000009 -:1047B0000000008000000000080000000000000071 +:1047B00000000000000000000000000000000000F9 :1047C00000000000000000000000000000000000E9 :1047D00000000000000000000000000000000000D9 :1047E00000000000000000000000000000000000C9 :1047F00000000000000000000000000000000000B9 -:104800000000000000000000000000000000001098 +:1048000000000000000000000000000000000000A8 :104810000000000000000000000000000000000098 :104820000000000000000000000000000000000088 -:104830000000000000200000000000000000000058 +:104830000000000000000000000000000000000078 :104840000000000000000000000000000000000068 :104850000000000000000000000000000000000058 :104860000000000000000000000000000000000048 @@ -111822,7 +111822,7 @@ :104B10000000000000000000000000000000000095 :104B20000000000000000000000000000000000085 :104B30000000000000000000000000000000000075 -:104B4000080000000000000000000000000000005D +:104B40000000000000000000000000000000000065 :104B50000000000000000000000000000000000055 :104B60000000000000000000000000000000000045 :104B70000000000000000000000000000000000035 @@ -111830,7 +111830,7 @@ :104B90000000000000000000000000000000000015 :104BA0000000000000000000000000000000000005 :104BB00000000000000000000000000000000000F5 -:104BC0000000001000410000000000000000000094 +:104BC00000000000000000000000000000000000E5 :104BD00000000000000000000000000000000000D5 :104BE00000000000000000000000000000000000C5 :104BF00000000000000000000000000000000000B5 @@ -111838,7 +111838,7 @@ :104C10000000000000000000000000000000000094 :104C20000000000000000000000000000000000084 :104C30000000000000000000000000000000000074 -:104C40000000000000010001000000000000000062 +:104C40000000000000000000000000000000000064 :104C50000000000000000000000000000000000054 :104C60000000000000000000000000000000000044 :104C70000000000000000000000000000000000034 @@ -111846,7 +111846,7 @@ :104C90000000000000000000000000000000000014 :104CA0000000000000000000000000000000000004 :104CB00000000000000000000000000000000000F4 -:104CC000000000000000008100000700410000001B +:104CC00000000000000000000000000000000000E4 :104CD00000000000000000000000000000000000D4 :104CE00000000000000000000000000000000000C4 :104CF00000000000000000000000000000000000B4 @@ -111887,7 +111887,7 @@ :104F20000000000000000000000000000000000081 :104F30000000000000000000000000000000000071 :104F40000000000000000000000000000000000061 -:104F50000510002800000000000000000000000014 +:104F50000000000000000000000000000000000051 :104F60000000000000000000000000000000000041 :104F70000000000000000000000000000000000031 :104F80000000000000000000000000000000000021 @@ -111922,353 +111922,353 @@ :10515000000000000000000000000000000000004F :10516000000000000000000000000000000000003F :10517000000000000000000000000000000000002F -:1051800000008800200020002000200020002000D7 -:1051900020000000200020002000200020008800C7 -:1051A00000002000C0008800200020004000040013 -:1051B000200084002000200020004000200040004B -:1051C000000388002000200020002000A011A00083 -:1051D00020002000200020002000200020000000EF -:1051E00020002000200020002000200088008800EF -:1051F0002000200000002000200020002000C0002F -:10520000200010000000000000000000000000006E -:10521000000000002000000000000000000000006E +:10518000000000000000C00000000000000000005F +:10519000000000000000000000000000000000000F +:1051A00000000000000020000000000000000000DF +:1051B00000000000000000000000000000000000EF +:1051C00000000000000000002000000000000000BF +:1051D00000000000000000000000000000000000CF +:1051E000000000000000000020000000000000009F +:1051F00000000000000000000000000000000000AF +:10520000000200000000000000000000000000009C +:10521000000000000000000000000000000000008E :10522000000000000000000000000000000000007E -:10523000A00040000000000000000000000000008E +:10523000000000000000000000000000000000006E :10524000000000000000000000000000000000005E -:10525000000000004000000000000000000000000E +:10525000000000000000000000000000000000004E :10526000000000000000000000000000000000003E :10527000000000000000000000000000000000002E -:1052800000000000000041000000010000000000DC -:1052900000000010000000000000000000000000FE +:10528000000000000000000000000000000000001E +:10529000000000000000000000000000000000000E :1052A00000000000000000000000000000000000FE -:1052B0000000000004000220002000200000000088 -:1052C000000000000000000000000000000000409E -:1052D000004000000010020000400040004040C0BC -:1052E00002800040004000000000004000400040FC -:1052F000020000000010014000400040004000009B -:105300000000000000000000820000000200000019 -:105310000000000000000002000400000000000087 -:105320000000000000000000000000000000000875 -:105330000000000000008000800100010001000862 -:105340000008000000000000000000000000000055 -:105350000085000100000000800000010001000144 -:105360008021800400010001000000000001000114 -:105370000001800000000000100100010001000198 -:105380000000008400000000000000000000000099 -:105390000000000000000000000008000000000005 -:1053A00000080008000000000000000000000000ED -:1053B00000000000A000A000400004000000040065 -:1053C000900000000000000000000002000000004B -:1053D00000000000000000000000000008000000C5 -:1053E000000000210000000000000000000000009C -:1053F0000009002000000000000400000800000078 -:10540000000000200020000000000000000000005C +:1052B00000000000000000000000000000000000EE +:1052C00000000000000000000000000000000000DE +:1052D00000000000000000000000000000000000CE +:1052E00000000000000000000000000000000000BE +:1052F00000000000000000000000000000000000AE +:10530000000000000000000000000000000000009D +:10531000000000000000000000000000000000008D +:10532000000000000000000000000000000000007D +:10533000000000000000000000000000000000006D +:10534000000000000000000000000000000000005D +:10535000000000000000000000000000000000004D +:10536000000000000000000000000000000000003D +:10537000000000000000000000000000000000002D +:10538000000000000000000000000000000000001D +:10539000000000000000000000000000000000000D +:1053A00000000000000000000000000000000000FD +:1053B00000000000000000000000000000000000ED +:1053C00000000000000000000000000000000000DD +:1053D00000000000000000000000000000000000CD +:1053E00000000000000000000000000000000000BD +:1053F00000000000000000000000000000000000AD +:10540000000000000000000000000000000000009C :10541000000000000000000000000000000000008C :10542000000000000000000000000000000000007C -:10543000000000000000000000000000000040002C -:10544000000000000800000008000000000000004C +:10543000000000000000000000000000000000006C +:10544000000000000000000000000000000000005C :10545000000000000000000000000000000000004C -:1054600000000000000000000088000000000000B4 -:10547000000000000000000000000001000010001B -:105480000000000000010001000000000102010016 -:1054900005001100000000000000C0000000000036 -:1054A000000082000000000000000000000000007A -:1054B000004100410100000001000000C0000000A8 -:1054C00000000000100000000000000000000000CC -:1054D00000000000000082000800084000400000BA -:1054E0000000000000008200820008000000004070 -:1054F0000040000000008200080008400040A000BA -:105500000000010000800000000000000000020117 -:105510000400820004000000000000000000000001 -:105520000000030000000000000000000000000078 -:105530000000000000000400000004000000000063 -:105540000000000000004100000010040000000006 -:105550000000000000000000000000000001000149 -:105560000000000000000000000000080300000030 -:105570000001000100000000000000000001000127 -:1055800000000000200000040300000000000000F4 -:1055900004000000002000000008000000000000DF +:10546000000000000000000000000000000000003C +:10547000000000000000000000000000000000002C +:10548000000000000000000000000000000000001C +:10549000000000000000000000000000000000000C +:1054A00000000000000000000000000000000000FC +:1054B00000000000000000000000000000000000EC +:1054C00000000000000000000000000000000000DC +:1054D00000000000000000000000000000000000CC +:1054E00000000000000000000000000000000000BC +:1054F00000000000000000000000000000000000AC +:10550000000000000000000000000000000000009B +:10551000000000000000000000000000000000008B +:10552000000000000000000000000000000000007B +:10553000000000000000000000000000000000006B +:10554000000000000000000000000000000000005B +:10555000000000000000000000000000000000004B +:10556000000000000000000000000000000000003B +:10557000000000000000000000000000000000002B +:10558000000000000000000000000000000000001B +:10559000000000000000000000000000000000000B :1055A00000000000000000000000000000000000FB -:1055B00000000000000000000000040008000800D7 -:1055C0000000C00000000000000000000000000516 -:1055D000000000000000000000000000400020006B -:1055E0002000000000002000204002000204000013 -:1055F0000040040400000000000000000200000061 -:105600009000C00000000000020000000020000028 -:105610000000800000000001000000000000000009 +:1055B00000000000000000000000000000000000EB +:1055C00000000000000000000000000000000000DB +:1055D00000000000000000000000000000000000CB +:1055E00000000000000000000000000000000000BB +:1055F00000000000000000000000000000000000AB +:10560000000000000000000000000000000000009A +:10561000000000000000000000000000000000008A :10562000000000000000000000000000000000007A -:1056300000000000000000000000000080000000EA -:105640008000000040000000000000020000000098 +:10563000000000000000000000000000000000006A +:10564000000000000000000000000000000000005A :10565000000000000000000000000000000000004A -:10566000800080000000000080008001A100800018 -:105670000000002100010000000000000000800088 -:10568000000000000000000000008000000000009A -:1056900000000000000000000000000000210021C8 +:10566000000000000000000000000000000000003A +:10567000000000000000000000000000000000002A +:10568000000000000000000000000000000000001A +:10569000000000000000000000000000000000000A :1056A00000000000000000000000000000000000FA -:1056B00000000000000002000800080000000000D8 -:1056C000000000000040000000000000000000009A -:1056D0000000000000000000000000000041000089 -:1056E000000000000000C000000000400021000099 -:1056F0000000004000000000000400000000020064 -:105700000000000000000000000002000000000097 -:105710000000002000200000000000000000000049 +:1056B00000000000000000000000000000000000EA +:1056C00000000000000000000000000000000000DA +:1056D00000000000000000000000000000000000CA +:1056E00000000000000000000000000000000000BA +:1056F00000000000000000000000000000000000AA +:105700000000000000000000000000000000000099 +:105710000000000000000000000000000000000089 :105720000000000000000000000000000000000079 :105730000000000000000000000000000000000069 :105740000000000000000000000000000000000059 :105750000000000000000000000000000000000049 -:105760000000000000000000000000000001000038 -:105770000000000000010000000000010000000027 -:105780008000000000000000000000008000000019 -:1057900000000000000100010000902000008200D5 +:105760000000000000000000000000000000000039 +:105770000000000000000000000000000000000029 +:105780000000000000000000000000000000000019 +:105790000000000000000000000000000000000009 :1057A00000000000000000000000000000000000F9 :1057B00000000000000000000000000000000000E9 -:1057C000000000000000000000C01040000288C07F +:1057C00000000000000000000000000000000000D9 :1057D00000000000000000000000000000000000C9 -:1057E000000090C100000000000890C1000001020C -:1057F000000000C0A0010002000008C0000000007E -:10580000000100C000000100000001C00000000015 -:105810000008000000080000000211098089001142 -:1058200080000000000000000000000000000000F8 +:1057E00000000000000000000000000000000000B9 +:1057F00000000000000000000000000000000000A9 +:105800000000000000000000000000000000000098 +:105810000000000000000000000000000000000088 +:105820000000000000000000000000000000000078 :105830000000000000000000000000000000000068 -:105840000000000000000000000002808080008056 +:105840000000000000000000000000000000000058 :105850000000000000000000000000000000000048 -:105860000000000080890000080000098389000012 -:105870000580000200828040088000020080000055 -:1058800008000008008000000500000011802100D1 -:105890000000008000000000000000800000000008 -:1058A0000000008000000000000000000000000078 +:105860000000000000000000000000000000000038 +:105870000000000000000000000000000000000028 +:105880000000000000000000000000000000000018 +:105890000000000000000000000000000000000008 +:1058A00000000000000000000000000000000000F8 :1058B00000000000000000000000000000000000E8 -:1058C00000000000000000800000008080008010C8 -:1058D0008041800000000000000000000000000087 -:1058E0000000000000000000000009008900000026 -:1058F0000003090080800000800300008000008019 -:10590000000009808000000000000000808000414D -:1059100009000003800000000000000000000000FB -:105920000020000000040000000000000000000053 +:1058C00000000000000000000000000000000000D8 +:1058D00000000000000000000000000000000000C8 +:1058E00000000000000000000000000000000000B8 +:1058F00000000000000000000000000000000000A8 +:105900000000000000000000000000000000000097 +:105910000000000000000000000000000000000087 +:105920000000000000000000000000000000000077 :105930000000000000000000000000000000000067 -:10594000000000000000000000040000000440000F -:1059500040000201C08400000000000000000000C0 -:105960000000000000000000000000000000C00077 -:10597000000000000000C010000008000000C0008F -:10598000000208000190C000000000000000C002FA -:10599000000109000000C000000008000000000035 -:1059A00000000000200000000000000000000000D7 +:105940000000000000000000000000000000000057 +:105950000000000000000000000000000000000047 +:105960000000000000000000000000000000000037 +:105970000000000000000000000000000000000027 +:105980000000000000000000000000000000000017 +:105990000000000000000000000000000000000007 +:1059A00000000000000000000000000000000000F7 :1059B00000000000000000000000000000000000E7 -:1059C00000000000000000000000000004000000D3 -:1059D00010400082C08401C00000000000000000F0 -:1059E00000010000000000000000000000000000B6 -:1059F00000C000000000000000C001000010000016 -:105A000000C000000000000191C1900200000000F1 -:105A100000C000008800001001C000080000000461 -:105A20000000400000000000000000000000000036 +:1059C00000000000000000000000000000000000D7 +:1059D00000000000000000000000000000000000C7 +:1059E00000000000000000000000000000000000B7 +:1059F00000000000000000000000000000000000A7 +:105A00000000000000000000000000000000000096 +:105A10000000000000000000000000000000000086 +:105A20000000000000000000000000000000000076 :105A30000000000000000000000000000000000066 -:105A400000000000000000000000090000008000CD -:105A50000000008000808080418000000000000085 -:105A60000000000100000000000000000011000024 -:105A70000000008900110000000000824100008049 -:105A8000000000800000000003058988000000007D -:105A9000000008800000000000801080000000006E -:105AA00000800000211108000880000000000000B4 +:105A40000000000000000000000000000000000056 +:105A50000000000000000000000000000000000046 +:105A60000000000000000000000000000000000036 +:105A70000000000000000000000000000000000026 +:105A80000000000000000000000000000000000016 +:105A90000000000000000000000000000000000006 +:105AA00000000000000000000000000000000000F6 :105AB00000000000000000000000000000000000E6 :105AC00000000000000000000000000000000000D6 -:105AD0000000000080108008808800800000000026 -:105AE00000000000000100000000000000000008AD -:105AF0000980000009008000098000000202A10561 -:105B00000008080000008000000000000808800075 -:105B10000000000000008000001180000000004034 -:105B200000C00000000001010000884000000000EB +:105AD00000000000000000000000000000000000C6 +:105AE00000000000000000000000000000000000B6 +:105AF00000000000000000000000000000000000A6 +:105B00000000000000000000000000000000000095 +:105B10000000000000000000000000000000000085 +:105B20000000000000000000000000000000000075 :105B30000000000000000000000000000000000065 :105B40000000000000000000000000000000000055 -:105B5000000000000000C00040008441C0020000BE -:105B60000000000000000001000000000000000034 -:105B70008800019000000000C000019000000000BB -:105B8000C100000001000000C00000000000010191 -:105B9000C000000290000000C000000108000000EA -:105BA00008000002000040000000000007040000A0 +:105B50000000000000000000000000000000000045 +:105B60000000000000000000000000000000000035 +:105B70000000000000000000000000000000000025 +:105B80000000000000000000000000000000000015 +:105B90000000000000000000000000000000000005 +:105BA00000000000000000000000000000000000F5 :105BB00000000000000000000000000000000000E5 :105BC00000000000000000000000000000000000D5 -:105BD00000820000070400000000000008000042EE +:105BD00000000000000000000000000000000000C5 :105BE00000000000000000000000000000000000B5 -:105BF0000000810000E000000000880000E00000DC -:105C00000000810002E007008200410000E0000087 -:105C10000000000000E000000000000000E00000C4 -:105C2000810000810000070000000000F0F000008B -:105C3000FFFF000000000000000000000000000066 +:105BF00000000000000000000000000000000000A5 +:105C00000000000000000000000000000000000094 +:105C10000000000000000000000000000000000084 +:105C20000000000000000000000000000000000074 +:105C30000000000000000000000000000000000064 :105C40000000000000000000000000000000000054 :105C50000000000000000000000000000000000044 :105C60000000000000000000000000000000000034 -:105C700000000000FFFF000066660000FFFF00005C -:105C800066660000FFFF0000F0F00000666600009E -:105C900066660000F0F000003C3C0000F0F0000000 -:105CA000FF0000003C3C00003C003C000000F0F025 +:105C70000000000000000000000000000000000024 +:105C80000000000000000000000000000000000014 +:105C90000000000000000000000000000000000004 +:105CA00000000000000000000000000000000000F4 :105CB00000000000000000000000000000000000E4 :105CC00000000000000000000000000000000000D4 :105CD00000000000000000000000000000000000C4 :105CE00000000000000000000000000000000000B4 -:105CF000000000000000FFFF0000666600000000DA -:105D000000006666000000000000F0F0000066661B -:105D1000000066660000F0F000003C3C0000F0F07F -:105D20000000FF0000003C3C00003C003C00000084 +:105CF00000000000000000000000000000000000A4 +:105D00000000000000000000000000000000000093 +:105D10000000000000000000000000000000000083 +:105D20000000000000000000000000000000000073 :105D30000000000000000000000000000000000063 :105D40000000000000000000000000000000000053 -:105D500000000000000000000000000000004108FA -:105D60004000008421060000000000000000000048 +:105D50000000000000000000000000000000000043 +:105D60000000000000000000000000000000000033 :105D70000000000000000000000000000000000023 :105D80000000000000000000000000000000000013 :105D90000000000000000000000000000000000003 :105DA00000000000000000000000000000000000F3 -:105DB00000FF0000FFFF00000000000000000000E6 +:105DB00000000000000000000000000000000000E3 :105DC00000000000000000000000000000000000D3 :105DD00000000000000000000000000000000000C3 :105DE00000000000000000000000000000000000B3 -:105DF0000000000000000000000000003C3C00002B -:105E0000666600000F0F0000666600000F0F0000BE -:105E10000F0F0000666600000F0F0000FFFF00007C -:105E2000666600003C3CFFFFF0F0003C003C0606CC -:105E3000060600FF00000000000000000000000057 +:105DF00000000000000000000000000000000000A3 +:105E00000000000000000000000000000000000092 +:105E10000000000000000000000000000000000082 +:105E20000000000000000000000000000000000072 +:105E30000000000000000000000000000000000062 :105E40000000000000000000000000000000000052 :105E50000000000000000000000000000000000042 :105E60000000000000000000000000000000000032 -:105E700000000000000000000000000000003C3CAA -:105E80000000666600000F0F0000666600000F0F3E -:105E900000000F0F0000666600000F0F00000000FA -:105EA0000000666600003C3CFFFFF0F0003C003C58 -:105EB0000606060615792A06054D04A8000000000E +:105E70000000000000000000000000000000000022 +:105E80000000000000000000000000000000000012 +:105E90000000000000000000000000000000000002 +:105EA00000000000000000000000000000000000F2 +:105EB00000000000000000000000000000000000E2 :105EC00000000000000000000000000000000000D2 -:105ED00000000000000000000000000005180A207B -:105EE000050004A0000000080000000800000000F9 -:105EF00000000000000000000000000000004063FF -:105F000080018021920240E380018021920245E3DA -:105F1000800D802D920240E380018021920240E3B7 -:105F20008007002D920240E28006002C82020000D1 -:105F3000002800000000000000F000000000000049 +:105ED00000000000000000000000000000000000C2 +:105EE00000000000000000000000000000000000B2 +:105EF00000000000000000000000000000000000A2 +:105F00000000000000000000000000000000000091 +:105F10000000000000000000000000000000000081 +:105F20000000000000000000000000000000000071 +:105F30000000000000000000000000000000000061 :105F40000000000000000000000000000000000051 :105F50000000000000000000000000000000000041 :105F60000000000000000000000000000000000031 :105F70000000000000000000000000000000000021 -:105F80003C003C0000003C3C3C003C0000003C3C31 -:105F90000F0FFFFF0000000014141414000000FF96 -:105FA000000000000000000000000000FFFF0000F3 -:105FB0000000000000000000000000F000000000F1 +:105F80000000000000000000000000000000000011 +:105F90000000000000000000000000000000000001 +:105FA00000000000000000000000000000000000F1 +:105FB00000000000000000000000000000000000E1 :105FC00000000000000000000000000000000000D1 :105FD00000000000000000000000000000000000C1 :105FE00000000000000000000000000000000000B1 :105FF00000000000000000000000000000000000A1 -:1060000000003C003C0000003C3C3C003C00000028 -:106010003C3C0F0FFFFF000000001414141400009C -:1060200000FF000000000000000000000000000071 -:1060300000000000000000000000FFF00F00000062 +:106000000000000000000000000000000000000090 +:106010000000000000000000000000000000000080 +:106020000000000000000000000000000000000070 +:106030000000000000000000000000000000000060 :106040000000000000000000000000000000000050 :106050000000000000000000000000000000000040 :106060000000000000000000000000000000000030 :106070000000000000000000000000000000000020 -:10608000000000003C3C0000000000FF3C3C000021 -:1060900000AA00AA00FFC3C3000000003C3C3C3C37 -:1060A00000AA00AA0000000000000000000000009C -:1060B000F0F000000000000000000000FFF00F0002 +:106080000000000000000000000000000000000010 +:106090000000000000000000000000000000000000 +:1060A00000000000000000000000000000000000F0 +:1060B00000000000000000000000000000000000E0 :1060C00000000000000000000000000000000000D0 :1060D00000000000000000000000000000000000C0 :1060E00000000000000000000000000000000000B0 :1060F00000000000000000000000000000000000A0 -:106100000000000000003C3C0000000000FF3C3CA0 -:10611000000000AA00AA00FFC3C3000000000000A6 -:10612000000000AA00AA000000000000000000001B -:106130000000F0F00000000000000000000004007B -:106140002000000020008400840084002000000063 -:106150002000000020002000200084002000880093 -:1061600020000000200020002000200020008400EB -:1061700020008400200020002000200020000000DB -:1061800020002000840020002000200020002000AB -:1061900020002000200020002000200020002000FF -:1061A00020000000840020002000200004002000C7 -:1061B00020000000200020002000200020002000FF -:1061C000000000000000000000000000000040008F +:10610000000000000000000000000000000000008F +:10611000000000000000000000000000000000007F +:10612000000000000000000000000000000000006F +:10613000000000000000000000000000000000005F +:10614000000000000000000000000000200000002F +:10615000000000000000000000000000200000001F +:10616000000000000000000000000000200000000F +:1061700000000000000000000000000020000000FF +:1061800000000000000000000000000000002000EF +:1061900000000000000000000000000000002000DF +:1061A00000000000000004000000000000002000CB +:1061B00000000000000004000000000000002000BB +:1061C00000000000000000000000000000000000CF :1061D00000000000000000000000000000000000BF -:1061E000200000000000000000000000100000007F +:1061E00000000000000000000000000000000000AF :1061F000000000000000000000000000000000009F -:10620000000000000000000000000000004010023C -:10621000000000000000000040000000000010022C -:10622000000000000000000000000000000010401E -:10623000100000000000000000000000000000004E -:10624000400000000000000000000000000000000E +:10620000000000000000000000000000000000008E +:10621000000000000000000000000000000000007E +:10622000000000000000000000000000000000006E +:10623000000000000000000000000000000000005E +:10624000000000000000000000000000000000004E :10625000000000000000000000000000000000003E :10626000000000000000000000000000000000002E -:106270000000000000000009000000400040004055 +:10627000000000000000000000000000000000001E :10628000000000000000000000000000000000000E :1062900000000000000000000000000000000000FE :1062A00000000000000000000000000000000000EE -:1062B00000000000000000000000000000000000DE -:1062C00000000000000800000000000000000000C6 +:1062B00000000000000000000000020000000000DC +:1062C00000000000000000000000000000000000CE :1062D00000000000000000000000000000000000BE -:1062E00000000000000200000000000000000000AC +:1062E00000000000000000000000000000000000AE :1062F000000000000000000000000000000000009E -:106300000000004000000500000000000000000048 -:1063100000000000000000000088000000C0000035 -:106320000000000000000000200000000000000845 -:106330000000000000000000000000000008000055 -:106340000000000000080000000000000000000045 +:10630000000000000000000000000000000000008D +:10631000000000000000000000000000000000007D +:10632000000000000000000000000000000000006D +:10633000000000000000000000000000000000005D +:10634000000000000000000000000000000000004D :10635000000000000000000000000000000000003D :10636000000000000000000000000000000000002D -:106370000000000004000000000000000000000019 -:106380000000000084000000000000000000000089 -:1063900000080000000000000000000000000000F5 -:1063A00000000200000000000000000000000000EB +:10637000000000000000000000000000000000001D +:10638000000000000000000000000000000000000D +:1063900000000000000000000000000000000000FD +:1063A00000000000000000000000000000000000ED :1063B00000000000000000000000000000000000DD :1063C00000000000000000000000000000000000CD :1063D00000000000000000000000000000000000BD -:1063E00000000000080000000000000000000000A5 +:1063E00000000000000000000000000000000000AD :1063F000000000000000000000000000000000009D -:1064000000A00000000000000000002000000000CC -:1064100000000082000000000000000000000000FA +:10640000000000000000000000000000000000008C +:10641000000000000000000000000000000000007C :10642000000000000000000000000000000000006C -:106430000000000000000000000000000000030059 +:10643000000000000000000000000000000000005C :10644000000000000000000000000000000000004C -:1064500000000000004000004000C00000000000FC +:10645000000000000000000000000000000000003C :10646000000000000000000000000000000000002C :10647000000000000000000000000000000000001C :10648000000000000000000000000000000000000C :1064900000000000000000000000000000000000FC :1064A00000000000000000000000000000000000EC -:1064B00008000000000000000000000000000800CC +:1064B00000000000000000000000000000000000DC :1064C00000000000000000000000000000000000CC -:1064D000200000000040004000400040004000401C -:1064E00000000000000000000000030000000000A9 +:1064D00000000000000000000000000000000000BC +:1064E00000000000000000000000000000000000AC :1064F000000000000000000000000000000000009C -:1065000000C00000000000000000000000000000CB +:10650000000000000000000000000000000000008B :10651000000000000000000000000000000000007B :10652000000000000000000000000000000000006B :10653000000000000000000000000000000000005B :10654000000000000000000000000000000000004B -:106550000000000000000000080000000000000033 +:10655000000000000000000000000000000000003B :10656000000000000000000000000000000000002B :10657000000000000000000000000000000000001B -:106580000008000000000000000000000000000003 +:10658000000000000000000000000000000000000B :1065900000000000000000000000000000000000FB -:1065A00000000000000000080000000000000000E3 +:1065A00000000000000000000000000000000000EB :1065B00000000000000000000000000000000000DB :1065C00000000000000000000000000000000000CB -:1065D0000000000000000084000000000000000037 +:1065D00000000000000000000000000000000000BB :1065E00000000000000000000000000000000000AB -:1065F0000000000000000000000000000082000019 -:106600000084000000C0000800000000000000003E -:1066100000000000000000000000000000880000F2 +:1065F000000000000000000000000000000000009B +:10660000000000000000000000000000000000008A +:10661000000000000000000000000000000000007A :10662000000000000000000000000000000000006A -:1066300000080002000000900000000000000500BB -:1066400005C00000000021840000000000000000E0 +:10663000000000000000000000000000000000005A +:10664000000000000000000000000000000000004A :10665000000000000000000000000000000000003A -:106660000002000000000000000000000000000028 +:10666000000000000000000000000000000000002A :10667000000000000000000000000000000000001A -:1066800000000000000000000000002100000000E9 +:10668000000000000000000000000000000000000A :1066900000000000000000000000000000000000FA :1066A00000000000000000000000000000000000EA :1066B00000000000000000000000000000000000DA -:1066C00008000000000000000000000000000000C2 -:1066D00000020000020002000204020400000000A8 -:1066E000000000000000000000000000001000009A -:1066F0000000000800000000000000000000000092 +:1066C00000000000000000000000000000000000CA +:1066D00000000000000000000000000000000000BA +:1066E00000000000000000000000000000000000AA +:1066F000000000000000000000000000000000009A :106700000000000000000000000000000000000089 :106710000000000000000000000000000000000079 -:106720000000000000000000000000000200000067 +:106720000000000000000000000000000000000069 :106730000000000000000000000000000000000059 :106740000000000000000000000000000000000049 :106750000000000000000000000000000000000039 @@ -112368,237 +112368,237 @@ :106D30000000000000000000000000000000000053 :106D40000000000000000000000000000000000043 :106D50000000000000000000000000000000000033 -:106D60000000000000000000000000000000200003 -:106D70000000200020004000000020002000200033 -:106D8000200000000400C0004000880040002000F7 -:106D900088020000840021008900210021002000D9 -:106DA00000008800200020002000200020000003B8 -:106DB000208088000000200040000000200020000B -:106DC0002000000000002000200020002000200003 -:106DD0002000200000002000200088002000880003 -:106DE0002000C00000002000200020002000200023 -:106DF0000002000000000000000000000000000091 -:106E00000000000000000000000200004000000040 -:106E10004002000000000000040004000400040020 -:106E20000000000000000000004000000000000022 -:106E300000004040000000000000000000000000D2 -:106E400000000000000000000000800080008000C2 -:106E500080000000090000000000000000000000A9 -:106E60000000000000000000000000000000000022 +:106D60000000000000000000000000000000000023 +:106D70000000000000000000000000000000000013 +:106D80000000000000000000000000000000000003 +:106D900000000000000000000000000000000000F3 +:106DA00000000000000000000000000000000000E3 +:106DB00000000000000000000000000000000000D3 +:106DC00000000000000000000000000000000000C3 +:106DD00000000000000000000000000000000000B3 +:106DE00000000000000000000000000000000000A3 +:106DF0000000000000000000000000000000000093 +:106E00000000000000000000000000000000000082 +:106E10000000000000000000000000000000000072 +:106E20000000000000000000000000000000000062 +:106E3000000000000000000000000000000000044E +:106E4000000000000000000000000000000000043E +:106E5000000000000000000000000000000000042E +:106E6000000400000000000000000000000000041A :106E70000000000000000000000000000000000012 -:106E800000000000000000000000000800080000F2 -:106E9000000800200080008000800000000000004A +:106E80000000000000000000000000000000000002 +:106E900000000000000000000000000000000000F2 :106EA00000000000000000000000000000000000E2 -:106EB00002100000000000000000001000000000B0 -:106EC0000000004100000000000000000000000081 -:106ED00000000010000000000000000001000000A1 +:106EB00000000000000000000000000000000000D2 +:106EC00000000000000000000000000000000000C2 +:106ED00000000000000000000000000000000000B2 :106EE00000000000000000000000000000000000A2 -:106EF000000000100000000800080008000000006A -:106F0000000000000000000000000000000100017F -:106F1000000000010001002000200020000000000F +:106EF000000000000000000000000000000000088A +:106F00000000000000000000000000000000000081 +:106F10000000000000000000000000000000000869 :106F20000000000000000000000000000000000061 -:106F30000000000000000000000000000000001041 -:106F400000000010001000000000001000100010F1 -:106F500000000000000000C000C00010001002008F -:106F60000000000000000000000000000900000018 -:106F700000000000000000000000820090000000FF +:106F30000000000000000000000000000000000051 +:106F4000000400000000000000000000000000003D +:106F50000000000000000000000000000000000031 +:106F60000000000000000000000000000000000021 +:106F70000000000000000000000000000000000011 :106F80000000000000000000000000000000000001 :106F900000000000000000000000000000000000F1 -:106FA00000000041000004000400C00000000000D8 -:106FB00000000000000000000000000000100000C1 -:106FC0000000C000040004000000000000000000F9 -:106FD0000021002004000000040004004100010022 -:106FE00000210000000000009000040000000000EC -:106FF000002004000000000000000000000000006D +:106FA00000000000000000000000000000000000E1 +:106FB00000000000000000000000000000000000D1 +:106FC00000000000000000000000000000000000C1 +:106FD00000000000000000000000000000000000B1 +:106FE00000000000000000000000000000000000A1 +:106FF0000000000000000000000000000000000091 :107000000000000000000000000000000000000080 :107010000000000000000000000000000000000070 -:10702000000000000000000000000000000004005C +:107020000000000000000000000000000000000060 :107030000000000000000000000000000000000050 -:1070400000000000000000008000000000000000C0 -:10705000000000000000000000008000800004002C -:10706000040000A00000000000000000000000007C +:107040000000000000000000000000000000000040 +:107050000000000000000000000000000000000030 +:107060000000000000000000000000000000000020 :107070000000000000000000000000000000000010 -:1070800000000000000010000000100004000000DC -:107090000000108308840084088200000010A01003 -:1070A0000000000000000000820000000800000056 -:1070B000000000000000000082000000000000004E -:1070C000000001000800000000048200C000A000D1 -:1070D000000000008200080000000800000000001E -:1070E0000000C000000001000000090000000000D6 -:1070F00000000000000000000000820009001100F4 -:10710000110011000000000000000000000000005D -:1071100000000000002000210021002103000000E9 -:107120000000000003000000100000080000000044 -:1071300000A0008200100010000000000000000805 -:107140000008000804080000000000000000000023 -:107150000000110000000000000008000000001006 -:1071600000100084008403000400000004000000FC -:10717000000000000000000000000000000000040B -:1071800000000000000000000041000000000000BE -:107190000000000000000000880090000000841043 -:1071A000001000000010000000000000C0000000FF -:1071B00000000000000000080000000300000000C4 -:1071C00000000010042000000000A000008000006B -:1071D00000000000000000000800000000000000A7 -:1071E00082000000000000000000000000200000FD -:1071F000000000000000000000000000900090006F +:107080000000000000000000000000000000000000 +:1070900000000000000000000000000000000000F0 +:1070A00000000000000000000000000000000000E0 +:1070B00000000000000000000000000000000000D0 +:1070C00000000000000000000000000000000000C0 +:1070D00000000000000000000000000000000000B0 +:1070E00000000000000000000000000000000000A0 +:1070F0000000000000000000000000000000000090 +:10710000000000000000000000000000000000007F +:10711000000000000000000000000000000000006F +:10712000000000000000000000000000000000005F +:10713000000000000000000000000000000000004F +:10714000000000000000000000000000000000003F +:10715000000000000000000000000000000000002F +:10716000000000000000000000000000000000001F +:10717000000000000000000000000000000000000F +:1071800000000000000000000000000000000000FF +:1071900000000000000000000000000000000000EF +:1071A00000000000000000000000000000000000DF +:1071B00000000000000000000000000000000000CF +:1071C00000000000000000000000000000000000BF +:1071D00000000000000000000000000000000000AF +:1071E000000000000000000000000000000000009F +:1071F000000000000000000000000000000000008F :10720000000000000000000000000000000000007E :10721000000000000000000000000000000000006E -:10722000000100010000000000000000000000005C +:10722000000000000000000000000000000000005E :10723000000000000000000000000000000000004E -:10724000000000000000000100000000000000201D +:10724000000000000000000000000000000000003E :10725000000000000000000000000000000000002E -:10726000000000000000110000000000000000010C +:10726000000000000000000000000000000000001E :10727000000000000000000000000000000000000E -:10728000000090000000000000000041000000002D -:1072900000000000000000000000008000000880E6 -:1072A00000800000004008100800000000000000FE +:1072800000000000000000000000000000000000FE +:1072900000000000000000000000000000000000EE +:1072A00000000000000000000000000000000000DE :1072B00000000000000000000000000000000000CE -:1072C00000000000000008000000000000000800AE -:1072D00000000000000000000800000000000000A6 -:1072E000000000000000000000000000002100007D -:1072F0000004000400000000000000000000000086 -:107300000000000003C0000040C021C021C000C038 -:107310000002000000000000000000000004000067 -:107320000008000400000001000100000008000047 -:1073300000080000000000820008000800000000B3 +:1072C00000000000000000000000000000000000BE +:1072D00000000000000000000000000000000000AE +:1072E000000000000000000000000000000000009E +:1072F000000000000000000000000000000000008E +:10730000000000000000000000000000000000007D +:10731000000000000000000000000000000000006D +:10732000000000000000000000000000000000005D +:10733000000000000000000000000000000000004D :10734000000000000000000000000000000000003D :10735000000000000000000000000000000000002D :10736000000000000000000000000000000000001D :10737000000000000000000000000000000000000D -:1073800000000000000009A0008800049002000036 -:1073900000000000000000000000000000000001EC -:1073A00001C1010000000020000000840000000076 +:1073800000000000000000000000000000000000FD +:1073900000000000000000000000000000000000ED +:1073A00000000000000000000000000000000000DD :1073B00000000000000000000000000000000000CD -:1073C00000000000000000000000904000000000ED +:1073C00000000000000000000000000000000000BD :1073D00000000000000000000000000000000000AD -:1073E0000000000000000000000800840000000011 +:1073E000000000000000000000000000000000009D :1073F000000000000000000000000000000000008D -:1074000000000000000000001000000000000080EC +:10740000000000000000000000000000000000007C :10741000000000000000000000000000000000006C -:1074200000411010051100002000000000000000C5 +:10742000000000000000000000000000000000005C :10743000000000000000000000000000000000004C -:1074400000000000000000000000110080000000AB +:10744000000000000000000000000000000000003C :10745000000000000000000000000000000000002C -:10746000000000000000000000000080000000009C -:1074700000001100000000000000000000000000FB -:1074800000000000000000000000800000A080005C -:1074900080800000000000000000000000000000EC -:1074A0000000000000000921008000000021000011 -:1074B000000000000000000000800000000000004C -:1074C000000000000000000000000000000000803C -:1074D000000000800000000000000000000000002C -:1074E00000000000002000000005000080000000F7 -:1074F000000080000000008000000080000000000C -:107500000000000000000000000000000800C0C1F2 -:1075100040A010C0000000000000000000000000BB -:107520000000000000009000000100A020001000FA -:107530000000000000000020000000040000000027 +:10746000000000000000000000000000000000001C +:10747000000000000000000000000000000000000C +:1074800000000000000000000000000000000000FC +:1074900000000000000000000000000000000000EC +:1074A00000000000000000000000000000000000DC +:1074B00000000000000000000000000000000000CC +:1074C00000000000000000000000000000000000BC +:1074D00000000000000000000000000000000000AC +:1074E000000000000000000000000000000000009C +:1074F000000000000000000000000000000000008C +:10750000000000000000000000000000000000007B +:10751000000000000000000000000000000000006B +:10752000000000000000000000000000000000005B +:10753000000000000000000000000000000000004B :10754000000000000000000000000000000000003B -:107550000020000000C000000200000084000000C5 -:107560000000000000000000000000000000080013 -:1075700000000000080000000020000000020000E1 -:1075800000000000000000000000000000000304F4 -:107590000004C04004C00000000000000000000023 -:1075A00000000000000001C0A090020003010020C4 -:1075B00000100000000000000000040000000000B7 +:10755000000000000000000000000000000000002B +:10756000000000000000000000000000000000001B +:10757000000000000000000000000000000000000B +:1075800000000000000000000000000000000000FB +:1075900000000000000000000000000000000000EB +:1075A00000000000000000000000000000000000DB +:1075B00000000000000000000000000000000000CB :1075C00000000000000000000000000000000000BB -:1075D0000100008888000100000200000084000013 -:1075E000000000000000000000002000000000007B -:1075F000000800000008000001000088880000006A +:1075D00000000000000000000000000000000000AB +:1075E000000000000000000000000000000000009B +:1075F000000000000000000000000000000000008B :10760000000000000000000000000000000000007A -:10761000C100000080000000000000000000000029 -:107620000000000000000000211190090000A141AD -:1076300000000000000000002000000080000000AA +:10761000000000000000000000000000000000006A +:10762000000000000000000000000000000000005A +:10763000000000000000000000000000000000004A :10764000000000000000000000000000000000003A -:107650000000410000800000090000000000000060 +:10765000000000000000000000000000000000002A :10766000000000000000000000000000000000001A -:107670004000008000000080000008000080000042 +:10767000000000000000000000000000000000000A :1076800000000000000000000000000000000000FA -:1076900000000004808000000000000000000000E6 -:1076A00000000000000000000000000000081100C1 -:1076B00000000003002100000000000000000000A6 +:1076900000000000000000000000000000000000EA +:1076A00000000000000000000000000000000000DA +:1076B00000000000000000000000000000000000CA :1076C00000000000000000000000000000000000BA -:1076D0000000000000110000008000000000000217 +:1076D00000000000000000000000000000000000AA :1076E000000000000000000000000000000000009A -:1076F000000000008004800800000000001100006D -:1077000000800000000000000000000000000000F9 -:107710000000000008010220A088200000000000F6 -:107720000000000000000000000000000000000158 -:1077300000100000000000000000840000000000B5 +:1076F000000000000000000000000000000000008A +:107700000000000000000000000000000000000079 +:107710000000000000000000000000000000000069 +:107720000000000000000000000000000000000059 +:107730000000000000000000000000000000000049 :107740000000000000000000000000000000000039 -:1077500000000000000000010000004000000000E8 +:107750000000000000000000000000000000000029 :107760000000000000000000000000000000000019 -:1077700000000000000008012000000000000001DF -:1077800000000040000000000000000000000000B9 -:10779000000000000000000000000000484200005F +:107770000000000000000000000000000000000009 +:1077800000000000000000000000000000000000F9 +:1077900000000000000000000000000000000000E9 :1077A00000000000000000000000000000000000D9 -:1077B000004422000000000000000800000000005B -:1077C00000000700000000000000000000000000B2 -:1077D00000000000000000000000000007008221FF -:1077E000000600000700000000000000000000008C -:1077F000000002E00000000000820000070000001E -:107800000000000007000000000000000000000071 -:1078100000000000000000000009006004100820C3 +:1077B00000000000000000000000000000000000C9 +:1077C00000000000000000000000000000000000B9 +:1077D00000000000000000000000000000000000A9 +:1077E0000000000000000000000000000000000099 +:1077F0000000000000000000000000000000000089 +:107800000000000000000000000000000000000078 +:107810000000000000000000000000000000000068 :107820000000000000000000000000000000000058 -:1078300000000000303030303C3C3C3C30303030D8 +:107830000000000000000000000000000000000048 :107840000000000000000000000000000000000038 -:107850000000000000000000000000000000F0F048 -:10786000000000000000003C003C000000000000A0 -:1078700000000000000000000000000000FF003CCD -:10788000003C00000000F0F00000000000000000DC -:10789000000000000000000000000900600001403E -:1078A0000280000000000000000000000000000056 -:1078B00000000000000030303030000000003030A8 -:1078C0003030000000000000000000000000000058 +:107850000000000000000000000000000000000028 +:107860000000000000000000000000000000000018 +:107870000000000000000000000000000000000008 +:1078800000000000000000000000000000000000F8 +:1078900000000000000000000000000000000000E8 +:1078A00000000000000000000000000000000000D8 +:1078B00000000000000000000000000000000000C8 +:1078C00000000000000000000000000000000000B8 :1078D00000000000000000000000000000000000A8 -:1078E000F0F0000000000000003C003C0000000040 -:1078F000000000000000000000000000000000FF89 -:10790000003C003C00000000F0F00000000000001F -:1079100000000000000000000000000006900000D1 -:1079200006900000000000000000000000000000C1 -:1079300000000000550055000F0F0F0F0F0F000043 -:107940000C0C0C0C00000000000000000000000007 +:1078E0000000000000000000000000000000000098 +:1078F0000000000000000000000000000000000088 +:107900000000000000000000000000000000000077 +:107910000000000000000000000000000000000067 +:107920000000000000000000000000000000000057 +:107930000000000000000000000000000000000047 +:107940000000000000000000000000000000000037 :107950000000000000000000000000000000000027 -:10796000FF000000FFFF000000000F0F00000000FC -:107970000000000000000000000000000000FF0008 -:1079800000003C3C0000000000000000FFFF000081 +:107960000000000000000000000000000000000017 +:107970000000000000000000000000000000000007 +:1079800000000000000000000000000000000000F7 :1079900000000000000000000000000000000000E7 -:1079A00006900000069000000000000000000000AB -:1079B00000000000000055005500000000000F0FFF -:1079C00000000C0C0C0C0000000000000000000087 +:1079A00000000000000000000000000000000000D7 +:1079B00000000000000000000000000000000000C7 +:1079C00000000000000000000000000000000000B7 :1079D00000000000000000000000000000000000A7 -:1079E0000000FF0000000000000000000F0F00007A +:1079E0000000000000000000000000000000000097 :1079F0000000000000000000000000000000000087 -:107A0000FF0000003C3C00000000000000000000FF +:107A00000000000000000000000000000000000076 :107A10000000000000000000000000000000000066 -:107A2000000000000000080000000000000000004E -:107A300000000000000000000500000B000C00002A -:107A4000000000080000000105180A00050005A05C +:107A20000000000000000000000000000000000056 +:107A30000000000000000000000000000000000046 +:107A40000000000000000000000000000000000036 :107A50000000000000000000000000000000000026 -:107A6000000005002A00054000A8000000280000D2 -:107A70000000000000000000000000650006000F8C -:107A80002000000000280000000005000A0005405A -:107A900000A800000000000000000000000000003E +:107A60000000000000000000000000000000000016 +:107A70000000000000000000000000000000000006 +:107A800000000000000000000000000000000000F6 +:107A900000000000000000000000000000000000E6 :107AA00000000000000000000000000000000000D6 -:107AB0000000000000000000000000000F0FF0F0C8 -:107AC0003C3C00000000000000000000000000003E +:107AB00000000000000000000000000000000000C6 +:107AC00000000000000000000000000000000000B6 :107AD00000000000000000000000000000000000A6 :107AE0000000000000000000000000000000000096 :107AF0000000000000000000000000000000000086 :107B00000000000000000000000000000000000075 :107B10000000000000000000000000000000000065 :107B20000000000000000000000000000000000055 -:107B300000000000000000000000000000000F0F27 -:107B4000F0F0FFFF00000000000000000000000057 +:107B30000000000000000000000000000000000045 +:107B40000000000000000000000000000000000035 :107B50000000000000000000000000000000000025 :107B60000000000000000000000000000000000015 :107B70000000000000000000000000000000000005 :107B800000000000000000000000000000000000F5 :107B900000000000000000000000000000000000E5 :107BA00000000000000000000000000000000000D5 -:107BB0000000000000000000000000000000550070 -:107BC0000F0F00FF00000000000000000000000098 +:107BB00000000000000000000000000000000000C5 +:107BC00000000000000000000000000000000000B5 :107BD00000000000000000000000000000000000A5 :107BE0000000000000000000000000000000000095 :107BF0000000000000000000000000000000000085 @@ -112606,195 +112606,195 @@ :107C10000000000000000000000000000000000064 :107C20000000000000000000000000000000000054 :107C30000000000000000000000000000000000044 -:107C400055000F0F00FF00000000000000000000C2 +:107C40000000000000000000000000000000000034 :107C50000000000000000000000000000000000024 :107C60000000000000000000000000000000000014 :107C70000000000000000000000000000000000004 :107C800000000000000000000000000000000000F4 :107C900000000000000000000000000000000000E4 -:107CA000000000000000000000008800C000C0804C -:107CB0008800A000000000002000880020002000B4 -:107CC00000008800000000000000880000000000A4 -:107CD000880000004000000020002000200020005C -:107CE0000000200000000000000000002000000054 -:107CF0000000200000002000000020000400000020 -:107D000000008800200000000000000020000000AB -:107D100084002000000320000000200084000400F4 -:107D20000000200020000000000000000000000013 -:107D30000040000000000000000000000000000003 -:107D40000000000000000000000000000000000231 -:107D5000000000020000000200000000000200001D -:107D600000000000000000004000000000000000D3 -:107D700000000000100000000000000000000000F3 -:107D800000000000000000000000000010000000E3 -:107D900000000000000000000000000010000000D3 +:107CA00000000000000000000000000000000000D4 +:107CB00000000000000000000000000000000000C4 +:107CC00000000000000000000000000000000000B4 +:107CD00000000000000000000000000000000000A4 +:107CE0000000000000000000000000000000000094 +:107CF0000000000000000000000000000000000084 +:107D00000000000000000000000000000000000073 +:107D10000000000000000000000000000000000063 +:107D20000000000000000000000000000000000053 +:107D30000000000000000000000000000000000043 +:107D40000000000000000000000000000000000033 +:107D50000000000000000000000000000000000023 +:107D60000000000000000000000000000000000013 +:107D70000000000000000000000000000000000003 +:107D800000000000000000000000000000000000F3 +:107D900000000000000000000000000000000000E3 :107DA00000000000000000000000000000000000D3 -:107DB00000000200000000000000000000000000C1 +:107DB00000000000000000000000000000000000C3 :107DC00000000000000000000000000000000000B3 -:107DD0000000000000000000000000400000000063 +:107DD00000000000000000000000000000000000A3 :107DE0000000000000000000000000000000000093 :107DF0000000000000000000000000000000000083 -:107E0000002000A00020040000000000000000008E -:107E100000000000000000400000000000000040E2 +:107E00000000000000000000000000000000000072 +:107E10000000000000000000000000000000000062 :107E20000000000000000000000000000000000052 -:107E300000000000800000000000000000000000C2 -:107E40000000000000000000000000000000000032 -:107E50000000000000000000000000000001000021 -:107E60000082009000900008000000000000000068 -:107E70000000000000000000000000000000000002 -:107E8000000000010041000180080088008800888F -:107E9000008800000000000000000000000000005A -:107EA00000000000000000000008000000000000CA -:107EB00000080000000000000000000000000000BA -:107EC0000000001100000000000800000000000099 +:107E30000008000800080008000000000000000022 +:107E4000000000080000000000080008000800080A +:107E50000008000800080008000000000000000002 +:107E600000000008000000000008000800080008EA +:107E700000000008000800040004000000000000EA +:107E800000000000000800000000000800080004D6 +:107E900000040004000400000000000000000000D6 +:107EA00000000000000800000000000800080000BA +:107EB00000000000000000000000000000000000C2 +:107EC00000000000000000000000000000000000B2 :107ED00000000000000000000000000000000000A2 :107EE0000000000000000000000000000000000092 -:107EF0000041000000000000000000000000000041 +:107EF0000000000000000000000000000000000082 :107F00000000000000000000000000000000000071 -:107F1000000000000000002100000000002100001F -:107F2000000000020000002100000000000300002B -:107F3000000000001100000400000000000000002C -:107F400000000000100000000000000040000000E1 -:107F500000000000210021840084000000100010B7 +:107F10000000000000000000000000000000000061 +:107F20000000000000000000000000000000000051 +:107F30000000000000000000000000000000000041 +:107F40000000000000000000000000000000000031 +:107F50000000000000000000000000000000000021 :107F60000000000000000000000000000000000011 :107F70000000000000000000000000000000000001 -:107F800000000000000008000800000000000000E1 +:107F800000000000000000000000000000000000F1 :107F900000000000000000000000000000000000E1 -:107FA00009000000000000000000000000000000C8 -:107FB00000000000000008000000000008001000A1 -:107FC0000000000000000800000000008200001116 -:107FD000C0000000000010000000001000000000C1 -:107FE0000000000000000000000000001000000081 -:107FF00000000000000000000000000000008200FF +:107FA00000000000000000000000000000000000D1 +:107FB00000000000000000000000000000000000C1 +:107FC00000000000000000000000000000000000B1 +:107FD00000000000000000000000000000000000A1 +:107FE0000000000000000000000000000000000091 +:107FF0000000000000000000000000000000000081 :108000000000000000000000000000000000000070 :108010000000000000000000000000000000000060 -:108020000000000000000000080000000000000048 -:10803000000000000000000005000000000000003B -:10804000000000000000000000C000C000C000C030 -:108050000000000000000090000000000000000090 -:108060000000000000000000000000080000000008 +:108020000000000000000000000000000000000050 +:108030000000000000000000000000000000000040 +:108040000000000000000000000000000000000030 +:108050000000000000000000000000000000000020 +:108060000000000000000000000000000000000010 :108070000000000000000000000000000000000000 -:1080800000000000000000000000000000000800E8 -:1080900000000000000000020000000000000000DE +:1080800000000000000000000000000000000000F0 +:1080900000000000000000000000000000000000E0 :1080A00000000000000000000000000000000000D0 :1080B00000000000000000000000000000000000C0 -:1080C00000000000000000000000000000000400AC -:1080D0000000000000000000000008000000080090 -:1080E0000800080082000000000000418400000039 -:1080F000000000080008004100000000000000002F -:108100000000000000000000080000000000000067 -:108110000000000000000000001000080000000047 +:1080C00000000000000000000000000000000000B0 +:1080D00000000000000000000000000000000000A0 +:1080E0000000000000000000000000000000000090 +:1080F0000000000000000000000000000000000080 +:10810000000000000000000000000000000000006F +:10811000000000000000000000000000000000005F :10812000000000000000000000000000000000004F :10813000000000000000000000000000000000003F -:10814000400404A000000000000000000000000047 -:1081500000000000400000000004000000000000DB -:1081600000100000000000000000000000000000FF +:10814000000000000000000000000000000000002F +:10815000000000000000000000000000000000001F +:10816000000000000000000000000000000000000F :1081700000000000000000000000000000000000FF -:1081800000000000008400000000800000000000EB -:1081900000000000000000000000000100000000DE -:1081A000000000880000000200840000008400003D -:1081B0000000000000000084000000C000C0880033 -:1081C0008800000088000000000000000020000877 -:1081D000000800080000080008000000000000007F -:1081E00008000000840010000040001000000000A3 -:1081F00000410000000000410041000800080000AC -:10820000000000000000000000000000000000026C -:10821000000000000000000000210000000000211C +:1081800000000000000000000000000000000000EF +:1081900000000000000000000000000000000000DF +:1081A00000000000000000000000000000000000CF +:1081B00000000000000000000000000000000000BF +:1081C00000000000000000000000000000000000AF +:1081D000000000000000000000000000000000009F +:1081E000000000000000000000000000000000008F +:1081F000000000000000000000000000000000007F +:10820000000000000000000000000000000000006E +:10821000000000000000000000000000000000005E :10822000000000000000000000000000000000004E -:10823000000000020000000200000000000000003A +:10823000000000000000000000000000000000003E :10824000000000000000000000000000000000002E -:108250000000000000000000000009000000000015 +:10825000000000000000000000000000000000001E :10826000000000000000000000000000000000000E :1082700000000000000000000000000000000000FE :1082800000000000000000000000000000000000EE :1082900000000000000000000000000000000000DE :1082A00000000000000000000000000000000000CE :1082B00000000000000000000000000000000000BE -:1082C000000020900082004020820804821000906C -:1082D000C0040000000000000000000000000000DA -:1082E00000000000000000000000900800080004EA -:1082F000042004020008000802080000000000003A +:1082C00000000000000000000000000000000000AE +:1082D000000000000000000000000000000000009E +:1082E000000000000000000000000000000000008E +:1082F000000000000000000000000000000000007E :10830000000000000000000000000000000000006D -:108310000000000000C0024000201090000000009B +:10831000000000000000000000000000000000005D :10832000000000000000000000000000000000004D :10833000000000000000000000000000000000003D -:1083400000000000000000000000000000800000AD -:10835000000000800000000000000000000000009D -:10836000000000000000000000000000000000808D -:1083700000000000808000800080808000000000FD +:10834000000000000000000000000000000000002D +:10835000000000000000000000000000000000001D +:10836000000000000000000000000000000000000D +:1083700000000000000000000000000000000000FD :1083800000000000000000000000000000000000ED -:1083900000000000000009800080000000000000D4 +:1083900000000000000000000000000000000000DD :1083A00000000000000000000000000000000000CD :1083B00000000000000000000000000000000000BD -:1083C00000000000000000000085008080800000A8 -:1083D000809080800080000000000000000000000D +:1083C00000000000000000000000000000000000AD +:1083D000000000000000000000000000000000009D :1083E000000000000000000000000000000000008D -:1083F000008500008080000000C0800080800000B8 +:1083F000000000000000000000000000000000007D :10840000000000000000000000000000000000006C -:1084100000000000000000008000804100418080DA +:10841000000000000000000000000000000000005C :10842000000000000000000000000000000000004C :10843000000000000000000000000000000000003C -:108440000000000000000000400002C0820408C0DC -:10845000820008C1088288C00000000000000000FF +:10844000000000000000000000000000000000002C +:10845000000000000000000000000000000000001C :10846000000000000000000000000000000000000C -:10847000040088C0C08804C0020090C1102010C051 +:1084700000000000000000000000000000000000FC :1084800000000000000000000000000000000000EC -:10849000000000000000000000004000400120013A -:1084A000C008000000000000000000000000000004 +:1084900000000000000000000000000000000000DC +:1084A00000000000000000000000000000000000CC :1084B00000000000000000000000000000000000BC -:1084C00000000000000000000000058200A0C09035 -:1084D000889021080004C008A1820000000000006C +:1084C00000000000000000000000000000000000AC +:1084D000000000000000000000000000000000009C :1084E000000000000000000000000000000000008C -:1084F000000083100090C09010C021100010C0C078 -:108500000210000000000000000000010000000058 -:108510000000000000000000000000004002008297 -:10852000108401C0000000000000000000000000F6 +:1084F000000000000000000000000000000000007C +:10850000000000000000000000000000000000006B +:10851000000000000000000000000000000000005B +:10852000000000000000000000000000000000004B :10853000000000000000000000000000000000003B -:10854000000000000000000000000000C10000006A -:10855000800000004180008080001080000000004A +:10854000000000000000000000000000000000002B +:10855000000000000000000000000000000000001B :10856000000000000000000000000000000000000B -:1085700000000000410000008000000041000000F9 -:10858000800080800000000000000000000100006A -:1085900000000000000000000000000000008080DB -:1085A000008000804180000000000000000000000A +:1085700000000000000000000000000000000000FB +:1085800000000000000000000000000000000000EB +:1085900000000000000000000000000000000000DB +:1085A00000000000000000000000000000000000CB :1085B00000000000000000000000000000000000BB :1085C00000000000000000000000000000000000AB -:1085D0000000000080000000800400000000000097 +:1085D000000000000000000000000000000000009B :1085E000000000000000000000000000000000008B -:1085F00000000000000080008080008000008002F9 -:1086000080000000000000000000000000000001E9 +:1085F000000000000000000000000000000000007B +:10860000000000000000000000000000000000006A :10861000000000000000000000000000000000005A -:108620008011000880418000000000000000000070 +:10862000000000000000000000000000000000004A :10863000000000000000000000000000000000003A :10864000000000000000000000000000000000002A -:10865000200020A0A0400400080082C182C0820047 +:10865000000000000000000000000000000000001A :10866000000000000000000000000000000000000A -:10867000000000000000000002001002880240001C -:10868000080120088208C00000000000000000006F -:1086900000010000000000000000000000000000D9 -:1086A0000000C000200084101090000000000000B6 +:1086700000000000000000000000000000000000FA +:1086800000000000000000000000000000000000EA +:1086900000000000000000000000000000000000DA +:1086A00000000000000000000000000000000000CA :1086B00000000000000000000000000000000000BA :1086C00000000000000000000000000000000000AA -:1086D0000000000000000000484200000000000010 -:1086E0004842000000000000000000000000000000 +:1086D000000000000000000000000000000000009A +:1086E000000000000000000000000000000000008A :1086F000000000000000000000000000000000007A -:108700004842000000000000484200000000000055 +:108700000000000000000000000000000000000069 :108710000000000000000000000000000000000059 -:1087200000000000000000000800414200000000BE +:108720000000000000000000000000000000000049 :108730000000000000000000000000000000000039 :108740000000000000000000000000000000000029 -:1087500000000000200440022800410020044002E4 -:1087600020041008000000000000000000000000CD -:10877000000000000000000000000000A00000A0B9 -:10878000204004022040040220104080000000002D +:108750000000000000000000000000000000000019 +:108760000000000000000000000000000000000009 +:1087700000000000000000000000000000000000F9 +:1087800000000000000000000000000000000000E9 :1087900000000000000000000000000000000000D9 :1087A00000000000000000000000000000000000C9 :1087B00000000000000000000000000000000000B9 :1087C00000000000000000000000000000000000A9 -:1087D000000000000000100880010028004110087F -:1087E0008001400280010000000000000000000045 -:1087F0000000000000000000000000000000050074 -:108800000005108008011080080104080201000022 +:1087D0000000000000000000000000000000000099 +:1087E0000000000000000000000000000000000089 +:1087F0000000000000000000000000000000000079 +:108800000000000000000000000000000000000068 :108810000000000000000000000000000000000058 :108820000000000000000000000000000000000048 :108830000000000000000000000000000000000038 @@ -112804,32 +112804,32 @@ :1088700000000000000000000000000000000000F8 :1088800000000000000000000000000000000000E8 :1088900000000000000000000000000000000000D8 -:1088A00000000000000000000000410840000084BB -:1088B0002106000000000000000000000000000091 +:1088A00000000000000000000000000000000000C8 +:1088B00000000000000000000000000000000000B8 :1088C00000000000000000000000000000000000A8 -:1088D000000000000000000000000082001400A062 -:1088E000000544000044000088440000000000002F +:1088D0000000000000000000000000000000000098 +:1088E0000000000000000000000000000000000088 :1088F0000000000000000000000000000000000078 -:10890000000000A00005008200140082001400A0F6 -:108910000005000000000000000000000000000052 +:108900000000000000000000000000000000000067 +:108910000000000000000000000000000000000057 :108920000000000000000000000000000000000047 :108930000000000000000000000000000000000037 :108940000000000000000000000000000000000027 -:108950000000000000000000000000008200140081 -:10896000A000050088000088884400000000000086 +:108950000000000000000000000000000000000017 +:108960000000000000000000000000000000000007 :1089700000000000000000000000000000000000F7 -:1089800000000000A0000500820014008200140016 -:10899000A000050000000000000000000000000032 +:1089800000000000000000000000000000000000E7 +:1089900000000000000000000000000000000000D7 :1089A00000000000000000000000000000000000C7 :1089B00000000000000000000000000000000000B7 :1089C00000000000000000000000000000000000A7 -:1089D0000000000000000000000000000000600037 -:1089E000000000001000000000000000080000006F +:1089D0000000000000000000000000000000000097 +:1089E0000000000000000000000000000000000087 :1089F0000000000000000000000000000000000077 -:108A000000000000000060000000000010000000F6 -:108A1000000000000800000000000000000000004E +:108A00000000000000000000000000000000000066 +:108A10000000000000000000000000000000000056 :108A20000000000000000000000000000000000046 -:108A30000000000800000008000000000000000026 +:108A30000000000000000000000000000000000036 :108A40000000000000000000000000000000000026 :108A50000000000000000000000000000000000016 :108A60000000000000000000000000000000000006 @@ -112864,105 +112864,105 @@ :108C30000000000000000000000000000000000034 :108C40000000000000000000000000000000000024 :108C50000000000000000000000000000000000014 -:108C60000000000000000000A00020000000200024 -:108C70008400C000100088002000000000002000D8 -:108C8000000000000000880000002000000000003C -:108C900000000000000000000000000000002000B4 -:108CA00000000000000000000002000000000000C2 -:108CB0000000200020002000200000000000000034 -:108CC0002000000000008400000000000000000000 -:108CD0000000208020002000200000000000000094 -:108CE0002000040000000000000020000000000040 -:108CF00000001000100040001000400200000000C2 -:108D00000000000000004000000000000000000023 -:108D100000000000400000000000400200000002CF -:108D20000000400000000000000000000000000003 -:108D30000000000080008000800080000000000033 -:108D4000000000000000000000000004000000001F -:108D5000000000000004000000000000000000000F -:108D600000000000000000020000000020000204DB -:108D700000042000000000000000000000000000CF +:108C60000000000000000000000000000000000004 +:108C700000000000000000000000000000000000F4 +:108C800000000000000000000000000000000000E4 +:108C900000000000000000000000000000000000D4 +:108CA00000000000000000000000000000000000C4 +:108CB00000000000000000000000000000000000B4 +:108CC0000000000000080004000000000000000098 +:108CD0000000000000000004000000000000000090 +:108CE000000000000000000400040000000000007C +:108CF0000000000000000000000000000000000074 +:108D00000000000000000000000000000000000063 +:108D10000000000000000000000000000000000053 +:108D20000000000000000000000000000000000043 +:108D30000000000000000000000000000000000033 +:108D40000000000000000000000000000000000023 +:108D50000000000000000000000000000000000013 +:108D600000000000000000000000000800000000FB +:108D700000000000000000000000000000000000F3 :108D800000000000000000000000000000000000E3 -:108D90000000000000000000000000100000004083 +:108D900000000000000000000000000000000000D3 :108DA00000000000000000000000000000000000C3 -:108DB00000000000000000000000000000100000A3 -:108DC0000000000900000200000000000000000098 -:108DD0000000000000000000000000000010000083 -:108DE0000000000000008800000000000000800873 -:108DF00000090009800800100008000000100010A1 -:108E0000000000840088000000000004000000084A -:108E100000080008000800000088000000040000AE -:108E20000000000000000000000000000000000042 -:108E300000080008000800080000000000C0000052 -:108E400000400000000000000000004000000000A2 -:108E500000080008000400040000004000000000BA -:108E60000000000000000000000000000000000002 -:108E70008800100000090000000000000000000051 +:108DB00000000000000000000000000000000000B3 +:108DC00000000000000000000000000000000000A3 +:108DD0000000000000000000000000000000000093 +:108DE0000000000000000000000000000000000083 +:108DF0000000000000000008000800080000000853 +:108E0000000800080008000800080008000800002A +:108E10000000000000000008000800080000000832 +:108E2000000800080008000800080004000800000E +:108E3000000000000000000000080008000400001E +:108E4000000800080004000400080084000000047A +:108E50000000000000000000000800080000000002 +:108E600000020002000000000008000800000000EE +:108E700000000000000000000000000000000000F2 :108E800000000000000000000000000000000000E2 -:108E90000000000000400000000000000000000092 -:108EA00000000000000000000000000800000010AA -:108EB00000000000000000000000000000080100A9 +:108E900000000000000000000000000000000000D2 +:108EA00000000000000000000000000000000000C2 +:108EB00000000000000000000000000000000000B2 :108EC00000000000000000000000000000000000A2 -:108ED0000000000000004000000000000000000052 +:108ED0000000000000000000000000000040000052 :108EE0000000000000000000000000000000000082 -:108EF0000000400000000000000000000000000032 -:108F000000000088000000000000000000000000D9 -:108F100041000000000000000800210008000800D7 -:108F200000000008000000000010000400A0000085 +:108EF0000000000000000000000000000000000072 +:108F00000000000000000000000000000000000061 +:108F10000000000000000000000000000000000051 +:108F20000000000000000000000000000000000041 :108F30000000000000000000000000000000000031 -:108F40000800000000000000000000000000000019 -:108F5000008400000000000000000000000000008D -:108F60000000000000080000000000840000000075 -:108F70000800000082000000000000000000000067 -:108F800000000800000000000000000000090004CC -:108F900000040000000000000000000000000000CD +:108F40000000000000000000000000000000000021 +:108F50000000000000000000000000000000000011 +:108F60000000000000000000000000000000000001 +:108F700000000000000000000000000000000000F1 +:108F800000000000000000000000000000000000E1 +:108F900000000000000000000000000000000000D1 :108FA00000000000000000000000000000000000C1 -:108FB0000000C000000000000000000000000000F1 +:108FB00000000000000000000000000000000000B1 :108FC00000000000000000000000000000000000A1 -:108FD0000000000000000000000000000000200071 -:108FE00000000000000000000000000000008200FF +:108FD0000000000000000000000000000000000091 +:108FE0000000000000000000000000000000000081 :108FF0000000000000000000000000000000000071 :109000000000000000000000000000000000000060 -:10901000000000000000000000000004000000004C -:109020000000000000000040000000000000000000 +:109010000000000000000000000000000000000050 +:109020000000000000000000000000000000000040 :109030000000000000000000000000000000000030 :109040000000000000000000000000000000000020 :109050000000000000000000000000000000000010 -:109060008000000000000000000000000000000080 -:1090700000000000000000000000000000030000ED -:10908000000000100000000082000000000000004E +:109060000000000000000000000000000000000000 +:1090700000000000000000000000000000000000F0 +:1090800000000000000000000000000000000000E0 :1090900000000000000000000000000000000000D0 -:1090A00000000000000000000800000000000000B8 -:1090B00000000000000000000000000008000000A8 -:1090C000A0000000000000000000000000000100FF -:1090D000000000000000000500000000000000008B -:1090E0000000000000080000000000000000000078 -:1090F00000000000000000000000009021000900B6 -:10910000080004000500040000080300000000003F +:1090A00000000000000000000000000000000000C0 +:1090B00000000000000000000000000000000000B0 +:1090C00000000000000000000000000000000000A0 +:1090D0000000000000000000000000000000000090 +:1090E0000000000000000000000000000000000080 +:1090F0000000000000000000000000000000000070 +:10910000000000000000000000000000000000005F :10911000000000000000000000000000000000004F -:109120000000080005A0000808A0020000000000E0 +:10912000000000000000000000000000000000003F :10913000000000000000000000000000000000002F :10914000000000000000000000000000000000001F -:1091500008C00082000000000000210000000000A4 -:10916000000000901000000000000000000000005F +:10915000000000000000000000000000000000000F +:1091600000000000000000000000000000000000FF :1091700000000000000000000000000000000000EF -:1091800000000000004100410041004100000000DB -:1091900000000000000000000000200008000000A7 +:1091800000000000000000000000000000000000DF +:1091900000000000000000000000000000000000CF :1091A00000000000000000000000000000000000BF -:1091B00000000000000000000000080000000000A7 +:1091B00000000000000000000000000000000000AF :1091C000000000000000000000000000000000009F -:1091D0000000000008000000000000000000000087 -:1091E000000000030000000000000000000000007C -:1091F0000000000000000000000000000008000067 +:1091D000000000000000000000000000000000008F +:1091E000000000000000000000000000000000007F +:1091F000000000000000000000000000000000006F :10920000000000000000000000000000000000005E -:10921000000000000000000400000000200000002A -:109220000004000021000000000000000000000019 +:10921000000000000000000000000000000000004E +:10922000000000000000000000000000000000003E :10923000000000000000000000000000000000002E :10924000000000000000000000000000000000001E :10925000000000000000000000000000000000000E :1092600000000000000000000000000000000000FE :1092700000000000000000000000000000000000EE -:1092800000000000010000000000000000000000DD +:1092800000000000000000000000000000000000DE :1092900000000000000000000000000000000000CE :1092A00000000000000000000000000000000000BE :1092B00000000000000000000000000000000000AE @@ -112970,7 +112970,7 @@ :1092D000000000000000000000000000000000008E :1092E000000000000000000000000000000000007E :1092F000000000000000000000000000000000006E -:109300000000000000000800000000000000000055 +:10930000000000000000000000000000000000005D :10931000000000000000000000000000000000004D :10932000000000000000000000000000000000003D :10933000000000000000000000000000000000002D @@ -112978,12 +112978,12 @@ :10935000000000000000000000000000000000000D :1093600000000000000000000000000000000000FD :1093700000000000000000000000000000000000ED -:1093800000000000000900000009000000000000CB +:1093800000000000000000000000000000000000DD :1093900000000000000000000000000000000000CD :1093A00000000000000000000000000000000000BD :1093B00000000000000000000000000000000000AD -:1093C000000000000000000000000000000000039A -:1093D000000000200000000000000000000000006D +:1093C000000000000000000000000000000000009D +:1093D000000000000000000000000000000000008D :1093E000000000000000000000000000000000007D :1093F000000000000000000000000000000000006D :10940000000000000000000000000000000000005C @@ -112994,20 +112994,20 @@ :10945000000000000000000000000000000000000C :1094600000000000000000000000000000000000FC :1094700000000000000000000000000000000000EC -:1094800000000000000000000000080000000000D4 +:1094800000000000000000000000000000000000DC :1094900000000000000000000000000000000000CC :1094A00000000000000000000000000000000000BC :1094B00000000000000000000000000000000000AC :1094C000000000000000000000000000000000009C -:1094D000000000000200000000000000000000008A +:1094D000000000000000000000000000000000008C :1094E000000000000000000000000000000000007C :1094F000000000000000000000000000000000006C -:1095000000000000000000000000000080000000DB -:109510000900000000000000000000000000000042 +:10950000000000000000000000000000000000005B +:10951000000000000000000000000000000000004B :10952000000000000000000000000000000000003B :10953000000000000000000000000000000000002B :10954000000000000000000000000000000000001B -:10955000000000000000800000004000000000004B +:10955000000000000000000000000000000000000B :1095600000000000000000000000000000000000FB :1095700000000000000000000000000000000000EB :1095800000000000000000000000000000000000DB @@ -113027,13 +113027,13 @@ :1096600000000000000000000000000000000000FA :1096700000000000000000000000000000000000EA :1096800000000000000000000000000000000000DA -:1096900000000010000000000000000000000000BA +:1096900000000000000000000000000000000000CA :1096A00000000000000000000000000000000000BA :1096B00000000000000000000000000000000000AA :1096C000000000000000000000000000000000009A -:1096D00000000000000000000000000002E00000A8 +:1096D000000000000000000000000000000000008A :1096E000000000000000000000000000000000007A -:1096F000000000000000000000000000001000005A +:1096F000000000000000000000000000000000006A :109700000000000000000000000000000000000059 :109710000000000000000000000000000000000049 :109720000000000000000000000000000000000039 @@ -113067,14 +113067,14 @@ :1098E0000000000000000000000000000000000078 :1098F0000000000000000000000000000000000068 :109900000000000000000000000000000000000057 -:109910000000000000000000000000610007000DD2 +:109910000000000000000000000000000000000047 :109920000000000000000000000000000000000037 :109930000000000000000000000000000000000027 :109940000000000000000000000000000000000017 :109950000000000000000000000000000000000007 -:109960000000000000650006000F2000000000005D +:1099600000000000000000000000000000000000F7 :1099700000000000000000000000000000000000E7 -:109980000000000000610086200D000000000000C3 +:1099800000000000000000000000000000000000D7 :1099900000000000000000000000000000000000C7 :1099A00000000000000000000000000000000000B7 :1099B00000000000000000000000000000000000A7 @@ -113108,188 +113108,188 @@ :109B700000000000000000000000000000000000E5 :109B800000000000000000000000000000000000D5 :109B900000000000000000000000000000000000C5 -:109BA00000000000C000C000000020000000000015 -:109BB0000000200000000000000000000000000085 -:109BC000A0002000000000000000200000000000B5 -:109BD0000200A000C0000000000000000000000023 -:109BE0002000000000020000000000000000200033 -:109BF00020002000200020000000000000000000E5 -:109C0000000020008800000000000000000020008C -:109C100020002000200020000000000000000000C4 -:109C200000002000200020000000000000000000D4 -:109C300000000000000020000000000000004100C3 -:109C40004000000000000002000000004000000092 -:109C50000002C00200000000000000000000000040 -:109C600000000000000000000002000000000000F2 -:109C70008000804080020000000000000000000022 -:109C80000000004000020000000000000000000092 -:109C90000000004000400000000000000000000044 +:109BA00000000000000000000000000000000000B5 +:109BB00000000000000000000000000000000000A5 +:109BC0000000000000000000000000000000000095 +:109BD0000000000000000000000000000000000085 +:109BE0000000000000000000000000000000000075 +:109BF000000000000000000000000004000400005D +:109C00000000000000000000000000000000000054 +:109C10000000000400040002000200000000000038 +:109C20000000000000000000000000000000000034 +:109C30000000000000000000000000000000000024 +:109C40000000000000000000000000000000000014 +:109C50000000000000000000000000000000000004 +:109C600000000000000000000000000000000000F4 +:109C700000000000000000000000000000000000E4 +:109C800000000000000000000000000000000000D4 +:109C900000000000000000000000000000000000C4 :109CA00000000000000000000000000000000000B4 -:109CB0002000200020002000000000000000000024 -:109CC0000004000000100000000000000000000080 -:109CD0000080008000000000000000000000000084 +:109CB00000000000000000000000000000000000A4 +:109CC0000000000000000000000000000000000094 +:109CD0000000000000000000000000000000000084 :109CE0000000000000000000000000000000000074 :109CF0000000000000000000000000000000000064 -:109D00000010000000000000001000000000000033 +:109D00000000000000000000000000000000000053 :109D10000000000000000000000000000000000043 -:109D200000100000000000000010000800080008FB -:109D30000000800880088000800000080008000003 -:109D4000000000030002000000000008000800C03E -:109D500000000010001000000000008400840000DB -:109D600000000000000000000000000000100010D3 +:109D20000000000000000000000000000000000033 +:109D30000000000000000000000000000000000023 +:109D40000000000000000000000000000000000013 +:109D50000000000000000000000000000000000003 +:109D600000000000000000000000000000000000F3 :109D700000000000000000000000000000000000E3 -:109D800000000000000000000000000000040000CF +:109D800000000000000000000000000000000000D3 :109D900000000000000000000000000000000000C3 -:109DA00000000000000000000000000000000000B3 -:109DB0000400A000040090000000900000000000DB -:109DC0000000000008000000000240000000002029 -:109DD00000000020A00000000000000900000000BA -:109DE000200020000000000000000000000000082B -:109DF0000040001000000000000000000000000013 -:109E00000000A000000000000000000000000000B2 +:109DA00000000200000000000000000000000000B1 +:109DB00000000000000000000000000000000000A3 +:109DC0000000000000000000000000000000000093 +:109DD0000000000000000000000000000000000083 +:109DE0000000000000000000000000000000000073 +:109DF0000000000000000000000000000000000063 +:109E00000000000000000000000000000000000052 :109E10000000000000000000000000000000000042 :109E20000000000000000000000000000000000032 -:109E3000040000000000000000000000000000001E -:109E40000000000000008000000000018000000011 -:109E500008010000000100000000000000000000F8 +:109E30000000000000000000000000000000000022 +:109E40000000000000000000000000000000000012 +:109E50000000000000000000000000000000000002 :109E600000000000000000000000000000000000F2 -:109E700000000000410000000000000000000000A1 +:109E700000000000000000000000000000000000E2 :109E800000000000000000000000000000000000D2 :109E900000000000000000000000000000000000C2 :109EA00000000000000000000000000000000000B2 :109EB00000000000000000000000000000000000A2 -:109EC0000000000000000000000000800980008009 -:109ED0000000000000000000000000808200000080 -:109EE00000000000000000000000C0008200000030 +:109EC0000000000000000000000000000000000092 +:109ED0000000000000000000000000000000000082 +:109EE0000000000000000000000000000000000072 :109EF0000000000000000000000000000000000062 -:109F00002000000000000000000000000000000031 +:109F00000000000000000000000000000000000051 :109F10000000000000000000000000000000000041 :109F20000000000000000000000000000000000031 :109F30000000000000000000000000000000000021 -:109F400000000000000000000000000000044004C9 -:109F500000040000000000040000000000200000D9 +:109F40000000000000000000000000000000000011 +:109F50000000000000000000000000000000000001 :109F600000000000000000000000000000000000F1 :109F700000000000000000000000000000000000E1 -:109F80000000800000000000210000000000000030 +:109F800000000000000000000000000000000000D1 :109F900000000000000000000000000000000000C1 :109FA00000000000000000000000000000000000B1 :109FB00000000000000000000000000000000000A1 -:109FC0000021000000030000000000000800002045 -:109FD000000000030000000000200000000000005E -:109FE0000000080000000000C000000000000000A9 -:109FF0000000080000000000000000000800000051 +:109FC0000000000000000000000000000000000091 +:109FD0000000000000000000000000000000000081 +:109FE0000000000000000000000000000000000071 +:109FF0000000000000000000000000000000000061 :10A000000000000000000000000000000000000050 :10A010000000000000000000000000000000000040 :10A020000000000000000000000000000000000030 -:10A030000000000000000500050000080482000088 -:10A04000000000000000000000040000000080008C -:10A0500000010000000000000000000100000000FE +:10A030000000000000000000000000000000000020 +:10A040000000000000000000000000000000000010 +:10A050000000000000000000000000000000000000 :10A0600000000000000000000000000000000000F0 :10A0700000000000000000000000000000000000E0 :10A0800000000000000000000000000000000000D0 :10A0900000000000000000000000000000000000C0 -:10A0A000000000000004400000000000000000006C +:10A0A00000000000000000000000000000000000B0 :10A0B00000000000000000000000000000000000A0 -:10A0C000000000000000000000000021000300214B -:10A0D0000000010000000000080000100010001047 -:10A0E00000410000000000000000002100210000ED +:10A0C0000000000000000000000000000000000090 +:10A0D0000000000000000000000000000000000080 +:10A0E0000000000000000000000000000000000070 :10A0F0000000000000000000000000000000000060 -:10A100000000000000000800000000000000000047 +:10A10000000000000000000000000000000000004F :10A11000000000000000000000000000000000003F :10A12000000000000000000000000000000000002F :10A13000000000000000000000000000000000001F :10A14000000000000000000000000000000000000F -:10A1500000002000080000000000000000010001D5 -:10A1600000010000000000000000000000000000EE +:10A1500000000000000000000000000000000000FF +:10A1600000000000000000000000000000000000EF :10A1700000000000000000000000000000000000DF :10A1800000000000000000000000000000000000CF :10A1900000000000000000000000000000000000BF :10A1A00000000000000000000000000000000000AF :10A1B000000000000000000000000000000000009F :10A1C000000000000000000000000000000000008F -:10A1D0000000000000A000000104000000000000DA -:10A1E00000C0000200A00000000800000000000005 +:10A1D000000000000000000000000000000000007F +:10A1E000000000000000000000000000000000006F :10A1F000000000000000000000000000000000005F :10A20000000000000000000000000000000000004E :10A21000000000000000000000000000000000003E :10A22000000000000000000000000000000000002E :10A23000000000000000000000000000000000001E -:10A24000000000000000000000000200000000000C -:10A250000000000000000080000005000000000079 -:10A26000000000000080008000000080000000006E +:10A24000000000000000000000000000000000000E +:10A2500000000000000000000000000000000000FE +:10A2600000000000000000000000000000000000EE :10A2700000000000000000000000000000000000DE -:10A2800000000000000000002000000000000000AE +:10A2800000000000000000000000000000000000CE :10A2900000000000000000000000000000000000BE :10A2A00000000000000000000000000000000000AE :10A2B000000000000000000000000000000000009E -:10A2C000000000000000000000410000001100003C -:10A2D000000000000000000021080000400900808C -:10A2E00080000000000000000000000000000000EE +:10A2C000000000000000000000000000000000008E +:10A2D000000000000000000000000000000000007E +:10A2E000000000000000000000000000000000006E :10A2F000000000000000000000000000000000005E -:10A3000000000000000000000000004100000041CB +:10A30000000000000000000000000000000000004D :10A31000000000000000000000000000000000003D :10A32000000000000000000000000000000000002D :10A33000000000000000000000000000000000001D -:10A34000000000000000000000000001000000000C -:10A3500000000000000000000000010100000100FA -:10A3600000A0080000000000000000000000000045 +:10A34000000000000000000000000000000000000D +:10A3500000000000000000000000000000000000FD +:10A3600000000000000000000000000000000000ED :10A3700000000000000000000000000000000000DD -:10A3800000000000000000000000000000010000CC +:10A3800000000000000000000000000000000000CD :10A3900000000000000000000000000000000000BD :10A3A00000000000000000000000000000000000AD :10A3B000000000000000000000000000000000009D -:10A3C0000000000000000000000000000000080085 -:10A3D0000000000000000000000000000000080075 -:10A3E000000100000088000084020000000000005E +:10A3C000000000000000000000000000000000008D +:10A3D000000000000000000000000000000000007D +:10A3E000000000000000000000000000000000006D :10A3F000000000000000000000000000000000005D :10A40000000000000000000000000000000000004C -:10A4100040000000010000000000000000000000FB +:10A41000000000000000000000000000000000003C :10A42000000000000000000000000000000000002C :10A43000000000000000000000000000000000001C :10A44000000000000000000000000000000000000C -:10A450008000000009000000000000000000000073 -:10A4600080000021090000000000008000000000C2 +:10A4500000000000000000000000000000000000FC +:10A4600000000000000000000000000000000000EC :10A4700000000000000000000000000000000000DC :10A4800000000000000000000000000000000000CC -:10A4900000000000000003000000000000000000B9 +:10A4900000000000000000000000000000000000BC :10A4A00000000000000000000000000000000000AC :10A4B000000000000000000000000000000000009C :10A4C000000000000000000000000000000000008C :10A4D000000000000000000000000000000000007C -:10A4E00000000020000000000000002000800000AC -:10A4F0000000000900000000000000000000000053 +:10A4E000000000000000000000000000000000006C +:10A4F000000000000000000000000000000000005C :10A50000000000000000000000000000000000004B -:10A5100000000000004000000000000000000000FB +:10A51000000000000000000000000000000000003B :10A52000000000000000000000000000000000002B :10A53000000000000000000000000000000000001B :10A54000000000000000000000000000000000000B :10A5500000000000000000000000000000000000FB -:10A56000000090000801000002000000000100024D -:10A5700000009000000008008800000000000000BB +:10A5600000000000000000000000000000000000EB +:10A5700000000000000000000000000000000000DB :10A5800000000000000000000000000000000000CB :10A5900000000000000000000000000000000000BB :10A5A00000000000000000000000000000000000AB :10A5B000000000000000000000000000000000009B :10A5C000000000000000000000000000000000008B -:10A5D0000000000000000010000042000000000029 -:10A5E0000000000000000010080000000000000053 -:10A5F0002200000000000000080000000000000031 +:10A5D000000000000000000000000000000000007B +:10A5E000000000000000000000000000000000006B +:10A5F000000000000000000000000000000000005B :10A60000000000000000000000000000000000004A -:10A61000000000000000000002E0000060000000F8 +:10A61000000000000000000000000000000000003A :10A62000000000000000000000000000000000002A :10A63000000000000000000000000000000000001A :10A64000000000000000000000000000000000000A :10A6500000000000000000000000000000000000FA -:10A66000000000000000FF00C3C300000000000065 -:10A6700000003C003C00F0F0C3C3000000000000FC +:10A6600000000000000000000000000000000000EA +:10A6700000000000000000000000000000000000DA :10A6800000000000000000000000000000000000CA :10A6900000000000000000000000000000000000BA :10A6A00000000000000000000000000000000000AA :10A6B000000000000000000000000000000000009A :10A6C000000000000000000000000000000000008A :10A6D000000000000000000000000000000000007A -:10A6E0000000000000000000FF00C3C300000000E5 -:10A6F000000000003C003C00F0F0C3C3000000007C +:10A6E000000000000000000000000000000000006A +:10A6F000000000000000000000000000000000005A :10A700000000000000000000000000000000000049 :10A710000000000000000000000000000000000039 :10A720000000000000000000000000000000000029 @@ -113304,8 +113304,8 @@ :10A7B0000000000000000000000000000000000099 :10A7C0000000000000000000000000000000000089 :10A7D0000000000000000000000000000000000079 -:10A7E00000000000000000000000000000000F0F4B -:10A7F000000000000C0C0C0C3C3C3C3C00000F0F1B +:10A7E0000000000000000000000000000000000069 +:10A7F0000000000000000000000000000000000059 :10A800000000000000000000000000000000000048 :10A810000000000000000000000000000000000038 :10A820000000000000000000000000000000000028 @@ -113313,23 +113313,23 @@ :10A840000000000000000000000000000000000008 :10A8500000000000000000000000000000000000F8 :10A8600000000000000000000000000000000000E8 -:10A870000F0F000000000C0C0C0C0000000000008A -:10A880000F0F0000000000000000000000000000AA +:10A8700000000000000000000000000000000000D8 +:10A8800000000000000000000000000000000000C8 :10A8900000000000000000000000000000000000B8 :10A8A00000000000000000000000000000000000A8 :10A8B0000000000000000000000000000000000098 :10A8C0000000000000000000000000000000000088 :10A8D0000000000000000000000000000000000078 -:10A8E00000610007000D00000000000000000000F3 -:10A8F0000061000F000D00000000000800000000D3 -:10A9000080000008000000000000000000000000BF +:10A8E0000000000000000000000000000000000068 +:10A8F0000000000000000000000000000000000058 +:10A900000000000000000000000000000000000047 :10A910000000000000000000000000000000000037 -:10A92000000000650006000F20000000000000008D +:10A920000000000000000000000000000000000027 :10A930000000000000000000000000000000000017 :10A940000000000000000000000000000000000007 :10A9500000000000000000000000000000000000F7 :10A9600000000000000000000000000000000000E7 -:10A97000000000000000FF00FF00000000000000D9 +:10A9700000000000000000000000000000000000D7 :10A9800000000000000000000000000000000000C7 :10A9900000000000000000000000000000000000B7 :10A9A00000000000000000000000000000000000A7 @@ -113337,7 +113337,7 @@ :10A9C0000000000000000000000000000000000087 :10A9D0000000000000000000000000000000000077 :10A9E0000000000000000000000000000000000067 -:10A9F0000000000000000000FF00FF000000000059 +:10A9F0000000000000000000000000000000000057 :10AA00000000000000000000000000000000000046 :10AA10000000000000000000000000000000000036 :10AA20000000000000000000000000000000000026 @@ -113345,7 +113345,7 @@ :10AA40000000000000000000000000000000000006 :10AA500000000000000000000000000000000000F6 :10AA600000000000000000000000000000000000E6 -:10AA700000000000000000000000003C003C00005E +:10AA700000000000000000000000000000000000D6 :10AA800000000000000000000000000000000000C6 :10AA900000000000000000000000000000000000B6 :10AAA00000000000000000000000000000000000A6 @@ -113353,441 +113353,441 @@ :10AAC0000000000000000000000000000000000086 :10AAD0000000000000000000000000000000000076 :10AAE0000000000000000000000000000000000066 -:10AAF000000000000000000000000000003C003CDE +:10AAF0000000000000000000000000000000000056 :10AB00000000000000000000000000000000000045 :10AB10000000000000000000000000000000000035 :10AB20000000000000000000000000000000000025 :10AB30000000000000000000000000000000000015 :10AB40000000000000000000000000000000000005 :10AB500000000000000000000000000000000000F5 -:10AB60000000200400000000200000002000200061 -:10AB70002000000000000000000020000000000095 -:10AB800000002000000000002000880020002004B9 -:10AB90002000000000000005000020000000000070 -:10ABA0000002000200000000000020002000200041 -:10ABB0002000200000000000000000002000000035 -:10ABC0000000000000000000000020002000200025 -:10ABD0002000200400000000000400042000000009 -:10ABE0000000000040020000000000000000000023 -:10ABF00021000000000000000000000000024000F2 -:10AC000000000000400200020000000040000000C0 -:10AC1000000000020002000000020000000000002E -:10AC2000000000000000000000C000000000000064 -:10AC300000C0000000000000000000000000400014 -:10AC400000A0000000000000000000000000000064 -:10AC500000000000000000020000000000004002B0 +:10AB600000000000000000000000000000000000E5 +:10AB700000000000000000000000000000000000D5 +:10AB800000000000000000000000000000000000C5 +:10AB900000000000000000000000000000000000B5 +:10ABA00000000000000000000000000000000000A5 +:10ABB0000004000000000000000000000000000091 +:10ABC0000004000000000000000400040000000079 +:10ABD0000004000800000000000000000000000465 +:10ABE0000004000000000000000000000000000061 +:10ABF0000000000000000000000000000000000055 +:10AC00000000000000000000000000000000000044 +:10AC10000000000000000000000000000000000034 +:10AC20000000000000000000000000000000000024 +:10AC30000000000000000000000000000000000014 +:10AC40000000000000000000000000000000000004 +:10AC500000000000000000000000000000000000F4 :10AC600000000000000000000000000000000000E4 -:10AC7000000000000000200020000004000420006C -:10AC80002000000420100000000000104000000020 +:10AC700000000000000000000000000000000000D4 +:10AC800000000000000000000000000000000000C4 :10AC900000000000000000000000000000000000B4 -:10ACA000000000000210000000000000080000008A -:10ACB0000000000000000000010000000000000093 -:10ACC00000400000840008000040004000400040B8 -:10ACD00000400040004000400200020000400040F0 -:10ACE000004002000040009000000008000000004A -:10ACF0000000000000000000800080000001000152 -:10AD0000C000800000018000000000880001800079 +:10ACA00000000000000000000000000000000000A4 +:10ACB0000000000000000000000000000000000094 +:10ACC0000000000000000000000000000000000084 +:10ACD0000000000000000000000000000000000074 +:10ACE0000000000000000000000000000000000064 +:10ACF0000000000000000000000000000000000054 +:10AD00000000000000000000000000000000000043 :10AD10000000000000000000000000000000000033 :10AD20000000000000000000000000000000000023 -:10AD30000000000000000000000002000000000011 -:10AD400000000001000000000000000100010001FF -:10AD500000010001000100010001800080000001ED -:10AD600000010001800000010040040000200000FC +:10AD30000000000000000000000000000000000013 +:10AD40000000000000000000000000000000000003 +:10AD500000000000000000000000000000000000F3 +:10AD600000000000000000000000000000000000E3 :10AD700000000000000000000000000000000000D3 -:10AD80000000000000000041000000000000000082 +:10AD800000000000000000000000000000000000C3 :10AD900000000000000000000000000000000000B3 -:10ADA000000000000400000000000000000000009F -:10ADB0000010000000000000000000000000000083 -:10ADC0000000000000000040000000000021000022 -:10ADD000A0000000000000000000000200040000CD +:10ADA00000000000000000000000000000000000A3 +:10ADB0000000000000000000000000000000000093 +:10ADC0000000000000000000000000000000000083 +:10ADD0000000000000000000000000000000000073 :10ADE0000000000000000000000000000000000063 -:10ADF000000000000000000000000000090000004A +:10ADF0000000000000000000000000000000000053 :10AE00000000000000000000000000000000000042 -:10AE100000000000400000000000000000000000F2 -:10AE200000000000000000200020000000000800DA +:10AE10000000000000000000000000000000000032 +:10AE20000000000000000000000000000000000022 :10AE30000000000000000000000000000000000012 -:10AE40000000000000000000000100000000000001 +:10AE40000000000000000000000000000000000002 :10AE500000000000000000000000000000000000F2 :10AE600000000000000000000000000000000000E2 :10AE700000000000000000000000000000000000D2 -:10AE8000000000000000840000000000000000003E -:10AE900000000000001000000000000000000000A2 +:10AE800000000000000000000000000000000000C2 +:10AE900000000000000000000000000000000000B2 :10AEA00000000000000000000000000000000000A2 -:10AEB00000000000000000000003002184050000E5 -:10AEC0000000008000000000000000008200000080 +:10AEB0000000000000000000000000000000000092 +:10AEC0000000000000000000000000000000000082 :10AED0000000000000000000000000000000000072 :10AEE0000000000000000000000000000000000062 :10AEF0000000000000000000000000000000000052 -:10AF000000000000000000000000000000C0000081 -:10AF10000000000000000001000000000000000030 +:10AF00000000000000000000000000000000000041 +:10AF10000000000000000000000000000000000031 :10AF20000000000000000000000000000000000021 :10AF30000000000000000000000000000000000011 -:10AF400000000082004000840000000000000000BB -:10AF500000080000000000000000000000000000E9 +:10AF40000000000000000000000000000000000001 +:10AF500000000000000000000000000000000000F1 :10AF600000000000000000000000000000000000E1 :10AF700000000000000000000000000000000000D1 :10AF800000000000000000000000000000000000C1 -:10AF90000000000000000000000000200000000091 -:10AFA0000000000000000000004000000000000061 -:10AFB000000000000000000084000000000000000D -:10AFC00004000400000000002000204000000000F9 -:10AFD0002000204000000000200020400000000071 -:10AFE000200020020000000020002040000000009F -:10AFF000000000000000000000000000000000044D -:10B0000000A0009000840000000000000500000087 -:10B0100000C00000000000100000000003820000DB -:10B02000008400000000000000000000000000009C +:10AF900000000000000000000000000000000000B1 +:10AFA00000000000000000000000000000000000A1 +:10AFB0000000000000000000000000000000000091 +:10AFC0000000000000000000000000000000000081 +:10AFD0000000000000000000000000000000000071 +:10AFE0000000000000000000000000000000000061 +:10AFF0000000000000000000000000000000000051 +:10B000000000000000000000000000000000000040 +:10B010000000000000000000000000000000000030 +:10B020000000000000000000000000000000000020 :10B030000000000000000000000000000000000010 -:10B0400000008000800000000000800080010000FF -:10B0500000008000800100000000800080010000EE -:10B0600000008000800000000000800080010000DF +:10B040000000000000000000000000000000000000 +:10B0500000000000000000000000000000000000F0 +:10B0600000000000000000000000000000000000E0 :10B0700000000000000000000000000000000000D0 -:10B0800000000000000000000000000000000009B7 -:10B0900000000005000000000000000200000000A9 -:10B0A000000000000000000000000021000000007F +:10B0800000000000000000000000000000000000C0 +:10B0900000000000000000000000000000000000B0 +:10B0A00000000000000000000000000000000000A0 :10B0B0000000000000000000000000000000000090 -:10B0C00000000000840000000000000000400005B7 -:10B0D000000000008240002100000000004000004D -:10B0E000000000008240004000000000004000001E -:10B0F00000000000004000400000000000000000D0 +:10B0C0000000000000000000000000000000000080 +:10B0D0000000000000000000000000000000000070 +:10B0E0000000000000000000000000000000000060 +:10B0F0000000000000000000000000000000000050 :10B10000000000000000000000000000000000003F :10B11000000000000000000000000000000000002F :10B12000000000000000000000000000000000001F :10B13000000000000000000000000000000000000F -:10B1400000000000000000000000000000000001FE -:10B1500000000000000000010000000000000001ED -:10B1600000000000000000010001000000000001DC -:10B1700000000000000000010001000000000000CD +:10B1400000000000000000000000000000000000FF +:10B1500000000000000000000000000000000000EF +:10B1600000000000000000000000000000000000DF +:10B1700000000000000000000000000000000000CF :10B1800000000000000000000000000000000000BF -:10B1900000000000000000000000880801884088CE -:10B1A00020880000000000000000000000000000F7 +:10B1900000000000000000000000000000000000AF +:10B1A000000000000000000000000000000000009F :10B1B000000000000000000000000000000000008F -:10B1C00000000000000000000000000090C100002E -:10B1D0000002000090C100000002000090C10000C9 -:10B1E0000002000090C100000002000090C10000B9 -:10B1F0000003000000C00000000288000000000002 +:10B1C000000000000000000000000000000000007F +:10B1D000000000000000000000000000000000006F +:10B1E000000000000000000000000000000000005F +:10B1F000000000000000000000000000000000004F :10B20000000000000000000000000000000000003E -:10B210000900000000000000090000000800100004 -:10B22000800000000000000000000000000000009E +:10B21000000000000000000000000000000000002E +:10B22000000000000000000000000000000000001E :10B23000000000000000000000000000000000000E -:10B2400000000000000000000000000000008089F5 -:10B25000000005800009808900004080000280898C -:10B260000011058000008089000040800000808976 -:10B270000000058800000080000000800000000041 -:10B2800000000000000000000000000000000008B6 -:10B2900000000005000000040000000400000000A1 +:10B2400000000000000000000000000000000000FE +:10B2500000000000000000000000000000000000EE +:10B2600000000000000000000000000000000000DE +:10B2700000000000000000000000000000000000CE +:10B2800000000000000000000000000000000000BE +:10B2900000000000000000000000000000000000AE :10B2A000000000000000000000000000000000009E :10B2B000000000000000000000000000000000008E -:10B2C000000000000000000000008000000080007E -:10B2D0000000000009008900000000030900800050 -:10B2E0000000110309008000000000030900800035 -:10B2F0000000000309008800000000030000800037 +:10B2C000000000000000000000000000000000007E +:10B2D000000000000000000000000000000000006E +:10B2E000000000000000000000000000000000005E +:10B2F000000000000000000000000000000000004E :10B30000000000000000000000000000000000003D -:10B310000001000000010004000100000001000025 +:10B31000000000000000000000000000000000002D :10B32000000000000000000000000000000000001D :10B33000000000000000000000000000000000000D -:10B3400000000000000000000000000010000000ED -:10B350000800000000000000C00000000000000025 -:10B36000C000000000000000C0000000000000005D -:10B37000C000000000000000C1000000000000004C -:10B38000C0000000000000000000000000000000FD -:10B390000000000004000000000000008400040021 -:10B3A0000100000800A00001009000000000000063 +:10B3400000000000000000000000000000000000FD +:10B3500000000000000000000000000000000000ED +:10B3600000000000000000000000000000000000DD +:10B3700000000000000000000000000000000000CD +:10B3800000000000000000000000000000000000BD +:10B3900000000000000000000000000000000000AD +:10B3A000000000000000000000000000000000009D :10B3B000000000000000000000000000000000008D :10B3C000000000000000000000000000000000007D -:10B3D0000008000800000000000000C0000000009D -:10B3E000000000C000000000000000C000000000DD -:10B3F000010000C000000000000100C000000000CB -:10B40000000000C00000000000000000000000007C -:10B410000000000000000000000004000000000028 -:10B420000000200000000091001000080000000053 +:10B3D000000000000000000000000000000000006D +:10B3E000000000000000000000000000000000005D +:10B3F000000000000000000000000000000000004D +:10B40000000000000000000000000000000000003C +:10B41000000000000000000000000000000000002C +:10B42000000000000000000000000000000000001C :10B43000000000000000000000000000000000000C :10B4400000000000000000000000000000000000FC -:10B450000000008000800011000000000089001141 -:10B4600000000000008200110000000000890011AF -:10B470000000050010900000000000080089000096 -:10B48000000000000080000000000000000000003C +:10B4500000000000000000000000000000000000EC +:10B4600000000000000000000000000000000000DC +:10B4700000000000000000000000000000000000CC +:10B4800000000000000000000000000000000000BC :10B4900000000000000000000000000000000000AC :10B4A000000000000000000000000000000000009C :10B4B000000000000000000000000000000000008C :10B4C000000000000000000000000000000000007C -:10B4D0000000002000000000800209800000090038 -:10B4E0008000098000000202910209800000000033 -:10B4F000800009800000101080080980080000000A -:10B5000080000000000000000000000000000000BB +:10B4D000000000000000000000000000000000006C +:10B4E000000000000000000000000000000000005C +:10B4F000000000000000000000000000000000004C +:10B50000000000000000000000000000000000003B :10B51000000000000000000000000000000000002B :10B52000000000000000000000000000000000001B :10B53000000000000000000000000000000000000B :10B5400000000000000000000000000000000000FB -:10B550000000000000000000000002000190000058 -:10B560000000C000019000000000C0000190000039 -:10B570000000C000019000000000C0000190010028 -:10B580000000C0000000009000000000000000006B -:10B59000000000000000000000000000001000009B -:10B5A0000000000000440000000000000000000057 +:10B5500000000000000000000000000000000000EB +:10B5600000000000000000000000000000000000DB +:10B5700000000000000000000000000000000000CB +:10B5800000000000000000000000000000000000BB +:10B5900000000000000000000000000000000000AB +:10B5A000000000000000000000000000000000009B :10B5B000000000000000000000000000000000008B :10B5C000000000000000000000000000000000007B -:10B5D000000000000006000007000000810000E0FD -:10B5E00000000000410000E000000000810000E0D9 -:10B5F00000000000410000E000000000810000E0C9 +:10B5D000000000000000000000000000000000006B +:10B5E000000000000000000000000000000000005B +:10B5F000000000000000000000000000000000004B :10B60000000000000000000000000000000000003A :10B61000000000000000000000000000000000002A :10B62000000000000000000000000000000000001A -:10B630000000E0E00000000000000000000000004A +:10B63000000000000000000000000000000000000A :10B6400000000000000000000000000000000000FA -:10B6500000000000000000000000000000FF0000EB -:10B66000FFFF0000AAAA0000FFFF0000AAAA000036 -:10B67000FFFF0000AAAA0000FFFF0000AAAA000026 -:10B68000FFFF0000AAAA0000FFFF0000FFFF00006C +:10B6500000000000000000000000000000000000EA +:10B6600000000000000000000000000000000000DA +:10B6700000000000000000000000000000000000CA +:10B6800000000000000000000000000000000000BA :10B6900000000000000000000000000000000000AA :10B6A000000000000000000000000000000000009A -:10B6B0000000E0E0E0E0000000000000000000000A +:10B6B000000000000000000000000000000000008A :10B6C000000000000000000000000000000000007A -:10B6D000000000000000000000000000000000FF6B -:10B6E0000000FFFF0000AAAA000000000000AAAAB4 -:10B6F000000000000000AAAA000000000000AAAAA2 -:10B70000000000000000AAAA0000000000000000E5 +:10B6D000000000000000000000000000000000006A +:10B6E000000000000000000000000000000000005A +:10B6F000000000000000000000000000000000004A +:10B700000000000000000000000000000000000039 :10B710000000000000000000000000000000000029 :10B720000000000000000000000000000000000019 -:10B730000C3C0FFF000000000000000000000000B3 +:10B730000000000000000000000000000000000009 :10B7400000000000000000000000000000000000F9 -:10B7500000000000000000000000000000000F0FCB -:10B7600000000F0F0000555500000F0F0000555549 -:10B7700000000F0F0000555500000F0F0000555539 -:10B7800000000F0F0000555500000F0F00000000D3 -:10B79000FFFF0000000000000000000000000000AB +:10B7500000000000000000000000000000000000E9 +:10B7600000000000000000000000000000000000D9 +:10B7700000000000000000000000000000000000C9 +:10B7800000000000000000000000000000000000B9 +:10B7900000000000000000000000000000000000A9 :10B7A0000000000000000000000000000000000099 -:10B7B00000000C3C0FFF0000000000000000000033 +:10B7B0000000000000000000000000000000000089 :10B7C0000000000000000000000000000000000079 :10B7D0000000000000000000000000000000000069 -:10B7E0000F0F00000F0F0000555500000F0F000055 -:10B7F000555500000F0F0000555500000F0F0000B9 -:10B80000555500000F0F0000555500000F0F0000A8 -:10B81000FFFFFFFF0000000000000000000000002C -:10B820000000000000610007000D0000006100073B -:10B83000000D000000610006000D00000000000087 +:10B7E0000000000000000000000000000000000059 +:10B7F0000000000000000000000000000000000049 +:10B800000000000000000000000000000000000038 +:10B810000000000000000000000000000000000028 +:10B820000000000000000000000000000000000018 +:10B830000000000000000000000000000000000008 :10B8400000000000000000000000000000000000F8 :10B8500000000000000000000000000000000000E8 -:10B86000002800000000406380018021920240E334 -:10B8700080018021920240E380018021920240E316 -:10B8800080018021920240E3800180219202408267 -:10B890008000002082020000000000000000000084 +:10B8600000000000000000000000000000000000D8 +:10B8700000000000000000000000000000000000C8 +:10B8800000000000000000000000000000000000B8 +:10B8900000000000000000000000000000000000A8 :10B8A0000000000000000000000000000000000098 -:10B8B00000000000000000000000F000FFFF00009A +:10B8B0000000000000000000000000000000000088 :10B8C0000000000000000000000000000000000078 :10B8D0000000000000000000000000000000000068 -:10B8E00000000000000000003C003C0000003C3C68 -:10B8F0003C003C0000003C3CFF00000000003C3CE1 -:10B900003C003C0000003C3C0F000F00000000FF2A +:10B8E0000000000000000000000000000000000058 +:10B8F0000000000000000000000000000000000048 +:10B900000000000000000000000000000000000037 :10B910000000000000000000000000000000000027 :10B920000000000000000000000000000000000017 -:10B93000000000000000000000000000FAAAFFFF65 +:10B930000000000000000000000000000000000007 :10B9400000000000000000000000000000000000F7 :10B9500000000000000000000000000000000000E7 -:10B96000000000000000000000003C003C0000005F -:10B970003C3C3C003C0000003C3CFF000000000060 -:10B980003C3C3C003C0000003C3C0F000F00000031 -:10B9900000FF0000000000000000000000000000A8 +:10B9600000000000000000000000000000000000D7 +:10B9700000000000000000000000000000000000C7 +:10B9800000000000000000000000000000000000B7 +:10B9900000000000000000000000000000000000A7 :10B9A0000000000000000000000000000000000097 :10B9B0000000000000000000000000000000000087 :10B9C0000000000000000000000000000000000077 :10B9D0000000000000000000000000000000000067 -:10B9E0000000000000000000000000003C3C0000DF -:10B9F000000000FF3C3C000000AA00AAFF0000007D -:10BA000000F000F0FFFF000000AA00AA0F0F0000E6 -:10BA1000000000FF00000000000000000000000027 +:10B9E0000000000000000000000000000000000057 +:10B9F0000000000000000000000000000000000047 +:10BA00000000000000000000000000000000000036 +:10BA10000000000000000000000000000000000026 :10BA20000000000000000000000000000000000016 :10BA30000000000000000000000000000000000006 :10BA400000000000000000000000000000000000F6 :10BA500000000000000000000000000000000000E6 -:10BA600000000000000000000000000000003C3C5E -:10BA70000000000000FF3C3C000000AA00AAFF00FC -:10BA8000000000F000F00000000000AA00AA0F0F64 -:10BA90000000000000FF0000000000000000200087 -:10BAA000C0000000000000000000000400040000CE -:10BAB0000000000000002000200000002000200006 -:10BAC0000000000000000000000010000000000066 -:10BAD0000000000000002000200000002000000303 -:10BAE0002000000000000000000000002000000016 -:10BAF00000000002000000002000200000002000E4 -:10BB000020000000000000000000000020000000F5 -:10BB100000040000000000002000200000002000C1 -:10BB20000000000000900000000040000000000045 -:10BB30000000004000001000000000004000000075 -:10BB400000000002000000020000000200000000EF -:10BB500000020000000000000000000040000000A3 -:10BB60000000000000000040000000000000400055 -:10BB70000000000000000000000000000000404045 -:10BB800010000000000000000000000000000002A3 +:10BA600000000000000000000000000000000000D6 +:10BA700000000000000000000000000000000000C6 +:10BA800000000000000000000000000000000000B6 +:10BA900000000000000000000000000000000000A6 +:10BAA0000000000000000000000000000000000096 +:10BAB0000000000000000000000000000000000086 +:10BAC0000000000000000000000000000000000076 +:10BAD0000000000000000000000000000000000066 +:10BAE0000000000000000000000000000000000056 +:10BAF0000000000000000000000000000000000046 +:10BB0000000000000004000400000000000000002D +:10BB1000000000000000000000000000000400041D +:10BB20000000000000000000000000000000000015 +:10BB30000000000000000000000000000000000005 +:10BB400000000000000000000000000000000000F5 +:10BB500000000000000000000000000000000000E5 +:10BB600000000000000000000000000000000000D5 +:10BB700000000000000000000000000000000000C5 +:10BB800000000000000000000000000000000000B5 :10BB900000000000000000000000000000000000A5 -:10BBA000000000000000000000000000000008008D +:10BBA0000000000000000000000000000000000095 :10BBB0000000000000000000000000000000000085 :10BBC0000000000000000000000000000000000075 -:10BBD00000000000000000000000004000400040A5 -:10BBE000004000000040004000400840000000000D -:10BBF0000000001000000000000000000000000035 -:10BC00000000000000000000000000100000000024 -:10BC10000000001000000000000000000000000014 +:10BBD0000000000000000000000000000000000065 +:10BBE0000000000000000000000000000000000055 +:10BBF0000000000000000000000000000000000045 +:10BC00000000000000000000000000000000000034 +:10BC10000000000000000000000000000000000024 :10BC20000000000000000000000000000000000014 :10BC30000000000000000000000000000000000004 -:10BC40000000008400000000000000000000000070 -:10BC500040000000400000000000000040014001E2 -:10BC600000010001000000010001000100010000CE +:10BC400000000000000000000000000000000000F4 +:10BC500000000000000000000000000000000000E4 +:10BC600000000000000000000000000000000000D4 :10BC700000000000000000000000000000000000C4 :10BC800000000000000000000000000000000000B4 :10BC900000000000000000000000000000000000A4 :10BCA0000000000000000000000000000000000094 -:10BCB0000000000000000000000010000000000074 -:10BCC000000040000000000000000000000500002F -:10BCD000000000210421001100000000000000000D -:10BCE0000000000300020000000000000009000046 +:10BCB0000000000000000000000000000000000084 +:10BCC0000000000000000000000000000000000074 +:10BCD0000000000000000000000000000000000064 +:10BCE0000000000000000000000000000000000054 :10BCF0000000000000000000000000000000000044 :10BD00000000000000000000000000000000000033 -:10BD1000000000000011880000000000000000008A +:10BD10000000000000000000000000000000000023 :10BD20000000000000000000000000000000000013 -:10BD300000000000000000001000000000000000F3 -:10BD400000000000000020000000000000000000D3 +:10BD30000000000000000000000000000000000003 +:10BD400000000000000000000000000000000000F3 :10BD500000000000000000000000000000000000E3 -:10BD600000000000110000000000000000000400BE +:10BD600000000000000000000000000000000000D3 :10BD700000000000000000000000000000000000C3 :10BD800000000000000000000000000000000000B3 :10BD900000000000000000000000000000000000A3 -:10BDA000000400000000000000000000000000404F +:10BDA0000000000000000000000000000000000093 :10BDB0000000000000000000000000000000000083 -:10BDC00000200100010001000100004001C000004E -:10BDD0000040008000C00040000000800080008023 -:10BDE00000800080000000000080000000000000D3 -:10BDF0000000008000410041004100000000000000 -:10BE000000000041000000000000000000000000F1 +:10BDC0000000000000000000000000000000000073 +:10BDD0000000000000000000000000000000000063 +:10BDE0000000000000000000000000000000000053 +:10BDF0000000000000000000000000000000000043 +:10BE00000000000000000000000000000000000032 :10BE10000000000000000000000000000000000022 :10BE20000000000000000000000000000000000012 :10BE30000000000000000000000000000000000002 -:10BE40000000000102000200020002A00001042123 -:10BE5000000000850040004100010000004000405B -:10BE600000400040004000000000004000000000D2 -:10BE70000000000000400000000000000000000082 +:10BE400000000000000000000000000000000000F2 +:10BE500000000000000000000000000000000000E2 +:10BE600000000000000000000000000000000000D2 +:10BE700000000000000000000000000000000000C2 :10BE800000000000000000000000000000000000B2 :10BE900000000000000000000000000000000000A2 :10BEA0000000000000000000000000000000000092 :10BEB0000000000000000000000000000000000082 -:10BEC0000000000000002000200090000000018021 -:10BED0002004414000850000200090000021000067 -:10BEE0002000000000000000200090000000000082 -:10BEF00000002020004000000000000000000000C2 +:10BEC0000000000000000000000000000000000072 +:10BED0000000000000000000000000000000000062 +:10BEE0000000000000000000000000000000000052 +:10BEF0000000000000000000000000000000000042 :10BF00000000000000000000000000000000000031 :10BF10000000000000000000000000000000000021 :10BF20000000000000000000000000000000000011 -:10BF300000000000000000000010000000000000F1 -:10BF40000000000000C010000000800000000000A1 -:10BF50000420899004890020000080000000000077 -:10BF600000008000000000000000800000000000D1 -:10BF70000000000080000001000000000000000040 -:10BF8000000000000000000000000000000000A011 -:10BF90000000000000000000000000000000009011 -:10BFA0000000000000000000000400040000400049 +:10BF30000000000000000000000000000000000001 +:10BF400000000000000000000000000000000000F1 +:10BF500000000000000000000000000000000000E1 +:10BF600000000000000000000000000000000000D1 +:10BF700000000000000000000000000000000000C1 +:10BF800000000000000000000000000000000000B1 +:10BF900000000000000000000000000000000000A1 +:10BFA0000000000000000000000000000000000091 :10BFB0000000000000000000000000000000000081 :10BFC0000000000000000000000000000000000071 -:10BFD000000000800080018001800000C00000A1FE -:10BFE00001A10000A000000000000000A0800103EB +:10BFD0000000000000000000000000000000000061 +:10BFE0000000000000000000000000000000000051 :10BFF0000000000000000000000000000000000041 :10C000000000000000000000000000000000000030 :10C010000000000000000000000000000000000020 :10C020000000000000000000000000000000000010 :10C030000000000000000000000000000000000000 -:10C0400000000000000000000000000000000500EB -:10C0500000000000004008400440022000000000F2 -:10C06000004002400000000000000000000000400E -:10C0700002000000000000000000000000000000BE -:10C0800000000000000000000000000002000000AE +:10C0400000000000000000000000000000000000F0 +:10C0500000000000000000000000000000000000E0 +:10C0600000000000000000000000000000000000D0 +:10C0700000000000000000000000000000000000C0 +:10C0800000000000000000000000000000000000B0 :10C0900000000000000000000000000000000000A0 :10C0A0000000000000000000000000000000000090 :10C0B0000000000000000000000000000000000080 -:10C0C000000000000000000000000000000041C06F -:10C0D00000000001000041C000000000000041C05D -:10C0E00000000001000041C000000001000041C04C -:10C0F000000001010000000041C00000000000003D +:10C0C0000000000000000000000000000000000070 +:10C0D0000000000000000000000000000000000060 +:10C0E0000000000000000000000000000000000050 +:10C0F0000000000000000000000000000000000040 :10C10000000000000000000000000000000000002F :10C11000000000000000000000000000000000001F :10C12000000000000000000000000000000000000F :10C1300000000000000000000000000000000000FF :10C1400000000000000000000000000000000000EF -:10C150009180001102090011919100000908000965 -:10C160009180000302090002918000050909000086 -:10C17000918000050509000000009191050520004F +:10C1500000000000000000000000000000000000DF +:10C1600000000000000000000000000000000000CF +:10C1700000000000000000000000000000000000BF :10C1800000000000000000000000000000000000AF :10C19000000000000000000000000000000000009F :10C1A000000000000000000000000000000000008F :10C1B000000000000000000000000000000000007F :10C1C000000000000000000000000000000000006F -:10C1D0000000090000210011910009000021081150 -:10C1E00089090900032100118000090005210011BF -:10C1F0008000090005210011808000000900052150 -:10C200000011880000000000000000000000000095 +:10C1D000000000000000000000000000000000005F +:10C1E000000000000000000000000000000000004F +:10C1F000000000000000000000000000000000003F +:10C20000000000000000000000000000000000002E :10C21000000000000000000000000000000000001E :10C22000000000000000000000000000000000000E :10C2300000000000000000000000000000000000FE :10C2400000000000000000000000000000000000EE -:10C2500000000088010200000001C0000100008809 -:10C260000001C088010000000001C00001020000C0 -:10C270000001C000010000000001C010000001002A -:10C2800000000001C10000000000000000000000EC +:10C2500000000000000000000000000000000000DE +:10C2600000000000000000000000000000000000CE +:10C2700000000000000000000000000000000000BE +:10C2800000000000000000000000000000000000AE :10C29000000000000000000000000000000000009E :10C2A000000000000000000000000000000000008E :10C2B000000000000000000000000000000000007E :10C2C000000000000000000000000000000000006E -:10C2D00000000000000000000001000003C000009A -:10C2E0000000020103C000000001000003C00000C4 -:10C2F0000000000103C000000000010103C00000B5 -:10C3000000000000010103C1000000000000000067 +:10C2D000000000000000000000000000000000005E +:10C2E000000000000000000000000000000000004E +:10C2F000000000000000000000000000000000003E +:10C30000000000000000000000000000000000002D :10C31000000000000000000000000000000000001D :10C32000000000000000000000000000000000000D :10C3300000000000000000000000000000000000FD :10C3400000000000000000000000000000000000ED -:10C3500000000000000000000000000900119182B0 -:10C3600002110008800391800003000900009182FF -:10C370000000000502039190000000050803919061 -:10C380000000000000000808918300000000000089 +:10C3500000000000000000000000000000000000DD +:10C3600000000000000000000000000000000000CD +:10C3700000000000000000000000000000000000BD +:10C3800000000000000000000000000000000000AD :10C39000000000000000000000000000000000009D :10C3A000000000000000000000000000000000008D :10C3B000000000000000000000000000000000007D :10C3C000000000000000000000000000000000006D -:10C3D00000000000000800000000000000001180C4 -:10C3E000090280000809008009008300000008801D -:10C3F00009028000050900800910800005090880F5 -:10C4000009100000800005090880090000000000F4 +:10C3D000000000000000000000000000000000005D +:10C3E000000000000000000000000000000000004D +:10C3F000000000000000000000000000000000003D +:10C40000000000000000000000000000000000002C :10C41000000000000000000000000000000000001C :10C42000000000000000000000000000000000000C :10C4300000000000000000000000000000000000FC :10C4400000000000000000000000000000000000EC :10C4500000000000000000000000000000000000DC -:10C4600000840100C000000100840100C000000041 -:10C4700001840100C000000100840100C00000012F -:10C48000018401000000C0000001018401000000DF +:10C4600000000000000000000000000000000000CC +:10C4700000000000000000000000000000000000BC +:10C4800000000000000000000000000000000000AC :10C49000000000000000000000000000000000009C :10C4A000000000000000000000000000000000008C :10C4B000000000000000000000000000000000007C :10C4C000000000000000000000000000000000006C -:10C4D0000000000000000000000007000000410014 -:10C4E00000E000000000600600E0070000004100DE -:10C4F00000E000000000600000E0000000004100DB -:10C5000000E0000000000000600000E0000000000B +:10C4D000000000000000000000000000000000005C +:10C4E000000000000000000000000000000000004C +:10C4F000000000000000000000000000000000003C +:10C50000000000000000000000000000000000002B :10C51000000000000000000000000000000000001B :10C52000000000000000000000000000000000000B :10C5300000000000000000000000000000000000FB :10C5400000000000000000000000000000000000EB :10C5500000000000000000000000000000000000DB -:10C56000FFFFFFFF66660000FFFF00006666000039 -:10C57000FFFF000066660000FFFF00006666000027 -:10C58000FFFF0000666600000000FFFF0000666617 +:10C5600000000000000000000000000000000000CB +:10C5700000000000000000000000000000000000BB +:10C5800000000000000000000000000000000000AB :10C59000000000000000000000000000000000009B :10C5A000000000000000000000000000000000008B :10C5B000000000000000000000000000000000007B :10C5C000000000000000000000000000000000006B :10C5D000000000000000000000000000000000005B -:10C5E00000000000000066660000000000006666B3 -:10C5F00000000000000066660000000000006666A3 -:10C60000000000000000666600000000000000005E -:10C61000666600000000000000000000000000004E +:10C5E000000000000000000000000000000000004B +:10C5F000000000000000000000000000000000003B +:10C60000000000000000000000000000000000002A +:10C61000000000000000000000000000000000001A :10C62000000000000000000000000000000000000A :10C6300000000000000000000000000000000000FA :10C6400000000000000000000000000000000000EA @@ -113800,490 +113800,490 @@ :10C6B000000000000000000000000000000000007A :10C6C000000000000000000000000000000000006A :10C6D000000000000000000000000000000000005A -:10C6E000000000000000000066660000FFFF000080 -:10C6F00066660000FFFF000066660000FFFF0000A6 -:10C7000066660000FFFF000066660000FFFF000095 -:10C7100000006666FFFF000000000000000000004F +:10C6E000000000000000000000000000000000004A +:10C6F000000000000000000000000000000000003A +:10C700000000000000000000000000000000000029 +:10C710000000000000000000000000000000000019 :10C720000000000000000000000000000000000009 :10C7300000000000000000000000000000000000F9 :10C7400000000000000000000000000000000000E9 :10C7500000000000000000000000000000000000D9 -:10C7600000000000000000000000666600000000FD -:10C770000000666600000000000066660000000021 -:10C780000000666600000000000066660000000011 -:10C79000000000006666FFFFFFFF000000000000D1 +:10C7600000000000000000000000000000000000C9 +:10C7700000000000000000000000000000000000B9 +:10C7800000000000000000000000000000000000A9 +:10C790000000000000000000000000000000000099 :10C7A0000000000000000000000000000000000089 :10C7B0000000000000000000000000000000000079 :10C7C0000000000000000000000000000000000069 :10C7D0000000000000000000000000000000000059 -:10C7E000000000000008000000A0406380018021DC -:10C7F000920245E38A21852192A240E380018021B3 -:10C80000920240E380018021920240E38001802176 -:10C810009202000040E380018021820200000000BB +:10C7E0000000000000000000000000000000000049 +:10C7F0000000000000000000000000000000000039 +:10C800000000000000000000000000000000000028 +:10C810000000000000000000000000000000000018 :10C820000000000000000000000000000000000008 :10C8300000000000000000000000000000000000F8 :10C8400000000000000000000000000000000000E8 :10C8500000000000000000000000000000000000D8 -:10C860000000000000000000000000002020202048 -:10C87000F000000000000000000300030000303062 -:10C88000C0C0000000280028000F00000030003069 -:10C89000000F000000000030003000000000000029 +:10C8600000000000000000000000000000000000C8 +:10C8700000000000000000000000000000000000B8 +:10C8800000000000000000000000000000000000A8 +:10C890000000000000000000000000000000000098 :10C8A0000000000000000000000000000000000088 :10C8B0000000000000000000000000000000000078 :10C8C0000000000000000000000000000000000068 :10C8D0000000000000000000000000000000000058 -:10C8E0000000000000000000000000000000202008 -:10C8F0002020F0000000003C003C0003000300008A -:10C900003030C0C0000000280028000F00000030B8 -:10C910000030000F00000000003000300000FF0079 +:10C8E0000000000000000000000000000000000048 +:10C8F0000000000000000000000000000000000038 +:10C900000000000000000000000000000000000027 +:10C910000000000000000000000000000000000017 :10C920000000000000000000000000000000000007 :10C9300000000000000000000000000000000000F7 :10C9400000000000000000000000000000000000E7 :10C9500000000000000000000000000000000000D7 :10C9600000000000000000000000000000000000C7 -:10C970000003000314140000C0C000003C000000CD -:10C980000003000304040404000000000404040481 -:10C9900000000000040404040000000000000C0C6F +:10C9700000000000000000000000000000000000B7 +:10C9800000000000000000000000000000000000A7 +:10C990000000000000000000000000000000000097 :10C9A0000000000000000000000000000000000087 :10C9B0000000000000000000000000000000000077 :10C9C0000000000000000000000000000000000067 :10C9D0000000000000000000000000000000000057 :10C9E0000000000000000000000000000000000047 -:10C9F00000000003000314140000C0C000003C004D -:10CA000000000003000304040404000F000F0404EA -:10CA10000404000F000F04040404000000FF0000E1 -:10CA20000C0C0000000000000000000000000000EE +:10C9F0000000000000000000000000000000000037 +:10CA00000000000000000000000000000000000026 +:10CA10000000000000000000000000000000000016 +:10CA20000000000000000000000000000000000006 :10CA300000000000000000000000000000000000F6 :10CA400000000000000000000000000000000000E6 -:10CA500000000000000000000000000004000400CE -:10CA6000040004004000000000000000000400007A -:10CA70000000000020002000000000000000400036 -:10CA80000000000020000000000000000000000086 -:10CA90000000000020002000000400000001000051 -:10CAA000200000000008200000000000000000003E -:10CAB0000000000000002000200000000000000036 -:10CAC0002000000000002000000000000000000026 -:10CAD0000000000000002000200000000041800055 -:10CAE00080008000800209024040000200004002F5 -:10CAF00000000000000040000000000000000000F6 -:10CB00000000000000000000000000000000000223 -:10CB10000000000200000000000000000000000013 -:10CB200000000000000000004000000000000000C5 +:10CA500000000000000000000000000000000000D6 +:10CA600000000000000000000000000000000000C6 +:10CA700000000000000000000000000000000000B6 +:10CA800000000000000000000000000000000000A6 +:10CA90000000000000000000000000000000000096 +:10CAA0000000000000000000000000000000000086 +:10CAB000000000000000000000000008000000006E +:10CAC0000000000000000000000000040000000062 +:10CAD0000000000400040000000000080000000046 +:10CAE0000000000000000000000000000000000046 +:10CAF0000000000000000000000000000000000036 +:10CB00000000000000000000000000000000000025 +:10CB10000000000000000000000000000000000015 +:10CB20000000000000000000000000000000000005 :10CB300000000000000000000000000000000000F5 -:10CB400000000000000000004000000000000000A5 -:10CB500000000000000000000000000200000000D3 -:10CB6000000000000010001000000000080000108D -:10CB70000000000000100010000000000000000095 -:10CB80000100010000004000000000000000001053 +:10CB400000000000000000000000000000000000E5 +:10CB500000040004000000000000000000000000CD +:10CB600000000000000000000000000000000000C5 +:10CB700000000000000000000000000000000000B5 +:10CB800000000000000000000000000000000000A5 :10CB90000000000000000000000000000000000095 :10CBA0000000000000000000000000000000000085 -:10CBB0000000000000000000000002000000000073 -:10CBC0000000002000000010001000100000001005 -:10CBD0000010000000000000000000000000000045 -:10CBE0000000000020000000000000000000000025 -:10CBF0000000000000000000000300000000000032 -:10CC00000000400040000000800000000000000024 -:10CC10000000000040000000400000000000000094 +:10CBB0000000000000000000000000000000000075 +:10CBC0000000000000000000000000000000000065 +:10CBD0000000000000000000000000000000000055 +:10CBE0000000000000000000000000000000000045 +:10CBF0000000000000000000000000000000000035 +:10CC00000000000000000000000000000000000024 +:10CC10000000000000000000000000000000000014 :10CC20000000000000000000000000000000000004 :10CC300000000000000000000000000000000000F4 -:10CC400000000000000000000000000800000000DC +:10CC400000000000000000000000000000000000E4 :10CC500000000000000000000000000000000000D4 -:10CC600000000000000000000000000000000000C4 -:10CC700004000000000000020000000000000000AE -:10CC80000000000020002004008000049004000048 -:10CC90000004000000000000000000100000000080 -:10CCA000000000050000004000020000000000003D +:10CC600000040000000000000000000000000000C0 +:10CC700000000000000000000000000000000000B4 +:10CC800000000000000000000000000000000000A4 +:10CC90000000000000000000000000000000000094 +:10CCA0000000000000000000000000000000000084 :10CCB0000000000000000000000000000000000074 :10CCC0000000000000000000000000000000000064 -:10CCD00000000000000000009000000000000000C4 +:10CCD0000000000000000000000000000000000054 :10CCE0000000000000000000000000000000000044 -:10CCF000000000000000000008000000000000002C -:10CD0000000000000082800000010004000000001C -:10CD10000000000000000000000000000001000012 -:10CD20000000400000840000000000000000000837 +:10CCF0000000000000000000000000000000000034 +:10CD00000000000000000000000000000000000023 +:10CD10000000000000000000000000000000000013 +:10CD20000000000000000000000000000000000003 :10CD300000000000000000000000000000000000F3 :10CD400000000000000000000000000000000000E3 :10CD500000000000000000000000000000000000D3 -:10CD600000000000000000000000004000008240C1 -:10CD7000A0000000A000820020002004000020008D -:10CD8000000000000000000020000000A040012181 -:10CD90000000000000000021000000000000000072 +:10CD600000000000000000000000000000000000C3 +:10CD700000000000000000000000000000000000B3 +:10CD800000000000000000000000000000000000A3 +:10CD90000000000000000000000000000000000093 :10CDA0000000000000000000000000000000000083 -:10CDB000000000000000000000000000000000096A +:10CDB0000000000000000000000000000000000073 :10CDC0000000000000000000000000000000000063 :10CDD0000000000000000000000000000000000053 -:10CDE00000000040000000000000004000000000C3 -:10CDF0000000000000000000000080008001000032 -:10CE00008000000000000000000080000000000121 -:10CE1000200000900000000000A000C00000000002 -:10CE200000C000000088009000000000000000002A -:10CE300000000000000000000000000000000010E2 -:10CE400000100000001000000010001000000000A2 -:10CE500000000008000000000000000000000000CA +:10CDE0000000000000000000000000000000000043 +:10CDF0000000000000000000000000000000000033 +:10CE00000000000000000000000000000000000022 +:10CE10000000000000000000000000000000000012 +:10CE20000000000000000000000000000000000002 +:10CE300000000000000000000000000000000000F2 +:10CE400000000000000000000000000000000000E2 +:10CE500000000000000000000000000000000000D2 :10CE600000000000000000000000000000000000C2 -:10CE7000000000000000080000000000000010009A -:10CE800020002000C040C0410800080400050084C4 -:10CE90000804A08000000000A004A0000010000012 -:10CEA0000000000200000040000000200000000020 -:10CEB0000000000000000000000000000000001062 -:10CEC0000000000000000000001000000000000052 +:10CE700000000000000000000000000000000000B2 +:10CE800000000000000000000000000000000000A2 +:10CE90000000000000000000000000000000000092 +:10CEA0000000000000000000000000000000000082 +:10CEB0000000000000000000000000000000000072 +:10CEC0000000000000000000000000000000000062 :10CED0000000000000000000000000000000000052 :10CEE0000000000000000000000000000000000042 :10CEF0000000000000000000000000000000000032 -:10CF00000000800080200000000000900000400031 -:10CF100040040001000400000000009000A0030194 -:10CF200000000000000000000001009000850000EB -:10CF300000000000000000080000000000000000E9 +:10CF00000000000000000000000000000000000021 +:10CF10000000000000000000000000000000000011 +:10CF20000000000000000000000000000000000001 +:10CF300000000000000000000000000000000000F1 :10CF400000000000000000000000000000000000E1 -:10CF500000000000000000000000000020000000B1 +:10CF500000000000000000000000000000000000D1 :10CF600000000000000000000000000000000000C1 -:10CF700004000000040000000000000000000000A9 -:10CF80000000100000001000900000200800A080A9 -:10CF900008090800C00008000020A00200090011D4 -:10CFA000000000100000000500000000000000412B -:10CFB0000000000000000000000800000000000069 -:10CFC0000000000000000000001000000000000051 +:10CF700000000000000000000000000000000000B1 +:10CF800000000000000000000000000000000000A1 +:10CF90000000000000000000000000000000000091 +:10CFA0000000000000000000000000000000000081 +:10CFB0000000000000000000000000000000000071 +:10CFC0000000000000000000000000000000000061 :10CFD0000000000000000000000000000000000051 :10CFE0000000000000000000000000000000000041 -:10CFF0000000800000008000000000000000000031 -:10D00000000000000084000000000000000100009B -:10D01000001040C040000002090200C000C000C073 -:10D0200000C000000001000000000000000000003F -:10D03000000000000000000000000000201020821E -:10D0400000040084000005000082050000000000CC +:10CFF0000000000000000000000000000000000031 +:10D000000000000000000000000000000000000020 +:10D010000000000000000000000000000000000010 +:10D020000000000000000000000000000000000000 +:10D0300000000000000000000000000000000000F0 +:10D0400000000000000000000000000000000000E0 :10D0500000000000000000000000000000000000D0 :10D0600000000000000000000000000000000000C0 -:10D070000000000000000008008808000000000018 -:10D08000000000000000000000000000A000000000 -:10D090000000C004A003008300A1C0C18808088864 -:10D0A00000888204A0020010000000900000000030 +:10D0700000000000000000000000000000000000B0 +:10D0800000000000000000000000000000000000A0 +:10D090000000000000000000000000000000000090 +:10D0A0000000000000000000000000000000000080 :10D0B0000000000000000000000000000000000070 :10D0C0000000000000000000000000000000000060 :10D0D0000000000000000000000000000000000050 :10D0E0000000000000000000000000000000000040 :10D0F0000000000000000000000000000000000030 -:10D100000000000000000000000810000004C00043 -:10D1100000000000800040C00810000880080500E2 -:10D12000000000008080800000800000008000007F +:10D10000000000000000000000000000000000001F +:10D11000000000000000000000000000000000000F +:10D1200000000000000000000000000000000000FF :10D1300000000000000000000000000000000000EF :10D1400000000000000000000000000000000000DF :10D1500000000000000000000000000000000000CF :10D1600000000000000000000000000000000000BF :10D1700000000000000000000000000000000000AF -:10D18000000000000000000080008000000040005F -:10D190000000800380800000008500C000908000B7 -:10D1A000800080A1808080800000800080008080DE -:10D1B00000000000000080000000000000000000EF +:10D18000000000000000000000000000000000009F +:10D19000000000000000000000000000000000008F +:10D1A000000000000000000000000000000000007F +:10D1B000000000000000000000000000000000006F :10D1C000000000000000000000000000000000005F :10D1D000000000000000000000000000000000004F :10D1E000000000000000000000000000000000003F :10D1F000000000000000000000000000000000002F -:10D20000000000000000000000000200100002000A -:10D21000000002009000A0401000201004C008414F -:10D220000284100008C0100208C020000400A00002 -:10D23000C01000000800000008000000000000000E +:10D20000000000000000000000000000000000001E +:10D21000000000000000000000000000000000000E +:10D2200000000000000000000000000000000000FE +:10D2300000000000000000000000000000000000EE :10D2400000000000000000000000000000000000DE :10D2500000000000000000000000000000000000CE :10D2600000000000000000000000000000000000BE :10D2700000000000000000000000000000000000AE -:10D280000088000000000000000000000000000115 -:10D29000000000000008000400024004090220C051 -:10D2A00040C1400903100008C0108288000200A09D -:10D2B000004000100000000000000000000000001E +:10D28000000000000000000000000000000000009E +:10D29000000000000000000000000000000000008E +:10D2A000000000000000000000000000000000007E +:10D2B000000000000000000000000000000000006E :10D2C000000000000000000000000000000000005E :10D2D000000000000000000000000000000000004E :10D2E000000000000000000000000000000000003E :10D2F000000000000000000000000000000000002E :10D30000000000000000000000000000000000001D -:10D310000010000000040000008000000080C190A8 -:10D32000000988032088C180000080008000008000 -:10D33000008000000000000000000000000000006D +:10D31000000000000000000000000000000000000D +:10D3200000000000000000000000000000000000FD +:10D3300000000000000000000000000000000000ED :10D3400000000000000000000000000000000000DD :10D3500000000000000000000000000000000000CD :10D3600000000000000000000000000000000000BD :10D3700000000000000000000000000000000000AD -:10D38000000000020000000000000000000000009B -:10D3900020000080008004040009009080800000CC -:10D3A000204110111080080000108004008000004F -:10D3B00000108082008000000000000800000000D3 +:10D38000000000000000000000000000000000009D +:10D39000000000000000000000000000000000008D +:10D3A000000000000000000000000000000000007D +:10D3B000000000000000000000000000000000006D :10D3C000000000000000000000000000000000005D :10D3D000000000000000000000000000000000004D :10D3E000000000000000000000000000000000003D :10D3F000000000000000000000000000000000002D -:10D40000000090000020888800000000000000005C -:10D41000000000000010001000000200401010404A -:10D4200040008301200583088300040004100440A9 -:10D430000400020088020040880000000000000094 +:10D40000000000000000000000000000000000001C +:10D41000000000000000000000000000000000000C +:10D4200000000000000000000000000000000000FC +:10D4300000000000000000000000000000000000EC :10D4400000000000000000000000000000000000DC :10D4500000000000000000000000000000000000CC :10D4600000000000000000000000000000000000BC :10D4700000000000000000000000000000000000AC -:10D480000000000000820000070000000000000013 -:10D4900000000000410000E00000000000820000E9 -:10D4A00007000006410000E0000048060000000000 -:10D4B0000000484200820000070100000000000058 -:10D4C0000700000000000000000000000000000055 +:10D48000000000000000000000000000000000009C +:10D49000000000000000000000000000000000008C +:10D4A000000000000000000000000000000000007C +:10D4B000000000000000000000000000000000006C +:10D4C000000000000000000000000000000000005C :10D4D000000000000000000000000000000000004C :10D4E000000000000000000000000000000000003C :10D4F000000000000000000000000000000000002C -:10D5000000000000000000000F0FFF00FF000000FF +:10D50000000000000000000000000000000000001B :10D51000000000000000000000000000000000000B -:10D5200000000000000000000960000081242400C9 -:10D530000024000009603C3C00FF010000000000E6 +:10D5200000000000000000000000000000000000FB +:10D5300000000000000000000000000000000000EB :10D5400000000000000000000000000000000000DB :10D5500000000000000000000000000000000000CB :10D5600000000000000000000000000000000000BB :10D5700000000000000000000000000000000000AB -:10D58000000000000000000000000F0F000000007D +:10D58000000000000000000000000000000000009B :10D59000000000000000000000000000000000008B -:10D5A000010000000200000009600000812400006A -:10D5B00081000081096000003C3C00FF0100000088 +:10D5A000000000000000000000000000000000007B +:10D5B000000000000000000000000000000000006B :10D5C000000000000000000000000000000000005B :10D5D000000000000000000000000000000000004B :10D5E000000000000000000000000000000000003B :10D5F000000000000000000000000000000000002B -:10D6000000000000000000000000F000F00000003A -:10D610000000000000000000000000000000838304 -:10D6200083834141414100000000060000060408D8 -:10D63000102004011040240081003C3CFF007FFFCB -:10D64000FFFF00000000FFFF0F0F000000000000C0 +:10D60000000000000000000000000000000000001A +:10D61000000000000000000000000000000000000A +:10D6200000000000000000000000000000000000FA +:10D6300000000000000000000000000000000000EA +:10D6400000000000000000000000000000000000DA :10D6500000000000000000000000000000000000CA :10D6600000000000000000000000000000000000BA :10D6700000000000000000000000000000000000AA -:10D68000000000000000000000000000F000F000BA -:10D690005555555500000000000000000000000036 -:10D6A00000830083414141410000800090000090D0 -:10D6B0000102408008022080002400813C3CFF00E1 -:10D6C0007FFF000000000000FFFF0F0F00000000C0 +:10D68000000000000000000000000000000000009A +:10D69000000000000000000000000000000000008A +:10D6A000000000000000000000000000000000007A +:10D6B000000000000000000000000000000000006A +:10D6C000000000000000000000000000000000005A :10D6D000000000000000000000000000000000004A :10D6E000000000000000000000000000000000003A :10D6F000000000000000000000000000000000002A :10D700000000000000000000000000000000000019 -:10D710000028000000000000000000000000006180 -:10D72000000180010000000000280000000060618E -:10D730000006800D1000000000000000080000003E -:10D740000028000001A800000008000000010000FF +:10D710000000000000000000000000000000000009 +:10D7200000000000000000000000000000000000F9 +:10D7300000000000000000000000000000000000E9 +:10D7400000000000000000000000000000000000D9 :10D7500000000000000000000000000000000000C9 :10D7600000000000000000000000000000000000B9 :10D7700000000000000000000000000000000000A9 :10D780000000000000000000000000000000000099 :10D790000000000000000000000000000000000089 -:10D7A000C3C30000F0F00000000000000000000013 -:10D7B000FC3CFD7D000FFFFF0000000000000000AA +:10D7A0000000000000000000000000000000000079 +:10D7B0000000000000000000000000000000000069 :10D7C0000000000000000000000000000000000059 :10D7D0000000000000000000000000000000000049 :10D7E0000000000000000000000000000000000039 :10D7F0000000000000000000000000000000000029 :10D800000000000000000000000000000000000018 :10D810000000000000000000000000000000000008 -:10D820000000C3C30000F0F0000000000000000092 -:10D830000000FC3CFD7D3C3FFFFF000000000000BD +:10D8200000000000000000000000000000000000F8 +:10D8300000000000000000000000000000000000E8 :10D8400000000000000000000000000000000000D8 :10D8500000000000000000000000000000000000C8 :10D8600000000000000000000000000000000000B8 :10D8700000000000000000000000000000000000A8 :10D880000000000000000000000000000000000098 :10D890000000000000000000000000000000000088 -:10D8A00000000000C300C300000055550000000048 -:10D8B000000000003C3C3F3F000000000000000072 +:10D8A0000000000000000000000000000000000078 +:10D8B0000000000000000000000000000000000068 :10D8C0000000000000000000000000000000000058 :10D8D0000000000000000000000000000000000048 :10D8E0000000000000000000000000000000000038 :10D8F0000000000000000000000000000000000028 :10D900000000000000000000000000000000000017 :10D910000000000000000000000000000000000007 -:10D92000000000000000C300C300000055550000C7 -:10D93000000000000000FF3CFF3F0000000000006E +:10D9200000000000000000000000000000000000F7 +:10D9300000000000000000000000000000000000E7 :10D9400000000000000000000000000000000000D7 :10D9500000000000000000000000000000000000C7 :10D9600000000000000000000000000000000000B7 :10D9700000000000000000000000000000000000A7 :10D980000000000000000000000000000000000097 -:10D990000000000000000000040000800080000083 -:10D9A0002000000200000400000000000000400011 -:10D9B00000802080C02088208880C000A000C00097 -:10D9C000A000A000A0000000000000000000200057 -:10D9D0000000200004008800000304000000000094 -:10D9E0000000040000000000000000000000000033 -:10D9F0002000000020002000200020000000000087 -:10DA00000000200000000000000000000000A00056 -:10DA1000200000002000200020004002000410042C -:10DA200010020000000040000000000000000000A4 -:10DA30000000002000202001000120020000000062 -:10DA40000000200010A04090000000000000000036 -:10DA50001000000000004000000000000040000036 -:10DA60000000000000000000400240000000000034 -:10DA700000000000000000000002000000000000A4 -:10DA80000000000000000000000000000000000096 -:10DA90000000000000000000000000000000000086 -:10DAA000000010000200020002000200000000005E +:10D990000000000000000000000000000000000087 +:10D9A0000000000000000000000000000000000077 +:10D9B0000000000000000000000000000000000067 +:10D9C0000000000000000000000000000000000057 +:10D9D0000000000000000000000000000000000047 +:10D9E0000000000000000000000000000000000037 +:10D9F0000000000000000000000000000000000027 +:10DA00000000000000000000000000000000000412 +:10DA10000004000000000000000000000000000002 +:10DA200000000000000000000000000000000000F6 +:10DA300000000000000000000000000000000000E6 +:10DA400000000000000000000000000000000000D6 +:10DA500000000000000000000000000000000000C6 +:10DA600000000000000000000000000000000000B6 +:10DA700000000000000000000000000000000000A6 +:10DA8000000000000000000000000000000400048E +:10DA90000000000000000000000010000000000076 +:10DAA0000000000000000000000000000000000076 :10DAB0000000000000000000000000000000000066 -:10DAC0004000000000000000000000000000000016 -:10DAD000000000000000000000000800000000003E -:10DAE0000000000000000000000002000000000034 -:10DAF0000000000008000000000000000800000016 +:10DAC0000000000000000000000000000000000056 +:10DAD0000000000000000000000000000000000046 +:10DAE0000000000000000000000000000000000036 +:10DAF0000000000000000000000000000000000026 :10DB00000000000000000000000000000000000015 -:10DB100000000000000000800080C090C0100000E5 -:10DB200000000000000000020000000000000000F3 -:10DB3000000000000000000800080008000041008C -:10DB400000008000008800000000000000000000CD -:10DB500000000000000000080008000800000000AD -:10DB6000000000000000000000080000800000002D -:10DB70000004000000000000000800080008000089 -:10DB80000000000000000000008400000000000011 -:10DB9000000000000000000000020004000400007B -:10DBA0002000000000002000000000000000000035 -:10DBB00000000000840000000000000004000000DD -:10DBC0000000000002000000000000000000000053 -:10DBD00000000000000000000021002100210000E2 -:10DBE0000000000300000000000000040104000425 -:10DBF00001400020000000000000000000000000C4 -:10DC000000410000000000000000000000000000D3 -:10DC1000000000000000000000004008200020007C -:10DC200000008004000200008008000010000000D6 -:10DC3000000000000000000000000300410221007D -:10DC4000110000000002800200000388008800002C -:10DC50000000001000100010000000840000000010 -:10DC600000A00000000000000000000000012005EE -:10DC70000001200000000000000000000000000083 +:10DB10000000000000000000000000000000000005 +:10DB200000000000000000000000000000000000F5 +:10DB300000000000000000000000000000000000E5 +:10DB400000000000000000000000000000000000D5 +:10DB500000000000000000000000000000000000C5 +:10DB600000000000000000000000000000000000B5 +:10DB700000000000000000000000000000000000A5 +:10DB80000000000000000000000000000000000095 +:10DB90000000000000000000000000000000000085 +:10DBA0000000000000000000000000000000000075 +:10DBB0000000000000000000000000000000000065 +:10DBC0000000000000000000000000000000000055 +:10DBD0000000000000000000000000000000000045 +:10DBE0000000000000000000000000000000000035 +:10DBF0000000000000000000000000000000000025 +:10DC00000000000000000000000000000000000014 +:10DC10000000000000000000000000000000000004 +:10DC200000000000000000000000000000000000F4 +:10DC300000000000000000000000000000000000E4 +:10DC400000000000000000000000000000000000D4 +:10DC500000000000000000000000000000000000C4 +:10DC600000000000000000000000000000000000B4 +:10DC700000000000000000000000000000000000A4 :10DC80000000000000000000000000000000000094 -:10DC9000000000000000000400000000840080007C -:10DCA00080000000080000008200000084000000E6 -:10DCB00008000800080000000000000082000000CA -:10DCC00010000000000000000000A0800000000024 -:10DCD0000000080084000000000082000000000036 -:10DCE00000000800000082000000000000000000AA +:10DC90000000000000000000000000000000000084 +:10DCA0000000000000000000000000000000000074 +:10DCB0000000000000000000000000000000000064 +:10DCC0000000000000000000000000000000000054 +:10DCD0000000000000000000000000000000000044 +:10DCE0000000000000000000000000000000000034 :10DCF0000000000000000000000000000000000024 :10DD00000000000000000000000000000000000013 :10DD10000000000000000000000000000000000003 -:10DD200000000000004100000000000000000000B2 -:10DD300000000000000000000000000000000900DA -:10DD4000000000000084000000000000410400000A -:10DD500005000000000000000000000000000000BE +:10DD200000000000000000000000000000000000F3 +:10DD300000000000000000000000000000000000E3 +:10DD400000000000000000000000000000000000D3 +:10DD500000000000000000000000000000000000C3 :10DD600000000000000000000000000000000000B3 :10DD700000000000000000000000000000000000A3 :10DD80000000000000000000000000000000000093 :10DD90000000000000000000000000000000000083 :10DDA0000000000000000000000000000000000073 -:10DDB00000000000000000000000000082004000A1 -:10DDC0000800000084008200000001000000000044 -:10DDD000000004000000000000210041004100009C -:10DDE0000000000000000000000008008400A00007 -:10DDF00008000800080008000004000000000000FF +:10DDB0000000000000000000000000000000000063 +:10DDC0000000000000000000000000000000000053 +:10DDD0000000000000000000000000000000000043 +:10DDE0000000000000000000000000000000000033 +:10DDF0000000000000000000000000000000000023 :10DE00000000000000000000000000000000000012 -:10DE100000000000000000000000000000004000C2 -:10DE200000000000C000000000000400000000042A -:10DE300000080000000000000000100000000004C6 -:10DE40000000000000000590000020042000119058 -:10DE50000084001000100510001000080000009061 -:10DE600000000000000008000000000000000000AA -:10DE700000000000000000000000000100000000A1 +:10DE10000000000000000000000000000000000002 +:10DE200000000000000000000000000000000000F2 +:10DE300000000000000000000000000000000000E2 +:10DE400000000000000000000000000000000000D2 +:10DE500000000000000000000000000000000000C2 +:10DE600000000000000000000000000000000000B2 +:10DE700000000000000000000000000000000000A2 :10DE80000000000000000000000000000000000092 -:10DE9000000000000000000000000000000000047E +:10DE90000000000000000000000000000000000082 :10DEA0000000000000000000000000000000000072 -:10DEB00000000000000000000000000082000000E0 -:10DEC00088000000A0000000820010000000000098 -:10DED000008000410008000400040002001000104F -:10DEE00000100010000000000800000000001021D9 -:10DEF000080008008200200004002000000000004C +:10DEB0000000000000000000000000000000000062 +:10DEC0000000000000000000000000000000000052 +:10DED0000000000000000000000000000000000042 +:10DEE0000000000000000000000000000000000032 +:10DEF0000000000000000000000000000000000022 :10DF00000000000000000000000000000000000011 :10DF10000000000000000000000000000000000001 :10DF200000000000000000000000000000000000F1 -:10DF300000002000000800000000000000000000B9 -:10DF400000000000200000000000000000000000B1 -:10DF50000000004000C000000000000000000000C1 +:10DF300000000000000000000000000000000000E1 +:10DF400000000000000000000000000000000000D1 +:10DF500000000000000000000000000000000000C1 :10DF600000000000000000000000000000000000B1 -:10DF700000000000000000008000000080000000A1 +:10DF700000000000000000000000000000000000A1 :10DF80000000000000000000000000000000000091 :10DF90000000000000000000000000000000000081 :10DFA0000000000000000000000000000000000071 -:10DFB0000001000000000000000000000000000060 -:10DFC00000000000000000000088000000000008C1 -:10DFD0009040849000A082840208002000C090102D +:10DFB0000000000000000000000000000000000061 +:10DFC0000000000000000000000000000000000051 +:10DFD0000000000000000000000000000000000041 :10DFE0000000000000000000000000000000000031 -:10DFF0000000000000000000000002850084008492 -:10E000002002400200880088080200000000000092 +:10DFF0000000000000000000000000000000000021 +:10E000000000000000000000000000000000000010 :10E010000000000000000000000000000000000000 :10E0200000000000000000000000000000000000F0 -:10E0300000000002002010000000000000000000AE +:10E0300000000000000000000000000000000000E0 :10E0400000000000000000000000000000000000D0 -:10E0500000800005000010058000000000000000A6 -:10E060000080000000000000000000000000000030 -:10E070000000000000000000000000008008000018 -:10E080000800008200800000000000800000000006 +:10E0500000000000000000000000000000000000C0 +:10E0600000000000000000000000000000000000B0 +:10E0700000000000000000000000000000000000A0 +:10E080000000000000000000000000000000000090 :10E090000000000000000000000000000000000080 -:10E0A0000000000000000000000000000002000866 -:10E0B000082000200200000008000000000000000E +:10E0A0000000000000000000000000000000000070 +:10E0B0000000000000000000000000000000000060 :10E0C0000000000000000000000000000000000050 -:10E0D00000038000090000A000008880800080C14B -:10E0E0000008808000000000000000000000000028 +:10E0D0000000000000000000000000000000000040 +:10E0E0000000000000000000000000000000000030 :10E0F0000000000000000000000000000000000020 -:10E10000008800800880000000830000008000007C +:10E10000000000000000000000000000000000000F :10E1100000000000000000000000000000000000FF -:10E12000000000000000000000000000000000806F -:10E1300000001111000001000000000000000000BC +:10E1200000000000000000000000000000000000EF +:10E1300000000000000000000000000000000000DF :10E1400000000000000000000000000000000000CF -:10E15000000000000800200004C0C02002C0080029 -:10E1600008C002C008C0000000000000000000005D +:10E1500000000000000000000000000000000000BF +:10E1600000000000000000000000000000000000AF :10E17000000000000000000000000000000000009F -:10E180009000C0C00404C0C0A00010C0A09084C013 +:10E18000000000000000000000000000000000008F :10E19000000000000000000000000000000000007F :10E1A000000000000000000000000000000000006F -:10E1B000004000000101000000010000000100001B +:10E1B000000000000000000000000000000000005F :10E1C000000000000000000000000000000000004F -:10E1D0000090000000000008A1840002C00904882B -:10E1E00009040090C00805100000000000000000B5 +:10E1D000000000000000000000000000000000003F +:10E1E000000000000000000000000000000000002F :10E1F000000000000000000000000000000000001F -:10E20000000021A000C1C004044021880020C010EB -:10E21000C0880000000000000000000000000000B6 +:10E20000000000000000000000000000000000000E +:10E2100000000000000000000000000000000000FE :10E2200000000000000000000000000000000000EE -:10E2300000000000000001000000000200000008D3 +:10E2300000000000000000000000000000000000DE :10E2400000000000000000000000000000000000CE -:10E25000000000000000000000804100008080A15C -:10E260008004410000008080408000000000000029 +:10E2500000000000000000000000000000000000BE +:10E2600000000000000000000000000000000000AE :10E27000000000000000000000000000000000009E -:10E280000000000041000008800080024100008082 -:10E2900080000000000000000000000000000000FE +:10E28000000000000000000000000000000000008E +:10E29000000000000000000000000000000000007E :10E2A000000000000000000000000000000000006E -:10E2B000000000000000200005000400020800002B -:10E2C000100000000000000000000000000000003E -:10E2D000000000000000001000008000210000800D -:10E2E00000000400000000808000800000000000AA +:10E2B000000000000000000000000000000000005E +:10E2C000000000000000000000000000000000004E +:10E2D000000000000000000000000000000000003E +:10E2E000000000000000000000000000000000002E :10E2F000000000000000000000000000000000001E -:10E30000000000000000000590800080020200056F -:10E3100080000080000000000000000000000000FD +:10E30000000000000000000000000000000000000D +:10E3100000000000000000000000000000000000FD :10E3200000000000000000000000000000000000ED -:10E3300000000000000021801100000000800101A9 -:10E3400000000100000000000000000000000000CC -:10E350000000000000000800008800000800C10064 -:10E360000808A020C000C000901084020200000035 +:10E3300000000000000000000000000000000000DD +:10E3400000000000000000000000000000000000CD +:10E3500000000000000000000000000000000000BD +:10E3600000000000000000000000000000000000AD :10E37000000000000000000000000000000000009D -:10E38000000000000000000010000502A040C000D6 -:10E390000400041004040400000000000000000059 +:10E38000000000000000000000000000000000008D +:10E39000000000000000000000000000000000007D :10E3A000000000000000000000000000000000006D -:10E3B000000000000000000001A0010000000008B3 -:10E3C000810000E0000000000000000000000000EC -:10E3D0000000000000000000001100000700000025 -:10E3E000600000E0000048420000000000004842D9 +:10E3B000000000000000000000000000000000005D +:10E3C000000000000000000000000000000000004D +:10E3D000000000000000000000000000000000003D +:10E3E000000000000000000000000000000000002D :10E3F000000000000000000000000000000000001D -:10E4000000000000000000000000600000E00000CC -:10E4100048420000000000004842000000000000E8 +:10E40000000000000000000000000000000000000C +:10E4100000000000000000000000000000000000FC :10E4200000000000000000000000000000000000EC -:10E4300000000000000000000000600000E000009C +:10E4300000000000000000000000000000000000DC :10E4400000000000000000000000000000000000CC -:10E4500000000000000000000000C3C30000000036 -:10E460003C3C2004100820044002200440022211F9 +:10E4500000000000000000000000000000000000BC +:10E4600000000000000000000000000000000000AC :10E47000000000000000000000000000000000009C -:10E48000000000000000000000000000204010809C -:10E490002800002828410000200410080000000087 +:10E48000000000000000000000000000000000008C +:10E49000000000000000000000000000000000007C :10E4A000000000000000000000000000000000006C :10E4B000000000000000000000000000000000005C :10E4C000000000000000000000000000000000004C -:10E4D000000000000000000000000000C3C30000B6 -:10E4E00000003C3C400280011008800110088001BF -:10E4F00000002211000000000000000000000000E9 -:10E500000000000000000000000000000000040205 -:10E510000801410000410000284140028001000044 +:10E4D000000000000000000000000000000000003C +:10E4E000000000000000000000000000000000002C +:10E4F000000000000000000000000000000000001C +:10E50000000000000000000000000000000000000B +:10E5100000000000000000000000000000000000FB :10E5200000000000000000000000000000000000EB :10E5300000000000000000000000000000000000DB :10E5400000000000000000000000000000000000CB @@ -114296,273 +114296,273 @@ :10E5B000000000000000000000000000000000005B :10E5C000000000000000000000000000000000004B :10E5D000000000000000000000000000000000003B -:10E5E0000000C3C3666600004002200444000044EB -:10E5F000400220041400001400000000000000008D +:10E5E000000000000000000000000000000000002B +:10E5F000000000000000000000000000000000001B :10E60000000000000000000000000000000000000A -:10E610000000010208040102080440200204010273 -:10E6200008040000000000000000000000000000DE +:10E6100000000000000000000000000000000000FA +:10E6200000000000000000000000000000000000EA :10E6300000000000000000000000000000000000DA :10E6400000000000000000000000000000000000CA :10E6500000000000000000000000000000000000BA -:10E6600000000000C3C36666000080011008880037 -:10E670000088800110088200008200000000000075 +:10E6600000000000000000000000000000000000AA +:10E67000000000000000000000000000000000009A :10E68000000000000000000000000000000000008A -:10E690000000000080401020804010208010010801 -:10E6A000804010200000000000000000000000007A +:10E69000000000000000000000000000000000007A +:10E6A000000000000000000000000000000000006A :10E6B000000000000000000000000000000000005A -:10E6C00000000000000000000000000000610001E8 -:10E6D00080010000000000000000000000000000B9 -:10E6E000000000000000002800000000606100053C -:10E6F0008009100000000000000008000000000079 +:10E6C000000000000000000000000000000000004A +:10E6D000000000000000000000000000000000003A +:10E6E000000000000000000000000000000000002A +:10E6F000000000000000000000000000000000001A :10E700000000000000000000000000000000000009 -:10E7100000000000000060610001800110000000A6 -:10E7200000000000080000000000000000000000E1 +:10E7100000000000000000000000000000000000F9 +:10E7200000000000000000000000000000000000E9 :10E7300000000000000000000000000000000000D9 -:10E7400000000000000000610005800500000000DE -:10E750000F0F00C300C30000000000000000000015 -:10E760000000000000000000000000000000C3C323 -:10E77000000000FF0000000000000000000000009A +:10E7400000000000000000000000000000000000C9 +:10E7500000000000000000000000000000000000B9 +:10E7600000000000000000000000000000000000A9 +:10E770000000000000000000000000000000000099 :10E780000000000000000000000000000000000089 -:10E790000000000000000000C300C300F0F0000013 +:10E790000000000000000000000000000000000079 :10E7A0000000000000000000000000000000000069 :10E7B0000000000000000000000000000000000059 -:10E7C0000000000000000000AA550000000000004A -:10E7D00000000F0F00C300C3000000000000000095 +:10E7C0000000000000000000000000000000000049 +:10E7D0000000000000000000000000000000000039 :10E7E0000000000000000000000000000000000029 -:10E7F000C3C3000000FF0000000000000000000094 +:10E7F0000000000000000000000000000000000019 :10E800000000000000000000000000000000000008 -:10E8100000000000000000000000C300C300F0F092 +:10E8100000000000000000000000000000000000F8 :10E8200000000000000000000000000000000000E8 :10E8300000000000000000000000000000000000D8 -:10E8400000000000000000000000AA5500000000C9 -:10E8500000000000FF0000C300C300000000000033 +:10E8400000000000000000000000000000000000C8 +:10E8500000000000000000000000000000000000B8 :10E8600000000000000000000000000000000000A8 -:10E8700000000F0F000000003C3C00000000000002 +:10E870000000000000000000000000000000000098 :10E880000000000000000000000000000000000088 -:10E89000000000000000000000000000C3C30000F2 -:10E8A00000005555000000000000000000000000BE +:10E890000000000000000000000000000000000078 +:10E8A0000000000000000000000000000000000068 :10E8B0000000000000000000000000000000000058 :10E8C0000000000000000000000000000000000048 -:10E8D000FF00FF000000FF0000C300C300000000B5 +:10E8D0000000000000000000000000000000000038 :10E8E0000000000000000000000000000000000028 -:10E8F000000000000F0F000000003C3C0000000082 +:10E8F0000000000000000000000000000000000018 :10E900000000000000000000000000000000000007 -:10E910000000000000000000000000000000C3C371 -:10E92000000000005555000000000000000000003D +:10E9100000000000000000000000000000000000F7 +:10E9200000000000000000000000000000000000E7 :10E9300000000000000000000000000000000000D7 -:10E940000000000000000000000000000000AAA875 -:10E95000AAAA000000002000018504000100200890 -:10E9600000002000200020000400000002008800B9 -:10E97000000020000000200401800400890020081D -:10E98000A000200084002000000000000000000023 -:10E99000000020000000000120000400200004000E -:10E9A00020000000200340002003000000000000C1 -:10E9B000880000002000000020000000000000008F -:10E9C000200000002000200020008800000000003F -:10E9D000200000002000000040020402800004002B -:10E9E00040000000000000000000840000008000E3 -:10E9F00000900000000000000040081080000400AB -:10EA0000000800000000009000900000009000004E -:10EA100040020002000200020000000000000000AE +:10E9400000000000000000000000000000000000C7 +:10E9500000000000000000000000000000000000B7 +:10E960000000000000000000200000000000000087 +:10E970000000000000000000000000000000000097 +:10E980000000000000000000200000000000000067 +:10E990000000000000000000000000000000000077 +:10E9A0000000000000000000000020000000000047 +:10E9B0000000000000000000000000000000000057 +:10E9C0000000000000000000000020000000000027 +:10E9D000000000000008000000000000000000002F +:10E9E0000000000000000000000000000000000027 +:10E9F0000000000000000000000000000000000017 +:10EA00000000000000000000000000000000000006 +:10EA100000000000000000000000000000000000F6 :10EA200000000000000000000000000000000000E6 -:10EA30000000400000000000000000000000000096 -:10EA400000000000000000000000000200000000C4 -:10EA500000000002000000000000010040800800EB -:10EA60000800000000000000000008000000000096 -:10EA70000000020000400000084008030800208059 -:10EA8000200000000000000000000400040000005E -:10EA90000000000000000000010000000000000075 -:10EAA0000000000000000000100000000000000056 -:10EAB000000000000000000000000840000000000E +:10EA300000000000000000000000000000000000D6 +:10EA400000000000000000000000000000000000C6 +:10EA500000000000000000000000000000000000B6 +:10EA600000000000000000000000000000000000A6 +:10EA70000000000000000000000000000000000096 +:10EA80000000000000000000000000000000000086 +:10EA90000000000000000000000000000000000076 +:10EAA0000000000000000000000000000000000066 +:10EAB0000000000000000000000000000000000056 :10EAC0000000000000000000000000000000000046 -:10EAD000000000000000000000000800400080026C -:10EAE0000000000000020000000000008040004024 -:10EAF0000000000000000000000000008000800016 -:10EB000080208000008400840000200000000000BD -:10EB100000900000008200000000080000000000DB -:10EB200000000000000000080008000800080000C5 -:10EB300000000300000000080000000000000000CA -:10EB40000000000000000008000800080008004065 -:10EB50000040000000000002004000000000012111 -:10EB60008800000090000000000800000000000580 -:10EB70008421000000210000A0000000000020000F -:10EB80002005080020200400040004800400000088 -:10EB90000005000000000008400220000000000006 -:10EBA000000000000000000000000008000000005D +:10EAD0000000000000000000000000000000000036 +:10EAE0000000000000000000000000000000000026 +:10EAF0000000000000000000000000000000000016 +:10EB00000000000000000000000000000000000005 +:10EB100000000000000000000000000000000000F5 +:10EB200000000000000000000000000000000000E5 +:10EB300000000000000000000000000000000000D5 +:10EB400000000000000000000000000000000000C5 +:10EB500000000000000000000000000000000000B5 +:10EB600000000000000000000000000000000000A5 +:10EB70000000000000000000000000000000000095 +:10EB80000000000000000000000000000000000085 +:10EB90000000000000000000000000000000000075 +:10EBA0000000000000000000000000000000000065 :10EBB0000000000000000000000000000000000055 :10EBC0000000000000000000000000000000000045 :10EBD0000000000000000000000000000000000035 -:10EBE00004000000000000000000000840000000D9 -:10EBF00000000000100000000800090009000800E3 -:10EC00008000898403008085890080A080208000A6 -:10EC100000000000000000000000210000000000D3 -:10EC20000000030000000000080041000000000098 -:10EC3000000000100000000000000010000800109C +:10EBE0000000000000000000000000000000000025 +:10EBF0000000000000000000000000000000000015 +:10EC00000000000000000000000000000000000004 +:10EC100000000000000000000000000000000000F4 +:10EC200000000000000000000000000000000000E4 +:10EC300000000000000000000000000000000000D4 :10EC400000000000000000000000000000000000C4 -:10EC500000000000030003000300000000000900A2 -:10EC600005000000000000080021820000000000F4 -:10EC70000000100000001008080000000000000064 -:10EC8000000082050021820000400000000000001A -:10EC900000008200400000000000080000000000AA -:10ECA00000400000000000000000000082000000A2 +:10EC500000000000000000000000000000000000B4 +:10EC600000000000000000000000000000000000A4 +:10EC70000000000000000000000000000000000094 +:10EC80000000000000000000000000000000000084 +:10EC90000000000000000000000000000000000074 +:10ECA0000000000000000000000000000000000064 :10ECB0000000000000000000000000000000000054 -:10ECC000000000000000080008000800000000002C -:10ECD0000000000000000000000000000000000034 -:10ECE00000000000009000A00000000400000000F0 +:10ECC0000000000000000000000000000000000044 +:10ECD000000000000008000000000010000000001C +:10ECE0000000000010000000000000001000000004 :10ECF0000000000000000000000000000000000014 -:10ED0000000000000000100000000084000000006F +:10ED00000000000000000000000000000000000003 :10ED100000000000000000000000000000000000F3 :10ED200000000000000000000000000000000000E3 :10ED300000000000000000000000000000000000D3 -:10ED40000000004000000000000000000000000083 -:10ED500000000000000000000000000000000004AF -:10ED6000000000000000000000000008000000009B -:10ED70000000000000000000080008000000C000C3 -:10ED8000C000A00000000000000082800000000021 -:10ED900000000000000000000800820000000000E9 -:10EDA00000000000000000000000820000000000E1 +:10ED400000000000000000000000000000000000C3 +:10ED500000000000000000000000000000000000B3 +:10ED600000000000000000000000000000000000A3 +:10ED70000000000000000000000000000000000093 +:10ED80000000000000000000000000000000000083 +:10ED90000000000000000000000000000000000073 +:10EDA0000000000000000000000000000000000063 :10EDB0000000000000000000000000000000000053 :10EDC0000000000000000000000000000000000043 :10EDD0000000000000000000000000000000000033 -:10EDE0000000000000000000000000880400002077 +:10EDE0000000000020000000000000000000000003 :10EDF0000000000000000000000000000000000013 -:10EE000000000004218840C0030400000304030044 -:10EE10000900400811080000000000000300000085 +:10EE00000000000000000000000000000000000002 +:10EE100000000000000000000000000000000000F2 :10EE200000000000000000000000000000000000E2 -:10EE30000000000011900088080000082108001060 -:10EE400000100000000000000000000000000000B2 +:10EE300000000000000000000000000000000000D2 +:10EE400000000000000000000000000000000000C2 :10EE500000000000000000000000000000000000B2 :10EE600000000000000000000000000000000000A2 -:10EE70000000000000000000000000002000100062 -:10EE80000000000800000000000001000100000078 -:10EE90000000000800210008000800001000000029 -:10EEA0000800000000210000000000000000000039 -:10EEB000000000000000080000000000000000004A +:10EE70000000000000000000000000000000000092 +:10EE80000000000000000000000000000000000082 +:10EE90000000000000000000000000000000000072 +:10EEA0000000000000000000000000000000000062 +:10EEB0000000000000000000000000000000000052 :10EEC0000000000000000000000000000000000042 :10EED0000000000000000000000000000000000032 :10EEE0000000000000000000000000000000000022 :10EEF0000000000000000000000000000000000012 -:10EF000000000000000000000000000020002000C1 +:10EF00000000000000000000000000000000000001 :10EF100000000000000000000000000000000000F1 :10EF200000000000000000000000000000000000E1 -:10EF30000000004000000000000000000000000091 -:10EF400000000004000000000000000000000000BD +:10EF300000000000000000000000000000000000D1 +:10EF400000000000000000000000000000000000C1 :10EF500000000000000000000000000000000000B1 -:10EF6000000000000000000400000000000000C0DD -:10EF7000001100000000000000000000000001A0DF -:10EF800000000000000400000000000000000082FB -:10EF90000082008400C0000000000008008400001F +:10EF600000000000000000000000000000000000A1 +:10EF70000000000000000000000000000000000091 +:10EF80000000000000000000000000000000000081 +:10EF90000000000000000000000000000000000071 :10EFA0000000000000000000000000000000000061 :10EFB0000000000000000000000000000000000051 :10EFC0000000000000000000000000000000000041 :10EFD0000000000000000000000000000000000031 :10EFE0000000000000000000000000000000000021 -:10EFF00000110004000500020000000000000000F5 -:10F000001180000008000000000000000000000067 -:10F010000000008000000000000000000000000070 +:10EFF0000000000000000000000000000000000011 +:10F000000000000000000000000000000000000000 +:10F0100000000000000000000000000000000000F0 :10F0200000000000000000000000000000000000E0 :10F0300000000000000000000000000000000000D0 :10F0400000000000000000000000000000000000C0 :10F0500000000000000000000000000000000000B0 :10F0600000000000000000000000000000000000A0 :10F070000000000000000000000000000000000090 -:10F08000000000100021000000000000000000004F -:10F09000000080090040000900800000000000001E -:10F0A00000000000000000000000800000000000E0 -:10F0B0008080000000000000000000000000000050 +:10F080000000000000000000000000000000000080 +:10F090000000000000000000000000000000000070 +:10F0A0000000000000000000000000000000000060 +:10F0B0000000000000000000000000000000000050 :10F0C0000000000000000000000000000000000040 :10F0D0000000000000000000000000000000000030 :10F0E0000000000000000000000000000000000020 -:10F0F0000000000000000800000000000000000008 -:10F1000000000000000100000000000000000000FE -:10F11000000000000200C00100000090200000007C -:10F120000000840000000000000000000200100049 -:10F13000000090040000000000000000000000003B +:10F0F0000000000000000000000000000000000010 +:10F1000000000000000000000000000000000000FF +:10F1100000000000000000000000000000000000EF +:10F1200000000000000000000000000000000000DF +:10F1300000000000000000000000000000000000CF :10F1400000000000000000000000000000000000BF :10F1500000000000000000000000000000000000AF :10F16000000000000000000000000000000000009F -:10F1700000000000000000C00100012000000000AD +:10F17000000000000000000000000000000000008F :10F18000000000000000000000000000000000007F -:10F1900000000000000040C0020090028400000057 -:10F1A00000000008008400000000000000000000D3 +:10F19000000000000000000000000000000000006F +:10F1A000000000000000000000000000000000005F :10F1B000000000000000000000000000000000004F :10F1C000000000000000000000000000000000003F :10F1D000000000000000000000000000000000002F :10F1E000000000000000000000000000000000001F -:10F1F00000000000000000000000200002000000ED +:10F1F000000000000000000000000000000000000F :10F2000000000000000000000000000000000000FE -:10F210000000000000000000800000008080090065 +:10F2100000000000000000000000000000000000EE :10F2200000000000000000000000000000000000DE :10F2300000000000000000000000000000000000CE :10F2400000000000000000000000000000000000BE :10F2500000000000000000000000000000000000AE :10F26000000000000000000000000000000000009E -:10F270000000000000000000000021402102088082 -:10F2800000000000000000000000800000020000FC -:10F2900000000000000000000000000080090000E5 -:10F2A000000000000002000000000000000000005C -:10F2B000000000000010000000000000000000003E +:10F27000000000000000000000000000000000008E +:10F28000000000000000000000000000000000007E +:10F29000000000000000000000000000000000006E +:10F2A000000000000000000000000000000000005E +:10F2B000000000000000000000000000000000004E :10F2C000000000000000000000000000000000003E :10F2D000000000000000000000000000000000002E :10F2E000000000000000000000000000000000001E -:10F2F000000000000000000000000000C10100004C -:10F300000040880000000000000000000800A0008D -:10F310000000000000000000000000001000A0003D -:10F320000000000020000000000084000000000039 +:10F2F000000000000000000000000000000000000E +:10F3000000000000000000000000000000000000FD +:10F3100000000000000000000000000000000000ED +:10F3200000000000000000000000000000000000DD :10F3300000000000000000000000000000000000CD :10F3400000000000000000000000000000000000BD :10F3500000000000000000000000000000000000AD :10F36000000000000000000000000000000000009D -:10F37000000000000000000000000000000000820B -:10F380000000070000000000000000000000410035 -:10F3900000E0070000000000000000000000600620 -:10F3A00000E0070000000006000007000000000069 -:10F3B0000000000000000006000007000000000040 +:10F37000000000000000000000000000000000008D +:10F38000000000000000000000000000000000007D +:10F39000000000000000000000000000000000006D +:10F3A000000000000000000000000000000000005D +:10F3B000000000000000000000000000000000004D :10F3C000000000000000000000000000000000003D :10F3D000000000000000000000000000000000002D :10F3E000000000000000000000000000000000001D :10F3F000000000000000000000000000000000000D -:10F400003C3C000000C300C30000000000000000FE -:10F4100000FFFFFF000000000000000000000000EF -:10F420000000000000C300C30000C3C300FF0000D1 +:10F4000000000000000000000000000000000000FC +:10F4100000000000000000000000000000000000EC +:10F4200000000000000000000000000000000000DC :10F4300000000000000000000000000000000000CC :10F4400000000000000000000000000000000000BC :10F4500000000000000000000000000000000000AC :10F46000000000000000000000000000000000009C :10F47000000000000000000000000000000000008C -:10F4800000003C3C000000C300C30000000000007E -:10F49000000000FF0000000000000000000000006D -:10F4A00000000000FF0000C300C30000C3C300FF52 +:10F48000000000000000000000000000000000007C +:10F49000000000000000000000000000000000006C +:10F4A000000000000000000000000000000000005C :10F4B000000000000000000000000000000000004C :10F4C000000000000000000000000000000000003C :10F4D000000000000000000000000000000000002C :10F4E000000000000000000000000000000000001C :10F4F000000000000000000000000000000000000C -:10F50000000000000000FF000000000000000000FC -:10F5100000000000FFFF3C3C000000000000000075 -:10F52000000000002F000F003030303003030303D1 -:10F5300000003C3C00000000000000000000000053 -:10F540003F3F3030000000000000000000000000DD +:10F5000000000000000000000000000000000000FB +:10F5100000000000000000000000000000000000EB +:10F5200000000000000000000000000000000000DB +:10F5300000000000000000000000000000000000CB +:10F5400000000000000000000000000000000000BB :10F5500000000000000000000000000000000000AB :10F56000000000000000000000000000000000009B :10F57000000000000000000000000000000000008B -:10F580000000000000000000FF000F0F0F0F000040 -:10F59000000000000000FFFF3C3C000000000000F5 -:10F5A0000000000000002F2F0F0F30303030030319 -:10F5B000030300003C3C00000000000000000000CD -:10F5C00000003F3F3030000000000000000000005D +:10F58000000000000000000000000000000000007B +:10F59000000000000000000000000000000000006B +:10F5A000000000000000000000000000000000005B +:10F5B000000000000000000000000000000000004B +:10F5C000000000000000000000000000000000003B :10F5D000000000000000000000000000000000002B :10F5E000000000000000000000000000000000001B :10F5F000000000000000000000000000000000000B -:10F6000000000000000000000061002E000D00005E -:10F6100000000000000000000065400F800D0000A9 -:10F6200000000000000000000061002E800D0000BE -:10F6300000000028000000000000000000000000A2 -:10F6400000000028000001A00000000000000000F1 +:10F6000000000000000000000000000000000000FA +:10F6100000000000000000000000000000000000EA +:10F6200000000000000000000000000000000000DA +:10F6300000000000000000000000000000000000CA +:10F6400000000000000000000000000000000000BA :10F6500000000000000000000000000000000000AA :10F66000000000000000000000000000000000009A :10F67000000000000000000000000000000000008A -:10F68000000000000000000000000000000F00006B +:10F68000000000000000000000000000000000007A :10F69000000000000000000000000000000000006A :10F6A000000000000000000000000000000000005A :10F6B000000000000000000000000000000000004A @@ -114570,7 +114570,7 @@ :10F6D000000000000000000000000000000000002A :10F6E000000000000000000000000000000000001A :10F6F000000000000000000000000000000000000A -:10F700000000000000000000000000000000000FEA +:10F7000000000000000000000000000000000000F9 :10F7100000000000000000000000000000000000E9 :10F7200000000000000000000000000000000000D9 :10F7300000000000000000000000000000000000C9 @@ -114578,8 +114578,8 @@ :10F7500000000000000000000000000000000000A9 :10F760000000000000000000000000000000000099 :10F770000000000000000000000000000000000089 -:10F7800000000000000000000000000000001C0C51 -:10F790005F0F0000000000000000000000000000FB +:10F780000000000000000000000000000000000079 +:10F790000000000000000000000000000000000069 :10F7A0000000000000000000000000000000000059 :10F7B0000000000000000000000000000000000049 :10F7C0000000000000000000000000000000000039 @@ -114587,7 +114587,7 @@ :10F7E0000000000000000000000000000000000019 :10F7F0000000000000000000000000000000000009 :10F8000000000000000000000000000000000000F8 -:10F810000C0C0F0F000000000000000000000000B2 +:10F8100000000000000000000000000000000000E8 :10F8200000000000000000000000000000000000D8 :10F8300000000000000000000000000000000000C8 :10F8400000000000000000000000000000000000B8 @@ -114595,194 +114595,194 @@ :10F860000000000000000000000000000000000098 :10F870000000000000000000000000000000000088 :10F880000000000000000000000000000000000078 -:10F89000000010002000000000412000000088004F -:10F8A0000000880000002000200000002000100060 -:10F8B00000002000200000000000200000002000C8 -:10F8C00010002000000020002000C0000000000008 -:10F8D00000000002100020000000080020000000CE -:10F8E000200000002000028020002000880000008E -:10F8F000000000020002200088002000200000001C -:10F900002000000020002000200040000000000037 -:10F910000000000040000000000040000000000067 -:10F92000400009000000000000400000000000004E -:10F930004000000000000082000000020000000201 -:10F940004090000004821000000000000000000051 -:10F950004000400000000000009000008000000017 -:10F9600000000000000000008040000000000000D7 -:10F970000000000200010000000000000000000084 -:10F980000000000200000000000000000000000075 -:10F990000000000000000000000000000000000067 +:10F890000000000000000000000000000000000068 +:10F8A0002000000000000000000000000000000038 +:10F8B0000000000000000000000000000000000048 +:10F8C0002000000000000000000000000000000018 +:10F8D0000000000000000000000000000000000028 +:10F8E00000002000000000000000400000000000B8 +:10F8F0000000000000000000000000000000000008 +:10F9000000002000000000000000200000000100B6 +:10F9100000000000000000000000000000000000E7 +:10F9200000000000000000000000000000000000D7 +:10F9300000000000000000000000000000000000C7 +:10F9400000000000000000000000000000000000B7 +:10F9500000000000000000000000000000000000A7 +:10F960000000000000000000000000000000000097 +:10F970000000000000000000000000000000000087 +:10F980000000000000000000000000000000000077 +:10F990001000000000000000000000000000000057 :10F9A0000000000000000000000000000000000057 -:10F9B000000000000009000000000000000000003E +:10F9B0000000000000000000000000000000000047 :10F9C0000000000000000000000000000000000037 -:10F9D00000000000000000000000000000000040E7 -:10F9E000000000000000000000800080088000840B -:10F9F0000000000000000000000000000000000007 -:10FA000000000000000000000800000000000000EE -:10FA100000000000000000000008000800080008C6 -:10FA200000000008000800000000000800080000B6 -:10FA3000000000000008000000080008000800089E -:10FA4000000000080084000000080008000800080A -:10FA5000000000000008000000000008008400080A -:10FA600000080008000800000000002000049110B9 -:10FA70000021000000000008000000080008000845 -:10FA8000000840080008000000008000000000009E -:10FA90000000008400000008000000210400400075 -:10FAA00088210002000000000000000800000000A3 -:10FAB0008808000004000000000000008800A0008A -:10FAC00004004000040084009000000000000000DA -:10FAD0000000000000000005000000000000000021 -:10FAE000000000000000820040000400000400202C -:10FAF0000004A0000005000000000000000000005D -:10FB00000000000000000000001000100041000094 -:10FB10004000000000002000400000000004000041 -:10FB200000000000000403000000000000000000CE -:10FB3000000000000000000000000000090040007C -:10FB400000000000000800000000000000000000AD -:10FB50000000000000000000000000000000008421 -:10FB60000004000000000000000000000000000190 -:10FB70000001008900000084000000000000000077 +:10F9D0000000000000000000000000000000000027 +:10F9E0000000000000000000000000000000000017 +:10F9F0000000000000000000000400000000000003 +:10FA000000000000000000000000000000000000F6 +:10FA100000040000000000000000000000000000E2 +:10FA200000000000000000000000000000000000D6 +:10FA300000000000000000000000000000000000C6 +:10FA400000000000000000000000000000000000B6 +:10FA500000000000000000000000000000000000A6 +:10FA60000000000000000000000000000000000096 +:10FA70000000000000000000000000000000000482 +:10FA8000000000000008000800080000000000005E +:10FA900000840000000000000000000000000000E2 +:10FAA0000000000000000000000000000000000056 +:10FAB0000000000000000000000000000000000046 +:10FAC0000000000000000000000000000000000036 +:10FAD0000000000000000000000000000000000026 +:10FAE0000000000000000000000000000000000016 +:10FAF0000000000000000000000000000000000006 +:10FB000000020000000000000000000000000000F3 +:10FB100000000000000000000000000000000000E5 +:10FB200000000000000000000000000000000000D5 +:10FB300000000000000000000000000000000000C5 +:10FB400000000000000000000000000000000000B5 +:10FB500000000000000000000000000000000000A5 +:10FB60000000000000000000000000000000000095 +:10FB70000000000000000000000000000000000085 :10FB80000000000000000000000000000000000075 -:10FB9000000000001000000000000000000008004D -:10FBA0000000000000000000000000400000000015 -:10FBB000000000000000000000000000000000093C -:10FBC000000000000009000000000000000000002C -:10FBD0000000000000008400080000000000000099 -:10FBE0000800000000000100080000000000000004 -:10FBF000000000001080100008000000000010004D -:10FC00000821000000001000100000000000C000EB -:10FC100008000000000008000800C0000810820072 -:10FC200000000000000000001000000000000000C4 -:10FC300021000000000000000000000000000000A3 -:10FC40000000000000000000000040000000000074 +:10FB9000000000000000090000000000000000005C +:10FBA0000000000000000000000000000000000055 +:10FBB0000000000000000000000000000000000045 +:10FBC0000000000000000000000000000000000035 +:10FBD0000000000000000000000000000000000025 +:10FBE0000000000000000000000000000000000015 +:10FBF0000000000000000000000000000000000005 +:10FC000000000000000000000000000000000000F4 +:10FC100000000000000000000000000000000000E4 +:10FC2000000000000000000040000000080000008C +:10FC30004000000000000000000000000000000084 +:10FC400000000000000000000000000000000000B4 :10FC500000000000000000000000000000000000A4 -:10FC6000000000A000080000200083000000000049 -:10FC70002100000000000020000000000000000043 -:10FC8000000000000000000003000300000000006E -:10FC90000000800000001000030000000000800150 +:10FC6000000000000000000800000000000000008C +:10FC700000080000000000A0000800000000008252 +:10FC8000000000000000000000080000000000006C +:10FC9000100800000000000000A00000000000822A :10FCA000000800000000000000000000000000004C :10FCB0000000000000000000000000000000000044 :10FCC0000000000000000000000000000000000034 -:10FCD000000000000000000000000000000008001C +:10FCD0000000000000000000000000000000000024 :10FCE0000000000000000000000000000000000014 -:10FCF0000000A00000000000000000000000000064 -:10FD000000000000100000000000000000000000E3 -:10FD10000000820000000000400000000020000001 -:10FD200000000000409000000090009000000000E3 -:10FD30000000000000000000009011000800080012 -:10FD400000000004040000000000000000000000AB -:10FD50000020100000000000000000000000000073 +:10FCF0000000000000000000000000000000000004 +:10FD000000000000000000080000000000000000EB +:10FD100000000000000000000000000000002000C3 +:10FD200000000000000000000000000000000000D3 +:10FD300000000000000000000000000000000000C3 +:10FD400000000000000000000000000000000000B3 +:10FD500000000000000000000000000000000000A3 :10FD60000000000000000000000000000000000093 -:10FD7000042000000020000000000000000000003F +:10FD70000000000000000000000000000000000083 :10FD80000000000000000000000000000000000073 :10FD90000000000000000000000000000000000063 -:10FDA00004000000000000000000000000008400CB +:10FDA0000000000000000000000000000000000053 :10FDB0000000000000000000000000000000000043 -:10FDC000000008000000000000000000000000002B +:10FDC0000000000000000000000000000000000033 :10FDD0000000000000000000000000000000000023 -:10FDE000000000000000000000000000002188006A -:10FDF00000210000000008000000000000000000DA -:10FE00000008000000210021002100000000000087 +:10FDE0000000000000000000000000000000000013 +:10FDF0000000000000000000000000000000000003 +:10FE000000000000000000000000000000000000F2 :10FE100000000000000000000000000000000000E2 -:10FE20008200000000000000000000000000000050 +:10FE200000000000000001000000000000000000D1 :10FE300000000000000000000000000000000000C2 :10FE400000000000000000000000000000000000B2 :10FE500000000000000000000000000000000000A2 :10FE60000000000000000000000000000000000092 -:10FE70000000000000000000000000000000000082 +:10FE70000000000000080008000000000000000072 :10FE80000000000000000000000000000000000072 -:10FE90000000000000000000000000000000000062 -:10FEA0000000000000000000000000000000000052 +:10FE90000000000000080008000000000000000052 +:10FEA0000000000000000000400000000000000012 :10FEB0000000000000000000000000000000000042 :10FEC0000000000000000000000000000000000032 :10FED0000000000000000000000000000000000022 :10FEE0000000000000000000000000000000000012 -:10FEF0000000000001000000000000000000000001 -:10FF000001000000000000000000000000000000F0 +:10FEF0000000000000000000000000000000000002 +:10FF000000000000000000000000000000000000F1 :10FF100000000000000000000000000000000000E1 -:10FF20000000000000000000000090000000000041 +:10FF200000000000000000000200000000000000CF :10FF300000000000000000000000000000000000C1 :10FF400000000000000000000000000000000000B1 :10FF500000000000000000000000000000000000A1 :10FF60000000000000000000000000000000000091 -:10FF70000000080000001100000008000000000060 -:10FF80000000080000000000000000000000000069 -:10FF90000000000000000000000000000000400021 -:10FFA00000001100000000000000080080000000B8 +:10FF70000000000000000000000000000000000081 +:10FF80000000000000000000000000000000000071 +:10FF90000000000000000000000000000000000061 +:10FFA0000000000000000000080000000000000049 :10FFB0000000000000000000000000000000000041 :10FFC0000000000000000000000000000000000031 :10FFD0000000000000000000000000000000000021 :10FFE0000000000000000000000000000000000011 -:10FFF00080008000000000000008002100000000D8 +:10FFF0000000000000000000000000000000000001 :02000004001CDE -:10000000002108808000048400000000000000003F +:1000000000000000000000000000000000000000F0 :1000100000000000000000000000000000000000E0 -:100020000000000000C1000000000000000000808F +:1000200000000000000000000000000000000000D0 :1000300000000000000000000000000000000000C0 :1000400000000000000000000000000000000000B0 :1000500000000000000000000000000000000000A0 :100060000000000000000000000000000000000090 -:100070000000080002000000000000010000000075 -:100080000000000101A0A00000A00000000000008E +:100070000000000000000000000000000000000080 +:100080000000000000000000000000000000000070 :100090000000000000000000000000000000000060 -:1000A00000000000000000900000000000000000C0 -:1000B00000A00000000000000000000000000000A0 +:1000A0000000000000000000000000000000000050 +:1000B0000000000000000000000000000000000040 :1000C0000000000000000000000000000000000030 :1000D0000000000000000000000000000000000020 :1000E0000000000000000000000000000000000010 -:1000F00000000000000000000000010000000000FF -:100100000000000000000000A00400C0000000018A +:1000F0000000000000000000000000000000000000 +:1001000000000000000000000000000000000000EF :1001100000000000000000000000000000000000DF -:10012000000000000000000000000000000100C00E -:10013000000000910000000000000000000000002E +:1001200000000000000000000000000000010001CD +:1001300000000001000000000000000000000000BE :1001400000000000000000000000000000000000AF :10015000000000000000000000000000000000009F :10016000000000000000000000000000000000008F -:10017000000000000000000000000000100000006F -:1001800000000000000000090000800400000009D9 -:100190000010000800000000000000000000000047 -:1001A000000000000000000000000000000000103F -:1001B00000000000008400000000000000000000BB +:10017000000000000000000000000000000000007F +:10018000000000000000000000000000000000006F +:10019000000000000000000000000000000000005F +:1001A0000000000000000000000000000000000847 +:1001B00000080008004100000000000000000000EE :1001C000000000000000000000000000000000002F :1001D000000000000000000000000000000000001F :1001E000000000000000000000000000000000000F :1001F00000000000000000000000000000000000FF -:10020000000000000000000000000009090080005C +:1002000000000000000000000000000000000000EE :1002100000000000000000000000000000000000DE -:10022000000000000000000000008000000000004E -:1002300000000008000000000000000000000000B6 +:1002200000000000000000000000000000000000CE +:1002300000000000000000000000000000000000BE :1002400000000000000000000000000000000000AE :10025000000000000000000000000000000000009E :10026000000000000000000000000000000000008E -:1002700000000000000000000000000000000088F6 -:100280000000020000000000400000000001040027 -:100290000800000000000000000000000000000056 -:1002A0000000000000000000000004000200000048 +:10027000000000000000000000000000000000007E +:10028000000000000000000000000000000000006E +:10029000000000000000000000000000000000005E +:1002A000000000000000000000000000000000004E :1002B000000000000000000000000000000000003E :1002C000000000000000000000000000000000002E :1002D000000000000000000000000000000000001E :1002E000000000000000000000000000000000000E -:1002F000000000000000000000000000000000E01E -:1003000000000000000000E0000000000000000805 -:10031000400000000000000000000000000000009D -:10032000000000000000000000000000000000E0ED -:1003300000000000600000E0070000000000000076 +:1002F00000000000000000000000000000000000FE +:1003000000000000000000000000000000000000ED +:1003100000000000000000000000000000000000DD +:1003200000000000000000000000000000000000CD +:1003300000000000000000000000000000000000BD :1003400000000000000000000000000000000000AD :10035000000000000000000000000000000000009D :10036000000000000000000000000000000000008D :10037000000000000000000000000000000000007D -:100380000000000000003C3CFFFF00000000303097 -:100390003030FF00000000000000000000000000FE -:1003A0000000000000000000000000000000FF004E -:1003B00066660000000000000000FFFF0F0F000055 +:10038000000000000000000000000000000000006D +:10039000000000000000000000000000000000005D +:1003A000000000000000000000000000000000004D +:1003B000000000000000000000000000000000003D :1003C000000000000000000000000000000000002D :1003D000000000000000000000000000000000001D :1003E000000000000000000000000000000000000D :1003F00000000000000000000000000000000000FD -:1004000000000000000000003C3C00000000000074 -:1004100030303030FF00000000000000000000001D +:1004000000000000000000000000000000000000EC +:1004100000000000000000000000000000000000DC :1004200000000000000000000000000000000000CC -:10043000FF0066660000000000000000F0F0000011 +:1004300000000000000000000000000000000000BC :1004400000000000000000000000000000000000AC :10045000000000000000000000000000000000009C :10046000000000000000000000000000000000008C @@ -114795,49 +114795,49 @@ :1004D000000000000000000000000000000000001C :1004E000000000000000000000000000000000000C :1004F00000000000000000000000000000000000FC -:100500000000000000000000CFCFCFCF00000000AF -:100510000000000000000000FF00FF0000000000DD +:1005000000000000000000000000000000000000EB +:1005100000000000000000000000000000000000DB :1005200000000000000000000000000000000000CB :1005300000000000000000000000000000000000BB :1005400000000000000000000000000000000000AB :10055000000000000000000000000000000000009B :10056000000000000000000000000000000000008B :10057000000000000000000000000000000000007B -:10058000000000000000000000000C0C0C0C00003B -:1005900000000000000000000000FF00FF0000005D +:10058000000000000000000000000000000000006B +:10059000000000000000000000000000000000005B :1005A000000000000000000000000000000000004B :1005B000000000000000000000000000000000003B :1005C000000000000000000000000000000000002B :1005D000000000000000000000000000000000001B :1005E000000000000000000000000000000000000B :1005F00000000000000000000000000000000000FB -:10060000000000000000000000610007000D000075 -:1006100000610007000D000000610A0D050100A146 -:1006200000610006000D0000000000000000000056 -:10063000000000000000000000610007000D000045 -:100640000061000F800920A00000000000000000F1 +:1006000000000000000000000000000000000000EA +:1006100000000000000000000000000000000000DA +:1006200000000000000000000000000000000000CA +:1006300000000000000000000000000000000000BA +:1006400000610006000D0000000000000000000036 :10065000000000000000000000000000000000009A :10066000000000000000000000000000000000008A :10067000000000000000000000000000000000007A :10068000000000000000000000000000000000006A -:10069000000000000000000000000F0F0F0F003CE2 -:1006A000003C0000000030F330F3000000000000C8 +:10069000000000000000000000000000000000005A +:1006A000000000000000000000000000000000004A :1006B000000000000000000000000000000000003A -:1006C0000000000000003C3CFFFF000000000000B4 +:1006C00000000000000030BA00AA00000000000096 :1006D000000000000000000000000000000000001A :1006E000000000000000000000000000000000000A :1006F00000000000000000000000000000000000FA :1007000000000000000000000000000000000000E9 :1007100000000000000000000000000000000000D9 -:10072000003C003C0000000030F330F3000000000B +:1007200000000000000000000000000000000000C9 :1007300000000000000000000000000000000000B9 -:1007400000000000000000003C3CFFFF0000000033 +:10074000000000000000000000AA30BA0000000015 :100750000000000000000000000000000000000099 :100760000000000000000000000000000000000089 :100770000000000000000000000000000000000079 :100780000000000000000000000000000000000069 :100790000000000000000000000000000000000059 -:1007A00000000000F0F00000000000000000000069 +:1007A0000000000000000000000000000000000049 :1007B0000000000000000000000000000000000039 :1007C0000000000000000000000000000000000029 :1007D0000000000000000000000000000000000019 @@ -114845,99 +114845,99 @@ :1007F00000000000000000000000000000000000F9 :1008000000000000000000000000000000000000E8 :1008100000000000000000000000000000000000D8 -:10082000000000000000F0F00000000000000000E8 +:1008200000000000000000000000000000000000C8 :1008300000000000000000000000000000000000B8 :1008400000000000000000000000000000000000A8 -:10085000100040000000A000000000000000200088 -:100860000400000040000000000040000000000004 -:1008700000000000000020000000880000002000B0 -:100880002002880000000000C000200000000000DE -:10089000000300000000000020000000200088008D -:1008A00000002000100000008400200088000000EC -:1008B000880000000000040020000000200000006C -:1008C00084000000000000002000200000008400E0 -:1008D0008400400000004100004000020040004051 -:1008E00000000010210000000002000000000000D5 -:1008F0000000000020000000000040000000000098 -:1009000000000090000000840000000000000000D3 -:100910000400000000000000000000004000000093 +:100850000000000000000000000000000000000098 +:100860000000000000000000000000000000000088 +:100870000000000000000000000000000000100068 +:100880000000000000000000000000000000000068 +:100890000003000000000000000000000000000055 +:1008A0002000000000000000000000000000000028 +:1008B0001000000000000000000000000000000028 +:1008C0002000000000000000840000000000000084 +:1008D0001000000000000000000000000000000008 +:1008E0000000000000000000000000000000000008 +:1008F00000000000000000000000000000000000F8 +:1009000000000000000000000000000000000000E7 +:1009100000000000000000000000000000000000D7 :1009200000000000000000000000000000000000C7 :1009300000000000000000000000000000000000B7 -:100940000000000020002100000000000000000462 +:1009400000000000000000000000000000000000A7 :100950000000000000000000000000000000000097 -:100960000000000000100000000000000000000077 -:1009700000000004000082000000020000000000EF +:100960000000000000000000000000000000000087 +:100970000000200000000000000000000000000057 :100980000000000000000000000000000000000067 -:1009900000008204000000000000000000000000D1 -:1009A000000000000410000000000000840000406F -:1009B0000000000000040000000000000000000033 +:100990000000200000000000000000000000000037 +:1009A0000000000000000000000000000000000047 +:1009B0000000100021000000000000000000000006 :1009C0000000000000000000000000000000000027 -:1009D000000000000004000000000000000000080B -:1009E00000000008000800000000000000000008EF -:1009F00000080000000100840084000000000008DE -:100A0000000000080008000000000002000000884C -:100A1000008800000001000000000000000000004D -:100A2000000800000088000800000000000000002E -:100A30000000000000000085000000000000000031 -:100A40000008000000000508000000000000008809 -:100A5000000000000000000100088808002140009C -:100A6000000000000805002100000004A021000093 -:100A70000000C005040040210021082100210000E1 -:100A80000000880084008404400990030021400095 -:100A90000000040000000000000000000011002120 -:100AA000000000000000000000000004000000043E -:100AB000000000000000000000000000000800210D -:100AC000000000110000000000040000000000040D -:100AD0000000000000000000000004000000000012 -:100AE0000000000000000000000000040000000002 -:100AF00000000000000000000000000000000500F1 -:100B00000000000000840000000040000000000021 -:100B10000000008400000000000000000000000051 +:1009D000000010004100000000840000000000083A +:1009E0000000000000000000000000000000000007 +:1009F000000000008000000000000000000000086F +:100A000000000000000000000000000000000000E6 +:100A100000000088800000000000000000000000CE +:100A200000080000000800000000000000000000B6 +:100A3000000000008000C000000000000000000076 +:100A4000000800000084000000000000000800888A +:100A5000000800088000A0080021002100210000FB +:100A60000000000000210000000400090004000054 +:100A7000000000000008000000000000000000006E +:100A8000000000000008000000000000000000005E +:100A90000000000000000000000000000000000056 +:100AA0000011000000000000000000000000000035 +:100AB00000000021000000210000000800210021AA +:100AC0000008002100210003000000000021002197 +:100AD00000080021002100200000000000000000AC +:100AE0000000000000000000000000000000000006 +:100AF00000000000000000000000000000000000F6 +:100B000000000000000000000000000000000000E5 +:100B100000000000000000000000000000000000D5 :100B200000000000000000000000000000000000C5 :100B300000000000000000000000000000000000B5 -:100B400000000000000000000000000000000000A5 -:100B50000000000000000000000005000000000090 -:100B600000040004000000000040000040000000FD -:100B7000000000000000C00000000000820410001F -:100B8000000000040000000000000000820040009F -:100B90000800000000000000C0000000000082000B -:100BA0008200000000000000C00000000800820079 -:100BB0008200000000000800080000000000820021 -:100BC000820000001000820082000000C00082004D -:100BD0008200A000820082008200000082000000EB -:100BE00000000000000000000010000000100000E5 +:100B4000000000000000000000080000000000009D +:100B50000000000000000000000000000000000095 +:100B60001000000000000000000000000000000075 +:100B70000000000000000000000000000000000075 +:100B80000000000000000000000000000000000065 +:100B90000000000000000000000000000000000055 +:100BA0000000000000000000000000000000000045 +:100BB000000000000000000000000000000800002D +:100BC0000000000000000000000000000000000025 +:100BD000000000000000000000000000000800000D +:100BE0000000000000000000000000000000000005 :100BF00000000000000000000000000000000000F5 :100C000000000000000000000000000000000000E4 :100C100000000000000000000000000000000000D4 :100C200000000000000000000000000000000000C4 -:100C300000000800000000000000000000000000AC +:100C300000000000000000000000000000000001B3 :100C400000000000000000000000000000000000A4 -:100C50004000000000000000000000000000000054 -:100C60000000000000000000000000210000000063 -:100C7000000000004008000000000000000000002C -:100C8000000000000000000000000005000000005F -:100C90000000000000200400000500000000000823 -:100CA00000000000000088000000000000000000BC -:100CB00000004000400000110000000000000000A3 -:100CC0000021A00000000000000000000000000063 -:100CD000C000400000000011000000000000000003 -:100CE00000004000000005000000000000000000BF -:100CF00004000000000005000020000000000000CB -:100D00000000400000000000110000000000000092 -:100D10000082000000000000000000000000000051 -:100D200000000000009000000300008400000000AC -:100D300000000000000000A00000000840000000CB +:100C500000000000000000000000000000A00001F3 +:100C60000040000000000000000000000000000044 +:100C70000000000000000000000000000000000074 +:100C800000000000000000000200000090000000D2 +:100C90000000000000000000000000000000000054 +:100CA00000000000000000009000000000000000B4 +:100CB0000000000000000008000000009008000094 +:100CC0000008000000000000900000000000000884 +:100CD000000000000008000800000000900800006C +:100CE00008080000000000000000000000000000F4 +:100CF00000000000000000000000000000000000F4 +:100D000000000000000000000000000000000000E3 +:100D100000000000000000000000000000000000D3 +:100D200000000000000000000000000000000000C3 +:100D300000000000000000000000000000000000B3 :100D400000000000000000000000000000000000A3 -:100D50000000000000000000000000000000000093 -:100D60000000080000000021000000000000002139 -:100D70000800000000000000000800000002000061 -:100D8000000000000800000500000000A00082052F -:100D90000000000000000021000000000000000032 -:100DA0000000000000000021000000000000000022 -:100DB0000800820000020000000000000000C021C6 -:100DC00082000000000000000000000000000000A1 -:100DD0000800080000008400080000000000A000D7 -:100DE00008000000C000000000000000000000003B +:100D50000000000000000000000000000000009003 +:100D600000880400000000000000000000000000F7 +:100D70000000000000000000000000000000000073 +:100D80000000000000000000000000000000000063 +:100D90000000000000000000000000000000000053 +:100DA0000000000000000000000000000000000043 +:100DB0000000000000000000000000000008000823 +:100DC00000210000004100000000000000210000A0 +:100DD00000000000000000000000000000410008CA +:100DE00000210003000000000000000000000000DF :100DF00000000000000000000000000000000000F3 :100E000000000000000000000000000000000000E2 :100E100000000000000000000000000000000000D2 @@ -114946,79 +114946,79 @@ :100E400000000000000000000000000000000000A2 :100E50000000000000000000000000000000000092 :100E60000000000000000000000000000000000082 -:100E70000000000000000000000000000040000032 +:100E700000000000000000000001010000840000EC :100E80000000000000000000000000000000000062 -:100E90000000000000000000000100000040000011 +:100E900001000000000000000001000000C0000090 :100EA0000000000000000000000000000000000042 -:100EB0000000000000000000000000000800000426 -:100EC0000000000000000000000000000000000022 -:100ED000000000000000000000000000000000040E -:100EE00000000000040000000000000000000000FE -:100EF000000000000000000000001102200000803F +:100EB00000000000000000000088000000000004A6 +:100EC0000808000000000001000000000000000011 +:100ED0000000000000000000008800000000000486 +:100EE000C010000000000001000000000000000031 +:100EF0000000000000000000000000020800008068 :100F000000000000000000000000000000000000E1 -:100F10000000000000000000000011080800008030 +:100F100000004100000000000000080841000080BF :100F200000000000000000000000000000000000C1 -:100F30000000000000000000000000000011100090 -:100F40000080000000000000000000000000000021 -:100F50000000000000000000000000000811080070 -:100F60000080000000008000000000000000090078 -:100F7000000000000000000000000000020010005F -:100F800000000000800000000010000800000900C0 -:100F90000000000000000000000000000800110038 -:100FA0000080000000000000000000410000000080 -:100FB00041000010000000000000000000000200DE -:100FC000110000800000000000000000000300008D -:100FD000050000000000000000000000000002000A -:100FE000210000800000000000000000000300005D -:100FF000000000000000000000000000000082006F -:101000000988000202004000000000010001000009 -:101010000000000000000000000000000000400090 -:1010200082400010020020000000000000010000CB -:1010300000000000000100000000000000000000AF -:1010400041004088008208002000000000000000ED -:101050000000000000000000000000000000000090 -:10106000410040200002400040000000000000015C +:100F30000000000400000000000409000009110086 +:100F40000000808000000000004100000000000060 +:100F50000000000411000000004109000009110018 +:100F600000008000000000000041000000001000B0 +:100F70000000000000000000000000000800080061 +:100F8000000000000000000000000002000003005C +:100F90000000008000008000000000001000210020 +:100FA00000908000000000000000004100000000F0 +:100FB0000800000000000000100000000200110006 +:100FC0009000000009000000000000008008000000 +:100FD00008000000000000001000000011001100D7 +:100FE00090000000040000000000000080410000AC +:100FF0000000000000000000000000000000900061 +:10100000092000902008820000000000000000007D +:101010000100000000C00000200000000000880067 +:101020009008008502080200000000000001000096 +:1010300000000100000000000000000000000000AF +:10104000C000080200000000020000000000C00113 +:10105000000001000000000000000000000000008F +:10106000C000080200000100020000000000C001F2 :101070000000000000000000000000000000000070 -:101080000008000000000000000000000000000058 -:101090000000000000000000000000000000000050 -:1010A000000400000000000000000000000000003C -:1010B0000000000000000000000000000000000030 -:1010C0000000000800000000000000000000000018 -:1010D0000000000000000000000000000000000010 -:1010E00000000020000000000000000000000000E0 +:101080000020000000000000000000000000000040 +:1010900000000000C0000000000000000000000090 +:1010A000009000001000010000000000000000009F +:1010B000000000000000000000000000000000012F +:1010C0001000008800001100000000000000000176 +:1010D000000000000000000000000000000000010F +:1010E0001000008800001000000000000000000157 :1010F00000000000000000000000000000000000F0 -:10110000000000800000000000000000000000005F -:1011100000000000000000000000000000000000CF -:10112000000000800000000000000000000000003F +:1011000000000000000000000000000000000000DF +:10111000000000000000800000000000000000004F +:1011200000000000000000000800000000000000B7 :1011300000000000000000000000000000000000AF -:10114000000000000080000000000000000000001F -:10115000000000000000000000000000000000008F -:10116000000000000000000000000000000000007F -:10117000000000000000800000910000000000005E -:10118000000000000041000000040000000000001A -:10119000000000000000800000910000000000003E -:1011A000000000000041800000080000000000086E -:1011B000000000000000000000100083000000009C -:1011C000000000000000004180000002000000005C -:1011D0000000000000000000800500830000000007 -:1011E0000000000000000041800000080000000036 -:1011F00000000000000000000800001000000000D7 -:1012000000000000000000110800000100000000C4 -:1012100000000000000000000800001000000000B6 -:101220000000000000000091040000000000000029 -:10123000000000000000000000009001008300009A -:101240000000000000000000009104000000000009 -:101250000000000000000000000004000083000007 -:1012600000000000000000000091040000000000E9 -:10127000000000000000000000000000000000006E +:1011400000400004000000008500090000000000CD +:10115000004100000000000000000000000000004E +:101160000040000400000000C1000000000000007A +:10117000004100000010800000C1000000000000DD +:10118000000000000041000000020000000000001C +:10119000000000000000800000C10000000000000E +:1011A0000000000000C180000005000000000000F9 +:1011B0000000000000000008800000C100000002E4 +:1011C00080004100000000C100000002000000009B +:1011D0000000000009030008800000C100000002B8 +:1011E00080004100000000840000000200000000B8 +:1011F0000000000008030000200000400000000084 +:10120000000000000000009140000001000000000C +:101210000000000000000000400000C100000000CD +:10122000000000000000000340000001000000007A +:10123000000000000000000000012000004000004D +:101240000000020010000000004102000000000049 +:1012500000000000000000880001200000400000A5 +:101260000000020010000000004102000000000029 +:10127000000000000000011000000000000000005D :101280000000000000000000810000E000004800B5 -:10129000000000000000000000000000000000004E -:1012A0000000000000000000810000E00000480095 -:1012B00000000000000000810000000000000000AD -:1012C00000000000000000000000810000E00000BD +:10129000000000000000000000000000000000420C +:1012A0000000000000004800810000E0000048004D +:1012B00000000000000000420000000000000000EC +:1012C00000000000000000000000811200E00700A4 :1012D00048000000000000000000000000000000C6 -:1012E00000000000000000000000810000E000009D -:1012F00048000000000000000000000000000000A6 +:1012E00000000000000000000000411200E00700C4 +:1012F0000012000000000000000A000000000000D2 :1013000000000000000000000000000000000000DD :1013100000000000000000000000000000000000CD :1013200000000000000000000000000000000000BD @@ -115039,133 +115039,133 @@ :10141000000000000000000000000000DE2E747BD1 :1014200000000000000000000000000000000000BC :10143000000000000000000000000000DE2E0000A0 -:10144000747B0000000000000000000000000000AD -:101450000000000000000000000000000000DE2E80 -:10146000747B00000000000000000000000000008D -:101470000000000000000000000000000000DE2E60 +:10144000757B0000000000000000000000000000AC +:101450000000000000000000000000000000DEAE00 +:10146000757B00000000000000000000000000008C +:101470000000000000000000000000000000DEAEE0 :10148000615603400000000000000230A000000090 :10149000000000000C4000000000000002C06A864E -:1014A000615603400000000000000230A000000070 +:1014A000615603400000000000000231E00000002F :1014B000000000000C4000000000000002C06A862E -:1014C0000000615603400000000000000230A00050 +:1014C0000000612603400000000000000230A00080 :1014D0000000000000000C4000000000000002C0FE -:1014E0006A86615603400000000000000230A00040 +:1014E0006486612603400000000000000230A00076 :1014F0000000000000000C4000000000000002C0DE -:101500006A86008000802080008020800080200487 -:101510004004C0000000200000000000880000001F -:10152000880040000000200000002000880020000B -:10153000200088000000A000100010000000000043 -:101540002000000188004000200000002000000072 -:101550002000200020000000200020008800000063 -:1015600000002000200020002000000020000000DB -:1015700020002000200000002000000000000000EB -:1015800000002000002000200020102000040004A3 -:101590004001000100000000000000000000000207 -:1015A00040001000000000000000000000400000AB -:1015B000400010000000000000400000000000009B -:1015C000000000000000000000004000400000009B -:1015D0000000000240004004000000001000200055 -:1015E00000000002000000000000040010000000E5 -:1015F0000000000000000000400000004020050046 -:1016000000000000000000000000000000000000DA -:1016100000000000001000000000000000000000BA -:101620000000000000008200000002000000000036 -:1016300000000000000000000000000008000000A2 -:10164000000000000000000000000000000000009A -:101650000000000002000000000000000000020086 -:101660000000000000000200000000000000000078 +:1015000064860000000000000000000000000000F1 +:1015100000000000000000000000000000000000CB +:1015200000000000000000000000000000000000BB +:1015300000000000000000000000000000000000AB +:10154000000000000000000000000000000000009B +:10155000000000000000000000000000000000008B +:10156000000000000000000000000000000000007B +:10157000000000000005000000080000000000005E +:1015800000800000000000000000000000000000DB +:10159000000000000000000000000000000000004B +:1015A000000000000000000000000000000000003B +:1015B000000000000000000000000000000000002B +:1015C000000000000000000000000000100000000B +:1015D000000000000000000000000000000000000B +:1015E00000000000100000000000000000000000EB +:1015F00000000000000000000000000000004000AB +:101600000000400800000000000000000000000092 +:1016100000000000000000000000000000000000CA +:1016200000000000000000000000000000000000BA +:10163000000000000000100000000000000000009A +:10164000000000000000000000000000000040005A +:10165000000000000000000000000000000000008A +:10166000000000000000000000000000000000007A :10167000000000000000000000000000000000006A -:101680000000000000000000000000000000000852 -:101690000000000000000000000000020000000048 -:1016A00000000000008200080000000000000008A8 +:1016800000000000000000000084000000000000D6 +:10169000000000000000000000000000000000004A +:1016A000000000000000000000000000000000003A :1016B000000000000000000000000000000000002A -:1016C00000000000000000400000000000000000DA -:1016D00000100000000000000000000000000900F1 -:1016E00000000000000000000000000000000000FA -:1016F00000000000000000000000000000000000EA -:101700000000000000000000000090000400040041 -:1017100000000002040000000000000000000000C3 -:101720000000000000000000000040000400000075 -:101730000000400000000000400000000000000029 +:1016C000000000000000000000000000000000001A +:1016D0000000000000000000000000080000000002 +:1016E00000000000000000000000000000080000F2 +:1016F0000008000000000000000000080000008852 +:10170000000800840000000000000000000000004D +:1017100000000000000000000000000200000000C7 +:1017200000000000000000000000000000000000B9 +:1017300000000000000000000000000000000000A9 :101740000000000000000000000000000000000099 -:1017500088000000000000002000000000000000E1 -:101760000000000000000000000040000000000039 -:101770000000000000000000000000000000000069 -:101780008400000000000000840000000000000051 -:101790000000000000002000110000000000000018 -:1017A0000000000000900000400000000000000069 -:1017B00004000400000000000000000041000000E0 -:1017C0000000000000000000000000000000000019 -:1017D00000000000000000000000000000004100C8 -:1017E0000000000000000090000000000000000069 -:1017F00000000000000004000300000000000000E2 -:1018000000000000080000000000000000000000D0 -:10181000004100000041004010400040084000002E -:10182000000000000000000008000000000084002C -:1018300000000000000000000000000000000800A0 -:101840000000080000000000000000000000000090 -:101850000000000082000000A00000000000000066 -:101860000000000000000000000040000000000038 -:101870000004000000000000000000000000000064 -:1018800000000000000000000020000084040200AE -:10189000008400000000000000000000000421009F +:101750000000000000000000000000000000000089 +:101760000000000000210000000000000000002137 +:101770000000000000100008000000080010000930 +:101780000000000000004000000002000000000017 +:101790000000000021820300000021000000000082 +:1017A0000000000000000000000000000000000039 +:1017B0000000000000000000000000000000000029 +:1017C00000000004000000000020000000000000F5 +:1017D00000000000000000000000000000000010F9 +:1017E00000000008000800080000000000000000E1 +:1017F000000000000000000000000000000000A049 +:10180000000000C0000800A0000000C000000000B0 +:1018100000000000000000000000000000000000C8 +:1018200000000000000000000000000000000000B8 +:1018300000000000000000000000000000000000A8 +:101840000000000000000000000000000000000098 +:101850000000000000000000000000000000000088 +:101860000000000000000000000000000000000078 +:101870000000000000000000000000000000000068 +:101880000000000000000000000000000000000058 +:101890000000000000000000000000000000000048 :1018A0000000000000000000000000000000000038 :1018B0000000000000000000000000000000000028 :1018C0000000000000000000000000000000000018 :1018D0000000000000000000000000000000000008 -:1018E00000001000000000000000000000000000E8 +:1018E00000000000000000000000000000000000F8 :1018F00000000000000000000000000000000000E8 -:1019000000000000100000000800000000000200BD -:101910000000000000000000000000008400000043 -:1019200000000000000000000000000000000000B7 -:101930000000000000000000000000008200000025 -:10194000000000000000000000000000080000008F -:10195000000000000000000000000000000008007F +:1019000000000000000000000000000000000000D7 +:1019100000000021000000000000000000000000A6 +:101920000000000000000000002000000000000097 +:1019300000000000000000000000000000000000A7 +:101940000000000000000000000000000000000097 +:101950000000000000000000000000000000000087 :101960000000000000000000000000000000000077 :101970000000000000000000000000000000000067 -:10198000000000000000000000000000080000004F -:101990000000000040000000000000000000000007 -:1019A000000000004100009000000000000008005E -:1019B00000000020000000000000002010000000D7 -:1019C0000000000003000004000000000000000010 -:1019D00000000000000041000400000000000000C2 -:1019E0000000000000000800008408000000000063 -:1019F00000000000000000000000000000000400E3 -:101A000000000000000008000000080000000000C6 -:101A100000000000000000000000000002000020A4 +:101980000000000000000000008000000080400017 +:101990000000040000000000000000000000000043 +:1019A00000000000050020900090080000000000EA +:1019B0000000000000000000000000000090000097 +:1019C0000088000009080904000020000000000051 +:1019D000000000000000000000080000000800A057 +:1019E000000000000900000000A0000000000084CA +:1019F00000A0000000A00000000800000008001087 +:101A0000000000000000000000880010000000023C +:101A1000110800000020C00000000000C00000000D :101A200000000000000000000000000000000000B6 :101A300000000000000000000000000000000000A6 :101A40000000000000000000000000000000000096 -:101A5000000000000000000008000000000000007E +:101A50000000000000000000000000000000000086 :101A60000000000000000000000000000000000076 -:101A70000000000200000000000000000000000064 +:101A70000000000000000000002100000000000045 :101A80000000000000000000000000000000000056 :101A90000000000000000000000000000000000046 -:101AA0000000000000002100000000000000000015 -:101AB0000000000000000000000005000000200001 +:101AA0000000000000000000000000000000000036 +:101AB0000000000000000000000000000000000026 :101AC0000000000000000000000000000000000016 :101AD0000000000000000000000000000000000006 :101AE00000000000000000000000000000000000F6 :101AF00000000000000000000000000000000000E6 :101B000000000000000000000000000000000000D5 -:101B100000000000000000000000000800000000BD -:101B20000090000000000000000000000000000025 +:101B100000000000000000000000000000000000C5 +:101B200000000000000000000000000000000000B5 :101B300000000000000000000000000000000000A5 :101B40000000000000000000000000000000000095 :101B50000000000000000000000000000000000085 :101B60000000000000000000000000000000000075 :101B70000000000000000000000000000000000065 :101B80000000000000000000000000000000000055 -:101B900000000000000000000000000000800000C5 -:101BA0000000000000000008100000050000000018 +:101B90000000000000010001000000010000000042 +:101BA0000000000000000000000000000000000035 :101BB0000000000000000000000000000000000025 :101BC0000000000000000000000000000000000015 :101BD0000000000000000000000000000000000005 :101BE00000000000000000000000000000000000F5 :101BF00000000000000000000000000000000000E5 :101C000000000000000000000000000000000000D4 -:101C10000000000000000000000000000000800044 -:101C200000000000000000000000050005000000AA +:101C10000000000000000041000800020010000069 +:101C200000000000000000000000000000000000B4 :101C300000000000000000000000000000000000A4 :101C40000000000000000000000000000000000094 :101C50000000000000000000000000000000000084 @@ -115173,7 +115173,7 @@ :101C70000000000000000000000000000000000064 :101C80000000000000000000000000000000000054 :101C90000000000000000000000000000000000044 -:101CA000080000000000000000000000010000200B +:101CA0000000000000000000000000000000000034 :101CB0000000000000000000000000000000000024 :101CC0000000000000000000000000000000000014 :101CD0000000000000000000000000000000000004 @@ -115181,56 +115181,56 @@ :101CF00000000000000000000000000000000000E4 :101D000000000000000000000000000000000000D3 :101D100000000000000000000000000000000000C3 -:101D20000000000800880000000000010000000022 +:101D200000000000000000000000000000000000B3 :101D300000000000000000000000000000000000A3 :101D40000000000000000000000000000000000093 :101D50000000000000000000000000000000000083 :101D60000000000000000000000000000000000073 :101D70000000000000000000000000000000000063 :101D80000000000000000000000000000000000053 -:101D90000000000000000000000000000000000043 -:101DA00000000000008000000000000000100000A3 -:101DB000000000050000000000000000000000001E +:101D90000000000000000000000000000000010042 +:101DA0000000000000000000000000000000000033 +:101DB0000000000000000000000000000000000023 :101DC0000000000000000000000000000000000013 :101DD0000000000000000000000000000000000003 :101DE00000000000000000000000000000000000F3 :101DF00000000000000000000000000000000000E3 :101E000000000000000000000000000000000000D2 :101E100000000000000000000000000000000000C2 -:101E2000000000000000800800100000000000001A -:101E3000100000000500000000000000000000008D +:101E2000030041000300000000000000000000006B +:101E300000000000000000000000000000000000A2 :101E40000000000000000000000000000000000092 :101E50000000000000000000000000000000000082 :101E60000000000000000000000000000000000072 :101E70000000000000000000000000000000000062 :101E80000000000000000000000000000000000052 :101E90000000000000000000000000000000000042 -:101EA0000000000000000000080100000008880099 -:101EB0000000010000000000000000000000000021 +:101EA000000800000000000000000000000000002A +:101EB0000000000000000000000000000000000022 :101EC0000000000000000000000000000000000012 :101ED0000000000000000000000000000000000002 :101EE00000000000000000000000000000000000F2 :101EF00000000000000000000000000000000000E2 :101F000000000000000000000000000000000000D1 :101F100000000000000000000000000000000000C1 -:101F20000000000000000000000000810000070029 -:101F30000000410000E00000000000000000000080 +:101F200000000001000000000000000000000000B0 +:101F300000000000000000000000000000000000A1 :101F40000000000000000000000000000000000091 :101F50000000000000000000000000000000000081 :101F60000000000000000000000000000000000071 :101F70000000000000000000000000000000000061 :101F80000000000000000000000000000000000051 :101F90000000000000000000000000000000000041 -:101FA0000000000000000000000000003C3C0000B9 -:101FB000C0C0C0C000000000000000000000000021 +:101FA0000000000000000000000000000000000031 +:101FB0000000000000000000000000000000000021 :101FC0000000000000000000000000000000000011 :101FD0000000000000000000000000000000000001 :101FE00000000000000000000000000000000000F1 :101FF00000000000000000000000000000000000E1 :1020000000000000000000000000000000000000D0 :1020100000000000000000000000000000000000C0 -:1020200000000000000000000000000000003C3C38 -:102030000000C0C0C0C000000000000000000000A0 +:1020200000000000000000000000000000000000B0 +:1020300000000000000000000000000000000000A0 :102040000000000000000000000000000000000090 :102050000000000000000000000000000000000080 :102060000000000000000000000000000000000070 @@ -115238,7 +115238,7 @@ :102080000000000000000000000000000000000050 :102090000000000000000000000000000000000040 :1020A0000000000000000000000000000000000030 -:1020B00000003C3CC3C3C3C300000000000000009C +:1020B0000000000000000000000000000000000020 :1020C0000000000000000000000000000000000010 :1020D0000000000000000000000000000000000000 :1020E00000000000000000000000000000000000F0 @@ -115246,7 +115246,7 @@ :1021000000000000000000000000000000000000CF :1021100000000000000000000000000000000000BF :1021200000000000000000000000000000000000AF -:10213000000000003C3C0000000000000000000027 +:10213000000000000000000000000000000000009F :10214000000000000000000000000000000000008F :10215000000000000000000000000000000000007F :10216000000000000000000000000000000000006F @@ -115254,16 +115254,16 @@ :10218000000000000000000000000000000000004F :10219000000000000000000000000000000000003F :1021A000000000000000000000000000000000002F -:1021B0000000000000000028000000000061000195 -:1021C000800100000000000000000000000000008E +:1021B000000000000000000000000000000000001F +:1021C000000000000000000000000000000000000F :1021D00000000000000000000000000000000000FF :1021E00000000000000000000000000000000000EF :1021F00000000000000000000000000000000000DF :1022000000000000000000000000000000000000CE :1022100000000000000000000000000000000000BE -:1022200000000000000000000000000000000000AE -:102230000000000000000000000000000000C300DB -:10224000C3003C3C00000000000000000000000053 +:10222000000000000000000000000000000000614D +:102230000006000D0000000000000000000000008B +:10224000000000000000000000000000000000008E :10225000000000000000000000000000000000007E :10226000000000000000000000000000000000006E :10227000000000000000000000000000000000005E @@ -115271,7 +115271,7 @@ :10229000000000000000000000000000000000003E :1022A000000000000000000000000000000000002E :1022B000000000000000000000000000000000001E -:1022C000C300C3003C3C0000000000000000000010 +:1022C000000000000000000000000000000000000E :1022D00000000000000000000000000000000000FE :1022E00000000000000000000000000000000000EE :1022F00000000000000000000000000000000000DE @@ -115279,203 +115279,203 @@ :1023100000000000000000000000000000000000BD :1023200000000000000000000000000000000000AD :10233000000000000000000000000000000000009D -:102340000000C300C30000FF000000000000000008 +:10234000000000000000000000000000000000008D :10235000000000000000000000000000000000007D :10236000000000000000000000000000000000006D :10237000000000000000000000000000000000005D :10238000000000000000000000000000000000004D :10239000000000000000000000000000000000003D :1023A000000000000000000000000000000000002D -:1023B000000000000000000000000000000000001D -:1023C00000000000C300C30000FF00000000000088 +:1023B000000000002F281F14000000000000000093 +:1023C000000000000000000000000000000000000D :1023D00000000000000000000000000000000000FD :1023E00000000000000000000000000000000000ED :1023F00000000000000000000000000000000000DD :1024000000000000000000000000000000000000CC :1024100000000000000000000000000000000000BC :1024200000000000000000000000000000000000AC -:10243000000000000000000000000000000000009C -:102440002000000200000080200020042004000082 -:10245000000000000000400000000000000000003C -:1024600020000000000000002000200020000000EC -:10247000A0000000000000800080008000800003B9 -:1024800000002000000000000000200020002000CC -:102490000000200000000000840000000000000098 -:1024A00000002000000000000000200020002000AC -:1024B000008000000000100000000000000000008C -:1024C000000200024101000200044000000100017E -:1024D00000002100000000002000000000000000BB +:102430000000000000000F000F000000000000007E +:102440000000000000000000000000000004001177 +:10245000000000000000000000000000000000007C +:1024600088000000000000000000000000000000E4 +:10247000000000000002000000000000000000005A +:10248000000000000000000000000000000000004C +:10249000000000000000000000000000000000003C +:1024A000000000000000000000000000000000002C +:1024B000000000000000000000000000000000001C +:1024C000000000000000000000000000000000000C +:1024D00000000000000000000000000000000000FC :1024E00000000000000000000000000000000000EC -:1024F00000000000000000002004000400040004AC +:1024F00000000000000000000000000000000000DC :1025000000000000000000000000000000000000CB -:10251000000000000000000021000000000000009A +:1025100000000000000000000000000000000000BB :1025200000000000000000000000000000000000AB -:102530000000000400000000000000840000000013 -:10254000000008000203004040400000008000003E -:1025500008000204200020002000200020002000AD -:10256000004002000200024002C000000000000023 -:102570000800020000000000000000000000000051 -:102580000010000000000000000000000800000033 -:102590000000080000000000000000000000000033 -:1025A0000000020000000000000000000000000029 -:1025B000000008000080000000000000080000008B -:1025C00000000200000000000000800800820004FB -:1025D000000000000001800080008000800080007A -:1025E000800000000000000000000004000000085F -:1025F0000000000000900000000000000000000843 -:1026000000000000000000000000000800000000C2 -:1026100000080000000000080000000000000000AA -:10262000000800000000000000000008000000009A -:10263000000800000000000400000000000000008E -:1026400000840000000004000000000040000000C2 -:102650000000000000000002040004000000000070 -:10266000000800008800C00000000000000000001A -:1026700000000000000040004000000004000000D6 -:10268000000040000000000000000000000000000A -:1026900000000000000000000400040000004000F2 -:1026A000200000000000000000000000000000000A -:1026B000000000000000000004000800000004000A -:1026C0000000000000000000000004000000840082 -:1026D00011000002000000000008000200000000DD -:1026E00011000400000000000000000000080000CD +:10253000000000000000000000000000000000009B +:10254000000000000000000000000000000000008B +:10255000000000000000000000000000000000007B +:10256000000000000000000000000000000000006B +:10257000000000000000000000000000000000005B +:10258000000000000000000000000000000000004B +:10259000000000000000000000000000000000003B +:1025A00000008200000000000000000000000000A9 +:1025B0000000040000000000000000000000000017 +:1025C0000000820000000000000000000000000089 +:1025D00000000000000000000000000000000000FB +:1025E00000000000000000000000000000000000EB +:1025F00000000000000000000000000000000000DB +:1026000000000000000000000000000000000000CA +:1026100000000000000000000000000000000000BA +:1026200000000000000000000000000000000000AA +:10263000000000000000000000000000000000009A +:10264000000000000000100000000000000000007A +:102650000000000000000200040000000400000070 +:10266000000000000000000000000000000000006A +:10267000000000000000400090000000400000004A +:10268000000000000000000000000000000000004A +:10269000000000000000000000000000000000003A +:1026A000000000000000000000000000000000002A +:1026B000000000000000000000000000000000001A +:1026C000000000000000000000000000000000000A +:1026D00021000000000000000000000000000000D9 +:1026E00000200000000000000000000000000000CA :1026F00000000000000000000000000000000000DA -:1027000000000000000000000000000000000000C9 -:1027100000000000000000000000000000020000B7 -:102720000000800000000000000000000000000029 -:10273000000000000000050000000000000009008B +:1027000000000000002000000000000000000000A9 +:1027100000000000000000000000000000000000B9 +:1027200000000000000000000000000000000000A9 +:102730000000000000000000000000000000000099 :102740000000000000000000000000000000000089 -:102750000004000000000000000000000000000075 -:10276000000000000000000000040004000000045D -:102770000000000000000000000000000040000019 +:10275000000000000000000000000000C0000000B9 +:102760000000000000000000000000000000000069 +:102770000000000000000000000000000000000059 :102780000000000000000000000000000000000049 -:1027900000000000000000000040000000000000F9 +:102790000000000000000000000000000000000039 :1027A0000000000000000000000000000000000029 -:1027B00000000000000000000000000020000000F9 -:1027C000A000000000000000000000000000000069 -:1027D00000000001000000000004000000000000F4 -:1027E0000000400000400000000000010001000067 -:1027F00000010004000000000000000000080000CC +:1027B0000000000000000000000000000000000019 +:1027C0000000000000000000000000000000000009 +:1027D00000000000000000000000000000000000F9 +:1027E00000000000000000000000000000000000E9 +:1027F00000000000000000000000000000000000D9 :1028000000000000000000000000000000000000C8 :1028100000000000000000000000000000000000B8 :1028200000000000000000000000000000000000A8 -:102830000000000000000000000000000000800018 -:102840000000000000000000400000000000002028 -:1028500000009000000000000008000000000040A0 -:1028600020408440002000200400A0400000000020 -:102870002000000000000000000000000000000038 +:102830000000000000000000000000000000000098 +:102840000000000000000000000000000000000088 +:1028500000000000080000000000C00000000000B0 +:102860000000000000000000000000000000000068 +:102870000000000000000000000000000000000058 :102880000000000000000000000000000000000048 -:102890000020000000000000000000000000000018 -:1028A00000000800A0000000000000000000000080 -:1028B0000000000000000000000000008400000094 +:102890000000000000000000000000000000000038 +:1028A0000000000000000000000000000000000028 +:1028B0000000000000000000000000000000000018 :1028C0000000000000000000000000000000000008 -:1028D0000004008840040000000040000090400018 -:1028E0000000C00000010000110000000001000015 -:1028F0000000800000000000000000000000000058 -:1029000000000000000000000000000000000000C7 -:1029100000000000040000000000000000000000B3 -:102920000000000000000000000041000000000066 +:1028D00000000000000000000000000000000000F8 +:1028E00000004000040000000000000000000000A4 +:1028F0000000000000000000020000000000009046 +:1029000004000000000004000000000000000000BF +:1029100000000000000000000000000000000200B5 +:1029200000000000000000000000000000000000A7 :102930000000000000000000000000000000000097 -:102940000000000000000000000000000000000087 -:102950000000000000000000000000000021000056 -:1029600000000000000084000000000500000005D9 -:1029700000000004008000090000000000000000CA +:10294000000000000000000800000000000809A0CE +:102950000000100000000000000000000000000067 +:102960000000000000000000000000000000000067 +:102970000000000000000000000000000000000057 :102980000000000000000000000000000000000047 -:102990000000000000000000000000000000000037 -:1029A00084000000000000000000000000000000A3 +:10299000000000000000080000000000000000002F +:1029A0000000000000000000000000000000000027 :1029B0000000000000000000000000000000000017 -:1029C0008400000000000000000000000021000062 +:1029C0000000000000000000000000000000000007 :1029D00000000000000000000000000000000000F7 :1029E00000000000000000000000000000000000E7 -:1029F00000000000000000040000000000000000D3 +:1029F00000000000000000000000000000000000D7 :102A000000000000000000000000000000000000C6 :102A100000000000000000000000000000000000B6 -:102A200000000000000000000000000000000000A6 +:102A20002100000000000000000000000000000085 :102A30000000000000000000000000000000000096 -:102A4000000000000000000000000000000008007E -:102A50000000000040200000000084000000000092 -:102A600000000001000041C000000100000041C062 -:102A700000000100000041C00000A10100000000B2 -:102A80000000000000000000000000000000000145 -:102A90000000000100000000000000000000000035 +:102A40000000000000000000000000000000000086 +:102A50000000000000000000000000000000000076 +:102A60000000000000000000000000000000000066 +:102A70000000000000000000000000000000000056 +:102A80000000000000000000000000000000000046 +:102A90000000000000000000000000000000000036 :102AA0000000000000000000000000000000000026 -:102AB0000000000001000000000000000000000015 -:102AC0000000000000000000010000000100000004 -:102AD00000000000000000000000090010000000DD -:102AE0000000000010200000919100000809000083 -:102AF0009191000808090000918300000509000079 +:102AB0000000000000000000000000000000000016 +:102AC0000000000000000000000000000000000006 +:102AD00000000000000000000000000000000000F6 +:102AE00000000000000000000000000000000000E6 +:102AF00000000000000000000000000000000000D6 :102B000000000000000000000000000000000000C5 -:102B10000010000011100000000000000000000084 +:102B100000000000000000000000000000000000B5 :102B200000000000000000000000000000000000A5 -:102B3000000000000000080000000000000000008D -:102B4000000000000000000000001109002110003A -:102B50000000000000000000000010001000000055 -:102B600011000000000020000000090000211111E8 -:102B700080000980002109118000098010212011A6 -:102B800080000000000000000000000000000000C5 -:102B9000000010000000080000000000000000001D +:102B30000000000000000000000000000000000095 +:102B40000000000000000000000000000000000085 +:102B50000000000000000000000000000000000075 +:102B60000000000000000000000000000000000065 +:102B70000000000000000000000000000000000055 +:102B80000000000000000000000000000000000045 +:102B90000000000000000000000000000000000035 :102BA0000000000000000000000000000000000025 -:102BB0000000000000100000000000000000000005 +:102BB0000000000000000000000000000000000015 :102BC0000000000000000000000000000000000005 -:102BD00000000000000000000000000001000000F4 -:102BE00000000000000000000100000001000000E3 -:102BF0000001C000010800000001C0000102010046 -:102C00000101C0840000000000000000000000007E -:102C10000000000001900000010000000000000022 +:102BD00000000000000000000000000000000000F5 +:102BE00000000000000000000000000000000000E5 +:102BF00000000000000000000000000000000000D5 +:102C000000000000000000000000000000000000C4 +:102C100000000000000000000000000000000000B4 :102C200000000000000000000000000000000000A4 -:102C30000000000000000001000000000000000093 +:102C30000000000000000000000000000000000094 :102C40000000000000000000000000000000000084 :102C50000000000000000000000000000000000074 -:102C60000000A000010100000000000100000000C1 -:102C70000000200003C100000001000083C000012B -:102C80000001010003C0000000000000000000007F -:102C90000000000000000001000000000000000033 +:102C60000000000000000000000000000000000064 +:102C70000000000000000000000000000000000054 +:102C80000000000000000000000000000000000044 +:102C90000000000000000000000000000000000034 :102CA0000000000000000000000000000000000024 :102CB0000000000000000000000000000000000014 :102CC0000000000000000000000000000000000004 :102CD00000000000000000000000000000000000F4 -:102CE00000410021800408040011110000200000B0 -:102CF00000091111410991830009000941099183DB -:102D00000020210920419180000000000000000007 -:102D1000000000000000000000100000000800009B +:102CE00000000000000000000000000000000000E4 +:102CF00000000000000000000000000000000000D4 +:102D000000000000000000000000000000000000C3 +:102D100000000000000000000000000000000000B3 :102D200000000000000000000000000000000000A3 :102D30000000000000000000000000000000000093 :102D40000000000000000000000000000000000083 :102D50000000000000000000000000000000000073 -:102D6000000000020000000000110000200011001F -:102D70000008098911090980094188890011098021 -:102D80000903840420000080090000000000000006 -:102D9000000000000000000000000008000010001B +:102D60000000000000000000000000000000000063 +:102D70000000000000000000000000000000000053 +:102D80000000000000000000000000000000000043 +:102D90000000000000000000000000000000000033 :102DA0000000000000000000000000000000000023 :102DB0000000000000000000000000000000000013 :102DC0000000000000000000000000000000000003 :102DD00000000000000000000000000000000000F3 -:102DE00000000000000000000000000100000100E1 -:102DF000000000010008000100840101C00800017A -:102E000000840100C1850100008401000000000071 -:102E100000000000000000000000000000010000B1 -:102E200001000000000000000000000000000000A1 +:102DE00000000000000000000000000000000000E3 +:102DF00000000000000000000000000000000000D3 +:102E000000000000000000000000000000000000C2 +:102E100000000000000000000000000000000000B2 +:102E200000000000000000000000000000000000A2 :102E30000000000000000000000000000000000092 :102E40000000000000000000000000000000000082 :102E50000000000000000000000000000000000072 -:102E6000000000000000410000E0000000006000E1 -:102E700000E000000000840000E00000001260009C -:102E800000E000000000600000E000000000000022 -:102E900000000000000000000000000000008100B1 -:102EA00000E0000000000000000000000000000042 +:102E60000000000000000000000000000000000062 +:102E70000000000000000000000000000000000052 +:102E80000000000000000000000000000000000042 +:102E90000000000000000000000000000000000032 +:102EA0000000000000000000000000000000000022 :102EB0000000000000000000000000000000000012 -:102EC000600000E0000000000000000000000000C2 -:102ED0000000000000000000600000E000000000B2 +:102EC0000000000000000000000000000000000002 +:102ED00000000000000000000000000000000000F2 :102EE00000000000000000000000000000000000E2 -:102EF0000000000000000000FFFFFFFF666600000A -:102F0000FFFF000066660000FFFF0000666600002D +:102EF00000000000000000000000000000000000D2 +:102F000000000000000000000000000000000000C1 :102F100000000000000000000000000000000000B1 :102F200000000000000000000000000000000000A1 :102F30000000000000000000000000000000000091 :102F40000000000000000000000000000000000081 :102F50000000000000000000000000000000000071 :102F60000000000000000000000000000000000061 -:102F70000000000000000000000000000000666685 -:102F800000000000000066660000000000006666A9 +:102F70000000000000000000000000000000000051 +:102F80000000000000000000000000000000000041 :102F90000000000000000000000000000000000031 :102FA0000000000000000000000000000000000021 :102FB0000000000000000000000000000000000011 @@ -115491,290 +115491,290 @@ :103050000000000000000000000000000000000070 :103060000000000000000000000000000000000060 :103070000000000000000000000000000000000050 -:1030800066660000FFFF000066660000FFFF0000AC -:103090006666FFFF00000000000000000000000066 +:103080000000000000000000000000000000000040 +:103090000000000000000000000000000000000030 :1030A0000000000000000000000000000000000020 :1030B0000000000000000000000000000000000010 :1030C0000000000000000000000000000000000000 :1030D00000000000000000000000000000000000F0 :1030E00000000000000000000000000000000000E0 :1030F00000000000000000000000000000000000D0 -:103100000000666600000000000066660000000027 -:1031100000006666FFFFFFFF0000000000000000E7 +:1031000000000000000000000000000000000000BF +:1031100000000000000000000000000000000000AF :10312000000000000000000000000000000000009F :10313000000000000000000000000000000000008F :10314000000000000000000000000000000000007F :10315000000000000000000000000000000000006F :10316000000000000000000000000000000000005F -:10317000000000610007800D000000610001800177 -:103180000000406380018021920240E380018021A1 -:10319000920240E3800180218202000000000000D2 -:1031A000000000000000000000000061000180013C +:10317000000000000000000000000000000000004F +:10318000000000000000000000000000000000003F +:10319000000000000000000000000000000000002F +:1031A000000000000000000000000000000000001F :1031B000000000000000000000000000000000000F -:1031C0000000000000000000000000000065000793 -:1031D000800D000000000000000000000000000062 -:1031E0000000000000610003800D000000000000EE -:1031F0000000000000000000F5E1FFC3000F000F19 -:103200003C003C00000C003C0000030F00002C2C94 -:10321000C0F0000028002828C080C0800000000006 -:103220000000000000000000000000000A0A0A0A76 -:1032300000C300C300000000000000000000000008 +:1031C00000000000000000000000000000000000FF +:1031D00000000000000000000000000000000000EF +:1031E00000000000000000000000000000000000DF +:1031F00000000000000000000000000000000000CF +:1032000000000000000000000000000000000000BE +:1032100000000000000000000000000000000000AE +:10322000000000000000000000000000000000009E +:10323000000000000000000000000000000000008E :10324000000000000000000000000000000000007E :10325000000000000000000000000000000000006E :10326000000000000000000000000000000000005E -:1032700000000000000000000000FFEBFFC3000F93 -:10328000000F3C003C00000C003C0000030F00005D -:103290002C2CC0F0000028002828C080C08000002E -:1032A00000000000000000000000000000000A0A0A -:1032B0000A0A00C300C30000000000000000000074 +:10327000000000000000000000000000000000004E +:10328000000000000000000000000000000000003E +:10329000000000000000000000000000000000002E +:1032A000000000000000000000000000000000001E +:1032B000000000000000000000000000000000000E :1032C00000000000000000000000000000000000FE :1032D00000000000000000000000000000000000EE :1032E00000000000000000000000000000000000DE -:1032F000000000000000000000000000C1C1D1D1AA -:1033000050505050AA00AA000A0A000028002800C5 -:10331000000F00000014001400000F0F000C000C40 +:1032F00000000000000000000000000000000000CE +:1033000000000000000000000000000000000000BD +:1033100000000000000000000000000000000000AD :10332000000000000000000000000000000000009D -:1033300000000F0F00C300C30000000000000000E9 +:10333000000000000000000000000000000000008D :10334000000000000000000000000000000000007D :10335000000000000000000000000000000000006D -:103360000000000000000000000000FF000000005E -:103370000000000000000000000000000000C1C1CB -:10338000D1D150505050AA00AA00AAAA00003C0077 -:103390003C0000FF00001414141400000A0A0C0C76 -:1033A0000C0C000000000000000000000000000005 -:1033B000000000000F0F00C300C300000000000069 +:10336000000000000000000000000000000000005D +:10337000000000000000000000000000000000004D +:10338000000000000000000000000000000000003D +:10339000000000000000000000000000000000002D +:1033A000000000000000000000000000000000001D +:1033B000000000000000000000000000000000000D :1033C00000000000000000000000000000000000FD :1033D00000000000000000000000000000000000ED -:1033E00000000000000000000000000000FF0000DE -:1033F0000000000000000000000000000000C0000D -:1034000000002000000200000000000020008800F2 -:103410002000000001002100000084800000000066 -:103420000000000000000080000000000400010017 -:1034300005000100000020000000018000030000E2 -:103440001000A00010001000040004000400200080 -:103450008800200000000000200000000000009014 -:103460002000040000000000000000000000000038 -:10347000000000000000000020000000000000022A -:1034800000000000000000000000400000004000BC -:1034900000000000000004020420400000200000A2 -:1034A0000000000410020040000200400000800202 -:1034B000040084000400000000000000041000006C -:1034C0004000000000000000000280028002800234 -:1034D00000000000000000000000000000020000EA -:1034E000002140000000100000000000004000002B -:1034F0002100000000000000009009000000099079 -:10350000202004042020202000001000000000A043 +:1033E00000000000000000000000000000000000DD +:1033F00000000000000000000000000000000000CD +:10340000000020000000000000000000000000009C +:1034100000000000000000000000000000000000AC +:10342000000020000000000000000000000000007C +:10343000000000000000000000000000000000008C +:10344000000000002000000000000000000000005C +:10345000000000000000000000000000000000006C +:10346000000000000000000000000000100000004C +:10347000000000000000000000000000000000004C +:10348000000000000000000000000000000000003C +:10349000000000000000000000000000000000002C +:1034A000000000000000000000000000000000001C +:1034B00000000000100000000000000000000000FC +:1034C00000000000000000000000000000000000FC +:1034D00000000000000000000000000000000000EC +:1034E000000000000000000040000000400000005C +:1034F00000000000000000000000000000000000CC +:1035000000000000000000000000000000000000BB :1035100000000000000000000000000000000000AB -:10352000000000000000000000000000000020007B -:10353000000000000000000000000000000020006B +:10352000000000000000000000000000000000009B +:10353000000000000000000000000000000000008B :10354000000000000000000000000000000000007B :10355000000000000000000000000000000000006B -:10356000000000000000000020000000000000003B -:10357000200000000000000000000000000000101B -:103580000000800180018001800100000000000037 -:103590000005000000080000000000000000000816 -:1035A0000000000000840000000000880008000007 -:1035B000800000000008000000000000000000087B -:1035C0008000000000000008000000000008000863 -:1035D00000000000000800080000000000080000D3 -:1035E0000008000000C00008000080000008000281 -:1035F0000000800000080008000000000008000033 -:1036000000080000080000080000900000004000D2 -:103610000000000000410000000000000000000069 -:103620000405000004000021000000001008000054 -:10363000000004000000000404000000000000007E -:103640000000000000000021000000000000000059 -:103650000021000000000021000000000000000028 -:103660000011000020000021000000000000000008 -:103670000000000000000021000000200000000009 -:10368000000000000000000000080000000000082A -:10369000000805000000008800A00000000000A055 -:1036A0000084800000000000000000000000000016 +:10356000000000000000000000000000000000005B +:10357000000000000000000000000000000000004B +:10358000000000000000000000000000000000003B +:10359000000000000000000000000000000000002B +:1035A000000000000000000000000000000000001B +:1035B000000000000000000000000000000000000B +:1035C00000000000000000000000000000000000FB +:1035D00000000000000000000000000000000000EB +:1035E00000000000000000000000000000000000DB +:1035F00000000000000000000000000000000000CB +:1036000000000000000000000000000000000000BA +:1036100000000000000000000000000000000000AA +:10362000000000000000000000000000000000009A +:103630000000000000000000840000000400000002 +:10364000000000000000000000000000000000007A +:10365000000000000000000000000000000000006A +:10366000000000000000000000000000000000005A +:10367000000000000000000000000000000000004A +:103680000400000000000000000000000000000036 +:10369000000000000000000000000000000000002A +:1036A000000000000000000000000000000000001A :1036B000000000000000000000000000000000000A -:1036C00000000000000000000000000040000000BA +:1036C00000000000000000000000000000000000FA :1036D00000000000000000000000000000000000EA -:1036E00000000090000080000000000008000000C2 +:1036E00000000000000000000000000000000000DA :1036F00000000000000000000000000000000000CA -:103700004100000000000000000008000000000070 +:1037000000000000000000000000000000000000B9 :1037100000000000000000000000000000000000A9 -:103720000000000000000002000008000011080076 +:103720000000000000000000000000000000000099 :103730000000000000000000000000000000000089 -:103740000005000000000000000000001000000064 -:103750000000040000000000000000000000000065 -:1037600000000005000000000000000084000800C8 -:103770000800080008000800080008000000000019 -:10378000820010040004004000040000000000005B +:103740000000000000000000000000000000000079 +:103750000000000900000000000000000000000060 +:103760000000000000000000000000000000000059 +:103770000800000000000000000000000000000041 +:1037800082000000000000000000000000000000B7 :103790000000000000000000000000000000000029 :1037A0000000000000000000000000000000000019 -:1037B0000000000000000000000000000000080001 -:1037C00000000008000000000000000000000000F1 -:1037D0000000000080000000000000000000000069 -:1037E00000000000030000000000000000000000D6 +:1037B0000000000000000000000000000000000009 +:1037C00000000000000000000000000000000000F9 +:1037D00000000000000000000000000000000000E9 +:1037E00000000000000000000000000000000000D9 :1037F00000000000000000000000000000000000C9 -:1038000000000000000100010001000100000000B4 +:1038000000000000000000000000000000000000B8 :1038100000000000000000000000000000000000A8 -:10382000000000000000000000030000000000088D -:1038300000000000000000039000000008080000E5 -:10384000000082000000A000000000000000002135 -:103850000000400000000000000000000000002107 -:103860000000000000000000000000000100002136 -:10387000000008000000000000000000000400003C -:1038800008008200000082000000000082000004A6 -:10389000000000900400008800000500000000887F -:1038A00000000000008400000000040000C01100BF +:103820000000000000000000000000000000000098 +:103830000000000000000000000000000000000088 +:103840000000000000000000000000000000000078 +:103850000000000000000000000000000000000068 +:103860000000000000000000000000000000000058 +:103870000000000000000000000000000000000048 +:103880000000000000000000000000000000000038 +:103890000000000000000000000000000000000028 +:1038A0000000000000000000000000000000000018 :1038B0000000000000000000000000000000000008 -:1038C00000000000000000004088400408000000E4 +:1038C00000020000040000000000000000000000F2 :1038D00000000000000000000000000000000000E8 -:1038E0000000000000000000000000000000408810 -:1038F00000000000000000000000000000000001C7 -:1039000000000300000000000000000000000000B4 -:10391000000000080000000000040004000400048F -:103920000000000000000003000000000000004153 -:103930000000002100030000000000000000000063 -:10394000000008000000000000000000000000006F -:10395000000000080000000000000000000000005F +:1038E00000000000000000000000000000000000D8 +:1038F00000000000000000000000000000000000C8 +:103900000000000000000000000040000000000077 +:1039100000000000000000000000000000000000A7 +:103920000000000000000000000000000000000097 +:103930000000000000000000000000000000000087 +:103940000000000000000000000000000000000077 +:103950000000000000000000000000000000000067 :103960000000000000000000000000000000000057 -:103970000000000400000000000000000000000043 -:103980000000020008000800000000008200830020 +:103970000000000000000000000000000000000047 +:103980000000000000000000000000000000000037 :103990000000000000000000000000000000000027 :1039A0000000000000000000000000000000000017 :1039B0000000000000000000000000000000000007 :1039C00000000000000000000000000000000000F7 -:1039D00000000001000000000000000000000000E6 -:1039E0000000000000000000004000000000000097 +:1039D00000000000000000000000000000000000E7 +:1039E00000000000000000000000000000000000D7 :1039F00000000000000000000000000000000000C7 :103A000000000000000000000000000000000000B6 -:103A10002000000000000000000000000000000086 -:103A2000000000000000000000000000000000088E -:103A30000000008200000000000000000000000004 -:103A40000000000000020020000000000000000054 -:103A500000000000000000000000000000009000D6 -:103A600000000010008800000000000000000000BE -:103A70000000010000000100000000000000000044 -:103A800000000000000000000000000000000889A5 -:103A90000810892188080000000040000000000094 +:103A100000000000000000000000000000000000A6 +:103A20000000000000000000000000000000000096 +:103A30000000000000000000000000000000000086 +:103A40000000000000000000000000000000000076 +:103A50000000000000000000000000000000000066 +:103A60000000000000000000000000000000000056 +:103A70000000000000000000000000000000000046 +:103A80000000000000000000000000000000000036 +:103A90000000000000000000000000000000000026 :103AA0000000000000000000000000000000000016 :103AB0000000000000000000000000000000000006 :103AC00000000000000000000000000000000000F6 :103AD00000000000000000000000000000000000E6 -:103AE0000000000000800000000000000000000056 -:103AF0000800210010000000040000000200000087 -:103B000000000000080000000000000000000000AD -:103B100005080000830900000009000000090000FA +:103AE00000000000000000000000000000000000D6 +:103AF00000000000000000000000000000000000C6 +:103B000000000000000000000000000000000000B5 +:103B100000000000000000000000000000000000A5 :103B20000000000000000000000000000000000095 :103B30000000000000000000000000000000000085 -:103B40000000000000000000000000400000000035 -:103B500080000000800080000000000000000000E5 -:103B60000000000000100000000000000000000045 -:103B700000000000000000000000000000110080B4 +:103B40000000000000000000000000000000000075 +:103B50000000000000000000000000000000000065 +:103B60000000000000000000000000000000000055 +:103B70000000000000000000000000000000000045 :103B80000000000000000000000000000000000035 -:103B90000000088080840989008000000084000003 -:103BA000008400000000000000020000000000008F -:103BB0000000000010000000820000000000000073 -:103BC00000000000000000000000000002000000F3 -:103BD00000000800000010000200000000000000CB -:103BE00000000000200000010000000000000000B4 +:103B90000000000000000000000000000000000025 +:103BA0000000000000000000000000000000000015 +:103BB0000000000000000000000000000000000005 +:103BC00000000000000000000000000000000000F5 +:103BD00000000000000000000000000000000000E5 +:103BE00000000000000000000000000000000000D5 :103BF00000000000000000000000000000000000C5 -:103C00000040000000000000000000000000000074 -:103C100000000000844020C0850588C00000080026 -:103C20000400000000000000000000000000000090 -:103C300000000000000000000008008200000000FA -:103C40000000000000000000000001000002000071 -:103C50000000002000000000000000000000000044 -:103C60000000000000000000001000000000000044 +:103C000000000000000000000000000000000000B4 +:103C100000000000000000000000000000000000A4 +:103C20000000000000000000000000000000000094 +:103C30000000000000000000000000000000000084 +:103C40000000000000000000000000000000000074 +:103C50000000000000000000000000000000000064 +:103C60000000000000000000000000000000000054 :103C70000000000000000000000000000000000044 -:103C80000000000001000000000000000000000033 -:103C9000000000000000C1900004C0A0A0090200C4 -:103CA0008000000009000000000000000900000082 +:103C80000000000000000000000000000000000034 +:103C90000000000000000000000000000000000024 +:103CA0000000000000000000000000000000000014 :103CB0000000000000000000000000000000000004 -:103CC00000000000000000000000000008000000EC -:103CD00000000000000000000000000003000000E1 -:103CE0000000000000000000000000800000000054 -:103CF0000000000000000000000000110041002052 -:103D0000000000000000100000000000000008009B -:103D1000000000000000000041090080C100008890 -:103D20000000004000000000000000000000000053 -:103D3000000000000000000000000009000000007A -:103D4000000000000000000000000000080011005A -:103D50000010000800800000000000820000000049 -:103D60000000000000000000000000008082000051 -:103D7000000000000000000000000009000000003A -:103D80000000002000210000800000000000000072 -:103D90000000000000000000000009890000080089 +:103CC00000000000000000000000000000000000F4 +:103CD00000000000000000000000000000000000E4 +:103CE00000000000000000000000000000000000D4 +:103CF00000000000000000000000000000000000C4 +:103D000000000000000000000000000000000000B3 +:103D100000000000000000000000000000000000A3 +:103D20000000000000000000000000000000000093 +:103D30000000000000000000000000000000000083 +:103D40000000000000000000000000000000000073 +:103D50000000000000000000000000000000000063 +:103D60000000000000000000000000000000000053 +:103D70000000000000000000000000000000000043 +:103D80000000000000000000000000000000000033 +:103D90000000000000000000000000000000000023 :103DA0000000000000000000000000000000000013 -:103DB0000000000000000000000000009000000073 -:103DC0008200000000000000000000000000010070 -:103DD000010002010000004000000000000200009D -:103DE00000000000000000000000000000001010B3 +:103DB0000000000000000000000000000000000003 +:103DC00000000000000000000000000000000000F3 +:103DD00000000000000000000000000000000000E3 +:103DE00000000000000000000000000000000000D3 :103DF00000000000000000000000000000000000C3 -:103E00000000000002000000000090000000000020 -:103E10000000000000000000000000009008089072 -:103E200020904000600600E00700000000000084D1 -:103E300021000000000000000000000000820000DF -:103E4000070000000000000000000000410000E04A -:103E5000000000000006000007000000008200844F -:103E60000700000000000000000000000000000645 -:103E7000000007000000000000000000000000003B -:103E800000E000000000000000E00700000060000B -:103E900000E00000000000000000000000006000E2 -:103EA00000E00000484200000000000000000000A8 -:103EB000000000000000000000000000000000C33F -:103EC00000C300FF00000000000000000000000030 -:103ED000000000000000FFFF00000000C3C300005E +:103E000000000000000000000000000000000000B2 +:103E100000000000000000000000000000000000A2 +:103E20000000000000000000000000000000000092 +:103E30000000000000000000000000000000000082 +:103E40000000000000000000000000000000000072 +:103E50000000000000000000000000000000000062 +:103E60000000000000000000000000000000000052 +:103E70000000000000000000000000000000000042 +:103E80000000000000000000000000000000000032 +:103E90000000000000000000000000000000000022 +:103EA0000000000000000000000000000000000012 +:103EB0000000000000000000000000000000000002 +:103EC00000000000000000000000000000000000F2 +:103ED00000000000000000000000000000000000E2 :103EE00000000000000000000000000000000000D2 -:103EF000FF00FF000A0A0A0A00000000000000009C -:103F00000000000000000000BEBEFFFF0000000037 +:103EF00000000000000000000000000000000000C2 +:103F000000000000000000000000000000000000B1 :103F100000000000000000000000000000000000A1 -:103F200000110022008100240000000000000000B9 +:103F20000000000000000000000000000000000091 :103F30000000000000000000000000000000000081 -:103F400000C300C300FF00000000000000000000EC -:103F50000000000000000000000000000000C3C3DB +:103F40000000000000000000000000000000000071 +:103F50000000000000000000000000000000000061 :103F60000000000000000000000000000000000051 -:103F70000000000000000A0A0A0A00000000000019 -:103F8000000000000000000000001414FFFF00000B +:103F70000000000000000000000000000000000041 +:103F80000000000000000000000000000000000031 :103F90000000000000000000000000000000000021 -:103FA0000000110022008100240000000000000039 +:103FA0000000000000000000000000000000000011 :103FB0000000000000000000000000000000000001 -:103FC0000000C300C30000000F0F0000000000004D -:103FD000000000000000000000000000FF00F0F002 -:103FE000F0F000000000FF7DFF4100000000000035 -:103FF0000000000030303030282828280000000061 +:103FC00000000000000000000000000000000000F1 +:103FD00000000000000000000000000000000000E1 +:103FE00000000000000000000000000000000000D1 +:103FF00000000000000000000000000000000000C1 :1040000000000000000000000000000000000000B0 :1040100000000000000000000000000000000000A0 -:1040200000000000040108022400810000000000DC +:104020000000000000000000000000000000000090 :104030000000000000000000000000000000000080 -:1040400000000000C300C30000000F0F00000000CC -:104050000000000000000000000000000000FF0061 -:104060000000000000000000FF7DFF410000000094 -:1040700000000000000030303030282828280000E0 +:104040000000000000000000000000000000000070 +:104050000000000000000000000000000000000060 +:104060000000000000000000000000000000000050 +:104070000000000000000000000000000000000040 :104080000000000000000000000000000000000030 :104090000000000000000000000000000000000020 -:1040A0000000000000001040208000240081056115 -:1040B0000A2F850D00A000610006000D00A0000081 -:1040C00000000000000000000028000000000000C8 -:1040D00000000000000000610006800D00000000EC -:1040E0000028000000000061002E000D010000000B -:1040F0000000000000000000000000280000000098 -:10410000000000000000000000610007000900003E -:104110000061000F000D000000610007800D20000D -:10412000000000000000000060610001800110003C +:1040A0000000000000000000000000000000000010 +:1040B0000000000000000000000000000000000000 +:1040C00000000000000000000000000000000000F0 +:1040D00000000000000000000000000000000000E0 +:1040E00000000000000000000000000000000000D0 +:1040F00000000000000000000000000000000000C0 +:1041000000000000000000000000000000000000AF +:10411000000000000000000000000000000000009F +:10412000000000000000000000000000000000008F :10413000000000000000000000000000000000007F :10414000000000000000000000000000000000006F -:1041500000000000000000000C0C0C0C000000002F +:10415000000000000000000000000000000000005F :10416000000000000000000000000000000000004F :10417000000000000000000000000000000000003F -:104180000000000000000000000000000000F0FF40 -:10419000FFFF000000000000000000000000000021 -:1041A0000000000000000000000000000A0A0000FB -:1041B000414100000000000000000000000000007D +:10418000000000000000000000000000000000002F +:10419000000000000000000000000000000000001F +:1041A000000000000000000000000000000000000F +:1041B00000000000000000000000000000000000FF :1041C00000000000000000000000000000000000EF -:1041D000000000000000000000000C0C0C0C0000AF +:1041D00000000000000000000000000000000000DF :1041E00000000000000000000000000000000000CF :1041F00000000000000000000000000000000000BF :1042000000000000000000000000000000000000AE -:10421000F0F0FFF0000000000000000000000000CF -:1042200000000000000000000000000000000A0A7A -:1042300000004141000000000000000000000000FC +:10421000000000000000000000000000000000009E +:10422000000000000000000000000000000000008E +:10423000000000000000000000000000000000007E :10424000000000000000000000000000000000006E :10425000000000000000000000000000000000005E :10426000000000000000000000000000000000004E @@ -115790,104 +115790,104 @@ :1043000000000000000000000000000000000000AD :10431000000000000000000000000000000000009D :10432000000000000000000000000000000000008D -:10433000F0F000003C003C00000500008800000098 -:104340002000200000002000200000008800000065 -:1043500000002000200040000002000220000000B9 -:10436000200000000000000000000000200000000D -:104370000000200084000000000000000000200079 -:1043800000002000000000000000000000002000ED -:104390000000000020002000000084000000000059 -:1043A00000002000000000000000000000002000CD -:1043B00000000000200020000000000000000000BD -:1043C000000040400000004000000000000000002D -:1043D000009000000002000000000000000000004B -:1043E0000000000000000000000000880000004005 -:1043F000000000820000000000000000000000003B -:1044000000000000000000000000000000020000AA -:10441000000000000000000000000000000000009C -:10442000000000000000000000000000400000004C -:10443000000000000000000010000000001000005C -:1044400000008200000000000000001000000000DA -:1044500000000000000000000000000082000000DA -:1044600082000000000000000000001000000000BA +:10433000000000000000000000000000200000005D +:10434000000000002000000000000000000000004D +:10435000C00000000000400200000000200000003B +:10436000000000002000000000000000000000022B +:10437000000000000000000000000000000020001D +:1043800040000000000020000000000000000000CD +:1043900000000000000200000000000000002000FB +:1043A00020000000000020000000000000000000CD +:1043B00000000000000000000000000000000000FD +:1043C00000000000000000000000000000000000ED +:1043D00000000000000000000000000000000000DD +:1043E00000000000000000020000000000000000CB +:1043F00000000000000000000000000000000000BD +:1044000000000000000000000000000000000000AC +:10441000000000000000000000400000000000005C +:10442000000000000000000000000000000040004C +:104430004000000000000000000200020000000038 +:10444000000000000000000000000000000000006C +:10445000000000000000000000000200000000005A +:10446000000000000000000000000000000000004C :10447000000000000000000000000200000000003A :10448000000000000000000000000000000000002C -:10449000000000000000000000000000000000001C +:104490000000000000000000000002000200000018 :1044A000000000000000000000000000000000000C -:1044B00000000000000000000000000000100000EC -:1044C00000000000000000000000000800000000E4 -:1044D00000000010001000000000000800000000B4 -:1044E00000000000000000000000000800000000C4 -:1044F0000000000000000000000020080000000094 -:1045000000000000000000000000000000C00200E9 -:104510000000000000000000000000000008000093 -:10452000000000000000000000000000000040004B -:10453000000000000000000000000000401000002B -:1045400040000400040004000000900000009000FF -:1045500000200400000000000000400000000000F7 +:1044B00000000000000000000000020002000000F8 +:1044C00000000000000000000000000000000000EC +:1044D00000000000000000000000000000000000DC +:1044E00000000000000000000000000000000000CC +:1044F00000000000000000000000000000000000BC +:1045000000000000000000000000000000000000AB +:10451000000000000000000000000000000000009B +:10452000000000000000000000000000000000008B +:10453000400000000000000000000000000000003B +:10454000000000000000000000000000000000006B +:104550000000040000000000000000000000000057 :10456000000000000000000000000000000000004B -:10457000040004000000000000000000040090009F +:104570000400000000000400000000000000000033 :10458000000000000000000000000000000000002B -:104590000000000000000000040000000000000017 +:10459000000000000000000000000000000000001B :1045A000000000000000000000000000000000000B -:1045B00000000008000000000000000000000000F3 -:1045C00000000000000005000000000000000000E6 +:1045B00000000000000000000000000000000000FB +:1045C00000000000000000000000000000000000EB :1045D00000000000000000000000000000000000DB -:1045E00000000004000000000000000008000000BF -:1045F00008000000000000000000000000000000B3 -:1046000000000000040000000000000000000000A6 -:104610000000000000000000000040000000090051 +:1045E00000000000000000000000000000000400C7 +:1045F000000000000000000000000000002000009B +:1046000000000000000000000000000000000000AA +:10461000000000000000000000000000000000009A :10462000000000000000000000000000000000008A -:104630000000000000000000090009000000000068 -:104640000000000000000000080000000000000062 +:10463000000000000000000000000000000000007A +:10464000000000000000000000000000000000006A :10465000000000000000000000000000000000005A -:1046600000000004000000400000004000050000C1 +:10466000000000000000000000000000000000004A :10467000000000000000000000000000000000003A -:104680000000080000000000000000000000000022 +:10468000000000000000000000000000000000002A :10469000000000000000000000000000000000001A :1046A000000000000000000000000000000000000A -:1046B00000000000100000000000000000000000EA +:1046B00000000000000000000000000000000000FA :1046C00000000000000000000000000000000000EA :1046D00000000000000000000000000000000000DA -:1046E00000000000000000000000000021000000A9 +:1046E00000000000000000000000000000000000CA :1046F00000000000000000000000000000000000BA :1047000000000000000000000000000000000000A9 :104710000000000000000000000000000000000099 -:1047200000840000000000000000000008000000FD +:104720000000000000000000000000000000000089 :104730000000000000000000000000000000000079 -:104740000000000000000300000000000000000066 +:104740000000000000000000000000000000000069 :104750000000000000000000000000000000000059 :104760000000000000000000000000000000000049 :104770000000000000000000000000000000000039 -:104780000000000000000000000000000000000029 +:104780000000000000000800000000000000000021 :104790000000000000000000000000000000000019 :1047A0000000000000000000000000000000000009 :1047B00000000000000000000000000000000000F9 -:1047C00000000000000000000000000000000500E4 -:1047D0000020000000200000000000000020000079 -:1047E000000000040900009000000000000000002C -:1047F0000000008400000090000408000000000099 -:104800000000000000000090000000000000000018 -:104810000000000040040000000003000000000051 -:1048200000000000009009000000000000000000EF -:10483000090000000000000000000000000000006F -:1048400000000000118820882000200200000000E5 +:1047C00000000000000000000000000000000000E9 +:1047D00000000000000000000000000000000000D9 +:1047E00000000000000000000000000000000000C9 +:1047F00000000000000000000000000000000000B9 +:1048000000000000000000000000000000000000A8 +:104810000000000000000000000000000000000098 +:104820000000000000000000000000000000000088 +:104830000000000000000000000000000000000078 +:104840000000000000000000000000000000000068 :104850000000000000000000000000000000000058 -:104860000000000000000000000008000000000040 -:1048700000000000000000000000000000410000F7 -:104880000000000000000000000000000000000028 +:104860000000000000000000000000000000000048 +:104870000000000000000000000000000000000038 +:104880000000000008000000000000000000000020 :104890000000000000000000000000000000000018 -:1048A00000000000000000000000000000000021E7 +:1048A0000000000000000000000000000000000008 :1048B00000000000000000000000000000000000F8 :1048C00000000000000000000000000000000000E8 :1048D00000000000000000000000000000000000D8 :1048E00000000000000000000000000000000000C8 :1048F00000000000000000000000000000000000B8 -:1049000000040000000000000000000000000000A3 -:104910000000000000000000000000002004000073 -:1049200000000000000002900000000010000000E5 +:1049000000000000000000000000000000000000A7 +:104910002100000041000000000000000000000035 +:104920000000000000000000000000000000000087 :104930000000000000000000000000000000000077 -:1049400000000000000000000000008810000000CF +:104940000000000000000000000000000000000067 :104950000000000000000000000000000000000057 :104960000000000000000000000000000000000047 :104970000000000000000000000000000000000037 @@ -115985,438 +115985,438 @@ :104F30000000000000000000000000000000000071 :104F40000000000000000000000000000000000061 :104F50000000000000000000000000000000000051 -:104F600000000000000000002000200040002000A1 -:104F700020000000000020000000000020000000D1 -:104F800021000100008021002000400000000000FE -:104F900020000000000020000100010020840080AB -:104FA000200000000000200000032000200000007E -:104FB00000002000000002000000000000000000CF -:104FC00000000000000000000000000000000000E1 -:104FD0000000000000000000000000000000400091 -:104FE000000000000000C00000004002009000C06F -:104FF00000000090000040000000000000020000DF -:105000000000200020020004200200020002000232 -:105010000002000000000002000020002000000448 -:10502000000400000000000000000000004000003C -:10503000000000000000000000020000000040002E -:10504000000200000000000000401000000000000E -:10505000000200024000000000000000400040008C -:1050600000000000000041000000000000000000FF +:104F60000000000000000000000000000000200021 +:104F700000002000000020000000000000002000D1 +:104F80000000000020000000000000008800000079 +:104F900000000000000000000000000000004000D1 +:104FA0000000000000004000000040000000000081 +:104FB00002002000000004000400000000000000C7 +:104FC0000000000040000000200020000000000061 +:104FD0002000000000002000200000000000000071 +:104FE0000000000020000000200000000000000081 +:104FF00000000000000000000000000000000000B1 +:10500000000400000000000000000000000000009C +:105010000000000000000000000000000000000090 +:10502000000000000000000200000000000000007E +:1050300000020000800000008000800000000000EE +:10504000000000002100000021900000000000008E +:105050000000000000000000000000000000000050 +:10506000000000000000000000040002000000003A :105070000000000000000000000000000000000030 -:1050800000000000000000000000054100000000DA -:10509000820000000100000000000000000000008D -:1050A0000000004020000004000400040000200074 -:1050B0000004000400042000200020002000040060 -:1050C000040000200020000000000000004001005B -:1050D000010001002100000000000010000000009D -:1050E00000000000000400000000000000000000BC -:1050F00000000000000000080000000000000000A8 -:10510000000000000000000000080000840800000B -:10511000200002000000100800080008000800003D -:105120000000000000008008000900010085000068 -:1051300080000001000100018008800880088008CC -:105140008000800000010001030800020000000050 -:105150000400040004008400000800842008000803 -:105160000000000000000001400800840008000862 -:1051700000000800000000000021040000080000FA -:105180000000000000000000000804000000100003 -:10519000000000000000000000000000000300000C -:1051A00000000002200000000000040004000400D1 -:1051B00000000000000040000000000000000000AF -:1051C00000050000000000000000100000000000CA -:1051D000000000000000000000000000000090003F -:1051E0000000900000000000000002008408C000E1 -:1051F00002000000000000000000000000000000AD -:10520000000000000000000000000000000000009E +:105080000000000000000000000000000000000020 +:10509000000000000000000000000000020000000E +:1050A00000000000000000000000010000000100FE +:1050B00001000100010001000500010001000100E4 +:1050C00001000500210000000000000000000000B9 +:1050D00000000000000000000000000000000000D0 +:1050E0000000000000000400040000200020000078 +:1050F00000000000000000000000000000000000B0 +:10510000000000000000000000000000000000009F +:10511000000000000000000000000000000000008F +:10512000000000000000000000000000040000007B +:1051300020002000200020000400A0000200200029 +:1051400020002000A00084000000000000000000FB +:10515000000000000000000020000000000000002F +:10516000000000000000000080008000000100013D +:10517000000000000000000000000000000000002F +:10518000000000000000000000000000000000001F +:10519000000000000000000000000000000000000F +:1051A00000000000000000000000000000000000FF +:1051B00000000000000000000000000000000000EF +:1051C00000000000000000000000000000000000DF +:1051D00000000000000000000000000000000000CF +:1051E00000000000000000000000000004000000BB +:1051F00000000000000000000000000000000000AF +:105200000000080000000000000000000000000096 :10521000000000000000000000000000000000008E :10522000000000000000000000000000000000007E -:10523000000000000020000000000000000000004E +:10523000000000000000000000000000000000006E :10524000000000000000000000000000000000005E :10525000000000000000000000000000000000004E -:1052600000000000000000000000000080000000BE -:1052700000008000000000000800000000000000A6 -:10528000000000000000000000000000000000001E -:105290000000C0000000000008000800000000003E -:1052A00085008280000000008800000000000000EF -:1052B000A00000000000000000000000000000004E -:1052C000000000000000000000000000A00000003E -:1052D00000000000000008000000000000000000C6 -:1052E0000000000000000300850001000100000034 +:10526000000000000000000000000000000000003E +:10527000000000000000000000000000000000002E +:105280000000000000000000080000000000000016 +:105290000000000000000000000008000000000006 +:1052A000000000000000000000008200000000007C +:1052B000C000A00000000000000008000000000086 +:1052C00000000004000000000000000008000000D2 +:1052D00000000000000000000000000000000000CE +:1052E00000000000000000000000000000000000BE :1052F00000000000000000000000000000000000AE :10530000000000000000000000000000000000009D :10531000000000000000000000000000000000008D -:105320000000200000040000000000000000000455 -:10533000000000000000000000000000000021004C -:1053400000002100000000000000000008880000AC -:105350000000000000000000000008000000000045 -:1053600008000000000000008200020002000200AD -:1053700000A0008800000000000000000000000005 -:105380000000000000000000080000008200000093 -:10539000000000000000000000000000000090007D -:1053A0000000000084000000000000020000000077 -:1053B000000020009040000000000000200040009D -:1053C000000000002000004000000000000000007D -:1053D0000000000000008400080000000000000041 -:1053E0000000000000001000000000800100030029 -:1053F00002000000008000800004000000000000A7 -:10540000000000000020000000200000000000005C -:105410000000040000000500000000000000000083 -:105420000000000000000500000000000000000077 -:10543000000000008000110100200000000080003A -:1054400000000000000080000001000000000000DB -:105450000000000004000000000000000000200028 -:1054600000000000000000000000000000400200FA -:1054700082008000000000400040000100000005A4 -:105480000000000500000008000000080000000007 -:1054900000000000000000000000000000000021EB -:1054A00000000000000000000000000000000000FC -:1054B00088000000000084008400820000000000DA -:1054C000A000A0000005000000000000081100007E -:1054D0000000000000400000000800080008000074 +:10532000000000000000000000000000000000007D +:10533000000000000000000000000000000000006D +:10534000000000000001000000000000000000005C +:10535000000000000000000000000000000000004D +:10536000000000000000000000000000000000003D +:10537000000000000000000000000000000000002D +:10538000000000000000000000000000000000001D +:10539000000000000000000000000000000000000D +:1053A0000000080000000000C00000000000A00095 +:1053B0000000000000000000000000000000A0113C +:1053C00084000000C0000000000000000000000099 +:1053D00000000000000000000000000000000000CD +:1053E00000000000000000000000000000000000BD +:1053F00000000000000000000000000000000000AD +:10540000000000000000000000000000000000009C +:10541000000000000000000000000000000000008C +:10542000000000000000000000000000000000007C +:10543000000000000000000000000000000000006C +:10544000000000000000000000000000000000005C +:10545000000000000000000000000000000000004C +:10546000000000000000000000000000000000003C +:10547000000000000000000000000000000000002C +:10548000000000000000000000000000000000001C +:10549000000000000000000000000000000000000C +:1054A00000000000000000000000080000000000F4 +:1054B00000000800000000000800000000000000DC +:1054C00090000000820000000000000000000000CA +:1054D00000000000000000000000000000000000CC :1054E00000000000000000000000000000000000BC -:1054F000020000000000010400842084010000007C -:105500000000000005000000000000000000000096 -:105510000000000000000000000000000000020089 +:1054F00000000000000000000000000000000000AC +:10550000000000000000000000000000000000009B +:10551000000000000000000000000000000000008B :10552000000000000000000000000000000000007B -:105530000000000000000000000003000000000266 +:105530000000000000000000000000000000000368 :10554000000000000000000000000000000000005B -:1055500000000000000000000800008800000000BB -:105560000000000000000000000000000002000039 -:105570000300C10005000500020100410041028254 +:10555000000000000000000000000000000000004B +:105560000000000000000300000000000000000038 +:10557000000000000000000000000000000000002B :10558000000000000000000000000000000000001B -:10559000000000000000000000000000000000010A -:1055A00000000000000000000100000000000000FA -:1055B000000000000000000141C0000000000000E9 -:1055C000000041C000000001000041C000000000D8 -:1055D00000010000000000000000000000000000CA +:10559000000000000000000000000000000000000B +:1055A00000000000000000000000000000000000FB +:1055B00000000000000000000000000000000000EB +:1055C00000000000000000000000000000000000DB +:1055D00000000000000000000000000000000000CB :1055E00000000000000000000000000000000000BB -:1055F000000000C000080000000000C0208401017D +:1055F00000000000000000000000000000000000AB :10560000000000000000000000000000000000009A -:105610000000000000000000000000080000020080 -:105620000004000000000000000011002100000044 -:1056300000000000001010000008919120200520BB -:1056400000090000918005054009000991910505B8 -:1056500040050040000000000000000000000000C5 +:10561000000000000000000000000000000000008A +:10562000000000000000000000000000000000007A +:10563000000000000000000000000000000000006A +:10564000000000000000000000000000000000005A +:10565000000000000000000000000000000000004A :10566000000000000000000000000000000000003A -:1056700000000000008000800000000000820003A5 -:105680000304000000000000000000000000000013 -:105690000000000000000000000000000000880082 -:1056A00000000400000000000000000000410900AC -:1056B000000300000000100020000000090020216D -:1056C0002011890900000900052105118909090037 -:1056D000052105118000000000800000008000000E -:1056E000000000000000000000800000000000003A -:1056F00000000000000000008000000080000000AA -:105700000200040080000000000000000000000013 +:10567000000000000000000000000000000000002A +:10568000000000000000000000000000000000001A +:10569000000000000000000000000000000000000A +:1056A00000000000000000000000000000000000FA +:1056B00000000000000000000000000000000000EA +:1056C0000000008000000011000000100000000435 +:1056D00000800040000000030000002000000000E7 +:1056E00000000000000000000000000000000000BA +:1056F00000000000000000000000000000000000AA +:105700000000000000000000000000000000000099 :105710000000000000000000000000000000000089 -:1057200003000000850000000000000000000001F0 -:105730000100000000000000000000000000010067 -:1057400000000001C0000000010000000001C000D6 -:10575000010000000001C000000000080000000877 -:1057600000000000000000000000000200000040F7 -:105770000000000000000000000010000000C00059 -:10578000000000000100C000000000000000000058 +:105720000000000000000000000000000000000079 +:105730000000000000000000000000000000000069 +:105740000000000000020000000000000001000056 +:10575000000100C000000040000000000000002028 +:105760000000000000000000000000000000000039 +:105770000000000000000000000000000000000029 +:105780000000000200000002000000000000000015 :105790000000000000000000000000000000000009 -:1057A00000000001200000010000000000000000D7 -:1057B0000000880000000100000000000000000060 -:1057C00000000001000003C0000000000001000014 -:1057D00003C000000001000003C100000000080039 -:1057E0000000000000000000000001000000C000F8 -:1057F00000000000000000000000000000000008A1 -:1058000001C00000000010C101C000000000000045 +:1057A00000000000000000000000000000000000F9 +:1057B00000000000000000000000000000000000E9 +:1057C00000000000000000000000000020000000B9 +:1057D000010000000400080000000000200090000C +:1057E00001000000000000000000000000000000B8 +:1057F00000000000000000000000000000000000A9 +:105800000000000000000800000000000000000090 :105810000000000000000000000000000000000088 -:105820000000000000100000000400000000000064 -:105830000000000000000000020000100000000056 -:1058400000400000000900209189000000000009CC -:105850000505918900000009000591C004000000C1 -:1058600080000000000000000000000010000000A8 -:105870008000200000000000000000000000000088 -:105880000080088000020005000404800000000081 +:105820000000000000000000000000000000000078 +:105830000000000000000000000000000000000068 +:105840000000000000000000000000000000000058 +:105850000000200020008000000005000000000083 +:105860000000030000000000000000000000000035 +:105870000000000000000000000000000000000028 +:10588000000000000900000080000000000000008F :105890000000000000000000000000000000000008 -:1058A00000000000000008090000040000000000E3 -:1058B0000000000000000011000000001000400087 -:1058C000000000002000200000800900000080008F -:1058D000050005800900A000050005800940004082 -:1058E0000021000000000000000000000000000097 -:1058F0000000000000000000000000000000800028 -:1059000000000000000082048300048000400000CA +:1058A00000000000000000000000000000000000F8 +:1058B00000000000000000000000000000000000E8 +:1058C00000000000000000000000000000000000D8 +:1058D00000000000000000000000000000000000C8 +:1058E0000040000000000000000000000000000078 +:1058F00000000000000000000000000000000000A8 +:105900000000000000000000000000000000000097 :105910000000000000000000000000000000000087 -:105920000000000000000000000000000100000076 -:105930000000000000000000000100000000000066 -:1059400000000000000000000000008401000000D2 -:10595000C000000000840100C100000000840101BB -:105960000001000000000000000000000000000036 +:105920000000000000000000000000000000000077 +:105930000000000000000000000000000000000067 +:105940000000000000000000000000000000000057 +:105950000000000000000000000020000000000027 +:105960000000000000000000000000000000000037 :105970000000000000000000000000000000000027 -:105980000800000000000000C001200001840000A9 +:105980000000000000000000000000000000000017 :105990000000000000000000000000000000000007 -:1059A0000000000000000000842100E0070000006B -:1059B0000000000000000000000000E00000810086 -:1059C000600000E000000000410000E00000000076 -:1059D0000000600000E000000000600000E0000047 -:1059E0000000000000008000000000000000000037 -:1059F00000000000008421000006000000000000FC -:105A000000000000008400000000840000E00000AE +:1059A00000000000000000000000000000000000F7 +:1059B00000000000000000000000000000000000E7 +:1059C00000000000000000000000000021000000B6 +:1059D000000000000084000000000000008421009E +:1059E00060000000008421000000000000000000B2 +:1059F00000000000000000000000000000000000A7 +:105A00000000000000000000000000000000210075 :105A10000000000000000000000000000000000086 :105A20000000000000000000000000000000000076 :105A30000000000000000000000000000000000066 -:105A400000000000000000000000FFFFFFFF00005A -:105A5000AAAA00000000FFFF0000AAAA0000FFFFA2 -:105A60000000AAAA000000000000000000000000E2 +:105A40000000000000000000000000000000000056 +:105A500000000000000000000000000000FF000047 +:105A60000000000000000000000000000000000036 :105A70000000000000000000000000000000000026 -:105A8000000000000000FFFF000000FF000000FF1A -:105A9000000000FF00000000000000000000000007 +:105A80000000000000000000000000000000000016 +:105A90000000000000000000000000000000000006 :105AA00000000000000000000000000000000000F6 :105AB00000000000000000000000000000000000E6 :105AC00000000000000000000000000000000000D6 -:105AD0000000AAAA0000000000000000AAAA00001E -:105AE00000000000AAAA0000000000000000000062 +:105AD000000000000000000000000000000000FFC7 +:105AE00000000000000000000000000000000000B6 :105AF00000000000000000000000000000000000A6 -:105B00000000000000000000FFFF000000FF000098 -:105B100000FF000000FF0000000000000000000087 +:105B00000000000000000000000000000000000095 +:105B10000000000000000000000000000000000085 :105B20000000000000000000000000000000000075 -:105B3000000000000F0F0000000000000000000047 -:105B400000000000000000000000000000005555AB -:105B50000000FFFF0000000055550000FFFF00009F -:105B6000555500000000FFFF00000000000000008D +:105B30000000000000000000000000000000000065 +:105B40000000000000000000000000000000000055 +:105B50000000000000000000000000000000000045 +:105B60000000000000000000000000000000000035 :105B70000000000000000000000000000000000025 -:105B80000000000000000000FF0000000F0F0000F8 -:105B9000FF000000FFFF0000000000000000000008 +:105B80000000000000000000000000000000000015 +:105B90000000000000000000000000000000000005 :105BA00000000000000000000000000000000000F5 -:105BB0000000000000000F0F0000000000000000C7 +:105BB00000000000000000000000000000000000E5 :105BC00000000000000000000000000000000000D5 -:105BD0005555000000000000000055550000000071 -:105BE000000055550000FFFFFFFF0000000000000F +:105BD00000000000000000000000000000000000C5 +:105BE00000000000000000000000000000000000B5 :105BF00000000000000000000000000000000000A5 -:105C000000000000000000000000FF0000000F0F77 -:105C10000000FF0000000000000000000000000085 +:105C00000000000000000000000000000000000094 +:105C10000000000000000000000000000000000084 :105C20000000000000000000000000000000000074 -:105C30000000006100298001000000000000000059 -:105C4000000000600006000C0000006100018001FF -:105C500000004063800180219202000040E3800147 -:105C60008021920240E380018021820205000A081F -:105C7000050000A0000000000000000005610A0609 -:105C8000050D00A000000000000000004063800639 -:105C9000002D920240E3800180219202000000006A +:105C30000000000000000000000000000000000064 +:105C40000000000000000000000000000000000054 +:105C5000000000000000000000A00000006100063D +:105C6000000D000015610A06050D00A00061000688 +:105C7000050D00A000000000000000000000000072 +:105C80000000000000000000000000000000000014 +:105C90000000000005000A00050000A00000000050 :105CA00000000000000000000000000000000000F4 -:105CB00000000000C300C300F0F00000000000007E -:105CC0000000000000000000FFFF00000000FF00D7 -:105CD0000000C3C300003C00000000000000000CF6 -:105CE000000C00000000000C003C00000000000060 +:105CB00000000000000000000000000000000000E4 +:105CC00000000000000000000000000000000000D4 +:105CD00000000000000000000000000000000000C4 +:105CE00000000000000000000000000000000000B4 :105CF00000000000000000000000000000000000A4 :105D00000000000000000000000000000000000093 -:105D10000000000000000000F000C000C000000013 +:105D10000000000000000000000000000000000083 :105D20000000000000000000000000000000000073 -:105D3000000000000000C300C300F0F000000000FD +:105D30000000000000000000000000000000000063 :105D40000000000000000000000000000000000053 -:105D5000FF000000C3C300003C3CF0F000F0000076 -:105D6000003C003CF0F000F0000C003CF0F000F0D3 +:105D50000000000000000000000000000000000043 +:105D60000000000000000000000000000000000033 :105D70000000000000000000000000000000000023 :105D80000000000000000000000000000000000013 -:105D900000000000000000000000F000C000C00093 +:105D90000000000000000000000000000000000003 :105DA00000000000000000000000000000000000F3 -:105DB0000000000000000000C3C30000F0F000007D -:105DC000000000000000000000000000F0F00000F3 -:105DD000003C003C000F000F00CF00000C0C000C3A -:105DE0000000000F000F0C0C000C00CF0000040C92 -:105DF000040C000000000000000000000000000093 +:105DB00000000000000000000000000000000000E3 +:105DC00000000000000000000000000000000000D3 +:105DD00000000000000000000000000000000000C3 +:105DE00000000000000000000000000000000000B3 +:105DF00000000000000000000000000000000000A3 :105E00000000000000000000000000000000000092 -:105E1000000000000000000000000000F0000A0088 -:105E20000A00000000000000000000000000000068 -:105E300000000000000000000000C3C30000F0F0FC -:105E40000000000000000000000000000000F0F072 -:105E50000000003C003C000F000F00CF00000C0CC5 -:105E6000000C0000000300030C0C000C00CF00002D -:105E7000040C040C00000000000000000000000002 +:105E10000000000000000000000000000000000082 +:105E20000000000000000000000000000000000072 +:105E30000000000000000000000000000000000062 +:105E40000000000000000000000000000000000052 +:105E50000000000000000000000000000000000042 +:105E60000000000000000000000000000000000032 +:105E70000000000000000000000000000000000022 :105E80000000000000000000000000000000000012 -:105E90000000000000000000000000000000F00012 -:105EA0000A000A0020082000200000002000400016 -:105EB0002000200020000000200020000000200022 -:105EC00020000000880020002000000020002000AA -:105ED000200020002000000020002000040004001A -:105EE0004000040000030400040020000000200023 -:105EF00000000000000004008800200004000400EE -:105F00000400000004008800000000000000000001 -:105F1000000001000000200004002000200000001C -:105F2000000002004000000200900002009000000B -:105F3000000000001000000200020000000200C08B -:105F40000000000000000000000000001000000041 -:105F500000000000000000000000000200008000BF -:105F600080000000800000008090800000000000A1 -:105F700000000000200000028002000000008000FD -:105F800080008000000020004000000000000000B1 -:105F900000000000200000028000800080028000DD -:105FA00000000000A1000000000000000000000848 -:105FB0000004000000000040020400000040000057 -:105FC00000000204004020102000200000002000FB -:105FD00082000000000000400000000021000000DE -:105FE00000000000010000000000000000000100AF -:105FF000000003000000000000400000000000005E -:10600000000001000100010001400000010000004B -:106010000100000000000000094001000100010033 -:1060200001000200000000000040004000080008DD -:10603000020000080008000000080009000800082D -:1060400000080040000940088008804080400008A7 -:106050008208000800080008000802080008C008BC -:10606000000800000008040800080000000000000C -:106070000408000810080008008800080008050847 -:1060800000080008020002080408040800000200DA -:106090000008040800080008000020080408200880 -:1060A000040804082000200800080008400400003C -:1060B00000040000000000000008000000000000D4 -:1060C00000040000100084000000000000004000F8 -:1060D0000000000000000000000000004000000080 -:1060E000000000000000000000000000000000218F -:1060F000000000110000040010000000000000215A -:10610000000000000400000000000000000000216A -:10611000000000000000000001000100010000413B +:105E90000000000000000000000000000000000002 +:105EA0000000000000000000200000002000400072 +:105EB0002000400000002000200020000000200002 +:105EC000200020004000880020000000000020008A +:105ED0000000200000002000000000000000000082 +:105EE0000000100000002000000000000000000082 +:105EF00000000000000000000000000000000000A2 +:105F0000000000002000C000400040000000000031 +:105F10000000000000000000000000000000000081 +:105F20000000400020000000000000000000000011 +:105F30000000000020000002000200020000000239 +:105F40000000000000000000000000000000000051 +:105F50000000000000020000000000041002000029 +:105F6000000000020000000000000000000000002F +:105F70000000000000001000000000000000000011 +:105F8000000000000000000020004100410000006F +:105F90000000000000000000000000000000000001 +:105FA00000000000000000000000000000000000F1 +:105FB00000000000000000000000000000000000E1 +:105FC00000000000000000000000000000000000D1 +:105FD00000000000000000000000000000000000C1 +:105FE00000000000000000000000000000000000B1 +:105FF000000000000000010001000000000000009F +:106000000000000000000000000000000000000090 +:106010000100000000000000024000000000000439 +:1060200000800000000000000000000000000000F0 +:106030000000000000000000000000000000000060 +:106040000008000000080000000000000000000040 +:106050000000000000000000000000000000000040 +:106060000008000000080000000000000000000020 +:1060700000000000000000002000200000000000E0 +:1060800000000008000000080000020000000000FE +:1060900000002000000000000000090100000000D6 +:1060A00000010004000000080000020000000000E1 +:1060B00000000000000000000000000000000000E0 +:1060C00000000000000000000000000000000000D0 +:1060D00000000000000000000000000000000000C0 +:1060E00000000000000000000000000000000000B0 +:1060F00000000000000000000000000000000000A0 +:10610000000000000000000000000000000000008F +:10611000000000000000000000000000000000007F :10612000000000000000000000000000000000006F :10613000000000000000000000000000000000005F -:10614000000011010000000000000000000000003D -:106150000000110000000000000005000000000029 -:106160000300030000000084008200000000000023 -:10617000000000000000000000000000000000001F -:1061800000000000410000000000000000002100AD -:1061900000000000000000000004200004000400D3 -:1061A00000000400080000000000000005000000DE -:1061B00000000000000000000000000010000000CF -:1061C000C0000040000000800804100082000000B1 -:1061D0000800A0000204000082008200820000008B -:1061E00000000000000000000000000000000000AF -:1061F0000000000008000000010000000000110085 -:1062000000800821010001000000000008001000CB -:106210001000000000000800C000050082200400FB -:1062200004000080400000000000000000000000AA -:1062300000000000004000A000000000000000007E -:106240000000000000000000000400010000000049 -:106250000000000000000001000400000000000039 -:106260000000000000000000000000000800000026 -:10627000000000000800000000000400000008000A -:1062800020000004000004000400000008000000DA -:10629000000000000800080000000000A00000014D -:1062A0008000800000028800000000000000000064 -:1062B00000000000000000000000000000000800D6 -:1062C00000000000000020009040000000002000BE -:1062D000000000000000200000000000000000009E -:1062E000000000008200000000000000000000002C -:1062F0000800000000000004000000009000000002 -:106300000000A000080000000000A000000008003D -:106310000000080000000000C000000000000800AD -:106320000000820000000820840000210800000214 -:1063300010118200080000000000000000000000B2 -:10634000000000000000000080000001000040008C -:1063500080200000000000008000000000C000005D -:106360000000008400000090000000000000000019 -:10637000000000900000000000000000000000008D -:10638000000000000000000000000000000000000D -:1063900000000000000000000000000000001000ED -:1063A0000004000000040000008400000000000061 -:1063B00000010000000000000000000000090000D3 -:1063C00000000000000000000000010000000000CC -:1063D00000008405008001050000000400000009A1 -:1063E00000000000000000000000000000020000AB -:1063F000000000000000000000000021C000840038 -:1064000000000000A000040000000000A000000048 -:106410000800000000008200900000000000000062 -:1064200000002000200000000000004100000000EB -:106430008400824110000000822000000000000063 -:10644000000000000000000000000000200000002C -:106450000200000000000004200400000000000012 +:10614000000000000000000000000000000000004F +:10615000000000000000000000000000000000003F +:1061600000000000000000004100000008000000E6 +:10617000210000004100000000004100210041001A +:10618000000000000000000000000000000000000F +:1061900000000000000000000000000000000000FF +:1061A00000000000000000000000000000000000EF +:1061B00000000000000000000000000000000000DF +:1061C0000000A0000000000000000000000000002F +:1061D00000000000000000000800000000000000B7 +:1061E00000000000080000000000000000000000A7 +:1061F000000000000000000000000000010000009E +:106200000000010001000000A100000000000000EB +:10621000C00000800080008000800080008000803E +:10622000000000000000000000000000000000006E +:10623000000000000000000000000000000000005E +:10624000000000000000000000000000000000004E +:10625000000000000000000000000000000000003E +:10626000000000000000000000000000000000002E +:10627000000000000000000000000000000002001C +:106280000000000002000200000002000000000008 +:10629000000000000040004000400040004000407E +:1062A00000400000000000000000000000000000AE +:1062B00000000000000000000000000000000000DE +:1062C00000000000000000000000000000000000CE +:1062D00000000000000000000000000000000000BE +:1062E0000000000000000000A00000000000080006 +:1062F0000000A0000000C0000000A000000000009E +:10630000080000000000C0000000000000000000C5 +:10631000000000000000000000000000000000007D +:10632000000000000000000000000000000000006D +:10633000000000000000000000000000000000005D +:10634000000000000000000000000000000000004D +:10635000000000000000000000000000000000003D +:10636000000000000000000000000000000000002D +:106370000000000000000000000008000300000012 +:106380000000000000000000000008000000000005 +:1063900000000000000000000000000000000000FD +:1063A00000000000000000000000000000000000ED +:1063B00000000000000000000000000000000000DD +:1063C00000000800000000000000000000000000C5 +:1063D00000000000000000000000000000000000BD +:1063E000000000000800000000000000000008009D +:1063F000820000000800000000000000000008000B +:106400000000000000000000080000000000010083 +:106410000000010001000100010000000000000078 +:10642000000000000000000000000000000000006C +:106430000000000000000005000000000000000057 +:10644000000000000000000000000000000000004C +:10645000000000000000000000000000000000003C :10646000000000000000000000000000000000002C -:1064700000000000000000000000000200A000007A +:10647000000000000000000000000002000000001A :10648000000000000000000000000000000000000C -:1064900000000000000000000000000000000000FC -:1064A00000000000800080000000000008C0000024 +:1064900002000000020002000200020000000000F2 +:1064A00000000000000000000000000000000000EC :1064B00000000000000000000000000000000000DC -:1064C00000000000000000000000000041C00000CB -:1064D0009101000041C000000101000041C0040121 -:1064E00001010001000000000000000000000000A9 -:1064F0000000000000080040000000000000000252 -:106500000020000000000100000000000000000268 -:10651000000000200000000000000000000000005B -:106520000000000000000208002100000000000040 -:106530000000100000010290008200A090C0000046 -:106540000000000000000000000000000000919129 -:1065500009090810000991802009080900099180A3 -:106560008504050900200000000000000000000074 -:106570000000020000000080000000000000000099 -:1065800000000000000000001100210000000000D9 +:1064C00000000000000000000000000000000000CC +:1064D00000000000000000000000000000000000BC +:1064E00000000000000000000000000000000000AC +:1064F000000000000000000000000000000000009C +:10650000000000000000000000000000000000008B +:10651000000000000000000000000000000000C0BB +:1065200000000000008800C000000000008800009B +:10653000000000000000000000000000000000005B +:10654000000000000000000000000000000000004B +:10655000000000000000000000000000000000003B +:10656000000000000000000000000000000000002B +:10657000000000000000000000000000000000001B +:10658000000000000000000000000000000000000B :1065900000000000000000000000000000000000FB -:1065A000000000000000000080890002110040008F -:1065B000051121200011002180000040000300038C +:1065A00000800000000000000080000000000000EB +:1065B00000000000000000000000000000000000DB :1065C00000000000000000000000000000000000CB -:1065D00009000921101189090900092100118909FF -:1065E000090004210311A0030000000000000000C6 -:1065F00020000400000000008000000000000000F7 -:10660000000000000010000000000041090000032D -:1066100000000000002000000000000000800000DA -:1066200000000000000080000080890000001000D1 -:106630000000204000800440200000000090000086 -:10664000808000000000000000000000000000004A -:106650000000010000000101C00001000000000175 -:10666000C000010001000101C18500000000000020 -:106670000000000000000000000008000000000012 -:106680000000000000000201000000000001010005 -:1066900000000000200002000000000000002004B4 -:1066A000000000C00000000004000004080000001A -:1066B0000100000001890084000000A0200040C10A -:1066C000888208C0000000000000000000000000F8 -:1066D0000000000000000001900003C00000000066 -:1066E000000103C000000001000103C10000000020 -:1066F0000000000000000000000000000008000092 -:10670000004000000000000200082000000000001F -:106710008800000001000002009008000000000056 -:10672000008282000000000000000000000000085D -:10673000000120000000010120010201010009C048 -:106740000002C1C004A00000000000000000000022 -:106750000000000000000000000900009189000016 -:1067600020090003918900000504000391A00000A6 -:106770000000000000000000000000000000008099 +:1065D00000000000000000000000000000000000BB +:1065E00000000000000000000000000000000000AB +:1065F000000000000000000000000000000000009B +:10660000000000000000000000000000000000206A +:10661000000000000000000000000000000000007A +:10662000800000000000000080000000001000005A +:1066300080000000000000090000000000000000D1 +:10664000000000000000000000000000000000004A +:10665000000000000000000000000000000000003A +:10666000000000000000000000000000000000002A +:10667000000000000000000000000000000000001A +:10668000000000000000000000000000000000000A +:1066900000000000000000000000000000002000DA +:1066A0000000C000000000000000C0000000000169 +:1066B0000000C0000000000000000000000000001A +:1066C00000000000000000000000000000000000CA +:1066D00000000000000000000000000000000000BA +:1066E00000000000000000000000000000000000AA +:1066F000000000000000000000000000000000009A +:106700000000000000000000000000000000000089 +:106710000000000001000000000000000000000078 +:1067200000000000000000900000000000C0008891 +:106730000000000000C00000000000000000000099 +:106740000000000000000000000000000000000049 +:106750000000000000000000000000000000000039 +:106760000000000000000000000000000000000029 +:106770000000000000000000000000000000000019 :106780000000000000000000000000000000000009 -:1067900000000000000002000000000000000000F7 -:1067A0000300008000002000000000000000000046 -:1067B0000089001000000000021085109021104098 -:1067C0004100008085008300000000000000000000 -:1067D00000000000000000004100090000800900E6 -:1067E000A000090900800900800004092080090038 -:1067F0000000000000000000000000000000004059 -:10680000800000110080000000000008002100004E -:106810000000000000110000000000000041000026 -:106820000000000000000000000000000000000068 -:10683000000089000011100000002003200011005A -:10684000094000000000008000000000000000007F -:1068500000000000000000000000000000000084B4 -:106860000100C020000100840100C000010101847A -:106870000100000000000000000000020000000015 -:10688000000008009000000200000000020000006C -:1068900000200000000000010000000002000000D5 -:1068A00000000000000000000000000000000000E8 -:1068B00000000000080000082100000001000100A5 -:1068C0000000000082009004200882000000000008 -:1068D000000000000000000000000000410000E097 -:1068E00000000000600000E000000000410000E047 -:1068F000000000000000000000000000000000E0B8 -:1069000000000000000A0000070000000000002155 -:10691000000007000000000000E000008100000609 -:10692000000007000000000000002100000000003F -:10693000000021000000842100E0070000000000AA -:106940000084210000000000000000004842000018 -:106950000000000000000000000000000000FFFF39 -:10696000FFFF66660000FFFF000066660000FFFF95 -:10697000000066660000000000000000000000004B -:106980000000000000000000FF00C300C300000082 -:106990000000FFFFC0C0C0C00000000000000000F9 -:1069A0000000FFFFC0C0C0C0000000000000F0F009 -:1069B00000000000000000000000F0F042424242EF -:1069C0000000000000000000280000282200110044 +:1067900000000000000010000000000000000000E9 +:1067A0000000000000000000000000000000408029 +:1067B0000000000000000080000000000000100049 +:1067C00000000000000000000000000000000000C9 +:1067D00000000000000000000000000000000000B9 +:1067E00000000000000000000000000000000000A9 +:1067F0000000000000000000000000000000000099 +:106800000000000000000000000000000000000088 +:106810000000000000000000000000000000000078 +:1068200000000000000000000000800000000000E8 +:1068300000008000000000000000000000000000D8 +:106840000000000000000000000000000000000048 +:106850000000000000000000000000000000000038 +:106860000000000000000000000000000000000028 +:106870000000000000000000000000000000000018 +:106880000000000000000000000000000000000008 +:1068900000000000000000000000000000000000F8 +:1068A000000000000000000000000000C00000A088 +:1068B00088000000C0000000000800000000000088 +:1068C00000000000000000000000000000000000C8 +:1068D00000000000000000000000000000000000B8 +:1068E00000000000000000000000000000000000A8 +:1068F0000000000000000000000000000000000098 +:106900000000000000000000000000000000000087 +:1069100000000000000000000084000000000000F3 +:106920000000000000000000000000000000000067 +:1069300000840000000000000000000000000000D3 +:1069400000840000000000000000000000000000C3 +:106950000000000000000000000000000000000037 +:106960000000000000000000000000000000000027 +:106970000000000000000000000000000000000017 +:106980000000000000000000000000000000000007 +:1069900000000000000000000000000000000000F7 +:1069A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7 +:1069B0000F0FFFFFC3C3FFFF0000FFFFC3C3FFFFB5 +:1069C00000000000000000000000000000000000C7 :1069D00000000000000000000000000000000000B7 -:1069E000000000006666000000000000666600000F -:1069F00000000000666600000000000000000000CB -:106A000000000000000000000000FF00C300C30001 -:106A1000000000000000C0C0C0C000000000000076 -:106A2000000000000000C0C0C0C000000000000066 -:106A3000F0F000000000000000000000F0F0424212 -:106A4000424200000000000000004100004100221E -:106A50000011000000000000000000000000000025 +:1069E00000000000000000000000000000000000A7 +:1069F0000000000000000000000000000000000097 +:106A00000000000000000000000000000000000086 +:106A10000000000000000000000000000000000076 +:106A20000000FFFFFFFFFFFFFFFFFFFFFFFFFFFF74 +:106A3000FFFF0F0FFFFFC3C3FFFFFFFFFFFFC3C336 +:106A4000FFFF000000000000000000000000000048 +:106A50000000000000000000000000000000000036 :106A60000000000000000000000000000000000026 :106A70000000000000000000000000000000000016 :106A80000000000000000000000000000000000006 @@ -116425,273 +116425,273 @@ :106AB00000000000000000000000000000000000D6 :106AC00000000000000000000000000000000000C6 :106AD00000000000000000000000000000000000B6 -:106AE00000000000000066660000FFFF0000666610 -:106AF0000000FFFF00006666FFFF000000000000CE -:106B000000000000000000000000000000FF000086 -:106B1000C3C3C3C3000000FF0000F0F0F0F00000AA -:106B20000000000000000F0F000030303030000087 -:106B300000000F0F00000000000000FF000000FF39 -:106B4000000042424242000000000000000000A09D -:106B500000051020080400000000000000000000F4 -:106B60000000000000000000666600000000000059 -:106B700066660000000000006666FFFFFFFF000081 -:106B8000000000000000000000000000000000FF06 -:106B9000000000000000000000FF000000000000F6 -:106BA00000000000000000000F0F00003030303007 -:106BB000000000000F0F00000000000000FF0000B8 -:106BC00000FF0000424242420000000000000000BE -:106BD000A00005008040010200000000000000004D -:106BE000000000000000000040638001802192024C -:106BF00040E380018021920240E3800180218202F3 -:106C00000000000000000000006100070005000017 -:106C10000000002800000000000000000028000024 -:106C2000000000600006000C0000000000280000CA -:106C3000000005000A00054000A800000000000058 -:106C400000A8006100298001000005610A06050D09 -:106C500000A060610006000D1000000000000000B0 -:106C60000000000000000000000000003C3C0000AC -:106C7000505000003C3C00000000000000000000FC +:106AE00000000000000000000000000000000000A6 +:106AF0000000000000000000000000000000000096 +:106B00000000000000000000000000000000000085 +:106B10000000000000000000000000000000000075 +:106B20000000FFFFFFFFFFFFFFFFFFFFFFFFFFFF73 +:106B3000FFFFFFFFF0F0FFFFC3C3FFFF9999FFFFC7 +:106B4000C3C30000FFFF00000000000000000000C1 +:106B50000000000000000000000000000000000035 +:106B60000000000000000000000000000000000025 +:106B70000000000000000000000000000000000015 +:106B80000000000000000000000000000000000005 +:106B900000000000000000000000000000000000F5 +:106BA00000000000FFFFFFFFFFFFFFFFFFFFFFFFF1 +:106BB000FFFFFFFFFFFFF0F0FFFFC3C3FFFF999947 +:106BC000FFFFC3C300000000000000000000000041 +:106BD00000000000000000000000000000000000B5 +:106BE00000000000000000000000000000000000A5 +:106BF0000000000000000000000000000000000095 +:106C00000000000000000000000000000000000084 +:106C10000000000000000000000000000000000074 +:106C2000000000610006000D1002400080000020FE +:106C30001002400080000020120240E38006002D78 +:106C400092024082800000208A0200610006000D4E +:106C50000000000000000000000000000000000034 +:106C60000000000000000000000000000000000024 +:106C70000000000000000000000000000000000014 :106C80000000000000000000000000000000000004 :106C900000000000000000000000000000000000F4 -:106CA0000000000000000000FFFF000000000000E6 +:106CA00000000000000000000000000000000000E4 :106CB00000000000000000000000000000000000D4 -:106CC0000000000000000F0FC0C0C0C00000004066 +:106CC00000000000000000000000000000000000C4 :106CD00000000000000000000000000000000000B4 -:106CE0000000000000000000000000000000003C68 -:106CF000505050500000003C000F00FF0C3C0C3C7A -:106D0000000F00FF00000000000000000000000075 +:106CE00000000000000000000000000000000000A4 +:106CF0000000000000000000000000000000000094 +:106D00000000000000000000000000000000000083 :106D10000000000000000000000000000000000073 :106D20000000000000000000000000000000000063 :106D30000000000000000000000000000000000053 -:106D400000000000000000000F0FC0C0C0C0000025 -:106D500000400001000000000000000000000000F2 -:106D6000000000000000000000000000000030F003 -:106D700000000C003C00080A080A00000000080A95 -:106D8000080A0C003C0000000000000000000000A9 -:106D90000000FFFFFFFF00000000000000000000F7 -:106DA000000000000000000000000000F0F0000003 +:106D40000000000000000000000000000000000043 +:106D50000000000000000000000000000000000033 +:106D60000000000000000000000000000000000023 +:106D70000000000000000000000000000000000013 +:106D80000000000000000000000000000000000003 +:106D900000000000000000000000000000000000F3 +:106DA00000000000000000000000000000000000E3 :106DB00000000000000000000000000000000000D3 -:106DC00000000000000000000000FF0000C300C33E -:106DD0000000000041000000000000000000000072 +:106DC00000000000000000000000000000000000C3 +:106DD00000000000000000000000000000000000B3 :106DE00000000000000000000000000000000000A3 -:106DF00030F000000C003C00080A080A0C0C3C3C77 -:106E0000080A080A0C003C00000000000000000016 -:106E1000000000003A3A3A3A00000000000000008A -:106E20000000000000000000000000000000F0F082 +:106DF0000000000000000000000000000000000093 +:106E00000000000000000000000000000000000082 +:106E10000000000000000000000000000000000072 +:106E20000000000000000000000000000000000062 :106E30000000000000000000000000000000000052 -:106E4000000000000000000000000000FF0000C380 -:106E500000C3000000084100000000C000C00000A6 -:106E6000000020008800208000002000200020007A -:106E7000200040004000200088002000200020006A -:106E800020002000200020008800000000002000DA -:106E90002000000020002000200000000000200052 -:106EA0008800000320808900208410808500000075 -:106EB0002000840000002000200088000000000066 -:106EC000200088002000000088000000040000006E -:106ED0000000880005000500050005000000840092 -:106EE00004004000004000000020000000020000FC -:106EF00000001000000010000000000000020090E0 -:106F0000000000020000000000020002000000007B -:106F1000000200000002409000000000000000009D -:106F200000000000000000200400002000200402F7 -:106F300000020002400200000000000000004000CB -:106F4000000005020000400040002040000020003A -:106F50000002000000002000200020C020000000EF -:106F6000400040000000004002000440000000001B +:106E40000000000000000000000000000000000042 +:106E50000000000000000000000000000000000032 +:106E60000000000000000000000000000000200002 +:106E700000000000000020000000000000000000F2 +:106E80002000000000000000C0040000000000001E +:106E9000000000000000000088000000000000006A +:106EA00000000000000000000000200000000000C2 +:106EB000820004000000020004000000040004003E +:106EC00004000000040004000400040000000000AE +:106ED00020002000000020002000000020002000F2 +:106EE0002000000000000000000000000000000082 +:106EF0000000000000000000000000000000000092 +:106F00000000000000000000000010000000000071 +:106F1000000010001000000000020002000000004D +:106F20000000000000000000000000000000000061 +:106F30004000000000000000800000000000000091 +:106F40000000000000000000000000000000000041 +:106F5000000000900000000040000000000040041D +:106F60000000000000000000000000000000000021 :106F70000000000000000000000000000000000011 -:106F800000000000000000000000000008000000F9 -:106F900000000000020000000800041008000000CB -:106FA00000050000000000000000000000100010BC -:106FB00004000000000000100000000000000000BD -:106FC00000000000080000000000000000000200B7 -:106FD00000000000000002000000000000000000AF -:106FE0000000000000000800000000008008000809 -:106FF0000000000800000000000000080000000081 -:107000000004000400080008000000000008000858 -:1070100000000084001000100000000800000000C4 -:10702000040000000002000800000000000000084A -:1070300000088000000000000000000000080000C0 -:10704000000000000008000000040000000000082C -:10705000001000000000000000000000008200009E -:107060000000000000080000000000000000900286 -:10707000000000004000002100410000000000006E -:10708000000090000000044000000000000000002C +:106F80000000000000000000000000000000000001 +:106F900000000000000000000000000000000000F1 +:106FA00000000000000000000000000000000000E1 +:106FB00000000000000000000000020000000000CF +:106FC00000000000000000000000000000000000C1 +:106FD0000000000000100010000000000010001071 +:106FE0000010000000100010000000000000000071 +:106FF000000000820082000000000000000000008D +:10700000000000000000000400000000000000007C +:107010000000000000000000000000000000000070 +:107020000000000000000000000000000000000060 +:1070300000000000000000000000040084000000C8 +:1070400004004000000000000400000009000000EF +:107050000000000000000000000000000000000030 +:107060000000000000000000000000000000000020 +:107070000000000000000000000000000000000010 +:107080000000000000000000000000000000000000 :1070900000000000000000000000000000000000F0 -:1070A00000000000000800000000000000000000D8 -:1070B000A000000000000009000000000000000027 -:1070C00000000000000000000000000000000000C0 +:1070A00000000000000000000000000000000000E0 +:1070B000000000000000000000008200000000004E +:1070C0000000000088000000A000A00000000000F8 :1070D00000000000000000000000000000000000B0 :1070E00000000000000000000000000000000000A0 -:1070F000000000000000000000000000000003008D +:1070F0000000000000000000000000000000000090 :10710000000000000000000000000000000000007F -:107110000300000003000000000000000000000069 -:107120000000000000000300410008000000000013 -:107130000000000000000300210003000000000028 -:107140000300000008000000000000000000000034 -:107150000300030005000000030000000800030016 -:107160000000400008002100009000900000000096 -:1071700008000000A04000000000820000000000A5 -:107180000000100008001000000082000000000055 -:107190000000000000000000080082000400A000C1 -:1071A000C000000000000800000082000000000095 -:1071B000C0004000A000080000000000000008001F -:1071C0000000400082000000000040004000080075 -:1071D00040000000820000004000400082000000EB -:1071E0000000081108000000000000000000080076 -:1071F000000000000084000000000000008400087F -:1072000011000000000000000000000000000090DD -:10721000000000000000000000000010000000005E -:10722000000000000000000000000000000002005C +:10711000000000000000000000000000000000006F +:10712000000000000000000000000000000000005F +:10713000000021000000000000000000000000002E +:1071400005000000000041000900410000000000AF +:10715000000000000000000000000000000000002F +:1071600000000000000000000000000000A000007F +:10717000000000000000000000000000000000000F +:1071800000000000000000000000000000000000FF +:1071900000000000100000000000080000000000D7 +:1071A00000000000000000000000A0000800000037 +:1071B000000010001000100000000000000000009F +:1071C00000001000000008000000000000000000A7 +:1071D00000000000000008000000000000000000A7 +:1071E000000000000000820000000000000000001D +:1071F000000000000000000000000000000000008F +:10720000000000000000000000000000000000007E +:10721000000000000000000000000000000000006E +:10722000000000000000000000000000000000005E :10723000000000000000000000000000000000004E :10724000000000000000000000000000000000003E -:107250000000000000000000080000000000000026 -:10726000000000000000000000000000000000001E +:10725000000000000000000000000000000000002E +:10726000000000000000000000000400000000001A :10727000000000000000000000000000000000000E :1072800000000000000000000000000000000000FE -:1072900000000000000000000000000000001000DE -:1072A0000000000000000000100000000800C00006 -:1072B0000000000000000000A0000400000000002A -:1072C00000000000000000000000000000000000BE -:1072D00000000000000000000000000000000000AE +:1072900000000000000000000000000000000000EE +:1072A00000000000000000000000000000000000DE +:1072B00000000000000000000000000000000000CE +:1072C000000000000000820000001000000000002C +:1072D000000000000041000000410000000000002C :1072E000000000000000000000000000000000009E -:1072F0000800000000000000000000000000000086 -:1073000000000000000003000040008400000000B6 -:10731000000000C0000000000004000000000000A9 -:107320000000000008000000000000000000050050 -:1073300041000000000003000000090000C0000040 -:1073400000000084000003000000000000000000B6 -:10735000000000000000000000000000000005C068 -:1073600021000500000021000000210008000300AA -:107370000300039021000000000000000000000056 -:1073800000400008000000000000000900000000AC -:1073900000000000004100000000000000000800A4 -:1073A00000000000000000000000000000000000DD -:1073B0000000C00000000000000008000000000005 -:1073C00000000000000000000000000000020000BB -:1073D00000000000000000000000080000000000A5 -:1073E0004000000008000000400000008200900003 +:1072F000000000000000000000000000000000008E +:10730000000000000000000000000000000000007D +:10731000000000000000000000000000000000006D +:10732000000000000000000000000000000000005D +:10733000000000000000000000000000000000004D +:10734000000003000000000000000000000000003A +:107350000000000000000002000000000390400454 +:107360000004000000000000000000000000000019 +:10737000000000000000000000000000000000000D +:1073800000000000000000000000000000000000FD +:1073900000000000000000000000000000000000ED +:1073A00000000000000000000000080000000000D5 +:1073B000000082000000000000000000000000004B +:1073C00000000000000000000000000082008200B9 +:1073D000000000000000000000000041000000006C +:1073E000000000000000000000000000000000009D :1073F000000000000000000000000000000000008D -:10740000000000000000001000000000000000006C -:1074100000900000110000000000000000000000CB -:10742000000000000000000000000020000000003C +:10740000000000000000000000000000000000007C +:10741000000000000000000000000000000000006C +:10742000000000000000000000000000000000005C :10743000000000000000000000000000000000004C -:107440000000000000000000000000000000030039 +:10744000000000000000000000000000000000003C :10745000000000000000000000000000000000002C :10746000000000000000000000000000000000001C -:1074700000000000000021000000000000000000EB +:10747000000000000000000000000000000000000C :1074800000000000000000000000000000000000FC :1074900000000000000000000000000000000000EC :1074A00000000000000000000000000000000000DC -:1074B000000000000000000000000000000000C00C -:1074C0000000008800000000000000000000000034 -:1074D00000000000000000000000000000000000AC -:1074E000000000000000000000000000000100019A +:1074B00000000000000000000000000000000000CC +:1074C00000000000000000000000000000000000BC +:1074D00000000000024004200004820400000000BC +:1074E000000000000000000000000000000000009C :1074F000000000000000000000000000000000008C :10750000000000000000000000000000000000007B :10751000000000000000000000000000000000006B :10752000000000000000000000000000000000005B :10753000000000000000000000000000000000004B :10754000000000000000000000000000000000003B -:10755000000000000000000000000000000000002B -:10756000000000000000000000000000000000100B -:1075700000400800000000000000000000000000C3 +:1075500000000000000080800000000080000000AB +:10756000000000000000000000000000000000001B +:10757000000000000000000000000000000000000B :1075800000000000000000000000000000000000FB :1075900000000000000000000000000000000000EB :1075A00000000000000000000000000000000000DB :1075B00000000000000000000000000000000000CB :1075C00000000000000000000000000000000000BB -:1075D00000000000000000000000000000000000AB +:1075D0000000000000008000000080A08003808088 :1075E000000000000000000000000000000000009B -:1075F000000000004000000000000000000000004B +:1075F000000000000000000000000000000000008B :10760000000000000000000000000000000000007A :10761000000000000000000000000000000000006A :10762000000000000000000000000000000000005A :10763000000000000000000000000000000000004A -:10764000000020000000000000000000000000001A -:10765000000000000000000000000000000000002A -:10766000000000000000000000000000000000001A -:107670000000000000000100000000000000000009 -:1076800000000000000004000000000000000000F6 +:10764000000000000000000000000000000000003A +:1076500000000000A0000000C000900008C110A0C1 +:1076600004C0000000000000000000000000000056 +:10767000000000000000000000000000000000000A +:1076800000000000000000000000000000000000FA :1076900000000000000000000000000000000000EA :1076A00000000000000000000000000000000000DA :1076B00000000000000000000000000000000000CA -:1076C00000000000000000C00020000001000000D9 -:1076D00000000000000000000000000000000000AA -:1076E000000000000000000000000000000000009A -:1076F0000000000000000001400000000000000049 -:1077000000000000000000008000000000000000F9 +:1076C00000000000000000000000000000000000BA +:1076D000000000000000000000000000A104009075 +:1076E000C0042010000000000000000000000000A6 +:1076F000000000000000000000000000000000008A +:107700000000000000000000000000000000000079 :107710000000000000000000000000000000000069 :107720000000000000000000000000000000000059 :107730000000000000000000000000000000000049 -:1077400000000000000000000000000000004100F8 -:107750000000000000000000000000000000000029 -:107760000000000000000000000000000000000019 -:1077700000000000000000200040000000000000A9 -:1077800000000000000000000009000000000000F0 +:107740000000000000000000000000000000000039 +:1077500000000000000000000000000000004100E8 +:107760000000808000800000000000000000000099 +:107770000000000000000000000000000000000009 +:1077800000000000000000000000000000000000F9 :1077900000000000000000000000000000000000E9 :1077A00000000000000000000000000000000000D9 :1077B00000000000000000000000000000000000C9 -:1077C00000000000000000000000001000000000A9 -:1077D00000000008000000000000000000000000A1 +:1077C00000000000000000000000000000000000B9 +:1077D00000000000000000000000000000000000A9 :1077E0000000000000000000000000000000000099 -:1077F0000000000000000000200040200000000306 +:1077F0000000000000000000000000000000000089 :107800000000000000000000000000000000000078 :107810000000000000000000000000000000000068 :107820000000000000000000000000000000000058 :107830000000000000000000000000000000000048 -:10784000000000000000000000009000C0C1000027 -:107850000000000000010000000000000000000027 -:107860000000000000000000000000000000000018 -:107870000000000000000000000000000100000007 -:1078800000010000000000000000000600000700EA +:107840000000000000000000000000000000000038 +:1078500000000000000000000000000000820000A6 +:10786000000082008290A0888200000000000000DA +:107870000000000000000000000000000000000008 +:1078800000000000000000000000000000000000F8 :1078900000000000000000000000000000000000E8 :1078A00000000000000000000000000000000000D8 :1078B00000000000000000000000000000000000C8 -:1078C00000000000000000000000000000060000B2 -:1078D0000700000000060000070060000000000034 -:1078E0000000000000000000000000000000000098 -:1078F000000000000000000000000000840000E024 +:1078C00000000000000000000000000000000000B8 +:1078D00000000000000000000000000000000000A8 +:1078E000000000000000000000004842000000000E +:1078F0000000000000000000000000000000000088 :107900000000000000000000000000000000000077 :107910000000000000000000000000000000000067 :107920000000000000000000000000000000000057 :107930000000000000000000000000000000000047 :107940000000000000000000000000000000000037 -:10795000FF00000F000F000000000000000000000A -:107960000000000000000000000000000000000017 +:107950000000000000000000000000000000000027 +:1079600000000000000000000000220000220000D3 :107970000000000000000000000000000000000007 :1079800000000000000000000000000000000000F7 :1079900000000000000000000000000000000000E7 :1079A00000000000000000000000000000000000D7 :1079B00000000000000000000000000000000000C7 :1079C00000000000000000000000000000000000B7 -:1079D0000000FF00000F000F00000000000000008A -:1079E0000000000000000000000000000000000097 +:1079D00000000000000000000000000000000000A7 +:1079E0000000000000000000010000001100001174 :1079F0000000000000000000000000000000000087 :107A00000000000000000000000000000000000076 :107A10000000000000000000000000000000000066 :107A20000000000000000000000000000000000056 :107A30000000000000000000000000000000000046 :107A40000000000000000000000000000000000036 -:107A50000000003C003C282828280000000000000E -:107A60000000000000000000000000000000000016 -:107A70000000000000000000000000000000000006 +:107A50000000000000000000000000000000000026 +:107A6000000000000000A0A0000004011040040875 +:107A700010200000000000000000000000000000D6 :107A800000000000000000000000000000000000F6 :107A900000000000000000000000000000000000E6 :107AA00000000000000000000000000000000000D6 :107AB00000000000000000000000000000000000C6 :107AC00000000000000000000000000000000000B6 -:107AD00000000000003C003C28282828000000008E -:107AE0000000000000000000000000000000000096 -:107AF0000000000000000000000000000000000086 +:107AD00000000000000000000000000000000000A6 +:107AE0000000000000000000A0A0000008022080AC +:107AF00001024080000000000000000000000000C3 :107B00000000000000000000000000000000000075 -:107B10000000000000000028050000000000000038 +:107B10000000000000000000000000000000000065 :107B20000000000000000000000000000000000055 :107B30000000000000000000000000000000000045 :107B40000000000000000000000000000000000035 -:107B500000000000000000000028000000000510E8 -:107B600000280000000000000000000000000000ED -:107B70000000000000000000000000000000000005 -:107B80000000000000000061000180010000000012 +:107B50000000000000000000000000000000000025 +:107B600000000000000000000000000012060000FD +:107B700000000000080000000000000000000000FD +:107B800000000000000000000000000000000000F5 :107B900000000000000000000000000000000000E5 :107BA00000000000000000000000000000000000D5 :107BB00000000000000000000000000000000000C5 @@ -116699,7 +116699,7 @@ :107BD00000000000000000000000000000000000A5 :107BE0000000000000000000000000000000000095 :107BF0000000000000000000000000000000000085 -:107C0000000000000000000000FF00000C0C0C0C45 +:107C00000000000000000000000000000000000074 :107C10000000000000000000000000000000000064 :107C20000000000000000000000000000000000054 :107C30000000000000000000000000000000000044 @@ -116707,210 +116707,210 @@ :107C50000000000000000000000000000000000024 :107C60000000000000000000000000000000000014 :107C70000000000000000000000000000000000004 -:107C80000000000000000000000000FF00000C0CDD -:107C90000C0C0000000000000000000000000000CC +:107C800000000000000000000000000000000000F4 +:107C900000000000000000000000000000000000E4 :107CA00000000000000000000000000000000000D4 :107CB00000000000000000000000000000000000C4 :107CC00000000000000000000000000000000000B4 :107CD00000000000000000000000000000000000A4 :107CE0000000000000000000000000000000000094 :107CF0000000000000000000000000000000000084 -:107D000000000000000000000000000000FF000074 -:107D1000AA00AA000000000000000000000000000F +:107D00000000000000000000000000000000000073 +:107D10000000000000000000000000000000000063 :107D20000000000000000000000000000000000053 :107D30000000000000000000000000000000000043 :107D40000000000000000000000000000000000033 :107D50000000000000000000000000000000000023 :107D60000000000000000000000000000000000013 :107D70000000000000000000000000000000000003 -:107D8000000000000000000000000000000000FFF4 -:107D90000000AA00AA0000000000000000002080EF -:107DA00000800084008020000000200020040000EB -:107DB0002000000088001008200020002000200083 -:107DC0000000000000002000000020002000000053 -:107DD0000000000020000000200000002000000340 -:107DE00000000000400084000000000004000000CB -:107DF000000000000400000004002000000000005B -:107E00000000000000002000040004000400040042 -:107E100000000400C0000400210021000100010056 -:107E2000002000200021002021000904040000009F -:107E30000090009000000000000000900000000092 -:107E4000000200020000000000000000040000909A -:107E500000900000000000000000404020000040B2 -:107E600000000000000000000000000000002000F2 -:107E700020004040000000902000000000000000B2 -:107E800000000000000000000000000003000000EF -:107E900005004100000000000000200020402000FC -:107EA0002000411040204100400020002000200020 -:107EB000041000000000000004004000000000006A -:107EC00008000000000000000000000000000000AA -:107ED000000000000000000004000000000000009E -:107EE0000800000004000000000000000000000086 -:107EF00000000800000000000080040000000000F6 -:107F00000000080000000400000000000000000065 -:107F10000000080000000000000000000000000059 -:107F2000000000008408800984088900840884080F -:107F300080080008000800040008000880C000084D -:107F4000000800080008000840040000400800087D -:107F50000008000800840084000800020084000873 -:107F600000080008000000080008040000004008A5 -:107F700000080008000800000084000480000000E1 -:107F80000008400800080008000840000000000841 -:107F90000008000800080000008400000000000045 -:107FA000000800080008100420210441204004209B -:107FB000000500000000000000400000000040003C -:107FC0000000000000000000882100000000000008 -:107FD0000000000000000400000800000000000095 -:107FE00000000000000000000040022184000000AA -:107FF00000020000000000000000000800009000E7 -:108000000000000000000000000000400000000030 -:1080100000004000C0001000000000000000000050 -:108020000000C000880000000001800200408000C5 -:10803000000000000020000000000001000000001F -:108040000000000000000000000000000000000030 -:108050000000000000000000000008000000000018 -:108060000800000003000000000000000000000005 -:108070000000000000000000000000000000000000 -:108080000000000000000000410010000000080097 -:1080900000000400040010001000000000000000B8 -:1080A00000000000009000000000820082008400B8 -:1080B00009C0840000000000000000000000000073 -:1080C000000000000011C00000000040000000049B -:1080D0000000000000008200000010000000880086 -:1080E0000000000000000000004000000800000048 -:1080F00082000000000000000000000000000000FE -:10810000000000000000000000000000000000006F -:108110000000000000000000080040000000000017 -:10812000000000000000000000000000000000004F -:1081300000102020000000000000000000000000EF -:10814000000000000000000000000000000000002F -:10815000000000001000000000000000000000000F +:107D800000000000000000000000000000000000F3 +:107D900000000000000000000000000000002000C3 +:107DA00020000000000000000000000000000000B3 +:107DB000000020000000C0000000080002002000B9 +:107DC0002000000000000000400000004000000013 +:107DD000C0002000C0002000400020002000000162 +:107DE00040002000C00840000000400000002000CB +:107DF00088002000200000002000C00004000400D3 +:107E0000200000002000200000002000000088006A +:107E1000000000004000040020002000200020009E +:107E20000000000000000000000000000000000052 +:107E3000209000000000000000000000800000080A +:107E4000000000000000000000000002000200022C +:107E5000000000000002000200000002000000001C +:107E60000000000000000000000000000000000012 +:107E70000000000040004000000000000002000080 +:107E800000000000000000000000000000004000B2 +:107E900000000000000000000000000000000002E0 +:107EA00009C00800000000040000000000000000FD +:107EB0000000400002040200400000000100000039 +:107EC00000080000000000000000000000020000A8 +:107ED00000020000000000000000000000000000A0 +:107EE0000200000000000000000800000000000088 +:107EF000000000000200020002000200000000007A +:107F00000200020000000000000000000200020069 +:107F1000020004400000000000000000000000001B +:107F200002000200800000080008000800080008A5 +:107F30000008000480008009800880080082020890 +:107F40000084008200000082000800820082008419 +:107F500000040008000000084002000800000002C1 +:107F60000000000400000000000000040000000009 +:107F70000000000000048000800880848008000069 +:107F8000000200000000000020000004400080000B +:107F900080008000000100000008000000080000D0 +:107FA00009000000000000000000000000000000C8 +:107FB0000000000000080020000000000000000099 +:107FC00000000000000000000000000000000000B1 +:107FD000000000050000000000000000000000009C +:107FE0000008000000000000000000000000000089 +:107FF0000000000000000000000000000000000081 +:108000000000000000000000000000000010000060 +:1080100000000000000090000000000000000000D0 +:1080200000000000000000000000009000000000C0 +:10803000000000000000000000010088008800002F +:108040000000000000000800000000000000000028 +:108050000000000000000000000000000000000020 +:108060000000000000000000000000000000000010 +:1080700000000000080000000000000004000000F4 +:1080800008000000000000000000000000000000E8 +:1080900000000020000000000000000000000000C0 +:1080A00000000000000000000000000000000000D0 +:1080B000820000000000000000000000002000001E +:1080C0000100000000000000A0000000000000000F +:1080D000000000000000000000000003000000009D +:1080E0000000000000000000840000000800000004 +:1080F00000000000000000000000820000000000FE +:10810000000000000040084000400840000000401F +:108110000040004000008200000008000000000055 +:108120000800000000000000000000000000000047 +:10813000000000000000000000000000000000013E +:108140000000020000000000000000080000000025 +:10815000000000000000000000000000000000001F :10816000000000000000000000000000000000000F -:1081700000000000000010000000000000000000EF -:1081800000000000000000000000000000000000EF -:1081900000001000000000000000000000000000CF -:1081A00000000000000000000000000000000000CF -:1081B00020110000000900030000000000008208F8 -:1081C0000000000004410000000500000000000065 +:1081700000000000000000000000000000000000FF +:1081800000000000000000010001000100010000EB +:108190004101000100010000000000000000080093 +:1081A00008000000000000000000000000000000C7 +:1081B000000000000000200300000000820000001A +:1081C0000200C000C002000000000000000000200B :1081D000000000000000000000000000000000009F -:1081E000000000000000000000000000000000008F +:1081E000000000000000000000000000004000004F :1081F000000000000000000000000000000000007F -:10820000A0000000000000000000000000000000CE -:10821000000000000000A0001000000000000000AE -:108220000000000008000000000000000000000046 -:10823000000080000020000000000000000000009E -:10824000002000000000000000000000000000000E +:108200000000000000000000000000000800000066 +:10821000000000000000000000000000000000005E +:10822000000000000000000000000000000000004E +:10823000000000000000000000000000000000003E +:1082400000008000000000010000000000000000AD :10825000000000000000000000000000000000001E :10826000000000000000000000000000000000000E -:1082700000000304020000000000000000000040B5 -:1082800000000000000000000000000000000000EE -:1082900000000000000000000000000000000000DE -:1082A0000000000000000000410000004100030049 -:1082B000000000000000000000410000001000105D -:1082C0000000000000088200000000020000000022 -:1082D000000000000041000000000000000000005D -:1082E000000000000000000000000000000000008E -:1082F0000000000000000000000000000800000076 -:10830000000000000000000000000100000000006C -:108310000000080000000000000000000000000055 -:10832000000000000000100000000000000000003D -:1083300000000400000000000000000000000082B7 -:10834000000000000000000000000000000000002D -:10835000000000000000000002000000000000001B -:10836000000000000000000000000000000000000D +:1082700000000000000000000000000000000000FE +:1082800000000000000000000000050005000000E4 +:1082900003100000000000000000000000000000CB +:1082A00004000000000000000000000000000000CA +:1082B00000000000000000000000000084008400B6 +:1082C0008200020000000400408000000003000063 +:1082D000000000000000000000000000000000009E +:1082E0000000000000000008000000000000000086 +:1082F000000000000000000000000000000000007E +:10830000000000000000000000000000000000006D +:10831000000000000100000000000000000000005C +:10832000000000000000000000000000000000004D +:1083300000000000000000000000000000820000BB +:1083400000000008800000008000C1200000000044 +:10835000000000000000000000000000000000001D +:108360000000030000000000050000000000000005 :1083700000000000000000000000000000000000FD -:1083800000000000000000000000000040000000AD -:1083900000000000000000000000000000000000DD +:1083800000000000000000000000000000000000ED +:1083900000000000000002000000000000000000DB :1083A00000000000000000000000000000000000CD -:1083B00000000000000001000000000100000001BA -:1083C00000000000000000000000000000000000AD -:1083D000000100000000000000000000000000009C +:1083B00000000000040000000000000000000000B9 +:1083C00000000000000000C0018984210401400079 +:1083D000000000002000000000000000000000007D :1083E000000000000000000000000000000000008D :1083F000000000000000000000000000000000007D -:1084000000000000000000000000000090000000DC -:10841000000000000000000000000000000000005C -:10842000000000000000000000000000000000004C -:1084300000000000010000001020030510110008DA -:10844000404000211100000000000000000000007A -:1084500000400020000500030000000000000000B4 +:10840000000000000000000000C00000000000901C +:1084100000C000000000200000C0000000000008B4 +:1084200000C0000000000008000000000000000084 +:10843000000000000000000000000000000000003C +:10844000000000000000000008A010038808802140 +:10845000A00000000000000000000000000000007C :10846000000000000000000000000000000000000C :1084700000000000000000000000000000000000FC -:108480000000000000000000000040000000880024 -:1084900000000000000000000000000000000000DC -:1084A00000000000000000000000000000000000CC -:1084B0000000000000001000000040050300201034 -:1084C000208010004000000000008000000000003C -:1084D000800000000000000000000000000000001C +:10848000000000000000000000000080000000006C +:1084900000000080000000000000008000000000DC +:1084A000000000800000000000000000000000004C +:1084B000000000000000000000000000000200803A +:1084C0000000000000000000000009001110000082 +:1084D000808880008000800580000000000000008F :1084E000000000000000000000000000000000008C :1084F000000000000000000000000000000000007C -:1085000000000000000000000000000000008000EB -:10851000004000000000000000000000000000001B -:10852000000000000000000000000000000000004B -:1085300000000000000800000020000000200008EB -:10854000000100C001000100000000000800400020 -:108550000200100000000000000000000000000009 +:10850000000000000000000000000000000000006B +:10851000000080000000001000008000000000103B +:10852000000080000000000000008000000000004B +:10853000000000000000000000000000000000003B +:108540000010000000000000000000000100110009 +:108550000000C0890400200010000400000000009A :10856000000000000000000000000000000000000B :1085700000000000000000000000000000000000FB -:108580000000000000000000000000000000840067 -:1085900020000000000000000000000000000000BB -:1085A00000000000000000000000000000000000CB +:1085800000000000000000000000000000000000EB +:1085900000000000C000000000010000C00000005A +:1085A00000010000C000080000000000C000000042 :1085B00000000000000000000000000000000000BB -:1085C00020009001000000000000000000000000FA -:1085D000000000000000000001000000000000009A +:1085C000000000000000000000000000000010118A +:1085D0000009000101C100020002002000040000A7 :1085E000000000000000000000000000000000008B :1085F000000000000000000000000000000000007B :10860000000000000000000000000000000000006A -:10861000000000000000000000000000000000005A -:10862000000000000000000000000000000000004A -:108630000000000000000000000004000000000036 -:10864000050091200908082000000000000000003B -:1086500000000000000000000000400008000000D2 +:1086100000880000000000C090000000000000C0C2 +:1086200000000008000000C000000090000000C032 +:10863000000000000000000000000000000000003A +:10864000000000000000000000000000000000002A +:108650000011209103210985008000800000008026 :10866000000000000000000000000000000000000A :1086700000000000000000000000000000000000FA :1086800000000000000000000000000000000000EA -:1086900000000000000000000000000000000000DA -:1086A00000000000000000000000000000000000CA -:1086B000000000000000000000000000800000003A -:1086C00040004088090808000320402000001000F6 -:1086D000000000000000000000000000000000009A +:10869000000000000000000000800000000000005A +:1086A00000800000000000000080000000000000CA +:1086B000008000000000000000000000000000003A +:1086C00000000000000000000000000000000000AA +:1086D0000000C190A1080511000300000000000087 :1086E000000000000000000000000000000000008A :1086F000000000000000000000000000000000007A :108700000000000000000000000000000000000069 -:108710000000000000000041000000000000000018 -:108720000000000000000000000000000000000049 +:1087100000000000000000000000000080000000D9 +:108720000000000080000000000000008000000049 :108730000000000000000000000000000000000039 -:108740000000000000C00001000000000100000067 -:108750000100000000000084002000000000000074 -:108760000000000000000000000000000000000009 +:108740000000000008009000080010000000000079 +:1087500000000000C1C00490402100000000002083 +:1087600000200000000000000000000000000000E9 :1087700000000000000000000000000000000000F9 :1087800000000000000000000000000000000000E9 -:1087900000000000000000000001000000000000D8 -:1087A00000000000000000000000000000000000C9 -:1087B00000000000000000000000000000000000B9 -:1087C000000000000000884100E007004121810016 -:1087D00000E00000000000000000000000000000B9 +:108790000000000000000000008800008800C00009 +:1087A000009000000000C000008800000000C00031 +:1087B0000000900000000000000000000000000029 +:1087C00000000000000000000000000000000000A9 +:1087D000000000000000884100E007008400000065 :1087E0000000000000000000000000000000000089 :1087F0000000000000000000000000000000000079 :108800000000000000000000000000000000000068 -:108810000000000000000000500A00E007004100D6 +:108810000000000000000000000000000000000058 :108820000000000000000000000000000000000048 :108830000000000000000000000000000000000038 -:10884000500000E0000000000000000000000000F8 -:108850000000000000000000000000000000000018 -:108860000000000000000000000000000000000008 +:1088400000000000000000000076767600000000C6 +:108850000000000000000000FF000FF03C3C303042 +:1088600000000000C3C3C999000000000000000020 :1088700000000000000000000000000000000000F8 :1088800000000000000000000000000000000000E8 -:1088900000000000000000000000000000000000D8 -:1088A00000000000000000000000000000000000C8 -:1088B00000000000000000000000000000000000B8 -:1088C00000000000000000000000000000000000A8 -:1088D0000000000000000000000000000000000098 -:1088E0000000000000000000000000000000000088 +:1088900000000000000000000000C3C3C3C3C3C346 +:1088A000FFFF0000FFFF0000FFFF0000FFFF0F0FB2 +:1088B000FFFF0F0FFFFF0F0FFFFF00000000000082 +:1088C0000000000000000000000089FFFFFF000022 +:1088D0000000000000000000000000000FF0000099 +:1088E000303000000000FFFFF99900000000000098 :1088F0000000000000000000000000000000000078 :108900000000000000000000000000000000000067 -:108910000000000000000000000000000000000057 -:108920000000000000000000000000000000000047 -:108930000000000000000000000000000000000037 +:10891000000000000000000000000000C3C3C3C34B +:10892000C3C3FFFFFFFFFFFFFFFFFFFFFFFFFFFFCF +:108930000F0FFFFF0F0FFFFF0F0FFFFF00000000E3 :108940000000000000000000000000000000000027 :108950000000000000000000000000000000000017 :108960000000000000000000000000000000000007 @@ -116920,478 +116920,478 @@ :1089A00000000000000000000000000000000000C7 :1089B00000000000000000000000000000000000B7 :1089C00000000000000000000000000000000000A7 -:1089D0000000000000000000000000000000000097 -:1089E000000060606F6F00000000000000000000E9 +:1089D00000000000000000000000000000000F0F79 +:1089E00000FF0F0F060600000000C7C1FF000000D7 :1089F0000000000000000000000000000000000077 :108A00000000000000000000000000000000000066 :108A10000000000000000000000000000000000056 -:108A2000000000000303030300000000000000003A -:108A30000000000000000000000000000000000036 +:108A2000FFFFC3C3FFFF9999FFFF0000FFFF999964 +:108A3000FFFFC3C3FFFF9999FFFFC3C300003C3C86 :108A40000000000000000000000000000000000026 :108A50000000000000000000000000000000000016 -:108A600000000000303F303F000000000000000028 +:108A6000000000000000060600000000C7C7FFFF6E :108A700000000000000000000000000000000000F6 :108A800000000000000000000000000000000000E6 :108A900000000000000000000000000000000000D6 -:108AA00000000000000003030303000000000000BA -:108AB00000000000000000000000000000000000B6 -:108AC00000000000000000000000000000000000A6 -:108AD000000005610A2F850D00A0006100018005DE -:108AE0000000000000000000000100610006000D11 -:108AF0000000000000000000000000000000000076 +:108AA0000000FFFFC3C3FFFF9999FFFFFFFFFFFF18 +:108AB0009999FFFFC3C3FFFF9999FFFFC3C300004C +:108AC0003C3C00000000000000000000000000002E +:108AD0000000000000000000000000000000000096 +:108AE0000000A041202D804D000800000000000083 +:108AF0000001000000000000000000000000000075 :108B00000000000000000000000000000000000065 :108B10000000000000000000000000000000000055 -:108B2000000000000061002F800D00000000000028 -:108B30000000000000000000000000000000000035 -:108B400000000000000000000000000000610007BD -:108B5000800D0000F0F080D00F00000000000F0F2B -:108B60000000000000000000000000000000000005 +:108B2000000000004002800000209202408280008D +:108B30000020920240828000002092024082800049 +:108B400000208A0200000000000000000000000079 +:108B50000000000000000000000000000000000015 +:108B6000000000000F00FF000000000000000000F7 :108B700000000000000000000000000000000000F5 :108B800000000000000000000000000000000000E5 :108B900000000000000000000000000000000000D5 -:108BA0000000000000000000000055555555000071 +:108BA00000000000000000000000000000000000C5 :108BB00000000000000000000000000000000000B5 :108BC00000000000000000000000000000000000A5 -:108BD000000000000000F0F080D0FFF0FFFF000078 -:108BE0000F0F000000000000000000000000000067 +:108BD0000000000000000000000000000000000095 +:108BE0000000000000000F00000000010000000075 :108BF0000000000000000000000000000000000075 :108C00000000000000000000000000000000000064 :108C10000000000000000000000000000000000054 -:108C200000000000000000000000000055555555F0 +:108C20000000000000000000000000000000000044 :108C30000000000000000000000000000000000034 :108C40000000000000000000000000000000000024 -:108C500000000000000000008282C0FC00060F0F30 -:108C60000000FF000C0C0C0C0000000000000000D5 -:108C7000AAAAAAAA0000000000000000000000004C +:108C50000000000000000000000000000000000014 +:108C6000000000000000000070F27DFF0000000026 +:108C700000000000000000000000000000000000F4 :108C800000000000000000000000000000000000E4 :108C900000000000000000000000000000000000D4 :108CA00000000000000000000000000000000000C4 :108CB00000000000000000000000000000000000B4 :108CC00000000000000000000000000000000000A4 -:108CD00000000000000000000000BEBEC0FCFF6FEE -:108CE0000F0F0000FF000C0C0C0C00000000000037 -:108CF000000002FE08FB0000000000000000000071 +:108CD0000000000000000000000000000000000094 +:108CE0000000000000000000000030F33CFF010124 +:108CF0000101000000000000000000000000000072 :108D00000000000000000000000000000000000063 :108D10000000000000000000000000000000000053 :108D20000000000000000000000000000000000043 :108D30000000000000000000000000000000000033 :108D40000000000000000000000000000000000023 -:108D5000000000000000000000000000000000040F -:108D60002000A003000000000000000820002000F8 -:108D7000000088002000000020000000008000802B -:108D800020A0008000040004000400002000200057 -:108D900000000000200000000000000000030000B0 -:108DA0000000200000000400C000000000002100BE -:108DB000210000840100000000000000400040008D -:108DC000000000000200200020000000000220003F -:108DD0002000200000000000000000002000409063 -:108DE00040004000000040020002000000020000BD -:108DF0000082000000020002000240000002002089 -:108E0000402000202020000100010003000000009D -:108E1000000000000000000200020002400200000A -:108E200000020000000000004000000000020000FE -:108E30000400040000200490000000020002000072 -:108E400000000000000200C00000210040002100DE -:108E50000000000080000000000000000000000092 -:108E600002000040014002000040004002000040BB -:108E700002400200020002000200020002000200A2 -:108E800004001000001000002000200001002080DD -:108E90000000000000100010004000000000001062 -:108EA00000000000100000000000000000000000B2 -:108EB00000000200020000000000000000000000AE -:108EC000000000000000000000000000200000057D -:108ED000000401000100000001000000000000008B -:108EE0000000800000090205800000010001A008C8 -:108EF00005018001800080008000800080028000E9 -:108F00008000800800080200000080008000200827 -:108F100080040000000200000000000000000000CB -:108F200000000000004000080000000000000000F9 -:108F30000208000000000000000000000000000027 -:108F40000000000000000008000000000000800099 -:108F500000080001200020000000200000000000A8 -:108F600000000000000800000000000000001000E9 -:108F700000000000000000000000000000000000F1 -:108F80004000000000000000000008000000000099 -:108F90000000000000000000880000000000004009 -:108FA00000000000000000000000000000000000C1 -:108FB00000000000000000000000000000000000B1 -:108FC00000000000000000000000000000000000A1 -:108FD0000000000000000000000088000000000009 -:108FE000000000030000030041000000000000003A -:108FF00000840000050000000000000000000000E8 -:109000000000000000000000000000000000000060 -:109010000000000000000000000000000000000050 -:109020000000080000000000000000000000000038 -:1090300000000000000000000090000000000000A0 +:108D500000000000000000000000000020002000D3 +:108D60000000200020002000000000000000200083 +:108D70000000400000000000200000002000200053 +:108D800000002000200000008800002020001100CA +:108D9000410021030000C00040000000000320004B +:108DA0002100C00000000000020000000000880058 +:108DB000880002000200880000002000000004007B +:108DC0000400000004000000200000000400000077 +:108DD00004002000200000808900210000800000A5 +:108DE0000000000000000000000000000000000083 +:108DF00000000000900000000000000000000000E3 +:108E000000000000000000000000000000018000E1 +:108E1000A000200010000000400000020000000040 +:108E200000001000000240001000000000000000E0 +:108E30000000000000000000000000000000000032 +:108E400000004000000000001000000000000000D2 +:108E500000000000000000000020040004000020CA +:108E60000000000000000000000000000000000002 +:108E700000000005000000040000000000000000E9 +:108E800000000000000000000000000000000000E2 +:108E900000000000000000000000000000020004CC +:108EA00000000000000000040000000300040004B3 +:108EB00000000000000000050000000000000000AD +:108EC0000011080000000000000000000400040081 +:108ED000040000000000000000000000000000008E +:108EE00000000008008400080008000800080008CE +:108EF0000008000800080008000800080008000832 +:108F000000080084000400080008000800080008A9 +:108F10000008004000080004008400080008000861 +:108F20000008000000840000000820080008000875 +:108F300000080008008400080008008400082008D9 +:108F400000100010800800000010001000108008C1 +:108F500080108010000000080084000000400040E5 +:108F600000000000000000080000000000110000E8 +:108F700000000000000000050000000000000000EC +:108F8000000000000000000300000000000200A03C +:108F900000000080002100000000010000210021ED +:108FA0000040001100000008000000000004004024 +:108FB000004000000000000300200000010300004A +:108FC000000000000000000500000008000204038B +:108FD00004000400900800000000000000000000F1 +:108FE0000000000300000000090004000000110060 +:108FF000410005000920040000000500410000A018 +:109000000000000000000008000000000040000018 +:1090100008054000040400080000000020000000D3 +:109020000000080000000000000000000000000137 +:10903000000000000000000008000801000004001B :109040000000000000000000000000000000000020 -:1090500009000000410000000000000021000000A5 -:1090600000000000000000000000000000000400FC -:109070000000000088000000000000000000000068 -:109080000000000000000040000000200000002060 -:1090900000000000000000000000000000000800C8 -:1090A000000000000000840000000000000000003C -:1090B000820000400040000000400000000000006E -:1090C000000008000000000000008400000008000C -:1090D0000000828000000004010000000004000085 -:1090E0000000000000000000000000000000000080 -:1090F000000400000000000000000000000000006C -:10910000000000000000000000000000000100005E -:10911000000100000000000000004000000000000E -:10912000000000000000000000000000000000003F -:1091300000000000000005000000000040000000EA -:10914000000000000000000000000000000000001F -:1091500000000000050408000001040000000000F9 -:1091600000000000000000000000000000002000DF -:10917000000000000000200090000000000020001F -:10918000000000000000200090000000000000002F -:109190004000A000000000000000002000000000CF -:1091A00000000000000000000000000000000000BF -:1091B000000000000000000000000000820000002D -:1091C000000000000000000000000000000000009F -:1091D000000020001000000000000020000000003F -:1091E000000000000000000000000000000000205F -:1091F000910000884084000080000300030000000C -:10920000800000000000000080000000000010004E -:10921000000000000000000000000000000000004E -:10922000000000000000000000000000000000003E +:109050008000800080000000000000000000000090 +:1090600009000000000000000000000000000000F7 +:1090700000000000000000000010000000000000E0 +:1090800000000000C000C000000010000000000050 +:109090000110000000050005000482080000019096 +:1090A00000000000000000000000C000822100005D +:1090B0000000080000000800000000000083088095 +:1090C00008200000000082000000080000000800E6 +:1090D00010090420A000820000000000100082009F +:1090E000000082A00020822000200000000000007C +:1090F00000000900000000000000009100000000D6 +:1091000000C000000000000000000000000000009F +:10911000000040010000000000000001000100000C +:10912000080900000000000000000000000000002E +:1091300000000000000000000500000000000040EA +:109140000040100100A0000000000000000000002E +:10915000000000000001000000000000000000000E +:1091600000000300000300010001000100000000F6 +:109170009000000090000000840000000400040043 +:1091800000000800000000000000000000000200D5 +:109190000000000000080000040000000000204063 +:1091A000000400040000A000000000000000000017 +:1091B000000000000000000000000400000000802B +:1091C000008001A00000002000000003002100003A +:1091D00000088200820000000009002000820800D0 +:1091E00000000021002008000040000000000000F6 +:1091F0000900000000000000000000000000110055 +:109200000400000400200000000000000000000036 +:10921000000000000000000100000000000000004D +:1092200080010001000100000000000000000000BB :10923000000000000000000000000000000000002E -:10924000000000000000000400000000000000001A -:10925000000000000000000000000000000100000D -:1092600000000000000000000000020000000000FC -:109270000000A000000500000000A000881100020E -:109280000000A00800000000000000000000100026 -:10929000000000000080000000000010000000003E -:1092A00000000000000000000000000000000000BE -:1092B000000000000000000000000000100000009E -:1092C000000000000000000000000000000000009E -:1092D000000000000000000000000000000040004E -:1092E000000000000000000000000000000000007E -:1092F000000000000000000000000000000000006E +:109240000020002002200000210021000000210059 +:109250004000000000040000400000000501002163 +:1092600000000000000000000000000100000000FD +:109270000000000000000000000088000000000066 +:1092800000000000000000000000002100000002BB +:1092900000000000000000000000000000000000CE +:1092A000000008080008010800000000000000009D +:1092B00000000000000000000000000000000000AE +:1092C0000000038002000080028000000000000017 +:1092D00000000000080000000000000800800000FE +:1092E000000082000800002100004080A180018071 +:1092F000010200000000000000000000000000006B :10930000000000000000000000000000000000005D -:10931000000000001100002000000000000000001C -:10932000000000000000000000000000000000003D -:10933000000000000000000000000000000000002D -:1093400000000000000021000000000000000000FC -:10935000000000000000000000000000000000000D -:1093600000000000000000000000000000000000FD -:109370000000000041C000000001000041C00000EA -:109380000101000041C000000001000041C00000D8 -:1093900000010000000000000000000000000000CC -:1093A00001000000000000000000000000000000BC +:10931000000000000000000000000000000000004D +:10932000000000000001000010000000000000002C +:10933000000000020000000000000000000000002B +:1093400000000000844080000020804000000000F9 +:1093500000000000108200000082000000000008F1 +:10936000000000000000050000820584004008089D +:1093700008080801000000000000000000000000D4 +:109380000000000000000100A0000000000000003C +:10939000000000000000000000000000A0A1000389 +:1093A0008890001000018900840100010000000085 :1093B00000000000000000000000000000000000AD -:1093C000000000000000000000900002000000000B -:1093D000000000000000000000000000000000008D -:1093E00090000000000000000001010000000000EB -:1093F0000000000000009180000509090000918034 -:1094000000054009000091800005050900009180D9 -:1094100000054009000000000000000000000000FE -:109420000000080000000000000000000000000034 +:1093C00000000000000010C00090004000000000FD +:1093D000000000000000000000000000000010106D +:1093E0001090029082820000000000000000000146 +:1093F00000000000900000000000000000000000DD +:109400000000000000000000030000000000000059 +:10941000000000000000000000000000000083C108 +:1094200009088002009000118903800300090000F0 :10943000000000000000000000000000000000002C -:10944000000000000000000000000000008000009C +:10944000000000000000000091800000008000008B :10945000000000000000000000000000000000000C -:109460000000800002030000004000041000000023 -:10947000000000000000000009000521001180002C -:10948000090005210011800009000521001180005C -:10949000090005210011800000000000000000808C -:1094A00000080000000200000000000000000000B2 +:10946000800090800000808000000000000000006C +:109470000041100000020009000000000000000090 +:109480000000000000000000000000050000008057 +:1094900000000000000000000000000000000000CC +:1094A00021802108828841089100830085008389FA :1094B00000000000000000000000000000000000AC -:1094C000000000000000000000000000002000007C -:1094D000000000000000000000000000000000008C -:1094E0000000118000000311000300000400400090 -:1094F000000000000000000000000100000000016A -:10950000C000010000000001C000010000000001D7 -:10951000C000010000000001C000000000200000A9 -:109520000004000000000000000000000000000037 -:10953000000000000000000000000000000000002B -:10954000000000000000000000000000000090008B -:10955000000000000000000000000000000000000B -:1095600000000000004000080001000900000100A8 -:1095700000000000000000000000000000000000EB -:10958000000003C100000000000003C10000000053 -:10959000000003C100000000000003C10000000043 -:1095A00008000000000002000000000000000000B1 -:1095B00000000000000000000000000000000000AB -:1095C0000000000000000000000000000000089003 -:1095D00000900000004000000000000000000000BB -:1095E00000000000000001000100900100000000E8 -:1095F0000001200000010000000000000000000049 -:109600000005000091830000000500009183000028 -:109610000005000091830000000500009183110007 -:1096200000000000000000008000000008000000B2 -:10963000000000000000000000000000000000002A -:10964000000000000000000000000000000000001A -:10965000000000000000000000000000000000000A -:10966000000000000000000010001103410800206D -:1096700000000004000000100000000000000000D6 -:1096800080000509008009008000050900800900AC -:10969000800005090080090080000509008009009C -:1096A00000000009000000000000000000000000B1 -:1096B00000000000000000000000000000000000AA +:1094C00000000000000000000000800000210000FB +:1094D0008000000000000000000000000008000004 +:1094E0000000000080038080800000000000000079 +:1094F000000000000000000080800000000000006C +:10950000000000000000000000000000000000A0BB +:109510000002000000000000000000000000000049 +:10952000000091A00201A0081101108888008500A8 +:10953000C1890000000000000000000000000000E1 +:10954000000000000000000000000000100000000B +:109550000000C0000000000000000000000000014A +:1095600000900000200002008282900000000000B5 +:1095700000000000100000820000C0020000000097 +:1095800000000000000000000000000000010000DA +:1095900000000000000000000000000000000000CB +:1095A00000000000A0100008A189081000000000C1 +:1095B00001010101000000000000000000000000A7 +:1095C0000000000000000000000000000000900209 +:1095D0000008000000C000000000000000000000C3 +:1095E000000000000000020200020009101100004B +:1095F00000000000000000010188A01000C1000070 +:10960000000000000000000000000000000000401A +:109610000005002000030000000000000000000022 +:10962000000000000000808221C1A108088800031A +:10963000202008051141000000000000000000008B +:1096400000200000000002000000000000000000F8 +:10965000008000000000008000000000000000000A +:109660000000000000000000808000800088904121 +:10967000000000000000000005101000119100C162 +:1096800000000000000000000000000000000000DA +:10969000800000008000800000000000000000004A +:1096A000000000000000000011820980098088028B +:1096B0004103218903800311000000000000000025 :1096C000000000000000000000000000000000009A -:1096D000000000000020000000000000000000006A -:1096E0000000000000000000000000110320000046 -:1096F0000011000004000000400000000000000015 -:109700000000C000000100840100C00000010084CE -:109710000100C000000100840100C00000010084BD -:109720000100000000000000000000000000000038 -:109730000000000000000000000000000000000029 +:1096D00000008008001000000000000000000000F2 +:1096E0000000000000000000000080080080808072 +:1096F00000000000000000000000000000000080EA +:109700000000000000000000000000000000000059 +:10971000000002002000020008000000000000001D +:109720000000000000000000000010C0A08241A066 +:1097300008000120009101840001000000000000E9 :109740000000000000000000000000000000000019 -:1097500000000000900000892008000000000000C8 -:1097600000000000000000000000000000010000F8 -:1097700000000001000001000000000000000000E7 -:1097800000000000600000E000000000410000E078 -:1097900000000000600000E000000000410000E068 -:1097A000000000000006000007000000600000E06C -:1097B00000000000000000000000000000000000A9 -:1097C0000000000000000000000000000000000099 -:1097D0000000000000000000000007000000000082 -:1097E0000000000000000000000000000000600613 -:1097F00000E007000000840000E00000000000001E -:109800000000000000000000FFFF0000AAAA000006 -:10981000FFFF0000AAAA0000FFFF0000AAAA0000A4 -:10982000FFFF0000AAAA00000000000000000000E6 -:109830000000000000000000000000000000000028 +:1097500000000000C0001089209000000000000000 +:109760000000000008000800880088009000828245 +:1097700008081000000000000000000000000008C1 +:1097800000100000000000000000000000000000C9 +:1097900000000000000000000000000000000000C9 +:1097A000000000000000000000000000821100E046 +:1097B00007004100500000E0000000000000000031 +:1097C0000000000000000000008400000000000015 +:1097D0000000000000000081000007000000000001 +:1097E00000000000000000000000000000000081F8 +:1097F0000000070000000000000000000000000062 +:109800000000070000000000000000000000000051 +:10981000000000000000FFFF0F0F0000000000002C +:109820000000000000000000000000000000010037 +:1098300041410020AA8A0000000000000000000052 :109840000000000000000000000000000000000018 -:109850000000000000000000FFFFF0F00C0CFCFC1A -:1098600000000000000000000000000000000000F8 -:1098700000000000000000000000000000000000E8 -:109880000000000000000000000000000000AAAA84 -:10989000000000000000AAAA000000000000AAAA20 -:1098A000000000000000AAAA000000000000000064 -:1098B00000000000000000000000000000000000A8 +:109850000000000000000000F0F000FFA0A0282899 +:1098600000000000000000007C704C400000000080 +:1098700001000100828282820000000000000000DE +:1098800000000000FFF0FF000000000000000000EA +:109890000000000000000000C3EBC34B000000000C +:1098A00000000000000000000000000000000000B8 +:1098B000551441410020AA8A000000000000000069 :1098C0000000000000000000000000000000000098 -:1098D000000000000000000000000000F0F00C0C90 -:1098E000FCFC000000000000000000000000000080 -:1098F0000000000000000000000000000000000068 -:109900000000000000000000000055550000FFFFAF -:10991000000055550000FFFF000055550000FFFFF7 -:109920000000555500000000FFFF0000000000008F -:109930000000000000000000000000000000000027 -:109940000000000000000000000000000000000017 -:109950000000000000000000000000000FFF0FFFEB -:10996000F5F5F5F500000000000000000000000023 -:1099700000000000000000000000000000000000E7 -:10998000000000000000000000000000555500002D -:109990000000000055550000000000005555000073 -:1099A0000000000055550000FFFFFFFF0000000011 -:1099B00000000000000000000000000000000000A7 -:1099C0000000000000000000000000000000000097 +:1098D0000000000000000000000000000000A0A048 +:1098E000282800000000000000007F734F430000A4 +:1098F00000000100FFFF8F82828200000000000054 +:1099000000000000000000F0000000000000000067 +:109910000000000000000000000000000000000047 +:109920000000000000000000000000000000000037 +:10993000000087D20550BB11BE14000000001414B3 +:10994000A6AA0000000000000000000000000000C7 +:109950000000000000000000000000000F000F0FDA +:109960003C3C141400000000000000000000000057 +:109970000000000000008080F0F000000000000007 +:10998000000000000000000000003C3C000000005F +:1099900000000000000000000000000000000000C7 +:1099A00000000000000000000000000000000000B7 +:1099B0000000000087870505BE14BE1400000000EB +:1099C0000000AAAA00000000000000000000000043 :1099D00000000000000000000000000000000F0078 -:1099E0000F00050505050000000000000000000054 -:1099F0000000000000000000000000000000000067 -:109A0000000000000000000000000000000040E333 -:109A100080018021920240E380018021920240E394 -:109A200080018021920240E38001802182020500B2 -:109A30000A28050000A000610007800D000000005A -:109A40000000000000000000000000000000000016 -:109A50000000000000000000000000000000000006 -:109A600000000008000000000000000000000000EE -:109A7000000000000000000005610A29850100A027 -:109A800000610001800100000000000000000000F3 -:109A90003C003C000000F0F03C003C000000F0F016 -:109AA0003C003C000000F0F03C003C000000F0F006 -:109AB00000000000000000000000000000000000A6 -:109AC0000000000000000000000000000000000096 -:109AD0000000000000000000000000000000000086 +:1099E000000000001414000000000000000000004F +:1099F000000000000000FF00FF80F0F20082000085 +:109A00000000000000000000000055555555000002 +:109A100000000000000000000000000000000061E5 +:109A20000006000D00000000000000000000000023 +:109A30000000000000008060002480090000004158 +:109A40000000800000050000000000000000000091 +:109A500000610006000C0000000000000000000093 +:109A60001000202800400008000000000000000056 +:109A7000000000000000000000610026000D000052 +:109A8000000000000000000005610A06059D00A519 +:109A900000000000000000000000000000000000C6 +:109AA00000000000F3FB03010000000000000000C4 +:109AB000000000000000000030717130AA00CCCC22 +:109AC0007C50FF007C7CA07C0000000000000000B7 +:109AD0000000000000003C3C00000000000000000E :109AE0000000000000000000000000000000000076 -:109AF0000000000000000000000055FF55FF000FAF -:109B0000F0FF003C003C00000F0F000000000000D0 -:109B100000003C003C000000F0F03C003C00000075 -:109B2000F0F03C003C000000F0F03C003C00000085 -:109B3000F0F0000000000000000000000000000045 -:109B40000000000000000000000000000000000015 -:109B50000000000000000000000000000000000005 +:109AF0000000000000000000000000000000AAFFBD +:109B000000550000000000000000000000003CFFC5 +:109B10003C00000000000000000000000000000009 +:109B2000000000000000F3FBF3FB00000000000059 +:109B3000000000000000000000007171303000AA39 +:109B4000CCCC7C505555A0A000FC000000000000CB +:109B500000000000000000003C3C0000000000008D :109B600000000000000000000000000000000000F5 -:109B7000000000000000000000000000550055003B -:109B8000000FF0FF003C003C00000F0F0000000041 -:109B9000000000000F000F00303030300F000F00C9 -:109BA000303030300F000F00303030300F000F00F9 -:109BB00030303030000000000000000000000000E5 -:109BC0000000000000000000000000000000000095 +:109B700000000000000000000000000000000000E5 +:109B8000005500550000000000000000000000002B +:109B90003C003C000000000000000000000000004D +:109BA00000000000000000000000000000000000B5 +:109BB0000000000000000000000000000C0096966D +:109BC00050A0AA00FF5104043C3C3CB60000000039 :109BD0000000000000000000000000000000000085 :109BE0000000000000000000000000000000000075 -:109BF0000000000000000000000000000000F5F57B -:109C0000F5F53CAA3CAA00FF0000000F000F000081 -:109C10000000000000000F000F00303030300F0057 -:109C20000F00303030300F000F00303030300F0078 -:109C30000F00303030300000000000000000000055 -:109C40000000000000000000000000000000000014 +:109BF0000000000000000000000000000000000065 +:109C000000000000000000000000000000005555AA +:109C10000F0F000000000000000000000000000026 +:109C20000000000000000000000000000000000034 +:109C300000000000000000000000000000000C0018 +:109C4000C3C35CACAA00FF550000303030300000C8 :109C50000000000000000000000000000000000004 :109C600000000000000000000000000000000000F4 :109C700000000000000000000000000000000000E4 -:109C8000050505053CAA3CAA00FF0000000F000FD7 -:109C900000000000000000000000000000002000A4 -:109CA00000002002000020410000000020032008E6 -:109CB000200000030000000200004002000020001D -:109CC000880020008800200000000000200288009A -:109CD00020000000000000000003880000000000D9 -:109CE0002000880000008800000088039000200009 -:109CF0000000C0000000401100008800C000880083 -:109D00008800880000000400000000000004040037 -:109D1000C00000000000200000000084000000904F -:109D200000000000000000020000008200C02100CE -:109D3000000441000090000000004000000000848A -:109D4000000000001000100000004000000004C0EF -:109D500000000400000000000000000040001000AF -:109D600000000040000000002000000240900000C1 -:109D700040400000400000001000210000004100B1 -:109D80000000000000000000100000900020000013 -:109D900000A0000000000000000000000000000023 -:109DA000000082000000000000000000000000042D -:109DB000000000000000004000000004000000005F -:109DC0000000004002000000000000000000000051 -:109DD00002000000000000000004820400000000F7 -:109DE000000000000004004000000000000000002F -:109DF000000000000000000000000000000400005F -:109E00000000000000000000000000000040000012 -:109E100000000000000000400000000000040000FE -:109E20000000000000000000000000000000000032 -:109E30000008000000000400040000000001000011 -:109E40000000000000000000000000000000000012 -:109E500000080000000800000000000000010000F1 -:109E600000000000000000000000000020000000D2 -:109E70000000008400000008000000000000000155 -:109E800000000000000000000000000000000000D2 -:109E900000000000000000040000000000000001BD -:109EA0000000402000008400880000000000000046 -:109EB00000038800C000000004000000880040216A -:109EC000002100210021000000000003000000111B -:109ED0008809880300040000000000000000000062 -:109EE0000000001108000000000000000000000059 -:109EF0000000000400009000C0000000000000000E -:109F000000000000000800000000000090000000B9 -:109F10000000000000000000000008000000000039 -:109F200000000082000000000500000000000000AA -:109F3000008800000000000000000000038800000E -:109F40000000000000000000000000000000000011 -:109F500000000000000000000800000000000000F9 -:109F600000000000000009000000000000002000C8 -:109F700000000800000000000000000008000000D1 -:109F800000000000080000000900080000000004B4 -:109F90004000000000000000000000000000000081 -:109FA0000000000000000000000000000000C000F1 -:109FB0000000000084400000840000001000000445 -:109FC000A0000000824084008200840000000000A5 -:109FD000000000008200820082008200C0000000B9 -:109FE000C00000000000820082008200100000001B -:109FF000000000000000A000820082008200040037 -:10A000000000C00000008200820082008200820006 -:10A01000000082000000A0008200A000C000A0009C -:10A02000000000000000000000000000000003002D -:10A0300000001000100000000000000004000000FC -:10A0400000000000000011000000100000000000EF +:109C800000000000000000000000000000000000D4 +:109C90003C3C3C3C00000000200020002000200054 +:109CA000200020052000880820002000200420003B +:109CB0002000200020002004200020004000200080 +:109CC00000000400000000004000200020002000F0 +:109CD00020000000200220000003200020000400DB +:109CE00040000000200000000005200020002008A7 +:109CF00040002000000020008411200000004000EF +:109D0000200000000200000000000000040000022B +:109D1000040020000000000084000000000000009B +:109D200000000000000000000000008400840084A7 +:109D30000000008440000000090000000000200036 +:109D4000000000002000000000042000000000903F +:109D5000100200002000000200000000000040008F +:109D60004000000000000000004000000000000073 +:109D70000000200000000000400000000000000083 +:109D8000A000000000008000000000002000410052 +:109D90000000000000004000000000000000000083 +:109DA00000000000000000000000000000000000B3 +:109DB0000000000000050000000420050000000075 +:109DC000000400080000000000080003000000007C +:109DD000000000050000000000000100000000007D +:109DE0000000000400000000000000000000000867 +:109DF0000000000000000000000000000100110051 +:109E000040000300090010000900210003000900C0 +:109E1000210021004000110002001100090000088B +:109E20000008000800080084000800080084000002 +:109E3000000800080008000800100008800800085A +:109E400000080008008400080008008400080000E2 +:109E500000080010000800080008000820080000A2 +:109E600000080008000800080008000800080008B2 +:109E7000008800840000000800080008000820088E +:109E800088088008900890088084840890842008BE +:109E90009084C0829008901088088008A0089008DC +:109EA0000021402100214021000800000000001096 +:109EB000842120218821004000210008000000109A +:109EC00000210021002100000021000000000040CE +:109ED0000003000900210020000300000021000011 +:109EE0000000000000000021002100050002000326 +:109EF000000300000008002100090000000000002D +:109F00000009002000218803880084000000000868 +:109F10008400002000210004000000210000002136 +:109F200000200000000004000000000000004100CC +:109F30000000000000000000000000000000000021 +:109F40000000000000000000000000001100000000 +:109F50000000000841000082000003000000100023 +:109F60000090000000000000080000000000000059 +:109F70000000110000A000000000000000000090A0 +:109F800000000000050000001100000000001100AA +:109F90000000048400080000000000080000000029 +:109FA000410041A01000001000000000000000006F +:109FB0000000080082000004000000000000000013 +:109FC0000000A00082000000000000000800000067 +:109FD0000000080082000000C000840000000000B3 +:109FE00000000000000082000000820082000000EB +:109FF0000041000000000000000000000009000413 +:10A0000000040004000401020004012000000040DC +:10A010000104002001100102004008C008100100E6 +:10A020000108002001040000000000000000000002 +:10A030000000000000000000000000000000000020 +:10A040000000000000000000000000000000000010 :10A050000000000000000000000000000000000000 -:10A0600000000000000000000000000000000000F0 -:10A0700000000000000000000000000010000000D0 -:10A08000008400000000000000C00000000000008C -:10A0900000000000000000000000000000000000C0 -:10A0A000000000000000000000000020040000008C -:10A0B000020000000000402000000000000000003E -:10A0C00000000000900000400000000400000000BC -:10A0D000020000008200000000119000000040001B -:10A0E000000500000000000000000000000000006B -:10A0F00000000200080008000000C000000000008E -:10A10000080000000000C000000000000000000087 -:10A11000000010000000100000000000000000001F -:10A12000000000000000820000000000002000008D -:10A13000002000000000009000000000000000006F -:10A14000000000000000009000000000000000007F -:10A150000000000000000000008800001100000066 -:10A1600000000000000000000000000000000000EF -:10A1700000000000000000000000000002000000DD -:10A18000008809000000000000000000000000003E -:10A190000000000000001100000010840000080012 -:10A1A00008000000000000000000000000000000A7 +:10A0600000000000030000000000000000000800E5 +:10A070000000000000C000000090210000000090DF +:10A0800000000000000005000201000020010000A7 +:10A090000001100100010201020100010021000184 +:10A0A000020040A100010401000200000000400382 +:10A0B0001000000000080010000000000000000078 +:10A0C000002100000000000000000000000000036C +:10A0D00000000000082182000000000000050000D0 +:10A0E000000300210000002100000000002100000A +:10A0F0000020000090000000400000000003000964 +:10A10000840004200000C00900040200098000024D +:10A110000000020002204000C000A0020020001148 +:10A1200008200000A0000802000240040000000413 +:10A13000000002C00000030000000000000000005A +:10A14000000000000000000000000000000000000F +:10A15000000000882004008811C0000000000000FA +:10A16000008400000000000000000000000000006B +:10A17000000020000000000000000000400040003F +:10A1800009904000000000000000000000A0041042 +:10A19000000000200000080000040004000000008F +:10A1A000000000004000000005200800000300003F :10A1B000000000000000000000000000000000009F -:10A1C000C0000000000000210000000000000000AE -:10A1D00000000000820000000000000000000000FD -:10A1E000000000000000000000000000000000214E -:10A1F00000000000000008000000820000000000D5 -:10A20000000000000000000000000000000000410D -:10A210000000000000000800000008000000080026 -:10A22000000000000002000000000000000000002C -:10A2300000000000000000004100000000000400D9 -:10A2400000000400000000000000000000402000AA -:10A25000020020000090000000000000000000004C -:10A2600000000000000000000000000000000000EE -:10A2700000000000000000000000000000000000DE -:10A2800000000000040000000000000000000000CA -:10A2900000000000000000000000000000000000BE -:10A2A00000000000000000000000000000000000AE +:10A1C0000000C000000300000000000000000000CC +:10A1D0001000000000000000A000000000000000CF +:10A1E000000000000021000000210002000000002B +:10A1F000000000000000000010000000000000034C +:10A200000000000000000000000000000800010045 +:10A2100000000080A000C000008000000180010359 +:10A220000880010988080003018900090100000075 +:10A23000000000000000000000000000000000001E +:10A240000000000005000000000000000000000009 +:10A2500000000000000000000000000000004000BE +:10A260000000008800000000000000000000000066 +:10A2700000000000000000000000100000000000CE +:10A2800041000900410000820000000000000010B1 +:10A2900020000000201020000000000200004020EC +:10A2A00020000020400000000000080400004000E2 :10A2B000000000000000000000000000000000009E -:10A2C000000000000002000000000000000000008C +:10A2C00000009000000200000000000000000000FC :10A2D000000000000000000000000000000000007E -:10A2E00000010100008400000000000000000000E8 -:10A2F000000000000000000000000000000000005E -:10A30000000000010900000400000000000000003F -:10A31000000000000000000000000000000000003D -:10A320000000000009000004000000000000000020 -:10A33000000000000000000000000000000000001D -:10A340000000000209000000000000000000000002 +:10A2E000000001000002000000000000000000006B +:10A2F000000001000000000000000000000000005D +:10A30000000001000000000200000000000000004A +:10A310000000010000000000890300000800018423 +:10A3200010020800010100A02002000100010189C3 +:10A330000400000000000000000000000000000019 +:10A3400000000040020000000000000000000000CB :10A3500000000000000000000000000000000000FD -:10A36000000008081000008000000000000000004D -:10A3700000000000000000000000000000000000DD -:10A380000000000008201000008000000000000015 -:10A3900000000000000000000000000000000000BD -:10A3A0000000000008051000008000000000000010 -:10A3B0000000000000000800000000000000000095 -:10A3C00000000000020011000000800000000000FA -:10A3D0000000001100000300000000000000000069 -:10A3E00000000000900021000080800000000000BC -:10A3F000000000100000000003000000000000004A -:10A40000000000000000A00021000080800000008B -:10A410000000000000030000030000000000000036 -:10A4200000000000000020002100008080000000EB -:10A4300000000000002000000100000000000000FB -:10A4400000000000000088001090000202002000C0 -:10A4500000000000000000000000000000000000FC -:10A460000000000000000500400200100208820009 -:10A47000000000000001000000000100000000409A -:10A480000000000000000000040040820082020082 -:10A49000820000000000000000000000000000003A -:10A4A0000000000000000000400040820082020026 -:10A4B000400000000000000000000000000000005C -:10A4C000000000000000000000200000000000006C +:10A3600000000040080000000000000000000000A5 +:10A3700000000000100000000000000000000000CD +:10A38000000000001040210000000000000000005C +:10A390000000000041111021000040C10910001010 +:10A3A00040C100808020410800000000001000082B +:10A3B00010058000000010000000000000000000F8 +:10A3C00000000000840010000080800000000000F9 +:10A3D0000000000800001000000000000000000065 +:10A3E00000000000840090000080000000000000D9 +:10A3F000000000110000000021000000000000002B +:10A4000000000000000082009000009100000000A9 +:10A41000000000000002100003030000000010080C +:10A420004141008000839110008900410800110023 +:10A4300090410088809000000000000000000000B3 +:10A440000000000000000800020800108200100058 +:10A4500000000000000100000100000000000000FA +:10A460000000000000001100110800102000020090 +:10A4700000000000000000000000000000000000DC +:10A4800000000000000000004000832000C0408861 +:10A4900088000000000000000000010000C0002053 +:10A4A0000100010100080011400308100001010033 +:10A4B000A000400100841011000000000000000016 +:10A4C0000000000000000000008800000200000002 :10A4D000000000000000000000000000000000007C -:10A4E000000000000000000000400000000000002C +:10A4E000000000000000000000100000000000005C :10A4F000000000000000000000000000000000005C -:10A50000000000000000000000000040000000000B -:10A51000000000000000000000000000000000003B -:10A5200000000000000000000000008200000000A9 -:10A53000000000000000000000000000000000001B -:10A54000000000000000000000000000000000000B +:10A500000000000000000000000000020000000049 +:10A51000000000000000000000000008000088406B +:10A5200000000000000121912000001100012084A2 +:10A53000010000000000C100000000000000000059 +:10A54000000000000000000000000000000080008B :10A5500000000000000000000000000000000000FB :10A5600000000000000000000000000000000000EB :10A5700000000000000000000000000000000000DB -:10A58000000040000000000000000000000000008B -:10A5900000000000000000000000000000000000BB -:10A5A00000000000000000000000000000000000AB -:10A5B0000000000000000000000000000008800013 -:10A5C00000C100000000000000000000008000004A -:10A5D00000100000000000000000000000038000E8 -:10A5E00000A00000000000000000000000C100000A -:10A5F000002000000000000000000000000000003B -:10A60000800000400000000000000000000000C1C9 -:10A6100000000040000000000000000000000003F7 -:10A62000800000C10000000000000000000000C128 -:10A6300000000040000000000000000000000001D9 -:10A64000200000400000000000000000000000C0EA -:10A6500020000000000000000000000000000000DA -:10A660002000004000000000000000000000000387 -:10A67000400000000000000000000000000000009A -:10A680000000820000400000000000000000000008 -:10A690000003400000000000000000000000000077 -:10A6A000000020000040000000000000000000004A -:10A6B0000003400000000000000000000000000057 +:10A5800000000000000000000000000000000000CB +:10A5900000000800000000000000000000000008AB +:10A5A000028820000000001008039100200800101D +:10A5B00041894100000000200311000000108000CC +:10A5C00000C1000000000000000000000041800801 +:10A5D00000030000000000000000000000108000E8 +:10A5E00000C10000000000000000000000C1800069 +:10A5F0000005000000000000000000000000000056 +:10A60000000800830000000000000000000000C1FE +:10A610000000000200000000000000000000904167 +:10A6200080000020000041110011C1410305418458 +:10A630000000808000004141004080004010000088 +:10A640002000004000000000000000000000008327 +:10A6500040000001000000000000000000000001B8 +:10A660002000004000000000000000000000000981 +:10A6700002000000000000000000000000000000D8 +:10A6800000008801008300000000000000000000BE +:10A690000011400000010000000000000000000068 +:10A6A00041898200A020000000000800849100A0E1 +:10A6B000C002000802C00000000100014020018922 :10A6C000000000000000000000000000000000008A -:10A6D000410000E0000060000000000000000000F9 +:10A6D000810000E0000048000000000000000000D1 :10A6E000000000000000000000000000000000006A :10A6F000810000E0000048000000000000000000B1 :10A700000000000000000000000000000000000049 -:10A710000000810000E00000480000000000000090 -:10A720000000000000000000000000000000000029 -:10A730000000810000E00000480000000000000070 -:10A740000000000000000000000000000000000009 +:10A710000000810000E0000048210000000000006F +:10A7200000000000000000004800000000000000E1 +:10A730004842821200E00700604200000000000072 +:10A7400048000000000000000000000000000000C1 :10A7500000000000000000000000000000000000F9 :10A7600000000000000000000000000000000000E9 :10A7700000000000000000000000000000000000D9 @@ -117413,202 +117413,202 @@ :10A8700000000000000000000000000000000000D8 :10A8800000000000DE2E0000747B000000000000CD :10A8900000000000000000000000000000000000B8 -:10A8A000000000000000DE2E747B000000000000AD +:10A8A000000000000000DE2E752B000000000000FC :10A8B0000000000000000000000000000000000098 -:10A8C000000000000000DE2E615603400000000082 +:10A8C000000000000000D4AE61560340000000000C :10A8D00000000230A0000000000000000C4000005A :10A8E0000000000002C06A866156034000000000BC :10A8F00000000230A0000000000000000C4000003A :10A900000000000002C06A8600006156034000009B :10A91000000000000230A0000000000000000C4019 -:10A9200000000000000002C06A866156034000007B -:10A93000000000000230A0000000000000000C40F9 -:10A9400000000000000002C06A86200020002000F5 -:10A9500010002000040000000000C0002003880256 -:10A96000880020802000040020802000000040009B -:10A970002000880020000000880000002000020065 -:10A98000200021002000040020000003200000001F -:10A9900040000000208020880080208000004000CF -:10A9A000200020002000200000002000000088007F -:10A9B000400400008800000040000000000020006B -:10A9C000200088000000200000002000000000009F -:10A9D000000000000020000021024100104088001B -:10A9E00000010000000400900000000400000000CE -:10A9F00000020020000000000040100000020000E3 -:10AA000000000000040041000004000000000000FD -:10AA1000000000C000000020002000202120400095 -:10AA20000000000041008000000040020000000023 -:10AA3000000000000000000000080000000000000E -:10AA40000000000000004000000040000000000086 -:10AA500002000200000800002000000000000100C9 -:10AA600000080080000200000000200041000000FB -:10AA700000410010404000040000000002100000EF -:10AA80000000002000400400000000000000000062 -:10AA90002000000000000000030001000500050088 -:10AAA0004020400040050002010000000040081066 -:10AAB0000000000000000000000010000000020084 -:10AAC0000000000000000000000000000000004046 -:10AAD000000000080002000000000000000000006C -:10AAE0002000000000040001000000008000A00021 -:10AAF00000000008090080100010000000000000A5 -:10AB00000000004000000000800040000000410004 -:10AB10000000000000080000000020002008A00045 -:10AB2000A0008001800080000001200000000010D3 -:10AB3000800000000008000000000000000200008B -:10AB40000000000000000000000000000000000005 -:10AB50000000000088000000A000000800000000C5 -:10AB600000000000000200000000000000002000C3 -:10AB7000000000000000A000C000840000080002E7 -:10AB80000000840000000000000000000000000041 -:10AB90000000000000000000000000000000002194 -:10ABA0000000000000802000000020002080002124 -:10ABB0000000000000000000000300000000840806 -:10ABC0000000840000000000000000000000000001 -:10ABD0000000000000000000000000000500000070 -:10ABE0000900000041000000000000000090090082 -:10ABF00080A00400000000880000000000000000A9 -:10AC00000000200000000000000000000000000024 -:10AC10000000000000000000000000000000210013 -:10AC20000000000000000504800000008000800497 -:10AC300041000000000000000000000000000300D0 -:10AC400000000000040000000000000041000000BF -:10AC50000000000000000000A0001000080000003C -:10AC60000000C00500000000000920000802A1004B -:10AC700000000000A00400000800A00082000800FE -:10AC80000000A00000000800820000008200000018 -:10AC9000C0008208000000000000000000008400E6 -:10ACA000A1008300000000000000080000000080F8 -:10ACB0008200000000800000000000000800C0408A -:10ACC00000000000100008000000000482000800DE -:10ACD000A00000008200000000000000050000004D -:10ACE00010001000000000000000000084100000B0 -:10ACF000200000000800000000000000000000002C -:10AD00000000000800020000000000000800000031 -:10AD1000000000000000000000001000000008001B -:10AD200000000400040000000000410000000000DA -:10AD300000040000000000200000000000000500EA -:10AD400000000000000000000000000000040000FF -:10AD500000000000000000000000000000110000E2 -:10AD6000A02000000800C000100000408800A08063 -:10AD7000840020020100000000000000000000002C -:10AD80000000000000000000000000000000820041 -:10AD90000000000000000000000000001000820021 -:10ADA00084000800200082000000C0000005200090 -:10ADB000C104000008200000000000000020000086 -:10ADC00000000000A000002000000000A000000023 -:10ADD0000000000008001000000082000000008455 -:10ADE000000000000090000041004000050000004D -:10ADF0000010000000002000032000000000000000 -:10AE000000000000000200000000000009000090A7 -:10AE10000000110000000000080000000000030016 -:10AE20000000000000000000000000000000090019 -:10AE300080002089000400010000000000000000E4 -:10AE400004000000000000000020000000000900D5 -:10AE500000000000000000000000000000000000F2 -:10AE600000210000000004000003C00000000800F2 -:10AE7000010000202000000000008200000000000F -:10AE800000000800000400020000000000000000B4 -:10AE900000000000000000000000000000000000B2 -:10AEA0008400000000008200000000008400000018 -:10AEB0008400000000218200008400200010002097 -:10AEC0000800000000000000080000000000000072 -:10AED0001000000000000000080000000000C0009A -:10AEE0000010000000202100008800204100000028 -:10AEF00021002000210091000990000003000402BD -:10AF000011900000210000880000000000000000F7 -:10AF1000000000000300000000000000000000002E -:10AF200000000000000000000000200020000500DC -:10AF30000004008411000500000000050001082045 -:10AF400000010000000000000000000008002000D8 -:10AF500000000000000000000000000000000000F1 -:10AF600000000000000000000000000000000000E1 -:10AF700000000100000082000000000001009000BD -:10AF800000000000010008000000000000000000B8 -:10AF900000000000000000000000000000000000B1 -:10AFA000000000000000000000000000010100009F -:10AFB0000000000000019108110090200001000035 -:10AFC0000000000000000000000000000000000081 -:10AFD0000000000000000000000000000000000071 -:10AFE0000000000000000000000000000000000061 -:10AFF00000000000100021001000000000004100CF -:10B000000300000000000800000000000000000035 -:10B010000000000000000000000000000000000030 -:10B020000000000000000000000000000000100808 -:10B03000000011000020031183A0081080000011FF -:10B040000000000000000000000000000000000000 -:10B0500000000000000000000000000000000000F0 -:10B0600000000000000000000000000000000000E0 -:10B070000000000000001108080008030200001092 -:10B0800000000002000000000000000000000000BE -:10B0900000000000000000000000000000000000B0 -:10B0A00000000000000000000000000000000000A0 -:10B0B00000800880400000001120201110058083CE -:10B0C0000000008000000080000000000000000080 -:10B0D0000000000000000000000000000000000070 +:10A9200000000000000002C06A8660DE03400000F4 +:10A93000000000000231E0000000000000000C40B8 +:10A9400000000000000002C07B06000000100000B4 +:10A95000C000000000000000000000000000000037 +:10A9600020000000000000000000000000000000C7 +:10A9700000040000010001801080100200080000A7 +:10A980000004400000000000000000030000000080 +:10A990000010840000000000004084080000000057 +:10A9A0000040000000080010000800000000000047 +:10A9B0000000200000000400000020000000000053 +:10A9C0000000100000000000000000000000000077 +:10A9D0000000000000000000000000000000400037 +:10A9E00000008000000000000000000000000000E7 +:10A9F0004040000000000200044000200001000070 +:10AA00000002410300000000000000000000000000 +:10AA100000000000400000000000000100001000E5 +:10AA200040000000040000010001000000000000E0 +:10AA300041000000000000000000000000000000D5 +:10AA40004100400000004000400000000000000005 +:10AA500000000000000000000000000000000000F6 +:10AA600001020008000402000200000300000000D0 +:10AA70000000000000000000000000200020000096 +:10AA80000080100800050000000000000000000029 +:10AA9000002000000020002002400200A008010069 +:10AAA00000050205000200852190000820800408AE +:10AAB00000080000000000000000000090000000FE +:10AAC0000010001000000010000008000800001036 +:10AAD000000800080008001000080008000800082E +:10AAE0000008400900840009800880080008000868 +:10AAF0000008000800080008000800080011031101 +:10AB000000840020800200020010000400100008F1 +:10AB100000000009000800090009800980080004FD +:10AB200020840000000800850002900500008020BD +:10AB30008084000900080008000805080008058452 +:10AB400000080008058800080508050800840008BA +:10AB500000080021000000000000002100000000AB +:10AB60000100000200000000400000050003002179 +:10AB700000210000000000210021000000028808E0 +:10AB800000024000000000020088000300000000F6 +:10AB90000000000000020000000000210002000090 +:10ABA0000003000400008800040200080004000400 +:10ABB000000400202120042040201120C080A0009B +:10ABC00000800003002000000000000000000008DA +:10ABD00004400000000000000084000040840000E9 +:10ABE00000002000000000000000000000840000C1 +:10ABF0000000000200000000000000000000000053 +:10AC000000004100808400000000002000100000CF +:10AC10000000000000000000000000000000000133 +:10AC2000100000A00801000000840000410108009D +:10AC3000000000011101900100012001A0050202A5 +:10AC400009001002100400901100048241000088E5 +:10AC50000088000000000000000000000000010467 +:10AC60000104010401040884104000400040000079 +:10AC70000000004000400040000000400840000488 +:10AC80000080008400800000000000000000000040 +:10AC900000000000A00000000405200020002000AB +:10ACA0000100010003008200880000000000C100D4 +:10ACB000008000000100008000000080008000098A +:10ACC0000011000000090000000000090011000947 +:10ACD00000090000001100800000000000000000DA +:10ACE00002010201028302010002000100010001D1 +:10ACF00000000000000100010001038400010001C8 +:10AD000000A000400040002000000000418403003B +:10AD100000000000000000000000800080008000B3 +:10AD2000800002000400A00000840000030000086E +:10AD300010000910000004000002000000040008D8 +:10AD400009022000000009080000000000000000C7 +:10AD500000000000000011000002000004000000DC +:10AD60000008880000000000000000090002000048 +:10AD7000000000080000000200098202000000003C +:10AD80000000000000008800842000000000004057 +:10AD90000000004000100021002100000000000021 +:10ADA0000400040402200084C020200010000002DF +:10ADB000C0111000000820000004408000001100B5 +:10ADC00001910000112000800100000200000040FD +:10ADD000002000000000010400000000000000004E +:10ADE00000000000000000000000000008000983CF +:10ADF0000000000000000000000000401100000002 +:10AE00000000000000000004000000080400000032 +:10AE10000010000000000000000000000000000022 +:10AE200000008002A00180000020000080040808CB +:10AE300040014000902000099000000100020282C1 +:10AE4000A0841004002010004008100020210200FF +:10AE500000040990118800041000209005040000EF +:10AE6000000000000000000000000021200001039D +:10AE700000000009000000000021000000000003A5 +:10AE800000000000000020000140018001000000DF +:10AE90000000010090000008000000080000000011 +:10AEA00000000000008000009140C08020002110C0 +:10AEB000010040030002108801848484012000A066 +:10AEC00000008400000000000000002100000000DD +:10AED0000000000000000000000000000000000072 +:10AEE00000000000000000000000000000008000E2 +:10AEF0000200000000000000000000000000000050 +:10AF00000000000000000000050002010220048291 +:10AF1000000000000800080000A00510000000006C +:10AF20000000000000000004000002010004808214 +:10AF3000A000200080004101C10820094105200136 +:10AF400021210000008800880304000000000000A8 +:10AF500000000000000000000000000420042000A9 +:10AF60002000000000000000000000C1000010915F +:10AF7000000100C001018820000000C00000009016 +:10AF8000000000C0000000002000A1880000008830 +:10AF90009090040500409089C0010000000000006E +:10AFA000000000000800840000000000A08900905C +:10AFB00010900004102101A09040088991A0000287 +:10AFC0002020A0031021049001200890000100011E +:10AFD0002001000000000000000000000000000050 +:10AFE000880000000000000000000000089102003E +:10AFF000800800080080212100100020008000004F +:10B000000000000000800000000000009000000030 +:10B010000000800089C141900088001000000000FD +:10B02000000000000000890008000000000082A16C +:10B030002180000900004011082000A0808491A018 +:10B040000888004180A1884188A1030300200041B5 +:10B0500000080010001100000000000000000800BF +:10B06000210000000000000000000000000010802F +:10B07000410002118010000000000800850200005D +:10B080000000000080000000000000008000800040 +:10B090008021808080808000881190A1880000003D +:10B0A000000000000000000088800808118083086C +:10B0B0000980410010118000828089C0099109092E +:10B0C000208008211190C1A1100008028080C18059 +:10B0D000000000001000410000000000000000001F :10B0E0000000000000000000000000000000000060 -:10B0F000000000000000000001000000000001004E -:10B10000000000000000000000000000000000003F -:10B11000000000000000000000000000000000002F -:10B12000000000000000000000000000000000001F -:10B13000000000020120000000880000040100005F -:10B14000089190000402000090040000000000003C -:10B1500000000000000000000000000000000000EF +:10B0F000000290000001C001000288000100C000B1 +:10B10000000000000000C000000020000000C0009F +:10B11000A00020008888C09088002100081111003C +:10B1200000000000000000000000080808000140C6 +:10B130009100018810000101C00040040282020455 +:10B140000301201008004191A19121909100849069 +:10B1500091880000000000000100000000000000D5 :10B1600000000000000000000000000000000000DF -:10B17000000000000000000000000000400000008F -:10B18000000100012001000000000000000100009B -:10B1900000010000000000000000000000000000AE -:10B1A000000000000000000000000000000000009F -:10B1B00000000000000100000800000040000288BC -:10B1C000900000200000000082000000000000004D -:10B1D000000000000000000000000000000000006F -:10B1E000000000000000000000000000000000005F -:10B1F000000000000000000000000000001000112E -:10B200000020031100080008002010090009002098 -:10B2100000200010000000000000000000000000FE -:10B2200000000000400000000000000000000000DE -:10B2300000000000000003080000800000058000FE -:10B240008020C10340000500000000000000000055 -:10B2500000000000000000000000000000000000EE -:10B2600000000000000000000000000000000000DE -:10B2700000000000000000000000000000000000CE -:10B2800000000000000800000011000000000000A5 -:10B2900000000000000000000000000000000000AE -:10B2A000000000000000000000020000000000009C -:10B2B0000000000000000000084000030000000043 -:10B2C00020919041000003000040001100000000A8 -:10B2D000000000000000000000000000000000006E +:10B17000000000000088010000C0009000010101F3 +:10B1800000C100880000000000C020000000000096 +:10B1900000C00090009090901082A08400840085F0 +:10B1A00083C0000000000000000000000008001044 +:10B1B0000090001100210190000810C1C00200049D +:10B1C00000094003C0080082C191204000010082B4 +:10B1D00000909041000000011000000100000000FC +:10B1E000000000000000000100000001000000005D +:10B1F0000000000000000810050910900000000386 +:10B2000005211191000000000000008000000000F6 +:10B210000000008000000000008080808005032185 +:10B2200010A184A000000000000000000000000940 +:10B230000011008200910020090200918091C1203C +:10B24000008303A1110880030008858340200010BB +:10B250000080009083410000001080110041000038 +:10B26000000000000000000000080008004100008D +:10B27000000000000000000002110300101090A068 +:10B280000900900002108000000000000000800013 +:10B29000000000000000800000898080800000A184 +:10B2A00000900000001100000000000000000000FD +:10B2B000889011008400800084009011080303200E +:10B2C000C19004800880080588898285C1808340F8 +:10B2D000C1201100000020000080000000000011CB :10B2E000000000000000000000000000000000005E -:10B2F000000000000000000000000000000000004E -:10B3000000820000000000010000000100000000B9 -:10B31000000000000000000000000000000000002D -:10B32000000000000000000000000000000000001D -:10B33000000000000000000000000100000000000C -:10B340000000004110012020000000000000000863 -:10B3500000000000000000000000000000000000ED +:10B2F00000000000000000000088000101002000A4 +:10B30000C0A0000002000000C0008800008800000B +:10B31000C000200000000000C000888982C08800B2 +:10B320008811102188A00200000000000000000029 +:10B3300000009009018810880800C0080901020176 +:10B34000890183094108A18491004089219090C01E +:10B350000200911000009090820000400000000068 :10B3600000000000000000000000000000000000DD -:10B3700000000000000000000000000000000000CD -:10B380000000600000E000000000600000E000003D -:10B39000810000000000000000000000000000002C -:10B3A0000000000000000000000000060000070090 -:10B3B000000000000000000000000000818100E0AB -:10B3C00007000000884100E007004200818100E0A2 -:10B3D0000700000000000000000000000000000066 +:10B3700000000000000000000000880000E0000065 +:10B380000000810000E0000000000000000000005C +:10B390000000000000000000000000210000070085 +:10B3A0000041600600E0070000000000000000000F +:10B3B00000000000818100E007000000418200E001 +:10B3C00007000000810000E000006000821100E042 +:10B3D00007006041818100E00700000000000000DC :10B3E000000000000000000000000000000000005D -:10B3F000000000000000000000000000000000004D -:10B40000000000000000000000000000000000003C -:10B41000000000000000000000000000000000002C -:10B42000000000000000000000000000000000001C -:10B43000000000000000000000000000000000000C -:10B44000000000000000FFF0FFF0FFFFF0F0000040 -:10B4500000000000000000000000000000000000EC +:10B3F000000000000000000000000000C3C3C3C341 +:10B400000F0FFFFF0F0FFFFFC3C3FFFF00FFFFFF83 +:10B41000C3C3FFFF00FFFFFF0000FFFF3C00000071 +:10B420008340C300C5A5C58530004424000000004A +:10B43000000000000000B4B4B4B4F978E160000C7E +:10B44000F000200000000000000020041008200090 +:10B450000000F166F300E7E7E4E4F0F0FF660000C7 :10B4600000000000000000000000000000000000DC -:10B4700000000000000000000000000000000000CC -:10B4800000000000000000000000000000000000BC -:10B4900000000000000000000000000000000000AC -:10B4A000000000000000000000000000000000009C -:10B4B000000000000000000000000000000000008C -:10B4C00000000000000000000F000F000000F0F07E -:10B4D000000000000000000000000000000000006C +:10B470000000000000000000000000000000C3C346 +:10B48000C3C30F0FFFFF0F0FFFFFC3C3FFFF00FF7B +:10B49000FFFFC3C3FFFF00FFFFFFFFFFFFFF3C00F5 +:10B4A0005666C300C300C5A5C5A50000242400003E +:10B4B0000000000000000000BDBD2424F978E16018 +:10B4C000000CF0002000000000000001400280019C +:10B4D00000000000F100F30027272424F0F0990079 :10B4E000000000000000000000000000000000005C :10B4F000000000000000000000000000000000004C :10B50000000000000000000000000000000000003B @@ -117619,494 +117619,494 @@ :10B5500000000000000000000000000000000000EB :10B5600000000000000000000000000000000000DB :10B5700000000000000000000000000000000000CB -:10B5800000000000000000000000000000000000BB -:10B5900000000000000000000000000000000000AB -:10B5A000000000000000000000000000000000009B -:10B5B000000000000000000000000000000000008B -:10B5C0000000000000000000000000003CFF3CFF05 -:10B5D0000F0F0F0F00000000F0F0FFFF0000000051 -:10B5E000000000000000000000000000000000005B +:10B580000000FFFFF0F0FFFFF0F0FFFFF0F0FFFF23 +:10B59000F0F0FFFFF0F0FFFF0000FFFF00000000F1 +:10B5A0000F0F000004045050F0D0F0F0F0F01E78BF +:10B5B000187E0000000000000000000000000000F5 +:10B5C0003E3EFEFE06F63C3CFFFFF0F005000005A7 +:10B5D000010208040C0C0C1CFCBCFCBC0CCF666605 +:10B5E000033F033F000000000000000000000000D7 :10B5F000000000000000000000000000000000004B -:10B60000000000000000000000000000000000003A -:10B61000000000000000000000000000000000002A -:10B62000000000000000000000000000000000001A -:10B63000000000000000000000000000000000000A -:10B64000000000000000000000000000000000C337 -:10B6500000C30000FFFF00000000F0F0C3C30000C3 -:10B6600000000000000000000000000000000000DA +:10B6000000000000FFFFF0F0FFFFF0F0FFFFF0F0A0 +:10B61000FFFFF0F0FFFFF0F0FFFFFFFFFFFFFFFF76 +:10B6200000000F0F00000404505000200000669935 +:10B63000187E187E000000000000000000000000DE +:10B6400000000202C2C206F63C3CFFFFF0F0A00080 +:10B6500000A0804010200C0C0C0C000000640CCFEB +:10B660006666003CC3FF0000000000000000000010 :10B6700000000000000000000000000000000000CA -:10B680000000000000000000000000000000006159 -:10B690000007800D000000610007800D00000061C0 -:10B6A0000006000D00000000000000000000000087 -:10B6B000000000000000050000280000000000005D -:10B6C000000000000000000005610A29850100A0BB -:10B6D0000061002F800D000005610A2A850D00A081 -:10B6E000000000000000000000000000000000005A -:10B6F000000000000000000000000000000000004A -:10B700000000000000000000000000000000000039 -:10B7100000000000507DFA7D0000000000D2000013 -:10B7200000000000AAF0FF3C000000000000000044 -:10B730000000000000000000000000000000000009 -:10B74000000000000000000000000000555500004F -:10B75000C3C3FF00C300AAA0AAA00000000000000D -:10B7600000000000000000000000000000000000D9 -:10B7700000000000000000000000000000000000C9 -:10B7800000000000000000000000000000000000B9 -:10B790000000000000005028FA280000000000FF10 -:10B7A000002D00000000AAF0003C00000000000096 -:10B7B0000000000000000000000000000000000089 -:10B7C00000000000000000000000000000005555CF -:10B7D0000000C3C3FFFFC3FFFFF5FFF5000000003B -:10B7E0000000000000000000000000000000000059 -:10B7F0000000000000000000000000000000000049 -:10B800000000000000000000000000000000000038 -:10B810000000000000000000FFBC7F3C00000000B2 +:10B68000000000000000406380008021920240E33F +:10B69000800680299202408280000020920240822F +:10B6A000800000208A001000402000000008806117 +:10B6B000002680990000000000000000000000004B +:10B6C0000061002480010000A061002480A1920696 +:10B6D00000410002800D0000006000208005000095 +:10B6E000000000218000000000610006000D000045 +:10B6F000000000000000000000610006000D0000D6 +:10B700000000000000000000FF17FF17AAAAAAAA65 +:10B71000000001000055AAFF00000000000000002A +:10B720000000000000000000000000000000000019 +:10B7300000000000F808F404000000000000000011 +:10B740000000AFAFAF05C0FCC0FC5F7D0A28000061 +:10B750003C3C3C3C55D7008280823D013D39000095 +:10B760000000141455003C3C003C00000000F0AA0E +:10B77000F000000000000000000000000000F0AA3F +:10B78000F0FF00000000000000000017001700FF9D +:10B79000F0F0000000000050AAFF000000000000D0 +:10B7A0000000000000000000000000000000000099 +:10B7B000000000000000F000FC0C00000000000091 +:10B7C000000000000505AF05003CC3FF5F7D0A28AF +:10B7D000005FFF3C0000040C008200823C003C380B +:10B7E0005F4F5F5F141455000000003C0000000034 +:10B7F000F0AAF000000000000000000000000000BF +:10B80000F0AAF00000000000000000004D4D4D4D7A +:10B81000FA3CFA3C003F003F0000FFAA0000000095 :10B820000000000000000000000000000000000018 -:10B830000000000000000000000000000000000008 -:10B8400000000000000000000000000000000000F8 -:10B850003C3C000F000FF0FFF0F000F300F300009D -:10B86000FFFF0000000000000000000000000000DA -:10B8700000000000000000000000000000000000C8 -:10B8800000000000000000000000000000000000B8 -:10B8900000000000000000000000001C203C000030 +:10B830000000000000830003AAAAA000000000008E +:10B84000000000000000000000000000FFFF50505A +:10B850005555E8EBE8EB3C3C3C3C000000003F3F2A +:10B8600030303F3CAA3C0C0C3C003C3C3030C30028 +:10B87000CF0C00FF000000000000000000000000EE +:10B880000000000000000000000000000000CFCF1A +:10B890000C0C503C503C00000000FFAAFFAA000026 :10B8A0000000000000000000000000000000000098 -:10B8B0000000000000000000000000000000000088 -:10B8C0000000000000000000000000000000000078 -:10B8D00000003C3C000F000F000F0000FFF3FFF3DF -:10B8E0000000FFFF0000000000000000000000005A -:10B8F0000000000000000000000000000000000048 -:10B900000000000000000000000500900091008091 -:10B910008880204020002000410085000080208891 -:10B92000000020001000A00000800091840010049E -:10B930002000200088001011A0004000000010909E -:10B940008800200084002000000302000000200086 -:10B95000880020002000200420002000A00000001B -:10B960002011200020002000000804000200000038 -:10B97000880020002000880020002000200088008F -:10B9800020002000000088000000000000040004E7 -:10B99000000421108001800800002082200009049A -:10B9A00000040000800000000000400400040000CB -:10B9B0000001000000000000000240000000000044 -:10B9C00021044000000000000000000040000000D2 -:10B9D0004000100090008000400180000000000046 -:10B9E0000000000021000000040021008000000091 -:10B9F0000000000200400000000000000000000005 -:10BA000000000000400000000000000020000200D4 -:10BA100000000000200000000200410000002000A3 -:10BA200000022010010020002080404000000000A3 -:10BA300000000904000000802000100001800100C7 -:10BA400001000100000000000000004000000000B4 -:10BA5000000000000000400040800008404001005D -:10BA60000000000000000008000000040840000082 -:10BA70000900051004004110010004000940000005 -:10BA8000000000000000000000000000008880822C -:10BA9000000802000284820802000008A0080000DA -:10BAA000A0840009800020048008C00280000008F3 -:10BAB00000880000C00104840404008400102002F7 -:10BAC0002000208220100010000800080000000064 -:10BAD00000080004000800008008800400008010B6 -:10BAE0000400200000000900008200080008000097 -:10BAF0000008840084098000840804888008040801 -:10BB000000080008000000820008000840084020EB -:10BB10001040880500002000000200080000050019 -:10BB200000080000C0000003000000219005400054 -:10BB300000000002040000000008000800030000EC -:10BB400040840000000410210040000000090000B3 -:10BB500000000000000000000005000000000000E0 -:10BB6000000808004000000000000004002101005F -:10BB7000080200000000001100000000000890050D -:10BB800000000800080000040000000000000000A1 -:10BB90000000040800000000090004000000050087 -:10BBA0000800000005000500000000A0008410004F -:10BBB000002004A00000000000022000000000009F -:10BBC0000000000304000005080040000000080019 -:10BBD00021000000000000001000410008000300E8 -:10BBE000110008C000000000000000000001000279 -:10BBF0002000800000004100000011000000000053 -:10BC00000000000000000000000000000000000034 -:10BC10001000000000000000110001000000C00042 -:10BC200088050040C0008400840000100840900295 -:10BC3000210201040000C00000000000820000009A -:10BC40000000000000000800000002000000A0004A -:10BC50000800000000000000820000000800000052 -:10BC60000008010000000000401100000200110067 -:10BC70008880840020800000000008000900000087 -:10BC800000000800000010001000C000820000004A -:10BC90000000100000000000419020002000000083 -:10BCA00000000000001000000000088202010008EF -:10BCB0000801C0002001000003C041000000000096 -:10BCC0000000100008000800000000000000000054 -:10BCD0000000000000A000000000000000000000C4 -:10BCE0000090000020000000400003900000410090 -:10BCF000400000400000800400000000000004003C -:10BD00000300000000000000000000000000000030 -:10BD1000000000000000000089212000C003401145 -:10BD20002000A010040488000800C00000000005E6 -:10BD300000008811100804110000000000880000B5 -:10BD40000000000000000000000020400000000093 -:10BD500084000000000000000000000082000000DD -:10BD6000000004000800820000000000C00500215F -:10BD7000820020002000C00409000800000000002C -:10BD8000C000000000009000C000000000000000A3 -:10BD900000000000000008000000200082000000F9 -:10BDA0000000C00009000001000021880000000020 -:10BDB0004100100009900020000000000000030472 -:10BDC00000000000000000000000000084000000EF -:10BDD000040400000000000000000000000000005B -:10BDE0000000000000000008000021A0000000008A -:10BDF00000C008088000800020010400000000004E -:10BE00000000000000000000000000000000000032 -:10BE100000000800000000000000000002000820F0 -:10BE2000080088008200C04000000000A000000060 -:10BE300011088400008400000000C0030100000815 -:10BE40000021000008000000001000000000820037 -:10BE500000008400C0080000000000000000A000F6 -:10BE600084000000080000000000000000400008FE -:10BE7000000884000000C000000400000000C100B1 -:10BE80000000002100000009000000000000000088 -:10BE90000000000800201000080010000000000052 -:10BEA000000000000000000000010300000000008E -:10BEB0000000200000000011000000000000200031 -:10BEC0000000000000000000000000000000000072 -:10BED0000000000000000000000000000000000062 -:10BEE0000000000000000000000000004000000111 -:10BEF0004100000000000000000000010000000000 -:10BF0000040000000000000000000000000000002D -:10BF10000000000000000001000000000000000020 -:10BF20000000100001000000000103018800000073 -:10BF300085000000A100A0000001000190010001A7 -:10BF400000010100200000010000000000000000CE -:10BF500000000000000100010000000000000000DF -:10BF60000000000000000000000000090420212063 -:10BF700000A0000000000000000000000001000020 -:10BF80000001A04090208290A0A0000400050000C5 +:10B8B00000000000000000000000555555FF00008A +:10B8C000000000000000000000000000303F303F9A +:10B8D00050505555E828E8280FFF0F0001000000E0 +:10B8E0000F0F000F002AAA3C0C0C3C000000303067 +:10B8F000C300CF0CAAAAAAAA000000000000000002 +:10B900000000000000000000080020008800200463 +:10B910000010000000008800000020000000200847 +:10B92000000020000000200001000000200800109E +:10B9300000000000018800050000C1000110210086 +:10B94000000001000000200800034000000020006B +:10B95000000000004000000004000000200000057E +:10B960002000000000000000200020000000000077 +:10B9700000000000000000002011000020008400F2 +:10B980002009000200000400200080008000000068 +:10B9900080010000410000000000000000002000C5 +:10B9A0000000000000000000000010020000000085 +:10B9B00000000000000240200002000020002002E1 +:10B9C000200200004002000009000000000000000A +:10B9D00000004000000000004000000000200000C7 +:10B9E0000000000000000002000000000000000055 +:10B9F0000000000000C0400000C000000000000087 +:10BA00000000000000000000000200000000090427 +:10BA10000000032000000000000000000000000003 +:10BA200000400000000800000000000800000009BD +:10BA30000009000200800002902000800000000049 +:10BA400000000005000000000002000000000004EB +:10BA500000000000000004002000200020800240C0 +:10BA600002000080000020002000200084008820C8 +:10BA7000200082000420820000000000820082007A +:10BA80008200820004020008824082028280000854 +:10BA90008201000088090002410200100010000825 +:10BAA0000202001000100009000000100011000840 +:10BAB00000840000000900100001008300200084C1 +:10BAC0000082000800020008000441910282000088 +:10BAD000001100000008008880008000808880201D +:10BAE000800180080002000080088000820002843B +:10BAF0000001800000888009000403000300028424 +:10BB000004000008040003000011040102010010F9 +:10BB100004090821002104110141000901020080EB +:10BB20000021020808080040010901020103010880 +:10BB30000041000500A1002100A10000C000000894 +:10BB40000000100800409040008800000000000540 +:10BB500000000003000300000004010000000000DA +:10BB600004000480882000009009100000410000BB +:10BB70000000100020000408400490001000900015 +:10BB80004008040088009000200004000000040029 +:10BB9000000800008008000080002000090010005C +:10BBA0004004000000840000008810A010902008CD +:10BBB00020A0080000000002031000100000000098 +:10BBC00011000000200400000002000900840002AF +:10BBD000000000002100000000000000040805A093 +:10BBE00040208000412009200400418421000900F8 +:10BBF00040C0050020000000020000010020892054 +:10BC00000020800000000084004040000000000090 +:10BC100000000000000083400000058000081004C0 +:10BC20000900000001000000010082000000018006 +:10BC300000800080000008000000080009900282D7 +:10BC40000100040084000800C000000082084000D9 +:10BC500000000080000001000000000088000400D7 +:10BC60002000200020000200000000000000000072 +:10BC700000000011008800040020002000040000E3 +:10BC8000000000000400C0000000000000000000F0 +:10BC90009041880004000000080100848420000115 +:10BCA000800120000000200003A0208411844100B6 +:10BCB0001008410400040000418405C003008811FD +:10BCC0008040028880900500100000000000000104 +:10BCD000830000000340000020000000000000007E +:10BCE0008000800080008000800000000040000094 +:10BCF000000000000000000400000001000300013B +:10BD000000000000000040000000000000000000F3 +:10BD100000000900110003000009000020030021B9 +:10BD20000102010201800180004020000240200445 +:10BD30000004908082830080004000080040824020 +:10BD4000080200C00180088200002009040082006F +:10BD500082000800000000000000004000202000D9 +:10BD6000000404A08200000004089000010000000C +:10BD70000000000020000000000000202004080453 +:10BD800000000000C00000000000000000000000F3 +:10BD900000000000000000000000000000000000A3 +:10BDA000000010082004100410081001808200090F +:10BDB000A141004103040008000800010001000146 +:10BDC00000018900094104402021000085A04000B5 +:10BDD000000200000000000000000000030000005E +:10BDE000808800A0C02105000090800021C00200D2 +:10BDF000098400C00000890000002120050180891D +:10BE000009012100400040000088000010040420C7 +:10BE100020000004008800020904009000000003D4 +:10BE200000A101A1014100800008200000040204DB +:10BE300000040040000000880008004000000040AE +:10BE40000041004108A1012000A000200000820064 +:10BE5000010000211080108001000100000082001C +:10BE6000002100000008A00084008800000040407D +:10BE7000A040000090408400000200098409008472 +:10BE8000002000A000200040004000400000000012 +:10BE90000000000000000000000800000200020096 +:10BEA000000400100820200841080000800802015A +:10BEB00080050001004100000004000100010000B5 +:10BEC00000C100C000848010040141210001000075 +:10BED00011000200410090400040020040000000BC +:10BEE0000000000000000000000000000000000052 +:10BEF0000000000000000000000000000000000042 +:10BF0000000500010005000100000800000000001D +:10BF100040000000000000000000000000000000E1 +:10BF200008C000408890900900C12008000100006E +:10BF300000C1018800010001000100021001100889 +:10BF4000008890882000900040A0A190848890A054 +:10BF500040C00000C0000000018800009003000005 +:10BF6000000000000100104100000000000000007F +:10BF70000000C00001008200000009A101080011BA +:10BF80000882080500909091C0C1000000001000D8 :10BF900000000000000000000000000000000000A1 -:10BFA000000000000000100000000008A1080910B7 -:10BFB0000005110021001000000000400004821064 -:10BFC00000200002100308400008000000000200EA -:10BFD0000000000900100808000800000000000030 -:10BFE00000000000000000000000000003A0A040CE -:10BFF0000808001100000000000000000011000807 -:10C00000050800408080C000800080800080002003 -:10C0100000200009000000000000000000000000F7 -:10C0200000000000004100000003000011C00811E2 -:10C030000840041009059000A00821000305000431 -:10C04000000500000488A100400405040000000071 -:10C0500000000000000500000008000000000000D3 -:10C0600000000000000000000000000000001102BD -:10C07000401002C020030000000000000000000388 -:10C080000000000900000000009180A000000000F6 -:10C090000000008000000000000000000000000020 -:10C0A00000000000000000010000000100009002FC -:10C0B00011009189000182001000A0008900000099 -:10C0C000000100C00000410203008800A000000041 -:10C0D000000000000000000000000001000000005F -:10C0E0000000000000000000000000000000000050 -:10C0F00001090041004000010000000000000000B4 -:10C1000000001000200090080800400382C008884A -:10C110000000000000020000000000000000000815 -:10C12000000000000000002000000800A000010046 -:10C130000000C00082010100000204830089008326 -:10C140000000410101010000000041000001000069 -:10C15000000020000000000000009000000000002F -:10C1600000000000000000000000000000000000CF -:10C1700000000800A000830182010100000000000F -:10C1800000000000030000000000000000200290FA -:10C19000A1A10000000400820000000000000000D7 -:10C1A000000000000000000000000000000000008F -:10C1B000100000058221022108100083800200087F -:10C1C0002083000041082121050000204021092191 -:10C1D000100200000000000000000000000000004D -:10C1E000200000000000000000000000000000002F -:10C1F000000000000008094110218508200000000F -:10C20000000000000000A00002001000050900036B -:10C2100000089090000008000000000000000000EE -:10C2200000001000000000000000000000000000FE -:10C230000000000008A10803850003100000004072 -:10C240000003001000A121000000030040A1031121 -:10C2500020801000004000000000000000000000EE -:10C2600000000000000000000000000000000000CE -:10C2700000000000000010820841900091030000BF -:10C280000040000000000002004100000000000823 -:10C290008088000000000040002100000000000035 -:10C2A000000300000000000000410000000000004A -:10C2B000000000000000214121080220A10100002F -:10C2C00000400091000000834000080000000103CE -:10C2D000004100820100000000000000000000009A -:10C2E000000000000000000000000000000000004E -:10C2F00000000000000000000004100041001100D8 -:10C30000000000010000000000010091002000007A -:10C31000400002030890A000000004040040000058 -:10C32000000000010000000000000001000000000B -:10C33000840000E000006000500000E00000820087 -:10C34000500000E000000000500000E0000050003D -:10C35000500000E000000000810000E0000000004C -:10C36000500000E00000000000000000000000009D -:10C3700000000000000000000000410000E000009C -:10C380000000000A000007000000818100E00700B3 -:10C39000410000810000070000210082000007002A -:10C3A0000000000600000700000000420000070037 -:10C3B00041000000000000000000D70582050000D9 -:10C3C000000000000000AFBEAFAA0500050000009D -:10C3D000000000000000000000000000000000005D -:10C3E000000000000000000000000000000000004D -:10C3F0000000000000000000000000000A030A0323 -:10C40000000000000000000000000000000000002C -:10C41000000000002CAF0000AA00AAF0AA00AA00A9 -:10C42000000F000F000000000000000000000000EE -:10C43000000000000000000000000000D7AF82AF45 -:10C440000000000000000000A082A0AAF5FFF5FF98 -:10C4500000000000000000000000000000000000DC -:10C4600000000000000000000000000000000000CC -:10C4700000000000000000000000000000005F3F1E -:10C480005F3F00000000000000000000000000000E -:10C49000000000000000FFFF4300AA0FAAFFAA004F -:10C4A000AA00000F000F00000000000000000000C4 -:10C4B000000000000000000000000000000000007C -:10C4C000000040004000000000000CCF0CCF000036 -:10C4D0000000000000000000000080858A8F00003E -:10C4E000000000000000000000000000000000004C -:10C4F000000000000000000000000000000000003C -:10C5000080C0DFCF0000000000000000000000003D -:10C510000000000000000A003A3C0000F0F070F259 -:10C5200000FF0000AAAAAAAA000000000000000064 -:10C5300000000000000000000000000000000000FB -:10C540000000000000000000000000000CCF08DF29 -:10C55000000000000000000000000000D0D5DADF7D -:10C5600000000000000000000000000000000000CB -:10C5700000000000000000000000000000000000BB -:10C580000000C1C0CBCF0000000000000000000090 -:10C59000000000000000000000003A3C000000FF26 -:10C5A00070F200FF0000000000000000000000002A -:10C5B0000000000000000000000000610007800D86 -:10C5C000000000610007800D000100610007800D80 -:10C5D000000000610007800D000000610007800D71 -:10C5E000000000610007800D000000610007800D61 -:10C5F000000000000000000000000000000000003B -:10C600000000000000613007800D000005100028C8 -:10C61000000000000061002F800D00A105610A2EBE -:10C62000050D00A00061002E000D00000000002894 -:10C63000000000A000000028000000A00000000092 -:10C6400000000000AAF000C3F5F514BE00000000D1 -:10C6500005140500C3FFC3FF550F550FFF7D0028CC -:10C66000C0C0FCFC00000000000000000000000052 -:10C6700000000000000000000000000000000000BA -:10C68000000000000000000200F700003A00000077 -:10C69000000000000000000000000000000000009A -:10C6A0000000FEAAFEFF00000000000000000000E5 -:10C6B000000000000000000000000000000000007A -:10C6C000000000000000AAF0FFC3A0A014BE0000FC -:10C6D0000000F5D7F5FFC3FFC3FF550F550FFE7CD4 -:10C6E000042CBE82BE82000000000000000000009A -:10C6F000000000000000000000000000000000003A -:10C700000000000000000000004300E30000AA0059 -:10C710000000000000000000000000000000000019 -:10C720000000000002AA020000000000000000005B +:10BFA0000000008900900002800802C182A10209FD +:10BFB0000009009102000002000811410985C10931 +:10BFC0000080000000008000090080808580808063 +:10BFD0008080A0800000800000002008201100C0A8 +:10BFE00000080000402003000009002000000900B4 +:10BFF0000000000000000200000000009111048514 +:10C00000008480040091098000208010000000005E +:10C010000000000000000000000000000000000020 +:10C02000000000008900020010A1820409008200C3 +:10C030000200C103020041101011000200800880BC +:10C0400010004100100020001100C100904191102B +:10C050000309919109004100101103801000112182 +:10C0600040004110000009001080110020830900E9 +:10C0700020401100A000200003200300A080050044 +:10C0800005A1118003041100200010008041000070 +:10C0900000000000000000000000000000000000A0 +:10C0A00008002000C100020090000009C0820100C9 +:10C0B00010000000C1010088000000010089108804 +:10C0C000010200000188010000880000118841A0E1 +:10C0D00085000101C18801900000010100C000102D +:10C0E0000088010083880000910000C0010000C0AA +:10C0F00000902000891091009000010000A0C1A0D4 +:10C100000200A082C190C0010090080091909001AF +:10C11000000000000000000000000000000000001F +:10C12000A00001000100C100080900890021A11040 +:10C1300000000000000900C100010000001101C161 +:10C140000001000011080001010000008400010945 +:10C1500040C100411091A08300000001000003C114 +:10C16000010000888201000300000040004120001F +:10C1700083000000000000010101000500A0000292 +:10C1800000C040C00088000990A100C10140919109 +:10C19000C0010000000100000001000000000000DC +:10C1A00000000000000000000000000800830021E3 +:10C1B000910200020211008811C10008101002054E +:10C1C00011881008101010800041410900218010D2 +:10C1D00010C1802000A00091008300050009000824 +:10C1E00091882010111091210090000020800809F2 +:10C1F000830391200308002000051120001100098D +:10C20000008500C041050005209091110008418083 +:10C21000902080110010001000000041000000007C +:10C2200000000000000000000000000021201100BC +:10C2300010008200C11002090500090380101011CE +:10C24000030002084190100903000311008900094E +:10C2500080000003C11020899100C003100011006C +:10C26000038009082189A1080200080800000800CD +:10C27000919120000940A0051100200009008005CF +:10C28000800900000003051005800880830082906B +:10C2900010000080034100000000000000000000CA +:10C2A000000000000000000000000000000041004D +:10C2B00001009040A0000901000101000101C083BC +:10C2C0000003018800011111880501000000001120 +:10C2D000000008888801C1C18389A11009010100FB +:10C2E00001A0888401010189040101880100000086 +:10C2F00000000583000089009090A18411A0C00077 +:10C30000900004010000840140854082401002003A +:10C310009109A184C0C0900100000000000000004D +:10C32000000000000000000000A000C0009000001D +:10C33000608100E007000000810000E000000000D4 +:10C34000810000E000000000810000E0000000002B +:10C3500000000000000082000081000007000000D3 +:10C36000880000E000000021600000E00000000004 +:10C370000000880000E000008121818100E00700CA +:10C3800000000081000007000000810000E00000C4 +:10C390000000818100E00700420A00000000000068 +:10C3A000000000000000000000000000000000008D +:10C3B00000000000808000000054FFFF0000FFFF2D +:10C3C000FF00FFFF0000FFFFFF00FF0000FF00FF76 +:10C3D00000FF333333330000FFFF00003000000F55 +:10C3E0000807F0F0F0F00000AAAAFF00FF00F0F04C +:10C3F0000F0F00003CC33CC3CCCCCCCC000CFFFFE7 +:10C4000000000000287D7D7D0000DFFF00000000AF +:10C410000000096028F07DF03C3C3C3C000000003E +:10C42000000000000000000000000000000000000C +:10C43000000000000000808000000040FFFF0000BE +:10C44000FFFFFF00FFFFFFFFFFFFFF00FF0000FFF8 +:10C45000FF00FF0033333333FFFF0000C3C300008E +:10C46000000F000FF0F0F0F00000AAAA00FF00FF9C +:10C47000F0F00F0F00003CC33CC3CCCCCCCC000C84 +:10C4800055410000000028287D280000DFFF010042 +:10C4900000000960000028F07DF0F0AAF0AA00007A +:10C4A000000000000000000000000000000000008C +:10C4B000000000000000C3000000C0C0FFFF00FF3C +:10C4C000FFFFF0F0FFFF00FFFFFF555555553CC340 +:10C4D0003CC396969696FF0000FFFFFF0000000009 +:10C4E00000000000000055550000AAAAAAAAF0F01A +:10C4F0000F0F0000FFFF00005A5A5A5A6969696914 +:10C50000000000005555555500000000C3C3FFFF53 +:10C510000401104044880000BE1EB4145555555502 +:10C52000000000000000000000000000000000000B +:10C53000000000003C3C5555FF000A0AC0C0000046 +:10C5400000FFFFFFF0F0FFFF00FFFFFFAAAAAAAA6B +:10C550003CC33CC396969696FF0000FF0000FFFF89 +:10C56000030CA30C1B1B6969555500005555555507 +:10C57000F0F00F0FFFFF000000005A5A5A5A696985 +:10C58000696900000000FFF00F0000000000C3C355 +:10C59000FFFF0802208000004488BE1EB4140FFF75 +:10C5A0000F0000000000000000000000000000007C +:10C5B000000000000000000000000061502480091D +:10C5C00000A8400280018020920240E38000802188 +:10C5D0009002400080018020100240618006002D02 +:10C5E0000802A0610026000D00084063800480213D +:10C5F000900240608006802D1002000040618000A3 +:10C6000080210002006100248001000000610026FA +:10C6100000AD920600610000800100000061002072 +:10C620008001000000610006000D00000000000015 +:10C630000000000000610006000D00053C00FFC383 +:10C64000FF40F0F00000000000C3C0C0FF1EFF1E4E +:10C65000F0FFFCFC41000300C0C08080000000002F +:10C660000AFF00C300803C00000000205C5CFC0C62 +:10C67000B2B230F3C3C3C3025514555500003C3C5D +:10C680003C3CFFF0AAF05C5CFC0C303FFFFF00007C +:10C69000000000000000FFFF0F3C3CFC3FFFFFFFDD +:10C6A000000028FF7DFF0000000078785050000057 +:10C6B0000000000000000000000000000000FC007E +:10C6C000FFC3FF40F0F03C000F0000000000141E0C +:10C6D000141E000F3C3C410003000000808000005D +:10C6E00000000AFF00C300800000000000005C5C46 +:10C6F000FC0CB2B230F3C3C3C3415514551500004E +:10C70000FF0FF00000F0AAF05C5CFC0C303F000072 +:10C71000000000000100000000000F3C00C003C347 +:10C72000553C553C28007D000000000078785050B2 :10C7300000000000000000000000000000000000F9 -:10C740000000000000000000F0C3AA0003F503058C -:10C7500000000000820AD75FFF0FF0000000000019 -:10C760000AC00ACF3CF03CF00000000000000000CE -:10C770000C000000000000000000000000000000AD -:10C7800000000000000000000000A0C0AFC0C0C05A -:10C79000F5050000000000000000FCF5FC050000AD -:10C7A0000000000000000000000007F707F700008D -:10C7B0000000000000000000000000000000000079 -:10C7C00000000000000000000000F0C3AAFFF3F525 -:10C7D000F30500000000820AD75F353535353C3C53 -:10C7E0003C3CFAC0FACF00F0FFF00000000000006F -:10C7F00000000C000000000000000000000000002D -:10C80000000000000000000000000000A0CFAFCF3B -:10C81000CFCFF50500000000000000000CF50C056E -:10C8200000000000000000000000000007F707F70C +:10C7400000F3F3F3FFC30F0300050014000A000C0D +:10C75000BFBF3D3D78FF78FF00000000000F000ADA +:10C76000000000000A0A380000000000000000007D +:10C770000000000050FA3C3CFFC3FFFF0FFF000029 +:10C7800000000F0F0F0F287D787800000000F0FFE9 +:10C790003C3C0000000034141414CFCFCF0C3C3FBD +:10C7A000FCFF35353535BEFABEFA0000000000004A +:10C7B000000000000000000000000000000000F089 +:10C7C000F0F000F3F3F3FFC30F0300050014000AB9 +:10C7D000000C878705057828782855000505000096 +:10C7E000000A000000000F0F3C00000000000040A5 +:10C7F00000000000000050FA3C3C0A020A0A082827 +:10C80000C3C30000D7D71414287D78780000000037 +:10C81000000F3C3C00000000341414140CCF0C0C2E +:10C820000003C0C3F5F505051450145000000000C6 :10C8300000000000000000000000000000000000F8 -:10C84000000000001011200800002000008000807F -:10C850000000A0912000A000C0000000A0002080E7 -:10C860002000210004042000840084000200020053 -:10C87000840000004000888084008400848200805E -:10C8800020802080000320808800200020000000FD -:10C8900004008804040000008800840020002000B8 -:10C8A00000000000040088008800880020000000CC -:10C8B000C00020008400840020002004200020000C -:10C8C0000000000088000040100000000000002070 -:10C8D0000020000000200000000021000040004077 -:10C8E0000020000004020000000000000000000022 -:10C8F0000900000200A0090000020400000000047A -:10C90000000400040004000041104000000000008A -:10C910000000000040020000000000004000000095 -:10C9200000000002400200002000000000020000A1 -:10C930001000200040000004000000000000000083 -:10C9400000000000000000000000000000000809D6 -:10C950000005210001000010000000400010401000 -:10C9600000000000100000900200000084000000A1 -:10C9700000000000000000000100000000000009AD -:10C980000000200001042100000000100800000049 -:10C9900000100000000000000010004000400000F7 -:10C9A00090000000000008001000000000002000BF -:10C9B0000000040002000000000000000000000071 -:10C9C0000000000000000010000000000090008443 -:10C9D000020800080800088400010002000809009D -:10C9E00080082010000000080020000800840000DB -:10C9F000008400840000000800004000008400085B -:10CA000000040004800020C1200000000084800891 -:10CA10004182000400000008001000080004000823 -:10CA200000080008040004008400400840000008DA -:10CA300000000008000000040000001000080008CA -:10CA4000000800080000000000000008400000008E -:10CA500000000000000300009082400590004005A7 -:10CA6000840800000002000004050004000000002B -:10CA7000A0000000000000080011000800080002EB -:10CA80000000000800030000000000030000000098 -:10CA9000002100000004002000410110C000000837 -:10CAA0000041000000008400000000008800000435 -:10CAB0000000000000000000000000000000000076 -:10CAC0000000000000000000000000000000000066 -:10CAD00041880804409000884100402040000084C4 -:10CAE000001000000004402000000300410400008A -:10CAF00003000000000000000084000008A00800FF -:10CB000000010000000000A0080000A000000000DC -:10CB100000000300030041000000000008010000C5 -:10CB200000A00040090041000000030008000000D0 -:10CB30000020000440000090000000000000000001 -:10CB400000000000000003000000000000000008DA -:10CB5000A0408200C000840082009000020000001B -:10CB600002008400A00002000000A01100000000EC -:10CB7000080040400000081084004000000002004F -:10CB8000400008000800A00020000005C0000008C8 -:10CB9000000000000821000000008200900000005A -:10CBA0000000080008000800000900000000000064 -:10CBB0000000000200000000A004000000000000CF -:10CBC000080000000000000000000000000000005D -:10CBD00000000200030003002100030011848240D2 -:10CBE000038403400240024021000340024002004F -:10CBF000050003000000000003000000000000002A -:10CC000000008000000000000000900000A0000074 -:10CC1000000000000000000000000000000000C054 +:10C8400000F000002000010000042004C0000000EF +:10C85000000020000000040004800500000000002B +:10C860000000200000000400000020000100008003 +:10C87000008020050000200040000102840000002C +:10C880000000C00000030000080000A0208000108D +:10C890000010000090000000000020004000010097 +:10C8A00002000104010000000000010000800100FE +:10C8B0000100000000024000000000002011000004 +:10C8C000000000000002000002C000008000000024 +:10C8D0000000000000C000408000892084020000A9 +:10C8E0000000000000000000000000000000400008 +:10C8F0000010002000000000000080004001000047 +:10C90000050000020000000010008500002110401A +:10C910000000100200000000000000000002000003 +:10C92000020280000800080000000000040000204F +:10C93000040004000000000100000000000000846A +:10C9400000000000000000010000000000000000E6 +:10C9500000000009000010000000000000000000BE +:10C96000000000000000000000008800000500102A +:10C97000080000000000008002000000000001002C +:10C9800000000000000000000000000000000000A7 +:10C990000400000000000000000300000000000090 +:10C9A0000000000000000000000000000000000087 +:10C9B00082100400000082000000000082002010AD +:10C9C00082008200000082000000000000000010D1 +:10C9D0000010000000002100210000000000008481 +:10C9E0000008000800080008008440080008000053 +:10C9F00000088000000000000040801000000010CF +:10CA00004010000809840010000000000010001011 +:10CA100000008910000000820000001000000000EB +:10CA200000000000000800000000000002100010DC +:10CA30000000000000000084000000100000000062 +:10CA400000000502000800000400000000000100D2 +:10CA50000000000384830080C0000000008800897B +:10CA60000088880000800121009000100021004112 +:10CA7000001000040021010884000008004000218B +:10CA800000A1000000A10080000000020000880852 +:10CA9000090800209021001190082000C000040027 +:10CAA0000400042000080000044004000400040006 +:10CAB000040004008400040810000000000084004A +:10CAC00000020408000004000808100088000008A4 +:10CAD000200800A000080004000400100008000462 +:10CAE000000400040000000402820404009000908E +:10CAF00000A000900000080002000084000000A1D7 +:10CB00002100081000001104002000004120000056 +:10CB10000082880400A10088410405A000000000F4 +:10CB200009000082058204001100090000000000D5 +:10CB300000000300000008040090800000000000D6 +:10CB40000008000200000000000000200088000033 +:10CB50000000000040000000001100000000000084 +:10CB60008811A02100000000200040050000840082 +:10CB700000000000000000000000820000000040F3 +:10CB80008400000008000800000000000000000011 +:10CB9000000000000000001004050000000000007C +:10CBA00000080000080000000041080000000041EB +:10CBB000002000000011C000101100040000C0009F +:10CBC000020000000000000400100020000000002F +:10CBD00000000000000080000000000000000000D5 +:10CBE000000000A00084000200008000000020007F +:10CBF0002000000000000000210041000000200093 +:10CC0000400100A0000080000000000000000000C3 +:10CC10000020000000000000000080000000000074 :10CC20000000000000000000000000000000000004 -:10CC300010000000000000000000000000000000E4 -:10CC400000000000000000040000000000100000D0 -:10CC500000000800000810219020000000000400DF -:10CC600008081000A000821100040809001000410B -:10CC700000000000000000080000000000000400A8 -:10CC80000000000000800000840082000840004096 -:10CC9000A000000000008200000000020008400028 -:10CCA00004000000000084000000000000000000FC -:10CCB0000000000000000000000000000000000074 -:10CCC00000000000000000000000000000009000D4 -:10CCD000000000000000040040001100200004904B -:10CCE0008204049005A0000021040800208811009F -:10CCF00008000020000040A000000010110000000B -:10CD000000000000210003020000009000A00000CD -:10CD1000000000000008000000000000000000000B -:10CD2000089008000890009000000000000000003B -:10CD300000004000109000080000080008880090E3 -:10CD40000000000000900000000000000000000053 -:10CD50000000000000000008004000100005004036 -:10CD6000C00008000240080000410803C0038240E0 -:10CD70000208004040000200000000000008900887 -:10CD80000000000000000400000000088400000013 -:10CD900000000000000082000000000000400010C1 -:10CDA0000000000000000000000000000000000083 -:10CDB000000000000000000008000000000000006B -:10CDC000000900000000000000000000000000005A -:10CDD0000000000000000000000000000000000053 -:10CDE00000001000000005040482020041400040E1 -:10CDF0000200410008004140020021000000030041 -:10CE000021000000100000000000000000000000F1 -:10CE10000000000000000000000000000000000012 -:10CE20000000000000000000000000000000000002 -:10CE300000000000000000000800410000000000A9 -:10CE400000000000002000000000000000000004BE -:10CE500000000000000000000000000000000000D2 -:10CE60000000000008900040000810820000A100AF -:10CE700082000000C0A000900010088200000000A6 -:10CE800000000000000000000000000000000000A2 -:10CE9000000000000000000000000000000000A0F2 -:10CEA00000820020000208000000000000000000D6 -:10CEB00000000000000040000000000082000000B0 -:10CEC0000000000000000000000000000000000062 -:10CED0000000000000000000000000000000000052 -:10CEE0000000000000008000000000008000000042 -:10CEF00004008000000080800080000080000000AE -:10CF00000000000000000000000000000000000021 -:10CF100000000011001100000000200000000000CF -:10CF20000080008000000080000000000000000081 -:10CF300000000000000000000000000000000000F1 -:10CF400000000000000000000000000000000000E1 -:10CF500000000000000000000000000000000000D1 -:10CF60000000000000000000800000C100088000F8 -:10CF70000000000000000000000000008080008031 -:10CF800000000000000000000000000000000000A1 -:10CF900000800000000000000040000000090000C8 -:10CFA0000000000000410000000000000000000040 +:10CC30000000000000840000000000000000000070 +:10CC400000000000000000000000000000000000E4 +:10CC50000000000000000000000020000011200083 +:10CC60000090010000040004000500040005218478 +:10CC70002000200083C182A1012100800000020069 +:10CC8000902000800380000000040480A000018048 +:10CC9000A0800080000002000811000000000000D9 +:10CCA00000000000000300000000002000008820B9 +:10CCB000002000000800000082210000A000000009 +:10CCC000000004000000000000020000002100003D +:10CCD00005000020000020A0401011000082058403 +:10CCE0008000000420C021A10003008200852100F3 +:10CCF0008241801080902004000420A021040800BC +:10CD00008000000121208240040000A109200010C1 +:10CD10000404050400040000008400000000210455 +:10CD2000119000001090050040101000000003203A +:10CD30000800050000C000002140089005204100C7 +:10CD400005000000002008202000000000880000EE +:10CD5000000010044000000000000000000000037C +:10CD60008400400000004000A02120212004200475 +:10CD7000A000200340110204082100218400880043 +:10CD80000009841100000011400900004010000457 +:10CD90004000000000030800000000000000000048 +:10CDA0000000000200000041000800000000000038 +:10CDB0000000080000000000080000000000002142 +:10CDC00008008203020002000000A0000000A00092 +:10CDD0000021A00300000000000009000082000004 +:10CDE0000000200009040004208800000000000169 +:10CDF0000001000080000000800100A00000000091 +:10CE00000000000000000000000000000000000121 +:10CE10000001000000000000000000000000000011 +:10CE200000000000000000000000080000000000FA +:10CE300000000000000000000000000000000000F2 +:10CE400000000000000000000000000000000000E2 +:10CE500000000000000000000000000001010000D0 +:10CE6000880000014091000488021084A0410890CD +:10CE70000040C0A001C00004100400109108104040 +:10CE80000105C00410C00101821190A10200000040 +:10CE90008400000001080041C0A000A0000040C0C4 +:10CEA00000880090820200000000000000000000E6 +:10CEB0000000000000000000000000001000000062 +:10CEC00000000000000088C000908890040800C0A6 +:10CED00000900000A04010C09008008200401008A0 +:10CEE000022100200008A091000200040000A0918F +:10CEF0008488001180001189052100110080918231 +:10CF000009A111040010808320020010808200001B +:10CF100010008000000011051020004100030000F7 +:10CF20008080000000000080000000000000000081 +:10CF30000000000000000000000000000000800071 +:10CF400000000000000000004080008000008080A1 +:10CF500005800080000000008580800000800000C7 +:10CF6000000010000200884009804188C0118880BC +:10CF700000000221118883030900020011008205CC +:10CF80008400028311838384800080080080808075 +:10CF9000910010001000C10020004100401103006A +:10CFA0000000000000008040800000000000000041 :10CFB0000000000000000000000000000000000071 -:10CFC00080000000000000000000000000000000E1 -:10CFD0000000000000000000000000000000000051 -:10CFE000000000000000000000001000100200839C -:10CFF0009002000000000000000000000000A004FB -:10D000000090000000000000000000000000000090 -:10D01000000000020000000000000000000000000E -:10D0200000000000000000010000004000000000BF -:10D0300000000000000000000000000090008200DE -:10D040009000080000000000000000000000000048 -:10D0500000000000000000000000000000000000D0 -:10D060000000000000000000000000001190000817 -:10D0700008040284000000000000000100400002DB -:10D080008410850200000000000000000000000085 -:10D090000000000000000000000000000000400050 -:10D0A0000000000000000400000010000400002048 -:10D0B00000000002000200000000000000000088E4 -:10D0C0000088000200900000000000000000000046 -:10D0D0000000000000000000000000000000000050 -:10D0E00000000000000000000000000000008800B8 -:10D0F00000008000808000080008002000040080FC -:10D10000000080800400000000000000000000001B -:10D11000000000000000000000000000020000000D -:10D12000000000001100000000000000000080006E -:10D1300000000000008000800000000000000000EF -:10D1400000000080008000000000000000000000DF -:10D1500000000000000000000000000000000000CF -:10D1600000000000000000000000000000000000BF -:10D17000800200820011000000000000000000009A -:10D1800000400008000080000000000000000000D7 -:10D190000000000000000000210000000500100059 -:10D1A00000000000000000000000000000028000FD +:10CFC0008000800080000000808080008011800050 +:10CFD00080808000801080008080000080118000B0 +:10CFE0008080000400000000C1019008C0C10989D0 +:10CFF00008C084881000418591C1820000000100B2 +:10D00000C1001100C0C0050485C1080082002004D1 +:10D01000C0908800A100A10091100004000001014F +:10D0200000000000840000000800900000000000E4 +:10D0300000000000000000000000000008000200E6 +:10D040000000C000080082000000C0900200100034 +:10D050008400C090080004018400C090000010000B +:10D060008400C0900000000100010101A10801112D +:10D07000C0850310104000889041C18888000108D5 +:10D08000000010C189900089C0C18908840801A0EE +:10D090000021400300210002000901C00800000037 +:10D0A0000000900100004002008200908288000091 +:10D0B0000000000000000000000000000000000070 +:10D0C0000088000800C00008000000900090A01038 +:10D0D0000001009000C102080088009002C01011F9 +:10D0E0000000009101C10010000308211120410936 +:10D0F00040C0C18511080082090984059102000918 +:10D10000089105008091410209028005118800887C +:10D1100010A00308008900090010008803820005A0 +:10D1200003000003001100000080000000808080E8 +:10D1300000000000000000000000000000000000EF +:10D1400000000000008000800080000000800000DF +:10D1500000800008009100C18080000000800080F5 +:10D1600080880009008510C1211020912100034012 +:10D1700010094080408003110205881103008004DB +:10D1800009051100080003000205899103801000C1 +:10D19000800000890080808000890021000000104C +:10D1A00005821100030008000000000500C0000017 :10D1B000000000000000000000000000000000006F -:10D1C00000000002008000000000000000000000DD -:10D1D000000000000000000000000000000000004F -:10D1E000000000000000000000000000000000003F -:10D1F000000090000821909108000000000000004D -:10D2000000008800901102000400000000000000EF -:10D21000000000000000000000000100000001000C -:10D2200000000000000000000000000000000000FE -:10D2300090008800000000000000000000000000D6 -:10D2400000000000000100200010000000000000AD -:10D2500000000000000000000000000000000000CE -:10D2600000000000000000000000000000000000BE -:10D2700000000000000A000007000000000000009D -:10D28000000000000081000007008800000000008E -:10D29000000000000000000000000000000000008E -:10D2A00000000000600000E0000000000000000638 -:10D2B0000000070041000000000000000000000026 -:10D2C000000000000000000000000000000000005E -:10D2D000000000000000000000000000000000004E -:10D2E000000000000000000000000000000000003E -:10D2F00000000000000090039F030060F060000049 -:10D300000000000000000000810166696663000003 -:10D31000000000000000000000000000000000000D -:10D3200000000000000000000000000000000000FD -:10D33000F3F3F3F3000000000000000024000000FD -:10D340000000000000000000000000000000F0E706 -:10D3500000000000000000000000000000000000CD -:10D3600000000000000000000000000000000000BD -:10D37000000000000000000090F39FF32020E0E098 -:10D380000000000000000000000081016666666683 -:10D39000000000000000000000000000000000008D -:10D3A000000000000000000000000000000000007D -:10D3B0000000303030300000000000000000240089 -:10D3C000000000000000000000000000000000005D -:10D3D000F024000000000000000000000000000039 -:10D3E000000000000000000000000000000000003D -:10D3F000000000000000000000000000000000002D +:10D1C00000000000000000800000000500030000D7 +:10D1D00000008011800300000000801100408000EA +:10D1E0000000801180408000800001890111010051 +:10D1F00001018400850885109000C0880489918809 +:10D2000004000010000001000000820404918384E7 +:10D210004000040082A18882880800850008000080 +:10D22000000000050100000001000000000000A057 +:10D23000009000000000000000000000000000005E +:10D2400000000000000000100010000000000000BE +:10D2500000080000C001202020000000C001209034 +:10D2600040000200C001200004080200810000E02C +:10D2700000000000880000E000004842818100E0DA +:10D2800007000082810000E000000000810000E053 +:10D29000000048420082000007000000600600E035 +:10D2A00007000000818100E007000000000000810D +:10D2B0000000070000000000000000000000000067 +:10D2C00000000000000000000000000000000081DD +:10D2D00000000700000000410000070000000041BE +:10D2E00000000700000000410000070000000000EF +:10D2F00000000000000000000000204004020FFFBA +:10D300008DBD003C003C00000000F0F0000000007B +:10D31000000020401080669966997A60666000007F +:10D3200000000909080000000000000000000000E3 +:10D33000000000008910081000000000000000003C +:10D340000000000000000000000000000000F0F0FD +:10D3500000000000FFC33C00FF00FF00427E3C00D5 +:10D36000CFF33030C0FC3C000FF0FF007E423C00A9 +:10D370000000000000000000000000011080080113 +:10D380000FFF9999003C093D00000000F0F00000FB +:10D3900000000001040208016798649B66606660F3 +:10D3A0000000000009090800000000000000000063 +:10D3B00000000000000099001800000000000000BC +:10D3C0000000000000000000000000000000FF005E +:10D3D000FF0000000000FFC33C00F0F000007E42B0 +:10D3E0003C000C303030FCC03C003C3C00007E4235 +:10D3F0003C000000000000000000000000000000F1 :10D40000000000000000000000000000000000001C :10D41000000000000000000000000000000000000C :10D4200000000000000000000000000000000000FC @@ -118114,2289 +118114,2289 @@ :10D4400000000000000000000000000000000000DC :10D4500000000000000000000000000000000000CC :10D4600000000000000000000000000000000000BC -:10D470000000000000000000000000000309030994 -:10D48000E1E1E1E10000000000000000F000407078 -:10D49000990099000000000000000000000000005A -:10D4A000000000000000000000000000000000007C -:10D4B000000000000000D313D010000000000000A6 +:10D470000000000000000000000099994020020414 +:10D480001008200400F000F00000FF00FFFFD3C3ED +:10D490000000C3C30500000500A000058F8F000039 +:10D4A00066E7063700000000240FE70F9090D09049 +:10D4B000000000000000C1C1000F427EC3FF000059 :10D4C000000000000000000000000000000000005C -:10D4D00000000042FF7E000000000000000000008D -:10D4E000000000000000000000000000000000003C -:10D4F000000000000000000000000000000009091A -:10D500000303FFFF00000000000000000000F00027 -:10D510004070990099000000000000000000000029 -:10D5200000000000000000000000000000000000FB -:10D530000000000000000000DF1FDC1C00000000F5 +:10D4D000000066663C3C000000000C0CCFCF003C16 +:10D4E0003F03000F6C630066BDDB003C4E720F0F04 +:10D4F0003333000FF0FF0000000000009999801006 +:10D5000001088001400281F100F08080FF80FFFF70 +:10D51000C3C30000C3C3A00000A0A00005008F8FFC +:10D52000F0F0003C060F00000000240FE70F909081 +:10D530009090000000000000C3C3000F003C81BDBC :10D5400000000000000000000000000000000000DB -:10D550000000000060606F6F00000000000000002D -:10D5600000000000000000000000000000000000BB -:10D5700000000000000000000000000000000000AB -:10D5800085000A28050000A000610006000D0000CB -:10D590000000002800000000000000000000000063 -:10D5A000000000000000000000610006000D000007 -:10D5B00000610007800D0000000000000028050049 -:10D5C0000400000000000000000000000000000057 -:10D5D000000000000000000000010000000000004A -:10D5E000000000000000000000000000000000003B -:10D5F000000000000000000000000000000000002B -:10D6000000000000000000000000000000000045D5 -:10D6100010550000000000000000000000000000A5 -:10D6200000000000000000000000040400000000F2 -:10D6300000000000000000000000000000000000EA +:10D55000000000000F0F0F0F000000000C0C0C0C5F +:10D56000003C033F000F6C6300662442003C4E7297 +:10D57000000000FF000F000F006100048009120688 +:10D5800000610000800108000061002080010000AF +:10D590000063900080019206006100008001080095 +:10D5A00000612026000D0008006100268095000023 +:10D5B00000610020800100000000000050200000F9 +:10D5C000000000000000000000000000000000005B +:10D5D00000000000000000900005000000280C0082 +:10D5E00012C003E3032E0C0D92C0038203280C002B +:10D5F00092C003E3032E0C0D82C03F3F3F3AF00080 +:10D60000F0000F7D0F28A0A3ACAF55555555F0F392 +:10D61000FCFFFF0FFF3CF8F8FBFBFF3CFF0F0F0F79 +:10D620000F0F00000000F300A800000000000AFF38 +:10D630003C005555FC0C28EBEBEB00000000000013 :10D6400000000000000000000000000000000000DA :10D6500000000000000000000000000000000000CA -:10D6600000000000000000000000000000000000BA -:10D6700000000000000000000000000000000000AA -:10D68000000000000000000000000000000000009A -:10D69000FF75DF55000000000000000000000000E2 -:10D6A0000000000000000000000000000404000072 -:10D6B000000000000000000000000000000000006A +:10D660000000000000000000AAF0AA000000000076 +:10D6700000000000000000003CF03C003F3F303064 +:10D68000F141F0000F7D0F28A0A3ACAFFF000F0FFA +:10D6900000030C0F0F0F003C28282B2B3C3C000FE5 +:10D6A0003CFF00C300000000F30080000000000009 +:10D6B0000A003C005555FC0C2828EB28000000000F :10D6C000000000000000000000000000000000005A :10D6D000000000000000000000000000000000004A -:10D6E000000000000000000000000000000000003A -:10D6F000000000000000000000000000000000002A -:10D700000000000000000000000000000000000019 -:10D710000000000000000000000000000000000009 -:10D720000000000000000000000000000000303099 -:10D730003030000000000000000000000000000089 +:10D6E00000000000000000000000AAF0AA000000F6 +:10D6F000000000000000000000003CF03C000000C2 +:10D700003F0F0F000000AF05AF05C0AAFCAAFFF550 +:10D710005F55F0FFAAAA5F5FFF0F3030FFFF3D3D6E +:10D72000AF053C3CFCFC00FFFFFF000000000000D8 +:10D730000000F5F514BEFF00171700FF00FF000002 :10D7400000000000000000000000000000000000D9 :10D7500000000000000000000000000000000000C9 :10D7600000000000000000000000000000000000B9 :10D7700000000000000000000000000000000000A9 -:10D780000000000000000000000000000000000099 -:10D790000000000000000000000000000000000089 -:10D7A0000000000000000000000000000000000079 -:10D7B00030303030000000000000000000000000A9 +:10D780000000030F0A000000AFAF0505C0AAFCAA05 +:10D79000AAA00A00000FAAAA5555F00030F330F3F2 +:10D7A0003D3DAF05000FF0FFE0F4F4F40000000091 +:10D7B00000000000A0A014BEFF001717F0F03C3CD2 :10D7C0000000000000000000000000000000000059 :10D7D0000000000000000000000000000000000049 :10D7E0000000000000000000000000000000000039 :10D7F0000000000000000000000000000000000029 -:10D8000000000000000040004080A00020800200D6 -:10D810002083C0020000000000000400000000009F -:10D820002000000000000000010004082000880023 -:10D830002000040000000000040004000400880030 -:10D840002000000304000408040010001008000079 -:10D850002000880020000810880020002000200000 -:10D860000000200000000400000040002000040030 -:10D870000008000000002000200088002000200098 -:10D880000000200020000002100080021000800430 -:10D89000A002000410000000000000900000000042 -:10D8A00020000004400004020000400040400090BE -:10D8B00000000000C00000004004800080008000E4 -:10D8C00041000000000000400000000000002000B7 -:10D8D0000000000000400000800100000000000087 -:10D8E00040400000000041004100000000004000F6 -:10D8F00080402000200040000400040000000000E0 -:10D900000000400000000000000000100290000035 -:10D910000000010083100000000000000010000063 -:10D920000000000082000000000000020002000071 -:10D9300000000000001000000100030000000420AF -:10D94000040000200290000001000100010001001D -:10D950004000000000000010000000000010000067 -:10D960000000000000000010000000C000000000E7 -:10D97000010090090100000000000000000000000C -:10D980000000000000000010000000000000000285 -:10D99000000000002008200800000000000000082F -:10D9A00000000400000000200000000000A10001B1 -:10D9B00000000000000800080000048204000408C1 -:10D9C0000009840000110020000004840488040081 -:10D9D000040000100000001000080000000000001B -:10D9E00000080010000000000000040000410000DA -:10D9F00000000408000004820010008800000000FD -:10DA000000080400040000000400200000000402DC -:10DA100004001000000384800000000000080205DC -:10DA2000000500000000000004004000000020008D -:10DA30000000000000000000002104000021200080 -:10DA400004000400000000000021000000000005A8 -:10DA5000000000008800840002000020000804008C -:10DA60000000000040000000400088000400C000EA -:10DA7000000088000000000082000000000000009C -:10DA8000000020000000000000000000000000A0D6 -:10DA90000808098200000900110400000084000049 -:10DAA000008408000000000000080000400800A0FA -:10DAB0000000000000000000030000000000000063 -:10DAC00041000000210000000300002000000400CD -:10DAD000000000000000100000000008000004002A -:10DAE0000000000000000000000000000000000036 -:10DAF000090000900000000000000000000000008D -:10DB00000000000000000000000000000000A00075 -:10DB100040000000A0000400400090090000C00088 -:10DB200082000000080408090800820000000000CC -:10DB30000000000000000840012004000000000078 -:10DB4000C00000000000000000050000040000000C -:10DB500000210000A00000000000000008000800F4 -:10DB6000000000840000000000000009080082009E -:10DB70000800000000000800000000000000010094 -:10DB80000400000000000800000000000000000089 -:10DB900000000000000003000000800011000000F1 -:10DBA000118210000000040003022000000004A005 -:10DBB0000000000000000000000004010000000060 -:10DBC00000000000210000000800000000008000AC -:10DBD0000000000000000000040000000800080031 -:10DBE00000000000201000000000100000001100E4 -:10DBF0000000000000000000000000000000000025 -:10DC0000040080C04100000000000000000000008F -:10DC10004100820010001002A0000000C0418241BB -:10DC200000008241C041A0028202A000A08000004A -:10DC3000A008000088080804820000000400820098 -:10DC4000A00000000000A000000000000000000094 -:10DC500000000000040000000000000000000000C0 -:10DC60000000C0000000840000000100000000006F -:10DC70008200000000000800A000008000000000FA -:10DC80000800820008800000000000000000000082 -:10DC900000000000000000000004000009900040A7 -:10DCA000080402000020040000000000000003023D -:10DCB0000082000000000000000100400000800021 -:10DCC000080000000000000010000000000000003C -:10DCD00000000000000000A0000000000004100090 -:10DCE0000000080000000000050000000200000025 -:10DCF00004040800400000000000000000100000C4 -:10DD000000000800200000100000000000000000DB -:10DD1000000000000000100008004000080008415A -:10DD20000003A003000908000802000040000808E2 -:10DD3000400040090011000000022000080000021D -:10DD400082208200000208000000000000000000A5 -:10DD500000000400000000000000000800000000B7 -:10DD600000000004000000000000000000000000AF -:10DD70000000000082000000000000000800000019 -:10DD8000000088000000000000000000000000000B -:10DD90000000000000000000000000000000000083 -:10DDA000000003001100000000000000002000003F -:10DDB00000040000000005000000000180000000D9 -:10DDC0000000000100000000000000000000000052 -:10DDD00000000000800000000000000000000000C3 -:10DDE0000000000000000000000000000000000033 -:10DDF00000000000000003000000000000002102FD -:10DE000000200000000000000000000000000000F2 -:10DE100000000000000000000000080208820082EC -:10DE20001004C0032084010282839008004000A0F7 -:10DE300008C00390200200030982409120400004A2 -:10DE40008809000090200004008200000204008283 -:10DE500000000000000000000000000000000008BA -:10DE6000009000000000000000000000000800001A -:10DE70000002008800000000000000000000000018 -:10DE8000000000000002000400000000000000008C -:10DE9000000000000000000000000000808004007E -:10DEA0000080C0000388009104C1801000000000C1 -:10DEB000000080008800008900901021910500106A -:10DEC000008000834000800000800080000000800F -:10DED00000800000000000000000000000000000C2 -:10DEE00000800000000000000000000000000000B2 -:10DEF00000000080000000000000000000000000A2 -:10DF00000000000000000080000000000000000091 +:10D8000000000100080008000004000004000000FF +:10D810002000000020000000000040000400000084 +:10D8200088000041200400000010000500000000F6 +:10D830002000010020000080850020000000C000C2 +:10D840002000000100002000004000400000404196 +:10D850000400200000112000000020002000000033 +:10D8600082002000000020000000000000000000F6 +:10D87000000000000000200800000000200400005C +:10D880002000000008008040800000000000000030 +:10D890000000000000000000000000000000000088 +:10D8A00000000000000041010000000021002000F5 +:10D8B0000000000020008000000420020000200082 +:10D8C0002102000000000000000000010003100021 +:10D8D0000000000000001000000000000002000234 +:10D8E0004000000000001102000000000082000063 +:10D8F0000002000200000004000200040002000018 +:10D90000400000040004000000410010000000047A +:10D9100000000000000000000000000000100000F7 +:10D9200000000010020000000000000000001000D5 +:10D9300000000000A00020002000000400040000FF +:10D94000000000000000000002000280020002004F +:10D9500002080280020002800280028002800240EF +:10D9600002000200020002808200020002000200A7 +:10D9700002000000020000000000020000000000A1 +:10D98000020000000200000000080000000800087B +:10D99000000200000000000000000400000004007D +:10D9A000000000000000000000080000000800085F +:10D9B00000040000000000008000800040A10089F9 +:10D9C00000080000008400000000800880408008FB +:10D9D000808480848040808484408840804080406F +:10D9E00080018088800283048040000800000008D5 +:10D9F0000010000802000400040002000000020001 +:10DA0000020800880400000002002000400000001E +:10DA10001000000800009000080000050000000849 +:10DA200000080008000000000000000000000000E6 +:10DA300000000000000000000008000800080208C4 +:10DA4000414010200000000040080000400040213C +:10DA5000040001084003A0009140000000050003FD +:10DA6000008000210040000085408200820082008A +:10DA70000000040802100200000800000400040076 +:10DA80000000900002000000000090004000000034 +:10DA90000000002040A000000020800000020000E4 +:10DAA0000010038200080084030000000084038447 +:10DAB0000800000040080000000800A00200000468 +:10DAC0000200400000A00008000800200000002024 +:10DAD00009000000024000000000020100000000F8 +:10DAE0002188004000080001000002010500040038 +:10DAF0000084030040000400000008000000000053 +:10DB000000000000002000000020040000000000D1 +:10DB1000000400000209000000000800820000006C +:10DB200004100810000000000800000000000000C1 +:10DB3000000082000000004100040010000200000C +:10DB400008000000000200040000000000000000C7 +:10DB500000100000000000000000000000000200B3 +:10DB600002000200C00000100000000000000000E1 +:10DB7000004000040004000000000000000000005D +:10DB800000000000C000080000000040000000008D +:10DB90000000000000008000000000000000000005 +:10DBA0000000000000000000000000000000000075 +:10DBB0000000000000000000000000000000000065 +:10DBC00000000000000000002004000000000082AF +:10DBD000000000A0000000000000000000000000A5 +:10DBE00080008084C1000000080000A00000000048 +:10DBF0000000000000000084000000000010000091 +:10DC0000020000000000000000000000000004000E +:10DC10000000400000800000000001000280008041 +:10DC200000000000000000000004000000000010E0 +:10DC3000000001800080018001004000820000009F +:10DC4000000000009000200204000011000000000D +:10DC50000000000000800000012000000100000022 +:10DC60000404100000000000000001400108000052 +:10DC700000000100000000000000000000000000A3 +:10DC8000000008000000000000000000000000008C +:10DC90000000080040040010000410A02010000440 +:10DCA00000042010008400881008210800000010E3 +:10DCB000000800A0200400042004200040002100EF +:10DCC0000090000405102000090180A0000400005D +:10DCD000210000000000004003000204048802004C +:10DCE0000004050000000090000000000200020097 +:10DCF000000000A00200000021002100000004003C +:10DD0000080400400040400009000020000400001A +:10DD100000A00400002000000000880001000000B6 +:10DD200000000000200000000000000000000008CB +:10DD300000000000000000000408000000000004D3 +:10DD40000008000000004000000010000000000873 +:10DD500000000000000000000000020000000000C1 +:10DD600000000200000000000000000000000000B1 +:10DD70000021020008000000000000000000000078 +:10DD8000000000080010000000000000000000007B +:10DD9000000000000000040000000000000002007D +:10DDA0000000000000008000000000000000008271 +:10DDB0000000000000000000000000000000000063 +:10DDC00000000000000000008000000000000000D3 +:10DDD0000000410000000000000000008000000082 +:10DDE0000082000080001100000000000000000020 +:10DDF0000000000080000000200000000000000083 +:10DE000020000000000000000000000000000000F2 +:10DE10000000000020000000000002C00010008888 +:10DE200002A00100840000000000000000000000CB +:10DE300000000000000000000000000100010000E0 +:10DE400000000000000000000000000001010001CF +:10DE500090000000000000000000000010C0000062 +:10DE60000000008800C000000088000000C0002002 +:10DE70000000200000C00000002020000000000082 +:10DE80000000000000000000000000000000000092 +:10DE90000000000000000000000000000080000002 +:10DEA0000000000004042111000500000000000033 +:10DEB000000000000000000000000000001102400F +:10DEC0000002000000000000000000000009210323 +:10DED000210280040000000000000000000080809B +:10DEE0000000000000000080000000000000008032 +:10DEF00000000000000000800000000000000000A2 +:10DF00000000000000000000000000000000000011 :10DF10000000000000000000000000000000000001 -:10DF2000809080000080000000A0001000A0800011 -:10DF3000008800080080008000A08009008340A0C5 -:10DF400021A0100210A000000021008000000000AD -:10DF500000000000000000000000000000000000C1 -:10DF600000000000000000000000000000000000B1 -:10DF700000000000000000000000000000000000A1 +:10DF2000000200000000A000840091210403000012 +:10DF300000000000000000000000000000000900D8 +:10DF400041004011000200000000000000000390AA +:10DF500010004011A00900050000000000000000B2 +:10DF600000000000000080000000000000008000B1 +:10DF70000000000000008000000000200000800081 :10DF80000000000000000000000000000000000091 -:10DF9000000000040000000000000000000000007D -:10DFA000900002C1082002C0820008C1088388C016 -:10DFB000400004C1048210C0204090C04091A0C124 -:10DFC000100282C1A121A1C00000000800020000CF -:10DFD0009000000000000000000000900000000819 -:10DFE0000000000000000000000000000000000031 -:10DFF0000000000000000000000000000000000021 -:10E000000000200090008200080090000000000046 +:10DF90000000000000000000000000000000000081 +:10DFA000880090002000000091A040009101A00195 +:10DFB0000000000000000000000000000000000061 +:10DFC000000000000101000100000000000000004E +:10DFD000001101000000908300000000000000001C +:10DFE0000000000000000000C00000000000000071 +:10DFF000C000000090000000C000200000000000F1 +:10E00000C000000000000000000000000000000050 :10E010000000000000000000000000000000000000 -:10E02000000011210009C089110321109040C04057 -:10E0300084C005080088C0C088A005820188C1840A -:10E04000029011080104C111080200000000400004 -:10E05000000000000002002000000000000020007E -:10E060000000000000000008002000000000000088 -:10E07000000000002000000000000200000000007E -:10E08000000000000000000000000000000000048C -:10E09000000400000000000000000000000000007C -:10E0A000000000004108000880108210410020009C -:10E0B00090008500C100000080001000C100080031 -:10E0C00085009000418010898321008000000000BD -:10E0D000000000000000000000000000050000003B -:10E0E00000000000000000000080000000000000B0 -:10E0F00000000000000000000000000080000000A0 -:10E10000000000000000000000000000000000000F -:10E11000000000800000000000000000000000007F -:10E120000000000000000020808000808000A0210E -:10E130008500C10511000000008000800000211052 -:10E140002100880002002188A1080380100280209D -:10E1500000008000800000000004000000000000BB -:10E160000009000000000000004080840000000062 -:10E17000000000000000000000000000000000009F -:10E1800000000000000000000020000000800000EF -:10E1900000000040000000000000800500000000BA -:10E1A0000000000000000000820082080440080017 -:10E1B000050104820220400082009082080882004B -:10E1C000A100200802882100830502890840A101DE -:10E1D0000200200040000200000002020000400097 -:10E1E000000000000000000000008200080800900D -:10E1F000000000000000000000000000000000001F -:10E2000000000000000000000000000000000040CE -:10E210000000000004050000400090000200C00063 +:10E020000000C08800A0020209A00000008202C116 +:10E0300001C000000000000000000000000000001F +:10E0400000000000000101010001000000000000CC +:10E0500000000000C04090A100000000020000008D +:10E060000000000000000000000000C00000008868 +:10E07000000000C000000000000000C00000000020 +:10E08000000000C0000000000000000000000000D0 +:10E090000000000000000000000000000000000080 +:10E0A00000000000800000800000210000040484C3 +:10E0B000C105110300000000000000000000000086 +:10E0C00000000000000921400210001100000000C3 +:10E0D00000000000000980828382030400008000A9 +:10E0E00000000000000000000000000000800000B0 +:10E0F0000000000000800000000000000080000020 +:10E10000000000000080000000000000000000008F +:10E1100000000000000000000000000000000000FF +:10E1200000000000000080008000000000000440AB +:10E1300011800080081000000000000000000000B6 +:10E140000000000000000909401103000220000047 +:10E150000000000000004121212111804110000039 +:10E1600000000000000000000000000000000000AF +:10E17000800000000000000080000000000000009F +:10E18000800000000000000000000000000000000F +:10E19000000000000000000000000000000000007F +:10E1A00000000000000000004000A090A0900200CD +:10E1B0000001019000C0010000000000000000000C +:10E1C000000000000000000000020101010000004A +:10E1D00000000000000000000183000001A0000119 +:10E1E000000000000000000000009000009000000F +:10E1F0000000C000082000000000C00088000000EF +:10E200000000C0000000000000000000000000004E +:10E2100000000000000000000000000000000000FE :10E2200000000000000000000000000000000000EE -:10E230004842480000E000004842000000000000A2 -:10E2400048420000000000004842000000E00000DA -:10E2500048420021000007000000000600000700FF -:10E260000000000600000700000000000081000020 -:10E270000700000000000000000000000000000097 +:10E230008400840000E00000000A000000000000EC +:10E2400000000000000000000000410000E00000AD +:10E2500000000000000000000000418200E0070014 +:10E26000410000000000000000000000000000006D +:10E27000000000000000000000000000000000009E :10E28000000000000000000000000000000000008E -:10E290000000000000060000070000000000000071 -:10E2A00007000000000000000000000000008124C2 -:10E2B000008100240410082000001122040810200E -:10E2C0000408102040108020028008204010802088 -:10E2D000020880200CAC0C0C000000003C003C004C -:10E2E000000F000F00000000000000000000000010 -:10E2F000FF00000F000F0000000000000000000001 -:10E30000000000000000000000000000000000000D -:10E310000000000000003C003C00000F000FF0FF78 -:10E32000F0FF000000000000000000000000812459 -:10E33000000081002400014002801122000001023F -:10E3400040800102408001040208014004100104E1 -:10E350000208010440100C0C0C0C000000003C00F2 -:10E360003C00000F000F0000000000000000000053 -:10E370000000FF00000F000F000000000000000080 -:10E38000000000000000000000000000000000008D -:10E3900000000000000000003C003C00000F000FE7 -:10E3A000F0F0FFFF0000000000000000000000008F -:10E3B00004100140248100000410014004081020D2 -:10E3C0002400810004081020440088004400004418 -:10E3D00024000024440088000030003000000000C9 -:10E3E000F000F000282828280000000000000000AD -:10E3F0000000000F000FAAAAAAAA00000000000057 -:10E40000000000000101000000000000000000000A -:10E4100000000000000000000C0000FF00002828A1 -:10E42000282800000000000000000000000000009C -:10E4300000000820028000002481082002800102E0 -:10E440004080002400810102408000440088880050 -:10E450000088810000810044008800300030000006 -:10E460000000F000F000282828280000000000002C -:10E4700000000000000F000F00000000000000007E -:10E48000000000000000000000000000000000008C -:10E4900000000000000000000000000000FF00007D -:10E4A00028282828000000000000000000000000CC -:10E4B0000000000000610006000D08006061000718 -:10E4C000800D1000000000000000080060610006E0 -:10E4D000000D1000006100060005080000000E306D -:10E4E00000000000000000280000000005000A28CD -:10E4F000050000A00000000000280000000000004F -:10E5000000000000000000004000000000000000CB -:10E5100000000000000000000000000000010000FA -:10E5200000280000000000000008000000000000BB -:10E5300000000000000000000000000000C000001B -:10E540000000000000000000000000000000555521 -:10E55000555500000000002000000F000F000000D3 -:10E5600000000000000000000000000000000000AB +:10E29000000000000000000000000000000000007E +:10E2A000000000000000000000000000C0C00000EE +:10E2B00055000000000000000F00000000000000FA +:10E2C000000000000000000000000000000000004E +:10E2D000000000000000000000000000000000003E +:10E2E0000F000F0000000000000000000000FFFF12 +:10E2F0000000FFFF5555FFFFFF00FFFF0F0FFFFF5F +:10E30000FF00FFFF0000FFFF0000FFFF0000000014 +:10E3100000000000000000000000000000000000FD +:10E32000000000000000000000000000000000C32A +:10E330000000D200D200000000000F00000000002A +:10E3400000000000000000000000000000000000CD +:10E3500000000000000000000000000000000000BD +:10E360000000F000F00000000000000000000000CD +:10E37000FFFF0000FFFF5555FFFFFF00FFFF0F0FDE +:10E38000FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFF9C +:10E39000000000000000000000000000000000007D +:10E3A000000000000000000000000000000000006D +:10E3B00000EB0F0F2AAA2AAA0000000000000000AC +:10E3C000000000000000000000000000000000004D +:10E3D000000000000000000000000000000000003D +:10E3E000000000000000000000000000000000002D +:10E3F0000000C3C3FFFFAAAAFFFFF0F0FFFFAAAA15 +:10E40000FFFF00FFFFFFF0F0FFFFF0F0FFFF3C3CDD +:10E4100000000000000000000000000000000000FC +:10E4200000000000000000000000000000000000EC +:10E43000000000EB0C0C00000000000000000000D9 +:10E4400000020000000000000000000000000000CA +:10E4500000000000000000000000000000000000BC +:10E460000000000000000000FFFF000000000000AE +:10E4700000000000C3C3FFFFAAAAFFFFF0F0FFFFE8 +:10E48000AAAAFFFF00FFFFFFF0F0FFFFF0F0FFFF81 +:10E490003C3C000000000000000000000000000004 +:10E4A000000000000000000000000000000000006C +:10E4B00000000000000050000000000000610000AB +:10E4C00080010000000000000000000000000000CB +:10E4D000000000000061000080010000000000005A +:10E4E000000000000041002F800D0000000000002F +:10E4F00000000000000040028000002092024082E4 +:10E50000800000209202408280000020920240821F +:10E51000800000208A0200000000000000000000CF +:10E5200000000000000000000000000000000000EB +:10E5300000000000000000000000000000007D7DE1 +:10E54000FF55F0F3FCFF0000000000000000000099 +:10E55000000000000000FFFF3C0FF0FCF3FF000094 +:10E560000000000000000000A2A2FFFFFFFF00006B :10E57000000000000000000000000000000000009B :10E58000000000000000000000000000000000008B :10E59000000000000000000000000000000000007B :10E5A000000000000000000000000000000000006B :10E5B000000000000000000000000000000000005B -:10E5C0000000000300000000000000000000000048 -:10E5D0005515555500000000000000000F000F0009 -:10E5E000000000000000000000000000000000002B +:10E5C0002828AA0000030C0F000000000000000033 +:10E5D00000000000000000003C003C0F003C033F36 +:10E5E0000000000000000000C0000808000030002B :10E5F000000000000000000000000000000000001B :10E60000000000000000000000000000000000000A :10E6100000000000000000000000000000000000FA :10E6200000000000000000000000000000000000EA :10E6300000000000000000000000000000000000DA -:10E6400000000000000000000000000000000000CA -:10E650000000000000000000000000000000F000CA -:10E66000F082000000000000000000000000000038 -:10E67000000000000000000000000000000000009A +:10E640000000FF555F5F8083BCBF0000000000003A +:10E65000000000000000000000005FFF5F55E8FFC1 +:10E66000E8FF00000000000000000000C000000003 +:10E67000808000000000000000000000000000009A :10E68000000000000000000000000000000000008A :10E69000000000000000000000000000000000007A :10E6A000000000000000000000000000000000006A :10E6B000000000000000000000000000000000005A -:10E6C000000000000020000000000000000000002A -:10E6D00000000000800080000000000000000082B8 -:10E6E000F000F0000000000000000000000000004A -:10E6F000000000000000000000000000000000001A +:10E6C00000000000AA000A0A8083BCBF000000000E +:10E6D0000000000000000000000000000FAA0F0072 +:10E6E000E828E8280000000000000000000000000A +:10E6F000000080C0000000000000000000000000DA :10E700000000000000000000000000000000000009 :10E7100000000000000000000000000000000000F9 :10E7200000000000000000000000000000000000E9 -:10E7300000000000000000000000000000000811C0 -:10E740000010208020001100010004804080200083 -:10E7500010008400200000088900040000008400EC -:10E7600000000400020000000000880020002010CB -:10E7700085000000000000000000200000000003F1 -:10E780008400000000004004C0110011000084005B -:10E790002000000000000004000000000004000051 -:10E7A00004A0044004002000200000000000040039 -:10E7B000040000000000000000000002000000044F -:10E7C000800000000002002020002000000400045F -:10E7D0000000000000000000000004000004000031 -:10E7E00020000000000200000400000000400000C3 -:10E7F00000C14000000000000000000040000000D8 -:10E8000000000000000040000000000000002100A7 -:10E81000200009000000000000000000000010407F -:10E820000000804180008000000000000004000221 -:10E830000000000040000000000000000000400058 -:10E84000210000000200030200100804020400007E -:10E8500000100000000000000000000000000000A8 +:10E7300000000000000000000000000000000000D9 +:10E740000000000000001000000000002000200079 +:10E750000800080410040000080000002000000069 +:10E76000000000000000A000000000000000040005 +:10E770002000200020000000000000000000000336 +:10E780000000000040001000000000000000001128 +:10E790000000200000000000000000000000000059 +:10E7A0000000000000002000000000040004000041 +:10E7B00000020000000084000000000000000000D3 +:10E7C0000002400000000000000000000000000007 +:10E7D0002100000000000000000000000000000018 +:10E7E0000000000000000000000000000002000225 +:10E7F00000000000000400040000000041000000D0 +:10E800000000000041008000040000A0000000A003 +:10E8100000C00000009000000402000000000000A2 +:10E8200000004002000000000082004000001000D4 +:10E8300000020020000200020000000000020000B0 +:10E8400000000000000000000000000000000000C8 +:10E8500000000000000000100004000000000000A4 :10E8600000000000000000000000000000000000A8 -:10E870000000001000000000000002000000000086 -:10E8800000100000040082000000000000000000F2 -:10E8900000000000020002008440000001000100AE -:10E8A0000100000000000000008000209000000037 -:10E8B0000800000000000000000000000000000050 -:10E8C000000000000008000840110008800100015D -:10E8D0002000000000080008000800880500000073 -:10E8E00000000000000800080000200800000000F0 -:10E8F00000000000008400840008001000040000F4 -:10E9000000000000000002100010000000080000DD -:10E910000000020002000000000400840000040067 -:10E9200004000400000000080008001000090000B6 -:10E9300000000000000000000000000000000000D7 -:10E9400000000000000040000200020090000000F3 -:10E95000000002000440100084000400A0009008A1 -:10E96000010001000100840000000000000300001D -:10E970000000000000000000000000000000000097 -:10E980000000000000000000000800080000000077 -:10E990004000000000000000000000000000000037 -:10E9A00000001000000000000000040088080000C3 -:10E9B000000000000000002100000000000900210C -:10E9C000000000000000000803008988910009820F -:10E9D000039000000040000003C003000304204037 -:10E9E000080002000402084000401000210000401E -:10E9F0000004008421040000000000000300000067 -:10EA000000000040030000000000000003000000C0 -:10EA100000004000040000000000000000000000B2 -:10EA20000000100010000000000000008000000046 -:10EA3000000000000000000000000000000000884E -:10EA4000000000000000000400002000C00004409E -:10EA50000000100004098480040000000000000091 -:10EA60000000000000800300008000000000100093 -:10EA7000000008000000081000000000080000006E -:10EA8000000000000000000200000000080000007C -:10EA9000000000000040000000200020C000C00076 -:10EAA00004200000000000000000004008000002F8 -:10EAB0000000010004000440040000008200000087 -:10EAC00000004000000040000000000000000000C6 -:10EAD0000001000000000000000400000000100021 -:10EAE00000000008000000020800002000002000D4 -:10EAF00000004000000000000000000000000000D6 -:10EB000000000000000000044000000000000000C1 -:10EB1000000000080800000000C000000000000025 -:10EB200008000000000000000000000000000000DD -:10EB300000010000040000000000000000000000D0 -:10EB40000000000000000000000000000000820043 -:10EB500000000000000000000080002008000020ED -:10EB60000820C000900001000080008000800000AC -:10EB70000000000000100000000010040000000071 -:10EB80000000000000000000000000000000000085 -:10EB90000000000000000000000004000800000069 -:10EBA0000000000000000000840000008800000059 -:10EBB00000000000002000000000004000000000F5 -:10EBC0000000000000000000000082008200000041 -:10EBD00005004088408821900400400220040484FD -:10EBE00000040990009040000200084008401040D6 -:10EBF00004401040214021000000000000000900F6 -:10EC000000000000000008000300000000000000F9 -:10EC100000000000210008000000000000000000CB -:10EC200004000004000000000000000000000900D3 -:10EC300000000500000010010000000000000000BE -:10EC400008000800000000000000000000000000B4 -:10EC50000000000000004000000000210000000053 -:10EC60008200000000001000882001000000100059 -:10EC70000400000000020800000400000000000082 -:10EC80000000000000080000000000000800000074 -:10EC90000000000000000000000000000000000074 -:10ECA00000000000000040000000000000008400A0 -:10ECB0000800000000000000000000000041000803 -:10ECC0000000004000000000000000008200000082 -:10ECD00000000000000000008000000000000000B4 -:10ECE00000000000000008004000040004000020B4 -:10ECF0000000804000000000000000000000000054 -:10ED000005000200000000000800000000000000F4 -:10ED10004000200000000000000000000000000093 -:10ED20000000000000000000000040002000000083 -:10ED3000000000000000000000880000000000004B -:10ED400000000000000000000000000000000000C3 +:10E87000000000000000000000080100000000008F +:10E880000000000001000000000000000000000087 +:10E890000040000000000000000000000000080030 +:10E8A00090108410000000000010000082000000A2 +:10E8B00002000000000000008210001000000000B4 +:10E8C000000000000000090000000000000000003F +:10E8D0000000000000040000000200000000000032 +:10E8E0000008000800000084000000000000000094 +:10E8F0000000000000000000000000884000000050 +:10E900000008001000004000000000C004000000EB +:10E910000040000000000000004000000010000067 +:10E920008000000900010000000000080000000055 +:10E9300000000000000004000082000100C100008F +:10E94000004000080000000084000000900000006B +:10E9500090000000400040000200020000000000A3 +:10E960000000000000000000000000000000400067 +:10E970008400000000000000000841000000880042 +:10E980008480000000000000000000001000000073 +:10E9900008030210000400051041000300030008F2 +:10E9A0004005000300050003000000000000820095 +:10E9B00010050005000500210004000000040011FE +:10E9C000040040004000C004000000000000008877 +:10E9D000008400000000000000000000001000089B +:10E9E00000400900000000002100000000000000BD +:10E9F00008000000000008000000000020000000E7 +:10EA000000400010000000000000000000000400B2 +:10EA100000000000030100000300210008000800BE +:10EA200008000000000000000000000000000000DE +:10EA300000200000000000000002000000000000B4 +:10EA400000000000000000000000000000000000C6 +:10EA500000000000000000000000000000000000B6 +:10EA60000000000000000000000084000000000022 +:10EA70000000000000000000000000000000004056 +:10EA800020000041080500051005000000000000FE +:10EA90000000822100400000000000000000000093 +:10EAA000000082040040000500040004000000048F +:10EAB0000009000400000000000000000000848045 +:10EAC000000500040004A000000000000000000099 +:10EAD00000000000000000000000000000900004A2 +:10EAE00000000010000000040020002000000000D2 +:10EAF00000000000000000000000000000C0000056 +:10EB00000000800000000000050000000000000080 +:10EB10000000000000000040002000000000000095 +:10EB20000000000000000000000200880200000059 +:10EB300000000800000000000000000000000000CD +:10EB400000100000000000000000000000000000B5 +:10EB500000000000000000000000000000000000B5 +:10EB600000000000000000000000000000000000A5 +:10EB7000000000000000000000008400000002000F +:10EB8000908000009000000090000821000000002C +:10EB900000050210000800110002004000040002FD +:10EBA00000000005080090020011000800090000A4 +:10EBB0000011000000210000000000000000000023 +:10EBC00002000000001100000000A0000004041179 +:10EBD000400003081000008800900000008800003A +:10EBE0000000000000200000000000000000000005 +:10EBF000000021000090000000000000050000005F +:10EC0000080011040090042021000000800008008A +:10EC100000000590050100000000000000010088D0 +:10EC20000004080000008020000000000000000038 +:10EC300000000000000000000000000000000000D4 +:10EC40000000400000000000000400000000000080 +:10EC50000020000000000000000000000000000094 +:10EC6000000000040000000000000200020000009C +:10EC70000000000000000000000000000000000094 +:10EC80000000200000000000000000000200000062 +:10EC90000000000000030003842100040803002199 +:10ECA0000010000000000008000000030000000841 +:10ECB00000000000002100410021002100000000B0 +:10ECC00000000000000384210021000090000000EB +:10ECD0000040000000000000008800000004000068 +:10ECE0000000000000000000001000000000000014 +:10ECF0000000000000000000000800000000000804 +:10ED000000002000800000000000000000008000E3 +:10ED100000000000000000020000050400000000E8 +:10ED200011000001050000000000000000000000CC +:10ED30000000020040000000000000000000000091 +:10ED400000000000000000000000000000001100B2 :10ED500000000000000000000000000000000000B3 -:10ED60000800000000010000000000000000880012 -:10ED70009021A000820000000000000000000000C0 -:10ED80000000000000000000000000000000000083 -:10ED90000000000000000000000000000000000073 -:10EDA0000000000000000000000000000000000063 -:10EDB0009088000000000090400100004000C0006A -:10EDC0000000000000000000000000000000000043 +:10ED600000000000000000000000000000000000A3 +:10ED70000000000000000000000000000000000093 +:10ED80000000000000000000000000000000021170 +:10ED9000082000900882000008111010001108835C +:10EDA0000888104000820288000000000000000077 +:10EDB000109010900082C0020000000000000000CF +:10EDC0000000000000000000401008880088088251 :10EDD0000000000000000000000000000000000033 -:10EDE00000200000050000020000000000000000FC -:10EDF000800088080020800900000000000000005A -:10EE00000000000000000000000000000000000002 -:10EE100000000000000000000000000000000000F2 -:10EE200000000000000000000000000000000000E2 -:10EE30000000000000000000000011022109004055 -:10EE400000020000000000000000000000000000C0 -:10EE5000000000000000000000000905080808008C -:10EE6000080000400003008300C000000000000014 -:10EE700000000300840085008221000000000000E3 -:10EE800000000000000000000000008000000008FA -:10EE90000000000000000000000000000000000072 -:10EEA0000000000000000000000000000000000062 -:10EEB0000000000000000000000000000200100040 -:10EEC00020000921000000000000000000000000F8 -:10EED0000000000000000000000000000000100022 -:10EEE0000908890000A000010011001000000000C6 -:10EEF00000000000028803820200C121000000001F -:10EF000000000000000000000000000000400000C1 -:10EF100000080000000000000000000000000000E9 -:10EF200000000000000000000000000000000000E1 -:10EF3000000000000000000000000000000000844D -:10EF400000C00000000300000000000000000000FE -:10EF500000000000000000000000000000000000B1 -:10EF60000000000000000000080000000000000099 -:10EF700000000000000000910011400901C00000E5 +:10EDE0000000000000000000000000000000000023 +:10EDF0000000000000000000000000000000000013 +:10EE000000000000000000000000000020000000E2 +:10EE100009A0009000100091000083100085009070 +:10EE20000090000000800080000000000000000052 +:10EE300000000000000000808000000000000000D2 +:10EE400000000000000000000000808000000000C2 +:10EE50000080000000000000000000000000000032 +:10EE600000000000000000000000000000000000A2 +:10EE70000000000000000000000000000000000092 +:10EE8000000000000000000000000040000000083A +:10EE900000000000800880800080000009004121FF +:10EEA000080910008000002080A100000010000070 +:10EEB00000000000800000828000000000000000D0 +:10EEC0000000000000000000000000000000001131 +:10EED000000800000000000000000000000000002A +:10EEE0000000000000000000000000000000000022 +:10EEF0000000000000000000000000000000000012 +:10EF00000000000000000000000000000000000001 +:10EF1000000000001000080540020208000009007F +:10EF200008020220898402001004200408840000E2 +:10EF30000000000000000800100802022004000089 +:10EF400000000000000000000000000000000200BF +:10EF50001002880290840000000000000000000001 +:10EF600000000000000000000000000000000000A1 +:10EF70000000000000000000000000000000000091 :10EF80000000000000000000000000000000000081 -:10EF90000000000000000000000000000000000071 -:10EFA0000000000000000000000000000000000061 -:10EFB00000000000000000000088000000000000C9 -:10EFC000002000901002000100000000000000007E -:10EFD0000000000000000000000000000000000031 -:10EFE00000000000000000000000000003002000FE -:10EFF000000000000000000040820040412109851F +:10EF9000880000000000110800080840021000016D +:10EFA000891001100240081091020020108408907E +:10EFB0000000000000000000C0080020A010402059 +:10EFC00000009000000000000000000000000000B1 +:10EFD0008908002008901090000000000000000048 +:10EFE0000000000000000000000000000000000021 +:10EFF0000000000000000000000000000000000011 :10F000000000000000000000000000000000000000 -:10F0100000000000000000000000000000000000F0 -:10F0200000000000000000000000000000000000E0 -:10F0300000000000000000000000000000000000D0 -:10F0400000000300214085A0000500000000000032 -:10F0500000000000000000000000000000000000B0 -:10F06000000000080008008000032120210010009B -:10F07000900000000000000000002111098840807D -:10F080002008000000000000000000000000000058 -:10F0900000008300020008000800000000000000DB -:10F0A0000000000000000000000000000000000060 -:10F0B00000000000000000000000000000008002CE -:10F0C000000000002189100502211004000000004A -:10F0D0000000000000000000000000000000000030 -:10F0E00000000000100088880040880105009000A2 -:10F0F0000900910000000000000000000190008263 -:10F100000090080100000000000000000000000066 -:10F1100000000000020083000800890000000000D9 -:10F1200000000000000000000000000000000000DF -:10F130000000000000000000000000000000880047 -:10F1400004010000000001080100010101010000AC -:10F1500000000000000000000000000000000000AF -:10F16000000000000000000000000000000050004F -:10F1700000E00000000000000000000000000000AF -:10F180000000070000000000000000000000000078 -:10F19000000000000000000000000000000000006F -:10F1A000000000000000000000000000000000005F -:10F1B000000000000000000000000000000000004F -:10F1C000000A000007000000000A0000070000001D -:10F1D000000000000000000000000000000000002F +:10F010000000000000000300C10002808380110096 +:10F020000001410009801180008041000080808043 +:10F0300090000000000000000000838000800000BD +:10F040008000000000000000000000000000000040 +:10F0500000004100008080009000000000000000DF +:10F0600000000000000000000000000000000000A0 +:10F070000000000000000000000000000000000090 +:10F080000000000000000000000000000000000080 +:10F0900000000000000000000000000900830000E4 +:10F0A000000000010091009000000008001000091D +:10F0B00000000000000000000000000000100090B0 +:10F0C0000080800000000000000000000000000040 +:10F0D0000000000000108010000000000000000090 +:10F0E0000000000000000000000000000000000020 +:10F0F0000000000000000000000000000000000010 +:10F1000000000000000000000000000000000000FF +:10F1100000000000000000000000000090008811C6 +:10F12000100888000001C002880810081001900033 +:10F130001002200290000000000000000000880083 +:10F14000821002080800000000000000000000001B +:10F15000000000000000200082080208900000006B +:10F16000000000000000000000000000000000009F +:10F17000000000000000000000000000000000008F +:10F18000000000000000000000000000000000007F +:10F19000000000000000600000E00000000000002F +:10F1A00000000700480000000000000007004800C1 +:10F1B0000000000007004800000000000000000000 +:10F1C00000000000070042120000000000000000E4 +:10F1D00000000000000000000000000007004800E0 :10F1E000000000000000000000000000000000001F -:10F1F0008103E7F3000000000000000000000000B1 -:10F2000000003C3C0000FF00000000000000000087 -:10F210000000000000000000060097000000000051 +:10F1F000000000000000000000000000000000000F +:10F2000000000000000000000000000000000000FE +:10F2100000000000000000000000000000000000EE :10F2200000000000000000000000000000000000DE :10F2300000000000000000000000000000000000CE -:10F2400000000000FF0042424242000000000000B7 +:10F2400000000000000000000000000000000000BE :10F2500000000000000000000000000000000000AE -:10F260000000000000000000000018000000000086 -:10F2700000000303F3F300000000000000000000A2 -:10F28000000000003C3C0101FF0000000000000005 -:10F2900000000000000000000000060097000000D1 +:10F26000000000000000000000000000000000009E +:10F27000000000000000000000000000000000008E +:10F28000000000000000000000000000000000007E +:10F29000000000000000000000000000000000006E :10F2A000000000000000000000000000000000005E :10F2B000000000000000000000000000000000004E -:10F2C000000000000000FF00424242420000000037 -:10F2D00000200020000000000000000000000000EE +:10F2C000000000000000000000000000000000003E +:10F2D000000000000000000000000000000000002E :10F2E000000000000000000000000000000000001E :10F2F000000000000000000000000000000000000E :10F3000000000000000000000000000000000000FD :10F3100000000000000000000000000000000000ED -:10F3200000000000000000000000000000000000DD -:10F3300000000000000000000000000000000000CD -:10F3400000000000000000000000000000000000BD -:10F3500000000000000000000000000000000000AD -:10F36000000000000000000000000000000000009D +:10F32000000000000210200000881084000002107D +:10F330002000008810840210200000881084000043 +:10F34000000000000000021020000088108400006F +:10F35000000000000000000000000000000002109B +:10F360002000008810840000000000000000000061 :10F37000000000000000000000000000000000008D -:10F3800000000000000000FF00000F0F0000000060 +:10F38000000000000000000000000000000000007D :10F39000000000000000000000000000000000006D :10F3A000000000000000000000000000000000005D :10F3B000000000000000000000000000000000004D -:10F3C00000000000000000003C3C000000000000C5 +:10F3C000000000000000000000000000000000003D :10F3D000000000000000000000000000000000002D :10F3E000000000000000000000000000000000001D -:10F3F0000000000000000600000000000000000007 -:10F40000000000000000000000FF00000F0F81005E +:10F3F000000000000000000000000000000000000D +:10F4000000000000000000000000000000000000FC :10F4100000000000000000000000000000000000EC :10F4200000000000000000000000000000000000DC :10F4300000000000000000000000000000000000CC -:10F44000000000000000000000003C3C0000000044 +:10F4400000000000000000000000000000000000BC :10F4500000000000000000000000000000000000AC :10F46000000000000000000000000000000000009C -:10F47000000080610006000D000100610007800DA2 -:10F480000000000000000000000015612A0E054D7C -:10F4900000A80000000000000000000000000000C4 -:10F4A000000000610006000D0000000000000000E8 -:10F4B000000000000000000000000000000000004C -:10F4C0000000000000000000000000000000002814 -:10F4D0000000000005610A2E051D00A000000000CC +:10F47000000000000000000000000000000000008C +:10F48000000000000000000000000000000000007C +:10F49000000000000000000000000000000000006C +:10F4A000000000610007800D000000610006000DF3 +:10F4B0000001000000610006001D000100000000C6 +:10F4C000000000010000000000000000000000003B +:10F4D000000000000000000000000000000000002C :10F4E000000000000000000000000000000000001C :10F4F000000000000000000000000000000000000C -:10F5000000000000000000000000000055554545C7 +:10F5000000000000000000000000000000000000FB :10F5100000000000000000000000000000000000EB -:10F52000000000007A005000000000000000000011 +:10F5200000000000000000000000000000000000DB :10F5300000000000000000000000000000000000CB :10F5400000000000000000000000000000000000BB -:10F5500000000000000035FF350F5550FFFA000095 +:10F5500000000000000000000000000000000000AB :10F56000000000000000000000000000000000009B -:10F57000000000000000000000000000000000800B -:10F580000000000000000000000000000000145512 -:10F590000445DF1CCB080000000000000000000054 -:10F5A0000000000000007A00500000000000000091 +:10F57000000000000000000000000000000000008B +:10F58000000000000000000000000000000000007B +:10F59000000000000000000000000000000000006B +:10F5A000000000000000000000000000000000005B :10F5B000000000000000000000000000000000004B :10F5C000000000000000000000000000000000003B -:10F5D000000000000000000035F035000050AAFADD +:10F5D000000000000000000000000000000000002B :10F5E000000000000000000000000000000000001B -:10F5F00000000000000000000000000000002000EB +:10F5F000000000000000000000000000000000000B :10F6000000000000000000000000000000000000FA -:10F610000C0F0C0F4000FEFF000000000000000077 +:10F6100000000000000000000000000000000000EA :10F6200000000000000000000000000000000000DA -:10F6300000000000000000000000000000000000CA -:10F6400000000000000000000000000000000000BA -:10F6500000000000000000000000000000003C006E -:10F660003CFF00000000000000000000000000005F +:10F630003F5F305F000000000000FDF1CDC1787831 +:10F64000AAFF000000000000000000000000000011 +:10F6500000000000000000000000000000000000AA +:10F66000000000000000000000000000000000009A :10F67000000000000000000000000000000000008A -:10F6800020000000C3C300000000000000000000D4 -:10F6900000000C000C00E000F4FF0000000000007F +:10F68000000000000000000000000000000000007A +:10F69000000000000000000000000000000000006A :10F6A000000000000000000000000000000000005A -:10F6B000000000000000000000000000000000004A -:10F6C000000000000000000000000000000000003A -:10F6D0000000000000000000000000000D08FFFF17 -:10F6E000F0AAF0AA000000000000000000000000E6 -:10F6F000000000000000000000000000000000000A -:10F70000C0004000020000020200000000000000F3 -:10F710000000000020000890048204800000001116 -:10F72000000000004000040020808402000000006F -:10F7300000004004400020002000200000031000D2 -:10F7400004000404000000002000200084000400E5 -:10F75000040004000400000000410000000000005C -:10F7600000002000000000000000000084000000F5 -:10F770000000000000000000000000000000000089 -:10F780001000000080400000000200020000100095 -:10F790000000000000004000C01100030040110004 -:10F7A00000202120000000000000000200A1000253 -:10F7B000090000020000200000000000000000001E -:10F7C00009000000009000402000400040000000C0 -:10F7D0000000000000004000400000004000000069 -:10F7E00020000000000000020000000040000000B7 -:10F7F00041000000000000000000000000000000C8 -:10F8000000000000000040100003000000000000A5 -:10F81000000020000010001000000300000208405B -:10F82000000000000000000008000041000202107B -:10F830000000000000000000000000000000009038 -:10F840000000000090000000000000000000000028 -:10F850000010010001000100010001002000000073 -:10F860000040000000400200020000000000000014 -:10F870000210000000000000001000000000000066 -:10F8800000100000000000008000000000000408DC -:10F89000000000048040000000080900400800014A -:10F8A0004109000000000000000000000000008589 -:10F8B00000080000000040000084000000C00000BC -:10F8C0000020000000000000000004000040044090 -:10F8D00000000040040004000400040008000000D0 -:10F8E0000000000000000000000000000000000018 -:10F8F0000200000004000000000000000000000002 -:10F90000000000009000A000A00040000800A0211E -:10F91000C00388204040208020020800884000402A -:10F92000A089A000C00000000100A0009000880095 -:10F93000880000000000000000000000000000003F -:10F9400000418400000001000000000000110400DC -:10F95000000000000000900000000000000008000F -:10F96000000084002000000000000000C000000033 -:10F970000000000000000000000000000000000087 -:10F98000000000000000038408000440C0000002E2 -:10F9900010000000000000000810410010000800E6 -:10F9A00000000002000000000090040200000000BF -:10F9B0004100000000000000000000000000000006 -:10F9C0000000000000000000040000000000000033 -:10F9D0000000000000000000110005000000000011 -:10F9E000880000000500000000000000000000008A -:10F9F0000084000000000000000000000000000083 -:10FA00004100030003004100A0400040000004004A -:10FA1000C00008000804C00890009000000000002A -:10FA200000000010000000000405C00008000100F4 -:10FA30000800010000000100C000000000050100F6 -:10FA40008200000000000000000000200000001004 -:10FA50000000820000000003000000000000000021 -:10FA60000800000000040000000000000800001171 -:10FA70000000004008000800000000000800080026 -:10FA8000080000000000040000000000000000006A -:10FA9000000000000000000002004100008400009F -:10FAA000004008000001000000008000210000006C -:10FAB00040000000200002102000000000000000B4 -:10FAC0002000000000000000000000000001000015 -:10FAD00000000000000000000000000000000084A2 -:10FAE0000000000000000000000000000000000016 -:10FAF0000000000000000000000000000000000006 -:10FB0000000000000000000000000000A0008400D1 -:10FB100000410800000002000040100088000003BF -:10FB20000000000000200800080000000000A00302 -:10FB300090000400000810004004000000002000B5 -:10FB400000040000000000000000000000000000B1 -:10FB5000000000000000000000000000080000009D -:10FB60000010000000001000000000000000000075 -:10FB7000000000000000000000000000000008007D -:10FB8000820000000000000000000000000808A043 -:10FB90000000088800880300100041000300058869 -:10FBA0000500400008C040048000009000000000F4 -:10FBB00000000000800000000000A1010000009093 -:10FBC00080000001000000000000000000000000B4 -:10FBD0000000000000000000000000000000000025 -:10FBE00000000000000000000000081008000800ED -:10FBF00021001000000000000000000000000800CC -:10FC00000000000000000090000000000000000064 -:10FC1000000008000000C080002100002021A0009A -:10FC20008200000090008200000008100000900098 -:10FC30000000040540000040C00400080009000066 -:10FC4000002000090000000000000000004100004A -:10FC500000000000000000000000000000000000A4 -:10FC60000000000000000000000010000010000074 -:10FC70000000000000000000000000000000000084 -:10FC8000000000030000000000000400000000006D -:10FC90000000000000000000000200000000200042 -:10FCA0000000008800842100000000000001020024 -:10FCB00002000000C1000000080000002004000055 -:10FCC0000000000100000000000000000000000033 -:10FCD00000000000200000004000000000000000C4 -:10FCE0000000000000000004000000000000000010 -:10FCF00000000000210000000900030000000000D7 -:10FD000000000000000000000000000000000000F3 -:10FD100000000000000001000200000000000000E0 -:10FD20000000000000A120200010008300A1018934 -:10FD30009010000840000090000890901188010089 -:10FD400040009000110090020000900000000000B0 -:10FD500000000000000000000000000000000000A3 -:10FD60000000000000000000000800A000000000EB +:10F6B00000003F5030500000000000003D310D01BF +:10F6C00078780055000000000000000000000000F5 +:10F6D000000000000000000000000000000000002A +:10F6E000000000000000000000000000000000001A +:10F6F0000000000000000000000000000000040006 +:10F700004000400001802080002000200000888010 +:10F71000200000041008200000002000000000006D +:10F7200000000000010000000000000000000000D8 +:10F73000200000002010010020000502000300004E +:10F7400000A08800001020000000000088000000D9 +:10F750000000200000040000000000000000000085 +:10F760000000000000040000000000042000000071 +:10F770000000000000020004000000040404000077 +:10F780008000200000001020002000010001000087 +:10F790000020000000000000000000000000000247 +:10F7A00000002000000040000002000000020000F5 +:10F7B000000200020002800020028000A000000081 +:10F7C000000000210000000080000900004000C08F +:10F7D0000000008200000000000000020000009015 +:10F7E000000000020000000000C0400200C0000451 +:10F7F00000900002000021830090009000020000B1 +:10F800000400004000000810000000090010040976 +:10F810000000904100090009000000000000000005 +:10F8200000000000001000100000000010050000A3 +:10F8300000000005000000000000000000000100C2 +:10F8400000000003000000000000000000000000B5 +:10F8500000000040000090000000000000000000D8 +:10F86000040002000000020000000200000004008A +:10F870000200020002000200030000000200020079 +:10F880009000800000000000000100080000000857 +:10F8900000080008000000000000008400000000D4 +:10F8A0000084000000000000040400880000834081 +:10F8B00000080084000000000000000200000004B6 +:10F8C0000400000011000000000000000000000023 +:10F8D00000000002000000400000000000000000E6 +:10F8E0000008200000000000000000000000008868 +:10F8F00000000000000000000000400000000400C4 +:10F9000004900200040004200009100040000000E0 +:10F9100000050000000000000000001004000000CE +:10F920000000000000050000000000004002000090 +:10F930000000000482000000100088000000880021 +:10F9400088400200000020058820000040002000C0 +:10F95000000040009000002188000000000000002E +:10F96000004000000000000500000000C000000092 +:10F97000000082000000400000000004000004209D +:10F9800000110000000000008001000000000000E5 +:10F99000000000000000000000000000000109005D +:10F9A000000000000000000008004000000000000F +:10F9B00000004000000100000800040000000800F2 +:10F9C0000400110000880000004041030040029044 +:10F9D000840200A00004008200A000C000000420F7 +:10F9E00000000000000000200084008400A000004F +:10F9F0000000200000000020000000000000004087 +:10FA000000200490100011900400C00000000200CB +:10FA100000000011000400048280000000000000CB +:10FA2000000000000000000082000000000008004C +:10FA30000080080000000000000008211000820083 +:10FA4000000082000000080000000000010000002B +:10FA50000002008000000000000000000000000024 +:10FA60000000000000000800000000040000080082 +:10FA7000000008000000000000000000000040003E +:10FA800000008200A004A0000000C10000000000EF +:10FA90002008008400000001000103400000000075 +:10FAA000030000000000000000000000042000002F +:10FAB00000000002000000880000000000000000BC +:10FAC00000002000000000000000000000A00488EA +:10FAD00000000001020400A000880082000002C0B3 +:10FAE00000002000000011001100000000200004B0 +:10FAF00008040000000000000020000000000000DA +:10FB00008300000000C0000010001100008004000D +:10FB1000900000800000200000080000000200406B +:10FB200000200000000000000000000000000000B5 +:10FB3000400000000000000000000000A0210008BC +:10FB400004008800880088004000100000000000C9 +:10FB500000000000000000000000000000030000A2 +:10FB6000000000400000080000000000000000004D +:10FB70000000000000000002000040000000000043 +:10FB80000000000400000000000090004000002081 +:10FB900000000000004041008084000000080000D8 +:10FBA0000001000100000200000000000000000051 +:10FBB0000000400000000000000000000000000005 +:10FBC00000020402009020842004000821000000AC +:10FBD0004040028820900590110200881100052005 +:10FBE000000000000000022004000084000020202B +:10FBF0000400000000000000000000000000000001 +:10FC000000001104110500040000000000001100B4 +:10FC100000000000000000000000010000000000E3 +:10FC20000021000400040011002100000008000071 +:10FC30000000080000000000400400000000000078 +:10FC400000000021100082000000080000000000F9 +:10FC500000000003018000200000014000000000BF +:10FC60000000000000000000000000000000004054 +:10FC700000000000000300000000002100214000FF +:10FC800000000000C00008000004000000000000A8 +:10FC90000000000000000000000000001000000054 +:10FCA0000000000000000000000000000000000054 +:10FCB00000000000000000000000800000000000C4 +:10FCC0000000000000A00000200420000000000050 +:10FCD0000000000020C004200000410020000208B5 +:10FCE000004000400000004000840000004002008E +:10FCF00005880200000002000004404000000000EF +:10FD000000000000000000000000000100000000F2 +:10FD1000000000C003C0902000A082C010000010AE +:10FD2000001000040008000000080490000000001B +:10FD300000000000000000000000000000010801B9 +:10FD4000C0010001000000000000000000000000F1 +:10FD5000000000000000009000C090880008000033 +:10FD60000000000000000000000000000000000093 :10FD70000000000000000000000000000000000083 -:10FD80000000000000000000000000000000000073 -:10FD9000000000000000000008000000000000005B -:10FDA000000000000000088800842003008440C098 -:10FDB00002030020004080000080008080809100CD -:10FDC0001100820080009100808009008000000006 -:10FDD0000000000000000000000000000000000023 -:10FDE0000000000000000000000000800000000093 +:10FD80000000000000000000000002000000000071 +:10FD9000000000000000C1808080008080008000A2 +:10FDA000040000800000008000000080008000004F +:10FDB0000000000000000000000000000000004102 +:10FDC000902100200003000000000000000000005F +:10FDD0000000050000000000090021000080000074 +:10FDE0000000000000000000000000000000000013 :10FDF0000000000000000000000000000000000003 -:10FE000000000000000000000000000000000000F2 -:10FE10000000000000000000000041000311050088 -:10FE200000000000000000000000000800000008C2 -:10FE300008800800080000910000001100898080FF -:10FE400084200500031000000005802100C0000090 -:10FE500000000000000000000000000000000000A2 -:10FE60000000000000000000000000000000800012 -:10FE70000000000000020000000000000000000080 -:10FE80000000000000000000000000000000000072 -:10FE90000000000000000000000000000000000161 -:10FEA000000000000000000000000004000000004E -:10FEB000000000040000000000A000000001008419 -:10FEC00090900900000000018800200002000082DC -:10FED0000000000000000000002000000000000002 -:10FEE0000000000000000000000000000000000012 -:10FEF00002000000000000010000000000000000FF -:10FF000000000000000000000000000000000000F1 -:10FF100000000000000000000000000000000000E1 -:10FF2000A000000000000000000000002000000011 -:10FF300001008300880100010101C00140000000B0 -:10FF40009090000040002000A0A1840040024000EA -:10FF5000900002000000000000000000000001000E -:10FF6000000082000000000000000000000000000F -:10FF700000080000009000000000000000000000E9 +:10FE000000000000000000000000200000000000D2 +:10FE100000000000000000000000001100808000D1 +:10FE2000028004008000C11180000000000000007A +:10FE300000000000000000000000000000000000C2 +:10FE400040000300110002800000000000000000DC +:10FE50000008000080058000000000000020000075 +:10FE60000000002000000000000000000000000072 +:10FE70000000000000000000000000000000000082 +:10FE8000000000000000000000001100100005004C +:10FE90004100000000000000000000008401100488 +:10FEA0008200000810001000890008000000000017 +:10FEB0000000000000000000000000000000000042 +:10FEC0000000010801000000001000000000000018 +:10FED00000008401000008019020000000000000E4 +:10FEE000000400000001000000000000000000000D +:10FEF0000000000000000000000000000000000002 +:10FF000000000000000000000000000000000100F0 +:10FF1000000001000000000000000000900200004E +:10FF20000090A10800100011000088031002008852 +:10FF3000000488C000000000000000000000000075 +:10FF400000000000000100000101000100000000AD +:10FF5000000000000000020000000000000004009B +:10FF600000008200400100000000000000000000CE +:10FF70000000000000000000000000000000000081 :10FF80000000000000000000000000000000000071 -:10FF90000000000000000000000000000000004120 -:10FFA00000088009001100000000000000000000AF -:10FFB0000000050090000004090340219010800912 -:10FFC0000000808900008000800080A18300808084 -:10FFD000000080008200000000000000000000001F -:10FFE0001000000000000000000000000000000001 -:10FFF0000000008000000000000000000000000081 +:10FF9000000000010100000000000000000080805F +:10FFA000000000008900000900C0001100C100002D +:10FFB0000080000000800000000000000000000041 +:10FFC00000000000000000041021082100030000D0 +:10FFD000000000000000000080000000030000009E +:10FFE000001000030020004000000000000000009E +:10FFF0000000000000000000000000000000000001 :02000004001DDD :1000000000000000000000000000000000000000F0 -:1000100000000000000000000000000000000000E0 -:1000200000200000000000000000000000000000B0 -:1000300021000808200080002111200083000940D1 -:100040008040804180800000000300020091004059 -:1000500080000004000000000000002000000000FC -:10006000000000000004000000000000000000008C -:10007000000000008084000000000000000000007C +:100010000010002100080310000000000000000094 +:1000200080110080000000004180890009008009E3 +:1000300000000000000000000000000000000000C0 +:1000400000000000000000001084050404004004CB +:100050000000000000000000000000100080000010 +:1000600000000000800000000000004000000000D0 +:100070000000000000000000000000000000000080 :100080000000000000000000000000000000000070 -:100090000000000000000000000000000000000060 -:1000A0000000000000000000000000000000000050 -:1000B0000000110001000000040041014000400068 -:1000C0000000900040010808000000A0000100A10D -:1000D0000000020000000088000000000001000095 -:1000E0000000000000000000000000000000000010 -:1000F000000000000000080900004000000020008F -:10010000080088000000000000000000000000005F -:1001100000000000000000000000000000000000DF -:1001200000000000810000E000000000000000006E -:1001300000000000500000E000000000004100004E -:10014000070000820081000007004100484200E0F3 -:1001500007000000500A00E007000000000A00004D -:100160000700000000000021000007000000000060 -:10017000000000000000000A00000700000000006E +:100090000080008900210000002000000000000016 +:1000A000000090011020888884001108101088003A +:1000B000100000000004000000000000000000002C +:1000C0000000000000000000000001A0000101008D +:1000D000000100000000000000000000000100021C +:1000E00000000000400004000000000000000000CC +:1000F0000000000000000000000000000000000000 +:1001000000000000000000000000000000000000EF +:100110000000000800850000000000000000000052 +:10012000000000000082000007008400600600E07C +:10013000070000000082000007000000000000002F +:10014000000000000000000000000000600000E06F +:10015000000000000000000000000000600000E05F +:1001600007000000000000210000070000008100DF +:1001700000E000000000000000000000000000009F :10018000000000000000000000000000000000006F -:10019000000000000000000000000000000000005F -:1001A000000000000000000000000000000000004F -:1001B0000000000000000000000000000000F0FF50 -:1001C000F0000000000000A0F050AA00AA0000000B -:1001D0000000AAFFAAFFFFFFAAAABEBEBEBE000083 -:1001E000000000000000000000000000000000000F -:1001F00000000000000000003C003C0000000F0F69 -:10020000F0F0F0F00000000000000000000000002E +:10019000000000000000600000E00000000000001F +:1001A00000000000000000203C3CFF00FF003C007D +:1001B000F0F028282B2B00000000C0C000C0000079 +:1001C000000000000000000000000000000000002F +:1001D000000000000000000000000000000000001F +:1001E0000000000000000000555500000000000065 +:1001F00000000000000000000000000000000000FF +:1002000000000000000000000000000000000000EE :1002100000000000000000000000000000000000DE -:1002200000000000000000000000000000000000CE -:100230000000000000000000C3C300000000000038 -:10024000F0FFF000000000000000F0F000AA00AA9B -:1002500000000000AA00AA000000AAAA82828282EE -:10026000000000000000000000000000000000008E -:10027000000000000000000000003C003C00000006 -:100280000F0FC0FCC0FC00000000000000000000D8 +:10022000000000000000000000003C3C000028002E +:100230003C00F0F028282B2B00000000000000C03C +:1002400000000000000000000000000000000000AE +:10025000000000000000000000000000000000009E +:10026000000000000000000000005555550000008F +:10027000000000000000000000000000000000007E +:10028000000000000000000000000000000000006E :10029000000000000000000000000000000000005E -:1002A000000000000000000000000000000000004E -:1002B000000000000000000000000000000000003E -:1002C0000000AA87008700000000030C030C000058 -:1002D000FFFF555555553C3C3C3CFF55FF55FCFC3C -:1002E000FCFC000000000000000000000000000016 -:1002F000000000000000000000000000000F000FE0 -:10030000AA00AA0000000000000000000000000099 +:1002A00000000000000000000000D7D7FF5500004C +:1002B0000A003C503C5005F505050000050541418C +:1002C00041410000000000000000000000000000AC +:1002D000000000000000000000000000000000001E +:1002E000000000000000C3FFC3C30000FFFFFFFFCA +:1002F00000000000000000000000000000000000FE +:1003000000000000000000000000000000000000ED :1003100000000000000000000000000000000000DD -:1003200000000000000000000000000000000000CD -:10033000000000000000000000000000008000003D -:1003400000000000AA050005000000000F000F00DB -:1003500000000000FFFF0000FFFF000000550055F7 -:100360000C0C0C0C0000000000000000000000005D -:100370000000000000000000000000000000000F6E -:10038000000FAA00AA00000000000000000000000A +:100320000000000000000000000000005757FF55CB +:10033000000000003C503C5005F505053C3C3D3DAF +:1003400041414141000000000000000000000000A9 +:10035000000000000000000000000000000000009D +:10036000000000000000000000FF0000000000FF8F +:10037000001000000000000000000000000000006D +:10038000000000000000000000000000000000006D :10039000000000000000000000000000000000005D -:1003A00000000000000000000000000000000061EC -:1003B0000006800500000000000000000000006151 -:1003C0000005800D000000614026000D0000006166 -:1003D000002E000D00000061002F800D0000006164 -:1003E000002F800D000000000028000000A0000089 -:1003F00005100028000000000000000000000000C0 -:1004000000000028000000000000000000000000C4 +:1003A000000000000000000000000000000000004D +:1003B0002020000000000040002480000000000019 +:1003C00000200040000100000000000000000000CC +:1003D000000000000000002100068009000000006D +:1003E0000000000000000061000F800D0000000010 +:1003F00080610026000D000000610006800D0000F5 +:1004000000000000000000000000000000000000EC :1004100000000000000000000000000000000000DC -:1004200000000000000000000000000000000000CC -:10043000000000007D502850000000000000000077 -:100440000A0AFA0A00000000F0F0FDFF02070000AF -:1004500000000000C3FFC3FF00000000AAFFAAFFC6 +:1004200000610006800500000000000000000000E0 +:1004300000000000000000000A0AAA0000C300C07B +:1004400000000000000000000000000000000000AC +:100450000000000000000000008000C3ACACA0A0C1 :10046000000000000000000000000000000000008C -:10047000000000000000000000000000000000007C +:10047000000000000000AF0AAF0A0000000000000A :10048000000000000000000000000000000000006C :10049000000000000000000000000000000000005C -:1004A000000000000000000000000000000000004C -:1004B000000000000000285028500000000000004C -:1004C00000000AFAFAFA00000000F0F0F8FF7F2FAF -:1004D000000000000000C3FFC3FF00000000AA00EE -:1004E000AA00000000000000000000000000000062 -:1004F00000000000000000000000000000000000FC +:1004A000000000000000C3F0AA00000000000000EF +:1004B000000000000000000000000000000000003C +:1004C00000C000000000000000000000000000006C +:1004D00000000000000000000000008000C3FFFCDE +:1004E000FFFC000000000000000000000000000011 +:1004F0000000000000000000AF0A2C08000000000F :1005000000000000000000000000000000000000EB :1005100000000000000000000000000000000000DB -:1005200000000000000000000000000000000000CB -:100530000000000000000000F0FFF00000000000DC -:100540000000000000FF00FC000000000000202070 -:10055000C500C50000000000000000000000000011 -:10056000002000200000000000000000000000004B +:10052000000000000000000000F0AA000000000031 +:1005300000000000000000000000000000000000BB +:1005400000000000000000000000000000000000AB +:100550000000000000000000000000001414EFFF85 +:1005600055551000000000000000000000000000D1 :10057000000000000000000000000000000000007B :10058000000000000000000000000000000000006B :10059000000000000000000000000000000000005B -:1005A000000000000000000000000000000000004B -:1005B00000000000000000000000F0FFF00000005C -:1005C00000000000000000FF000C0000000000C060 -:1005D00020E0C500C5000000000000000000000091 -:1005E000000000000000000000000000000000000B +:1005A00000000000000000000000AFAF0CFC0000E5 +:1005B000000000000000000000000000000000003B +:1005C000000028283030000000000000000000007B +:1005D000000000000000000000000000000000001B +:1005E0007FFF555555550000000000000000000039 :1005F00000000000000000000000000000000000FB :1006000000000000000000000000000000000000EA :1006100000000000000000000000000000000000DA -:1006200000000000000000000000000000000000CA -:1006300000000000000000002080400400000000D6 -:100640002000208500000800208020000000C0005D -:10065000008000A000A0C020A000000000008804CE -:1006600004002000C010400420040004850400049D -:10067000000000000000C000000320004000000057 -:100680002000018220020000200020000000000065 -:1006900000020000000000002000008001020000B5 -:1006A0000084000000000004200010000000000092 -:1006B000000000000010000001004104410041A0C2 -:1006C000000200000004200004000004400041007B -:1006D000000000040004040521A100000000000047 -:1006E000000000840000400300000000000008003B -:1006F0000400000400000000000000000000800072 -:100700000000000040032101000241000000000041 -:10071000210000000000000200400000000208016B -:100720000090002000000000400000004000000099 -:1007300000000000000000010000400088000000F0 -:1007400000000002000000000000000000000000A7 -:1007500000000021008000040000000000400000B4 -:1007600000000000000084000010001000000000E5 -:10077000010088000000000000000000000001806F -:100780000040001000000000000000000000000019 -:100790000000000000000000400000000000000217 -:1007A00000000000002000000040000000000000E9 -:1007B0000000000000000000000000100010000019 -:1007C000000200000001000000000900000010000D -:1007D00041004000000000200083000000000000F5 -:1007E00000004000000040000008000100000084FC -:1007F00000000800000000000000000000000000F1 -:10080000200200000000000020000004030003009C -:100810000000000000004000000040004000040014 -:1008200000010000000000010400040004000000BA -:100830000000000000000000000000000000200098 -:10084000040090099000000900004000880040006A -:1008500000089000000090000000842090008200BA -:100860000808000000000080004010400000080060 -:1008700000000000C00082000040000000000000F6 -:100880000000004000000000000040004100400067 -:1008900000000000C0000000000000000000000098 -:1008A0000000000000000000000000000000000048 -:1008B0000000000000000000000000000000000038 -:1008C0000200000000000000000005000500030019 -:1008D000100000A000004000030000A000A10020C4 -:1008E0000000030000900000000408000000004029 -:1008F00000000000000000000800000000000000F0 -:1009000000000000000000000000000000004000A7 -:1009100000000000000000001000000000000000C7 -:100920000000000000000000002000004100000066 -:1009300000000000000000000000000000000000B7 -:10094000000080008221000520008500000090004A -:1009500000000800C00090008200A0C0A0000000BD -:1009600004000080000900000000100000000000EA -:100970000011000000000000000000000000000066 -:100980000000000000000000000000000000000265 -:10099000000008000000000000000000004000000F -:1009A00000000040000400020004000008000000F5 -:1009B00008000000C000000000000000000000006F -:1009C0000010000000020090000000004000000045 -:1009D00002040000000003A0090000001020000035 -:1009E0000000100000040510080011C0000000A065 -:1009F00000000004000000000000000041000000B2 -:100A000002000000000000000000000021000000C3 -:100A1000050500C00000000000000000009000007C -:100A20000000000000000000000100840040000001 -:100A300000000000000000000000000000000000B6 -:100A4000000000010000000100000000000300059C -:100A50000000A0080100900020000000002010000D -:100A6000000008002000010000000000000000005D -:100A700082200000820088000000000000000000CA -:100A80000000A000000000000000200000000000A6 -:100A900000004004000440000000000000000000CE -:100AA00000000000000082000000080008000000B4 -:100AB000000000000000040000000000C000400032 -:100AC0008400000000000000010000A00000008879 -:100AD000008800000000200000000000000408055D -:100AE0004000000005048820200400900900002038 -:100AF0000084090005840000008405000000000057 -:100B000000840000000000000000000080000000E1 -:100B100000002100000400000000090000000000A7 -:100B2000080000000090000000000000000000002D -:100B300000000000000000000000000000000000B5 -:100B4000000000000000000000004000010008005C -:100B5000200000000000000400008441820000002A -:100B6000040000000000000000C0C080000000037E -:100B700000001000000000008800000200000802D1 -:100B80000000000200000000200008020000000039 -:100B90000000000000000000000000000000000055 -:100BA0000000000000000000000010000000000035 -:100BB0000000000000000000000400000000080029 -:100BC000C0000000820000000000000000002000C3 -:100BD000008400000200000000400000000000004F -:100BE0000000009000000000080002020002400027 -:100BF0000000114021000000000000000000000083 -:100C00000000000000000000004020000040000044 -:100C100000000000210011000000000000000000A2 -:100C20000020000020044110000000000400020029 -:100C300000000000000000000200000000000000B2 +:10062000000000000000000000000000A0A00CFC82 +:1006300000000000000000000000000000000000BA +:10064000840000050000000000000400000000001D +:1006500000002080000020000002000200040004CE +:100660000002000000000000000000008200000006 +:1006700000001000000020C0000301000000000482 +:100680000004008284804000008004880080000014 +:10069000408001A001800080008000800000008078 +:1006A00040000000880088000000000000000000FA +:1006B00000000080010341830304000000000000EB +:1006C000000000000000000000000000000000002A +:1006D00000020000002000000000000000000000F8 +:1006E00000000000000000001000000200000902ED +:1006F00000000000000000020005000040000000B3 +:100700000002000000210040800000404040004006 +:10071000009000400202020200400040004000023F +:10072000004000020000008200820004000000027D +:100730000000208440040802080488030000000030 +:1007400000000000000000000000000000000000A9 +:10075000000000000000000000080005000000028A +:100760000000000202000000000000000000000085 +:1007700000000000A00400000004000000000000D1 +:1007800020000000000900000000028040008400FA +:1007900000000000000082008200000082000000D3 +:1007A00000000000020000002000000000000040E7 +:1007B0000280000002800200020008000010008891 +:1007C0000084000800080008008400040004000001 +:1007D000000000000004000000000008000000000D +:1007E00000080008000800020000000800000000E7 +:1007F0000000000821000008000000104008000070 +:10080000000080880008000800840000800280004A +:10081000000000000010040000C00000000000C044 +:100820000000000000880008024000040090000062 +:100830000083001000C00010000080008000000154 +:100840000800000000100000000000000008022165 +:100850000200000300080000000000200000000863 +:10086000004100000000000004080000000000211A +:1008700000000000A00000000000020000002104B1 +:100880000000C0414000A00020824105004100045A +:1008900040040408000002080000400900000000B5 +:1008A0000000000001000000011000000000000036 +:1008B0000000880020002011842104002000100086 +:1008C00040090000000000000000000000A000003F +:1008D000000000840082000000000082000100008F +:1008E0000000000000000000000000000000000008 +:1008F000000000A000880000040000002120400447 +:1009000008A100000004000000002003020800020B +:100910000000000000080000880000000000002027 +:10092000000000000000020000A00200000009001A +:100930000000000008040000000000000004800027 +:1009400000000484000000080021000000000000F6 +:100950000000400008000000080000000000000047 +:100960000000000082000000820000000000000083 +:10097000000000008800A00000000200000000004D +:1009800000000800000002000000C021A0040400D4 +:100990000000001000000000000000800002C00005 +:1009A000C000C00410000000000200090100C000E7 +:1009B000000084408440C0000000020000000000ED +:1009C0000000C14000000000000000002100000005 +:1009D000000000000002008400000000000000820F +:1009E0000000000000000300000000000000000004 +:1009F0000000000000000000000000048000000073 +:100A00000000000000000000830000004100000022 +:100A10000000000000000010030021000902000196 +:100A2000000000001100000000900000001040A035 +:100A3000000000004000000100C00000050000842C +:100A400020000000088200000000002000000002DA +:100A50000000000000000000000000000000000096 +:100A60000008000000000000000200000000041068 +:100A700000000000000000008200A00090000000C4 +:100A8000000002009021200400000011021100006B +:100A900000040005A000040400042104A00082203A +:100AA0008208C0020000A00020000011A000000287 +:100AB0001000000008000200020000000200001107 +:100AC000400000000011880440040000080000906D +:100AD000008400C00000000000A000A00000000290 +:100AE0000000000000000000040000000000000002 +:100AF000000008000000000000A00020000004002A +:100B000000000440080000408201000009828400C7 +:100B10002002030000000000000440041000000058 +:100B200000000000000000000000000000000000C5 +:100B30000001000000000000000000000400008828 +:100B4000009000A0000002000020008200000000D1 +:100B50000021001000000000000000400000000024 +:100B60000000000000210000000000000000004024 +:100B70000041000000004000C000000088000800A4 +:100B800088000000A00000000800900000009021F4 +:100B9000081100020241008440080188000040085A +:100BA000A0088811002100090811A0000802000017 +:100BB00000004000A0110040000000000000000004 +:100BC000000000000000880000000000000300009A +:100BD0000000000000001100000000000000000004 +:100BE0000000000000000000000000000000000005 +:100BF00000000000000000000000000000000200F3 +:100C000000002090000000000000850000000000AF +:100C100000008000000100000008400040020000C9 +:100C2000800100000000030003C00000000000017C +:100C3000000020000000000000000000080000008C :100C400000000000000000000000000000000000A4 -:100C50000000000041000000000000000000000053 -:100C600000009000000000000000A00090000000C4 -:100C70000000000000000000000000000000040070 -:100C80002000000000000000000000000000000044 -:100C90000000000100000001000000000000000052 -:100CA0000000000000000000000000000000000044 -:100CB00000000020000800890091000000000000F2 -:100CC0000000000000000000000000024088C08812 -:100CD0000040020010008400000000000000050039 -:100CE00000000000800009000010000000008500E6 -:100CF00000000000000040000000000000000000B4 -:100D00008000000000000000000000000000000063 -:100D100000000000001100000808000000000000B2 -:100D200000000008000000000000000000000000BB -:100D300000000000002000000089002000000000EA -:100D4000000000000000000000000000008005001E -:100D5000808000000008000000000000000000008B -:100D60000004000011800000001110030808210099 -:100D70001020100300000000000000000000000030 -:100D80000000000000000000000000000000000063 -:100D90000000000000000003000000000000000050 -:100DA000000000000008000000000000000000003B -:100DB0000000000000000000000000000000000033 -:100DC0000000000000000000000000000000100013 -:100DD00000001100030000000000000000000000FF -:100DE00000000000000000400020000100210190F0 -:100DF00001880100018900000000000000000000DF -:100E000000000000000000000000000000000000E2 -:100E100000000000000000000020000000000000B2 -:100E200000200000000000010000000000000000A1 -:100E300000000000000000000008000000000008A2 -:100E400000000000000000000000000000000000A2 -:100E5000010000000100010000010001000000018C -:100E60000000100000000000000001002000000051 -:100E70000101080102000000000000000000010064 -:100E800000A000900040009000020002000400401A -:100E90000000000000000000000000000000000052 -:100EA0000000000000000000000000000000000042 -:100EB0000000000000000000000040000100910060 -:100EC000030000000000000000000000000000001F -:100ED00000004000000090010400001000080041E4 -:100EE0000008000000000000000020101103411065 -:100EF000000002108020800020030300000000009A -:100F00004100000000000000000000800080008020 -:100F100000000000000000000000000000000000D1 -:100F200000000000000000000300000000000000BE -:100F3000000000000000000000000000800003002E -:100F40001000900000000000000000000000000001 -:100F50000000000080200003002180400008000005 -:100F60000000000000000000000000000011000868 -:100F7000100000110540030821002041004000003E +:100C50000000000000000000000000000000000094 +:100C6000000000000000000000A000040010004090 +:100C70000000000000000000000000000000000074 +:100C80009010008800A08802111000900890108831 +:100C90000000411109900882108904C00082C00838 +:100CA000C08888C0090808C1C021020202050405E5 +:100CB000088808A0A0200004020200400040004074 +:100CC0000040401000880088201002C0000001A0F1 +:100CD00020000000000000000000000000000000F4 +:100CE0000000000000000000000000800000000084 +:100CF00000000000000000000000000000000000F4 +:100D000000000000000000000000048010008000CF +:100D100000000000822008218083002180830910C8 +:100D20000090000900801008004009048090842190 +:100D30008090800391008800000080800000000007 +:100D40000000000080800000000000808080000023 +:100D50000280000000000000000000000000000011 +:100D6000000000000000000000000000000000097A +:100D700000800000000000000000000000000000F3 +:100D80000000000000000080008000008800038850 +:100D9000850003000000A000400903082121900005 +:100DA00008020800C10010000803918041800385FB +:100DB000028590000403200020A0000003900000A2 +:100DC00000830000800000008003009000000040CD +:100DD00000008040800000000000000000000000D3 +:100DE0000000000000000000000000000000000003 +:100DF00000000010000000000000000000000000E3 +:100E00000000000000000000001000A00000090029 +:100E100004211004028400000300081090A08985BA +:100E20000500C0012108C140820010008282852097 +:100E300084028384119082892100202008A090835D +:100E4000200008C100400440020010048802908481 +:100E50000200080084000888000000000000000074 +:100E60000000000000000000000000000000000082 +:100E70001000000000000200000000000000000060 +:100E8000000000000000000040400088C040020256 +:100E9000910800848411C011000189020021030916 +:100EA0000811A0880010000911C00809000400C042 +:100EB00002C0C1080182A085828303080020880443 +:100EC0000885900000000000C100891000208408FF +:100ED0001090080810080002A008000000000000A0 +:100EE0000000000000000000000000000000000002 +:100EF00000000000000000000000000000000000F2 +:100F00000000000000000000000080000000000061 +:100F1000808041A0000900A18020000141041183CC +:100F2000054010A000102090419090838009058515 +:100F3000414080C090002005C1108088C10300207E +:100F400000830004000000000000A10041000080B8 +:100F500000008000800000000000C0800000000051 +:100F60000000000000000000000000000000000081 +:100F700000000000000000008000000000000000F1 :100F80000000000000000000000000000000000061 -:100F90000000000000000000000000000000210030 -:100FA00011001100000008210800410000000000AD -:100FB0000000000000000000000000000000A10888 -:100FC00021090500000000000000000000000000F2 -:100FD00000000000000080118008000000000001F7 -:100FE0000000000000000000000000000000000100 -:100FF00000010000000100200001000000010000CD +:100F9000000000000011009000008011000189880D +:100FA0000304100005108091808000808041801033 +:100FB0008080000080000810039020804000208086 +:100FC00008008400400800008000800080000011BC +:100FD000000200008000000000000000000000008F +:100FE0000000000000000000000000000000000001 +:100FF00000000000000082002000080082000000C5 :1010000000000000000000000000000000000000E0 -:1010100000000000000000000000000000000000D0 -:1010200001000000000000000001000000000000BE -:1010300000000000000000000000000000000000B0 -:101040000300A000000000000000000000000000FD -:1010500000000000000000000401200190000000DA -:10106000480000E000000000500000E00000000028 -:10107000500A00E007000000810000E00700000ABD -:10108000810000E00000000A0000000000000000F5 -:101090000000000000000000000000000000000050 -:1010A0000000500000E00000000000000000000010 -:1010B0000000000000000000000000000000000030 -:1010C0000000000A0000070000000000000000000F -:1010D00000000000000000000000600600E00700C3 -:1010E000008100000000000000000000000000007F +:101010000000C00000002002022020100801000192 +:101020001004100805100400C0C01010A00804012E +:10103000C0200804C0C0020005088205088285009F +:10104000880284820584400040000288040802006F +:10105000080020100220080000000020009000007E +:101060000000000000000000000000000000000080 +:1010700000000000000000000082000007000000E7 +:101080000000000000000000000000000000000060 +:101090000000000000000000410000E0070048825E +:1010A0000000600000E0070048000012000020007F +:1010B000844100000000000000000000000000006B +:1010C0005000000000000000600000000000000070 +:1010D00084060000000007004800410000E0000016 +:1010E0000000000000000000000000000000000000 :1010F00000000000000000000000000000000000F0 :1011000000000000000000000000000000000000DF -:10111000003C000000000C00F8000000000000008F -:1011200000000000000000000000000000000000BF -:1011300000000000000000000000000000000000AF -:10114000000000000000FF000000000000000000A0 -:101150000000000000000000000000000F00FFF091 -:10116000000000000000000000000000000000007F -:10117000000000000000000000000000000000006F +:101110000000606060606F0F670300000000000067 +:10112000000000000000000000000000C3C30F0F1B +:1011300091F7FFFF4E7EFFFF0DFDFFFF3CFFC3FF5A +:10114000FF9FE787EFDFEFDF66FF99FF81100181E7 +:10115000000000000000000000000000000000008F +:1011600000F066C300000000000000000000000066 +:10117000000000000000000000000000999999980C :10118000000000000000000000000000000000005F -:101190003C3C0030000000000C00F80000000000A3 -:1011A000000000000000000000000000000000003F -:1011B000000000000000000000000000000000002F -:1011C0000000000000000000FF0000000000000020 -:1011D00000000000000000000000000000000F0000 -:1011E000FFF0000000000000000000000000000010 +:1011900000000000606060606F6F67630000000027 +:1011A0000000000000000000000000000000FF99A7 +:1011B0000000F7F7FFFFCFFFFFFFFDFDFFFF6F6FA1 +:1011C0006F6F9FFF87E72C1CEFDFF3F3F3F38110C2 +:1011D0001981000000000000000000000000000075 +:1011E000000000F0660000000000000000000000A9 :1011F00000000000000000000000000000000000EF :1012000000000000000000000000000000000000DE -:1012100000000000000000000000000000000000CE -:1012200000000000000000000000000000000000BE +:1012100000000000000000000000000000000210BC +:101220002000008810840000021020000088108434 :1012300000000000000000000000000000000000AE :10124000000000000000000000000000000000009E -:10125000000000000000000000000000000000008E +:101250000000000000000000021020000088108440 :10126000000000000000000000000000000000007E :10127000000000000000000000000000000000006E -:10128000000000000000000000000000000000005E -:10129000000000000000000000000000000000004E +:101280000000FFFF00000000000000000000000060 +:101290000000000000000000C0C3C0C30000000048 :1012A000000000000000000000000000000000003E -:1012B000000000000000000000000000000000002E -:1012C000000000000000000000000000000000001E -:1012D000000000000000000000000000000000000E -:1012E0000000E724030300000000000000000000ED +:1012B0000000FFFFBDF0FFFFF372FFFFE1F9D2DB9B +:1012C000B4BDE7E7F0FFFBFBFDFDB1F38DCFFF3FC2 +:1012D000E727900040908989CFCF000000000000F0 +:1012E000000066660F0F3CFC424200000000000058 :1012F00000000000000000000000000000000000EE -:1013000000000000000000000000000000000000DD -:1013100000000000000000000000000000000000CD +:1013000000006202FB9B00000000000000000000E3 +:1013100000000000000000000000660066FF000002 :1013200000000000000000000000000000000000BD -:1013300000000000000000000000000000000000AD -:101340000000000000000000000000000400000099 -:10135000000000000000000000000000000000008D -:1013600000000000242403030000000000610007C7 -:10137000800D000000610007800D000005610A2952 -:10138000850100A005610A0F850D00A0006100071E -:10139000800D0000000000000000000000000000C0 -:1013A00000000000000000000000000000000061DC -:1013B0000007800D000000610006000D0000000025 -:1013C000000000000000000000000000000080613C -:1013D000002E000D00A00000000000000000000032 -:1013E0000000000000008061402680050000000031 -:1013F0000000002000000000000000000000F5F5E3 -:10140000F5F5F03CF03C5070705017175555000042 +:1013300000000000FFFFBDFFFFFFFF7EFFFFE7FF94 +:10134000F6FFF6FFE7E7FFF0FB62FD64BDFFBDFFC0 +:10135000FF3FDB1BF0004000CFCFCFCF00000000ED +:10136000000000000000000000C042420000000039 +:10137000000000000000000000000000000000006D +:10138000000000000000002000000000000000003D +:10139000000000000000000000000000000030001D +:1013A00000000000006140068009000000000061AC +:1013B0000004801D0001A363806E102D920240E3A3 +:1013C0008006002D900240618006002D10024061D1 +:1013D0008006002D08020000300000000000000020 +:1013E00000000010000000615007800D00010000A7 +:1013F00000000000000000000000000000000000ED +:1014000000000000000000000000000000000000DC :1014100000000000000000000000000000000000CC -:1014200000000000000000000000000000000000BC -:1014300000050000000000000000000500000000A2 -:10144000000000000000000000000000000000009C -:101450000500000000000000000000000000000087 -:1014600000000000000000000000000000FF00007D +:1014200000000000000000000000FFFFF0F00000DE +:10143000FFFFCF0F008000000000000032F23EFEF0 +:1014400000000000500C00000000FFFFA0A0AFA0B3 +:101450000C0CCF0C0F000F3C00000000000000003F +:10146000000000000000000000000000000000007C :10147000000000000000000000000000000000006C -:1014800005050505F03CF03CFAF2F2FA1717555540 +:10148000000000000000000000000000000000005C :10149000000000000000000000000000000000004C -:1014A000000000000000000000000000000000003C -:1014B0000000000500000000000000000000000027 -:1014C000000000000000000000000000000000001C -:1014D0000000050000000000000000000000000007 -:1014E000000000000000000000000000000050505C -:1014F0003C3C000000000000000000000000000074 -:101500000000D7D7D7D73C3CAAAA00000000AAAA5F -:10151000AAAA000000000000000000000000000077 -:1015200000000000000000000000000000000000BB -:1015300000000000F0F000000000000000000000CB -:10154000000000000000000000000000000000009B -:10155000000000000000000000000000000000008B +:1014A000000000000000000000000000FEFCF0F062 +:1014B0000000FFFF0F0F000000000000000002C24C +:1014C0000ECE00000000000000000000FFFD000044 +:1014D0000F000000C3000000003C000000000000FE +:1014E00000000000000000000000000000000000FC +:1014F00000000000000000000000000000000000EC +:1015000000000000000000000000000000000000DB +:1015100000000000000000000000000000000000CB +:101520000000000000000000000000000000F54086 +:10153000F5550000000C000DAFABAF83FF350F3544 +:101540003024001404AE04AEFC000C00AA00AA0073 +:10155000C300F330000000000A0A3C3C0000000019 :10156000000000000000000000000000000000007B -:101570003CFF00C30000000000000000000000006D -:1015800000000000141414143C3CAAAA000000003F -:101590003C3C3CF0000000000000000000000000A7 +:10157000000000000000000000000000000000006B +:10158000000000000000000000000000000000005B +:10159000000000000000000000000000000000004B :1015A000000000000000000000000000000000003B -:1015B000000000000000F0F00000000000003C3CD3 -:1015C0003C3C0000000000000000000000000000A3 -:1015D0000000000000000000010100000000000009 +:1015B000554055550000000C00FCAFBFAF83F0351F +:1015C00000350000000004040404F0000000BF0027 +:1015D000AF0000003030000000000A0A00000000E8 :1015E00000000000000000000000000000000000FB -:1015F00000003CFF00C310000000208008800100B4 -:101600004100C0802080200084002005400020048C -:10161000C000001120004002A000A00020004004F3 -:1016200004048400400088008800020000000100DB -:1016300041004100200000034000200020002190D4 -:1016400020000000C0002000200000002004000056 -:1016500040002000400020000400040004000400BA -:1016600000000000880020000000000020000000B2 -:101670002000000004000000000000900004A11001 -:1016800020002000000400040040000000000000D2 -:10169000A001110000C00000800100022000210014 -:1016A0001001000100000002000000000090000294 -:1016B000040004000400002000000000000000906E -:1016C0004005400000001000000200024100000040 -:1016D000000000C00000210000C000000000000069 -:1016E00000000000000000000000000000000000FA -:1016F00000000000000000000000000000000010DA -:1017000008100080000400100080000000000000AD -:101710000000000000000500011082020100000925 -:1017200000000000000520081090000000000000EC -:101730000000000002000020031000000000000074 -:10174000000200000400040000C10090040000003A -:101750000000008000009000000000100000000069 -:101760000000001000410000000000100000000018 -:101770000000000000000000001000100902090035 -:10178000000080080004000503000204000000823D -:101790000000000000084000401020004083088244 -:1017A0000082008204000082008404042000000003 -:1017B00020C00008020400044101040000000000F1 -:1017C0004108000141008200800000204120C0004B -:1017D00040000000400200000488110040000000AA -:1017E0000004000020000400000020000000200091 -:1017F0000000000040000000000000880088000099 -:101800000021042108000021000000080008200039 -:10181000200520084000820284108203400000005E -:10182000000010050000000000020000000200009F -:101830000000000000040000000800090000000093 -:101840000000000000009000000000000000000008 -:10185000000000000000000000000000000840053B -:101860000000000000000000000000000000000078 -:101870000000000000000000000000000000000068 -:10188000100010080000040021C009000900210018 -:1018900080009004C000058211C10000001000000B -:1018A00000000408410000004000000000000000AB -:1018B00000000000000008004000000000000000E0 -:1018C000000008000000000004000000000000000C -:1018D00000000000000000000000410000000000C7 -:1018E00000000000000000000000000000000000F8 -:1018F0004100210000000000000000000000000086 -:101900000000000000410008000082410000820049 -:1019100000000000100000000041100000088200DC -:1019200040400800C000A0000000C100A08082006C -:10193000400400000000000000008800900000004B -:101940000000000000009000840910000000000565 -:101950000000002100110011000000000000000044 -:10196000080000000000000000000000000000402F -:10197000000000090000000000000000000000005E -:101980000000000000000004008800880000000043 -:10199000040000040000100000000000000200002D -:1019A00000000090000000000000009020000804EB -:1019B0000000800110000000080000000300030088 -:1019C0002100000000000800000000841000024018 -:1019D0000000000000000000001003880400000068 -:1019E000418800C00000000000000000000000006E -:1019F00000000000000000000000050000000000E2 -:101A000000000800000000000000000500000000C9 -:101A10000008200000100000C0801000A08000001E -:101A2000208004040480C000A00200000000000028 -:101A300000000000820000000000C0030011000050 -:101A40000805000000000000000000000000000089 -:101A500000000000880088000000080082000000EC -:101A6000000000000000000008000000000000006E -:101A70000000000000000000000000000000000066 -:101A80000000000000000000000800080008050435 -:101A900000000900800000C0008400040008000469 -:101AA00000008504109105041100100100000000E1 -:101AB00040000000080008000000000000000000D6 -:101AC0000000000000000000000000000000000016 -:101AD00000900000000002000088000000000000EC -:101AE00000000400000000000000000008000800E2 -:101AF00000000000000000000000000000000000E6 -:101B00000000000008001004080008030041000362 -:101B10000802000000210821400000000000000031 -:101B2000000000112009080000000000900940009A -:101B30000009000000000004000000000805820009 -:101B400000000000002000000080000000000002F3 -:101B5000000000000004080008410000000000111F -:101B6000000001050000000000090008000000005E -:101B70000000000808000000000000000000000055 -:101B80000000000000000000000000002000000035 -:101B90000000104000C00000000000000000000035 -:101BA00021001008000005000000000000C0000037 -:101BB0000000000000000000000100000000000024 -:101BC00000000000080000010000001000000000FC -:101BD00000000404000000010000400000000000BC -:101BE00041002100409000002000000000000000A3 -:101BF00000002000000000000000000000000000C5 -:101C000000000000000000000000000000000000D4 -:101C100000000000000000000000010000000000C3 -:101C20000000000000000000A1011000000000A062 -:101C3000032004850000000008008200000000006E -:101C4000000000000000A000900000C090200000F4 -:101C50000000000000000000000000000100000083 -:101C6000002090208288001000000000000000008A -:101C70000000000000000000000000000000000064 -:101C80000000000000000000000000000000000054 -:101C900000000000090000000000000040000000FB -:101CA000000000001000000000038208032000096B -:101CB00000C188080083000200009100A00000001D -:101CC0000000000000000000800080000000000014 -:101CD00000000000000009000000000000000400F7 -:101CE0000000000003008900000000000000000068 -:101CF00000000000000000000000000000000000E4 -:101D000000000000000000000000000000000000D3 -:101D100000000000000000080000000500000010A6 -:101D200000000008000000080000404020000502FC -:101D300003820000004100830090020302000010B3 -:101D4000030000008000000000008000800800C048 -:101D50000000000010000000200000000040000013 -:101D600000000080000020051105000000000000B8 -:101D70000000000000000000000000000000000063 -:101D80000000000000000000000000000000000053 -:101D90000000000090009000000000000000000023 -:101DA00000010000000100000001000000A100008F -:101DB000010001A100080001000800A001000100CD -:101DC000000000009000080008000000880040416A -:101DD00008824088000011000400A10008000000F3 -:101DE0000088000000080000000001100000000052 -:101DF00000000000000000000000000000000000E3 -:101E000000000000000000000000000000000000D2 -:101E100000000000000000000000C0000000000002 -:101E2000900084000000000020000000010000017C -:101E3000080000010000400000000401A1010000B2 -:101E40000400A0000000000000000000000000846A -:101E5000009010840102000000000000000100005A -:101E6000000000000200000010010000000120003E -:101E70000000000000000000000000000000000062 -:101E80000000000000000000000000000000000052 -:101E90000000000000000000000000000000000042 -:101EA000000000000000050000008000000041006C -:101EB00000208800040302208000080088024010EF -:101EC000004180208005101100000000000000008B -:101ED0004080000000800980000000000004002114 -:101EE00000001000000000000000000200030020BD -:101EF00000400000000000000000000000000000A2 +:1015F000000000000000000000002000000020802B +:101600000000000400044000000000001000000082 +:1016100000000000000000000000000000020000C8 +:10162000000000001100000000000000040800009D +:101630000000000000000003000010001000100077 +:10164000000000000005100000050000000300007D +:10165000000001001000000000000000000500056F +:101660000000001100002000000000000080C08485 +:10167000000000000004A084000000000000004002 +:10168000000400000009000100000000000000004C +:10169000000000000000000000000000200000002A +:1016A0000000000000000400000000000000000234 +:1016B00000020000000410020000000200020040CE +:1016C0000002000000840000009000000000000004 +:1016D0000002000240908000000200020000004072 +:1016E00000040000000221820082100200020004B7 +:1016F0000010000000C0000000100000000000000A +:1017000000000000010010000000000000000010B8 +:1017100008080000000000000000000000000000B9 +:1017200000000000000000000000030002000000B4 +:101730001000000000000003008000000000000016 +:1017400000000080008300000000048004000040CE +:101750000000000000000102000000000200020082 +:10176000020002000200000002000000000302006C +:10177000001102000200000002000000000800103A +:1017800000100008100040C0808200000008000027 +:10179000000000000000000000000208000200003D +:1017A0000008000400820084000400080810000003 +:1017B000008200040000000000000020000008007B +:1017C0000200008202020008000000004120000028 +:1017D0000000000000840000400100000000410003 +:1017E00000000000000000880000000404880000E1 +:1017F00080000000800000000010000000000009D0 +:101800000000002100100803000000000009000093 +:10181000000000080021000000210010000000006E +:101820000000C000000808000005A0000000000043 +:101830000000010000000021000320000000000063 +:101840001000000000008205000900001041200087 +:101850000000000000050000000000210009000059 +:1018600002400040008000080000000984200000C1 +:101870002000088020034005400002000200840090 +:1018800000000084000800000000000000000008C4 +:101890000000000004000000000000000004000040 +:1018A000008200100000000000080000000000009E +:1018B000080020000200208200000000000000025A +:1018C00000000084110202840090000802A00008B9 +:1018D000400200A000A00000114003040500000029 +:1018E00000884104000041102100000000001100A8 +:1018F000020080008004098804001104918800001F +:101900004000000000000000000000000000000097 +:1019100000000000000000000008000000000000BF +:1019200000000000000000000000010001000100B4 +:10193000010001000009010508110000000000007D +:101940000000000000000000000000419040000086 +:1019500000400840000000000000000000000040BF +:101960000000000000040800080208000000000950 +:101970000000000000000140000000100000000412 +:10198000408284000000000000A000000008000069 +:10199000000800000000000000000000000000003F +:1019A00000000000000000000800000020402000AF +:1019B00010001000100000002000000000000000D7 +:1019C000002000000000024000000200200011087A +:1019D00002A0400800080000000002000200000011 +:1019E00000010000000000000000050000000000F1 +:1019F00011000000000000000800000000010000CD +:101A0000000008030000000000004000000000206B +:101A1000000000000000004100400000000800003D +:101A200000000000400000000000C00000000000B6 +:101A300000000003000200882004000000000000F5 +:101A400000009021040000000020000004000000BD +:101A500000200420010800001011000040000400D4 +:101A6000820084000000118000400040000000005F +:101A700000000000840000000000000000000100E1 +:101A800088004004402104000000000040000000E5 +:101A90000000000000000000000000000000000046 +:101AA0000000000000040000000000000000000032 +:101AB0000000000000000000001180010088050007 +:101AC000020202020090A00200000903098890A00F +:101AD00004900003850540A0050020000088000058 +:101AE00000000088050800000202400000042100F8 +:101AF00000844000000000200500000000024004B7 +:101B00002004000440000490009000000003000046 +:101B10000021000300080000010000080000000090 +:101B200000000000000000000000000000000800AD +:101B30000000400000000000000000000009000458 +:101B400020040021000900200000000040000005E2 +:101B500000000000000800110108019100000000D1 +:101B60000000000000000000402182000000000092 +:101B70000000000000000000000000020000000063 +:101B800000000000000000808405010800840000BF +:101B900000A0000000000000000010000000000095 +:101BA0000000000000000000000000000000001025 +:101BB00000000000000000000000004000000000E5 +:101BC000000191834100000000002100000080001E +:101BD000020000000082000100884008402004400C +:101BE0000200110008000040020002000040050051 +:101BF00000000000000000000000000000000000E5 +:101C00001000000000000000000200004000000082 +:101C100000000000000000010101000100000000C0 +:101C200000000000000000000000000000000000B4 +:101C3000000000000000C10108000001880189A027 +:101C4000A084008890200000000000000000000038 +:101C500000000191840000110000A0A000009090FD +:101C600000000000000000000141C120008300834B +:101C70000200000000000200000000000000000060 +:101C800000C000080104000800000100100000006E +:101C900000000000000000000041082100040010C6 +:101CA0000000000000000000000000000000000034 +:101CB000000000000000000091418021002180030D +:101CC000898000000000800000000000000000008B +:101CD000000000411191800300110000830000000A +:101CE0000000000000000000000011410221000877 +:101CF00000A0800000000000800000000000000044 +:101D00000000008000000200008000001000800041 +:101D100000000000000000000000090004001100A5 +:101D2000041100000000000000000000000000009E +:101D3000000000000000000000009180820091007F +:101D40008904898020219191C18300000000000056 +:101D5000800000000000008080118080200008804A +:101D60008200C1A000000000000000000080000010 +:101D7000000000080000000000000000000000005B +:101D80000000000000080000804080009000080073 +:101D900008008010000000000000000000040000A7 +:101DA0000000010000000000000000000000000032 +:101DB0000000000000000000000000009088080003 +:101DC000A0009100884001008985919102000200E5 +:101DD000000090000000000000908400089001A026 +:101DE000A0901100C182000000000000000082C02D +:101DF00010002000040000000000000000000000AF +:101E0000000000000000000088000800C0000988F1 +:101E100001000000C0000000000000000000000001 +:101E200000000000000100000000000000000000B1 +:101E300000000000000000000000000000000002A0 +:101E4000011001100008040000090090C0C100004A +:101E50000000000000000000010000409110080890 +:101E600001004000909103C000000000000000004D +:101E7000900041008801000000A00008000400005C +:101E80000000000000000000000040000000100002 +:101E900000000000A00000000000000000000000A2 +:101EA00000041111410000200000000000000000AB +:101EB0000000000000000000000000000000000022 +:101EC0000000118009800080800900A000808091BE +:101ED0000000000000000000000011412191851168 +:101EE000C1C11105801180A1C003000000000000E5 +:101EF0000000000491208302000800000000008020 :101F000000000000000000000000000000000000D1 -:101F10000000000000000000000000400080008081 -:101F200000000000000000000000000800000000A9 -:101F30000000020321112000200304210010C10031 -:101F4000030000000011000000030000008000807A -:101F50000080800080050080000000000084008078 -:101F60000000000000400010000000000040804021 -:101F700080000000000000000000000000000000E1 -:101F80000000000000000000000000000000000051 -:101F90000000000000000000000000000000000839 -:101FA00000400000000000000000000000010000F0 -:101FB0000000000001880001000000014001200035 -:101FC0008400410000200001000000010000000228 -:101FD000001000A002000888200482000000000910 -:101FE000002000900000000000000000000020A081 -:101FF000A000A00090000000000000000000000011 +:101F1000C0000041002080100020000000000000F0 +:101F20000000410402000200020000000000000066 +:101F300000000000000000000000000000000000A1 +:101F40000000418011802180000989899121C10010 +:101F500011110000000900000000000080110009BC +:101F600000008000081183400200101000000000F3 +:101F70000000000021000888038004000000000029 +:101F800000000000000000000000000000100080C1 +:101F900000000000200041000200200000000000BE +:101FA000000000000100000000000100000000002F +:101FB0000000000000000000000000000000000021 +:101FC0000000000001C0019001880000C0890901E3 +:101FD00090000101000000000000000000009001DE +:101FE000000010100800A183210191900000000062 +:101FF00000000000000001000011011000000000BE :1020000000000000000000000000000000000000D0 -:10201000000000000000000000000000000084003C -:1020200000E000000000840000E00000000000006C -:1020300000E000000082000000E00000000000005E -:10204000000000005000000000E000000000000060 -:10205000000000000000000A00000700000000006F -:10206000500000E000000000818100E00700000057 -:10207000818100E007000000000000000000000077 +:102010000020009000000000002001880000000067 +:10202000000000000000600000E000000000000070 +:1020300000000000000000000000000000000000A0 +:10204000000000000000600600E00700420041823E +:1020500000E00700001200820000070000000000FE +:1020600000060000070000000082000007000000DA +:102070000000000000000000600000E000006000C0 :102080000000000000000000000000000000000050 -:102090000000000000000000000000000000000040 +:10209000600000E000000000000000000000000000 :1020A0000000000000000000000000000000000030 :1020B0000000000000000000000000000000000020 -:1020C00000EB00FA0000000000000000000000002B -:1020D00000000000000000003D01C704530055004F -:1020E00000000000000000000000000000000000F0 -:1020F000000038FB30F3000000000000000000008A -:1021000000000000000000000000000000000000CF +:1020C00000000000000000000000000000000020F0 +:1020D000AF0050005A5AA05F00000000000000004E +:1020E00000000C0CF3F3F0F00FF000FF0FF000FF16 +:1020F00000FF0000000000000000000000000000E1 +:10210000000000000000003C003C00000000000057 :1021100000000000000000000000000000000000BF :1021200000000000000000000000000000000000AF :10213000000000000000000000000000000000009F -:1021400000000028000A000000000000000000005D -:102150000000000000000000000005050505530018 -:10216000530000000000000000000000000000001C -:1021700000000000FBFBF3F3000000000000000083 -:10218000000000000000000000000000000000004F +:10214000000000000000000000000000000000008F +:102150000000FF0000005A5000F5000000000000E1 +:10216000000000000C0CF3F3F0F00FF000FF0FF094 +:1021700000FFFF0000000000000000000000000061 +:10218000000000000000000050505050000000000F :10219000000000000000000000000000000000003F -:1021A0000000000000000000F7F7F7F70000000053 +:1021A000000000000000000000000000000000002F :1021B000000000000000000000000000000000001F -:1021C000000000000000A00000000000000000006F -:1021D000000000000000000080C080C030303030BF -:1021E000C3430000000000000000F0C3F0C3000083 -:1021F00000000000000000000E0C000000000000C5 -:1022000000000000000000000000000000000000CE -:1022100000000000000000000000000000000000BE -:10222000000000000000000000002020202000002E +:1021C000000000000000000000000000000000000F +:1021D0000F0F040000000400C3FF3C0000000000DB +:1021E000CFCF30300000BE41BE41FF00FF0096550A +:1021F000965500FFFF0000000000000000000C0CDE +:1022000000FFAF05AF050000000000000000000067 +:10221000000000000000550F0F3CFF005555000066 +:10222000000028287D7D0000000000000000000064 :10223000000000000000000000000000000000009E -:102240000000000000000000A0A00000000000004E -:1022500000000000000000000000D5C0D5C03030F4 -:102260003030FF5F0000000000000000AA00AAFF5D -:1022700000000000000000000000FEFC0000000064 -:10228000000000000000000000000000000000004E -:10229000000000000000000000000000000000003E -:1022A000000000000000000000610007800D000039 -:1022B00000610007800D000000610007000D0000B4 -:1022C00000610007000D000000610006000D000025 -:1022D00000610007000D0000000000000000000089 -:1022E00005004A28051000A00000006100078009D1 -:1022F000200005650A2F850D00A00061002F800DCC -:1023000000000000000000000000000000000000CD -:1023100000000000000000000000000000000000BD -:1023200000000000000000000000000000000000AD -:10233000000000000000000000000000000000009D -:102340000000F0A0C0A0000000000000000000FF9E -:1023500000AA000000003C343C0400000000000023 -:10236000000000000000000000000000000000006D -:10237000FFF0FFF00000000000000000000000007F -:10238000000020000000000000000000000000002D +:10224000000000000000000000000000000000008E +:1022500000000F0F000004000400C3FF3C0000005A +:102260000000CFCF30300000BE41BE4100FFFF0074 +:10227000965596550FF0FF0000000000000000008A +:102280000C0C0000BEBE1414000000000000000092 +:102290000000000000000000550F0F3C55550F0FC7 +:1022A000000000002828282800000000000000008E +:1022B000006100028001000000000000000000003A +:1022C000000000000000000000000000000000000E +:1022D00000010020801D00001060002C80410000E3 +:1022E00000000038000010C000000361033E0C0D28 +:1022F00010C00361033E0C0D42C00000000000004E +:10230000000000614002800D00010000000000009C +:102310000000000000000000000000615007800D78 +:10232000000500610006000D00050000000000002F +:1023300000000300FFFF3C3C3F3F000000000000A6 +:10234000000000000000000000000000000000008D +:102350000000AA55F0F000000000FB04FF00303040 +:10236000C0C00000000000000000000000000000ED +:1023700000000000F700FF00000000300000000037 +:102380000000000003030303003C003C00000000C9 :10239000000000000000000000000000000000003D -:1023A000000000000000000000000000000000002D -:1023B000000000000000000000000000000000001D -:1023C00000000000C0A0F0A082BE00FF01010000DC -:1023D000000000AA00000000FFF5FF05000000005B -:1023E00000000000000000000000000000000000ED -:1023F0000000FFF0FFF000000000000000000000FF -:1024000000000000000000000000000000000000CC +:1023A00000000000FBFFFFFF000000200000000015 +:1023B00000000000030055000000030300000000BF +:1023C000000000000000000000000000000000000D +:1023D00000000000000000000000000000000000FD +:1023E0003030C0C00000000000000000000000000D +:1023F000000001000000FF00FF00000000000000DE +:102400000000000000003C7D004100000F0F0000B4 :1024100000000000000000000000000000000000BC -:1024200000000000000000000000000000000000AC -:10243000000000000000000000000000000000009C -:102440000000000000007F4F7C4C7F703F30000098 -:1024500000000000000000000000D7D7D4D4000026 -:10246000000000000000000000000000000000006C -:1024700000000000C300C3000000000000000000D6 -:10248000000000000000000000000000000000004C +:10242000000000000000FFFFFFFF000000000000B0 +:102430000000000000003C3C000030303F30000055 +:10244000000000000000000000000000000000008C +:1024500000000000000038043838FFDF00200000D2 +:102460000000D0D020D000000000000000000000DC +:1024700010000000000000000000000008000082C2 +:102480000000000000000000FF0F5C5C0000000086 :10249000000000000000000000000000000000003C -:1024A000000000000000000000000000000000002C -:1024B000000000000000000000000000000000001C -:1024C0000000000000000000734370407F70FFF0C8 -:1024D000000000400000000000000000D5D5D5D568 -:1024E00000000000000000000000000000000000EC -:1024F000000000000000C3FFC3FF00000000000058 -:1025000000000000000000F000F0000000000000EB +:1024A00000000000000000000000000000300030CC +:1024B00000000000000000000A0A00FF30303F303A +:1024C000000000000000000000000000000000000C +:1024D00000000000000000003C000404FFFF0000BA +:1024E00000000000202000F00000000000000000BC +:1024F00000000000000000000000000000008A0052 +:1025000000820000000000000000F0005C5C0000A1 :1025100000000000000000000000000000000000BB -:1025200000000000000000000000000000000000AB -:102530000000C00000000400880088000000400087 -:10254000200020002003C00020002000C10004045F -:10255000C08020000400040020002000000088004B -:10256000200040002000040040040420882088202F -:10257000402000030204880440042104209041000C -:102580004100200020100000C00020002000200496 -:102590000000A00088000000400020002000200073 -:1025A0004000000000000000200088040400040037 -:1025B000040420000000050020002040000000006E -:1025C00004C0000000C000C0200009000900200075 -:1025D00010012004000000000002000000000000C4 -:1025E00000000000000000000000000000010001E9 -:1025F00000010001000000010001210104010003AD -:102600000800029010000000000000000000000020 -:10261000004010000000400000000000000000002A -:10262000000000400000000000000000000000006A -:102630000004000000000000020000000004000090 -:102640000200000000000020000400000000000064 -:1026500000000800080982000000000000000008D7 -:10266000000800080000000008000000A0000000B2 -:102670000000000000000000000000000400000056 -:1026800000800182008000000000000000000100C6 -:102690000000000000002000000000000000058095 -:1026A0000000000400000000000000000000000026 -:1026B000000000000000000000020082000000088E -:1026C0000040200400080002090900030000000285 -:1026D00000080000000840000000400800840008D6 -:1026E000000009000004400000080008001041003C -:1026F0000040000000040000000020000004090069 -:10270000000400204021202000080540004009006E -:10271000041040004008000080080000400009004C -:10272000C00200000400001020102008400809002A -:102730000000090840C0000040C0820000080100FD -:102740000000000084030020100300100000900827 -:1027500010008400000010000400040000000000CD -:102760000000000000000000000000000000000564 -:102770000000000000000000000000000000000059 -:10278000A000010804000400040804000020002048 -:10279000C0030020000000000000000808008800BE -:1027A00000008400000000000000000000000000A5 -:1027B000C040000000000000000000000000009089 -:1027C00004080000000000000000050000000300F5 -:1027D000110008004100030205000000002005C0B0 -:1027E000080000000008000800080008000000843D -:1027F000080008840000080008000800000000002D -:10280000000008A040208900C0008000C10000092D -:102810000983000000014102001000820000000056 -:1028200000000000000000000000030000000000A5 -:102830000000000000000000000000000000A011E7 -:102840008200000004000800A010080000001141F0 -:1028500001000000008000000800080000000000E7 -:102860000020A0000000A0081000080400004000A4 -:102870004000820008008202000000020000000008 -:102880004040000040008200A1049180010001004E -:1028900088110009080002039000000008000000F1 -:1028A000820000000800102010401000000000000E -:1028B0000000000000000000080082000002000488 -:1028C00000000000000080000000008410000400F0 -:1028D0000890080000000004000000000300000051 -:1028E0000020009000000000000000002000000018 -:1028F00008000000030000080000000000C0000005 -:10290000000000A008000000000004020410040001 -:1029100004A0101000822100C1002100000000006E -:10292000080008000000000000000300210008402B -:102930000000030000000000080000000804000080 -:102940000004000210400005C01000008200C0001A -:102950001000000440880490008000C000110000B6 -:102960000000000000000000000000000000000067 -:102970000000000000000000900000000000400087 -:1029800000000000080004000800000082800141EF -:10299000A1004100000008000020000040080008DD -:1029A000840400000000004000000040000000001F -:1029B0000000840000000000000000000000000093 -:1029C0000000040010010000000011001084050048 -:1029D00000000000000500048005000400040084DD -:1029E00020040000000000001002000000000000B1 -:1029F00000000000000000000000080008000004C3 -:102A000021044008000080008000C0000520002054 -:102A10000484040004002100000000010004000000 -:102A200000000000050000000000000000000000A1 -:102A30000000000000000000000000000000000096 -:102A40000000000000000000080400210041840094 -:102A500000008403840004040120000004800000BE -:102A6000000284000000820000410000000000001D -:102A700000000000000000000000080000008800C6 -:102A8000000810219008000084200020042000206D -:102A90004180C100850510214020A00800200000D1 -:102AA0000020000000208408000008000000010051 -:102AB00000000000002000000000000000000000F6 -:102AC0000000000000000000000400000200000000 -:102AD0000000039000000300C10104010088802071 -:102AE00000000002000005000000000000000000DF -:102AF00000000000000000000000000000000000D6 -:102B00000000000000000000000000C10041800142 -:102B100000018402040004004000211000000201B2 -:102B20002000030000000000102000000000000052 -:102B30004000000000000000002000000000100025 -:102B4000000000000004000000000000A0000001E0 -:102B5000000000000000000000000240000800909B -:102B600084040000020000000000000000000000DB +:10252000000000000000000000000000000000307B +:1025300000302009000000000080000200020000BE +:1025400088002000000000000000000000000004DF +:102550002004000000000000000400000000000053 +:10256000C00020000000008500A000000000000066 +:102570002000000341002000008001000808000046 +:1025800040080400200000000004010200000000D8 +:10259000C00020002000200000000000000000001B +:1025A00000009000200000000000A080400000110A +:1025B00020112004000800000000000200000000BC +:1025C0000000000000000000000400000000000007 +:1025D00000000000000000000000000000000000FB +:1025E00000020902000000000004000500000000D5 +:1025F0000000000000002000804000042000800057 +:1026000000008000200000000000004004040000E2 +:102610000000000000000002000000000004400074 +:1026200000042000000240401008000421100000B7 +:1026300000844090218400000000000000000000A1 +:102640000000000000000000000500040000000081 +:10265000000000000000000000000000000000007A +:1026600000000008100088000000000000000000CA +:102670000000000000000000200020000004000412 +:102680000900A10000000000000000000000008020 +:1026900021000200114020000000000000000000A6 +:1026A0000200000082000008A000100002000800E4 +:1026B0000020840082000000000800000088000064 +:1026C00000000000000800000084001000820010DC +:1026D00000080000000000000004000000000000EE +:1026E000001000080010008400000000000000102E +:1026F000000800000000000000008082800800093F +:1027000000839000408441A00008000000A0000861 +:1027100000209084000082A080A00008000800C073 +:1027200004000084000002840010000080840090F7 +:102730008000000000900008000040000000000041 +:102740000005002100050021000500210002000510 +:102750000008000300000003000000080003000858 +:102760000000000000000000000800000000004120 +:102770000008000000000200C00300000008210063 +:10278000202090002000400002C02000020090089D +:10279000C0210480210040080100400000004000EA +:1027A0004008000004088400000088000000900039 +:1027B0000000908000094000200490080000000004 +:1027C0000000000000000000000000000000000009 +:1027D00000A0000000000000000000000000000059 +:1027E00000000000000000000000050000A0000044 +:1027F00000000008008400008084000000000084C5 +:10280000088400C0030200088084000300000088E0 +:10281000110003A0802008000000108400000010B8 +:10282000000021002100000000000000080000005E +:1028300040000920400240082088110041000000AB +:102840000011010400050008000800080010000045 +:102850000000000000050000000000001000080259 +:1028600000008402000000000000000000004000A2 +:1028700000009000040000000000000000000000C4 +:10288000000300210841044100000000C0040000D2 +:102890009000001100000000000000000004010092 +:1028A0000000000400040009000000000000010016 +:1028B0000000004000410002848084800009000084 +:1028C000000000000800008400A0000011000808BB +:1028D00000A0000000000000000000000000000058 +:1028E00000010000099100000000000000840800C1 +:1028F0000000000000C0800000C0000000080008C8 +:102900000000008800C080000000000800000000F7 +:102910000000008400000000000400000088200186 +:1029200020000000210000000084080000000000DA +:1029300004040088400100000001000200020900B8 +:102940000000000500000000000300210005000851 +:102950000000000000000000000000000000000077 +:1029600000000000000800210008001000008400A2 +:10297000000010000000820000000000C00084037E +:1029800000000000000000830002820000040080BC +:102990008582084000000000000004800000000064 +:1029A0008400000000009000A0000000000010045F +:1029B00020000000020000200000000084058400C8 +:1029C00008008421000000840000000000080000CE +:1029D00000100000000000000000000000000000E7 +:1029E00000000000000000000000000000000000E7 +:1029F000000000000000000000900008000000003F +:102A000005A0000000002000004000C011000000F0 +:102A100000024040200021000000000480200090BF +:102A2000000400084040000000000000000000001A +:102A300000000088000000882008090000204004F1 +:102A4000000408884002002101050004000500215F +:102A50000008000800080000002100000008000035 +:102A60000000000300210000000000000000001131 +:102A7000000040000000000040004008400000004E +:102A800000000000C0000000000300000021000062 +:102A90008808002100080811000088084000000094 +:102AA00091092180858003C000000000000800809B +:102AB0000000008009000004000000000000000089 +:102AC000000085A18402840000C00882000000008C +:102AD00000000800000000000000000000000000EE +:102AE000000000000800000000000000099000A0A5 +:102AF00000000000000000000900000800000008BD +:102B000000000000050000000000000000000000C0 +:102B10000000400000000002000000004000000033 +:102B2000000010009004100410040000050005824D +:102B30000020410000200402001000000000218459 +:102B400000000000400208010000081000C0024020 +:102B50001010000000000000000000000000000055 +:102B60000000000000000000000000010000000064 :102B70000000000000000000000000000000000055 -:102B8000000000000000000000000000040000023F -:102B900000080490008200200088008300A000A0AC -:102BA00000400000000001002100000008000000BB -:102BB000080000000000000000000000000000000D -:102BC000000000000000000000000000000380037F -:102BD00000030020000000000000000080000080D2 -:102BE0001000000000008000100000000000000045 -:102BF00000000000000000000000000000000000D5 -:102C000000000000000000000000000000000200C2 -:102C10000000200080000809008000800011118061 -:102C2000008000000000000003000200000000001F -:102C30000000800000000000000000000000000014 -:102C40000000000000000000000000000000000084 -:102C5000000000000020000000000000000000054F -:102C600000A0800580800005000000030000000037 -:102C70000000000000000000000000000000000054 -:102C80000000000000000000008000000080000044 -:102C9000000880048009008000000000000000049B -:102CA0008000002180808090080005000400100052 -:102CB0000000800080008000000000000000000094 -:102CC0000000000000000000000000000000000004 -:102CD000000400000000008300000000000000006D -:102CE00020000802902010040000000000010000F5 -:102CF00000000000000000000000000000000000D4 -:102D000000000000000000000000000800000008B3 -:102D100000002001028240828808008200900000AA -:102D20000020080020A0A00204080000000001000C -:102D3000002088000200A000040000000000000045 -:102D40000000000000000000000000000000000083 -:102D500000000000000082000000000000000000F1 -:102D6000000008881088048800900000900000008F -:102D70000000000000000000000000000000000053 -:102D8000000000000000000000000000000008003B -:102D90000000000001400209024002A09100000072 -:102DA00040000100820000821008A04000000001E5 -:102DB000000101010021001100020041000000009B -:102DC0000000000000000000000000000000000003 -:102DD00000000000000005004100000000000000AD -:102DE0000000000005008080800005000000000059 -:102DF00000000500000000000000000000000000CE -:102E000000000000000000000000000009000000B9 -:102E1000800000000000020000200000828090007E -:102E200000008000020040000080808083000000DD -:102E30000003002104020010001000C1000800007F -:102E40000000000000000000000000000000000082 -:102E500000000000000040022002100003000000FB -:102E6000000000000000004080A100800000000081 -:102E70000000000000000000000000000000000052 -:102E80000000000000000000000000000000000042 -:102E9000000300000000000080118090800000000E -:102EA000A108030811002000100384200000200066 -:102EB00000C0000000000008000400020000000044 -:102EC0000000000000000000000000000000000002 -:102ED00000000000000000000000010101000000EF -:102EE0000000000000000000A00102088290A00085 -:102EF00000000000000000000000000000000000D2 +:102B8000000000C000040090A0040000881010881D +:102B90000082088801000000000000002000000002 +:102BA000000090000101A10082010001000000006E +:102BB00000000000002000900090100000000000C5 +:102BC000000000000001000000000001820002007F +:102BD0008080008000000000000000000000000075 +:102BE00000000000000000000000000009100021AB +:102BF0000002000200000000000000004000000091 +:102C000005000000008000800000008000000080BF +:102C10000000408080002100000000000000000053 +:102C20000000000080001141092180020002000024 +:102C30000000000000000000008000008000000094 +:102C40000300000000000008200000000021000038 +:102C5000000900808000000000000000000000006B +:102C60000000000000000000000000000000110053 +:102C700008001000400000000000000000000000FC +:102C80000000004000000000000000808000000004 +:102C90008003000900880000008021000300410932 +:102CA00080000008808000804100200011C04109A0 +:102CB0008000000000008000000000000000800094 +:102CC00000008000800080002000030020002080A1 +:102CD00090000204C008080200000000000000008C +:102CE00000000000000000000000000000000000E4 +:102CF00000000100000001000000000000000000D2 +:102D00000000000000000002820088000004C000F3 +:102D10000000080010048808108400C001000000B2 +:102D20000101A000A001A084409000A000000103C8 +:102D3000010104000000080090000000900008005D +:102D40009000020008001000C000002001000000F8 +:102D500000A08990002184888908000000000000FC +:102D60000000000000000000000000000000000063 +:102D70000000000000000100000000000000000052 +:102D800000000000000000000000000800080082B1 +:102D900090C00001C10810208488101000000000BD +:102DA000000000000082009082A0000400010000EA +:102DB0002101010100000000000000001040000897 +:102DC000909082020000000000010001000000015C +:102DD000000100004110008900084085000000004B +:102DE00000000000000000000000000000000000E3 +:102DF0000000000000001000400000000000000083 +:102E000000000000000000000000110000000000B1 +:102E100000000080000141808080000005800000EB +:102E200000000000000000000000000000800040E2 +:102E30002020090511410000000000000000008072 +:102E4000000080008080001100210010004100007F +:102E5000000800080000000200848000000000005C +:102E60000000000000000000000000000000000062 +:102E70000000000000000000000000000002000050 +:102E800000000000000000000000000000008000C2 +:102E9000000000000000000180100002000000009F +:102EA000410083004000021000000080000080000C +:102EB000C1A01105C1000340000000000080000017 +:102EC00000000008000000000002000000000000F8 +:102ED0002100200020000808200088118410020032 +:102EE00000000000000000000000000000000000E2 +:102EF00000000000000000000004000000000000CE :102F000000000000000000000000000000000000C1 -:102F1000000000000000000000000401A0201008D4 -:102F2000C0000900010089000100C1002005041053 -:102F300041000010000000000000000100850002B8 -:102F40000000000000000000000000000000000081 -:102F5000000000000000000000000000000007006A -:102F600000000000000000000000000000E007007A -:102F70000000000000E00000000000000000000071 -:102F80000000000000000000000000000000000041 -:102F9000000000000000070000000000000000E04A -:102FA00007000000000A0000070000000000000009 -:102FB00007000000810000E000000000000A00009F -:102FC00007000000000000000000000000000000FA +:102F1000C00088A0882040000001100004100204B6 +:102F2000040001A00200010001018200004010A085 +:102F30000800C18841000400090000000090001052 +:102F40000000000000900020000000000090000041 +:102F500000000188000000000101000000000700DF +:102F60004800000000000000000000000000000019 +:102F70000000000000000000000000000000000051 +:102F800000000000000000000000604100E00700B9 +:102F9000000000000000000000000000600000E0F1 +:102FA00007004800880000E0000050000006000014 +:102FB00007000000842100E0070000000006000078 +:102FC00007000000000600000700000000000000ED :102FD00000000000000000000000000000000000F1 -:102FE000000000000000000000000000F0FBF020E6 -:102FF0009F063C3C000000000000000000000000B4 +:102FE00000000000000000000000000000000000E1 +:102FF00000000000000000000000000000000000D1 :1030000000000000000000000000000000000000C0 -:103010000000000000000000000000000000000DA3 -:10302000000DFE009800F0F000000000000000E13C -:1030300000000FFFF0F000000000000000000000A2 -:103040000000F6FFB4FF00000000000000000000D8 +:10301000000000002841043E30C0CF0F0000000037 +:1030200000000000000000FF00FF000000008181A0 +:103030009F9FDBDBFFFF60002020000000000000FE +:1030400000000000000000000000FFFC0F0C00006A :103050000000000000000000000000000000000070 -:103060000000000000000000000000000000F4FF6D -:10307000D0009F06BDBD0000000000000000000061 +:103060000000000000000000000000000000000060 +:103070000000000000000000000000000000000050 :103080000000000000000000000000000000000040 -:103090000000000000000000000000000000000030 -:1030A000FFFF00006E000800F0F0000000000000CC -:1030B0001EFF00000FFFF0F0000000000000000005 -:1030C00000000000F6FFB4FF000000000000000058 +:103090000000000000002841043E0C030300000073 +:1030A000000000000000000000FF00FF0000000022 +:1030B00081819999C000C0006000202000000000BC +:1030C000000000000000000000000000F0FC000C08 :1030D00000000000000000000000000000000000F0 -:1030E00000000000000000000000000000000000E0 +:1030E0000210200000881084000000000000000092 :1030F00000000000000000000000000000000000D0 :1031000000000000000000000000000000000000BF :1031100000000000000000000000000000000000AF -:10312000000000000000000000000000000000009F +:103120000000021020000088108400000000000051 :10313000000000000000000000000000000000008F :10314000000000000000000000000000000000007F :10315000000000000000000000000000000000006F :10316000000000000000000000000000000000005F -:103170000000000003C38100E10000000000000027 +:10317000000000000000000000000000000000004F :10318000000000000000000000000000000000003F -:10319000000000000000000000000000000000002F -:1031A0000000000004340434427E606F0000000020 -:1031B00000000000FF06FFFFB1913010000000008A -:1031C0000000000000000000F600C3C30000000083 -:1031D00000000000000000000000000000000000EF +:103190000000000000000000000010B9884430303A +:1031A0004444000000000000000000000000000097 +:1031B0000000000000000000FFFFFFFF0000000013 +:1031C000000000000000000000FF00FF09996FFFF1 +:1031D00006FF9FFF00000000096F24BD00000000F3 :1031E00000000000000000000000000000000000DF -:1031F000000000000000C3C3FF7EFF1E00000000AF +:1031F00000000000000000000000000000000000CF :1032000000000000000000000000000000000000BE -:1032100000000000000000000000000000000000AE -:1032200000000000000004340434427E00FF00006F -:10323000000C0000000000000000BD99FFDB000052 -:1032400000000000000000000000F6F6C3C300000C -:10325000000000000000000000000000000000006E -:103260000000000000000061000E050D00A000003D -:1032700000000000000005610A0F050D00A10061BB -:103280000007000D0000000000000000000000002A -:103290000000000000000000000000000000050029 -:1032A0000A08050000A0000005610A0F050D00A036 -:1032B00085610A2E050D00A005614A0E050D00A0CE -:1032C00000610007800900000061002E000D000071 -:1032D00000000000000000000000000000000000EE -:1032E0000000000000000000A808AA000000000084 +:1032100000000000000000000000000010B9884419 +:1032200074748888000000000000000000000000A6 +:103230000000000000000000000040D000900000EE +:10324000000000000000000000004242DBDB0090B4 +:1032500066F606009F0000000000096F24BD000014 +:1032600000000000000000610006000D00010000E9 +:10327000000000000000000000000000000000004E +:1032800000000000000000610006000D00000000CA +:1032900000000000000000610027800D00A0608297 +:1032A000000000008A00000000610007800D00019E +:1032B00080410006C00D000000000020000000005A +:1032C000100000208000000000000020000000002E +:1032D000000000200000000000610006000D000555 +:1032E00000610006000D00000000000000C33CFF6C :1032F00000000000000000000000000000000000CE :1033000000000000000000000000000000000000BD :1033100000000000000000000000000000000000AD -:1033200000000000000000000000000000000F0F7F -:103330000F0F0000000000000000FFC3FFFF0000AF -:103340000000000000000F0F0F0F00000000000041 -:103350000008000000000000000000000000000065 -:1033600000000000000000000000ABFBAAFF00000E -:10337000000000000000000000000000000000004D +:10332000000000000000000000000000000000009D +:1033300000000000F0F000000000000000000000AD +:103340000000FC0CF5F53F3FA0AF000000000000BE +:1033500000000000000000000000000000003CF041 +:10336000F0FF0400000000F000F000000000B2B226 +:10337000B2B20000000000000000000000000000E9 :10338000000000000000000000000000000000003D :10339000000000000000000000000000000000002D :1033A000000000000000000000000000000000001D -:1033B0000F0F0F0F1000000000000000FFC3C3C379 -:1033C0000000000000000000FFAA550000000000FF -:1033D00000000008000000000000000000000000E5 -:1033E000000000000000000000000000BE00B2B2BB +:1033B000000000003C3C1000000000000000000085 +:1033C00000000000FC0C05053030A0AF000000003C +:1033D00000000000000000000000000000000000ED +:1033E0003CF0F000040000000000000000000000BD :1033F00000000000000000000000000000000000CD -:1034000000000000000000000000000000000000BC -:1034100000000000000000000000000000000000AC +:10340000000000000000000000000000A2F3AAFF7E +:10341000FF00DF00000000000000000000000000CE :10342000000000000000000000000000000000009C -:103430000000000000000000C3C300000000000006 -:1034400000000000000000000000C3C300000000F6 +:1034300000000000000000000000FFAA00F00000F3 +:10344000000000000000AF05BEBE3F3FA0AF00007F :10345000000000000000000000000000000000006C -:1034600000000000000000000000000000008200DA -:10347000B2B20000000000000000000000000000E8 -:10348000000000000000000000000000000000003C -:10349000000000000000000000000000000000002C +:103460000000000000003C3C0000FFFFFFDF000008 +:10347000000000000000000000000000000000004C +:103480000000000000000000000000000000AAFF93 +:10349000AAFFFFFFDFDF00000000000000000000C7 :1034A000000000000000000000000000000000001C -:1034B00000000000000000000000C3C30000000086 -:1034C000000000000000000000000000DFD71C1416 +:1034B000000000000000000000000000FFAA000063 +:1034C0000000000000000000AF0514143030A0AF71 :1034D00000000000000000000000000000000000EC -:1034E00000000000000000000000000000000000DC -:1034F0002020A0002000A10000094000400004009E -:10350000050020004000880020002010200020003E -:103510004000880088002000000020002000880073 -:10352000C080040000804000200020002000000037 -:103530000003C000400088002080010820048800AB -:103540002000200088000000200020002010200023 -:10355000C000C0004000C003200000002000200088 -:1035600004004000200488002000200020002000EB -:1035700090000040414009004000090020A02004C4 -:1035800000402000C000090000004084000000004E -:103590004100200000000000000000004000090081 -:1035A0000000400200000010C100400000000000C8 -:1035B000000200002000200000000904200080011B -:1035C0002000A0000000000000000000000000013A -:1035D0000000000000000000000004C00000000027 -:1035E00040000000200000000000800000000000FB -:1035F000000000000000004101000200000900007E -:103600000000080000000200000800050000A040C3 -:10361000080008C0000000000000000000000000DA -:103620000000084040000000080000020000000008 -:10363000000008000000000000000000000004007E -:10364000048004000820000000000000C080010089 -:1036500009000000080000800000008000800000D9 -:103660000400000008400100010001000400040003 -:10367000000000000800000800880208000800049C -:103680000904000800084108200800100008008410 -:1036900000000084001000080000400809084040B5 -:1036A00000844010008880822008851009090000ED -:1036B00000000000000800004008008840084008A2 -:1036C000840080408008040900000084000000029B -:1036D0002000A000000004084004000000040004D2 -:1036E00040080008001000082008200820084000BA -:1036F000000009000000400840100080A0001005F4 -:1037000004080000002100000010000082004100B9 -:1037100000000041400302089000400040004005C6 -:1037200040030008000800000000000020004000E6 -:1037300010000021820000000000000000000000D6 -:103740009000000000880100000000000000000060 -:103750000000000000001000050000000004000050 -:103760000000000900000000000000000000000050 -:1037700000110000000000000800050908022120D7 -:103780000400030003080800000003000300050014 -:10379000A000000003A00000000000000082000064 -:1037A0000000000000000010080000000000000001 -:1037B00000000300000041000500000000000000C0 -:1037C000080021000000034020000000000000006D -:1037D00041000900410000000084020000080001CF -:1037E00000404100000000880000000000000000D0 -:1037F00000000000000000000000000084800800BD -:10380000A00008008200A0000000080082000480E0 -:103810002000A00082000000C00004820000080018 -:103820004000A000820304000400040004008200A1 -:103830001000080004008200A000040000008200C4 -:103840008200C000840082800802000082044000E0 -:103850000000000084020000820020002000080018 -:103860000800A00040400000C0008400820000006A -:103870000002000008410000000004008200001067 -:103880000500210040000388210003901000000083 -:10389000030480020800410200000400000303004A -:1038A00000000800000000000000000020000000F0 -:1038B00000000000000000000000001000000000F8 -:1038C000002000C0209000000504400421000001F9 -:1038D000210420080388030109000000C1009100B1 -:1038E0000400040010C00500419005000400088495 -:1038F000000021C003A000004102100009004000A8 -:10390000000000004000820200000021400084000E -:1039100000108200000410000011000000200000D0 -:10392000000000080000000000030000000010007C -:10393000080000000000408200000000000082003B -:103940000000000000000000000000000000000077 -:103950008400000008000000080082000000000051 -:10396000000000009000080010000000000082002D -:1039700000000000C00084000000C00040002000E3 -:103980008800000005000300000500000000800022 -:103990000000000008840591008821000300000059 -:1039A0000000000000000000000000000000000017 -:1039B0000000000000000000800300C000000000C4 -:1039C0000000000000000000210000901100000035 -:1039D0000000058405000000000000000010000049 -:1039E000000000000384000000000300000000004D -:1039F00000000000000000000000000000000000C7 -:103A0000000000000000C00400000000900400005E -:103A1000C000822191000080000000000000000230 -:103A20000009820400000000000000000000000007 -:103A30000000000800000000080001000000000075 -:103A40004000080000000400001104008400A000F1 -:103A50000000200000008208100900080402002075 -:103A60000000C00000000000000000400000000254 -:103A70008200000084000000000000000008000038 -:103A8000C0008200820000A0119000044000038862 -:103A90004182000000822000000400000988030029 -:103AA0000000000000000000000000000000008294 -:103AB00000000000000000000000030040000302BE -:103AC000008400024100000000C009400000000026 -:103AD00000C0000084201100008400202100081094 -:103AE000040002000000110040000000110005A0C9 -:103AF0000000000441002000400000880000210078 -:103B00000084050009000000000000001000000013 -:103B10000000000000000000000100002100000083 -:103B20000100410040000000000000000000000013 -:103B30000000000000000000000000000001000183 -:103B40000000000000000000000000000000010074 -:103B5000000000009000010000000000010084004F -:103B6000000000A0008800A000820000000000000B -:103B70000000000000000000000000000000000045 -:103B800000000000000000000000001010200020D5 -:103B900000030000000000000000100803210820BE -:103BA0000008100008008000000000000000000075 -:103BB0000000000000000000000000000000000203 -:103BC00000100000000000000000000000000000E5 -:103BD00040000000000000000300000000000200A0 -:103BE0008000000040800000030000000000000092 -:103BF00005000000000000000000000000000000C0 -:103C00004000000000000000000000004100201003 -:103C1000022005004000080040004000054021004F -:103C200005401004000000000000800000000000BB -:103C30000000000000000000000000000000000084 -:103C40000000000000000000000000000000000074 -:103C5000000000000000000500000005000000005A -:103C60000000000000000005000000020000000845 -:103C700000000008000000000000000000000040FC -:103C8000000000020000000000000000000000082A -:103C9000000001100000000000000000000000040F -:103CA00001000000010140008400100082000000BB -:103CB0000000000000000000000000000000000004 -:103CC00000000000000000000000000000000000F4 -:103CD0000000000000000000A0000488C000A084D4 -:103CE00000000000000000200000000000010000B3 -:103CF00000010000000100000000000000000000C2 -:103D000000000000000100000000000000000000B2 -:103D100000000001000000010000000000000000A1 -:103D20000000200000010001000000000000000170 -:103D30000000000000000000000000000000000083 -:103D400000900040834000080000000000000000D8 -:103D500000000000000000000000000084000800D7 -:103D60000000000100010001000102000400000049 -:103D70002000000020000000010000000000000002 -:103D800000000000400000000000000000000000F3 -:103D900000000002210810110002000000000000D5 -:103DA000000000200311092111200004000400413B -:103DB00000080000000000000000000000000000FB -:103DC000000000000380050408200000000000003F -:103DD00000000000000000000000040009000000D6 -:103DE000800005000002004000020020000080006A -:103DF00000000500000080000000410000000000FD -:103E00000000000000000000000040000000000072 -:103E100000000000A18303002100204000000000FA -:103E20000000004108C02000410009020008000015 -:103E30000000000000000000000000000000000082 -:103E40000000000000000000000000000000000072 -:103E50000000000000000000000000000000002042 -:103E600000040080000000000000000000000011BD -:103E700080000000000000080000000000000000BA -:103E80000000000000000000000000000000000032 -:103E90000000000000000902C0008500830000202F -:103EA00000000000000101A100000000000100016D -:103EB000009000C0000000000000000000000000B2 -:103EC00000000000000000000000000000000000F2 -:103ED00000000000000000000000000000000000E2 -:103EE000000100A0004000000000000000000000F1 -:103EF00082012000400000000001000000000000DE -:103F000000000000000000000000000000000000B1 -:103F100000000000000000000000000000000000A1 -:103F2000000000000000000A000000E000000000A7 -:103F30000000000000000000000000000000000081 -:103F40000000000000000000000000000000000071 -:103F500000000000000000000000000000E0000081 -:103F60000000004200E00700000000000000000028 -:103F70000000004100E007000000000000E0000039 -:103F800000820000000000000000000000E00000CF -:103F90000000000000000000000000000000000021 +:1034E00000000000000000003C3C0000FFFFFFFF68 +:1034F0000400000040004000000000000000020046 +:1035000000000000000084000000040040000000F3 +:103510002000021020002000000000000000200019 +:10352000010000008900852000802000212000008B +:103530000003A1000000200020850005C000000459 +:103540002080000000110000880000020000000040 +:103550000000000001000000200800000080400082 +:103560002084042000A0050004840480040004A03A +:10357000050040080000800000000000000000007E +:1035800000000000000000000004000000008000B7 +:10359000000000C0800100000000000000020000E8 +:1035A0000002040000A00802040500200004040139 +:1035B000009000004000000000000010000000002B +:1035C000000010080000000000084008000100048E +:1035D0000000000800000440000000010000000896 +:1035E00000000002C00100098400A00280208000C9 +:1035F0008003C00000400000001000000000000038 +:103600000000000000000000000000410020000059 +:1036100000000000000000000000000000000000AA +:103620000200040004400000000004000420900098 +:103630000420000000000000000000000000040062 +:1036400004000400050820002000200020000000E5 +:10365000000020000200821010800500110002000E +:1036600000000000020004800480048004800580C3 +:1036700004000580048900080000000000400000EC +:1036800000000000000000000040000000040000F6 +:103690000000008800000084000000880000000096 +:1036A0000000001000008001000000008000800188 +:1036B0000000800900000000008400841000000069 +:1036C0008088C10080009001800080888000800098 +:1036D000000000008008000000008040A010A00052 +:1036E0000000000000000000822080208020822056 +:1036F00084208000C020842000050000C005002137 +:103700000000000000000000000000000000002099 +:103710000005000500000800000000000000010096 +:103720000000000000000000002000000000000079 +:103730000000000000000000000000000000000089 +:1037400000050009A00440039005040800080800D3 +:10375000000800084100410090089000030040006C +:1037600000000200000020000000830089000580A6 +:10377000050004000500880090000084000000841B +:1037800000C000A0000000080000000000000000D1 +:103790000000000000840908000000000000410053 +:1037A000080000000082000000000001000003008B +:1037B00011000000000000000000000000000000F8 +:1037C000030000A021A00082008400A000002100CE +:1037D0000808000000004000108200041000820071 +:1037E00000000900000000000000000004040408BC +:1037F000842084008082A0000000000000000000FF +:103800000000000000000000400008000800C000A8 +:103810004000000000000000000000000021001037 +:10382000C041010000000083000000000200000011 +:10383000838008800000C0000000C0000000084134 +:1038400000210000820004210400048504002000FF +:1038500002040840200000000104081100200904AF +:103860000080080800000000000082000000040042 +:103870000040004000040400844004C003800000B5 +:1038800000000000000000C0000000080000000070 +:103890000000000000000000000000000800000020 +:1038A0001101410010000000004021000000809044 +:1038B000000408100020000008C000000084000080 +:1038C000000000000082000080008000A10280A0B3 +:1038D0008000800100008000110040000300030010 +:1038E00008010004034100000000040200401090A1 +:1038F00040001100000000828000000080020408E7 +:103900000000000000000000002100210408000069 +:10391000000000000000000000000000100008008F +:1039200010000080100001000008000000000000EE +:1039300002400000080500000000C0050000000073 +:103940000000000000108200000004000410A00429 +:10395000000000030084200420000100080020086B +:1039600000082010C0C0102010080000080000004F +:103970000000001100110011908584A0048000A0B7 +:10398000048000C000880008111000000000000042 +:103990000000000000000000000000000000000027 +:1039A00000008000000880002000000000000000EF +:1039B0000000800100008300000000001188050263 +:1039C0000002000000C00084000800A08000800009 +:1039D000000000000300004080018800400000005B +:1039E000800100008001400580018001090008007D +:1039F0004000009000000988000000200021802085 +:103A0000002080200041001100080010004100004B +:103A1000000800000000000000000000000000009E +:103A2000000082002088200820000000A080C00341 +:103A30000041010001110008830201410010002132 +:103A40000003002100000400080882050005200092 +:103A500084032004204100002020090800200000E9 +:103A600008001000000088041088040820040000EA +:103A700020000000000040000005820088020000D5 +:103A800000094011018800C0000000900082000081 +:103A9000000000080000000000000000000000001E +:103AA00000000000000080108000C18400000010B1 +:103AB00000000084400002000000080140A0000057 +:103AC000410021000000000041A00000030000A010 +:103AD0000000000000002000040080002000000022 +:103AE000030003008088000003418341A003830397 +:103AF0001000100000001100000220000000000073 +:103B000005000004800440020000000000000000E6 +:103B100000000000000000000000000000000000A5 +:103B2000000000000000000000C10009080888C172 +:103B30000000000082000000019000900408A00234 +:103B4000022000000090022000000001000000019F +:103B50000000009041204020820800010000000089 +:103B60000001891100A1010210849101419085900A +:103B70008220820200900004880200C000900808A1 +:103B8000000000C0019009C000000000000000001B +:103B90000000000000000000000000000000000025 +:103BA0000000000000000000000040C1202040C1D3 +:103BB000800800000500000000000900210000004E +:103BC0000000000000000000800000000010000263 +:103BD000000500080800030080008080001108052F +:103BE000002000100841002111C10080914189A1ED +:103BF000910580048080110000800080008000809A +:103C0000008000000580108091000000200002006C +:103C10001100110000000000000000000000000082 +:103C20000000000009000900200010008000A040F2 +:103C30008083410080008003008000008900C02153 +:103C400084804000000000040000800000000000AC +:103C500000000000000011002120080091A11100C7 +:103C60000500200080001100A0C01105A080030005 +:103C7000090311898989C000A0A0910080880000F3 +:103C8000000480808080088021000203908501006C +:103C90000100000000000000000000000000000023 +:103CA0000000000000000000000000000100902063 +:103CB0008901A01011000800080182040404890091 +:103CC0000900A1A0010020009000000008000000F1 +:103CD000000010000000888410002100000090897E +:103CE000000800000000C000A0001082A14008C031 +:103CF00000A001000141C18905C004C1918804C030 +:103D0000000000008484C090111001000000C00574 +:103D100000000000000000000000000000000000A3 +:103D20000000000000000000000000000000000093 +:103D3000C08800010084A18900000000000000008C +:103D400090090084401100C190020000900808A072 +:103D500000000000010000000000000900210091A7 +:103D600002A0000100002000000108C00010C008EF +:103D700010C0080300044191100589030082C08827 +:103D800009A100000005009000C100A00000009003 +:103D900000C1000000000000000000000000000062 +:103DA0000000000000000000000000000000000013 +:103DB000000000800020008091C100090011000473 +:103DC000000980C00005008400848080000080809D +:103DD0008080000000000800410000000004000393 +:103DE000009084400020000505200011C100110052 +:103DF000C1808000008505850985044141C000918E +:103E00008000904100020010008200C10004000305 +:103E1000009000880000000000000020000000006A +:103E20000000000000000000000000000000004052 +:103E30000000000341C0A1C08080C00580008080D8 +:103E400000808000008480000080800480008080EA +:103E50000000000000000002000000800000C140DF +:103E6000A180088010084180051103800520809101 +:103E7000898010000984C1A0910585098304000090 +:103E80001191118083038002800580800000C111A0 +:103E9000C0020500200800880000000000010000AA +:103EA000000000000000000000000000000000A072 +:103EB000000000000001A1020890088889000800A5 +:103EC0001010820210001004A0200040080102001F +:103ED000A040022040000000000000080010000088 +:103EE000918820089140C1010004000101020000F6 +:103EF0000208040840A04008C185210091098500FE +:103F000004109103C082100090011000900800007E +:103F1000C1052001C0C00101000000000000000038 +:103F20000000000000000000000000000000000091 +:103F30000000000000000000821100E00700000007 +:103F40000000000000000000002100000700000049 +:103F5000000A000007000000000000000000000050 +:103F60000000600600E007000000600000E00000C4 +:103F70000000820000E000000042842100E0070011 +:103F80000000480000E000004842008100000700F7 +:103F90000000504100E007000000000000000000A9 :103FA0000000000000000000000000000000000011 -:103FB0000000000000000000000000000000000001 -:103FC000000000000000000000000000000000FFF2 -:103FD0000CFC0000000000000000000000000000D9 -:103FE00000000000000000000000000000000000D1 -:103FF00000000000F0FF000F0000000000000000C3 -:1040000000000000000000000000000000000000B0 -:104010000000000000000000000000000000000898 +:103FB00000000000000000000000FF55CF45000099 +:103FC0000000FFC35F43000000003CFFBEFF300065 +:103FD000F0F03CFFFCFF28FFFFFF000000000000A6 +:103FE000000000003CF03CF03C3C3C3C0000000089 +:103FF000000000000000000004100820003C080839 +:1040000020FF20D000000000220000220000FF5FFF +:104010000000000F0000000F000000C300000000BF :104020000000000000000000000000000000000090 -:104030000000000000000000000000000000000080 -:104040000000000000000000000000000000000070 -:1040500000FF0CFC00000000000000000000000059 -:104060000000000000000000000000000000000050 -:10407000000000000000F0FF000F00000000000042 -:104080000000000000000000000000000000000030 -:104090000000000000000000000000000000000020 +:10403000000000000000000000000000FF55FF55D8 +:10404000C3000000FFC3FFC30000000000FFAAFF81 +:104050003000000000FFF0FF2828FFFF00000000F4 +:1040600000000000000000F0FFF0000FF0FF000073 +:104070000000000000000100000001400280003C40 +:10408000000000FF00F0010000001100001100001E +:10409000FFFF0000000F0000000F000000C3000041 :1040A0000000000000000000000000000000000010 -:1040B000000000000000000000005F0AFF00000098 -:1040C00000000000000000000000000000000000F0 -:1040D00000000000000000000000000000000000E0 -:1040E00000000000000000000000000000000400CC -:1040F000000000000000000000FF000000000000C1 -:1041000000000000000000000000000000000000AF -:10411000000000000000000000000000000000009F +:1040B00000000000000000000000000000000808F0 +:1040C000C3000000000000000000C2FAFAFA03C3B7 +:1040D000C3C3055505558A8AAAAA00004D4D0000A4 +:1040E00000000000FFFFF5F53F5F30503C3C3C3CDA +:1040F00000000000000000002400810004100140C6 +:104100005C5C5C5C00000000240000240690000061 +:10411000F000000000000000F000000000000000BF :10412000000000000000000000000000000000008F -:104130000000000000000000000000003F033F03FB -:10414000000000000000000000000000000000006F -:10415000000000000000000000000000000000005F -:10416000000000000000000000000000000000004F -:10417000000000000000000000000F280F280000D1 -:10418000000000000000000000000000000000002F -:10419000000000000000000000000000000000001F -:1041A000000080610006000D000000610006000DA7 -:1041B000000000610007000D000000610006000D16 -:1041C00000000000000000000000000000000000EF -:1041D000000000610006000D00000000000000006B -:1041E0000000000000610007000D000005610A2FBB -:1041F000050D00A100610006000D000000614027D0 -:10420000000D000000610007000D0000000000002C -:104210000000000000610007000D00000000000029 -:1042200000000000008000A8000000000000000066 -:1042300000000000AA00F0C3BE82BF83000000009F -:10424000000000000000000000000000000000006E -:104250000000000000000000000000FF000000005F -:10426000000000000000000000000000000000004E -:1042700000000000000000000000000080000000BE -:10428000000000000000000000000000000000002E -:10429000000000000000000000000000000000001E -:1042A000000000000000008000A8000000080000DE -:1042B000000000000000AAFFF0C3FFC3BF8300009E -:1042C00000000020000000000000000000000000CE -:1042D00000000000000000000000000000FF0000DF +:10413000000000000000000000000000000000007F +:104140000000C3000000800000000000FAFAFAFA44 +:10415000030000000141014108080000000055551E +:10416000000000000000000005053F5F3050F5F53D +:10417000050500000000FFFF00000024008108206A +:104180000280FC0CFC0CFFFF00008100008100009D +:104190000690F0000000FF000000F00000003C3C32 +:1041A000000000610006000D00000000000000009B +:1041B0000000000000000000000000610006000D8B +:1041C0000000000020298000000100610006000DB1 +:1041D000000100610026009D00000000002000009A +:1041E0000000000000610006000D000000410026F4 +:1041F000800D0000006100008001120600610006D1 +:1042000080050800A0010020800012060061000463 +:10421000800508000363033E0C0D92C003E3033CDA +:104220008C0DC2C000000000000000000000000073 +:10423000000000000000000000000000000000007E +:10424000000000004141C3000A0A0F0F00000000F7 +:10425000FFD70F070000000055555545000000002E +:104260000000000000000000000000000000C0C0CE +:104270003C00F0F5C0C155553C0F30FF3FFF0C002E +:104280000C0000000000F814F0F0FF50BC90DF5D5F +:10429000DF5DFCFC0C0C00000000303FA0AF2D2DBA +:1042A000FFAAF3823082000000000000000000003E +:1042B00000000000000000000000000000000000FE +:1042C0000000000000004141C3000A0A0000000095 +:1042D0000000FFFF0F0F00000000FFFFFFCF0000F6 :1042E00000000000000000000000000000000000CE -:1042F00000000000000000000000000000000000BE -:1043000000000000000000000000000000000000AD -:10431000000000000000000000000000000000009D -:1043200000000000000000000000AF3CFFC53A00A4 -:1043300000000000000AFFFAF5F5FC0CC3FF4D4D2C -:10434000000000000000000000000000000000006D -:104350000000000000000000353535350000000089 -:10436000000000000000000000000000000000004D -:10437000000000000000000000000000000000003D -:10438000000000000000000000000000000000002D -:10439000000000000000000000000000000000001D -:1043A0000000000000000000000050C3FFFFFF05F8 -:1043B000FA00000000008282BEBE0505FC0C003C35 -:1043C0004D4D000000000000000000000000000053 -:1043D0000000000000000000000055555555000089 -:1043E00000000000000000000000000000000000CD -:1043F00000000000000000000000000000000000BD -:1044000000000000000000000000000000000000AC -:10441000000000000000000000000000000000009C -:1044200000000000000000000000000020002080CC -:1044300004008480400088002010C1040000842112 -:10444000A0002009880088058800200020002000A6 -:104450008800C00020200400C00020000000880068 -:10446000880084002000200020082000000388002D -:104470000000C000041011002100200220000000F4 -:10448000890221008982C000200004002000200051 -:1044900000002000840004002008200008800000A4 -:1044A0004010200084020000202021000400400071 -:1044B00000100000051080000000400120000000F6 -:1044C000200005000000000040000002400009003C -:1044D00000000002090000208000410204000000EA -:1044E00000004000000080000400A000A0000000C8 -:1044F000200000000000000120002000C003A000F8 -:104500004000040104000411200041028400050061 -:104510000000090009C00000000009020000A020FE -:1045200000002001040009010000000020008400B8 -:10453000000000000000001020800100000000804A -:104540000100008801000000000000000000008061 -:104550000400000000000400010020000100200011 -:10456000000000000000000000800000008000004B -:10457000000001000000000000004080000000007A -:10458000001000800080C080008041000180008019 -:104590000000008000800080009008000000000003 -:1045A00000000000010000000100012001002100C6 -:1045B00000000008000800840009800220C00000FC -:1045C00004200484401004080508000800080008BE -:1045D000001084844004000080080400800004006F -:1045E00080000084040800080008401000104010FB -:1045F00004000000400800080008000880020908C4 -:1046000000004001040440040904000404080404F8 -:104610004010000000040004000400058500008430 -:10462000000005000000040000000400040904006C -:104630008400400000000000000000000040000076 -:104640000091001000008420002101900010001053 -:1046500000108800000800000008000000080008A2 -:10466000000000000008000500000100000000003C -:10467000900040000000010500008200C000A02161 -:10468000C02108001000000000000020000085206C -:10469000002001000521C00000000000000000040F -:1046A00000040000000800210104000000040000D4 -:1046B000000800200000001021000004039005A065 -:1046C00003A04104000000000001000004210000DC -:1046D000000000000000000000A0000000004100F9 -:1046E0000000000003000000000000002000080897 -:1046F00000880000410000004000000000000300AE -:10470000030000000000030000000000000105009D -:10471000200100012000A00009000300080008009B -:1047200000010001038800000000040100000001F6 -:104730000900050010012000A100A0004000088031 -:1047400021000911210009008205040008008400ED -:1047500008000400000082000100040008020800B4 -:104760000004004008048300100000090800824093 -:10477000C1410505C0418200000090000800A00072 -:1047800082008200C000A00010040100200004028A -:104790000800908020008200100004004000040205 -:1047A000C000820004008280820083000000C0807C -:1047B00008808280830440052004408800100000A7 -:1047C000210284000400840004000084A100000091 -:1047D000030000000000000000004000800803000B -:1047E000000000051000200504004100000000004A -:1047F00000000400A08200040090000000000000FF -:1048000000000000000000000088000104002000FB -:104810000020000011048340080003000082800093 -:1048200040000500080000C02104218404000400A9 -:1048300010200020000220211084080040020021E6 -:10484000000384000405204182200000C00582008E -:1048500000040000010000000000000000008200D1 -:104860000000000000040804000400049000080098 -:1048700000000800C00004008200000000004002A8 -:10488000C0000800008009000000A000C000002057 -:10489000000000020000820082108204820090006A -:1048A0009080C080C080C00040418284A00400008D -:1048B000000082008200088010408400A1000001F6 -:1048C000000000840000800080000001000000C0A3 -:1048D0000004080000C04010211000100300000078 -:1048E00000000000000000010001000100010000C4 -:1048F0000000050003000000800000000000000030 -:104900008091000000000004400000C00000100082 -:104910000001000005010000008400000005000007 -:104920000000002000200020000080200003000183 -:104930000000000000000000000400010500040069 -:10494000004000210003842182A1822100218300F4 -:104950000008840240200000002100000000400008 -:10496000000000000000A00000100010000410046F -:10497000000008009000A000000000080400830070 -:104980000000204100418200080040042000820411 -:10499000A00020110002401120009021822140003F -:1049A0000000042082098289400082850100000500 -:1049B000100504040000C084040582004020820524 -:1049C00021040000030000000000000200000000BD -:1049D0002000000000001101000000004002000063 -:1049E0000000000000004000000000010001200164 -:1049F0000001000000001100000000000000800025 -:104A000004000000000000000000000080008000A2 -:104A10000001000021020890090041000000002070 -:104A2000000000000001000040204020000420029F -:104A30004100000090010000412100000000000141 -:104A40004100200000A00891C0880083C000000041 -:104A50000000040140C0908800A0A00200000000F7 -:104A600000000001408200900040900101A1400040 -:104A700089010011000000000000000008028810F9 -:104A80000082C008000000010001010000000100D8 -:104A9000110141018800000091000501000105900D -:104AA000002001A0A040030290200140904000009F -:104AB00001002100000000A09020C0A08210000092 -:104AC0009000010000000089894000040003890271 -:104AD000002111028002800080000080008000031D -:104AE00000050005002089000091008980111182D5 -:104AF0008021C109000300000000040000000080C4 -:104B00000000058000000000000400404000000597 -:104B1000110520408820004000409003A0080011AB -:104B200090000000100000009080008002008000D3 -:104B300000110803020900052080C00041008080A8 -:104B40000520802102200020000200418008000092 -:104B50008040000000020080000080808002800011 -:104B600080008000800080008000001180910000A3 -:104B700021800810111100830000000000000000D7 -:104B800080040085002000800000000080000009F3 -:104B900000008310A1008809210340098300400818 -:104BA00091800002800080050000808980118009CA -:104BB00000A005400341050420901105830490895D -:104BC000C080000980800004800020009000021056 -:104BD000000010008240900104028400020482015F -:104BE0000408020004000400020008000001A040C4 -:104BF000000001A0014001110005000000000000BC -:104C00000000020102088803A0020000A00040008A -:104C10004000020008210300A10005014084028237 -:104C200090018204400120820800208288C0024056 -:104C30008840A0082090A101009000A0830002827B -:104C4000A1020308A0000208000182848400010080 -:104C50000101200100C040C0830800A04082004044 -:104C6000404000080000010000000000A01000000B -:104C7000001000100000010182000101000000008E -:104C8000000000000800C0A084C0A0A00000000038 -:104C90000100000000000004088890830002000169 -:104CA0000801C0000100412082A0040405A0020404 -:104CB00002201040028400000400000000004000B8 -:104CC00082080801A0410000040040000000000923 -:104CD00041112020004040000200400011800500EA -:104CE0000000008000000000100020000000808014 -:104CF00011001180008040001108410009110000DE -:104D000000000000200084000080000005800000FA -:104D100000000800410020000041802041030520E0 -:104D20001004A00508200840020000808000828056 -:104D300005000080800002000003830320020905B3 -:104D4000054000A080218908400003008500400044 -:104D50000000000000000000002100A10000000091 -:104D60000011002000000000000000000000000012 -:104D700000110009800000800505114000000311AA -:104D8000000000000000000000110084000080000E -:104D90000000000900000000000020041011208025 -:104DA00040C01021218340000011000000090000D4 -:104DB00000001140838883000200038403A0840064 -:104DC00005030000802000008002002000400080D9 -:104DD0000080040020889000A0000001000800A0CE -:104DE00000000001009100C000000000000800A0C9 -:104DF00000000001840040208808910191012000FA -:104E00000801000000000000000088018820A008C0 -:104E100002000000000000080010000000010188EE -:104E20000004011001A1000400900000000000A097 -:104E300000400000830104A00490050000A10021AF -:104E400002C088009088904082A004000001000108 -:104E5000000400080000000000004200000000E024 -:104E600007004200000000000700000000000000F2 -:104E7000000000000000000007000000000000E04B -:104E800007000021000000E000000000000000E03A -:104E9000070000000000000000E00000000000002B -:104EA00000E000000000000000E00700000000003B -:104EB00000E007000000000000E0070082000000A2 -:104EC00000E007004100000000E0070000000000D3 -:104ED00000E007000000B4B4FF660000000000001E -:104EE00000000000000000000000FF03FF6300005E -:104EF000000000000000EE88EE88DBFFFFFF0000EE -:104F000004000000000000000000000000003C66FB -:104F1000363666666666000000000000000000008D -:104F200000000000030303F3000000000000000085 -:104F30000000000081C3004206819F81004B664B48 -:104F4000E6E6E6E600000000FFB14E000F0F0000AD -:104F50000000000000000000B4B499000000000050 -:104F600000000000FCF60C0600000000FC009C00A5 -:104F70000000000000000000F690F6902400000001 -:104F80000000000000000000000000000000000021 -:104F90003C3C36360F000FFF000000000000000010 -:104FA000000000000000F303F3F300000000000025 -:104FB00000000000000080C280C206E79FE7994B16 -:104FC000FF4BEFEFEFEF00000000000000000F0FBD -:104FD000FFFF0000000000000000000000000000D3 -:104FE00000000000000000000000000000000000C1 +:1042F000C0C0FFFFFFF5C3C155553C0F30003F0064 +:104300000C000C0000000000FC003C3CA0A03C3075 +:104310008A088A080C0C0C0C00000000303FA0AF8B +:104320002D2D55003082308200000000AA3CFFF0A5 +:10433000000000000000000000000000000000007D +:104340000000000038F83BFB003C000F0A0A0F0F8A +:10435000000000000000000000000000FF5FC343F9 +:1043600000000000000000000000FF3C003C0000D6 +:1043700000000000000000000000FCFCFC0CFCAA97 +:10438000FCAA05000F0000F530D5D305D3D3007D7E +:10439000305D000000008ECF8ECF000000000000D6 +:1043A000000000000000F0F0000000000000AA3C47 +:1043B00000F000000000000000000000000000000D +:1043C00000000000000008C80BCB003C000F0A0AE8 +:1043D0000000000000000000000000000000FFFFDF +:1043E000C3C300000000000000000000550F550F7F +:1043F0000000000000000000400000000CFC0C0C5D +:104400000CAA0CAA0500000000F500F5D700050570 +:10441000007D007D000000000C4D0C4D00000000F0 +:10442000000000000000000000553C3C00000000BF +:104430000010000000000000000000000000C000AC +:10444000000000000000000000000000008000806C +:10445000000400800080C0000084000420040000EC +:104460000100000410000000840000000003008030 +:10447000000000000000000000000000000000003C +:10448000000000000000200004C100000005000042 +:104490004100000340840000020000004009C00009 +:1044A0008480C000058285000402038000020000B1 +:1044B00000020000000000000000000010000000EA +:1044C0000000000000C00000000000020000100416 +:1044D0000004000300040004000000050001C00304 +:1044E0000002200200030002000200080000000099 +:1044F00000200000000209000000008200000020EF +:104500000000000000C0000040004140000000002A +:1045100040009002000000024000000040000088BF +:104520000000400200004008040080050420000450 +:10453000000000000000000000000000000000007B +:10454000000000000000000000000000000000006B +:10455000010400000004000400000000000400004A +:1045600000000000011001040040000000090000EC +:10457000000000002000000000000000000000001B +:104580000000000000000000000004000040900057 +:104590000000000001000000020000000000040014 +:1045A0000000000010C1000082020300002005008E +:1045B00004080000000000100000000800000000D7 +:1045C00000C000000000000000000000000000002B +:1045D000000020010000000105010088000000012A +:1045E0000000000000002000200100000000000882 +:1045F0000000000000C080C00000000800000000B3 +:104600000000000020000000000000080000004042 +:1046100003080000050040900000000800000000B2 +:1046200000000000400080080000001104000001AC +:1046300004088001020000000000080000000000E3 +:104640000021000000210021000000000000000007 +:10465000000800000008000800000000000300003F +:1046600000000000000000000105004100022009D8 +:104670000400000000000002002140C10080000092 +:104680000400000000110000000500008803000085 +:104690009000900088004000900040000000000062 +:1046A0000000820000030000058000000400A0005C +:1046B00088000400040000A0001000C0800000007A +:1046C00000000000000000000000030000000500E2 +:1046D00009000000000000000000000000000000D1 +:1046E00000000584000009000000040009000082A9 +:1046F0008000800000000000000041002120002018 +:1047000000020000030000884000030000002000B9 +:104710000000000000000504800011C000820000BD +:10472000000000000000009040A090080000800001 +:1047300005004100840080840000000008000000A3 +:104740000000000000000004002000000020002005 +:1047500010000000000000001000200420000000F5 +:104760002004000000042004008008410080201084 +:104770009005000840000000000000044011000403 +:104780000041000000000000000002009000A000B6 +:1047900090009000004108040011400000028200D7 +:1047A00082000020000040000000820904038241D2 +:1047B000830088020800041100000000000080004F +:1047C00000000004000000000000000100000001E3 +:1047D00000010000000000000000000080018000D7 +:1047E0000000804100C000C180C10004000000043E +:1047F0008000000041000000000000000090200048 +:10480000008400C0000000840010020000000004CA +:104810000000000000000000000000008000000117 +:1048200000000084000200000000000000008290F0 +:104830000000040000904000914000000000008053 +:104840000000000000000000000000000000000068 +:104850000000000000000000000000000000000058 +:1048600000002008A00000002000000000008202DC +:10487000822000888200848884880005000000006F +:10488000000800000011000000000000000000000F +:10489000000000000000000000000811000084007B +:1048A0000004000090000190218901A020840400F0 +:1048B000040004A090400420C10082004080000059 +:1048C000001000C000880000000000000000000090 +:1048D000000000000000000004000800000000903C +:1048E00000000000800000000000800000000900BF +:1048F0000000000109204000092000050000000020 +:1049000000000000000410400088080240004090B1 +:104910000000000040000900000200C0000000107C +:1049200000004100050000000404A02004058220CE +:10493000C0888200C12111C08991040000000020BC +:104940000021000000000000000400040004001129 +:104950000000000000000000002100000000000036 +:10496000200000000000000000000021C04188007D +:10497000000090000002C041000000094003002137 +:104980000000000400210041002100000000020995 +:1049900000000000000800000000020000022000EB +:1049A000020000000000000000000020004000099C +:1049B00000410480400000000000002002020209C3 +:1049C0000091000000000000000000000000000056 +:1049D0000004000000000000000000820000001041 +:1049E0000000800000000000000200000000000045 +:1049F0000000000000000082000000000000000035 +:104A000000000000009000400004200000000000B2 +:104A10002000000000000000400000000000000135 +:104A20000400001000004100000000000000000031 +:104A300040001000802000900000022008010200C9 +:104A400000000020408284840040088800000000AC +:104A50000000000000000000000000000000000056 +:104A60000000000000000000020100000000010141 +:104A70000000000010C0A0030003820040A10090CD +:104A800000200440000002C040020104A010000009 +:104A90000000000000000000000000000000000115 +:104AA000000100010000050900A100A1C0051001DE +:104AB000902010401082081001900010909000C0CB +:104AC000009000840000840000000080800000004E +:104AD00000000000000000000000000000000000D6 +:104AE000000000000000000000090010000200406B +:104AF000400800040009808011210005800980C160 +:104B0000008900098010000083800000030000007D +:104B10000000000000000000000000000000000095 +:104B200000080008000500108220100200400088E4 +:104B30008011802000400080918011800080808062 +:104B400003800080000000008000000980C0000099 +:104B50000000000000000000000000000000000055 +:104B600000000000000000004100200009040000D7 +:104B70000800210005001109C08002008010850096 +:104B80001180050911091010000080008003808049 +:104B90008000000000000000000000000000000095 +:104BA00000000000000000008000808000A0804025 +:104BB000008441002020401180008000809100C0CE +:104BC00080820080000300908008080004108209A1 +:104BD00084820000000000000000000000000000CF +:104BE0000084000000000000000000200000000120 +:104BF000000001C00100010000044090A000040179 +:104C000090A00002000001890101000002000200E2 +:104C100004409000000000000000000000000000C0 +:104C200000000000009000000000C090084084C018 +:104C3000408208C19008200000019000080890C13F +:104C4000844190C1884000000040C004C108008237 +:104C50008488C08400000000000000000000000004 +:104C60001000000000000000000000000001000132 +:104C7000000000000000000183000000C00201A14C +:104C800000218340A0402004902002020001000285 +:104C900088A0009003400000000000000000000019 +:104CA000000000000000000000000000000041C003 +:104CB0000005C004058510A000208240A00190914D +:104CC0000082C090080901000040908400C041802B +:104CD00000000000000000000000000000000900CB +:104CE00000000000000000000000000000000010B4 +:104CF000044009090002000200102004000980A0FD +:104D000020A0102089840080108080008080000115 +:104D1000008000800080090000000000000000000A +:104D20000000000000000000000021001100000051 +:104D300041110908898002C100200320414000116F +:104D400080910089808083C14100008080000080C4 +:104D50000000000280008000000000000000000051 +:104D60000020002100000000000000000000000002 +:104D70000400080009000202040002001000020002 +:104D80004008211010801004A190910082000303BC +:104D90000001801080800080000000000000000002 +:104DA00000000000000000000000211010000000C2 +:104DB00008001021C08041040900A0114010030028 +:104DC0000303C111908909808000C1028502A000FF +:104DD0000000020088C0040404000000000000007D +:104DE00000000000000000000000000000000000C3 +:104DF000000001880100000000000088010001009F +:104E0000010001A1002001840100C102210009006C +:104E10000000000190002082040240000000000019 +:104E20000000000000000000000000000100000081 +:104E300000A0010041018310A005400090084041FE +:104E400020901001090120208890080091010201A2 +:104E50000384C000000000000700480000000000BC +:104E6000000000000000000007000000000000003B +:104E700000000000500000E000000000840000E09E +:104E800000000000484200E007004200500A00E035 +:104E9000070000000000000A00E00700000000001A +:104EA0000000000000000000000000000000000002 +:104EB00000000000000000000000000048428421C3 +:104EC00000E00700000000110000070048420081D8 +:104ED0000000070048000000000000000000000083 +:104EE00000000000000000000000000000000000C2 +:104EF00000000000000000000000000000000000B2 +:104F000000000000000000000000F0F0F0F00000E1 +:104F100000006F6C606C0000BD8DBD8DF0F0F0F096 +:104F20000000000000000000000000000000000081 +:104F30000000000000000000000000002010408081 +:104F4000F03CF03C3CF63CF6DF00FF00DF00FF00E9 +:104F5000DFFF000000F00000000000000000000083 +:104F60000000000000000000000000000000000041 +:104F70000000000000000000000000000000000031 +:104F80000000000000000000000000003C66006619 +:104F9000F0006060606C606C0000FFCF3C0CE724A8 +:104FA000C30000000000000000000000000000003E +:104FB00000000000000000000000000000010408E4 +:104FC0000201F0FFF0003C063C06FF00FF00FF007E +:104FD000FF00FFFF000000F000000210200000882A +:104FE000108400000000000000000000000000002D :104FF00000000000000000000000000000000000B1 :1050000000000000000000000000000000000000A0 :105010000000000000000000000000000000000090 :105020000000000000000000000000000000000080 :105030000000000000000000000000000000000070 :105040000000000000000000000000000000000060 -:1050500000000000000000000000000070F0F0F010 -:1050600008EF08EF00000000383C3E3C0F0F3CFF0B -:10507000D000B0000000000099B99989F000FF0F3E -:105080003CFF3CFF3C3CFFFF000000000000000034 -:10509000000000007E004E00B199B19900000000B0 -:1050A00000003CB100B10000000000000000000062 -:1050B0000000F838C8089B98BF80FF30CF0009096E -:1050C000F3039F90030300000000FFFFFFFF1800A1 -:1050D00018000099009900000000FCFCFCFC30F076 -:1050E000B0F008EF08EF00000000080CFEFC0F0F06 -:1050F0003C00FF2FFF4F00000000DBFB180800F012 -:105100000FFF00C300C33C3CFFFF00000000000095 -:10511000000000000000FF81FFB1F0F0999900004D -:1051200000000000FFB1C3B1000000000BFB02F261 -:1051300000000000FB3BCB0BBF80BF80FF996600E7 -:10514000F9F9F3039F90F3F3000000001E1E1E1EEA -:10515000F000FF009191010100000000F0F0FFFF5E -:1051600000610006000D000005610A0F050D00A09A -:1051700005000A08050000A000610006000D0000FF -:105180000061000E000D000085614A09050100A0C4 -:1051900000610007000D000005610A0F050D00A069 -:1051A000000000610007000D000000610007000D15 -:1051B000000005610A0F050D00A005610A0F050D2D -:1051C00000A085610A0F051D00A00061000F000D01 -:1051D000000005610A0F050D00A005610A0F050D0D -:1051E00000A100000000008000000000000000009E +:105050000000000000000000000000000000000050 +:105060000000000000000000000000000000000040 +:105070000000000000000000000000000000000030 +:105080000000000000000000000000000F0006000B +:105090000F2F9FBF0000FFFF0000000000000C006A +:1050A00006000C66FC660000000000000000000026 +:1050B00000000000000000000000000000000102ED +:1050C000080400A0000536F636F66E6EFEFE00FF00 +:1050D00000FB0000FFFB000000F0000000000000EB +:1050E00000000000000000000000000000000000C0 +:1050F00000000000000000000000000000000000B0 +:10510000000000000000000000000000000000009F +:105110000600002090B004F404F400000000000039 +:105120000C0006000066F0660000000000000000B1 +:105130000000000000000000000000000000FFFF71 +:1051400080401020A0000500360636060808989812 +:1051500000FF00FF0000FFFF000000F000003C3CEB +:10516000000000000000000000000000000000003F +:1051700005000008050000A000000000000000007D +:105180000061000080010000006100028001000059 +:105190000061502280010000A06100248005000011 +:1051A000000000615027000D00000000000000001A +:1051B0000000000000000000000000610006000D7B +:1051C000120600610006000D080000610020800149 +:1051D00000000361033E0C0D10C00363033E0C0D81 +:1051E000C2C000000000000000000000000000003D :1051F00000000000000000000000000000000000AF -:105200000000000000000000000014BEBE14F5F510 -:10521000A0A000000000000000000000000000004E -:105220000000000000000000000000007F575F5FEA -:105230008ABA80BF000000A0FF00FF00000000004D -:105240000000000055D755140000000050F0303029 -:10525000D300100000000000080B0C0F000000003D +:1052000000004F41FFFF3FBF0FAFEBFFFFFFF0FC80 +:10521000003C00005D51FFFCFFF01F1F101000005C +:10522000000000000000000000000000000000007E +:105230000000000000000000000000003C143C3CA6 +:105240000000000000005F4FFCFCC0C00F550F3C89 +:10525000A03CAF3C5F5F5F0A00003030F505FF0FF8 :10526000000000000000000000000000000000003E :10527000000000000000000000000000000000002E -:10528000000000000000000000000000BE14BE147A -:10529000F5F5A0A0000000000000000000000000E4 -:1052A000000000000000000000000000000040546A -:1052B0005050AAAA00FF000000A0E800FF00000074 -:1052C0000000000000005FD7501400000000FAF05A -:1052D000F3F3FF2CFFEF00000000000304070000C1 -:1052E00000000000000000000800000000000000B6 -:1052F0001000000000000000000000000000555FEA -:10530000D7D7000000000400040000000000EF1FD9 -:10531000E010B271B2710000000000000000000057 -:105320000000000000000000280000000000000055 -:1053300030000000AFC305C300C3AAF0383BF8FB40 -:10534000000000000000000000000000000000005D -:105350000FCF0F0CB23CB20000000000FAFA0CFCB8 -:10536000FF10EF000000000000000000000000003F +:10528000000000004F41FFFF3FBF0FAFE0F0F0F024 +:10529000FFFFFFFF00005D51FF3CFF00FF0FF0002C +:1052A00000000000000000000000000000000000FE +:1052B00000000000000000000000000000003C149E +:1052C0003C3C0000000000000000C0C0C0C00F5502 +:1052D0000F3CA03CAF3C0A0A5F0A30300000F505E5 +:1052E000F0000000000000000000000000000000CE +:1052F00000000000000000000000000000000000AE +:10530000000000000000FFABFFABD3FFD3FFCFC313 +:105310000F003F3F3FFFFF1FFF1FFFFFF4F4000C94 +:105320000005303F3A3A0000000000000000000095 +:10533000000000000000000000000000000000006D +:105340000000000000000000000080A0000000003D +:10535000F5F5F505FCAAFCAA00000000000000001D +:10536000000000000000000000000000000000003D :10537000000000000000000000000000000000002D -:105380005550141400000000000000000000000050 -:10539000FF0FF000B271B2710000000000000000C9 -:1053A00000000000000000000000000000000000FD -:1053B000000000000000AFC305C3FFC3AAF0080B44 -:1053C000C8CB00000000000000000000000000004A -:1053D00000005FCF0A0CB2FFB2C3000000000A0A4F -:1053E0000CFCFFD32C000000000004848421210069 -:1053F000850084002010C000000088008800200084 -:10540000200088200420211000000400200010004B -:10541000208020001000C00210801000C00020007A -:1054200084800400880020001000000388008400AD -:105430002000040020001000000000000880880008 -:1054400020002000200088000000880021000000CB -:10545000840085008800200000004000200020001B -:10546000211021008400840084002000A12110026A -:105470008402040010000000000000002000000072 -:1054800004000000200110A1042105004040000498 -:105490002000000241000000000000102000050074 -:1054A00004002010000000000000000000000000C8 -:1054B0000400000200000000000240000090841080 -:1054C0004000040004A005000000200000000400CB -:1054D00000000000040000000400000004000400BC -:1054E00080000401840004000000000000000000AF -:1054F000000000000040000000000000001001005B -:105500000100010001000100010008008590004039 -:1055100000000000000000800080028008C0000041 -:10552000000000000902000000400000021000001E -:1055300000000000000000000040004000000000EB -:1055400008C0000001000000000000400000001042 -:105550000000018001800080000000000000400089 -:105560000180000005800000000000000000000035 -:105570002000000000100010000800080402008451 -:105580002008200020082000040804888208042045 -:10559000000804000088000000200020002089206E -:1055A000400820880008C001408200000408400034 -:1055B00000000508000000000900000000000000D5 -:1055C0000000C010000004080000040000004008B3 -:1055D00040000084040404040004000800000000EB -:1055E000800020100000A0400000400040000008A3 -:1055F00000008800200020082000820082000000B7 -:105600000000000000080000A000000000000400EE -:1056100000400000A0004000040004000000000062 -:105620000000000000000000400008210000000011 -:10563000000000000000000800080008000500004D -:105640000000000000C10000000000000000000099 -:105650000000000000040000004101000000000004 -:10566000000000410008000000000000000082006F -:1056700000000000090080908082C1000000030447 -:1056800000000300000000002100000000000000F6 -:105690008000400000000000A10082000000000027 -:1056A00005000500008800040020800000000000C4 -:1056B00003004000000041A00800000008000000B6 -:1056C00041000884080003204100000021000088F8 -:1056D00000000000080041010000410040000800F7 -:1056E0002100030000001100080003A003000000D7 -:1056F0002100410009002000040000000800820091 -:105700008400080008000000C00000008200820041 -:10571000820200002000080082000000011000004A -:105720000800080000008200C00008000400080013 -:105730000800900000000000080082000400000043 -:105740008200080000001000900009000000040022 -:10575000A0000000A00008004000A000C000400021 -:105760000400C000A000A00010000400A000080079 -:1057700082000800900010008000800200000000FD -:1057800000000000000805081000000800000000EC -:1057900000000000090000000000000000000400FC -:1057A00000000000000000000000110021000000C7 -:1057B0004000000000000000000000000000100099 -:1057C00000000000000041000000080804881000EC -:1057D00080000000000000000000000208C000007F -:1057E00003002100210000004100030080001000A0 -:1057F00009000000000000000084000800200100F3 -:10580000000008410005A00000000000000010009A -:10581000C000000300008200080000000200000039 -:1058200010108200000004000000000010000000C2 -:1058300000000000900000000000000000000000D8 -:105840009000100000000000820020000000010015 -:1058500000000080000008000000080083000080B5 -:105860000900000000000000000000000400080023 -:1058700000000400C000080082009004090000013C -:105880000408009000000300030002000000210053 -:10589000009000000900000011000000008480005A -:1058A0000000000010042004004000000000000080 -:1058B0000000000000000088002000000000080038 -:1058C000000000C000000008030000C02084038422 -:1058D000040009A0002000042100000008002000AE -:1058E0000004400021000004100000C00390A1C08B -:1058F00021A0000080000000000000000300000064 -:105900000004080200200000820090004000000017 -:1059100090020000000000000800C000000000002D -:1059200000000041108000028200C0000000000062 -:105930000021002100210000000000000000000004 -:105940001000000000000000000020000000200007 -:1059500004218800902000090041400088000400D4 -:105960001000400010000800900088094005400029 -:1059700000008200000200000841820900000000CF -:105980000000000100010001000000900000040080 -:105990000000000800000000008800004100000036 -:1059A00000000000000010040000000000002100C2 -:1059B0000000000000C00000000000000000000027 -:1059C0000000000000000000000021002000050091 -:1059D000000080000000000120000000000205001F -:1059E000000000000000000000C0000000000000F7 -:1059F00000000000000000000000000000000000A7 +:105380000000000000000000ABABABABD3D3D3D325 +:10539000FFFFFFFF0F0F0FFFFF14FF14FFFF141499 +:1053A000000C0005303F303000000000000000001D +:1053B00000000000000000000000000000000000ED +:1053C000000000000080000000000000A0A000001D +:1053D000000005F505050CAA0CAA0000000000005D +:1053E00000000000000000000000A01120000011DB +:1053F0004004C00000000008000000000000200081 +:10540000A0000000200020002000C0802000C0007C +:10541000C02020000000000000000000000000008C +:1054200000000000200020000000000320002000F9 +:105430002000201120000204A0008800A10000002C +:1054400000000000C100210040404080200000001A +:1054500020002000020088114000A0800800880081 +:10546000880000028800200020008808000000005A +:10547000000000000090000021000000000000205B +:1054800000200000000000000000000000100000EC +:1054900000000009000000000040000000000000C3 +:1054A00000000002000400000004000800000040AA +:1054B0000040004010020000800000900000020048 +:1054C000000040040002020202009000A10240021B +:1054D0000000000000008000000200400004000204 +:1054E000000400081000000000902082000000006E +:1054F00000000000000300000000000000000000A9 +:10550000000000000040000000000000000000104B +:1055100000800000012000000000000000050040A5 +:105520000040000000000000000000000004000037 +:10553000000000000000000000000000000000006B +:105540000000000000200000000000000002000039 +:105550000000020000000200020000000200000043 +:1055600000090200820002000200840000008400A2 +:105570000008000000000000000000000000000023 +:10558000000000000000000000840000000000088F +:105590000089001000C004010000008200880000A3 +:1055A00000080000000000000000000000000004EF +:1055B0000000400005840084000400080088008486 +:1055C0000000001000000008000000004000008300 +:1055D0000008009000000008000000040000000027 +:1055E00000000084000000880000000000000000AF +:1055F0004002000000000000000000000000000069 +:105600000000000800000000000000000000000092 +:1056100000000000C00010000000000800000000B2 +:10562000000000000000C0080000000000000000B2 +:105630000010000010000000C0008400100088214D +:10564000880090008800912184210100000440110D +:10565000210900000400A0119009200000000000B2 +:105660009108C01000008800A000000000090000A0 +:105670000000000300A000840000000000101100E2 +:105680000000000040000000000000004100410058 +:10569000008400000000090040000000030000003A +:1056A000210000000000030008000000000000A02E +:1056B00000C000000000000800A000A0000000A042 +:1056C000000000A011000008028840000200030052 +:1056D000210002840000410421900088A1004008BC +:1056E00000000888000008020088008200024000D4 +:1056F000028400000800000000000000000000001C +:10570000000000000000000000000800000084000D +:10571000000010000000000008040000004100002C +:1057200000000000A0000100000000000040000098 +:1057300000000000080000000000000088000000D9 +:105740000200000000000200020000000100C00092 +:1057500000001000000011040000C000A040000084 +:105760000800000001000800C011880000000004CB +:105770000000C004000490000000000800000000C9 +:105780000090000000000000000000000000000089 +:105790000000000000000000008480000084000081 +:1057A00000000000000000000200000000000000F7 +:1057B00000C00000008400000000200000C000C005 +:1057C00000008004000200048200000000002004A9 +:1057D0000000000000002000400000000000000069 +:1057E000000000000000080080000084200011205C +:1057F0000020110000000000000000000000000078 +:105800000000000000000000000000004000400018 +:105810000000000000004000000000000000000048 +:1058200000000010000000418400000000000000A3 +:1058300000000041000000008200000000000000A5 +:105840000000000040000000000000000000000018 +:10585000020000000000C0001004820002030000EB +:10586000004040800000A000000008080000000088 +:10587000C0040000900040110000820000C0000041 +:105880000008001000000000000000000000000000 +:105890000000000040000000000000000810100898 +:1058A000000810001000000803080000000003209A +:1058B0001000080005000000210821000000000081 +:1058C00000000008000000880088000011000000AF +:1058D000000089001100000400901189200083C09D +:1058E000009000080040000008002184200000848F +:1058F00000100000118440100000000004000000AF +:10590000000000000000000000080000000000008F +:105910000000000000000000000000000000000087 +:105920000000822108000041000400100021000056 +:105930000000080008000000000000000000000057 +:105940000000000000410000000000000000000016 +:1059500000002000000040000000040008000200D9 +:10596000000808000204820000000009080000008E +:105970000000000000200000081100000000840268 +:1059800000000000000000000000000002080020ED +:105990000000000000000000000000900000000077 +:1059A000000000C000000000000000000000000037 +:1059B000000000820000009000C00000008400C0D1 +:1059C00000000004209000880990000011000004ED +:1059D00000000000000000000000000000000000C7 +:1059E000840420400000A0000000000000C000006F +:1059F000000000C0000009000000000000000208D4 :105A00000000000000000000000000000000000096 :105A10000000000000000000000000000000000086 -:105A20000000000000000200000000000000000074 +:105A2000000000A000000010900000000000000036 :105A30000000000000000000000000000000000066 -:105A40000000000000000000000000000000000056 -:105A50000000000000000000000000000000000046 -:105A600000000000000000009000000000000000A6 -:105A7000C0000000A010A0080020A004000000004A -:105A80000000000000000000110000000000000005 -:105A900000000000000000001100000000000000F5 -:105AA000000000000000030085000000000000006E +:105A400000000000000000000000000000000088CE +:105A50000000000000C000880000000000C00188B5 +:105A60001000000000C0008802000000900000004C +:105A70000000020000000000000000000000000024 +:105A80000000000000000000000000000000000016 +:105A90000000000000000000000000000000000006 +:105AA000000000000980000000808000000000006D :105AB00000000000000000000000000000000000E6 :105AC00000000000000000000000000000000000D6 -:105AD00000000000000000000000000000000000C6 -:105AE0000000000000000000090085000000000028 -:105AF0000000000000008000008005000080000021 -:105B0000000000000300204002800220028000000C -:105B10000000000000000002000000020000000081 -:105B2000008000000000080000001120400000007C -:105B30000080000000800000000000000000000362 +:105AD00000000000000000800000000000000080C6 +:105AE000030080000000008000008000000008002B +:105AF00000000000000000000000000000000000A6 +:105B00000000000000000000000000000000000095 +:105B10000000000000000000000000000000000085 +:105B20000000000000000000800380800080000072 +:105B30000000000000000000000000000000000065 :105B40000000000000000000000000000000000055 -:105B500000000000000000000000008000000000C5 -:105B6000000000000000000002020200090404001E -:105B7000000000000000000080208000800800007D -:105B8000000000000000000001000102010001040B -:105B90000000000000000000000100000001000003 -:105BA0000000000200000008010040000100009019 -:105BB0004000A00800000008000040008200000033 +:105B50000000000000008000000000000040800005 +:105B600009802108100582850000000800008000DF +:105B70008000000080848000000000000000000021 +:105B80000000000000000000000000000000000015 +:105B90000000000000000000000000000000000005 +:105BA0000000000000000000C0000801A0400490B8 +:105BB00000000000000000000000000000000000E5 :105BC00000000000000000000000000000000000D5 -:105BD0000000000000000000000000000004004081 -:105BE0000020000000000000000000010140000053 -:105BF00001200000000000000000080008408200B2 -:105C00004084000000000000000000002000200090 -:105C10000000000000000000000000008200000002 -:105C2000010000400082C0080040000000000401A4 -:105C300000010000000008000000000000008200D9 -:105C40000000000000000020000000000000000034 -:105C50004000000000000000000000000100000003 -:105C600040000000000000000000000001010400EE -:105C7000080100010000000000000000100884A0DE -:105C8000048282A0000000000000000040008000AC -:105C900000000500000000000000000000000000FF -:105CA00000000200100000800080080000040005D1 -:105CB0008008080502000000800000000041000587 -:105CC000000300040000000000800000000041000C -:105CD0000000000000000000000000000000410083 -:105CE000000080000000000000000000000008101C -:105CF0008003002004400000000800030000C000F2 -:105D000000800000208000000000000000000083F0 -:105D10000002000000110000000000000000000070 -:105D2000000000000000000000050000000000006E -:105D300000410021000300040021000000000000D9 -:105D400000000080000000000000000000000000D3 +:105BD0000000000000000000C00000000000000005 +:105BE000C000001001000001C0880000000000009B +:105BF000C000A0009000400204000000000000006F +:105C00000000000000000000000000000000000094 +:105C10000000000000000000000000000000000084 +:105C20000000000000000000000000100090008252 +:105C300010900000000000000000000000000000C4 +:105C4000000000080000000000000000000000004C +:105C50000000000000000000008800C000000000FC +:105C6000008800C000010000008900C000010000A1 +:105C7000008900C100100088008200C00000000000 +:105C80000000000000000000000000000000000014 +:105C90000000000000000000000000000000000004 +:105CA00000000000000000000000000000000000F4 +:105CB00000808400000000000000000000000000E0 +:105CC00000000000000000000000000000000000D4 +:105CD0000000000000000000000000000080000044 +:105CE000000000000080004000100005118200202C +:105CF0000005000510910000008000802080000059 +:105D00000000000000000000000000000000000093 +:105D10000000000000000000000000000000000083 +:105D20000000000000000000000000000000004033 +:105D300080048000800000000000000000000000DF +:105D40000000000000000000000000000000000053 :105D50000000000000000000000000000000000043 -:105D6000002000040000000000000000000000000F -:105D700000200021000000110000000000000000D1 -:105D8000001100040080000000000000004000201E -:105D9000008400000000000100000000000000007E +:105D60008000000000000000C100041103000402D4 +:105D7000800000000000000000000008000080001B +:105D800000000000000000000000000000000040D3 +:105D90000000000000000000000000000000000003 :105DA00000000000000000000000000000000000F3 -:105DB00000000000000100000001009000820000CF -:105DC00000000020000200000000000000000000B1 -:105DD00000000000000000000000000000000000C3 -:105DE000000000011000C0004000000000000000A2 -:105DF000000000C1000000000001000000000000E1 -:105E0000000082012040004000000000000000006F -:105E10000000000000E0070000000000000000009B -:105E20000000000000E0000000000000000007008B -:105E30000000500A00E0070000000000000007001A +:105DB0008401828408100800000000000000000038 +:105DC00000000000000000000000000000000000D3 +:105DD0000000000000000000000000000090000033 +:105DE0000000C000209000000000C1C0019101002F +:105DF0000000C0000090000000000200A0098840E0 +:105E00001000000000000000000000000000000082 +:105E10000000000000000000000000000000000082 +:105E20000000000000000000000000000000000072 +:105E300000000081000007000000000000000000DA :105E40000000000000000000000000000000000052 :105E50000000000000000000000000000000000042 -:105E600000000000000000000700600000000000CB -:105E700000000000000000E007000000000000003B -:105E800000000000000000E007000000000000002B +:105E600000000000500000E000000000500000E0D2 +:105E700000000000480000E000000000001100E009 +:105E8000070000000000000000000000000000000B :105E90000000000000000000000000000000000002 :105EA00000000000000000000000000000000000F2 -:105EB000C0F0FCF000000000000000000000000046 +:105EB00000000000000000000F03FFC3000000000E :105EC00000000000000000000000000000000000D2 :105ED00000000000000000000000000000000000C2 -:105EE00000000000000004EF04EF000000000000CC -:105EF00000000000000000000000000000000000A2 -:105F00000000000000000000FF007000F200000030 +:105EE0000000FFFFFF00FFFFFF00FFFFFF00FFFFBD +:105EF0000000FFFFFF00FFFF0000FFFFFF000000AA +:105F0000000400380505000000000000000000004B :105F10000000000000000000000000000000000081 :105F20000000000000000000000000000000000071 -:105F30000000C0F0FCF000000000000000000000C5 +:105F3000000000000000010000000000F0C00000B0 :105F40000000000000000000000000000000000051 :105F50000000000000000000000000000000000041 -:105F6000000000000000000004EF04EF000000004B -:105F70000000000000000000000000000000000021 -:105F800000000000000000000000FF000000FF0013 +:105F600000000000FFFFFF00FFFFFF00FFFFFF003A +:105F7000FFFFFFFFFFFFFF00FFFFFFFFFFFFFF002F +:105F80000000000400000505000000000000000003 :105F900000000000C0000800000000000000000039 :105FA00000000000000000000000000000000000F1 -:105FB00000000000000000000000000000000F0FC3 -:105FC000000000007575757500000000550F550F35 +:105FB0000000000000000000A0A00000AAAAAA089B +:105FC00000000000000000000000000000000000D1 :105FD00000000000000000000000000000000000C1 -:105FE00000000000000000000000000000000000B1 -:105FF00000000000000000000000000000000000A1 -:1060000000000000000000000000FFFF5C5FFDFDDD -:10601000FF3C000000000000000000000000000045 +:105FE000000000FF00FFAAAAFFFF00FFFFFFAAAA10 +:105FF000FFFF00FFFFFFAAAAFFFF00FFFFFF5555AD +:106000000000000000000000000000000000000090 +:106010000000000000000000000000000000000080 :106020000000000000000000000000000000000070 -:106030000000000000000000000000000000000060 -:106040000F0F000000004545454500000000555574 -:106050005555000000000000000000000000000096 -:106060000000000000000000000000000000000030 -:106070000000000000000000000000000000000020 -:10608000000000000000000000000000A3A00000CD -:106090000808003C000000000000000005610A0F35 -:1060A000050D00A0000000000000000000610007D6 -:1060B000000D000005000A08050000A00061002F87 -:1060C000800D00A805000A08050000A00061000678 -:1060D000000D0000000000000000000000000000B3 -:1060E00000000000000000000000000000000500AB -:1060F0000A08050000A00000000000000000056183 -:106100000A0F050D00A000610006000D000085616A -:106110000A0F050D00A0000000001A13218C0000DA +:1060300000000000000000000000A0A00000AA086E +:10604000AA0800000000000000000000000000009E +:106050000000000000000000000000000000000040 +:106060000000000000FF00FFAAAAFFFF00FFFFFFE3 +:10607000AAAAFFFF00FFFFFFAAAAFFFF00FFFFFF82 +:10608000555500000000000000000008000000005E +:106090000000000000000000000000000000000000 +:1060A00000000000000000000000000000000000F0 +:1060B00000000000000000000000000000000020C0 +:1060C00000000000000000000000000000000000D0 +:1060D00000100000000000000000000000000000B0 +:1060E000000000000000000080000020920240E359 +:1060F0008006802D920240E38004802D920240E3CE +:10610000800680298A0000610026004D0001000001 +:10611000000000000000000000001A13618400006D :10612000000000000000000000000000000000006F :10613000000000000000000000000000000000005F :10614000000000000000000000000000000000004F -:106150000000F0F3F030000000000000000000003C +:10615000000000000000000000000000000000003F :10616000000000000000000000000000000000002F -:10617000000000000000000000000000000000001F -:106180000000000020A2EFAE000000000AFA0AFAA8 +:1061700000000000000000003F3F7D41282BC3C30A +:106180000000000028E82BEB0000000000000000E9 :1061900000000000000000000000000000000000FF :1061A00000000000000000000000000000000000EF :1061B00000000000000000000000000000000000DF -:1061C00000000000000001000000000000000000CE -:1061D00000000000F0F3F0300000000000000000BC +:1061C00000000000000000000000000000000000CF +:1061D00000000000000000000000000000000000BF :1061E00000000000000000000000000000000000AF -:1061F000000000000000000000000000000000009F -:1062000000000000000028AAEBAA000000000AFA23 -:106210000AFA00000000000000000000000000007A -:10622000000000000000AABAFFBF0000000000004C +:1061F0000000000000000000000003037D41282B88 +:1062000000000000000028E82BEB00000000000068 +:10621000000000000000000000000000000000007E +:10622000000000000000000000000000000000006E :10623000000000000000000000000000000000005E -:10624000000000000000000041000000000000000D +:10624000000000000000000000000000000000004E :10625000000000000000000000000000000000003E :10626000000000000000000000000000000000002E :10627000000000000000000000000000000000001E -:106280000000000000000000F3050305000000000E +:106280000000555500000000000000000000000064 :1062900000000000000000000000000000000000FE -:1062A0000000000000000000AA8A0080000000003A +:1062A00000000000000000000000000000000000EE :1062B00000000000000000000000000000000000DE -:1062C000000000000000000000004100000000008D +:1062C00000000000000000000000000000000000CE :1062D00000000000000000000000000000000000BE :1062E00000000000000000000000000000000000AE :1062F000000000000000000000000000000000009E -:1063000000000000000000000000F3F503F50000AD +:106300000000B4A0B4A000000000000000000000E5 :10631000000000000000000000000000000000007D :10632000000000000000000000000000000000006D :10633000000000000000000000000000000000005D @@ -120406,688 +120406,688 @@ :10637000000000000000000000000000000000001D :10638000000000000000000000000000000000000D :1063900000000000000000000000000000000000FD -:1063A00000000000000000008480000088008800D9 -:1063B00040004000400040802000218020000080FC -:1063C0008404200000002040C0001000820004006F -:1063D00020002000200020002000200200004000BB -:1063E0000400040004000400000304000400200072 -:1063F0000480890004004100040020002000840083 -:106400002000200020002000880020002000400004 -:106410002000200020000000880088008800000084 -:10642000880088008800840004000004090000003F -:1064300000000000040000200440000004100000E0 -:106440000010000184400002840304400000049016 -:10645000000009000000090000000000000000002A -:10646000000000008000C000A1000000C000840007 -:1064700000008004040080000490840000000000FC -:106480000000000000000040000004004000040084 -:1064900004000000000005004100050005000000A8 -:1064A0000000000004000000402000000100030084 -:1064B00089000000000002000000000082000000CF -:1064C000010000000000C0800040004020002000CB -:1064D0002041010001008200200020002000204017 -:1064E0000104000000002000010020100000000056 -:1064F0000000030000000100200020002000000038 -:106500000000820000109100050005000540000019 -:1065100000002100014000000000000000002100F8 -:106520002000000400040000000000000000200023 -:1065300020102088008820080000090009080000B9 -:10654000090004002000200000040000000080007A -:106550008900850020002008090080008004800058 -:1065600080002001004040008000200080000000EA -:106570000900090004000000208880008000C0009D -:1065800000080000090040000400A000A000A000D6 -:10659000000040082000200040000000090020000A -:1065A00084088500000105010000000000000500CE -:1065B000880000002000090000000000000088059D -:1065C0000000000084008400020000008800000435 -:1065D0000121000000000000000000000000000099 -:1065E00004080000000000008800000000004000D7 -:1065F0000000000000008500000000000000000016 -:106600000000000000000100A000000000040000E5 -:1066100010000000000082000000000000000000E8 -:10662000000000000000000000000000000000006A -:1066300000000000100090000400000000000000B6 -:106640000000000000000000000000000000410009 -:1066500000010404000041000800000021001000B7 -:106660000000000400000000000000000000000026 -:1066700000000000004000000200000000000000D8 -:1066800000000500000000000282000000000088F9 -:1066900000002100000000000000000021000000B8 -:1066A00010000500000000000000000811000000BC -:1066B000090000008400048040000900A0002000C0 -:1066C0008800080083008400840000002080088087 -:1066D0002000080008000100080008001000000465 -:1066E000A0001000040004040000000404040000E2 -:1066F000400000000000A00010001000080004008E -:10670000C000040008008200820090000000100019 -:106710000400880008002000A1002000C000040040 -:106720000400000000000800040004000900C0008C -:10673000080008000000000088040000200000009D -:1067400041002100000004004100090000008340D6 -:106750000040800000000040020010000000200007 -:10676000000120000300000000000800000080017C -:1067700008000400080000004000080800000500B0 -:1067800008000800080000001000000000000000E1 -:106790004000000000000000800020000000000019 -:1067A00000000000040000000000A10080000400C0 -:1067B000400041002000200000000000040004050B -:1067C00082030000C000A000040004008440C00850 -:1067D0000000000000808200822000400040100085 -:1067E00000002000A04000008200000000008200A5 -:1067F00000000200880400000000020002000800FF -:10680000000000040000000000040200000000007E -:1068100002002020000400004020000000000000D2 -:10682000000000000000A00000000000080082003E -:106830008200C00884008800A000000009008000D9 -:1068400088000000000000000800800080000500B3 -:10685000000000840000000411000000000003019B -:10686000008400009100000100000000008800008A -:106870000000000080900005000000008000800003 -:106880000004000000010000000000018000210061 -:10689000000080008001000400000001000000886A -:1068A00000002100001000000000000000000000B7 -:1068B00000000200000000002100000804000000A9 -:1068C0000800400400002041000084210000000076 -:1068D000C0200088000090000003000000110400A8 -:1068E00020000000000000049000000200000000F2 -:1068F000820000800804400420000000000008001E -:10690000A0000000020001001084008421000000AB -:10691000020000008200000040200020040004115A -:10692000000008040000820082000800100000003F -:1069300000000800080008002000C00008008000D7 -:1069400000820000000100000000000000000000C4 -:106950000000000100200000000000000000000016 -:106960000000000000000000000020000000000007 -:1069700000000000020420000000030200000000EC -:1069800000000000000080000200414100410200C0 -:106990000400800000000000000000010001000071 -:1069A00000000000000000000000000000000000E7 -:1069B00000000000000000000000000000000000D7 -:1069C00000008800000000000090000200A000907D -:1069D0001002000000889040004000020004000007 -:1069E00041C000000100000141C0000001000000A2 -:1069F00041C000010001000011C0000001010000C1 -:106A0000000000C000080000000000C000010000FD -:106A1000000000C00008000000000000000000C0EE -:106A20000200000000000100000000000000000063 -:106A30000000000000000000000000000000000056 -:106A400000000000000011000000000000800000B5 -:106A50000000800000000080800000000080408076 -:106A60000000919100092000001091910000200089 -:106A700000039189000305090000918000000209CC -:106A8000000300000080008005000000038021203A -:106A90004020000000800080000000000000000096 -:106AA0000900800000000000040000000000000059 -:106AB00000000000000000001100000000000000C5 -:106AC00000000000000200000040008000000041C3 -:106AD0000000000000000040800000800008000866 -:106AE00000C08080090000210011900009000021F1 -:106AF000031180000900002100119000090000210D -:106B000005409000000000008000000080000000B0 -:106B100041000420830000008000000080008040CD -:106B2000802000400000004000000008000000003D -:106B300000000000000000080000000800800000C5 -:106B4000000000000000000100880000008200003A -:106B500000850020000000000088A0201004000034 -:106B600020410085C002018800000001C100010031 -:106B700000000001C000010000000001C190010000 -:106B800000200000C1400000000010080000C00804 -:106B900000A000200000C0A0000010000000C00005 -:106BA00008000401000000000000000000000000D8 -:106BB00000000000000000000001000800010004C7 -:106BC00000000000000000000000020008000000BB -:106BD0000000000000000400C090000408200082B3 -:106BE000882008000000820021019000840001C17B -:106BF00000000001050103C100008800000083C1FE -:106C000020009000400001C00000000000002008AB -:106C100000C088000088820000C00000000000085A -:106C200000C0400020048282C0000000400000003C -:106C3000010000000000000000000000200004002F -:106C400000000000000000000000200080000000A4 -:106C500040000000000000008000C0000080000034 -:106C60000000000000000000A000C108801000002B -:106C700011900000000990109190002180200000E8 -:106C80009190C0008003A020118300000300000049 -:106C90000080208005000200002000A0000000000D -:106CA00000800080800000000000A00000000000C4 -:106CB000000041000000000000000000050080000E -:106CC0008000040000000000000000000000000937 -:106CD000000000000000000000008000000080C0F4 -:106CE000800080008002801180000000800000058C -:106CF0001080092080002010038009038000091102 -:106D000010800940800808021080090000008000FF -:106D100080050000000080002005000005008000C4 -:106D20008000000000000040802000000000000003 -:106D3000000000000000000000000000000000084B -:106D40000040000000000000000000000000000003 -:106D50000000000000000000A000900004002000DF -:106D60000402084002000201200004000000C000EC -:106D7000000001840100C000000101840101C00085 -:106D8000000101840101C000000101840100000034 -:106D9000C000100000000000C00000000088880053 -:106DA000C00010000000000004004000008200004D -:106DB00000000000000000000000000000000000D3 -:106DC00000010000000000000000000000000000C2 -:106DD000000000E00700000000000000000042008A -:106DE0000000000007006000000000E0000000005C -:106DF000842100E007006000840000E00000000043 -:106E0000600000E000000000820000E007000000D9 -:106E10000000000000E007000000600000E0070044 -:106E200000000000000000000000008100E00700FA -:106E30000006000000E00000000600000000000066 -:106E40000000600000E007000000000000000000FB -:106E50000000000000000000000080BC80BC0000BA -:106E60000000068106E7930093F0FFF0F6F63C3C45 -:106E70003C3CFFFF000066660000FFFF0000666606 -:106E80000000FFFF000066660000FFFF000066666E -:106E900000000000FF000000FF0000003C3C00007C -:106EA000F0F00000FF000000FF000000FFFF00FF07 -:106EB000F0FFF0FF000000000000000000000000F4 -:106EC00000000000000000000000000000000000C2 -:106ED00000000000000000000000000083BF83BF2E -:106EE000000000009F819FE7930F93FF0F000606AD -:106EF0003C3C3C3C000000006666000000000000D6 -:106F000066660000000000006666000000000000E9 -:106F1000666600000000FF000000FF0000003C3C2F -:106F20000000F0F00000FF000000FF000000FF0084 -:106F30000000F000F0000000000000000000000071 -:106F40000000000000000000000000000000000041 -:106F50000000000000000000000000000000000031 +:1063A000000000000000000020000000000040008D +:1063B000008000830020002020002000200000003A +:1063C00000000000000040002000820000002000CB +:1063D0008200000082008280200020002000010056 +:1063E0000000400000002000000320002000040006 +:1063F000200020004000200020000000200020009D +:106400000008880020008400200020000000000018 +:106410002000880020002000A080118004802080BF +:106420004184000020002040A00000000000000087 +:1064300000002120002000010001400000000000B9 +:10644000000000000000000000004000000000000C +:10645000000000000000000200100000000000002A +:106460000800000000000000000000000000000024 +:10647000009000004000000000000000400000000C +:106480000000050440000000400021001002400010 +:106490000000008200008000800000029002104096 +:1064A000000220021000000040010002A0000000D5 +:1064B00000000000000000000004040000000000D4 +:1064C00000000010008900000080008000000041F2 +:1064D0000000000300000000001008800000000021 +:1064E000000000000000000000000000000000406C +:1064F0000100010000000040000800000000000052 +:10650000000000000000000000400000000000004B +:106510000800000008000200100502000800834087 +:106520001005104121C09000844082000005000049 +:10653000000800080084000000840084800800C077 +:10654000000000C000C00020000400200020000067 +:106550000008001000000000000000008210000091 +:106560000090000000C000000000000000000000DB +:1065700000004040400800000000000000820000D1 +:10658000000800840000000000000000000000007F +:10659000000000000008001000048010000000004F +:1065A000100880C08200A004000041001000000814 +:1065B0000021004000000005000200050009000263 +:1065C0000010000000000008000200200010001170 +:1065D00000000000000000100005000000030000A3 +:1065E0000000000000000000402100000000010049 +:1065F00000000004000340410800000800080241B8 +:106600000200020000000200000000210000000063 +:106610000000A00000082000A000024102000000CD +:106620000080100000000000010000800041000018 +:1066300004A11000000000000000000000000000A5 +:1066400000A0110000000000000010000001100078 +:1066500008000000000000004000001000000008DA +:106660000000100000820000000000000000000098 +:106670000800000000000000000080000000000092 +:10668000A0008000830000008000000000000000E7 +:10669000000000000000008200020900800080006D +:1066A000000000408090000000A02000104000008A +:1066B000040040400000000000000000001101093B +:1066C00000000004000400000004000000000000BE +:1066D00000000000000000000000000000000000BA +:1066E000000000000400000008000200000000009C +:1066F0000000000000001000000000000000A000EA +:106700000000000000000000000000008400A00065 +:106710000000900000000400081108008202080038 +:10672000080008110800100082C0C0820108C004DF +:10673000840900400800000000000000000009007B +:1067400002840000000400000000000000A000001F +:10675000000000C000000000200000000000000455 +:106760000000000000040200000080008000000023 +:10677000000000000084000000040000000000840D +:106780000000004000002100000000080000400060 +:10679000020020002000000800000004000021008A +:1067A00000080000002010009020000200024001BC +:1067B0000000030000000000004100000000000095 +:1067C0000000000000000002001000000000002196 +:1067D0000000200000000000000000000000000099 +:1067E0000010000000000000000000080021000070 +:1067F00000030005082100050000004100090041D8 +:106800000008012100850000000000000080000059 +:106810000100000000000000000000000000000077 +:1068200000000004000082002000010408008280B3 +:106830000088084189084003820000000000000031 +:106840000000000000200000000000000000000028 +:1068500000000000000000000000090000004000EF +:106860000000000000000000000000000000000028 +:106870000000000000008000000000000000000098 +:106880000000000002002040000200020000204042 +:1068900000020202000020000002000200002000AE +:1068A000000200024000000000048220029000006C +:1068B0000040004000000204000000000003C0008F +:1068C00000000000000000000000001100000008AF +:1068D00000000000000000000000000000000000B8 +:1068E0000008000000000000000000000008200078 +:1068F0000000000000050003000588050000820577 +:1069000000110004040400020010004100110800FE +:10691000000800000000020000000000200000004D +:1069200000000000000000000000000000000188DE +:106930000000000300000021000000000000000033 +:1069400000000000008400A0000000A010A00010C3 +:1069500000000010201000000000000000004100B6 +:1069600000820090001000000000000020000000E5 +:106970000000000004000000000000000000000013 +:10698000000000000000000000A000000000000067 +:1069900000000000000005000090000040400040A2 +:1069A00000000088000211000004000009C000C0BF +:1069B000100909880000000000820000400009A0C2 +:1069C000000000000000000008000088008420880B +:1069D00000000000000000000000000000000000B7 +:1069E00000000000000000000000000000000000A7 +:1069F000101008200082C010C01008C00010C08213 +:106A00000000C010C0880140C08200C0000000002B +:106A1000000000C000000000000000C000000000F6 +:106A2000000000C000000000000000000000100096 +:106A3000009000C100010020000100C00000000023 +:106A400000200000000000000000000000000080A6 +:106A50000000000000000000000000000000000036 +:106A60000000000000000000000000000000000026 +:106A70000000048080800080808000008000008012 +:106A800080800000848000002180808000800000E1 +:106A900000000000008000000000000000800000F6 +:106AA0000000000000800000000000000000000066 +:106AB0008900000000C110030010000800800000E1 +:106AC000000000000000000000000000000080093D +:106AD0008080800000000000000000000000000036 +:106AE00000000000000000000000000000000000A6 +:106AF0000000000080008008800000008000800806 +:106B0000001100000000A0000488408005C00000C3 +:106B10000000000080000000000000008000000075 +:106B20000000000080000000000000008000000065 +:106B3000000000028000088082001104C1080000EB +:106B40000003000080000000000000000000900032 +:106B500082001084C08400000000000000000000DB +:106B60000002000000020000000000000000880099 +:106B7000020000000000080008C1400202040800F2 +:106B80004085C0108804000009A00509881005048C +:106B9000000000000000C000000000000000C00075 +:106BA000000000000000C000000000000000C00065 +:106BB000000000000000C000004002000001C141D0 +:106BC000000000000000C000000000000000000005 +:106BD0001002000002882084000000000000000075 +:106BE00001000000C00000000000000000000000E4 +:106BF0000000000000000000C008000884C0081069 +:106C0000C1080210021008100001C008002008C0CE +:106C1000850800100000000010C0001000000000F7 +:106C200010C000100000000010C0001000000000A4 +:106C300010C000202001000100C100400000000041 +:106C400001C100400000000000C000000000000082 +:106C500000008000000000000200000000000000B2 +:106C600000004100000000000000000000000000E3 +:106C70000000000000000000000082800080800012 +:106C8000910082800080008089800001088000805F +:106C90008000048000000000000000800000000070 +:106CA00000000080000000000000008000000000E4 +:106CB0000000008000098010000802C100090021C6 +:106CC000411003C10000000000000080000000002F +:106CD000000000000040808500000000000000006F +:106CE00000000000000000000000000000000000A4 +:106CF00000000000000000000000000000110091F2 +:106D000000808000000080840080008000010584F5 +:106D100004849000092000000000000000008000B2 +:106D20000000000000008000000000000000800063 +:106D30000000000000000011000000000000C10978 +:106D40000808410011118000000000000000000050 +:106D5000000000000000200182402008C000000068 +:106D60000000000000000000000000000000000023 +:106D700000000000000000000088008800001000F3 +:106D800084201008400084000482100888880001D4 +:106D9000850291821184C1010000001010000000E2 +:106DA000C000001010000000C00000101000000023 +:106DB000C0000010100000000000000000200000D3 +:106DC000C189010000002001C00000400000000057 +:106DD000000000000000000000810000070000002B +:106DE0000000000000000000000000000704420056 +:106DF0000000000000000000000000000000000093 +:106E000000000000070042120000000007004212CC +:106E10000000000000000700840A000000000000DD +:106E20000000000000000000000000000000000062 +:106E300000000000000000000000000000E0000072 +:106E40000000500000E00000000000000000000012 +:106E5000000000000000000000007E3E78386666FA +:106E60003C3C0000000000000000000000000000AA +:106E70000000000000000000000000000000000012 +:106E80000000000000000000000000000000000002 +:106E90000000000000000000000000000F0F0F0FB6 +:106EA000C3C3FFFF0F0FFFFFC3C3FFFF0F0FFFFFA2 +:106EB000C3C3FFFF0F0FFFFFC3C3FFFF00000000AE +:106EC000C3C3FFFFC3C3FFFFC3C3FFFF0000FFFF38 +:106ED000C3C3FFFF00000000000000001E3E183882 +:106EE000FF003C3C0000000000000000000000002B +:106EF0000000000000000000000000000000000092 +:106F00000000000000000000000000000000000081 +:106F100000000000000000000000000000000F0F53 +:106F20000F0FC3C3FFFF0F0FFFFFC3C3FFFF0F0F01 +:106F3000FFFFC3C3FFFF0F0FFFFFC3C3FFFF00002F +:106F40000000C3C3FFFFC3C3FFFFC3C3FFFFFFFFB7 +:106F5000FFFFC3C3FFFF00000000000000000000AF :106F60000000000000000000000000000000000021 :106F70000000000000000000000000000000000011 -:106F80000000000000000000000000000000000001 -:106F900000000000000000000000000000000000F1 +:106F800000000000000002102000008810840210A1 +:106F90002000008810840000021020000088108467 :106FA00000000000000000000000000000000000E1 :106FB00000000000000000000000000000000000D1 :106FC00000000000000000000000000000000000C1 :106FD00000000000000000000000000000000000B1 -:106FE000F978E160000000000000C3C30000000069 -:106FF0000F6FFF6F00000F0F0000FFFF0000FFFF8B -:10700000000066660000FFFF000066660000FFFFEC -:107010000000FFFF0000FFFF0000000000FF000075 -:107020000F0F0000FFFF0000FFFF000000FFFFFF49 -:10703000F0F00F0F0F0F3C3C3C3C00000000000044 -:107040000000000000000000000000000000000040 -:107050000000000000000000000000000000000030 -:107060000000F978E16000000000C0C0C0C066FF09 -:1070700000990060F06000000F0F000000000000A9 -:107080000000000066660000000000006666000068 -:10709000000000000000000000000000000000FFF1 -:1070A00000000F0F0000000000000000000000FFC3 -:1070B000FFFFF0F0666666660F0F0F0F000000001E -:1070C00000000000000000000000000000000000C0 -:1070D00000000000000000000000000005610A0F31 -:1070E000050D00A0000030000000000085000A0827 -:1070F000050000A000613007002D120245E3802941 -:10710000C021920240E38001C021920240E380014D -:10711000C021920245E38A09C52192A2000045E3FD -:107120008A0F052D92A245E38A09C52192A24082C9 -:107130008000002082020061003F000D000000611D -:107140000007000D000000000000000000000561C5 -:107150000A0F850D00A000000000000000000000E4 +:106FE000F4FDF4FD00F06363000000000000000009 +:106FF0000000000000000000000000000000000091 +:10700000000000002D2D2D2D0000000000000000CC +:107010000000000000000000000000000000000070 +:107020000000FFFF9999FFFF9999FFFF9999FFFFD2 +:107030009999FFFF9999FFFF9999FFFF999900008E +:107040006666C3C3C3C3FFFF0000FFFFF0F0FFFF8E +:10705000F0F0FFFFC3C3FFFF99990000000000009C +:107060000000040D040D0FFF63630000000000002A +:107070000000000000000000000000000000000010 +:107080000000000000003C3C3C3C00000000000010 +:1070900000000000000000000000000000000000F0 +:1070A00000000000FFFF9999FFFF9999FFFF999950 +:1070B000FFFF9999FFFF9999FFFF9999FFFF999910 +:1070C00000006666C3C3C3C3FFFFFFFFFFFFF0F00E +:1070D000FFFFF0F0FFFFC3C3FFFF9999000000001E +:1070E0000000000000000028000000080000000070 +:1070F0000000000005180A00050004A000000000C0 +:10710000000000000000000000000000000040003F +:1071100000000000000040000000000000000061CE +:107120004006000D000040028000002092024082D4 +:107130008000002092020082000000009200008285 +:10714000000000008A0000618007002D920240E3E9 +:107150008006C02D92024082800000209202000032 :10716000000000000000000000000000000000001F -:1071700000000000000000000000000000003535A5 -:1071800035353C3CF0F03F303F30F000F0FF3F3011 -:107190003F303C3CF0F03F303F3000F0FFF000006B -:1071A0000000000000000000553C553CFF00FFFFC0 +:10717000000000000000000000000000000000000F +:1071800000000000000000000000000000000000FF +:1071900000000000000000000000000000000000EF +:1071A000FF1E551E0000000000000000000000004F :1071B00000000000000000000000000000000000CF -:1071C00000000000000000000000000000000000BF -:1071D00000000000000000000000000000000000AF +:1071C00000000000000000000000000028EB30F389 +:1071D0005F5FFC0C0CFCF0FF0000000000000000F2 :1071E000000000000000000000000000000000009F :1071F000000000000000000000000000000000008F -:10720000353535353C3CF0F03F303F30F000F0FF95 -:107210003F303F303C3CF0F03F303F3000F0FFF07B -:1072200000000000000000000000553C553C00003C -:1072300000FF00000000000000000000000000004F -:10724000000000000000000000000000000000003E -:10725000000000000000000000000000000000002E +:10720000000000000000000000000000000000007E +:10721000000000000000000000000000000000006E +:107220000000AA1E001E0000000000000000000078 +:10723000000000000000000000000000000000004E +:10724000000000000000000000000000000028EB2B +:1072500030F35050FC0C0CFC000F0000000000004C :10726000000000000000000000000000000000001E :10727000000000000000000000000000000000000E -:107280000000FFC33C003C3CAAAA3C3C3C3C14BE72 -:1072900014BEFF0F000F3C3CAAAA3C3C3C3C3C3CCB -:1072A00000FF00000000000000000000F505F505EB -:1072B00000F00FFF000000000000000000000000D0 +:1072800000000000000000000000000000000000FE +:1072900000000000000000000000000000000000EE +:1072A0000000000000000000C2F2CEFE000000005E +:1072B00000000000000000000000000000000000CE :1072C00000000000000000000000000000000000BE -:1072D00000000000000000000000000000000000AE +:1072D000000000000F0FFF000055FCE80000000058 :1072E000000000000000000000000000000000009E :1072F000000000000000000000000000000000008E -:1073000000000000FFC33C003C3CAAAAFFFF0000B5 -:1073100014BE14BEFF0F000F3C3CAAAA0F0F0F0FA4 -:107320003C3C00FF00000000000000000000F505EC -:10733000F50500F00FFF0000000000000000000055 +:10730000000000000000000000000000000000007D +:10731000000000000000000000000000000000006D +:107320000000000000000000000002320E3E0000DD +:10733000000000000000000000000000000000004D :10734000000000000000000000000000000000003D -:10735000000000000000000000000000000000002D -:107360000000000000002100880000000000000272 -:107370008400C000C00020008400840021002000A0 -:107380008400880488002000040004000400000039 -:1073900004008400200440002002841184002000A6 -:1073A00040008520408000030000200020002000D5 -:1073B0000400840020002000840084008400200059 -:1073C00020002000200020000400200020002000D9 -:1073D00020002000040020008800880084000200B3 -:1073E00000008400880000002000000041200040D0 -:1073F0000000000000000000400009000000400004 -:10740000C100000000A1000004000900000000000D -:1074100004000000000004002000000020004000E4 -:107420000000000020000404000004000400090023 -:10743000000000000000040004002000000009001B -:1074400000000000410000C04000050000000400F2 -:107450000000090005000000040000000400040012 -:1074600020000000400000000000000000000000BC -:1074700002000000000000000840011002000000AF -:10748000000090040140C04009400000008000203E -:1074900000900000A01088001140000000000000D3 -:1074A00001000900080000800040000000100000FA -:1074B00000000000030021400140204000000000C7 -:1074C0000000020000000000000041400000000039 -:1074D000000000000000000000000140000000006B -:1074E0000000000000000000000000400008000054 -:1074F0000000000804002002000005082000090028 -:1075000000000000050920000400200009042020DC -:107510000001002000000000040008100200040028 -:10752000020008004002008800040000000009007A -:107530000000050004002000A000200085100000CD -:1075400000000000000000000240009088000000E1 -:1075500000000000000004000200000040000000E5 -:107560000000000000000200000000000000100009 -:107570000000010000000000000008000000010001 -:10758000010000000000000000000000A0008400D6 -:1075900000000000000082000400820000000000E3 -:1075A0000000880000000000000800000800000043 -:1075B00000000000000000000004000000000000C7 -:1075C000040000000000000000008800000000002F -:1075D000000000000000880000008800400000005B -:1075E0000000100040000000000000080000000043 -:1075F00000000000202009000000210008002100F8 -:107600002000200000000800080000000008000022 -:107610004000000040000000000004A00000000046 -:10762000000003000300000000000000110008003B -:107630000000000021000300030000010000000022 -:1076400000000000030041000300000000000000F3 -:107650000000000000000300030000000000000024 -:1076600000000000080000000000210000000800E9 -:107670000800000008000000200000000000A0003A -:10768000A0008800C00040000000C0000000A00072 -:1076900000004000A1008300002000000800080056 -:1076A00000008211C0008200080084000800000071 -:1076B0008800000000004000A0004000A000820000 -:1076C000200084000000080010000400A00000005A -:1076D0000000A000C000820000000000A000000028 -:1076E000080082000000080008000000820000007E -:1076F00000004000000000080000800000000000C2 -:1077000000002100040000008000030000000000D1 -:107710000000080000000400040020010000000038 -:107720000000000000000000110008000000000040 -:107730000800118800000000000000000000400068 -:1077400008008000000000000000000000000000B1 -:107750000000000003000000000000000000000026 -:107760000000000000000000000000000000000019 -:107770000000000000000000000000000000000009 -:10778000000082000000000008000000000000006F -:107790000100840000800000000082000000000062 -:1077A0000000820000000020000000000000000037 -:1077B00000000000010000000000820082000000C4 -:1077C0000080009000808280000000000000000027 -:1077D0000000820000000000000000050000001111 -:1077E0000000000000000000000000000000000099 -:1077F000000000000000820010000004009008005B -:107800000000000008000500000000040000030064 -:1078100000C02008000000040000008403000000F5 -:107820000000418208000000000000000384000006 -:1078300000000900210020000000000000000000FE -:107840000000000400040004000400000000000028 -:107850000000000000000090000000000000000494 -:107860000000008400000000000000040008000880 -:1078700000000000050000000000000020002000C3 -:1078800008000000000000000000000000000800E8 -:107890000800000008000080000000000000000058 -:1078A0000000000000020000000000000000820054 -:1078B0000000002182001008000000000800000005 -:1078C00000030000000000000000000004000000B1 -:1078D0000800900000000000000000001000000000 -:1078E0000000000000000021000000000808000067 -:1078F00000000000080008000000000000208000D8 -:1079000080000000000000000000000000000000F7 -:107910000000000000000000000400000000000063 -:107920000000000400000000000000004000000013 -:107930000000000000000000000000000000000047 +:107350000000000000003C3C3C3C0055F0F0000008 +:1073600000000000000000004000000800000011C4 +:1073700000002100001100000000000000020000D9 +:10738000000000000100000020000000400000009C +:1073900000000000000001000100010003000200E5 +:1073A0000000020000000003880000008800880040 +:1073B0000010010005C0C085040004000000840224 +:1073C00040000005010001000000880000024000AC +:1073D0000000000000004100200000000004A000A8 +:1073E000C1100400040000A0000000000000000024 +:1073F000000000A040000000000021004100419179 +:10740000410000000000040000000000090000002E +:107410000000000800000008040004000404040048 +:1074200041000000000000000000000000004000DB +:107430000000000104008805210240000000000057 +:10744000000180000000400020000000000000005B +:1074500000000000000000002000000010000800F4 +:107460000000100080008090000300000000000574 +:107470000002004011800000000000000080008039 +:107480000040000000000000A02000090090000063 +:10749000000000000000004000000020012010203B +:1074A00000200000000000000000000000000000BC +:1074B0000000000009000010209041400000000082 +:1074C00000004000000240000180010402100000A2 +:1074D00000050000100090002002020003000310CD +:1074E0000304024103000300020003020008000439 +:1074F00000080011000102400008008800840040DC +:107500000040000100000000000800010010001011 +:10751000008400C0000000080008020000410401CF +:107520000001000900400000000800000000000801 +:1075300000000000000084000009800488090008A1 +:107540000008000880080001800040022001008837 +:107550000000000000008000000411010004100879 +:107560000408400908080400080802884001C00215 +:107570009102000089C00021900888000002C0101C +:107580008400A041C008C0080000C0000005002120 +:1075900000210800000000000000000000050008B5 +:1075A0000008000800000000C0000000000000000B +:1075B0000000004100000000880000004000A10021 +:1075C000408000800280008000830280008040C0F4 +:1075D00000A10280008002804080008840800888EE +:1075E000000301000021400085412003100001003C +:1075F0000001020100004003000000000000000143 +:1076000000080090000000100000000000000000D2 +:1076100000C0000080000000000000000000000822 +:1076200000000000000000C000C00000008400C096 +:107630000000000000840082000000000000000044 +:107640000400004000408040004000408040004076 +:10765000004008408040004003400040004003409C +:10766000004003000400000008000408218480A0FA +:107670004000008000000080010200110000004076 +:10768000004100110021C0000800000000000000BF +:107690000000000084000000000000000000000066 +:1076A0000000020000009100050000000000000042 +:1076B00000000000000000000000000002000000C8 +:1076C0000080000002001000000008008880008098 +:1076D00008802000A000000008000000A0000000BA +:1076E00008000800004001020010000841000404E6 +:1076F0008341400208400800004040C100840084EB +:10770000000100A0408200000088009010000000EE +:107710000000000000000000000000C000000000A9 +:107720000000000000000000040004004000000011 +:107730000000000000000000080000000000000041 +:1077400000000040210000000000000000000002D6 +:10775000000200080000000000000800000002080D +:1077600000840000038441014091000100859000E5 +:10777000809010008300000202400021002182A1BD +:10778000080300808480400308400000404000005F +:107790000000100000108400000000000100000044 +:1077A00000000000C01100008200A00000000000E6 +:1077B0000000000000000000000000008200000047 +:1077C000000000410004840000210011000300417A +:1077D0000000000800000040000000000000080851 +:1077E000000004000000820000000400820000008D +:1077F00084000000A02040080000000100000000FC +:1078000000020000004008400000000100000001EC +:107810000000000000000000000800000000080058 +:107820000000000000040010000000A000000000A4 +:1078300000880084000000C00000000021C020106B +:107840000000000000000001000000000000000037 +:107850000000000000000000000000000000050023 +:107860000000020000004100008441A0800200A04E +:1078700000040800000000000000004000088240F2 +:107880000108000282008402002141400121000021 +:107890000100000084001000000000000000000053 +:1078A00000100000000208090000010000809000A4 +:1078B0000004000002000000000000000000004181 +:1078C0000003080000000211020002000000020094 +:1078D00002090200080000210200880010000200D6 +:1078E0000040020000000400080020000080089111 +:1078F0008200002182000000100000210901000028 +:10790000000102000001000000010000020102006D +:1079100011000290000000000000000000000000C4 +:107920002100000100000000000000000400002011 +:107930001100000000000000210000000000000015 :107940000000000000000000000000000000000037 -:107950000000000000000000000000000000000027 -:107960000000000000000000000000000000000017 -:107970000000000000000000000000000000000007 -:1079800000000100000000000000000000000000F6 -:1079900000000100000000000000010000000000E5 -:1079A0000090000090900000000000000000000027 -:1079B00000000000000000000000000000000000C7 -:1079C00000000000000000000100000001000001B4 -:1079D000000000000000000000000190204008109E -:1079E0000000000000000000000001000000000096 -:1079F0000000000000000000000000000000000087 -:107A00000000000040000000000000000000000036 -:107A1000000400400500000000000000020000001B -:107A200000000080000080800000000000000000D6 -:107A300000000000000000000020000009000020FD -:107A400000000000000000000000204000030500CE -:107A500000400000000000000000000041000000A5 -:107A60000080000000000000000000001000000086 -:107A70000000000000000000000000000000000006 -:107A800000000008000000080000000000000000E6 -:107A90000000100008001000088000080000000529 -:107AA0000000000000000000800000000000000056 -:107AB00000008000800080100000000000000040F6 -:107AC00000000000000000000000000003000300B0 -:107AD0000000200000000000000000008800A1005D -:107AE0008020402000000000000000000000000096 -:107AF0000000000000000000000000000000000086 -:107B00000000000000000000000100000000000074 -:107B10000000000001000000010000A000000000C3 -:107B20000000000000000000000090000000A00025 -:107B300000000000080040000801080000000000EC -:107B400000000000000000000000000000000082B3 -:107B50000000000001400000000000000000412083 -:107B60001100A000880000000000000000000000DC -:107B70000000000000000000000000000000000005 -:107B800000000000000000000800000001000000EC -:107B900000000000000000000001010100000000E2 -:107BA00084000000000040000000909000000000F1 -:107BB00000000000000000000000000000000000C5 -:107BC00000000000010000000000000000000000B4 -:107BD00000000000000100010000000000000000A3 -:107BE0000041002008210088000000000000000083 -:107BF0000000000000000001000000000000000084 -:107C00000000000000000000000000000000100064 -:107C10000000000000000000000000102121000012 -:107C20000000000000004000800000008080000094 -:107C30000000000000000000000000000000000044 -:107C400000000000410020000000000000000000D3 -:107C500000000003000000400002000000000000DF -:107C60000000000200410021108800000000000018 -:107C700000000000000800000010000000000000EC -:107C800000000000000000000000000000000000F4 -:107C900000000000000000000000000004002100BF -:107CA000082000000000000000000000002000008C -:107CB00000000000008000000000000200800000C2 -:107CC00000000002000000000000000000000000B2 -:107CD0000000000003002000000000000000000081 -:107CE0000000000010000380108010080000000059 -:107CF0000000000000000000000000000000000084 -:107D00000000000000000000000000000000000073 -:107D10000000000000000000000000000000000063 -:107D20000100010000000000000000000000000051 -:107D3000000000000000001000080000000100200A -:107D400000880000000000000000000000000000AB -:107D50000000000000000000010000000000000022 -:107D600000000000000000000140010401000000CC -:107D70000000000000000000000000000000000003 -:107D800000000000000000000000000000000000F3 -:107D900000E00000000000000000000000004100C2 -:107DA00000E000000000000000E00000000000060D -:107DB00000000700000000000000000000000000BC -:107DC000000000000000500000E000000000000083 -:107DD0000000000000000000880000E0000000003B -:107DE0000000000000000000000000000000410052 -:107DF0000000000000000000000000000000000083 -:107E00000000000000000000000000000000000072 -:107E10000000000000000000000000000000000062 -:107E20000000000000000000000000000000000052 -:107E30000000000000FF00FF000000000000000044 -:107E40000000000000000000000000000000000032 -:107E50000000000000000000000000000000000022 -:107E60000000000000000000000000000000FFC350 -:107E7000FFC3000000000000000000000000000040 -:107E800000000000000000000000000000000000F2 -:107E900000000000000000000000000000000000E2 -:107EA00000000000000000000000000000000000D2 -:107EB000000000000000FF00FF00000000000000C4 -:107EC00000000000000000000000000000000000B2 -:107ED00000000000000000000000000000000000A2 -:107EE0000000000000000000000000000000000092 -:107EF0000F00000000000000000000000000000073 -:107F00000000000000000000000000000000000071 -:107F10000000000000000000000000000000000061 -:107F20000000000000000000000000000000000051 -:107F300000000000FF00FF000000FFFF0000000045 -:107F40000F0F0F0F00000000FF00003000000000C6 -:107F50000000000000000000000000000000000021 -:107F60000000000000000000000000000000F0C35E -:107F7000F0C30000BF00000000000000000000008F -:107F800000000000000000000000000000000000F1 -:107F900000000000000000000000000000000000E1 -:107FA00000000000000000000000000000000000D1 -:107FB0000000000000003CC33CC30000FFFF0000C5 -:107FC00000005555555500000000FF0005F0000069 +:107950000000000000000000000000080204000019 +:10796000000020080000000000A0000080000010BF +:1079700000200900110041000000000400C001C106 +:10798000908810011002C04108C08809C0204088BA +:107990000100089090020000000000000000C0A05C +:1079A00000200040C0A0000000000000000040884F +:1079B00090200082109000000000000000000000F5 +:1079C000000000000000000002C001400008882004 +:1079D00000C000040200000000C1A10482010100F7 +:1079E0000000000000A000040004000001000000EE +:1079F000842000900088A008010320100889000955 +:107A000010C02104800880A0C00811098003002054 +:107A10008000020000000080000000000000000064 +:107A2000A0800000008000000000000000000000B6 +:107A300080008000008000000000000000000000C6 +:107A40000000000000000000000000801180000025 +:107A50000000008000808000000000C18888800352 +:107A600040200000000000000080400000000800EE +:107A70000000000000800080000011418208808822 +:107A8000008309801000200490A1080009212080B3 +:107A900020000000000500200000000000000000A1 +:107AA00080000000000900800000000000000000CD +:107AB000000000000020000880000000000000001E +:107AC0000000000000000000000000001100A008FD +:107AD00090899080000000000000800010000800E5 +:107AE00004008280000000800000000010000221DD +:107AF0009000C100000008200505418510002010FD +:107B0000110041800040C1000488028341001090B0 +:107B1000890400880800C02000C008200000000080 +:107B20002000900002000200020840000000000057 +:107B30000000000090002000000090000000000005 +:107B40000000000000000000000000000000100025 +:107B5000101111081104000000000000C000010015 +:107B60000100000005040000008400000004000083 +:107B700000048400058200000100018901880100E1 +:107B8000000501C001A010890188030390C00140D5 +:107B90000001A1400221C0010003040302C1000052 +:107BA000000000000000C002008400C0A1840000AA +:107BB00000000000000000000020A09002900000E3 +:107BC00000000000000000000000000000000000B5 +:107BD000899000100811081000000000000400C087 +:107BE00000000101000501C10100000084C001C0C6 +:107BF000C000000482000082C0A00004000490C005 +:107C000089008900040111000008092105A10989E2 +:107C10002109200985118409881000908088800836 +:107C20000000000000000000008000000000A10033 +:107C30000000000000000000000000000080900034 +:107C40000000000000000000000000000000000034 +:107C50000000109000000005208200110009009033 +:107C6000058000001040209002910200000080007A +:107C70004000400000808000038080000080008081 +:107C800000804020111108218808C08289888380E3 +:107C90008310000000000000004000008080808011 +:107CA000000000050000008000008000800000004F +:107CB00080000000000000000000800080800000C4 +:107CC00000000000000000000000000000000000B4 +:107CD000000000008011008800000000000000008B +:107CE00000800000A0800400058010020000000059 +:107CF000800000000000004000000010C1001011D2 +:107D0000030003110000002000000011C1C0410564 +:107D100002820301082000902020040100000202DA +:107D20000202080000000090000200001000044061 +:107D30000802A00000000000000000009000028285 +:107D4000909088000000000000000000000000008B +:107D5000000000000000C001082120880800000089 +:107D6000000000844000C1A0000001084000820023 +:107D7000008204820000008800010000C001C100F0 +:107D8000210121008200A0820401200010010000D6 +:107D90000000000042000000000000005000000051 +:107DA00000000000600000810000070000000000EB +:107DB000000000008400000000000000000000211E +:107DC00000000700000000000000000000000000AC +:107DD0000000000000000000600000E0070000005C +:107DE0000000000000000000000000E000000000B3 +:107DF0000000000000000000500000E00000000053 +:107E0000000000E007006000600000E007000000E4 +:107E1000FFFFDF80FFFF00C05959A9A900FF14EB45 +:107E2000AA3AAA3A55A5AAAA00000000000000003C +:107E30000C000000080F0D0F000000000000000003 +:107E400000F00FFF0FFFAFAF0000000000000000C8 +:107E50000000000000000000000070C0B0C07D0DF8 +:107E60000D7DC3C3C3C3FFFFFF00FFFFC3C3FFFFFD +:107E7000FF000F0FF0F0FF0000FF3C3C3C3C0F0FF9 +:107E8000F0F0FFFFAA8200FFF0F034B675F70000B3 +:107E90000000FFFFDF80FFFFFFCF69696969FF0016 +:107EA000D72855C555C55555AA5A000000000000F1 +:107EB00000000D01010108080D0D00000000000088 +:107EC00000003C3C3C3C00F0A0A000000000000092 +:107ED00000000000000000000000000000C000C022 +:107EE000D70707D7C3C3C3C3FFFFFF00FFFFC3C349 +:107EF000FFFFFF000F0FF0F0FF0000FFC3C3C3C37D +:107F00000F0FF0F0F0FFFFC3AAAA3C3C20A261E3F0 +:107F1000000000002800FFFF55AAA5A565A655AAE8 +:107F200095A995A96565A6A61E1EE1E100000000C1 +:107F3000FFFF55000050000000000010000000008E +:107F40000000000017FF17005C5C5C5C0000000094 +:107F50000000000000000000000000000000080811 +:107F60000808F5FAC1C200FFFFFF0000FFFF00FF95 +:107F7000FFFFFFFF0000CCCCCCCC55555555FFFF83 +:107F80000000FF0000FFAE04AA00000000000F7D0B +:107F90000F3C00000000EBFFFFFFA5A5A5A565A60F +:107FA00055AAA5A5A5A55555AAAA0F0FF0F0000042 +:107FB0000000AAFF000082D20000000000000000C4 +:107FC00000000000000017FF17005F5F5050000026 :107FD00000000000000000000000000000000000A1 -:107FE0000000000000000000000000000000000091 -:107FF000F0C3F0C30000BE0000000000000000005D -:108000000000000000000000000000000000000070 -:10801000000000000000000000610007000D0000EB -:10802000000000000000000000610001C00D000021 -:1080300000610007000D0000000800380000050086 -:108040000000000000000000000000000000000030 -:1080500000610007800D000000000000000000002B -:10806000000000610001C0010000000000000000ED -:10807000000000614006000D00000000000000004C -:10808000000000610006000D00000000000000007C -:1080900000000000000000000000000000000000E0 -:1080A00000000000000000000000FC0CFC0C0FFFB2 -:1080B0000FFF0000000000000000000000000000B2 +:107FE00038181838C1C2F5FA00FFFFFFFFFFFFFF86 +:107FF00000FFFFFF0000FFFFCCCCCCCCAAAAAAAAAE +:108000000000FFFFFF0000FF000000000000000074 +:108010000F550F000000000040E38006002D900285 +:1080200040618006002D100240618006002D08028C +:108030000000002000000000000000000000000020 +:108040000000000000000000000000200000000010 +:108050000000000000000000000000000000000020 +:108060000000A5615A0E850500A040638006002D22 +:10807000920240E380060029900240008000002028 +:10808000100240618007C02D0802A0610004009D1D +:10809000000085610A0A850500A00808FBFB500066 +:1080A000C30000000000000000000000000000000D +:1080B00000000000000000000000000000000000C0 :1080C00000000000000000000000000000000000B0 :1080D00000000000000000000000000000000000A0 -:1080E000000000005555FF0000C33CFF00000000E9 -:1080F000000000000303F3F300FF00FF0000000096 -:108100000000000000000000F0F0FFFF0000000091 -:10811000000000000000000000000000000000005F -:10812000000000000000000000000000FC0CFC0C3F -:108130000FFF0FFF00000000000000000000000023 +:1080E0000000000000000000FFFF3CFF0000000057 +:1080F00010FB10FB0F003F3000A000A000000000AC +:10810000000000000000000000000000F030C3008C +:108110000000000000000000505A515B00FF00FF0B +:1081200050000000000000000100000000000000FE +:10813000010000000000000000000000000000003E :10814000000000000000000000000000000000002F :10815000000000000000000000000000000000001F -:108160000000000000005555FF0000C33CFF000068 -:108170000000000000000AFA0AFA007F00FF000079 -:108180000000000000000000000000000F0F0000D1 -:1081900000000000000000000000000000000000DF -:1081A0000000000000000000000000000000FF00D0 -:1081B000FF000800000000000000000000000000B8 +:108160000000000000000000000000003C000000D3 +:10817000000010FB10FB0F003F300000F0F000008B +:1081800000000000000000000000000000000000EF +:1081900000000000000000000000000A010B202F7A +:1081A000202FF0F0F0F0FFEFFFFFAAAAA2AE000030 +:1081B00000000000000000000000000000000000BF :1081C00000000000000000000000000000000000AF -:1081D000000000000000FFFF3C3C00000000000029 -:1081E0000000000000000000FF3C003C30303F3F3A -:1081F000000000000000000000000000F5F5C1C113 -:10820000000000000000000000000000000000006E -:10821000000000000000000000000000000000005E -:10822000000000000000000000000000000000004E -:10823000FFFF000008000000000000000000000038 +:1081D000000000000000000000000000000000009F +:1081E0000000000000000000000000003C0C3CFC0F +:1081F0000000000000000000C3000000090903099E +:10820000000000000000000000000000AAAA00FF1B +:1082100000000000A0A000AAFF000F0FB2B23CFFB8 +:1082200020202F2F70F0F0F000040000AAAAAAAAC4 +:10823000000000000000000000000000000000003E :10824000000000000000000000000000000000002E -:108250000000000000000000C3C300000000000098 -:1082600000000000000000000000FF3C003C303037 -:108270003F3F000000000000000000000000F5F596 -:10828000C1C100000000000000000000000000006C -:1082900000000000000000000000000000000000DE -:1082A0000000200000002000040000000400040082 -:1082B000040004000400200000000400200020004E -:1082C000840088000400000584218800200000004C -:1082D00088002000A00820000000A000210020004D -:1082E0002004000300002000840010000200200091 -:1082F000040021002002040000000000880020008B -:108300000000000088002000040004002000040099 -:10831000040004000000200004000000040020000D -:1083200004000000000000000000800000000000C9 -:1083300040000000000011000400210005000000C2 -:10834000049004000000000000020400040000008B -:10835000100200004000040009000000000020009E -:108360000900090000002000000000002020090092 -:108370000000C00204000400050004000000020028 -:1083800000022000040000000000000000000000C7 -:108390000020400000000000040000000400000075 -:1083A000000040000000000000000000000000008D -:1083B0000000001000000000000000008400000029 -:1083C0000000040000000040000000000000000069 -:1083D0000000000000080000820001000109040004 -:1083E0000000000000000000000000000000840009 -:1083F0000000000004000120000000000000001048 -:10840000000000000000000000000000001000104C -:108410000200000000000000000000000000080052 -:10842000000000000000000000080008000800082C -:108430000040000009000008000000820000000069 -:1084400000000000000000000008001000100208FA -:1084500000000000200002100000000008000800DA -:108460000000000000000000000000080000040000 -:108470000010000000008400041105000004020048 -:1084800000000000000000000000000800000000E4 -:1084900005000400000000000000000000000000D3 -:1084A000800000000000000000000000000000004C -:1084B000400000000000000000100000000000006C -:1084C000400082000000100000000000400000009A -:1084D0001000000000000000000000000400004048 -:1084E0000000000082000400C00000000000A000A6 -:1084F0000000A000000000000000100000000000CC -:108500000000000000000000100008000000000053 -:108510000800000000000000000000000000A000B3 -:10852000000000000000000000000000000000004B -:10853000090004000000000000000000040000002A -:1085400041000000040000000300000000000000E3 -:108550000000000000000000000000000500000016 -:108560000000050000000000000000000000000006 -:1085700000000000030000000000000000002100D7 -:108580000800400003000000000000000000009010 -:1085900000000000002000000000000000000000BB -:1085A0000500000000000000000041000000820003 -:1085B000001100000000820000000800000082009E -:1085C00000000010000008000000100088000800F3 -:1085D000000004000800C000C004100008000000F3 -:1085E000000000000400080004000000C0000000BB -:1085F0000000000000001000040000000000000067 -:10860000C00000000800000004000000100000008E -:10861000000000000000000000000000000000005A -:108620000800000000000000080000000200040034 -:10863000000000000000000000000000000000003A -:1086400000000000000000000000000003004100E6 -:10865000100000000000000000004040400000004A -:1086600000000800000003000000000021000000DE -:1086700000000000000000000000000000000000FA -:1086800000000000000000000000000000000000EA -:1086900000000000000000000000030000000000D7 -:1086A00000000000000000000000000000000000CA -:1086B00000000000000000000000000000000000BA -:1086C000080008000000000000000000000000009A -:1086D00000000000400008000000000000008200D0 -:1086E0000000820000000000000001000000008087 -:1086F00000000000000000000000000000008200F8 -:108700000000000000000000000000000000000069 -:108710000000000000000000000000000000000059 -:1087200000000000000000000000A00000000000A9 -:10873000000000000000000009040000000000002C -:10874000000000000202040000100200000000000F -:108750000000000000000000000000000000000019 -:1087600000000000000040000000000420000000A5 -:1087700000040000000000000000000000000000F5 -:108780000000000000000090000000000000080051 -:1087900000000500000400000000030008000300C2 -:1087A00000000300100000000000000000000000B6 -:1087B00000000000000000000000000000000000B9 -:1087C00000000000000000000000000000000000A9 -:1087D0000000000000000000000000000000000099 -:1087E0000000000000000000C000040000000000C5 -:1087F0002000000020000000000000000000000039 -:108800001000000000000000000000000000000058 -:108810000000000000000000000000000000000058 -:108820000000080000000800000000000000000038 -:108830000000000000200000000000000000000018 -:108840000000000000000000000000000000000028 -:108850000000000000000000009000000000000088 -:1088600000000000000240000000000000000000C6 -:1088700020008000000080000000000000000000D8 +:10825000000000000000000000000000000000001E +:1082600000000000000000000000000000003C0CC6 +:108270003CFC0000000000000000C300FC7D0F0F6C +:108280000F0F000000000000000000000000F0F0F0 +:108290003C3C00000000A0A000AA3C3C5555B2B2F6 +:1082A00000C301000002000088102002200400002A +:1082B000A0000000A005A000000020802000208871 +:1082C0002080400020002080200000008805000061 +:1082D000000000802080208000802080C100840079 +:1082E00084000003200000000080C0001000400057 +:1082F0000000100000000400040000002000200026 +:108300002000200020004000880000040100400000 +:1083100088002000C0004000400084802010410000 +:108320002111890040000088000000004001000188 +:108330004002400040000000000000008004800077 +:10834000800400040500800080040000000040005C +:10835000000000004004000480040004C00402A0E7 +:10836000000000000000400000000002000040A0EB +:10837000000040000000000040000000000000007D +:108380000000000010002100000200000300400077 +:10839000800010000000000020000000000200002B +:1083A0008808200020020040A0000000000000001B +:1083B000014101859185000000000000009000044B +:1083C000008000100000000400040004000400000D +:1083D000000000000000010001800000008000801B +:1083E000000000000400000000000000010910105F +:1083F00000008800000001000000000000000000F4 +:10840000000008000000000091001000401040092A +:108410000000410000000800840082080000820083 +:1084200001000180004003000001090000000884F1 +:1084300000822082200420040008000800000002BE +:108440000009000400000088000900850001000107 +:108450000000000000840000201020040000000440 +:10846000000400000008000000000908004040006F +:1084700020010900000009004000000000842000E5 +:1084800000000000000000080000081080088000C4 +:1084900080820000C0000000000800000285000883 +:1084A00000002000400200100808000800410004FD +:1084B00000418810000000040800000000100000C7 +:1084C000000800000000000400040000000888000C +:1084D000880000000000000000000000000890007C +:1084E00000009000000500A00080000000000800CF +:1084F000A00040000000000000000000000000009C +:108500000008000000030000002190080000002186 +:108510000021000008008808000990004021104157 +:108520009005001000000000400940050000038293 +:1085300040044084001009000888110009824000AE +:108540000300000010001000000100010000000006 +:10855000000000000000030000000000090000000F +:10856000000000000000000000400040000000008B +:10857000A10000008500000000100000000800823B +:10858000000804A0040000000000108200000000A9 +:108590000000000000A008001000090010100500F5 +:1085A0000910000005002100410200000000080041 +:1085B0000000080000004000200000000000004013 +:1085C0000100820000000000820000000100200085 +:1085D00000000000000008000800C0000080828049 +:1085E0000000088000000810080082000000000061 +:1085F00000000000000000000000C00000000000BB +:1086000000000000C00000020040001090000000C8 +:1086100000080000000000100000C0104000A00092 +:1086200000000180C00910002040000584000841BE +:10863000008400A041000000200041000000200054 +:10864000030102000300000000000300000020C03E +:10865000800000000000000000000000000000405A +:1086600000040000000400000010000000000800EA +:108670000000000000002100000041000800000090 +:10868000000000C000C000C00000419003080000CE +:108690000090000100004100080400000084020076 +:1086A00000A00000042000900000000400820000F0 +:1086B00000840303022008090110004100000004A7 +:1086C0002041000200210000000000000000200402 +:1086D0002041000020002040204002000200004015 +:1086E00000000084A08000000000820082000800DA +:1086F00000000000820008000820002000000000A8 +:108700000000100000000800000000000000000051 +:108710000000904000000010C00010080800080091 +:10872000C000900504000500080000000000A00043 +:10873000822084004088808820044084090003044B +:108740000005099020884010400040880000030088 +:108750008001800000008000800180018000800096 +:10876000000100000041004009002100000000104D +:10877000000000000000000000000001000100A057 +:10878000080421A040A00000040000000000020036 +:1087900005A000A00800000000000000000000008C +:1087A00000C000000090000004204104200041842B +:1087B0000008008411020041000800090000014186 +:1087C0004104000800020000A00082848480400070 +:1087D0008200008001000000000000000000000096 +:1087E0008200000008000000A0040000000000005B +:1087F00084000800000000000000C00882000000A3 +:108800000000000200000000000000000000000066 +:1088100000000000020000000000000000008400D2 +:108820000000400000001021C00004412000002191 +:108830000000080000080000000000000000000028 +:1088400002000205000000001190001011401140CC +:1088500003002100004002000000000000000000B2 +:108860000000000000000000000000010000000007 +:108870000082000000000000000000000000000076 :1088800000000000000000000000000000000000E8 -:1088900000000000000000000000000000000000D8 -:1088A00000000000000000000000000000000000C8 -:1088B00000000000000000000000000000000000B8 -:1088C00000000000000000000000000000000000A8 -:1088D0000000000000000000000000000000000098 -:1088E0000000000000000000000000000000000088 -:1088F000A0000000000001000000000000000000D7 -:108900000000000000000000000000000000000067 +:1088900000000000000000000000000000040000D4 +:1088A0000200000080002000000000008000200086 +:1088B0004040090400022000118400010100100062 +:1088C000000100C000000400000000C089002089F1 +:1088D000000191C100000088000091C10000400229 +:1088E000000000C000000002000000C10000C10143 +:1088F000A00191C100000000008200000000910072 +:108900000000000000000000400000000000000027 :108910000000000000000000000000000000000057 -:108920000000000000000000000000000000000047 -:108930000000000000000000000000000000000037 -:108940000000000000000000000000000000000027 -:108950000000000000000000000000000000000017 -:108960000000000000000000000000000000000007 -:1089700000000000000000000200000000000000F5 -:1089800000000000000000000000000000000000E7 +:10892000840000000101000000000001000200C0FE +:108930000284000200090091902100020008410415 +:10894000000900200091001000100010408010026B +:10895000001000108991114000410000899100052C +:1089600000C10000008000000080000000910505AB +:1089700089100008899100050041000000001100E5 +:108980009100000000000000400000000000000016 :1089900000000000000000000000000000000000D7 -:1089A00000000000000000000000000000000000C7 -:1089B00000000000000000000000000000000000B7 -:1089C00000000000000000000000000000000000A7 -:1089D0000000000000000000000000000000000097 -:1089E0000000000000000000000000000000000087 -:1089F00080000000000000400000000500000000B2 -:108A00000000000000000000000000000000000066 +:1089A0000400800000001141001000410008008018 +:1089B0000000000000800510212111050088000042 +:1089C00080000000800041800400118991000400B3 +:1089D0002100040083001180400005008500410053 +:1089E000050340118010000080030000800010800B +:1089F0004100109185100000800000008000000000 +:108A000090009080000082800300030000000300BB :108A10000000000000000000000000000000000056 -:108A20000000000000000000000000000000000046 -:108A30000000000000000000000000000000000036 -:108A400000000000000000400000000000000000E6 -:108A50000000000000000000000000000000000016 -:108A60000000000000000000000000000000000006 -:108A70000000020000008400000000000000000070 -:108A800000000000000000000000000000000000E6 -:108A90000040000000000000000000000000000096 -:108AA00000000000000000000000000000000000C6 -:108AB0000000000000000000200000000000000096 -:108AC00000000000000000000000000000000000A6 -:108AD0000000000000000000000000000000000096 -:108AE0000000000000000000000000000000000086 -:108AF00000000000008400000020000004000000CE -:108B00000100000000000000000000000000000064 -:108B10002000000000000000000000000000000035 -:108B20000000000000000000000000000000000045 -:108B30000000000000000000000000000000000035 -:108B40000000000000000000000000000000000025 -:108B50000000000000000000000000000000000015 -:108B60000000000000000000000000000000000005 -:108B70000000000000000000000000000000800075 -:108B800000000200000000000000000000000000E3 -:108B900000000000000000000000000000000000D5 -:108BA00000000000000000000000000000000000C5 -:108BB00000000000000000000000000000000000B5 -:108BC0000000000000000000004000000000000065 -:108BD0000000000000000000000000000000000095 -:108BE0000000000000000000000000000000000085 -:108BF0000000000000000000000000000000000075 -:108C00000000000000000000000000000000000064 -:108C10000000001000000000000000000000000044 -:108C20000000000000000000000000000000000044 -:108C300000000000000000000000000000800000B4 -:108C40000000000000000000000000010000000023 -:108C50000000000000000000000000000000000014 -:108C60000000000000000000000000000000000004 -:108C700000000000000000000000000000200000D4 -:108C800000000000000000000000000000000000E4 -:108C900000000000000100000000000000000000D3 -:108CA00000000000000000000000000000000000C4 -:108CB000000000000000000000000000002000088C -:108CC000000000000000000000000000000007009D -:108CD0000000000000000000000000000000000094 -:108CE0000000000000000000000000000000000084 -:108CF0000000000000000000000000000000000074 -:108D00000000000000E00000000000000000000083 -:108D1000000000000000000007000000000000004C +:108A2000400011200400410000000000000200404E +:108A30000000000000000000820003000500C020CC +:108A4000000008000000C000000201000191C00009 +:108A5000010000000100C10000C000000000C000D3 +:108A6000000000000001C001000008000000C0007C +:108A7000010200000191C101000008000000C000D7 +:108A80000000030008201000C0C00000000000002B +:108A900000000000000000000000000000000000D6 +:108AA0000000010000010008018400C00000000176 +:108AB000000100000000000000001120C10088003B +:108AC0000821000000000001004100100001000129 +:108AD00091C100110000000100C000000100000071 +:108AE00000C100010000410100C1000000100000B1 +:108AF00000C000000001900191C1000000000000D2 +:108B000000C0000001010000900100000000000012 +:108B10000001000000000000000000000000000054 +:108B20000000000000000000000000010000410003 +:108B300088000000020100000001040100010000A3 +:108B400001000100000340030810000800031104A5 +:108B500003058991002100050021008000201040BC +:108B600005050091000241051008009100000080F9 +:108B70000000008000000008031091890000200020 +:108B80004100008000004111000000110000004081 +:108B9000000500210020000000000000000000008F +:108BA000000000000000000400100002004100006E +:108BB0009100820000008008000500208041000232 +:108BC00040080305402000000000000000008384EE +:108BD0000411090003008000800000000040C00272 +:108BE000118905000811C1050589030003118000E2 +:108BF000000000000000C100051103000003801008 +:108C000000000000000000000002000900800010C9 +:108C1000000000000000000800000000000000004C +:108C20000000000000000000000000008000801034 +:108C30001000100009000400000000030000000004 +:108C400002840208108003030000000000000000FE +:108C5000C003011100000100C0A0021000000000CC +:108C6000C001899100000000C0A000910100000037 +:108C7000C000000000000000C000000101C00000B2 +:108C8000C00100008200000000000001000100029D +:108C900000000000000000000001000000000000D3 +:108CA0000000000000000000000088020200040034 +:108CB00008000100000001000000000000000000AA +:108CC0000000010501840184000100000000000093 +:108CD0004100810000E000000000000000000000F2 +:108CE0000000810000E000008100810000E0000041 +:108CF00000000000000000000000500000E0000044 +:108D00000021500000E00000000000000081000091 +:108D10000700828100000000000000000000000049 :108D20000000000000000000000000000000000043 -:108D30000000000000000000000000000000000033 -:108D40000000000000000000000000000000000023 -:108D50000000000000000000000000000000000013 -:108D60000000000000000000000000000000000003 -:108D700000000000000000000000000000000000F3 -:108D8000FFFFF0F000000000000000000000000005 +:108D300000000000820000E000000000000A0000C7 +:108D400007000000810000E00000000000000000BB +:108D5000FFFF0000666600003C3C0000FF000000D2 +:108D60003C3C0000FF00000066660000FFFF0000C2 +:108D700066660000FFFF0000F0F00000666600007D +:108D8000FFFF0000F0F00000666600000000000039 :108D900000000000000000000000000000000000D3 -:108DA00000000000000000000000000000000000C3 -:108DB00000000000000000000000000000000000B3 +:108DA0000000000000000000000000000000FFE4E0 +:108DB000C3E400000000000000000000000000000C :108DC00000000000000000000000000000000000A3 -:108DD0000000000000000000000000000000000093 -:108DE0000000000000000000000000000000000083 -:108DF0000000000000000000000000000000000073 -:108E000000000000F0F00000000000000000000082 +:108DD0000000FFFF0000666600003C3C0000FF0052 +:108DE00000003C3C0000FF00000066660000000040 +:108DF00000006666000000000000F0F000006666FB +:108E0000000000000000F0F00000666600000000B6 :108E10000000000000000000000000000000000052 :108E20000000000000000000000000000000000042 -:108E30000000000000000000000000000000000032 +:108E30003CE400E40000000000000000000000002E :108E40000000000000000000000000000000000022 :108E50000000000000000000000000000000000012 :108E60000000000000000000000000000000000002 @@ -121097,494 +121097,494 @@ :108EA00000000000000000000000000000000000C2 :108EB00000000000000000000000000000000000B2 :108EC00000000000000000000000000000000000A2 -:108ED0000000000000000000000000000000000092 -:108EE0000000000000000000000000000000000082 -:108EF0000000000000000000000000000000000072 -:108F00000000000000000000FFFF00000000000063 -:108F10000000000000000000000000000000000051 +:108ED00000000000000000000F0F000066660000A8 +:108EE000666600000F0F0000666600000F0F0000AE +:108EF000666600000F0F0000666600000F0F00009E +:108F00000F0F000066660000FFFF00003C3CFFFF03 +:108F1000F0F0000000000000000F3C3C00000000EA :108F20000000000000000000000000000000000041 :108F30000000000000000000000000000000000031 -:108F400000000000000000009999FFFF00000000F1 -:108F50000000000000000000000000000000000011 -:108F60000000000000000000000000000000000001 -:108F700000000000000000000000000000000000F1 -:108F800000000000000000000F0F0F0F00000000A5 -:108F900000000000000000000000000000000000D1 +:108F400000000000030B0000000000000030003FA4 +:108F50006F6F0CFC0000000000000F0F0000666641 +:108F60000000666600000F0F0000666600000F0F2D +:108F70000000666600000F0F0000666600000F0F1D +:108F800000000F0F000066660000000000003C3C7F +:108F9000FFFFF0F0000000000000000F00000000E4 :108FA00000000000000000000000000000000000C1 :108FB00000000000000000000000000000000000B1 -:108FC00000000000000000000000000066660000D5 -:108FD00000000000000000000008000000A00000E9 -:108FE0000000000000000000000000000000000081 -:108FF0000000000000000000000000000000000071 -:1090000000000000000000000000000000000061FF -:109010000007000D0000000000000000000000003C -:1090200000000008050000A0000000000000000093 -:109030000000000000000000000000000000000030 -:109040000000000000000000000000000000000020 -:109050000000000000000000000000000000000010 -:109060000000000000000000000000000000000000 -:1090700000000000000000000000000000000000F0 -:1090800000000000000000000000000000000000E0 -:1090900000000000000000000000000000000000D0 -:1090A00000000000000000000000000000000000C0 -:1090B00000000000000000000000000000000000B0 -:1090C00000000000000000000000000000000000A0 -:1090D0000000000000000000000000000000000090 -:1090E0000000000000000000000000000000000080 -:1090F0000000000000000000000000000000000070 -:10910000000000000000000000000000000000005F -:10911000000000000000000000000000000000004F +:108FC000000000000000030F00000000000000305F +:108FD000003F60600CFC00610006002D120240E3BF +:108FE00080048021920240E38006002D920240E33B +:108FF00080008021920240E3800080219202408222 +:1090000080000020920240E380008021920240E331 +:109010008002802D8202000005610A26050D00A84D +:1090200000610006000D00000000000000000000CC +:10903000000000000000000000610006000D0000BC +:1090400000610002800D00000061003E000D000084 +:10905000006100038001000000000000000000002B +:109060000F553C55202FE0EF0000000000000000ED +:10907000FC0C55550F3FFF3FFF0F3C0F202F707F1B +:109080000000000000000000FF550F55AAF0AAF0F4 +:109090000000000000000000000000000000003C94 +:1090A000003C000000000000002000000000000064 +:1090B000000000000000000000000000000000FFB1 +:1090C000F0F0282828280000000000000000F0AA86 +:1090D000F03C00FF00000000000000000000010064 +:1090E00000000F553C55202FE0EF00000000000469 +:1090F0000004FC0C55550030F030000F3C0F202FC1 +:10910000707F000000000000000000550F550000B7 +:10911000FFFF000000000000000000000000000051 :10912000000000000000000000000000000000003F :10913000000000000000000000000000000000002F -:10914000000000000000000000000000000000001F -:10915000000000000000000000000000000000000F -:1091600000000000000000000000000000000000FF -:1091700000000000000000000000000000000000EF -:1091800000000000000000000000000000000000DF -:1091900000000000000000000000000000000000CF -:1091A00000000000000000000000000000000000BF +:10914000AAAA3C3C0505AF05000000000000000095 +:10915000F0AAF03C007F0000000008003C2D3C3CE1 +:1091600000000000FFFFFFFF0C0CFCFC00C000C073 +:1091700000000000550F550F3A0A3AFAFF0F550F3D +:109180003AFA3AFA0000000000000000FCFF0CFF71 +:10919000A028F57DFF0F550F000000000000000023 +:1091A0000000F2F2707000000000000020200000BB :1091B00000000000000000000000000000000000AF -:1091C000000000000000000000000000000000009F -:1091D000000000000000000000000000000000008F -:1091E000000000000000000000000000000000007F -:1091F000000000000000000000000000000000006F -:10920000000000000000000000000000000000005E -:10921000000000000000000000000000000000004E -:10922000000000000000000000000000000000003E +:1091C0000000AAFF3CF0FF003C3C00000000000053 +:1091D00000000000000000000000000000003C3C17 +:1091E0003C3C00000000FFFFFF7F0CFC0CFC00C0BB +:1091F00000C000040000FF0F000F3A0A3AFAAA0F5D +:10920000000F3A0A3A0A0000000000000000FC00CB +:109210000C00A028F57DAA0F000F00000000000040 +:1092200000000000F2F2707000000000000020203A :10923000000000000000000000000000000000002E -:10924000000000000000000000000000000000001E -:10925000000000000000000000000000000000000E -:1092600000804080888020800000000000002000F6 -:10927000000000000000A000040004000000040042 -:1092800001000080040085000480C0800580048007 -:1092900004020400A080080020008400040084026E -:1092A00000010000040000002000200088002000D1 -:1092B00020002000200004000000200020002000EA -:1092C00088000000000000000000200000000000F6 -:1092D0000000200000000000000004000400200046 -:1092E00000001020002000200020000000000004EA -:1092F000000000000000000000000040000000002E -:10930000000004000020800004C0002004200402AB -:10931000102000000000001080000000000000A0ED -:10932000000000000000000020020000004000409B -:109330000000100004000000000000000000000019 -:1093400000000000000020000000000000004000BD -:1093500000000000000000000200000000004000CB -:1093600000002000040000000000002000000000B9 -:1093700000100010000000000000001000000000BD -:1093800000000010000000000000000000000000CD -:1093900000020310001008008420400000000800B4 -:1093A00000100310000000200000842004000000D2 -:1093B0000000000000100000000000002000040079 -:1093C000000000000010000000000000000000008D -:1093D000000000000210000000000000000000007B -:1093E0000000000004100010200000040005001020 -:1093F0000000000000000000000800100004000051 -:10940000001002000200000000080000000005003B -:109410000000000120000000850200018200000021 -:109420000002000008000000040000080400000022 -:109430000400000000000000020000000000040022 -:109440000000000004000400000000020000000012 -:109450000000000000000400000000000000000008 -:10946000000000000000000082000000A0030000D7 -:1094700000000000000000000000880082004000A2 -:10948000C00000000000000040000000820000005A -:109490000000000000004000000000000000080084 +:1092400000000000AA003CF00F0F55550000000080 +:1092500000000000000000001000000000001000EE +:109260000000100010051000400020000000000069 +:1092700000088410C0000000400020000000200012 +:1092800000008800C00084002000200000000000D2 +:109290000000000000000000880020000000040022 +:1092A00000034000040040058480200020000000EE +:1092B0008800020084008800C100040020800000B3 +:1092C000200084002000200020002000208090004A +:1092D0002008000040002040000888002004000012 +:1092E00020840000000000000000100000000500C5 +:1092F000000000000000000010000000000000005E +:10930000000000000000000000000000000000005D +:109310000000000000904000000800000000000075 +:1093200000000000C00040000040001000000000ED +:1093300000000000C0000000000008020002004021 +:109340000000040200020000000000000000000213 +:1093500041000001400200004140100240000000B6 +:1093600000040902040200000000000000000000E8 +:10937000000000020100010001802008008001803F +:10938000208020000000000000000010000000000D +:10939000000000880000000000000000000008003D +:1093A0000010001000000000000000050800000090 +:1093B00000008400009084100009082008090000C3 +:1093C00000000800008901000800001008001000DB +:1093D00040000009108282000200A1040210000077 +:1093E00000000400031000080008000800840008C2 +:1093F00000000084008420102000200480900004DD +:10940000200480048000001000100010000000887C +:1094100000000088002000900090009000080000EC +:1094200000000000000000000000000000008000BC +:10943000000000000000000400000000000180089F +:1094400020000000000000400800000000000200B2 +:1094500080008000040080090008008820052004A6 +:1094600000000000030008080021002000000003A5 +:1094700000008800880000084088848004880884F0 +:1094800010800080001000040000000000000800B0 +:1094900000000000000004000000000008000005BB :1094A00000000000000000000000000000000000BC -:1094B00000000000000000000000000000000000AC -:1094C000000000000000000020002000000000005C -:1094D0000800000000004000000000000800A0009C -:1094E000000000000000000000000000000000007C -:1094F000000000000000000000000000000000006C -:109500000000002000080000000000000000000033 -:109510000000030000000000400000000000000008 -:10952000000000000000000000000000000000003B -:1095300041000000000000000000000000000000EA -:109540000800000000000000000000000000000013 -:1095500000000000000008004000030000000000C0 -:1095600000000000000000000000000000000000FB -:10957000A000000000000000000000000800000043 -:1095800082000000C00084000000000000200020D5 -:10959000400020000000000000090800000000005A -:1095A00000000000000008000000080000000000AB -:1095B0000000000000000000000000008200000029 -:1095C0000000000000000000000000000800000093 -:1095D0000000000000000000002000000000000269 -:1095E00000000810A01008000800000000000000A3 -:1095F000100000000000000000000000000000005B -:109600000000000000004100000000000000000019 -:1096100000C0030000000000000000400000000047 -:1096200000000000000000000000000004880000AE -:10963000000000000000000000000000000000002A -:109640000000000000000000000004000000000016 -:10965000000000000000000000000000000000000A -:1096600000000000000000000000000000000000FA -:1096700000000400000000000000001000000000D6 -:1096800000000800000000000000000000000000D2 -:1096900000000000000000000000840090000000B6 -:1096A0000000C00000000000000000000004820074 -:1096B00000000000000000000000000000000000AA -:1096C000000000000000000000000000000000009A -:1096D000000000000000000000000000000000008A -:1096E000000000000000000000000000000000007A -:1096F00000000000880000000000000000000000E2 -:109700000000000000000000000000000000000059 -:109710000000000000000000000000000000000049 -:109720000000000000000000000000000000000039 -:109730000000000000000000000000000000080021 -:109740000000000010000000000000000000000009 -:109750000000000005000000000000000000000004 -:1097600000000000000000000000000000000000F9 -:1097700000000000000000080000000000000000E1 -:1097800000000000000000000800000008000800C1 -:10979000A000080082000800080008000000000087 -:1097A0000000000001000000008000000000000038 -:1097B00000000000000000000000000000000000A9 -:1097C0000000000000000000000000000000000099 -:1097D0000000000000000000000000000000000089 -:1097E0000000080008000000000000000000000069 -:1097F0000000000000000000000000000000000069 -:109800000000000000000000000000000000000058 +:1094B0000000000000004000900040000000000894 +:1094C0000000000040030000210000000000000038 +:1094D0000041040000000400000001000000010041 +:1094E00084000800044100024000008400200000C5 +:1094F000001000000084080004000404000480043C +:109500000021000400040000000100000000000031 +:1095100000000000000000008000000008000000C3 +:109520000000000000000000030000000000000038 +:1095300000000800008400820000000800004100D4 +:109540000000000000000000000088000000000093 +:1095500000000000400000A00000111040020008C0 +:1095600020001000410000000011800008000800E9 +:1095700008002000000000000800000000000800B3 +:10958000000000800000000000000000000000005B +:1095900000000000100000000000040000000000B7 +:1095A00000000000000000000000080000000000B3 +:1095B000000008000800000000000000000000009B +:1095C000000084004000102002000000000008009D +:1095D0000040820082001040820000400500000030 +:1095E0009000C0090004001188401000000900002C +:1095F000000000004000000000000000001000001B +:109600000004000000040000000000000000000052 +:1096100000000000000000000000000080000000CA +:10962000000000000000000000000000000000003A +:1096300000000800410000000010000000000000D1 +:109640000000000800008000000080000000000012 +:1096500010004000100010009000000000004000CA +:109660000090000040040000000000000000000026 +:10967000002000000000000000000000840800003E +:10968000009020800000008000002000008000800A +:1096900000000000000000000000000000000000CA +:1096A00000000000000000400000000000008200F8 +:1096B00000000000000000080000900000002004EE +:1096C0000005000300000000820000000000000010 +:1096D000108800030000C000000200000000A0008D +:1096E00010820800080020000000000000000100B7 +:1096F00010A100A0040200A0002011000000110031 +:109700001188032083200304050440008000000426 +:10971000000400000800080000C000000000000075 +:109720000000000408004020400008000000000085 +:1097300000000000000021000001210000100000D6 +:109740008001000000000000000000000000000098 +:109750000000004000000004000000004020100055 +:109760000000800304000084800421000300030043 +:10977000409011020000000000000000900404006E +:109780008800900040000008000000000000002059 +:1097900000000000000000020000000000000000C7 +:1097A00000000000004100000000000000008800F0 +:1097B00000008203000000000000000084000000A0 +:1097C0000021000000080008000000000021000047 +:1097D0000000000000000000000010000000100069 +:1097E00000000100410040020004000005000000EC +:1097F000000800000000000000000000200000043D +:1098000000822000000400002000000000C00000D2 :109810000000000000000000000000000000000048 -:1098200000000000000008044100031008000000D0 -:109830000000000000000000000000000000000028 +:109820000000000000000000000000000000000038 +:109830000000000000080000000000000000000020 :109840000000000000000000000000000000000018 :109850000000000000000000000000000000000008 -:1098600000000000000000000000000000000000F8 -:1098700000000000000000000202009000004040D4 -:1098800000000000000000000000000000000000D8 -:1098900000000000000000000000000000000000C8 -:1098A000000000000800000002A0004090A0008816 -:1098B00000000000000000000000000000000000A8 -:1098C0000000000000000000000000000000000098 -:1098D0000000000000000000000000000000000088 -:1098E0000000000000000000000000000000000078 -:1098F00000000000000000000000808000800000E8 -:109900000000000000000000000000000000000057 -:109910000000000000000000000000000000000047 -:109920000000000020000000000080800080008017 -:109930000000000000000000000000000000000027 -:109940000000000000000000000000000000000017 -:109950000000000000000000000000000000000007 -:1099600000000000000000000000000000000000F7 -:109970000000000000000000000000008000000562 -:1099800080008000000000000000000000000000D7 -:109990000000000000000000000000000000008047 -:1099A0000000008010000000100000800000000394 -:1099B00080C0000000000000000000000000000067 -:1099C0000000000000000000000000000000000097 -:1099D0000000000000000000000000000000000087 -:1099E0000000000000000000000000000000000077 -:1099F0000000000000000000000000000000020065 -:109A000000008420904000000000000000000000E2 -:109A10000000000000000000000000000000000046 -:109A20000004000000040100004001000004C00028 -:109A30008201A0A09040080020000000000000006B -:109A40000000000000000000000000000000000016 -:109A50000000000000000000000000000000000006 -:109A600000000000000000000000000000000000F6 -:109A700000000000000000000000000000000000E6 -:109A80009000009090901002000000000000000084 -:109A900000000000000000000000000000000000C6 -:109AA00000000000040000000001000004010000AC -:109AB00090210000000002200000000000000000D3 -:109AC0000000000000000000000000000000000096 -:109AD0000000000000000000000000000000000086 -:109AE0000000000000000000000000000000000076 -:109AF0000000000000000000000000000000000066 -:109B00000000800000008080008000000000000055 -:109B10000000000000000000000000000000000045 -:109B200000000500000080000000050800058021FD -:109B3000001000080000002080000000000000006D -:109B40000000000000000000000000000000000015 -:109B50000000000000000000000000000000000005 -:109B600000000000000000000000000000000000F5 -:109B700000000000000000000000000000000000E5 -:109B800000000000800000900000000000000000C5 -:109B900000000000000000000000000000000000C5 -:109BA0000000000000000040000000000002002053 -:109BB0000000000000100080008080000000000015 -:109BC0000000000000000000000000000000000095 -:109BD0000000000000000000000000000000000085 -:109BE0000000000000000000000000000000000075 -:109BF0000000000000000000000000000000000065 -:109C000000000000000090008841400800000000B3 -:109C10000000000000000000000000000000000044 -:109C20000000000000000000000100000000000132 -:109C3000000100000000880182C082401000000086 -:109C4000000000A000000000000000000000000074 -:109C50000000000000000000000000000000000004 -:109C600000000000000000000000000000000000F4 -:109C700000000000000000000000000000000000E4 -:109C800000000000000000000000000007000000CD -:109C900000000000000000000000000000000000C4 -:109CA00000000000000000000000000007000000AD -:109CB000810000E0070000000000000007008800AD -:109CC0000000000000000000000000000000000094 -:109CD0000000000000000000000000000000000084 -:109CE0000000000000000000000000000000000074 -:109CF0000000000000000000000000000000000064 -:109D00000000000000000000000000FF00FF0A0A41 -:109D10005F5F000000000000000000000000000085 -:109D20000000000000000000000000000000000033 -:109D300000000000000000000000828E828200000F -:109D400028280000000000000000000000000000C3 +:10986000830000004002C00080C14100020084006B +:1098700000400900000020820000000000000000FD +:109880000000000000000000009183A004C082409E +:1098900000018200820100010000000000000000C1 +:1098A00000000000000000000000000000000000B8 +:1098B00000000000000000000000000100000001A6 +:1098C000000100000000840000008800000000008B +:1098D00008000100000800000088000000000000EF +:1098E0000000000000000400000010004000000024 +:1098F000900100000100A000000000000000000036 +:109900000000000000000000000040110200804143 +:109910000005001100090002002000000000000006 +:109920000000000000000000000000000000000037 +:1099300000000000000000000000000000410009DD +:1099400000100010000020008000000080000000D7 +:1099500000000000100000001100000000000000E6 +:10996000000000000000040000000000000580115D +:10997000000380030000020000000000000000005F +:109980000000000000000000000000004180000313 +:1099900011C0030341000900114000030000000052 +:1099A00000000000000080000000800000000000B7 +:1099B00000000000000000000000000000000000A7 +:1099C00080000000800011002100020004850000DA +:1099D00000000000800000008021808080000000E6 +:1099E0000008000000001000030005004182800014 +:1099F00020001111C000400003001100030000000E +:109A000000000000000000000000000000008404CE +:109A1000900101C0A12100A0000001000001000090 +:109A20000000000000000200100010009000000084 +:109A30000000000000000000000000000000000026 +:109A40000000100000000800002001000000008855 +:109A50002000900020000200000010881002C000CA +:109A6000000000000004000001100000000001A13F +:109A700088009100910104000400A00090002000E3 +:109A800000000000000000000000000000000000D6 +:109A9000000301C004A08341000101008201000114 +:109AA00000000000000000000000000000000000B6 +:109AB00000000000000000000000000000000000A6 +:109AC0000000000000000100000000000000000095 +:109AD000000100040088009000C1000000000000A8 +:109AE0000100000000000000000000000000000075 +:109AF000000000400082214000040000000100013D +:109B00000001000000000000000000000000000054 +:109B1000000000C0020085080211000210090020A8 +:109B20000011000000000000000000000000000024 +:109B30000000000000000000000000000000000025 +:109B400000000000000000000900000000200002EA +:109B5000000400110020008000A000900020000000 +:109B600000000900000000000000000000090009DA +:109B70000002000000800080080020800005000333 +:109B80000040400500000000000000000000000050 +:109B90000000000040828085050003400085090028 +:109BA0000200034000000000000000000009000067 +:109BB00000000000000000000000000000000000A5 +:109BC00000000000000000000080000000004120B4 +:109BD0000400410010000000000000000000000030 +:109BE0000080000000000000000000000000418034 +:109BF000000000004041008400000000000500005B +:109C0000000000210005000000000000000000002E +:109C100000000000000000410882404004010040B4 +:109C20000000010000010000000000000000000032 +:109C30000008008800000000000000000000000094 +:109C40000000000000000000000000020002000010 +:109C5000010400000000000000000004009000006B +:109C600008008882080010008800A000C0000400DE +:109C7000018800000000000100C000A000100000EA +:109C80000000008400A100000000000000000000AF +:109C90000000000000000000818100E007000021BA +:109CA000810000E000000000000000000000000053 +:109CB000008100000700000000000000000000001C +:109CC00000000000000000000000000000E00000B4 +:109CD0000000000000E0000000000000000007009D +:109CE0000000000000E00000000000000000000094 +:109CF0000000500001E000000041810000E007008A +:109D000084000000000000000000000000000000CF +:109D100000000000000000000000B4BEB4BE00FF60 +:109D20003C3C0000000000000000000000000000BB +:109D30000000000000000000000000000000000023 +:109D40000000000000000000000000000000000013 :109D50000000000000000000000000000000000003 -:109D600000000000000000000000000000000000F3 +:109D6000FFFF00003F3C555500000000A8E9BCFD86 :109D700000000000000000000000000000000000E3 -:109D8000000000000000000000000000A0A0AFAF35 -:109D90000A5F0A5F000000000000000000000000F1 -:109DA00000000000000000000000000000000000B3 -:109DB000000000000000000000000000828282829B -:109DC0000000282800000000000000000000000043 +:109D800000000000000000000000000000000000D3 +:109D9000000000000000000000000000141E141E5F +:109DA000F0F0F0F0000000000000000000000000F3 +:109DB00000000000000000000000000000000000A3 +:109DC0000000000000000000000000000000000093 :109DD0000000000000000000000000000000000083 -:109DE0000000000000000000000000000000000073 -:109DF0000000000000000000000000000000000063 -:109E00000000000000000000000000000000AAAAFE -:109E1000FF3C41C3410000000000000000000000C2 -:109E20000000000000000000000000000000000032 -:109E30000000000000000000000000000000B0F082 -:109E4000F1F0FFFFFEFE00000000CFCFCFCF0000FB -:109E50000000000000000000000000000000000002 -:109E600000000000000000000000000000000000F2 +:109DE0000000CBCB30003FFF55550000000080C184 +:109DF00094D50000000000000000000000000000FA +:109E00000000FFFFFFEF0000000000000000000066 +:109E100000000000000000000000000000005F1EC5 +:109E20004B0A2D2D2D2D0000000000000000000029 +:109E300000000000000000000000F5F00500000038 +:109E40000000000000000000000000000000000012 +:109E500000000000AFAF0F0F000000000000000086 +:109E60000000000004000000FFC3FFC30A0005005B :109E700000000000000000000000000000000000E2 -:109E800000000000000000000000000000000000D2 -:109E9000AAAAC3007DFF7D3C000000000000000076 -:109EA00000000000000000000000000000000000B2 -:109EB00000000000000000000000000000000000A2 -:109EC000F0F0F0F000FF00FF000000000C0C0C0CA4 -:109ED0000000000000000000000000000000000082 -:109EE0000000000000000000000000000000000072 -:109EF0000000000000000000000000000000000062 -:109F00000000000000000000000000000000000051 -:109F10000000000000080000000000000000000039 -:109F20000000000000000000000000000000000031 -:109F3000000005000A08050000A005610A0EC50919 -:109F400000A000610006000D0000000000000000FD -:109F50000000000000000000000000000000000001 -:109F600000000000000000000000000000000000F1 -:109F700000000000000000000000000000000000E1 -:109F800000000000000000000000000000000000D1 -:109F900000000000000000000000000000000000C1 -:109FA00000000000000000000000000000000000B1 -:109FB00000000000000000000000000000000000A1 -:109FC000003055750000000028EB28EB0000000071 -:109FD0000000000000000000000000000000000081 -:109FE0000000000000000000000000000000000071 -:109FF0000000000000000000000000000000000061 -:10A000000000000000000000000000000000000050 -:10A010000000000000000000000000000000000040 -:10A020000000000000000000000000000000000030 -:10A030000000000000000000000000000000000020 -:10A040000000000055550000000028EB28EB000040 +:109E800000000000FFFFFFFF000000007D417D415A +:109E900000000000000000000000000000000000C2 +:109EA0005F1E4B0A7D7D2828000000000000000096 +:109EB000000000000000000000000000C0C0000022 +:109EC0000000000000000000000000000000000092 +:109ED00000000000000005050F0F0000000000005A +:109EE00000000000000000000000FFC3FFC30A00E4 +:109EF000050000000000000000000000000000005D +:109F0000000000000000AAFBFBFB000000003F3F38 +:109F1000030300000000000000000000000000003B +:109F20000000006100288001000000610000800145 +:109F300000000000000000000000000000300000F1 +:109F40000000000000000000000000000000000011 +:109F50000000000000210006000D00000061000666 +:109F60000001000000610006004D000100613007A3 +:109F7000000900050000000000000000004000068D +:109F8000C00D000000610006C01500000061000661 +:109F9000000D0000000000000000000000000000B4 +:109FA000000000005F5F505014BE14BE35FF35FF47 +:109FB000202F707F00000000000000000000000063 +:109FC0000000000000000000000000000000000091 +:109FD00000000000000000000000000000000A0077 +:109FE000E1E3C0A0CFAF000000000000003C000093 +:109FF0000000C3C3C3C30000000000000000000055 +:10A000007D7D0F0F0F0F000000000000000000001A +:10A010000000F000F0000000000000000000000060 +:10A020000000000000005C5C5C5C1414BEBE3500E7 +:10A030003500202F707F00000000000000000000AD +:10A040000000000000000000000000000000000010 :10A050000000000000000000000000000000000000 -:10A0600000000000000000000000000000000000F0 -:10A0700000000000000000000000000000000000E0 -:10A0800000000000000000000000000000000000D0 -:10A0900000000000000000000000000000000000C0 -:10A0A00000000000000000000000000000000000B0 -:10A0B00000000000000000000000000000000000A0 -:10A0C0000000000000C300C300000000000000000A -:10A0D0000000000000000000000000000000000080 -:10A0E0000000000000000000000000000000000070 +:10A06000EB40000200A00FAF000000000000003C29 +:10A0700000000000C3C3C3C30000000000000000D4 +:10A080003C3CFFFF0E0F0E0F000000000000000020 +:10A0900000000000B000F000000000000000000020 +:10A0A0000000000000000000AFAF050500FF3C3CD1 +:10A0B000FC550C553A3A3A3A000000000000000006 +:10A0C0000000000000000000000000000000000090 +:10A0D00000000000000000000000F3000CFF000082 +:10A0E0000000000000003CFF3CF000000000000009 :10A0F0000000000000000000000000000000000060 -:10A10000000000000000000000000000000000004F -:10A11000000000000000000000000000000000003F -:10A12000000000000000000000000000000000002F -:10A13000000000000000000000000000000000001F -:10A1400000000000000000C300C300000000000089 -:10A1500000000000000000000000000000000000FF -:10A1600000000000000000000000000000000000EF +:10A100000000000000007D7DF050CFFF00000A5FDE +:10A11000AAFF0000000003C2C3C20000000000004C +:10A12000000000000000000000003C3C3C3CAAAAEB +:10A13000AAAAFC550C550AFA0AFA00000000000011 +:10A14000000000000000000000000000000000000F +:10A15000000000000000000000000000F3FF0C0001 +:10A1600000000000000000003C003CF00000000087 :10A1700000000000000000000000000000000000DF -:10A1800000000000000000000000000000000000CF -:10A1900000000000000000000000000040008200FD -:10A1A0002000000000004000A0042000000020006B -:10A1B000000020000000000000000004000000007B -:10A1C000C008000000000000C0000000880020005F -:10A1D000000020000000000004004000000000001B -:10A1E0000000000210000000000000000004000059 -:10A1F00020000000200000000000200002000000FD -:10A200000002080020000000000000000000000024 -:10A21000000000000000000000000000000000003E -:10A22000000000000000000000000400000020000A -:10A230000000000010000000000004020008404080 -:10A24000000000000000000000000000009000007E -:10A25000000200004100400000004000100000002B -:10A2600000000000000000000000000020000000CE -:10A27000000000000000000000000000400011008D -:10A28000000000008000000000000000400000000E -:10A29000000000000000000000000000200000009E -:10A2A000000002000005000000000200040000049D -:10A2B0000200000000000000000001090000001082 -:10A2C00000000000000009000000820000050900F5 -:10A2D00000002040080020090000080000000140A4 -:10A2E00000000000000000008410000000000000DA -:10A2F00000000000000000100010004000000000FE -:10A300000000000000008880000000000000000045 -:10A310000000020002000010001000000000000019 -:10A32000000004000304020000000004050000080F -:10A3300000000900000000000004400002040004C6 -:10A340004008020000000000C0000000000000847F -:10A35000C00000000200C000040000008000008275 -:10A3600008100000000000000208040000000000C7 -:10A3700002000200000000000400200000000200B3 -:10A38000028200000900000004100000000000002C -:10A3900000000000000000000000040000000000B9 -:10A3A00000000000000000000000C00000000000ED -:10A3B0000000000000000000000582000000000016 -:10A3C00000000200000090000000000000000000FB -:10A3D00000000000000040000000000090000000AD -:10A3E0000008000000000011000000000004000050 -:10A3F00000000000000000000000820000000000DB -:10A4000000000000000082000000000000000000CA -:10A41000000000000000000000000000000000003C -:10A42000000000000000000000000000000000002C -:10A4300000000000002000002100000000000000DB -:10A4400000000000000009000800000000000900F2 -:10A45000000005000800000004000000009000005B -:10A4600000000000000000000000000000000000EC -:10A4700000000000000000000000000000000000DC -:10A4800004000000000000000000000000880082BE -:10A4900000000000000000000000000000000000BC -:10A4A0000000000000000000080000000000C000E4 -:10A4B0000000000000000000821000000004820084 -:10A4C00000000840100008008202000008C00000E0 -:10A4D000000008000800C040000088890009011140 -:10A4E00000000040000000400000000000000820C4 -:10A4F0000000000000400000000008000000820092 -:10A500000000000000000020040000000000000027 -:10A510000100000000000000000000000800000032 -:10A5200008200020000000000000000000040000DF -:10A53000000000000000000000000000000000001B -:10A540000000000000000000000000000000000209 -:10A5500003000000020000000000004000020000B4 -:10A5600008000000000000000400000000000300DC -:10A5700000000000000000000000000000000000DB -:10A58000040000000000000000000800040040007B -:10A59000000008000000000021000300000000008F -:10A5A00000000000000000000000000000000000AB -:10A5B000000000000000000000000000000000009B -:10A5C0000000000000000000000000000800000083 -:10A5D0000008001100000000002140000000000001 -:10A5E00020004000000400000000001100000011E5 -:10A5F000000000000020000000000000000000003B -:10A60000000000000000000000000000000000004A -:10A61000000000000000000000000020000000001A -:10A6200000000000000000000000000000004000EA -:10A63000050000040000000000000000000003000E -:10A64000000000000000000000000000000000000A -:10A650000000000000000000030400200300048844 -:10A66000050440000500000000000000000000009C -:10A6700000000000000000000000000000000000DA -:10A6800000000000000000000000000000000000CA -:10A6900000000000000000000000000000000000BA -:10A6A00000000000000000000000000000000000AA -:10A6B0000000000000000000000008000000000092 -:10A6C0000000000000000000000000000008000082 -:10A6D00000000000008000000000000000000000FA -:10A6E00000000000820000800000000000000180E7 +:10A1800000000000000000002828F050CF3C000034 +:10A190000A5F0A5F0000000003C2C3C200000000A3 +:10A1A000400000104102014000042009C0000000EE +:10A1B00000002000000000004000040000004000FB +:10A1C00020000000200000004000200000004000AF +:10A1D000000020000000010021000800000304002E +:10A1E00020002000400000008400200010008800B3 +:10A1F000880000008200880001000000200020008C +:10A20000200020002040080002008800009020006C +:10A2100000008800408521008900890021804000DD +:10A22000000000000000200120C1000100004000EB +:10A23000000000000000000040000000000040009E +:10A24000000000000000400000000002000040008C +:10A25000000000000000400008000400C1000000F1 +:10A2600000004000000080000000000040000000EE +:10A27000000020000000040000000800000004406E +:10A28000000240008400C101800080000000001135 +:10A29000C0404100000041024000404040C0400436 +:10A2A0000000000000000805000490832004000561 +:10A2B000000000000000000000000000000000009E +:10A2C0000000000000000000000000000000020884 +:10A2D000000000000010001000000000000000005E +:10A2E0000000000900000000000000000000000065 +:10A2F0000000000000000410040000001000000036 +:10A30000000082000800000002009000020090009F +:10A310000310000003020200009000000080000013 +:10A3200000020000000000000088001100048811F5 +:10A3300000A0001000100010001000000400040035 +:10A34000000000000000000000000000000000000D +:10A3500000000000000000000000000000000000FD +:10A3600000080000000000000000000800000008D5 +:10A370000500000804000000000020100400000098 +:10A3800004001008000000000000030800000004A2 +:10A39000000008850400400100100020000000407B +:10A3A000000009110000000004000400000001008A +:10A3B00041002100000010001000A0210000002139 +:10A3C00000000008900000000000000800000008E5 +:10A3D000000000000000000000000000000000007D +:10A3E0000000000000000000000800000000000065 +:10A3F00000419000900800000000000000000000F4 +:10A400000000000000000400000005000010000033 +:10A41000000000100000200000800000A000A0004C +:10A42000000090000802000000000482000000000C +:10A430004004200088000000000000000000000030 +:10A440000000030000000000000000000000000009 +:10A45000000000000000000000A00000000000005C +:10A460000000000003000000110040010000000097 +:10A47000030000004100410005000000000000A0B2 +:10A4800000000000000000000000000008000003C1 +:10A4900000000000410103A08000000200000990BC +:10A4A0001020000000080001000000000000004132 +:10A4B0000000000408000000000000000000000090 +:10A4C000000000000000000000000000000000008C +:10A4D0000000000000000800000000000000000074 +:10A4E00008040000000000000000100004008400C8 +:10A4F0000000080000000000000000000000000054 +:10A500001021200000000800C0002000000008000A +:10A5100082808440080490408200004008090004C2 +:10A520004040000900110009018500000000000002 +:10A530000000000000A1000000000000000000007A +:10A54000000000000000000000000000000000000B +:10A5500000000000000000000000080000000000F3 +:10A560000000809000000000000000000082000059 +:10A5700000000000000000000000000010000000CB +:10A58000000000082000000405000000800000001A +:10A5900000000040030000000588400000000000AB +:10A5A0000000000000404100001020209000040046 +:10A5B00004000400C180010400800080000000004D +:10A5C000000000000000000000000000000000008B +:10A5D000000000000000000000000000000000007B +:10A5E000000000000800000000000000000004035C +:10A5F00001000000404000000000000000200400B6 +:10A6000000000000000002009000842040000000D4 +:10A61000C0000000820010000809820082002100B2 +:10A620000100900008800000000000004080002031 +:10A6300000000000000020102001000200022100A4 +:10A6400000000000410021000000000000000000A8 +:10A6500000000000000000000000000000080000F2 +:10A66000000000000000800000000000000000006A +:10A6700000901000040000000000000000000090A6 +:10A68000040000000300000000900090000404009B +:10A6900000000004000000000000800000002120F5 +:10A6A0002000400000000020000040000400800264 +:10A6B000020000009000000008000000000002807E +:10A6C0002011002000000020000000000000000019 +:10A6D000000000000000000000000000000000007A +:10A6E0000800000000000000010000000000000061 :10A6F000000000000000000000000000000000005A -:10A700000000000000000000000000000000000049 -:10A710000000000000000200000000000000000037 -:10A720000000000000000000000000000000000029 -:10A730000000000000000000000000000000000019 -:10A740000000000000000000000000000800000001 -:10A7500008000000020000020010000000000200DB -:10A7600008000200000000000002000000000000DD -:10A770004002000000000000000000000000000097 -:10A7800000000000000000000200000000000000C7 -:10A7900000000000000000000000000000000000B9 -:10A7A0002100000000000000000000000000000088 -:10A7B0000000080000000000000000000000000091 -:10A7C0000000000000000000000000000000000089 -:10A7D0000000000000000000040000000000000075 -:10A7E00000000000A0000000020020001010002067 -:10A7F0001002409000000000000000000000000077 -:10A800000000000000000000000000000000000048 -:10A810000000000000001000000000000000000028 -:10A820000000000000000000000000000000000028 -:10A830000000000000000000000000000000000018 -:10A840000000000000000000000000000000000008 -:10A8500000000000000040000000000000000000B8 -:10A860000000000000004000210080000000000007 -:10A8700003008080000000000000000000000000D5 +:10A7000000000000000000000000200000008400A5 +:10A710000000000000000000090000809000080018 +:10A720000800080084000000022000000040000033 +:10A730000082000000000000000080000000000017 +:10A740000004000000000000000000000000000005 +:10A7500000000000000000000000000000000000F9 +:10A7600000000000000000000008080000000000D9 +:10A7700008000000000000000000000000000000D1 +:10A7800000000800000000000008000000040000B5 +:10A790000000000000000040000020000010000049 +:10A7A00000100000000000840000400102040020AE +:10A7B0000040210500000000000000000101080128 +:10A7C0000800000100000000000000000000000080 +:10A7D0000000000000000000000000000000000079 +:10A7E000000000000000000000000000C1A00810F0 +:10A7F0000010022000000000010020000000000006 +:10A800000000000000000000000000000000001038 +:10A81000002000020008118900918491001010822C +:10A82000009000820808A001000108010200010058 +:10A830000000820100000000000000000000114044 +:10A8400089202041000200000000000000000000FC +:10A8500000000000000000000000000000000000F8 +:10A860000000000000000000000000000000108058 +:10A870000000008000000000000003000000000055 :10A8800000000000000000000000000000000000C8 -:10A8900000000000000000000000000000000000B8 -:10A8A00000000000000000000000000000000000A8 -:10A8B0000000000000000000000000000000000098 -:10A8C0000000000000000000000000000000000088 -:10A8D00000008000000000001100210020000000A6 -:10A8E0000000000000000000000080008000002048 -:10A8F00000000000800000000000000000000000D8 +:10A89000008000000000000011912121A011002083 +:10A8A0000000000000000080001120210020800036 +:10A8B00020020510400800200000000000000000F9 +:10A8C0008382A1090010A103000000000000000025 +:10A8D0000000000000000000000000000000000078 +:10A8E0000000000000000000000000000000000068 +:10A8F00080000010808000000000000000000000C8 :10A900000000000000000000000000000000000047 -:10A9100000000000000000000000000000008000B7 -:10A920000000000000000000000000000000000027 -:10A930000000000000000000000000000000000017 -:10A940000000000000000000000000000000000007 -:10A950000000000010000000000090000000000057 -:10A9600010000000840040000000908810001000DB -:10A97000000002004000A0000000000000000000F5 -:10A9800000000000000000000000000000000000C7 -:10A990000000000000000000000000004000000077 -:10A9A000A000000000000000000000000000000007 -:10A9B0000000000000000000000000000000000097 -:10A9C0000000000000000000000000000000000087 -:10A9D0000000000000000000000000000001000076 -:10A9E000000000000001000100010000008800A13B -:10A9F000008401C14020002140208889000000001F -:10AA00000000000000000000000000000000000046 -:10AA10000000000000000000000000000000002016 -:10AA20000090002000100000000000000000000066 -:10AA30000000000000000000000000000000000016 -:10AA40000000000000000000000000000000000006 -:10AA500000000000000000000000000000000008EE -:10AA600000000010000000100004000200000008B8 -:10AA70000040009020088000008800100090000036 -:10AA800000000000000000000000000000000000C6 +:10A9100000000000000000000000118021809180F4 +:10A920002090000000008000000080008000804037 +:10A930000002200003002000C19000000000000081 +:10A94000000008C009000808030100000000000022 +:10A9500000000000000000000000000000000000F7 +:10A9600000000000000000000000000000000000E7 +:10A970000000A00010014082200000000000000044 +:10A9800000000008000000000000000000000000BF +:10A99000000000000000000000000000090209C0E3 +:10A9A000A1A0088920008200A0000000022004006D +:10A9B000A0010001880290000000050900000000CD +:10A9C0000000000000000300C001000100000000C2 +:10A9D0000000000000000000000000000000000077 +:10A9E0000000000000000000000000000000000067 +:10A9F00000000000901000100084C0A000000000C3 +:10AA00000001000000010000000000000000000044 +:10AA100000000000000090000000000088009090FE +:10AA2000000000101110C02000100090A0200002B3 +:10AA300000910020000800000100900000010000CB +:10AA400000000000000000414004854002030000B7 +:10AA500000000000000000000000000000000000F6 +:10AA600000000000000000000000000000000000E6 +:10AA700000000000000000800000008090800000C6 +:10AA80000011001000030041000000000000000061 :10AA900000000000000000000000000000000000B6 -:10AAA0000000000000000080000000000000000026 -:10AAB0000000000000000000000000000000000096 -:10AAC0000000000000000000000000000000000086 +:10AAA000000300000580212080000000000000005D +:10AAB00000C00008000800A000400420034100047A +:10AAC0000000000000000000859008114180A000F7 :10AAD0000000000000000000000000000000000076 -:10AAE0000000000000000011000000000000000055 -:10AAF00020022000208040000011000000800000A3 +:10AAE0000000000000000000000000000000000066 +:10AAF0000000000000000000800400820000000050 :10AB00000000000000000000000000000000000045 :10AB10000000000000000000000000000000000035 -:10AB20000000000000000000000000000000000025 -:10AB30000000000000000000000000000000000015 -:10AB40000000000000000000000000000000000005 -:10AB500000000000000000000000000000040020D1 -:10AB600000000000000000880000000000880000D5 -:10AB700000000100001001400100000000900004EE -:10AB800000000000000000000000000000000000C5 +:10AB200000004105900008801103000000000000B3 +:10AB300000000802038040801000408903090900DA +:10AB4000000800000000000000004003040588C069 +:10AB500009000000000000000000000000000000EC +:10AB600000000000000000000000000000000000E5 +:10AB700000000000000000000000040188100888A8 +:10AB80009000000000000000000000000000000035 :10AB900000000000000000000000000000000000B5 -:10ABA0000000000000000040000000000000000065 -:10ABB0000000000000000000000000000000000095 -:10ABC0000000000000000000000000000000000085 -:10ABD0000000000000000000000000000000000075 +:10ABA0000000000001200288110211000000009046 +:10ABB0000090C000000100200004010001410002DB +:10ABC000000400000000000000000000000000E0A1 +:10ABD000000060060000000000000000000000000F :10ABE0000000000000000000000000000000000065 -:10ABF0000000000000000000000000000000000055 -:10AC00000000000000000000000000000000000044 +:10ABF00000000000000000000000000000810000D4 +:10AC000007000082000000000000000000000000BB :10AC10000000000000000000000000000000000034 -:10AC20000000000000000000000000000000000024 -:10AC30000000000000000000000000000000000014 -:10AC40000000000000000000000000000000000004 -:10AC500000000000000000000000000000000000F4 +:10AC2000000000000000810000E00000840000003F +:10AC3000000000005000821100E007040000004105 +:10AC400000E00700000000000000000000003C7869 +:10AC50003C3C00000000000000000000000000007C :10AC600000000000000000000000000000000000E4 -:10AC700000000000000000000000FFFF00000000D6 -:10AC8000000003C30FFF00000000000000000000F0 +:10AC700000000000000000000000000000002000B4 +:10AC80000000008000000000000000000000000044 :10AC900000000000000000000000000000000000B4 -:10ACA000000000000000000000000000000000089C -:10ACB0000000000000000000000000000000000094 +:10ACA0000000000000000000FF7FFF7F0000E7249D +:10ACB000C3C3C3C30080008100000000181C181823 :10ACC0000000000000000000000000000000000084 -:10ACD0000000000000000000000000000000000074 +:10ACD0003C3C3C3C00000000000000000000000084 :10ACE0000000000000000000000000000000000064 -:10ACF000000000000000000000000000FFDF200056 -:10AD0000000000000181099900000000000000001F +:10ACF0000000000000000000000000000000000054 +:10AD00000000000000000000000000000000000043 :10AD10000000000000000000000000000000000033 -:10AD20000000000000000000000000000000000023 -:10AD3000000800000000000000000000000000000B -:10AD40000000000000000000000000000000000003 +:10AD200000000000000000000000FF7FFF7F000027 +:10AD3000E724C3C3C3C300800000000000003C3C04 +:10AD40003C3C00000000000000000000000000008B :10AD500000000000000000000000000000000000F3 :10AD600000000000000000000000000000000000E3 :10AD700000000000000000000000000000000000D3 @@ -121593,493 +121593,493 @@ :10ADA00000000000000000000000000000000000A3 :10ADB0000000000000000000000000000000000093 :10ADC0000000000000000000000000000000000083 -:10ADD0000000000000000000000000000000000073 -:10ADE0000000000000000000F6F6F6F6000000008B -:10ADF000FFFF3C3C00000000096F096F00000000ED -:10AE0000FB38FB3889000000FF07FF070000000047 +:10ADD00000000000000000003C343C3D000000008A +:10ADE0000000000000000000000000000000000063 +:10ADF0000000000000000000000000000000000053 +:10AE0000000000002000202C0000002000000000B6 :10AE10000000000000000000000000000000000032 -:10AE20000000000000000000000000000000000022 -:10AE300000000018001800000000000000000000E2 -:10AE40000000000000000000000000000000000002 -:10AE500000000000000000000000000000000000F2 -:10AE600000000000000000000000060606060000CA -:10AE7000000000003C3C00000000096F096F00006A -:10AE80000000FBFBFBFB08000000FF04FF040000C8 +:10AE20000000000000000202020E00000000FF6FA0 +:10AE30000F0FFFFF0000909080984AFF4AFF00002C +:10AE4000000099FF99FF00000000EFEFFFFF0000F6 +:10AE5000000000000000000000003C3C3C3C000002 +:10AE600000000000000000000000000000000000E2 +:10AE700000000000000000000000000000000000D2 +:10AE800000000000000000060006000000000000B6 :10AE900000000000000000000000000000000000B2 -:10AEA00000000000000000000000000000000000A2 -:10AEB0000000000000180018000000000000000062 -:10AEC0000000000000000000000000000000000082 -:10AED0000000000000000000000000000000000072 -:10AEE0000000000000000000000000000000000161 -:10AEF00000610006000D000000610006000D00006A -:10AF000000610006000D000000614006000D000019 -:10AF10000000000000000000000000000000000031 +:10AEA00000000000000000000000000C0000000096 +:10AEB000E7E70F0F00D900000000001808FF08FFA7 +:10AEC0000000000019FF19FF000000002020000012 +:10AED000000000000000000000610007000D0001FC +:10AEE0000000000000000000000000000000000062 +:10AEF0000000000000000000000000000000000052 +:10AF00000000000000000000000000280000000019 +:10AF1000000000610006000D0000000000000000BD :10AF20000000000000000000000000000000000021 -:10AF30000000000000000000000000000000000011 -:10AF40000000000000000000000000000000000001 -:10AF500000000000000000000000000000000000F1 -:10AF600000000000000000000000000000000000E1 -:10AF70000000000000003CAA3CAA0000000030F3E2 -:10AF800030F32D3C3C3C28EB000000000000AFAF4C -:10AF900000FF0000000000000000000000000000B2 +:10AF3000000000613003C0110000000000000000AC +:10AF4000000100610032C00D00000061003F0009F7 +:10AF500000A10000000000000000BFFF010000F79A +:10AF600008FF0000000000000000000000000000DA +:10AF700000000000000000000000000000000000D1 +:10AF800000000000000000000000000000000000C1 +:10AF90000000000000000000000800880000000021 :10AFA00000000000000000000000000000000000A1 -:10AFB0000000000000000000000000000000000091 -:10AFC0000000000000000000000000000000000081 -:10AFD0000000000000000000000000000000000071 -:10AFE0000000000000000000000000000000000061 -:10AFF00000000000000000003CAA3CAA0000000085 -:10B0000030F330F33C3C3C3C0000C0C0000000008A -:10B01000AFAFFFFF000000000000000000000000D4 +:10AFB000000000000400C6C35555D7D700000000AC +:10AFC0000000000001000000C3C3C3C30000000074 +:10AFD000C0C0C0C00000000000000000FFFF000073 +:10AFE00000FF00FF00000000000000000000000063 +:10AFF0000000000000000000000000000000000051 +:10B000000000000000000000000000000000000040 +:10B010000000000000000000000000008080000030 :10B020000000000000000000000000000000000020 -:10B030000000000000000000000000000000000010 -:10B040000000000000000000000000000000000000 -:10B0500000000000000000000000000000000000F0 -:10B0600000000000000000000000000000000000E0 -:10B070000000000000000000000020002000000090 +:10B030000000000000000000C3C3555514140000B8 +:10B0400000000000000000000000F505FFFF000008 +:10B0500000A028EB00C30000000000000000AFAF1C +:10B0600005050000000000000000000000000000D6 +:10B0700000000000000000000000000000000000D0 :10B0800000000000000000000000000000000000C0 :10B0900000000000000000000000000000000000B0 :10B0A00000000000000000000000000000000000A0 -:10B0B0000000000000000000000000000000000090 -:10B0C0000000000000000000000000000000000080 -:10B0D0000000000000000000000000000000000070 -:10B0E0000000000000000000000000000000000060 -:10B0F0000000000000000000000000002000200010 +:10B0B000000000000000000000FFFF0030CF75DF3F +:10B0C0000000000000000000FFF0FF000000000092 +:10B0D00096FF060FC00FFA000000000000000000FD +:10B0E0003C003C00030300000000000000000000E2 +:10B0F0000000000000000000000000000000000050 :10B10000000000000000000000000000000000003F :10B11000000000000000000000000000000000002F :10B12000000000000000000000000000000000001F -:10B13000000000000000000000000000000000000F -:10B1400000000000000000000000000000000000FF -:10B15000000000000000000000002000400020006F -:10B16000880800001000000020000000880088040B -:10B17000000488000200A00440000000020040001B -:10B18000C0050000000000002000C00020000000FA -:10B19000000040000000000000000003000020004C -:10B1A000000000000000000000000200000000009D -:10B1B000000000002000000000000000000000006F -:10B1C000000000000000000000000000000000007F -:10B1D00000000000000000000000880000000000E7 -:10B1E00000200000000240020000000000000000FB -:10B1F00000000000000080000000800000008000CF -:10B200008000000000C0000000000000009000046A -:10B21000000000000002400010000000000040009C -:10B22000000000000000000000000000000200001C -:10B2300000000000000000004000000000000000CE -:10B2400000000000000000004100000000000000BD -:10B2500000000000000000000000000000000000EE -:10B2600000000000001000000000000802100000B4 -:10B270000040000000000100000800000010000075 -:10B280004000011001000000000408200110090026 -:10B29000000008104000204000100000881000004E -:10B2A00000000000000004000200004000000090C8 -:10B2B00000000000880000000000000000000210F4 -:10B2C0000400200004004010010000000180411033 -:10B2D000000000000000001120000000000000102D -:10B2E00009080008000400840082200800044008C7 -:10B2F000000800022008000840080004091009089E -:10B30000001080840890400400001102841008405E -:10B3100008080000800490040908004100000404AB -:10B320000000000400000004050000000000009080 -:10B3300004100404000004080008040400080000CD -:10B34000000004000000C10084014000000020044F -:10B3500084000000000005C000C0200000080000BC -:10B36000040000000000000840000002004000004F -:10B370000000002100000000081100000020000073 -:10B380000000400800000000000000000000C008AD -:10B390002000000000058800000884000000000074 -:10B3A00010800000002000000009000400000000E0 -:10B3B0000008000000000000000000000000000085 -:10B3C000000000000000000000000000000000007D -:10B3D00084000000000000000000000000000000E9 -:10B3E000000000000000000000000000000000005D -:10B3F000000000000000000000000300000000004A -:10B4000041000000000000004000000000000800B3 -:10B41000400240001000100008000000000000047E -:10B4200000A00040000000000000008800000000B4 -:10B430000000000000000000000000000000050007 -:10B4400000004100000000000000004000900000EB -:10B4500000000000000000000000000000000000EC -:10B4600000000000000000000800A00008008200AA -:10B470000000820082000000080000000000840933 -:10B4800000000009000000000004080084008200A1 -:10B490000040000440020002010000080000051006 -:10B4A0000040001000000000000000A008000000A4 -:10B4B000820040000000081010009000000002030D -:10B4C0000005000540058204000000000000008027 -:10B4D000000000000000080001000000000400045B -:10B4E000000000000000010041A0008405000200EF -:10B4F0000000000000000000000004000000000048 -:10B500000000210002C0004011840000210005A0BD -:10B5100003001088020084080001080200000000F7 -:10B5200008010009000108000000000000201000D0 -:10B5300008000000000000001001080000000000EA -:10B540004100038200000000000100000000000034 -:10B5500041204000400041000000080000000000C1 -:10B56000000000000000410040000000000000005A +:10B13000000000000000000000000CCFCF0C30CF5A +:10B14000208A0000000000000000FFF0FF00000067 +:10B15000000090F00000C00F0A0040000000400016 +:10B16000200400000000000000004000000000007B +:10B1700040008800000000000000200000002000C7 +:10B1800020008800000000000000200000000200F5 +:10B190002100200000000800020000020000000062 +:10B1A00000002005C1000000000001004000000078 +:10B1B000000000008800110020002000A100A10074 +:10B1C0000200000001000200010000004080200099 +:10B1D0008300A10020000000080000000000000023 +:10B1E000000000002100000000000000000000003E +:10B1F000000000004000000000000000000000000F +:10B20000400000000000000000000000400040007E +:10B21000C0004000000000008000800000004000EE +:10B22000000000000000400000000000400021007D +:10B23000000020002000200088000000000008001E +:10B2400020008004400008908000080021002002B7 +:10B2500089000400080010002000A1400000000048 +:10B26000900000000000000000000000000000004E +:10B27000000000002000000000000000001000009E +:10B280000000000000000000040000100808080989 +:10B29000000000100000000000000000001000008E +:10B2A0000010001008080000020000000000020961 +:10B2B000010010000000020000000000001000006B +:10B2C000002100800410080002000200080008208D +:10B2D0000800100000100090000000000000410471 +:10B2E00000000000000000080000008400000000D2 +:10B2F00000000000000000100000000000000040FE +:10B30000000004000400000800000000000000002D +:10B3100080000008000000000500000000000000A0 +:10B320000000000800000084001000000000000081 +:10B3300000104000000810000000000000000000A5 +:10B3400000000004001080841000800000008000D5 +:10B350000001040080080204040400004000020010 +:10B360008800000000000000000000000000000055 +:10B370000000880000000000080004000003000036 +:10B38000000000000000000000000000000020009D +:10B3900000000000040004000400000000000000A1 +:10B3A000000000000021000000000000000000007C +:10B3B0000400000004210000001082050000850048 +:10B3C000000004000021880090200000020000001E +:10B3D000008001800041000400040400000000001F +:10B3E0000000000000000000110000040800000040 +:10B3F0000000000000000008000000000000000045 +:10B40000000000000000000000000000000000003C +:10B4100000000000000000000000400000000000EC +:10B4200040000000000000900010000000400500F7 +:10B4300000000000000000000500100000000000F7 +:10B44000100040004000400000004001050483005F +:10B4500010844110081009000521410109C00000B5 +:10B4600000000800030000000000000000101000B1 +:10B470000040000000000000000000000000080084 +:10B4800000000000000000000000000800000000B4 +:10B490000000000000000021000000401005000036 +:10B4A00000000000010000000800000008008221E8 +:10B4B000080000000040000008000000822109048C +:10B4C00041040004200820008200A004C0002005E0 +:10B4D00008400000A1848290C0400040100000009D +:10B4E0000000004004400040008400000000000014 +:10B4F000000000000000000000000000000000004C +:10B500000000000000000000040000000000000037 +:10B51000000000000000000000900000000000009B +:10B52000000000000000080000000000000000A073 +:10B5300000A0000000001100000003000000000057 +:10B54000200910000041C10180C0008200000900F4 +:10B550008000000000900210092100C000000000DF +:10B560002000090410040900080000000000000089 :10B5700000000000000000000000000000000000CB -:10B580000800000000000000000008400800000063 -:10B59000A0000000000000020000900084000008ED -:10B5A0004000000084040040004000000040000013 -:10B5B000000000000400000000000000000008007F -:10B5C00000001000C00000000004000000000400A3 -:10B5D00000008211000000000000000000000000D8 -:10B5E0000000A000000000000000000000000000BB -:10B5F000000000000000000000000000000000004B -:10B600000000000000000000000000000000000436 -:10B61000000008A0000400000088200000900090B6 -:10B62000000020000088020011401100000002000C -:10B6300000000000110000000000000000000000F9 -:10B6400000000000000000000000000100000300F6 -:10B6500080000000009000000000000000000000DA -:10B6600000000000000000000000000000000021B9 -:10B6700000000000000000000021000000000000A9 -:10B680000400000010000200000008000800000094 -:10B69000000001080000C0410000000000000000A0 -:10B6A000000000000800000009880810A005000044 -:10B6B000000000000000002000000000000000006A -:10B6C00000000000000000008200000000000000F8 -:10B6D0000020822000200000000000000000040084 -:10B6E0000000000000000004000000000000010055 +:10B5800000000000000000000000000800000000B3 +:10B5900000000000000000000000000000000000AB +:10B5A0004000004100000000010200000011000006 +:10B5B000000000000000000000000000000000008B +:10B5C0001000200501002000840840054100000013 +:10B5D00084C1088000201000001008100000200026 +:10B5E0000000000082000000820000000000000057 +:10B5F000000000004000000000000090000000007B +:10B60000000000000020000000000000000000001A +:10B61000000000000000000000000000000000002A +:10B6200000000000020400000004020200002000EC +:10B63000000000001000000000000020004000009A +:10B640000000000082002020C084000104000800E7 +:10B65000050003200504080010000321800121C01B +:10B660008000200400002000040040400884000501 +:10B6700000000000000000110000000000000000B9 +:10B6800000000000000000000000000000000000BA +:10B6900000000000000000000000000000000000AA +:10B6A0000000000000000000000300000040000057 +:10B6B000000000000000000000000000000000008A +:10B6C00000000000100010000000C000000000108A +:10B6D0000210000405000008040000400010C01023 +:10B6E000000000040004000000000021040000002D :10B6F000000000000000000000000000000000004A :10B700000000000000000000000000000000000039 -:10B710002008030008000900030000000088410021 -:10B7200009004000000083080020080411014000C7 -:10B730000000410021000000400100001000000056 -:10B7400000000000100005000000000003080000D9 -:10B7500000000001000100010000000020000400C2 -:10B760000000000400000000400000000000110084 -:10B7700008000000000000000000000000000000C1 -:10B780000000000000000000000000000101900027 -:10B7900000010000000000000000000000000000A8 -:10B7A000000004000011000288104002018902110B -:10B7B0002000000041A09090008204900000000052 -:10B7C0000000000000000000000000000000010078 -:10B7D0000800000000200090000090900000000190 -:10B7E0004000000000000000000000000000000019 -:10B7F0000000000000000000000000000000000049 -:10B8000000000000000000000000000000400803ED -:10B8100000400008000000000000000000000000E0 -:10B82000000000008011008800400080009041105E -:10B830008088000800009080800000808000000068 -:10B8400000000000000000000000000000004000B8 -:10B8500010008800000020000080000080800000B0 -:10B8600000080010000000000000000000000000C0 +:10B710000000000000000000000000000000000029 +:10B720000000000000000000000000000000000118 +:10B730000000000000080000000000000000000001 +:10B7400000000000000003000084008400000000EE +:10B7500000108041410182C0000820000001020168 +:10B7600000410000000100910200204000000200A2 +:10B7700011040000000000000000000000000000B4 +:10B7800000000000000000000000000000000000B9 +:10B7900000000000000000000000000000000000A9 +:10B7A0000000000000000000000010080000000081 +:10B7B000C0000000000000000000000000000000C9 +:10B7C000C0010000000001008800000101A101206B +:10B7D000049100201108082000089020001020107B +:10B7E0000090900800000100C100000090000000DF +:10B7F000A000C000000000000000000000000000E9 +:10B800000000000000000000000000000000000038 +:10B810000000000000000000000000000000000028 +:10B820000000000000000000000000000000000018 +:10B830000000800000000000000000000000000880 +:10B84000110880080020001003110000004011C101 +:10B85000092188100008A100058208C000000580A9 +:10B8600080000000000000030909820400050000B8 :10B8700000000000000000000000000000000000C8 :10B8800000000000000000000000000000000000B8 -:10B89000000000008000850000008800000000001B -:10B8A0000000000000000000800080008000020016 -:10B8B000C12090A0880800008000802180080080BE -:10B8C0000000000000000000000000000000000078 -:10B8D0000080210000000808000000030080808034 -:10B8E000A000000391809080000000000000000094 -:10B8F0000000000000000000000000000000000048 +:10B8900000000000000000000000000000000000A8 +:10B8A0000000000000000000001100800000000007 +:10B8B0000041000000000000000000000000000047 +:10B8C00000000000000000000000000000000080F8 +:10B8D0002080032111C04100C08080088291400077 +:10B8E0000000801080808080C00041004011020074 +:10B8F00000008000000000000000000000000000C8 :10B900000000000000000000000000000000000037 -:10B91000900010001000044008900000A1000000FA -:10B920000000A000000082008800820008000808D3 -:10B9300090908200A1A00283000040008200A089B4 -:10B940002090900010000000100000000000000097 -:10B950000000001001000000000120000001004074 -:10B960009090A000000103900990000000000000EA -:10B9700000002000000000000000000000000000A7 +:10B910000000000000000000000000000000000027 +:10B920000000000000000000000000000010000007 +:10B9300082000021009008000000000000000000CC +:10B9400000000000000000000000000000000000F7 +:10B9500000080010000001910100A0C0020108824F +:10B96000200090000201A008908202200800080137 +:10B9700041000400080010009000000000000000DA :10B9800000000000000000000000000000000000B7 -:10B990000000000000000000000000C100010001E4 -:10B9A0000010000100A010880020409000091089BC -:10B9B00010A000080089104001890000C09000908C -:10B9C00000042090000000000000000000000000C3 -:10B9D0000000000000000000000100014020000005 -:10B9E00090900001000001008800010000000000AC -:10B9F0000000000000000001000000010000000045 +:10B9900000000000000000000000000000000000A7 +:10B9A0000000000000000000000000010000000195 +:10B9B000000188040008008401A0000000000000CD +:10B9C0000000000000000101000000000000000174 +:10B9D000000100010801000101000101901001882F +:10B9E000039109C1C0200020000408C0000001002C +:10B9F00090000101008500C000900085000000005B :10BA00000000000000000000000000000000000036 -:10BA100000000000001011100902000500200008BD -:10BA20000021008000100041000800008010000884 -:10BA300000108080004141032088118500008000B3 -:10BA4000000000800800000000000000000000006E -:10BA5000000000000000000900090008001180003B -:10BA6000002080900002000002050020020000007B -:10BA70000000000000000000001000200010000086 +:10BA10000000000000000000000000000000000026 +:10BA200000000000000000000000000000400021B5 +:10BA30000008001000000000008009000000000065 +:10BA40000000000000000020080841080408001061 +:10BA500004104110001100092103090811410000E0 +:10BA6000118305A1918380000000008000800040C8 +:10BA7000114010401141000800210010002000007A :10BA800000000000000000000000000000000000B6 :10BA900000000000000000000000000000000000A6 -:10BAA000080021000000000000000000000000006D -:10BAB0000080000000002188C11188A1032100003E -:10BAC00000100080000000000000000000000000E6 -:10BAD000000000000000000009000900090011003A -:10BAE00080050008800080000000808000000002C7 -:10BAF0000000000000008000000000800000000046 +:10BAA0000000000000000000000000000000000294 +:10BAB0008000000080000000008000800000000086 +:10BAC0000000000000000000001100000000000065 +:10BAD00000020000000000008383910088008003C2 +:10BAE000A1820391820000118000802180008000EB +:10BAF000400240A04000030300400000000000009E :10BB00000000000000000000000000000000000035 -:10BB10000000000000000000000000900002000093 -:10BB2000000001880100000000000000001000007B -:10BB3000020000A0A0202000C1C1029102851101D5 -:10BB4000000090012020909020000000001000884C -:10BB500000000000000000000000000000000000E5 -:10BB60000100900000009000020020004082409000 -:10BB7000000120002000000004000000000200403E +:10BB10000000000000000000000000000000000025 +:10BB20000000000000000000000000000000000015 +:10BB300088000800080008000800880210848800B7 +:10BB400000000000000000000000000000000000F5 +:10BB500000000000000000000000888891008800BC +:10BB60000400C141200991042001C000888982207D +:10BB70000200004100030008000000010088008866 :10BB800000000000000000000000000000000000B5 :10BB900000000000000000000000000000000000A5 :10BBA0000000000000000000000000000000000095 -:10BBB00000000000000000000000000000E00000A5 -:10BBC00041000000000000000700840000000000A9 -:10BBD000000000000000000000000000880000E0FD -:10BBE000000000000081000007000000500000E09D -:10BBF000070000000000000000000000000000003E +:10BBB0000000000000000000000000000000000085 +:10BBC00050820000000000000000000000000000A3 +:10BBD00000000021000000E000000000820000E002 +:10BBE00000000000811100E007005000000000008C +:10BBF00007004100810000E0070000210000000074 :10BC00000000000000000000000000000000000034 :10BC10000000000000000000000000000000000024 -:10BC200000000000000000003C3C0000000000009C -:10BC3000F000F0FFC0C0FCFCBF00B0008A00CF00E5 -:10BC40003A003A3A000001010000004000410000C3 +:10BC20000000000000000000000000000000000014 +:10BC30000000000000001000000000007F7C0000F9 +:10BC4000D7FF476F00000000000000000000000068 :10BC500000000000000000000000000000000000E4 -:10BC600000000000000020208A8A3C003C00000008 -:10BC70000000000000003C3C00FF0000000000004D -:10BC800000000000000000000000000000000000B4 +:10BC6000002000000000000000000000005500005F +:10BC70003C3CC0C0000300000000000000000000C9 +:10BC80000000E8E8C3FF0000000000000000000022 :10BC900000000000000000000000000000000000A4 -:10BCA000000000000000000000003C3C000000001C -:10BCB0000000F000F0FFC0C0FCFC8F0080008AAAEA -:10BCC000CFFF3A3A3A3A000001510055054500418C +:10BCA0000000000000000000000000000000000094 +:10BCB00000000000000000000000000000007F7C89 +:10BCC000FFFFFFFFFFFF000000000000000000007A :10BCD0000000000000000000000000000000000064 -:10BCE00000000000000000000000AAAA003C003C88 -:10BCF000AF00FF00000000003C3C00FF000000001F -:10BD00000000000000000000000000000000000033 +:10BCE0000000000000000000002000300C08F0F50B +:10BCF000FF00D4D7C0C0000000000000000000001A +:10BD000000000000E8E8003C000000000000000027 :10BD10000000000000000000000000000000000023 -:10BD2000000000003F003F0000000000FF14FF146F -:10BD3000000000000F0F0F0FFCFCFCFCC040F05097 -:10BD40000FFF0F002808EB0B00005F5F0A0AFF00DF -:10BD50000F0F0000000000000000000000000000C5 -:10BD600000000000000000000000C33C00000000D4 -:10BD70003C3C00000000D7008200000000000000F2 -:10BD80000000000000007D7D7D7D000000000000BF +:10BD20000000000000000000000000000000000013 +:10BD30000000000000000000000000000000000003 +:10BD4000FFFF0000000000000000000000000000F5 +:10BD500000000000000000000000000000000000E3 +:10BD60000000000C000000000000000000000F0FA9 +:10BD70000F0F35C5C5C5FFFFBEB0000000003E3E39 +:10BD800002020000000000AA000000000000000005 :10BD900000000000000000000000000000000000A3 -:10BDA0000000000000000500050500000000FF1471 -:10BDB000FF1400000000FFFF000055FF55FFCF45B6 -:10BDC000FF550FFF0F00EB0BEB0B00005FDF0A08C6 -:10BDD000FF008F0D000000000101000000000000C6 -:10BDE000000000000000000000000000FF00000054 -:10BDF00000003C3C00000000C300C3000000000045 -:10BE0000000000000000000041414141000000002E +:10BDA0000000000000000000000000000000000093 +:10BDB0000000000000000000000000000000000083 +:10BDC0000000FFFFFFFF0000828200000000000073 +:10BDD0000000000000000000000000000000000063 +:10BDE00000000000000000000000000000002A0227 +:10BDF00008080F003ACACACA0000BEB0000000001E +:10BE0000BE3C82000000000015001500000000008C :10BE10000000000000000000000000000000000022 -:10BE20000000000000610006000D00010061000636 -:10BE3000000D000100610006000D00000061000619 -:10BE4000000D000000614004000900010000000036 -:10BE500000000000000000000000000000000000E2 -:10BE600000000000000000610007C0010000006148 -:10BE7000003E000D000000610006C005000000004B -:10BE800000000000000000610006000D000000003E +:10BE20000000000000000000000000000000000012 +:10BE3000000000000000000000000000806100061B +:10BE4000000D0000000030000000000000000000B5 +:10BE500000000000000000610006000D000000610D +:10BE600000060009000000200001C0000000A061E1 +:10BE70000035C0990001A0000000009000A1006101 +:10BE8000000DC500000000610006000D000000006C :10BE900000000000000000000000000000000000A2 -:10BEA000000000000000000000002BF023F05F0FF6 -:10BEB0005F0F30FF30FF000000000CFC0CFC0000A6 -:10BEC00000000CFC0CFC7D7D28285050FAFA000084 -:10BED0000000000000000000000000000000000062 -:10BEE0000000000000000000595555550020FFDFFC -:10BEF0000000000000F0FFF000000000F0AAF0AA2F -:10BF0000000000000000000000000000000FF0FF33 +:10BEA0000000000000000000000000000000000092 +:10BEB0000000000000000000000000000000000082 +:10BEC0000000FC3C0C3C00000000000000000000F2 +:10BED0000000000000000000000000000000AA00B8 +:10BEE0000000000020282028FF00F505FFFAF0B42C +:10BEF00050005FFFFF00FF00000000000000000096 +:10BF000069690F69FFFAAAAC000000003C3C3D38AB :10BF10000000000000000000000000000000000021 -:10BF20000000000000000000000000002B30233063 -:10BF30005F0F5F0F30FF30FF000000000CFC0CFCB7 -:10BF4000000000000CFC0CFC7DFD28081050FBFAE2 -:10BF500000000000000000000000000000000000E1 -:10BF6000000000000000000000005555555500007D -:10BF700000000000000000F0FFF000000000F0AA48 -:10BF8000F0AA000000000000000000000000000F08 -:10BF9000F0FF0000000000000000000000000000B2 -:10BFA00000000000000000000000CFC302000000FD -:10BFB0000000000000003C003C0000000000000009 -:10BFC00000000FFF0F000000000000008080000351 -:10BFD000000300000000000000000000000000005E -:10BFE0000000000000000000000000000000000051 -:10BFF0000000F0F000000000000000000F550F5599 -:10C0000000FF287D0000000000000000000000008C +:10BF20000000000000000000000000000000000011 +:10BF30000000000000000000000000000000000001 +:10BF400000000000FC3C0C3C000000000000000071 +:10BF500000000000000000000000000000000A0ACD +:10BF6000AA080000000000003C3CFF00F50500505E +:10BF7000F0B450005FFF0F00FFF000000000000071 +:10BF8000000069690F69000AAAAC000000003C3C8F +:10BF90003D3800000000000000000000000000002C +:10BFA0000000000000000000000000000000000091 +:10BFB0000000000000000000000000000000000081 +:10BFC0000000000000000000000000000000000071 +:10BFD000000000000000000000000000F30000006E +:10BFE000000000005555553C00000000DF08FFD759 +:10BFF000F3FF08FBA5AAA5AA555555690000000046 +:10C0000000000000FF41FF3FF0F0CCCC000000003A :10C010000000000000000000000000000000000020 -:10C02000000000000000000000000000EFCF8303CC -:10C0300000000000000000003C003C000000000088 -:10C04000000000000FFF0F00000000002A00AA807F -:10C05000414100030000000000000000000000005B -:10C0600000000000000000000000000000000000D0 -:10C0700000000000F0F000000000000000000F557C -:10C080000F5500FF287D00000000000000000000A8 -:10C090000000000000002000880020008404000848 -:10C0A000880000008500C000C002200008000008D1 -:10C0B00000001005A00500004000000040048400BE -:10C0C0000402C0080405080020004000040002002B -:10C0D0000000100004000003100000008200200097 -:10C0E0008800820002004000000000000000840080 -:10C0F0000000000004008804200000000000200070 -:10C1000000000000000000000000000084000000AB -:10C11000000000000000000000000000000200001D -:10C1200041000000100004C020C01000000080A0EA -:10C1300000000000000000000000000020C000001F -:10C140001000004110020300809080008000000079 -:10C15000000000900000000000000000000000400F -:10C16000000000000000400200000002000000008B -:10C17000000000000002400000000000000000007D -:10C18000000200000000000000000000000040006D -:10C19000000000000000000040000000000000005F -:10C1A000000800000010000408A101000100400088 -:10C1B00000090100080000002100000003094100FF -:10C1C000000301210300418540050110001000001B -:10C1D00040104000000200110100000000000000BB -:10C1E00082104003080000C0000020800000000012 -:10C1F00000004000010001000000400000000000BD -:10C200000010048001000000000000008500000014 -:10C210000010091084000000000000024002418468 -:10C2200000004084208200040009090408C00808B6 -:10C23000000800080288A000020808080404880812 -:10C2400088020008088284088804A00820050009E4 -:10C250000502C10880040001000408080000000075 -:10C260000004000080108882200300408404090834 -:10C27000000404008484400008000000A0080000BE -:10C280000000201184200800000000200008400267 -:10C2900000000400C000090000004100090804007B -:10C2A00000080021100000210040202100080000AB -:10C2B00000400021004000040000000400000005D0 -:10C2C000001000210041000800000820A004080020 -:10C2D00008044082040000039000002100A1000037 -:10C2E000000000000000008008100040001000085E -:10C2F0000000000000000000000000090000000035 -:10C300000004000000000010000000000004000015 -:10C31000000000000000000000000000000000001D -:10C320000008008800000088000000008000000075 -:10C3300041A0000000000000000000000000080014 -:10C340000084210200000900410008008001100162 -:10C35000820021008303410000A0000010A005021C -:10C36000000021000000008800208000000108017A -:10C37000000008A0008200880000090041000800B9 -:10C380000000050003000300000000004100080455 -:10C390000000410000080300000000000000000051 -:10C3A00000000000080008000000820000000804EF -:10C3B0000805840084002000080008800020820016 -:10C3C00082008204C002C0008340002100200102DC -:10C3D00001008210200000908409C0218800000024 -:10C3E00000020000820004000020044000000080E1 -:10C3F0000800080000000800080008100000000005 -:10C4000000110400000000000400000010020400FD -:10C4100000000802004000000040084000008200C8 -:10C42000080909020082410000A008840084040871 -:10C430004101000004081000000010A0101040008E -:10C44000211000000382031140A0401103200000CE -:10C450002082200004210040080340000000200446 -:10C46000000021850000110008000008402008009D -:10C4700000200008000000880082080000830000FF -:10C48000000020000000000200000300030008017B -:10C490001100040000000401000000010000000081 -:10C4A00000001000080100090204A003820200003D -:10C4B00020030000002000210040000800000000D0 -:10C4C000000004004002A0004000002100004000E5 -:10C4D0000000A0008410002008414080C0401000EF -:10C4E00000400002840400000000A0208800001129 -:10C4F0008200001100000000200000020411100062 -:10C5000004200400000440000000400082000000FD -:10C510000000C00000008200C00000000000000019 -:10C520000000000000000005000000000000000006 -:10C53000000080000000000100000000000000007A -:10C5400000A04000008811010000000000A00800C9 -:10C550008090000000000840080205008002118859 -:10C56000100010A000A10504000040000001408858 -:10C570002120000000000000200200000000000058 -:10C58000000009000000000000C0000000000000E2 -:10C59000000000000000400402080000000000004D -:10C5A0000000400000000500000000000005000839 -:10C5B000A0004000000400000003A021820004004D -:10C5C00000C0A000080000401041080000008221C7 -:10C5D0000410002110000000A004400082000100AF -:10C5E000082040034000090008000000000000008F -:10C5F00040008208000000000000000000008209E6 -:10C600000000840040000000000000200000001036 -:10C61000000000000000C00000000000000000005A -:10C6200000000004000000000000000021000000E5 -:10C6300000000000C0001001000000001082002077 -:10C640000000000400002004000008000020089002 -:10C6500020009100210000C01100058800080000A2 -:10C66000400240018200800040A008040000000059 -:10C6700003008000410000000300080000020000E9 -:10C6800000820000000008880000000000C00000D8 -:10C69000000103000000004008000000000041000D -:10C6A00000004100000003040088080005000000AD -:10C6B000000000000000000000000000000100A0D9 -:10C6C0000002000200000000000008080000000056 -:10C6D000048202020000080200900010C01101A1B3 -:10C6E00008410284848200000101A00000000000D3 -:10C6F00008A090200008A082000891000400820891 -:10C7000000000000900000000008000900880020E0 -:10C710000202008200029088000100000000000078 -:10C720000200000100000001000000000000000005 -:10C7300000000000000000000020030000110010B5 -:10C7400000800000040000000000000080000000E5 -:10C75000000080000000000040800080418200084E -:10C7600011C00082804100800020080200200020CB -:10C77000000008808080000000801000C100800060 -:10C780008000000000000000000000000090008217 -:10C7900000008080008000808000002000030000F6 -:10C7A00000098000004000000008000000000000B8 -:10C7B0000000000000000000000000804100A01107 -:10C7C000008500000000800000000000000500005F -:10C7D0008000110000000000A0800000A00091A0D7 -:10C7E000002091008000000880002080C10003022A -:10C7F00002110000100090219080118041008821DA -:10C8000085881000000000000000000000000020EB -:10C810000080000080000000800000800000000018 -:10C820000000000080000000800000000000000008 -:10C8300000000000000000000000000000020000F6 -:10C8400084018290840000000800000000002000A5 -:10C850000000080040A04000000004829088900082 -:10C86000A1A00001090210000000900001100200C8 -:10C8700000000000000008008300A1048890004030 -:10C880000800A1A101824000040000004000000057 -:10C8900000000002000004009000840010900000DE -:10C8A00000000000000002008200A0A000000800BC -:10C8B000A0000000000000000000000000000000D8 -:10C8C00000000000000100000000840000000020C3 -:10C8D00000A000001000000100A04003000820009C -:10C8E00000010101114040410184A010020000003C -:10C8F0000000C10100000000C08200088889C00457 -:10C90000A001000090010490000000000000000061 -:10C9100090010000080004010890000200848302D6 -:10C920000000000000000000008200000100000084 -:10C9300000000000000000000000000000000000F7 -:10C94000001010001020001100000000000009007D -:10C950000040008000058000001000800021098058 -:10C96000001100100821080000A0214180808040B3 -:10C970000020044121210020000080080020002028 -:10C980008580000800410021809100080000000817 -:10C9900009000020050000028002000000800080E5 -:10C9A0008880000000000000000000110003050066 -:10C9B00008080000004000030040000000000000E4 -:10C9C0000000218020000280101100000000000003 -:10C9D0000000000080008080000020000020028015 -:10C9E000000002082100A100821100100011008047 -:10C9F000050320800504208020080000800000003E -:10CA00008080801020C004021100400800000080D7 -:10CA10000080000080000000800080000002001004 -:10CA20000080000000000000000000000000800006 -:10CA300000000000000000000000000000000000F6 -:10CA40000000000001020000011000000000400092 -:10CA5000020200000000A00008080000010000031E -:10CA6000008400000001401003000901000184A1BE -:10CA70002040000101040009008200010000400084 -:10CA8000080884C002018802910088820001000029 -:10CA9000008200020000400040000200020000018D -:10CAA0000021000200009000880008000000000043 -:10CAB000040000004000000000000008000000002A -:10CAC000000000000000000000E0070000008400FB -:10CAD00000E0000000000000000000000000002155 -:10CAE000000007000000000000E0070000006000F8 -:10CAF00000E007000000000000000000000000004F -:10CB00000000000007004106810000E0070041002E -:10CB10000000000000000000000000000000000015 -:10CB2000008100000700000000000000000000007D -:10CB300000000000000000000000000000000000F5 +:10C020000000000000000000000000000000000010 +:10C030000000000000000000000000000000000000 +:10C0400000000000000000000000000000000000F0 +:10C050000000000000000000000000000000F3519C +:10C060005151000000005555555500000000DF08F3 +:10C070002800000C08FBAAAAAAAA5555555500008D +:10C08000000000000000BE00C000F0AACCAA000022 +:10C0900000000000000010000000400020004000F0 +:10C0A0000000000020004000000000000000000030 +:10C0B00020004000200000000000200020002000A0 +:10C0C0000000000020000000000000000000000050 +:10C0D0002000210020000003900000002000A1802B +:10C0E0002000400000002000000000804000A0036D +:10C0F0000400200020002000000004002000400276 +:10C100001000000000002000020002004000C000FB +:10C11000000020102000200040002190210000009D +:10C12000000040004002000020004000000000002D +:10C13000400000002000000020004000000000003F +:10C14000400000000000000040004000000000002F +:10C150000000000002C00000000008000000000015 +:10C16000021000000000000200004040402000C01B +:10C170000000850000000040000010009002000058 +:10C180000401400000024000000280028002000022 +:10C19000000000000000000211400000000000004C +:10C1A000000000008200000000000000000000000D +:10C1B0000000000000000400000000000000080073 +:10C1C0000010000000000000000008000000000057 +:10C1D0000000002000000000000900000000000036 +:10C1E00008910000000000000000000000000400B2 +:10C1F0000100820901000240000008000100040063 +:10C200000100080000080000842000000000000079 +:10C2100000080020000000008200844000080000A8 +:10C22000099000080008000800000000000000005D +:10C2300000000000000000000000000000080000F6 +:10C24000000400080088040800000000000000004E +:10C2500000000000000100000000000800000008CD +:10C26000000800100040000000080000000000006E +:10C2700080001000000804880001210041100840DF +:10C28000808808000000000000400001001000004D +:10C290000010000000C003000000000000080000C3 +:10C2A0000000000000000000000088000000000006 +:10C2B000000000000000000000000000000000007E +:10C2C000000000000000000000000000000000006E +:10C2D00000000000000000002000000040000000FE +:10C2E000000084000000208000000000000000002A +:10C2F00000000003010000000000010000008400B5 +:10C30000A0000520400090000021001000208808B7 +:10C3100000008400C000040800202000000000008D +:10C32000000000000000000000000000000000000D +:10C3300000000000000000000000000000000000FD +:10C3400000000000000000000000000000000000ED +:10C350000000054000000000000000000000008414 +:10C3600000000300000000880840000002000000F8 +:10C370000000050009001000090800A002000500E7 +:10C380000500210084010000090041A0080100010E +:10C39000000000A0000000000000080003200310BF +:10C3A00000C0000000400008000400000000000081 +:10C3B000000000000000000000000000000000007D +:10C3C0000010000000000000000000000000040059 +:10C3D0000000080000000000000820040000000029 +:10C3E000004000000000000000000080000000008D +:10C3F0000000004140029008000084050080000316 +:10C400000000402108400040004000110011A0043D +:10C4100004080440014100404009200400050011C7 +:10C420009021040400000000000000000000000053 +:10C43000000000000082000000000000000000007A +:10C44000000000000000000800080000400000009C +:10C4500000000000000000000000000000040000D8 +:10C4600000000000000000000000009000400000FC +:10C47000020000000000800100C000000000002059 +:10C4800000A004A00008002009C04000000008200F +:10C4900000008020000008C00000110420202100BE +:10C4A0001100110002000000000000000000000068 +:10C4B000000000000000000000000000000000007C +:10C4C0000000000000080000000000000000000064 +:10C4D000000000000000000000001000000000004C +:10C4E000000082004000000000000000000000008A +:10C4F000000000002000000001004100000000805A +:10C500000041000584000800824082800000000392 +:10C510000021004001A00400000000000000000015 +:10C5200000000000010040100000000000040000B6 +:10C5300000000000000000000000000000001000EB +:10C5400000000000000000000000000000000000EB +:10C550000000000000000000000000404000000853 +:10C5600000081190000200400000020000000000DE +:10C57000000000000000000400080800C0000000E7 +:10C580000002000005000000800040000020412063 +:10C5900003000500050004210390000005000800C9 +:10C5A0000800000002102008C0A0000000000000E9 +:10C5B000000000000000000000000000000000007B +:10C5C000000000000000000000000000000000006B +:10C5D000000000000000000000000000000000005B +:10C5E000000001000000000000000000000000004A +:10C5F0000000004082000000000000000000010078 +:10C6000000000000042000000000002100000820BD +:10C6100000410041000000000020011082000000E5 +:10C6200000002000001100009000008900000000C0 +:10C6300000000000000000000000020000000000F8 +:10C6400000000000000000000000000000000000EA +:10C6500000000000000000000000000000000000DA +:10C66000000000000408000000C000C0000000003E +:10C6700000A0000000010000000000000000000019 +:10C6800010000082000080C10000040000A0409063 +:10C6900091110082084020C011002001028802820E +:10C6A000000020000040000011001188031000006D +:10C6B000000000000000000000000000000000007A +:10C6C000000000000000000000000000000000006A +:10C6D000000000000000000000000000000000005A +:10C6E0000000000000000100000000000000000049 +:10C6F0001020000000008800000000000000000082 +:10C7000001A19090108800A0C000000000008800E7 +:10C71000A1A000000888000810C000200008100236 +:10C720000400000000000800000001008800000074 +:10C7300000000000000000000000000000000000F9 +:10C7400000000000000000000000000000000000E9 +:10C7500000000000000000000000000000000000D9 +:10C7600000000000000000000400000000000000C5 +:10C7700000000000000000000000000000000000B9 +:10C78000000021C190A1809100C182000000000042 +:10C790000000A00021008080008080800000000058 +:10C7A00000800000000000000000000004001100F4 +:10C7B0000000000000000000000000000000000079 +:10C7C0000000000000000000000000000000000069 +:10C7D0000000000000000000000000000000000059 +:10C7E00000000000000000000000000000030080C6 +:10C7F00000000000800080088000000000000000B1 +:10C800000000000000800010009000038000004045 +:10C81000808080000000009100890000000000007E +:10C820000000000000000004000080008000000004 +:10C830000005800000000000000000000000000073 +:10C8400000000000000000000000000000000000E8 +:10C8500000000000000000000000000000000000D8 +:10C8600000000000000000000000000000000000C8 +:10C870000084000400008800822002028210000070 +:10C88000000000000000004000010083000188005B +:10C8900004C1084008000000004100110000000031 +:10C8A00000000000000084009000048808000800D8 +:10C8B0000000A0010484000000000000000000004F +:10C8C0000000000000000000000000000000000068 +:10C8D0000000000000000000000000000000000058 +:10C8E0000000000000000000000000000000000048 +:10C8F000000000000000000090000040C08401C063 +:10C900000000000000000000C00001000101020161 +:10C91000001000C000200082000000008200000221 +:10C9200000900090908441880008008400200082DC +:10C9300000010000000100010000000000000000F4 +:10C9400000000000000000000000000000000000E7 +:10C9500000000000000000000000000000000000D7 +:10C9600000000000000000000000000000000000C7 +:10C9700000000000000000000000000000800080B7 +:10C9800009800000000000000000000903020908FF +:10C99000834100800000000000000003004100040B +:10C9A000000400000000008009000080000000007A +:10C9B00000000040000900100420000000000000FA +:10C9C0000000000000000000000000000000000067 +:10C9D0000000000000000000000000000000000057 +:10C9E0000000000000000000000000000000000047 +:10C9F00000008011800000000000000080000000A6 +:10CA0000000000000000000000000000900504008D +:10CA10000200040080008000000000008020000070 +:10CA200080000000000000000000000080080000FE +:10CA300000800000000400000080000000000000F2 +:10CA400000000000000000000000000000000000E6 +:10CA500000000000000000000000000000000000D6 +:10CA600000000000000000000000000000000000C6 +:10CA700000000000C00120002000040000000200AF +:10CA80009088880808000000000000000000C10035 +:10CA9000040021008400900008C020208800C0000D +:10CAA00090004000C00000000000000000000800EE +:10CAB00090021040C000000100100084000000003F +:10CAC0000000000000000000000000000000000066 +:10CAD0000000000000000000000000000000000056 +:10CAE0000000000000000000000000000000000046 +:10CAF00000000000000000410000070000000000EE +:10CB00000000000000000000000000000000000025 +:10CB1000608100E007000000000000000700420004 +:10CB200000000000070000000021000007000000D6 +:10CB30000000000000000000810000E00000000094 :10CB400000000000000000000000000000000000E5 -:10CB50000F000F0000000000FFF0FFF0FCFCFCFCE9 -:10CB600000000000FFF0F0F0839F839F9999000080 -:10CB7000F000F000CFFFCFFF000000000000000039 -:10CB8000000000000606000100F7999909900000D6 -:10CB900000000000000000000000393038300000C4 -:10CBA0000000000000004F000002FF0FF000000036 -:10CBB0000000663C663C18181818000000000000D1 +:10CB500000000000000000000000000000000000D5 +:10CB600000000000000000000000000000000000C5 +:10CB70000000000000000000F0F400F400000000DD +:10CB8000000042C27EFE0F00FFFF00000000000018 +:10CB90000000101800000000000060646060990050 +:10CBA0000C0C990062620000666600000000C0FF85 +:10CBB0004066FF006666F7D3765200000000000072 :10CBC0000000000000000000000000000000000065 -:10CBD00000000F000F0000000000FF00FF00FCFC41 -:10CBE000FCFC00000000FFF0F0F0839F839F00003A -:10CBF0000000F000F000C000C000000000000000D5 -:10CC000000000000000006C3000100019999099985 -:10CC1000FFFF000000000000000000003830383046 -:10CC2000000000000000000046000002FF0FF000BE -:10CC300000000000663C663C181818180000000050 +:10CBD0000000000000000000000000000000000055 +:10CBE0000000000000000000000000000000000045 +:10CBF00000000000000000000000FF2400240000EE +:10CC00000000000043C37FFF0F00FF66000000002C +:10CC10000000000000100F0F00000000666600001A +:10CC20009900FF0C990020200000666600000000BB +:10CC3000FFFF66663C3CF0F0B59134100000000048 :10CC400000000000000000000000000000000000E4 :10CC500000000000000000000000000000000000D4 :10CC600000000000000000000000000000000000C4 @@ -122089,973 +122089,973 @@ :10CCA0000000000000000000000000000000000084 :10CCB0000000000000000000000000000000000074 :10CCC0000000000000000000000000000000000064 -:10CCD00000000000FFFF000FFFFF3C3C3C3C090947 -:10CCE00009090000FFFF00F000F010105050BFBF16 -:10CCF0000FFF2C002C00000000000808EFEF0000E0 -:10CD000000006F6F6F6F000018187E7E00FF00FF3D -:10CD100066666666FF0FFF0F000000000000030359 -:10CD20000000001800000000022220206FFFFFFF1B -:10CD30000000000000000000000000000CFF0CFFDD -:10CD4000000000003F3F3F3F0000000000000000E7 -:10CD50000000000000FF00FF000FFFFF00FF00FFCA -:10CD6000090909090F0F0F0F00F000F00000404003 -:10CD70003F3F0FFF2C002C00000000100000FFFFC1 -:10CD8000000000006060606000000818FE7E0E8FEA -:10CD90000F0F0000C3C3000F000F00000000202091 -:10CDA00020200000001000000000000000004FDF05 -:10CDB000FFFF0000000000000000000000000CFF6A -:10CDC0000CFF00000000030303030000000000004C -:10CDD0000000006100040001000000610007C00DB8 -:10CDE000000000610006001D00000061403E000DD3 -:10CDF00000A100610007000D000100610000C00DEE -:10CE0000000000610006000D000000000061000647 -:10CE1000000D00000061000EC00920010061000645 -:10CE2000000D000080610006000D000000000030D1 -:10CE30000000000000610006000D00008061000697 -:10CE4000001D000000610006000D00000000000051 -:10CE500000000000FFFFC7FF3C3C3C3C000000001E -:10CE60000000000000000000287D287DFFFF050570 -:10CE700028FF28FF050000000030003041414141FB -:10CE80002C2C7C7CC0CF40458ACF000000000000E5 -:10CE90000000C0FCC0FC2A0228007C7D7C7C0000D5 -:10CEA0000000AA3CAA3C000000003C003CFF00003F +:10CCD0000000000000000000000000000000000054 +:10CCE0000000000000000000000000000000000044 +:10CCF0000000000000000000000000000000000034 +:10CD000000000000000000000000FFFF00008000A5 +:10CD1000000000000000000024243C3C0000000053 +:10CD200000000000838300003C3C0C0C000000006D +:10CD30003C0000340000000000000000F30390906D +:10CD4000000000003C3C3C3C0000000000000000F3 +:10CD500000000000000000000000000000000000D3 +:10CD600000000000000000000000000000000000C3 +:10CD700000000000000000000000000000000000B3 +:10CD800000000000000000000000FFFFFFFF0000A7 +:10CD9000000000000000000000000CFF0CFF00007D +:10CDA000000000000000C00000003C3C0C0C000033 +:10CDB00000003C0000340000000000000000F3030D +:10CDC0009F9F000000003C663C3C0000000000000B +:10CDD0000000000000000000000000000000000053 +:10CDE0000000000000000000000000000000000043 +:10CDF0000000000000000000000000000000000033 +:10CE00000000A00000300000000000000000300022 +:10CE1000009000000000000000000000A02100368B +:10CE2000C00C00000000000000100001A0610A0614 +:10CE3000000D000000005030000000000000000065 +:10CE40000010000100610007C00D0000000000009C +:10CE500000000000000000000000000000000000D2 +:10CE600000000000000000000000000000000000C2 +:10CE700000000000000000000000000000000000B2 +:10CE800000000000000000000000000000000000A2 +:10CE90000000000000000000000000000000000092 +:10CEA000AAAA0CFF0C5D00000000000000000000BA :10CEB0000000000000000000000000000000000072 -:10CEC0000000F0F03C3C0000000000F0FFF000002B -:10CED000000000000000FFFFC705003CFF3C000011 -:10CEE00000000000000000000000287D287DFFFFFA -:10CEF000050528FF28FF05040000003000304141EF -:10CF000041412C2C7C7CF0FF50558ACFAAFF0000B9 -:10CF100000000000C0FCC0FC2A0228007D7D7C7C53 -:10CF200000000000AA3CAA3C000000003C003CFFBE -:10CF300000000000000000000000000000000000F1 -:10CF400000000000F0F03C3C0000000000F0FFF0AA -:10CF5000000000000000000000000000AAAAAAAA29 +:10CEC00000000000000000000000FCFC82BE00002A +:10CED0000000000000000000000000000000000052 +:10CEE0000000000000000000000000000000000042 +:10CEF0000000000000000000000000000000000032 +:10CF00000000000000000000000000000000000021 +:10CF10000000000000000000000000000000000011 +:10CF2000000082A200FF00000000000000000000DE +:10CF3000000000003E0AFFFF0000000000000000AB +:10CF4000000000000000000000000000C0C082BE21 +:10CF500000000000000000000000000000000000D1 :10CF600000000000000000000000000000000000C1 -:10CF7000000000000000C3C3FCFCFCFC00A000A0FB -:10CF80005F550A0014141414B2B2F3F300005515DF -:10CF900000000000000028288604000000000404AF -:10CFA000550400000000000000005F505F500000CA -:10CFB000000000000000000000003CFF3C000000FA -:10CFC00000003C3C3C3C0000000000000000000071 -:10CFD0000000000000000000000008080000F0AAA7 -:10CFE000F0AA0000000000000000000000000000A7 -:10CFF0000000000000000000C3C30C0C0C0C00A0DB -:10D0000000A05F550A0014141414B200F300FF3F8F -:10D0100055150000000000002828860400000000CC -:10D020000C0CFF0C00000000000000005F505F507F -:10D030000000000000000000000000003CFF3C0079 -:10D0400000000000FF00FF000000000000000000E2 -:10D050000000000000040410040010040400880014 -:10D0600088040400880084002004880000008405EF -:10D07000200200000000C0008404400404000005F9 -:10D080002004030084058800880040048400000513 -:10D0900084008800000300002103020584080002C8 -:10D0A0000000C004000400112000400220004000E5 -:10D0B00000002000200000020000040040000002E8 -:10D0C00000000000000000002000840404000000B4 -:10D0D00000002000000000008000000005000000AB -:10D0E000000000000000000000000000000000A0A0 -:10D0F00004000000000010004000000000002000BC -:10D1000010000002200021020002050000000000C3 -:10D1100040020000400400004100A0000002210085 -:10D1200000004000004000000000800000000000FF -:10D1300000000000000000000000000200000000ED -:10D1400000000000000000000000000000000000DF -:10D1500000000000000000000800100008020103A9 -:10D160000008021001000010000000004000000054 -:10D1700000002100011009000100090009000080E1 -:10D1800085100110840302000000000400028405E1 -:10D19000001102000010001000000000008000409C -:10D1A0000002010020A000000410000001000000A7 -:10D1B000820082000010000509110000210000001B -:10D1C00000000000000000000110000000008200CC -:10D1D0000000840000000400090080844088C0082A -:10D1E00008000002808402020908000420848008EC -:10D1F00020080088020808084088020882084008C1 -:10D20000000402880204048204100090020004C199 -:10D210000408400440100489049000000490410474 -:10D22000008802834082800500822008008240003E -:10D230000900028200040001200040820400020074 -:10D240000004008204000000000002080400410005 -:10D250000000030005000000000040000003002063 -:10D2600000A104000021000000080040002100058A -:10D27000001000020020001090000002C00300090E -:10D280000800410800088408900885020000880012 -:10D290009000840000082005900020080000002174 -:10D2A000004000080002200000400040048000030D -:10D2B00000090011000000020000020084050000C7 -:10D2C0000000A00000210000000000200000000875 -:10D2D0000000000000080400000000000000030837 -:10D2E0000088054000204100410000000084210822 -:10D2F00005840084004000000000000003000200DC -:10D3000005001100A0000000050800002008210809 -:10D3100000A0058205C021020800000000000000F6 -:10D320000000020000000084000000000000C02097 -:10D33000009040000002059005000082840000007B -:10D3400000000000000000000000000000200000BD -:10D3500000000000080008000000000000000000BD -:10D3600008004000000004000800082000004002FF -:10D3700008008400881082000805000201210802CC -:10D38000C0809002A0090980821100100804108258 -:10D390000804080008408410000000051000C14087 -:10D3A00000000009400482000402000001000000A7 -:10D3B000008408800080A00008900800100401028A -:10D3C00000200000C0004000000000008211A0000A -:10D3D00000004040000000020140041000108209DB -:10D3E00004C08282030000000320410041000000CD -:10D3F000080104820900090100A01108008540C04D -:10D4000000000310408508902004000040C100C0C7 -:10D4100005020000918820A003A141040504030037 -:10D4200002000000100003000800802010880400A3 -:10D4300003004121881008400084041100400000CE -:10D4400002030088050010000000030000004100F6 -:10D4500008000000400303004183080100010901A6 -:10D46000210008100000082008000008C000C000CB -:10D470008400000200200004001140200003084145 -:10D480000400822100000800000082080000A000C3 -:10D490000000822104000841000084009000840400 -:10D4A000000000040000820002000000000208806A -:10D4B0002189040001C000041002002000040004BF -:10D4C0000002A000004000210000820008000000CF -:10D4D00084000000100000000000A0000000000018 -:10D4E000821100000000002000090040050000003B -:10D4F00000000300000000000000000080000000A9 -:10D5000000000000008800C00000040021004190DD -:10D510000008000008840884000000000088000261 -:10D5200000840084000100004100080000000002A7 -:10D530000010A020080420040000030005000004DF -:10D54000410000000088050004900800000005006C -:10D55000030000000004000000A000000000000024 -:10D560000000000000000000080000058200042107 -:10D570008200000800008441010500000000002135 -:10D58000402100A1C00904000002880904004100F4 -:10D59000C000000490410000A08001110000400282 -:10D5A000000300100004004100004083092100092D -:10D5B000820004000000100000204000000008006D -:10D5C000200000000000032000040000000008000C -:10D5D0000010000000004000000000800000040077 -:10D5E000208000000000000000000000000000009B -:10D5F000000200000000000000A040C000A00000E9 -:10D60000030020040310200000080089080840C01F -:10D61000A0000000080000C0200041100888210080 -:10D62000884009000021080011020000800220C08B -:10D63000008208000088118200000505210000001A -:10D64000000000102100000084010005000000001F -:10D6500000000000110000004102020241104000E1 -:10D6600003002002080200000988002005822088AB -:10D6700000A0820208009110901010820200910018 -:10D68000820110010040000004A00010C0000084CE -:10D69000000800000001200103A00091000000A08C -:10D6A00008A0000821091088020382C000000100C0 -:10D6B000A0000000000001A04091A0840002002012 -:10D6C000000800C0408800C000848384000400007B -:10D6D00000000000000000A000400082000000A048 -:10D6E00000820404000000A0A002008200002100CB -:10D6F0008000008080001000218008008080800869 -:10D700000303001080200000000000800000800063 -:10D7100000034089000000020520828500200000EF -:10D720001100800000804188911180058010000068 -:10D73000202084211008002020808091808000809B -:10D74000001100110011000300000000080000801B -:10D7500000000000000000000000000000000000C9 -:10D7600000800000808000000080008000800000B9 -:10D7700000000000800080000980200891801020B7 -:10D780000080210020000803000000008000040445 -:10D7900000004000890000002000210080001103EB -:10D7A000090003200800108090000800A00010036A -:10D7B000000000000000800080008200100488212A -:10D7C000C083000000418000000920000003020027 -:10D7D0000000000000000000000000000000000049 -:10D7E0000000000020008580000000008003000091 -:10D7F000000082000000A000080000029000A0408D -:10D800000001008201000000014100000000A000B2 -:10D81000C000000000000800200000100500A0006B -:10D8200000014000A101010001A00510A10041007C -:10D830008821000000000800820002008990C100D9 -:10D840001191049100020801A0108800000000015D -:10D85000012000200000A0000000000000000000E7 -:10D860000000000000000000A00400000000020012 -:10D8700000000000000200000000A08200A00009DB -:10D8800000091088008900400102010000000040EA -:10D8900000050000000001A0010801004000014057 -:10D8A00004C1000100000000000000000041012050 -:10D8B000A12008A1000000010001090000000011E2 -:10D8C0000004A101910540040108100009908400A2 -:10D8D00000A1009184200000000000000000000072 -:10D8E00000000000000000000001828500A0000090 -:10D8F0000000000100000080000000000000001097 -:10D9000000030021A08500401121218408050000AA -:10D91000000900210000000504800580110080201E -:10D9200002A12021050300050009000800200008CD -:10D930000941A010009100000021411105030300DE -:10D94000009000108521911180801000400021007E -:10D95000000000C000A1090000000000000000005D -:10D960000000000000000000000000200021000076 -:10D9700000030000004000050000008000000000DF -:10D9800005000200050083100808080005000800D3 -:10D990001000000021000003100083808980111115 -:10D9A000022109082000080800000080008000080B -:10D9B00021800391100003050000210000000800F1 -:10D9C0000000820011C121800302A110800011809B -:10D9D0000200000400080000000000000000000039 -:10D9E0000000000000000000000000000080008037 -:10D9F0000000000000000000000000000208882075 -:10DA00000000880421008890A001000100000100AE -:10DA1000000001000000010400008300A008088449 -:10DA20000101000100000004010090080002000450 -:10DA3000C0010110000300200100000001000020CF -:10DA40000110000004888204211010010300A08846 -:10DA500020409000000090010200400000000020E3 -:10DA600000820000000000000000000000000040F4 -:10DA700090040000000040C000A000000000000072 -:10DA8000070000000000000000000000000000008F -:10DA9000000000000000000000000000000000E0A6 -:10DAA00000005000000000E0000000000000000046 -:10DAB00000000000000000E0000081000000000005 -:10DAC00000E007000000884100E0070000000000BF -:10DAD00000E000008400008100E00700000000007A -:10DAE0000000000000000000000000000000000036 -:10DAF00000000000000000000000000000000F0017 -:10DB00000F00282800000A030A03ACACACAC0000EC -:10DB100000001041104100000000F000F00000FF84 -:10DB2000F0FFF0FAF0FA00000000000F000F000014 -:10DB3000FFFF0000000000000000000000000000E7 -:10DB4000000000000000000020F0A0F0C3C3FCFCB7 -:10DB5000FFEF000003030000FFFFFFFF0000F00FD6 -:10DB600000000000000000000000000000000000B5 -:10DB70005050505000FF0000000000000000000066 -:10DB80000F000F000000000000030F03FFAAF0AA1F -:10DB9000000000001000100000000000F000F00085 -:10DBA00000FFF0FFF0FAF0FA00000000000F000F95 -:10DBB0003C3C3C3C0000000000000000FFAC00AC1E -:10DBC000000000000000000000002000A000C3C30F -:10DBD000FCFCFFEFFFEF00000000F1F0F1F00000AF -:10DBE000F00F000000000000000000000000000036 -:10DBF00000005050505000FF000000FF00FF0000E8 -:10DC00000000AFAFA0A200002800AACAAACAF0F084 -:10DC1000F0F000000000000000003F3F0F0FFFFF8A -:10DC2000FF00F000F000555555553F3F3F3FFF0FB7 -:10DC3000FF0F3C0F3C0F3C3C3C3CFFD73F1782AAF8 -:10DC4000020A00000000000000000000001E000AA0 -:10DC5000C3F70000002000000000000004000000E6 -:10DC600000000000000000005F5F5F5FFF0FF0003A -:10DC700000000000FFFF0F00FF55FF55FFFF0F00E2 -:10DC8000F5F5F5F5AFAFA0A228002800AACAAACAE8 -:10DC900000FF00FF00000000000000003F3F0F0FEA -:10DCA000FF00FF00F000F000FF5500550F0F0F0FB1 -:10DCB000FF00FF003C0F3C0F35353535FFD73F17D0 -:10DCC000D7FF070F00000000000050005050001E5A -:10DCD000000A00F50000000000000000A0000000A5 -:10DCE0000000000000000000000050505050FF0FE6 -:10DCF000F00000000000FFFF0F00FF00FF00FFFF2B -:10DD00000F0005050505800000000000000080618F -:10DD10004006000D000100610006000D00000061DA -:10DD20000006000D000100610007001900010061FC -:10DD30000007001D000100610006000D00000061E9 -:10DD4000400400090001000000610005000D000012 -:10DD50000061003CC019000000610004000D0001DA -:10DD60008061003F000D0000000000000000000185 -:10DD7000000040000000000000614006001D00009F +:10CF700000000000000000000000000000000000B1 +:10CF800000000000000000000000000000000000A1 +:10CF90000000000000000000000000000000000091 +:10CFA00000003030FFD7000000000000000000004B +:10CFB0000000000000000000000000000000000071 +:10CFC0000000000000000000000000000000000061 +:10CFD0000000000000000000000000000000000051 +:10CFE0000000000000000000000000000000000041 +:10CFF0000000000000000000000000000000000031 +:10D000000000000000000000000000000000000020 +:10D010000000000000000000000000000000000010 +:10D020000000000000003C140000000000000000B0 +:10D0300000000000000000000000000000000000F0 +:10D0400000000000000000000000000000000000E0 +:10D050000000000010000000000020002000000080 +:10D060000000000020000000000002080000000096 +:10D07000000002004000000000002000200000002E +:10D080000000880020000000C000000000004000F8 +:10D090000000A0000003400000000000014020004C +:10D0A000C00000002000200000002000094088800F +:10D0B000200040004002218004000510888020806C +:10D0C000000088008880210800000084010084009E +:10D0D0002000C00010004002000200024002400098 +:10D0E00000000002000200000000404000000000BC +:10D0F000000000000000200040002100400000006F +:10D10000000000000000400000000090400000000F +:10D11000000000000000000020000000410020018D +:10D1200000000000000000000000000080008241BC +:10D130000002890000008041041080008801001076 +:10D14000000209A0000010022002000000042004D8 +:10D1500000020000000000000000000000000000CD +:10D1600000040000000000000000000000000000BB +:10D17000000000090010080008030000041000006F +:10D18000000000000000001008000000000800007F +:10D1900000000040000900900000000400000100B1 +:10D1A00002000000000000000140000001000040FB +:10D1B000020801000000418041C008000180001009 +:10D1C00003000200014000009108004101100040EE +:10D1D0000000010000410010A12100080000000033 +:10D1E000000400000008000800040000000000081F +:10D1F0002000000400080088000000840000800473 +:10D2000000820000000800080084000000000010F8 +:10D2100000080000000800080040000000010000B5 +:10D220002008820000000008001002010000020037 +:10D230000210804020000008A002A00380020240EB +:10D2400000090400000008080000080000000200B7 +:10D25000000002840800008802A040400000000096 +:10D26000000000008400000000000010000000002A +:10D2700000000000000000000000000000000000AE +:10D280000000000000000000000000000041000459 +:10D2900000000200900084008400020800000008E2 +:10D2A0000000000000808400840000008400101052 +:10D2B00000210100011000008205A0000880820802 +:10D2C0004020824000400200080000084010820018 +:10D2D0002000040008000000000008000003000017 +:10D2E000000000000000000000000000000000003E +:10D2F000000000000000000000000000000000002E +:10D300000000000000000000050000000000000018 +:10D3100000000000C00011000300000080000000B9 +:10D320000082000000200040210000000088400032 +:10D330000000039020000801008841000000004028 +:10D340000300410000000000000008002000080069 +:10D3500000008000002000000000000000C0080065 +:10D36000004000000000000000000000000000007D +:10D3700000000000000000000000000000000800A5 +:10D3800000210000A0000000000084000000000058 +:10D3900000000020040008001000820001100000BE +:10D3A0000000000010002000080004008200C004FB +:10D3B00000008400010008A08280888008004040AE +:10D3C000020090200040001000000004000000094E +:10D3D00000040011004008001000A011000000022D +:10D3E0000210000000000000000800C000000088DB +:10D3F000000800000000000000000000000000081D +:10D400000008000000000000000000840000000090 +:10D410000000000421000000000480001000200132 +:10D420000800000000A08000800000A0008200C072 +:10D430000000000000A04084000500100002000071 +:10D44000800880A000820900110000400008090245 +:10D4500040C0008220A020040010002000C0200452 +:10D460002004200500000000000000000000000073 +:10D4700000000000000000000000000000000000AC +:10D48000000000000000000000000000000000009C +:10D4900000000000000000008200000020034100A6 +:10D4A0000000404100000000000482002021000034 +:10D4B00000000000004084119005080408C1040029 +:10D4C0008200C000000820400000002088080003FF +:10D4D0000000000000210000000000100110080002 +:10D4E0000000000000050000000000000000000037 +:10D4F0000500000000000000000000000000000027 +:10D50000000000000000000000000000000000001B +:10D51000000000000000000000000000000080008B +:10D520002020000000000000008209010004C1A0CA +:10D5300000000000000000010500210083018010B0 +:10D540000088000000000000000020001000002003 +:10D550004020400004000200200005000088200058 +:10D5600000004000000000880000000000080000EB +:10D5700000000000000000000000000000000000AB +:10D580000000004102000000000000000000000058 +:10D590000000840000000000000300008400008000 +:10D5A00000008211A0002008000084210000000873 +:10D5B00000A10000820002000000020040000900FB +:10D5C00009100000831100210010000084080011E0 +:10D5D00000050009000000080040400400040000AD +:10D5E0000089000000410008000800000000000061 +:10D5F0002000000000040000000000000084000083 +:10D60000000800000000000000000000000000080A +:10D610000000000000000000000000820010200058 +:10D62000004000900090008480010000000000088D +:10D6300000012008000000A000000000008200009F +:10D64000208488050082028200A005080090000462 +:10D650000484091003C00900000811A00200110091 +:10D660000800081011C0208420822004000000005F +:10D6700000000000000000000000000000000000AA +:10D68000000000000000000000000000400000005A +:10D6900000009000000000000000000000000000FA +:10D6A00000000088000100200001C01000000101FE +:10D6B0000100909000040040009000000000112044 +:10D6C00004400000C0000001A1018440000302C02A +:10D6D00000020040A0200004009002910008000118 +:10D6E0000000200000010000010000000000000018 +:10D6F000000000000000000000000000000000002A +:10D700000000000000000000000000000000800099 +:10D710000000000000000000000000000000000009 +:10D72000000000000000001108080510008800003B +:10D730001141092185030085000000000000000060 +:10D74000A00000000000000000048420890000A167 +:10D75000918000800080000000090905800800A079 +:10D760000011080000200008040003000000000071 +:10D7700000000000000000000000000000000000A9 +:10D780000000000000000000000000000000000099 +:10D790000000000000040000000000000000000085 +:10D7A000000000890000000041801003110541893C +:10D7B000000020004183201109090000000300003F +:10D7C00000008800A19011808208410440054004B7 +:10D7D00003880000008000800000000000000000BE +:10D7E00000002000C1002011801000000004808093 +:10D7F0000000000000000000000000000000000029 +:10D800000000000000000000000000000000000018 +:10D810000000000000000001000000000000000007 +:10D820000000000000040088000000900140011189 +:10D8300001890000002000050003014100000040B4 +:10D8400000900000891021048504080000100040A9 +:10D8500001C10189400004C008A084002000A0008C +:10D860008400100010081000C001C0010000A000DA +:10D8700040848282000000000000000000000000E0 +:10D880000000000000000000000000000000000098 +:10D8900000000000001000020090001000000000D6 +:10D8A00000000000000000000000080000C10000AF +:10D8B000000001A10000000000018800010100003B +:10D8C00000000000000000900008904001C000002F +:10D8D000040101000000414000A002048984C0004E +:10D8E0000001000010010000000000010001000024 +:10D8F0000001000100000000000000000000000026 +:10D900000000000000000000000000000000000017 +:10D910000000000000000000000000800000000087 +:10D92000000000000000000000000000800000096E +:10D93000000000080811000000204103A020114150 +:10D940000000000000000000000000800080048053 +:10D9500000050040050309039000008080000900D5 +:10D960000009090803201010001010000210001117 +:10D97000000400200005100400000000000000006A +:10D980000000000000000000000000000000000097 +:10D990000000000000000000000200000000000085 +:10D9A0000000000000000000000280008000000075 +:10D9B0004189110088008303000041022011090001 +:10D9C0000300000080008000800008848880100030 +:10D9D0008302410091008800054080000091008092 +:10D9E0008000000400800080000000A008910380F7 +:10D9F0000908000000000000000000000000000016 +:10DA00000000000000000000000000000000000016 +:10DA10000000000000000000000000000000000006 +:10DA200000000000000000000000020110004000A3 +:10DA300088002188C10084000800000011009001C6 +:10DA4000C1000300900010001000080020C00982EF +:10DA50009004A000910402000200080008000004E5 +:10DA600082840800000000820040000000C100091C +:10DA7000014000010000A0880210C000000000006A +:10DA80000000000000000000000000000000000096 +:10DA90000000000000000000000000000081000005 +:10DAA000070000000000000000000000000000006F +:10DAB00000000000810000E0000000000000810084 +:10DAC00000E00000000000000000000000008421D1 +:10DAD00000E007008200000000E0000000000000FD +:10DAE00000000700500000000000000000000000DF +:10DAF00000E0000042000000000000000000000004 +:10DB00000000000000000000000000000000000015 +:10DB10000000000000000000000000000000000005 +:10DB20000000F0F0F2F20000000000000000CFCF93 +:10DB3000CFCF0000000017FF000000000000000031 +:10DB4000FD00F10000000000F7F4000000000000FC +:10DB500003FF55550000F0F00B0F0B0A000000000A +:10DB60000808FBFB8397829600000000000000007D +:10DB7000000000000000000000FF00FF00000000A7 +:10DB80000000000000000000000000000000000095 +:10DB90000000000000000000000000000000000085 +:10DBA0000000000000FF82FF0000000000000000F5 +:10DBB000CF4D0C4D0000000017FFFFFF3C3C000064 +:10DBC0000000FDFFF1FF00000000F7F4FFFF000080 +:10DBD00000003FFF555500AAF0C0FBFFFBFA000014 +:10DBE00000000808FBFB0115001400000000000005 +:10DBF0000000000000000000000010FB10FB00000F +:10DC00000000000000000000000000000000000014 +:10DC10000000000000000000000000000000000004 +:10DC200000000000000000000000000000000000F4 +:10DC30000000BEBEBEBE00000000FFC3FFC3000068 +:10DC400000000000CFCFCFCF00000000FF00FFFF9B +:10DC500000000000FFFF00FF0F0F7D55FCFCFCFCE7 +:10DC600000000000F0C300AA4908490850FA4141E9 +:10DC70007D7D282800000000FF003C3C00000000E3 +:10DC80005555555F00000000000000000000000036 +:10DC90000000000000000000000000000000000084 +:10DCA0000000000000000000000000000000000074 +:10DCB00000000000BEBEBEBE00000000FFC3FFC3E8 +:10DCC000000000000000CFCFCFCF00000000FF0019 +:10DCD000FFFF00000000FFFF00FF0F0FFFFFFCFC35 +:10DCE000FCFC00000000F0C3FFAA4908CB8A50FAF0 +:10DCF000EBEB5F0A5F0A0000000055550F0F0000B4 +:10DD000000005555555000000000000000000000C4 +:10DD10000000000000000000000000000000000003 +:10DD200000000000000000000030000000000000C3 +:10DD30000000000000000000300000000000004073 +:10DD40003001C0010000000000013001C0000000EF +:10DD5000000030000000000000613036C095000176 +:10DD6000006130070001000105005A0800000001B1 +:10DD700000610006000D00000061000000010005C8 :10DD800000610006000D000000000000000000001F -:10DD90002061A2E355FF55FFA080008000A0000095 -:10DDA000FFFF0F0FA0FFA0FFFC00FF03C3C3C3C30F -:10DDB000CACACACA00FF00FF00000000C2C2FA00BF -:10DDC000FF3C003CA0A0F5F50000FFFF0F0F00C0D6 -:10DDD00000C030353035002CFF2C01010000000060 -:10DDE000000000000000A0FFA0FF000000000000F5 -:10DDF0000000000000000000000000000000A0FF84 -:10DE0000A0FF00000000003CC3FF00000000000075 -:10DE100000003475B6F755FF51FBF5B455B400005A -:10DE2000000C0F0F0F0FA0FFA0FFFC00FF03C3C3E8 -:10DE3000C3C300F00FFF00FF00FD00000000FAFA6E -:10DE4000FA00FFBC001CE0A0F4F50000FFFF0F0F7C -:10DE50000000000035353035002CFF2C000000009C -:10DE60000000000000000000A0FFA0FF0000000074 -:10DE700000000000000000000000000000000000A2 -:10DE8000A0FFA0FF00000000003CC3FF0000000056 -:10DE90000000000000000000F252A202AA2AAA20FC -:10DEA0000F000FFF00000000AAAA000055555555AD -:10DEB000F0AAF0AA82D7A0A0F3F35151000000000D -:10DEC000038203C300000082000000000000040081 -:10DED00000000000000000000000FFFFFFFFFCFC4E -:10DEE000FCFC00000000000000003C003C000000C2 -:10DEF0000000000000000000000000000000000022 -:10DF00000000F000F0000000000000000000000031 -:10DF100000000000000000000000F757A707002ADB -:10DF200000200F000FFF00000000AAAA0000505FB1 -:10DF3000505FF0AAF0AA82D7F5F5F3F35151000033 -:10DF4000000003000341000F008E35053C00000077 -:10DF5000000000000000000000FF00FF3A3C3C3CD5 -:10DF60002030303000000000000000003C003C0089 -:10DF700000000000000000000000000000000000A1 -:10DF800000000000F000F0000000000000000000B1 -:10DF90000000400000004100840040000400408474 -:10DFA0000411200088000404400020032000000029 -:10DFB00000000410400000028400A00008800480DB -:10DFC0000002040088000003200000000400A005F7 -:10DFD0000003840420000400002040038820401037 -:10DFE0002000000088108400080040000800400065 -:10DFF0008400040088020200400000000400400089 -:10E000004002080020004000200000000000000343 -:10E010001000100004002000080020000000000094 -:10E020008410000040000002400000002100400277 -:10E030002100000000008000000040004000C010EF -:10E0400000100040000200004000000000004002FC -:10E0500004000000000000000002090500000000AC -:10E060001001000000000001000080040400800096 -:10E070000000000000000040400000000000000020 -:10E0800020C0900080000000800000000000000020 -:10E0900000000000000300404100001001000210D9 -:10E0A0000000011001040100000084000400914000 -:10E0B000840009000000000008000800100440046B -:10E0C0000800000302020202200203058200004051 -:10E0D0000100000000000003000202849080088418 -:10E0E000000401080800000001000800850000008D -:10E0F000050000110000000200034010081000009D -:10E1000000004000080000004040880008000000B7 -:10E11000000000000800208400828882000408A01B -:10E12000040902900885088202100008008411107A -:10E1300040890084C0000482000880081184040023 -:10E140008340801002008085000104090800040259 -:10E1500004100204000000001184400989200220FC -:10E16000A002050008048400008240040004400866 -:10E170002000020000020000008400908400800063 -:10E18000040000048090C00000408000000091085E -:10E1900000000000000080080040000084400003F0 -:10E1A000004100000021004100410000004100004A -:10E1B0000011410082052010001188040040000376 -:10E1C00008000000004000400000840041020010F0 -:10E1D00000400000A008400000004008A000408966 -:10E1E0000121882120080040908200021021008037 -:10E1F00090029040004000004000000004400009F0 -:10E200000004000000000200900000030008000469 -:10E210000000202100200000040000004100110443 -:10E220002100000003004000000400880004008278 -:10E2300000020000C000000088840300030003C047 -:10E2400003020000000010000304050040004041EC -:10E250002108030010000200C188000080020000B5 -:10E2600090020400210000024002030403410084E4 -:10E27000411021020390008203040408002003A03F -:10E280000000000800000800000000080000000076 -:10E290000000000000000000400005008800C000F1 -:10E2A000C0080900C002000008008200C0408211BE -:10E2B00010008202901140028400040082040804CD -:10E2C0004040082185050480822082020011081147 -:10E2D0002009C080C0009000821182100000C08020 -:10E2E000C0000800A00082008400400011840011DA -:10E2F000C00000000004A00000000800C002A00050 -:10E3000010000800C00084041000A0090020C00410 -:10E31000001100040404400000000004848200088E -:10E3200008000300408410840000200000C0410069 -:10E3300021000000110100081109091003A040107C -:10E34000038821C102080204031040840501112042 -:10E3500040080988400203000802090841890000BA -:10E360000402000000000404008410A0090020053D -:10E3700000000000000011004190218821000001F0 -:10E38000000021002100410009C000002100080018 -:10E39000090005002100118840000800000000026B -:10E3A00000118200000004020020080000080200A2 -:10E3B00082080000C04082104000081100418441E2 -:10E3C000A0020000A000400304000803A088C011C0 -:10E3D0008208A00000800840A0008200080000021F -:10E3E0000000840282000000000082000810080083 -:10E3F0002009100008000011820082001000C000F7 -:10E400008200C020840000408800A011A00000000D -:10E410008210A00200200800C0008200C040080056 -:10E4200000210000000000080008110008884000DA -:10E4300000C004200502040003048820000000043A -:10E4400000004000000000208000040200000810CE -:10E45000000008040000050200000000008200A087 -:10E460000584000000010000000000A011002085CC -:10E4700000020300020200002002009000000300DE -:10E480000084048805000000000000000000000077 -:10E490000000000000000000030000000000100069 -:10E4A000000000008200040800000408A0008200B0 -:10E4B000000082410821040088410000040000009F -:10E4C000C008004082088280100582889104A01054 -:10E4D00000A110002004900008104000008040A11E -:10E4E0000521A004000090004000000082020011FD -:10E4F000000282102041C008C00282001000820089 -:10E500000403C00008000400C00002020400084127 -:10E51000A000820088000000A0050103C1090000DE -:10E5200082218200080000000000000000844100F9 -:10E530000000000021C008000000110040000000A1 -:10E54000209000000001008803020000031040003A -:10E5500000004102080210880088204000000002EC -:10E560000002080004000000418821002000410052 -:10E5700000000001000180000000400208002100AE -:10E580004002000020000400082008002140410053 -:10E59000000011820000210000001100082040004E -:10E5A0000820210000002000400000000000400082 -:10E5B000C040201000028210000100010000000095 -:10E5C00040C0001104101091C040100800821002D9 -:10E5D00020A0004190880091A002080802A084A118 -:10E5E00000010101A00082000000C10009004001FB -:10E5F000C0000003000404A100001000829100820A -:10E6000002020000008202880004000001000200F3 -:10E6100000009102208800088288000000010201A9 -:10E620000000A09121040283040980000000000082 -:10E6300000001080050000800000000200020020A1 -:10E6400000208000052100040021808080000080DF -:10E650008080008800820000000280840883000916 -:10E66000000300401020000000000000A000020095 -:10E670008002000000A0000500C0000580200010FE -:10E680000085800000002000800000800000100055 -:10E690000000000021048002009080112003050288 -:10E6A00080020040C0108385001080100000000030 -:10E6B0000311020000000021801080000380A111DE -:10E6C00010000502890080839120892003800000CA -:10E6D00040090408C0001011802102041000100538 -:10E6E00080001040100082001000050000001000A3 -:10E6F0000920A080A1888000200088C010080000A8 -:10E700000000000000000000000000000000910078 -:10E71000C00090009080A000210585802010A000FE -:10E7200010008000000000002120900080080200FE -:10E7300088001000400082008200A00082000010CB -:10E7400011000000820010820410A088080100C09F -:10E75000A0000100040108900100A089010000044C -:10E76000A1000210C100852004000100000000008B -:10E77000000010008582910902829000A1A1000092 -:10E780000000080000000000000000000000A000E1 -:10E7900004000200100004A002400500A1028483CE -:10E7A000030889004000400008888301A0408221BE -:10E7B0000021008800400008021000100040A00561 -:10E7C0000001010005010000084000850005889156 -:10E7D000100900A000C08802000400000001002110 -:10E7E000044100A003A1018200000104028300048F -:10E7F00000000040009190110088200100200311CA -:10E80000C101004000882103004000000001000019 -:10E8100000000000000100000000040800A000212A -:10E8200082090000004005A1000420C100C01011B1 -:10E8300004090002000500820080008000800009B9 -:10E84000808400101004102140100040008303A1B8 -:10E85000108900840084000400000080040400206B -:10E860000002800841C021210289000002C180A16C -:10E87000000000000089004085C00502000800007B -:10E880008521911100800020050802040040000845 -:10E890000020001000030008000300200000218970 -:10E8A000100880A0000802C0830800C000082011E2 -:10E8B00003210083001000000080004000000000E1 -:10E8C00000008000C0808382090003C1200504800D -:10E8D00002000011080009000200400082008508C3 -:10E8E000080085400880840821001002000005828D -:10E8F00002800308000021840000A1800008A140DC -:10E900002100400000110204008004000400000007 -:10E91000000000000000009100800080004102859E -:10E9200010A10380031020212108200000100221E3 -:10E9300083A10900A04000010088000200008800B7 -:10E9400010902090A00004A0054004080109C10017 -:10E95000118209209001210000A0042085000200FE -:10E960000400108482011010828809000800001041 -:10E970008803A1820300000089100200850840017D -:10E980004105880490200401010000200088000057 -:10E990000000001000880000000800020040000194 -:10E9A00021A0831004044001A001089101901000EF -:10E9B000830140A0A002040100000000000000004C -:10E9C0000000000000000000000000000000000A3D -:10E9D000810000E000000000000000000000600076 -:10E9E0000000000000000000000000000000000027 -:10E9F000000000000000000000000081000007008F -:10EA00008800820000E00000000A00000000000012 -:10EA100000000000000000000000000000000000F6 -:10EA200000410000000000000000000000000000A5 -:10EA300000000000000000000000000000000000D6 -:10EA40003F30C3C3F0F03C3C00FFFF00FF0000007C -:10EA50000000FFF0663C0000FFC0FCFC3C3C0000F6 -:10EA600001009900C30F000018180FC30FC3D8D8B6 -:10EA700018DBFCC0FCC0F0FF00000000080BC8CB96 -:10EA8000003C003C00FB00F0000F000F0000000005 -:10EA90009999C3C3000000000000000000000000BE -:10EAA00000000000033F033FFB00FB00FFC33C00EE -:10EAB000F0F0FF0000008099060606060000000046 -:10EAC00000003636C3C3FF00F0F066660F00FFF0AB -:10EAD0000000000000F0663C0000FF80FCFC3C3CB5 -:10EAE0000000000099FFC30F00001818990099FF5B -:10EAF000D8D81818FCC0FCC0FFFF0F000000383B3E -:10EB0000F8FB003C603C00FB00F0000F000F000031 -:10EB100000000F0F00FF00000000000000000000D8 -:10EB20000000000000008181BDBD0000FB00FFC3AC -:10EB30003C00F0F0FF000000808106260620000067 +:10DD90000000000000000000000000000000000083 +:10DDA0000000000000000000000000000000000073 +:10DDB0000000000000000000000000000000000063 +:10DDC000FD01FFFC0000FFFF00003C2DFFBEF3FF44 +:10DDD000E8F00000000000000000404000000000EB +:10DDE00000002828C0FC053CFF00000000000000E7 +:10DDF0000000000000003030F3F37D287D2828AAC1 +:10DE00007DFF000000000000FFFF00000000000098 +:10DE10000000000000000000000000000000000002 +:10DE200000000000000000000000000000000000F2 +:10DE300000000000000000000000000000000000E2 +:10DE40000000FD010300003CFF3C00003C2D0014DD +:10DE50003000E8F00000000000000000400000007A +:10DE600000000000EBEBC0FC053C000000000000DF +:10DE7000000000000000000082BE82BE0F0F0F0FE6 +:10DE800028007D5500000000C000FF3F000000009A +:10DE90000000000000000000000000000000000082 +:10DEA0000000000000000000000000000000000072 +:10DEB0000000000000000000000000000000000062 +:10DEC00000000000FFCF000CAFFF10BF0000FF00FC +:10DED0005555C0F0FCF000000000000000000000FC +:10DEE0000000F0FAFCFEFF3C003C1F1A1A1A00006A +:10DEF0000000000000002D2DFFAA00000000F7F731 +:10DF00000707F07DF07D0000000000000000000029 +:10DF10000000000000000000000000000000000001 +:10DF200000000000000000000000000000000000F1 +:10DF300000000000000000000000000000000000E1 +:10DF4000000000000000FFCF000C005010BF0000D8 +:10DF5000FC0C5F50C0F0FCF000000000000000006E +:10DF600000000000F0FFFCFFFFFF00001510101084 +:10DF700000000000000000002D2D550000000000F2 +:10DF8000F4F40404F028F028000000000000000071 +:10DF90002080008000801110100020000000200070 +:10DFA00020002000400020001000000000000000C1 +:10DFB00020000000880088008800200000802000E9 +:10DFC00020002000200820008800010000008800B8 +:10DFD000000320000182210020002000200000809A +:10DFE00020C02000200020000000200200000000CF +:10DFF0008880200000000000200020000000840035 +:10E00000200020050000200040002080C0094000C2 +:10E0100020004002400200022001400000004000B9 +:10E020000000000040000000000040000000000070 +:10E03000000040004000410000000000000000021D +:10E0400000000000000000000000000020000000B0 +:10E050000002000040000403040000000000000073 +:10E06000001009110000000000002000090100005C +:10E070000902000200900090200000000000000053 +:10E0800000000090400000000000000000024090EE +:10E0900000000808200420008202208904000000FB +:10E0A0000200000000000020900220880000000014 +:10E0B00000000000000400000000000090000008C4 +:10E0C0000000084000000408000040800000000438 +:10E0D00000000040000040009000000008000080A8 +:10E0E0002020008004000000000000004000000923 +:10E0F0000000000000000009000090004000040043 +:10E100000005900001100400000004410000900090 +:10E11000000001080008808580C000898002000896 +:10E120000008000800840008000100838004000843 +:10E1300000840082000000000008008400840008C1 +:10E140000082000800840084800100108020008884 +:10E15000000100080001000080880088000800001D +:10E16000002080110020800000880000000880004E +:10E1700000080000000800080208000000108000ED +:10E1800000820000000840000000000000080000BD +:10E1900000C000C00884008801C120882008908841 +:10E1A0000003000000000000002100000002001039 +:10E1B000000000000008000300080000000000004C +:10E1C0000000000900000000000000000902000536 +:10E1D0000000000000000208000000032102000906 +:10E1E0000200840000000008A040000000000000C1 +:10E1F0009000001001000010000040210000882164 +:10E200000088000900414021002100054021004113 +:10E21000840800050008004188052004C10480002E +:10E2200000040000000000000000000000000001E9 +:10E2300000010000000000000000000009000000D4 +:10E240000000001000000300001000004000C001AA +:10E25000000009000000050080000000030040915C +:10E260000000C100050405000000000100000000DE +:10E270000000020200040200000240200200000030 +:10E2800003000310204041000500000000000004CE +:10E290001090000800020090000000000003000041 +:10E2A000004182400000000000000000A0000000CB +:10E2B0000820830008000000080008048200000015 +:10E2C000000008000800000082001000100800098B +:10E2D00000002000010040000000200400000000B9 +:10E2E000000000000000A0000000C000100000417D +:10E2F000880008400800A00000000800004100114C +:10E3000000110008001090004082C0000040C011C1 +:10E31000A004C00020909002A0029000000200C063 +:10E32000008400840800000000400900000009008B +:10E330000000040804C0000000000000008400C0C9 +:10E3400000000000000000000000000002848000C7 +:10E3500000000000800010084000009080000000D5 +:10E360000008410011900500000000C0000000C03E +:10E37000000000008088800000A04000800008A00D +:10E3800000000000040120000084001105000010BE +:10E3900000A002000204000300100000219000050C +:10E3A00084000000000400000003200000000008BA +:10E3B000000000000020002000000000000000031A +:10E3C00000000000000800000000000000008200C3 +:10E3D0008800000000402000080011008421000097 +:10E3E0000000C00020000000040200000010000037 +:10E3F0000090004000000040024100050011822111 +:10E40000000000210010030240008205902140839B +:10E41000A088C005004100080003A0000002A04140 +:10E42000A008000000000001000000000000000043 +:10E4300000000000000000010001000000000000DA +:10E4400000000000000005000000000000000000C7 +:10E45000000000040000000480000940900000005B +:10E4600000000000200005000000800005082000DA +:10E47000000000410400022040200900400000404C +:10E48000000000880090000108000900400005001D +:10E490000310001000900900210000040004000196 +:10E4A00000A0000000000000002100C104000040A6 +:10E4B0000021C00500000000000001020000000073 +:10E4C000000000000000000000000011000000003B +:10E4D000000000000000000000000004000404111F +:10E4E000C080002100000400A000000082000000A5 +:10E4F0000041000000412004080000090040822182 +:10E500000008000520212121820500210208008346 +:10E51000080584052021C085090520412041881176 +:10E520002084A12100410000000011002002000011 +:10E5300000000000000041900000000040110000B9 +:10E5400000000000200000000000000000000000AB +:10E550000000000000000000000000000000008239 +:10E560000000090400C0000080000000000200005C +:10E57000000000C000000004000080000000000057 +:10E58000000002000000000040C020402000000009 +:10E59000020220400220002000020202008211102C +:10E5A000000800104000001000018400110100016B +:10E5B0000000000000000000000091008800000042 +:10E5C000000000000000000000000000000000004B +:10E5D000000000000000000010A00000C02010207B +:10E5E00000000100209000C0000000C00083000077 +:10E5F000002002C1001100010402021009208882DB +:10E60000C088081008411083C020020908882083B0 +:10E61000C08409840988A083C0100101010084011D +:10E620000000C01185410082A00200080003880399 +:10E630000010000000000000000000009100000039 +:10E6400000000000000000000000000000000000CA +:10E650000000000000000000000090800900800021 +:10E6600000000000090040000000000000C0002180 +:10E670000005000380890090001000841100A08034 +:10E68000008080008088859000C080A010C1A00319 +:10E6900010888984A085C02100888084201002030E +:10E6A00080020903008240880491009110C1830018 +:10E6B0002004898400000000000000009100000098 +:10E6C0000910C10000000000000000000000000070 +:10E6D00000000000100004001000400004000211BF +:10E6E000C080C10010004110209141000000008056 +:10E6F00000080004002000800005801180028000D6 +:10E7000080108000800000008004800300008041B1 +:10E710008020009080808000804000800008800081 +:10E72000800000008000400005088005050591116B +:10E730008300100108A0000000000000000040005D +:10E740009002890183040000000000000000000026 +:10E750000000000000000100000000000000400078 +:10E76000A001A140910001900083008501080000F4 +:10E7700000400021008800C020084040A00808C0D8 +:10E7800008000811408808848800088402880284F0 +:10E79000400008118840080410A00803880202A164 +:10E7A000100020002000C084A0408503044004889D +:10E7B0000000210001000000000000000000000037 +:10E7C00000010000C0000000000000000000000088 +:10E7D0000000000000000000000000000000000039 +:10E7E000C01100880003891100010001000001012F +:10E7F0000001010001002100830020900108400871 +:10E8000000C0C009000810050211C102000891A053 +:10E810000803C088000810858808C18988098440D9 +:10E820000802000001010100000010A0018485041D +:10E83000C108002091202102100200000000000009 +:10E840000000110900200020000500000000000069 +:10E8500000000000000000000000000000000000B8 +:10E86000000080090002004011C1000900030003FC +:10E8700011410001410010000300090002000800DE +:10E8800080000080A08400A180200090A010208241 +:10E8900008119109A011218484C041829004009044 +:10E8A000218885101104200820000005A0400209DD +:10E8B00005A0A1850311090810A1050300000000AF +:10E8C0000000000000C00021000000000000000067 +:10E8D0000000000000000000000000000000000038 +:10E8E0000000000900090000000000090084201158 +:10E8F000200003030001030088201100A000210470 +:10E90000112084000400004000840000000000404A +:10E9100080C080800000000500A0000000000021F1 +:10E920009083048004000004008000800000002028 +:10E9300040040980041100900021018301010000BE +:10E9400000000000000000910020102000000000E6 +:10E9500000000000000000000000000000000000B7 +:10E96000000000000000A0C000104040000020880F +:10E970009001C00005010001C0000801200008004E +:10E9800021000504084088002001C0111002C000C9 +:10E99000880120118408C000040002111002C00088 +:10E9A000040004111008C00000010020000800004D +:10E9B000044111A0C0401100000000E0000042002E +:10E9C0000000000000000000000000E00700000060 +:10E9D0000000000000000000000000000000000037 +:10E9E0000000000000000000008100E0070060213E +:10E9F000810000E0000000000000000000000700AF +:10EA00008400820000E00700000000000000070012 +:10EA10004212000000000700421200000000070040 +:10EA20004212000000000700421200000000000037 +:10EA30000000000000000700000A000000000000C5 +:10EA4000000000000000000000000000F0F00000E6 +:10EA500000000000000000000000000000000000B6 +:10EA600000000000000000000000606090902000A6 +:10EA7000240000F1FFF1000000000000F0F70007A3 +:10EA8000000000000000FFC9C3C300F9000000003F +:10EA90000000000000000000000000000000000076 +:10EAA0000000000000000000000000000000000066 +:10EAB0000000000000000000000000000000000056 +:10EAC0000000000000000000000000000000F0F066 +:10EAD0000000000000000000000000000000000036 +:10EAE000000000000000000000000000FFFF9F9FEA +:10EAF00030003C0000FDFFFD000000000000F0F4CD +:10EB0000000400000000FFFFFFC900FF00F9000043 +:10EB100000000000000000000000000000000000F5 +:10EB200000000000000000000000000000000000E5 +:10EB300000000000000000000000000000000000D5 :10EB400000000000000000000000000000000000C5 :10EB500000000000000000000000000000000000B5 :10EB600000000000000000000000000000000000A5 :10EB70000000000000000000000000000000000095 :10EB80000000000000000000000000000000000085 -:10EB90000000000000000000000000000000000075 -:10EBA0000000000000000000000000000000000065 -:10EBB0000000000000000000000000000000000055 -:10EBC0000000000042C3434380008000FBFBFB3891 -:10EBD000000000006060FFFFFCFC06F60000000083 -:10EBE000DB43DB4B0F0F0606F300F3F3003C003C66 -:10EBF000000000C06666F606000000006C6C6C6CDD -:10EC0000000000000000000FFF0F000F666F0C6E89 -:10EC10000C6E00C000C00F0F0F0F0CFC0CFC6666E2 -:10EC20006666000000003B380B08F690F6900099ED -:10EC300000FF000000003030BD8100C399F0424267 -:10EC4000424200000000008101018F03BF3F3838BD -:10EC5000FB380000000000009F9F0C0C06F600002F -:10EC60000001CBCBCFCB0F0F9F9FF300F3F300003E -:10EC70000000030303C36666F606000000003C3C88 -:10EC80003C3C0000000000000000FFFF000F000FF0 -:10EC90000066006600C000C0666666660CFC0CFC80 -:10ECA0000000FFFF00000000FBF8CBC8DBDB4242A6 -:10ECB000008300C300000000F3F3BD81FFC399F09F -:10ECC000C000000000610006000D000000610006A9 -:10ECD000000D000000610006000D0001006130061B -:10ECE000C00D200180610006000D000000610006DB -:10ECF000001D000000610006001D0000806100068C -:10ED0000000D0000000080610036000D0000006171 -:10ED10000006C009000000610006000D000000614F -:10ED20000006000D000100610006000D00000061FA -:10ED30000006000D000000610006000D00000061EB -:10ED40000006000D0000000000003CF03CF0000058 -:10ED5000000000FFFFFFC3AA00F000C30003000093 -:10ED6000000000000002000000003CF03CF0E80061 -:10ED7000E8C3A0AF00FF08A800A0551400140F2B93 -:10ED80000F2B05550555000000000000000800008D -:10ED90000F0A0A0AFF00D700FCFC0C0C00F0FFF081 -:10EDA00000000000AB83290100000000173C1700A1 -:10EDB000B2B2003C00F0FFF0AAA0FFF0FF005555F2 -:10EDC00000AAC3F002570257000000003CF03CF0DC -:10EDD000000000000000FF00C3AAFFF000C3000312 -:10EDE0000A000000000000000EFE04F43CF03CF0BD -:10EDF000E83CE8FFA0AF00FF08A80AAA55050005F7 -:10EE00000F2B0F2B0FFF0FFF0000FFFF0F0F000056 -:10EE100000000F000000FF00D700FCFC0C0C00F00D -:10EE2000FFF000000000BF973D150000000017FF35 -:10EE300017C3B2B2C3FF00F0FFF0AAA0FFF0C3C334 -:10EE40000F0FFFAAC3F0AAAA00000000000000FFF5 -:10EE5000AAAA0000000000000000F0AAC300F3F31B -:10EE6000F3F303C303C300000014000000003C3CA4 -:10EE700000FFFF41BE001E1E3C3C8A088A080000BD -:10EE80001414FF55AA000FC3005500000F0F0F0FF9 -:10EE9000BF0000000000000055005500FFFFF0F02B -:10EEA0000000000000000000000000000000000062 -:10EEB000AFAFAF000055E1E10000010182BE30308C -:10EEC000B4B4B4B400F0AAC305AF05AF00000000AD -:10EED00000FFAAAA0000000000000000F0AAC3FF83 -:10EEE000F371F3F3030303030000001400000000B8 -:10EEF0003C3C00FFFF41BE001E1E3C3C0000AAAA95 -:10EF00000000F4F4FF55AA000FC3FF5500000000F5 -:10EF10000000FF00000000C000005000550000FF8E -:10EF200000F00000000000000000000000000000F1 -:10EF30000000AF83AF83AAFFE1E18200010182BE3E -:10EF4000F3F3B4B4B4B4FFF0AAC305AF05AF400007 -:10EF50000400001100112004200000110400C0046E -:10EF600008800404000400004000400420048808D5 -:10EF7000200088040010C00020000400404005006C -:10EF800000000404000402000410040488000003CC -:10EF90008480410501008482C00520000400200413 -:10EFA00088028402200088002000880220040004D7 -:10EFB000880000000400200000032000200020043E -:10EFC00004000000404141002000200020004000DB -:10EFD000000000000000000000C000C000000000B1 -:10EFE0000001890400010401000000040000040184 -:10EFF000000000000000040105004102090021009A -:10F000000800000000000000419040404100400026 -:10F01000000000042000200000040500090000009A -:10F0200000C00000040000004000000000000001DB -:10F03000400100000000000000000000000000008F -:10F0400000000000000000008800000000004000F8 -:10F0500000000000200800008400000500080010E7 -:10F06000824000000000010020090100840400002B -:10F07000000000008400000910000005880000085E -:10F08000080902040000000000000009820000805E -:10F090008210000020094004400440840040000029 -:10F0A0000000000000800010000000900400200319 -:10F0B00000000204020000000000200200004000E6 -:10F0C00000000000000000000000900000000800A8 -:10F0D00084001000008800820482048200040382FD -:10F0E00000820008008400840888400408840885A1 -:10F0F0000000000800840410030808080000040849 -:10F100000084040800004184400800080404200032 -:10F110000902040800008084A083808484020482A1 -:10F1200000824108000840020083408404030082FA -:10F1300080000082031100000084008200010008AA -:10F14000800000080908000800000000008200009C -:10F1500080000000000400080021001000080402E4 -:10F16000A02104409040882190414000001084106C -:10F1700000100008001100410002000000400008DB -:10F1800000022000000220020240000310000121C2 -:10F1900020100408004000002000200340088221C5 -:10F1A000000800000000041000022021900200026C -:10F1B0002040408000800000200000080011000076 -:10F1C000000000000000902100210011000000005C -:10F1D0000002000000000008008208000001089002 -:10F1E0000088210441A003840004000810040301E6 -:10F1F00000C003A0000003A0419000820082031021 -:10F2000020820300100000A00890000000A0101051 -:10F2100040080588000000A000000882200080004F -:10F2200010844184090003000000008285822120AF -:10F23000008420201004000403080800404004005B -:10F24000080208000990008200002000114000829E -:10F25000080040400000410003080121110008108F -:10F26000852182110402820910001100040090021D -:10F2700008001009C04182111041884100110000AE -:10F2800001028800402102048290A010C1002000E9 -:10F290004041C000C002C000010000002000880002 -:10F2A000100082040805C00000001004040200835E -:10F2B0000210A0048204849100000402A000022035 -:10F2C000000082000000100000004000080900005B -:10F2D0004009820090000000200482000800020023 -:10F2E00041090200008220A1000000000800000087 -:10F2F000030000002000208208000002210000A07E -:10F3000005104000100011041110400303010220F9 -:10F3100041402190100200900000084000000000D1 -:10F320000000040202051000210000000000080196 -:10F330000004000100084101210410000800000041 -:10F340002100000000001100210000000200030065 -:10F3500000008800209000040900000000008221C5 -:10F36000C00500A0C0419000880010080003000004 -:10F370001000080802040003081000000002A003A7 -:10F380009008882040020002900440000811C00844 -:10F3900008088400842182004040400008000000EA -:10F3A00000008200080000040003041108004089E6 -:10F3B0004000C000082000110105000000040120E9 -:10F3C00084030000100000000000000000020004A0 -:10F3D0001000000500212020000002210000900004 -:10F3E0000220008800100200000005A00890000024 -:10F3F0000800088400000801099020000988000026 -:10F4000004A0002000000510030009004190110431 -:10F41000110000040810200040C003000004050093 -:10F42000000020020008000000C00240001021106F -:10F430008910C082000085400084208400000040C4 -:10F4400020A0090000002088009002041100029012 -:10F4500041A0090208882090088800400520090082 -:10F4600003A00821C00000020003000000210000EA -:10F470000009000090002000081040080021001042 -:10F480000000080020410011000008108403004122 -:10F4900040044000A011001002000000A00009007C -:10F4A0000000000000008441020001000000040090 -:10F4B00010004003900890808200418002000904FF -:10F4C0000000002184080800004090001021000086 -:10F4D0000400000000000400400800001040000884 -:10F4E00020000000000008000000000021000002D1 -:10F4F0000002410200000000030011090000410069 -:10F500000484000441C000404000008400002184C5 -:10F5100000849190200040880001200000000088B5 -:10F520000290210000000000040080000800030099 -:10F530000000000000200000001009000802800008 -:10F540000888110400001102100003020220008844 -:10F55000000200880400200203882000090204023F -:10F560002104008820201010009000A00804000052 -:10F5700000000000000003820088009004100001D9 -:10F58000000004000001000000000800000000026C -:10F5900000041082001000000000000000000000C5 -:10F5A0000000900000000000000182010101000144 -:10F5B000010000000000000000A00108A0A10082DE -:10F5C00001A00102000890040000010040000000BA -:10F5D0000000000000010001000009000000000020 -:10F5E000A10200200004A0020080000000800000B2 -:10F5F000000000000020000891021110004100806E -:10F6000000080320910300080000100080000000A3 -:10F610000080020080000080000000000000000068 -:10F620004000090800080000000003080003201142 -:10F63000000810002100000000000080419191822C -:10F64000000011A040A10091008020002100800056 -:10F650000000000500110005000800000300000084 -:10F660000000210000800080008000008003808076 -:10F670008000000000000000000002000200910075 -:10F68000001002000800040005110200A10084001F -:10F690000002800000008000000000000003000065 -:10F6A00000000500032190000880000008040421E8 -:10F6B000400302910000000000000000900088005C -:10F6C00080001041200041210811202008802000E6 -:10F6D00020002041110003000200028502001000FA -:10F6E0000000808000000000800000000400020094 -:10F6F000A0A00800009000000000000000004000F2 -:10F7000011020400000800000108000000A0090028 -:10F710001100000004000400A0000400000000012B -:10F720008200C01090000100400001A00000A00075 -:10F730009100000101A090000800000000000300FB -:10F740008200A000C1830020000001010101010826 -:10F7500001000100000100C00000010001A0000044 -:10F7600001000000909000004000A008820090106E -:10F7700000040088022000000000000000000020BB -:10F7800000000110A0A00000000001010001000025 -:10F79000000000010001028200A1000282100000AE -:10F7A00000040020009000010100000000010000A2 -:10F7B0000001A001000101000001000000010000A3 -:10F7C000A0A1000000C18290040001000005110208 -:10F7D000000000010001000000000001A000000086 -:10F7E0000000000004000000902000900084A14070 -:10F7F00000000080000080000000000010000000F9 -:10F8000000022110058383830040090505211103AF -:10F8100000050040002100028010008800C1802007 -:10F820000000000000000200000810400003000279 -:10F830000000000405400521200000080000001021 -:10F84000002000A040210021801180204000008580 -:10F850001108001000020021000000410810890872 -:10F86000000400090000800000000000000000808B -:10F8700088000008800800800000210004002000AB -:10F88000080082841100890083032100080210000F -:10F89000110309802000100008000004000200800D -:10F8A00000000000800000000000808000020000D6 -:10F8B00000030000A100208020C01005000000000F -:10F8C00000000000908405080000050020000011E1 -:10F8D00083000000020440084100084021000408A1 -:10F8E0004000110300800000000000000000000044 -:10F8F00000000000C00020409082200001000100B4 -:10F9000000000000020821041082A000018205000E -:10F910000500000000040188000001000001001142 -:10F92000000200001000820404A08800021000A160 -:10F93000828240010000038208029002010100005F -:10F94000009000200000A1A0880490208800890079 -:10F9500020010300000000900100000001000140B0 -:10F96000010101000001000400000000000000008F -:10F97000888200000000000000000000000000007D -:10F98000000000000000000000E000000000000097 -:10F9900000E0000000000000000000000000000087 -:10F9A0000000000000000000000000000000000057 -:10F9B0000000000000000000000000E00000000067 -:10F9C0000000000000000000000000E00000500601 -:10F9D000000000E0000000000000000000000081C6 -:10F9E00000000000000000000021000012000000E4 -:10F9F00000000000000000000A5FFFFFA000000000 -:10FA000000000000000000000EFE02F2FFC3AAC3C7 -:10FA1000A0AFA0AF00000000000000000000000048 -:10FA200000000000FFF0C3C0FFF3C00C000FF0FFA8 -:10FA30000000FFFF000000000000FF00F0000000D9 -:10FA400000000000000000000000F0FF303FFF0059 -:10FA50003C00FF0FFFFF00FFFFFF00000000000061 -:10FA60000000000000000000000000000000000096 -:10FA70000000005500555F0A41411E1EFFFFB030D7 -:10FA8000000000000000000000000EFE02F200C3B3 -:10FA9000AAC3A0AFA0AF000000000000000000005B -:10FAA000000000000000FFF0C3C000FF033C000F97 -:10FAB000F0FFC0C0CFCF0000000000000000000039 -:10FAC000000000000000000000000000F0FF303FD8 -:10FAD000FF003C00000F00FF00FF000000000000DE -:10FAE0000000000000000000000000000000000016 -:10FAF00000000000005500555F0AEBEBC0C3404317 -:10FB00007DFF7D3F0000000000000000F371B23077 -:10FB10005F555F5F00000000000000000000000073 -:10FB200005F505F5808AD0DAFF00FF00000000002F -:10FB3000FF00AA000000000055C355C300000000EC -:10FB400000000F0F0F0F00000000D7D7D7D77F435B -:10FB50007F43F535F535CF4DCF4D00000000000057 -:10FB60000000000000000000000000000000000095 -:10FB700000000000FFFF04040555FA00FAFA808334 -:10FB800000037DFC7D3C0000000000000000F371DC -:10FB9000B2305F5555550000000000000000000025 -:10FBA000000005F505F5858FD5DFBF00FF000000DB -:10FBB0000000FF00FF55000000005555555500009E -:10FBC000000000001717171700000000D6D6D6D681 -:10FBD0007F433C00F5350505CF4D0C0C00000000BF -:10FBE0000000000000000000000000000000000015 -:10FBF000000000000000FFFF05550555FA00FAFA65 -:10FC0000000040000000000100610006000D00003F -:10FC10000061000000010000006100050009000013 -:10FC200000610006000D000000610006000D0000EC -:10FC3000000000000000000180610006000D0000CF -:10FC4000000080610007000D000000610006000D4B -:10FC5000000000610005000D0000006100000011BF -:10FC6000000000610006000D000000610006000DAC -:10FC7000000000610026000D0000000000000000F0 -:10FC80000000000000000000000028A82FAF0000C6 -:10FC90000000FF3CCF0C00FFFCFC0414FFFF0AFF38 -:10FCA000CAFF504150EB00FD00FF000000003C3C4B -:10FCB0003C3C000000000000000000000000535326 -:10FCC000F00000000000FFFF000C000C000000002E -:10FCD00000000000C3FFC3FFF0F0F0F0FFFF0000E2 -:10FCE0000000FFFFC00AC0FA0FFF0FFFFFFD00007A -:10FCF000FF0F3C0C000000000000000000000000AE -:10FD000000000000000000000000000028A82FAF45 -:10FD100000000000C300CF0C00FFC0C00400FFFFC4 -:10FD200000FF00FFFA41FAEB00FF00FF00000000B7 -:10FD3000B0BF101F00000000000000000000000025 -:10FD40005353FF0F00000C00FFF3000C000C0000E9 -:10FD5000000000003C00C300C3FF28AA3CFF5F5F17 -:10FD60000A0A00C33CFFCF0ACFFA07D707D7FBF92F -:10FD70000000FF0F3C0C000000003C3C3C3C00003D -:10FD80000000000000000000000000000000303013 -:10FD90003030000000005555FF002A7F2A7F000008 -:10FDA000005455003C3C00000000F0C0F0C00000D2 -:10FDB00000000000000000000000000000005505E9 -:10FDC0005505F351F300000082C2AAFA41410080B8 -:10FDD0000000000000000000AF00AF00F0F03C3C6D -:10FDE0000F0FAF05C0FC00FF00000000C0F5C0050C -:10FDF000050F0F0FC3550F0000000000F3F3F3F3DE +:10EB900002102000008810840210200000881084D9 +:10EBA00002102000008810840210200000881084C9 +:10EBB0000000000000000000021020000088108407 +:10EBC0000000000000020000000000000000000043 +:10EBD0000000000000000000000000000000000035 +:10EBE0000000000000000000000000000000000025 +:10EBF000F6F6343499109911CFCFCFCF0000000032 +:10EC0000000000FF42420000000000FFFFFF8303FE +:10EC1000B33300000000000000000000000000000E +:10EC200000000000000000000000000000000000E4 +:10EC3000000000000000303FF6F600000000000079 +:10EC400000000000000000000000000000000000C4 +:10EC50000000000000000000800000000000000034 +:10EC600000000000000000000000000000000000A4 +:10EC70000000F6F6000099009999CFCFCFCF0000A1 +:10EC80000000000000FF42420000000000FFC3C37C +:10EC90008000B03000000000000000000000000014 +:10ECA0000000000000000000000000000000000064 +:10ECB0000000000000000000303F060600000000D9 +:10ECC0000000000000610007000D000000000000CF +:10ECD0000000000015610A0E050900A000000000F8 +:10ECE00000000000000000000000000000610006BD +:10ECF000000D0000006100360009000000603005D2 +:10ED0000C000000000000561340E050D00A0056183 +:10ED1000340CC59D00A000610006000D00000061DC +:10ED20004006000D000100610006000D00000061BA +:10ED30000006000D000000610006000D00050061E6 +:10ED40000006000D0000FFF7FFFF000000010000BB +:10ED50000000000000000000000000000020000093 +:10ED600000000000000000000000000000000000A3 +:10ED700000000000000000000000003C30303C2D8E +:10ED80003C2DFFFAF0B4000000C3000000000000BA +:10ED9000BA00FF4500000000000000000000FFEF87 +:10EDA000000000002C2FECEF000000000303D7143C +:10EDB0000F0F0F0FF0F000FF000000000101BFBFB8 +:10EDC0003C3C3C3C00FF00FF000400000000000150 +:10EDD0000000000000000000000000000000000033 +:10EDE0000000000000000000000000000000000023 +:10EDF000000000000000000000000000003CAAAA83 +:10EE00003C2D3C2D0050F0B40000D4D4D4D40000EC +:10EE10000000FB00FF0400000000000000000000F4 +:10EE2000FFFF000000002023E0E3000000003F3F60 +:10EE3000D7144F0E4F0EAAAA3C3C00000000000061 +:10EE4000FFFF3C2D3C2D30F300FF0F0F170F00800C +:10EE50000000000000000000000000000000003C76 +:10EE600000000000000000000000000000000000A2 +:10EE700000000000000000AF10BF00000000000410 +:10EE80003C3C00000000F3FFE8F0000041EBEBEB3E +:10EE9000000000003414F7D700000000000000005C +:10EEA0000000000004000000000000005555FF00B5 +:10EEB00000000000FFFFC00000000000FBEB0000AE +:10EEC000000000001E1EFFAAF0F0F0F00F0F0F0F61 +:10EED0000000000000000000000000000000000032 +:10EEE0000000C3000000000000000000000000005F +:10EEF000000000000000000000AF10BF0000000094 +:10EF000000000000000000003000E8F00000E1E137 +:10EF1000E1E1000000003414F7D700000000000019 +:10EF200000000000000000000000000000000F0FC3 +:10EF30003C3C000000003FFF000000000000FFFF1D +:10EF40000000000000001E1E5500E8E8F0F0400040 +:10EF5000000000004100200008000800840020009C +:10EF60000000000001032005000000000002210055 +:10EF7000000000000400200800008800000040801D +:10EF800000800088000020000000880000000003CE +:10EF900000000000000002002000008021800080AE +:10EFA0000000000000008800208000000000040035 +:10EFB000000000000000840020000000008002002B +:10EFC000000204004008100420000000002104009A +:10EFD0000000000040008800000080008000000069 +:10EFE000400040000000044000400000000000001D +:10EFF00004000000000020000000200000000000CD +:10F000002020002000200000000000000000000080 +:10F010000000200000000000800040000004C00448 +:10F020000004200000000300000000020000009027 +:10F030000000000000000000200000C000000004EC +:10F0400000000000400280058041410200004100B4 +:10F0500010000000108304030410040310200000BB +:10F060009005000000842021004000000005000001 +:10F070000000000000000000000900000000000087 +:10F080000000904004000400002000002000000464 +:10F090000010000000000000000800000000000058 +:10F0A00000800010000000000800000000000000C8 +:10F0B0000000000000000400022000200200000008 +:10F0C0000400840000404000001100000000000027 +:10F0D0000000001003C0802080088001800400111F +:10F0E00000000008000800418008000000880000BF +:10F0F000000000100084000000840008008400105C +:10F1000000100010008480008088000900008084C6 +:10F110000089000800000000000000400088000492 +:10F1200000080002000000000000001000080000BD +:10F130000008000800100000001000110001040089 +:10F140000008001004000000800000080088000093 +:10F1500004840010000000080009002000080005D9 +:10F1600000050008000000830004002000100000DB +:10F1700000080000000800000000C00500050002B3 +:10F1800000080000000000100000040304800003D9 +:10F19000C0000008A00000000003000800020200F8 +:10F1A0000100000200088280000040000000020010 +:10F1B00001000000000004002004040082000000A0 +:10F1C000084184000003040441004000400900009D +:10F1D0000000880000210000000000000000000086 +:10F1E00000000382030003840040000100010001CD +:10F1F00000000000080800000000000000100000EF +:10F200000000000041000800000021A08300A120B0 +:10F2100000C0058803A00300000041002100210078 +:10F220008004028220010000000200202000000073 +:10F2300040C002A0200020A000A00011A0C040A05B +:10F2400000C080C00010088220200288058403C00E +:10F25000008409000000000000000000840900058F +:10F260000000000000000090008500110000080070 +:10F270000800000500004000088000000000820037 +:10F280008400000000000800C0000083200000008F +:10F290000000840040910000820000000000000097 +:10F2A0000000080000000000000000000000000056 +:10F2B000040000000000000000000000000040000A +:10F2C00004000000C0000000004010114003820054 +:10F2D00040110441820000410011A0410082004021 +:10F2E0000000008200000008002000200010000044 +:10F2F00000A080A000A00000008800040000000022 +:10F3000000000000000000000300000000200000DA +:10F310000000000000008002000400000000000067 +:10F320000000000000000040000008000040000055 +:10F33000020000000040110000000000000020005A +:10F3400000000000008411040000009011C089C07A +:10F350000040008409000090000800020000002125 +:10F36000002100200000000000210005000301032F +:10F37000010004900441000000000009A004040002 +:10F38000000000001000000000000000A0000000CD +:10F39000000082000000000084080000000300005C +:10F3A000C000000000100040000200000000000348 +:10F3B00000000000000800200000000008200000FD +:10F3C0000000C0000004000040020003002001040F +:10F3D0000008001000000104A00000054000080221 +:10F3E000200000C008A008A00000000000000000ED +:10F3F0002000200080048084000000000000000144 +:10F4000004000000000000000000000000A0080050 +:10F410000020000000A00300020005000000210001 +:10F42000000008000288004000114091090000041B +:10F43000400011C0000002880040090411840088C7 +:10F44000008211C00984210800840900001000C056 +:10F4500008104001000005A0200000000588098870 +:10F4600000C00084002100210003000800000041CA +:10F4700000800004001100040808000500210005B8 +:10F4800008020004000000088200000002000008DA +:10F490008240000000000000820000008400200084 +:10F4A0000000000040000003000000000000000019 +:10F4B000000000000021000000000000000000002B +:10F4C000080000000000001100000000000502100C +:10F4D0000021844040020000000008000000900865 +:10F4E0002008022109200000000000A00000000008 +:10F4F00000000002000100900001008200000000F6 +:10F500000000000000000000000000840000000077 +:10F5100000000000000000000000000200000000E9 +:10F5200000000000000000000000000000000000DB +:10F530000000000000400000000000000440000047 +:10F540000010000400001108110409041140110802 +:10F550001190000820109105210411820000200064 +:10F56000409000842084000001000800000000009A +:10F57000000000880000C000C000010090000000F2 +:10F580000000080000000000000000000000000073 +:10F59000000000000000000000000000000000016A +:10F5A000200101000000000000024000000000C037 +:10F5B0000000010141010000000000000000000007 +:10F5C000000000010000000191A0008200850020E1 +:10F5D000001110090011000900010100C001000123 +:10F5E0000000000000000000000009008000000092 +:10F5F0000000000000000000800000000300800008 +:10F600000000030080000000000000000000000077 +:10F6100000000000000000000000000000000000EA +:10F6200000400020041000000000008000000000E6 +:10F6300000004008031082080010000000000000D5 +:10F64000000000110008002000081180001108903F +:10F65000000011C080030002000220414010801011 +:10F66000001000000000000000008000000000000A +:10F670008000000000000000000080020000000286 +:10F6800080000000000000000000000000000000FA +:10F69000000000000000000000000000000000006A +:10F6A0000080000000000040000300000000000592 +:10F6B0000080000010802100040003C00000000052 +:10F6C0000000000000000000000000000000001129 +:10F6D000808080800880212111911003100011008A +:10F6E000050041850000000000000000100090A00F +:10F6F000100004000000000000000004880040002A +:10F70000A001C0A0000000000000000000000000F8 +:10F710000090000000000000000000000000000257 +:10F7200000000010002000000001000100000000A7 +:10F730000082008200000108010001000089000031 +:10F7400000000000000000000000000000000200B7 +:10F7500000011040901001400100019101850190CD +:10F76000000001000188000000000000000000000F +:10F770000000100000010000000000000004004034 +:10F78000084090A000C0000100000001000000003F +:10F790000000000000000000000000000000000069 +:10F7A0000000400000000000000000000000000019 +:10F7B0000000000000000000000041010000000007 +:10F7C0000000000000000000000000000100000038 +:10F7D0000810010800900810400001008400C100DA +:10F7E0000001010002010000000000000000000014 +:10F7F0001109000000400041110900000000004014 +:10F8000000808000800000800002000300200000D3 +:10F8100000000000000000000000000000000000E8 +:10F82000110000008000000000000900000000003E +:10F8300000000000000000000000000503020803B3 +:10F840001040000000000000000000002100050042 +:10F850001000808008001080000080000300080075 +:10F86000400000081040880900200000000000004F +:10F8700000000000000800800000000000080000F8 +:10F8800000000009008000000000000900000000E6 +:10F890000000800000030000800000000000000065 +:10F8A00000000004000300000000032121004000CC +:10F8B0004000000000000000000000004121211075 +:10F8C0000400030200000000000000000008000027 +:10F8D00000000000000000000080000090A021084F +:10F8E00004000310418908210800081000000000EE +:10F8F00000000000000000A1001000000000000156 +:10F90000000000000000004000880000000000002F +:10F9100000000000900040002000040000000000F3 +:10F9200000000000000000000000000000010000D6 +:10F93000000001000000880004008800040001C1EC +:10F9400000000000010100000000000000000000B5 +:10F95000000000000000880008088808000011A0CE +:10F960001100090001000141010001000100000037 +:10F97000000000000000000000E0070000000000A0 +:10F98000000007000000008100E007004200810045 +:10F9900000E0000000000000000007000000000080 +:10F9A0000000000000000000000007000000000050 +:10F9B00000E0000000000000000000000000000067 +:10F9C000000000E000000000000000000000000057 +:10F9D0000000000000000000000000E00700000040 +:10F9E000810000E000000000880000E000000081CD +:10F9F0000000000000000000000000000000000007 +:10FA000000000000FFFF0000000000000000C30035 +:10FA1000000000000000000030FF35FF0000000083 +:10FA200000000000000000000000000000000000D6 +:10FA30000000000000000000000055555555000072 +:10FA400000000000000000000000000000000000B6 +:10FA500000000000000000000000FF00FF00202F59 +:10FA6000E0EF0000AA0A0000000000000000000013 +:10FA70000000000000000000000000000000000086 +:10FA8000000000000000FFFF000000000000AAAA24 +:10FA90000A00000000000000000030FF35FF0000F9 +:10FAA0000000000000000000000000000000000056 +:10FAB000000000000000000000000000CFFF0CFF6D +:10FAC0000000000000000000000000000000000036 +:10FAD0000000000000000000000000000000A00086 +:10FAE000202FE0EF0000AAAA0000000000000000A4 +:10FAF0000000000000000000000000000000000006 +:10FB0000C3001717F0F0F0F0000000000000000044 +:10FB10000C0C0005000000000000000000000000C8 +:10FB200000000000000000000000000000000000D5 +:10FB30000000000000000000000000000000FFFFC7 +:10FB4000C3C300000000000000000000000000002F +:10FB50000000000000000000000000000000FFFFA7 +:10FB60007C3CFFEB554100510055000000000000B7 +:10FB70000000000000000000000000000000000085 +:10FB80000000C3001414F0F0F0F0000000000000CA +:10FB900000000C0C0000000000000000000000004D +:10FBA0000000000000000000000000000000000055 +:10FBB0000000000000000000000000000000000045 +:10FBC000FFFFC3C3000000000000000000000000B1 +:10FBD0000000000000000000000000000000000025 +:10FBE000FFFF5000BEAA1400001000140000000027 +:10FBF0000000000000000000000000000000000005 +:10FC000005610A0E050C00000561000E000D00A044 +:10FC100000610037009D00A500610006C0090000DA +:10FC200000000008000000000000000000000000CC +:10FC300005000A08050000A000610005000D000095 +:10FC4000000000003000000000000061000700110B +:10FC50000000000000000000000000610006001D20 +:10FC6000000000610003000D000000610006C005F7 +:10FC7000000000610006C019000000000000000044 +:10FC8000000000000000FFC3141400000000C3C304 +:10FC900000000000000000000000000000003E0A1C +:10FCA0003E0A00000000000000000000000000000C +:10FCB00000000000000000000000F0F0F0F0000084 +:10FCC0000000000000000000000000000000000034 +:10FCD000FF003800000000000000000000000000ED +:10FCE000000000000000000000000000F500F4002B +:10FCF0000000000080200000BFA3BFBF0000000084 +:10FD0000000000000000000000C314140000000008 +:10FD1000C3C300000000000000000000000000005D +:10FD2000FEFAFEFA000000000000000000000000E3 +:10FD3000000000000000000000000000FC0CF404C3 +:10FD40000000000000000000000000000000000BA8 +:10FD5000000100003800000000000000000000006A +:10FD60000000000000000000000000000000F000A3 +:10FD7000F000000000008020AFDFA0A0A0BC0000C9 +:10FD80000000000000000000000000000000000073 +:10FD90000000000000000000000000000000000063 +:10FDA0000000000000000000000000000000000053 +:10FDB0000000000000000000000000000000005FE4 +:10FDC00000FF000000000000000000000000000034 +:10FDD00000000000BABA005500000000000000005A +:10FDE00004000000000000000FAF0FAF0000000093 +:10FDF00000000000A0BEE1FF14140030202000F03D :10FE000000000000000000000000000000000000F2 -:10FE10003C3C3C3C000000000F0F0F0F207520758C -:10FE2000000000550A0A3C3C00000000FFC3FFC36D +:10FE100000000000000000000000000000000000E2 +:10FE200000000000000000000000000000000000D2 :10FE300000000000000000000000000000000000C2 -:10FE400055055505F3F3F3A20000C3C2FFFA828201 -:10FE500082820000000000000000AF00AF00F0F060 -:10FE6000FFFF0F0FAF05C0FC00FF00000000CFF543 -:10FE7000CF0501030F0FC3550FFF00000000303006 -:10FE80003030000000000000000084002041200805 -:10FE9000000340022002040420040408400020055E -:10FEA00000058500218021080504820220002084AD -:10FEB0008982880089002000100004008900211038 -:10FEC00000000103218801048985000384002000CB -:10FED0002004200504052011040500008805840085 -:10FEE00010050010040820100405880800022020D6 -:10FEF0002020209020082102000000000080102017 -:10FF000004020000000020022100208000080500FB -:10FF100004914000090000411001000000020004AB -:10FF20004000000002004010100110000900100005 -:10FF300000210808000004409040000000904000AC -:10FF4000040200001000080410000804000009006A -:10FF50001000000041040900400009020000008276 -:10FF6000040240000283000240034000020000013E -:10FF700000010001000900010401000000004040F0 -:10FF80000001200000000000000020000008000028 -:10FF90000003008410040088000400000040A0401A -:10FFA00000A002A08210004008020008000801041E -:10FFB00000000040900082000305000084000080E3 -:10FFC00001000000000800400100010020000000C6 -:10FFD00000000000000000080000000000000021F8 -:10FFE0000204102008020810004000820090000463 -:10FFF0000080000000000000008000800000000081 +:10FE4000005F00FF00000000000000000000000054 +:10FE500000001C001C1C10100055000000000000D9 +:10FE6000000000000000000000000F050F0500006A +:10FE70000000FFFFFFFBA0BCE1FD555500F0A0A076 +:10FE800000F0000000000000000000002000000062 +:10FE9000000004008800000088002000000000002E +:10FEA00000000000000020002000000020000000F2 +:10FEB0000000880000000000000020080000000092 +:10FEC00000000000000000002100000300002000EE +:10FED0000008000000040000000000000000000016 +:10FEE00000000000000000000000208089842080C5 +:10FEF00021900180000041C10500400200800140C6 +:10FF0000C1000000090201800180210000001000F2 +:10FF100040000000200000000002000040004000FF +:10FF200000000000000000000000A0000000000031 +:10FF30000000000000000000000000004000000081 +:10FF40000000000000000000000020000000000091 +:10FF5000000000000000000000000002000000009F +:10FF60000000000000000000000000000004084045 +:10FF70000010904010100000841090020003000454 +:10FF800040032082000082040204202040C000417F +:10FF9000000000000809000002000000000800093D +:10FFA000000000000000000000000200000000004F +:10FFB0000000000000000009000000000000A04058 +:10FFC0000041A0000000000000000000A04100006F +:10FFD00000000000004000090000000000000000D8 +:10FFE000000000400000004000000000000002008F +:10FFF00000000200010000000000210000000100DC :02000004001EDC -:100000000280000000000008000000000000000066 -:100010000084008400418084044100090004000041 -:10002000000100058909000500018089400900855B -:100030000884008402090010000210100008020069 -:10004000000220100008040004101002200804829E -:1000500000002084000004080900009011820004C0 -:100060000008801180090009030900030005000948 -:10007000400100080000000800080040004040C0A7 -:10008000008400020008008400840088000000084A -:1000900000040010000800108410000500208420D7 -:1000A000028284900240200210020400200000001E -:1000B0004110858820001021002108082108102106 -:1000C0000508080485088921A002840301100003A3 -:1000D00010000000A00382000021000000000008C2 -:1000E000101010210005041000040021000300007E -:1000F0000005040800040090088800030400208024 -:1001000000A00300408040004080401004000180B7 -:10011000048004081100119002A102852108004109 -:1001200041098011040303C1000400010010800292 -:1001300041A0A0000204100080001140000288A02D -:100140008390C0828811029002004188000840001C -:1001500008A0C0000000410800A0100009402120B4 -:10016000418208004000400810A005010000400244 -:100170000084000840210083000280410002000248 -:100180000010000888820510880000028085080899 -:100190002010840884200400820040844000000075 -:1001A000C18008088280A09120850383080004098B -:1001B0001080040009880400A04040900000020262 -:1001C000A0400800080010000400410009000900D8 -:1001D000A000040041000000900000000000C000EA -:1001E0008800820040004040A0000802000000009B -:1001F00040000000000004000800A000900004007F -:1002000000000400088000000080000002808200DE -:1002100040008200A0000480000000C00020000018 -:1002200009040840000100202004000240040000EE -:1002300000840404008420040000009000021100E7 -:10024000C000000100400000800880009090C000C5 -:10025000820000008000400000000000000000401C -:100260002120004004C0218420C000000089040037 -:100270000400000004000020000000000000000056 -:100280000040000000000004000021040000800481 -:1002900000000000000000004110A0400000040821 -:1002A00008080000008500000003000000000008AE -:1002B000820009004110820082880890019000416C -:1002C000000010000880014100C1010300058220E8 -:1002D0000000080002000000004100000000004093 -:1002E000A00000038800400000088205840300008D -:1002F0000800A000A000000000000940A1000000CC -:1003000001110005000040800020830408800104E2 -:10031000C1080000018801400000108003C00000F7 -:100320001002090904000008110020200000082024 -:100330000082050002088808040409084108041026 -:1003400000882000C02000020440001002080000C5 -:1003500021000200090090A0001008900000089001 -:1003600000204000000004080520040008001104DB -:100370000000050405000084000405A040000220E0 -:100380000000400010A01002040840834021210812 -:100390000283048302000841400100040502840333 -:1003A00004008202820008000005000000A1080885 -:1003B000900804000000002102210000008040029B -:1003C000048082100003102084002000028082003C -:1003D00008002009004082030020A009040000005A -:1003E00010000000820900020800000000009000D8 -:1003F0000800840000208220820904008200880016 -:100400000010041010049000040010802000002050 -:1004100088000000820902020440100082020004E9 -:10042000008800C00001000000000410000000046B -:10043000040140001100000020000004000002023E -:1004400000010002000100040000002000008404FC -:1004500000000000A000000000000000000080007C -:10046000000000000000000000400000000000004C -:100470002000202011C00001000000000000090041 -:100480000004000100010001000000000004000061 -:1004900000010000000000000000000080000000DB -:1004A00000010001C0000000C183010000000085C0 -:1004B000C0A0C000C00000C0C082000004000089CD -:1004C000C00001000100000020090001000001053A -:1004D00084880400000100C004A00001000000099D -:1004E0008800000000000000000000000000000084 -:1004F000000000000001010001C0000000009001A8 -:100500000082040001000100000002C1010104009A -:1005100000830288C1010101002084A000011001B4 -:1005200001858200004180410000C1830241002119 -:1005300040C000008002894100808080000580402A -:10054000110200004141022100000341002000048B -:1005500020C0000080021002000000000002000322 -:1005600040840000000000000000000000000000C7 -:1005700000000000000000020800208000000020B1 -:1005800000200380800041200221000085410408F2 -:1005900080210590800084101002000000001020CF -:1005A0008040048800004100094100C10000414131 -:1005B00041410041000890C1004100410300840016 -:1005C00010410041800409001103000400001005DF -:1005D00041410000004010408005000002008500FD -:1005E00020410041004000000000410000100000D8 -:1005F00000000000000000008900008000000000F2 -:10060000900088050000002020004003000000004A -:10061000204041410080004184C0802100414000D1 -:100620008500C04100C180030000000100C100003E -:10063000000100010091008340C188C10001010058 -:100640004000A1010083820000000000008400003F -:100650000100010100880000209108040000010051 -:10066000400021010085040100000000000000019D -:10067000000000000000000000000200888200006E -:1006800000C083000300000000000100010100C061 -:100690000082000001010084009140030440000139 -:1006A000010040000301004102A100400001C140DF -:1006B000000000000001C104900000080000C140DB -:1006C0000000000000000401000000C00000C18420 -:1006D0000100000000010082200000090000C08528 -:1006E0000100000000010101000000000000000006 -:1006F00000000000000000000000000000400000BA -:1007000002000000000000000000000000080000DF -:1007100000820000000000010121210001400001D1 -:100720000585010000000000A100000000800041DC -:10073000C1C10000000000028383000000C100412D -:10074000C1C1000000000041910200000000000350 -:1007500003A04100000000030341890002A000043F -:100760008983410000000002020400000000000034 -:1007700000000000000000000000000000000080F9 -:1007800000008000000000000020030000000000C6 -:10079000000305A00000000000020504840010C052 -:1007A0000020848341000000004105030500C1C111 -:1007B00080008091000041400005A0414088C1C1F7 -:1007C00000808080000040410000800008914111BD -:1007D000800400C100004002800811C10388108419 -:1007E00000840080000040410000800004C0000040 -:1007F0000000001000830000000000000000000066 -:10080000004180000000000040080010800003113B -:100810002040804100C1000020000000C01020895D -:1008200004090004808000002041000080000904C9 -:1008300041C10800401000000000A00040830005F6 -:10084000401100C040C0000001010000402000082D -:10085000A04020019040000001001000100901029A -:100860008311002182C000000001000040880109BE -:100870000000000090010083000000000000000064 -:10088000000000C1020000000000000000014090D4 -:10089000014083412001824000000000C000092087 -:1008A0000104208200C140C000000001000040C0DF -:1008B00000C10000000000004842000000000000ED -:1008C0004842811200E0070048420000000000009A -:1008D0004842000000000000484200000000000004 -:1008E0004842841200E007000042000000000000BF -:1008F000484200000000000000000000000000006E +:1000000000000000000041000000000000000400AB +:100010000000008400080082008800840008008836 +:100020000010000000880000000800840008008420 +:100030000000008400400000000000080084001060 +:1000400000C0008800880000000800100084000044 +:100050000000000800000000000000000008000090 +:1000600000000008000000C00000008400400008FC +:1000700000880008000008080000000090880010B8 +:1000800002000008000000008800000000000010CE +:100090000000002100080021000000000003000013 +:1000A00000000021000500210041000000100000B8 +:1000B00000000021000000210021000000100000CD +:1000C000000300218405002120030000000000023D +:1000D0000408000000210000A02100000000200012 +:1000E0002005904100030021400500004000400031 +:1000F00000009000408004A10400900010880100DE +:10010000850008004100200802800000C021412134 +:10011000100000080084001000C000A000000008CB +:1001200000C000000090000000000000000000007F +:100130000000038400000000000000000000000038 +:100140000000000021820500000000000000000007 +:10015000000000000000000000A0000000000000FF +:10016000000000080000001000A0408800400004CB +:100170000000000002008008820280000220C140CE +:1001800002002008C08890908402A0200090009077 +:100190009000C00009A00000001100040009000048 +:1001A0000000000008000000000800000005C0007A +:1001B000000000000000000000000000000000003F +:1001C000000000000003C0110000C0050000000591 +:1001D000000000000000000082000000820000001B +:1001E00000110000000000000800000000000000F6 +:1001F0000000000000002000400088000100000016 +:10020000000000000009000402000000400000009F +:100210000000C00000001100090000000084000080 +:1002200000000000000000840008000000900000B2 +:10023000008400000000001000000000000000002A +:1002400000000000000000000000000000000000AE +:100250000000000000000000000000C000000000DE +:10026000000000000000000000000000000000008E +:10027000000000000000000000000000000040003E +:10028000000009000000000000118000000080A0B4 +:100290000000000000000000884000000000001086 +:1002A000000000008200000082000002A0000000A8 +:1002B000000000000000000000210000000000001D +:1002C0000000820008000000080000000000000894 +:1002D00000000000000000080021000000000000F5 +:1002E0000000000008000000000000000000000006 +:1002F00000000000000000000000000501000200F6 +:1003000000000000000000000000010808100400C8 +:10031000100500050100010000000411200000008C +:1003200000840000000000000084000800000000BD +:10033000000000C0000000000000001000000900E4 +:1003400000000000000000000000000000000000AD +:100350000000000000000000000400000000000099 +:100360000002000200900210000000002040000087 +:1003700000000000008400200010008840102004CD +:1003800020A00090209005000000090004008204D5 +:10039000A004850405201000080000A0C140000052 +:1003A0000000000000000011040000050000000033 +:1003B00000000008002100080008000800040008F0 +:1003C00000000000000508000000000000210000FF +:1003D00000000000000000080008082100000000E4 +:1003E000000800000000000088000000000000007D +:1003F00000000000000900000021000000110010B2 +:1004000000080000000020409005000002000004E9 +:10041000002000000008000200090005004020053F +:1004200000000000000020000000000000000000AC +:1004300000000000000005C00000000000000000F7 +:10044000000000100000000000000000000000009C +:100450000084000000000000000000000000000018 +:10046000000000000000000000000000000000008C +:10047000000000000000000000000000000000007C +:10048000000000000000000000000000000000006C +:100490000000000000C00000000000042010000068 +:1004A00080000000000000000000000000000000CC +:1004B0000000000004000002000000000000000036 +:1004C000000000000000000000000000000000002C +:1004D000000000000000000200000000000000001A +:1004E000000000000000000000000000000000000C +:1004F0000000000000000000000800000000820072 +:100500000000000001010100000089C10001C000DD +:1005100000050208840101000002C0A000000000E4 +:100520000089C00000000000000000000000000082 +:100530000000000000039100000000000000000027 +:1005400000000000000000000000000000000000AB +:100550000000000011032100000000000000000066 +:10056000000000000000000000000000000000008B +:100570000000000000000840410000800000000072 +:100580000000000000004120042100002041000282 +:100590000011090509801010052100000000000964 +:1005A00000041140000000004100000400000000B1 +:1005B0000000000000000900400000808000800072 +:1005C00000000000000900004000000000000000E2 +:1005D00000000000000009004080008080008000D2 +:1005E0000000000000040000000004000000000003 +:1005F00000000000000000000900A10000048000CD +:1006000080000000000000034000114000000000D6 +:10061000410441410002008382098003004104003B +:100620008200114100C10002000000000000000033 +:1006300000000000000000008800030400088200A1 +:1006400008000000000000000000010000000000A1 +:1006500000000000000000008400031000080200F9 +:100660000800000000000001000000000000000081 +:1006700000000000000000000000840010C000A185 +:10068000020008000000000000010100000100A0BD +:100690000000000001010088004141A0104100015C +:1006A00000C0410004010085C0C10000000000003E +:1006B000000000000000000000000010000000002A +:1006C000000000000000000000000000000000002A +:1006D000000000000000000000000010000000000A +:1006E000000000000000000000000000000000000A +:1006F00000000000000000000000000000100000EA +:1007000000000000000000000000000000400001A8 +:10071000C18200000000000001400400000200004F +:10072000094001000000000100010100000000007C +:1007300000000000000000000000000000000000B9 +:1007400000000000000000000000000000000000A9 +:100750000000000000000000000000000000000099 +:100760000000000000000000000000000000000089 +:100770000000000000000000000000000000000079 +:1007800000000000000000000000000000000080E9 +:100790000020048409000000001108909100000569 +:1007A00000098585040000000003094004000000E2 +:1007B0000004008300000000000000000000004171 +:1007C0008000000400000000000000000000004065 +:1007D000800000C100000000000000000000004197 +:1007E0008000000200000000000000000000000087 +:1007F0000004800000C100000000000000000000B4 +:1008000000C1000000020000000000000000000025 +:100810000911804180C1000002048004404103406E +:1008200004C10004808000004041002080000304D7 +:100830000000040000830000000000000000000031 +:100840000091020000010000000000000000000014 +:100850000001200000400000000000000000000037 +:1008600000910200000100000000000000000000F4 +:100870000000000020000040000000000000000018 +:100880000000000540000001000000000000000022 +:100890000000048420018440000000008201A0C107 +:1008A00001C0A04100C182C000000101000140A0C0 +:1008B00001A0000000000000000000000000000097 +:1008C0000000810000E0000048000000000000007F +:1008D0000000000000000000000000000000000018 +:1008E0000000810000E0000048000000000000005F +:1008F00000000000000000000000000000000000F8 :1009000000000000810000E000004800000000003E :10091000000000000000000000004800000000008F -:100920000000480A821200E0070042420000000076 +:1009200000004842821200E0070048420000000038 :10093000000048420000000000000000000000002D :1009400000000000000000000000000000000000A7 :100950000000000000000000000000000000000097 @@ -123072,454 +123072,454 @@ :100A000000000000000000000000000000000000E6 :100A100000000000000000000000000000000000D6 :100A200000000000000000000000000000000000C6 -:100A30000000000000000000257B00000000000016 +:100A30000000000000000000747B000000000000C7 :100A400000000000000000000000000000000000A6 -:100A5000000000000000DEA4757B00000000000024 +:100A5000000000000000DE2E747B0000000000009B :100A60000000000000000000000000000000000086 -:100A7000000000000000DEAE0000747B00000000FB +:100A7000000000000000DE2E0000747B000000007B :100A80000000000000000000000000000000000066 :100A90000000000000000000DE2E252B00000000FA :100AA0000000000000000000000000000000000046 -:100AB0000000000000000000D4A460DE034000003D -:100AC00000000000023140000000000000000C4067 -:100AD00000000000000002C07B0660DE0340000052 -:100AE000000000000231E0000000000000000C40A7 -:100AF00000000000000002C07B060000615E0340B1 -:100B00000000000000000231E000000000000000D2 -:100B10000C4000000000000002C07A8660DE034046 +:100AB0000000000000000000D4A4615603400000C4 +:100AC000000000000230A0000000000000000C4008 +:100AD00000000000000002C06A866156034000006A +:100AE000000000000230A0000000000000000C40E8 +:100AF00000000000000002C06A860000615603404A +:100B00000000000000000230A00000000000000013 +:100B10000C4000000000000002C06A8660DE034056 :100B20000000000000000231E000000000000000B2 -:100B30000C4000000000000002C07B06C080208046 -:100B400020800103208088052084882084002000E4 -:100B500004092000208420002104208420000800B3 -:100B60000402000820802102008221804000200031 -:100B7000200420052000040000002000000384055C -:100B80000408200400044003201004040404880026 -:100B9000040000052020001188000400000500006A -:100BA0000000040900000009000020090400000002 -:100BB0000002000020090000002120000404201091 -:100BC0004120400240044004410004040401008824 -:100BD0000000000000C00910004008080910400093 -:100BE0008002020005000404200140052002800468 -:100BF000040404004000400000020500050000005D -:100C00002000000004C005000082049009000500D7 -:100C1000000009000590000104004090000000025F -:100C200004020002410000002002000040022000F7 -:100C30000000000000004002000000000000000072 -:100C400090414000114001410009020982890005DC -:100C50000000A000004000038400820082210040C8 -:100C600000000800004000000000048000008240F6 -:100C7000000009000100014088100204000000008B -:100C80000000000000000000000500080000000057 -:100C9000020000000000000000108200400500007B -:100CA000914000000000C0000000000000000000B3 -:100CB0000000000000000000000888890400038094 -:100CC00001400082840840840800000800100020D1 -:100CD0000008000811040010008403080008001038 -:100CE00000840000808400080482400400020000A8 -:100CF00000104010408440104004000800080084A8 -:100D000000840000408800100088030800C00040F4 -:100D100000820308200000C000884082000880088C -:100D200000004000000000840004000800040000EF -:100D300000000008000000000200008405208088F8 -:100D4000042004000040C080040020088521002108 -:100D500090A141854005100004881041C010400357 -:100D600082100010000000080000102101030000A4 -:100D7000400004081000000990080008A0050405C0 -:100D800040008400000088030003C0080041C00048 -:100D9000880000090002100390809000000300808A -:100DA0000400000084414000080088090020000879 -:100DB0009021400088210400A003008000009000E2 -:100DC0000020880000200000004091080820040056 -:100DD00000840020200400000000000403840400BC -:100DE000009005C10901000008A00000000002C039 -:100DF00040000008000021024100008400820084BD -:100E0000000000000320000000021000000000109D -:100E100008004100110010014100080240000300D9 -:100E20000302000041000002058221004100210070 -:100E3000210041000300002000040800001003000E -:100E400000000001000000850000004000041010B8 -:100E5000904100848200080008000009080404058D -:100E60000000004000001000000002058200200584 -:100E7000020000000000100200218208A021009062 -:100E80000000080408000400000088008200000040 -:100E9000100004001000000082100009000008008B -:100EA000000440000000400040040000000000007A -:100EB000040082000000880000000004000000041C -:100EC0000000002008000041000000000000200495 -:100ED00000C00090002100000084000000024100DA -:100EE000008800A000000084000000000000000056 -:100EF00000000008008402000000000000880000DC -:100F00000002000000840000000000000900000052 -:100F1000000000000000000000000084000000004D -:100F2000000000008000210410000000000000000C -:100F300000000000000000000000000000000000B1 -:100F40000000000010010000000000009000000000 -:100F5000A003084100020408000410210000020060 -:100F6000100010000000000001000000000800094F -:100F7000A003820000000008C000000000A10000E3 -:100F80000000001000000000004110000000000000 -:100F9000020082000000040382000000012100051D -:100FA00000800020A008000000000008A011000040 -:100FB000000082000000000000000000004000006F -:100FC00000000000040000080400002000000000F1 -:100FD00005044100800000908800218900880000FD -:100FE00000A0000000000900000040000010000008 -:100FF00000000800000400A0000021C02100080239 -:1010000020000000050000040000000010C00000E7 -:101010001100080010004000009000000000400097 -:10102000000000020088000008000590050008008C -:101030000000000008000000009021900300000064 -:101040000800000000002100000080000001008472 -:101050000040004182020010002020200111000009 -:1010600000001008018000080021002090002008E6 -:1010700082100000880384008810000408004005E6 -:1010800040040008000000200000000400410000AF -:1010900000000011004100000000000000000000FE -:1010A000080000044000000404400040080900005B -:1010B000820008004000000000000000080000005E -:1010C000820000000000100000000000000000008E -:1010D00000000000000000010001000400002000EA -:1010E0000000000000840804000000000000000070 +:100B30000C4000000000000002C07B062080008006 +:100B40000000008001000100008000800000000023 +:100B5000000000000008000000000000000000008D +:100B60000000000000000000000000000000000085 +:100B70000000000000000000000000000003000072 +:100B80000000000000040000000000000000002041 +:100B900000000020008000020000000000000000B3 +:100BA000010400100204A000000084000000108076 +:100BB00000000000000000804000088000001004D9 +:100BC0004004004000040400040000200020000055 +:100BD00000000000400000000000000000001000C5 +:100BE0000000000000000000000000000000000005 +:100BF00000000000000040000004000000000000B1 +:100C000000000000000200000000000000000000E2 +:100C100000010000000100200000000000001000A2 +:100C200000020402000400C1400200020090000023 +:100C3000001000900004000040020000800200024A +:100C4000008482808200080404000280044120C1E4 +:100C500082200000000000000000000000000200F0 +:100C60000210000000400010000000000010001002 +:100C70000241000000000000000000000000001021 +:100C80000000000000000000004000000000000024 +:100C90000000000000000000004000000000020012 +:100CA00002000000000000002000000000008200A0 +:100CB00083100000000002009000050008000800FA +:100CC0000000000500040000000191888020808859 +:100CD0008004008800000008008800C000000000B8 +:100CE0000008100000000000008400080000000060 +:100CF00000000040000000100000008800C000005C +:100D000000080000000800000000000000080008C3 +:100D100000000000000000000000001000000000C3 +:100D200000000008004000000000800000400008B3 +:100D30000000020000000000800011001000800090 +:100D40008000044000000000009000000008000047 +:100D5000002001000000000000000010000300005F +:100D60000000000300000000000000000000000080 +:100D7000000000000000000000000008000000006B +:100D80000000000000000000000000000000400023 +:100D9000000000002000000090000000040000009F +:100DA00040000000400000000000880002044000F5 +:100DB0008400840002002000400004004000050080 +:100DC00000110200001000000000000400080000F4 +:100DD000000000012002000000000000000000846C +:100DE0000000000000000000000000000000000003 +:100DF000100000000000000000000000000000845F +:100E00000000004000000000000000000040000062 +:100E100000000040002000000004002000108000BE +:100E20000084000000000000040000000200000137 +:100E3000000200004020200000000000008200109E +:100E4000109000208020000100000020000400001D +:100E50000000000000000000000000000000000092 +:100E6000000400000000000000000000000000007E +:100E70000000000000000000000000110000000061 +:100E80000000000000000000000000000000000062 +:100E90000000000000000000000000000000000052 +:100EA0000000000000000000000000000000000042 +:100EB0000000000000000000002100000000000011 +:100EC00000000888000000000000000000100083FF +:100ED000000000080000000000200090000000005A +:100EE000000000000008000000000000000000906A +:100EF00000000000000000000000000000000000F2 +:100F000000000000000000000000000000000000E1 +:100F100000000000000000000000000000000000D1 +:100F2000000000000000000000000000008200003F +:100F3000000000C0000000000000000000000000F1 +:100F400009000000804100820082000000000000D3 +:100F5000000000000005001000000021000000005B +:100F60000000000000000000000000000000000081 +:100F70000003001100000008000000000000000055 +:100F80000000000000000000000000000000000061 +:100F90000000000000000000000000000000000051 +:100FA00020000000000000110040000000000000D0 +:100FB0000400000000000000000000000202000029 +:100FC0000000000000021000840501000002000083 +:100FD00000000000000000C0000000000000200031 +:100FE00000000000000000000000000000000800F9 +:100FF00000000000000000000000000000002000D1 +:1010000000000000000000000000000000000000E0 +:101010000000000000000000000000000000402070 +:1010200000000000000000A000000000000000041C +:1010300000108000110000080008020000C04008F5 +:101040000400000000002100A02000000800401063 +:101050000003000000090021000200000000000061 +:10106000000800000009000500000000000000402A +:101070000008000000000000000000000000000068 +:101080000000000000000000000000000000000060 +:101090000000000800000000000000000000000048 +:1010A0000000000000000000000000000000000040 +:1010B00000000040000000000000000000000000F0 +:1010C000020000000221000000809000880300035D +:1010D00021000000000000002100000000000000CE +:1010E00000000000000000000000000000000800F8 :1010F00000000000000000000000000000000000F0 -:10110000000080000000000003000000000000005C -:10111000000000000000000000000000008402C089 -:10112000118400040000009000000000090000008D -:1011300000000000000002040000000000000000A9 -:10114000000000000000000000000000004000005F -:101150002000000002029120C083000100018802EB -:10116000000282080000400000000000000801406A -:1011700084880810C08400200002004000000000A5 -:10118000C100000100010001020000000000000099 +:1011000000000000000000000000000000000000DF +:1011100000000000000000000000000000000000CF +:1011200000000000000000000082000041000000FC +:1011300000000000000000000000000000000000AF +:1011400000000000200080000000001000000000EF +:101150000000400800000000000000000000000047 +:10116000000000000000000000000000000000007F +:10117000000000000000000000000000000000006F +:10118000000000000000000000000000000000005F :10119000000000000000000000000000000000004F -:1011A000000010000000000100000000010000002D -:1011B000010000000000000000000000000000002E -:1011C00000000000000000000000000000001020EF -:1011D000004000029090808283080090001000116F -:1011E0000383008380830000800000000000000073 -:1011F00008808000008000000000000000800000E7 -:10120000031004110008000200200000004000004C +:1011A0000000000000008800000000901000000017 +:1011B000000000000000000001001100000000021B +:1011C0000010000000100000000000000000C089B6 +:1011D000C19102411091090000004100000000008F +:1011E00000000400000000000000000000000000FB +:1011F00000000000000000000000000000000000EF +:1012000000000000000000000000000000000000DE :1012100000000000000000000000000000000000CE -:1012200000001000800000000004000000201103F6 -:101230000011050000000002000000000000000096 -:10124000000000000000000000000000000000009E -:10125000A000008000808000C0804109C088030891 -:10126000110083410300A0000800210011110803B0 -:1012700080000541839021008000000080008000F4 -:101280000010218020200000000009000000000460 +:10122000000000000000000000000000000080003E +:10123000000000000000000000001100100000008D +:10124000008000800000000000000000000000009E +:1012500088A00304008400030002000000110000C5 +:1012600000008080000000800000000000000000FE +:10127000000000000000000000000000000000006E +:10128000000000000000000000000000000000005E :10129000000000000000000000000000000000004E -:1012A00000000900000008001000000080008040DD -:1012B00000A0080005000000102100000000000050 -:1012C000000000000000000000000000000000001E -:1012D0000000000000210008800010209008098212 -:1012E0002084000002019000900000A00100010194 -:1012F000010108000001A0A1018408008200A000F3 -:101300000800000101A001000000008200000000B0 -:1013100000010000000000000000000000000000CC -:1013200000000000000000000100000000A010000C -:10133000840184910102010000000101000000000D -:10134000000000000000000000000000000000009D -:101350000000000020000000880090008440000091 -:10136000910582A00002000200900201000000002E -:1013700000840010201000A00090201190840084B0 -:101380000004A00400012000000100010000000092 -:10139000010100000000000000000000000000004B -:1013A00000000000000000000000A000000100009C -:1013B000000001000000000100000001000000002A -:1013C000000000000000000000000000000000001D -:1013D000000000000000402000080004029000917E -:1013E0001011A1A1828000A0008300808011000064 -:1013F0000000000000000003008500100020000035 -:1014000000000000808000218002002140100010B8 -:101410002100212100400000000000000000000029 -:1014200000000000000000000041000480090003EB -:101430000000000040000000002100020021000424 -:10144000000000000000000000000000000000009C -:10145000000000000000000000000000008080008C -:10146000A1009041050008108311839190000300B2 -:1014700008000500080008008000008000008008C7 -:101480000000008000800000090500000000080046 -:101490002110400010000540000000000000000086 -:1014A000000000000000000000000000002000001C -:1014B00000112100090004000200100008050000CE -:1014C0001003000000000000000000000000000009 -:1014D000000000000000000000008000000080000C -:1014E00000000904058801101101020102034100F6 -:1014F0000100011000000100010008C00410C0003C -:1015000010010000000800100000000800000000AA -:1015100001000100000000000000000000000000C9 -:1015200000000000000000000000000000000001BA -:1015300000000000010000000104010001020000A1 -:10154000000000010000000000000000000000009A -:1015500000000000000000000000000090000808EB -:10156000109000000000000007000000000000E0F4 -:1015700007004100500000E00000000000000000F3 -:10158000000050000000000000000000000000E02B +:1012A000000000000000000000000000004180007D +:1012B000800000000000000000000000008000002E +:1012C00000000000001000000000000080418000CD +:1012D00080009000411108914100000100000000D1 +:1012E0000000000090C000000008000000000000A6 +:1012F00000000000000000000000000000000000EE +:1013000000000000000000000000000000000000DD +:1013100000000000000000000000000000000000CD +:1013200000000000000000000000000000001001AC +:10133000100890000000000000000000000000887D +:1013400000000000000000890002000008001001F9 +:101350000884C0008800900008A0211000008800C8 +:1013600000000000000000008400000000000000F9 +:10137000000000000000000000000000000000006D +:10138000000000000000000000000000000000005D +:10139000000000000000000000000000000000004D +:1013A000000000000000000000000000000040906D +:1013B00000A0908800100000000000000000000065 +:1013C000000100000001900000001000100000006B +:1013D000000000000000900800001191C1C0000052 +:1013E00000000000040002000000000002000000F5 +:1013F00000000000000000000000000000000000ED +:1014000000000000000000000000000000000000DC +:1014100000000000000000000000000000000000CC +:1014200000000000000000000000000000000000BC +:10143000800000808000000000000000000000002C +:101440000011000800100041000000000000000032 +:10145000000000000000040000101041C02188803E +:1014600000000000000000000002002100800000D9 +:10147000000000000000000000000000000000006C +:10148000000000000000000000000000000000005C +:10149000000000000000000000000000000000004C +:1014A000000000000000000000000000000000003C +:1014B00000008000000000000000000000000000AC +:1014C000000000100000000000008000800000000C +:1014D0000000800280888000000080800080808082 +:1014E0008010000000000000000000010000000863 +:1014F00000000000000000000000000000000000EC +:1015000000000000000000000000000000000000DB +:1015100000000000000000000000000000000000CB +:1015200000000000000000000000000000000000BB +:10153000000000009000909008880000000000006B +:101540000000000000000000000000004000080053 +:1015500008001000C001820940908400C0400404CB +:1015600084100800000000E000000000000000E01F +:101570000700410000000000000000000000000023 +:10158000000000000000000000000000000000005B :10159000000000000000000000000000000000004B :1015A000000000000000000000000000000000003B -:1015B0000000000000000011000007000000000013 -:1015C000000000000000000000000000000000001B -:1015D000000000000000000000000000000000000B -:1015E000000007000000C300C3553CAAAAAAF0FFF0 -:1015F000FFFFFCFFFCFF00000000000000FF800078 -:1016000080F000000F0F00000000000020300000FC +:1015B00000000000000000000000070041000000E3 +:1015C000000000000000008100E0070000000000B3 +:1015D00000000000000000000000070060000000A4 +:1015E0000000000042820000000000000000000037 +:1015F00000000000000000000000000000000000EB +:1016000000000000000000000000000000000000DA :1016100000000000000000000000000000000000CA :1016200000000000000000000000000000000000BA -:1016300000000000000000000000000000000000AA +:10163000000000000000000000AAFFAAF8F8F0F87F :10164000000000000000000000000000000000009A -:10165000000000000000000000000000000000008A -:10166000F0F0F0FFA2BE517DC355C3553CAAAAAA13 -:10167000F00000000003000300000000000000FF75 -:10168000820082300C0F0F0F00000000000020309D +:10165000FFFFFFFF0000000000FF343E000000001D +:10166000A0F5BEBE0000003C00000000000000002D +:10167000000000000000000000000000000000006A +:10168000000000000000000000000000000000005A :10169000000000000000000000000000000000004A :1016A000000000000000000000000000000000003A -:1016B000000000000000000000000000000000002A -:1016C000000000000000000000000000000000001A -:1016D000000000000000000000000000000000000A -:1016E00000000000FFFFA2BEA2BE550F550F000074 -:1016F00000003C5C3C5CFFA05F00000000000000BC -:101700000000F0300000BE14BE1455550504000062 -:101710008202000000000000000000000000000045 +:1016B0000000000000000000000000F0FFF0FCF05F +:1016C000F0F8000000000000000000000000000032 +:1016D0000000EFFFFFFF000000000000343E0000AC +:1016E0000000A0F51414FF14003C000000000000EE +:1016F000000000000000F0F0F0F00000000000002A +:1017000000000000000000000000000000000000D9 +:1017100000000000000000000000000000000000C9 :1017200000000000000000000000000000000000B9 -:1017300000000000000000000000000000000000A9 -:101740000F0FFF000000000000000000000000007C -:101750000000000000000000000000000000000089 -:10176000000000006F0F69693C00FFD7FF0F000FFA -:101770002C0000003C5C3C5CFFA05F00000000000F -:1017800000000000E8280000BE14BE1455550500F6 -:101790000000020200000000000000000000000045 +:10173000000000000000000000000000F0F0F0F0E9 +:10174000FFAA55000000000000000000000000009B +:1017500000000000FFD7FFFF0000000000000000B5 +:10176000AE77B6B6002000A000003FBF000000002A +:101770000000000000000000000000000000000069 +:101780000000000000000000000000000000000059 +:101790000000000000000000000000000000000049 :1017A0000000000000000000000000000000000039 :1017B0000000000000000000000000000000000029 -:1017C0000000FF00FF00000000000000000000001B -:1017D0000000000000000000000000000000000009 -:1017E0000000000000005F0F5555FFD73C0000616E -:1017F0000006000D00010061000000010000006112 -:101800000006C005000000610006000D0000000099 -:1018100000000000000000610007001D00000061E2 -:101820000006000D000000000000000000000000A5 -:10183000000000000000000000610006000D000034 -:1018400000610036000D000000610006000D000080 -:101850000000000000000000000000000000000088 -:101860000000000000000000000000000000000078 -:10187000E1C3E1C3BE14BE140F0F0F3C3C3C3C3C23 -:10188000000B000A0000000000000000ACAF0C0FCD -:10189000000000000000000000003C3CC302C30048 -:1018A000C3C340C30014000000000000000000009B -:1018B0000000000000000000000000000000FCFC30 -:1018C000AAAA0000000000000000C3C3C3820CFFEE -:1018D0000000000000000000000000000000000008 +:1017C0000000AFAF050500000000000000000000B1 +:1017D000000000000000FFFFFFFF0000000000000D +:1017E0000000DB82B6B6000000A000003F3F0061B1 +:1017F0000007000D000005610A0F050D00A10000A3 +:1018000000000000000000000000000000000000D8 +:1018100000000000000000000000000000000000C8 +:1018200000000000000000000000000000000000B8 +:1018300000000000000000000000000000000000A8 +:101840000000000000000000000000000000000098 +:1018500000610A37000900000000300000000000AD +:101860001000000800000005A0610006009D0000B7 +:101870000000000000000000000000000000000068 +:101880000000000000000000000000000000000058 +:101890000000000000000000000000000000000048 +:1018A0000000000000000000000000000000000038 +:1018B0000000000000000000000000000000000028 +:1018C0000000000000000000000000000000000018 +:1018D00000000000000055FFFCFF000000000000B9 :1018E00000000000000000000000000000000000F8 -:1018F0000000FFFF0000FA50FA500F0F0F3C30308D -:101900003F3F000A000A0000000000000000A0A302 -:101910000003000000000000000000003C3CC30386 -:10192000C30040C340C300140000000000000000DA +:1018F00000000000000000000000000000000000E8 +:1019000000000000000000000000000000000000D7 +:1019100000000000000000000000000000000000C7 +:1019200000000000000000000000000000000000B7 :1019300000000000000000000000000000000000A7 -:1019400000FCAAAAFF3F7D3D0000000041410000CD -:101950000000000000000000000000000000000087 +:101940000000000000000000000000000000000097 +:10195000000000000000000000AA000300000000DA :101960000000000000000000000000000000000077 -:1019700000000000FCFAFFFA5F5F5F5F3CFC3C0C7C -:101980000C00FCFF00000000F3FFF0FC0000000072 -:10199000FF000000000000000000000030003000E8 -:1019A00000000000000000820A0A0A0A000000008D +:101970000008000800000000000000000000000057 +:101980000000000000000000000000000000000057 +:101990000000000000000000000000000000000047 +:1019A0000000000000000000000000000000000037 :1019B0000000000000000000000000000000000027 -:1019C000000000EBFFEBFCFCFFFF000000003C3CD4 -:1019D00000002A2AEAEA00000000000000000000DF -:1019E00000000000000000000000000000000000F7 -:1019F000000000000000FC0AFF0A00C3FFC33CFC1B -:101A00003C0C0C00FCFF00000000F0FCF0FC0000AF -:101A10000000FF050005000000000000000030008D -:101A20003000F000F000000000000A0A0A0A00007E +:1019C0000000000000000000000000000000000017 +:1019D0000000000000000000000000000000000007 +:1019E00000000000000000000000000000007D4139 +:1019F0003F3F001000550000000000000000000004 +:101A000000000000000000000000000000000000D6 +:101A100000000000000000000000000000000000C6 +:101A200000000000000000000000000000000000B6 :101A300000000000000000000000000000000000A6 -:101A40000000000000EBFFEB0C0C0F0F000000008B -:101A50003C3C00000000C0C000000000000000008E +:101A40000000000000000000000000000000000096 +:101A50000000000000000000000000000000000086 :101A60000000000000000000000000000000000076 -:101A7000000000000000000020000000200500041D -:101A8000400020000400040588102003880320057E -:101A90002000C00484030204001000100480C090E1 -:101AA00000002000040010030408020004002008C5 -:101AB00040002000C005C0000003000000008808AE -:101AC0000800840088008804820000000020404153 -:101AD00020030000A00020028800080000802000F1 -:101AE00040000000000000000004000000000200B0 -:101AF000880000000000400000000000400040C0DE -:101B0000400000820200200000020090404000409F -:101B1000000004900000404010000001000100207F -:101B2000002000000300000000004002000202004C -:101B30000000008404004040200000000000040079 -:101B40004002800000000440040004000000000186 -:101B5000040004004100020040900000C0C00004E6 -:101B600000000000000000000090040800000002D7 -:101B700000000000000000020402000084000005D4 -:101B800084000000080000400000900582008200F0 -:101B9000820902000200020000008200000000052D -:101BA00000200020000000000000000000000000F5 -:101BB000020002000000000000000010000000040D -:101BC0000010000800100200080240108200040308 -:101BD000210004400180000000800000000000009F -:101BE0008400000000000000000800000040000029 -:101BF0000000020000000000000041000000090891 -:101C00000082001009080008088400080000008411 -:101C100000044084000800080002020800080008D0 -:101C200000080085004100081108008400000084BD -:101C300040080000001000400008000800080000F4 -:101C4000001000840010200800100009C1000000EE -:101C5000840804C0800404200082002000040004E2 -:101C60000000000000840210000000820040008498 -:101C7000001000100008020000000000C00000007A -:101C80000040004100030410000200050040004035 -:101C900000080008001090400000000800404005C7 -:101CA00040410000000882400800000008000000D9 -:101CB00008008441002100050003000300090240E0 -:101CC000000000030000882100000005400003021E -:101CD0004040880004080088040040000800040018 -:101CE000C0800000A0000000000000000800882163 -:101CF00000000400000808020008000000000008BE -:101D0000104040004100000821A10002008200A014 -:101D10000090400800000800400000024100000060 -:101D2000030200040000088800A00000000000007A -:101D300008A00082000000000400000800000084E9 -:101D40000400000000000000000000000088800087 -:101D50004001800000020300032085000300000012 -:101D60000300002000000000000000200000000030 -:101D7000000000000500000000000000000000005E -:101D800000000000C000000002000400000000008D -:101D90000000081000000000000082800000001019 -:101DA0000000C000000000000040000000400000F3 -:101DB0000000000000400800400900000000C000D2 -:101DC0000800040000000000820008000400040075 -:101DD000081108000800000000000000824008050B -:101DE000C02000000000001000080011082182003F -:101DF0000000000008000000000000000000820059 -:101E0000A011C0000802000000080004001000003B -:101E100000900004000000C000000090000220823A -:101E200000000000000008000000000000000004A6 -:101E300000C0004000C000000000000000000008DA -:101E40000000000000000000000000000000410051 -:101E50001100000000080200000000004100000026 -:101E600000000000000000000089000000A000A0A9 -:101E70000000000000000000000000000000000062 -:101E80000000099000841001004182100040001001 -:101E9000008000410000100008020000C0000000A7 -:101EA0000000000000000000000000000011002001 -:101EB0000021002100000040000000000800000098 -:101EC00008000000000000110000004000000000B9 -:101ED0000120000000000080A0100800048008001D -:101EE0008800000000008400900000000021000035 -:101EF0000080000000000000000000000000000062 -:101F00000800900008000000820002A04000410488 -:101F100000000802200010404040008800400000FF -:101F20000002008810000890082000000000002037 -:101F3000210100040000210003000000000000084F -:101F40000000004000000000000000000000000051 -:101F50000000040004000000000200080088802047 -:101F60000040008820000500400000000000020042 -:101F700000000204080003200800000000400000E8 -:101F80000000000000900400080400000010001091 -:101F900000100041000000080010000000000009CF -:101FA000000000000000000000000200000000002F -:101FB0000200000800000000000000000000000017 -:101FC00000000000000000000000002100000000F0 -:101FD000000000400200000000000000000000209F -:101FE0001000880000000000C00000000800000988 -:101FF0000000004000200000000000080000000079 -:102000000200000082000000100000000000080034 -:1020100000000000000000000000000000000000C0 -:1020200000000000000000000000000000000000B0 -:1020300000048004000020100040000000000000A8 +:101A70007D410303000000550000012100000083A8 +:101A800000000000000000000000000000000080D6 +:101A90000000000000000000000000000000000046 +:101AA00000000000000000008200000000000000B4 +:101AB00000000000000000000003400000000000E3 +:101AC0000000000000000000000000000000000016 +:101AD00000040002000000802084200000000000BC +:101AE0000205000000000005820000110400040847 +:101AF0000400020002000100C010400004000002C7 +:101B000000020000000000000000000000000000D3 +:101B10000004000000000000000040000000000081 +:101B200000000000000000000000000000000000B5 +:101B300000000000000000000002000000000000A3 +:101B4000000000000000000000000002000000840F +:101B50000084000100000000002090200000000030 +:101B600000000000000000000000000000008000F5 +:101B7000800080008000800002001001020002004E +:101B8000A04082400209000002000008000020007E +:101B900000040080000000000000000000100000B1 +:101BA00000000000000000000000824082000200EF +:101BB00082000040820000000000000000000200DF +:101BC0000010000000008200000000000040000043 +:101BD0000000000000000100010001000000000002 +:101BE00000000040080002000000824000000000E9 +:101BF0000000000000800010000000000000001045 +:101C00000000000000000088000000820082000048 +:101C1000808400410004001000000000000000006B +:101C2000000000000000004000000000000800006C +:101C3000000800100010000000000000000000007C +:101C4000000000400000004000000200000000080A +:101C5000000000080000020020002000200000001A +:101C600000000000000080000000000000000008EC +:101C7000020000080200002000110484000000009F +:101C80000003000000000041000800000000000008 +:101C9000000000210008000000000000000000001B +:101CA0000000001000000000000000000000000024 +:101CB0000000000000000000000000000000020022 +:101CC0000000000000000000000000000000000014 +:101CD0000000080000000480000004000400000070 +:101CE0000400000520210021000000400021000028 +:101CF00020000000042090A00491000000102102A8 +:101D00000000000000000000008200000000000051 +:101D100000000000000000000008000000000000BB +:101D200000000000000000000000000000000000B3 +:101D30000000000000000000001000000000000093 +:101D40000000000000000000000000000000000093 +:101D50000000000000000000000400008008800077 +:101D6000000080820400200004000000008800A021 +:101D70000088000000A0C00100218920410041012D +:101D80000800218800410021000900000000000037 +:101D9000000000000000000000000004000000003F +:101DA0000000000000000000000000000000000033 +:101DB0000000000000000000000000000000000023 +:101DC0000000000000000000000000000000000013 +:101DD000000000000000002140A100000000000001 +:101DE00000000000000000000005000000080000E6 +:101DF00000050000000008000085018001050000CA +:101E00000810A08908000000000000040040000045 +:101E1000000000000084000000000000000100003D +:101E200000000000000000000008000000000000AA +:101E30000000000000100000000000000000000092 +:101E40000000000000000000000000000000001082 +:101E500000000000000000000000800200000008F8 +:101E600000C000A00000000000000300000000000F +:101E7000000000000000000080900020042004000A +:101E800041008001001080000000002100000000DF +:101E90000000000000030005000000080000000032 +:101EA0000000000000000000000000000000000032 +:101EB0000000000000000000000000000000000022 +:101EC0000000000000000000000000000000000012 +:101ED00000000000020000000000000041000000BF +:101EE00000000100200000000000000000000021B0 +:101EF00000000000000000000000000004000420BA +:101F00000000C0800200000008210000000000A0C6 +:101F100000000000000000000008000000000000B9 +:101F200000000000000000000000000000000000B1 +:101F3000000000000000000002000000000000009F +:101F40000000000000000000000000000000000091 +:101F50000000000000000000000000000000C002BF +:101F60000000400820008000000000000000030086 +:101F700000A0000009000084000040000000800074 +:101F8000A00300000240C000020002880000000020 +:101F90000000000000000000000000000000000041 +:101FA00000000040000000000041000000000000B0 +:101FB0000000000800000000000000000000000019 +:101FC0000000000000000000000000000000000011 +:101FD0000000000000000000000000000000000001 +:101FE00041800000000000410008000000000000E7 +:101FF00000000000000000080021000000000000B8 +:102000000120040005000000004000000410000052 +:1020100000000300030000000000000000000000BA +:102020000000000000000000118800000084000093 +:1020300000000000000000000000000000000000A0 :102040000000000000000000000000000000000090 :102050000000000000000000000000000000000080 -:102060000001000009000000000000002100000045 -:102070000000000000000000000000000000000060 -:10208000000000000000000000081108001002001D -:10209000100000000000900000000001000100009E -:1020A00000000000880000000000000000000000A8 -:1020B000400400020088080000000000000000004A +:102060000000C0020000000800000008000000009E +:1020700000000000000000000000000000000082DE +:102080000000040100088400414000010000000934 +:1020900040040102A0040440000000000000000011 +:1020A0000000000000000000000000000000000030 +:1020B0000000000000000000000000000000000020 :1020C0000000000000000000000000000000000010 -:1020D00000000000000000000000000000012000DF -:1020E0000000919000040000002040A01008009023 -:1020F0008220010100000801000000000000000033 -:1021000000000000000000000000000000000800C7 -:10211000000080000000000000000003002000021A -:10212000004000004100000000000000000000002E -:10213000000080000000008000000000000000009F +:1020D0000000000000000000000000000000000000 +:1020E0000000000003009000000003020090009038 +:1020F000009100000000000000000000000000004F +:1021000000001088009000100808030000000090F4 +:10211000002090800300008000000000000000000C +:1021200000000000000009000000000000000000A6 +:10213000000000000000000000000000000000009F :10214000000000000000000000000000000000008F -:102150000000000000000000000000000009004036 -:102160000000002010000000000000008880000037 -:102170000000800010102108820800050000000007 -:10218000000000000000000000000000000010003F -:102190008000000000208000800900000000000096 -:1021A000000000000000000000100000000000001F -:1021B0000000000080008003800880800000000094 +:10215000000000000000000000000000000000007F +:1021600000000000000021000000000091820080BB +:1021700000C100200000000000000000000000007E +:10218000000000000000000000008080C00000008F +:1021900000000000000000A1808800800000000016 +:1021A000000000000000000000040000000000002B +:1021B000000000000000000000000000000000001F :1021C000000000000000000000000000000000000F -:1021D000000000000000000000000000800020005F -:1021E0000300080040C000008021000000800000C3 -:1021F00080058090800000001000020000100000A8 -:1022000000000000000000000000000000000000CE -:1022100041000840210090004000A0002000000084 +:1021D00000000000000000000000000000000000FF +:1021E0000000000000000880020011000003C10090 +:1021F0000204021180000000000000000000000046 +:1022000000000000000000000011008080000000BD +:1022100000028080800090004010A00584900000A3 :1022200000000000000000000000000000000000AE -:1022300000000000000010001001100010900000CD +:10223000000000000000000000000000000000009E :10224000000000000000000000000000000000008E -:1022500000000000000000000000000000009020CE -:1022600001040100000000059000820000040090BD -:1022700020002000A0C1100000100100010000019A -:10228000000000000000000000000000000000004E -:102290000000000000010100004000028490008264 -:1022A000000001000000000000010001000000012A -:1022B000000000000000000000100010001000905E +:10225000000000000000000000000000000000007E +:10226000000000000000000000020000010000016A +:1022700002000400100190000400100000000000A3 +:102280000000000000000000000090011084080819 +:1022900008009000A040C0000040008288048882AE +:1022A00000000000000000000000840000000100A9 +:1022B000000000000000000000000000000000001E :1022C000000000000000000000000000000000000E :1022D00000000000000000000000000000000000FE -:1022E0000000000000010101000000100004009047 -:1022F00002001008004000088808000001000801E2 -:1023000000000000000000000000000000000000CD -:1023100000000000000000000000008000800000BD -:10232000008000004000400000000008000800108D -:1023300000400000000000000000008000800080DD +:1022E00000000000000000000000000000000000EE +:1022F00000010404004090890091000000000000EB +:1023000000000000000000000000041000100004A5 +:102310001010000200100082A0C0008400000083A2 +:10232000001000000000000000000000000000009D +:102330000400000000000000000000000000000099 :10234000000000000000000000000000000000008D :10235000000000000000000000000000000000007D -:1023600000000000000800402121000000000000E3 -:102370000080800000000000008000800003084111 -:1023800041210040000000000000000000000000AB -:1023900000000000004000000020000500000009CF -:1023A000000000000000000000000000000000002D -:1023B0000000000000000000000000000000000419 -:1023C000800000000000000000000000000000008D +:102360000000000000000000000000000000000964 +:10237000004100110002028280080091000000006C +:1023800000000000000000000000000000800000CD +:102390000000000000800000000085800000004078 +:1023A00000800000000000000000000000000000AD +:1023B000000000000000000000000000000000001D +:1023C000000000000000000000000000000000000D :1023D00000000000000000000000000000000000FD -:1023E00000400080000021202100100040048000F7 -:1023F0000000000000000000008800000000210331 -:1024000003100300100000000000000000000000A6 -:1024100000000000000000000000000000030000B9 -:1024200000900040000000000000000000000000DC +:1023E000000000000000000000000000000009895B +:1023F0001000020040038208828010008300000069 +:1024000000000000000000000000000000000008C4 +:1024100000080000000080008011008000008200A1 +:1024200084209082040000000000000000000000F2 :10243000000000000000000000000000000000009C -:1024400000089008000000000000000000000000EC +:10244000000000000000000000000000000000008C :10245000000000000000000000000000000000007C -:10246000000000000002000001C1000001000101A5 -:10247000900020040088000088002003A002900043 -:1024800001000000C1000200000000000000000088 -:10249000000000000000000000000000000000003C -:1024A000000000000000000000000000000000002C -:1024B000000000000000000000000000000000001C -:1024C0000000000007000000000000000000000005 +:10246000000000000000000000000000000000006C +:102470000008000000000100908804201000020005 +:10248000000000100010000000000000000000002C +:1024900002002004A0049000C000A0881084200046 +:1024A0000000000007000000000000000000000025 +:1024B000000000E00000000000000000000000003C +:1024C000000000000000000000000000000000000C :1024D00000000000000000000000000000000000FC -:1024E00000000000000007000000000000000000E5 -:1024F00000000000000007000000000000000700CE -:102500000082000000E00000000000000000000069 -:1025100000000000000000000000000000000000BB -:102520000000000000000C660C66000000000000C7 +:1024E00000000000000000000000000000000000EC +:1024F0000000000000E000000000000000E0070015 +:1025000000000000000000000000000000000000CB +:10251000000000810000070000000000000007002C +:1025200000003F1BFFDB00080C080000000000005B :10253000000000000000000000000000000000009B -:102540000000F0F0F0F0FFFFFFFF000000000000CF +:10254000000000000000000000000000000000008B :10255000000000000000000000000000000000007B :10256000000000000000000000000000000000006B -:1025700000000000FF00FF003D343D34DBFD0000A3 -:10258000B900FB00303030300000000000000000D7 -:10259000000000000000000000000000000000003B -:1025A00000000000000000000CFF0C000000000014 +:102570000000000000000000000000003CFF3C00E4 +:10258000F6B4D2900000000000000000000000003F +:102590000000000024242424DB999D990FC360606F +:1025A00081818F0E2703E7C30C0C0C0C0000000088 :1025B000000000000000000000000000000000001B -:1025C0000000000000000000F7DBE7DB0000000077 +:1025C000000000000000000000000000000000000B :1025D00000000000000000000000000000000000FB :1025E00000000000000000000000000000000000EB -:1025F000000000000000FF9966003D343D34FFFDFF -:102600000000BD00FF00303030300000000000004E -:1026100000000000000000000000000000000000BA -:1026200000000000000000000000000000000000AA +:1025F0000000000000000000000000000000F0FFEC +:10260000F000F6B4D29000000000000000000000CE +:1026100000000000000020000000000000000FC3C8 +:10262000000081818F0E000000000000000000000B :10263000000000000000000000000000000000009A :10264000000000000000000000000000000000008A :10265000000000000000000000000000000000007A @@ -123527,494 +123527,494 @@ :10267000000000000000000000000000000000005A :10268000000000000000000000000000000000004A :10269000000000000000000000000000000000003A -:1026A0000000000000000000000000006666D3107B +:1026A000000000000000000000000080F000F0C00A :1026B000000000000000000000000000000000001A -:1026C00000000000000000000F0F0F0000000200DB +:1026C000000000000000000000000000000000000A :1026D00000000000000000000000000000000000FA :1026E00000000000000000000000000000000000EA -:1026F00000000000000000000000663C3C3C7F7FC2 -:102700007F7FFFFF0603FFFFFFFF000000000000C8 -:1027100000000000000000000000000000000000B9 -:102720000000000000000000000000000000E7E7DB -:10273000D3100000000000000000000000000000B6 -:10274000000000000000000000000F0F0F0000005C -:102750000B0300000000000000000000000000006B +:1026F00000000000000000000000000000000000DA +:10270000000000FF0F0F0434C7F7000000003C3C3E +:102710003C3C00000000000000003C3C3C3C000051 +:10272000969F040404046060000000000080F090A4 +:10273000F0D00000000000000000000000000000D9 +:102740000000000000000000000000000000000089 +:102750000000000000000000000000000000000079 :102760000000000000000000000000000000000069 -:10277000FFFF00000000000000000000663C3C3C41 -:1027800001010101FFFF0600FF2FFF2400000000F0 -:102790000000000000000000000000000000000039 -:1027A0000000000000000000000000000000000029 -:1027B0000000000000610006000D0000006100063E -:1027C000000D000000000000000000008000000874 +:102770000000000000000000000000000000000059 +:102780000000000000FF3C3C0434C7F700000000DC +:102790006C6C6C6C00000000000000000000241055 +:1027A0000000FFFF0404040460E300C300610E06A0 +:1027B000000D0000000000000000000000610007A4 +:1027C000000D0000000000000000000000000000FC :1027D00000000000000000000000000000000000F9 :1027E00000000000000000000000000000000000E9 -:1027F0000008000000A000610006000D00000000BD -:10280000000000000000000000080000000000615F -:1028100000050009000000000000000000000000AA -:1028200000000000000000610006000D0000000034 -:102830000000000000000000000000000000000098 -:1028400000000000C0400000000000000000000088 +:1027F0000000000000000000000000000000006178 +:10280000000600010000006100000001000000005F +:1028100000000000000000000000000000000000B8 +:10282000003800000000A000000800400005000083 +:1028300000007D69000000000000000000000000B2 +:102840000000000000000000000000000000000088 :102850000000000000000000000000000000000078 :102860000000000000000000000000000000000068 -:102870000000000000000000553F553FAA3FAA3F5E -:102880000000000000000000000000000000000048 -:102890005555FFFFF5F7F5F70000000000000000B8 +:102870000000000000000000000000000000000058 +:1028800000000000F0AAF0AA0F0F0F3C00FC03FFAD +:102890000000000000000000000000000000000038 :1028A0000000000000000000000000000000000028 -:1028B0000000000000000000000000000000000018 -:1028C000000000000000C0C0000000000000000088 +:1028B00000000000FFEB000000000000000000002E +:1028C0000000000000000000000000000000000008 :1028D00000000000000000000000000000000000F8 :1028E00000000000000000000000000000000000E8 -:1028F00000000000000000000000553F5500AA3F06 -:10290000AA3F0000000000000000000000000000DE -:1029100000004055FFFFF7F7F5F50000000000004C +:1028F00000000000000000000000000000000000D8 +:1029000000002A00A0800000FFFF0F0F0F3C00FC1A +:1029100003FF0000000000000000000000000000B5 :1029200000000000000000000000000000000000A7 -:1029300000140000000000000000A00020200000A3 +:102930000000000000000000000000000000000097 :102940000000000000000000000000000000000087 :102950000000000000000000000000000000000077 :102960000000000000000000000000000000000067 -:102970000000000000000000000000003CFF3CFFE1 -:10298000880080000000000000000000000000003F -:1029900000000000AAA0AAA000F000F000000000C3 +:102970000000000000000000000000000000000057 +:102980000000000000000000287D287D3C3C1E1E49 +:10299000FCFFFCFF00000000000000000000000041 :1029A0000000000000000000000000000000000027 -:1029B0000000000A0000000000000000AA0A2A2A05 +:1029B0000000000000000000000000000000000017 :1029C0000000000000000000000000000000000007 :1029D00000000000000000000000000000000000F7 :1029E00000000000000000000000000000000000E7 -:1029F0000000000000000000000000000000FFFFD9 -:102A000000002A002A000000000000000000000072 -:102A1000000000000000AAA0282000F000F0000044 +:1029F00000000000000000000000000000000000D7 +:102A000000000000000000000000A0F5A0F53C3C24 +:102A10001E1E0C000C000000000000000000000062 :102A200000000000000000000000000000000000A6 -:102A300000000000000A000000002000200020002C -:102A400000004004200040090400200004040000AD -:102A50008800880420000810000820008900200455 -:102A6000A0002004820408002000200020000010A4 -:102A70008800A000000000032004400420042091EE -:102A80000000200800000000880402802084000468 -:102A9000008020000004048888004000200000001E -:102AA000000002000000880000002000C0090000B3 -:102AB00000040000C0000004000241004004404047 -:102AC000000000C0C0000400110000000000100061 -:102AD0004000000040001090C10100020082200070 -:102AE00010000004000021009000410021000400BB -:102AF00004004090000010000000400100010001AF -:102B000004040002400040400000008480200010C7 -:102B1000000000100004400080200000008210002F -:102B20001000100000000000000020000000000065 -:102B300000A0000120820000000100000040900081 -:102B40004040000000000000209000000000041041 -:102B50000040000002000000080008000280100091 -:102B60000220080000002000000802000080000091 -:102B7000820040000205000000000000000002008A -:102B80000004000040000000000200108400050066 -:102B9000008004410010001000000420020000002A -:102BA000000000000000000300000400000000001E -:102BB0000000000001000800020008020084000874 -:102BC00000108008410000C00082820400000084E0 -:102BD00000C04000008400080000000080000020C9 -:102BE00000020085000800840000204010C0001092 -:102BF0004000001080040008000000000000028473 -:102C00000402020802088002001000000508000803 -:102C10008408091000081141008500008385000226 -:102C2000000000820408000800840000000800087A -:102C30000004000800840802800800088084A003C3 -:102C40008400C00010100008000000002004C0052F -:102C50000000000000204004040000008400000880 -:102C6000002000000000882184084020000000218E -:102C70000008002100080008080588000040000046 -:102C8000000800000041C00000000020880200038E -:102C90000003000002089000000008000800000087 -:102CA0000240000000080000001000084000001072 -:102CB0000021900800000000000000024000000019 -:102CC0000084000000C000820000000800008001B5 -:102CD0000040210000000000008400A000A00304C8 -:102CE0000040000000880010000004000000000008 -:102CF000000000004100038200000000000003000B -:102D00000000000000004100090000000000040075 -:102D10000400030008004100410000089100000089 -:102D2000004000A0000000000010400000A00000D3 -:102D300000040000002005000000000020000484C2 -:102D400008000000000000000000000004008200F5 -:102D500082000000080000000204000000040000DF -:102D600000000100010401000880002002000000B2 -:102D7000C0000884000400000000000020000800DB -:102D8000004000000400000404A00010000008003F -:102D90000800000482040000C100000000000200DE -:102DA0000002A0200400100082000200A0008200A7 -:102DB000A000A00000000100080000408200A04028 -:102DC000A00400000000100400200088008400001F -:102DD00000000000000000000000000000080000EB -:102DE00000000000080040204000030400000090A4 -:102DF000000000880010000000080000000003042C -:102E000000000000000003000001000400000000BA -:102E10000000030000004100050008002000000041 -:102E200003000000028203A0000003000200210052 -:102E300008004100000000A008C003C0030011000A -:102E40000000210000000000000000000021000040 -:102E50008400001000080021000000004000000075 -:102E6000900000000000A00004000008000800041A -:102E700000030000042100410000000000000400E5 -:102E800000004040082100000000C0000020200099 -:102E900008088200000208000800008000210000ED -:102EA00000000000040000200000000000C0080036 -:102EB000000000000000000000008200820004000A -:102EC000C0000800202000100000050010001000C5 -:102ED00000000000000000000000000800020208DE -:102EE000000000044100000000000000200000403D +:102A30000000000000000000000000000000000096 +:102A400000000000000000000000880000000000FE +:102A500001000000008000000000000000000000F5 +:102A60000000000000000000000020000000000046 +:102A70000000000000000003000000000000000053 +:102A8000000000200020000000800000200404045A +:102A9000000000020000000088000000000010009C +:102AA00000000003000000001080008400200100EE +:102AB0004002C0004040A000000000000084100060 +:102AC0000000000000000000000000000000000006 +:102AD00000000400000000200000000000000000D2 +:102AE0004000000000000000004000000000000066 +:102AF00000000000000000000000000000000000D6 +:102B000000000000000100010000000400000001BE +:102B100080034000000000020000000000000000F0 +:102B2000000010000500000200020020002000014B +:102B300004000090000000020400000002000005F4 +:102B4000000000000000000002050000000000007E +:102B50000800040000090010002008000000000028 +:102B600090000000000000000800044082400200C5 +:102B70000000000000400000000000000000000015 +:102B80000000001000000000000000000000010034 +:102B90000300000000000000000000000000020030 +:102BA00002000000020090009000020040000000BF +:102BB0000000080008004000000001000084000040 +:102BC00000C00040004002000000000000080000BB +:102BD000004000080000000000000011000000009C +:102BE00000000000000000000000000000080000DD +:102BF000004000100000000000000008000000007D +:102C000000000000000000000000000000000008BC +:102C1000040004000000000000000000001000009C +:102C2000000000000000000000000200000080081A +:102C300000000000200080008084000008080000E0 +:102C400000000000008000000000000000000010F4 +:102C50000000000300000000000000000008000069 +:102C60000000000000000000000000000000000361 +:102C70000000000000000000000000000000000054 +:102C8000000000000000000004000000000004003C +:102C90000000200040004000000004000000400050 +:102CA00004080000000000084000001188008800AF +:102CB00020008800048088000809C021200440000A +:102CC000000000000000002000000000000000A044 +:102CD00000000000001000100000000000000000D4 +:102CE00000000000000000000000000000000000E4 +:102CF00000000000000000000000000000000000D4 +:102D00000000000000000000000080000000000043 +:102D100080000000800000000000000000A0000013 +:102D20000000000000820008000000A000A009A030 +:102D3000000000000000000821A0C000110200A057 +:102D4000408800000000900000000000000000002B +:102D50000000000000000000000000000000000073 +:102D60000000000000000000000000000000000063 +:102D70000000000000000000000000000000000053 +:102D80000000000000000000000000000000000043 +:102D900000000000040000410000000000000000EE +:102DA0000000000000000000000000000000000023 +:102DB000008000000000C010080000008480A00017 +:102DC0000200400200000000008800C00000000077 +:102DD00000000000000000000008000000000000EB +:102DE00000000000000000000000000000000000E3 +:102DF00000000000000000000000000000000000D3 +:102E000000000000000000000000000000000000C2 +:102E10000000000000008000000000000000000032 +:102E20000000009000000000000000000000000012 +:102E3000400000020000008800840088210000108B +:102E400021008000000000000000008000800000E1 +:102E50000000000000000000000000000000000072 +:102E6000042000000000000000000000000000003E +:102E70000000000000000000000000000000000052 +:102E80000000000000410000000000000000000001 +:102E900000000400000000000041042000000000C9 +:102EA0000000000000000000000000009000000092 +:102EB000000800004004890004210403C041880088 +:102EC000000802110800000300100000052008029D +:102ED00000000000000000000000000000000000F2 +:102EE0000000800100000000000000000000000061 :102EF00000000000000000000000000000000000D2 -:102F00000000000000000008000000004100000078 -:102F100082000000002004000000002000200400C7 -:102F2000080200A0080800C0008408000000031088 -:102F300008900000040000000000002000000000D5 -:102F40000000020000000000000000000000000877 -:102F50000021000408000000000000080004000038 -:102F60000000080300000000000000030000000053 -:102F70000000000500100011000000080000000023 -:102F80000000000000000005000000000100C00378 -:102F9000002100000000000000000000040000000C -:102FA000000004000080000000080041080000212B -:102FB0008400084000000000C00000000000840001 -:102FC000A00082000000000000000200000000C01D -:102FD000200020820000000000000000000000042B -:102FE00000000000000000000000000000000000E1 -:102FF00000002090000200000000208800C00000B7 -:103000002000000000000000000000000000200080 -:1030100000000000000000000000000000000000B0 -:10302000000000000000021000000000000003008B -:10303000080003000800000000004100000000003C -:1030400000C0000000001188000003000090000094 -:10305000000000000000000000000400000000006C -:1030600000000000000000000000000000008302DB -:10307000041010881021000000000000000000A0D3 -:10308000008200020090000000010000000000002B -:10309000010000000000000000000000000000012E -:1030A0008810902000A0088200A00000000000000E -:1030B0000000000000001000000000000000000000 -:1030C00084A000400004004000A00041C00800901F -:1030D00000000000000000000000200000000000D0 -:1030E00000000000000000000000000000000000E0 -:1030F00010910840C1848021000000000000000001 -:10310000008000800080000000200008000200080D -:103110000000111103080041000000110008000325 -:103120000008000080000080800000800000000097 -:10313000000000000000000000000000000000008F -:1031400000000080008000800000209103210941E0 -:103150000008000000000000000009000400110049 -:10316000210000100000000000000000000000002E -:1031700000008000800004008000000000000000CB -:1031800000000000001100800000000000000000AE -:103190000000000000000800110000000000000016 -:1031A000000000008000000000000000800080039C -:1031B000000000800000000000000000000000008F -:1031C00000000000800000110040000000000340EB -:1031D00040000505000000000000000000000000A5 -:1031E00000000000000000000000000000000000DF -:1031F0000000000088208200020082880000000099 -:103200000000000000000000000800840000000032 -:1032100000000000000000000000010000000000AD -:103220000000000000000200000000000000880014 -:1032300008010800109000000000000000000000DD -:10324000000000000000880020000490900084909E -:10325000400009089000000000000001000000008C -:10326000000100010100000000000000000000005B -:103270000000000000000888000400C11090000059 -:1032800000000000000084000000000010000000AA -:10329000000001000000000000000000000000012C -:1032A0000000000001000000C00800200008848821 -:1032B0000404000000900000000200000020000054 -:1032C00000000000000000002040000000840840D2 -:1032D000C0000000A1010000001000000008000074 -:1032E00000020003002111040000000000000000A3 -:1032F00000000000000000008002002009210803F7 +:102F000000000000000000000000000000000000C1 +:102F1000000000008000000000000000910100009F +:102F20000000000000022000000800000000000077 +:102F30000000000000888000200820008008402059 +:102F40000000050802008088090000100000004011 +:102F5000004100000000000000050000000000002B +:102F6000000500000000000000200021000000001B +:102F70000000000000000000000000000000000051 +:102F80000000000000000000000000000000000041 +:102F90000000000000000000000000000020000011 +:102FA00000000021000500080000000000080000EB +:102FB000000000000100400000002100400002105D +:102FC00000090000A00388100800C00000000000F5 +:102FD00000000000000000000000000000000000F1 +:102FE00000000000000000000000000100000000E0 +:102FF00000000000000000000000000000000000D1 +:1030000000000000000000000000000000000000C0 +:1030100000000000000000000000000000000901A6 +:1030200000C00000000000000000000000000000E0 +:103030000008000000001000008400C0A000800014 +:103040000000000000900008000180000400000063 +:103050000000000000000000000000000000000070 +:10306000000000000000C008000400A090900000D4 +:103070000000000000000000000000000000000050 +:103080000000000000000000000000000000000040 +:103090000000000000000000089000040088000408 +:1030A00001010408C083820200000000000000004B +:1030B0000000000000000000C001010090001000AE +:1030C000C009000400A08810C0C0000000A0A00239 +:1030D00000000000000000000000000000000000F0 +:1030E00000000000000000000080000000808080E0 +:1030F00000000000000000000000000000000000D0 +:1031000000000000000000000000000000000000BF +:10311000000000000000000000008000000000002F +:1031200000001140102100C08000000000000000DD +:1031300000000000000000000000804021040009A1 +:10314000801180C100910011000280000000008009 +:1031500000000000000000000080000000000000EF +:1031600000000000000000000000800080008000DF +:1031700080000000000000000000000000000000CF +:10318000000000000000000000000000000000003F +:10319000000000000000000000000000000080109F +:1031A00080808080A00020001100801100000000BD +:1031B0000000000000000000000000008080C1004E +:1031C0008510410400008005000080000000000917 +:1031D000800000080000000000000008000000005F +:1031E0000000000000000000000000000800900047 +:1031F000A00090000000000000000000000000009F +:1032000000000000000000000000000000000000BE +:1032100000000000000000000000000000000000AE +:1032200082011010089009040800050490010000B4 +:1032300000000000000000000000000000001088F6 +:103240000800090005910000040090A0900084008F +:103250000000A010000000000001020100000000BA +:103260000000000000000000000000000000A08836 +:1032700000040088020200000000000000000000BE +:10328000000000000000000000000000000000003E +:10329000000000000000000000000000000000002E +:1032A00000100004009002040009000801900201CF +:1032B000000000000000000000000000000000000E +:1032C00000400105059100A000900004009002005C +:1032D00000020090008209820000002000050440E6 +:1032E00000000000000000000000000000000000DE +:1032F00000000000000080800000000000000000CE :1033000000000000000000000000000000000000BD -:103310000000080010000000000000080000410349 -:1033200000110000050010000000800000800080F7 -:10333000000000800000000000000080000000008D -:10334000000000000000000000000000000000007D -:1033500000008041050990200340000000000000AB -:103360000000000000000000000800000000000055 -:1033700000000000000000000000210080080000A4 -:103380000804000000000000000000000000000031 -:103390008000000000000000000000000803110091 -:1033A000080003030000000000000000000200000D -:1033B000000000000000000000800000000000008D -:1033C00000000000000000000000000000028080FB -:1033D000800000000300839005001003000000003F -:1033E00000000000000200000000000100000000DA -:1033F00000000000000000000000000005000809B7 -:103400000002010000000000000000001000880021 -:10341000100010000000000000000000000000107C -:10342000010001000000000000000000000000009A -:10343000009000880000000000400802000000002A -:1034400000000000000000000000000000008800F4 -:103450008820044040008400030290109001000086 -:10346000000000000000480000E000000000000034 -:10347000000000000000000000000000000000004C -:1034800000E0070000000000000000000000000055 +:1033100000000000000000000000000000000000AD +:103320000000000000000080800000400980119033 +:1033300080110000000000000000000000000000FC +:103340000000008309101008008000000280028045 +:1033500080000080000000008800000000040000E1 +:10336000000000000000000000000000000000005D +:103370000000000400000000000000000000000049 +:10338000000000000000000000000000000000003D +:10339000000000000000000000000000000000002D +:1033A00000000000800000000080000002111100F9 +:1033B000C000000800000000000000000000000045 +:1033C000000000002184110041000811800000006D +:1033D0008000000084080820C18000000000000177 +:1033E00000000000000000000000000000000000DD +:1033F000000000000001000400C000000000000008 +:1034000000000000000000000000000000000000BC +:1034100000000000000000000000000000000000AC +:1034200000000000000090000404101000000805D7 +:103430001100410000010000000000000000000039 +:1034400000000000000001C000100090010090008A +:1034500088A010880000C0018888848210000000C5 +:103460000000070000000000000000000000000055 +:1034700000000000000000810000070000000000C4 +:10348000000000000000000000000000000000003C :10349000000000000000000000000000000000002C -:1034A000000000E00000000000000000000000003C -:1034B000000A000007008200000A00000700000068 -:1034C00000000000000000000000000000000000FC -:1034D0000000000000000000000000E000006000AC +:1034A0000000000000000000000000000700000015 +:1034B000000000E007000000000000000000000025 +:1034C0000000000000000000410000E00000420099 +:1034D0000000000007005000000000000000600035 :1034E00000000000000000000000000000000000DC -:1034F00000000000000000000000000000000000CC -:103500000000FF001C143C3400000000000000001C -:103510000000000C0000000000000000000000009F -:10352000000000000000000000000000000000009B -:10353000000000000000000F0E0F0F0F0F0F3C00E7 -:103540003C0000000000003C003C000000000000C7 -:103550000000D0DFD0DFD7D700D72025707500005E +:1034F00000000000000000000000000000C300C346 +:1035000000000000000000000000000000000000BB +:1035100000000000000000000000000000000000AB +:103520000000000000000000000000F5FFF5303F43 +:10353000A0AF50FA00FFF0F0F0F000000000000033 +:1035400000000000000000000000000000008A826F +:103550000000A0F5A0F5707F707FD095F095000079 :10356000000000000000000000000000000000005B -:10357000000000000000000000000000000000004B -:1035800000000000FF003C343C340000000000005C -:103590000000000000080000000000000000000023 -:1035A000000000000000000000000000000000001B -:1035B0000000000000000000000F020F00000000EB -:1035C0003C003C0000000000000000000000000083 -:1035D00000000000D0DF000FD7D700D72020707088 -:1035E00000000000000000000000000000000000DB -:1035F00000000000000000000000000000000000CB -:1036000000000000AFAAAEAAFFFFFFFF000000000D -:103610000000000055555757000000000000000052 -:10362000000000000000000000000000000000009A -:10363000000000000000C3D3C3C382828282FFFF68 -:10364000000000A00AAA0000000000000000000026 -:103650000000000000004C004CFF3C3C3C3C0000E3 -:103660003CFCFF3CFFAF0000000000000000000039 -:10367000000000000000000000000000000000004A -:10368000000000000000ABAAAAAAFFC3FFCB000005 -:10369000000000000000005500570000000000007E +:1035700000000000000000000000000000000082C9 +:103580000003000000000000000000000000000038 +:10359000000000000000000000000000000000002B +:1035A00000000000000000000000000000A0FFA0DC +:1035B000303FA0AF50FA00FF30F330F300000000BE +:1035C00000000000000000000000000000000000FB +:1035D000CBC300000000FFFF202F202F525D525D63 +:1035E00000000400000000000000000000000000D7 +:1035F000000000000000000000000000585058507B +:1036000083FFF30000000000000000000000000045 +:1036100000000000000000000000000000000000AA +:103620000000000000000000000000000000CF5576 +:103630000C555F5F5F0A3C5C3C5C3CFC3C0C000052 +:10364000000000000000000000000000000000007A +:1036500000000000AB00FC550C55FFFA0F0AC2C277 +:10366000FAFAD700D70000000000000000000000B8 +:1036700000000000000000000000000000005A50A0 +:103680005F5582FF00000000000000000000000005 +:10369000000000000000000000000000000000002A :1036A000000000000000000000000000000000001A -:1036B000000000000000000000100000BEBEBEBE02 -:1036C000000000002020AAAA000000000000000066 -:1036D0000000000000000000400040FF3C3C3C387F -:1036E00000003C3C003C000500610006000D0000AD -:1036F00000610006C009000000000000000000009A -:1037000000000000000000008061000F001D0000AC +:1036B000CF550C550A5F0A0A3C5C3C5C3CFC3C0C58 +:1036C00000000000000000000000000000000000FA +:1036D0000000000000000300FC550C55F5F005004B +:1036E000C2C2FAFA000000000061000E050D00A041 +:1036F00000000000000000000000000000000000CA +:103700000000003000000000000000000000000089 :1037100000000000000000000000000000000000A9 -:1037200000610006000D00000000006100000001C3 -:10373000000000610006000D0000000000300000E5 -:103740000001000000300010010000000000000037 -:103750000000000000000000000000000000001059 -:103760000001006100030009000000000000C3FF29 -:10377000C3FF00000000F0FFF0FF000000000000A9 -:1037800000000000000000000000EBEB000015004E -:103790003F000000000000000000000000000000EA -:1037A0000000000000000000000000003F0FFF00CC -:1037B000003CFFFF000000000000000000000000CF -:1037C00000000000000000000000000000000000F9 -:1037D00000000000000000000000000000000000E9 -:1037E0000000000082C382C3F000414100000000DD -:1037F000C3FFC3FF00000000D0D7F0FF00000000AF -:10380000000000000000000000000000EBEB0000E2 -:1038100015153F3F00000000000000000000000000 -:1038200000000000000000000000000000003F0F4A -:10383000FF00003CC3FF000000000000000000008B -:103840000000000000000000000000000000000078 -:103850000000000000000000000000000000000068 -:10386000000000000000AAFFA2F3FF004141000099 +:103720000000000000000000000000000000000099 +:103730000000000000000000000000610000000127 +:103740000000000000000000000000000000000079 +:10375000000000610006C019200100610006000D94 +:103760000000A0610006000D000000000000FF0046 +:103770000F0000000000000000000000000000003A +:103780000000000000000000000000000000000039 +:103790000000000000000000000000000000000029 +:1037A0000000000000000000000000000000000019 +:1037B000000000000000000000000000FF0FF50501 +:1037C00028AA7DFF000000000000000000000000AB +:1037D00000000000FFFF0000FFF7FFF700000000FF +:1037E00000000000FFFF00000000000000000000DB +:1037F000FF000F00000000000000000000000000BB +:1038000000000000000000000000000000000000B8 +:1038100000000000000000000000000000000000A8 +:103820000000000000000000000000000000000098 +:103830000000000000000000000000000000FA0A84 +:10384000F000008255D700000000000000000000DA +:10385000000000000000FBFF0800F0F0F0F00000A6 +:10386000000000000000FF0FF0000000000000005A :103870000000000000000000000000000000000048 -:103880000000000000000000000000000000003CFC -:1038900000FFAA00AA0000000000000000000000D5 -:1038A000000000000000C0C0400000000000000058 -:1038B000FF0F0F0FF0FFF0FF0000003F00000000BF -:1038C00000000000000000000000000000000000F8 -:1038D00000000000000000000000000000000000E8 -:1038E00000000000000000002AFF20FF00000A0F77 -:1038F000000000000000000000000000AAAAAA2AA0 +:103880000000000000000000000000000000000038 +:103890000000000000000000000000000000000028 +:1038A0000000000000000000000000000000000018 +:1038B0000000000000000000000000000000000008 +:1038C000FF0FF50528EB28EB0000000000000000CA +:1038D00000000000000000003FFFF0F5000F0A0AA2 +:1038E000C0C0410000000000000000000000000017 +:1038F00000000000000000000000000000000000C8 :1039000000000000000000000000000000000000B7 -:10391000003000F0AA00AA00000000000000000033 -:103920000000000000000000C000C0000000000017 -:103930000000FF0F000F00AF00AF00000007000005 -:103940000000000000000000000000000000000077 -:103950000000000000000000000000000000000067 -:103960000000000000000000000000FF00FF000059 -:103970000A0F400009800810000800000000200025 -:1039800004080403000020050210A000200000032A -:103990004008100010042000001008804002210997 -:1039A0002002000040008200400540000400880022 -:1039B0008804000300002000200000008402C000F2 -:1039C0002120100400022000840020008800000252 -:1039D0000884888404004000820300000880880076 -:1039E000000421040082C0000004208000000000C8 -:1039F0004080008400008802C00010200040054084 -:103A0000100010C000020084000000C00000009000 -:103A100000000000400240010000000582028040DA -:103A200040C0400000000000400200000000000212 -:103A30004000000000000040042040000040002042 -:103A400000C0044100004008004000000400009055 -:103A500000858004000400840000000000828010C3 -:103A600008004082089000020000000200020000EE -:103A70000020000200400009080408800000000047 -:103A800000050008400000090000080004020000D2 -:103A900090000008000900080800A0000280030050 -:103AA000A000840008A000000000820008000000C0 -:103AB00008000000020000000000000000100800E4 -:103AC0000000000004800005000000400200020029 -:103AD00000020100008000040002002000000480B9 -:103AE000000000000000000000004000000308008B -:103AF000000040002100820000A0800880100084A7 -:103B000000000008000480820082000400400009D8 -:103B100020000384008200840084C10804000002A5 -:103B2000088800080084000300000010080000045A -:103B300000040084001000820000201040844085B2 -:103B40008084000000848020000800400084000081 -:103B50000088000908084104001100002009000045 -:103B6000002000882004009000080008C110000018 -:103B7000000000088008400040080408842100007C -:103B80008402002100050008082188024008000086 -:103B90000410000888080000404008008210200837 -:103BA00090000080902000800008000800110010A4 -:103BB00000050000000800080008000000000008E0 -:103BC0000000000800094008204000000000000834 -:103BD00000030005820008104021900800004021E9 -:103BE00000004008001100880183041000400021FB -:103BF0000002000800020005080040000402020064 -:103C00001100000100020000000000000000800020 -:103C100000840320030002000082400080000501B0 -:103C20000000000000100903004000A00800000090 -:103C3000000000000008000000A000880000000054 -:103C4000000000000000000208000000000000006A -:103C500000000002000200000000080000820000D6 -:103C6000000000408000080003100810000103005D -:103C700000081001000008010000000040000000E2 -:103C8000008008008480C000400000000000004068 -:103C9000080082008200820000201000080000005E -:103CA00008000000000000000040402082020000E8 -:103CB00000090000080000000820000000000000CB -:103CC0000002A000000282000800100000000800AE -:103CD000000000000000820040000800000408040A -:103CE0008400002010000000831002000000080083 -:103CF0000200080040000000C000400040008200B8 -:103D000000900010001000400000000000000004BF -:103D10000000000041000000000000000000000062 -:103D2000000041000000038203C021000082000067 -:103D3000000003000000000000A0000000000000E0 -:103D40000000000100000001000000002000000849 -:103D50000000000000000000000008000000040156 -:103D60000001110400000800000408018000080898 -:103D7000850040020000C0000400080009000000A7 -:103D800041000002082100000005001100000011A0 -:103D90008400000000000000000000008200A0007D -:103DA00000000800000400000100000000210008DD -:103DB0000000002000080000000800000000A00033 -:103DC000080000000000400000100000000000009B -:103DD000000000000000820008000000100008043D -:103DE00000000000842000000002000500400021C7 -:103DF000000083008203A0028220000082000000F5 -:103E00000000C00200000000000000900008000058 -:103E10000000000000000000000000000000004062 -:103E200000000000000400A103A040080000000002 -:103E300000000400000000002040000000002000FE -:103E400000C00000000000000000040000200090FE -:103E50000300000000000040090200000090000084 -:103E600003820000000000000000000000000001CC -:103E7000000000000800000040A008000000000052 -:103E80000300110008010000000300000000000012 -:103E90004000000000210000001088000000000029 -:103EA0000000000800000000200020008200000048 -:103EB0000002004101000004002108100010080069 -:103EC00004200000000300000000000000000000CB -:103ED0000008000000000005000000008400202110 -:103EE0000000080000000021000000050021002162 -:103EF0000021820300054010000040000021000066 -:103F00000041000000024004000008000088020098 +:1039100000000000000000000000000000000000A7 +:103920000000000000000000000000000000000097 +:103930000000000000000000000000000000000087 +:103940000000F000F50530F330F300000000000047 +:10395000000000000000000000003FF5F0F500004E +:103960000000C0C055000000000000000000000082 +:10397000000000000000000000000000000000093E +:1039800000000000000020000000000020000000F7 +:103990000000000000000000000000000000000027 +:1039A00000000000000020000000000020000008CF +:1039B0000000000200000000000000000000000005 +:1039C000000400002000200020002000000520004E +:1039D00000000000000000000000040004000200DD +:1039E00004000005080000002000400000910000D5 +:1039F000C0000000004000000000000000000000C7 +:103A00000002000040000000000000000000000074 +:103A100000000000000000000000000000000000A6 +:103A20000000000040000000000000000000000056 +:103A30000002000000000000000000000000000084 +:103A400000000002000080008000000080000002F2 +:103A50000000000000000000000000000002000064 +:103A6000000000020002C09040A0400082A00010B0 +:103A70002000410010008400000008000000000049 +:103A80000200000000000000000000000000000034 +:103A90000000020000000000000000000000000024 +:103AA0000000000000000200000002000000000012 +:103AB0000000000000000000000000000000000006 +:103AC00000000000000000000000000008000000EE +:103AD00000000000080002000000020000000000DA +:103AE00002000000080000000800000010000800AC +:103AF000080404000010022000000000000000087C +:103B0000000800000000000000100000000000C0DD +:103B1000000000000000000800000000000000108D +:103B2000000800000000000000000000000000008D +:103B30000000000000000010000000000000000075 +:103B4000000000080000000000000000000000006D +:103B50000000000000000010000000000000100045 +:103B60000000800804008000000000000000000049 +:103B70000000800180000000000100000000000043 +:103B80000000000000000000000000000000000035 +:103B90000000000000000000000000000000000025 +:103BA0000000000000000000000000000010000005 +:103BB0000000000000000000000000000000000005 +:103BC00000000000000000000000000020000000D5 +:103BD0000080080000000200000000000008000053 +:103BE00000000000004000000000400000058900C7 +:103BF000C0008200821184400080000800000000A4 +:103C000000000000000000000000000000000000B4 +:103C100000000000000000000000000000000000A4 +:103C20000000000000000000000000000000000094 +:103C30000000000000000000000000000000000084 +:103C4000000000000000000020000000000080A034 +:103C5000000000048000009000820084000000004A +:103C6000000800000000000100000000000040000B +:103C700040900300008203000000000405000000E3 +:103C800000000000004000000000000000000000F4 +:103C90000000000000000000000000000000000024 +:103CA0000000000000000000000000000000000014 +:103CB00000000000000000000000000000400000C4 +:103CC00000000000000000000000000000000000F4 +:103CD00000000000010000000000000000000000E3 +:103CE00000000000400021200200000000414000D0 +:103CF00010000800000082000800850000412080BC +:103D000000040004000400000000000000000000A7 +:103D100000000000000000000000000000000000A3 +:103D20000000000000000000000000000000000093 +:103D30000000000000000000000000000000000083 +:103D40000000000000000000000000000000000073 +:103D500000000000000020000000000000000084BF +:103D600000000000200080008401800000000000AE +:103D7000800088C040000000088280A0200400C0AD +:103D8000800400200020000000000000000000006F +:103D90000000000000000000000000000000000023 +:103DA00000000000002100000000000000000000F2 +:103DB0000000000000000000000000000000000003 +:103DC0000000000000000000000000009000000063 +:103DD00000009000000000800000000000210000B2 +:103DE000000000000008000020202000010000006A +:103DF000C000028000000040000200040008012111 +:103E00000008004100000000000000000000000069 +:103E1000000000000000000000000000000000841E +:103E20000000001000000000000000000000000082 +:103E30000000000000000000000000000000000082 +:103E40000000000000000000000000000000110061 +:103E50000000000011840090000400000000000039 +:103E60000000000000000000000000C1800002A06F +:103E700004000488801009A020000909119003A003 +:103E80002020020800A00000000400000000000044 +:103E90000000000000000000000000000000000022 +:103EA00000000000000000000021000000000000F1 +:103EB0000000000000000000000000000000000002 +:103EC00000000000000000000000000000000000F2 +:103ED00000000000000000000000000000000004DE +:103EE000000004000000000000000000880800003E +:103EF0000000002100000021000000000000000080 +:103F0000202100002005002100000000000000002A :103F100000000000000000000000000000000000A1 -:103F2000000002000000000000008000008400008B -:103F30000000000100004040001000C0000000012F -:103F400000000000000000000000008400000000ED -:103F50001100000000000000000000000000000050 -:103F6000000000000002000200020000000000004B -:103F7000000000000000000000830000000000843A -:103F800000000300000000000002C0008800840060 -:103F9000828800000000080000000000010000000E -:103FA000000000000000000000000202000001000C -:103FB000001008A14083208808100888A004000091 -:103FC0008800000000000000000000000888912028 -:103FD000002000820200000000000000000000003D -:103FE000000000000002840800890020C0A001A099 -:103FF0001008104000820020008800080000000126 -:1040000002010000C040000388A0908380000300EC -:10401000800080000000200000000000000021005F -:104020000000000000000000000000008080000090 -:10403000050000808084892100028080000000004B -:1040400000000000000000000000000000000889DF -:1040500021850000008080000000000000000000BA -:1040600000000000000000C100880288000080807D -:10407000020080808000400000800080000000007E -:1040800005218008000900A008A000880008080099 -:1040900008000300102100000000000000002000C4 -:1040A0000800020010000000000000000000800076 -:1040B000002080000080028083000521A121800073 -:1040C0008041800880000000000000000000000027 -:1040D0001080000088002110000000000000000097 -:1040E000000000000000000000009003A011000389 -:1040F0000300902008A1830000000004800000005D -:1041000040000000000000004080004100820300E9 -:1041100000C001000000019100000000000000004C -:1041200000900000000001000000000000000000FE -:1041300002004000A0A040A004101100400183052F -:10414000A0000800A00482000000000000000000A1 -:10415000000001889000A100110000000000000094 -:104160000000000000000000000020840200A00306 -:104170009001A0004100918508A000000000A0006F -:10418000000000000000000000000002008800A104 -:104190000000008800A100110210000000010000D2 -:1041A000000000000001000100000000000000000D -:1041B0000000902088A00008909082C00140A0825A -:1041C0001191100800040082008800000000000027 -:1041D0000000000040200103100182100088004010 -:1041E0009002008200000000000000001082009198 -:1041F0000500090110100002A0880883900000A0AB -:104200000082888200000000A001000040400005FC -:104210001103A00800020088002180A000200002F5 -:104220000008000000000008002100080000000055 -:104230000000000000100089000900000008409103 -:104240004103020800000000008000800000000020 -:10425000000000000000800502A1000880090000A5 -:10426000008080000080000000000000000080103E -:104270001108850591080041000580020008000032 -:10428000000000000000000910418040000580048B -:104290000504A1A10010209021114000400300005E -:1042A0000000000000001080050008002000000051 -:1042B00000000000000000000000008080001008E6 -:1042C00000412080000500000009000000000000FF -:1042D000000000000000000003002010100020215A -:1042E00000000020000000000000000000000000AE -:1042F0002184C000A080851080A080840000004040 -:104300000000000080008000410000001000084014 -:10431000800004002100040001C000000100000131 -:10432000000000000000000000C0000001000000CC -:104330000000000000000000C00004001010A000F9 -:104340000101A0A100848200900020C09084880018 -:1043500000000000000000000000000000210190AB -:10436000000100000000000000000000000000004C -:104370000000034021100940A0210885102108A059 -:104380002000400004000204A00000000000000023 -:10439000010002000100A1008300000000000000F5 -:1043A00041000000000000000000000000000000CC -:1043B00060000000000000000000600000E000005D -:1043C00000000000000007004200000000000000A4 +:103F200000000000008200100000000000000000FF +:103F30000000000000000000000000000000000081 +:103F40000000000000000000000000000000000071 +:103F50000000000000000000000000000000090058 +:103F6000000100000400000000000000210000002B +:103F7000000000100000110011000084000000008B +:103F80000300800020048008000000000000000002 +:103F90000000000000000000000000000000000021 +:103FA0000000000000000000000000000000000011 +:103FB0000000000000000000000000000000000001 +:103FC00000000000000000000000000000000000F1 +:103FD00000000000000000000000000001010000DF +:103FE000020100010000000000000000000091003C +:103FF00004000000890200200404C0C0A0089082D0 +:104000008210900801A0849010A0004100000000E0 +:1040100000000000000000000000000000000000A0 +:104020000000000000000000000000000000000090 +:104030000000000000000000000000000000000080 +:104040000000000000000000000000000000000070 +:10405000000000000000000000000000000011044B +:104060000021804000080000000000000000000067 +:10407000880000000000890003808000000091009B +:1040800083808080008011800088804100080000CB +:104090000000000000000000000000000000000020 +:1040A0000000000000000000000000000000000010 +:1040B0000000000000000000000000000000000000 +:1040C00000000000000000000000000000000000F0 +:1040D00000000000000000000000000000000000E0 +:1040E0000000000091000304000000000000000038 +:1040F0001100090003000900000000A100000000F9 +:104100001080A0030880C191800008001100030303 +:10411000000000000000000000000000000000009F +:10412000000000000000000000000000000000008F +:10413000000000000000000000000000000000007F +:10414000000000000000000000000000000000006F +:10415000000000000000000000000000000000005F +:104160000000000010001100A0000000000000008E +:104170000000000000020100008490001010020006 +:10418000C00009C0A000014009A1100090008500F6 +:10419000110100000000000000000000000000000D +:1041A000000000000000000000000000000000000F +:1041B00000000000000000000000000000000000FF +:1041C00000000000000000000000000000000000EF +:1041D00000000000000000000000000000000000DF +:1041E0000000000000000001C0010101000000000B +:1041F0000000000000000000C0010000040400886E +:10420000080411C000210000901191090000010173 +:10421000000101000000000000000000000000009C +:10422000000000000000000000000000000000008E +:10423000000000000000000000000000000000007E +:10424000000000000000000000000000000000006E +:10425000000000000000000000000000000000005E +:1042600000000000000000000003004011080000F2 +:104270000000000000000008000900210009000201 +:104280000084001109880008001180A11084000832 +:104290000404000511000000000000000000000000 +:1042A000000000000000000000000000000000000E +:1042B00000000000000000000000000000000000FE +:1042C00000000000000000000000000000000000EE +:1042D00000000000000000000000000000000000DE +:1042E00000000000000000000080110040000808ED +:1042F00000000000000000000000000400000011A9 +:1043000080410003008000008809A184C0000408E7 +:1043100008021100028000100000000000000000F0 +:10432000000000000000000000000000000000008D +:10433000000000000000000000000000000000007D +:10434000000000000000000000000000000000006D +:10435000000000000000000000000000000000005D +:1043600000000000000000000000004001840188FF +:1043700001010000000000000000009000010000AA +:1043800000014001849104C0C00011C140831002AB +:104390008501000001C020408200000000000000F4 +:1043A000000000000000000000000000000000000D +:1043B00000000000000000000000000000000000FD +:1043C00000000000000000000000000000000000ED :1043D00000000000000000000000000000000000DD -:1043E00000000000000000000700000000000000C6 -:1043F00000000000000000E00000000000000000DD -:104400000700500000000000000000000000000055 -:10441000000000000000000000000000000000009C -:104420000F040F000000000000000000000000006A -:1044300000000000000000000000000090900099C3 -:1044400030003024003C003CC6C6C6C604851C9D16 -:10445000006000600000000000000000000000009C -:104460000000A0A0AFAF0000000024F000F00000AA -:10447000000000000000C30303030303030391993A -:104480000099DBFF42660000000000000F00000002 -:104490000000000000003C3C0000001BC31B0000AB -:1044A00000000F000F0000000000000000000000EE -:1044B00000000000000000000000000000001818CC -:1044C000009930003024003C003CC606060646C772 -:1044D0005EDFFF0C000C0000000000000000000088 -:1044E00000000000A0A0AFAF0000000024F000F02A -:1044F0000000000000000000034303430303030324 -:10450000F3FF00FF9B9F0206000C000000000F005D -:104510000000000000000000010101013C1BFF1B26 +:1043E000000000000000000000000000000000E0ED +:1043F000000000000000000000000000000000E0DD +:1044000007000000008100000700410A00000000D2 +:1044100007004200000000E007000000000000006C +:10442000000000000000000000000000000000008C +:10443000000000000000000000000000000000007C +:10444000000000000000000000000000000000006C +:10445000000000000000000000000000000000005C +:10446000000000000000000000000000000000004C +:10447000000000000000000000000000000000003C +:10448000000000000000FFFFFFFF810000180CCFBC +:1044900008898181000030303030000000000000C9 +:1044A000000000000000000000000000000000000C +:1044B00000000000000000000000000000000000FC +:1044C00000000000000000000000000000000000EC +:1044D00000000000000000000000000000000000DC +:1044E00000000000000000000000000000000000CC +:1044F00000000000000000000000000000000000BC +:1045000000000000000000003CFF30FF00008018A9 +:10451000CFCF89898181C300303030300000000066 :10452000000000000000000000000000000000008B :10453000000000000000000000000000000000007B :10454000000000000000000000000000000000006B @@ -124023,405 +124023,405 @@ :10457000000000000000000000000000000000003B :10458000000000000000000000000000000000002B :10459000000000000000000000000000000000001B -:1045A000000024242424000000000000000000007B +:1045A000000000000000000000000000000000000B :1045B00000000000000000000000000000000000FB -:1045C000000099999999FF00FF00FF00FFB990B48E -:1045D00090B4FF00FFFF404000000000000000001A -:1045E00000000000BF8FBF8F6990006F00000000C7 -:1045F0000000000000000000000000003D3C000042 -:1046000000F300F3FFFFC100BCBCFFBCF3F90000E6 -:104610000000000000000000000000008080003C5E -:1046200000000000242424240000000000000000FA +:1045C00000000000000000000000000000000000EB +:1045D00000000000000000000000000000000000DB +:1045E00000000000000000000000000000000000CB +:1045F0000000000000000000090099000000000019 +:1046000000000000000000000000000000FF00FFAC +:10461000000C000C3D0100008181C0C0C0CFC3C3AD +:10462000000000000000000000000000000000008A :10463000000000000000000000000000000000007A -:1046400000000000C3C399993F000000FF00FF3045 -:104650000000FFFF000000FF0099000000000000C4 -:10466000000000000000CC0CFC3CF6F909F600004C -:1046700000000000000000000000000000003C3CC2 -:10468000000000F90009FFFFC0009090FF90F3F9CF -:10469000F3F900FF00FF0000000000000000BCBCB8 -:1046A000003C0000000000614006000D00000061B9 -:1046B0000006000D000000610006000D0000000073 -:1046C00000000000000000610007C00D00008061D4 -:1046D000000E000D0000000040000000000000007F -:1046E000000000000000000000610006001D000046 -:1046F00000000000000000000000000000000000BA -:1047000080610007000100000061000E000D000044 -:10471000800000000010000100610006000D000094 -:1047200000613006000D00000000D010404F000076 -:10473000000000003C3C3C3C0F2D0000000000004D -:104740000000000000000000000000000C000C0051 +:10464000000000000000000000000000000000006A +:10465000000000000000000000000000000000005A +:10466000000000000000000000000000000000004A +:104670000000000000000000000009000000000031 +:10468000000000000000000000000000000000FF2B +:1046900040FF0066000C3D0100000000C0C0C0CF1C +:1046A000C3C3000100030000000000000000000080 +:1046B00000000000000000000000000000000000FA +:1046C00000000000000000000000000000000000EA +:1046D00000000000000000000000000000000000DA +:1046E00000000000000000000000000000000000CA +:1046F0000000000000000000006100000001000058 +:10470000000000000000000000610A0E050900A082 +:104710000061303E004D00010061000E000D000000 +:104720000061000000010000000000000000000027 +:104730000000000000000000000000000000000079 +:104740000000000000000000000000000000000069 :104750000000000000000000000000000000000059 -:1047600000000000000000000000FF30FFF3FFF039 -:10477000C3C00000000000000000000000000000B6 -:10478000000000000000C3C0FFFC0000000028285B -:10479000282A00000000000000000C0C000020008F -:1047A00000000004000400130010F0F0D010404F8F -:1047B000FFFF000000000AFA0AFA0F2D0000FF00B8 -:1047C0000F000000000000000000000000000C00CE -:1047D0000C00000005058000000000000000000043 -:1047E0000000000000000000000000003CD43CD4A9 -:1047F00000F000C000000000000000000000000009 -:104800000000000004000000C3C0FFFC0000000026 -:104810000000000000000000000000000C0C000080 -:10482000000000000004000400D300D000000000DD -:10483000FFCF00C0000000000000000000000000EA -:10484000C3C30000000000000000000000000000E2 -:104850000000000000500000000100030000000004 -:1048600000000000000000000000000000005500F3 -:104870000000EBC3EBFF00000000000000000000A0 -:1048800000000000000000000000A0AFA0AF00008A -:1048900000000000000000000000000000001505FE -:1048A000150528282828C2FA82AA3C3C00000000EE -:1048B00000005F53505300000000000000000000A3 -:1048C00000000C0CFF0000000000000000000000D1 -:1048D00000000000000000000000000100030000D4 +:104760000000000000000000000000000000000049 +:1047700000000000000000000000FF3FFF3FF0AA23 +:10478000AAAA000000000000000000000000DFFFF7 +:10479000D7FF00000000D0F0D0D0E8E8E8005514C2 +:1047A0000F0C0F0F0F0FA8ABA8AB0000000000000C +:1047B00000000000000000000000000000000000F9 +:1047C00000000000000000000000000000000000E9 +:1047D00000000000000000000000000000000000D9 +:1047E00000000000000000000000000000000000C9 +:1047F000000000000000000000000000C000C00039 +:10480000F0AAAAAA000000000000000000000000BA +:104810000020002800000000F0F0F0F0EBEBEB00CF +:10482000FF3C0F0C0F0FFF00A8ABA8AB000000006F +:104830000000000000000000000000000000000078 +:104840000000000000000000000000000000000068 +:104850000000000000000000000000000000000058 +:104860000000000000000000000000000000000048 +:104870000000000000000000000000000000FF3FFA +:10488000C0000000FFFF000000000000000000006A +:104890000000A0A0AAEB0000000000000000000043 +:1048A0000000FFAA00AA3C1E3C1EA0AFAAAA00005E +:1048B00000000000000000000000000000000000F8 +:1048C00000000000000000000000000000000000E8 +:1048D00000000000000000000000000000000000D8 :1048E00000000000000000000000000000000000C8 -:1048F00055000000EBC3EBFF0000000000000000CB -:1049000000000000000000000000A000A0A0A0A087 -:104910000000000010385179000000000000000085 -:104920001505150528282828C3FF82AA3C3C00004D -:1049300020000003400300028800880888008800E7 -:1049400040004000002040000000000084080000FB -:1049500020020000202004202000880020032000E6 -:10496000890202000000200402A084A0002004A00C -:1049700000032000880004001000C00800000008A8 -:10498000200420000400000404008800200000002F -:1049900000008482888220048804008002048484C9 -:1049A000100500080100400420808800000000007D -:1049B000880040000000000020204000000040006F -:1049C0000000000000C00000000200000000000025 -:1049D000000000000040408900010000400000028B -:1049E0000000040120000000000000054005400117 -:1049F00004050000000000000000000200000000AC -:104A00001000000000004000000200000002000052 -:104A1000000000A000040004000100210004800147 -:104A200000110004000040048090400400000000D9 -:104A3000000000001000020008100010000000003C -:104A4000040000000000020000008210020082004A -:104A500000000009900002000000000008000800AB -:104A6000080000001000020000000000000002002A -:104A7000008000100000010000000000080000009D -:104A800000000000400000000000040008000800D2 -:104A900002000000040008002000200010000804AC -:104AA000200008002085000500000000081000001C -:104AB0002020020000200000008480000085008487 -:104AC0000040000800080008000000080000000086 -:104AD000020000000008000800C0000000908008EC -:104AE000801080840008000800020010008200028C -:104AF000000000040084000008080000000080009E -:104B00000010001000008208042000000008800847 -:104B100080000010000002008084840082002000D9 -:104B20008509800080848404000000000990808250 -:104B30000584020100880001000000000000000858 -:104B4000000800000000002100000008000004052B -:104B50000808040008000021C0402000C000000038 -:104B60008800040088008805000000009000000014 -:104B7000002100214010820000000002820000217C -:104B80000010C021C0210000002100030200000528 -:104B90000000002100A18840082100000000000062 -:104BA0000000C011001004100040100800050008AB -:104BB000000804080008820888210900030000405A -:104BC000400009A000000082000004A000000000D6 -:104BD00000080840080000000000000000000484F5 -:104BE00004000082008240040000000000880000F1 -:104BF0000088218200900800000000000290100050 -:104C0000040000880000000040A00020090400907B -:104C1000210003000800030200A0009005A0000886 -:104C20000000400000C011010041008408000000A5 -:104C300000840000000008A0001004000009010228 -:104C400000401010000000000000000008000000FC -:104C50000000080000091000004000208200080049 -:104C6000004100000011080200000810000282004C -:104C7000001100000040010420200004000000207A -:104C80000011000408041000080000000010C00417 -:104C9000080200050800400000000000000082003B -:104CA00000004021008082200010C0001010000091 -:104CB00008004005040010400021000040000000F2 -:104CC00008000000000000000800020000000000D2 -:104CD00000000000000004000000000000000000D0 -:104CE00080000000000020000000000080010000A3 -:104CF000000400000000000004018001000000002A -:104D00000000000000000000000000000000201172 -:104D100021000000000000008000000020002000B2 -:104D200021000000040000040000000100000083D6 -:104D3000000000002100000010A000000000410061 -:104D40000003000000000409000000000000001142 -:104D5000000000400000000000000400A00004006B -:104D600000008800040004000000000000000000B3 -:104D700000098340000800210400824040028200B4 -:104D8000000000210400C000C0028400C021820095 -:104D900040000000000000000000200000000000B3 -:104DA0000004080008210000402108000000200045 -:104DB000001090000020002004000000000004000B -:104DC000840000080002100400900400000041006C -:104DD00004000000000005880390020000000000AD -:104DE0000000000000008584C088049000080400D2 -:104DF000008820844084400000008088000000007B -:104E000000000000020010000804059005000004E6 -:104E10000000000040000000000000000808000042 -:104E2000040804024004050000C0209002A0000015 -:104E3000800008000008000000000040000400049A -:104E40001104000200400008000000000000000003 -:104E5000000000000000000008000000000000004A -:104E6000000000100000C0000000820000000000F0 -:104E70000003000008008200002100080040000834 -:104E80000000210000000000200000410000080098 -:104E90000000080000000000000000050000020003 -:104EA000000000210000008008000021000800111F -:104EB00000008400080040210008000020050800D0 -:104EC0000021202100080000000000000000000078 +:1048F00000000000000000000000000000000000B8 +:10490000FF3FC0000055AAFF0000000000000000AB +:104910000000000000000000000000000000000097 +:10492000000000003F3F30303C1E3C1EA0AFAAAA52 +:104930000000000000000000000000000000000077 +:1049400000000000000000000000000000000080E7 +:104950000000000000000000000000000000000057 +:104960000000000000000000000000000000000047 +:104970000003000000000000000000000000000034 +:104980000000040004000400040000000000840093 +:10499000000000000400040000000000000001808E +:1049A0008480000021000000C0008500000000801D +:1049B00001000000000000000000000000000000F6 +:1049C00000000000000000000000400000000000A7 +:1049D0000004000040000000000000000000000093 +:1049E00000000000000000000000000000000000C7 +:1049F0000000000000000000000200004100000074 +:104A0000000200028000800280008000000200009E +:104A1000000200400002000200000000410200020B +:104A200004202120000020900000408204020002A7 +:104A30000020040200000440000000000200020008 +:104A4000020000000200000000000000000004005E +:104A50000000020008000800000000000000000044 +:104A60000000000002000000000000100000000034 +:104A70000000000000000000000000000000000036 +:104A80000000000000000000000000000000000026 +:104A90000000020002000003000000000000A0006F +:104AA0000000000000000000000402009000000070 +:104AB000010020002100000800000040000000006C +:104AC00000100010001000000000000000000000B6 +:104AD0000000000000000040000000000000000096 +:104AE00000100000000000000000000000000000B6 +:104AF00000000000000000000000000000000000B6 +:104B000000000000000000000000000000000000A5 +:104B1000000000000000000000080000000000008D +:104B2000000000000000000800000001000000007C +:104B3000028220008400A0000000000000000000AD +:104B4000000000080000000000000000000000005D +:104B50000000000000000000000000000000000055 +:104B60000000000000000000000000000000000045 +:104B70000000000000000000000000000000000035 +:104B80000000000000000000000000002000040001 +:104B900020000000000000004000000200000000B3 +:104BA00000000400000000008400000000004040FD +:104BB000008082A104212000880000000000000085 +:104BC00000000000000000000000000000000000E5 +:104BD00000000000000000000000000000000000D5 +:104BE00000000000000000000000000000000000C5 +:104BF00000000000000000000000000000000000B5 +:104C000000000000000000000000000000A0000004 +:104C1000800000000008000000000000000000000C +:104C200000000000A00009820000000000A00400B5 +:104C30009101210200048000080000000000000033 +:104C400000000040000000000000004000000000E4 +:104C50000000000000000000000000000000000054 +:104C60000000000000000000000000000000000044 +:104C70000000000000000000000000000000000034 +:104C80000000000000000000000000000000000024 +:104C9000000000000000000000000000000000090B +:104CA0000000000300400420000900408440080088 +:104CB00000000841002101090004C000404100003B +:104CC00000000000000000000000000000000000E4 +:104CD0000000000000000090000000000000000044 +:104CE00000000000000000000000000000000000C4 +:104CF00000000000000000000000000000000000B4 +:104D000000000000000000000000000000000000A3 +:104D10000000000000000000000000000000000093 +:104D20000000000000000000800100000000000002 +:104D30000000000000000040208800012100000069 +:104D40000000000000000000000000000000000063 +:104D50000000000000000000000000000000000053 +:104D60000000000000000000000000000000000043 +:104D70000000000000000000000000000000000033 +:104D80000000000000000000000000000000000023 +:104D9000000001000400002000800000000000006E +:104DA0000000000000000000400040000021000062 +:104DB0001000000200200020080004000400000091 +:104DC0008200000000000000000000000000000061 +:104DD00000000000000000000000000000000000D3 +:104DE00000000000000000000000000000000000C3 +:104DF00000000000000000000000000000000000B3 +:104E0000000000000008000000000000000000009A +:104E100000000008040280000001002041000000A2 +:104E2000000000002100000000A0000000002000A1 +:104E30000000050440050408111040C00410800063 +:104E40000000200000000000000000000000000042 +:104E50000000000000000000000000000000000052 +:104E60000000000000000000000000000000000042 +:104E70000000000000000000000000000000000032 +:104E80000000000000000000000000000000000022 +:104E9000000000000000000000000000000090087A +:104EA0000000000000000000000000000000008082 +:104EB000000000008400001000009010000082003C +:104EC000404002002011000000000000000000002F :104ED00000000000000000000000000000000000D2 :104EE00000000000000000000000000000000000C2 -:104EF000020000000040000400000000000000006C -:104F0000000000008400000000000300000000001A +:104EF00000000000000000000000000000000000B2 +:104F000000000000000000000000000000000000A1 :104F10000000000000000000000000000000000091 -:104F2000000000000000000000040000000000007D -:104F300000000000000080000000000000000000F1 -:104F400000000082000000000000000000A000043B +:104F20000000000000000000000000000000000081 +:104F300000400000008400000000000000000000AD +:104F40000000000000000000000000000000000061 :104F50000000000000000000000000000000000051 -:104F6000000000000000000000040020000010000D -:104F70000808020200008204000000010001000095 -:104F8000030200900808000000000000000000007C -:104F900000000000000040000000000000000000D1 -:104FA00000000001100100010000000100000000ED -:104FB00000004100009002A08800100000002000C6 -:104FC000100004040084008888A000000000008015 +:104F60000100000000000000000000000000000040 +:104F70000000000000000000000000000000000031 +:104F80000000000000000000000000000000000021 +:104F90000000000000000000000010008410000469 +:104FA000008200000000000000000000000000007F +:104FB0000000029000020088C088000100019001FA +:104FC0000000004100820011848500000000000004 :104FD00000000000000000000000000000000000D1 -:104FE000000000000000000000000300008000003E -:104FF000000008008000000080800011000200080E -:105000000011918300A100080000000000000000D2 -:1050100000000000200002008000000000000000EE -:1050200000000000000880080008000900110000CE -:105030000010000891030021808300000000090097 -:105040000000000080800000008000000000800060 -:1050500080000000000000000000000000000000D0 +:104FE0000000400000004100000000000000000040 +:104FF00000000000000000000000000000000000B1 +:1050000000000000000000000000000000000000A0 +:105010000000000000000000000000008000000010 +:105020000000008000000000000000000000000000 +:105030000000000000000000000080000808094097 +:10504000001000090091000000400008000000006E +:105050000000000000000000000000000000000050 :105060000000000000000000000000000000000040 -:10507000000080000000802100800000000000107F -:10508000000000208380100091008010000080004C -:10509000000300808080800080008000000080008D -:1050A000800080000000000000020080000300007B -:1050B00000101100080083808041112080412000F1 -:1050C000000085000800000000088000800000004B -:1050D0001000A00000000000000000000000000020 +:105070000000000000000000000000000000000030 +:105080000000000000000000000000000000000020 +:105090000000000000000000000000000000800090 +:1050A00000020080800000000000000000000000FE +:1050B00000000000000000000004000080000480E8 +:1050C0000841000010002000410390118000000002 +:1050D00000000000000000000000000000000000D0 :1050E00000000000000000000000000000000000C0 -:1050F000900088009000C000100000028200008232 -:10510000000000C000000202010011089000000031 -:1051100002009000A0841004020002004000080079 -:105120000200020008002000008800000084000344 -:10513000000000010188010008020801910808012F -:1051400000000000A0008300C000C001A004040013 -:10515000000200820000C00000000000000000000B -:10516000000000000000000000000000000000003F -:10517000000000A000900002400200041008A0A05F -:1051800000000000000000001000002000910182DB +:1050F00000000000000000000000000000000000B0 +:10510000000000000000000000000000000000009F +:10511000000000000000000000000000000000008F +:105120000800100000829000000000000000000055 +:1051300000000000000000000000820000A09000BD +:10514000001001010004010009A090018401908475 +:10515000000000000000000000000000000000004F +:10516000000000000000000000000000000001003E +:10517000000000000000000000000000000000002F +:10518000000000000000000000000000000000001F :10519000000000000000000000000000000000000F -:1051A00000000000000000000000000000000000FF -:1051B00000000000000009000000008800880008CE -:1051C00000A10002009104010100C01000900090B5 -:1051D00008A00080000000000000000000000000A7 +:1051A0000000001000A0001002000000000000003D +:1051B00000000000000000000000104000829090FD +:1051C00000C00000010100010000004100839010B8 +:1051D000039100000000000000000000000000003B :1051E00000000000000000000000000000000000BF -:1051F00000000000008000800080800000800080AF -:10520000808000000000000000008000000509858B -:1052100011900000000000000000000000030005E5 -:105220000008002000000000000000000000000056 -:1052300009000000001100410503030300001005F0 -:105240000010009100A000038021110580000000E3 -:1052500000008000000000000000000000000000CE +:1051F000400000000000000000000000000000006F +:10520000000000000000000000000000000000009E +:10521000000000000000000000000000000000008E +:1052200000000000000000000000800000000000FE +:1052300000000000000000000000000000800000EE +:1052400080000080000011040421000500A000037C +:105250009091918800000000000000000000000014 :10526000000000000000000000000000000000003E -:1052700000000000000000800000000000000000AE -:1052800080008000022010044000110080809108FE -:105290000300000000000003808000800000000088 -:1052A00000800080000000000080008000000421D9 -:1052B000210011000400898511008800830300800B -:1052C000910091000010418008002180400280027E -:1052D000800980000000000000A0004000000000E5 +:10527000000000000000000000000000000000002E +:10528000000000000000000000000000000000001E +:10529000000000000000000000000000000000000E +:1052A000000000000000001180000000000000006D +:1052B000000000000000000000000000000080006E +:1052C0008040800080002000031103000303800061 +:1052D0001111880008080000000000000000000014 :1052E00000000000000000000000000000000000BE -:1052F000000000000000000000A00000000002000C -:1053000090A00890A000040088019100200090C0A7 -:105310000508010088000000900002020240880099 -:10532000000000020008000000000002000200006F -:10533000C0012000C000C00010409100400090005B -:1053400020C0A1020202400000C001400102000092 -:10535000080120200882000000000000000000007A +:1052F00000000000000000000000000000000000AE +:10530000000000000000000000000000000000009D +:10531000000000000000000000000000000000008D +:1053200000000000000000001001208400000000C8 +:10533000000000000000000000000000000000006D +:105340000800A09110108200900488010000030161 +:1053500090008383830091010000000000000000A2 :10536000000000000000000000000000000000003D -:105370000000000000000000000000000700000026 -:105380000000000000000000008100000700000095 -:10539000000000E0070081000000000000000000A5 -:1053A00000000000000000000000000000000000FD -:1053B00000000000000000000000000000E000000D -:1053C0000000000000E000006006000000E00000B7 -:1053D000420000000000070060000000000003031E -:1053E00003030000000000000000000000000000B7 -:1053F0000000000000000000000000000000F0FFBE -:10540000F0FF0003FFFFFD3C3C3C00C000C4000077 -:105410000000003CFFBEA0F5A0FF00000A000E0047 -:10542000000000000000000000000000000000007C -:105430000000000000000000000000000F0B0A0B3D -:1054400000000000008000C3000000000000000019 -:105450003F3F3F3F00000AFF07000500000000003B -:105460000303030300000000000000000000000030 +:10537000000000E00000000000000000000000004D +:10538000000000000000000000000000000000001D +:10539000000000000000000000000000000000000D +:1053A00000000000000000000000000000000700F6 +:1053B00000000000000000000000000000000000ED +:1053C00000000000000007000006880000E0000068 +:1053D0005000000000E00700000000000000000096 +:1053E00000000000000000000000000000000000BD +:1053F00000000000000000000000000000000000AD +:10540000000000000000000000000000000000009C +:10541000000000000000000000000000000000008C +:10542000000000000000000000000000AAFFFFFFD5 +:1054300002FE02FE0000000000000000000000006C +:1054400000000000EBEBC303AAAAACAA7D5555559A +:105450000000000000F0FFF00C0CFCFC000000005D +:10546000000000000000000000000000000000003C :10547000000000000000000000000000000000002C -:10548000000F00FF0202FFFFBC3C3C3C000000009C -:1054900000000000003CFFBEA0F5A0FF00000A00D5 -:1054A0000C000000000000000000000000000000F0 -:1054B000000000000000AAAAAAAB00000000FFEB59 -:1054C000AAEB00000000008000C1000000100000F6 -:1054D00000003A3A3A3A00000A0A07000F005C5C02 -:1054E0005C5CAAF0AAF000000000000000000000D0 -:1054F000000000000000000000000000000000FFAD -:105500000000FFAF55002800AA00010103030000BE -:10551000000000000000FFFFFF00FFD73C0000007C -:1055200000000000AA0800000000000000000000C9 -:105530000000000000C300010000000000000000A7 -:10554000000000000000000000F000F000008000FB -:1055500000000000AAFFAAAADFFF0FFFC7FF04FF99 -:105560005C5C5C5C000000000000000000000000CB +:10548000000000000000000000000000000000001C +:10549000000000000000000000000000000000000C +:1054A00000000000000000000000000000000055A7 +:1054B000000002FE02FE00000000000000000000EC +:1054C000000000000000EBFFC3030000ACAA2800AE +:1054D000000000000000003CFF3C0CFC0CFC000045 +:1054E00000000000000000000000000000000000BC +:1054F00000000000000000000000000000000000AC +:10550000000000000000000000000000000000009B +:10551000000000000000000000000000000000008B +:10552000000000000000000000000000000000007B +:105530000F4D0F4DBCBC1C1C000000000000000003 +:10554000000000000000000000000FCFFFFF5F5FC1 +:1055500000000000000000003F550355AFBE0514D9 +:10556000000000000000000000000000000000003B :10557000000000000000000000000000000000002B -:1055800000FF0000FFAF55002800000000000000F1 -:1055900000000000000000000F00FF00FFD73C00EB -:1055A000000000000000A80800000000000070508B -:1055B0003050000000000003000300000000000065 -:1055C0000000000000000000000000F000F00000FB -:1055D00000000000000000FF00FF1FFF0FFFC3FFDF -:1055E00000FF0000000000000000000000000000BC -:1055F00000000000000000000000000000000000AB +:10558000000000000000000000000000000000001B +:10559000000000000000000000000000000000000B +:1055A00000000000000000000000000000000000FB +:1055B00000000F4D0F4DBCBC1C1C00000000000083 +:1055C0000000000000000000000000000000A0A09B +:1055D000000000000000000000003F550355AFBE72 +:1055E00005140000000000000000000000000000A2 +:1055F0000000000000000000000000610007000D36 :10560000000000000000000000000000000000009A -:1056100000000061003E000D00000061000000017C -:105620000000000000000000000000000061000613 -:10563000000D0000000000000000000000610006F6 -:10564000000D00000061000000010000006100008A -:105650000001000100610006000900008000000850 -:10566000000000000000000000000000000000003A +:10561000000000000000000000000000000000008A +:10562000000000000000000000000000000000007A +:10563000000000000000000000000000000000006A +:10564000000000000000000000000000000000005A +:105650000090000080610004C00D000000610000A7 +:105660000001000000000000000000000000000039 :10567000000000000000000000000000000000002A :10568000000000000000000000000000000000001A -:1056900000000000808AAAAA00000000FF55FF5504 -:1056A00000AFF0FF0000000000000000000000005C -:1056B000000040C0C2C20000000000000000ACFFBB -:1056C0000CFF00000000FF3CCF0000FF3CFCFF058A -:1056D000FF0500F0AFFFC3C0FFF0FFFFFFD70000E2 -:1056E00000000000000000000000000000000000BA +:10569000000000000000000000000000000000000A +:1056A00000000000000000000000000000000000FA +:1056B00000000000000000000000000000000000EA +:1056C00000000000000000000000000000000000DA +:1056D000000000000000FFFFFF1E00000A0A8F0DFF +:1056E0008F0DC0FC00FF0000000000000000000063 :1056F00000000000000000000000000000000000AA :105700000000000000000000000000000000000099 -:10571000000000000000C0CFFFFF00000000AF004D -:10572000AF0000AFF0FF000000000000000000002C +:105710000000000000000000000000000000000089 +:105720000000000000000000000000000000000079 :105730000000000000000000000000000000000069 -:10574000AAFF00FF00000000FF3CCF0000FF3CFC70 -:10575000AF05AF0500F0AFFFC3C0FFF0F0F0F0F011 -:105760000000000000000000000000000000000039 +:105740000000000000000000000000000000000059 +:105750000000000000000000FFFFFF1E0000000A24 +:105760008F0D8F0DC0FC00FF000000000000000046 :105770000000000000000000000000000000000029 :105780000000000000000000000000000000000019 -:105790000000000000000000F300FF000000000017 -:1057A000FFFFFF0030FF30FF00000000000000009E +:105790000000000000000000000000000000000009 +:1057A00000000000000000000000000000000000F9 :1057B00000000000000000000000000000000000E9 -:1057C000000000303030000000003F3F0F0F00FFAE -:1057D000AAFF5F55FF0028FF28FF00000000C3005C -:1057E00000000000000000000000000000000000B9 +:1057C00000000000000000000000000000000000D9 +:1057D000000000000000000000000300010C0000B9 +:1057E0000101FFFF3F3F40FE40FE000000000000BF :1057F00000000000000000000000000000000000A9 :105800000000000000000000000000000000000098 -:1058100000000000000000000000F300FF00000096 -:1058200000000F00FF0030F330F300000000000024 +:105810000000000000000000000000000000000088 +:105820000000000000000000000000000000000078 :105830000000000000000000000000000000000068 -:1058400000000000FFFFFFFF00000000FFFF00005E -:105850000055AAFF5F55FF0028EB28EB0000000071 -:10586000D700000000000000000000000000200041 -:105870000000040020008820200010082003840479 -:1058800084000000880000000004000084009008EC -:1058900088002000040400022000200820000400EA -:1058A00004000004000010000000000000000000E0 -:1058B0000000200420040010000000002004040068 -:1058C000040004000000840010000004000488119B -:1058D0000200100000001000A000000410042000CE -:1058E0002000C041000000200410840200020000DB -:1058F00000000002000000000000400041C0400025 -:105900001000000000000000000410022040000011 -:1059100010004090100020000000404000000004F3 -:105920004004404000004000100000401000000013 -:105930004000000010020090200000000000000065 -:1059400000041000200000000000000240080000D9 -:1059500000000000200000020000000405000940D3 -:1059600041000002200000000084000200820004C8 -:1059700000000000000000100040000000000210C5 -:105980008200000000400000020002000000001041 -:105990000000000000000000000000000000000007 -:1059A00000000000001002000000000000000000E5 -:1059B0000000000000008200000000000040000223 -:1059C00002000000020000000000000000000000D3 -:1059D0000000000000000804200200000000000099 -:1059E00000000000000000000000000000000200B5 -:1059F00090000010000800000008000000020010E5 -:105A000000840010000200840008000800840000E8 -:105A100000020008008400000002000000000000F6 -:105A20000004000800840000400800080004000092 -:105A300000100000000800100082008800840000B0 -:105A4000000000100210001000000084008200001E -:105A500000000008000803040000008400C00000EB -:105A6000040000080008000800000000001000000A -:105A700000040010200000000000000900000000E9 -:105A8000400040020008C008000000214000000063 -:105A90009000900800008800004040080000A041ED -:105AA00000000000400008080400000000000000A2 -:105AB000000000000000840008080000000800004A -:105AC00004050000000800000000000000000008BD -:105AD0002000900000000000880000008808880076 -:105AE00000000000400004008400000000030000EB -:105AF00090084008900000A000A0000000A0000056 -:105B00000088118800000000000000000000000074 -:105B10000000100000000000000000000000002055 -:105B200008000088030011004000004000040082CB -:105B300000A000004008000040000000008241205A -:105B400000080000000041200000000021000000CB -:105B500003001000000000C0000041001100000818 -:105B600041000002408800000000000241100404CF -:105B70000000000000080008000000000000000015 -:105B8000040000000000000000400040C000004091 -:105B9000000000040000C040000000000000000001 -:105BA00000110000000000040000000000000000E0 -:105BB00000000004000000000000000900000000D8 -:105BC000000010400000000000000800000000403D -:105BD00000000000000000001000000000000000B5 -:105BE0000000000204004000000000410400020028 -:105BF000000000000800001100000000000000008C -:105C00000000000000020000000000000000000092 +:105840000000000000000000000000000000000058 +:105850000000000000000000000000000000000048 +:1058600000000000C0C0000040FE40FE200000001C +:105870000000000000000000000000000000000028 +:1058800000000000000000000000000020000000F8 +:105890000000000000000000000000000000000008 +:1058A00000000000000000000000000000002000D8 +:1058B00000000000000000000000000000000000E8 +:1058C0000000000000000000100010040000200094 +:1058D00000000000000000101000000000000000A8 +:1058E0000000000000000000200020000000400038 +:1058F0000000004000000000000000000000000068 +:105900000000000000000000000000000000100087 +:105910000000000000000000000000000000000087 +:105920000000000000000000000000000040000037 +:1059300000000000000000000000000000000082E5 +:1059400000000002000000000082000000020004CD +:105950004000109010000000000000000000000057 +:1059600000000000000000000000000010401000D7 +:10597000020002000040820000000000020000005F +:1059800000000040000000000000000000000000D7 +:105990000000000000000000000000000000020005 +:1059A00000000040000000000000000000000000B7 +:1059B00000000000000000000000004000000000A7 +:1059C00000000000000000000000000000000000D7 +:1059D00000000000000000000200000000000000C5 +:1059E00000000000000000000000000000000800AF +:1059F0000000000800000000000000000008000097 +:105A0000000000880000000000000000000000000E +:105A10000000000800000000000000000008000076 +:105A20000000000000000000000000000000000076 +:105A3000030000000040000000000000000000081B +:105A40000000000000000000000000000000000056 +:105A5000000000000000000000000000000000083E +:105A60000000000000000000000000000000000036 +:105A70000000000000000000000000000000000026 +:105A80000000000000000000000000000000000016 +:105A90000000000000000000000000000000000006 +:105AA00000000000000000000000000000000000F6 +:105AB00000000000000000000000000000000000E6 +:105AC00000000000000000000000000000000000D6 +:105AD000000000000000000020000000000000099D +:105AE00000000000020040009000000000001000D4 +:105AF0009000000000000000000000000000000016 +:105B00000000000000000000000000000000000095 +:105B10000000000000000000000000000000000085 +:105B20000000000000000000000000000000000075 +:105B30000000000000000000040000000000000061 +:105B40000000000000000000000000000000000055 +:105B500000A000000002000004000000000040005F +:105B6000000805000000040400020000000200001C +:105B7000000000000000008800000000000000405D +:105B80000000000000000000000000000000000015 +:105B90000000000000000000000000000000000005 +:105BA0000000000000000000004000000040000075 +:105BB00000400000000000000000000000000000A5 +:105BC00000000000000000000000000000000000D5 +:105BD00000000000000000000000000000000000C5 +:105BE000000400400000000400000000000000006D +:105BF0000000000004001000000000000000000091 +:105C00000000004000000000000000000000000054 :105C10000000000000000000000000000000000084 -:105C2000000000000020000020000002209008007A -:105C30000000040000000000000000000000400020 -:105C4000000000000000100002000000000008003A -:105C5000000000000000080020002000008200007A -:105C600000000000000000A000A0000000000000F4 -:105C70000000000000000000030000000000000021 -:105C8000000000000000080084004000C000000088 +:105C20000000000000000000000000000000000074 +:105C30000000000000000000000000000000000064 +:105C40000000000000000000000000000000000054 +:105C50000000000000000000000000000000000044 +:105C60000000000000000000001000C000C00000A4 +:105C70000020000000000000000000000000000004 +:105C80000000000000000000000000000000000014 :105C90000000000000000000000000000000000004 :105CA00000000000000000000000000000000000F4 -:105CB00000000000080000000000000000000800D4 -:105CC00000000000000400000020000000000000B0 -:105CD00000000000100000000000C00000000000F4 -:105CE0000400000000000000000000000811000097 -:105CF0000000000000000000000000090000000893 -:105D0000000000000800000000000000110000007A -:105D10000000000004400000000000000500110227 -:105D200000000008000040080900080020000020D2 -:105D30000004400400A011040488000000000000DA -:105D4000409000000000000000000000000004007F -:105D50000008080000000200000002020088009015 -:105D600010002000008402C0042040200020050014 -:105D7000110000000004000808C0038402040000B1 +:105CB00000000000000000000000000000000000E4 +:105CC00000000000000000000000000000000000D4 +:105CD00000000000000000000000000000000000C4 +:105CE00000000000000000000000000000000000B4 +:105CF00000000000000000000000000000000000A4 +:105D00000000000000000000000000000000000093 +:105D10000000000000000000000000000000000083 +:105D20000000000000000000000000000000000073 +:105D30000000000000000000000000000000000063 +:105D40000000000000000000000000000000000053 +:105D50000000000000000000000000000000000043 +:105D6000000000000000000009041100000040884D +:105D700040002010050400001188000040000002CF :105D80000000000000000000000000000000000013 :105D90000000000000000000000000000000000003 -:105DA00000000800000000000000000000000000EB +:105DA00000000000000000000000000000000000F3 :105DB00000000000000000000000000000000000E3 -:105DC00000000000000000000000000000000800CB -:105DD00000000000000800000000000000000000BB -:105DE0000000000000000000000000000000002192 +:105DC00000000000000000000000000000000000D3 +:105DD00000000000000000000000000000000000C3 +:105DE00000000000000000000000000000110000A2 :105DF00000000000000000000000000000000000A3 -:105E0000000002000000020000000000000000008E -:105E1000000000000000000000000000000800007A -:105E20000000000000000000000011000004000459 -:105E300000000000000002000000000000000088D8 -:105E400000A00000000400000400000000000000AA -:105E50000000000000000000000040000000000002 -:105E60000000000000002090000240000000000040 -:105E70000000000000000000000000000000000022 -:105E80000000000000000000000000000000000012 +:105E00000000000000000000000000000000000092 +:105E10000000000000000000000000000000000082 +:105E20000000000000000000000000000000000072 +:105E30000000000000000000000000000000000062 +:105E40000000000000000000000000000000000052 +:105E50000000000000000000000000000000000042 +:105E6000000000000000008400002000000000008E +:105E700002000910000000100008000000000000EF +:105E8000000400000000000000000000000000000E :105E90000000000000000000000000000000000002 :105EA00000000000000000000000000000000000F2 :105EB00000000000000000000000000000000000E2 @@ -124575,438 +124575,438 @@ :1067F0000000000000000000000000000000000099 :106800000000000000000000000000000000000088 :106810000000000000000000000000000000000078 -:106820000000000000000000000000030400000061 -:10683000000820000000200040000000400000048C -:1068400000002000000040008200000040404000A6 -:1068500000C04084880020802080000420000000C8 -:106860000000000000002000000000020000208264 -:10687000000000044000000540002004C08020000B -:1068800000001000C000A000200000824110200085 -:106890000082C100200000004004020088002000A7 -:1068A000C000880420800080202088204102400011 -:1068B0000000100000004000000000000000000088 -:1068C00040400004000240000002000000C000023E -:1068D0000084001000104000101000100000400064 -:1068E0000000000440000000000200000000000062 -:1068F00040200090000000020002000200000002A0 -:106900000002000000000000004000002141880259 -:106910000008001108402190000000000000004025 -:10692000000200A0040000200010000300914000BD -:10693000820088028984100000000000020000002C -:1069400000000204000008000040000002000000F7 -:106950004000A002000002048300020008100200B0 -:1069600000000000000001000100000000800000A5 -:10697000820002000005000000000000000000008E -:1069800000020000100000400008000000000200AB -:106990000210010900000904000000008800C01076 -:1069A00010000000400000100583020802040320CC -:1069B0008000200400C140100000000840820084D4 -:1069C00000002000000000048000410900000008D1 -:1069D0000000000000000004804008080008800853 -:1069E0000000000800000008020002080000000289 -:1069F00000000000000000080000008400080008FB -:106A0000000404C1054009080004000000040084DB -:106A1000020800014000008420010008001000046A -:106A200000000010000040C040840420000000006E -:106A3000040900030000010584000000000000407C -:106A400000000021000000210000002100000000E3 -:106A5000002100050000000804008421000040001F -:106A6000902100080005880800000021000040086F -:106A700000080000004000000000040000030000C7 -:106A80001005840010080400002100000003000528 -:106A90000000000304004000000284000000000029 -:106AA000C0110921000000090008040000080400CA -:106AB000C000902000000000400009041100000008 -:106AC000000000000000000000001008009000001E -:106AD00000000000000000000000000000040000B2 -:106AE000000000000000000000080000100000008E +:106820000000000000000000000000000000000068 +:106830000000000000000000000010002000020026 +:1068400020000000000000000000000000008800A0 +:106850000000880000000000000020002000200050 +:106860002000000000000000000000030000000005 +:1068700020000000000000000000000020002000B8 +:1068800020002000000000000000000000000200C6 +:1068900020008980000082000000008000000200CB +:1068A0000000000000800000000000000000000068 +:1068B0000090000040000000000000008000C000C8 +:1068C00080008000000000000000000000000000C8 +:1068D00000000000000000000000000000000000B8 +:1068E00000000000000000000000000000000000A8 +:1068F0000000000000000000000000000000100088 +:106900000000000000020002000200041004000069 +:10691000800000040220000000000004004000008D +:106920008002009000000002000000020000000051 +:106930000200000000000000000000000241000012 +:106940000000000000000000000000000000004007 +:1069500000000000084000000000000002000000ED +:1069600000000040000000000000000000000000E7 +:106970000000000000000000000000000000000017 +:1069800008000000020000000000000000000000FD +:1069900000000000080004000080010090000010CA +:1069A000040304000405040000000000000082004D +:1069B0000000400000000000000000000000000097 +:1069C00000000000000000000000000000000000C7 +:1069D0000000400400000000000000000000000073 +:1069E00000000000000000000000000000000000A7 +:1069F000000000000000000000000008000000008F +:106A00000000000000000000000000000000000086 +:106A1000000000000000800080000310080000005B +:106A20000001800080008000804000000000000025 +:106A300000840000000000000000000000000000D2 +:106A40000000000000000000000000000000000046 +:106A5000000000000000000000000008000000002E +:106A60000000000000000000000000000000000026 +:106A70000000000000000000000000000000000016 +:106A800000000000000000000000000800000000FE +:106A9000000040000000000000000800900000001E +:106AA00000009000900020000400040590400021A8 +:106AB00000100000000000000000000000000000C6 +:106AC00000000000000000000000000000000000C6 +:106AD00000000000000000000000000000000000B6 +:106AE00000000000000000000000000000000000A6 :106AF0000000000000000000000000000000000096 -:106B000000000088000000000000000000000000FD -:106B100000000000000000880088000004000488D5 -:106B200010001100C00000000088000000000000FC -:106B300000200000000000052000000000400000D0 -:106B4000000000000410000300000000000000032B -:106B5000C00020000000000008000204000009003E -:106B6000000000002005200000050000400000405B -:106B7000000000008200000000000000080000008B -:106B80000840080008000000020000000009C002E0 -:106B900000004000820000000400000010002000FF -:106BA0000000000400000400080004008200080047 -:106BB0000000000001000402000400000040112059 -:106BC00000000000000003000000030008000000B7 -:106BD0000000000008840000020000002000000007 -:106BE00008004120000009880000008803002100FF -:106BF0000300000000001000000000A02082000040 -:106C00000000050000000000000000000004410238 -:106C100000850000000000000400210000000004C6 -:106C200083002000030008000000000000000400B2 -:106C3000030020C0008404001001000200000000D6 -:106C4000001000000005000000080003820008009A -:106C50000800000000000000040300000041C040E4 -:106C60000010000000000000000000000000100004 -:106C7000000008000000000000000000000000000C -:106C80000400002084080000000082219000000021 -:106C9000400000080010020000000000000000009A -:106CA00000088211000000000000000082000000C7 -:106CB0000000A000400008000000020000020000E8 -:106CC00000000000000000000008000800000000B4 -:106CD000000000000090000000840082040000001A -:106CE00000000001080400000000002000A00000D7 -:106CF0000000000000000000000800000000040088 -:106D00000000000000010000000000000000000082 -:106D100000000000000000000000009000024000A1 -:106D2000000004040900008800000000109000002A -:106D3000000000000400004000400000802000002F -:106D400000000000000000210003000800200000F7 -:106D5000000800000000000000000000000000002B -:106D6000020000080000000800000000840000008D -:106D70008200000000400000004000000800000009 -:106D800000000000000000000000000000008480FF -:106D9000000000000004000082004000000000101D -:106DA0000000400800000000002100000008080466 -:106DB000000000000000000000000100000084004E -:106DC00000000000000000040000000000000000BF -:106DD000000000000000000000000200410003006D -:106DE000000000000000004000040000000000005F -:106DF00000A00000000400002000000220A003000A -:106E0000000000002000000400000000000000005E -:106E10002002000000000000000000000000000050 -:106E20000000000000000000000000000000000062 -:106E30000000000000001000000000000804000036 -:106E400003001090A110084104A000000000000001 -:106E50000000000000000000000000000000000032 -:106E60000000000000000000000000A00040000042 -:106E700000A000000000000000000800000020004A -:106E8000C000000088A000200020200400000000B6 -:106E90002000000000010101100100000010099015 -:106EA0000082000200000000A001080000000100B4 -:106EB00088000000000000000000000008020090B0 -:106EC00000022000000983098003801000000000F8 -:106ED00000000000000000000000000000000000B2 -:106EE0000000000000000000000000000080000022 -:106EF0000000000000000000000000000000110081 -:106F00000000000000002080000000000080000061 -:106F100003000000000000040302800200090000DA -:106F200088000080008000030502004080200000EF -:106F3000030000000000000000000000000020002E -:106F4000090000000000A000100080009021000057 -:106F500000000000000000000000000000008000B1 -:106F6000804180218000000000000000000000003F -:106F7000000380800080000000000000000000008E -:106F80000000000000000000000080088080000079 -:106F90000000000000000000000000000000008071 -:106FA0000000001000800000000008000200024005 -:106FB00000000000000000000000000000000000D1 -:106FC00000000008008000000200A100A0000321D2 -:106FD00000000000000000000000000000000000B1 -:106FE0000200400102011000080002001000100021 -:106FF00000000001A0A00008000000000000000048 -:107000001000840090004000000082002000A0409A -:1070100088000000000000000000000000000000E8 -:107020000002000000040084000810A00100850098 -:10703000010008002000880000900000000000000F -:1070400000000000880008400400020001A00011B8 -:1070500008830000000000000000000000000000A5 -:1070600000000002009000C0008800000000000046 -:10707000000020040004004010C0000000000000D8 -:10708000000000030008000300410000084000C0A9 -:107090000002408400000001000000000001010027 -:1070A00001010000020000000000020000000110C9 -:1070B000040901A100010000000000000000000020 -:1070C00000000000009000210008008800110880E6 -:1070D00002A1808800000000000000000000000005 -:1070E0000000000000800000000000000000000020 -:1070F0000000000000000080000000000000000010 -:107100000000000000C000050002000400000000B4 -:107110000000008000000020000200090040001074 -:107120000403200400058000004000080000004027 -:107130000321092111C000080005004000200000C3 -:1071400000000000000000000008000303800800A9 -:10715000000400000010000000000000000000001B -:10716000000000000000000400800000800000001B +:106B00000000000000000000000000000040000045 +:106B10000000000000000088090000888000008854 +:106B20000000200000000000000080008000000342 +:106B300000000010000000410008000000040000F8 +:106B40000000000000000080010020000000C040A4 +:106B50000000000000000000000000000000000035 +:106B600000000000000000400040000000000000A5 +:106B700000000000000000000000000000000021F4 +:106B80000000000000000000000000000000C00045 +:106B90000000000000000008000000100000084095 +:106BA00000000004000000040400040004000404C9 +:106BB000000000400000C0000000000000000000D5 +:106BC000000000000000000000082000800000001D +:106BD00000A0000000000000000000000000000015 +:106BE00000000000000000000000000000000000A5 +:106BF0000000000000000000000000000000000095 +:106C00000000000000000000000000000000000084 +:106C100000000000000000000000000002000284EC +:106C2000A0010000000000042040800080008800D7 +:106C3000809000000000210000000000000800001B +:106C40000000000000000000000000001000000430 +:106C50000000000000000000001100020000000021 +:106C60000000000000000000000000000000000024 +:106C70000000000000000000000000000000000014 +:106C800000000000080000000000000000000000FC +:106C900000000000000000000000000000000000F4 +:106CA00000000000000000000000010908A00880AA +:106CB00000200800C00000000000000200000000EA +:106CC0000000000000000000000000000000800044 +:106CD00000010000000000000000000000000000B3 +:106CE00000000000000000000000000000000000A4 +:106CF0000000000000000000000000000000000094 +:106D00000000000000000000000000000000000083 +:106D10000000000000000000000000000000000073 +:106D2000000000000000000800A000000200002198 +:106D3000002000010000008200A000000000000010 +:106D40000000000000000000000000000000418082 +:106D500010000000010000210003000000000000FE +:106D60000000000000000000000000000000000023 +:106D70000000000000000000000000000000000013 +:106D80000000000000000000000000000000000003 +:106D900000000000000000000000000000000000F3 +:106DA00000000000000001000008000000210010A9 +:106DB000000300208820002000040021C0000041C2 +:106DC00000000000000000000000000000000004BF +:106DD000842080000000024000000000000000004D +:106DE00000000000000000000000000000000000A3 +:106DF0000000000000000000000000000000000093 +:106E00000000000000000000000000000000000082 +:106E10000000000000000000000000000000000072 +:106E200000000004000011C004C002001140204016 +:106E30000205020000012001000102002000000004 +:106E40000000000000000000000000000000000042 +:106E5000000010884189009182830000000000003A +:106E60000000000000000000000000000000000022 +:106E70000000000000000000000000000000000012 +:106E80000000000000000000000000000000000002 +:106E900000000000000000000000000000000000F2 +:106EA0000000000000C000880008080284C0000242 +:106EB00000A0081010089008008200C00000000127 +:106EC00000000801000000000000000000000000B9 +:106ED0000000000080098988218880880000000067 +:106EE00000000000000000000000000000000000A2 +:106EF0000000000000000000000000000000000092 +:106F00000000000000000000000000000000000081 +:106F10000000000000000000000000000000000071 +:106F200000000000000000800000008000000080E1 +:106F30000000000080008080808000800000000051 +:106F400000080008800800000000000000000000A9 +:106F5000000000000000088009111189414100056E +:106F600000800000000000000000000000000000A1 +:106F70000000000000000000000000000000000011 +:106F80000000000000000000000000000000000001 +:106F900000000000000000000000000000000000F1 +:106FA00000000000000000008000000000008000E1 +:106FB0008000801080000000800000008000808041 +:106FC00000000000000000000000000000000000C1 +:106FD00000000000000000000110010001A10100FC +:106FE000000000040000000000000000000000009D +:106FF0000000000000000000000000000000000091 +:107000000000000000000000000000000000000080 +:107010000000000000000000000000000000000070 +:1070200000000000000000000000080010008400C4 +:1070300008C008000800A0880000080010008400B4 +:10704000C0900000000000000000000000000000F0 +:10705000000000000000000000008888009100850A +:10706000910300000000000000000000000000008C +:107070000000000000000000000000000000000010 +:107080000000000000000000000000000000000000 +:1070900000000000000000000000000000000000F0 +:1070A000000000000000000000000000C088009008 +:1070B0000088A1A004C00000000088880008000823 +:1070C0000002000000100082000400C00000000068 +:1070D0000000000000000000000000008080009020 +:1070E000008591C1000000000000000000000000C9 +:1070F0000000000000000000000000000000000090 +:10710000000000000000000000000000000000007F +:10711000000000000000000000000000000000006F +:1071200000000000000000000000000000008000DF +:1071300000000000898000000000000080800080C6 +:10714000008000000000000000804180100000006E +:107150000000000000000000000000000000892185 +:10716000912105000811000000000000000000004F :10717000000000000000000000000000000000000F :1071800000000000000000000000000000000000FF -:10719000802000A1000000000000000000000000AE -:1071A00000000000000000008000800000000000DF -:1071B000A1054100200000080000000000000000C0 -:1071C00000000000000000000010008480000000AB -:1071D0000100000500400001000000000000000068 -:1071E000000000000000000002010820084010001C -:1071F000000000020002000000000400C0020000C5 -:107200000000000000000000000000080002000074 -:1072100000001001881090029000000000000000A3 -:1072200000000000000000000000100008009000B6 -:107230000200090004881090000100000000000016 -:1072400000000000000000000000900090218490E9 -:10725000200000000000000000000000000000000E -:10726000000000000000000000000000000000001E -:1072700042000000000000000000000000000000CC +:1071900000000000000000000000000000000000EF +:1071A00000000000000000000000000000000000DF +:1071B000001100210000000000000080008080001D +:1071C00080098080800000000011000000000000A5 +:1071D00000000000000000000000000000000000AF +:1071E000C191A10001008901000000000000000021 +:1071F000000000000000000000000000000000008F +:10720000000000000000000000000000000000007E +:10721000000000000000000000000000000000006E +:10722000000000000000000000000000000000005E +:10723000000000000001001000000200101004080F +:10724000A0009000080840408800000000000000F6 +:10725000000000000000000000000000000000002E +:107260000000484200E007000000000000000000AD +:10727000000000000000000000000000000000000E :1072800000000000000000000000000000000000FE -:1072900000000000000000000700000000000000E7 +:1072900000000000000000000000000000000000EE :1072A00000000000000000000000000000000000DE -:1072B00000000000000000E00000000000000000EE -:1072C00000000000000000000000000000000000BE -:1072D0000700000000000000F0F0000000000000C7 -:1072E00000000000000000000000000000FC00FFA3 -:1072F000000CC3CF0000000000000000A000A000B0 -:1073000000000C0000000000000000000000000071 -:10731000FD0000000000CFC5CFC5000055410000B2 -:10732000000000000000000000000000000082F3E8 -:10733000BEF300000000FF0FF0000F000FFF000081 -:107340000000000000000000000000000000F3E367 -:10735000F3E3FFFFE0E000000000F0F00055000064 -:10736000000000000000000000000000000000F02D -:1073700000F3000CC3CF000000000000000000007C -:10738000000000000C0000000000000000000000F1 -:107390000000280000000000FFF5F0F000000501EB +:1072B00000000000008100000700840000000000C2 +:1072C00007000000000000000700000000000000B0 +:1072D00000000000000000000000000000000000AE +:1072E0000000000014143C0000000020000000001A +:1072F000000000000000000000000000000000008E +:10730000000000000000000000000000000000007D +:10731000000000000000000000000000000000006D +:10732000000000000000000000000000000000005D +:1073300000000000000000000000000F0000CFCFA0 +:10734000CFCF00000000303C3F3C02FE02FE0000B8 +:10735000000000000C000000000000000000000021 +:107360000000000000001414003CFFFFFFDF0000DD +:10737000000000000000000000000000000000000D +:1073800000000000000000000000000000000000FD +:1073900000000000000000000000000000000000ED :1073A00000000000000000000000000000000000DD -:1073B0008230BE3000000000FF0FF000000000002F -:1073C00000000000000000000000000000000000BD -:1073D000F3E3F0A0FFFFF0C0D2D782874D4D0C0C35 -:1073E000000000000000000000000000000000009D -:1073F0000000000082C082C0000000003FFF5F5F0D -:1074000028AA28AA000000000000000000000000D8 -:10741000000000000000000000008080D5D50CFFB7 -:1074200000FF00000000000000000000000000005D -:107430000000FDF8ADA80000000000000000FF0003 -:10744000FF00000000000C000C0000000000000025 -:107450000000F0FFF00050005FFFD2D28282CF0C1C -:107460000C0C000000000000000000000000000004 -:1074700000000000000000FFFFFF000000003000DF -:107480005050000028AA00FF00FF0000000000008C -:1074900000000000000000003D0F0000808AD5DFE2 -:1074A00004FF04FF000000000000000000000000D6 -:1074B000000000005D580D08000000000000000002 -:1074C00014001400000000000C000C00000000007C -:1074D00000000000F0FFF0000000FFFF0061000668 -:1074E000000D00000000000000000000000000008F -:1074F000000000000000000000000001000000008B -:10750000000000000000000000100000000000006B -:107510000000000000610006001D000100000000E6 -:1075200000080000000000610006000D000000617E -:107530000006000D000000613006000D0000006133 -:1075400000060009000000610006000D00000000B8 -:107550000000000000000061400E000D0000FFFF71 -:10756000000055EB41AA00000000000000000000F0 -:10757000000000000000000000000000000000000B +:1073B0000000000000000000000000000C0C0C00A9 +:1073C000CFCF45CF14140000303C3F3C02FE02FEFC +:1073D00000000000000000000000000000000000AD +:1073E0000000000000000000040000000000000099 +:1073F000000000000000000000000000000000008D +:10740000000000000000000000000000000000007C +:10741000000000000000000000000000000000006C +:10742000000000000000000000000000000000005C +:10743000000000000000000000007D55AFAF00001C +:10744000000028280F0F000000003C3C3C0F8F0D6F +:107450000F0F00000000000000000000000000000E +:10746000000000000000000000000000000000001C +:10747000000000000000000000000000000000000C +:1074800000000000000000000000000000000000FC +:1074900000000000000000000000000000000000EC +:1074A00000000000000000000000000000000000DC +:1074B0000000000000000000000000005555AFAFC4 +:1074C0003CFC000028280F55800080003C3C3C0F0D +:1074D0008F0D000000000000000000000000000010 +:1074E0000000000000000000000000001060403DAF +:1074F000C0000000000000000000000000000000CC +:10750000000000000000000000000000000000007B +:10751000000000000000000000000000000000006B +:10752000000000000000000000000000000000005B +:10753000000000000000000000000000000000004B +:107540002038000000A10000200000000000000022 +:1075500000000000000500610006001D00000000A2 +:1075600000000000000000000000000000003804DF +:107570003C000000F00000000000000000000000DF :1075800000000000000000000000000000000000FB -:1075900000000000000000000000A0E0A04000008B -:1075A000000000000000000000000000FC000000DF -:1075B000000000000C000E00000000000FFF0FFF95 -:1075C0005F5F5F00000F040F000000003C3C3C3C8C -:1075D00000000000000000000000000000FF00FFAD -:1075E0000000000069D714690000000000000000DE -:1075F000000000000000000000000000000000008B +:1075900000000000000000000000000000000000EB +:1075A00000000000000000000000000000000000DB +:1075B00000000000000000000000000000000000CB +:1075C00000000000000000000000000000000000BB +:1075D00000000000000000000000000000000000AB +:1075E000000000000000000000000000000000009B +:1075F0003C003C00F0F000F0000000000000000043 :10760000000000000000000000000000000000007A -:10761000000000000000000000000000F0E0F0406A -:107620000000000000000000000000000000E0007A -:107630000000000000000A000A000000000000F046 -:1076400000F0FFFFFF0000000404000000003C3CCD -:107650003C2C000000000000000000000000F0F0E2 -:10766000F0F0C0C0C0400F0F6969000000000000CA -:10767000000000000000000000000000000000000A +:10761000000000000000000000000000000000006A +:10762000000000000000000000000000000000005A +:10763000000000000000000000000000000000004A +:10764000000000000000000000000000000000003A +:10765000000000000000000000000000000000002A +:10766000000000000000000000000000000000001A +:1076700000003F3FFF3F9C9C20DF00000000000017 :1076800000000000000000000000000000000000FA :1076900000000000000000000000000000000000EA :1076A00000000000000000000000000000000000DA -:1076B000000000003C3CFDF800000000000000005D -:1076C000000000003F03414100000A0000000000EC -:1076D00000000000000000000000000000000000AA -:1076E0000000000040C040400F0F6969000000002A -:1076F000000000000000000000000000000000008A +:1076B00000000000000000000000000000000000CA +:1076C00000000000000000000000000000000000BA +:1076D000000000000000000000000000F3FFF3FFC6 +:1076E000000000000000000000000000000000009A +:1076F000000000003F3FFF3F0000000000000000CE :107700000000000000000000000000000000000079 :107710000000000000000000000000000000000069 :107720000000000000000000000000000000000059 -:107730000000000000003C3C0D08000000000000BC -:107740000000000000003F03FF4100000A000000AD +:107730000000000000000000000000000000000049 +:107740000000000000000000000000000000000039 :107750000000000000000000000000000000000029 -:107760000000000000004000200440042000400011 -:107770000000100020031000400000008800A0005E -:10778000400088000080888011040100210440002E -:1077900040040004C08084008400100484000110B0 -:1077A00040800000C004000340042004400485041D -:1077B000200011040000A0004000200040048804C4 -:1077C000A000880088004004202000008804840075 -:1077D0004002400000044004200004202002100069 -:1077E00000000204201100042000000000C000007E -:1077F00000000040104000001002000010020004D1 -:107800000000000040004110000420002000200083 -:107810004000000300024004400200000008000095 -:10782000080120100000000000000001000300011A -:10783000200500024000404010000540000000000C -:107840000000000000000000000040840000000074 -:107850000000000000000020000000040001008281 -:10786000080000004100210000A1000000000010FD -:1078700000000000000000008440000088000009B3 -:10788000020000004002080001002000020508007C -:1078900090000000020002000200840000000000CE -:1078A00008000800004084000200000001032000DE -:1078B00000080300000000000000000008000000B5 -:1078C0000200020000000000900000000400000818 -:1078D000000000000000000000000900000002009D -:1078E0000800021000002000020002040900000845 -:1078F00000000082000440000000000440000982F3 -:1079000009080508000000858008080880080208AA -:107910002090008400A000002000000020000084CF -:107920000008A008C100000040100084000020846E -:107930008004000008A00004008802880088808479 -:10794000000000104090000000000500000000044E -:10795000000020840004200000000000C00000009F -:10796000000000002008200880000400000300033D -:1079700000000008000000020000020004210000D6 -:1079800000080000000004000000000400210000C6 -:107990000000000040000408002100000008040866 -:1079A0000202040204404041401000004000000078 -:1079B000C0000009000000210421000000000005B3 -:1079C0000003000000000010002000000000000084 -:1079D000000304000000000000004000020020003E -:1079E0000008000800211000020000000400020846 -:1079F00000000000000000840082000000A00000E1 -:107A00000000080000400000000009000000000025 -:107A1000050000000000040000000008000800004D -:107A200000000000410000A00300040008000382E1 -:107A300000004100000005002100050000000000DA -:107A4000000008000000000000000000000000002E -:107A500008880004110000000320000000404108D5 -:107A600000000400110000000900400000000000B8 -:107A70000800000002000200100000000000820068 -:107A80008200080482048200200010000800080020 -:107A9000820008110880000400004040000302003A -:107AA0008200820508000000880000002000A0007D -:107AB0009000000000090000000004000000A00089 -:107AC000020000000000000008000800000008009C -:107AD0000000080000000000000000004000080056 -:107AE000000040021000C00040038500C0000800F4 -:107AF0000004090000000000000000000000080071 -:107B00000000000000000000004010000000000025 -:107B100000000800090000040041004000000300CC -:107B200000000000000000000000414008000000CC -:107B300000900000000000080000410000900900D3 -:107B40000000110000004100100008000384000044 -:107B5000000000000000000808000008000000000D -:107B60000300000000000000080000004000008842 -:107B7000030040000810000800030000000800088F -:107B800000000000001000000000000000110000D4 -:107B900008008200080000004002A0000002080067 -:107BA00000000000080090088200000000000000B3 -:107BB0008841000040000000080000000003820827 -:107BC000000008200000000000200000000000006D -:107BD000000000000000002000000000000008007D -:107BE000000000001000002110000400000340000D -:107BF0000803000800080000110400040802110036 -:107C0000000000000000050000000000000000006F -:107C1000094080000000800000000000000000001B -:107C2000000000000000000800004000000000000C -:107C3000000009000000800000000000000421088E -:107C400000080040000000002104000000000000C7 -:107C50002100400000004020000000A000A00420FF -:107C60000000000000204088108200000000000892 -:107C70001100058809880820410400110021000036 -:107C800000000000000000000021000000000800CB -:107C9000000090000000A00000000080C0800202F0 -:107CA00001080040004100000000000088000200C0 -:107CB00088000003000008008400000082008200A9 -:107CC00000000800000000000000080000000000A4 -:107CD0000000000800000000000000080000000094 -:107CE0000000020000000000000000000000100082 -:107CF000000000001003004190008200000000001E -:107D00000000000000000000000000000000000073 -:107D10000000000008001140000000040002000202 -:107D20000001400000000000000000000000000012 -:107D30000000000000000000000010000000000033 -:107D40000000000000002000000000000000000013 -:107D5000000000000000000800000000000000001B -:107D60000000000000000000000000000000100003 -:107D70000000000000000000000000000000000003 +:107760000000000000000000000000000002000017 +:107770000000000000000400000000000000000005 +:107780000000000000000000000000008800000071 +:1077900000000000000020000000000000000000C9 +:1077A00000000000000000030000000000002000B6 +:1077B00000000000000000002000000000000000A9 +:1077C0000000000000000000000000000000200099 +:1077D0000180088000040004000000000000400058 +:1077E00001008800012002000002000200000000E9 +:1077F00000000000004000008000000000000000C9 +:107800000000000000000000000000000000000078 +:107810000000000000000000400000000000000028 +:107820000000000000040000000000000000000054 +:107830000000000000000002000040000000000006 +:107840000000000400000000000000000000000034 +:107850000002084080104002400340000000000089 +:107860000000020000C008910000000008000200B3 +:107870000000000000000000000000000000000008 +:1078800000000000000002000000000008000000EE +:1078900000000000000000000000004100000000A7 +:1078A00000000000000000000000000000000000D8 +:1078B00000000000000000000000002000000000A8 +:1078C000004000000000000090400200010800009D +:1078D0004000040040802000000002090040000039 +:1078E0000200004000000300001000100200000031 +:1078F0000000000000000000000000000000000088 +:10790000000000000000000000080000000000006F +:10791000000000000000000000000008000000005F +:1079200000C0000000C000000008000800000000C7 +:10793000000000000000000800000000000400003B +:10794000000000000000000000000008009010018E +:1079500000008000800080028000000080000000A5 +:107960000000000000000040080000850008400002 +:1079700000000000000000000000000000080000FF +:1079800000000000000000000000000000000000F7 +:1079900000000000000000080000000000000000DF +:1079A00000000000000000000000000000000000D7 +:1079B00000000000000000000000000000000000C7 +:1079C00000000000000000000000000000000000B7 +:1079D00000000000900004000000200000002003D0 +:1079E0000800000900009000004100004000000075 +:1079F0000000000000000000000000000000000087 +:107A00000000000000000000000000000000000076 +:107A1000000000000000000000080000000000005E +:107A20000000000000000000000000000000000056 +:107A30000000000000000000000000000000000046 +:107A40000000000000000000000000000000000036 +:107A500000000000000000008000000200000002A2 +:107A6000000000A000A00084000003080000000047 +:107A700000000000000000000000000000400000C6 +:107A80000000000000000008900000080000000056 +:107A900000000000000000000000000000000000E6 +:107AA000000000040000004000000004000000008E +:107AB00000000000000000000000000000000000C6 +:107AC00000000000000000000000000000000000B6 +:107AD000000000080000000000002000030010006B +:107AE00089000100080000000000000000000010F4 +:107AF0004110004000000000000000000090000065 +:107B000000000000009000000000000000000000E5 +:107B10000000000000000000000000000000000065 +:107B20000000000000000000000000000010000045 +:107B30000000000000000000000000000000000045 +:107B400000000000000000000082000000000000B3 +:107B500000000000000000000000000000004000E5 +:107B60000000080002000000000000000000028881 +:107B700000830411008900000000000000000000E4 +:107B80000000000000000180000000000000000074 +:107B900000000000000000000000000000000000E5 +:107BA00000000000000000000000000000000010C5 +:107BB00000000000000000000000000000000000C5 +:107BC00000000000000000000000000000000000B5 +:107BD000000800000000000000000000000000009D +:107BE0000080008800040085001100090005820360 +:107BF00000000800822000000000000000000000DB +:107C000000C0000000000000042000840088008400 +:107C10000000000000000000000000000000030061 +:107C20000000000000000000000000000000000054 +:107C30000000000000000000000000000000000044 +:107C40000000000000000000000000000000000034 +:107C5000000000000000000000004004000200825C +:107C600000040002001000090040000800000000AD +:107C70000000008880000089000000000000000073 +:107C800000000000000000000000000000000000F4 +:107C900000000021000200000008000000000000B9 +:107CA00000000000000000000000000000000000D4 +:107CB00000000000000000000000000000000000C4 +:107CC00000000000000000000000000000000000B4 +:107CD0000000000000000000000000008900020019 +:107CE0000000018000820080028001C000000000CE +:107CF000000000210000000004100000000003004C +:107D000000000004099000000000000800000000CE +:107D10000000000000000000000000000000000063 +:107D200000000000000000000000000002000082CF +:107D3000000400000000000000000000000000003F +:107D4000000000000000000000000000000008002B +:107D50000000000000000000000000000000100013 +:107D60000000000040020003004000040241000047 +:107D700011002184110200000000800100000000B9 :107D800000000000000000000000000000000000F3 -:107D900000000000000000100211000900100001A6 -:107DA000010010000001010004019001000000002A -:107DB00000000000000002A0854084408282000094 -:107DC00001010000200000010000410082000000CD +:107D900000000000000000000000000000000000E3 +:107DA00000000000000000000000000000000000D3 +:107DB00000000000000000000000000000000000C3 +:107DC00000000000000000000000000000000000B3 :107DD00000000000000000000000000000000000A3 -:107DE0000000000000000000000000000000000093 -:107DF00000840120008800900000000001010001C3 +:107DE000100001008800040000C0010508820000A6 +:107DF0000000000000000000C0C0080800208288C9 :107E00000000000000000000000000000000000072 -:107E10000000000000000000000200A000820090AE -:107E2000094010404140000802028503050200009D -:107E300000000000000000008080108080008000B2 -:107E40000000110400000041001000000240800307 -:107E50000010000000000000000000000000000012 -:107E60000000000000000000000000000000000012 -:107E700000000400208000800080001010024010EC -:107E800000100000000000000000000000000000E2 -:107E900000000000000000000000008000008000E2 -:107EA0008003088502000204022140802100024074 -:107EB0000403800000000000000080000000008239 -:107EC000800000000400080011008500400002004E -:107ED000110003210000000000000000000000006D -:107EE0000000000000000000000000000000800012 -:107EF0000000008080000011808080001180090057 -:107F00001100100900000000000000000000000047 -:107F100000000000000000000000000008C0100089 -:107F2000A000080101020000000000010040000064 -:107F3000010001850800900000000800880084000E -:107F400090050220000021882100010004000100AA -:107F5000010000000001000000000000000000001F -:107F60000000000000000000000000000000000011 -:107F70008200000082048800040110A0900000022A -:107F8000000000008300000000000000000000006E -:107F90000000000000000000000000000000880851 -:107FA00001080100A0080000090001010000000014 -:107FB00001000101000100000000000000000200BB -:107FC00000050011A00500000001000000000001F4 -:107FD000000001000001000100000000000000009E -:107FE0000000000000000000000000000000000091 -:107FF0000001000000010001828500080088C0889F -:10800000000100000001000000000000000000006E +:107E10000000000000000000000000000000000062 +:107E20000000000000000000000000000000000052 +:107E30000000000000000000000000000000000042 +:107E40000000000000000000000000000000000032 +:107E50000000000000000000000000000000000022 +:107E600000000000400000000000008020900000A2 +:107E70000000000000000000000080800080000082 +:107E80008000000000000000000000000000000072 +:107E900000000000000400000000000000000000DE +:107EA00000000000000000000000000000000000D2 +:107EB00000000000000000000000000000000000C2 +:107EC00000000000000000000000000000000000B2 +:107ED00000000000000000000000000000000000A2 +:107EE0000000000002000800850041809000081199 +:107EF0001180912000000000000000000000000040 +:107F00000000000000000000000000000000000071 +:107F1000000000000000000000C0000000000000A1 +:107F20000000000000000000000000000000000051 +:107F30000000000000000000000000000000000041 +:107F40000000000000000000000000000000000031 +:107F50000000000000000000000000000000000021 +:107F600000000000000010001000A10011A011048A +:107F7000C10001A008010000000000000000000096 +:107F800000000000000000000000000000000000F1 +:107F900000000000000000000000000000000000E1 +:107FA00000000000000000000000000000000000D1 +:107FB00000000000000000000000000000000000C1 +:107FC00000000000000000000000000000000000B1 +:107FD00000000000000000000000000000000000A1 +:107FE0000000000000000000001100030005001068 +:107FF000840300A18401C101000000000000000012 +:1080000090020002008282C0000000000000000018 :108010000000000000000000000000000000000060 -:1080200000000800030080000010910302214010AE -:108030000003404008210004000000000000000090 -:10804000002000A0002085C00000000400002010D7 -:1080500000110005080320210003000000000000BB -:108060000000000000000000000000000000000010 -:108070000000000400000005400200100084000021 -:1080800080000021110310210011000000000000F9 -:1080900000000000000000000000000000000000E0 -:1080A000000020210204410002002100080000001D -:1080B000030821401000410004100000000000806F -:1080C0000000000000800000000000000402110019 -:1080D0000080050021000240400003030000000072 -:1080E0000000000000000000000000000000000090 -:1080F00000000000000000000000000080020000FE -:10810000008000002180050011000408000000002C -:10811000000000000000000000000000000000005F -:108120000000000001010101002000000110010019 -:108130000000000001840000000001000000008831 -:108140000010000000008482C0A0A0000000010117 -:108150000100004000000140010000000101820018 -:10816000000084000000000000000000000000008B -:1081700000000000000000000000000000000801F6 -:1081800082828840400001C000000004000100001D -:1081900000000000000000000000000000000000DF -:1081A000000000000000000000000000500000007F -:1081B00000E000000000000000E0000000000000FF +:108020000000000000000000000000000000000050 +:108030000000000000000000000000000000000040 +:108040000000000000000000000000000000000030 +:108050000000000000000000000000000000000020 +:108060000000000000000000000000C00008002028 +:10807000118900200082002089110000000000000A +:1080800000000000008000808380000000000000ED +:108090000000000000000000000080090000000057 +:1080A0008000000000000000000000000000000050 +:1080B00000000000000000000000000000000000C0 +:1080C00000000000000000000000000000000000B0 +:1080D00000000000000000000000000000000000A0 +:1080E0000000000000000000000000000009008007 +:1080F0000000004085A1A18002800208000000006D +:108100000000000000000008000000000000000067 +:108110000000000000000000000000009000A0002F +:1081200088000800000000000000000000000000BF +:10813000000000000000000000000000000000003F +:10814000000000000000000000000000000000002F +:10815000000000000000000000000000000000001F +:10816000000000000000000000000000000000A06F +:1081700000820008000140C11182C110C10100004D +:1081800000000000000000000000000000000000EF +:10819000000000000000000000000000000000815E +:1081A00000000700000000000000000000000000C8 +:1081B00000000000000000000000000000000000BF :1081C00000000000000000000000000000000000AF -:1081D000000000E0000000000000000000000000BF +:1081D000000000000000000000000000000000009F :1081E000000000000000000000000000000000008F -:1081F000000000000000000000000000000000007F -:108200000000000007000082000000E000004100C4 +:1081F0000081000007040000810000E00000840A04 +:1082000000000000000000000000000007008400E3 :10821000000000000000000000000000000000005E -:108220000000000000000000000000000C0CCFCF98 +:1082200099FF3C3C0000000000000000000000003E :10823000000000000000000000000000000000003E -:1082400000000000000000000004000400FF0F0F09 +:10824000000000000000000000000000000000002E :10825000000000000000000000000000000000001E -:1082600000000F0F000000000000000000000000F0 -:1082700000000000000000000000000000000000FE -:1082800000009900F900003C303C000000000000B4 -:1082900000000000000000000000000000000000DE -:1082A00000000000000000000000000000000C0CB6 -:1082B000CFCF000000000000000000000000000020 -:1082C0000000000000000000000000040004FFFFA8 -:1082D000999900000000000000000000000000006C -:1082E000000000000F0F0000000000000000000070 -:1082F000000000000000000000000000000000007E -:10830000000000009900FD00003C303C000000002F -:10831000000000000000000000000000000000005D +:10826000000000000000000000000000000000000E +:1082700000000000000070F0F0F0CB09CF0FC0C08C +:10828000C0C0000000000000000000000000006608 +:10829000C3C100000000000000000000000000005A +:1082A000000099FFFCFC000000000000000000003E +:1082B00000000000000000000000000000000000BE +:1082C00000000000000000000000000000000000AE +:1082D000000000000000000000000000000000009E +:1082E000000000000000000000000000000000008E +:1082F0000000000000000000F0F0F0F0CB09FF0FDC +:10830000C0C0C0C00000000000000000000000006D +:108310000066C3C70000000000000000000000006D :10832000000000000000000000000000000000004D :10833000000000000000000000000000000000003D :10834000000000000000000000000000000000002D @@ -125015,477 +125015,477 @@ :1083700000000000000000000000000000000000FD :1083800000000000000000000000000000000000ED :1083900000000000000000000000000000000000DD -:1083A00000000000000000000000000000000B0BB7 -:1083B000F4003F3CFFFC0000000000000000000053 -:1083C00000000000000000000000B0B00000006EDF -:1083D000006E00000060000000000000F3F3F3F303 +:1083A00000000000000000000000000000000000CD +:1083B00000000000000000000000000000000000BD +:1083C00000000000000000000000000000000000AD +:1083D000000000000000000000000000000000009D :1083E000000000000000000000000000000000008D -:1083F000000000000000000000000000000000007D -:10840000000000000000F0F03C3F3D3F0020000075 -:10841000000000000000FFFF00000000000000005E +:1083F000000000000000000000000000F000F0009D +:108400000000060083838787000000000000000052 +:108410009F0F00F0000000000000000000000000BE :10842000000000000000000000000000000000004C -:108430000F0FF0000300C3C00000000000000000A8 -:1084400000000000000000000000000020200000EC -:10845000006E00FF0000C3C3000000000000030323 -:10846000F3F3000000000000000000000000000026 -:1084700000000000000000000000000000000000FC -:108480000000000000000000F0F03C3C3D3D00001A -:1084900000000000000000000000000000000000DC -:1084A00000000000000000000000000000000000CC -:1084B000000000610006000D000000610007000DD3 -:1084C000000000610005000900000000000000003D -:1084D000000000610006001D0000000000610000B7 -:1084E0000001000000610006000D00000000000017 -:1084F000000000000000000000000000000000007C -:108500000000000000610006000D00008061000610 -:10851000001D0000006100050009000000000000CF +:10843000000000000000000000000000000000003C +:10844000000000000000000000000000000000002C +:10845000000000000000000000000000000000001C +:10846000000000000000000000000000000000000C +:108470000000000000000000000000000000F0808C +:10848000F0000600000000000000000000000000F6 +:108490000000180800F000000000000000000000CC +:1084A000000000000000000000000000003000009C +:1084B00000000000000000000000000000000000BC +:1084C00000000000000000000000000000000000AC +:1084D000000000000000000000000000000000009C +:1084E000000000000000000000000000000000008C +:1084F00000000000000000000000000000610036E5 +:10850000000D000000615004C011000100000000D7 +:10851000000000000000500000900000000000007B :10852000000000000000000000000000000000004B -:108530000000000055AF1405000000007D557DFFD0 -:10854000FFA2000004C404C4050530300000000090 -:108550000000000000000000BC00000000007D558D -:10856000FF00003CEBFFFFFFFF3FAAFFAAFF000058 +:10853000000000000000000000000000000000003B +:10854000000000000000000000000000000000002B +:10855000000000000000000000000000000000001B +:10856000000000000000000000000000000000000B :1085700000000000000000000000000000000000FB -:10858000000000000000000000000000C300000028 -:108590000000FCFCFCFC80C080C03F30FF000000FD +:108580000000000080C0C70500000002FF020000DC +:1085900000000000000000000000000000000000DB :1085A00000000000000000000000000000000000CB -:1085B0000000000000000005140500000000415507 -:1085C0004100005D005DFFFF000000FF00FF0000B4 -:1085D00000000000000000000000F00000000000AB -:1085E0007D55FF00003CEBFF00000000EFEFFFFFB8 +:1085B00000000000000000000000000000000000BB +:1085C00000000000000000000000000000000000AB +:1085D000000000000000000000000000000000009B +:1085E000000000000000000000000000000000008B :1085F000000000000000000000000000000000007B -:108600000000000000000000000000000000C300A7 -:10861000000000000C0C0C0CFFFF0000FF00FF002E +:108600000000000000000000C30000000000FF00A8 +:10861000000000000000000000000000000000005A :10862000000000000000000000000000000000004A -:108630000000000000000000FF3FFF3500000000C8 -:1086400000F3A2F35555FFFFFFAAFFAA0000C0D513 +:10863000000000000000000000000000000000003A +:10864000000000000000000000000000000000002A :10865000000000000000000000000000000000001A -:1086600000003F3F0F0F30F330FFCA00CA005050E8 -:10867000FAFA000000000000000000000000000006 -:1086800000000000000000000000000000000000EA -:108690000000000000000000000000FF2020C3C315 -:1086A000C3C3000000000000000000000000000044 -:1086B00000000000000000000000003F0035000046 -:1086C0000000F3F3A2F3C30FFFFF00AA0FAAFFFFFE -:1086D000C0D5000000000000000000000000000005 -:1086E000000000003C3C0F0F30F330FFCAF0CAF02E -:1086F0005040FAEA00000000000000000000000006 -:108700000000000000000000000000000000000069 -:1087100000000000000000000000000000FFA2A216 -:10872000F0FFAAFF40002000C00020001008400019 -:1087300020032000200088038800400341004000FF -:108740000008840020808800210420042000040008 -:1087500020008200C0002000201040038804200078 -:108760000000400000012003400020802002200083 -:10877000000088002000000290000000200400009B -:10878000C000A000080540000000400000032002D7 -:10879000C002200004004000C00040002100400052 -:1087A0008400000588000000040040024002000030 -:1087B00040004084004000000400108200A0A0821D -:1087C0004000008200000004400220030003400239 -:1087D0000040004010000000400200000000400285 -:1087E00000001000000000004002004000020040B5 -:1087F000000000C040000002000000001002000065 -:10880000408810024088C000000240A020004100C3 -:10881000000000080002200080000502C082400223 -:108820000800118200820082020000400040000027 -:108830000000000000000000000000002004000014 -:1088400040809080000000002000002020002020B8 -:1088500084000000000000040200C040000908007D -:10886000C0000200000089040000001100000000A8 -:10887000000000040000000400000000000082006E -:108880000000021000400005840002080200880079 -:1088900000040800020000000000000000000000CA -:1088A0000209A0008809401100020984000000109C -:1088B0000900008400100288000000000008001079 -:1088C00000048002000200880010C000000980C07F -:1088D00080010008020000840988000803084100A4 -:1088E0008000008841000082080800000010000895 -:1088F00000000804008400840000408800842008F0 -:108900000200001000850509000002100000048428 -:1089100000080000004000000010021000080408D9 -:108920000000008400000008820000010003000035 -:1089300000000000840000000008000000030000A8 -:108940000000000001100000900990008400000069 -:10895000000001000002100320000040000300217D -:108960000040000808000005C009000400000009DC -:1089700082020000882100100000000000000010AA -:108980000010200000210003880300409000022115 -:10899000400000008810040890000021002100031E -:1089A00000210010000090004000900841210000CC -:1089B0000020000810000000000000A00090000847 -:1089C000000000000390400000900000000200A0A2 -:1089D000000000822000008400A0000000A003002E -:1089E0000002000040A00500410841820000000094 -:1089F00040000001408400000082000000200000D0 -:108A000000000000008800000000000000000000DE -:108A1000000000000000000000000000000008004E -:108A20000900090000200000000000000540C0040B -:108A30000000100008008404080000000000840406 -:108A40008400100000000020080000400020820088 -:108A50002040000200001008820008000200080008 -:108A6000002140000010840000000008900008056C -:108A700000000000080000808202000008000800DA -:108A8000000008008200080382000802081000109D -:108A9000082108000800824008000000820400400D -:108AA00082008202080082020020000008080800FC -:108AB0000800000000004020000008000000030043 -:108AC00000044104080000000800090400820800B6 -:108AD00011C08000034100004000020000000000BF -:108AE0000000000008000000030000000400000077 -:108AF00021C0000000000000001000010408000078 -:108B00000000038800000000008200400084000193 -:108B1000008300A0410003000000030005000000E6 -:108B20000008000000012100000141000000004099 -:108B3000000020C00000000000000000000008004D -:108B4000000000080000000000000000000090008D -:108B50000000020800084020000000000003000898 -:108B600000000020002100004000404040080000BC -:108B700000000011000000000003000000000020C1 -:108B800000030000000000080000000000080000D2 -:108B90008208002000000040000800001008820049 -:108BA0000010C00000000000008040000000000035 -:108BB00000800000000500000000000000880000A8 -:108BC000000000000000000000000000000010088D -:108BD00000A000408200200280010004000000206C -:108BE00040000000000840000000001000000802E3 -:108BF00009000000000000000000009004080000D0 -:108C00000000000000A000000000000000000000C4 -:108C100000880000000000000000000400000000C8 -:108C200000000000000000200002000240001102CD -:108C300040200802408800040000000800000000F6 -:108C4000000000000000000000000000080000001C -:108C50000000000008009000000000A0002100219A -:108C600000000005000000000021000300000800D3 -:108C700000218200820000000000000000030000CC -:108C800000050000040000080008000000000000CB -:108C9000000000000000000000000020000004218F -:108CA000000000004000A000000000008400000060 -:108CB000000000030000000040020004000000006B -:108CC0000000000000000000030000004040000021 -:108CD000020002000884000008000000080221A031 -:108CE0000000000000200000030008000000000059 -:108CF0000800200000840000400000000000000088 -:108D000021000210200000000002020000022100E9 -:108D100040002000000000400000000000000000B3 -:108D2000008200400000000000000000000003007E -:108D30000000000000C00000000000010000000072 -:108D40000000000000000000000000000000000023 -:108D500000000000000000000008001008A08802C9 -:108D60000891C01100000000000000000000000099 -:108D700000000000000000000000000000000801EA -:108D800000004000C00000000000000000000000E3 -:108D9000000000000000101090820008088200000F -:108DA00000000000000000000000000000000000C3 -:108DB00000010801000100000000020000000000A6 -:108DC00000000000000000000000000000000000A3 -:108DD00000000000000000000010008000894080BA -:108DE00011000208801000000000000000000000D8 +:10866000000000000000000000000000000000000A +:1086700000000000000000000000000000000000FA +:1086800000000000000014D70F0C00FF00FFAAFF3D +:10869000AAAA000000000000000000000000000086 +:1086A00000000000000000000000000000000000CA +:1086B00000000000000000000000000000000000BA +:1086C00000000000000000000000000000000000AA +:1086D000000000000000000000000000000000009A +:1086E000000000000000000000000000000000008A +:1086F000000000000000000000000000000000007A +:10870000000000000000000000C30B0800FF00FF95 +:10871000AAFFEAEB000000000000000000000000DB +:108720000000000000000100000000000000000048 +:1087300088000000000000000000000000000000B1 +:108740000000000000000000000000000000000029 +:108750000000000000000008000000000000000011 +:108760000000000000030000000000000000000006 +:1087700000000000000000000000000000000000F9 +:108780000000020002000000000000000002008063 +:108790000000000400040080088021020480010021 +:1087A0000080210420800000040000000000000080 +:1087B00000000000000000000400000000000000B5 +:1087C00000000000000000000000000000000000A9 +:1087D0000000000000000000000000000000000099 +:1087E0000000000000000000000000000004000085 +:1087F000000000000004000400000002000000006F +:108800000002000000400000000200020000000022 +:1088100000020004000000000520801088C18010C4 +:108820002090000410010004000000A184000080DA +:108830000200010000000000020000000000001023 +:1088400000410000000000000000000000000000E7 +:108850000000000000000000020000000000000016 +:108860000000000000000000000000000000000008 +:1088700004000000000000000000000000000000F4 +:1088800000000000000002000200001000000010C4 +:10889000000002000041000001040000000002028C +:1088A00040800000050403040000000800201000C0 +:1088B0000020000002000000000000100000000086 +:1088C0000082000000000000000000400040001096 +:1088D00000000000000000000000000000C00000D8 +:1088E0000008000000000000000000000000000080 +:1088F00000088000000000000000000000000008E8 +:10890000000000080000000000000000000000005F +:10891000000800000000000000002001000000042A +:108920000000801000002001200100000000000075 +:10893000000088000021000000000000000000008E +:108940000021000000050000000000000000000001 +:1089500000080000000000000000000000410000CE +:108960000000000000000000000000000000000007 +:1089700000000000000000000000000000000000F7 +:1089800000000000000000000000000040000000A7 +:1089900000000000200400800000008000000000B3 +:1089A0000002010402000000000890000000000026 +:1089B00000080008000000000000000000000000A7 +:1089C00000000000000000000000000000000000A7 +:1089D0000000000000000000000000000000000097 +:1089E0000000000000000000000000000000000087 +:1089F0000000000000000000000000000000000077 +:108A00000000000000000000000000000000000066 +:108A100000000000000000850002002000020000AD +:108A20000084000020A18000000000000000000081 +:108A30000002000200080020004100400040000940 +:108A40000000000000000000000000000000000026 +:108A50000000000000000000000000000000000016 +:108A60000000000000000000000000000000000006 +:108A700000000000000500000000000000000000F1 +:108A80000000000000000000902100000000000035 +:108A90000000000000040009820440000000000003 +:108AA000001100050000410400400004000000889F +:108AB00000041190200000000001009000000382DB +:108AC00000000000000000000000208402400000C0 +:108AD000000000000000000000000000000008008E +:108AE00000002000000000000088000000000000DE +:108AF0000000000000000000000000000000000076 +:108B00000000000000000000000000A000000000C5 +:108B1000000000000000000000000004808400004D +:108B20000000009040000000C009020000010000A9 +:108B300000050001820282080000000000410000E0 +:108B4000000000000000000800000000000000001D +:108B50000000000000000000000000000000000015 +:108B60000000000000000000000000000000000005 +:108B700000000000000000000000000000000000F5 +:108B800000000000000000000000000000000000E5 +:108B90000000000000000000900000000080008045 +:108BA0000080000001000100000290A0008004008D +:108BB00000000000000000000000000000000000B5 +:108BC000000000000000000000000000000800009D +:108BD0000000000000000000000000000000000095 +:108BE0000000000000000000000000000000000085 +:108BF0000000000000000000000000000000000075 +:108C00000000000000000000000000000000000064 +:108C1000000000000000000000000000000400044C +:108C200011020002000020000400000000020020E9 +:108C300000A000820000400200000080002100002F +:108C40000011000000000010000000000000000003 +:108C500000000000000000000021000000000000F3 +:108C60000000000000000000000000000000000004 +:108C700000000000000000000000000000000000F4 +:108C800000000000004100000000000000000000A3 +:108C900000000000000000000000000000000000D4 +:108CA00000008800000000000004010800000084AB +:108CB000402000080000020000050004022000001F +:108CC0000000000000000082000100000020000001 +:108CD0000000000000000000020000000000000092 +:108CE000000000000000000000000000202009003B +:108CF00009880000000000000000000000000000E3 +:108D00000000000000000000000000000000000063 +:108D1000000000080000000000002010000000001B +:108D20001100008800000000000000011000000099 +:108D30000003000104A0000400A0004085A00090F2 +:108D4000008290840000000000000000000000008D +:108D50000000000000000000000000000000000013 +:108D60000000000000000000000000000000000003 +:108D700000000000000000000000000000000000F3 +:108D800000000000000000000000000000000000E3 +:108D900000000000000000000000000000000000D3 +:108DA00000008800000000008501C000000011C024 +:108DB000000401A0840401010100000100012080E1 +:108DC00000800000800000000000000000000000A3 +:108DD0000000000000000000000000000000000093 +:108DE0000000000000000000000000000000000083 :108DF0000000000000000000000000000000000073 -:108E00002008100080118000000000000000000019 -:108E100000000000000000008000008000000080D2 -:108E20000000000000000000000000000000000042 -:108E30000004002100050008000000000000000000 -:108E40000000000000000000000000000000000022 -:108E500000000000000000000000000000000040D2 -:108E600008008300C1008300000000000000000033 -:108E70008000000000000000000080000000800072 -:108E80000000100005000000830800000000000042 -:108E900000000000000000000000800000020080D0 -:108EA00000000000000000000000000000000000C2 -:108EB000000009001000000000A1100005000400DF -:108EC0000021000000000000000000000000000081 -:108ED0000000000000000000000000A000000000F2 -:108EE000000102000900A000912000000000000025 -:108EF0000000080020000000000000000200000048 -:108F00000800000021088800020010000000000096 -:108F10000000000000000000000000008800820146 -:108F200040A004020000000000000000000000005B -:108F30000000000000900100000000090100000096 -:108F40000000000100000000000000000000000020 +:108E00000000000000000000000000000000000062 +:108E10000000000000000000000000000000000052 +:108E200000000200000000000020212100090011C4 +:108E30000280000041800000114103210010000861 +:108E40008000002180808000800000000000800001 +:108E50000000000000000000000000000000000012 +:108E60000000000000000000000000000000000002 +:108E700000000000000000000000000000000000F2 +:108E800000000000000000000000000000000000E2 +:108E900000000000000000000000000000000000D2 +:108EA00000000000000000000000108021002040B1 +:108EB0004103850041201011C1002000410011082C +:108EC000058508001000A01004000200000000004A +:108ED000C0000000000000000000000000000000D2 +:108EE0000000000000000000000000000000000082 +:108EF0000000000000000000000000000000000072 +:108F000000000000000000000000008400000000DD +:108F10000000000000000000000000000000000051 +:108F2000000000000000000000000000000201003E +:108F300001010101080088010083094000200000B0 +:108F40000101000404A000820082900800000000DB :108F50000000000000000000000000000000000011 -:108F600000000000C041008900C082200000000015 +:108F60000000000000000000000000000000000001 :108F700000000000000000000000000000000000F1 -:108F80000000000000000088001101A100A0000006 -:108F90000000000000000000000000000000400091 -:108FA00000000882A0020000000000000000000095 -:108FB00000000000000000000000010101000000AE -:108FC0000001A00000000000000000000000000000 +:108F800000000000000000000000000000000000E1 +:108F900000000000000000000000000000000000D1 +:108FA00000000000000000010001000000010001BD +:108FB000010001010101A0840082A005A089000038 +:108FC000000001010001000000000000008000001E :108FD0000000000000000000000000000000000091 -:108FE000000000000000800800100008800500005C +:108FE0000000000000000000000000000000000081 :108FF0000000000000000000000000000000000071 -:1090000000000000000000000002009021A100A06C +:109000000000000000000000000000000000000060 :109010000000000000000000000000000000000050 -:109020008000000000008000000000000000000040 -:10903000000000000000000000030805052120409A -:109040000041000380110220000000000000000029 -:109050000000000000000000000000000000000010 -:109060002102210005000300000040900880080351 +:1090200000000000000000000040000400020011E9 +:109030000008102108201140008400C18008C040B1 +:10904000002010000905101100020010008000002F +:109050000000000000800000000000000000000090 +:109060000000000000000000000000000000000000 :1090700000000000000000000000000000000000F0 -:1090800000000080000000000000210009800800AE -:1090900008100000000000000000000000000000B8 -:1090A00000000004000080800000000000000000BC -:1090B00000000000000000000000080003000500A0 -:1090C000001003002000000000000000000000006D -:1090D0000000000000000000000000000000000090 -:1090E00000000100000000000000000011100282DA -:1090F00088000000000000000000000000080008D8 -:109100000000000000020040000000000182011089 -:10911000011001000000000000000000000000003D -:10912000000000008200C0904008400000000000E5 -:10913000000000000000000000000000012001000D -:1091400000000001004000000000000000000000DE -:10915000000000000000000000000000000000000F -:1091600000000000000000E000000000000000E03F -:109170000700600A0000000000000000000000007E +:1090800000000000000000000000000000090000D7 +:1090900000000000000000000000000000000000D0 +:1090A00000000000000000000000000000000000C0 +:1090B00000000989020010001184800900210000CD +:1090C0008040030011110300111104018284008209 +:1090D0008400000000C0000200000000000000004A +:1090E0000000000000000000000000000000000080 +:1090F0000000000000000000000000000000000070 +:10910000000000000000000000000000000000005F +:10911000000000000000000000000000000000004F +:10912000000000000000000000000000000000003F +:109130000000000000C100000000000990C1A00272 +:109140000002880000000100010001010081000010 +:109150000700000000000000000000000000000008 +:1091600000000000000000000000000000000000FF +:1091700000000000000000000000000000000000EF :1091800000000000000000000000000000000000DF -:10919000000000000082000000000000000000004D +:1091900000000700000000000000000000000000C8 :1091A00000000000000000000000000000000000BF -:1091B00000000000000000000000000000000000AF -:1091C000000000000000000000000000000000009F -:1091D000000000000000000000000000000000008F -:1091E0000000000000000000000000000000F0C0CF -:1091F000F0C082FF80FF00000000000000000000BF +:1091B00000E000000000820000E000008400884120 +:1091C00000E007000081000000E00000000000AAAD +:1091D00082AAFFA0FFFF00000000000000000000C6 +:1091E000000000000000000000000000000000007F +:1091F000000000000000000000000000000000006F :10920000000000000000000000000000000000005E -:109210000000000055554050000000000000000014 -:109220000000000000000000FF553C1400AA0000F0 +:10921000000000000000000000000000000000004E +:10922000000000000000000000000000000000003E :10923000000000000000000000000000000000002E -:10924000000000000000000000000000000000001E -:10925000000000000000000000000000000000000E +:10924000AABEFFFF000100000000000000000000B7 +:1092500000AA00AAA0A0A8A800000000000000002A :1092600000000000000000000000000000000000FE -:10927000F0C0F0C0007D007F000000000000000092 +:1092700000000000000000000000000000000000EE :1092800000000000000000000000000000000000DE -:1092900000000000000000003F0F00000000000080 -:1092A000000000000000000000005F5F1C1C0000C8 +:1092900000000000000000000000000000000000CE +:1092A00000000000000000000000000000000000BE :1092B00000000000000000000000000000000000AE -:1092C000000000000000000000000000000000009E -:1092D000000000000000000000000000000000008E -:1092E00000000000000000000000C0C0C0C000007E -:1092F000000000000000FBFB101000000000000058 -:109300000000000000005050505000000000AFAFBF -:109310000F0F00000000000057F757F70000000093 -:10932000000000000000000000000000FF3F0000FF -:10933000008200A200000000000000000000000009 -:10934000000000000000000000000000000000001D -:10935000000000000000000000000000000000000D -:10936000000000000000000000000000C0C0C0C0FD -:1093700000000000AA20FFFFFFEB14000000000027 -:1093800000000000000000007878787800000000FD -:10939000A0A000000000000000005757F7F70000F1 -:1093A0000000000000000000000000000000FF2F8F -:1093B0000000008A00AA0000000000000000000079 -:1093C000000000000000000000000000000000009D -:1093D000000000000000000000000000000000008D -:1093E000000000000000000000000000000000611C -:1093F0004002000D000000610003000100000000B9 +:1092C0000000003C557D0000000000000000000090 +:1092D0000000AAAAA200FF00FB000000000000009E +:1092E00041410000000000000000000000000000FC +:1092F000000000000000000000000000000000006E +:10930000000000000000000000000000000000005D +:10931000000000000000000000000000000000004D +:10932000000000000000000000000000000000003D +:10933000000000000000000000000000000000002D +:1093400000000000030341000000000000000000D6 +:1093500000000000AAAAA000FF00FF00000000001B +:1093600055554141000000000000000000000000D1 +:1093700000000000000000000000000000000000ED +:1093800000000000000000000000000000000000DD +:1093900000000000000000000000000000000000CD +:1093A00000000000000000000000000000000000BD +:1093B00000000000000000000000000000000000AD +:1093C000000000000000000000008F8F828200007B +:1093D000000000000000000000300000000000005D +:1093E0000000000000050000000000000000000078 +:1093F000000000000000000000000000000000006D :10940000000000000000000000000000000000005C -:10941000000000000000000000610006000D0001D7 +:10941000000000000000000000000008000000A0A4 :10942000000000000000000000000000000000003C -:10943000000000000010000100000000000000001B -:10944000000000000000000000610006000D0000A8 -:1094500000610006000D0000000000000000000098 +:1094300000000000000000000061000600090000BC +:1094400000610006C009000000615037C00501A09E +:1094500000210000000100000000000000000000EA :1094600000000000000000000000000000000000FC -:109470007F75FF55000000000CFC0CFCFFFF3FBE99 +:1094700000000000000000000000000000000000EC :1094800000000000000000000000000000000000DC -:1094900000000000000000000000000000000505C2 -:1094A0000F000000000000000000000000000000AD -:1094B00000000000000000000000000000000000AC -:1094C000000000000000000000000000A000AFAF9E -:1094D0000587FF0000009D6D64290000000000006A +:1094900000000000000000000000000000000000CC +:1094A00000000000000000000000000000000000BC +:1094B00000000000000000000000000000003C3C34 +:1094C000FFFF00200000F0F8F0FA00000000FF0F9E +:1094D000C303872DAF05C3FF003C00000000000060 :1094E000000000000000000000000000000000007C -:1094F00000002A20AA00000000000CFC0CFC0FAAAF -:109500000FAA0000000000000000000000000000A2 -:10951000000000000000000000000000C002020285 -:109520003C3C0000000000000000000000000000C3 +:1094F000000000000000000000000000000000006C +:10950000000000000000000000000000000000005B +:10951000000000000000000000000000000000004B +:10952000000000000000000000000000000000003B :10953000000000000000000000000000000000002B -:109540000000000000000000000000000000A0A0DB -:10955000AFAF0587FF00FF009D6D6429000000008C +:109540003E3C3EFF00000000F8FAF8FA0000000080 +:10955000FF0FC303AF05AF05003CC3FF00000000D1 :1095600000000000000000000000000000000000FB -:1095700000000000003C003C000000003F3F3F3F77 -:10958000AEAABEAA0000000000000000000000001B -:109590000000000000000000000000000000F0F0EB -:1095A000FFFFF0F0F0F000000000000000000000FD +:1095700000000000000000000000000000000000EB +:1095800000000000000000000000000000000000DB +:1095900000000000000000000000000000000000CB +:1095A00000000000000000000000000000000000BB :1095B00000000000000000000000000000000000AB -:1095C00000000000000000000000000000004BFF51 -:1095D0000000E1E1E1E100000000F330F3300000C1 +:1095C0000000000000008000C000FFEBF05F000022 +:1095D0000000AAFA000FCF0CD7D730F3B271000009 :1095E000000000000000000000000000000000007B -:1095F000000000000000003C003C000000003F3F75 -:109600003F3FAEAABEAA000000000000000000001C +:1095F000000000000000000000000000000000006B +:10960000000000000000000000000000000000005A :10961000000000000000000000000000000000004A -:10962000FFFFFFFF8282BEBE0000000000000000BE +:10962000000000000000000000000000000000003A :10963000000000000000000000000000000000002A -:10964000000000000000000000000000000000001A -:1096500000FF00004B4B4B4B00000000CF0CCF0C29 -:10966000880020008400A004200020002000880042 -:109670008400C00240840000004020038800C0082D -:109680008800200084082004200488002000200096 -:10969000A0000002880002048800200005888800DD -:1096A00000030411200088402010200088002000C2 -:1096B00000100000024000008402880810402100D1 -:1096C000A10000000000400440080000000000006D -:1096D0008204000800000008A0042000204003824B -:1096E00020880500040000040900400021040990BE -:1096F0000000004000030021000010014040002055 -:10970000400240020000004000020090410241007F -:1097100040004004009004000000004000000405E8 -:1097200010000000400040C040410903004000021A -:109730000002020341020001000000004091C0C18C -:109740000400080021020802000010821102000239 -:109750000002000240000084008400000400008435 -:1097600020080005000000000000000400040008BC -:1097700000000004000000900004008002000000CF -:109780000080000800000000000300000005000049 -:109790000000000400410004001010090000000057 -:1097A0000004008000000041000400C000000240EE -:1097B0000400002000404000200410802000000031 -:1097C0000080008000000000000000402010000425 -:1097D00000000000000300002003000090101000B3 -:1097E000840000000400410800000084000800001C -:1097F000001005000008200040200009201000088B -:109800000040000800050084000000000082000005 -:1098100040840008040841000000000800840002A1 -:109820004008200800040000000400004109000472 -:10983000840180000009200980048005C0404004A4 -:10984000000000080004000000040000008402047E -:109850000000008400080008098400080000408817 -:1098600000040002000000001000840040000021FD -:10987000000000000000000000000000008300085D -:10988000880004C190004083840090000000902173 -:109890008800000000000000001040000000900858 -:1098A0009005402100414080000000080021040094 -:1098B000000800000040004082000208000800008C -:1098C000000008830080040000110008C02100414E -:1098D000000900008800400000210000001000097D -:1098E000102010000040080041114000000000005E -:1098F000080011000000000000000000000000024D -:109900000000100000040008110400020000000420 -:109910000008108408A041A04100080821080000A8 -:1099200000000500002000001108000000200000D9 -:10993000410800000002000000C000880000100084 -:109940000000000080080008800010A00300410013 -:1099500000000000000010000000000400000000F3 -:109960004000030005A00000000488A000004000A3 -:109970008200400082008200C0081000040008003D -:109980000800100008000400080082000800080019 -:1099900082000002820000000000820040000008F7 -:1099A000A000A0000000A02100030403000000119B -:1099B0000003004000101005C0880404004008881F -:1099C000A000084000020800010082000800081101 -:1099D0000800820008118200000000000010C00092 -:1099E00000000004080000200000044004410000C2 -:1099F00000000000000000C01000110000404140C5 -:109A00000000000041A0030000000000000004046A -:109A1000002000200000000441820000000003003C -:109A200004A0080010A04100000000A08800000071 -:109A300008001084000100010000000300851040B0 -:109A400000110010050104C10008020010200000F0 -:109A500000820000000800900000000000000000EC -:109A600000000000000010080000001088008000C6 -:109A7000000000000000A000900010210000000085 -:109A800010000000000082000000831000000100B0 -:109A9000C0000000080382000800C0100800000099 -:109AA000002108000000000000000000400008C085 -:109AB000000000000040080900000011A0000000A4 -:109AC0000000C00400050000000000000085200028 -:109AD00000851000000000000020080084000840FD -:109AE0000021000000000000000000000000200035 -:109AF0000020004000000000000000000000000006 -:109B00000000000000000000040000004009000404 -:109B100040024008400409900004000000000000DA -:109B20000000000000000000000002000000000033 -:109B3000800200004090054011002040000000001D -:109B4000000000000000000000000020400008406D -:109B5000800000200000000040000000000000081D -:109B600000000000038200C000004004000000006C -:109B700000080808000000000000000000000021AC -:109B800000000800900082008200A0000000000099 -:109B9000000000008202820000000020A000A0005F -:109BA00082004000000384000020900000000000BC -:109BB0000000900000000021400000800020000014 -:109BC0000808000901890021010000410005000387 -:109BD000820800110005000082080800042100002E -:109BE0000800A0001000000000000020A0000000FD -:109BF00088000000000004000090001000C0000079 -:109C00000000000002000000000000020000000050 -:109C100000400000110000000000090409000000DD -:109C2000200000000000000000000088000000008C -:109C300040000090000000000008410002084000C1 -:109C400000000000000002100020020000000008D8 -:109C50000000000000000000000000000000008282 -:109C60000000000004002000000000C00000000010 -:109C70000000000020000040000000000000000084 -:109C800000000000000000000000000000C0000014 -:109C90000100820001A00800000000000000000098 -:109CA00000009000000000820000C0000004C0829C -:109CB0000000C000000100000000000000000000E3 -:109CC0000409010000000140C008A000000000C01D -:109CD0008802010000000141C000000000000000F7 -:109CE000000000000000000001020001C0000004AC -:109CF000C0820000C0000001000000000000000061 -:109D000000000000000000000000000404000080CB -:109D1000000020050021400080000000000000003D -:109D2000002000000000002003800008C000008028 -:109D300080800000800000030000000040412141BD -:109D4000000084C14141004141918080000811021E -:109D5000008000004141004141858000000000007A -:109D60000000002000000000004002800002C0004F -:109D700000808080000080000003000000000900D7 -:109D8000000000000000000000000000080000804B -:109D900000000000C10085410041000300002000D8 -:109DA0000000000000004000000002009000A080C1 -:109DB0000000030000000000008080090000410056 -:109DC00002100041000041410841004100411040A3 -:109DD000800800001100C100A14100C180C1000045 -:109DE0000500000000000000050000000500100054 -:109DF00005800000030000000000008080100000CB -:109E0000000000000000000000000000000003004F -:109E10008482000000C00800400100010001000031 -:109E2000010000000000000000000000010003002D -:109E30000402000001004000000000C08200000099 -:109E40000000010000A1000000010101000100016B -:109E500002050809000000004000200100850203FF -:109E600000000000000000000000000000000000F2 -:109E7000A1002002000001004000000000C082019B +:109640000000000000000000C000C0000000F05F4B +:1096500000000000AAFE000FCF0C141430F3B2710A +:109660000000000000000000880000000000000072 +:10967000000000000000000000000000000000806A +:1096800000000000000000000000000000000000DA +:10969000000000000000000000000000000000804A +:1096A00000030000000000000000000000000004B3 +:1096B00000000000000000000000008041800180E8 +:1096C00011840000000000000000001100001000E4 +:1096D00040009000A00000000000900020801004D6 +:1096E00041800000000000000000000000000000B9 +:1096F000000000000000000000000000000000006A +:109700000004400000000000000000000000000015 +:109710000000000000000000000000000000000049 +:1097200000040000400000000000000000000000F5 +:109730000000000000000082000000000040A010B7 +:109740000808A00240020002000010000002000011 +:109750000002000000000000400000000000A00225 +:109760004040A008000000000000000000000000D1 +:1097700000000000A00900008200000000000000BE +:1097800000000000000000000000000000000000D9 +:1097900000000000000000000000000000000000C9 +:1097A00000050000000000000000000000000000B4 +:1097B00000000000000000000000000000000000A9 +:1097C0000000000000000009000000000009000087 +:1097D0000000000000000000000000000000000881 +:1097E0000000020000411184000000080000000099 +:1097F0000000000000000000008800C00000000021 +:109800000000008400840000000000080000000048 +:10981000000000000000000000000084000000A024 +:109820000000000000100000000000000008000020 +:109830000000000000000000000000000000000028 +:109840000000000000000000000000000084000094 +:109850000000000000000000000000000084000084 +:1098600000000002000000041021000000000000C1 +:1098700000000000000000000021000000080000BF +:1098800000000000000000000010000000000000C8 +:109890000000000000050041000000000000000082 +:1098A00000000000000000000000000000000010A8 +:1098B0000000000000000010000000100000000088 +:1098C000000000000000000000218421842100002D +:1098D000202120030000C000002100030021000817 +:1098E000000200004000890008110000000200A0F2 +:1098F0000000000400400000000000000000000024 +:10990000000000000000000000080000000000004F +:109910000000000000000000000000000000000047 +:109920000000000000000000000000000000000037 +:109930000000000000000000000000000000000027 +:10994000000000000000000000000000090000000E +:10995000000000000000000000100284050000006C +:1099600000020008090000900800000000400011FB +:10997000001100400000000400400011000300003E +:10998000C0050005000000000000000040000000CD +:109990008200000000000000000000000000000045 +:1099A00000000000000000000000000000000000B7 +:1099B0000000000000000000000000000041000066 +:1099C0000000000000000000000000000000000097 +:1099D0000000000000000000000000000010000077 +:1099E00000000000000002020011100000000488C6 +:1099F00002200400000040000084040000000084F5 +:109A000000000000000000040000008800000000CA +:109A10000000000000000000000000000040000006 +:109A20000000000000000000000000000000000036 +:109A30000000000000000000000000000000000026 +:109A400009000000000000000000000000000010FD +:109A50000000008800000040000000000000000836 +:109A600004000000000000008000000080001100E1 +:109A70000000000000410000000000050000A00000 +:109A800000000000000000000000000000000021B5 +:109A900000000000000000000000000000000000C6 +:109AA00000000000000000000000000000000010A6 +:109AB00000000000000000000000000000000000A6 +:109AC0000000000000000008000000000208000084 +:109AD0000008001000000005A000000000000000C9 +:109AE0000002000000000000001000000220000042 +:109AF0000020000000001000000000000000000036 +:109B00000000000000000000000000000000000055 +:109B10000000000000000000000000000000000045 +:109B20000000000000000000000000000000000035 +:109B30000000000000000000000000000000000025 +:109B40000000000000000000000000000000000015 +:109B50000000000000C00088000000200400008811 +:109B6000000000400010000800C0009000900500B8 +:109B70000002000000000000000004008200000558 +:109B8000000000000000004100000000000800008C +:109B90000021000800000000000000000800000094 +:109BA00000000200000000000004000000020000AD +:109BB00000000000000000000000000000000000A5 +:109BC0000000000000000000000000000000000590 +:109BD0000000000010000003000000000010000062 +:109BE0000000004100000000000000000011000023 +:109BF00008000000000000000020049005000000A4 +:109C0000400400000000040000000000000000000C +:109C10000000000000000000000000000000000044 +:109C20000000000000000000000000000000000034 +:109C30000000000000000000000000000000000024 +:109C40000000000000000000000000000000000014 +:109C500000900000000000C00000000000000000B4 +:109C600000000000000000000000001000001100D3 +:109C70000090A090400440000000000000000000A0 +:109C800000000000000000000000000000080000CC +:109C900000000000000000000000000000000000C4 +:109CA000000000000000000001000100008400002E +:109CB00000000000000000000000000000000000A4 +:109CC000000000000000000000000000000000C0D4 +:109CD0000000000000000188840000000000000077 +:109CE000000000000000000000000001000000C0B3 +:109CF0000000000000000010C00000000000000094 +:109D000000000000000000000000000510000080BE +:109D10000000000000000000000000000000000043 +:109D20000000000000000000000004050300000027 +:109D30000000000000000000000000000000000023 +:109D400000000000000000000000000011411100B0 +:109D50000080000000000000200000000000000063 +:109D600000000000000000000000000000101000D3 +:109D70000080000000000000110000000000090049 +:109D80000000000000000000000000004000828091 +:109D90000000008000000000000000410000020000 +:109DA00000000000000000000000000020002180F2 +:109DB0000000008000000000000000020000000021 +:109DC0000200000000000000000000000000090088 +:109DD0002100000800000000000000000009000051 +:109DE0004000000000000000000000000000100023 +:109DF0000300000000000000000000000040000020 +:109E000000000000000000000000000000008900C9 +:109E100010820084C00884000000000000010000DF +:109E200001000000000000000000000000004100F0 +:109E3000C01000A0C004840000000000000000006A +:109E40000000000000000000000000000000000012 +:109E50000200108800010000020000000000000065 +:109E600000000100000000000000000000000000F1 +:109E7000020089080000000210000000000000013C :109E800000000000000000000000000000000000D2 -:109E900000400000A00000000000000000000000E2 -:109EA0000000000000000000000000000001C000F1 -:109EB0000040000001000000000000000000000061 -:109EC000000000400000C085010000000000C182C9 -:109ED000080001900000A040000000000000C10048 +:109E900000080000000000000000000000000000BA +:109EA00000000000000000000000000000000000B2 +:109EB000000800000000000000000000000000009A +:109EC0000000000000000000000000000000000092 +:109ED000000000020000100000000000000001006F :109EE0000000000000000000000000000000000072 -:109EF00090000020000001000000000000000000B1 +:109EF0000000001000001000000000000000000042 :109F00000000000000000000000000000000000051 -:109F100000000080000000000400000000030500B5 -:109F20000000000000000000000000000000002011 -:109F300080400000000041000000000000000041DF -:109F400000000000008000108990410000000041E6 -:109F5000C1A1100010040041099000000000002180 -:109F6000C10300000000000000000000000000002D -:109F70000020004000000000410000000000000040 -:109F8000004100000000800000910000000000007F -:109F900000000000004180000000000002410000BD -:109FA0008080020500208000008200000000000088 -:109FB0000900000000C10000000300000041002073 -:109FC000000005030000A08400028083000041021D -:109FD000804191C103C102C10000008000004141E5 -:109FE0000041808003C10000800500830000000262 -:109FF0000000890000000041000000030000004153 -:10A0000000000000054000000800001000000000F3 -:10A010000000000000000085820000000000010137 -:10A020000000400201A000012000004100000000EB -:10A030008200C00000000005400000000000000198 -:10A04000000100000083000041C082014083000045 -:10A050000000200184C101C1A10900C002C00000AC -:10A060000001000140C001C10000040000830000A5 -:10A07000000182004000000000914000000000004C -:10A08000000100000000008200000000000000004D +:109F100000000080000000000000000000000000C1 +:109F20000000000000000000000000000000000031 +:109F300000000080000000000000000000000000A1 +:109F40000000000000000000000000000000000011 +:109F50000000000000000000800000000000000081 +:109F600003000000000000000000000000000000EE +:109F700000000000008000008000000000000000E1 +:109F800002000000000080000091000000000000BE +:109F900000000000004180000002000000000000FE +:109FA000000000000000000200830000000000002C +:109FB000000000000041000000020000000000005E +:109FC0000000000000000002800000C1000000004E +:109FD00000000000000000C10000000000000002BE +:109FE0000011800010830040800000C100000000CC +:109FF00000000000000000C100000000000000049C +:10A00000000980002083000008000010000000000C +:10A010000000000000000005020000010000000038 +:10A02000000000000000000082010083000000002A +:10A0300000000000000000A140000001000000003E +:10A0400000000000000000000000200000400000B0 +:10A0500000000000000000000041020000000000BD +:10A06000000000004000001000012000004000003F +:10A07000000000000000000000410200000000009D +:10A08000000000004000018200000000000000000D :10A090000000000000000000810000E00000480017 -:10A0A0000000000000004842000000000000000026 -:10A0B0000000000000000006811200E00700484296 -:10A0C0000000000000004842000000000000000006 -:10A0D00048420000000000004842811200E00700F2 -:10A0E000484200000000000048420000000000005C -:10A0F00000000000000000000000811200E00700E6 -:10A10000484200000000000048420000000000003B +:10A0A000000000000000000A0000000000000000A6 +:10A0B0000000000000000000810000E000004800F7 +:10A0C0000000000000000000000000000000000090 +:10A0D00000000000000000000000810000E000001F +:10A0E0004800000000000000000000000000000028 +:10A0F00000000000000000000000810000E00000FF +:10A100004800000000000000000000000000000007 :10A11000000000000000000000000000000000003F :10A12000000000000000000000000000000000002F :10A13000000000000000000000000000000000001F @@ -125503,208 +125503,208 @@ :10A1F000000000000000000000000000000000005F :10A200000000000000000000000000000000747B5F :10A21000000000000000000000000000000000003E -:10A22000000000000000000000000000DE2E757B32 +:10A22000000000000000000000000000DE2E747B33 :10A23000000000000000000000000000000000001E -:10A24000000000000000000000000000DEAE000082 -:10A25000252B0000000000000000000000000000AE -:10A260000000000000000000000000000000D4A476 -:10A27000757B0000000000000000000000000000EE -:10A280000000000000000000000000000000DEAE42 -:10A29000615E03400000000000000231E0000000A9 -:10A2A000000000000C4000000000000002C07A86A0 -:10A2B000612603400000000000000230A000000002 -:10A2C000000000000C4000000000000002C0648696 -:10A2D000000060DE03400000000000000231E000EA +:10A24000000000000000000000000000DE2E000002 +:10A25000747B00000000000000000000000000000F +:10A260000000000000000000000000000000DE2EE2 +:10A27000747B0000000000000000000000000000EF +:10A280000000000000000000000000000000DE2EC2 +:10A29000615603400000000000000230A0000000F2 +:10A2A000000000000C4000000000000002C06A86B0 +:10A2B000615603400000000000000230A0000000D2 +:10A2C000000000000C4000000000000002C06A8690 +:10A2D000000061F603400000000000000231E000D1 :10A2E0000000000000000C4000000000000002C060 -:10A2F0007B06612603400000000000000230A00041 +:10A2F0006F8661F603400000000000000231E000BC :10A300000000000000000C4000000000000002C03F -:10A310006486200004020400200388052000C00396 -:10A32000C0002000200020002000840020002080A9 -:10A3300041004000208040852102C1000080C01102 -:10A3400041000400A00020002000840084004000A0 -:10A35000040800032000200004058409840204008E -:10A360008800C002A00001002080214004202000BD -:10A37000040804002000840088004003000004005A -:10A380000004040200020400A0000010000000000D -:10A390002000210041400900009009001000410008 -:10A3A000000000000900410000000400400211000C -:10A3B0001004200200004102800240010800000257 -:10A3C00000000804100005004000000041000000EB -:10A3D000C0C0054000000000004000820000404175 -:10A3E000004041401000410440A040024001800173 -:10A3F00000008000000200020090400200024000C5 -:10A400000000000080004000000200820000000206 -:10A4100000020002209000050002004040040208F3 -:10A42000000000000000000300040000A00021095B -:10A43000200020002140000408900883000400113F -:10A440000009001101000280000400050905001048 -:10A4500000000104820800000003001001890004CC -:10A4600000090002A0030004000000839005000022 -:10A470000000000400200008020400000005004065 -:10A480000080009000042010004000004000000008 -:10A490000040000000040800090420010082800040 -:10A4A00040040084409002880008051000820008E3 -:10A4B000A00891049188A0040000402000204008DA -:10A4C0000004008400004008090240820082C008A5 -:10A4D000090400000800410400000508048908027E -:10A4E0002005000000010008040800084040028424 -:10A4F00000080084400800010540408200000084FC -:10A50000008400100410001184820008008880C0BC -:10A51000000800840082020882040000004000104D -:10A52000000800000000000500210040000000407D -:10A5300000100040000500000008880200000440F0 -:10A540009021C00004000003001020400008844156 -:10A55000840310080008002000020000900220037D -:10A5600004108211000200100010000300210000FE -:10A5700000020000000400020808880900214008C9 -:10A5800004080000002100080008008000210010DD -:10A5900040100021840820404041200000000000BD -:10A5A000000000000000210000000000000000008A -:10A5B0000000100040000000000041000000048482 -:10A5C00088000084080408000008008241000000A0 -:10A5D0000000000000004000050000000000000036 -:10A5E0008000000100004108000840040000000253 -:10A5F0000000090000040000000000A0410000006D -:10A6000008004100000003000800000000200800CE -:10A610000000000000204100800800008000A00031 -:10A62000C040100010400000100082000000C02157 -:10A63000820002008200080000038200010008007E -:10A64000A040C040000082400000080001004021FE -:10A65000A000C003101108004004092102000000FE -:10A66000C04082418208C0118202828000098203B8 -:10A670000005880082000000080300000000084177 -:10A6800000000403200008000000000008008220F1 -:10A690000000000088408204001108C0A0100010D3 -:10A6A00000A00008100800A000A041000000000069 -:10A6B000008200080300410021401000048840008F -:10A6C0002082030800000082000041002100028275 -:10A6D000901000000000210011009000400088A0B0 -:10A6E000000000A0104003001008411140020000CB -:10A6F00000000088050000C0032010C0000000C05A -:10A7000080040090050004000008218221A00000C0 -:10A7100010C10000000000820000001020040000B2 -:10A7200000080000000004000041A00382000200B5 -:10A7300082038200000000080040880040002000E2 -:10A7400008108241048082080400040210050021E0 -:10A750000810080082028240840040000821821014 -:10A76000040000002000C04008020008084040200B -:10A77000900208000800C008000800000004000063 -:10A7800000110800000082000003004000110405D1 -:10A790000000080000004011822104040000842110 -:10A7A00000000000009000000000000000C0000059 +:10A310006F860000200000000000000020002000E8 +:10A3200020002000000020002000000000000000AD +:10A3300000000000200000000000000020000000DD +:10A34000000000000000000000000000000000000D +:10A3500000000002000000000000000000000000FB +:10A3600000000180000000000204400000000080A6 +:10A370000084002000000000000000000000000039 +:10A3800000008200000000002000000084000004A3 +:10A39000008800080000000000000000000000002D +:10A3A00000000000000000000000000000000000AD +:10A3B000000000000000000000000000000000009D +:10A3C000000000000000000000000000000000008D +:10A3D000000000000000000000000000000000007D +:10A3E0000000000010020000000000008004008453 +:10A3F000004000020001000000000000000000001A +:10A4000000000000000000000090000000000000BC +:10A4100040010005000100009040000010100809F4 +:10A420000000000000409000000000090000000053 +:10A4300000000000000000000000000000400000DC +:10A4400000000000004000000000000000000000CC +:10A45000000000000000000000008200000000007A +:10A46000000000000080000000000000020000006A +:10A4700001000100000040080005000802410082C0 +:10A480000000000000000000004100000000820009 +:10A490008405000400080000000000000000000027 +:10A4A0000010000000080008008800000000000004 +:10A4B0000000000000000000000000000000008814 +:10A4C000000000000008000800000000000000007C +:10A4D000000000000000000000000000000000007C +:10A4E0000000000000000002000800000000000062 +:10A4F000000040004000000080000000000100005B +:10A5000000030000000000000008000000000390AD +:10A51000000000000001000100C000000003000076 +:10A520000000000000000005000000000000000026 +:10A53000000000000000000000000000000000001B +:10A54000000000000000000000000000000000000B +:10A5500000000000000000000000000000000000FB +:10A5600000000000000000000000000000000000EB +:10A5700000000000004000100005900300000000F3 +:10A58000000040000021001000100005000200083B +:10A5900000000010010410000008900000000000FE +:10A5A00000000000000000040000000000000000A7 +:10A5B0000000000000820000000000000000000019 +:10A5C000000000000000000000000000000000008B +:10A5D000000000000000000000000000000000007B +:10A5E000000000000000000000000000000000006B +:10A5F0000000000000000982094000000000000087 +:10A600000000000080C00300000000A000840000E3 +:10A6100009000000002020838000000200200004C8 +:10A620000009001100000000000000000000000010 +:10A63000000000000000000000000000000000001A +:10A6400000000000000000000000080008000800F2 +:10A6500000000800080000000000820082000000E6 +:10A660008200000000000000400000000000000028 +:10A67000000000000010000002C000000100000007 +:10A680000000000000000000820000000000000048 +:10A69000000000400011020001090010020404083B +:10A6A000200420000004009000042000009000001E +:10A6B00000020000000200880000002000000000EE +:10A6C000000000000000000000000000000000008A +:10A6D000000000000000000000000000000000007A +:10A6E000000000000000000000088084000000005E +:10A6F00000840284000000840084800900A040A03F +:10A700000000000000000000414000000008004080 +:10A710000000004000001104000008880091C1847E +:10A720000991000000000000000800410000000046 +:10A730000000000000000000000000000000000019 +:10A7400000000000000000000041000000000000C8 +:10A7500000000000000000000000000000000000F9 +:10A7600000000000000008008200820000000800D5 +:10A770000000000000030000000000410200000093 +:10A780000000001000000008000801400000000068 +:10A7900000000000000000000008080000000000A9 +:10A7A0000000010000000000000000000010000098 :10A7B0000000000000000000000000000000000099 -:10A7C000000404880000C020050000880801000083 -:10A7D0000000100000880000000008028000000057 -:10A7E00000000002000040002101002000C0052000 -:10A7F00080A000000000001000A000001100000078 -:10A800000000000000000008000000000900110026 -:10A8100000002100000021000000000008020000EC -:10A82000000003000000824140000088000000009A -:10A8300000000000000004000000C0210000000033 -:10A840008200840040004008204185008211000001 -:10A8500040210002C021200808218404C005000016 -:10A8600004008202A021000040210800A00000088E -:10A87000822100400021C041C000000000050010FE -:10A8800000088400000400001021042108000005D5 -:10A890000800000000000008200000080805200053 -:10A8A00008000000002100030040400008022000D2 -:10A8B0000000000808882008410041004000000412 -:10A8C0000000000000A000000000000004000000E4 -:10A8D000000082A002410200001000000008418434 -:10A8E000000005C0408241A000000300828800C033 -:10A8F000008409C00001080000C00900080020C051 -:10A9000010100004200020000204000021000002BA -:10A910000510000000000200004000000300410498 -:10A920000384020011040000040000010000000084 +:10A7C0000000000000000000000000000000000089 +:10A7D0000000000000000000000000000000000079 +:10A7E0000000000000000000000000000000000069 +:10A7F00000000000000000000002000800008000CF +:10A800000000000000C00000000000084000000040 +:10A81000000000A0000000000088000040000300CD +:10A8200011000000200000000000000900000000EE +:10A8300000000000000000000000002000000000F8 +:10A840000000000000000000000000000000000008 +:10A8500000000000000000000000000000000000F8 +:10A8600000000000000000000000000000000000E8 +:10A8700000000000000000000010000000000002C6 +:10A88000001100A109900008000000210010002123 +:10A890000000000000000000000000802000000810 +:10A8A00001040080A0800200400041000800200058 +:10A8B0001102050240042004000000000000110005 +:10A8C0000000000000000000000000000000000088 +:10A8D0000000000000000000000000000000000078 +:10A8E0000000000000000000000000000000000068 +:10A8F000000800820000000000000084000000004A +:10A90000208500000040C00300000000000000009F +:10A91000000000000000000000820208000202089F +:10A9200000A008000008210409A0000000000000A9 :10A930000000000000000000000000000000000017 -:10A940000000000084000400000010A0000300408C -:10A9500084030408A000009104020000000090009D -:10A9600000000002001020400009000083210102C5 -:10A970000891080000000000200000000090001076 -:10A980000240040809100002002088400000000076 -:10A9900000000000080200A0008490880000000071 -:10A9A00000000000000104008800000020082111C0 +:10A940000000000000000000000000000000000007 +:10A9500000000000000000000000000000000000F7 +:10A9600000000000000000000000000000000000E7 +:10A97000000000000000000088000000000000004F +:10A98000000000008801010010001001000000001C +:10A990008400000000000000000000000000000033 +:10A9A0000000000000A101A088A0008800000000B5 :10A9B0000000000000000000000000000000000097 -:10A9C00000000000000004009100000011A000033E -:10A9D0000085000880418805000380820000000097 -:10A9E000000400001005038280820040000010086F -:10A9F00041A10220800500000500000000100900B0 -:10AA00000000008080009080000000000000000036 -:10AA10000000000000000080000002008000000034 -:10AA200000000000000000081000040900020800F7 -:10AA30000200050040A1000000000000000000002E -:10AA40000000000000000040000000030000028041 -:10AA500010038800888080000541809083000000FA -:10AA6000000080000000030003A108002082000015 -:10AA700008820900C010C041008002000900912135 -:10AA80001180008490A1A1210000000800808000B6 -:10AA9000000000000000000000000020800980800D -:10AAA0001000080010000400C10088009008831105 -:10AAB00000100000010001A10000000000000000E3 -:10AAC000000000000000000000010000000100C0C4 -:10AAD00090020200112004A040A09000A0A0090054 -:10AAE0000000000002000000001001C0000000A0F3 -:10AAF000000000402000A10010010004110000002F -:10AB0000080102104040A14105018800400090402A -:10AB1000080000000000000000002000A001A08448 -:10AB200010900100000000000100020003008500F9 -:10AB300005200001000001000101000000000000EC -:10AB40000000000000000000000000004000840041 -:10AB5000010020880440031110A0208201820040DF -:10AB60001020000000000100000008410102010463 -:10AB700010900000A020A100092100110000000099 -:10AB8000110100000400000300208201049000A0D5 -:10AB9000004020A00000000000000000C09000085D -:10ABA0000008C0200000000040000000000000007D -:10ABB000A10100000040001105024020000000003B -:10ABC00000000000000000000000000000048021E0 -:10ABD000000441098000009005A1A0A00903108095 -:10ABE0000508880400400000052010208010108512 -:10ABF00021831003000000C1901088210083000809 -:10AC000000410521101000400090000390028000D8 -:10AC10000080008000800000000000000000800034 -:10AC2000000000009100000000000000000000058E -:10AC300008118521040321001000080020400000B5 -:10AC400000000000000000000000000000000009FB -:10AC5000000000000000210009A0880090210200EF -:10AC60008000090080100000000000800000100932 -:10AC70008200A10090110000218008400900030417 -:10AC80000321210405000003058490910580034001 -:10AC900080088088000080000000000000000000A4 -:10ACA00000050041800080000080000000000010CE -:10ACB0004180030040000208010400000000000180 +:10A9C0000000000000000000000000000000000087 +:10A9D0000000000000000000000000000000000077 +:10A9E0000000000000000000000000000000000067 +:10A9F0000000000000000002001000100002000033 +:10AA00000900000000000010030900000008000019 +:10AA10002000850000000000000000000000000091 +:10AA200000000000000040C1092100090089000069 +:10AA30000000000000000000000000000000000016 +:10AA40000000000000000000000000000000000006 +:10AA500000000000000000000000000000000000F6 +:10AA600000000000000000000000000000000000E6 +:10AA7000000000000000000003002100030000218E +:10AA80000900200000000400900090004000C188F0 +:10AA900000000000000000000000000000000000B6 +:10AAA0000000000000000040400000031180000989 +:10AAB0000000000000000000000000000000000096 +:10AAC0000000000000000000000000000000000086 +:10AAD0000000000000000000000000000000000076 +:10AAE0000000000000000000000000000000000066 +:10AAF00000000000000000000000008801000000CD +:10AB00000001000000000000010089908300910016 +:10AB1000C19100000000000000840000000000005F +:10AB20000000008800000000000100400001010456 +:10AB30000085000000000000000000000000000090 +:10AB40000000000000000000000000000000000005 +:10AB500000000000000000000000000000000000F5 +:10AB600000000000000000000000000000000000E5 +:10AB700000000000000000000000000000010000D4 +:10AB8000000000000001000100010000004100057C +:10AB9000010901C1000000010001000100000000E6 +:10ABA000000000000000000000000000080000019C +:10ABB0000100C101000000000000000000000000D2 +:10ABC0000000000000000000000000000000000085 +:10ABD0000000000000000000000000000000000075 +:10ABE0000000000000000000000000000000000065 +:10ABF0000000000000000000000000000000002134 +:10AC000002110002001000100008002100090010CD +:10AC1000211021A108880002000400040041000066 +:10AC20000000000000000000000000000000804064 +:10AC300011030902114100000000000000000000A3 +:10AC40000000000000000000000000000000000004 +:10AC500000000000000000000000000000000000F4 +:10AC600000000000000000000000000000000000E4 +:10AC700000000000000000000000000000000000D4 +:10AC80004180400040000340000000000000001030 +:10AC90000002038021800902000000000000000083 +:10ACA0000000000000000000090010000400200067 +:10ACB000C10211204100200300000000000000003C :10ACC0000000000000000000000000000000000084 -:10ACD0000000000000000000A19090C103020500E8 -:10ACE00090000204880088000000000800080000AE -:10ACF00003102000850008000000010800890010F2 -:10AD000001010001000000000001100211100940C3 -:10AD100090001000A0098210100000000000000048 -:10AD200000002000A0858288020000400000000092 -:10AD3000000100A000880090010100000000000058 +:10ACD0000000000000000000000000000000000074 +:10ACE0000000000000000000000000000000000064 +:10ACF0000000000000000000000000000000000054 +:10AD000000000102000000000000008800000000B8 +:10AD10000000008201880110000000000000000017 +:10AD20000000000000000000000000000000010022 +:10AD30000000C1009100C0000201000000000000FE :10AD40000000000000000000000000000000000003 -:10AD50000000000000E000000041000000000700CB -:10AD600042000000000000000000000000000000A1 -:10AD7000000000000000000041000000000000E0B2 -:10AD8000000060060000000000000000000000005D -:10AD900000000000000000000700000000000000AC -:10ADA00000000000008100E00700880A00000000A9 +:10AD500000000000000000000000000000000000F3 +:10AD600000000000000000000000000000000000E3 +:10AD700000000000000000000000000000000000D3 +:10AD800000000000000000000000000000000000C3 +:10AD9000000000000000000007000000000000E0CC +:10ADA00000000000000000000000000000000000A3 :10ADB00000000000000000E00000000000000000B3 :10ADC0000000000000000000000000000000000083 -:10ADD00000000000000000000000000000003CFF38 -:10ADE000000000000000FF00FF0F3C3C00000000DE -:10ADF00000000000FF003030C3FFC3F0000000007F -:10AE000000003CA5815A000000000000000081C045 -:10AE1000FF0000FF00FF0018041CC7CF040C000057 -:10AE2000000000000000F0F0F0F020000000000042 -:10AE30000000000000000000000000000000000012 +:10ADD0000000000000000000000000000000000073 +:10ADE0000000000000000000000000000000000063 +:10ADF0000000000000000000000000000000000053 +:10AE00000000000000000000000000000000000042 +:10AE100000000000000000000000F0F00000000052 +:10AE20000000000000000000000000000000000022 +:10AE300000000000000000F04200000000000000E0 :10AE40000000000000000000000000000000000002 :10AE500000000000000000000000000000000000F2 -:10AE60003DFFFFFF0B029300FF00F6063C3C000095 -:10AE700000000000000000003030C3FFC3F00000FD -:10AE8000000000003C18DBBD0000000000000000D6 -:10AE9000BDC0FF000F0F0F0F0099069FC3CF000C1E -:10AEA0000000000000000000F8F9F8F000000000C9 -:10AEB0000000000000000000000000000000000092 +:10AE600000000000000000000000000000000000E2 +:10AE700000000000000000000000000000000000D2 +:10AE800000000000000000000000000000000000C2 +:10AE9000000000000000000000000000F9F91800A8 +:10AEA00000000000000000000000000000000000A2 +:10AEB000000000000000000000F0DB0000000000C7 :10AEC0000000000000000000000000000000000082 :10AED0000000000000000000000000000000000072 :10AEE0000000000000000000000000000000000062 @@ -125715,492 +125715,492 @@ :10AF30000000000000000000000000000000000011 :10AF40000000000000000000000000000000000001 :10AF500000000000000000000000000000000000F1 -:10AF6000000004DF04044F7F6F6F9090C0C0D3D007 -:10AF7000D3D3000000006600660024660F0F0000B7 -:10AF8000000000000000F00F66666666000000002A -:10AF900000000F0F667866993D25BDA5C300E1004E -:10AFA000838183C30000000000000000FFFFFFFF5B -:10AFB0009F9F9F8300000000000000000000000031 -:10AFC000CFE7CFE700000000000000000000000015 +:10AF600000000000000000000000000000000000E1 +:10AF700000000000000000000000000000000000D1 +:10AF800000000000000000000000000000000000C1 +:10AF900000000000000000000000000000000000B1 +:10AFA0007E7E033F00000000000000000000000063 +:10AFB0000000000000000000000000009F1E9F1E17 +:10AFC0000000000000000000000000000000000081 :10AFD0000000000000000000000000000000000071 -:10AFE0000000000004DF04DF0F0F0F0FF6F6FCFC7B -:10AFF000D3D0D3D300000000FF99FF99246600004E -:10B00000000000000000FFFFF00F060666000000D1 -:10B01000000000000F0F667866FF19019981F000AB -:10B02000F0009F999FFF000000000000000020003A -:10B03000B0009F9F9F9F00000000000000000000E4 -:10B0400000004E66CF6600610006000D00000000A3 -:10B05000000000000000000000000000000000618F -:10B060000007000D00000061000E000D00000061EF -:10B070004006000D000000610006000D00000061A8 -:10B080003006000D0000000000610005000900010D -:10B0900000610006000D000100613006000D000196 -:10B0A0000000000800000000000000000000000098 -:10B0B00000610037000D000000610006000D000077 -:10B0C00000610005000900004DC34D00FFFF000CAA +:10AFE0000000000000000000000000000000000061 +:10AFF0000000000000000000000000000000000051 +:10B000000000000000000000000000000000000040 +:10B010000000000000000000000000000000000030 +:10B0200000004242033F000000000000000000005A +:10B030000000000000000000000000000000061EEC +:10B040009F1E000000000000000000000000000043 +:10B0500000000000000000000000000000000000F0 +:10B0600000000000000000000000000000000000E0 +:10B0700000000000000000000000000000000000D0 +:10B0800000000000000000000000000000000000C0 +:10B0900000610006000D000000610006000D0000C8 +:10B0A00000610006009D000800610007000C000020 +:10B0B000000000000000000000610006000D00001C +:10B0C000A0010000000000000000000000000000DF :10B0D0000000000000000000000000000000000070 -:10B0E00000000000D70714040000FF70F000F0FF1C -:10B0F000F5F50505C3C3C3C300000000AAC3FFC321 -:10B100002828282815973DBF0000A080AF8F0CCFBE -:10B1100008CBF0FFAAFFA200AA0010D000C002F7DF -:10B12000C2C7000000000000000000000000000096 -:10B13000000000000000000000000000000000000F -:10B1400000000000FFFFFF0FFB0B4DFF4D3CFFF326 +:10B0E0000000000000000000000000000000000060 +:10B0F0000000000000000000000000000000000050 +:10B10000000000000000000000000000000000003F +:10B11000000000C00000050D0F0F000000000C3CF7 +:10B12000003C20A020A0F3F0F2F0000000003C0062 +:10B130000A0A0000000000000000FC5F0C5F000035 +:10B140000000AF05BEBEC3FFE8E80000000000003D :10B1500000000000000000000000000000000000EF -:10B16000000000000000FF0FFF0F0000FF70F00064 -:10B17000F0FFF5F505050000FF0000000000AAC380 -:10B18000FFC308280808018329AB0000AA82AA820D -:10B1900000FF00FF00000000A200A80030F020E047 -:10B1A00002F7C2C70000000000000000000000001D -:10B1B000000000000000000000000000000000008F -:10B1C000000000000C00CFFFFA0AFA0A000000FF9E -:10B1D0003EFE3EFE000000000000000000000000F7 -:10B1E000000000000000000000000000003C000023 -:10B1F000000010203F3F3F3FA0A0F5F500000000F9 -:10B200000000000000003C3C0A415F4100000000DB -:10B2100002035010505000000000000A00FA000025 -:10B220000000EBEB282800000000000000000000F8 +:10B1600000000000000000000000000000000000DF +:10B1700000000000000000000000000000000000CF +:10B1800000000000000000000000000000000000BF +:10B190000000000000C0AAAA050D0F0F000000006B +:10B1A000003C003C20002000F0F0F2F00000000025 +:10B1B0003C0F0A0A0000000000000000FCFF0CFF2A +:10B1C00000000000AF051414003CE8E80000000097 +:10B1D000000000000000000000000000000000006F +:10B1E000000000000000000000000000000000005F +:10B1F000000000000000000000000000000000004F +:10B20000000000000000000000000000000000003E +:10B2100000000000000000004000000000000000EE +:10B2200000001414F4F4000000000C0E00AA00004A :10B23000000000000000000000000000000000000E -:10B240000000EAE0EBE300008787FAFEFBFFFFFF68 -:10B2500000FF3CFC3FFF0000000000000000000079 -:10B260000000000000000000000000000000033F9C -:10B270000000000000003F3F3F17A0A0F5F5F0F0F0 -:10B28000F0F00000000000000C1C000000000000B6 -:10B29000FDFCFFFF55145555C3C3C3C3000A00FA94 -:10B2A00000000000FF00FF000000000000000000A0 +:10B24000000000000000553C0FFF28EB28EB000039 +:10B2500000000000000000000000000000000000EE +:10B2600000000000000000000000000000000000DE +:10B2700000000000000000000000000000000000CE +:10B2800000000000000000000000000000000000BE +:10B2900000000000000000000000400040004000EE +:10B2A000000000000000E0E000007D410C0C000008 :10B2B000000000000000000000000000000000008E -:10B2C000000000002A202B23FFFF87875054515590 -:10B2D0000200020302000203890088008400A0002B -:10B2E000A084848000042111010341020000C010E9 -:10B2F00040000800840040804000010002008802F5 -:10B30000C180880001000004C00220000000000885 -:10B310000003C003031002000004408041002084A9 -:10B32000210400028803400040020000400388110D -:10B3300000024182008400008884218040002000B7 -:10B34000208085842000A0840104080320000802D6 -:10B35000008484008500C1008400020010A010A0B9 -:10B3600041A04004000400858202020008000000A1 -:10B37000100010208000000204020000200200C023 -:10B380000084401040024002200040404100000084 -:10B3900005000000000008A090004140100420407B -:10B3A0004005200109C100004100C101000209005F -:10B3B000000204044010000300904010080200C086 -:10B3C00021000010201000000004200180004082B5 -:10B3D000809100020000000400100000020900003B -:10B3E00000410103020802000008880001008904EE -:10B3F00000100809000000400210080404040000C6 -:10B400000140044002000008840201020200000919 -:10B4100000800010000008410000000010400020E3 -:10B42000000000000005020484000010201008093C -:10B4300084000010C002000020082000200400004A -:10B4400000040000020009040002020400400000A1 -:10B45000080908040000090840082084408280840C -:10B460002004098440108988004000000284408440 -:10B47000408800838082000804104082008885088C -:10B4800005000400A1044008051041854009091089 -:10B490004108022002C000008008000809002008BE -:10B4A0004185000400080000058820840008898484 -:10B4B000801041040085091002848084A0008084EB -:10B4C00040820002058800082009000900090400E4 -:10B4D0000004808482080300C00500008802A021C7 -:10B4E000004002000000C0050021002100210003EF -:10B4F00000050008004090000821900520409008B9 -:10B500008441888000210000822102028808000016 -:10B510000008028004108840000090909040004095 -:10B52000010400A000000002000802059040000095 -:10B530000002080485050008C00490400005880842 -:10B54000004100000010900800002041000582200A -:10B55000C0101008001000088808100021A0410049 -:10B560000990000089840084008800000000418464 -:10B5700000000808090008A00300892000A021009D -:10B58000214000A00010090811000900020210006B -:10B5900003A021004120C10800880000081100001C -:10B5A00005000804110203084104000000840200A1 -:10B5B000030209C100090808000820894100084069 -:10B5C00000820200000800010000002011000200BB -:10B5D0000000104011000088082000044000009086 -:10B5E000008082000800C000080083400405C000FD -:10B5F000C0009082A0100000C04082000440820081 -:10B6000008000840820010400000C0000800C00090 -:10B6100082001000A000910010100005000004023C -:10B620001005A00482040841A091048420899000A0 -:10B63000A00500401084080008090000000008046C -:10B64000101008000084000008008421000410216C -:10B6500010000800C00010410000100890104100C8 -:10B66000000203020084009011A0418802000090B3 -:10B6700008820884004100820800210008080010A8 -:10B680004100000000841100050800000082001045 -:10B6900000820000414000000400210000C00000C2 -:10B6A000000108C0088400002100000221020002FD -:10B6B00010A00008048400020408000000880000B4 -:10B6C0000009000000000005410080A000A000006B -:10B6D000000002A00000088400000008100402011D -:10B6E0008200000508080800A002000002044008CB -:10B6F000A0020421000240400090000082080000E7 -:10B70000A000118882000110080000008210824011 -:10B71000000000008209884140408800002010801D -:10B720000000820484800480A083000002020004E0 -:10B73000050008084002A00200408200020010003C -:10B740001010820582000004000840110808102033 -:10B75000000000008410000300410200004082004D -:10B760000021040000100000000000000000800024 -:10B7700000000000000000000000000200000000C7 -:10B7800011000208021000A0088840000800000014 -:10B790000885000008A00000000005040000040166 -:10B7A0000802000008000302004010020000000030 -:10B7B0000004040008848801000011210008090029 -:10B7C000050840000090000002010000080400008D -:10B7D0000000200400004000000010000040038230 -:10B7E00011900984840000004000C1088308904142 -:10B7F0001005100808001008021008088241020015 -:10B8000004038400000310210000080082030840A4 -:10B810000800A00584000000A00000C101098241C9 -:10B8200040000500000021218200100200210008D4 -:10B83000040440C1000300C141400000400004086E -:10B840000008020801000011824100200410842138 -:10B8500000050000A02100000041000400002000BD -:10B8600000409108002100A0008221024000020057 -:10B870000000000000000000000080000000000048 -:10B88000000000020000080208000000008200889A -:10B8900080880000000000A0098411100010400002 -:10B8A000042089844000000008C0210005900000A9 -:10B8B0000084410003020004204040012000820077 -:10B8C000000800000000080005A0000000000000C3 -:10B8D0000000000000002000000000000000000048 -:10B8E00000A0008408040000201101821040900292 -:10B8F000C010002010C0080420A000200002020296 -:10B90000000000900001C10008A000A008100484FD -:10B910000300000200C090400001A0008801000167 -:10B9200011110111400184030000C121000310889E -:10B9300008218810000310201002102008A1A0A0E8 -:10B94000A02000A1A1201009002082010001030114 -:10B95000C00000A188090040088902A0A04108A0F9 -:10B9600000C000A0000000A000002002104080C124 -:10B970000088918000008000808000000800048022 -:10B980008080000000090008210000800300000002 -:10B990000000A0000080000080000040850000033F -:10B9A0000002C04021218010001000002010080477 -:10B9B00000838020000300A0020580842002888389 -:10B9C000099080400091831100030040110403217D -:10B9D0000809000808C000A000A000038241A103DC -:10B9E00009210009000011000080000041008221AF -:10B9F000C09021A180008021008080000040008351 -:10BA000000858000800085000021050300000005FE -:10BA1000808080008080000500108041A0000341EC -:10BA200003020021820004031100A1C100000800EC -:10BA30008210C120030040048510C08811A141007C -:10BA400008A1208304A1A0009041022185021020BA -:10BA50002100A020A0218000001180800000C000F3 -:10BA60000211C0C003808010000084A040002008A4 -:10BA700004A0090383050400200202C01002000193 -:10BA800000050010C0080240400010010000200026 -:10BA90000201A0A00800024082008889900108905D -:10BAA000840002412001A0C00801840809A100000F -:10BAB00010884001A000080090211000A010839180 -:10BAC0008810A0C010A1A0A108A04000C02108417A -:10BAD00001090400A001020110004000A0408800FC -:10BAE0000490C100A02009C040000000A0A00500F3 -:10BAF0000911001020031010880400900408401061 -:10BB0000C140A0020208C00200000002A091A008EB -:10BB10001008002000208840009000A0909000882D -:10BB200000000000A000000190030085000203A1B6 -:10BB30000000820800820111A0830809030901891D -:10BB40001088021000880083834100020041A10395 -:10BB50008990000911200041011040400000901020 -:10BB6000A010020401010200020100000000108880 -:10BB70000011A0A12108059082900380000380108D -:10BB8000001190100080001085400040008080214E -:10BB900080200040000500410820000000808080D7 -:10BBA00008000000204185100010000240034141C0 -:10BBB00090C000000082100021A1804080401082CF -:10BBC000032103110011210302A1A14000C11003B0 -:10BBD000A0A011840003891005A1040900800500BC -:10BBE00009808080802009108320800200020009E3 -:10BBF000800000040205A000A080C04080058000F5 -:10BC00008000000000008000800000000821412129 -:10BC10002000030280400000808000008208912103 -:10BC20000880400090001000800080000591000313 -:10BC3000C000020400000002210021004008A10011 -:10BC400090910800000000400010000080081020C3 -:10BC5000118889880510108803081000100300005F -:10BC6000000080008000880009218300800500809A -:10BC70000000000000000408838802021101100087 -:10BC80002040028888009000020002900800010114 -:10BC900000880090010108008202848482009101E2 -:10BCA00041089184890005882090020804008808D2 -:10BCB00020108288050000002010900801900101EA -:10BCC0009100A1C1100284000291109000080201AD -:10BCD000C189820582410000900590880110010110 -:10BCE000200082900220040041A040918202A00026 -:10BCF000884000100002000000000000000000006A -:10BD00000000000000004182000000E0000042410D +:10B2C0000000000000000000553C0F0028EB28EBB8 +:10B2D00000900080000000800000040000000000DA +:10B2E0000000000000000000000000050000000059 +:10B2F000000000000000000000002000000000002E +:10B30000000000000000000000000000000000003D +:10B31000000300000000000000000000200000000A +:10B320000100000000000000000000000000000319 +:10B33000000000000000000000000010000000807D +:10B3400002080000000000000000A0000200000849 +:10B350000040000900020000000200008000000020 +:10B36000000040000000000000000000000000009D +:10B3700000000000000000000000000000000000CD +:10B38000000040000000000000000000000000007D +:10B3900000000000000000000000000000000000AD +:10B3A0000002020040000000000000000000000059 +:10B3B00000000200000000002100008200000000E8 +:10B3C00021082102000000000000000040000000F1 +:10B3D000210121C1080082400940000000008200D4 +:10B3E000824182048200000082008200000000008E +:10B3F000020000000000000000000000000000004B +:10B40000001000000000000000000000000001002B +:10B410000000000000000000090000000000000023 +:10B420000000020000000100010000000000000018 +:10B4300000000800080000000000400002000008B2 +:10B44000400008000941000000000000000000006A +:10B450000004000000110000000084000000000053 +:10B4600000000000000100000000000000000000DB +:10B470000084000000000000000000000000000048 +:10B4800000000000000000000000000000000000BC +:10B4900040000000000000000000C00000000000AC +:10B4A00000000008800000004000080000000000CC +:10B4B00000000000800080000000410080000000CB +:10B4C000004082088000C04000000008004000905A +:10B4D000039000910090110040030103000200005E +:10B4E00000002004004100000000000000000000F7 +:10B4F000000000210000000000000000000000002B +:10B500000000000800000000000000000000000033 +:10B51000000000000000000000000000000000002B +:10B52000002100080100000000410003004100412B +:10B5300000210000000800080000000800000000D2 +:10B54000002100008802000000000003A0000000AD +:10B550000041000040800000000080000400000165 +:10B5600000000000000100000000000000000000DA +:10B5700000000000000000000000000000000000CB +:10B5800000000000000000000000000000000000BB +:10B5900000000000000000000000000000000000AB +:10B5A0000000000000012000000000000010000862 +:10B5B00000000010000003A0000000C0000000C058 +:10B5C00000840000000000010000000040000000B6 +:10B5D0004000000020200004000000000040008423 +:10B5E000000000000000002000110000000000002A +:10B5F000000000000000000000000000000000004B +:10B60000000000000000000000000000000000003A +:10B6100000000000000000000000400000000000EA +:10B620000000000000000800020000000000000010 +:10B63000000000000000000000000000000000000A +:10B640000000004000000000000000000010C000EA +:10B65000000000410010000220824009108820C133 +:10B66000001040C0000000C00003008811C00000AE +:10B670000000008800000000000000000000000042 +:10B68000004000000000000000000000000000007A +:10B69000000000000000000000000000800000002A +:10B6A000000000000000000080008000000000009A +:10B6B00000C00000008800A00300008800000040D7 +:10B6C0000000000000000000000000002100400019 +:10B6D00000080000000000850001800580828009CC +:10B6E0000000000200000020000504040000000427 +:10B6F0000000004100000000000000000000000009 +:10B700000000000000000000000000000000000039 +:10B710000000000000000000000000000000000029 +:10B7200000000005000000004002200000000000B2 +:10B7300000020005000000410008000000000008B1 +:10B7400000410021840002000021000008000008E0 +:10B75000000500000000400000000000058000001F +:10B760004002000000000000000100008001000015 +:10B7700000010000000000000000000000000000C8 +:10B7800000000000000000000000000000000000B9 +:10B7900000000000000000000000000000000000A9 +:10B7A0000000000000020000000080008000000097 +:10B7B000000000080000008400C011000982204041 +:10B7C00000000502000000000000000000C00000B2 +:10B7D000000000004000000000880000000020047D +:10B7E000000080C0822001A0002000040009001198 +:10B7F000000401A000200002000000000000000082 +:10B800000000000000000000000000000000000038 +:10B810000000000000000000000000000000000028 +:10B8200000000000000088210021002108000041E4 +:10B8300000000004208800030041000200100008FE +:10B8400000080040004100000000404100080000E6 +:10B850004000004100000000011000000041000015 +:10B8600020080082900920050441008941880002D7 +:10B8700000A009C00421002000000000000000001A +:10B8800000000000000000000000000000000000B8 +:10B8900000000000000000000000000000000000A8 +:10B8A0000000000000000000000000000000800018 +:10B8B000000800000001801100000000000900A144 +:10B8C000400000880000008400000000400000A04C +:10B8D0000000C1000000400000000285090800C00F +:10B8E00000C0800800030088022101418810840004 +:10B8F00000A085032005048900000000000000006E +:10B900000000000000000000000000000000000037 +:10B910000000000000000000000000000000000027 +:10B92000000000000800000000000888000002007D +:10B93000000208C1000802A00004000000910008F5 +:10B9400004020000000000001000000000000000E1 +:10B950000000110100001000C00100A00004000858 +:10B9600000020009A109830900098010029000402B +:10B9700000400084410200030010000000000000AD +:10B9800000000000000000000000000000000000B7 +:10B9900000000000000000000000000000000000A7 +:10B9A0000000000000008000000000008000000097 +:10B9B0000000000080C100910491001000020010FE +:10B9C0000080800200000000000000000000000075 +:10B9D000000000004041202100048002008000009F +:10B9E00000800000004103208240008920002003E5 +:10B9F0000304C19141800202A08480040000000081 +:10BA00000000000000000000000000000000000036 +:10BA10000000000000000000000000000000000026 +:10BA200000000000090000001100102100000900C2 +:10BA3000110089001021C10010080503410508808C +:10BA40002100840004090000000080000000400084 +:10BA5000200020000800008000000000000000001E +:10BA600000090000800009000940090008A0011039 +:10BA70004184001111C09008C101A08590C0000050 +:10BA800000000000000000000000000000000000B6 +:10BA900000000000000000000000000000000000A6 +:10BAA0000000000000000002000000000001000093 +:10BAB00002001000A00000010804110111C085401F +:10BAC00001C0C100A00088000200A0001000C0005A +:10BAD0000100000000000100020220000000100030 +:10BAE0000000040000C0C0000010000300880189AD +:10BAF0009008008905A000C00804018300A1A1C12D +:10BB00000000000000000000000000000000000035 +:10BB10000000000000000000000000000000000025 +:10BB20000000000000000000000000000001000014 +:10BB30000000040200820011A0900410012010886F +:10BB40001184001000C001A0A010001000A0000887 +:10BB5000002000000000000000000000002101049F +:10BB60000008040000000000C000C000410188007F +:10BB7000020184882083214009C080051120112101 +:10BB80004011000000000000000000000000000064 +:10BB900000000000000000000000000000000000A5 +:10BBA000000000000000000000000011000900215A +:10BBB0000004000000100082002189108080218094 +:10BBC0000990890900800000210080800080000029 +:10BBD00000800000000000000000000000000008DD +:10BBE0000985008900000000000000000003911199 +:10BBF00084008940888040202180020521028280C3 +:10BC0000200088410000000000000000000000004B +:10BC10000000000000000000000000000000000024 +:10BC20000000000000000000000000000000100004 +:10BC30000000081000000800100000000200C1848D +:10BC400082A01080031009004000030000000000E3 +:10BC50000000000000000080000000000011211022 +:10BC600009802080080000200080000000004104BE +:10BC700084002100001191048890A1902100050505 +:10BC80000882919003010000000000000000000005 +:10BC900000000000000000000000000000000000A4 +:10BCA0000000000000000000000000000000000292 +:10BCB000000000000100000001020002000200007C +:10BCC000C140A0828840210000C00104000400009F +:10BCD00000000090002000000010000000000000A4 +:10BCE0000101002000040100C001022010A0880012 +:10BCF000918983000900080000420000070000123B +:10BD0000818100E00700500A0000000000000000F0 :10BD10000000000000000000000000000000000023 -:10BD2000880000E00700000A00000000000000009A -:10BD3000000000000700000A0000000000000000F2 -:10BD40000000000000E007008800000000E00000A4 -:10BD50008400000000E000000000000000E000009F -:10BD600000000000000000000000000000E00000F3 -:10BD7000008100000000000000007272B1B14EE4CA -:10BD800041EBF0AA0FAAE7E8242BC6FA36F506F92C -:10BD900006F90000000000000FF03C103C304B4B57 -:10BDA000C3C34054EAFE80FDC3FF00000000000052 -:10BDB000000000004300AAC0AACF0000000000005D -:10BDC000F0EBF0EB1030DFFFBFBFBFFFBEBEFFBE2A -:10BDD000000028A0FFA5A5F0FF330033000000FFFE -:10BDE0000008002855105555000000008280000012 -:10BDF000282828280000AAAA00FF000028D7EB1452 -:10BE0000E44E14BE3C66C36618E8DB2B360AC60552 -:10BE10003A3AC5C500000000FFFF0FF03C103C009F -:10BE20005F0AD7820014EBFF80FD003C0100000098 -:10BE300000000000C3C3C3C3AAAAAAAA0000FF004F -:10BE40000000FAAA50AA0030CFFFBABABAAABEBE02 -:10BE5000AABE820AAAAA0F0A5A05FF3300330000BD -:10BE600000FF00280008000000003CFF3C3C8280EE -:10BE7000FFF0282828280000AAAA00FF00000C567E -:10BE8000A6FC7E7E8E713CAA66F01EDDEE2D142788 -:10BE9000D7E40000FFFFAA00AA00852685262030EF -:10BEA00000100F050D0D3C0F3C0FFFDF005D000083 -:10BEB0000000C3C3AAAA82D7C3C30040FFBE0000CC -:10BEC000F200F0000D0F010F0002A8A8FF00CF0C38 -:10BED000FFEF1F0F7DC37DC02A007A0001410BEBED -:10BEE000000000000500000028280008D0FF000026 -:10BEF00057007F00FFF800000F0F0000AAFF82C369 -:10BF0000FCA6560C4242B24D3C55660F22E1D211BE -:10BF1000E4D72714FFFFFFFFAA00AA00A79BA79B57 -:10BF2000AAFF00550F0F0F0F3C0F3C0FFF8A0008B0 -:10BF30000000000000FFF0F000FF41EBF0F0000017 -:10BF40000000FA00F000000F000F000AA0A05555F5 -:10BF50005555FFFF0F0F7D037D002A007A000FFF6C -:10BF60000FFF0000000000000000FFFF000F50FF67 -:10BF70000000FF00FF00FF0000000F0F0000AAFFFD -:10BF8000AAFF40618006002D100240618006002D4E -:10BF9000100240618007002D020000610006001DB4 -:10BFA000000000610006000D00010061400CC00DA2 -:10BFB000000000610006000D000000610006000D99 -:10BFC0000000000080610006000D00000061000715 -:10BFD000000D00000061300700190001006100023F -:10BFE0000009000080610007000D000100610006EB -:10BFF000000D000000610003000100010061000667 -:10C00000000D000028202820000002000000000091 -:10C01000A0F5A0A000000000C3C3FFFFC202C3C37D -:10C0200000FFC3C300000000FFFFFFFFFF70FF30F1 -:10C0300000000000FFFFFFAA5AA005F0F3F3FAFA90 -:10C040000000FFF20000B4A0B4A000003C3C0A00D5 -:10C05000000064B8FB4400000000FFFF7FFF309247 -:10C060003030F041F0C3040000000000002A00005E -:10C07000000000000000A0AFF0FF3F3F2F2F0000A6 -:10C08000000000003C3CAAA02820020002000000A2 -:10C090000000A0F5A0A00000000000C33CFFFA0AC9 -:10C0A000FFFF00FFC3C300000000FEFFFFFFBF3023 -:10C0B000BF3000000000FFFF00AAF55A5FF03030EB -:10C0C00050500000FFF70000B4A0B4A0FFAAFFAAE0 -:10C0D000AA00000064B8FB44AAAAAAAA55FF55FF0B -:10C0E000309230C3F0F0F0F0000000000000008A51 -:10C0F0000000000000000000A0AFF0FF3F3F0F2F46 -:10C10000000000000000F0F00404000A50000000ED -:10C11000000000000000000000000000000000001F -:10C1200000F000F0F5F5A0A0000000000000000005 -:10C1300000000000000000000C0C05050C300C3065 -:10C14000FF3C7D7D00F000F0000014040404CFCF1C -:10C150005F5080D0F0F0CFF30C3004FE343E0E0E72 -:10C160000F0FCBDF081C000000000F040F0FF5C1FC -:10C17000C1F50D0F0F0F000000003CFF3C3CFFFF1E -:10C1800000FF000000000000FF000005080850400C -:10C19000000000000000000000000000000000009F -:10C1A000000000F000F0F5F5A0A000000000000085 -:10C1B000000000000000000000000F0F0F0FCFF381 -:10C1C000CFF3FCFCFCFC28283C3C00003C3C3C3C05 -:10C1D000C0C05F5082D7FFFFCFF30C3004FE04FED7 -:10C1E0000F0F0F00FFFF0000550FBEFC0000000006 -:10C1F0005F43435F0C0F0F0F00000000F5FFF5F5E4 -:10C20000FFFF00E300000000FFFFFF0088100404B0 -:10C2100040002084C000200088092009040904107F -:10C220008800840904054105200003000803889064 -:10C230000303C10302100404200004048504A000C9 -:10C2400021088904C0908900890085030003000546 -:10C25000201000102000002020004008A090400086 -:10C2600088002000001088904000400088041011D1 -:10C27000040000008800C000040920002000C00461 -:10C2800020000000C003A000000000050000000026 -:10C2900000028002050205002100000009002000C4 -:10C2A000050200002000000040000000C000A000C7 -:10C2B0002002408208820940A00041A000402001E5 -:10C2C0004182200040004004204020002000000067 -:10C2D00000A0058221000882218940000002002080 -:10C2E000201000404120040110110090009008002F -:10C2F00041840000000000C0002000C00002004097 -:10C30000000041900002000400400000000005020F -:10C3100000050004400440008404000500040010EF -:10C32000080300000040000490041141000088044C -:10C33000004000000200020402000409040008009A -:10C34000000002040005200000042104890402000A -:10C350000000004100000000040900030000040484 -:10C3600000208200000804000010000000000010FF -:10C37000041008110000022000000808200000003E -:10C38000A0090000000000090805404082001010CC -:10C3900040C100840010808880000984000420844B -:10C3A0000004000800080582091021822084098405 -:10C3B000200900844108418405840308858400081D -:10C3C000008802084083000402080201A0C0201176 -:10C3D0000484000004080084000840080408008861 -:10C3E0000510040100080484029000080082001077 -:10C3F000000020820210000000080008004002082F -:10C4000040080008050800881184820880840082A2 -:10C4100000C08410900800050002400800100008C9 -:10C420000003020000030040002100218410880264 -:10C43000000890410100022100089108844104088D -:10C440000021042108100808820300100008402180 -:10C450000221824000000805004182410040004066 -:10C46000820882419121884100040000902103410B -:10C470002000000300040010200590410002880203 -:10C480000000881088210005A00310200010104033 -:10C4900000109000002100900908000110820200A5 -:10C4A00021A0000800A00082000000100508411033 -:10C4B000030010100300080890820040401005900F -:10C4C000A1200384C0001000030041000000080008 -:10C4D0000340401008A00000218200820900009063 -:10C4E00005A00410080040C02102080540C00882D1 -:10C4F0000808400804080401090808A0219040A188 -:10C5000040A040884004000400100000088800207B -:10C5100008000000030000080840820010008200AC -:10C520001000820010009000820008030800400004 -:10C530004002A00440002004A00040040802900033 -:10C54000C02005800821092082002010410000053C -:10C550009004C00008001180000000210400C00009 -:10C5600000000811000000C1088000200000400900 -:10C570008400000500004008820400000004000060 -:10C580000080000000008200822008031000C0002C -:10C590004004000408A18200401000000890040834 -:10C5A000090405C0000040000008211000841008A4 -:10C5B0000000820100012108800100002100081014 -:10C5C000004004A004208410048500A08000A00086 -:10C5D00004900001084080002004000000A000003A -:10C5E0000884418200C00000000200024010008860 -:10C5F00000C0008840000000000820A000820090D9 -:10C6000021A0000200002100000000000400211011 -:10C610000500908441844010100008000040000094 -:10C6200000210000000000000008000010001021A0 -:10C6300000001000002100800000C04000000480C5 -:10C640000000A00008090504000008820400400062 -:10C65000840000100400000808108503000040401A -:10C66000082110038802C041000204200088000352 -:10C67000C0008400C0028200200000030008000007 -:10C68000902100000000000008000000A00310003E -:10C6900084000008000000110000080000051000E0 -:10C6A0001100080800000308000800001090210095 -:10C6B0000000400020000300101008080040002087 -:10C6C000001000000820100484901088112105003B -:10C6D0001184050008A003082110020008080000CA -:10C6E000210590882100210108C040850000030237 -:10C6F000400405020310009008400084000800C0B8 -:10C7000004001008048803884190020000020520FC -:10C710001120400800000500000000080408001077 -:10C72000004190410000001008410041000000005D -:10C730008400820002000000080040100400042170 -:10C7400000400400A004008000038200A0201085A7 -:10C750001100820020100003820008218421C010F3 -:10C760000000842100110002000990044000822191 -:10C77000000400090011A0080002001008100821A0 -:10C7800002000002022100410809000008211000F7 -:10C790002000000000000000000000080209000066 -:10C7A0000810000020000000200100000000000030 -:10C7B000000020100000000000840000020000843F -:10C7C00000000000008200000002000000004100A4 -:10C7D000002020000020000000A00300000400A0B2 -:10C7E0000000000020A0030420010004000000005D -:10C7F00000040000000000000000000100410001F2 -:10C8000011000340000000000400000000000200CE -:10C81000110020004100000000002104000004007D -:10C820002040410000000000000000000000000067 -:10C8300000000000000000000000000000000000F8 -:10C840008800000510A110008201080101A00090DD -:10C85000200090904021058340A1020908A104080E -:10C860000409020000000004000220A0C02002A170 -:10C8700001C08810020500000000000000000190C7 -:10C88000C088040200820000000084000000000054 -:10C890000000000000000000010008000000A000EF -:10C8A0009121028882820000000000000000000048 -:10C8B0000000000000000000000000000000000870 -:10C8C00008000203000800A080050005800208801F -:10C8D000218000008080A01082C089830090C01059 -:10C8E00003A18208000900000980210000800000E7 -:10C8F00080082011008080402004002102200003D5 -:10C9000010002100898000800000040080000000E9 -:10C910000000000000000000000010000000000007 -:10C920008000030800118002900010000200100037 -:10C9300000000000000000000000000000000000F7 -:10C9400005800000080000080200004084009121DA -:10C950008000001180C08080200008A105A0A140B7 -:10C9600084000309A00020210000400220004000B4 -:10C9700021000000A0408800208800000000800006 -:10C980000008080020000300030000000000000071 -:10C990000080000000000000000080008000000017 -:10C9A00080000000801100218000090088009000B4 -:10C9B000C0000000000000000000000000000000B7 -:10C9C0000000000800000100000008209001A0C045 -:10C9D00082A1A0000001A08590901108021090A0F3 -:10C9E00005110210A1020908A0400000000001008A -:10C9F0000100010020908201A088049190100200A3 -:10CA0000080000010100000000000100000000001B -:10CA10000000000400000000000000000800080002 -:10CA2000840008000800400010018240000000005F -:10CA300000010001000000000000000000000000F4 -:10CA400000000000000000010001C10100400110D1 -:10CA5000A120A0040000000000010003C00001119B -:10CA60000003A01100400090008301A10000C0A0BD -:10CA700000200482A008040400900009008800003F -:10CA80000000000000000301000000010800000099 -:10CA90000000400000010000000000000000000154 -:10CAA000000000000001008801110111A001000533 -:10CAB0000000002100400000000000000000000015 -:10CAC00000000000000000200003002108030041D6 -:10CAD00002838510C0100040001000050988001175 -:10CAE00010090803808900201121118409C0000069 -:10CAF00080030005800002808003400310210000B5 -:10CB00000000210821000010900400100021800383 -:10CB100000410005000300030000000000000000C9 -:10CB200000100005000500040004402040858940F5 -:10CB300000800000008000020000000000000000F3 -:10CB400000000000000000002100081003000003A6 -:10CB5000A1201000C1009000000080000000000033 -:10CB60002020C00203808440808508100480214179 -:10CB700000000080000000000040A1091090A1808A -:10CB80008900210909050380030000000008000056 -:10CB90000003000000090000000000000000000089 -:10CBA000000000110080000000000009000000806B -:10CBB0000000000200C000C00000000000000000F3 -:10CBC0000000000000000000000001000101010061 -:10CBD0000001090041880808030084000200C00029 -:10CBE0000000C18489401040090010022190C084D7 -:10CBF000410100000040000000000000910083207F -:10CC000083088800010000000120000002100001DC -:10CC10001000020100000000000000000000000001 -:10CC200000000000000000200004000000000008D8 -:10CC30000440A000000000000000000A0000000006 -:10CC4000000000000000000000000000000000E004 -:10CC500000000000000000000000000000110000C3 -:10CC600007000000000000E000000000000000E0FD -:10CC7000000000110000000000000000840000001F -:10CC8000000007000000000000E0000000000000BD -:10CC900000E00000000000000000000000000000B4 -:10CCA0000000000000000000000000000000000084 -:10CCB0000000000000000000000000000000000074 -:10CCC0000000000000000000000000000000000064 -:10CCD000000000000000FFFEC3C262626066F6FF53 -:10CCE000F6F60000000009FF01FFF6F6FFF6F6F683 -:10CCF000F6F481800000000000000000CF0F0F0F4D -:10CD00009FDB0642FCC0FCC00000000000000000E9 -:10CD1000F3F33030000000000000000000000000CD -:10CD20000000000000000000000000000000000003 -:10CD30000303030303F303F30000000000000000FB -:10CD400000000000000000000000000000000000E3 -:10CD50000000000000000000FF7EC3426666020281 -:10CD6000F0F0F0F0FFFF000000000000F6F69999E7 -:10CD7000F6F6F6F699901810000000000000FFFF8C -:10CD8000FFFFFFFF0000E7E7242400000000000091 -:10CD90000000F3F33030000000000000000000004D -:10CDA0000000000000000000000000000000000083 -:10CDB00000003F3F3F3FF6F6F6F60000000000009F +:10BD20000000000000000000000000000000000013 +:10BD30000000000000000000000000000000000003 +:10BD40000000000000E00000000000000000000013 +:10BD50005000000000000000000000000000000093 +:10BD60000000000000E00000008200000000000071 +:10BD70000000810000E000000000535353000B0B53 +:10BD80002828AEBEAEBEF0FCF0F0000000000000BF +:10BD900000000000000000000000000000000000A3 +:10BDA0000000000000000000000000000000000093 +:10BDB0000000000000000000000000000000000083 +:10BDC000007082F20000C3C3101010BA000000001F +:10BDD000003FC0FF00000000030F00000000000053 +:10BDE00000000000000000000A000F000202000234 +:10BDF000000000003CAA3CAA00000000FFFFFF007A +:10BE00000F0B00280C3C0CBE0000000000000000DE +:10BE10000000000000000000000000000000000022 +:10BE20000000000000000000000000000000000012 +:10BE30000000000000000000000000000000000002 +:10BE40000000007082F2A0AF0000101010BA0000D5 +:10BE500000000000C0C000000000000C0000000056 +:10BE6000000000000000000000000A000000AAAA74 +:10BE7000AAAA00000000F000F0FF0000000000008F +:10BE8000FF0FAAAA0A0AFFFF0000C302C3000000B6 +:10BE900000000000000000000000000000000000A2 +:10BEA0000000000000000000000000000000000092 +:10BEB0000000000000000000000000000000000082 +:10BEC00000007D7D0F080F084F0F280080A8A8A84C +:10BED000004D004DFF0000000000000000000000C9 +:10BEE0000000000000000000000000000000000052 +:10BEF00000FF00FF0F0F0A0A7D417D410000000096 +:10BF00000000000000000000BFFF0000C3C3C3002A +:10BF10000000000000000000000000000000000021 +:10BF20000000000000000000000000000000000011 +:10BF30000000000000000000000000000000000001 +:10BF40000000000041410F000F000000280000A881 +:10BF5000A8A8004D004DFFA0000000000000A08038 +:10BF600020000000000000000000000000007070D1 +:10BF70004040AEAE828200000A0A3F3F0303000049 +:10BF8000000005610A3E059D00A100610034C00962 +:10BF900000000000000000000000000000000000A1 +:10BFA0000000000000000000000000000000000091 +:10BFB0000000000000000000000000610006000D0D +:10BFC0000000000000610006000D0000A00050010C +:10BFD0000001000100610006000D000000000000EB +:10BFE0000000000000610006000D000000210006B6 +:10BFF000000D000000000000000000050061300797 +:10C00000C00D0000E0EBE0E0AA0A8202FFFF0000A2 +:10C0100000C343C300000000000000000000000057 +:10C020000000000000000000000000000000000010 +:10C0300000000000000000000000000000BE00BE84 +:10C040000000FF0400000000FFC3083C003CF505B1 +:10C050003F3FAA00AAFFFAFAFAFA00000000000027 +:10C060000000000000000000000000000000058744 +:10C070002DAF000000000000000000000000505044 +:10C080000F0020207070EBEBE0E0FFFFC3C3F7FF71 +:10C09000000000C303C30000000000000000000017 +:10C0A0000000000000000000000000000000000090 +:10C0B000000000000000000000000000000000146C +:10C0C00000140000FF04000000003C00083C003C9D +:10C0D000F5053030AA00AAFF00FAFFFA00000000C0 +:10C0E0000000000000000000000000000000000050 +:10C0F00005872DAFF000AA0000000000000000003E +:10C1000055550F002C2C7C7CE000EB0000D75050E4 +:10C110005F5F5F55383038300000000000000000DD +:10C12000000000000000000000000000000000000F +:10C1300000000000000000000000000000000000FF +:10C1400000000000FF7D0041000000000000000032 +:10C1500000FF3F3FD71400FF3C3C00FF00C30C0C26 +:10C160000C3C000000000000000000000000020085 +:10C170000200000FFFC300000000000000000000EC +:10C180000000D787AAFF00000000EBEBEBEBD7D74E +:10C1900050504F414F41303030300000000000001F +:10C1A000000000000000000000000000000000008F +:10C1B000000000000000000000000000000000007F +:10C1C000000000000000FF7DFF7D00000000000077 +:10C1D000303030F30303D714F0F0AAAA003C00007B +:10C1E0000C0C0C0C0000000000000000000000001F +:10C1F00000000300F0FF3C00000000000000000011 +:10C20000000000000005AAFFFFFF10FF0000000073 +:10C21000000000000000000000000000000000001E +:10C220000000880000000000000000000000000086 +:10C2300000000000000000000000000000000000FE +:10C2400000002000000000000000000000030000CB +:10C250000000000000000000000000000400880052 +:10C260000000000020000000880000000000848022 +:10C27000008000040088000990C000200000000039 +:10C2800008000000C10200000000000000000000E3 +:10C29000000000000000000000000000000000009E +:10C2A000000000000000000000000000000000008E +:10C2B000000000000000000000000000000000007E +:10C2C000000000000000000000000000000000006E +:10C2D00000000000000000000000000000008000DE +:10C2E0000000008400000000008400000000000046 +:10C2F00000080008000100050000412100010000C5 +:10C300000000C100410440C1000000000000000224 +:10C310000000010000900000000088009000000074 +:10C3200000000000000000100000000000000010ED +:10C3300000000000000000000000000000000000FD +:10C3400002000000000000000000000000000000EB +:10C3500000000000000000000100010001000000DA +:10C3600000000100010040009000000000000300F8 +:10C370004000400000000000000004000400000035 +:10C380000000000008000000400000000000010064 +:10C390000000000020000010000000000000000865 +:10C3A000000000400000000000000000000000004D +:10C3B000000800000000000000000000000000086D +:10C3C000000000000000000000000000000000006D +:10C3D000000800000000000000000400400004000D +:10C3E0000008000040004000800000000000000045 +:10C3F00008008008880000000000000000400008DD +:10C400000008000000008000000080000008000418 +:10C4100002000088000000000090000000050005F8 +:10C42000900000000000000000000000000000413B +:10C4300000000000000000000000000000000000FC +:10C4400000000000000000000000000000000000EC +:10C4500000000000000000000000000000000008D4 +:10C4600000000000000000000000000001020000C9 +:10C47000000000000000001000040008002100205F +:10C4800000100010008000000008020002110000EF +:10C490000000000000022100000003110020000045 +:10C4A00000A000000000008200000000000000006A +:10C4B000000000000000000000000000000000007C +:10C4C000000000000000000000000000000000006C +:10C4D0000000000000000000000000842084000232 +:10C4E0004182000800C0001000100010001040A1A0 +:10C4F00000000300410000000008410100840384A3 +:10C5000000010000000000200000001080C080003A +:10C51000090008000010001000040091001088417C +:10C5200000200000000900A0000000000000000042 +:10C5300000000000000000000000000000000000FB +:10C5400000000000000000000000000000000000EB +:10C5500000000000000000000000040000000000D7 +:10C56000004000002000010000000000000000006A +:10C57000C00000000000000200100080C000C000E9 +:10C580000000000000000000000000000089000022 +:10C5900008000005000400050004400200040041FA +:10C5A00000900091000000C0002100000000000089 +:10C5B000000000000000000000000000000000007B +:10C5C000000000000000000000000000000000006B +:10C5D00000000000000000000000000080000000DB +:10C5E000000000000000C100040000000000000086 +:10C5F00000000000000000000001004100080000F1 +:10C6000000000000000000000000000008000040E2 +:10C6100020000200008200C00090099001002080EC +:10C6200000800180000008000020010000000000E0 +:10C6300000000000000000000000000800000000F2 +:10C6400000000000000000000000000000000000EA +:10C6500000000000000000000000000000000000DA +:10C660000400040004000400208000000000C0005A +:10C6700000000000401000088221C000C00000003F +:10C680000008000400800102020000800000000297 +:10C690009000000800880000002100400000080011 +:10C6A000C110001020100084800021010200000051 +:10C6B000000000000000000000000000000000007A +:10C6C000000000000000000000000000000000006A +:10C6D00000000000000000A00000000000000000BA +:10C6E00000008084A0008000A0828004000000C0C0 +:10C6F0004100000000008010000003000000410025 +:10C7000000000001000100040288800000200008F1 +:10C71000001000000000000209100008009100A0B5 +:10C72000000900000211210000400010002000203C +:10C7300000030011000000020000000000000000E3 +:10C7400000000000000000000000000000000000E9 +:10C7500000000000000000000000000000000000D9 +:10C76000000000000400000000000141000400413E +:10C77000000000000041000400002000000800212B +:10C780000000001100210000000000030000004034 +:10C7900008400000000000080000001002410010E6 +:10C7A0000000000000000084A088000000010001DB +:10C7B0000000000000000000000000000000000079 +:10C7C0000000000000000000000000000000000069 +:10C7D0000000000000000000000000000000000059 +:10C7E00000000000000080000000000004000001C4 +:10C7F0000000000000000000000000000000000039 +:10C80000000000000008008200000000001000008E +:10C8100000010083000000000040000009C10090FA +:10C82000020109084188402004A0821110C00008BC +:10C8300000C004C000000000000000000000000074 +:10C8400000000000000000000000000000000000E8 +:10C8500000000000000000000000000000000000D8 +:10C8600000000000000000C000900000000000C1B7 +:10C870000190840000000000030010010001C000CE +:10C88000000002001000000001001000000188C03C +:10C89000009000A088020108010440400004020248 +:10C8A000000400C0C010C084098400048008808097 +:10C8B0000080000080000000000000000000000078 +:10C8C0000000000000000000000000000000000068 +:10C8D0000000000000000000000000000000000058 +:10C8E0000000000000000000008000800000000048 +:10C8F00000C011918009000400031004800300218E +:10C900008000400080008000000909030003000946 +:10C9100080800080000000002180210000800080D5 +:10C920008400000000008000098004088482040460 +:10C930000000002000408000000000000000000017 +:10C9400000000000000000000000000000000000E7 +:10C9500000000000000000000000000000000000D7 +:10C960000000000000000000000000008000000047 +:10C97000808000008000034080A10000400004008F +:10C9800021218900400003004000058008001100BB +:10C9900041090000804100098080848009001084E2 +:10C9A000C000000000110080000090C0C001A0A1E4 +:10C9B000880004004001828990000000000000000F +:10C9C0000000000000000000000000000000000067 +:10C9D0000000000000000000000000000000000057 +:10C9E00000000000000000000000000000008200C5 +:10C9F0000000C090000282000001C0910000010010 +:10CA000000000101080002000000A1000004010074 +:10CA100001000101A000820088A1C09002404000F6 +:10CA200000891100000000000088000002C00041E1 +:10CA300004854009088200400082090200000000CD +:10CA400000000000000000000000000000000000E6 +:10CA500000000000000000000000000000000000D6 +:10CA600000000000000000000000000000000000C6 +:10CA70000000009000C000009100009100C1000083 +:10CA80000000000000000008000200C100030000D8 +:10CA9000010000010101C040000890A088C0A00171 +:10CAA00000010001820140080010108410C08009BC +:10CAB00003840021009180000000000089800000B4 +:10CAC0000000000000000000000000000000000066 +:10CAD0000000000000000000000000000000000056 +:10CAE0000000000000000000000000000000000046 +:10CAF0000000000000800080000391050091038584 +:10CB000000020910410200100089008900400088DD +:10CB100000052011410511418080000080008080C7 +:10CB200000400004002191108080000080008000FF +:10CB300021040440100083030011800000800000E5 +:10CB400000000000000000000000000000000000E5 +:10CB500000000000000000000000000000000000D5 +:10CB600000000000000000000000000000000000C5 +:10CB700000008009000900000000A18409030021D1 +:10CB8000400040C004001100084000000080000088 +:10CB9000001141C011001000081080118009808030 +:10CBA0000000884084C00900044080048040800068 +:10CBB0000000C101918941401001400120A0828400 +:10CBC00088000000000000000000000000000000DD +:10CBD0000000000000000000000000000000000055 +:10CBE0000000000000000000000000000000000045 +:10CBF000000000009000000000000000C090000154 +:10CC00000001900001C100000000010100C000020D +:10CC100000C000000189010000000101C00110A155 +:10CC200040821000C103822010828201C001A00155 +:10CC30004000C000810000E0000060000011000022 +:10CC400007000000000000000000000000000000DD +:10CC500000000000000000000000000000000000D4 +:10CC600000000000000000000000000000000000C4 +:10CC70000000000000000081000007000000828129 +:10CC800000E007000000000000000000420000007B +:10CC9000000000004100000000E000000000000073 +:10CCA00000000700420000000000070000000041F3 +:10CCB00000000700001289CF090F00000001434265 +:10CCC000C3C24C664C66000000000000000000007B +:10CCD0000000000000000000000000000000000054 +:10CCE0000000000000000000000000000000000044 +:10CCF0000000000000000000FFFF0000FF00000037 +:10CD00003C3C0000FF0000000000000000000000AC +:10CD1000000000000000000700000000000000000C +:10CD2000F690BDBDF03CFF66F6067E4200000000B6 +:10CD30000D0042FFD9D9999989CF99FF00000000D1 +:10CD4000C342434200004C660000000000000000A7 +:10CD500000000000000000000000000000000000D3 +:10CD600000000000000000000000000000000000C3 +:10CD700000000000000000000000FFFF0000FF00B6 +:10CD800000003C3C0000FF0000000000000000002C +:10CD9000000000000000000000040000000000008F +:10CDA0000000F6902424F03C0066F6067E42000067 +:10CDB0000000090942FF003C003C000000000000A8 :10CDC0000000000000000000000000000000000063 :10CDD0000000000000000000000000000000000053 :10CDE0000000000000000000000000000000000043 @@ -126208,495 +126208,495 @@ :10CE00000000000000000000000000000000000022 :10CE10000000000000000000000000000000000012 :10CE20000000000000000000000000000000000002 -:10CE300000000000000000000000000000000000F2 -:10CE400000000000000000000000000000000000E2 -:10CE50000000000042424242000000009999000098 -:10CE60003C003C1800FFC3C3003CC3FF0000F9FFB7 -:10CE7000F6F0C2C00F00FFFF030307030000D9D97B -:10CE8000D90000000000333C3F3C0F0FFFFF0000C3 -:10CE90000000003C003CFFFC7E3C00000000000065 -:10CEA0000000000000000000000000000000000082 -:10CEB0000000F3F3F3915C7C5C7C303CF0F000000C -:10CEC0000000026266660000000000000000000032 -:10CED0000000000000004242424200000000999918 -:10CEE00000003C003C1C00FFC3C3003CC3FF00002B -:10CEF000FDFFFFF9C3C10F00FFFF03030F0B00008D -:10CF00000000D9000000000033C33FFF0F0F3C6654 -:10CF1000000000000C0C0C0C3CFC7E3C00000000EF -:10CF20000000000000000000000000000000000001 -:10CF300000000000F3F3F3F35C7C5C7CF0F6F0F0AF -:10CF400000610006000D000000000000000000006D -:10CF50000000000000000000006140050009000022 -:10CF600000610006000D000100610036000D0000A8 -:10CF70000061300100050001006130010001000086 -:10CF8000000000610006001D000000614006000D69 -:10CF9000000000610005000D0000006100070009AD -:10CFA000000000610006000D00000000000000000D -:10CFB000000000610006000D000000610006000D89 -:10CFC000000000000000003CFF3C000000000000EA -:10CFD00000000000000000000000FF550F55FFFF9B -:10CFE000FFFF000000805555515500000000AF00C4 -:10CFF0003F00FFFFFFFF00D500D5CBC3CBC370FFC1 -:10D00000FFFF000000000000B4B4B4B40000FBFB5C -:10D01000018301833C300C000000F0F000000000B0 -:10D02000FF00FF000000000043C3430300000000B6 -:10D030000000000000000000E0E0E0E3000000006D -:10D040005F5F5F4300000000003CFF3C0000000009 -:10D05000000000000000000000000000F055005536 -:10D0600000AC00FF000000005555515500000000C5 -:10D0700000000000FF00C70000FF0000C1C3C1C3E3 -:10D0800050FFFFFF00000000000000000000000053 -:10D09000FFEB3DBF3DBF7D700D000000F0F00000D4 -:10D0A0000000C1C1C0C0000000005FFF5F0F0000B2 -:10D0B00000000000000000000000202020230000ED -:10D0C00000005F5F5F5F00000000000000200000C4 -:10D0D0000000000000000000000000000000CFCFB2 -:10D0E0000C0C007D007DFFFFFFFF00003C000000F6 -:10D0F000000000000000E8E8E8E828780000FFFCF5 -:10D10000FFF43CFD3CFF000000000000FAFAFAFAD0 -:10D11000FFFF5555FF0F000FFFFFFF5500000000F8 -:10D1200000000000FFFFCFCF000000000000000063 -:10D1300000000000000000000000000000000000EF -:10D14000002000200000000000000000000020007F +:10CE300000000000000000000000000099F981C11E +:10CE4000CF89C080000000000020662200000000A2 +:10CE500000000000000000000000000000000000D2 +:10CE600000000000000000000000000000000000C2 +:10CE700000000000000000000000000000000000B2 +:10CE800000FF00000F0F000000FFFFFFF0F00000A8 +:10CE90000000000000000000000000000000000092 +:10CEA0000000000000006F6F0CFCBDBD096F242D59 +:10CEB000242D00000000F1F9F0F000000000FFF95F +:10CEC000C3C1FF99FF99000100020030FF33000049 +:10CED0000000000000000000000000000000000052 +:10CEE0000000000000000000000000000000000042 +:10CEF0000000000000000000000000000000000032 +:10CF0000000000FF00000F0F000000FFFFFFF0F027 +:10CF100000000000000000000000000001011919DD +:10CF2000000000000000000060600CFC2424096F79 +:10CF3000BD2D242D101070700000000000000000B6 +:10CF400000610004C0190000000050300000000023 +:10CF500000000000000000000000000000000000D1 +:10CF600000000000000000000000000000000000C1 +:10CF700000000000000000000000000000000000B1 +:10CF80000000030203380C0092C003E3033CCC0D05 +:10CF900082C000610006000D000000610006000D67 +:10CFA00000000040000400000000100020000040CD +:10CFB000000810614006000D00011000003800005C +:10CFC0000000F0F020300000000000000000000031 +:10CFD0000000000000000000000000000000000051 +:10CFE0000000000000000000000000000000000041 +:10CFF0000000000000000000000000000000000031 +:10D00000000000000000000000000000C3C3FF5546 +:10D0100000000020000000000200000000000000EE +:10D0200000000000AF05BEBEEBEB30F300000000D7 +:10D0300000000000F0D0F0505151FBFB0000000058 +:10D0400000000000F0F0003000FF8FFF0000000043 +:10D0500000000000000000000000000000000000D0 +:10D0600000000000000000000000000000000000C0 +:10D0700000000000000000000000000000000000B0 +:10D080000000000000000000000000000000FFFFA2 +:10D09000FF5500000000003C000F000000000000F1 +:10D0A000000010005100AF051414282830F30000D0 +:10D0B000000000000000F0D0F0500051AAFB00007A +:10D0C0000000000000003C083C0000AA80AA00000C +:10D0D0000000000000000000000000000000000050 +:10D0E0000000000000000000000000000000000040 +:10D0F0000000000000000000000000000000000030 +:10D10000000000000000000000000000000000001F +:10D1100008088A0800FF00FFFFFF0041AF00000081 +:10D1200000000000FEF0F0F00FAF0F0FF3F328EB5C +:10D130000000000000000000000000001414141C97 +:10D1400000000000000000003C083C0000AA80AA8B :10D1500000000000000000000000000000000000CF -:10D16000CFCF0C0C007D007DFFFFFF7F00003C0057 -:10D170000000000000000000E8E8EBE87D7D000012 -:10D180003CFC14F43CFD3CFD000000000000FABA39 -:10D19000FAFAAAAA28AAFF0F000FFFFFC30F000088 -:10D1A000000000000000050F0F0F0000000000004D -:10D1B000000000000000000000000000000000006F -:10D1C000000000E000E00000000000008800041003 -:10D1D0000404880488008400820020000491200058 -:10D1E000400084024008A00040804005000040004C -:10D1F00040884100201084401041840020004010ED -:10D20000840400052000840020100003210884000D -:10D210002000404020054000400000042000200481 -:10D220002041041100080005000020040490209013 -:10D230002080040021200409880000044009200403 -:10D240002020880505008405880088804000200093 -:10D25000000000000000200000000000050009029E -:10D2600040040440108209000000000203C0400096 -:10D27000A100101008001082200109000000040223 -:10D28000050121004104400220900000000020C060 -:10D290000002210009830000208405040584404029 -:10D2A0000900000011840900200041000000400333 -:10D2B00040020002090420C140C020C0002020001C -:10D2C000410004010002080041020404000290042D -:10D2D0000000000800090009000900100010010406 -:10D2E00000044090C00209100205C0000410004173 -:10D2F00000034010008800090400000540050008F4 -:10D30000910089000410A008000000804000000087 -:10D310000010004100104010000000000410000048 -:10D32000000000000400000400008200000000056E -:10D3300005050000010003100105011004000104AF -:10D3400004000410000802000041000008098200E7 -:10D35000008403080010000800820504008800848F -:10D360000808001000020301C0088404000809082E -:10D3700041A0208280880902000885084008C10871 -:10D38000098404000884890004100482041089C000 -:10D39000000000C00408048885080404040800C0D4 -:10D3A0000088000200844040020800040004008459 -:10D3B0001088049000080408041004080408800879 -:10D3C0000409418489882084400800040008C0843E -:10D3D00040888800A040082008210021000800089B -:10D3E0000808C021C00000000840202100000041C2 -:10D3F00000408405C008C0000021202100408810A2 -:10D400000005C00300000000040802419008C0218C -:10D4100000210000400302031008900040088240F1 -:10D4200020089008000290100021900000210002C6 -:10D4300084030205C003042004054011820309404F -:10D44000C01090020410042184030802002100008F -:10D4500000008208058400000008000005080000A4 -:10D460000084030040000000000000000882080063 -:10D4700008A02100050800100500000420824100DA -:10D4800004A100A01000008802004184200003A035 -:10D49000030205A00000900004A0000008884000DE -:10D4A00041821100099000A0050800C00010108200 -:10D4B00000080000000809A000A184A010082104B1 -:10D4C0002000050003008008840000040000030021 -:10D4D0000000400008A00821C00000001000080063 -:10D4E000A000080004021000820000020900204091 -:10D4F00000000400C00004028202C0020504000013 -:10D500000400400009000000100004000809001099 -:10D51000844020410004000004008200010000203B -:10D5200010000000A0000800820800008404080029 -:10D530000411880982098208841004108310820073 -:10D540008400080020022041821102028309C000E9 -:10D55000400490400000014003100004030200005A -:10D5600000A0001000A00800002000000400081027 -:10D57000418800820000008403000083100840827C -:10D580000820110000000400009000A00008020024 -:10D590000801008309080000000011A00984200090 -:10D5A0000000000000000000040000004104100022 -:10D5B00000C005C000100800000803088405081119 -:10D5C0000300000000008004800400040001042027 -:10D5D0002100040203000008209000210008000040 -:10D5E0000000000010004000000082000800000061 -:10D5F00000002000000082000800A0418200080016 -:10D60000C005040504000840844100000420000017 -:10D61000C04000000000880000200000000403005B -:10D620004100000000050003082100050040000043 -:10D63000000508210000040004080000000000C0EC -:10D6400001004021208083000140012140000000B2 -:10D65000000000C0000000038200820003002108D7 -:10D6600000000500000000000000000000000000B5 -:10D67000000008000302110000200004030008005D -:10D68000000200A00540A020000021020800C109FE -:10D69000080005000200400000A00508000000018D -:10D6A0004000A08400000910054000C00588000863 -:10D6B00000000000049000000000000802000008C4 -:10D6C0000010082088049002040004900400210047 -:10D6D0000000000003202000004000A0009000088F -:10D6E000040000090000002140008200000000004A -:10D6F00000000008820040400005000000210005F5 -:10D7000082410000081000110021001000100010DC -:10D7100040000000004101000100400040200000E6 -:10D72000004100008200000900400040002100107C -:10D7300000400040004000044000000000410000A4 -:10D740000900010001800103910000004004044130 -:10D75000018000001000830002044000200000004F -:10D7600000000000000000020000000000000000B7 -:10D770000000000000C00000008805A0201000008C -:10D780002000000000000800000000000001000070 -:10D790000000000000000000080008000000090070 +:10D1600000000000000000000000000000000000BF +:10D1700000000000000000000000000000000000AF +:10D18000000000000000000000000000000000009F +:10D19000000008088A0800000000FFFF0003A0004C +:10D1A000000000000000F2F0F0F00F2F0F2F3030E1 +:10D1B00028EB000000000000000000000000141434 +:10D1C0003C3C0000000000000000000000000000E7 +:10D1D000000000000000000000000000000000004F +:10D1E000000000000000000000000000000000003F +:10D1F000000000000000000000000000000000002F +:10D20000000000000000000000000003000000001B +:10D21000000000000000000000000000000084008A +:10D22000840000000000000000000000000000007A +:10D230000000008000000010000000002000000836 +:10D24000100000000000008000000080400000008E +:10D2500000000000000000000000000000000000CE +:10D26000000000000000000000000000400000007E +:10D2700000000000000000000000000000000000AE +:10D28000000000000000000000000000000040005E +:10D29000000000000000000000000000000000008E +:10D2A00000000000000000000000000000000090EE +:10D2B0000090009000402102009000900000A1002A +:10D2C00000009000000010000002000000020000BA +:10D2D000000000000020000000000000000002002C +:10D2E000000002000000000000000010000000002C +:10D2F000000000000000000000000000000000002E +:10D30000000000000000000000000000000000001D +:10D310000000000000000000A0000000000000006D +:10D32000000000000000900000000000000000006D +:10D3300000000000820000000000900000000000DB +:10D340000800000000000000000040000200410052 +:10D35000000000000088000000080000000000003D +:10D3600000000000000000000000000000000000BD +:10D3700000000000000000000008000000000000A5 +:10D380000000000000000000000800000000000095 +:10D390000000000000000000000000840400000005 +:10D3A0000000000004000000000000100000000069 +:10D3B00000000400040000000000000000840000E1 +:10D3C00000100000000000000000000480000000C9 +:10D3D000A0000080880000000000000000000000A5 +:10D3E0000000000000000000000000080000000035 +:10D3F000000000000000000000000000000000002D +:10D40000000000000000000000000000000000001C +:10D41000000000000000000000000000000000000C +:10D4200000000000000000000000000000080000F4 +:10D43000000000000000000088000000000000085C +:10D4400090009000200000211000000040A0044047 +:10D45000040840050040009000900000000000001B +:10D460000084000000000000000000000000000038 +:10D4700000000000000000000000000000000000AC +:10D48000000000000000000000000000000000009C +:10D49000000000000000000000000000000000008C +:10D4A000000800000008000000000000000000006C +:10D4B00000A00000000200001100000000000000B9 +:10D4C00009020908090091A00000800000820021E3 +:10D4D000000800C0000000900080018001000000F2 +:10D4E000000000000000000000000000000000003C +:10D4F000000000000000000000000000000000002C +:10D50000000000000000000000000000000000001B +:10D51000000000000000000000000000000000000B +:10D5200000000000000000000000000000000000FB +:10D5300000000000000000000000000000000000EB +:10D5400000000000000020000000000000000000BB +:10D550000400002088110000002100024020040087 +:10D5600000020004000400000000000000000000B1 +:10D5700000000000000000000000000000000000AB +:10D58000000000000000000000000000000000009B +:10D59000000000000000000000000000000000008B +:10D5A000000000000000000000000000000000007B +:10D5B000000000000000000000000000000000006B +:10D5C0000000000000000000000000000400000057 +:10D5D000008280C0000009000004000000800010EC +:10D5E0000100000000000000001100000000000029 +:10D5F000000000000000000000000000000000002B +:10D60000000000000000000000000000000000001A +:10D61000000000000000000000000000000000000A +:10D6200000000000000000000000000000000000FA +:10D6300000000000000000000000001000000000DA +:10D640000000000000200000002100000000082071 +:10D6500000000020001000000020000000841120C5 +:10D66000038904C000A000000004000000000000C6 +:10D6700000000000000000000000000000000000AA +:10D68000000000000000000000000000000000009A +:10D69000000000000000000000000000000000008A +:10D6A00000000000000000000000000000000282F6 +:10D6B00000000000210000C0000000000040000247 +:10D6C00000A0000000000002001000A020000000E8 +:10D6D00000100800000000000000020104000380A8 +:10D6E0000084090000800002000000040000000027 +:10D6F000000000200000000000000000000000000A +:10D700000000000000000000000000000000000019 +:10D710000000000000000000000000000000000009 +:10D720000000000000000000000000000000900069 +:10D7300000000000000000000000000000000000E9 +:10D7400000000000000000000000000000080000D1 +:10D7500001000508000488000408001188910010E9 +:10D760008408004084020002000000002100000044 +:10D7700000000000000000000000000000000000A9 +:10D780000000000000000000000000000000000099 +:10D790000000000000000000000000000000000089 :10D7A0000000000000000000000000000000000079 -:10D7B00000000000200000080082000000C04100BE -:10D7C00000080404040004400404400000000000B9 -:10D7D00000040402000000100400001000002010EB -:10D7E0000000000000000000000000000000000039 -:10D7F0000000000000000000000100000000000028 -:10D80000000100000000C0000000000200904088FD -:10D8100000900010004000C00090A010010000889F -:10D82000A0080000C1C10900208408890208028400 -:10D83000008210C000000000000000000000000096 -:10D8400000000000000501019021000900C00091C6 -:10D850000100000000C00091000000000001A100D4 -:10D860004101040000000000000000000000000072 -:10D870000000000000100008000400210003080957 -:10D880000000004000001000000000000280118035 -:10D8900080800080000000000000008090000800F0 -:10D8A0000000000000002090A02182108010008065 -:10D8B00000000080000000000000000000000000E8 -:10D8C000000000000000009008100010009002C04E -:10D8D00000A00441004003800082000500100420E5 -:10D8E00021108408801000000000000000000000EB -:10D8F000000000000000848040090205A0088000AC -:10D90000800900000000200080000000402180000D -:10D910008000000080000000000080008000800087 -:10D9200000218000008000001000C10000058480FC -:10D930008003009100808080001000000000000043 -:10D94000000000000000000010004100100810213D -:10D95000000800008020808000800000800080A0FF -:10D96000090041202008030300000000000000001F -:10D970000000000000000000094001000000090054 -:10D98000080008000000000082001000000088016C -:10D99000880004009040900010004000A00090001B -:10D9A00008009000840888080000058802008800AC -:10D9B00082C0100008C0042008C000010000000060 -:10D9C0000000000000000000000001000000010154 -:10D9D0000183000100008400C09000080000840062 -:10D9E000C091002000000082010000000000000043 -:10D9F0000000000000000000000000000000010125 -:10DA00000000000000000001000000000001A00074 -:10DA100000004001000290031021404000024088B5 -:10DA20000200088900A0008401A000000008012174 -:10DA3000C011008405840008C084100400000000A8 -:10DA40000000000000000000000000000040012174 -:10DA50000101000900002000009000C0000000004B -:10DA6000009000C000010083004100910000000010 -:10DA70000000000000000000000000000000052081 -:10DA800002210000000900004102001000410003D3 -:10DA90008009040080080090008810088000008041 -:10DAA0008000800080100085008004C0000000908D -:10DAB000104080A1000441000080808082000000AE -:10DAC0000000000000000000000000000000002036 -:10DAD0000810082100900000000000802080000055 -:10DAE0000000008000800008091005A10902000064 -:10DAF0000000000000000000000000000000218283 -:10DB00001090028040028009000000000000408068 -:10DB1000108000001040001000A1008000000020D4 -:10DB20000090000000008010008000000000000055 -:10DB30002104100041002005000800800080000042 +:10D7B0000000000000000000000000000000000069 +:10D7C0000000000000000000000000000000000059 +:10D7D000000020C0402000002000C00020004020A9 +:10D7E0000020C08490820000C00000000000000003 +:10D7F0000000000000000000000000000000000029 +:10D800000000000000000000000000000000000018 +:10D810000000000000000000000000000000000008 +:10D8200000000000000000000000000000000000F8 +:10D8300000000000000000000000000000000000E8 +:10D840000000000040C000C0000010081088C09018 +:10D8500000908890010120010000000000080010E5 +:10D8600085A104898300A1000000000000000000E1 +:10D8700000000000000000000000000000000000A8 +:10D880000000000000000000000000000000000098 +:10D890000000000000000000000000000000000088 +:10D8A0000000000000000000000000000000000078 +:10D8B0000000000000000000000000000000000068 +:10D8C00000000000000080800000000000009000C8 +:10D8D00000000000000011418021091100040084B3 +:10D8E0000511400200048800A1110080C11000054C +:10D8F0000000000000000000000000000000000028 +:10D900000000000000000000000000000000000017 +:10D910000000000000000000000000000000000007 +:10D9200000000000000000000000000000000000F7 +:10D9300000000000000000000000000000000000E7 +:10D94000000000000000000000000000000800804F +:10D95000000080A18000808000000000000000091D +:10D9600088800909054020C00300A1C0902021053E +:10D9700000000000000000000000000000000000A7 +:10D980000000000000000000000000000000000097 +:10D990000000000000000000000000000000000087 +:10D9A0000000000000000000000000000000000077 +:10D9B0000000000000000000000000000000000067 +:10D9C00000000000000000000000900088009000AF +:10D9D000C0C0880010C0080882C00000000000001D +:10D9E000000011028800018911104088000008A180 +:10D9F00000C0000000000000000000000000000067 +:10DA00000000000000000000000000000000000016 +:10DA10000000000000000000000000000000000006 +:10DA200000000000000000000000000000000000F6 +:10DA300000000000000000000000000000000000E6 +:10DA400000000000000000000000000000100010B6 +:10DA5000C008000811C00008C0100210000001003A +:10DA60000100000090910009C01100A00900000011 +:10DA7000800200A000000000000000000000000084 +:10DA80000000000000000000000000000000000096 +:10DA90000000000000000000000000000000000086 +:10DAA0000000000000000000000000000000000076 +:10DAB0000000000000000000000000000000000066 +:10DAC0000000000000000000000000000000000056 +:10DAD0000080808000004100008080800000000005 +:10DAE000410009000000800404A004A105A0040274 +:10DAF00005A121000040000000000000000000001F +:10DB00000000000000000000000000000000000015 +:10DB10000000000000000000000000000000000005 +:10DB200000000000000000000000000000000000F5 +:10DB300000000000000000000000000000000000E5 :10DB400000000000000000000000000000000000D5 -:10DB500020A121100000900880400020000000005B -:10DB6000A14021204000050009C0080089001040A4 -:10DB700000000000000000000000000000000000A5 -:10DB800003C0C1082140000008002010004004002C -:10DB900001040008008200000000848220100000C0 -:10DBA00000000021009000000800002088C0100044 -:10DBB00000000188018400C000001001402084089A -:10DBC00084000000000000000000000000000000D1 -:10DBD00000008303840000000801900000010000A1 -:10DBE0000000C10100010000900008A0A00010008A -:10DBF00040010000000000000000000000000000E4 -:10DC00000000000000000000810000000000000093 -:10DC100000000000000000000000000000000700FD -:10DC200000000000000007000000000000000000ED -:10DC300000000000000000E00000004200000000C2 -:10DC4000000048420000000000000000000000004A -:10DC5000000000000000000007000000008100E05C -:10DC6000070000000041000007000000000000E085 -:10DC700000000000000000000000000000000000A4 -:10DC8000000000000F0F0F0F00000000FF00FF005A -:10DC9000000000000000000000000000A0AFA0AFE6 -:10DCA000F0F000FF00000000303F303FC5C5CFCF8F -:10DCB0000000000000000000000022000022000917 -:10DCC000006000000960000000000000000000008B -:10DCD000000000000000003CC3FFF0F03C3C0000EE -:10DCE000FFFF000000FF00003C3C000000FF0000C0 -:10DCF0000000FFFF0F0F0000000000000000000008 -:10DD000000000000000000FF0000000000003C3C9C -:10DD10000000000000000000000000000000A0AFB4 -:10DD2000A0AFF0F000FF00000000303F303F0000E7 -:10DD3000000055BE05FE00000000000011000011AB -:10DD40000900600009600000000000000000000001 -:10DD50000000000000000000003CC3FFF0F03C3C6D -:10DD60000000FFFF000000FF00003C3C000000FF3F -:10DD700000200000F0FF000F000000000000000085 -:10DD8000000000000000000000000000EBEBEBEBE7 -:10DD9000000000004040404000000000AAAAAAAADB -:10DDA0007D287D28FFFDAA0855553C3CFFFD4341D9 -:10DDB00000000303FCFC3CFF0000CCCC0000040886 -:10DDC00001020600900004010802000000000000AB -:10DDD000000000000000000000003F3F03030000BF -:10DDE0000000FF000000FF000000FF00000000FF37 -:10DDF000FFFF000000000000000000000000000025 -:10DE00000000000000000000000000000000EBEB3C -:10DE10004141000000004F4F4F4F00000000BEBEC8 -:10DE2000B2B25F0AFF0055FD000855550F55BEBC44 -:10DE300002000000FFFFFCFCBEBE0000CCCC0000D6 -:10DE4000102040800006009010402080000000005C -:10DE50000000000000000000000000003F3F03033E -:10DE600000000000FF000000FF000000FF000000B5 -:10DE700000FFFFFF000000000000000000000000A5 -:10DE8000000000000000000000000000006100062B -:10DE9000000D000000610006000D00010061000699 -:10DEA000000D00008061000E001D00000000000851 -:10DEB0000000000000610006000D0001000000638A -:10DEC00090030005100000000000000008000000A2 -:10DED0000000000000000000000000000000806161 -:10DEE000000E000D00A00363033F0C0D92C003E37E -:10DEF000033E0C0D82C000610007000D0000000011 -:10DF00000000000000000000000000000000AAC0A7 -:10DF1000AAC000F000F000000000FF3CFFFFFFFF80 -:10DF2000FF3C6631663100000000C3C3C3C300007C -:10DF300000000000000000000000F3F303030000F5 -:10DF40007F734F43B0F0A0E000000000000000002D +:10DB5000000800000080000000000000000000003D +:10DB60000900040004001000210085418900021111 +:10DB7000050190A0892004000000000000000000C2 +:10DB80000000000000000000000000000000000095 +:10DB90000000000000000000000000000000000085 +:10DBA0000000000000000000000000000000000075 +:10DBB0000000000000000000000000000000000065 +:10DBC0000000000000000000000000000000000055 +:10DBD00000000000000200400000020010880888D9 +:10DBE0000800000000000000000003C0A0A0100218 +:10DBF000010000000000070082000000000000009B +:10DC00000000000000000000000000000000000014 +:10DC10000000000000000000000000000000000004 +:10DC200000000000000000000000000000000000F4 +:10DC300000000000000000000000000000000000E4 +:10DC400000000000000000000000000000000000D4 +:10DC50000000000000000000000000420000000082 +:10DC600000004842480000E000008200001100E08F +:10DC7000070000005500550014142828000000007B +:10DC80000000000000000000000000000000000094 +:10DC90000000000000000000000000000000000084 +:10DCA0000000000000000000000000000000000074 +:10DCB0000000000000000000000000000000000064 +:10DCC0000000000000000000000000000000000054 +:10DCD0000000000000000000000040801020040848 +:10DCE0001020041008200000000000000000FF5079 +:10DCF000FF50FFFF000C4500050000140028000045 +:10DD00000000000000000000000000000000000013 +:10DD10000000000000000000000000000000000003 +:10DD200000000000000000000000000000000000F3 +:10DD300000000000000000000000000000000000E3 +:10DD400000000000000000000000000000000000D3 +:10DD500000000000000000000000000001020408B4 +:10DD6000010240800140028000000000000000002D +:10DD7000FF50FFF0FFFF00FFFFFF00FFF0F0F0FF9C +:10DD80000000000000000000000000000000000093 +:10DD90000000000000000000000000000000000083 +:10DDA0000000000000000000000000000000000073 +:10DDB0000000000000000000000000000000000063 +:10DDC0000000000000000000000000000000000053 +:10DDD000000000000000000000003CC30000240020 +:10DDE000002406009000040810200000000000003D +:10DDF0000000000303030000D0D00000000070709A +:10DE0000707D000000000000000000000000000025 +:10DE10000000000000000000000000000000000002 +:10DE200000000000000000000000000000000000F2 +:10DE300000000000000000000000000000000000E2 +:10DE400000000000000000000000000000000000D2 +:10DE50000000000000000000000000003CC30000C3 +:10DE60008100008100060090010240800000000057 +:10DE70000000000000C3C3C30000D7D705610A0E2D +:10DE8000059D00A10000000000000000000000004F +:10DE90000000000000000000000000000000000082 +:10DEA0000000000000000000000000000000000072 +:10DEB0000000000000000000000000000000000062 +:10DEC0000000000000000000000000000000000052 +:10DED0000000000000000000000000000000000240 +:10DEE0009000000010000000000000000800002169 +:10DEF0000003C00D00000061003F000D00000000A5 +:10DF00000000000000000000000000000000000011 +:10DF10000000000000000000000000000000000001 +:10DF200000000000000000000000000000000000F1 +:10DF300000000000000000000000000000000000E1 +:10DF400000000000000000000000000000000000D1 :10DF500000000000000000000000000000000000C1 -:10DF600000FFC3FFDF00FF00000000000000000012 -:10DF7000FFFF0000000000003DFFFFFFEB00EB0093 -:10DF80000000000000000000000000000000000091 -:10DF9000AAC0AAFF00F000F000000000003C00FF53 -:10DFA0003CFF3C3C3F263F2600000000C282C2C32B -:10DFB000000000000000000000000000F0F0000081 -:10DFC00000007F734F43105000400000000000002D +:10DF600000000000000000000000000000000000B1 +:10DF7000303030300000000055CF55FF0000FFFF6B +:10DF8000000F000000FF0000000000000000000083 +:10DF90000000000000000000000000000000000081 +:10DFA0000000000000000000000000000000000071 +:10DFB0000000000000000000000000000000000061 +:10DFC0000000000000000000000000000000000051 :10DFD0000000000000000000000000000000000041 -:10DFE000000000000000FF00FF0000000000000033 -:10DFF00000000AEA00000000000005FFFFFFE80043 -:10E0000028000000000000000000000000000000E8 -:10E010000000FFDFF0D0000000200000FF00000043 -:10E0200000000000000041417D7D00000000000074 +:10DFE0000000000000000000000000000000000031 +:10DFF00000003C303C3C0000000055C355F3B4F534 +:10E00000B4F5000000000B0B282800000000000001 +:10E010000000000000000000000000000000000000 +:10E0200000000000000000000000000000000000F0 :10E0300000000000000000000000000000000000E0 -:10E0400000000000ACACFF00E8E8E8E800000000D9 +:10E0400000000000000000000000000000000000D0 :10E0500000000000000000000000000000000000C0 -:10E0600000000000002000000000400000FFF3F36B -:10E0700000000000C0CFC0CF000000003C000C0C2E -:10E080000B083F300000000000000000000000000E -:10E0900000000000FF1FF01000000000003CFF3CEB -:10E0A00000000000000000007D7D414100000000F4 +:10E0600000000000000000000000000000000000B0 +:10E070000000000041FFF3F30000000000AA28AAFE +:10E080000000C3DF000000000B0B28280000000088 +:10E090000000000000000000000000000000000080 +:10E0A0000000000000000000000000000000000070 :10E0B0000000000000000000000000000000000060 -:10E0C000000000000000ACACFF00FCFCC0C0000081 +:10E0C0000000000000000000000000000000000050 :10E0D0000000000000000000000000000000000040 -:10E0E000000000000000000000000000000000FF31 -:10E0F000F3F300000000C0CFC0CF000000001414F4 -:10E1000000000B08FFF0400000000809888088002C -:10E11000C004200020008810000520052008218868 -:10E12000058904080005400040028800C088840377 -:10E13000040084000008840040000404041020004F -:10E140008804210040100003C000040000042005E2 -:10E150004000208404004004880040002008880912 -:10E16000001000002002400001802000A000408438 -:10E170002020890000210002200088004000820049 -:10E1800040050500C080050009000402840041022A -:10E190000000040004000000000020000000000057 -:10E1A0000402C020052041A0C09089000040000268 -:10E1B00040900000050004A00000090009000200D2 -:10E1C000000040000810000000000500004010049E -:10E1D00000000020C105090200840000400000008A -:10E1E000000000000000040000902002A0900982BE -:10E1F0002010414008002000000400020002000836 -:10E2000010040040848200028400C0410000000825 -:10E21000000502040003000500020004400840005D -:10E22000400900400402002085209009000082106F -:10E23000008304100000004100080204820400046E -:10E240008411002090080020001000000000000051 -:10E250000000001084410008821004898205000437 -:10E260000041000000090000A04100030204050075 -:10E27000000400108810000000100440A0100010DE -:10E280009005909004100410908808050010000478 -:10E2900009000008111000100508008940888988CD -:10E2A00080048084040082C10241040105080382C5 -:10E2B000040404020084008800100504000804829D -:10E2C00000884084041104840085000900000008CF -:10E2D0000008000004040584040004A0000404886D -:10E2E00000880000200804080088008804100085C9 -:10E2F0002008048500880584050400000300000848 -:10E300000084410840108088838220204000000261 -:10E3100000090003080000030821000200050002B4 -:10E32000000502080005904090080121C00010027D -:10E330000040000208210000824002080405880213 -:10E34000C0410021090800410210104000000000F7 -:10E3500040030800C0210008A00521054005400039 -:10E3600090008408102120400040100810088821E7 -:10E370000003030401081108080808050821100813 -:10E3800040031000901000400421000804400008E1 -:10E3900008A00008001080000000410000000300F9 -:10E3A0000008030003000004030010A0040000089C -:10E3B000100200100000038204C0031000A008082F -:10E3C000082009080000082000001101000000409A -:10E3D000000040882110000220840084828408000C -:10E3E00011820910000441A0000021A003000320B5 -:10E3F00000000800208320002000A00009088500FC -:10E4000000A00400080008000084000000000010C4 -:10E4100000048200C0000800A0004000A00000002E -:10E4200000000800C00410004011A000090500050C -:10E43000000008211000C0090005000008100000BD -:10E440002008100000000000000020000000848070 -:10E4500000400000A020C000000010000808088054 -:10E46000404010C084000800C0000000820008097D -:10E47000000040000009820900100000822100080D -:10E480000000000000200011C0090811010400096B -:10E4900000004041418200C00000001000A00000C8 -:10E4A0000300001000000082000000000000404057 -:10E4B000410009900084000041000000200000009D -:10E4C0000000000000A040000000000000880000E4 -:10E4D0000010008800000084000040840000040058 -:10E4E0000004050000050008418210404000209013 -:10E4F00000002000A000000009840000000000903F -:10E500000000000040A0000400004100000004845E -:10E5100000200020000000000000C00001400005B5 -:10E52000000810001008A000000000008210002069 -:10E530008800102108410040002100210040000017 -:10E5400000000841000090000000A0000000010051 -:10E55000000010000400000088000021202004803A -:10E56000000000040891219000000021102100000B -:10E570000803200000008200018011118280C0A1E8 -:10E580000040080000000810100082000000000099 -:10E590000000000000000002000000000000020077 -:10E5A000000000000000000000004000000000002B -:10E5B00000010008000000000000000000000084CE -:10E5C000008403A00000004000000400080200A036 -:10E5D000080802020008030400000820088408401C -:10E5E0000402000800A0101082040000008800004F -:10E5F00040A00000000000000200200420004004B1 -:10E6000004040000000021000402000000000000DB -:10E61000000003000088080021850008080400218C -:10E62000004008080000000000410803202100000D -:10E630000040000000100000004000020008004000 -:10E640000009400810000400000400100000000051 -:10E6500000042100080001030000000082040005FE -:10E66000000800050008000510210005081182219E -:10E6700000080011000000000000080082000000F7 -:10E6800090000011000000210002000000000008BE -:10E6900000009008C00000000000082000000001F9 -:10E6A00000000008000000000000000003820000DD -:10E6B000000000000000000000000000000102084F -:10E6C0000800008408000000200000000000000096 -:10E6D00000000000040000000400000000000084AE -:10E6E000000000820000000000C0200000000000C8 -:10E6F00000002110002000C0108820A00384000822 -:10E70000039040840090000000000000000000C062 -:10E71000030002001100000809000002004102C0CD -:10E72000000020A09008000000008200000001000E -:10E7300000000000000084100104020508890000A8 -:10E7400002000000000000000000000000000800BF -:10E7500040000000100020A0001000880208000007 -:10E760000000000008000000004011908903001123 -:10E7700000000000000000000000A000C000000039 -:10E78000100040010000C0010904022000A08840E0 -:10E7900000000000000000000302849090820284C8 -:10E7A00080000300008000800000090000000000DD -:10E7B0001000000000000000008010108005804064 -:10E7C0000020000300000000000000000000000026 -:10E7D0000000800000000000008000000000808039 -:10E7E000000000000000800000000091410404903F -:10E7F000008800000000000000000000850000000C -:10E80000000000030040040380202100808000807D -:10E810000000000000000000000010000000008068 -:10E820000000090003008200000800000000000052 -:10E83000000041802100200310002000211103006E -:10E840004080000000000000000300000000000005 -:10E85000000080008000002180008000000980000E -:10E860000000000000000000000000009100080906 -:10E870008888830800000000000000000480080071 -:10E8800004020310800280008010800080000010CD -:10E890000080800000000000000000000300210054 -:10E8A000110002000000C000A000000000000000F5 -:10E8B0000000000000C00000000001000190A10065 -:10E8C000C00085A0008800000000000100000000DA -:10E8D0000000000004000400900182000800020013 -:10E8E000A0088200000000000000000000000800F6 -:10E8F0008308A10282010000000000000000004027 -:10E9000001000101010188010800820104000200E8 -:10E910000201008208000000400000000400020024 -:10E92000020000008400041090880001C00800006C -:10E9300000000000000000000000000000011011B5 -:10E9400001840101018800000000000100000000B6 -:10E95000000000000000008800000008008408900B -:10E960000002008410000000000000000000000110 -:10E970004000011090112104000000000000000080 -:10E9800000000000A000000100C084400088018257 -:10E99000409000882040A0200000000000000000FF -:10E9A00000100002900011840020801100218005D9 -:10E9B00000040008004100100000000300200010C7 -:10E9C00080A0081108210811000400004120000067 -:10E9D00000000000000000000000000000800000B7 -:10E9E0000000000000801100000000090003001179 -:10E9F00000100003080003210900000000000000CF -:10EA00000000002000418020000300004000410081 -:10EA100010808000008000800000000000000000E6 -:10EA20000000000900048003C008040011800500F4 -:10EA300000000002000000000000020020001000A2 -:10EA40001010801105898980000321100300000047 -:10EA50004000000000000000000000000000000076 -:10EA60000000800000200080800000000000000006 -:10EA70000000000003A12180090000200000000028 -:10EA80000000000008800202110000100010008346 -:10EA9000000000008002800000008000000800806C -:10EAA0000080000000800089800000040100010255 -:10EAB0000000000000010000000000000002000053 -:10EAC00001000000084010201084880001000000B0 -:10EAD00000000000000000000000000000000088AE -:10EAE0000000000002008821000810000000000063 -:10EAF0000000000000009041088220084001000052 -:10EB00000000000000000002000100000001000100 -:10EB100000020020000004000288049002000000AF -:10EB20000002004000000040C08208048400000091 -:10EB300000E00000000600000000000000000000EF -:10EB4000000000006000000000000700000000005E +:10E0E0000000000000000000000000000000000030 +:10E0F00000000000000041FFF0F000000000FFFF02 +:10E100002FAF0000C3D70000000000000000000097 +:10E1100000000000000000000000000000000000FF +:10E1200000000000000000000000000000000000EF +:10E1300000000000000000000000000000000000DF +:10E1400000000000000000010000000000000000CE +:10E1500000000000000000000000000000000400BB +:10E1600000000000000000000000000000000000AF +:10E17000000000000000000000000000000000801F +:10E18000000000000000008000000000000000000F +:10E19000000000000000000000000000000000007F +:10E1A000000000000000000000000000000000006F +:10E1B000000000000000000000000000000000005F +:10E1C000000000000000000000000000000000004F +:10E1D000000000000000000000000000000000003F +:10E1E000000000000000000000000000000000002F +:10E1F000000000000000000000000000000000001F +:10E200000002000000000000000201000200910076 +:10E2100000000200000000002000020000000000DA +:10E2200000000000000000000000000000000000EE +:10E2300000000000000000000000000000000000DE +:10E2400000000000000000000000000000000000CE +:10E2500000000000000000000000000000000000BE +:10E2600002000000000000008200820004000000A4 +:10E270000200000000000000040000000000000098 +:10E2800000004000020000000000400020000000EC +:10E2900020000210000000000000801000000000BC +:10E2A000000000000000000000000000000000006E +:10E2B000000000000000000000000000000000005E +:10E2C000000000000000000000000000000000004E +:10E2D000000000000000000000000000000000003E +:10E2E000000000000000040000000000000000002A +:10E2F000040000000000000000000000000000001A +:10E3000000000000800000000000000080000020ED +:10E3100000000000000000000005000000000000F8 +:10E3200000000000000000000000000000000000ED +:10E3300000000000000000000000000000000000DD +:10E3400000000000000000000000000000000000CD +:10E3500000000000000000000000000000000000BD +:10E3600000000000000000000000000000000000AD +:10E37000000000000000000000000000900000000D +:10E38000000000000000000000210000000000006C +:10E39000000100000000000000000000000000007C +:10E3A000000000000000000000000000000000006D +:10E3B000000000000000000000000000000000005D +:10E3C000000000000000000000000000000000004D +:10E3D000000000000000000000000000000000003D +:10E3E000000000000000000000000000000000002D +:10E3F0000000000000000000004000A000000084B9 +:10E4000000C0000200880008089009000000110008 +:10E41000008800410004000000040000000000002B +:10E4200000000000000000000000000000000000EC +:10E4300000000000000000000000000000000000DC +:10E4400000000000000000000000000000000000CC +:10E450000000000000000040000000040000000078 +:10E4600000000000000000000000000000000400A8 +:10E47000000000400000000000000000000000005C +:10E48000000000000020000000000000001100005B +:10E490000000000000000000000000010004000077 +:10E4A0000000000400000000000000000000000068 +:10E4B000000000000000000000000000000000005C +:10E4C000000000000000000000000000000000004C +:10E4D000000000000000000000000000000000003C +:10E4E000000000000000000000000000000000002C +:10E4F000000000000000000000000000000000001C +:10E50000000000000000000000000000000000000B +:10E51000000000000000002001C1A12008900000C0 +:10E5200000050000000000000000000000000000E6 +:10E5300000000000000000000000000000000000DB +:10E5400000000000000000000000000000000000CB +:10E5500000000000000000000000000000000000BB +:10E5600000000000000000000000000000000000AB +:10E57000000000000000000000000000000000009B +:10E580000000820000000000000000000000000009 +:10E5900000000000000000000401022008018021AA +:10E5A000000000000000000000000000000021004A +:10E5B000000000000000000000000000000000005B +:10E5C000000000000000000000000000000000004B +:10E5D000000000000000000000000000000000003B +:10E5E000000000000000000000000000000000002B +:10E5F00000000000000000000000000820040000EF +:10E6000020001102058840040090008400000000F2 +:10E610000000008800020010200000114000C1042A +:10E620000040000400090004400200000020000037 +:10E6300000000000000000000000000000000000DA +:10E6400000000000000000000000000000000000CA +:10E6500000000000000000000000000000000000BA +:10E6600000000000000000000000000000000000AA +:10E67000000000000000000000000000000000009A +:10E680000000000000008200000000000000000008 +:10E6900000080200000300000000880020000000C5 +:10E6A0000400000100000000000000000000000065 +:10E6B000000000000000000000000000000000005A +:10E6C000000000000000000000000000000000004A +:10E6D000000000000000000000000000000000003A +:10E6E000000000000000000000000000000000002A +:10E6F000000000000000000000000000000000001A +:10E700000000000000000000000000000000000009 +:10E7100000000000000000000000000000000010E9 +:10E7200000010808A0900000010082000000000025 +:10E7300000000000000000000000000000000000D9 +:10E7400000000000000000000000000000000000C9 +:10E7500000000000000000000000000000000000B9 +:10E7600000000000000000000000000000000000A9 +:10E770000000000000000000000000000000000099 +:10E780000000000000000000000000000000000089 +:10E7900000000100C00000000000010004000000B3 +:10E7A0000003050200830088000041000000000013 +:10E7B0000000000000000000000000000000000059 +:10E7C0000000000000000000000000000000000049 +:10E7D0000000000000000000000000000000000039 +:10E7E0000000000000000000000000000000000029 +:10E7F0000000000000000000000000000000000019 +:10E800000000000000000000000000000000000008 +:10E8100000000000040000000000000002000000F2 +:10E820000000838021000300C00000000000000001 +:10E8300000000000000000000000000000000000D8 +:10E8400000000000000000000000000000000000C8 +:10E8500000000000000000000000000000000000B8 +:10E8600000000000000000000000000000000000A8 +:10E870000000000000000000000000000000000098 +:10E880000000000000000000000000000000000088 +:10E8900000000000030004002000200020002000F1 +:10E8A000040004000804A1840400C18400000000E6 +:10E8B0000000000000000000000000000000000058 +:10E8C0000000000000000000000000000000000048 +:10E8D0000000000000000000000000000000000038 +:10E8E0000000000000000000000000000000000028 +:10E8F0000000000000000000000000000000000018 +:10E900000000000000000000000000000000000007 +:10E9100000000000000000000000010001000100F4 +:10E9200001000100010000900100051109410000F3 +:10E9300000000000000000000000000000000000D7 +:10E9400000000000000000000000000000000000C7 +:10E9500000000000000000000000000000000000B7 +:10E9600000000000000000000000000000000000A7 +:10E970000000000000000000000000000000000097 +:10E980000000000000000000000000000000000087 +:10E99000000000000000000000010001C0010001B3 +:10E9A0000000000100010001048040030585A10270 +:10E9B000000000050005004000000000000000000D +:10E9C0000000000000000000000000000000000047 +:10E9D0000000000000000000000000000000000037 +:10E9E0000000000000000000000000000000000027 +:10E9F0000000000000000000000000000000000017 +:10EA00000000000000000000000000000000000006 +:10EA10000000000000000000000000200040002175 +:10EA200000030004000400210020028402C00280D0 +:10EA30000540000000000000000000000000000091 +:10EA400000000000000000000000000000000000C6 +:10EA500000000000000000000000000000000000B6 +:10EA600000000000000000000000000000000000A6 +:10EA70000000000000000000000000000000000096 +:10EA80000000000000000000000000000000000086 +:10EA900000000000000000000000000000800005F1 +:10EAA00000000004000000000000000501C1010892 +:10EAB00001900001000000000000000000000000C4 +:10EAC0000000000000000000000000000000000046 +:10EAD0000000000000000000000000000000000036 +:10EAE0000000000000000000000000000000000026 +:10EAF0000000000000000000000000000000000016 +:10EB00000000000000000000000000000000000005 +:10EB100000000000000000000000000000000040B5 +:10EB20000000000000000084000000000000608180 +:10EB300000E007008400600000E0000060000000CA +:10EB400000000000000000000000000000000000C5 :10EB500000000000000000000000000000000000B5 -:10EB6000000000000000000000000700000000009E -:10EB70000000000000000000000000E00000420073 +:10EB600000000000000000000000000000000000A5 +:10EB70000000000000000000000000000000000095 :10EB80000000000000000000000000000000000085 -:10EB9000000000E00000000A00000000000000008B -:10EBA000000000000000000000000000070000005E -:10EBB0000000000081818D8D000000000000000039 -:10EBC0000000000000000000FF00FF007E7EFCFC53 +:10EB90000000000000000000000000000000000075 +:10EBA0000000000000000000000000000000000065 +:10EBB0000000000000000000000000000000000055 +:10EBC0000000000000000000000000000000000045 :10EBD0000000000000000000000000000000000035 -:10EBE00000000000000000007E7E42423F663F665B -:10EBF0000000000000000000000087878787FF00FA -:10EC0000F0F0000000000000000000000000000024 -:10EC1000000000000000909F0303F0A0F0B000008F -:10EC2000000000000000000000003F033F03F0F080 -:10EC3000DBDB00000000B1B1BDBD00000000000042 -:10EC400000000000000000000000C0C0FCFC4242C8 -:10EC5000C0C0000000000000000000000000000034 -:10EC6000000000000000DB00DBDB7E427E423066FD -:10EC7000306600000000000000000000E781E7E7C8 -:10EC8000FF00F0F0000000000000000000000000A5 -:10EC90000000000000000000909FF3F3F020F0302F -:10ECA000FF2F0F2F00000000000000003F033F0374 -:10ECB000F0F04242000000000000000000000000F0 +:10EBE0000000000000000000000000000000000025 +:10EBF0000000000000000000000000000000000015 +:10EC00000000000000000000000000000000000004 +:10EC100000000000000000000000000000000000F4 +:10EC200000000000000000000000000000000000E4 +:10EC30000000000000003C3C3C0000000000000020 +:10EC400000000000000000000000000000000000C4 +:10EC500000000000000000000000000000000000B4 +:10EC600000000000000000000000000000000000A4 +:10EC70000000000000000000000000000000000094 +:10EC80000000000000000000000000000000000084 +:10EC90000000000000000000000000000000000074 +:10ECA0000000000000000000000000000000000064 +:10ECB0000000000000000000000000000000000054 :10ECC0000000000000000000000000000000000044 :10ECD0000000000000000000000000000000000034 :10ECE0000000000000000000000000000000000024 @@ -126704,495 +126704,495 @@ :10ED00000000000000000000000000000000000003 :10ED100000000000000000000000000000000000F3 :10ED200000000000000000000000000000000000E3 -:10ED30000000000000002C2C080860F960F90000B9 -:10ED4000000000000000000000000000000000FFC4 -:10ED500000FF90F690F600000000000000000000A8 -:10ED60000000000000000000000000FF002CFFC3B6 -:10ED7000FFC30000C7F70000000000000000000013 -:10ED80000B08080801C10FCF0000000000000000C0 -:10ED90000000000000000000000000003C3C3C3C83 -:10EDA000662066000000FFFF000000009090999927 -:10EDB0000CCF8D8DF6F63C3C0000000060F960F948 +:10ED30000000000000000404242430F09190000042 +:10ED400000000000000000000000000000000000C3 +:10ED500000000000000000000000000000000000B3 +:10ED600000000000000000000000000000000000A3 +:10ED70000000000000000000000000000000000093 +:10ED80000000000000000000000000000000000083 +:10ED90000000000000000000000000000000000073 +:10EDA0000000000000000000000000000000000063 +:10EDB00000000000000000000404242400009999D1 :10EDC0000000000000000000000000000000000043 -:10EDD0003030F3F3006699FF0000000000000000EF -:10EDE00000000000000000000000000000FF002CF8 -:10EDF00000F900600000073700000000000000007C -:10EE00000000FBF8F8F80DCD0FCF00000000000067 -:10EE10000000000000000000000000000000FFF6FD -:10EE200099F6662466240000EFEF00000000000061 -:10EE300009090CCF8D8D06063C3C00614004000D95 -:10EE4000000000610006000D000000610006000DDA -:10EE500000000061000E000D000000610006000DC2 +:10EDD0000000000000000000000000000000000033 +:10EDE0000000000000000000000000000000000023 +:10EDF0000000000000000000000000000000000013 +:10EE00000000000000000000000000000000000002 +:10EE100000000000000000000000000000000000F2 +:10EE200000000000000000000000000000000000E2 +:10EE30000000000000000000000005614A3AC50122 +:10EE400000A500610006C0090000000000000000ED +:10EE500000000000000000000000000000000000B2 :10EE600000000000000000000000000000000000A2 -:10EE70000000000000080000000000000061000623 -:10EE8000000D0000006130050009000100000000D5 -:10EE90000000000000610006000D00000061000796 -:10EEA000001D000000000000000000010000000044 -:10EEB000000000000061000E000D0000FF0FFF0FBA -:10EEC000CFCFFF3C00000000F0ACFFAC9693AAAFA0 -:10EED000F0F000F000A000A0005500553CAA3CFF57 -:10EEE000003C003C000000000000000000000000AA +:10EE70000000000000000000000000000000000092 +:10EE80000000000000000000000000000000000082 +:10EE90000000000000000000000000000000000072 +:10EEA00000000000000000000000000000610006FB +:10EEB000000D000000610006000D0000C3C0C3800B +:10EEC000F0F0F0F0000000005F0F0F0F00000000F6 +:10EED0000000000000000000000000000000000032 +:10EEE0000000000000000000000000000000000022 :10EEF0000000000000000000000000000000000012 -:10EF0000000082B2BEB2FFFFF0F07D3C7D3C00000D -:10EF10000000000000005A0A5000AF0F8F8F000061 +:10EF00000000000000000000000000000000000001 +:10EF100000000000000000000000000000000000F1 :10EF200000000000000000000000000000000000E1 -:10EF3000000000000000000000000000FD0DFF0FB9 -:10EF4000F0007D7DFF3C0000000000AC0FAC96930C -:10EF5000AAAFF0F000F000A000A0007500F73C00A0 -:10EF60003C55003C003C0000000000000000000098 +:10EF300000005540FFC0000000000000FFFFC3C0FC +:10EF4000C380F0FAF0FF000000000F0F0F0F000069 +:10EF500000000000000000000000000000000000B1 +:10EF600000000000000000000000000000000000A1 :10EF70000000000000000000000000000000000091 -:10EF80000000000082B2BEB2FFFFF0FFFFFFFFFFF4 +:10EF80000000000000000000000000000000000081 :10EF90000000000000000000000000000000000071 :10EFA0000000000000000000000000000000000061 -:10EFB0000000000000000000000000000000FD0D47 -:10EFC00000000000303F303F000000000000000063 -:10EFD000000000006969556940C040C04050607041 -:10EFE0000000FFFF00000000000000000000000023 +:10EFB000000000000000AA8000000000F270F27063 +:10EFC000FFC35040F3F0F1F000000000000000002B +:10EFD0000000000000000000000000000000000031 +:10EFE0000000000000000000000000000000000021 :10EFF0000000000000000000000000000000000011 -:10F000000000000000000000000000050A0A4F1C7C -:10F010000F14000000000000000000000000C3000A -:10F02000C3C340E045E50000000000000000000010 -:10F0300000000000000000000000000000000222AC -:10F04000032300000000303F303F000000000000BC -:10F0500000000000000033330F3350F050F0005038 -:10F06000207000FF00FF0000000000000000000012 +:10F000000000000000000000000000000000000000 +:10F0100000000000000000000000000000000000F0 +:10F0200000000000000000000000000000000000E0 +:10F030000000000000000300020000000000FFC309 +:10F0400000C3FFC30000F3F3F3F30000000000006F +:10F0500000000000000000000000000000000000B0 +:10F0600000000000000000000000000000000000A0 :10F070000000000000000000000000000000000090 -:10F0800000000000000000000000000001F50AFA86 -:10F09000FFF5FFA0000000000000000000000000DD -:10F0A000C7CFC7CF4AEA4FEF0000000000000000C2 -:10F0B0000000000000000000000000000000000050 -:10F0C00000200121101020000400000584102003FE -:10F0D0008804880021100040890004A0040404056D -:10F0E0002080208088102004208440048800880527 -:10F0F00020000202200010004000200010098408B7 -:10F1000040082000000320008941C000108304044F -:10F1100000004000400020108800200020000585ED -:10F120001002840220202002200420008904001004 -:10F1300084048310C10404002003880088040000B4 -:10F140008810840440114000000009002000204085 -:10F15000104000001000048409010400C111900057 -:10F1600080024020002010A00300050400000000E1 -:10F17000040200000090400000201020400002081F -:10F1800040040900000000004100080209000010CE -:10F190004088000000C000001000200000001104A2 -:10F1A000C010400100030003C19000018400200151 -:10F1B000000000022008204009004000004000003C -:10F1C0001000110005022000000802100804400988 -:10F1D0002008000900000803040401058904021046 -:10F1E000040004040410001082040205000402104C -:10F1F000020800030004040000050010021004804F -:10F200000000008008050008000004400400A0037E -:10F21000040400050000A01020108410000010411C -:10F2200002030210848901800802820401000000A8 -:10F230000000880401088290040002040000080015 -:10F24000092001104005019088830488808400848F -:10F250008010000404840000C01089840410088217 -:10F260004085838480088084208404838508000985 -:10F270000408041020080000000809080484090894 -:10F2800000100088040204884084000040840008C4 -:10F2900000080308000810040409048302040400A1 -:10F2A0000484090804020420042085110085040850 -:10F2B00000080408418320840004008200881108AB -:10F2C000C04008840884A004080204020005000865 -:10F2D000000800080021000808050040040820205C -:10F2E0000490890300082003820800000808000237 -:10F2F000C00000041003000300210040000500408E -:10F300000005841000412021200940020000004037 -:10F310000020C005000020002083002100100041D3 -:10F320000005000500100408000000080008018323 -:10F330000410001040C004082000000800A190083C -:10F34000002100002008000884080941000800A0EE -:10F3500009000000000000A00000410000000000C3 -:10F36000000980410810038400000000040800A088 -:10F3700000020000000100880040000800A1418256 -:10F380000000410000000884008200A0800000000E -:10F3900000032120030041020400110200A000002C -:10F3A000031000A00382000080000000004008005D -:10F3B000402080000801C1200000800010200002D1 -:10F3C0000000000008008082410000004000210091 -:10F3D00008001000080000028240C0000821080058 -:10F3E00002030420400000C1A0000800000000202B -:10F3F000900082A18211000008000009400008006E -:10F400000400820008000400004000090005040018 -:10F41000000004080805042008400005040908410C -:10F42000820082000200400004002003091100094C -:10F43000030004092011101004410900A0800000FD -:10F4400008401003C0050810000408111004031040 -:10F45000001100040000100000A010010010008244 -:10F460002008000088C000100820001000200000C4 -:10F470000301000840044040400000C011000000AB -:10F480000000418400A0000000840000000000840F -:10F490000000000000000000218200100800210090 -:10F4A00000C000A01004100010000900000004407B -:10F4B00000000400800880004000800020C000049C -:10F4C000218203041120110004204003048800005D -:10F4D00040010010004100408402822100000041F0 -:10F4E0000000900200008403840000080003040070 -:10F4F0000040820810200000A00000210085C0000C -:10F500000000084000100000002100020202042157 -:10F51000088904C000000040002000020000000034 -:10F52000080800000000C00800080020882008002B -:10F5300000900800100001414000200000830009F5 -:10F5400002000821000308028240002190031003FA -:10F5500090054082C041000000000402000000004D -:10F560000000000000000020000005000500080861 -:10F5700080040088088400000000000000000040B3 -:10F5800000000000800010000504000405010001D7 -:10F590000088000203020000000000A00800020032 -:10F5A00008821190118800820000000000200800ED -:10F5B00000000002210000002000830083000804F6 -:10F5C000218200002008020000000000000200006C -:10F5D000200002008003080000110000000300006A -:10F5E0000203000000001100100084008408018064 -:10F5F00000410000820000000003008000000004C1 -:10F600000021000000109000004000210041000592 -:10F61000004008048202000400000288100000215B -:10F6200084000000000800210008882190000800E4 -:10F630000000880000080021C000090402000382C5 -:10F6400040000021822120080003C00000000000CB -:10F6500008000004051008108210200000000000BF -:10F660000000000000000000400021000210000423 -:10F6700040400800020000000040000000040000BC -:10F68000000103A000000001008240000000000013 -:10F69000200803000000000111000000001000001D +:10F080000000000000000000000000000000000080 +:10F090000000000000000000000000000000000070 +:10F0A0000000000000000000000000000000000060 +:10F0B00000000000000000000F000A000000000037 +:10F0C00053C353C300000000000000000000000014 +:10F0D0000000000000000000000000000000000030 +:10F0E000020000000000000000000000000000001E +:10F0F0000000000000000000000000000000000010 +:10F1000020000000000200000000000000000000DD +:10F1100000000000000000000000000000000000EF +:10F1200000002000000800000000000002000000B5 +:10F1300000000000000800000000000000000000C7 +:10F1400000000000010000000000000000000000BE +:10F15000000000000000400000000000000000006F +:10F16000000000000000000000000000000000009F +:10F17000000000000000400000000000000000004F +:10F18000000000000000000000000000000000007F +:10F19000000000000002000000000000000000006D +:10F1A000000000000000000000000000000000005F +:10F1B000000000000000004000000000000000000F +:10F1C0000002000000002000020002000000000019 +:10F1D0000000000008000200020000000200000021 +:10F1E000000000000200000000000000000000001D +:10F1F000000000000000000000000000000000000F +:10F2000000000000000000000000000000000000FE +:10F2100000000000000002000000000000000000EC +:10F2200000000000000002000200000000000200D8 +:10F2300000000000020002000200040004000000C0 +:10F24000000000000000000000000000004000007E +:10F2500000000000000000000000000000000000AE +:10F26000000000000000000000000000000000009E +:10F27000000000000000000000000000000000008E +:10F28000000000000000000000000000000002007C +:10F29000000000000000000000000000000000006E +:10F2A0000000000000000400000000000000040056 +:10F2B000000000000000000000000000000000004E +:10F2C0000000000000000000000000080000000036 +:10F2D00000000000000000000000820000000000AC +:10F2E000000000000000000000000000000000001E +:10F2F000000000000000000000000000000000000E +:10F3000000000000000000000000000000000000FD +:10F3100000000000000000000000000000000000ED +:10F3200000000000000000000000000000000000DD +:10F330009000040040004000000004004000400035 +:10F34000000000000000040000000010040000C0E5 +:10F350000000000000C000000000000000000000ED +:10F36000000000000000000000000000000000009D +:10F37000000000000000000000000000000000008D +:10F38000000000000000000000000000000000007D +:10F39000000000000000000000000000000000006D +:10F3A000000000000000000000000000000000005D +:10F3B00000000400000000000020000000A0000089 +:10F3C0000020000000000000000802000000000013 +:10F3D00000000000000000000000004000400000AD +:10F3E00000000000000000400000000000000000DD +:10F3F000000000000000000000000000000000000D +:10F4000000000000000000000000000000000000FC +:10F4100000000000000000000000000000000000EC +:10F4200000000000000000000000000000000000DC +:10F4300000000000000000000000000000000000CC +:10F4400000000000000000000000000000000800B4 +:10F4500000000000000000000000000000000000AC +:10F46000000000000000000000000000000000009C +:10F47000000000000000000000000000000000008C +:10F48000000000000000000000000000000000007C +:10F49000000000000000000000000000000000006C +:10F4A000000000000000000000000000000000005C +:10F4B000000000000000000000000000000000004C +:10F4C0000000000000000000000000000000000438 +:10F4D0002004000000000000000000000000000008 +:10F4E000000000000000000000000000000000001C +:10F4F000000000000000000000000000000000000C +:10F5000000000000000000000000000000000000FB +:10F5100000000000000000000000000000000000EB +:10F5200000000000000000000000000000000000DB +:10F5300000000000000000000000000000000000CB +:10F5400000000000000004000000000000000000B7 +:10F5500000000000000000000000000000000000AB +:10F56000000000000000000000000000000000009B +:10F57000000000000000000000000000000000008B +:10F58000000000000000000000000000000000007B +:10F59000000000000000000000000000000000006B +:10F5A000000000000000000000000000000000005B +:10F5B000000000000000000000400000000000000B +:10F5C00000000000000800000000000000104000E3 +:10F5D000001000A0000841000004000900400000E5 +:10F5E000000000000000000000000000000000001B +:10F5F000000000000000000000000000000000000B +:10F6000000000000000000000000000000000000FA +:10F6100000000000000000000000000000000000EA +:10F6200000000000000000000000000000000000DA +:10F6300000000000000000000000000000000000CA +:10F6400000000000000000000000000000000000BA +:10F6500000000000000000000000000002000000A8 +:10F660001100000000000000000000000000000089 +:10F67000000000000000000000000000000000008A +:10F68000000000000000000000000000000000007A +:10F69000000000000000000000000000000000006A :10F6A000000000000000000000000000000000005A -:10F6B00000000000110000902008000004000288F3 -:10F6C00004040200000041002100000020040004A6 -:10F6D0001104088221000840404108050000010093 -:10F6E00090000000C00000000000900000889040E2 -:10F6F00008408290020200020000000001000000A9 -:10F700004101000100A00008000000080000010005 -:10F710001000100000000000400100010000400245 -:10F7200000040088400420010000000110000000D7 -:10F730000000000000000100000140000001000185 -:10F740009000020108000000000088000000000096 -:10F750000000040000000000080000A100020000FA -:10F760000300000000008000000000000000008096 -:10F7700080000000800080800080000000002009E0 -:10F780002100400800100080008000000080000080 -:10F79000210080008000000000020008002100001D -:10F7A000008000000080000000080011004080057B -:10F7B00000000000000000001005402100090004C6 -:10F7C000000280028811804000000000020000005A -:10F7D000000005008200000009209021008500093A -:10F7E0000000000000000000000000008000000099 -:10F7F0000000000080000000800000000000800089 -:10F8000000002000000008088000000300008000C5 -:10F81000000000009000890908000000100010108E -:10F820000000800080058080800080008000001142 -:10F83000002000000000000000008200028520007F -:10F8400008C08905100000040003004000000011FA -:10F850000000890002001140110003800000C084F4 -:10F8600090A000000800100040400800880002003E -:10F87000020000000288A000908802004000009072 -:10F8800090008410C10000008501880002018800FA -:10F89000020200000000A100080000840000010036 -:10F8A0000001000010000200A00208000400400057 -:10F8B000820000000000000000000000080000209E -:10F8C0000088834090C011848801108300010000EB -:10F8D0000000000088000000040182004140040094 -:10F8E000A1A082100000000020000001000200889A -:10F8F0000000001102000002109004A0200200008D -:10F90000009002200000000100010000008800209B -:10F910000020000000880002000500100000000028 -:10F92000010100010000402000002000A0020000B2 -:10F9300001100182008200000000000000000100B0 -:10F9400001012101000101028488850901040000F0 -:10F950008200000000010084000100050100C002D7 -:10F960000388A08282100011004100100010008363 -:10F97000000300000010090000A000A0800000802B -:10F980000000008080000009211002080000000033 -:10F990000000000000000004008900210085000430 -:10F9A00000200421002000008000000000008000F2 -:10F9B0000000088008000080000000000000000037 -:10F9C00041200410822100044003119011A1028201 -:10F9D0000040800000000504002000030021110900 -:10F9E000804103049080908000000000000000002F -:10F9F00000000000000000000040000800808000BF -:10FA00008011800880800000091003800900000830 -:10FA100000000000800080000000100203000400CD -:10FA2000210004001100040000000002008080009A -:10FA300000002100041004801100000000000000FC -:10FA4000000020111121210040022011118908001D -:10FA5000040300000000000000000080000000001F -:10FA6000000800A121902100031000000090001068 -:10FA7000000000000088009000000000C04100402D -:10FA8000A0000201040140040000000000100084F6 -:10FA90000001100002000882A00000000102010025 -:10FAA0000000010001000000010000008800C020EB -:10FAB0000890C000010000100010000000000000CD -:10FAC000000000002100A01091C0A0000121012031 -:10FAD00001C00000000000000000000000C0009015 -:10FAE00000100001002110108900880000000000B3 -:10FAF00000000000000000000000600000000000A6 -:10FB0000070000000000000007000000000000E007 +:10F6B000000000000000000000000000000000004A +:10F6C000000000000000000000000000000000102A +:10F6D000000000000082000000A000840000000084 +:10F6E000000000000000000000000000000000001A +:10F6F000000000000000000000000000000000000A +:10F7000000000000000000000000000000000000F9 +:10F7100000000000000000000000000000000000E9 +:10F7200000000000000000000000000000000000D9 +:10F7300000000000000000000000000000000000C9 +:10F7400000000000000000000000000000000000B9 +:10F7500000000000000000000000010000000000A8 +:10F760000000000000000000000000000000000099 +:10F770000000000000000000000000000000000089 +:10F780000000000000000000000000000000000079 +:10F790000000000000000000000000000000000069 +:10F7A0000000000000000000000000000000000059 +:10F7B0000000000000000000000000000000000049 +:10F7C0000000000000000000000000000000000039 +:10F7D0000000000000000000000011000400000014 +:10F7E0000000000000000000000000000000000019 +:10F7F0000000000000000000000000000000000009 +:10F8000000000000000000000000000000000000F8 +:10F8100000000000000000000000000000000000E8 +:10F8200000000000000000000000000000000000D8 +:10F8300000000000000000000000000000000000C8 +:10F8400000000000000000000000000000000000B8 +:10F8500000000000000000000000000000000000A8 +:10F860000000000000000000000000000000000098 +:10F870000000000000000000000000000000000088 +:10F880000000000000000000000000000000000078 +:10F890000000000000000000000000000000000068 +:10F8A0000000000000000000000000000000000058 +:10F8B0000000000000000000000000000000000048 +:10F8C0000000000000000000000000000000000038 +:10F8D0000000000000000000000000000000000028 +:10F8E0000000000000000000000000000000000018 +:10F8F0000000000000000000000000000000000008 +:10F9000000000000000000000000000000000000F7 +:10F9100000000000000000000000000000000000E7 +:10F9200000000000000000000000000000000000D7 +:10F9300000000000000000000000000000000000C7 +:10F9400000000000000000000000000000000000B7 +:10F9500000000000000000000000000000000000A7 +:10F960000000000000000000000000000000000097 +:10F970000000000000000000000000000000000087 +:10F980000000000000000000000000000000000077 +:10F990000000000000000000000000000000000067 +:10F9A0000000000000000000000000000000000057 +:10F9B0000000000000000000000000000000000047 +:10F9C0000000000000000000000000000000000037 +:10F9D0000000000000000000000000000000000027 +:10F9E00000020010000200090000000000000000FA +:10F9F0000000000000000000000000000000000007 +:10FA000000000000000000000000000000000000F6 +:10FA100000000000000000000000000000000000E6 +:10FA200000000000000000000000000000000000D6 +:10FA300000000000000000000000000000000000C6 +:10FA400000000000000000000000000000000000B6 +:10FA500000000000000000000000000000000000A6 +:10FA6000000000090000000000000000000000008D +:10FA70000000000000000000000000000000000086 +:10FA80000000000000000000000000000000000076 +:10FA90000000000000000000000000000000000066 +:10FAA0000000000000000000000000000000000056 +:10FAB0000000000000000000000000000000000046 +:10FAC0000000000000000000000000000000000036 +:10FAD0000000000000000000000000000000000026 +:10FAE0000000000000000000000000000000000016 +:10FAF0000000000000000000000000000000000006 +:10FB000000000000000000000000000000000000F5 :10FB100000000000000000000000000000000000E5 :10FB200000000000000000000000000000000000D5 :10FB300000000000000000000000000000000000C5 -:10FB4000000000000000000000000700600000004E -:10FB500000E007000000000000E00000000082005C -:10FB600000E0000042000000000000006000000013 -:10FB700000000000000000000000D7D72727003C4D -:10FB8000003CF0000000F000AAF00069147D0000C5 -:10FB9000000000000000F03CF03C30F330F30000C7 -:10FBA0000000FFFFF0F00000000000000000000077 -:10FBB000F01000107D7D2828000000005F505F5F7E -:10FBC0000000000000000000413F41030000000071 -:10FBD00000000000FFFFC3C30000000000000000A1 -:10FBE000000000003C003C0028A028A0C0C300008A -:10FBF000000000000000000000000000C3C3333319 -:10FC0000003C003C00000000F000AAF00069147DF8 -:10FC100000000000000000000000FF0030F330F39F -:10FC2000000000003C3C00FF00000000000000005D -:10FC30000000F0D000D0D7D78282000000005050E2 -:10FC4000505F00000000000000007D3F7D030000C9 -:10FC5000000000000000FF0FC303000000000000D0 -:10FC60000000000000003C003C0028A028A0C0C309 -:10FC70000000000000000FF00AF5000000009CA04A -:10FC8000C9F500000000500000005500FF553F3F3F -:10FC9000030300000000BABA8282003CC3C3FFFF26 -:10FCA000000000000000AA0000FF000000000000AB -:10FCB000000000001400040055557D7D0000000088 -:10FCC0001C3C1C3C00000000000000000000000084 -:10FCD0000000555500000000553C0FFF00000000DB -:10FCE00000000000000000002828287D0D0D0D0DEB -:10FCF000FFEFF0E000000000F0F0F5F5000000007C -:10FD00009C9CC9C9040C000000000000550000556F -:10FD1000C3C3000000000000BABABABA003CC3C3B3 -:10FD2000FC0CFC0C00000000AA0000FF000000001A -:10FD300000000000000014001400F1B0F1B0000059 -:10FD400000001C0C1C0C0000000000000000000063 -:10FD5000000028287D7D00000000553C0F000000B9 -:10FD6000000000000000000000007D7D287D0808E4 -:10FD70000808FFEFF0E000610006000D00010061DF -:10FD80000006001D000085614A0E051D00A100004F -:10FD900000080000000000610001000100010000F7 -:10FDA00040000010000000610006000D000000612E -:10FDB0000006000D000000008000000000100000A0 -:10FDC00000610006000D00000000000000000000BF -:10FDD00005610A0E050D00A005610A0F050D00A1C1 -:10FDE000006100070009000000610006C019000062 -:10FDF00000610006000D0000000000000F33F0332A -:10FE0000000000003C3C303000000000AAA0AAA086 -:10FE10000000000000000000FF00FF008EFF8EFFCA -:10FE20000000000000000000C0FFC0FF5FFFCFFF28 -:10FE3000C3616161A0B4E1F50000000000000000B2 -:10FE400000003C303C3000000000000000000000DA -:10FE50000000C3C30000FFF0AA3CF60000F600005B -:10FE6000002000000000AAAA3C3C00000000F0F7BF -:10FE7000F8FF00D000D03030303000000000AF93E9 -:10FE80005093000000003C3C303000000000AAA06D -:10FE9000AAA000000000000000000F0F55558E00C2 -:10FEA0008E0000000000000000003CFF3CFF00A0AE -:10FEB000003000000000A0B4E1F5000000000000E8 -:10FEC0000000000000003C000000000000000000F6 -:10FED0000000000003F3000000F0AA3CF6F6F6F67E -:10FEE0000000002000000000AAAA3C3C0000000026 -:10FEF000D0D7D0D7D0D0D0D03C3C3C3C0000000084 +:10FB400000000000000000000000000000000000B5 +:10FB500000000000000000000000000000000000A5 +:10FB6000000000000000810000E000000000000034 +:10FB70000000000000000000000000000000000085 +:10FB80000000000000000000000000000000000075 +:10FB90000000000000000000000000000000000065 +:10FBA0000000000000000000000000000000000055 +:10FBB0000000000000000000000000000000000045 +:10FBC0000000000000000000000000000000000035 +:10FBD0000000000000000000000000000000000025 +:10FBE0000000000000000000000000000000000015 +:10FBF0000000000000000000000000000000000005 +:10FC000000000000000000000000000000000000F4 +:10FC100000000000000000000000000000000000E4 +:10FC200000000000000000000000000000000000D4 +:10FC300000000000000000000000000000000000C4 +:10FC400000000000000000000000000000000000B4 +:10FC500000000000000000000000000000000000A4 +:10FC60000000000000000000000000000000000094 +:10FC70000000000000000000000000000000000084 +:10FC80000000000000000000000000000000000074 +:10FC90000000000000000000000000000000000064 +:10FCA0000000000000000000000000000000000054 +:10FCB0000000000000000000000000000000000044 +:10FCC0000000000000000000000000000000000034 +:10FCD0000000000000000000000000000000000024 +:10FCE0000000000000000000000000000000000014 +:10FCF0000000000000000000000000000000000004 +:10FD000000000000000000000000000000000000F3 +:10FD100000000000000000000000000000000000E3 +:10FD200000000000000000000000000000000000D3 +:10FD300000000000000000000000000000000000C3 +:10FD400000000000000000000000000000000000B3 +:10FD500000000000000000000000000000000000A3 +:10FD60000000000000000000000000000000000093 +:10FD70000000000000000000000000000000000083 +:10FD80000000000000000000000000000000000073 +:10FD90000000000000000000000000000000000063 +:10FDA0000000000000000000000000000000000053 +:10FDB0000000000000000000000000000000000043 +:10FDC0000000000000000000000000000000000033 +:10FDD0000000000000000000000000000000000023 +:10FDE0000000000000000000000000000000000013 +:10FDF00000610007C00900000000000000000000D2 +:10FE000000000000000000000000000000000000F2 +:10FE100000000000000000000000000000000000E2 +:10FE200000000000000000000000000000000000D2 +:10FE300000000000000000000000000000000000C2 +:10FE400000000000000000000000000000000000B2 +:10FE500000000000000000000000000000000000A2 +:10FE60000000000000000000000000000000000092 +:10FE7000000000000000C0000300000000000000BF +:10FE80000000000000000000000000000000000072 +:10FE90000000000000000000000000000000000062 +:10FEA0000000000000000000000000000000000052 +:10FEB0000000000000000000000000000000000042 +:10FEC0000000000000000000000000000000000032 +:10FED0000000000000000000000000000000000022 +:10FEE0000000000000000000000000000000000012 +:10FEF0000000000000000000000000000000000002 :10FF000000000000000000000000000000000000F1 -:10FF1000000000000000000000000000FCFC5C5C31 -:10FF20000F0FAAAA0000000000000000000000005F -:10FF3000FFFFFF000000000000FF3C3C000000004D -:10FF400000000000000040003C0000000000000035 -:10FF500000000000000055155515000000200E0B94 -:10FF6000B0E0202020200000000000000000000081 -:10FF70000000001C003CFFAA55000000000000002B +:10FF100000000000000000000000000000000000E1 +:10FF200000000000000000000000000000000000D1 +:10FF300000000000000000000000000000000000C1 +:10FF400000000000000000000000000000000000B1 +:10FF500000000000000000000000000000000000A1 +:10FF60000000000000000000000000000000000091 +:10FF70000000000000000000000000000000000081 :10FF80000000000000000000000000000000000071 -:10FF900000000000000000000000000000000C0C49 -:10FFA0005C5C0F0FAAAA0000000000000000000027 -:10FFB0000000FFFFFF00F3FFF3FF00FF3C3C0000E9 -:10FFC0000000000000000000000C000C0000000019 -:10FFD00000000000000000005554511000000020F7 -:10FFE000BEEBBEEB000000000000000000000000BF -:10FFF00000000000000C002C2D2D2D2D0082000093 +:10FF90000000000000000000000000000000000061 +:10FFA0000000000000000000000000000000000051 +:10FFB0000000000000000000000000000000000041 +:10FFC0000000000000000000000000000000000031 +:10FFD0000000000000000000000000000000000021 +:10FFE0000000000000000000000000000000000011 +:10FFF0000000000000000000000000000000000001 :02000004001FDB -:1000000004080010C00588050200040084004003B5 -:1000100041008984200089100510C0048800C000B8 -:100020000504A002200520000403A0004100408038 -:100030000405040204054083C100041021000210DD -:100040000003881020108804040040028883000800 -:10005000C00420008400200520030400200020802C -:10006000210210008489C000C104200420008804FB -:1000700020802082C00020004002200488C0200090 -:1000800020822000000204840000000040002100C3 -:1000900000004000200400000800400005000000AF -:1000A000000040A004000000020200000402400022 -:1000B0000402000080004000044020008000040092 -:1000C0000900000000001000090000000090090273 -:1000D0002002200000004100000010400000C1A0EC -:1000E00000040840020040100200400009004000E7 -:1000F000009009101010400000040005400000208E -:10010000000040210010000000090810000408054C -:1001100090000410900409880890000290031009D0 -:100120000809840208080000C010000490880041FB -:10013000400002020104002001A00803082002A0E0 -:100140000010008500000005000500050200000009 -:100150000004000082100800900400100400001049 -:1001600000A0088502A004080008000000080400A0 -:100170000041848800100009040401104009A040D7 -:100180008309080404100004418820408284001080 -:100190004004050840080084A004C00200850088CF -:1001A00000C0A082028380100410030805840002AE -:1001B00000828410411104082083041102080901FF -:1001C000000541844004000000C00408001000083D -:1001D0000484048402840990000800080282000854 -:1001E0004101000500044005001020840988051025 -:1001F00040080910400204000010408440028010B2 -:100200000088040000000904002100000000904163 -:1002100090080004880000400003C0000021000591 -:10022000202100050008000000411008000500081A -:10023000002109080008010804030000000800026A -:10024000080420118802002000008808000300092B -:10025000004100080840904040400005000590081B -:1002600002050120022000A0000802030003102163 -:1002700000118400002100090008C00004100003E0 -:10028000000500050008000001000000000800A0B3 -:10029000000000001182090204004100002000005B -:1002A000090800C0000000A00000002005001000A8 -:1002B00000820010C01000004000008421080000EF -:1002C0000000880100000300020100000840004017 -:1002D0000002022000880000001080A0218241A0BE -:1002E0002100001040011000000200824100008443 -:1002F0000000080010C00084008800002008412091 -:100300000000050800104102000204C00000820045 -:100310000200082000008403041000029000C021A5 -:1003200004008200C0020000C0109021A041822081 -:100330008211C01010000000080882000980040229 -:100340008405088901002000200904000000A000A5 -:100350008400A00004000800A000C102A0008200E8 -:1003600008001000A00004800400C1000410A002D6 -:100370000010000088090040A0000010A0404000CC -:10038000A00504090840050508059000001100A01B -:1003900008820082000008A000C01085000108103B -:1003A000008400840000099140000400000803A0BC -:1003B000032002401084089004C0408440C0042000 -:1003C0008000000021200800C108904084C0000087 -:1003D0000000009041C00000000000084000000044 -:1003E0000040008200840382800480202084808278 -:1003F00000014184028821C000A000040084008420 -:10040000200009000000000002880040008440C075 -:10041000001100000008000000054008080000006E -:100420000008080000000800084100008202841053 -:100430000000000520000000002100218210900033 -:1004400000000000824000030021000000050808B1 -:1004500000000000000000000800001008008200FA -:1004600000008221820200008400900808020584B6 -:100470000140004082400810000200108240A000AD -:1004800000400000080004210000000310201008B4 -:10049000000810002000080000000000000409020D -:1004A00000C00000008405840084000003000010E8 -:1004B000008808080000030000A000000088001069 -:1004C000000000000382000000000000080021027C -:1004D000009000000000000803000000000009A0D8 -:1004E00000A0000400000000030000000300000161 -:1004F000840440A008000000000800880090000864 -:100500000000004000A021000000008200080084DC -:10051000000400A00000000500000000000082218F -:1005200000210900000220218408000084C100216C -:1005300000100021000004050000820400080840AB -:100540000002082100C00020084100210421010010 -:1005500009880084000000048221000882218400B0 -:100560000000400010000002C000820010000810CF -:10057000401000208282000090001008044100001A -:100580000240000000000011000840088205C10080 -:1005900000100040001100000000000008080000EA -:1005A00000001110080000410000110000000202CC -:1005B00002A00000110800040000000000000284F6 -:1005C00041000341218200410441410000008002BA -:1005D0000408A020030400000000008208000000BE -:1005E000200000002010000000004100000000007A -:1005F000000011050401000500C00004200041C0F6 -:10060000000011000000000000000000208409002C -:100610000890040200A0004000000000000000005C -:1006200008000000900000000021100440A0828813 -:1006300000010000000008000000000000000000B1 -:1006400040A088830040208301A000100000A0008B +:10000000000000000000820000000000000000006E +:1000100004000000040000000000000000000000D8 +:1000200000000000000020000000000000000000B0 +:100030002000000020000000000000000000000080 +:10004000000200000000000020000000000000008E +:100050000000200000002000000000000000000060 +:100060000000000000000000200000000000000070 +:100070000000200002002000081000000000000026 +:1000800000800000000000000002000000000000EE +:100090000000000000000000000000000000000060 +:1000A0000000000000000000000000000000000050 +:1000B0000000000000000000000000000000000040 +:1000C0000000000000000000000000000000000030 +:1000D0000000000000000000000000000000000020 +:1000E0000000000000000000000000000000000010 +:1000F00000000000000080000000800100000000FF +:1001000000000004000000000000000000000000EB +:1001100000000000000000000000040000000000DB +:1001200000000000000000000000000000000000CF +:1001300000000000020000000000000000000000BD +:1001400000000000000000000000000004000000AB +:10015000000000000000000000000200020000009B +:100160000000020002000200000000000000000089 +:1001700002000000000000000400000002008200F5 +:1001800000000000000000C000C0000000000000EF +:10019000000000000000000000000000000000005F +:1001A000000000000000000000000000000000004F +:1001B000000000000000000000000000000000003F +:1001C00000000000000000000000000000008000AF +:1001D000000000000000000000000000000000001F +:1001E000000000000000000000000000000000000F +:1001F00000000000000000000000000000000000FF +:100200000000000000000000880000008200820062 +:1002100000000000000000000000000000000000DE +:1002200000000000000000000000000000000000CE +:1002300000000000000000000000000000000000BE +:1002400000000000000000000000000000000000AE +:10025000000000000000000000000000000000009E +:10026000000000000000000000000000000020006E +:1002700000000000000090000400000000000000EA +:10028000000000000000000000000000000000006E +:10029000000000000000000000000000000000005E +:1002A000000000000000000000000000000000004E +:1002B000000000000000000000000000000000003E +:1002C000000000000000000000000000000000002E +:1002D000000000000000000000000000000000001E +:1002E000000000000000000000000000000000000E +:1002F00000000000000000000000000000000000FE +:1003000000000000000000000000000000000004E9 +:10031000000000000000000000400000000000009D +:1003200000000000000000000000000000000000CD +:1003300000000000000000000000000000000000BD +:1003400000000000000000000000000000000000AD +:10035000000000000000000000000000000000009D +:100360000000000000000000000000000004000089 +:10037000000000000000002000000000000000005D +:10038000004000000000000000000000001011000C +:10039000000000000000000000400000000000001D +:1003A000000000000000000000000000000000004D +:1003B000000000000000000000000000000000003D +:1003C000000000000000000000000000000000002D +:1003D000000000000000000000000000000000001D +:1003E000000000000000000000000000000000000D +:1003F00000000000000000000040000000000000BD +:1004000000000000000000000000000000000000EC +:1004100000000000000000000000000000000000DC +:1004200000000000000000000000000000000000CC +:1004300000000000000000000000000000000000BC +:1004400000000000000000000000000000000000AC +:10045000000000000000000000000000000000009C +:10046000000000000000000000000000000000008C +:10047000000000000000000000000000000000007C +:10048000000000000000000000000000000000006C +:10049000000000000000000000000000000000005C +:1004A000000000000000000000000000000000004C +:1004B000000000000000000000000000000000003C +:1004C000000000000000000000000000000000002C +:1004D000000000000000000000000000000000001C +:1004E000000000000000000000000000000000000C +:1004F00000000000000000200000000000000000DC +:1005000000000000000000000000000000000000EB +:1005100000000000000000000000000000000000DB +:1005200000000000000000000000000000000000CB +:1005300000000000000000000000000000000000BB +:1005400000000000000000000000000000000000AB +:10055000000000000000000000000000000000009B +:10056000000000000000000000000000000000008B +:10057000000000000000000000000000000000007B +:10058000000000000000000000000000000000006B +:10059000000000000000200000001100000000002A +:1005A000000000000000000000000000000000004B +:1005B000000000000000000000000000000000003B +:1005C000000000000000000000000000000000002B +:1005D000000000000000000000000000000000001B +:1005E000000000000000000000000000000000000B +:1005F00000000000000000000000000000000000FB +:1006000000000000000000000000000000000000EA +:1006100000000000000800000000000000000000D2 +:1006200000000000000000000000000000000000CA +:1006300000000000000000000000000000000000BA +:1006400000000000000000000000000000000000AA :10065000000000000000000000000000000000009A -:100660000000000000018200000100000000000006 -:100670000000210020000190A00800A09141A0C02E -:100680000082000001000400000000010100C00120 -:10069000000140890489A1898284000000000000D3 -:1006A0000000000008000000000000208483098290 -:1006B0000000002005100005801000090041000323 -:1006C00000118480000300800010108000000000F2 -:1006D0000000000000000400000000000000000016 -:1006E00000000000000000030000002100000000E6 -:1006F0000000000091048010404100830004418309 -:10070000000400820000200000000000000821100A -:10071000001000028902002009028085000080008C -:100720008000000000000000000000000200400007 -:10073000A00084000000000000000000000000098C -:100740000011000080808408000204A000008040A6 -:100750008000800000210080002100800000000057 -:100760000000000000000400000011001011000053 -:1007700000000000000010828880008508830000CF -:10078000000000100080090090000800210008000F -:10079000110011000820A100A08420110400900085 -:1007A00008000800000000008800000000000100B0 -:1007B0009100A00083000000000000000000000085 -:1007C00000000000000088C00501821103A10200A2 -:1007D000102140889020000100080001000800005E -:1007E00000000000000000000188000000000184FB -:1007F00000000000000000000303059002A083A198 -:1008000000000000000100048400030083000900D0 -:100810000104000000000101889011A09000A000D8 -:1008200000000000000000000089000000900000AF -:10083000C0900110C0850411000000030011008267 -:10084000000001000000000040100004A090A04043 -:10085000880000089000A01000080800008800A090 -:100860000000000000000000000000000000010186 -:10087000000000000000000000000110A09004092A -:100880000502840000008500400000010000000116 -:10089000000000000001080100011003000204C173 -:1008A000891100000000000000000008000900108D -:1008B0000000800411A100A182C0000000884184D2 -:1008C00000000000030003001000008000C1801041 -:1008D0008000400000008000800000808000000058 -:1008E00009000000000000000000000000200000DF -:1008F00005210200000000000000000002A091801D -:100900009182C089001041050511040300200005F3 -:100910000008001100200820902100408021404163 -:1009200005214084000000000000000000080000D5 -:100930000080000010A110800000001000040000E2 -:100940000000000080000000000000000821C00935 -:1009500041008900800080020000800080000002C9 -:1009600000000000000000000000000000002184E2 -:10097000210010000803000000000011000040A04A -:100980000208C180401000000000000000000009C3 -:100990000080008000404180040503000200020046 -:1009A0009004008080400000000000A000000000D3 -:1009B0000090004000000009004000A0000000007E -:1009C0000000000000000200200000008400200160 -:1009D000050040408200020040A08840080002005C -:1009E000A0008800000000000000000000000000DF -:1009F00001080000000001000000000000000000ED -:100A0000908221418490100100000000000000004D -:100A1000000000200008000000A011000900840070 -:100A20008582828900101000000000000000000094 -:100A30000000000000000000000000E00000410095 +:10066000000000000000000000000000000000008A +:10067000000000000000000000000000000000007A +:100680000000000000000000000000000100040065 +:10069000000000000000400000000000000000001A +:1006A000000000000000000000000000000000004A +:1006B000000000000000000000000000000000003A +:1006C000000000000000000000000000000000002A +:1006D000000000000000000000000000000000001A +:1006E000000000000000000000000000000000000A +:1006F00000000000000000000000000000000000FA +:1007000000000000000000000000000000000800E1 +:10071000000000000200040089000000000000004A +:1007200000000000000000000000000000000000C9 +:1007300000000000000000000000000000000000B9 +:1007400000000000000000000000000000000000A9 +:100750000000000000000000000000000000000099 +:100760000000000000000000000000000000000089 +:100770000000000000000000000000000000000079 +:100780000000000000000000000000000000100059 +:100790000000040040000000000000000000000015 +:1007A0000000000000000000000000000000000049 +:1007B0000000000000000000000000000000000039 +:1007C0000000000000000000000000000000000029 +:1007D0000000000000000000000000000000000019 +:1007E0000000000000000084000000000000000085 +:1007F00000000000000000000000000000000000F9 +:1008000000000000000000000000000000000000E8 +:100810000000020004008900000000000000000049 +:1008200000000000000000000000000000000000C8 +:1008300000000000000000000000000000000000B8 +:1008400000000000000000000000000000000000A8 +:100850000000000000000000000000000000000098 +:100860000000000000000000000000000000000088 +:100870000000000000000000000000000000000078 +:100880000000000000000000000000000000000068 +:100890000000000100000001010000010001000053 +:1008A0000001000000000000000000000000000047 +:1008B0000000000000000000000000000000000038 +:1008C0000000000000000000000000000000000028 +:1008D0000000000000000000000000000000000018 +:1008E0000000000000000000000000000000000008 +:1008F00000000000000000000000000000000000F8 +:1009000000000000000000000000000000000000E7 +:100910000000000000040021002111000040004000 +:100920000011004000000000000000000000000076 +:1009300000000000000000000000000000000000B7 +:1009400000000000000000000000000000000000A7 +:100950000000000000000000000000000000000097 +:100960000000000000000000000400000000000083 +:100970000000000000000000000000000000000077 +:100980000000000000000000000000000000000067 +:100990000000000000000082008000000008000449 +:1009A0000000000000000000000000000000000047 +:1009B0000000000000000000000000000000000037 +:1009C0000000000000000000000000000000000027 +:1009D0000000000000000000000000000000000017 +:1009E0000000000000000000000000010000000006 +:1009F00000000000000000000000000000000000F7 +:100A000000000000000000000000000000000000E6 +:100A1000000000000000000000C00082000400018F +:100A200000000000000000000000000000000000C6 +:100A300000000000000000000000000000000000B6 :100A400000000000000000000000000000000000A6 -:100A5000000000000000820000000000070000000D -:100A6000000000E00700000000000000000000009F +:100A50000000000000000000000000000000000096 +:100A6000000000000000000000000000000007007F :100A70000000000000000000000000000000000076 -:100A80000000000000E0070000000000000000007F -:100A90004100000000000000000000000000000015 -:100AA00000000041000007000000000000000000FE -:100AB000000000000000246624660000000003FF20 -:100AC000FC3300000000FFFF00FFFFFF00000000FC -:100AD00000000903F9034F4F40493F19193FFFFF39 -:100AE000F0F0FFF00F003CFF3C00000000000000B1 +:100A80000000000000000000000000000000000066 +:100A900000000000000000000000000000E0000076 +:100AA0008400810000E00000000000000000000061 +:100AB0000000000000000000000000000000000036 +:100AC0000000000000000000000000000000000026 +:100AD0000000000000000000000000000000000016 +:100AE0000000000000000000000000000000000006 :100AF00000000000000000000000000000000000F6 -:100B0000000000000206030F001BC31B00000000D2 -:100B10000000000000000000000000003CF03CF07D -:100B20000000000000C3C3C3000000EF000000008D -:100B300000000000000000002466246600000000A1 -:100B4000C03F30C000000000FFF000F0FF3CFF3C61 -:100B50000000000009F3F9F3FFFF4049CF8989CF76 -:100B60000000F0F0FFF00F003CFF3C000000000030 +:100B000000000000000000000000000000000000E5 +:100B100000000000000000000000000000000000D5 +:100B200000000000000000000000000000000000C5 +:100B300000000000000000000000000000000000B5 +:100B400000000000000000000000000000000000A5 +:100B50000000000000000000000000000000000095 +:100B60000000000000000000000000000000000085 :100B70000000000000000000000000000000000075 -:100B80000000000000000206030F3C1BFF1B0000DA -:100B900000000000000000000000000000003CF029 -:100BA0003CF00000000000FFFFFF00EF00EF00003E +:100B80000000000000000000000000000000000065 +:100B90000000000000000000000000000000000055 +:100BA0000000000000000000000000000000000045 :100BB0000000000000000000000000000000000035 :100BC0000000000000000000000000000000000025 :100BD0000000000000000000000000000000000015 @@ -127201,405 +127201,405 @@ :100C000000000000000000000000000000000000E4 :100C100000000000000000000000000000000000D4 :100C200000000000000000000000000000000000C4 -:100C3000000000000C0C0C0C000000009F9F9F9F08 -:100C400000000020090F0F0F00000000000000004E -:100C50000000000000000000C080C381C300C3008A -:100C600000000066D700D7D7000000000000000099 +:100C300000000000000000000000000000000000B4 +:100C400000000000000000000000000000000000A4 +:100C50000000000000000000000000000000000094 +:100C60000000000000000000000000000000000084 :100C70000000000000000000000000000000000074 -:100C80000000000000000000000027272727F6C210 -:100C9000F634D0E00B07000000000000000009005F -:100CA0000B000000000000000000FFFFF7F3CFCBB7 -:100CB000FFFF000000000CFC0CFC00000000000026 -:100CC00000000000000000060F0F00000000000000 -:100CD00000000000000000000000F090FF99C30336 -:100CE000C3C300000000D7D7D700000000000000F9 +:100C80000000000000000000000000000000000064 +:100C90000000000000000000000000000000000054 +:100CA000000000000000060F00000000000000002F +:100CB0000000000000000000000000000000000034 +:100CC0000000000000000000000000000000000024 +:100CD0000000000000000000000000000000000014 +:100CE0000000000000000000000000000000000004 :100CF00000000000000000000000000000000000F4 -:100D00000000000000000000000000002727272747 -:100D1000F9C1F938DBE7DBE7000000000000000064 -:100D20000D000F000000000000000000FFFFC3C323 -:100D3000CFC3FFFF000000000000000000610006BC -:100D4000000D000000610005000D000000610006BC -:100D5000000D000000610006000D000000610006AB -:100D6000001D000005004A08001000A000610A0FE5 -:100D7000000D00A000000000000000000000006165 -:100D80000006000D000000000000000000000561EA -:100D9000000F050900A000610006000D00000061C1 -:100DA0000006000D000000610006000D00008061DB -:100DB000003E001D000000000000000000000000D8 -:100DC00000008272827200FF0000F020F03000000C -:100DD0000000FFFFFFFF00000000000000000F0305 -:100DE0000B03F000F0000000000000000000000015 +:100D000000000000000000000000000000000000E3 +:100D100000000000000000000000000000000000D3 +:100D200000000000000000000000000000000000C3 +:100D300000000000000000000000000000000000B3 +:100D400000000000000000000000000000000000A3 +:100D50000000000000000000000000000000000093 +:100D60000000000000000000000000000000000083 +:100D700000000000000000000008000000A00000CB +:100D80000000000000000000000000000000000063 +:100D90000000000000000000000000000000000053 +:100DA0000000000000000061000600090001006171 +:100DB0000007C00900000000000000000000000063 +:100DC0000000000000000000000000000000000023 +:100DD0000000000000000000000000000000000013 +:100DE0000000000000000000000000000000000003 :100DF00000000000000000000000000000000000F3 -:100E0000F4A4540482D782D7000000000000000040 -:100E100007D7D0D700FF3C3C0000000069090969F2 -:100E20000000000000C3550FA0EFA0FF41C3F0F089 -:100E30005555FF00AAFFFDFD000000000000000066 -:100E400000000000FF0FFF0F00FF0000F000F01097 -:100E5000000000000FFF0FFF000000000000000076 -:100E600007030303F000F000000000000000000092 +:100E000000000000000000000000000000000000E2 +:100E100000000000000000000000000000000000D2 +:100E200000000000000000000000000000FF00FFC4 +:100E300000000000303080000000000000000000D2 +:100E400000000000000000000000000000000000A2 +:100E50000000000000000000000000000000000092 +:100E60000000000000000000000000000000000082 :100E70000000000000000000000000000000000072 -:100E80000000AAAAAAAA82D782D700000000000008 -:100E900000000BEBE0EB00FF3C3C00000000FF0F0C -:100EA0000FFF00000000FFC3550F00CF00FF4100FF -:100EB000F0F05555FF00AAFFFDFD00000000000006 -:100EC000000000000000000000000000000A0C0FFD -:100ED000050FC33F33CC0000000034F5C1F500001E -:100EE00000003C003C000000F0F0000000000000AA +:100E80000000000000000000000000000000000062 +:100E90000000000000000000000000000000000052 +:100EA0000000000000000000000000000000007FC3 +:100EB000007F0000000000000000000000000000B3 +:100EC0000000000000000000000000000000000022 +:100ED0000000000000000000000000000000000012 +:100EE0000000000000000000000000000000000002 :100EF00000000000000000000000000000000000F2 -:100F000000000000C3C3C3C3C300D7140000000027 -:100F100000000000458ACFCF00002020A2F3F3F3A9 -:100F2000000000000000000043004343C3C3C3C2ED -:100F3000F0C0F0F0AAF0C3005F5FF3F30000000020 -:100F40000000000000000000000000000000000A97 -:100F50000F00050F33FC003C0000000038FAC2FA15 -:100F6000000000003C003C000000F0F00000000029 +:100F000000000000000000000000000000000000E1 +:100F100000000000000000000000000000000000D1 +:100F200000000000000000000000000000000000C1 +:100F3000000041410000000000000000000000002F +:100F400000000000000000000000000000000000A1 +:100F50000000000000000000000000000000000091 +:100F60000000000000000000000000000000000081 :100F70000000000000000000000000000000000071 -:100F800000000000000000FF00FFFF3CD71400003D -:100F900000000000000051A2F3F300000000F3F392 -:100FA000F3F3000000000000000043004343FFFF94 -:100FB000FFFAF000F000AAF0C3FFFFF0F3F304041F -:100FC0000400200089048800840888080000840048 -:100FD00040088404008040052000880400040508BF -:100FE00000002082208020044004C19021002000C5 -:100FF000000440410011400082824008400200038A -:101000004000A08984002040880020200400044083 -:101010008889400040C1000220828810210004001D -:101020000210050004802104200084002004040034 -:101030002000200020000088C0110082400820020B -:10104000890080000010080000000000200000005F -:101050000400000000004010200200000082000098 -:1010600040000000040340400040C1204010C00088 -:101070008900208400080000090000101000850489 -:10108000000005400910040000000000400080003E -:1010900084010040000020100001000200C0400058 -:1010A000000010400882090208000900200000002A -:1010B000200000200000090009100400201000009A -:1010C00009010400100400040020000400000005D1 -:1010D0000104001082041003024184000404020091 -:1010E0000240040400040200000901900210108470 -:1010F00021000100004090040300020400030041AD -:101100000005000000040404000000000041000885 -:101110000089400500029084C00800048841200531 -:10112000040984000009000004890210041000036F -:101130000000000400410000000000090000000061 -:1011400000054040004000880010008503880088AA -:101150000010401000080008001008840588008472 -:10116000008200891000048405100008044105096C -:1011700008208440040800900809048204820008C2 -:1011800000840210000000C105C00004020400C079 -:1011900004880320C0100409000302880009000825 -:1011A00000400082408840040004801000820082D9 -:1011B0000010041009840008041000100310000837 -:1011C0000508000080000003841000210008880842 -:1011D00000210005000800210021842100050000F5 -:1011E0000008401000000005000800050002002073 -:1011F00000C00000008888100083841004040803E5 -:101200000040001000050000000800090003000075 -:101210000021000300880008000400030040004093 -:1012200000040040000000840003C0000209000226 -:101230000000002100080008001000080000004025 -:10124000000000400000001000C0050800C00000C1 -:1012500041040000030000000300210000A003403F -:1012600000101010830000A00010080000A02185CD -:101270000001030508002104088200040810000191 -:10128000000808820000000800000310000000A011 -:10129000030000000900002008002101418421848E -:1012A00000000001004021A0411108A00000000042 -:1012B000002021082100000011100000000005009E -:1012C00000100882001000821000090000000408CD -:1012D00004840940A009C1000800000400030800BC -:1012E000100200408240A0110804080040030021C1 -:1012F0000400C18201040404401040202141214027 -:1013000010058821A04108410000000008002004C9 -:101310000804000408408240822000202010830539 -:1013200040000085841000042000840008C10009EA -:10133000080005000000040000401010000008052F -:1013400090090410101100800804C0058890000066 -:10135000800080100801001040000090000008107C -:10136000020821C1000000900000000040000810A9 -:1013700000040000200204A180A1102011A084021A -:1013800084C004C00000048800040082000000A0A3 -:10139000800800100000008500894085009191A020 -:1013A0000808C000041000110001C1000000A140A5 -:1013B0000808400404080082000003004000000008 -:1013C000A00020080001001004100000008201109D -:1013D000A0100002088582000000400040040000C8 -:1013E000000000000000008802008400A00000212E -:1013F0008402820000400003008000048280820496 -:101400000000008001100210A000A000A021000038 -:10141000000520031008C0080008001009800040E3 -:1014200008C020008200104120030040040400C0D6 -:101430000000004000080020000000090000000338 -:1014400082008400004000210000830000044088E6 -:1014500008820001000003040000400400000000B6 -:1014600008C000000500081000028000000800000D -:10147000000000010000000000000804080900202E -:101480000001000800042008000008000000000817 -:101490000000001080000000041002C000A0042022 -:1014A00000000004800000A00000A00008080083E5 -:1014B000080220840300000020110484000000883A -:1014C0002010000020020000008200A04002000462 -:1014D00020100021082001800010000010000041B1 -:1014E000080504002000822182089003000000000B -:1014F000040808000800C002044104088210000823 -:10150000001020090409400840C12000000090009C -:10151000001100000500010000000021A0100000E3 -:101520000440000040902000200540808800000218 -:10153000201000410404C121000000040003000049 -:1015400000022000000320009000A000000300051E -:101550002010002100008001042000000000001085 -:10156000110480000000110041A0000021000000D3 -:1015700000000000000000000409000000900001CD -:10158000081000C08500030000A000040000000057 -:10159000030400080000208220A0030800020000CD -:1015A000000000000088800380008300800211009A -:1015B0000021000000C0000040000000000000000A -:1015C0000000000000000200004000000040000099 -:1015D0002100020100C000C0000000A00090000037 -:1015E00020008400100000000100200000001021F5 -:1015F0000040001000109088010810080841010800 -:10160000A08382A00003900000000002002000845C -:101610002104C088004000000104A02001020082D3 -:10162000001000A0000290040100000000A00004CF -:1016300000008400910000000010A04000A0000203 -:101640000000000000000000C00800100008082092 -:1016500002A1054004C0820500000000090000004E -:10166000000008000000000000000800000000006A -:101670000440008400C10084100010000080800835 -:10168000118410081089000800000000108000007C -:101690000500408000800000000021800080408024 -:1016A000008000000000008080001020000010A0DA -:1016B0000009000310038310000200000000000076 -:1016C000008000000000000000008080000000801A -:1016D00080008088C089800080C000000040000039 -:1016E0000000410010200908030080008000001164 -:1016F00080000000804100A11000808000218480D3 -:10170000002011102109C0C003410020002000402A -:10171000000080000021808580000000801100080A -:1017200080800000000080108080000008002141BF -:10173000918810108205850082080300C0001011F6 -:10174000058083030000000000000000800000000E -:10175000800400008900A103040508110000C000F6 -:101760000400000000000900000001000800400023 -:10177000C0000200000004880011000008020004FC -:1017800040A01000000200C0A0A1018900000000DC -:101790000001040040002000A082100000000200B0 -:1017A0002000A084880820000211A0A0A008010247 -:1017B0000001A1A0010008A0820090049020100464 -:1017C000210090C01009000000000000000040004F -:1017D000A000A000000088A01101901000A000004F -:1017E000000004000000000900080008009000004C -:1017F00000000000000140900188050840084008F2 -:10180000008903090290028340001000C0A0400438 -:10181000040004040000C021002000A10591000084 -:10182000C01090200040A090089000882000820006 -:1018300000100800821101000000010005000001F5 -:1018400088C000849020020000000000000000001A -:10185000044000A0020401108483008800899009DC -:1018600000000000000008000010000800890000CF -:101870000003000800020403000041802080008073 -:101880008005008421A180048220110541200509E2 -:101890008080800000004000802000210010A1080E -:1018A000000080800000008080000011000200091C -:1018B0008010008880008090110900412009834039 -:1018C0000502000000008000000000000000000091 -:1018D0000000008000800000408000820011002194 -:1018E0000284000000028000000000000000800070 -:1018F00000080000008500800000008000008000DB -:1019000000009000090021000404100508040500EF -:10191000114000000008000000000002000080806C -:101920000000000000030000808080000000000430 -:101930008080000041000408850040110000809173 -:101940000800840390004084090004200000000087 -:101950000000000000000000008400001121902120 -:1019600004808302C00000900400000008080808FA -:1019700008208801000000C0008400000040901092 -:1019800010A00000030090C003049000892083A1F0 -:101990009000C1009000000304C000008200A0027B -:1019A00002C0200000002000029004040200A000F9 -:1019B00008018290040010200001098800000090B6 -:1019C0000241C184080140849140C084A00000000D -:1019D0000000000000000000000200C10000020939 -:1019E00083840920A100000000E00700000000003F -:1019F00000000000000000000000000041000000A6 -:101A00000000000041000000000000000000000095 -:101A100000E007000012000000E0070000000000E6 -:101A200000000000840A0000000000E00000420006 -:101A30000000000007000000000000E0000041007E -:101A4000000000E00000000000000000070000822D -:101A50000000000000000000000000000000840AF8 -:101A60000000000000000000FFFFF0F00000000098 -:101A70003030CF30FF000CF3000000000000000009 -:101A8000F0FAF0FA8300C3400D0D0D05D4FCD4C06C -:101A90003CF0BEF03C3C000000000F0FAAC3AAC3FC -:101AA000554B004B03FF030F000003035F500FF380 -:101AB00000F3000020000F0F0F0FA0A0AAAA003C07 -:101AC000003C54FE54FE000000006F6F006F30F3C6 -:101AD00030F3000000000000000000000000AA2A0F -:101AE000AA0AAA28AA20000000000000F0F00000C6 -:101AF0000000CFCFCFCFFFFF0C0C00000000000094 -:101B00000000F050F0508300C340050D0505D4FCE3 -:101B1000D4FC00F0AAF03C3C0000F0F0FFFFAAC3A8 -:101B2000AAC3FF4BAA4B03FF030F0000F3F35F5060 -:101B30000FF300F300002030C3C3C3C300000A0A40 -:101B4000003C003C54FE54FE000000006F6F6F002C -:101B500030F330F30000000000000000000000003F -:101B6000AA00AA0000000000020200020F0F3C3C85 -:101B70005F505F5000000000F5F5F5F50000000033 -:101B800054A851A23E343C3CA0A0A0A000000000FC -:101B9000283CAAFF00E000EB55005500F0F0F0F003 -:101BA00000005555000B00EB00C300C300005DFFB3 -:101BB0005D5D00040004000004003C3C00FF0C0CD0 -:101BC0000C0CFF00FF00000000003030F3F354A8BD -:101BD000FCFCAFFA83C20000000000000000F3F339 -:101BE00000F30F0F0F0F550355C30BEB0BEB0F0F4C -:101BF0003C3C5F505F50000000000000000000000F -:101C00000000FCFCF3F33E343E34AFAFAFAFFC5505 -:101C10000C55AAFFAAFFFFE0FFEB550055003C3C26 -:101C20003C3CFFFF55550B0BEBEB1FDF10D30000C7 -:101C3000000000000C3C003C140004000F0F00FFEB -:101C40000C0C0C0C000000000000000028EB28EB3E -:101C500051A2F3F383C2AFFA0000000000000000BD -:101C6000F3F3F3F3C3AAC3AA55035500EBEBEBEB75 -:101C70000061000F050D000000610006001D00005E -:101C800000610006000D000000613006000D00013B -:101C900000613006000D000105610A0F051D00A15D -:101CA0000061000F000D000080610006000D0000C3 -:101CB000000000610007000D00000061300E051DEE -:101CC00000A1006100030019000000610005000D83 -:101CD00000000061000E001D00A0000000000000D8 -:101CE0000000000000000000000000610006001D70 -:101CF0000000000000000000000000000000CF65B0 -:101D0000CF6500000000D52A2A2A0000000000004C -:101D10000000000000000000FFFF0F550F554515A3 -:101D20008A2A000000000000000000000000EBEB29 -:101D30000BE00000000000000000000000000000B8 -:101D40000030F030F60000F63C3C00FF1717171784 -:101D5000070BD0E0C2C3FAFF000000000000000043 -:101D6000000000000000000000000000AAAAA2AAD3 -:101D70000000AAAA0000000000000000000000000F -:101D8000C369C36900000000D5D52AD50000000052 -:101D9000000000003CF0B4B4B200FF4D3CFF3C003A -:101DA000CF3FCF3F00000000000000000000000017 -:101DB000D7D707D00000000000000000000000009E -:101DC00000000030F030F6F6F6F63C3C00FF171746 -:101DD0001717D7EBD7EBC3C3FFFF000000000000CD -:101DE0000000000000000000000000000000FFFFF5 -:101DF000F3FF5141FBEB0000000000000000000079 -:101E000000000F553369000000000000000000AA28 -:101E1000FFAAFFFF0000C3C3C3C3AA00AA00C00AF1 -:101E2000C0FAF5C1F5340000000000000000000019 +:100F80000000000000000000000000000000000061 +:100F90000000000000000000000000000000000051 +:100FA0000000000000000000000000000000000041 +:100FB00000000000004100000000000000000000F0 +:100FC0000000000000000000000000000000000021 +:100FD0000000000000000000000000000000000011 +:100FE0000000000000000000000000000000000001 +:100FF00000000000000000000000000000000001F0 +:1010000000000000000000000000000000000000E0 +:1010100000000000000000000000000000000000D0 +:1010200000000000000000000000000000000000C0 +:1010300000020000000000000000000000000000AE +:101040001000000000000000000000000000000090 +:101050000000000000000000000000000000000090 +:101060001000000000000000000000000000000070 +:101070000000000000000000000000000000000070 +:101080000000000000000000000000000000000060 +:101090000000000000000000000000000000000050 +:1010A000000010000000000000000002000000002E +:1010B0000000000000020000000200020002000226 +:1010C000000200004000000011400000000000008D +:1010D0000000000000000000000000000000000010 +:1010E0000000000000000000000000000000000000 +:1010F00000000000000000000000000000000000F0 +:1011000000000000000000000000000000000000DF +:1011100000000000000004000000000000000000CB +:10112000000000009000000000000000000004002B +:1011300000000000000000000000000000000200AD +:101140000200900000008000000088010000000004 +:10115000000000000000000000000000000000008F +:10116000000000000000000000000000000000007F +:10117000000000000000000000000000000000006F +:10118000000000000000000000000000000000005F +:10119000000000000000000000000000000000004F +:1011A000000000000000000000000000000000003F +:1011B000000000000000000000000000000000002F +:1011C000000000000000000000000000000000001F +:1011D000000000000000000000000000000000000F +:1011E00000000000000000000000000000000000FF +:1011F00000000000000000000000000000000000EF +:1012000000000000000000000000000000000000DE +:1012100000000000000000000000000000000000CE +:1012200000000000000000000000000000000400BA +:10123000040000000000040004000000000004009E +:10124000000000000000000000000000000000009E +:10125000000000000000000000000000000000008E +:10126000000000000000000000000000000000007E +:10127000000000000000000000000000000000006E +:10128000000000000000000000000000000000005E +:10129000000000000000000000000000000000004E +:1012A000000000000000000000000000000000003E +:1012B000000000000020000000000000000000000E +:1012C00000A00000000000000000008800410008AD +:1012D00000090082000401040000004000000040FA +:1012E00000000000000000000000000000000000FE +:1012F00000000000000000000000000000000000EE +:1013000000000000000000000000000000000000DD +:10131000000000000040000000000000000000008D +:1013200000000000000000000000000000000000BD +:10133000004000000000000000000000004000200D +:101340000000000000000000000000400009000054 +:101350000001000000200004040400000000000060 +:10136000000000000000000000000000000000007D +:10137000000000000000000000000000000000006D +:10138000000000000000000000000000000000005D +:10139000000000000000000000000000000000004D +:1013A00000000000004000000000000000000000FD +:1013B00000000000000000000040000000000000ED +:1013C000000000000000000000000000000000001D +:1013D00000400000090000000000000000200000A4 +:1013E00000000000000000000000000000000000FD +:1013F00000000000000000000000000000000000ED +:1014000000000000000000000000000000000000DC +:1014100000000000000000000000000000000000CC +:1014200000000000000000000000000000000000BC +:1014300000000000000000000000000000000000AC +:10144000000000000000000000000000000000009C +:101450000000000100008200000000000000000108 +:10146000000000000000000000000000000000007C +:10147000000000000000000000000000000000006C +:10148000000000000000000000000000000000005C +:10149000000000000000000000000000000000004C +:1014A000000000000000000000000000000000003C +:1014B0000000000000000000000000000000000428 +:1014C000000000080000000800A00000000000006C +:1014D00000000000008000809000008001800080FB +:1014E00000040000000000000000000000000000F8 +:1014F00000000000000000000000000000000000EC +:1015000000000000000000000000000000000000DB +:1015100000000000000000000000000000000000CB +:1015200000000000000000000000000000000000BB +:1015300000000000000000000000000000000000AB +:10154000000000000000000000000000000000009B +:10155000000000000000114000040000000404042A +:101560000004000100000000000020000000000056 +:10157000000000000000000000000000000000006B +:10158000000000000000000000000000000000005B +:10159000000000000000000000000000000000004B +:1015A000000000000000000000000000000000003B +:1015B000000000000000000000000000000000002B +:1015C000000000000000000000000000000000001B +:1015D00000000000001000090088008900080000D9 +:1015E00000000000000000000000000000000000FB +:1015F00000000000000000000000000000000000EB +:1016000000000000000000000000000000000000DA +:1016100000000000000000000000000000000000CA +:1016200000000000000000000000000000000000BA +:1016300000000000000000000000000000000000AA +:10164000000000000000000000000000000000009A +:101650000000000000000000004100004002000007 +:101660000000000003000000000000000000000077 +:10167000000000000000000000000000000000006A +:10168000000000000000000000000000000000005A +:10169000000000000000000000000000000000004A +:1016A000000000000000000000000000000000003A +:1016B000000000000000000000000000000000002A +:1016C000000000000000000000000000000000001A +:1016D00000000000000000000000000000119180E8 +:1016E000C180000200000004008000000000000033 +:1016F00000000000000000000000000000000000EA +:1017000000000000000000000000000000000000D9 +:1017100000000000000000000000000000000000C9 +:1017200000000000000000000000000000000000B9 +:1017300000000000000000000000000000000000A9 +:101740000000000000000000000000000000000099 +:1017500000000000000000000000000088880088F1 +:101760009184C10800010084000100040000000011 +:101770000000000000000000000000000000000069 +:101780000000000000000000000000000000000059 +:101790000000000000000000000000000000000049 +:1017A0000000000000000000000000000000000039 +:1017B0000000000000000000000000000000000029 +:1017C0000000000000000000000000000000000019 +:1017D0000000000000000000000000000000900079 +:1017E00001000000090101008400840000000000E5 +:1017F00000000000000000000000000000000000E9 +:1018000000000000000000000000000000000000D8 +:1018100000000000000000000000000000000000C8 +:1018200000000000000000000000000000000000B8 +:1018300000000000000000000000000000000000A8 +:101840000000000000000000000000000000000098 +:101850000000000000000000000000000000000088 +:10186000000003002000111102000000000005002C +:101870000000000000000000000000000000000068 +:101880000000000000000000000000000000000058 +:101890000000000000000000000000000000000048 +:1018A0000000000000000000000000000000000038 +:1018B0000000000000000000000000000000000028 +:1018C0000000000000000000000000000000000018 +:1018D0000000000000000000000000000000000008 +:1018E000000041A1840041801011000000080000A8 +:1018F00000000000000000000000000000000000E8 +:1019000000000000000000000000000000000000D7 +:1019100000000000000000000000000000000000C7 +:1019200000000000000000000000000000000000B7 +:1019300000000000000000000000000000000000A7 +:101940000000000000000000000000000000000097 +:101950000000000000000000000000000000000087 +:101960000000000091890204084009010000000005 +:101970000000000000000000000000000000000067 +:101980000000000000000000000000000000000057 +:101990000000000000000000000000000000000047 +:1019A0000000000000000000000000000000000037 +:1019B0000000000000000000000000000000000027 +:1019C0000000000000000000000000000000000017 +:1019D0000000000000000000000000000000000007 +:1019E000000000000000500000E0000000000000C7 +:1019F00000E0070000000000000000000000000000 +:101A000000000000000000000000000000000000D6 +:101A100000000000000000000000000000000000C6 +:101A200000000000000000000000000000000000B6 +:101A300000000000000000000000000000000000A6 +:101A40000000000000000000000000000000000096 +:101A50000000000000000000000000000000000086 +:101A600000000000000000002C2FECEF0000000040 +:101A70000000000000000000000000000000000066 +:101A80000000000000000000000000000000000056 +:101A90000000000000000000000000000000000046 +:101AA0000000000000000000000000000000000036 +:101AB0000000000000000000000000000000000026 +:101AC0000000000000000000000000000000000016 +:101AD0000000000000000000000000000000000006 +:101AE000000000000000000000002023E0E30000F0 +:101AF00000000000000000000000000000000000E6 +:101B000000000000000000000000000000000000D5 +:101B100000000000000000000000000000000000C5 +:101B200000000000000000000000000000000000B5 +:101B300000000000000000000000000000000000A5 +:101B40000000000000000000000000000000000095 +:101B50000000000000000000000000000000000085 +:101B6000000000000000000000000000DF9ECB8AA3 +:101B700000280082000000000000000000000000BB +:101B80000000000000000000000000000000000055 +:101B90000000000000000000000000000000000045 +:101BA0000000000000000000000000000000000035 +:101BB0000000000000000000000000000000000025 +:101BC0000000000000000000000000000000000015 +:101BD0000000000000000000000000000000000005 +:101BE00000000000000000000000000000005D1C7C +:101BF0004908000000000000000000000000000094 +:101C000000000000000000000000000000000000D4 +:101C100000000000000000000000000000000000C4 +:101C200000000000000000000000000000000000B4 +:101C300000000000000000000000000000000000A4 +:101C40000000000000000000000000000000000094 +:101C50000000000000000000000000000000000084 +:101C60000000000000000000000000000000000074 +:101C700000603007C001000505610A0F050D00A0D6 +:101C80000000000000000000000000000000000054 +:101C90000000000000000000000000000000000044 +:101CA0000000000000000000000000000000000034 +:101CB0000000000000000000000000000000000024 +:101CC0000000000000000000000000000000000014 +:101CD0000000000000000000000000000000000004 +:101CE00000000000000000000000000000000000F4 +:101CF000000000040008FFFF0000000000000000DA +:101D000000000000000000000000000000000000D3 +:101D100000000000000000000000000000000000C3 +:101D200000000000000000000000000000000000B3 +:101D300000000000000000000000000000000000A3 +:101D40000000000000000000000000000000000093 +:101D50000000000000000000000000000000000083 +:101D60000000000000000000000000000000000073 +:101D70000000000000040008FFFF00000000000059 +:101D80000000000000000000000000000000000053 +:101D90000000000000000000000000000000000043 +:101DA0000000000000000000000000000000000033 +:101DB0000000000000000000000000000000000023 +:101DC0000000000000000000000000000000000013 +:101DD0000000000000000000000000000000000003 +:101DE00000000000000000000000000000000000F3 +:101DF00000000000000005050A0A5555AA5500001C +:101E000000000000000000000000000000000000D2 +:101E100000000000000000000000000000000000C2 +:101E200000000000000000000000000000000000B2 :101E300000000000000000000000000000000000A2 -:101E40000000000000000000CFCF0C0C0F09F06074 -:101E5000E700E7E75FAF1C2C00000000C355C35547 +:101E40000000000000000000000000000000000092 +:101E50000000000000000000000000000000000082 :101E60000000000000000000000000000000000072 -:101E70003CFF3C00000000000000000000000000EB -:101E8000000000000F55F0AA000000000000000054 -:101E9000C3F0C3F00000000000000000AA00AA0088 -:101EA000CF0ACFFA5F435F1C000000000000000073 +:101E7000000000000000000000000000AAAA00FF0F +:101E80000000000000000000000000000000000052 +:101E90000000000000000000000000000000000042 +:101EA0000000000000000000000000000000000032 :101EB0000000000000000000000000000000000022 -:101EC00000000000000000000000CFCF0C0CFF69F4 -:101ED000FF6900E7E7E75FAF438300000000FF0F03 -:101EE000000F0000000000000000000000000000E3 -:101EF00000003CFF3C00341434340000C0102000CB -:101F0000200584000000200020090005040088004E -:101F100000000010840588001010880800050400E7 -:101F200040008400C0020400200084058400880072 -:101F300084090000840084002000000020050400C3 -:101F4000000504000400880020040400201104108F -:101F50008403000084002010C0092009200088109C -:101F600084048800840884008400880520092003F4 -:101F700010000011880420100402200240000040DC -:101F800040000000000000000000000000004100D0 -:101F9000040020004000000021004000000000027A -:101FA0004000410200000000400840000002000024 -:101FB000000000024100000000C009000000008293 -:101FC0000002400209001000410000022000400011 -:101FD00040004000000004001000209000000000BD -:101FE000400000022100040020004004040800C05A -:101FF00041C0090240020000090220000200000462 -:102000000009001000000800000300100404000490 -:10201000000000000005000300400000000402056D -:102020000010000300080004000400050005004043 -:10203000020310004004000500408204001000006C -:10204000000988040009000000100010000390043B -:102050000210880500040000A00900110000000320 -:10206000004000000000000300040000820000089F -:1020700000400041020000400000004000008200DB -:1020800000080508000803042008008800844008B0 -:10209000001000840084000800844088000400844C -:1020A00000880008008800040010000000080010EC -:1020B000000800A004840208000820842088009002 -:1020C00000000008000800022084008440844110C1 -:1020D00009104188000841840008000800A004108D -:1020E00021C0000802C00410008409100004001080 -:1020F00000100084008420080010004000100084BC -:1021000004820010002100210008C00582218808F7 -:10211000002100000008001000400008000800082E -:1021200000080010C040004000210008A02100105D -:10213000000800100008A008000500400008000882 -:1021400000210000000500050008000500400441D2 -:1021500000210021020800000003000900090041DD -:1021600000084040000300050008001000210000A6 -:102170000005080800080000904002400008000028 -:102180000008900800824100008421100000000037 -:1021900003080000030000000808000000004000E1 -:1021A00000A020200000038208080008080003089F -:1021B00041844084218203840040000021002110DA -:1021C000000000900000058200884000000021000F -:1021D00021000300028803820000040009A000A07F -:1021E000031003A000A021A000820002008400844C -:1021F000418808C021880384000800A00000000274 -:1022000000820500210008400009040588118200B1 -:10221000A000A003A000C000080000008203080383 -:10222000820008418204A0052005C004004100216D -:102230000005000082208409084108000404001100 -:1022400090000400040200000400404104109000CB -:102250000800C00004400040C00008000805080055 -:10226000820000001000040982410000820010007A -:102270000804A000820802000000044104000404D5 -:102280000404C009C010001021842184410000C052 -:102290000500000420000590218800040008048245 -:1022A0000300040004041102100404C002A00390FF -:1022B0000590118820000090009000000000109010 -:1022C0004082008400A00000000009000982000094 -:1022D000100002C010820010008200A00000000068 -:1022E0000010008200004090001000100008000064 -:1022F00021040000000800000000009010824084CB -:1023000000A01190000403C000000000C040820043 -:1023100000000000C00000000005000000410000B7 -:10232000000000000000100508000000004100004F -:1023300004100041000000410010000000100000E7 -:1023400000000000000000008210000000000000FB -:102350000800000300020800000800020005000059 -:102360000011820300000008C00500020000000008 -:102370000400000300032000822100400000C00090 -:10238000840082080821000000008200000008008C -:102390002100020020A00000030003000000000054 -:1023A0000008008400000810000020A004820590AE -:1023B00005000800118400C0080811020300000095 -:1023C0000008050000C00800080000000000090027 -:1023D00003000302000809020000000408000000D6 -:1023E0000300030802A021000000050000400500D2 -:1023F0004108000000080000000000020008000082 -:10240000000000000000000220A021020090C00295 -:10241000040040001000A04000100041001000081F -:1024200000000000001084000000000000210000F7 -:1024300008000010000082400010820300004002EB -:102440000421001000090000004100000008000005 -:102450008200901000000000000800080000000842 -:1024600082000000000000038411000000214000F1 -:102470000000080000210800000000100000000219 -:102480000005000088104000001004080040000013 -:10249000410000000000008400A0058805900304AE -:1024A000400011400202029000040000408202201D -:1024B000000011000084208209000902000800C009 -:1024C0000000000420C010A000C000C00008009060 -:1024D000000000880000419009C00982000020002F -:1024E000008409840988000800000000040002003C -:1024F000050811040000000000000040000000007A -:10250000200041100484000411C041C000024000BA -:1025100000000000000000000000000000000000BB +:101EC0000000000000000000000000000000000012 +:101ED0000000000000000000000000000000000002 +:101EE00000000000000000000000000000000000F2 +:101EF00000000000000000000000000000000000E2 +:101F000000000000000000000200000000000000CF +:101F100000000000000000000000000000000000C1 +:101F20000000000000000000200000000000000091 +:101F300000000000000000000000000000000000A1 +:101F40000000000000000000000020000000000071 +:101F50000000000000000000000000000000000081 +:101F60000000000000000000000020000000000051 +:101F70000000000000000000000000000000000061 +:101F80000000000000000000000000000000000051 +:101F90000000000000000000000000000000000041 +:101FA0000000000000000000000000000000000031 +:101FB0000000000000000000000000000000000021 +:101FC0000000000000000000000000000000000011 +:101FD0000000000000000000000000000000000001 +:101FE00000000000000000000000000000000000F1 +:101FF00000000000000000000000000000000000E1 +:102000000000000000000040000000000000000090 +:1020100000000000000000000000000000000000C0 +:1020200000000000000000000000000000000000B0 +:1020300000000000000000000000000000000000A0 +:102040000000000000000000000000000000900000 +:102050000000000000000000000000000000000080 +:1020600000009000000000000000000000000000E0 +:102070000000000000000000000000000000000060 +:102080000000008800400004000000000000000084 +:102090000000000000000000000000000000000040 +:1020A0000000000000000000000000000000000030 +:1020B0000000000000000000000000000000000020 +:1020C0000000000000000000000000000000000010 +:1020D0000000000000000000000000000000000000 +:1020E00000000000000000000000000000000000F0 +:1020F00000000000000000000000020000000000DE +:10210000000000000000004100000000000000008E +:1021100000000000000000000000000000000000BF +:1021200000000000000000000000000000000000AF +:10213000000000000000000000000000000000009F +:10214000000000000000000000000000000000008F +:10215000000000000000000000000000000000007F +:10216000000000000000000000000000000000006F +:10217000000000000000000000000000000000005F +:10218000000000000000000000000000000000004F +:10219000000000000000000000000000000000003F +:1021A000000000000000000000000000000000002F +:1021B000000000000000000000000000000000001F +:1021C000000000000000000000000000000000000F +:1021D00000000000000000000000000000000000FF +:1021E00000000000000000000000000000000000EF +:1021F00000000000000000000000000000000000DF +:102200000000000000000009000000410000000084 +:102210000000001100000040000000090000000064 +:1022200000000000000000000000000000000000AE +:10223000000000000000000000000000000000009E +:10224000000000000000000000000000000000008E +:10225000000000000000000000000000000000007E +:1022600000000000004000000040000000400000AE +:10227000000000000000000000000004000000401A +:102280000000000000000040000000C00900000045 +:10229000020000902000000000000000000000008C +:1022A000000000000000000000000000000000002E +:1022B000000000000000000000000000000000001E +:1022C000000000000000000000000000000000000E +:1022D00000000000000000000000000000000000FE +:1022E00000000000000000000200000000000000EC +:1022F00000000000000000000000000000000000DE +:1023000000000900000000000000000900000000BB +:10231000000040000000000000000000000000007D +:1023200000000000000000000000000000000000AD +:10233000000000000000000000000000000000009D +:10234000000000000000000000000000000000008D +:10235000000000000000000000000000000000007D +:10236000000000000000000000000000000000006D +:10237000000000000000000000000000000000005D +:1023800000000000000000000000000009000088BC +:1023900000040520000000000000210000000000F3 +:1023A000000000000000000000000000000000002D +:1023B000000000000000000000000000000000001D +:1023C000000000000000000000000000000000000D +:1023D00000000000000000000000000000000000FD +:1023E00000000000000000000000000000000000ED +:1023F00000000000000000000000000000000000DD +:1024000000000000000000080000000000000000C4 +:102410000000000088000000000000000000000034 +:1024200000000000000000000000000000000000AC +:10243000000000000000000000000000000000009C +:10244000000000000000000000000000000000008C +:10245000000000000000000000000000000000007C +:10246000000000000000000000000000000000006C +:10247000000000000000000000000000000000005C +:10248000000000000000000000000000000000004C +:1024900000C0204002000900008800000504090077 +:1024A00000000000000241000000000000000000E9 +:1024B000000000000000000000000000000000001C +:1024C000000000000000000000000000000000000C +:1024D00000000000000000000000000000000000FC +:1024E00000000000000000400000000000000000AC +:1024F00000040000000000000000000400000200D2 +:1025000000000000000000000000090000000000C2 +:10251000200000000000000000000000000000009B :1025200000000000000000000000000000000000AB :10253000000000000000000000000000000000009B :10254000000000000000000000000000000000008B @@ -127696,194 +127696,194 @@ :102AF00000000000000000000000000000000000D6 :102B000000000000000000000000000000000000C5 :102B100000000000000000000000000000000000B5 -:102B200000000000000000000000000089032000F9 -:102B3000C100C0804004C0840204841120088804BD -:102B4000038440048800880001A00280200421043E -:102B500021022000000385044010010800892100A3 -:102B600020880491890308100800000320002190A8 -:102B70000180048284094008400020840800030585 -:102B8000881020032000040040002004048440003A -:102B90000004008420002091210020112010200832 -:102BA000000020822000200004112008000002A064 -:102BB0000000020020402000004080400040000053 -:102BC0000001404000014090009004410004800159 -:102BD00004018401040000044000800540900910B5 -:102BE000400000024010080080A1840000000000A6 -:102BF0004002080282030000000000000940820039 -:102C000088000083008200900000009021040005ED -:102C100000000001001040000002400240000000DF -:102C20004000200009210000410005820400884086 -:102C3000001005400040000500850080008800105D -:102C400001040100020501100010000400039104BA -:102C5000000200104005000400080008020800906F -:102C60000041102100880004000400200000000042 -:102C70000010400500A0018500110004010004803F -:102C80000008002000100290000500050000000070 -:102C900000100000000300050000000400094000CF -:102CA000C004010000000202010001090005040344 -:102CB0000085000402084009404000404040204098 -:102CC000020802C10208800820082008000840000D -:102CD0002085050140088008020800C000C000826D -:102CE00000100084098840020008000809080084D8 -:102CF00000004011C0000903080200100005080888 -:102D000082104188000940400020094020C0098409 -:102D10000084000000C04000000000000088001097 -:102D20008540044004880088000502900440200487 -:102D30008984001000210121001190408511842117 -:102D400040104003002188210000000200050021FE -:102D50000009010021210021004100410000002163 -:102D60000021004100049004002102030010000231 -:102D70000010000000009105000004100000202158 -:102D8000C0008411012040040920019100080008BE -:102D9000A00800050008000800211003000500211C -:102DA00000830008008800080010000500080208E1 -:102DB0000003411008842000408208000000020047 -:102DC00000008004020000840000000000004000B9 -:102DD000090041004008040000020000100000004B -:102DE000001010004100000100014184410000C0BA -:102DF000000000010000000008000800800008A09A -:102E000080000840000020850001840304042100A4 -:102E10000000008800000000000000000008000022 -:102E20001000100200A0000200004108000008008D -:102E3000418200008400020200808200822040C0A3 -:102E40000400080082000240004003410810A00076 -:102E50000004204000008400084010800920820007 -:102E6000C000820008000800A01005040200A000B5 -:102E7000000008024100000082200040A00008007D -:102E8000A0210109040020040000040008000541FD -:102E9000900400408200A040080082410400A0008D -:102EA000A003C000820082408211A00000000091B7 -:102EB00004050440849100C08985004000102182EF -:102EC00041400010400804C080054111400000004E -:102ED00002A00200A0A008A0009000004002200074 -:102EE0002010401000000900C10041104084004043 -:102EF000410000200911401000000340210800009B -:102F0000040000002000A00404040010008200A0BF -:102F1000200800C0118208080310204008A04000CB -:102F2000000002000090110804040300030000A048 -:102F300000209084908520400502C0080800A04031 -:102F400040110000900810410000820500009040F0 -:102F500000008200820000100008100205002020FE -:102F60000041A00810000810C000900008030002F3 -:102F700082050010080200000005000040218209BF -:102F80000041910300050004001083082003202065 -:102F900001080011A01000410000C008002100003D -:102FA00020088200000800000021A0051000402039 -:102FB00040020010000500004008404100000000F1 -:102FC0000000800000001100000000000000000070 -:102FD00000010000000000000000000000C08400AC -:102FE0008001000000000000000000100000000050 -:102FF0000000000000000000000000000000800051 -:103000000000001008000082000100002000804045 -:10301000800120000000000000C00000000000004F -:1030200000008000000000400000004000000000A0 -:1030300080018084000000100000800080400000BB -:103040000241C0400200408840C100210321080025 -:1030500000211021400440200041A0214020829105 -:10306000009000840085000508000800880408021C -:103070004008020000000040A010A004000800006A -:10308000400000030020010500040090000301043B -:1030900004040011082182040011001000090441F9 -:1030A00020000000000008080000C00020000021EF -:1030B00000030000000001218200044104042102F9 -:1030C0000000000000052010884088400084029025 -:1030D00000000000000000822000000011A020007D -:1030E0000020002003200220000000A000A02000FB -:1030F00020201120000000040801000002000090C0 -:10310000000000000000004008000400000420400F -:10311000200380010002C100209000000000040094 -:1031200000008000000003000010030009000040C0 -:10313000001009A0008402004004200089008004DF -:103140004011000082050891009104C0C19082C125 -:1031500008900420044008200889C0400089900994 -:103160000802820104200400000211020110848878 -:1031700010C000A00088018804C000A005841008C9 -:1031800000820000C04002A000028291008882C03C -:10319000880890090182009000C02008000000000B -:1031A000000000000000100102000000000001000B -:1031B0008800000010200090048988004000110061 -:1031C00088000000200010828010001000001020F5 -:1031D00080208000A04190A10420801080840321E1 -:1031E00090888080202004089140008082000300A5 -:1031F0000000800000830011400880000080C000B3 -:1032000080800080000083801100000080211083F6 -:1032100021001088808411000080040000800000DC -:1032200000000000000011084121104100020000D0 -:103230004100000000001040418080A0000080009C -:10324000C100000009004000C121091003800300F3 -:1032500002A0A0008282108010A110114000918075 -:1032600010C0409121088384002085A08203820041 -:10327000840010002000C000C003050000919000F1 -:103280009041034008000000088000034105408988 -:10329000410008C0088320828020000980A100002E -:1032A0000000000000000000008011008311A12038 -:1032B000008000000800000800800321820489408B -:1032C00040000241C040C000000082200091A108DF -:1032D000900491C1104004022110A1C0A1830220DA -:1032E0000990001101A00102040820004141914110 -:1032F0008800200090008510880008010008101048 -:10330000880082002002411000008308000100C1F3 -:1033100000904000A1C101A0A182080188849041D1 -:1033200088A0000000000000000088902000030139 -:10333000030100C000000000000120100100A0896E -:103340009003910003418384C1A0028200408290D7 -:103350000090A08400910490849189219003C02161 -:103360000404C0890110049110202020852185913A -:103370000300C001000902831105C0C001000191D2 -:103380009000000100000090008200008805010804 -:10339000A09104890400009140001104850084007C -:1033A00090080384000000000000000000010001FC -:1033B0000300000000000000A000000100A000C009 -:1033C000400100830002002002090011A0050089CD -:1033D0000020000303080003A002C1102040900356 -:1033E0008921028080102091410590020041411006 -:1033F00010A1C0000020008400C0880280000308E3 -:103400002121030300040009001100110000004005 -:10341000038511840205800000048003A1202000A0 -:1034200000008000A000000000000000000000106C -:103430000040051010090002004180080010001033 -:103440000010002100A040020080808402850080DE -:10345000000400008040100089041021030385212E -:103460004021000011090510114185000500900060 -:10347000411021000510008000A10080001089107B -:1034800080898380404100008000800000000000AF -:1034900021001004082110049182C011A100824073 -:1034A00000118090808000000000000000000000FB -:1034B0004184208010000902040003002100040858 -:1034C00002808411090090030008000300A18020FD -:1034D00000C000909090040091200484919188C1D4 -:1034E00021012020A0C0C091099020080940C000FF -:1034F00091000000010090000010004100840000D5 -:103500000808021102404001C0008810022010008B -:103510000000890088050521C00104A00820099049 -:10352000100002012040100802000000000000000E -:10353000000000C100100088000000000000010031 -:103540000000044011000000100002A0900988094A -:103550008400000000000000810000000000000066 -:103560006000000000E000008111000000E00700A2 -:103570008800000000E0070041000000000000009B -:103580000000000000E00000810A000000000000D0 -:10359000000000000000000007004200000000E002 -:1035A00007008400000000E00700000000000000A9 -:1035B00000000000810000E0000084000000000026 -:1035C00000005000000000000700000000000000A4 -:1035D00007004200C7C7C7C7CCCCF0CC40DF404093 -:1035E00099C0C0C0990F0F0F900093C3090D0D0D26 -:1035F0000C6C9CFC66660000370437040000000079 -:103600009999090999FF99FFFF00FF000666006478 -:10361000000000FF0000030903F928694169006008 -:10362000F0600000F0F0381CF99FFFFFFF00000081 +:102B200000000000000000000000000000000000A5 +:102B30000040000000000000004000000000000015 +:102B40000000000000000000000000000000000085 +:102B50000000000000000000000000000000000075 +:102B60000000000000000000000000030000000062 +:102B70000000000000000000000000000000000055 +:102B80000000000000000000000000000000000045 +:102B90000000000000000200000000000000000033 +:102BA00000000000000000000000008000000000A5 +:102BB0000000000100000000000000010000000013 +:102BC0000000000000000000000000000000000005 +:102BD00000000000000000000000000000000000F5 +:102BE00000000000000000000000000000000000E5 +:102BF0000000000000000000000000400000000095 +:102C000000000000000000000000000000000004C0 +:102C100000900000000000900090000000900090E4 +:102C200000000000009000900000009000200000D4 +:102C300001000000000000000000020000800041D0 +:102C40000000000000840000000000000000000000 +:102C50000000000000000000000000000000000074 +:102C60000000000000000000000000000000000064 +:102C70000000000000000000000000000000000054 +:102C80000000000000000000000000000000000044 +:102C90000000000000000000000000000000000034 +:102CA0000000000000000000000000000000000024 +:102CB00000002000000000000000000000000040B4 +:102CC0000000000000C00041000000000000000003 +:102CD00000000000000000000000000000000000F4 +:102CE00000000000000000000000000000000000E4 +:102CF00000000000000000000000000000000200D2 +:102D000000000000000000000000000000000000C3 +:102D100000000000000003000000000000000000B0 +:102D200000000000000000000000000000000000A3 +:102D30000000880000000100900090000000C0002A +:102D40000000000000000000000000000000000083 +:102D50000000000000000000000000000000000073 +:102D60000000000000000000000000000000000063 +:102D70000000000000000000000000000000000053 +:102D80000000000000000000000000000000000043 +:102D90000000000000000000000000000000000033 +:102DA00000004000000000000000000000000000E3 +:102DB00000000000000000002000000000000000F3 +:102DC0000000000000000000000000000000000003 +:102DD00000000000000000000000000000000000F3 +:102DE00000000000000000000000000000000000E3 +:102DF00000000000000000000000000000000000D3 +:102E000000000000000000000000000000000000C2 +:102E100000000000000000000000000000000000B2 +:102E200000000000000000000000000000000000A2 +:102E300000000000000090001000001100002000C1 +:102E40002000000500040004000000400000000015 +:102E50000000000000000000000000000000000072 +:102E60000000000000000000000000000000000062 +:102E70000000000000000000000000000000000052 +:102E80000000000000000000000000000000001131 +:102E900000110000000000000000000000400002DF +:102EA000000000000000000000040000000000001E +:102EB00000000005000900041140910003002000FB +:102EC0008000C10441000001000003004000000038 +:102ED00000000000000000000000000000000000F2 +:102EE00000000000000000000000000000000000E2 +:102EF00000000000000000000000000000000000D2 +:102F000000000004000000000000000000000000BD +:102F10000090000000000000000000000000000021 +:102F20000000000000880000000000000000000019 +:102F3000000000000000000000000000C0809000C1 +:102F40004140000000000000A0000000000000114F +:102F50000000000000000000000000000000000071 +:102F60000000000000000000000000000000000061 +:102F70000000000000000000000000000000000051 +:102F80000000000000000000000000000000000041 +:102F90000000000000000000000000000000000031 +:102FA0000000000000000000000000000000000021 +:102FB0000000000000000000000000000000000809 +:102FC0000090A001000000000000000000000000D0 +:102FD00000000000000000000000000000000000F1 +:102FE00000000000000000000000000000000000E1 +:102FF00000000000000000000000000000000000D1 +:1030000000000000000000000000000000000000C0 +:1030100000000000000000000000000000000000B0 +:1030200000000000000000000000000000000000A0 +:1030300000000000000000000000000000009005FB +:1030400090C0000509048404A0040104820000006B +:1030500001000082001100000000000000000000DC +:103060000000000000000000000000000000000060 +:103070000000000000000000000000000000000050 +:103080000000000000000000000000000000000040 +:103090000000000000000000000000000000000030 +:1030A0000000000000000000000000000000000020 +:1030B0000000000000000000000000000000000010 +:1030C0000000024100908800000009002000094033 +:1030D00002022000080404000000030002000000B7 +:1030E00000000000000000000000000000000000E0 +:1030F00000000000000000000000000000000000D0 +:1031000000000000000000000000000400000000BB +:10311000000000000000000000000000000000406F +:103120000200000000000004000000000290020005 +:103130000200020002040000000000000000008203 +:10314000000401040090A088008800020008010823 +:10315000009001080020009000080000000000001E +:10316000000000000000000000000000000000005F +:10317000000000000000000000000000000000004F +:10318000000000000000000000000000000000003F +:10319000000000000000000000000000000000002F +:1031A000000000000000000000000000000000001F +:1031B00000000000000000000000000010000000FF +:1031C00000001000118000000500000020800000B9 +:1031D0000200000011000080030000000000000059 +:1031E00000000000000000000000000000000000DF +:1031F00000000000000000000000000000000000CF +:1032000000000000000000000000000000000000BE +:1032100000000000000000000000000000000000AE +:10322000000000000000000000000000000000009E +:10323000000000000000000000000000000000008E +:10324000000000008000000900A1000980000005C6 +:1032500000A1000900000040001000020000000072 +:10326000000000000000000000000000000000005E +:10327000000000000000000000000000000000004E +:10328000000000000000000000000000000000003E +:10329000000000000000000000000000000000002E +:1032A000000000000000000000000000000000001E +:1032B000000000000000000000000000000000000E +:1032C00080008000800080008400848200C0C09064 +:1032D00000000002004000000000002100910000FA +:1032E00000000000000000000000000000000000DE +:1032F00000000000000000000000000000000000CE +:1033000000000000000000000000000000000000BD +:1033100000000000000000000000000000000000AD +:10332000000000000000000000000000000000009D +:10333000000000000000000000000000000000008D +:10334000000008000800A000900008010801020128 +:103350000901200004000000100004000400000027 +:103360000800000000000000000000000000000055 +:10337000000000000000000000000000000000004D +:10338000000000000000000000000000000000003D +:10339000000000000000000000000000000000002D +:1033A000000000000000000000000000000000001D +:1033B000000000000000000000000000000000000D +:1033C000000000000088000800A000020004800443 +:1033D00080040441000080000000C00080008000E4 +:1033E00000000500000000000000000000000000D8 +:1033F00000000000000000000000000000000000CD +:1034000000000000000000000000000000000000BC +:1034100000000000000000000000000000000000AC +:10342000000000000000000000000000000000009C +:10343000000000000000000000000000000000008C +:1034400000000000000000000000000000008000FC +:10345000000000000000000000000000800080105C +:1034600000008000000000000000000000000000DC +:10347000000000000000000000000000000000004C +:10348000000000000000000000000000000000003C +:10349000000000000000000000000000000000002C +:1034A000000000000000000000000000000000001C +:1034B000000000000000000000000000000000000C +:1034C00000000000000000000000000000000000FC +:1034D000400004A088848800A000A000900008009C +:1034E0000400A000400040000000000000000000B8 +:1034F00000000000000000000000000000000000CC +:1035000000000000000000000000000000000000BB +:1035100000000000000000000000000000000000AB +:10352000000000000000000000000000000000009B +:10353000000000000000000000000000000000008B +:10354000000000000000000000000000000000A0DB +:103550000000000000E000000000000000E00000AB +:103560000000000000E0000000000000000000007B +:10357000000000000000000000000000000000004B +:10358000000000000000000000000000000000003B +:10359000000000000000000000000000000000002B +:1035A000000000000000000000000000000000001B +:1035B000000000000000000000000000000000000B +:1035C00000000000000000000000000000000000FB +:1035D00007000000F7C7F4C400000000FC0CFC0C5E +:1035E00000000000FF66B4B400000000000000000E +:1035F00000000000000000000000000000000000CB +:1036000000000000000000000000000000000000BA +:1036100000000000000000000000000000000000AA +:10362000000000000000000000000000000000009A :10363000000000000000000000000000000000008A -:103640000000000000000066FF660F0FBDBDFF0018 -:10365000FF007EFC42C038383838CCCCF0CC40DF9C -:10366000DFDF99CFCFCF99C3C3C39C3C9FFF090D28 -:1036700009096C6CFCFCBDBD242437043704000030 -:103680000000FF990F09096F81E73C3C3C3C06664E -:103690000266000000FF0000F309F3F93CFFC3FFDE -:1036A000006CF06CFFFFF0F0C183F99F0000FF0099 +:10364000000000000000000000000000000000007A +:103650000000000000003707340400000000F6F608 +:103660000606000000009900B4B40000000000004D +:10367000000000000000000000000000000000004A +:10368000000000000000000000000000000000003A +:10369000000000000000000000000000000000002A +:1036A000000000000000000000000000000000001A :1036B000000000000000000000000000000000000A -:1036C0000000000000000000003CFF3C0F0F24241D -:1036D000FF0001007EFC42C000000000000000006E +:1036C00000000000000000000000000000000000FA +:1036D00000000000000000080000000000000000E2 :1036E00000000000000000000000000000000000DA :1036F00000000000000000000000000000000000CA :1037000000000000000000000000000000000000B9 @@ -127891,478 +127891,478 @@ :103720000000000000000000000000000000000099 :103730000000000000000000000000000000000089 :103740000000000000000000000000000000000079 -:1037500000000000000000000000FF03FF030F0F47 -:10376000F0F0B1F3B130DBD81B18C3C90009C0C0F9 -:10377000E68000F030307E7E7E7E3C663C66003027 -:10378000F03F1C5E9DDFF6F6F6904FCF4000FFFF46 -:103790000707300000000F8F1F9F0000DDDD00DDF8 -:1037A000BDBDBDBDF0B0F3B39393F3F3C183F99FF7 -:1037B000FFA50F0500000000000000000000000051 -:1037C000A5A0A505000000000000000000FFF0F02B -:1037D0003C00FFC3000000000000606F00FC00FC24 -:1037E0000F0F969699FF9900FFF00F00C3C9FFF9DC -:1037F000FCFCFE9800F060604242424266006600B7 -:103800000030F03F044685C7C3C3C3C3FFFFF0F0D9 -:10381000FFFFFFFF30000000008010900000DDDDA2 -:10382000DD0024242424FCBCFFBF93930303F99FF1 -:10383000C183FFA5F0A00000000000000000000010 -:103840000000FFF0FF0F000000000000000000FF7C -:10385000F0F03C00FFC3000000000000303F40617A -:103860008006002D100240618006002D100240618C -:103870008005002500020061300B0005000000619A -:10388000000F000D000000610006001D0000006137 -:1038900000050015000100610006001D0001000088 -:1038A0000061000E050D00000061300D051900A03B -:1038B00005610A0F000D00A10000000000000000DB -:1038C00000610003C005000000610006000D00005B -:1038D00080610006000D000085610A0E052D12A210 -:1038E00000000000A0FFE1FF5F555F5500AAF0FA5D -:1038F0000000D714080B080B00C005C50082F0BEFD -:10390000FFFFAA00433D433D00000000FF33AA2211 -:1039100000000000000FF0FF00000000C300550F82 -:1039200000007C004000CC03333C3F3F033FFF00DE -:10393000FF00000000000000000000000000000088 -:103940000000AFAF83AF00F000E000F000F05F00D8 -:103950000F0003010000AAAAAAAA000000000000AC -:10396000000000000000A0A0E1E10F003F3C3CAAE5 -:10397000FCFA0000D7140F0F0F0FFFCFF5C50F8211 -:10398000FFBEC30FC3FF9167916700000000FF33C4 -:1039900055110F0F3C3C000FF0FF00000000C3FF6B -:1039A000550F00007F004300C3C0FF330303033FF4 -:1039B000F0F0AAAA000000000000000000000000D3 -:1039C0000000000000000000F0F0E0E000F200F76E -:1039D0004F004F0000010000F0C3FFFF0000000097 -:1039E00082C3C3C3FC00FC00C3006CAF0F0F0F0FFA -:1039F000C33355A55F5F555502000EF00505F5F57B -:103A000030303F3F05050000D714EB2800000000D0 -:103A1000070BD7EBF5F5FF00C130C1300000000007 -:103A20003F3F3F0000002828282855C3553C303030 -:103A3000F3F3301471550000000000000000000096 -:103A400000000000000003FFFFFFFFFFFF50000029 -:103A50000000550055000F0F00000500050500008F -:103A6000000000000000FC00FC00C3FF6C50000FD1 -:103A7000000F3333A5A50F3F003C02000EF0FF00FE -:103A8000FF0000F00FFF0F000000D714EB2800002C -:103A90000000D7EB070B0505FF00803080300000E9 -:103AA00000003F3F3F0000007D7D7D7D55C3553CBC -:103AB0003030F3F3F3D77155000000000000000030 -:103AC000000000000000000000FF00FFFFFF0000FA -:103AD00000000000550055000F0F0000550055551F -:103AE0000000000008000000C009C0804002020081 -:103AF000401008000100850020102010021004046E -:103B000020008800030021104008888002002084E3 -:103B10002000408088058204200020902120C002DF -:103B20008804880520002000000300002100081000 -:103B3000028920852000018920002000212020000A -:103B40000400200320002103208502004000080912 -:103B5000010002002000000088918980210041209E -:103B60008500040884902004200800000010000153 -:103B70000000C1008400089008004000008220007E -:103B80000500000000002000200000C0000400002C -:103B90000910000000020000008400000020040161 -:103BA00040010000200000000000000021900800FB -:103BB000A100000200040000200400000000040135 -:103BC00000C02000000000820484002000002000CB -:103BD000800008000000000000000010042020A069 -:103BE000401120002100000480014000000400007A -:103BF00000040004002001880004000400400004C8 -:103C0000000400410000000400090000000400045A -:103C1000000300000005000900040000001000007F -:103C20000000000400039004000000040000008075 -:103C300000000010019000040009000400080000CA -:103C400000090000000900110003004000200010DE -:103C5000001000080010000400050000000501210C -:103C6000000400050004001000840041004140846D -:103C70000404008200820405400240404000050820 -:103C800000400084008800080008000800080010B8 -:103C90000008400040820040000402004084000808 -:103CA00005084100004000100540008440840000E9 -:103CB00000040910200504210009058400010210F8 -:103CC00000104008400440080084040400820909F0 -:103CD00009840085048205840084001000000088A7 -:103CE000200000C120084040400440400000000483 -:103CF00000050021000900050082001000210108D4 -:103D00000040000300000000002120218821001154 -:103D10000000000300400010000300080010A00590 -:103D2000000000000003000300050010000800026E -:103D300000004008000840040188012100080040FC -:103D40000403000340000000002100100021400097 -:103D5000400000080040000088210005000800081D -:103D6000000800040004010000088840000500214C -:103D70000041030008080800000003210088030038 -:103D80004000000000004100080041A0A110000018 -:103D90000000008200840000000800820008000289 -:103DA00000C000820040050203C000A000000084A3 -:103DB0000384000080A0004041C0041020000010D7 -:103DC000000083100000808400000000000003C099 -:103DD00083828088000000000000000008080008BE -:103DE00000A000A0000111000400080821A000A00C -:103DF000000809A020040805000508008200A000B2 -:103E00008200004082000400A00082020441088277 -:103E10000880040008000809A00040008205080886 -:103E200000098200C005C000821000210000400986 -:103E30004000900000000800000500051020080068 -:103E4000050005114011C000000240020000000002 -:103E50000000002041A00400C000088040218840EC -:103E600040A11040088008009040820282830240F6 -:103E7000088020090041081010820088101000827C -:103E800000000004001000C0000000002108001025 -:103E900000041104020000000910000000A0000846 -:103EA000031000000040000000000910110000088D -:103EB00000000000101000000010000004100801B5 -:103EC00080000400040003C0004002A00000402065 -:103ED00003A041080001A00300000010000290C0F0 -:103EE0001101C11000001010000003004000000488 -:103EF00088880040A1C00000000208410841080273 -:103F0000C008C10500000903008082880205001076 -:103F10001082044000800000A04100001008C00092 -:103F20001040C021104120080000000800080821AE -:103F300000054040001082030000C0800083820919 -:103F40000080084082000000A0A000000008C00817 -:103F5000051100400009C00501100000000882089A -:103F600000030000C0000008400000000000000046 -:103F70008400000020000041004100880800080083 -:103F80000000039004040300040041100340098270 -:103F900003000202088500044040210003000000E5 -:103FA000008400820300000008100000020020A02E -:103FB00000A000C08800000000020000000400040F -:103FC000080800200200008408900011000000C0D2 -:103FD0000000848400C00000000020820000000077 -:103FE00000002108000000000200804000100000D6 -:103FF0000040000000009100000040A00008080000 -:10400000080400080021C040042082050011A021FE -:104010000041002102000210401020214000004118 -:104020000921841000100408C0210202002100218F -:10403000000020084040080800050008000040215A -:104040008200100840020810A021000588100021FD -:1040500000020041001000080421040004020000D6 -:1040600000000010000040004000400488201111B2 -:1040700004000400A008001120400021002100904D -:10408000000000000000000000004182000000006D -:104090000000000000840000008800001100820081 -:1040A000000040000008000000080082000000003E -:1040B000000000000008080000004100200000008F -:1040C000000021002000848480000000118211047F -:1040D00000000000000002080000000000000204D0 -:1040E000000008000001080000000000002000009F -:1040F0000490200011000040000000000840020071 -:10410000C0C0084084101082000200C1080200A054 -:104110000000000000000000000000018900000114 -:104120008940081101211008010011004001000020 -:10413000100801901000C004000000000000000002 -:10414000000008A001400110904000A010010509E6 -:10415000009100A0009185001002000000001100F5 -:10416000000040400004000090000084008804909B -:104170000000001104C08990820810048908911081 -:1041800040C09100A18000808080408221218080F9 -:104190000009000000000000000000401002044080 -:1041A000004009418008030280850400C1098003A2 -:1041B00000038080218080008080000000000000DB -:1041C00000000000008004910200808400894121E9 -:1041D00004830008008311A0882080C00000110023 -:1041E000410000008000008000000000000002008C -:1041F000000000000508001040088090804010C1B9 -:1042000090820000020010048589888000008040B0 -:104210008000001080000005000080000400020003 -:104220001000800002808200401040211085C000F4 -:10423000200210210200051100808084000000008F -:104240000000000500008009000080C00080908010 -:104250001103001121031100410088849021030003 -:104260002000200011808000200280858000000056 -:104270000000000080088300A0048000100080007F -:104280004005A040A10384000001A14103A0A0C0FB -:10429000040104000000020000008282020001000C -:1042A0002000000008008510210085008500854061 -:1042B00010001101C10140A02041048402040084C7 -:1042C000000000000000000004000000A00800083A -:1042D0000490A0A0A001010000400000A1119021C5 -:1042E0000100010000000010A0001001A0840810CF -:1042F0000010200020000800088204008420A1840F -:10430000A0020000A1100901401100919008A00135 -:1043100002200100080800A10000000000000000C9 -:104320000001010001000100404001844140008281 -:1043300000000101A00100010011008900890800AE -:10434000000000000000000000004008C00008005D -:10435000A1000082000005C000900004001001A12F -:1043600000020001000120000001004000A0408286 -:104370000089008400000090A0A1901000029085A8 -:104380001104100901A000A002058090000800851A -:1043900080048004084100C000C00000000000004C -:1043A00000000004102105101100800041000800E9 -:1043B000028000410804C1400008000400C0002140 -:1043C00080020000000000000000000000008009E2 -:1043D0001000C000002000200510100900890521F0 -:1043E00040210202000800030010020800830020A0 -:1043F0000000048200100010000888A000842190B2 -:1044000080A1A11000C0118309021020000000004B -:1044100080800010821004824100020000000089A8 -:1044200000008000048211000900000309000385D8 -:10443000108011402109080005802140C00284003D -:104440008980820040000408110003000000800001 -:104450008009000000004004410290000910211072 -:104460001000828085100000000200000011000092 -:104470008000800000021003028004800800840491 -:10448000008905808000218420800080840484408D -:1044900088A0080804000900A00200C01000400025 -:1044A000900804048200010200900000000000C097 -:1044B00001A000C000010190012000A0010109013C -:1044C0000982044009000100000100000100000011 -:1044D0004000820000000200A1880040049000001B -:1044E00005C0A100850210000010000000000000BF -:1044F00084C082040888900101000020008401002B -:10450000100088400408880083C105821010040050 -:104510000000000000005000000000000700000044 -:104520000000000000000000000000E000000000AB -:10453000000000E00000420A00000000000041000E -:10454000000000000700000600000000000000005E -:104550000000000000E007005000810000E00700BC -:1045600000000000000007000000600000E00700FD -:1045700000810000000000000000000000000000BA -:104580000000004100E007000000810000E00000A2 -:104590004100F3030505FA28FA2800000000FFC3D4 -:1045A00000C3656A656A00000000000000000000AA -:1045B000000000000000413F410300000000000037 -:1045C0000000FFFF5DFDD714D714000000000000BD -:1045D00000000000BE3CFF3C8282828200000F0F80 -:1045E00000FFC3C335FF3500FF0F3C0F0000000084 -:1045F000000000004BAA4B001714D7D700000000A2 -:10460000FFC300C3FF00FFF3FF3CFF0CFDF50000FC -:104610000000FEFAF303F5F5502850283C3C00FF5B -:10462000FFC300C3656ACFC00000000000000000A7 -:1046300000000000000000007D3F7D03000000003E -:1046400000000000000008A85F505F50000000005C -:10465000000000000000BE3CFF3C00000000FFFF27 -:104660000F0F00FFC3C335FF3500000F3C0F0000E4 -:104670000000000000004BFF4B5517D7D7D70000B4 -:104680000000FFC300C3FFA2FFF3FF0CFF0CFDF50A -:10469000FFFF0000FCF00000D7D014D73CFF3C3CEB -:1046A00000000CB00CB00000000096AA55AA000053 -:1046B0000000F0F0AAAAC3C300FFCFCF417D0000E5 -:1046C0000000F0F0F0F0D714FF00FFFF0000000042 -:1046D000000000000000000000010F0F3C003C0043 -:1046E00003033F3F5C5C5C5CC300FF3C00FF00FFDA -:1046F000000000000000000000FFFF003020F0A0DC -:104700005F005000AF05FFFF00000000FF00F30056 -:1047100008280000C3C3C3C3D7D0D7D03CFF3CFF99 -:104720000000FC0C0C100C1000000000C3FF00FF88 -:1047300000000000F0F0AAAAFFFFF0F0CFCF7D7DCF -:1047400000000000F0F0E0F0D714FF00FF7F000051 -:104750000000000000000000000004050F0F3C00F6 -:104760003C0003033F3FFF00FF00C300FF3CFFFF8F -:104770000000000000000000000000FFFF003C28D7 -:10478000FFAA5F005000AF05000038FAFAFAAA004D -:10479000A20008000000FFFFFFEB80610006000D93 -:1047A00000000061000E000D00000000000000008D -:1047B0000001006100050001000100610005001D0D -:1047C000000000610006000D000000610E06000DF3 -:1047D000000100610006000D000000000061000FF4 -:1047E000000D00A00061000BC00500000061000684 -:1047F000000D00000061000FC50900A00061400627 -:10480000000D000000610006001D0000006140393D -:104810000009000000610005C01500010000000053 -:104820004BAA4B00FFFFFAFA282828FF00000000DF -:10483000000000000F0F00FFEB2BEB2B000F040F0D -:10484000000000000050555530B030B0808C838F90 -:10485000FF0CFF3CC2C3FAFF000000000000000094 -:10486000000000000000AF83AFAF003C002C01004F -:10487000C1C000BF00FF00000000000000000000F9 -:104880000000C3C30F0FA0C0AAC3FFC355415555B5 -:10489000F0F0E8E828EB283CFFFF000055FF00009F -:1048A00000004BFF4B553CFF38FA787878FF00004A -:1048B0000000000000000F0F00FFE828E8280000BB -:1048C0000400000000000040555530B0F0F0B0BCCE -:1048D000B3BF55045514C3C3FFFF00000000000020 -:1048E00000000000F0F0F0F0000000003C3C2C2C38 -:1048F000C3C3C3C3BFBFFFFF00000000000002002E -:1049000000000000C3C30F0FF0F0FFFFFF0F5505BD -:104910005555F0F0E8E828EB2828FFFF000045CFC8 -:104920000000000003C3000055FF14FF000000005A -:1049300000000000000000003D3DFF3D7C7F7C7FCB -:104940000001A0A1000000002C282C28000014B4B5 -:104950000000000030303030000000000000000097 -:104960000000003C003C0000000000FF3CFFFFFF97 -:104970001010EBEBFFFF8282AF0500000000003C4F -:104980000000000000000A0A0A0A000000000000FF -:104990000000B4BEB414C0C0FCFC00AF0000FFFFB8 -:1049A000AA0A0000000007D7000055FF14FF00000E -:1049B000000000000000000000000505C70540439E -:1049C000404300000000010000003C383C3800007B -:1049D0000000000000003030303000000000000017 -:1049E00000000000C3FFC3FF000000000CFF3CFFFD -:1049F000FFFFF0F0FFFFEBF3D7D7AF05000000009B -:104A0000003C0020000000005F5F5F5F00000000CE -:104A100000000000B4BEB414C0C0FCFCAFAF000086 -:104A2000FFFF0A0A02048800200082048810840024 -:104A30002000840320002010000904002090400280 -:104A40000410030204002000040000038800840016 -:104A5000C00304002000840004002000204089845A -:104A6000210840880003820002002000000320107B -:104A700082102000200000002000200088002180FB -:104A800001840510218884088400880088002000A3 -:104A90000400200084048400200020002003201053 -:104AA00085850008048041004100040000000300E7 -:104AB000400000000900090000000400000041401F -:104AC000A0010001200100000000000020004100C2 -:104AD00000000000000004000400000400000001C9 -:104AE000201110018005000000000000408400003B -:104AF0000000000041000000000004000400040069 -:104B000002404004100110030400410000000008AE -:104B10000400090000000000000000004000000048 -:104B20000900200400012002000900000004001018 -:104B3000000500040003000400030000000400035B -:104B4000010400040100000900040008002000081E -:104B500000040004004000000004000800050003F9 -:104B6000000401030110000400000010000300080D -:104B700000000041000800000003000000000003E6 -:104B800000090005001000000004001000000004EF -:104B900000030041000000100000000000080000B9 -:104BA0000010000000000041010000000008058224 -:104BB00000080400000800100010008800880008A9 -:104BC00002100208028808040010001000882084E7 -:104BD000001004000008008820820008001003086C -:104BE0004004048840080809000800000008000884 -:104BF00000100088090409840582000800100204DE -:104C0000000840080000410840080208008400C075 -:104C100040404008400040080084098800104000DF -:104C2000000800080008400800082040001000109C -:104C30000041002100058810000500419000840813 -:104C4000A0100003000509851008090000082021B4 -:104C50000040002100050005002100000000822125 -:104C6000A0100021000540400021000000020008C3 -:104C7000002100210003000302059008000000034A -:104C80002021004020000008084100102000882159 -:104C9000002100000003000800212008200020035C -:104CA00000050000000000214041A0091100410062 -:104CB00000820008000000020000008200080008D6 -:104CC00002000084008400000804880010000084B2 -:104CD00000840308000000A008A0410803080000A9 -:104CE000008200A000000082801000C000000000D0 -:104CF0002184030000000008000000C021A00584FA -:104D000000080000111000100008A1A000A080C041 -:104D100000820308210800000084030041080808FD -:104D200000A000A0000000A04102008408A0C0A0D4 -:104D3000040000000008A0004000080082000400F9 -:104D4000C000000002000000040001008200820098 -:104D500008000400000090001000A0008200004045 -:104D60008200A000000002000200C00000000888CD -:104D700000000009080090000400000008009000F6 -:104D80008200080082008200080002008202000007 -:104D90000400040808410000400002000000A000D8 -:104DA000000482000000A00082090004000410003A -:104DB0001004000002900000401000C005004108EF -:104DC000008400040004000400080040080000847F -:104DD000000009200082000200C0008202820090D0 -:104DE0000084000040040200001080400082400463 -:104DF00000030000009000100000218400C0008823 -:104E0000040000C000000000020240040000020490 -:104E10000000210008080000000000C0030000108E -:104E20001020100000C0000004C04004000000007A -:104E3000C000C100000800400000080000218221DD -:104E400000000800A00000030000080000020008A5 -:104E500000212008000000000000A0000808000059 -:104E60000000A00000100000C000C0090021A00840 -:104E700000000008000000210000000000400000C9 -:104E8000020000030002A00500030000A040A005EE -:104E9000000800000005000000000000C011000034 -:104EA0000000000310108800201000000003000024 -:104EB0000008904185410800080200A0111021005F -:104EC000000000A00000000005000000000003003A -:104ED0000300000000020000001000102090218854 -:104EE000000005100802000000000000000800009B -:104EF000000000880000000000000000000000101A -:104F0000000200820800000000000800000800C045 -:104F100000A0001000C01100000000000800000800 -:104F200021A0080000880200000003020804118884 -:104F300021101182211020102000002100080041C2 -:104F400008000021C000000000100000C021820401 -:104F5000002101210010042088412004004040006D -:104F6000001004100200000000410805000082103B -:104F700082108221000020000000000300000400D5 -:104F800000008821000000004040040040419000E3 -:104F9000842100030800080000088205000090003A -:104FA0000010200300000400880020080000C0005A -:104FB000A0000000001000000040000800000000F9 -:104FC0000000000011880000000000000200000046 -:104FD00005000000201020400000094011004100A1 -:104FE0002000000000000800000000002004000075 -:104FF00000C000000810000080000000080011043C -:105000000000030200A011000000000400000000E6 -:105010000000000009002000020000001100000054 -:1050200004000040040000000000000000004000F8 -:1050300000000000000000000000109000000000D0 -:105040000000000000000000000000000000000060 -:1050500000C0000000000000010482000000000009 -:105060000000000000000000000000000000000040 -:1050700000C000000000000000400400000000002C -:105080000000000000000000000000000000000020 -:10509000000000C00000000000000002400000000E -:1050A0000000000000000000000000000000000000 -:1050B000000000C000000000A000009009000000F7 -:1050C00000000000000000000000000000000009D7 -:1050D00009000080000000000000208000000000A7 -:1050E00000000000000000000000000000000004BC -:1050F00009000080000000000000030080000000A4 -:10510000000000000000000000000000000000009F -:105110000004040000800000000000004080000047 -:10512000000000000000000000000000000000007F -:105130000041040000800000000000004000410029 -:105140000000090000000000000000000000000056 -:10515000C0008200001000000000000000000040BD -:10516000000004000000000000000000000000003B -:10517000C0008200000000000000000000000002EB -:10518000000000000500000000000000000000001A -:105190000000C000820000000080800000000000CD -:1051A00000030000050000000000000000000000F7 -:1051B0000000A0009100004000808000000000007E -:1051C00000030000000000000000000000000000DC -:1051D0000000410010C000000000020000000000BC -:1051E00000010000010000000000000000000000BD -:1051F0000000090010C000000000020000000000D4 -:10520000000100000000000000000000000000009D -:1052100000000000030082C0000000080800000039 -:10522000000000000000000000000000000000007E -:1052300000000000050082C000010008100000000E -:10524000000000010000000000000000000000005D -:1052500000000000004000001000000000000000FE -:10526000000000000000000000000000000000003E -:1052700000000000004000001000000000000000DE -:10528000000000000000000000000000000000001E -:1052900000000000000000400000100000000000BE -:1052A00000000100000000000000000000000000FD -:1052B000000000000000004000001000000000009E -:1052C00000000000000000000000000000000000DE -:1052D00000000000000000800000800000000000CE -:1052E00000000300000000000000000000000000BB -:1052F00000000000000000800000800000000000AE -:10530000000041000000000000000000000000005C -:10531000000000000000000000800000800000008D -:10532000000000002000000000000000000000005D -:10533000000000000000000000800000800000006D -:105340000000000008000000000080000091000044 -:10535000000000000000000000410000000000000C -:10536000000000048000408500000004008300006D -:1053700000000000000000000041000000000000EC -:105380000020000000004083000000008005008332 -:105390000000000000000000000000C1000000004C -:1053A000000000040021800003020000800500834B -:1053B000000000000000000000000041800000002C -:1053C000000000000020000003050000080000109D -:1053D0000000000000000000000000890200000042 -:1053E000000000000001820000C000008401008372 -:1053F0000000000000000000000000890200000022 -:10540000000000010000A00000C000000000040037 -:1054100000830000000000000000000000110200F6 -:1054200000000000000100000400018500000400ED -:1054300000830000000000000000000000A1080040 -:105440000000000000000001080001A000000000B2 +:10375000000000000000000000000737C7F74040ED +:103760002020427E427E0000000006F606F60000A1 +:103770000000000000000000000000000000000049 +:103780000000000000000000000000000000000039 +:103790000000000000000000000000000000000029 +:1037A0000000000000000000000000000000000019 +:1037B0000000000000000000000000000000000009 +:1037C00000000000000000000000000000000000F9 +:1037D00000000000000000000F0FFFFF0434C4F4DD +:1037E000000000000C0CCFCF0000000030303F3F45 +:1037F00000000000000000000000000000000000C9 +:1038000000000000000000000000000000000000B8 +:1038100000000000000000000000000000000000A8 +:103820000000000000000000000000000000000098 +:103830000000000000000000000000000000000088 +:103840000000000000000000000000000000000078 +:10385000000000000000000000000300F3F0006121 +:103860003007000D000500613007000D0000006109 +:103870003007000D00000000000000000000000004 +:103880000000000000000000000000000000000038 +:103890000000000000000000000000000000000028 +:1038A0000000000000000000000000000000000018 +:1038B0000000000000000000000000000000000008 +:1038C00000000000000000000000000000000000F8 +:1038D00000000000000000000000000000000000E8 +:1038E00000000000000100040000000000000000D3 +:1038F00000000000000000000000000000000000C8 +:1039000000000000000000000000000000000000B7 +:1039100000000000000000000000000000000000A7 +:103920000000000000000000000000000000000097 +:103930000000000000000000000000000000000087 +:103940000000000000000000000000000000000077 +:103950000000000000000000000000000000000067 +:103960000000000000000001000400000000000052 +:103970000000000000000000000000000000000047 +:103980000000000000000000000000000000000037 +:103990000000000000000000000000000000000027 +:1039A0000000000000000000000000000000000017 +:1039B0000000000000000000000000000000000007 +:1039C00000000000000000000000000000000000F7 +:1039D00000000000000000000000000000000000E7 +:1039E00000000000000000000000000000000000D7 +:1039F00000000000000000000000000000000000C7 +:103A000000000000000000000000000000000000B6 +:103A100000000000000000000000000000000000A6 +:103A20000000000000000000000000000000000096 +:103A30000000000000000000000000000000000086 +:103A40000000000000000000000000000000000076 +:103A50000000000000000000000000000000000066 +:103A60000000000000000000000000000000000056 +:103A70000000000000000000000000000000000046 +:103A80000000000000000000000000000000000036 +:103A90000000000000000000000000000000000026 +:103AA0000000000000000000000000000000000016 +:103AB0000000000000000000000000000000000006 +:103AC00000000000000000000000000000000000F6 +:103AD00000000000000000000000000000000000E6 +:103AE0000000000000000000000000000000008056 +:103AF0000000000000000040000000000000004046 +:103B000000000000000000000000000000000000B5 +:103B100000000000000000000000000000000000A5 +:103B20000000000000000000000100000000000094 +:103B30000000000000000000000000000000020083 +:103B40000000000000000200000000000000000073 +:103B500000000000000000000000000082000000E3 +:103B60000200000000002000000000000000000033 +:103B70000040000000000000000100000000000004 +:103B80000001000000000000000000000000000034 +:103B90000000000000000000000000000000000025 +:103BA0000000000000000000000000000000000015 +:103BB0000000000000000000000000000000000005 +:103BC0000000000000000000000000000000008273 +:103BD0000000000000000000008200000000000063 +:103BE00000000000000000000000000001000000D4 +:103BF0000000018000000000000000000041000003 +:103C000000000000000000000000000000000000B4 +:103C100000000000000000000000000002000000A2 +:103C20000000000000000000000000000000000094 +:103C30000000000000000000000000000000000084 +:103C40000000000000000000000000000000000074 +:103C50000000000000000000000000000000000064 +:103C6000000000000000000000000000000002C092 +:103C700000000000044000000000000000080000F8 +:103C800000000000004000000000000000000000F4 +:103C9000000000000000000000000000000800001C +:103CA0000000000000000000000000000000000014 +:103CB000000000000000020000000000000000887A +:103CC00000080000000000400000000000000008A4 +:103CD00000000000000000000000000000000000E4 +:103CE00000080000000000000000000000000008C4 +:103CF0000100000000002000200000000000000083 +:103D00000000000000000000008000000000000033 +:103D100000000000000000000000000000000000A3 +:103D20000000000000000000000000000000000093 +:103D30000000000000000000000000000000000083 +:103D40000000000000000000000000000000000073 +:103D50000000000000000000000000000000000063 +:103D60000000000000000000000000000000000053 +:103D70000000020000000000800080004100000000 +:103D80000000000000000000000000200000000013 +:103D90000000000000000000000000000000000023 +:103DA0000000000000000000000000000000000013 +:103DB0000000000000000000000000000000000003 +:103DC00000000000000000000000000000000000F3 +:103DD00000000000000000000000000000000000E3 +:103DE00000000000000000000000000000000000D3 +:103DF000000000A00209004120910005400240029D +:103E00000009820000000000000501000000000918 +:103E100000000000000000000000000000000000A2 +:103E20000000000000000000000000000000000092 +:103E30000000000000000000000000000000000082 +:103E40000000000000000000000000000000000072 +:103E500000000000000000000000000088000000DA +:103E60000000000000000000000000000000884189 +:103E700000000000001180000000A0200000099058 +:103E8000000040000000200000000000208800002A +:103E90000000000000000000000000000000000022 +:103EA000000000000000000000000000000000848E +:103EB0000000000000000000000000000000000002 +:103EC0000000090000000000000000000084000065 +:103ED0000084000011000900000000000000000044 +:103EE000110002000900000000000004000003406F +:103EF00000400000000000040380200005800480D2 +:103F000000000000C00000000100000000040003E9 +:103F10000000001100200000000000000000000070 +:103F20000000000000000000000000000000000091 +:103F30000000000000000000000000000000000081 +:103F40000000000000000000000000000000000071 +:103F50000000000000000000000000000000000061 +:103F60000000000000000000000800000000000049 +:103F700000000000000000000000A040800084203D +:103F8000C0200000000041000000200041000301AB +:103F90000000000000000001000000000000000020 +:103FA0000000000000000000000000000000000011 +:103FB0000000000000000000000000000000000001 +:103FC00000000000000000000000000000000000F1 +:103FD00000000000000000000000000000000000E1 +:103FE00000000000000000000000000000000000D1 +:103FF000000000000000000400000000000000417C +:104000000100000040004080000483020000000026 +:1040100000020011000000200002008000000000EB +:104020000000000000000000000000000000000090 +:10403000000000000000000000000000000000413F +:104040000000000000000000000000000000000070 +:10405000000000000000000000000040000000031D +:104060000000000000000000000000000000000050 +:104070000000000000000000000000000000000040 +:104080000000040000900000000400002000000078 +:10409000098820000288000000890000002000003C +:1040A0000000000000000000000000000008000800 +:1040B00000000000000800000000000000080000F0 +:1040C000000000000000000000000000000000C030 +:1040D00000080000008400400000000020000208EA +:1040E000020400C0000400901100110000880000CC +:1040F000110020400890110400000000000000049E +:10410000898800080104909000880088000200025D +:1041100000A0080201900010000000000000000054 +:10412000000000000000000000000000000000008F +:10413000000000000000000000000000000000007F +:10414000000000000000000000000000000000006F +:10415000000000000000000000000000000000005F +:10416000000000000000000000000000000000004F +:10417000000000000000000000000000000000003F +:1041800000008980000020808080000000000980FD +:1041900000804000808020000080000000000000BF +:1041A000000000000000000000000000000000000F +:1041B00000000000000000000000000000000000FF +:1041C00000000000000000000000000000000000EF +:1041D00000000000000000000000000000000000DF +:1041E00000000000000000000000000000000000CF +:1041F00000000000000000000000000000000000BF +:10420000000000000020008300848080000200A0E5 +:1042100000A000000005002100890000000000004F +:10422000000000000000000000000000000000008E +:10423000000000000000000000000000000000007E +:10424000000000000000000000000000000000006E +:10425000000000000000000000000000000000005E +:10426000000000000000000000000000000000004E +:10427000000000000000000000000000000000003E +:1042800000000000000000010003004190900001C8 +:104290000003009100000000008200820000000086 +:1042A000004000000040000000000000000000008E +:1042B00000000000000000000000000000000000FE +:1042C00000000000000000000000000000000000EE +:1042D00000000000000000000000000000000000DE +:1042E00000000000000000000000000000000000CE +:1042F00000000000000000000000000000000000BE +:10430000000000000000000088000400009002C0CF +:1043100090008200000008004000040000008800B7 +:10432000000000008200000000000000000000000B +:10433000000000000000000000000000000000007D +:10434000000000000000000000000000000000006D +:10435000000000000000000000000000000000005D +:10436000000000000000000000000000000000004D +:10437000000000000000000000000000000000003D +:1043800000000000000000000000000000000080AD +:104390008980000000000000C000000080000000D4 +:1043A00005004000000000000000000000000000C8 +:1043B00000000000000000000000000000000000FD +:1043C00000000000000000000000000000000000ED +:1043D00000000000000000000000000000000000DD +:1043E00000000000000000000000000000000000CD +:1043F00000000000000000000000000000000000BD +:104400000000000000000000000000008004000226 +:10441000800000008000800080008000800080001C +:10442000000000000000000200000000000000008A +:10443000000000000000000000000000000000007C +:10444000000000000000000000000000000000006C +:10445000000000000000000000000000000000005C +:10446000000000000000000000000000000000004C +:10447000000000000000000000000000000000003C +:104480000000000000000000000000000000040127 +:1044900010010800A000100002000200100002003D +:1044A00090009000A000000000010000000000004B +:1044B00000000000000000000000000000000000FC +:1044C00000000000000000000000000000000000EC +:1044D00000000000000000000000000000000000DC +:1044E00000000000000000000000000000000000CC +:1044F00000000000000000000000000000000000BC +:1045000000000000000000000000000000000000AB +:10451000008100E007000000000000E00000000053 +:10452000000000E0000000000000000007000000A4 +:10453000000000000000000000000000000000007B +:10454000000000000000000000000000000000006B +:10455000000000000000000000000000000000005B +:10456000000000000000000000000000000000004B +:10457000000000000000000000000000000000003B +:10458000000000000000000000000000000000002B +:104590000000A0F5A0F55555AA55A03FAF3F00007B +:1045A0000000F0F000FF000000000000000000002C +:1045B00000000000000000000000000000000000FB +:1045C00000000000000000000000000000000000EB +:1045D00000000000000000000000000000000000DB +:1045E00000000000000000000000000000000000CB +:1045F00000000000000000000000000000000000BB +:1046000000000000000000000000000000000000AA +:104610000000000028287D7DAAAA00FFA030AF304E +:1046200000000000AAAA3C3C0000000000000000BE +:10463000000000000000000000000000000000007A +:10464000000000000000000000000000000000006A +:10465000000000000000000000000000000000005A +:10466000000000000000000000000000000000004A +:10467000000000000000000000000000000000003A +:10468000000000000000000000000000000000002A +:104690000000000000007D413F3F0000FFFFDFD32E +:1046A0001F130000000055FF55000000000000002F +:1046B00000000000000000000000000000000000FA +:1046C00000000000000000000000000000000000EA +:1046D00000000000000000000000000000000000DA +:1046E00000000000000000000000000000000000CA +:1046F00000000000000000000000000000000000BA +:1047000000000000000000000000000000000000A9 +:1047100000000000000000007D4103030000FFFFD7 +:10472000DCD01C10000000000F3C0F3C000000001B +:104730000000000000000000000000000000000079 +:104740000000000000000000000000000000000069 +:104750000000000000000000000000000000000059 +:104760000000000000000000000000000000000049 +:104770000000000000000000000000000000000039 +:104780000000000000000000000000000000000029 +:10479000000000000000000000000061303F004DFC +:1047A000000000613007000D000000613007000DBF +:1047B000000005000A08050000A00000000000003D +:1047C00000000000000000000000000000000000E9 +:1047D00000000000000000000000000000000000D9 +:1047E00000000000000000000000000000000000C9 +:1047F00000000000000000000000000000000000B9 +:1048000000000000000000000000000000000000A8 +:104810000000000000000000000000000000000098 +:104820000000000000000000000000000000000088 +:104830000000000000000000000000000000000078 +:104840000000000000000000000000000000000068 +:104850000000000000000000000000000000000058 +:104860000000000000000000000000000000000048 +:104870000000000000000000000000000000000038 +:104880000000000000000000000000000000000028 +:104890000000000000000000000000000000000018 +:1048A0000000000000000000000000000000000008 +:1048B00000000000000000000000000000000000F8 +:1048C00000000000000000000000000000000000E8 +:1048D00000000000000000000000000000000000D8 +:1048E00000000000000000000000000000000000C8 +:1048F00000000000000000000000000000000000B8 +:1049000000000000000000000000000000000000A7 +:104910000000000000000000000000000000000097 +:104920000000000000000000000000000000000087 +:104930000000000000000000000000000000000077 +:104940000000000000000000000000000000000067 +:104950000000000000000000000000000000000057 +:104960000000000000000000000000000000000047 +:104970000000000000000000000000000000000037 +:104980000000000000000000000000000000000027 +:104990000000000000000000000000000000000017 +:1049A0000000000000000000000000000000000007 +:1049B00000000000000000000000000000000000F7 +:1049C00000000000000000000000000000000000E7 +:1049D00000000000000000000000000000000000D7 +:1049E00000000000000000000000000000000000C7 +:1049F00000000000000000000000000000000000B7 +:104A000000000000000000000000000000000000A6 +:104A10000000000000000000000000000000000096 +:104A2000000000000009000020000000200000003D +:104A30000000000000000000000000000000000076 +:104A400000000080000000002000000000000000C6 +:104A50000000000000000000000000000000000056 +:104A60000000010000030000000000000000000042 +:104A700000000000000000000000000082000000B4 +:104A8000000000000080880000000080008000809E +:104A900000800080008000820080008020800080F4 +:104AA0000080018000800000000000000000000085 +:104AB00000000000000000000000000000000000F6 +:104AC00000000000000400000000000000000000E2 +:104AD00000000000000000000000000000000000D6 +:104AE00000000000200000000000000000000000A6 +:104AF00000000000000000000000000000000000B6 +:104B00000000000000000004000000000040001051 +:104B100000400002000400100011004000400002AC +:104B20000010000804040010000000000000000055 +:104B30000000000000000000000000000000000075 +:104B40000000000000000000000000000000000065 +:104B50000000000000000000000000000000000055 +:104B60000000000000000000000000000000000045 +:104B70000000000000000000000000000000000035 +:104B80000000000000000000000000000000000025 +:104B90000000000000000000000000000000000015 +:104BA00000000000000000000000000800000008F5 +:104BB00000000008000000000000000000080008DD +:104BC0000008008400840000008400840000008449 +:104BD00000000008000000000000000000840084C5 +:104BE0000084000000000000000000000000000041 +:104BF00000000000000800000000000000000000AD +:104C00000000000000000000000800000084000018 +:104C1000000000000008000000000000000000008C +:104C200000000000000000000008000000108800E4 +:104C3000000000098400C0008405004184000000D9 +:104C40000000C00090000000000000000000000014 +:104C50000000000000050005000000020021000027 +:104C60000005000000000000000000000000000837 +:104C700000210021000300000003000000000000EC +:104C800000210021000000000000000000000021C1 +:104C90000021102100000000108004000200100814 +:104CA00020080088000010000200880004000000B6 +:104CB0000000000000000000008400000000000070 +:104CC00000000000000000000000000000000000E4 +:104CD00000000000000000000000000000000000D4 +:104CE00000000000000000000000000000000000C4 +:104CF00000000000000000000000000000000000B4 +:104D000000000000000000000000000000000000A3 +:104D10000000000080000000000080208000800073 +:104D200080008000000800008000800000008000FB +:104D30004000A0000400000000000000000400008B +:104D40000000000000000000000000000000000063 +:104D50000000000000000000000000000000000053 +:104D60000000000000000000000000000000000043 +:104D70000000000000000000000000000000000033 +:104D80000000880002000000000000000000040095 +:104D90000000020000000000000000000000000011 +:104DA00000008800000000000000880000000000F3 +:104DB0000000009011000000000000000000000250 +:104DC0000000000000000000000000900000000053 +:104DD00000000000000008000000080000000000C3 +:104DE0000000009000000000000000000000000033 +:104DF00000000000000000000800000000000000AB +:104E000000000000000000000000000000000000A2 +:104E10000000000000000000000000000000000092 +:104E2000000000000000000000000084000020409E +:104E30002000000000000000900000004000000082 +:104E40000000000000000000000000000000000062 +:104E5000000000000000000000000000080000004A +:104E60000000000000000000000000000000000042 +:104E70000000000000000000000000000000000032 +:104E800000000041000000410000000000000000A0 +:104E90000000000000000000820000000000C000D0 +:104EA0000000820000000003000500000041000037 +:104EB0000000000000210000009000000000000041 +:104EC0000004000209000088050021000000000025 +:104ED00010000000000000000000000000000000C2 +:104EE00000000000000000000000000000000000C2 +:104EF00000000000000000000000000000000000B2 +:104F000000000000000000000000000000000000A1 +:104F10000000000000000000000000000000000091 +:104F20000000000000000000000000000000000081 +:104F30000000000000000000004100000000000030 +:104F400082008200880000000000002000040000B1 +:104F50000000000000000000000000000000000051 +:104F600088000000000000000005001100000000A3 +:104F700000110021000800000000000000000000F7 +:104F80000000880000000000000000000000000099 +:104F900000002011900090080000000000000000B8 +:104FA000000090000200000000000011000004005A +:104FB000000000110240000000040000004000005A +:104FC000021000000000110020000000000000009E +:104FD0000000000000000000400000000000000091 +:104FE00000000000000000000000000000000000C1 +:104FF00000000000000000000000000000000000B1 +:1050000000000000000000000000000000000000A0 +:105010000000000000000000000000000000000090 +:105020000000000000000000000000000000000080 +:1050300000000000000000042040004000000000CC +:10504000000000000000000000000000010000005F +:1050500000840000000000000000000000000000CC +:10506000000000000100000000000000000000003F +:1050700000C0000000000000000000000000000070 +:10508000000000000000010000000000000000001F +:10509000000000C000000000000000000000000050 +:1050A000010000008583010004000141C082050168 +:1050B000040000C0C082010000000140C0000000E8 +:1050C00000000000000000000000000000000405D7 +:1050D000410000000000000000000000000000008F +:1050E000000000000000410000000000000000027D +:1050F000020000800000000000000000000000002E +:10510000000000000000000041000000000000005E +:10511000000202000080000000000000000000000B +:1051200000414041000040414141004141888480AC +:105130002005A1410080008041410041418580005F +:10514000000040000000000000000000000000001F +:1051500002002100002000000000000000000040CC +:10516000000003000000008000008000000000003C +:10517000090009800080008000000000000000415C +:10518000000000000300000000800000800000001C +:105190000000090004000080000000000000000082 +:1051A00000414100400500410000414111410041E2 +:1051B00000418240008300202080C100A14100C145 +:1051C000004100000100000000000000000000009D +:1051D0000000A100C0A00041C0008200000000004B +:1051E000000100000100000000C0000020000000DD +:1051F000000010000482000890020200000000007D +:105200000001000000000100000000C000002000BC +:10521000000000009000829000089000C000000094 +:1052200000000001000001000085000000010001F5 +:105230000001000109C0C0820001010840002001F6 +:1052400000058201000000000000000000000000D6 +:10525000000000000040000000000000000000000E +:105260000000000000000000C0000000000000007E +:105270000000000000040000020000000000000028 +:1052800000000000000000000000C000000000005E +:105290000000000000000004000002000000000008 +:1052A00000000000000000400001C1820100000079 +:1052B0000000C182040000880000C08501000000D9 +:1052C0000000C1000000000000000000000000001D +:1052D00000000000000000000000000000000000CE +:1052E000000000000000000000008000000000003E +:1052F000000000000000008000000000000000002E +:10530000000000000000000000000000800000001D +:10531000000000000000000000800000000000000D +:10532000000000000000000000800003C085200095 +:1053300000000041C19100000005004103824100CE +:1053400000000021C1050000004080000084000032 +:10535000000000000000000000418000000200008A +:1053600000000000000000000000800000C10000FC +:105370000000000000000000004180400003000029 +:10538000000000000000000000000000800000C1DC +:105390000000000000000000000000418040000309 +:1053A0000000000000000000000085C0804100C136 +:1053B00000004109804141C103C120840000808078 +:1053C000000041410041808003C1000120000041F4 +:1053D0000000000000000000000000410400000187 +:1053E000000000000000000000000000400000C1BC +:1053F0000000000000000000000000C140010001AA +:10540000000000000000000000000000000040005C +:1054100000C10000000000000000000000C14001C9 +:1054200000010000000000000000000040C1200159 +:105430008240000000001001A0C101C121110082C2 +:1054400040C000000001000140C001C10000000098 :10545000000000000000000000000000810000E0EB -:1054600000004800000000000000000600000000EE -:10547000000000000000000000000000810000E0CB -:1054800000004800000000000000000A00000000CA -:10549000000000000000000000000000000081008B -:1054A00000E00000480000000000000000000000D4 -:1054B000000000000000000000000000000081006B -:1054C00000E0000048000000000000000043000071 +:1054600000004800000000000000000000000000F4 +:10547000000000420000000000004800810000E041 +:105480000000480000000000000000420000000092 +:105490000000000000420000000000004800810001 +:1054A00000E0000048000000000000000042000092 +:1054B0000000000048420000000000004842411285 +:1054C00000E0070000420000000000004842000029 :1054D00000000000000000000000000000000000CC :1054E00000000000000000000000000000000000BC :1054F00000000000000000000000000000000000AC @@ -128379,210 +128379,210 @@ :1055A00000000000000000000000000000000000FB :1055B00000000000000000000000000000000000EB :1055C00000000000000000000000000000000000DB -:1055D0000000247B0000000000000000000000002C +:1055D0000000747B000000000000000000000000DC :1055E00000000000000000000000000000000000BB -:1055F000DE24247B0000000000000000000000000A +:1055F000DE2E747B000000000000000000000000B0 :10560000000000000000000000000000000000009A -:10561000DE240000247B00000000000000000000E9 +:10561000DE2E0000747B000000000000000000008F :10562000000000000000000000000000000000007A -:105630000000DE24247B00000000000000000000C9 +:105630000000DE2E252B000000000000000000000E :10564000000000000000000000000000000000005A -:105650000000DE2461F6034000000000000002317B -:10566000E0000000000000000C400000000000000E -:1056700002C06F8661F603400000000000000231A6 +:105650000000D4A4615603400000000000000230A6 +:10566000A0000000000000000C400000000000004E +:1056700002C06A866156034000000000000002314B :10568000E0000000000000000C40000000000000EE -:1056900002C06F86000061F60340000000000000B9 +:1056900002C06A860000615603400000000000005E :1056A0000231E0000000000000000C40000000009B -:1056B000000002C06F8661F6034000000000000099 +:1056B000000002C06A8660DE0340000000000000B7 :1056C0000231E0000000000000000C40000000007B -:1056D000000002C06F862008841020008400200093 -:1056E000041004000200401020054004881040030C -:1056F0000500008541022005400320850089200027 -:105700002010A000200920038409040304092010AC -:105710002009040440100003400502900980049011 -:105720008802200520800004880088102010880549 -:105730002090200000202000C100888040108400BC -:105740008810201040000000200088908400848091 -:10575000201020904080C08309000000000000005D -:10576000040080000000000004000000850020010B -:10577000840040000420A0850000008480042010E4 -:10578000000000840000090000200000840084A0C4 -:10579000800000000000000000000000A004821053 -:1057A000C0040011000000100000000004200000F0 -:1057B000040000200000050104000800001004207F -:1057C000400005000400000004000400200204C0A2 -:1057D000001000000002000202040009000400059D -:1057E000000400C000840004000900050004000853 -:1057F0000004000200080003000400020009000089 -:1058000000100041012008040010004100040009BC -:1058100000000003004100020008000001840009AC -:10582000008800850000009000100040000801057D -:1058300000410010000500000041002000050005A7 -:105840000080000800080000004101200000010065 -:105850000000000800000000000500100010000813 -:1058600000080008000400040008400800080008C0 -:1058700020880008000900100004040804890004BE -:105880000008090409080409C108410500080008C6 -:10589000200409080084001002090482000020404E -:1058A0000982092000200084414140080508408207 -:1058B00008820504208200084108400840092008A9 -:1058C00005101110200000840908200804094082F6 -:1058D0002008400840840004400800080040000000 -:1058E0000089004100000008018820042004000213 -:1058F000000200050000000400400008088300408A -:10590000000900C000050010000500050008002186 -:10591000002100900000004100080000000000008D -:10592000040304A1040009000010000800000002A4 -:1059300000100008000200050020042100210040A2 -:105940000010000800400010000300030010902128 -:105950002003000408A10100840300850040900298 -:105960000000082000000000000020208085900139 -:105970004185000100100084004100C000000004C7 -:1059800041100000410400100082000000820082EB -:10599000000000000002001000000000000000A055 -:1059A00000008000801088008800000000100000C7 -:1059B0000888008208000009004000A1C1000082A0 -:1059C00000000000000000000000000000000000D7 -:1059D000001080000085800220A00010000400005C -:1059E00008840000C000000008000000820382005C -:1059F0008200010000008400A00008008200100066 -:105A00008200020020000880C0008400C0800800DE -:105A10001000A0000800820008000800A00082001A -:105A200082000000090004000400A1800800820038 -:105A3000A000A0000800C00000000000820090004C -:105A4000A000820082000800080004000800100086 -:105A500008008200A0002000080009008200C000A9 -:105A600040008200000400040004000000A000A028 -:105A700008100000400000000000008400840000C6 -:105A8000008200C0000000000004000000000020B0 -:105A9000200000004100034002400200008240005C -:105AA000000000C0000020C00208000004040090B4 -:105AB0002100030404A000A0218403A021004110C0 -:105AC0000300080040840090210000A000000000B6 -:105AD000000400A011000500000408042000108448 -:105AE00000A003000004C0038200820200000183C2 -:105AF00008030021004000408200000082022021B3 -:105B00000800001008000000080882410208001088 -:105B100082804000011000400003822004208205A2 -:105B2000C040C00000400000000504000000C003A9 -:105B30000008A005C00210100005C00310000008F6 -:105B4000004182008200001000001021840001004A -:105B50000041A021820001080010200082000904F9 -:105B600084048304009010840000000000010010F1 -:105B700020040000000000000000001000000001F0 -:105B80008000000000000000000000000000000095 -:105B90000000002080004000008400C0000180015F -:105BA000000000000000000800000000800000006D -:105BB00000000000000000C100000000000000081C -:105BC00000000000000000000010000000000000C5 -:105BD00040000000000000004008008400000000B9 -:105BE000C003000008850020001100008200821020 -:105BF000004100000400000020000800A020002157 -:105C00002000001000000011A02100080011C04178 -:105C100000088421202100000005001182050208EF -:105C20000004100882210000080000000008A08085 -:105C3000400990000009A00000002000000002417F -:105C400004000005904004102000212100000441C0 -:105C500000210104C0410000004100410008202152 -:105C60000800040440080021400504000000090069 +:1056D000000002C07B060000000000000080000007 +:1056E000000000000040000000000000000000007A +:1056F00000000000000000000000000000000000AA +:105700000000000000008400000000000000000015 +:105710000000000000000003000000000000000086 +:105720000000000000000200000000000000040073 +:105730000000000000000000000000000000000069 +:105740000000000000002000000000000000000039 +:105750000000000000000000000000000000002029 +:105760000000000000000001000000000000000038 +:105770000000000000000000000000000000000029 +:105780000000000000000000000000000000000019 +:105790000000000000000000000000000000000009 +:1057A00000000000000000000000000000000000F9 +:1057B00000000000000000000000000000000000E9 +:1057C00000000000000000000000000000000000D9 +:1057D00000000000000000000000000000000000C9 +:1057E00000000000000000000000000000000000B9 +:1057F0000000000000410000000000000000000068 +:105800000000000000000000000000000000000098 +:105810000000000000000000000000000000000088 +:105820000000000000000000000000000000000078 +:105830000000000000000000000000000000000068 +:105840000000000000000000000000000000000058 +:105850000000000000000000000000000000000048 +:105860000000000000080000000000000000000030 +:105870000000000000000000000000000000000028 +:105880000000000000880000000000000000000090 +:105890000000000000000000000000000000000008 +:1058A00000000000000000000000000000000000F8 +:1058B00000000000000000000000000000000000E8 +:1058C00000000000000000000000000000000000D8 +:1058D00000000000000000000000000000000100C7 +:1058E0002000010020000100010000000000000075 +:1058F0000000008000000000000000000000000028 +:105900000000000000000000000000000000000097 +:105910000000000000000000000000000000000087 +:105920000000000000000005000000000000000072 +:105930000000000000000000000000000000000067 +:105940000000000000000000000000000000000057 +:105950000000000000000000010000004000000006 +:1059600020008000040080002000200000000000D3 +:105970000000000000040000000000000000000023 +:105980000000000000000000000000000000000017 +:1059900000000000000000A0000000000000000067 +:1059A00000000000000000000000000000000000F7 +:1059B00000000000000000000000000000000000E7 +:1059C00000000000000000000000000021000000B6 +:1059D0000000000000000000000004000000800043 +:1059E000000000000000880000000000000000002F +:1059F00000000000000000000000000000000000A7 +:105A00000000000000000000000000000000000096 +:105A10000000000000000000000000000000000086 +:105A20000000000000000000000000000000000076 +:105A30000000000000000000000000000000000066 +:105A40000000000000000000000000000000000056 +:105A50000000000000000000000000000000000046 +:105A600000001000000000002000000020002000C6 +:105A70000000000000000000000000000000000026 +:105A80000000000000000000000000000000000016 +:105A90000000000000000000000000000000000006 +:105AA00000000000000000000000000000000000F6 +:105AB00000000000000000000000000000000000E6 +:105AC00000000000000000000000000000000000D6 +:105AD00000000000000000000000000000000000C6 +:105AE00000000000800001000100008000000000B4 +:105AF00000000100000000C1008000000004000060 +:105B00000000000000000000000000000000000095 +:105B10000000000000000000000000000000000085 +:105B20000000000000000000000000000000000075 +:105B30000000000000000000000000000000000065 +:105B40000000000000000000000000000000000055 +:105B500000000000000000000000000000800800BD +:105B600008004100020000000410040000040000CE +:105B700000000000200000000004000400000001FC +:105B80000000000000000000000000000000000015 +:105B900000000000000000000000000021000000E4 +:105BA00000000000000000000000000000000000F5 +:105BB00000000000000000000000080000002100BC +:105BC00021000000000000000000000000000000B4 +:105BD000000000000000000000C0000000C0001035 +:105BE0000000800088008000000088000000900015 +:105BF00000002000200000008200002000000005BE +:105C0000002000000000000900000000000000006B +:105C10000000000000004000000000000000000044 +:105C20000000000000000000000000000000000074 +:105C300000000000000000004000024000000000E2 +:105C40000000000000000000000000000000020052 +:105C50000000000000000000000000000000000044 +:105C600000000000000000000080040000000000B0 :105C70000000000000000000000000000000000024 -:105C800000000000000000000000000000004000D4 +:105C80000000000000000000000000000000000014 :105C90000000000000000000000000000000000004 -:105CA0000000000000000000401000000000110093 -:105CB000210420904100000004000000000000408A -:105CC0000000200000004100040000000484008265 -:105CD00000000008042020000000204000A0000078 -:105CE000080080402082800400C00004A04000A082 -:105CF000019000020010000190820483000800005F -:105D0000A1008200000084000110200200100000A9 -:105D1000A001900100000002902010000004A008E3 -:105D200000088484901001010000100100000000B0 -:105D3000A0C0400009110090004100108810100020 -:105D40000090000800100010C0000000008810043F -:105D500003002120080008080100010010000000D5 -:105D6000A000000040000000000000000000000053 -:105D700000800880008000800011840584C000102D -:105D80000304880080000005090503C009C10089DB -:105D90000003911084030020408091000000000067 -:105DA00011801080808000002010052185020000F5 -:105DB000000000050841031000A000C040800084DE -:105DC00000040000008000000000800000000000CF -:105DD0008000A1008880800080800800040000000E -:105DE0000000000008000900004000030000090056 -:105DF000000502000003058010800300040011006C -:105E0000400320000200C100100903000905408082 -:105E1000042109808800201121201080A11184C054 -:105E200080008300A1110400218040004000050093 -:105E300020800000030005C1848803C10400050020 -:105E40008310A08000000500030010000000000087 -:105E5000800080000000000380008000000000003F -:105E600080000000028021009000A00000002100BE -:105E7000030080C101000001000201A000A0000099 -:105E80000100010000A091001000840000000084C7 -:105E900000840041004009008900410021400303C3 -:105EA00040048200A00002000100C11000000000B8 -:105EB000010000A0000000200011A0A0841100003B -:105EC0009000A00008A000000000000001000000F9 -:105ED00002000882080010000000A00090004000AE -:105EE00010004000000000020300A00010000008A5 -:105EF000C1000000040910000000000110000001B2 -:105F000000000000020100000000A101000000A04C -:105F10000100000140C1000000004001010000102C -:105F2000001000910001100800000084010800002A -:105F30000000C00100000000010490208391410294 -:105F4000000100010002A01010000000000010007D -:105F5000000000820020A108080100110040A0A05C -:105F600000000000000100000041001100000000DE -:105F700000000100840000010002000200218010E6 -:105F8000002009050520001100040041A1050509B4 -:105F900000091010112100090010410320052009FB -:105FA000000900840021000800040000009009405E -:105FB000004100400008002000001040918540A1F1 -:105FC0002088001000400011800300000000000045 -:105FD00000000000008000000280800800A0009007 -:105FE00000100003000900080009000200840002FC -:105FF000000000001100800011020000800000007D -:10600000004003800511080003021000200803006F -:10601000110221048208C100902020024004038064 -:10602000050420802004000090400089000500C085 -:1060300000050080000000000041000085110804F8 -:1060400002008811008000000000000800800004A9 -:106050000000000380000089000000008041000073 -:10606000808080000009000200000000032004C0BE -:10607000100003020310050905910090880010002C -:1060800040000400000200010100010100000121A4 -:106090000120000091A0020110000801010000038E -:1060A0000140000083C08801902008001008009083 -:1060B0000041100100C000000000000000000221AB -:1060C00088118800050100C0001000400001000296 -:1060D00000010000000102000004888800000401A3 -:1060E0000000041004000000000000100000008800 -:1060F000012001080100000000000041000800002C -:10610000000007000000000000E0070000000000A1 -:10611000000000000000000000E007000000000098 -:1061200000E0000000000000000007006000000028 -:10613000000007000000000000E000004200000036 -:10614000000000E00700840A000000000000880052 -:1061500000000000000000000000000007004100F7 -:10616000000000000700820000810000070000001E -:10617000000000E000000000000000E00700000A4E -:1061800098998881000000000000000000000000D5 -:1061900000000000000000007242724218187E7E6B -:1061A00000000000000000009F9F0CCF0CCF0CCF20 -:1061B0000000C3C3BD24FF66000000000000000013 -:1061C00000009F3C003C0000002000000000000098 -:1061D000FFFF000000000000000060606F6FF960CA -:1061E000F9F9C0C00000000000000000000000003D -:1061F0000000000000004B4B4B4B00000000000073 -:106200000000181918110000000000000000000034 -:106210000000000000000000000072427E4E1818CE -:106220007E7E000000000000000006060CCF0CCFB0 -:106230000CCFFFFFC3C3BD24BD240000000000003D -:1062400000000000BF003C00000000200000000033 -:1062500000FF00FF000000000000000060606F6FA2 -:10626000F96060600000000000000600000000000F -:1062700000000000000000004B4B4B4B00000000F2 -:10628000000000000000000000000000000000000E +:105CA00000000000000000000000000000000000F4 +:105CB00000000000000000000000000000000000E4 +:105CC00000000000000000000000000000000000D4 +:105CD00000000000000000000000000000000000C4 +:105CE0000000000000000000000000208000000014 +:105CF00000000100000000080010008800080000FB +:105D00000000000000000000000000000000000093 +:105D10000000000000000000000000000000000083 +:105D20000000000000000000000000000000000073 +:105D30000000000000000000000000000000000063 +:105D40000000000000000000000000000000000053 +:105D50000000000000000000000000000000000043 +:105D6000000000000000000008C0011011108402B3 +:105D7000000000004000000000800080050000805E +:105D800000000000400000000000000000000000D3 +:105D90000000000000000000000000000000000003 +:105DA00000000000000000000000000000000000F3 +:105DB00000000000000000000000000000000000E3 +:105DC00000000000000000000000000000000000D3 +:105DD00000000000000000000000000000000000C3 +:105DE0000000000000000000000080002080C000D3 +:105DF00000000004000000400000000400200084B7 +:105E00000000000500000004000000000000000089 +:105E10000000000000000000000000000000000082 +:105E20000000000000000000000000000000000072 +:105E30000000000000000000000000000000000062 +:105E40000000000000000000000000000000000052 +:105E50000000000000000000000000000000000042 +:105E6000000000000000000000000000020000210F +:105E70008080002100010084000000840001008374 +:105E80000011000000000000000100000000000000 +:105E90000000000000000000000000000000000002 +:105EA00000000000000000000000000000000000F2 +:105EB00000000000000000000000000000000000E2 +:105EC00000000000000000000000000000000000D2 +:105ED00000000000000000000000000000000000C2 +:105EE00000000000000000000000000000008484AA +:105EF000040110108401010084000400010004006A +:105F00008400000090000000040000000000000079 +:105F10000000000000000000000000000000000081 +:105F20000000000000000000000000000000000071 +:105F30000000000000000000000000000000000061 +:105F40000000000000000000000000000000000051 +:105F50000000000000000000000000000000000041 +:105F60000000000000000000000000000000000031 +:105F7000C08500A10009C102040000000000040067 +:105F8000800000000000C00000008000000005004C +:105F90000000000000000000000000000000000001 +:105FA00000000000000000000000000000000000F1 +:105FB00000000000000000000000000000000000E1 +:105FC00000000000000000000000000000000000D1 +:105FD00000000000000000000000000000000000C1 +:105FE00000000000000000000000000000000000B1 +:105FF0000000800400A10085049000000020000043 +:106000000000800000008000800000000000000010 +:106010000000000000000000000000000000000080 +:106020000000000000000000000000000000000070 +:106030000000000000000000000000000000000060 +:106040000000000000000000000000000000000050 +:106050000000000000000000000000000000000040 +:106060000000000000000000000000000000000030 +:1060700000000000C104A184A180091000000001FB +:10608000000000000800A000080008000000000058 +:106090000000000000000000000000000000000000 +:1060A00000000000000000000000000000000000F0 +:1060B00000000000000000000000000000000000E0 +:1060C00000000000000000000000000000000000D0 +:1060D00000000000000000000000000000000000C0 +:1060E00000000000000000000000000000000000B0 +:1060F000000000000000C100A0A009A08400000072 +:1061000000E007000000000000E0000000000000C8 +:1061100000E000000000000000000000000000009F +:10612000000000000000000000000000000000006F +:10613000000000000000000000000000000000005F +:10614000000000000000000000000000000000004F +:10615000000000000000000000000000000000003F +:10616000000000000000000000000000000000002F +:106170000000000000000000418200E00700600015 +:106180000000000000000000F3F37E420000000069 +:1061900000000000000000000000000000000000FF +:1061A00000000000000000000000000000000000EF +:1061B00000000000000000000000000000000000DF +:1061C00000000000000000000000000000000000CF +:1061D00000000000000000000000000000000000BF +:1061E00000000000000000000000000000000000AF +:1061F00000000000000000000000000166FF808039 +:106200000000000000000000000030307E4200006E +:10621000000000000000000000000000000000007E +:10622000000000000000000000000000000000006E +:10623000000000000000000000000000000000005E +:10624000000000000000000000000000000000004E +:10625000000000000000000000000000000000003E +:10626000000000000000000000000000000000002E +:10627000000000000000000000000000000000001E +:1062800080990000000000000000000000000000F5 :1062900000000000000000000000000000000000FE :1062A00000000000000000000000000000000000EE :1062B00000000000000000000000000000000000DE @@ -128590,324 +128590,324 @@ :1062D00000000000000000000000000000000000BE :1062E00000000000000000000000000000000000AE :1062F000000000000000000000000000000000009E -:1063000000000000000038FB00C300000000092D61 -:10631000092D000000000000000000900090660CB5 -:10632000660C000000000000000000000096C300A2 -:10633000FF3C0000C0C00F0F00FF6060F0F00000E5 -:1063400000000000000000000404C7C7000000991E -:106350009900990F00990606000000000000000057 -:1063600036363636666666660000000000C300C337 -:10637000000000000C000C0000000000666666666D -:1063800000000000F0F0000000FF00FF000000002F -:10639000092D092D00000000000000000000909071 -:1063A000660C660C00000000000000000000000009 -:1063B000C300FF3C00C000C03C3C00FFC0C0F0F088 -:1063C000000000000000000000000404C7C7000037 -:1063D00000999900990F66FF06063C3C343C00008A -:1063E0000000363636360F0FFF0000180018000088 -:1063F000FFFF0000000000000000000000000F0090 -:10640000FFF000000000F0F0FFFF00610006000D4B -:106410000000006100010001000000610006000DA5 -:1064200000000061300B000900000061000700055A -:10643000000000610E0E000D00000061400E000D16 -:10644000000000610003000D0000000085610A09E2 -:10645000051900A100610006000D000100610006A1 -:10646000000D0000000000080000000000610006B0 -:10647000000D00000061003E000D00000061000101 -:10648000000900000061000D050900A000000000E7 -:106490000F0FCFCF0F00FF2DA4F4A5F5FFFFFFFFD7 -:1064A000AAAAA0823F3C3C3FF3D3F3FB3CF53C055A -:1064B00000CAC3CA963CC396BEAA4155000000005C -:1064C000AAAA55550000000000FF0AFA0000FFFFCD -:1064D000FF4FAAFFFFFF0000000082BEAAAA000033 +:10630000000000000000000000000000000027273F +:10631000C3FF0000000000000000000000000000BB +:10632000000000000000000000000000000000006D +:10633000000000000000000000000000000000005D +:10634000000000000000000000000000000000004D +:10635000000000000000000000000000000000003D +:10636000000000000000000000000000000000002D +:10637000000000000000000000000000000000001D +:106380000000FFFFC000400000000000000000000F +:106390002727003C00000000000000000000000073 +:1063A00000000000000000000000000000000000ED +:1063B00000000000000000000000000000000000DD +:1063C00000000000000000000000000000000000CD +:1063D00000000000000000000000000000000000BD +:1063E00000000000000000000000000000000000AD +:1063F000000000000000000000000000000000009D +:10640000000000003F7FC0C0C0C005610A0F050D3D +:1064100000A000613007000D000000610007000DC2 +:10642000000000000000000000000000000000006C +:10643000000000000000000000000000000000005C +:10644000000000000000000000000000000000004C +:10645000000000000000000000000000000000003C +:10646000000000000000000000000000000000002C +:10647000000000000000000000000000000000001C +:10648000000000001041003FC00D000000000000AF +:1064900000000000000000000000000000000000FC +:1064A00000000000000000000000000000000000EC +:1064B00000000000000000000000000000000000DC +:1064C00000000000000000000000000000000000CC +:1064D00000000000000000000000000000000000BC :1064E00000000000000000000000000000000000AC -:1064F00000005F5F430000000000FF55C341D7CF9D -:10650000140CBEB4BEB455F0FFFFFFFF0000000046 -:1065100000000F0F0FFF0F00002D00500151808F62 -:10652000D0DFAAAA0000FF3C3CFF301030383C3CD2 -:106530003C3CFFCAC3CA963CC396BAAA4555000064 -:1065400000003CC33CC30000000000FF0CFC000046 -:10655000FF4FFF4FAAABFFFF00000000B2B2AAAA94 +:1064F000000000000000000000000000000000009C +:10650000000000000000000AAAAA40550000000098 +:10651000000000000000000000000000000000007B +:10652000000000000000000000000000000000006B +:10653000000000000000000000000000000000005B +:10654000000000000000000000000000000000004B +:10655000000000000000000000000000000000003B :10656000000000000000000000000000000000002B -:10657000000000005F5F5F1C00000000FF0FC3030E -:10658000D7CF140C1E141E1455F00000FFFF00009E -:106590000000000000AA14BE3C003C003030303047 -:1065A000C3C3FFFF5F0AD782FF0CF30000000000A7 -:1065B000FF0F7D0F3420F7E300000000003C003C9B -:1065C0000000000000EE00EEF000FF0F38FB3CFF83 -:1065D0000000FFFFFF75F0FFC3C3F0F0C3C3FFACC3 -:1065E000FFAA000000000000000000000000000002 +:10657000000000000000000000000000000000001B +:106580000000000000000000000AAA285555000085 +:1065900000000000000000000000000000000000FB +:1065A00000000000000000000000000000000000EB +:1065B00000000000000000000000000000000000DB +:1065C00000000000000000000000000000000000CB +:1065D00000000000000000000000000000000000BB +:1065E00000000000000000000000000000000000AB :1065F000000000000000000000000000000000009B -:106600000000C3C3C3C354FE40EA8282BEBEAF05CE -:10661000AF050000000000AA14BE55FC550C28EB85 -:10662000E8E800003C3C5F0AD782F704F704000862 -:106630000000820F000F3420F7E300000000005F2D -:10664000005F0000000000AA00FFF000FF0F08CB71 -:1066500000C30000FF75FF75FAFAC3C3F0F0C3C3AF -:1066600000AC00AA00000000000A0F0A00000000B1 +:106600000000000000000000000000000000414108 +:1066100041410000000000000000000000000000F8 +:10662000000000000000000000000000000000006A +:10663000000000000000000000000000000000005A +:10664000000000000000000000000000000000004A +:10665000000000000000000000000000000000003A +:10666000000000000000000000000000000000002A :10667000000000000000000000000000000000001A -:1066800000000000C3C3C3C3000000008282BEBE7E -:10669000AF05AF052009200020100010C000000841 -:1066A00020058800881020100403001084002010AA -:1066B0008800200520102000200504002005040586 -:1066C000201002002010200020100000841000087C -:1066D00020000400000320082000200221032010D5 -:1066E00020108800201020002000400088020010A8 -:1066F0008400840020002000000821032010C00036 -:106700000440048020050200C000041020000400A2 -:106710000000001020040000000000000000000045 -:106720000000000000000000000000000000040065 -:106730000000000000000000000000000900000050 -:106740000000000000000000000004000000000045 -:1067500000000000000000000000000000014000F8 -:10676000000000000400000000000000A00005017F -:1067700004000900040009000000200008000000D7 -:1067800000000901001004002000090000000400BE -:1067900000000400000005010000000000000000EF +:10668000000000000000000000000000000000000A +:1066900041414141000000000000000000000100F5 +:1066A00000000000000000000000000000000000EA +:1066B00000000000000000000000000000000000DA +:1066C00000000000000000000000000000000000CA +:1066D00000000000000100000000000000000000B9 +:1066E00000000000000000000000000000000000AA +:1066F000000000000000000000000000000000009A +:106700000000000000000000000000000000000089 +:106710000000000000000000000000000000000079 +:106720002000000000000000000000000000000049 +:106730000000000000000000000000000000000059 +:106740000000000000000000000000000000000049 +:106750000000000000000000000000000000000039 +:106760000000000000000000000000000000000029 +:106770000000000000000000000000000000000019 +:106780000000000000000000000000000000000009 +:1067900000000000000000000000000000000000F9 :1067A00000000000000000000000000000000000E9 :1067B00000000000000000000000000000000000D9 :1067C00000000000000000000000000000000000C9 -:1067D0000000000000000000000000800000000039 +:1067D00000000000000000000000000000000000B9 :1067E00000000000000000000000000000000000A9 -:1067F0000000000000000000008000000000008099 -:106800000000000000000000000000050000000083 -:106810000000008000000000000000000084000074 -:10682000000800080010000800100088008400889C -:10683000000800080008000000080008008400109C -:106840000084000800080084000800880084000814 -:106850000088008800880000000800000040004018 -:10686000008200000008008800000008001000847A -:10687000000800080008008200080010000800C09E -:106880000002000000080088000800400084008822 -:1068900000080010004000000008008800210003EC -:1068A00000210000000000050000000800080003AF -:1068B0000008004100100005004100000000001029 -:1068C0000010000000050041004100100003000816 -:1068D000002100080003002100080003000000411F -:1068E00001080010000200030021000800210041FF -:1068F0000000011000410004000500100008000025 -:1069000000400009000800020008004100080000E3 -:1069100000210009400000002003002102080000BF -:1069200000002100000221820000410008C0000098 -:10693000000003100000008200004110030003A0CB -:10694000038403022184008200820000000000A072 -:1069500000100000030203A0410000A0031000008B -:1069600000A04000000003C100000008000000007B -:10697000000021084084001003A100A0088400A0AA -:10698000000000010000008208000800000203026D -:10699000031000020002830000088810080080A095 -:1069A0008200A000C000400000008200A00008009B -:1069B000080082004000820008000000A0000000E3 -:1069C0009000A000C000A00082000000820008002B -:1069D00000008200400082000800010082000000E8 -:1069E0000000A00000008800040004000400A000D3 -:1069F000020082000000000000000000040001000E -:106A0000A00082000400C00004800080A000088074 -:106A1000C00088000800820004004000820040009E -:106A200020040208418400C00000030000000000B0 -:106A300000000000000000000000000000A00000B6 -:106A400000000040000000000000040000000400FE -:106A500000040000000003400000000020100000BF -:106A600020900000000000000408008800000000E2 -:106A700000A000000008000800A00040080000007E -:106A80002000000000000000110000400010000085 -:106A90000002000003C00000000000000000000031 -:106AA000000002010010000800088205001000002C -:106AB00000000000000000000000844100210000F0 -:106AC0000000820000000000000000100000000034 -:106AD0000000000082080000820000210000080081 -:106AE00000000041000000000000002100100041F3 -:106AF00000000800A000A0000000C000002100006D -:106B0000200000042000C00020000002000000035C -:106B100000020010A003A000004100090205A0002F -:106B20000809820082800000008403080000000041 -:106B30000000000000840800000000A00000050024 -:106B4000000000A00000030000C0000800000010CA -:106B50002000202021000000110011000000000092 -:106B60000000000008C000000090090000A0208480 -:106B700003A00000000021880000000003000500C1 -:106B80000000800000018008000000C000C000007C -:106B90000000000800000002000000C008008000A3 -:106BA0000000000000000004040500410204002170 -:106BB0000021002100000010000000080800004033 -:106BC00000008200000082000000000800000200B7 -:106BD000000000100000002100050000000000007F -:106BE0000408400000004000000000000000900089 -:106BF0008200040240000041000200008800C00042 -:106C000040000000400000210000880040104008C3 -:106C100040008400000000000011A00000000000FF -:106C20004040001100008409C00400000000000082 +:1067F0000000000000000000000000000000000099 +:106800000000000000000000000000000000000088 +:106810000000000000000000000000000000000078 +:106820000000000000000040000000000000000028 +:106830000000000000080000000000000000000050 +:106840000000000000000000000000000000000048 +:106850000000000000080000000000000000000030 +:106860000000000000000000000000000000000028 +:106870000000000000000008000000000000000010 +:106880000000000000000000000000000000000008 +:1068900000000000000000080000000000000000F0 +:1068A00000000000200000002000000000000000A8 +:1068B00000000000000000000000000000000000D8 +:1068C00000000000000000000000000000000000C8 +:1068D00000000000000000000000000000000000B8 +:1068E00000000000000000000000000000000000A8 +:1068F0000000000000000000000000000000000098 +:106900000000000000000000000000000000000087 +:106910000000000000000000000000000000000077 +:106920000000000000008000000080000000000067 +:106930000000000000000000000000000000000057 +:106940000000000000000000000000000000000047 +:106950000000000000000000000000000000000037 +:106960000000000000000000000000000000000027 +:106970000000000000000000000000000000000017 +:106980000000000000000000000000000000000007 +:1069900000000000000000000000000000000000F7 +:1069A00000000000000000000000000000000000E7 +:1069B00000000000000000000000000000000000D7 +:1069C00000000000000000000000000000000000C7 +:1069D00000000000000000000000000000000000B7 +:1069E00000000000000000000000000000000000A7 +:1069F0000000000000000000000000000000000097 +:106A00000000000000000000000000000000000086 +:106A10000000000000000000000000000000000076 +:106A200088000000000000000000000000000000DE +:106A30000000000000000000000000000000000056 +:106A40000000000000000000000000000000000046 +:106A50000000000000000000000000000000000036 +:106A60000000000000000000000000000000000026 +:106A70000000000000000000000000000000000016 +:106A80000000000000000000000000000000000006 +:106A900000000000000000000000000000000000F6 +:106AA00000000000000000000000000000000000E6 +:106AB0000000008000000000000000000000000056 +:106AC00000000000000000000000000000000000C6 +:106AD00000000000000000000000000000000000B6 +:106AE00000000000000000000000000000000000A6 +:106AF0000000000000000000000000000000000096 +:106B00000000000000000000000000000000000085 +:106B10000000000000000000000000000000000075 +:106B20000000000000000000000000000000000065 +:106B30000000000000040000000000000000000051 +:106B40000000000000000000000000000000000045 +:106B50000000000000000000000000000000000035 +:106B60000000000000000000000000000000000025 +:106B70000000000000000000000000000000000015 +:106B80000000000000000000000000000000000005 +:106B900000000000000000000000000000000000F5 +:106BA0000000000000A00000000000000000400005 +:106BB00000000000000000000002000200000000D1 +:106BC00000000000000000000000000000000000C5 +:106BD00000000000000000000000000000000000B5 +:106BE00000000000000000000000000000000000A5 +:106BF0000000000000000000000000000000000095 +:106C00000000000000000000000000000000000084 +:106C10000000000000000000000000000000000074 +:106C20000000000000000000000000000000000064 :106C30000000000000000000000000000000000054 :106C40000000000000000000000000000000000044 :106C50000000000000000000000000000000000034 -:106C60000000000000000000000000000000020022 -:106C70000000000000000000000000000000000212 -:106C80000000800000000000000000000000000084 +:106C60000000000000000000000000000000000024 +:106C70000000000000000000000000000000000014 +:106C80000000000000000000000000000000000004 :106C900000000000000000000000000000000000F4 -:106CA00000000000000000000000002000000000C4 -:106CB00000000000000000000000000000000000D4 +:106CA00000000000000000000000000000000000E4 +:106CB00000000000000000000100000000000000D3 :106CC00000000000000000000000000000000000C4 :106CD00000000000000000000000000000000000B4 -:106CE000000000000000000001000000000008009B -:106CF00001004000C0000000000000000000010092 -:106D00000000820000000001850041000001001029 -:106D1000C1021082000800C0000200020800000842 -:106D20000100022000040900010140019000000060 -:106D30000000000000000000000000000000000053 +:106CE00000000000000000000000000000000000A4 +:106CF0000000000000000000000000000000000094 +:106D00000000000000000000000000000000000083 +:106D10000000000000000000000000000000000073 +:106D20000000000000000000000000000000000063 +:106D30000000000000000000000002000000000051 :106D40000000000000000000000000000000000043 :106D50000000000000000000000000000000000033 -:106D60000000000000000000000002000000000021 -:106D70008004020000090000000000000000000084 -:106D8000100021000000000000110205104000105A -:106D90000080020080800080000000000000800071 -:106DA0000080030080000000842004408440000034 -:106DB00000000000000000000000000000000000D3 +:106D60000000000000000000000000000000000023 +:106D70000000000000000000000000000000000013 +:106D80000000000000000000000000000000000003 +:106D900000000000000000000000000000000000F3 +:106DA00000000000000000000000000000000000E3 +:106DB00000000000000000000009000000040000C6 :106DC00000000000000000000000000000000000C3 :106DD00000000000000000000000000000000000B3 -:106DE00000000000000000000000000000000003A0 -:106DF00000000300400088000521000000000000A2 -:106E0000000020002000000000001180020040006F -:106E100003200300051085001080C0000200858259 -:106E20008400000000040000000090804004080975 -:106E30000509000000000000000000000000000044 +:106DE00000000000000000000000000000000000A3 +:106DF0000000000000000000000000000000000093 +:106E00000000000000000000000000000000000082 +:106E10000000000000000000000000000000000072 +:106E20000000000000000000000000000000000062 +:106E30000000000000000000000000000000000151 :106E40000000000000000000000000000000000042 :106E50000000000000000000000000000000000032 -:106E60000000000000000000000000200000000002 -:106E700000000000A002A000850040050000000006 -:106E8000000000000000010000000000A010C10090 -:106E9000A0008301880084C0A10289A04100C10034 -:106EA000A0A01100000000C000A0008441A041008B -:106EB000110084000000000000000000000000003D +:106E60000000000000000000000000000000000022 +:106E70000000000000000000000000000000000012 +:106E80000000000000000000000000000000000002 +:106E900000000000000000000000000000000000F2 +:106EA00000000000000000000000000000000000E2 +:106EB00000000000000000000000000000000800CA :106EC00000000000000000000000000000000000C2 :106ED00000000000000000000000000000000000B2 :106EE00000000000000000000000000000000000A2 -:106EF00000000000000000A0008900A10040000088 -:106F0000000000000000000100000001000000007F -:106F1000010000000001100100C010100301040076 -:106F20000000000400C0040100000000C001004097 -:106F30009188201100030000000000000000000004 -:106F40000000000000000000000000000000000041 +:106EF0000000000000000000000000000000000092 +:106F00000000000000000000000000000000000081 +:106F10000000000000000000000000000000000071 +:106F20000000000000000000000000000000000061 +:106F30000000000000000000000000000000000051 +:106F400080000000050000000000000000000000BC :106F50000000000000000000000000000000000031 :106F60000000000000000000000000000000000021 -:106F70000000000000000000000010880021000058 -:106F800000000000000000000008000000210004D4 -:106F90000003112105030011800400050011891070 -:106FA000800000000000000000400021001180402F -:106FB0000091888900A103C00000000000000000CB +:106F70000000000000000000000000000000000011 +:106F80000000000000000000000000000000000001 +:106F900000000000000000000000000000000000F1 +:106FA00000000000000000000000000000000000E1 +:106FB00000000000000000000000000000000000D1 :106FC00000000000000000000000000000000000C1 :106FD00000000000000000000000000000000000B1 :106FE00000000000000000000000000000000000A1 -:106FF00020000000000000000000210011800000BF -:1070000002200000000000000000008000000000DE -:1070100000002084020005000311800000800000B1 -:1070200080080000008080000020800900008000AF -:107030008000218203919000404000000000000089 +:106FF0000000000000000000000000000000000091 +:107000000000000000000000000000000000000080 +:107010000000000000000000000000000000000070 +:107020000000000000000000000000000000000060 +:107030000000000000000000000000000000000050 :107040000000000000000000000000000000000040 :107050000000000000000000000000000000000030 :107060000000000000000000000000000000000020 -:107070000000010000000000000000000184000486 -:1070800000C000010000000000000000000200003D -:107090000000000000020188000400014082C0825C -:1070A00002200801C0A000A010A0000108002000DC -:1070B00008004000C1C0A083829041000000000091 -:1070C00000000000000000000000000000000000C0 +:107070000000000000000000000000000000000010 +:107080000000000000000000000000000000000000 +:1070900000000000000000000000000000000000F0 +:1070A00000000000000000000000000000000000E0 +:1070B00000000000000000000000000000000000D0 +:1070C00000000000000000E00000000000000000E0 :1070D00000000000000000000000000000000000B0 :1070E00000000000000000000000000000000000A0 -:1070F00000000000000000E00000000000000000B0 +:1070F0000000000000000000000000000000000090 :10710000000000000000000000000000000000007F -:10711000000000000000000000E00000000000008F +:10711000000000000000000000000000000000006F :10712000000000000000000000000000000000005F -:1071300000000000000A810000E0000041000000A3 +:10713000000000000000000000000000000000004F :10714000000000000000000000000000000000003F :10715000000000000000000000000000000000002F :10716000000000000000000000000000000000001F :10717000000000000000000000000000000000000F -:1071800000000000F0BEF0FF000000000000000062 +:1071800000000000000000000000000000000000FF :1071900000000000000000000000000000000000EF -:1071A000020F000FF000F00005050F0FFF00FFFFBA -:1071B0003CBCFFFF00000000C0FFFFFF787878783C +:1071A00000000000000000000000000000000000DF +:1071B00000000000000000000000000000000000CF :1071C00000000000000000000000000000000000BF :1071D00000000000000000000000000000000000AF :1071E000000000000000000000000000000000009F :1071F000000000000000000000000000000000008F -:10720000000000000000F082F0000000000000001C +:10720000000000000000000000000000000000007E :10721000000000000000000000000000000000006E -:107220000000070F000FF000F00005050F0F000031 -:1072300000FF3CBC3CBC00000000C0FFC0FF50FA97 -:10724000787800000000000000000000000000004E +:10722000000000000000000000000000000000005E +:10723000000000000000000000000000000000004E +:10724000000000000000000000000000000000003E :10725000000000000000000000000000000000002E :10726000000000000000000000000000000000001E :10727000000000000000000000000000000000000E -:1072800000000000000000007F3EFFFF0000000043 +:1072800000000000000000000000000000000000FE :1072900000000000000000000000000000000000EE -:1072A0002000282800000000C3C30040F0FFF0FFCA -:1072B00055553CFCFFFF04040000000000000000E6 -:1072C000BEB41E140000000000000000000000001A +:1072A00000000000000000000000000000000000DE +:1072B00000000000000000000000000000000000CE +:1072C00000000000000000000000000000000000BE :1072D00000000000000000000000000000000000AE :1072E000000000000000000000000000000000009E :1072F000000000000000000000000000000000008E -:107300000000000000000000000043020000000038 +:10730000000000000000000000000000000000007D :10731000000000000000000000000000000000006D -:10732000000028082828FFFFCFAFC3C33C6CF0FF44 -:10733000F00054543CFC040404040000000000006D -:1073400000003C3C3C3C000000000000000000004D -:10735000000000000000000000000000000000002D +:10732000000000000000000000000000000000005D +:10733000000000000000000000000000000000004D +:1073400000000000000000000000000000000061DC +:107350000007000D00000000000000000000000019 :10736000000000000000000000000000000000001D -:1073700000000000000000000000000000000061AC -:107380000005000D0000000000610006001D000166 -:10739000000000000000000000610006000D000079 -:1073A000006100010001000000613006000D0001D5 -:1073B00000610006000D000100613006000D0000B4 -:1073C00000614005C019000100000000000000003D +:10737000000000000000000000000000000000000D +:1073800000000000000000000000000000000000FD +:1073900000000000000000000000000000000000ED +:1073A00000000000000000000000000000000000DD +:1073B00000000000000000000000000000000000CD +:1073C00000000000000000000000000000000000BD :1073D00000000000000000000000000000000000AD :1073E000000000000000000000000000000000009D :1073F000000000000000000000000000000000008D -:10740000AAAAFFFF0000000000005500D7825F001D -:107410005F00000000000000000000000000555563 -:1074200055553C3C3C3C0055AAFF0000000000FFC5 -:107430000AFA0000000000000000000000003C14F8 -:107440000C047545FFFFFF41FF0500000000000030 +:10740000000000000000000000000000000000007C +:10741000000000000000000000000000000000006C +:10742000000000000000000000000000000000005C +:10743000000000000000000000000000000000004C +:10744000000000000000000000000000000000003C :10745000000000000000000000000000000000002C :10746000000000000000000000000000000000001C :10747000000000000000000000000000000000000C -:107480000000AAAA00000000000000007D28FFAA5A -:10749000FF00FF00000000000000000000000000EE -:1074A000C3C3FF00553F55301010FBFB0000000028 -:1074B00000FF0CFC000000000000000000000000C5 -:1074C000FF550F05F505FFFFFF05FF050000000054 +:1074800000000000000000000000000000000000FC +:1074900000000000000000000000000000000000EC +:1074A00000000000000000000000000000000000DC +:1074B00000000000000000000000000000000000CC +:1074C00000000000000000000000000000000000BC :1074D00000000000000000000000000000000000AC :1074E000000000000000000000000000000000009C :1074F000000000000000000000000000000000008C -:107500000000000000000000000000000000F0F09B -:10751000AAAAA000A00000000000000000000000D7 -:107520000000FCFCFCFCDF1FD010A03CAF3C0000C6 -:1075300000003A3A3C3C00000000282828380000AF -:1075400000000000000000FAFAFA0B0B0B0000002C +:10750000000000000000000000000000000000007B +:10751000000000000000000000000000000000006B +:10752000000000000000000000000000000000005B +:10753000000000000000000000000000000000004B +:10754000000000000000000000000000000000003B :10755000000000000000000000000000000000002B :10756000000000000000000000000000000000001B :10757000000000000000000000000000000000000B :1075800000000000000000000000000000000000FB -:10759000F0F0AAAA14005000000000000000000053 -:1075A000000000000C0C0C0CDFDF1010AC3CAC3CFD -:1075B0000000000000FF00FF00000000282828282D -:1075C000000000000000000000FAFAFAEBEBEB000C -:1075D0008410840020108405840584002010200578 -:1075E000840088100000201020008810000520056D -:1075F0008810880804102009200520052010200587 -:1076000084052009841004100400880004098809F6 -:1076100000002010840820098400880088082005C4 -:1076200088050408040020002000200088000400D1 -:1076300020088400040004090410200004008400D1 -:107640002008200088002005880084000400040031 -:107650000000040000000000000000000000040022 -:1076600000000000200000000000000800000000F2 -:1076700004000000000000000000090000000000FD -:1076800004000400000000002000000000000500CD -:1076900004000000090000000400000000000000D9 -:1076A000050004000000090004000900000020009B -:1076B000090000000900000009002000200020004F -:1076C00004000400000004000400000000000000AA -:1076D000200000000000000000000000000000008A +:1075900000000000000000000000000000000000EB +:1075A00000000000000000000000000000000000DB +:1075B00000000000000000000000000000000000CB +:1075C00000000000000000000000000000000000BB +:1075D00000000000000000000000000000000000AB +:1075E000000000000000000000000000000000009B +:1075F000000000000000000000000000000000008B +:10760000000000000000000000000000000000007A +:10761000000000000000000000000000000000006A +:10762000000000000000000000000000000000005A +:10763000000000000000000000000000000000004A +:10764000000000000000000000000000000000003A +:10765000000000000000000000000000000000002A +:10766000000000000000000000000000000000001A +:10767000000000000000000000000000000000000A +:1076800000000000000000000000000000000000FA +:1076900000000000000000000000000000000000EA +:1076A00000000000000000000000000000000000DA +:1076B00000000000000000000000000000000000CA +:1076C00000000000000000000000000000000000BA +:1076D00000000000000000000000000000000000AA :1076E000000000000000000000000000000000009A :1076F000000000000000000000000000000000008A :107700000000000000000000000000000000000079 @@ -128915,39 +128915,39 @@ :107720000000000000000000000000000000000059 :107730000000000000000000000000000000000049 :107740000000000000000000000000000000000039 -:107750000000000000000008008400080008000885 -:1077600000080008000800840088000800080010D5 -:107770000008000800080008008400080008001045 -:107780000008008400100008000800080008000835 -:1077900000400010000800000008008400080010ED -:1077A000001000880008001000840008000800088D -:1077B0000010000800080088000800080008000009 -:1077C000008800080084001000100010000800105D -:1077D0000010001000080008000500100000000361 -:1077E00000050021002108000008000800210021F8 -:1077F00000210021000300100021000000210021D1 -:1078000000080010A041000800038210000500419C -:10781000082100100008000500000021A0108200CF -:107820000000820800000041004100030005000044 -:1078300000100000000000210021004100000000B5 -:10784000000000000003000800210000C008000044 -:107850000800080008000010001003A0008400A029 -:1078600000100000000000000310080000000000ED -:1078700000000000000000100000000000000000F8 -:1078800000000000000000080000081000A0000038 -:10789000000000000000000000A000000000000048 -:1078A000000000000800008200102108000008000D -:1078B000000000000000000000004100080000A0DF -:1078C000000000000084030003100000030800848F -:1078D00003100008030000A0038421000800C0007A -:1078E000000000000800A000000004008200C000AA -:1078F000000000008200080000008200080008006C -:107900000800000082008200000082008200000067 -:1079100082000000820004000000080000009000C7 -:10792000080000000400000008000400080008002F -:107930000000C00000000000040008000000040077 -:1079400008004000A0000800C0000800000004007B -:107950000800000008008800820000000400000009 +:1077500000000000008000000000000000000000A9 +:107760000010000000000008000000000000000001 +:107770000000000000080000000000000000000001 +:1077800000000000000000400000000000000000B9 +:1077900000000000000800000000000000000000E1 +:1077A00000000000000000000000000000000000D9 +:1077B00000000000000000080000000000000000C1 +:1077C00000000000000000000000000000000000B9 +:1077D00000000000000000020000000000000000A7 +:1077E0000000000000000000000000000000000099 +:1077F0000000000000000000000000000000000089 +:107800000000000000000000000000000000000078 +:107810000000000000000000000000000000000068 +:107820000000000000000000000000000000000058 +:107830000000000000000000000000000000000048 +:107840000000000000000000000000000000000038 +:107850000000000000000000000000000000000028 +:107860000000000000000000000000000000000018 +:107870000000000000000000000000000000000008 +:1078800000000000000000000000000000000000F8 +:1078900000000000000000000000000000000000E8 +:1078A00000000000000000000000000000000000D8 +:1078B00000000000000000000000000000000000C8 +:1078C00000000000000000000000000000000000B8 +:1078D00000000000000000000000000000000000A8 +:1078E0000000000000000000000000000000000098 +:1078F0000000000000000000000000000000000088 +:107900000000000000000000000000000000000077 +:107910000000000000000000000000000000000067 +:107920000000000000000000000000000000000057 +:107930000000000000000000000000000000000047 +:107940000000000000000000000000000000000037 +:107950000000000000000000000000000000000027 :107960000000000000000000000000000000000017 :107970000000000000000000000000000000000007 :1079800000000000000000000000000000000000F7 @@ -128956,31 +128956,31 @@ :1079B00000000000000000000000000000000000C7 :1079C00000000000000000000000000000000000B7 :1079D00000000000000000000000000000000000A7 -:1079E00000000000000300000000001082030000FF -:1079F0000000000300000000004100000000000043 -:107A00000000001000000000000000000000000066 -:107A10000000000000000000000000000000001056 +:1079E0000000000000000000000000000000000097 +:1079F0000000000000000000000000000000000087 +:107A00000000000000000000000000000000000076 +:107A10000000000000000000000000000000000066 :107A20000000000000000000000000000000000056 -:107A3000A000821000000000000000000000000014 -:107A4000821000000000C000000000000000A00044 -:107A5000000000030000000000000000000008001B -:107A6000080200000000000000000000000000000C +:107A30000000000000000000000000000000000046 +:107A40000000000000000000000000000000000036 +:107A50000000000000000000000000000000000026 +:107A60000000000000000000000000000000000016 :107A70000000000000000000000000000000000006 :107A800000000000000000000000000000000000F6 -:107A90000000000000840010000000000000000052 -:107AA00000000000080000000010000000C00000FE -:107AB0000000000000000010000008000008210085 -:107AC000211000000040000021000008000000001C -:107AD0000000000000000000000000A00000000006 -:107AE00008024085000008080000000000100004A3 -:107AF0000000000000100000000000000000000076 -:107B0000000000000000000008000000000000006D -:107B10000000000000000000000000000000080855 -:107B2000002100000000000000000000082100000B -:107B300000000000000000000400880000000000B9 -:107B40000021040004000000000008000000000004 -:107B50000000000000000021000000000400000000 -:107B600000410000000000000000000000000000D4 +:107A900000000000000000000000000000000000E6 +:107AA00000000000000000000000000000000000D6 +:107AB00000000000000000000000000000000000C6 +:107AC00000000000000000000000000000000000B6 +:107AD00000000000000000000000000000000000A6 +:107AE0000000000000000000000000000000000096 +:107AF0000000000000000000000000000000000086 +:107B00000000000000000000000000000000000075 +:107B10000000000000000000000000000000000065 +:107B20000000000000000000000000000000000055 +:107B30000000000000000000000000000000000045 +:107B40000000000000000000000000000000000035 +:107B50000000000000000000000000000000000025 +:107B60000000000000000000000000000000000015 :107B70000000000000000000000000000000000005 :107B800000000000000000000000000000000000F5 :107B900000000000000000000000000000000000E5 @@ -129155,7 +129155,7 @@ :10862000000000000000000000000000000000004A :10863000000000000000000000000000000000003A :10864000000000000000000000000000000000002A -:1086500000000001004000010000000000000000D8 +:1086500000001001000000010040000000000000C8 :10866000000000000000000000000000000000000A :1086700000000000000000000000000000000000FA :1086800000000000000000000000000000000000EA @@ -129163,7 +129163,7 @@ :1086A00000000000000000000000000000000000CA :1086B00000000000000000000000000000000000BA :1086C00000000000000000000000000000000000AA -:1086D000000000000090000000000000000000000A +:1086D00000000000208000000000000000000000FA :1086E000000000000000000000000000000000008A :1086F000000000000000000000000000000000007A :108700000000000000000000000000000000000069 @@ -129171,7 +129171,7 @@ :108720000000000000000000000000000000000049 :108730000000000000000000000000000000000039 :108740000000000000000000000000000000000029 -:108750000000000000000000000001040000000014 +:1087500000000000000048000000000400000000CD :108760000000000000000000000000000000000009 :1087700000000000000000000000000000000000F9 :1087800000000000000000000000000000000000E9 @@ -129183,15 +129183,15 @@ :1087E00000004C000000000000000000000000003D :1087F0000000000000000000000000000000000079 :108800000000000000000000000000000000000A5E -:108810000000000000000000880088000000000048 -:1088200020002000000000002000200020000000A8 -:108830000000C000200010002000880000000000A0 -:108840000000C00000000000200020000000000028 -:10885000C000880020002000000020002000000050 -:1088600000000000880000000000200088000000D8 -:108870000000C00020002000200020002000000098 -:1088800000000000000000000000200020000000A8 -:108890000000200088001000200000000000000000 +:108810000000000000000000000000000000000058 +:108820000000000000000000000000000000000048 +:108830000000000000000000000000000000000038 +:108840000000000000000000000000000000000028 +:108850000000000000000000000000000000000018 +:108860000000000000000000000000000000000008 +:1088700000000000000000000000000000000000F8 +:1088800000000000000000000000000000000000E8 +:1088900000000000000000000000000000000000D8 :1088A00000000000000000000000000000000000C8 :1088B00000000000000000000000000000000000B8 :1088C00000000000000000000000000000000000A8 @@ -129203,27 +129203,27 @@ :108920000000000000000000000040000000000007 :108930000000000000000000000000000000000037 :108940000000000000000000000000000000000027 -:108950000000000000000000000010000000000007 +:108950000000000000000000000000000000000017 :108960000000000000000000000000000000000007 -:1089700000000000000000000000000011000000E6 +:1089700000000000000000000002000041000000B4 :1089800000000000000000000000000000000000E7 -:1089900000000000000000000000000000000002D5 -:1089A00000000000418200000008000080840008F0 -:1089B000000000020008000000080000000200049F -:1089C000000000000000000000080000000000029D -:1089D00000840000000800080008000000080000F3 -:1089E0000000000009000000000000080000000076 -:1089F0000000000000000008200800020000C0087D -:108A0000000000000000000000000008000000005E -:108A10000000000000000008000800082000000816 -:108A20000000000000000000000000000000000046 -:108A30000000000000000000000800000000000826 -:108A40000000000000000000000000000000000026 -:108A500000000021000000000000000000000000F5 -:108A600000030000000500000000000000000000FE -:108A700000000000000000000000000000000000F6 -:108A800000000000000000000000000000000000E6 -:108A900000000000000000000000000000000000D6 +:1089900000000000000000000000000000000008CF +:1089A000008400020008000800080002800800009F +:1089B0000008008400080002000000080008000809 +:1089C000000000040008000200840000000800000D +:1089D0000008000800080008000800020008000065 +:1089E000000800000008000800000008000000085F +:1089F000000000080082000800020008000490083F +:108A00000008000000080008000800080000000836 +:108A1000000800080008000800080008000000081E +:108A20000040000000000000000000000000000006 +:108A3000000000030000000000000008002100000A +:108A40000000000000030000000000000021000002 +:108A5000000000000000000900000040002100218B +:108A600000000000000300000000000000000021E2 +:108A700000210000000000080000000800000021A4 +:108A8000004000000021000000000000000000087D +:108A900000000000002100000003000000000000B2 :108AA00000000000000000000000000000000000C6 :108AB00000000000000000000000000000000000B6 :108AC00000000000000000000000000000000000A6 @@ -129232,15 +129232,15 @@ :108AF0000000000000000000000000000000000076 :108B00000000000000000000000000000000000065 :108B10000000000000000000000000000000000055 -:108B200000000000000008000000820000000000BB -:108B3000000000000000C0000000820008000800E3 -:108B4000000000000000000000008200C000820061 -:108B500000000000A000A000080082008200C00009 -:108B6000000000000000820082000000820000007F +:108B20000000000000000000000000000000000045 +:108B30000000000000000000000000000000000035 +:108B40000000000000000000000000000000000025 +:108B50000000000000000000000000000000000015 +:108B60000000000000000000000000000000000005 :108B700000000000000000000000000000000000F5 :108B800000000000000000000000000000000000E5 -:108B9000C000000000008400A000000000000000F1 -:108BA00008000000000000000000000000000000BD +:108B900000000000000000000000000000000000D5 +:108BA00000000000000000000000000000000000C5 :108BB00000000000000000000000000000000000B5 :108BC00000000000000000000000000000000000A5 :108BD0000000000000000000000000000000000095 @@ -129248,15 +129248,15 @@ :108BF0000000000000000000000000000000000075 :108C00000000000000000000000000000000000064 :108C10000000000000000000000000000000000054 -:108C20000000000000000000000040000000000004 -:108C30000000000090000000000082000000000022 -:108C4000000000000000000000000800000000001C -:108C50000000000000000000000000008400000090 -:108C600000000800000000000000C000000000112B -:108C700000000000080000000000000008000000E4 -:108C80000000000000000000100000000000C00014 -:108C900000000000000000000000000000000000D4 -:108CA00000000000000000000000000000000000C4 +:108C2000000000000000000000000000000800003C +:108C30000000000000000003000000000008000029 +:108C40000008000000030000000000050002000012 +:108C500000000003000000000003002100000000ED +:108C600000000000000800200000000000000011CB +:108C70000000000800030000000200082021000995 +:108C800000110000000500000005000000000000C9 +:108C900000090000000000000000000000000000CB +:108CA00000000000000000080000000000000000BC :108CB00000000000000000000000000000000000B4 :108CC00000000000000000000000000000000000A4 :108CD0000000000000000000000000000000000094 @@ -129264,14 +129264,14 @@ :108CF0000000000000000000000000000000000074 :108D00000000000000000000000000000000000063 :108D10000000000000000000000000000000000053 -:108D2000000000000000000000000000000800003B -:108D3000000000000021000000000000000000080A -:108D4000000084000000000000000000000000217E -:108D500000000000080008000000000000000021E2 +:108D20000000000000000000000000000000000043 +:108D30000000000000000021000000000000000012 +:108D40000000000000000000000000000000000023 +:108D50000008000000000008000000000000000003 :108D60000000000000000000000000000000000003 -:108D700084050000000082000005000000000000E3 -:108D800000050000000000000008000000000000D6 -:108D900000000000000000000800000000000000CB +:108D70000000002100000021000000210000000090 +:108D800000000000000000030000002100000000BF +:108D900000080000002100000000000000000000AA :108DA00000000000000000000000000000000000C3 :108DB00000000000000000000000000000000000B3 :108DC00000000000000000000000000000000000A3 @@ -129281,11 +129281,11 @@ :108E00000000000000000000000000000000000062 :108E10000000000000000000000000000000000052 :108E20000000000000000000000000000000000042 -:108E30000000000000000000000000000000000032 -:108E40000000000000000000000000000000000022 -:108E50000000000000000000000090000000000082 +:108E300000008800000000000000000000000000AA +:108E4000000000000000000000008800000000009A +:108E50000000000000000000000000000000000012 :108E60000000000000000000000000000000000002 -:108E70000000000090000000000000000000000062 +:108E700000000000000000000000000000000000F2 :108E800000000000000000000000000000000000E2 :108E900000000000000000000000000000000000D2 :108EA00000000000000000000000000000000000C2 @@ -129293,32 +129293,32 @@ :108EC00000000000000000000000000000000000A2 :108ED0000000000000000000000000000000000092 :108EE0000000000000000000000000000000000082 -:108EF0000000000000000000000000000000000072 -:108F00000000000040000000000000000000000021 +:108EF000000000030000000000000000000000006F +:108F00000000000000000000000000000000000061 :108F10000000000000000000000000000000000051 :108F20000000000000000000000000000000000041 -:108F30000000000000000000000000100000000021 -:108F400000000000000000000000000080000000A1 -:108F50000000001000000000000000000000800081 -:108F6000000000030000000000000000000080007E -:108F7000000000200000000080000000000300004E -:108F8000800000000003800080000000004000001E +:108F3000000000008000800000000003000000002E +:108F40000000000000000000000000008000800021 +:108F50000009000300000000000000000000000005 +:108F600000000011000000000000000080008000F0 +:108F70000009001000008000800000000011800047 +:108F8000800000100011800080000000001100002F :108F900000000000000000000000000000000000D1 :108FA00000000000000000000000000000000000C1 -:108FB000000000000000C000880000000001000068 -:108FC000000000000000000000000000000002009F -:108FD00088000000000100000000000000004000C8 -:108FE000820000000021000000000000000090004E -:108FF000820000000090000090008200000000212C -:1090000090000400000000000400200000000000A8 +:108FB0000000000000001000100000000001000090 +:108FC0000000000000000000000000000000100091 +:108FD000400000000001000000000000000002004E +:108FE00088000000000000000000000000001000E9 +:108FF0004000000000000000080010000000000019 +:1090000040001000000000000800100000000000F8 :109010000000000000000000000000000000000050 :109020000000000000000000000000000000000040 :109030000000000000000000000000000000000030 -:109040000000000000000000000000000000000020 -:109050000000000000000000000000000000000010 -:109060000000000000000000000000000000000000 -:1090700000000000000000000000000000000000F0 -:1090800000000000000000000000000000000000E0 +:10904000000000000200000000000000000000001E +:10905000000000000200000000000000000000000E +:1090600000000000020000000000000000000000FE +:1090700000000000020000000000000000000800E6 +:1090800000000000000002000000000000000800D6 :1090900000000000000000000000000000000000D0 :1090A00000000000000000000000000000000000C0 :1090B00000000000000000000000000000000000B0 @@ -129326,32 +129326,32 @@ :1090D0000000000000000000000000000000000090 :1090E0000000000000000000000000000000000080 :1090F0000000000000000000000000000000000070 -:10910000000000000000000000000000000000005F -:10911000000000000000000000000000000000004F +:1091000080000000000000000000000000000000DF +:1091100080000000000000000000000000000000CF :10912000000000000000000000000000000000003F -:109130000000000000000000000000000009000026 -:109140000000030000000000000008000000000014 -:10915000000000000000000000000500000000000A -:1091600000000000000000000000080000000000F7 +:10913000000000000000000000000000000000002F +:109140000000100000000000000008000000000007 +:1091500000000000000000000000110000000000FE +:1091600000000000000000000000020000000000FD :1091700000000000000000000000110000020000DC -:1091800000000000200000000000000003000000BC +:1091800000000000100000000000000011000000BE :1091900000000000030000000000000000000000CC :1091A00000000000000000000000000000000000BF :1091B00000000000000000000000000000000000AF :1091C000000000000000000000000000010000009E :1091D000000000000000000000000000000000008F -:1091E000000000000000000000000000010000007E +:1091E000000000000000000000000000000000007F :1091F000000000000000000000000000000000006F :10920000000000000000000000000000000000005E :10921000000000000000000000000000000000004E :10922000000000000000000000000000000000003E :10923000000000000000000000000000000000002E -:10924000818100900900C843004200000900C80065 -:109250000000000000000000484200900900C843E0 -:109260000000000000000000484200900900C843D0 -:109270000000000000000000484200900900C843C0 -:109280000000484200900900C8434842009009008D -:10929000C843484200900900C84300000000000095 +:10924000484200500A009009002100000A009000E6 +:109250000000000000000000842100500A00900976 +:109260000000000000000000842100500A00900966 +:109270000000000000000000842100500A00900956 +:109280000000842100500A009009842100500A0047 +:109290009009842100500A0090090000000000009D :1092A00000000000000000000000000000000000BE :1092B00000000000000000000000000000000000AE :1092C000000000000000000000000000000000009E @@ -129370,20 +129370,20 @@ :109390000000140194020010000014019402000067 :1093A00000000000000000000000000000000000BD :1093B00000000000000000000000000000000000AD -:1093C0000000000000000040030810C00200004040 -:1093D0000308000000400000000000000000004002 -:1093E000030810C002000000000000000000004060 -:1093F000030810C002000000000000000000004050 -:10940000030810C0020000000040030810C0020062 -:109410000040030810C002000040030810C0020012 +:1093C0000000000000000040032004C00200004034 +:1093D00003200000004000000000000000000040EA +:1093E000032004C002000000000000000000004054 +:1093F000032004C002000000000000000000004044 +:10940000032004C0020000000040032004C002004A +:109410000040032004C002000040032004C00200FA :1094200002000000000000400000000000000000FA :10943000000000000000000000000000000000002C -:1094400000000000000000000802000810004010AA -:1094500008020008000000000000000000000000FA -:10946000080200081000401000000000000000008A -:10947000080200081000401000000000000000007A -:109480000802000810004010000008020008100048 -:1094900040100802000810004010080200081000E8 +:10944000000000000000000008020020040040109E +:1094500008020020000000000000000000000000E2 +:10946000080200200400401000000000000000007E +:10947000080200200400401000000000000000006E +:109480000802002004004010000008020020040030 +:1094900040100802002004004010080200200400D0 :1094A000401000000000000000000000000000006C :1094B00000000000000000000000000000000000AC :1094C000000000000000000000000000000000009C @@ -129427,15 +129427,15 @@ :109720009A000000000000909A000000000000096C :109730000000000000000000000000000000000029 :109740000000000000000000000000000000000019 -:1097500000000000200000002000200000000000A9 -:1097600040002000200020002000880000000000B1 -:1097700040000000400000002000200040000000E9 -:1097800020002000200020008800200000000000B1 -:109790000000000000002000400088008800200039 -:1097A0000000200020002000200020002000880071 -:1097B0008800880000002000200088002000200091 -:1097C00000002000200020002000200020002000B9 -:1097D0008800000000000000000000000000000001 +:109750000000000000000000000000000000000009 +:1097600000000000000000000000000000000000F9 +:1097700000000000000000000000000000000000E9 +:1097800000000000000000000000000000000000D9 +:1097900000000000000000000000000000000000C9 +:1097A00000000000000000000000000000000000B9 +:1097B00000000000000000000000000000000000A9 +:1097C0000000000000000000000000000000000099 +:1097D0000000000000000000000000000000000089 :1097E0000000000000000000000000000000000079 :1097F0000000000000000000000000000000000069 :109800000000000000000000000000000000000058 @@ -129446,76 +129446,76 @@ :109850000000000000000000000000000000000008 :1098600000000000000000000000000000000000F8 :1098700000000000000000000000000000000000E8 -:1098800000000000000000000000000000000000D8 +:1098800010000000000000000000000000000000C8 :1098900000000000000000000000000000000000C8 -:1098A00000000000000000000000000000000000B8 +:1098A00000000000000000040000000000000000B4 :1098B00000000000000000000000000000000000A8 :1098C0000000000000000000000000000000000098 -:1098D0000000000000000000000000000000000088 -:1098E0000000000000000000000000000000000078 -:1098F0000000000000000000000000000000000068 -:109900000000000000000000000000000000000057 -:109910000000000000000000000000000000000047 -:109920000000000000000000000000000000000037 -:109930000000000000000000000000000000000027 -:109940000000000000000000000000000000000017 -:109950000000000000000000000000000000000007 +:1098D0000000000000000008000000000000000080 +:1098E0000000000800000000000000000000000070 +:1098F0000000000000000000000000000000000860 +:10990000000000080000000000000000000000004F +:109910000008000000000008000000000000000037 +:109920000008000000080000000800000008000017 +:10993000000000080000000800080000000000000F +:1099400000080000000800000008000800080008E7 +:10995000000800080008000800840008000000005B :1099600000000000000000000000000000000000F7 :1099700000000000000000000000000000000000E7 :1099800000000000000000000000000000000000D7 -:1099900000000000000000000000000000000000C7 +:1099900000000000000000080000000000000000BF :1099A00000000000000000000000000000000000B7 -:1099B00000000000000000000000000000000000A7 -:1099C0000000000000000000000000000000000097 +:1099B000000000080000000000000000000000009F +:1099C000000000000008000000000040000000004F :1099D0000000000000000000000000000000000087 -:1099E00000000000000000000000000040400000F7 -:1099F0004100000000000000000000000000000026 -:109A000041000000210000000000100000001000D4 -:109A100000000000090000004100000021000000DB -:109A20000500000000000000000000000000000031 -:109A30001000000000000000000000000000000016 -:109A4000000000000000000009000000000000000D +:1099E00000000000000000000000000000840000F3 +:1099F0000000000000000000000000000000000067 +:109A0000000000000000000000000008000000004E +:109A10000000000000000000000000000000000046 +:109A20000000000000A0000000000000000000088E +:109A300000000008000000840008000000A00000F2 +:109A40000000000000000000000000000000000016 :109A50000000000000000000000000000000000006 -:109A6000000000000000A0000000000082001000C4 -:109A7000000000000000080000000000000082005C -:109A800000000000C0008200000000000000000094 -:109A900000000000C000A000000000000000000066 -:109AA000000000000000000000008400C000100062 -:109AB000000000000000C0000000000000000000E6 -:109AC000000000000000000000000000C0000000D6 -:109AD000000000000000A0000000000008000000DE +:109A600000000000000000000000000000000000F6 +:109A700000000000000000000000000000000000E6 +:109A800000000000000000000000000000000000D6 +:109A900000000000000000000000000000000000C6 +:109AA00000000000000000000000000000000000B6 +:109AB00000000000000000000000000000000000A6 +:109AC0000000000000000000000000000000000096 +:109AD0000000000000000000000000000000000086 :109AE0000000000000000000000000000000000076 -:109AF0000000000000000000100000000000000056 +:109AF0000000000000000000000000000000000066 :109B00000000000000000000000000000000000055 -:109B1000000000000000000000000000000008003D +:109B10000000000000000000000000000000000045 :109B20000000000000000000000000000000000035 :109B30000000000000000000000000000000000025 :109B40000000000000000000000000000000000015 :109B50000000000000000000000000000000000005 -:109B6000080000000000000000000000008000006D -:109B700008000000000000000000000000000000DD -:109B800008000400000000000000000000000000C9 -:109B9000000082000000000008000000000000003B -:109BA00000000000000000000000100000000000A5 -:109BB0000000000010000000000000000000000095 -:109BC000000000000000000000000800000000008D +:109B60000000000000000000000000000080000075 +:109B700000000000000000000000000000000000E5 +:109B800000000000000000000000000000000000D5 +:109B900000000000000000000000000000000000C5 +:109BA00000000000000000000000000000000000B5 +:109BB00000000000000000000000000000000000A5 +:109BC0000000000000000000000000000000000095 :109BD0000000000000000000000000000000000085 -:109BE00000001000100000000020050000000040F0 -:109BF0000000002000000000000000000000000045 -:109C0000002003000000000000000000000021020E -:109C10000000000000000000000000000000000044 -:109C200000001000100000000400000008002100E7 -:109C30000000000000002100000000000000000003 -:109C40000000000000000000000000000000000014 +:109BE000000000000000000000000008000000402D +:109BF0000000000000000000000000000000000065 +:109C0000000000080000000000000000000000004C +:109C100000A000000000000800000000000000009C +:109C20000000000000000000000000001100000023 +:109C3000000000000000000000000000000000A084 +:109C4000000000000000020000080000000000000A :109C50000000000000000000000000000000000004 :109C600000000000000000000000000000000000F4 -:109C700000000000000000000000000000000000E4 -:109C800000000000000010000800000000000000BC -:109C90000000000000001000000000000000820032 -:109CA0000000000000008400000000000000000030 -:109CB000080000000000000000000000000000009C -:109CC0000000000000000000000000000000000094 -:109CD0000000000000001000000000000000000074 +:109C700000000000000000000000000000000008DC +:109C800000000000000000000000000000000000D4 +:109C900000000000000000000000000000000000C4 +:109CA00000000000000000000000000000000000B4 +:109CB00000000000000000000000000000000000A4 +:109CC000000000000000000000080000000000008C +:109CD0000000000000000000000000000000000084 :109CE0000000000000000000000000000000000074 :109CF0000000000000000000000000000000000064 :109D00000000000000000000000000000000000053 @@ -129671,20 +129671,20 @@ :10A6600000000000000000000000000000000000EA :10A6700000000000000000000000000000000000DA :10A6800000000000000000000000000000000000CA -:10A69000000000020000C0000000000000002000D8 -:10A6A0000000000000000400C00000000000840062 -:10A6B000000000000000880000000000400088004A -:10A6C00000020000000088000000000000002000E0 -:10A6D00000020000000084002000C000C000200034 -:10A6E00088000000000004002000000000000000BE -:10A6F0002000400000002000200004002000200076 -:10A70000040000000000200020008800C0000000BD -:10A710002000000000000000000000000000000019 +:10A69000000000000000000000004000000000007A +:10A6A00000020000000000000000000000000000A8 +:10A6B000000000000000000000000000000000009A +:10A6C0000000000000080000000000000000000082 +:10A6D00000000000000000000000400040100000EA +:10A6E000000000000000000000000000000000006A +:10A6F0000000000000000000000000000000000852 +:10A700000008000000000000000000000000000041 +:10A710000000000000000000000000000000000039 :10A720000000000000000000000000000000000029 :10A730000000000000000000000000000000000019 :10A740000000000000000000000000000000000009 :10A7500000000000000000000000000000000000F9 -:10A7600000002000000000000000000000000000C9 +:10A7600000000000000000000000000000000000E9 :10A7700000000000000000000000000000000000D9 :10A7800000000000000000000000000000000000C9 :10A7900000000000000000000000000000000000B9 @@ -129693,171 +129693,171 @@ :10A7C0000000000000000000000000000000000089 :10A7D0000000000000000000000000000000000079 :10A7E0000000000000000000000000000000000069 -:10A7F0000000000000000000000000000000020057 -:10A800000200020002000200020002000200020038 -:10A810000200020002000000000000000000000032 -:10A8200000000000000000000000000000820000A6 +:10A7F0000000000000000000000000000000000059 +:10A800000000000004000000000000000000000044 +:10A810000000000000000000000000000000000038 +:10A820000000000000000000000000000008000020 :10A830000000000000000000000000000000000018 -:10A840000000000000000000000000000000000008 +:10A840000000000000000000000000000008000000 :10A8500000000000000000000000000000000000F8 -:10A8600000000000000000000000000000000000E8 -:10A8700000000000000000000000000000000000D8 -:10A880008082800080008000800080008000800046 -:10A890008000800080008000000090000000000028 +:10A8600000000000000000000000000000080008D8 +:10A87000000000000000000000000000000800824E +:10A8800000000000000000000000000000080008B8 +:10A8900000000000000000000000000000000000B8 :10A8A00000000000000000000000000000000000A8 :10A8B0000000000000000000000000000000000098 :10A8C0000000000000000000000000000000000088 :10A8D0000000000000000000000000000000000078 -:10A8E000000000080000000200000000000000005E +:10A8E0000011000000000040000000000000000017 :10A8F0000000000000000000000000000000000058 :10A900000000000000000000000000000000000047 -:10A910000000000000000003000000000000000034 +:10A910000000000000000000000000000000000037 :10A920000000000000000000000000000000000027 :10A930000000000000000000000000000000000017 -:10A940000000000000000000000000900000000077 -:10A9500008000800000000000000000009000000DE +:10A940000000000000000000000000000000000007 +:10A9500000000000000000000000000000000000F7 :10A9600000000000000000000000000000000000E7 :10A9700000000000000000000000000000000000D7 :10A9800000000000000000000000000000000000C7 :10A9900000000000000000000000000000000000B7 :10A9A00000000000000000000000000000000000A7 -:10A9B0000000080000000000000008000000000087 -:10A9C0000000080000000000000008000000000077 -:10A9D00000000000000000000000820000000000F5 +:10A9B0000000000000000000000000000000000097 +:10A9C0000000000000000000000000000000000087 +:10A9D0000000000000000000000000000000000077 :10A9E0000000000000000000000000000000000067 :10A9F0000000000000000000000000000000000057 -:10AA0000000000000000080000000000000000003E -:10AA10000000000000000000000000000100000035 -:10AA20000000000000000000000000000000000026 +:10AA00000000000000000000000000000000000046 +:10AA10000000000000000000000000000000000036 +:10AA200000000000100008001000000000000000FE :10AA30000000000000000000000000000000000016 -:10AA40000000000000000000000000000000000006 -:10AA500000000000000000A0000000A000000000B6 -:10AA600000000000000000000500000000000000E1 -:10AA700000000000000000000000000000000000D6 -:10AA800000000000000000000000000000000000C6 -:10AA900000000000000000000000000000A0020014 +:10AA400000000000000000000800000000000000FE +:10AA50000000000000A00082000000A00000000034 +:10AA600000000000000000001000100000000000C6 +:10AA70000000000000000000008200000000000054 +:10AA800000000000000010000800080000000000A6 +:10AA900000000000000000000000000000000000B6 :10AAA00000000000000000000000000000000000A6 :10AAB0000000000000000000000000000000000096 :10AAC0000000000000000000000000000000000086 :10AAD0000000000000000000000000000000000076 -:10AAE0000000000000000000000000000000000066 +:10AAE000000000000000000000080000000000005E :10AAF0000000000000000000000000000000000056 -:10AB000000000000000000000000000020000040E5 -:10AB10000000000020000040000000002000900025 +:10AB00000000000000000000000200000000000043 +:10AB10000000000000000000000000000000000035 :10AB20000000000000000000000000000000000025 :10AB30000000000000000000000000000000000015 :10AB40000000000000000000000000000000000005 -:10AB500000000000000005000000000000000000F0 -:10AB600000000000000000000000000000000000E5 +:10AB500000000000000000000000000000000000F5 +:10AB600000000000000000000008000000000000DD :10AB700000000000000000000000000000000000D5 -:10AB80000000000000000000000000000000800045 -:10AB900000010800000080000001000000008000AB +:10AB800000000000000000000000000000000000C5 +:10AB900000000000000000000000000000000000B5 :10ABA00000000000000000000000000000000000A5 :10ABB0000000000000000000000000000000000095 :10ABC0000000000000000000000000000000000085 :10ABD0000000000000000000000000000000000075 :10ABE0000000000000000000000000000000000065 -:10ABF0000000000000000000000001000000000054 +:10ABF0000000000000000000000000000000000055 :10AC00000000000000000000000000000000000044 -:10AC10000000000000000000000000210000000013 -:10AC20000000002100000000000000000000000003 -:10AC30000000000000000000000000000000000014 +:10AC10000000000000000000000000000000000034 +:10AC20000000000000000000000000000000030021 +:10AC3000000000000800000000000000000000000C :10AC40000000000000000000000000000000000004 :10AC500000000000000000000000000000000000F4 :10AC600000000000000000000000000000000000E4 -:10AC700000000000000000000000000008000000CC +:10AC700000000000000000000000000000000000D4 :10AC800000000000000000000000000000000000C4 -:10AC900000000000000000000000000000000000B4 -:10ACA000000005000000000000000000000000009F +:10AC900000000000000010000000000000000000A4 +:10ACA00000000000000000000000000000000000A4 :10ACB0000000000000000000000000000000000094 :10ACC0000000000000000000000000000000000084 :10ACD0000000000000000000000000000000000074 :10ACE0000000000000000000000000000000000064 :10ACF0000000000000000000000000000000000054 :10AD00000000000000000000000000000000000043 -:10AD1000000041C000000800000041C00000080021 -:10AD2000000041C100000001000000000000000020 +:10AD10000000000000000000000000000000000033 +:10AD20000000000000000000000000000000000023 :10AD30000000000000000000000000000000000013 :10AD40000000000000000000000000000000000003 :10AD500000000000000000000000000000000000F3 :10AD600000000000000000000000000000000000E3 :10AD700000000000000000000000000000000000D3 :10AD800000000000000000000000000000000000C3 -:10AD900000000000919100008209001091910000D4 -:10ADA00090020000919000001009000000000000D7 +:10AD900000000000000000000000000000000000B3 +:10ADA00000000000000000000000000000000000A3 :10ADB0000000000000000000000000000000000093 :10ADC0000000000000000000000000000000000083 :10ADD0000000000000000000000000000000000073 :10ADE0000000000000000000000000000000000063 :10ADF0000000000000000000000000000000000053 :10AE00000000000000000000000000000000000042 -:10AE100000000000000009000021091190100980C5 -:10AE200000210911820009000021001182080000A0 +:10AE10000000000000000000000000000000000032 +:10AE20000000000000000000000000000000000022 :10AE30000000000000000000000000000000000012 :10AE40000000000000000000000000000000000002 :10AE500000000000000000000000000000000000F2 :10AE600000000000000000000000000000000000E2 :10AE700000000000000000000000000000000000D2 :10AE800000000000000000000000000000000000C2 -:10AE90000000000000000000010000000001C000F0 -:10AEA00001C000000001C000010000000001C0015D +:10AE900000000000000000000000000000000000B2 +:10AEA00000000000000000000000000000000000A2 :10AEB0000000000000000000000000000000000092 :10AEC0000000000000000000000000000000000082 :10AED0000000000000000000000000000000000072 :10AEE0000000000000000000000000000000000062 :10AEF0000000000000000000000000000000000052 :10AF00000000000000000000000000000000000041 -:10AF10000000000000000000000000000001000030 -:10AF200003C000000001100003C000000001000089 -:10AF300003C000000000000000000000000000004E +:10AF10000000000000000000000000000000000031 +:10AF20000000000000000000000000000000000021 +:10AF30000000000000000000000000000000000011 :10AF40000000000000000000000000000000000001 :10AF500000000000000000000000000000000000F1 :10AF600000000000000000000000000000000000E1 :10AF700000000000000000000000000000000000D1 :10AF800000000000000000000000000000000000C1 -:10AF900000000000000000000000000000000009A8 -:10AFA0000010918000000009090291800000000952 -:10AFB000020291910000000000000000000000006B +:10AF900000000000000000000000000000000000B1 +:10AFA00000000000000000000000000000000000A1 +:10AFB0000000000000000000000000000000000091 :10AFC0000000000000000000000000000000000081 :10AFD0000000000000000000000000000000000071 :10AFE0000000000000000000000000000000000061 :10AFF0000000000000000000000000000000000051 :10B000000000000000000000000000000000000040 :10B010000000000000000000000000000000000030 -:10B020000000098009008000000002800900800003 -:10B03000000002801111000000000000000000006C +:10B020000000000000000000000000000000000020 +:10B030000000000000000000000000000000000010 :10B040000000000000000000000000000000000000 :10B0500000000000000000000000000000000000F0 :10B0600000000000000000000000000000000000E0 :10B0700000000000000000000000000000000000D0 :10B0800000000000000000000000000000000000C0 :10B0900000000000000000000000000000000000B0 -:10B0A0000000000000840100C000000000840100D6 -:10B0B000C00000000084000000000000000000004C +:10B0A00000000000000000000000000000000000A0 +:10B0B0000000000000000000000000000000000090 :10B0C0000000000000000000000000000000000080 :10B0D0000000000000000000000000000000000070 :10B0E0000000000000000000000000000000000060 :10B0F0000000000000000000000000000000000050 :10B10000000000000000000000000000000000003F :10B11000000000000000000000000000000000002F -:10B120000000410000E000000000840000E000009A -:10B130004200410000E000000000000000000000AC +:10B12000000000000000000000000000000000001F +:10B13000000000000000000000000000000000000F :10B1400000000000000000000000000000000000FF :10B1500000000000000000000000000000000000EF :10B1600000000000000000000000000000000000DF :10B1700000000000000000000000000000000000CF :10B1800000000000000000000000000000000000BF :10B1900000000000000000000000000000000000AF -:10B1A00000000000FFFFFFFF66660000FFFF0000D9 -:10B1B00066660000FFFF00006666000000000000F9 +:10B1A000000000000000000000000000000000009F +:10B1B000000000000000000000000000000000008F :10B1C000000000000000000000000000000000007F :10B1D000000000000000000000000000000000006F :10B1E000000000000000000000000000000000005F :10B1F000000000000000000000000000000000004F :10B20000000000000000000000000000000000003E :10B21000000000000000000000000000000000002E -:10B220000000000000000000000066660000000052 -:10B230000000666600000000000066660000000076 +:10B22000000000000000000000000000000000001E +:10B23000000000000000000000000000000000000E :10B2400000000000000000000000000000000000FE :10B2500000000000000000000000000000000000EE :10B2600000000000000000000000000000000000DE @@ -129872,227 +129872,227 @@ :10B2F000000000000000000000000000000000004E :10B30000000000000000000000000000000000003D :10B31000000000000000000000000000000000002D -:10B320000000000000000000000000006666000051 -:10B33000FFFF000066660000FFFF00006666000079 -:10B34000FFFF0000000000000000000000000000FF +:10B32000000000000000000000000000000000001D +:10B33000000000000000000000000000000000000D +:10B3400000000000000000000000000000000000FD :10B3500000000000000000000000000000000000ED :10B3600000000000000000000000000000000000DD :10B3700000000000000000000000000000000000CD :10B3800000000000000000000000000000000000BD :10B3900000000000000000000000000000000000AD -:10B3A00000000000000000000000000000006666D1 -:10B3B00000000000000066660000000000006666F5 +:10B3A000000000000000000000000000000000009D +:10B3B000000000000000000000000000000000008D :10B3C000000000000000000000000000000000007D :10B3D000000000000000000000000000000000006D :10B3E000000000000000000000000000000000005D :10B3F000000000000000000000000000000000004D :10B40000000000000000000000000000000000003C :10B41000000000000000000000000000000000002C -:10B420000000000000000000000000000000406379 -:10B4300080018021920240E380018021920240E35A -:10B440008001802192020000000000000000000046 +:10B42000000000000000000000000000000000001C +:10B43000000000000000000000000000000000000C +:10B4400000000000000000000000000000000000FC :10B4500000000000000000000000000000000000EC :10B4600000000000000000000000000000000000DC :10B4700000000000000000000000000000000000CC :10B4800000000000000000000000000000000000BC :10B4900000000000000000000000000000000000AC :10B4A000000000000000000000000000000000009C -:10B4B00000000000500050002020202050005000CC -:10B4C000C0C0C0C0F000000000000000000000008C +:10B4B000000000000000000000000000000000008C +:10B4C000000000000000000000000000000000007C :10B4D000000000000000000000000000000000006C :10B4E000000000000000000000000000000000005C :10B4F000000000000000000000000000000000004C :10B50000000000000000000000000000000000003B :10B51000000000000000000000000000000000002B :10B52000000000000000000000000000000000001B -:10B5300000003030303050005000202020205000DB -:10B54000500000000000F0000000000000000000BB +:10B53000000000000000000000000000000000000B +:10B5400000000000000000000000000000000000FB :10B5500000000000000000000000000000000000EB :10B5600000000000000000000000000000000000DB :10B5700000000000000000000000000000000000CB :10B5800000000000000000000000000000000000BB :10B5900000000000000000000000000000000000AB :10B5A000000000000000000000000000000000009B -:10B5B00000000000C0C000003C00000000000000CF -:10B5C0003C00000000000000141400000000000017 +:10B5B000000000000000000000000000000000008B +:10B5C000000000000000000000000000000000007B :10B5D000000000000000000000000000000000006B :10B5E000000000000000000000000000000000005B :10B5F000000000000000000000000000000000004B :10B60000000000000000000000000000000000003A :10B61000000000000000000000000000000000002A :10B62000000000000000000000000000000000001A -:10B63000000000000000C0C000003C000000F0F06E -:10B6400000003C00000000000F0F14140000000078 -:10B65000100000004000880000002000200088004A -:10B660008800000020000000000020001002C00040 -:10B67000200000002000880000008800000000007A -:10B680000000000090000000000020000000000307 -:10B690000000880000002000000000000000000002 -:10B6A0008800A0000000C00088000000200000000A -:10B6B0008800880088002000000000000000C00012 -:10B6C00020002000000020002000000010000000EA -:10B6D000000000000000200000000000100010002A -:10B6E00040000000000000001000000010002000DA -:10B6F00040000000000000000000000020002000CA -:10B7000000001000100000000000000010002000E9 -:10B7100000004000000000000000000000000000E9 -:10B720000000000000000000000000000000100009 -:10B7300000000000000000000000000000001000F9 -:10B7400010002100000000000000000000000000C8 +:10B63000000000000000000000000000000000000A +:10B6400000000000000000000000000000000000FA +:10B6500000000000000000002000000020000000AA +:10B66000000020000000000020000000200000007A +:10B6700000000000000000002000000000000000AA +:10B680000000200000000000000000002000000377 +:10B69000000000000000000000002000000000008A +:10B6A000000000000000000000000000004000005A +:10B6B000000000000000000000000000001000007A +:10B6C0000000000000000000000000000008000072 +:10B6D000000000000000000000000000000000006A +:10B6E000000000000000000000000000000000005A +:10B6F000000000000000000000000000000000004A +:10B700000000000000000000000000000000000039 +:10B710000000000000000000000000000000000029 +:10B720000000000000000000000000000000000019 +:10B730000000000000000000000000000000000009 +:10B7400000000000000000000000000000000000F9 :10B7500000000000000000000000000000000000E9 :10B7600000000000000000000000000000000000D9 -:10B7700000040000000000000000000000000000C5 +:10B7700020080000000000000000000000000000A1 :10B7800000000000000000000000000000000000B9 -:10B7900000040000000000000000000000000000A5 +:10B790002008000000000000000000000000000081 :10B7A0000000000000000000000000000000000099 -:10B7B0000000200000000000000000000000000069 +:10B7B0000000200800000000000000000000000061 :10B7C0000000000000000000000000000000000079 -:10B7D0000000000400000000000000000000000065 +:10B7D0000000200800000000000000000000000041 :10B7E0000000000000000000000000000000000059 -:10B7F00000000001008400000000000000000000C4 +:10B7F00000008001000000000000000000000000C8 :10B800000000000000000000000000000000000038 -:10B810000000000100000000000000000000000027 -:10B820000084000200000090008200000000000080 -:10B830000084000080000084008400840000000078 -:10B840000000000000900008000000080000000058 -:10B850000000000000850021002100210000000000 -:10B86000000000001002000900210002000000009A -:10B87000000000000000002100210009000000007D -:10B8800000000000000000080008000000000000A8 -:10B89000000000000021000000080008000800006F -:10B8A0000000000000000008000000000000000090 -:10B8B0000000000300000000000000000000000085 -:10B8C0000000000300000000000900050021000046 -:10B8D0000000000000110021000000000000000036 -:10B8E0000000000000000000040000000000000054 -:10B8F00000000000000000840000000000000000C4 -:10B900000000000004000000000000000000000033 -:10B91000000000000000000000000300080000001C -:10B92000000000000000000000000000000000080F +:10B8100000008001000000000000000000000000A7 +:10B820000000000000000000000000000004000014 +:10B830000000000080010000008200820000008201 +:10B840000090009000900000009000000090000028 +:10B850000000000080010000000000000000000067 +:10B8600000000000000000000000000000000000D8 +:10B8700000000000000000000000002100000000A7 +:10B880000000000000000000000000210000000097 +:10B8900000000003002100000040000000400021E3 +:10B8A0000008000800030008000000000000000875 +:10B8B0000000000000030021004000000003002100 +:10B8C000000200000003000400000000000000046B +:10B8D0000000000000000000000000000000000068 +:10B8E0000000000000000000000000000000000058 +:10B8F0000000000000000000000000000000000048 +:10B900000000000000000000000000000000000037 +:10B910000000000000000000000000000000000027 +:10B920000000000000000000000000000000000017 :10B930000000000000000000000000000000000007 -:10B94000000000000000000000000020040000C013 -:10B950000000000000A000900000820082000000B3 -:10B960000000820000000000000000000000000055 -:10B970000000C0000000C000000000000000000047 -:10B98000000008000000000000000800080000009F -:10B99000000082000000000000000001080082009A -:10B9A000000000008200000000000000A000C000B5 -:10B9B000C0000800000000000000000000000000BF -:10B9C0000000820000000000000000008400000071 -:10B9D00000000000840000000800000000000000DB +:10B9400000000000000000000002000000000000F5 +:10B9500000000000000000000000820082000400DF +:10B96000820082008200820000004000000000008F +:10B9700082000000820082000800820000000000B7 +:10B980008200000082008200000000000000000031 +:10B990008200000082008200080000000000000019 +:10B9A0000000820000008200820000000000000011 +:10B9B0000000820000008200820008000000C00039 +:10B9C00000000000000000008200000000000000F5 +:10B9D0000000000000000000000000000000000067 :10B9E0000000000000000000000000000000000057 :10B9F0000000000000000000000000000000000047 -:10BA00000000000000000000000000000000000036 -:10BA1000000008000000000000000000000000001E -:10BA20000000000000000000000000000000000016 -:10BA300000000000000000000000000000080008F6 -:10BA400008080000000000000000000000000000E6 -:10BA500000000000000000000000000000000008DE -:10BA6000C00000000000000000000000000008000E -:10BA700090000000900000000000000000050000A1 -:10BA800000000000000000000008000800000000A6 -:10BA900000000000000000000000000000030000A3 -:10BAA0000000000000030000000000030800040084 -:10BAB000000800000000000000000000000000007E -:10BAC0000004000000000000000000000000000072 -:10BAD000000400000400000000000000000000005E -:10BAE0000000002000000000000000000000000036 +:10BA000000000000000000000000000003004000F3 +:10BA1000000000080000000000000000000000001E +:10BA2000000000000000000000000008000000000E +:10BA30000000000000000000000000000000000006 +:10BA400000000000000000000000000000000000F6 +:10BA50000000000000000000000000000000A00046 +:10BA600000000000000000000000080000000000CE +:10BA700000000000000000000000080000000000BE +:10BA8000C00000000000C000000000000000000036 +:10BA9000000500000000002100000010000300006D +:10BAA0000000A00800080000C00090000000000096 +:10BAB000000000080000004000210000A00000037A +:10BAC0008800000200020000400000049000000016 +:10BAD0000000000400000000000000000000000062 +:10BAE0000000000000000000000000000000000056 :10BAF0000000000000000000000000000000000046 :10BB00000000000000000000000000000000000035 -:10BB10001000000000000000000000000000000015 -:10BB20000000000000000000050000000000000010 -:10BB30000000000000000000000000000000000005 -:10BB4000000000000000000000000000000000A055 -:10BB50000000000000000000000000000000009055 -:10BB600020840000000000000000C0000000000071 +:10BB10000000000000000000000000000000000025 +:10BB20000000000000000000000000000000000015 +:10BB30000200000000000000000000000000000003 +:10BB400000000000000000000000000000000000F5 +:10BB500000000000000000000000000000000000E5 +:10BB600000000000000000000000080008000000C5 :10BB700000000000000000000000000000000000C5 -:10BB800000000000000000000003000000080000AA -:10BB9000000000000000000000000000000800009D -:10BBA000000000000000000000000000080000008D -:10BBB0000000000000000000000000000000000085 -:10BBC0000000000000000000000000000000000075 -:10BBD0000000000000000000000000000009000854 -:10BBE0000000000300000000000000000000000052 +:10BB800000000000000000000000000008000000AD +:10BB9000080000000000004100030000082100210F +:10BBA000000000000000000000000000000008008D +:10BBB000000000000000000008210000000000005C +:10BBC00000211000000000000000A000000008009C +:10BBD0000000000000000000000000000000000065 +:10BBE0000000000000000000000000000000000055 :10BBF0000000000000000000000000000000000045 -:10BC000000004100000000000000000000000000F3 +:10BC00000000000000000000000000000000000034 :10BC10000000000000000000000000000000000024 :10BC20000000000000000000000000000000000014 :10BC30000000000000000000000000000000000004 :10BC400000000000000000000000000000000000F4 :10BC500000000000000000000000000000000000E4 -:10BC600000000000000000000000000000000100D3 -:10BC70000000000000000001010000C00000000002 -:10BC800000000000000000000000000000000000B4 -:10BC900000000000000000000000000200000000A2 -:10BCA0000000000000000000000000000000000094 -:10BCB00001000000000000000000010000C00000C2 -:10BCC0000000000000000000000000000000000074 -:10BCD0000000000000000000000100000002000061 -:10BCE0000000020000000000000000000000000052 -:10BCF000410000000000000000081000008000006B -:10BD00000000000000000000000000000000000033 -:10BD1000000000000000000000020200000000001F -:10BD20000000000000000000000000000000000013 -:10BD3000000041000000000000000005100000802D -:10BD400000000000000000000000000000000000F3 -:10BD500000000000000000000000000809000000D2 -:10BD60000000000080000000000000000300000050 -:10BD7000008000008000000000000500820000003C -:10BD80000000000000000000004100000900000069 -:10BD9000000000000000000000001000888000800B -:10BDA0000000000000000000001000000000030080 -:10BDB00000000080000080000000000010008800EB -:10BDC000000000000000000000000041000008002A -:10BDD000000000000000000000000000020002005F -:10BDE00000008000000000000000000300000100CF -:10BDF000000000C000002000000000001000824091 -:10BE00000002108840000000000000010000000057 -:10BE10000000000000000000000000000200110807 -:10BE200000C00400900000000000000100000000BD -:10BE30000100000000C000002000000000004100E0 -:10BE4000024000102000400000000000000100003F -:10BE500000000000000000000000000000000800DA -:10BE6000100800020800200000000000000100008F -:10BE70000000C000000000000000000000000040C2 -:10BE800000000000000000000000000000000000B2 -:10BE90000000000000000000000000000000001092 -:10BEA0000000000000000000000000000000000092 -:10BEB00000000000C00000000000000000000000C2 -:10BEC00000820000000000000000000000000000F0 -:10BED0000000000000000000000000000000000062 -:10BEE0000020000000000000000000000000000032 -:10BEF00000000000800000000000000000000000C2 -:10BF00000000000000000000000000000000000031 -:10BF10000000000000000000000000000000000021 -:10BF20000000000000000000000000000000000011 -:10BF30000000000000008000000000000000000081 -:10BF400000000000000000000000000000000000F1 -:10BF500000000000000000000000000000000000E1 -:10BF600000000000000000000000000000000000D1 -:10BF700000000000800000C1000000000000000080 -:10BF8000000000C1000000020000000000000000EE -:10BF90000000000080000091000000000000000090 -:10BFA0000000004100000010000000000000000040 -:10BFB000000000000000800000C100000000000040 -:10BFC00000000000008000000008000000000000E9 -:10BFD000000000000008800000C100000000000018 -:10BFE0000000000000C10000004000000000000050 -:10BFF000000000000000400000C100000000000040 -:10C00000000000000011900000000000000000008F -:10C010000000000000000800001000000000000008 -:10C0200000000000000510000000000000000000FB -:10C030000000000000000000400000C100000000FF -:10C0400000000000000000C090000001000000009F -:10C050000000000000000000200000400000000080 -:10C0600000000000000000091000000000000000B7 -:10C07000000000000000000000000000004200007E -:10C08000000000004800810000E0000048000000BF -:10C09000000000000042000000000000000000005E -:10C0A000000000000000810000E0000048050000E2 +:10BC600000000000000000010001000100C0000110 +:10BC7000000100C1008300002101000800820001D2 +:10BC8000400100C0000000010001000100C00001EF +:10BC9000000100C1000500000101000800020001D0 +:10BCA000400100C00000000000010001000100C0D0 +:10BCB0000001100100C10089000001010008008896 +:10BCC0000001400100C0000000010001000100C0AF +:10BCD0000001000100C100030000410100080082D2 +:10BCE0000001400100C0000000410041004100C0CF +:10BCF0000041004100A00841000502410000008011 +:10BD00000041804100C0000000410041004100C0EE +:10BD10000041004100881041000402410080008081 +:10BD20000041804100C0000000000041004100418E +:10BD300000C00041804100830841000402410080AE +:10BD400000000041804100C000000041004100416E +:10BD500000C000410041009008C1001002410000F5 +:10BD600000800041804100C000004100030000004D +:10BD700000804100C000000020001000C0800000D2 +:10BD800088004100C1000040800041000300000025 +:10BD900000804100C0000000020002008800000096 +:10BDA00085004100C1000040800000034100030005 +:10BDB000000000804100C000000002000200880076 +:10BDC000000083004100C1000040800041000300EA +:10BDD000000000804100C000000010000800880042 +:10BDE000000083004100C10000408000010001000C +:10BDF000000000C00100C000000000008300040239 +:10BE00000090C0004100C10000408200010001001C +:10BE1000000000C00100C00000000000400005025A +:10BE20000090C0000300C10000408200000001003B +:10BE30000100000000C00100C000000000008200FE +:10BE400005020090C0000300C10000408200010014 +:10BE50000100000000C00100C000000001008200DD +:10BE600005080090C0000900C1000040820000C029 +:10BE70000001C0C100000000000100C1824100417A +:10BE8000000100C10000000000010000000000C02F +:10BE90000001C0C100000000000100C00840001106 +:10BEA000000100C1000000000001000000000000CF +:10BEB00000C00001C0C100000000000100C102413B +:10BEC0000011000100C1000000000001000000009E +:10BED00000C00001C0C100000000000100C1054118 +:10BEE0000003000100C1010000000001000000008B +:10BEF0000080004180C100000000004100908020CF +:10BF00000041004100C1000000000041004000006D +:10BF10000080004180C100000000004100898010C5 +:10BF200000C1004100C100000000004100400000CD +:10BF300000000080004180C100000000004100902E +:10BF4000800300C1004100C100000000004100402A +:10BF500000000080004180C100000000004100A0FE +:10BF6000880200C1004100C10800000000410040FB +:10BF70000000C100800080C10000410000080300F3 +:10BF80004100C1410000800200004100000080002B +:10BF90004100C100800080C1000041100000C100CC +:10BFA0004100C1418000800200004100000080008B +:10BFB00041000000C100800080C10000411000412C +:10BFC000C1004100C1418000800800004100000024 +:10BFD00080004100C100800080C1000041000008D5 +:10BFE00085004100C1418000800800004100000040 +:10BFF00080004100C1004000C0C1000001002000DD +:10C0000090000100C1914000C0000000010000004C +:10C01000C0000100C1004000C0C1000001001000CC +:10C0200010000100C1111000C0000000010000005C +:10C03000C00001000000C1004000C0C100000100BC +:10C04000100108000100C1111000C0000000010033 +:10C050000000C0000100C1004000C0C1000001009C +:10C06000200083000100C1118200C0000000010017 +:10C070000000C000010000000000000000420000BD +:10C080000000000000008112004807004800000086 +:10C09000000000000000000000000000004200005E +:10C0A0000000000000008112004807004800000066 :10C0B000000000000000000000000000000000423E -:10C0C0000000000000004800500000E00000600098 -:10C0D000000000000000004200000000000000001E -:10C0E0000000000000000000810000E000004800A7 +:10C0C0000000000000004100811200480700480005 +:10C0D000000000000000000000000000000000421E +:10C0E0000000000000000000811200480700480026 :10C0F0000000000000000000000000000000000040 :10C10000000000000000000000000000000000002F :10C11000000000000000000000000000000000001F @@ -130109,111 +130109,111 @@ :10C1C000000000000000000000000000000000006F :10C1D000000000000000000000000000000000005F :10C1E000000000000000000000000000000000004F -:10C1F000000000000000000000000000747B000050 +:10C1F000000000000000000000000000757B00004F :10C20000000000000000000000000000000000002E -:10C2100000000000000000000000DE2E747B000023 +:10C2100000000000000000000000DEAE757B0000A2 :10C22000000000000000000000000000000000000E -:10C2300000000000000000000000DE2E0000747B03 +:10C2300000000000000000000000DEAE0000757B82 :10C2400000000000000000000000000000000000EE -:10C25000000000000000000000000000DE2E747BE3 +:10C25000000000000000000000000000DEAE757B62 :10C2600000000000000000000000000000000000CE -:10C27000000000000000000000000000DE2E6156FB -:10C2800003400000000000000231E0000000000058 -:10C2900000000C4000000000000002C06A866156E9 -:10C2A00003400000000000000230A0000000000079 -:10C2B00000000C4000000000000002C06A86000080 -:10C2C000615603400000000000000231E000000061 -:10C2D000000000000C4000000000000002C06A8660 -:10C2E000615603400000000000000230A000000082 -:10C2F000000000000C4000000000000002C06A8640 +:10C27000000000000000000000000000DEAE60C60C +:10C2800003000000000000000031E000000000009A +:10C2900000000C0000000000000000C0630660C643 +:10C2A00003000000000000000031E000000000007A +:10C2B00000000C0000000000000000C06306000049 +:10C2C00060C603000000000000000031E000000034 +:10C2D000000000000C0000000000000000C0630629 +:10C2E00060C603000000000000000031E000000014 +:10C2F000000000000C0000000000000000C0630609 :10C30000000000000000000000000000000000002D -:10C310002000A000000000002000200020002000DD -:10C320000000C0000000000088000000C000C00045 -:10C33000200020000000000020002000200020003D -:10C34000000300002000000000002000000020008A -:10C3500020000200200000008800200020002000B3 -:10C360002000C0000800000000000200840020003F -:10C3700020002000200000002000200020002000DD -:10C38000200000020000000000000000000000008B -:10C390000000000000000004000080008000C002D7 -:10C3A0008004000000000000000000000000000009 -:10C3B000000000020000000000000000000000007B -:10C3C000000000000000000000000000000000006D -:10C3D00000000000A00000000000000000000002BB -:10C3E00000000000000000000000000080000000CD -:10C3F00000000000000000000000000000000040FD +:10C3100000002000000000000000000000000000FD +:10C32000000000000000000000000000000000000D +:10C3300000002000000000000000000000000000DD +:10C3400000000000000000000000000000000000ED +:10C35000000000002000000000000000000000407D +:10C3600000000000000000000000000000000000CD +:10C3700000000000000000000000000000000000BD +:10C3800000000000000000040000000000000004A5 +:10C39000000000000000000000000002000000009B +:10C3A000000000000000000000000002000000008B +:10C3B000000000000000000000000500050000046F +:10C3C0000004000000000000000000000000000069 +:10C3D0000000000000000000000010000002000249 +:10C3E000000040000000000000000000000000000D +:10C3F000000000000000000000000000000000003D :10C40000000000000000000000000000000000002C -:10C41000000002000000000000000000000000001A +:10C41000000000000000000000000000000000001C :10C42000000000000000000000000000000000000C :10C4300000000000000000000000000000000000FC -:10C4400000000200000000000000000000000000EA +:10C4400000000000000000000000000000000000EC :10C4500000000000000000000000000000000000DC :10C4600000000000000000000000000000000000CC -:10C4700000000000000001000000000000000000BB -:10C480000000000000000000000000000084000028 -:10C49000000000000000009000000000000000000C -:10C4A0000000000000000000000000000008000084 +:10C4700000000000000000000000000000000000BC +:10C4800000000000000000000000000000000000AC +:10C49000000000000200000000000000000000009A +:10C4A000000000000000000000000000000000008C :10C4B000000000000000000000000000000000007C -:10C4C00000000000000000000000000000000084E8 -:10C4D0000000000000900000000000000000408804 -:10C4E0000088008800000000000000000000000438 -:10C4F000000000000000000002000000000000003A -:10C500000000000000000000000000000000000823 -:10C5100000000000000000000000000000000020FB +:10C4C000000000000000000000000000000000006C +:10C4D0000000000000000000000000080000000054 +:10C4E0000084000000000200000000900000000036 +:10C4F000000000000000008200000090000000002A +:10C50000000000000000000000000000000000002B +:10C51000000000000000000000000000000000001B :10C52000000000000000000000000000000000000B -:10C5300000000000000800000000000000000000F3 -:10C5400000000000000000000000000000000000EB -:10C5500000000000000000000000000000000000DB -:10C5600000110000000000000000000000000000BA -:10C5700000000000000000000000000000000000BB -:10C5800000000000000000000000000000000000AB -:10C59000000000000000000000000000000000009B -:10C5A00000881100000000A0000000000000000052 -:10C5B000000000000000000000000000000000007B -:10C5C00000080082000800201000000000000000A9 -:10C5D000000000000000000000004000000000001B -:10C5E00000000000000000820000000000000000C9 -:10C5F00000004100020000000000000041000000B7 -:10C600000000000000C000C00900000000000000A1 +:10C5300000000000000000000000000000000000FB +:10C5400000000000000000000000000000080041A2 +:10C5500000000000000000000003000000000000D8 +:10C5600000000000000000000000000000040000C7 +:10C5700000000009000000000000000000000000B2 +:10C5800000000000000000000000000000000800A3 +:10C590000800000021000000000000000000000072 +:10C5A000000000000000000000000000000000008B +:10C5B00000000000000000000000008400A000A0B7 +:10C5C0000084008400000000000000000000000063 +:10C5D000000000000000000000000000008400A037 +:10C5E00000000000008400000000000000000000C7 +:10C5F000400000000000008800880000009000005B +:10C600000000000400900000000000000000000096 :10C61000000000000000000000000000000000001A -:10C620000000000084000000000000000000000086 +:10C62000000000000000000000000000000000000A :10C6300000000000000000000000000000000000FA :10C6400000000000000000000000000000000000EA -:10C6500000000000A000000000000000000000003A -:10C6600000000000010000000000000000000200C7 -:10C67000080000000100000000000000010082002E -:10C6800000000000C10000000000000000000000E9 +:10C6500000000000000000000000000000000000DA +:10C6600000000000000000000000000000000000CA +:10C6700000000000000000000000000000000000BA +:10C6800000000000000000000000000000000000AA :10C69000000000000000000000000000000000009A :10C6A000000000000000000000000000000000008A :10C6B000000000000000000000000000000000007A :10C6C000000000000000000000000000000000006A :10C6D000000000000000000000000000000000005A -:10C6E0000000000000000400000000000000000046 -:10C6F00080000000000004000000000000000400B2 -:10C700000000030000000400000000000000000022 -:10C7100000000000000000210000000000000000F8 -:10C720000000000000009000000000000000000079 +:10C6E000000000000000000000000000000000004A +:10C6F000000000000000000000000000000000003A +:10C700000000000000000000000000000000000029 +:10C710000000000000000000000000000000000019 +:10C720000000000000000000000000000000000009 :10C7300000000000000000000000000000000000F9 -:10C7400000000000000000000008000000000000E1 -:10C7500000000000000000000008000000000000D1 -:10C76000000000000000002000008800840000009D -:10C770000000C040000000200000080090000020E1 -:10C780000000000000000020000000000000000089 -:10C790000000000000000000000000000000000099 -:10C7A0000000080040900000002000000000000091 -:10C7B0000000000000000000000800000000000071 -:10C7C00000000000008200000000000000000900DE -:10C7D0002000000000000000000000000000000039 -:10C7E00000000000080008000001039000000000A5 -:10C7F0000000000000000000000100000000000038 -:10C80000000100000000000800010000000000001E -:10C81000090000000000000000000000000000000F +:10C7400000000000000000000000000000000000E9 +:10C7500000000000000000000000000000000000D9 +:10C760000008000000000020001100000000000090 +:10C7700000000000000000000000000000000000B9 +:10C7800000020000000000000000000000000000A7 +:10C790000000000000000000000000000800080089 +:10C7A0000000080008000000080000000000000071 +:10C7B0000000000000000000000000000000000079 +:10C7C00000C0000008080000000000000000000099 +:10C7D000000000000000000000000000008211883E +:10C7E0000000008200900808000000000000000027 +:10C7F00000000000000000000000050000880900A3 +:10C8000011880000009008040000000000000000F3 +:10C810000000000000000800000000000000000010 :10C820000000000000000000000000000000000008 :10C8300000000000000000000000000000000000F8 -:10C8400000000000000000000000000000000000E8 -:10C850000000400000000000000000000000000098 -:10C8600000000000000000000000000000000000C8 -:10C8700000000000000000000000000000000000B8 +:10C8400000000000000000000000000000080000E0 +:10C8500000000021000000030000000000000000B4 +:10C8600000000000000000000000000000000021A7 +:10C8700000000000000000030000000000000000B5 :10C8800000000000000000000000000000000000A8 :10C890000000000000000000000000000000000098 :10C8A0000000000000000000000000000000000088 @@ -130221,4115 +130221,18 @@ :10C8C0000000000000000000000000000000000068 :10C8D0000000000000000000000000000000000058 :10C8E0000000000000000000000000000000000048 -:10C8F0000000000000000200000000000000000036 +:10C8F0000000000000000000000000000000000038 :10C900000000000000000000000000000000000027 :10C910000000000000000000000000000000000017 :10C920000000000000000000000000000000000007 :10C9300000000000000000000000000000000000F7 :10C9400000000000000000000000000000000000E7 :10C9500000000000000000000000000000000000D7 -:10C960000000000000000000000000009000000037 -:10C970000000000000000000000000009000000027 -:10C980000000000090000000000000009000000087 -:10C990000000000000000000000000000000000097 -:10C9A0000000000000000000000000000000000087 -:10C9B0000000000000000000000000000000000077 -:10C9C0000000000000000000000000000000000067 -:10C9D0000000000000000000000000000000000057 -:10C9E00000000000000000000000000011008000B6 -:10C9F00000000000000000000000000011008000A6 -:10CA00000000000011008000000000001100800004 -:10CA10000000000000000000000000000000000016 -:10CA20000000000000000000000000000000000006 -:10CA30000000000000410000002000000000000095 -:10CA400000000000000000000000000000000000E6 -:10CA500000000000000000000000000000000000D6 -:10CA600000000000000000000000000000000000C6 -:10CA70000080000000000000000000000000000036 -:10CA80000080000000000000008000000080000026 -:10CA90000080000000000000000000000000000016 -:10CAA0000000000000000000000000000000000086 -:10CAB0000000000000000001000000010000000074 -:10CAC0000000000000000000000000000000000066 -:10CAD0000000000000000000000000000000000056 -:10CAE0000000000000000000000000000000000046 -:10CAF0000000002000000090000000000000000086 -:10CB000000000020000000200000002000000002C3 -:10CB100000000020000000200000000000000000D5 -:10CB20000000000000000000000000000000000005 -:10CB30000000000000000000000090000000010064 -:10CB400000000000000000000000000000000000E5 -:10CB500000000000000000000000000000000000D5 -:10CB600000000000000000000000000000000000C5 -:10CB700000000100008888000000000000000000A4 -:10CB80000000010000888800000001000088880083 -:10CB90000000010000888800000000000000000084 -:10CBA0000000000000000000000000000000000085 -:10CBB0000000000000000000000000000000000075 -:10CBC0004100000000000000000000000000000024 -:10CBD0000000000000000000000000000000000055 -:10CBE0000000000000000000000000000000000045 -:10CBF0000000000041000080000000000000000074 -:10CC000000000000410000800000000041000080A2 -:10CC10000000000041000080000000000000000053 -:10CC20000000000000000000000000000000000004 -:10CC300000000000000000000000000000000000F4 -:10CC400000000000000000000000000000000000E4 -:10CC500000000000000000000000000000000000D4 -:10CC600000000000000000000000000000000000C4 -:10CC70000000000000000011000000800000000023 -:10CC80000000000000000011000000800000001102 -:10CC90000000008000000011000000800000000083 -:10CCA0000000000000000000000000000000000084 -:10CCB0000000000000000000000000000000000074 -:10CCC0000000000000000000000000000000000064 -:10CCD0000000000000000000000000000000000054 -:10CCE0000000000000000000000000000000000044 -:10CCF00000000000000000000001000000400000F3 -:10CD000000000000000000000001000000400000E2 -:10CD10000001000000400000000100000040000091 -:10CD20000000000000000000000000000000000003 -:10CD300000000000000000000000000000000000F3 -:10CD4000000002E00000608200000000000000001F -:10CD500000000000000000000000000000000000D3 -:10CD600000000000000000000000000000000000C3 -:10CD700000000000000000000000000000000700AC -:10CD8000820000000000000000000000000007001A -:10CD90008200000000000700820000000000070081 -:10CDA0008200000000000000000000000000000001 -:10CDB0000000000000000000000000000000000073 -:10CDC0000000000000000000000000000000000063 -:10CDD0000000000000000000000000000000000053 -:10CDE0000000000000000000000000000000000043 -:10CDF0000000000000000000000000000000000033 -:10CE0000F0F0000000000000000000000000000042 -:10CE1000F0F0000000000000F0F000000000000052 -:10CE2000F0F0000000000000000000000000000022 -:10CE300000000000000000000000000000000000F2 -:10CE400000000000000000000000000000000000E2 -:10CE500000000000000000000000000000000000D2 -:10CE600000000000000000000000000000000000C2 -:10CE700000000000000000000000000000000000B2 -:10CE80000000F0F0000000000000000000000000C2 -:10CE90000000F0F0000000000000F0F000000000D2 -:10CEA0000000F0F0000000000000000000000000A2 -:10CEB0000000000000000000000000000000000072 -:10CEC0000000000000000000000000000000000062 -:10CED0000000000000000000000000000000000052 -:10CEE0000000000000000000000000000000000042 -:10CEF0000000000000000000000000000000000032 -:10CF0000000000000000FFFF000000000000000023 -:10CF1000000000000000FFFF000000000000FFFF15 -:10CF2000000000000000FFFF000000000000000003 -:10CF300000000000000000000000000000000000F1 -:10CF400000000000000000000000000000000000E1 -:10CF500000000000000000000000000000000000D1 -:10CF600000000000000000000000000000000000C1 -:10CF700000000000000000000000000000000000B1 -:10CF800000000000000000000000000000000000A1 -:10CF90000000000000000000000000000000000091 -:10CFA0000000000000000000000000000000000081 -:10CFB0000000000000000000000000000000000071 -:10CFC0000000000000000000000000650006000FE7 -:10CFD0002000000000000000000000000000000031 -:10CFE0000000000000000000000000000000000041 -:10CFF0000000000000000000000000000000000031 -:10D000000000000005000A00054000A80000000024 -:10D010000000000005000A00054000A805000A0005 -:10D02000054000A805000A00054000A80000000017 -:10D0300000000000000000000000000000000000F0 -:10D0400000000000000000000000000000000000E0 -:10D0500000000000000000000000000000000000D0 -:10D0600000000000000000000000000000000000C0 -:10D0700000000000000000000000000000000000B0 -:10D0800000000000000000000000000000000000A0 -:10D090000000000000000000000000000000000090 -:10D0A0000000000000000000000000000000000080 -:10D0B0000000000000000000000000000000000070 -:10D0C0000000000000000000000000000000000060 -:10D0D0000000000000000000000000000000000050 -:10D0E0000000000000000000000000000000000040 -:10D0F0000000000000000000000000000000000030 -:10D10000000000000000000000000000000000001F -:10D11000000000000000000000000000000000000F -:10D1200000000000000000000000000000000000FF -:10D1300000000000000000000000000000000000EF -:10D1400000000000000000000000000000000000DF -:10D1500000000000000000000000000000000000CF -:10D1600000000000000000000000000000000000BF -:10D1700000000000000000000000000000000000AF -:10D18000000000000000000000000000000000009F -:10D19000000000000000000000000000000000008F -:10D1A000000000000000000000000000000000007F -:10D1B000000000000000000000000000000000006F -:10D1C000000000000000000000000000000000005F -:10D1D000000000000000000000000000000000004F -:10D1E000000000000000000000000000000000003F -:10D1F000000000000000000000000000000000002F -:10D20000000000000000000000000000000000001E -:10D21000000000000000000000000000000000000E -:10D2200000000000000000000000000000000000FE -:10D2300000000000000000000000000000020000EC -:10D2400020002000000088000000000020002000D6 -:10D2500004002000200020002000880000000000C2 -:10D260002000200088002000000000002000200096 -:10D2700020002000200020002000C000000300004B -:10D2800000002000200040002000000000002000DE -:10D2900020002000200020000000200020000000CE -:10D2A000000020002000200020008800C000200096 -:10D2B000100020002000200084002000000040001A -:10D2C000000200000000000000000002000040001A -:10D2D00000008000000000000002000200001000BA -:10D2E00000000000000000000000000000004000FE -:10D2F00000000000000000000000000000400000EE -:10D30000000000000000000000000000000000001D -:10D31000000000000000000000000000000000000D -:10D3200000000000000000000000000000000000FD -:10D3300000000000000000000000000000000000ED -:10D3400000000000000000000000000000000800D5 -:10D3500000000000000000000200020002000200C5 -:10D36000020002000200020002000200020002109D -:10D37000020002000200020002000200020002009D -:10D38000000000400040004000400000000000009D -:10D39000000000000000000000000000000000008D -:10D3A000000000000000000000000000000000007D -:10D3B000001000000000000000000000000000005D -:10D3C000000000000000000000000000000000005D -:10D3D00000000000000000000000800080008000CD -:10D3E000800080008000800080008000800080003D -:10D3F000800080008000800080008000800080002D -:10D400008000000000010001000100010000000098 -:10D41000000000000000000000000000000000000C -:10D4200000000000000000000000000000000002FA -:10D4300000000000000800080000000000000000DC -:10D4400000000000000000000000000000000000DC -:10D4500000000000010000000000000000000000CB -:10D46000000000000000000000000000002100217A -:10D470000000000000210021002100110002000531 -:10D480000000000000000021002100210009000030 -:10D49000000000000000000841080011000000002A -:10D4A000000000000000000040000000000000003C -:10D4B0000000000000000400040000000000000064 -:10D4C000000000000000000000000000000000005C -:10D4D000000000000000020000000000000000004A -:10D4E0001000000000000000000003000300000026 -:10D4F000000000000000000000000000000000002C -:10D500000000000000000000000000000082000099 -:10D5100000000000000000000000100000000000FB -:10D5200003000000000041000000000000000000B7 -:10D5300000000000000003000000000000000000E8 -:10D5400000000000000000000000000000000000DB -:10D55000000000000000A000010001000200030024 -:10D56000C0000000000000000000000000000100FA -:10D5700001000000000000000000000000000100A9 -:10D580000100000000000800000000000000000092 -:10D590000100080000000000000000002000010061 -:10D5A0000100000000009000A000C000000000008A -:10D5B00000000000000000000000820008000000E1 -:10D5C000000000000000000000000000000000005B -:10D5D00000000000000000000000040004008000C3 -:10D5E00084000000000000000000000000000000B7 -:10D5F0002000020000000000000000000000000009 -:10D6000002002000000000000000000000000000F8 -:10D610000000020000000000000000000000800088 -:10D6200020002000000000000000000000000300B7 -:10D6300000000000000000000000000000000000EA -:10D6400000000000000000000000000000000000DA -:10D650000000000000000000880008000000020038 -:10D660000020000000002000000000000000202139 -:10D670000000002100212000000000000000202107 -:10D680000004001100042000000000000000000061 -:10D690002021000000000000000800000000100031 -:10D6A000000001040000000008000000000000006D -:10D6B000000000000000000000000000000000006A -:10D6C000000000000000000000000000000000005A -:10D6D000000000000000000000000000000000202A -:10D6E000C0000001002010008000000000040000C5 -:10D6F000800000000000000080000000000000002A -:10D700008000000100000000850000000000000013 -:10D710000000800000000000000000000000000089 -:10D7200080000000100100840000000000000400E0 -:10D7300000000000000000840000002000000084C1 -:10D740000000000000000084000010000000000045 -:10D750000000000000008200000000000000000047 -:10D7600000000000000000000100000000000000B8 -:10D77000012100050021002100210005000000001A -:10D780000021000300210000000000000000000054 -:10D790000000002100210021000000000000000026 -:10D7A0008200008000000000100000000000000067 -:10D7B0000002000000000000000000000000000067 -:10D7C0000002000000000000000200000000000055 -:10D7D000080200000000000000000000000000003F -:10D7E0000000000000000000000020000000000019 -:10D7F0000000200000000000000000000000000009 -:10D800000000000000000000000000000000000018 -:10D810000000000000000000000000000000000008 -:10D820000000000000040000000080000000000074 -:10D8300000000000000000000000000000000000E8 -:10D8400000000000000000000000000000000000D8 -:10D8500000000000000000000000000000000000C8 -:10D8600000000000000090200000820041C0000085 -:10D870000001000041C002001001000041C0000092 -:10D880000001000011C001000001000041C01100B2 -:10D8900082010001000041C0010000010001000000 -:10D8A0000000000000000100000000010000000076 -:10D8B0000000000000000000000000000000000068 -:10D8C0000000000000000000000000000000000058 -:10D8D0000000000000000000000000000000000048 -:10D8E0000000000000001100808000008000898995 -:10D8F000021109090011898200028209000291893E -:10D90000111109090011918203020209000289899B -:10D910000809890900030000918203020209000836 -:10D9200000000000000000001100210000080000BD -:10D9300000000000000000000000000000000000E7 -:10D9400000000000000000000000000000000000D7 -:10D9500000000000000000000000000000000000C7 -:10D9600000000000000000000000000000000000B7 -:10D970000900020041119109098002004111830050 -:10D9800009000221001191000900022102119008F2 -:10D990000900210008119103000009000221021171 -:10D9A000A008000000000000000000A0000000101F -:10D9B0000000000000000000000000000000000067 -:10D9C0000000000000000000000000000000000057 -:10D9D0000000000000000000000000000000000047 -:10D9E00000000000000000000000000000900000A7 -:10D9F0000090000000000001C000000800000001CD -:10DA0000C100000200000001C00001000000000091 -:10DA1000C011009000000101C001000001000000E1 -:10DA20000001C02100000000000000000010000004 -:10DA300000010000000000000000000000000000E5 -:10DA400000000000000000000000000000000000D6 -:10DA500000000000000000000000000000000000C6 -:10DA600000000000000000000000000000000000B6 -:10DA7000C000000000000001000003C00000000022 -:10DA8000000103C000000000000003C1000000000E -:10DA9000000103C000000100000003C100000000FD -:10DAA0000100000103C100000000000000000000B0 -:10DAB0002000000000000000000000000000000046 -:10DAC0000000000000000000000000000000000056 -:10DAD0000000000000000000000000000000000046 -:10DAE0000000000000000000000000000000030033 -:10DAF00000008000000000090009414191890002F6 -:10DB00001102000389820009000241419183000251 -:10DB100000021003918200090809000091830000AF -:10DB20000002410200039188000000000000000094 -:10DB300000000000000005000000000000000000E0 -:10DB400000000000000000000000000000000000D5 -:10DB500000000000000000000000000000000000C5 -:10DB600000000000000000000000000000000000B5 -:10DB70000011000000800000090221001180090945 -:10DB80008200020905000202898221091180090828 -:10DB90008200020910800202890809090080090038 -:10DBA0000000821002092080080800000000000028 -:10DBB0000000000000110000000300000000000051 -:10DBC0000000000000000000000000000000000055 -:10DBD0000000000000000000000000000000000045 -:10DBE0000000000000000000000000000000000035 -:10DBF00000000001000088400000000000000084D8 -:10DC00009100C000000101889000C0100001008454 -:10DC10000101C000000100840000C0100001008468 -:10DC200089000000C0010001008401010000000023 -:10DC300000000000000000010000000100000000E2 -:10DC400000000000000000000000000000000000D4 -:10DC500000000000000000000000000000000000C4 -:10DC600000000000000000000000000000000000B4 -:10DC7000000000000000000007040006480000E06B -:10DC800000000000480000E000000000480000E044 -:10DC900000000000820000E000000000810000E0C1 -:10DCA000000000000000810000E00000880000008B -:10DCB000000000000000000002E000000000000082 -:10DCC0000000000000000000000000000000000054 -:10DCD0000000000000000000000000000000000044 -:10DCE0000000000000000000000000000000000034 -:10DCF0000000000000000000F0F00000FFFF3C3CCE -:10DD00003C3C666600003C3C000066660000FFFF8D -:10DD1000000066660000FFFF0000666600003C3CF5 -:10DD20000000666600000000FFFF0000666600005D -:10DD300000000000000000000000000000000000E3 -:10DD400000000000000000000000000000000000D3 -:10DD500000000000000000000000000000000000C3 -:10DD600000000000000000000000000000000000B3 -:10DD700000000000000000000000F0F000000000C3 -:10DD80003C3C3C3C666600003C3C00006666000093 -:10DD900000000000666600000000000066660000EB -:10DDA0003C3C000066660000000000000000666663 -:10DDB0000000000000000000000000000000000063 -:10DDC0000000000000000000000000000000000053 -:10DDD0000000000000000000000000000000000043 -:10DDE0000000000000000000000000000000000033 -:10DDF0000000000000000000000000000000000023 -:10DE00000000000000000000000000000000000012 -:10DE10000000000000000000000000000000000002 -:10DE200000000000000000000000000000000000F2 -:10DE300000000000000000000000000000000000E2 -:10DE400000000000000000000000000000000000D2 -:10DE500000000000000000000000000000000000C2 -:10DE600000000000000000000000000000000000B2 -:10DE700000000000000000000000000000FF0000A3 -:10DE8000FFFF0000000066660000FFFF00006666FE -:10DE90000000FFFF000066660000FFFF00006666EE -:10DEA0000000FFFF000066660000FFFF00000000AA -:10DEB0006666FFFF00000000000000000000000098 -:10DEC0000000000000000000000000000000000052 -:10DED0000000000000000000000000000000000042 -:10DEE0000000000000000000000000000000000032 -:10DEF000000000000000000000000000000000FF23 -:10DF00000000000000000000666600000000000045 -:10DF10006666000000000000666600000000000069 -:10DF20006666000000000000666600000000000059 -:10DF300000006666FFFFFFFF000000000000000019 -:10DF400000000000000000000000000000000000D1 -:10DF500000000000000000000000000000000000C1 -:10DF600000000000000000000000000000000000B1 -:10DF700000000000000000000000000000000000A1 -:10DF800015182A00054004A84063800180219202F0 -:10DF900040E380018021920240E3800180219202CF -:10DFA00040E380018021920240E3800180219202BF -:10DFB000000040E380018021820200000000000098 -:10DFC000000000040006000E200000000000000019 -:10DFD0000000000000000000000000000000000041 -:10DFE0000000000000000000000000000000000031 -:10DFF0000000000000000000000000000000000021 -:10E000000000000000000000000000000000000010 -:10E0100000000002000000040000002000000000DA -:10E02000000000C000000000000000000000000030 -:10E030000000000000C00000000000000000000020 -:10E040000000000000005555FFFF00000000000028 -:10E0500000000000000000000000000000000000C0 -:10E0600000000000000000000000000000000000B0 -:10E0700000000000000000000000000000000000A0 -:10E080000000000000000000000000000030000060 -:10E09000300000000002000000040000002000002A -:10E0A00000000C0000000000000C00000028000030 -:10E0B00000000404000000000000000C000000004C -:10E0C00000000000000000005555000000000000A6 -:10E0D0000000000000000000000000000000000040 -:10E0E0000000000000000000000000000000000030 -:10E0F0000000000000000000000000000000000020 -:10E10000000000000000000000000000000000000F -:10E1100000000004000000020000004000000000B9 -:10E1200000000000000000000000100000000002DD -:10E1300000000000000000000002000010000000CD -:10E14000000000000000000000000F0FAAAA00005D -:10E1500000000000000000000000000000000000BF -:10E1600000000000000000000000000000000000AF -:10E17000000000000000000000000000000000009F -:10E18000000000000000000000000000000000008F -:10E190000003000000040000000200000040000036 -:10E1A0000003000008080000000300001000000049 -:10E1B000000200003000000000000002000010001B -:10E1C0000000000000000000000000000F0FAAAADD -:10E1D000000000000000000000000000000000003F -:10E1E000000000000000000000000000000000002F -:10E1F00000000000000000000000000000002000FF -:10E2000020020000000000002000000020000000AC -:10E210002000840084000000200000000000200492 -:10E22000200088000000000088040000200000009A -:10E23000200020002000000020000000000000005E -:10E24000200020000000000000002000000020004E -:10E250000000200020002000840020000000880032 -:10E2600000000400000084000000200000022000E4 -:10E2700000002002200020002000200000000002FA -:10E28000000000000000000010000000000000007E -:10E29000000000000000000000000000000000007E -:10E2A000000000000000000000001000000400005A -:10E2B000000000000000000000000000000000005E -:10E2C000000000001000000000000000000000003E -:10E2D000000000000000000000000000000000003E -:10E2E000000000000000000000001000000000001E -:10E2F00000004000000000000000000000000000DE -:10E30000000000000000000000000000000000000D -:10E3100000000000000000000000000000000000FD -:10E3200000000000000000000000000000000000ED -:10E3300000000000000000000000000000000000DD -:10E3400000000000000000000000000000000000CD -:10E3500000000000000000000000000000000000BD -:10E3600000000000000000000000000000000000AD -:10E37000000000000000000000000000000000009D -:10E38000000000000000000000000000000000008D -:10E39000000000000000000000000000000000007D -:10E3A000000000000000000000000000000000006D -:10E3B000000000000000000000000000000000005D -:10E3C000000000000000000000000000000000004D -:10E3D000000000000000000000000000000000003D -:10E3E0000000000800000000000000000000000025 -:10E3F000000000000000000000000000000000001D -:10E40000020000000000000000000000000000000A -:10E4100000000000040000000000000000000000F8 -:10E4200000000000000000000000000000000000EC -:10E4300000000000000000000000000000000000DC -:10E4400000000000000000000000000000000000CC -:10E4500000000400000000000000000000000000B8 -:10E4600000000000000000000000000000000000AC -:10E47000000000000000000000000000000000009C -:10E48000000000000000000000000000000000008C -:10E49000000000000000000000000000000000007C -:10E4A000000000000000000000000000000000006C -:10E4B0000000000000000400000021000000000037 -:10E4C00000400200000000080000000000000800FA -:10E4D0000900000000000000000000000000000033 -:10E4E000000000000000000000000000210000000B -:10E4F000000000000000000000000000000000001C -:10E500000300030000000000000000000000000005 -:10E5100000000000000000000000000000001000EB -:10E5200000000000400000000000000000000000AB -:10E5300000000000000000000000000000000000DB -:10E5400000000000000000000000000000000000CB -:10E550000000000000000000000088000000000033 -:10E5600000000000000000000000000000000000AB -:10E570000000C000C00000000000000000400000DB -:10E58000000000000000000000000000000000008B -:10E59000000000000000000000000000000000007B -:10E5A000000000000000000000000000000000006B -:10E5B000000000000000000000000000000000005B -:10E5C000000000000000000000000000000000004B -:10E5D000000000000000000000000000000000003B -:10E5E000000000000000000000000000000000002B -:10E5F000000002000200020002000200020002000D -:10E600000200000000000200000000000000000006 -:10E6100000000000000000000000000000000000FA -:10E6200000000000000000000000000000000000EA -:10E6300000000000000000000000000000000000DA -:10E6400000000000000000000000000000000000CA -:10E6500000000000000000000000000000000000BA -:10E6600000000000000000000000000000000000AA -:10E67000080008000000000000000000000000008A -:10E68000000000000000000000000000000000008A -:10E69000000000000000080000000000080000006A -:10E6A00009000084000000000000000000000000DD -:10E6B0000000218400840000000021000000000010 -:10E6C00000000084008400000040020000001108E7 -:10E6D00000000000008400000000000000000000B6 -:10E6E0000900040000840000000000000000000099 -:10E6F000000000000000000000000000000000001A -:10E700000000000000000000000000000000000009 -:10E7100000000000000000000000000000000000F9 -:10E720000000000000000000000000009002000057 -:10E73000000000009000000000000000080200023D -:10E7400000000000000000000000000000020000C7 -:10E7500000020000000000000000000000000002B5 -:10E760000000000000000000000000000000400267 -:10E770000000000000000000000000000000000099 -:10E780000000000000000000000000000000000089 -:10E790000000000000000000000000000000000079 -:10E7A0000000000000000000000000000000000069 -:10E7B0000000000000000000000000000000000059 -:10E7C0000000000000000000000000000000000049 -:10E7D0000000000000000000000000000000000039 -:10E7E0000000000000000000000000000000000029 -:10E7F00000000000000000000000004000000000D9 -:10E800000000000000000000000002000040004086 -:10E8100002000000000000000000000000000000F6 -:10E8200000000000000000000000000000000000E8 -:10E8300000000000000000000000000000000000D8 -:10E8400000000000000000000000000000000000C8 -:10E8500000000000000000000000000000000000B8 -:10E8600000000000000000000000000000000000A8 -:10E870000000000000000000000000000000000098 -:10E880000000000000000000000000000000000088 -:10E890000000000000000000000000000000000078 -:10E8A0000000000000000000000000000000000068 -:10E8B0000000000000000000000000000000000058 -:10E8C0000000000000000000000000000000000048 -:10E8D0000000000000000000000000000000000038 -:10E8E0000000000000000000000000000000000028 -:10E8F0000000000000000000000000000000000018 -:10E900000000000000000000000000000000000007 -:10E9100000000000000000000000000000000000F7 -:10E9200000000000000000000000000000000000E7 -:10E9300000000000000000000000000000000000D7 -:10E9400000000000000000000000000000000000C7 -:10E9500000000000000000000000000000000000B7 -:10E9600000000000000000000000000000000000A7 -:10E970000000000000000000000000000000000097 -:10E980000000000000000000000000000000000087 -:10E990000000000000000000000000000000000077 -:10E9A0000000000000000000000000000000000067 -:10E9B0000000000000000000000000000000000057 -:10E9C0000000000000000000000000000000000047 -:10E9D0000000000000000000000000000000000037 -:10E9E0000000000000000000000000000000000027 -:10E9F0000000000000000000000000000000000017 -:10EA00000000000000000000000000000000000006 -:10EA100000000000000000000000000000000000F6 -:10EA200000000000000000000000000000000000E6 -:10EA300000000000000000000000000000000000D6 -:10EA400000000000000000000000000000000000C6 -:10EA500000000000000000000000000000000000B6 -:10EA600000000000000000000000000000000000A6 -:10EA70000000000000000000000000000000000096 -:10EA80000000000000000000000000000000000086 -:10EA90000000000000000000000000000000000076 -:10EAA0000000000000000000000000000000000066 -:10EAB0000000000000000000000000000000000056 -:10EAC0000000000000000000000000000000000046 -:10EAD0000000000000000000000000000000000036 -:10EAE0000000000000000000000000000000000026 -:10EAF0000000000000000000000000000000000016 -:10EB00000000000000000000000000000000000005 -:10EB100000000000000000000000000000000000F5 -:10EB200000000000000000000000000000000000E5 -:10EB300000000000000000000000000000000000D5 -:10EB400000000000000000000000000000000000C5 -:10EB500000000000000000000000000000000000B5 -:10EB600000000000000000000000000000000000A5 -:10EB70000000000000000000000000000000000095 -:10EB80000000000000000000000000000000000085 -:10EB90000000000000000000000000000000000075 -:10EBA0000000000000000000000000000000000065 -:10EBB0000000000000000000000000000000000055 -:10EBC0000000000000000000000000000000000045 -:10EBD0000000000000000000000000000000000035 -:10EBE0000000000000000000000000000000000025 -:10EBF0000000000000000000000000000000000015 -:10EC00000000000000000000000000000000000004 -:10EC100000000000000000000000000000000000F4 -:10EC200000000000000000000000000000000000E4 -:10EC300000000000000000000000000000000000D4 -:10EC400000000000000000000000000000000000C4 -:10EC500000000000000000000000000000000000B4 -:10EC600000000000000000000000000000000000A4 -:10EC70000000000000000000000000000000000094 -:10EC80000000000000000000000000000000000084 -:10EC90000000000000000000000000000000000074 -:10ECA0000000000000000000000000000000000064 -:10ECB0000000000000000000000000000000000054 -:10ECC0000000000000000000000000000000000044 -:10ECD0000000000000000000000000000000000034 -:10ECE0000000000000000000000000000000000024 -:10ECF0000000000000000000000000000000000014 -:10ED00000000000000000000000000000000000003 -:10ED100000000000000000000000000000000000F3 -:10ED200000000000000000000000000000000000E3 -:10ED300000000000000000000000000000000000D3 -:10ED400000000000000000000000000000000000C3 -:10ED500000000000000000000000000000000000B3 -:10ED600000000000000000000000000000000000A3 -:10ED70000000000000000000000000000000000093 -:10ED80000000000000000000000000000000000083 -:10ED90000000000000000000000000000000000073 -:10EDA0000000000000000000000000000000000063 -:10EDB0000000000000000000000000000000000053 -:10EDC0000000000000000000000000000000000043 -:10EDD0000000000000000000000000000000000033 -:10EDE0000000000000000000000000000000000023 -:10EDF0000000000000000000000000000000000013 -:10EE00000000000000000000000000000000000002 -:10EE100000000000000000000000000000000000F2 -:10EE2000000000000000000000000000000088005A -:10EE30002000000000002000200020000000000052 -:10EE40002000200000002000000000000000200042 -:10EE50004000000000002000200020800200000090 -:10EE600002000000000020000000000188000000F7 -:10EE7000200088000000000020004000000020006A -:10EE80000000200000000000200088008800000032 -:10EE900020002000000000002000C00088002000AA -:10EEA0000000000000004000200020004040000260 -:10EEB0000000000040004040000200400000000050 -:10EEC000000000400000004000020004400000007C -:10EED00000000000000000400000000040208040D2 -:10EEE0000000800040000040000000000000000022 -:10EEF0000000000000000000000000020000000010 -:10EF000000000000000000000040000000000000C1 -:10EF1000000000000000000040400040000000022F -:10EF200000020000200000000002000000000000BD -:10EF300000000000000000000000000000000000D1 -:10EF400000000000000000000000000000100000B1 -:10EF500000000000000000000000000000000000B1 -:10EF600000000000000000000000000000000000A1 -:10EF70000000000000000000000000000000000091 -:10EF80000000000000000000000000000000080079 -:10EF90000000000000000000000000000000000071 -:10EFA000000000000000000000004000020000100F -:10EFB0000000000000000000000000000000000051 -:10EFC0000000000000000000000000000000000041 -:10EFD0000000000000000000000000000000000031 -:10EFE0000000000000000000000000000000000021 -:10EFF0000000000000000000000000000000000011 -:10F000000000000000000000000000000000000000 -:10F0100000000000000000004000000000000000B0 -:10F0200000000000000000000000000080008000E0 -:10F0300000000000000000000000000000000000D0 -:10F0400000000000040000000000000000000000BC -:10F0500000000400000000000000000000000000AC -:10F060000000000000000000000000004000000060 -:10F070000000000000000000000000000000000090 -:10F08000000000000000040000000000000000007C -:10F09000000000000000040000000000000000006C -:10F0A0000000000000000000000000000000000060 -:10F0B0000000000000000000000000000000000050 -:10F0C0000000000000000000000000000000000040 -:10F0D0000000000000000000000000000000000030 -:10F0E0000000000000000000000000000000000020 -:10F0F0000000000000000000000000000000000010 -:10F1000000000000000000000000000000000000FF -:10F1100000000000000000000000000000000000EF -:10F1200000000000000000000000000000000000DF -:10F1300000000000000000000000000000000000CF -:10F1400000000000000000000000080000000000B7 -:10F150000000000000000000000082000800000025 -:10F16000000000000000021001100010091008004B -:10F17000000000000000000000000000000000008F -:10F18000000000000000080008000000000000006F -:10F19000000000000000000008000008000800084F -:10F1A000840088000000000040000000C000000053 -:10F1B000000000020000000000000000000000004D -:10F1C000000000000000000000000000000000003F -:10F1D000000000000000000000000000000000002F -:10F1E0000000000000000000800004000000040097 -:10F1F000000000000000000000000000000000000F -:10F2000008000000000000000000000000000000F6 -:10F2100000000000000000000040000000000000AE -:10F22000000000000000000000000000000040009E -:10F2300040004000210009004000000000000000E4 -:10F2400000000000000000000000000000000000BE -:10F2500000000000000000000000000000000000AE -:10F26000000000000000000000000000000000207E -:10F27000000000000000000000000000000000008E -:10F28000000000000000000000000000000000007E -:10F29000000000000000000000000000000000006E -:10F2A000000000000000000000000800A0000000B6 -:10F2B0000000040020000000C0004000000000002A -:10F2C0000000000000000000000000000000080036 -:10F2D000000000000000000000000000000000002E -:10F2E000000000000000000000000000000000001E -:10F2F0000001000000040000000000000000000009 -:10F3000000000000000003000000000000000500F5 -:10F3100000000000000000000000000000000000ED -:10F3200000000000000000000000000000000000DD -:10F3300000000000000000000000000000000000CD -:10F3400000000000000000000000000000000000BD -:10F3500000000000000000000000000000000000AD -:10F36000000000000000000000000000000000009D -:10F37000000000000000000000000000000000008D -:10F38000000000000000000000000000000000007D -:10F39000000000000000000000000000000000006D -:10F3A00000000000000000008400000000000000D9 -:10F3B0008400400040004000000000000000900079 -:10F3C0000000050000000500000000000000000033 -:10F3D000000000000000000000000000000000002D -:10F3E000000000000000000000000000000000001D -:10F3F000000000000000000000000000000000000D -:10F4000000000000000000000000000000000000FC -:10F4100000000000000000000000000000000000EC -:10F4200000000000000000000000000000000000DC -:10F4300000000000000000000000000000000000CC -:10F4400000000000000000000000000000000000BC -:10F4500000000000000000000000000000000000AC -:10F46000000000000000000000000000000000009C -:10F4700000000000400000404000000000000000CC -:10F48000000000000000000000000000000000007C -:10F49000000000000000000000000000000000006C -:10F4A000000000000000000000000000000000005C -:10F4B00000000000000000000000000082909105A4 -:10F4C000088202830000000000000000000000002D -:10F4D000000000000000000000000000000000002C -:10F4E000000000000000000000000000000000001C -:10F4F000000000001100800000000000000000007B -:10F5000000000000000000000000000000000000FB -:10F5100000000000000000000000000000000000EB -:10F5200000000000000000000000000000000000DB -:10F5300000000000000000000000000000000020AB -:10F54000108800038021000000000000000000007F -:10F5500000000000000000000000000000000000AB -:10F56000000000000000000000000000000000009B -:10F570000000000000000000008000090080000082 -:10F58000000000000000000000000000000000007B -:10F59000000000000000000000000000000000006B -:10F5A000000000000000000000000000000000005B -:10F5B000000000000000000000000000000000004B -:10F5C000000008C01080088000000000000000005B -:10F5D000000000000000000000000000000000002B -:10F5E000000000000000000000000000000000001B -:10F5F0000000000000000000200000200001008248 -:10F6000000000000000000000000000000000000FA -:10F6100000000000000000000000000000000000EA -:10F6200000000000000000000000000000000000DA -:10F6300000000000000000000000000000000000CA -:10F640000000084021C00982A0C0000000000000A6 -:10F6500000000000000000000000000000000000AA -:10F66000000000000000000000000000000000009A -:10F670000000000000000000000001000000880001 -:10F68000000000000000000000000000000000007A -:10F69000000000000000000000000000000000006A -:10F6A000000000000000000000000000000000005A -:10F6B000000000000000000000000000000000004A -:10F6C0000000000021880082C19191C0000000006C -:10F6D000000000000000000000000000000000002A -:10F6E000000000000000000000000000000000001A -:10F6F0000000000000000000000000000800000002 -:10F7000000000000000000000000000000000000F9 -:10F7100000000000000000000000000000000000E9 -:10F7200000000000000000000000000000000000D9 -:10F7300000000000000000000000000000000000C9 -:10F74000000000000000410520108521080800008D -:10F7500000000000000000000000000000000000A9 -:10F760000000000000000000000000000000000099 -:10F770000000000000000000000000000000000089 -:10F7800000000000800000000000000000000000F9 -:10F790000000000000000000000000000000000069 -:10F7A0000000000000000000000000000000000059 -:10F7B0000000000000000000000000000000000049 -:10F7C0000000000000000000A1001120880090034C -:10F7D0000000000000000000000000000000000029 -:10F7E0000000000000000000000000000000000019 -:10F7F0000000000000000000000000000000000009 -:10F800000000000000008800000000000000000070 -:10F8100000000000000000000000000000000000E8 -:10F8200000000000000000000000000000000000D8 -:10F8300000000000000000000000000000000000C8 -:10F8400000000000000000000000050020A005C02E -:10F8500005010000000000000000000000000000A2 -:10F860000000000000000000000000000000000098 -:10F870000000000000000000000000000000000088 -:10F8800000000000040007810000000000000000EC -:10F890000000000000000000000000000000000068 -:10F8A0000000000000000000000000000000000058 -:10F8B0000000000000000000000000000000000048 -:10F8C0000000000000000000000000000000000038 -:10F8D000000048420000000000000000000000009E -:10F8E0000000000000000000000000000000000018 -:10F8F0000000000000000000000000000000000008 -:10F90000000000003C3C0000FFFF00000000000081 -:10F9100000000000000000000000000000000000E7 -:10F9200000000000000000000000000000000000D7 -:10F9300000000000000000000000000000000000C7 -:10F9400000000000000000000000000000000009AE -:10F950000060000011220000000000000000000014 -:10F960000000000000000000000000000000000097 -:10F970000000000000000000000000000000000087 -:10F980000000000000003C3C0000000000000000FF -:10F990000000000000000000000000000000000067 -:10F9A0000000000000000000000000000000000057 -:10F9B0000000000000000000000000000000000047 -:10F9C0000000000000000000000000000000000037 -:10F9D000090060001122000000000000000000008B -:10F9E0000000000000000000000000000000000017 -:10F9F0000000000000000000000000000000000007 -:10FA0000000000000000000000000F0F00003C3C60 -:10FA100000000000000000000000000000000000E6 -:10FA200000000000000000000000000000000000D6 -:10FA300000000000000000000000000000000000C6 -:10FA400000000000000000000000000000000000B6 -:10FA500000000408102006009000000000000000D4 -:10FA60000000000000000000000000000000000096 -:10FA70000000000000000000000000000000000086 -:10FA80000000000000000000000000000F0F000058 -:10FA90003C3C0000000000000000000000000000EE -:10FAA0000000000000000000000000000000000056 -:10FAB0000000000000000000000000000000000046 -:10FAC0000000000000000000000000000000000036 -:10FAD00000000000010240800006009000000000CD -:10FAE0000000000000000000000000000000000016 -:10FAF0000000000000000000000000000000000006 -:10FB000000000000000000000000000015002A00B6 -:10FB1000054000A8000000000000000000000000F8 -:10FB200000000000000000000000000000000000D5 -:10FB300000000000000000000000000000000000C5 -:10FB400000000000000000000000000000000000B5 -:10FB500000000000000060610006000D10000000C1 -:10FB60000000000000000000000000000000000095 -:10FB70000000000000000000000000000000000085 -:10FB80000000000000000000000000000000000075 -:10FB90000000000000000000000000000000000065 -:10FBA0000000000000000000000000000000000055 -:10FBB0000000000000000000000000000000000045 -:10FBC0000000000000000000000000000000000035 -:10FBD00000000000000000000080000000000000A5 -:10FBE0000000000000000000000000000000000015 -:10FBF0000000000000000000000000000000000005 -:10FC000000000000000000000000000000000000F4 -:10FC100000000000000000000000000000000000E4 -:10FC200000000000000000000000000000000000D4 -:10FC300000000000000000000000000000000000C4 -:10FC400000000000000000000000000000000000B4 -:10FC50000000000000000000000000800000000123 -:10FC60000000000000000000000000000000000094 -:10FC70000000000000000000000000000000000084 -:10FC80000000000000000000000000000000000074 -:10FC90000000000000000000000000000000000064 -:10FCA0000000000000000000000000000000000054 -:10FCB0000000000000000000000000000000000044 -:10FCC0000000000000000000000000000000000034 -:10FCD0000000000000000000000000000000002004 -:10FCE000050000000000000000000000000000000F -:10FCF0000000000000000000000000000000000004 -:10FD000000000000000000000000000000000000F3 -:10FD100000000000000000000000000000000000E3 -:10FD200000000000000000000000000000000000D3 -:10FD300000000000000000000000000000000000C3 -:10FD400000000000000000000000000000000000B3 -:10FD500000000000000000000000000000000000A3 -:10FD6000000005000000200000000000200020002E -:10FD70000000000000002000200020000000200003 -:10FD800020000000000020000000000020004000D3 -:10FD90000000000000004080200020020000200041 -:10FDA0002000000000020001880200000000100096 -:10FDB000400000000003840020002000200000001C -:10FDC000200020000000000020000000000088004B -:10FDD000000000000000200088002000200000003B -:10FDE00020002000000000000004000000000000CF -:10FDF00040000000000000000000000000000002C1 -:10FE000000000000000200000000000000000000F0 -:10FE100000000000000000000002000000010000DF -:10FE200000000000000200010000000100000000CE -:10FE300000000000000000000000000000000000C2 -:10FE4000000000000004000000000000000040006E -:10FE500000000000000000000000000000000000A2 -:10FE60000000000000000000100000000000000082 -:10FE70000000000000000000000000000000000082 -:10FE80000000000000000000000000000000000072 -:10FE90000000000000000000000000000000000062 -:10FEA000000000030000000002000000000000004D -:10FEB0000000000000000000000000000000000042 -:10FEC00000009000000000000000000000000000A2 -:10FED0000000000000000000000000000000000022 -:10FEE0000000000000000000000000000090000082 -:10FEF0000000000000000000000000000002000000 -:10FF000000000000000000000000000000000000F1 -:10FF100000000000000000000000000000000000E1 -:10FF200000000000000000000000000000000000D1 -:10FF300000000000000000000000000000000000C1 -:10FF400000000000000000000000000000000000B1 -:10FF50000000000000000000000000004000000061 -:10FF60000000000000000000000000000000000091 -:10FF70000020000000000000000000000000000061 -:10FF80000000000000000000000000000000000071 -:10FF90000000000000000000000000000000000061 -:10FFA0000000000000000000000000000000000051 -:10FFB0000000000000000000000000000000000041 -:10FFC0000000000000000000000000000000000031 -:10FFD0000000000000000000000000000000000021 -:10FFE0000000000000000000000000000000000011 -:10FFF0000000000100000000000000000000000000 -:020000040020DA -:1000000000000000000000000000000000000000F0 -:1000100000000000000000000800000000000000D8 -:1000200000000000000000000000000000000000D0 -:1000300000000000000000000000080000000000B8 -:1000400000000000000000000000000000000000B0 -:100050000000040000000000040008000000000090 -:100060000000110003000900000000000000000073 -:1000700000200000010000000080000000000000DF -:10008000020000000000000000000000000000006E -:100090000000000000000000000000000000000060 -:1000A0000000080000000000000000000000000048 -:1000B0000000000008000000000008000000000030 -:1000C000000000008200000000008200000000002C -:1000D000000000008200840000000800840000008E -:1000E0000000000008000000200082000000000066 -:1000F00000000000000020000000000400000000DC -:1001000000000000000000000000000000000000EF -:1001100000000300000000000000000000000000DC -:1001200000000000000000000000000000000000CF -:1001300000000000000000000000000000000000BF -:1001400000000000000000000000000000000000AF -:10015000000000000000000000000000000000009F -:10016000000000000000000000000000000000008F -:10017000000000000000000420000000000000005B -:10018000000000000000000000000000000000006F -:10019000000000000000000000000000000000005F -:1001A000000000000000000000000000000000024D -:1001B000000000000000000000000000000000003F -:1001C000000000000000000000000000000000002F -:1001D000000000000000000000000000000000001F -:1001E000000000000000000000000000000000000F -:1001F00000800000000000000000800000000000FF -:1002000000000000000000000000000000000000EE -:1002100000000000000000000000000000000000DE -:1002200000000000000000000000008400000084C6 -:1002300000000000000000000000000000000000BE -:1002400000000000000000000000000000000000AE -:10025000000000000000000000000000000000009E -:10026000000000000000000000000000000000008E -:1002700000000510102005040520011000800080FA -:10028000000000000000000000000000000000006E -:10029000000000000000000000000000000000005E -:1002A000000000000000000000000000000000004E -:1002B000000000000002000000020000000000003A -:1002C000000000000000000000000000000000002E -:1002D000000000000000000000000000000000001E -:1002E000000000000000000000000000000000000E -:1002F000000000008200840040004000080100204F -:1003000003042100000000000000000000000000C5 -:1003100000000000000000000000000000000000DD -:1003200000000000000000000000000000000000CD -:1003300000000000000000000000000000000000BD -:1003400000000000000000000000000000000000AD -:10035000000000000000000000000000000000009D -:10036000000000000000000000000000000000008D -:10037000000000000000000000000000000000A0DD -:10038000400200000000000000000000000000002B -:10039000000000000000000000000000000000005D -:1003A000000000000000000000000000000000014C -:1003B000000000000000000000000000000000003D -:1003C000000000010000000100000000000000002B -:1003D000000000000000000000000000000000001D -:1003E000000000000000000000000000000000000D -:1003F00000000000000000000000000000000000FD -:10040000008080800000000000000000000000006C -:1004100000000000000000000000000000000000DC -:1004200000000000000000000000000000000000CC -:1004300000080000001100000000000000000000A3 -:10044000000000000008000000080000000000009C -:10045000000000000000000000000000000000009C -:10046000000000000000000000000000000000008C -:10047000000000000000000000000000000000007C -:100480000000200000051111000300000000000022 -:10049000000000000000000000000000000000005C -:1004A000000000000000000000000000000000004C -:1004B000000000000000110000000000000000002B -:1004C000000000000000000000000000000000002C -:1004D000000000000000000000000000000000001C -:1004E000000000000000000000000000000000000C -:1004F00000000000000000000000000000000000FC -:100500000000000001A00000010100010000000047 -:1005100000000000000000000000000000000000DB -:1005200000000000000000000000000000000000CB -:1005300000000000000000000000000000000000BB -:1005400000000000000000000000000000000000AB -:10055000000000000000000000000000000000009B -:10056000000000000000000000000000000000008B -:10057000000000000000000000000000000000007B -:100580000000000000000001000000010101000067 -:10059000000000000000000000000000000000005B -:1005A000000000000000000000000000000000004B -:1005B000000000000000000000000000000000003B -:1005C000000000000000000000000000000000002B -:1005D000000000000000000000000000000000001B -:1005E000000000000000000000000000000000000B -:1005F00000000000000000000000000000000000FB -:1006000000000000000000000020000000051108AC -:1006100000000000000000000000000000000000DA -:1006200000000000000000000000000000000000CA -:1006300000000000000000000000000000000000BA -:10064000001000000000001000000000000000008A -:10065000000000000000000000000000000000009A -:10066000000000000000000000000000000000008A -:10067000000000000000000000000000000000007A -:10068000000000000000000000000088902005002D -:10069000030800000000000000000000000000004F -:1006A000000000000000000000000000000000004A -:1006B000000000000000000000000000000000003A -:1006C0000008000000000000000000000000000022 -:1006D000000000000000000000000000000000001A -:1006E000000000000000000000000000000000000A -:1006F00000000000000000000000000000000000FA -:1007000000000000000000000000000000C0030125 -:1007100001000001000000000000000000000000D7 -:1007200000000000000000000000000000000000C9 -:1007300000000000000000000000000000000000B9 -:1007400000000001000000000000000000000000A8 -:100750000000000000000000000000000000000099 -:100760000000000000000000000000000000000089 -:100770000000000000000000000000000000000079 -:100780000000000000009000200020008800810090 -:1007900000E00700840000000000000000000000EE -:1007A0000000000000000000000000000000000049 -:1007B0000000000000000000000000000000000039 -:1007C0000000000000000000000000000000000029 -:1007D0000000000000000000000000000000000019 -:1007E0000000000000000000000000000000000009 -:1007F00000000000000000000000000000000000F9 -:1008000000000000000000000000000000000000E8 -:1008100000000000000000000000000000000000D8 -:1008200000000000000000000000000000000000C8 -:1008300000000000000000000000000000000000B8 -:1008400000000000000000000000000000000000A8 -:100850000000000000000000000000000000000098 -:100860000000000000000000000000000000000088 -:100870000000000000000000000000000000000078 -:100880000000000000000000000000000003000065 -:10089000000000FF00FF000000000000000000005A -:1008A0000000000000000000000000000000000048 -:1008B0000000000000000000000000000000000038 -:1008C0000000000000000000000000000000000028 -:1008D0000000000000000000000000000000000018 -:1008E0000000000000000000000000000000000008 -:1008F00000000000000000000000000000000000F8 -:1009000000000000000000000000000000000003E4 -:1009100000000000000000000000000000000000D7 -:1009200000000000000000000000000000000000C7 -:1009300000000000000000000000000000000000B7 -:1009400000000000000000000000000000000000A7 -:100950000000000000000000000000000000000097 -:100960000000000000000000000000000000000087 -:100970000000000000000000000000000000000077 -:100980000000000000000000000000000000000067 -:1009900000000000000000FFFFFF0000000000005A -:1009A0000000000000000000000000000000000047 -:1009B0000000000000000000000000000000000037 -:1009C0000000000000000000000000000000000027 -:1009D0000000000000000000000000000000000017 -:1009E0000000000000000000000000000000000007 -:1009F00000000000000000000000000000000000F7 -:100A000000000000000000000000000000000000E6 -:100A1000000000000000000000FFFFFF00000000D9 -:100A200000000000000000000000000000000000C6 -:100A300000000000000000000000000000000000B6 -:100A400000000000000000000000000000000000A6 -:100A50000000000000000000000000000000000096 -:100A60000000000000000000000000000000000086 -:100A70000000000000000000000000000000000076 -:100A80000000000000000000000000000000000066 -:100A9000000000000000000000000061000CC00128 -:100AA0000000000000000000000000000000000046 -:100AB0000000000000000000000000000000000036 -:100AC0000000000000000000000000610006000DB2 -:100AD000000000610006000D00000000006100063B -:100AE000000D0000000000000000000000000000F9 -:100AF00000000000000000000000000000000000F6 -:100B000000000000000000000000000000000000E5 -:100B1000000000000000000000000000777D777DED -:100B200000C3C3000000000000000000000000003F -:100B300000000000000000000000000000000000B5 -:100B400000000000000000000000000000000000A5 -:100B50000000000000000000FFFFC3C30000000011 -:100B60000000000000000000000000000000000085 -:100B70000000000000000000000000000000000075 -:100B80000000000000000000000000000000000065 -:100B900000000000000000000000000000007D7D5B -:100BA0007D7D00C3C30000000000000000000000C5 -:100BB0000000000000000000000000000000000035 -:100BC0000000000000000000000000000000000025 -:100BD00000000000000000000000FFFFC3C3000091 -:100BE0000000000000000000000000000000000005 -:100BF00000000000000000000000000000000000F5 -:100C000000000000000000000000000000000000E4 -:100C100000000000000000000000000000000000D4 -:100C2000000000008241824100000000000000003E -:100C300000000000000000000000000000000000B4 -:100C400000000000000000000000000000000000A4 -:100C5000F0F0FFFFFF55FF5500000000000000000E -:100C60000000C3FFC3FF0000000000000000000000 -:100C70000000000000000000000000000000000074 -:100C80000000000000000000000000000000000064 -:100C90000000000000000000000000000000000054 -:100CA00000000000000000C300C3000000000000BE -:100CB0000000000000000000000000000000000034 -:100CC0000000000000000000000000000000000024 -:100CD0000000F0F0FFFFFF55FF550000000000008E -:100CE00000000000C3FFC3FF000000000000000080 -:100CF00000000000000000000000000000000000F4 -:100D000000000000000000000000000000000000E3 -:100D100000000000000000000000000000000000D3 -:100D200000000000208020000000200200000000E1 -:100D300000000000000000000000000000000000B3 -:100D400000000000200020000000840000000000DF -:100D50000000000400000000000088000000000007 -:100D600000004100000300002000000040000000DF -:100D700000000000000020002000200020002000D3 -:100D80004000200020004000200000002000000063 -:100D9000000000008800880000000000040000003F -:100DA00000000000000040040002000000014000BC -:100DB000000040020000400200000000400200006D -:100DC000000240020002400000004000000040001D -:100DD00000004000000000000000000000000000D3 -:100DE00000000000400000000000000000000000C3 -:100DF00000000000400000008000800080008900AA -:100E000080001100C002C0000000000000000000CF -:100E1000000040020000000200020000000000008C -:100E2000400000004000004000000000088000007A -:100E300000000000000002100000000000000000A0 -:100E400000000000000000000000000000000000A2 -:100E50000000000000000000000000000000000092 -:100E60000000000000000000000000000000000082 -:100E70000000008000800080008000000000100062 -:100E800000000000000000000000202004002020DE -:100E9000040400000000000000100000000000003A -:100EA00000000000000000000000000000008002C0 -:100EB00000A0000000000000000000000000000092 -:100EC0000000000000000000000000000000000022 -:100ED000000000000000000000000000000800000A -:100EE0000000000000000000000000000000000002 -:100EF000000000000020000400200004000000901A -:100F000000000000000000000000000080098008D0 -:100F100080098009000000000000000000040000BB -:100F2000000800000000000000080000000000842D -:100F300000800000000000000000000000400008E9 -:100F400000000000000000000000000000000000A1 -:100F50000000000000000000000000000000000091 -:100F6000000000000000C0000000000000000008B9 -:100F70000008000000000000000000000000000861 -:100F8000000000000000000001210000000000003F -:100F90000000000000000000000800000000000841 -:100FA0000000002100000800000008000803000005 -:100FB000000500020000000000000000000000002A -:100FC0000000000000000000000000000000000021 -:100FD0000000000000000000000000000000000011 -:100FE0000000000000000000000000000000000001 -:100FF00000A0000000000008000000000000000049 -:101000000000000000880000000020000000000038 -:1010100010000000000000000000000000000000C0 -:101020000800090008000800090008000300030088 -:10103000000000000102008000000000000000002D -:10104000000000000000000000000000000002009E -:101050000000000000000800000800000000000080 -:101060000000000000000000000000000000000080 -:101070000000080000000000080000000080008060 -:10108000008082000000000000000000000000005E -:10109000A000820000040000000000000000C0006A -:1010A0001000100000000000000000000000000020 -:1010B000820000001100400000024100000000001A -:1010C000000000000000000000000000020002001C -:1010D00000000200020000000000000000080008FC -:1010E0000008000000000000000000400040004038 -:1010F0000040000000000000000000000000002090 -:1011000000040020000000000008000000000000B3 -:1011100000000000000000010000000000000000CE -:1011200000000000000000000000000000000000BF -:10113000000000000000200000000000000000008F -:10114000000000000000000000000000000000009F -:10115000000000000000000000000000000000008F -:10116000000000000000000004000000000000007B -:10117000000000000000000000000000000000006F -:101180000000000000000000040004000000000057 -:10119000002000000000000000000000A000000887 -:1011A000000000000008000000000000000800002F -:1011B0000000000000000090890000000000000016 -:1011C000000000000000000000000000000000001F -:1011D000000000000000000000000000000000000F -:1011E00000000000000000A000A0000000000000BF -:1011F000000000000000000000A000000008000047 -:1012000000000000000000000000000000000000DE -:1012100000000000000000000000000000000000CE -:101220000090000000000000000008000000000026 -:101230000890000000000000000000000000000016 -:10124000000000020000000000000000000000009C -:10125000000000000000000000000000000000008E -:10126000000000000000000000000000000000007E -:10127000000000000000000000000000000000006E -:101280000000000000000000000000000000000559 -:101290000800000000000008080000000000000036 -:1012A00000000003000000050021000000000021F4 -:1012B000000000002000000000000000000000000E -:1012C000000000000000000000000000000000001E -:1012D000000000400000000000000000000000408E -:1012E00000400200004000400340020402040204E7 -:1012F00002040000000000000000000000000000E8 -:1013000000000000000000000000050000000000D8 -:1013100000000000000000000000000000000000CD -:1013200000000000000000000000000000000000BD -:1013300000000000000000000000000000010100AB -:10134000A00190000000000000000000000000006C -:10135000000000000000000000000000000000008D -:10136000000000000000000000000000000000007D -:10137000000000000000000001000000000000006C -:10138000000000000000000000000000000000005D -:101390000000000100010000000100010000000049 -:1013A000000000000000000000000000000000003D -:1013B000000000000000000000000000000000111C -:1013C000200000108040000000000000000000002D -:1013D000000000000000000000000000000000000D -:1013E00000000000000000000000000000000000FD -:1013F00000000000000000000000100000000000DD -:1014000000000000000000000000000010000000CC -:10141000000000000808000800000010081000008C -:1014200000000000020000000000000000000000BA -:1014300000000000000000000000000000000000AC -:1014400000002000020000800000000000000000FA -:10145000000000000000000000000000000000008C -:10146000000000000000000000000000000000007C -:10147000000000000000000000000000000000006C -:1014800000000000000000000000080010800000C4 -:101490000000000000000000081100001000000023 -:1014A0001000000900000011000000000000000012 -:1014B000000000000000000000000000000000002C -:1014C0000000000401000100000200000000000014 -:1014D000000000000000000000000000000000000C -:1014E00000000000000000000000000000000000FC -:1014F00000000000000000000000000000000000EC -:10150000000000000000000000000000010010A02A -:1015100000000000000000000000010000000100C9 -:1015200000000100000000840000008400000000B2 -:1015300000000000000000000000000000000000AB -:10154000000000000002000001090001000000008E -:10155000000000000000000000000000000000008B -:10156000000000000000000000000000000000007B -:101570000000000000000000000000000001C001A9 -:101580000000000100000000000000000000010059 -:101590000000A000010000010000000100000000A8 -:1015A0000001000000000000200084000000000096 -:1015B000000000000000000000000000000000002B -:1015C000000000000000000503054021002000008D -:1015D000000000000000000000000000000000000B -:1015E00000000000000000000000000000000000FB -:1015F00000000000000000000000000000000008E3 -:101600008011000000080000000000000000000041 -:101610000800000080002100001000000008000009 -:10162000000300100000000002008000000009001C -:1016300000000000000000000000000000000000AA -:101640000000000000000000100009020500400337 -:10165000000000000000000000000000000000008A -:10166000000000000000000000000000000000007A -:10167000000000000000000000000000000000006A -:10168000000000000000000000000000000000005A -:1016900000001000004110000000000000000800E1 -:1016A00000031010000000000800001100410000BD -:1016B000000000000000000000000000000000002A -:1016C0000000000000000000000001000000000019 -:1016D0000100000000000000000000000000000009 -:1016E00000000000000000000000000000000000FA -:1016F00000000000000000000000000000000000EA -:1017000000000000000000000000000000000000D9 -:1017100000000000000000030000000000000000C6 -:1017200001000000010000000000010000000001B5 -:1017300000000000000000000000000000000000A9 -:10174000000000000000000000000000000000E0B9 -:101750000700000000000000000000000000000082 -:101760000000000000000000000000000000000079 -:101770000000000000000000000000000000000069 -:1017800000000000600002E00000410000000000D6 -:1017900000000000000000000010080042004100AE -:1017A00000E000000000810000E0000000000000F8 -:1017B00000100800420000000000000000000000CF -:1017C0000000000000000000000000000000000019 -:1017D0000000C3FFC3FF0000000000000000000085 -:1017E00000000000000000000000000000000000F9 -:1017F00000000000000000000000000000000000E9 -:1018000000000000000000000000000000000000D8 -:1018100000000000000000000000000000000000C8 -:1018200000000000000000000000000000000000B8 -:1018300000000000000000000000000000000000A8 -:101840000000000000000000000000000000000098 -:1018500000000000003C003C000000000000000010 -:101860000000000000000000000000000000000078 -:101870000000000000000000000000000000000068 -:101880000000000000000000000000000000000058 -:101890000000000000000000000000000000000048 -:1018A0000000000000000000000000000000000038 -:1018B0000000000000000000000000000000000028 -:1018C0000000000000000000000000000000000018 -:1018D0000000000000000000000000000000000008 -:1018E00000000000000000000000000000000000F8 -:1018F00000000000000000000000000000000000E8 -:1019000000000000000000000000000000000000D7 -:1019100000000000000000000000000000000000C7 -:1019200005050505000000000000000000000000A3 -:1019300000000000000000000000000000000000A7 -:101940000000000000000000000000000000000097 -:101950000000000000000000000000000000000087 -:101960000000000000000000000000000000000077 -:101970000000000000000000000000000000000067 -:101980000000000000000000000000000000000057 -:101990000000000000000000000000000000000047 -:1019A0000000050505050000000000000000000023 -:1019B0000000000000000000000000000000000027 -:1019C0000000000000000000000000000000000017 -:1019D00000000000000000610008000D00A00000F1 -:1019E00000000000000000000000000000000000F7 -:1019F00000000000000000000000000000000000E7 -:101A00000000000000000000000000000000006175 -:101A10000007800D00000000000000000000000032 -:101A200005610A0D0505000000610001800100004C -:101A3000006100018001000005610A0F050D00A092 -:101A40000000000000000000000000000000000096 -:101A50000000000000000000100000000003000370 -:101A60000000000000000000000000000000000076 -:101A70000000000000000000000000000000000066 -:101A80000000000000000000000000000000000056 -:101A9000000000003C3CF0F00000000000000000EE -:101AA00000000F0F000000000000F0F0F0F03C001C -:101AB0003C0000003C3C0C0C0C0C00000000000042 -:101AC0000000000000000000000000000000000016 -:101AD00000000000000000000000100000000003F3 -:101AE00005070000000000000000000000000000EA -:101AF00000000000000000000000000000000000E6 -:101B000000000000000000000000000000000000D5 -:101B10000000000000003C3CF0F00000000000006D -:101B2000000000000F0F0000000000000000000097 -:101B30003C003C0000003C3C0C0C0C0C0000000085 -:101B40000000000000000000000000000000000095 -:101B5000000000000000000000000000DFDF1C1C8F -:101B600000A000A000000000000000000000000035 -:101B70000000000000000000000000000000000065 -:101B80000000000000000000000000000000000055 -:101B90000000000000000000000000000000000045 -:101BA0000000000000000000000030303030303015 -:101BB0003030AAAA0000000F000F00000F0F000035 -:101BC0000000000000000000000000000000000015 -:101BD0000000000000000000000000000000CBCB6F -:101BE000080800A000A000000000000000000000A5 -:101BF00000000000000000000000000000000000E5 -:101C000000000000000000000000000000000000D4 -:101C100000000000000000000000000000000000C4 -:101C200000000000000000000000000030303030F4 -:101C300030303030AAAA0000000F000F00000F0F54 -:101C40000000000000000000000000000000000094 -:101C50000000000000000000000000000000000084 -:101C600000000000000020000004000000008800C8 -:101C700000100000000000000000000000008800CC -:101C80000000000000002000000000000000200014 -:101C900000000000000000000000000040002000E4 -:101CA0000003000000000000200000000000000011 -:101CB00020000000000000000000000000002000E4 -:101CC00040001000000000002000000000020000A2 -:101CD0002000C00000000000000000000000200004 -:101CE00004000000000200000004000100400000A9 -:101CF00000000003000000000000400000000000A1 -:101D00000000400000000000000000000000000291 -:101D10000000000200000000000041000000000080 -:101D200000000000000000000002000000000000B1 -:101D3000000200000000000240000000000000005F -:101D400000002000000000000000000000004040F3 -:101D5000000000000002000000000002400000003F -:101D60000000000000000000000000000000000073 -:101D700000000000040404042020202000000000D3 -:101D80000000000000000000000000000000000053 -:101D90000100000000000000000000000000000042 -:101DA0000000000000000000000000000000000033 -:101DB0000000000000000000000000000000000023 -:101DC0000000000000000040004000000040004013 -:101DD00000000040000000000000000000000000C3 -:101DE00000000000000000080008000000000000E3 -:101DF000000000000000800580098001800500844B -:101E00000000000000000008008400000000000046 -:101E100000000200000000080008000000000000B0 -:101E20000000000000000000008400880088008896 -:101E30000000000000000000000800040000000096 -:101E40000008000800080008000900010000000167 -:101E5000000300080001000000080002000000006C -:101E600000080008000400040000024000210000F7 -:101E7000000000000000000000080000004000001A -:101E8000000000000000000000000008000800083A -:101E900000100000000000000000004000000000F2 -:101EA0000000000000000008000000000021000009 -:101EB0000140000800000041000000400008000050 -:101EC00000000000002100000000000400210000CC -:101ED00000000008000200000000000000080000F0 -:101EE0000000000000000000840000A000000000CE -:101EF00000000000000000000000000000000000E2 -:101F000000000000000000000000000000000000D1 -:101F100000000000000000000000000000000000C1 -:101F200000000000000000000000000000000000B1 -:101F3000000020000000000000000000008400A05D -:101F40000084000000000000000000000004000009 -:101F50000000000000000000000000000000000081 -:101F60000000000000000000000000000000000071 -:101F70000000000000000000000008000000000059 -:101F800000000000000088000000000000000000C9 -:101F90000000000000000000000000000000000041 -:101FA0000000000000000000000000000000010030 -:101FB000010001000100000000000000000000809E -:101FC0000080008000000080008000800080000011 -:101FD0000000008000000000008000000080000081 -:101FE00000000000000000000000000000000000F1 -:101FF0000000000000000000400040000000000061 -:1020000000000000000000000000000000000000D0 -:1020100000000000000000000000000000000000C0 -:1020200000000000000000A0000000A00000000070 -:102030000200020002000200000000000000000098 -:1020400000400040004000000040004000400040D0 -:1020500000000000004000000000004000000040C0 -:102060000000000000000000000000000000000070 -:102070008200000082000800000004000000000050 -:102080000000000000000000000000000000000050 -:102090000000000004000400000000000000000038 -:1020A00000000200002000000000000800000011F5 -:1020B00000000000200000000000000020000040A0 -:1020C000000000002000000000008400200000004C -:1020D0000000000020080000C000000020020040B6 -:1020E00000000000000000000000000000000000F0 -:1020F00000000300030000008000000080000000DA -:1021000000000000000000000000000000000000CF -:1021100000000000000000000000000000000000BF -:102120000000000000000000000000A011200000DE -:10213000002000000008800000000000000080086F -:1021400000C1000000208000000240400220C000CA -:102150000500000000008000000800001000800062 -:102160000001000005000000000000001100000058 -:102170000000080000000000000000000000000057 -:102180000000000000000000000000000021000529 -:1021900000050005880040414041884100000000E2 -:1021A0000000000000000000000000000008000027 -:1021B0000008000000000000000000000000010016 -:1021C000012100890100002100000000010085219B -:1021D00000210003000000000000100000000000CB -:1021E00000000000000000000000000000000000EF -:1021F000000000008400000000000000000000005B -:10220000000000000000400000000000000000008E -:1022100000000000000000000000000000000000BE -:10222000000000000000000000000000000000A00E -:10223000000000000000000000000000000000009E -:102240000200020000400200000000000000020046 -:10225000200000000000000000000000000000005E -:10226000000000000000000000000000000000006E -:10227000000000000000000000000000000000005E -:102280000000900200019091000000000100000099 -:10229000000000000000000000000000000000003E -:1022A000088800040008900408A00002000402044A -:1022B0000000000000000000000041C0000000011C -:1022C000000041C000000001000041C00100000109 -:1022D000000041C000000001000041C000000001FA -:1022E000000041C0000002000000000000000000EB -:1022F00000000000000000000000000000000000DE -:1023000000000000808300038091000000000800AE -:1023100000000000000000000000000000000000BD -:10232000000000000080000000808000000000002D -:102330000000000000000000000000009180000983 -:10234000080900009191000208080000918010091E -:102350000809000089A0000208090000918000001F -:102360000809001191910000851000000000000094 -:10237000000000000000000000000000000000005D -:1023800000000000000080000000800000080080C5 -:1023900000090080000000000000000000000000B4 -:1023A00000000000000000C00080008000000090DD -:1023B0008000808000000000000000000000090094 -:1023C0000921001180000900002102118800090084 -:1023D0000921001180002000210002118000090065 -:1023E00000210011910309800021101180000000DC -:1023F000000000000000000000000000000040009D -:102400000000000000000000020000009000000139 -:1024100000080000000800000000000000000000AC -:10242000000000000000880090C09002A0C00200E0 -:10243000C0C1081010C00000000000000000000033 -:10244000010000000001C000010000000001C10007 -:10245000010000000001C000002000000001C000D9 -:10246000010000000001C00001C000000001C00028 -:10247000000000000000000000000000000000005C -:1024800000000000000000004002000090900200E8 -:102490000100020002000000000000000000000037 -:1024A000000000000000000005820082C00808C093 -:1024B00011040004C01002C0000000000000000071 -:1024C000000000000000010102C000000000000147 -:1024D00003C100000100000003C100000000000073 -:1024E00003C100000001000003C000000000000064 -:1024F00003C1000000000000000000000000000018 -:102500000000000000000000000080804100838087 -:102510008000080000000000020000000000000031 -:1025200000000000000000000000C100000080006A -:102530000000C100000080008000000000000000DA -:102540000000000000000009050390900000000258 -:102550000008918300001009000091830020000210 -:102560000000918300050009031191800000031011 -:102570000000918300000000000000000000000047 -:102580000000000000000000000000000000000348 -:1025900000800000800000410000000000000000FA -:1025A00000000000000000000000000080400080EB -:1025B000800080000000000000000000000000001B -:1025C00000000000000000080909088010108009C0 -:1025D00002090880090090020909008009008000B2 -:1025E00002090080090080880000118009008080B5 -:1025F0001009008009000000000000000000000039 -:10260000000000000000000000400000000000008A -:1026100000000002000008000001080000000000A7 -:1026200000000000000000000000000000000201A7 -:10263000A02004C01000A000A0C0A0C09000000016 -:102640000000000000000000000000010108000080 -:10265000C000000101840100C1900001008401005C -:10266000C000000100849100C0040000008401004B -:10267000C0C0000100840100000000000000000054 -:10268000000000000000000000000000000000004A -:10269000008200E007000000000000100800410078 -:1026A000000000000000000000000000000000002A -:1026B0000000000000004842000000000000484206 -:1026C00000000000000000000000810000E00000A9 -:1026D0000000810000E000000000810000E0000038 -:1026E0000000410000E000000000810000E0000068 -:1026F0000000410000E00000600000000000000059 -:1027000000000000000000000000000000000000C9 -:1027100000000000000000C300C30F0FFFFF000017 -:1027200000000000000000000000000000000000A9 -:102730000000201004082841000022001100204061 -:10274000108000000000000000000000FFFFFFFFFD -:1027500066660000FFFF000066660000FFFF0000E5 -:10276000666600003C3C000066660000FFFF00005B -:1027700066660000FFFF00006666000000000000C3 -:102780000000000000000000000000000000000049 -:102790000000000000000000C300C3000F0FFFFF97 -:1027A0000000000000000000000000000000000029 -:1027B00000000000408002010000284100220011BA -:1027C00004020801000000000000000000000000FA -:1027D0000000666600000000000066660000000061 -:1027E0000000666600003C3C0000666600000000D9 -:1027F0000000666600000000000066660000000041 -:1028000000000000000000000000000000000000C8 -:1028100000000000000000000000000000000000B8 -:1028200000000000000000000000000000000000A8 -:102830000000000000000000000000000000000098 -:102840000000000000000000000000000000000088 -:102850000000000000000000000000000000000078 -:102860000000000000000000000000000000000068 -:102870000000000000000000000000000000000058 -:102880000000000000000000000000000000000048 -:10289000000000007E7E7E7E5A005A00FFFF0F0F70 -:1028A0000000000000000000000000000000000028 -:1028B00000000000000000000000884400820014B6 -:1028C0000000821410200804000000000000000036 -:1028D0000000000066660000FFFF00006666000062 -:1028E000FFFF000066660000FFFF00006666000054 -:1028F000FFFF000066660000FFFF00006666FFFF46 -:1029000000000000000000000000000000000000C7 -:102910000000000000007E7E7E7E66006600F0F013 -:1029200000000000000000000000000000000000A7 -:102930000000000000000000000088440000820049 -:10294000140082140000804001020000000000001A -:1029500000000000000066660000000000006666DF -:1029600000000000000066660000000000006666CF -:1029700000000000000066660000000000006666BF -:10298000FFFFFFFF0000000000000000000000004B -:102990000000000000000000000000000061003A9C -:1029A000000D000005610A0F050D00A000000000E9 -:1029B00000000000000000000000000060000000B7 -:1029C00000001000000000000000080000000000EF -:1029D000000000000000406380018021920240E37B -:1029E00080018021920240E380018021920240E335 -:1029F00080018021920240E380018021920240E325 -:102A00008001802182020000000000000000000020 -:102A100000000000000000000000000000000000B6 -:102A200000000000000000000000000000000000A6 -:102A30000000000000000000000000000000000096 -:102A40000000000000000000000000000000000086 -:102A500000000000000000000300030000F0000080 -:102A6000300030000000F00000003C0000000000DA -:102A7000280028000000C0C00000000000C000C006 -:102A80002800280000005050000000000000000056 -:102A90000000000000000000000000000000000036 -:102AA0000000000000000000000000000000000026 -:102AB0000000000000000000000000000000000016 -:102AC0000000000000000000000000000000000006 -:102AD000000000000000000000000300030000F000 -:102AE0000000300030000000F00000003C0000005A -:102AF000F0F0280028000000C0C00C0C0C0C00C036 -:102B000000C0280028000000505000000000000015 -:102B100000000000000000000000000000000000B5 -:102B2000000000040004000000000000000000009D -:102B30000000000000000000000000000000000095 -:102B40000000000000000000000000000000000085 -:102B50000000000000000000000000000000000075 -:102B600010101010F0000000003C00000A000A00E5 -:102B70000000000000000F0000C000C000000000C6 -:102B8000000000000A0A0000000000000000000031 -:102B90000000000000000000000000000000000035 -:102BA0000000000000000000000000000000000025 -:102BB0000000000000000000000000000000000015 -:102BC0000000000000000000000000000000000005 -:102BD00000000000000000000000000000000F00E6 -:102BE0000F0010101010F0000000003C00000A0060 -:102BF0000A003030303000000F0000C000C00C0C64 -:102C00000C0C00003C3C0A0A0000003C003C0000A8 -:102C100000000000000000000000000000000000B4 -:102C200000000000201020002000200020000000F4 -:102C3000000000000000000000000000000000058F -:102C400000000000200020002000200020001000D4 -:102C5000000000000100000000000000000400036C -:102C60004000000000002000400020002000200064 -:102C7000400000000000000088000000000000008C -:102C800020000000000020000000200020002000A4 -:102C90000000010000800000200000000000000093 -:102CA000400000020000100100000000400200008F -:102CB000400200004000000040000000400200020E -:102CC00000000000000000000000000000001000F4 -:102CD00000000000000008000000000040000000AC -:102CE0000000000000000000000000004000400262 -:102CF0004000200200000000000000001000000062 -:102D00001000100200000000000040000000400021 -:102D10000000200204020020000000000002400029 -:102D200000000000000000000000000000000000A3 -:102D30000000000000000000000000000000000093 -:102D40000000000000000000000000000000000083 -:102D500000000000000090000000000000000000E3 -:102D60000000000000000000000000000000000063 -:102D70000000000008000000080000000000000043 -:102D800000000210000082000000000000000000AF -:102D90000000000000000000000000000000000033 -:102DA0000200000000000000000000000000000021 -:102DB0000000000000000000000000000000000013 -:102DC00000000000000000000000000000C0000043 -:102DD0000000000000000084008800820000000065 -:102DE00000000000000000000000000000000000E3 -:102DF00000000000000000000000000000000000D3 -:102E000000040000000000000008000000000000B6 -:102E100000000000000000000000000000000000B2 -:102E2000000000000000000000000000040000009E -:102E30000000000000000021002100000000000050 -:102E40000000000000000021002100000000000040 -:102E50000000000000000141000500000002000029 -:102E6000000000000000000000000008000000005A -:102E70000000002100000000000000002000000011 -:102E800000000040020000000004004100000000BB -:102E90000000000000000000000000000000010031 -:102EA00000000000000000000000000000008000A2 -:102EB0000000000000000000000000000000000012 -:102EC0000000000000000000000000000000000002 -:102ED00000000000000000000400000000000000EE -:102EE00000000002000200000000000000000000DE -:102EF000000000000000000000044000000004008A -:102F000000000000000000040000000000000000BD -:102F100000000800000000000000000000A0000009 -:102F2000040010001000000000000000000020005D -:102F30000000000000000000000000000000000091 -:102F40000000000000000000000008210021000037 -:102F50000000000000000000000000000000000071 -:102F60000000000040000000000000000000000021 -:102F70000000000008000000004000000000000009 -:102F80000000001000000000000000000000000031 -:102F90000000000000000000000000000000001021 -:102FA00000100000000000400000000000000000D1 -:102FB0000000000000000000000000000000000011 -:102FC0000000000000000000000000008000000081 -:102FD00000000000000000000000000000000000F1 -:102FE0000000000000008000000000000000000061 -:102FF000000000000000000000A000010000000030 -:1030000000000000000000000000000000000000C0 -:1030100000000000000000000000000000000000B0 -:1030200000000000000000000000000000000000A0 -:103030000000000000000000000000000000000090 -:10304000001100200000000000000000000000004F -:103050000000000000000000000000000000000070 -:103060000000100000000000000000000000000050 -:103070000000040004004000000000000000000008 -:1030800000000000000000000009001100410000E5 -:103090000000000000000000000000000000000030 -:1030A00000800000000000000000000000000000A0 -:1030B0000000000000000000000800000082000086 -:1030C00000000008000900200000000000000000CF -:1030D000009000000000000009002004090000002A -:1030E00003000000000000000000000800001100C4 -:1030F000000000000000000011840000000000003B -:103100000004400000000000000000000000000477 -:10311000000000000000000021000000000000028C -:10312000000000200000000000000000000000007F -:10313000000000000000000000000000000000008F -:103140000005000000800100008800000000000071 -:10315000000000000000000000000000000000006F -:103160000000000000000000000000000008000057 -:1031700000000000000000000000000000008200CD -:103180000000000200000000000900000000000034 -:103190000000900500000000000000410000000059 -:1031A000000000000000000000000000000000001F -:1031B000000000000000000000000000000000000F -:1031C00000000000000000200402112000000000A8 -:1031D00000000000000000000000000000000000EF -:1031E00000000000000000000000000000000000DF -:1031F00000000000000000000000000000000000CF -:1032000000000000000000000000000000000000BE -:1032100000000000000000000000000000000000AE -:10322000000000000000000000000000000000009E -:10323000000000000000000000000000000000008E -:1032400000000000000010100090008290080000B4 -:10325000000000000000010000000100000000006C -:10326000000000000000000000000000000000005E -:10327000000000000000000000000000000000004E -:10328000A002008200A088C01002000400881090F4 -:10329000000000000000000000000000000000002E -:1032A0000000000000000000000000900088000006 -:1032B000000000000000000000000000000000000E -:1032C00000000000000000008080008000008000FE -:1032D000000000000000000011080008410000028A -:1032E00000000000000000000000000000000000DE -:1032F00000000000000000000000000000000000CE -:10330000000000800000000000000000000000003D -:10331000800000000000000000000000000000002D -:10332000000000000000000000000000000000009D -:10333000000000000000000000000000000000008D -:10334000800000000000000000000000800000007D -:1033500000800000000000000000000000210000CC -:10336000000000000000000000000000000000005D -:10337000000000000000000000110000000000003C -:1033800000000000000000A0000000800000008895 -:1033900080008080000000000000000000000000AD -:1033A000000000000000000000000000000000001D -:1033B000000000000000000000000000900002007B -:1033C0000000080000000000000000000000820073 -:1033D0004000089000000000000000000000000015 -:1033E00000000000000000000000000000000000DD -:1033F0000800000000000000000000910000000034 -:10340000000000000000900004C0889088C0900078 -:1034100010C0100808C000000000000000000000FC -:103420000000000000000000000000000000080094 -:10343000000000000000000000000000000000008C -:103440000000000000000000000000000000C000BC -:1034500000909082A0A00000000000000000010089 -:10346000000000000000000000000000000000005C -:10347000000000000000000000000000000000004C -:10348000000000000000000003080002C00490A03B -:1034900021880088C0101088000000000000000093 -:1034A000000000000000000000000000000000001C -:1034B00000900000008800000000000000000000F4 -:1034C00000000000000000000000000000000000FC -:1034D000800000000000000000000000000000006C -:1034E000210000004100000000000000000000007A -:1034F00000000000000000000000000000000000CC -:1035000000000000000000000000C10000808000FA -:10351000000041000000800080000000000000006A -:10352000000000000000000000000000000000009B -:10353000000000000000000000000000000000008B -:103540000000000000020000000000000000000079 -:10355000000000000000000000000000000000006B -:103560000000800280020000000000000000000057 -:103570000000000400890000000003104002000069 -:10358000000000000000000000000000000000003B -:10359000008000000000800000000000000000002B -:1035A000000000000000000000000000000000001B -:1035B0000000000000000008000000000000000003 -:1035C000000000000000009000000000000000006B -:1035D000000000000000008200A0000000000000C9 -:1035E000000000009000200000000000000000002B -:1035F0000000000090000020008810000000010082 -:103600000000000000000000000000000000820038 -:103610002004820882000400040204200400000048 -:10362000000000000000000000000000000000009A -:103630000000000000000000000088880800000072 -:1036400000000000000000820000070000000000F1 -:1036500000000000000000210000070088000000BA -:10366000000000000000008200E007000081000070 -:103670000000000000000082000007000000008140 -:103680000000070000000000000000000000000033 -:103690000000000000004842000000000000484216 -:1036A000000000000000000000000000000000001A -:1036B0000000000000000000008200000700000081 -:1036C00000000000000000000000000000000000FA -:1036D000000000000000000000000000AA0A5A0AD2 -:1036E0000000000000000000FF00FFFF00000000DD -:1036F00000000000000000000000C3C30000000044 -:1037000000000000000000000000000000000000B9 -:1037100000002400002400090060401080200009FF -:103720000060000000000000000000000000000039 -:10373000000000000000000000000C0C0C0C3C001D -:103740003C0000000000000000000000000000003D -:103750000000000000000000000000000000AA0AB5 -:10376000AA0A0000000000000000000000FF0000A6 -:10377000000000000000000000000000C3C30000C3 -:103780000000000000000000000000000000000039 -:1037900000000000810000810900600001040208AF -:1037A00009006000000000000000000000000000B0 -:1037B0000000000000000000000000000C0C0C0CD9 -:1037C0003C003C0000000000000000000000000081 -:1037D000FFFF5C5C0000000000000000E310F3004D -:1037E000A0F00F0F0000000000000000000000002B -:1037F00000000000000000000000000000000000C9 -:10380000FFAAFFAA00000000000000000000000066 -:103810000000000000002400002444008800440050 -:103820008800060000060000000000000000000004 -:103830000000000000000000000000000000F00098 -:10384000F000000000000000000000000000000088 -:103850000000FFFF5C5C0000000000000000F300BF -:10386000F3000F0F0F0F0000000000000000000029 -:103870000000000000000000000000000000000048 -:10388000000055005500000000000000000000008E -:10389000000000000000000081000081004400885A -:1038A000004400889000009000000000000000002C -:1038B0000000000000000000000000000000000008 -:1038C000F000F0003C3C3C3C000000000000000028 -:1038D00000000028000001000000000000000000BF -:1038E00000000030000000000000000000000000A8 -:1038F0000571002B000D000000000000000000001A -:1039000000000028000000000061002E000D01A052 -:103910000000000000000000000060000000000047 -:10392000100000000000000008000000000000007F -:103930000000000000000000000000000000000087 -:10394000000000000028000000000000000000004F -:103950000000000000000000000000000000000067 -:103960000000000000000000000000000000000057 -:103970000000000000000000000000000000000047 -:1039800000000000000000000000FFFFFF0000003A -:103990000000000000000000000000000000000027 -:1039A0000000000000000000000000000000000017 -:1039B0000000000000000000000000000000000007 -:1039C00000000000000000000000000000000000F7 -:1039D00000000000000000000000000000000000E7 -:1039E00000000000000000000000000000000000D7 -:1039F00000000000000000000000000000000000C7 -:103A000000000000000000000000000000FF0000B7 -:103A100000000000000000000000000000000000A6 -:103A20000000000000000000000000000000000096 -:103A30000000000000000000000000000000000086 -:103A40000000000000000000000000000000000076 -:103A50000000000000000000000000000000000066 -:103A60000000000000000000000000000000000056 -:103A7000000000000000FF3CFF3C000000000000D0 -:103A80000000000000000000000000000000000036 -:103A90000000000000000000000000000000000026 -:103AA0000000000000000000000000000000000016 -:103AB0000000000000000000000000000000000006 -:103AC00000000000000000000000000000000000F6 -:103AD00000000000000000000000000000000000E6 -:103AE00000000000000000000000000000000000D6 -:103AF0000000000000000000FFFF3C3C0000000050 -:103B000000000000000000000000000000000000B5 -:103B100000000000000000000000000000000000A5 -:103B20000000000000000000000000000000000095 -:103B30000000000000000000000000000000000085 -:103B40000000000000000000000000000000000075 -:103B50000000000000000000000000080008000055 -:103B6000000400000000000040000083000400008A -:103B700000040000000000004000400800000004B5 -:103B80000004000000000000000000000000000031 -:103B90000000400040000000200000032008000852 -:103BA0000000000000000000000000000000000015 -:103BB00000000005210021000400208020020004F4 -:103BC00000000005000000000000000000000000F0 -:103BD0000000000020002000000020000000000085 -:103BE0000000000040000000000000004020000134 -:103BF00000000002000000000002000000000000C1 -:103C00000000000000000000400000000000000074 -:103C100000000000000000000004000000000000A0 -:103C20000000404000000000000000001000000004 -:103C300000004100000004000400C000002000005B -:103C4000000000C000004100000000000000000073 -:103C500000000000000000000020000200900800AA -:103C6000080008000800000000000000000000003C -:103C700000000000008000000000000000000000C4 -:103C80000000000000000000000000000000000034 -:103C9000000000000000000000000000020500001D -:103CA0000000000000000000000000000000000014 -:103CB0000000000000000200000000000000000002 -:103CC00000000000000000000000000000000000F4 -:103CD00000000000000000000000000000000000E4 -:103CE00000020000000000000000000000000000D2 -:103CF0000082008400840004000000000000000036 -:103D00000002000400840000000000000000000029 -:103D1000000000000000000000000000040000009F -:103D2000000000040000000400000000400000004B -:103D30000000000000000000000000000000000083 -:103D40000000000400020004000000000002000067 -:103D5000000040000000000000000000000400001F -:103D60004000000000000000000000000000000013 -:103D70000000000000000000400000000000000003 -:103D80000000000000200008000010000000880073 -:103D900090009000000000110000000000000000F2 -:103DA00000000000002020C12000000000000000F2 -:103DB00084000021000000008400040000000400D2 -:103DC000A00000050000400082000040000000004C -:103DD00000000000000000000000000500000000DE -:103DE00000000000000000000000000000000000D3 -:103DF00000000000000000000000000000000000C3 -:103E000000000000000000000000000000000000B2 -:103E10000000000000A00000000000000000000002 -:103E2000000000A000000003412041080000020043 -:103E30000000000002000000000000000040001030 -:103E40000002001000000000000000000000000060 -:103E500000000000000000000000009000000000D2 -:103E60000000000000000000000000000000000052 -:103E700000000000000000800000000000000000C2 -:103E80000000000000000000000000000000000032 -:103E90000000000000000000000000000000000022 -:103EA00000000000002100000000000000000000F1 -:103EB000000000000000000000000000840000007E -:103EC00000000000000000000000000000000000F2 -:103ED00000000000000000000000000000000000E2 -:103EE00000000000000000000000000000000000D2 -:103EF00000000000000000000002000000000000C0 -:103F000000000000000000000000000000000000B1 -:103F10000000000000000000000000A00000000001 -:103F20000000000000000000000000000000000091 -:103F30000000000000000000000000000000000081 -:103F400000000000000000000084000000000000ED -:103F50000000000000000000000000000000000061 -:103F60000000000000000000000000000000000051 -:103F70000000000000000000000000000000000041 -:103F80000000000000000000000000000000000031 -:103F90000000000000000000000000000000000021 -:103FA0000080000000001000100000000000000071 -:103FB0000020008000000000000000200000000041 -:103FC00000000000000000000000000000000000F1 -:103FD00000000000000000000000000000000000E1 -:103FE0000000000000000000000000000000400091 -:103FF000000811000000000000000000090020007F -:104000000000000000000000000000004000000070 -:1040100000A00000000010000000080004000000E4 -:104020000090002000000000050000820000000059 -:1040300000000001002000884000409011040010A2 -:1040400000100240111000000208000000000000F3 -:10405000000000000000000000000000000011004F -:104060000000009005840000000000000000000037 -:10407000000000000000000000000000000001003F -:104080000000000000000000000000000000000030 -:104090000000000000000000000000000000000020 -:1040A0000000000000000000000000000000000010 -:1040B00000000000000000000000000800000021D7 -:1040C000000000008400000000000000000000006C -:1040D00000000000000000210000000000000000BF -:1040E00000000000000000000000000000000008C8 -:1040F00000000000000000000000000000000000C0 -:1041000004000000000000000000000000000000AB -:10411000000000000000000000000000000000009F -:10412000000000000000000000000000000000008F -:10413000000000000000000000000000000000007F -:10414000000000000000000000000000000000006F -:10415000000000000000000005000000000000005A -:10416000000000000000000000000000000000004F -:104170000008000000000000000000000000000037 -:104180000000C10101A020C1C0000000000000002B -:10419000000000000000000000000000000000001F -:1041A000000000000000000000000000000000000F -:1041B00000000000080000080000000800000000E7 -:1041C000000000000000000000000000088800005F -:1041D00000000008000000000000000000000000D7 -:1041E00000000000000000000000000000000000CF -:1041F00000000000000000000000000000000000BF -:10420000000000004010102100208000000000008D -:10421000000000000000000000000000000000009E -:10422000000000000000000000000000000000008E -:10423000000000000000000000800000008000007E -:10424000000000000000000000000000000000006E -:1042500000000000008000000000000000000000DE -:10426000000000000000000000000000000000004E -:10427000000000000000000000000000000000003E -:10428000000000000000100000000000000000001E -:10429000000000000000000000000000000000001E -:1042A000000000000000000000000000000000000E -:1042B00000000000000000000000800000008000FE -:1042C00000000000000000000000000000000000EE -:1042D000000000000000800000000000000000005E -:1042E00000000000000000000000000000000000CE -:1042F00000000000000000000000000000000000BE -:104300000000000000000000018800000000000024 -:10431000000000000000000000000000000000009D -:104320000000000000000000000000000000008805 -:10433000000000000000000000000000100000006D -:104340000800000000000000000000000000000065 -:1043500000000000900000000800000000000000C5 -:10436000000000000000000000000000000000004D -:10437000000000000000000000000000000000003D -:1043800000000000000000000000009101A1019168 -:1043900000C100000000000000000000000000005C -:1043A000000000000000000000000000000000000D -:1043B00000000000000000000000000000000000FD -:1043C00000000008000000000000000000000000E5 -:1043D00000000000000000000000000800000000D5 -:1043E00000000000000000000000000000000000CD -:1043F00000000000000000000000000000000000BD -:1044000000000000000000000000000000112191E9 -:1044100011A10011000000000000000000000000D9 -:10442000000000000000000000000000000000008C -:10443000000000000000000000000000000000007C -:1044400000000000008000000000000000000000EC -:1044500000000000000000000000000000800000DC -:10446000000000000000000000000000000000004C -:10447000000000000000000000000000000000003C -:10448000000000000000000000000000000091108B -:104490000011A10003400000000000000000000027 -:1044A000000000000000000000000000000000000C -:1044B00000020000000000000000000000000000FA -:1044C0000010000400008000000000000000000058 -:1044D000000000000000000000000010000080004C -:1044E00000000000000000000000000000000000CC -:1044F00000000000000000000000000000000000BC -:1045000000000000000000000000000000000000AB -:10451000A1000001A10091010000000000000000C6 -:10452000000000000000000000000000000000008B -:10453000000000000000000000000000000000007B -:1045400000000000900000000800000000000000D3 -:104550000000000000000000000000000000080053 -:104560000800000000000000000000000000000043 -:10457000000000000000000000000000000000003B -:10458000000000000000000000000000000000002B -:104590000000818100E00700000A00000000000028 -:1045A000000000000000000000000000000000000B -:1045B00000000000000007000000000000000000F4 -:1045C0000000000000810000070000000000000063 -:1045D0000000000000000000000000000082000059 -:1045E00007000000000000000000000000000000C4 -:1045F00000000000000000000000000000000000BB -:1046000000000000000000000000000000000000AA -:104610000000000003030C0CC300DF2000000000BA -:10462000000000000000000000000000000000008A -:10463000000000000000000000000000000000007A -:10464000000000000000C300C30000006666000018 -:104650000000000000000000000000000000C0C0DA -:10466000C0C00000666600000000000000000000FE -:10467000000000000000000000000000000000003A -:10468000000000000000000000000000000000002A -:1046900000000000000003030C0CC300FF0000003A -:1046A000000000000000000000000000000000000A -:1046B00000000000000000000000000000000000FA -:1046C0000000000000000000C300C3000000666698 -:1046D00000000000000000000000000000000000DA -:1046E000C0C0C0C0000066660000000000000000FE -:1046F00000000000000000000000000000000000BA -:1047000000000000000000000000000000000000A9 -:104710000000000000000000000000000000000099 -:104720000000000000000000000000000000000089 -:104730000000000000000000000000000000000079 -:104740000000000000000000000000000000000069 -:104750000000000000000000000000000000000059 -:104760000000000000000000000000000000000049 -:104770000000000000000000000000000000000039 -:104780000000000000000000000000000000000029 -:1047900000000000000000000000000F000F0000FB -:1047A0000000000000000000000000000000000009 -:1047B00000000000000000000000000000000000F9 -:1047C00000000000000000000000000000C300C363 -:1047D0000F0F0000000000000000000000000000BB -:1047E000000000000000C3C30F0F00000000000025 -:1047F00000000000000000000000000000000000B9 -:1048000000000000000000000000000000000000A8 -:10481000000000000000000000000000000F000F7A -:104820000000000000000000000000000000000088 -:104830000000000000000000000000000000000078 -:10484000000000000000000000000000000000C3A5 -:1048500000C30F0F00000000000000000000000077 -:104860000000000000000000C3C30F0F00000000A4 -:104870000000000000000000000000000000000038 -:104880000000000000000000000000000000000028 -:1048900000000000000000000000000000000061B7 -:1048A0000034C0090000000000000000000000000B -:1048B00000000000000000000000000000000000F8 -:1048C0000008000000A00000000000000000000040 -:1048D00000000028000000000000000000000000B0 -:1048E00000000000000000000000002800000000A0 -:1048F00000000000000000000000000000000000B8 -:1049000000000000000000000000000000000000A7 -:104910000000000000000000000000000000000097 -:104920006060303000000000000000000000000067 -:104930000000000000000000000000000000000077 -:104940000000000000000000000000000000000067 -:104950000000000000000000000000000000000057 -:104960000000000000000000000000000000000047 -:104970000000000000000000000000000000000037 -:104980000000000000000000000000000000000027 -:104990000000000000000000000000000000000017 -:1049A00000006060303000AACFAA000000000000C4 -:1049B00000000000000000000000000000000000F7 -:1049C00000000000000000000000000000000000E7 -:1049D00000000000000000000000000000000000D7 -:1049E00000000000000000000000000000000000C7 -:1049F00000000000000000000000000000000000B7 -:104A000000000000000000000000000000000000A6 -:104A10000000000000000000000000000000000096 -:104A200000000000050000002828282800000000E1 -:104A30000000000000000000000000000000000076 -:104A40000000000000000000000000000000000066 -:104A50000000000000000000000000000000000056 -:104A60000000000000000000000000000000000046 -:104A70000000000000000000000000000000000036 -:104A80000000000000000000000000000000000026 -:104A90000000000000000000000000000000000016 -:104AA0000000000000000000000028282828000066 -:104AB00000000000000000000000000000000000F6 -:104AC00000000000000000000000000000000000E6 -:104AD00000000000000000000000000000000000D6 -:104AE00000000000000000000000000000000000C6 -:104AF00000000000000000000000000000000000B6 -:104B000000000000000000000000000000000000A5 -:104B100000000000000000001000C00000000000C5 -:104B2000C0002000000000000000000000000000A5 -:104B30000000000000000000100020000100000044 -:104B4000200020008800000000000000000000009D -:104B50000000000000000000000300002000000032 -:104B60000000000020000000000400002000000001 -:104B70002000110010000100400000002000000093 -:104B800000000000200500000000000020000000E0 -:104B90000000200020002000200020000002400033 -:104BA0000000400000004002000000020000000081 -:104BB000000200000040000200200000000004008D -:104BC00000000000000040000000400000C00000A5 -:104BD00000004000400040004000000020000000B5 -:104BE0000000000000000000000000000002800241 -:104BF00000008000A00080C0200200000000000033 -:104C0000000000004000400240000002400200009E -:104C10000000000000000000800080000000000094 -:104C20000200000000000000000002000000000080 -:104C30000000000000000000000000000000000074 -:104C40000000000000000000000000000000A000C4 -:104C500000000000000000000000A00000000000B4 -:104C600020000004200400000000000000100000EC -:104C70000000000200000000000001000100000030 -:104C800000000000004000000000000000000000E4 -:104C90000000000000000000000000000000000014 -:104CA0000000000000000000000000000000000004 -:104CB00000000000000000000000000000000000F4 -:104CC00000000000000000000000000000000000E4 -:104CD00000000000000000000000000000000000D4 -:104CE00000008000000180010000000000000000C2 -:104CF000000000000001000800000000100010008B -:104D000000000000000000000000000000000000A3 -:104D10000000000000000008000400000000000087 -:104D20000000000000000000000000000000000083 -:104D3000000000000000080000000000000000006B -:104D400040004000000000000000000004000000DF -:104D50000000000040000000000000000000000013 -:104D600000000000000500054000000440040004AD -:104D700000204000900090000000000000000000B3 -:104D80009100000088000003000000000000000007 -:104D900000004000000002000000040001020000CA -:104DA00000000000000000000000000000000800FB -:104DB00000000000000000000000000200000000F1 -:104DC0000000000000000000000000000000800063 -:104DD00000000000000003000000000000000000D0 -:104DE000000000000000000020000000000300910F -:104DF0000901000180000000000000000000000028 -:104E0000000020004100000200000000000000003F -:104E1000000004000000000000000000000020006E -:104E20000000000000000000000000000000000082 -:104E30000000000000000000000000000000000072 -:104E40000800000000000000080000000000000052 -:104E50000000000002000200020002000200020046 -:104E6000020002000000020400000105000000042E -:104E7000000408040004000000000000000400001A -:104E80000000000000000000000000000000000022 -:104E9000000000000000000000000000840020006E -:104EA00000000000080000000000000000000000FA -:104EB00000000000000000000000000000000000F2 -:104EC000000000000000000400008000000000005E -:104ED000000000000000800080008000800880004A -:104EE00080008000800000008301030002000300B6 -:104EF00000010001000100010084008200000000A8 -:104F0000000000840000000000400000004000009D -:104F10000000000000000000000000040004000089 -:104F20008990000000000000000000000000000068 -:104F30000000000000000000000000000000000071 -:104F40000000000000000000000000000000000061 -:104F5000008001000000008000110000000000003F -:104F600000000000000000210000820020008200FC -:104F70008205080000000000000000000000002082 -:104F8000C0000040200000040000000000000000FD -:104F900000000000002100000000000000000000F0 -:104FA0000000000000000000000000000000000001 -:104FB000004000C0000000000000080000000000E9 -:104FC00008000000000000002100000000000000B8 -:104FD0000000002004000000002000000000050088 -:104FE0000088000000000000000000000000A00099 -:104FF00000000000000000040400000400000000A5 -:105000000000000240008004008900000000000051 -:105010000000000000200000000000000000000070 -:10502000050000000000000000000000000000007B -:105030000000000000000000000000000000000070 -:1050400000009000000000000000000000000000D0 -:105050000000000000000000000000000000000050 -:105060000000000000000000000000000000000040 -:10507000828000800080001000A02020000400003A -:105080000000000000000008000000000000000018 -:1050900000400009000000000000000000000000C7 -:1050A0000000000000000000000000000000000000 -:1050B00000000000000000000000000000000000F0 -:1050C00000000000000000000000000000000000E0 -:1050D00000000000000000000000000000000000D0 -:1050E00000000000000800000000000000000000B8 -:1050F00000000040030400400301032103010301F9 -:10510000030000000040000000000000000000005C -:10511000000000000000000000000000000000008F -:105120000000000000000800000000040000000073 -:10513000000000000000000000000000000000006F -:10514000000000000000000000000000000000005F -:105150000000000000008800000000000088000837 -:1051600000C000020000000000C0000200000000BB -:10517000000041C0000000010000A0A10000890261 -:10518000000000000000000000000100000000001E -:10519000000000000000000000000000000000000F -:1051A00000000000000000000000000100000001FD -:1051B00000000000000000000000000000000000EF -:1051C00000000000000000000000000000000000DF -:1051D00000000000000000000000000000000000CF -:1051E00000000080000000000000008000000000BF -:1051F000000000009189000010090000C0A100001B -:1052000090C0000000000000020500101100210005 -:105210000009000000000000000000000000000085 -:10522000000000000000000000000000004000003E -:105230001008000000000000000000000000000056 -:10524000000000000000000000000000000000005E -:10525000000000000000000000000000000000004E -:1052600000000000000080000000800000008002BC -:105270000000800000000900002100118000A180D2 -:10528000000341800000110000000000000000A0A9 -:10529000000000030000000000000000000000000B -:1052A00000000000000000000000000000000000FE -:1052B00000000000200000000000000000000000CE -:1052C00000000000000000000000000000000000DE -:1052D00000000000000000000000000000000000CE -:1052E000000000000000000010000000C0000000EE -:1052F00010000000C0000000000000000001C0001D -:10530000A1A00000008400080000000000000000D0 -:10531000001000000000000000000000000000007D -:10532000000000000000000000000000000000007D -:10533000000000000000000000000000000000006D -:10534000000000000000000000000000000000005D -:105350000000000000000000008400000088001031 -:10536000008800000088000000000000000200C06B -:1053700000000000000200C000000000000100006A -:1053800003C00000000000020000000000009001C7 -:105390000000000088000000010000000000000084 -:1053A00000000000000000000000000000000000FD -:1053B00000000000000100000000000000000000EC -:1053C00000000000000000000000000000000000DD -:1053D00000000000000000000000000000000000CD -:1053E00000000000000000000000000000000000BD -:1053F000008000000000000000800000000900099B -:1054000000009180000000400080000000000000CB -:105410000021000400000000000003000000000064 -:10542000000000000000000000000000000000007C -:10543000000000000000001000000010000000004C -:10544000000000000000000000000000000000005C -:105450000000000000000000000000000000000448 -:1054600000000000000800840000000000000000B0 -:105470000000000080000000000000000000890023 -:105480000000008009100010009040000000210082 -:1054900000000000041000000040000000030000B5 -:1054A00000000000000000000000000000000000FC -:1054B00000000000000010080000000010100000B4 -:1054C00000000000000000000000000000000000DC -:1054D00000000000000000000000000000000000CC -:1054E0000001000000000000001088888800000013 -:1054F000000000001000C0000000000000000000DC -:10550000C000000000840100880088059000880029 -:105510000100000000000001000000000000000089 -:10552000000000000000000000000000000000007B -:10553000000000000000000000000000000000006B -:10554000000000000000000000000000000000005B -:10555000000000000000000000000000000000004B -:1055600000000000070000000081000007000000AC -:10557000000000000000000000000000000000002B -:105580000000410000E000000000818100E0070011 -:105590000000840000E000000000000002E00000C5 -:1055A00000000000000000000000000000000000FB -:1055B00000000000000000000000810000E000008A -:1055C00000000000000000000000000000000000DB -:1055D00000000000000000000000000000000000CB -:1055E0000000000000003CFFFFFF0C0C0C0C3C0016 -:1055F0003C003C3C3C3C000000FF0000FFFF000082 -:1056000000FF00000000FFFF0000AAAA0000FF4DFD -:1056100000AA00AA00000000000000000000000036 -:10562000000000000000000000000000000000007A -:10563000000000000000000000000000000000006A -:10564000000000000000000000000000000000005A -:10565000000000000000000000000000000000004A -:10566000000000000000000000C3FFFF0C0C0C0C49 -:105670003C003C003C3C3C3C000000FF00000000C3 -:10568000000000FF0000000000000000AAAA0000C7 -:10569000FFB200AA00AA0000000000000000000005 -:1056A00000000000000000000000000000000000FA -:1056B00000000000000000000000000000000000EA -:1056C00000000000000000000000000000000000DA -:1056D00000000000000000000000000000000000CA -:1056E000000000000000000000000000000030305A -:1056F000303000000000FF0000000F0F0000FF002E -:1057000000000F0F00000000555500000000FFFFD3 -:105710000F0F00001414141400000000000000001B -:105720000000000000000000000000000000000079 -:105730000000000000000000000000000000000069 -:105740000000000000000000000000000000000059 -:105750000000000000000000000000000000000049 -:105760000000000000000000000000000000000039 -:105770003030303055555555FF0000000F0F0000F8 -:10578000FF0000000F0F0000000055550000FFFF54 -:10579000FFFF0F0F0000141414140000000000009D -:1057A00000000000000000000000000000000000F9 -:1057B00000000000000000000000000000000000E9 -:1057C00000000000000000000000000000000000D9 -:1057D00000000000000000000000000000000000C9 -:1057E00000000000000000000000000000080000B1 -:1057F000000000000028000000004002800000209F -:1058000092024082800000209202000040E380016A -:105810008021820280610029800100000061000572 -:105820008009000000040006000E200000000000B7 -:105830000000000000000000000000000000000068 -:105840000000000000610001800100000000000075 -:105850000000000000000000000000000000000048 -:105860000000000000000000000000000000000038 -:105870000000000000000000000000000000000028 -:1058800000000000000000000000000000003C3CA0 -:1058900000003030303005050505A0A0A0A0C3C32E -:1058A000000000FF000000005555FFFF0000000051 -:1058B00000000000000000000000000000000000E8 -:1058C000000000000000C3C30000F0F00000000072 -:1058D00000000000000000000000000000000000C8 -:1058E00000000000000000000000000000000000B8 -:1058F00000000000000000000000000000000000A8 -:105900000000000000000000000000000000000097 -:105910003C3C00003030303005050505A0A0A0A0BB -:10592000C3C3000000FF0000000055550000000048 -:105930000000000000000000000000000000000067 -:105940000000000000000000C3C30000F0F00000F1 -:105950000000000000000000000000000000000047 -:105960000000000000000000000000000000000037 -:105970000000000000000000000000000000000027 -:105980000000000000000000000000000000000017 -:1059900000000F0F0000282828280F0F0000003CEF -:1059A000003C0C0C0C0C8282828200000F0FAAAA11 -:1059B00000000000000000000000000000000000E7 -:1059C0000000000000000000000000000F0F0000B9 -:1059D000555500000000000000000000000000001D -:1059E00000000000000000000000000000000000B7 -:1059F00000000000000000000000000000000000A7 -:105A00000000000000000000000000000000000096 -:105A1000000000000F0F0000282828280F0F0000AA -:105A2000003C003C0C0C0C0C8282828200000F0FA8 -:105A3000AAAA000000000000000000000000000012 -:105A400000000000000000000000000000000F0F38 -:105A5000000055551000000000000000000000008C -:105A60000000000020000000000090044000200022 -:105A70002000200000000080008000048800040056 -:105A8000010001004000000200020102200000802D -:105A900020001080000388000000000000002000AB -:105AA000000004048800200400800004002020007E -:105AB00004002005000088000020002000202008AD -:105AC00000002000080020040082000400042000E0 -:105AD0002000200000004000000200000000000044 -:105AE0000000000010001002000000000000C000D4 -:105AF00040004000000000000004000400004000DE -:105B0000C000040204008002000040A00800000061 -:105B10002020000000400000000000000002000003 -:105B2000000000004002000000020002000000012E -:105B3000000200000000000220000001000100013E -:105B4000008200020000A000000300040001000524 -:105B50000000400000000000000000000000000005 -:105B6000000000000000000002000200020002002D -:105B70000000000000000000000000000000000025 -:105B80000000000000000000000000000000000015 -:105B90000100000000000000000000000000000004 -:105BA0000000000000000000000040004000000075 -:105BB00000000000000000000000000000000000E5 -:105BC00000000000000000000000000000000000D5 -:105BD00000000000000000000000000000000000C5 -:105BE00000000000000000000000000000000000B5 -:105BF000000800000000000000000000000000009D -:105C00000000000000000000000000000000000094 -:105C10000004080000000000210000000000000057 -:105C200000000000000000000000000080848000F0 -:105C30000000000000000000000000000000000064 -:105C400000000000008200000000000000000000D2 -:105C5000000000000008000800080000000002002A -:105C60000000000000000000000000000000000034 -:105C70000000020000000000000000000803000017 -:105C800000000000000000000021000000000000F3 -:105C90000000000000000005000300000000880074 -:105CA00000000000000000000880840000200402C2 -:105CB000002100000000400000400002040000211C -:105CC0004021002000000000000000400040004192 -:105CD0000002000000000041000000000000410040 -:105CE00000000000000000000000000000000000B4 -:105CF000000000000000000000000000000000881C -:105D0000000000000000000000000500001000007E -:105D100000000000000000000000000000A00000E3 -:105D2000000000000000000000400010000000859E -:105D3000900200000400000000000000000200A02B -:105D4000000000000000000000000002400004000D -:105D500000000000000010000000000041000000F2 -:105D60000000000000000000000000000000000033 -:105D70000100000000000000080000000000010019 -:105D800000000000000020000000000000000000F3 -:105D900008080003000001000000000000000800E7 -:105DA00000000000000000000000000000000011E2 -:105DB00000004100000000000000000000000000A2 -:105DC000000000000021000000000021004100410F -:105DD0000000000000009000000000000000000033 -:105DE00000000000000000000000000000000000B3 -:105DF000000004000000000000000000000000009F -:105E0000200000000000008480000000000000006E -:105E10000000000000000000200000000000000062 -:105E200000000000000000000000090000080084DD -:105E300000000000C0A000C00000090000C0000079 -:105E400000C0000000A000A0000000000000000052 -:105E50000000000000000000000000000000000042 -:105E60000900000000000000000000000000000029 -:105E7000000000000000000000000400000000001E -:105E800000000000000000000020000020000200D0 -:105E90000000004100000000000008000002200097 -:105EA00000000000000000000021000004000000CD -:105EB0000100008000000000008000A0000300003E -:105EC000000000400040010004000000000000004D -:105ED000000040000000000000000000040000007E -:105EE00000000000000000000000000000000000B2 -:105EF00000000000000000000000000000000000A2 -:105F00000000000000000004000000000004808881 -:105F1000802000000010049000000000000000003D -:105F200000000000000000000000000000028000EF -:105F3000000808024110000000002020002000009E -:105F4000000000000090088804000000000000002D -:105F50000000000000000000000000000000000041 -:105F600004000000000000880000000000000000A5 -:105F70000000000000000000000000000000000021 -:105F80000000000000000000000000000000000011 -:105F9000000500000021000088080000000000004B -:105FA000000000000003000000008821902188000C -:105FB0000400008000000000000000030021002118 -:105FC00000090008000800080000000000000000B0 -:105FD00000000000000000000000000000000000C1 -:105FE00000000000000000000000000000000000B1 -:105FF00000000000000000000000000000000000A1 -:10600000000000C0000000000000000000000000D0 -:1060100000000084000000000000000000000000FC -:106020000000000000000000000000000000000070 -:1060300000008000001000000000000000000000D0 -:106040000000000000000000000000000000000050 -:106050000000000000000000000000000000000040 -:106060000000000000000000000000000000000030 -:106070000000000000000000000000000000000020 -:106080000000000000000000000000000000000010 -:106090000000000000080090000000000000000167 -:1060A0000001000001A000000000008400000000CA -:1060B0000000000000009000A00900898201000299 -:1060C00000000020000000000000000000000002AE -:1060D0000000000000880000000000000000000038 -:1060E00000000000000000000000000000000000B0 -:1060F00000000000000000000000000000000000A0 -:106100000000000000000004000002030000000086 -:1061100000000900000000890008020000000000E3 -:1061200000080908000011800000030000000000C2 -:106130000000000000000000000991A000A08010F5 -:10614000001100090009000000000000000000002C -:10615000000000000000000000000000000000003F -:106160000004000010000008000000000000000013 -:10617000000000000000000000000000000000001F -:10618000000000000000000000000000000000000F -:1061900009000000080000008000000000008000EE -:1061A0008000000000000000000500210000000049 -:1061B0000000000000000000000020808000890036 -:1061C000A0210000002000000000000000000000EE -:1061D000000000000000000000008000000000003F -:1061E0008000000004000000080000000000000023 -:1061F000000000000000000000000000000000009F -:10620000000000000000000000000000000000008E -:106210000000000000000100000008000000000075 -:10622000C0000200000000000000000000000000AC -:106230000000000000000000000000888904040045 -:10624000A0000501000002000000000000000000A6 -:10625000000000009000020000000000020010009A -:106260000000908800000000000001000000000015 -:10627000000000000000000000000000000000001E -:1062800000000000000000001000000000000000FE -:1062900001000000000000000000000100080020D4 -:1062A00020000000000000000000000000000000CE -:1062B00000000000000000000000000000000409D1 -:1062C0000140050300090002010000100000000069 -:1062D000000000000000000200000000009000002C -:1062E00000000000000000000001000000000000AD -:1062F000000000000000000000000000000000009E -:10630000000000000000020000000000000000008B -:1063100000000800110000090000000000080080D3 -:106320000000000000000000110000000800000054 -:10633000000000000000000000000000000000005D -:10634000000202829021008200000800000000008C -:10635000000000000000000000000000000000003D -:106360000000000000000000000400080000000021 -:10637000000000000000000000000000000000001D -:1063800000000000000000000000004100000000CC -:1063900000000000000000000908000010000000DC -:1063A000002100020080000000000080008000004A -:1063B0000009000900008000000000020002000047 -:1063C00000002100842102000810091000020300CF -:1063D00008000000000000000000000800020000AB -:1063E0000000000000100000000004000800000091 -:1063F000000000000000000000000000000000009D -:10640000000000000000000000000000000000008C -:10641000000000000000000000000001000001007A -:106420000000000100080040000000000010000211 -:1064300000009000000000000200000000000000CA -:10644000000000000100081103200001020000000C -:1064500001880100000000000000000002000000B0 -:106460000000080000000000000000000000000024 -:10647000000000000000000000000000000000001C -:10648000000000000000000000000000000000000C -:1064900007000000000000E000000000810000E0B4 -:1064A00000000000002100E007010000000000E003 -:1064B00000000000810000E00700000000000081F3 -:1064C00000000704000000820000070000000081B7 -:1064D0000000070000000000000000000000008134 -:1064E000000007000000000000000700000060003E -:1064F00000E00000000000000000000000000000BC -:10650000000000000000000000000000000000008B -:10651000000000000000000000000000000000007B -:1065200000000000000000000000C0C0C0C000006B -:10653000000000000000FFFF3C3C000000000000E5 -:106540000000000000000000F000F0002200110038 -:106550000000FFFFC300C3000000000000000000B7 -:1065600000003C3CC3C3000000000000000000002D -:10657000000000000000000000000000000000001B -:10658000000000000000000000000000000000000B -:1065900000000000000000000000000000000000FB -:1065A000000000000000000000000000C0C0C0C0EB -:1065B0000000000000000000C3C300000000000055 -:1065C00000000000000000000000F000F0000000EB -:1065D000000000000000C300C30000000000000035 -:1065E000000000003C3CC3C30000000000000000AD -:1065F000000000000000000000000000000000009B -:10660000000000000000000000000000000000008A -:10661000000000000000000000000000000000007A -:10662000000000000000000000000000000000006A -:10663000000000000000000000000000000000005A -:10664000000000000000000000000000000000004A -:10665000000000000000000000000000000000003A -:10666000000000000000000000000000000000002A -:10667000000000000000000000000000000000001A -:10668000000000000000000000000000000000000A -:1066900000000000000000000000000000000000FA -:1066A00000000000000000000000000000FF0000EB -:1066B000FFFF424200000000BDBDBDBD3C3CFFFFEE -:1066C00000000000000000000000000000000F0FAC -:1066D0000F0F060406000F0F0000F0F0F0F00000AE -:1066E0000000000000003C3C000030303030000072 -:1066F00000000C0CFCFC000000000000000000008A -:106700000000000000000000000000000000000089 -:106710000000000000000000000000000000000079 -:10672000000000000000000000000000000000FF6A -:1067300000000000424200000000242424243C3CCD -:10674000FFFF00000000000000000000000000004B -:106750000FFF0FFF060606020F0F000000000000EB -:1067600000000000000000003C3C000030303030F1 -:10677000000000000C0CFCFC000000000000000009 -:106780000000000000000000000000000000000009 -:1067900000000000000000000500000800000000EC -:1067A00000610007000D000000610005800100008D -:1067B0000061002B000D000800610007000D0000C3 -:1067C0000065400F800D0000000000000028000060 -:1067D00000A08061002E000D00000061002E000D61 -:1067E0000000000000000000000000000028000081 -:1067F000000000000008000000A00061000180010E -:106800000000000000000000000000000000000088 -:106810000000000000000000000000000000000078 -:106820000000000000000000000000000F0F00004A -:10683000C3C30000000000000000000000000000D2 -:106840000000000000000000000000000000000048 -:106850000000000006900000000C00300C0C0F0F30 -:106860000000000000000000000000000000000028 -:106870000000000000000000000000000000FF0019 -:10688000C0C0C0C000000000000000000000000008 -:1068900000000000000000000000000000000000F8 -:1068A00000000000000000000000000000000F0FCA -:1068B0000000C3C300000000000000000000000052 -:1068C00000000000000000000000000000000000C8 -:1068D00000000000000000000000000300C00C0CDD -:1068E0000F0F00000000000000000000000000008A -:1068F0000000000000000000000000000000000098 -:10690000FF00C0C0C0C00000000000000000000088 -:106910000000000000000000000000000000000077 -:106920000000000000000F0FFFFF0000000000004B -:10693000000000C300C3FFFFFF00000000005F0A6B -:106940005F0A0000000000000000000000000000DE -:106950000000000000000000440088006900006999 -:106960000A00AFAF000000000000000000000000BF -:106970000000000000000000000000000000000017 -:1069800000003C3C00000F0F000000000000000071 -:1069900000000000000000000000000000000000F7 -:1069A00000000000000000000F0F000000000000C9 -:1069B0000000000000C300C3FFFFFF000000000054 -:1069C0005F0A5F0A000000000000000000000000F5 -:1069D0000000000000000000000000440088690082 -:1069E00000690A00AFAF00000000000000000000D6 -:1069F0000000000000000000000000000000000097 -:106A0000000000003C3C00000F0F000000000000F0 -:106A10000000200200000000000020000000200014 -:106A200000000000000000000004840000002000BE -:106A30004000200000000000000021000100208034 -:106A400010800000400000000000880000002000CE -:106A500020000003208000800000000020000000D3 -:106A60002000000000002000400000002100010084 -:106A700000802084080000000000000020080000C2 -:106A800020000400880020002000100010000000FA -:106A9000880020000000000200020000000000004A -:106AA00040400000000200000000008200000000E2 -:106AB00040408090400000000000000004000400FE -:106AC0004020402000000000000000000000000006 -:106AD0000000000000000020002000000000000076 -:106AE000000000022000000200020000000004403C -:106AF0000400402000204090000000000000000042 -:106B00000000000000000090009000000000400025 -:106B10001040100000020000000000000000000013 -:106B20000000000000000000000000000000000065 -:106B30000000000000000000000000000000000055 -:106B40000000000000000000000000400000000005 -:106B5000000000000800000000000000001000001D -:106B600020002000200020000000000000000000A5 -:106B70000000000000000200000000000000000013 -:106B80000000000000000000A00000000000000065 -:106B90000000000000000800000000000084000069 -:106BA00000000000000000000000000000000000E5 -:106BB000000000000088000000000000000000004D -:106BC00000000000000000000000000000100000B5 -:106BD00000000000000000000000000000000000B5 -:106BE000000080008000800080C0000000000000E5 -:106BF0000000000000000000000000000000000095 -:106C00000000000000000000000000840000000000 -:106C10000000000000000000000000000000000074 -:106C2000000000000000000000000000000000085C -:106C3000000000000000000000000400040000004C -:106C400000000000C00000008800000000004000BC -:106C50000000000000210000000000000000000013 -:106C600001000400000004210400040004000000EE -:106C7000000000090400004190000000000000082E -:106C800000000000000000000000000040080000BC -:106C90000010000000009000000000000000000054 -:106CA00000000000000000000000000000000000E4 -:106CB0000000000000000000004000000000410053 -:106CC00004000000000000000000000000000000C0 -:106CD000000000000000000000000000000000C0F4 -:106CE0000000040091000000020002828000000009 -:106CF00000A00000000000020000002000000000D2 -:106D0000000000400000000000000000000000A0A3 -:106D1000008400000000000020A00000000000002F -:106D20000000000000000000000000000000000063 -:106D3000000000000000080000000000000000004B -:106D400000000000000082000000000000030000BE -:106D50000000000000100000000000000000000023 -:106D60000000000000000000000400040004008295 -:106D70000020000000800020000000000000000053 -:106D800008000000000000000000000004000000F7 -:106D900000000000000000000800000000000000EB -:106DA00000000000000000000000000000000000E3 -:106DB0000000000000000000000000900000000043 -:106DC00000000000000000000000000000000000C3 -:106DD0000000000000000000000000A00000000013 -:106DE0000000100000000000000000000000000093 -:106DF0000020000900000020000100000000000049 -:106E0000000000A0000000A0000000000000000042 -:106E1000000000A0000800000010000000000000BA -:106E20000000000000000000000000000000000062 -:106E3000000000000000000000000000040040000E -:106E4000000000000000040000000000040000003A -:106E50000000000000000010000000000000000022 -:106E60000000000000000000000000000000000022 -:106E70000000000000080003000000000002040001 -:106E80000000000000000000000000000000000002 -:106E900000000000000000000000000000000000F2 -:106EA00000000000000000000000000000000000E2 -:106EB00000000000000000000000000000000000D2 -:106EC00000000084000400204004000004000020B2 -:106ED000000000000400000000880084080000009A -:106EE00000000000000000C000000000048400005A -:106EF00020002082020000840000000411900002A3 -:106F00000000080000000020000004000400000051 -:106F10000000000000880000000000040090000451 -:106F20000000000000000000000000000000000061 -:106F30000000000000000000000000000000000051 -:106F4000000000000000000000000000000200003F -:106F50000000000000000000000000000000000031 -:106F6000000000000002000000000000000000001F -:106F70000041880500000010004000830040001020 -:106F800000020005000000000000004000000000BA -:106F900000000000000000000000000000000000F1 -:106FA00000000021020000000000000000000000BE -:106FB00000000000000000000000000000000000D1 -:106FC00000000000000000000000000000000000C1 -:106FD00000000000000000080000000000000000A9 -:106FE0000000000000000000000020000000200061 -:106FF00000000000009000000005000000200000DC -:107000000000000000000000400000000000000040 -:107010000000000000000000000000000000000070 -:107020000000000000000000000000000000000060 -:107030000000000000000000000000000000000050 -:107040000000000000000000000000000000000040 -:107050000000000000C00008000000000000000068 -:107060000000000000000000000000000008001008 -:10707000000000000000C00001000000000000004F -:1070800000000000000400000000000000000000FC -:1070900000000000000000000000000000000000F0 -:1070A00000000000000000000000000000000000E0 -:1070B00000000000000000000000000000000000D0 -:1070C00000000000000000000400000000000000BC -:1070D00000000000000000000000000000000000B0 -:1070E0000000000000000000000000000000008020 -:1070F000000000000000000000000300000000008D -:10710000000000000000000000000000000000007F -:10711000000000000000000000000000000000006F -:10712000000000000000000000000000000000005F -:10713000000000000000000000000000000000004F -:10714000000000000000000000000000000000003F -:10715000000000000000000000000000000000002F -:10716000000000000000000000000000000000001F -:1071700080000000000000000009000080090000FD -:107180000000008000110000000000080000000066 -:1071900000000000000000000000000000000000EF -:1071A00000000000000000000000000000000000DF -:1071B00000000000000000000000000000000000CF -:1071C00000000000000000000000000000000000BF -:1071D00000000000000000000000000000000000AF -:1071E000000000000000000000000000000000009F -:1071F0000000080000000000000002000400100071 -:1072000000000000000800000084000004010000ED -:10721000000000000000000000000000000000006E -:10722000000000000000000000000000000000005E -:10723000000000000000000000000000000000004E -:10724000000000000000000000000000000100003D -:1072500000010000000000000000008800C00000E5 -:10726000000000000000000000000000000000001E -:1072700000000000000800000008000000000400FA -:1072800000000000000000000400000000040000F6 -:1072900000080200000000000000000000000000E4 -:1072A00000000000000000000000000000000000DE -:1072B00000000000000000000000000000000000CE -:1072C000000000000000000000000000000000407E -:1072D0000008031100000000000000000000000092 -:1072E000000000000000000000000000000000009E -:1072F000000000000000008000000000000000000E -:107300000000000009000400000000000000000070 -:1073100000000000800000000000000000000000ED -:10732000000000000000000000000000000000005D -:10733000000000000000000000000000000000004D -:10734000000000000000000000000000000000003D -:10735000000000000000000000000000000000002D -:10736000000200008000000000000000000000009B -:107370000000000000000000800000040000000089 -:1073800000000002000000000000000500000000F6 -:1073900000100004000000000000000000000000D9 -:1073A00000000000000000000000000000000000DD -:1073B00000000000000000000000000000000000CD -:1073C00000000000000000000000000000000000BD -:1073D00000000000000000000000000000000000AD -:1073E0000000C0C000080200000000000000000013 -:1073F0000000000000000000000008000000001075 -:10740000880000000000008800000000000000006C -:107410000000040000080000000000000000000060 -:10742000000000000000000000000000000000005C -:10743000000000000000000000000000000000004C -:10744000000000000000000000000000000000003C -:107450000000000000E0000000000000000000004C -:10746000000000060000070000000000000000000F -:1074700000000000000000000000000000420000CA -:1074800007000000480000E00700000000110000B5 -:10749000070000000081000007000000000000005D -:1074A00000000000000000000000000000000000DC -:1074B00000000000000000000000000000000000CC -:1074C00000000000000000000000000000000000BC -:1074D00000000000000000000000000000000000AC -:1074E000000000003C003C000C0C0C0C00000000F4 -:1074F00000000000000000000000000000003C3C14 -:10750000000000C300C300000000000000000000F5 -:10751000000000000000FFFF000000C300C30000E7 -:10752000000000000000000000000000000000005B -:10753000000000000000000000000000000000004B -:10754000000000000000000000000000000000003B -:10755000000000000000000000000000000000002B -:107560000000000000003C003C000C0C0C0C000073 -:10757000000000000000000000000000000000000B -:107580003C3C000000C300C30000000000000000FD -:1075900000000000000000000000000000C300C365 -:1075A00000000000000000000000000000000000DB -:1075B00000000000000000000000000000000000CB -:1075C00000000000000000000000000000000000BB -:1075D00000000000000000000000000000000000AB -:1075E0000000000000000000000F000FAAAAAAAAD5 -:1075F000000000000000000000000000000000008B -:1076000000000000FF00C3C3C3C300000000FF3F31 -:10761000FF3F0000000000000000000055555050E2 -:1076200050500000000000000000000000000000BA -:10763000000000000000000000000000000000004A -:10764000000000000000000000000000000000003A -:10765000000000000000000000000000000000002A -:1076600000000000000000000000000F000F0000FC -:10767000000000000000000000000000000000000A -:10768000000000000000FF000000000000000000FB -:107690000F3F0F3F000000000000000000005555A4 -:1076A000505050500000000000000000000000009A -:1076B00000000000000000000000000000000000CA -:1076C00000000000000000000000000000000000BA -:1076D0000000000000000000000000000061000742 -:1076E000000D000000000000000000000000002865 -:1076F000000000000000000000000000000000008A -:1077000000000000000000000028000000000061F0 -:10771000000F800D000005000A28050000A00000F1 -:107720000028000000000000000000000000000031 -:107730000000000000000000000000000000000049 -:107740000000000000000000000000000000000039 -:107750000000000000000000000000000000000029 -:10776000000000F00FFF000000000000000000001B -:107770000000000000000000000000000000000009 -:1077800000000000000000000000000000000000F9 -:1077900000000000000000000000000000000000E9 -:1077A00000000000000000000000000000000000D9 -:1077B00000000000000000000000000000000000C9 -:1077C00000000000000000000000000000000000B9 -:1077D00000000000000000000000000000000000A9 -:1077E0000000000000F00FFF00000000000000009B -:1077F0000000000000000000000000000000000089 -:107800000000000000000000000000000000000078 -:107810000000000000000000000000000000000068 -:107820000000000000000000000000000000000058 -:107830000000000000000000000000000000000048 -:107840000000000000000000000000000000000038 -:107850000000000000000000000000000000000028 -:107860000000000000000000000000000000000018 -:107870000000000000000000000000000000000008 -:1078800000000000000000000000000000000000F8 -:1078900000000000000000000000000000000000E8 -:1078A00000000000000000000000000000000000D8 -:1078B00000000000000000000000000000000000C8 -:1078C00000000000000000000000000000000000B8 -:1078D00000000000000000000000000000000000A8 -:1078E0000000000000000000000000000000000098 -:1078F0000000000000000000000000000000000088 -:107900000000000000000000000000000000000077 -:107910000000000000000000000000000000000067 -:107920000000000000000000000000000000000057 -:107930000000000000000000000000000000000047 -:107940000000000000000000000000000000000037 -:1079500000000004000020000000000000002002E1 -:1079600000002000200000000000200000001000A7 -:107970008800000400042000000000000000040053 -:107980000000200020040000000020000000000390 -:10799000880020000000000420000000008000009B -:1079A0000000000020002000000200002002000073 -:1079B0002002200000040000200000200020002001 -:1079C0000000000020002000040004000404000463 -:1079D00000040000000000004000400040000000E3 -:1079E0000000000000000002400040000002000013 -:1079F00000040004400000000000000000000090AF -:107A000080000000000000000000000040000000B6 -:107A10000000200000000000000000000000001036 -:107A200000020000000000020000009000000000C2 -:107A300000000004000200001000000040030001EC -:107A40000001400000000000000080009000C040E5 -:107A5000000002000200020002000000000000001E -:107A60000000000000000000000000000000000016 -:107A700000000400040000200020000000000000BE -:107A800000000000000000000000000000000000F6 -:107A900002000000000000000000000004000000E0 -:107AA00000000000008000000080020404000400C8 -:107AB0000020002000000000000040002000200006 -:107AC0008804000400000000100000000000000016 -:107AD0000000000000080000000800080000000886 -:107AE0000000000000000000000000000000000294 -:107AF000000800008008800000090009000000085C -:107B00000000000000000000000000000000000075 -:107B10000008000000000008000000080008000045 -:107B20000008008400000004000000040009800038 -:107B3000800000090001000800080008800880009B -:107B40008008000100010084000000000084110092 -:107B500000000008000000000021000000000000FC -:107B600000000000000000000041000000000000D4 -:107B700000000000000000000400000000000400FD -:107B80000400C00000000021000000000000100000 -:107B900000000000000000000021000800000011AB -:107BA0000004200000000000880800000000000021 -:107BB0000400000000050000000440000000000078 -:107BC000900000419008004100000008400890002B -:107BD00000410041000000410000000000000000E2 -:107BE0000000000000000000000000000000000095 -:107BF0000000000000000082000000000000000003 -:107C00000000000000000000000000000000000074 -:107C10000000000000000000000000000000000064 -:107C20000000002000000020000000400040000094 -:107C30000000000000000000000000040000000040 -:107C40000000000000000000000000000000000034 -:107C50000000000000000400000000000000000020 -:107C6000000000000000000000000000080000000C -:107C70000000000000000000000000000000000004 -:107C800000000011000000000000080000000000DB -:107C90000000000000000000C00000000000000024 -:107CA0000000C0000000000000000000080000808C -:107CB0000000820000000000A000000000000000A2 -:107CC0000000010000210000000000000000000092 -:107CD0000000000000001000080004002100000067 -:107CE0000000210000000000000000000000000073 -:107CF0000000000000000000000000000000000084 -:107D00000000000000000000000000000000000073 -:107D10000000000005A000000000000000000000BE -:107D200011880000118840000000000000200000C1 -:107D3000000400000000000000000000000000003F -:107D4000000000000400000000000000000000002F -:107D500000000000000000A0000000008000000003 -:107D600000000000080000000000C000000000004B -:107D70000000000000000000000000000000000003 -:107D80000000000584000000000000000000040066 -:107D9000000000000000A000000000000000000043 -:107DA00000000000000000000000000000000000D3 -:107DB00000000000000000000000000000000000C3 -:107DC0000000000000000000004100000000000072 -:107DD0004000000000000000000000000000000063 -:107DE0000000000000000000000000000000000093 -:107DF0000000000000000000000000000000000083 -:107E00000000000000000000000000204000000012 -:107E10000000000000000020000000000000000042 -:107E2000000000900000000000C000000000000002 -:107E300000020020000000000040000000040004D8 -:107E40001100000000000000000000900000000091 -:107E5000000000000000000000000000008800009A -:107E60000900000000000000000000000000000009 -:107E70000000000000000000000000000000000002 -:107E800000000000000000000000000000050008E5 -:107E900000050800002100000008000000000000AC -:107EA00000000000000000000000000000000000D2 -:107EB0008800000000000000A00000000041002138 -:107EC000004100210000002100210000000000000E -:107ED00000000000000000000000000000000000A2 -:107EE000000000000000000000000000030000008F -:107EF0000000000000004100000000000000000041 -:107F00000000000000000000000000000900000068 -:107F10000000000080080000000800A00000000031 -:107F20000000000000000000000000000000090048 -:107F3000000020C0000000000000009000000000D1 -:107F40000000000000000000000000000000000031 -:107F50000000000000000000000000000000000021 -:107F60000000000000000000000000000000000011 -:107F70000000000000000000000000000000000001 -:107F800000000000000000000000000000000000F1 -:107F900000000000000000000000000000000000E1 -:107FA00000000000000000000000000000000000D1 -:107FB00000000000000000000000000000000000C1 -:107FC00000000000000000000000000000000000B1 -:107FD000000200000010000000000000000000008F -:107FE00090040008000000000000000000000000F5 -:107FF0000000000000000000000000000000000081 -:108000000000000000000000000000000000000070 -:108010000000000000000000000000000000000060 -:108020000000000000000000000000000000000050 -:10803000000000000000000000000000000005003B -:108040000000000000000000000000000000000030 -:1080500000000000000040000000000000000000E0 -:108060000000000000000000000000000000000010 -:108070000000000000000000000000000000000000 -:108080000000000000000000000000000080000070 -:10809000008000000000000000000000000400005C -:1080A00000000000000000000000000000000000D0 -:1080B00000000000000000000000000000090000B7 -:1080C0000009000000000080000000000000000027 -:1080D0000000000000040000000400000000000098 -:1080E0000000000000000000000000000000000090 -:1080F0000000000000000000000000000000000080 -:108100000000000000000000000000000000000867 -:108110000000000800000000000000000000000156 -:10812000000000000000000000000000000000004F -:10813000000000000000000000000000000000003F -:108140000000000000000000000800000010000017 -:1081500000000000004000010200000100000000DB -:10816000000000000000000004000000000000000B -:1081700000000000000000000000000000000000FF -:1081800000000000000000000000000000000000EF -:1081900000001000000000000000000000000000CF -:1081A00000000000000000000000000000000000CF -:1081B0000000000000000000000400000008004073 -:1081C00000000800000000000000000002000000A5 -:1081D0000000000000010000000284000010000008 -:1081E000000000000000000000040000000000008B -:1081F000000000000000000000000000000000007F -:10820000000000000000000000000000000000006E -:10821000020000000000000000000000000000005C -:10822000000000000000000000000000000000004E -:10823000000000000000000000000000000000003E -:108240000000000080000000090010000000000095 -:1082500000000040001100080000000000000000C5 -:10826000020000000000000000000000000000000C -:1082700000000000000000000000000000000000FE -:1082800000000000000000000000000000000000EE -:10829000000000000041000000000000000000009D -:1082A00000000000000400000000000000000000CA -:1082B00000000000000000000000000000000000BE -:1082C000000000000002000000000000000000416B -:1082D0000000000000080004000000000008000288 -:1082E000008000000000000000000000000000040A -:1082F00000800000000000000000000000000000FE -:10830000000000000000000000000000000000006D -:10831000000000000000000100000000000000005C -:108320000000000084002000200000000000000089 -:10833000000000000000000000000000000000003D -:10834000000000000000000000000000000000002D -:10835000000100000000000000010000000000001B -:1083600000000040000000000000000000000400C9 -:108370000000000288000000000000000000000073 -:1083800000000000000000000000000000000000ED -:108390000000000000000000000008004200000093 -:1083A00000000000000000000000070000000000C6 -:1083B00000000000000000000000000000000000BD -:1083C0000000000000000000810000E0000000004C -:1083D000000000008000420000810000070400004F -:1083E000418200E0070000000000000000000000E3 -:1083F00000820000070000000000000000000000F4 -:10840000000000000000000000000000000000006C -:10841000000000000000000000000000000000005C -:108420000000000000000000FFFFF0F0000000006E -:10843000000000000000000000000000000000003C -:10844000000000000000FFC33C000000000000002E -:10845000000000000000000000000000000000001C -:10846000000000000000C300C30000000000000086 -:10847000000000003C3C424242420000000000007C -:1084800000000000000000000000000000000000EC -:1084900000000000000000000000000000000000DC -:1084A00000000000000000000000FFFFFF000000CF -:1084B00000000000000000000000000000000000BC -:1084C0000000000000000000FFC33C0000000000AE -:1084D000000000000000000000000000000000009C -:1084E0000000000000000000C300C3000000000006 -:1084F0000000000000003C3C4242424200000000FC -:10850000000000000000000000000000000000006B -:10851000000000000000000000000000000000005B -:10852000000000000000000000000000000000004B -:10853000000000000000000000000000000000003B -:10854000000000000000000000000000000000002B -:10855000000000000000000000000000000000001B -:10856000000000000000000000000000000000000B -:1085700000000000000000000000000000000000FB -:1085800000000000000000000000000000000000EB -:1085900000000000000000000000000000000000DB -:1085A00000000000000000000000000000000000CB -:1085B00000000000000000000000000000000000BB -:1085C00000000000000000000000000000000000AB -:1085D000000000000000000000000000000000009B -:1085E00000000000000000000F0F0000F0F0F0F0AD -:1085F000000000000000000000FF0000F0F0F0F0BC -:10860000000000000000000000000000000000006A -:10861000000000000000000000000000000000005A -:10862000000000000000000000000000000000004A -:10863000000000000000000000000000000000003A -:10864000000000000000000000000000000000002A -:10865000000000000000000000000000000000001A -:10866000000000000000000000000F0F00000000EC -:108670000000000000000000000000FF00000000FB -:1086800000000000000000000000000000000000EA -:1086900000000000000000000000000000000000DA -:1086A000000005000A08050000A00000000000000E -:1086B00000000000000800000000000000000000B2 -:1086C00000000000000000000000000000000000AA -:1086D0000000000000610007800D000005000A088E -:1086E000050000A00061002E000D00A00061002F19 -:1086F000800D0000000000000000000000000028C5 -:108700000000000000000000000000000000000069 -:108710000000000000000000000000000000000059 -:108720000000000000000000000000000000000049 -:108730000000000000000000000000000000000039 -:108740000000000000000000000000000000000029 -:108750000000000000000000000000000000000019 -:10876000000000000000000000000CFC0CFC0000F9 -:1087700000000000000000000000000000000000F9 -:1087800000000000000000000000000000000000E9 -:1087900000000000000000000000000000000000D9 -:1087A00000000000000000000000000000000000C9 -:1087B00000000000000000000000000000000000B9 -:1087C00000000000000000000000000000000000A9 -:1087D0000000000000000000000000000000000099 -:1087E0000000000000000000000000000CFC0CFC79 -:1087F0000000000000000000000000000000000079 -:108800000000000000000000000000000000000068 -:108810000000000000000000000000000000000058 -:108820000000000000000000000000000000000048 -:108830000000000000000000000000000000000038 -:108840000000000000000000000000000000000028 -:108850000000000000000000000000000000000018 -:108860000000000000000000000000000000000008 -:1088700000000000000000000000000000000000F8 -:1088800000000000000000000000000000000000E8 -:1088900000000000000000000000000000000000D8 -:1088A00000000000000000000000000000000000C8 -:1088B00000000000000000000000000000000000B8 -:1088C00000000000000000000000000000000000A8 -:1088D0000000000000000000000000000000000098 -:1088E0000000000000000000000000000000000088 -:1088F0000000000000000000000000000000000078 -:108900000000000000000000000000000000000067 -:108910000000000000000000000000001000000047 -:108920000000000000000000018001800000000045 -:1089300000000002000000000002C0002000000053 -:1089400000000000000000000000400000030000E4 -:108950000000000000000000000010004000400087 -:1089600000000000000000020002000820000000DB -:1089700000000000000000000000100020020000C5 -:1089800000000004000000000000000000000000E3 -:108990000002000000000000000010401000400233 -:1089A0000000000000C000000000040404100000EB -:1089B0001000000000000000000000000000210086 -:1089C00000000000000000000000000000000000A7 -:1089D0000000000040000000000040904000000047 -:1089E0002002000200C000000000000000020000A1 -:1089F000000000000000000040020084200200820D -:108A000020900000000000904000000000000000E6 -:108A10000000000000000000000000000000020054 -:108A2000000000000000000000000000000820001E -:108A300000000000000000000000000000058200AF -:108A400000000000000000000000000000084004DA -:108A50000000000000000000900000008400000002 -:108A6000840000000000000000000000000000087A -:108A700040080000000000000000000000000000AE -:108A800000000000000000000000000000000000E6 -:108A900000040008000802000008000800080000A8 -:108AA00000080000000000000008000000080001AD -:108AB0008084000800080000008400080084000092 -:108AC000000800000000000000C0000000080001D5 -:108AD0008001000000020004000000000008000007 -:108AE000000800080000000000000000000000086E -:108AF00000018001000000000000000000080000EC -:108B0000000800080000000000000000000000084D -:108B1000000400050000000000000000000000004C -:108B20000000000000000000000000000000000045 -:108B3000040040001000880004000400000000054C -:108B400004004021000000008800002100000041D6 -:108B50000003004100000005000000058441000002 -:108B60000041000000000000000000009000000034 -:108B70000000400020000000900000000000000005 -:108B8000000000000000020088008800400000088B -:108B90004011000000210000000000000000000063 -:108BA00000000000000000000000000000000000C5 -:108BB00000000000040000000000000000000000B1 -:108BC0000000020811000900000000000000000081 -:108BD0000000000000000000000000000000000095 -:108BE00000000000000000000082000000000020E3 -:108BF0000000000000000000008400000088000069 -:108C00000000000000000000000000200020000024 -:108C10000000000000000000820082000000000050 -:108C20000000000000000000000000000000000044 -:108C300000000000000000880000000000000000AC -:108C4000000000008400000000000011000000008F -:108C50000000000000000280000040050005A005A3 -:108C600000001000000900000000000000000000EB -:108C70000000000000000000008000000000000074 -:108C800000000000000000000000000000000000E4 -:108C900000000000000000000000000000000000D4 -:108CA00000000000000000000000000000000000C4 -:108CB0000000000000A00000000300000000000011 -:108CC000000000000082008400000000008400100A -:108CD0000084000000000000000800000000000008 -:108CE0000000000000000000000000000000000084 -:108CF0000000000000000000000000040000000070 -:108D00000000000000000000000000000000000063 -:108D100000000000000000000000000084000000CF -:108D2000C0000800A0000000080000009000000043 -:108D3000001100000000900000000004000000008E -:108D400000000000000000000000000000210005FD -:108D50000000400500000021820000090000000022 -:108D600000050000000200000000880008009000DC -:108D700000000000000000004000000000080000AB -:108D800000000000000000000000000000000000E3 -:108D900000000000000000000000000000200000B3 -:108DA00000000000000000000000000000000000C3 -:108DB00000000000000000000000000000000000B3 -:108DC0000000001000000000000000000000000093 -:108DD0000000000000000000000000000000000093 -:108DE0000400000000000000000000000000090076 -:108DF0000000000000002000000000000000002033 -:108E0000002000000000008404000000009000002A -:108E10000000000000000020002000000490080076 -:108E20000800C000A00000000000C000C00000005A -:108E30000000000000000000000000000000000032 -:108E40000000000000000000000000000000000022 -:108E5000000000400021000400030005C0000040A5 -:108E600000000000024000000200000400040004B2 -:108E7000880000000000000000000000000000006A -:108E800000000000000000000000002100000000C1 -:108E900000020000000000000000000000050021AA -:108EA00000000000000000000000000000000000C2 -:108EB00000000000000000000000000000000000B2 -:108EC00000000000000000000000000000000000A2 -:108ED000000000000000000000000000050000008D -:108EE000000000000000050000000000000021005C -:108EF0000000210000000000000000000000000051 -:108F00000000000000000000000000000000000061 -:108F10000000000000000000000000000000000051 -:108F20000000000000000000000000000000400001 -:108F3000000101020000C0000004C0820000C00067 -:108F40000001000000000000000000000000000020 -:108F50000000000200000100002010C0000000001E -:108F600000010000000000000000000000000100FF -:108F7000040000000182000100000002C0040000A3 -:108F800000000001000000000000000000000000E0 -:108F900000000000000000000000000800000000C9 -:108FA0002000000000000500000000000003000099 -:108FB00000000003108040118500008080800000C8 -:108FC000800000030000000000000000000200001C -:108FD00000000011110000081000000080000000D7 -:108FE000000000410000000000000000000000043C -:108FF000040080000041030000020800008000809F -:10900000000000000041000000000000000000001F -:1090100000000000000000000002100000800000BE -:10902000000000000000000000002100000000001F -:109030000000050000000200200021800000030065 -:109040000000000000808003000008000000000015 -:109050000000090000000400100084000000080067 -:109060000000000000008008000000000300000075 -:109070000000000020000000040040000300000089 -:109080000400000000000000800300000800000051 -:1090900000000000000000000000020008000000C6 -:1090A000000080000000001000030000000000002D -:1090B00000000000000000000100910040020000DC -:1090C00001008800000000C08200000001000000D4 -:1090D000000000000000000001001100102000004E -:1090E0000100080000000000C001000000000000B6 -:1090F0000000000000000100000001009000208836 -:1091000000000100400000000000C000000001005D -:109110000000000000000000000000001000050832 -:1091200000020200400000000001000100000000F9 -:1091300000000000000000000000A000001000007F -:10914000010000000000000000000000000000001E -:1091500000000000000000000000A00000C00000AF -:1091600009000000000000000001000000000000F5 -:10917000000000000000000000000001A00000400E -:1091800000002000000000000000000100000000BE -:1091900000000000000000000000000000000010BF -:1091A00000000000000000000000000000000000BF -:1091B00000000000000000000000004100200080CE -:1091C000000041000000000000000041000000001D -:1091D0000000000000000000000000410009000045 -:1091E000000003000000000000000041000000003B -:1091F0000000000000000000000000000005400525 -:10920000008000004100000000000000004100005C -:10921000000000000000000000000000000000004E -:1092200000800000000000000000000000000000BE -:109230000005800000C1000000020000C000000026 -:109240000041000000030000004100000000031086 -:109250000008800000C100000011000009000000AB -:1092600000C1804000100000000000000000100855 -:1092700000000003800000C1000000000004840022 -:1092800000000004000000080000000000000000D2 -:1092900020030008800000C1000000000000000062 -:1092A00000000041800000200000000000000000DD -:1092B0000000000020000040000000014000040009 -:1092C00000000021900000000000000100000000EC -:1092D00000880001200000400000000002000200A1 -:1092E0000000000940010001000000000000000033 -:1092F00000900000000020000040000000008201FB -:109300008300000000914000000000000000000009 -:10931000000000900001200000400000000000005C -:1093200000000000009108000000000000000000A4 -:10933000000000000000000000000000000000002D -:1093400000000000811200E0070048420000000019 -:109350000000484200000000000000000000000083 -:1093600000000000811200E007004800000000003B -:1093700000000000000000000000000000000000ED -:10938000000000000000411200E0070000000000A3 -:1093900000000000000000000000000000000000CD -:1093A000000000000000810000E000004800000014 -:1093B00000000000000000000000000000000000AD -:1093C000000000000000000000000000000000009D -:1093D000000000000000000000000000000000008D -:1093E000000000000000000000000000000000007D -:1093F000000000000000000000000000000000006D -:10940000000000000000000000000000000000005C -:10941000000000000000000000000000000000004C -:10942000000000000000000000000000000000003C -:10943000000000000000000000000000000000002C -:10944000000000000000000000000000000000001C -:10945000000000000000000000000000000000000C -:1094600000000000000000000000000000000000FC -:1094700000000000000000000000000000000000EC -:1094800000000000000000000000000000000000DC -:1094900000000000000000000000000000000000CC -:1094A00000000000000000000000000000000000BC -:1094B00000000000000000000000757B00000000BC -:1094C000000000000000000000000000000000009C -:1094D0000000000000000000DEAE257B0000000060 -:1094E000000000000000000000000000000000007C -:1094F0000000000000000000DEA40000257B00004A -:10950000000000000000000000000000000000005B -:1095100000000000000000000000DEA4747B0000DA -:10952000000000000000000000000000000000003B -:1095300000000000000000000000DE2E6126034055 -:109540000000000000000230A00000000000000049 -:109550000C4000000000000002C064866126034049 -:109560000000000000000230A00000000000000029 -:109570000C4000000000000002C06486000061266C -:1095800003400000000000000230A00000000000C6 -:1095900000000C4000000000000002C0648661561C -:1095A00003400000000000000230A00000000000A6 -:1095B00000000C4000000000000002C06A860000AD -:1095C0000200200020000300030002800280020845 -:1095D00002000208880002000200020002000000EF -:1095E00002002000100088000800880040000040B1 -:1095F00000A0004000C00000000000800000000348 -:109600000000000020002004200020002000200096 -:1096100000000000C0000004000000000000000086 -:10962000000400042080000420000000200020002E -:109630000004008020040100000008000000000079 -:109640000000800200000000840084008020802050 -:1096500080028000C09000008000800080008000B8 -:1096600000008000004000000800000240020002EC -:1096700000910041000900210000000000400000AE -:1096800000000000000000C0000000000000000218 -:109690000000000200020002000000024000000280 -:1096A00000024003000100040001000040024040AD -:1096B00010004003000400032002210000004000CD -:1096C0000002010000000000000000000000000097 -:1096D00000000200020008400940000000000000F5 -:1096E00000000000000000000000820000000000F8 -:1096F000900000800000008090000000000000004A -:109700000000000000000000000000000000000059 -:10971000001008000200020000009000000000009D -:109720000800080000000000000000000000000029 -:109730000000000000000000000000000000000029 -:10974000000800000200000000000000000000000F -:1097500000002008000000880000028800000000CF -:1097600000000008000000880088000000C0008899 -:109770000000008800200000002000000000000021 -:10978000000000080000000000820000000000004F -:1097900000000000000000000000000400000000C5 -:1097A000000000040008000000000000000000C0ED -:1097B0000090000000000000000000000000000019 -:1097C0000000000000080000000800080000000879 -:1097D000000800000000002100210021000000001E -:1097E000000000210000000900020011000000003C -:1097F00000004041000010000100000000000000D7 -:109800000000000000000000000000000020001028 -:1098100000408800000040090021002100000000F5 -:1098200000004000400040000040404000000000B8 -:10983000000088000000000004000008041100007F -:1098400000000400000000000000000000002100F3 -:1098500000000300000000001000000000000000F5 -:10986000000000000000000000000000110011884E -:109870000000200041000000000020000000000265 -:1098800000000800000004000000000000000000CC -:109890000088000002000200020400000000000036 -:1098A00000002100000000820000000000000020F5 -:1098B0000000000000000000400000002100000047 -:1098C000000400A0000040000000000000000100B3 -:1098D000020008000800080000000000000000006E -:1098E0000000820000008200000001000800020069 -:1098F000020008000900080009000000C000820002 -:1099000082000000000000000000000000000000D5 -:109910000000000000090000000900000000000035 -:109920000000000000000000000000000000000037 -:109930000000000000000000000000000000000027 -:10994000000000000000000000000000000008000F -:109950000200800000000000000000000000000085 -:1099600000000000000003000000000002000000F2 -:1099700080008800000002000000020000000000DB -:109980000000000000000000000000000000008453 -:1099900000000000000000000000000000000000C7 -:1099A00000000000000000000000000000000000B7 -:1099B00000000000000000000000000000000000A7 -:1099C0000000000000000000000000000000004057 -:1099D00020000040C02000002000004000000000E7 -:1099E00020000040000000002000004000000000B7 -:1099F0002002004090000004020002040000080061 -:109A0000080008040800A00000000000002000007A -:109A100000040803000300000020002000000011E3 -:109A200000000000008000000000000000000000B6 -:109A300000000002000000000000000040000000E4 -:109A4000000088000000000000000000000000008E -:109A500000008000000100000040800003010000C1 -:109A600000908800080121000020802000010000F3 -:109A70000400808800010000000000008001000454 -:109A800009000400110111A000A000000000000462 -:109A90000000000100000000100000880900020022 -:109AA00000004000009000100520000000000000B1 -:109AB0000000000000A000000808000000004000B6 -:109AC0000000110010020000000000000200400031 -:109AD0000000000000000000000000000000002165 -:109AE0008200000000210021000000000000002191 -:109AF0000000000000000000000002000000004123 -:109B00000000A00082000000108008090000080882 -:109B1000080000000000000000000000000800082D -:109B20000000000010000000000000000000000025 -:109B30000000000000000000000000000004080019 -:109B40000000000000000000000000000000000015 -:109B500000080000000000000000000000000000FD -:109B600000000000000000000000000000000000F5 -:109B7000000000000000000800000000800000005D -:109B800000000000000000000000000400000000D1 -:109B900000000000000000000000000005000008B8 -:109BA00000000000000000000000000000000000B5 -:109BB00000000000000000000000000000000000A5 -:109BC0000000000000000000000000000000000095 -:109BD00000000000000041C000000000000041C083 -:109BE00020000000000041C000000000000041C053 -:109BF00000000200000041C000000000000011C190 -:109C000000000100000011000800000000004140B9 -:109C1000000400401040000002A0008800400840FE -:109C20000000000000000000000000000000000034 -:109C30000000000000000000000000010000000023 -:109C40000000000000000000000000000000000014 -:109C500000000000000000009191000202090000D5 -:109C6000919100090902000091910002020900008F -:109C7000919100001002001191910000111000005C -:109C800091880041100400009100000002000000D3 -:109C900010800080000080000000000900201000FB -:109CA00000000000000000000000000000000000B4 -:109CB0000000000000000000000000090010020089 -:109CC000000000000000000000000000000009008B -:109CD0000000000000000000000009000021021147 -:109CE0008000090009A100118280090000210211F1 -:109CF00080000900002100119102090000211011CB -:109D000080000900082100098400000300210003ED -:109D10000000800000A1800880800000090080C150 -:109D2000089100800000000000000000000000001A -:109D3000000000000000000000000000090000001A -:109D40000800000000000000000000000008000003 -:109D500000080000000000000000000001000000FA -:109D60000001C000010000C00001C082010000002D -:109D70000001C000010000000001C000010000005F -:109D80000001C000010001000001C00088000010B7 -:109D900000010090020010C0109104C00000900269 -:109DA00010C0020510C0000000000000000000000C -:109DB00000000000000000000000000000000000A3 -:109DC0000000010000000000000000000000000092 -:109DD0000000000000000000000000000000000083 -:109DE0000000000003C100000000900003C100005B -:109DF0000000000003C100000001020003C00000D9 -:109E00000000000003C100010001000083C0080041 -:109E100008000800000089020040C0888810000087 -:109E200011200040C08890020000000000000000E7 -:109E30000000000000000000000000000000000022 -:109E40000000000000010000000000000000000011 -:109E500000002000000000000000000000000000E2 -:109E60000000000200099183200000090002918394 -:109E70000000000200099183000000090011918098 -:109E80000000001009099183000800090004918076 -:109E90009100000000000800418000008000008068 -:109EA00000004109000080008088000000000000E0 -:109EB00000000000000000000000000000000000A2 -:109EC0000000000900000008000000000000000081 -:109ED00000000000800000000300000000000000FF -:109EE000000000820209098009008000090902803F -:109EF0000900808202090980090080800000118029 -:109F00000900808810090980090088000011048078 -:109F100009000008004100000000000080080080E7 -:109F200080000000890080000080800000000000A8 -:109F30000000000000000000000000000000000021 -:109F400000000000090800001000000000000000F0 -:109F500000000000000800000000000000000000F9 -:109F60000000000000C0000100840100C0000001EA -:109F700000840100C0C0000100840100C040000056 -:109F800000840100C0C1000100840100C100000183 -:109F90000084010000010001000000002000021008 -:109FA00090028200000004009090900204000000E3 -:109FB00000000000000000000000000000000000A1 -:109FC0000000000000000000000001000000000090 -:109FD0000000000000000000000000000000000081 -:109FE000000000000000810000E00000420041008D -:109FF00000E007006000810000E000004200410036 -:10A0000000E000000000810000E00000420041008C -:10A0100000E000000000818100E007004200000035 -:10A020000000000048420000480000E000004842F4 -:10A030000000000000000000000000000000000020 -:10A040000000000000000000810000E000000000AF -:10A050000000000000000000600000E000000000C0 -:10A060000000000000000000FFFFFFFF0000AAAAA0 -:10A070000000FFFF0000AAAA0000FFFF0000AAAA3C -:10A080000000FFFF0000AAAA0000FFFF0000AAAA2C -:10A090000000FFFF0000AAAAFFFF0000AAAA00001C -:10A0A00000008124408010200000000011222400C4 -:10A0B000002400000000000000000000000000007C -:10A0C0000000000000000000000000000000000090 -:10A0D0000000000000000000000000000000000080 -:10A0E0000000000000000000000000000000000070 -:10A0F000AAAA000000000000AAAA000000000000B8 -:10A10000AAAA000000000000AAAA000000000000A7 -:10A11000AAAA000000000000AAAA00000000AAAA43 -:10A120000000812400000102040800001122000048 -:10A13000810000810000000000000000000000001D -:10A14000000000000000000000000000000000000F -:10A1500000000000000000000000000000000000FF -:10A160000000000000000000000000005555000045 -:10A17000FFFF000055550000FFFF0000555500008F -:10A18000FFFF000055550000FFFF0000555500007F -:10A19000FFFF0000555500000000FFFF0000FFFF1B -:10A1A00000003C3C04080102040108020000040114 -:10A1B00008022481000000000000000000000000F0 -:10A1C000000000000000000000000000000000008F -:10A1D000000000000000000000000000000000007F -:10A1E00000000000000000000000000000005555C5 -:10A1F000000000000000555500000000000055550B -:10A2000000000000000055550000000000005555FA -:10A2100000000000000055550000FFFFFFFF000098 -:10A22000000000003C3C10204080104020800000D6 -:10A230001040208000002481000000000000000089 -:10A24000000000000000000000000000000000000E -:10A2500000000000000000000000000000000000FE -:10A2600000000000000000000000000000000000EE -:10A27000406380018021920245FB8A01852197A2DB -:10A2800040E380018021920240E38001802192021C -:10A2900040E380018021920240E38001802182021C -:10A2A00015612A2F854D00A86000000000001000F5 -:10A2B00000000061000180010800000000000000B3 -:10A2C000000000000000000000000000000000008E -:10A2D000000000610001800100000000000000009B -:10A2E000000000610007800D000000000000000079 -:10A2F0000000300030000000F000300030000000AE -:10A30000F000300030000000F000000000000050BD -:10A310000050300030000000F0003030000030000D -:10A3200030000000000000000000000000000000FD -:10A3300000000000000055550000C3C300000000ED -:10A34000000000000000000000000000000000000D -:10A350000000000000000F0F00C300C30000000059 -:10A3600000000000000000000000000000000000ED -:10A3700000000000300030000000F000300030002D -:10A380000000F000300030000000F0000C0C0C0C5D -:10A3900000500050300030000000F000303000006D -:10A3A000300030000000000000000000000000004D -:10A3B000000000000000000055550000C3C300006D -:10A3C000000000000000000000000000000000008D -:10A3D00000000000000000000F0F00C300C30000D9 -:10A3E000000000000000000000000000000000006D -:10A3F000000000000000F000000000000000F0007D -:10A40000000030300000F00000000000000030309C -:10A410000000000000000000000000000000F0004C -:10A4200000003030000000000000000000000000CC -:10A4300000000000000000000000FF0000C300C397 -:10A44000000000000000000000000000000000000C -:10A4500000000000000000000000FF0000C300C377 -:10A4600000000000000000000000000000000000EC -:10A470000000000000000000F0000000003C003C74 -:10A48000F000000030300000F0000000003C003C14 -:10A490003030000000003C3C0F0F0000003C003C4E -:10A4A000F00000003030000000000000000000005C -:10A4B000000000000000000000000000FF0000C3DA -:10A4C00000C30000000000000000000000000000C9 -:10A4D000000000000000000000000000FF0000C3BA -:10A4E00000C30000000000000000000000000000A9 -:10A4F0000000000000000000000000000000000458 -:10A50000000000008400840000000000000004003F -:10A510000000000000000000000000808400000037 -:10A5200000000000200088008400000000000000FF -:10A53000A000040001400100000000030000200012 -:10A5400000000000008020808800208000000002C1 -:10A5500000000000200000000000000000002000BB -:10A560000000000000002000200020000100010089 -:10A570000080008021000080010000C040020040F7 -:10A580000002000000000000000000004002000087 -:10A590000000000000020000000000900020008485 -:10A5A00000000090000200900040109000000000A9 -:10A5B00040000000A1000400040040000000400032 -:10A5C0000000000200000004000400020004000279 -:10A5D0000090000000024002000000900000000215 -:10A5E0000002000200004000000000000000040023 -:10A5F00004000020002004C00020040010200000FF -:10A600000000000000000000000008000000000042 -:10A6100000000000000000000000000082000000B8 -:10A62000000000000000000000000800080000001A -:10A630008200000000000100020000000300000092 -:10A640008200820082000000020082400840080070 -:10A6500000000000000000000000000000000200F8 -:10A6600000000000000010000000000000000800D2 -:10A6700000000000000000000000000000000200D8 -:10A6800000000000000000000000000000000000CA -:10A6900000000000000000000000000000100000AA -:10A6A00000000000000000000000000000000000AA -:10A6B0000000000000000000020080000000020016 -:10A6C000000000000000000000000000000000008A -:10A6D000000000000000000000000000000000007A -:10A6E000000000000000000000000000000000006A -:10A6F00000000000000000000000000000820000D8 -:10A700000000900000000000000000000000002198 -:10A710000000000000000000000000000000000336 -:10A720000400100000000000000000000000000015 -:10A730009000040000200000040040000000000021 -:10A7400001000000400000000000000000000000C8 -:10A750002000000000004000000008000000400849 -:10A7600040000000000000000000000000000000A9 -:10A770000000000000000200000040000400400053 -:10A7800000000000410008820000000000000000FE -:10A7900000000000000000000000000000000000B9 -:10A7A00000000000000000020000000000000002A5 -:10A7B0000000000000400900000000000304040045 -:10A7C00000000420000000900002000000000004CF -:10A7D00000A088024100000000000000000000000E -:10A7E0000000000000000000000000000000000069 -:10A7F0000008000000000000000000000000000051 -:10A8000000820000000000000000000000000000C6 -:10A810000000080000000000000000000000000030 -:10A820000000820000000020000000000100400045 -:10A830000000080000000000400008004000000088 -:10A840000000020000000000000000000000000006 -:10A8500000000000000000000000000000000000F8 -:10A8600000000000000000000000000000000000E8 -:10A8700000000000000000000000000000000000D8 -:10A8800000000000000000000000000000000000C8 -:10A8900000000000000000000000000000000000B8 -:10A8A0000000000000000000000100A009002000DE -:10A8B0000000000000000000100000000000000088 -:10A8C00000C0000080000000000000000000000048 -:10A8D0000000000000A00000004000000000000098 -:10A8E0000000000000080000000000000000000060 -:10A8F0000000000000000000000002000000000056 -:10A90000000000C000000000000000000000000087 -:10A9100000000040000000000000000000000000F7 -:10A920000000000000000000000000000021000006 -:10A9300000000000000000000000000000200400F3 -:10A9400000000080008000A00080000004000000E3 -:10A9500000000000000000000000000000000000F7 -:10A9600000110000000000000000000000000000D6 -:10A9700000000000000000000000000000000000D7 -:10A9800000000400000000000000000000000000C3 -:10A99000000000000000080000A000000800000007 -:10A9A000000000000000000000820000002000A065 -:10A9B00020200020008411020082000000000020FE -:10A9C000110409200004110403051104000000040F -:10A9D000030003900390042000200000000000000A -:10A9E0001000000011000000000000000000200026 -:10A9F00000004004000402080000000000000900FC -:10AA00000000200000000020000000000000000006 -:10AA10000000000000000000000000000000000036 -:10AA20000000000000000000000000000000000026 -:10AA30000000000000800000000000000000001185 -:10AA40000000000000000000000000000000000006 -:10AA500000000000000900000000000000000000ED -:10AA600000000000000000000000000000000000E6 -:10AA700000000000000000000000000000000000D6 -:10AA80000000000000000000004100000000000085 -:10AA900000000000000000000000000000000000B6 -:10AAA00000000000000000000000000000000000A6 -:10AAB0000000000000000004000000000000000092 -:10AAC000000000000000000000C0000000000000C6 -:10AAD0000000000000000000000000000000000076 -:10AAE0000000000000000000000000000000000066 -:10AAF0000000000000000000000000000000000056 -:10AB00000000000000000000000000C00000000085 -:10AB10000000000000000000000000000000000035 -:10AB20000000000000000000000000000000000025 -:10AB30000000000000000100000000000000000014 -:10AB40000000000000000000000000009020000055 -:10AB50008200000000000000000000000000020170 -:10AB600001000000000000000000000000000000E4 -:10AB700000000000000000000000000000000000D5 -:10AB80000000000020080010000000000004000089 -:10AB900000080000000000000000000000000000AD -:10ABA00000000000000000000000000000000000A5 -:10ABB0000000000000000000400000000000000055 -:10ABC0000000000000000000000000001104808070 -:10ABD00010008008000000000000000000000000DD -:10ABE000004003000008000000000000000000001A -:10ABF0000000000000000000000000000000000055 -:10AC000000000000000008800000000000000000BC -:10AC10000000000000000000000000000000000034 -:10AC20000000000000000000000000000000000024 -:10AC30000000000000000000000000020000000012 -:10AC40000000000000000000000000000000000004 -:10AC500004000000100000000000000000000000E0 -:10AC60000000000040002000000000000000000084 -:10AC700000000000000000000000000000000000D4 -:10AC800000000000000000008000800000000000C4 -:10AC900000000000000000000000000000000000B4 -:10ACA00000000000000000000000000000000000A4 -:10ACB0000000000000000000000000000000000094 -:10ACC0000000000000000000000000000000000084 -:10ACD0000000002000000120000000000000000033 -:10ACE0000000000000000100000000000000000063 -:10ACF0000000000000000000000000000000000054 -:10AD0000000000000000000000000800200000001B -:10AD1000000000000400000000000000000000002F -:10AD20000000000000000000000000000000000023 -:10AD30000000000000000000000001000000000012 -:10AD40000100000000000000000000000000000002 -:10AD500000000000000120000000000000000000D2 -:10AD600000000000000000010000000000000000E2 -:10AD700000000000000000000000000000000000D3 -:10AD800000000000000000000000000000080000BB -:10AD9000000000000004000000200000000000008F -:10ADA00000000000000000000000000000000000A3 -:10ADB0000000000000000000000000001000000083 -:10ADC0000000100000000000000000000000000073 -:10ADD000000000002004001000000000000000003F -:10ADE000000000000000000000400000000800001B -:10ADF0000000000000000000000000000000000053 -:10AE000000000000000000000000000000000080C2 -:10AE10000000000000000000000000000000000032 -:10AE20000000000000000000000000000000000022 -:10AE30000000000000000000000000000000000012 -:10AE400000200000000000000000000000000000E2 -:10AE500000000000000004110800808000000000D5 -:10AE60000000000000000000000840000000110089 -:10AE700000000000000000000000000000000000D2 -:10AE800000000000000000000000000000000000C2 -:10AE9000800000100000000000080090000000008A -:10AEA00000000000000000000000000000000000A2 -:10AEB0000000000000000000000000000000000092 -:10AEC0000000000000000000000000000000000082 -:10AED0000000000000000000000100000840000029 -:10AEE0000000000000000000000000010100000060 -:10AEF0000000000000000000000000000000000052 -:10AF00000000000000000000000000000000000041 -:10AF10000000080090000000000004010002000092 -:10AF20000800000000000000000000000000000019 -:10AF30000000000000000000000000000000000011 -:10AF40000000001100E00700000000000000000009 -:10AF500000000000000000000000600000E00704A6 -:10AF6000000000000000000000000000810000E080 -:10AF700000000000000000000000000000000000D1 -:10AF800000000000000000000000000000000000C1 -:10AF900000000000008200000700000000810000A7 -:10AFA000070000000000000000000000000000009A -:10AFB0000000000000000000000000000000000091 -:10AFC0000000000000000000000000000000000081 -:10AFD0000000000000000000000000000000F0F091 -:10AFE0000000FFFF00000000000000000000000063 -:10AFF0000000000000000000000000000000000051 -:10B000000000000000000000000000000000000040 -:10B010000000000000000000FF0042424242000029 -:10B020003C3CC300C3000000000000000000000022 -:10B030000000000000000000000000000000000010 -:10B040000000000000000000000000000000000000 -:10B0500000000000000000000000000000000000F0 -:10B06000F0F0000000000000000000000000000000 -:10B0700000000000000000000000000000000000D0 -:10B0800000000000000000000000000000000000C0 -:10B0900000000000000000000000FF0042424242A9 -:10B0A00000003C3CC300C3000000000000000000A2 -:10B0B0000000000000000000000000000000000090 -:10B0C0000000000000000000000000000000000080 -:10B0D0000000000000000000000000000000000070 -:10B0E0000000000000000000000000000000000060 -:10B0F0000000000000000000000000000000000050 -:10B10000000000000000000000000000000000003F -:10B11000000000000000000000000000000000002F -:10B12000000000000000000000000000000000001F -:10B13000000000000000000000000000000000000F -:10B1400000000000000000000000000000000000FF -:10B1500000000000000000000000000000000000EF -:10B16000000000FF0000FFFF0000000000000000E2 -:10B1700000000000000000000000000000000000CF -:10B1800000000000000000000000000000000000BF -:10B1900000000000000000000000000000FF0000B0 -:10B1A000030303030F0F00006060606000000000F5 -:10B1B000000000000000000000000000000000008F -:10B1C000000000000000000000000000000000007F -:10B1D000000000000000000000000000000000006F -:10B1E0000000000000FF0000000000000000000060 -:10B1F000000000000000000000000000000000004F -:10B20000000000000000000000000000000000003E -:10B21000000000000000000000000000000000FF2F -:10B220000000030303030F0F000060606060000074 -:10B23000000000000000000000000000000000000E -:10B240000000000000000000000000000000057188 -:10B25000002F000D000000000000000000000000B2 -:10B2600000000000000015792A01854104A80000B3 -:10B2700000000000000000000061000180010000EB -:10B2800000000000000000000000000000000000BE -:10B2900000000000000000000000000000000000AE -:10B2A000000000280000000000000028000000004E -:10B2B000000000000000000000000000000000008E -:10B2C000000000000000000000000000000000007E -:10B2D000000000000000000000000000000000006E -:10B2E00000000000000000000000FF00C0C0C0C05F -:10B2F00000000000000000000000003C003C0000D6 -:10B300000F0F00000000000000000000000000001F -:10B31000000000000000000000000000000000002D -:10B32000000000000000000000000000000000001D -:10B33000000000000000000000000000000000000D -:10B3400000000000000000000000000000000000FD -:10B3500000000000000000000000000000000000ED -:10B36000000000000000000000000000FF00C0C05E -:10B37000C0C000000000000000000000003C003CD5 -:10B3800000000F0F0000000000000000000000009F -:10B3900000000000000000000000000000000000AD -:10B3A000000000000000000000000000000000009D -:10B3B000000000000000000000000000000000008D -:10B3C000000000000000000000000000000000007D -:10B3D000000000000000000000000000000000006D -:10B3E00000000000000000000000000000003C3CE5 -:10B3F00000000F0F00000000000000000000003CF3 -:10B40000003C0000FF000000000000000000000001 -:10B41000000000000000000000000000000000002C -:10B42000000000000000000000000000000000001C -:10B43000000000000000000000000000000000000C -:10B4400000000000000000000000000000000000FC -:10B4500000000000000000000000000000000000EC -:10B4600000000000000000000000000000000000DC -:10B470003C3C00000F0F0000000000000000000036 -:10B48000003C003C0000FF00000000000000000045 -:10B4900000000000000000000000000000000000AC -:10B4A000000000000000000000000000000000009C -:10B4B000000000000000000000002000000020004C -:10B4C0000000000000000000040500002000210032 -:10B4D000001120000000000000002000000000001B -:10B4E000000000000000008000000000200000902C -:10B4F0000002200000000000000300002000000007 -:10B50000000000000000000000000000000020001B -:10B510004004004120020008000010802080000448 -:10B520004004000000000010000040200020200027 -:10B5300000000000210004000080400000004000E6 -:10B5400000000000000000000000000200000000F9 -:10B55000400200000002400204401002000000000F -:10B5600004020002000200000004000000000000CD -:10B570001121000000000000000000004000000059 -:10B580000000000000024000000200024002000033 -:10B590000002000200024000400440004004100489 -:10B5A0000003000100000002400000000001000153 -:10B5B0000000000000400202C00021200200020042 -:10B5C0000210021000000000000000000000000057 -:10B5D0000000000000000000000000000200020067 -:10B5E000000000000800A0000000000000000000B3 -:10B5F0000000000000000000001002000000000039 -:10B6000000000000900082000000820000000000A6 -:10B610000000000002000200020000000000000024 -:10B620000000000002000200020000000000000014 -:10B6300000000080008000210000000000000000E9 -:10B6400000000000000000000000000000080000F2 -:10B6500000000000000000000000000000080000E2 -:10B6600000000000000080840000000000080000CE -:10B6700000000000000000000000000000080000C2 -:10B6800000000000000000000200000000000008B0 -:10B69000000000080000000000080000000800088A -:10B6A0000000000000000000000000000000000892 -:10B6B000000000080020002000A00000000800108A -:10B6C000000000000000000000000000000000007A -:10B6D000000000000000200000000000000000004A -:10B6E000002100030000000000000880400000006E -:10B6F000104104218400880084080005040800002B -:10B70000000004000041840020000400000000004C -:10B7100004009000000000000000000040008800CD -:10B720004000000040000000000000000000400059 -:10B7300040002000200020000000040000009100D4 -:10B7400000000000000000000000000000000000F9 -:10B750000000000000000000800000000000400029 -:10B760000000000000000000000000008010000049 -:10B7700000000300030841000800000000008000F2 -:10B7800000000000000000C00000040000000004F1 -:10B790000000800000000000000800000000000021 -:10B7A0000000000000000000000000200900000070 -:10B7B0000000000080008900840000000020008458 -:10B7C0000800000000000000000000000008000069 -:10B7D0000000000000210021000000000000000027 -:10B7E00000000000C002C00400040004002100109A -:10B7F00000004020000000000000000000000000E9 -:10B8000000008200000000000000000000000000B6 -:10B810000000000000000000000000000000000028 -:10B820000000000000000000000000000000000018 -:10B8300000000000000000410021A0000000000006 -:10B8400000110000000000000000000000000000E7 -:10B8500000000000000000000000000000000000E8 -:10B86000000000820000000100A1000100010000B2 -:10B870000001000080010000000000000000000046 -:10B8800000000000000000000000000000000000B8 -:10B8900000000000000000000000000000000000A8 -:10B8A0000000000000000000000000000000000098 -:10B8B0000000000000000000000000000000000088 -:10B8C0000000000000000000000000000000000078 -:10B8D0000000000000000000000000000000000068 -:10B8E0000000A0000800000000002021410004002A -:10B8F000002100900000A0000000001100000400E2 -:10B900000000008000000080000000000000000037 -:10B910000000000000000000000000000000000027 -:10B920000000000000000000000000000000000017 -:10B9300000000000000040000000000000000000C7 -:10B94000090000000000900400200000000000003A -:10B9500000000000000000000000000000000000E7 -:10B9600000000000000000000000000000000800CF -:10B97000090000000011000000200800000004047D -:10B980000000020000204100002000000200000032 -:10B9900020000000000000880000110000000000EE -:10B9A000040000080000000000000000000000008B -:10B9B0000000000000000000000000000000050082 -:10B9C00000022000000000880000000000000000CD -:10B9D000000000000000000000000000000008005F -:10B9E000000000000000004100030000880000008B -:10B9F00004000800000000050010000200410008DB -:10BA0000000000000008000000000000000000002E -:10BA100000410000000000000000000000000000E5 -:10BA200000410000000000000000000000000000D5 -:10BA300000000000000000000000021000000000F4 -:10BA400000000000000000000000000000000000F6 -:10BA500000000000000000000000000000000000E6 -:10BA600000000000000000000000000000000000D6 -:10BA70000000800000000000000000010000000045 -:10BA800000000000000000000000000000000000B6 -:10BA900000000000000000000000000000000000A6 -:10BAA0000000000000000000000000000000000096 -:10BAB0000000000000000000000000000000000086 -:10BAC00000000000020000000000008400000000F0 -:10BAD0000000000000000000000000000000000066 -:10BAE0000000000000000000000000000000000056 -:10BAF000000100000100880010A0000201001010E9 -:10BB00000000000000000000000000C000900000E5 -:10BB10000000000000000000000000000000000025 -:10BB20000000000000000000000000000000000015 -:10BB30000000000000000000000000000000000005 -:10BB4000000000040010010000008200000000005E -:10BB500000000000000000000000000000000000E5 -:10BB600000000000000009000000000000000000CC -:10BB70000000000808090509000900800000020013 -:10BB80008000000000000000000000000000000035 -:10BB900000000000000000000000000000000000A5 -:10BBA0000000000000000000000000000000000095 -:10BBB000000000000000000009000000000000007C -:10BBC0000000000000000000100000000000000065 -:10BBD0000000000000000000000000000000000065 -:10BBE0000000000000000000000000000000000055 -:10BBF0000000000008000000000800808000000035 -:10BC00008000000080000000000000000000000034 -:10BC10000000000000000000000000000000000024 -:10BC20000000000000000000000000000000000014 -:10BC300000000000000000080000000800000000F4 -:10BC400000000000000000100011000800000000CB -:10BC50000000800000000000000000000000000064 -:10BC600000000000000000000000000000000000D4 -:10BC700000000000000000000000000000100400B0 -:10BC80000200A00020000800040000000000820064 -:10BC900000000000000000000000000000000000A4 -:10BCA0000000000000000040000000000000000054 -:10BCB0000000000000000000000000000001000083 -:10BCC000000000000000000000010400000000006F -:10BCD000080000000200000000000000000000005A -:10BCE0000000000000000000000000000001000053 -:10BCF000000000000000000000030010010000022E -:10BD0000008800030202000900000000000000009B -:10BD1000000000C0000000900000000000000000D3 -:10BD20000000000000000000000000000000000013 -:10BD300000000000000000000000000020000000E3 -:10BD400001000000000000000000000490880000D6 -:10BD50000000002000C000000020000000000000E3 -:10BD600000000000000000000000000200020010BF -:10BD700000080000000000000000002111801100F8 -:10BD80000080000900900041000800000000000051 -:10BD900000000000000000000000000000000000A3 -:10BDA0000000000000000000000000000000000093 -:10BDB0000000000000000000000000000000000083 -:10BDC0000000100000000000000000000000000063 -:10BDD0000000110000000000000000000000000052 -:10BDE0000000000000000000000000000000000053 -:10BDF00000000000000000000000000021800002A0 -:10BE000008000000800200A100800000000800027D -:10BE10000000000000000009000000000000000019 -:10BE20000000000000000000000900000000000009 -:10BE300000000000000000000000000000000008FA -:10BE400000000000000000000000000000000000F2 -:10BE50000002000000000002000900800000000055 -:10BE600000000000000000000000000000000000D2 -:10BE7000000000000000000000000000000001A021 -:10BE80000000000000004000020900040000000063 -:10BE9000008800200000000000C00000000000003A -:10BEA0000000000000000000000000000000000092 -:10BEB0000000000000000000000000000000000082 -:10BEC0000000000000000000000000000000000072 -:10BED0000400000000880000000100C000400000D5 -:10BEE0000000000000000000000000000000000052 -:10BEF000480000E00000000000000000000000001A -:10BF0000821100E007000000000600E007000000CA -:10BF10000081000007000000008200000700000010 -:10BF20000000000000000000000000820000070088 -:10BF30000000000000000000000000000000000001 -:10BF40000000810000E00000000000000000000090 -:10BF50000000600600E0070000000082000007000B -:10BF600000000000000000000000000000000000D1 -:10BF700000000000000000000000000000000000C1 -:10BF80000000000000003F3FFFFF00FF000008002E -:10BF90002000000000000000000000000000000081 -:10BFA0000F0F000000000000000000000000000073 -:10BFB0000000000000000000000000000000000081 -:10BFC0000000000000000000000000000000000071 -:10BFD00000000000FFFF0000C0C0C0C00000000063 -:10BFE000F4F4FEFE0000000000000000000000006D -:10BFF0000000000000000000000000000000000041 -:10C0000000000000000000003C3CFCFC00FF0000C1 -:10C01000040010000000000000000000000000000C -:10C0200000000F0F000000000000000000000000F2 -:10C030000000000000000000000000000000000000 -:10C0400000000000000000000000000000000000F0 -:10C0500000000000000000000000C0C0C0C00000E0 -:10C060000000F4F4FEFE00000000000000000000EC -:10C0700000000000000000000000000000000000C0 -:10C080000000000000000000000000000000FFFFB2 -:10C09000C30040550000000000007F7F7F7F000F3D -:10C0A000000F2828282800000000000000000000E1 -:10C0B0000000000000000000000000000000000080 -:10C0C0000000000000000000000000000000000070 -:10C0D00000000000000000000000FF00F0F0F0F0A1 -:10C0E000000000007D7D7D7D00000000000000005C -:10C0F0000000000000000000000000000000000040 -:10C10000000000000000000000000000000000002F -:10C11000FFFFC30045550000000000004F4F4F4F88 -:10C12000000F000F28282828000000000000000051 -:10C1300000000000000000000000000000000000FF -:10C1400000000000000000000000000000000000EF -:10C15000000000000000000000000000FF000000E0 -:10C16000000000000000FF55FF5500000000000027 -:10C1700000000000000000000000006100078009CE -:10C18000200000000000000000000061002D800180 -:10C1900004000061002F00090000000000280000DA -:10C1A0000100000000280000000000000000000066 -:10C1B0000000000000000028000001A000000000B6 -:10C1C0000000000000000000000000000061000707 -:10C1D000800D000000000000000000000061002F42 -:10C1E000800D000000000028000005010000000094 -:10C1F000000000000000000000000000000000003F -:10C200003C3FFCFF00000000000000000F0F00009A -:10C210003C3C3C3C000000003CFCFFFC00000000FB -:10C22000000000000000000000000000000000000E -:10C2300000000000000000000000000000000000FE -:10C2400000000000000000000000000000000000EE -:10C2500000000000000000000000000000000000DE -:10C2600000000000000000000000000000000000CE -:10C2700000000000000000000000000000000000BE -:10C2800000003C3FFCFF00000000000000000F0F1A -:10C29000000000000000000000003CFCFFFC00006B -:10C2A000000000000000000000000000000000008E -:10C2B000000000000000000000000000000000007E -:10C2C000000000000000000000000000000000006E -:10C2D000000000000000000000000000000000005E -:10C2E000000000000000000000000000000000004E -:10C2F000000000000000000000000000000000003E -:10C30000000000000000000000000000000000002D -:10C31000F200FD003C3C3C3C00000000000000003E -:10C32000000000000000000000000000000000000D -:10C3300000000000000000000000000000000000FD -:10C3400000000000000000000000000000000000ED -:10C3500000000000000000000000000000000000DD -:10C3600000000000000000000000000000000000CD -:10C3700000000000000000000000000000000000BD -:10C3800000000000000000000000000000000000AD -:10C390000000F700F80000000000000000000000AE -:10C3A000000000000000000000000000000000008D -:10C3B000000000000000000000000000000000007D -:10C3C000000000000000000000000000000000006D -:10C3D000000000000000000000000000000000005D -:10C3E000000000000000000000000000000000004D -:10C3F00000000000000000002000000020000000FD -:10C4000000000004000000002002000000022000E4 -:10C4100020000000000000002000000020001000AC -:10C4200000000000000000002000000000002000CC -:10C43000200000000000000200002000000020009A -:10C4400020000000400040000000200040000000EC -:10C4500020002000880000000000200000002000D4 -:10C46000100000002000200000000000000200007A -:10C47000200020002000400000C00000000000005C -:10C480000002000200401002000000000000000056 -:10C4900000020002210010400002400200020000E1 -:10C4A00000024104400040000000000000000000C5 -:10C4B00000000000009000000004100000000000D8 -:10C4C0004000004000000000009000020000000258 -:10C4D000400200020002000200020000000000C052 -:10C4E000000400020002000410000002000200909C -:10C4F0000090400200000002000000000000000068 -:10C500000000000000000200000000000000000029 -:10C510000000000000000200000000000000000019 -:10C520000000000000000200000000080000000001 -:10C5300000000800080000400000000000000000AB -:10C5400002000000020000000200000010000000D5 -:10C55000000000000000000000400000000000009B -:10C5600000000000000000000000000400000000C7 -:10C570000000000000000000000000820000000039 -:10C580000000000000000008008400000000000817 -:10C59000000800000000000000000000000000088B -:10C5A000000000000000000800000000000000087B -:10C5B0000008000000000000000000000000000073 -:10C5C000000800080000000000080000000000084B -:10C5D0000008000800000000000800000000000043 -:10C5E000008400840000000000080000000000102B -:10C5F0000010001000000000000800000000000013 -:10C60000000000000000000000000000000000002A -:10C61000000000000000000000000005880000008D -:10C620000000000040000000880000004000000002 -:10C6300000000400040084002000900000000400BA -:10C64000880000000000000004000011900040007D -:10C650000400400000000000100040001000000036 -:10C6600000000400040004000000000000001000AE -:10C67000000000089008000084008800000000000E -:10C6800000000000000000000000000000000000AA -:10C69000000000000000000000000000000000009A -:10C6A00000000000090000400000100020400400CD -:10C6B00000000084000000000000022000000000D4 -:10C6C000000000000000000000000020002000002A -:10C6D0000000020000000000000002000000000056 -:10C6E000000000000000000000001000000000003A -:10C6F000050000000000080000200300009000007A -:10C700000000000000000000000000000000000029 -:10C7100000000000000000000000004100000000D8 -:10C720000000000000000000000000000000000009 -:10C7300000000000000000000000000000000000F9 -:10C7400000000000000000000000000000000000E9 -:10C7500004000000000000000000000000000000D5 -:10C7600000000000000000000000000008000000C1 -:10C7700000000000000008000000000000000011A0 -:10C7800000000000000000000000000000000000A9 -:10C7900000000000000000C00000000000000000D9 -:10C7A0000000000000000000000000000000008207 -:10C7B0000000000000000000000000000000000079 -:10C7C0000000000000000000000000000400000065 -:10C7D0000000000000000000000000000000000059 -:10C7E0000000000000000000000000000000000049 -:10C7F0000000000000001100000000000000000028 -:10C800000000000000000000000800000000000020 -:10C810000000000000000000000000000000000018 -:10C820000000000000000000000000000000000008 -:10C8300000000000000000080000000000000000F0 -:10C8400000000000000000000000000000000000E8 -:10C8500000000000000000000000000000000000D8 -:10C8600000000000000000000000000000000000C8 -:10C8700000000000000000000000000000000000B8 -:10C8800000000000000000000000000000000000A8 -:10C89000000000000000000009000000000000008F -:10C8A000000000000000004000880500000011901A -:10C8B00000020000000000001100118800000000CC -:10C8C000100010A0000000000000000000000000A8 -:10C8D0000090000000900020000000000000000018 -:10C8E0000000400000000000000000001190000067 -:10C8F000000000000000100040004000000409900B -:10C900000000000000900000000000000000000097 -:10C910000000000000000000000000000000000017 -:10C9200000000000000000000000000000000008FF -:10C9300000000000000000000000000000000000F7 -:10C9400000000000000800000000000000000000DF -:10C9500000000000000000000000000000000000D7 :10C9600000000000000000000000000000000000C7 :10C9700000000000000000000000000000000000B7 :10C9800000000000000000000000000000000000A7 :10C990000000000000000000000000000000000097 -:10C9A0000000000000000000000020040000000063 +:10C9A0000000000000000000000000000000000087 :10C9B0000000000000000000000000000000000077 :10C9C0000000000000000000000000000000000067 :10C9D0000000000000000000000000000000000057 @@ -134433,437 +130336,437 @@ :10CFF0000000000000000000000000000000000031 :10D000000000000000000000000000000000000020 :10D010000000000000000000000000000000000010 -:10D0200000000000200000000000000020000000C0 -:10D030000000200020000000200000000000000090 -:10D04000000020002100000020000000200000005F -:10D05000000020000000C0002000000000000000D0 -:10D060000000200000032000A0002000000220801B -:10D070000080000020048400200020000000400008 -:10D08000000000002000208020002000100420006C -:10D09000000000042000200000002000000020000C -:10D0A000000000002000000000020000000200005C -:10D0B000000040000000400200000000000000905E -:10D0C0000002000000900400000080020000000048 -:10D0D00000900002000240900000000000000000EC -:10D0E0004000000200A0000040000000000410000A -:10D0F00000041004409010011002000200024002DF -:10D1000000020000404000400920000000400000F4 -:10D110000000400240020040000200020002004005 -:10D1200000900000400000C020000000008000804F -:10D130000000000000000000A0400280004000400D -:10D1400001000000000000000000820020410041BA -:10D15000200020000804020400000000000000403D +:10D020000000000000000000000000000000000000 +:10D0300000000000000000000000000000000000F0 +:10D0400000000000000000000000000000000000E0 +:10D0500000000000000000000000000000000000D0 +:10D0600000000000000000000000000000000000C0 +:10D0700000000000000000000000000000000000B0 +:10D0800000000000000000000000000000000000A0 +:10D090000000000000000000000000000000000090 +:10D0A0000000000000000000000000000000000080 +:10D0B0000000000000000000000000000000000070 +:10D0C0000000000000000000000000000000000060 +:10D0D0000000000000000000000000000000000050 +:10D0E0000000000000000000000000000000000040 +:10D0F0000000000000000000000000000000000030 +:10D10000000000000000000000000000000000001F +:10D11000000000000000000000000000000000000F +:10D1200000000000000000000000000000000000FF +:10D1300000000000000000000000000000000000EF +:10D1400000000000000000000000000000000000DF +:10D1500000000000000000000000000000000000CF :10D1600000000000000000000000000000000000BF -:10D1700000000000000000000040000000080080E7 -:10D18000020000800000028000400000000000005B -:10D1900000000020008000800080080008000010CF -:10D1A0000010002004000020041080000000000493 -:10D1B000000400080000000000000000000400005F -:10D1C00000002000000800000008000000008000AF -:10D1D000000080088000000100010000000000083D -:10D1E00000000008000800000008000000000084A3 -:10D1F0000000008400080084000000840240004019 -:10D20000000400000420000800200084000040000A -:10D210000000000000090020002000200000008223 -:10D2200000000000000180080001800000040004EC -:10D2300000000000000300000005000000020004E0 -:10D2400000050020040004008400000002210221E7 -:10D25000900002080000000804030000020891C0CA -:10D260000000200000000000000800000000000492 -:10D270000000004000000000000820080008000036 -:10D2800000040000000400211020000040204100A4 -:10D29000400000030000000500059000022100008E -:10D2A00000004000000084000000000010080001A1 -:10D2B00000010000000000880000000000000001E4 -:10D2C000000100000001000000004000000080009C -:10D2D000800041008000000000000000000080008D -:10D2E0002002000480000000000000000000000098 -:10D2F000000000200000000000000000800000008E -:10D300000000000100000001000000010000000119 -:10D3100008000000000000001000000000000000F5 -:10D3200000001000000000000000000005000000E8 -:10D3300002000200020002000205000002000004D8 -:10D34000008000000000000000000000000300005A -:10D35000020502000000020202400000000000007E -:10D36000200000000000000000000000000010008D -:10D37000000000000000000000000021000000008C -:10D38000820010000000000000000000000000000B -:10D39000000000000003000000000000000000008A -:10D3A0000000000000040000000000000000000079 -:10D3B000000080008000800080008000000080006D -:10D3C00000012002000000840000000000000000B6 -:10D3D0000000808480000000808580000000000044 -:10D3E00000008800000000000000000000000000B5 +:10D1700000000000000000000000000000000000AF +:10D18000000000000000000000000000000000009F +:10D19000000000000000000000000000000000008F +:10D1A000000000000000000000000000000000007F +:10D1B000000000000000000000000000000000006F +:10D1C000000000000000000000000000000000005F +:10D1D000000000000000000000000000000000004F +:10D1E000000000000000000000000000000000003F +:10D1F000000000000000000000000000000000002F +:10D20000000000000000000000000000000000001E +:10D21000000000000000000000000000000000000E +:10D2200000000000000000000000000000000000FE +:10D2300000000000000000000000000000000000EE +:10D2400000000000000000000000000020000000BE +:10D2500000000000000000000000000000000000CE +:10D26000000000000000000000000000200000009E +:10D2700000000000000000000000000000000000AE +:10D280000000000000000000000000000000000896 +:10D29000000000021000000000000040000000003C +:10D2A000000000000041000000000000000000112C +:10D2B000000000000000000000000000000000006E +:10D2C000000000000000000000000000000000005E +:10D2D000000000000000000000000000000000004E +:10D2E000000000000000000000000000000000003E +:10D2F000000000000000000000000000000000002E +:10D30000000000000000000000000000000010000D +:10D31000000000000000000000000000000000000D +:10D3200000000000000000000000000000000000FD +:10D3300000000000000000000000000000000000ED +:10D3400000000000000000000000000000000010CD +:10D3500000000000000000000000000000000000CD +:10D3600000000000000000000200000000000010AB +:10D3700000000000000000000000000000000000AD +:10D38000000000000000000000000000000000009D +:10D39000001000000000000000000000000000007D +:10D3A000000000000000000000000000000000007D +:10D3B000001000000000000000000000000000005D +:10D3C000000000000000000000000000000000005D +:10D3D000000000000000000000000000000000004D +:10D3E000000000000000000000000000000000003D :10D3F000000000000000000000000000000000002D :10D40000000000000000000000000000000000001C -:10D410000000000000840000000000000000000088 -:10D4200000000000000008000000000000000000F4 -:10D4300000000000000020000004000082058200BF -:10D440008200020082000000000882042002000521 -:10D4500040002002000000020185000020000200C0 -:10D46000200020080000008800C00000000000111B +:10D41000000000000000000000000000000000000C +:10D4200000000000000000000000000000000000FC +:10D43000000000000090000000000000000000005C +:10D4400000000000000000000000000000000000DC +:10D4500008000800000000000800080000000000AC +:10D4600000000000000000000000000000000000BC :10D4700000000000000000000000000000000000AC :10D48000000000000000000000000000000000009C -:10D4900000000000820000000000000000000010FA -:10D4A0000005000000000000000000000000000077 -:10D4B00000000000000000008000000100000000EB -:10D4C000000000008000400000000000000180001B -:10D4D0000000000080000020000002404100C00069 -:10D4E000840080008000000000400005000400006F -:10D4F00000000000002000004000000000000000CC -:10D5000040000000110000040000000000000000C6 -:10D5100000000000000000000000000040040000C7 -:10D5200000000000000000000000000010000020CB -:10D53000000005000500110000000021000000218E -:10D540002100028083008280000482000004000029 -:10D550000008000000210040210300080000000036 -:10D5600000842100032102840040004000000040AC -:10D570000000002100210021000000000000000048 -:10D58000000000000000000000000000000000217A -:10D59000000000210000000000000000000000006A -:10D5A0000000000500050000000000040004000069 +:10D490000000000002000000000000000400000086 +:10D4A0000000000000000000000000000000040078 +:10D4B0000000400010008400400004000800040048 +:10D4C000000000000000000000000000000000005C +:10D4D000000000000000000000000000000000004C +:10D4E000000000000000000000000000000000003C +:10D4F000000000000000000000000000000000002C +:10D50000000000000000000000000000000000001B +:10D51000000000000000000000000000000000000B +:10D5200000000000000010000000000000000000EB +:10D530000000000000000000000000000000008863 +:10D5400000000000000000000000000000000000DB +:10D5500000000000000000000000000000000000CB +:10D5600000000000000000000000000000000000BB +:10D5700000000000000000000000000000000000AB +:10D58000000000000000000000000000000000009B +:10D59000000000000000000000000000000000008B +:10D5A000000000000000000000000000000000007B :10D5B000000000000000000000000000000000006B -:10D5C00000000284804002000040000000000001D2 -:10D5D0000000000000000000000104000000410005 -:10D5E00011002140820482008040000100010000FF -:10D5F000000100000000000000000000000000002A +:10D5C000000000000000000000000000000000005B +:10D5D000000000000000000000000000000000004B +:10D5E000000000000000000000000000000000003B +:10D5F000000000000000000000000000000000002B :10D60000000000000000000000000000000000001A -:10D6100000000000000000A000000000000000006A +:10D61000000000000000000000000000000000000A :10D6200000000000000000000000000000000000FA -:10D6300000000000000020000000000011C04000B9 -:10D640000000000100C000000000000010A1102038 -:10D650000041100200A100020002000200C001848B -:10D660000200000000C084000100900000C001041E +:10D6300000000000000000000000000000000000EA +:10D6400000000000000000000000000000000000DA +:10D6500000000000000000000000000000000000CA +:10D6600000000000000000000000000000000000BA :10D6700000000000000000000000000000000000AA -:10D680000000000000000000000000000001000099 -:10D6900000000000000000020000009000000000F8 -:10D6A0000000000000000008001000000000000062 -:10D6B0000000000000000000000000000000918257 -:10D6C0009010021100030080000004000000838914 -:10D6D00021830903800800910000008800800080F9 -:10D6E0000300840000000085000003000000029099 -:10D6F00008C0020500050000000000000000000056 -:10D700000000000000000000000200000900000806 -:10D710000000000002000000000000000000000007 -:10D720000000000000000000008000000000000079 -:10D7300000000000000000000000000000000000E9 -:10D740000900102111098000000000000000800085 -:10D750008400004180030305000000000000000079 -:10D76000000000000008808005000000000080002C -:10D77000038800000941892100000000000000002A -:10D780000000000000000000000000000200000097 -:10D790000000090000000800000000000000000078 -:10D7A0000000000000000080000080000020000059 -:10D7B00000000000000000000000000000800000E9 -:10D7C0000080010000000001C00000000000000017 -:10D7D000C00005841000A002080000000000004006 -:10D7E0000000000000000000C00200000000000077 -:10D7F000C000001000000000C00100000000000098 +:10D68000000000000000000000000000000000009A +:10D69000000000000000000000000000000000008A +:10D6A000000000000000000000000000000000007A +:10D6B000000000000000000000000000000000006A +:10D6C000000000000000000000000000000000005A +:10D6D000000000000000000000000000000000004A +:10D6E000000000000000000000000000000000003A +:10D6F000000000000000000000000000000000002A +:10D700000000000000000000000000000000000019 +:10D710000000000000000000000000880020000061 +:10D7200008000000000000000000000000001000E1 +:10D730000000000000000000050000200020002084 +:10D7400011000000000000001100000000000000B7 +:10D7500000000000000000000000000000000000C9 +:10D7600000000000000000000000000000000000B9 +:10D7700000000000000000000000000000000000A9 +:10D780000000000000000000000000000000000099 +:10D790000000000000000000000000000000000089 +:10D7A0000000000000000000000000000000000079 +:10D7B0000000000000000000000000000000000069 +:10D7C0000000000000000000000000000000000059 +:10D7D0000000000000000000000000000000000049 +:10D7E0000000000000000000000000000000000039 +:10D7F0000000000000000000000000000000000029 :10D800000000000000000000000000000000000018 -:10D810000000000000000000000000000000020006 -:10D8200000000000000000000010000008000000E0 -:10D8300000000000000000000000000000000008E0 -:10D840000000000800000000000003C188000088FC -:10D85000000000C0080301A000020805000000004D -:10D860000000100100010001008401C188000000D7 -:10D87000010000C000022000010101C00000000002 +:10D810000000000000000000000000000000000008 +:10D8200000000000000000000000000000000000F8 +:10D8300000000000000000000000000000000000E8 +:10D8400000000000000000000000000000000000D8 +:10D8500000000000000000000000000000000000C8 +:10D8600000000000000000000000000000000000B8 +:10D8700000000000000000000000000000000000A8 :10D880000000000000000000000000000000000098 -:10D890000001000000000000000100000000000284 -:10D8A0000000000000100000000000000000000860 -:10D8B00000000088000000000000000000000000E0 -:10D8C00000000200000000000011004191830000F0 -:10D8D0000000000010808004048010C180880000D7 -:10D8E0000008201180110311004000410488000548 -:10D8F00000090500118000C00910102110C00000AF +:10D890000000000000000000000000000000000088 +:10D8A0000000000000000000000000000000000078 +:10D8B0000000000000000000000000000000000068 +:10D8C0000000000000000000000000000000000058 +:10D8D0000000000000000000000000000000000048 +:10D8E0000000000000000000000000000000000038 +:10D8F0000000000000000000000000000000000028 :10D900000000000000000000000000000000000017 -:10D9100000020010000000000009000800000000E4 +:10D910000000000000000000000000000000000007 :10D9200000000000000000000000000000000000F7 -:10D930000080000000000000000000000000000067 -:10D94000020000000000000090021109418009005F -:10D950008000000000000000A1A180C10080080834 -:10D96000800080000000000000090010008080009E -:10D970008580000000000900A10820809100094076 +:10D9300000000000000000000000000000000000E7 +:10D9400000000000000000000000000000000000D7 +:10D9500000000000000000000000000000000000C7 +:10D9600000000000000000000000000000000000B7 +:10D9700000000000000000000000000000000000A7 :10D980000000000000000000000000000000000097 -:10D990000000020008000000000009080000080064 -:10D9A0000000000000020000000080088009000064 -:10D9B00000008000000900000000000000000000DE -:10D9C00000000000000200000000C002000100840E -:10D9D0000100C00000000088880011A10411880423 -:10D9E00041010800040000008800000000000084DD -:10D9F0000800C008000000888800C1010002020081 -:10DA00000100000000000000000000000000000015 -:10DA1000000000000088000000000000000100007D -:10DA200001000000020000000088880008000200D9 -:10DA30008800000008000000001000000000000046 -:10DA4000000000000000000100000000410000E0B4 -:10DA500000000000000000E000000000418200E043 -:10DA600007004200000000E000000000418200E0EA -:10DA700007000000410000E000000000810000E01D +:10D990000000000000000000000000000000000087 +:10D9A0000000000000000000000000000000000077 +:10D9B0000000000000000000000000000000000067 +:10D9C0000000000000000000000000000000000057 +:10D9D0000000000000000000000000000000000047 +:10D9E0000000000000000000000000000000000037 +:10D9F0000000000000000000000000000000000027 +:10DA00000000000000000000000000000000000016 +:10DA10000000000000000000000000000000000006 +:10DA200000000000000000000000000000000000F6 +:10DA300000000000000000000000000000000000E6 +:10DA400000000000000000000000000000000000D6 +:10DA500000000000000000000000000000000000C6 +:10DA600000000000000000000000000000000000B6 +:10DA700000000000000000000000000000000000A6 :10DA80000000000000000000000000000000000096 -:10DA9000000000000000410000E0000000008100E4 -:10DAA00000E000000000008200000700000000818C -:10DAB00000000700000000820000070000000000D6 -:10DAC000000000000000000000000800000000004E -:10DAD000FFFF0000AAAA00003C3C0000F0F002801A -:10DAE00008200000102069000069000000003C3C94 -:10DAF0003C3C000000FF00003C3C0000FFFF000039 -:10DB0000F0F000003C3C00000000000000000000BD +:10DA90000000000000000000000000000000000086 +:10DAA0000000000000000000000000000000000076 +:10DAB0000000000000000000000000000000000066 +:10DAC0000000000000000000000000000000000056 +:10DAD0000000000000000000000000000000000046 +:10DAE0000000000000000000000000000000000036 +:10DAF0000000000000000000000000000000000026 +:10DB00000000000000000000000000000000000015 :10DB10000000000000000000000000000000000005 -:10DB200000000000000000003C3C00000000C3C3F7 -:10DB3000A0F5FFFF00000000FFFF000000C300C3CE +:10DB200000000000000000000000000000000000F5 +:10DB300000000000000000000000000000000000E5 :10DB400000000000000000000000000000000000D5 -:10DB5000000000000000AAAA00003C3C0000F0F019 -:10DB6000014004101020000069000069000000005E -:10DB70003C3C3C3C000000FF00003C3C000000003E -:10DB80000000F0F000003C3C00000000000000003D +:10DB500000000000000000000000000000000000C5 +:10DB600000000000000000000000000000000000B5 +:10DB700000000000000000000000000000000000A5 +:10DB80000000000000000000000000000000000095 :10DB90000000000000000000000000000000000085 -:10DBA000000000000000000000003C3C00000000FD -:10DBB000C3C3A0F5FFFF000000000000000000C389 -:10DBC00000C3000000000000000000000000000092 -:10DBD000000055550000FFFF0000FFFF000000009F -:10DBE000FFFF040100001055515506900000000091 -:10DBF0000000FF000000FFFF0000FFFF0000FFFF2C -:10DC00000000FF000000AAAAFFFF000000000000C3 +:10DBA0000000000000000000000000000000000075 +:10DBB0000000000000000000000000000000000065 +:10DBC0000000000000000000000000000000000055 +:10DBD0000000000000000000000000000000000045 +:10DBE0000000000000000000000000000000000035 +:10DBF0000000000000000000000000000000000025 +:10DC00000000000000000000000000000000000014 :10DC10000000000000000000000000000000000004 -:10DC200000000000000000000000000000000F0FD6 -:10DC3000F0F0F0F000000000000000000000FF0025 -:10DC4000C3C3C3C3000000000000000000000000C8 -:10DC5000000000005555000000000000000000001A -:10DC6000FFFFFFFF104000000000000006900000D2 -:10DC700000000000FF0000000000000000000000A5 -:10DC800000000000FF000000AAAAFFFF0000000043 +:10DC200000000000000000000000000000000000F4 +:10DC300000000000000000000000000000000000E4 +:10DC400000000000000000000000000000000000D4 +:10DC500000000000000000000000000000000000C4 +:10DC600000000000000000000000000000000000B4 +:10DC700000000000000000000000000000000000A4 +:10DC80000000000000000000000000000000000094 :10DC90000000000000000000000000000000000084 :10DCA0000000000000000000000000000000000074 -:10DCB0000F0F000000000000000000000000000046 -:10DCC000FF00000000000000000000000000000055 -:10DCD00000000000000040E380018021920240E348 -:10DCE0008007002D82020061002D8011000000617C -:10DCF0004002000900004573802F802D920240E30E -:10DD000080018021920240E38007802D8202000082 +:10DCB0000000000000000000000000000000000064 +:10DCC0000000000000000000000000000000000054 +:10DCD0000000000000000000000000000000000044 +:10DCE0000000000000000000000000000000000034 +:10DCF0000000000000000000000000000000000024 +:10DD00000000000000000000000000000000000013 :10DD10000000000000000000000000000000000003 -:10DD20000061000180010000006100058001000029 -:10DD30000000002800000000001000280000000083 -:10DD400000000028000000000000000000000000AB -:10DD500005000A08050000A0000C00000000000FEC -:10DD6000000000000000000028280000000000C3A0 -:10DD70000000000000F0FFF000000000000F55C39D -:10DD80003C3C00003030303024810000000C00307A +:10DD200000000000000000000000000000000000F3 +:10DD300000000000000000000000000000000000E3 +:10DD400000000000000000000000000000000000D3 +:10DD500000000000000000000000000000000000C3 +:10DD600000000000000000000000000000000000B3 +:10DD700000000000000000000000000000000000A3 +:10DD80000000000000000000000000000000000093 :10DD90000000000000000000000000000000000083 -:10DDA00000000000FF00C0C0C0C000000F0FC0C0D6 -:10DDB000C0C00000000000000000000000000000E3 +:10DDA0000000000000000000000000000000000073 +:10DDB0000000000000000000000000000000000063 :10DDC0000000000000000000000000000000000053 -:10DDD00000000000000000000000000C0000000037 +:10DDD0000000000000000000000000000000000043 :10DDE0000000000000000000000000000000000033 -:10DDF00000000000000000F0FFF000000000FF0F36 -:10DE000055C33C3C000030303030000000000003BF -:10DE100000C0000000000000000000000000000042 -:10DE2000000000000000FF00C0C0C0C000000F0FD5 -:10DE3000C0C0C0C0000000000000000000000000E2 +:10DDF0000000000000000000000000000000000023 +:10DE00000000000000000000000000000000000012 +:10DE10000000000000000000000000000000000002 +:10DE200000000000000000000000000000000000F2 +:10DE300000000000000000000000000000000000E2 :10DE400000000000000000000000000000000000D2 -:10DE50000000000000000000000000003000000092 -:10DE60003000300000000000000000000000000052 -:10DE7000000082820F0F0F0F000000000000000062 -:10DE800000000000FFFF00003C3C3C3C0600000698 -:10DE90004182142800000000000000000000000083 -:10DEA00000000000000000003C3C0F0F0F0F0000BE -:10DEB000000000C300C300000000000000000000DC +:10DE500000000000000000000000000000000000C2 +:10DE600000000000000000000000000000000000B2 +:10DE700000000000000000000000000000000000A2 +:10DE80000000000000000000000000000000000092 +:10DE90000000000000000000000000000000000082 +:10DEA0000000000000000000000000000000000072 +:10DEB0000000000000000000000000000000000062 :10DEC0000000000000000000000000000000000052 -:10DED0000000000000000000000000000000300012 -:10DEE0000000000000000000000000000000D22D33 -:10DEF000FFFF00000000FFFF000000000000000026 -:10DF00000000000000000000000000000000900081 -:10DF10000090418214280000000000000000000072 -:10DF2000000000000000000000003C3C0000000079 -:10DF30000000000000C300C300000000000000005B +:10DED0000000000000000000000000000000000042 +:10DEE0000000000000000000000000000000000032 +:10DEF0000000000000000000000000000000000022 +:10DF00000000000000000000000000000000000011 +:10DF10000000000000000000000000000000000001 +:10DF200000000000000000000000000000000000F1 +:10DF300000000000000000000000000000000000E1 :10DF400000000000000000000000000000000000D1 :10DF500000000000000000000000000000000000C1 -:10DF600010002000200000002000200020002004DD -:10DF700020000100210020000080200020800004FB -:10DF80008800200020000000200020002000200049 -:10DF9000200400002000200084042000200400044D -:10DFA000000320002000200000002000201120009D -:10DFB000200020020000200020004000200020005F -:10DFC0000000C00220002000000088412000200046 -:10DFD000200020000000200020002140210020809F -:10DFE0000004200400000002000000000000000007 -:10DFF0000000000204000400000000400000212096 -:10E0000010002002000000020002009040004002C8 -:10E0100000020001009000020002400500004000E4 -:10E020004002000040000000008210C040904040CC -:10E030000002080000900002000000020002400000 -:10E0400000001000109000900090000000004000C0 -:10E050000000000000000000000200400402040074 -:10E0600000204040000000000000000020002000D0 -:10E0700000C0000400000400040000000009084182 -:10E080000000020900000000000000002000200045 -:10E0900020400840010002000000000000000000D5 -:10E0A0000004004000000200100002000000020016 -:10E0B000000000400840A000000000000000000038 -:10E0C0000000000000000000000000000040000010 -:10E0D0000000000000400000000000000000018877 -:10E0E00085000200094000000000000800088008C8 -:10E0F000800800040009000880088008000800006B -:10E10000800800080008000008000008008480085B -:10E1100080088000000820080008000800080008A7 -:10E1200002080008000800000008000800080008B5 -:10E13000410800080008000800080008000800085E -:10E14000000800080008000800100008000800840B -:10E150000008000800840008000800080008000803 -:10E1600002040208C00802080000000000000000CD -:10E17000000400000000000000000000000000009B -:10E180000080000000004000002100100000000896 -:10E19000104000000000000040210000000000408E -:10E1A00000000020000000000000402100000000EE -:10E1B0000000000000210021002104219000020045 -:10E1C00000000000400440040004000800000000BB -:10E1D000000000000000000400009000900000001B -:10E1E00040054000408000040100000000000000E5 -:10E1F0000000008500000000000000000000020098 -:10E2000000820020000000820000000800000000E2 -:10E210000082000004A04000000000000000000098 -:10E220000084000000A000000000000000000000CA -:10E2300000000000000000000000000000000000DE -:10E2400000000000000000010001000100000200C9 -:10E2500000000082000000000000000010A0040088 -:10E2600040A000000400000400010400820000003F -:10E27000000000000000000000000000820000001C -:10E280000000000000000005000000000000000980 -:10E2900000090009000000000000008000000000EC -:10E2A000000000002000000000000000000000004E -:10E2B00000400000000000000040000000000000DE -:10E2C0000000000000000800000000000000000046 +:10DF600000000000000000000000000000000000B1 +:10DF700000000000000000000000000000000000A1 +:10DF80000000000000000000000000000000000091 +:10DF90000000000000000000000000000000000081 +:10DFA0000000000000000000000000000000000071 +:10DFB0000000000000000000000000000000000061 +:10DFC0000000000000000000000000000000000051 +:10DFD0000000000000000000000000000000000041 +:10DFE0000000000000000000000000000000000031 +:10DFF0000000000000000000000000000000000021 +:10E000000000000000000000000000000000000010 +:10E010000000000000000000000000000000000000 +:10E0200000000000000000000000000000000000F0 +:10E0300000000000000000000000000000000000E0 +:10E0400000000000000000000000000000000000D0 +:10E0500000000000000000000000000000000000C0 +:10E0600000000000000000000000000000000000B0 +:10E0700000000000000000000000000000000000A0 +:10E080000000000000000000000000000000000090 +:10E090000000000000000000000000000000000080 +:10E0A0000000000000000000000000000000000070 +:10E0B0000000000000000000000000000000000060 +:10E0C0000000000000000000000000000000000050 +:10E0D0000000000000000000000000000000000040 +:10E0E0000000000000000000000000000000000030 +:10E0F0000000000000000000000000000000000020 +:10E10000000000000000000000000000000000000F +:10E1100000000000000000000000000000000000FF +:10E1200000000000000000000000000000000000EF +:10E1300000000000000000000000000000000000DF +:10E1400000000000000000000000000000000000CF +:10E1500000000000000000000000000000000000BF +:10E1600000000000000000000000000000000000AF +:10E17000000000000000000000000000000000009F +:10E18000000000000000000000000000000000008F +:10E19000000000000000000000000000000000007F +:10E1A000000000000000000000000000000000006F +:10E1B000000000000000000000000000000000005F +:10E1C000000000000000000000000000000000004F +:10E1D000000000000000000000000000000000003F +:10E1E000000000000000000000000000000000002F +:10E1F000000000000000000000000000000000001F +:10E200000000000000000004000000000000000406 +:10E2100000000000000000040400000000000000F6 +:10E2200000000000000000000000000000000000EE +:10E2300000000000000000002000000000000000BE +:10E2400000000000000000000004000400000000C6 +:10E25000000000000000000000002000000000009E +:10E2600000000000000000000000040000000000AA +:10E270000000000000000000000088000000000016 +:10E28000000000000000000000000000000400008A +:10E29000000000000000000000000000000000007E +:10E2A000000000000000000000000000000000006E +:10E2B000000000000000000000000000000000005E +:10E2C000000000000000000000000000100000003E :10E2D000000000000000000000000000000000003E :10E2E000000000000000000000000000000000002E :10E2F000000000000000000000000000000000001E :10E30000000000000000000000000000000000000D -:10E3100000000000000000000000000000040000F9 -:10E32000000000000000800000000000000000006D -:10E3300000000000000000000300000000000000DA -:10E34000000000000000000000000000000000408D +:10E3100000000000000000000000000000000000FD +:10E3200000000000000000000000000000000000ED +:10E3300000000000000000000000000000000000DD +:10E3400000000000000000000000000000000000CD :10E3500000000000000000000000000000000000BD -:10E360000010050000000000000000000000000098 -:10E370000000000000000000048000809080008009 -:10E380000000000000000000000004000040000049 -:10E3900000000008000000400080008001080080AC -:10E3A0000000000440000000000000040000000025 +:10E3600000000000000000000000000000000000AD +:10E37000000000000000000000000000000000009D +:10E38000000000000000000000000000000000008D +:10E39000000000000000000000000000000000007D +:10E3A000000000000000000000000000000000006D :10E3B000000000000000000000000000000000005D -:10E3C0000000000000044000000000000000000009 -:10E3D00000000800000000000000000000000040F5 -:10E3E000C000A0000000404000000000000000004D -:10E3F000000000000000000200000004000400040F -:10E40000000400A00000000200A0000800000001BD -:10E41000000000040000000400000004000420824A -:10E42000000400002004208400000000040000001C -:10E4300000000000000000000000000040200088F4 -:10E4400000820000000000040004008800020200B6 -:10E4500000A00004000000000000002000000000F8 -:10E460000004008200000000000000000000000026 -:10E4700000A00020000000000000000000001000CC -:10E48000000000000021000000000000000000006B -:10E49000000000000000001000000000000000006C -:10E4A000000000001000000000000000000000005C -:10E4B000002100210000000000000000000000001A +:10E3C000000000000000000000000000000000004D +:10E3D000000000000000000000000000000000003D +:10E3E000000000000000000000000000000000002D +:10E3F000000000000000000000000000000000001D +:10E40000000000000000000000000000000000000C +:10E4100000000000000000000000000000000000FC +:10E4200000000000000000000000000000000000EC +:10E4300000000000000000000000000000000000DC +:10E4400000000000000000000000000000000000CC +:10E4500000000000000000000000000000000000BC +:10E4600000000000000000000400000000000000A8 +:10E470000000000000000000880000008400000090 +:10E48000000000000000000000000000000000008C +:10E49000000000000000000000000000000000007C +:10E4A000000000000000000000000000000000006C +:10E4B000000000000000000000000000000000005C :10E4C000000000000000000000000000000000004C -:10E4D0000000000000000000000000000000080034 -:10E4E00000000000000000000000C000000000006C -:10E4F0000000000000040000000000000000000018 -:10E50000000000000000000000000000000000000B +:10E4D000000000000000000000000000000000003C +:10E4E0000000000000000400000000000000040024 +:10E4F000000000000000000000000000000000001C +:10E500000000000008000000000000000000000003 :10E5100000000000000000000000000000000000FB :10E5200000000000000000000000000000000000EB :10E5300000000000000000000000000000000000DB :10E5400000000000000000000000000000000000CB :10E5500000000000000000000000000000000000BB -:10E56000000000001000000000000000000000009B -:10E570000000100200000001000000000000000088 -:10E5800000000001C00000000000000000000000CA -:10E5900000900000000000000000000000000000EB -:10E5A0000000000101000001000100000000000067 +:10E5600000000000000000000000000000000000AB +:10E570000000000000000200000000000000000099 +:10E58000000000000000000000000000000000008B +:10E59000000000000000000000000000000000007B +:10E5A000000000000000000000000000000000006B :10E5B000000000000000000000000000000000005B :10E5C000000000000000000000000000000000004B -:10E5D000000000000000010000000000000000003A +:10E5D000000000000000000000000000000000003B :10E5E000000000000000000000000000000000002B -:10E5F0000000000190000100820100000000000006 -:10E6000000000009004004000000000000000000BD -:10E6100000000400000000000000000000000000F6 -:10E620000000000000204000002000110000002138 -:10E6300000110000000008000000000000000000C1 +:10E5F000000000000000000000000000000000001B +:10E60000000000000000000000000000000000000A +:10E6100000000000000000000000000000000000FA +:10E6200000000000000000000000000000000000EA +:10E6300000000000000000000000000000000000DA :10E6400000000000000000000000000000000000CA -:10E65000000000000000000040000000000000007A +:10E6500000000000000000000000000000000000BA :10E6600000000000000000000000000000000000AA -:10E67000000000000020800004008008000000006E -:10E68000000000000980040040002000000000801D -:10E6900000000000000000110080000000000000E9 -:10E6A000000000000000000040002000000000000A -:10E6B0000000000000050000000000000000000055 +:10E67000000000000000000000000000000000009A +:10E68000000000000000000000000000000000008A +:10E69000000000000000000000000000000000007A +:10E6A000000000000000000000000000000000006A +:10E6B000000000000000000000000000000000005A :10E6C000000000000000000000000000000000004A -:10E6D000000000000000000004000800000000002E +:10E6D000000000000000000000000020000000001A :10E6E000000000000000000000000000000000002A -:10E6F0000000000000002000000008000080000072 -:10E7000000000000000000080000010001000000FF -:10E7100000040000000000000000004000000000B5 -:10E7200000000000000000000000010001000000E7 +:10E6F0000000000000000020000000000000008872 +:10E700000000000000000000000000000000000009 +:10E7100000000000000000000000000000000000F9 +:10E7200000000000000000000000000000000000E9 :10E7300000000000000000000000000000000000D9 :10E7400000000000000000000000000000000000C9 -:10E7500000000000000000000000000001000000B8 +:10E7500000000000000000000000000000000000B9 :10E7600000000000000000000000000000000000A9 -:10E77000000000000000000001A000900100000265 -:10E780000000000000000000000001010000000087 -:10E790000000000002000000048200A0000002004F -:10E7A0000000000000000000000100000000000167 +:10E770000000000000000000000000000000000099 +:10E780000000000000000000000000000000000089 +:10E790000000000000000000000000000000000079 +:10E7A0000000000000000000000000000000000069 :10E7B0000000000000000000000000000000000059 :10E7C0000000000000000000000000000000000049 -:10E7D0000000000000000000000000000000000138 +:10E7D0000000000000000000000000000000000039 :10E7E0000000000000000000000000000000000029 -:10E7F0000000000000000000000000010000040113 -:10E800008400000000000000000000092040414199 -:10E8100000000000000080000000000000800000F8 -:10E820008000000000000000000000200000000048 -:10E8300000200000000000000000000000000000B8 +:10E7F0000000000000000000000000000000000019 +:10E800000000000000000000000000000000000008 +:10E8100000000000000000000000000000000000F8 +:10E8200000000000000000000000000000000000E8 +:10E8300000000000000000000000000000000000D8 :10E8400000000000000000000000000000000000C8 -:10E8500000000000000000000000000000040000B4 -:10E8600000080000000000000000000000000000A0 -:10E870000000000000000000000000002020000058 -:10E8800080088000000000000000000040044000FC -:10E8900041000000000000020000000000028004AF -:10E8A0000000000000000000000000004000000028 -:10E8B0002000000000000000000000000000000038 +:10E8500000000000000000000000000000000000B8 +:10E8600000000000000000000000000000000000A8 +:10E870000000000000000000000000000000000098 +:10E880000000000000000000000000000000000088 +:10E890000000000000000000000000000000000078 +:10E8A0000000000000000000000000000000000068 +:10E8B0000000000000000000000000000000000058 :10E8C0000000000000000000000000000000000048 -:10E8D0000000000000000000000000000000040034 -:10E8E0000000100000000000000000000000000018 -:10E8F00000000000000000000000000000000811FF -:10E9000000008091000000000000000000000100F5 -:10E910000100000000000000000000000000820074 -:10E9200020010000000000000000000000000100C5 -:10E9300000000100000000000000000000000000D6 +:10E8D0000000000000000000000000000000000038 +:10E8E0000000000000000000000000000000000028 +:10E8F0000000000000000000000000000000000018 +:10E900000000000000000000000000000000000007 +:10E9100000000000000000000000000000000000F7 +:10E9200000000000000000000000000000000000E7 +:10E9300000000000000000000000000000000000D7 :10E9400000000000000000000000000000000000C7 :10E9500000000000000000000000000000000000B7 :10E9600000000000000000000000000000000000A7 :10E970000000000000000000000000000000000097 -:10E98000010100000841000000000000000000003C -:10E99000410000E000000000000600000700000049 -:10E9A00000820000070000000000000000000000DE -:10E9B000410000E000000000000000E00000000056 -:10E9C000600000E000000000000000000000000007 +:10E980000000000000000000000000000000000087 +:10E990000000000000000000000000000000000077 +:10E9A0000000000000000000000000000000000067 +:10E9B0000000000000000000000000000000000057 +:10E9C0000000000000000000000000000000000047 :10E9D0000000000000000000000000000000000037 -:10E9E0000000600000E000000000000000000000E7 +:10E9E0000000000000000000000000000000000027 :10E9F0000000000000000000000000000000000017 -:10EA00000000600000E007040000000000000000BB +:10EA00000000000000000000000000000000000006 :10EA100000000000000000000000000000000000F6 -:10EA20000000FFFFFF66FCFCFCFC00000000000093 +:10EA200000000000000000000000000000000000E6 :10EA300000000000000000000000000000000000D6 :10EA400000000000000000000000000000000000C6 :10EA500000000000000000000000000000000000B6 :10EA600000000000000000000000000000000000A6 :10EA70000000000000000000000000000000000096 -:10EA8000000000000000F0F00000FFFF00000000A8 +:10EA80000000000000000000000000000000000086 :10EA90000000000000000000000000000000000076 -:10EAA00000000000FFFF9900FCFCFCFC00000000DF +:10EAA0000000000000000000000000000000000066 :10EAB0000000000000000000000000000000000056 :10EAC0000000000000000000000000000000000046 :10EAD0000000000000000000000000000000000036 :10EAE0000000000000000000000000000000000026 :10EAF0000000000000000000000000000000000016 -:10EB00000000000000000000F0F000000000000025 +:10EB00000000000000000000000000000000000005 :10EB100000000000000000000000000000000000F5 :10EB200000000000000000000000000000000000E5 :10EB300000000000000000000000000000000000D5 @@ -134873,257 +130776,257 @@ :10EB70000000000000000000000000000000000095 :10EB80000000000000000000000000000000000085 :10EB90000000000000000000000000000000000075 -:10EBA00000000000000000000000FFFF0000000067 +:10EBA0000000000000000000000000000000000065 :10EBB0000000000000000000000000000000000055 :10EBC0000000000000000000000000000000000045 :10EBD0000000000000000000000000000000000035 :10EBE0000000000000000000000000000000000025 :10EBF0000000000000000000000000000000000015 -:10EC00000000000000000000000066660000FFFF3A +:10EC00000000000000000000000000000000000004 :10EC100000000000000000000000000000000000F4 -:10EC2000000000000000000000006666666600004C +:10EC200000000000000000000000000000000000E4 :10EC300000000000000000000000000000000000D4 :10EC400000000000000000000000000000000000C4 :10EC500000000000000000000000000000000000B4 :10EC600000000000000000000000000000000000A4 :10EC70000000000000000000000000000000000094 -:10EC800000000000000000000000000066660000B8 -:10EC90000000000000000000000000000061000112 -:10ECA0008001000000000A280500000080100028F4 -:10ECB00000100400000000000000000000610001DE -:10ECC0008001000000610002000D000000650007E7 -:10ECD000800D0000000000000000000000000000A7 -:10ECE00000000000000000000000000000000061C3 -:10ECF000000580010000000000000000000000008E -:10ED00000000000000000000000000000000157975 -:10ED10002A01854104A80000000000000000000551 -:10ED200000000008000800000000000000000000D3 -:10ED300000000000000000000000000000000F0FB5 -:10ED4000000000003C3C000000000000000000004B +:10EC80000000000000000000000000000000000084 +:10EC90000000000000000000000000000000000074 +:10ECA0000000000000000000000000000000000064 +:10ECB0000000000000000000000000000000000054 +:10ECC0000000000000000000000000000000000044 +:10ECD0000000000000000000000000000000000034 +:10ECE0000000000000000000000000000000000024 +:10ECF0000000000000000000000000000000000014 +:10ED00000000000000000000000000000000000003 +:10ED100000000000000000000000000000000000F3 +:10ED200000000000000000000000000000000000E3 +:10ED300000000000000000000000000000000000D3 +:10ED400000000000000000000000000000000000C3 :10ED500000000000000000000000000000000000B3 :10ED600000000000000000000000000000000000A3 -:10ED700000000F0F00C300C30000000000000000EF +:10ED70000000000000000000000000000000000093 :10ED80000000000000000000000000000000000083 -:10ED9000AAAA000000C300C3000000000000000099 -:10EDA000000500000008000800000000000000004E +:10ED90000000000000000000000000000000000073 +:10EDA0000000000000000000000000000000000063 :10EDB0000000000000000000000000000000000053 -:10EDC0000F0F000000003C3C0000000000000000AD +:10EDC0000000000000000000000000000000000043 :10EDD0000000000000000000000000000000000033 :10EDE0000000000000000000000000000000000023 -:10EDF000000000000F0F00C300C30000000000006F +:10EDF0000000000000000000000000000000000013 :10EE00000000000000000000000000000000000002 -:10EE10000000AAAA000000C300C300000000000018 -:10EE2000000000550000000030000000000000005D +:10EE100000000000000000000000000000000000F2 +:10EE200000000000000000000000000000000000E2 :10EE300000000000000000000000000000000000D2 -:10EE400000003C003C00000000FFCFCF0C0C000095 +:10EE400000000000000000000000000000000000C2 :10EE500000000000000000000000000000000000B2 :10EE600000000000000000000000000000000000A2 -:10EE70000000000000000000000F000F0000000074 -:10EE80000000000000000000000000000000000082 -:10EE90000000000000003C3C00C300C30000000074 -:10EEA0000000000000000000000030000000000032 +:10EE70000000000000000000000000000000000092 +:10EE80000000000000000000000200000000000080 +:10EE90000000000000000000000000000000000072 +:10EEA0000000000000000000000000000000000062 :10EEB0000000000000000000000000000000000052 -:10EEC000000000003C003C00000000FFCFCF0C0C15 +:10EEC0000000000000000000000000000000000042 :10EED0000000000000000000000000000000000032 :10EEE0000000000000000000000000000000000022 -:10EEF00000000000000000000000000F000F0000F4 -:10EF00000000000000000000000000000000000001 -:10EF100000000000000000003C3C00C300C30000F3 -:10EF200000002000000020002000200020000080C1 -:10EF30000000200000002000000020002080408011 -:10EF40000000200000802000200020002000C000E1 -:10EF500000002000C000200000002000200000036E -:10EF60000000401020000000400020002000200091 -:10EF700000000000200520001000000020002000FC -:10EF8000040020002000000020004000200020009D -:10EF900000000000200020022000840020038800E0 -:10EFA0002000000000000000000000000000000041 -:10EFB000002000000000000200000002000200200B -:10EFC00010200000008200040002400200001090A7 -:10EFD000409000900002000000900000400000C03F -:10EFE00000004000000000901082204010004040CF -:10EFF000100420901002009008904002400240004F -:10F00000000240401000410200C010000002400019 -:10F01000410021000002090000050002000240003A -:10F0200000020840004002100210004100000000F1 -:10F0300000000000000008000800000000000900B7 -:10F040000110020002000000901082000000000089 +:10EEF0000000000000000000000000001000000002 +:10EF000000000000000000000000000010000000F1 +:10EF100000000000000000000000000000000000F1 +:10EF200000000000000000000000000000000000E1 +:10EF300000000000000000000000000000000000D1 +:10EF400000000000000000000000000002100000AF +:10EF500000000000000000000000000000000000B1 +:10EF6000000000000000000000000000021000008F +:10EF70000000000000000000000000000000000091 +:10EF8000000000000000000000000000000002106F +:10EF90000000000000000000000000080000000069 +:10EFA0000000000000000000000000000000004021 +:10EFB0000000000000000000000000000000000051 +:10EFC0000000000000000000000000000000000041 +:10EFD0000000000000000000000000000000000031 +:10EFE0000000000000000000000000000000000021 +:10EFF0000000000000000000000000000000000011 +:10F000000000000000000000000000000000000000 +:10F0100000000000000000000000000000000000F0 +:10F0200000000000000000000000000000000000E0 +:10F0300000000000000000000000000000000000D0 +:10F0400000000000000000000000000000000000C0 :10F0500000000000000000000000000000000000B0 -:10F060000210000000000000000000000008000086 -:10F07000000000000000000000000000004002004E -:10F08000C000000000000000080002100040004026 -:10F090000000001000000000200000000000000040 -:10F0A0000000000000020000000800080000000846 +:10F0600000000000000000000000000000000000A0 +:10F070000000000000000000000000000000000090 +:10F080000000000000000000000000000000000080 +:10F090000000000000000000000000000000000070 +:10F0A0000400000000000400000000000000000058 :10F0B0000000000000000000000000000000000050 -:10F0C0002008200800000000000800080340000895 -:10F0D0000008000000000000000000000000000028 -:10F0E0000008400800000000000000080008004080 -:10F0F00000080008000000000000000000000010F0 -:10F1000000000008000800000000000800080410CB -:10F110000008001000000000000480004100000012 -:10F1200000000008000800000000000000000000CF -:10F13000000000000000040000000000A00000002B -:10F14000040090000000880000009000000004000F -:10F150000009400000000400880000004000040096 -:10F16000000000000000000040000400000000005B -:10F1700040000000400090004000000090000000AF -:10F180000000000000004000200091112005200038 -:10F1900000000000002000200000000088000000A7 -:10F1A000000010020000000000000000000000004D -:10F1B00000000000009000000000000000000000BF -:10F1C000000000000002000000000000000000003D +:10F0C0000000000000000000000000000000000040 +:10F0D0000000000000000000000000000000000030 +:10F0E0000000000000000000000000000000000020 +:10F0F0000000000000000000000000000000000010 +:10F1000000000000000000000000000000000000FF +:10F1100000000000000000000000000000000000EF +:10F1200000000000000004000000000000000000DB +:10F1300000000000000000000000000000000000CF +:10F1400000000000000000000000000000000000BF +:10F1500000000000000000000000000000000000AF +:10F16000000000000000000000000000000000009F +:10F17000000000000000000000000000000000008F +:10F18000000000000000000000000000000000007F +:10F19000000000000000000000000000000000006F +:10F1A000000000000000000000000000000000005F +:10F1B000000000000000000000000000000000004F +:10F1C000000000000000000000000000000000003F :10F1D000000000000000000000000000000000002F -:10F1E00000080020000000000000080000000000EF -:10F1F00000000000000000400000000000000000CF -:10F20000000011000000000000008040200080820B -:10F2100080000000410000010001410000000000EA +:10F1E000000000000000000000000000000000001F +:10F1F000000000000000000000000000000000000F +:10F2000000000000000000000000000000000000FE +:10F2100000000000000000000000000000000000EE :10F2200000000000000000000000000000000000DE -:10F2300000000000000000000000010000000000CD +:10F2300000000000000000000000000000000000CE :10F2400000000000000000000000000000000000BE -:10F2500000000008000000000000000000000000A6 +:10F2500000000000000000000000000000000000AE :10F26000000000000000000000000000000000009E -:10F2700000000000004000000040001000000000FE -:10F2800000000041080000008400000000000000B1 -:10F290001000000082000100820010000020042005 -:10F2A000002000000000004182000000000000007B -:10F2B000000000000008000000080000040000003A -:10F2C000000000000000000000000000100000002E -:10F2D00000002000002002000000000000000000EC -:10F2E0000000000000000000000000000000080016 -:10F2F00000000000000000041084008200000000F4 -:10F3000000080000000000000084008200000000EF -:10F3100005000000050000000400000005000001D9 -:10F3200000010085000000880000000000A000002F -:10F3300000000000000000000000000000000000CD -:10F3400000000000400000000000900000000000ED +:10F27000000000000000000000000000000000008E +:10F28000000000000000000000000000000000007E +:10F29000000000000000000000000000000000006E +:10F2A000000000000000000000000000000000005E +:10F2B000000000000000000000000000000000004E +:10F2C000000000000000000000000000000000003E +:10F2D000000000000000000000000000000000002E +:10F2E000000000000000000000000000000000001E +:10F2F000000000000000000000000000000000000E +:10F3000000000000000000000000000000000000FD +:10F3100000000000000000000000000000000000ED +:10F3200000000000000000000000000000000000DD +:10F33000402000000000000000000000000000006D +:10F3400000000000000000000000000000000000BD :10F3500000000000000000000000000000000000AD :10F36000000000000000000000000000000000009D :10F37000000000000000000000000000000000008D -:10F380000400002100001000000020000000C00068 -:10F3900000000003040000000041082000000400F9 -:10F3A0000000000800040000000000004000000011 -:10F3B00000000000000000000000000000900000BD -:10F3C00000000000000000000000000000024000FB -:10F3D000000000000000000000000000009000009D +:10F38000000000000000000000000000000000007D +:10F39000000000000000000000000000000000006D +:10F3A000000000000000000000000000000000005D +:10F3B000000000000000000000000000000000004D +:10F3C000000000000000000000000000000000003D +:10F3D000000000000000000000000000000000002D :10F3E000000000000000000000000000000000001D -:10F3F0000000000000000000000000000000000409 -:10F40000000000880004000000000000000000A0D0 -:10F4100000A00000000000000000009000010000BB -:10F42000800000000008000100000308000800A0A0 -:10F43000004000000000000000000000000000008C -:10F44000200000000000000000000000018001001A -:10F45000018000800000000000800000000000002B +:10F3F000000000000000000000000000000000000D +:10F4000000000000000000000000000000000000FC +:10F4100000000000000000000000000000000000EC +:10F4200000000000000000000000000000000000DC +:10F4300000000000000000000000000000000000CC +:10F4400000000000000000000000000000000000BC +:10F4500000000000000000000000000000000000AC :10F46000000000000000000000000000000000009C :10F47000000000000000000000000000000000008C -:10F480000000000000000008000000000000000074 -:10F49000C0000000000000040000000000000000A8 -:10F4A0000083000000000000000000800000004118 -:10F4B000884108000000000000000000000000007B -:10F4C0000000000000000000000000000000200418 -:10F4D0002000202020200000000000040040000048 +:10F48000000000000000000000000000000000007C +:10F49000000000000000000000000000000000006C +:10F4A000000000000000000000000000000000005C +:10F4B000000000000000000000000000000000004C +:10F4C000000000000000000000000000000000003C +:10F4D000000000000000000000000000000000002C :10F4E000000000000000000000000000000000001C -:10F4F00000000000000000000000000002002000EA -:10F50000000000000000000200A000000040000019 -:10F510000084000000004100000000000000000026 -:10F5200000880020000005000000410000200000CD +:10F4F000000000000000000000000000000000000C +:10F5000000000000000000000000000000000000FB +:10F5100000000000000000000000000000000000EB +:10F5200000000000000000000000000000000000DB :10F5300000000000000000000000000000000000CB -:10F5400000000000000000000000000000000100BA -:10F5500020000100000000000000900000000000FA +:10F5400000000000000000000000000000000000BB +:10F5500000000000000000000000000000000000AB :10F56000000000000000000000000000000000009B :10F57000000000000000000000000000000000008B :10F58000000000000000000000000000000000007B :10F59000000000000000000000000000000000006B -:10F5A000000000000000000000000008100000083B +:10F5A000000000000000000000000000000000005B :10F5B000000000000000000000000000000000004B :10F5C000000000000000000000000000000000003B -:10F5D000080000000400000000000000000000001F +:10F5D000000000000000000000000000000000002B :10F5E000000000000000000000000000000000001B :10F5F000000000000000000000000000000000000B :10F6000000000000000000000000000000000000FA -:10F6100000000000000000000000000000000900E1 -:10F620000000000000000000000011002180020026 +:10F6100000000000000000000000000000000000EA +:10F6200000000000000000000000000000000000DA :10F6300000000000000000000000000000000000CA :10F6400000000000000000000000000000000000BA -:10F6500000000000000000410080000000000010D9 +:10F6500000000000000000000000000000000000AA :10F66000000000000000000000000000000000009A :10F67000000000000000000000000000000000008A :10F68000000000000000000000000000000000007A -:10F690000000000000000000000000000008000062 -:10F6A0000005000000000000000000000000000055 -:10F6B000001000000000000000000000000000003A +:10F69000000000000000000000000000000000006A +:10F6A000000000000000000000000000000000005A +:10F6B000000000000000000000000000000000004A :10F6C000000000000000000000000000000000003A -:10F6D00000000000000000000000008200000000A8 +:10F6D000000000000000000000000000000000002A :10F6E000000000000000000000000000000000001A :10F6F000000000000000000000000000000000000A :10F7000000000000000000000000000000000000F9 -:10F7100000000000000000000000000000000001E8 -:10F720000000000000000000009000000020000029 -:10F7300008000009000000000000000000000000B8 +:10F7100000000000000000000000000000000000E9 +:10F7200000000000000000000000000000000000D9 +:10F7300000000000000000000000000000000000C9 :10F7400000000000000000000000000000000000B9 -:10F750000000000000000000200010000100000078 -:10F760000000000101000000000000000000000097 +:10F7500000000000000000000000000000000000A9 +:10F760000000000000000000000000000000000099 :10F770000000000000000000000000000000000089 :10F780000000000000000000000000000000000079 :10F790000000000000000000000000000000000069 -:10F7A00000000200000001000000000090000000C6 -:10F7B0000000000900000008000000000000000038 +:10F7A0000000000000000000000000000000000059 +:10F7B0000000000000000000000000000000000049 :10F7C0000000000000000000000000000000000039 -:10F7D00000000000000000000000000000004100E8 -:10F7E00003030000000511000000000000000000FD +:10F7D0000000000000000000000000000000000029 +:10F7E0000000000000000000000000000000000019 :10F7F0000000000000000000000000000000000009 :10F8000000000000000000000000000000000000F8 :10F8100000000000000000000000000000000000E8 -:10F820000000000080000000100000000000000048 -:10F830000000001000880000002000000000000010 +:10F8200000000000000000000000000000000000D8 +:10F8300000000000000000000000000000000000C8 :10F8400000000000000000000000000000000000B8 -:10F850000000001180000000000000000002000015 -:10F860000000000000100000000000000000000088 +:10F8500000000000000000000000000000000000A8 +:10F860000000000000000000000000000000000098 :10F870000000000000000000000000000000000088 :10F880000000000000000000000000000000000078 :10F890000000000000000000000000000000000068 -:10F8A000000000000008000000000000000000024E -:10F8B000000000000008808400000000000000003C +:10F8A0000000000000000000000000000000000058 +:10F8B0000000000000000000000000000000000048 :10F8C0000000000000000000000000000000000038 -:10F8D000000000008801200010000000000000006F -:10F8E0000000000000000001000000000000000017 +:10F8D0000000000000000000000000000000000028 +:10F8E0000000000000000000000000000000000018 :10F8F0000000000000000000000000000000000008 :10F9000000000000000000000000000000000000F7 :10F9100000000000000000000000000000000000E7 -:10F9200000000000000000010000000000000000D6 -:10F9300000000000000000010809000000000000B5 +:10F9200000000000000000000000000000000000D7 +:10F9300000000000000000000000000000000000C7 :10F9400000000000000000000000000000000000B7 -:10F9500000000000000000000000070000008421FB -:10F9600000E007000006001100E0070000000000B2 +:10F9500000000000000000000000000000000000A7 +:10F960000000000000000000000000000000000097 :10F970000000000000000000000000000000000087 :10F980000000000000000000000000000000000077 :10F990000000000000000000000000000000000067 -:10F9A0000000000000000000810000E000000000F6 -:10F9B0000082000007000000818100E007000000D5 +:10F9A0000000000000000000000000000000000057 +:10F9B0000000000000000000000000000000000047 :10F9C0000000000000000000000000000000000037 -:10F9D0000000000000000000000FF0FF0000000029 +:10F9D0000000000000000000000000000000000027 :10F9E0000000000000000000000000000000000017 :10F9F0000000000000000000000000000000000007 :10FA000000000000000000000000000000000000F6 :10FA100000000000000000000000000000000000E6 :10FA200000000000000000000000000000000000D6 -:10FA30000000000000000000000000AA00AA000072 -:10FA4000F0F00000000000000000000000000000D6 -:10FA500000000000000000000000000FF0FF0000A8 +:10FA300000000000000000000000000000000000C6 +:10FA400000000000000000000000000000000000B6 +:10FA500000000000000000000000000000000000A6 :10FA60000000000000000000000000000000000096 :10FA70000000000000000000000000000000000086 :10FA80000000000000000000000000000000000076 :10FA90000000000000000000000000000000000066 :10FAA0000000000000000000000000000000000056 -:10FAB00000000000000000000000000000AA00AAF2 -:10FAC0000000F0F000000000000000000000000056 +:10FAB0000000000000000000000000000000000046 +:10FAC0000000000000000000000000000000000036 :10FAD0000000000000000000000000000000000026 :10FAE0000000000000000000000000000000000016 :10FAF0000000000000000000000000000000000006 :10FB000000000000000000000000000000000000F5 :10FB100000000000000000000000000000000000E5 :10FB200000000000000000000000000000000000D5 -:10FB300000000000000000000000000000003C0089 -:10FB40003C00050505050000000000000000000065 +:10FB300000000000000000000000000000000000C5 +:10FB400000000000000000000000000000000000B5 :10FB500000000000000000000000000000000000A5 :10FB60000000000000000000000000000000000095 :10FB70000000000000000000000000000000000085 @@ -135131,31 +131034,4128 @@ :10FB90000000000000000000000000000000000065 :10FBA0000000000000000000000000000000000055 :10FBB0000000000000000000000000000000000045 -:10FBC0003C003C00050505050000000000000000A9 +:10FBC0000000000000000000000000000000000035 :10FBD0000000000000000000000000000000000025 -:10FBE00000000000000000000061002F800D00A058 -:10FBF0000571002E00090000000000000000000058 +:10FBE0000000000000000000000000000000000015 +:10FBF0000000000000000000000000000000000005 :10FC000000000000000000000000000000000000F4 :10FC100000000000000000000000000000000000E4 :10FC200000000000000000000000000000000000D4 -:10FC3000000000610007800D000000000A28050098 -:10FC400000A00061002F800D0000000000000000F7 +:10FC300000000000000000000000000000000000C4 +:10FC400000000000000000000000000000000000B4 :10FC500000000000000000000000000000000000A4 :10FC60000000000000000000000000000000000094 -:10FC7000000000000000287D287D0000000000003A +:10FC70000000000000000000000000000000000084 :10FC80000000000000000000000000000000000074 :10FC90000000000000000000000000000000000064 :10FCA0000000000000000000000000000000000054 :10FCB0000000000000000000000000000000000044 -:10FCC0000000000000000000A3A3AFAF0000000090 +:10FCC0000000000000000000000000000000000034 :10FCD0000000000000000000000000000000000024 :10FCE0000000000000000000000000000000000014 -:10FCF0000000000000000000287D287D00000000BA +:10FCF0000000000000000000000000000000000004 :10FD000000000000000000000000000000000000F3 :10FD100000000000000000000000000000000000E3 :10FD200000000000000000000000000000000000D3 :10FD300000000000000000000000000000000000C3 -:10FD400000000000000000000000A0A0ACAC00001B +:10FD400000000000000000000000000000000000B3 +:10FD500000000000000000000000000000000000A3 +:10FD60000000000000000000000000000000000093 +:10FD70000000000000000000000000000000008003 +:10FD80000000001000000010000000400000008093 +:10FD90000000004000000000000000000000000023 +:10FDA0000000000000000000000000000000000053 +:10FDB0000000000000000000000000000000000043 +:10FDC00000800080004000400000000000000000B3 +:10FDD0000000000000000000000000000000000023 +:10FDE0000000000000000000000000000000000013 +:10FDF0000000000000000000000000000000000003 +:10FE000000400000000100000001000000010000AF +:10FE100000100000000100000000000000000000D1 +:10FE200000000000000000000000000000000000D2 +:10FE300000000000000000000000000000000002C0 +:10FE40000000001000100001000100000000000090 +:10FE500000000000000000000000000000000000A2 +:10FE60000000000000000000000000000000000092 +:10FE70000000000000000000000000000000000082 +:10FE80000000000000000000000000000000000072 +:10FE90000000000000000000000000000000000062 +:10FEA0000000000000000000000000000000000052 +:10FEB0000000000000000000000000000000000042 +:10FEC0000000000000000000000000000000000032 +:10FED0000000000000000000000000000000000022 +:10FEE0000000000000000000000000000000000012 +:10FEF00000000000000000000000000000000008FA +:10FF0000000000000000000000000008000800845D +:10FF100000000000000000000000000000000008D9 +:10FF200000000000000000000000000800000008C1 +:10FF300000000008000800000000000000000000B1 +:10FF40000084000000000008000800080008000805 +:10FF5000008400080008000000000000000000000D +:10FF60000000000000000008000800080008000869 +:10FF70000000000000000000000000000000000081 +:10FF80000000000000000000000000000000000071 +:10FF9000000000000000000000000000000000055C +:10FFA0000021000000000000000800080000000020 +:10FFB0000000000800000000000000000000000039 +:10FFC0000000000000000000000000000000000031 +:10FFD0000000000800000000000000000000000019 +:10FFE0000000000800000000000000000000000009 +:10FFF0000000000000000000000000000000000001 +:020000040020DA +:1000000000000000000000000000000000000000F0 +:1000100000000000000000000000000000000000E0 +:1000200000000000000000000000000000000000D0 +:1000300000000000000000000000000000000000C0 +:1000400000000000000000000000000000000000B0 +:1000500000000000000000000000000000000000A0 +:100060000000000000000000000000000000000090 +:100070000000000000000000000000000000000080 +:100080000000000000000000000000000000000070 +:100090000000000000000000000000000000000060 +:1000A0000000000000000000000000000000000050 +:1000B0000000000000000000000000000000000040 +:1000C0000000000000000000000000000000000030 +:1000D0000000000000000000000000000000000020 +:1000E0000000000000000000000000000000000010 +:1000F0000000000000000000000000000000000000 +:1001000000000000000000000000000000000000EF +:1001100000000000000000000000000000000000DF +:1001200000000000000000000000000000000000CF +:1001300000000000000000000000000000000000BF +:1001400000000000000000000000000000000000AF +:10015000000000000000000000000000000000009F +:10016000000000000000000000000000000000008F +:10017000000000000000000000000000000000007F +:10018000000000000000000000000000000000006F +:10019000000000000000000000000000000000005F +:1001A000000000000000000000000000000000004F +:1001B000000000000000000000000000000000003F +:1001C000000000000000000000000000000000002F +:1001D000000000000000000000000000000000001F +:1001E000000000000000000000000000000000000F +:1001F00000000000000000000000000000000000FF +:1002000000000000000000000000000000000000EE +:1002100000000000000000000000000000000000DE +:1002200000000000000000000000000000000000CE +:1002300000000000000000000000000000000000BE +:1002400000000000000000000000000000000000AE +:10025000000000000000000000000000000000009E +:10026000000000000000000000000000000000008E +:100270000000000000000000000000000008000076 +:10028000000000000000000000000000000000006E +:100290000000000000000000000000000021000835 +:1002A0000008000000000000000000000021000025 +:1002B0000000000800000000000000000000000036 +:1002C000000000000000000000000000000000002E +:1002D00000000000000000000000000000000021FD +:1002E000000000000000000000000000000000000E +:1002F00000000000000000000000000000000000FE +:1003000000000000000000000000000000000000ED +:1003100000000000000000000000000000000000DD +:1003200000000000000000000000000000000000CD +:1003300000000000000000000000000000000000BD +:1003400000000000000000000000000000000000AD +:10035000000000000000000000000000000000009D +:10036000000000000000000000000000000000008D +:10037000000000000000000000000000000000007D +:10038000000000000000000000000000000000006D +:100390000000000000000000000000000800000055 +:1003A000000000000000000000000000000000004D +:1003B000000000000000000000000000000000003D +:1003C000000000000000000000000000000000002D +:1003D000000000000000000000C000080088008845 +:1003E000000000000000000000000000000000000D +:1003F00000000000000000000000000000000000FD +:1004000000000000000000000000000000000000EC +:10041000000000000000000000000000000080005C +:1004200000000000000000000000000000000000CC +:1004300000000000000000000000000000000000BC +:1004400000000000000000000000000000000000AC +:10045000000000000000000000000080008000009C +:10046000000000000000000000000000000000008C +:10047000000000000000000000000000000000007C +:10048000000000000000000000000000000000006C +:10049000000000000000000000000000000000005C +:1004A000000000000002000000000000000000004A +:1004B000000000000000000000000000000000003C +:1004C000000000000000000000000000000000002C +:1004D0000000000000000000000000000000000814 +:1004E000000000000000000000000000000000000C +:1004F00000000000000000000000000000000000FC +:1005000000000000000000000000000000000000EB +:1005100000000000000000000000000000000000DB +:1005200000000000000000000010000000000000BB +:1005300000020000000000000000000000000000B9 +:1005400000000000000000000000000000000000AB +:10055000000000000000000000000000000000009B +:100560000001008800000000000000000000000002 +:10057000000000000000000000000000000000007B +:10058000000000000000000000000000000000006B +:10059000000000000000000000000000000000005B +:1005A0000008000800C0000000000000000000007B +:1005B000000000000000000000000000000000003B +:1005C000000000000000000000000000000000002B +:1005D000000000000000000000000000000000001B +:1005E000000000000000000000000000000000000B +:1005F00000000000000000000000000000000000FB +:1006000000000000000000000000000000000000EA +:1006100000000000000000000000000000000000DA +:10062000000000800080008000000000000000004A +:1006300000000000000000000000000000000000BA +:1006400000000000000000000000000000000000AA +:10065000000000000000000000000000000000009A +:10066000000000000000000000000000000000008A +:10067000000000000000000000000000000000007A +:10068000000000000000000000000000000000006A +:10069000000000000000000000000000000000005A +:1006A00000000000000000000000800000000000CA +:1006B000000080008000000000000000000000003A +:1006C000000000000000000000000000000000002A +:1006D000000000000000000000000000000000001A +:1006E000000000008000800000000000000000000A +:1006F00000000000000000000000000000000000FA +:1007000000000000000000000000000000000000E9 +:1007100000000000000000000000000000000000D9 +:10072000000000000000000000000000C000020007 +:1007300000000000C00008000200000000000000EF +:1007400000000000000000000000000000000000A9 +:100750000000000000000000000000000000000099 +:10076000000000000000C0000800000000000000C1 +:100770000000000000000000000000000000000079 +:100780000000000000000000000000000000000069 +:100790000000000000000000000000000000000059 +:1007A0000000000000000000000000000000000049 +:1007B0000000000000000000000000000000000039 +:1007C0000000000000000000000000000000000029 +:1007D0000000000000000000000000000000000019 +:1007E0000000000000000000000000000000000009 +:1007F00000000000000000000000000000000000F9 +:1008000000000000000000000000000000000000E8 +:1008100000000000000000000000000000000000D8 +:100820000000000000000000000000000F0F0FFF9C +:1008300000FF99FF000000000FFF99FF000000007B +:1008400000000000000000000000000000000000A8 +:100850000000000000000000000000000000000098 +:100860000000000000000000000099FF00FF0000F1 +:100870000000000000000000000000000000000078 +:100880000000000000000000000000000000000068 +:100890000000000000000000000000000000000058 +:1008A0000000000000000000000000000000FFFF4A +:1008B0000FFFFFFF99FF000000000FFF99FF0000EE +:1008C0000000000000000000000000000000000028 +:1008D0000000000000000000000000000000000018 +:1008E00000000000000000000000000099FFFFFF72 +:1008F00000000000000000000000000000000000F8 +:1009000000000000000000000000000000000000E7 +:1009100000000000000000000000000000000000D7 +:1009200000000000000000000000000000000000C7 +:1009300000000000000000000000000000000000B7 +:1009400000000000000000000000000000000000A7 +:100950000000000000000000000000000000000097 +:100960000000000000000000000000000000000087 +:100970000000000000000000000000000000000077 +:100980000000000000000000000000000000000067 +:100990000000000000000000000000000000000057 +:1009A0000000000000000000000000000000000047 +:1009B0000000000000000000000000000000000037 +:1009C0000000000000000000000000000000000027 +:1009D0000000000000000000000000000000000017 +:1009E0000000000000000000000000000000000007 +:1009F000FFC3FFF000000000000000000000000046 +:100A000000000000000000000000000000000000E6 +:100A100000000000000000000000000000000000D6 +:100A200000000000000000000000000000000000C6 +:100A300000000000000000000000000000000000B6 +:100A400000000000000000000000000000000000A6 +:100A50000000000000000000000000000000000096 +:100A60000000000000000000000000000000000086 +:100A70000000FFC3FFF000000000000000000000C5 +:100A80000000000000000000000000000000000066 +:100A90000000000000000000000000000000000056 +:100AA0000000000000000000000000000000000046 +:100AB00000000000000000900000A0000000000006 +:100AC0000000A00000000000000000000000000086 +:100AD0000000000000000000000000000000000016 +:100AE0000000000000000000000000000000000006 +:100AF00000000000A0005000000000000000000006 +:100B000000000000000000000000000000000000E5 +:100B100000000000000000000000000000000000D5 +:100B200000000000000000000000000000000000C5 +:100B300000000000000000000000000000000000B5 +:100B400000000000000000000000000000000000A5 +:100B50000000000000000000000000000000000095 +:100B60000000000000000000000000000000000085 +:100B70000000000000000000000000000000000075 +:100B80000000000000000000000000000000000065 +:100B90000000000000000000000000000000000055 +:100BA0000000000000000000000000000000000045 +:100BB0000000000000000000000000000000000035 +:100BC0000000000000000000000000000000000025 +:100BD0000000000000000000000000000000000015 +:100BE0000000000000000000000000000000000005 +:100BF00000000000000000000000000000000000F5 +:100C000000000000000000000000000000000000E4 +:100C100000000000000000000000000000000000D4 +:100C200000000000000000000000000000000000C4 +:100C300000000000000000000000000000000000B4 +:100C400000000000000000000000000000000000A4 +:100C50000000000000000000000000000000000094 +:100C60000000000000000000000000000000000084 +:100C70000000000000000000000000000000000074 +:100C80000000000000000000000000000000000064 +:100C90000000000000000000000000000000000054 +:100CA0000000000000000000000000000000000044 +:100CB0000000000000000000000000000000000034 +:100CC0000000000000000000000000000000000024 +:100CD0000000000000000000000000000000000014 +:100CE0000000000000000000000000000000000004 +:100CF00000000000000000000000000000000000F4 +:100D000000000000000000000000000000000000E3 +:100D100000000000000000000000000000000000D3 +:100D200000000000000000000000000000000000C3 +:100D300000000000000000000000000000000000B3 +:100D400000000000000000000000000000000000A3 +:100D50000000000000000000000000000000000093 +:100D60000000000000000000000000000000000083 +:100D70000000000000000000000000000000000073 +:100D80000000000000000000000000000000000063 +:100D90000000000000000000000000000000000053 +:100DA0000000000000000000000000000000000043 +:100DB0000000000000000000000000000000000033 +:100DC0000000000000000000000000000000000023 +:100DD0000000000000000000000000000000000013 +:100DE0000000000000000000000000000000000003 +:100DF00000000000000200000000000000020000EF +:100E000000000000000000000000000000000002E0 +:100E100000000002000200020000000200000002C8 +:100E200000000000000000000000000000000000C2 +:100E300000000000000000100000000000000000A2 +:100E400000000000000000000000000000000000A2 +:100E50000000000000000010000000000000000082 +:100E60000000000000000000000000000000000082 +:100E70000000000000000000001000000000000062 +:100E80000000000000000000000000000000000062 +:100E90000000000000000000001000000000000042 +:100EA0000000000000000000000000000000000042 +:100EB000000000080000000000000008000000081A +:100EC000000800000000000000000000000000001A +:100ED00000000208000800080000000800080008E0 +:100EE00000080000000000000000000000000000FA +:100EF00000000000000800080008000000080008CA +:100F000000080008000000080000000000000000C9 +:100F100000000000000800080008000000080008A9 +:100F20000008000800080008000800080000000091 +:100F30000000000000000008000800000000000899 +:100F400000000000000000000000000000000000A1 +:100F50000000000000000000000000000000000091 +:100F60000000000000000008000000000000000079 +:100F70000000000000000000000000000000000071 +:100F80000000000000000000000000000000000061 +:100F90000000000000000000000000000000000051 +:100FA0001000000000000000000000000000000031 +:100FB00000A0000000000000000000000000000091 +:100FC0000000000000000000000000000000000021 +:100FD000000000000000000000A000000000000071 +:100FE0000000000000000000000000000000000001 +:100FF00000000000000000000000000000000000F1 +:1010000000000000000000000000000000000000E0 +:1010100000000000000000000000000000000000D0 +:1010200000000000000000000000000000000000C0 +:1010300000000000000000000000000000000000B0 +:1010400000000000000000000000000000000000A0 +:101050000000000000000000000000000000000090 +:101060000000000000000000000000000000000080 +:101070000000000000000000000000000000000070 +:101080000000000000000000000000000000000060 +:101090000000000000000000000000000000000050 +:1010A0000000000000000000000000000000000040 +:1010B0000000000000000000000000000000000030 +:1010C0000000000000000000000000000000000020 +:1010D0000000000000000000000000000000000010 +:1010E0000000000000000000000000000000000000 +:1010F00000000000000000000000000000000000F0 +:1011000000000000000000000000000000000000DF +:1011100000000000000000000000000000000000CF +:1011200000000000000000000000000000000000BF +:1011300000000000000000000000000000000000AF +:10114000000000000000000000000000000000009F +:10115000000000000000000000000000000000008F +:10116000000000000000000000000000000000007F +:10117000000000000000000000000000000000006F +:10118000000000000000000000000000000000005F +:10119000000000000000000000000000000000004F +:1011A000000000000000000000000000000000003F +:1011B000000000000000000000000000000000002F +:1011C000000000000000000000000000000000001F +:1011D000000000000000000000000000000000000F +:1011E00000000000000000000000000000000000FF +:1011F00000000000000000000000000000000000EF +:1012000000000000000000000000000000000000DE +:1012100000080010000800080000000000000000A6 +:1012200000000000000000000000000000000000BE +:1012300000000000000000000000000000000000AE +:10124000000000000000000000000000000000009E +:10125000000000000000000000000000000000008E +:10126000000000000000000000000000000000007E +:10127000000000000000000000000000000000006E +:10128000000000000000000000000000000000005E +:10129000000000000000000000000000000000004E +:1012A000000000000000000000000000000000003E +:1012B000000000000000000000000000000000002E +:1012C000000000000000000000000000000000001E +:1012D000000000000000000000000000000000000E +:1012E00000000000000000000000000000000000FE +:1012F00000000000000000000000000000000000EE +:1013000000000000000000000000000000000000DD +:1013100000000000000000000000000000000000CD +:1013200000000000000000000000000000000000BD +:1013300000000000000000000000000000000000AD +:10134000000000000000000000000000000000009D +:10135000000000000000000000000000000000008D +:10136000000000000000000000000000000000007D +:10137000000000000000000000000000000000006D +:10138000000000000000000000000000000000005D +:10139000000000000000000000000000000000004D +:1013A000000000000000000000000000000000003D +:1013B000000000000000000000000000000000002D +:1013C000000000000000000000000000000000001D +:1013D000000000000000000000000000000000000D +:1013E00000000000000000000000000000000000FD +:1013F00000000000000000000000000000000000ED +:1014000000000000000000000000000000000000DC +:1014100000000000000000000000000000000000CC +:1014200000000000000000000000000000000000BC +:1014300000000000000000000000000000000000AC +:10144000000000000000000000000000000000009C +:10145000000000000000000000000000000000008C +:10146000000000000000000000000000000000007C +:10147000000000000000000000000000000000006C +:10148000000000000000000000000000000000005C +:10149000000000000000000000000000000000004C +:1014A000000000000000000000000000000000003C +:1014B000000000000000000000000000000000002C +:1014C000000000000000000000000000000000001C +:1014D000000000000000000000000000000000000C +:1014E00000000000000000000000000000000000FC +:1014F00000000000000000000000000000000000EC +:1015000000000000000000000000000000000000DB +:1015100000000000000000000000000000000000CB +:1015200000000000000000000000000000000000BB +:1015300000000000000000000000000000000000AB +:10154000000000000000000000000000000000009B +:10155000000000000000000000000000000000008B +:10156000000000000000000000000000000000007B +:10157000000000000000000000000000000000006B +:10158000000000000000000000000000000000005B +:10159000000000000000000000000000000000004B +:1015A000000000000000000000000000000000003B +:1015B000000000000000000000000000000000002B +:1015C000000000000000000000000000000000001B +:1015D000000000000000000000000000000000000B +:1015E00000000000000000000000000000000000FB +:1015F00000000000000000000000000000000000EB +:1016000000000000000000000000000000000000DA +:1016100000000000000000000000000000000000CA +:1016200000000000000000000000000000000000BA +:1016300000000000000000000000000000000000AA +:10164000000000000000000000000000000000009A +:10165000000000000000000000000000000000008A +:10166000000000000000000000000000000000007A +:10167000000000000000000000000000000000006A +:10168000000000000000000000000000000000005A +:10169000000000000000000000000000000000004A +:1016A000000000000000000000000000000000003A +:1016B000000000000000000000000000000000002A +:1016C000000000000000000000000000000000001A +:1016D000000000000000000000000000000000000A +:1016E00000000000000000000000000000000000FA +:1016F00000000000000000000000000000000000EA +:1017000000000000000000000000000000000000D9 +:1017100000000000000000000000000000000000C9 +:1017200000000000000000000000000000000000B9 +:1017300000000000000000000000000000000000A9 +:101740000000000000000000000000000000000099 +:101750000000000000000000000000000000000089 +:101760000000000000000000000000000000000079 +:101770000000000000000000000000000000000069 +:101780000000000000000000000000000000000059 +:101790000000000000000000000000000000000049 +:1017A0000000000000000000000000000000000039 +:1017B0000000000000000000000000000000000029 +:1017C0000000000000000000000000000000000019 +:1017D0000000000000000000000000000000000009 +:1017E00000000000000000000000000000000000F9 +:1017F00000000000000000000000000000000000E9 +:1018000000000000000000000000000000000000D8 +:1018100000000000000000000000000000000000C8 +:1018200000000000000000000000000000000000B8 +:1018300000000000000000000000000000000000A8 +:101840000000000000000000000000000000000098 +:101850000000000000000000000000000000000088 +:101860000000000000000000000000000000000078 +:101870000000000000000000000000000000000068 +:101880000000000000000000000000000000000058 +:101890000000000000000000000000000000000048 +:1018A0000000000000000000000000000000000038 +:1018B0000000000000000000000000000000000028 +:1018C0000000000000000000000000000000000018 +:1018D0000000000000000000000000000000000008 +:1018E00000000000000000000000000000000000F8 +:1018F00000000000000000000000000000000000E8 +:1019000000000000000000000000000000000000D7 +:1019100000000000000000000000000000000000C7 +:1019200000000000000000000000000000000000B7 +:1019300000000000000000000000000000000000A7 +:101940000000000000000000000000000000000097 +:101950000000000000000000000000000000000087 +:101960000000000000000000000000000000000077 +:101970000000000000000000000000000000000067 +:101980000000000000000000000000000000000057 +:101990000000000000000000000000000000000047 +:1019A0000000000000000000000000000000000037 +:1019B0000000000000000000000000000000000027 +:1019C0000000000000000000000000000000000017 +:1019D0000000000000000000000000000000000007 +:1019E00000000000000000000000000000000000F7 +:1019F00000000000000000000000000000000000E7 +:101A000000000000000000000000000000000000D6 +:101A100000000000000000000000000000000000C6 +:101A200000000000000000000000000000000000B6 +:101A300000000000000000000000000000000000A6 +:101A40000000000000000000000000000000000096 +:101A50000000000000000000000000000000000086 +:101A60000000000000000000000000000000000076 +:101A70000000000000000000000000000000000066 +:101A80000000000000000000000000000000000056 +:101A90000000000000000000000000000000000046 +:101AA0000000000000000000000000000000000036 +:101AB0000000000000000000000000000000000026 +:101AC0000000000000000000000000000000000016 +:101AD0000000000000000000000000000000000006 +:101AE00000000000000000000000000000000000F6 +:101AF00000000000000000000000000000000000E6 +:101B000000000000000000000000000000000000D5 +:101B100000000000000000000000000000000000C5 +:101B200000000000000000000000000000000000B5 +:101B300000000000000000000000000000000000A5 +:101B40000000000000000000000000000000000095 +:101B50000000000000000000000000000000000085 +:101B60000000000000000000000000000000000075 +:101B70000000000000000000000000000000000065 +:101B80000000000000000000000000000000000055 +:101B90000000000000000000000000000000000045 +:101BA0000000000000000000000000000000000035 +:101BB0000000000000000000000000000000000025 +:101BC0000000000000000000000000000000000015 +:101BD0000000000000000000000000000000000005 +:101BE00000000000000000000000000000000000F5 +:101BF00000000000000000000000000000000000E5 +:101C000000000000000000000000000000000000D4 +:101C100000000000000000000000000000000000C4 +:101C200000000000000000000000000000000000B4 +:101C300000000000000000000000000000000000A4 +:101C40000000000000000000000000000000000094 +:101C50000000000000000000000000000000000084 +:101C60000000000000000000000000000000000074 +:101C70000000000000000000000000000000000064 +:101C80000000000000000000000000000000000054 +:101C90000000000000000000000000000000000044 +:101CA0000000000000000000000000000000000034 +:101CB0000000000000000000000000000000000024 +:101CC0000000000000000000000000000000000014 +:101CD0000000000000000000000000000000000004 +:101CE00000000000000000000000000000000000F4 +:101CF00000000000000000000000000000000000E4 +:101D000000000000000000000000000000000000D3 +:101D100000000000000000000000000000000000C3 +:101D200000000000000000000000000000000000B3 +:101D300000020000000000000000000000000000A1 +:101D4000000000020000000200000002000200008B +:101D50000000000000000000000000000000000083 +:101D60000000000000000000000000000000000073 +:101D70000000000000000000000000000000000063 +:101D80000000000000000000000000000000000053 +:101D90000000000000000000000000000000000043 +:101DA0000000000000000000000000000000000033 +:101DB0000000000000000000000000000000000023 +:101DC0000000000000000000000000000000000013 +:101DD0000000000000000000000000000000000003 +:101DE00000000000000000000000000000000000F3 +:101DF00000000000000000000000000000000000E3 +:101E000000000000000000000000000000000000D2 +:101E100000000000000000000000000000000000C2 +:101E200000000000000000000000000000000000B2 +:101E300000000000000000000000000000000000A2 +:101E40000000000000000000000000000000000092 +:101E50000000000000000000000000000000000082 +:101E60000000000000000000000000000000000072 +:101E70000000000000000000000000000000000062 +:101E80000000000000000000000000000000000052 +:101E90000000000000000000000000000000000042 +:101EA0000000000000000000000000000000000032 +:101EB0000000000000000000000000000000000022 +:101EC0000000000000000000000000000000000012 +:101ED0000000000000000000000000000000000002 +:101EE00000000000000000000000000000000000F2 +:101EF00000000000000000000000000000000000E2 +:101F000000000000000000000000000000000000D1 +:101F100000000000000000000000000000000000C1 +:101F200000000000000000000000000000000000B1 +:101F300000000000000000000000000000000000A1 +:101F40000000000000000000000000000000000091 +:101F50000000000000000000000000000000000081 +:101F60000000000000000000000000000000000071 +:101F70000000000000000000000000000000000061 +:101F80000000000000000000000000000000000051 +:101F90000000000000000000000000000000000041 +:101FA0000000000000000000000000000000000031 +:101FB0000000000000000000000000000000000021 +:101FC0000000000000000000000000000000000011 +:101FD0000000000000000000000000000000000001 +:101FE00000000000000000000000000000000000F1 +:101FF00000000000000000000000000000000000E1 +:1020000000000000000000000000000000000000D0 +:1020100000000000000000000000000000000000C0 +:1020200000000000000000000000000000000000B0 +:1020300000000000000000000000000000000000A0 +:102040000000000000000000000000000000000090 +:102050000000000000000000000000000000000080 +:102060000000000000000000000000000000000070 +:102070000000000000000000000000000000000060 +:102080000000000000000000000000000000000050 +:102090000000000000000000000000000000000040 +:1020A0000000000000000000000000000000000030 +:1020B0000000000000000000000000000000000020 +:1020C0000000000000000000000000000000000010 +:1020D0000000000000000000000000000000000000 +:1020E00000000000000000000000000000000000F0 +:1020F00000000000000000000000000000000000E0 +:1021000000000000000000000000000000000000CF +:1021100000000000000000000000000000000000BF +:1021200000000000000000000000000000000000AF +:10213000000000000000000000000000000000009F +:10214000000000000000000000000000000000008F +:10215000000000000000000000000000000000007F +:10216000000000000000000000000000000000006F +:10217000000000000000000000000000000000005F +:10218000000000000000000000000000000000004F +:10219000000000000000000000000000000000003F +:1021A000000000000000000000000000000000002F +:1021B000000000000000000000000000000000001F +:1021C000000000000000000000000000000000000F +:1021D00000000000000000000000000000000000FF +:1021E00000000000000000000000000000000000EF +:1021F00000000000000000000000000000000000DF +:1022000000000000000000000000000000000000CE +:1022100000000000000000000000000000000000BE +:1022200000000000000000000000000000000000AE +:10223000000000000000000000000000000000009E +:10224000000000000000000000000000000000008E +:10225000000000000000000000000000000000007E +:10226000000000000000000000000000000000006E +:10227000000000000000000000000000000000005E +:10228000000000000000000000000000000000004E +:10229000000000000000000000000000000000003E +:1022A000000000000000000000000000000000002E +:1022B000000000000000000000000000000000001E +:1022C000000000000000000000000000000000000E +:1022D00000000000000000000000000000000000FE +:1022E00000000000000000000000000000000000EE +:1022F00000000000000000000000000000000000DE +:1023000000000000000000000000000000000000CD +:1023100000000000000000000000000000000000BD +:1023200000000000000000000000000000000000AD +:10233000000000000000000000000000000000009D +:10234000000000000000000000000000000000008D +:10235000000000000000000000000000000000007D +:10236000000000000000000000000000000000006D +:10237000000000000000000000000000000000005D +:10238000000000000000000000000000000000004D +:10239000000000000000000000000000000000003D +:1023A000000000000000000000000000000000002D +:1023B000000000000000000000000000000000001D +:1023C000000000000000000000000000000000000D +:1023D00000000000000000000000000000000000FD +:1023E00000000000000000000000000000000000ED +:1023F00000000000000000000000000000000000DD +:1024000000000000000000000000000000000000CC +:1024100000000000000000000000000000000000BC +:1024200000000000000000000000000000000000AC +:10243000000000000000000000000000000000009C +:10244000000000000000000000000000000000008C +:10245000000000000000000000000000000000007C +:10246000000000000000000000000000000000006C +:10247000000000000000000000000000000000005C +:10248000000000000000000000000000000000004C +:10249000000000000000000000000000000000003C +:1024A000000000000000000000000000000000002C +:1024B000000000000000000000000000000000001C +:1024C000000000000000000000000000000000000C +:1024D00000000000000000000000000000000000FC +:1024E00000000000000000000000000000000000EC +:1024F00000000000000000000000000000000000DC +:1025000000000000000000000000000000000000CB +:1025100000000000000000000000000000000000BB +:1025200000000000000000000000000000000000AB +:10253000000000000000000000000000000000009B +:10254000000000000000000000000000000000008B +:10255000000000000000000000000000000000007B +:10256000000000000000000000000000000000006B +:10257000000000000000000000000000000000005B +:10258000000000000000000000000000000000004B +:10259000000000000000000000000000000000003B +:1025A000000000000000000000000000000000002B +:1025B000000000000000000000000000000000001B +:1025C000000000000000000000000000000000000B +:1025D00000000000000000000000000000000000FB +:1025E00000000000000000000000000000000000EB +:1025F00000000000000000000000000000000000DB +:1026000000000000000000000000000000000000CA +:1026100000000000000000000000000000000000BA +:1026200000000000000000000000000000000000AA +:10263000000000000000000000000000000000009A +:10264000000000000000000000000000000000008A +:10265000000000000000000000000000000000007A +:10266000000000000000000000000000000000006A +:10267000000000000000000000000000000000005A +:10268000000000000000000000000000000000004A +:10269000000000000000000000000000000000003A +:1026A000000000000000000000000000000000002A +:1026B000000000000000000000000000000000001A +:1026C000000000000000000000000000000000000A +:1026D00000000000000000000000000000000000FA +:1026E00000000000000000000000000000000000EA +:1026F00000000000000000000000000000000000DA +:1027000000000000000000000000000000000000C9 +:1027100000000000000000000000000000000000B9 +:1027200000000000000000000000000000000000A9 +:102730000000000000000000000000000000000099 +:102740000000000000000000000000000000000089 +:102750000000000000000000000000000000000079 +:102760000000000000000000000000000000000069 +:102770000000000000000000000000000000000059 +:102780000000000000000000000000000000000049 +:102790000000000000000000000000000000000039 +:1027A0000000000000000000000000000000000029 +:1027B0000000000000000000000000000000000019 +:1027C0000000000000000000000000000000000009 +:1027D00000000000000000000000000000000000F9 +:1027E00000000000000000000000000000000000E9 +:1027F00000000000000000000000000000000000D9 +:1028000000000000000000000000000000000000C8 +:1028100000000000000000000000000000000000B8 +:1028200000000000000000000000000000000000A8 +:102830000000000000000000000000000000000098 +:102840000000000000000000000000000000000088 +:102850000000000000000000000000000000000078 +:102860000000000000000000000000000000000068 +:102870000000000000000000000000000000000058 +:102880000000000000000000000000000000000048 +:102890000000000000000000000000000000000038 +:1028A0000000000000000000000000000000000028 +:1028B0000000000000000000000000000000000018 +:1028C0000000000000000000000000000000000008 +:1028D00000000000000000000000000000000000F8 +:1028E00000000000000000000000000000000000E8 +:1028F00000000000000000000000000000000000D8 +:1029000000000000000000000000000000000000C7 +:1029100000000000000000000000000000000000B7 +:1029200000000000000000000000000000000000A7 +:102930000000000000000000000000000000000097 +:102940000000000000000000000000000000000087 +:102950000000000000000000000000000000000077 +:102960000000000000000000000000000000000067 +:102970000000000000000000000000000000000057 +:102980000000000000000000000000000000000047 +:102990000000000000000000000000000000000037 +:1029A0000000000000000000000000000000000027 +:1029B0000000000000000000000000000000000017 +:1029C0000000000000000000000000000000000007 +:1029D00000000000000000000000000000000000F7 +:1029E00000000000000000000000000000000000E7 +:1029F00000000000000000000000000000000000D7 +:102A000000000000000000000000000000000000C6 +:102A100000000000000000000000000000000000B6 +:102A200000000000000000000000000000000000A6 +:102A30000000000000000000000000000000000096 +:102A40000000000000000000000000000000000086 +:102A50000000000000000000000000000000000076 +:102A60000000000000000000000000000000000066 +:102A70000000000000000000000000000000000056 +:102A80000000000000000000000000000000000046 +:102A90000000000000000000000000000000000036 +:102AA0000000000000000000000000000000000026 +:102AB0000000000000000000000000000000000016 +:102AC0000000000000000000000000000000000006 +:102AD00000000000000000000000000000000000F6 +:102AE00000000000000000000000000000000000E6 +:102AF00000000000000000000000000000000000D6 +:102B000000000000000000000000000000000000C5 +:102B100000000000000000000000000000000000B5 +:102B200000000000000000000000000000000000A5 +:102B30000000000000000000000000000000000095 +:102B40000000000000000000000000000000000085 +:102B50000000000000000000000000000000000075 +:102B60000000000000000000000000000000000065 +:102B70000000000000000000000000000000000055 +:102B80000000000000000000000000000000000045 +:102B90000000000000000000000000000000000035 +:102BA0000000000000000000000000000000000025 +:102BB0000000000000000000000000000000000015 +:102BC0000000000000000000000000000000000005 +:102BD00000000000000000000000000000000000F5 +:102BE00000000000000000000000000000000000E5 +:102BF00000000000000000000000000000000000D5 +:102C000000000000000000000000000000000000C4 +:102C100000000000000000000000000000000000B4 +:102C200000000000000000000000000000000000A4 +:102C30000000000000000000000000000000000094 +:102C40000000000000000000000000000000000084 +:102C50000000000000000000000000000000000074 +:102C60000000000000000000000000000000000064 +:102C70000000000000000000000000000000000054 +:102C80000000000000000000000000000000000044 +:102C90000000000000000000000000000000000034 +:102CA0000000000000000000000000000000000024 +:102CB0000000000000000000000000000000000014 +:102CC0000000000000000000000000000000000004 +:102CD00000000000000000000000000000000000F4 +:102CE00000000000000000000000000000000002E2 +:102CF00000000000000000000000000000000002D2 +:102D00000000000040000000000000000040000043 +:102D10000090009000400000000000000000000053 +:102D200000000000000000000000000000000000A3 +:102D30000000000000000000000000000000000093 +:102D40000210000000000000000000000000000071 +:102D5000000000000000000000000400000000006F +:102D60000210000000000000000000000000000051 +:102D70000000000000000000000000000000000053 +:102D80000000021000000000000000000000000031 +:102D90000000000000000000000000000000000033 +:102DA0000000000000000000000000000000000023 +:102DB0000000000000000000000000000000000013 +:102DC0000000000000000000000000000000000003 +:102DD00000000000000000000000000000000000F3 +:102DE00000000000000000000000000000000000E3 +:102DF00000000000000000000000000000000000D3 +:102E000000000000000000000000000000000000C2 +:102E100000000000000000000000000000000000B2 +:102E200000000000000000000000000000000000A2 +:102E30000000000000000000000000000000000092 +:102E40000000000000000000000000000000000082 +:102E50000000000000000000000000000000000072 +:102E60000000000000000000000000000000000062 +:102E70000000000000000000000000000000000052 +:102E80000000000000000000000000000000000042 +:102E90000000000000000000000000000000000032 +:102EA0000000000000000000000000000000000022 +:102EB0000000000000000000000000000000000012 +:102EC0000000000000000000000000000000000002 +:102ED00000000000000000000000000000000000F2 +:102EE00000000000000000000000000000000000E2 +:102EF00000000000000000000000000000000000D2 +:102F000000000000000000000000000000000000C1 +:102F100000000000000000000000000000000000B1 +:102F200000000000000000000000000000000000A1 +:102F30000000000000000000000000000000000091 +:102F40000000000000000000000000000000000081 +:102F50000000000000000000000000000000000071 +:102F60000000000000000000000000000000000061 +:102F70000000000000000000000000000000000051 +:102F80000000000000000000000000000000000041 +:102F90000000000000000000000000000000000031 +:102FA0000000000000000000000000000000000021 +:102FB0000000000000000000000000000000000011 +:102FC0000000000000000000000000000000000001 +:102FD00000000000000000000000000000000000F1 +:102FE00000000000000000000000000000000000E1 +:102FF00000000000000000000000000000000000D1 +:1030000000000000000000000000000000000000C0 +:1030100000000000000000000000000000000000B0 +:1030200000000000000000000000000000000000A0 +:103030000000000000000000000000000000000090 +:103040000000000000000000000000000000000080 +:103050000000000000000000000000000000000070 +:103060000000000000000000000000000000000060 +:103070000000000000000000000000000000000050 +:103080000000000000000000000000000000000040 +:103090000000000000000000000000000000000030 +:1030A0000000000000000000000000000000000020 +:1030B0000000000000000000000000000000000010 +:1030C0000000000000000000000000000000000000 +:1030D00000000000000000000000000000000000F0 +:1030E00000000000000000000000000000000000E0 +:1030F00000000000000000000000000000000000D0 +:1031000000000000000000000000000000000000BF +:1031100000000000000000000000000000000000AF +:10312000000000000000000000000000000000009F +:10313000000000000000000000000000000000008F +:10314000000000000000000000000000000000007F +:10315000000000000000000000000000000000006F +:10316000000000000000000000000000000000005F +:10317000000000000000000000000000000000004F +:10318000000000000000000000000000000000003F +:10319000000000000000000000000000000000002F +:1031A000000000000000000000000000000000001F +:1031B000000000000000000000000000000000000F +:1031C00000000000000000000000000000000000FF +:1031D00000000000000000000000000000000000EF +:1031E00000000000000000000000000000000000DF +:1031F00000000000000000000000000000000000CF +:1032000000000000000000000000000000000000BE +:1032100000000000000000000000000000000000AE +:10322000000000000000000000000000000000009E +:10323000000000000000000000000000000000008E +:10324000000000000000000000000000000000007E +:10325000000000000000000000000000000000006E +:10326000000000000000000000000000000000005E +:10327000000000000000000000000000000000004E +:10328000000000000000000000000000000000003E +:10329000000000000000000000000000000000002E +:1032A000000000000000000000000000000000001E +:1032B000000000000000000000000000000000000E +:1032C00000000000000000000000000000000000FE +:1032D00000000000000000000000000000000000EE +:1032E00000000000000000000000000000000000DE +:1032F00000000000000000000000000000000000CE +:1033000000000000000000000000000000000000BD +:1033100000000000000000000000000000000000AD +:10332000000000000000000000000000000000009D +:10333000000000000000000000000000000000008D +:10334000000000000000000000000000000000007D +:10335000000000000000000000000000000000006D +:10336000000000000000000000000000000000005D +:10337000000000000000000000000000000000004D +:10338000000000000000000000000000000000003D +:10339000000000000000000000000000000000002D +:1033A000000000000000000000000000000000001D +:1033B000000000000000000000000000000000000D +:1033C00000000000000000000000000000000000FD +:1033D00000000000000000000000000000000000ED +:1033E00000000000000000000000000000000000DD +:1033F00000000000000000000000000000000000CD +:1034000000000000000000000000000000000000BC +:1034100000000000000000000000000000000000AC +:10342000000000000000000000000000000000009C +:10343000000000000000000000000000000000008C +:10344000000000000000000000000000000000007C +:10345000000000000000000000000000000000006C +:10346000000000000000000000000000000000005C +:10347000000000000000000000000000000000004C +:10348000000000000000000000000000000000003C +:10349000000000000000000000000000000000002C +:1034A000000000000000000000000000000000001C +:1034B000000000000000000000000000000000000C +:1034C00000000000000000000000000000000000FC +:1034D00000000000000000000000000000000000EC +:1034E00000000000000000000000000000000000DC +:1034F00000000000000000000000000000000000CC +:1035000000000000000000000000000000000000BB +:1035100000000000000000000000000000000000AB +:10352000000000000000000000000000000000009B +:10353000000000000000000000000000000000008B +:10354000000000000000000000000000000000007B +:10355000000000000000000000000000000000006B +:10356000000000000000000000000000000000005B +:10357000000000000000000000000000000000004B +:10358000000000000000000000000000000000003B +:10359000000000000000000000000000000000002B +:1035A000000000000000000000000000000000001B +:1035B000000000000000000000000000000000000B +:1035C00000000000000000000000000000000000FB +:1035D00000000000000000000000000000000000EB +:1035E00000000000000000000000000000000000DB +:1035F00000000000000000000000000000000000CB +:1036000000000000000000000000000000000000BA +:1036100000000000000000000000000000000000AA +:10362000000000000000000000000000000000009A +:10363000000000000000000000000000000000008A +:10364000000000000000000000000000000000007A +:10365000000000000000000000000000000000006A +:10366000000000000000000000000000000000005A +:10367000000000000000000000000000000000004A +:10368000000000000000000000000000000000003A +:10369000000000000000000000000000000000002A +:1036A000000000000000000000000000000000001A +:1036B000000000000000000000000000000000000A +:1036C00000000000000000000000000000000000FA +:1036D00000000000000000000000000000000000EA +:1036E00000000000000000000000000000000000DA +:1036F00000000000000000000000000000000000CA +:1037000000000000000000000000000000000000B9 +:1037100000000000000000000000000000000000A9 +:103720000000000000000000000000000000000099 +:103730000000000000000000000000000000000089 +:103740000000000000000000000000000000000079 +:103750000000000000000000000000000000000069 +:103760000000000000000000000000000000000059 +:103770000000000000000000000000000000000049 +:103780000000000000000000000000000000000039 +:103790000000000000000000000000000000000029 +:1037A0000000000000000000000000000000000019 +:1037B0000000000000000000000000000000000009 +:1037C00000000000000000000000000000000000F9 +:1037D00000000000000000000000000000000000E9 +:1037E00000000000000000000000000000000000D9 +:1037F00000000000000000000000000000000000C9 +:1038000000000000000000000000000000000000B8 +:1038100000000000000000000000000000000000A8 +:103820000000000000000000000000000000000098 +:103830000000000000000000000000000000000088 +:103840000000000000000000000000000000000078 +:103850000000000000000000000000000000000068 +:103860000000000000000000000000000000000058 +:103870000000000000000000000000000000000048 +:103880000000000000000000000000000000000038 +:103890000000000000000000000000000000000028 +:1038A0000000000000000000000000000000000018 +:1038B0000000000000000000000000000000000008 +:1038C00000000000000000000000000000000000F8 +:1038D00000000000000000000000000000000000E8 +:1038E00000000000000000000000000000000000D8 +:1038F00000000000000000000000000000000000C8 +:1039000000000000000000000000000000000000B7 +:1039100000000000000000000000000000000000A7 +:103920000000000000000000000000000000000097 +:103930000000000000000000000000000000000087 +:103940000000000000000000000000000000000077 +:103950000000000000000000000000000000000067 +:103960000000000000000000000000000000000057 +:103970000000000000000000000000000000000047 +:103980000000000000000000000000000000000037 +:103990000000000000000000000000000000000027 +:1039A0000000000000000000000000000000000017 +:1039B0000000000000000000000000000000000007 +:1039C00000000000000000000000000000000000F7 +:1039D00000000000000000000000000000000000E7 +:1039E00000000000000000000000000000000000D7 +:1039F00000000000000000000000000000000000C7 +:103A000000000000000000000000000000000000B6 +:103A100000000000000000000000000000000000A6 +:103A20000000000000000000000000000000000096 +:103A30000000000000000000000000000000000086 +:103A40000000000000000000000000000000000076 +:103A50000000000000000000000000000000000066 +:103A60000000000000000000000000000000000056 +:103A70000000000000000000000000000000000046 +:103A80000000000000000000000000000000000036 +:103A90000000000000000000000000000000000026 +:103AA0000000000000000000000000000000000016 +:103AB0000000000000000000000000000000000006 +:103AC00000000000000000000000000000000000F6 +:103AD00000000000000000000000000000000000E6 +:103AE00000000000000000000000000000000000D6 +:103AF00000000000000000000000000000000000C6 +:103B000000000000000000000000000000000000B5 +:103B100000000000000000000000000000000000A5 +:103B20000000000000000000000000000000000095 +:103B30000000000000000000000000000000000085 +:103B40000000000000000000000000000000000075 +:103B50000000000000000000000000000000000065 +:103B60000000000000000000000000000000000055 +:103B70000000000000000000000000000000000045 +:103B80000000000000000000000000000000000035 +:103B90000000000000000000000000000000000025 +:103BA0000000000000000000000000000000000015 +:103BB0000000000000000000000000000000000005 +:103BC00000000000000000000000000000000000F5 +:103BD00000000000000000000000000000000000E5 +:103BE00000000000000000000000000000000000D5 +:103BF00000000000000000000000000000000000C5 +:103C000000000000000000000000000000000000B4 +:103C100000000000000000000000000000000000A4 +:103C20000000000000000000000000000000000094 +:103C30000000000200000000000000000000000082 +:103C40000000000000000000000000000000000074 +:103C50000000000000000000000000000000000064 +:103C60000000000000000000000000000000000054 +:103C70000000000000000000000000000000000044 +:103C80000000000000000000000000000000000034 +:103C90000000000000000000000000000000000024 +:103CA0000000000000000000000000000000000014 +:103CB0000000000000000000000000000000000004 +:103CC00000000000000000000000000000000000F4 +:103CD00000000000000000000000000000000000E4 +:103CE00000000000000000000000000000000000D4 +:103CF00000000000000000000000000000000000C4 +:103D000000000000000000000000000000000000B3 +:103D100000000000000000000000000000000000A3 +:103D20000000000000000000000000000000000093 +:103D30000000000000000000000000000000000083 +:103D40000000000000000000000000000000000073 +:103D50000000000000000000000000000000000063 +:103D60000000000000000000000000000000000053 +:103D70000000000000000000000000000000000043 +:103D80000000000000000000000000000000000033 +:103D90000000000000000000000000000000000023 +:103DA0000000000000000000000000000000000013 +:103DB0000000000000000000000000000000000003 +:103DC00000000000000000000000000000000000F3 +:103DD00000000000000000000000000000000000E3 +:103DE00000000000000000000000000000000000D3 +:103DF00000000000000000000000000000000000C3 +:103E000000000000000000000000000000000000B2 +:103E100000000000000000000000000000000000A2 +:103E20000000000000000000000000000000000092 +:103E30000000000000000000000000000000000082 +:103E40000000000000000000000000000000000072 +:103E50000000000000000000000000000000000062 +:103E60000000000000000000000000000000000052 +:103E70000000000000000000000000000000000042 +:103E80000000000000000000000000000000000032 +:103E90000000000000000000000000000000000022 +:103EA0000000000000000000000000000000000012 +:103EB0000000000000000000000000000000000002 +:103EC00000000000000000000000000000000000F2 +:103ED00000000000000000000000000000000000E2 +:103EE00000000000000000000000000000000000D2 +:103EF00000000000000000000000000000000000C2 +:103F000000000000000000000000000000000000B1 +:103F100000000000000000000000000000000000A1 +:103F20000000000000000000000000000000000091 +:103F30000000000000000000000000000000000081 +:103F40000000000000000000000000000000000071 +:103F50000000000000000000000000000000000061 +:103F60000000000000000000000000000000000051 +:103F70000000000000000000000000000000000041 +:103F80000000000000000000000000000000000031 +:103F90000000000000000000000000000000000021 +:103FA0000000000000000000000000000000000011 +:103FB0000000000000000000000000000000000001 +:103FC00000000000000000000000000000000000F1 +:103FD00000000000000000000000000000000000E1 +:103FE00000000000000000000000000000000000D1 +:103FF00000000000000000000000000000000000C1 +:1040000000000000000000000000000000000000B0 +:1040100000000000000000000000000000000000A0 +:104020000000000000000000000000000000000090 +:104030000000000000000000000000000000000080 +:104040000000000000000000000000000000000070 +:104050000000000000000000000000000000000060 +:104060000000000000000000000000000000000050 +:104070000000000000000000000000000000000040 +:104080000000000000000000000000000000000030 +:104090000000000000000000000000000000000020 +:1040A0000000000000000000000000000000000010 +:1040B0000000000000000000000000000000000000 +:1040C00000000000000000000000000000000000F0 +:1040D00000000000000000000000000000000000E0 +:1040E00000000000000000000000000000000000D0 +:1040F00000000000000000000000000000000000C0 +:1041000000000000000000000000000000000000AF +:10411000000000000000000000000000000000009F +:10412000000000000000000000000000000000008F +:10413000000000000000000000000000000000007F +:10414000000000000000000000000000000000006F +:10415000000000000000000000000000000000005F +:10416000000000000000000000000000000000004F +:10417000000000000000000000000000000000003F +:10418000000000000000000000000000000000002F +:10419000000000000000000000000000000000001F +:1041A000000000000000000000000000000000000F +:1041B00000000000000000000000000000000000FF +:1041C00000000000000000000000000000000000EF +:1041D00000000000000000000000000000000000DF +:1041E00000000000000000000000000000000000CF +:1041F00000000000000000000000000000000000BF +:1042000000000000000000000000000000000000AE +:10421000000000000000000000000000000000009E +:10422000000000000000000000000000000000008E +:10423000000000000000000000000000000000007E +:10424000000000000000000000000000000000006E +:10425000000000000000000000000000000000005E +:10426000000000000000000000000000000000004E +:10427000000000000000000000000000000000003E +:10428000000000000000000000000000000000002E +:10429000000000000000000000000000000000001E +:1042A000000000000000000000000000000000000E +:1042B00000000000000000000000000000000000FE +:1042C00000000000000000000000000000000000EE +:1042D00000000000000000000000000000000000DE +:1042E00000000000000000000000000000000000CE +:1042F00000000000000000000000000000000000BE +:1043000000000000000000000000000000000000AD +:10431000000000000000000000000000000000009D +:10432000000000000000000000000000000000008D +:10433000000000000000000000000000000000007D +:10434000000000000000000000000000000000006D +:10435000000000000000000000000000000000005D +:10436000000000000000000000000000000000004D +:10437000000000000000000000000000000000003D +:10438000000000000000000000000000000000002D +:10439000000000000000000000000000000000001D +:1043A000000000000000000000000000000000000D +:1043B00000000000000000000000000000000000FD +:1043C00000000000000000000000000000000000ED +:1043D00000000000000000000000000000000000DD +:1043E00000000000000000000000000000000000CD +:1043F00000000000000000000000000000000000BD +:1044000000000000000000000000000000000000AC +:10441000000000000000000000000000000000009C +:10442000000000000000000000000000000000008C +:10443000000000000000000000000000000000007C +:10444000000000000000000000000000000000006C +:10445000000000000000000000000000000000005C +:10446000000000000000000000000000000000004C +:10447000000000000000000000000000000000003C +:10448000000000000000000000000000000000002C +:10449000000000000000000000000000000000001C +:1044A000000000000000000000000000000000000C +:1044B00000000000000000000000000000000000FC +:1044C00000000000000000000000000000000000EC +:1044D00000000000000000000000000000000000DC +:1044E00000000000000000000000000000000000CC +:1044F00000000000000000000000000000000000BC +:1045000000000000000000000000000000000000AB +:10451000000000000000000000000000000000009B +:10452000000000000000000000000000000000008B +:10453000000000000000000000000000000000007B +:10454000000000000000000000000000000000006B +:10455000000000000000000000000000000000005B +:10456000000000000000000000000000000000004B +:10457000000000000000000000000000000000003B +:10458000000000000000000000000000000000002B +:10459000000000000000000000000000000000001B +:1045A000000000000000000000000000000000000B +:1045B00000000000000000000000000000000000FB +:1045C00000000000000000000000000000000000EB +:1045D00000000000000000000000000000000000DB +:1045E00000000000000000000000000000000000CB +:1045F00000000000000000000000000000000000BB +:1046000000000000000000000000000000000000AA +:10461000000000000000000000000000000000009A +:10462000000000000000000000000000000000008A +:10463000000000000000000000000000000000007A +:10464000000000000000000000000000000000006A +:10465000000000000000000000000000000000005A +:10466000000000000000000000000000000000004A +:10467000000000000000000000000000000000003A +:10468000000000000000000000000000000000002A +:10469000000000000000000000000000000000001A +:1046A000000000000000000000000000000000000A +:1046B00000000000000000000000000000000000FA +:1046C00000000000000000000000000000000000EA +:1046D00000000000000000000000000000000000DA +:1046E00000000000000000000000000000000000CA +:1046F00000000000000000000000000000000000BA +:1047000000000000000000000000000000000000A9 +:104710000000000000000000000000000000000099 +:104720000000000000000000000000000000000089 +:104730000000000000000000000000000000000079 +:104740000000000000000000000000000000000069 +:104750000000000000000000000000000000000059 +:104760000000000000000000000000000000000049 +:104770000000000000000000000000000000000039 +:104780000000000000000000000000000000000029 +:104790000000000000000000000000000000000019 +:1047A0000000000000000000000000000000000009 +:1047B00000000000000000000000000000000000F9 +:1047C00000000000000000000000000000000000E9 +:1047D00000000000000000000000000000000000D9 +:1047E00000000000000000000000000000000000C9 +:1047F00000000000000000000000000000000000B9 +:1048000000000000000000000000000000000000A8 +:104810000000000000000000000000000000000098 +:104820000000000000000000000000000000000088 +:104830000000000000000000000000000000000078 +:104840000000000000000000000000000000000068 +:104850000000000000000000000000000000000058 +:104860000000000000000000000000000000000048 +:104870000000000000000000000000000000000038 +:104880000000000000000000000000000000000028 +:104890000000000000000000000000000000000018 +:1048A0000000000000000000000000000000000008 +:1048B00000000000000000000000000000000000F8 +:1048C00000000000000000000000000000000000E8 +:1048D00000000000000000000000000000000000D8 +:1048E00000000000000000000000000000000000C8 +:1048F00000000000000000000000000000000000B8 +:1049000000000000000000000000000000000000A7 +:104910000000000000000000000000000000000097 +:104920000000000000000000000000000000000087 +:104930000000000000000000000000000000000077 +:104940000000000000000000000000000000000067 +:104950000000000000000000000000000000000057 +:104960000000000000000000000000000000000047 +:104970000000000000000000000000000000000037 +:104980000000000000000000000000000000000027 +:104990000000000000000000000000000000000017 +:1049A0000000000000000000000000000000000007 +:1049B00000000000000000000000000000000000F7 +:1049C00000000000000000000000000000000000E7 +:1049D00000000000000000000000000000000000D7 +:1049E00000000000000000000000000000000000C7 +:1049F00000000000000000000000000000000000B7 +:104A000000000000000000000000000000000000A6 +:104A10000000000000000000000000000000000096 +:104A20000000000000000000000000000000000086 +:104A30000000000000000000000000000000000076 +:104A40000000000000000000000000000000000066 +:104A50000000000000000000000000000000000056 +:104A60000000000000000000000000000000000046 +:104A70000000000000000000000000000000000036 +:104A80000000000000000000000000000000000026 +:104A90000000000000000000000000000000000016 +:104AA0000000000000000000000000000000000006 +:104AB00000000000000000000000000000000000F6 +:104AC00000000000000000000000000000000000E6 +:104AD00000000000000000000000000000000000D6 +:104AE00000000000000000000000000000000000C6 +:104AF00000000000000000000000000000000000B6 +:104B000000000000000000000000000000000000A5 +:104B10000000000000000000000000000000000095 +:104B20000000000000000000000000000000000085 +:104B30000000000000000000000000000000000075 +:104B40000000000000000000000000000000000065 +:104B50000000000000000000000000000000000055 +:104B60000000000000000000000000000000000045 +:104B70000000000000000000000000000000000035 +:104B80000000000000000000000000000000000025 +:104B90000000000000000000000000000000000015 +:104BA0000000000000000000000000000000000005 +:104BB00000000000000000000000000000000000F5 +:104BC00000000000000000000000000000000000E5 +:104BD00000000000000000000000000000000000D5 +:104BE00000000000000000000002000000001000B3 +:104BF0000002000000000000400000000000000073 +:104C000040000002000000400002004000000040A0 +:104C10000000004000000000000000000000000054 +:104C20000000000000000000000000100000000074 +:104C30000000000000000000000000000000000074 +:104C40000000000000000000000000100000000054 +:104C50000000000000000000000000000000000054 +:104C60000000000000000000000000000010000034 +:104C70000000000000000000000000000000000034 +:104C80000000000000000000000000000000000024 +:104C90000000000000000000000000000000000014 +:104CA0000000000000000000000000000000000004 +:104CB00000000000000000000000000000000000F4 +:104CC00000000000000000000000000000000000E4 +:104CD00000000000000000000000000000000000D4 +:104CE00000000000000000000000000000000000C4 +:104CF00000000000000000000000000000000000B4 +:104D000000000000000000000000000000000000A3 +:104D10000000000000000000000000000000000093 +:104D20000000000000000000000000000000000083 +:104D30000000000000000000000000000000000073 +:104D40000000000000000000000000000000000063 +:104D50000000000000000000000000000000000053 +:104D60000000000000000000000000000000000043 +:104D70000000000000000000000000000000000033 +:104D80000000000000000000000000000000000023 +:104D9000000004000400000000000000000000000B +:104DA0000000000000000000000000000000000003 +:104DB00000000000000000000000000000000000F3 +:104DC00000000000000000000000000000000000E3 +:104DD00000000000000000000000000000000000D3 +:104DE00000000000000000000000000000000000C3 +:104DF00000000000000000000000000000000000B3 +:104E000000000000000000000000000000000000A2 +:104E10000000000000000000000000000000000092 +:104E20000000000000000000000000000000000082 +:104E30000000000000000000000000000000000072 +:104E40000000000000000000000000000000000062 +:104E50000000000000000000000000000000000052 +:104E60000000000000000000000000000000000042 +:104E70000000000000000000000000000000000032 +:104E80000000000000000000000000000000000022 +:104E90000000000000000000000000000000000012 +:104EA0000000000000000000000000000000000002 +:104EB00000000000000000000000000000000000F2 +:104EC00000000000000000000000000000000000E2 +:104ED00000000000000000000000000000000000D2 +:104EE00000000000000000000000000000000000C2 +:104EF00000000000000000000000000000000000B2 +:104F000000000000000000000000000000000000A1 +:104F10000000000000000000000000000000000091 +:104F20000000000000000000000000000000000081 +:104F30000000000000000000000000000000000071 +:104F40000000000000000000000000000000000061 +:104F50000000000000000000000000000000000051 +:104F60000000000000000000000000000000000041 +:104F70000000000000000000000000000000000031 +:104F80000000000000000000000000000000000021 +:104F90000000000000000000000000000000000011 +:104FA0000000000000000000000000000000000001 +:104FB00000000000000000000000000000000000F1 +:104FC00000000000000000000000000000000000E1 +:104FD00000000000000000000000000000000000D1 +:104FE00000000000000000000000000000000000C1 +:104FF00000000000000000000000000000000000B1 +:1050000000000000000000000000000000000000A0 +:105010000000000000000000000000000000000090 +:105020000000000000000000000000000000000080 +:105030000000000000000000000000000000000070 +:105040000000000000000000000000000000000060 +:105050000000000000000000000000000000000050 +:105060000000000000000000000000000000000040 +:105070000000000000000000000000000000000030 +:105080000000000000000000000000000000000020 +:105090000000000000000000000000000000000010 +:1050A0000000000000000000000000000000000000 +:1050B00000000000000000000000000000000000F0 +:1050C00000000000000000000000000000000000E0 +:1050D00000000000000000000000000000000000D0 +:1050E00000000000000000000000000000000000C0 +:1050F00000000000000000000000000000000000B0 +:10510000000000000000000000000000000000009F +:10511000000000000000000000000000000000008F +:10512000000000000000000000000000000000007F +:10513000000000000000000000000000000000006F +:10514000000000000000000000000000000000005F +:10515000000000000000000000000000000000004F +:10516000000000000000000000000000000000003F +:10517000000000000000000000000000000000002F +:10518000000000000000000000000000000000001F +:10519000000000000000000000000000000000000F +:1051A00000000000000000000000000000000000FF +:1051B00000000000000000000000000000000000EF +:1051C00000000000000000000000000000000000DF +:1051D00000000000000000000000000000000000CF +:1051E00000000000000000000000000000000000BF +:1051F00000000000000000000000000000000000AF +:10520000000000000000000000000000000000009E +:10521000000000000000000000000000000000008E +:10522000000000000000000000000000000000007E +:10523000000000000000000000000000000000006E +:10524000000000000000000000000000000000005E +:10525000000000000000000000000000000000004E +:10526000000000000000000000000000000000003E +:10527000000000000000000000000000000000002E +:10528000000000000000000000000000000000001E +:10529000000000000000000000000000000000000E +:1052A00000000000000000000000000000000000FE +:1052B00000000000000000000000000000000000EE +:1052C00000000000000000000000000000000000DE +:1052D00000000000000000000000000000000000CE +:1052E00000000000000000000000000000000000BE +:1052F00000000000000000000000000000000000AE +:10530000000000000000000000000000000000009D +:10531000000000000000000000000000000000008D +:10532000000000000000000000000000000000007D +:10533000000000000000000000000000000000006D +:10534000000000000000000000000000000000005D +:10535000000000000000000000000000000000004D +:10536000000000000000000000000000000000003D +:10537000000000000000000000000000000000002D +:10538000000000000000000000000000000000001D +:10539000000000000000000000000000000000000D +:1053A00000000000000000000000000000000000FD +:1053B00000000000000000000000000000000000ED +:1053C00000000000000000000000000000000000DD +:1053D00000000000000000000000000000000000CD +:1053E00000000000000000000000000000000000BD +:1053F00000000000000000000000000000000000AD +:10540000000000000000000000000000000000009C +:10541000000000000000000000000000000000008C +:10542000000000000000000000000000000000007C +:10543000000000000000000000000000000000006C +:10544000000000000000000000000000000000005C +:10545000000000000000000000000000000000004C +:10546000000000000000000000000000000000003C +:10547000000000000000000000000000000000002C +:10548000000000000000000000000000000000001C +:10549000000000000000000000000000000000000C +:1054A00000000000000000000000000000000000FC +:1054B00000000000000000000000000000000000EC +:1054C00000000000000000000000000000000000DC +:1054D00000000000000000000000000000000000CC +:1054E00000000000000000000000000000000000BC +:1054F00000000000000000000000000000000000AC +:10550000000000000000000000000000000000009B +:10551000000000000000000000000000000000008B +:10552000000000000000000000000000000000007B +:10553000000000000000000000000000000000006B +:10554000000000000000000000000000000000005B +:10555000000000000000000000000000000000004B +:10556000000000000000000000000000000000003B +:10557000000000000000000000000000000000002B +:10558000000000000000000000000000000000001B +:10559000000000000000000000000000000000000B +:1055A00000000000000000000000000000000000FB +:1055B00000000000000000000000000000000000EB +:1055C00000000000000000000000000000000000DB +:1055D00000000000000000000000000000000000CB +:1055E00000000000000000000000000000000000BB +:1055F00000000000000000000000000000000000AB +:10560000000000000000000000000000000000009A +:10561000000000000000000000000000000000008A +:10562000000000000000000000000000000000007A +:10563000000000000000000000000000000000006A +:10564000000000000000000000000000000000005A +:10565000000000000000000000000000000000004A +:10566000000000000000000000000000000000003A +:10567000000000000000000000000000000000002A +:10568000000000000000000000000000000000001A +:10569000000000000000000000000000000000000A +:1056A00000000000000000000000000000000000FA +:1056B00000000000000000000000000000000000EA +:1056C00000000000000000000000000000000000DA +:1056D00000000000000000000000000000000000CA +:1056E00000000000000000000000000000000000BA +:1056F00000000000000000000000000000000000AA +:105700000000000000000000000000000000000099 +:105710000000000000000000000000000000000089 +:105720000000000000000000000000000000000079 +:105730000000000000000000000000000000000069 +:105740000000000000000000000000000000000059 +:105750000000000000000000000000000000000049 +:105760000000000000000000000000000000000039 +:105770000000000000000000000000000000000029 +:105780000000000000000000000000000000000019 +:105790000000000000000000000000000000000009 +:1057A00000000000000000000000000000000000F9 +:1057B00000000000000000000000000000000000E9 +:1057C00000000000000000000000000000000000D9 +:1057D00000000000000000000000000000000000C9 +:1057E00000000000000000000000000000000000B9 +:1057F00000000000000000000000000000000000A9 +:105800000000000000000000000000000000000098 +:105810000000000000000000000000000000000088 +:105820000000000000000000000000000000000078 +:105830000000000000000000000000000000000068 +:105840000000000000000000000000000000000058 +:105850000000000000000000000000000000000048 +:105860000000000000000000000000000000000038 +:105870000000000000000000000000000000000028 +:105880000000000000000000000000000000000018 +:105890000000000000000000000000000000000008 +:1058A00000000000000000000000000000000000F8 +:1058B00000000000000000000000000000000000E8 +:1058C00000000000000000000000000000000000D8 +:1058D00000000000000000000000000000000000C8 +:1058E00000000000000000000000000000000000B8 +:1058F00000000000000000000000000000000000A8 +:105900000000000000000000000000000000000097 +:105910000000000000000000000000000000000087 +:105920000000000000000000000000000000000077 +:105930000000000000000000000000000000000067 +:105940000000000000000000000000000000000057 +:105950000000000000000000000000000000000047 +:105960000000000000000000000000000000000037 +:105970000000000000000000000000000000000027 +:105980000000000000000000000000000000000017 +:105990000000000000000000000000000000000007 +:1059A00000000000000000000000000000000000F7 +:1059B00000000000000000000000000000000000E7 +:1059C00000000000000000000000000000000000D7 +:1059D00000000000000000000000000000000000C7 +:1059E00000000000000000000000000000000000B7 +:1059F00000000000000000000000000000000000A7 +:105A00000000000000000000000000000000000096 +:105A10000000000000000000000000000000000086 +:105A20000000000000000000000000000000000076 +:105A30000000000000000000000000000000000066 +:105A40000000000000000000000000000000000056 +:105A50000000000000000000000400000000000042 +:105A60000000000000000000000000000000000036 +:105A70000000000000000000000000000000000026 +:105A80000000000000000000000000000000000016 +:105A90000000000000000000000000000000000006 +:105AA00000000000000000000000000000000000F6 +:105AB00000000000000000000000000000000000E6 +:105AC00000000000000000000000000000000000D6 +:105AD00000000000000000000000000000000000C6 +:105AE00000000000000000000000000000000000B6 +:105AF00000000000000000000000000000000000A6 +:105B00000000000000000000000000000000000095 +:105B10000000000000000000000000000000000085 +:105B200000000000009000000000000000000000E5 +:105B300000000000000000400000004000000040A5 +:105B40000040000000000000000000000000000015 +:105B50000000000000000000000000000000000045 +:105B60000000000000000000000000000000000035 +:105B70000000000000000000000000000000000025 +:105B80000000000000000000000000000000000015 +:105B90000000000000000000000000000000000005 +:105BA00000000000000000000000000000000000F5 +:105BB00000000000000000000000000000000000E5 +:105BC00000000000000000000000000000000000D5 +:105BD00000000000000000000000000000000000C5 +:105BE00000000000000000000000000000000000B5 +:105BF00000000000000000000000000000000000A5 +:105C00000000000000000000000000000000000094 +:105C10000000000000000000000000000000000084 +:105C20000000000000000000000000000000000074 +:105C30000000000000000000000000000000000064 +:105C40000000000000000000000000000000000054 +:105C50000000000000000000000000000000000044 +:105C60000000000000000000000000000000000034 +:105C70000000000000000000000000000000000024 +:105C80000000000000000000000000000000000014 +:105C90000000000000000000000000000000000004 +:105CA00000000000000000000000000000000000F4 +:105CB00000000000000000000000000000000000E4 +:105CC00000000000000000000000000000000000D4 +:105CD00000000000000000000000000000000000C4 +:105CE00000000000000000000000000000000000B4 +:105CF00000000000000000000000000000000000A4 +:105D00000000000000000000000000000000000093 +:105D10000000000000000000000000000000000083 +:105D20000000000000000000000000000000000073 +:105D30000000000000000000000000000000000063 +:105D40000000000000000000000000000000000053 +:105D50000000000000000000000000000000000043 +:105D60000000000000000000000000000000000033 +:105D70000000000000000000000000000000000023 +:105D80000000000000000000000000000000000013 +:105D90000000000000000000000000000000000003 +:105DA00000000000000000000000000000000000F3 +:105DB00000000000000000000000000000000000E3 +:105DC00000000000000000000000000000000000D3 +:105DD00000000000000000000000000000000000C3 +:105DE00000000000000000000000000000000000B3 +:105DF00000000000000000000000000000000000A3 +:105E00000000000000000000000000000000000092 +:105E10000000000000000000000000000000000082 +:105E20000000000000000000000000000000000072 +:105E30000000000000000000000000000000000062 +:105E40000000000000000000000000000000000052 +:105E50000000000000000000000000000000000042 +:105E60000000000000000000000000000000000032 +:105E70000000000000000000000000000000000022 +:105E80000000000000000000000000000000000012 +:105E90000000000000000000000000000000000002 +:105EA00000000000000000000000000000000000F2 +:105EB00000000000000000000000000000000000E2 +:105EC00000000000000000000000000000000000D2 +:105ED00000000000000000000000000000000000C2 +:105EE00000000000000000000000000000000000B2 +:105EF00000000000000000000000000000000000A2 +:105F00000000000000000000000000000000000091 +:105F10000000000000000000000000000000000081 +:105F20000000000000000000000000000000000071 +:105F30000000000000000000000000000000000061 +:105F40000000000000000000000000000000000051 +:105F50000000000000000000000000000000000041 +:105F60000000000000000000000000000000000031 +:105F70000000000000000000000000000000000021 +:105F80000000000000000000000000000000000011 +:105F90000000000000000000000000000000000001 +:105FA00000000000000000000000000000000000F1 +:105FB00000000000000000000000000000000000E1 +:105FC00000000000000000000000000000000000D1 +:105FD00000000000000000000000000000000000C1 +:105FE00000000000000000000000000000000000B1 +:105FF00000000000000000000000000000000000A1 +:106000000000000000000000000000000000000090 +:106010000000000000000000000000000000000080 +:106020000000000000000000000000000000000070 +:106030000000000000000000000000000000000060 +:106040000000000000000000000000000000000050 +:106050000000000000000000000000000000000040 +:106060000000000000000000000000000000000030 +:106070000000000000000000000000000000000020 +:106080000000000000000000000000000000000010 +:106090000000000000000000000000000000000000 +:1060A00000000000000000000000000000000000F0 +:1060B00000000000000000000000000000000000E0 +:1060C00000000000000000000000000000000000D0 +:1060D00000000000000000000000000000000000C0 +:1060E00000000000000000000000000000000000B0 +:1060F00000000000000000000000000000000000A0 +:10610000000000000000000000000000000000008F +:10611000000000000000000000000000000000007F +:10612000000000000000000000000000000000006F +:10613000000000000000000000000000000000005F +:10614000000000000000000000000000000000004F +:10615000000000000000000000000000000000003F +:10616000000000000000000000000000000000002F +:10617000000000000000000000000000000000001F +:10618000000000000000000000000000000000000F +:1061900000000000000000000000000000000000FF +:1061A00000000000000000000000000000000000EF +:1061B00000000000000000000000000000000000DF +:1061C00000000000000000000000000000000000CF +:1061D00000000000000000000000000000000000BF +:1061E00000000000000000000000000000000000AF +:1061F000000000000000000000000000000000009F +:10620000000000000000000000000000000000008E +:10621000000000000000000000000000000000007E +:10622000000000000000000000000000000000006E +:10623000000000000000000000000000000000005E +:10624000000000000000000000000000000000004E +:10625000000000000000000000000000000000003E +:10626000000000000000000000000000000000002E +:10627000000000000000000000000000000000001E +:10628000000000000000000000000000000000000E +:1062900000000000000000000000000000000000FE +:1062A00000000000000000000000000000000000EE +:1062B00000000000000000000000000000000000DE +:1062C00000000000000000000000000000000000CE +:1062D00000000000000000000000000000000000BE +:1062E00000000000000000000000000000000000AE +:1062F000000000000000000000000000000000009E +:10630000000000000000000000000000000000008D +:10631000000000000000000000000000000000007D +:10632000000000000000000000000000000000006D +:10633000000000000000000000000000000000005D +:10634000000000000000000000000000000000004D +:10635000000000000000000000000000000000003D +:10636000000000000000000000000000000000002D +:10637000000000000000000000000000000000001D +:10638000000000000000000000000000000000000D +:1063900000000000000000000000000000000000FD +:1063A00000000000000000000000000000000000ED +:1063B00000000000000000000000000000000000DD +:1063C00000000000000000000000000000000000CD +:1063D00000000000000000000000000000000000BD +:1063E00000000000000000000000000000000000AD +:1063F000000000000000000000000000000000009D +:10640000000000000000000000000000000000008C +:10641000000000000000000000000000000000007C +:10642000000000000000000000000000000000006C +:10643000000000000000000000000000000000005C +:10644000000000000000000000000000000000004C +:10645000000000000000000000000000000000003C +:10646000000000000000000000000000000000002C +:10647000000000000000000000000000000000001C +:10648000000000000000000000000000000000000C +:1064900000000000000000000000000000000000FC +:1064A00000000000000000000000000000000000EC +:1064B00000000000000000000000000000000000DC +:1064C00000000000000000000000000000000000CC +:1064D00000000000000000000000000000000000BC +:1064E00000000000000000000000000000000000AC +:1064F000000000000000000000000000000000009C +:10650000000000000000000000000000000000008B +:10651000000000000000000000000000000000007B +:10652000000000000000000000000000000000006B +:10653000000000000000000000000000000000005B +:10654000000000000000000000000000000000004B +:10655000000000000000000000000000000000003B +:10656000000000000000000000000000000000002B +:10657000000000000000000000000000000000001B +:10658000000000000000000000000000000000000B +:1065900000000000000000000000000000000000FB +:1065A00000000000000000000000000000000000EB +:1065B00000000000000000000000000000000000DB +:1065C00000000000000000000000000000000000CB +:1065D00000000000000000000000000000000000BB +:1065E00000000000000000000000000000000000AB +:1065F000000000000000000000000000000000009B +:10660000000000000000000000000000000000008A +:10661000000000000000000000000000000000007A +:10662000000000000000000000000000000000006A +:10663000000000000000000000000000000000005A +:10664000000000000000000000000000000000004A +:10665000000000000000000000000000000000003A +:10666000000000000000000000000000000000002A +:10667000000000000000000000000000000000001A +:10668000000000000000000000000000000000000A +:1066900000000000000000000000000000000000FA +:1066A00000000000000000000000000000000000EA +:1066B00000000000000000000000000000000000DA +:1066C00000000000000000000000000000000000CA +:1066D00000000000000000000000000000000000BA +:1066E00000000000000000000000000000000000AA +:1066F000000000000000000000000000000000009A +:106700000000000000000000000000000000000089 +:106710000000000000000000000000000000000079 +:106720000000000000000000000000000000000069 +:106730000000000000000000000000000000000059 +:106740000000000000000000000000000000000049 +:106750000000000000000000000000000000000039 +:106760000000000000000000000000000000000029 +:106770000000000000000000000000000000000019 +:106780000000000000000000000000000000000009 +:1067900000000000000000000000000000000000F9 +:1067A00000000000000000000000000000000000E9 +:1067B00000000000000000000000000000000000D9 +:1067C00000000000000000000000000000000000C9 +:1067D00000000000000000000000000000000000B9 +:1067E00000000000000000000000000000000000A9 +:1067F0000000000000000000000000000000000099 +:106800000000000000000000000000000000000088 +:106810000000000000000000000000000000000078 +:106820000000000000000000000000000000000068 +:106830000000000000000000000000000000000058 +:106840000000000000000000000000000000000048 +:106850000000000000000000000000000000000038 +:106860000000000000000000000000000000000028 +:106870000000000000000000000000000000000018 +:106880000000000000000000000000000000000008 +:1068900000000000000000000000000000000000F8 +:1068A00000000000000000000000000000000000E8 +:1068B00000000000000000000000000000000000D8 +:1068C00000000000000000000000000000000000C8 +:1068D00000000000000000000000000000000000B8 +:1068E00000000000000000000000000000000000A8 +:1068F0000000000000000000000000000000000098 +:106900000000000000000000000000000000000087 +:106910000000000000000000000000000000000077 +:106920000000000000000000000000000000000067 +:106930000000000000000000000000000000000057 +:106940000000000000000000000000000000000047 +:106950000000000000000000000000000000000037 +:106960000000000000000000000000000000000027 +:106970000000000000000000000000000000000017 +:106980000000000000000000000000000000000007 +:1069900000000000000000000000000000000000F7 +:1069A00000000000000000000000000000000000E7 +:1069B00000000000000000000000000000000000D7 +:1069C00000000000000000000000000000000000C7 +:1069D00000000000000000000000000000000000B7 +:1069E00000000000000000000000000000000000A7 +:1069F0000000000000000000000000000000000097 +:106A00000000000000000000000000000000000086 +:106A10000000000000000000000000000000000076 +:106A20000000000020000000000000000000000046 +:106A30000000000000000000000000000000000056 +:106A40000000000020000000000000000000000026 +:106A50000000000000000000000000000000000036 +:106A60000000000000002000000000000000000006 +:106A70000000000000000000000000000000000016 +:106A800000000000000020000000000000000000E6 +:106A900000000000000000000000000000000000F6 +:106AA00000000000000000000000000000000000E6 +:106AB00000000000000000000000000000000000D6 +:106AC00000000000000000000000000000000000C6 +:106AD00000000000000000000000000000000000B6 +:106AE00000002190000000000000210000000000D4 +:106AF0000000404000004000000040000000400056 +:106B00000000000000000000000000000000000085 +:106B10000000000000000000000000000000000075 +:106B20000000000000000000000000000000000065 +:106B3000000000000840000000000000000000000D +:106B40000000000000000000000000000000020043 +:106B500000000000084000000000000000000000ED +:106B60000000000000000000000000000000000025 +:106B70000000000000000200000000000000000013 +:106B80000000000000000000000000000000000005 +:106B900000000000000000000000000000000000F5 +:106BA00000000000000000000000000000000000E5 +:106BB00000000000000000000000000000000000D5 +:106BC0000000000000000000400000000000000085 +:106BD00000000000000000000000000000000000B5 +:106BE00000000000000000000000000000000000A5 +:106BF0000000000000000000000000000000000095 +:106C00000000000000000000000000000000000084 +:106C10000000000000000000000000000000000074 +:106C20000000000000000000000000000000000064 +:106C30000000000000000000000000000000000054 +:106C40000000000000000000000000000000000044 +:106C50000000000000000000000000000000000034 +:106C60000000000000000000000000000000000024 +:106C70000000000000000000000000000000000014 +:106C80000000000000000000000000000000000004 +:106C900000000000000000000000000000000000F4 +:106CA00000000000000000000000000000000000E4 +:106CB00000000000000000000000000000000000D4 +:106CC00000000000000000000000000000000000C4 +:106CD00000000000000000000000000000000000B4 +:106CE00000000000000000000000000000000000A4 +:106CF0000000000000000000000000000000000094 +:106D00000000000000000000000000000000000083 +:106D10000000000000000000000000000000000073 +:106D20000000000000000000000000000000000063 +:106D30000000000000000000000000000000000053 +:106D40000000000000000000000000000000000043 +:106D50000000000000000000000000000000000033 +:106D60000000000000000000000000000000000023 +:106D70000000000000000000000000000000000013 +:106D80000000000000000000000000000000000003 +:106D900000000000000000000000000000000000F3 +:106DA00000000000000000000000000000000000E3 +:106DB00000000000000000000000000000000000D3 +:106DC00000000000000000000000000000000000C3 +:106DD00000000000000000000000000000000000B3 +:106DE00000000000000000000000000000000000A3 +:106DF0000000000000000000000000000000000093 +:106E00000000000000000000000000000000000082 +:106E10000000000000000000000000000000000072 +:106E20000000000000000000000000000000000062 +:106E30000000000000000000000000000000000052 +:106E40000000000000000000000000000000000042 +:106E50000000000000000000000000000000000032 +:106E60000000000000000000000000000000000022 +:106E70000000000000000000000000000000000012 +:106E80000000000000000000000000000000000002 +:106E900000000000000000000000000000000000F2 +:106EA00000000000000000000000000000000000E2 +:106EB00000000000000000000000000000000000D2 +:106EC00000000000000000000000000000000000C2 +:106ED00000000000000000000000000000000000B2 +:106EE00000000000000000000000000000000000A2 +:106EF0000000000000000000000000000000000092 +:106F00000000000000000000000000000000000081 +:106F10000000000000000000000000000000000071 +:106F20000000000000000000000000000000000061 +:106F30000000000000000000000000000000000051 +:106F40000000000000000000000000000000000041 +:106F50000000000000000000000000000000000031 +:106F60000000000000000000000000000000000021 +:106F70000000000000000000000000000000000011 +:106F80000000000000000000000000000000000001 +:106F900000000000000000000000000000000000F1 +:106FA00000000000000000000000000000000000E1 +:106FB00000000000000000000000000000000000D1 +:106FC00000000000000000000000000000000000C1 +:106FD00000000000000000000000000000000000B1 +:106FE00000000000000000000000000000000000A1 +:106FF0000000000000000000000000000000000091 +:107000000000000000000000000000000000000080 +:107010000000000000000000000000000000000070 +:107020000000000000000000000000000000000060 +:107030000000000000000000000000000000000050 +:107040000000000000000000000000000000000040 +:107050000000000000000000000000000000000030 +:107060000000000000000000000000000000000020 +:107070000000000000000000000000000000000010 +:107080000000000000000000000000000000000000 +:1070900000000000000000000000000000000000F0 +:1070A00000000000000000000000000000000000E0 +:1070B00000000000000000000000000000000000D0 +:1070C00000000000000000000000000000000000C0 +:1070D00000000000000000000000000000000000B0 +:1070E00000000000000000000000000000000000A0 +:1070F0000000000000000000000000000000000090 +:10710000000000000000000000000000000000007F +:10711000000000000000000000000000000000006F +:10712000000000000000000000000000000000005F +:10713000000000000000000000000000000000004F +:10714000000000000000000000000000000000003F +:10715000000000000000000000000000000000002F +:10716000000000000000000000000000000000001F +:10717000000000000000000000000000000000000F +:1071800000000000000000000000000000000000FF +:1071900000000000000000000000000000000000EF +:1071A00000000000000000000000000000000000DF +:1071B00000000000000000000000000000000000CF +:1071C00000000000000000000000000000000000BF +:1071D00000000000000000000000000000000000AF +:1071E000000000000000000000000000000000009F +:1071F000000000000000000000000000000000008F +:10720000000000000000000000000000000000007E +:10721000000000000000000000000000000000006E +:10722000000000000000000000000000000000005E +:10723000000000000000000000000000000000004E +:10724000000000000000000000000000000000003E +:10725000000000000000000000000000000000002E +:10726000000000000000000000000000000000001E +:10727000000000000000000000000000000000000E +:1072800000000000000000000000000000000000FE +:1072900000000000000000000000000000000000EE +:1072A00000000000000000000000000000000000DE +:1072B00000000000000000000000000000000000CE +:1072C00000000000000000000000000000000000BE +:1072D00000000000000000000000000000000000AE +:1072E000000000000000000000000000000000009E +:1072F000000000000000000000000000000000008E +:10730000000000000000000000000000000000007D +:10731000000000000000000000000000000000006D +:10732000000000000000000000000000000000005D +:10733000000000000000000000000000000000004D +:10734000000000000000000000000000000000003D +:10735000000000000000000000000000000000002D +:10736000000000000000000000000000000000001D +:10737000000000000000000000000000000000000D +:1073800000000000000000000000000000000000FD +:1073900000000000000000000000000000000000ED +:1073A00000000000000000000000000000000000DD +:1073B00000000000000000000000000000000000CD +:1073C00000000000000000000000000000000000BD +:1073D00000000000000000000000000000000000AD +:1073E000000000000000000000000000000000009D +:1073F000000000000000000000000000000000008D +:10740000000000000000000000000000000000007C +:10741000000000000000000000000000000000006C +:10742000000000000000000000000000000000005C +:10743000000000000000000000000000000000004C +:10744000000000000000000000000000000000003C +:10745000000000000000000000000000000000002C +:10746000000000000000000000000000000000001C +:10747000000000000000000000000000000000000C +:1074800000000000000000000000000000000000FC +:1074900000000000000000000000000000000000EC +:1074A00000000000000000000000000000000000DC +:1074B00000000000000000000000000000000000CC +:1074C00000000000000000000000000000000000BC +:1074D00000000000000000000000000000000000AC +:1074E000000000000000000000000000000000009C +:1074F000000000000000000000000000000000008C +:10750000000000000000000000000000000000007B +:10751000000000000000000000000000000000006B +:10752000000000000000000000000000000000005B +:10753000000000000000000000000000000000004B +:10754000000000000000000000000000000000003B +:10755000000000000000000000000000000000002B +:10756000000000000000000000000000000000001B +:10757000000000000000000000000000000000000B +:1075800000000000000000000000000000000000FB +:1075900000000000000000000000000000000000EB +:1075A00000000000000000000000000000000000DB +:1075B00000000000000000000000000000000000CB +:1075C00000000000000000000000000000000000BB +:1075D00000000000000000000000000000000000AB +:1075E000000000000000000000000000000000009B +:1075F000000000000000000000000000000000008B +:10760000000000000000000000000000000000007A +:10761000000000000000000000000000000000006A +:10762000000000000000000000000000000000005A +:10763000000000000000000000000000000000004A +:10764000000000000000000000000000000000003A +:10765000000000000000000000000000000000002A +:10766000000000000000000000000000000000001A +:10767000000000000000000000000000000000000A +:1076800000000000000000000000000000000000FA +:1076900000000000000000000000000000000000EA +:1076A00000000000000000000000000000000000DA +:1076B00000000000000000000000000000000000CA +:1076C00000000000000000000000000000000000BA +:1076D00000000000000000000000000000000000AA +:1076E000000000000000000000000000000000009A +:1076F000000000000000000000000000000000008A +:107700000000000000000000000000000000000079 +:107710000000000000000000000000000000000069 +:107720000000000000000000000000000000000059 +:107730000000000000000000000000000000000049 +:107740000000000000000000000000000000000039 +:107750000000000000000000000000000000000029 +:107760000000000000000000000000000000000019 +:107770000000000000000000000000000000000009 +:1077800000000000000000000000000000000000F9 +:1077900000000000000000000000000000000000E9 +:1077A00000000000000000000000000000000000D9 +:1077B00000000000000000000000000000000000C9 +:1077C00000000000000000000000000000000000B9 +:1077D00000000000000000000000000000000000A9 +:1077E0000000000000000000000000000000000099 +:1077F0000000000000000000000000000000000089 +:107800000000000000000000000000000000000078 +:107810000000000000000000000000000000000068 +:107820000000000000000000000000000000000058 +:107830000000000000000000000000000000000048 +:107840000000000000000000000000000000000038 +:107850000000000000000000000000000000000028 +:107860000000000000000000000000000000000018 +:107870000000000000000000000000000000000008 +:1078800000000000000000000000000000000000F8 +:1078900000000000000000000000000000000000E8 +:1078A00000000000000000000000000000000000D8 +:1078B00000000000000000000000000000000000C8 +:1078C00000000000000000000000000000000000B8 +:1078D00000000000000000000000000000000000A8 +:1078E0000000000000000000000000000000000098 +:1078F0000000000000000000000000000000000088 +:107900000000000000000000000000000000000077 +:107910000000000000000000000000000000000067 +:107920000000000000000000000000000000000057 +:107930000000000000000000000000000000000047 +:107940000000000000000000000000000000000037 +:1079500000000000000000002000000020000000E7 +:107960000000000400000000000000000000000013 +:1079700000000000C0000000200000002000000007 +:1079800000000000000000000000000000000000F7 +:1079900000000000000000000000000000002000C7 +:1079A00000000000000000000000000000000000D7 +:1079B000000000000000000000000000C0002000E7 +:1079C00000000000000000000000000000000000B7 +:1079D00000000000000000000000000000000000A7 +:1079E0000000000000000000000000000000000097 +:1079F0000000000000000000000000000000000087 +:107A00000000000000000000000000000000000076 +:107A10000000000000000000000000000000000066 +:107A200000004100000041C0000041004100000092 +:107A30000000000000000000000000000000000046 +:107A40000000000000000000000000000000000036 +:107A50000000000000000000000000000000000026 +:107A60000000000000000000000000000000000016 +:107A70000000000000000000000000000000000006 +:107A800000000000000000000000000000000000F6 +:107A900000000000000000000000000000000000E6 +:107AA00000000000000000000000000000000000D6 +:107AB00000000000000000000000000300000000C3 +:107AC00000000000000000000000000000000000B6 +:107AD00000000000000000000000000000000000A6 +:107AE0000000000000000000000000000000000096 +:107AF0000000000000000000000000000000000086 +:107B00000000000000000000000000000000000075 +:107B10000000000000000000000000000000000065 +:107B20000000000000000000000000000000000055 +:107B300000820000000000000000000000000000C3 +:107B40000000000000000000000000000000000035 +:107B50000000000000000000000000000000000025 +:107B60000000000000000000000000000000000015 +:107B70000000000000000000000000000000000005 +:107B800000000000000000000000000000000000F5 +:107B900000000000000000000000000000000000E5 +:107BA000000000000000880000000000000000004D +:107BB00000000000000000000000000000000000C5 +:107BC00000000000000000000000000000000000B5 +:107BD00000000000000000000000000000000000A5 +:107BE0000000000000000000000000000000000095 +:107BF0000000000000000000000000000000000085 +:107C00000000000000000000000000000000000074 +:107C10000000000000000000000000000000000064 +:107C20000000000000000000000000000000000054 +:107C30000000000000000000000000000000000044 +:107C40000000000000000000000000000000000034 +:107C50000000000000000000000000000000000024 +:107C60000000000000000000000000000000000014 +:107C70000000000000000000000000000000000004 +:107C800000000000000000000000000000000000F4 +:107C900000000000000000000000000000000000E4 +:107CA00000000000000000000000000000000000D4 +:107CB00000000000000000000000000000000000C4 +:107CC00000000000000000000000000000000000B4 +:107CD00000000000000000000000000000000000A4 +:107CE000100000000000080000000000000000007C +:107CF0000000000000000000000000000000000084 +:107D00000000000000000000000000000000000073 +:107D1000000000000000000800000000000000005B +:107D20000000100008000500080005000000000029 +:107D30000000000000000000000000000000000043 +:107D4000000000000000000000000500000000002E +:107D50000000000000000000000000000000000023 +:107D60000000000000000000000000000000000013 +:107D70000000000000000000000000000000000003 +:107D800000000000000000000000000000000000F3 +:107D900000000000000000000000000000000000E3 +:107DA00000000000000000000000000000000000D3 +:107DB00000000000000000000000000000000000C3 +:107DC00000000000000000000000000000000000B3 +:107DD00000000000000000000000000000000000A3 +:107DE0000000000000000000000000000000000093 +:107DF0000000000000000000000000000000000083 +:107E00000000000000000000000000000000000072 +:107E10000000000000000000000000000000000062 +:107E20000000000000000000000000000000000052 +:107E30000000000000000000000000000000000042 +:107E40000000000000000000000000000000000032 +:107E50000000000000000000000000000000000022 +:107E60000000000000000000000000000000000012 +:107E70000000000000000000000000000000000002 +:107E800000000000000000000000000000000000F2 +:107E900000000000000000000000000000000000E2 +:107EA00000000000000000000000000000000000D2 +:107EB00000000000000000000000000000000000C2 +:107EC00000000000000000000000000000000000B2 +:107ED00000000000000000000000000000000000A2 +:107EE0000000000000000000000000000000000092 +:107EF0000000000000000000000000000000000082 +:107F00000000000000000000000000000000000071 +:107F10000000000000000000000000000000000061 +:107F20000000000000000000000000000000000051 +:107F30000000000000000000000000000000000041 +:107F40000000000000000000000000000000000031 +:107F50000000000000000000000000000000000021 +:107F60000000000000000000000000000000000011 +:107F70000000000000000000000000000000000001 +:107F800000000000000000000000000000000000F1 +:107F900000000000000000000000000000000000E1 +:107FA00000000000000000000000000000000000D1 +:107FB00000000000000000000000000000000000C1 +:107FC00000000000000000000000000000000000B1 +:107FD00000000000000000000000000000000000A1 +:107FE0000000000000000000000000000000000091 +:107FF0000000000000000000000000000000000081 +:108000000000000000000000000000000000000070 +:108010000000000000000000000000000000000060 +:108020000000000000000000000000000000000050 +:108030000000000000000000000000000000000040 +:108040000000000000000000000000000000000030 +:108050000000000000000000000000000000000020 +:108060000000000000000000000000000000000010 +:108070000000000000000000000000000000000000 +:1080800000000000000000000000000000000000F0 +:1080900000000000000000000000000000000000E0 +:1080A00000000000000000000000000000000000D0 +:1080B00000000000000000000000000000000000C0 +:1080C00000000000000000000000000000000000B0 +:1080D00000000000000000000000000000000000A0 +:1080E0000000000000000000000000000000000090 +:1080F0000000000000000000000000000000000080 +:10810000000000000000000000000000000000006F +:10811000000000000000000000000000000000005F +:10812000000000000000000000000000000000004F +:10813000000000000000000000000000000000003F +:10814000000000000000000000000000000000002F +:10815000000000000000000000000000000000001F +:10816000000000000000000000000000000000000F +:1081700000000000000000000000000000000000FF +:1081800000000000000000000000000000000000EF +:1081900000000000000000000000000000000000DF +:1081A00000000000000000000000000000000000CF +:1081B00000000000000000000000000000000000BF +:1081C00000000000000000000000000000000000AF +:1081D000000000000000000000000000000000009F +:1081E000000000000000000000000000000000008F +:1081F000000000000000000000000000000000007F +:10820000000000000000000000000000000000006E +:10821000000000000000000000000000000000005E +:10822000000000000000000000000000000000004E +:10823000000000000000000000000000000000003E +:10824000000000000000000000000000000000002E +:10825000000000000000000000000000000000001E +:10826000000000000000000000000000000000000E +:1082700000000000000000000000000000000000FE +:1082800000000000000000000000000000000000EE +:1082900000000000000000000000000000000000DE +:1082A00000000000000000000000000000000000CE +:1082B00000000000000000000000000000000000BE +:1082C00000000000000000000000000000000000AE +:1082D000000000000000000000000000000000009E +:1082E000000000000000000000000000000000008E +:1082F000000000000000000000000000000000007E +:10830000000000000000000000000000000000006D +:10831000000000000000000000000000000000005D +:10832000000000000000000000000000000000004D +:10833000000000000000000000000000000000003D +:10834000000000000000000000000000000000002D +:10835000000000000000000000000000000000001D +:10836000000000000000000000000000000000000D +:1083700000000000000000000000000000000000FD +:1083800000000000000000000000000000000000ED +:1083900000000000000000000000000000000000DD +:1083A00000000000000000000000000000000000CD +:1083B00000000000000000000000000000000000BD +:1083C00000000000000000000000000000000000AD +:1083D000000000000000000000000000000000009D +:1083E000000000000000000000000000000000008D +:1083F000000000000000000000000000000000007D +:10840000000000000000000000000000000000006C +:10841000000000000000000000000000000000005C +:10842000000000000000000000000000000000004C +:10843000000000000000000000000000000000003C +:10844000000000000000000000000000000000002C +:10845000000000000000000000000000000000001C +:10846000000000000000000000000000000000000C +:1084700000000000000000000000000000000000FC +:1084800000000000000000000000000000000000EC +:1084900000000000000000000000000000000000DC +:1084A00000000000000000000000000000000000CC +:1084B00000000000000000000000000000000000BC +:1084C00000000000000000000000000000000000AC +:1084D000000000000000000000000000000000009C +:1084E000000000000000000000000000000000008C +:1084F000000000000000000000000000000000007C +:10850000000000000000000000000000000000006B +:10851000000000000000000000000000000000005B +:10852000000000000000000000000000000000004B +:10853000000000000000000000000000000000003B +:10854000000000000000000000000000000000002B +:10855000000000000000000000000000000000001B +:10856000000000000000000000000000000000000B +:1085700000000000000000000000000000000000FB +:1085800000000000000000000000000000000000EB +:1085900000000000000000000000000000000000DB +:1085A00000000000000000000000000000000000CB +:1085B00000000000000000000000000000000000BB +:1085C00000000000000000000000000000000000AB +:1085D000000000000000000000000000000000009B +:1085E000000000000000000000000000000000008B +:1085F000000000000000000000000000000000007B +:10860000000000000000000000000000000000006A +:10861000000000000000000000000000000000005A +:10862000000000000000000000000000000000004A +:10863000000000000000000000000000000000003A +:10864000000000000000000000000000000000002A +:10865000000000000000000000000000000000001A +:10866000000000000000000000000000000000000A +:1086700000000000000000000000000000000000FA +:1086800000000000000000000000000000000000EA +:1086900000000000000000000000000000000000DA +:1086A00000000000000000000000000000000000CA +:1086B00000000000000000000000000000000000BA +:1086C00000000000000000000000000000000000AA +:1086D000000000000000000000000000000000009A +:1086E000000000000000000000000000000000008A +:1086F000000000000000000000000000000000007A +:108700000000000000000000000000000000000069 +:108710000000000000000000000000000000000059 +:108720000000000000000000000000000000000049 +:108730000000000000000000000000000000000039 +:108740000000000000000000000000000000000029 +:108750000000000000000000000000000000000019 +:108760000000000000000000000000000000000009 +:1087700000000000000000000000000000000000F9 +:1087800000000000000000000000000000000000E9 +:1087900000000000000000000000000000000000D9 +:1087A00000000000000000000000000000000000C9 +:1087B00000000000000000000000000000000000B9 +:1087C00000000000000000000000000000000000A9 +:1087D0000000000000000000000000000000000099 +:1087E0000000000000000000000000000000000089 +:1087F0000000000000000000000000000000000079 +:108800000000000000000000000000000000000068 +:108810000000000000000000000000000000000058 +:108820000000000000000000000000000000000048 +:108830000000000000000000000000000000000038 +:108840000000000000000000000000000000000028 +:108850000000000000000000000000000000000018 +:108860000000000000000000000000000000000008 +:1088700000000000000000000000000000000000F8 +:1088800000000000000000000000000000000000E8 +:1088900000000000000000000000000000000000D8 +:1088A00000000000000000000000000000000000C8 +:1088B00000000000000000000000000000000000B8 +:1088C00000000000000000000000000000000000A8 +:1088D0000000000000000000000000000000000098 +:1088E0000000000000000000000000000000000088 +:1088F0000000000000000000000000000000000078 +:108900000000000000000000000000002000200027 +:108910000000880000008800000000002000200007 +:10892000200000000000200000008800200040001F +:108930008800C0008800880000004000000000009F +:108940000000000000000000000000000003000024 +:10895000000000000000000000000000840088000B +:108960008400000000000000000000000000000083 +:1089700000000000000000000000000000000000F7 +:1089800000000000000000000000000000000000E7 +:1089900000000000000000000000000000000000D7 +:1089A00000000000000000000000000000000900BE +:1089B00000000000000000000000000000000000B7 +:1089C00000000000000000000000000000000000A7 +:1089D00000000000000000000000000005C02100B1 +:1089E00005C0000009900000090000000000000020 +:1089F0000000000000000002000000000020002035 +:108A00002120000000000000210000000000000004 +:108A10000000000000000000000000000000001046 +:108A2000000000000000000000000000000020081E +:108A30000000000000000000000000000000001026 +:108A40000000000000000000000000000000200006 +:108A50000000000000000000000000000000000016 +:108A60000000000000000000000000000000000006 +:108A700020080000000000000000000000000000CE +:108A800000000000000000000000000000000000E6 +:108A900020000000000000000000000000000000B6 +:108AA00000000000000000000000000000000000C6 +:108AB0008001000020000000000000000000000015 +:108AC00000000000000000000000000000000000A6 +:108AD0008000000000000000000000000000000016 +:108AE0000000000000840000000000000000000002 +:108AF0000000808500000000008400000008008461 +:108B000000000090008400900084009000000000AD +:108B10000000809000000000000000000000000342 +:108B20000000002100000000000000000000000024 +:108B30000000002100000000000000000000000014 +:108B40000000000400080000000000000000000019 +:108B500000000008000000030021002100210000A7 +:108B60000008A021C02100080008880800080000B3 +:108B700000000003000800020000000000000000E8 +:108B800000000000002100000000000900000000BB +:108B90000003000000400000000000000000000092 +:108BA00000000000000000000000000000000000C5 +:108BB00000000000080000000000000000000000AD +:108BC00000000000000000000000000000000000A5 +:108BD000000000000000000003000000080000008A +:108BE00041000000410009002100210000000000B8 +:108BF000000000000000000000000008020000006B +:108C000000000000000000900000000000000000D4 +:108C10000000000000000000820000008200000050 +:108C2000820000000000A00084000000A0000000FE +:108C30000800C00000000000000000000000080064 +:108C4000000008000000000008000000080082008A +:108C5000C00082000000080000000400080082003C +:108C600000000800000000000000000000000000FC +:108C700000000000000000000000000000000000F4 +:108C800000000000000000000000000000000000E4 +:108C900000000000000000000000000000000000D4 +:108CA000000000000000000008002100000000009B +:108CB00000000000000000000000000000000000B4 +:108CC00000000000000000000000000000000000A4 +:108CD00000000000000000000000000000A00000F4 +:108CE0000000000000000000000000000000000084 +:108CF0000000000000000000000000000000000074 +:108D00000000000000000000000000000000000063 +:108D10000000000000000000000000000800A000AB +:108D2000000000000000000000000000000400003F +:108D3000880000000000000000000040000000006B +:108D4000000000000000000000000000000008001B +:108D500000000000000000000000002100000800EA +:108D6000A0030008080082080000000000080000BE +:108D700000000000000000000000000000000000F3 +:108D800000400000000000000000000000000000A3 +:108D900000000000000000000000000000040000CF +:108DA00000000000000000000000000000000000C3 +:108DB00000000000000000000000000000000000B3 +:108DC00000000000000000000000000000000000A3 +:108DD0000000000000000000000000000000000093 +:108DE000000000000000000000000000090000007A +:108DF0000000000000000000000000000000000073 +:108E00000000000000000000000000000000000062 +:108E10000000000000000000000000000000000052 +:108E200000000800000008000800A0000800000082 +:108E30000000000000000000000000000000000032 +:108E40000000000000000000000000000000000022 +:108E500000000000000000000000082100210003C5 +:108E600000001000000084000000A00008000000C6 +:108E700008000000000000000000000000000000EA +:108E800000000000000000000000000000000000E2 +:108E900000000000000000000000000000030000CF +:108EA00000000000000000000000000000000000C2 +:108EB00000000000000000000000000000000000B2 +:108EC00000000000000000000000000000000000A2 +:108ED0000000000000000000000000000000000092 +:108EE0000000000000000000000000000000000082 +:108EF0000000000000000000000000000000000072 +:108F00000000000000000000000000000000000061 +:108F10000000000000000000000000000000000051 +:108F20000000000000010001000100C0000100017C +:108F300000C0000300000001004000880001400163 +:108F400000C1000000000000000000000000000060 +:108F5000000000000000000000020000000000000F +:108F600000000000000000010001000100C000013D +:108F7000000100C0000300000001004000020001E9 +:108F8000400100C1000000000000000000000000DF +:108F900000000000000000000000000200000000CF +:108FA00000000000000000410041004100C00341FA +:108FB000004100C120C10020084100000000004124 +:108FC0008041009000000000000000000000000050 +:108FD000000000000000000204000000000000008B +:108FE000000000000000000000410041004100C0FE +:108FF0000341004100C108C1004040410000008021 +:1090000000418041009000000000000000000000CE +:109010000000000000000000000802000000000046 +:10902000000000000000000041000300000000807C +:109030004100C000000040008200880000809000D5 +:109040004100C1000010800000000200000000008C +:109050000000000000000000020009000000800085 +:1090600000000000000000110003410003000000A8 +:1090700000804100C0000000020005002000000048 +:1090800085004100C10000108000000010000000B9 +:1090900000000000000000000000020009000000C5 +:1090A00000000000000000000002010001000000BC +:1090B00000C00100C00000000000040005820004A0 +:1090C000C1004100C10000918200000000000000CA +:1090D00000000000000000000000100010900010D0 +:1090E0000800020000000000000000000100010074 +:1090F000000000C00100C000000001002000088244 +:109100000082C0004100C100009182000000000008 +:1091100000000000000000000000000090000208B5 +:1091200000108800080000000000000000C00001DE +:10913000C0C100000000000100C182050041000123 +:1091400000C100000000000100010000000000005C +:109150000000000000000000000000000088000087 +:10916000000000000000000000000000000000C03F +:109170000001C0C100000000000100C120410083C7 +:10918000000190C10000000000010001000000008B +:1091900000000000000000000000000000000010BF +:1091A000000000000000000000000000000000803F +:1091B000004180C10000000000410090809000410B +:1091C000004100C10000000000410010000000004C +:1091D000000000000000000000000000000000008F +:1091E000000000000000000000000000000000007F +:1091F0000080004180C1000000000041009000108C +:109200000041004100C100000000004100100000CA +:10921000000000000000000000000000000000004E +:10922000000000000000000000000000000000003E +:10923000C100800080C10000410000080200410020 +:10924000C1C1000080080000410000008000410012 +:109250000002800000C100000000000000000000CB +:1092600000C1000000090000000000000000000034 +:109270000000C100800080C1000041008000820029 +:109280004100C1C180008008000041000000800052 +:1092900041000010800000C100000000000000003C +:1092A000000000C1000000020000000000000000FB +:1092B0000000C1004000C0C1000001002000890082 +:1092C0000100C1119000C000000001000000C000BA +:1092D000010000002000004000000000000000002D +:1092E000000000110200000000000000000000006B +:1092F00000000000C1004000C0C1000001000200E9 +:1093000005000100C1410400C00000000100000090 +:10931000C00001000000200000400000000000002C +:109320000000000000110800000100000000000023 +:1093300000000000000000000000004200000000EB +:1093400000000000811200480700480000000000F3 +:10935000000000000000000000000000000000000D +:1093600000000000810000E0000048000000000054 +:1093700000000000000000000000000000420000AB +:1093800000000000000081120048070048000000B3 +:1093900000000000000000000000000000000000CD +:1093A000000000000000810000E000004800000014 +:1093B00000000000000000000000000000000000AD +:1093C000000000000000000000000000000000009D +:1093D000000000000000000000000000000000008D +:1093E000000000000000000000000000000000007D +:1093F000000000000000000000000000000000006D +:10940000000000000000000000000000000000005C +:10941000000000000000000000000000000000004C +:10942000000000000000000000000000000000003C +:10943000000000000000000000000000000000002C +:10944000000000000000000000000000000000001C +:10945000000000000000000000000000000000000C +:1094600000000000000000000000000000000000FC +:1094700000000000000000000000000000000000EC +:1094800000000000000000000000000000000000DC +:1094900000000000000000000000000000000000CC +:1094A00000000000000000000000000000000000BC +:1094B00000000000000000000000757B00000000BC +:1094C000000000000000000000000000000000009C +:1094D0000000000000000000DEAE747B0000000011 +:1094E000000000000000000000000000000000007C +:1094F0000000000000000000DE2E0000757B000070 +:10950000000000000000000000000000000000005B +:1095100000000000000000000000DEAE747B0000D0 +:10952000000000000000000000000000000000003B +:1095300000000000000000000000DE2E60C60300F6 +:109540000000000000000031E0000000000000000A +:109550000C0000000000000000C0630661560340DC +:109560000000000000000230A00000000000000029 +:109570000C4000000000000002C06A86000060C6C7 +:1095800003000000000000000031E00000000000C7 +:1095900000000C0000000000000000C063066156DF +:1095A00003400000000000000230A00000000000A6 +:1095B00000000C4000000000000002C06A860000AD +:1095C000000000002000000020000000000000005B +:1095D0000000200084008400200020000000000023 +:1095E0000000000400000000200000000000000057 +:1095F000000000000000000020000000000000004B +:10960000000000000000000000000000000000005A +:10961000000000000000000000000000000000004A +:10962000000000000000000000000000000000003A +:10963000000000000000C00000000000000000006A +:10964000000000000000000000000000000000001A +:10965000000000000000000000000000000000000A +:1096600000000000000000000000000000000000FA +:1096700000000000200000000000000000000000CA +:1096800000000000000000000000000000000000DA +:1096900000000000000000000000000000000000CA +:1096A00000000000000000000000000000000000BA +:1096B00000000000000000000000000000000000AA +:1096C000000000000000000000000000000000009A +:1096D000000000000000000000000000000000008A +:1096E000000000000000000000000000000000007A +:1096F000000000000000000000000000000000006A +:109700000000000000000000000000000000000059 +:109710000000000000000000000000000000000049 +:109720000000000000000000000000000000000039 +:109730000000000000000000000000000000000029 +:109740000000000000000000000000000000000019 +:109750000000000000000000000000000000000009 +:1097600000000000000000000000000000000000F9 +:1097700000000000000000000000000000000000E9 +:1097800000000000000000000000000000000000D9 +:1097900000000000000000000000000000100008B1 +:1097A00000000000000000080000000000000000B1 +:1097B0000000000000000000000000000000009019 +:1097C0000000000000000000000000000000000099 +:1097D0000000000000000000000000000000000089 +:1097E0000000000000000000000000000000000079 +:1097F0000000000000000000000000000000000069 +:109800000000000000000000000000000000000058 +:109810000000000000000000000000000000000048 +:109820000000000000000000000000000000000038 +:109830000000000000000000000000000000000028 +:1098400000000000000000000000000041000800CF +:109850000800000000000000000000000000000000 +:1098600000000000000008000000000000000000F0 +:1098700000000000000000000000000000000008E0 +:1098800000C0008241000000000000000000000055 +:1098900009000300030000000000000000000000B9 +:1098A00000000000000000000000000000000000B8 +:1098B0000000008800000000000000000000000020 +:1098C0000000000400820000000000000000A00072 +:1098D0000000000000000000000000000000000088 +:1098E0000000000000000000000000000000000078 +:1098F0000000000000000000000000000000000068 +:1099000000000800840008000000000000000000C3 +:109910000000000000000000000000000000000047 +:109920000000000000000000000000000000000037 +:109930000000000000000000000000000000000027 +:109940000000000000008400000000000000000093 +:109950000000000000000000000000000000000007 +:1099600000000000000000000000000000000000F7 +:1099700000000800000000000000000000000000DF +:1099800000000000000000000000000000000000D7 +:1099900000000000000000000000000000000000C7 +:1099A00000000000000000000000000000000000B7 +:1099B00000000000000000000000000000000000A7 +:1099C0000000000000000000000000000000000097 +:1099D0000000000000000000000000000000000087 +:1099E0000000000000000000000000000000000077 +:1099F0000000000000000000000000000000000067 +:109A00000000000008000008000000000000000046 +:109A1000000800000000000000000000000000003E +:109A20000000000000000000000000000000000036 +:109A30000000000000000000000000000000000026 +:109A40000000000000000000900040000000000046 +:109A50000000000000000000000008000300008477 +:109A600000900890030000000000080000000000C3 +:109A700000000000000000000000000000000000E6 +:109A80000200008200000000000000000000000052 +:109A900000000000000000000000000008000300BB +:109AA00000000000090000000000000008000000A5 +:109AB00000000000000000000000000000000000A6 +:109AC0000000000000000000058800000000000009 +:109AD0000000000000000000000000000000000086 +:109AE0000000000000000000000200000000000074 +:109AF0000000000000000000000000000000000066 +:109B00000000000000000000000000000000000055 +:109B10000000000000000000000000000000000045 +:109B20000000000000000000000000000000000035 +:109B30000000000000000000000000000000000025 +:109B40000000000000000000000000000000000015 +:109B50000000000000000000000000000000000005 +:109B600000000000000000000000000000000000F5 +:109B700000000000000000000000000000000000E5 +:109B800000000000000000000000000000000000D5 +:109B900000000000000000000000000000000000C5 +:109BA00000000000000000000000000000000000B5 +:109BB00000000000000000000000000000000000A5 +:109BC0000000000000000000000000000000000095 +:109BD0000000000000000000000000000000000085 +:109BE0000000000000000000000000000000000075 +:109BF0000000000000000000000000000000000065 +:109C00000000000000000000000000000000000054 +:109C10000000000000000000000000000000000044 +:109C20000000000000000000000000000000000034 +:109C30000000000000000000000000000000000024 +:109C40000000000000000000000000000000000014 +:109C50000000000000000000000000000000000004 +:109C600000000000000000000000000000000000F4 +:109C700000000000000000000000000000000000E4 +:109C800000000000000000000000000000000000D4 +:109C900000000000000000000000000000000000C4 +:109CA00000000000000000000000000000000000B4 +:109CB00000000000000000000000000000000000A4 +:109CC0000000000000000000000000000000000094 +:109CD0000000000000000000000000000000000084 +:109CE0000000000000000000000000000000000074 +:109CF0000000000000000000000000000000000064 +:109D00000000000000000000000000000000000053 +:109D10000000000000000000000000000000000043 +:109D20000000000000000000000000000000000033 +:109D30000000000000000000000000000000000023 +:109D40000000000000000000000000000000000013 +:109D50000000000000000000000000000000000003 +:109D600000000000000000000000000000000000F3 +:109D700000000000000000000000000000000000E3 +:109D800000000000000000000000000000000000D3 +:109D900000000000000000000000000000000000C3 +:109DA00000000000000000000000000000000000B3 +:109DB00000000000000000000000000000000000A3 +:109DC0000000000000000000000000000000000093 +:109DD0000000000000000000000000000000000083 +:109DE0000000000000000000000000000000000073 +:109DF0000000000000000000000000000000000063 +:109E00000000000000000000000000000000000052 +:109E10000000000000000000000000000000000042 +:109E20000000000000000000000000000000000032 +:109E30000000000000000000000000000000000022 +:109E40000000000000000000000000000000000012 +:109E50000000000000000000000000000000000002 +:109E600000000000000000000000000000000000F2 +:109E700000000000000000000000000000000000E2 +:109E800000000000000000000000000000000000D2 +:109E900000000000000000000000000000000000C2 +:109EA00000000000000000000000000000000000B2 +:109EB00000000000000000000000000000000000A2 +:109EC0000000000000000000000000000000000092 +:109ED0000000000000000000000000000000000082 +:109EE0000000000000000000000000000000000072 +:109EF0000000000000000000000000000000000062 +:109F00000000000000000000000000000000000051 +:109F10000000000000000000000000000000000041 +:109F20000000000000000000000000000000000031 +:109F30000000000000000000000000000000000021 +:109F40000000000000000000000000000000000011 +:109F50000000000000000000000000000000000001 +:109F600000000000000000000000000000000000F1 +:109F700000000000000000000000000000000000E1 +:109F800000000000000000000000000000000000D1 +:109F900000000000000000000000000000000000C1 +:109FA00000000000000000000000000000000000B1 +:109FB00000000000000000000000000000000000A1 +:109FC0000000000000000000000000000000000091 +:109FD0000000000000000000000000000000000081 +:109FE0000000000000000000000000000000000071 +:109FF0000000000000000000000000000000000061 +:10A000000000000000000000000000000000000050 +:10A010000000000000000000000000000000000040 +:10A020000000000000000000000000000000000030 +:10A030000000000000000000000000000000000020 +:10A040000000000000000000000000000000000010 +:10A050000000000000000000000000000000000000 +:10A0600000000000000000000000000000000000F0 +:10A0700000000000000000000000000000000000E0 +:10A0800000000000000000000000000000000000D0 +:10A0900000000000000000000000000000000000C0 +:10A0A00000000000000000000000000000000000B0 +:10A0B00000000000000000000000000000000000A0 +:10A0C0000000000000000000000000000000000090 +:10A0D0000000000000000000000000000000000080 +:10A0E0000000000000000000000000000000000070 +:10A0F0000000000000000000000000000000000060 +:10A10000000000000000000000000000000000004F +:10A11000000000000000000000000000000000003F +:10A12000000000000000000000000000000000002F +:10A13000000000000000000000000000000000001F +:10A14000000000000000000000000000000000000F +:10A1500000000000000000000000000000000000FF +:10A1600000000000000000000000000000000000EF +:10A1700000000000000000000000000000000000DF +:10A1800000000000000000000000000000000000CF +:10A1900000000000000000000000000000000000BF +:10A1A00000000000000000000000000000000000AF +:10A1B000000000000000000000000000000000009F +:10A1C000000000000000000000000000000000008F +:10A1D000000000000000000000000000000000007F +:10A1E000000000000000000000000000000000006F +:10A1F000000000000000000000000000000000005F +:10A20000000000000000000000000000000000004E +:10A21000000000000000000000000000000000003E +:10A22000000000000000000000000000000000002E +:10A23000000000000000000000000000000000001E +:10A24000000000000000000000000000000000000E +:10A2500000000000000000000000000000000000FE +:10A2600000000000000000000000000000000000EE +:10A2700000000000000000000000000000000000DE +:10A2800000000000000000000000000000000000CE +:10A2900000000000000000000000000000000000BE +:10A2A00000000000000000000000000000000000AE +:10A2B000000000000000000000000000000000009E +:10A2C000000000000000000000000000000000008E +:10A2D000000000000000000000000000000000007E +:10A2E000000000000000000000000000000000006E +:10A2F000000000000000000000000000000000005E +:10A30000000000000000000000000000000000004D +:10A31000000000000000000000000000000000003D +:10A32000000000000000000000000000000000002D +:10A33000000000000000000000000000000000001D +:10A34000000000000000000000000000000000000D +:10A3500000000000000000000000000000000000FD +:10A3600000000000000000000000000000000000ED +:10A3700000000000000000000000000000000000DD +:10A3800000000000000000000000000000000000CD +:10A3900000000000000000000000000000000000BD +:10A3A00000000000000000000000000000000000AD +:10A3B000000000000000000000000000000000009D +:10A3C000000000000000000000000000000000008D +:10A3D000000000000000000000000000000000007D +:10A3E000000000000000000000000000000000006D +:10A3F000000000000000000000000000000000005D +:10A40000000000000000000000000000000000004C +:10A41000000000000000000000000000000000003C +:10A42000000000000000000000000000000000002C +:10A43000000000000000000000000000000000001C +:10A44000000000000000000000000000000000000C +:10A4500000000000000000000000000000000000FC +:10A4600000000000000000000000000000000000EC +:10A4700000000000000000000000000000000000DC +:10A4800000000000000000000000000000000000CC +:10A4900000000000000000000000000000000000BC +:10A4A00000000000000000000000000000000000AC +:10A4B000000000000000000000000000000000009C +:10A4C000000000000000000000000000000000008C +:10A4D000000000000000000000000000000000007C +:10A4E000000000000000000000000000000000006C +:10A4F000000000000000000000000000000000005C +:10A5000000000000000000000020200020000000EB +:10A5100020000000000020000000000000000000FB +:10A520000000000000000000842020000400000063 +:10A5300020000000000000000000000000000000FB +:10A5400000004000000000000000000000000000CB +:10A5500000000000000000000000000000000000FB +:10A5600000002000000000000000000000000002C9 +:10A5700000000000000000000000000000000000DB +:10A58000000000000000000000000000000040008B +:10A59000000000000000000000002000000000009B +:10A5A000000000000000000000000000400000006B +:10A5B000000000000000000000000000000000009B +:10A5C000000000000000000000000000000000008B +:10A5D000000000000000000000000000000000007B +:10A5E000000000000000000000000000000000006B +:10A5F000000021000000000000000000000000003A +:10A600000000000000000000000000000800000042 +:10A610000000000000000000000000000210000028 +:10A62000000000000000000000000000000000002A +:10A630000000000000000200000000000200000016 +:10A640000000000000000000000000000000080002 +:10A6500000000000000000000000000000000200F8 +:10A6600000000000000000000000000000000000EA +:10A6700000000000000000000000000000000000DA +:10A6800000000000000000000000000000000000CA +:10A6900000000000000000000000000000000000BA +:10A6A00000000000000000000000000000000000AA +:10A6B000000000000000000000000000000000009A +:10A6C000000000000000000000000000000000008A +:10A6D000000000000000000000000000000000007A +:10A6E000000000000000000000000000000000006A +:10A6F000000000000000000000000000000000005A +:10A7000000000000000000000000000000008200C7 +:10A710000000000010000000080000000000000021 +:10A720000000000000000000000000000000000029 +:10A730000000100000000000000000000000000009 +:10A740000000000000000000000000000000000009 +:10A7500000000800000008000000080000000000E1 +:10A7600000000000000000000000000000000000E9 +:10A770000000000004008800400000000400000009 +:10A7800000000000000000000000000000000000C9 +:10A7900000000000000000000000000000000000B9 +:10A7A00000000000000000000000000000000000A9 +:10A7B0000000000000000800000000000000000091 +:10A7C0000000000000000000000000000000000089 +:10A7D0000000000000000000000000000000000079 +:10A7E0000000000000000000000000000000000069 +:10A7F000000000000400000009000000000000004C +:10A800000000000000000000000000000000000048 +:10A810000000000000000000000000000000000038 +:10A820000000000000000000000000000000000028 +:10A830000000000000000000000000000000000018 +:10A840000000000000000000000000000000000008 +:10A8500000000000000000000000000000000000F8 +:10A8600000000000000000000000000000000000E8 +:10A8700000000000000000000000000000000000D8 +:10A8800000000000000000000000000000000000C8 +:10A8900000000000000000000000000000000000B8 +:10A8A00000000000000000000000000000000000A8 +:10A8B0000000000000000000000000000000000098 +:10A8C0000000000000000000000000000000000088 +:10A8D0000000000000000000000000000000000078 +:10A8E0000000000000000000000000000000000068 +:10A8F0000000000000000000000000000000000058 +:10A900000000000000000000000000000000000047 +:10A910000000000000000000000000000000000037 +:10A920000000000000000000000000000000000027 +:10A930000000000000000000000000000000000017 +:10A940000000000000000000000000000000000007 +:10A9500000000000000000000000000000000000F7 +:10A9600000000000000000000000000000000000E7 +:10A9700000000000000000000000000000000000D7 +:10A9800000000000000000000000000000000000C7 +:10A99000000000000000000000000000110008009E +:10A9A00000000000000000000000000000000000A7 +:10A9B0000000000000000000000000000000000097 +:10A9C0000000000000000000000000000000000087 +:10A9D000000021000000000000000000000008004E +:10A9E0000000000000000000000000000000000067 +:10A9F0000000000000000000002000000000000433 +:10AA00000000000000000000000000000000000046 +:10AA10000000000000000000000000000000000036 +:10AA20000000000000000000000000000000000026 +:10AA30000000000000000000000000000000000016 +:10AA400000000000000000000000080000000000FE +:10AA500000000000000000000000000000000000F6 +:10AA600000000000000000000000000000000000E6 +:10AA700000000000000000000000000000000000D6 +:10AA800000000000000000000000000000000000C6 +:10AA900000000000000000000000000000000000B6 +:10AAA00000000000000000000000000000000000A6 +:10AAB0000000000000000000000000000000000096 +:10AAC0000000000000000000000000000000000086 +:10AAD0000000000000000000000000000000000076 +:10AAE0000000000000000000000000000000000066 +:10AAF0000000000000000000000000000000000056 +:10AB00000000000000000000000000000000000045 +:10AB10000000000000000000000000000000000035 +:10AB20000000000000000000000000000000000025 +:10AB30000000000000000000000000000000000015 +:10AB40000000000000000000000000000000000005 +:10AB500000000000000000000000000000000000F5 +:10AB600000000000000000000000000000000000E5 +:10AB700000000000000000000000000000000000D5 +:10AB800000000000000000000000000000000000C5 +:10AB900000000000000000000000000000000000B5 +:10ABA00000000000000000000000000000000000A5 +:10ABB0000000000000000000000000000000000095 +:10ABC0000000000000000000000000000000000085 +:10ABD0000000000000000000000000000000000075 +:10ABE0000000000000000000000000000000000065 +:10ABF0000000000000000000000000000000000055 +:10AC00000000000000000000000000000000000044 +:10AC10000000000000000000000000000000000034 +:10AC20000000000000000000000000000000000024 +:10AC30000000000000000000000000000000000014 +:10AC40000000000000000000000000000000000004 +:10AC500000000000000000000000000000000000F4 +:10AC600000000000000000000000000000000000E4 +:10AC700000000000000000000000000000000000D4 +:10AC800000000000000000000000000000000000C4 +:10AC900000000000000000000000000000000000B4 +:10ACA00000000000000000000000000000000000A4 +:10ACB0000000000000000000000000000000000094 +:10ACC0000000000000000000000000000000000084 +:10ACD0000000000000000000000000000000000074 +:10ACE0000000000000000000000000000000000064 +:10ACF0000000000000000000000000000000000054 +:10AD00000000000000000000000000000000000043 +:10AD10000000000000000000000000000000000033 +:10AD20000000000000000000000000000000000023 +:10AD30000000000000000000000000000000000013 +:10AD40000000000000000000000000000000000003 +:10AD500000000000000000000000000000000000F3 +:10AD600000000000000000000000000000000000E3 +:10AD700000000000000000000000000000000000D3 +:10AD800000000000000000000000000000000000C3 +:10AD900000000000000000000000000000000000B3 +:10ADA00000000000000000000000000000000000A3 +:10ADB0000000000000000000000000000000000093 +:10ADC0000000000000000000000000000000000083 +:10ADD0000000000000000000000000000000000073 +:10ADE0000000000000000000000000000000000063 +:10ADF0000000000000000000000000000000000053 +:10AE00000000000000000000000000000000000042 +:10AE10000000000000000000000000000000000032 +:10AE20000000000000000000000000000000000022 +:10AE30000000000000000000000000000000000012 +:10AE40000000000000000000000000000000000002 +:10AE500000000000000000000000000000000000F2 +:10AE600000000000000000000000000000000000E2 +:10AE700000000000000000000000000000000000D2 +:10AE800000000000000000000000000000000000C2 +:10AE900000000000000000000000000000000000B2 +:10AEA00000000000000000000000000000000000A2 +:10AEB0000000000000000000000000000000000092 +:10AEC0000000000000000000000000000000000082 +:10AED0000000000000000000000000000000000072 +:10AEE0000000000000000000000000000000000062 +:10AEF0000000000000000000000000000000000052 +:10AF00000000000000000000000000000000000041 +:10AF10000000000000000000000000000000000031 +:10AF20000000000000000000000000000000000021 +:10AF30000000000000000000000000000000000011 +:10AF40000000000000000000000000000000000001 +:10AF500000000000000000000000000000000000F1 +:10AF600000000000000000000000000000000000E1 +:10AF700000000000000000000000000000000000D1 +:10AF800000000000000000000000000000000000C1 +:10AF900000000000000000000000000000000000B1 +:10AFA00000000000000000000000000000000000A1 +:10AFB0000000000000000000000000000000000091 +:10AFC0000000000000000000000000000000000081 +:10AFD0000000000000000000000000000000000071 +:10AFE0000000000000000000000000000000000061 +:10AFF0000000000000000000000000000000000051 +:10B000000000000000000000000000000000000040 +:10B010000000000000000000000000000000000030 +:10B020000000000000000000000000000000000020 +:10B030000000000000000000000000000000000010 +:10B040000000000000000000000000000000000000 +:10B0500000000000000000000000000000000000F0 +:10B0600000000000000000000000000000000000E0 +:10B0700000000000000000000000000000000000D0 +:10B0800000000000000000000000000000000000C0 +:10B0900000000000000000000000000000000000B0 +:10B0A00000000000000000000000000000000000A0 +:10B0B0000000000000000000000000000000000090 +:10B0C0000000000000000000000000000000000080 +:10B0D0000000000000000000000000000000000070 +:10B0E0000000000000000000000000000000000060 +:10B0F0000000000000000000000000000000000050 +:10B10000000000000000000000000000000000003F +:10B11000000000000000000000000000000000002F +:10B12000000000000000000000000000000000001F +:10B13000000000000000000000000000000000000F +:10B1400000000000000000000000000000000000FF +:10B1500000000000000000000000000000000000EF +:10B1600000000000000000000000000000000000DF +:10B1700000000000000000000000000000000000CF +:10B1800000000000000000000000000000000000BF +:10B1900000000000000000000000000000000000AF +:10B1A000000000000000000000000000000000009F +:10B1B000000000000000000000000000000000008F +:10B1C000000000000000000000000000000000007F +:10B1D000000000000000000000000000000000006F +:10B1E000000000000000000000000000000000005F +:10B1F000000000000000000000000000000000004F +:10B20000000000000000000000000000000000003E +:10B21000000000000000000000000000000000002E +:10B22000000000000000000000000000000000001E +:10B23000000000000000000000000000000000000E +:10B2400000000000000000000000000000000000FE +:10B2500000000000000000000000000000000000EE +:10B2600000000000000000000000000000000000DE +:10B2700000000000000000000000000000000000CE +:10B2800000000000000000000000000000000000BE +:10B2900000000000000000000000000000000000AE +:10B2A000000000000000000000000000000000009E +:10B2B000000000000000000000000000000000008E +:10B2C000000000000000000000000000000000007E +:10B2D000000000000000000000000000000000006E +:10B2E000000000000000000000000000000000005E +:10B2F000000000000000000000000000000000004E +:10B30000000000000000000000000000000000003D +:10B31000000000000000000000000000000000002D +:10B32000000000000000000000000000000000001D +:10B33000000000000000000000000000000000000D +:10B3400000000000000000000000000000000000FD +:10B3500000000000000000000000000000000000ED +:10B3600000000000000000000000000000000000DD +:10B3700000000000000000000000000000000000CD +:10B3800000000000000000000000000000000000BD +:10B3900000000000000000000000000000000000AD +:10B3A000000000000000000000000000000000009D +:10B3B000000000000000000000000000000000008D +:10B3C000000000000000000000000000000000007D +:10B3D000000000000000000000000000000000006D +:10B3E000000000000000000000000000000000005D +:10B3F000000000000000000000000000000000004D +:10B40000000000000000000000000000000000003C +:10B41000000000000000000000000000000000002C +:10B42000000000000000000000000000000000001C +:10B43000000000000000000000000000000000000C +:10B4400000000000000000000000000000000000FC +:10B4500000000000000000000000000000000000EC +:10B4600000000000000000000000000000000000DC +:10B4700000000000000000000000000000000000CC +:10B4800000000000000000000000000000000000BC +:10B4900000000000000000000000000000000000AC +:10B4A000000000000000000000000000000000009C +:10B4B000000000000000000000000000000020006C +:10B4C000000000000000000000000000000000007C +:10B4D000000000000000000000000000000020004C +:10B4E0000000000000000000000000000004000058 +:10B4F0000000000000000005000000000000000047 +:10B50000200000000000000000000000000000001B +:10B51000000000000000000000000000000000002B +:10B5200020000000000000000000000000000000FB +:10B53000000000000000000000000000000000000B +:10B5400000000000000000000000000000000000FB +:10B5500000000000000000000000000000000000EB +:10B5600000000000000000000000000000000000DB +:10B5700000000000000000000000000000000000CB +:10B5800000000000000000000000000000000000BB +:10B5900000000000000000000000000000000000AB +:10B5A000000000000000000000000000000000009B +:10B5B000000000000000000000000000000000008B +:10B5C000000000000000000000000000000000007B +:10B5D000000000000000000000000000000000006B +:10B5E000000000000000000000000000000000005B +:10B5F000000000000000000000000000000000004B +:10B60000000000000000000000000000000000003A +:10B61000000000000000000000000000000000002A +:10B62000000000000000000000000000000000001A +:10B63000000000000000000000000000000000000A +:10B6400000000000000000000000000000000000FA +:10B6500000000000000000000000000000000000EA +:10B6600000000000000000000000000000000000DA +:10B6700000000000000000000000000000000000CA +:10B6800000000000000000000000000000000000BA +:10B6900000000000000000000000000000000000AA +:10B6A0000000000000000000000000000000008218 +:10B6B000000000000000000000000000000000008A +:10B6C000000000000000000000000000000000007A +:10B6D000000000000000000000000000000000006A +:10B6E000000000000000000000000000000000005A +:10B6F000000000000000000000000000000000004A +:10B700000000000000000000000000000000000039 +:10B710000008000000000000000000000000000021 +:10B720000000000000000000000000000000000019 +:10B730000000000000000000000000000400000005 +:10B7400000000000000000000000000000000000F9 +:10B7500000000000000000000000000000000000E9 +:10B7600000000000000000000000000000000000D9 +:10B7700000000000000000000000000000000000C9 +:10B7800000000000000000000000000000000000B9 +:10B7900000000000000000000000000000000000A9 +:10B7A0000000000000000000000000000000000099 +:10B7B0000000000000000000000000000000000089 +:10B7C0000000000000000000000000000000000079 +:10B7D0000000000000000000000000000000000069 +:10B7E0000000000000000000000000000000000059 +:10B7F0000000000000000000000000000000000049 +:10B800000000000000000000000000000000000038 +:10B810000000000000000000000000000000000028 +:10B820000000000000000000000000000000000018 +:10B830000000000000000000000000000000000008 +:10B8400000000000000000000000000000000000F8 +:10B8500000000000000000000000000000000000E8 +:10B8600000000000000000000000000000000000D8 +:10B8700000000000000000000000000000000000C8 +:10B8800000000000000000000000000000000000B8 +:10B8900000000000000000000000000000000000A8 +:10B8A0000000000000000000000000000000000098 +:10B8B0000000000000000000000000000000000088 +:10B8C0000000000000000000000000000000000078 +:10B8D0000000000000000000000000000000000068 +:10B8E0000000000000000000000000000000000058 +:10B8F0000000000000000000000000000000000048 +:10B900000000000000000000000000000000000037 +:10B910000000000000000000000000000000000027 +:10B920000000000000000000000000000000000017 +:10B930000000000000000000000000000000000007 +:10B9400000000000000000000000000000000000F7 +:10B9500000000020000000000000000000000000C7 +:10B9600000000000000000000000000000000000D7 +:10B9700000000000000000000000000000000000C7 +:10B9800000000000000000000000000000000000B7 +:10B9900000000000000000000000000000000000A7 +:10B9A0000000000000000000000000000000000097 +:10B9B0000000000000000000000000002000000067 +:10B9C0000000000000000000000000000000000077 +:10B9D0000000000000000000000000000000000067 +:10B9E0000000000000000000000000000000000057 +:10B9F0000000000000000000000000000000000047 +:10BA00000000000000000000000000000000000036 +:10BA10000000000000000000000000000000000026 +:10BA20000000000000000000000000000000000016 +:10BA30000000000000000000000000000000000006 +:10BA400000000000000000000000000000000000F6 +:10BA500000000000000000000000000000000000E6 +:10BA600000000000000000000000000000000000D6 +:10BA700000000000000000000000000000000000C6 +:10BA800000000000000000000000000000000000B6 +:10BA900000000000000000000000000000000000A6 +:10BAA0000000000000000000000000000000000096 +:10BAB0000000000000000000000000000000000086 +:10BAC0000000000000000000000000000000000076 +:10BAD0000000000000000000000000000000000066 +:10BAE0000000000000000000000000000000000056 +:10BAF0000000000000000000000000000000000046 +:10BB00000000000000000000000000000000000035 +:10BB10000000000000000000000000000000000025 +:10BB20000000000000000000000000000000000015 +:10BB30000000000000000000000000000000000005 +:10BB400000000000000000000000000000000000F5 +:10BB500000000000000000000000000000000000E5 +:10BB600000000000000000000000000000000000D5 +:10BB700000000000000000000000000000000000C5 +:10BB800000000000000000000000000000000000B5 +:10BB900000000000000000000000000000000000A5 +:10BBA0000000000000000000000000000000000095 +:10BBB0000000000000000000000000000000000085 +:10BBC0000000000000000000000000000000000075 +:10BBD0000000000000000000000000000000000065 +:10BBE0000000000000000000000000000000000055 +:10BBF0000000000000000000000000000000000045 +:10BC00000000000000000000000000000000000034 +:10BC10000000000000000000000000000000000024 +:10BC20000000000000000000000000000000000014 +:10BC30000000000000000000000000000000000004 +:10BC400000000000000000000000000000000000F4 +:10BC500000000000000000000000000000000000E4 +:10BC600000000000000000000000000000000000D4 +:10BC700000000000000000000000000000000000C4 +:10BC800000000000000000000000000000000000B4 +:10BC900000000000000000000000000000000000A4 +:10BCA0000000000000000000000000000000000094 +:10BCB0000000000000000000000000000000000084 +:10BCC0000000000000000000000000000000000074 +:10BCD0000000000000000000000000000000000064 +:10BCE0000000000000000000000000000000000054 +:10BCF0000000000000000000000000000000000044 +:10BD00000000000000000000000000000000000033 +:10BD10000000000000000000000000000000000023 +:10BD20000000000000000000000000000000000013 +:10BD30000000000000000000000000000000000003 +:10BD400000000000000000000000000000000000F3 +:10BD500000000000000000000000000000000000E3 +:10BD600000000000000000000000000000000000D3 +:10BD700000000000000000000000000000000000C3 +:10BD800000000000000000000000000000000000B3 +:10BD900000000000000000000000000000000000A3 +:10BDA0000000000000000000000000000000000093 +:10BDB0000000000000000000000000000000000083 +:10BDC0000000000000000000000000000000000073 +:10BDD0000000000000000000000000000000000063 +:10BDE0000000000000000000000000000000000053 +:10BDF0000000000000000000000000000000000043 +:10BE00000000000000000000000000000000000032 +:10BE10000000000000000000000000000000000022 +:10BE20000000000000000000000000000000000012 +:10BE30000000000000000000000000000000000002 +:10BE400000000000000000000000000000000000F2 +:10BE500000000000000000000000000000000000E2 +:10BE600000000000000000000000000000000000D2 +:10BE700000000000000000000000000000000000C2 +:10BE800000000000000000000000000000000000B2 +:10BE900000000000000000000000000000000000A2 +:10BEA0000000000000000000000000000000000092 +:10BEB0000000000000000000000000000000000082 +:10BEC0000000000000000000000000000000000072 +:10BED0000000000000000000000000000000000062 +:10BEE0000000000000000000000000000000000052 +:10BEF0000000000000000000000000000000000042 +:10BF00000000000000000000000000000000000031 +:10BF10000000000000000000000000000000000021 +:10BF20000000000000000000000000000000000011 +:10BF30000000000000000000000000000000000001 +:10BF400000000000000000000000000000000000F1 +:10BF500000000000000000000000000000000000E1 +:10BF600000000000000000000000000000000000D1 +:10BF700000000000000000000000000000000000C1 +:10BF800000000000000000000000000000000000B1 +:10BF900000000000000000000000000000000000A1 +:10BFA0000000000000000000000000000000000091 +:10BFB0000000000000000000000000000000000081 +:10BFC0000000000000000000000000000000000071 +:10BFD0000000000000000000000000000000000061 +:10BFE0000000000000000000000000000000000051 +:10BFF0000000000000000000000000000000000041 +:10C000000000000000000000000000000000000030 +:10C010000000000000000000000000000000000020 +:10C020000000000000000000000000000000000010 +:10C030000000000000000000000000000000000000 +:10C0400000000000000000000000000000000000F0 +:10C0500000000000000000000000000000000000E0 +:10C0600000000000000000000000000000000000D0 +:10C0700000000000000000000000000000000000C0 +:10C0800000000000000000000000000000000000B0 +:10C0900000000000000000000000000000000000A0 +:10C0A0000000000000000000000000000000000090 +:10C0B0000000000000000000000000000000000080 +:10C0C0000000000000000000000000000000000070 +:10C0D0000000000000000000000000000000000060 +:10C0E0000000000000000000000000000000000050 +:10C0F0000000000000000000000000000000000040 +:10C10000000000000000000000000000000000002F +:10C11000000000000000000000000000000000001F +:10C12000000000000000000000000000000000000F +:10C1300000000000000000000000000000000000FF +:10C1400000000000000000000000000000000000EF +:10C1500000000000000000000000000000000000DF +:10C1600000000000000000000000000000000000CF +:10C1700000000000000000000000000000000000BF +:10C1800000000000000000000000000000000000AF +:10C19000000000000000000000000000000000009F +:10C1A000000000000000000000000000000000008F +:10C1B000000000000000000000000000000000007F +:10C1C000000000000000000000000000000000006F +:10C1D000000000000000000000000000000000005F +:10C1E000000000000000000000000000000000004F +:10C1F000000000000000000000000000000000003F +:10C20000000000000000000000000000000000002E +:10C21000000000000000000000000000000000001E +:10C22000000000000000000000000000000000000E +:10C2300000000000000000000000000000000000FE +:10C2400000000000000000000000000000000000EE +:10C2500000000000000000000000000000000000DE +:10C2600000000000000000000000000000000000CE +:10C2700000000000000000000000000000000000BE +:10C2800000000000000000000000000000000000AE +:10C29000000000000000000000000000000000009E +:10C2A000000000000000000000000000000000008E +:10C2B000000000000000000000000000000000007E +:10C2C000000000000000000000000000000000006E +:10C2D000000000000000000000000000000000005E +:10C2E000000000000000000000000000000000004E +:10C2F000000000000000000000000000000000003E +:10C30000000000000000000000000000000000002D +:10C31000000000000000000000000000000000001D +:10C32000000000000000000000000000000000000D +:10C3300000000000000000000000000000000000FD +:10C3400000000000000000000000000000000000ED +:10C3500000000000000000000000000000000000DD +:10C3600000000000000000000000000000000000CD +:10C3700000000000000000000000000000000000BD +:10C3800000000000000000000000000000000000AD +:10C39000000000000000000000000000000000009D +:10C3A000000000000000000000000000000000008D +:10C3B000000000000000000000000000000000007D +:10C3C000000000000000000000000000000000006D +:10C3D000000000000000000000000000000000005D +:10C3E000000000000000000000000000000000004D +:10C3F000000000000000000020000000000000001D +:10C4000020000000000000000000200000000000EC +:10C4100000000000000000002000000000000000FC +:10C4200020000000000000000000000000000000EC +:10C4300000000000000000000000200000000000DC +:10C4400000002000000000000000000000000000CC +:10C4500000000000000000000000200000000000BC +:10C4600000002000000000000000000000000000AC +:10C4700000000000000000001000000000000000AC +:10C4800000000000000000000000000000000000AC +:10C49000000000000000400000000000000000005C +:10C4A000000000000000000000000000200000006C +:10C4B000000000000000000000000000000000007C +:10C4C000000000000000000000000000000000006C +:10C4D000000000000000000000000000000000401C +:10C4E000000000000000000010000000000000003C +:10C4F000000000000000000000000000000000003C +:10C50000000000000000001000000000000000001B +:10C5100000000000000000400000000000000000DB +:10C52000000000000000000000000000000000000B +:10C5300000000000000002000000000000000000F9 +:10C5400000000000000000000000000000000000EB +:10C55000000000000000000000400000000000009B +:10C5600000000000000000000000000000000000CB +:10C5700000000000000000000200000000000000B9 +:10C5800000000000000000000000000000000000AB +:10C59000000000000000000000000000000000009B +:10C5A000000000000000000000000000000000008B +:10C5B000000000000000000000000000000000007B +:10C5C000000000000000000000000000000000006B +:10C5D000000000000000000000000000000000005B +:10C5E000000000000000000000000000000000004B +:10C5F000000000000000000000000000000000003B +:10C60000000000000000000000000000000000002A +:10C61000000000000000000000000000000000001A +:10C62000000000000000000000000000000000000A +:10C6300000000000000000000000000000000000FA +:10C6400000000000000000000000000000000000EA +:10C6500000000000000000000000000000000000DA +:10C6600000000000000000000000000000000000CA +:10C6700004000400000000000000000000000000B2 +:10C6800000000000000000000000000000000000AA +:10C69000000000000000000000000000000000009A +:10C6A000000000000000000000000000000000008A +:10C6B000000000000000000000000000000000007A +:10C6C000000000000000000000000000000000006A +:10C6D000000000000000000000000000000000005A +:10C6E000000000000000000000000000000000004A +:10C6F000000000000000002000000000000000001A +:10C700000000000000000000000000000000000029 +:10C710000000000000000000000000000000000019 +:10C720000000000000000000000000000000000009 +:10C7300000000000000000000000000000000000F9 +:10C7400000000000000000000000000000000000E9 +:10C7500000000000000000000000000000000000D9 +:10C7600000000000000000000000000000000000C9 +:10C7700000000000000000000000000000000000B9 +:10C7800000000000000000000000000000000000A9 +:10C790000000000000000000000000000000000099 +:10C7A0000000000000000000000000000000000089 +:10C7B0000000000000000000000000000000000079 +:10C7C0000000000000000000000000000000000069 +:10C7D0000000000000000000000000000000000059 +:10C7E0000000000000000000000000000000000049 +:10C7F0000000000000000000000000000000000039 +:10C800000000000000000000000000000000000028 +:10C810000000000000000000000000000000000018 +:10C820000000000000000000000000000000000008 +:10C8300000000000000000000000000000000000F8 +:10C8400000000000000000000000000000000000E8 +:10C8500000000000000000000000000000000000D8 +:10C8600000000000000000000000000000000000C8 +:10C8700000000000000000000000000000000000B8 +:10C8800000000000000000000000000000000000A8 +:10C890000000000000000000000000000000000098 +:10C8A0000000000000000000000000000000000088 +:10C8B0000000000000000000000000000000000078 +:10C8C0000000000000000000000000000000000068 +:10C8D0000000000000000000000000000000000058 +:10C8E0000000000000000000000000000000000048 +:10C8F0000000000000000000000000000000000038 +:10C900000000000000000000000000000000000027 +:10C910000000000000000000000000000000000017 +:10C920000000000000000000000000000000000007 +:10C9300000000000000000000000000000000000F7 +:10C9400000000000000000000000000000000000E7 +:10C9500000000000000000000000000000000000D7 +:10C9600000000000000000000000000000000000C7 +:10C9700000000000000000000000000000000000B7 +:10C9800000000000000000000000000000000000A7 +:10C990000000000000000000000000000000000097 +:10C9A0000000000000000000000000000000000087 +:10C9B0000000000000000000000000000000000077 +:10C9C0000000000000000000000000000000000067 +:10C9D0000000000000000000000000000000000057 +:10C9E0000000000000000000000000000000000047 +:10C9F0000000000000000000000000000000000037 +:10CA00000000000000000000000000000000000026 +:10CA10000000000000000000000000000000000016 +:10CA20000000000000000000000000000000000006 +:10CA300000000000000000000000000000000000F6 +:10CA400000000000000000000000000000000000E6 +:10CA500000000000000000000000000000000000D6 +:10CA600000000000000000000000000000000000C6 +:10CA700000000000000000000000000000000000B6 +:10CA800000000000000000000000000000000000A6 +:10CA90000000000000000000000000000000000096 +:10CAA0000000000000000000000000000000000086 +:10CAB0000000000000000000000000000000000076 +:10CAC0000000000000000000000000000000000066 +:10CAD0000000000000000000000000000000000056 +:10CAE0000000000000000000000000000000000046 +:10CAF0000000000000000000000000000000000036 +:10CB00000000000000000000000000000000000025 +:10CB10000000000000000000000000000000000015 +:10CB20000000000000000000000000000000000005 +:10CB300000000000000000000000000000000000F5 +:10CB400000000000000000000000000000000000E5 +:10CB500000000000000000000000000000000000D5 +:10CB600000000000000000000000000000000000C5 +:10CB700000000000000000000000000000000000B5 +:10CB800000000000000000000000000000000000A5 +:10CB90000000000000000000000000000000000095 +:10CBA0000000000000000000000000000000000085 +:10CBB0000000000000000000000000000000000075 +:10CBC0000000000000000000000000000000000065 +:10CBD0000000000000000000000000000000000055 +:10CBE0000000000000000000000000000000000045 +:10CBF0000000000000000000000000000000000035 +:10CC00000000000000000000000000000000000024 +:10CC10000000000000000000000000000000000014 +:10CC20000000000000000000000000000000000004 +:10CC300000000000000000000000000000000000F4 +:10CC400000000000000000000000000000000000E4 +:10CC500000000000000000000000000000000000D4 +:10CC600000000000000000000000000000000000C4 +:10CC700000000000000000000000000000000000B4 +:10CC800000000000000000000000000000000000A4 +:10CC90000000000000000000000000000000000094 +:10CCA0000000000000000000000000000000000084 +:10CCB0000000000000000000000000000000000074 +:10CCC0000000000000000000000000000000000064 +:10CCD0000000000000000000000000000000000054 +:10CCE0000000000000000000000000000000000044 +:10CCF0000000000000000000000000000000000034 +:10CD00000000000000000000000000000000000023 +:10CD10000000000000000000000000000000000013 +:10CD20000000000000000000000000000000000003 +:10CD300000000000000000000000000000000000F3 +:10CD400000000000000000000000000000000000E3 +:10CD500000000000000000000000000000000000D3 +:10CD600000000000000000000000000000000000C3 +:10CD700000000000000000000000000000000000B3 +:10CD800000000000000000000000000000000000A3 +:10CD90000000000000000000000000000000000093 +:10CDA0000000000000000000000000000000000083 +:10CDB0000000000000000000000000000000000073 +:10CDC0000000000000000000000000000000000063 +:10CDD0000000000000000000000000000000000053 +:10CDE0000000000000000000000000000000000043 +:10CDF0000000000000000000000000000000000033 +:10CE00000000000000000000000000000000000022 +:10CE10000000000000000000000000000000000012 +:10CE20000000000000000000000000000000000002 +:10CE300000000000000000000000000000000000F2 +:10CE400000000000000000000000000000000000E2 +:10CE500000000000000000000000000000000000D2 +:10CE600000000000000000000000000000000000C2 +:10CE700000000000000000000000000000000000B2 +:10CE800000000000000000000000000000000000A2 +:10CE90000000000000000000000000000000000092 +:10CEA0000000000000000000000000000000000082 +:10CEB0000000000000000000000000000000000072 +:10CEC0000000000000000000000000000000000062 +:10CED0000000000000000000000000000000000052 +:10CEE0000000000000000000000000000000000042 +:10CEF0000000000000000000000000000000000032 +:10CF00000000000000000000000000000000000021 +:10CF10000000000000000000000000000000000011 +:10CF20000000000000000000000000000000000001 +:10CF300000000000000000000000000000000000F1 +:10CF400000000000000000000000000000000000E1 +:10CF500000000000000000000000000000000000D1 +:10CF600000000000000000000000000000000000C1 +:10CF700000000000000000000000000000000000B1 +:10CF800000000000000000000000000000000000A1 +:10CF90000000000000000000000000000000000091 +:10CFA0000000000000000000000000000000000081 +:10CFB0000000000000000000000000000000000071 +:10CFC0000000000000000000000000000000000061 +:10CFD0000000000000000000000000000000000051 +:10CFE0000000000000000000000000000000000041 +:10CFF0000000000000000000000000000000000031 +:10D000000000000000000000000000000000000020 +:10D010000000000000000000000000000000000010 +:10D020000000000000000000000020000000880058 +:10D030000000200000000000200020000000000090 +:10D040002000000000000000000020000000200080 +:10D0500000002000880000002000200000000000E8 +:10D06000200000000000000000000004200000007C +:10D070002000000020002000000020002000000010 +:10D080000000200000000000000000002000000060 +:10D0900020000000200020000000200020000000F0 +:10D0A0000000200000000000000000000000000060 +:10D0B0000000000000000000000000000000000070 +:10D0C0000000000000000000000000000000000060 +:10D0D0000000000000000000000000000000000050 +:10D0E0000000000000000000000000000000000040 +:10D0F0000000000000000000000000000000000030 +:10D10000000000000000000000000000000000001F +:10D11000000000000000000000000000000000000F +:10D1200000000000000000000000000000000000FF +:10D1300000000000000000000000000000000000EF +:10D1400000000000000000000000000000000000DF +:10D1500000000000000000000000000000000000CF +:10D1600000000000000000000000000000000000BF +:10D1700000000000000000000000000000000000AF +:10D18000000000000000000000000000000000009F +:10D19000000000000000000000000000000000008F +:10D1A000000000000000000000000000000000007F +:10D1B000000000000000000000000000000000006F +:10D1C000000000000000000000000000000000005F +:10D1D000000000000000000000000000000000004F +:10D1E000000000000000000000000000000000003F +:10D1F000000000000000000000000000000000002F +:10D20000000000000000000000000000000000001E +:10D21000000000000000000000000000000000000E +:10D2200000000000000000000000000000000000FE +:10D2300000000000000000000000000000000000EE +:10D2400000000000000000000000000000000000DE +:10D2500000000000000000000000000000000000CE +:10D2600000000000000000000000000000000000BE +:10D2700000000000000000000000000000000000AE +:10D28000000000000000000000000000000000009E +:10D29000000000000000000000000000000000008E +:10D2A000000000000000000000000000000000007E +:10D2B000000000000000000000000000000000006E +:10D2C000000000000000000000000000000000005E +:10D2D000000000000000000000000000000000004E +:10D2E000000000000000000000000000000000003E +:10D2F000000000000000000000000000000000002E +:10D30000000000000000000000000000000000001D +:10D31000000000000000000000000000000000000D +:10D3200000000000000000000000000000000000FD +:10D3300000000000000000000000000000000000ED +:10D3400000000000000000000000000000000000DD +:10D35000C00000000000000000000000000000000D +:10D3600000000000000000000000000000000000BD +:10D3700000000000000000000000000000000000AD +:10D38000000000000000000000000000000000009D +:10D39000000000000000000000000000000000008D +:10D3A000000000000000000000000000000000007D +:10D3B000000000000000000000000000000000006D +:10D3C000000000000000000000000000000000005D +:10D3D000000000000000000000000000000000004D +:10D3E000000000000000000000000000000000003D +:10D3F000000000000000000000000000000000002D +:10D40000000000000000000000000000000000001C +:10D41000000000000000000000000000000000000C +:10D4200000000000000000000000000000000000FC +:10D4300000000000000000000000000000000000EC +:10D4400000000000000000000000000000000800D4 +:10D4500000000000000000000000000000000000CC +:10D4600000000000000000000000000000000000BC +:10D4700000000000000000000000000000000000AC +:10D48000000000000000000000000000000000009C +:10D49000000000000000000000000000000000008C +:10D4A000000000000000000000000000000000007C +:10D4B000000000000000000000000000000000006C +:10D4C000000000000000000000000000000000005C +:10D4D000000000000000000000000000000000004C +:10D4E000000000000000000000000000000000003C +:10D4F000000000000000000000000000000000002C +:10D50000000000000000000000000000000000001B +:10D51000000000000000000000000000000000000B +:10D5200000000000000000000000000000000000FB +:10D5300000000000000000000000000000000000EB +:10D5400000000000000000000000000000000000DB +:10D5500000000000000000000000000000000000CB +:10D5600000000000000000000000000000000000BB +:10D5700000000000000000000000000000000000AB +:10D58000000000000000000000000000000000009B +:10D59000000000000000000000000000000000008B +:10D5A000000000000000000000000000000000007B +:10D5B000000000000000000000000000000000006B +:10D5C000000000000000000000000000000000005B +:10D5D000000000000000000000000000000000004B +:10D5E000000000000000000000000000000000003B +:10D5F000000000000000000000000000000000002B +:10D60000000000000000000000000000000000001A +:10D61000000000000000000000000000000000000A +:10D6200000000000000000000000000000000000FA +:10D6300000000000000000000000000000000000EA +:10D6400000000000000000000000000000000000DA +:10D6500000000000000000000000000000000000CA +:10D6600000000000000000000000000000000000BA +:10D6700000000000000000000000000000000000AA +:10D68000000000000000000000000000000000009A +:10D69000000000000000000000000000000000008A +:10D6A000000000000000000000000000000000007A +:10D6B000000000000000000000000000000000006A +:10D6C000000000000000000000000000000000005A +:10D6D000000000000000000000000000000000004A +:10D6E000000000000000000000000000000000003A +:10D6F000000000000000000000000000000000002A +:10D700000000000000000000000000000000000019 +:10D710000000000000000000000000000000000009 +:10D7200000000000000000000000000000000000F9 +:10D7300000000000000000000000000000000000E9 +:10D7400000000000000000000000000000000000D9 +:10D7500000000000000000000000000000000000C9 +:10D7600000000000000000000000000000000000B9 +:10D7700000000000000000000000000000000000A9 +:10D780000000000000000000000000000000000099 +:10D790000000000000000000000000000000000089 +:10D7A0000000000000000000000000000000000079 +:10D7B0000000000000000000000000000000000069 +:10D7C0000000000000000000000000000000000059 +:10D7D0000000000000000000000000000000000049 +:10D7E0000000000000000000000000000000000039 +:10D7F0000000000000000000000000000000000029 +:10D800000000000000000000000000000000000018 +:10D810000000000000000000000000000000000008 +:10D8200000000000000000000000000000000000F8 +:10D8300000000000000000000000000000000000E8 +:10D8400000000000000000000000000000000000D8 +:10D8500000000000000000000000000000000000C8 +:10D8600000000000000000000000000000000000B8 +:10D8700000000000000000000000000000000000A8 +:10D880000000000000000000000000000000000098 +:10D890000000000000000000000000000000000088 +:10D8A0000000000000000000000000000000000078 +:10D8B0000000000000000000000000000000000068 +:10D8C0000000000000000000000000000000000058 +:10D8D0000000000000000000000000000000000048 +:10D8E0000000000000000000000000000000000038 +:10D8F0000000000000000000000000000000000028 +:10D900000000000000000000000000000000000017 +:10D910000000000000000000000000000000000007 +:10D9200000000000000000000000000000000000F7 +:10D9300000000000000000000000000000000000E7 +:10D9400000000000000000000000000000000000D7 +:10D9500000000000000000000000000000000000C7 +:10D9600000000000000000000000000000000000B7 +:10D9700000000000000000000000000000000000A7 +:10D980000000000000000000000000000000000097 +:10D990000000000000000000000000000000000087 +:10D9A0000000000000000000000000000000000077 +:10D9B0000000000000000000000000000000000067 +:10D9C0000000000000000000000000000000000057 +:10D9D0000000000000000000000000000000000047 +:10D9E0000000000000000000000000000000000037 +:10D9F0000000000000000000000000000000000027 +:10DA00000000000000000000000000000000000016 +:10DA10000000000000000000000000000000000006 +:10DA200000000000000000000000000000000000F6 +:10DA300000000000000000000000000000000000E6 +:10DA400000000000000000000000000000000000D6 +:10DA500000000000000000000000000000000000C6 +:10DA600000000000000000000000000000000000B6 +:10DA700000000000000000000000000000000000A6 +:10DA80000000000000000000000000000000000096 +:10DA90000000000000000000000000000000000086 +:10DAA0000000000000000000000000000000000076 +:10DAB0000000000000000000000000000000000066 +:10DAC0000000000000000000000000000000000056 +:10DAD0000000000000000000000000000000000046 +:10DAE0000000000000000000000000000000000036 +:10DAF0000000000000000000000000000000000026 +:10DB00000000000000000000000000000000000015 +:10DB10000000000000000000000000000000000005 +:10DB200000000000000000000000000000000000F5 +:10DB300000000000000000000000000000000000E5 +:10DB400000000000000000000000000000000000D5 +:10DB500000000000000000000000000000000000C5 +:10DB600000000000000000000000000000000000B5 +:10DB700000000000000000000000000000000000A5 +:10DB80000000000000000000000000000000000095 +:10DB90000000000000000000000000000000000085 +:10DBA0000000000000000000000000000000000075 +:10DBB0000000000000000000000000000000000065 +:10DBC0000000000000000000000000000000000055 +:10DBD0000000000000000000000000000000000045 +:10DBE0000000000000000000000000000000000035 +:10DBF0000000000000000000000000000000000025 +:10DC00000000000000000000000000000000000014 +:10DC10000000000000000000000000000000000004 +:10DC200000000000000000000000000000000000F4 +:10DC300000000000000000000000000000000000E4 +:10DC400000000000000000000000000000000000D4 +:10DC500000000000000000000000000000000000C4 +:10DC600000000000000000000000000000000000B4 +:10DC700000000000000000000000000000000000A4 +:10DC80000000000000000000000000000000000094 +:10DC90000000000000000000000000000000000084 +:10DCA0000000000000000000000000000000000074 +:10DCB0000000000000000000000000000000000064 +:10DCC0000000000000000000000000000000000054 +:10DCD0000000000000000000000000000000000044 +:10DCE0000000000000000000000000000000000034 +:10DCF0000000000000000000000000000000000024 +:10DD00000000000000000000000000000000000013 +:10DD10000000000000000000000000000000000003 +:10DD200000000000000000000000000000000000F3 +:10DD300000000000000000000000000000000000E3 +:10DD400000000000000000000000000000000000D3 +:10DD500000000000000000000000000000000000C3 +:10DD600000000000000000000000000000000000B3 +:10DD700000000000000000000000000000000000A3 +:10DD80000000000000000000000000000000000093 +:10DD90000000000000000000000000000000000083 +:10DDA0000000000000000000000000000000000073 +:10DDB0000000000000000000000000000000000063 +:10DDC0000000000000000000000000000000000053 +:10DDD0000000000000000000000000000000000043 +:10DDE0000000000000000000000000000000000033 +:10DDF0000000000000000000000000000000000023 +:10DE00000000000000000000000000000000000012 +:10DE10000000000000000000000000000000000002 +:10DE200000000000000000000000000000000000F2 +:10DE300000000000000000000000000000000000E2 +:10DE400000000000000000000000000000000000D2 +:10DE500000000000000000000000000000000000C2 +:10DE600000000000000000000000000000000000B2 +:10DE700000000000000000000000000000000000A2 +:10DE80000000000000000000000000000000000092 +:10DE90000000000000000000000000000000000082 +:10DEA0000000000000000000000000000000000072 +:10DEB0000000000000000000000000000000000062 +:10DEC0000000000000000000000000000000000052 +:10DED0000000000000000000000000000000000042 +:10DEE0000000000000000000000000000000000032 +:10DEF0000000000000000000000000000000000022 +:10DF00000000000000000000000000000000000011 +:10DF10000000000000000000000000000000000001 +:10DF200000000000000000000000000000000000F1 +:10DF300000000000000000000000000000000000E1 +:10DF400000000000000000000000000000000000D1 +:10DF500000000000000000000000000000000000C1 +:10DF60000000000020000000200020002000200011 +:10DF700000002000200020000000200020002000E1 +:10DF800000000000200000002000200020002000F1 +:10DF900000002000200020000000200020002000C1 +:10DFA00000000000000020000000200020002000F1 +:10DFB00020000000200020002000000020002000A1 +:10DFC00020000000000020000000200020002000B1 +:10DFD0002000000020002000200000002000200081 +:10DFE0002000000000000000000000000000000011 +:10DFF00000004000000000000000000000000000E1 +:10E000000000000000000000000000000000000010 +:10E010000000000000000000000000000000000000 +:10E0200000000000000000000000000000000000F0 +:10E0300000000000000000000000000040000000A0 +:10E0400000000000000000000000000000000002CE +:10E0500000020002000000020000000200000000B8 +:10E0600000000000000000000000000000000000B0 +:10E070000000084000000000000000000000000058 +:10E080000000004000000000000000000000000050 +:10E090000000000800000000000000000200000076 +:10E0A0000000004000000000000000000020000010 +:10E0B0000000000000400000000000000000000020 +:10E0C0000000000000400000000000000000000010 +:10E0D0000000000000000000000000000000000040 +:10E0E0000000000000000000000000000000000030 +:10E0F0000000000000000000000000000008000810 +:10E10000000000000004000000000000000000000B +:10E1100000000000000000000000000000080002F5 +:10E1200000000000000000000000000000000001EE +:10E1300000000000000000100000000000000008C7 +:10E1400000000000000000000000000000000000CF +:10E1500000000000000000000000000000000008B7 +:10E1600000000008000000000000000000000000A7 +:10E17000000000000000000000000000000000009F +:10E18000000000000000000000000000000000008F +:10E19000000000000000000000000000000000007F +:10E1A000000000000000000000000000000000006F +:10E1B000000000000000000000000000000000035C +:10E1C000000000000000000000000000000000004F +:10E1D000000000000000000000000000000000003F +:10E1E000000000000000000000000000000000002F +:10E1F000000000000000000000000000000000001F +:10E20000000000000000000000000000000000000E +:10E2100000000000000000000000000000000000FE +:10E2200000000000000000000000000000000000EE +:10E2300000000000000000000000000000000000DE +:10E2400000000000000000000000000000000000CE +:10E2500000000000000000000000000000000000BE +:10E2600000000000000000000000000000000000AE +:10E27000000000000000000000000000000000009E +:10E28000000000000000000000000000000000008E +:10E29000000000000000000000000000000000007E +:10E2A000000000000000000000000000000000006E +:10E2B000000000000000000000000000000000005E +:10E2C000000000000000000000000000000000004E +:10E2D000000000000000000000000000000000003E +:10E2E000000000000000000000000000000000002E +:10E2F000000000000000000000000000000000001E +:10E30000000000000000000000000000000000000D +:10E3100000000000000000000000000000000000FD +:10E3200000000000000000000000000000000000ED +:10E3300000000000000000000000000000000000DD +:10E3400000000000000000000000000000000000CD +:10E3500000000000000000000000000000000000BD +:10E3600000000000000000000000000000000000AD +:10E37000000000000000000000000000000000009D +:10E38000000000000000000000000000000000008D +:10E39000000000000000000000000000000000007D +:10E3A000000000000000000000000000000000006D +:10E3B000000000000000000000000000000000005D +:10E3C0000000000000000000000000000008000045 +:10E3D000000000000000000000000000000000003D +:10E3E000000000000000000000000000000000002D +:10E3F000000000000000000000000000000000001D +:10E40000000000000000000000000000000000000C +:10E4100000000000000000000000000000000000FC +:10E4200000000000000000000000000000000000EC +:10E4300000000000000000000000000000000000DC +:10E4400000000000000000000000000000000000CC +:10E4500000000000000000000000000000000000BC +:10E4600000000000000000000000000000000000AC +:10E47000000000000000000000000000000000009C +:10E48000000000000000000000000000000000008C +:10E49000000000000000000000000000000000007C +:10E4A000000000000000000000000000000000006C +:10E4B000000000000000000000000000000000005C +:10E4C000000000000000000000000000000000004C +:10E4D000000000000000000000000000000000003C +:10E4E000000000000000000000000000000000002C +:10E4F0000000000000000000000000000500000017 +:10E50000000000000000000000000000000000000B +:10E5100000000000000000000000000000000000FB +:10E5200000000000000000000000000000000000EB +:10E5300000000000000000020000000000000000D9 +:10E5400000000000000000000000000000000000CB +:10E5500000000000000000000000000000000000BB +:10E5600000000000000000000000000000000000AB +:10E57000000000000000000000000000000000009B +:10E58000000000000000000000000000000000008B +:10E59000000000000000000000000000000000007B +:10E5A000000000000000000000000000000000006B +:10E5B000000000000000000000000000000000005B +:10E5C000000000000000000000000000000000004B +:10E5D000000000000000000000000000000000003B +:10E5E000000000000000000000000000000000002B +:10E5F000000000000000000000000000000000001B +:10E60000000000000000000000000000000000000A +:10E6100000000000000000000000000000000000FA +:10E6200000000000000000000000000000000000EA +:10E6300000000000000000000000000000000000DA +:10E6400000000000000000000000000000000000CA +:10E6500000000000000000000000000000000000BA +:10E6600000000000000000000000000000000000AA +:10E67000000000000000000000000000000000009A +:10E68000000000000000000000000000000000008A +:10E69000000000000000000000000000000000007A +:10E6A000000000000000000000000000000000006A +:10E6B000000000000000000000000000000000005A +:10E6C000000000000000000000000000000000004A +:10E6D000000000000000000000000000000000003A +:10E6E000000000000000000000000000000000002A +:10E6F000000000000000000000000000000000001A +:10E700000000000000000000000000000000000009 +:10E7100000000000000000000000000000000000F9 +:10E7200000000000000000000000000000000000E9 +:10E7300000000000000000000000000000000000D9 +:10E7400000000000000000020000000000000000C7 +:10E7500000000000000000000000000000000000B9 +:10E7600000000000000000000000000000000000A9 +:10E770000000000000000000000000000000000099 +:10E780000000000000000000000000000000000089 +:10E790000000000000000000000000000000000079 +:10E7A0000000000000000000000000000000000069 +:10E7B0000000000000000000000000000000000059 +:10E7C0000000000000000000000000000000000049 +:10E7D0000000000000000000000000000000000039 +:10E7E0000000000000000000000000000000000029 +:10E7F0000000000000000000000000000000000019 +:10E800000000000000000000000000000000000008 +:10E8100000000000000000000000000000000000F8 +:10E8200000000000000000000000000000000000E8 +:10E8300000000000000000000000000000000000D8 +:10E8400000000000000000000000000000000000C8 +:10E8500000000000000000000000000000000000B8 +:10E8600000000000000000000000000000000000A8 +:10E870000000000000000000000000000000000098 +:10E880000000000000000000000000000000000088 +:10E890000000000000000000000000000000000078 +:10E8A0000000000000000000000000000000000068 +:10E8B0000000000000000000000000000000000058 +:10E8C0000000000000000000000000000000000048 +:10E8D0000000000000000000000000000000000038 +:10E8E0000000000000000000000000000000000028 +:10E8F0000000000000000000000000000000000018 +:10E900000000000000000000000000000000000007 +:10E9100000000000000000000000000000000000F7 +:10E9200000000000000000000000000000000000E7 +:10E9300000000000000000000000000000000000D7 +:10E9400000000000000000000000000000000000C7 +:10E9500000000000000000000000000000000000B7 +:10E9600000000000000000000000000000000000A7 +:10E970000000000000000000000000000000000097 +:10E980000000000000000000000000000000000087 +:10E990000000000000000000000000000000000077 +:10E9A0000000000000000000000000000000000067 +:10E9B0000000000000000000000000000000000057 +:10E9C0000000000000000000000000000000210026 +:10E9D0000000000000000000000000000000000037 +:10E9E0000000000000000000000000000000000027 +:10E9F0000000000000000000000000000000000017 +:10EA00000000000000000000000000000000000006 +:10EA100000000000000000000000000000000000F6 +:10EA200000000000000000000000000000000000E6 +:10EA300000000000000000000000000000000000D6 +:10EA400000000000000000000000000000000000C6 +:10EA500000000000000000000000000000000000B6 +:10EA600000000000000000000000000000000000A6 +:10EA70000000000000000000000000000000000096 +:10EA80000000000000000000000000000000000086 +:10EA90000000000000000000000000000000000076 +:10EAA0000000000000000000000000000000000066 +:10EAB0000000000000000000000000000000000056 +:10EAC0000000000000000000000000000000000046 +:10EAD0000000000000000000000000000000000036 +:10EAE0000000000000000000000000000000000026 +:10EAF0000000000000000000000000000000000016 +:10EB00000000000000000000000000000000000005 +:10EB100000000000000000000000000000000000F5 +:10EB200000000000000000000000000000000000E5 +:10EB300000000000000000000000000000000000D5 +:10EB400000000000000000000000000000000000C5 +:10EB500000000000000000000000000000000000B5 +:10EB600000000000000000000000000000000000A5 +:10EB70000000000000000000000000000000000095 +:10EB80000000000000000000000000000000000085 +:10EB90000000000000000000000000000000000075 +:10EBA0000000000000000000000000000000000065 +:10EBB0000000000000000000000000000000000055 +:10EBC0000000000000000000000000000000000045 +:10EBD0000000000000000000000000000000000035 +:10EBE0000000000000000000000000000000000025 +:10EBF0000000000000000000000000000000000015 +:10EC00000000000000000000000000000000000004 +:10EC100000000000000000000000000000000000F4 +:10EC200000000000000000000000000000000000E4 +:10EC300000000000000000000000000000000000D4 +:10EC400000000000000000000000000000000000C4 +:10EC500000000000000000000000000000000000B4 +:10EC600000000000000000000000000000000000A4 +:10EC70000000000000000000000000000000000094 +:10EC80000000000000000000000000000000000084 +:10EC90000000000000000000000000000000000074 +:10ECA0000000000000000000000000000000000064 +:10ECB0000000000000000000000000000000000054 +:10ECC0000000000000000000000000000000000044 +:10ECD00000000000000000000000000000A0000094 +:10ECE0000000000000000000000000000000000024 +:10ECF0000000000000000000000000000000000014 +:10ED00000000000000000000000000000000000003 +:10ED100000000000000000000000000000000000F3 +:10ED200000000000000000000000000000000000E3 +:10ED300000000000000000000000000000000000D3 +:10ED400000000000000000000000000000000000C3 +:10ED500000000000000000000000000000000000B3 +:10ED600000000000000000000000000000000000A3 +:10ED70000000000000000000000000000000000093 +:10ED80000000000000000000000000000000000083 +:10ED90000000000000000000000000000000000073 +:10EDA0000000000000000000000000000000000063 +:10EDB0000000000000000000000000000000000053 +:10EDC0000000000000000000000000000000000043 +:10EDD0000000000000000000000000000000000033 +:10EDE0000000000000000000000000000000000023 +:10EDF0000000000000000000000000000000000013 +:10EE00000000000000000000000000000000000002 +:10EE100000000000000000000000000000000000F2 +:10EE200000000000000000000000000000000000E2 +:10EE300000000000000000000000000000000000D2 +:10EE400000000000000000000000000000000000C2 +:10EE500000000000000000000000000000000000B2 +:10EE600000000000000000000000000000000000A2 +:10EE70000000000000000000000000000000000092 +:10EE80000000000000000000000000000000000082 +:10EE90000000000000000000000000000000000072 +:10EEA0000000000000000000000000000000000062 +:10EEB0000000000000000000000000000000000052 +:10EEC0000000000000000000000000000000000042 +:10EED0000000000000000000000000000000000032 +:10EEE0000000000000000000000000000000000022 +:10EEF0000000000000000000000000000000000012 +:10EF00000000000000000000000000000000000001 +:10EF100000000000000000000000000000000000F1 +:10EF200000000000000000000000200000000000C1 +:10EF30000000200000000000000000002000000091 +:10EF400000000000000000000000200000000000A1 +:10EF50000000200000000000000000002000000071 +:10EF60000000000000000000000000002000000081 +:10EF7000000000002004000000000000000020004D +:10EF80000000000000000000000000002000000061 +:10EF90000000000020000000000000000000200031 +:10EFA000000000000000000000020000000000005F +:10EFB0000000000000000000000000000000000051 +:10EFC0000000000000000000000000000000000041 +:10EFD0000000000000000000000000000000000031 +:10EFE0000000000000000000000000000000000021 +:10EFF0000000000000000000000000000000000011 +:10F000000000000000000000000000000000000000 +:10F0100000000000000000000000000200000000EE +:10F020000000000000000000008000000000000060 +:10F0300000000000000000000000000000000000D0 +:10F0400010000000000000000000000000000000B0 +:10F0500000000000000000000000000000000000B0 +:10F0600000000000000000000000000000000000A0 +:10F070000000000000000000000000000000000090 +:10F080000000000000000000000000000000000080 +:10F090000000000000000000000000000000000070 +:10F0A000000000000900000000000010000000083F +:10F0B0000008000000000008000800080000000828 +:10F0C0000000000000000000000000000000000838 +:10F0D00000080000000000080008000800004008C8 +:10F0E0000000000800000000000000000000000018 +:10F0F0000008000800000000000800840004000070 +:10F1000000080000000800000000000000000000EF +:10F1100000040008000000000002000000000000E1 +:10F120000082000000080000000000000002000053 +:10F1300000000000000000000000000000000000CF +:10F1400000000000000000000000000000000000BF +:10F1500000000000000000000000000000000000AF +:10F16000000000000000000000000000000000009F +:10F17000000000000000000000000000000000008F +:10F18000000000000000000000000000000300007C +:10F19000000000000000000000000000000000006F +:10F1A000000000000000000000000000000000015E +:10F1B000000000000000000000000000000000004F +:10F1C000000000000000000000000000000000003F +:10F1D000000000000000000000000000000000002F +:10F1E000000000000000000000000000000000001F +:10F1F000000000000000000000000000000000000F +:10F2000000000000000000000000000000000000FE +:10F2100000000000000000000000000000000000EE +:10F2200000000000000000000000000000000000DE +:10F2300000000000000000000000000000000000CE +:10F2400000000000000000000000000000000000BE +:10F2500000000000000000000000000000000000AE +:10F26000000000000000000000000000000000009E +:10F27000000000000000000000000000000000008E +:10F28000000000000000000000000000000000007E +:10F29000000000000000000000000000000000006E +:10F2A000000000000000000000000000000041001D +:10F2B000000021000000000000000000000000002D +:10F2C000000000000000000000000000000000003E +:10F2D000000000000000000000000000000000002E +:10F2E000000000000000000000000000000000001E +:10F2F000000000000000000000000000000000000E +:10F3000000000000000000000000000000000000FD +:10F3100000000000000000000000000000000000ED +:10F3200000000000000000000000000000000000DD +:10F33000000000000040000000000000000000008D +:10F3400000000000000000000000000000000000BD +:10F3500000000000000000000000000000000000AD +:10F36000000000000000000000000000000000009D +:10F37000000000000000000000000000000000008D +:10F38000000000000000000000000000000000007D +:10F390000000000000000000000000080000000065 +:10F3A000000000000000000000000000000000005D +:10F3B000000000000000000000000000000000004D +:10F3C000000000000000000000000000000000003D +:10F3D000000000000000000000000000000000002D +:10F3E000000000000000000000000000000000001D +:10F3F000000000000000000000000000000000000D +:10F4000000000000000000000000000000000000FC +:10F4100000000000000000000000000000000000EC +:10F4200000000000000000000000000000000000DC +:10F4300000000000000000000010000000000000BC +:10F4400000000000000000000000000000000000BC +:10F4500000000000000000000000000000000000AC +:10F46000000000000000000000000000000000009C +:10F47000000000000000000000000000000000008C +:10F48000000000000000000000000000000000007C +:10F49000000000000000000000000000000000006C +:10F4A000000000000000000000000000000000005C +:10F4B000000000000000000000000001000000004B +:10F4C000000000000000000000000000000000003C +:10F4D000000000000000000000000000000000002C +:10F4E000000000000000000000000000000000001C +:10F4F000000000000000000000000000000000000C +:10F5000000000000000000000000000000000000FB +:10F5100000000000000000000000000000000000EB +:10F5200000000000000000000000000000000000DB +:10F5300000000000000000000000020000000000C9 +:10F5400000000000000000000000000000000000BB +:10F5500000000000000000000000000000000000AB +:10F56000000000000000000000000000000000009B +:10F57000000000000000000000000000000000008B +:10F58000000000000000000000000000000000007B +:10F59000000000000000000000000000000000006B +:10F5A000000000000000000000000000000000005B +:10F5B00000000000000000000000030080000000C8 +:10F5C000000000000000000000000000000000003B +:10F5D000000000000000000000000000000000002B +:10F5E000000000000000000000000000000000001B +:10F5F000000000000000000000000000000000000B +:10F6000000000000000000000000000000000000FA +:10F6100000000000000000000000000000000000EA +:10F6200000000000000000000000000000000000DA +:10F6300000000000000000000000000000000000CA +:10F6400000000000000000000000000000000000BA +:10F6500000000000000000000000000000000000AA +:10F66000000000000000000000000000000000009A +:10F67000000000000000000000000000000000008A +:10F68000000000000000000000000000000000007A +:10F69000000000000000000000000000000000006A +:10F6A000000000000000000000000000000000005A +:10F6B000000000000000000000000000400000000A +:10F6C000A00090000000000000000000000000000A +:10F6D000000000000000000000000000000000002A +:10F6E000000000000000000000000000000000001A +:10F6F000000000000000000000000000000000000A +:10F7000000000000000000000000000000000000F9 +:10F7100000000000000000000000000000000000E9 +:10F7200000000000000000000000000000000000D9 +:10F7300000000000000000000000000000000000C9 +:10F7400000000001000000000000000000000000B8 +:10F7500000000000000000000000000000000000A9 +:10F760000000000000000000000000000000000099 +:10F770000000000000000000000000000000000089 +:10F780000000000000000000000000000000000079 +:10F790000000000000000000000000000000000069 +:10F7A0000000000000000000000000000000000059 +:10F7B0000000000000000000000000000000000049 +:10F7C00000400005002000050000000000000000CF +:10F7D0000000000000000000000000000000000029 +:10F7E0000000000000000000000000000000000019 +:10F7F0000000000000000000000000000000000009 +:10F8000000000000000000000000000000000000F8 +:10F8100000000000000000000000000000000000E8 +:10F8200000000000000000000000000000000000D8 +:10F8300000000000000000000000000000000000C8 +:10F8400000000003008000800000000000000000B5 +:10F8500000000000000000000000000000000000A8 +:10F860000000000000000000000000000000000098 +:10F870000000000000000000000000000000000088 +:10F880000000000000000000000000000000000078 +:10F890000000000000000000000000000000000068 +:10F8A0000000000000000000000000000000000058 +:10F8B0000000000000000000000000000000000048 +:10F8C00000000000000000020040000000000000F6 +:10F8D0000000000000000000000000000000000028 +:10F8E0000000000000000000000000000000000018 +:10F8F0000000000000000000000000000000000008 +:10F9000000000000000000000000000000000000F7 +:10F9100000000000000000000000000000000000E7 +:10F9200000000000000000000000000000000000D7 +:10F9300000000000000000000000000000000000C7 +:10F9400000000000000000000000000000000000B7 +:10F9500000000000000000000000000000000000A7 +:10F960000000000000000000000000000000000097 +:10F970000000000000000000000000000000000087 +:10F980000000000000000000000000000000000077 +:10F990000000000000000000000000000000000067 +:10F9A0000000000000000000000000000000000057 +:10F9B0000000000000000000000000000000000047 +:10F9C0000000000000000000000000000000000037 +:10F9D0000000000000000000000000000000000027 +:10F9E0000000000000000000000000000000000017 +:10F9F0000000000000000000000000000000000007 +:10FA000000000000000000000000000000000000F6 +:10FA100000000000000000000000000000000000E6 +:10FA200000000000000000000000000000000000D6 +:10FA300000000000000000000000000000000000C6 +:10FA400000000000000000000000000000000000B6 +:10FA500000000000000000000000000000000000A6 +:10FA60000000000000000000000000000000000096 +:10FA70000000000000000000000000000000000086 +:10FA80000000000000000000000000000000000076 +:10FA90000000000000000000000000000000000066 +:10FAA0000000000000000000000000000000000056 +:10FAB0000000000000000000000000000000000046 +:10FAC0000000000000000000000000000000000036 +:10FAD0000000000000000000000000000000000026 +:10FAE0000000000000000000000000000000000016 +:10FAF0000000000000000000000000000000000006 +:10FB000000000000000000000000000000000000F5 +:10FB100000000000000000000000000000000000E5 +:10FB200000000000000000000000000000000000D5 +:10FB300000000000000000000000000000000000C5 +:10FB400000000000000000000000000000000000B5 +:10FB50000000000000820000000000000000000023 +:10FB60000000000000000000000000000000000095 +:10FB70000000000000000000000000000000000085 +:10FB80000000000000000000000000000000000075 +:10FB90000000000000000000000000000000000065 +:10FBA0000000000000000000000000000000000055 +:10FBB0000000000000000000000000000000000045 +:10FBC0000000000000000000000000000000000035 +:10FBD00000610006000D00000000000000000000B1 +:10FBE0000000000000000000000000000000000015 +:10FBF0000000000000000000000000000000000005 +:10FC000000000000000000000000000000000000F4 +:10FC100000000000000000000000000000000000E4 +:10FC200000000000000000000000000000000000D4 +:10FC300000000000000000000000000000000000C4 +:10FC400000000000000000000000000000000000B4 +:10FC5000000000000000000000080000000000009C +:10FC60000000000000000000000000000000000094 +:10FC70000000000000000000000000000000000084 +:10FC80000000000000000000000000000000000074 +:10FC90000000000000000000000000000000000064 +:10FCA0000000000000000000000000000000000054 +:10FCB0000000000000000000000000000000000044 +:10FCC0000000000000000000000000000000000034 +:10FCD00000000000000000004000400000000000A4 +:10FCE0000000000000000000000000000000000014 +:10FCF0000000000000000000000000000000000004 +:10FD000000000000000000000000000000000000F3 +:10FD100000000000000000000000000000000000E3 +:10FD200000000000000000000000000000000000D3 +:10FD300000000000000000000000000000000000C3 +:10FD400000000000000000000000000000000000B3 :10FD500000000000000000000000000000000000A3 :10FD60000000000000000000000000000000000093 :10FD70000000000000000000000000000000000083 @@ -135173,193 +135173,193 @@ :10FE300000000000000000000000000000000000C2 :10FE400000000000000000000000000000000000B2 :10FE500000000000000000000000000000000000A2 -:10FE60002000000000002000200000020000000030 -:10FE700000000100018021800084000000C100809A -:10FE80002080880000002000200400000000000006 -:10FE900000050004000020008800000304000000AA -:10FEA0000000200320A0408020832082A0000000CA -:10FEB000000000800080888021040080208000C035 -:10FEC0000080208005040100218020800005408002 -:10FED0000080008000002000200288000000000058 -:10FEE0000000000000000040004000900090000072 -:10FEF000000400000402202020200004210000044F -:10FF00000004002041020090400010C010000000DA -:10FF1000009000904001400040C0000200008004BA -:10FF200000000000000021051004000400040090FF -:10FF300000C000000020000440042003000440042E -:10FF4000002000200020A02020C004041004400055 -:10FF5000000400040004000209C04000000400097D -:10FF6000000000000000000000000000021000007F -:10FF700000000000000002004000401008400000A7 -:10FF8000A0000000080000000000000008000000C1 -:10FF9000000000002000010000050800080000002B -:10FFA00090000000000000000100904100000000EF -:10FFB0000800000000000800000000000000080029 -:10FFC000000021002000400000000010080009008F -:10FFD00000000200000040000000000000000800D7 -:10FFE00000080008000400000008000800080008DD -:10FFF0000000000800000008800080008008000861 +:10FE600000002000840000000000000000004000AE +:10FE70002000000040000000200040004000000082 +:10FE800000000000200000000004400000002000EE +:10FE900020000000200000002000000020002000C2 +:10FEA00000000000000000000000400020000000F2 +:10FEB0002000200000002000000020002000200082 +:10FEC0000000000000000000000000002000000012 +:10FED00020000000000000000000880040400000FA +:10FEE0000000000000000000000000000000000012 +:10FEF0000000000000000000000000000000000002 +:10FF000000000000000000000000000000000000F1 +:10FF100000000000000000000000000000000000E1 +:10FF20000000000000004000000000000000000091 +:10FF300000000000000000000000000000000000C1 +:10FF4000000000000000000000000000008400909D +:10FF500000900000000200002000000020000000CF +:10FF600000001000000000000000000008880000F1 +:10FF70000008000000000000000000000800000071 +:10FF80000000000000000000000000000805000064 +:10FF9000000000000010000000000000021000003F +:10FFA0000000000000000000000000000000080049 +:10FFB0000000000000000000000000000000000041 +:10FFC0000000000000000000000000080000000029 +:10FFD0000000000000000000000000040000020417 +:10FFE00000000000000000000000008400820520E6 +:10FFF00000000000000000080008000800080008D9 :020000040021D9 -:100000000008000800088000000800080008000838 -:100010000000000800008008200000080008000818 -:100020000000000800080008000004080308000899 -:1000300000088002000800004008000000080008D6 -:100040000008000884088008C000410800098008F2 -:100050000808000880080000801000000008000860 -:100060000008000000050000000000100021000052 -:100070000000000000210000000000000008400017 -:10008000A0000000900200002000002140000200BB -:10009000010008020021900000000005000020027D -:1000A0000000000084410005000000040400040377 -:1000B0000400008000009009900020110000400022 -:1000C0004000010003A1202120402011010900006F -:1000D0000000200000110004900504009021402041 -:1000E00000410020000000000000000000000000AF -:1000F00000000000000005000000000000000000FB -:1001000000840000000000000002000010000088D1 -:100110000040040080000000000000000400000017 -:1001200000000000000000000000000000010000CE -:1001300080008000002000000000400080000000DF -:100140004100110020000404800080008400200091 -:10015000000000000300000000000000000000108C -:1001600000A00000000000000000000000000000EF -:100170000000040000000000840000000000900067 -:1001800000008200008000000080000001000000EC -:1001900000110000104000000000100000002000CE -:1001A0000000000000000000040000008200014088 -:1001B00000000440000085400008C000000020004E -:1001C000C004000000000800C0000000040004009B -:1001D00008000400000004020800C00000008200C3 -:1001E0008200100000000000000000A000080000D5 -:1001F000000000008000000000000000000000007F -:1002000000000004000000020000000400000400E0 -:1002100000000000000000000500000000000000D9 -:1002200080000000000000000000050000000088C1 -:100230002000000000C00000048200000002000056 -:1002400080000001000000000000000000008000AD -:100250008000030080000000800100000000000812 -:10026000000000100000000000000000000000007E -:10027000000000000000040000000000C0000000BA -:10028000040000002000000404000002000000043C -:100290000120000000030000000001080000000031 -:1002A0000000000040008800000000000000000086 -:1002B000040020000000400004000000000890A09E -:1002C00020A00011C000A0400000202040004000FD -:1002D00000000400821040004000A0040021000340 -:1002E0008202820000080040C000000500000000FB -:1002F0000000000000000000910000000000000469 -:100300000000000000008004002100000000020046 -:100310000020200000000000111000000400000078 +:100000000000000040080000000800080000400850 +:1000100000000008000000080004000400080004BC +:1000200000000000000400840008008400080000B4 +:100030000008000000080008000800000008000890 +:100040000008000000080000000800040084000808 +:1000500000840000000800080008000800080008EC +:10006000000800050000000000000000000800007B +:100070000000000000000000000000000040000040 +:10008000000000000021000000000000000000004F +:10009000000000000021000000000000000000003F +:1000A0000008000000000008000000000000000040 +:1000B000000000000000000000030000000300003A +:1000C0000000000000000000000000000000000030 +:1000D0000000000000000000000000000000002000 +:1000E00000000021000000000000000000000000EF +:1000F0000000000000000000000000000000000000 +:1001000000000000000000000000000000000000EF +:1001100000000000000000000000000000000000DF +:1001200000000000000000000000000000000000CF +:1001300000000000000000000000000000000000BF +:1001400000000000000000000000000000000000AF +:10015000000000000000000000000000000000009F +:10016000000000000000000000000000000000008F +:10017000000000000000000000210000000000005E +:10018000000000000000000000000000000000006F +:10019000000000000000000000050008C000000092 +:1001A000000000000000000000000000000000004F +:1001B0000008000000000000000000000000000037 +:1001C000000000000000000000000000000000002F +:1001D000000000000000080000000000000008000F +:1001E00000000000000010000000000000000000FF +:1001F00000000000000000000000000000000000FF +:100200000000000000820000000000000000000864 +:1002100000000000000000000000000000000000DE +:1002200000000000000000000000000000000000CE +:1002300000000000000000080000000000000000B6 +:1002400000000000000000000000000000000000AE +:10025000000000000000000000000000000000009E +:10026000000000000000000000000000000084000A +:10027000000000000000000000000000000000007E +:100280000000000000000000000000000008000066 +:100290000000080000000000000000000000000056 +:1002A000000000000000000000000000000000004E +:1002B000000000000000000000000000000000003E +:1002C00000000000000000400000000000000000EE +:1002D00000000040000000000000000000000000DE +:1002E000000000000000000000000000000000000E +:1002F00021000000000000000000000000000000DD +:1003000000000000000000000000000000000000ED +:1003100000000000000000000000000000000000DD :1003200000000000000000000000000000000000CD -:1003300000000000800000000000800000820082B9 -:1003400000048004000000400000000000000000E5 -:10035000028840000000110085000002000100003A -:10036000218800080000000000000000000000419B -:10037000000000410000000000100000000000002C -:100380008400000004004000000084008404000099 -:10039000000000830004000000030021000200218F -:1003A000000200000000000000000000000000004B -:1003B0000020000000410021080003050000840027 -:1003C000C0002041002100000000000400110000D6 -:1003D00000008200000082800000840000040021F0 -:1003E00000410000000400098403C0000003000075 +:1003300000000000000000000000000000000000BD +:1003400000000000000000000000000000000000AD +:10035000000000000000000000000000000000009D +:10036000000000000000000000000000000000008D +:10037000000000080000000800000000000000006D +:10038000000000000000000000000000000000006D +:10039000000000000000000000000000000000005D +:1003A0000000000000000000000800000000000045 +:1003B000000000000000000000000000000000003D +:1003C000000000000000000000000000000000002D +:1003D000000000000000000000000000000000001D +:1003E000000000000000000000000000000000000D :1003F00000000000000000000000000000000000FD -:10040000000000000000800000000000000000016B -:1004100000000000000400010002000000000000D5 -:1004200000000020000000000000020002000000A8 -:1004300000004101000400000500800284840000E7 -:1004400000000900804000000000002000010000C2 -:100450000000000000000000000400000000000197 -:10046000000009000000000100080000000000007A -:10047000000000000000000000000000000000007C -:100480000000000020000000000088000100A00023 -:100490000400A10200C08840A090000000000000FD -:1004A000000000000000010000000100000000004A -:1004B000000000000000000000000000080008002C -:1004C000000082011120080401409011000010007A -:1004D000010000000100000011000000020891026C -:1004E000891082084000050184001000000000000F +:1004000000000000000000000000000000000000EC +:1004100000000000000000000000000000000000DC +:1004200000000000000000000000000000000000CC +:1004300000000000000000000300000008000000B1 +:1004400000000000000000000000000800000000A4 +:10045000000000000000000800000008000000008C +:100460000008000000000000000000000000000084 +:1004700000A00000000000000000000000000000DC +:10048000000000000000000000000000000000006C +:10049000000000000000000000000000000000005C +:1004A000000000000000000000000000000000004C +:1004B000000000010000000000000000000000003B +:1004C000000000000000000000000000000000002C +:1004D000000000000000000000000000000000001C +:1004E000000000000000000000000000000000000C :1004F00000000000000000000000000000000000FC -:1005000000000000000000000000000000000300E8 -:1005100009008000C00021002080808000000000D1 -:100520000000000000000000100000001100002189 -:100530000009000900000000000004000000400065 -:10054000800011008020901180A040208083000056 -:100550000000030000001000110090000000C00027 -:100560008800880000800009A12088108004000015 +:1005000000000000000000000000000000000000EB +:1005100000000000000000000000000000000000DB +:1005200000000000000000000000000000000000CB +:1005300000000000000000000000000000000000BB +:1005400000000000000000000000000000000000AB +:10055000000000000000000000000000000000009B +:10056000000000000000000000000000000000008B :10057000000000000000000000000000000000007B -:10058000000000000000000000000000008011805A -:100590001180110808C1000000048005008080005F -:1005A0000000000000000000000800000000000043 -:1005B0000000000000000000000000000002000039 -:1005C000000000A18980A01180000002809000003E -:1005D00000050000001000000008008000100080EE -:1005E000090810214183C090A08010000303100867 +:10058000000000000000000000000000000000006B +:10059000000000000000000000000000000000005B +:1005A000000000000000000000000000000000004B +:1005B000000000000000000000000000000000003B +:1005C000000000000000000000000000000000002B +:1005D000000000000000000000000000000000001B +:1005E000000000000000000000000000000000000B :1005F00000000000000000000000000000000000FB -:100600000000000000000000000000000000008268 -:10061000000201400000010988001000A00208C08B -:1006200008000000000000000000000100000000C1 +:1006000000000000000000080000000000000000E2 +:1006100000000000000000000000000000000000DA +:1006200000000000000000000000000000000000CA :1006300000000000000000000000000000000000BA -:10064000000040009010A0A0832010002000A041D6 -:100650000410000000000001000000000020000065 -:100660000008404191209082910388080000020117 -:1006700001900000000000000000000000000000E9 -:1006800000000000000090000000000000001000CA -:10069000000000C1041084410010041140A110901A -:1006A000A0090000000000000000000000000000A1 +:1006400000000000000000000000000000000000AA +:10065000000000000000000000000000000000009A +:10066000000000000000000000000000000000008A +:10067000000000000000000000000000000000007A +:10068000000000000000000000000000000000006A +:10069000000000000000000000000000000000005A +:1006A000000000000000000000000000000000004A :1006B000000000000000000000000000000000003A -:1006C000000000000090000091000111044011C0E2 -:1006D00000080288000088000000000000000200FE -:1006E0000200000190822088C0910920000320822E -:1006F000A082019000000000000000000000000047 +:1006C000000000000000000000000000000000002A +:1006D000000000000000000000000000000000001A +:1006E000000000000000000000000000000000000A +:1006F00000000000000000000000000000000000FA :1007000000000000000000000000000000000000E9 -:10071000000000001105809180912090800800C0A9 -:10072000004105A0000000000000000000000000E3 -:100730000000200000000000000000000000030096 -:1007400000000000020008200000050008208000D2 -:1007500010000880050000000000000040001008A4 -:100760008021000309208882000880A1080300A1DD -:10077000A04188830220000000000000000000006B -:100780000000000000000000001000000000000059 -:10079000001000000080021111104000031000053D -:1007A00000090080000000000009000000000000B7 -:1007B00000020000800000000000000000000000B7 -:1007C000000000040000000080418088A0000000BC -:1007D0000021800280008000000200000000000074 -:1007E0000011000200090000108882A00280101190 -:1007F00008881011028011020000000000000000B3 +:1007100000000000000000000000000000000000D9 +:1007200000000000000000000000000000000000C9 +:1007300000000000000000000000000000000000B9 +:1007400000000000000000000000000000000000A9 +:100750000000000000000000000000000000000099 +:100760000000000000000000000000000000000089 +:100770000000000000000000000000000000000079 +:100780000000000000000000000000000000000069 +:100790000000000000000000000000000000000059 +:1007A0000000000000000000000000000000000049 +:1007B0000000000000000000000000000000000039 +:1007C0000000000000000000000000000000000029 +:1007D0000000000000000000000000000000000019 +:1007E0000000000000000000000000000000000009 +:1007F00000000000000000000000000000000000F9 :1008000000000000000000000000000000000000E8 -:10081000000000000000000800A10000010000002E -:1008200002008410840884000000004000000000E2 -:100830000200020100009000000000000000000023 -:10084000000000000000000000000201080241005A -:1008500008008801A0004088A000000000000000FF -:100860000000000100000000000091C1051004100C -:10087000C100011000910002010000000000000012 -:1008800000000000000000000000008200000700DF -:1008900000000021000007000000418200E0070086 -:1008A0000006842100E00704000600820000070023 -:1008B0000000418200E007000000000000E00000AE -:1008C00000000000821100E007000000418200E00B -:1008D00007006000418200E007040000810000E0A2 -:1008E00000000000418200E007000000818100E07C -:1008F00007004206410000E0000000000000000088 +:1008100000000000000000000000000000000000D8 +:1008200000000000000000000000000000000000C8 +:1008300000000000000000000000000000000000B8 +:1008400000000000000000000000000000000000A8 +:100850000000000000000000000000000000000098 +:100860000000000000000000000000000000000088 +:100870000000000000000000000000000000000078 +:10088000000000000000000000000006000006005C +:100890000000000000000000000000000000000058 +:1008A0000000000000000000000000000000000048 +:1008B0000000000000000000000000000000000038 +:1008C0000000000000000000000000000000000028 +:1008D0000000000000000000000000000000000018 +:1008E0000000000000000000000000000000000008 +:1008F00000000000000000000000000000000000F8 :1009000000000000000000000000000000000000E7 :1009100000000000000000000000000000000000D7 -:100920000303909FBD24F9F91BFF1BC300000000C7 -:1009300000000000FFFF3CFF00000000000000007E -:1009400000000000000000000000000000008D8199 -:100950009999C3C3000081E79090098109E70000DD -:100960000000000000000000000000000000F0F0A7 -:100970003C3C4046494F00000000E724FCFC0000DE +:1009200000000000000000000000000000000000C7 +:1009300000000000000000000000000000000000B7 +:1009400000000000000000000000000000000000A7 +:100950000000000000000000000000000000000097 +:100960000000000000000000000000000000000087 +:100970000000000000000000000000000000000077 :100980000000000000000000000000000000000067 :100990000000000000000000000000000000000057 -:1009A0000000F3F3909FBD2460601B3C1B0000001F -:1009B000000000000000FFFF3C00000000000000FD +:1009A0000000000000000000000000000000000047 +:1009B0000000000000000000000000000000000037 :1009C0000000000000000000000000000000000027 -:1009D0008DBD99994242424281E7F6F66F816FE7F9 +:1009D0000000000000000000000000000000000017 :1009E0000000000000000000000000000000000007 -:1009F0006666FF00D0D6D9DF00000000E724C0C043 +:1009F00000000000000000000000000000000000F7 :100A000000000000000000000000000000000000E6 :100A100000000000000000000000000000000000D6 :100A200000000000000000000000000000000000C6 @@ -135370,476 +135370,476 @@ :100A70000000000000000000000000000000000076 :100A80000000000000000000000000000000000066 :100A90000000000000000000000000000000000056 -:100AA00000000000000000000000096FBDBD9900BB -:100AB000898900000000424242420000000000001C +:100AA0000000000000000000000000000000000046 +:100AB0000000000000000000000000000000000036 :100AC0000000000000000000000000000000000026 -:100AD0000000000000000000F303F90946426642EE -:100AE000F303FF0F00000000000000000000000002 -:100AF00000000000C302C1002CEC2FEF000000003A -:100B0000E781E78100000000000000000000000015 +:100AD0000000000000000000000000000000000016 +:100AE0000000000000000000000000000000000006 +:100AF00000000000000000000000000000000000F6 +:100B000000000000000000000000000000000000E5 :100B100000000000000000000000000000000000D5 -:100B2000000000000000000000000000096F242405 -:100B30009900808000000000424242420000000014 +:100B200000000000000000000000000000000000C5 +:100B300000000000000000000000000000000000B5 :100B400000000000000000000000000000000000A5 -:100B500000000000000000000000F303F9096662D5 -:100B60006642F000FC0C00000000000000000000E5 -:100B7000000000000000C3FBC7FF20E023E30000EB -:100B80000000FFFFFFFF0000000000000000000069 -:100B90000000000000000000002805000000000028 -:100BA0000028000000A005610A2F851D00000061DB -:100BB000002F800D00A00000002800000000007140 -:100BC000002F800D200000610002000D00000000D9 -:100BD0000561002F800D200005610A29850100A113 -:100BE0000061002F800D00A000610007800D000053 -:100BF00005610A2F850D00A085610A2F850D00A0D3 -:100C000000610007801D00010000000000000000DE +:100B50000000000000000000000000000000000095 +:100B60000000000000000000000000000000000085 +:100B70000000000000000000000000000000000075 +:100B80000000000000000000000000000000000065 +:100B900000000000000000000020000000A0000095 +:100BA0000000000000000000000000000000000045 +:100BB0000000000000000000000000000000000035 +:100BC0000000000000000000000000000000000025 +:100BD0000000000000000000000000000000000015 +:100BE0000000000000000000000000000000000005 +:100BF00000000000000000000000000000000000F5 +:100C000000000000000000000000000000000000E4 :100C100000000000000000000000000000000000D4 -:100C2000000000000000000000AAFFAAACACF0FF2A -:100C3000000000003C00171700000000000000004A +:100C200000000000000000000000000000000000C4 +:100C300000000000000000000000000000000000B4 :100C400000000000000000000000000000000000A4 -:100C500000000000000000000000F0F0F0F03C3C5C +:100C50000000000000000000000000000000000094 :100C60000000000000000000000000000000000084 -:100C70000000000000003CE8FFE8AFAF7D28000F57 -:100C8000F0FF0F1E0F0F0041000F000000000000DA +:100C70000000000000000000000000000000000074 +:100C80000000000000000000000000000000000064 :100C90000000000000000000000000000000000054 -:100CA00000000000000000000000F0C3F0C3ACAC86 -:100CB000000F00000000FFC3171700000000000035 +:100CA0000000000000000000000000000000000044 +:100CB0000000000000000000000000000000000034 :100CC0000000000000000000000000000000000024 :100CD0000000000000000000000000000000000014 -:100CE0003C3C00000000000000000000000000008C -:100CF000000000000000000000E8C3E805057D28B2 -:100D0000CACACACA0F1E3C3C00EB000F000000001C +:100CE0000000000000000000000000000000000004 +:100CF00000000000000000000000000000000000F4 +:100D000000000000000000000000000000000000E3 :100D100000000000000000000000000000000000D3 :100D200000000000000000000000000000000000C3 -:100D30004BAA4B0000000000000000000000000073 -:100D4000000000000000000000000000FC0CFC0C93 -:100D50000000000000000000000000000000C3C30D -:100D6000C3C300FF0000F0C300AA000000000000A1 +:100D300000000000000000000000000000000000B3 +:100D400000000000000000000000000000000000A3 +:100D50000000000000000000000000000000000093 +:100D60000000000000000000000000000000000083 :100D70000000000000000000000000000000000073 -:100D8000000030AF3FAF7C2C3C3CE8E83CFF00006B +:100D80000000000000000000000000000000000063 :100D90000000000000000000000000000000000053 :100DA0000000000000000000000000000000000043 -:100DB00000004BFF4B550000000000000000000049 -:100DC0000000000000000000000000000000FC0C1B -:100DD000FC0C00000000000000000000000000000B -:100DE0000000000000FF0000F0C3FFAA00000000A8 +:100DB0000000000000000000000000000000000033 +:100DC0000000000000000000000000000000000023 +:100DD0000000000000000000000000000000000013 +:100DE0000000000000000000000000000000000003 :100DF00000000000000000000000000000000000F3 -:100E00000000000030A03FA0FE04BE14E8E800C3CC +:100E000000000000000000000000000000000000E2 :100E100000000000000000000000000000000000D2 -:100E20000000000000000000200020000000000082 -:100E3000008000000000A000000000000000000092 -:100E40004080108004000480200021000000000089 -:100E500001000500048005000003040000000400F8 -:100E60000000828011008880C08020802080008067 -:100E700000808800000088048804000000002040F2 -:100E800000000000008020000000204120800000C1 -:100E90000080200000008800000000000002000028 -:100EA000008200000000000000004002000000007E -:100EB00000020002409000000000400200000040DC -:100EC000000000200020400202204100200000001D -:100ED00000000400A000C004A08200008000000206 -:100EE00080022102402004004020002040202120D8 -:100EF0002104000400402000400020000000000009 -:100F00000002000000004010400200000002400407 -:100F100000C000040000000000000000020000000B -:100F200000000000000000000000001000000200AF -:100F3000000090100000000000000000000002000F -:100F4000000000000200020001000200000020007A -:100F50000000000000200000001000000000000061 -:100F60000010001000102000000000000010000021 -:100F7000000020002010000000020000000000001F -:100F80000000000000000400000000090000020052 -:100F90002000410040000200020002000240000068 -:100FA0000084000400840084000400840000000029 -:100FB0000000000800000084000000080008000095 -:100FC0000000000000000000008404000008000091 -:100FD0008084000800000010000400850008000064 -:100FE00000000083000100898010008203C000859A -:100FF00000000002800880010000000800000010CE -:10100000000400020008000080000000000800004A -:1010100000008000A08280008400C14080008041E8 -:1010200000000000000000040000000800000008AC -:10103000000000050000402000080000000920001A -:10104000000000000000000000210008040500006E -:101050000400C0058800400001408808000001002D -:10106000000010000008000002000804004104080D -:101070000400400088020400042010040000000363 -:10108000100800000020000000000000000900001F -:1010900000009000020003000200A0000000900089 -:1010A000000000000000000000000000020000003E -:1010B00000000000000820004001000000A002A085 -:1010C0008000110000A00000000809400084808416 -:1010D000110000000000000011002082000000004C -:1010E0000400000009000040000821000200410047 -:1010F0001100009000000000808880050000008240 -:1011000000040000084021000440030011204102B7 -:101110000000410041008090A002800041020520B3 -:1011200004C00300000000000000000000000000F8 -:1011300000008200000000410000012000000000CB -:10114000000000000000A0000040000004080000B3 -:10115000004000200000C000001184000000A0003A -:10116000C004A00400000080820000000000C00055 -:1011700008000811080200000021100040100000C3 -:1011800088000800840000008400000000000005C2 -:1011900000008200080010400040004000400000B5 -:1011A00000000800084100000000080000001000D6 -:1011B00000000000000000000000000040010000EE -:1011C0000000000008000000000000000000900087 -:1011D00009000000020100000000000800000000FB -:1011E000008800C100010000001000A0099000006C -:1011F00008840900410020000000000000000040B9 -:1012000000100000000000000000100010000500A9 -:101210001000030021000000000100010001000196 -:10122000000000000000000000000000000000219D -:101230004000000040000000040000000000040026 -:101240000004880000000000000000000000000012 -:1012500040000400040000000000020000088400B8 -:1012600082004000400340000000C0080402C004A7 -:1012700004110020022000200020000004050020AE -:1012800000000000001000000011100400084000E1 -:1012900000000000040020004000008088050000DD -:1012A000000000202000900000000000000000006E -:1012B00000000000020000840000000000000000A8 -:1012C0008000008800C000A0008400000508000025 -:1012D0000084000080000084000000000404000876 -:1012E0000000000009000000000000000000800075 -:1012F0000000800040210801008305012190212089 -:1013000000082188000003000004400000040200DF -:1013100000020200112008880904028802040982E0 -:1013200041020900000080000000000000000000F1 -:101330000000082100000000000000000000000084 -:101340000008C10000000888000001000000000043 -:10135000000000110000000000000002C000C008F2 -:101360000008C0000400040304000800000020007E -:1013700020082009C021900008058200C00000203C -:10138000010500200000000082210000000088000C -:10139000000082000000A00000000000C000024128 -:1013A000000000000000000020080000000008000D -:1013B00000000000000008000000000021000040C4 -:1013C0000000000004000000004000004000000099 -:1013D00000000000000020000000000802100000D3 -:1013E000000000000000910080008000000000006C -:1013F0008000800080000000200000000004040045 -:101400000001040000830000000010000040000004 -:1014100000000000000000000800000000000300C1 -:1014200080100340001000000000000000000000D9 +:100E2000C0000400000004000400C0000000C02155 +:100E30008800000000000000C000C0000000C000EA +:100E400020000000000020000000C0000000200082 +:100E500000000000C0000000000220002000000090 +:100E6000200020008800000000000000200000009A +:100E700020000000000020000000200020000004EE +:100E800020042000200000000000000020000000DE +:100E90002000000000022000000000000000000010 +:100EA0000000000000000000000000000000000042 +:100EB0000000000000000000000000000000000032 +:100EC0000000000020000000000000000000000002 +:100ED0000000000000000000000000000000000012 +:100EE0000000000000000000000000000000000002 +:100EF00000000000000000000000000000000000F2 +:100F000000000000000000000000000000000000E1 +:100F100000000000000000000000000000000000D1 +:100F200000000000000000000000000000000000C1 +:100F300000000000000000000000000000000000B1 +:100F400000000000000000000000000000000000A1 +:100F50000000000000000000000000000000000091 +:100F60000004000000000000000000000000000479 +:100F7000000000000000000400000000000000006D +:100F80000000000000000000000000000000000061 +:100F90000000000000000005000000000000000844 +:100FA0000000000800080008000800080008000011 +:100FB0000000008800080008000800080008000879 +:100FC00000000008000800080008000800080000F1 +:100FD00000080000000800080008000800080000E1 +:100FE00000080008000800080008000800080008C1 +:100FF00000090008000000080008000800080008B8 +:101000000082000800080008000800080008000826 +:10101000000800040000000800080008000800089C +:1010200000000000000000000000000000000000C0 +:1010300000000000000000000000000000000000B0 +:1010400000000000000000000000000000000000A0 +:101050000000000000000000000000000000000090 +:101060000000000000000000000000000000000080 +:101070000000000000000000000000000000000070 +:101080000000000000000000000000000000000060 +:101090000000000900000000000000000000000047 +:1010A0000000000000000000000000000000000040 +:1010B00000000000000000400000000000000000F0 +:1010C0000000000000000000000000000000000020 +:1010D0000000000000000000000000000000000010 +:1010E0000000000000000000000000000000000000 +:1010F00000000000000000000000000000000000F0 +:1011000000000000000000000000000000000000DF +:1011100000000000000000000000000000000000CF +:1011200000000000000000000000000005000100B9 +:1011300001000000000000000000000000000000AE +:10114000000000000000000000000000000000009F +:101150000000000000000000000000000000A000EF +:10116000000000000000000000000000000000007F +:10117000000000000000000000000000000000006F +:10118000000000000000000000000000000000005F +:10119000000000000000000000000000000000004F +:1011A000000000000000000010000000000020000F +:1011B00020002000000000000000000000000000EF +:1011C0000000000000000000000800000000000017 +:1011D0000000000000000800000000000000000007 +:1011E00000000000000000000000000011000000EE +:1011F00000000000000000000000000000000000EF +:10120000008400900000000000A000840000008422 +:101210000090008400820000000000000000000038 +:10122000009000000000000000000000000000002E +:1012300000000000000000000000000000000000AE +:10124000000000000000000000000000000000009E +:10125000000000000000000000000000000000008E +:10126000000000000000000000000000000000413D +:10127000000000000000000000000000000000006E +:10128000000000000000000000000000000000005E +:10129000000000000000000000000000000800083E +:1012A000000000000000000000000000000000003E +:1012B000000000000000000000000000000000002E +:1012C000000000000000000000000000000000001E +:1012D000000000000000000000000000000000000E +:1012E00000000000000000000000000000000000FE +:1012F00000000000000000000000000000000000EE +:1013000000000000000000000000000000000000DD +:1013100000000000000000000000000000000000CD +:1013200000000000000000000000000000000000BD +:1013300000000000000000000000010000000000AC +:10134000008000000000000000000000000000001D +:101350000000000000000000000000000000080085 +:10136000000000000000000000000003000000007A +:1013700000000000000000000000000000000080ED +:101380000000000000000000000000000000000855 +:101390000000000000110000001100000003000028 +:1013A0000021000000000000000000000000080014 +:1013B00000000800080000000000000020000000FD +:1013C00000080010000000000000000000C0000045 +:1013D0000000000000000000000000000000000805 +:1013E0000000000000840800000000000000000071 +:1013F00000000000000000001100002000000800B4 +:10140000000405000000000000000000000000844F +:1014100000000000000000000000000000000000CC +:1014200000000000000000000000000000000000BC :1014300000000000000000000000000000000000AC -:10144000000000001000000000000000200000006C +:10144000000000000000000000000000000000009C :10145000000000000000000000000000000000008C -:101460000000000001000000A0100010000888101B -:101470000000020290200110820400000000000021 -:10148000000001002000010000000000000000003A -:101490000000000000000000000000080000000440 -:1014A000001001C002844000000041C000010001A2 -:1014B000000000000000000000000000000000002C -:1014C0000000000003008000000000080808102051 -:1014D00000080000000000000000080000000000FC -:1014E0000000110000004000000083800080110017 -:1014F00000000000858080800880800005020021B7 -:101500000200000010000000400000000000000089 -:10151000000000000000000000000000008000004B -:10152000000000801180A000900000009180000465 -:101530000909000000000000000000000000000099 -:10154000000000000000000000000000000000009B -:10155000000000000000000000000000000000800B -:101560000000000000000000000000000002809168 -:10157000009000800000802000918020000080808A -:1015800080008511800080008000801000800000B5 +:10146000000000000000000000000000000000007C +:10147000000100000000000000000000000000006B +:10148000000000000000000000000000000000005C +:10149000000000000000000000000000000000004C +:1014A000000000000000000000000000000000003C +:1014B00000000000000000000000000000004000EC +:1014C000000000000000000000000000000000001C +:1014D000000000000000000000000000000000000C +:1014E00000000000000000000000000000000000FC +:1014F00000000000000000000000000000000000EC +:1015000000000000000000000000000000000000DB +:1015100000000000000000000000000000000000CB +:1015200000000000000000000000000000000000BB +:1015300000000000000000000000000000080000A3 +:101540000008000000000000000000000000000093 +:10155000000000000000000000000000000000008B +:10156000000000000000000000000000000000007B +:10157000000000000000000000000000000000006B +:10158000000000000000000000000000000000005B :10159000000000000000000000000000000000004B -:1015A0000000000000001003400003038500090054 -:1015B0000421001180000000000000000000000075 -:1015C000000000000000000000000000000808000B -:1015D00008002000400000000000000000000000A3 -:1015E000002000000008000000000000000088014A -:1015F0001004020810040000020020400410A09013 -:101600001040024008010440100010404001848254 +:1015A000000000000000000000000000000000003B +:1015B000000000000000000000000000000000002B +:1015C000000000010000000000000000000000001A +:1015D000000000000000000000000000000000000B +:1015E00000000000000000000000000000000000FB +:1015F00000000000000000000000000000000000EB +:1016000000000000000000000000000000000000DA :1016100000000000000000000000000000000000CA -:101620000000000000000000010001000001C000F7 -:10163000010001000001C0000000000000000000E7 -:101640000000000000000000000100000001000098 -:101650000000000000010000000000000000000089 -:1016600001000000880000000000400000000000B1 -:101670000408C0A0400820A00000901008048410B6 -:101680008804000001014000010000000000040087 +:1016200000000000000000000000000000000000BA +:1016300000000000000000000000000000000000AA +:10164000000040000000000000000000000000005A +:10165000000000000000000000000000000000008A +:10166000000000000000000000000000000000007A +:10167000000000000000000000000000000000006A +:10168000000000000000000000000000000000005A :10169000000000000000000000000000000000004A -:1016A00000009100000000002000000140010884BB -:1016B00000C000000001000003C1000000000000A5 -:1016C0000000000000000000000000080009000801 -:1016D00000080002030303100305000000000000DF -:1016E00000001000000000000000000000000000EA -:1016F000000082008080800011800000880000804F -:10170000808040000810110500001103080000004F -:101710008000030000000000000000000000000046 -:101720000000000090000000000000000002801097 -:10173000004108A0000000040000918300000000A8 -:101740000000000000000000000000000000000495 -:101750000000000000000080000000000000000009 -:101760000000000000000010000000000000000069 -:10177000000000000002000980808000000080005E -:101780000084008000800082059000800303000038 -:101790000041000000000000000000000000000008 -:1017A00000000000000000000008000000000082AF -:1017B0000000000000118000040900800900000002 +:1016A000000000000000000000000000000000003A +:1016B000000000000000000000000000000000002A +:1016C00000000000000000002000000000000000FA +:1016D000000000000000000000000000000000000A +:1016E00000000000000000000000000000000000FA +:1016F00000000000000000000000000000000000EA +:1017000000000000000000000000000000000000D9 +:1017100000000000000000000000000000000000C9 +:1017200000000000000000000000000000000000B9 +:1017300000000000000000000000000000000000A9 +:101740000000000000000000000000000000000099 +:101750000000000000000000000000000000000089 +:101760000000000000000000000000000000000079 +:101770000000000000000000000000000000000069 +:101780000000000000000000000000000000000059 +:101790000000000000000000000000000000000049 +:1017A0000000000000000000000000000000000039 +:1017B0000000000000000000000000000000000029 :1017C0000000000000000000000000000000000019 -:1017D000000000000000000000020088000000007F -:1017E00000000000000000000001000000000000F8 -:1017F0000000000000008801080810100800000028 -:10180000020002021090909000C10020000200002F -:101810000000000100A00000000000000000000027 +:1017D0000000000000000000000000000000000009 +:1017E00000000000000000000000000000000000F9 +:1017F00000000000000000000000000000000000E9 +:1018000000000000000000000000000000000000D8 +:1018100000000000000000000000000000000000C8 :1018200000000000000000000000000000000000B8 -:101830008404000000A00001C00001010084010038 -:101840000000000000000000000000000000000098 -:101850000082000007000000410000E000000000DE -:1018600000000000000000000082000007000000EF -:10187000880002E000000000884100E007008800C6 -:101880000000484200E007000000484200E0070076 -:101890008400484200E00700410000000000000012 -:1018A00000000000000000000000008200000700AF -:1018B0000000410000E000000000410000E00000E6 +:1018300000000000000000000000000000000000A8 +:101840000000000000000000000000600000000038 +:101850000000000000000000000000000000000088 +:101860000000000000000000000000000000000078 +:101870000000000000000000000000000000000068 +:101880000000000000000000000000000000000058 +:101890000000410000E00000000000000000000027 +:1018A0000000000000000000000000000000000038 +:1018B0000000000000000000000000000000000028 :1018C0000000000000000000000000000000000018 :1018D0000000000000000000000000000000000008 :1018E00000000000000000000000000000000000F8 -:1018F00000000000000000000000ACACACAACF412A -:101900000C410000F5F5F5F3FAFA14BE00000000F2 +:1018F00000000000000000000000000000000000E8 +:1019000000000000000000000000000000000000D7 :1019100000000000000000000000000000000000C7 :1019200000000000000000000000000000000000B7 -:10193000000000000000FFFF000000FF0000FFFFAC -:101940000000AAAA00000000000000000000000043 +:1019300000000000000000000000000000000000A7 +:101940000000000000000000000000000000000097 :101950000000000000000000000000000000000087 :101960000000000000000000000000000000000077 -:10197000000000000000000000000000ACACAC3C27 -:10198000CF7D0C7D0000A0A0A030505014BE000000 +:101970000000000000000000000000000000000067 +:101980000000000000000000000000000000000057 :101990000000000000000000000000000000000047 :1019A0000000000000000000000000000000000037 -:1019B0000000000000000000FFFF000000FF00002A -:1019C00000000000AAAA00000000000000000000C3 +:1019B0000000000000000000000000000000000027 +:1019C0000000000000000000000000000000000017 :1019D0000000000000000000000000000000000007 -:1019E00000005755555500000000000000000000A1 -:1019F0000000000000000000000000000000555D35 -:101A0000F7FF7C2C3C3C0000CFCFD71480C1A8E965 -:101A1000000000000303F3F300000000FF3FF03F6D +:1019E00000000000000000000000000000000000F7 +:1019F00000000000000000000000000000000000E7 +:101A000000000000000000000000000000000000D6 +:101A100000000000000000000000000000000000C6 :101A200000000000000000000000000000000000B6 -:101A30005C5CFCFC00000000FF000000FFFF0000F9 -:101A400055550000FFFF00000000000000000000EE +:101A300000000000000000000000000000000000A6 +:101A40000000000000000000000000000000000096 :101A50000000000000000000000000000000000086 -:101A60000000000003000000000000000000000073 +:101A60000000000000000000000000000000000076 :101A70000000000000000000000000000000000066 -:101A800055510400FE04FF0000000C0CD71494D53F -:101A9000BCFD00000000A0AFA0AF000000000F3FA1 -:101AA000003F0000000000000000000000000000F7 -:101AB00000005C5C0C0C00000000FF000000000057 -:101AC000000055550000000000000000000000006C -:101AD000000000000000000000000061002E000D6A -:101AE00000A000610007800D200100000000000040 -:101AF000000005000A28050000A000610007800D15 -:101B0000000005610A2F850D00A0000005610A2F65 -:101B1000850D00A005610A29850100A005610A2F35 -:101B2000850D00A000000000000000000000000083 -:101B3000000000000500002800000000406380074E -:101B4000802D920240E3800180219202000000007B +:101A80000000000000000000000000000000000056 +:101A90000000000000000000000000000000000046 +:101AA0000000000000000000000000000000000036 +:101AB0000000000000000000000000000000000026 +:101AC0000000000000000000000000000000000016 +:101AD000000000610007000D000000000000000091 +:101AE00000000000000000000000000000000000F6 +:101AF00000000000000000000000000000000000E6 +:101B000000000000000000000000000000000000D5 +:101B1000000000000000000000000000006100065E +:101B2000800D000000000000000000000000000028 +:101B300000000000000000000000000000000000A5 +:101B40000000000000000000000000000000000095 :101B50000000000000000000000000000000000085 -:101B600028F800F0000000003030BA30000000001B +:101B60000000000000000000000000000000000075 :101B70000000000000000000000000000000000065 :101B80000000000000000000000000000000000055 -:101B9000000000000000D714D714F0F03C3C000017 +:101B90000000000000000000000000000000000045 :101BA0000000000000000000000000000000000035 :101BB0000000000000000000000000000000000025 -:101BC00000000E3ECEFE3C003C000000F0F00000A5 +:101BC0000000000000000000000000000000000015 :101BD0000000000000000000000000000000000005 -:101BE000000000F000F00000000030303030000055 +:101BE00000000000000000000000000000000000F5 :101BF00000000000000000000000000000000000E5 :101C000000000000000000000000000000000000D4 -:101C10000000000000000000D714D714F0F03C3C96 +:101C100000000000000000000000000000000000C4 :101C200000000000000000000000000000000000B4 :101C300000000000000000000000000000000000A4 -:101C4000000000000232C2F23C003C000000F0F054 +:101C40000000000000000000000000000000000094 :101C50000000000000000000000000000000000084 -:101C6000000000000000000014141F140000000019 +:101C60000000000000000000000000000000000074 :101C70000000000000000000000000000000000064 :101C80000000000000000000000000000000000054 -:101C9000000000000000000000005555FF00AAFFF2 -:101CA000AAFF00000000000000000000000000008B +:101C90000000000000000000000000000000000044 +:101CA0000000000000000000000000000000000034 :101CB0000000000000000000000000000000000024 -:101CC000000000000000C3000F550F000F0030306F -:101CD00030300000000000000000000000000000A4 -:101CE00000000000000000000000141414140000A4 +:101CC0000000000000000000000000000000000014 +:101CD0000000000000000000000000000000000004 +:101CE00000000000000000000000000000000000F4 :101CF00000000000000000000000000000000000E4 :101D000000000000000000000000000000000000D3 -:101D10000000000000000000000000005555FF001A -:101D20000055005500000000000000000000000009 +:101D100000000000000000000000000000000000C3 +:101D200000000000000000000000000000000000B3 :101D300000000000000000000000000000000000A3 -:101D40000000000000000000C3FF0F550F000F004F -:101D5000303030304000100000000000400000042F -:101D6000000400000000000000020000000000006D -:101D7000000021002000000000028400200040003C -:101D80000000820200050000000084000000000442 -:101D9000000420040003200000000200000088006E -:101DA000C00000000000001140008400400000005E -:101DB00000000000000000000000000004000020FF -:101DC0002005000088040004000020040400041121 -:101DD00000000000000000000000000200C0000041 -:101DE0000000000000000090000000000000400221 -:101DF00000001002040000C0000041C0002010409C -:101E00001000100200C000000000009000A00004BC -:101E10004082000000200000000000000040200080 -:101E2000009010000002008240020002410021C028 -:101E3000000200000040004041A0410000000002FC -:101E400000004000400000001002000000020040BE -:101E50000040000000000002000000000000000040 -:101E600000400040001004000000000000000000DE -:101E70000000020000082000000000000000000038 -:101E80000040004000400040000002000000A003AD -:101E90000000000000082000000000000200000018 -:101EA0000000000000000000020902000000000025 -:101EB0000000000000000008100400000000000006 -:101EC0000000000000000000000500000804000001 -:101ED0000000000000000208100000000084000064 -:101EE00000000000000000000000000000080000EA -:101EF0000000000000000001800000000000000061 -:101F000000000000000000000000000000080000C9 -:101F10000000000000080001800000000000000038 -:101F200000000004000000000000000000000008A5 -:101F3000000000000000001000018001000000000F -:101F40000000000000000000000000000010040875 -:101F50000000000000000000000180000000000000 -:101F600000000000000000000000000088000420C5 -:101F700020000000000000000200000040000000FF -:101F8000000002000000400088410000000000093D -:101F900000008802880020000041000000000003CB -:101FA0000000000000058800C00088000000040058 -:101FB00088008803900000008400900000009000DA -:101FC0002000A0000000840084208400000088001D -:101FD000A00002002000000088200009001000007E -:101FE00000A0000000000000000000000040000011 -:101FF000000004000000000011400000000000008C -:1020000000A000000000100000000000050000001B -:10201000000000002000100005001000000000007B -:102020000000008800A00404008405020084000071 -:102030000040008800000800000011A0000003001C -:1020400000000000000021000000020000A040008D -:10205000000008A000000000000000400088000010 -:1020600008008200820082000000000000000000E2 -:1020700000008440004000000000000000000088D4 -:102080000800820000008400C0000005000020005D -:102090008405840000008200820000000000828825 -:1020A000000082008200A0002000A0000800C00004 -:1020B0000800820082008200820000000400C0004C -:1020C0000880820082008200000000000000000002 -:1020D00000040000001100000000100000000003D8 -:1020E00000A0000000A000000000000000000000B0 -:1020F00000100000090011000000000000000000B6 -:10210000000300000000000000000000001000A01C -:1021100011040000000000000000000000000000AA -:102120000003000000000000000000040000200088 -:102130004000200040000000000000000088000077 -:102140000500000200000000000000000000000088 -:10215000000000000000410000001000000000002E -:1021600000000002A0000000C000C0000000C0008D -:10217000000000000000000000000000000000005F -:10218000000000000000080000000000080000003F -:1021900000000000000500000000400000000003F7 -:1021A000000000030000080500008405820008000C -:1021B00000000011C011000000021000C0008200E9 -:1021C000C02182000000080000001000C0000000D4 -:1021D000C0000400C00040000000000090000000AB -:1021E00000000000000000000000000000000000EF -:1021F0000000000000000000002000840090049017 -:10220000090800A000840000000000000000000099 -:10221000110000C00590008809000000002010C0D7 -:1022200000C000000000000000C000000900408263 -:10223000000000000088200040080500000005881C -:10224000000000000000000000020000000010007C -:102250000002400000A010001100410005880800A5 -:1022600000000000008800000000A000A00008009E -:10227000080008008200000040000000000000008C -:102280000000000000210000000000000000000825 -:10229000C000000000000000000000050005102143 -:1022A00000050010C00500090000024000000240C7 -:1022B00000008240000084030004000900050002C1 -:1022C0000000000000208400081100000000080049 -:1022D00000000800840082000000C0000000000030 -:1022E000000000000000000000C10000000000002D -:1022F00000000000000000000000000000000000DE -:10230000000000000000000000400000000000008D -:1023100000000900000400000900000000000000A7 +:101D40000000000000000000000000000000000093 +:101D50000000000002000800010000002000210037 +:101D600010004000020005004100080002002000B1 +:101D700010004000880020008800880020008802B1 +:101D80002000880020002000040020002000200007 +:101D9000200020020003200020002000200020401E +:101DA000200220002010200020042000200020001D +:101DB0002000200020002000200020002000200023 +:101DC0002004200020002000200020002004200506 +:101DD00020002000100080008000040000000000AF +:101DE0008800800080008900C000A0008000800082 +:101DF000800080008400200000000000000000003F +:101E00000000000000000000000000000000400290 +:101E100000000000090000000000000000000000B9 +:101E200000010001000000010000000000000000AF +:101E300000000000000000000000000000000000A2 +:101E40000000008400081090000000900000008452 +:101E50000000000000000000000000002100010060 +:101E60000000000000000040000000000000000032 +:101E70000000000000000000000000000000000062 +:101E80000000000000000010000000000000000042 +:101E9000020000000000200400004010040240087E +:101EA0000010000804080404004010102040100036 +:101EB0004000080802080404082000000000000098 +:101EC000000000000000000000000003000000000F +:101ED0000000000000000000200000080008880842 +:101EE000100800080008000800080084000800002E +:101EF00000080008000800080008000800080008A2 +:101F00000010000800080008000800000008000099 +:101F1000000800080008000880080000808580098B +:101F200080090001008480098009008580098009FA +:101F300080008008800980858009800900000008F1 +:101F40000008000800840008008200080084008463 +:101F500000080008000800080008800801000010C0 +:101F600000000000000001000000910000000000DF +:101F7000000000000000010000000110002100002E +:101F80000000000000000000000000000008000049 +:101F9000000000000000000000000000000000033E +:101FA00000000000000000000021000000030021EC +:101FB00000000000000000210010000000210008C7 +:101FC0000000004000400003001000050004000075 +:101FD000880090210000000500030000002110008F +:101FE00000000000030000000200000004000000E8 +:101FF000000000000000030040000000100000008E +:1020000000000000000000000800000000000000C8 +:1020100000000800000000000000000000000000B8 +:1020200000000000000000000000040000000000AC +:1020300000000000000000000000000000000000A0 +:102040000000000000000000000800000000000088 +:102050000000000000000000000000000000000080 +:10206000200000000000A0001000000000000000A0 +:10207000200000000400A000000008000000200074 +:102080000000000000000000000000000000080048 +:10209000000000000000000000000000000004003C +:1020A00000000000000000800000000000000000B0 +:1020B00000000002000000400000000000000000DE +:1020C0000000000000000000000000000000000010 +:1020D00000000000000000000000000000001000F0 +:1020E00008008000000000000000800000000000E8 +:1020F0000000800000008000000000008000080058 +:10210000800000000000000000000000000000004F +:1021100000000000000000000000000000000000BF +:10212000000000000000000000400000000000006F +:102130000000000000010000000100000000000895 +:10214000000000000000000000A0000000000000EF +:102150000008000000000000000000000000000077 +:10216000000000008200000000000000820000006B +:1021700082000820000000000000000000020000B3 +:10218000000000400000000000000000000000000F +:10219000000000000000000000000000000000003F +:1021A000000000210000A04000002000A00000006E +:1021B00090000000000800410202000800210040D9 +:1021C0000000004000040000004100410002000047 +:1021D000002100000000000000000000002100407D +:1021E00000000000000900000000000000000000E6 +:1021F00000000004000000000000000000000000DB +:1022000000000000000000000000000000000000CE +:1022100000000000000000000000000000000000BE +:1022200000000000000000000000000000000000AE +:1022300000000000000000000000000000A00000FE +:10224000000000000000000000000000000000008E +:102250000000000000000000000000080000000076 +:1022600000000000000000000000000000008400EA +:10227000840000009000200000000000000000002A +:1022800000110041000000000000000000000000FC +:10229000000000000000000000000000000000003E +:1022A0004000000300009005000000000000000056 +:1022B00000080000000000000000000000410000D5 +:1022C00000030000000000000000004100000000CA +:1022D00000050000002100000010000000000010B8 +:1022E00000000003000000000000000000000000EB +:1022F000000000000000000080000000000000005E +:1023000000000000000000000000000000000000CD +:1023100000000000000000000000000000000000BD :1023200000000000000000000000000000000000AD -:10233000000000000400080021000000000400006C -:1023400000000000040403A00000000000000000E2 +:10233000000000000000000000000000000000009D +:10234000000000000000000000000000000000008D :10235000000000000000000000000000000000007D -:102360000000000000000200410002040000000024 -:102370000000000100000000000000A00001C000FB -:102380000004C0820000C000000100000000000046 -:10239000000000000000000000000108000005002F -:1023A000008408820000000000010000000000001E -:1023B0000000000000010000000000000184010096 -:1023C00001000084C00800000000000100000000BF -:1023D00000000000000000000000000001200000DC -:1023E00001000004C0C00000000000010000000067 -:1023F00000000000002000000000000303000808A7 -:102400008500008080800000800000030000000044 -:1024100000000000000200000000001120800020E9 -:1024200010000080808000000000004100000000DB -:102430000000000000000004050000000041200032 -:1024400041401000008000800000000000410000BA -:102450000000000000000040000000000003200019 -:1024600000401000008080000000000000410000DB -:102470000000100000000000000005000000400007 -:1024800003002180000803008000000000808040DD -:10249000000003000000000000000900000004002C -:1024A0000500020000000480000000000000802001 -:1024B0000000000003000000000000000900000010 -:1024C00040008500020000030280000000000000C0 -:1024D0008020000003000000000000004000000019 -:1024E00002008500020000030900800000000000D7 -:1024F0008003000001000000000000000000000058 -:102500000000400040400000010004000000008284 -:102510008201000001000000002000000000000017 -:102520000100400021400000000290000000000077 -:10253000C00000000000010000000040000000009A -:10254000000000004000410800000102900000006F -:102550000000C000000000000000000000000000BB -:102560000000010040004108000000C0040000001D -:102570000000C0000000000000000000000000009B -:102580000001200000900000010000000000000099 -:10259000000000000000000000000000000000003B -:1025A0000001880100100000080000000000000089 -:1025B000000100000000000000000000000000001A -:1025C0000000000120010040000082000000000027 -:1025D00000000001000000000000000000000000FA -:1025E00000000001820100A00000010000000000C6 -:1025F00000000001000000000000000000000000DA -:102600000000002000050000000041000000000064 -:102610000000004100000000000000002000000059 -:1026200000000020004000800000110000000000B9 -:102630000000004100000000000000000000400019 -:10264000000000000020004000800000C1000000E9 -:102650000000000000410000000000000000000039 -:1026600000000000002080100000000003000000B7 -:1026700000000000004100000010800000C10000C8 -:10268000000000000500000000C100000040000044 -:1026900000410020000003410000800000200000F5 -:1026A0000000000009000000004180000010000050 -:1026B0000000000000002005000000008000004035 -:1026C00000000000000005000000000400100005EC -:1026D000000000000000000003100003800000C1A3 -:1026E0000000001000210500000000410040000231 -:1026F0000000000000000000200800012000004051 -:1027000000000000200082000000000540000000E2 -:102710000000000100010000018300008200002091 -:1027200000000000100002000000008340000001D3 -:10273000000000000000000000080000000082000F -:102740000040000000008400820000000082400081 -:102750000000000000000000000000090000200050 -:102760000040000000018200820000000083400160 -:10277000000100000000000000000009000000004F -:10278000000000000000000000000000811200E0D6 -:1027900007004842000000000000488200000000DE -:1027A000000000000000000000000000811200E0B6 -:1027B00007004800000000000000000000000000CA -:1027C000000000000000000000000000000088126F -:1027D00000E00700480000000000000000000000CA -:1027E0000000000000000000000000000000811256 -:1027F00000E0070048410000000000000000000069 +:102360000000000000000000000000000000C101AB +:1023700000000391010000000141C00221000100A2 +:1023800000102040010040000141C000000000009A +:10239000000000000100000000000000000100003B +:1023A00000C000000000000000000000000300006A +:1023B000C1000000C1830001000000110840C001FD +:1023C000C0010082C0900001C0000189900000009F +:1023D00000000000000000000000000000000000FD +:1023E0009000000200000000000000000000000556 +:1023F000A0030000A0034141004141858080020903 +:1024000003210080000041208021419080000000D5 +:102410000000000000004100000000000000000873 +:102420000900008000000000000000000000000023 +:102430000041C1410000C1830004001110A08000D0 +:1024400080101108008080000040801110030000FF +:10245000000000000000000000000000000000007C +:102460000008020000000000000000000000000062 +:1024700003000310008000804141104100410041F1 +:1024800010880082001008004000A14100908041A7 +:102490000000030000000080000080000000000039 +:1024A0001000820000008000800000000002004157 +:1024B00000004100084100C100001020034100005D +:1024C0000008A0C10041001110008300044100C1B8 +:1024D000800900000900000000000000000000006A +:1024E00000008200108000808000000000000000DA +:1024F000001000000101000200C000010101000104 +:10250000009102408409000101C0C1002001008344 +:10251000820100000100000000C000002000000057 +:1025200000008800108400840800400000000000C3 +:10253000000100000000010100C1000001000101D4 +:102540000000002141C1880900000100400088010D +:1025500000C1820000000000000000000000000038 +:1025600000000000080002100010820002000000BD +:102570000000000000080000A0850100000000002D +:10258000C183040000100000204100000000000092 +:10259000C101000000000000C000000000000000B9 +:1025A0000000000000C0000000000000000000006B +:1025B00000000000000000400000C1830000000097 +:1025C00000000041A00000200000C1400000000009 +:1025D00000000000000000000000000000000000FB +:1025E0000000000000000088000000000000000063 +:1025F0000000000000000000004141904100000088 +:102600000041C190800000C100030382000000006F +:102610000021C11000000000000080000000000048 +:1026200000000000000000000000000000000000AA +:10263000000000000000000000800041C183000095 +:102640000000000911C0000000410041C1C10000AC +:102650000000000411410000000000000000000024 +:10266000000000000000000000000000000000006A +:102670000000000000000000A082800080C1000077 +:102680004100004120C103C183410000808000005F +:1026900041410041808003C10000800000C1000072 +:1026A00000000000000000000041004000030000A6 +:1026B00000000000000000000000C188804180C1CF +:1026C00000000310800082410890C141008080809A +:1026D0000000094100008000088400008000009193 +:1026E000000000000000000000000041000800039E +:1026F000000000000000000000000211820004C180 +:1027000000000000820140C101C10489008804C0AA +:1027100000000001000140C001C10000400000C1F4 +:10272000000000000000000000000011880100010E +:1027300000000000000000000000000040C1200177 +:10274000824000000000020003110102401100C09D +:1027500040C000000001000040020110000008001D +:1027600000100000000000000000000000058800CC +:102770000001000000000000000000000000000058 +:10278000000048420000000000004842811200E0C2 +:10279000060048420000000000004842000000001F +:1027A000000000420000000000004800810000E03E +:1027B000000048000000000000000042000000008F +:1027C0000000000048420000000000004842811262 +:1027D00000E00600484200000000000048420000FF +:1027E0000000000000000000000000000000810068 +:1027F00000E00000480000000000000000000000B1 :1028000000000000000000000000000000000000C8 :1028100000000000000000000000000000000000B8 :1028200000000000000000000000000000000000A8 @@ -135858,208 +135858,208 @@ :1028F00000000000000000000000000000000000D8 :102900000000757B000000000000000000000000D7 :1029100000000000000000000000000000000000B7 -:10292000DEAE257B0000000000000000000000007B +:10292000DEAE747B0000000000000000000000002C :102930000000000000000000000000000000000097 -:10294000DEA40000257B0000000000000000000065 +:10294000DE2E0000757B000000000000000000008B :102950000000000000000000000000000000000077 -:102960000000DEA4257B0000000000000000000045 +:102960000000DEAE747B00000000000000000000EC :102970000000000000000000000000000000000057 -:102980000000DEA4612603400000000000000230C9 -:10299000A0000000000000000C400000000000004B -:1029A00002C064866126034000000000000002307F -:1029B000A0000000000000000C400000000000002B -:1029C00002C0648600006126034000000000000091 -:1029D0000230A0000000000000000C4000000000D9 -:1029E000000002C064866126034000000000000071 +:102980000000DE2E60DE0340000000000000023187 +:10299000E0000000000000000C400000000000000B +:1029A00002C07B06615603400000000000000231B7 +:1029B000E0000000000000000C40000000000000EB +:1029C00002C06A86000060DE0340000000000000D4 +:1029D0000231E0000000000000000C400000000098 +:1029E000000002C07B0661560340000000000000AA :1029F0000230A0000000000000000C4000000000B9 -:102A0000000002C06486000000000000000000001A -:102A100040000000000021000000100401000084BC -:102A20000003000000800000000000000000020021 -:102A3000400800000000100000002000000000110D -:102A40000000000000000003000504000400000076 -:102A50002183210300800900208088882004A0822F -:102A600040112000200000808880210020804080CC -:102A7000A000208000200020880300000003400008 -:102A800004000400040204104002000000000000E2 -:102A90000000100000000090A000000000004002B4 -:102AA000200200044002001000000000000000901E -:102AB00000020090400200404100000000040002BB -:102AC000400000A04000000000004140800089025A -:102AD000000010042000400890C0212005040501DA -:102AE00010200582C002C0000004400420A00004A1 -:102AF00000040000002000010001400040024000EE -:102B00000000C040A02080018005020000000000FD -:102B10000809000000000000000000000000004064 -:102B20008240000000000040000000400040904152 -:102B300090402000200008040004000008008200EB -:102B4000082100000000000040100000010000000B -:102B500000000810000000000000820000000800D3 -:102B6000001008024000000000104000000000803B -:102B70000040020200000000000008000000000009 -:102B80000000000900000020000083000000000099 -:102B9000000000000000008400000000008400002D -:102BA000000000080000000000000000000000001D -:102BB0000000000080008000000100010082000091 -:102BC0000084008800000000000080000000040075 -:102BD000000000008000100000080000000000005D -:102BE00080A0000189C1800000400000800000003A -:102BF00000040008000100C0008200008000000402 -:102C0000000400000000000000010000400000007F -:102C10000000000000000440000010000000000060 -:102C20000000000088008200401140008400002164 -:102C300000000000000004000000000090000021DF -:102C40000000900020000000400802008400000006 -:102C500000A1A000840840000200820001000008DA -:102C60002021A000042100C0030040000000A000BB -:102C7000002140004002002100000000911182006C -:102C800000030003000020032000000000000020DB -:102C9000110000000300030000001000000000000D -:102CA000000000000000000000000488840008000C -:102CB00000000000000005001000410000000000BE -:102CC000000002080000910005000000038200C01F -:102CD00000000020408403004100000009002000A3 -:102CE0000401C100040209020504200009200000BB -:102CF0000000400040004100030000880000040084 -:102D000000000040000000000000210000000088DA -:102D10000501000000000000004010000800000055 -:102D20000800000000001008000000110000000072 -:102D30000000000000000000000002050000C009C3 -:102D4000000000000008840000040000100082045D -:102D50000040000000001000C00004002008000532 -:102D6000820500098404C00404204000000500001E -:102D70000400850084000000000000800080040042 -:102D80000000A01000040010000400040010001057 -:102D90000000001000000000000000000000000023 -:102DA0000000000000000000000000C02100000240 -:102DB0000082000041000000008205000040080081 -:102DC000009000000800000000100001000000005A -:102DD0000000000000000000000000A08000910141 -:102DE00000880000000000010301800100C0008491 -:102DF0000000004020000000000800000004002047 -:102E00008000000000000082000000000000009030 -:102E1000000000880000000000000000000010001A -:102E2000000000000000000084000000000000001E -:102E3000080400000080000000418200040000003F -:102E4000000800000000000000000000A000820058 -:102E5000400000008400000020000020042040000A -:102E600000001020C00040804008010082004000A7 -:102E7000000000000000C00000001021A0110000B0 -:102E800000400000000000000000000008000820D2 -:102E9000002000000020008221000000000021002E -:102EA000000000000000000000000090000008008A -:102EB00003000020000021020000000000000000CC -:102EC00000104008000000000400004005A00500BC -:102ED000000000000000090000008000400100899F -:102EE0000000000091000200410408080400008472 -:102EF0001102004000200004090000000000000052 -:102F00002100088800000300000008000000000005 -:102F10000884089100000001000300000000000088 -:102F200000000800000008000000A0000080000071 -:102F3000200000000000000300000000000000006E -:102F40000000000000000000200000210000000040 -:102F50000000000010000400000000000000100845 -:102F6000000000000000821010800000002182118B -:102F7000000410200000000482A1100000210003C2 -:102F80000100840000000000000008008403080025 -:102F90008408A000000084000000418200000000BE -:102FA00002000000000000000000000000080020F7 +:102A0000000002C06A86000000000004000400000C +:102A100000000000000000000000000000000000B6 +:102A2000000000002000000000000004040000007E +:102A3000000000000000000000000000880000000E +:102A40000000000000000003000000000000200063 +:102A5000000000000000000000000008000000006E +:102A60000000000000000000000000000000000066 +:102A70000008000000000000100000000004000436 +:102A80000000000000000000000000000000000046 +:102A900000400000000000000000000000000000F6 +:102AA00000000000000000000000000000008000A6 +:102AB0000000000000000000000000000000000016 +:102AC0000000000000000000000000000000000006 +:102AD00000000000000000000000000000000000F6 +:102AE00000000000000000000000000000000000E6 +:102AF00000000000000000000000000000020000D4 +:102B000000000008000000000000000000000000BD +:102B100000000000000000000000000000000000B5 +:102B20000000000000000000000000000000840021 +:102B30000000000000000000000000000000000095 +:102B4000000000000000000900000000000000007C +:102B50000000000000000000000000000000000075 +:102B60000000000000000000000001000000000064 +:102B70000000000000000000000000040000000051 +:102B80000000000000000000000000000000000045 +:102B90000008000800000000000000080008000015 +:102BA0000008000000080000000800080000000005 +:102BB0000008000800000000000000080084001069 +:102BC00000080000000800000008000800000010D5 +:102BD00000000008000800080000000000080000D5 +:102BE000008800080008000800000088040800842D +:102BF0000082008800080010000800080002000899 +:102C0000000800080008000800080008000800008C +:102C1000000000000000840000000000000001002F +:102C200000000000000000000000000000000000A4 +:102C30000000000000000000000000000000000094 +:102C40000000000000000000000000000000000084 +:102C50000008000000000000000000000008000064 +:102C6000000000000000000000000008000000005C +:102C7000000000000008000000210021000000000A +:102C8000002100000000000000030002000000001E +:102C9000210000000000030021000000210041008D +:102CA000020000000000008400000000000000009E +:102CB000000800000000000000000000000000000C +:102CC0000000000000000008008800000000000074 +:102CD00000002000000000002100090000A000000A +:102CE00000000008008200A000820088008400002C +:102CF00000000000000000000000000000000000D4 +:102D00000008000000000088000000A00000000093 +:102D1000000000000000000000000000A000000013 +:102D20000000000000000800A000000000000000FB +:102D30000000000000000000200000000000000073 +:102D40000000000000000000000000000000000083 +:102D50000000000000000000000000000000000073 +:102D60000000000000000000000000000000000063 +:102D7000000000000000000000000800000000004B +:102D80000000000000000000000000000000000043 +:102D90000000000000000000000000000000000033 +:102DA0000000000000000000000000000000000023 +:102DB0000000000000000000000080000000000093 +:102DC0000000000000000000000000000000000003 +:102DD00000000000000000000000000000000000F3 +:102DE00000000000000000000000000000000000E3 +:102DF00000000000000000000000000000000000D3 +:102E000000000000000000000000000000000000C2 +:102E100000000000210090000000080008000000F1 +:102E200000000000000000000000000000000000A2 +:102E30000000000000000000000000000000000092 +:102E40000000000000000000000000000000000082 +:102E50000000000000000000000000000000000072 +:102E600000000000000000000000000001800000E1 +:102E70000021000000080000000000000000000029 +:102E80000000000000000000000000000000000042 +:102E900000080000000000000500050041000000DF +:102EA00008004100410000880000080800880090E8 +:102EB000000003000000000000000000000000000F +:102EC000000800000000000000000008008400006E +:102ED00000000000000000000000000000080000EA +:102EE00000000010000800002040000000880810CA +:102EF0002000008402A011000088000000000000F3 +:102F000000000000000000000000040000820088B3 +:102F10000000009000000000000082000800820015 +:102F20000000000000000000080000000000000099 +:102F30000000000000000000004000000000400011 +:102F40000000000000000000000000000000000081 +:102F50000000000000000021080000000000000048 +:102F60000000000000000000000000000000000061 +:102F70000000080000000000000000000008000839 +:102F80000000000000000000000000000000000041 +:102F900000008200000000000000000000000000AF +:102FA0000000000000000000000000000000000021 :102FB0000000000000000000000000000000000011 -:102FC0000000000000000000000000000000000001 -:102FD00000000008000000000000000000000000E9 -:102FE00000000000000000080084800400000000D1 -:102FF00000080001000100000001000400000000C2 -:1030000000002000000000000000000000A0000000 -:10301000200002100000000003000082C003000036 +:102FC00000000000000000002100000000000000E0 +:102FD00000000000000000000000000000000000F1 +:102FE00000000000000000000000000000000000E1 +:102FF00000000000000000000000000000000000D1 +:1030000000000000000000000000000000000000C0 +:1030100000000000000000000000000000000000B0 :1030200000000000000000000000000000000000A0 -:103030000101040000010000000010000000000079 -:10304000000000000000000000000100000000007F -:10305000000000000000000001000200000000006D -:10306000000100010000000000000001000000005D -:10307000080800202102908801000101C000000022 -:103080000100000008000000000000000000000037 -:10309000000000000000000000908282000290907A +:103030000000000000000000000000000000000090 +:103040000000000000000000000000000000000080 +:10305000000000000000000000000000000000016F +:103060000000000000000000000000000000000060 +:103070000000000000000000000000000000000050 +:103080000000000000000000000000000000000040 +:103090000000000000000000000000000000000030 :1030A0000000000000000000000000000000000020 -:1030B00000000311890000084040210800080005B5 -:1030C00000000000000000000000000040000000C0 -:1030D000000000000200000000000300800000006B -:1030E0000000111100080000000000000010110095 -:1030F00009000800210008000000114021030241DE -:103100000003110021001000000009000000000071 -:103110000000000000000000000008000000008027 -:10312000800000000000000000000000000000001F -:1031300000000000000000000080C00088000800BF -:1031400088000000000000000000000400000004EF +:1030B0000000000000000000000000000000000010 +:1030C0000000000000000000000000000000000000 +:1030D00000000000000000000000000000000000F0 +:1030E00000000000000000000000000000000000E0 +:1030F00000000000000000000000000000000000D0 +:1031000000000000000000000000000000000000BF +:1031100000000000000000000000000000000000AF +:10312000000000000000000000000000000000009F +:10313000000000000000000000000000000000008F +:10314000000000000000000000000000000000007F :10315000000000000000000000000000000000006F -:103160000000000080008000800000000820800037 -:10317000004000000010808000210080102003002B -:1031800040400320004000000002000000000080DA -:10319000800080000000000000000000C100828864 -:1031A0008588A00000000000000000000000000072 -:1031B00000000000000000080000000202002000E3 -:1031C00008000500000000000000000000010000F1 -:1031D00000010000000000000000000000000000EE -:1031E0000000008400000200200804000208020120 -:1031F00002008400840010018402100010C001034A -:10320000000001000021000000000001000090000B -:103210008810080090200000000000000000A000BE -:103220002005A08210400000000000000000000007 -:10323000000000000000000000000000000100008D -:10324000010001010000000000000000000000007B -:10325000020000000100000000000000000000006B -:1032600000000001000000000100010088000000D3 -:103270000000040002000100908802889040844110 -:1032800000010500000100000000400000000000F7 -:1032900000000000400000000000000000000000EE -:1032A0002108008808008282000000000000000061 -:1032B00000000000000000000010002000110004C9 -:1032C000000808080502034000000000000000009C -:1032D00000000000000020000000000000002000AE -:1032E0000008000900050220000010001000000086 -:1032F00000000000800080080300A0048009004056 -:10330000C1110008900311210508002000030010DE -:10331000080303000000800000000000000000001F -:10332000000020030000000000000000000000007A -:103330000000000000000000000000020004000087 -:10334000000000C000000080000500000000000038 -:103350000000000900000000000000020000000062 -:103360000000000000000000000000000002000952 -:103370000080000000090388000000800002008433 -:1033800000050000030909000300111000020000FD -:10339000000000000010001000000000000000000D -:1033A00000000000804080898000000500000000CF -:1033B000000000000000000000000000000000010C -:1033C0000000000000040090004000000000000029 +:10316000000000000000000000000000000000005F +:10317000000000000000000000000000000000004F +:1031800000000080000000000000000000000000BF +:10319000000000000000000000000000000000002F +:1031A000000000000000000000000000000000001F +:1031B000000000000000000000000000000000000F +:1031C00000000000000000000000004000000000BF +:1031D00000000000000000000000000000000000EF +:1031E00000000000000000000000000000000000DF +:1031F00000000000000000000000000000000000CF +:1032000000000000000400000000000000000000BA +:1032100000000000000000000000000000000000AE +:10322000000000000000000000000000000000009E +:10323000000000000000000000000000000000008E +:1032400000000000000000000000820001000000FB +:10325000000000000000000000000000000000006E +:10326000000000000000000000000000000000005E +:10327000000000000000000000000000000000004E +:10328000000000000000000000000000000000003E +:10329000000000000000000000000000000000002E +:1032A000000000000000000000000000000000001E +:1032B000000000000000000000000000000000000E +:1032C00000000000000000000000000000000300FB +:1032D00000000000000000000000000000000000EE +:1032E00000000000000000000000000000000000DE +:1032F00000000000000000000000000000000000CE +:1033000000000000000000000000000000000000BD +:1033100000000000000000000000000000000000AD +:10332000000000000000000000000000000000009D +:10333000000000000000000000000000000000008D +:10334000000000000000000000000000004000003D +:10335000000000000000000000000000000000006D +:10336000000000000000000000000000000000005D +:10337000000000000000000000000000000000004D +:103380000000000000080000000000000000000035 +:10339000000000000000000000000000000000002D +:1033A000000000000000000000000000000000001D +:1033B000000000000000000000000000000000000D +:1033C00000000000000000000000000000000000FD :1033D00000000000000000000000000000000000ED :1033E00000000000000000000000000000000000DD -:1033F0000008001000000000004000A000020000D3 -:10340000008500080000001000000000000100001E -:10341000000000000000000000200040000000004C -:10342000000000000000101002A04088080000000A -:10343000000000000000000000000000000081818A -:1034400000E0070000000000000000000000000095 -:10345000000000000000810000E00000000081008A -:1034600000E000000000000000000000000000007C -:10347000008100E007000000810000E00000000083 -:10348000818100E007000006810000E000000000EC -:10349000810000E000000000004100000700000083 -:1034A0000000000000000000000A0000070000000B +:1033F00000000000000000000000000000000000CD +:1034000000000000000000000000000000000000BC +:1034100000000000000000000000000000000000AC +:10342000000000000000000000000000000000009C +:10343000000000000000000000000000000000008C +:1034400000000000000000000000000000008421D7 +:103450000060070000000000000000000000000005 +:10346000000000000000000000000000000000005C +:10347000000000000000000000000000000000004C +:1034800000000000000000000081000007000000B4 +:10349000000000000000000000000000000000002C +:1034A000000000000000000000000000000000001C :1034B000000000000000000000000000000000000C :1034C00000000000000000000000000000000000FC :1034D00000000000000000000000000000000000EC :1034E00000000000000000000000000000000000DC :1034F00000000000000000000000000000000000CC -:103500000000000000004B004B66000000000000BF +:1035000000000000000000000000000000000000BB :1035100000000000000000000000000000000000AB -:1035200000000000000000000000FEFCF8FC0000AD -:10353000C0C000000000000000000000000000000B +:10352000000000000000000000000000000000009B +:10353000000000000000000000000000000000008B :10354000000000000000000000000000000000007B :10355000000000000000000000000000000000006B :10356000000000000000000000000000000000005B :10357000000000000000000000000000000000004B -:1035800000000000000000004B994BFF000000000D +:10358000000000000000000000000000000000003B :10359000000000000000000000000000000000002B -:1035A00000000000000000000000000080C0E0C03B -:1035B0000303C3C30000000000000000000000007F +:1035A000000000000000000000000000000000001B +:1035B000000000000000000000000000000000000B :1035C00000000000000000000000000000000000FB :1035D00000000000000000000000000000000000EB :1035E00000000000000000000000000000000000DB @@ -136069,492 +136069,492 @@ :10362000000000000000000000000000000000009A :10363000000000000000000000000000000000008A :10364000000000000000000000000000000000007A -:103650000000000C666E000000000000000000008A +:10365000000000000000000000000000000000006A :10366000000000000000000000000000000000005A -:103670000000000000000000000000000C0C082CFE -:10368000000000006F306F3F76F7000066274E0F96 +:10367000000000000000000000000000000000004A +:10368000000000000000000000000000000000003A :10369000000000000000000000000000000000002A -:1036A00000000000F9F90909000000000000000016 -:1036B000818981809090F09000000000000000005F +:1036A000000000000000000000000000000000001A +:1036B000000000000000000000000000000000000A :1036C00000000000000000000000000000000000FA -:1036D000000000000000666600000000000000001E +:1036D00000000000000000000000000000000000EA :1036E00000000000000000000000000000000000DA -:1036F0000000000000000000000000000000041CAA -:10370000003C000000006030603F46040000660F8F -:10371000660F000000000000000000000000000034 -:10372000000000000000CFC0CFC00000000000007B -:103730000000BDB9BDBF3030F00000000000000047 -:103740000000000000000000000000610A2B800D56 -:10375000000000610006000D0000000000000000F5 -:10376000000000610007800D000000610007800D6F -:10377000200000610006000D0000000005610A2A1B -:10378000050D00A000000007800C000005610A2F55 -:10379000850D00A000610007800D0000006100079A -:1037A000800D000005000A28050000A000000000B0 -:1037B0000000000005610A2E050D00A000000000B9 +:1036F00000000000000000000000000000000000CA +:1037000000000000000000000000000000000000B9 +:1037100000000000000000000000000000000000A9 +:103720000000000000000000000000000000000099 +:103730000000000000000000000000000000000089 +:103740000000000000000000000000000000001069 +:103750000000000000000000000000610026800D55 +:1037600000A00000000000000000000000000000B9 +:103770000000000000000000000000000000000049 +:103780000000000000000000000000000000000039 +:103790000000000000000020000000A00000000069 +:1037A0000000000000000000000000000000000019 +:1037B0000000000000000000000000000000000009 :1037C00000000000000000000000000000000000F9 -:1037D00000A03CBC0000000000AA00AA00000000FD +:1037D00000000000000000000000000000000000E9 :1037E00000000000000000000000000000000000D9 -:1037F00000000000000000001414CF0C00000000C6 -:103800000000000000000000FF0000FF00000000BA -:103810000000AAF0AAF0CACA000F1CFFBCFF0000FB -:10382000000070F030B00000000000000000000058 -:1038300000000000000000000000C3C3C3C300007C +:1037F00000000000000000000000000000000000C9 +:1038000000000000000000000000000000000000B8 +:1038100000000000000000000000000000000000A8 +:103820000000000000000000000000000000000098 +:103830000000000000000000000000000000000088 :103840000000000000000000000000000000000078 -:10385000000000003C3C0000000000AA30BA00005C +:103850000000000000000000000000000000000068 :103860000000000000000000000000000000000058 -:1038700000000000000000000000D7D7CF0C0000BF -:1038800000000000000000000000FF0000FF00003A -:1038900000000000003CFF3CCACAF0FF00E3004308 -:1038A00000000000200030100000000000000000B8 -:1038B000000000000000000000000000C3C3C3C3FC +:103870000000000000000000000000000000000048 +:103880000000000000000000000000000000000038 +:103890000000000000000000000000000000000028 +:1038A0000000000000000000000000000000000018 +:1038B0000000000000000000000000000000000008 :1038C00000000000000000000000000000000000F8 -:1038D000C300C3000000000014141F1400C0AAEAB3 +:1038D00000000000000000000000000000000000E8 :1038E00000000000000000000000000000000000D8 :1038F00000000000000000000000000000000000C8 -:10390000000055FF5500000000000000FF003C3C97 -:10391000000000000000000000003082F382CFC0F1 -:1039200050500000000000000000000000000000F7 -:103930000000000000000000000000000000EBEBB1 -:10394000EBE00000000000000000000000000000AC -:103950000000C300C3000000000014141414000091 -:10396000AAAA000000000000000000000000000003 +:1039000000000000000000000000000000000000B7 +:1039100000000000000000000000000000000000A7 +:103920000000000000000000000000000000000097 +:103930000000000000000000000000000000000087 +:103940000000000000000000000000000000000077 +:103950000000000000000000000000000000000067 +:103960000000000000000000000000000000000057 :103970000000000000000000000000000000000047 -:103980000000000055FF5500000000000000FF008F -:103990003C3C0000000000000000000030BEF3BE10 -:1039A000CFC05F5F000000000000000000000000CA +:103980000000000000000000000000000000000037 +:103990000000000000000000000000000000000027 +:1039A0000000000000000000000000000000000017 :1039B0000000000000000000000000000000000007 -:1039C000EB00EBE00000000000000004000000003D -:1039D00000000000000000004000A0000080000483 -:1039E0000004200400000000000002000080110319 -:1039F000008010800000840020200000840000006F -:103A0000880000000003880000000000200000047F -:103A1000200400042090200020002000A0032000AB -:103A20000100A100A0800002880002000000010047 -:103A30000100008020002000400020004000200401 -:103A4000880000800004000000000000000040002A -:103A500000000000000000020000009000001004C0 -:103A60001101009180010000000000020890210473 -:103A700020002104000400000000000041020000BA -:103A8000000000000002000040001002400011820F -:103A9000000300010001100590020002A090400008 -:103AA00000002000200241040000000000900500FA -:103AB00020002000000400000000000000020000C0 -:103AC00000030020410420910000000000000000DD -:103AD000000000000010020020A020A00484058443 -:103AE00003100310030008409000000000090800C4 -:103AF0002000000490100040820000000000000040 -:103B00000400040004400840000000000009000018 -:103B10000000000000000010001002000000000083 -:103B20002040000000040000A0400000020000004F -:103B30000200000004000808020090008200000952 -:103B400002000000000040808240000004020000EB -:103B50000000000000000000040880418041804116 -:103B6000884120002004201000C005000000000053 -:103B700000008500000100000008000000000000B7 -:103B800000008000C008800800C000000040000065 -:103B90000000000000080000000000880000008411 -:103BA00000008000000800890004001000004000B0 -:103BB00000000008000880000000000000840008E9 -:103BC0000008000040080082801000004000000053 -:103BD0000000000000000000000000000800880055 -:103BE000080000000000000000000000880800003D -:103BF000000900000021880000000000000000080B -:103C00000000880000210000004100080000C00002 -:103C10000000000020009021880000030000040044 -:103C200008000008C00000210021000900800800F1 -:103C300000080000000000412021000020200400B6 -:103C40000800000000020080202101080040000060 -:103C50000000000000000000020000000000000062 -:103C6000000000000400002000000000040000002C -:103C700000A0000000000400000004004000040058 -:103C8000000000000800050800000500000000001A -:103C9000000000000000000004004000410011008E -:103CA00080840084000040900500000400040504A6 -:103CB00000C00000110040000400800240A080010C -:103CC000212004A00000080100408000208800049A -:103CD0008400000000000000000000000000000060 -:103CE000000000000000000000000000C000000014 -:103CF00000000000004100000000000482040000F9 -:103D000010110000000000400000000000000080D2 +:1039C00000000000000000000000000000000000F7 +:1039D00000000000000000000400040000000000DF +:1039E00000000000000000000000000000000000D7 +:1039F0000000041000000000200020000000000073 +:103A000000000000000300000000000000000000B3 +:103A10000000000020080005000020002000000039 +:103A20000000000000000008000200000000000884 +:103A3000000010080000000004001003200800002F +:103A400020A00000020000000000000000000000B4 +:103A50000000000000000000000000000000000066 +:103A60000000000000000000000000000000400016 +:103A700000000000800000000000000000000000C6 +:103A80000000000000000000000000000000000036 +:103A90000000000000000000000000000000000026 +:103AA0000000000000000000000000000000000016 +:103AB0000000000010000000210080000000000451 +:103AC0001100800500000000000000000000000060 +:103AD00000000000000000400000000000000000A6 +:103AE00000000000000002100000000000000000C4 +:103AF0000000000000001040080008000010000056 +:103B0000000000100010001000000010080000006D +:103B10000000001000100010001082000000820061 +:103B20000000000000000000000000000000000095 +:103B30000000000000000000000000000020000065 +:103B4000000000000100000000A0000800080000C4 +:103B5000000000000000000000000000000000085D +:103B6000000800080000000000080008000800002D +:103B700000000004000000000000000000000084BD +:103B80000084001000000000020800000008000887 +:103B900000000000000000000000004000000000E5 +:103BA0000000000000000000000000080010008479 +:103BB0000000000800000000000000840000000376 +:103BC00000080000000804000008000500000800CC +:103BD00000000000000000000000A000C000000085 +:103BE00000000000000000000000000000000000D5 +:103BF00000000000000000000000000000000000C5 +:103C000000000000000000000000000000000000B4 +:103C1000000000050021000000000000000000007E +:103C2000020000000021000000000000000002036C +:103C3000000000000021000000080000000040001B +:103C400000210400004000000000000001080800FE +:103C50000000000000000000000000000000000064 +:103C60000000000000000000000000000000000054 +:103C70000000000000000000000000000000000044 +:103C80000000000000000000000000000000000034 +:103C9000000000000000000800000000000000001C +:103CA00000000000000800000000000000400000CC +:103CB0000000000000000000000000840000000080 +:103CC00000000000000000000000000000002000D4 +:103CD00000000000000000000000000000000800DC +:103CE0000000000000000000000000000000820052 +:103CF00000000000000000000000000000000000C4 +:103D000000000000000000000000000000000000B3 :103D100000000000000000000000000000000000A3 -:103D200088000080200000000000002100008400C6 -:103D3000000000000000000000000000080000C0BB -:103D4000000000000000000000008400000090005F -:103D50000000000000000000000000000000000063 -:103D600000C0000000000000000000000000000093 -:103D70000008008402000000000000A0000000A174 -:103D800000A0000000000000000000000000000093 -:103D9000002000000000000000A0000021000290B0 -:103DA00000000000000480000000000000A00000EF -:103DB000000010C0000000880000000000000000AB -:103DC00010040008000000000000090000000008C6 -:103DD000008800000000000000000000000000005B -:103DE0000000000000000000000408000040840003 +:103D20000000000000000000000000000000000093 +:103D30000000000010000000000000000000000073 +:103D40000000000082000800A10000000000000048 +:103D5000040000000000000000000000000000005F +:103D60000000000000000000000000000000000053 +:103D70000000000000000000000000000000000043 +:103D80000000000000000000001000000000000023 +:103D90000000000000000000000000000000000023 +:103DA0000000000000000000000000000000000013 +:103DB0000000000000000000000000000000000003 +:103DC00000000000000800000000040000000000E7 +:103DD000000080000000000000000000000008005B +:103DE00000000000080000000000000000000000CB :103DF00000000000000000000000000000000000C3 -:103E000000000000000000000000000000000400AE -:103E1000000000000000000000000000A008880072 -:103E200000000000840000200008000000000100E5 -:103E30000005000800000000000010004000000025 -:103E40000000840000000020002000110800000095 -:103E500000000800900000000000000000000000CA -:103E600000000000000000A0080002008000000028 -:103E7000400000040090000000000000000000006E -:103E8000000000000090000000000004000400009A -:103E900000002100000000000900000000A04020F8 -:103EA00004000082000000000008409041C0098228 -:103EB0002000000421000300000000002100210078 -:103EC00000000004200811000000000000000000B5 -:103ED00004000090880808020000000000000000B4 +:103E000000000000000000000000000000000000B2 +:103E100000000000000000000000000000000000A2 +:103E2000000000000000000000080000000000008A +:103E30000000000000000000000000000000000082 +:103E40000000000000080000000000000000002149 +:103E500004039021000000000000000000000008A2 +:103E6000000000000000000000000000000400004E +:103E70000000000041000000000000000000000001 +:103E80000000000000000000000000000000000032 +:103E9000008800000000000000000000000000009A +:103EA000000000000000020000000000000200000E +:103EB000000800A000080000000000000000000052 +:103EC00000000000000000000000000000000002F0 +:103ED00002000000000000000000000000000800D8 :103EE00000000000000000000000000000000000D2 -:103EF0000021000800080000000000000000000091 -:103F00000008000000000080000000000800000021 -:103F10000000000000000800000002000000000097 -:103F20000000000000000000000040000004080441 -:103F300000040005000820008800000800100000B0 -:103F40000800880000000000000000000040100091 -:103F500000000000000000000080000011000000D0 -:103F60000000000000000000000000000000000051 +:103EF00000000000000000000000000000000000C2 +:103F000000000000000000000000000000000000B1 +:103F100000000000000000000000000000000000A1 +:103F2000000000000000000300000000000000008E +:103F30000000000000000000000000000000000081 +:103F40000000000000000000080000000008000061 +:103F5000000000030000000000000000000000401E +:103F60000500000000000500000000000000000047 :103F70000000000000000000000000000000000041 -:103F80000000050000000000000400000000000028 -:103F900000000000000000C0000000000000000061 -:103FA000000000000000008200000000000000018E -:103FB0000001000100000000880000000000000077 -:103FC000000000000000008200000000110000005E -:103FD000000009000088100011001004000000001B -:103FE00000000000000000000000000000000101CF -:103FF0004000000100001000000000000000000070 -:1040000000000000000000000100000000000000AF +:103F80000000000000000000000000000000000031 +:103F90000000000000000000000000000000000021 +:103FA0000000000000000000000000000000000011 +:103FB0000000000000000000000000000000000001 +:103FC00000000000000000000000000000000000F1 +:103FD00000000000000000000000000000000000E1 +:103FE00000000000000000000000000000000000D1 +:103FF00000000000000000000000000000000000C1 +:1040000000000000000000000000000000000000B0 :1040100000000000000000000000000000000000A0 -:104020000000000000000000880001000001000006 -:10403000000001000000000000000000000000007F -:1040400000000000000091A0000820840208000089 -:1040500000000000000002000000C000000000009E -:1040600000000000000000000000000000001140FF -:10407000081091000008000000000400000000008B -:104080000000000000000000000008000000000028 +:104020000000000000000000000000000000000090 +:104030000000000000000000000000000000000080 +:10404000000000000000000000000000000010A0C0 +:1040500000900088001000A0009088100000000070 +:104060000000000000000000000000000000000050 +:104070000000000000000000000000000000000040 +:104080000000000000000000000000000000000030 :104090000000000000000000000000000000000020 -:1040A00000000000000000000005000040000008C3 -:1040B00000000000400000000000000010000000B0 -:1040C000000000000000000010800280108000004E -:1040D0000000000000000000000009009100000046 +:1040A0000000000000000000000000000000000010 +:1040B0000000000000000000000000000000000000 +:1040C00000000000000000000000000000000000F0 +:1040D00000800080000000800082008200890010C3 :1040E00000000000000000000000000000000000D0 -:1040F000400010804100C0080008000000030000DC -:10410000000000000000000000080000000800009F +:1040F00000000000000000000000000000000000C0 +:1041000000000000000000000000000000000000AF :10411000000000000000000000000000000000009F -:104120000000000000000000000005000000090081 -:1041300080000009000000020000000500000008E7 -:104140000000000000000000000000088021800343 -:1041500000800000000000000000082008000304A8 -:10416000210000000000000000000000000000002E -:104170000000884001080000C102000000000001AA +:10412000000000000000000000000000000000008F +:10413000000000000000000000000000000000007F +:10414000000000000000000000000000000000006F +:104150000000800000008080800002008202890050 +:1041600080090000000000000000000000000000C6 +:10417000000000000000000000000000000000003F :10418000000000000000000000000000000000002F -:10419000000000000000000000000000009000008F -:1041A000000200000000000000000000900000007D -:1041B000C0008200000000000000000000000000BD -:1041C00000010000000000000000000002010200E9 -:1041D000A09084A00000000000000000000001008A -:1041E00000010100000000000000000000000000CD -:1041F0000000000088000101100801010000080013 -:10420000000000000000000000000000000010009E -:10421000000001000000000000000000000000009D -:10422000100000000000000000000000000000007E -:104230000000000000000000080000000000000076 -:1042400082000000000000000000000000000208E2 -:104250001000001005100000000100000001001116 -:10426000C0092010008900000000000000000000CC -:104270000000000000001040041008802108000029 -:10428000000000000300000000000000000000002B -:10429000000000000200000000000000000011000B +:1041900000400000000000000000000000000000DF +:1041A000000000000000000000000000000000000F +:1041B00000000000000000000000000000000000FF +:1041C00000000000000000000000000000000000EF +:1041D0000000000008000200A01090000000100085 +:1041E000A00090000000000000000000000000009F +:1041F00000000000000000000000000000000000BF +:1042000000000000000000000000000000000000AE +:10421000000000000000000000000000000000009E +:10422000000000000000000000000000000000008E +:10423000000000000000000000000000000000007E +:10424000000000000000000000000000000000006E +:104250000000000000000810001010020000100212 +:1042600000100009C0110000000000000000000064 +:10427000000000000000000000000000000000003E +:10428000000000000000000000000000000000002E +:10429000000000000000000000000000000000001E :1042A000000000000000000000000000000000000E -:1042B0000005000000000009000080000000100060 -:1042C00000000000000020000000000000000000CE -:1042D0008000800800888880000300200000001013 -:1042E0000090801000050840000000000000000061 -:1042F000000000000000000010090003040008088E -:1043000000020000000000000000000000000000AB -:10431000000200000000000000000000000000009B -:10432000000200400000000000000000000000004B -:104330000000050209000000000080040000800069 -:10434000000000020000000000000000000000006B -:104350000000000400400000000000000000000019 -:10436000000000C00011000000110000000000006B -:10437000000000000000000000000100C005010472 -:10438000010100000000000000000000000000002B +:1042B00000000000000000000000000000000000FE +:1042C00000000000000000000000000000000000EE +:1042D00000000000000000008000008000000000DE +:1042E0008011001100A1809100000000000000007A +:1042F00000000000000000000000000000000000BE +:1043000000000000000000000000000000000000AD +:10431000000000000000000000000000000000009D +:10432000000000000000000000000000000000008D +:10433000000000000000000000000000000000007D +:10434000000000000000000000000000000000006D +:10435000000000000000000000000000000000005D +:1043600080002100919188000310000000000000EF +:10437000000000000000000000000000000000003D +:10438000000000000000000000000000000000002D :10439000000000000000000000000000000000001D :1043A000000000000000000000000000000000000D -:1043B0000000000000000002000200009000200049 -:1043C00010000000000000000000000000000000DD -:1043D0000000000000000888000810000000000035 -:1043E000000000000041000100000000000000008B -:1043F000000000000000000000000000818100E0DB -:1044000007000000810000E0000000000000000044 -:1044100000000000810000E000000000000000003B -:104420000000000000810000070000000000000004 -:10443000000000000000810000E00000000081009A -:1044400000E007000000810000E000000000000024 -:10445000000000000000818100E007000000000073 -:10446000000000000000810000E000004181000029 -:10447000000000000000000000000000000000FF3D -:10448000000000FF0000000000000000000000002D +:1043B00000000000000000000000000000000000FD +:1043C00000000000000000000000000000000000ED +:1043D0000000000000000000000000000000880055 +:1043E0000288100011000811098801000000000077 +:1043F00000000000000000000000000000000000BD +:1044000000000000000000000000000000000000AC +:1044100000000000000A000007000000000000008B +:10442000000000000000000000000000000000008C +:10443000000000000000000000000000000000007C +:10444000000000000000000000000000000000006C +:10445000000000000000000000000000000000213B +:10446000000007000000418200E007000082000019 +:10447000000000000000000000000000000000003C +:10448000000000000000000000000000000000002C :10449000000000000000000000000000000000001C :1044A000000000000000000000000000000000000C :1044B00000000000000000000000000000000000FC -:1044C00000F00FFF000000000000000000000000EE -:1044D0000000000000000000AAAAAAAAAAAA28AA0E -:1044E000000000000000000000000000000000408C +:1044C00000000000000000000000000000000000EC +:1044D00000000000000000000000000000000000DC +:1044E000D707D707CF45CF45FF000F00FF0FC30306 :1044F00000000000000000000000000000000000BC -:1045000000FF000000FF00000000000000000000AD +:1045000000000000000000000000000000000000AB :10451000000000000000000000000000000000009B :10452000000000000000000000000000000000008B :10453000000000000000000000000000000000007B -:10454000000000F00FFF000000000000000000006D -:10455000000000000000000000003CFF3CFFFFFFE7 -:1045600028AA000000000000000000000000000079 -:1045700000400000000000000000000000000000FB -:1045800000000000FFFF55553C3C0000000000000B +:10454000000000000000000000000000000000006B +:10455000000000000000000000000000000000005B +:104560000000D707D707CF45CF45FFFF0F0FFF0F3D +:10457000C303000000000000000000000000000075 +:10458000000000000000000000000000000000002B :10459000000000000000000000000000000000001B :1045A000000000000000000000000000000000000B :1045B00000000000000000000000000000000000FB -:1045C000FFFF3C550000000000000000000000005C -:1045D0000000000000000000000000004FCF4FCF9F -:1045E0003C3C3C3C000000000000000000000000DB -:1045F00000000000000000000000000000000000BB -:10460000000000000000000000003C3C0000000032 +:1045C00000000000000000000000000000000000EB +:1045D00000000000000000000000000000000000DB +:1045E00000000000FF00FF003CFF00C3FF00FF00D1 +:1045F0000FFF00F0000000000000000000000000BD +:1046000000000000000000000000000000000000AA :10461000000000000000000000000000000000009A :10462000000000000000000000000000000000008A :10463000000000000000000000000000000000007A -:10464000000000003C5500000000000000000000D9 -:1046500000000000000000000000000000000F0F3C -:10466000CFCFAF0FA000000000000000000000004E -:10467000000000000000000000000000000000003A -:1046800000000000000015612A29854100A8006192 -:104690000007800D00000000000000000000006125 -:1046A0000007800D00000000000000000000050071 -:1046B0000A28050000A00000000000000000000023 -:1046C000006100018001000000610007800D000012 -:1046D00000610007800D00000000000000000000E5 -:1046E0000061002F800D000000610006000D000039 -:1046F00000610007801D00000000000000000000B5 -:1047000000000000000000000000020202020000A1 +:10464000000000000000000000000000000000006A +:10465000000000000000000000000000000000005A +:10466000000000000000C000FFFFFCFF00C3A0002E +:10467000FFFFAFFF00F0000000000000000000009E +:10468000000000000000000000000000000000002A +:10469000000000000000000000000000000000001A +:1046A0000020000000A0000000000000000000004A +:1046B00000000000000000000000000000000000FA +:1046C00000000000000000000000000000000000EA +:1046D00000000000000000000000000000000000DA +:1046E00000000000000000000000002000000000AA +:1046F00000610024800900000000000000000000AC +:1047000000000000000000000000000000000000A9 :104710000000000000000000000000000000000099 :104720000000000000000000000000000000000089 :104730000000000000000000000000000000000079 -:1047400000000000FF000000C3C3000000000000E4 +:104740000000000000000000000000000000000069 :104750000000000000000000000000000000000059 -:10476000000000000000000A000A000000003030D5 -:10477000000000000000AFEFAFAF0000000000003D +:104760000000000000000000000000000000000049 +:1047700000003C3C3C3CC300FF3D0000000000004A :104780000000000000000000000000000000000029 :104790000000000000000000000000000000000019 :1047A0000000000000000000000000000000000009 :1047B00000000000000000000000000000000000F9 -:1047C000000000000000FF000000C3C30000000064 +:1047C00000000000000000000000000000000000E9 :1047D00000000000000000000000000000000000D9 :1047E00000000000000000000000000000000000C9 -:1047F0003030000000000000A020A0A00000000059 -:104800000000000000000000000000000000004167 -:104810000000000100000000000000000000000097 +:1047F000000000000030FFFFC300FF3D000000008C +:1048000000000000000000000000000000000000A8 +:104810000000000000000000000000000000000098 :104820000000000000000000000000000000000088 :104830000000000000000000000000000000000078 -:1048400000000000000000003C3C00C300C300006A +:104840000000000000000000000000000000000068 :104850000000000000000000000000000000000058 :104860000000000000000000000000000000000048 -:1048700000000000000000000000004D004D00009E +:1048700000000000000000F3F3F3CF45CF45000037 :104880000000000000000000000000000000000028 -:104890000000000000010000000000000000000017 +:104890000000000000000000000000000000000018 :1048A0000000000000000000000000000000000008 :1048B00000000000000000000000000000000000F8 -:1048C000000000000000000000003C3C00C300C3EA +:1048C00000000000000000000000000000000000E8 :1048D00000000000000000000000000000000000D8 :1048E00000000000000000000000000000000000C8 -:1048F00000000000000000000000000000FF0000B9 -:104900000000000000040000000000000000200083 -:1049100000001000000000800011000000000000F6 -:104920000080100000021000001100020000208032 -:104930000000000000000000000000000000000077 -:10494000000300044084C0040080100000C14080C7 -:104950004000040004000400891100000011000060 -:1049600000000000200088008420001102002000C8 -:10497000200020002000A000820020044000400011 -:10498000A000000000024000000000000000400005 -:104990000040008200000000000440004000400091 -:1049A00000004120000000000000414011C0400212 -:1049B00000200082200000000000000000004000F5 -:1049C00000000000000100050041200440024004F6 -:1049D000100410004090C1C08002040000000008D4 -:1049E0000000000040004008404004002090C0004B -:1049F000000200000002000020000000A185A1C00C -:104A00008000090002000400001090100000000067 -:104A100000100011000000000000021082000000E1 -:104A2000001000100000020000000909022002002E -:104A300082000900000082000000901000000000C9 -:104A40009000820200000000000000100000000042 -:104A500082000000400084000800001008100500DB -:104A60000000000000000000000000000809020033 -:104A70000040000000800200020002090200000065 -:104A8000410041000100000004000000000000009F -:104A9000000000000000401000100000008800002E -:104AA00000000004000000000000000008000009F1 -:104AB00005000000400000000008000000000000A9 -:104AC0000000000000010000400020000008000875 -:104AD000020800000000830840008008000002096E -:104AE0002000000000000000000000000008410855 -:104AF000000800850000001000000088030000107E -:104B00000000A082A000400800000000000000009B -:104B1000000000000000000004008400000000000D -:104B2000000040008400000001410000000000007F -:104B3000A0000400040000000000000000000000CD -:104B4000000088110000000000000000884184007F -:104B5000850090000000C0009080414100000000EE -:104B600040000000882100008400400090000809F7 -:104B700000001000001000210000000800000000EC -:104B800000204008400340084004000000000000EE -:104B90000000000000000000000000000400000011 -:104BA000000000C00000008400000420000000009D -:104BB0000000000080008000410004000090090017 +:1048F000000000000000000000F3F3F3CF45CF45B7 +:1049000000000000000000000000000000000000A7 +:10491000000020000004000500000000000000006E +:104920000000000000000000000000000000000087 +:104930000000200000020000000000000000000055 +:104940000001400000000000000000000000000026 +:104950000000000000000000000000000000000057 +:10496000001020000000000000000009000000000E +:104970000400000000000000000000000000000033 +:10498000840800000000000000000000000000009B +:104990000000000000000000000000000000000017 +:1049A0000000000000000000000000000000000007 +:1049B00000000000000000000000000000000000F7 +:1049C00000000000000000000000000000000000E7 +:1049D00000000000000000000000000000000000D7 +:1049E00000000000000000000000000000000000C7 +:1049F00000000000000000000000000000000002B5 +:104A00000000000000000000000000200000000086 +:104A10000040000000000000000000050000000051 +:104A20000000000000000000000000000000000086 +:104A30000010000000000000000000000000000066 +:104A40000005000000000000000000000000000061 +:104A50000000000000000000000000000000000056 +:104A60000000000000000000000000000000000046 +:104A70000000000000000000000000000000000036 +:104A8000000000090000000000000084000904008C +:104A90000000000100000000000000040000000011 +:104AA0000000000000000000000000000004000002 +:104AB00000000000000000000000000200000008EC +:104AC00000000000000800000000000000000008D6 +:104AD00000000000000000000000000000000000D6 +:104AE00000080000000000080000000000080008A6 +:104AF00000000000000000000000000000000000B6 +:104B000000080008000800A00000000001000000EC +:104B1000002100000000000000000000000800006C +:104B2000000800000000000800000000000000086D +:104B30000000000000000000000000000000000075 +:104B40000000000000000000000000000000000065 +:104B50000000000000000005000000000000000050 +:104B600000000000A00000000000000000000000A5 +:104B70000000000000000000000000000000000035 +:104B80000000000000000000000000000000040021 +:104B90000000000000000000000000000000000015 +:104BA0000000000000000000000000000000000005 +:104BB00000000000000000000000000000000000F5 :104BC00000000000000000000000000000000000E5 -:104BD00000822000000000004140000404000000AA -:104BE0000400030000000000000000840000000832 -:104BF0000300000000000000000000004100000869 -:104C00000500000880008000800000010000000016 -:104C10000000000000000000000000000000000094 -:104C2000000000040000200000000000000000055B -:104C300000000000001100200020002000000040C3 -:104C400000000000000000000000000000008400E0 -:104C50000000000008102000A0020010000000006A -:104C60000000842100001004000900000100000081 -:104C70000000000000000000C00088008400000068 -:104C80002000200000002000400000002040000024 -:104C9000000000000000000000000000000000A074 -:104CA0000040200000010000800000000000000023 -:104CB00000000000000000004001000102090000A7 -:104CC00000A000000008000000000000000000003C -:104CD00000A00000000000000000210100002100F1 -:104CE00000000000000000000000000010000400B0 +:104BD00000000000000000000000000000000000D5 +:104BE00000000000000000000008000000000000BD +:104BF00000000000000000000000000000000000B5 +:104C00000000000800A0030040880020822000204F +:104C10000000000000100010000000000000000074 +:104C20000000000000000000000000000000000084 +:104C30000000000000000000000000410000000033 +:104C40000000000000800000010000800000000063 +:104C50000000000000000000000000000000000054 +:104C60000000000000000000A000000000000000A4 +:104C700000000000000000008200000000000000B2 +:104C80000000000000000000000000000000000123 +:104C90000001000000000001000100000000000011 +:104CA0000000000000000000000000000000000004 +:104CB00000000000000000000000000000000000F4 +:104CC00000000000000000080000200000040000B8 +:104CD00000000000000000000000000000000000D4 +:104CE00000000000000000000000000000000000C4 :104CF00000000000000000000000000000000000B4 -:104D000020002000200011002088A0000200208444 -:104D10000000000000000000000000000000000093 -:104D2000000004000000000000002000000000005F -:104D30002000000000000000010000000000000052 -:104D40000000080000000000C0000000000000009B -:104D50000000008008000200080021000008000494 -:104D6000A00000000100000200000000004100203F -:104D70000000840000000400040000004000C0089F -:104D8000C00040400020020008000005010420048B -:104D900020000000000000000000000800000000EB -:104DA0000000400200080010000000008000000029 -:104DB0000000800000000000040804000000000063 -:104DC00000080000000004002000020000000000B5 -:104DD00000000000000400000000080020C00000E7 -:104DE000001108200000040009000000000000007D -:104DF000000509080088000000C000000004090048 -:104E0000000410A0000000000500000040082084FD -:104E1000800085200000000000000000000000006D -:104E20000000000000000000000000000000000082 -:104E300000000000C00000000008000000000002A8 -:104E40000000000900000000000000000000000059 -:104E5000000000000000000008000004C000200066 -:104E600000000111000400410004C0000020000007 -:104E7000000000000000002100000000000382008C -:104E8000C000000020000000C000008001000240BF -:104E900000400040020500880000000020000000E3 +:104D000000000000000000000000000000000000A3 +:104D100082118200A00000050000000000000000D9 +:104D20000000000000000021000000000000000062 +:104D30000000000000000000000000000000000073 +:104D400000000000000090000000000000000400CF +:104D50000000000000000000000000000000000053 +:104D6000000000000000000000000000000800003B +:104D70000000000000000000000000000000000033 +:104D80000000000000000000000000000000000023 +:104D90000000000000000000000000000000000013 +:104DA0000000000000000000000000000000000003 +:104DB00000000000000000000000000000000000F3 +:104DC000000000000000000000000000000000845F +:104DD0008000000000000000000000000000000053 +:104DE00000000000000000000000000000000000C3 +:104DF00000000000000000000000000000000000B3 +:104E00000000000000000000000800A000000000FA +:104E100000880084000000008209001100000000EA +:104E20000000002100000000000000000000000061 +:104E30000000000000000000000000000000000072 +:104E40000000000000000000000000000000000062 +:104E5000000000000000000000000008000000004A +:104E60000000000000000000080000030000000037 +:104E70000000000000000000000000000000000032 +:104E80000000000000000000000000000000000022 +:104E9000000000000000050000000000000000000D :104EA0000000000000000000000000000000000002 :104EB00000000000000000000000000000000000F2 -:104EC00000000000000000000000000020000000C2 -:104ED00000000000000000001000000000010000C1 -:104EE000C1000000400000010000000002000001BD -:104EF00000000308000000000000000000000000A7 -:104F0000000000000000000000000000004040041D -:104F10000284104010400202000000000000000067 -:104F20000000000000000000000000000100000080 -:104F3000000000000000000001000000010000006F -:104F4000000082008200000000000000000000005D -:104F500000000100840000000000000000000000CC -:104F6000000000000400C1000000101000840010C8 -:104F700010080100900188000000000000000000FF -:104F8000000000000000000000000888018882087E -:104F9000080411A090858890100300000000000014 -:104FA00000000000000000000000000000000400FD -:104FB00000000000000010000000110000000800C8 -:104FC0000000000040008000000000000000000021 -:104FD0000000000041000000000000002000000070 -:104FE0000900090000008900C00009000580008058 -:104FF000000080000400801002000000000000009B -:105000000000000000000000000000008000100010 -:1050100000800080400021401000001000000000CF -:105020000000000000000000000000000000000080 -:1050300000000000000000000000000080200000D0 -:105040008000800000000000000000000000000060 -:105050000000000000000000000000000000001040 -:105060000000004100000588100002030810000045 -:1050700080218021008011801000001100030000B9 -:105080000000000000000000000000000000100010 -:1050900005A090009180001121C080C08080000098 -:1050A0000000000000000000000000000000000000 -:1050B00000000000000000000000000000000200EE -:1050C00090004000080000000010000000080000F0 -:1050D00000000000000000000000000000000000D0 -:1050E00000010000000000000111000000010001AB -:1050F0000800400888090002004001400001000942 -:10510000000000000000000002000200000090000B -:10511000900084C0118208C0880089C0820810C035 -:10512000000000000000000000000000000000007F -:1051300000000000000000000000900000000000DF -:10514000000000000000000000000000200000013E -:10515000000000000000000000010001000100014B -:10516000000000009000000000000000C00184006A -:105170000000902000889090048800000101040045 +:104EC00000000000000000000800000000000000DA +:104ED00000000000000000000000000000000000D2 +:104EE00000000000000000000000000000000000C2 +:104EF00000000000000000000000000000000000B2 +:104F000000000000000000000000000000000000A1 +:104F100000000000000000008804904000820000B3 +:104F200002A000A1004000400000000000000000BE +:104F30000000000000000000000000000000000071 +:104F40000000000000000000000000000000000061 +:104F5000010000000000000000010000000000004F +:104F60000000000000000000000000000000000041 +:104F70000000000000000000000000000000000031 +:104F80000000000000000000000000000000000021 +:104F90000000000000000000000000808000008091 +:104FA0000000C0C000030005000300000000000076 +:104FB00000000000000000000000000000000000F1 +:104FC00000000000000000000000000000000000E1 +:104FD000000011002100000000000000000000009F +:104FE00000000000000000000000000000000000C1 +:104FF00000000000000000000000000000000000B1 +:1050000000000000000000000000000000000000A0 +:105010000000000000000000000000008000000010 +:10502000800080808000800380008080000000007D +:105030000000000000000000000000000000000070 +:105040000000000000000000000000000000000060 +:105050000000000000410900000300000000000003 +:105060000000000000000000000000000000000040 +:105070000000000000000000000000000000000030 +:105080000000000000000000000000000000000020 +:10509000000000000000000000000000000004000C +:1050A000400084009008020020010400909000005D +:1050B00000000000000000000000000000000000F0 +:1050C00000000000000000000000000000000000E0 +:1050D00000000000000000010100000000020000CC +:1050E00000000000000000000000000000000000C0 +:1050F00000000000000000000000000000000000B0 +:10510000000000000000000000000000000000009F +:10511000000000000000000000000000000000008F +:10512000000400400090110008A0000091900000D1 +:10513000000000000000000000000000000000006F +:10514000000000000000000000000000000000005F +:1051500000000000000000000000880000000000C7 +:10516000000000000200000000000000000000003D +:10517000000000000000000000000000000000002F :10518000000000000000000000000000000000001F -:10519000000021080008C0A1A02091020305C1A1C0 -:1051A00010110000000000000000000000000000DE -:1051B00000000000000000000300000000000000EC -:1051C0000000200000000000000008200002000392 -:1051D0000020000000000000000000080010001087 -:1051E00000400000000000000000200000038010CC -:1051F000002005114000000000800000200911106F -:10520000C1000000000000000000000000000000DD -:1052100000000000410300A0802100204188910887 -:10522000A1214090000000000000000000000000EC -:10523000000000000002000000000000000000006C -:1052400000000000000400900000000000040010B6 -:10525000000000000000000000000000000000004E -:1052600000000000000000020000000000004109F2 -:1052700008111000080800040002000000001011CE -:105280000008000000110000000000000000000005 -:1052900000800080000000808000000000100000FE -:1052A000A0008000200000000000000000000000BE -:1052B00000000000000000000000000000000000EE -:1052C00000000000000000000008000400000001D1 +:10519000000000000000000000000000000000000F +:1051A000000000800000008040000080210091800D +:1051B00000000000000000000000000000000000EF +:1051C00000000000000000000000000000000000DF +:1051D00000000000000000000000000000000000CF +:1051E00041000000000080000000000000000000FE +:1051F00000000000000000000000000000000000AF +:10520000000000000000000000000000000000009E +:10521000000000000000000000000000000000008E +:1052200000000000001180008000000080110000DC +:10523000808000000000000000000000000000006E +:10524000000000000000000000000000000000005E +:10525000000000000000000000000000000000113D +:10526000000000000000000000000000000000003E +:10527000000000000000000000000000000000002E +:10528000000000000000000000000000000000001E +:10529000000000000000000000000000000000000E +:1052A0000000000000004001200084004000400099 +:1052B0000010040240000000000000000000000098 +:1052C00000000000000000000000000000000000DE :1052D00000000000000000000000000000000000CE -:1052E00000000000000000000000000000000000BE -:1052F0000088010100000000840088218400400033 -:10530000010100000000000100000000000000009A -:1053100000000010001000008404029084908400BB -:105320008402040802028400000000000000000063 -:105330000000000000000000810000E0000000000C -:10534000000000E000000000818100E00700000094 -:1053500000810000070000000000000000000000C5 -:1053600000000000000042000000810000E000009A -:105370000000810000E00000418100810000070082 -:105380000000884100E0070000000000000000006D +:1052E00000010000000000000000000000000000BD +:1052F00000000000000000000000000000000000AE +:10530000000000000000000000000000000000009D +:10531000000000000000000000000000000000008D +:105320000000000000000000000600000600000071 +:105330000006000006000000000000000000000061 +:10534000000000000000000000000000000000005D +:10535000000000000000000000000000000000004D +:10536000000000E0070081000000000000000000D5 +:10537000000000000000000000000000000000002D +:10538000000000000000000000000000000000001D :10539000000000000000000000000000000000000D -:1053A0004842500000E000004842000000000000B9 -:1053B00000000000000000000000000000000000ED +:1053A00000000000000000000000F330FF00EF20CC +:1053B000EF2000000000DB42DB42000000000000A4 :1053C00000000000000000000000000000000000DD :1053D00000000000000000000000000000000000CD :1053E00000000000000000000000000000000000BD -:1053F0000000000000000000000000004206DB0684 -:105400008086898F0000000000000000000000007E -:105410000000000000000000000000002004100850 -:10542000A000050028000028200440020000000021 -:10543000000000000000000000000000000000006C +:1053F00000000000000000000000000000000000AD +:10540000000000000000000000000000000000009C +:10541000000000000000000000000000000000008C +:10542000000000000000000000000000F330FF005A +:10543000EF20EF2000000303DB42DB42000000000E :10544000000000000000000000000000000000005C :10545000000000000000000000000000000000004C :10546000000000000000000000000000000000003C -:105470000000000000000000000000000000429F4B -:10548000DB9FE0E6E9EF0000000000000000000004 -:1054900000000000000000000000000000004002CA -:1054A000800100A0000541000041100880010000BB +:10547000000000000000000000000000000000002C +:10548000000000000000000000000000000000001C +:10549000000000000000000000000000000000000C +:1054A00000000000000000000000000000000000FC :1054B00000000000000000000000000000000000EC :1054C00000000000000000000000000000000000DC :1054D00000000000000000000000000000000000CC @@ -136563,291 +136563,291 @@ :10550000000000000000000000000000000000009B :10551000000000000000000000000000000000008B :10552000000000000000000000000000000000007B -:10553000000000000000000000000000000000006B +:105530000F0F0F66000CF3FFFCFCFC0C0404F7F7E4 :10554000000000000000000000000000000000005B -:105550000000000018187E7E00000000000000001F +:10555000000000000000000000000000000000004B :10556000000000000000000000000000000000003B :10557000000000000000000000000000000000002B -:1055800000006467407F911091100000000000004F +:10558000000000000000000000000000000000001B :10559000000000000000000000000000000000000B -:1055A000020201020804008800440088004444000C -:1055B00000440000000000000000000000000000A7 -:1055C00000000000000000000000000000000000DB -:1055D000000000000000096F096F000000000000DB +:1055A00000000000000000000000000000000000FB +:1055B00000000F0F0F66000CF3FFFFFFFF0F340416 +:1055C000C7F700000000000000000000000000001D +:1055D00000000000000000000000000000000000CB :1055E00000000000000000000000000000000000BB :1055F00000000000000000000000000000000000AB -:1056000000000000606F606F9110911000000000BA +:10560000000000000000000000000000000000009A :10561000000000000000000000000000000000008A -:1056200000000000804010208800440088004400F2 -:10563000880000880000000000000000000000005A -:105640000000000000610007800D200000610007DD -:10565000000D00000575002F800D000005610A2E69 -:10566000050D00A000000000000000000061000621 -:10567000000D0000000000610007800D00000061C7 -:105680000007800D000085000A28050000A00561C4 -:105690000A29850100A000000000000000000000B1 -:1056A00000000000000160610006000D10000061B4 -:1056B0000007800D0800000000000000000000004E +:10562000000000000000000000000000000000007A +:105630000000000000000030000000008061003623 +:10564000000D00000000000000000000000000004D +:10565000000000000000000000000000000000004A +:1056600000000000000000000000000000600006D4 +:10567000000C00A00000000000000000000000007E +:10568000000000000000000000000000000000001A +:10569000000000000000000000000000000000000A +:1056A00000000000000000000000000000000000FA +:1056B00000000000000000000000000000000000EA :1056C00000000000000000000000000000000000DA :1056D00000000000000000000000000000000000CA -:1056E000000015B51FBF0000000000000000000012 -:1056F00000000E0F0A0B0000000000000000000078 -:1057000080B083B3AFBFAFAB00000000000000006B -:105710005555FFFF3A3A3A3A0000000000000000F9 +:1056E00000000000000000000000000000000000BA +:1056F0000000FFFF000000000000000000000000AC +:105700000000000000000000000000000000000099 +:105710000000000000000000000000000000000089 :105720000000000000000000000000000000000079 -:10573000003C003CE0EAE0FF000000000000000048 +:105730000000000000000000000000000000000069 :105740000000000000000000000000000000000059 :105750000000000000000000000000000000000049 -:105760000000000010B01ABA0000000000000000A5 -:105770000000000002000A08000000000000000015 -:1057800000008CBC8FBFA080A0A80000000000001B -:105790000000555500003A3A3A3A00000000000077 -:1057A00000000000000000000000000000000001F8 -:1057B0000000003C003C20AA202000000000000067 -:1057C00000000000000000000000000000000000D9 +:105760000000000000000000000000000000000039 +:105770000000000000000000000000000000000029 +:105780000000000000000000000000000000000019 +:105790000000000000000000000000000000000009 +:1057A00000000000000000000000000000000000F9 +:1057B00000000000000000000000000000000000E9 +:1057C0000000AAAA00C000000000000000000000C5 :1057D00000000000000000000000000000000000C9 :1057E00000000000000000000000000000000000B9 -:1057F00000000000000000000000000000000000A9 -:105800000000000000000000B4B455FF00000000DC -:105810000000000055FF55FFACACACAC0000000030 +:1057F000000000000000F0F00000000000000000C9 +:105800000000000000000000000000000000000098 +:105810000000000000000000000000000000000088 :105820000000000000000000000000000000000078 -:105830000000000082BE82BEF0F0F0F00000000028 -:105840000000000000000000000000000000000058 +:105830000000000000000000000000000000000068 +:1058400000000000AAAAFF3F0000000000000000C6 :105850000000000000000000000000000000000048 :105860000000000000000000000000000000000038 -:105870000000000000000000000000000000000028 -:1058800000000000000000000000B4B400AA000006 -:1058900000000000000055005500ACACACAC0000AE +:105870000000000000000000F0F000000000000048 +:105880000000000000000000000000000000000018 +:105890000000000000000000000000000000000008 :1058A00000000000000000000000000000000000F8 -:1058B00000000100000000000000000000000000E7 -:1058C00000000000000000040000000000042000B0 -:1058D0000000000000040091000000000000000033 -:1058E00000024000000004020403040000800500E0 -:1058F0004000C04000000000000040000400000321 -:105900004000400040004000400004000000A000B3 -:105910002000C0002000200010002000C0008800EF -:10592000400020002000100008000000A0088800AF -:105930002000400000004000200020002000200047 -:1059400000400000400200000000000000000000D5 -:105950000002000200040090000400400002000069 -:10596000410000000004004000402140009000027F -:10597000040000004000000400000000000080005F -:105980000000000000000090100000400000000235 -:10599000404080024002A100800000C08000200042 -:1059A0000000000040004000404020001040000087 -:1059B00010020802000009020000000000020000BE -:1059C0000002201020102010201008000800000005 -:1059D0001010000004000000000000000200001091 -:1059E00004100000000000000000200582042010C8 -:1059F00000908200020000008400000000000010FF -:105A0000021000000000020000000800000000007A -:105A1000000000100200850000000000830000006C -:105A2000001000400000000000100008000000000E -:105A300082000010000000000000000000000000D4 -:105A40000000020080008000800080000000000054 -:105A5000000002000002040000000000000000003E -:105A600000000000000000000000040080000001B1 -:105A7000800000044000000000000000040000005E -:105A80000000000000000000000000000000000016 -:105A9000400000000040000020000000000820003E -:105AA0000000008200000000000009000008000063 -:105AB000000000000000000000400000200800007E -:105AC00000000200000004000000000000000000D0 -:105AD0000000000000000000000000100400820030 -:105AE00004008800400000000000000000004000AA -:105AF00000004000100000000003000020001041E2 -:105B00000002000000000000000000000000A000F3 -:105B100000009040000000000000880800004000E5 -:105B20000000000088049100000000000000040054 -:105B300000004000400008000000000000000000DD -:105B400040000000200001000000000000000000F4 -:105B5000000002000000000000000000040000003F -:105B60000440000000000000110000A0040000003C -:105B7000000000840000000000040082000080009B -:105B80004082000004900900000000000000400076 -:105B900000000800110040000004408200000004E2 -:105BA0001102100000900089200000000000000099 -:105BB000040005000800400005000000000003008C -:105BC0000902110000000000400400000000000075 -:105BD00000001000000000000000000000000000B5 -:105BE0000000000000000000004000000021000054 -:105BF000000000210000000410000100101000004F -:105C00000000000000000000C08000000000002133 -:105C100000000000000008090000820900000800E0 -:105C200008001000100000000100080200008200BF -:105C300010000800820000008400000088000000BE -:105C400000008300000090008800000000000000B9 -:105C50000000000000000000000000000000000044 -:105C600000000000000041100000000000000000E3 -:105C70000000000000000000000000080400000018 -:105C800000000040000000000000002000000000B4 -:105C90000300080000880000008441001100080093 -:105CA0000082000000000004000020000001080045 -:105CB0000000400003000000000000000008000099 -:105CC0000300080040000000000000000000000089 -:105CD00000000000000000000000000000000000C4 -:105CE00000000400000000000000000000000000B0 -:105CF0000000000000410000000000000000080358 -:105D00000000000000000003000000000040000050 -:105D10001000000000000208000000000000000069 -:105D200000008800000000000040000000040004A3 -:105D300000000000000002000000880000000400D5 -:105D4000C0002000A000200000008400C00000036C -:105D50000000000000000000000000000000000043 -:105D6000000000000000000004000000000000002F -:105D700011000000000000C0000000000000000052 -:105D8000000040000000000005004020000000006E -:105D9000000040900000000021000200001008A058 -:105DA000000400840900000409000900000040000C -:105DB00000850000002000000008400000000900ED -:105DC00000004082089005040500200010A0022079 -:105DD0000508000000000000000000410041000034 -:105DE00000000000000000000000000000000000B3 -:105DF0000000000000002000000000000000000083 -:105E000000000000000300050088004100000008B9 -:105E10001000000000000000000000000000000072 -:105E20000000000000000009000040000004000025 -:105E30000000000000000000000000020000000060 -:105E4000C0000000C000040000000000400000008E -:105E50000000400000000000000000000000000002 -:105E6000000000000000000000000000008241006F -:105E70000000000000000000000000C00000000062 -:105E8000000000000000000211002004000000A03B +:1058B00000000000000000000000000000000000E8 +:1058C00000000000000000000000000000000000D8 +:1058D00000000000000000000000000020000000A8 +:1058E00000000000000000000000000000000000B8 +:1058F0000000000000000020000000002000000167 +:1059000000000000000000000000000040008800CF +:10591000000000000000000000000000000820005F +:10592000000500000000000000000000200420042A +:1059300000001000400000000000400000000000D7 +:105940000000000000000000000000000000002037 +:105950000000000000000000400000000000000007 +:105960000000000000000000000000020000000035 +:105970000000000000000000000300000000000420 +:10598000000000000000000000000008000000000F +:1059900000000000400000000000000000000000C7 +:1059A00000000000000000000000000000000002F5 +:1059B00000000000000000000000000000000002E5 +:1059C00000000000000000080000000000000000CF +:1059D00000100000100000000000000000000000A7 +:1059E0000010000000000010000000802002009065 +:1059F00000900800000000000000080008000010EF +:105A00000010000000400200000000000000000044 +:105A100000400000020002000200020002000040FC +:105A200000400040000000000000000000000000F6 +:105A30000000000000000000000000000000000066 +:105A400000000000000000820200000000080008C2 +:105A50000008000800000008000400000084008422 +:105A60000000000000000008000800000004801092 +:105A70000004000400880008000000000008000086 +:105A800000000000000000000008004000000000CE +:105A900000400000040800000008000000000008AA +:105AA00000000000000000080010000800080008C6 +:105AB0000000000000100000001000000000008442 +:105AC00000000004020000000008000000000005C3 +:105AD0000000000000210000000000000000080895 +:105AE0000000000000210000000000000000004055 +:105AF0000008000000080000000000000000000393 +:105B0000000000000000000000000000000800008D +:105B10000000000000000000000000000000000085 +:105B20000000000000000000000000000000000075 +:105B3000000000000000000004030000000000005E +:105B40000000000000000000000000000000000055 +:105B500000000000000000A000000008000000009D +:105B60000000000000000000000000000000000035 +:105B70000001000000000000000000000000000024 +:105B80000000000000000000000000000000000015 +:105B90000000000000000000000000000000000005 +:105BA00000000000000000000000000000000000F5 +:105BB00000000000000000000000000000000000E5 +:105BC00000000000000010000000000000000000C5 +:105BD00001000000000000000000000000000000C4 +:105BE00000000000000000000000000000000000B5 +:105BF0000000008001000000010000000000000023 +:105C00000000004000000000020000000000000052 +:105C10000000000000000000000000000000000084 +:105C20000000000000000000000000000000000074 +:105C30000000000000000000000000000000000064 +:105C4000000000000000000000000800400000000C +:105C50000000040000000000000000A000000000A0 +:105C60000000000000000000000000000000000034 +:105C700000000000002004000000040000000000FC +:105C80000000000000000000000000000000000014 +:105C90000000000000000000000000000000000004 +:105CA00000000000000000000000000000000000F4 +:105CB00000000000000000000000000000000000E4 +:105CC00000000000001000000000000000000105BE +:105CD00000000020000000000000000000000000A4 +:105CE00000000000000000000000000000000000B4 +:105CF0000000000000000000000000200000000084 +:105D0000000000030000000000030000000000008D +:105D10000008000000000008000000000000000073 +:105D20000000000000000000000000000000000073 +:105D30000000000000000000000000000000000063 +:105D40000000000000000000000000000000004013 +:105D50000200000800010000000000000000000038 +:105D60000000000000000000000000000000000033 +:105D70000000000000000000000000000001000022 +:105D800000000000000000C00000000000840000CF +:105D90000000000000000000000000000000000003 +:105DA00000000000000000000000000000000000F3 +:105DB00000000000000000000000000000000000E3 +:105DC00000000000000000000000000000000000D3 +:105DD0000004000000000002000900210000000093 +:105DE00000000008000000000000000000000000AB +:105DF00000000000000000000000000000000000A3 +:105E000000009000000000210000000000000000E1 +:105E10000000000000000000000200000000000080 +:105E20000000000000000000000000000000000072 +:105E30000000000000000000000000000000000062 +:105E40000000000000000000000000000000000052 +:105E50000000000000000000000000000000000042 +:105E60000000000000000000000000000000000032 +:105E70000000000000000000000000000000000022 +:105E80000000000000000000000000000000000012 :105E90000000000000000000000000000000000002 -:105EA000000000004100000000020000100000019E +:105EA00000000000000000000000000000000000F2 :105EB00000000000000000000000000000000000E2 -:105EC00000000000000000000400000000001100BD -:105ED0000000000041000000000000000000000081 +:105EC00000000000000000000000000000000000D2 +:105ED0000000000000000000900000000010000022 :105EE00000000000000000000000000000000000B2 -:105EF00000000100000000000000000000000000A1 -:105F00000000100000000000000000000000000081 +:105EF00000000000000000000000000000000000A2 +:105F00008800000000000000000000000000000009 :105F10000000000000000000000000000000000081 :105F20000000000000000000000000000000000071 -:105F30000100010009000000000000000000000056 -:105F4000000000000000000001000100400000000F -:105F500040A0200288A0A0C00000000002000000B5 +:105F30000000000000000000000000000000000061 +:105F40000000000000000000000000000000000051 +:105F500000000000000000001100800000000000B0 :105F60000000000000000000000000000000000031 -:105F7000000000000200000000000000000000001F -:105F80000000040085000000000000001100000077 +:105F70000000000000000000000000000000000021 +:105F80001100800000000000000000000000000080 :105F90000000000000000000000000000000000001 -:105FA00000000000000000000000000000001100E0 -:105FB0000000200041004000000000000000000040 -:105FC0000000000000000000000010000800800039 -:105FD00000008300A1808000000000080000004055 -:105FE00000000000000000000000000000000000B1 -:105FF0000000000800000000000000000000000099 -:10600000000000080000000900000000000000007F +:105FA00000000000000000000000000000000000F1 +:105FB00000000000000000000000000000000000E1 +:105FC00000000000000000000000000000000000D1 +:105FD0000000000000000000000000000080000041 +:105FE0000080000000000000000000000000000031 +:105FF00000000000000000000000000000000000A1 +:106000000000001000800009008000000000000077 :106010000000000000000000000000000000000080 -:106020000000000000000000000000000008000068 -:10603000001000000003000000410000000000000C -:106040000000000000000000000000002000000030 -:106050002000080041000890032088800001000013 -:10606000000100000000000000000000000000002F +:106020000000000000000000000000000000000070 +:106030000000000000000000000000000000000060 +:106040000000000000000000000000000000000050 +:106050000000000000000000000000000000002020 +:10606000000000C000000000000000000000000070 :106070000000000000000000000000000000000020 -:10608000000000000001000000000000000000000F -:1060900000000000000000000000004000000000C0 -:1060A00000000000000000000000000000000001EF +:1060800000000000880000200000008200000000E6 +:106090000000000000000000000000000000000000 +:1060A00000000000000000000000000000000000F0 :1060B00000000000000000000000000000000000E0 -:1060C0000000000000000000000000000000880048 -:1060D000200021002000040083C1904083C0000004 -:1060E00008000000010000000000000000000000A7 +:1060C00000000000000000000000000000000000D0 +:1060D00000000000000000000000000000000100BF +:1060E000028888000100000000000000000000009D :1060F00000000000000000000000000000000000A0 -:10610000000000000000000002010001000001008A +:10610000000000000000010020898800000000005D :10611000000000000000000000000000000000007F :10612000000000000000000000000000000000006F -:1061300000002000000000000000900000010000AE +:10613000000000000000000000000000000000005F :10614000000000000000000000000000000000004F -:10615000000000010001000105C00088C0C182915B -:10616000000080000000410000000000000000006E +:10615000000000000000000000000000000000003F +:1061600041008080000009000000000000000000E5 :10617000000000000000000000000000000000001F -:1061800000000000000000000000000800080409F2 -:1061900041000000000008000000000000000000B6 +:1061800000000000000000000800809100001100E5 +:1061900000000000000000002000000000000000DF :1061A00000000000000000000000000000000000EF -:1061B00000000000800000001100002000400008E6 -:1061C00005200000000000000000000000000000AA -:1061D00000000004000900210040C12000208021AF -:1061E000000800090000000000000000000000009E +:1061B00000000000000000000000000000000000DF +:1061C00000000000000000000000000000000000CF +:1061D00000000000000000000000000000000000BF +:1061E000000000110000008000000000000000001E :1061F000000000000000000000000000000000009F :10620000000000000000000000000002000000008C -:10621000000000090010000000000004000200005F +:106210000000000000000000000000050000000079 :10622000000000000000000000000000000000006E -:106230000000000000080000000000000004001141 +:10623000000000000000000000000000000000005E :10624000000000000000000000000000000000004E -:1062500000000000008000000000004000008008F6 -:10626000000000030000000000000000000000002B +:10625000000000000000000000000000000000003E +:1062600000000000000100000040000000000000ED :10627000000000000000000000000000000000001E :10628000000000000000000000000000000000000E :1062900000000000000000000000000000000000FE :1062A00000000000000000000000000000000000EE -:1062B00000000000000000000000000000000001DD -:1062C00000010000000000000000000000000000CD -:1062D00000000000000000C00090000200008200EA -:1062E00004C182884001810000E00000000A000033 +:1062B00000000000000000000000000000000000DE +:1062C00000000000000000000000000000000000CE +:1062D00000000000000000000000000000000000BE +:1062E0000000000000000000000007008221000004 :1062F000000000000000000000000000000000009E -:1063000000E000000000000000000000000081002C -:1063100000E000000000008100E007008400008130 +:10630000000000000000000000000000000000008D +:1063100002E0070000000000000000000000008113 :106320000000070000000000000000000000000066 -:106330000000000000000000000000E0000000007D -:10634000810000E00000810000000000000000006B -:1063500000000000000000000000000000006000DD -:1063600000000000000048420000000000000000A3 +:10633000000000000000000000000000000000005D +:10634000000000000000000000000000000000004D +:10635000000000000000000000000000000000003D +:10636000000000000000000000000000F0F000004D :10637000000000000000000000000000000000001D :10638000000000000000000000000000000000000D -:1063900000000000000000000000000000000000FD +:1063900000000000F0F0000000000000000000001D :1063A00000000000000000000000000000000000ED :1063B00000000000000000000000000000000000DD :1063C00000000000000000000000000000000000CD :1063D00000000000000000000000000000000000BD -:1063E0000000401080202200002200000000000079 +:1063E0000000000000000000000000000000F0F0CD :1063F000000000000000000000000000000000009D :10640000000000000000000000000000000000008C -:10641000000000000000000000000000000000007C +:10641000000000000000F0F000000000000000009C :10642000000000000000000000000000000000006C :10643000000000000000000000000000000000005C :10644000000000000000000000000000000000004C :10645000000000000000000000000000000000003C -:1064600000000000010402081100001100000000FB -:10647000000000000000000000000000000000001C +:1064600000000000000000000000000000003C3CB4 +:106470000000FFFF0000000000000000000000001E :10648000000000000000000000000000000000000C -:1064900000000000000000000000000000000000FC +:10649000000000000000000000003C3C0000000084 :1064A00000000000000000000000000000000000EC :1064B00000000000000000000000000000000000DC :1064C00000000000000000000000000000000000CC :1064D00000000000000000000000000000000000BC -:1064E0000000000000000408102004100820000034 -:1064F000000000000000000000000000000000009C +:1064E00000000000000000000000000000000000AC +:1064F0003C3C000000000000000000000000000024 :10650000000000000000000000000000000000008B -:10651000000000000000000000000000000000007B +:106510000000000000000000000000003C3C000003 :10652000000000000000000000000000000000006B :10653000000000000000000000000000000000005B :10654000000000000000000000000000000000004B :10655000000000000000000000000000000000003B -:106560000000000000000080010240800140028025 -:1065700000610007800D0000000000000000000026 -:10658000000000000000000000610007000D000096 -:10659000000000000000000000610007800D000006 -:1065A0000571002F000D000000000028000001A070 +:10656000000000000000000000000000000000002B +:1065700005002A00054000A80000000000000000FF +:10658000000000000000000000000000000000000B +:10659000000000000000000005650A06054E20A866 +:1065A00000000000000000000500002000000000C6 :1065B00000000000000000000000000000000000DB -:1065C000000000610007000D000000610007800D61 +:1065C00000000000000000000000000000000000CB :1065D00000000000000000000000000000000000BB -:1065E000000000610006000D000160610006000D62 -:1065F000100000000000000000000000000000008B +:1065E00000000000000000000000000000000000AB +:1065F000000000000000000000000000000000009B :10660000000000000000000000000000000000008A -:106610000000000000000000000000000000000F6B -:10662000F0FF00000000000000000000000000007B +:106610000000000000000000000000000000F0F09A +:10662000000000000000000000000000000000006A :10663000000000000000000000000000000000005A :10664000000000000000000000000000000000004A -:10665000FCFCF4FE00000000000000000000000050 -:1066600000000000000000000000FFFF000000002C -:10667000AAAAAAAA00000000000000000000000072 +:10665000000000000000000000000000000000003A +:10666000000000000000000000000000000000002A +:10667000000000000000000000000000000000001A :10668000000000000000000000000000000000000A :1066900000000000000000000000000000000000FA -:1066A0000A0AFAFA000000000000000000000000E2 +:1066A000F0F000000000000000000000000000000A :1066B00000000000000000000000000000000000DA :1066C00000000000000000000000000000000000CA -:1066D0000000C0C0E040000000000000000000001A -:1066E000000000000000000000000000FFBF0000EC -:1066F0000000AAA8AAAA00000000000000000000F4 +:1066D00000000000000000000000000000000000BA +:1066E00000000000000000000000000000000000AA +:1066F000000000000000000000000000000000009A :106700000000000000000000000000000000000089 :106710000000000000000000000000000000000079 :106720000000000000000000000000000000000069 @@ -136855,202 +136855,202 @@ :106740000000000000000000000000000000000049 :106750000000000000000000000000000000000039 :106760000000000000000000000000000000000029 -:1067700000000000400000000000000000000000D9 +:106770000000000000000000000000000000000019 :106780000000000000000000000000000000000009 :1067900000000000000000000000000000000000F9 :1067A00000000000000000000000000000000000E9 :1067B00000000000000000000000000000000000D9 :1067C00000000000000000000000000000000000C9 :1067D00000000000000000000000000000000000B9 -:1067E0000000000000000000000000000000004168 -:1067F0000000000000004000000020000000000039 -:106800000000000000000000000020000000000464 -:1068100020002080200010002000040084000000E0 -:10682000000000000000C004000005000400040097 -:1068300020000400040004002100000320000000E8 -:106840008800000805000000840004000580008323 -:1068500041802100200020002040A0000000000016 -:1068600084000200100001002100C0002000C000D0 -:10687000000004002000200084000000400200000E -:106880000000000240024000100000000000000272 -:10689000000000020002110240020000000000009F -:1068A000000200C00040000040020002A000C10041 -:1068B000800009A0C000C000A00004000000090082 -:1068C0000002004000008400000240028000040436 -:1068D0004020040404404100414000004100000009 -:1068E0000000000000000000040020000000000084 -:1068F0001002000000401100000000000500000030 -:106900000000000002100000000004100010000051 -:106910009000000082100000000000000000000055 -:1069200000000200021002000200000090000000BF -:10693000A04008000000000000000000004000002F -:106940000000900000100010000000000000000097 -:10695000900000400010401004400400002000207F -:1069600000000000001000000000000000210000F6 -:1069700000000000000000100000000000000010F7 -:1069800000000000000000080000000000000000FF -:1069900000002002000000000900000000000000CC -:1069A000000000000000008800000004000000005B -:1069B00000000000000000000000000000000000D7 -:1069C000000000080000000000000000000020C0DF -:1069D0000200000000000001820884008010000115 -:1069E00004010408000800000488040000004100BD -:1069F0000900000000040000000800000000000082 -:106A0000030000000000000000000000000800007B -:106A100000050400000000000000000090000000DD -:106A200000000000000000000000000088000000DE -:106A30004000000000000000000000000000000016 -:106A400000000000000000210000000000000141E3 -:106A50000000880084008308C00088000400000053 -:106A60009000400040000000000000000000100006 -:106A7000000090001008A0081008C0000580050064 -:106A8000028008000000000000000000000000007C -:106A900000000000000000000000000009000000ED +:1067E00000000000000000000000000000000000A9 +:1067F0000000000000000000000088000000000011 +:106800000000000000000000000000000000000088 +:106810000000000000000000000000000000000276 +:106820000000000000000000000000000000000068 +:106830000020000000000000000000010000000037 +:106840000000000000000000000000000000000048 +:106850000000000000000000000010000000000028 +:1068600000000000000000000000400040000000A8 +:1068700000000000000000000000200000000000F8 +:106880000000000000000000000000000000000008 +:1068900000000000000000000000000000000000F8 +:1068A00000000000000000000000000010000000D8 +:1068B00000000001000000000000000000000000D7 +:1068C00000000000000000000000000000000000C8 +:1068D00000000000000000000000000000000000B8 +:1068E00000000000000000000000000000020000A6 +:1068F0000002000000000000000000000000000096 +:106900000000000000000400040000050400000076 +:106910000000000000000000000000100000000067 +:1069200000000000000000000000001000800000D7 +:106930000000000000000100010001000100000053 +:106940000000000000000000000000000000000047 +:106950000000000000000000000000000000000037 +:106960000000000000000000000000000010000017 +:10697000000800000000000000000000000000000F +:106980000000000400040010800080000004800467 +:106990000000008200080000040000040000000065 +:1069A00000000000000400000004000800000010C7 +:1069B00000000000000400002000209020082000BB +:1069C00000000000000000000000000000080000BF +:1069D00000000000000000000000000000080008A7 +:1069E000000800000000000000000000000400009B +:1069F000000000000000000000000000001000087F +:106A00000008000000000000000000081010000056 +:106A1000000800000000000000000000000800085E +:106A20000000000000000000000000000000000066 +:106A30000000000000000000000000000000000056 +:106A4000000800000000000000000000000000003E +:106A50000000000000000000000000000000000036 +:106A60000000000000000000000000000000000026 +:106A7000000000000000000000080000000000000E +:106A80000200000000840000000000000000000977 +:106A900000A0000000000000000000000000000056 :106AA00000000000000000000000000000000000E6 -:106AB0000200000040000088000000000000000804 -:106AC00000000000000000000008000000000000BE -:106AD0000400000000002000200011000900000058 -:106AE0000090000000901000000008081000210035 -:106AF00041000300080020001100210010000440A4 -:106B00000400112000A000000000000000000800A8 -:106B10000000000000000000000000000000001065 -:106B2000000000000000C000000400000400A000FD -:106B300000040040001010000004844004400000E5 -:106B40000800000000200000A000C00000008240FB -:106B5000000082000400000083000800080082009A -:106B6000A00082048200084082201000080000007B -:106B70000000010000002040A00000000000000014 -:106B80001010000000008240000000000000000023 -:106B900000000000000000000000040000000040B1 -:106BA0000000000000002100009040000000800074 -:106BB00010000000000000000800000000848000B9 -:106BC000000000A000900000000000004100000054 -:106BD0002000000005009100100004C0000000002B -:106BE000000040000000000000000800000000005D -:106BF00000000000200000008000110000000000E4 -:106C00000000000000000000000000000000000084 -:106C100000000000000000000000A00000000000D4 -:106C200008000080080000000000000000000000D4 -:106C30000000200000000000000000000000000034 -:106C400000000000002004000041000000002000BF -:106C50000000200000000000C00088000800004084 -:106C6000002000800000000000110004000000006F -:106C70001000000009000000000000008200000079 -:106C80000800A000000005800880008000000000CF -:106C900000000000000000000000000000000000F4 -:106CA000000000000020400000000000000800007C -:106CB0000000000000000000000800840000000048 -:106CC00000000000000000000400000000000500BB -:106CD0000000000000000002002000000000100082 -:106CE000000020010004050009000000020400006B -:106CF00000000000000004902000000000000020C0 -:106D00000300100410000590820241400040004042 -:106D1000000000000000080000000000000000006B -:106D20000000000002400000000000000000080019 -:106D300000000000000084000000000000000000CF -:106D400000000000010808020020001100000000FF -:106D500000000000000000008400000000000000AF -:106D60000880000000000184000000100000000006 -:106D700010218221822182082000C000040004002A -:106D80000000000082000000040000000000040079 -:106D900000000000000000000000000000000000F3 -:106DA0000000000000000000038800000000210037 -:106DB000000040000000000000040000200000046B -:106DC0000000000000000820080000000000100083 -:106DD00000000300080000000000410020022082A3 -:106DE00000841004002008000411000000000000CE -:106DF0004100000000000000000080000000800052 -:106E0000800000000000000008008000000000007A -:106E100080000000000000000000000000000000F2 -:106E20000000000000000000000000010000000061 +:106AB000000000A002000000000000000000000034 +:106AC00000000000000000000000000000000000C6 +:106AD00000000000000000000000000000000000B6 +:106AE00000000000000000000000000000000000A6 +:106AF0000000000000000000000000000000000096 +:106B000000004100000000000800000000004000FC +:106B10000000008000000000C000000000008200B3 +:106B20000000000000000000000000000000000065 +:106B30000000000000000000000000000000000055 +:106B40000000000000000000000000000000000045 +:106B50000000000000000000000000000000000035 +:106B60000000000000000000000000000000000025 +:106B70000000000000000000000010000000000005 +:106B800000000000000000000000000000080000FD +:106B900000040000002000000000000000000000D1 +:106BA00000000000000000001000000000000000D5 +:106BB0000000000000000000000041000000000094 +:106BC00000000008000000000000000000000000BD +:106BD00000000000000000000000100000000000A5 +:106BE000000000000000000000000000000000A005 +:106BF000000000000000000000C0000000000000D5 +:106C00000000000000000000000082000000820080 +:106C100000410000C000820082000000000000006F +:106C2000000000002000000000000800000000003C +:106C3000000000000000A0000000000000000000B4 +:106C40000000000000000000000000000000000044 +:106C50000000000000000000000000000000000034 +:106C60000000000000000000000000000000000024 +:106C70000000000000000000000000000000000014 +:106C800000001000000000000000000000000000F4 +:106C90000000008400000000000000000000000070 +:106CA00000000000000000000000000000C0000024 +:106CB00000000000000000840000008400000000CC +:106CC00000000000000000000000000000000000C4 +:106CD00000000000000000000000000000000000B4 +:106CE00000000000000000000000000000000000A4 +:106CF0000000000000000000000000000000000094 +:106D0000000000000000000400000000000000007F +:106D10000000A002000200200000000000020000AD +:106D20000000000000100000000000000000000053 +:106D300082000200000000000000000000000000CF +:106D4000000200000002000000000000000000003F +:106D50000000000000000000000000000000000033 +:106D60000000000000000000000000000000000023 +:106D70000000000000000000000000000000000013 +:106D80000000000000000000000000000000000003 +:106D900003042000000000002000000000000000AC +:106DA00000000000000000010000000000000000E2 +:106DB0004100000000000000000000000000000092 +:106DC00000000000000000000000000000000000C3 +:106DD00000000000000000000000000000000000B3 +:106DE00000000000000000000000000000000000A3 +:106DF0000000000000000000000000000000000093 +:106E00000000000000000000000000000000000082 +:106E10000000000000000000000010A00002004080 +:106E20000002000000000000000000000000000060 :106E30000000000000000000000000000000000052 -:106E400000000808901000C0824000000000000010 +:106E40000000000000000000000000000000000042 :106E50000000000000000000000000000000000032 -:106E600000000000100090009100C0000000000031 +:106E60000000000000000000000000000000000022 :106E70000000000000000000000000000000000012 -:106E8000000000000000000000000000010000827F -:106E900000010001000000000000000000000000F0 -:106EA00000000000000000000000000000200010B2 -:106EB00000030003000000000000000000000000CC -:106EC0000000000020008080090080000000000019 -:106ED00000000000000000000000000000000000B2 -:106EE000000000000000800083008400800000009B +:106E80000000000000000000000000000000000002 +:106E900000000000000000000000000000800080F2 +:106EA0000000008000000000000000000000000062 +:106EB00000000000000000000000000000000000D2 +:106EC00000000000000000000000000000000000C2 +:106ED00008000000000000000000000000000000AA +:106EE00000000000000000000000000000000000A2 :106EF0000000000000000000000000000000000092 -:106F00000000100000000000000000000000101051 -:106F10000021002000200000000000000000000010 -:106F20000000000000000000000000000000000061 +:106F00000000000000000000000000000000000081 +:106F10000000000000000000000000000000000071 +:106F200080048000000080008000800000000000DD :106F30000000000000000000000000000000000051 -:106F4000000000000000802000C0800080000000E1 -:106F50000000000000000000000000000000000031 -:106F6000000000800010000000058000002080006C -:106F70000000008000000080000000000000000011 -:106F800000400000000500000000000000000000BC -:106F900000808000800580110000000000000000DB -:106FA00000000000000000000000000000000000E1 -:106FB00000000000000000000000000000000020B1 -:106FC0000000000000000000A0000821A0A002882E -:106FD0000000002000000020000000000000000071 -:106FE00000000000004000010020100010401000D0 -:106FF00082C000000008000000080000000000003F -:1070000000000000004000000082000000000000BE -:107010000000204002882000C0090000000000009D -:107020000000000000000000000000000000000060 -:10703000000000000000010000000000000000004F -:107040000000000000000000000008400088104020 -:107050000588000000002000000000000000000083 -:1070600000000000000000000800000000204002B6 -:107070002082011000000000080000000000000055 -:107080000000000001000400820000000000000079 -:1070900000000000000001001120010000000000BD -:1070A00000000000000000000000000000000000E0 -:1070B000000000000800210005000500000000009D -:1070C000000000000000000000000000850000003B -:1070D0008080090020000000000000000000000087 -:1070E0000000000000000800000000000000052073 -:1070F0000083000802C009000000800000000000BA -:1071000000000000000002008000000005000000F8 -:1071100000000000000010004100050021000000F8 -:10712000000000000000000000000000000000005F -:1071300000000000000000080040000000000040C7 -:107140000021000000000000000000000000000816 -:10715000800200800000000000020000000000002B -:10716000000000000000000000000004000000001B -:10717000000400890000000000040004000000007A -:1071800000000000000000000000001000000000EF -:1071900000000000000000002100039090000300A8 -:1071A00000000000000000000000000000000000DF -:1071B00000000000000000000001000100000000CD -:1071C00000010000000000000000000000000000BE -:1071D000A00108882084400000000000000000009A +:106F40000000000000000000000000000000002021 +:106F50000000002000000000000000000000000011 +:106F60000000000000000000000000000000000021 +:106F70000000000000000000000000000000000011 +:106F80000000000000000000000000000000000001 +:106F900000000000000000000000000000000000F1 +:106FA00082000241A040880802000200020088001E +:106FB00000000000000000000000000000000000D1 +:106FC00040008800000084000000000000000088ED +:106FD00000000000000000000000000000000000B1 +:106FE00000000000000000000000000000000000A1 +:106FF0000000000000000000000000000000000091 +:107000000000000000000000000000000000000080 +:107010000000000000000000000000000000000070 +:107020000000822000000402404000000000000038 +:107030000000000000000000000000000000000050 +:107040000000000000000000000000000000000040 +:107050000000000020000000000000000000000010 +:107060000000000000000000000000000000000020 +:107070000000000000000000000000000000000010 +:107080000000000000000000000000000000000000 +:1070900000000000000000000000000000000000F0 +:1070A00000000000400000008080000000000000A0 +:1070B00000000000000000000000000000000000D0 +:1070C00000000000000000000000000000000000C0 +:1070D0000000000000000000000020000000000090 +:1070E00000000000000000000000000000000000A0 +:1070F0000000000000000000000000000000000090 +:10710000000000000000000000000000000000007F +:10711000000000000000000000000000000000006F +:10712000000000000000000080028000800000409D +:1071300000000080000000000000000000000000CF +:10714000000000000000000000800080000000003F +:107150000000000000000008000000000000000027 +:10716000000000000000000000000000000000001F +:10717000000000000000000000000000000000000F +:1071800000000000000000000000000000000000FF +:1071900000000000000000000000000000000000EF +:1071A000000000000000000082008840024008004B +:1071B0000000008800400000000000000000000007 +:1071C00000000000000000000000000400020000B9 +:1071D00000000000000000000000000000000000AF :1071E000000000000000000000000000000000009F -:1071F000000000000090009000000001000100006D +:1071F000000000000000000000000000000000008F :10720000000000000000000000000000000000007E -:1072100000000000000000000000010000890320C1 -:10722000000000000000000000000000000000005E -:107230000000000000000000000000000000070047 -:107240000000000000000700000000000000000037 -:107250000000000000E00700000000000000070040 +:10721000000000000000000000000000000000006E +:1072200000000000000000000000008200000700D5 +:10723000000000000000000000000000000000004E +:10724000000000000000000000000000000000003E +:1072500000000006000007000000810000E00000C0 :10726000000000000000000000000000000000001E -:1072700007000000818100E00700000A0081000093 -:10728000070000000000000000000000000000E017 -:1072900007000000000000000000000000000000E7 -:1072A0000700410000000000000000000000000096 -:1072B00000000000000000000000000000000000CE +:10727000000000000000000000000000000000000E +:1072800000000000000000000000000000000000FE +:1072900000000000000000000000000000000000EE +:1072A00000000000000000000000000000FF003FA0 +:1072B00066663C00000000000000000000000000C6 :1072C00000000000000000000000000000000000BE -:1072D0000000000009C0F9C00107919700000000FC +:1072D00000000000000000000000000000000000AE :1072E000000000000000000000000000000000009E -:1072F00000000000000000000000FEF2CEC200000E +:1072F000000000000000000000000000000000008E :10730000000000000000000000000000000000007D :10731000000000000000000000000000000000006D -:10732000F0F00000FF00000000000000000000007E -:10733000000000000000000000000000000000004D +:10732000000000000000000000000000000000FF5E +:10733000002F66663C000000000000000000000016 :10734000000000000000000000000000000000003D -:1073500000000000000009CFF9CF6167F1F70000DD +:10735000000000000000000000000000000000002D :10736000000000000000000000000000000000001D -:107370000000000000000000000000003E320E028D +:10737000000000000000000000000000000000000D :1073800000000000000000000000000000000000FD :1073900000000000000000000000000000000000ED -:1073A0000000F0F00000FF000000000000000000FE +:1073A00000000000000000000000000000000000DD :1073B00000000000000000000000000000000000CD :1073C00000000000000000000000000000000000BD :1073D00000000000000000000000000000000000AD @@ -137059,36 +137059,36 @@ :10740000000000000000000000000000000000007C :10741000000000000000000000000000000000006C :10742000000000000000000000000000000000005C -:10743000000000000000000000000000000000004C -:10744000000000000000000000000000000000003C -:1074500000000000000000000000C0C0F9090D0D90 -:10746000000F00000000000000000000000000000D +:107430000000FFFF82000030013100000000F33146 +:10744000F03100000000000000000000000000001B +:107450000000000000008D8DCFCF00000000000074 +:10746000000000000000000000000000000000001C :10747000000000000000000000000000000000000C -:10748000BD9F81900000000000000000000000008F +:1074800000000000000000000000000000000000FC :1074900000000000000000000000000000000000EC -:1074A0000000000000FF00000F0F000000000000BF -:1074B00000000000000000000000000000000000CC -:1074C00000000000000000000000000000000000BC -:1074D000000000000000000000000000CFCFF9090C -:1074E0000404000F00000000000000000000000085 +:1074A00000000000000000000000000000000000DC +:1074B00000000000FFFF004200300030000000002C +:1074C000FF3DFC3D00000000000000000000000047 +:1074D00000000000000000000C0C0C0C000000007C +:1074E000000000000000000000000000000000009C :1074F000000000000000000000000000000000008C -:107500000000BDBD818100000000000000000000FF +:10750000000000000000000000000000000000007B :10751000000000000000000000000000000000006B -:1075200000000000000000FF00000F0F81000000BD -:10753000000000000000000000000000000000004B -:107540000000000000000561000E000D00000000BA -:107550000008000000A0000000000000000005611D -:107560004A0F050D00A005000A08050000A0000054 -:10757000000000000000000005000A08050000A04F -:1075800005610A2F850D00A005000A28050000A04E -:10759000000000000000000005610A0F050D00A0BA -:1075A000000000000000000015612A0E054D00A833 +:10752000000000000000000000000000000000005B +:1075300000000000000005000A28050000A100006E +:10754000000000000000000000000000000000003B +:10755000000000000000000000000000000000002B +:107560000020000000A000610007800D0000000066 +:10757000000000000000000000000000000000000B +:1075800000000000000000000000000000000000FB +:1075900000000000000000000000000000000000EB +:1075A00000000000000000000000000000000000DB :1075B00000000000000000000000000000000000CB :1075C00000000000000000000000000000000000BB :1075D00000000000000000000000000000000000AB :1075E000000000000000000000000000000000009B :1075F000000000000000000000000000000000008B -:107600000000000000000ECE3EFE00000000000062 +:10760000000000000000000000000000000000007A :10761000000000000000000000000000000000006A :10762000000000000000000000000000000000005A :10763000000000000000000000000000000000004A @@ -137096,456 +137096,456 @@ :10765000000000000000000000000000000000002A :10766000000000000000000000000000000000001A :10767000000000000000000000000000000000000A -:10768000000000000000000002C232F20000000012 +:1076800000000000000000000000000000000000FA :1076900000000000000000000000000000000000EA -:1076A000000000000000000000000000008000005A +:1076A00000000000000000000000000000000000DA :1076B00000000000000000000000000000000000CA -:1076C000000000000000000000000000FF01FF00BB +:1076C00000000000000000000000000000000000BA :1076D00000000000000000000000000000000000AA :1076E000000000000000000000000000000000009A :1076F000000000000000000000000000000000008A :107700000000000000000000000000000000000079 :107710000000000000000000000000000000000069 :107720000000000000000000000000000000000059 -:107730000040000000000000000000000000000009 -:107740000000000000000000000000000000010137 +:107730000000000000000000000000000000000049 +:107740000000000000000000000000000000000039 :107750000000000000000000000000000000000029 :107760000000000000000000000000000000000019 :107770000000000000000000000000000000000009 :1077800000000000000000000000000000000000F9 :1077900000000000000000000000000000000000E9 :1077A00000000000000000000000000000000000D9 -:1077B0000000000000000000880088000000200891 -:1077C0000000400010001000100000002000208089 -:1077D00000404100010020048900200089402088E9 -:1077E0000491200001800400200001000104898030 -:1077F000A000C000880020800003040000002000DA -:10780000100288802000408020882100A1004020B4 -:1078100089038800040820002000200020002000A8 -:1078200020800405200010000080000020000020BF -:107830001082200020002000000200000002000052 -:107840000000000000004000000000020000219045 -:10785000000440900200084041002000A0004020A9 -:107860009002900400400404890289002000200056 -:10787000200205022000000009020000418220844D -:10788000000009A1202000000020002004040404BE -:107890002101040040000000210200008004840057 -:1078A00080009002000021000000000220C005209E -:1078B0000482000240900000000000400000000030 -:1078C000040000200000000010100210020002005E -:1078D000004000409000080000100210020000006C -:1078E00000000200400000040010001002008200AE -:1078F000900000050200020000400210000000009D -:107900008300000000000004000000900010001040 -:107910004080009002000000000000000210000003 -:1079200000002000000000040200004000400202AD -:107930000200000000100000000000000010040021 -:107940000000000000000000000000000400000033 -:1079500000004000000000040000000004000000DF -:10796000000000004004800000010008000000004A -:107970000000000000000000000000000000000007 -:107980004100400000000004040100000004000069 -:107990000201800400100800000000000000000048 -:1079A000000000000000000000000000000400844F -:1079B00000000000000000080000000809000000AE -:1079C0000000000000000000000000000000004176 -:1079D000000000000000000088009000000004008B -:1079E000000000000000000040000500400088008A -:1079F00000000400000000008200400000000000C1 -:107A0000000008000000400090210080000040803D -:107A1000900010802020C000900800110000400459 -:107A2000A000000000000000000004008800C00862 -:107A30000000C00000000000A005092000000000B8 -:107A400000880000000000000000000000000000AE -:107A50000000000000000000000000000000000026 -:107A6000050003200000100000001000A00021000D -:107A700011881000100021004100200000000000CB -:107A80000000000008004000000005000510000094 -:107A9000212000001004A1000000410200000004A9 -:107AA000000000000000000008004100000041004C -:107AB000000000000308008205000882100000009A -:107AC00000000008000008000000000000000000A6 -:107AD00000000041080008038400C00400100040BA -:107AE000C0401000080000008400400210040000A4 -:107AF000C00020020000000000090820820084006D -:107B00000000C00900000800000084000800840094 -:107B100000000000820000000000000009000000DA -:107B2000000000000000080000400000820000107B -:107B300000000800100008000000001000402000B5 -:107B400000080040200300000000000004000000C6 -:107B50000000000000000000000000000001000024 -:107B6000400000000000000004040000000000418C -:107B70000000004090010500000008000300000024 -:107B800000000000000000000000000000001000E5 -:107B90000000100000000000030000000000400092 -:107BA000030200000082000000000000000002004C -:107BB0000801000000822100000000000000000019 -:107BC00080000000000080000000001100000000A4 -:107BD000040000000000000088008200A0000400F3 -:107BE000004100000000010000000000400008000B -:107BF000840000000804080008200000000482003F -:107C000090110000C000900000000000040000007F -:107C1000040040110800842040000040002020841F -:107C20002000080000040000840000000003080099 -:107C300008000021400000000400000010081000AF -:107C40001000052000000184838000000000000077 -:107C50000000000000000000000000000000000024 -:107C600000000000000400004000000000000000D0 -:107C700000004000000000010000000400080004B3 -:107C800000020000000000000000000000000000F2 -:107C9000000000000000C0004100000000000000E3 -:107CA000852180002000410041A00000000000006C -:107CB00000000800110000000000004000000084E7 -:107CC00000000000100004A01009200200000000C5 -:107CD0000000000000000000040000000800000098 -:107CE00000000000A0101000000090001000100024 -:107CF00020008200000040008200848000000041DB -:107D0000820000000000000082000000000008095E -:107D10001000C000000082000400C0080000200025 -:107D200000110009202084000808000982000000DA -:107D300000000000820000000000000008000000B9 -:107D400000000000000508001004200008210000C9 -:107D50000000000000000000000000000000000023 -:107D600000000000000002100000000020000000E1 -:107D70000000800040000000000000000004090036 -:107D800000000008000000000000000000000000EB -:107D9000000000000000410000C0808200000000E0 -:107DA0008000000021009001000000000000200081 -:107DB00000000000000000000000000000000000C3 -:107DC0000008000010000000080080018000020090 +:1077B0000000000000000000040020002000200065 +:1077C00000000000000000000000000004000000B5 +:1077D0000000000000000000400000000020000049 +:1077E0000000000000000000000000002000000079 +:1077F0000000840000000000000300000000000002 +:1078000000000000000000000004880000002000CC +:107810000000000040004000040000000000A10043 +:1078200000000000880000000000000000002000B0 +:1078300000000000400000042004000000000000E0 +:1078400000004000000000000000000000000000F8 +:107850000000000000000000000000000000000127 +:107860000000000000000000000000000000000018 +:107870000000000000004000000000000000400088 +:1078800000000000000000000000000000000000F8 +:107890000000000000008000800000000000008266 +:1078A00008000000000040904000000000000002BE +:1078B000400009000002000000000040000000003D +:1078C0009000000000000000001100100000000007 +:1078D0000000000000000000000000400020000048 +:1078E00000030000000000000090021002050200EA +:1078F0000000000082000000000000000000000006 +:107900000200000000000000000000100010020053 +:1079100000000200000000004100000040000000E4 +:107920000000000200000000000000000000000055 +:107930000000000000000010000000000000110422 +:10794000008400080004008400040004000400080F +:1079500000840084000000840084001000100001F6 +:107960000000008400000002000800040000001075 +:1079700000000000000000000000001000080000EF +:1079800000000008000000000000001000080000D7 +:10799000000000000008000000088884000880083B +:1079A0000000009000010000100800000008000026 +:1079B0000000000000100000000800000084000823 +:1079C000000000400009001000080008002100210C +:1079D0000000004000000000004000000008000817 +:1079E00000840008000400050004004000000000BE +:1079F0000005000000080009000800080000000061 +:107A00000000000500000000000000000000000071 +:107A10000000000000000000000000000000000066 +:107A20000000000000000000000200210003000030 +:107A300000040000002100210000001000000000F0 +:107A400000000400000000840001000000000000AD +:107A500000200000000000000000000000100000F6 +:107A6000000000050000000100000001000100000E +:107A700000000300030003000300000000000000FA +:107A800000000000000000000000000000000000F6 +:107A900000000000000000000000000000000000E6 +:107AA00000000000000000000000000000000000D6 +:107AB00000000000000000000000000000000800BE +:107AC00000000000000000000000000000000000B6 +:107AD00000000000000000000000000000000000A6 +:107AE000000000000900088009000803010401806B +:107AF0000100000000000000000000000000000085 +:107B0000000000000000080000000000000000006D +:107B100000000000000000000000000000008400E1 +:107B2000080000000000000000000000200000002D +:107B30000000000000000000000000000000000045 +:107B400000000000000000000002000000000084AF +:107B50000000000000000000000000000000000025 +:107B600000820000000004840002048200A008A13A +:107B700004202008000000000000000000000000B9 +:107B800000000008000000000000000000000000ED +:107B900000000000000000000000000000000000E5 +:107BA0004000050005000500000000000000808482 +:107BB00003000000000000000000001000000000B2 +:107BC0000000000000000000000000000000401164 +:107BD00000000000000000000000000000000000A5 +:107BE000900000000000000090050000020020004E +:107BF00000400221000300020005004100000000D7 +:107C00000000000000000000000000000000000074 +:107C100000000000000000000000820000000000E2 +:107C20000000000000004000000000020000000012 +:107C3000000000000000000000000008000000003C +:107C400082000000080008000000000000000000A2 +:107C5000020000000000000400840000000000108A +:107C600000A0000000000000000000000000000074 +:107C700000000000002000000000000000000000E4 +:107C800000040000000000000000000000000000F0 +:107C900000000000000000000000000000000000E4 +:107CA00000000000000000000000000000000000D4 +:107CB00000000000000000000000000000000000C4 +:107CC0000000000000000000000000000041000073 +:107CD0000000000900000000000800090021000069 +:107CE00000000021000000000000000011000080E2 +:107CF0000100118000050080010801200021000022 +:107D0000000000000008000000000000000000006B +:107D1000000000000000000800000000000000005B +:107D20000000000000000000000000000000000053 +:107D30000000000000050000000000000008000036 +:107D400000000000000000000000C0000000000073 +:107D500000000000000000000000410000000000E2 +:107D6000000000000000000005820000000020006C +:107D700000102084080200A000020800400100005A +:107D800000000000000000000000000000000000F3 +:107D900000000000000000000000000000000000E3 +:107DA00000000000000000000000000000000000D3 +:107DB000000000A000A000C00000000000000000C3 +:107DC00008000000000000000000000000000000AB :107DD00000000000000000000000000000000000A3 -:107DE0000000000000000000C0000000A000020031 -:107DF00000000100900000000100010120010001CD -:107E0000000001001000000000000100040000005C -:107E100000000000000010010001C09008090821C6 -:107E2000901102090103050908820000000000000A -:107E3000000000000100020000000000010020001E -:107E40000000000000000200000001008800820025 +:107DE0000000000000000000000000000000000093 +:107DF0000308A010101102080802900390A18289C4 +:107E00000000000000000000000000000000000072 +:107E10000000000000000000000000000000000062 +:107E20000000000000000000000040008888820080 +:107E30002000080000000200080000000000000010 +:107E40000000000000000000000000000000000032 :107E50000000000000000000000000000000000022 -:107E6000000000000000110000008000030000007E -:107E70008000000003001000000010112108040819 -:107E800000100000030088000000000010008000C7 -:107E9000000000000020030280080020200320A131 -:107EA0001008809088401190900800100000000099 -:107EB000000000000000030091000000000003002B -:107EC0008000000000002000800000001100A100E0 -:107ED0008200002000000000000000000000000000 -:107EE0000000000000000000000000008000000012 -:107EF0000000000020204000200805000808218024 -:107F00004008088500080000000300000000000091 -:107F10000000000000000000000000000010100041 -:107F2000A02190A121411140A0A1204011030000F7 -:107F3000000000000000000500000020000000001C -:107F4000000000000080002000000000000000A0F1 -:107F500003000040000000000000000000000000DE -:107F6000000000000000000000000000000002000F -:107F70008800C000A0000100000000010082011084 -:107F800000040100010400000000000000400000A7 -:107F90000000000000000000000010008800000049 -:107FA00008A041820383018508900340088282C0B3 -:107FB0000000000000000000000000000000004081 -:107FC00000000000000000040000000000000000AD -:107FD000000200000000000000000000000000009F -:107FE0000000000000000000000000000000010090 -:107FF000008900C1002100A1000120000000000054 -:108000000000110109010001000120000000000032 -:10801000000000000001000100000001010001005B -:1080200000009020018304080811902020A084897A -:1080300089A100000000000000000001040100010F -:10804000000000010000000000000000000100012D -:1080500000000001200000000101000000000000FD +:107E60000000000000000000000000000000000012 +:107E700000001002C18880030002091090A18088D0 +:107E8000800800000000000000000000000000006A +:107E900000000000000000000000000000000000E2 +:107EA0000000000000000000000000008010201012 +:107EB00080040002000002000000800000000000BA +:107EC00000000000000000000000000000000000B2 +:107ED00000000000800080008000800000000000A2 +:107EE0000000000000000000000000000000000092 +:107EF00000000000090083028891A1200280021185 +:107F0000C103A18300000000000000000000000089 +:107F10000000000000000000000000000000000061 +:107F2000000000000000000000000000000002004F +:107F300002009020900300001000080041000000A3 +:107F40000000000000000000000000000000000031 +:107F5000000000000000020002000800080000000D +:107F60000000000000000000000000000000000011 +:107F700000000000000008081100114103918290E8 +:107F800008018400C1900000000000000000000013 +:107F900000000000000000000000000000000000E1 +:107FA00000000000000000000000000000000000D1 +:107FB00020909000A000090020000100010089002D +:107FC00000000000000000000000000000000000B1 +:107FD00000000000000000000000000000000000A1 +:107FE0000000000000000000000000000000000091 +:107FF00000000000000000009008009010858388B9 +:1080000008890011008482100000000000000000B8 +:108010000000000000000000000000000000000060 +:108020000000000000000000000000000000000050 +:10803000000040830010A010A01100110088002152 +:10804000011000000000000000000000000000001F +:108050000000000000000000000000000000000020 :108060000000000000000000000000000000000010 -:1080700008000008004000052020002080050020A6 -:1080800010050508A01004214008000280050040EA -:108090000502000900030020001000000020082055 -:1080A000030500118502098482880902C0008085C9 -:1080B00085082085050000000000000000028008FF -:1080C0000008050200020008001002090020000359 -:1080D00000204009000200030000104100000000E1 -:1080E0000000000000000000000000000009000087 -:1080F00000000000000000000000000000880000F8 -:10810000000000020304050908001111000300002B -:10811000000000000000000000000000000021003E -:108120000804090021000084880808000840A1050F -:10813000030990A1401000000000000000000000B2 -:10814000000000000000000080008000000000002F +:1080700000000000000000000000809120104190EE +:10808000A10880081103418883100000000000004F +:1080900000000000000000000000000000000000E0 +:1080A00000000000000000000000000000000000D0 +:1080B00000000000801011C1900380210009009091 +:1080C0000005110400000000000000000000000096 +:1080D00000000000000000000000000000000000A0 +:1080E0000000000000000000000000000000000090 +:1080F0000000000000000000000000009109901145 +:108100002080030288090390080090080000000006 +:10811000000000000000000000000000000000005F +:10812000000000000000000000000000000000004F +:10813000000000000000208008002100210800004D +:10814000000000000000000000000000000000002F :10815000000000000000000000000000000000001F -:10816000000000000000000000000000000000000F -:10817000000000000000000000A0009000000004CB -:1081800000000000002100C101000100000000000B +:1081600000C000A0000000000000000000000000AF +:1081700000000000000000000000000000000802F5 +:10818000A0108890030005901189001004000000E1 :1081900000000000000000000000000000000000DF -:1081A000010000850088010040C00409C0A0110141 -:1081B00003880882210982000000000000000000FE -:1081C00000000000000000000000020084008800A1 +:1081A00000000000000000000000000000000000CF +:1081B000000000000000000000A00100019001018B +:1081C0000088009000100000000000000000000087 :1081D000000000000000000000000000000000009F :1081E000000000000000000000000000000000008F -:1081F000810000E0000000000000000000005000CE -:10820000000000E000000000810000E00700000026 -:10821000000000E00000000000000000000000007E -:1082200000000000000000000000818100E0070065 -:108230004106008200E0070000000000000000008E -:108240000000000000E0000000000000000000004E -:1082500000000000000000000000000000E000003E +:1081F000000000000000000000000000000000007F +:10820000842100E007000000821100E00700000068 +:10821000000000000000000000000000000000005E +:10822000000000000000000000000000000000004E +:10823000000000000000000000000000000000003E +:108240000000600000E000000000000000000000EE +:10825000000000000000000000000000000000001E :10826000000000000000000000000000000000000E -:10827000000000000000000000000000000000AA54 -:1082800030BA000000000000000000000000000004 -:1082900000000000000000000000000000000000DE -:1082A000000000000000000000000000FF3CC300D0 -:1082B000CF0C41410F4D0F0F3C003CFF0000000070 -:1082C000000000000000000000000000300030004E +:1082700000000000000000000000000000000000FE +:10828000000030F3AAAA2075A2F700003C00FFF519 +:10829000FFF10000000000000000000000000000EE +:1082A00000000000000000000000000000000000CE +:1082B00000000000000000000000000000000000BE +:1082C000BFBF2C2C000000000F000F0000000000BA :1082D000000000000000000000000000000000009E :1082E000000000000000000000000000000000008E :1082F000000000000000000000000000000000007E -:1083000000AA00AA00000000000000000000000019 -:10831000000000000000000000000000000000005D -:10832000000000000000000000000000000017171F -:108330001717CF0C7D7D55555555F0AAF0AA0000B2 -:1083400000000000000000000000000000003000FD -:1083500030000000000000000000000000000000ED -:10836000000000000000000000000000000000000D +:108300000000000000FF00FF20F720F7FFFFFFC381 +:1083100000A000B00000000000000000000000000D +:10832000000000000000000000000000000000004D +:10833000000000000000000000000000000000003D +:108340000000BF3E2C08000000000F410F0000009D +:10835000000000000000000000000000000000001D +:108360000000000000000000000080B0C0F000002D :1083700000000000000000000000000000000000FD -:1083800000005D5555550000000000000000000091 -:1083900000000000000000000000000000000000DD -:1083A0000000000000000000000000005555555579 -:1083B00000AA00BA140414040002AAAA8282A282AB -:1083C00000000000000000000000000000000000AD +:10838000000000000000BEBEFEFFFFFFC2FF55550B +:108390000F0FFF3C4D4D00000000000000000000EA +:1083A00000000000000000000000000000000000CD +:1083B00000000000000000000000000000000000BD +:1083C000555555550C003F0F00000000FFFFFFFF03 :1083D000000000000000000000000000000000009D :1083E000000000000000000000000000000000008D :1083F000000000000000000000000000000000007D -:10840000000000000C000000000000000000000060 -:10841000000000000000000000000000000000005C -:108420000000000000000000000000000000F50552 -:10843000F50555FF45FF00040004FFFEAAAABEBED5 -:10844000AEBE0000000000000000000000000000C0 -:10845000000000000000000000000000000000001C +:108400000000000000000000141404003D00000003 +:108410003F030F0FC3004D4D00000000000000009F +:10842000000000000000000000000000000000004C +:10843000000000000000000000000000000000003C +:10844000000000FF00FF0F0CFF3F00000000FFFFD7 +:108450007D7D000000000000000000000000000022 :10846000000000000000000000000000000000000C -:108470000000000000000000000000610007800D07 -:10848000200000610006000D000100610007000DE2 -:10849000000005610A0F850D00A000610007000DB6 -:1084A000000000610006000D0000000000610006F1 -:1084B000000D000005610A2B850500A105610A2F4A -:1084C000050D00A000000000000000000061000792 -:1084D000000D000000610006000D000000610006B4 -:1084E000000D000000000007000C0000000000006C +:1084700000000000000000000000000000000000FC +:1084800000000000000000000000006100228005E4 +:1084900000000061002280050008000000000000CC +:1084A00000000000000000000000000000000000CC +:1084B00000000000000000000000000000000000BC +:1084C0000000000000610006000D000000610006D1 +:1084D0008009000100000000000000000000000012 +:1084E000000000000000000000000000000000008C :1084F000000000000000000000000000000000007C -:10850000000000000000000000AA30BA00000000D7 -:10851000F0F0F0F87F7C737000080808000000009D -:108520000020FFFF000000000028F0F800000F0C02 -:10853000000C00FF20FF00030003FFBFFFAB00F7AC -:1085400000F4FFFA55500000000000000000000099 -:10855000000000FF20FF00000000F0F0F0F8000035 -:108560000000F0F0F0F800005555F0F000000000B9 +:10850000000000000000000000000000CFEFEFEFCF +:10851000DFFF55FF7F555F55AAFABAFA0000000049 +:10852000000000000000000000000000000000004B +:10853000000000000000000000000000000000003B +:10854000000000000000000000003C003C000000B3 +:1085500000003CFF3C7F0000000000000000000025 +:10856000000000000000000000000000000000000B :1085700000000000000000000000000000000000FB -:108580000000000000000000000000AA00AA000097 -:108590000000000000284F4C43400008000000008D -:1085A000000000200020000000000000F0F00000AB -:1085B0000C0C0C0C00002020000A000A00BF00ABCD -:1085C00000FF00FFAAFA00500000000000000000B9 -:1085D0000000000000002020000000000000002833 -:1085E000000000000000002800005555F0F0414157 +:1085800000000000000000000000000000000C04DB +:108590000404002000AA40555055AA0A8A0A000087 +:1085A00000000000000000000000000000000000CB +:1085B00000000000000000000000000000000000BB +:1085C0000000000000000000555504540400340071 +:1085D0000000000000FF00FF00000000000000009D +:1085E000000000000000000000000000000000008B :1085F000000000000000000000000000000000007B :10860000000000000000000000000000000000006A -:1086100000000000AAAAAABA5CFF5CF0AAFFB4B4EA +:1086100055550F0F30B271F3FF55AA0020F0EFFF50 :10862000000000000000000000000000000000004A -:108630000000DF5F7F5F00000000A020A020BABA2A -:1086400030BA3F303F30878787C30000000000000A -:10865000000000000000000000000000000000001A -:108660000000000000000000000000003C3CF0F0B2 +:10863000000000000000000000000000000000003A +:1086400000000000000000000000000000000A0A16 +:10865000020000000000F00000FF00000000000029 +:10866000000000000000000000000000000000000A :1086700000000000000000000000000000000000FA :1086800000000000000000000000000000000000EA -:10869000000000000000000000305C0F5C0000558E -:1086A000B4B4000000000000000000000000000062 -:1086B000000000001050405000000000A0A0A020CA -:1086C000AAAA00AA0000FFFF8787870F000000000A -:1086D000000000000000000000000000000000009A -:1086E00000000000000000000000000000003C3C12 -:1086F000F0F000000000200020001004200008001E -:10870000880220042000000000000000400040001B -:108710001000100040000400C004200005002100EB -:108720000000008020000000C00084000000200243 -:10873000880400000003100020004000008020801A -:1087400020000000850021008500010021000000BC -:10875000200020000400C1002088008001000400E7 -:108760002000400320002000400002000000000024 -:108770004000A00000000000000400000000000015 -:108780008000400000020002000000000000200005 -:108790001000400000004102000000020000200024 -:1087A000200200022004000000020000400000003F -:1087B00000000500410000001000400020000004FF -:1087C00040040040210220022000209020C0200010 -:1087D00000004000000000000400002020200400F1 -:1087E000210000000002000000400084000000841E -:1087F0001000000000000490020000400000020091 -:108800000000000000000000000000000000080858 -:108810000200000900000000000002000000020049 -:1088200002040200020500020000020308000040EA -:10883000000000000000020000000000001000081E -:1088400000100000000000100010000300000010E5 -:108850000000000000000000000000000000000018 -:1088600000100000000000000010020000400100A5 -:10887000041000410210000001100000040000007C -:108880000000000000040008050000004100000096 -:108890000000000000000000000000000000400098 -:1088A00000000001090000840001400000004000B9 -:1088B00000840900400000000040000000000000AB -:1088C0000000410440000000000000000000000023 -:1088D000410000400900000000000000000000000E -:1088E00000880040200000000000000000000000A0 -:1088F0000210000000000000020040000000000024 -:108900000000000000000000000000000000000067 -:1089100000000000000088000000000000000000CF -:108920000041000000000002000084004000C00080 -:108930000000000000000000002100000000000016 -:10894000000500100008000088000005A0000000DD -:1089500000000000A0020000000000000400200051 -:1089600000200000000000000000000000000000E7 -:1089700000000000840000000000000090000000E3 -:1089800000000000000000000000400000000000A7 -:10899000000011001100110000004000000009005B -:1089A000000002000500100000020000009000001E -:1089B0000300000000000800410040000820000003 -:1089C00005004000100000001104000005040082B2 -:1089D000030000040000419000000000211000206E -:1089E0000000000000000000080005000300000077 -:1089F0000500080000044100000008000890000085 -:108A0000000000000000000000000800000000005E -:108A10000000000000210040000082210009000940 -:108A20000041840008090000040000001004004018 -:108A300000000004002100100002840008008402ED -:108A400000001000000000090000A000000000006D -:108A50000200000000000102000000030004040006 -:108A600000040004000000000000000000000000FE -:108A700000040480000000008402001000001009BF -:108A800000000000000000000010000000000000D6 -:108A90000000000000004100000000820000000013 -:108AA000000800004010410010001000000000000D -:108AB0000000050000000004110800000000000094 -:108AC0001084000000000000000000000000009082 -:108AD00000000000004002004009000040000000CB -:108AE0001000000200040000080000200040000008 -:108AF00005004100001000001000210000200000CF -:108B00000000088204000000000082000000000055 -:108B10000000C00000000000000000000000000095 -:108B20000000080000000000000000080000000035 -:108B30004100010000000000820000000000000071 -:108B40000000000000000000A0000000000008007D -:108B5000840000000000000000000002000000008F -:108B600000000000000008800000000040099100A3 -:108B700000000000000000000000000008000000ED -:108B800000020000001100001000000000000000C2 -:108B900000000000000000200000000008000000AD -:108BA000000405001100008408000004000009040E -:108BB000000020022004002000000000000003004C -:108BC000000003000020000000000000000800403A -:108BD000081010000384030409C020A0051111909F -:108BE0000900000000000000002000000040000418 -:108BF0004004000000000000000000000000000031 -:108C00000008000041000000C00210000000000049 -:108C10000000000000000000000000000000000054 -:108C20000000000000000100000000000000000043 -:108C30000011000000000000000000210000000002 -:108C4000000010000200000000000800000000000A -:108C500008040000821100008400000000000808E1 -:108C600000000000000000000000400000000000C4 -:108C700000000000000000004000000000090000AB -:108C800000000000000000000000000000000000E4 -:108C900000000000000000000000000000000000D4 -:108CA0000000050400000000040000002000000097 -:108CB00000000820400008002010000005A000006F -:108CC00020900000100000002000000000002100A3 -:108CD000000000000500004000000000050000004A -:108CE000000000000200000011000300000000006E -:108CF000080000000000000000000020000200004A -:108D0000000000400004000802200088000000006D -:108D10000000000000040004000200400000000009 -:108D20000000000000000000000000000000000043 -:108D30000000000000004100820000000000000070 +:1086900000003F030F0F0000FFFFEF04EF04200076 +:1086A000EF0F0000000000000000000000000000CC +:1086B00000000000000000000000000000000000BA +:1086C000000000000000000000000000000000802A +:1086D0000A0A000000000000F00000000000000096 +:1086E000000000000000000000000000000000008A +:1086F00000000000200400040000000088000000CA +:1087000020000000200000042004200020000000C1 +:10871000000400042000000000000000200000020F +:108720002000A00020000000200420002002000003 +:108730000000001100030000000000040000200001 +:108740000000200000000000000000000000000009 +:1087500020000000010008004000000001000000AF +:1087600000000000000040000000110000000000B8 +:1087700008100000020000000001000000000000DE +:1087800000000000000021000001000000000000C7 +:1087900000000000000000000000000000000000D9 +:1087A00000000000000000000000000200000000C7 +:1087B0000000000000000000200000000000000099 +:1087C00000000000000000000000000000000000A9 +:1087D0000000800000004000C00085000000400054 +:1087E000000000000000000080004100C000000008 +:1087F0000000800300008002000000000000000074 +:1088000000000000008400800000010000800000E3 +:108810000000008000900000000000000000000048 +:108820000000000000000000000500000000000043 +:108830000000000000000000000000000000000038 +:108840000000040000000400000000000000000020 +:108850000000000000000000000010008400000084 +:10886000000000009009000000000000000000056A +:108870000000000000020010000900880400040449 +:108880000008009000000041000400840200000481 +:108890000000000000040004000000000088000048 +:1088A00000080000000000000000000000000000C0 +:1088B00000000000000000000000000000000000B8 +:1088C0000000000800000400000004000000000098 +:1088D00000000082000000000010000800080008EE +:1088E0000008000800000000000000000000000078 +:1088F00000000000000000000009008400210021A9 +:1089000000000011002100000000084000210003C9 +:1089100000050009002101000000000000410003E3 +:1089200000000000000500000000008000000000C2 +:108930000005000800009000402100080000000829 +:1089400000000008000000000000002100000000FE +:1089500000000000000001000000000800000010FE +:1089600000000000002100000000000000080000DE +:1089700000000002000800000800000500000000E0 +:10898000000800840000000000000000000000005B +:1089900020000000000000000200000011000000A4 +:1089A0000000000000000000000200400040000441 +:1089B000000400040082000000000000000000002D +:1089C00000000000000000000000000000000000A7 +:1089D0000800410008000800200000001100008489 +:1089E00000100002008400A00008000800880008B1 +:1089F0000000000000010000000000000000000076 +:108A00000000004000400040000500400000000061 +:108A100000000100004000000005010000400000CF +:108A20000000004000000000000000110080000075 +:108A30000000000000000000000400040004000426 +:108A40000000000000000000000000000000000026 +:108A50000800002100000000000008000080010064 +:108A60008200400000054011400082000003002108 +:108A700000000000000000000000000000100000E6 +:108A80000000108200090001400100000001000008 +:108A90000300000020000001000000C020000001D1 +:108AA000000000001101000000000402000000406E +:108AB00000000000000000C0008200010001000171 +:108AC00000010000000000000000000000000000A5 +:108AD0000000000000000000000000000000000492 +:108AE00020000000009000000084009000000000C2 +:108AF0000000030000000000000000000000000172 +:108B00000000008400030000000400200020400456 +:108B10000000000400052020900200000021004019 +:108B20000002002001410000014001000105010098 +:108B3000000000210009000000000000000000000B +:108B40000008000000000000000800000000000015 +:108B500000000800000000000000000000002000ED +:108B600020002004400001000100000200800800F5 +:108B7000004100000000004000000000C000004074 +:108B80000040002000040000000000010040000040 +:108B9000800000000200008880000000000000400B +:108BA0000000000000000202020002020202028431 +:108BB00002020000000200A000000000000000000F +:108BC00000000000000000000000000000000000A5 +:108BD0000000000000000000000000000000000095 +:108BE00088028000C08503004000048400820020C9 +:108BF0000000000000000000000000000000000075 +:108C0000000000000000000000A101210080A02160 +:108C10000005000300902000002100030100000077 +:108C200000410000009100410041000300000000ED +:108C300000050000000000210021000000210000CC +:108C40000000000000030000000000000000000021 +:108C50000000000000000000000000000000000014 +:108C60000000010000800000000000000100C121A0 +:108C700001210008000808080000000000000000B2 +:108C8000000000000000000002004140200000043D +:108C9000000000000000030480000000000020002D +:108CA000210000000000000400000000000000009F +:108CB0001188400000004002000040000002000255 +:108CC0000082000000000000000000000000000022 +:108CD0000000000000000000000000000000000094 +:108CE00000000082200000040000000000100400CA +:108CF000040004000000000021000000000000004B +:108D0000000011000000000000008000034110106E +:108D100000118211090808884090828808094002E1 +:108D20000021822002094008000882080404000093 +:108D300000C00002080800C000C0100000000000D1 :108D40000000000000000000000000000000000023 -:108D50000000000000000000000001000000000012 -:108D60000000000000000000000000000000000003 -:108D700000000000000000000000000000010000F2 -:108D800000000000000000000100020000000000E0 -:108D90000000000000000080008000800000000053 -:108DA00000000000000000000000000000000000C3 -:108DB000000000000000000004008200000000002D -:108DC00000000000000000000000000000000000A3 -:108DD000000000000500000000000000400000004E -:108DE000000000000400000000000000000000007F -:108DF000000000000000000000050008002000083E -:108E000000000000000000000000080080000000DA -:108E10000000000000000000000000000000000052 -:108E20000000000000000000000000000040000002 -:108E300000000000000000000020000000200000F2 -:108E40000000000000000000000000000000000022 -:108E500000000000000000000000000300000040CF -:108E6000000000032000202000000000000000009F -:108E7000000000000080000800000000000000006A -:108E800000000000001100000000000000000000D1 -:108E900000000000000000000000000000000000D2 -:108EA00000000000000000000000000000000001C1 -:108EB000008800000000000000000000000000002A -:108EC00000000000000000000000000000000000A2 +:108D50000000000000000000000000000000000013 +:108D60000000000000000001890190000000C1081F +:108D70000091208810110000000000000000000198 +:108D800000014000000090C000000002200810C157 +:108D900080910091808889809000808080001141BE +:108DA0008011001180A011C180C10008800800005E +:108DB00000000000000080800000000000000000B3 +:108DC000000000000000000000000800000000009B +:108DD0000000000000000000000000000000000093 +:108DE0000000000000000000001141080010000415 +:108DF0009083218800020021000000000000000094 +:108E0000404121210005000000800000008000801A +:108E100089918991030208828980898911110991B8 +:108E2000098002A1841109A1899010821191402129 +:108E3000801000840000000080000080800000009E +:108E400000000000000000000020000000200000E2 +:108E50000000000000000000000000000000000012 +:108E600000000000000000000000020041000811A6 +:108E70001003000020110003A011000000000000FA +:108E800000001080410005114191000080000000A9 +:108E90000000080810C0029091C0084008C01041AE +:108EA00091C0090802C0100988C0090802C0044125 +:108EB0000104080004C0080000020800A0C010C09F +:108EC00000020000000000000000000000000000A0 :108ED0000000000000000000000000000000000092 -:108EE000000100000000010000010000000000007F -:108EF0000000000000000040000000100000000022 -:108F0000000000000000000000020000000000005F -:108F10000000000000000000000000002000000031 -:108F200000009000000000000000000000000000B1 -:108F30000000000000000000000000000001200010 -:108F40000001000000000000000000000000000020 +:108EE0000000000000000000000000000000000082 +:108EF000010100010288880100829000000000004A +:108F00000000000001400000010001A0100010005E +:108F10001000880003100102C04010820310008876 +:108F2000C010119003100110C040020821109110D0 +:108F3000C10810100810001004A010C0C11000C01B +:108F400010A0100000000000000000000000200041 :108F50000000000000000000000000000000000011 -:108F600000000000010000000400000000000000FC -:108F700000000000000001000000080000000000E8 -:108F800000000100000000000000000000000000E0 -:108F900000000000000100000000000000000000D0 -:108FA00000000000000000000000000000000000C1 -:108FB00000000000000000000000000000000008A9 -:108FC000000800032008000000000000000000006E -:108FD000000000000000000000000000000002008F -:108FE00000000000000010000000800000000500EC -:108FF0000000000000000000080000000000000069 -:109000000000090041000000000000000000000016 -:109010000011000800200004000000000000000013 -:109020000000000000000000000000000000000040 -:10903000000000040000000000000000000000002C -:10904000000000110000000000000000000000000F -:109050000000000000000000000000000000000010 +:108F60000000000000000000000000000000000100 +:108F700001010801000088880100A190018900001A +:108F80000000000000000000000101000000408817 +:108F900000A01010A10441001100A08000004109B0 +:108FA000001180C1118341001180A0808000C100A8 +:108FB00091808500118091000080000002009000E7 +:108FC00000000000000000000000000000000000A1 +:108FD0000000000020000000000000000000000071 +:108FE0000000000000000000000000000000000081 +:108FF000001010080021001100200241858340105C +:1090000000000000000000000011210321114011A8 +:1090100080000080008089000388080209000303A3 +:10902000C102080005008809028291000980092018 +:1090300084822100090009040000800000008000F3 +:1090400080000000000000000000000000000000A0 +:109050000008000000000000000000000000000008 :109060000000000000000000000000000000000000 -:1090700000000000000000000000000000100000E0 -:109080000000000000000000000000000000800060 -:1090900000000000000000000000000000000000D0 -:1090A00000000000000000000000000000000000C0 -:1090B00000000000000000000000000000000000B0 -:1090C000000000000001000000000000000000009F -:1090D0000000000000000000000000000000000090 +:1090700000000800081003000311A1028900C000CD +:10908000400000000000000000001009100008006F +:109090001140000000800000000002A10310112018 +:1090A0002101099089881188050102A01010211062 +:1090B000910108A0881009049100C000101010024E +:1090C0000800080088C0880290000000000000002E +:1090D000000000010000000000000000000000008F :1090E0000000000000000000000000000000000080 -:1090F0000000000000000000000000000000000070 -:109100000000000000000000000000001000C0008F -:10911000100002000000000000000000000000003D -:10912000000000000000000000000000000000003F -:109130000000000000110000070400000000000013 -:1091400000000000480000E00000000000000000F7 -:1091500000000000000000000000000000004800C7 -:1091600000E000000000820000E0000000000000BD -:1091700000E000000000000000000000000000000F -:1091800000000700000000000000000000060000D2 -:1091900000000000000000000000000000000000CF -:1091A00000000000000000000000000000000000BF -:1091B00000000000000000000000000000000000AF -:1091C000000000000000000000000000000000009F +:1090F00000000000010000000100000003012090BA +:1091000091108300000000000000000000830100B7 +:10911000010000000000008200020000880000E062 +:1091200000004842500000E000004842410000E0DA +:1091300000004842600000E00000484200000000DB +:109140000000840000000000000042000000000059 +:1091500000000000810000E00000000000000000AE +:1091600000000000000000000000000000000000FF +:10917000000000000000840000E000004100001139 +:109180000000070042000000000000000000000096 +:109190000000000000000000000007000000F03C9C +:1091A0003C3CBFBF2020F0F03C66BD2DB424FF6CDA +:1091B0006C6C3FFF399966663F30BFBF20BFCCC3A0 +:1091C000CC3C40DFBF208778C33C40DF40DF00005D :1091D000000000000000000000000000000000008F :1091E000000000000000000000000000000000007F :1091F000000000000000000000000000000000006F -:10920000000000000000000000000000000000005E -:10921000400000000000000000000000000000000E -:10922000000000000000000000000000000000003E -:10923000000000000000000000000000000000002E -:10924000000000000000000000000000000000001E +:10920000D9FF00D9FFFF00000000000000000000AF +:10921000000000000000000000000000000020002E +:10922000F0666666BF20BF203C663C66FF0FF0001C +:10923000006C6C6C366630003F303F30BF20202021 +:10924000C3C33C3C40DFBF208778C33CBF20BF2066 :10925000000000000000000000000000000000000E :1092600000000000000000000000000000000000FE :1092700000000000000000000000000000000000EE -:1092800000000000000000000000000000000000DE -:1092900000000000000000000000000000000000CE +:10928000000080FF0080E724E724000000000000C9 +:1092900000000000000000000000000000002000AE :1092A00000000000000000000000000000000000BE :1092B00000000000000000000000000000000000AE :1092C000000000000000000000000000000000009E @@ -137554,990 +137554,990 @@ :1092F000000000000000000000000000000000006E :10930000000000000000000000000000000000005D :10931000000000000000000000000000000000004D -:1093200000000000000000000000000099F099F02B -:10933000000000000000000000000000000000002D -:10934000000000000000000000000000000000001D -:10935000000000000000000000000000000000000D +:10932000000000003C0F66660F27FFE70F3C6666F3 +:10933000626EF3FF663C0F3CC3C6FFF6CFCFCF662D +:10934000FB08FB0833335A5AFB08FB08F0F0F0998E +:10935000F4D0F4D000000000000000000000000085 :1093600000000000000000000000000000000000FD :1093700000000000000000000000000000000000ED -:1093800000000000000000000000000000000000DD -:1093900000000000000000000000000000000000CD -:1093A0000000000000000000000000000000C3FFFB -:1093B000C3000000000000000000000000000000EA -:1093C000000000000000000000000000000000009D -:1093D000000000000000000000000000000000008D +:109380000000000000000C0CCFCF6666666600008F +:109390000000000000000000000000000000C3C347 +:1093A0000C0C999998993C0F3C0F0024F0E40F3C69 +:1093B0000F3C000C919D66660F0F00063C360C0CAE +:1093C0000C6604F704F73333333304F704F70F0F55 +:1093D0000F660B2F0B2F00000000000000000000A4 :1093E000000000000000000000000000000000007D :1093F000000000000000000000000000000000006D -:10940000000000000000000000000000000000005C +:1094000000000000000000000CCF0CCF0C0CFCFC96 :10941000000000000000000000000000000000004C -:10942000000000000000000000000000000000003C -:10943000000000000000000000000000000000002C -:1094400000000028000000A0000000000000000054 -:1094500000610007800D0000000000000000000017 -:109460000000000000000000000000610007800D07 -:10947000200000610007800D000000610007000D62 -:109480000000000000000000000005000A080500C0 -:1094900000A000610006000D000080000000000038 -:1094A000000000610006000D000000000000000048 -:1094B00000000000000000000000000000000000AC -:1094C000000000000000000000000000000000009C -:1094D0000000000000000303F5050000000000008C +:10942000DBDB0C0C9999999940618004802510022E +:109430004061800680211002406180048025100276 +:10944000406180048025100240008000002010024E +:10945000400080000020000200000000000000002A +:1094600000610007800D0000000000000000000007 +:1094700000000000000000000000000000000000EC +:109480000000006100008005000000610026000D62 +:109490000000000000000000000000610006000D58 +:1094A000000000002000000000005F5F0A0A0000CA +:1094B0000000FF0F3C55202CEFEFBE1E0F0F0000E9 +:1094C00000001E1E5F0F00000000000000000000F2 +:1094D000000000000000000000000000000000008C :1094E000000000000000000000000000000000007C :1094F000000000000000000000000000000000006C -:10950000000000000000000000000000000000005B -:10951000000000000000000000000000000000004B -:109520000000000000000000F505F5050000000047 -:10953000000000000000000000000000000000002B -:10954000000000000000000000000000000000001B -:109550000000000000000000F3F3F505000000002B +:1095000000000000FF0FF0005300000000003430A6 +:109510000000000000000000000000000000AA00A1 +:10952000FFFBFFA200000000000000001F0B1F0B4C +:1095300000000000000F3C552020EFE3141E0F0F29 +:10954000000000001E1E0A0F0000000000000000C6 +:10955000000000000000000000000000000000000B :1095600000000000000000000000000000000000FB :1095700000000000000000000000000000000000EB -:1095800000000000000000000000000000000000DB -:1095900000000000000000000000000000000000CB -:1095A00000000000000000000000F3F303030000CF -:1095B00000000000000000000000000000000000AB -:1095C000000000000000000000000000000000009B +:109580000000000000003F3F30305300FF000000AB +:109590003733400000000000000000000000000021 +:1095A000AB00FB00A2000000000000000000FF0F65 +:1095B0003C55C7F7CFFF000000003028FFEB3F030A +:1095C0007D7DFF3FAF3FFF3C4D4DFFF5FF3C000071 :1095D000000000000000000000000000000000008B :1095E000000000000000000000000000000000007B :1095F000000000000000000000000000000000006B -:1096000000000000000F000F00000000000000003C -:1096100000000000000000003C005F0000000000AF -:10962000000000000000000000000000000000003A -:10963000000000000000000000000000000000002A -:10964000000000000000000000000000000000001A +:10960000000000000000000035F535055014FABEDA +:10961000000000000F0F000000000000000000002C +:1096200050F0AF00700000000000000000000000DB +:10963000000F3C5500300838000000000028CFEB38 +:109640003F0341410030A030C3004D4D00A0003C1D :10965000000000000000000000000000000000000A :1096600000000000000000000000000000000000FA :1096700000000000000000000000000000000000EA -:10968000000000000000000F000F000000000000BC -:10969000000000000000000000003C00500000003E -:1096A00000000000000000000000000000000000BA -:1096B00000002000000040002000A0002000A000CA -:1096C000C000880000004000400004000400048046 -:1096D0000100200010002000100040084000880019 -:1096E000400440001000000020110400040040006D -:1096F0000000000388008800C00400008900880082 -:109700000000A0000080048000001084040000001D -:1097100020001000900501208900890000800000D1 -:109720008880200088200000880000000808008051 -:10973000089020820000000021020000400010007C -:109740000000210040024082099010409082800079 -:10975000C0020400400040900000000000820000B1 -:109760000000000000000800000010008000A0C001 -:109770002000000000004000000040022000040023 -:1097800000000004000000040004000000110000BC -:109790000000000010000000209120A020001020F8 -:1097A0000000002000401041000000400000900038 -:1097B00041108011212102000200084008400200EF -:1097C0000200101002100000000000000100000064 -:1097D000A100001002100100000001000002024080 -:1097E00003110310051003000000000502400800EB -:1097F000000009000310000001110100201000000A -:10980000010901000100111000000000001000100B -:109810000000000000100090000900000000080097 -:10982000000800000000001000040000000000100C -:10983000000000000000030000000000000000081D -:1098400000020000000000C000000040000008000E -:1098500000080200200000000200000002000010CA -:1098600080008200A04020000200000020080001CB -:109870000902400002000200000002000200000095 -:10988000410002080284020002842000000000055A -:109890000001001000000000401000000000000067 -:1098A000400000880000000400820000000000006A -:1098B000000000040000008208000000000000001A -:1098C0000000000000210000002000000002040051 -:1098D0001000000088200400000000044000C000C8 -:1098E000004040008921A0410840A02140020221FF -:1098F0009000040090200000000000000105080313 -:10990000400500009100080040088400100010008D -:109910004000100000000010100002400000000095 -:109920000000000000210400C0000100000300004E -:10993000000000000120050500000000210000A03B -:10994000000000000000090000000000020000000C -:10995000100000000500100005001000400002008B -:1099600040004000210002000800000100004040CB -:109970000088400005000083000010000000020085 -:109980000800400010000200000040000400000039 -:10999000000000000000410800010000000200007B -:1099A000400041000088080080840004040000009A -:1099B00000004184000004108400410008001000F1 -:1099C00000000800820000000000000000040421E4 -:1099D0000005000082000004A011C00904028209F1 -:1099E0000103044002040203004001000240080099 -:1099F0001140010000400908C10005A10400000059 -:109A000000090040084008C000C000C0828082C039 -:109A100010000000C0000802084008008208820010 -:109A20004000090908000020880000000000C00074 -:109A3000C00082000000000084000004C00000009C -:109A400000000000410000000000000000000500D0 -:109A500000C00000410810A0000402C00004000182 -:109A6000058202000501C100800409900200C001C6 -:109A700011900200028803C1020002008202A108C4 -:109A8000000021841041088502411041104110401E -:109A90004141080002001000210100C01000100028 -:109AA0000000002008000000000000002108000065 -:109AB00000000900080021040004000010840800D0 -:109AC0000300000000210000200000000000000052 -:109AD00008000400000000000400900000000000E6 -:109AE00010112000000020000800100808400000AD -:109AF0000008000020008204C020200000020000B6 -:109B00002000000008032000900400000041200015 -:109B1000000008080000080000000000000000200D -:109B20001000400008880200000082000041080088 -:109B30000000820000002000100408000000000067 -:109B4000010200030000000000000000000000000F -:109B5000080000000040000000200020100000006D -:109B600000000090800000008000100000000091C4 -:109B70000000400000008000000110000000000113 -:109B8000000000000000001080000001000008003C -:109B900080000800000000000000000003C000007A -:109BA00000000000400000040088000000000004E5 -:109BB0000000000000000000800000010000000024 -:109BC0000000040500A000000000000000000000EC -:109BD0000000000000000400080010000000200445 -:109BE00000100000010003002103108083000840E2 -:109BF0000000004000000100000008040480040090 -:109C00000085010000800000110002C100800104F5 -:109C1000008500000111C10900400000000010098A -:109C20000000010000000000001011000000010809 -:109C300000000021400000080000000840000080F3 -:109C40000000000500080100000000000000000006 -:109C5000080000004100100085001000000005C051 -:109C6000000020000000200082A082A0004002002E -:109C700009010008118520C002020000098220406D -:109C800083021040020003400000020005404140F2 -:109C90000203032000000200020004000000000094 -:109CA00000000000080040001184000020000000B7 -:109CB00020840004000002001000000000000000EA -:109CC0000004080000002000040200000000000062 -:109CD0000000000000000000000000000000000084 -:109CE0000000100090008200820000C00000900080 -:109CF000000000C001040000000011C002000000CC -:109D0000000100C0000000900000000011C0000031 -:109D10001001000041C0000001010000080088009F -:109D2000A00082000890000000080800004008A081 -:109D3000008800900000000000000000110090006A -:109D400000089000C04000C004A08820000000006F -:109D50000000000000000000000000000000000003 -:109D6000000000000000C10002008000008200022C -:109D70000209000000800280000000009182024180 -:109D8000021000030080000000000900000091891B -:109D900000008909000091890505400900000800BC -:109DA0002100C000800080000000000000000000D2 -:109DB0000000118000000000000000000000910081 -:109DC000800002808000910021008080000000005F -:109DD0000000000000000000000000000000000083 -:109DE000000000000000850000000020A0800900A5 -:109DF000020002008000410021000305C0050900A7 -:109E000002211009830320004100202082C10000AC -:109E10008900002111048900090005210011890031 -:109E20000008000080000000800000028000800028 -:109E300000100011000300000000000000000000FE -:109E40000040002100C0000010004008888004008D -:109E50000000000000000000000000000000000002 -:109E6000880000008800840088008890880082C0F4 -:109E7000000200000000C00000A001000001C0209E -:109E8000010000000001C101002000900100C10597 -:109E90000000840000000000C0000000000000017D -:109EA000C00020000000A0000000A0001001A0A041 -:109EB000040000000091009100000000004000003C -:109EC000004088000400008200000500A105A1A058 -:109ED000C1020000000000000000000000000000BF -:109EE0000000000000000000000000010010040954 -:109EF000018988000088010000C000020000000104 -:109F000000C000000000000003C101000088040040 -:109F100000C0000000000001010002C000000401B8 -:109F2000040003C000908890001000080002001098 -:109F30000090008888000800000002000000000077 -:109F4000400000004000C0009008030000200020F6 -:109F5000080008C000000000000000000000000031 -:109F600000000000110000000000000010100020A0 -:109F700080211020000200021011008000800003E8 -:109F8000000203A0000200100000918320000000E6 -:109F9000800000800000000911090500C1C1050909 -:109FA00080094141918000200000008010000000E5 -:109FB000008000000500000000000000C00040001C -:109FC0000000000000008000000080808200090284 -:109FD0000000800891080000000000000000000060 -:109FE0000000000000000009000400000000000460 -:109FF0000009008000200205021003000083A04039 -:10A000000382A0004003820010090080090088003C -:10A0100020112000041000008900110003004141BC -:10A020008904054141800900000000000000000093 -:10A03000000000808000000080020021000000007D -:10A040000000000900000000000000028080000005 -:10A0500000800003001180400000000000000000AC -:10A0600000000000000000000000004100080000A7 -:10A070000001000200020001000000010188889137 -:10A08000C0A0018503000001C000000100840100A0 -:10A09000C1100000008889000000C000000000001E -:10A0A0000000C00400000084010000000000000067 -:10A0B0000000A00090A08420040002008400820020 -:10A0C0000800000000000000000000000000080878 -:10A0D00000009002109190838400000000000000B6 -:10A0E00000000000000000000000008100000700E8 -:10A0F0000000810000E007000006810000E0000091 -:10A100000000810000E000000000480000E00000C6 -:10A11000000000000000070000060000820000E0D0 -:10A1200000000000600600E007000000000000E002 -:10A13000000000000000000000000000004200E0FD -:10A14000070000000000000007000000484200E097 -:10A15000070000000042000007006000000000004F -:10A1600000000000000000000000000000000000EF -:10A170000000000000000000AFAAFFFF3C3C3C3C98 -:10A180000000F0F00000F0F000003C3C0000FFFF99 -:10A190000000AAAA00003C3C0000F0F00000000013 -:10A1A000FFFF0000AAAA0000FFFF0000AAAA00000B -:10A1B000000000000000C50FC500FF550055C3009A -:10A1C0005300000000000000000000000000AFAFDE -:10A1D000AFAFAAFFAAFF07070707000000000000B3 -:10A1E000000000000000000000000000000000006F -:10A1F00000000000000000000000AAAA00003C3C93 -:10A200003C3C0000F0F00000F0F000003C3C00009E -:10A2100000000000AAAA00003C3C0000F0F0000092 -:10A22000000000000000AAAA000000000000AAAA86 -:10A230000000000000010000C5FFC5F0C30FC30F00 -:10A24000FF3CFFAC00000000000000000000000028 -:10A25000A0A0A0A0AA00AA0007070703BABABFBF20 -:10A2600000000000000000000000000000000000EE -:10A27000000000005555555500000000C3C3C3C37E -:10A28000FFFF0000FFFF0000FF0000005555000029 -:10A2900055550000FFFF00000F0F0000FFFF0000FA -:10A2A0000000555500003C3C0000555500000000E2 -:10A2B000FFFF000000003C003C00F0F00000B0B0E8 -:10A2C000BE0000080F0F00000000000000000000AA -:10A2D00000005F5F5F5F0F0F0F0F0B030B0F40F06E -:10A2E000EBFF000000000000000000000000000084 -:10A2F000000000000000FF3CC30000000000A0FFC1 -:10A30000AFFF0000000000000000FF0000005555F6 -:10A31000000055550000000000000F0F0000000075 -:10A3200000000000555500003C3C00005555000061 -:10A33000FFFFFFFF000000003C003C00F0F00000C9 -:10A34000BEBEBEBEFFDF0F0F000000000000000019 -:10A3500000000000505050503C3C3C3C0B030B0FA5 -:10A3600041F3E3F3000000000000000000000000E3 -:10A3700000000000051000280000000005610A0F21 -:10A38000851D00A1406380018021920240E3800688 -:10A39000C021920240E380018021920245E38A0EAF -:10A3A000052D92A2000040E380018021920245F336 -:10A3B00080298021820200610007000D000000005A -:10A3C00000000000000080610A2F000D0000050061 -:10A3D0000A08050000A00061002F800D0000056143 -:10A3E0000A2E050D00A00000000000000000000083 -:10A3F000000000000000000000000000000000005D -:10A400000000C707C40400500000000400044141DC -:10A4100041C1FFF0F0F000000000000000002A2819 -:10A420002AAA000000000000000300001010000035 -:10A43000003000000000000000000000BEBEBEBEF4 -:10A44000000000000000000000000000000000000C -:10A4500000000000000000000000000000000000FC -:10A4600000000000000041000000000000000000AB -:10A4700000000000000000000000000000000000DC -:10A4800000000000F737F43400500000000400041E -:10A490004141C3C3F0F0F0F0003C000000000C0CA0 -:10A4A0002028200000000000000000030000101021 -:10A4B0000000003000003000300000000000828208 -:10A4C0008282000000000000000000000000000088 -:10A4D000000000000000000000000000000000007C -:10A4E0000000000000000000EB0000000000000081 -:10A4F000000000000000000000000000000000005C -:10A5000000000000000028287D7D000000001000F1 -:10A51000100000000000F371F371C0000000300073 -:10A520000000000000001013D0D300000000000065 -:10A530000000140000000000000000000000000007 -:10A54000000000000000000000000000000000000B -:10A5500000000000000000000000000000000000FB -:10A5600000000000000000003A0F3AFF0000000069 -:10A5700000000000000000000000000000000000DB -:10A58000000000000000000028287D7D000F000072 -:10A590001000100000000000F3717171C000000095 -:10A5A00030000000000000001C1FDCDF00000A0A71 -:10A5B000000000001400000F000000000C0C000060 -:10A5C000000000000000000000000000000000008B -:10A5D000000000000000000000000000000000007B -:10A5E000000000000000000000003A003AF0000007 -:10A5F0000400200240024000080088004000C00023 -:10A600004090200008112100044120002002000099 -:10A610000400A000880020002000C0004000A0002E -:10A620000003880400002000C00020002000000378 -:10A6300000002000400000002000208020042000B6 -:10A6400040000200200004840400C00000008800D4 -:10A65000000020002000888004004000200020002E -:10A66000C00020002041A0002000040004000400DD -:10A6700000020000000000408902890240000084BE -:10A68000090000214100880204008004410200000A -:10A690004100000041C02100000040000090210264 -:10A6A00020004000400000004000409040000000BA -:10A6B00000000000002000000000000004104140E5 -:10A6C00000000000800000000010000000004000BA -:10A6D0000000000010000900001000002000090028 -:10A6E000000000A009C0000000C000C08000800081 -:10A6F000890000000000000002000000410002008C -:10A700000800204005A008040000200010042000DC -:10A71000000000000000020000100440204004007F -:10A7200020000000040408000820200000000800A9 -:10A7300008090000000900000000000000000005FA -:10A74000000000000040000000000810020420404B -:10A7500021000010000000000000080000080410A4 -:10A7600000040410000000000000000000002000B1 -:10A7700000002000000000004000000000844000B5 -:10A780000000890080010421C10100008000000157 -:10A790008300400800000910000040008508800088 -:10A7A0008004800021008041050020010002048413 -:10A7B00005080004000000000500000000000084FF -:10A7C0000004000000080500000800040009000063 -:10A7D000800484824008000000080000090800008E -:10A7E0008000000880080000000840000008008287 -:10A7F00080840000A004C0000000000000000121CF -:10A800000000408800000000000000000000004040 -:10A8100000402000002100030021000488050021E1 -:10A820008804400300048800000800000020002184 -:10A830000002400000080000001088090002000823 -:10A84000000508100408884008050009A000000061 -:10A850000021002100000000004000408800880026 -:10A8600088108440002100090000000000008400DE -:10A87000000800108408000000000000000009002B -:10A880002000000080042000110011004100400061 -:10A8900009000020080000040090080400002100C6 -:10A8A00000000000000000000984000011002000EA -:10A8B000000020C0400010C0000000840000009094 -:10A8C00005840500000100000000000000000000F9 -:10A8D00041000000000000000004008400010000AE -:10A8E00000900000000000000000210005000000B2 -:10A8F00040100000000100001000080508000000E2 -:10A900000000C08084020002002085800800010051 -:10A91000A0400008000000100400100040050809D5 -:10A9200000091008400010000840820000000008E4 -:10A930000080A0210002000940090000000200027E -:10A940000841088910204109C000A0030800000246 -:10A9500082029000C000840282028400A004A10050 -:10A9600000000080820040008200C000820084005D -:10A9700000000800040008000009040000000000B6 -:10A9800000000000000241112101000108400308FD -:10A9900008000000210000001000C00000C0C1003D -:10A9A00020000000410040004100410000A00502DD -:10A9B0001100100200000308030000A000000020A6 -:10A9C000100808204002032008004000030041A0B6 -:10A9D00005840500114021000382080000820090D8 -:10A9E0000284402000020300000000001000030069 -:10A9F00000000000200080040000410090000000E2 -:10AA000088001000A0004100400000000800000085 -:10AA10000420000000408200040004000040888000 -:10AA20000480A080C080A0000008000082084005CB -:10AA30000803C01188080083090990C0C083000082 -:10AA4000000090000009400290050800100000007E -:10AA50008800C000002082400000000804000000C0 -:10AA60008203880000200004820000090000884062 -:10AA70000808882140002000A00008008440000051 -:10AA8000000000000000080008088000000000002E -:10AA90000020800100A00000084080080508050093 -:10AAA00000202020002005200500400000000000BC -:10AAB0000000000000000090080420A00005000431 -:10AAC0000000009000000010800100000000000065 -:10AAD0000000400000000004110000840500000098 -:10AAE00005002104401005880000008400000000DB -:10AAF0000000000000000000000003040590059025 -:10AB0000040000000800A000840000212000820052 -:10AB1000840008110000901000020000820004214F -:10AB2000042182000000000008008421C00200000F -:10AB300008218800A01040409021880300210021B6 -:10AB40001000000088020003000008000010000947 -:10AB5000C00900100240C021200340000808A021C5 -:10AB600000000000820800410003000008210008E6 -:10AB70000000820082114041C000A0008400828059 -:10AB80000082000008000008000000100300900090 -:10AB9000030000001100020811010003051000A0CD -:10ABA00080020510200040C0008210400008000014 -:10ABB0000802210000000000082011004188000068 -:10ABC00040004004000000000288050000C040036F -:10ABD000000000844089404040000302000009005A -:10ABE0000804418408021100410211000000000025 -:10ABF00000000000000000000000000041101020D4 -:10AC00004020002111000000000000000000880228 -:10AC10000083004108880100A00484012090000006 -:10AC2000010040010000000000C000C1000091913F -:10AC300090419005008420A18482900982084140BF -:10AC4000004000A0A09100001040038284A0A0C09A -:10AC5000000000080020009000000000000000003C -:10AC6000A0020041A0089010000001002000000098 -:10AC700088A000C000A0101000000000000000002C -:10AC800040A1088802888200000000000000000047 -:10AC9000090200A1000800004041808209030089E8 -:10ACA00008080808822000020003002000100000AD -:10ACB000104021A01103000405900589118800109F -:10ACC0000884000404000008000005881003000345 -:10ACD00000050200008000000000000000000000ED -:10ACE000000080C01091C010002000004100000052 -:10ACF0000000008000000000008000000000000054 -:10AD0000000085901104401180090000000000003F -:10AD1000000088418204A041808090400211888810 -:10AD20008900020008004100210800000000000026 -:10AD3000000300004121090820021100C000C000EA -:10AD4000050389000485048580800000880003A035 -:10AD500083A08580800000080080000000000000C3 -:10AD600000000000080084050510A1040000000098 -:10AD70000000000080000020808000000000000033 -:10AD800000000000118005C080109002000000004B -:10AD9000000000008801040020891090029020002B -:10ADA000A1A102A00008012000000191A010100044 -:10ADB000000000002002040088A001010808200013 -:10ADC000A1840021040082C0904004C00000100053 -:10ADD00004C0084082C004000800C0408800000091 -:10ADE00004000000900083A004900909052184005C -:10ADF0000000200040008800100010844084000003 -:10AE000000000000000020020821A08503100000BF -:10AE10000000000000004000A00020A0050000018C -:10AE200001400105A0030001000005000001101011 -:10AE300000C000C0C0A000400008858510A084A00C -:10AE40000110020584C003820102C083204100007A -:10AE5000A1021008C1C10390100000000000020010 -:10AE60000000000000000000849001A0088888A075 -:10AE7000000000000000000004000020000440204A -:10AE80000000000000000000909101201104A18842 -:10AE900000000000000000000020410009009104B3 -:10AEA00000080308088508842020000288000004A8 -:10AEB000000000000000800000A0091040A10889E7 -:10AEC0008091080303210411C104208480400308F9 -:10AED0000000414010A18521882080000000000072 -:10AEE00080000000000000000000000003A08302BA -:10AEF00011910020000500100003800000000000F8 -:10AF0000000000000000000000000383201085897D -:10AF100090050000000000000000804003112000A8 -:10AF200088830884040004000808048200042000C8 -:10AF300002022109050810000800A1028211050083 -:10AF4000401085800291A000000804400400C10068 -:10AF50000808000000A100000000000880028040F6 -:10AF6000008080000000000000000000A105200912 -:10AF7000050040400000000000000000004080404C -:10AF800000800000000000000009000008A1210866 -:10AF90000800910200000000000000001000029173 -:10AFA00005828908118410009000880000C000010B -:10AFB000000000001100C0C1C0C0C1001100A00805 -:10AFC0002110090804401082102010018401C040A3 -:10AFD0008408830100008221900482109001040003 -:10AFE000A089884082000000000000A0000011A09D -:10AFF0009190101002000000000000080000A00066 -:10B00000200200020400000000000000000083C1D4 -:10B0100020900482020000000000000000008881EF -:10B0200000E007008121814100E00700000081006D -:10B0300000E007004100008100000700000A818154 -:10B0400000E007000000500A00E007000000480090 -:10B0500000E00000484200000000000000004842FC +:109680000000000000000000000035F53505501412 +:10969000FABE3E0A3E3E0F0F000000000000000030 +:1096A00000005000AF007D70555500000000000024 +:1096B0000000200020000400200000000000000442 +:1096C000000010100002004000040000000200042E +:1096D0000004000000040000000000020000000080 +:1096E0000000200000400000000000040000000016 +:1096F0000000000300000000000000000000000067 +:109700000000000000000000000000000000010058 +:1097100000000004000000001000000040000000F5 +:1097200000000000008000000000000000000000B9 +:109730000000000000000000000000000000000029 +:109740000000000041000000000141000000000096 +:109750000000000000000000000000000000008287 +:109760002100000000004101000000000002000094 +:1097700000000000000000000000000000000000E9 +:1097800000000000000000000000000000000000D9 +:109790004000210000000000000021000000000047 +:1097A00004000090000221100000400005000000AD +:1097B00000000002000000000000000000000100A6 +:1097C0002000200020100104400000044000000898 +:1097D0000000001000100000000000000000000069 +:1097E000020000000000020000000000000002046F +:1097F000020000000008000000000000000000005F +:109800000000000000080000024002400240024048 +:109810009040010000409009020000020000020098 +:1098200000000403020000400110000000809000CE +:109830000400000000100000000000820000000092 +:109840002000808280828000200180080001800842 +:1098500000000000000000080000000000000004FC +:10986000000000900000000005000002000000025F +:1098700000080000001000100000000000400084FC +:1098800000080000000000000000000180000085CA +:109890000009004102080001000480840008000063 +:1098A00080840000000880080001080100000040DA +:1098B0000084000000100000001000A100A1008240 +:1098C0000291009100880084208000820082008044 +:1098D000008000890080008800804080028000882D +:1098E000888820859080008090C002800000000061 +:1098F0000080044000000003000000000000000998 +:109900000003000000000000000000000000000054 +:10991000000800000100010091000100200000206B +:10992000C088000000100000900000002008001017 +:109930000000001000210009000000000440004069 +:1099400000400040004000404040114000400040C6 +:109950000040004000400040004000400040804087 +:1099600000400040004000400040004083400304AD +:10997000038203408000000000000000000000009F +:1099800000000000000000000000000000000000D7 +:109990000000000000002000200020002008000837 +:1099A00000A0004000000000110200820000000042 +:1099B000000000000400002000000000000800007B +:1099C0000000000000000000000500000000002072 +:1099D0000000000400A1000000000080000008104A +:1099E000080008C108050000004000000000000059 +:1099F00000000080000000200000000000000000C7 +:109A00000000000000000000000000000000000056 +:109A10008800010020002000A0000080000000005D +:109A200000800083008000000080008000800080B3 +:109A30000000000000000000000000000000000026 +:109A400000000900000000000000000000A000006D +:109A50000000000000010040000041004140000003 +:109A6000001000080040000000000001000000009D +:109A70000090000000400090000100000000000085 +:109A800000000000000000000000000000000000D6 +:109A9000000000000200801080000084004000C030 +:109AA00000840040004000400000004000400040B2 +:109AB000004000A0000000A00084000000000000A2 +:109AC00000000000000000A0029100000000C01192 +:109AD000400000028802C000840000400003C00271 +:109AE00000040005000440000002000500400000E2 +:109AF00000000011888400400008000000030040BE +:109B0000000000000008000800000000000000083D +:109B10000000000002000200004000002104008557 +:109B2000000005800080012004800088820400007D +:109B3000200000840004001000000000000000006D +:109B4000000000000090110211400240202000009F +:109B50002088042000C00040001000020000000027 +:109B6000008909A000000000800011000000000032 +:109B70000040028200000040000110000000008848 +:109B800000000000000000000000000000000000D5 +:109B9000000000000000800080000001000082C181 +:109BA00020400082204000400220030203400001C8 +:109BB00000008000000400002000000040040000BD +:109BC00000840000408400210021080000080100FA +:109BD00090800100890000009140000000000021F9 +:109BE000C080000088000005000300000000202164 +:109BF00000000000004140110000000800000000CB +:109C0000000800000000000000000000000000004C +:109C1000000000000000000008800000008001003B +:109C20000100010421000180000288210000008859 +:109C30000004000400040004000000100000000004 +:109C400000000000000000210000000000000000F3 +:109C500002000040020002000000020000000000BC +:109C600000000040000000000000000000000000B4 +:109C700000000000000000000000000000000000E4 +:109C800000000000000000000000000000000000D4 +:109C900000000000000000000000004000C0004084 +:109CA0000200020002858200024000010000000064 +:109CB000004000A100A10001000100000000000020 +:109CC000000000A00000000000A091020002008837 +:109CD0001010830200880010080820100111901055 +:109CE0009021080288829040821008090082200991 +:109CF00004A1100800100088A0109004089000082B +:109D0000C010000000000000000000010000000082 +:109D100000000000000000000000000000C0000083 +:109D20008800000000C100000000A00001880021A0 +:109D30000000000001010000C01100000000000050 +:109D400000000000000000000000000020000000F3 +:109D500010000000900000000580000000001021AD +:109D60008011000891008000008080800041000385 +:109D7000002080880080008000008080008080209B +:109D80000020002000000000000000000000000093 +:109D90000000000000000000000000000000008043 +:109DA00002000000000000910911000000032000E3 +:109DB00000A10005000311110003808900110000BB +:109DC0000000000000000000000000000000800013 +:109DD000009000800080804000A180400080808052 +:109DE00088851180A188A00083910380C180000034 +:109DF0000589808011009000028290800000080098 +:109E000020C0800220800000000000000000000050 +:109E10000000000000000000000000000000000042 +:109E20001100410002919100418009000991110047 +:109E30004080218041000980090009A111000091A2 +:109E4000000000030000000000000000000000000F +:109E5000100002C1824088C0100088C0409008C035 +:109E6000089011C0900211C1080010C08810A1C054 +:109E70000800C0C11010848409009111850888026F +:109E8000050090418220C082000000000000000018 +:109E900000000000000000000000000000000000C2 +:109EA0000000000000000091C000000200000191CD +:109EB00000C000080120A00000C0010000C0010097 +:109EC00000C000000001000000820000000000004F +:109ED000000003020002C088C0A091902010C010B2 +:109EE000888221100111C0A0042009020004C010C2 +:109EF000080909080008C0410809030900410411C4 +:109F0000A0C0C1C0000803028402000000000000DD +:109F10000000000000000000000000000000000041 +:109F20000000000000000011100091C100000001BD +:109F3000100091C1000001024040000000880001B3 +:109F4000200083200000000000000000000000004E +:109F500000000000C100000080000000410080807F +:109F6000808040004111030888108210C1030083E3 +:109F700080880041C1830505908880C1C19000A000 +:109F800000902008410000000800918005000000BA +:109F900000000000000000000000000000000000C1 +:109FA00000000000000000000083001191890010F3 +:109FB00009031111918940000380C080400008030B +:109FC00005098011919003000000000000000000CE +:109FD000000000000000000000000000000000027F +:109FE000808080800000110008001000030200093A +:109FF00000A1808080088021000000800010800087 +:10A00000808080A1800000A10000802180000000ED +:10A010000000000000000000000000000000000040 +:10A0200000000000000000000000008000000000B0 +:10A030008280091111000300A020090009000041DD +:10A0400003801011038009108000000080000000D0 +:10A0500000000000000000000200020288109000D2 +:10A06000200110101010200010081188200282001A +:10A07000020120081010820108050808208810013C +:10A0800008101082101184009005080840A11000EB +:10A0900000000000000000000000000000000000C0 +:10A0A0000000000000000000000000900008000018 +:10A0B0000000C040000900C001001101000882003A +:10A0C00000010002008909840101C000A000020013 +:10A0D0000000000000000000000000000000000080 +:10A0E00048420000006000004842600000E00000BC +:10A0F000484200000000000048420000000000004C +:10A100004842000000000000420000000000000083 +:10A110008400008200000700000000000000000032 +:10A12000000000000000000000000000840000E0CB +:10A1300000000000410000E00000000000000000FE +:10A140000000000A500000E0000081210000000033 +:10A150000000000000000000000000000030AABA6B +:10A1600000A03CBC202020FFA0A0A0BC0020FFFF3E +:10A17000003CA0BC3C7D3C7DF0FCFFFFFCFEFCFEF7 +:10A18000D7FFC7FF55696569F0F0A5B19633333342 +:10A19000DF2055AA000000000000000000000000C1 +:10A1A0000000000000000000000000000000555505 +:10A1B0005555FFFF0F0FFFFF5555FFFF00000F0F15 +:10A1C000F0F00FF00FF0F0F0F0F0C3C33C3C00F003 +:10A1D00000FF000000000000000000000000000080 +:10A1E000AAAA00003C3C000000FFA0A0A0A0002004 +:10A1F0000020003C003C00FF307FF0D05050F0F0D9 +:10A20000C04000AA00FAAA696A695A4E0F0F9696D2 +:10A21000333310EF55AA00000000000000000000DA +:10A22000000000000000000000000000000000002E +:10A2300055555555FFFF0F0FFFFF5555FFFFFFFF0A +:10A240000F0FF0F00FF00FF00F0F0F0FC3C33C3CD8 +:10A2500000000000000000000000000000000000FE +:10A260005D550C001F140F001F140F001F14141451 +:10A270005D0C5500FF1FFF1F8F0DAF05FF5FE30053 +:10A280003C3CFE04FDFC0203BF40AF5055AAD42B5A +:10A2900096C696361FE0FF00000000000000000098 +:10A2A00000000000000000000000000000000000AE +:10A2B0000000AAAAFFFFAAAAFFFFAAAAFFFF5555FE +:10A2C0005555FF0000FF55AA55AAA5A5A5A55555AA +:10A2D00055550000000000000000000000000000D4 +:10A2E0000000555500000F000F000F000F00141460 +:10A2F000141455005500E000FF00FF0DFF05FF0F8F +:10A30000F300FF3CFF0480C07F3F807FA05F55AA21 +:10A31000F00F96C3963C00FFE01F00000000000015 +:10A32000000000000000000000000000000000002D +:10A3300000000000AAAAFFFFAAAAFFFFAAAAFFFF27 +:10A34000AAAAAAAAFF0000FF55AA55AAA5A5A5A5D5 +:10A35000AAAAAAAA00000000000000000000000055 +:10A3600000000000400080000020100240618007D3 +:10A37000002D10024061800280251002406180069D +:10A38000002D100240618006002D10024061800601 +:10A39000002D100240618006002D00020500002003 +:10A3A00000000000000000000000000000000000AD +:10A3B000000000000000406380068021920240E31C +:10A3C00080008021900240618006002D10024061D3 +:10A3D000800080210802A0000000000000000000B2 +:10A3E000000000000000000000000000000000006D +:10A3F0000000000000005F5F5755AA82AABE00005F +:10A40000000000302020000000000030202000006C +:10A4100000000F3F0F0300000000000000000000DC +:10A42000000000000000000000000000000000002C +:10A43000000000000000000000000000AA00AAFFC9 +:10A44000553F55300000FFFF000000A00000000055 +:10A450003C3C3C3C82F0BEF00000000000000000EC +:10A4600000000000000000000000000000000000EC +:10A47000000000000000000050505455AA02AAFE3F +:10A4800000000000003020200000000000302020EC +:10A49000000000000F3F0F0300000000000000005C +:10A4A00000000000000000000000000000000000AC +:10A4B0000000000000000000000000000000F000AC +:10A4C000F0FF553F5530F03CF03C000000A000008C +:10A4D0000000FF000F0F82F0BEF00000000000003F +:10A4E000000000000000000000000000000000006C +:10A4F00000000000000000000000AC0CAC0C00F0FC +:10A5000055F00000000000A000301400A0F0A0A052 +:10A510000000000000000F030F03C0F0C0F00000B7 +:10A52000C0C00000000000000000000000000000AB +:10A53000000000000000000000000000000000001B +:10A54000F0FF3C3CBE14BE140CFC0FFF00000000EA +:10A55000400000004DCF4D0C3A3A3A3A000000005E +:10A5600000000000000000000000000000000000EB +:10A57000000000000000000000000000FC5CFC5C2B +:10A58000AAF0FFF00000000000A000301400F5F079 +:10A59000FFFF5F5F000000000F3F0F3FFCF0FCF08B +:10A5A000FFFFCFCF0000000000000000000000000F +:10A5B000000000000000000000000000000000009B +:10A5C0000000F0003C3CBEBE14140CFC00F0800007 +:10A5D0008000400000004DCF4D0C303F303F000068 +:10A5E000000000000000000000000000000000006B +:10A5F000000000410000000000110002A00800045B +:10A6000000000004000400000000002020200000E2 +:10A610000000000400000002002100030084400349 +:10A6200000000003000000000000000520000003FF +:10A630000000000000020000000000000000100008 +:10A640002100000000020000000000000080200047 +:10A65000880000000000000000000800000020004A +:10A660002000000000000000000000000800400082 +:10A6700000000000000000000000000000000000DA +:10A6800000000000000100000000000000010001C7 +:10A6900000000000008200000000000000000040F8 +:10A6A00000000000000000000000000000000000AA +:10A6B000000000000000000000000000000000009A +:10A6C0000000080000000000000000000000001072 +:10A6D00000000000000000000000000080000000FA +:10A6E00000040000000200000000000000008000E4 +:10A6F00000000000000000000000000000000882D0 +:10A700000002000000000000000000000000A000A7 +:10A7100000000003000000000000008003000000B3 +:10A72000048000000000000000000041000800005C +:10A730000000000000000000000000000000000019 +:10A74000000900000005000900000003000290025B +:10A7500000000000000090410041000000000000E7 +:10A760000100001000000000000000000000004197 +:10A770000000000000000000008800000000000051 +:10A7800000040000000000840000000000000088B9 +:10A790000084000800000000000000000020840089 +:10A7A0000000802000000000000000000000000009 +:10A7B000008400C000000000000000000000000451 +:10A7C0000004000000000000000000000000000184 +:10A7D00000110000000000000084001000000000D4 +:10A7E0000010081000000000000000000000000041 +:10A7F000000000000000400300000000000300080B +:10A8000020A1202000044000008089000009884128 +:10A8100000034008C1000000000588000100000896 +:10A820000008002008000000C021C000C000000097 +:10A8300000090409000000000400000800030000F3 +:10A8400000000000002100000000000000000000E7 +:10A850000000000090099000004100000008000086 +:10A8600000000000000000000000002000000008C0 +:10A87000002100030002000900001188000000848C +:10A8800009008020800540C04100000420840004AD +:10A8900000A000A040820420000000000000400052 +:10A8A0000000210005A10804000200820000000051 +:10A8B0000000000000840000000000000000000014 +:10A8C0000000000000000000000000000000000088 +:10A8D00000000000000000880000000800000008E0 +:10A8E00000A00000000000000000000000080000C0 +:10A8F0000008002000000000000000000000000030 +:10A9000000000000008000210000000000000000A6 +:10A910000000000000000400000000000000000033 +:10A920000000010000000040018000000003000062 +:10A930000000000400040004000400000000000007 +:10A9400000000000000000000000000010000000F7 +:10A950000000000000110020004100200000000065 +:10A9600000000000000000000000080000000000DF +:10A970000000000000000100004108210300400029 +:10A98000000040000200020400000040008400209B +:10A990000020000000C0000080080000001000A09F +:10A9A0000000000004C0000400C1024000000000DC +:10A9B0000000000000000000000000000000000097 +:10A9C00000000082000000000000000800000000FD +:10A9D0000000000000000000000000000000000077 +:10A9E00000000000000000000000000080000000E7 +:10A9F0000000000000A000000800000000A000000F +:10AA00000000000000000000900001A000204005B0 +:10AA1000010590000000000000030080008000108D +:10AA20000040000000040200008002000203000059 +:10AA300000210002000000200000000000000000D3 +:10AA400000000000000000000000000800000000FE +:10AA500000000000000000000000000000000000F6 +:10AA60000041000008000000000000000008000095 +:10AA70000008000000000000000800000000820044 +:10AA800040000084008440900904098804044004C4 +:10AA90000220202040040090008840A021200020B7 +:10AAA00000820000200000049120214080008804E2 +:10AAB00040000000000021880000000000A000000D +:10AAC000000000000000000800000000000000007E +:10AAD0000000200000000000008800000000008846 +:10AAE00000000000000280000000000000200020A4 +:10AAF000000000000000000002000000000000A0B4 +:10AB000000000000200020002000000020040020A1 +:10AB100000080000000020000000000400030008FE +:10AB200000000000402040000000008000A00180E4 +:10AB300041000000000000210000000000000000B3 +:10AB400000000000000000000008000000000000FD +:10AB500000000000000000000000000000090000EC +:10AB60000011000000110041004100410000000000 +:10AB70000000000000050003000800210011000093 +:10AB80000000080000000000000000840000000138 +:10AB90000001020000000000800000000000000032 +:10ABA000000000000010000400000000054000410B +:10ABB00002408200000000000000000000000000D1 +:10ABC0000000000000000000000000000000000085 +:10ABD0000000000000000000000000000000000075 +:10ABE0000000000000000000000000000000000065 +:10ABF00000000000000000000000000000000084D1 +:10AC0000000400A080840000000000000000A003F9 +:10AC10000883008910A1000100000001000084C029 +:10AC2000000800848802000001000000000088C0C5 +:10AC300090888808108200000000000000000000DA +:10AC40000000000000000000000000000000000004 +:10AC50000000000000000000100200C000A088C03A +:10AC600000000400000000010000000000000000DF +:10AC7000021000C0001010040000000000000000DE +:10AC8000021010C000401090000000000000000002 +:10AC90008041001000918003004100080011002055 +:10ACA000008000000080008000000800000000001C +:10ACB0008080800080808080000000000000000014 +:10ACC0000000000000000000000000000000000084 +:10ACD0000000000000000000000000000000000074 +:10ACE000000000090009000400030000000000004B +:10ACF00000001100000000800000000000000000C3 +:10AD0000000009008000008000000000000000003A +:10AD100000000400021120000511090009000400D0 +:10AD2000041100000000800000800000000000000E +:10AD30000000000080000080808000000000000013 +:10AD40000000000000000000000000000000000003 +:10AD500000000000000000000000000000000004EF +:10AD600080800000800000008000004100000000A2 +:10AD7000000000008000000400808000000000004F +:10AD80000000000080000009008280000000000038 +:10AD900000000000010200010188000000A0000086 +:10ADA0000100000084000400100004900000000076 +:10ADB00000000000000082008888C09000000000B1 +:10ADC0000000000000000000000000000000000083 +:10ADD00000000000000000000000000000008400EF +:10ADE0000000A008100008A0A0000800A0010000BA +:10ADF00000000000000008001084C04008C00000EF +:10AE000000000000000040001088C082080200001E +:10AE10000000000000008402010403C082880000DA +:10AE20000100010000001004000890C082880000AA +:10AE300000010001000100000088009088C00000AF +:10AE40000000000000000000000000000000000101 +:10AE500000000000000000000000000000000000F2 +:10AE600008000088000210040000000800C000A0D4 +:10AE70000000000000000000C008002084880208D4 +:10AE8000000000000000000091C000200888881029 +:10AE90000000000000000000000011800500880094 +:10AEA0000000110010000000800000808000808001 +:10AEB00000000002000200080000000500858084F8 +:10AEC0000000000000000000000000000000000082 +:10AED0000001000000000000000000000000000071 +:10AEE0000000800000000000000000002180090038 +:10AEF000008000000000000000008380008000004F +:10AF00000080000000000000000041000080800080 +:10AF100000000000000000000000A08091028509F0 +:10AF200005030980050009000808000000C10000B1 +:10AF3000000000000000000000008011008280007E +:10AF40000000000000000000000000000000000001 +:10AF500000000001000000000000000000000000F0 +:10AF600000000000000080000000800021040211A9 +:10AF7000038009000000000000000000001000092C +:10AF80000000000000000000000000000010008829 +:10AF9000000000000000000000000000C1A08200CE +:10AFA0009001910100A0000001000101000000A03B +:10AFB000008400000000000000000000C00188883C +:10AFC00040881000000000000000000000000000A9 +:10AFD0000000000000010000000000000000000070 +:10AFE0000000000000008800A010C004A0000100C4 +:10AFF0000104014000000000000000000000880083 +:10B000008802040210000000000000000000200080 +:10B0100088100410020000000000000000008421DD +:10B0200000E007000000410000E000000000000612 +:10B030000000070000000000000000000000000009 +:10B0400000000700000000000000000000000000F9 +:10B0500000000000000000000000000000000000F0 :10B0600000000000000000000000000000000000E0 -:10B07000818100E0070000000000000000004100A6 -:10B080000042000007000000000000000000000077 -:10B09000480000E007004100000000000000000040 -:10B0A0000F0F0F0F00000000FFBF0020F000000096 -:10B0B000000000000000000000000C0000C00000C4 -:10B0C000C342C3420002009BC90000000F9F4FDF34 -:10B0D00022001100201040800000221100002211E7 -:10B0E0000000064206DB0000000000000000000037 -:10B0F0000000FEBC082C033F033F000000000000DE -:10B100000000C3C3C3C30000FFFF00000000000035 -:10B110000000008D3C8D8100E7FF00000000000072 -:10B1200000000F8D998D66FF66FF7C3C1C3C000083 -:10B130000000000000000000000000000C0000C043 -:10B140000000C342C3430002009BC90000000090FE -:10B1500040D000220011040802010000000022116A -:10B16000000022119F429FDB000000000000000051 -:10B1700000000000FEFE08088181BDBD0000000047 -:10B1800000000000810081C30000F90900000000F8 -:10B1900000000000C38DFF8D0303F3F300000000E7 +:10B07000000000000000000A0000000000000000C6 +:10B080000000000007004200000000000000000077 +:10B090000000000007004800000000000000000061 +:10B0A00066F03CFFF3306666000000000000000020 +:10B0B00000000000FBB9622000000000000000005A +:10B0C0003CF0663CFFF06F6F0000000000000000E5 +:10B0D0000000000000000000000000000000000070 +:10B0E00000000000000000000000E7816F09000080 +:10B0F0000000000000000F00000000000000000041 +:10B10000000000000000000000000000000000003F +:10B11000000000000000000000000000000000002F +:10B12000000066F03C0072726666000000000000DD +:10B13000000000000000FBFB2020000000000000D9 +:10B1400000003CF0663C0F00606000000000000062 +:10B1500000000000000000000000000000000000EF +:10B16000000000000000000000000000E781660011 +:10B1700000000009000000000F00000000000000B7 +:10B1800000000000000000000000000000000000BF +:10B1900000000000000000000000000000000000AF :10B1A000000000000000000000000000000000009F :10B1B000000000000000000000000000000000008F :10B1C000000000000000000000000000000000007F :10B1D000000000000000000000000000000000006F :10B1E000000000000000000000000000000000005F :10B1F000000000000000000000000000000000004F -:10B20000000000000000000000000000000000003E -:10B21000000000000000000000000000000000002E -:10B220000000000000000000FFEF0000060C0024FA -:10B230000024000C0C0C00000000000000000000C6 -:10B240000000000000000000D200041C041C0000EC -:10B250000000818181810082001401080204000045 -:10B260001400001400A00005000C000CFF996600FB -:10B27000000000000000F0F07F7F767F0008FFFEF6 -:10B28000000000000000000000FF00FF00FF00FFC2 -:10B2900000000000000000000000FFFF00C33CFFB2 -:10B2A000000000000000000000000010000000008E -:10B2B00000240024000C0C0C000000000000000022 -:10B2C00000600060202020200000D200C7DFC7DF20 -:10B2D000C066006683818381820014008010402054 -:10B2E000000082000082A0000500919D919DD2D2B5 -:10B2F000D2D20000000000000F0F404046403C0842 -:10B300003CFE00000000FFC3FF3C3D3D7F7F9B9B58 -:10B31000999900000000000000006FFF6FFF00E33C -:10B320001CFF0000000000000000006140268019A2 -:10B33000000000610023801500A005610A09850551 -:10B3400000A00061002E000D00000061002D8009AA -:10B3500000000061002D800D00006061000180018F -:10B360001000000000610006000D08000000000051 -:10B3700000000000000000000000000100610A2D34 -:10B380008505000000610006000D00010000002896 -:10B3900000100000000000000000000005610A0D20 -:10B3A000850900A000000000000000000C000C0057 -:10B3B00000003C3C000034200080008300000000BE -:10B3C0000A0A00000000000000000000F0F0F08019 -:10B3D0000000F0FF0000A0000000FFFF00030000DD -:10B3E000000C000000000000000028000000000029 -:10B3F0000000000000000000000000000000CFC3BB -:10B400000C0000FF0000000000002CEFFFFF000018 -:10B410000000000000000000000000000000C3C3A6 -:10B42000C3C3FB51AA0000000000000000000C0094 -:10B430000C0000003C3C000034200080008302022D -:10B440000000020202020080000000000000F0F094 -:10B45000F0000000D0D7000000000000FFFE000355 -:10B460000000000C00000000000000000808280098 +:10B2000000000000000002102000008810840000F0 +:10B2100000000000000002102000008810840000E0 +:10B220000000000000002D2D00FF000000000000C5 +:10B23000000000000000427E3F3F6E4E6E7E000028 +:10B240000000000000000F663C0FFF660FFF0000CB +:10B2500000000000000000000000000000000000EE +:10B2600000000000000000000000000000000000DE +:10B2700000000000FFFFFFFF0000000000000000D2 +:10B2800000000000000000000000000000000000BE +:10B2900000000000000000000000000000000000AE +:10B2A00000000000000000000F0F0F0F0000000062 +:10B2B0000000000000000000427E03036242627250 +:10B2C00000000000000000000F663C0F00660F0049 +:10B2D000000000000000000000000000000000006E +:10B2E000000000000000000000000000000000005E +:10B2F000000080000000FF7EFFFF000000008000D3 +:10B30000000000000000000000000000000000003D +:10B31000000000000000000000000000000000002D +:10B3200000000000000000000000A0610024800573 +:10B3300000000061000480050000000050200000B3 +:10B34000000000610006000D00001061200E004D9D +:10B3500000080000000000000000000000000000E5 +:10B3600000000000000000000000000000000000DD +:10B370000000000000000000000000000061000666 +:10B38000000D0000000000000000000000000000B0 +:10B3900000000000000000000000000000000000AD +:10B3A000000000000000000000000000AF3C053C71 +:10B3B000000000007D410F0F0000000000000000B1 +:10B3C0000000000000000000FF0F0000000000006F +:10B3D000FF5F0050000000000000000000000000BF +:10B3E000000000000000000000000000000000005D +:10B3F000000000000000000000000000000000004D +:10B40000000000000000000000000000000000003C +:10B41000000000000000000000000000000000002C +:10B4200000000000000000000000000000002D3CB3 +:10B430002D3C000000003F030F0F00000000000043 +:10B4400000000000000000000000FFFF00F000000E +:10B450000000FF5F0050000000000000000000003E +:10B4600000000000000000000000000000000000DC :10B4700000000000000000000000000000000000CC -:10B48000CFC34D4100FFFAFA000000000000D310C6 +:10B4800000EA00AA00000000000000000000000028 :10B4900000000000000000000000000000000000AC -:10B4A000FFFFFF50FB51FF550000000000000000AF -:10B4B000AA55000020D020D083038303FFFF0000A3 -:10B4C0000000000005005555000000F000000000DD -:10B4D000FF3FF5350F0A05001FBF00000000000008 -:10B4E00000410000100010000000FFE6AFAB28FF95 -:10B4F00020FF00000000000000000000000000002D -:10B5000000008202C3437D2D282D000000000000B2 +:10B4A000000000000000000000000000000000009C +:10B4B0003C3CFF00C7CFF7FF3F3F7D41C7EFD7FFC1 +:10B4C000000000000000000000000000000000007C +:10B4D000000000000000000000000000000000006C +:10B4E000000000000000000000000000000000005C +:10B4F000000000000000000000000000000000004C +:10B50000000000000000000000000000000000003B :10B51000000000000000000000000000000000002B -:10B5200000003CBE00000303555500000000000071 -:10B5300000005A55000020D020D0838383030514D7 -:10B5400000000000030014005555000000F000004A -:10B550000000000000000F0A05000B010000800041 -:10B560000000004100001000100000000F060F0B4B -:10B57000AAFFAAFF00000000000000000000000079 -:10B5800000000000020243435505000500000000D2 +:10B52000000000000000000000000000000000001B +:10B5300000000F0F55550008303803037D410028E7 +:10B5400010380000000000000000000000000000B3 +:10B5500000000000000000000000000000000000EB +:10B5600000000000000000000000000000000000DB +:10B5700000000000000000000000000000000000CB +:10B58000000000000000008000000000000000003B :10B5900000000000000000000000000000000000AB -:10B5A000000000003F3F0000FFFFFFFF01004100DF -:10B5B000A000908400000180208021809100C100C3 -:10B5C000208001002000200020000002A020400078 -:10B5D00020804180000005008800208000200100BC -:10B5E000110088082180210021000404000340C0CC -:10B5F000200888002000000020008400880040000F -:10B6000085008804890020002000200441000500F6 -:10B61000A100C105218000008400840404080111F8 -:10B6200089000080848020002100200820802000E4 -:10B630002040400021044100040440042020200256 -:10B640002000090420004000400000A0200040A18C -:10B65000210000020402000004002000A0022120BA -:10B66000200040004000040204000400000000002C -:10B6700040104000039021000000410020A0200065 -:10B68000000008C0000108000000000000400800A1 -:10B690002000200020402002000040400020000048 -:10B6A00020042000000441040008200000000010D5 -:10B6B000010001000200000000000000084008082E -:10B6C0000200020000000000080002000800021052 -:10B6D000030000000000820001028300010000104E -:10B6E00010008200080000002040204004049090D8 -:10B6F0000000002002410041008005800008080091 -:10B7000008410000010088000020200020002000E7 -:10B7100008A0000000000000001000000000000071 -:10B720000000020002000000080000008204010086 -:10B73000040004000488000820000000000000004D -:10B740000000000000000500000000C000840000B0 -:10B75000000820000082400404042008208404081B -:10B7600000844090098800020000C000C00000056D -:10B77000090400000008000020004020A00400C0D0 -:10B780000008000000080440000400098500800053 -:10B79000809020050008008400000008008400401C -:10B7A000000800840084000800100084008200006B -:10B7B0002000850800000041040001082108000065 -:10B7C0000421A00001000108008084800100000025 -:10B7D00001208800A005040282008221824100032A -:10B7E000900010090000110400004041881000057D -:10B7F0000003000800000080028282000080000830 -:10B8000001044109A041900000208421004040082B -:10B8100000008404400800004000880800008803FD -:10B8200008000002844000400003000800020103F9 -:10B8300000100090402003001020880004008400C5 -:10B8400041009100080004000400092005020420C2 -:10B85000090204000400400080822100080805A0BD -:10B86000030000A010000000400900024182000017 -:10B8700041A041A010A0000005208010030000207E -:10B8800000000404048200000000410100000300E5 -:10B89000200000002100000000A04182008421005F -:10B8A0004100C10021A008000383080003880001B3 -:10B8B0002000000000044001204184008203820037 -:10B8C000820082000000C0048200820082008200A8 -:10B8D0008204040040000100000082212004401086 -:10B8E00004054008412004040440044084208402EC -:10B8F000002104000000C190000004004080040406 -:10B90000A00000008400000908050000A005828551 -:10B910000804018441008400000008002000C000E9 -:10B92000C000000008000800080000000003A0009C -:10B930000400C000840082212000A19000A0080023 -:10B94000038403C0000021000088008203080084F3 -:10B950000000400083004000040021042184838211 -:10B960000390808210A0200088C08484C0A004407E -:10B970002083008203881084040300002100410416 -:10B98000100120100404030404208420048804828D -:10B99000212011900402048400004040008200082D -:10B9A0000340000000000300080000000090218216 -:10B9B00021000300000000002100A1004000000061 -:10B9C00009000000200020082000040000002020C2 -:10B9D000C0040480202100A000208320040008006F -:10B9E000C1200503C02004218202C000C008090054 -:10B9F000040804020200C00082408200000082C1EC -:10BA000000A00104820400002000C000000000002B -:10BA1000C00800201000C021000084214002110055 -:10BA20000810084000000040840882009003A00035 -:10BA3000084000038208C08820C082204004100013 -:10BA40000000200000008004900480088088000826 -:10BA5000800310898510000000414109400511084C -:10BA60000500041120000500090000051000001069 -:10BA700004008804858800100504214002000000AD -:10BA80000810032104040009000000000888410890 -:10BA90000010000005A1102009104000050040C062 -:10BAA0002000110111000088000800020890090020 -:10BAB00008000000000000000004C002050421048A -:10BAC0000000820882008200820008000400000456 -:10BAD00020008400821183008211A010100800034E -:10BAE0002020010000004009A040C0110000880093 -:10BAF0008404004140048804822188210008100049 -:10BB0000000020840108051010A184850400400075 -:10BB10000421842000118408044000000082850272 -:10BB2000828000050021200200048405C0214021FC -:10BB3000C000820882000800080000210000A01058 -:10BB40008800000000A00000110011001108A100F1 -:10BB50000040800040002108041002000002200282 -:10BB600000008901200000884140100011884184B4 -:10BB7000108408011100418900012100048811840A -:10BB80000200000009052004200420040004000233 -:10BB900040008300030303900800210204020420F4 -:10BBA0000420042011101008800000010000000093 -:10BBB00000000000400010000000000041020000F2 -:10BBC0000010000000000000010000000000000064 -:10BBD0000000000003A19185101010102004012026 -:10BBE0008820C01000004100C000000000000300D9 -:10BBF000A1000000000040009000000000010000D3 -:10BC000091000001000000100210008800400204B2 -:10BC10002011000882A01088A002011082100302E7 -:10BC200000A001890808001009A105020002009087 -:10BC3000000200820010A0081108040840880001DA -:10BC400090004001000108000000400000000000DA -:10BC500000000900000089102108110980100980E6 -:10BC60002180000080000000030010000000080098 -:10BC700002000300090000000300900000000340E0 -:10BC80000821021100200000008000001080000048 -:10BC90000900800800098005808000800200800083 -:10BCA000A18500104010802000912102858300882A -:10BCB000000000800000008088801000918000005B -:10BCC000082008408210001000050080004000009D -:10BCD00000400000000500009185830589C0100820 -:10BCE00000008084800900A0401010800203400002 -:10BCF00020080880410820801082090009032002E2 -:10BD00000904080020040800000080050080800865 -:10BD1000008000008040800900008000800000104A -:10BD20008000000980038004808011C009000303A3 -:10BD300020400000000000000000000800218003F7 -:10BD40008000034121004005402100000020000048 -:10BD50000008000000200000000208C020208882A7 -:10BD6000204090024005A0C1C0040101010401016E -:10BD70000140000101020001000400850090000163 -:10BD80000083900191820001918200000200A0C016 -:10BD9000A000C00220004091A0C190820400109039 -:10BDA0000401900804002041A08910C00011000087 -:10BDB00000010185000000000000000010002000CC -:10BDC00082A0040020918800A00083A1010040000F -:10BDD00040000000000004000800000088822010DD -:10BDE000411190A004910082041009030001020097 -:10BDF0004001010100002000900101000001040049 -:10BE00004000000000000401040100000000A04008 -:10BE1000040010820920C0900008040241C004827E -:10BE2000828240201010C104040209080388900196 -:10BE3000400091000201C0000000000002008203E7 -:10BE400008A0004182A000002000000100011000B5 -:10BE500000008000400020008000000005000582F6 -:10BE6000092102214020408800A18010A004050281 -:10BE7000801100020204084000040002410305088A -:10BE800080410020401004054008032109050000FE -:10BE9000090080000000C1000580000080008900CA -:10BEA0008880000000008500C00000809100200014 -:10BEB0000021881008034005800000000000800079 -:10BEC00000880085001091A0000583050308200567 -:10BED00000200041000000000000000400110000EC -:10BEE00020212082108391098311208240002000AC -:10BEF000008000040000000400000009001100118F -:10BF00000883200241001005001000090080001085 -:10BF100000000011009000008000000000840091EB -:10BF20008000000000110080000080048089000073 -:10BF300080004002031111210303000000000000F3 -:10BF400000000008802080008000210220041021D1 -:10BF500005030000000100000000000000000000D8 -:10BF6000000085C110A010080200820020A01188E6 -:10BF700041000040000100000001008400000001B9 -:10BF80000000018200000000000000000010000816 -:10BF900000010000000188200002040004000802E3 -:10BFA0008885020000000010008400A0840102A027 -:10BFB00008040400008900010001000100000000E5 -:10BFC000000000000400204008888200010900C130 -:10BFD00000410000000000E007004100000000E018 -:10BFE00007000000000000E0070042000000000021 -:10BFF0000700000A000000E007000000000000E069 -:10C0000007000082000000E007000000810000E05F -:10C01000070000000000000000E007008206480062 -:10C0200000E007000000000000E0070000008100C1 -:10C0300000E00700600A810000E00000000000004E -:10C04000000000004100000000E00000000000428D -:10C0500000E0070082000000000000000000000077 -:10C0600000000000000005CF05C0F0530053AF0CE6 -:10C07000AFFC3CF03CF000000000000000000000BD -:10C0800000000000000000000000000000000000B0 -:10C090000000000000000000C300C300C300000057 -:10C0A000F350035053F05300000000003A3AAA3C0A -:10C0B0000001003D01000B0A00000000000000002C -:10C0C0000000000000000000F07DFFFF0C28CFEB17 -:10C0D0000000000000000000000000000000000060 -:10C0E0000000000000000000F5CFF5C0FF530F5323 -:10C0F000A00CA0FC00AAFFAA0000000000000000A5 -:10C10000000000000000000000000000000000002F -:10C1100000000000000000000000C300C300C300D6 -:10C120000000F35F035F53FF530F000000003A3A33 -:10C130003C3C00C100FD01050B0F000000000000A9 -:10C140000000000000000000000000000F8200005E +:10B5A000000000000000000000000000200020114A +:10B5B0002011000000000000001184400000000085 +:10B5C000000920000000000000040000000000024C +:10B5D0000000010400910080000400040000000449 +:10B5E0000000000200000008001000080003000036 +:10B5F000000000000000000500000008000000003E +:10B60000000000000000000000000000000000003A +:10B61000000000000000000000000000A004100076 +:10B620000000000000000000000000000880000092 +:10B630000000000000000000000000000009000001 +:10B6400000000000000000000000000000000000FA +:10B650000000000008000020004000000000000082 +:10B6600000000000000000000001000000010000D8 +:10B6700000000000000000000000000000000000CA +:10B680000000000000000000210000000000000099 +:10B69000000000001000000000000000000000009A +:10B6A0000000000200000000404000000000801088 +:10B6B0000000000008000088000000800090088062 +:10B6C000400010000000000088094004000800004D +:10B6D000000300030400000000000000000000C0A0 +:10B6E0000021000000000000118811801189110460 +:10B6F0000000000002000000000000000000000048 +:10B700000020020010000000000000000000000205 +:10B710000200000000000000000000000000000027 +:10B7200000000004000000040000000000400000D1 +:10B73000018000000082001000400010000400049E +:10B74000000405000008008800C000088008000010 +:10B7500000040000000480040082000000040008CF +:10B7600000200040000800000084A005A004A00400 +:10B77000A0010000001000000010001000100000E8 +:10B780000010000100000008000000000000004060 +:10B790000000000000000000000000840000000025 +:10B7A0000010000000040008000400080000000170 +:10B7B0000004081000100000000000000004004019 +:10B7C0004040881100080200000040000005000011 +:10B7D00000029000890000009100000000000005B8 +:10B7E00004000000840500009002000900A1000888 +:10B7F00000840000000000000000000000080005B8 +:10B800000000000000000008000000080021000502 +:10B8100000004000000000080000200000080000B8 +:10B82000A0000000400004000400000040210200CD +:10B8300000000005040500000000000000000001F9 +:10B840000000000011000000800000000000000067 +:10B8500000000000000004000000040000000008D8 +:10B8600000A08002000000000000009000A000087E +:10B8700000010008000000000000000000000000BF +:10B8800000000000000000000000000000000008B0 +:10B890000000001000020010000000000000000086 +:10B8A00000000020000000C000A0200000A000C098 +:10B8B00000002000000000C0A02000080008014196 +:10B8C0008205C00500080400100500000003000800 +:10B8D000000000410100400000050000000000C120 +:10B8E000A008A021A0000940000000000000000006 +:10B8F0000084010001200020000000200010004111 +:10B900000000000000000000000000000000000037 +:10B910000000000000000000000000000000000027 +:10B9200000000000002000000000000000000000F7 +:10B930000000000000000000001000904100000026 +:10B94000080000000000118241000000000000C05B +:10B95000200000000000080080000020050000001A +:10B96000000241A10900000840010082008400009B +:10B970000000020804080485030100000000000024 +:10B980000000000000000000000000100082000025 +:10B9900000000000000000000000000000000000A7 +:10B9A0000000000000000000000000000000000097 +:10B9B000000000000900090000080901820084005D +:10B9C000A00000000021A00000000000C00000094D +:10B9D0000000000020000041000000000080051170 +:10B9E00000200421001002000400000000020011E9 +:10B9F00000020009000000000000008800000000B4 +:10BA00000000002100000000000000000000000015 +:10BA1000000000000004000000000000000800001A +:10BA20000000000000000000000000000000000214 +:10BA300000000000000000000000000008000000FE +:10BA400000C00088000040C000040004090000C0DD +:10BA5000200000C0050000C0009000001100002080 +:10BA60000800002100000000000080A000100090ED +:10BA70000000000000000000000000840009000039 +:10BA800000000000000000000000000000000000B6 +:10BA900000A0001000840000000000000008000862 +:10BAA00000000000000000000000008200A000A0D4 +:10BAB0000000000000000000008400842084A084B6 +:10BAC0001000820502000800002100200000002074 +:10BAD0002002000200000000002000000000000022 +:10BAE00008200800082100000188010401000089E5 +:10BAF000010000400180080000A1000800000000D3 +:10BB000000000021000000410000000000000000D3 +:10BB1000000000030000000000000000000000081A +:10BB200000000010200000000000000000000000E5 +:10BB30000000000000000000000000000000000005 +:10BB4000008000000000004000000000000800002D +:10BB500000000000000000040000000000000000E1 +:10BB60000000000900000008410804204000048291 +:10BB70000308080005000202000000200001050083 +:10BB800000000000000000000000000000000000B5 +:10BB90000000000000000000004000000000004025 +:10BBA0000000000000000000000000000000000095 +:10BBB0000000000000000000000000000000000085 +:10BBC0000000001000080008000400080240842063 +:10BBD00000A0044000000000000000000000000081 +:10BBE000840000004190C0880210820800C001401B +:10BBF0001002209000000000000000000101010080 +:10BC0000C001000000000000000000000000000073 +:10BC10000000000000000000000000000000000024 +:10BC20000000000000000000000000000000000014 +:10BC30000000000000000000000000000000000004 +:10BC40000000000000000080008000800080800074 +:10BC500000001080800000000000000000000005CF +:10BC60001002800000408800210000808080028057 +:10BC700020808080000000000000000000001141D2 +:10BC800009218908000800000000000000000000F1 +:10BC900002000000000000000000000000000000A2 +:10BCA0000000000000000000000000000000000094 +:10BCB0000000000000000000000000000000000084 +:10BCC00000000000000000000000000200800000F2 +:10BCD00000090085808500000000000000000000D1 +:10BCE0000000000000000083000000098004000044 +:10BCF000030088080820C1884100100305201000B7 +:10BD0000090041000011418900000000000000000E +:10BD10000000000080008000000000000000000023 +:10BD20000000000000000000000000000000000013 +:10BD30000000000000000000000000000000000003 +:10BD400000000000000000000000000000400010A3 +:10BD5000000082001002848282029000000008002D +:10BD600000000040000000000010900020001005BE +:10BD7000840088008300C101C1900000010001001F +:10BD800000900000004000010105000000000000DC +:10BD90000000000002001000400010000000000041 +:10BDA0000000000000000000000000000000000093 +:10BDB0000000000000000000000000000000000083 +:10BDC000000000000000000000000000040000006F +:10BDD0000000820090200890000203A000000000F4 +:10BDE00000000000000000000100000004840004C6 +:10BDF000000508A04020A00890200282000000005A +:10BE000000000000000100004100010100000000EE +:10BE10000000000000000000000000000000000022 +:10BE20000000000000000000000000000000000012 +:10BE30000000000000000000000000000000000002 +:10BE40000000000000000000000000000000800072 +:10BE5000000000000000000080000080C1800000A1 +:10BE60000000000000000011401005091110000939 +:10BE700000100008008280918021801080910000D5 +:10BE80000000000000004008000009081141000007 +:10BE900000000000000000000000000000000000A2 +:10BEA0000000000000000000000000000000000092 +:10BEB0000000000000000000000000000000000082 +:10BEC0000000000000000000000000000000000072 +:10BED00080008000800080008000000000000000E2 +:10BEE0000000000000000000214008004100400068 +:10BEF0000002804000808000419100908800204036 +:10BF000080000000000000084182110808001110A4 +:10BF10000000000000000000000000090000000018 +:10BF20000000000000000000000000000000000011 +:10BF30000000000000000000000000000000000001 +:10BF400000000000000000000000000000000000F1 +:10BF500000000400080004000800040082044004FB +:10BF6000400000000010000000000100010000007F +:10BF700000008400A089C090820011912088A1C097 +:10BF80000801C01000008800820101880100000043 +:10BF90000001000000000000000000000000001090 +:10BFA0000088000000000000000000000000000009 +:10BFB0000000000000000000000000000000000081 +:10BFC0000000000000000000000000000000000071 +:10BFD00000C000000000000000000000410000E080 +:10BFE0000000000A00000000000000000000000047 +:10BFF0000000000000810000070000000041000078 +:10C00000070000000000000000000000008100E0C8 +:10C010000700002100000000000000000000008177 +:10C020000000070000000000000000000000000009 +:10C030000000000000000000000000000000000000 +:10C0400000000000000000000000000000000000F0 +:10C05000000000000000FFF80000000000008282E5 +:10C0600082825F435F430000000000000000000088 +:10C0700000000000000028FFA0F520E02FEF3C3C6E +:10C080003C3CF0F0F0F03333F0F000000000000032 +:10C0900000000000000000000000000000000000A0 +:10C0A0000000000000000000000000000000000090 +:10C0B0000000000000000000000000000000000080 +:10C0C0000000000000000000000000000000000070 +:10C0D0000000000000000000FFC800000000000099 +:10C0E0002C0CECFF00005F4300000000000000008B +:10C0F000000000000000000000D7A0F52020EFEFB6 +:10C10000F000F0FF3C003CFF33330F0F0000000055 +:10C11000000000000000000000000000000000001F +:10C12000000000000000000000000000000000000F +:10C1300000000000000000000000000000000000FF +:10C1400000000000000000000000000000000000EF :10C1500000000000000000000000000000000000DF -:10C1600000000000000000000000808C838F0F0F93 -:10C170003C3C7F7C7370F0F000FF0000000000008A -:10C1800000000000000000000000000000000000AF -:10C190000000000000000303CDCD00000F0F0704D6 -:10C1A000000000000252A2F220340014FF350035D6 -:10C1B0007F3E6B2A000000000000003C14D4000009 -:10C1C000000000003E3CFEFF000000004103EBF3D6 -:10C1D0005F5F0A0A000000003D3C0500000000000F -:10C1E000000000000000000000000000B0BCB3BF71 -:10C1F000FF0055554F4C4340AAAAC3C3000000009E -:10C20000000000000000000000000000000000002E -:10C21000000000000000000000000101000000001C -:10C220000704000080000757A7F72034283C0000CF -:10C230000000571643020F0F82BE2020202017D780 -:10C24000000000000000343C040000000000C303B4 -:10C25000C3F3BE14BE14000000003C3C00000561A6 -:10C260000A0F050D00A005610A0F050D00A08561EC -:10C270000A0F051D00A085610A0E050D00A10561CC -:10C280000A0F050D00A005610A0F050D00A005614C -:10C290000A0F050D00A005610A0F850D00A0000022 -:10C2A00085610A0F050D00A185654A0AC50D00A02C -:10C2B00005610A0F051D00A005610A0F850D00A08C -:10C2C00000610007800D0000000000000000000079 -:10C2D00000610007001D00000061002F000D01A09B +:10C16000000028287D75FFFFFFFF0000000028EB7E +:10C1700028EB00000000000000003535353C8FFF43 +:10C18000CFFFFFC34D4D3F037D7D00000000000049 +:10C19000000000000000000000000000000000009F +:10C1A0000000000000000000DFD7CFC30000000047 +:10C1B000000000000000000000000000000000007F +:10C1C000000000000000000000000000000000006F +:10C1D00000000000000000000000000043FF40FFDE +:10C1E0000000000028285575FDFD7DFF00000000BF +:10C1F00028EB28EB000000000000000035353C3C37 +:10C200000D000C003C004D4D3F034141000000007B +:10C21000000000000000000000000000000000001E +:10C2200000000000000000000000CFC3EFC30000CA +:10C2300000000000000000000000000000000000FE +:10C2400000000000000000000000000000000000EE +:10C2500000000000000000000000FFFFFFFF0000E2 +:10C2600030000000000000613007800D0000000079 +:10C2700000000000000100610006000D00000061E8 +:10C280000026000D000000615026000D0008A0618E +:10C290000006000D000005000A29050000A00000AE +:10C2A000000000000000000000000020000000006E +:10C2B000000000000000000000000000000000007E +:10C2C000000000000000000000000000000000006E +:10C2D000000000000000000000000000000000015D :10C2E000000000000000000000000000000000004E -:10C2F000BF1FBA1A787855FF00A30FA328FA7DFA5A -:10C30000000000000020FFFF00000000003CA0BC77 -:10C310002A282028F0E8AAE8000000000000000019 +:10C2F000000000000000000000000000E4A5A5A56B +:10C3000000000000FFBFFFFF0F0F3C3C0EF10FF0DD +:10C310000000000000000000FC0C3F3F3CFFAA3C76 :10C32000000000000000000000000000000000000D :10C3300000000000000000000000000000000000FD -:10C34000000082A082F555B4FFB400000000000098 -:10C35000000000000000C34380000300000000381C -:10C36000C7FF000000000000000000000000000007 -:10C370000000B515B010787800AAF0A3FFA32850EC -:10C380007D50000000000020002000000000003C64 -:10C39000003CEAEBEFEBF0F0AAAA0000000000017D -:10C3A000000000000000000000000000000000008D +:10C3400000000000000000000000000000000000ED +:10C3500000000000000000000000000000000000DD +:10C3600000000000000000000000000000000000CD +:10C370000000000000000000000005002D2827A597 +:10C38000A5A500000000FFFFFFFFF0F0C3C34FB002 +:10C390000FF00000000000000000FC0C30303C00FA +:10C3A000AA3C0000000000000000000000000000A7 :10C3B000000000000000000000000000000000007D -:10C3C00000000000D7A0D7F500B4AAB40000000018 -:10C3D0000000000000000000C3E3DFFF83808080D6 -:10C3E000003CC3FF0000000000000000000000004F -:10C3F00000000000FDCD3D0DAAFF3CF00000000054 -:10C400000000000000000000AAAAAABA0000000074 -:10C410008F8C8380000000000F0A0C0CFF040404C2 -:10C420000100000000000000000000000000F3FF19 -:10C43000F3FF00000000000000000000000000000A -:10C4400000000000000003F30A0A3F41034100001E -:10C450000000000000000000000000000000BABA68 -:10C4600010BA5757545400000000000000000000AC -:10C47000000000000000F1C13101AA003CF0000002 -:10C48000000000000000000000000000003000007C -:10C490000000BFBCB3B000000000000A0C0CFF009D -:10C4A000000001000000000000000000000000008B -:10C4B000F3FFF3FF00000000000000000000000098 -:10C4C000000000C00000000003F3FAFA3F7D037D86 +:10C3C000000000000000000000000000000000006D +:10C3D000000000000000000000000000000000005D +:10C3E000000000000000000000000000000000004D +:10C3F0000000000000000000000000008296001411 +:10C40000000000000000000000000000000000002C +:10C41000303FAFAF00000000C33CC33CCF0C3F3FF8 +:10C42000BEBE7878000000000000000000000000A0 +:10C4300000000000000000000000000000000000FC +:10C4400000000000000000000000000000000000EC +:10C4500000000000000000000000000000000000DC +:10C4600000000000000000000000000000000000CC +:10C470000000000000000000000000000000AABE54 +:10C48000283C000000000000000000000000000048 +:10C490000000303FA0A0000000008778C33CCF0C14 +:10C4A000030314147878000000000000000000006E +:10C4B000000000000000000000000000000000007C +:10C4C000000000000000000000000000000000006C :10C4D000000000000000000000000000000000005C -:10C4E000BFBF15BF57F75404200488000800C000E0 -:10C4F000200040004008010009000200040005007F -:10C50000118020801100200020008500A00200087A -:10C5100040032110080020052080840084000000D2 -:10C520008800880040040100000320008800840384 -:10C53000C000840088002080408320002000C000CC -:10C540000000200001040004018420002080000875 -:10C550002040000820050400C00000042000200046 -:10C5600002002000000801200884000020008082D2 -:10C57000000080008000080420C088C08000800087 -:10C5800082002002101020C0840000A0080020219A -:10C59000050009004003C002C1000002040241007E -:10C5A0000000040000C0200020A0000040000000A7 -:10C5B0000000000000000000200220020000000037 -:10C5C000000000008000200100C0200300000002E5 -:10C5D00020000001090000000002410020010900C4 -:10C5E000000000C0090000002001891102000400C1 -:10C5F000851091404000080000000100090009007A -:10C60000010002100840080000410000000008403E -:10C61000A00002100200084003208320000002094D -:10C620000200100000000041000020000000004156 -:10C630000041004100094000401000000082C0009D -:10C6400000000080000900800800010540800021F2 -:10C6500040800800000000800040002000800200B0 -:10C660000000000000000000010000410100410046 -:10C6700000002008080080000000058440008400BD -:10C680008400200809002000048809002000098493 -:10C6900000000084000000828000400808010000C3 -:10C6A000008200880008000000080084800000006C -:10C6B0000000000004000010201084880082001098 -:10C6C0000000000020020008000440084008C102E9 -:10C6D0000000800280080002004000890001004044 -:10C6E000000800820000001000082040000820849C -:10C6F00000000000000000004008002101C1C0004F -:10C7000000000040C00090888800C1210021000086 -:10C7100004000041040011040008040990101041B5 -:10C72000040300210003404000000040A04008082E -:10C730000000882100080041002100104000002175 -:10C740000008040800000000042100080002890419 -:10C7500000081105410800000308082000200021FE -:10C7600000400000000488888208002084039009AB -:10C7700040034100410000000088800003000410D5 -:10C7800005002100000041000810000020A00088E2 -:10C790000082090011A0008820000800800805011F -:10C7A00005000000030008000091110000100009BE -:10C7B00008080000091008820000000005A1000818 -:10C7C00011C0000000A0000005004000000000892A -:10C7D000201100884008C0000000A08400010989E1 -:10C7E00003000300210003080804050411A105004B -:10C7F00009008000A000C004200021004111012098 -:10C800001002900008008204004040048280400032 -:10C81000880400058411A080A1000009A0000888F8 -:10C82000A01004008400900082000820402108002D -:10C83000A009850000002010A000A0004000821088 -:10C840009000A0004000A0020000000284008400CC -:10C850000800840040100000400000800200C0007A -:10C860008200408082000000820000002000A000C2 -:10C870008880C082A000000800018000C000848879 -:10C88000208441040300400021014001A101210254 -:10C89000410800000000000003200400000000C068 -:10C8A000802009C100884110000000A00001080498 -:10C8B0000000080020C0000005201000050004044E -:10C8C000000910080000030010010008000100002A -:10C8D00000A0000008C09000000080000010800050 -:10C8E0000000000000400400110003004000800030 -:10C8F0000000402040200300880002000002820067 -:10C90000A080040300A0840082111085C091080457 -:10C91000092100801000C0008800080420044000A5 -:10C920000085A00008840288000000024008080872 -:10C930000021841000000004000082100002820820 -:10C9400004008490904010000000824110040240D6 -:10C950000000900500218403000082888885008300 -:10C960000121004120200440C00000000000C00060 -:10C9700082050041000000034000000000000000AC -:10C9800005A000028000000500004100040420040E -:10C99000200320200002040020A011840001800157 -:10C9A00088000420038880200020219000A000003F -:10C9B0000000110005C0059005A100000000000066 -:10C9C0000004030010110000050200A02100040073 -:10C9D0000001000000104100000405A0000409044B -:10C9E00000042090000000000400039020900388C1 -:10C9F0000000009011000302100005082000002133 -:10CA0000A000200010028205A000410021110808AA -:10CA10000409002184412021080888219180048094 -:10CA200004208284A020A000092104211005100503 -:10CA300010000582000820032003100500000000FC -:10CA400040000820A00810080004040000080002AC -:10CA500004214002400210000000400000000020BD -:10CA6000000200210040C021000840000088C004EE -:10CA70004084080404042000848500000420801001 -:10CA80000010110080000801000021000404820051 -:10CA90000008000000000000800000841100402019 -:10CAA000202008052021090900C008820910008201 -:10CAB00008000800202000000000000000400000E6 -:10CAC00000000000000000000000089008020510AF -:10CAD000000141C0098910010800000000000000A9 -:10CAE00000004100000000010000000008000820D4 -:10CAF0000089410500010001800000100000910341 -:10CB00000500000001000400000491100104082148 -:10CB100001C00120020000C0009000030088000254 -:10CB200001A0201082090003404008050821820866 -:10CB3000C0A0004000089002044004820008900455 -:10CB4000000003408884008210C040908308A090B9 -:10CB50000888402020A0884082118202020420849C -:10CB600090820191000900A000A0000000000010C8 -:10CB700000000000000000000100A0119182058269 -:10CB800082091100000040000000110090004040A8 -:10CB9000050421804180910000000004002004A0D1 -:10CBA0001100118482820282001000910288040820 -:10CBB000808480C020830085802080808000008069 -:10CBC0000080000020800000008080008000028043 -:10CBD000080080008800A1200010C01000004090D4 -:10CBE00002090080100800211190000300000000DD -:10CBF0000000000000002000110021008090A12012 -:10CC0000882180A000208000800280000010800029 -:10CC100080410000A002A0000302840000208008E0 -:10CC200000050008108821832108080504C12000A0 -:10CC3000904003218000000480848080200008A0B0 -:10CC40002004A0800000800000A000A0008004005C -:10CC50000541C0110310800021840085209011A09F -:10CC6000889084C021820011002100C000020000D1 -:10CC700080820000008002030900020520000508F0 -:10CC800020912140029084002000A000100040006C -:10CC9000104008002082840191080001C1088488A6 -:10CCA00002009008400001900184009001080103F7 -:10CCB0000182A100008302000000A0850804C000DA -:10CCC00084C1908382C00000100004C10441A0C050 -:10CCD00001101001A0888901829041C1C010A0C13B -:10CCE000A08403C10804A1C10088002000A10001A4 -:10CCF0000000100800000008000000000100010012 -:10CD000001919003019000C000089088008200917A -:10CD10009109C0A0401010A090010400044102003D -:10CD2000840004000000A10009004000A000C00130 -:10CD3000A11000A182100110028901100100A08938 -:10CD400003A10090C0C141850000C1080008C0C017 -:10CD500008844005000208828404A1820083C00880 -:10CD60004082C1108483C18340C0040290020190BC -:10CD70008240000000000810000000010200A00135 -:10CD80000001C083C0824083A0A100C00009000050 -:10CD9000030802888089A08291894020800980212F -:10CDA0008509800080000000C100410411032003B8 -:10CDB0002010020320880303108400200585100042 -:10CDC0001011C10800008021021100004180008084 -:10CDD00080008200800400050083110541000020CE -:10CDE0008011038341000040C09020098080090029 -:10CDF0004000910009000000800000000008804110 -:10CE00008002202085A105004121888200000000C9 -:10CE100000000000212004840200000080910082B4 -:10CE200080800000830082802080100005110204B1 -:10CE30009000091021112021200005110000800020 -:10CE4000000000000004008000808040000000001E -:10CE50000000008000000990A1880980034108209B -:10CE60000888418010082111A111908088200403B6 -:10CE70002108050009000000000400000000000077 -:10CE8000001100030003A0089191200082400000DF -:10CE90000010008800000101010201040000C00927 -:10CEA000208802400810020004C08810040020837B -:10CEB00088004100040101000110000000911000F1 -:10CEC00082881088040082014002A08402010000D0 -:10CED0008400C010048404002003A082C01000015C -:10CEE000C190918284024100A10408A00340040182 -:10CEF00009008800A00011000000000000000000F0 -:10CF0000000000010001000108000302910004017B -:10CF1000000000E000000000000000E007008200C8 -:10CF2000000000E007004200000000E000004106B1 -:10CF3000000000E007008200480000E007006000F9 -:10CF4000000000E007006000810000E000004842AF -:10CF50000000000000000000484200000000000047 -:10CF6000600A0000000000004842000000E00000ED -:10CF70004842000000E00000000000000000070040 -:10CF80000000000000E000000000000000E00700DA -:10CF9000422100000000708F30CF00000000FFFC35 -:10CFA000FFC0003CF0F00000FF0000F0C9C9000025 -:10CFB000000000C300C30000000000000000C334F4 -:10CFC000C3F7000000000000000028000028221124 -:10CFD00000000000A0050000280041009999F960B8 -:10CFE0000000004022110000204004022040040202 -:10CFF00022000022242424240303C3000000FFFF96 -:10D000000000FF000000000000000000F0FDF0FB49 -:10D010006FFF6C3C0000000000FF00FF00000000FC -:10D0200000000000003CF0F00000FF000FFFC9C945 -:10D030000000000001C300C3000000000000000069 -:10D04000003400F700000008DFDFFFFF410000416F -:10D050000000221100000000A0050028004100008F -:10D06000F96000000000000022111080080110800B -:10D07000080111000011222424240303C30000002E -:10D0800000000000FF000000000000000000F04071 -:10D09000F02060006C3C0000000000000000000078 +:10C4E00000000000000000000000000000080080C4 +:10C4F0000002000000000005000000000000000035 +:10C5000000000000000000030041000000000003E4 +:10C51000000000000000000000000009000400000E +:10C520000080000000000004000100000000000086 +:10C5300000000000000000000000000000000000FB +:10C5400000000002000200000000000000000000E7 +:10C5500000000000000000000000000000000000DB +:10C560000000000000000400008200000000000144 +:10C57000000800C0000000000000000000C0000033 +:10C5800000000000000000000084400000000000E7 +:10C590000000000000840000000000000000008295 +:10C5A0000000000400000000000000000500000082 +:10C5B000000000000000000000000000000000007B +:10C5C000000000000000000000000000000000006B +:10C5D000000000000000000000001000000000004B +:10C5E000000000000000000400040010008001882A +:10C5F00000880004008300000080A0800004000088 +:10C6000000008400000900000080100000082008DD +:10C610000000008000000000000000000000840016 +:10C6200000000000000000030010000400000003F0 +:10C6300084008405000000000000000000000000ED +:10C640000000100000000041000000000000020097 +:10C6500000000000000010000200000000000000C8 +:10C6600000000000000000000000A000080000041E +:10C670002005000500090004000200040004000079 +:10C680000008050000040004000400040004000089 +:10C69000800400000004000200820000008200000C +:10C6A00000820088000800C000C000C0030900002C +:10C6B000001000840000008800100010000000003E +:10C6C0000000000008000090000000840000081036 +:10C6D0000000000000000000000000100000000842 +:10C6E0000000000000880000000000000000800042 +:10C6F000100000A100418808000584838805040318 +:10C700000400402184099002C00520802008000810 +:10C71000000000210109000040110000000000118C +:10C7200084C100C101210000000300400005000297 +:10C73000000000020000000900020041000000406B +:10C7400000040000001000100000000000000000C5 +:10C750000010000000030000000000000040000086 +:10C7600000000000000000000000000000002000A9 +:10C770000000839005080000002100000004000074 +:10C78000090000020008000000000004044000004E +:10C79000008200A00082402009080510021011004C +:10C7A000002000400040408400000082000000841F +:10C7B0000001000000000000000000010000000077 +:10C7C00000000000000000A00008000000000000C1 +:10C7D0000000000000000000000800000000002031 +:10C7E00000000000000000000000000000840000C5 +:10C7F000000000000040004000400040008800852C +:10C8000000400040004000400088004000840105D6 +:10C8100010400040C04020400183014000000089DA +:10C82000004000C0014000800080008000030091B3 +:10C830000085000000000000000000000002004031 +:10C84000000800400021000000000000001100006E +:10C8500000000011000000000000000000000000C7 +:10C860000000000000000000000000410000001176 +:10C8700000000000000000830009000100A100404A +:10C88000004000A10009001100850040080100419E +:10C890000208000940030091859140402091000862 +:10C8A00000400005000340A100400040004000A0FF +:10C8B00000040004008400000002001000000010CA +:10C8C00000000008020000A00000000000000000BE +:10C8D00000000004000000040000000000820000CE +:10C8E0000000001000000000000000000000000038 +:10C8F000000000000000000040052000000800C00B +:10C900000005840000050021020984218821000817 +:10C910000008040020400002004001000002200046 +:10C9200084024041404004409000014100059002D3 +:10C9300000200000002004000000000200000000B1 +:10C9400000410000000000000000000000000000A6 +:10C9500000000000000000000000000000000000D7 +:10C96000000000080040000000000000000000007F +:10C9700000000000000000000000000000000001B6 +:10C9800000081100000004C0412000000000000861 +:10C99000050000004000800300A00004200800A162 +:10C9A0009108000080408289008903A0100041A006 +:10C9B000009100010008000180A0000000000000BC +:10C9C000000005000000000000000008000000005A +:10C9D0000000000000000000000000000000000057 +:10C9E0000000000000000000000000000000000047 +:10C9F0000000000000000000000000002080012175 +:10CA0000012188C000050008000500000103002185 +:10CA10000021000020A101030100C1020041842186 +:10CA20000021010000C10188000010050021004123 +:10CA30000021C02101000009002100800000000049 +:10CA40000000002100410000000000000000000084 +:10CA500000000000000000000000000000000000D6 +:10CA600000000000000000000000000000000000C6 +:10CA700000000000000000000000200020008008EE +:10CA800010001000000521820882200021A0020071 +:10CA90000082000000828004400820084009090844 +:10CAA000009000C002900040020800008088000052 +:10CAB000100000000000200404000000201000000E +:10CAC0000000000000000000000000000000000066 +:10CAD000000000000000000000002004000420000E +:10CAE0000000004000000500000000000000000001 +:10CAF0000000000000000000000000000000000036 +:10CB00002109890288029082090800880108101012 +:10CB1000080810020088829004021009100802918F +:10CB200010891002A003C004A0910390C008101047 +:10CB30000221A00500020488000091000800000006 +:10CB400000000000000002000000000000000000E3 +:10CB500000000000000000000000000000000000D5 +:10CB600000000000000000000000000000000000C5 +:10CB700000000000000000000000000000000000B5 +:10CB8000000011C189210410009010800000408035 +:10CB900080800080800000008900000041A10088A2 +:10CBA00000021041000800038091104102058083BB +:10CBB0008080A041000411008020110088009000B6 +:10CBC0000000000000000000000000000000000065 +:10CBD0000000000000000000000000000000000055 +:10CBE0000000000000000000000000000000000045 +:10CBF0000000000000000000000000000000000035 +:10CC0000000000009000899091A0418980038089F4 +:10CC10008010000000008090008000801080058857 +:10CC2000A0118888848009A1C09084100900029115 +:10CC30004100028040000021830041000003000009 +:10CC400000410000000000000000000000000000A3 +:10CC500000000000000000000000000000000000D4 +:10CC600000000000000000000000000000000000C4 +:10CC700000000000000000000000000000000000B4 +:10CC8000000000000000080040C1091009C10800B0 +:10CC900008C040902082900010C1028202C0C19062 +:10CCA00003C0829102C1081090C085C0081188009D +:10CCB000900490A09082200010848204A1100001B2 +:10CCC000008400000084000000000000000000005C +:10CCD0000000000000000000000000000000000054 +:10CCE0000000000000000000000000000000000044 +:10CCF0000000000000000000000000000000000034 +:10CD0000100010000000020003080003C10211110E +:10CD1000210882888208039011080002C0880282DC +:10CD200003020108C0081010032001028302C12180 +:10CD3000A0C0009120088503032000040803848319 +:10CD40000100C0008400000000000000020000019B +:10CD500000000000000000000000000000000000D3 +:10CD600000000000000000000000000000000000C3 +:10CD700000000000000000000000000000000000B3 +:10CD800000000000000000000000C18000038910C6 +:10CD900091C1418000008080C100C18000008000FE +:10CDA0008080C1020889A0890010C11111210508E5 +:10CDB00091109020040800C08841C1040040C110B7 +:10CDC0008041041180110003410500000010800023 +:10CDD0000008000400000000000000000000000047 +:10CDE0000000000000000000000000000000000043 +:10CDF0000000000000000000000000000000000033 +:10CE0000000000000000000000000000C1800811C8 +:10CE1000100083008002004180800000800800A094 +:10CE2000000000000209898089801002802108002A +:10CE3000090011404100C0808489112080028020B7 +:10CE400000090003000200030000000000000000D1 +:10CE500000000000000000000000000000000000D2 +:10CE600000000000000000000000000000000000C2 +:10CE700000000000000000000000000000000000B2 +:10CE80000000000000000000000000000000898891 +:10CE90000303020211000800888908082000080026 +:10CEA000022088882000020008080808100104C138 +:10CEB000020203880801910809080909C0018801D4 +:10CEC00008040203C0010000000000000000000090 +:10CED0000000000000000000000000000000000052 +:10CEE0000000000000000000000000000000000042 +:10CEF0000000000000000000000000000000000032 +:10CF00000000000000000000000000000088000099 +:10CF1000000000E000004842810000E0000048827C +:10CF20000000000000004842810000E0000048428C +:10CF3000820000E0000048820000000000000021A4 +:10CF40000000000000006000008100E00700820097 +:10CF500000000000000000000000000000000000D1 +:10CF600000000000000000000000000000000000C1 +:10CF700000000000000000000000000000000000B1 +:10CF800000000000000000000000000000000000A1 +:10CF90000000FFFF43FFF6F6E66636363C36FFE656 +:10CFA0000026FF3CBC3C76764646FF66E666767613 +:10CFB000F676BDFF2400FCFC0C0CC3009000C0C939 +:10CFC000CFC9009966FF0989C989000000000000E7 +:10CFD0000000000000000000000000000000000051 +:10CFE0000000000000000000000000000000000041 +:10CFF0000000000000000000000000000000000031 +:10D000000000000000000000000000000000000020 +:10D0100000000000BC000000060626666666666624 +:10D0200066666666003C2C3CF6760646006626661A +:10D03000464606463DFF3400BC3C2C3CC3FF9FFFE8 +:10D040009999999940DF40DF39B9F9B9000000009A +:10D0500000000000000000000000000000000000D0 +:10D0600000000000000000000000000000000000C0 +:10D0700000000000000000000000000000000000B0 +:10D0800000000000000000000000000000000000A0 +:10D090000000000000000000000000000000000090 :10D0A0000000000000000000000000000000000080 :10D0B0000000000000000000000000000000000070 :10D0C0000000000000000000000000000000000060 @@ -138545,307 +138545,307 @@ :10D0E0000000000000000000000000000000000040 :10D0F0000000000000000000000000000000000030 :10D10000000000000000000000000000000000001F -:10D1100000000000000000000000000009096F6F1F -:10D12000DC1CD0109999FF006666FF3C3C3C000077 -:10D13000B1FF0000D949D0400000F000000000001D -:10D140000000000C0066006600000000C3C3E7E7B3 -:10D1500001020804000082140000008800440088D6 -:10D160000044009009996666666640022004010248 -:10D17000080400A0000514000014060606050000BF -:10D1800000000F0F00000F0F000000000000000063 -:10D190000000666C000C90909090000000000D095B -:10D1A0004F6FDF1FD313F0F0C3C36666C3003C3C70 -:10D1B000909000000000DF4FD6460000F80000000D -:10D1C0000000000000000066006600004000FFDB79 -:10D1D000FFFF8040102082140000000088004400FF -:10D1E0008800440000300C3C66066666800110082A -:10D1F00080401020A000050082000082060606067E -:10D20000000000000F0F00000F0F000000000000E2 -:10D2100000000000FFFC999C909090900061000736 -:10D22000000D000005610A0F050D00A015612A0F11 -:10D23000054D00A880610007000D000005610A0F80 -:10D24000050D00A005610A0F850D20A000614006B4 -:10D250000009000060610006C00910000000000025 -:10D2600000000000080000610006000D0000606181 -:10D270000006000D100000610007000D08000061AD -:10D280003007000D000015002A08054000A80061C5 -:10D290000007000D000005610A0F050D00A0000049 -:10D2A0000000C0C000000F00000003FF03FF0000EB -:10D2B00000000000F202F000AAC300000000D5DF69 -:10D2C000151030F3B0F1000000A0050300000000CD -:10D2D00000003F3F3F3F000000003C00FFC3000054 -:10D2E0000000000000000000FF00BC0000FF20FF65 -:10D2F000017103F300000000000000000FAA00AA63 -:10D30000D7D255D20000000000000000000000004D -:10D3100000000000C3C3C3C3002800A0AAFFFFFF92 -:10D3200000000000C0C000000F000000030303F372 -:10D33000000000000000F707F0FFAAC30000000093 -:10D34000D7D7141430F310FB000300A3F5F300004B -:10D35000000000003F3FFFFF000000003C00FFC353 -:10D36000000000000000000000005F001C00000042 -:10D3700020200D0D0F0F05000000008000000FFFA2 -:10D3800000FF55D2D7D200000000000000000000CE -:10D39000000000000000030F0F0F82AA0AAAAAFFD4 -:10D3A000BEBE000000000000000000000000000001 -:10D3B00000000000000000F0FFF0FF000F0F000071 -:10D3C0000000FFF75D553C004D4DC082C08228EB48 -:10D3D000F0F0000000000000000000000000C1C3E9 -:10D3E00043C3000000000000000000000000000037 -:10D3F000202020FF0C000C00A0A000000000000076 -:10D400007878AAFF302830EB000000000000000010 -:10D41000000000000000000000AAF03CA02800006E -:10D420003A303F350000000000000000303030305E -:10D4300000000000000000003CF03CF0FF000F0F77 -:10D440000000000000045155FFC34D4DC000C0C393 -:10D4500028EBF0F0100000000000000000000000C9 -:10D46000C1C343C300000000000000000000000032 -:10D470000000000000FF0C000C00F0F0000000F0C5 -:10D4800000F078780055F328F3EB0000000000006E -:10D490000000000000000000000000AAF03CAFEB1C -:10D4A00000003A303F35200020004120400021009C -:10D4B0002100000520050000C00020008803A10015 -:10D4C00020008800040000800100208021800000EE -:10D4D000200084004000C080210021C140A08400C1 -:10D4E0002000200020000003040004008800001039 -:10D4F00004000400000510042000A1002080880022 -:10D50000040021804180200020000000840804885D -:10D510000800200004202080C00001002120858018 -:10D52000408221002110880800000000C0A1800076 -:10D53000200220001000008404C0040221400420C6 -:10D540000400A1020000C000050420000004200225 -:10D550000300100009000900210420000804A005B0 -:10D56000000400000000000000000500000000A012 -:10D5700020000000000000044101400040000002C3 -:10D58000050000004040C002000000002000000034 -:10D5900080028000000080000002000020002000C7 -:10D5A00020100005200020012088004020400500B8 -:10D5B000004002000208404002900000000000000D -:10D5C0008400010020000100021000000000900013 -:10D5D0002000001000108210021002410400840498 -:10D5E00004408240000000020040000000000100F2 -:10D5F0000000000000000080008200000000001019 -:10D600000010008000000080008200000100000087 -:10D6100000004080000000080000400800000004F6 -:10D620000000080001000000000000400000008829 -:10D63000C0C000000008040080080502008405083E -:10D6400040000000040080080404000020000000E6 -:10D650000408000009080008008400000400899004 -:10D660000001900004000404000800840000000091 -:10D67000080000040008000800200003000000006B -:10D6800000010001000440840002000300002000AB -:10D6900000000088802000840084000884000908BD -:10D6A00000010008800020080088000000000440FD -:10D6B00000000408C1020105C000A19188200000FB -:10D6C00000410000880500000184008800038802F2 -:10D6D0000400008901008804820400098809840488 -:10D6E00004400000400000089004A0210041000018 -:10D6F00000000021A0000840000000004188000355 -:10D7000000080404000002000400C002002004001D -:10D71000000008042021A000000800000000000014 -:10D720004100080504210080C02082080100A000FB -:10D7300000400000C1004001040011824004008844 -:10D74000218200004100210041000821202040905A -:10D7500000002100080240041101100110004000E7 -:10D7600041041084400405000884000840840982B4 -:10D770000000090002002000080021004008C00449 -:10D78000112008C0000141A0219000000505009073 -:10D7900000000084000000004100000003100000B1 -:10D7A0004008202008C000C00804080000822000B3 -:10D7B00021002100200001000900000090008400E9 -:10D7C00000094000820084009000C000850308002A -:10D7D0001000880008000000000809000000C000D8 -:10D7E0000900C00004000400042100001000000033 -:10D7F00082000000820010004000080000000000CD -:10D800000000080000800809008001000400C0003A -:10D8100000000080C08000000000000004008200C2 -:10D820000100040008000000200000000800820041 -:10D8300088002000A08280002090200009000000C5 -:10D8400000000000080200000000000000040400C6 -:10D850000088000000000088000000004000000078 -:10D86000000020000000C1041000C100039000105F -:10D870000000410000000000000000000000000067 -:10D8800000000000844000040000000404000000C8 -:10D890000000000000400004040000000040000000 -:10D8A00000880200800000000000800000002100CD -:10D8B00000002008A1000000020005800800000010 -:10D8C00020210021402100400800000000800000CD -:10D8D00020000011A0202041020000C082888205A3 -:10D8E000880020400000830300100010040800415D -:10D8F0000000000000100000A00082000808820064 -:10D90000100008001002400000809005C0020810BE -:10D910000821400000040000A000001108000000E1 -:10D92000000000000000C00001000800000000002E -:10D93000844020009000000021040000C020838467 -:10D94000210000080000110002C080002100020434 -:10D950000010C00000001085000003C0084008024D -:10D96000000004008508218420020384000288024C -:10D970002100210803002100000000000000000831 -:10D9800008004002400204050910050210024091FF -:10D9900010881104C00811211000040010A0008894 -:10D9A00005000800000000202000202004C0000422 -:10D9B000040003008300218821C08200000082034C -:10D9C00084808211000090002021820500008821BF -:10D9D00008000803820000000008000020218200E7 -:10D9E000910200404040844010049010902120009B -:10D9F0002020840000080400000400001041000002 -:10DA000002041000000011000800080000002009B6 -:10DA1000040804000408018208C19000000400000A -:10DA2000A00000000011000500090000080000101F -:10DA3000882108000010004100008404000000C09C -:10DA40000200001000000000000080000000000044 -:10DA500000020000000002000000000000000800BA -:10DA600000004001000000900000000000000000E5 -:10DA7000000000000000000821400000000000003D -:10DA800000C000000000000040A0000000000000F6 -:10DA9000800000008020000040030004000000011E -:10DAA0000000000000000000000000000000000076 -:10DAB00000040000000000020002000000C100009D -:10DAC000000005008800010001004000000000A0E7 -:10DAD0008821018800100090028800880082880850 -:10DAE000000801080808031000090110108900004F -:10DAF000910800822002000088000040820100009E -:10DB00000000000000000100828890A0848382034E -:10DB100000A19082831000080100A0020100001003 -:10DB200001000001000000000000000008000000EB -:10DB300000000000000000000402084101A000886D -:10DB400000001100040000000800030009000000AC -:10DB500002880090030800000000000000800080A0 -:10DB600011002100088000801120009040058040B5 -:10DB700000009180118000804141412100C180035B -:10DB8000000000000000000002001110A1040520A8 -:10DB9000808440A02005C0C00041080080800300B0 -:10DBA00000801103001000410003400021008000AC -:10DBB00000000900000041000900009080050409F0 -:10DBC000000583104000C0054000200320000341F1 -:10DBD000200000000020008000000090000900806C -:10DBE00000104020029083082180800400A180A0C2 -:10DBF0008080002000008005800000008021000857 -:10DC0000830300000000000000000000A0808310DB -:10DC10008980052108888340898410840080002041 -:10DC200005900305000000008000000000000010C7 -:10DC3000000000000020000080400000800500007F -:10DC400080108000080104000200000000000000B5 -:10DC5000000001840000000000200000000200829B -:10DC600000C00082C000C1C1102085C0100104C0E6 -:10DC7000109102C000000000A0009000000040C011 -:10DC800000018301000000000000000000000310FC -:10DC9000848302A0C001C1102100A00585A09010BE -:10DCA000900800400900200000000800000000006B -:10DCB00000010000008800010800100100000200BF -:10DCC0004000820110000041040490C100A0010046 -:10DCD000400000010000A00000000000110005004D -:10DCE000000082000800A1082009C0822190C11014 -:10DCF0000488C0101102000104090001080400009A -:10DD00000200004000890000000000000000000048 -:10DD1000409001A09111C0020200840003204182C2 -:10DD200000000400000001000000000000000001ED -:10DD300000000000040100000000100000000000CE -:10DD400040C088A082820204008480028021058273 -:10DD50000809000000210510800000000000880074 -:10DD60008200000000000000418280A08080080343 -:10DD700041808200C100A000004080400020854119 -:10DD8000000080000080000800000000002100006A -:10DD900000008011080021A0A08080000302A110D3 -:10DDA000C0080000800000000900000500400002DB -:10DDB00000020003000080100000000000000000CE -:10DDC0002000800021802080A080000000000080D2 -:10DDD00000110080000800000003000000000000A7 -:10DDE00000000004201105000300000500400000B1 -:10DDF000000400208000000000000004008000807B -:10DE0000000010100000C1C1000800000002000066 -:10DE100000000000402121800200000208804089AB -:10DE200000002003090403104080030000000000EC -:10DE3000000000000000000800000000000000805A -:10DE400000000000004000090000008000A000C0A9 -:10DE500000A000000002000100000000100090007F -:10DE60002000820002010400020002004082A01192 -:10DE700084C0C0001001908404201000000000083D -:10DE800000020000010188004040008900000000FD -:10DE9000000000000000214120C040009001100857 -:10DEA000A04088201000820120018884A100000089 -:10DEB000002000900000A000A00100004000000031 -:10DEC000000200020000000100A100820008000022 -:10DED00000E007000000000000E007000000000074 -:10DEE00000E000000000810000E007000082000068 -:10DEF00000E000004842000000E0000048420081CD -:10DF000000E00700000000000000000048000000E2 -:10DF10000000000008000000004200E0070082113D -:10DF2000000A00E007000000810000E0000000009F -:10DF3000004200E00700000000420000070000006F -:10DF4000000000E000000000000000E00000000011 -:10DF50000000000000FC000C0000000000000000B9 -:10DF600000000000000000000100000000000000B0 -:10DF70004080102040801020401080200408102095 -:10DF80000000000000000F0F000000000000000073 -:10DF900000000000000000000000FF38FBFBFFBF96 -:10DFA0007D3C00000000FF000000FF7DC341000039 +:10D110000000000000000000FFBCFFBD0D094F6FC4 +:10D12000F7E7F7F7000FF0FF3C3C3C663C6C3C66D1 +:10D130003C3D3CFF187E383EFF98FFFF2DD22DD29C +:10D140000C180018FB9B6202C3C0C399FDD9644050 +:10D1500000000000000000000000000000000000CF +:10D1600000000000000000000000000000000000BF +:10D1700000000000000000000000000000000000AF +:10D18000000000000000000000000000000000009F +:10D190000000000000000C0CCFCF002C00240F0971 +:10D1A0000F6F042404040002FDFF3C363C663C3C47 +:10D1B0003C663C343C00383E383E000000672DD2CF +:10D1C0000FF0FFDBF3DBFBFB0202C3CFC399FFDBF6 +:10D1D000240000000000000000000000000000002B +:10D1E000000000000000000000000000000000003F +:10D1F000000000000000000000000000000000002F +:10D20000000000000000000000000000000000001E +:10D2100000000000000000000F0F0F0F4000800111 +:10D220000020100240618007802D10024000800025 +:10D2300000201002406180028025100240618004BD +:10D240008029100240618006002D10024061800696 +:10D25000002D000205610A2F050D00A000000061ED +:10D260000006000D000000000000000000000000AB +:10D2700000000000000000000000000000000000AE +:10D28000000000000000000000000000000000009E +:10D2900000000000000000000000000000003F301F +:10D2A000FF0FAAFFF0AA000000000000000000002D +:10D2B000000000000000FF555755EFAFEFEFFF00F3 +:10D2C000FF00787800FF3CC3CCCCAA3CF0FF000004 +:10D2D0000000C33C0FF00000000000FE01FF000052 +:10D2E00000000000FFBEFFFF000000000000000083 +:10D2F000000000000000000000000000000000002E +:10D30000000000000000000000000000000000001D +:10D31000000000000000000000000000000000000D +:10D320003F30F000AA00F0AA00000000000000005A +:10D3300000000000000000000055545520A02020EF +:10D340001E1E1E1E787800FF3CC3CCCCAA3CF00009 +:10D3500000000000C33C0FF000000000FF01FE00D1 +:10D36000000000000000FFBEFFFF00000000000002 +:10D3700000000000000000000000000000000000AD +:10D38000000000000000000000000000000000009D +:10D39000000000000000000000000000000000008D +:10D3A0000000CF0C3F3FFCFC30F300000000000009 +:10D3B000000000000000000000000F0F0F0FD2005F +:10D3C000D2FF3CFF0F55000000000FF055AA56AAEF +:10D3D00055AA3CC3FF00C33C55AA00000000000052 +:10D3E000000000000000000000000000000000003D +:10D3F000000000000000000000000000000000002D +:10D40000000000000000000000000000000000001C +:10D41000000000000000000000000000000000000C +:10D4200000000000CF0C0303C0C030F30000000078 +:10D43000000000000000000000000000EB28EB28C6 +:10D44000D200D2FF3C000F55400000000FF055AA5B +:10D4500055A955AA3CC300FFC33C55AA00000000D3 +:10D4600000000000000000000000000000000000BC +:10D4700000000000000000000000000000000000AC +:10D48000000000000000000000000000000000009C +:10D49000000000000000000000000000000000008C +:10D4A0000000000000000000000400000000000474 +:10D4B00000040008000004002080000000000000BC +:10D4C000202020202000000000000000000000803C +:10D4D00000040002000420000020002000020021BF +:10D4E00020112002200200030000081100000000AB +:10D4F000000000000000000000000000000000002C +:10D50000000020002000200000002000000000009B +:10D51000000000000000000000000000400040008B +:10D520000000200020002004030000010020000073 +:10D5300000200001000200908000000400000000B4 +:10D5400000000009000100000000000000000000D1 +:10D5500000040001000000000000000500010004BC +:10D560000002000000000000000000008000000039 +:10D5700000000000000000000000000000000000AB +:10D580000000000000000004000000000090000007 +:10D590000000400040000000009040000000000437 +:10D5A00010000090000000020000000000040004D1 +:10D5B000200000104000001000108804200000042B +:10D5C00001040000008500000020000000000000B1 +:10D5D0000000000500400003A000008400000004DB +:10D5E000000300090040004182000000000000002C +:10D5F00000000000000000000400000000400000E7 +:10D6000000000000004000080004010000000000CD +:10D61000000000000000000000000000000000000A +:10D620000010020000000000000000040000008361 +:10D630000001800200018308001100090001801030 +:10D6400000090491000800200004001100840082F9 +:10D65000108400A00090008205040010002000004B +:10D66000008200820040000400040010000000005E +:10D67000000000080000000000040000000000009E +:10D680000040000000000000008300822008000825 +:10D6900000000082000000000000000000000010F8 +:10D6A00000000000000000080000000000040088E6 +:10D6B000000808002005A0A00010042109000010A7 +:10D6C0000000880008080041004100080080004177 +:10D6D0000000000300058821C00889038591900996 +:10D6E0000008000500C1000400418800024100005C +:10D6F0000000000000000000000000000021000009 +:10D700000000000300000040020000000240010091 +:10D7100000000000000000000000000000004000C9 +:10D720000000000000009000004000000000000029 +:10D730000904080000008982210508C040A00800F3 +:10D74000050400041100800040402000000020205B +:10D7500009900040118400020210008220842004FD +:10D760000002008400000020008400040002020087 +:10D770000000000000C00000000000840000000065 +:10D780000000000000000000000000000000000099 +:10D790001000000000000000000000000000000079 +:10D7A0000000000000000000000000000000000079 +:10D7B000002020110000000000000004018400840B +:10D7C00001840020002008200120008001110000B9 +:10D7D0000002001000008310000000802004000000 +:10D7E00000000040010000050000000000110000E2 +:10D7F00000040000000000000004004100200000C0 +:10D8000000100000000000000002004100040100C0 +:10D8100000000000000000050011000000000004EE +:10D8200000000000000000000000000000000000F8 +:10D830000000000080880090000000840009024180 +:10D840001121041100014183000104890920088885 +:10D850000000000800000002080920020004809176 +:10D860000000000200C008C000C0000000881000D6 +:10D8700010880088000000040000000000001084F0 +:10D88000000000000000000000C00000004000890F +:10D89000040000880282004000C000000040000038 +:10D8A00000400000000000100000000000000040E8 +:10D8B00000000000000800200020000300204000BD +:10D8C000A0030421088000080041C00500210011C8 +:10D8D0000000008001030040002184080003008054 +:10D8E0002121019001800041080982000800000008 +:10D8F00000400000000800000000000000000000E0 +:10D9000000000000000000000800000000001000FF +:10D9100000080000000000000005000000100000EA +:10D9200000000000000000000000000000000000F7 +:10D93000000000000000000005210001080800A10F +:10D94000000009000888880421004102050009023E +:10D950000000090011100802058400400500004085 +:10D9600002048800080408040084200000008204E7 +:10D970000000000000A020000000000000000000E7 +:10D9800000A00000000000000000000000000000F7 +:10D990000000000000000000000000000000000087 +:10D9A0000000000000000000000000000000000077 +:10D9B0000000000000000000000808009005412061 +:10D9C0002100080002200203039000210000002132 +:10D9D000000500030005000300C101000005010966 +:10D9E00000000040000301040121000000000003CA +:10D9F00009410002000800080000000000080000C3 +:10DA0000000000000000000000000000000800000E +:10DA100040000000008001000180010000100005AE +:10DA200000090000002100100000000000000000BC +:10DA300000000000000000000000000000C000C066 +:10DA4000080140080810080100C0080309C0004090 +:10DA5000080002C00988410811C00040022000C02F +:10DA600008C04000091100C020C120C00082088405 +:10DA700000008200200041000000050800000000B6 +:10DA8000000400000000000000200000040000006E +:10DA90000000004005001120200004040490000054 +:10DAA00000C00000000000000000020000000000B4 +:10DAB0000000000000000000000000002000000046 +:10DAC0000000000000000004000201840088000142 +:10DAD00000008400000100C0008400C000C0A0401D +:10DAE000C01000C08282909084118285001000C016 +:10DAF0000008004000880000400000038201000090 +:10DB00000000020000000000000000000000000013 +:10DB100000000000000000000000010005000000FF +:10DB200000000000000000000000000000000000F5 +:10DB300000000000000000000000000000000000E5 +:10DB40000000000010000000000000004000000085 +:10DB50000011001100000011008000000000000012 +:10DB600080800000000080000020034000C0000012 +:10DB700000800080000000000041C141008380035C +:10DB80000000000000000000000000000000000095 +:10DB90000000000000000000000000004100100034 +:10DBA0000000000000000000000000000000000075 +:10DBB0000000000000000000000000000000000065 +:10DBC00000000011008000040000804080008040C0 +:10DBD00080A041001080041108C0000080000000F7 +:10DBE0000000000000000002000004000300881193 +:10DBF00004840000000000000000000080410003D9 +:10DC0000830300000000000000000000000000008E +:10DC100000000000000000000000000000880080FC +:10DC2000000900C00000000000000000000000002B +:10DC300000000000000000000000000000000000E4 +:10DC400000000000000000C00001008208201084D5 +:10DC5000080008050000040400010005900002000F +:10DC600000000002000000000000000002A004000C +:10DC700083008209000000000000008800004004CA +:10DC80000000830100000000000000000000000010 +:10DC9000000000000000000000000000000000087C +:10DCA00000A0000000A10000000000000000000033 +:10DCB0000000000000000000000000000000000064 +:10DCC000000000000000000484900401000803A08C +:10DCD0004021A00010A10100000104000001100279 +:10DCE000000084040390C00400A00010A0088889EC +:10DCF0000090830102C0C000900084000300000077 +:10DD000000000040000400000000000100000000CE +:10DD10000000000000000000000000000000000003 +:10DD200000010000080000010000000000000000E9 +:10DD300000000000000000000000000000000000E3 +:10DD40000000000000000000020000040010048930 +:10DD5000040000090004C090041021108804001180 +:10DD600082800000800009000000008000800080A8 +:10DD70000004218002088084A10000008000890046 +:10DD8000000000000080008500000000000300008B +:10DD90001000000000000000000000000000000073 +:10DDA000000008080011800300410000000000008E +:10DDB0000000000000000000000000000000000063 +:10DDC0000000000000000000000000100040000003 +:10DDD00000004010409082808300109011900880D5 +:10DDE000040000000011008000000000000000009E +:10DDF0000000008321000200200000040010000049 +:10DE0000000040408000C1C100850000000000000B +:10DE10000000000000000000000000000000000002 +:10DE2000000000004108210305001100000000006F +:10DE300000000000000000000000000000000000E2 +:10DE400000000000000000000000000000000000D2 +:10DE500000000000010021A00440A0000008010211 +:10DE60000002010000000000000800008400000023 +:10DE70000000C0000040008201100100000000010D +:10DE8000000000000101020040400004000000000A +:10DE90000000000000000000000000000000000082 +:10DEA0000000000000000101000000000000000070 +:10DEB0000000000000000000000000000000000062 +:10DEC00000000000000000000000000000000081D1 +:10DED00000E007004200500A00E00700000048424E +:10DEE00000E0070000000042000007000000000002 +:10DEF000000000000000820000E00000000000813F +:10DF00000000070042000000000000004800000080 +:10DF100000000000120000000000000000000000EF +:10DF20000000000000000000484200E00700500030 +:10DF300000000000000000000000000000000000E1 +:10DF400000000000000000000000000000000000D1 +:10DF5000000000000F0FC3C3CF0CCF0C0F0FC3C3C3 +:10DF6000000000000000000000000000FFC33C00B3 +:10DF70003C3CFFFFFAFFFAFF000000006969333301 +:10DF80000000000000000000000000000000000091 +:10DF90000000000000000000000000000000000081 +:10DFA0000000000000000000000000000000000071 :10DFB0000000000000000000000000000000000061 -:10DFC00000000000000000000000000000003F030F -:10DFD000555500000000000C000C0000000000007F -:10DFE00000000000800000000000000000000000B1 -:10DFF00000000102040801020408010402080102F1 -:10E000004080000000000000FFFF00000000000250 -:10E01000000000000000000000000000FF38383859 -:10E020000000000001000000FF000000FF3FC303EC -:10E030000000000000000000000000000000003CA4 +:10DFC0000000000000000000000000000000000051 +:10DFD0000000000000000F0FC3C3CF0CCF0C0F0FC9 +:10DFE000C3C3000000000000000000000000FFC3E9 +:10DFF0003C003C3CFFFFFAFBFAFF000000006969AF +:10E0000033330000000000000000000000000002A8 +:10E010000000000000000000000000000000000000 +:10E0200000000000000000000000000000000000F0 +:10E0300000000000000000000000000000000000E0 :10E0400000000000000000000000000000000000D0 -:10E050003F03555500000000AA8AAA8A000000006C -:10E0600000000000100000000000000000000000A0 -:10E070000000000004011040248100000600900010 -:10E08000040108027D0F7D0FFFFF555500000000C1 -:10E090000000000000000000000000000000D3D3DA -:10E0A00000000F0D030D0000000000000000FFC382 -:10E0B000FFC30C0C000000000000C341C34100007E -:10E0C00000000000000000000000FF00FF00553CC1 -:10E0D0003535FF4DB20000000000FFCFFFCF00003C -:10E0E0000000000000000000000000000000000030 -:10E0F00000020000000008022080000024810006C9 -:10E100000090104020807D0F7D0FFFAA5500000079 +:10E05000000000000000000000000000FFFFFFFFC4 +:10E06000000000AA00000000505050505F5F7D2863 +:10E07000C0C0C0C0FFFFFFFF0000000055D5551510 +:10E080005555AAAA7D7D3F03000000000000000056 +:10E090000000000000000000000000000000000080 +:10E0A0000000000000000000000000000000000070 +:10E0B0000000000000000000000000000000000060 +:10E0C0000000000000000000000000000000000050 +:10E0D0000000000000000000000000000000FFFF42 +:10E0E000FF7F000020AA00000000FAFAFAFA0A0AEC +:10E0F0007D28CFCFCFCFFFFFFFDF00000000AA2A8F +:10E10000AAEA55956AAA41413F03000000000000B9 :10E1100000000000000000000000000000000000FF -:10E1200083D300000F0D030D00800000008080806D -:10E13000FFC3FFC300000000000000004141414157 -:10E14000000000000000000000000000AF05AF0567 -:10E1500055553535FF7D820000610007000D000038 -:10E160000561000F000D000000610007000D0000B8 -:10E1700085610A0C850D00A060610007000D10008C -:10E1800000610007000D080000610037000D00006D +:10E1200000000000000000000000000000000000EF +:10E1300000000000000000000000000000000000DF +:10E1400000000000000000000000000000000000CF +:10E15000000000000000000005610A2F050D00A06E +:10E1600005610A2F850D00A105610A28850100A01F +:10E1700005005028050000A000000000001000006D +:10E18000006100008091000005005028050000A0FB :10E19000000000000000000000000000000000007F -:10E1A000000000690E37000500000061003F000D0F -:10E1B000000000613007C00D000100610022000D69 -:10E1C00000008061002E050D00A000610007000D19 -:10E1D000000000610007000D0001000000000F0FAB -:10E1E0000F0F00000000EBEB28EB00000000000028 -:10E1F0000000FF38FF3800000000000000000000B1 -:10E20000FFFF0000000000000000000000000C0CF8 -:10E210000F0F0000000000000000000000000000E0 -:10E220000000000000F00AFAC355C355C300FFFF09 -:10E23000F0F0F05ABEBEBEBE0000000000000000BC -:10E240003000F3FF0000000014BE14BE0000000008 +:10E1A000000000000000000000000000000000006F +:10E1B000000005610A2D850900A000000000000094 +:10E1C000000000000000000000000000000000004F +:10E1D0000000000000000000000000000000FF0040 +:10E1E0000F0FCACA00F0FF0FF0003F3FFF0F08F803 +:10E1F0000BFB000000000000000000000000000019 +:10E2000000003CF53CF500FF00FF000000000000AE +:10E2100000000000000000000000000000000000FE +:10E2200000000000000000000000000000000000EE +:10E23000000000003CFF550F30F3EBEB0000000046 +:10E2400000000000000000000000000000000000CE :10E2500000000000000000000000000000000000BE -:10E2600055C3000000000000000000000000000096 -:10E2700000000000FF3CFF3C000000000000000028 -:10E280000000F3F3000000000000000000000000A8 -:10E290000F0F000F00000000000000000000000051 -:10E2A0000000000000000FFF0FFFFFFFFFFFC30093 -:10E2B0005555F0F0F0F0BEBEFF0F0000000000006A -:10E2C00000003000F3FF0000000000FF00FF00002E +:10E26000FF000F0FCACA0FFFFF0FF0003030F000A1 +:10E2700008F80BFB00000000000000000000000098 +:10E28000000000003C053C051414BEBE0000000068 +:10E29000000000000000000000000000000000007E +:10E2A000000000000000000000000000000000006E +:10E2B0000000000000003C00550F30F3282800004B +:10E2C000000000000000000000000000000000004E :10E2D000000000000000000000000000000000003E -:10E2E0000000050F000000000000A0A088A00000B2 -:10E2F00000F000000000000000000000000000002E -:10E3000000003A3A0FFF80A8000000000000000063 +:10E2E00000000000000000000000000000003C3CB6 +:10E2F0003C3CFCFC00FF00000000000000000000AF +:10E30000000000000000FF55AA0000F00FFF000011 :10E3100000000000000000000000000000000000FD -:10E320000000000000000000C0C0CFCFFFFF00537E -:10E33000CBCBCBCB00B2007100000000000000FF8F -:10E340003C000C0C00000000000000000000000079 -:10E3500000000000000000008383010100000000B5 -:10E36000000000000C0C0C0C00000000A0A0A0A0FD -:10E37000000000F0000000000000000000000000AD -:10E38000000000003A3A00F0A8A8000000000000D9 +:10E3200000000000000000000000000000000000ED +:10E3300000000000000000000000000000000000DD +:10E3400000000000000000000000000000000000CD +:10E3500000000000000000000000000000000000BD +:10E3600000000000000000000000000000000000AD +:10E37000FFAA55000C0C00FF000000000000000088 +:10E3800000000000000000005F5F0A0A0CFC0CFCAB :10E39000000000000000000000000000000000007D -:10E3A00000000000000000000000A0AFA0AFFFFFD1 -:10E3B00000AC0849490800B200B2000000000000AB -:10E3C00000FF3C000C0C00000000000000000000FA -:10E3D0000000000000000000000083018301000035 +:10E3A000000000000000000000000000000000006D +:10E3B000000000000000000000000000000000005D +:10E3C000000000000000000000000000000000004D +:10E3D000000000000000000000000000000000003D :10E3E00000000000D6CE10000E9620B60000C02A15 :10E3F000472B40EB5FDF0B22FC21400B1210020089 :10E40000020C801801480608080220281004011494 @@ -138854,192 +138854,192 @@ :10E43000440000000008000600000000000000008A :10E4400000000000000000000000000000000000CC :10E4500000000000000000000000000000000000BC -:10E46000000000000000200020002000000020002C -:10E47000200000002004820082008300840020111C -:10E480000404050000008403C000400020002000B8 -:10E4900020002000040020000000200088008800E8 -:10E4A000840304000003C00041002000200021007C -:10E4B000102120104000200088000480200004006B -:10E4C0002090200088000000200888002000200004 -:10E4D0000000000420002000200020002000200078 -:10E4E000200000C1201000040300000400040040CC -:10E4F0000040050000000090000000002002100015 -:10E5000000904002200404A00400110000008000DC -:10E51000000084008490400041000000000202A03E -:10E520000500200005000000050020000000050097 -:10E5300020002002000009001100000080200000DF -:10E540000000000400000000004000000020000067 -:10E550000000000004000000C00080008000800077 -:10E560008000800010048001000000000000021004 -:10E5700082108200000088000200080000000010E5 -:10E5800002000800084000008200000002000000B5 -:10E590000200020000400040900002000000004025 -:10E5A00000000800030541400000000000000008D2 -:10E5B00000100000000000000020000000000080AB -:10E5C0000040020020404040200000000000000009 -:10E5D00000400000020000000040000000000000B9 -:10E5E00008000000020001000040000003000000DD -:10E5F00000080900000002000200050002000000FF -:10E6000000000000000000080000000000000400FE -:10E61000039000000000200000080008008840006F -:10E62000000000C0000020C0C01000000000000476 -:10E6300000000088008800000088000900840000B5 -:10E640000020008400008010800085000900000088 -:10E650000408000000002000201000080000000056 -:10E6600000880000000020002000200000000002C0 -:10E670000000000000000020000090080000A0083A -:10E680000000A0004000820020000810C000C00070 -:10E690008400A00040000200200888000000000064 -:10E6A0000800400800008800008000800000000092 -:10E6B00000000000080001000500A0100400820016 -:10E6C0000080C0088800400000000000A141100543 -:10E6D000840010000008000000000000000000009E -:10E6E000000008000000200082040000200041001B -:10E6F00005000900000000000200030003000008FC -:10E700000300210000042108000003820308050023 -:10E710000082058402A011040010800040840810CB -:10E720000010001000100090000000040002000023 -:10E730000000210041004000200020400500C0A052 -:10E740002188051011000000A18800880390208214 -:10E75000000000C000000000210000A000004000F8 -:10E7600008000000058221008000000521000084CF -:10E770000011C009401100000000040040004000EA -:10E78000A0008200084000000809004108080800B5 -:10E790000009A0000809002082002041200000009C -:10E7A00040008200A000A0000005080004118511AF -:10E7B0000000200008001000C0000104210010111A -:10E7C000090088201000822000C1A00000800011F4 -:10E7D0000091A000A0000800000000004020000000 -:10E7E0000000000008008211A000080000110800CD -:10E7F000A000410000000000000000000000000038 -:10E80000000004C000000400090000000200000035 -:10E81000000000000800000000000000C1040484A3 -:10E82000210000002100030000001004110000007E -:10E830004000000080000000009000002088A00040 -:10E840000000040000A1080000010020008800046E -:10E850000000200400000000000000000000000094 -:10E8600000000000000000000000000000000000A8 -:10E870000000000000000021000000000000000077 -:10E88000040000000000C000000000000000840040 -:10E89000A00000000000000882000000000400004A -:10E8A00000000100000000000000000009800000DE -:10E8B000008008000000820000004000010000000D -:10E8C000C00000008482000004200000000000005E -:10E8D00011040000080000200000000800000000F3 -:10E8E00000000000000000000000820000000000A6 -:10E8F000000800000400000400000000210000C027 -:10E900000020041000A00590110003C000020000C8 -:10E91000000002A0030203040010110010084009C7 -:10E9200000001008208400000000000000000240E9 -:10E9300000080510000000000000000000A02000FA -:10E94000058803904008412009100002050003A03B -:10E9500009000483211005904100030041000002DA -:10E96000030005000084009000000000000000008B -:10E9700000884100002000A000000000000000000E -:10E980004000020008000400040000002000000015 -:10E9900000008200000020000000840084000800C5 -:10E9A0000400040082048200A00000000040200255 -:10E9B000A00084000000000000000004000020000F -:10E9C000000010800100000005008804000005041C -:10E9D00040000800040400000004080000000000DB -:10E9E0000000000800000000040000000000820297 -:10E9F000080000000000000000800000000000008F -:10EA000000000300000020000000000000000800DB -:10EA100000200000000000000000000000001000C6 -:10EA200000000000000009000000000000000008D5 -:10EA30000000000000000000000000000082000054 -:10EA40008000080000042000000084002100000075 -:10EA50000400000000000001100008010000000098 -:10EA600000000000000000000000000000000000A6 -:10EA70000000000000000000000000040000000092 -:10EA80000000000000000000000000000000000086 -:10EA90000000000000000000010000000000000075 -:10EAA0000000000000000000010000000000000065 -:10EAB0000000000000000100400000000000000015 -:10EAC000000001000000018800880000900000881C -:10EAD00000200020100400044091C00000830000CA -:10EAE0000000000000000000000000000000000026 -:10EAF0000000010000000100000000000000000014 -:10EB00000000000000000000000000000000000005 -:10EB100000000400000000000000040000000000ED -:10EB200000000000000000000000400000000000A5 -:10EB300000000000000000000300000000000000D2 -:10EB4000000000004000000011080021001000102B -:10EB500003000000000080800303218800080003F8 -:10EB600000000000000000000000000000000000A5 -:10EB700000000000400000004000000041000000D4 -:10EB80000000000000000000000000000000000085 -:10EB90000000000000000000000000000000000075 -:10EBA0000000000000000000000800000005000058 -:10EBB0000000000000000000000000001100210023 -:10EBC0000000000500000040000000000000800080 -:10EBD00000400000000300808000000021000000D1 -:10EBE00000410000000000000000000000000000E4 -:10EBF0000000004000000008000000088000004005 -:10EC00000000000000000000000000000000000004 -:10EC100000000000000000000000000000000000F4 -:10EC200000000000000000000000000100000000E3 -:10EC300000000000000000000000000000000100D3 -:10EC400001C00000000000000000000090880000EB -:10EC5000A00000018800200100C0082000A00100E1 -:10EC600000000001000000000000000000000000A3 -:10EC700000000000000000000000000088001000FC -:10EC800084010800000000000000000000000000F7 -:10EC90000000000000000000000000000000000074 -:10ECA0000000000000000000000000000000040060 -:10ECB0000000000000000000000000000001000152 -:10ECC00000000000000000004000000000000008FC -:10ECD000019000C000884000008890840008000077 -:10ECE00001010101C100000000000000000000005F -:10ECF00000000000000000004000000000000000D4 -:10ED000008000000000000000000000000000000FB -:10ED100000000000000000000000000003000000F0 -:10ED200000000000030000000000000000000000E0 -:10ED3000800000002000000000000000000000042F -:10ED40000010001000000000000000000000400063 -:10ED5000008010801100008080000000808003800F -:10ED6000002011110505110800000000000000003E -:10ED70000000000000000000000000000000200073 -:10ED80000000000000002000000000000000000063 -:10ED90000000000000000000000000000000000073 -:10EDA0000000000000000000000000000000000063 -:10EDB0000000000000000000000000000000000053 -:10EDC0000009000000000005000000000000000035 -:10EDD00000000900211109800300800000A100004B -:10EDE00000001000101105000840000000000000A5 -:10EDF0000000000000000000000000000000000013 -:10EE00000000000000000000000000000000000002 -:10EE100000000000000000000000000000000000F2 -:10EE200000000000000000000000000000000000E2 -:10EE300000000000000000000000000000000000D2 -:10EE400000000000000000000000000000000000C2 -:10EE500000000000000001010008010090001009FE -:10EE60008800A0000108010101000000000000006E -:10EE70000000000000000000000000000000000092 -:10EE8000000000000000000400C0000000000000BE -:10EE9000000000000000000000000000000000E092 -:10EEA00000000000000000E0000000000000000082 -:10EEB00000000000000000E0000000000000000072 -:10EEC00000000000810000E00000000000000000E1 -:10EED00000E000000000600000E0070000000041CA -:10EEE000000007000081000000E007000081000032 +:10E460000000000040090000000020000002000041 +:10E4700088000008208000802000000400000000C8 +:10E480004000000520110100000000050004000903 +:10E49000000000080005002000000000000500A0AA +:10E4A00000000000000340000000008400000000A5 +:10E4B0000005000000022000200020800000000075 +:10E4C0000000000410002000000000000000000018 +:10E4D000000000000000200020002000000000805C +:10E4E0000005000020000000000000000000000007 +:10E4F00000002104000440400040800000000000B3 +:10E50000000000000004000002000000000000C144 +:10E510000000000000000000000100000000008476 +:10E520000010000000840000000000000002000055 +:10E530000000000000020001800080008010000048 +:10E5400000000000000000000000000000000000CB +:10E550000000009000900000000000040000000097 +:10E560000002000000000000200000000105000083 +:10E5700001000003010800040004001000049009D9 +:10E58000010000054000000400210000001100000F +:10E59000A01100009004408500840000008800095C +:10E5A000004100800010000000000000000000009A +:10E5B000000004000041000000800008000000008E +:10E5C000000000040200200500000000A000A000E0 +:10E5D000A000000400000005000000000000000092 +:10E5E00000040000000400050000808400082008EA +:10E5F000000820C00004204000000889000000C17D +:10E6000000A020C000040000000800080008000866 +:10E6100000080008001040098004002100000021CB +:10E620000000000000100001000800000082000847 +:10E630000008008480100084000400200000000016 +:10E640000000000000830008800400080084000827 +:10E65000000800840090000800900008008400007A +:10E660000000008400C0000800000008400500020F +:10E6700000218203A121000001210021200888033C +:10E680000005000200218809020502210103C021C2 +:10E6900002020202904184040010002100050003E0 +:10E6A00000210120002100080021000200000008D4 +:10E6B00000000009000000080008000801058800AB +:10E6C00000000000002102080040000000200000BF +:10E6D00000000000000800000021000800110008F0 +:10E6E000002100080008004000410008000240101E +:10E6F000088403C0000020A0000820000000801053 +:10E7000000A000000001094000089100800202887A +:10E7100000008041A08900080003000000A0001054 +:10E720000088001002010008000000880085000039 +:10E73000000000000084000000000000000020082D +:10E7400000000000000000000000000000000001C8 +:10E75000000000A000A00000000000000040000039 +:10E7600000000000000000000000000000000000A9 +:10E77000C002000508800000002100110080000098 +:10E780002000202140000000A000000020C100095E +:10E79000080488048204080482410000080500007F +:10E7A00008000080088300800005000408000100C4 +:10E7B00000000888C08082000083000001008320E0 +:10E7C00000000002000000040011018000A1408050 +:10E7D00001000021000000000000000500000040D2 +:10E7E00000100041000000040000000000000000D4 +:10E7F0000000000400C00004000000A000A01104FC +:10E80000008200842188030800041084000482042C +:10E8100040A0000109050301000100000000030001 +:10E82000001000A0000405040004098800A00008EE +:10E8300004820000002000200000212000A0200011 +:10E84000040120200582030000010008400400208C +:10E8500083204000008400000020000200A000008F +:10E860000001002100840084008200A0000400A0B8 +:10E8700000000000C0084002012100000204022143 +:10E8800090210021820090020302020341210041F5 +:10E8900010A100028400C0002000C0020080850892 +:10E8A0008883C0A183418408008082C000110109CF +:10E8B00082000005000040208420842000200020E9 +:10E8C00000022003C00000032003004100110020CB +:10E8D000000400110004000000000000000000001F +:10E8E00000000003000000000005000000400000E0 +:10E8F0000021880000000500850020000900910922 +:10E9000080000500000209000501A002800020002F +:10E91000000005040501020000000002090000409B +:10E9200002080040054040880991000809030000E2 +:10E9300008000000000000000001000100010001CB +:10E9400000010000800000000000800000000000C6 +:10E950000001098900000001000000000000000023 +:10E960000000000000000000000000000000009017 +:10E9700000000000000000002004A00401040104C5 +:10E98000002120089004000420004004A005000499 +:10E9900088A10082A02100044004C0040409880466 +:10E9A00000410011A0040004000401100021001027 +:10E9B000820808828209C100000001C1C1800120D3 +:10E9C00001088421010020088400010201000009DF +:10E9D0000084000800200000002100000202001155 +:10E9E00001030041000000000000002100000000C1 +:10E9F0000000000800410000000083824182020004 +:10EA00000282001000C0110420A080A004C02000D9 +:10EA100000840040004120840000400200A000204B +:10EA200000900000021008C0021011820201009044 +:10EA300000010000A01000820482000004200420D5 +:10EA40000401040000040400119020A02000200014 +:10EA500000820005000005C120001088008400C06D +:10EA60000400400200000000030800A000000000B5 +:10EA7000000000C000A00000110000A0020340211F +:10EA8000908804082141200590A110A04041114127 +:10EA90009004C00810A0A1A0900302090488A0025D +:10EAA000048490080302112010A0A09001C188895D +:10EAB0004040001188C000000000209000000000CD +:10EAC000000000000000010021002100000083A1DF +:10EAD0004108040882210001C0000200000000007B +:10EAE0000000020000000000000000000000000024 +:10EAF000000000000000000188011101000191895F +:10EB000011A18000009120C021A180098080404097 +:10EB100010A18082808382008203800880830500A8 +:10EB2000008082000080C08088808900000010C1C1 +:10EB30009140820400100980210000000080000044 +:10EB400000080020001000201100900010000000BC +:10EB5000119003A100208010110802210910000467 +:10EB6000000008000000000000000000000000009D +:10EB700000000000000000001010210390110008A8 +:10EB8000809103852082A183118088A18209A1A19F +:10EB9000038240A1A189A10388C1C18583082108FE +:10EBA0004008900285C1008080118003008300002E +:10EBB00000000000802080000000000080000000B5 +:10EBC00000001000210005004005108421002104F0 +:10EBD0000991000241082011100510081080402101 +:10EBE00010800840080002000800800000050000B6 +:10EBF0008000000000000000000000000200110082 +:10EC00000803109020C00540A1C1029009C108A0CE +:10EC100083C0409021C008041109039008C0082156 +:10EC2000C1C0900103888282C01002008202820368 +:10EC30008202100088000401C000000000000200F1 +:10EC4000000000000110018200000184010301881E +:10EC5000000100C100000000001101900001000847 +:10EC6000000001C000010100000000000800A00039 +:10EC700088201000000000000000000000000000DC +:10EC800000000191912001C0C10204029110018590 +:10EC9000C0030804112000C008C12082092083217C +:10ECA000C0912090C0028204101104A00208084004 +:10ECB00010830205890108000801030104110010F6 +:10ECC0000009A08800000000000082000000010090 +:10ECD000040020010000400500A00540028501005D +:10ECE000840040000001000000000001000000005E +:10ECF000000008000000000000000000000000000C +:10ED00000101010001004110201085031190419084 +:10ED1000038482889102C1100005100800C14111CE +:10ED2000888489050210828000400010200003853D +:10ED30008082000389824108A140A010884100849C +:10ED400000800084008000004000110011001100CC +:10ED50004109000580211104038800809020801162 +:10ED600041048208C040101000020020002100026F +:10ED70000000000000000000000000000000000093 +:10ED8000000011100500111010111089C1001003AE +:10ED900090020400A0801009820985021089900267 +:10EDA00091090400858010048009800080800000A3 +:10EDB0000004800400000000000200830000000046 +:10EDC00000100080000000000000218920050500DF +:10EDD0001020118211040300084004899100900062 +:10EDE00004090020000400000009000000000000E9 +:10EDF0000008800080020000800000000000000089 +:10EE00000000090411000000101088C0200508C08F +:10EE10000405100021A00302C001020008A1A10402 +:10EE200010008200C1100304C00002000820081076 +:10EE30002000A000048482C0C000000000030088FD +:10EE40000000000000A0000000000000010400001D +:10EE50000100010000020001000001002040030049 +:10EE6000110020A000C10000000000000090000080 +:10EE7000000000011000402090908200000000007F +:10EE8000000000000001000000000000820000E01F +:10EE900000004842810000E000004842810000E09C +:10EEA00000004812880000E000004842810000E0B5 +:10EEB00000008200810000E000000000600600E029 +:10EEC00007008200008100000700000000000081B0 +:10EED000000007000000810000E0070082128100AE +:10EEE00000E000000000000000E00700820A0000CF :10EEF0000000000000000000000000000000000012 -:10EF000000E000000000000000E000000000000041 -:10EF100000000000000000000000000000000000F1 -:10EF200000000000000000000000000000000000E1 -:10EF300000000000000000000000000000000000D1 -:10EF400000000000000000000000000000000000C1 -:10EF500000000000000000000000000000000003AE -:10EF6000C3C300000F0F0F0F0000000000000000DF -:10EF70000000000000000000000000000000000091 +:10EF0000000000000000810000E000000000FBB9EC +:10EF10006220F9FF6000BF2FFFFFF7FFC7FFFB383C +:10EF2000E320F960BD243F30FF00F960BD24096F84 +:10EF30004B4B817E0FF0930393F30FCC69CC000011 +:10EF400000000000000000000000001000000000B1 +:10EF500000000000000000000000000000000000B1 +:10EF600001098199C2E6DAFE0000000000000000FD +:10EF700000000000000000007F766F6600000000C7 :10EF80000000000000000000000000000000000081 -:10EF90000000000000000000000000000000000071 -:10EFA0000000000000000000000000000000000061 -:10EFB0000000000000000000000000000000000051 +:10EF9000FFFF0000BDFF2400B0200000340004008B +:10EFA000FF00FF00FF00FF006F60FF00FF00FF0099 +:10EFB000F690B4B4BD420FF06CFC6C0C96CCF0CC67 :10EFC0000000000000000000000000000000000041 -:10EFD0000000000000000000000000000000FF0F23 -:10EFE000FF0FE3C32000000F0F0F00000000000020 -:10EFF0000000000000000000000000000000000011 +:10EFD0000000000000000000000000000000000031 +:10EFE0000000030FC3FF99FF99FF0000000000001D +:10EFF00000000000000000000000191009000000DF :10F000000000000000000000000000000000000000 :10F0100000000000000000000000000000000000F0 :10F0200000000000000000000000000000000000E0 @@ -139049,1486 +139049,1486 @@ :10F0600000000000000000000000000000000000A0 :10F070000000000000000000000000000000000090 :10F080000000000000000000000000000000000080 -:10F090000000000000000000000000000000000070 -:10F0A0000000000000000000000000000000000060 -:10F0B0000000000000000000000000000000000050 -:10F0C0000000000000000000000000000000000040 -:10F0D000000000000000000000000000000000FF31 -:10F0E000000000000000000003000F0F1F1F24009D -:10F0F00066000000000000000000000000000000AA -:10F1000000000000000000000000000000000000FF -:10F110000000C3E1F0F0000000000000000000006B -:10F1200000000000000000000000000000000000DF -:10F1300000000000000000000000000000000000CF -:10F1400000000000000000000000000000000000BF -:10F1500000000000000000000000000000000000AF -:10F1600000FF0000003C003C0C000F000F0F1F1FB1 -:10F170002400660000000000000000000000000005 -:10F18000000000000000000000000000000000007F -:10F1900000000000C3C3F0D2000000000000000027 -:10F1A000000000000000000000610007000D0000EA -:10F1B00000610007000D00000000000000000000DA -:10F1C00000610007000D00000000000000000000CA -:10F1D00000610006C0150000000000610007000D7E -:10F1E000000000614000C00D000000000030000081 -:10F1F00000000061000400090000000000000000A1 -:10F200000000000000000000000000610007000D89 -:10F21000000000610007000D000000000000000079 -:10F2200000000000000000000000000000000000DE -:10F2300000000000000000000000000000000000CE -:10F2400000000000000000000000000000000000BE -:10F25000000000000000002000200000000000006E -:10F26000000000005050505000000000000000005E -:10F2700000000000003C003C0000287F000000006F +:10F09000000000000F0F0FBD0424DFFF3C3C3CF6D6 +:10F0A0003C063C9FFFFFFF6C6642667E06F60CFC4A +:10F0B000990F66F0660F99F0FF930093F330DB1819 +:10F0C000F04DF07100FF3C3C6F6F0CFC424299998F +:10F0D0000066006600000000000000000000000064 +:10F0E0000000000000000000FBC300000000000062 +:10F0F0000000000000000000000000000000000010 +:10F10000000006061E1E00000000000000000000B7 +:10F110000000000000000F0F0F240400DFDB3C3C68 +:10F120003C063C3C3C3C0000006C664E664E00FFDA +:10F1300000FF993C66C33C3CC3C3006CFF6C0CCF22 +:10F1400024E70F4D0F710F0F666660600CFC4242A2 +:10F1500000000066006600000000000000000000E3 +:10F1600000000000000000000000FBFB00000000A9 +:10F17000000000000000000000000000000000008F +:10F1800000000000069F069F000000000000000035 +:10F190000000000000000000406180028025100295 +:10F1A00040618002802510024061800280251002AB +:10F1B000406180028025100240618007802D10028E +:10F1C00040618007802D00020561502B85090005F4 +:10F1D00000615026000D0000000005610A2E050D9B +:10F1E00000A005610A0F850D00A0006100008001EC +:10F1F000000005610A0F050D00A000610006000D6A +:10F20000000080000000000000000000000000007E +:10F2100000000061000580010000FF5575558ABAA5 +:10F220008ABA0F555555BAFABABA0F550F55BAFAE8 +:10F23000BABAFF557555BABAFABA000000005F0AAB +:10F240005F0A000000007D417D4100000000C0FC1D +:10F25000BEBE00000000FFFFFFFF0000E3F3000060 +:10F260000000000080A0C0F0D7D717173F3F303014 +:10F27000AABE000000000000F0AA3C3C0000000014 :10F28000000000000000000000000000000000007E -:10F29000000000000000000000000000000000006E -:10F2A000000000000000000000000000000000005E -:10F2B000000000000000000000000000000000004E -:10F2C000000000000000000000000000000000003E -:10F2D000000000000000000000000000000000002E -:10F2E0000000000000007C7C7C3C0000000000006E -:10F2F000000000000000001000140000287D000045 -:10F3000000000000000000000000000000000000FD -:10F3100000000000000000000000000000000000ED -:10F3200000000000000000000000000000000000DD -:10F3300000000000000000000000000000000000CD -:10F3400000000000000000000000000000000000BD -:10F35000000000000000000000000055FFFF00005A -:10F360000000000000000000FFFFFFFF00000000A1 -:10F370000000000000000000F0F00000505050506D -:10F38000000000000000000000000000000000007D -:10F39000000000000000000000000000000000006D -:10F3A000000000000000000000000000000000005D -:10F3B000000000000000000000000000000000004D -:10F3C000000000000000000000000000000000003D -:10F3D0000000000000000000000000000055FFFFDA -:10F3E000000000000000000000000404FF04000012 -:10F3F00000000000000000000000F8F0F800555583 -:10F400005555000000000000000000000000000052 -:10F4100000000000000000000000000000000000EC -:10F4200000000005400000084002840000050400C0 -:10F4300083000004400088001000208000000100CC -:10F440008491400520000003200004008400041083 -:10F4500000009102408020038500C0000000840568 -:10F460002000000120002010000020000002040203 -:10F4700020000100202105000202408220008400BB -:10F48000204000002000200000202000000020007C -:10F4900040000000200088002000C0002000200064 -:10F4A00000000200000000022100400000000000F7 -:10F4B0008000020000020000000000008004040040 -:10F4C00020C04104000004000410000000020900F4 -:10F4D0000000000020010904800440000400050031 -:10F4E00009000000000004000500000011000401F4 -:10F4F0000001000040000000400000010011000079 -:10F5000000000000000000000000000000000400F7 -:10F5100000000000000000000000000000000000EB -:10F52000000000C000000000000002000000040015 -:10F530000000004000C002000200000000000210B5 -:10F540000210021008400800000000000800080037 -:10F550000100000000000002020000400000020064 -:10F560000200000000000000000000000000004059 -:10F570000000009001401040000020000080208426 -:10F580000200020000400040000000000000840073 -:10F59000000000000000080000400200000002001F -:10F5A00000000040000004100000200000000400E3 -:10F5B0008000000000080040000000020408400035 -:10F5C000000000000008000000000000000400002F -:10F5D00000002000000800100009000004080004DA -:10F5E00000000000021000000000000004400000C5 -:10F5F00000010000000308100000000405000002E4 -:10F6000000100000000000000000000000000000EA -:10F6100020000000000000000008040000000000BE -:10F6200000000008000000020000000004000000CC -:10F63000000000000000000010200408000010007E -:10F6400000000802202100408400200020008400E7 -:10F65000208002400008000982004002200084054A -:10F660002000000000000400000000000000002155 -:10F67000000000000800410201038410A000820283 -:10F68000400283A1C0408200C04002200008000068 -:10F6900010000040000000080000A0204000820090 -:10F6A000000040000000000000000000000000001A -:10F6B00000000000040000880000000000000200BC -:10F6C0000000000008008900090000208000804040 -:10F6D0000000A10400004182000000008001080039 -:10F6E00008000800080000000000000000000300FF -:10F6F0000000031003008000C00108000201410067 -:10F70000008980210210000021A00000800000007C -:10F7100004000000000000000000100003200000B2 -:10F7200000000000050010000000000000000000C4 -:10F730000000100000000800000000080120000088 -:10F74000000000000000400284002000040000408F -:10F7500020000000000000000040A00001000400A4 -:10F7600000028402200000000000001000000000E1 -:10F770000000C00000000402001085004000A0024C -:10F78000C002080400820800000000000009088090 -:10F790000000100000000000000000000000000059 -:10F7A0000000080000000010000000000800000039 -:10F7B0000000000000000000000011000000021125 -:10F7C0000900110000000000400000A080A000001F -:10F7D00021A0910810C002000300110000004000A9 -:10F7E00000C000A100018508000000004100008465 -:10F7F000000000C009000088000008C1400080002F -:10F80000000100C010C0000308C000000000100884 -:10F810000040410003000500030000000000080054 -:10F8200000000000000000000000000000000000D8 -:10F8300000000000000000000000000000000000C8 -:10F840000000000002000000000200000000900024 -:10F85000080000008803C08000000004840000400D -:10F8600000000020400000008400000000219010F3 -:10F870000021000000000000000000000040408067 -:10F8800000C08800000090850080A00500081000DE -:10F890000000002100000000000000000000000047 -:10F8A0000000000000000000000000000000000058 -:10F8B0000000000000000400000000000000000044 -:10F8C000000000020900002000000000000000000D -:10F8D000000000000004000000040000000100001F -:10F8E0000300000000008000000000001000000085 -:10F8F00000000000000000880000000000001188E7 -:10F900008802091011000000000208024084110062 -:10F91000021003400300000000000000110000007E -:10F92000000000000000008400000000080000004B -:10F9300000C0000000000000000000000000000007 -:10F940000000000000000000000500000008820028 -:10F950000021400084000000004120000000200041 -:10F960002000200420800040000000000000000073 -:10F970000000004100000000000000000000024004 -:10F980000200418284004000000040C14002014169 -:10F99000000000100000001000000000000008003F -:10F9A0000000000000000000000000000000000057 -:10F9B0000011000000000000000000000000000036 -:10F9C000000000000000000800000000002000000F -:10F9D00000A000840082000000004102A184208277 -:10F9E0008800800888018804000000004000008230 -:10F9F00000000000001002000000000005001000E0 -:10FA0000800100A0C0030000800000000802800107 -:10FA100002020500000000000000000000100000CD -:10FA200000080000000000000000000000000000CE -:10FA300000000000000000000000000000000000C6 -:10FA400000000040A0100082004000000000000004 -:10FA50000000000084000100000000000000000021 -:10FA6000000000000000080000000000A100840168 -:10FA70000001000000000000000000000020001055 -:10FA80000000000001880021000800A10290A000F1 -:10FA90000020100000900020000000000000000086 -:10FAA0000000000000000000000000000000000056 -:10FAB0000000000000000000000000000000000046 -:10FAC0000000000000800000008000000000000036 -:10FAD0000000000000000000030000000000000023 -:10FAE0000200000009000000410000000020821117 -:10FAF0008903000400000000000000000000200056 -:10FB0000000000000000218000A100890088800022 -:10FB10008000000000000000000000000000000065 -:10FB200000000000000000000000000000000000D5 -:10FB300000000000000000000000000000000000C5 -:10FB4000000000000000000000090010000000009C -:10FB5000000000000000000300000010000000088A -:10FB60000000000800000040000000110000000537 -:10FB700010000005108000000000000000000000E0 -:10FB8000000000A10080000080008900C000091072 -:10FB9000000020058000034100000020000000005C -:10FBA0000000000000000000000000000000000055 -:10FBB0000000000000000000000000000000000045 -:10FBC00000000000000000000000000200890002A8 -:10FBD0000000000000000000000000000001000024 -:10FBE0000000000000000000000000000000000015 -:10FBF000008800000000001000000000000000006D -:10FC00000000000000020010000010A01000A10081 -:10FC1000000100824140A020A1010000004000102E -:10FC200000000000000000000000000000000000D4 -:10FC300000000000000000000000000000000000C4 -:10FC4000000000000000000000001100000088001B -:10FC5000A100000000000000000000009000000073 -:10FC600000000000200000000000000188000000EB -:10FC7000000000000400A0010000000000000000DF -:10FC800000000000000000000000000000A10008CB -:10FC9000A00302080003000100A000010000000012 -:10FCA0000000000000000000000000000000000054 -:10FCB0000000000000000000000000000000000044 -:10FCC000000000000000000000000000C100000073 -:10FCD000000009000000000000000000000000001B -:10FCE0000000200000008000000003000010001051 -:10FCF000001003000041C110911005030000000036 -:10FD000000000000000000000000000000000020D3 -:10FD10000080802184800003000200880010000021 -:10FD200000000000000000000000000000000000D3 -:10FD300000000000000000000000000000000000C3 -:10FD4000000000000000000000000000000080042F -:10FD50000000000080000000000000000000000023 -:10FD6000000000000000000800000000000000008B -:10FD70000000000000001000020010004000000021 -:10FD800000000000000000000000800000000000F3 -:10FD9000410020000521020011008402838004023A -:10FDA00000000000800000000000000000000000D3 -:10FDB0000000000000000000000000000000000043 -:10FDC0000000000000000000000000000000000033 -:10FDD00010001000200008000000000000000000DB -:10FDE0000000000000000000000100000000000012 -:10FDF0000000000000000000000000000000010002 -:10FE00000000000000000000000082000800020066 -:10FE10000200200001002101000020001091A10437 -:10FE20001001A000080004004000000000000000D5 -:10FE300000000000000000000000000000000000C2 -:10FE400000000000000000000000000000000000B2 -:10FE50000000008100000700840000000000000096 -:10FE60000000000000E000000000000000E00000D2 -:10FE70000000000000E000000000000000E00000C2 -:10FE80000000000000000000000000000000000072 -:10FE90000000000000000000000000000000000062 -:10FEA000000000060000000000000000000000004C -:10FEB0000000000000000000000000000000000042 -:10FEC0000000000000000000000000000000000032 -:10FED000000000002828F0F00000000000000000F2 -:10FEE0000000000000000000000000000000000012 -:10FEF0000000000000000000000000000000000002 -:10FF00000000000000000000000000000000FFFFF3 -:10FF10000000000000000F0F0000000C0000EFEFD9 -:10FF2000454500BE00BEFFFF0000000000000000CD -:10FF300000000000000000000000000000000000C1 -:10FF400000000000000000000000000000000000B1 -:10FF500000000000000000AAF0F000000000000017 -:10FF60000000000000000000000000000000000091 -:10FF70000000000000000000000000000000000081 -:10FF80000000000000000000000000000000000071 -:10FF9000CF5FCF5F000000000F0F0000000C0000DB -:10FFA000FFAF5505001400147F4F7F4F0000000085 -:10FFB0000000000000000000000000000000000041 -:10FFC0000000000000000000000000000000000031 -:10FFD0000000000000000000000000000000000021 -:10FFE0000000000000000000000000000000000011 -:10FFF0000000000000000000000000000000000001 +:10F2900000000000C3FFC300F5F555550055455566 +:10F2A0008ABA0AFA0F554D558A0A8A8A55554D551C +:10F2B0008A0A8A8A005545558A8A0A8A000000000F +:10F2C0005F0A5F0A000000003F3F030300000000E8 +:10F2D000C0FC8282000000003CFF3CFF0000EBFF0E +:10F2E00000000000000082AAC3FF37F737F7FF0FC6 +:10F2F000F000003C000000000000F0003C3C00007A +:10F3000000000800000000000000000000000000F5 +:10F3100000000000000000FF0000A0A00000BEBE32 +:10F320008282AFA0AFA00505AFAF0CAACFAA3C3C2C +:10F330003C3C503C5F3CF5A0F5A002F207F7000012 +:10F3400000000FC30FC30000000000000000D7D76B +:10F350003F0300000000000000000000000000006B +:10F3600000A200F3C3D6C35400000000F0D0C0C018 +:10F37000FF3FFC3CF0AAFFFFC3AAC3FF0FD700006A +:10F3800000000000FFFFFFFF000000000000000081 +:10F39000000000000000000000000000F000F05538 +:10F3A000FF3CC300A0A0AFAFAF05AF050CAACFAA2A +:10F3B000F0F0FF00503C5F3C7D287D2802F207F70B +:10F3C000000000000FC30FC3000000000000000099 +:10F3D00014143F03000000000000000000000000C3 +:10F3E0000000A2A2F3F3FFFEFF7C00000000F0D0BB +:10F3F000F0D0C303C000F0AA0000C3F0C3F00FD7E1 +:10F40000FFFF00000000FEFFFFFF00000000000003 +:10F410000000000000000000000000000080F0007C +:10F42000F0550200020000102000200020102000F3 +:10F4300000100200000000008800020320002000ED +:10F440002000000000000000000020040000002058 +:10F45000C0004002000500000088000000000420F9 +:10F46000000800030208000400080104000000086E +:10F4700088050000000000000000C00001000141FC +:10F48000008000001100100001000102000020A017 +:10F49000200440800000C080000021000000000027 +:10F4A000000000008000800000000000000000005C +:10F4B000000000000000000000000000000000004C +:10F4C0000000800000C000C000C00000000120005B +:10F4D000200100008001000000000020200000004A +:10F4E0000001000000008000000100010201000096 +:10F4F0000000000000000000000000000000080004 +:10F50000080000200000080000C0080008010000FA +:10F5100080050001802000C00010000020000000D5 +:10F52000000000820000000000000804000300004A +:10F53000000000080005000400030008000000208F +:10F5400004400020002000000000004001020820CC +:10F550002020008020020000040090C10020000450 +:10F56000002000830000000000C0000800048400A8 +:10F570000041000000100100100000000000010028 +:10F58000002000802000A04000020000A0000088B1 +:10F590000000008000040000089008000000000047 +:10F5A000A000000000000000000800040008008423 +:10F5B00000080084008800000009000400000084A6 +:10F5C0000001801000110085001000000008028971 +:10F5D0000009801100048001000880880020008557 +:10F5E0000009020100102040000000090084000909 +:10F5F000000800100082000802000008000200005D +:10F6000002840085004041840002000800080010C8 +:10F61000000200880020000900829011808800000C +:10F620000082000041000082000001410121010030 +:10F630000041032101094003010089002041A10488 +:10F6400041082003004000050004000500000002FE +:10F65000000800218800002100200021002100096D +:10F6600001084005100808080021000000210008DA +:10F670002010004000000000000300400021002195 +:10F6800000000000C005A080000500050021000565 +:10F690004000001000090011000988080808000057 +:10F6A000000500000000200000030021028402C0C9 +:10F6B0000200008482A00284000002840284809000 +:10F6C000020102A08582000020A02085020005849E +:10F6D0000000050800000388414000850000000884 +:10F6E00000C020408000900090A04000000003C0B7 +:10F6F0000001830111020308408241004000210003 +:10F7000021820000000000004104000000A00082EF +:10F710000084A100008500000000000000008000BF +:10F7200000000000000000008000000000840000D5 +:10F730000000000082100480900402800004200079 +:10F7400020092000C080004004004000208000000C +:10F75000008082040889004100090010000008842C +:10F760000000400000000209080008100304000027 +:10F7700000210108080000C00803900020000008D4 +:10F7800000000000840000000000000500110000DF +:10F790004000008000000080000004002000000005 +:10F7A00000000000C00000048411C00082000000BE +:10F7B000001000000000000220042009A0042041E5 +:10F7C000008811400000030405A02100000000048F +:10F7D00000A003040011000400C01104090000820D +:10F7E0001102008200A000900084008202412008E3 +:10F7F000000003102001800000091000000000A09C +:10F8000040A00040028200000088008400020084C2 +:10F810000000008400100000000200008000800052 +:10F82000000009A00008000800010000009000008E +:10F8300000840084408001040280820000840082F1 +:10F84000020200A102880041404100002103900310 +:10F8500009880004102100028221000482080000AF +:10F860000000018204088240204009200000C0837B +:10F870000090000000040005A00490C000000002F9 +:10F8800000000808004110200405A0080004000042 +:10F890000002050508000000A00200400000000072 +:10F8A0000040042000410000840000118580820592 +:10F8B00001800180000580022001A10200000002F9 +:10F8C0000041A185090280404000C0A01010400006 +:10F8D00021A02010080908080500050000012000EB +:10F8E000210200004002820220408884400100C0C2 +:10F8F000000400210000000100000001414121043A +:10F90000418400004000008421080300110021010F +:10F9100000A00809A000042000040000000000006E +:10F92000000021908001000000000000020002049D +:10F930000500204020400000042103210205002191 +:10F940000003200000050005084140020021820359 +:10F9500000040008000500000005201190080021A7 +:10F96000002100080011408000000421200801054A +:10F970000080081100080000834100090089850407 +:10F9800090038810002182000811108220002003BB +:10F9900000049004090503800021008440084041D0 +:10F9A000000300040100C02000210021000300101A +:10F9B000010082A100880080400403002000880824 +:10F9C000000004000000008400000000008200002D +:10F9D00000080000400000000000418200A0041068 +:10F9E0000000000003840300880200000000800083 +:10F9F0004000000480020084000010C002000010DB +:10FA0000020500000090000000000800000800C08F +:10FA1000000200000001200040040000201000004F +:10FA20000000009000090800001000000000000025 +:10FA3000000002820040004000404009050390049D +:10FA40008808C002C008002082081111000400C00C +:10FA500020020100200102000001030489901182AC +:10FA6000A010C1000090A11000100401001000843B +:10FA700000A104C011020590C08800008903A18282 +:10FA800009080400C004004000020404A190002002 +:10FA9000820800C0A00290209188048800400010D5 +:10FAA000A0100010900810838204A00400C0000081 +:10FAB0000008000000C000C00101081005C0C020FF +:10FAC0008000008400000080020080800940210046 +:10FAD000090380001100802100030040908008008D +:10FAE00040800080C000218040800080020800111A +:10FAF00009410008098484848303000400009141C3 +:10FB000009A1848900000000008000000080080036 +:10FB100011800080000080009100C000000004807F +:10FB20002100000000000811908880418009000039 +:10FB30000000008000002082000010088020A080CB +:10FB4000C0A12008A1838040A091A004C0808004AF +:10FB50008089000480000311098004000003004034 +:10FB6000002100C000000008800200858000000025 +:10FB70000000800000800011000000418080000033 +:10FB80001100918389084189000000400090000025 +:10FB90000000800300800080082040108940098018 +:10FBA0000000C000400821800980009180112100E0 +:10FBB0000000004100000000028000219100880840 +:10FBC000099041C0C1C109C1080011C0059008C019 +:10FBD000080110C0C0C108000003A0040000008597 +:10FBE0008400C002C0A09000C00110010011900468 +:10FBF000000010008400209004000400040104A010 +:10FC00000000A000024082C083110000000200A09A +:10FC10000000C000080310A082A00100A0C1A00045 +:10FC2000000420008300918509C00088A0C1A004C1 +:10FC30000102000000010088000010C00200400026 +:10FC4000C10141080102C011A00811020409C0103D +:10FC5000100909088404C103110200000100820197 +:10FC60000001900040890891A102C04104108290D7 +:10FC7000021040100040029002C089C1A00285A07D +:10FC80009105000090820088018985C1C0080000AC +:10FC900000A02010C0100004000882831105C08855 +:10FCA0000404108888000205000010A1C0C10009EA +:10FCB00001080903C000000000008800202001881E +:10FCC000001190C041890302C1830389C10080A053 +:10FCD0008040A0C0C1840000820284002000400057 +:10FCE00002400005004100408002028980A000908F +:10FCF00000908485800010802080C000050889A0C5 +:10FD0000A0200941000000092080090511C1808060 +:10FD100000000000008080000021008905412002D1 +:10FD200080088009C1890020809000080090004070 +:10FD300021831090C0088000000000000500000929 +:10FD40000910000800A089110202080089110004AE +:10FD5000838009008400800200000000000011027E +:10FD6000024108A11140000980008000800080024B +:10FD70000080808000000009000000000080000575 +:10FD800000210080000000004184110009000800EB +:10FD9000000000000000800000058080008000005E +:10FDA000800000A00000001000000021000080057D +:10FDB000A1C0000088004005000480000000000091 +:10FDC000000000002000111008000203C11008000C +:10FDD00002000808C0880800080004041088020017 +:10FDE0000040014101050001820002881088A00046 +:10FDF0009000001008080200000000C0000200107F +:10FE0000000000A0000800000000A188A1A0C0A080 +:10FE100083009000100020000800880088822008DD +:10FE20004000020820038808900020A04021C088DC +:10FE3000A00003C1841005880000C0000800000075 +:10FE40000000C000200010100000480000E000008A +:10FE50004842810000E000004842810000E00000CC +:10FE60004842818100E007004200810000E000007C +:10FE70000000008100E007004200818100E00700EF +:10FE80000000884100E0070000210000008100E040 +:10FE9000070000000000000000005000000000000B +:10FEA00000006000004200E0070082000000000047 +:10FEB00000000081821100E007004100810000E0A5 +:10FEC00000004100500000E000004200F0F4F0FFAC +:10FED000CFFF8FFFF0F0F0AACFFF8FFFFFFBFFF007 +:10FEE000CFFF8FFF00000000000000000F00FFF0B8 +:10FEF000F505F505F8F8FDFD282D787D00000000DA +:10FF0000A0A3ACAF00000000000000000000000053 +:10FF10000000505400000A0C0AFCC355FF000A0AF6 +:10FF2000303F55FF0FC30000000050500000003864 +:10FF3000003C0000F0F05F5F00FF0F070D05AAAA6C +:10FF4000AAAA00000000FF0FF000FFFF000CF0E085 +:10FF5000F00000300070F0E8F0AA003000700010EF +:10FF600000F00030007000000000000000003A3A8D +:10FF70003A3AFFFFF0F008080D0D282D787D0000BB +:10FF80000000A0A3ACAF00000000000200000000D1 +:10FF9000000400000014F0F0FA0CFAFCC355FFFF57 +:10FFA000FAFA303F55FF0FC330000000D250C300B3 +:10FFB0000038003C0000F0F0505000FF0F0F0F0F12 +:10FFC000AAAA00FF00000000FFFF0000FFFFFFCF14 +:10FFD000550F0F0F1F5F1F1F0F555555FF54FF146F +:10FFE000550F550F1050101000000000F0F0F0F009 +:10FFF000BFBFFFFFA041A0EB555555553C3C3C3CD5 :020000040022D8 -:1000000000000000000000000000000000000000F0 -:100010000000FFFF00FF000000000E000400CCC342 -:10002000CCC30F0FFFFF5050FF0FFF00FFFF00007A -:1000300000000000000000000000000000000000C0 -:1000400000000000000000000000000000000000B0 -:1000500000000000000000000000393C3C3C0000B3 -:100060000000000000000000000000000000000090 -:100070000000000000000000000000000000000080 -:100080000000000000000000000000000000000070 -:1000900000000000FFFF00FF000000000E00040051 -:1000A000CCC3CCC30F0FFFFF5050F000FF00FFFF89 -:1000B0000000000000000000000000000000000040 -:1000C0000000000000000000000000000000000030 -:1000D00000000000000000000000000005003020CB -:1000E000050000A000000000000000000061000703 -:1000F000000D000000610007000D00000061000716 -:10010000000D000000610007000D0000000000006D -:10011000000000000000000030000000000000614E -:100120000006001D000000613006000D0000000008 -:10013000300000000000000000000000000000008F -:1001400000000000000000000000000000000000AF -:10015000000000000000000000000000000000009F -:10016000000000000000000000000000000000008F -:10017000000000000000000000000000000000007F -:100180000000F737F7370000E040C3C34302000028 -:10019000000000000000000000000000000000005F -:1001A0000FFF0FFF003C003C5554555500FF30CF6A -:1001B000000000000000000000000000000000003F -:1001C000000000000000000000000000000000002F -:1001D000000000000000000000000000000000001F -:1001E000000000000000000000000000000000000F -:1001F00000000000000000000000000000000000FF -:1002000000000000F737F7370000E040FFFF5F0A0B -:1002100000000000000000000000000000000000DE -:1002200000000FD70FC3003C003CFFFF555500FFF7 -:1002300030CF0000000000000000000000000000BF -:1002400000000000000000000000000000000000AE -:10025000000000000000000000000000000000009E -:10026000000000000000000000000000000000008E -:10027000000000000000000000000000000000007E -:1002800000000000000000000000A2A2F3F3000044 -:100290000F0F000000000000000000000000000040 -:1002A00000000000FC0FFC0F0000000F0000000029 -:1002B0000A0A5F5F0000000000000000000000006C -:1002C000000000000000000000000000000000002E -:1002D000000000000000000000000000000000001E -:1002E000000000000000000000000000000000000E -:1002F00000000000000000000000000000000000FE -:10030000000000000000000000000000AAA0FFF0B4 -:1003100000000F0F000000000000000000000000BF -:10032000000000000000FC0FFC0F0000000F0000A8 -:1003300000000A0A5F5F00000000000000000000EB -:1003400000000000000000000000000000000000AD -:10035000000000000000000000000000000082001B -:100360002000200000042000880020000000402021 -:100370000400402085A0400220804100408041418F -:1003800020802100208000002090202088A02000D4 -:1003900001002110000021200000200000000003C7 -:1003A000400041008800900000000100040004802B -:1003B00084808410008000002000002020000200C3 -:1003C00088000000200000800000000020002000C5 -:1003D000200000008400000021000500210401002D -:1003E00000000000000000000000000040000000CD -:1003F0000041000020010211009000204000001088 -:1004000008000020200080022000002100030003DB -:100410000000040204000000A000000084000900A5 -:1004200000000000200000C00000000008002000C4 -:100430000010021040012110000000000000000028 -:100440000000400000000000004000000002000228 -:1004500000000000400004000000200020002000F8 -:100460002000020082000000001010000040001078 -:10047000100002000000004103C0028005C082900D -:10048000A01000000440002000109190830008029A -:1004900001A1000002000200840800000220820086 -:1004A0000210000000000000000000100200082000 -:1004B000041004100800000000800041000000004B -:1004C000000000000000000000000000000000002C -:1004D00000100410020000000000000000000000F6 -:1004E000000000000084028200082008004000088C -:1004F0000000008400000200000002410004A0048B -:10050000040404080400840009C10084200320407E -:100510008009400200000084000041840000C10105 -:1005200000000009000000000000040000000908AD -:100530000001898889018000000020100910000056 -:100540000000000003100008000800080008000870 -:10055000000000010008040200000000000000008C -:100560000000410000840000200000000021000085 -:1005700000000000000000A102000000008802004E -:100580000000042100040005840000000000082190 -:10059000880001A18810050200040002088501847A -:1005A0000000008400000000000000090308A01003 -:1005B00040050003908002080000000000000000D9 -:1005C0000000820010000040020000000040000017 -:1005D000000000000011840000000008A0000000DE -:1005E0008400004184000800000080000000030037 -:1005F00000000000000000000040A10800000540CD -:10060000000000004100008500840500000000009B -:1006100085000000080441000400004000A0802084 -:100620002005080200050000000000004100A000B5 -:1006300041018004080041048000080041000000DE -:1006400000000000000021020088000000A000005F -:100650000000000000000000050000000000000095 -:100660001100000000000500000008000000A000CC -:1006700000000000000000080000A0210041200050 -:1006800089000800000008A10804090000042000F7 -:1006900020800000020000404104820200000400AB -:1006A0000020080400000884081000002010082022 -:1006B000000008008200A00082048200A00900005F -:1006C00000050000A08084108205A000080008003A -:1006D000020008000000000000000080820000000E -:1006E0000000820084000000040000000000000000 -:1006F000008400C000900000000008000000080016 -:1007000000000290000010004110000120000001D4 -:100710002088022000400000008482014000110077 -:100720000000100008850800410500110000C18983 -:10073000410140004100030000000301000020903F -:100740000002090400C00040000100040000000095 -:1007500000000090000000020002000005100000F0 -:10076000080003000000000000040000000000007A -:10077000000000000000000008000000A0000800C9 -:100780000200900090000000840090A1900082047C -:10079000840582048220C008C0000021408082209D -:1007A00008058220084120008200208000100000FF -:1007B0000808C0880802C01082000002C10482003C -:1007C00040080011C0200020A000C00000218208C5 -:1007D000C0000000C011C0000000000000110000B7 -:1007E0000000000000000000000000000000000009 -:1007F00000000000000000000000080000080008E1 -:1008000000000000000005000900100000040000C6 -:100810002001009000010000008400000004050297 -:1008200000010400000100008000000080040000BE -:10083000000000400020000000010082210520018E -:1008400000A00004030440C00900000000000000F4 -:100850001000000000000000004000000000000048 -:100860000000000000000000000000000000000088 -:100870000000000000000200020002000800A021A9 -:100880000000000000000000000000200000C02167 -:10089000C000200210209021008389210003001055 -:1008A00010030003010900080000000008212010C7 -:1008B000081100000041040508002088C000004025 -:1008C000C0040821080300100810C00000000080C8 -:1008D000000500000000000084021000000001215B -:1008E000840000008400820020001000000000004E -:1008F00000000000000000002000040000000000D4 -:1009000000000800000008000000000000000000D7 -:1009100000000000000000010200000402A010C05E -:1009200009A002C000000400000002104100000005 -:100930008001A0000000000080008082800403C0CD -:1009400002C000C003C00800400341C10000000015 -:1009500002402104034000000200000000000000EB -:10096000080000000000000000000000000000007F -:100970000000000000000001000000000000000076 -:100980000000000000004002008200A090000188EA -:10099000900941080002000291100020828241016A -:1009A000011003A00091409000880088901004037B -:1009B000A090840100C100004101089091A00200B4 -:1009C00000A00021000200024090004000A004842A -:1009D000041020400082400401C00008001000887C -:1009E0004010404000820240000000000000000073 -:1009F00000000000000000000004000500100002DC -:100A00000000000000000000C08000000080000026 -:100A100011849084C01100890080A10009008080A9 -:100A2000100221A010A00002800000000000800041 -:100A300000118011000300080000A111009083A0A4 -:100A40008020039100C00088009100000080000019 -:100A50008000808000800080008010000080000006 -:100A60000000008000800080800000000000000086 -:100A70000000000000000500000000000000000071 -:100A800000000000000000000000000080210004C1 -:100A900000000289A1A005038882110208020485D2 -:100AA00082028085201005C1A120000000808020E6 -:100AB0000080118021C1119121020000908010005E -:100AC000111000009180A1108508804000000000F6 -:100AD000002100000000001000C000000000002104 -:100AE0000000000000000020004000800000000026 -:100AF00000000000000500000008000000000000E9 -:100B00000000000000000000000000000000820261 -:100B10000005008285020990012083A000A1110038 -:100B20000182900008C0119188A011910000C0C0FE -:100B3000A000200201400183011101410000039047 -:100B400004008300000002400383A00004898800A1 -:100B500082008401020040002009400402200000BD -:100B6000000800900000200040084082900400002F -:100B70000000000000000000000000000000000075 -:100B80000000000000000000000000000000090458 -:100B90000002040411C01010918300000391901012 -:100BA00002409021040000020908830305A005907B -:100BB000009090104104100200888410A0020001EF -:100BC000C0400004000400A120A0001009049010FF -:100BD00000040000000404A0034000200240A01014 -:100BE0009000000000001000032000400840C0906A -:100BF00000000000000000000000040000000000F1 -:100C000000002100090000000000000000000000BA -:100C1000C1800080008089008082400441028840B9 -:100C2000090000838021830200028205210841809F -:100C30008200000000000980008941091083A01192 -:100C400000018010008000A0009100000500C0009D -:100C500000800080000000800080C1000000800053 -:100C600000800000000000000000C1000000000043 -:100C70008000000000000000000000008000000074 -:100C80000500210211000400000000000000000027 -:100C9000000000000040808000009082841011005D -:100CA0002141A00888210480C0094100834003003D -:100CB00003020000000200890000C0048020000040 -:100CC000A020000110002091030080030000849008 -:100CD0000400840200100080000000000005008273 -:100CE000800000000000800000000000000300847D -:100CF00080800000000000000000000000000000F4 -:100D000000000000010001000100000000000000E0 -:100D100000000000100008000884880002A00904F8 -:100D20000004200109C01120C190110004008204B8 -:100D300090C000010000004100840000828982010F -:100D400004200901000100000009011008018404C9 -:100D500008032000A0000001002000C08400100053 -:100D6000102108408200C00008000000100082002E -:100D70008203044082000000000000000000000028 -:100D8000000000000000000000E000000000000083 -:100D90000000000000000000000007008400008246 -:100DA00000E007000012000600E00700000000005D -:100DB00000E0070050120000000007006000818181 -:100DC00000E0070060000000504100E00700420022 -:100DD000000000E00700000000000000000000002C -:100DE00000000000070048000000000000000000B4 -:100DF000000000000700480600000000000000009E -:100E0000000000E000000000000000000000000002 -:100E10000000000000000000FDF0F4F07000300061 -:100E2000FFFF1800C0C0000000030027F3F0F3F03C -:100E300000000000C0E7C0240000000003183F18B5 -:100E4000FFFF000042424E7E0000C3C3C3C3999916 -:100E5000FFFF30000000FC00C000C3C3C3C3C3E7F2 -:100E6000C3240000000000000000C30000000000D8 -:100E70000000000000000000000000000000000072 -:100E80000000000000000000000000000000000062 -:100E9000000000000000000000000D000400000041 -:100EA0000000FFFF0000C0C00000FCFFD8FF30F0D2 -:100EB00030F000000006C0E7C0240000000003DBA3 -:100EC0003FDB3036303642424E7E0000C3C3C3C3E0 -:100ED000DBF3FF0000000000FC00C000C3C3C3C37D -:100EE00000E700240000000000000000420018009D -:100EF00000000000000000000000000000000000F2 +:100000003C3C3C3CFFFF000055553C3C00010000DF +:10001000000000000000000000007D2D7D7D00003C +:100020000000FF4FFFFFF0F0C3C3808200000A0012 +:100030000A0000000000414055502D2D2D2D005587 +:100040000055555555550000000028EBFFFFC3F043 +:10005000FFFF550F170F0B0A0B0B0F554D55AB003C +:10006000EB000F0F170FFBFAFBFB00000000AAAA22 +:10007000AAAAFF00FF00F541F5EBFC0CFC0CAFAFAA +:1000800005050F550F55F505F5050F0FFF0000008D +:100090000000000000000050008000007D2D7D2D3C +:1000A00000000000FF4F0000AAAA00FF00000000AF +:1000B000FAFFFAFF0000000255545550FF00FFFF01 +:1000C000F0F0F0F0F0F055550000000000FFFFFFE9 +:1000D000F0F0FFFF40618002802510024061800740 +:1000E000802D100240618007802D000205610A2AE0 +:1000F000850900A000613007800D00000061002725 +:10010000000D000000610027800D00000561502FE8 +:10011000850900A00000000030210040000100001F +:1001200030000000000000613006000D0001056194 +:100130004A2F050D00A100610006000D00000061BE +:100140000E248015000000610006800D0000406351 +:10015000800180219202FF5575558ABA8ABA03F34D +:1001600003F3FFF00F000000000000C300C33CFFDA +:10017000BFFF55FF00AA00000000FFF00F000000C5 +:1001800000000F55C3000000000000000000000048 +:100190000000F3F328EB0000FC0C3F3FBEBE287DBF +:1001A000000000000000000000000000000000004F +:1001B00000000000000FC355000000000008000808 +:1001C000CACAC0C00C0C0C140000000000000000E3 +:1001D00050505050F03CF000005545558ABA0AFA8C +:1001E00003F303F3FFF00F0000000000FFC3FFC3A1 +:1001F0003C00100055FF00AA000000005353535369 +:10020000000000000F55C3FF0000000000000000C8 +:1002100000000000303028EB0000FC0C30301414DB +:10022000287D000000000000000000000000AA007F +:10023000F00000000000FF0FC35500000000FFCBDE +:100240000008CACAC0C0CFCFCFD70000000000004E +:1002500000003C3C3C3CF03CF0003C007D41407CDC +:10026000437F00000000FF0FF0000000FFFF0000D0 +:10027000000055555555FA50FA5000000000000096 +:1002800000000000000000000000FF00FF0400006C +:10029000000000001000000000000000F5055F5F96 +:1002A000F0FF3CF000000000000000000000000033 +:1002B0000000000000000000550F00C30000000017 +:1002C000000000005F554B413C3C00000000000076 +:1002D00000000000F1F1010100FF1414FFC37D4193 +:1002E000407C437F00000000FF0FF000F0F0F0F0D2 +:1002F00000000000F330F330D2D2D2D20000000070 +:10030000000000000000000000000000FF00FF00EF +:100310000000000000000000000000000000F505E3 +:100320005050F0003CF00000000000000000000011 +:1003300000000000000000000000550FFFC3000097 +:10034000000000000A001E140A00AAAAAAAA0000BF +:10035000000000000000F1F1010100FF141484000E +:10036000002000002090C080048404C02080000091 +:100370004000040010002080000400202020000025 +:10038000400000004003880540092000008500006F +:1003900000000009400000000000000020000003F1 +:1003A00000004000000020002000200000000000AD +:1003B000000000000002000000800080001020000B +:1003C000C0000000A00000042000208404204000A1 +:1003D0000000000000000000000500000005208073 +:1003E000400000010000002120048021892100102C +:1003F00000008000000080000040000104010001B6 +:1004000000008000008280000082000000080020C0 +:10041000400000000000000000000000000000009C +:10042000000000008000000000000000000000004C +:100430000900000000000001000000100010000092 +:100440000000000000000000000100000005800323 +:1004500080004000000000001000000000000000CC +:100460000810000000080000008800A000200082A2 +:1004700000020004000000000008000400024088A0 +:10048000A000040240200020108020050004008904 +:100490000020002000040084008400040004000008 +:1004A000000400000010010000090100000000210C +:1004B000001000000009000000000205000082801A +:1004C00000000008820000000000008300032008F4 +:1004D0000088000000000009000000090000020080 +:1004E00002000288000000100008000200050089D8 +:1004F00000210001000900080008000004090009AB +:1005000091200040000980090085800484080009CA +:1005100000200009000900890021002100C1000914 +:1005200000840001000000084008008802080084E0 +:10053000000400080084000800000084800800888F +:1005400000400000000000820082008400100000D3 +:10055000800000040000000800840000000400087F +:100560008008000000100408000500200011002190 +:1005700000088221008000030005001008050241E8 +:10058000098001058500008304000005040800417E +:1005900010020000004100210021000800000003BB +:1005A00000100002004100008421002100C1000071 +:1005B00000000000000500000041840884000000E5 +:1005C0000002000091000021848088210009A01011 +:1005D00000050505050504210000012100020008B1 +:1005E0000002000000210141800000002001219054 +:1005F00000000000008800040800000000848084DF +:100600008000024002880200002080C000108800A4 +:10061000000080844184030000C0058803A000001E +:10062000008220020000030000000000000000041F +:10063000050000000000080021C01100030811009F +:100640000000411005A008000000000200000000AA +:10065000000800088410A00880084102028220A03F +:100660001182000100000200408200000000000230 +:1006700000050000008000800000400000000080B5 +:100680000100108001800090418040110000900026 +:1006900001000800408301000800008000200000E5 +:1006A000000008110000000490C10000841108003F +:1006B00000410000400000000800000000000000B1 +:1006C000000008000000000000000000000008001A +:1006D0000000200000032000000001000000820054 +:1006E000000082000003828000000100000000047E +:1006F00000A10008200800020004000800A000007B +:100700000004100000202020000402020800000065 +:10071000000020002010082020820000000440017A +:100720000000118800820010008300020000008891 +:1007300002A00208008805000000009000000000F0 +:10074000008200000000000000080000000000001F +:10075000008400008084000880000000040800007D +:100760000000000000A00082000200004000022102 +:1007700000110000001000410000002000410010A6 +:10078000210000210020002102210080A00400009F +:10079000A000000021030102A000002110040002BB +:1007A000A0030021084182080000000000000000B2 +:1007B000000000030000008800410041000000002C +:1007C0000000820000000000008800000880000097 +:1007D000000503020105000000008810010001006F +:1007E00000000000000090050040000020200441AF +:1007F00000100000001000A0000009000009001017 +:1008000000002000000005C10000000000040011ED +:10081000101002002008A010040000000008800151 +:10082000000400A00000000800080302020000000D +:10083000000000880000000005090300000000001F +:1008400000000084000800002188400200008010A1 +:1008500000820900400240A008A000902010201053 +:10086000408400A00000008400020000210020203D +:1008700002C0000300410000000800090010002130 +:10088000004000200020002002A100109011004133 +:100890000210820040000008000000031121001037 +:1008A0004003000508400041000000020100001163 +:1008B0000005000000000011000985021010000072 +:1008C0002000A0410000000002400000C01100090B +:1008D00000098400904000020021822102400208A9 +:1008E00000050008000402080021001000000000BC +:1008F00000100108000000000000000000000000DF +:10090000000000000003400100034004000000005C +:100910000000000008000200000021000000C000EC +:1009200000008000050000C00800110010C0101079 +:100930000020110000000000004000401090000066 +:100940000000000005000000000000001100000091 +:100950000000000000000000000100000000000096 +:100960000000000000000000800000000001000006 +:10097000000000004000A082A1201002A010110081 +:10098000119088000888000000000000000089C065 +:100990009090880810880000010001010000010209 +:1009A0001190110410000000000001000000000080 +:1009B000010088000000000001C000020004840261 +:1009C0000000000000000000C0C000020004C09150 +:1009D00000090082000002040100A00008010000DC +:1009E000000101A104110408000000000000000043 +:1009F00000000100040000018000110080000000E0 +:100A00008400888010000000000000001100000039 +:100A10009180A1808880000000102100084000051E +:100A2000040041808400000000000000020000007B +:100A300000000400090000000000090000000000A0 +:100A400000800000000000000000004000090005D8 +:100A5000001000880010000900112000A0100008FC +:100A60000009051040400040801000000000000018 +:100A700000000009031000030021100041408940DC +:100A800091008809109011899003008900000008E6 +:100A900000110940910009888483020004001100BC +:100AA0000809008900110005808300080000000487 +:100AB000008000030000000300000000400000214F +:100AC0001140891000000000000000000480214156 +:100AD00004840402800080028000800090808300F3 +:100AE00090009108800204080500A18000008000A9 +:100AF00000008000000004000900002184004089FB +:100B0000A09183882090C190058809000020008270 +:100B100000010082011182008489C19100100084CB +:100B20000000008410020200000190890001009082 +:100B30000001000400000000000000000000899097 +:100B4000C002830911010000000000000000014004 +:100B5000010500A1010102000801A040080004C035 +:100B6000030082002003A020A001010409088400E2 +:100B700010008400C00082020000C00000A1022119 +:100B8000000004A0888810110801024001A10100A2 +:100B900000008200000000400400900888C10101AC +:100BA000000184010100100200A0009102C10000B8 +:100BB000C000C000000000000400000000010000B0 +:100BC00008C00088000420080000000000000000A9 +:100BD0008210004085040400000200100104A000FF +:100BE0000000010000010100000301A1000008084D +:100BF000000000000000000000010000C001000132 +:100C00008420000200090489000880110002418349 +:100C1000020000000000030000900021808984840D +:100C200004400308102140040005001000A080418A +:100C300009008000800009000010801000200041A1 +:100C400000008000000000000080000000000000A4 +:100C5000000000002080100080000000008008805C +:100C60008000000003211005110300044110020957 +:100C700080900000000000000000004011411121A0 +:100C800000408080808480800010C191901103809A +:100C90009103410420040200080088919082898019 +:100CA000842041820209410005104111900010008A +:100CB00003000004004000000000000000000000ED +:100CC0000000000041100280040084400000000089 +:100CD00000000000218020002000C04000098000AA +:100CE0008000000010840900100010102021210055 +:100CF0000000090400050080008000000800038057 +:100D0000100010000804028302048200C041218404 +:100D1000119011010100000101000100C141208971 +:100D2000080803010108000000000000030120A0E2 +:100D3000040440000000000100000000000000006A +:100D4000000000000000918402202004A0010000A7 +:100D500000000000000091040200C0000500200017 +:100D600088044002040000C1008800C00000C101E6 +:100D7000C000888420010000000400400000010041 +:100D8000000801880000000000000700000000418A +:100D900000E007000011818100E007000000000072 +:100DA00000E007000000000000E0070000008841AC +:100DB00000E007004100008100E007004206480013 +:100DC00000E0000000000000820000E000000000E1 +:100DD00000000000000000000000000000004200D1 +:100DE0000000000000000000880000E00000840017 +:100DF000884100E007004100000000000000000002 +:100E00000000000000000000000B0B0B6666666629 +:100E1000C0C0C3420000007E0000000000000000CF +:100E20003F306C6CFF3C66FF0000000000000000DB +:100E30003F3F3F30F0F0FF3C0000000000000000AA +:100E400000000000000000000000FC9F0C9FCF008D +:100E5000CFC30000000000000000FF4EC34EDB09BE +:100E6000DB0999FFFFFF0000000000000000000008 +:100E70000000FF240F240C0C000000000000000004 +:100E80000000000000000000000000DBDBDB666605 +:100E90006624C300C34200000042000000000000BE +:100EA00000003F306C6C003C660000000000000059 +:100EB000000030303F30F0F0C300000000000000C0 +:100EC000000000000000000000000000FC900C90FA +:100ED000CF3CCFFF00000000000000003C4E004E61 +:100EE000DB6FDB6F99FBFFFF0003000300000000D6 +:100EF00000000000F02400240C0CFFFF00000000A4 :100F000000000000000000000000000000000000E1 :100F100000000000000000000000000000000000D1 :100F200000000000000000000000000000000000C1 :100F300000000000000000000000000000000000B1 :100F400000000000000000000000000000000000A1 :100F50000000000000000000000000000000000091 -:100F60000000000000000210200000881084000033 -:100F70000000000000000210200000881084000023 -:100F80000000000000000000000000000000000061 -:100F9000000000000000000000000000000099991F -:100FA0009990F0F0F0F0FFBDFFFF0C0CF6F6E7E7CC -:100FB000EFE76060FFFF0400040000007E42F330B2 -:100FC0008181000090F0183CDBFF00000000000071 -:100FD000F0F0F0F0000000000000F63002831A9BF1 -:100FE000000000800602F6C20000000000000000C1 -:100FF000DFCFCFCF000000000000000000000000A5 -:1010000000000000000000000000000000000000E0 -:1010100000000000000000000000000000000000D0 -:101020000000000900000000FCBCFFFF0C0C0606DD -:1010300024242F2400009F9F040004000E020E02AF -:10104000F330BDBD000000600024C3E7FFFFFFFFD9 -:10105000000000FF00FF9190919000000630028395 -:101060001A9B000000800400340000000000000013 -:1010700000003C3C7E7E00000000000000000000FC -:101080000000000000000000000000000000000060 -:10109000000000610004000D0000000000000000DE -:1010A000000005003008051000A100610E3F001D82 -:1010B00000000061003F000D000000614A0F0019B0 -:1010C00000A005004A08050000A000610E2AC00526 -:1010D0000001000080610031C001000000614A0E83 -:1010E000050500A000000000000000000000000056 -:1010F00000100001000030000000000000000000AF -:101100000000000000000000000000000061000777 -:10111000000D0000FF0FF0000000000000000000C4 -:101120000000000000000000000000000F0F5555F7 -:10113000A2AAAEAA35353535000F0000150500000E -:1011400080D580D50000000000000000D7D7D7D799 -:10115000020A000000000F0F550F0082FFBE0515A8 -:101160000515000000000000000000000000000065 -:10117000000000000000000000000000000000006F -:10118000000000000000000000000000000000005F -:10119000000000000000FF0FF00000000000000051 -:1011A00000000000000000000000000000000F1719 -:1011B00055550000FFFFFFF00F00F0FF0000EAFAB6 -:1011C000FFFF94D594D50000000000000000D7D7A1 -:1011D0000000020A000000000F0F550F0082FFBE42 -:1011E00000140014000000000000000000000000D7 -:1011F00000000000000000000000000000000000EF -:1012000000000000000000000000000000000000DE -:10121000000000000000000000002838000000006E -:1012200000000000000000000000000000000000BE -:101230000F4D55550505EB41000000000F5500C34B -:10124000FFFFFFFF00A0AAA00000000000000000B8 -:10125000AAFF050000FF82000000FFFC000C08FB55 -:1012600008FB41004000A000A000000000000000BA -:10127000000000000000000000000000000000006E -:10128000000000000000000000000000000000005E -:101290000000000000000000000041514179000002 -:1012A000000000000000000000000000000000003E -:1012B00000000F0F5555AFAFEB41000000000F5578 -:1012C000FFC34303410000A0AAA0000000000000EB -:1012D0000000EBFF050000FFAA2F0000FFFC000C40 -:1012E00008FB08FB00000000282828280000000058 -:1012F00000000000000000000000000000000000EE -:1013000000000000000000000000000000000000DD -:101310000000000000000000000000001000C000FD -:1013200000002000200020000000A0000000C000FD -:10133000C000000040008400C000C00020028800FF -:10134000040004000980200088210000208020047F -:101350002004880420042000200420000003200032 -:101360004000040410108800A08000008480200049 -:10137000C0004000C08020022000A18220000004A4 -:1013800020000000C0040004000000042000200031 -:101390002080888000042000200000002000000041 -:1013A00040002100400000400040000000044000D8 -:1013B00000400900000000000002000000000040A2 -:1013C00020000000000088040000000000008004ED -:1013D0000001410100018001800080858000000043 -:1013E000000020000000200000002010204010021B -:1013F00000C0040021000010000000004002002096 -:1014000000000000000000004100000000A00000FB -:101410004020000400040000100200000000000052 -:10142000000002001000A000004004400010080965 -:1014300000000000000004000000000000000000A8 -:101440008209000000000000080082000410002152 -:1014500002090000010000100000080083100010C5 -:10146000000000000000000000000000000000106C -:10147000001000000300000010800100000040C1C7 -:101480000800001000000000000000040000000040 -:101490000210000000000000022000000000000018 -:1014A0000090008800000000000004100010000000 -:1014B00004C000000000400000040000000000889C -:1014C000008800004000008840008000000080018B -:1014D00005080000000820004008050000840800FE -:1014E00000000000000400000000000800000000F0 -:1014F000048800880000C0042000401040840000E0 -:1015000084028008000804000008020800000000AF -:1015100000000000000000080000000800000000BB -:1015200000000010000000000400000000000000A7 -:101530000000000000000008000000080000000893 -:1015400000000000200804002000008000000000CF -:1015500090110000000001000000000000020000E7 -:10156000000000080000000000030000000000036D -:10157000009000A1000000000000000040000000FA -:10158000000502020000000000000000000000084A -:1015900000210000000020000000000020000000EA -:1015A00000080000000000000000000000A0000093 -:1015B00000A0000040000000030041000000218264 -:1015C000040005000000C1104190830004040004E1 -:1015D000000041000300008220000000030000081A -:1015E00000000808100000002108004000820300ED -:1015F00000040011002000000000080800000300A3 -:10160000000000000300000003C003C008900400B5 -:1016100008000004000000828900000041008000F2 -:10162000000000000000000000000809020900009E -:1016300000000000A00000000000040008000040BE -:101640000000004082054040880040000000020089 -:1016500040000000020900C00000004002004140BC -:10166000820040000000080000000000A000080008 -:10167000A00000008200080000004004822008044E -:101680000000000000000080401100000020A000C9 -:1016900000000000080000000000A000000008009A -:1016A000080400000002000000000000050040885F -:1016B0000300000000000200004000880820000035 -:1016C0000000000000000000008400000000000096 -:1016D0000000089011004000002000900000000071 -:1016E00020000000000000084088000009002100E0 -:1016F00040000000210008001100119040C00800C7 -:1017000040001190000000880002800000C000002E -:10171000000000C000880010000000000000000071 +:100F60000000000000000000000000000000000081 +:100F70000000000000000000000000000000000071 +:100F80000000000000000000000000000000FFC39F +:100F9000FFC3C202CE0E3C3C3C3C08003C3C00007F +:100FA00000000000000036360CFC666600FF000002 +:100FB00000000000000006F6F6F6666666660000B1 +:100FC0000000000000000000000000000000000021 +:100FD0007E7E1E7ECFCFC0C000000000000000005B +:100FE0009FFFDFFF000000007E66666600BF008393 +:100FF00000000000040F000B87818781FFFF303065 +:101000000000000000000000000000006666666648 +:10101000FF99F09000003C3C00FF00FF0000000042 +:10102000000000000000000036360CFC00FF0F0F2F +:10103000000000000000000006F606060C0CFCFC98 +:1010400000000000000000000000000000000000A0 +:1010500000007E7E7E7E9F909F900000000000003A +:10106000000006664666000000007E666666009F19 +:10107000009F000000000F0F0B0B8781878100008D +:10108000303000000000C200020000000000427E7C +:10109000427E05614A0E050D00A010610027000D7B +:1010A000000005610A2D850D00A01061200F004D84 +:1010B000000805610A0F050D00A0006100258009E8 +:1010C000000005610A2F050D00A0006100078009DE +:1010D00000000000006130068015000000000000E4 +:1010E0000000000000613006000D000000610006F5 +:1010F000000D00010061000680090000006100246D +:1011000080050000000000000000000500610006EE +:10111000000D0001000000000F55C300A3A3000F45 +:1011200000C3550FFF003C3C0000000020E02CEC09 +:10113000C30F55000000000000C00000FF3C0F5529 +:10114000ACACF0FF00000000000000000000000058 +:101150003F3FA0AF00000C0C00400000000000006A +:10116000000000000000F2F300000000000000009A +:10117000000000000000FFFFFFFFA0F5A0F54141C7 +:101180007D41C3F3C3030000000000000000AF3C3A +:10119000053C00000000000000000F55C3FFA3A3A2 +:1011A000F0FFFFC3550F55550F0F0000000023E35C +:1011B0002FEFC30F55FF8000A0F000000000003C9F +:1011C0000F55ACAC000F0000000000000000000054 +:1011D00000003030A0AF00000C0C00000000000048 +:1011E0000000000000000000FAFF00000000000006 +:1011F0000000000000000000FFFFFFBF0000FFFF35 +:1012000041417D415555555500000000000000004A +:10121000AF0005000001000000000000413F410355 +:1012200000000000FF55AA000000000000000000C0 +:10123000000000000F00C355BEBE303000000000AB +:10124000000000000000000000000000000000009E +:101250000000000000000000000000000000287DE9 +:101260007D7D000000000000000080C082C3C3D666 +:10127000C354FFFFFFFF0000000000000000FFFF5D +:10128000FEFFFF0C550CAAF0AA00000000000000B1 +:1012900000003F350F050F000F00000000007D3FEC +:1012A0007D03000000004B4B4B4B00000000000092 +:1012B0000000000000000FFFC355BEBEF3F3400066 +:1012C000000000000000000000000000000000001E +:1012D000000000000000000000000000000000000E +:1012E000287D28280000000000000000A0F0AAFFD0 +:1012F000FFFEFF7CFFFFFF3F0000000000400040BA +:10130000FFFFFFFFAA0C000CAAF0AA0000000000DB +:1013100000000000303500050F000F0020102000F5 +:10132000000000000100208000880000200000056F +:1013300000040000200020000000200020004003E6 +:10134000000000000000C0100080C02100008400E8 +:1013500000000080000020000090208000030004B6 +:101360002100000400040000400000000000000014 +:10137000100000000010000020000000204040008D +:1013800040004000000000002000040000000000B9 +:101390002000000084050000200000032000002041 +:1013A0000000000000840200004000200000000057 +:1013B000020000010000000000000000000000002A +:1013C00000000000000000004100091000000000C3 +:1013D00000000000000220020000000200100000D7 +:1013E00000001000000000000000000000000000ED +:1013F00000000000000000000000000000000000ED +:1014000000000000000000000000000000000000DC +:10141000000009000002000000000000000200843B +:1014200000000009000000000020029000200010D1 +:101430000204000400000009000000100000A000E9 +:101440000000000008090000820000000000844045 +:101450000000000908000400000800002000000946 +:101460000000A000002004000000000000000000B8 +:101470000000000400002002000000000000000046 +:1014800004000800000000000400A00000000000AC +:101490000000000000000000020000410000000009 +:1014A00000000008000000840088008900200085FA +:1014B000000800890089000800100010000800845E +:1014C000001000880088008400C00088200000828E +:1014D00000080088000880A0000000840088808840 +:1014E00000080000000800098000000800000088D3 +:1014F0000008001000110088800000020084000035 +:1015000000000088000800080008008400080000AF +:10151000000800040084008400100000008800001F +:101520000000000090050008001000000008008086 +:101530000241010000210000A0102004000800006A +:101540000008000800210021000300000003000043 +:10155000000800210010001000100000000400032B +:101560000000C021000000110009900901020009DB +:1015700082000005080800080008000800040000B8 +:101580008200820082000000000010009000200312 +:1015900000000000000800000000000000400008FB +:1015A00000080000000010C00082000000080000D9 +:1015B0000040848802A00008000200A0410100A0B1 +:1015C0000000000000840008000800C00084030040 +:1015D000020800100084000800A003400000410938 +:1015E0000000000003000000210200880008100035 +:1015F00000080800030008000000080000000401C3 +:10160000040811000000000005C00000000000C038 +:1016100020A000A000840008000800C00084000290 +:1016200000100082000800A0000000000000000080 +:101630000000000008800000000000009000000092 +:1016400020000000820000009000000082002010B6 +:101650004000A000200040000800008000000100C1 +:1016600020008200A00000800000080040000080F0 +:101670004080000004800280048000800080000020 +:101680000000000000000000000000000800000052 +:10169000000000000000000000000000000000004A +:1016A00000040000000000000000000000100084A2 +:1016B00000A000000000004000000000000000C08A +:1016C0000000008400000300000200000000110080 +:1016D00000000000000000004000000000100000BA +:1016E0000400000000C00900002000000004800485 +:1016F0000004802000000004000400040020000416 +:1017000000000000000000000000000000000000D9 +:101710000000000000000000008400000000000045 :1017200000000000000000000000000000000000B9 -:101730000000001100000000000008000000000090 -:10174000000000000000A0000800040000000500E8 -:10175000C080200801000000010800000000000017 -:1017600000008400010000000000001100000000E3 -:10177000000000000000000200100041820000058F -:101780008211080509080000C000000200000800DE -:10179000000000050000000000000000C000000084 -:1017A000000400080080000082000000000000002B -:1017B000000000000000000000000000000000A089 -:1017C000000003C000204020000005A004840000A9 -:1017D00020880004880008000400080805A0030011 -:1017E00040000088038404C000A00008000000003E -:1017F000000000000008200008C02001094000840B -:101800000200110005000800410400000000000073 -:10181000000220000300080000000000210000007A -:1018200000000001000000040000000000000000B3 -:101830000000002140000000000000000000000047 -:1018400008008200000000002000000000000000EE -:101850000000010002108440C080C00000000800A9 -:1018600000000021904100410800090000004004F0 -:101870000000400040058200880000004005200074 -:101880004000000000048241001000020000080235 -:10189000000000000020820000008400000000031F -:1018A00000000000000000000000000082000800AE -:1018B0000000000000000000000000000000208880 -:1018C000000800000000000000020000000000000E -:1018D00000000000200000000000002000000000C8 -:1018E0000000110020002000030000402020000420 -:1018F00000010000000000000000200000000000C7 -:1019000080820000200011040900118900004100BC -:1019100009880500410000000000000000000000F0 +:101730000041000003050180010001800000000855 +:101740000000000500400000000000210000000033 +:10175000000000008200A01184000000C021C00031 +:101760000010C041000200040004004100000020FD +:10177000040300201021000400000000000000000D +:101780000000002004000000000000000000000035 +:101790000000000000000000000000000000004108 +:1017A000000000000008000000000000000000A091 +:1017B00008840000118482A002200482044000906A +:1017C0000000008800000008008400840040000041 +:1017D000000000100008001000000000008421003C +:1017E000000000A0000000100001000100A00000A7 +:1017F000030180A011A1C000001100000000000042 +:101800000308210011218000000000C0001000A08A +:10181000100000000088100802000082000011C0C3 +:101820000000000000000010000000C0040000A044 +:101830000021000000080004001000040210000451 +:101840000011000400000000000000000000002162 +:101850000009080200049002900084008200000247 +:101860004020A000A04105089020002020200280F8 +:10187000000000040004A011A00400048205C009B7 +:101880000004000000050004000000000004000443 +:101890000000000000000000000000000000000048 +:1018A0000000000000000008000000000000000927 +:1018B0000000000000000000084000000000800060 +:1018C0000000000000000000000000000000000018 +:1018D0000000000000000088000000A020A0000020 +:1018E00000020001000000828800008300C1008324 +:1018F00000040000000100010000000100000000E1 +:1019000000000500000000000001000000000000D1 +:1019100000000000000000000000000000000000C7 :1019200000000000000000000000000000000000B7 -:1019300000000000000000000000000000000000A7 -:101940000000000000000000000000000000000097 -:10195000000000000000A00001000000401000A0F6 -:1019600000C0001000004000010000000000000066 -:10197000000000000000000000000000000084A043 -:10198000832010100410A0000000000010000000D0 -:101990000000040100000000000000000000000042 +:1019300000000000000000000000000088C00090CF +:101940000008081000010000A000000000000000D6 +:1019500000000000000000000000000040A0840221 +:101960000040822010409188A0C002401002100464 +:1019700001032002000010C0000205A008000000C2 +:1019800000000000000000009000000000000000C7 +:101990000000000000000000000000000000000047 :1019A0000000000000000000000000000000000037 -:1019B0000000000000000000000000000000000027 -:1019C0000000000000000000000000000000000017 -:1019D0000000000000000000000003000000808004 -:1019E00000000500000000000000200000000000D2 -:1019F00000000500000000000000000000000000E2 -:101A00001180038009808080000000000000000039 -:101A100000080200001000000000000000000000AC -:101A200000000000000000000000000002000000B4 +:1019B0000000000000000000000000000000808027 +:1019C0000080000000000011111000110010000044 +:1019D0000000000000000000000000000000008087 +:1019E0000000000080008080A000000000008083D4 +:1019F00080854003008500008900210005008000EB +:101A00000000000005000000110080000900000037 +:101A100000000000000000000000000000000000C6 +:101A200000000000000000000000000000000000B6 :101A300000000000000000000000000000000000A6 -:101A40000000000000000000000000000000000096 -:101A5000000000000000000000050000000200007F -:101A6000802000000010800000050000000300003E -:101A70000002000000200000000000000000000044 -:101A800000001000824185002100000080008021BC -:101A90008000000040000500000000000000000081 -:101AA0000000000000000000000000100000000422 -:101AB00000000000800000000000000000000000A6 -:101AC0000000000000000000000000000000000016 -:101AD0000000000000000000000000000000000105 -:101AE00000001001A00010C108A0000000000001CB -:101AF00000000001000000000000000000000000E5 -:101B000000000000830005018202838488004000F9 -:101B100002010400000001000000100000000000AD -:101B200000000000000000000000000000010000B4 -:101B30000000000000000800080000000000000095 -:101B40000000000000000000000000000000000095 -:101B500000000000000000000000000000009000F5 -:101B600000000100108800C0008409C000000400CB -:101B70000000000000400290024000000000000051 -:101B800000000000000004A000C0009110A100109F -:101B9000000000840000000100002001000000009F +:101A400000008008808080800000100011001010CD +:101A50000000000000000000000000000000000086 +:101A600000000005008000001080A1800511110316 +:101A7000A0092180830802200000800500100009D1 +:101A80008009004000000002000000080000004142 +:101A90000000000000000000000000000000000046 +:101AA0000000000000000000000000000000000036 +:101AB0000000000000000000000000000000000026 +:101AC0000000000010018488C09000A00000010008 +:101AD0000001000000000000000000000000000005 +:101AE000000000000000001000001102910810002A +:101AF0004089884083C00201838400000890000070 +:101B0000A0009084000000000001000000010040DF +:101B10000000004000000000000000000000000085 +:101B200000000000000000000000000000000000B5 +:101B300000000000000000000000000000000000A5 +:101B40000000000000000040901088C0000001006C +:101B50000000000100000000000000000000000084 +:101B600000000000022000A0000804049011008979 +:101B700008919141834008A040049010000040C0AB +:101B80000001C0A102C100008200000000000100AD +:101B9000C00004000000000002000000000000007F :101BA0000000000000000000000000000000000035 -:101BB0000200000001000000000000000000000022 -:101BC0000000000000000000000000000000000015 -:101BD0000000000000000000000000000000000005 -:101BE000000000000800000000000080A1000000CC -:101BF000800000000500028080000000200000003E -:101C0000000000000000000000000004008880C008 -:101C1000000000000000000000204003002100112F +:101BB0000000000000000000000000000000000025 +:101BC0000000000000000000008080008080001005 +:101BD00040000010001100000000000000000000A4 +:101BE0000000000000000000008000808000898468 +:101BF000001080A108208400C080108009800000AF +:101C0000800200080005854100000000000005007A +:101C10000200800080004100000080000000000001 :101C200000000000000000000000000000000000B4 -:101C30000000800000000200000000000000000022 -:101C40000000000000000000000000000000000094 -:101C50000000000000000000000000000000000084 -:101C60000000000000000000000280898000800069 -:101C70000000000000000000000000200000000044 -:101C800000000000000000000000000000900000C4 -:101C9000800220000080050011000080000000008C -:101CA0000020000000000000000000000000000014 +:101C300000000000000000000000000000000000A4 +:101C400000000000000000008011808900000000FA +:101C50001002110010000040000000000000000011 +:101C600000000000000000000009000080000000EB +:101C70000388050410911040210520200800114020 +:101C80000000C1400280C080400000000000000051 +:101C90000000000000200000000000000000000024 +:101CA0000000000000000000000000000000000034 :101CB0000000000000000000000000000000000024 -:101CC0000000000000000000000000000000000014 -:101CD0000000000000000000000000000000000004 -:101CE000000000000000000000002000A02008C04C -:101CF00004000000000000000000000000010000DF -:101D0000000000000000000000000000C09004A0DF -:101D1000C0828201000000040000000000400008B2 -:101D20000090000100000000000000000000000022 -:101D30000000000000000000000000000000008221 -:101D40000082000000000000000000000000000011 -:101D50000000000000000000000000000000000083 -:101D600000000000000000E000000000000000E0B3 -:101D700007000000000000E000000000004200E05A -:101D8000070000000000000000000000000000420A -:101D900000E007004100000000000000000000001B +:101CC00000000000000000000000C001208810108B +:101CD0000000009101000000000100000000000071 +:101CE0000000000000000000000020002000400074 +:101CF000880000C1008800410000010400C101A06B +:101D0000010100009101A08241404100000000005B +:101D100000000000000000010000000000000000C2 +:101D200000000000000000000000000000000000B3 +:101D300000000000000000000000000000000000A3 +:101D40000000000000000000000000000000000093 +:101D500007000000810000E000000000000000001B +:101D60000000000000000000000000000000000073 +:101D7000000000000000000007008400008100E077 +:101D8000070042000000484200E007000000480051 +:101D900000E000000000004200E0070082000000B8 :101DA0000000000000000000000000000000000033 -:101DB000000000000000000000E000000000000043 -:101DC0000000000000000000000000000000000013 -:101DD0000000000000000000000000000000000003 -:101DE0000000000000000000000000000000080DDE -:101DF000585DA0AF0C0C00000000000000000000C7 -:101E00000000C0FCC0FC000000000000000000005A -:101E10005F1C5514FABF3ABF00000000007D007D32 +:101DB0000000000000000000000000000000000023 +:101DC0000000000000000000000000000000AFAFB5 +:101DD000F0FFFFAAF0FF000000000000000000007C +:101DE0000000000000000000000000000000C341EF +:101DF0000301FAFAD782000000005050F3030000FC +:101E00000000D0D0D0000000303F3F3F82C3BEFF73 +:101E100000000000000000000000000000000000C2 :101E200000000000000000000000000000000000B2 :101E300000000000000000000000000000000000A2 :101E40000000000000000000000000000000000092 -:101E50000000000000000000000000000000000082 +:101E5000A0A0000F00AAF000000000000000000099 :101E60000000000000000000000000000000000072 -:101E7000080D585DA0AF0C0C000000000000000031 -:101E800000000000C0FCC0FC0000000000000000DA -:101E90000000001C0014000F000F000000000028CC -:101EA000002800000000000000000000000000000A +:101E7000FF550F05D7D7D7D7000000005F5FF303EA +:101E800000000000F0F0F0F0000030303F30820041 +:101E9000BE3C000000000000000000000000000048 +:101EA0000000000000000000000000000000000032 :101EB0000000000000000000000000000000000022 :101EC0000000000000000000000000000000000012 -:101ED0000000000000000000000000000000000002 +:101ED0000000CF0C17170F0F555500000000000031 :101EE00000000000000000000000000000000000F2 -:101EF00000000A085F1CC101F50500000000000099 -:101F000000000000000000000000000000000000D1 -:101F100000000000C0F0C0C0AAFFFFFF00000000EA -:101F2000AA001E1E00000000000055550000000021 +:101EF0000000E3EB000000000000C028C0EBD2D2DD +:101F0000005500A200F300FA0FFC0000FFFF5F5035 +:101F1000555555550000000000000000000000006D +:101F200000000000000000000000000000000000B1 :101F300000000000000000000000000000000000A1 -:101F400000000000000000005F0A5F0A00000000BF -:101F50000000000000000000000000000000000081 +:101F40000000000000000000000000000000000091 +:101F500000000000CF0C1717FF000F0F000000005B :101F60000000000000000000000000000000000071 -:101F7000000000000008001CC1010000000000007B -:101F80000000000000000000000000000000000051 -:101F900000000000000050504040AABEBE3F0000BC -:101FA0000000AA001E1E00000000FFFF55550000A3 +:101F700000000000F3FF000000000000FC28FCEB64 +:101F8000D2D2AAFFA2A2F3F3FFFAFFFC00000000E6 +:101F90005F503CFF3C00000000000000000000001B +:101FA0000000000000000000000000000000000031 :101FB0000000000000000000000000000000000021 :101FC0000000000000000000000000000000000011 -:101FD0000000000000000000000000000000000001 -:101FE0000000000000000000000000000000006190 -:101FF0000007000D00000061000F000D00A000614F -:102000000007000D00000561002F000D000000001A -:102010000000000000000000006100370005000023 -:1020200000610006000D000100610006000D0000C7 +:101FD0000000000000001000200800400008006120 +:101FE0000000800100000000000000000000000070 +:101FF000000000000000000000000000000005617B +:102000000A0E050D00A005610A2F051D00A00000A5 +:10201000006100258009000000610007800D0000BC +:1020200005610A2F050D00A000000000000000005F :1020300000000000000000000000000000000000A0 -:1020400000610007000D000000000000000000001B +:102040000000000000000000000000000000000090 :102050000000000000000000000000000000000080 -:102060000000000000000000000000000000000070 +:10206000F5F5F5053CAAFFAA0000000000000000FD :102070000000000000000000000000000000000060 -:102080000000000000000000000000000000000050 -:102090000000000000000000000000000000FFFF42 -:1020A0000F00CFCF0C0C000000000000000050F328 -:1020B00050030000000000000000000000000000CD +:1020800000E000EB8FDF5050E0EB000000000000AC +:1020900000005F0A7D7D3A3AF0FF0000000000007A +:1020A0000000000000000000000000000000000030 +:1020B0000000000000000000000000000000000020 :1020C0000000000000000000000000000000000010 :1020D0000000000000000000000000000000000000 -:1020E00000000000000000000000000000000000F0 +:1020E00000000505F50500AAC3AA000000000000D5 :1020F00000000000000000000000000000000000E0 -:1021000000000000000000000000000000000000CF -:1021100000000000000000000000000000000000BF -:10212000FFFF5F50CFCF0C0C00000000000000004C -:102130005FF35F03000000000000000000000000EB +:102100000000E0E0EBEB8FDFFFFFFFFF00000000CF +:10211000000000005F0A28283A3A000F0000000083 +:1021200000000000000000000000000000000000AF +:10213000000000000000000000000000000000009F :10214000000000000000000000000000000000008F :10215000000000000000000000000000000000007F -:10216000000000000000000000000000000000006F +:102160000000000017D71714F0FFAAAA0000000013 :10217000000000000000000000000000000000005F -:10218000000000000000000000000000000000004F -:10219000000000000000000000000000000000003F -:1021A00000000F0D0A0800000000000000000F0FE3 -:1021B00055550F550F5500000000000000000000AD +:102180000000000000000000F0C0D0C00000C2FA53 +:10219000F37DC355000000000000000000000000B7 +:1021A000000000000000000000000000000000002F +:1021B000000000000000000000000000000000001F :1021C000000000000000000000000000000000000F :1021D00000000000000000000000000000000000FF -:1021E00000000000000000000000000000000000EF +:1021E00000000000000017D71714000FAAAA000073 :1021F00000000000000000000000000000000000DF -:1022000000000000000000000000000000000000CE -:1022100000000000000000000000000000000000BE -:1022200000000000050D0008000000000000000094 -:102230000F0F55550F0F0F0F00000000000000009A +:1022000000000000000000000000F0F0D0D0C2FA92 +:10221000C2FAF37DFF55000000000000000000003E +:1022200000000000000000000000000000000000AE +:10223000000000000000000000000000000000009E :10224000000000000000000000000000000000008E -:1022500000000000000000000000000020048800D2 -:1022600000002180100020040000020000000890FF -:102270000000200020000000000540002000410573 -:10228000C00088000000040000002000040020803E -:1022900040000400880084000003200001040000C6 -:1022A0008800008004000000010088022000040073 -:1022B0002000200002000000020020000000880032 -:1022C00000000000200000000404200020000003A3 -:1022D0002004000020000000200009004000090048 -:1022E00000000900400209004100200089000000B0 -:1022F000801100000900000203000000000000003F -:102300008800000000000000000005000900000037 -:1023100000100000000000000000000080004001EC -:1023200000000000002000400300200040C100C069 -:102330000000090000000000000000000002400052 -:102340000000040000000000000000000000000089 -:1023500000000000000000C040020000000000007B -:102360000010080990020010081008100000084032 -:102370000011081008400200204100000200000087 -:1023800020049010020002008200000003000040C0 -:10239000010083100000084002100010000020001F -:1023A0002184210021100000008000000004400270 -:1023B0000000000000004040000002000002000099 -:1023C00000000000000500000200000000002000E6 -:1023D00000000000020000000200001000000000E9 -:1023E00000080000048200080500C0028208000006 -:1023F00004000008008900000000001000000088B0 -:102400000408000004080088000020840310040071 -:10241000040004880482000800000008000800008E -:102420008000A003A000A0080000004000080001F8 -:1024300080090900000000008084000000080009F5 -:10244000000440000000000400080082000800842E -:102450000090000000000000000440080008000890 -:102460000000000000000000002100090021002100 -:1024700000000000A040000000080821A00800089B -:10248000000010000000000000000008880010009C -:1024900000200000C020000200000000002000001A -:1024A0000000000008050000000000002000890076 -:1024B0000000A0008480020001000000A0000010C5 -:1024C000000900008441000000000040820000007C -:1024D0008200000000000000000800000000A000D2 -:1024E000002000000000000000000000210041006A -:1024F00000000000000008000800000000000000CC -:102500000800000020000000030000000000080098 -:102510001000000900A0098941010000000000002E -:102520000000000000080000000000000000830020 -:102530002090090000200004080002000082000032 -:10254000000208000400000000400000002000001D -:10255000000000000000000000000000000000007B -:1025600003000000080008000000000300214002F2 -:102570000000010082000800080008080000400078 -:1025800000000010000020000040080000000010C3 -:10259000040000000400000040098200040008005C -:1025A00008000400000020002002080040208408E9 -:1025B00040008200A00001000000100000000000A8 -:1025C000A0000000C00000000000000000000000AB -:1025D0000000C0000000000000000000000000003B -:1025E00000800000000000000000000000000090DB -:1025F000820121000282030400040084800800009C -:10260000000000080010000010000300000000009F -:1026100000900008000000004000000000004100A1 -:10262000000000000000000000000001030000C0E6 -:10263000030000004000030040000000090000000B -:1026400000200000000000100000000000000088D2 -:102650000000000000000020080000000000000052 -:10266000000000400000000000000000000508001D -:102670000000000000110000000000000010000039 -:10268000000000000000000000004000000000000A -:10269000C0000000000010000000040000410080A5 -:1026A0000000000000000000000000000800000022 -:1026B000080008802000C0008400A0400080C00006 -:1026C00008000008000800030000004100080000A6 -:1026D00008200000000000000000000000000000D2 -:1026E00000000800000000000000000000000000E2 -:1026F00000000000000000000400000000000000D6 -:10270000000000000000000000000504100000A010 -:102710000000000008880820000000008000000081 -:102720000020100000000000000000000000000079 -:102730000000200021040800000008080001030434 -:1027400000008000000008000800000000000000F9 -:102750000400000000000000000000000000000075 -:102760000000090000000000000000008208820054 -:102770008200C0000000008020080000001100005E -:102780000800002000000000000400059000000088 -:1027900000000021A000040000000800000000006C -:1027A000000000000009001100112011000082004B -:1027B0000000000040000800400820058800880054 -:1027C000C02141414000000900020120002000001A -:1027D00000000020000900000000000000000000D0 -:1027E00000000800000000000000000000000000E1 -:1027F000000000A0020800401102000400A00540F3 -:1028000000000000002000000000020000000000A6 -:1028100000000000000000000000080000000000B0 -:102820000000000000002000000020000200000066 -:102830000000000000000000000000000000000098 -:10284000000000824000000000000200080000407C +:10225000000000000000000002000400040004036D +:102260000010200000100008000000000000100016 +:10227000000000000000000000000000000000005E +:10228000000400000000000000100000000020001A +:1022900000000000000000000002400000004000BC +:1022A0000000000000080000000000000000000026 +:1022B00020000000001000000000000000000000EE +:1022C0000000000000004000A0000010000000001E +:1022D00020000000000000000000000000000000DE +:1022E000000040020000000000004000000000006C +:1022F000000000004000000000004000000000005E +:1023000010000400000000000000000000000000B9 +:1023100000000400000000000000000000000000B9 +:1023200000000000000000000002000000000000AB +:10233000000000000000000000020000400000005B +:10234000000000000000000000000000000000008D +:1023500000000000400000004000400000000000BD +:10236000A00902000000100000000000080000109A +:1023700000100000000000000200000082000000C9 +:10238000000000000200000000000100000000004A +:10239000000002000000000000100100000000002A +:1023A00010000000010010000000000000100000FC +:1023B000040000000000000002000008000000000F +:1023C00002000209021000001000000000000000DE +:1023D000000000000000820000000000000000007B +:1023E0000008000880100000001000880400008829 +:1023F0000008100000080008001000C00084001051 +:10240000001000100010000800C00040028400848A +:1024100000C0001080080008000000C0020000009A +:1024200003048000000010100008000000000000FD +:102430000000000800000410001000000010000858 +:10244000000000100000000800C0000800000000AC +:10245000000800080008000800000010001000102C +:102460000021000000210003020500000000200000 +:10247000000800000008002100000000200000000B +:102480000000000000009008001000000000001094 +:1024900000000200000000000041000000000008F1 +:1024A00000000010000040000100000000000000DB +:1024B000000000080000000000089000002000005C +:1024C0000000000000000800000000000000000004 +:1024D000C00000000000000000000000000000003C +:1024E000000000080000000000A000000000000044 +:1024F00000000000000000080000001000020010B2 +:10250000000008000800080008000000001000009B +:1025100000002100000003840384000000100082FA +:102520000082000000A00000808420000002000063 +:102530000000008200000000000000000400000015 +:10254000000000000000000000000000000000008B +:102550000000000800000000000000000000000073 +:102560000000000200000000000000000000000069 +:10257000000000000000000000000000000000005B +:1025800000000000A0000000400008000000000063 +:10259000000000000000000000000000000000003B +:1025A0000000000000000000008000840000000027 +:1025B000000000000000000000000000000000001B +:1025C000000000000000000000000000000000000B +:1025D00000000000000000000000000000000000FB +:1025E00000000000000000A0000000A000040000A7 +:1025F000100000000000008200000000000000A0A9 +:1026000000000008000000080000000000000000BA +:1026100000000000000000000000000000000000BA +:102620000000000000840000000000020004000020 +:10263000000000000000000000000000000000009A +:10264000000000000000000000000000000000008A +:10265000000800000008000000000000000000006A +:10266000000000000000000000100003000000084F +:10267000000800000008000000000000000000004A +:10268000000000000000001000000000000000003A +:1026900000000800000000001000004100100000D1 +:1026A000000500050000000300000108000400030D +:1026B00000210000004100000000000000000008B0 +:1026C0000000000000000000000008000000000002 +:1026D00000000000000000000000000000000000FA +:1026E00000000000000000000000000000000000EA +:1026F0000008000000080000008440000000050001 +:1027000000C0000000000000000000000000000009 +:1027100000000002020000000000218800082110D3 +:1027200003C00000000011C000C000002001000133 +:102730000020040800C000080000000000000000A5 +:1027400000840000000000080000000000000000FD +:102750000000004000000000000000100000000029 +:102760000000000000000000000000000040000029 +:10277000002100040000000000000000000800002C +:102780000000004008000000000000000000000001 +:102790000000000090000000040000000000004164 +:1027A00000104002000000000008000400000004C7 +:1027B00000080004000200400021000900000000A1 +:1027C00000000000000000000000004000000000C9 +:1027D00000000000000000000000000000000000F9 +:1027E00000000000000000000000000000000000E9 +:1027F00000000000000000000000000000000000D9 +:1028000000000000000000000000000000000000C8 +:1028100000000000000000000000000002000000B6 +:1028200000000000000000000000000000000000A8 +:102830000000000000000001000000000000000097 +:102840000000000000000000000000000000000088 :102850000000000000000000000000000000000078 :102860000000000000000000000000000000000068 -:102870000000000000000000040904410082200460 +:1028700010400040000284840000000000000000BE :102880000000000000000000000000000000000048 -:102890000000000000000000000000000000000038 -:1028A000101091041082820400000000000000005B -:1028B0000000000000000100000000010101900084 -:1028C0000001C00808410083088204A082410282FE -:1028D000C004000000000000000000000000000034 +:102890000000000000000000C088001000082010A8 +:1028A0001010000400A00082C00800C0000804024C +:1028B0000000010020009100000000000000000066 +:1028C0000000000000000000000000000000000008 +:1028D00000000000000000000000000000000000F8 :1028E00000000000000000000000000000000000E8 -:1028F00000000000000000000000A09180A0038004 -:102900000080000000000000000000000000000047 -:1029100000000000000000000000000000000000B7 -:1029200000008080A0800000800000000000000007 -:10293000000000000000000020000000031103035D -:10294000C100000840888090008880008040038497 -:10295000809100A0000000000000000000000000C6 +:1028F0000000000000800000000000000000000058 +:1029000000000000000000000000000000000000C7 +:102910000000000000000000000080800000008037 +:1029200000808080000000800000008000000080A7 +:102930000080000011008000820000000000000004 +:102940000000000000000000000000000000000087 +:102950000000000000000000000000000000000077 :102960000000000000000000000000000000000067 -:1029700000000000000000000000000000008004D3 -:1029800000C0800200000000000080000000000085 -:102990000000000000000000000000000000000037 -:1029A0000000000080000080000080800000000027 -:1029B000000000000000004000000009000000804E -:1029C0000000110010008200A08585092021000070 -:1029D00000C0008280000000000000000000000035 +:102970000000000000000041008500000000000091 +:102980000000000000000000000000000000000047 +:10299000000000000000000000000000000000082F +:1029A0000000000080000003800080008000804163 +:1029B0008091000000000440000004054103000075 +:1029C0000000000000000000000000000000000007 +:1029D00000000000000000000000000000000000F7 :1029E00000000000000000000000000000000000E7 -:1029F000000000000000000000000000000040088F -:102A000004904004840900000000820008000000D7 -:102A10000000000000004000400000000000000036 -:102A2000000000000000880000C0A00008020000B4 -:102A30000000000000000000000100000000000095 -:102A400020900400110003900204090208041141BF -:102A50008800820482090840000000000000000095 +:1029F0000000000000000000000300A00000000034 +:102A000000000000000000000000000000000000C6 +:102A10000000000000000000000000000000C000F6 +:102A20000003C004C0001000880310A0108208003A +:102A3000100408A0820000000185000001010105CA +:102A40000000000000000000000000000000000086 +:102A50000000000000000000000000000000000076 :102A60000000000000000000000000000000000066 -:102A7000000000000800000000000000000000004E -:102A800091400004884040C00000000000000000A9 +:102A70000000000000000000C0000082840204008A +:102A80000000000000000000000000000000000046 :102A90000000000000000000000000000000000036 -:102AA0000000000000000000050900419083C0A163 -:102AB0000000000000000000000100000000000015 -:102AC00000000000900000010101A18282090208BB -:102AD000C011858201830383820900000000000089 +:102AA000400000088282090210080004009083821E +:102AB00040080000C0080588000000010401000172 +:102AC0000001000000000000000000000000000005 +:102AD00000000000000000000000000000000000F6 :102AE00000000000000000000000000000000000E6 -:102AF00000000000000000000000000000000000D6 -:102B00000000410002800000000000000000000002 -:102B10000000000000000000000000000040002055 -:102B20000000000000000000000084A0000200057A -:102B30008508000000000000000000010000000007 -:102B400000000500080080004105110841000091C7 -:102B500080A08005C1402120A00504A10000000044 +:102AF0000000000000000000000000000080000056 +:102B00009000000000000000000000000000000035 +:102B100000000000000000000000000000000000B5 +:102B20000000800000800000A18080000000000004 +:102B3000C080808000000080A1000000000400111F +:102B4000000404410000000000000000000000003C +:102B50000000000000000000000000000000000075 :102B60000000000000000000000000000000000065 -:102B70000000000000000000000000000000000055 -:102B8000000000002105088402008200000000000F +:102B700000000000000000000000000000008000D5 +:102B80008000800000000000000000000000000045 :102B90000000000000000000000000000000000035 -:102BA000000000000000000000000000000000899C -:102BB0000000000000000000000000000001000014 -:102BC0004000000000000082118910000808A104E4 -:102BD000884011211185000500C000800000000020 +:102BA0000000000000008000808000000000009114 +:102BB00000008000800400008080800000004180D0 +:102BC00009000400081100000000000000000000DF +:102BD00000000000000000000000000000000000F5 :102BE00000000000000000000000000000000000E5 -:102BF0000000000000000000002000800000000035 -:102C00000000000000002100832082200800000056 +:102BF0000000000000000000000000000000900045 +:102C0000400004000400000000000000000000007C :102C100000000000000000000000000000000000B4 -:102C200000000000000000000000000000000000A4 -:102C300000A00000000000000000000000000001F3 -:102C4000000000000000000000210110012001012F -:102C5000212121A084839008040090208404900006 +:102C2000000000000000C000081084084000900070 +:102C300004828800A00040012004844004000000B9 +:102C40000108000001000001000000000000000079 +:102C50000000000000000000000000000000000074 :102C60000000000000000000000000000000000064 -:102C70000000000000000000000000900082000042 -:102C80000000000000000000880000E0070048008D +:102C70000000000000000000000000000000000054 +:102C800000000000000050000000000000000000F4 :102C90000000000000000000000000000000000034 -:102CA0000000000000000000000000000000000024 -:102CB000000000000700601200000000000000009B -:102CC0000000000000E000000000410000E00700FC -:102CD0000000880000E00700480A0000000007002C -:102CE000480000000000000000000000000000009C +:102CA00000000000000000000000000000004200E2 +:102CB0000000000000000000000000000000000014 +:102CC0000000000000E00000000000000000000024 +:102CD00000000000000000000000000000000000F4 +:102CE00000000000000000000000000000000000E4 :102CF00000000000000000000000000000000000D4 -:102D000000000000000000000000000000000000C3 +:102D00000000F131C10100F000F0000000000000FF :102D100000000000000000000000000000000000B3 -:102D200000000000000000000000000000000000A3 -:102D300000000000000006429F420000000000006A -:102D40000000000000000000000000000000000083 +:102D2000000000000000000000003C0066F0900978 +:102D30009000FF0F000F10100900FCC04242C318A2 +:102D4000FF1800000000000000000000000000006C :102D50000000000000000000000000000000000073 :102D60000000000000000000000000000000000063 :102D70000000000000000000000000000000000053 -:102D80000000000000000000000000000000000043 +:102D800000000000FD3DCD0D006600660000000063 :102D90000000000000000000000000000000000033 -:102DA0000000000000000000000000000000000023 -:102DB000000000000000000006DB9FDB00000000B8 -:102DC0000000000000000000000000000000000003 +:102DA0000000000000000000000000003CFF66F092 +:102DB00000090000663C663C10100900FCC07E7EE5 +:102DC000C3DBFFDB0000000000000000000000008B :102DD00000000000000000000000000000000000F3 :102DE00000000000000000000000000000000000E3 :102DF00000000000000000000000000000000000D3 -:102E000000000000000000000000000000000210B0 -:102E10002000008810840000000000000000000076 +:102E000000000000000000000000000000000000C2 +:102E100000000000000000000000000000000000B2 :102E200000000000000000000000000000000000A2 :102E30000000000000000000000000000000000092 :102E40000000000000000000000000000000000082 -:102E50000000000000000000021020000088108424 -:102E60000210200000881084000000000000000014 +:102E50000000000000000000000000000000000072 +:102E60000000000000000000000000000000000062 :102E70000000000000000000000000000000000052 -:102E80000000000000000000000000000000000042 -:102E9000000000000000000000000000FFFF00FF35 -:102EA0000000000000000000000000000C0C0C0CF2 -:102EB0000000000000000000C0C09F903C660000C1 -:102EC0000000000000000000000000000000000002 -:102ED000000000000000FF3CC300000000000000F4 +:102E800000000000000000004666DFFF00000000B8 +:102E90000000000000000000000000000000000032 +:102EA0000000000000000000000000000000000022 +:102EB000FFBF6626DBDBDBDBD8FCFCFCFCBDFC815A +:102EC0007E7E7E7ED83CD80000000000000000001E +:102ED00000000000000000000000000000000000F2 :102EE00000000000000000000000000000000000E2 :102EF00000000000000000000000000000000000D2 -:102F0000000000000000009900990000000000008F -:102F10000000000000000000000000000000FFFFB3 -:102F200000FF0000000000000000000000000C0C8A -:102F30000C0C0000000000000000CFCF9F903C660A -:102F40000000000000000000000000000000000081 -:102F50000000000000000000D8D8D8D80000000011 +:102F0000000000000000000000006666FFFF0000F7 +:102F100000000000000000000000000000000000B1 +:102F200000000000000000000000000000000000A1 +:102F30000000FFFF6666FFC33C00FCFCFCFCFCBD20 +:102F4000FC811E1E7E1ED8FFD8C3000000000000BA +:102F50000000000000000000000000000000000071 :102F60000000000000000000000000000000000061 :102F70000000000000000000000000000000000051 -:102F80000000000000000000FF99FF990000000011 -:102F90000000000000614002800D00000000000001 -:102FA00000000001000000000000000000610006B9 -:102FB000000D0000000000000000000005610A0E86 -:102FC000051D00A0000000000000000000000061DE -:102FD0000005000D000005610009C001000100614D -:102FE0004004C01D000000610006000D000000004C +:102F80000000000000000000000000000000300011 +:102F90000000000000000000000000000000000031 +:102FA0000000000000000000000000000000000021 +:102FB00000000000000030000010000000003000A1 +:102FC0000000000000003000000000000000006170 +:102FD0000007000D000000000000000000000000DD +:102FE00000000000000000000000000000000000E1 :102FF00000000000000000000000000000000000D1 -:1030000000000000000000000000000000010000BF -:10301000000000000000337330700000000000006A +:1030000000000000000000000000000000000000C0 +:1030100000000000000000000000000000000000B0 :1030200000000000000000000000000000000000A0 -:10303000000000F000F000000000000000000000B0 -:103040000000DF00D30000000000000000000000CE -:1030500000FF00FF00000000FD01FD01AAAA00FF23 -:10306000BFFFFFFFF000000000000000FFC33C00B6 +:103030000000000000000000000000000000000090 +:103040000000000000000000000000000000000080 +:10305000A0A0B0108200C00000000000000000002E +:103060000000000000000000000000000000000060 :103070000000000000000000000000000000000050 :103080000000000000000000000000000000000040 -:1030900000000000000000000343004000000000AA +:103090000000000000000000000000000000000030 :1030A0000000000000000000000000000000000020 -:1030B0000000000000F000F0000000000000000030 -:1030C00000000000DFDFD3D300000000000000009C -:1030D000000000FF00FF00000000FD01FD0100FFF7 -:1030E00000FF1F0F0F0FF000000000000000171777 -:1030F00017170000000000000000000000000000A2 +:1030B0000000000000000000000000000000000010 +:1030C0000000000000000000000000000000000000 +:1030D00000000000B0108200C000000000000000EE +:1030E00000000000000000000000000000000000E0 +:1030F00000000000000000000000000000000000D0 :1031000000000000000000000000000000000000BF -:1031100000000000000000000000AAFFAA0000005C +:1031100000000000000000000000000000000000AF :10312000000000000000000000000000000000009F :10313000000000000000000000000000000000008F :10314000000000000000000000000000000000007F -:10315000000000000000000000000000FFFFC300AE -:1031600000FF55FFFFF0000000000020303028EB8A +:1031500000000000000000008200C300000000002A +:10316000000000000000000000000000000000005F :10317000000000000000000000000000000000004F :10318000000000000000000000000000000000003F -:10319000000000000000000000000000AAFFAA00DC +:10319000000000000000000000000000000000002F :1031A000000000000000000000000000000000001F :1031B000000000000000000000000000000000000F :1031C00000000000000000000000000000000000FF -:1031D00000000000000000000000000000003CFFB4 -:1031E000000000FF00AAFFF0000000002020F3F321 -:1031F00028EB0000000000000000000000000000BC +:1031D000000000000000000000008200000000006D +:1031E00000000000000000000000000000000000DF +:1031F00000000000000000000000000000000000CF :1032000000000000000000000000000000000000BE -:103210000000000000002090040221044080010012 -:1032200000000003208020002000880082000400AD -:1032300000000000000440002000400040040000A6 -:1032400088008400890000002000C00004002000E5 -:103250004000000089000003200020002000200022 -:1032600000002000000020008204200482102000C2 -:10327000200020000404000420004004400004005A -:1032800000002040000020000004400088004004AE -:1032900000020000401104004041800384008002CD -:1032A000080000000000001000040902009009005E -:1032B00000000000000000080000000000001000F6 -:1032C000004000000000200000404100000000001D -:1032D00000000002000008000000000000000400E0 -:1032E0000400000000000000000000010001008355 -:1032F000000000000000000000024020000000006C -:1033000000000000000000000002000004000000B7 -:103310000000000100000004800091200100001066 -:1033200088009008900200050900204002048400F3 -:10333000200902000200021004400210900000095F -:1033400002000200A0008210001000040200000031 -:10335000200402000300011005900000000000009E -:103360000000000000000000080002080105010044 -:103370008400080802000200001002100000000093 -:103380000000020404000000040800000000020421 -:1033900000000210000083000010010020854000A2 -:1033A00002850084414040840084C00000100084F5 -:1033B00000840002400000C0008420840008400413 -:1033C0002002410200040000000000080000040088 -:1033D0000000008200840484040804100000050832 -:1033E0000000090840080482000804000984080855 -:1033F000080000008004000000040009C0820008EA -:10340000040000840088008400080084000800088C -:10341000000841084008400040080008200800401B -:103420000005C0020005004100400000408200038A -:1034300000400002000888080008000800000000A2 -:10344000000500080010008088080021002100000D -:103450001000000000000000000800090008000043 -:103460000000000000000000000888030000004089 -:103470000000000820002041A0004000A000002122 -:1034800000030000000200000008002104000021E9 -:1034900000000000002100000008002120090010A9 -:1034A000030821000000030040000000000080032A -:1034B0000000000000000000090000000300000000 -:1034C00008000000000000000004000000000000F0 -:1034D000000000000000000000000084000000A0C8 -:1034E000000003000000000003000000110040087D -:1034F000000000C0008480008300000010000084F1 -:1035000000C00000000000080000000000000000F3 -:1035100000000000008240000000000021000020A8 -:103520000000012010022008051000000011820098 -:10353000011100110011000008020002C004000483 -:10354000A000000000000400820000000000000055 -:10355000080408000004820082040000000000004B -:10356000A0800000000000000000820000000000B9 -:103570000002000000000000001002000000000037 -:1035800000100900000000000800082000000000F2 -:1035900000000000080000410000082008000000B2 -:1035A00008000280049100A04084A001418405002D -:1035B00000A0080800000000030000A00082110025 -:1035C000088420100000000000000008000800002F -:1035D0000000000400000000000000000082000065 -:1035E0000088001000000000000000000000000043 -:1035F00000000000000000040088000100004000FE -:1036000000A021010800000008084100000000009F -:10361000000000000040000000000000000400A0C6 -:1036200000A0000021200000200800001008004138 -:1036300090110020004100000005104100400800EA -:10364000000000000008000000000000C0080000AA -:1036500001000080000000000000000008000000E1 -:103660000000000000000000000000000000002139 -:103670000000000000001000001000000008000022 -:1036800000210008000302080000000800000040BC -:10369000000000000000001000000000080004000E -:1036A0000002080000000000000080000000000090 -:1036B0002000000004A02190000000000000000095 -:1036C00000000000000000000000000000000000FA -:1036D00000002000000400000008100000000008A6 -:1036E00000000000000000000000000000000000DA -:1036F0000000009011000890000011C000000002BE -:103700000088001021000000A1000000000000005F -:1037100003000000000000000000000000000500A1 -:10372000000000004000000000008200019000093D -:10373000830000410041001101918403000000005A -:103740001000000000210000000000000000004107 -:103750000000000000210000000000000000000048 -:103760001000000000000000000000000000002128 -:103770000000000000000000000000000200020045 -:103780000800020000210009000000000000000401 -:1037900000200008000000210000000000000800D8 -:1037A0000000820000000000C00000800000042132 -:1037B00000844000008200000000401041004000F2 -:1037C0000500208821000000030010000000000018 -:1037D00000000800000000000000000000000000E1 -:1037E00008000000000000000000000000000000D1 -:1037F0000000000000000000000000000000800049 -:1038000000000000000000A000A040000800000030 -:103810000084000000100000000000000300000011 -:10382000000000000000000200A00000000402C030 -:1038300091080002C0080000000002000000000023 +:1032100000000000000000000000000000000000AE +:1032200000100000200020008400000000000000CA +:10323000000000000000000000000000000000107E +:10324000000000000010000000000000000000046A +:10325000000000000000000200000000001000005C +:103260000000000000000000012001800120052076 +:10327000000000000000000000000000000010003E +:10328000100000000000000000000000000020020C +:10329000C00000000000001000000000000000005E +:1032A00000000000000000000000400000000000DE +:1032B000000000000000000000000000000000000E +:1032C00000000000000000000000000000000000FE +:1032D00000000400000000000000000000000000EA +:1032E00000000000000000000000040104200401B0 +:1032F00084010000000000000040004000000000C9 +:1033000000000000000000000000000000000000BD +:10331000000040000000000000000000000000006D +:10332000000000000000000000000000000000009D +:10333000000000000000000000000000000000008D +:10334000000002000000000000000000000000403B +:10335000000000000000000000000000000000006D +:103360000000020000000000000000000320040034 +:10337000012000200000000000000000000000000C +:103380000200000000000000000000000200020037 +:103390000000000000000000000000000008001015 +:1033A00000000000008800080000000000880008FD +:1033B00000880000008800400000000800080000AD +:1033C000000000C00000004000000040000000407D +:1033D00000000008000000000000000800000008D5 +:1033E0000000000000840000000000000000040154 +:1033F000800004010009000800000000004000886F +:10340000000000000000001000000000000000109C +:103410000000000000080040000000000000000064 +:1034200000000000001000000000400090000000BC +:10343000000000000000000000000000000000008C +:10344000000000000000000000000000000000007C +:10345000000000000000000000410000000000002B +:1034600000100003000090000000000000000000B9 +:10347000000000000000002000000000000000002C +:1034800000000000004100000000000000000000FB +:10349000000000000000000000000000000000002C +:1034A0000084000000000008000000004000000848 +:1034B00000000000001000000000000000000000FC +:1034C00000000010000041000000000000000000AB +:1034D00000A000A04100000000000000000000006B +:1034E00000000000000000000000000000000000DC +:1034F00000000008000000000001000000000000C3 +:1035000000000000000000000000000000000000BB +:1035100000000000000000000000000000000000AB +:10352000000000000000000000000000000000009B +:10353000000000000000000000000000000000008B +:10354000001000000000000000000000000000006B +:10355000000000000000000000000000000000006B +:10356000000000000000000000000000000000005B +:10357000000000000000000000210000000000002A +:10358000000000000000000000000000000000003B +:103590000000000000000000000000040000000027 +:1035A0000000000800000000000000000000000013 +:1035B000000000000000000000000000000000000B +:1035C00000000000000000000000000000000000FB +:1035D0000088000000000000000000000000000063 +:1035E00000000000000000000000000000000000DB +:1035F0000000000000000084000000000000000047 +:10360000000000400000000000000000000000007A +:1036100000000000000000000000000000000000AA +:10362000000000000000001000000000000000008A +:10363000000000000000000000000000000804007E +:10364000000000000000000000000000000000007A +:103650000000000008000000000000000000000062 +:10366000000000000000000000000000000000005A +:1036700000080000000000000080000000000000C2 +:103680000000000000000002000000000000000830 +:10369000000000000000000000000000000000002A +:1036A0000000000000000000080000000000000012 +:1036B000000000000000000000000000000000000A +:1036C00000000000000000000000000000000008F2 +:1036D000000000A00000000008000810000000C06A +:1036E0000008000000C00000000000000000000012 +:1036F00000000000000000000000002000000000AA +:1037000000000000000000000000000000000000B9 +:1037100000000000000000000000000000000000A9 +:1037200000000084000000000000000000000040D5 +:103730000020000300000000000000000000000066 +:103740000000000000000000000000000000000079 +:103750000000000000000000000000000000000069 +:103760000000000000000000000000000000000059 +:103770000000000000000000000000000000000049 +:103780000000000000030000000000000000000036 +:103790000000000000000000000000000000000029 +:1037A0000000000000000000000000000000000019 +:1037B0000000000000000000000000000000000009 +:1037C00000000000000000000000000000000000F9 +:1037D00000000000000000000000000000000000E9 +:1037E00000000000000000000000000000000000D9 +:1037F00000000000000000000000000000000000C9 +:1038000000000000000000000000000000000000B8 +:1038100000000000000000000008000000000000A0 +:103820000040000000000000000000000000000058 +:103830000000000000000000000000000000000088 :103840000000000000000000000000000000000078 -:103850000000000000000001820191010000000052 -:1038600000000000000000000000000088000000D0 +:103850000000000000000000000000000000000068 +:103860000000000000000000000000000000000058 :103870000000000000000000000000000000000048 -:103880000001010010A10082C088000200080000B1 +:103880000000000000000000000000000000000038 :103890000000000000000000000000000000000028 -:1038A000000000000000000000008500880000000B -:1038B00080009080100000800000100000000000D8 +:1038A0000000000000000000000000000000000018 +:1038B0000000000000000000000000000000000008 :1038C00000000000000000000000000000000000F8 -:1038D0000000000000000000001100108302000042 +:1038D00000000000000000000000000000000000E8 :1038E00000000000000000000000000000000000D8 :1038F00000000000000000000000000000000000C8 -:103900000000001108208088000000000000000076 +:1039000000000000000000000000000000000000B7 :1039100000000000000000000000000000000000A7 -:103920000000000000000000000000000403000090 -:103930000000001089880085098020000003918024 -:10394000080000000000000000000000000000006F -:1039500000000000000000000000008010001100C6 -:103960000000000000000000000000000080800057 +:103920000000000000000000000000000000000097 +:103930000000000000000000000000000000000087 +:103940000000000000000000000000000000000077 +:103950000000000000000000000000000000000067 +:103960000000000000000000000000000000000057 :103970000000000000000000000000000000000047 -:1039800000000000108020009180110000000090D5 -:103990008080000000000000000000000000000027 -:1039A0000000000000000000000000008000200077 -:1039B00003000800000190C100820004010004011E -:1039C000A1A00508000000000000000000000000A9 -:1039D0000000000000000000000000000090010056 -:1039E0000100000000000000000000002000A0C056 -:1039F000A000900000000000000000000000000097 -:103A000000000000000000108800A1A0000090004D -:103A10000010A0A000000000000000000000000056 -:103A2000000000000000000000000000000008008E -:103A3000020091000000000800A010110204009193 -:103A40000004001100C000000000000000000000A1 +:1039800000000000000000800000000000000000B7 +:103990000000000000000000000000000000000027 +:1039A0000000000000000000000000000000000017 +:1039B0000000000000000000000000000000000007 +:1039C00000000000000000000000000000000000F7 +:1039D00000000000000000000000000000000000E7 +:1039E00000000000000000000000000000000000D7 +:1039F00000000000000000000000000000000000C7 +:103A00000000000000000000001000000010000096 +:103A100000000000000000000000000000000000A6 +:103A20000000000000000000000000000000000096 +:103A30000000000000000000000000000000000086 +:103A40000000000000000000000000000000000076 :103A50000000000000000000000000000000000066 -:103A600000018201000100000000000000000002CF -:103A70000082900000040000000000000000000030 -:103A80000000000000000000009000020102201170 -:103A900002A00008000008840000000000000000F0 +:103A60000000000000000000000000000000000056 +:103A70000000000000000000000000000000000046 +:103A800000000000000000000000000040000000F6 +:103A90000000000000000000000000000000000026 :103AA0000000000000000000000000000000000016 -:103AB000000000010001010002C10091002100206E -:103AC0000040000300A110110000000000000000F1 +:103AB0000000000000000000000000000000000006 +:103AC00000000000000000000000000000000000F6 :103AD00000000000000000000000000000000000E6 -:103AE00000000310000200110000000000000000B0 +:103AE00000000000000000000000000000000000D6 :103AF00000000000000000000000000000000000C6 -:103B000000000000000000000000001111A04000B3 -:103B10000011000000800000800000000000000094 +:103B0000000000000000000000000900000080002C +:103B100000000000000000000000000000000000A5 :103B20000000000000000000000000000000000095 -:103B3000000000100403002111108488008480001C -:103B400000110005000080000000000000000000DF +:103B30000000000000000000000000000000000085 +:103B40000000000000000000000000000000000075 :103B50000000000000000000000000000000000065 -:103B6000000010801111020000030000000000009E -:103B70000000000000200000000000000000000025 -:103B80000000000000000000000000002080111173 -:103B90000300110000000000000000000000000011 +:103B60000000000000000000000000000000000055 +:103B70000000000000000000000000000000000045 +:103B8000000000000000000000000000001000081D +:103B90000000000000000000000000000000000025 :103BA0000000000000000000000000000000000015 -:103BB0000000000021820408080020400410902129 -:103BC0001090200002000420842008000000000063 +:103BB0000000000000000000000000000000000005 +:103BC00000000000000000000000000000000000F5 :103BD00000000000000000000000000000000000E5 -:103BE0000000000001400101010000010000000090 -:103BF000000000000000000100A000000000000024 -:103C0000000000000000000000000000000082082A -:103C100084010182000002000200889090000000F0 +:103BE00000000000000000000000000000000000D5 +:103BF00000000000000000000000000000000000C5 +:103C000000000000000000000000000000000000B4 +:103C100000010000000000000000000000000000A3 :103C20000000000000000000000000000000000094 -:103C300000000000000001A10102000000000000DF -:103C400000E007006000810000E0000000000000CC +:103C30000000000000000000000000000000000084 +:103C40000000000000000000000000000000000074 :103C50000000000000000000000000000000000064 -:103C6000000000000000500000E000000000000024 -:103C700000000000000000000000070060000000DD +:103C60000000000000000000000000000000000054 +:103C70000000000000000000000000000000000044 :103C80000000000000000000000000000000000034 -:103C9000000000E000000000000000000000000044 +:103C9000000000000700000000000000000000001D :103CA0000000000000000000000000000000000014 -:103CB0000000000000000000810000E0070000009C -:103CC000AF8383AFE800E8C300A028A00000303F26 +:103CB0000000000000000000000000000000000004 +:103CC00000000000000000000000000000000000F4 :103CD00000000000000000000000000000000000E4 :103CE00000000000000000000000000000000000D4 -:103CF0000000000000000000000000000000FCFCCC +:103CF00000000000000000000000000000000000C4 :103D000000000000000000000000000000000000B3 -:103D100000000055AAFF30000000FFFFFFFF000079 -:103D20008080000000000000000000000000000093 +:103D100000000000000000000000000000000000A3 +:103D20000000000000000000000000000000000093 :103D30000000000000000000000000000000000083 -:103D400000005F43435F280028C3000028000000F4 -:103D5000303F0000000000000000000000000000F4 +:103D40000000000000000000000000000000000073 +:103D50000000000000000000000000000000000063 :103D60000000000000000000000000000000000053 :103D70000000000000000000000000000000000043 -:103D80000C0C00000000000000000000000000001B -:103D9000000000000055AAFF30000000FFFFFDFFFB -:103DA0000000808000000000000000000000000013 +:103D80000000000000000000000000000000000033 +:103D90000000000000000000000000000000000023 +:103DA0000000000000000000000000000000000013 :103DB0000000000000000000000000000000000003 -:103DC00000000000000038005A5A5A5A0000000053 -:103DD000F0F0F50500000000000000000000000009 +:103DC00000000000000000000000000000000000F3 +:103DD00000000000000000000000000000000000E3 :103DE00000000000000000000000000000000000D3 :103DF00000000000000000000000000000000000C3 -:103E000030303030000000000000000000000000F2 -:103E1000000000000000353535350FFF0FFFFFFFB4 -:103E2000FFFF3C003C00000000000000000000001C +:103E000000000000000000000000000000000000B2 +:103E100000000000000000000000000000000000A2 +:103E20000000000000000000000000000000000092 :103E30000000000000000000000000000000000082 -:103E400000007F207F2000003800000000000000FC -:103E500000000000F5050000000000000000000068 +:103E40000000000000000000000000000000000072 +:103E50000000000000000000000000000000000062 :103E60000000000000000000000000000000000052 :103E70000000000000000000000000000000000042 -:103E80000000FF0FF0000000000000000000000034 -:103E90000000000000000000353535350F000F0030 -:103EA000AFFFFFFF00000000000000000000000066 +:103E80000000000000000000000000000000000032 +:103E90000000000000000000000000000000000022 +:103EA0000000000000000000000000000000000012 :103EB0000000000000000000000000000000000002 -:103EC000000000007F207F2005610A0D001900A07E -:103ED00000610006800500000000000000000000F6 +:103EC00000000000000000000000000000000000F2 +:103ED00000000000000000000000000000000000E2 :103EE00000000000000000000000000000000000D2 -:103EF00000610001C001000000000000000000009F -:103F000000000A080500000000000000000000009A -:103F1000000000000000000000000061000000112F -:103F20000000000030000000000000000000000061 +:103EF00000000000000000000000000000000000C2 +:103F000000000000000000000000000000000000B1 +:103F10000000000000000000000005000A08050085 +:103F200000A00000000000000000000000000000F1 :103F30000000000000000000000000000000000081 -:103F400000000061000EC00900000000FFFF0C0F20 -:103F5000CCCF00000000717100C300000000000021 +:103F40000000000000000000000000000000000071 +:103F50000000000000000000000000000000000061 :103F60000000000000000000000000000000000051 -:103F70000000FF00F505000AFFFA00000000000045 +:103F70000000000000000000000000000000000041 :103F80000000000000000000000000000000000031 -:103F9000000000000000000000000000553C0F0F72 -:103FA00070707F7F00000000000000000000000033 +:103F90000000000000000000000000000000000021 +:103FA0000000000000000000000000000000000011 :103FB0000000000000000000000000000000000001 -:103FC00000000000000C0000F000F0FF0000FFFF08 -:103FD0000003C0C300000000303000C30000000038 +:103FC00000000000000000000000000000000000F1 +:103FD00000000000000000000000000000000000E1 :103FE00000000000000000000000000000000000D1 -:103FF00000000000FF00F505000AFFFA00000000C5 +:103FF00000000000000000000000000000000000C1 :1040000000000000000000000000000000000000B0 -:104010000000000000000000000000000000553C0F -:104020000F0F20202F2F00000000000000000000D4 +:1040100000000000000000000000000000000000A0 +:104020000000000000000000000000000000000090 :104030000000000000000000000000000000000080 -:10404000000000000000000C0000F000F0EB000099 -:1040500000000000FAFA000000003CFF00C300006E +:104040000000000000000000000000000000000070 +:104050000000000000000000000000000000000060 :104060000000000000000000000000000000000050 -:10407000000000000000FFF500050AFA0AFA00003F +:104070000000000000000000000000000000000040 :104080000000000000000000000000000000000030 :104090000000000000000000000000000000000020 -:1040A0005FFF5F00000FF0FF000000000000000055 +:1040A0000000000000000000000000000000000010 :1040B0000000000000000000000000000000000000 -:1040C00000000000000000005500550000A0F0A016 -:1040D0000000000000000A0A000000003CFF00C3CE +:1040C00000000000000000000000000000000000F0 +:1040D00000000000000000000000000000000000E0 :1040E00000000000000000000000000000000000D0 -:1040F0000000000000000000FFF5000500FF00FFC9 +:1040F00000000000000000000000000000000000C0 :1041000000000000000000000000000000000000AF :10411000000000000000000000000000000000009F -:1041200000000AFF0A00303F303F0000000000009E +:10412000000000000000000000000000000000008F :10413000000000000000000000000000000000007F -:1041400000000000000000000000550055000000C5 -:10415000000040000000C000400020000000C0003F -:10416000000088004000C00340008800C000040038 -:10417000400490004000C0082000200040002000C3 -:1041800020000000C0008820040020004000000043 -:104190008800000320002000200020008800880004 -:1041A00020000000080088002000100020002000EF -:1041B0001000880020002004A00020002000000043 -:1041C0001000020040030000880520020211400098 -:1041D00000002004000000000000000000000000BB -:1041E00000000000000020000000000000C00020CF -:1041F000000021000000000000000020410000003D -:104200000002800200040002000000000000000024 -:10421000400000000000400000001000000000000E -:104220000000000000000000400000040008000042 -:10423000000000000000000000010000000000007D -:10424000202040020000419000000000000180009A -:1042500041000000800004400840000008090205F9 -:104260000005000302000205000500040920020009 -:10427000020000000040000002900005080010004D -:104280000804084000000000020000009010000038 -:1042900000000005001000000004000000002000E5 -:1042A0009085004009C000000000000000000000F0 -:1042B00000009000009111800000000000800000CC -:1042C0000000010008009000004002000000000013 -:1042D0000000018000000000009004044004200859 -:1042E00004104082050805000508000800080800C1 -:1042F0000008000040840308200800104000000867 -:10430000000400080004000800880408038220005C -:1043100000040000000802040000041004840408E3 -:1043200004080010008288100010004000080000FF -:1043300020000004000040040204000400000904FE -:104340000088408202000504000400088408001070 -:10435000408800844020400820844000000800106D -:104360000002C14000020000900400000000002193 -:1043700084850002004000030041000384210040C6 -:104380000000000000000008000000000010000213 -:1043900000000000002100000000000000210000DB -:1043A000000000000000402100080000020300118E -:1043B00000000008000800050008000000210000BF -:1043C000000000C000000000000300210003900076 -:1043D00000000005000000058521000808002000FD -:1043E00003000501200000900310000500200000DC -:1043F000009000020000000000080500000000001E -:104400000000000000004100410000000300000027 -:104410000000000000000000000000080000000094 -:10442000000000000000000005000000030000087C -:104430000000000000A0000000000008004000A0F4 -:104440000000000000040000000008A000000000C0 -:104450000300000000004100000040000000824115 -:104460000002000904214004008000100805000932 -:10447000000008000440A000000000000804C00084 -:104480000400080400000000002100008210000069 -:104490008200000000001008C0400440040000003A -:1044A000000082000000000002100003000008006D -:1044B00000000000C0000000000000000009000033 -:1044C00000110400C0050000A008C0000009000899 -:1044D000000008410008A008090004000010C10005 -:1044E0004084088241C000040500081000A000C0FC -:1044F00005C0008810840388000010204000038855 -:104500000000000800840300034000040000008451 -:104510000008080000C0000000000000000000408B -:1045200000000008000000002084000808000000CF -:1045300000400000000000000000030021002100F6 -:1045400021004008000040000000080000000000BA -:1045500000000000000000A00000400888A00085C6 -:1045600020000200040588038811880221842000AD -:104570002000004000000000001108000803004077 -:10458000001100410003820010000005200000001F -:1045900000100000400008000000000000000000C3 -:1045A000000000000000000000000000000000808B -:1045B0000000100000210841880000030000A00056 -:1045C00001210920000000008405000800000021EE -:1045D0000000000808008221000800000000050219 -:1045E0000800000405000902110040000000200539 -:1045F00080008208000000000000080000000000A9 -:1046000000004000000000000000000008008000E2 -:10461000000000000000000000000000008808000A -:10462000080000200000000000000000000008A0BA -:1046300000200300000000A000040008401000005B -:104640000008200020090000000000000500000014 +:10414000000000000000000000000000000000006F +:10415000000020000000001020000000000000000F +:10416000000000000000000000050000000000004A +:10417000000000000000000020000000000000001F +:1041800040000000000000000000000400000000EB +:1041900000000000001100000000200000000000EE +:1041A00000001000101100000000000000000000DE +:1041B0000000880000000000000020000000000057 +:1041C000000020001000000000000004000040007B +:1041D00040002000400000000000000000004000FF +:1041E000000000004000000000000000000000008F +:1041F000000000002000000000000000000000009F +:10420000000000004000000040000000000000002E +:10421000000000000000000000000000000000009E +:10422000000000000000400000000000000000004E +:1042300000004000000000000000000000004000FE +:10424000000040024000400000004002000040002A +:104250000000000200000000000000000400000058 +:10426000000000000000000000000000000000004E +:10427000000000000000000000000000000000003E +:10428000000000000000000000000000000000002E +:10429000000000000000000000000000000000001E +:1042A0009000000000000400000000000000021068 +:1042B00000080000000000000200000000000400F0 +:1042C000000010400000000000000000000000108E +:1042D0009009080002100210000000000000000019 +:1042E00000080000000000040000000000080000BA +:1042F00000000000004000080000000000880200EC +:104300000040000000100000000000000008000055 +:104310000000000000000410000000000000000089 +:10432000000000000000001000000000000000106D +:104330000400000000000000000000000000000079 +:10434000000010000000000000000000000000005D +:104350000000081000000000000000000000000045 +:104360000000000000000000000004000040000009 +:10437000000000000000000000000000000000003D +:1043800000030000000000000000000084000000A6 +:10439000000000000000000000000000000000001D +:1043A0000000000088000000000000000000000085 +:1043B00000000000000000000000000000000000FD +:1043C00000000000000000000000400000000000AD +:1043D000000000000000000000000000000000A03D +:1043E00000080000000000000000000000000000C5 +:1043F00000000000000000000000000000000000BD +:1044000000000000000000000000000000000000AC +:10441000000000000000000000000000000000009C +:10442000000000000000000000000000000000008C +:104430000000000000000084000000840000000074 +:10444000000000000008000000000000000008005C +:10445000000000000000000000000000000000005C +:10446000000000000000000000000000000000004C +:1044700000000000000000000000000000200040DC +:1044800000400020000000000000000000000000CC +:10449000000000000000000000000000000000001C +:1044A0000000000000000000000000000000080004 +:1044B00000000000004100000000000000000000BB +:1044C00000000000000000000000000000110000DB +:1044D0000000000088110000000000400000000003 +:1044E00000000000000000000000000000080000C4 +:1044F00000000000000000000000000000000000BC +:1045000000000000000000000000000000000000AB +:10451000000000000000000000000000000000009B +:10452000000000000000200000000000000000006B +:1045300000000020000000C000000000000000009B +:104540000000000800000008000000080000000053 +:10455000000000000000000000000000000000005B +:10456000000000000000000000000000000000004B +:10457000000000000000000000000000000000003B +:104580000000000000000000000000000000000823 +:10459000000000000000000000000000000000001B +:1045A000000000000000000000000000000000000B +:1045B00000000000000000000000000000000000FB +:1045C00000000000000000000000000000000008E3 +:1045D00000000000000000000000000000000000DB +:1045E00000000000000000000000000000000000CB +:1045F000000000200000000000000000000000009B +:1046000000000000000000000000000000000000AA +:10461000000000000000000000000000000000009A +:104620000000000000000000000000000004000086 +:104630000000000000000000000000020000000078 +:10464000000000000000000000000000000000006A :10465000000000000000000000000000000000005A -:104660008400000000030008000211000000898897 -:104670000008000000210800000000000041A00028 -:10468000000000098204000000000000000001009A -:1046900000800084010000210000000000400000B4 -:1046A0000000000000000000000084000000000086 -:1046B00000000000000000080000040004000400E6 -:1046C0000000000000000000400000080000002181 -:1046D0000008000800081003080000000021000086 -:1046E0000821000008000810008805000800038465 -:1046F000204020821100100021904102111003027D -:104700001000110008402020000040A04088410215 -:104710004040020400052000080011000040000095 -:104720004100000000000800000000002000000020 -:104730000000004000000000000000000000000039 -:1047400000000000118800000000000000000800C8 -:104750000000000000000000000000000000081041 -:1047600000848300030080008000100000008200AD -:10477000020009A0904040908208C0000100900013 -:104780002000000000000000000000A00008000061 -:104790000002000003000101000000000000000012 +:10466000000000000000000000100000000000003A +:10467000000000000000000000000000000000003A +:10468000000000000000000000000000000000002A +:10469000000000000000000000000000000000001A +:1046A000000000000000000000000000000000000A +:1046B00000000000000000000000000000000000FA +:1046C00000000000000000000008000000030000DF +:1046D00000000000000000000000000000000000DA +:1046E00000000000000000000000000000000000CA +:1046F00000000000000000000000000000000000BA +:1047000000000000000002000000000000000000A7 +:104710000000000000000000000000000000000099 +:104720000000000000000000000000000000000089 +:104730000000000000000000050000000000000074 +:104740000000000000400000000000000000000029 +:104750000000000000000000000000000000000059 +:104760000000000000000000000000000000000049 +:104770000000000000000000000000000000000039 +:104780000000000000000000000000000000000029 +:104790000000000000000000000000000000000019 :1047A0000000000000000000000000000000000009 -:1047B00000000000008490820002009000000000D1 -:1047C0000000000000900082890400040001000045 -:1047D00000000001000000000000000000001000C8 -:1047E0008200000000050101C0A10000800000005F -:1047F000000080001180110005808000800003000F -:104800000000000000000000000000000080000028 -:1048100000000080000910004103000000000000BB +:1047B00000000000000000000000000000000000F9 +:1047C00000000000000000000000000000000000E9 +:1047D00000000000000000000000000000000000D9 +:1047E00000000000000000000000000000000000C9 +:1047F00000000000000000000000000000000000B9 +:1048000000000000000000000000000000000000A8 +:104810000000000000000000000000000000000098 :104820000000000000000000000000000000000088 -:104830000000000000000000908000000000000068 -:1048400000000000000000000080108000800002D6 -:104850002020000000020000000000000000000016 -:1048600008008000000000401008008800110000CF -:104870000000000000000040000300A00080800055 -:1048800000000000800000000000000000000000A8 -:10489000000300000000208041000211000300001E +:104830000000000000000000000000000000000078 +:104840000000000000000000000000000000000068 +:104850000000000000000000000000000000000058 +:104860000000000000000000000000000000000048 +:104870000000000000000000000000000000000038 +:104880000000000000000000000000000000000028 +:104890000000000000000000000000000000000018 :1048A0000000000000000000000000000000000008 -:1048B00000000000000000000000000880808080F0 -:1048C0000000000000000000800008054000C080DB -:1048D00041802000001110110000000000000000C5 -:1048E00080000000000000000500900084C020103F -:1048F000000000000000000000010001004000A0D6 -:1049000088008800880010100000000000000000EF -:104910000000000100820082004000000001000150 +:1048B00000000000000000000000000000000000F8 +:1048C00000000000000000000000000000000000E8 +:1048D00000000000000000000000000000000000D8 +:1048E00000000000000000000000000000000000C8 +:1048F00000000000000000000000000000000000B8 +:1049000000000000000000000000000000000000A7 +:104910000000000000000000000000000000000097 :104920000000000000000000000000000000000087 -:104930000000000000000000000002002001A0A014 -:1049400082A0000000000000000002009110018819 -:104950009190001000000001000090008200000013 -:104960000000080004000400880000000800A0A166 -:1049700000000002001000C000890202C0C0000256 -:1049800090030090000200030111000000000000ED -:104990000000400000008200040000000000000051 +:104930000000000000000000000000000000000077 +:104940000000000000000000000000000000000067 +:104950000000000000000000000000000000000057 +:104960000000000000000000000000000000000047 +:104970000000000000000000000000000000000037 +:104980000000000000000000000000000000000027 +:104990000000000000000000000000000000000017 :1049A0000000000000000000000000000000000007 -:1049B000000000000000000000000000100000885F -:1049C0000000A082000000000000000002000000C3 -:1049D00000010200000000010100000100000000D1 -:1049E00000000000000100010000000000000011B4 -:1049F0000103030200C000080002000280088003D7 -:104A0000008320830008001000850490000000004F -:104A10000000000080000000000080000003000291 -:104A20001000000000000000000000000000000076 -:104A300000000000000000000000000000008002F4 -:104A400000110011809000000000000000008011A3 -:104A50000000004085090009091003410011000011 -:104A60000000000000000008000300110410000214 -:104A7000108310A191110000000000000000000050 -:104A80000040000000000011008000000000000055 -:104A900000000000000080000000800000000021F5 -:104AA00003211000030800000000000000000000C7 +:1049B00000000000000000000000000000000000F7 +:1049C00000000000000000000000000000000000E7 +:1049D00000000000000000000000000000000000D7 +:1049E00000000000000000000000000000000000C7 +:1049F00000000000000000000000000000000000B7 +:104A000000000000000000000000000000000000A6 +:104A10000000000000000000000000000000000096 +:104A20000000000000000000000000000000000086 +:104A30000000000000000000000000000000000076 +:104A40000000000000000000000000000000000066 +:104A50000000000000000000000000000000000056 +:104A60000000000000000000000000000000000046 +:104A70000000000000000000000000000000000036 +:104A80000000000000000000000000000000000026 +:104A90000000000000000000000000000000000016 +:104AA0000000000000000000000000000000000006 :104AB00000000000000000000000000000000000F6 -:104AC00000048011008000000000000000000000D1 -:104AD0000000808080000011211120114000020997 -:104AE00000000000008000000011000000800000B5 -:104AF000A1000300100011100000000000000000E1 -:104B000082008801000088000000002000040000EE -:104B100000000000000000000400900002000400FB -:104B20000001000001000001000000000000000082 +:104AC00000000000000000000000000000000000E6 +:104AD00000000000000000000000000000000000D6 +:104AE00000000000000000000000000000000000C6 +:104AF00000000000000000000000000000000000B6 +:104B000000000000000000000000000000000000A5 +:104B10000000000000000000000000000000000095 +:104B20000000000000000000000000000000000085 :104B30000000000000000000000000000000000075 -:104B4000000000000404004000000000000000001D -:104B50000000000082080410020001900001010022 -:104B600000000000000000080000000000100040ED -:104B70000000110489020300880100000000000009 -:104B80000000000000E000005000000000000000F5 -:104B900060000000000000000000000000000000B5 -:104BA0000000000000E000000081000000000000A4 +:104B40000000000000000000000000000000000065 +:104B50000000000000000000000000000000000055 +:104B60000000000000000000000000000000000045 +:104B70000000000000000000000000000000000035 +:104B80000000000000000000000000000000000025 +:104B90000000000000000000000000000000000015 +:104BA0000000000000000000000000000000000005 :104BB00000000000000000000000000000000000F5 -:104BC00000000000000000000700000000000000DE -:104BD00000000000000A00E007000000000000E004 +:104BC00000000000000000000000000000000000E5 +:104BD00000000000000000000000000000000000D5 :104BE00000000000000000000000000000000000C5 -:104BF00000000000821100E007000000000000003B -:104C0000381CC18300BD00DB381CC18300000000DC -:104C1000909F03030000000000000000B0FFB09F61 +:104BF00000000000000000000000000000000000B5 +:104C000000000000000000000000000000000000A4 +:104C10000000000000000000000000000000000094 :104C20000000000000000000000000000000000084 :104C30000000000000000000000000000000000074 -:104C4000000000000000FF66FF66F0F000000000BA -:104C50000000000000000006000600000000000048 +:104C40000000000000000000000000000000000064 +:104C50000000000000000000000000000000000054 :104C60000000000000000000000000000000000044 -:104C700000000000000066FF62FBF0000000000082 -:104C80000000F99FF99F00000000F99FF99F0000C4 -:104C90000000909FF3F3000000000000000020FFE0 -:104CA000209F000000000000000000000000000045 +:104C70000000000000000000000000000000000034 +:104C80000000000000000000000000000000000024 +:104C90000000000000000000000000000000000014 +:104CA0000000000000000000000000000000000004 :104CB00000000000000000000000000000000000F4 -:104CC000000000000000000099009900F0F00000D2 -:104CD0000000000000000000000C000C00000000BC +:104CC00000000000000000000000000000000000E4 +:104CD00000000000000000000000000000000000D4 :104CE00000000000000000000000000000000000C4 -:104CF000000000000000000066FF62FBF000000002 +:104CF00000000000000000000000000000000000B4 :104D000000000000000000000000000000000000A3 :104D10000000000000000000000000000000000093 :104D20000000000000000000000000000000000083 @@ -140537,494 +140537,494 @@ :104D50000000000000000000000000000000000053 :104D60000000000000000000000000000000000043 :104D70000000000000000000000000000000000033 -:104D8000000000000000000000000000F50000002E -:104D9000000000000000094209DB000000000000E4 -:104DA0000000FF3C000000000000000000000000C8 +:104D80000000000000000000000000000000000023 +:104D90000000000000000000000000000000000013 +:104DA0000000000000000000000000000000000003 :104DB00000000000000000000000000000000000F3 -:104DC0000000000000000000000000007E7E7E7FEA -:104DD0000000B0B0000000000000000008880C8C4B -:104DE0006767E7E700000000000000000000000027 -:104DF0000F0F0F0F000000000008000960606F6FC8 -:104E00000F660F66000000000000000000000000B8 -:104E100000000000000000000942094200000000FC -:104E200000000000BDBD0000000000000000000008 +:104DC00000000000000000000000000000000000E3 +:104DD00000000000000000000000000000000000D3 +:104DE00000000000000000000000000000000000C3 +:104DF00000000000000000000000000000000000B3 +:104E000000000000000000000000000000000000A2 +:104E10000000000000000000000000000000000092 +:104E20000000000000000000000000000000000082 :104E30000000000000000000000000000000000072 -:104E40000000000000000000000000000000666696 -:104E500066660000B0000000000000000000008056 -:104E600004840101818100000000000000000000B6 -:104E700000003C3C3C3C0000000009080009606068 -:104E80006F6F0F660F6600610006000D0000006185 -:104E90000007001D000000610006001D000000006A -:104EA00000000000000000000000000000000061A1 -:104EB00000050001000000000000000000000000EC +:104E40000000000000000000000000000000000062 +:104E50000000000000000000000000000000000052 +:104E60000000000000000000000000000000000042 +:104E70000000000000000000000000000000000032 +:104E80000000000000000000000000000000000022 +:104E90000000000000000000000000000000000012 +:104EA0000000000000000000000000000000000002 +:104EB00000000000000000000000000000000000F2 :104EC00000000000000000000000000000000000E2 -:104ED00000610006000D000000000000000000005E -:104EE0000061303700010000006100040001000093 -:104EF000000000000000000100610006000D00013C -:104F000000610036C01900000000000087875500CE -:104F1000000000006F00006F000000000000002093 +:104ED00000000000000000000000000000000000D2 +:104EE00000000000000000000000000000000000C2 +:104EF00000000000000000000000000000000000B2 +:104F000000000000000000000000000000000000A1 +:104F10000000000000000000000000000000000091 :104F20000000000000000000000000000000000081 -:104F3000FF00FF00303030300000000000000000B3 +:104F30000000000000000000000000000000000071 :104F40000000000000000000000000000000000061 -:104F50000000000000003000000000000000000021 -:104F60000000000000001400BEFFFB00FFFF0CFC6F -:104F70000CFC00000000000000000000000000C069 -:104F8000C0C0C3CFC3C3C0FFE8FF000000008787D5 -:104F90005500000000006F6F6F6F00000000000000 +:104F50000000000000000000000000000000000051 +:104F60000000000000000000000000000000000041 +:104F70000000000000000000000000000000000031 +:104F80000000000000000000000000000000000021 +:104F90000000000000000000000000000000000011 :104FA0000000000000000000000000000000000001 -:104FB0000000363636363F3F3F3F0000000000001D +:104FB00000000000000000000000000000000000F1 :104FC00000000000000000000000000000000000E1 -:104FD00000000000000000003F0000000000000092 -:104FE00000000000000000001400BEFF0000FFFFF2 -:104FF0000000FFFF000000000000000000000000B3 -:105000000040404000000000C0FFC0FF0000000062 +:104FD00000000000000000000000000000000000D1 +:104FE00000000000000000000000000000000000C1 +:104FF00000000000000000000000000000000000B1 +:1050000000000000000000000000000000000000A0 :105010000000000000000000000000000000000090 :105020000000000000000000000000000000000080 -:1050300000000000FFFF0F0F5A3C5A3C0000000028 +:105030000000000000000000000000000000000070 :105040000000000000000000000000000000000060 :105050000000000000000000000000000000000050 -:1050600000000000000000000000F0AAAAAAAA00A8 -:10507000FF000C0CFCFC0000000000000000000021 -:105080000000000000005F41000000000000000080 +:105060000000000000000000000000000000000040 +:105070000000000000000000000000000000000030 +:105080000000000000000000000000000000000020 :105090000000000000000000000000000000000010 :1050A0000000000000000000000000000000000000 -:1050B0000000000000000F0F0F0F5A3C5A3C000088 +:1050B00000000000000000000000000000000000F0 :1050C00000000000000000000000000000000000E0 :1050D00000000000000000000000000000000000D0 -:1050E000000000000000000000000000F0AAAAAAD2 -:1050F000AA82FFC3ACACACAC000000000000000012 -:1051000000000000000000005F000000000400003C -:10511000200204020100A1044000200020044100FC -:105120000008200004202000C0000002200004002D -:105130008803002000000020200040002000200202 -:1051400000002002200004088805840000002000E0 -:105150000003401088000000880488002000200020 -:10516000200040008400200004008880200083008C -:10517000040440008400840000042000200800048F -:105180008804A000040420008883A000890088000F -:105190001080000000A040002000A00000000000DF -:1051A000400041004100090141200020410300402E -:1051B000000000C0210100842001008220000000C6 -:1051C00000000000000000000300000000000000DC -:1051D000400000008000000000400000000040008F -:1051E0000040090009004000040000000004000025 -:1051F000200400010000200000200500090000003C -:105200002000000000001101000000040004040060 -:105210000000202008080200200000110000020009 -:10522000001109048310900001858210000501021D -:1052300000000800028001000120080003001100A6 -:10524000090084900000000000008341000002007B -:10525000000501040000400000000000A00008005C -:105260000000040505050000020000000000000029 -:105270000000000300080000020000000900000018 -:105280000000011003000000010011008240000036 -:1052900000000805090040840000000840080008DC -:1052A0000400000008404004040404200005040435 -:1052B0004001401000844040080808098984200803 -:1052C00020002088044000080308008240000008F5 -:1052D00000900084081000008984040800824000C7 -:1052E0008008400800004008040800840308008289 -:1052F0000008090804100200048484020000400031 -:105300000002008208000808008802900884410812 -:1053100000882008000040840000040400020040CF -:10532000208400830105030890830080001105405C -:105330000003004100050003008900090002008508 -:105340000041010500410005000200020002004189 -:105350000000000800000000000000410000000004 -:105360000010000300008202001000210000000075 -:1053700000100041200090210020000800080000DB -:1053800000000008000000050000000300082008DD -:1053900000400003040040000220090080080900CA -:1053A00021118921002002000400002010200002A9 -:1053B000A00100000808418800000820000000004B -:1053C00000200000080000000000000000000008AD -:1053D0000000000010000090000000000000050028 -:1053E00000000000000000000000000000820090AB -:1053F000000000100000A1000300400100020000B6 -:1054000000A00000410000000002000000080400AD -:1054100085000200000409840000008404050805DA -:10542000C08200200000000400A0840405050420C0 -:105430000009A1C088029004004140108841820008 -:10544000000040000409820000410000C040040048 -:105450001020080008008400080984020000C00031 -:105460008400820000000800041182000002000095 -:105470000800820008000800000082000800080000 -:10548000100082008200A0001000C00008008211FD -:105490000800820008100800A000080882008008A8 -:1054A0004100022004C1110011A00304008288A061 -:1054B000808200A04020210420884088400108000C -:1054C000210000022110008803900090008400A0B9 -:1054D0004104000010900000050000A00001000041 -:1054E00000840000000000000000000020004000D8 -:1054F00003004100100002000000210000400000F5 -:10550000000040104000400000A0000040C000002B -:1055100008A0030010C0109010820084000000005A -:105520008220041004200820908310040102090442 -:105530008421002008100403000810001008080847 -:1055400000100000100200028980C000A102820049 -:10555000000082000000000300008200000800211B -:105560000000000800000000000000000000100023 -:1055700000000011000004000008000020000000EE -:10558000050200008200C0210821000000008208FE -:1055900082001000000084110000000000200809B3 -:1055A00000081191A000888300014020020104043A -:1055B00020210000200820089000000000000000CA -:1055C000410000000800000011004010000002002F -:1055D00000000000000000000000000000040000C7 -:1055E000000000000000000000000000000000209B -:1055F0000310000000002000000000000300A18450 -:1056000000840402200000000000000000000000F0 -:1056100000000300000000A0000000022190110023 -:1056200008820084200000000004100000098409A2 -:10563000001004000409000090210000001108007F -:105640000021100000081000042101210100842124 -:10565000000020080000000400000004000000001A -:1056600000000041000008000000000000000021D0 -:1056700000000000000000008200000000000000A8 -:10568000000000000000400000210008000340006E -:105690000000824100008200900000080000000825 -:1056A00000000041000904002004108402101000D2 -:1056B0000500410800A01000210400000082000045 -:1056C000048800000000114000C0C10240A0048214 -:1056D000020000401100000000000000080000C0AF -:1056E000008210400000000041880000000000C05F -:1056F0000000000000000000000000082000000082 -:1057000000200000090000820000000000000000EE -:105710000008000000C00020000200000084038296 -:105720000000050000000000A08804C101409008AE -:10573000029091050120821000400083C0880090F3 -:105740000000A1010001000003880120A0028810D0 -:1057500000A1000100C100C100010101840000019D -:1057600000000000A0000000000000010000000098 -:105770000000000000000000000000000000000029 -:105780000000010101000000000100000000000015 -:10579000000002000000000000000000000088007F -:1057A000000001080020040890041003002008A055 -:1057B00080408004902102048590408021100900DF -:1057C00000820009080300040009A1802080000075 -:1057D00000004088000804080008200204088041F6 -:1057E0000020000040000000000000000008000051 -:1057F00000000002000000000000000000000000A7 -:10580000000000002011100500000008000000004A -:1058100000000000800000000000000005202100C2 -:105820008020000021001180000080008200A18003 -:1058300091040483852008038890200300008005DC -:1058400080C08080100010000500A0A080000082B1 -:105850008000008000400000004100002000210086 -:105860001000044180000000000000000000000063 -:105870000000000000000000002000800000000088 -:105880000000000000001080050011100900000059 -:105890000000000000000000800000000000828086 -:1058A00004008500100880000011000000000420A2 -:1058B0004108A0018405828303A0A1910340000058 -:1058C00040C1A0A09002A1822100900082A11000FE -:1058D0001004A002C0040001000000A0000001406C -:1058E000010001000185020000000000000000002E -:1058F0000000000000000000000000000010000098 -:105900000000000000000000014000000101000252 -:10591000820000000000840000000200200004005B -:1059200008100100A0000101880002010800000029 -:10593000C0100120904184000982A01191098405C2 -:105940008208000940908900000100010001000068 -:10595000C00300004001041000000400010000002A -:105960000000000100010000000100000001000132 -:105970000000000000000000000000000001000125 -:105980000000000000000000000000000000010115 -:1059900000010000000100000000000200020004FD -:1059A00000000000010200080001A0020000001039 -:1059B000A0008980021003218300A0A021C020A1A3 -:1059C000C0090902024080022004000811041021CD -:1059D000084088A0000380052011040080002000FA -:1059E000000000110303032104020010002000083E -:1059F000002000000000000000000000000500087A -:105A0000001000000000000000000000001121054F -:105A10000505101100000020000900200000008092 -:105A200000000000001011840085001000C000007C -:105A3000000300002140090541110211C09182407C -:105A400090118310002000880000000021800200D7 -:105A500005000840802000A0000000000010002188 -:105A60000000000010800500400005090000000053 -:105A70000000000000000000000000000000000026 -:105A80000000000000000000000000000000030211 -:105A90000520050003100000000000800000000247 -:105AA00000800000000003A11000C1808940800038 -:105AB00000800000000001C001A100020000089069 -:105AC000110809C18400400100032088C0000102C0 -:105AD00000A0010801019000820810022000880047 -:105AE00088008800880001A000000000000000007D -:105AF0000090000200000000000000000000000014 -:105B000040002000020040000000000000000000F3 -:105B1000000000000100000000000000000800007C -:105B20000000002000000000000521001008900186 -:105B30000200200800880000000000E00700840048 -:105B4000000000E007000000000000E00700000087 -:105B500000000000000000000000000007004100FD -:105B6000000000E007000000000000000000000648 -:105B70000000000000000000000000000000000025 -:105B80000000000000000000000000000000000015 -:105B90000000004100E007000000000000000000DD -:105BA00000000000000000000000000000E0000015 -:105BB0000000000000000700000000000000020AD2 -:105BC000020A50F3500305F3050300001111300CD5 -:105BD000300C00000000000000008F8A858000006B -:105BE00000000100000000000000000000000000B4 -:105BF00000000000000000000000000000000000A5 -:105C00000000000000F082F2000000000000000030 +:1050E00000000000000000000000000000000000C0 +:1050F00000000000000000000000000000000000B0 +:10510000000000000000000000000000000000009F +:1051100000000000000020004000400000000000EF +:10512000000000000000200000000000000000005F +:10513000000000000000200020000000000000002F +:10514000000000000000200000000000000000003F +:105150000002000000000000200020050000000008 +:10516000000011000100008020800000000000000D +:1051700040000000000000002000200000000000AF +:1051800000002000000000002000000000000000DF +:1051900020000000400000000000000000020000AD +:1051A00000000000000000000000000000000000FF +:1051B00000000000000000000000000000000000EF +:1051C00000000000000000000000000400000000DB +:1051D00000000000000000000000000000000000CF +:1051E0000000000020402000000400040000000037 +:1051F000000000000000000000000000400000006F +:105200000000000040000000210200004000008279 +:105210000002000000000000000004000000000088 +:10522000000000000000000000000000000000007E +:10523000000000000000000000000000000000006E +:10524000000000000000000000000000000000005E +:1052500000000000000004400000001000100005E5 +:10526000000000000000200020002040A104A00059 +:105270000000A00000000200000004000200000086 +:105280000000000000000000000000008200000894 +:105290000000000000410000000000880000000045 +:1052A00000000000000000000000000040000000BE +:1052B00000000000000000080000000000000000E6 +:1052C000000000004000000000000000000000009E +:1052D00000000000000000008010000000000084BA +:1052E0000000000000880000800080008000200195 +:1052F00000000000000000000400000000000000AA +:10530000000000000000100000000000000000820B +:1053100000820082000000820800000000000000FF +:105320000000000004000000000000000000004039 +:10533000000000000000000000000000000000006D +:10534000000000000000000000000000000000005D +:10535000000000000000000000000000000000004D +:1053600001000021002100000021000000000000D9 +:105370000008000800080000000800080000000005 +:105380000008000900000008000000000000000004 +:10539000000000000000000000000000000000000D +:1053A00000A000000000000000000000000000005D +:1053B00000000000000000000000000000000000ED +:1053C00000000000080000000000000000000000D5 +:1053D00000000000000000000000000000000000CD +:1053E00000000200000000000000000000000000BB +:1053F000000000000000000000C0000000000000ED +:10540000000000000000000000000000000000009C +:10541000000000000000000000000000000000008C +:10542000000000000000000000000000000000007C +:105430000000000500050000000900000000000059 +:105440000000000800000000000002000005000548 +:1054500000000000002100210003002100000000E6 +:105460000000000010800000002100000002000089 +:1054700000000000000000410000000000400000AB +:1054800000000000000000400000000000000000DC +:1054900000000008000000000008000500040000F3 +:1054A00000000000000000000000000004000040B8 +:1054B000000000000000008200000000200000004A +:1054C00000000000008400400000000802400000CE +:1054D00000000200020000000000000000000000C8 +:1054E000000000000040002000C000000002000199 +:1054F0000000000000000000000000000090000814 +:105500000008000000000000000000000000000093 +:10551000000000000000008200000000000000A069 +:10552000000000000000000000000000000000007B +:10553000000000000000000000000000000000006B +:105540000000000000000005000000000000000056 +:10555000000000000000000000000000000000004B +:10556000000004000020840004210010002100003D +:1055700000000021000000000000000000000021E9 +:1055800000000041000000000000000000000000DA +:105590000000000000000000000000000000000803 +:1055A00000000000000000000000000000000000FB +:1055B00000000000000000000000000000000000EB +:1055C00000000000000000000000000000000000DB +:1055D00000000000000000000000000000000000CB +:1055E00000000000800000010000800000010000B9 +:1055F00000000400000000000000000000000000A7 +:10560000000000000000000000000000000000009A +:10561000000000000000000000000000000000008A +:105620000000000000080000000000000000000072 +:10563000000000000000000000000000000000006A +:1056400000000040000500000000000000400000D5 +:1056500000000040000000000000000000210021C8 +:1056600000000000000001800500058003C000214B +:1056700000030009000000000000000000000021FD +:1056800000030041000000000000000000000000D6 +:10569000000000000000000000000000000000000A +:1056A00000000000000000000000000000000000FA +:1056B000004000000020000000000000000000008A +:1056C00000000000000000000000021000000000C8 +:1056D0000000000000000000000000000000008248 +:1056E00000000200038400004020840084208441E4 +:1056F0000500000000000000000000000000038220 +:105700000008000000000000000000000000000091 +:105710000000000800000008000000000000020077 +:105720000000000000000000000000000000000079 +:105730000000000000000000000000000000000069 +:105740000000000000000000000000000000000059 +:105750000000000000000000000000000000000049 +:105760000000000000000000000010C10091009047 +:105770009011000000000400000000000000000084 +:105780000000000000000000000000000000000019 +:105790000000000000000000000000000000000009 +:1057A00000000000000000000000000000000000F9 +:1057B00000000000000000000000000000000000E9 +:1057C00000000000000000000000000000000000D9 +:1057D00000000000000000000000000000000000C9 +:1057E0000000000000000000000000001090001108 +:1057F000000980910000030080000000000000000C +:10580000090000000000000000000000000000008F +:105810000000000000000000000000000000000088 +:105820000000000000000000000000000000000078 +:105830000000000000000000000000000000000068 +:105840000000000000000000000000000000000058 +:105850000000000000000000000000000000000048 +:105860000000000000000000000000000000000038 +:10587000001080808000000000050080000000090A +:105880000000000400000000000000000000000014 +:105890000000000000000000000000000000000008 +:1058A00000000000000000000000000000000000F8 +:1058B00000000000000000000000000000000000E8 +:1058C00000000000000000000000000000000000D8 +:1058D00000000000000000000000000000000000C8 +:1058E00000000000000000000000000000000000B8 +:1058F0000200900040409000000000000004000002 +:105900000000000000010000000000000000000096 +:105910000000000000000000000000000000000087 +:105920000000000000000000000000000000000077 +:105930000000000000000000000000000000000067 +:105940000000000000000000000000000000000057 +:105950000000000000000000000000000000000047 +:105960000000000000000000000000000000000037 +:105970000000084000909120880200000000000113 +:10598000000000000800000000000000000000000F +:105990000000000000000000000000000000000007 +:1059A00000000000000000000000000000000000F7 +:1059B00000000000000000000000000000000000E7 +:1059C00000000000000000000000000000000000D7 +:1059D00000000000000000000000000000000000C7 +:1059E00000000000000000000000000000000000B7 +:1059F00000000000808021009100100000040000E1 +:105A00000002000000008000000002000000000012 +:105A10000000000000000000000000000000000086 +:105A20000000000000000000000000000000000076 +:105A30000000000000000000000000000000000066 +:105A40000000000000000000000000000000000056 +:105A50000000000000000000000000000000000046 +:105A60000000000000000000000000000000000036 +:105A70000000000000000011800300000000000092 +:105A80008000800080000000000000000000000096 +:105A90000000000000000000000000000000000006 +:105AA00000000000000000000000000000000000F6 +:105AB00000000000000000000000000000000000E6 +:105AC00000000000000000000000000000000000D6 +:105AD00000000000000000000000000000000000C6 +:105AE00000000000000000000000000000000000B6 +:105AF0000000000000000000900110010020900054 +:105B0000000002000200040000000000000000008D +:105B10000000000000000000000000000000000085 +:105B20000000000000000000000000000000000075 +:105B30000000000000000000000000000000000065 +:105B40000000000000000000000000000000000055 +:105B50000000000000000000000000000000000045 +:105B60000000000000000000000000000000000035 +:105B700000000000000000000000004204000700D8 +:105B800000000000000000000000000000E0000035 +:105B90000000000000000000000000000000000005 +:105BA00000000000000000000000000000000000F5 +:105BB00000000000000000000000000000000000E5 +:105BC00000000000000000000000000000000000D5 +:105BD00000000000000000000000000000000000C5 +:105BE00000000000000000000000000000000000B5 +:105BF000000000000000000000000000007DFFFF2A +:105C0000040CF4FCF0F0F0F00000000000000000D4 :105C10000000000000000000000000000000000084 -:105C20000000000000000000F071F071C30FC30F0E -:105C3000F000F000FFFF00FFC3FFC3FF0000000003 -:105C40000A020A025FF35F03F5F3F50300005555FE -:105C5000300C300C0000000000000000DFDAD5D06E -:105C600041410000010000000000000000000000B1 -:105C70000000000000000000000000000000000024 -:105C800000000000000000F000F000000000000034 +:105C20000000000000000000000000000000000074 +:105C30000000000000000000000000000000000064 +:105C40000000000000000000000000000000000054 +:105C50000000000000000000000000000000000044 +:105C60000000000000000000000000000000000034 +:105C70000000000000000000000000000000007DA7 +:105C800000000103F1F3B1F0B1F0000000000000EA :105C90000000000000000000000000000000000004 -:105CA00000000000000000000000F071F071C30F60 -:105CB000C30FF000F000000000FF003C003CFCA817 -:105CC000F3A20000E70045518AA2F0F0F0F0005482 -:105CD000005100050050000000005D555555000FB3 -:105CE000000000000000C0C0000000000000000034 -:105CF000000000000000000000003C3C3C3C0000B4 -:105D00000000000000000000000000000000000093 +:105CA00000000000000000000000000000000000F4 +:105CB00000000000000000000000000000000000E4 +:105CC00000000000000000000000000000000000D4 +:105CD00000000000000000000000000000000000C4 +:105CE00000000000000000000000000000000000B4 +:105CF00000000000000000000000000000000000A4 +:105D0000FF0F3C550C0CFCFC0000000000000000E4 :105D10000000000000000000000000000000000083 -:105D200000000000FFFF0000000000005F0AFF000D -:105D300000000000FF3CFF3CFD7DFC3C003C003CC3 -:105D4000A8FCA2F300000000CFF3CFF3F0D0F0F0F6 -:105D50000000000000550055000000000C0000008D -:105D60008282000041000300C0C00000000000006B -:105D700000000000000000000000000055555555CF -:105D80000000000000000000000000000000000013 +:105D20000000000000000000000000000000000073 +:105D30000000000000000000000000000000000063 +:105D40000000000000000000000000000000000053 +:105D50000000000000000000000000000000000043 +:105D60000000000000000000000000000000000033 +:105D70000000000000000000000000000000000023 +:105D80000000000F3C550C0C0CFC00000000000053 :105D90000000000000000000000000000000000003 -:105DA0000000000000003C3C3C3C000000005F0A9A -:105DB000FF0000000000FF00FF00F555F0000A3E64 -:105DC0000A3E05614A0E050900A185614A0F050DCD -:105DD00000A005614A0F050D00A000610006000D3E -:105DE000000005610A0E051D00A08561400F000D31 -:105DF000000000610006000D000000610006000DBB -:105E00000000000000610006000D000000610006B7 -:105E1000000D0000000000000000000000610038DC -:105E2000000100A000610006000D0001000000005C -:105E30000000000080610004000100010061000614 -:105E4000001D0000A2AAF3FFF000F0000400000013 -:105E5000000000C000000000143F140338FBFBFBEF -:105E600003F303F300000000A0A0F5F5000000001C -:105E700000000000C3C3AAAADFD08F80000000008A -:105E8000003CA0BC0000000000000000000000007A -:105E90000000303F303F0000000000000000F53CF3 -:105EA000053C30F03FFF0000000000F0FFF0000074 -:105EB000000000000000FFFF3E0A7DFD3CFC0000EA -:105EC00000003C3C3C3CF3FFF3FFF000F00000001E -:105ED00000000000000000000000D73FD703383862 -:105EE000FB380303F3F300000000287D287D000049 -:105EF00000000000000000FFF0F0000000000000C3 -:105F00000000003C003C0000000000000000000019 -:105F100000000000303F303F0000000000000000A3 -:105F2000F53C053C30003F0F0000000000F0FFF0A2 -:105F300000000000000000003E0A3E0A55F500F097 -:105F40000000000014BE14BE01000000F5F7C1C13E -:105F5000140400005FAF1C2C41EB41EB000000007B -:105F600014D714D750CF50C000000000000000002C -:105F7000000000C00000000002520757AAAA000C4F -:105F8000000000000000000000000000C3C300008B +:105DA00000000000000000000000000000000000F3 +:105DB00000000000000000000000000000000000E3 +:105DC00000000000000000000000000000000000D3 +:105DD00000000000000000000000000000000000C3 +:105DE00000000000000000000000000000000000B3 +:105DF00000000000000000000000000000000000A3 +:105E0000000000000079203E000D05000061000642 +:105E1000000D000000610007000D00000000000000 +:105E20000000000000000000000000000000000072 +:105E30000000000000000000000000000000000062 +:105E40000000000000000000000000000000000052 +:105E50000000000000000000000000000000000042 +:105E60000000000000000000000000000000000032 +:105E70000000000000000000000000000000000022 +:105E80000000000000000000000000000000000012 +:105E90000000413C413C0000000000000000000008 +:105EA00000000000000000000000000000000000F2 +:105EB00000000000000000000000000000000000E2 +:105EC00000000000000000000000000000000000D2 +:105ED00000000000000000000000000000000000C2 +:105EE00000000000000000000000000000000000B2 +:105EF00000000000000000000000000000000000A2 +:105F00000000000000000000000000000000000091 +:105F1000000000007D3C7D3C00000000000000000F +:105F20000000000000000000000000000000000071 +:105F30000000000000000000000000000000000061 +:105F40000000000000000000000000000000000051 +:105F50000000000000000000000000000000000041 +:105F60000000000000000000000000000000000031 +:105F70000000000000000000000000000000000021 +:105F800000000000000000000000FFFF0000000013 :105F90000000000000000000000000000000000001 -:105FA000000055FF5500101FB0BF000000000000AA -:105FB000000000000000000000005F5F50503FBF85 -:105FC0003CBE000000000000000000000000FFFFD9 -:105FD000C3C3140000005FAF438341EB41EB0000FB -:105FE0000000CFCF0C0C5FCF5FC0000000000000AE -:105FF0000000FFFFFF3F00000000A2F2A7F7AAAADF -:1060000000CF000000000000000000000000C3C33B +:105FA00000000000000000000000000000000000F1 +:105FB00000000000000000000000000000000000E1 +:105FC00000000000000000000000000000000000D1 +:105FD00000000000000000000000000000000000C1 +:105FE00000000000000000000000000000000000B1 +:105FF00000000000000000000000000000000000A1 +:10600000000000000000000000000000FF7F008092 :106010000000000000000000000000000000000080 -:10602000000000003CFF3C00101FB0BF000000005B -:106030000000000000000000000000005F5F505002 -:106040000FAF00AA0000000000000000882021001F -:106050000400010420002000C1044009200088053C -:10606000090420008811A0002004820020082000DC -:10607000884188002000210504858804C0000000B4 -:10608000001100002004880820048500000302039A -:1060900005002000200020110000880000048888EE -:1060A000040000000000400088002000C102888039 -:1060B0002080402020802009C0002000000502052B -:1060C00020000000000804004000040884040001CF -:1060D0002000A000040184A0092020080400000082 -:1060E0002000A000C10000004000000300000000EC -:1060F000000000000000100020002104000040000B -:10610000000000000000000100000002200000006C -:10611000000020008000800000000000200000003F -:106120000002000000000000A0000000400004A0E9 -:10613000402000208001092000C009000400000068 -:106140002000000000001000000008000020008275 -:1061500001040400828802000241010002000304DD -:1061600000000040000008000200020002102005AC -:1061700000090200024100100200900001400100ED -:1061800002050000A0030004080000050208410009 -:1061900000002005020002040308A04100000000E6 -:1061A00089200285000004000000000801000100B1 -:1061B00084002000000082000008000502080100A1 -:1061C0000900014003000000020400000200000476 -:1061D000082020090400400441880088080804843D -:1061E00004850000091009828082040804080090D8 -:1061F00005000084C0002088040810844140020487 -:10620000200200100084200400840008001000C058 -:10621000880800000940204000090840090840089B -:106220000010088404020900400804840040028829 -:10623000029000A000084108008404840008008443 -:106240004008C0044008C088040400842084040876 -:106250004190000104A105104110A04088C1C00573 -:1062600000900540040820410005000800800085DA -:106270000008084000020403000500210008000097 -:1062800000110008000308000005000500A100043B -:1062900000050000000000040004000500040021C7 -:1062A0008221000000080003000804004008008567 -:1062B00000080000040200100000C04100050000BA -:1062C0000000000000000005200000030009000994 -:1062D0008840000000214102842020C008040902F7 -:1062E00041C00003200041000500008408080004AC -:1062F000050421400300030004000088000003821D -:10630000000000A00002000805000088080000044A -:106310000885008800000000000103014100000121 -:1063200000000000008800000000000003A0000042 -:10633000002000000000854000000000030800A0CD -:1063400003A0000003000300000004080284000012 -:1063500000040000400040840003200082400180CF -:1063600083800482000009048504C0200400A00288 -:10637000080082000011080410404011A000000035 -:10638000C0004000080040410400080083090000EC -:10639000820084008200880000002000A021088084 -:1063A00000000000820001000800C0020100A000FF -:1063B000A0001000080004004004000000000800D5 -:1063C0000000100040004000C020110010004009F3 -:1063D00040044000080008008305048400C00983CD -:1063E0002020080421402004200840A0210008A00B -:1063F000004100A0080000001084409000002088A8 -:106400000090210800C041000910000800844008E5 -:10641000020000000000411003A000008890090065 -:10642000410404A0000000040284000000094000B0 -:106430002100000000000000410888010000000069 -:106440000000000020000000000020C00882009032 -:1064500080A080100008001020A0400005104040DF -:106460002020A1210004200404044010000484041E -:1064700090100008080400000000828000008220C4 -:106480000021A0400084108000908288C000A000FD -:1064900084094008000000000104082000000008F2 -:1064A00000088200080400000800A000820000002C -:1064B00000000041080000000400000082040841C0 -:1064C00040000800004088058405004102000003E8 -:1064D00084009020000310030403A0200821A0885A -:1064E0000389800140081091A10590058400108562 -:1064F0000801418400A008A1211000C02104000867 -:1065000000080088000800050004000408042100B9 -:1065100003000004800000000300200108080000C0 -:10652000000000A000000001000010000084000036 -:106530000800020000008000028202000008020140 -:10654000000000000000000000000000000000004B -:10655000000040002000000804008090000100843A -:106560008400820482098408A00890800004A0802E -:1065700000048208400404890802C00010080508CD -:106580000400004100080003824184110008040354 -:106590000000000010000000100020402003000454 -:1065A0000000000000400440004000000021C0083E -:1065B0000403000000008221008000000000004071 -:1065C00000000041000000410900C003000000007D -:1065D000A008C04184058208A102002040200010CC -:1065E0008200090420030800031000820802410110 -:1065F00009200801008209092004080000000400A5 -:10660000080000900000000002C0110000080040D7 -:1066100011040800000004A00000000000000000B9 -:1066200000850000004003000000000000000000A2 -:106630000000000000000000000000024002000016 -:10664000200000000000000000004000000000905A -:10665000200000840000000020844001000141016E -:1066600000A000A00001880090000001100491200B -:106670008805C00300000401820008010101000038 -:1066800008000000A00400040082C0900001850002 -:10669000010100010000820004000000000021014F -:1066A0008400000100000000000000000000000065 -:1066B00000000000000000000100000100010000D7 -:1066C000000000000000020090820482001004100C -:1066D0000088000800040000910100010000114042 -:1066E0000000000800010510211002091103892093 -:1066F0008589020380A00004400288040003201161 -:106700001108800200048080008000000000001159 -:1067100004402011000300000000000000000004FD -:106720002140851100080000000000000500000065 -:106730000000000000000000001120030002001013 -:106740000000004005200000C000A0000080008084 -:106750000080400000800080004104080003000821 -:1067600088C000400040001080200020800480008D -:1067700085C08840838291900005008000408000A1 -:1067800090001100910000108000800380800000C4 -:1067900000802000111103032000200003001000DE -:1067A000048320000003408300008040800080407C -:1067B0000000000000008000000000000000000059 -:1067C00000408000000080800000100004024100B2 -:1067D00084008800080891001000850003008805E7 -:1067E00008A1050021004104C0051001A0201003EC -:1067F0000220919120A19183400410002002040006 -:106800000800030020004100840008000801A002E5 -:106810008882004000000101010100000000010029 -:106820000000011009000001010800000401080037 -:106830000201A00000000800080000000020A000E5 -:106840000000820108000000080840820100820068 -:1068500088009000A0000201A020820010028900A0 -:10686000030111A120900100000990000000110017 -:106870004100000190210309049109A000C1040016 -:10688000000000200000000100000100100000A036 -:1068900002C082820000010101000101000000002D -:1068A000000000000001410088010001000000001C -:1068B00004000000000000000000000000000000D4 -:1068C00000000000000001010000000001000809B4 -:1068D000001000900202021000A10000100300014D -:1068E000000000000001A0000008A184022120098E -:1068F000200411100320852011829190881100023C -:10690000A020410405080008000341111100800087 -:1069100000808000008000001102050011110000BD -:106920000003000000200008084141214010000041 -:1069300000008000000009000000000000000000CE -:106940000000200309000010401000110909022076 -:10695000008400110080020080090090000000C047 -:106960000040210403000008000420418200800848 -:10697000001100850080008011911190908010021C -:106980000040008000000000081121910800031160 -:1069900000408002008080000000110040001111C2 -:1069A0000000000000000005039102090900030037 -:1069B0000000004000000080000080020000808095 -:1069C000800021000800080008008000000200008C -:1069D0000000001100808000000000A00080008006 -:1069E00000090991088910000303908089000500BF -:1069F000100490018420900884900585902011084F -:106A0000A10100000020000400000008000501C0F2 -:106A10000100A0014011A040080082008900000090 -:106A20004101000800000000000000A00102001069 -:106A30000100000000000082004000000200004051 -:106A40000840020001000108000000000800C00129 -:106A5000828800001001828240100200C010822053 -:106A600082029000041021108300C00190A004084D -:106A700084840100000000E007000000000000E046 -:106A800007000012000000E000000000000000E02D -:106A9000000000000000000000000000000000E016 -:106AA000000000000000000000000000000000E006 -:106AB000000000000000000000E0000000000000F6 -:106AC0000000000000000000000000000000500A6C -:106AD00000E00700000000000000070000000000C8 -:106AE00000000000000000000000000000000000A6 -:106AF0000000070000003CBC3C3C000000000F0F01 -:106B000000FF2211669900000000FFFF3C3C0000DE -:106B1000000000000000FFF000F0999900FF3CFF2A -:106B20003C00000000000000000000000000000029 -:106B30000000000000000000000000000000000055 -:106B4000FCFC0C0C00000000000000000000000035 -:106B5000FF00F96000000000FFF03CF0BD24F96088 -:106B60000309F309D0D0DBDBF0F0FCC0000000002B -:106B7000FF09F600FFF6000600900000000000008C -:106B80009999C3C33333FFFF00000000C3C3000063 -:106B900000000000000000003C663C660F0F00FF94 -:106BA0003CFF3C000000000000000000000000006E -:106BB00000000000000000000000000000000000D5 -:106BC0000000FCFC0C0C00000000000000000000B5 -:106BD0000000FF00F96000000000C3F000F0BD24D9 -:106BE000F96003F9F3F9D0D0DBDBF0F0FCC0000072 -:106BF0000000FF09F600FFF600060000000000009C +:106020000000000000000000000000000000000070 +:106030000000000000000000000000000000000060 +:106040000000000000000000000000002000000030 +:106050000008C0000000000008000200000004006A +:106060000080040010000000000021200100000555 +:10607000018000000000000020004000000020001F +:1060800000002000200000000000200000030000AD +:106090000000000088000010000000002000400008 +:1060A00020000000208020000000C0002000100020 +:1060B0000000000020000000080000002000200078 +:1060C00020008800400040000000C0002000400088 +:1060D00000000000000000080000800080000000B8 +:1060E0008000002080000000000000004001080047 +:1060F0000000401000000000000000000000000050 +:10610000000000000000000000000000000000008F +:1061100040000000000800000000000010400000E7 +:106120008000000000000010100000024002C000CB +:1061300040000000400000001000C00040000000CF +:10614000400000004000000020004000400000002F +:10615000000000000000020000000000000000003D +:10616000000000000000000004000080008000002B +:10617000000882020000200000000000000004006F +:106180000000000000040200000300000000020004 +:10619000000000100004040000008800000020003F +:1061A00004000000010000000005000000000000E5 +:1061B0000080000002000200080000000020002013 +:1061C0000820000000000000000004400000000063 +:1061D00000000000000000000000000000000000BF +:1061E00000000000000000000000800000200020EF +:1061F0000000000100010082800000840000000017 +:106200008084000000000001000000000000000089 +:1062100080820000000900858008100800820004C8 +:1062200000020008008220000008000000000000BA +:1062300000000004000800080004020400100041EF +:106240000011000900840000000800004100030064 +:10625000000000000000000000000000000000003E +:10626000000000000000000000000000000000002E +:1062700000000041000000020000000900080000CA +:1062800000020009000800210008000000210000B1 +:1062900001000121000001009008004000808821D9 +:1062A0000008000000850005900200000000004189 +:1062B00000000000000000000000000300080008CB +:1062C0000000000888000000000000000008000036 +:1062D00000000000000000000000000000000000BE +:1062E00000000000000000000000000000000000AE +:1062F000000000000000000000000000000000009E +:10630000000000000000000000000000000000008D +:106310000000200020000000080000000001000232 +:106320000008000100000002000000000000000062 +:10633000000000000000000000000000000000005D +:10634000000000000000000000000000000000004D +:106350000000000000000082A0000000000000001B +:10636000001100400000000000000000000040009C +:106370000000000000000000094101000000084189 +:10638000A02100000000C000820800000000A0045E +:1063900083000000000000030000004100000080B6 +:1063A00000848210000800000000000800000000C7 +:1063B0000000000000000000000000000000C0001D +:1063C0000020000000000000008000000005000424 +:1063D00008000000000000000003000000000000B2 +:1063E000000000000000000010002100000000007C +:1063F0000000000000000084200040404088210090 +:1064000000C000820008000808000085410000A0CC +:10641000048520000090008400C0000000C000003F +:10642000000400210008000000000082000000823B +:106430000000000000A000000000000000000000BC +:10644000000800A000900000000000020000000012 +:1064500000A000A000080004000800C00000000028 +:1064600000000000000000000000080000000821FB +:106470000000002100000000000000214021000079 +:106480000008000500030000200004400000200078 +:10649000000082042000000000008204000009C106 +:1064A0000502000541000010000800000402000081 +:1064B0000000A041000000030010000008000000E0 +:1064C0000000000000400000000300110000000870 +:1064D0000021000000000000000008000000000093 +:1064E00000000000000000000000000000000000AC +:1064F000000000000000000000000000000080001C +:10650000000000000000000000000000800000000B +:1065100000000000000180000000000000010000F9 +:106520008802C0000000840000000000000021017B +:10653000000000000000000000000000000000005B +:106540000000000000000000000000080000000043 +:10655000000000000000000000000000000000003B +:10656000820000000200000088000200A0008200FB +:10657000004000210000000000210000020000088F +:1065800040880008002101080040000000008588C4 +:106590000000000000004005002120210000000351 +:1065A0000000014100C0014120100210000808084D +:1065B00000090000000000000041004100400021EF +:1065C000000000000000000000000000000000804B +:1065D0000000000800000021002100000008000069 +:1065E00000000000000000000000000800000000A3 +:1065F0000008000021000000000000000000000072 +:106600000008820800820004200000000000000052 +:10661000200400820000000040200090809011883B +:10662000400800002000212002008000000000003F +:10663000000000000000004000000000000000001A +:1066400000000000000000000000000800840000BE +:106650000002000000000000110000C000A00008BF +:1066600000840084000000000000000005C000401D +:106670000040101004A000000008080801000000FD +:1066800002000000100101004101100000000000A4 +:10669000900000000000400001000000C088008859 +:1066A00001A010040000A091019101111009000047 +:1066B00001000200000000010100080000010100CB +:1066C000000040000000000000000000000000008A +:1066D00001000800000800000000000000000000A9 +:1066E0000000000000000000000000000000890021 +:1066F00000800080808004850002004180890800BD +:1067000021000000000020080800900800000000A0 +:106710000000000020000000800005000000800054 +:10672000000010808080000082C011A010A080A115 +:1067300000001000800000000040101080110009CF +:1067400008000300800000000000000000000000BE +:1067500000004100800000800000000000000000F8 +:106760000000000000000000000000000000000029 +:10677000000000890085000080008010000000807B +:1067800000000080000000001100041100004140E2 +:106790000000000000000080050010001111418081 +:1067A00000030009804080000000A009A008C08903 +:1067B00091210000000000000000900088001000FF +:1067C0001121000000000000000000000000000097 +:1067D000000011001000080011000000000000007F +:1067E00000000000000000000000000000000000A9 +:1067F0000000000000100004000008008201089062 +:1068000082080000001000000010000401000002D7 +:10681000010000000000000000080100010001016B +:1068200001A00000A01010A108000000A1A04101DB +:106830009102A1010000000000000000058809008D +:1068400085000503000000000000000000000000BB +:106850000000000000000000010000C00000000077 +:106860000000000000000000000000000000000028 +:106870000000000004C00020000402C0A0100108B5 +:1068800000200204010000004000000000850041DB +:10689000040400C10001000100010100000000002B +:1068A00000010100080010100408C0200000404052 +:1068B0000890A09185020000000000000001000186 +:1068C00001000501000000000001000000010000BF +:1068D0000000000000000000000184010000000032 +:1068E00000000000000000000000000000000000A8 +:1068F0000000000000000000000000800280808096 +:106900000300050082804108001180080009000989 +:10691000009000C1001000100003000811020000E8 +:1069200000090021410080000080008082000000FA +:10693000808085C1809188800000001000030041A4 +:1069400000080803A00502200040004000200011BC +:1069500000000000000000000009000300210409FD +:106960000000000000000000000000000000000027 +:106970000000000000000000800080000000000017 +:1069800000080080800000000009000900000000ED +:10699000A184900084000800000200410000000073 +:1069A00000890000000000110002808000800000CB +:1069B0000000C01120210311404100000000000030 +:1069C000000041004110218010020004000000007E +:1069D00000000000000000000000000000100000A7 +:1069E000000800000000000000000000000000009F +:1069F0000000000000000000000008008200C0004D +:106A00004000040102024008820000000000000073 +:106A1000000009A040000500830000000001000004 +:106A2000000000C0000000000001880088408208CB +:106A300040000000C1C0110004A19101000000004D +:106A400000000000012000200110000000000000F4 +:106A500000000000000000000000000000C0000076 +:106A60000000000100000000000000000000000025 +:106A70000000000000000000000000000000000016 +:106A800000000000000000000700000000000000FF +:106A900007004200000000E000000000810000E06C +:106AA00007004100810000E000006011810002E069 +:106AB000000060120000884102E00704000A0000A4 +:106AC00000E000000000000000E00700000081007E +:106AD00000E00000000000000000000000000000D6 +:106AE000000007004100000000000000000000005E +:106AF00000000000000000000000000000003CF06A +:106B00003CF0C3000030FFFF8DFF2424242400004C +:106B1000000000000000C390C39FC9C0C9CF00009F +:106B20000000000000000000000000000000B4B4FD +:106B30009900F060F060000000081800E77EE7763A +:106B40000000000000000000000000000000000045 +:106B50000000000000000000000000000000000035 +:106B60000000000000000000000000000000000025 +:106B70000000000000000000000000000000000015 +:106B8000FFFF6666C3000042FF008DFFF000FFFFBD +:106B90000000000000000000C3F0C3FFCFC0CFCF53 +:106BA00000000000000000000000000000000000E5 +:106BB000B4B4FF66000F0000000000080000811858 +:106BC0008110000000000000000000000000000034 +:106BD00000000000000000000000000000000000B5 +:106BE00000000000000000000000000000000000A5 +:106BF0000000000000000000000000000000000095 :106C00000000000000000000000000000000000084 :106C10000000000000000000000000000000000074 :106C20000000000000000000000000000000000064 @@ -141033,477 +141033,477 @@ :106C50000000000000000000000000000000000034 :106C60000000000000000000000000000000000024 :106C70000000000000000000000000000000000014 -:106C8000FCFC9864C9C90F00F50000F50000000085 -:106C90000400FFFF0000000000240F2F99FF1E1EBC -:106CA0000F0F6666000000000000000000000000FA -:106CB00000000000000000000F0F0F0F0000000098 -:106CC0000000000F000F000000006666666600000E -:106CD00000000606F6F6000000000000FF3C0FBDB5 -:106CE0000FBD060FF6FFFFC33C0000FF00FF0000D2 -:106CF0000000069F3C3C6F6FFFFF3C3C3C3C0000AB -:106D00000000F3F39162C9C9FFF0F5F5F5F5000055 -:106D10000000040004000000000000000F0F0066E7 -:106D20001E1E3C3CFF0000000000000000000000B0 -:106D300000000000000000000000666666660000BB -:106D400000000000242F000F0000000066F066F035 -:106D5000000000000606F6F60000000000C3FFFF7A -:106D60000F240F240009F0F9D8D8D8D800FF00FE6E -:106D700000000000069F3C3C606000002424BDBD74 -:106D800085610A0F050D00A105610A0F050D00A11F -:106D900000610007000D000000610000000100001C -:106DA00000000000000000018061000100010000FF -:106DB00000610006000D000000610007000D0000EA -:106DC000000000610007000D0000800000000000CE -:106DD000000000610006000D00008561003FC00D4D -:106DE00000A100610006000D000000610006000D1A -:106DF000000000610006000D000100610006000DAA -:106E0000000000000000405480A854FCA8FCFF3C97 -:106E1000A52400000000003CA0BCFF0F3C3CE8E8BB -:106E2000E8E800000000000000000F0F0F0FF0F076 -:106E3000F0F0000000005050FAFA02320E3E00FF5F -:106E400000FF000000000000000000000000000043 -:106E50000000000080C0A0F00000FFFF0000000064 -:106E60000003FFF30000000034343434000000005D -:106E7000FFFF3F3F0AAA0A00000000000A0AFAFAD0 -:106E8000F0F0C0C000000000C0FCC0FC51F3A2F351 -:106E9000FFC3A58100000000003C003C000F3C3C0B -:106EA000C0FCC0FC00000000000000007D827D826C -:106EB000FFFF0000000000005050FAFAC2F2CEFEC0 -:106EC000007F00FF00000000000000000000000044 -:106ED000000000000000C0C0F0F0F0F0F0F0000092 -:106EE00000000003FFF3000000003E3E3E3E0000B5 -:106EF0000000000003030A280A280C0C030303F314 -:106F000003F3F0F0C0C02CAF83AF00000000A581F8 -:106F100081A5F5F5C1341F140F00000000003CFFEF -:106F20003C003A3A3A3A0000000000000000FFC37B -:106F30003C0055AAF0F0000000000030AABA82D749 -:106F400082D7FFFFC3C30000000000000000000064 -:106F5000000000000000000028282C28000000008D -:106F60000F0F0F0F000000000000000000FF0CFCDE -:106F700000000000BE000F0082AA820A000000008C -:106F80000AC0FAC0F3F3F3F338FAC2FA00000000C3 -:106F9000FFC3C3FF5F5F431C0F000F000000000032 -:106FA0000FFF0F0000FF00FF0000000000000000C6 -:106FB0007F43BC8055AAF0F0000000000000AAAAA0 -:106FC000A0A0F5F50F0F0303000000000000000073 -:106FD00000000000000000000000000000000000B1 -:106FE0000000FF00FF00000000000000000000FFA4 -:106FF0000CFC0000000014000F008200820AAC00AC -:10700000ACFF0ACFFACFF371F3F32002210404049A -:107010002000000005800505840404002180000094 -:10702000081020054000200402042005840204000A -:107030002140040204008800010020000000040038 -:10704000010020002000880021000003200004002F -:1070500088002000840084002000000420008800B4 -:107060002000040888000400400000008800200080 -:10707000040010008800200020080000880088001C -:10708000218020040000200004208820090040C145 -:10709000800103000000840404080900400040024D -:1070A0004000800300000500000080000000000098 -:1070B0002002020300004000040002000000000063 -:1070C000000020000000092040000400000009002A -:1070D000200041000000000000000000000004004B -:1070E0000400000000000000410000000002400019 -:1070F0000000200005002000000200000002000047 -:10710000400040100000000000000005000182095E -:1071100041090000000200000000010020400000C2 -:1071200008020200080902048440004002050440ED -:10713000000000000340C0030000A00900000000A0 -:1071400004040003A000040488C08800002100009B -:107150000000000900090404900020000000004025 -:10716000000000000004000402040200C0100040FF -:1071700008000000000540050004000002090000AE -:107180000000094040100221010021000000200001 -:107190000000C00000880201000800102000040266 -:1071A00005028501200884080082090805C08200C4 -:1071B0000082000000828804004000000308008470 -:1071C00000000008000840880002042004080000B5 -:1071D0000000008200080584090000840000000807 -:1071E00000840984000800080282000805000008E5 -:1071F00000848408000805088800000009000404D1 -:10720000040000008288801100100408040020841B -:10721000C008400300002008820821020000044149 -:1072200040100005C0081020000000000000000809 -:107230008310400908080000000000410000000021 -:10724000001000030000004000880000000004025D -:1072500000080000000800000002002100020021D8 -:107260000010000000000021000300210021002187 -:107270000009400800030040000000080008000862 -:10728000000000211000000840030021408004405D -:1072900021000010410800A009100010A0904184B6 -:1072A00080C0880100000804001000900008000061 -:1072B00000C00284000008000008000041080382AA -:1072C000100008000000080000000004000000009A -:1072D0000010000000000000000000C00000094095 -:1072E0004100000000000000000003000300000057 -:1072F0000300000000900000410041000040000237 -:1073000020024188000005C0080083A009840320F2 -:1073100080022082000004000004820004000209B0 -:10732000C00408008241824000052000094010414D -:10733000822082000020824104410000000082116E -:107340000800041100008205904010000920004050 -:1073500000000004040000009000820008004000CB -:107360000800080440024004880084004040840073 -:107370000800080000020009080082009000824016 -:107380001041100040051103040000211188000481 -:10739000101100401005C01109400020008800C0F5 -:1073A0000800000004900020080000408000200039 -:1073B00000000000400000C002000000002000109B -:1073C000050000400840000000000000000020848C -:1073D00000000000000008000000000000000000A5 -:1073E00000000000050000A00000000000004100B7 -:1073F00000000000008800000400000000000300FE -:10740000000005001100800008C0210004000810E1 -:10741000040840A003A0030004A00008088008009E -:10742000C00083000000A108010800022000000243 -:107430008203C021A0050005A0410041A0008221D7 -:10744000C0000000A000C000000800088200000288 -:10745000200000410000000000100000000000219A -:10746000A000002010000000000082008200000048 -:107470000000000000000040080082000000000042 -:107480000000100082000400001000080804040539 -:107490004008000008040110A0004041050004025B -:1074A000080403004010210020002082000080001A -:1074B0000020200000000000000020A000000000CC -:1074C000050000100000000009100000000000008E -:1074D000000080900008008403C0008800000000C5 -:1074E000000000000000000000000000001000008C -:1074F000000021C00000000000000000080400009F -:1075000000000088080004000004000211000508C3 -:10751000000485A00320091020080500A000000237 -:107520008320041010C14040024082042004001156 -:10753000840400101002200808040000000920083C -:107540000241902000414005C000200000000421BD -:10755000000000412002002100000800004000005F -:107560000000001100080000000000000200000000 -:10757000820000000000C000008000000000010048 -:1075800000000000000000000200002000000000D9 -:1075900000000000902101000041C0210000000512 -:1075A00000100200A100102000000000000002A056 -:1075B00000000000000020884000080000882088AB -:1075C0000000000000000200200000004040098888 -:1075D000200000000000828800000000000220005F -:1075E000000000000000000000000000000000009B -:1075F0000020000000000000000000020000000069 -:10760000400000000000000000000000000000003A -:10761000000000000088110040000000000000048D -:107620000000010001000301000000000000010053 -:107630000001A1880802002082C004000020004050 -:107640002000C004000000020282C0C09088000434 -:1076500008108808000200822088C0A000400008AE -:107660001004000000000000000000000000000006 -:107670000000000000000000000000000001000009 -:1076800020000001000000000000000000000100D8 -:1076900004000000108401209088C00010080890A9 -:1076A0000410002020022009020800091104002112 -:1076B0000511000884008005110080050800000005 -:1076C00000800000008000000080000080808000BA -:1076D0000080800011800080050000008080000094 -:1076E000008080800000000000000000000000001A -:1076F000000000000000000000000000000000107A -:107700000808004000200000020000000000000007 -:10771000080000000000910041800000000000808F -:1077200011808900000080808000004000800003FC -:107730008000800380000080001180C18003000071 -:10774000008400910000800000080080000080009C -:10775000000000030080000000A100000080000085 -:107760008040002100000000000000000000000038 +:106C800000000000F6F6B4F600000000FFFFFFFF72 +:106C90009CFC90F0000000000000000000000000DC +:106CA00000000000000000000000000000000000E4 +:106CB00000000000FCE4FCFCFFFFFF0000000C4EA5 +:106CC0008D4ECFCF0CCF0000000000000000000070 +:106CD0000000990FBD0F0000000000000000000040 +:106CE000000000000000C3C3C3C300000000000098 +:106CF0000000000000000000000000000000000094 +:106D0000000000000000F6F6F6F6000000008383A5 +:106D100081819C9C90900000000000000000000019 +:106D20000000000000000000000000000000000063 +:106D3000000000000000FCFCFCFC99F099F0000051 +:106D40000CCF0CCF0C0C0C0C00000000000000005D +:106D500000000000000F240F0000000000000000F1 +:106D60000000000000000000C3C3C3C30000000017 +:106D70000000000000000000000000000000000013 +:106D80000000000000000000000030000090000043 +:106D900000610006000D000005610A0E050D00A04F +:106DA00000610007000900000061000EC00900A09A +:106DB00000610007C005000000653007C00F20011A +:106DC0000000A06D003FC00F240000610006000C11 +:106DD00000000041000C000D00A000610006C00989 +:106DE000000000000000000000000061000E050D22 +:106DF00000A00000000000000000000000000000F3 +:106E00000000000000000000000000000000000082 +:106E100000000000000000000000000000001A1A3E +:106E200000A00000004082BE82BE00000000700092 +:106E300070FF00000000FFF0FFF000000000000005 +:106E4000000000000505050600000000000000002D +:106E5000AAAAFFFFC1C0000007000707000000004A +:106E60000080FFFD000000000000000000000000A6 +:106E70008000000000000000000000000000000092 +:106E80000000000000000000000000000000000002 +:106E900000000000000000000000000000000000F2 +:106EA000101000A000000000003C83BF00000000A4 +:106EB000700070FF00000000FFF0FFF00000000015 +:106EC00000000000000055555596F000F00000004D +:106ED00000000A0A0FFFC1C0C3C3D700D7D7000004 +:106EE00000000000FFFF00000000000000000000A4 +:106EF0000000000000000000000000000000000092 +:106F00000000000000000000000000000000000081 +:106F1000000000000000000004000000000000006D +:106F2000000000000000F0F0FFFF00003030000023 +:106F300000000000000000000000200055000000DC +:106F40000000000000000000D70700D00000000093 +:106F500000000000000000000000AF1F7D7D0D0D4F +:106F60000000000000000000000000000000000021 +:106F700000000000C3FFC3FF00000000000000008D +:106F80000000000000000000000000000000000001 +:106F900000000000000000000000000800000000E9 +:106FA0000000000000000000F0F0FFFFF0F03030C3 +:106FB000000000000000000000000000A0005500DC +:106FC00000000000000000000000D70700D0010012 +:106FD0000000000000000000000000000F1F7D0006 +:106FE0000D00000000000000000000000000000094 +:106FF000000000000000AAFFAAF00000000000004E +:107000000000000000000000000000000000000080 +:107010000408100000000000040000000000000050 +:10702000840000000000000088000000080040000C +:10703000040420000000840000000000080000009C +:107040008400000000000000040000030000210094 +:107050000000020020020000000083000000200069 +:1070600000000000100000000000200000000000F0 +:107070008800208040000000000000004100000067 +:10708000C0000900200000000200200000000000F5 +:1070900000002000000000000000000000000000D0 +:1070A0000000002000000000000020000000800020 +:1070B0000000000000000000000000000000800050 +:1070C0000000400000000000000000000000000080 +:1070D0002000000000000000000000004000000050 +:1070E0000000000000004000000000000000100050 +:1070F000000000020040100000000000000010002E +:1071000000000000C00240000000800000000000FD +:10711000000000000000000000000000000000006F +:10712000000000090004000000000004000000004E +:1071300040000200000002000021000000200004C6 +:1071400000000010000001050000002040000000C9 +:10715000000000000000001000000000000000001F +:1071600002000040000000000004000000000000D9 +:10717000000000084040044000000800A10010008A +:107180001020100000000000A0C0001000204120CE +:107190000000000000080082000000000000000065 +:1071A000000800080000000100000000000100824B +:1071B00009008000800800840000000000040089AD +:1071C0000008000800000000080000000001800026 +:1071D00000001008000800080088000000080000F7 +:1071E00000000008000800080000000000000088FF +:1071F00000000008008480080005000880084000A6 +:1072000000008008218800880000001100890089A2 +:1072100088010000000000000008000000000000DD +:10722000000800200004000000000104002100000C +:1072300000000000000900400102000000020041BF +:107240000000004000C000000003004100210008D1 +:1072500000040000004100000000000800080021B8 +:107260000000000000410020000000000021000894 +:107270000008004100000000000000000040000580 +:10728000000000210021000840080021010801023F +:10729000002100100000210000000000000000009C +:1072A000400000000001000100000000200100007B +:1072B000000000000000000000832009000000A181 +:1072C00000A00000000000050008080000100000F9 +:1072D000000000000000000800840000008400009E +:1072E00041A008002100002000904100000000A003 +:1072F00000A0000000C0000000000000000000002E +:10730000000000000000118200A0C0000000040086 +:1073100004010900000120210000000000000021FC +:1073200000000008080082200005C0210020001194 +:1073300000800004004101058840C01008110000D1 +:1073400000000141088300001004000582040000D1 +:107350000004014100110000004100090011000576 +:10736000000000210005000000000000881100005E +:10737000000800000000080010110805100000417E +:1073800008050003000000900003000983000000CE +:107390000000044104050408800000A00000000073 +:1073A00000000000000010000083008200A0000127 +:1073B0000082000400A10000080000010001008814 +:1073C0000000000020000008091021010000001149 +:1073D0000090000004000000000000000000008495 +:1073E00000C00000000000000000000000000000DD +:1073F000000000000000000000000000000000008D +:1074000000000008000000000004004000400400EC +:1074100000000010800480048001000000000000D3 +:107420000002000000000200200040000080000078 +:107430000000004100800000C00401214000000065 +:107440009020002000080000019104000441002069 +:107450000000002000200002822000000041000007 +:1074600008202008000000000003040000000003C2 +:107470000000000000080000000000000000000004 +:1074800000000000101040000100080000408200D1 +:1074900000200000000004000020000800000000A0 +:1074A000000000000000000000008000A10040205B +:1074B0000000000000000020000000010208100889 +:1074C000400200030040090000000408A100800001 +:1074D00000010000000121A100840001000000C0A3 +:1074E0000304000080004088000000000400090040 +:1074F00005820008080000000008000000000000ED +:1075000000000000000080880000408400080001A6 +:1075100000000001000000008000000100000000E9 +:107520000000000000000800002100000000000230 +:107530002100018000A100000041000400000000C3 +:1075400000410200400988214002A009052121A133 +:107550001100010001210041002100110804000078 +:1075600000020009001008000000000400210021B2 +:1075700000000000000800000000000000002000E3 +:1075800000000000000000000004002100052010A1 +:1075900000410821C021000000000000000004009C +:1075A0000000000000000000008400000000000057 +:1075B00000898408202020200000000000004100F5 +:1075C0000000000080008000000200010000A00018 +:1075D000A02004082000040000040082000020C055 +:1075E000000000000000000011000000000000008A +:1075F0000000000000080000000020000000000063 +:10760000000000000000000000000000000000007A +:107610008000004000C000C000000000200000000A +:107620002000000008000100000000000000000031 +:107630000000000000001100000100A00008001080 +:10764000002001090120C0109091000001000000FD +:107650000000C001C1200004900508C0911082887C +:107660000208000000010300080100000000000003 +:107670000200000000000000000000000000000008 +:10768000000000000002000000080000000201C02D +:10769000000400C00300000010000400414001206D +:1076A0000800C0110000800003000000000010006E +:1076B00000000000004000029003000800800080ED +:1076C0000280000009880811000980C00000100035 +:1076D00000000000910488C04005808880008280FE +:1076E000800080000000001008100008004000002A +:1076F0000400800000000000000000000000000006 +:1077000000000000000000000000008000000000F9 +:107710000300000000008900210008000000A10310 +:10772000218400050010000200000000000000009D +:107730000000004000002000008020000200000443 +:1077400000050004000040001021208041040900D1 +:10775000210011000580C100C000840590918300C4 +:107760002008C0001000000010800800030005037E :107770000000000000000000000000000000000009 -:1077800000000000000000000000000000000000F9 -:1077900011002000820021000900820091000400F5 -:1077A0008000002000838000040820008401C0C005 -:1077B000900010A09000040800040400A004100031 -:1077C0000000004000A000000800880400A0200085 -:1077D000400010C00401C0C0900008C0088408C068 -:1077E00040004001084102000000000000000000CD -:1077F0000000000000000000000000000000000089 -:107800000000000000000000000000000000000078 -:107810000000900004001000C10000008200A000E1 -:10782000081008000000881190000001000090007E -:1078300000000000400082000000029000A00188CB -:10784000A1088408000200880010001000C0008811 -:10785000014000900082C004028883100004C090A0 -:10786000C08200100040004009100000000000002D -:107870000000000000000000000000000000000008 -:1078800000000000000000010000000000000001F6 -:1078900000010000000100000000000082880002DA -:1078A0000040828800092011009089830302002093 -:1078B00000090010000910000241400900002100E9 -:1078C0004000908000800080000000800080000068 -:1078D00000000900058000808000900041000080C9 -:1078E000800003800080000000000800000000000D -:1078F0000000000000000000000000000000000088 -:1079000000000000000000052040034000050000CA -:107910000008001000040008000400110008001115 -:1079200000200082008300A0801000884088210091 -:107930000208040020000040002000800000211008 -:107940000000028040000000800000008000000075 -:10795000000400808000000400210000000080007E -:107960008010000000008040800280800000000045 -:107970000000000000000000000000000000000007 +:10778000000000000000000002000903088005005E +:107790000800100008004100900003000400418030 +:1077A00011001041C090881100000000000000008E +:1077B00000000000000100000090000200000084B2 +:1077C000000100000089000000100500A1A0018454 +:1077D000008201000100001008001084A00082084F +:1077E00004000585A1008384000000100100000052 +:1077F0000001000000000000000000000000000088 +:10780000000000000000000000000000000501086A +:10781000001000000100010001408900210001006A +:1078200009A010000205A11091C000000000000096 +:107830000000000100000001010001000100400003 +:107840000001C000040000001000902100884100E9 +:10785000C0C00000000000010100090800C00808C5 +:107860002104C104A090C08509C1000000000100EE +:107870000001000000000001000000000000000006 +:1078800000000000000000000000000000000000F8 +:1078900000000000400100000201040100C000A13E +:1078A000009000C0219100C084000102000000008F +:1078B0000000000000400002000511092011032013 +:1078C0009002100800000000000009000009028872 +:1078D0002110028300090003000511098491114061 +:1078E00080051109840480020021210200000000AB +:1078F00003024121110900020010000900000000EC +:107900000000000000000000000000000000000077 +:107910000000000000008009000800100011004075 +:10792000001000A0008540A10521082021A0000032 +:1079300000000000000000000000000000000890AF +:107940000908020008080000001180000000A1885A +:1079500011090580020941040003100002004000E3 +:1079600004850580100080110009008000200000BF +:1079700021020800000009110000000000000000C2 :1079800000000000000000000000000000000000F7 -:107990000000800000000000004000800080000324 -:1079A000002000800080000080040008000000002B -:1079B0000100012100A00000000100C1000800003A -:1079C0009100904085C00400A000080088000200DB -:1079D000C000C00008848200000000A00002000077 -:1079E0000400108802880200040108888440040012 -:1079F0000000000000000000000000000000000087 +:1079900080008000000000090009000000000011C4 +:1079A0000084002000800003C1891082A1800903A7 +:1079B00000000000000000000000000000000000C7 +:1079C00001C10001000001018200200182000800C5 +:1079D000C14008881140890001100000000000002B +:1079E00000900108008401002005A0021040100151 +:1079F0000000011000000000000000000000000076 :107A00000000000000000000000000000000000076 -:107A10000000100008009000020000010020000893 -:107A2000000000010008000200009000101000900B -:107A30002000000000E00700000A000000E007004E -:107A40000000000000E00000000A0000000000004C -:107A5000000000000000000000000000000007001F -:107A60004242000000E00000484200000000070021 -:107A700060000000000000000000000000000000A6 +:107A10000000081010000200020000080000000032 +:107A200000000088002000020001C1909008099029 +:107A30008400000000E000000000820000E0000080 +:107A40000000000000E007004200000000E0070026 +:107A50000000000000E007000000810000E00700D7 +:107A60000000000000E007005000000000000700D8 +:107A700084000000000000E00000000000000000A2 :107A800000000000000000000000000000000000F6 -:107A900000000000000000000000000000000000E6 -:107AA000000000000000000000005000000000E0A6 -:107AB00007000000000000000000000000000000BF -:107AC0000000000000F00FFF005500C3F355F35510 -:107AD000A028F52814D4D7148F8A858000000000D0 -:107AE0000011002200090060000011222C3C3C3CE7 -:107AF0000A200A2A00000000000000000000000028 +:107A9000000000000000000000000000810000E085 +:107AA00000000000810000E007000000000000006E +:107AB000070084000000000000000000000000003B +:107AC00000000000000000000000000000BE00BA3E +:107AD000000000000F00C341F0F030300000000053 +:107AE000000000000000000038BA79FB030F00001E +:107AF00028EBFCFC0000000000000000000000007B :107B00000000000000000000000000000000000075 -:107B10000000000000000030C0F000000000000085 -:107B2000000000000000000000000303020000BE8F -:107B3000FFBE808FB0BF000000000000000000000A -:107B40000000000000003A3A3A3A000F000FFF55DB -:107B50000F55A07DF57D14D41414DFDAD5D00000C4 -:107B600000001100220009006000112200003C3CCE -:107B70003C3C0020002A0000000000000000000043 +:107B1000000000000000FBFA5150000000000000CF +:107B20000000000000000000000000AA2000000289 +:107B30003C3C0101000000000000000000000000CB +:107B4000000000000000000000000000000000AA8B +:107B500000BA000000000F0FC341000030300000E9 +:107B600000000000000000000000109251D3C3FF8D +:107B7000000028EBC0C00000000000000000000072 :107B800000000000000000000000000000000000F5 -:107B900000000000000000000030C0F00000000005 -:107BA00000000000000000000000000003030301CB -:107BB0000014FF14808FB0BF000000003C3C7C3CF0 -:107BC0000000000006960FFF0FFFAAAA00F0A0A079 -:107BD00000FF00FF000000003C3C0F0FFCFC3C3CA1 -:107BE00044880000440088000401104044880000DC -:107BF000AABAAAFBFF0FFFFF000000000000000070 +:107B90000000000000000000FFFE5554000000003F +:107BA000000000000000000000000000000000F0E5 +:107BB00000000000000000000000000000000000C5 +:107BC00000000000000000000000000000000000B5 +:107BD0000000000000000000AA001E14A0F0A0F0A9 +:107BE00000000000000000000FFF0FFFAA00EF459B +:107BF0000F0F0F0FBF150000000000000000000075 :107C00000000000000000000000000000000000074 -:107C10000000000000000000000000000000000064 -:107C2000000000000000C0C0C0C00FFF0FAA0F007E -:107C3000FFFFF505FC0CFFEB5541000000000000C4 -:107C40005000000000009096F0FF03F3AAAA000085 -:107C5000A0A0F0F0F0F0000000003C3C0F0FC0C00E -:107C600000004488000000440088080220800000D2 -:107C70004488AABAAAFBFF4FFFFF000000000000E3 +:107C1000000000000000000000000F0FFFFF000048 +:107C20000000000000000000000000000000000054 +:107C3000FFFF0000C3FF0000000000000000000084 +:107C40000000000000000000000000000000000034 +:107C50000000FFFF4F410000000000001E14AAFFBB +:107C6000AAFF0000000000000000A3A3A3A3AA0035 +:107C7000AE040D050C00BA1000000000000000006A :107C800000000000000000000000000000000000F4 -:107C900000000000000000000000000000000000E4 -:107CA0000000000000000000F050A000FFFFFFAA4D -:107CB0005F55FFFFF505FC0CBEAA14000061000D26 -:107CC000050D00A100610A0F050D0000006100050F -:107CD000000D000000003000000000000000300037 -:107CE0000000000005029A08000010000061000773 -:107CF000000D080000000008000000000000000067 -:107D00000000000000000000000000000000000073 -:107D100000000000000000610006000D000000618E -:107D20000006000D000000610006000D000000616B -:107D30004006000D000100610007000D0000BAB010 -:107D40001A1028FCEBFC00000000003C3C00D3D3E0 -:107D500013130000000000000000000000000000FD -:107D60000000000000000000000000000000000013 -:107D70000000000000000000000000000000000003 -:107D800000000000000000000000000000000000F3 -:107D900000000000000000000000000000AA03AB8B -:107DA000000000000F00000000000000555041409E -:107DB00000000000BE3FBE3F00000000FFFFFFFFCD -:107DC000BAB01A1028C0EBC000000000003C3C0014 -:107DD000D0D01010000000000000000000000000E3 -:107DE0000000000000000000000000000000000093 -:107DF0000000000000000000000000000000000083 -:107E00000000000000000000000000000000000072 -:107E1000000000000000000000000000000000AAB8 -:107E200000AA00000000FFF0F0F000000000FFF0EA -:107E3000C3C0000000003C3FFF3F000000000C4DAD -:107E40008ECF3C0C000C000000000400000000007D -:107E500000003C143C140000000000000000000082 -:107E60000000000000000000000000000000000012 -:107E70000000000000000000000000000000000002 -:107E800000000000000000000000000000000000F2 -:107E900000000000000000000000000005050505CE -:107EA00000000000000000000000000000000000D2 -:107EB000FFFFA030000000000030000000000000C4 -:107EC000000000003C0C000C00000000000000005E -:107ED000000000000014001400000000000000007A -:107EE0000000000000000000000000000000000092 -:107EF0000000000000000000000000000000000082 -:107F00000000000000000000000000000000000071 -:107F10000000000000000000000000000000C70595 -:107F20000505000000000000000000000000000047 -:107F30000000FFFFA0300000000000300000000043 -:107F40000000000000000000000088008800000021 -:107F50000000200320022000200020000004200058 -:107F600004008808040800000000201020004000E1 -:107F7000000020042004000004000400021020007F -:107F8000C0000008048800030000000088091004F5 -:107F90002000000020022000C0000400200020007B -:107FA00088002000000000080004040020002010C9 -:107FB0008811040084042002C00004001000200383 -:107FC00020002000C008041005820000000000000E -:107FD000000010000400410004C004000000000084 -:107FE0000000090000010001100000000500000071 -:107FF00004000000000200A0000000A0000000003B -:108000000000040000010003000000000002040062 -:1080100000001000000010000000400000000002FE -:108020000000040000C00000000141000800000042 -:108030000000100009900002000000004000000055 -:10804000100010000900000000C000410000000006 -:108050000209000000002010000082400000000023 -:10806000021000000040000000000041004000003D -:10807000020000080200104090008805880884086B -:1080800000050010000800000000000000040005CA -:1080900010050200020000001004000004000000AF -:1080A000000000050000A010000882C00000A00031 -:1080B000000000040005000302100205000000108B -:1080C00082000400000000100008820841080040FF -:1080D0000088000420400008000800044008000850 -:1080E0000084008400400000040200080010000822 -:1080F00004A0008400040910008204000010008421 -:108100000010040800840000000000080000008443 -:10811000008200820000000809000084040000843E -:108120000008000800080010000405090404040801 -:108130000008040800080008008400080300008804 -:108140000008000809880084000809850509000066 -:108150009008C0090008A000C000A004A0000021F1 -:1081600000008208A0088205042100002003000806 -:1081700000410003004000000005C00000000003B3 -:108180001020000090020008824000000000000063 -:108190000008000500080008000320000008004057 -:1081A000000300034003400202210021002140009F -:1081B00000214021000000212021040300210005AE -:1081C00000100421000010210005882120058840AE -:1081D0002184008200A0000000000890110000101F -:1081E000008210A0000008000008000021C0C000AC -:1081F00021A000000008000000A000000010030003 -:108200000008000000A00040008800841008000062 -:10821000000000000300008200A0001009000040E0 -:108220000300000808000300000000000000000038 -:1082300080080300200000000000408409000400C2 -:1082400000000004208808404000400000000002B8 -:1082500009888205041104000800820020008200C1 -:10826000000040002000C0000020000008000000C6 -:1082700040008200822082090000004004000009C2 -:1082800000110011080090040000A000C0200800A8 -:108290000810000000000004100000028800000028 -:1082A00082400000A000C000C0000000A000040048 -:1082B0008200000000108200820040000000C00028 -:1082C000044110001000080990214000A000400067 -:1082D000040082A10090041000A02100009000C0C2 -:1082E0000008004000000082000000000090000034 -:1082F0000000000000004120001000000000008489 -:10830000410000880000100000000000000008008C -:10831000040000000000000003A0000000000000B6 -:1083200000A00000000000040000000000000000A9 -:108330000000000000A00000000000000484038290 -:108340000000008400840000028800000000008219 -:1083500000080002000408000000084000000008B7 -:1083600000000000C0000000000000050008A04060 -:10837000000008000002000000000041C0000000F2 -:10838000A021C00000000000000008000000200044 -:1083900000030000012100000010000000000000A8 -:1083A00000008208A000A0000000000000020010F1 -:1083B000000800080000082000000000C0000000C5 -:1083C00008001000820000000003C0000000001040 -:1083D000000004030008010300000800000841A099 -:1083E000218200000000210009000902210003048D -:1083F00000000000000008C1000000A00000001004 -:10840000000804000008000000A00908000802A0FD -:108410000008000000A02000000000000000000094 -:10842000000000000000000040000000000000000C -:1084300000000000000000000940000009000504E1 -:1084400010040000000800C00510000020C011004A -:10845000004011880000098840008821A00990048C -:1084600040004008A00090000400821000000410AA -:1084700020004002000000100000000520009000D5 -:1084800000000011820000002000080000400009E8 -:108490008400080000000000000000000000000848 -:1084A0000800080082000005080000000400002108 -:1084B00000030400080000000000000500000000A8 -:1084C00000000041100000000800004108210021C8 -:1084D0000005C00840000000004100110200080033 -:1084E000000000000000000000000000000000008C -:1084F000008800C0110000002000200000000000E3 -:108500000000000000901100008400000000000046 -:1085100003000200040000840000000200000000CC -:10852000000000000000000000000000000020002B -:108530000000000000000000020000000000000039 -:108540000000000000000000000800C00000000063 -:1085500002000090008200000000000000100000F7 -:1085600000000000000100001000000101020100F5 -:1085700000000020101000000000000100000100B9 -:1085800020000000000101000000000000C0000108 -:10859000000000208804000000000001000000002E -:1085A0000000000000000000000000000000018842 -:1085B000000088000084C0820000C00000010000AC -:1085C000000000000000000000008800000001889A -:1085D000000001000020C0080000000000010000B1 -:1085E000000000000000000800000000000304007C -:1085F0000205210000000000000000000041000012 -:10860000040080000000000302000000004104009C -:108610004010210000000080000000000041000028 -:108620000000050000000000000300000000000939 -:10863000100008030400008080800000000000415A -:10864000000005000000000000090000000000100C -:1086500010000803020000008080000000000041BC -:108660000000000003000000000000000200000005 -:108670000800A000408000001000800000000010F2 -:108680008020000003000000000000004000000007 -:1086900008002000408000002000000000000000D2 -:1086A00080410000000021000000000000000900DF -:1086B0000000100090002100000009008000000070 -:1086C00000408005000021000000000000000900BB -:1086D00000000300100021000000040080000000E2 -:1086E00000008020000000000000000000000000EA -:1086F00000000100080085040000000040000000A8 -:108700000001C001000000000000000000000100A6 -:108710000000010082004104000001002000000070 -:108720000000C00100000000000000000000000088 -:108730000000000000000500908200000090400052 -:1087400000000000C0000000000000000000000069 -:1087500000000000010083009020000001000200E2 -:1087600000000000C0000000000000000000000049 -:108770000000000188000040000000000000000030 -:1087800000000001000000000000000000000000E8 -:1087900000000000020100020000000000000000D4 -:1087A00000000001000000000000000000000000C8 -:1087B0000000000000011000001000000100010096 -:1087C00000000000000100000000000000000000A8 -:1087D0000000000000010200000400000000000092 -:1087E0000000000000010000000000000000000088 -:1087F0000000000000051011000000001000000043 -:108800000000000000410000000000000000000027 -:10881000000000000005800300800000110000003F -:108820000000000000410000000000000000000007 -:10883000000000000000000880100000000005009B -:1088400008000000000000410000000000000000DF -:108850000000000000000008000900800000110076 -:1088600000000000000000410000000380000085BF -:10887000000000090000C10000000041800000026B -:10888000000000000000000040850003800000C1DF -:10889000000000208020A000000000410000000235 -:1088A000000000000008000003C000000005800078 -:1088B00000C10000000200004100000000C1801063 -:1088C00000050000000000200000034100058000BA -:1088D00000C1000000028000C10000000041001043 -:1088E000000500000000000000000503000020005B -:1088F0000004000000000200080000000041020027 -:108900000001000000000000000001C00000200085 -:10891000004000000001080141000000002140006B -:108920000001000000000000000001050000000040 -:1089300020000040000000000200200000000003B2 -:10894000020000000000000000010000018900009A -:10895000200000400000000010000800000000415E -:1089600040000000000000000000000000100000B7 -:108970000000000000000000000000000000811264 -:1089800000E007004800000000000000000A0000AE -:108990000000000000000000000000000000811244 -:1089A00000E007004800000000000000000A00008E +:107C90000000000000000000000000000F0FFFFFC8 +:107CA00000000000000200000000000000000000D2 +:107CB00000003E3EC3FFC3FF040000000061000758 +:107CC000000D000000610006C009000005610A0DFA +:107CD000050100A000610007000D0000A061000E7A +:107CE000009900A10061000EC00100A005610A0911 +:107CF000050100A105610A0E050D00A0000000614C +:107D000000040009000000610006000D00000000F2 +:107D10000000000000000000000000000000006102 +:107D20003006000D000000610006C0090000006080 +:107D30000007C09D0000A5610A0E051D00A00000FF +:107D400000000000000000000000303F303FFDC197 +:107D50003D013CF0AAAA0000000000000000B0BEF7 +:107D600000003000100028280A0A00CFCFCFFF0003 +:107D7000FCFC0C0FFCFF000000000000EFE0000026 +:107D80004100C3C3FFA0000000000000000000008D +:107D900000000000000000000000000000000000E3 +:107DA0000000000000000000000000003000FFFFA5 +:107DB000000000000000BAAA0000000F0000F3510C +:107DC000000000000000000000000000303F3030E4 +:107DD000FDC13D013CF0AAAA000000000000000027 +:107DE000B0BEB0BE0000000028280A0A00CF00CFB5 +:107DF000FF000C0C0C00FCF00000000000002F2025 +:107E000000000000C3C3FF00000000000000CF7DA1 +:107E1000CF7D000000000000000000000000000016 +:107E20000000000000000000000000000000000052 +:107E3000CFFF00000000000010000300000FF3510E +:107E4000F3510000000000000000000000000000EE +:107E50000000FFFFFFFFAAFFBEBE00000000000001 +:107E6000000000000000F300AAAA0000000000CFFC +:107E7000CFCFFF5C005C0CFC0FFF00000000C5C50D +:107E8000C5C50000A8A800A80000435F00000000CE +:107E900000000000000000000000000000000000E2 +:107EA00000000000000000000B03EBC30000000016 +:107EB00000005555000000000B1F00F000280028AE +:107EC00000000000000000000000000000000000B2 +:107ED000000000003D3C3F3C005514140000000031 +:107EE00000000000F0FFB0BE000000000000000035 +:107EF00000CF00CFFF5C005C00F003F30000000047 +:107F0000FFF00F000000FCFC00FC435F435F00003B +:107F10000000000000000000000000000000000061 +:107F2000000000000000000000000F07FFD7000065 +:107F300000003000000000000000E0F400003C3CC5 +:107F400000300000400000000000000002000000BF +:107F5000000000000000400000000000840000005D +:107F600000000000010000000000000020000000F0 +:107F700000000000000020000000000020000000C1 +:107F800000000000010900030000000000002000C4 +:107F90000000A00000000000200000000000000021 +:107FA000000000104000200000000400000000005D +:107FB000400000000000C00020000000001000048D +:107FC000000000008400208000000000000000008D +:107FD000000000000000008200000000000000001F +:107FE0000000000000002000000000000000000071 +:107FF0000000000000000000400000000000000041 +:108000000000000000002000000000000000000050 +:1080100000000000000010024002400000001000BC +:108020000000000040001000800040000000100030 +:108030001000100040004040004010004000004090 +:10804000000040000000108200040000000000005A +:108050000000000000000009000000000000000017 +:108060000000000000000000000000000000000010 +:1080700000000000A000000000000041000000001F +:1080800000000000000000090000000000000000E7 +:1080900000000000004000000000000000000000A0 +:1080A00010000000000000000000000000000000C0 +:1080B00000008200000090000000000000000000AE +:1080C00000090400020990400000000000000000C8 +:1080D0000008000000000008000000000008000088 +:1080E0000000000000080008000800080000000868 +:1080F000000800000000008400000088000800085C +:108100000000000800080008000800080000000047 +:10811000008400080010000000840084008400082F +:1081200000080000008400840084000800080000AB +:10813000000800080000000000000000000800081F +:1081400000840008000000080084000800400021AE +:10815000000800210005000000210000002100218E +:108160000008202184000000902100000821002147 +:1081700000080021000000000008000300080021A2 +:1081800000000021000000000003000000110000BA +:10819000002100210021002100000021000000003A +:1081A000002100030021000900000005002100213A +:1081B00000210005002100080041004100030009E2 +:1081C0000021000000210000000000080000000065 +:1081D00000000000000000001000050011000084F5 +:1081E00000C00000200003002000200000A000903C +:1081F000000000000000000800000084008220A0B1 +:1082000000C0000000020000000000000084000028 +:1082100000000000000000400010000440000000CA +:10822000000000000000000000000000000000004E +:108230000000000000000000000000080500050824 +:1082400000004100000002000300000009080000D7 +:1082500000C0000000000000080000000000004115 +:108260000000000000000000000000000000000905 +:1082700000000005000000100000000200000000E7 +:1082800000000000001000000009000000000000D5 +:1082900000000000000500050009000000000000CB +:1082A0000005000000000000000000400000000089 +:1082B0000000000000400000000008400010000026 +:1082C0000005000000000011000000050000A000F3 +:1082D00000090204008400000000008420C009C0DE +:1082E00000C0000000000090008800900000000026 +:1082F000000000C0000400000000000040040090E6 +:1083000000000000001011000000000000000090BC +:10831000008810000000000400840000000000003D +:1083200000000000004000000000000000200000ED +:1083300000080010001000000000000000C00082D3 +:1083400002A0000000000000000000000900110071 +:1083500000A0000000000000002100080000000054 +:10836000000200000000000000009000000000007B +:1083700000080000000000000000000000000010E5 +:108380000000200800000000004000000000000085 +:1083900000080000000000000003000000000000D2 +:1083A00000000000000000080000000000000000C5 +:1083B000000800210000000800000000000000008C +:1083C0000000080000000000000300410000001051 +:1083D0000000000000000008000000000000000095 +:1083E0000000000000000000201021C000C021009B +:1083F000000000000002000009900082001020C070 +:10840000050000000000000020880000009020000F +:1084100011000088090005900000000000080020FD +:108420000510110000020000000000001000000014 +:1084300008000000000000000000000000000088AC +:1084400000000590090800880000050000000000F9 +:108450002100000009000800008200000000000068 +:1084600000000004880000008408001100000009DA +:1084700000080008002100080008000000000000BB +:10848000000300410000000000000000000900009F +:10849000000800080021000800080000000000009B +:1084A00000020000000400040000000000000000C2 +:1084B0000008000000210000000800000000000586 +:1084C000000000000000000300008400000088009D +:1084D00000080000000800000008004000840000C0 +:1084E0000082000010842090008400001110111000 +:1084F00011000090000041000000000020000082F8 +:108500000000200005000000110000001100009094 +:108510001102000409020002009020000000200067 +:1085200000000000201020000000000000002000DB +:10853000000000000000000000000000000000003B +:10854000000000000000000000000000000000101B +:1085500020000910000000000000020000000000E0 +:1085600020000000000000000000000000000000EB +:1085700000000002000000000000000000000000F9 +:1085800000000000000000000000000000000000EB +:1085900000000002000000000000000000000000D9 +:1085A00000000000000000000000000000000000CB +:1085B00000000000000200000000000000000000B9 +:1085C00000000000000000000000000000000000AB +:1085D0000000000000020000000004000000000095 +:1085E00011008000000000000000000000000000FA +:1085F0000009090000000000000000000000000069 +:10860000000000000000000000000000000000006A +:108610000009090000000000000000000000000048 +:10862000000000000000000000000000000000004A +:10863000000000090200000000000000000000002F +:10864000000000000000000000000000000000002A +:1086500000000041110000000000000000000000C8 +:1086600000000000210000000000000000000000E9 +:108670000000410003000082000000000000000034 +:1086800000090000100000000000000000000000D1 +:108690000000410003000082000000000000000014 +:1086A00000040000000011000000000000000000B5 +:1086B00000000000410003000091000000000000E5 +:1086C0000000002000000400000000000000000086 +:1086D000000000000900030000C0000000000000CE +:1086E0000000000300000000000000000000000087 +:1086F00000000000020003100008C088880000008D +:108700000000000000000000000000000000000069 +:1087100000000000880003100008C088020000006C +:108720000000000000000000000000000000000049 +:10873000000000000000020003100008C08888004C +:108740000000000000010000000000000000000028 +:10875000000000000000880003040009C0888800B1 +:1087600000000000000100000000C0000000000048 +:108770000000000000000088000000000000000071 +:1087800000000000000000000000000000000000E9 +:1087900000000000000000020000000000000000D7 +:1087A00000000000000000000000000000000000C9 +:1087B0000000000000000000008800000000000031 +:1087C00000000000000000000000000000000000A9 +:1087D0000000000000000000008800000000000011 +:1087E0000000000000000000000000008000000009 +:1087F0000000000000000000000000000000090070 +:108800000000000000000000000000000000000068 +:1088100000000000000000000080000000000900CF +:108820000000000000000000000000000000000048 +:108830000000000000000000000000000000000038 +:108840000200000000000000000000000000000026 +:108850000000000000000000000000000000000018 +:10886000090000000000000000000000800000C1BE +:108870000000000000000000008000C18000001126 +:10888000000000000000000000000010800000C197 +:108890000000000000000000008000C18000001106 +:1088A0000000000000000000000000000011800037 +:1088B00000C10000000000000000000000918000E6 +:1088C0000011000000000000000000000004800013 +:1088D00000C1000000000000000000000041800016 +:1088E0000004000000000000000000000000400044 +:1088F00000C10000000000000000000800858200A8 +:108900000000000000000000000000000000200047 +:108910000040000000000000000000080085820008 +:108920000000000000000000000000000000000047 +:10893000200000400000000000000000000000C017 +:108940002000000000000000000000000000000007 +:1089500020000040000000000000000000000011A6 +:108960008200000100000000000000000000000084 +:108970000000000000110000000000000000810065 +:1089800000E00000480000000000000000000000BF +:108990000000000000000000000000000000810056 +:1089A00000E000004800000000000000000000009F :1089B00000000000000000000000000000000000B7 -:1089C000811200E007004881000000000000001153 +:1089C000410000E000008400000000000000000002 :1089D0000000000000000000000000000000000097 -:1089E000811200E007004881000000000000000044 +:1089E000810000E0000048000000000000000000DE :1089F0000000000000000000000000000000000077 :108A00000000000000000000000000000000000066 :108A10000000000000000000000000000000000056 @@ -141520,454 +141520,454 @@ :108AC00000000000000000000000000000000000A6 :108AD0000000000000000000000000000000000096 :108AE0000000000000000000000000000000000086 -:108AF00000000000257B00000000000000000000D6 +:108AF00000000000747B0000000000000000000087 :108B00000000000000000000000000000000000065 -:108B10000000DEA4257B0000000000000000000033 +:108B10000000DE2E747B000000000000000000005A :108B20000000000000000000000000000000000045 -:108B30000000DEA40000257B000000000000000013 +:108B30000000DE2E0000747B00000000000000003A :108B40000000000000000000000000000000000025 -:108B500000000000DEA4257B0000000000000000F3 +:108B500000000000DE2E747B00000000000000001A :108B60000000000000000000000000000000000005 -:108B700000000000DEA461260340000000000000A9 +:108B700000000000DE2E61560340000000000000EF :108B80000230A0000000000000000C4000000000C7 -:108B9000000002C06486612603400000000000005F +:108B9000000002C06A866156034000000000000029 :108BA0000230A0000000000000000C4000000000A7 -:108BB000000002C06486000061260340000000003F +:108BB000000002C06A860000615603400000000009 :108BC00000000230A0000000000000000C40000087 -:108BD0000000000002C0648661260340000000001F +:108BD0000000000002C06A866156034000000000E9 :108BE00000000230A0000000000000000C40000067 -:108BF0000000000002C064860400040005000000BC -:108C000020108408040000802000400000002000A4 -:108C1000200000002000820204000000200002006A -:108C200020044000200404042000200088002010BC -:108C300088004000200020000003200084098410E8 -:108C400004002010840020002000200020000400E8 -:108C50002008080820002000080504000200200861 -:108C6000040940050403080002000480081088007D -:108C70000209209040800404200009020002200024 -:108C800040004000200000000002000080A0000022 -:108C900000000000409004000000000000000400FC -:108CA00004000000000004000002000000040000B6 -:108CB0000000200000000000000000000000000094 -:108CC000000000000000004004000000400000021E -:108CD00000000400A10040000002C100C0002040CC -:108CE0004000000009020000A00020000910C000A0 -:108CF0000000000000200020404021820040084089 -:108D00000000911082000800000040100000008068 -:108D10000000000008008200080900100000900018 -:108D200000100000824084108840021082008200FF -:108D3000841082058200000000000810000002007C -:108D40000000000000000040820000000010000051 -:108D50000000A000000400030000820800090000D9 -:108D6000000300099040A041080400000203000035 -:108D70000000001002000000040008400440000849 -:108D800000080008408400080088201085080800BA -:108D90000002008200000000000800080485008432 -:108DA0000410000800080310204003080008000811 -:108DB00000080008040000000040038400090000CF -:108DC0000008000800082008000804080210020833 -:108DD00000080008031000000010000000840008D4 -:108DE000008800100088008400088008000800083F -:108DF00000080008020900840008A0100082890809 -:108E00004021000200412005000500000008080381 -:108E100000050008080000401005000000000000E8 -:108E20001008080000008400000800000003002172 -:108E300000052000200020400000000082000021EA -:108E4000000004000000002100100041000000218B -:108E500000400040000000210000000084000009E4 -:108E60000200400000000021000001050021C005B3 -:108E70000021400020000805100888A104212108D5 -:108E8000892100000008000884002104040041003A -:108E9000000000100000000400100000000200822A -:108EA0000000000000000000000021000800030096 -:108EB00005004100830080A0800000000000000049 -:108EC000004000000000000000000200040000401C -:108ED000000800000020000003A000C00990000866 -:108EE0000488000200000000000010000884080050 -:108EF00021000082000000C0C100400041040008C1 -:108F00008400048800000004020004000400000043 -:108F1000C000000200040400000000048205A0411B -:108F20008209000000048200C00000418209001193 -:108F30001003000000000009000000008400000091 -:108F40000011000000000000000008000000000008 -:108F500008002000000000000000080000100800C9 -:108F600000000000000008200000C0000010080001 -:108F7000002100114011C0100000040300200085F2 -:108F800004210904040511A000A000000300000052 -:108F900000000000200100000004000000000004A8 -:108FA000110011A0114000002000000000A00000EE -:108FB00004200000009041000000000000400090EC -:108FC000000004080000000000A0000000000000F5 -:108FD0000000000000000000000000000000000091 -:108FE000008205820310200021000008000000001C -:108FF0000082000000000000119100040800000041 -:109000004120008404C00010000000000000080897 -:1090100000000003000082000008000000080000BB -:1090200000210005004008000000000800000000CA -:10903000000082000000000001000010000000009D -:1090400000210000000000000000000000000000FF -:109050000000000000000000000000000000000010 -:10906000000000800000002108000108000000103E -:109070000840000084000000900000000800000983 -:109080000002820084C12000208200020010000043 -:10909000004000A00200002000401000000000007E -:1090A000030000002100000000000000000000009C -:1090B00000000000000000000010208800000000F8 -:1090C0002120000000C0000000000000000000009F -:1090D000000000000310000002000040080800002B -:1090E000080808000002000005000000040000005D -:1090F0000000000004A0000002A000020890000090 -:1091000000880800050409048400800404000000AD -:1091100000030004000000040000004000210800DB -:1091200000000000000400000000000808400004E7 -:10913000000000000000000000000200000000002D -:1091400000000240000800000000000000000000D5 -:10915000000000000000000000000000000000000F -:10916000000000000000900000000000000000204F -:1091700000008205000000000000881100000010BF -:10918000000000030000000020212008000000A0D3 -:10919000000000001101000000400000000002007B -:1091A000020000000440000000C0000000000004B5 -:1091B00000000000000021000408000000840000FE -:1091C00000000010000000000002000021880000E4 -:1091D000000000000000004000000000000020002F -:1091E00000000200200011000088000000000000C4 -:1091F0000000000000000004000400C000000004A3 -:1092000000C10000000000042082000000002000D7 -:109210000100040020000000000000000000000029 -:10922000000000010001000000000000000000003C -:10923000000000000000000000000000000000002E -:10924000000000000000000000008200000000009C -:10925000000000000000000000000000000000000E -:1092600000000000000000000000100000000001ED -:1092700008010000000000000000C0880000008815 -:10928000000800A000080090009003C00100000149 -:109290000000200009000500000000002000000080 -:1092A0000000000910030008000900000000000091 -:1092B00000000000000000000000000000000000AE -:1092C000000000000000110000000000000000008D -:1092D000000000000000000000000000000000008E -:1092E00000000000000000000000000080090020D5 -:1092F00000040004000000000000000080000000E6 -:109300000000000000800080000000009108102193 -:1093100000040009030020001041030000000000C9 -:1093200000000000100004001000209180000000E8 -:109330000004000000000000000000000000000029 -:10934000000000000040000000200000800000003D -:109350000004800000000000000000000000000089 +:108BF0000000000002C06A860000000000000000C3 +:108C0000000000000000880000002000010040007B +:108C100020000005200020004000010000000800A6 +:108C20000000000000000000000020000000000420 +:108C30002004400000080000000340050000000080 +:108C4000040004000000000000800000000000009C +:108C5000000000002000000000008800000000006C +:108C600000000008000000000000000000000100FB +:108C70000004000500000400008000000000000067 +:108C8000000000000084000000000000050040001B +:108C90008000000000000000000000000200000052 +:108CA0009000000000000000000000000000000034 +:108CB0000000000080000000000000000000000034 +:108CC00000008000400000000002000209000000D7 +:108CD00040000000400000000000000040000000D4 +:108CE0000000000040000000000000004000000004 +:108CF0004002000100000000000200020000000825 +:108D000000100000000000800000000000000005CE +:108D1000000000030000000000000000010000004F +:108D20000002000000000000000000000000000041 +:108D3000000800100000000000000000000010000B +:108D400000080100000000000000000000000040DA +:108D500000400241004002000000000000000284C8 +:108D60008200000000000000001000100010004110 +:108D7000844110100210000500410009002100008C +:108D80000084000002000000002000000000000835 +:108D900000080004000800080000000000000200B5 +:108DA0000008001100C000000000000000000008E2 +:108DB0000008000000080008008200080000000011 +:108DC0000000081040001100001000080000000022 +:108DD0000008008800400008008200000008000031 +:108DE000081000080200000400000008000000084D +:108DF000000800000000000800000010008400C00F +:108E00000002000000000000000000044005010016 +:108E100000000482000200040005002100000000A0 +:108E2000030004208482000000000008000000000D +:108E3000000000000080200000410002000020002F +:108E4000000020000000400000054000000000403D +:108E5000000000050040000000410040000000004C +:108E6000000000000100010000008210C000C000EE +:108E70000000000000108200C00500000000A000FB +:108E800084050000050000000500000000018000CE +:108E9000400000008004000000830008000800007B +:108EA00000109088800100110000001000000010E8 +:108EB0000000000000080004918800080000000283 +:108EC000080000000000000000000000000000009A +:108ED0000000000000000040000000000002000050 +:108EE0000000000005004000040005000300000031 +:108EF0000000000000000000000000000010000062 +:108F00000000000000000408010001209180010021 +:108F1000010001802000820000A10000000000107C +:108F200000050004084000004140200000009000BF +:108F30000000000004000000C00008000100010063 +:108F400000110000000008210000000000080000DF +:108F50000000000000088200001000000010C000A7 +:108F6000000000400000080800004000080408005D +:108F700000000008000800040009000000110000C3 +:108F800000090004010400848008408240110404A8 +:108F90000484049004048088090420040000000470 +:108FA00000820084000080010000C089800000A0D1 +:108FB00000A0000400000390000003000300200054 +:108FC000200211002000000009040000000021849C +:108FD00000000004410000000020000020100000FC +:108FE00020A00082100000080000000080000000A7 +:108FF00000000000000000040088008200A00000C3 +:1090000003080800008520102041202000210021B5 +:109010000020200300040040000320020082002002 +:10902000C000002100080003001000000002010041 +:109030000041000000000840008000000000200007 +:10904000000000000004080000000000000500000F +:10905000080000090003000500000005080000806A +:10906000900008000000000000008441040004009B +:109070008400C000000000000084820000000000A6 +:109080008200000400000000000000000001000059 +:1090900000000001800000110000000880080004AA +:1090A0000009000000200000000020000000000176 +:1090B00020000008000000000000000400880900F3 +:1090C00000080000210000A1800000000020000036 +:1090D000000020000000000000000000000800C0A8 +:1090E00000100008000000000000000000008000E8 +:1090F000800000024108000000000021000800C0BC +:109100000000000810010000000000000000002125 +:109110000508000820210003A000000901820111B8 +:10912000019101030041000000040004011000004F +:10913000000900000000000000002009408021001C +:109140000100008000802004090021000000004090 +:1091500004050009000000000004000000090000F0 +:109160000000004100000004000000000000820038 +:1091700000000000000000040004000000200000C7 +:1091800000001000010000080084000040080000FA +:10919000000084C000000000000000000000042067 +:1091A0000400042004000000000000000000020190 +:1091B0000000110000000000000000000000090491 +:1091C000A0042000200421040000208820000000CA +:1091D0002090A104200020000000200400000008CE +:1091E0000484000000041100000000084100000099 +:1091F0002004000000000200000000000000200524 +:109200000000008400002000000020040004000092 +:109210008808A00084100820030211028200008840 +:10922000019002C08584881000000000000000004A +:1092300088A00040002002A0000000000000000004 +:109240000000010190010000110000004100A00099 +:109250000000C0A00002840810A0000000008400EC +:1092600000000000000000000000000000000000FE +:109270000000004090088400A02000000000400092 +:10928000000001000100400000000000000000009C +:10929000000000808200800080001180830089002F +:1092A000000020002100C00000800000000000003D +:1092B000000000800080000080000000000000002E +:1092C0000000004020084040000090000900C0005D +:1092D0000000000000801000800080800000050079 +:1092E000000000000000000000000000000000007E +:1092F0000000000000009180800080000300030057 +:10930000800000001000400080000000000000000D +:1093100004000000900041000240028889A0212141 +:109320000804119105892100100810830000000035 +:1093300000000000210084082004C100000000009B +:1093400000000000400000000400050809020400BD +:10935000892084210000C000410208830800000029 :1093600000000000000000000000000000000000FD -:109370000008800000000000000000000000000065 -:109380000041001000000000800280050000800005 -:10939000410004110910000000000000010000005D -:1093A00000000000000001200000010000A04000BB -:1093B000A000A000A00000000000000000000000CD -:1093C000000000000000000100000001000040005B -:1093D00020002001820000000000000000000000CA +:109370000000000000002000210003000383000023 +:109380000000000000800200020000002000000930 +:109390000000000900000984100004010088021187 +:1093A0000300110504890090A100908884890000C1 +:1093B0000000000000008500110188A1C10000002C +:1093C000000000000000004000000100000110C08B +:1093D0000400A0011101000088000000091085842C :1093E000000000000000000000000000000000007D -:1093F00008000200A00000000000000000000000C3 -:10940000000000000004000082004000A0100400E2 -:10941000080000000101020100000000A00000009F -:109420000000000000000000000100010101000137 -:10943000000000000000000000000000000000002C -:1094400000000000000000000000400000000100DB -:10945000000000000000000000000000000000000C -:1094600000000000000000000000000000000000FC -:109470000000009000200208001000000000000022 -:109480000000009000A000200088001000081010CC -:10949000A00020900001004109000004004180412B -:1094A00005100000004000000000004011040521EC -:1094B000114000000000000000000000000000005B -:1094C000000000000000000000000000000000009C -:1094D0000400000000000000000000000000000088 -:1094E000000000000000000000000000000000007C -:1094F0000000000000004080408000800500000067 -:1095000000000000000000800000000000800080DB -:1095100080008000000000030084110900020000A8 -:1095200000000040000000000000000021000300D7 -:1095300010002008000000000000000000000000F3 -:10954000000000000000000000000000000000001B -:10955000000000000000000000000000000000000B -:1095600000000000000000000000000000000000FB -:10957000000000000000801080110080000000103A -:1095800000210000000000008000000000008000BA -:10959000008800800000800911020480090000009A -:1095A000000000000000000000000000000001209A -:1095B000000001000001000000080004000000009D -:1095C000000000000000000000000000000000009B -:1095D00000000000000000000008008800000000FB -:1095E000000000000000000000000000000000007B -:1095F00000000000000000001000400220828800EF -:1096000000000000000000008400A00084000200B0 -:10961000400084418482C000080801012108100034 -:10962000000000E00000000000000000000000005A -:10963000000000000000000000000000000000002A -:10964000000000000000000000000000000000001A -:10965000000000E00000000000000000000000002A -:1096600000000000000000000000000000000000FA +:1093F00000000000000000000004010001000088DF +:109400000000000000000002000001000000000059 +:109410000000000000000000100800000010C00361 +:10942000021002850090030800C184C00084A010CF +:10943000000000000000000040840040A0A0C0C068 +:10944000000000000000000000000000000000001C +:1094500000040403008501850000C0910010100580 +:109460008803000000000000000000000000000071 +:109470000000000000000000000010000009900142 +:1094800002020000000000000001000000010000D6 +:1094900000010000A0000000000100910011000286 +:1094A0000288000900C00011C091000200100009EC +:1094B000048900000000000000000000000080009F +:1094C00089800000000000000000004004214104E9 +:1094D0000000000400C0002140080000800800894E +:1094E00000850520000200000008000400000000C4 +:1094F0000000000000000000000000008040008329 +:10950000801183A00005000300000011002000105E +:1095100000100011000200030003100241A0408966 +:109520000880108241092111118011044102210299 +:10953000050020100000000000000000008400C1B1 +:109540000000000800000000000000000202090006 +:10955000200000084080080010001011000000806A +:1095600000100080800200000000000000000000E9 +:109570000000000000000000000000000000C189A1 +:109580000400A000400900000000000000000009E5 +:10959000000000000011000000000000000001C0F9 +:1095A00001200184001103889000110201008583CD +:1095B000C0C184844100000000000000000084C09D +:1095C0000410C0908401000000000000000001832E +:1095D00000000100000100C001C000900001000077 +:1095E000C040401140821001000000000000000057 +:1095F000000000000000000000000000000000006B +:109600001140020002000200000000000000000003 +:109610000010000000000001000000000000000039 +:109620000000000007008200000000E007000000CA +:10963000000000E007000000000000000000000043 +:10964000810000E0070041820000000000000000EF +:10965000000000E000000000000000E00000410009 +:10966000000000000000070088000000000000006B :1096700000000000000000000000000000000000EA -:1096800000000000000007000000000000000000D3 -:1096900042000000000000000000000000E00700A1 -:1096A00000000000000000000000000000000000BA -:1096B00000000000000000000000000000000000AA -:1096C000000000000000000000000000000000009A -:1096D000000000000000000000000000000000008A -:1096E000000000000000000000000000000000007A -:1096F0000000000000000000000000003CF0FFF04F -:109700007D000D0000000000000000000EFE0000C3 -:10971000D7D782D23AFF00000CFC0CFC3C3CF0F0A6 -:109720003C553C5500000000000000000000000017 -:109730000000000000000000000000000000000029 -:109740000000000000000000000000000000000019 +:1096800000000081000007000000000000E007006B +:109690000000810000E000000000000000E0000089 +:1096A00000000000000028EBEBEBFFF0AAAA50142A +:1096B000FABEA03CAF3C0C0FFCFF00000000000015 +:1096C000000000000000AA0000540000000000009C +:1096D0000000000000000000000000000000C3FFC8 +:1096E000E8E80000C1C100C17D0D000000000000DD +:1096F000000000000000000000000000000000006A +:109700000000000000F00CFC0F0FFFFF0000000045 +:109710000000000000000000000000000000000049 +:10972000000000000000000028EB282800F0AAAA92 +:109730005014FABEA03CAF3C0C00FCF0000000004E +:109740000000000002000000AA000040000000002D :109750000000000000000000000000000000000009 -:1097600000000000000000000000000000000000F9 -:1097700000000000000000000000000000003CF0BD -:1097800000F07D7D0D0D000000000000000004F4DD -:109790000000D7D782D20AFF00000CFC0CFC3C3C36 -:1097A000F0F03C553C5500000000000000000000B7 -:1097B00000000000000000000000000000000000A9 -:1097C0000000FF10FF00000000000000000000008B +:10976000003CE8E80000F5F500F57D0D7D0D0000FA +:1097700000000000000000000000000000000000E9 +:1097800000000000000000F00CFC000000000000E1 +:1097900000000000000000000000000000000000C9 +:1097A0000000000000000F0F3C3CFDC1FDC1FF00A8 +:1097B000FF00FFCFF0C03C5F3C50AF05AF0500009D +:1097C0000000000000003C3C5F5F0F031414000029 :1097D0000000000000000000000000000000000089 -:1097E0000000FF10FF00000000000000000000006B +:1097E00000005454550000003C3C3C3C0000D7C3F2 :1097F0000000000000000000000000000000000069 -:10980000000000000DFF0DFF000000000000000040 -:109810000F0FC3C300000000AFBEAAAA0000B0BE75 -:10982000AAAAFFFFC3C30000000000000000000060 -:109830000000000000000000000000000000000028 -:1098400000000000101000000000000000000000F8 +:109800000000000000000000FF55BE140000000032 +:109810000000000000000000000000000000000048 +:1098200000000000000000000F0F55553D013D01F4 +:109830003C3C55553F0F30003C5F3C50AFAF0505F9 +:1098400000000000000000003C3C000A0C00141462 :109850000000000000000000000000000000000008 -:1098600000000000101000000000000000000000D8 -:1098700000000000000000000000000000000000E8 -:1098800000000000000008FF08FF000000000000CA -:1098900000000F0FC3C300000000AFBEAAAAB0BEF5 -:1098A000B0BE00005555FFFF3C3C00610007000DB5 -:1098B000000000610006000D000000610006000DC0 -:1098C0000000000000000000000000000000000098 -:1098D0000000000000000000000000610007000D13 -:1098E0000000000000000000000000000000000078 -:1098F0000000000000000000000000000000000068 -:109900000000000000610006000D000005000008D6 -:109910000000000000000000000000000000000047 -:1099200000000000006100080001000000000000CD -:10993000AAFF0F3C00000000F0F0F0F05151FBFBDB -:10994000F030C00000000000000000000000000037 -:109950000000000000000000000000000000000007 -:1099600000000000000000000000000000000000F7 -:1099700000000000000000000000000000000000E7 -:1099800000000000000000000000000000000000D7 -:1099900000000000000000000000000000000000C7 -:1099A000000000000000FF3FFF3FF0FFFFFF00004E -:1099B0000000AA000F3C0000000000000000FB5166 -:1099C000FB51FF3FCF0F000000000000000000002F -:1099D0000000000000000000000000000000000087 -:1099E0000000000000000000000000000000000077 -:1099F0000000000000000000000000000000000067 +:10986000000000000404550000003D3CFFFF000024 +:10987000C3C3000000000000000000000000000062 +:1098800000000000000000000000FF55FF55000030 +:1098900000000000000000000000000000000000C8 +:1098A000000000000000000000000061000E000D3C +:1098B00000000061000F000D00000061000F000DAE +:1098C000000000000000000000008061000EC09D4C +:1098D0000005000000000000000000610001000120 +:1098E000000000610007000D00000000006100069C +:1098F000001D000000610006000D000000000000D7 +:1099000000000000000000000000000000610036C0 +:10991000000D000000610006000900A000610006C3 +:10992000C009000000610007000D000000F0553C78 +:10993000AA00AA00AAF0C30000B20000AA00C3F067 +:109940003F0FFAFA000000000000000000000000D5 +:10995000000000000000000000000000FFAA5F0AF5 +:1099600083BF83BFFF00FF008080B0B00000000015 +:10997000000000000000000000007D690000000001 +:109980000000000000000000000000000000F0F0F7 +:109990003CFF083F00FF0000000008080F0F000018 +:1099A00000000080FFFF00000000003CC0C0FFF08E +:1099B000553C00C000FCAAF0C3FF00B2FF00AAFFA4 +:1099C000C3F0FFCFFAFA0000000000000000000022 +:1099D0000000000000000000000000000000550032 +:1099E0005F0A80BC80BC1F00140000F000F0000083 +:1099F000000000000000000800000000FFEB000075 :109A00000000000000000000000000000000000056 -:109A10000000000000000000000000000000000046 -:109A20000000000000000000C000C000F0000000C6 -:109A300000000000FFC500C500000000000000009D -:109A4000FCFC505F3AF03AFF00000000000000000C -:109A50000000000000000000000000000000000006 -:109A600000000000000000000000000000000000F6 -:109A700000000000000000000000000000000000E6 -:109A8000000000000000000000000F0F4F0F00005A -:109A900000000000000000000000000000000000C6 -:109AA00000000000000000000000FF3FC000F0FFC9 -:109AB000FFFF00000000FFC500C50000000000001F -:109AC00000000C0C505F3A003A0F0000000000004C -:109AD0000000000000000000000000000000000086 -:109AE0000000000000000000000000000000000076 -:109AF0000000000000000000000000000000000066 -:109B00000000000000000000000000000000410014 -:109B10000000000000000000000000000000000045 -:109B2000000000000000000000000000FF3FC00037 -:109B3000F000000000000200000002408800200049 -:109B40000000000004000000202040040400200069 -:109B50000000200404000200000020822005000014 -:109B600001000000000084002000200320052000E8 -:109B700000022040000340002000000320102000CD -:109B800088100000880088050080A00021102000B7 -:109B90004000A010400220000000880000044000A7 -:109BA00088020400040404110200040020908800CC -:109BB000000084414000200040840000800100003B -:109BC00000000020009000000000000100004000A4 -:109BD00000000002000000020384000000030000F7 -:109BE0000000400000080000000004000000000029 -:109BF0000000008200030000C00000000000000020 -:109C000080000000000000000000000400002000B0 -:109C10000940040000000420400041000000100141 -:109C2000800000000000000000C0000010A01040F4 -:109C300040000000100080900800020000400290E8 -:109C4000000000100000000008050110000084C0A2 -:109C500088100208000000400800401010100009A1 -:109C600082100000820291098240090082400000B7 -:109C70008400040002000208000002044000020008 -:109C8000021000000000001000109000000500000D -:109C9000000008050800000520040241000002043D -:109CA0002010000008104010400200009000100931 -:109CB00002020021020000009004040020C0000005 -:109CC0000002000800080084050000000884000865 -:109CD000002010400084000800080084800800A0D4 -:109CE00005100040000804014088001040000010EA -:109CF0000084004000080008848400000000828482 -:109D0000008403840004000800840084004000886C -:109D100000880008001000080008004000880010BB -:109D200005088085000080408300A08500000010A9 -:109D30000004008900080008000804400003000532 -:109D400000080000000000000000020000080010F1 -:109D5000000000080800000000404000002100054D -:109D6000000001050000001000400000000800088D -:109D70000008000500080000404000000000000846 -:109D80000008000000080021000000000408820014 -:109D90000008200804210008002100020008000338 -:109DA000200800039008C0089040880800000808B8 -:109DB0008808002188059000000400410008000088 -:109DC000410000000000118441C00000050811009E -:109DD00000010000000000820000001041000000AF -:109DE00000880000080000000000000000000800DB -:109DF00003000300000000000000800000000000DD -:109E00000000000000000000000000000000000052 -:109E10000000080088009000000000000000000022 -:109E20000008080010000040008200080000000048 -:109E3000050040A000000308080408A000880304EF -:109E40000004002108000800400000200000080075 -:109E500000090000000900090000000000000000E7 -:109E600000034005400400009000020000000004D0 -:109E700084210002400000000011020000110200D5 -:109E800000000802000400000000080000000000BC -:109E900000000040000002210000000008008400D3 -:109EA00000008411000000000800081108410000B3 -:109EB000C003A01120030104820000050003C009B3 -:109EC0008400400800A0000000080000000002001C -:109ED000020000C010A0080020C000000000000028 -:109EE0000000000000020000000000000000000070 -:109EF0001100000000008000008400848000001039 -:109F0000820000000091000000000400000000003A -:109F100000040000000000000000000000000090AD -:109F2000000002000000400040A04000009009C076 -:109F300000000200008200004082000000000000DB -:109F400000C0008400030005C000000000400000C5 -:109F50000003080808000021820000000005C00579 -:109F6000000582000000000000000008000008005A -:109F70000008000800008240824000080000000045 -:109F800000000000000000050005000800000000BF -:109F90000000000000400000000000000000000081 -:109FA0000000000000000800040000000000A00302 -:109FB0008441200084100020000000104040001068 -:109FC0008210080090210000000000000000000046 -:109FD00000000000000000080800410003A000008D -:109FE0000000000000000000000000000000000071 -:109FF000000000000000000000A0000000000000C1 -:10A000000000000000080000000000000000000048 -:10A010000000000000000000000000000000000040 -:10A0200003A0000000000810000000000000000075 -:10A03000000400040000082010002000080880042C -:10A0400021040000050010000003000800000000CB -:10A05000000000410011000000100000000000009E -:10A06000000800000021004100210021000801003B -:10A0700000080040002100410021000000410000D4 -:10A080000000000000000004000000050000400087 -:10A0900000000040002190000200000900000000C4 -:10A0A0000000000000000000000584000000000027 -:10A0B0000004C000000000000000824120000000F9 -:10A0C00000210010000000008410000000000008C3 -:10A0D0000000004000000000030809001000008894 -:10A0E0000000030000000290000000A008840200AD -:10A0F000400000000000000000C000000000000060 -:10A10000000000000000000000000000000000004F -:10A11000000000000000000000000000000000003F -:10A1200000000000000000C00000000000A00000CF -:10A1300000000001400000000000000000002000BE -:10A14000000000000000000000820804001041C070 -:10A15000020802880000000000000000A1080110B1 -:10A1600010041088000000000000000000008400BF -:10A1700002000001000101000801000000000000D1 -:10A1800000000000040000200090C020000000013A -:10A190000001880000010000000000000000000035 -:10A1A00000000100000000000000000000000000AE -:10A1B00000000000000000A101000890000910C08C -:10A1C00001409004028802080010201008020000DC -:10A1D00088008080000000000000000000009080E7 -:10A1E00003000000800000000000000000000009E3 -:10A1F00009088002002100402111800800000000B1 -:10A20000000000000000400000000000800000008E -:10A2100000401004000200080000000005000000DB -:10A22000000000002000000000000000000000000E -:10A23000000000001100000000882102000200A1BF -:10A240008080088000008000008005008080800001 -:10A250000000009000A100000000000000000000CD -:10A2600080000021800980800000000000000000C4 -:10A27000830090000910890002804000050010084A -:10A28000000010000000080003000241418040006F -:10A290000000110008004000082100090000000033 -:10A2A0000000000000000005800000000000000029 -:10A2B000000000000000000000000000200010006E -:10A2C00000100300080000048880000080C10040E6 -:10A2D00000800000001100110000000000000000DC -:10A2E0000000400088001000A09000000000000066 -:10A2F00000004010100082018200001001000100E7 -:10A3000001C00000000000000100C00084C100A0E6 -:10A310000100000000080100000001010000000031 -:10A320000000000000000000000008000000000025 -:10A33000000000001000000000001000009000006D -:10A340000040000088009100040111C0100010C0FE -:10A35000900908C0C090000800A010200000000074 -:10A3600000000000000200A10090100800000000A2 -:10A3700000000000000001010001000100010101D6 -:10A3800000010000000000000000000000900088B4 -:10A390000010018400000001000100010001000024 -:10A3A0000000000000000000A0000000000000000D -:10A3B0000000000000000000000000000000080095 -:10A3C000010101010800080800C0C0100090918838 -:10A3D0000008C0022111800200C00040804000003F -:10A3E00000000000000000000088000080800000E5 -:10A3F00000000000000000200840082100100008B4 -:10A400000208112100000000000000000000000010 -:10A41000000000800900000000080003002108047B -:10A420000000000000000000000000000000050027 -:10A430000000000000000000000000000000030019 -:10A440008020401040210000008200038008082086 -:10A45000412000A0800404200000000000008000D3 -:10A4600000000000000000000000002180800000CB -:10A4700000000000000000002021210200800802EE -:10A480000990210010001103080408004100000099 -:10A490000080008000800040000021800800100043 -:10A4A0001008000000000000000000000000000094 -:10A4B0000000000000000000000000040000000098 -:10A4C0000000200011101000030000800080000038 -:10A4D000000000008000008000008800C0008200B2 -:10A4E0001000000000000000000000008891908231 -:10A4F000000000000000000000000089000500824C -:10A50000010000A0000000000000010001000000A8 -:10A510000000400220109084840000000110000020 -:10A52000000001000000000000000000000000A08A -:10A530000000000000000000000000000001000218 -:10A540000088000004002000890011000002008241 -:10A55000000200000800828810084000000000008F -:10A560000000820000000000000000000000000069 -:10A5700007000000000000000000000000000000D4 -:10A5800000000000000000000000000000000000CB -:10A5900000000000000000000000500A0000000061 -:10A5A000000000000000000000E0000000000000CB -:10A5B00000E0070000000000000000000000810033 -:10A5C00000E00000000000000000000000000000AB -:10A5D0000000000000420000000000004842911806 -:10A5E0009100F00030300000000000000000000F7B -:10A5F000000FFCFDF0F9000000000000000000006A -:10A60000000000000000000000000000000000004A -:10A6100000000000000099993CFFF0F0C3C3000067 -:10A62000000000000000000000000000000000002A -:10A63000000000000000000000000000000000001A -:10A6400000000000000000000000FF6200000000A9 -:10A65000000000002004100822000022200410083E -:10A6600010181000FF0F3F3F000000000000000026 -:10A67000FF0FFF0F3CBD009900000000000000002C -:10A6800000000000000000000000000000000000CA -:10A6900000000000000000009999CFCF6666FF001F -:10A6A00000000000000000000000000000000000AA -:10A6B000000000000000000000000000000000009A -:10A6C000000000000000000000000000FF62000029 -:10A6D0000000000000004002800111000011400253 -:10A6E00080010000000000000000000000000000E9 +:109A100030303C1408FF00FF000000005D5D5F5F18 +:109A2000000000000000FF7F00000000003CC0C0FC +:109A300000000000FFFF53FF00000000000FEB00DC +:109A400000000000FFC3F0FF000000000000000065 +:109A5000000000000000FFFF000000000000000008 +:109A60005555FF0082BE82BE000000000CFCAFAF67 +:109A7000000000000000F0FAFCFE00000000000002 +:109A800000000000000000000000000000000000D6 +:109A9000000000000000FF00FF00000000000000C8 +:109AA0000000000000003030B2B2000000000000F2 +:109AB000000000000000FF0053FF00000000000F46 +:109AC000280000000000FF55F0FF0000000000002B +:109AD00000000000000000A0BEBE0000000000006A +:109AE000000055550F0F003CC3FF000000000CFCA8 +:109AF000A0A0000000000000000000000000000026 +:109B00000000000000000000000000000000000055 +:109B10000000000000000000F000F4000000000061 +:109B20000000000000000000F0F0F0F00000000075 +:109B300000000000200000000000020020000000E3 +:109B40000000200000002000000000802000000035 +:109B500000002000200000000000200000000000A5 +:109B600000002000400020000000880020000000CD +:109B7000000084000003000000400000000002001C +:109B800000000180000020000000400288800000EA +:109B9000010000800180010001000000018001003F +:109BA00000000000000000000000000000000000B5 +:109BB000000000000000C0000000000000000000E5 +:109BC0000000000000000000000000000004000091 +:109BD0000000000000004000000000000000000045 +:109BE0000000000002000000000000000000000073 +:109BF0000000000010000000400011010000000003 +:109C000000004040400200004000000080010020B1 +:109C10004000040221200820040004000000040881 +:109C200008000000000000000000000040000000EC +:109C300000000000000000000000004000000000E4 +:109C40000000000000000000000000000100000013 +:109C500000000000010900000000000000000000FA +:109C600000410000001000000000000000000000A3 +:109C700008000100000000000000000001080000D2 +:109C800000850000000090400000000000000080FF +:109C9000000000000000000000050021400002005C +:109CA00000400809082000098840080082000009D7 +:109CB000820802080000000000000000000100000F +:109CC0000000000000000000000000000000200074 +:109CD0000000008400002088000000000204000052 +:109CE000000000C0000000000000000000000008AC +:109CF00000000000200000820000000000004088FA +:109D000002000020008800820084000000000000A3 +:109D100000020008000000000500008400008040F0 +:109D20000000110000000089000000000088000011 +:109D300000080010000000000004001000050041B1 +:109D400000410000004100000000004000A1008030 +:109D500000850000000000050041000000050041F2 +:109D600000000000000800080000000500000021BD +:109D7000000000080000000400840008000000004B +:109D800000410000000400001008008200000000F4 +:109D9000000200000021000000000008000900216E +:109DA00000020003004100000000000900880021BB +:109DB0000000000000210000000000410000000041 +:109DC0000000000000C0000800C000C00085004086 +:109DD0000040004000000000008408C00084000033 +:109DE000000000000008000000000000000000006B +:109DF00000000000000000000001000500820000DB +:109E0000000000840088009100C08003000300006F +:109E10000000000000000000080000000000030037 +:109E200000080000000000000800000000000320FF +:109E3000000000000000080000A0000000820000F8 +:109E40008280000000800800000000000000000088 +:109E50000000000000000000000000002008008456 +:109E6000C000000920C1400008000200820000007C +:109E700084002000000000008200000000A1080013 +:109E800000008200890084094000010201000040B6 +:109E900008020202009185024041000000000021FA +:109EA0000800000240400000002100110000008076 +:109EB00000000000820008090800000900000011ED +:109EC00000000040008400400082000800A0000064 +:109ED00000000000000000000000004040004000C2 +:109EE0000041000011C000048084000480000002D2 +:109EF00000A0030000A000000200000000000020FD +:109F000002000000000008900088400010001000CF +:109F1000410040858009000420858088008400007D +:109F20000090000820008000030000A02000000036 +:109F30000020000000C0000800900000008800C061 +:109F4000000000900000A0408200208088000000F7 +:109F50000040000000A10100008801400003202112 +:109F60002000000000059002008200210241000054 +:109F70000200020000850105C080C08504200000A9 +:109F8000010001A000000804000400040404000013 +:109F900040884002001182090402400808C14000C4 +:109FA0000040000000000000000000100000002041 +:109FB0000009000000000021000000000041A0088E +:109FC00000000000000000C00009000083040082BF +:109FD000028400A1000000400200004002010000D5 +:109FE000800000000000001000081104000880003C +:109FF000000080008000004002000040004080839C +:10A00000000004A004050000009111A100898891BE +:10A010000000800880010000000080008000000433 +:10A020000000000000000000000000000000000030 +:10A030000001000000000000050000000000080012 +:10A0400000000000000000002021210920218240A2 +:10A0500000400040400440000021000900050009C4 +:10A0600001A101050085002101850188210401C0AD +:10A0700000410000000800210003C003C0000009E7 +:10A080002004042000000004000000000082000002 +:10A0900000000040008800A002000000081100211C +:10A0A00000210000C009C0080003002100000000DA +:10A0B000000000110003000800000800000000007C +:10A0C000000090000000200000008000A008830035 +:10A0D00000010001000121000500000000C000088F +:10A0E000000020400284204000000204020402001C +:10A0F00020400008000000080000000000000000F0 +:10A100000000800180A100000001000000840040E8 +:10A11000000000001188000902034084410000A0F3 +:10A12000008211A0000000000000000000000500F7 +:10A13000000041000008000011040000000000823F +:10A14000000000A0000000000000000402C0024067 +:10A150000002820100C002040040820000C00182AF +:10A160001008C00841C00101C109000201C001027C +:10A170004084900000C000020004101000C0008263 +:10A180000040A0A0C0014021A120C011000001A1F9 +:10A190000482858200830000880188010000C1A03C +:10A1A0000102008402400000040000000000C11011 +:10A1B00008A000A040A00000000000000000000077 +:10A1C000000000000000000000000000000085808A +:10A1D000890404098008408080800080800000910C +:10A1E0001004009000C09188100284890000118042 +:10A1F000108084000000008000000080008000804B +:10A2000000800000000080020040020000A000006A +:10A2100011902109C08000211140A11000400009C7 +:10A220009182210902C000000000800000000000AF +:10A230008202808500410000000000000000000054 +:10A24000000000000000000000000000000000000E +:10A250000900410284889010800080000080808086 +:10A260000980210208058410090002218211901141 +:10A27000080404108209800080000004008080002F +:10A280000000000000008000020020050380A020E4 +:10A2900000000584A040040282411000110011005A +:10A2A00041038211044008A010208000000000003B +:10A2B00000800000002180800003000000A000005A +:10A2C000000000000000000000000000000000008E +:10A2D0000000000202000441C100080082000010DA +:10A2E000C00400400300A1C0C00011000100110122 +:10A2F000C100910100011000C0000800040000101E +:10A30000C0000000C000A0C0C0C0030021000010B9 +:10A3100083010000A0C111000105C183008200007B +:10A320000000010188200200094190A10200109064 +:10A330000000008240408801A004000100000010DD +:10A340000000000400000000000000000000000009 +:10A350000000000002030100010302C108080040E0 +:10A360000408C0C0A0020040820801C0880800891B +:10A37000010903C008082088008502C104040040C8 +:10A38000020400C0A0400004404000C002010020C0 +:10A3900001204011000082008500020191000001AF +:10A3A000010084000101020005020101C0890000D2 +:10A3B0000000020000002008008800880002000061 +:10A3C000000002000000000000000000000000008B +:10A3D00000000000000000101004050891C08080FB +:10A3E0000080808080800004118203A002850080AC +:10A3F00021020282919080848004002189A00000C3 +:10A4000000800080008000800000800000808002CA +:10A410000540054184A000008041400480212002C5 +:10A4200000200321031102410008404021210904BA +:10A4300020000000800000000080110020000000CB +:10A440000400000000000000000000000000000008 +:10A4500000000000000000008802848000004040EE +:10A460008005808080800000A10282899180100395 +:10A470008810828982800911801080800000000885 +:10A48000801180808080000080200000000000009B +:10A490000204094005914140000021091005910086 +:10A4A0000202214009414000081003001000020090 +:10A4B00090100011008800000000C10821900200E7 +:10A4C0000300000000080000000000000000000081 +:10A4D00000000000000000000000C1012002020294 +:10A4E0000101C000200208084000C10520820808C0 +:10A4F0000101C000118309082100C0A010C084849C +:10A500008801C000082004040000C0014040A0A051 +:10A51000840021002020004004010000118202007C +:10A520008288020001830001000001002088C0022F +:10A53000892005000001002000020000A100C008E1 +:10A540000920850008000001880088000000000044 +:10A55000000000000000000000000000000000E01B +:10A56000000000000000000000000012000000E0F9 +:10A5700000000000000000E000000081000000E09A +:10A58000000041000000000000000000000000008A +:10A5900000000000000000E00700600000000081F3 +:10A5A00000E00700420A000000000700420000002F +:10A5B00000E0070088000000000007000000000025 +:10A5C00000E007004200000000000700000000005B +:10A5D0000000000000000000000000000000999949 +:10A5E000FFFF81C3FFFF4BDBFFFF03C3FFFF00FF44 +:10A5F000FFFF0CCFFFFFC30FFFFF8DCFFFFFC30F88 +:10A60000FFFF03C3FFFF9999FFFF0CCFFFFF939F4D +:10A61000FFFFC3C3FFFF3C3CFF66F6FFF6F0000000 +:10A62000C3580058000000000000000000000000B7 +:10A630000000080CFFFF09090000000000000000F6 +:10A6400000000000008D00FFCCCCC0C00000000066 +:10A6500000000000000000000000000000000000FA +:10A660000FFFFFFFBDFFFFFF4BDBFFFF3FFFFFFFC4 +:10A670009F9FFFFFCFCFFFFFC3FFFFFF8DCFFFFFE8 +:10A68000C3FFFFFF3FFFFFFF0FFFFFFFCFCFFFFF26 +:10A69000939FFFFF0FFFFFFF3C3C0066060F060085 +:10A6A0000000C34000400000000000000000000067 +:10A6B00000000000090F0000000000000000000082 +:10A6C0000000EF6FFFFF000000000C0C0000000016 +:10A6D000000000000000000000000000000000007A +:10A6E000000000000000000000000000000000006A :10A6F000000000000000000000000000000000005A :10A700000000000000000000000000000000000049 :10A710000000000000000000000000000000000039 @@ -141975,496 +141975,496 @@ :10A730000000000000000000000000000000000019 :10A740000000000000000000000000000000000009 :10A7500000000000000000000000000000000000F9 -:10A7600000000000010001420000000000000000A5 -:10A770000000000000002C003C3FBDBF00000000B6 -:10A780000000000000000000000F242F0000000067 -:10A79000000000000000000000000000F330F33073 -:10A7A000070707070000000000000000000000008D -:10A7B00000000000000000000000000066660000CD -:10A7C000000000000000000000000000FFFF4F4FED -:10A7D0000F0F00000000000000CC100820040082D1 -:10A7E00000140000A00543004342000000000000E8 -:10A7F00000000000000000002C00000F999F0000E6 -:10A8000000000000000000000000000F000F00002A -:10A810000000000000000000000000000000F33015 -:10A82000F3301F1F1F1F0000000000000000000089 -:10A83000000000000000000000000000000066664C -:10A840000000000000000000000000007E7E7E7E10 -:10A8500040400000000000000000CC0080014002E9 -:10A8600082001400A005000000613006000D000009 -:10A87000000000000000000000610006000D000064 -:10A88000000000000000000000610006000D000054 -:10A8900000610006000D000000610006000D0000D0 -:10A8A00000613006000D0001000000610006000D8F -:10A8B000000000610007000D000000610007000DAE -:10A8C0000000000000000000000000610007C00D53 -:10A8D000000000610006000D000000639006000DFE -:10A8E000100000610006000D080000000000FCA040 -:10A8F000FCAF000000000000000000000000AFAF4F -:10A90000AFAF0000000000000000C3C3AAFFDFD00B -:10A91000DFD04041505510BA10BA0F0000000000BF -:10A9200000000000000000000000000080BCA0A0AB -:10A93000FF01FF0000000000000000000000000018 -:10A940000000000000000000000000000000000007 -:10A9500000000000555541417D7D7D7D00000000D7 -:10A960000000555500000000AAF0000000000000A3 -:10A970000CA00CAF00000000000000000000000070 -:10A98000A0A0A0A00000000000000000C3C3AAFF18 -:10A99000D0D0DFDFC0C3F0FF55FF55FF0F00000030 -:10A9A0000000000000000000000000000000C1FDE9 -:10A9B000F5F5D101D000000000000000000000000B -:10A9C0000000000000000000000000000000000087 -:10A9D000000000000000D7D7434028782878000006 -:10A9E000000003FF5555000000003CF0000000008F -:10A9F0000000000000000000000000000000000057 -:10AA00000000000000000000000000000000050A37 -:10AA1000055FE1E141EB505550500002808200009B -:10AA20000000F0F0000000000000F0F0F0F800007E -:10AA3000000000C0F5555252000000000000000068 -:10AA40000000000000000000000000000000000006 -:10AA50000000000000000000A8A80808000F000F78 -:10AA6000000000000000C3C3000000000000000060 -:10AA700000000000000000000000000000000000D6 -:10AA800000000000000000000000000000000000C6 -:10AA9000008200D7A0A041EB50555555AAAAAAAAFA -:10AAA00000000000F0F0000000000000000000289E -:10AAB0000000000000C0FF5F5252000000000000D4 -:10AAC0000000000000000000000000000000000086 -:10AAD00000000000000000000000A808A808000F07 -:10AAE000000F00000000C0C0C0C000000000000057 -:10AAF0000000200020000400000088400200000444 -:10AB000020404080020020002002200302000800B4 -:10AB10002010000000008800001020000000000845 -:10AB2000000020000200200020000482008000209D -:10AB30000040000300000003200084052000000006 -:10AB40000000401000002000001000002000001055 -:10AB50000000881000080100048021082000C100C6 -:10AB600001202000000020008800011020000009C2 -:10AB70000000040004020000000000004000C000CB -:10AB8000000000411010000000400005000005001A -:10AB90008400000000000002000200040002200007 -:10ABA0000000000000000000000000000020002065 -:10ABB0001001000000004000000000000002000042 -:10ABC0004000000000004000000021001000400094 -:10ABD00000000000000800000800000240C0000261 -:10ABE00008040800100800900000210008C0400080 -:10ABF00000000000900003000241000000008400FB -:10AC0000A0000800031000001000000002800840AF -:10AC100008100090030010000000000002008200F5 -:10AC200082000000080000088285000084400803BC -:10AC300004008200088000000000000000050400FD -:10AC40000010000000000800008310000802000847 -:10AC50000040020504000804008591000010004037 -:10AC6000021000030209000000050000001002802D -:10AC700008410220098000100800040000000400C0 -:10AC8000000000000000820420000000000004100A -:10AC9000831080840010080804C000080004000825 -:10ACA0000000000800000008008800020008000002 -:10ACB00000880008020000200000008400080088CE -:10ACC00002820000008400100008001000100084C0 -:10ACD00004040010040802000400021040080010E0 -:10ACE0000004808300000082001000100040000873 -:10ACF0000002008400090420008402080000000013 -:10AD00000020000004000005000500020005000806 -:10AD10000200000500050805000500080000000805 -:10AD200000400000000300000000000000080000D8 -:10AD300000080003000008000000000000080021D7 -:10AD400000080008002100000000000000080002C8 -:10AD50000040000440210840000802008203001067 -:10AD60000088000000210021000040008403004012 -:10AD70000008A000C10390400000822000000000F5 -:10AD8000000020840000000000000000000000001F -:10AD90000000000040080288800000000000000061 -:10ADA0000000000421A000000000000000A003003B -:10ADB00009A0400000080000000000400000000062 -:10ADC00000000088000000080000000800000000EB -:10ADD0000000200000000500910000008000090034 -:10ADE0001101031004842040020000080900200023 -:10ADF00009404040108204A0000000904084000000 -:10AE000000000821080000000000000500400000CC -:10AE10000000C01000000005000008100010000035 -:10AE200010000009A004004084000004004100005C -:10AE300000200000000002000000002000000000D0 -:10AE400000000000000001000000000004004000BD -:10AE50000800000008000000000000108200000050 -:10AE60000010001108020000A00000000003840090 -:10AE7000001000000040000201080041900008009E -:10AE80000808000041000908000009C0080020006F -:10AE900000000000020000000000208820010000E7 -:10AEA000000400000000000000900000000000C04E -:10AEB00000000000000003A00000080008001000CF -:10AEC000000000840000000040000300004000007B -:10AED0000000000000C00000000000080083419056 -:10AEE00000000585000000010000000040002084F3 -:10AEF000400011040000008200C00490000400849F -:10AF0000009000210005002110200000000000003A -:10AF10008200080808008200000000000000000015 -:10AF200000000000000000000000400000000000E1 -:10AF30000000004008000000A00000000000000029 -:10AF400000000000004002000005001000000000AA -:10AF500000000000000000000000081000000000D9 -:10AF600002410000004100000000400008000021F4 -:10AF7000000500050000400800000000000300106C -:10AF800000411020030800A0000203000088000018 -:10AF90000000000000A0200400A004000000000049 -:10AFA00000000000000408A0088800000000000263 -:10AFB000038400C00000008400840020000003001F -:10AFC00041880800000000A080A0000000080000E8 -:10AFD0000000000010000000000000000000000061 -:10AFE0000000000000000000000000000040C04021 -:10AFF0004008050010A01004042040840040000018 -:10B000002010001011210021000800088400000019 -:10B0100000080000000890000000002182210000CC -:10B0200000080000040008040009001000210000CE -:10B030000000000008000000000000080000000000 -:10B04000004000400000000000210000000000005F -:10B0500000030000002100000000000000000000CC -:10B0600000000000000000002100000501804000F9 -:10B070000041000400044021000000000004002101 -:10B0800020000020008200410000000000000000BD -:10B090000000000000000000000000000000099017 -:10B0A0000000200000040000204008900908000073 -:10B0B000000000000040040000000000000000004C -:10B0C000080008000000000000001000000000C0A0 -:10B0D0000000414000000000000000A000A00008A7 -:10B0E00000040000000000000000080000A008109C -:10B0F0000000000000000010800020000000200080 -:10B100000004030000010020020000000000000015 -:10B1100000000400000000020220010001004000C5 -:10B1200000000204000400A00082000000000000F3 -:10B13000000000000000000000000000000100010D -:10B1400000010808009000900000000000000000CE -:10B1500000000000000000000000000000000000EF -:10B16000000000000088000800C00000040905106D -:10B170000889820000A085844000828800000100C8 -:10B180001000000000000090008400840000000017 -:10B19000000000000000000000800000100003001C -:10B1A000800000008080000000800000000000009F -:10B1B0000000000000000000000000000000000887 -:10B1C00000080008808000800000000000000000EF -:10B1D000000000000000000000000000000000006F -:10B1E000000000000000000000800000000020219E -:10B1F00003838010800000800300000080000000B6 -:10B2000003000000000000000080000000000000BB -:10B21000004100000000000000400080000000002D -:10B22000000800000000800000048084000000008E -:10B23000000000000000000000000000000000808E -:10B240000000000200048000000880008000000070 -:10B2500000000000000000000000000000000000EE -:10B26000000000410000000000000000000000009D -:10B2700080000921C0000080800080008004000060 -:10B2800000000000800080000000000080000080BE -:10B2900000000001009000008200000300A00200F6 -:10B2A000840090018290848240008401A0A0A000CC -:10B2B000000000000000000000000000000000008E -:10B2C00000400000000000000800100110889000FD -:10B2D000000000000000000004000000000000006A -:10B2E000000000000001001000000000000000004D -:10B2F000000008409000A104001010004000A001D0 -:10B300008482A000820010000208000002008484F1 -:10B310008490000000000000010000C0001000A0A8 -:10B320000504000100010001000140020090848436 -:10B33000C004000000000000000000000000000049 -:10B34000000000000000010000000240002090907A -:10B350008810000000000000000000010000000054 -:10B3600000000000000000000000000000000000DD -:10B3700000000000042001A001038401020000017C -:10B380000011A0A00000000100000000001000401B -:10B3900090840884000000000000400000000000CD -:10B3A00000008900000400030008100480800000F1 -:10B3B000000000800000000000000000000000000D -:10B3C00000000000000002000300020000800000F6 -:10B3D0008000008000000000001000040008000051 -:10B3E000000000000000000000000000000000005D -:10B3F0000000000000000010098921210010000554 -:10B400000002008280050010000800100009000002 -:10B41000008080008000000000008000000000002C -:10B42000008000800000000000000000000080009C -:10B43000008000800000000000000000000000000C -:10B440000000000000002100031003000300801131 -:10B45000000080000000000000000000000000006C -:10B46000000000000000000000000000000080005C -:10B47000000000000000000021008000000011100A -:10B4800000008000000000000000008000000000BC -:10B490008000000000000000200008008400100070 -:10B4A000040004109084880084001088A010840098 -:10B4B000400004408202A0000000000000000000E4 -:10B4C000000000000000000001000100000000007A -:10B4D00008019090400000000000000000880088F3 -:10B4E00000000000000000000000100088000000C4 -:10B4F000100000000000000000000500A00802008D -:10B5000000009000021090200000000000080004DD -:10B51000000090008800008484000000000000000B -:10B5200060000000000000000000000000000000BB -:10B53000000000000000000000000000000000000B -:10B5400000000000000000000000000000000000FB -:10B5500000000000000007000000000000000000E4 -:10B5600000000000000000000000000000000000DB -:10B57000000041000000000000000000000000008A -:10B5800000000000000000000000000000000000BB -:10B5900000000000000000000700000030303030E4 -:10B5A000000000003CAA00AA7C68FEEA17173C00D5 -:10B5B0000000000000003C3C020000000000000011 -:10B5C000000000000000000000000000000000007B -:10B5D00000000000F0AAF0FF3C503CFA0000000020 -:10B5E000000000000000000000000000000041AA70 -:10B5F000AAAA0000000000000000000000000005F2 -:10B600000000FFFFFFFFF000FF0FFFFF0000000042 -:10B6100000000000000000BE41FFF03C3C3C303028 -:10B62000BA300000000000AAF0AA5440D6C2171792 -:10B63000FFC300000000A000BC3C020000000000AE -:10B6400000000000000000000000000000000000FA -:10B65000000000000000F0AAF0003C503CFA00009E -:10B6600000000000000000000000000000000000DA -:10B67000EBFFEBFF000000000000000000000000F6 -:10B6800000050055D080D080F000FF0FFF00FF00C4 -:10B69000000000000000000000BE41FFF03C3C3C08 -:10B6A00000000000000000001E1E1E1EBEBE3C3C2E -:10B6B00000000000C0C028EB3C3E3C3CD555C0001B -:10B6C000000000000000000000000000000000007A -:10B6D0000000000000000000F505FF0FBFAB1501E2 -:10B6E000000000000000AAAA000000000000000006 -:10B6F000000000000000000000000F000FFF00002D -:10B700000000FFFF0F0FEBE0EBE0BEAABEBEAAA059 -:10B71000FFF0000000000000F0F0D515D5150F0F68 -:10B720000F0F00000000000000001E1E1E1E14145B -:10B730003C3C00000000FCFC28EB000A00005555D2 -:10B7400000000000000000000000000000000000F9 -:10B7500000000000000000000000F505F000BFAB95 -:10B760001501000000000000AAAAFFFF0000000071 -:10B770000000000000000000000000000F000FFFAC -:10B7800000000000FF55FF55EBE0EBE0AAAAAABEBF -:10B790008280C3C000000000D010D010D515D51590 -:10B7A0000F0FFF000000000000000000000030004C -:10B7B0000000000100610006000D00000000000014 -:10B7C0000000000000000000000000000000000079 -:10B7D0000000000000610006000D000000000000F5 -:10B7E00000000000000000610006000D00010000E4 -:10B7F0000000000000000000000000000000000049 -:10B8000040000000000000610006000D0001006122 -:10B810000006001D000000610006000D0000000091 +:10A7600000000000FFFF9999FFFFF909FFFFF0F0DB +:10A77000FFFFB1B1FFFFFCC0FFFFF909FFFFC1C13F +:10A78000FFFF99C3FFFFFF00FFFF99C3FFFFFF001B +:10A79000FFFFC9C9FFFFC3C000000F0F3F663F6640 +:10A7A0001F1F7F7F00000222C3E30C0C3C3C000013 +:10A7B000000000000000F044F0440CFC0CFD000020 +:10A7C000000030303030FF003000BD24BD240000D8 +:10A7D0000000000000000000000000000000000079 +:10A7E000000000000000FFFFFFF0FFFFF9F9FFFF8E +:10A7F000FF99FFFFF3F3FFFFFFC3FFFFF9F9FFFF2F +:10A80000FDFDFFFFFFC3FFFFF9F9FFFFFFC3FFFFE0 +:10A81000F3F3FFFFF9F9FFFFFFFC0000006630666D +:10A8200030661010707000000020C3E30C0C0000B4 +:10A830000000000000000000FFFF0000FCFCFDFD28 +:10A840000000000006060606FF00FF00BD2DBD2D1E +:10A8500000000000000000000000000000000000F8 +:10A86000000000000000000040E38001002192028F +:10A87000408280000020920240E380060021920284 +:10A8800040E380010021920240E38007002D920204 +:10A8900040828000002092024082800000208A02D4 +:10A8A0000061000900010000000000610037000D98 +:10A8B00000080061000E050D000000610007001D8A +:10A8C000000005000A08050000A000410006000D78 +:10A8D000000005000A08050000A0000000000000BC +:10A8E00000000000000000000000FFD7FF140CFC77 +:10A8F0000FFF000000000000000051F30000820084 +:10A90000C2C0FFFCFF0C0F0AFFFA0000000000F0BD +:10A91000E0F0000000000000000000000000000067 +:10A9200000003C3C0F0F82BEC0FC00000000000095 +:10A93000EFE0AFA083AF0000550001000000000071 +:10A94000000000000000000000000000AAAA555707 +:10A9500000000000000000000000000000000000F7 +:10A9600000000000000000000000000000D70014FC +:10A970000CFC00F0000000000000000055FF00008B +:10A98000C3C3C3C300FC000C000AF0FA00000000BF +:10A9900000F020F0000000000000000000000000B7 +:10A9A000000000003C3CFF0082BEC0FC0000B2FF83 +:10A9B0000000EFE0FFF083AF83AF000001003C5FD9 +:10A9C00000000F03FFC300000000000000000000B3 +:10A9D00000FF000000000000000000000000000078 +:10A9E00000000000000000000000000000003C5FCC +:10A9F0003C5F28F07DF00000000000000000000037 +:10AA0000A8FC00C30028550F550FA0ACAFAC000048 +:10AA100000003A003A0000000000000000000000C2 +:10AA2000000000000000FFFFD714E8E828EB00005A +:10AA30003CFF28AA50FABEBEF5FDA5ADC3C300A0D9 +:10AA40000000A0F000000000000000000000000076 +:10AA5000000000FA000000000000000000000000FC +:10AA600000000000000000000000000000000000E6 +:10AA70003C503C5028F07DF0000000000000000039 +:10AA8000A8FCA8FC0F0F0F0F55FF5500A0ACAFACF2 +:10AA900000000000000000000000000000000000B6 +:10AAA00000000000000000000000D714E8E828EBD8 +:10AAB00000003CFF28AA50FA1414F7FFA7AF80004B +:10AAC00000A00000AAFF100000000000000000002D +:10AAD00000000000FAFA0000000000000000000082 +:10AAE0000000000000000000000000000000000066 +:10AAF00000002000000008008480200020000000EA +:10AB00000000000000000000040020000200880097 +:10AB10002003200000001010200000002000000092 +:10AB200040000000000000000000200000000000C5 +:10AB3000002100030000000000002002009010002F +:10AB40000180000000800000000000800000000084 +:10AB500000040080010000050000208001100000BA +:10AB6000000000000010000000000188000000004C +:10AB700000000000800000008000001000000000C5 +:10AB80000000000040000000000000000000800005 +:10AB900000000000000000000000000000020000B3 +:10ABA0000000000040000000000000004000000025 +:10ABB0000000000000000000000021020000400929 +:10ABC00080004002000040080084000000044000B3 +:10ABD0000000000100021000000010C00008020088 +:10ABE00000000000000000004000000008400000DD +:10ABF0000000000000000000000000000000000055 +:10AC0000000000000000000000050000000000003F +:10AC10000100A0000000000500000000000002008C +:10AC2000010000000000000008000000000000001B +:10AC300000000000000000000200020000200410DC +:10AC400000000088098200000200000000000000EF +:10AC50000200400020000000000204050002041071 +:10AC6000910840400800200008408200084002008F +:10AC70000000820008000800000000C000840000FE +:10AC800000000000000000000000000000100000B4 +:10AC90000000080000000000000802000010001082 +:10ACA0000000400000000000000000000000000064 +:10ACB00000000088000000000000881088100011CB +:10ACC0008008009000218221000000100408000884 +:10ACD0000000800080008000000000018800100952 +:10ACE000828440088000800080000008028880097B +:10ACF00080C00040000000000000000800000000CC +:10AD00002108000000000000000000000021820275 +:10AD10000021010000000000008000000088000801 +:10AD200000100005004100050000000800100000B0 +:10AD300000050000002100000000000000000000ED +:10AD40000808004121000021010008200000000047 +:10AD50000000000800020121000000000021002185 +:10AD6000000000030002004100000000001000107D +:10AD700000000010000000000000000000C00010F3 +:10AD800000008210000000000382000000000000AC +:10AD900000000000200000080082000400A0000461 +:10ADA0000000000808080084008400000000030080 +:10ADB00003C00000000000000800000000000000C8 +:10ADC000000000080000828403824000034141002B +:10ADD00000A0000000A0410008A00410051000849D +:10ADE00003000000009003000010000000000001BC +:10ADF0000001000000000000000041000000000011 +:10AE000000008800000000000000C00000000000FA +:10AE100000000000000000000000020001800000AF +:10AE2000400002000000000000008200000004005A +:10AE300000000000080000000800200040000000A2 +:10AE400000000000C000A008088009000000080001 +:10AE500000000400040000008200820000100000D6 +:10AE600020830002014004080000001000050004D7 +:10AE70000011014100208390000000000005004007 +:10AE800000080000000000040000000000000000B6 +:10AE9000000000000000000000000000C1002020B1 +:10AEA000000000A008000008000041C000000000F1 +:10AEB0000000000000000000000000000000800012 +:10AEC0000000030000000800400089208800000006 +:10AED000800009C080021184402000000000200191 +:10AEE00000000008000140108084000000100240B3 +:10AEF00000100904080000000420090000000004FC +:10AF0000000801002080010409000000000000008A +:10AF1000000001000021000090000000008000A05F +:10AF2000000001C100A0218021800008000800006D +:10AF300000000000000800080003000000000041BD +:10AF400008000000000000050000000004000800E8 +:10AF5000A0000305008310050002044140004010DA +:10AF60000220404100100420000240050241000080 +:10AF70000405000400000041000804410000000036 +:10AF80000000004120088004200920080000000083 +:10AF9000000008004000000000A0000009020004BA +:10AFA0001105110004040020A020A02000000000D2 +:10AFB0000000000000000000000000000000000091 +:10AFC0000000000000004000002008000384210869 +:10AFD00000000000C0C000080008210921408808C6 +:10AFE000800080008300000080A000C080048010EA +:10AFF0000000001000110000000000000000000030 +:10B00000000000000000000000000000000400003C +:10B0100000090009000000000000200000000000FE +:10B02000900000000000000401A190040408000842 +:10B0300000000008001100080010002100000000BE +:10B0400000000000022100000804880088000000C1 +:10B050000003014140004040008820050080C004FA +:10B060000800402120820800000800200010018410 +:10B07000001008004000204000000000000800050B +:10B08000001100000041000400000000000000006A +:10B0900000000000000000000000000000000000B0 +:10B0A00000000000000000000000202009008000D7 +:10B0B0000000000800000000000000000000000088 +:10B0C0000000000000000000000000000000000080 +:10B0D0000000099008A08090C0010008C000000294 +:10B0E00000889082A1A08004A184008400A10301B3 +:10B0F00010200000000000000200002000000000FE +:10B100000000008400000000008404C000A000884B +:10B11000109000000000000000000000000100018D +:10B12000000190109102029084850108408200C1C4 +:10B13000A0830000820082000000000000000000E8 +:10B140000000000001000400000000008800000072 +:10B1500000008400C1C10102C040A0822111000989 +:10B1600088C0C08340A000011101040183020103D3 +:10B170009089901089000100A000C00110C000401B +:10B1800000040404000000000000000080800000B3 +:10B19000020000000000000000000000000000109D +:10B1A0000040004080828300858900402084A110F7 +:10B1B000040400880000040080000000000000007B +:10B1C00000000000000021000000000000008000DE +:10B1D000000000000000A1912041808400114090F7 +:10B1E000218200200008808011039111800889903D +:10B1F00010830088802089400304804100048080FF +:10B200000080008000800000000000000000800836 +:10B2100080008040000000000000000000000000EE +:10B22000000000000000910041918940008300006F +:10B230008410040220110200020004000521000015 +:10B24000000000000000020020004000400000005C +:10B25000800080008000808082000902A1A141005E +:10B26000000089112080C108C1802100099189A1B5 +:10B27000A00085038591C1890280A100800084041B +:10B280000000800080A1000000000000000000001D +:10B29000100108000800100000000000000000007D +:10B2A000000000000000000008049009A085A0092B +:10B2B00004882000A1C1010000100100000000016D +:10B2C000000000000000000000000000000001007D +:10B2D0000000080010008400C09090000008A1A1A8 +:10B2E0008388C008020483A005018808010000913A +:10B2F00005050290200005840589018811000800D9 +:10B3000009848200100008A184C000000000000031 +:10B310000000A082020400880282000000000000F9 +:10B32000000000000000000000000001002002C03A +:10B330001010C08201830083000800000000040197 +:10B3400000000000000000000000000100010001FA +:10B350000001000000100008009000C000C10021A2 +:10B36000059185C1C0030102C084C0100010000215 +:10B370000010A1C0A0850020021002C000410340BF +:10B38000848501C10410000400029108000000003F +:10B3900000000000000000000000828000000000AB +:10B3A0000000000000000000410000000220119198 +:10B3B00041091000008420030004028400410002BF +:10B3C00080210010000000000000000000100008B4 +:10B3D0000021001000000000000000800080100824 +:10B3E000054021A104C1000210210491888000823F +:10B3F00009901190A18000900341C12085900082A6 +:10B400008920802121910000000000800980000037 +:10B41000000000000000000000210000000000000B +:10B42000000000000000000400000000000008917F +:10B43000910409840008408011050400000911806E +:10B440004000110011100000000000000000090081 +:10B45000040011000240000000000009008000000C +:10B460008084004000000004218902849000900242 +:10B47000C180080088000991C189A00008004141ED +:10B480002084040002802140800900850080800023 +:10B49000000000000000000000000005008800001F +:10B4A000000000000000000000000000000000009C +:10B4B00001419005C0841001A1C0828283820000F6 +:10B4C00000C00100000000000000000000000000BB +:10B4D000008200000000010000000000000900825E +:10B4E0000000C0C0820090000400C14140038340BE +:10B4F000A001C1C0010008888804058982A010103D +:10B50000840001A000C00110010002009020888486 +:10B5100004000000000000000000000000E0000047 +:10B52000000000000000000000000000000000001B +:10B530000000000000E007000000000000E007003D +:10B540004200000000000000600000000000000059 +:10B5500000000000000000000000000000000000EB +:10B5600007000000810000E007005021000000E01B +:10B570000700000A000000E000008400820000E0F4 +:10B5800007000000818100E00700000000000000CB +:10B5900007000000000000000000000000000000A4 +:10B5A0000C0A0C0A0000000000000000000000006F +:10B5B00000000000080A080AAA00F0000AFFFAFFCB +:10B5C0000C0FFCFF00000000000000000000000065 +:10B5D000000000000000000000000000000000006B +:10B5E00000000A0AC0CF80C0828200000000000074 +:10B5F000F0F00000AF8340402828003000A07D7D9F +:10B600007D0DEAAAC0C000000000AAFF2020008033 +:10B610000000000008000000000000000000000022 +:10B6200000000000F0F0000000000000000000003A +:10B6300000000000000000020002000000000A00FC +:10B64000FA000C00FCF00000000000000000000008 +:10B6500000000000000000000000000000000000EA +:10B6600000000000FAFAC0CF00C0828280A8C3C3E5 +:10B67000FF7DFF7DAF83AF8340402828003000006E +:10B68000FFFFFF0F0000C0C000000000AA00202044 +:10B69000008000000000000000000000000000002A +:10B6A000F5F503F300AA14140000000000000000E8 +:10B6B0000000000000000000001C000855045504B4 +:10B6C000FF3F003F1E1E1E1E000000000000000085 +:10B6D000000000000000000000000000000000006A +:10B6E000000000000000FA50EBEB0A010C00000023 +:10B6F0003C00000000003C3C3C3C555500003C3CFC +:10B700000000A0F5A0A0FCA0AAA00000000000007E +:10B710000000000000005F5FFF3C00000000000030 +:10B720000000050503F300AA050500000000000065 +:10B7300000000000000000000000001C000855147C +:10B740005500FF030003BE14BE14000000000000FB +:10B7500000000000000000000000000000000000E9 +:10B760000000000000000000FA5041410A010C00F6 +:10B7700000003C00FFFF20001C0C14005555000089 +:10B7800000000000B4F5B4B4282028200000000018 +:10B790000005000003000505FF3CFF3C0000000021 +:10B7A0000000000000615007000D000000000000D4 +:10B7B0000000000000610006000D000085610A091C +:10B7C000050100A100610009000100000061000600 +:10B7D000000D0000000000000000000000610006F5 +:10B7E000000D000000000000000000400008A561FE +:10B7F0005A0AC59D00A000610E0400090000A06166 +:10B8000000060095000080400006C09D0000006119 +:10B810000036C049000180005008000000A0000070 :10B820000000000000000000000000000000000018 -:10B83000000000000000000000003C004D4D000032 -:10B8400000000000000000000000000000000000F8 -:10B850000000000000000F0D000D000000000000BF -:10B86000000000000000000000000000F000F0FFF9 -:10B8700000000000000000000000000000000000C8 -:10B8800000000000000000002828EBEBCF45C3417A -:10B8900000000000000000FF00000000FFA9FEA85B +:10B8300000000000000000000000000000005FFFAA +:10B8400050F03AFF3AFFFFF0AFA0FC00FCFF000011 +:10B85000FFFFFFF0FBF0000000000000000030F0F0 +:10B860003CFF550045000000000000000000000003 +:10B8700000000000000400F03C3C3C3CF5B4F5B492 +:10B88000FA00C300DF00DF003CBECFCF00003C2841 +:10B8900000000000000F070F000000000000000083 :10B8A0000000000000000000000000000000000098 -:10B8B000000000000000000000000000FFC34D4D2C -:10B8C0000000000000000000000000000000000078 -:10B8D0000000000000000000FFFDF0FD000000007F -:10B8E0000000000000000000000000000000F00068 -:10B8F000F0FF000000000000000000000000000059 -:10B90000000000000000000000002828EBEBFF55BD -:10B91000F35100000000808080FF00000000FFFF66 -:10B92000FFFF000000000000000000000000000019 -:10B930000000000000000000000000000000000007 -:10B9400000000000000000000000000000000000F7 -:10B95000000000000000000000005F025F02000025 -:10B9600000000000000000000000000000000000D7 -:10B9700000000000000000000000000000000000C7 -:10B980000000000000000000000000000000555012 -:10B990000AFA0AFA0000000000000000000000009F +:10B8B0000000000000000000000000000000000088 +:10B8C0005F0F50003A003A005F500F00C000C0FF09 +:10B8D0000000FFFBFFA5FFF50000000000000000D6 +:10B8E00030F03CFF000000000000000000000000FD +:10B8F000000000000000000000003D3CFFFF551468 +:10B900005514FF00C3000000000000AA0F0F300014 +:10B910003C2800000004000F050F0000000000009C +:10B920000000000000000000000000000000000017 +:10B9300000000000000000000000C0F0C0F00000A7 +:10B940000000BFBFB0B0B4FFB4FF5F503F300FAADC +:10B95000FFAA000000007F007F050000000000003B +:10B960000000000000000000A2FF00000000000036 +:10B9700000000000DFFF080000200000C0C380823C +:10B9800050A000A000000000B2E2B2E300C000C579 +:10B990004343FF0001000000AAAAAAAA0000000079 :10B9A0000000000000000000000000000000000097 -:10B9B0000000000000000000000000000000000087 -:10B9C0000000000000000000000000000000000077 -:10B9D000000000000000000000000000FFD7FFD7BB -:10B9E0000000000000000000000000000000000057 -:10B9F0000000000000000000000000000000000047 -:10BA00000000000000000000000000000000555091 -:10BA100055500AFA0AFA0000000000000000000079 -:10BA20000000000000000000000000000000000016 -:10BA300040000000000001000010000400080400A5 -:10BA4000040000002000000990000084A08008008D -:10BA5000040000004002C00000000004400200009A -:10BA600000000000040000000000000500000003CA -:10BA7000C00004100008208000000000009020009A -:10BA800000080000000020008803000000000205FC -:10BA9000000020008400008040000000C000211150 -:10BAA0000080C180A1900088C080C00800002104EF -:10BAB00000002000000002004040000000000002E2 -:10BAC00000000000000000000082000000200020B4 -:10BAD00080000000000080010084000000020000DF -:10BAE0004000000200000000000000000000000014 -:10BAF00000000000004000C0052000004140002080 -:10BB000004004100000021C000000000000000000F -:10BB100000041000000000000010C14000400002BE -:10BB20004082004008020803211040400000080045 -:10BB30004000820088001000080008008800020011 -:10BB40000400000008000800084008000000000091 -:10BB50000000821040008200000000000040000051 -:10BB600008090204020002000010000000000800A2 -:10BB700004000000040090200020C000009000009D -:10BB800002000000091004000000C01000000200C4 -:10BB90000005001000000200001088100041004164 -:10BBA000020908008200820902C19002828008C155 -:10BBB000000504050000000000000000000000086F -:10BBC000000800000900050000C003C00008008252 -:10BBD00000100408000080000010000800844008E5 -:10BBE0000008000800C000000000200000880008D5 -:10BBF00000080508000080C0040940010508002075 -:10BC0000000800080004C0840090000000000088C4 -:10BC10000004001000080008000800900011001047 -:10BC200000080008020800880000000202832002C9 -:10BC30000002008200080000001000000000000068 -:10BC4000002100210021820000000000000200000D -:10BC50000008000890020000900800008400000026 -:10BC600000000000C02100000000000000210008CA -:10BC7000000000000021000084000000C00000401F -:10BC8000020000800021001000410000C0100000F0 -:10BC900000000020900800000040010000080000A3 -:10BCA00001004005C003004082089000000004002D -:10BCB00008808580020820000010008200820508AC -:10BCC0000000000000200010000000A000000000A4 -:10BCD0000002002000200020008408000000000076 -:10BCE000000000000000000000000208000000004A -:10BCF0000000000200000000000000A000000000A2 -:10BD00000000000000200000000809000000000002 -:10BD10000000400800080000000009000800400082 -:10BD2000080040C080000000002040A00010000873 -:10BD30000082000240020082000008008200A00091 -:10BD40000840080008040000000000110002000282 -:10BD500082000000000000020000000240004000DD -:10BD60000800002000000009004000000000004022 -:10BD7000000000000005C0200002000000000000DC -:10BD8000000000800808000000800000000500009E -:10BD9000081004110000000000000000080400006A -:10BDA000000082000002000500000004001100896C -:10BDB00000000000400001800000000900000000B9 -:10BDC000210000080000000000000000000000004A -:10BDD0000004000000000000000000000009000452 -:10BDE0000002A1A000000000020000900008030073 -:10BDF0000301000041040084050000010000080464 -:10BE00000004020008200040009000200000000014 -:10BE10000000800100000000001000000000000091 -:10BE20000000038400900001000000000090410029 -:10BE30000040040000A000A04002008800100000A4 -:10BE40000000000000110008820300000800010843 -:10BE5000A100001101000000000084001000021188 -:10BE600084000020000000030000000000410000EA -:10BE70008200820082210000C00000000800000053 -:10BE80000088080000800000000800000000040096 -:10BE9000000000000041000000000021000000033D -:10BEA000000000000041840800000400C000000001 -:10BEB0000000200820200800000000050402040003 -:10BEC0000000410000000000008400200800000085 -:10BED00002000820002008200300000000040000E9 -:10BEE00000000000000000A00000000000000000B2 -:10BEF00000100800000200A00088088200A00020B6 -:10BF0000000000200000002000840000000000006D -:10BF100000000000000000020040000000200000BF -:10BF20000000200005900500040804C00000410046 -:10BF300000000500000000020000000000044002B4 -:10BF400000202002004100000021000082000000CB -:10BF5000820000400000000000000000820000029B -:10BF600008000000002000110011000810009000DF -:10BF700000000000200000000000000000000000A1 -:10BF8000000000000000000310004000000000213D -:10BF90000005002000040000000800080003000065 -:10BFA0000000000000000000000090000000000001 -:10BFB0000021000000004041040040000100000397 -:10BFC000002000000010200400000000000000001D -:10BFD00000000800000400004100000211C0000041 -:10BFE0000000091000000400090002900000000099 -:10BFF0000000000408002000030000000000000012 -:10C00000000011100000410000020002804000000A -:10C010000000000000010040000000900900000046 -:10C020000000000000000000000000C00910000037 -:10C0300020840000000000000000200400004000F8 -:10C040000000200002A0000000000000000000002E -:10C05000000000010001021040400082C004C00046 -:10C060000000009002080100010020000001000013 +:10B9B000000000000000000000000000C3FFC3FF03 +:10B9C000000000001F1F1010B400B4005F503F3093 +:10B9D00000AAF0AA000000002F002F0500000000C0 +:10B9E0000000000000000000000020FF0000000038 +:10B9F000000000000000FFFF000000005555F0FFB0 +:10BA0000A0AA0000000000800080382838EB000069 +:10BA100000FF030300000100000000008080000020 +:10BA200000000000000000000000000000002000F6 +:10BA30000000000004000000000000000000000002 +:10BA40000000000020000010000020002000200066 +:10BA500040000400200000000000840000000000FE +:10BA6000041000002000C0000000C000000000031F +:10BA70000100000000000000000040800000008085 +:10BA8000000020800400000000008880000000000A +:10BA900000000080018000800000000200000080A3 +:10BAA00000000000200000000000208000000000D6 +:10BAB0000000000000000000000000000000000086 +:10BAC00040000000000000000000000080000000B6 +:10BAD00010008000000000000000000000000000D6 +:10BAE0004000000000000000000040004000000096 +:10BAF0000000100000000090000040000020000244 +:10BB00000020000000040000000000000010000001 +:10BB100000000000001004100010000000000000F1 +:10BB200000104000000000000000000000200000A5 +:10BB30000000000000000000000000000000000005 +:10BB400000000000000000000000000000000800ED +:10BB500000000000000040000000000002000000A3 +:10BB600000000000040000000000000000000000D1 +:10BB70000000000000000000400000000000000085 +:10BB80000000820010000400000008000809000006 +:10BB900008090805000082000800020008000200F1 +:10BBA00000009000000000000800080002000200F1 +:10BBB00090000800000000000000000000000000ED +:10BBC000000000000000000000000900000000006C +:10BBD0000000000000000000800000840000000061 +:10BBE0000000000000000000000000000000000055 +:10BBF000000000000000008800008000000000003D +:10BC000000000000000080000000000000C0008470 +:10BC1000000000000088000000000000000000009C +:10BC2000000000820000000000000000008800A06A +:10BC300000000000000800000000000000000000FC +:10BC400000000000000000000000000000002000D4 +:10BC500020000000000000000000000000000000C4 +:10BC600000000000000000000000000000100008BC +:10BC700000000000000000000000000000000000C4 +:10BC800000000000000000000000C000880000006C +:10BC900040000021880000800000404100000405B1 +:10BCA000001008200080009000000000004100000B +:10BCB0000000000001000041000000000000000042 +:10BCC0000000000000100000000000000000000064 +:10BCD000800080000084000000080000000000A038 +:10BCE00000A000000000008400000300000000101D +:10BCF0000000000000000000000000000300000041 +:10BD000000004082000008000000008400000000E5 +:10BD1000110091004000400005020084910200C023 +:10BD200000080000000000100011000800000000E2 +:10BD300000000010000008000000000000000000EB +:10BD400008000000000000000000000000000000EB +:10BD5000000000000000000000000000A000000043 +:10BD60000000000000000000000000004000A000F3 +:10BD7000000084000000200000080000080000000F +:10BD800008000800200004000000840000000000FB +:10BD90000000820008000000000084050080000010 +:10BDA0000000000000000000000000000000001182 +:10BDB000000400000000000000000000000000007F +:10BDC0000000000000000000000000000000000073 +:10BDD0000000000000000000000000000000000063 +:10BDE0000000000000000000000000000000000053 +:10BDF000000000000000000000000008000000003B +:10BE00000000000000000000008200900088210077 +:10BE10004000210420000090001009844000002010 +:10BE200000C00090000000040000000000000000BE +:10BE30000000000000400000009000000000000032 +:10BE400000000000000000000000000000000000F2 +:10BE50000000000000000100000000802100000040 +:10BE600000000000000000000000000000000000D2 +:10BE700000000000000000000000080000000000BA +:10BE80000000080082000000820000000240000064 +:10BE9000001000008205C0088208C0000800820867 +:10BEA0000003000000000008000000000000002166 +:10BEB000000000000000000800000000000000007A +:10BEC0000000000021000008000000000000000049 +:10BED00021000000000000C0201000C00004A040AD +:10BEE000000800000000000000000000000000004A +:10BEF00000000000000000000000000020104000D2 +:10BF00000000000000000000000000000004030129 +:10BF1000001021100000210008A00084000000840F +:10BF20000084400021000000051000000000000017 +:10BF30000400000008002100008400000000000050 +:10BF400000000000000000000000080000000000E9 +:10BF500000000000000000000000000020000000C1 +:10BF600020000000000000040000000000000400A9 +:10BF700000000000000000000008000000000000B9 +:10BF8000000000000000C0000000000020000000D1 +:10BF9000400810008204002102042021902188031F +:10BFA0002002A0000011004100090010000800005C +:10BFB0000400002100000000000204000000000056 +:10BFC000000000020000000000000000000000006F +:10BFD00000000000000000000000000000008000E1 +:10BFE0000000000000000000000000000000000051 +:10BFF00000900000000000000000000000000000B1 +:10C000000000080000000000000000040000000024 +:10C01000000000000000000000000004809000000C +:10C0200000000902000000000000009020840000D1 +:10C0300000000000000000000000000000002000E0 +:10C040000902000021C00000000000000000000004 +:10C0500000000000000000000000000000000000E0 +:10C0600000000000000000010001000100000000CD :10C0700000000000000000000000000000000000C0 -:10C08000000084000000000000000110000800A073 -:10C090000202022000820482402100000008C00940 -:10C0A0000000000000000000039001209004000840 -:10C0B000000101009000000110A00409008310029B -:10C0C000C00082000001A00100000000000000008C -:10C0D0000005004100100002C080008003808080C5 -:10C0E00080000000000000802011031100110021D9 +:10C0800000000000000000000000000000000000B0 +:10C0900003A00120408504A100010201100000005E +:10C0A00000A0001082050021024190C1008890820A +:10C0B0004000000000004000000000000000000000 +:10C0C0000920C008000410820000000000000000E9 +:10C0D0000000000000000000000000000000000060 +:10C0E00000000000090000000041002000400002A4 :10C0F0000000000000000000000000000000000040 -:10C10000000003000000000000000000110000809B -:10C11000000083800000008080008040001000103C -:10C120000008000000000000000021000380000063 -:10C1300000000002080900000021808200830082C4 -:10C1400080408041820300080003000000000000DE -:10C15000000000000000002000000000008200C07D -:10C1600080008000000300000080900004034080F5 -:10C1700040800000000000000000000000040000FB -:10C1800000000000000000000000000000000000AF -:10C19000000000008000002000800000000000116E -:10C1A00080408000000000000000000080000020AF -:10C1B0000000800000001000200008051100084168 -:10C1C000A0820880418003000410081000000000D5 -:10C1D000000000000000000000000000900040216E -:10C1E00040088482A000100188008890090800009F -:10C1F00001400804000000000000000000000001F1 -:10C2000000400000000000000000000000000000EE -:10C21000100000000000020020000440A000900078 -:10C220000400A08910000000000000000000880049 -:10C2300010019088A09000C00000000001000020C4 -:10C240000000A00901A0000201000101010300009B -:10C250000000000000000000000001000000C1908C -:10C2600000400840029040100008908200880000C2 -:10C2700000000001010100000000000000000000BB -:10C2800000000000000000010000000000010001AB -:10C29000001000010010002108080020000810080C -:10C2A0000008000400849008000000000000000066 -:10C2B000C08800081011009000000000000100007C -:10C2C000000201200083A0080040010405050005CC -:10C2D000000000000000000000002100020000003B -:10C2E000410000000000800080000080808000008D -:10C2F000000810054121402000000000000000005F -:10C3000000000000000000000020000500200002E6 -:10C310000001000000080000004080800000008054 -:10C32000808000802100020000000000000000006A -:10C3300000008000000800400008001000030021F9 -:10C3400000030080200409A10010008003848421E0 -:10C350000288000000000000000000020000000051 -:10C3600000000004808400000000000080A1008024 -:10C37000800021080300008080040000000000000D -:10C38000000000008000800080000000000000002D -:10C390000000000100008011000000008009000082 -:10C3A000808000000002808000008000000000000B -:10C3B0000000000000008080000000002100080054 -:10C3C00011000411210004082000911002A1210095 -:10C3D0002100040000000000000000000001000037 -:10C3E00000000000880120048284840000001009FD -:10C3F0000008080085A1820082840200000000007D -:10C400000000000020000400040002000000000002 -:10C410000000000000011000080400028200080073 -:10C420004088044088009001A0022088A0000000FD -:10C4300000000000000020008840A0201000010043 -:10C44000000000000000A12002040904A001001166 -:10C4500000000100000000000000000000000000DB -:10C46000000000000000000000000700480A000073 -:10C470000000070042000000000000000000000073 +:10C10000000000000000000000000000000000002F +:10C110000000A0902110808800A000201004802042 +:10C1200000200089418800A0004080848020000217 +:10C1300080C00000000000000000000000000000BF +:10C140000000090000800000808000000000000066 +:10C1500000000000000000000000000000000000DF +:10C16000000000080000000400002080040004001B +:10C1700008050000000000000000000000000000B2 +:10C180000000000000000000000000002000080087 +:10C1900009004100820005098400A08421001000EC +:10C1A0000500410300000003009100800000808032 +:10C1B00080028010000000008000000000000000ED +:10C1C000000000000000002100000000000000004E +:10C1D000000000000000000000000000000000005F +:10C1E00000000000000100000001000001C001008B +:10C1F000000001000000000000000000000000003E +:10C20000000000000000000000000000000000002E +:10C2100001000000010011840400A0A04140008240 +:10C220000188000001010000000100020008889060 +:10C2300040C00401040900008800080088000000D4 +:10C24000000000000000000000C0008400000000AA +:10C2500000000000000000000000000000000000DE +:10C2600000000000000000000400000000000000CA +:10C270000100890001000000000000000000000033 +:10C2800000000000000000000000000000000000AE +:10C29000000000002000000040850110844109C01A +:10C2A0000001000000010001040100000001A001E4 +:10C2B000040001C0208804040010004082A000A0F7 +:10C2C000000000000000000084900090008204C084 +:10C2D000000000000000000000000000000000005E +:10C2E000000000000000000000000000000004004A +:10C2F00000000300820002000000000000000000B7 +:10C30000000000000000000000000000000000002D +:10C31000000000000000000000008021030210A1C6 +:10C32000840800021009412100400002210909404F +:10C330000402830003000300090000800080000065 +:10C3400000800000000000000000000000000080ED +:10C3500080800000000000000000000000000000DD +:10C3600000000000000000000000000000000000CD +:10C37000000021800404030002020000000000000D +:10C3800000000000000000000000000000000000AD +:10C3900000000000008000000000000890891110DB +:10C3A000090082032111400009000205804080003D +:10C3B0000000000021200821400008000004008047 +:10C3C00000000000000000000000000000008002EB +:10C3D00000008000000000000000000000000000DD +:10C3E000000000000000000000000000000000004D +:10C3F00000000000014000010100000000000000FA +:10C40000000000000000000000000000000000002C +:10C410000000000000000040000000000001C10218 +:10C42000C021C084110101C001000000000004010E +:10C43000820090000200010001C00188010000009C +:10C44000002000100000000000000000000082003A +:10C450001001900004000000000000000000000037 +:10C4600000000000000000000000000000000000CC +:10C4700000E000000000000000000000600000007C :10C4800000000000000000000000000000000000AC -:10C490000000000000000000000000000700000095 -:10C4A0000000000007000000000000000000000085 -:10C4B000000000000000000000000000000042003A +:10C49000000000000000000000000000000000009C +:10C4A0000000000007000000000000E000000000A5 +:10C4B0000000000000000000000000000700600015 :10C4C000000000000000000000000000000000006C -:10C4D00000000000000060000000000000000000FC +:10C4D0000000000007000000000000000000000055 :10C4E000000000000000000000000000000000004C -:10C4F000FFC3FFC3F7F6E766F0F00000000000009E -:10C5000000000000000000006060E3600000000028 -:10C51000000000000000000000003C3C00FFFF3C69 -:10C52000C300F4F424246F7F0F3FF0F0F0F000001C -:10C530000030000000000000000000CFCFCFC3C1DA -:10C5400083810000000000000000010381C3FFFCA4 -:10C55000C3C0000000003C003C00000000000000E0 +:10C4F000000000000000000000000000000000003C +:10C50000000000000000000000000000000000002B +:10C51000000000000000000000000000000000001B +:10C520000000A020A08009000F0000000000000013 +:10C53000000042004206000000000000000000066B +:10C5400000F000000000C0F0F0F00000000000006B +:10C5500000002424F0FF0C3C99FF000000000000C4 :10C5600000000000000000000000000000000000CB -:10C5700000003C003C00F3F0C300F0F40024000095 -:10C58000000000000000000000006060606000002B -:10C590000000000000000000000000003C3C00FF24 -:10C5A000FF3CC300F4FF24FF667E003CE7FFC3FFAF -:10C5B00000060036000000000000000000898989A4 -:10C5C000C3C183810000000000000000090F99FF33 -:10C5D000BDBC8180000000003C007C6000000000C9 -:10C5E0000000000000000000000000000210200019 -:10C5F000008810840000000000000000000000001F +:10C5700000000000000000000000000000000000BB +:10C5800000000000000000000000000000000000AB +:10C59000000000000000000000000000000000009B +:10C5A00000000000C342C3030100030000000000BC +:10C5B000000000000000000000000000000000007B +:10C5C00000060000000000000030203000000000E5 +:10C5D000000000002424FFFF0C3C000000000000CD +:10C5E000000000000000000000000000000000004B +:10C5F000000000000000000000000000000000003B :10C60000000000000000000000000000000000002A :10C61000000000000000000000000000000000001A :10C62000000000000000000000000000000000000A @@ -142472,403 +142472,403 @@ :10C6400000000000000000000000000000000000EA :10C6500000000000000000000000000000000000DA :10C6600000000000000000000000000000000000CA -:10C67000000000000000CFCFCFCFFF30FF760000DA -:10C680000000FFFF000000000000000000000000AC +:10C6700000000000000000000000000000000000BA +:10C6800000000000000000000000000000000000AA :10C69000000000000000000000000000000000009A -:10C6A000F03CF03CF9F9F9F9FCF0FEF6F6FE667E96 -:10C6B000B0B0BDBDC381C3C00000000000000000D9 -:10C6C000FF3FF0300F0F0F0F0000000000000000D0 -:10C6D000FFFF404666FF66FF00000000000000000C +:10C6A00000000000000000008189E7EFFC00FC644E +:10C6B00000000000000000000000C3C300000000F4 +:10C6C0006F1F0000F0F0F0F000000000F900FF0024 +:10C6D000000000000000000000406666000000004E :10C6E000000000000000000000000000000000004A -:10C6F00000000000000000000C0C0C0C30307676BE -:10C7000000000000C3C3C3C300000000000000001D +:10C6F000000000000000000000000000000000003A +:10C700000000000000000000000000000000000029 :10C710000000000000000000000000000000000019 -:10C720000000F03CF03C090909093C007E66F0FC81 -:10C73000003CB0B0BDBDFF99FFF00000000000005C -:10C740000000FF0FF00024663CFF00000000000026 -:10C750000000FFFF40460099009900000000000023 -:10C760000000000000000000000000610006000D55 -:10C7700000000000000000100000000000000000A9 +:10C72000000000000000000000008181E7E7FC003D +:10C73000FC000000000000000000000100010000FB +:10C7400000000F1F00002000209000000000FF00EC +:10C75000FF000000000000000000C242E66600008A +:10C7600000000000000000000000000000000000C9 +:10C770000000000000000000000000610007000D44 :10C78000000000610006000D000000000000000035 -:10C790000000800000000000000000610006000DA5 -:10C7A000000000000061000E000D0000000000000D -:10C7B0000000000000610006000D00000000000005 -:10C7C0000000000000610006001D0001006100067D -:10C7D000000D000000610006001D00010061000660 -:10C7E000001D00000000000000000000000000002C +:10C790000000000000000000000000000000000099 +:10C7A0000000000000610006000D0000A06100060E +:10C7B000000D000000610004000900000061000697 +:10C7C000000D000005610A0E050D00A0000000002C +:10C7D00000000000000000000000000000000E004B +:10C7E00000900000000000000000000000000000B9 :10C7F0000000000000000000000000000000000039 -:10C8000000000000AAAA00AAF0FFC3C300000000B5 +:10C8000000000000D00FD000000000000000000079 :10C810000000000000000000000000000000000018 -:10C820003C3C3CBC000000000000F0F0FFFF0000BA -:10C8300000000000000000000000000000000000F8 -:10C8400000000000000000000000FA550055000044 -:10C85000C1F5FFFF00FF0C05FFFFF0FF000FFF1405 -:10C86000FF040000000000000000000000000000C5 +:10C82000000000000000000000000000000000B058 +:10C8300000BE3F001F002800EBC30F003F38000080 +:10C8400000000000042000000000000000000000C4 +:10C8500000000000000000000000000000000000D8 +:10C8600000000000000000000000000000000000C8 :10C8700000000000000000000000000000000000B8 -:10C88000000000000000AAAA00AAF0FF5555000011 +:10C88000000000000000100F100000000000000079 :10C890000000000000000000000000000000000098 -:10C8A0000000000000A0000000000000F0F0000008 -:10C8B0000000000000000000000000000000000078 -:10C8C000000000000000000000000000AA55005514 -:10C8D000C1F5C1F50E0E000E0C05FFFFF0FF000FB5 -:10C8E000FF00FF00000000F000000000000000005A -:10C8F0003C3C0000000000000000000000000000C0 -:10C9000000000000000000000500000001AB51FB2A +:10C8A0000000000000000000000000000000000088 +:10C8B000B0B0BEBE000000002820EBE30F003F3008 +:10C8C0000000000000000000C2FA000000000000AC +:10C8D0000000000000000000000000000000000058 +:10C8E0000000000000000000000000000000000048 +:10C8F0000000000000000000000000000000000038 +:10C9000000000000000000007D7DC0FC1000B000B1 :10C910000000000000000000000000000000000017 -:10C920000000000000000000000000000000000007 -:10C930000000000000000000000000FA00F300000A -:10C9400000000000000000000000000000000000E7 -:10C950000000FF3C003CAFFF05550000BEB0AEAE8E -:10C960000404000010000000000C000000000000A3 -:10C9700000003C3D00050000000000000000000039 -:10C98000000000000000000000005FCF50C0000069 -:10C990000000000000000000000000000000000097 +:10C92000000000000000000000000000000055FFB3 +:10C93000C0C0A0B0E0F000BE00BA00B000BE0A0A5D +:10C94000FFCF00007FFF0000000000200028000053 +:10C9500000000000000000000000000000000000D7 +:10C9600000000000000000000000000000000000C7 +:10C9700000000000000000000000000000000000B7 +:10C98000000000000000000000004141C0FC100F4A +:10C99000B00F0000000000000000000000000000D8 :10C9A0000000000000000000000000000000000087 -:10C9B000000000000000000000000000FAFAF3F39D -:10C9C0000000000000000000000000000000000067 -:10C9D00000000000FF3C003CAFFF0555BEB0BEB0FC -:10C9E000FFAE550400000000000000000080008041 -:10C9F000880000202000000000004004000000002B -:10CA0000000000002000000000040402000090006C -:10CA100000044004204000000000880040000000A6 -:10CA200000100002200001000800010000030108BE -:10CA300000000000208084004000000000022090E0 -:10CA4000400000001000200000000000C000C000F6 -:10CA50000000001104082180200800000003880065 -:10CA600000001100211084410483080000002120EF -:10CA700000200040100100900000000400000000B1 -:10CA80004000000000000000000000000005000061 -:10CA9000000000010001000000000000200810005C -:10CAA0000000000000820000080080000402000076 -:10CAB0000400000000000020400000000000000012 -:10CAC00000100004000000000000000800401100F9 -:10CAD0004100000000002140400200000000090069 -:10CAE000000021004000080140828020C0000000BA -:10CAF0000000044000000000084002100800000090 -:10CB00000400002000000000100090000040080415 -:10CB10000000020000000000044002000204044083 -:10CB2000011000090200020008100000100040403F -:10CB30000000044009000400040400100004040084 -:10CB400000000800010900020000000000000809C0 -:10CB500000000000404100009040404000030400FD -:10CB60000209040004809041024090410441028087 -:10CB70000310000009000000058200000000110001 -:10CB800000000008008400000000020402400000D1 -:10CB900083880084001000000400001000000000E2 -:10CBA000000040850308090000008040000000C02C -:10CBB00080080000800484008010801000840084BD -:10CBC00000840008800008040000000000040084C5 -:10CBD0000208008400108000001000008010044053 -:10CBE00010C0040800080840000008010082808886 -:10CBF00000100882000000008200000200000040D7 -:10CC00000040000000210008402100000400000056 -:10CC100000000000000804030008000510410000A7 -:10CC200000080000000500410021A00000080000ED -:10CC30000000002000000010002100030021000877 -:10CC400000000003001000000008C00000100403F2 -:10CC5000001000090008C00000099005040004212C -:10CC600040100008042100008400100008000005A6 -:10CC7000018300A008210000000003000000000064 -:10CC800000000000000000000000030000000000A1 -:10CC9000030041001108090280A000000008000004 -:10CCA0004108000000000000000003000000030035 -:10CCB000000000080801000000000840000000001B -:10CCC0000508000000080800000000000000000047 -:10CCD0000002110810080500098400000400000487 -:10CCE0000520090005040010080410000000804021 -:10CCF00000A00220001088080800081182114000DE -:10CD0000000808400002000400000009000004219F -:10CD100000410003100408020421000908008210E9 -:10CD20001011000082044002002100090005820069 -:10CD300000210002000982410000000000050000FF -:10CD40008211000800100002820200400011080059 -:10CD500004050010000408008241100400000009CE -:10CD6000001100000002820200100000080300020F -:10CD7000081008008440C002C08900880090008428 -:10CD8000210000000001000008000000090021004F -:10CD900000002000000000080001110000A00000B9 -:10CDA000000000000000000003001140020000002D -:10CDB0001100000041000000000000000000000021 -:10CDC0000900000000000008000000000001000051 -:10CDD000820000000000000000A00000000400002D -:10CDE000000400000008008500000084000000C06E -:10CDF000000180C1000000000000001000020000DF -:10CE0000000000000000000000110000000082008F -:10CE100008001000000000000000000000034000B7 -:10CE2000080000000008000000000021820000004F -:10CE3000820000000000C0000000000000000000B0 -:10CE400000000000000200000010000010000100BF -:10CE5000000300000000000888000000000500003A -:10CE6000000082008202000000000000000040007C -:10CE700002200008400200210405094100000000D2 -:10CE8000000000000000000008000000200000007A -:10CE900000842100030000A0400000200090040056 -:10CEA00080100000200000000000000000000000D2 -:10CEB000000000000000000000080000000000006A -:10CEC0000000000000C00000000200000008000098 -:10CED0000208000011100490000000000020000073 -:10CEE00000004008020208000000090000A0002025 -:10CEF000000000200000002100A0A000820008889F -:10CF00000008000800040000000000009104000078 -:10CF10008200000082040000008000400000000049 -:10CF2000001000100009004108211000000040041A -:10CF30009000000000000000002110029008000096 -:10CF4000000000410000000800050800004000004B -:10CF50008221000000000100000000210004000008 -:10CF600000410000000000008411000300410003A4 -:10CF70000000000000100000004100000020000937 -:10CF80000009000000000000020000000000400452 -:10CF9000020000900000000000000002030000C03A -:10CFA000000009000000080020000004000000004C -:10CFB000000400200000000000A00000000040006D -:10CFC00000000000009000000000000000000000D1 -:10CFD00000000000000000000800000000A00000A9 -:10CFE000000003000000000000000000000000003E -:10CFF0000000000000000000000020000000000110 -:10D000000000000000A001C0000290A0000000008D -:10D01000000000000000000000000000000001010E -:10D020000000000001090001408400000000000031 -:10D03000000000000403000300102011C0C0010024 -:10D0400082000290000000C00004008200C00000C6 -:10D05000000000000000C0A00010000200880000D6 -:10D0600000000000000000010000000100000100BD -:10D0700000009000000084000104880010C0A08817 -:10D0800090000010C004000011000000808000002B -:10D090000000000000000000000000000000040884 -:10D0A00040210041000920C0101180000000000054 -:10D0B0000000000000008020000400400020C000AC -:10D0C000020000000080000000000080000000005E -:10D0D0000000000000000000808000800080000050 -:10D0E000000000000000000000040009002000080B -:10D0F0002002020900030020000020000000800040 -:10D10000800080000000800080000008098000008E -:10D110000000080084001000000000000000000073 -:10D120008200030009000221208010000811020083 -:10D13000000000000000000000000041002100008D -:10D14000800000038080808000000000000000005C -:10D15000000000000000000000000000800000212E -:10D1600000000000000000000000000000000000BF -:10D170000000080021001000402180000080800095 -:10D180008400000000408080000088001001C0C0C2 -:10D19000C00000008800090000000000000000003E -:10D1A0000000022040002000A00101400000010119 -:10D1B00000000000000000000000000002001083DA -:10D1C000880008000201844008900000000000C0B0 -:10D1D000000000C0000000000000000090004000BF -:10D1E000020110000000000000000000009000009C -:10D1F0000000000001C0000000000101100000C09C -:10D20000A000080000000001A0820000020400004D -:10D21000A0089000000000000000000000000000D6 -:10D2200000000000000000000001000002000001FA -:10D2300001000100000000000000000088040088D8 -:10D240000084C040001000890002008800008200B5 -:10D2500000000400A0000000000000000000881092 -:10D2600000100088A0C000000000000000000000C6 -:10D270000100010000000000000083010000000523 -:10D2800000110009011110840040044002100080C8 -:10D29000000080890008000000000000000000007D -:10D2A00000000000000000051104412100000009F9 -:10D2B00000200541111000000000000000000000E7 -:10D2C00009804180850000850010000300030000F4 -:10D2D00020000000800000000000000000000000AE -:10D2E00000000000000080000000000000000000BE -:10D2F0000000080008000000000320040521400091 -:10D300000010008800A121A18000008000008000A2 -:10D3100080800000000000110000000000000000FC -:10D320000000000000000000090809000880041047 -:10D33000402100020800000300000000000000007F -:10D34000002080218080000000100000008000008C -:10D3500000000000000400000000000000000000C9 -:10D3600000008005808000008000000000000000B8 -:10D3700000002140200041004000218000001000FA -:10D380000504000000808000800200100000800082 -:10D3900000004090C002C090880000000088000893 -:10D3A0000000000000000000000000C000A0010418 -:10D3B000000001A1000001000000000000000000CA -:10D3C0000000900104038208400004004004840827 -:10D3D00090000000000000000000000000000000BD -:10D3E00000000000080020084002040000000000C7 -:10D3F00000000000010100000000010001400000E9 -:10D400000000000088008808A0840200A0008800B6 -:10D4100040A088000000000007000082000000001B +:10C9B00055FFFCFCAABEEBFF00AA00BAB0B0BEBE99 +:10C9C0000A0A00000000FFFF0000000000A000AA0B +:10C9D0000000000000000000000000000000000057 +:10C9E0000000000000000000000000002100001016 +:10C9F0002000200020000000000020002000000097 +:10CA000000002000200000002000000000000000C6 +:10CA1000400020000000040000002000200004006E +:10CA200000002000880088002000000000030000B3 +:10CA300001000000100000000000000000000000E5 +:10CA400000000000000000000000040000020000E0 +:10CA500001000000002100000000000000000000B4 +:10CA600000000080000000000000000000802000A6 +:10CA700000000000000000000000000000000000B6 +:10CA80000000000000000000000200001000100084 +:10CA90000000800200001000000000000000000004 +:10CAA0000000000000004000000000000000000046 +:10CAB00040404000000000000900000000040000A9 +:10CAC0000000000000000000000000000000000165 +:10CAD0000000040000000000000000000000000052 +:10CAE0000000000000100000000000000002001024 +:10CAF0000000000000000000000000000000000036 +:10CB00000000000000000000000000000000000025 +:10CB1000000020000082000800000040000000101B +:10CB200000040000001000100000000000100000D1 +:10CB300000000040000000000000000000000000B5 +:10CB400000000400040002100010020001000000B8 +:10CB500000000200040000000000000000000000CF +:10CB6000900000000220020004000000000000000D +:10CB700000000000000000080000000000000000AD +:10CB800000000000000000000000000000000000A5 +:10CB90000000000080000003000100000001000010 +:10CBA0000001000000000000000000000400000080 +:10CBB000000000000000000000080000000000006D +:10CBC0000000000000840000008800000000401009 +:10CBD0000000050000100000000800000000000038 +:10CBE0000000000000000000000000000000000045 +:10CBF0000000000000000000000000000000000035 +:10CC00000000000000000000000000000000000024 +:10CC10000000000000000000000000000000000014 +:10CC200000000002000800000000000000000008F2 +:10CC300000000000000040000000080000000000AC +:10CC4000900000000040904100100000000004002F +:10CC5000000000004000000800000000C0050400C3 +:10CC6000000000000000000000200000000500009F +:10CC700000000000000000000000000000000000B4 +:10CC800000000000000000000000000000000000A4 +:10CC90000000000000000000000000000000000094 +:10CCA000000000000001110000000300000003006C +:10CCB0000000400000000000000004A00400080084 +:10CCC0000000000003000582008800020002050049 +:10CCD0000010088441004000000000000000000037 +:10CCE0000000000800000000030000000010000029 +:10CCF0000000000000000000000000000000000034 +:10CD00000000000000000000000000000000000023 +:10CD10000000000000000000000000000805000006 +:10CD2000080002400000C0000000000000000000F9 +:10CD3000080000109000000000000021000000002A +:10CD4000001000000000000008008800080000003B +:10CD500000114000000200040103824100040004AD +:10CD600000110000000000040000000000040004A6 +:10CD70000040002000410000000900000000000009 +:10CD800000000000000000000000000000000000A3 +:10CD90000000000000000000000000000000000093 +:10CDA00000000000800100004100000000000000C1 +:10CDB0000000000000000000000000000000000073 +:10CDC0000000000100000000000000000000000062 +:10CDD00000C0000080000000000010000000000003 +:10CDE000000000000000000000040000000000C07F +:10CDF00000202000000000000000000000000000F3 +:10CE00000000000000000000000000000000000022 +:10CE1000000000000000000000000000080000000A +:10CE200000080000000000000000000000400000BA +:10CE3000000000410000820000000000000000002F +:10CE400000000000000000000005000000000800D5 +:10CE5000000000200800080000000000A000000002 +:10CE60000000001000000000000000000000820030 +:10CE70000000000000000041000000000000000071 +:10CE80000000000000000000000000000000001092 +:10CE90000000000000000000000000000000000092 +:10CEA00000000000008400000000000000000000FE +:10CEB0000000000000000000000000000000000072 +:10CEC000000800040000000003000800000000202B +:10CED000091002100000000400C008000800000053 +:10CEE000009000A0091008A0000000080000000841 +:10CEF00000000000000000002000000008004000CA +:10CF00000000000000000000000000000000000021 +:10CF10000000000000000000000000000000000011 +:10CF200008000000000000000000002100050011C2 +:10CF30000000000000080000000000000000820067 +:10CF400000000000000000000000000000000041A0 +:10CF500000000000004100008800000000004000C8 +:10CF600088000004004000090000000000040008E0 +:10CF7000000420000000000000000000000000414C +:10CF80000010000000000000000000000000000091 +:10CF90000000000000000000000000000000000091 +:10CFA00000000000000000000000008200000000FF +:10CFB0000000000000000000000000000000000071 +:10CFC0000000000000000000000020000000000041 +:10CFD0000000000000000000000000000000000051 +:10CFE00080000000000000040000000000000000BD +:10CFF0000000000000000000000000000000000031 +:10D000000000000000000000000000000000000020 +:10D010000000000000000000000000000000000010 +:10D020000000000000000000000000000000000000 +:10D0300008000000000000000000000000000000E8 +:10D0400000000000000000000000000000000000E0 +:10D0500000000000000000000000000000000000D0 +:10D06000A101820100011040000800820882000036 +:10D07000000000000000900000000000000000A080 +:10D08000900400A00002000000000000000000006A +:10D090000000000000000000000000000000000090 +:10D0A0000000000000000000000000000000000080 +:10D0B00011008000000000000000000000000000DF +:10D0C000000000000000000000080002000400044E +:10D0D0000000000000000000000000000000000050 +:10D0E00000098302000300088000008000000000A7 +:10D0F0000000000000000000000000000000000030 +:10D100000000800000000080000800000000000017 +:10D11000000000000000000000000000000000000F +:10D12000000000000000000002800900090008095A +:10D1300080008000800080000000000000000000EF +:10D14000000000000000000000008000000000005F +:10D15000801100000000000000000000000000003E +:10D160000000020020000400039000000040008046 +:10D1700000000000000000000000000000000000AF +:10D18000000000000041808000000000000000005E +:10D19000000000000000000000000000000000008F +:10D1A000000000000000000000000010000000006F +:10D1B0000101040010000800C00000000000000091 +:10D1C0000000000000000000000000000202020059 +:10D1D00088000400000000000000000000000000C3 +:10D1E000000000000082010000000188000000C073 +:10D1F00000A000000000000000000000000000008F +:10D2000000000000000004C182A0900000000000A7 +:10D21000000000000000000000000000000000000E +:10D2200000000000000000000000000000000000FE +:10D2300000000000000100000001000100000000EB +:10D2400000000000000000000000000000000000DE +:10D2500001000100010000000000000000000000CB +:10D2600000000000000000000100000000000408B1 +:10D270000002000404C000000000000000000020C4 +:10D280000010000800080090009000C0A0000000FE +:10D29000000000000000000000000000000000008E +:10D2A000000000000000000000000000000000007E +:10D2B000000000000000001000110008000800003D +:10D2C000000000000000000000000000000000005E +:10D2D0000000030010000800000000000000000033 +:10D2E00000000000000000000000032003040540CF +:10D2F00000000080008080000000000000000000AE +:10D30000000000800080008000000000000000009D +:10D31000000000000000000000000000000000000D +:10D3200000000000000000000000000000000000FD +:10D33000410221112100030800000000000000004C +:10D3400000000000000000000000000000000000DD +:10D3500000002110040009804000000000000000CF +:10D360000000000000000000000041000300090070 +:10D3700002400000000080000000000000000000EB +:10D38000000000000000000000008000000000001D +:10D39000000000000000000000000000000000008D +:10D3A000000000000000000000000000000000007D +:10D3B0000000011000010100010100000088008848 +:10D3C000000000000000000000000000000000005D +:10D3D0000000000001010008004001000000000002 +:10D3E00000000000000000000000000001880100B3 +:10D3F000000001010400A0000800840000000000FB +:10D400000000000000000000000000000400020016 +:10D4100084048400000000E0000000000000000020 :10D4200000000000000000000000000000000000FC -:10D4300000000000000000E0070000000000000005 -:10D440000000000000000000000000120081000049 -:10D450000700880000000000000007000000000036 -:10D46000000000000000000000000000500000006C -:10D4700000000000000000000000000000000000AC -:10D480000000000000000000000000008400000018 -:10D4900000000700000AA0E3A0E3FF3CFF3C0000FF +:10D4300000000000000000E000000000000000000C +:10D4400000000000000000000000000000000000DC +:10D4500000000000000000000000000000000000CC +:10D4600000000000000000000000000000000000BC +:10D4700000000000000000000000070000000000A5 +:10D48000000000000000000000000000000000009C +:10D490000000070050000000000000000000000035 :10D4A000000000000000000000000000000000007C :10D4B000000000000000000000000000000000006C -:10D4C0000000000000007DFF7D003010F0D005AFAF -:10D4D000C3C30000000400000000000000000000C2 -:10D4E0000000000000000000F0F0FFC30D0100008C -:10D4F000000000000000000000000000000000002C -:10D50000000000000000000000C00FCF000000007D -:10D510005FDF7FFF8A8A8A8AA0E3FFFF003C003C2E +:10D4C000000000000000000000000000000000005C +:10D4D000000000000000000000000000000000004C +:10D4E000000000000000000000000000000000003C +:10D4F0000000000000000000AAF0AA3C0A0F0B0F79 +:10D50000000000000000000000000000CFF5000057 +:10D51000D7D7F0F0F0C0F0C000000000000000001D :10D5200000000000000000000000000000000000FB :10D5300000000000000000000000000000000000EB -:10D54000000000000000000071FF7100F0F0F0F03A -:10D5500005AF05AF0000011400000000000000004E -:10D5600000000000000000000000F0F0FFC30D010B -:10D5700000000000000000000000000000000000AB -:10D580000000000000000000000000C00FCFBA0043 -:10D590000055FFFFFFFFAAAAAAA2FFFFF8285F55C8 -:10D5A0000F0000000000F0F0F0F0000000000000AC -:10D5B00000000000000014141414F0F0F0F000005B -:10D5C000000000000000000000000F008500AAAA73 -:10D5D000AAAA0000C3C3FD28FF280000555500007B -:10D5E00000000000000000000000000000BFFFBFBE -:10D5F000003800FA000000000000000000000000F9 -:10D60000000000000000000000000000FF3CFF3CA4 -:10D61000000055FF3030555500000000F828F8286C -:10D620007F7D3F3C0000000055FF55FF00000000DB -:10D63000000000000000000014141F14FFFF000091 -:10D64000000000000000000000000000FF00DF00FC -:10D65000AAAAAA0A0000C3C3F500FF00000075557E -:10D66000300000000000000000000000000000BECC -:10D67000FFBE3838FAFA0000000000000000000089 -:10D680000000000000000000000000000000FF3C5F -:10D69000FF3C000000EB1010555500FF00FF00613B -:10D6A0000006001D000000610006000D00010000E2 -:10D6B00000000000000000610006000D0000006195 -:10D6C000000E0001000000000000000000000061EA -:10D6D0000006000D000100610036000D0000000092 -:10D6E00005000A08050000A000000000000000007E -:10D6F000000000000010000000000000000000001A -:10D7000000610006000D000000610006000D000031 -:10D7100000613006000D00018000000000000001E3 -:10D7200000000000FF00FFFF0000000000000000FC -:10D730000000000000000000FF1FF01000000000CB -:10D740000F0F55553030BABA00000000000000003D -:10D75000000000000000000000000000A0A0A0BC2D -:10D7600000000000000000000000000000000000B9 -:10D7700000000000000000000000000000000000A9 -:10D780000000D414D7D70000000008085D5D8A00AF -:10D790008A0000000000C3AF00000000000000008D -:10D7A000000000000000000000FF0000000000007A -:10D7B00000000000000000000000FFDFF0D0F303D5 -:10D7C000F3030F0F555530FFBAFF000000000000B3 -:10D7D0000000000000000000000000000000A0A009 -:10D7E000A0A00000000000000000000000000000F9 -:10D7F0000000000000000000000000000000000029 -:10D8000000000000D414D7D700000000AAAAFFFF30 -:10D81000CF00CF0000000000C3AFFFFF00000000FA -:10D820000000000000000000FFAAFFAA00000000A6 -:10D83000F000F0FF0000000000000000FA00C2C28B -:10D840003F033F03FF00FFFF0AFF3EFF0000000011 -:10D8500000000000FF20FF000000000000000000AA -:10D8600000000000000000000000000000000000B8 -:10D8700000000000000000000000000000000000A8 -:10D88000000000000000000B0B0B00000000AAAA23 -:10D890000F3FF5553C3C00000000AAAA0000000024 -:10D8A0000000000000000000000000AA00AA000024 -:10D8B0000000F000F0FF0000000000000000FF0585 -:10D8C000C7C77D7D4141FF0000000A0A3E3E0000BF -:10D8D0000000000000002020000000000000000008 -:10D8E0000000000000000000000000000000000038 +:10D5400000000000000000000000000000000000DB +:10D5500000000000000000000000000000000000CB +:10D5600000000000000000000000000000000000BB +:10D5700000000000000000000000FFF0FF3C000F72 +:10D58000030F000000000000000000000000CFF5C5 +:10D590000000D7D700FFF0C0F0C00000000000007E +:10D5A000000000000000000000000000000000007B +:10D5B000000000000000000000000000000000006B +:10D5C000000000000000C3824500000000000000D1 +:10D5D000000000000000000000000000000000004B +:10D5E0000C0C0C0C0000000000000000000000000B +:10D5F000000000000000000000000000FFFF02AA81 +:10D60000000000000000000000000000000000001A +:10D61000000000003030B030F000F00000000000EA +:10D6200000000000000000000000000000000000FA +:10D6300000000000000000000000000000000000EA +:10D640000000000000000000C38241000000000054 +:10D6500000000000000000000000000000000000CA +:10D6600000000C0C2C0C000000000000000000006A +:10D670000000000000000000000000000000FFFFAC +:10D68000000000000000000000000000000000009A +:10D690000000000000003030B0300F0F00000061CB +:10D6A0000006000D00000000000000000000000067 +:10D6B0000000000000000000000000000000004129 +:10D6C0000004000D000000610006000D00050000D0 +:10D6D000000000000000000000000000000000004A +:10D6E00000610006000D00000000000000000000C6 +:10D6F000000000000000000000610006000D0000B6 +:10D7000000000E000000000000000000000000000B +:10D71000000000000000000000000E0000000000FB +:10D7200000000000000000000000000000000000F9 +:10D7300000000000000000000000000000000000E9 +:10D740003535F0FF00000000000000001000500020 +:10D7500000000000000000000000000000000000C9 +:10D760000000000000C200000000000000000000F7 +:10D7700000000000000000000000808000A0FF5FAB +:10D78000FF5F00000000000000000000000000003B +:10D790000000000000000000000000000000000089 +:10D7A0000000000000000000000000000000000079 +:10D7B0000000000000000000000000000000000069 +:10D7C00000003535000F0000000000000000505040 +:10D7D00050500000000000000000000000000000A9 +:10D7E000000000000000C2C20000000000000000B5 +:10D7F000000000000000000000000000A0A000A049 +:10D800000000FF5F000000000000000000000000BA +:10D810000000000000000000000000000000000008 +:10D8200000000000000000000000000000000000F8 +:10D8300000000000000000000000000000000000E8 +:10D840000000000000000000F5F0C1C00000000072 +:10D8500000000000000000000000000000000000C8 +:10D86000000000000000370007000000000000007A +:10D8700000000000000000000000000000000F0792 +:10D880000707000000010000000000000000000089 +:10D890000000000000000000000000000000000088 +:10D8A0000000000000000000000000000000000078 +:10D8B0000000000000000000000000000000000068 +:10D8C00000000000000000000000550041000000C2 +:10D8D0000000000000000000000000000000000048 +:10D8E0000000000000000000340004000000000000 :10D8F0000000000000000000000000000000000028 -:10D90000000000000000000000EBEBEB0000000056 -:10D91000FFFF0F3FF000000000000000AAAA000077 -:10D9200000000000000000000000040000040000EF -:10D93000100000000004000000000000000084004F -:10D94000020000002008000000000000000040006D -:10D950000000000000040040000000000000200063 -:10D960000000040020080000000002080000400041 -:10D970002000000000000000A000000000000000E7 -:10D98000000800000000000000020000100000007D -:10D99000A00340001008C000000482020000000044 -:10D9A000000000000000000010080000000000005F -:10D9B0000000000000000000400000000000000027 -:10D9C00000000000200000024000100200000000E3 -:10D9D0000000000000000000000000000000400007 -:10D9E00000000000000040040008000000000000EB -:10D9F000000000000000000000080000000000001F -:10DA000000000000000041004100008400C0000050 -:10DA100000C00000410000040000000240C00008F7 -:10DA200010400000000040024000000000400040A4 -:10DA300000000000000500000000000002101000BF -:10DA40000003000400000210000400030241004033 -:10DA50000000001000090004000000000000004069 -:10DA6000824000040000844002050000000008001D -:10DA700000400200082000000000000000050041F6 -:10DA80000404000004100040004000210200004097 -:10DA90000003000020000000004010400009820048 -:10DAA00000400000020000000040000004400000B0 -:10DAB000000000000010000800000000000000004E -:10DAC0000084030000000000000005000010008436 -:10DAD0000000000800082040000003000404008447 -:10DAE000001000100082001000040002004000003E -:10DAF00000000088008400040000000000024000D4 -:10DB000000840008008800000000000800040004F1 -:10DB1000048800080010000800840088001000102D -:10DB2000000800040040008800000010000000848D -:10DB300000000000000000080000000000000000DD -:10DB400000000000000082000008000000008400C7 -:10DB50008210820800004000000000000000000069 -:10DB60000008000000210003000000000000000089 -:10DB7000000000030000000500080008000800087D -:10DB80000000000000009008200088000000004114 -:10DB90000005002100008821880590000000C003D6 -:10DBA00000048410C0002040A00088080000840009 -:10DBB0000040000000000000004000840000000061 -:10DBC000004004000000418200000000000000004E -:10DBD000000000000000000000A000880000008499 -:10DBE00040820000000000000000080000A0008447 -:10DBF00000200000051000000000000000000000F0 -:10DC000000000008000800000000050011100010CE -:10DC100009A02000100841000804030000000900CA -:10DC20000008000800000408009000080000000040 -:10DC300000000000000010000000040200000000CE -:10DC400000000002080482040004004000050002F5 -:10DC50000004001000020000000900000011001183 -:10DC60000040004000400011000000000040002182 -:10DC7000000000040000000000000000004000045C -:10DC8000000000000020004000000000080000101C -:10DC90000800000000000800000000000041000033 -:10DCA0000000000000000000000000000000000074 -:10DCB000C000000000000082000000080484000092 -:10DCC00000000000008200A0090000080008000019 -:10DCD0000090000000100002088800A01100000061 -:10DCE0000000410800000090000002004000000019 -:10DCF0000000000000000000004000900000210033 -:10DD0000000000004000000000001188051020A065 -:10DD100002C0020000100000000000C0000000105F -:10DD2000000003100000004003000004110000C0C8 +:10D900000A02020200000000000000000000000007 +:10D910000000000000000000000000000000000007 +:10D9200000000000000000000000000000000000F7 +:10D9300000000000000004000000000000000000E3 +:10D9400000000000000000000000000000000400D3 +:10D9500040000000000020020000000000008400E1 +:10D960000000000040000000000010000000000067 +:10D970000000200000000000100000000000000077 +:10D980000000000000032000000020000000000054 +:10D990000000000000000000000000000000000087 +:10D9A0000000000000000000000010000000000067 +:10D9B0000000000000000000000000000000000067 +:10D9C0000000000000000000000010000000000047 +:10D9D00000000000400040000000000000000000C7 +:10D9E0000000400040000040100000000000000067 +:10D9F0000000000000000000000000000000000027 +:10DA00000000000000000004000000001000000002 +:10DA100000000000000000000000000000004000C6 +:10DA200000000000000000000000000000000000F6 +:10DA300000000000000000000000000000000000E6 +:10DA400000000000000000000000000000000000D6 +:10DA500000000000000000000000000000000000C6 +:10DA60000000000000400000000000000000000076 +:10DA70000000000000000000000000400000000066 +:10DA80000000000000000000000000000000000096 +:10DA90000000020000000040004090000000004034 +:10DAA0008200000000000000000000008400000070 +:10DAB000000000000000000000000008000000005E +:10DAC0000000000000000000000000000000000056 +:10DAD000000000000000000000000008000000003E +:10DAE0000000000000000000000000000000000036 +:10DAF00000080000000000000000000000100010FE +:10DB0000000800000000000000000000000000C04D +:10DB100000080000000000000000000400000000F9 +:10DB200000080000000000000000000000000000ED +:10DB300000000000000000000000000000000000E5 +:10DB400000000000000000000000000000000000D5 +:10DB500000000000000000000000000000000000C5 +:10DB60000000000000000005000000000000400868 +:10DB70000000000000000000880004000000900089 +:10DB80000000200000000000000000008800C0002D +:10DB90000000880000000000820000000008000073 +:10DBA00000000000000000000000A00000000000D5 +:10DBB0000000000000000000000000000000000065 +:10DBC0000000000000000000000000000000000055 +:10DBD00000000000000000000000008400000000C1 +:10DBE0000000000000000000000000000000000035 +:10DBF000000000000000000000000800000000001D +:10DC000000000500000041000000000000000020AE +:10DC1000004000000000000000C0000008000000FC +:10DC200000000000000000000000000000000000F4 +:10DC300000000004000000000000000000000000E0 +:10DC400000000000000000000000000000000000D4 +:10DC500000000000000000000000000000000000C4 +:10DC600000000000000000000000000000000000B4 +:10DC7000000000000000000000000009000000009B +:10DC8000000000000000000000000000A0000000F4 +:10DC90000000000000000000004000000002000042 +:10DCA0000041000008400000004000040040004027 +:10DCB0000000000000000000000000000000000064 +:10DCC0000000000000000000000000000000000054 +:10DCD0000000000000000000000000000000000044 +:10DCE0000090000000A000000000000040000000C4 +:10DCF0000000000020000000000000000000000004 +:10DD00000010000000C00010000000000000000033 +:10DD10000000000000000000000000000090000073 +:10DD200000000000000000000000000000000000F3 :10DD300000000000000000000000000000000000E3 -:10DD4000000000000000084000000000004100004A -:10DD500000000008000000000000000000000400B7 -:10DD600000000000000000000000000000080000AB -:10DD70000000000800030000000000000008000090 -:10DD80000000000000000000001000000000000083 -:10DD9000000000000000080000000000000000205B -:10DDA00088000000000040000000000000409000DB -:10DDB000000000000000000000000002000220003F -:10DDC0000020000000200488000000000000000087 -:10DDD0000000000000000000001000000000000231 -:10DDE000048800000000000000002100000800007E -:10DDF00000A008A0000000A000000000000000003B -:10DE000000000500000000000000000000880088FD -:10DE100000A02090040000900000200800C0000036 -:10DE20000090088440000500000000000000001081 -:10DE3000000811A000080008001000000008000001 -:10DE400000000000000000000000000800080000C2 -:10DE500000000000000000000000000000200000A2 -:10DE6000000000008400000000000000000000002E -:10DE7000000300000000000000004000000000005F -:10DE8000000000080000000000000010000000007A +:10DD400000000000000000000000000000000000D3 +:10DD500000000000000000000000000000000000C3 +:10DD600000000000000000000000000000000000B3 +:10DD700000000000000000000000000000000000A3 +:10DD8000000000000000040000000000000000008F +:10DD9000080000000000000000000000000000007B +:10DDA0000000000000000000000000000000000073 +:10DDB0000000000000000000000000000000000063 +:10DDC0000000000000000000000000000000000053 +:10DDD000000000000000000000000008000000003B +:10DDE00000A000900000008805080000000000006E +:10DDF00000000000000000000000000009204000BA +:10DE000000880000002000080000000000000088DA +:10DE100000000400000200A0000000000200020058 +:10DE200000000000000000000000000000000000F2 +:10DE300000001000020000000800030000000000C5 +:10DE400000000000000000000000000000000000D2 +:10DE500000000000000000000000000000000000C2 +:10DE600000000000000000000000000800080000A2 +:10DE7000000000000000000000000008000000009A +:10DE8000000000000000000000000000080000008A :10DE90000000000000000000000000000000000082 -:10DEA0000000000000400000000000000821000009 +:10DEA0000000000000000000000000000000100062 :10DEB0000000000000000000000000000000000062 -:10DEC0000000110002040000110400880900000095 -:10DED00000A000000000110000C02002090804009A -:10DEE00004000040040020020000000020000000A8 -:10DEF00000000000000040001104000400000000C9 -:10DF000000000002000000000000000800A0000067 -:10DF1000000800002020000800C0091011880082BD -:10DF20002000001000400000000420C0000020007D -:10DF300000000000100000000000000000000004CD +:10DEC0000000000000000000000000000000000052 +:10DED0000000000000000000000000000000000042 +:10DEE00000000000008400000000000000000000AE +:10DEF000000000000000000000000000000800001A +:10DF00000000000000000000000000000000000011 +:10DF100000000000000000000000000041000000C0 +:10DF200000000500000005000000000000000000E7 +:10DF300000000000000000000000000000000000E1 :10DF400000000000000000000000000000000000D1 :10DF500000000000000000000000000000000000C1 :10DF600000000000000000000000000000000000B1 @@ -143023,918 +143023,918 @@ :10E8B0000000000000000000000000000000000058 :10E8C0000000000000000000000000000000000048 :10E8D0000000000000000000000000000000000038 -:10E8E00000000000000000800020002004200080C4 -:10E8F0002000201020200000000000800200000006 -:10E9000000028803820400000000000000000010E4 -:10E91000200040040004000000001000040000007B -:10E920000080C008200000010000040004008200F4 -:10E93000A000C000010084000005080500000005DB -:10E9400000000008020002000000884100000000F2 -:10E95000A01100000200000000002083820082005D -:10E960004000000020000000002040010001C00322 -:10E9700000200000090000410000000000204100CC -:10E980004100410100000000400000820020000022 -:10E9900000080500000100010000000000000082E6 -:10E9A00040044004000010000000000011000000BE -:10E9B00000020000000040000900400080000090BC -:10E9C00000004100000000008000000011000990DC -:10E9D00000004090000009A000004102001040002B -:10E9E00021004100000040900082000000C0002093 -:10E9F00000A0010000000000A000000091052120FF -:10EA0000C0400841004101000800088000000000EB -:10EA100088410009002000000200000000000005FD -:10EA2000000008C020000080084100000400010030 -:10EA30000000010400080110009088400000001050 -:10EA40000200000009080310C11000100000890036 -:10EA50000800011008020810000089100000084199 -:10EA60000900021002000408020004000040002017 -:10EA700000A1202140000084400803000000200085 -:10EA8000A085000088080000080888000004000035 -:10EA90000008000400040000208408000008008230 -:10EAA00000C000848002801003028040000000004B -:10EAB0000208001040080084400100020288008221 -:10EAC000000800880082408440000809000000001F -:10EAD00040880008080800850301040840080084F5 -:10EAE000890240C000C0000400C000840000022170 -:10EAF0000002000800052000040000008802000851 -:10EB00000000900001088421402100400002002103 -:10EB100000100003000800210002000000030005AF -:10EB20000000000500100108000000400104000082 -:10EB3000000000000008000500050021000400009E -:10EB40000000000000000010000200210080000012 -:10EB50000002880800800404030308210000042147 -:10EB6000C0218400002110080003000300400008B9 -:10EB70000000000000000000008880A000000000ED -:10EB80000000000000000400000000000010000170 -:10EB900002000000000000900000000100080000DA -:10EBA00000000000000000004000000000002041C4 -:10EBB0000000000000000000000000000000400015 -:10EBC00009000000410021000001000109000002CD -:10EBD0000900090041000510000040000408000081 -:10EBE0000088000000000400000000000020000079 -:10EBF000000000910089081004000000002084003B -:10EC00008220008300200000084108050040001118 -:10EC10000004020500000000000000004040000960 -:10EC20000800000000404000084000000040401084 -:10EC30008200000000000000820082400005080001 -:10EC40001005000020000400080240100000000031 -:10EC50000880081000000800A00008000800081044 -:10EC60000000000000020000200020020000000060 -:10EC700000000800002000200089000000080204B5 -:10EC800020400900002004410500042000C0218824 -:10EC90000004009020880008008800880020000000 -:10ECA000008400A0000400000004000800A021A0CF -:10ECB000C091090000000000211000002000008227 -:10ECC00000820084008400000004000080840004AE -:10ECD00000008002000100A00400009000A00000DD -:10ECE0000082000000000001000000A00001000000 -:10ECF000000000200000820300008209000840009C -:10ED0000A00340200410002108088208100000051C -:10ED100040080002000800800040000000000000E1 -:10ED200040850000000000000020000800000000F6 -:10ED30000000000000000000000000009000001132 -:10ED4000000000000808000084088400088208030E -:10ED50000000C000400300030010C005091040047B -:10ED600000400400A02108000021040000008208E7 -:10ED7000820082000000000000000000000000008F -:10ED8000000000008000008800000000000000007B -:10ED900000008000000000000004000000000000EF -:10EDA00000008002000000000000000000000000E1 -:10EDB0000000000000000000000000000000000053 -:10EDC000000000000000000000000090000480101F -:10EDD0000000000041008000200000A11100880117 -:10EDE000800040000000000000000000000004203F -:10EDF0000004000000000000110000082020200393 -:10EE0000002100A0000020410003040310000805B9 -:10EE10001000001100000009004000042000004123 -:10EE20000000004000000008000800102008000555 -:10EE30000000900320000811000000000000000006 -:10EE400000200000000000008200000820110209DC -:10EE5000000800080000C0000811004182050200FF -:10EE60000800000000400041000000040000C00055 -:10EE700000040004011100000004200004840010BC -:10EE8000000000000220000011904040800020049B -:10EE900021002020204020020420009020000008B3 -:10EEA00000000284200800000000040400000000AC -:10EEB0000000000000100000020000000000000040 -:10EEC00000000020000020000000000020000000E2 -:10EED0000088020000000004000009000040000259 -:10EEE00040000000110000000000000000000000D1 -:10EEF0000000000000004000004000020000000090 -:10EF0000000000000000000400020804900400005B -:10EF1000001101104020C001040010008200000117 -:10EF20000000000000000001040088010001000052 -:10EF3000000000000000C00040000100820000004E -:10EF40000000000004000000100801200084880078 -:10EF500001A090104000104003A104908220821074 -:10EF6000000801040284000400A0A18200400008FF -:10EF7000000800200200000800010000000000005E -:10EF80000000000000000000002000030089801045 -:10EF9000002011100590001185102110000480023E -:10EFA0000004000002090040000885000011000272 -:10EFB00000000000000000008008001040088008E9 -:10EFC0000000000005008000000080100403001015 -:10EFD00000100880218000000000A0901140004136 -:10EFE000808200801080000000000080C080000847 -:10EFF0000088000903038020004000400005000352 -:10F000000020000000000000008084008310400009 -:10F01000A100020020008380A1089100C041890462 -:10F02000110000000000000000000200210040006C -:10F03000030000000000000000008000900490A089 -:10F04000020000000000000000000000800010002E -:10F0500085008821C100A003C08910008800050335 -:10F060008000C021000000008080004003002010CC -:10F0700000000310090020004000400000000000D4 -:10F0800000000000000000A0000000C08800050093 -:10F0900002901190002000001010090940040301A3 -:10F0A0000204A000000000000000000000C00100F9 -:10F0B0000100010000000000000000004084050184 -:10F0C0000808A00000000800100008000000080266 -:10F0D0000200A10008918800110183A08884092002 -:10F0E0008200A0C0110190400000A0A0840000A0F8 -:10F0F000000000020102000001000000000000000A -:10F100000000000000000108008282080008A00042 -:10F11000011004A003000001001002000008008894 -:10F120000102058500210000000000000000000031 -:10F13000000184000000000000000000000000A1A9 -:10F140000004088300A0000000000001000100018D -:10F15000204000020409A00802000001000910007C -:10F1600000A00103104110C08401000000C010C1C4 -:10F1700040000000C1010400020001000000020084 -:10F1800000000000010000004080008000801100AD -:10F19000000903A08302842000080884A010001046 -:10F1A000002008A0882100030000000000000000EB -:10F1B00000400040001100030000000000000000BB -:10F1C0000004000000A10040000000050004004011 -:10F1D00000040080110920A180910011000800A105 -:10F1E00080000005208303219104000800110041E4 -:10F1F00000088005030410210040000902400909AD -:10F200008040000021000400000000000005000014 -:10F2100000000004008080808008A183100241006B -:10F22000030280218821000080030000000000000C -:10F23000000009804100200040080000000000009C -:10F240000000218080040000020000000000000097 -:10F250000000000011800400400040000080000019 -:10F260000080804020A1211111800302800209A0AA -:10F270001080890008A10521840083080080000017 -:10F28000000000410002000000000000000000003B -:10F290000000000002910240044002010940018880 -:10F2A000C0000000401105A0A040040000000000C4 -:10F2B0000000000000A000000100000100000000AC -:10F2C0000000000005400485A082C100000000008D -:10F2D00000100088000000A0000800C00100040227 -:10F2E000028808040801C0418490908284010200D1 -:10F2F00040A0018210008803A0000900090100025B -:10F3000000000000000100010000000000000000FB -:10F3100000000700000A00000000070000000000D5 -:10F3200000E00700000000000000000050000000A6 -:10F3300000E000000000000000E00000000000000D -:10F34000000000000000000000E00000420000009B -:10F3500000000000000000000000000000000000AD -:10F36000000000000000000000000000000000009D -:10F37000000000000000000000000000000000008D -:10F38000000000000000001200000000000000006B -:10F3900000000000303F00FFAA00FAF0FFF0FFF08D -:10F3A000FAFA505000000F0F00FF40FF28282828CD -:10F3B000000000000000000000000000000000004D -:10F3C0000000000000000000000000FF303030BAF4 -:10F3D0000000000000000000000000000000FFFA34 -:10F3E0003C3CF5F5343400000000F05030103F3F55 -:10F3F0001717C341FF55000000FF407C437F00000A +:10E8E0000000000000000000000000000000000028 +:10E8F00000000000000000000000200020000000D8 +:10E900000000000000000000000000000000000007 +:10E9100000000000000000000000000000000000F7 +:10E92000000000000000000200090000000000805C +:10E9300000000400000000000000000000000000D3 +:10E940000000008000040020000200000000000021 +:10E9500000000000000000000000000000000000B7 +:10E9600000000000000000000000000000000000A7 +:10E970000000000000000000000000000000000097 +:10E980000000000000000000000000020000000085 +:10E990004084000000000000400040000000000033 +:10E9A0000000000000000000000000000002000263 +:10E9B000000400000000000000000000000000A0B3 +:10E9C00000000000002000020001000000A0000084 +:10E9D0000000000000020000000000000000000233 +:10E9E0000000000000000000000000000000000027 +:10E9F00000080000000000000000000010000008F7 +:10EA00000800000000000200080000100009084192 +:10EA100008080200000008000000080000000000D4 +:10EA20000000000082000000000000000200020060 +:10EA300000000204000000000200000002000000CC +:10EA4000000000000000000020400000000008005E +:10EA500000000000000000000000020002000000B2 +:10EA60000200004000000000000002000000000062 +:10EA70000000000000080000000000000000200866 +:10EA8000001000000000000800000000000000006E +:10EA90000000008800840000000000000000000862 +:10EAA00000820000000000080000000000000000DC +:10EAB00000000000001100000000000000840000C1 +:10EAC00000080000000000000008800000000000B6 +:10EAD0000000000000000000000000000000000036 +:10EAE0000010000000000000004000000000900046 +:10EAF0000000000000000000000000000000000016 +:10EB00000000000000000000000000000000000005 +:10EB100000000000000000000000000000000000F5 +:10EB200000000000000000030000C0000000000022 +:10EB300004000000040000000000000000000000CD +:10EB4000000500050000000040080100000041022F +:10EB50000000108000009000000000000000000095 +:10EB60000000000000000000000000000000400065 +:10EB70000000000000000000000000000000000095 +:10EB80000000000000000000000000000000000085 +:10EB9000000000000000090000000000000000006C +:10EBA0000000000000000000000000000000000065 +:10EBB00000000000000080000900000000000000CC +:10EBC0000000000000000000002000012000000004 +:10EBD000840100400004000000000000000000006C +:10EBE0000000000000000000000000000000000025 +:10EBF000000000000000000000000800000000000D +:10EC0000000008000000000000008200001000006A +:10EC100000000011000000000200000000000000E1 +:10EC20000000A000000008008200000000000000BA +:10EC300000000000000000000400040000000000CC +:10EC40000000A00000000000820082000000000917 +:10EC500000000000000000000000000000000000B4 +:10EC60000000000000000040000000040000000060 +:10EC70000040000400000000000000000000000050 +:10EC80000000000000000000000000000000000084 +:10EC900000000000000000000000800000000000F4 +:10ECA0000000000000000200000000000000000062 +:10ECB00000000082000000000000800080000000D2 +:10ECC0000000000000000000000000002000000024 +:10ECD000200000002084200000400000000002000E +:10ECE00002200200000000000004200000000000DC +:10ECF000000400820000000000000000000000008E +:10ED00000000000000000000000000000000000003 +:10ED100000000000000000000000000000000021D2 +:10ED200000000000000000000000000008000000DB +:10ED3000000000000000000000004000001001A0E2 +:10ED4000000000000000002100000000820082009E +:10ED50000100040020004000000000040000000446 +:10ED600000000000000000000000000000000000A3 +:10ED70000000000000000000000000000000000093 +:10ED80000000000000000000000000000000000083 +:10ED90000000000000000000000000000000000073 +:10EDA0000300000000000008000000000000000058 +:10EDB00000000000000000000000000080001000C3 +:10EDC00004050000000000200000000000000020FA +:10EDD00000001000800080008000000000010000A2 +:10EDE000030100000000000000000000000000001F +:10EDF0000000000000000000000000000000000013 +:10EE00000000000000000000000000000000000002 +:10EE10000000820000000000000000000000000070 +:10EE2000000082210000000000000000000000003F +:10EE3000000088000000C00040000000000000004A +:10EE40000000200000210000000000000000000081 +:10EE5000820082000040914002008300000500040F +:10EE6000000900C000400000000000000000000099 +:10EE70000000000000000000000000000000000092 +:10EE80000000000000000000000000000000000082 +:10EE90000000000000000010100000000000000052 +:10EEA000000000000000000410000000000000004E +:10EEB000000000000000000400000000000000004E +:10EEC00000000000800000000000000000000000C2 +:10EED00000000000000000002000000040000000D2 +:10EEE00000000004200400000800000404000000EA +:10EEF000000000000000000400000000000000000E +:10EF00000000000000000000000000000000000001 +:10EF100000000000000000000000000000000008E9 +:10EF2000000400400000000000000000000000009D +:10EF300000000000000000000000000000000000D1 +:10EF400010844082040482040000000000000000DD +:10EF500000000000000000004088A10090A082088E +:10EF600000018500410000010000000000000000D9 +:10EF70000000000000000000000000000000000091 +:10EF80000000000000000000000000000000000081 +:10EF90000000000000000000000000000000000071 +:10EFA0004080000000800000000000000000000021 +:10EFB0000000000000000000000000000000000051 +:10EFC00000008400A180000080800000000000009C +:10EFD00000000000000000000000800003008480AA +:10EFE00080800020030303050010000000000000E3 +:10EFF0000000000000000000000000000000000011 +:10F000000000000000000000000000000000000000 +:10F0100000000000000000000000000000000000F0 +:10F02000000000000021008000000000000000003F +:10F0300000000000000000000000000000000000D0 +:10F04000000000008500A103C0899082000000003C +:10F05000000000000000000000000000C18020113E +:10F060008391C1A100800300034005C0000000009F +:10F070000000000000000000000000000000000090 +:10F080000000000000000000000000000000000080 +:10F090000000000000000000000000000000000070 +:10F0A00000000000000000C0001000000000000090 +:10F0B0000000000000000000000000000000000050 +:10F0C00000000000000010401101840505910000BF +:10F0D0000000000000000000000000000000884068 +:10F0E000A1A184A1A1910040000000000004000043 +:10F0F0000000000000000000000000000000000010 +:10F1000000000000000000000000000000000000FF +:10F1100000000000000000000000000000000000EF +:10F12000000000000000C00000000000900000008F +:10F1300000000000000000000000000000000000CF +:10F140000000000000000000100400A190418303B3 +:10F1500000000000000000000000000000000000AF +:10F1600040100091841000400000030001010100E4 +:10F17000000000000000000000000000000000008F +:10F18000000000000000000000000000000000007F +:10F19000000000000000000000000000000000006F +:10F1A00000000000000000008000000000000400DB +:10F1B000000000000000000000000000000000004F +:10F1C000000000000000000000008089008380A192 +:10F1D000918400000000000000000000000000001A +:10F1E00000008091009100910983000091050521A4 +:10F1F00011400000000000000000000000000000BE +:10F2000000000000000000000000000000000000FE +:10F2100000000000000000000000000000000000EE +:10F22000000000000000000000008000000000005E +:10F2300000000000000000000000000000000000CE +:10F24000000000000000000000000000800280417B +:10F250001000041100000000000000000000000089 +:10F2600000000000208991898580854121090500E1 +:10F270000500051100000000000000000000000073 +:10F28000000000000000000000000000000000007E +:10F29000000000000000000000000000000000006E +:10F2A0000000000000000000000000000400040056 +:10F2B00090000400000000000000000000000000BA +:10F2C0000000000000000000000000000000040238 +:10F2D0004002914082010000000000000000000098 +:10F2E0000000000000008902834008844000019073 +:10F2F000000000000001000000000000000000000D +:10F3000000000000000000000000000000000000FD +:10F3100000000000000000000000000000000000ED +:10F3200000000000000000000000000000000000DD +:10F330000000000084000000000000000000000049 +:10F3400000000000000000000000000000000000BD +:10F35000000000E0070000000000000000000000C6 +:10F360000000000000000000818100E007000000B4 +:10F37000810000E00000000000000000000000002C +:10F38000000000000000000000000000000000007D +:10F39000000000000000000000000000000000006D +:10F3A000000000000000000000000000000000005D +:10F3B000A890A894000000000000000000000000D9 +:10F3C000000000000000000000000000000000003D +:10F3D0000000FA0AC300F0F0F0F0000000000000A6 +:10F3E00000000000000000000000E9C1D5FD0000A1 +:10F3F000000000000000000000000000000000000D :10F4000000000000000000000000000000000000FC -:10F41000000000000000303F00FFBE3CFEFC00F09A -:10F4200000F0FAFA5050F0F0FFFF000040402828AA -:10F43000282F000000000000000000000000000075 -:10F4400000000000000000000000101010FF30302D -:10F45000303000000000000000000000000000004C -:10F4600000FA3C3CF500340000FF00FFFF553C145F -:10F470003CFF14D7C341FF55000000FF003C033F91 +:10F4100000000000000000000000000000000000EC +:10F4200000000000000000000000000000000000DC +:10F430000000AB93AB97000000000000000000004C +:10F4400000000000000000000000000000000000BC +:10F4500000000000FA0AFF00FAF2F2F200000000D9 +:10F460000000000000000000000000002A02163E1C +:10F47000010000000000000000000000000000008B :10F48000000000000000000000000000000000007C -:10F490000000000000000000000000004FFF41FFDE -:10F4A0005F7F557DF303F3030055FF550000000017 -:10F4B00055575555000000000000000000000000F6 +:10F49000000000000000000000000000000000006C +:10F4A000000000000000000000000000000000005C +:10F4B0000000000000FF000000000000000000004D :10F4C000000000000000000000000000000000003C -:10F4D0000F2F0F0F000000000000BF1FBF1FFFAA6B -:10F4E000FF0FEBEBFFFFBE14BEBE4041C0C34D0C8F -:10F4F000CFCF00FFABAB83AF00003C3CFFAAEBFFDC -:10F50000EBFF000000000000000000000000000011 -:10F5100000000000000000000000000000004F4F4D -:10F5200041410F3F003CF303F3030055FF5500003A -:10F5300000000003000000000000000000000000C8 +:10F4D000000000000000000005067D3C7C3D0000AF +:10F4E0000000000000000000000000000000CFCF7E +:10F4F0003030C2FEC23E00000000000000000000EC +:10F5000000000000000000000000000000000000FB +:10F5100000000000000000000000000000000000EB +:10F5200000000000000000000000000000000000DB +:10F53000000000000000F5F5A0A0000000000000A1 :10F5400000000000000000000000000000000000BB -:10F55000000000280000000000000000B010B01003 -:10F5600000AA000F82BE033F1414BEBE5055F0FF28 -:10F570004D0CCFCF00FFFFFF83AF83AF3C3CAAAA67 -:10F58000022A577F00000000FF7D004100000000BC -:10F59000000000000000000005000A08050000A0AF -:10F5A00000610006001D00000061000D0005000064 -:10F5B00000610006000D000000610003000D000066 -:10F5C00000610006000100000000000000000000D3 -:10F5D0000061000500090000000000610006000D48 -:10F5E000000100610006000D000000610006001D22 -:10F5F000000000614006000D000000610006000DE3 -:10F60000000000610006000D000000610006000D12 -:10F61000000000610006000D000000000000000076 -:10F62000000000000000A0802000FFFFD0C00F0FEE -:10F63000C3C300AA00AAFEFEF2FE00000000000004 -:10F6400000000E8600007DFD55F500000000000062 -:10F6500000001414BEBE00C33CFF00000000000008 -:10F66000303030300F0FFFFF00F0F0F000000000EE -:10F67000D000D000F0FF202F0103050F0F140F144E -:10F68000AAFF0000D0F0D2FA0F0CFFFC000000002F -:10F6900000F000F00000000000000000000000008A -:10F6A0000000000000000000A0802000FFFF5000CC -:10F6B0000FC30FC300AA00AA0E0E020E0000000026 -:10F6C000000000000E8600003CFC00F0000000007E -:10F6D000000000001414BEBE00C33CFF0000000088 -:10F6E00000003030BA300F0FBEAA00F0000000005A -:10F6F0000000D700D700F0FFF0FF41C355FF0FFF18 -:10F700000FFFEFFFAEAAD5F5D7FF0F00FFF0000007 -:10F71000000000F082F20000000000000000000085 -:10F72000000000000000050505050000010B0000B9 -:10F730002828AA0AAAFAD2F5AAFF008228AAC3C3D7 -:10F740000F0F000000003F3F03030F3F5F7F0000EB -:10F75000000000000000303030F300FF00FF000028 -:10F760000000000000000000007D3CFD00F0FFF004 -:10F7700000000000A0A000F0FA0AFA3A4040FFFFA3 -:10F7800000000000000000003C3C3C3C00000D0D6F -:10F790000F0F0F1FA0A0A0A05555555D0000000041 -:10F7A000000000000000000005053D050000F1FB21 -:10F7B00000000A00AA0CAAFCD2F5FFFF0A0A0A0AF6 -:10F7C000C3C30F0F000000003F3F0303003C557D03 -:10F7D0000000000000000000303030F3F0F0FFFFC8 -:10F7E00000000000000000000000007D3EFFFFF070 -:10F7F000FFF000000000BCBC00F0FF0FFF3F707086 -:10F80000FFFF0000000000000000AFAFAFAF00003E -:10F810007D7D00000014A0A0A0E30000000C00000B -:10F820000000000040008400820000092000100455 -:10F83000020000000080208301822000008084916B -:10F840002085000020002100200840002000200426 -:10F85000820000000000890000000400000904028A -:10F860008810000300002000840020080000002011 -:10F8700000842000C1000000100088044000000047 -:10F880000000048088002010A000418000808500D6 -:10F890000004208420008800200000002000C020F8 -:10F8A000C000402000000000000000000000002018 -:10F8B00000022004000000100010401100000010A1 -:10F8C0000010001010000000400200008000000046 -:10F8D0004041000400000088080000000000000013 -:10F8E0000000049000000000000000000000000084 -:10F8F0000001001000000800000000000000C0002F -:10F90000000200000002100000002082041000101D -:10F910000800400200100000000000840000000009 -:10F920000003210800910802000084090840020039 -:10F93000901002000000401002000040004008400B -:10F94000A0000000000000080208001000090000EC -:10F95000000008000004C1050810080408000000A9 -:10F9600000001000000000000809004000058204AB -:10F9700008009010020000110841020820840200D3 -:10F98000000008000089080020040004010521048B -:10F9900008000810020002000200020000000840F7 -:10F9A00002000208900002000040000000008010E9 -:10F9B00000820000000000008000000000880000BD -:10F9C0000084410000080008004005840284001003 -:10F9D0000008000000002141080880889108800884 -:10F9E0000000030000400284000000840010008832 -:10F9F00002100008000800000988008800900040FC -:10FA00000084000800000002000880850003200038 -:10FA100020858004800400000008048440080084DD -:10FA200000080010000000000084000800410008E9 -:10FA3000000000080000001000100009000800414C -:10FA4000000000000000002100050021001000005F -:10FA500020050009000800030821004100210002E0 -:10FA6000001100050000000000080000000800214F -:10FA70000000004100400000000082080008011062 -:10FA800000210000000000000000009100050003BC -:10FA9000000540054000000084210009200300000B -:10FAA00000080005000000030008000009A0040091 -:10FAB00008404084400041820300032005084100C3 -:10FAC00000C008A0008200100090000200A00011F9 -:10FAD0000008800000000088000080000000000096 -:10FAE0000801000000000082000000080000410240 -:10FAF00041084000000003040884000000A0210227 -:10FB0000088803A000000082000040C0000200003E -:10FB1000020000A0000011201100030000904184A9 -:10FB2000000000C008000300000400000300000003 -:10FB30000240020082020000A00090000400902118 -:10FB40000010000000100002008000000080000093 -:10FB50000000900400800000201000000889004090 -:10FB600000400040001008040009000008000000E8 -:10FB70000000400008004041008000000810000024 -:10FB800010409000082100100011A0000810000093 -:10FB9000000020100109C000840000000000C00027 -:10FBA00010000000000000000000000088000809AC -:10FBB0004040000209C040850000000003000088AA -:10FBC0000000000000C000A00089000200A00002A8 -:10FBD000200000000088000420A0A00000200010E9 -:10FBE00000000000000000A00000009000000000E5 -:10FBF0000000000000C000000900002040001100CB -:10FC00004088000000000584000100C0008400005E -:10FC1000100000008041080000000000000000000B -:10FC200000000000000000000000000000002100B3 -:10FC30000000004020210400000400000141820077 -:10FC400000000021A009000300020000A0410041C3 -:10FC500000410041000000000008008000802000FA -:10FC600003210009040500000011000882090800B2 -:10FC70000000000200050003000000000003000077 -:10FC8000840001000000000040080008040001009A -:10FC900000410000880004040000000800098400FE -:10FCA0000004000300000000000900400000840080 -:10FCB0000000001000000000000000080290022078 -:10FCC000030000000500051000080004000000A06B -:10FCD00000A003A0000000000000000000020004DB -:10FCE000000020C000000000000000001100000023 -:10FCF0000000000000000000000000200004008858 -:10FD00000000050004004084000880C00040080096 -:10FD100040000300080009040088030008000008F0 -:10FD200003A0000000000000000000000000000030 -:10FD300000000000002040410208001020000000E8 -:10FD40000300900204088841A00040000008000061 -:10FD500084040021000200210000002000050000B2 -:10FD6000008300030004000000080041000000219F -:10FD70000004000300000000004000000000080034 -:10FD800008400000000000210041C0218800000060 -:10FD900000048400002100210110008800050000FB -:10FDA000001000000041001000000000022182004D -:10FDB0000003000000000008000808000082088816 -:10FDC000418440820001209000A0000000840000D7 -:10FDD00000000090000000A00000000000000000F3 -:10FDE000090400401104200820000004000000A0C5 -:10FDF00000000000000000040000000000000000FF -:10FE000080000001000000001004000003000090CA -:10FE10000000000002001082000020010004100019 -:10FE20000040000100000000000000000000000091 -:10FE30000000000000000000000000000100900031 -:10FE40000000000100000200000041A004A1002009 -:10FE5000C00903C140408883C08201038221000899 -:10FE60000083000010000001000100A000880820AD -:10FE7000082000000000000000000000000000005A -:10FE800000000000100000000088044010A00000E6 -:10FE900000C00810000000000000000001880420DD -:10FEA00000908808A08800200002000000000000E8 -:10FEB0000000000008A000820010100400004000B4 -:10FEC0000000000005401121001100118820A1212F -:10FED000004080908410008000820000210880880B -:10FEE00004900088002080090908000300800400B5 -:10FEF0008000000000000000000000000000000082 -:10FF00000000000000000000000000008000808071 -:10FF100000000000800000090000000000080980C7 -:10FF200080000000000080000000000000000000D1 -:10FF300000000000000080800080000080000000C1 -:10FF40000000000080000500100005000588028008 -:10FF500010842003402189002084900502200000A5 -:10FF6000100020000800020000000800800082004D -:10FF700009009180A10000000000000000000000C6 -:10FF800080000000000480000000000080000000ED -:10FF900002000820098010000980040009000021E7 -:10FFA0008020800080C080000000000080000000F1 -:10FFB000000000000000000000000002808000003F -:10FFC00020004000200008000008A100010000A15E -:10FFD000041040118305C08304904020048410C0A5 -:10FFE00000000100000001C00182040001001000B7 -:10FFF00008008800A0A04100000000880000000068 +:10F5500000000000000000000505050555005005ED +:10F56000000000000000000000000000000000009B +:10F57000FCFC0303C13DC13D000000000000000091 +:10F58000000000000000000000000000000000007B +:10F59000000000000000000000000000000000006B +:10F5A000000000000000000000000000000000005B +:10F5B000000000000000000000003000000000001B +:10F5C000000000000000000000000000000000003B +:10F5D000000000000000000000008061000600093B +:10F5E000000000000000000000000000000000001B +:10F5F000000000610E3DC015000000610005C0095B +:10F6000000000000000000000000000000000000FA +:10F6100000000000000000000000000000000000EA +:10F6200000000000000000000000000000000000DA +:10F6300000000000000000000000000000000000CA +:10F6400000000000000000000000000000000000BA +:10F65000000000000000000000000000BCBCBCBCBA +:10F66000A8FD0000000000000000000000000000F5 +:10F67000000000003333550A000000001BFF1B0090 +:10F68000F0FF505F000000000000000000000000DC +:10F69000000000000000000000000000000000006A +:10F6A000000000000000000000000000000000005A +:10F6B000000000000000000000000000000000004A +:10F6C000000000000000000000000000000000003A +:10F6D000000000000000000000000000000000002A +:10F6E0000000A8A8000000000000000000000000CA +:10F6F000000000000000333355AA010000000FFF96 +:10F700000F00000FA0AF000000000000000000008C +:10F7100000000000000000000000000000000000E9 +:10F7200000000000000000000000000000000000D9 +:10F7300000000000000000000000000000000000C9 +:10F7400000000000000000000000000000000000B9 +:10F7500000000000000000000000000000000000A9 +:10F7600000000000C70486860000000000000000C2 +:10F770000000000000000000000000000000F10395 +:10F7800055555555AAAAAAAA00000000000000007D +:10F790000000000000000000000000000000000069 +:10F7A0000000000000000000000000000000000059 +:10F7B0000000000000000000000000000000000049 +:10F7C0000000000000000000000000000000000039 +:10F7D0000000000000000000000000000000000029 +:10F7E000000000000000CB088A8A00000000000032 +:10F7F00000000000000000000000000000000A00FF +:10F80000F1035555558AA5A0A5A5000000000000EC +:10F8100000000000000000000000000000000000E8 +:10F8200000000000000020000000000000000000B8 +:10F8300000000000000000000000010001000100C5 +:10F840000080000000002000000001000100010015 +:10F8500001000000000000000000000000000000A7 +:10F860000000000300000000400000000000000055 +:10F870000000000000000000000000000000000088 +:10F880000000000000000100000001000000000274 +:10F8900000910002000200000000000000000003D0 +:10F8A0000000000000000000000000000000000058 +:10F8B0000000000000000000000000002000200008 +:10F8C00020000004000000000000000020002000D4 +:10F8D00020002000000000000000000000000000E8 +:10F8E0000000000000000000000000000000000018 +:10F8F0000000000200000000000000000000000006 +:10F9000000000000000040000400000204000000AD +:10F9100000900002000040000000000021000000F4 +:10F9200000000000000000000000000000000000D7 +:10F9300000000000000000000000000000000000C7 +:10F9400000000200000000000000000000000800AD +:10F950000000000000000000020000009000000015 +:10F9600084000000200000000000000002000000F1 +:10F97000000000000000000002000000000002097A +:10F9800002000809000002000800020000008400D4 +:10F9900084000040000088000000202102100200C6 +:10F9A000020002000200020000000000000000004F +:10F9B0000000000000000000000000000000000047 +:10F9C000000800000008000000000000020800001D +:10F9D0000000000000000000000000000000000027 +:10F9E000000800000008800000000000000000087F +:10F9F0000000000000000000000000000000000007 +:10FA00000000001011000040000000000000004055 +:10FA100002000500118800000000050091000500AB +:10FA200003C0000000001000000000000000000003 +:10FA300000000000000000000000000000000000C6 +:10FA400000000000000000000000000000000000B6 +:10FA500000000000000000000000000000000000A6 +:10FA60000000000000000000200000000000040072 +:10FA70000000000000000000000000000000000086 +:10FA80000000000000000000000000000000000076 +:10FA90000000000000000000000000000000000066 +:10FAA0000000000000000004002000000000000032 +:10FAB000000800000000000000000000000000003E +:10FAC0000000000000000000000000000000000036 +:10FAD0000000000000000000000000000000000026 +:10FAE0000000000000000000001080000000000086 +:10FAF0000000000000000000000000000000000006 +:10FB000000000000000000000000000000000000F5 +:10FB100000000000000000000000000000000000E5 +:10FB200000000000000000000001000000000000D4 +:10FB30000000000000000000000000008200000043 +:10FB400000000000000000000000000000000000B5 +:10FB50000000000000000000004000000000000065 +:10FB60000000000000000000000000000000000095 +:10FB70000000000000000000000000000000020083 +:10FB800000000200000000000000000000008200F1 +:10FB900000000002000900040040000400090011F8 +:10FBA00000004004004100040000000400000004C4 +:10FBB0000000000000000000000000000000000045 +:10FBC0000000000000000000000000000000000035 +:10FBD0000000000000000000000000000000000025 +:10FBE000000000000000000000000000090000000C +:10FBF0000000000000000000000000000000000005 +:10FC000000000000000000000000000000000000F4 +:10FC100000000000000000002100000000000000C3 +:10FC20000040000000010000000121000901210046 +:10FC300000010000000000000000000000000000C3 +:10FC400000000000000000000000000000000000B4 +:10FC50000000000000000000000000008400000020 +:10FC60000000000000000000000000000000000094 +:10FC70000000000000000000000000000000000084 +:10FC80000000000000000000000000000000000074 +:10FC9000000000000000020008000000000040001A +:10FCA0000003000040000004100000000000840277 +:10FCB000000200040000000000000000000000003E +:10FCC0000000000000000000000000000000000034 +:10FCD000000000000000000008000000000000001C +:10FCE0000000000000000000000000000000000014 +:10FCF00000000000000000000000080000000000FC +:10FD000000000000000000000000000000000000F3 +:10FD100000C00000000021000000210000200000C1 +:10FD20008000000000008000000180000000000052 +:10FD300000000000000100000000000000000000C2 +:10FD400000000000000000000000080000000000AB +:10FD500000000000000000000000000000000000A3 +:10FD60000000000000000000000000000000000093 +:10FD70000000000000000000000000000000000083 +:10FD80000000000000000000000000000000000073 +:10FD900090000000900040000000400000000000C3 +:10FDA0000009000000002000400040414000000029 +:10FDB0000000000400080021000000000000000016 +:10FDC0000000000000000000000000000000000033 +:10FDD0000000000000000000000000000000000023 +:10FDE0000000000000000000000000000000000013 +:10FDF00000000000000000000000000000002000E3 +:10FE000000000000000800000000000000000000EA +:10FE100000080000000000000000000000C000001A +:10FE2000000000000040000003000000200000006F +:10FE300000040004000100080000000000000000B1 +:10FE400000000000000000000000000000000000B2 +:10FE500000000000000001000000000000000000A1 +:10FE60000000000000000100000000000000000091 +:10FE70000000000000000100000000000000000081 +:10FE80000000000000000000000000000000000072 +:10FE900000000000000000000000000010A000842E +:10FEA00000A0840800000000A00000000001000085 +:10FEB00084000000000005000400000100000000B4 +:10FEC0000000000000000000000000000000000032 +:10FED00000000000000000004000000000000000E2 +:10FEE00000000000000000004000000000000000D2 +:10FEF00000000000000000004000000000000000C2 +:10FF000000000000000000000000000000000000F1 +:10FF10000000000000000000000000000000008061 +:10FF20000000000000000000090000000000004187 +:10FF30000020000400090000C12080100003000020 +:10FF400000000000000000000000000000000000B1 +:10FF5000000000000000002000000005000000007C +:10FF60000000000000000010000000100000000071 +:10FF70000000000000000000000000000000000081 +:10FF80000000000000000000000000000000000071 +:10FF90000000000000000000000000000000000061 +:10FFA00000000008800000004180050008022108D0 +:10FFB00000800000040408110080050040001003C8 +:10FFC0000000000000000000000000000000000031 +:10FFD0000000000000000000000000000000000021 +:10FFE000000000000000000000010000000100000F +:10FFF0000000000000000000000000000000000001 :020000040023D7 -:100000000000400088002000080000000000A00060 -:10001000A0000000210088A00100001000000000E6 -:100020000001A001200008A1822008004000A000DB -:100030009000000000000000000020000400A00468 -:1000400008C00000000000000000000000000000E8 -:10005000000085C01040058302042105A041400531 -:100060000221C00000000101100100010000000099 -:1000700000010220000000880200000000000000D3 -:10008000000000010000000000000000000000006F -:100090000020A08800020000022010A00000010043 -:1000A000010100018800401000000310108800A02A -:1000B000000800020000000000000000088800089E -:1000C000001002C0001000100009001000051011FF -:1000D00002080009410402009021C120C1A01110B2 -:1000E00000A180A0400009051021002000080000A8 -:1000F0000041000880100000001180100000000086 -:1001000000000000000100000000000000000000EE -:1001100000000000000000000000000080800003DC -:10012000030521210210000000800000848080006F -:1001300000800080008000000000000000008000BF -:1001400000800000800000000080000000002110FE -:100150004000218020108802A1820980850410209F -:100160002082A18488048080000000000002210217 -:100170004000000000040000008000008002000039 -:10018000000000000000000100000000000000006E -:1001900080040021000000008080000000000008B2 -:1001A0002000400005000410001100000080000045 -:1001B000001100008080000000000000000000002E -:1001C00000000008000080000000000400020000A1 -:1001D000010000C001400000209008058484100147 -:1001E000891184050940840110A00000100010004E -:1001F00001010100000400000804100220100200A8 -:100200000000000000000000000100000088000263 -:1002100000000801A004A000000002400802002025 -:1002200000010120010000000000000088040040DF -:10023000880040000000024088000000000000002C -:10024000000020009001C0C0040000000000000079 -:100250000000000000000000000000000000070097 -:1002600048210000000007004800000000E00000F6 +:1000000000000000000000000000000000000000F0 +:1000100000000000000000000000000000000000E0 +:10002000000090004001A0048200001000000000C9 +:100030000100004000000000000000C000000100BE +:1000400000000000000000000000000000000000B0 +:10005000000000000000000000000000A000000000 +:10006000000000000000000000000000A0000000F0 +:100070000000000000000000000000000000000080 +:10008000010000000000000000000000000000006F +:100090000000000000000000000000000000000060 +:1000A00000000000080400820088C08200000000F8 +:1000B00002010001000000008801010000000100B1 +:1000C00083010001000000000000000000000000AB +:1000D0000000000000000000000000000000000020 +:1000E00000004000000000000000000000000000D0 +:1000F00000000300000000000000000000000000FD +:1001000000000300000000000000000000000000EC +:1001100000000000000000000000000000000000DF +:100120000000000000008080000000000580000347 +:100130000004000300400011104189211105000353 +:1001400040410821001100000000000000000000F4 +:10015000000000000000000000000000000000009F +:10016000000000000000000000000000000000008F +:10017000000000000000000000000000000000007F +:10018000000200000000000000000000000000006D +:10019000000000000000000000000000000000005F +:1001A00000000000000000000010000480808000BB +:1001B00002004104400010032182091108000311CC +:1001C000218511000500034100000000000000002F +:1001D000000000000000000000000000000000001F +:1001E000000000000000000000000000000000000F +:1001F00000000000000000000000000000000000FF +:1002000000000001000000000000000000000000ED +:1002100000000000000000000000000000000000DE +:1002200000000000000000000000C0018284844043 +:100230000200010000010000010001C100010000F6 +:10024000010001400100000000010000000000006A +:10025000000000000000000000000000000000009E +:100260000000000000E000000000000000000000AE :100270000000000000E0000000000000000000009E -:10028000000000000000000000000000000000006E -:100290000000000000000000070000000000000057 -:1002A000000000000000000000000000000000014D -:1002B00041000000000000000000000000000000FD -:1002C0000000000000000000070000000000000027 +:100280000000000000E0000000000000000000008E +:10029000000000000000000000000000000000005E +:1002A000000000000000000000000000000000004E +:1002B000070000000000000000000000810000E0D6 +:1002C00000008400810000E0000041820000000086 :1002D000000000000000000000000000000000001E -:1002E0000000000000000000000000000303000008 -:1002F000000000000000000000000000B0BCB3BF20 -:100300003C3C3C3C000000000000000000000000FD -:1003100000000000000000F00FFF66FF66FFFF997D -:10032000FF99243C000000000000000000003C6633 -:100330003C66FFFFF0F00000CFCF0600062400006F -:100340000000000000003F300000B9BD2024000084 +:1002E000000000000000000000000000000000000E +:1002F00000000000000000000000000000000000FE +:1003000000000000000000000000000000000000ED +:1003100000000000000000000000000000000000DD +:100320000000000000000000000000000000090DB7 +:10033000F9FD60FF00000000000000000000000068 +:1003400000000000000000000000000000000000AD :10035000000000000000000000000000000000009D -:100360000000000000000000000000000000030387 -:100370000000000000000000000000000000B0BC11 -:10038000B3BFFF00FF0000000000000000000000FD -:10039000000000000000000000F00FFF66FF660094 -:1003A0000000FF99243C243C0000000000000000F5 -:1003B0003C663C660F0F00000000CFCF060006240D -:1003C00000000000000000003F300909F9FF6066EE +:10036000000000000000000000000000000000008D +:10037000000000000000000000000000000000007D +:10038000000000000000000000000000000000006D +:10039000000000000000000000000000000000005D +:1003A000000000000000000000000000000000004D +:1003B0000D0DFDFD3C3C00000000000000000000B1 +:1003C000000000000000000000000000000000002D :1003D000000000000000000000000000000000001D -:1003E0000210200000881084021020000088108471 +:1003E000000000000000000000000000000000000D :1003F00000000000000000000000000000000000FD :1004000000000000000000000000000000000000EC :1004100000000000000000000000000000000000DC :1004200000000000000000000000000000000000CC :1004300000000000000000000000000000000000BC :1004400000000000000000000000000000000000AC -:1004500000000000000030007666000000006F6FB2 -:100460006F6F0000000000000000000000000000AE -:100470000000F0F0F6FF0000000000000000FFFFA9 -:100480000000FF2FF020000000000000000000002E -:100490000000000000000000000000FFB4B4B4B48D -:1004A00000FF999904040D0D9000900000000000D9 -:1004B0000000000006069F9FE14260F0F0FF00FF91 -:1004C000FF00FF0000000000000000000000FFFF30 -:1004D0003C3C3F3F0000000000006666000000005A -:1004E000606060600000000000000000000000008C -:1004F000000000009090B0FF00000000000000002D -:100500000F0F0000DF0FD00080000000000000008F -:100510000000000000000000000002BFC3FFB4B4F0 -:10052000B4B400FF999904040D0DF6FFF6FF000026 -:1005300000000000000024BD24BDE1DB60F0000FDE -:1005400000FF3000F0000000000000000000C39039 -:10055000C390FF3CFF3F00610006000D00000061FA -:100560000006000D000100610006000D00000061A2 -:100570000006000D00000061000700090000006196 -:1005800000050001000100610006000D00000000F0 -:10059000000000000000000000000000000000005B -:1005A000000000080010000080610006000D00003F -:1005B00000610006000D000000610086001D00A023 -:1005C000000000000000000000000000000000002B -:1005D000000000080000000000000000BA30FF30FA -:1005E0000078005024E434F4E0002000C300C3008D -:1005F000FF0FFFFF0FFF17D70000000000FF0F0FD6 -:100600000055AAFFC3FFC300000000003C00FFFF2D +:10045000000000000000000000000000000000009C +:10046000000000000000000000000000000000008C +:10047000000000000000000000000000000000007C +:10048000000000000000000000000000000000006C +:10049000000000000000000000000000000000005C +:1004A000000000000000000000000000000000004C +:1004B00000000000FF009D0099999999000000003C +:1004C000000000000000000000000000000000002C +:1004D000000000000000000000000000000000001C +:1004E000000000000000000000000000000000000C +:1004F00000000000000000000000000000000000FC +:1005000000000000000000000000000000000000EB +:1005100000000000000000000000000000000000DB +:1005200000000000000000000000000000000000CB +:10053000000000000000FF00FF0090999899000063 +:1005400000000000000000000000000000000000AB +:10055000000000000000000000000000000000009B +:10056000000000000000000000000000000000612A +:100570000007000D00000000000000000000006106 +:100580000007000D000000000000000000000061F6 +:100590000007000D00000000000000000000000047 +:1005A000000000000000000000000000000000004B +:1005B000000000000000000000000000000000003B +:1005C00000610006000D000000610004C009000089 +:1005D00000610004C00900000000000000000000ED +:1005E000000000000000000000000000000000000B +:1005F00000000000000000000000000000000000FB +:1006000000000000000000000000000000000000EA :1006100000000000000000000000000000000000DA :1006200000000000000000000000000000000000CA -:100630000000FBF1FBF1FCF00C00000000000000EA -:1006400000000000000000000000000000000000AA -:1006500000000000000000000000000000008A0010 -:10066000CF000038001000C010D0E0C020C0C3C3CD -:100670000000C200C3C30FFF17D70000000000FF37 -:100680000F0F0055AAFFC3FFC300000000002800A1 -:10069000EBFF000000000000000000000000000070 +:1006300000000000000000000000000000000000BA +:10064000000000FA00F3000000003A003A3A3F00D0 +:100650003F2A0000000000C343C300000000000068 +:10066000000000000000000000000000000000008A +:10067000000000000000000000000000000000007A +:10068000000000000000000000000000000000006A +:10069000000000000000000000000000000000005A :1006A000000000000000000000000000000000004A -:1006B000000000005151FBF1FCF00C0000000000B4 -:1006C000000000000000000000000000000000002A -:1006D000000000000000000000000000000000001A -:1006E0000000000002020202F00070003C7D3F3F6B -:1006F0003F1403145F5F50507C40FFD728280A8ABC -:1007000000AA00AA30F330307D417D410000000096 -:10071000101A151F0000000000000000000000007B +:1006B000000000000000000000000000000000003A +:1006C00000000000FAFAF3F3000020003400343494 +:1006D0003F003F2AFFFFF10000C341C300000000BC +:1006E000000000000000000000000000000000000A +:1006F00000000000000000000000000000000000FA +:1007000000000000000000000000000000000000E9 +:1007100000000000000000000000000000000000D9 :1007200000000000000000000000000000000000C9 -:100730000000FFFFC3C30000000000000000000035 -:1007400000000000000000000000000000000000A9 -:100750000000000000000000000000000000000099 -:10076000000000000000C3F3C3C3F00070000041AC -:1007700003033FD703D75F5F5050FEC2FFFF282817 -:10078000CA8A50FA55FF30F330307D417D41000078 -:100790000000050505050000000000000000000045 +:1007300000000000000000000000000000000000B9 +:1007400000000000000000000000FF8A000002001E +:100750002000000055AA050D050D000000FF000057 +:100760000000000000000000000000000000000089 +:100770000000000000000000000000000000000079 +:100780000000000000000000000000000000000069 +:100790000000000000000000000000000000000059 :1007A0000000000000000000000000000000000049 -:1007B00000000000EBAB000128283C3C003A003A66 -:1007C0000000000000000000000000000000000029 -:1007D0000000000000000000000000000000000019 -:1007E00020000400200040000000200020004010F5 -:1007F00088000000000000000400C00001800480A8 -:1008000020004000040088008900200000030884C4 -:1008100020000008A000401020022000000020005E -:100820000001200020000200C000000300000205BB -:10083000201020000000A000041020000400000090 -:1008400082000000020020000800040004001000E4 -:100850002000200002000200041020402000C00000 -:1008600004001000A0000002890000000000000049 -:100870008001400000000000004000000000400235 -:10088000000400000000000000000800400000001C -:100890008010000000000000008300000000040041 -:1008A0000002000040000000000000000000000006 -:1008B0000000008200000000000200024100000071 -:1008C00000020000000000A04182C18440900000AE -:1008D000410200020000400400000004000040004B -:1008E000040410000000000000100400004000009C -:1008F000004008000200400000000000004000002E -:1009000000040000000000000000000004080004D3 -:10091000000002400000000000000004020000008F -:100920000000041000000200020002000203001098 -:100930000000900800000040400001080002001084 -:1009400001080140201040000900100008050008BF -:10095000000004000200000000000010020000007F -:1009600002000200004000C000C00000800000083B -:1009700000400008800000C0C108090020000000FD -:10098000004000080008008804000010400000102B -:1009900000842082000100A00088000802000000FE -:1009A0000008001000080000008800000008030094 -:1009B000000800100010000000088488408400082F -:1009C0000008401002840011800840820984000061 -:1009D00002400010400800000084090041080004A3 -:1009E0000008000800840008000800000000000063 -:1009F0004010010040410000000000008400400061 -:100A00000200200800000000010800000000004172 -:100A1000002100050003001000080009002100115A -:100A20004010001090034000000040080010884073 -:100A3000000308000004204004000000000004003F -:100A4000400000200000000800000000000000033B -:100A50008800042104000405100090000008000232 -:100A60000408204000000000880000900084000876 -:100A70000000051008100900418400A0038208004E -:100A800041A000A080102088008208A0008200C041 -:100A9000008241000084118202C0000000040000B6 -:100AA0000000000800A004A0008800000000000072 -:100AB0004100000003A0050040004120000011009B -:100AC0000000000000A04100008441000900030074 -:100AD000100000A00000000000040000030041001E -:100AE0000800009000000000000011000500021046 -:100AF000C00304108400001000080000000410412E -:100B000000000441820002000400004000000000D8 -:100B1000000008001000000000000000000000219C -:100B2000000500218208084100400000000000008C -:100B30001000080000410004000000040000004113 -:100B40008200820810110000094100030802081108 -:100B500008000000080200000000020282000200FB -:100B60000000000008000000000582008200400034 -:100B700000900000000000000011000000000000D4 -:100B80000004000003040000000000A0000020009A -:100B90000200008400000000204002000800000065 -:100BA00000000090030400000000000000000000AE -:100BB000000000000000080000000300000000002A -:100BC000000000004000080000A00800000000092C -:100BD0000000000009004041008203040000000002 -:100BE0000000000000002000104004004100080048 -:100BF00082000000000000044000020800000040E5 -:100C00000041000500000000001004000005010084 -:100C1000000008000008002102030000000200009C -:100C200000800021000000100000000000004000D3 -:100C300000004000000800000000042008000041FF -:100C40000000C00082000800C000000040008400D6 -:100C5000400000009021000000040000000808008F -:100C600000000000000000098210000000000000E9 -:100C70000000000009000000030005000000000063 -:100C800000844100218408080000030000101000C7 -:100C900020C0410203A000A000A000080008000836 -:100CA0000088001000020004000800000020000876 -:100CB00040000000000000820040000000A000088A -:100CC0000000001000C000040808000000008000C0 -:100CD0001100800000020504000410000008000458 -:100CE0004000000000000000000020080090048484 -:100CF000000800000000A00200008200000920217E -:100D000000410000000800000041001000112040D8 -:100D100000210021000000210021840000000005C6 -:100D20000020000000210005000000000008004134 -:100D30000008000000000000000000000000880023 -:100D400000000400400000000000000084000000DB -:100D50000000000000000000000200080000000089 -:100D60000000000000030000000000400000000040 -:100D7000000000000000000000000000080000006B -:100D800000000900080000000500030008040090AE -:100D90000000009000000000210008000000020098 -:100DA0000088000409200000400402840088090033 -:100DB000200000040200000000000000000000828B -:100DC0000000000000880000000000000000000497 -:100DD00011000000000004001000000100001100DC -:100DE00000000000000000002000002000000300C0 -:100DF000000000000000000020A10089080082100F -:100E000000A00010401004A0000000000400000139 -:100E100000000000010000000000000000000000D1 -:100E20001040000000C004040000000000000000AA -:100E300000000000000000000000000000000000B2 +:1007B0000000000000000000000000000000000039 +:1007C000000000000000000000000000FF8A0000A0 +:1007D00000000000FFFF55FF050505050000A0FF14 +:1007E0000000000000000000000000000000000009 +:1007F0000000000000000000010000800080008078 +:1008000001000100008000800000000000000000E6 +:1008100000000000000000000000000000000000D8 +:100820000003000000800000000000000000000045 +:1008300000000200020000000000000000000000B4 +:1008400000000000000000000000000000000002A6 +:100850000000000200000000000001000000008015 +:100860000000000000000000000000000000200068 +:100870000000000000000000000004000020202014 +:100880000020040004000020002000000000000000 +:100890000000000000001000000000000000000048 +:1008A0000000000000400004000200000000000002 +:1008B00000000004000040000004000200000000EE +:1008C0000000000000000000000000040000000024 +:1008D00000000000000003020000000040000000D3 +:1008E0000008000000000000000000000000000000 +:1008F00000000000000000000000000000000000F8 +:1009000000000000000802000000000000000000DD +:1009100000000000000000000000001000000000C7 +:1009200000000000000000000004000000000000C3 +:100930000000001000000000000010000000000097 +:100940000000000000000200000000000010000095 +:100950000000000002000000004100000200000052 +:100960000000004100000008008400100084000026 +:1009700000000082000000100000001000100008BD +:1009800000000000000000C00000000000000000A7 +:10099000000000000000000800000000000800083F +:1009A000000000000000000000080001000000003E +:1009B0000000000000000000000800000200000825 +:1009C0000008000000000000000800000000000017 +:1009D0000000000000000000000800400040000887 +:1009E0000084000000000000000000000000000083 +:1009F00000000000000200000000001000000008DD +:100A000000000000000000000000000000000000E6 +:100A100000000000000000000000000000000000D6 +:100A200000000000000000000000000000000000C6 +:100A300000000000000000000000000000080000AE +:100A40000000100000000000000000000000000096 +:100A50000000000000000000000000000000000096 +:100A600000000000000000009000000000000000F6 +:100A70000000000000000000000041000000000035 +:100A80000000000000000000000000000300000063 +:100A90000000000000000000000000000000000056 +:100AA0000000000000000000000000000000000046 +:100AB0000000000000000000000000000000000036 +:100AC0000000000000000000000000000000000026 +:100AD00000000008000011000000000000000300FA +:100AE0000000000000000082000000000000000084 +:100AF000000000000000A00000000000000008004E +:100B000008000000000000000000080000000000D5 +:100B100000000000000000000000000000000000D5 +:100B200000000000000000000000000000000000C5 +:100B300000000000000000000000001100000000A4 +:100B400000000000000000000004000000000000A1 +:100B5000020000110041000000008809000208099D +:100B600008000000000400000011820300040000DF +:100B70000000000000A000000000000000000008CD +:100B8000000000000000000800000000000000005D +:100B90000000000000000000000000000000000055 +:100BA000000000000000000800000000000000003D +:100BB0000000000000000000000000000000000035 +:100BC000009000000000000000080000000000008D +:100BD000000000000000000000000000090000000C +:100BE000110000000000000000A000000000000054 +:100BF000000000000000000000000800A00000004D +:100C00000000C00000000000C00000000000000064 +:100C100000000000000000000000000000000000D4 +:100C200000000000000000000000000000000000C4 +:100C300000000000000000000000000000000000B4 +:100C400000000000000000000000000000000000A4 +:100C50000000000000000000000000000000000094 +:100C60000000000000000000000000000000000084 +:100C70000000000000000000000000000000000074 +:100C80000000000000000000000000000000000064 +:100C90000000000000000000000000002100000033 +:100CA0000300000000000000000000000000000041 +:100CB0000000000000000000000000000000000034 +:100CC0000000000000000000000000000000000024 +:100CD00000000000100000080000110200000000E9 +:100CE00000000000000000000000200000000000E4 +:100CF00000000010000008000800000000000000D4 +:100D000000000000000000000000080000002000BB +:100D100000000000000004000000000000000000CF +:100D200000000000000000000000000000000000C3 +:100D30000000000000000000002100000000000092 +:100D400000000000000000000000000000000000A3 +:100D50000000000000000000000000000000000093 +:100D60000000000000000000000000000000000083 +:100D700000000000880000000000000000000000EB +:100D8000000000000000000000000000000800005B +:100D90000000000000000000000000000000000053 +:100DA000000000000000000000000000000800003B +:100DB00000840000000000000000000000000000AF +:100DC000000000000000000000900000000000088B +:100DD0000200000000000000000000000000000011 +:100DE0000000000000000000009000040000000867 +:100DF00000000090008200100000000000000000D1 +:100E000000000000000000000000000000000000E2 +:100E100000000000000000000000000000000000D2 +:100E200000000000000000000000000000000000C2 +:100E300000000000000000000000000000000100B1 :100E400000000000000000000000000000000000A2 -:100E5000000090100008008804C0900000012000ED -:100E600088000000000000000000000000000000FA -:100E7000000000000000000000000083050280095F -:100E800000840080200000800000000910000000A5 -:100E90000004001100090408002000000000000008 -:100EA00000000000000000008000000000000000C2 +:100E50000000000000000000000000000000000092 +:100E60000000000000000000000000000000000082 +:100E70000000000100000001000000000000000070 +:100E80000000000000000000000000000000000062 +:100E90000000000000000000000000000000000052 +:100EA0000000000000000000000000000000000042 :100EB0000000000000000000000000000000000032 -:100EC0000000000000000000000000000000000022 -:100ED0000000000000002080008080000800412108 -:100EE00000030000000000000000000000000000FF -:100EF00000000000000000000000000080008010E2 -:100F0000800200008000000800800000410008000E -:100F100040050489080011002000080000000009B5 -:100F200000000000000000108000000080000009A8 -:100F300080800000000000000000000000000000B1 -:100F40000000000000000000000000000000200081 -:100F500002000500020541808800A002100841003F -:100F600083008810902100000000000000000000B5 -:100F70000000000000000000000000000000080069 -:100F80004000A083000088009001C008820000207B -:100F90000100010101A00084000000000000000029 -:100FA00000000020000082004000A000A000080017 -:100FB000C00008848820000000000000000000003D +:100EC0000200000000000000000000000000000020 +:100ED0000000000000000000000000000000000012 +:100EE0000000000000000000000000000000000002 +:100EF000000000000041000000040010000000009D +:100F000000000000000000000000000000000000E1 +:100F100000000000000000000000008000000080D1 +:100F20000020008000000000000000000000000021 +:100F300000000000000000000000000000000000B1 +:100F400000000000000000000000000000000000A1 +:100F50000000000000000000000000000000000091 +:100F60000000000000000000000000000000000081 +:100F70000000000000000000000000000000000071 +:100F80000000000000000000000000000000000061 +:100F9000000000000000000000400000000400000D +:100FA00000400000000200000000000000000000FF +:100FB0000000000000000000000000000000000031 :100FC0000000000000000000000000000000000021 -:100FD00001A001000000010020021000A001110189 -:100FE00088902000A101090100000000000000001D +:100FD0000000000000000000000000000000000011 +:100FE0000000000000000000000000000000000001 :100FF00000000000000000000000000000000000F1 -:1010000088A0000900A00888200900400082840010 -:10101000000100008300000100010000A0000000AA -:101020000000000000000000880800C000A0A01020 +:1010000000000000000000000000000000000000E0 +:101010000000000000000000000000009000000040 +:10102000010000004000000000000000000000007F :1010300000000000000000000000000000000000B0 -:1010400000000000000000000000000000000000A0 -:1010500000000000000000000000881000A0104107 -:1010600002820008014140890002000000000000E7 +:1010400000000000A0000000000000000000000000 +:101050000000000000000000000000000000000090 +:101060000000000000000000000000000000000080 :101070000000000000000000000000000000000070 -:101080000000000505820541004000C00005000485 -:101090000005002110210509100400040241C104CB -:1010A00000000000000000000000008000000000C0 -:1010B00080000000000000000000000000000000B0 +:101080000000000000000000000000000000000060 +:101090000000000000000000000008000000000048 +:1010A0000000100000000000000000000000000030 +:1010B0000000000000000000000000000000000030 :1010C0000000000000000000000000000000000020 -:1010D000000000000000000000000000009000037D -:1010E00080A180A0000310A0002100880000000063 -:1010F00000000000000000000000000000000000F0 -:10110000000000008040001000000000000000000F -:1011100000808000418920002100404010910000A3 -:1011200000000400000000000000000000000000BB -:1011300000008000000000008000000000000000AF +:1010D0000000000000000000000000000000000010 +:1010E0000000000000000000000000000000000000 +:1010F00000000000000000000000000000001000E0 +:1011000009000000000000000000000000000000D6 +:1011100000000000000000000000000000000004CB +:1011200000000000000000050000000000000000BA +:1011300000000000000000000000000000000000AF :10114000000000000000000000000000000000009F -:10115000000000000000050002000400020580906D -:101160000020A180A1200840218240000308000047 +:10115000000000000000000000000000000000008F +:10116000000000000000000000000000000000007F :10117000000000000000000000000000000000006F -:10118000000000000000100110898884C000820067 -:1011900088A0C010A00000C000000100000100A055 -:1011A0000000000001009000020002000200C000E8 -:1011B00010400220A00020008890021002000000D1 +:10118000000000000000000000000000000000005F +:10119000000000000000000000000000000000004F +:1011A000000100000000000000000000000000003E +:1011B000000000000000000000000000000000002F :1011C000000000000000000000000000000000001F -:1011D00000000000000000000020010001000100EC -:1011E00040100020A140A1000120000200000100E9 +:1011D000000000000000000000000000000000000F +:1011E00000000000000000000000000000000000FF :1011F00000000000000000000000000000000000EF -:1012000000000000000000000000000007000000D7 -:10121000000000000000000000000000000084004A -:10122000000000E0000000000000000000000000DE +:1012000000000000000000000000000000000000DE +:1012100000000000000000000000000000000000CE +:1012200000000000070000000000000007000000B0 :1012300000000000000000000000000000000000AE -:10124000000000000000000000000000000000009E +:1012400000000000000000000000000000E00000BE :10125000000000000000000000000000000000008E :10126000000000000000000000000000000000007E :10127000000000000000000000000000000000006E -:10128000000000000000000000001F151A10FFF011 -:101290005353015105F5FF3CFF3C000000000000E6 -:1012A0000000000000000000000055D755D70000E6 -:1012B00000003C3C3C3C53F05300AA00AAAA0000AA +:10128000000000000000000000000000000000005E +:10129000000000000000000000000000000000004E +:1012A000000000000000000000000000000000003E +:1012B000000000000000000000000000000000002E :1012C000000000000000000000000000000000001E :1012D000000000000000000000000000000000000E -:1012E00000000000F0F03C3CFF143FFF0000000055 -:1012F00000FF7B7B000000000000000000000000F9 -:10130000000000000000000000000000BFB5BAB0FF -:101310000F00535301510050CFCFCFCF000000003A -:10132000000000000000000000000000C1D701D74D -:1013300000000000F0FFF00053FF530FB200FFAABF +:1012E00000000000000000000000000000000000FE +:1012F00000000000000000000000000000000000EE +:1013000000000000000000000000000000000000DD +:1013100000000000000000000000000000000000CD +:1013200000000000000000000000000000000000BD +:1013300000000000000000000000000000000000AD :10134000000000000000000000000000000000009D :10135000000000000000000000000000000000008D -:10136000000000000000F0F03C3CFFD73FFF000011 -:101370000000FFFF7B7B0000000000000000000079 -:101380000000000000000000000000000000280035 -:1013900028FF2A7F2A7FF7F70404F055FF55000045 +:10136000000000000000000000000000000000007D +:10137000000000000000000000000000000000006D +:10138000000000000000000000000000000000005D +:10139000000000000000000000000000000000004D :1013A000000000000000000000000000000000003D -:1013B000000000000000FFFF000014170003000001 -:1013C00000000A0A0A3A00000000000000000000C5 +:1013B000000000000000000000000000000000002D +:1013C000000000000000000000000000000000001D :1013D000000000000000000000000000000000000D -:1013E0000000000000000000171714D7FF00FF00E6 -:1013F00000000000FF0FBE0E000000000000000013 +:1013E00000000000000000000000000000000000FD +:1013F00000000000000000000000000000000000ED :1014000000000000000000000000000000000000DC -:101410007D007DFF287D287DF704F704F03CFF3C2C +:1014100000000000000000000000000000000000CC :1014200000000000000000000000000000000000BC -:10143000000000000000000001010000D4D7C0C37C -:1014400000000000FACAFAFA0000000000000000E4 +:1014300000000000000000000000000000000000AC +:10144000000000000000000000000000000000009C :10145000000000000000000000000000000000008C -:1014600000000000000000000000033F00FFFB0040 -:10147000510000000000FF0FBE0E00000000000041 +:10146000000000000000000000000000000000007C +:10147000000000000000000000000000000000006C :10148000000000000000000000000000000000005C -:1014900000000061000E000D000000610006001D4C -:1014A000000000610006000D000000610005000959 -:1014B00000000000000000000000000040000000EC +:10149000000000000000000000000000000000004C +:1014A0000000000000000000000005000A08050020 +:1014B00000A005000A08050000A0000000000000D0 :1014C000000000000000000000000000000000001C -:1014D000000000000000000000000000000000000C -:1014E0000000000000610006000D000080610006A1 -:1014F000000D000000610006000D0000000000006B -:1015000000000000000000000000000000000000DB -:10151000000000000000000030303030000000000B -:10152000282F28280000008A82028282BEBE14145E -:10153000033F033F00000000000000000000000027 +:1014D0000000000000610007000D00000000000097 +:1014E00000000000000000000000000000000000FC +:1014F00000000000000000000000000000000000EC +:101500000000000000000000000000000061000674 +:10151000000D0000000000000000000000000000BE +:1015200000000000000000000000000000000000BB +:1015300000000000000000000000000000000000AB :10154000000000000000000000000000000000009B :10155000000000000000000000000000000000008B -:1015600000000000000005050505000000002D2D0D -:101570002D2D00FF00FF0A050C0CFF00FF000000EE +:10156000000000000000000000000000000000007B +:10157000000000000000000000000000000000006B :10158000000000000000000000000000000000005B -:101590000000000000000000000030BA3030000001 -:1015A00000002828282800AA008AD757D7D7BEBE0F -:1015B0001414033F033F000000000000000000007F +:10159000000000000000000000000000000000004B +:1015A000000000000000000000000000000000003B +:1015B000000000000000000000000000000000002B :1015C000000000000000000000000000000000001B :1015D000000000000000000000000000000000000B -:1015E0000000000000000000053D050500000000AF -:1015F0001E1E1E1E00003F3F5FAFCFCFFF00170033 +:1015E00000000000000000000000000000000000FB +:1015F00000000000000000000000000000000000EB :1016000000000000000000000000000000000000DA -:1016100000000000000000003C003C000000000052 -:1016200000000000000000003C3C7D7DFA3CAA3C2C -:10163000C341C341FFFFFF000000000000000000A5 +:1016100000000000000000000000000000000000CA +:1016200000000000000000000000000000000000BA +:1016300000000000000000000000000000000000AA :10164000000000000000000000000000000000009A :10165000000000000000000000000000000000008A -:101660000000000000000000000000000000003C3E -:10167000053D000000000F0B0A0B05AF05AF050488 -:1016800045440000000000000000000000000000D1 -:10169000000000000000000000003E0A3C000000C6 -:1016A0000000000000000000000000004141FA3C82 -:1016B000FF3C00E100C30303FF0000000000000046 +:10166000000000000000000000000000000000007A +:10167000000000000000000000000000000000006A +:10168000000000000000000000000000000000005A +:10169000000017173F3F000000000000000000009E +:1016A000000000000000000000000000000000003A +:1016B000000000000000000000000000000000002A :1016C000000000000000000000000000000000001A :1016D000000000000000000000000000000000000A :1016E00000000000000000000000000000000000FA -:1016F000003C003C000000000F0F0F0F05AF05AFCE -:101700000100414000000000000000000000000057 -:1017100000000000000000000000000000042000A5 -:10172000C0002000040000000000880000108800B5 -:1017300020100010880000008982018888002000A5 -:1017400088002000200004008800000000008800BD -:1017500000008400200000000083840800032000B3 -:101760002000001000002000200000000400820083 -:101770000000880020082004C00005080880000040 -:1017800020000008C00520002000880020008802FA -:101790008400880002008802400889880402000052 -:1017A00000000000000200000090000000020000A5 -:1017B0000000000000000000000004040411008488 -:1017C0000000000200000000000000000000000017 -:1017D00000000000000000000000000809020000F6 -:1017E0004000000000000000400000004008110020 -:1017F000000000002100210800000000A00180027C -:10180000204010000008000000900000000005903B -:101810004002009004002000200009400405A001BF -:101820000000000000000041000000000000000374 -:1018300000000000000000000000000000800080A8 +:1016F00000000000000000000000000000000000EA +:1017000000000000000000000000000000000000D9 +:101710000000000017170303000000000000000095 +:1017200000000000000000000000000000000000B9 +:101730000000000000000000000000800000000029 +:101740000000000000000000000000000000000099 +:1017500000000000100000000000008000030000F6 +:101760000000000000000000000000000000000079 +:1017700000000000000000000000000000800000E9 +:101780000000000000000000000000000000000455 +:101790000000000000000000000000000100000048 +:1017A0000000000000000000000000000000000039 +:1017B0000000000000000000000000000004000025 +:1017C0000000000000000000000000000004000015 +:1017D0000000040000000000000000900004000071 +:1017E00000900000000000020040004000020000E5 +:1017F0004000000000C000000000000400000004E1 +:101800004000000000000000000000000000000098 +:1018100000000000000000000000000000002000A8 +:1018200000000000000000000000000000000000B8 +:1018300000000000000000000000000000000000A8 :101840000000000000000000000000000000000098 -:1018500000000400020000000000001000000080F2 -:101860000000020000000200000000000000A003D1 -:1018700000030008021000000204000000108400B1 -:1018800002091000000000030004000000040040F2 -:101890000000020000000000020000000000000044 -:1018A00008C000000088008200100010008800843A -:1018B0000000000000100088001000000040000838 -:1018C00000040000001000100000000000840084EC -:1018D0000084000808100084001000840084004088 -:1018E00000080000008400080008008400000008D0 -:1018F0002004008400820000401004880008008258 -:101900004108200800880584408402100004000873 -:101910000002090020880008000804840008000272 -:1019200000020008000000410010200088000000B4 -:101930000000020000000400000000008408000015 -:1019400000084040A008000000000008000000005F -:101950000008000000032000000020000000000339 -:101960000008009000000200000040050000880907 -:101970004009000000030410000088030009000073 -:101980000009042190210000404088002000100040 -:1019900000000005020800000040001000080000E0 -:1019A0000000840084004000410000080084099089 -:1019B0000884410000000084410002000400008807 -:1019C000008202008882000200080000030000027A -:1019D000200000000208001000820008000800003B -:1019E0000008008403020000000020000000000046 -:1019F00000000300000040841082110805000584E7 -:101A000020000200050005840090000041900000C5 -:101A1000002000102140000000000000080000002D -:101A20000000000010084008000008000002080044 -:101A30004000000908000041A0000000C0000800AC -:101A400000000000A0000000000090080800000056 -:101A500000000000000008000000080082000000F4 -:101A60000000C00000000000000000208200820092 -:101A70000000C0000000C0104005C0008200C0008F -:101A80000000820000008204C020820082048200E4 -:101A900000008200A0001000000084000000880008 -:101AA00010001000080008001000000000200000D6 -:101AB00000000084000000840420000020000000DA -:101AC00000080004009000A00000000000000000DA -:101AD00000000000000000000000000000000010F6 -:101AE00009000000000000000000000000900082DB -:101AF00000200000000000202000000000C010A016 -:101B0000000000000000008400041000000000003D -:101B100000000008000000000000100000000000AD -:101B20000000000000004100000000000000000074 -:101B3000C00040000000C000A00008000021000517 -:101B400000000000A00000000000000000100000E5 -:101B5000000800000000000000000000000000007D -:101B60000800000000050000080200040000000852 -:101B7000C000080008080808C003C0008400200254 -:101B8000200082080011C000840800000404C00086 -:101B900000000004000008000000820000000000B7 -:101BA0000000100000000000000000000180401054 -:101BB0002008000400902100210800080000000017 -:101BC00000080000000000000000000000084000C5 -:101BD0000000000000000040000800880000000035 -:101BE0000200001000840008000000401101000005 -:101BF00000002000000000000000000000000000C5 -:101C00000000008800000000009000901004828313 -:101C10000908099005904008000400000000000039 -:101C200000000000000000404000000040002010C4 -:101C300082002000900000000800000090000008D2 -:101C400002080040A0080021200500080000001044 -:101C5000004000002000000088002000000000007C -:101C600000000002002020000009004000000021C8 -:101C700000000810000000210040A0000000082122 -:101C8000000000100810000000100000C000000953 -:101C900000080800844190009008A0000000100097 -:101CA0000000000000000020902000000000000064 -:101CB00002000000000800000000000000C000005A -:101CC00000002090000000002084000000000000C0 +:101850000000000000000000000000000000000088 +:101860000000000000000000001000000010000058 +:101870000000000000000000000000000000000068 +:101880000000000000000010000000410000000007 +:101890000000000000408441000000000000000043 +:1018A0000000000000000000000000000008000030 +:1018B000000000880084008200000008000000088A +:1018C00000000000000000000000000000C0000058 +:1018D00000000000000000000000000800000008F8 +:1018E00000000000000800000008000000000000E8 +:1018F00000000000000000000000000000080010D0 +:101900000084000000080000000800000000000043 +:1019100000C000C0000000000000000000A00000A7 +:101920000000000000210021002100210000002112 +:1019300000000021002100210021002100000003FF +:1019400000000021002100210021002100000021D1 +:1019500000000021002100030021002100000008F8 +:1019600000000021000000210000002100210041B2 +:1019700000000000002100210000002100210000E3 +:10198000002100000021002100000021C0210000F2 +:1019900000052005202100030000000520090000AB +:1019A0000000000000030000000000000000000034 +:1019B00000000000000000000000008200000000A5 +:1019C000000008000000000000000000000000000F +:1019D0000000000000000000000000000000000007 +:1019E00000000000000000000000000000000000F7 +:1019F00000000000000000000000000000000000E7 +:101A000000000000000000000000000000000000D6 +:101A10000000000000000040000000000000000086 +:101A20000000000000900000000000000000000026 +:101A300000000000000000000000000000000000A6 +:101A40000000000000000000000000050000000091 +:101A50000000000000000000000000000000000086 +:101A60000000000000110000000000000000000065 +:101A70000000000000000000000000110000000055 +:101A80000000000000000000000000000010000442 +:101A900000000000002000400000000000110011C4 +:101AA00000004041000400000011000000000000A0 +:101AB0000000000000000000000000000000000026 +:101AC0000000000000000084000000000000000092 +:101AD0000000000000000000000000000000000006 +:101AE00000000000000000000000000000000000F6 +:101AF00000000000000000000000000000000000E6 +:101B0000000000000000000000000088000000004D +:101B10000000000000002004200000000000200061 +:101B200000002020049000000000000000000003DE +:101B3000000000000041000800000000000000005C +:101B4000000000000000002100000000000800006C +:101B50000000000000000000000000000000000085 +:101B60000000000000210008000000000000000844 +:101B70000000000000000000002100000000000044 +:101B80000000000000000800001000000000000835 +:101B90000000000000000000000500000000000040 +:101BA0000000000800000000000000000008000025 +:101BB0000000000000000000000000000000000025 +:101BC000000000000000000008000000000000000D +:101BD00000000000090000000000000000000000FC +:101BE00000000000000000000000000000000000F5 +:101BF00000000000000000000000000000000000E5 +:101C000000000000000000000000000000000000D4 +:101C10000000000000000020000000400000000064 +:101C200000000000000000000000000000000004B0 +:101C3000000000000000000000000008000000009C +:101C40000000000000000000000800030008000081 +:101C50000000000000080000000000040000000078 +:101C60000000000000000000000800030008000061 +:101C70000000000000000000000000000021000043 +:101C80000000000000000000000000080003002128 +:101C9000000000000000000000000000000500003F +:101CA000000000000008000800000002000000081A +:101CB00000400000410000000000000000000000A3 +:101CC0000000000000000000000000000000000014 :101CD0000000000000000000000000000000000004 -:101CE00000000000000000100082008220000000C0 -:101CF000048400000000001000002000000000002C -:101D000000000000090000002084200020000000E6 -:101D10001000110100000000200000080000000079 -:101D200000000000000010000000000000000000A3 -:101D300000000000000000000000000100000000A2 -:101D4000000000080000C0000004C0820000C000C5 -:101D50000001000000000000000000000000000082 -:101D6000000001840100080000828282000000005F -:101D70000001000000000000000000000000000062 -:101D80008800000001880000C0000004C08200003C -:101D9000C000000100000000000000000000000082 -:101DA0000000000000040000C0000004C082000029 -:101DB000C00000010000000000000000000800005A -:101DC0000000001111800041C000008080800000F0 -:101DD000800000030000000000000000000300007D -:101DE0000000000440000405A10000008080000005 -:101DF0000000004100000000000000000000001191 -:101E000009000000004103000003C0000080808042 -:101E1000000080000003000000000000000000033C -:101E200000000000000503800040C00000808080AA -:101E300000008000000300000000410000200000BE -:101E400000000200000008009000A08000030300D2 -:101E50008000000000C08004000041000004000079 -:101E60000000090000004000040040800000030062 -:101E70000000000000008020000000004100004041 -:101E8000000000000800000010001000208000008A -:101E900003000000000000808040000005000000FA -:101EA00000000000050000000200900020800020DB -:101EB000030000000000008080040000000000001B -:101EC0000000000000000000010003000382000089 -:101ED00001404000000000C082000000000000003F -:101EE00000000000000000000100A00085040000C8 -:101EF0000100840000000000C0010000000000009C -:101F0000000000000000010000000000C10082028B -:101F1000000001004000000000C08200000000003E -:101F200000000000000000000000010041008202EB -:101F3000000101004000000000C08200000000001D -:101F400000000000000000000000100000A00000E1 -:101F50000100000000000000000000000000000080 -:101F600000000000000000000000A0010020A00010 -:101F7000C10000000000000000010000000000009F -:101F80000000000000000000000000000800002029 -:101F90000000010000000000000000000000000040 -:101FA0000000000000000000000000000800002009 -:101FB0000000010000000000000000000000000020 -:101FC00000000000000000000000004100020000CE -:101FD000000041000000000000000041000000007F -:101FE0000000000000000000000000090003008065 -:101FF000000041000000000000000041000000005F -:1020000000000000000000000000000000418010FF -:10201000000000004100000000000000004100003E -:1020200000000000000000000000000000208040D0 -:10203000000000004100000000000000004100001E -:1020400000000020008300000010000009000000D4 -:1020500000C1000000080000004100000000024034 -:102060000000000400830000000200208500000042 -:1020700000C18000000400000000002000000305F3 -:1020800000000000004000830000001100098200F1 -:10209000000000C1800000030000004100050000B6 -:1020A000200300008005008300000020800009005C -:1020B000000000C10000000300000041000000001B -:1020C000028400002000008300000000880010004F -:1020D00000000005A000000000000001000000005A -:1020E00001A1000004000083000000018201400003 -:1020F0000000000940000001000000000001000095 -:1021000001C0000000004000008300000000020049 -:102110008200000000050200000000000001000035 -:102120000000008300000400008300000000200085 -:1021300082000000000540000000000000010000D7 -:102140000000010500000000000000000000000089 -:1021500000000000811200E007004842000000007B -:1021600000004842000000000000000000000000E5 -:1021700000000000811200E007004811000000008C +:101CE00000000000000000000000000000000000F4 +:101CF00000000000000000000000000000000000E4 +:101D000000080008000000000000000000000000C3 +:101D100000000000000000040200000400040000B5 +:101D20000040000400000000200020840920202042 +:101D30000000204000000000000000000000000043 +:101D40000000000000000000000200000000000091 +:101D50000000000000000000000000000000000083 +:101D60000000000000000000000200000000000071 +:101D70000000000000000000000000000000000063 +:101D80000000000000000000000000020000000051 +:101D90000000000000000000000000000000000043 +:101DA000000000000000000000000008000000002B +:101DB0000000000000000000000000000000000023 +:101DC00000000000000000091000000000000000FA +:101DD0000000000000000000000000000000000003 +:101DE00000000000000000091000000000000000DA +:101DF00000000000000000000000000000000000E3 +:101E000000000000000000000009100000000000B9 +:101E100000000000000000000000000000000000C2 +:101E20000000000000000000110910000080000008 +:101E30000000000000000000000009000000000099 +:101E40000000000000000000020009000080000007 +:101E50000000000000000041000009000000000038 +:101E600000000000000000000200090000800000E7 +:101E70000000000000000040000000000900000019 +:101E800000000000000000000000020009000080C7 +:101E90000000000000000000002000000900000019 +:101EA000000000000000000000000200820000802E +:101EB00000000000000000000040000000000000E2 +:101EC00000000000000000000000880002C00008C0 +:101ED00010000200000000000001000000000000EF +:101EE00000000000000000000000880002C00008A0 +:101EF00010000200000000000001000000000000CF +:101F0000000000000000000000000000880002C087 +:101F100000081000020000000000000100000000A6 +:101F2000000000000000000000000000880010C059 +:101F30000040C00088000000000000010000000018 +:101F40000000000000000000000000000088000009 +:101F50000000000000000000000000000000000081 +:101F600000000000000000000000000000880000E9 +:101F70000000000000000000000000000000000061 +:101F800000000000000000000000000000000088C9 +:101F90000000000000000000000000000000000041 +:101FA00000000000000000000000000000000088A9 +:101FB0000000000000000000000000000000000021 +:101FC0000000000000000000000000000000000011 +:101FD0000000000000000000000000000000000001 +:101FE00000000000000000000000000000000000F1 +:101FF00000000000000000000000000000000000E1 +:1020000000000000000000000000000000000000D0 +:1020100000000000000000000000000000000000C0 +:1020200000000000000000000000000000000000B0 +:1020300000000000000000000000000000000000A0 +:10204000000080000091000000000000000000007F +:10205000004100000011000000000000000000002E +:102060000000800900830000000000000000000064 +:10207000004180000011000000000000000000008E +:10208000000000008000009100000000000000003F +:1020900000000041000000110000000000000000EE +:1020A000000000008000009100000000000000001F +:1020B00000000041000000020000000000000000DD +:1020C00000000000080000100000000000000000F8 +:1020D00000000005020000000000000000000000F9 +:1020E0000000000008000083000000000000000065 +:1020F00000000005100000000000000000000000CB +:1021000000000000000008000010000000000000B7 +:10211000000000000005C0000000000000000000FA +:102120000000000000000800001000000000000097 +:10213000000000000005C0000001000000000000D9 +:10214000000000000000000000000000000000008F +:1021500000000000810000E00000480000000000D6 +:10216000000000120000000000000000000000005D +:1021700000000000810000E00000480000000000B6 :10218000000000000000000000000000000000004F -:10219000000000000000811200E00700484200003B -:1021A00000000000484200000000000000000000A5 -:1021B000000000000000811200E00700484200001B -:1021C0000000000048420000000000000000000085 +:10219000000000000000810000E000004800000096 +:1021A000000000000000000000000000000000002F +:1021B000000000000000810000E000004800000076 +:1021C000000000000000000000000000000000000F :1021D00000000000000000000000000000000000FF :1021E00000000000000000000000000000000000EF :1021F00000000000000000000000000000000000DF @@ -143950,210 +143950,210 @@ :10229000000000000000000000000000000000003E :1022A000000000000000000000000000000000002E :1022B000000000000000000000000000000000001E -:1022C00000000000000000000000757B000000001E +:1022C00000000000000000000000747B000000001F :1022D00000000000000000000000000000000000FE -:1022E0000000000000000000DEAE257B00000000C2 +:1022E0000000000000000000DE2E747B00000000F3 :1022F00000000000000000000000000000000000DE -:102300000000000000000000DEA40000757B00005B +:102300000000000000000000DE2E0000747B0000D2 :1023100000000000000000000000000000000000BD -:1023200000000000000000000000DEAE757B000031 +:1023200000000000000000000000DE2E747B0000B2 :10233000000000000000000000000000000000009D -:1023400000000000000000000000DEAE6126034037 +:1023400000000000000000000000DE2E6156034087 :102350000000000000000230A000000000000000AB -:102360000C4000000000000002C0648661260340AB +:102360000C4000000000000002C06A866156034075 :102370000000000000000230A0000000000000008B -:102380000C4000000000000002C0648600006126CE +:102380000C4000000000000002C06A860000615698 :1023900003400000000000000230A0000000000028 -:1023A00000000C4000000000000002C064866126AE +:1023A00000000C4000000000000002C06A86615678 :1023B00003400000000000000230A0000000000008 -:1023C00000000C4000000000000002C064862000F5 -:1023D000010000000400C00800000180100020007F -:1023E000040020000200000800000000001020008F -:1023F000040004000410C00000000005400020009C -:10240000080020000411000010080485C004000129 -:1024100000008800400004100800080008000000C8 -:102420002100400021052000200000000802820059 -:1024300040000800400020000000880002800000EA -:102440008800040020002000040088000400200010 -:10245000C000200000000004400100002002000035 -:102460000000A00000000900400040000000000043 -:1024700000000000000020000000000000008000BC -:1024800010008402000000000000000000020001B3 -:102490000000000000000000092080008000800093 -:1024A0000000A000800008002100C0000000A00182 -:1024B00040000000C000000200002090400080109A -:1024C000000010C020401002410000004120210007 -:1024D0000000900001009041000000000008084149 -:1024E0000105000004400200008202030000000811 -:1024F00082000000100000000000C000000000008A -:10250000084000004000000410000000001000110E -:102510000204000020408909018800000000A00496 -:10252000080500100805000083020090209082102A -:10253000008209848208050408000004009000C09D -:10254000A0C103040000020002100204084082003F -:10255000004000040000200400000000001000857E -:10256000000004001100808810000011000000101D -:102570000000000000400000000402000000000015 -:102580001000008200048084000800100010004148 -:1025900000C000080000080002080802000800103F -:1025A00000108008020980080008088904028003DE -:1025B00020410205C005000040840040098440031A -:1025C00004100410081000044110090800088000DD -:1025D000000000000008000000110000004140025F -:1025E0000000848200000000000800000800400095 -:1025F0000008400202050005002100080008000054 -:1026000000080000000000000008020090034010D5 -:102610000000000840000000082100020010000037 -:102620000000000809020002000901214188088811 -:10263000008241040010010540050840824002026A -:10264000840020009080900000000005000000033E -:10265000000000000040000000000000000000003A -:1026600080830000000500000982000000828008CD -:10267000000000000000000000000000000000005A -:1026800000080000000000000082000000000000C0 -:1026900080090000008800000000000000010040E8 -:1026A000080041884100C0010500000020004004EE -:1026B00090042105A0010501200480004183410010 -:1026C00000010300030000020000000000000300FE -:1026D0004000100009000000000000000021000080 -:1026E000080000050004008200C000000000000097 -:1026F000000000000000000000400000000000009A -:1027000000000800000000080000000008030104A9 -:102710004004820400000005000000000000850065 -:1027200000030021C000C141018000821004008428 -:10273000A009400483008200100000000811C0407E -:1027400008004080C00040882121000890088221B4 -:1027500000214000A0051000C0000221008420825A -:1027600000002082008400000005000400080040F2 -:1027700000080004000000000000008400000000C9 -:10278000000000000000000000C000080008000079 -:10279000400080000088410441880084000000005F -:1027A00008004184008400C04000400241030083CF -:1027B00000410040858840400000410410888000AE -:1027C00008000008800200088002080821000008B4 -:1027D000210004A000000382410008080500C00099 -:1027E0000003000000110003000000028941000006 -:1027F000A00500000010000000020000000800001A -:1028000000000000000000000000000008000003BD -:102810000000C000080002080000001002090000CB -:10282000080508410800C0000800000284100810D4 -:1028300002830904A002C0404009C0002082210494 -:10284000C000080040080004002088090800841126 -:1028500000000040840082400000000008210000C9 -:1028600000C0000000000000090000000011400846 -:102870000000000000000301000000A000000000B4 -:102880000000000000000000000000000000000444 -:1028900000000000000000000000000000000088B0 -:1028A00000000000000000000000008400A1008281 -:1028B0000900000408910005080040000800800598 -:1028C000A020400020004000410000000000000067 -:1028D00000000000000000000800000000000000F0 -:1028E00000000008000300000000410240800002D8 -:1028F0004080000400000000000000100002000002 -:102900000000000000000000002100210000000085 -:102910000000100020030000880400000021202196 -:1029200000000000841082000009840400040000FC -:102930004184001008040000100000210040080538 -:102940000190200000000009080008040040081061 -:102950000110000008000000C0200000080000086E -:102960000000000000820000000800009083800842 -:10297000000180020000000000000088000000004C -:102980000000000000000000000000000000000047 -:1029900000000000000004000000000000400000F3 -:1029A00000A000000000000003000000000000087C -:1029B0000000C010000000830500000000000010AF -:1029C0001100400308080082100004828002000009 -:1029D00010014083000800004108032000A0000807 -:1029E0001040038400080000000000010001000006 -:1029F00010000001000005900002A0A082820000EB +:1023C00000000C4000000000000002C06A8600000F +:1023D00088002000000000002000200020002000D5 +:1023E00000002000200000000000000000000000AD +:1023F000200000000000000020002000200020003D +:10240000000020002000000000000000000000028A +:1024100000002000000000000200200020802000BA +:102420002000000020002000000000000200000446 +:102430000080200082040000000020002000200016 +:10244000200000002000200200000000000000002A +:10245000000000000000000000000000000000007C +:10246000000000000000000000000000000000006C +:10247000000000020000000000000000000000005A +:1024800000004000000000000000000000000040CC +:1024900000000000404000400000C00000000010AC +:1024A00000004000000000040004000000000004E0 +:1024B00000000010000000000000000000400000CC +:1024C0000000000000000002000100000000000009 +:1024D000000000400140000000200000000000005B +:1024E00000000000020000090040000000000000A1 +:1024F0000040000000000040084002000000020010 +:1025000000000200080000000000000000000010B1 +:1025100000000001004000400000004000000040BA +:1025200000000000020000000000000900000000A0 +:102530000000000000000200000000050000000094 +:10254000001000008200000000400000000082092E +:1025500000410040000104010000000100080000EB +:10256000000800080010000800000000000800003B +:1025700000840000000000000000000000080000CF +:102580000008000800000008000000000008020029 +:102590000000000000000000000000000000000833 +:1025A000000102080008000000080000000000848C +:1025B00000000000000000001110040000C000082E +:1025C00000000008020800000084000000000088ED +:1025D00000000000030000000000000000000000F8 +:1025E00000000000000000000000000000000000EB +:1025F0008200000000000000000000000000000059 +:1026000000000021000000000000000000000000A9 +:1026100000000003000000000000000000000000B7 +:102620000005000000100000000000000000001085 +:102630000008000000000000002100000000000071 +:102640000021000000000000004100000000000523 +:1026500000030020008001000000000000000000D6 +:10266000000000000000000000000000000000006A +:102670000008000000A000000000000000000000B2 +:10268000000000000000000000000000000000004A +:1026900000080000008200000000000000000000B0 +:1026A0000000000000000001100000000000000019 +:1026B000000000A0000000820000000000000000F8 +:1026C0000000000000000000000000000088000280 +:1026D0000000008200010010040000C000A0008083 +:1026E00000800000A00000000000000000000000CA +:1026F00000000000000000000000000000000000DA +:1027000000000000000000000000000000000000C9 +:102710000000000000000021000000000000000098 +:102720000000000000000000000000800000000029 +:10273000000000000000000000000000002100096F +:102740008800000088058811000000110040000387 +:102750000000000300C00041010900C00021002169 +:102760000020004000000000000000000000000009 +:102770000000000000000000000000000000000059 +:102780000000000000000000000000000000000049 +:102790000000000000000000000000000000000039 +:1027A0000000000000080000000000000010000011 +:1027B0000000000000000000000000000000000019 +:1027C000050009000004000000A02100200009000D +:1027D00021100000000400214190080005210000A4 +:1027E00000000020000000000000000000000000C9 +:1027F00000000000000000000000000000000000D9 +:1028000000000000000000000000000000000000C8 +:1028100000000000000000000000000000000000B8 +:1028200000000008000000000000000000000000A0 +:102830000021000000000000000000000000000077 +:102840000000001000000000000000000000000078 +:10285000000000009000000000400000091000008F +:10286000000000000001000000080000000000005F +:102870000000000800000000000000000000000050 +:102880000000000008000000000800000000000038 +:102890000000000800000000000000000000000030 +:1028A0000000000000000000000000080000000020 +:1028B0000000000000080000000000000000000010 +:1028C0000000000000000000000000080000000000 +:1028D0000000000800A0000000000001000004014A +:1028E000000001800980010001800000000000005C +:1028F00000000000000000000000000000000000D8 +:1029000000000000000000000000000000000000C7 +:1029100000000000000000000000000000000000B7 +:1029200000000000000000000000000000000000A7 +:102930000000000000210000000000000000200056 +:1029400000000000000000002000000000008800DF +:102950000000004100114000400000000080009194 +:1029600001890084022002400400044000000000AD +:102970000000000000000000000000000000000057 +:102980000200000000000000000000000000000045 +:1029900000000000000000000000000000A0000097 +:1029A0000000000000000000000000000000000027 +:1029B0000000000000000000000000000000000017 +:1029C00000000000000000000000090000000800F6 +:1029D00000000004000002001188118400000010B3 +:1029E00040200820402000C0000400209002000089 +:1029F00000000000000000000000000000000000D7 :102A000000000000000000000000000000000000C6 -:102A10000000100000000120011040020020C0A0B2 -:102A2000002100001001000000020010C09090087A -:102A300000A0900000090202008801A004A0000884 -:102A400000A110030008008240A021014001820380 -:102A500000A0210284A0000300000000000000008C -:102A600000000000000000000003004111400010C1 -:102A70000009804102110000900020000080000049 +:102A100000000000000000000000000000000000B6 +:102A200000000000000000000000000000000000A6 +:102A3000020000000000C0000000000000000000D4 +:102A400000000000000000000090000400400002B0 +:102A500000000000000000000000010088000000ED +:102A600041A0208800908400008000800000008049 +:102A70000000000000000000000000000000000056 :102A80000000000000000000000000000000000046 -:102A900000000900000000001000218080000000FC -:102AA000C084008404088008000000000090000931 -:102AB00000000280111000038005008003008000E8 -:102AC0000000008800880003008088809003801048 -:102AD000808420A090C180C000A100000000000000 -:102AE000000000000000000000000080000000095D -:102AF0000041890000000004C121410021214084DF -:102B00002080000000000000000000000000000025 -:102B100000000000000000000000000002001000A3 -:102B200021100500034105A1080000000900030071 -:102B3000200090808280000090910802800920107F -:102B40009002102100C0021088A000030300102191 -:102B5000911190A080008800888408830000000004 -:102B600000000000000000030080000000020000E0 -:102B700000000001102088002001110184000102E2 -:102B800001A005040000000000000000000000009B -:102B9000000000000000000000000000000800002D -:102BA00001000101840088000511828800002008CE -:102BB0000900110010A08840100040029100880810 -:102BC00008000201009100110100A1A100014004D0 -:102BD0002100A09083A002901000A1092103000011 -:102BE0000000000000000000000100040090000050 -:102BF00000000100000000010000C0010001C0054C -:102C000000840003028400000000000000000000B7 +:102A90000000000000000000000000000000000036 +:102AA0000000000000000000000000000000000026 +:102AB0000000000000000000000000000000000016 +:102AC0000000000000000000000002000000008084 +:102AD00000000000000000000000000008000000EE +:102AE00000008900800000000000000000000000DD +:102AF0008000000000000000000000000000000056 +:102B000000000000000000000000000000000000C5 +:102B100000000000000000000000000000000000B5 +:102B200000000000000000000000000000000000A5 +:102B30000000000000000000800080000000000095 +:102B40000000000000000000000000000000000580 +:102B50000000000000000000000000000000000075 +:102B600040001000000000008084000020000000F1 +:102B70000000C00000000000000000000000000095 +:102B80000000000000000000000000000000000045 +:102B90000000000000000000000000000000000035 +:102BA0000000000000000000000000000000000025 +:102BB00000000000000002002000A000C000000093 +:102BC0000000000000000000000000000000000005 +:102BD0000000008400000000000000000000000071 +:102BE0000000000000004000044004C0A0020100FA +:102BF0000020000200C000000000000000000000F3 +:102C000000000000000000000000000000000000C4 :102C100000000000000000000000000000000000B4 -:102C200000000000C001A0C00104110900A00000C4 -:102C3000208801A0008840A004880100090908003C -:102C400084020491A002010190108488048901008B -:102C5000889000880085018200100188A00402018C -:102C60000000000000000000000000000000000064 -:102C70000000210004000000002100200021044188 -:102C800080400003002183100000000000000000CD -:102C900000000000000000000020001100040009F6 -:102CA00000100009001000080009088085A10589AE -:102CB00000000000088402050091804108052121E0 -:102CC000800000C100088009200800A000008021C9 -:102CD00020200000000900A108800020104183A0EE -:102CE0008010000000000000000000000000000054 -:102CF0000000090902001000100010A141C110805D -:102D00001002108008098000020800000000000086 +:102C200000000000000000000000000000000000A4 +:102C3000000000000000000000C00010008400C080 +:102C40000000000000000000000000000000000084 +:102C500088000000000008000000000000000000E4 +:102C60000001000000010001010000C0848485C053 +:102C70002000000000800080000000000000000034 +:102C80000000000000000000000000000000000044 +:102C90000000000000000000000000000000000034 +:102CA0000000000000000000000000000000000024 +:102CB0000000000000000000000000000000000014 +:102CC0000080000000000000000000000000000084 +:102CD0000000000000000000800000000000000074 +:102CE00000000010000900210003400000000080E7 +:102CF000A1800000004000800000000000000000F3 +:102D000000000000000000000000000000000000C3 :102D100000000000000000000000000000000000B3 -:102D2000000040000000090010008000800080804A -:102D30000010000000802004210040039021A10029 -:102D40002180910840049080880088008321A100A0 -:102D5000850008912190850841808503211000009D -:102D60004100200000000000000000000000000002 -:102D700000000000000000000100000000890021A8 -:102D8000010200009008030184108201000000008D +:102D200000000000000000000000000000000000A3 +:102D30000000000000000000000000000000008013 +:102D40000000000000000000000000000000000083 +:102D500000000000000080000000000000000000F3 +:102D6000000000000080002000000010000000C1F2 +:102D70008011000000000090000200000000000030 +:102D80000000000000000000000000000000000043 :102D90000000000000000000000000000000000033 -:102DA000000000000100000000000100401002C00F -:102DB00008080200000000A0000201080001040150 -:102DC000102021A0A001A001A110410402000201D5 -:102DD00040200208208891C084400084A0010101A5 -:102DE0008888020001000000000000000000900040 -:102DF000100020000000000000E0000000120000B1 -:102E000000E00700820000000000070088000000CA +:102DA0000000000000000000000000000000000023 +:102DB0000000000000000000000000000000000013 +:102DC00000100000000000000000000000000000F3 +:102DD000000000000000C000A000C00008000000CB +:102DE00000000000000000C0000100000000000022 +:102DF000A00508C18200000600004300000000009A +:102E000000000000000000000000000000000000C2 :102E100000000000000000000000000000000000B2 :102E200000000000000000000000000000000000A2 -:102E300000E0000050000000000000000000000062 -:102E40000000000000000000000000200000000062 -:102E50000000002000000000000000000000420010 -:102E60000000000000000000000000000000000062 -:102E70000000000000000000000000000000000052 -:102E8000000000000000000099999999FFF09990C6 +:102E30000000000000000000000000000000000092 +:102E40000000000000000000000000000000000082 +:102E50000000000000000000000000000000000072 +:102E60000000000000000000000000000000420020 +:102E700000000000070082820000000000F000FF58 +:102E80000000000000000000000000000000000042 :102E90000000000000000000000000000000000032 :102EA0000000000000000000000000000000000022 -:102EB000FFFFEFE6C383C3830000000000003C3047 -:102EC0000030F090FF3CFF3CFF3C3CFF3CFCF03C02 -:102ED000F03C000000003F303F30DBDBDB420F996D -:102EE0000F9966F066F0FC0CFC0C0000000000007E -:102EF0000000FFF6999000000000000000000000B4 -:102F000000000000000000000000FCFCF0FCE7F006 -:102F100081900000000000000000000000000000A0 +:102EB0000000000000000000000000000000000012 +:102EC000000000000000002400400000000000009E +:102ED00000000000000000000000206666660000A0 +:102EE00000000000000000000000000000000000E2 +:102EF000000060206020000000000000000000F0E2 +:102F000000000000000000000000000000000000C1 +:102F100000000000000000000000000000000000B1 :102F200000000000000000000000000000000000A1 -:102F30000000999989800000FFFF00000000000058 -:102F40003C3C3C3CF090FF3C003C003C000000005E -:102F5000F03CF03C0C0C606F3F303F30DB42DB421A -:102F6000C3FFC30066F066F0FC0CFC0C0000000020 -:102F7000000000006F660900000000000000000073 +:102F30000000000000000000000000000000000091 +:102F40000000000000000000000000000000000081 +:102F500000000000000000000000000020660000EB +:102F60000000000000000000000000000000000061 +:102F70000000000060206020F00009000000000058 :102F80000000000000000000000000000000000041 :102F90000000000000000000000000000000000031 :102FA0000000000000000000000000000000000021 @@ -144161,495 +144161,495 @@ :102FC0000000000000000000000000000000000001 :102FD00000000000000000000000000000000000F1 :102FE00000000000000000000000000000000000E1 -:102FF00000000000000000000000000000000000D1 -:1030000000000000000000000000FFFF3C3C66667E -:10301000F0F0C3C3FFFF000000000000000000004C -:10302000000000000000000000000000000091000F -:10303000010000000000FFFFFF00666666660000FA -:1030400003033F3F7E7E424230303F3FC9C9C9C97A -:1030500000C000C0C9C9C9C9C3F30000666666667E -:103060003C3CFFFF9F06990076F734B52D2D00FFFD -:103070000000000000000000000000000000000050 -:10308000000000000000000000000000F7C3100076 -:103090007E66F0F0C3C3C3C3000000000000000060 +:102FF00000000000000000000000000000000303CB +:1030000000C30000000000000000000000000000FD +:1030100000000000000000000000000000000000B0 +:1030200000000000000000000000000000000000A0 +:103030000000000000000000000000000000000090 +:10304000000000000000000000000000001800095F +:103050000000000000000000000000000000000070 +:10306000BFFF0000000000000000000000000000A2 +:1030700000000000000000000009009900000000AE +:10308000030300C366663C3C000000000000000033 +:103090000000000000000000000000000000000030 :1030A0000000000000000000000000000000000020 -:1030B000910001000000000000FF00000CCF00FFA5 -:1030C0000000E724E72430F330F360606F6FFFF017 -:1030D0000F00000000C309F909F9FFF3000000FF29 -:1030E00000FF0000C3C3BD24990076F734B52D2D31 -:1030F00000FF0000000000000000000000000000D1 -:10310000000000610001000D00000060000F000CD5 -:10311000000000610E0E000D000100000000000024 -:103120000000000000000000000000610006000D2B -:10313000000000610006000D0000006100070009AA -:103140000000000000610006000D000100610006A3 -:10315000001D000000610086001D00010061408626 -:10316000000D000000610006000D000180610006F6 -:10317000000D000000000000000000000000000042 -:1031800000000000D5D555F500000000AFA00F00ED -:10319000F0F000C300C3FFC3C0CFCFCF00000000DA +:1030B0000000000000000000000000000000000010 +:1030C00000000000000000000000000000000018E8 +:1030D00000090000000000000000000000000000E7 +:1030E0000000BFFFBFFF0000000000000000000064 +:1030F000000000000000000000000009009900012D +:10310000000005002038004000080000000000001A +:1031100000000000000000000000000000000000AF +:10312000000000000000000000000000000000009F +:10313000000000000000000000000000000000008F +:10314000000000000000000000000000000000007F +:1031500000900005000000000000000000000000DA +:10316000000000000000000000000000000000005F +:103170000000000000610006000D000005004A0884 +:10318000059000A00000000000000000000000000A +:10319000000000000000000000000000000000002F :1031A000000000000000000000000000000000001F -:1031B00000000101252575750303050A00000000C4 -:1031C00000FFC3C30000AA8EAA8E5F555055AF05FD -:1031D000EF45F300F300E828C0008787AA0000004D -:1031E000000000C33CFF1C10BCBFAAFFAAFFBFBF6A -:1031F0008383004100410000000000000000000047 -:10320000000000000000C3C3C3C3000000000C0C9A -:103210000C0CF0F000C300C3FFC3C5C5C5C500005A +:1031B000000000000000000000000000000000000F +:1031C00000000000000000000000000000000000FF +:1031D00000000000000000000000000000000000EF +:1031E00000000000000000000000000000000000DF +:1031F00000000000000000000000FF08FF38000091 +:1032000000000000000000000000000000000000BE +:1032100000000000000000000000000000000000AE :10322000000000000000000000000000000000009E -:103230000000AFFFABFF2F2F7F7F3F3FAF5F00004E -:10324000000000FFC3C30000AA8EAA8E5F55505530 -:10325000FF55EF4530003000E8AAC0828787FF5550 -:10326000C300D4D400C33CFF00000000A0F0A0F0D5 -:10327000BEBE8282C1C1808000000000000000004C -:103280000000000000000000FFF0C2F0000000009D -:10329000FF000F0FAAAA141400000000FF00D200C4 +:10323000000000000000000000000000000000008E +:10324000000000000000000000000000000000007E +:10325000000000000000000000000000000000006E +:10326000000000000000000000000000000000005E +:10327000000000000000000000000000000000004E +:10328000000000000000000000000000000000003E +:10329000000000000000000000000000000000002E :1032A000000000000000000000000000000000001E -:1032B000000000000000000000000000FF0F000FF1 -:1032C0000C0C0C0C3C3CF0F0000005F505F5FFF093 -:1032D000BEF0F0AAF0AAC355C3AA0000000000FF88 -:1032E000F0F00FFF0F00AAF0AAF003F303F3FFC3FF -:1032F0003E0241C3C3C300F0FFF000000000000025 -:1033000000000000000000000000FFF040F000009E -:103310000000FF000F0FAAAAD7D700000000AA00E4 -:10332000D2000000000000000000000000000000CB -:103330000000000000000000000000000000FF0F7F -:10334000000F0F7D0F3FFCBEF0F000000FFF0FFFDE -:10335000EBF0AAF03C3C3C3CC355C3AA0000000083 -:1033600000FFF0F00FFF0F00AAF0AAF003F303F341 -:10337000FFCF3E0EC1C1C3C300F0FFF0000000004C -:10338000000000000000000000000000208000801D -:10339000400020000000008088000084200200001F -:1033A00000002000000020000004000010000011B8 -:1033B0002000200000000011A000000502004000D5 -:1033C0004000C0000040400001028800000341109E -:1033D000C000898000000800C000C0410802200031 -:1033E00041000300840089008880880420800080D8 -:1033F0000000200004112008030002080000020061 -:103400000208020084108805020802090200000276 -:103410000002000000000000001000020020000177 -:103420000000000000000000000000000008000094 -:1034300000000004000000000000000000004084C4 -:103440008000000000004000000040030000000079 -:103450004000410040020000800000002000C00049 -:10346000000002A0400000C0400000020400400232 -:103470002002098204001000410240009002040072 -:1034800090008000800000004000858280008484DD -:103490000200000000090200000000000200840099 -:1034A00000000040000000090000020010000000C1 -:1034B00000000000A00000000000001000088800CC -:1034C000104000090004020000000000080509097E -:1034D000000001020800840210001080400901026F -:1034E0000109010402020002400903030210004026 -:1034F000024002400300020801040389030802405D -:1035000009409088020090400305000402008800F2 -:1035100000400000000000000500004000C0000066 -:1035200041C000000084000020000000000800826C -:103530000000000000400000000000000008004003 -:10354000000420880088000000880000000805882A -:1035500040840000404104104009204000028210D5 -:10356000408940840888850941018284C0008040E8 -:1035700000014001800882088584200982020284BB -:10358000000902080040844005010204000800828E -:103590000088028509C1001001A140020000000856 -:1035A00004000008000900000005100500000000EC -:1035B0000000000004000021004100410041000023 -:1035C0000000000800000008004000000021010089 -:1035D00000000010000000050021C04101000002B1 -:1035E000888000028908000000034041C0000003F9 -:1035F00000030011844001828403000520050008B7 -:1036000082040004000088030000C002000440009F -:1036100000418808A041880220014002800100008A -:103620004100800000C000080000000000A000A0D1 -:10363000000000020002080800080008000009005D -:10364000000000004100000000C00000028241A014 -:1036500040000382200000000008000003004088B2 -:10366000004003100084080005A000A0850005822A -:103670000340050800A01100400300000800850079 -:103680000004410005002100008421000000050025 -:1036900005000000000000000000000000004000E5 +:1032B000000000000000000000000000000000000E +:1032C00000000000000000000000000000000000FE +:1032D00000000000000000000000000000000000EE +:1032E00000000000000000000000000000000000DE +:1032F0000000000000000000000000000000FF00CF +:103300005500000000000000000000000000000068 +:1033100000000000000000000000000000000000AD +:10332000000000000000000000000000000000009D +:10333000000000000000000000000000000000008D +:10334000000000000000000000000000000000007D +:10335000000000000000000000000000000000006D +:10336000000000000000000000000000000000005D +:10337000000000000000000000000000000000004D +:10338000FFFF555500000000000000000000000095 +:10339000000000000000000000000000000000002D +:1033A00000000000000000000000200000000000FD +:1033B000000000000000000000000000000000000D +:1033C00000000000000003000100200400030000D2 +:1033D00000000000000000000000000000000000ED +:1033E00000000000000000000000000020000000BD +:1033F00000000080000000000010000000000080BD +:103400000000010000000000000800800002000031 +:1034100000000000000000000000000000000000AC +:10342000000000000000000000000000000000009C +:10343000000000000000000000000000000000008C +:10344000000000000000000020002000000100003B +:103450004002000000000000000000000002000028 +:10346000400000000000000000000000000000001C +:1034700000000000000200020000008300000002C3 +:10348000401000004000000000000000002000018B +:1034900000000080000000000000000000000000AC +:1034A00000000000000000000000000000400000DC +:1034B0000000820000000000020000000000000088 +:1034C000000000000000000000000000004120009B +:1034D000000000000000004090000000000000001C +:1034E0000000820000000010004002000200000006 +:1034F000004002000000000000000000000000008A +:10350000000000008205824002000020020000004E +:1035100002000000000200000000000400000000A3 +:10352000000000000000000000080000000800008B +:103530000084000000000000000000000000000007 +:10354000000000000000000000400000001000002B +:1035500080000000000000000000000000000000EB +:103560000000000002000000000000000010000049 +:10357000000800000000000003C000000000000080 +:10358000050000000000000000000900000100002C +:1035900000880000000000000000000000000000A3 +:1035A000000000000000000000000000000000001B +:1035B000000000000000000000000000000000000B +:1035C00000000005000000000000000000000000F6 +:1035D000000090000000000010000000000000004B +:1035E00000000000000000000000000000000000DB +:1035F00000000000000000000009000000000000C2 +:103600000000000000000000000000210000002079 +:10361000002000000080000000000000000000000A +:10362000000000000000000000000000000000009A +:10363000000000000000000000000000000000008A +:10364000000000000000000000000000000000007A +:103650000000000000000000000003000000000067 +:103660000000000000000000000000A000000000BA +:103670000000080000000000000000000000000042 +:103680000000000000000000000000000000030037 +:103690000001000100020020A00000000000000066 :1036A000000000000000000000000000000000001A -:1036B00000000000000008000000000400000008F6 -:1036C00000210000080082009009844003210808BE -:1036D0000002081100400000000082094003092197 -:1036E000000340408280C1400110C005084008022C -:1036F000080800001009A00088041100400910000B -:1037000010400200A00304218200080208090411ED -:1037100004080240A0000840110800C0000000009A -:1037200080000082004000901188004000000000EE -:1037300000C000000000000000000000000000C009 -:103740000000000000000000000008A0000040A0F1 -:1037500000004183000000C00000000003040000DE -:1037600040A0021080840502400002900008090277 -:10377000001100100908039000A0080002C088048E -:10378000100000410900000000C010A002A12100AB -:1037900008A0038280100090009040820002010087 -:1037A00003210000000500030000010000050000E7 -:1037B00000400008000000000000000804000000B5 -:1037C00000000000000000000000000000004100B8 -:1037D0000000000000000000401082000000000017 -:1037E0000021100082209102A003848800408840BC -:1037F00000A100A140090003082082100000A1825E -:10380000A00004042004C0048805C02110030003A4 -:10381000C00000408400C020080000030810000021 -:103820004000C0000000000000C003000400218828 -:103830000000008403000000000000000000000001 -:1038400000000000000000000000000000000088F0 -:10385000C0001000080200820084800420020000E2 -:10386000000003202082000840A000080802004059 -:1038700008A0080205020084000000A000A00908BA -:10388000400303C003088301050000000804080486 -:103890000000000000000400080000000800000014 -:1038A00000410008020200008841000400080004F2 -:1038B000000300080021000800400000000800216B +:1036B000000000000000000000000000000000000A +:1036C00000000000000000000005020000050000EE +:1036D00000020111000000000000000000000000D6 +:1036E00000000000000000000000000000000000DA +:1036F00000000000000000000000000500100000B5 +:103700000200020000414000000010002000A00262 +:103710008300001000100010001000000090000056 +:103720000000000000000000000000000000000099 +:103730000000000011000000000000000000000078 +:103740000000000000000000000000000000000079 +:103750000000000120000000004000000000000008 +:10376000000800C000000000000000000000000091 +:103770000000000000000800000000000000000041 +:1037800000000000004000C0A082028280C09100C2 +:103790000090200002C1000902A100010200000007 +:1037A0000002020000000000000000000000000015 +:1037B0000000000000000000000000000000000009 +:1037C00000000000000000000000000000000000F9 +:1037D00020000000000000000004000000000000C5 +:1037E00000000000000000000000000000000000D9 +:1037F00000000000000000000000000000000000C9 +:103800000000000000000000402100000000000354 +:1038100020058805A003C0039021C082088980008C +:10382000050005018000000000000000000000000D +:103830000000000000000000000000000000000088 +:103840000000000000000000000000000000000078 +:103850000000000000000000000000010000000067 +:103860000000000000000000000000000000000058 +:103870000000000000000000000000000000000048 +:103880000000008800002000000080000000000010 +:103890000000800000A021C00000210000200020C6 +:1038A0000000020002000000001000000000000004 +:1038B0000000000000000000000000000000000008 :1038C00000000000000000000000000000000000F8 -:1038D00000000100000001000000000041000000A5 -:1038E00000000882C18800020900A005C021000074 -:1038F0008400A021A0218440A0008221840800210E -:103900004041400808034040104000090800C0083A -:1039100000409021820384000811C008820040000A -:10392000820800000090000100C00000009000002C -:103930001100000000000000000000000000000076 -:10394000000000000000000000000008000000006F -:1039500000000000400000C0400041000000C00026 -:10396000000000000003401003C108000000110225 -:103970000504000402A0080003020000000000008B -:1039800020080000000008000001000900000302F8 -:10399000000000850908000800C0000000C00010F9 -:1039A0000800000010A000038884021000A0008816 -:1039B00000040010000100000000000000000000F2 +:1038D0000000020000000010010801800108010042 +:1038E00000000000000000000000000000000000D8 +:1038F00000000000000000000000000000000000C8 +:103900000000000000000000000000402000400017 +:10391000024000410241002140092041008900216C +:10392000A1001100800091020000000100000000D1 +:103930000000000000000000000000000000000087 +:103940000000000000000000000000000000000077 +:1039500000000000000000000000400020042000E3 +:1039600020C0000000000000000000000000000077 +:103970000000000000000000000000000000000047 +:10398000000000000000020400100000000000021F +:1039900000001184000000C00590219009820020E1 +:1039A0000988048400012090408202010000000088 +:1039B0000000000000000000000000000000000007 :1039C00000000000000000000000000000000000F7 -:1039D00000000000000001000000000000000100E5 -:1039E0000000000100000040000204890040400285 -:1039F000A11190A008100000C00040010000830841 -:103A0000000588031010101010400410108310409F -:103A10000220009082080890002000200820020266 -:103A2000C0080002C082808400C0000000840080C2 -:103A30000000000000000008000000090000000075 +:1039D00000000000000000000000000001002100C5 +:1039E0009000000000000000000000000000000047 +:1039F00000000000000000000000000000000000C7 +:103A0000000000000000000004010001000000A010 +:103A10000008000800200091010440100004A008E4 +:103A200090C090A0881011400503801080210000F4 +:103A30000000000000000000000000000000000086 :103A40000000000000000000000000000000000076 -:103A5000000000000000000021000000000000093C -:103A600003100002004000000020090080880010C0 -:103A7000801010080080008520020903C002001099 -:103A8000890021C080040000200011830291800879 -:103A90000089800800038000800000000000801082 -:103AA00083802000008080800300040880808000E4 -:103AB00000008009008000000000000000000000FD +:103A50000000000000000000000000000000101046 +:103A6000C105800000100000000000000000000000 +:103A70000000000000000000000000000000000046 +:103A800000000000000000000000002000080011FD +:103A900000800080008000000208411080890091B1 +:103AA000038009000080008020801000200003A017 +:103AB0000000000500800000000000000000000081 :103AC00000000000000000000000000000000000F6 -:103AD00000000000000000000800020000000200DA -:103AE000008010000000000000000080840003112E -:103AF0000841908080090820A00200800810090079 -:103B0000850300808011008080031100082140C1DE -:103B1000880500000010800380800000808880C03D -:103B20000080800080218000000088000201A00841 -:103B30000800000010000084822000000000000047 +:103AD00000000000000000000000000000000000E6 +:103AE0001080080011000803000000000000000022 +:103AF00000000000000000000000000000000000C6 +:103B0000000000000000000000000400210004008C +:103B10000803418010021008102020000805020050 +:103B2000411000000021808080000182219001006E +:103B300000820000000000040000000000000000FF :103B40000000000000000000000000000000000075 -:103B50000000000000000000000001A000000000C4 -:103B600000000002010000000040000000401000C2 -:103B70000000010189081000830882000808400045 -:103B80000200030120081090900204901000C02051 -:103B900009118310029008A10208040210000441D8 -:103BA0000402C002100020A004048890000800084D -:103BB0000091A182000000A000048808000000001D -:103BC00001000000000000000000000000000000F4 +:103B50000000000000000000000000000000000065 +:103B60000000011001000100010100000000000040 +:103B70000000000000000000000000000000000045 +:103B80000000000000000000000000000010010024 +:103B90000100000100080000000101000104010013 +:103BA00000820100C000C082A00890040000010152 +:103BB00002A0000100000000000000000000000062 +:103BC00000000000000000000000000000000000F5 :103BD00000000000000000000000000000000000E5 -:103BE000A000000000010000A0000000000088010B -:103BF0000000A0000400880400A1A011C000000182 -:103C00000100A100000011108809A002210808A0ED -:103C1000001141859182080800404082080202029A -:103C200000A08320882010C100904082C0020004C0 -:103C300000A10021C0100000008000800080000072 -:103C4000210008000000000000000000000000004B -:103C50000000000000000000000000000000000262 -:103C60000041800200200010414189210010000025 -:103C70000410004180040011004100088008800009 -:103C800000204041A1090000A0A18003000909090A -:103C9000C002008805A1119105000000208000806D -:103CA000C0800000050008000520000500C104894F -:103CB000A1210080A100000000000002800080001F -:103CC00000400000000000000000000000000000B4 +:103BE00000000000000101010100000100000000D0 +:103BF00000000000000000000000000000000000C5 +:103C000000000000000000000000000000000000B4 +:103C1000010000000000080000000000C000C0011A +:103C2000000001011101C1020084849005C0400020 +:103C300002208020002000000000000000000000A2 +:103C40000000000000000000000000000000000074 +:103C50000000000000000000000000000000000064 +:103C60000000000000000010401105410411000098 +:103C70000000000000000000000000000000000044 +:103C80000000000000000000000000000000000034 +:103C9000000008000000000080000000000000009C +:103CA000800902104003910882C00003809004093B +:103CB000092103404100030500008000800000004E +:103CC00000000000000000000000000000000000F4 :103CD00000000000000000000000000000000000E4 -:103CE000080002001000000321000000080000107E -:103CF000000008218221402105002021212190007F -:103D00001100022121A0828003008821A1800400EB -:103D1000C00021400490C180200808218883C10090 -:103D2000080080000000000000000010801080806B -:103D300080000911101085108800100090110800F3 -:103D40001000000100000000000000000000000062 +:103CE000000000000000000021A1110008001111D7 +:103CF00000000000000000000000000000000000C4 +:103D000000000000000000000000000000000000B3 +:103D100000000921210002000908820891004100E9 +:103D20000803210991098300084100040020008054 +:103D3000800000212001A0C001004000020002001C +:103D40004000000000000000000000000000000033 :103D50000000000000000000000000000000000063 -:103D600000000100000000000000018800000100C8 -:103D70000000000001011002020101000301C00364 -:103D80008300400088010010110811000501080897 -:103D900002020300918811118484C000090103C04C -:103DA0000408C10002002020202090009001029011 -:103DB00084C00400000000000000000000000000BB -:103DC00007000000000000000000000000000000EC +:103D60000000000000000000000001A101000100AF +:103D70000101000000000000000000000000000041 +:103D80000000000000000000000000000000000033 +:103D900000000000001100000000000110202000C1 +:103DA000820001000310A100050083010800024009 +:103DB00090C088000000000000000000000000002B +:103DC00000000000000000000000000000000000F3 :103DD00000000000000000000000000000000000E3 -:103DE00000000000000000000000000000000000D3 -:103DF0000000000000000000000000000081000042 -:103E000000000000000600000000000000000000AC -:103E1000000000000000000000E0000000210000A1 -:103E20000000000041000000000000000000000051 -:103E3000000000000006FF5FDF5F70F07FFF0F00F3 -:103E4000FF000F0F00FF0000000000000000000056 +:103DE000000000000000000000000000600000E093 +:103DF0000000410000000000000000000000000082 +:103E000000000000000000000000000000000000B2 +:103E100000000000000000000000000000000000A2 +:103E2000000000000000810000E00000841200811A +:103E300000000700820A0FF00FF000FF00FF0100F2 +:103E40000000000000000000000000000000000072 :103E50000000000000000000000000000000000062 :103E60000000000000000000000000000000000052 -:103E70000000000000000000000F000F0000000024 -:103E8000F330FCC0C1CDC1CD3C3C3C3C0000000047 -:103E9000A6F356FC663C663C36F563A017E742B2D3 -:103EA000CCCC00FF4D71427E930593FA55660F3CD2 -:103EB0005ACC69FFACACA3A3FF5FFF5F20A02FAF7C -:103EC0000704F0000F0F00FF0000000000000000DA +:103E70000000000000000000000000000000000042 +:103E80000000000000000000000000000000000032 +:103E90000000000000000000000000000000000022 +:103EA000FF0F000000000000AA28AAA800000000E0 +:103EB0001C1C0000000000000FF00FF0FF00FF00CE +:103EC00041000000000000000000000000000000B1 :103ED00000000000000000000000000000000000E2 :103EE00000000000000000000000000000000000D2 -:103EF00000000000000000000000000F000F0000A4 -:103F00000000F5A0F5A0010D010DF0F0FFFF00008D -:103F10000000A60C5603F0AA0F55A063F53618E86A -:103F20004DBD96965AA5B28E427E9C0A9CF5AA6615 -:103F3000F03C5ACC9600AC535CA30FAA0F3CAFAF39 -:103F40000FFFAAFFAA03AFAFA0A00000000000006F +:103EF00000000000000000000000000000000000C2 +:103F000000000000000000000000000000000000B1 +:103F100000000000000000000000000000000000A1 +:103F20000000FF0FFF0F00000000820082800000F1 +:103F300000003C1C00003C3C3C040FF00FF00F0F55 +:103F40000F0F000000000000000000000000000053 :103F50000000000000000000000000000000000061 :103F60000000000000000000000000000000000051 -:103F700000000000000000000000000041000014EC -:103F80005A5A5A5A0407080B2D2D7D2800000000AC -:103F900055C3553C9C5FAF6C872D872DAFA06C63DC -:103FA000359FF65CBDBD4242CFC03F30AF9C6C5FD9 -:103FB000F5A05F0A5FAFA0500F690F690FAA0F3C11 -:103FC000CACA0FFFAAFFAA03AFAFA0A0000000005B +:103F70000000000000000000000000000000000041 +:103F80000000000000000000000000000000000031 +:103F90000000000000000000000000000000000021 +:103FA0000000000004050F0F00000000C2C2C2FAAA +:103FB000000000000002000F505555550FF00FF0A3 +:103FC000F0F0F0F000000000000000000000000031 :103FD00000000000000000000000000000000000E1 :103FE00000000000000000000000000000000000D1 -:103FF00000000000000000000000000000000505B7 -:1040000005055A5A5A5AEF2FDF1F2D2D7D28000023 -:104010000000A5335A33A063935044EEBB115F50A8 -:10402000636C60CAA309B24DB24D656A6A65A0931C -:104030006350C6936C39636C636CA5C35A3C806152 -:104040000006000D000000000008000000000061F4 -:104050000006000D0000000000000000000000004D -:1040600000000000000000000000000000000061EF -:104070000006000D000000610006000D00000000B9 -:1040800080610006000D000000614006001D000078 -:1040900000610006000D100240618006002D100234 -:1040A000406180070029100240618006002D100247 -:1040B00040618006002D100240618006002D100234 -:1040C0000F0F000000700040000000000000000022 +:103FF00000000000000000000000000000000000C1 +:1040000000000000000000000000000000000000B0 +:1040100000000000000000000000000000000000A0 +:1040200000000000000004000F0F00000000FAC2B2 +:10403000FAFA00000000000F000F5155555540617D +:104040008006002D080200000000000000000000B3 +:104050000000000000000000000000000000000060 +:104060000000000000000000000000000000000050 +:1040700000000000000000610004C001000000001A +:104080000000000000000000000000000000000030 +:104090000000000000000000000000000000000020 +:1040A00000610006000D000000610006000D000028 +:1040B00000610004C009000005614A3E050D00A032 +:1040C000CF45CFCFAFFF0FAF0000000000000000D2 :1040D00000000000000000000000000000000000E0 :1040E00000000000000000000000000000000000D0 -:1040F000AA550F0F0F0F0F0FFAFA505030F3F3F3CA -:104100000000FC3F7D7D7D3F7D3F1E1EFFAA3C3CA5 -:104110003C3C5000FF00F5B4F5B4F0F000C3FFFFE5 -:10412000FFFFC303CF0F00008080006100E30000A9 -:104130000000000000000000000000000000000C73 -:104140000F0C0F0F00000070004000000000000086 +:1040F0000000000000000000FF007D823DC3C33CC3 +:1041000000000000000000000000000000000000AF +:10411000000000000000000000000000000000009F +:104120000000040F0C0F0000000041C300C300009A +:1041300000000000F757EBE0EB0B000000007F00F1 +:104140004F00030103030A0F000A000000000000F3 :10415000000000000000000000000000000000005F :10416000000000000000000000000000000000004F -:104170000000AA550F0F0F030F0FFAFA505030F33B -:10418000303000000C302828FFFFC3FF1E1E5500F2 -:10419000A0AFA0AFFC00FF00A0B4A0B4F0F055D7D2 -:1041A000FEFFFFFFC000C00000AA00AA006100E3FC -:1041B00000000000000000000000000000000000FF -:1041C000FFCF0FCF00FFC3C30303030300000000B2 -:1041D00000000000000005050000000000000000D5 +:1041700000000000000000000000FB047F00FE00C3 +:1041800000FF000000000000000000000000000030 +:10419000000000000000000000000000000000001F +:1041A00000000000040F000F0000000001C300C366 +:1041B000000000000000FD5500E0000000000000CD +:1041C0007F7F4F4F7450F574D150F5D1000000003F +:1041D00000000000000000000000000000000000DF :1041E00000000000000000000000000000000000CF -:1041F00000000000000000003C3C2C2CCF7D0C7D1A -:10420000F5F5F5F500003F3F3030F0F000FF3CFFE2 -:104210003C00003CFF3C5FFF1ABAF000F0FFFF0FCC -:10422000FF0F00000000CFC0CFC0100000000F0043 -:104230000FFF000000000000000000000000000070 -:1042400000000000000000FFC3C3F3F3F3F300001D -:1042500000000000000000005555000000000000B4 +:1041F0000000000000000000000000000000D7FFE9 +:1042000000FF827D000000000000000000000000B0 +:10421000000000000000000000000000000000009E +:10422000000000000000E0EBE0EB0F0B0F010000CE +:1042300000000A0A0A0F8000000000400000000091 +:104240000000000000007450F5745050F55000005C +:10425000000000000000000000000000000000005E :10426000000000000000000000000000000000004E -:10427000000000000000000000003C3C2C2CCF415E -:104280000C41A0A0A0A000003F3F3030F0F000FFA4 -:104290003CFF3C00003CFF3C5FFF10B0F000F0FF33 -:1042A000FF0FFF0F00000000C0CFC0CF320202029C -:1042B000F000F0FF00000000C3C3C3C30000000013 -:1042C00000000000000000000000000004000200E8 -:1042D0002000000000000000000000082000000492 -:1042E000888020000000040004000000000020007E -:1042F000000000004010100000000000001000004E -:1043000020002000000000000003401008114108B8 -:10431000098284008800080220081000048005102B -:10432000C080418000048800880488008800A000C4 -:10433000201020800280028020802000052020059F -:1043400020082080000020802002000000000002E1 -:104350000000C0004000000000000000000000005D -:10436000000000020000000000001100000000003A -:10437000000000000000000000000000000020001D -:104380000000000800400000000400002100800040 -:10439000C000A00340A00000A1212184040041022C -:1043A0000803000288022000004000000000000016 -:1043B00040000002051084100010001000000401ED -:1043C000098404000402400009020001000000000A -:1043D00000000010010001000000000002000000C9 -:1043E0001000000000004000A00582101000000036 -:1043F0000000000002000000081002000804004154 -:104400000004004100412104000802000000019066 -:10441000210501100210010000000189080540106B -:1044200002108210000800084010400504024000FD -:1044300010410000080900040804001002410000B7 -:1044400000020004028084008408028904090082BA -:1044500000880084008404002000000002000000A6 -:104460000040000000A02084800000000008000040 -:1044700000084000000020000010801100000088AB -:1044800000100008000800404008001000840000F0 -:104490002005A00820840008400800C040020088D1 -:1044A000800500090083001000848008901011012D -:1044B000A0C00040041084400010C1000482040425 -:1044C00000842009080800200010094004020008A8 -:1044D0000000000000000002004100080000000091 -:1044E0000000000000210008400800080800000843 -:1044F000000000000010000000080100000800009B -:10450000204100080000000308030000901004028E -:104510000000080040020180842100000000C0006B -:1045200090408410A02188409021880500038210CB -:1045300040080221000808050021840884020005C3 -:10454000000900080000000082210000002188040A -:1045500000000082008200000301001000A0001093 -:1045600000C00008000200080000800000000000F9 -:104570000000000000000008000800000800000023 -:10458000400000000000000000000300030000C025 -:104590000082000000C0830040020402400000A02E -:1045A0000882410209A103000008100008A02100B0 -:1045B000001140C00282110003820002000403893E -:1045C0000904110409000300000000A00500000018 -:1045D000410804000000000000000000040000008A -:1045E00004000000000000000000000000000000C7 -:1045F0008208000000030000000000000821C01035 -:10460000080000210009C0040000000082411009D8 -:10461000100208100000C000C00900C000110811FD -:1046200010048203028240049041C0000809002166 -:1046300010000090001002000800A000C0008400DC -:1046400008040808840282054041000082108200AC -:1046500004411008820400000000000000008010E7 +:10427000000000000000000000000000000000003E +:10428000FFFF54AA14EB0000000000000000000033 +:10429000000000000000000000000000000000001E +:1042A0000000000000000000E0EBE0EB0F0F0F0F3C +:1042B000000000000A0A0A0E000000000000800052 +:1042C00000000000000000000000000000000000EE +:1042D00000000000000000000000000000000000DE +:1042E00000000000000000000000010000000000CD +:1042F000000000000000000001000180010001003A +:1043000001000000000001000003000000000000A8 +:10431000000000000000000000000000000000009D +:10432000000000000000000000000000000000206D +:1043300000040000000000840020008000800020B5 +:10434000000000000000000000000000000000006D +:10435000000000000000000000000000000000005D +:10436000000000000000000000000000200000002D +:1043700000000000000000000000100040080400E1 +:1043800004000800000000000400000040000000DD +:10439000000200000000000000000000000000001B +:1043A00000000002000000004000000000000000CB +:1043B00000010001000000000004000100020002F2 +:1043C00000010000000000000000000000000000EC +:1043D00000100010000000000000001000000000AD +:1043E000001000100000000000000000000000406D +:1043F0000000000000000000001000000808080095 +:10440000000090100000A0008209040000000000DD +:10441000000000000010000000000000000000008C +:104420000000004000000000000008000000020042 +:10443000000000000000010000000000001000006B +:10444000080002000210080900000000001000002F +:10445000000000000000000000000008000000084C +:10446000000000000000000000000000000000004C +:10447000000000000000000000000008000000092B +:1044800000000000000000000000000080000000AC +:104490000000000000000000000004000008000010 +:1044A000000800000000000000000000048400007C +:1044B0000084000000100000400000100008000010 +:1044C00000080000800080000000000000000000E4 +:1044D00000000000000000020000000000000000DA +:1044E00000000000000000000000000000000000CC +:1044F00000000000000000000000000000000000BC +:1045000000000000000000000000000000000000AB +:104510000000000000000000000000000008000093 +:10452000000000000000000000100000000000007B +:1045300000000000010000000100C0000000019028 +:10454000000000C100C100020000012100210000A4 +:1045500000080000000000000001000000840000CE +:10456000000000000000000000000000000000004B +:10457000000000000000000000000000000000003B +:1045800000000000000000000000000000820000A9 +:1045900000200000000000000008000000000000F3 +:1045A000000000000000000000000000000000000B +:1045B00000000000000020000000048400880000CB +:1045C00004200000001000202100000004A0098841 +:1045D00003C0000000000000000000000000000018 +:1045E00000000000000000000000000000000000CB +:1045F00000000000000000040000000000000000B7 +:104600000000000000020005000001000011000988 +:104610000011004000000008000000000000000041 +:10462000000000000000000000000000000000008A +:1046300000000000000000414000000001000000F8 +:104640000000910921C00100050504094004000093 +:1046500021000010008000000000000000000000A9 :10466000000000000000000000000000000000004A -:104670002100080000000000000000000000000011 -:10468000090980C000A000080004110404904084BF -:10469000008400040082000002C002001004080030 -:1046A000C102000002A080028384050441C080088A -:1046B00003C00000001002900088008208C01000B3 -:1046C0001184000809A000C10010800400840010BB -:1046D0000084008209904084000000100000004126 -:1046E0000021000000000021000000000000000088 -:1046F0000000000000000000002100000800000091 -:10470000000000008200000800000000000000051A -:10471000000008008208040000004000A000C00261 -:104720008403C000C080401082034090001000034A -:104730000040084004410020C08000080011822091 -:10474000000500410091000810089000A080A00022 -:104750004100000800020241000300C020080000E0 -:1047600000C0000405000008000000000008000070 -:104770000002000000000000000000000000000037 -:1047800000000082000000000900000000A00000FE -:1047900000000800001000002010000000040002CB -:1047A0000001110240000302838810A000400002B3 -:1047B00000002000210040202100001010A020084F -:1047C0000508004020200502000809900002002092 -:1047D00000000400050003010800090800000004AF -:1047E0000000004100040000000000000000040080 -:1047F0000000000000000000000000000000002198 -:104800000000000000000000000001000000C000E7 -:104810000000002100001000820090030000400909 -:104820004102000000000010C01000410104100807 -:10483000C0114021C002081000210821000500110C -:104840000000000082030800200010412010000238 -:104850000100002100918221004100080080000039 +:104670000000000000000000000100000000000039 +:104680000000000000000001000000000400000025 +:10469000000000080085000000000000000000008D +:1046A00000000020000000000000000000000000EA +:1046B00000000000000000002000000009000200CF +:1046C000000000000400840908C004004102410108 +:1046D0002000400421010020000000000000000034 +:1046E00000000000000000000000000000000000CA +:1046F00000000000000000000000000000000000BA +:104700000000000000000000000010000420000075 +:1047100000020021001001C1000000080005000097 +:104720000000000000000000000000000000000089 +:104730000000000000000000000020002000040035 +:104740002000C0A108022180020000000520000412 +:10475000A000018001A10508A000210000000000C8 +:104760000000000000000000000000000000000049 +:104770000000000000000000000000000000000039 +:104780000000000000000000000000008000800128 +:104790000000000000840001044000000000000050 +:1047A0000000000000000000000000000000000009 +:1047B00000000000000000000000000000C08000B9 +:1047C000800880900010800184048000008888C1E7 +:1047D0000001110004020420840100000000000414 +:1047E00000000000000000000000000000000020A9 +:1047F00000000000000000000000000000000000B9 +:1048000000000000000000000000000000000000A8 +:104810000100040000050010000001410000000834 +:10482000000200000021000000080000000000005D +:104830000000000000000000000000000000000078 +:10484000000000000400000404109100208488414E +:1048500000410820030404A10104000000A000009E :104860000000000000000000000000000000000048 -:104870000000000000000000000003000000000035 -:104880000000002000A000000090000408100000BC -:10489000001000C00084000800000020000000009C -:1048A000000888011004200003A00082000808000E -:1048B00000101100000000000000000080A0008433 -:1048C0000000000002080000008840000000008492 -:1048D0000001401000100002000000000002001063 -:1048E00000000000040000000000000001000000C3 -:1048F00000000000000000000001000000000000B7 -:104900000000000000000000000400820088089001 -:104910000000000000000000000000000000000097 -:10492000000008040105A0A1C0080308038440A1F9 -:10493000824000A000000000001001900183900060 -:1049400000000000400000010001101000A0200045 -:10495000909000A09008880588A10001010008003F -:104960000000000000000000000000000040404087 -:104970000000000000000000000000080009001016 -:104980000010000000000000000000000080008017 -:104990008000000000000000000000000000000097 -:1049A00000000000000440200288008402881000FB -:1049B000808880C0008000400009008008411020ED -:1049C0000002000500050008000800028080028047 -:1049D000000000000089A01100C00040090440212F -:1049E00000020000000000000000000000000002C3 +:104870000000000000000000000000000000000038 +:104880000000000000000000000000000000000028 +:1048900000004082800000000011000804000000B9 +:1048A0000000000000000000000000000000000008 +:1048B00000000000000000000000000000000000F8 +:1048C00020000000000080000004A0000200820917 +:1048D0000000410080011082804040880090034029 +:1048E000010400008800000000000000000000003B +:1048F00000000000000000000000000000000000B8 +:1049000000000000000000000000000000000000A7 +:10491000101188088289900802C000100004041059 +:104920000000000000000000000000000000000087 +:104930000000000000000000000000000000000077 +:104940000000C1C08203021010C101C003201091F9 +:1049500000044002A1901083000310A18883008509 +:1049600090A10980210080000000000000000000EC +:104970000000000000000000000000000000000037 +:104980000000000000001000000000000000000017 +:10499000000090C19189800880898080000000001B +:1049A0008080000000000000000000000000000007 +:1049B00000000000000000000000000000000000F7 +:1049C000000000008480210400C100032183418095 +:1049D000001100918491038500C0008209C100206C +:1049E0000040800480000003000000000000000080 :1049F00000000000000000000000000000000000B7 -:104A0000000000040000000000000000000080041E -:104A10008084000000000000000000000000000092 -:104A20000000000800008004881191880808100028 -:104A30008011008088004100C00391C19021A080B6 -:104A4000104088C0082100000000800080000000A5 -:104A500000000000000480000009800080030400C2 -:104A60000000880084210000000000000000000019 -:104A7000000000A00000000000000000000000088E -:104A80000000000000000000000000000000020024 -:104A90004000A0A10004000000000000000000028F -:104AA000000000000000000008880800A1A18801A3 -:104AB00020A004000484080200C00804A0A108018A -:104AC00008100000A04001018200080082001000D0 -:104AD0001010C000840810008800880002C0040183 -:104AE0002108A000850003830000000000010001F0 -:104AF00000000100C10000000000000000000000F4 -:104B000000000000000000000000000000000000A5 -:104B100088000000024000020000000000000000C9 -:104B20000000000000000000000082040290010567 -:104B3000C11108040010A0C102A0A040010202059A -:104B40000000008800000801A082000000000000B2 -:104B50000000888900900083A0A1840401000085E2 -:104B6000020500000000A001000000090021004033 -:104B70000008000004000400000000000000000025 -:104B8000000000000500040000000000000000001C -:104B90000000000000000000000000000000000015 -:104BA00000000000000000000000000000040010F1 -:104BB00021A1888400414109890880840080028500 -:104BC0000021000200411020112183A000000300F9 -:104BD0001100000000100020001080880005040271 -:104BE00004108002001000419010000000400000FE -:104BF0000000000040044041840004000000000068 -:104C00000000000021001110030008000000000057 -:104C10000000000000118080000000000000000083 -:104C200000000000000005001000100000002182BC -:104C300008910900C010200541800280A0408880B2 -:104C4000008000000409A100A011050091020020CD -:104C500000000080000003008000090080002100A7 -:104C600000C110808000031000800080000000015F -:104C7000000000000000400140004100050000006D -:104C80000000000000000100000001000100000021 -:104C9000000000000000020020400410100000008E -:104CA0000000000000000000000000000000000004 -:104CB00003C1042120C00500030020029140A00090 -:104CC00009A0C0109088C1001190A000910082003E -:104CD00000000082004000000000A0000402040068 -:104CE000830088111110100000010008004000002E -:104CF0000000000000000000000000E007000000CD +:104A000000000000000000000000000000000000A6 +:104A1000000000001100A1008500C1A000000003FB +:104A20008000008000000000000000000000000086 +:104A30000000000000000000000000000000000076 +:104A4000000000000000A00083000400C01103006B +:104A50002103118040030480210011890984808092 +:104A60000011808000A002000082000000A0000071 +:104A70000000000000000000000000000000000036 +:104A80000000000000000000000000000000000026 +:104A900000000000000090080800830091A0A00022 +:104AA000A0018402A09000000000000000000000AF +:104AB00000000000000000000000000000000000F6 +:104AC000000000000000000009840900100091109F +:104AD000000401C00108018501080140019100881E +:104AE00088C0108908400083010088024040C0014E +:104AF00000000000000000000000000000000000B6 +:104B00000000000000000000000082000000000023 +:104B1000000000000000000088910140C188028967 +:104B2000400200A084000904000000000000000012 +:104B30000000000000000000000000000000000075 +:104B400000000000000000000000884100A1059165 +:104B5000059104010101C1008900030200A0820344 +:104B60008903C00000C0048485C00421808580833F +:104B7000000900000000000000000000000000002C +:104B80000000000000000000000000000000000025 +:104B90000000000000000000000080214189A1A069 +:104BA00089C18080008000008900000000000000B2 +:104BB00000000000000000000000000000000000F5 +:104BC00000000000000000000000000000A004A1A0 +:104BD00040A10991001021041103110984902109B9 +:104BE00002851184840003002080028000200000E0 +:104BF00000000000000000000000000000000000B5 +:104C000000000000000000000000000000000000A4 +:104C10000000000000000000000000002189118059 +:104C200011800811000900200080800000000000B1 +:104C30000000000000000000000000000000000074 +:104C40000000000000000000000000000000210241 +:104C5000048902000300C109892004000209C1116E +:104C600084049100C004050404210900C0008401EB +:104C7000000000A000000000000000000000000094 +:104C80000000000000000000000000000000000024 +:104C9000000000000000000000000000000001888B +:104CA000008200A00000100000A02084820000000C +:104CB00000000000000000000000000000000000F4 +:104CC00000000000000000000000000000000000E4 +:104CD0000184018200040000C188020188000000F4 +:104CE000C189040140000901C00104108910A1001C +:104CF00000000000000000000000000000000000B4 :104D000000000000000000000000000000000000A3 -:104D10000000000000000000000000000000000093 -:104D20000000000000000000000000000000000083 -:104D30000000000000E00000818200000000000090 -:104D400000000000000000000082000000000000E1 -:104D50000000000000000000000000000000000053 -:104D600000000000000007004200000000000000FA -:104D70000000000000000000000000C9000000006A +:104D1000000000E0000000000000000000000000B3 +:104D2000818100E00700824100810000070000004F +:104D30000000000000000000000000000000000073 +:104D40000000000000000000000000000000000063 +:104D50000000818100E007008100818100E0070000 +:104D60008400880000E00700000000000000070049 +:104D70005000FFFF0000F00FF00F000000000000E7 :104D80000000000000000000000000000000000023 -:104D90000000000000000000000033303F3CFF0036 -:104DA000FFFF000000000000000000000000000005 -:104DB00000000000C8CB080BFF3CC300FFFFFFFF53 -:104DC000FFF9F6F003183F18F03CF03C7C7CFDFD49 -:104DD000C3C300000000000000000000F978F9786B -:104DE000007E007EC7E700003CFF3C0000000000A2 -:104DF00000000000000000000000000036FF363612 +:104D90000000000000000000000000000000000013 +:104DA0000000000000003800F9F942429F9FDBDB61 +:104DB000FFFF0000000000000000000000000000F5 +:104DC00000000000000000000000000000000000E3 +:104DD0000000000000000000DB180B0860609090ED +:104DE0000000000070000E0099990989003C003C09 +:104DF000F06000000000FFFFF00FF00F0000000067 :104E000000000000000000000000000000000000A2 -:104E10000000000000000000000000003B383B38AC -:104E2000FF00000000000000000000000000000083 -:104E3000000000000000F8FB383BE4E4E4E42F2F1E -:104E40000F6FFCFCFCFC03DB3FDBF03CF03C007C28 -:104E500000FDC3C300000000000000000000F9785E -:104E6000F978070F010900000000000000000000B1 -:104E70000000000000000000000000000000000032 +:104E10000000000000000000000000000000000092 +:104E200000000000000000003C00FFFFDBDB9F9F54 +:104E30007F7F7F7F00000000000000000000000076 +:104E40000000000000000000000000000000000062 +:104E500000000000000000000000E7000700600004 +:104E600090000000000070000E0099990989007EF2 +:104E7000007C0000F0600000000000000000000066 :104E80000000000000000000000000000000000022 :104E90000000000000000000000000000000000012 :104EA0000000000000000000000000000000000002 @@ -144657,494 +144657,494 @@ :104EC00000000000000000000000000000000000E2 :104ED00000000000000000000000000000000000D2 :104EE00000000000000000000000000000000000C2 -:104EF00000000000000000000000000000000000B2 +:104EF0000000000000000000999966663C3C3C3CC4 :104F000000000000000000000000000000000000A1 :104F10000000000000000000000000000000000091 -:104F2000F030F0F0FFFFFFFF000000000000000085 -:104F3000000000000000000000002D2D090960F9AC -:104F4000FFFFBDBD242478787878C3C3C3C399FF1D -:104F500000FF66666600003C003C000000003F3F2A -:104F6000606F0000C300F330F0F03F3DFFFF7E7E36 -:104F70007FFF000000004E4EC3FF00000000000055 -:104F80000000000000000000000000000000000021 +:104F20000000000000000000FB6B00902470D88F90 +:104F300081000300007F04FF00000000000000006B +:104F40000000000000000000000000000000000061 +:104F5000000000000000000000000000000210300F +:104F600011330000D90000000000000099900000FB +:104F70000000018199993C003C0099996666C3C381 +:104F8000C3C300000000000000000000000000009B :104F90000000000000000000000000000000000011 -:104FA0000000F030F0007FFF7FFF000000000000F5 -:104FB00000000000000000000000000000990099BF -:104FC00060F92424BDBD2D249900FF660000FFFF79 -:104FD00090F6000066666600003C003C00000000A1 -:104FE0003030606F00008181F330F3303C3CFFFFD4 -:104FF0007E7E7EFE000000004E4E003C00610006FA -:10500000000D000000610009000D0000000000001C -:105010000000000000610006000D0000000000001C -:105020000000000080000000000000000000000000 -:105030000000000000610006000D0000000000619B -:105040000007000D000000614006000D0000006137 -:105050000006001D000000610006000D0000006158 -:105060000006000D000000610006000D0001006157 -:10507000000E001D000000610006000D0000000091 -:105080000000407C4040303F303000000000000015 -:1050900000000000000000FF000000000000000011 -:1050A0000000000000000000000000000000000000 -:1050B0000000000000007F4F7F4F00000000000054 -:1050C000FFFF3C3CC343C340B6F73475FFF5F0F532 -:1050D0003C3C28280F00FFF000000C0FFF960F0F3C -:1050E000000000000000000000005F5FFF3CAAF02D -:1050F000F0F00000AA00AAFFFFFF5555003C003C5D -:1051000000000000407C4040303F30300000000094 -:105110000000000000000000F03A00000000000065 +:104FA00000000000000000000000FBFB00902770E4 +:104FB000D88F00000300007F00FF00000000000009 +:104FC00000000000000000000000000000000000E1 +:104FD00000000000000000000000000000020000CF +:104FE000000099FF2626FF000000000000009991B4 +:104FF0000000000000009999BF00BF0040618006DA +:10500000002D080200000000000000000000000069 +:105010000000000000000000000000000061000728 +:10502000000D00000000000000000000006040369D +:10503000C00C000000005030000000000000000024 +:105040000000000000000000000000000000000060 +:1050500000000000000000000000000000000061EF +:105060005034C0090000A0615A3EC50100A0A561EE +:105070004A0EC501000005614A0E059D00A0000012 +:10508000000001000000000000000000000000001F +:105090000000000000000000000000000000000010 +:1050A0000000000000000000000000000000FAC046 +:1050B0000AC0BD42F5A00000000000000000000092 +:1050C00000000000000000000000000000000000E0 +:1050D00000000000000000000000000000000000D0 +:1050E00000000000000F070F00000100FF3C5A18ED +:1050F0000400000000AA0888000F000F0000000054 +:10510000000000000500000000000000000000009A +:10511000000000000000000000000000000000008F :10512000000000000000000000000000000000007F -:10513000000000000000000070407040000000000F -:105140000000D3FB103880008300B6F73475CFCF52 -:10515000CFCF141400000F00FFF00000040FFF96E3 -:10516000FFFF0000000000000000A0A0FFFF003CC7 -:10517000AAF0FFFF0F0FF03CF03CAAAA0000E8E8FD -:10518000E8E80000000000000000F000F00000006F -:105190000000000000000000000007F704F4000019 +:10513000FACF0ACF42BDFFF50000000000000000DA +:10514000000000000000000000000000000000005F +:10515000000000000000000000000000000000004F +:105160000000FFFF3034000F050F040000000000B6 +:1051700050100000400000FF0CCC000A000B0000A3 +:10518000000000000000000000000000000000001F +:10519000000000000000000000000000000000000F :1051A00000000000000000000000000000000000FF -:1051B00000000000000000000000000000000000EF -:1051C00000000000F0FFF3F3FF5FAA0A5555FCFC56 -:1051D0002828EBEBF505F5058A0D080DFC000C0001 -:1051E0004054EAFEFF3C003C0000000000000000CC -:1051F00000000000C0F0C2FA00000000F000F0F073 -:1052000000C33CFF0000000000000000555555554C -:105210000000000000000000000000000FFF0FFF72 +:1051B0000000A0A00809AAAA00000000000000004A +:1051C00000000000000000000000000000000000DF +:1051D00000000000000000000000000000000000CF +:1051E00000000000141C141C00F0C0F08282A2A277 +:1051F000003F001500E300EF000700D70F00C3C019 +:10520000000000000000000000000000000000009E +:10521000000000000000000000000000000000008E :10522000000000000000000000000000000000007E -:10523000000000000000000000000000000000006E -:10524000000000000000000F0303FFFFAAAA55554D -:105250000C0C2828EBEBF505F505CB8F498FAA0040 -:10526000AA004040FEFE550F550F00000000000050 -:10527000000000000000C3FFC2FA00000000F000C0 -:10528000000000C33CFF0000000000000000000020 -:1052900000000000200000000000200020000000AE -:1052A000000000000404C0000000850304000000AA -:1052B00000000002200000004000C010200040005C -:1052C00000001000C0020002040040004010400036 -:1052D0004000C000040085000000040020004000E1 -:1052E0002005000008002020840804002000200081 -:1052F0000403400020030408C0002000A0000400B4 -:10530000048004002080040000000000000020044D -:105310000000000000000040004000000084000089 -:1053200000000000000400004000000040020000F7 -:1053300040002100000100001000000010010000EA -:1053400000000000000020040000000009008000B0 -:1053500080008000090000004002040000000900F5 -:10536000040000000004800009000040000000006C -:105370000000402000000090A0002102400000003A -:10538000200000020002400240000000000000086F -:105390000000000000000000040000000000000009 -:1053A00004000008081000100000000000081002AF -:1053B0000100000800050004100510100003021091 -:1053C000000010038205821008050000030201049A -:1053D000A010C0C19009900300101010821000416D -:1053E0008210020910040410001000100809820441 -:1053F0000400820400000109000040804004001005 -:1054000082410203000800000000020000000000CA -:105410000000000004000008000000001000200050 -:10542000000800001000000010000000000005004F -:10543000001140000084000800000000008202000B -:10544000000800000084001000888508000040006B -:1054500008080089001005080510028400C0110426 -:1054600020000508008400820408000804088484E1 -:105470000088000204840008040800048520858850 -:105480000088401000040004090400040002000029 -:1054900020000000000000000000000000000000EC +:10523000000000000000A8093000C3C30000000007 +:10524000000000000000000000000000000000005E +:10525000000000000000000000000000000000004E +:105260000000000000001414141400F000F0AAAABA +:10527000AAAA00152A3FE3E3EFEF080D287D0500F9 +:10528000C3C2000000000000000000000000000099 +:10529000000000000000000000000000000000020C +:1052A00000000000000000000000000000000000FE +:1052B000000000000000200001000000008000004D +:1052C00000000000000000030000000000000000DB +:1052D00000000000000000000000000000000000CE +:1052E00000000000000000000000000000000000BE +:1052F00000000000000000000000000000000000AE +:10530000000000000000000000000000000000009D +:10531000000000000000000000000000000000008D +:10532000000000000000000000000000000000007D +:1053300000000000000000009000200000000002BB +:10534000000000000000000000004000000000001D +:1053500000400000000000400000000000000000CD +:1053600000000000000000000000400000000000FD +:10537000009000000000000000000000000000009D +:10538000000000000000000000000000000000001D +:1053900000001000000000100000000000000000ED +:1053A00000000000000000000000000000000000FD +:1053B00000000000000000100000000000000010CD +:1053C0000009000000410000000000000000000093 +:1053D000001000100000000000000010000000009D +:1053E00000000000000000000000000000000000BD +:1053F000001000000000000000000000000000009D +:10540000020000000000000000000000000000009A +:10541000000000000008000000000000000000087C +:105420000008000000000000000000000000000074 +:10543000000000000008000000000000000000085C +:105440000008000000000000000000000000000054 +:105450000000000000000008000000000000000044 +:10546000000800080000000000000000000004C068 +:10547000000000080000000800000000000000001C +:1054800000100010000000000000000000000000FC +:10549000000000000000000000000000000000000C :1054A00000000000000000000000000000000000FC -:1054B0000000880200000000000040000000000022 -:1054C000000000000041000500400008A01000009E -:1054D000000300000003004100100008A008C021E4 -:1054E000A00882030005C005C008002108A1001023 -:1054F000C0402008900204034010042040030485AB -:105500001008000800000021A021820000410000D6 -:105510000000101000000010000800000000000053 -:10552000000000000000000000000008000000086B -:105530000000001000030020000000000000000038 -:105540000000000000100002000000000000050044 -:1055500000000500000009880084200041A0000030 -:105560000808100040A009004040000040404010E2 -:105570000001080408A002002100002091010000A1 -:1055800080204100000000080000000800000082A8 -:10559000000000000000000000000000000000000B -:1055A00000000000000000000000000800000000F3 -:1055B0000000001000C100050011001100030009E7 -:1055C000000000214004000200020000C0000005AD -:1055D000080000004021C000084100100002000047 -:1055E0000000901040090208C005001000100000E3 -:1055F0000820820400100009004100000011088406 -:1056000082000000C01104030400004108001041A2 -:1056100082080811000000000000000000000000E7 +:1054B00000000000000000000000000000000000EC +:1054C00000000100010000000000000000000000DA +:1054D0000008004100000000000000000000000083 +:1054E00000000000000000000000000000000000BC +:1054F000000000000000C000000004800000000068 +:1055000000000000000000000000900000410000CA +:10551000000000000000000000000000000000008B +:10552000000000000000000000000000000000007B +:105530000000000000000000000000841100400096 +:1055400000000000200004840000000000000000B3 +:105550000000000800000000000000000000000043 +:10556000000000000000000000000000000000003B +:10557000000000000000000000C00000802000C00B +:105580000000000000C04100000000C000C000C0DA +:1055900000100000000000000000000000000000FB +:1055A00000000000000000000000000000000000FB +:1055B00000000000000000000000000000000000EB +:1055C000000000840009008500800004000000093C +:1055D000000300000008004100000000000000007F +:1055E00000000000000000000000000000000000BB +:1055F000000000000000000000000000000090001B +:1056000000000000880000009000000090000000F2 +:105610000000010000000000000000000000000089 :10562000000000000000000000000000000000007A -:10563000000000000984000200C004C0090000004E -:105640000900001009A08000000108C100C000840A -:10565000008200840000808805908284000000049D -:1056600000A00082048503C0104004A020044090E4 -:10567000408202842184004003820010009000A038 -:10568000002000C004C0100000A000000020009016 -:1056900000C0000000040000000000000000000046 +:10563000000000000000000000000000000000006A +:1056400000000000000400A00004000400000000AE +:10565000000000000000000000000000000000004A +:10566000000000000000000000000000000000003A +:10567000000000000000000000000000000000002A +:1056800000000000000000000000000000004000DA +:1056900020002020020000000000000000000000A8 :1056A00000000000000000000000000000000000FA -:1056B00000000000000000020000000200000005E1 -:1056C0002000000000000010000008020002000599 -:1056D0000003040500000000020804210800000087 -:1056E0001003002101008205000010210041081074 -:1056F000000540000000A00008400000000000007D -:105700009041050000080080000000210000048096 -:1057100000100000A000001000C000000000000009 +:1056B00000000000000000000000000000000000EA +:1056C000000000009000000000000000000000004A +:1056D00000000000000000000000000000080000C2 +:1056E00000000000000000000000000000000000BA +:1056F000A00000000000000000000000000000000A +:10570000000001000000050000000000C0000000D3 +:1057100000418200000000000000000000000000C6 :105720000000000000000000000000000000000079 -:105730000084008200000000000000000001000062 -:10574000000000C040000000000000000000000059 -:1057500000C00000001000000000880200000008E7 -:1057600000022000000040000008000010080300B4 -:1057700088040500118411000804000002400000A4 -:10578000001008888490119008200040210405042E -:10579000902021A005004110000000000000000042 -:1057A00000100000000000000000000000000000E9 -:1057B00000000000000000000000000200000100E6 -:1057C00000000003000000080000000400000111B8 -:1057D000080800000008000000000000001084100D -:1057E00020840008C04100210011080800210000A9 -:1057F00000000810000000000041112100400008D6 -:1058000000410108000004A00021830004030000FF -:1058100008410020000004210000000800000000F2 +:105730000000000000000000000000000000000069 +:1057400000000000000000000000000000000584D0 +:105750000000000000000000000000000000000049 +:105760000000000000000000000000000000000039 +:105770000000000000000000000000000010000019 +:1057800000000010048400008484008400C0000035 +:1057900000C040000084001000C0000000000000B5 +:1057A00000000000000000000000000000000000F9 +:1057B00000000000000000000000000000000000E9 +:1057C00000000000000000000000000001210000B7 +:1057D0000080000000000011000200000000000036 +:1057E00000000000000000000000000008000000B1 +:1057F0000000000000000000000000000000200089 +:105800000000900000000000000000009000004137 +:1058100040000002000288000000000000000000BC :105820000000000000000000000000000000000078 -:1058300000000000000011000008000000010082CC -:10584000400220082082000000100984009040C01F -:10585000400420C020C0000040A00090000000C014 -:1058600020002010088400A000A0200083840320D2 -:1058700020900000210800000000000040400008C7 -:105880000084000840020000882140C004109140BC -:10589000000000002185000000080000000000005A +:105830000000000000000000000000000000000068 +:10584000000000000000000000000000000020A098 +:105850000004002000000000000000900000000094 +:105860000000000000000000000000000000000038 +:105870000000000000000000000000000000000028 +:105880000000000000000000000000000000000018 +:105890000082202000002000000400202082000060 :1058A00000000000000000000000000000000000F8 :1058B00000000000000000000000000000000000E8 -:1058C00001000001000000000000020000001100C3 -:1058D000080000008200000000000000000000003E -:1058E000118900A18489001000000500A0010000BA -:1058F00000000000000000000000000008000000A0 -:10590000000000000200000004A00190880410883C -:105910008808088800C1000800000001000000009D +:1058C00000000000000000000000000000000000D8 +:1058D0004100020000000000000000000000000085 +:1058E00000000000000000000000000000000000B8 +:1058F00000000000000000000000000000000000A8 +:105900000000000000000000A0A0049000028282BD +:10591000000000000000000000A0008200040082DF :105920000000000000000000000000000000000077 :105930000000000000000000000000000000000067 -:105940000010020000020000000000000000000043 -:105950008400A100000080000000000000000000A2 -:1059600000000284112100100011000990100003B2 -:10597000000400000000000000000000040000001F -:10598000000000000900800000000080408000004E -:1059900000000010000500020003000900030002DF -:1059A00000040000000000000000000000000000F3 +:105940000000000000000000000000000000000057 +:105950000000A0008900000000000000000000001E +:105960000000000000000000000000000000000037 +:105970000000000000000000000000000000000027 +:105980000000000000000000000000808080000097 +:105990008000000000000000000000800000008087 +:1059A00000000000000000000000000000000000F7 :1059B00000000000000000000000000000000000E7 -:1059C000000000800000100000000000000009003E -:1059D000210003004000040041028000000000009C -:1059E000000000008880C000C040A1210800A10084 -:1059F0001000111000000000800000008000000076 -:105A0000801100000000000900000000000080007C -:105A100000A180000000800900A18000400010006B -:105A2000090021000000000000000000000000004C +:1059C00000000000000000000000000000000000D7 +:1059D000000000040000000400800000000000003F +:1059E00000000000000000000000000000000000B7 +:1059F00000000000000000000000000000000000A7 +:105A00000000000000000000000000000000000492 +:105A10008000800000000000000000000000000383 +:105A20000000000000000000000000000000000076 :105A30000000000000000000000000000000000066 -:105A40000000000000100000010000000000000045 -:105A500000000100008401000100000008000004B3 -:105A6000C0008200000009402000A1011101039044 -:105A700011000100000020000000020000004000B2 -:105A8000C000A00090000000000000880000C000DE -:105A90004000840990000400400008839000010049 -:105AA00000000000011000000000000000000000E5 +:105A40000000000000000000000000000000000056 +:105A500000000000000100000001008200000000C2 +:105A60000000000000000000000000000000000036 +:105A70000000000000000000000000000000000026 +:105A80000000000000000000000000000000820094 +:105A9000C001A0A090000000000000000000000075 +:105AA0000000008200000000000000000000000074 :105AB00000000000000000000000000000000000E6 -:105AC0000000000000000001000183010000000050 -:105AD00000000000000100400089C00500C0000077 -:105AE0000000000000000000000000200100080984 -:105AF00000000101000100000000000000000000A3 -:105B000000050084000100C100000000200000002A -:105B10000002001000000000902001000188050034 -:105B20000000000001000000000000000000000074 +:105AC00000000000000000000000000000000000D6 +:105AD000000000000000000140000400010100007F +:105AE00000000000000000000000000000000000B6 +:105AF00000000000000000000000000000000000A6 +:105B00000000000000000000000000000000000095 +:105B1000C0000084008204040000000000000000B7 +:105B2000040000000000020000000000000000006F :105B30000000000000000000000000000000000065 -:105B400000000000000000000010000421210004FB -:105B500000040021000400080082008400210000ED -:105B600000000000000000000000002011090341B7 -:105B700080C0000008400421001100000000000067 -:105B80000000000800210002000300400020002067 -:105B900000040009002000030803000004000500C1 -:105BA00004000000101104000002000000000000CA +:105B40000000000000000000000000000000000055 +:105B5000000000000000000000108000004108402C +:105B60000000000000000000000000000000000035 +:105B70000000000000000000000000000000000025 +:105B80000000000000000000000000000000000015 +:105B90000000800000000000808000000000000085 +:105BA00000008000000000008000000000000000F5 :105BB00000000000000000000000000000000000E5 -:105BC0000000000000000000000009902100040017 -:105BD0000204000200000000000402000480218092 -:105BE00011020000000000000000000040041182CB -:105BF00011802000108421000200401000000000ED -:105C00000000000000020082000000008000000090 -:105C10008000000000008000000000000000808084 -:105C200000008000000000000000002000000000D4 +:105BC00000000000000000000000000000000000D5 +:105BD00000000000000000000000000200020000C1 +:105BE00000000000000000000000000000000000B5 +:105BF00000000000000000000000000000000000A5 +:105C00000000000000000000000000000000000094 +:105C10000000000000040080000080000000000080 +:105C20000000000000000000000000000000000074 :105C30000000000000000000000000000000000064 -:105C40000000000000000000000000000040000014 -:105C50000000000000000000000000000004001030 -:105C60000110000000000088000000000000008813 -:105C7000001000C0000000A0000201A00100000010 -:105C800000000082000000010002008800004000C7 -:105C900040000800A00000008284100490008400EE -:105CA000A010029008000084000000000001000025 +:105C40000000000000000000000000000000000054 +:105C50000000000000000000000000000000000044 +:105C60000000000000000000000000000000000034 +:105C70000000000000000000000000000000000024 +:105C80000000000000000000000000000000000014 +:105C90000000000000000000C004820204000000B8 +:105CA000000000000000C000A000C000C000000014 :105CB00000000000000000000000000000000000E4 :105CC00000000000000000000000000000000000D4 :105CD00000000000000000000000000000000000C4 -:105CE00000000000000000000000000000000000B4 -:105CF000000000000000000A00000000000000009A +:105CE00000E00700000000000000000000000000CD +:105CF00000000000000000000000000000000000A4 :105D00000000000000000000000000000000000093 -:105D1000000000000000000000000000070000007C -:105D2000000000000700000000000000000000006C +:105D100000000000000000000081000007005000AB +:105D20000000000000000000000000000000000073 :105D30000000000000000000000000000000000063 :105D40000000000000000000000000000000000053 :105D50000000000000000000000000000000000043 -:105D600000000000FFBEF0BE0000000000000000C8 -:105D7000000000000000AAAAF0F0000000000000EF -:105D80000000000000000000000000000000F0F033 -:105D90003C3C3C3C00FF00000000100010000404EC -:105DA000040450410000EB28EB2800000000000034 +:105D60000000000000000000000000000000000033 +:105D70000000000000000000000000000000000023 +:105D80000000000000000000000000000000000013 +:105D90000000000000000000000000FF00FFA0A0C5 +:105DA000A0A0000000000000000004045555000001 :105DB00000000000000000000000000000000000E3 :105DC00000000000000000000000000000000000D3 :105DD00000000000000000000000000000000000C3 -:105DE00000000000000000BEF0BE00000000000047 -:105DF0000000000000000000AAAAF0F0000000006F +:105DE00000000000000000000000000000000000B3 +:105DF00000000000000000000000000000000000A3 :105E00000000000000000000000000000000000092 -:105E1000F0F03C3CF0F0AAAA0000000010001000D6 -:105E200000000000FFFF0000EB28EB28000000004E +:105E10000000000000000000000000000010001062 +:105E2000A0A0A0AA0000000000000000000455553A :105E30000000000000000000000000000000000062 :105E40000000000000000000000000000000000052 :105E50000000000000000000000000000000000042 -:105E60000000000000000000AAAAAAAA000000008A -:105E70000041FF4100007F2F70207E24FF000000C2 -:105E80000000878787870000000000FF00FF0000F8 -:105E90000000C0C0C0C00000000000000000C3033C -:105EA000C0002F0F2F0F0F0F0F0FEFFF0414000074 -:105EB00000000000000000000000000000000000E2 +:105E60000000000000000000000000000000000032 +:105E70000000000000000000000000000000000022 +:105E80000000000000000000000000000000000012 +:105E90000000000000000000000000000000C3C37C +:105EA000C000F020F0000000000000000000FFF043 +:105EB000555000000000000000000000000000003D :105EC00000000000000000000000000000000000D2 :105ED00000000000000000000000000000000000C2 :105EE00000000000000000000000000000000000B2 -:105EF00000000041FF4100007F2F70207E243C3CC9 -:105F000000000000D2D2D2D200000000C3C3C3C33D -:105F1000000000008F80BFB0000000000000000003 -:105F2000C303C000FFFF00000E0A0F0FEFEB0400D9 -:105F30000000000000000000000000000000000061 +:105EF00000000000000000000000000000000000A2 +:105F00000000000000000000000000000000000091 +:105F10000000000000000000000000000000000081 +:105F2000C3C3C100F0F0F00000000000000000005A +:105F3000FFF35551000000000000000000000000C9 :105F40000000000000000000000000000000000051 -:105F5000000000000000000000610006000D0000CD -:105F600000610006000D000000610006000D000148 -:105F70000000000000000000000000610006001D9D -:105F8000000000610006000D00000000000000009D -:105F9000000000610006000D000000610006000D19 -:105FA000000000610006000D000000610006000D09 -:105FB000000000610006000D00000000000000006D +:105F50000000000000000000000000000000000041 +:105F600000000000000000000061000F000D00A014 +:105F70000000000000000000000000000000000021 +:105F80000000000000000000000000000000000011 +:105F90000000000000000000000000000000000001 +:105FA00000000000003000000000000000000000C1 +:105FB00000000000400000000000000000000000A1 :105FC00000000000000000000000000000000000D1 -:105FD000000000000000000000005F50C3C3C0FCD0 -:105FE000C3FF000000005555F355F5A0FA50C0FC62 -:105FF000C0FC00000000000000000000535C000036 -:106000003DFD38084504555500FF005F00000000C5 -:106010000000000000000000EBEB30F30000000087 -:106020003CAA3CAA00000000ACACF0FF000000005D -:106030000000000000000000F0F0FFFF0000000082 +:105FD00000000000000000000000000000000000C1 +:105FE00000000000000000000000000000000000B1 +:105FF0003CAA0000000000000000000000000000BB +:106000000000000000000000000000000000000090 +:106010000000000000000000000000000000000080 +:106020000000000000000000000000000000000070 +:106030000000000000000000000000000000000060 :106040000000000000000000000000000000000050 -:106050000000000000000000000000005F50C3C30B -:10606000C0FC003C000000005555F355F330F33000 -:1060700030F330F300000000000000000000FFFFDC -:10608000ACA3FD3D08385500555500FF00500000F9 -:1060900000000000000000000000282830F300008D -:1060A000000000F0FFF000000000ACAC000F0000AA -:1060B00000000000000000000000F0F0FFFF000002 +:106050000000000000000000000000000000000040 +:106060000000000000000000000000000000000030 +:1060700000FF3CAA0000000000000000000000003B +:106080000000000000000000000000000000000010 +:106090000000000000000000000000000000000000 +:1060A00000000000000000000000000000000000F0 +:1060B00000000000000000000000000000000000E0 :1060C00000000000000000000000000000000000D0 -:1060D00000000000000000000000000000000F0FA2 -:1060E000FFFFAAFFAAFF00000000FFAA00AA00000D -:1060F00000003F573F550000000000000000000076 -:10610000EF04DF08000000000000000FFFFF00C3E5 +:1060D00000000000000000000000000000000000C0 +:1060E00000000000000000000000000000000000B0 +:1060F00000000000000000000000000000000000A0 +:10610000000000000000000000000000000000008F :10611000000000000000000000000000000000007F :10612000000000000000000000000000000000006F -:1061300017FF17C30000000082C08282C0FFFCFF6F +:10613000000000000000000000000000000000005F :10614000000000000000000000000000000000004F :10615000000000000000000000000000000000003F -:106160000F0F00000055005500000000FFAA00AA14 -:10617000000000000357035500000000000000006D -:1061800000002F071F0B0003C3030000002DFFFFBB -:1061900004C7000000000000000000000000000034 +:10616000000000000000000000000000000000002F +:10617000000000000000000000000000000000001F +:10618000000000000000000000000000000000000F +:1061900000000000000000000000000000000000FF :1061A00000000000000000000000000000000000EF -:1061B0000000173C170000000000BEFCBEBEC0AAD5 -:1061C000FCAA0000000020000000000040002000A9 -:1061D00000000000C0000200200040000400890010 -:1061E0000400000040002000000404002000210002 -:1061F0000080410000000400400008008900000009 -:1062000020000003410488002004820020000405CF -:1062100084008210040000002000100020002000F4 -:10622000890021048808880084090008208340022E -:10623000C10088A088004000880088042005202034 -:10624000000020040000000000000000000000002A -:10625000009000000000000020000000000000008E -:106260000800000000008000000000000000410065 -:10627000400000104000000420000000C1C00800E1 -:1062800000000500000002000000000021000000E6 -:106290000500000040014000000040002000000018 -:1062A00000000800088500000000008200000010C7 -:1062B000C00008000011040000C040404100400040 -:1062C00000012000A10002000000004000000800C2 -:1062D000010802051010000802080000000002007A -:1062E000090488100300001008000900C008000419 -:1062F00000040003200408084010A0080010000259 -:106300000002081002100000904090408810000425 -:1063100082040302402100100241000402A0004157 -:106320000210004000058400010402000210000970 -:106330004080004140108284914102100208020016 -:106340000003024188410900000000000000000035 -:1063500080000800000000000000000000001000A5 -:106360000000C00000094008000000000202000018 -:1063700000090011000091400004C0C000040008A2 -:10638000000100C180880005000040090004008869 -:106390000008001040018010008800080000001074 -:1063A00005880488008440100204088280080004E4 -:1063B00005048010000480410420400800822084ED -:1063C0000400001004080484200000000000000005 -:1063D00000030000040000000000000000000000B6 -:1063E000000040000000001000410000000000001C -:1063F0000000004100090040C04100410041001080 -:106400000002002100080002821000001021C0419B -:10641000082182218808C010A04104081021000032 -:10642000000800100008020884404041002190024A -:1064300088210021000904104003C0028810A10235 -:106440000009C0088203001008102110000000009D -:106450000000000000080000000000000000000034 -:1064600000000000830000000000000000000000A9 -:106470000000001000A000004109000000820000A0 -:1064800000010500034008A0000803A0000041101F -:1064900009008000001021A000000008000802C0D0 -:1064A000000800C0008200000200200000000084FC -:1064B0001100000000000304000140080001000476 -:1064C0004009008200C0090000008001A0A1000076 -:1064D0000000000000000800000082000000000032 -:1064E00000000000000008A00010080502004002A3 -:1064F0009008400901020203C0910010C000014150 -:10650000081108000811010000050041000000000A -:106510000103000882040003000040410804000356 -:106520000820A010822002401004101020200290A9 -:10653000C00208050841820282A1004108110840FA -:106540000811001184000800400000210400082008 -:1065500000000000000000008000000000000000BB -:1065600000000000020000008002000180008000A6 -:1065700080A10082800040A18200001000880308F2 -:106580000888204000100084408400C000100000F3 -:10659000000008900004008400A00084008811041A -:1065A000000811A000040084A0010900210021823C -:1065B0008040000000901000000000020800001061 -:1065C00000080084000804844082000000C08008A5 -:1065D000038400000000000800000000000000101C -:1065E000000000000000000800000800000000009B -:1065F0000000A008000004210403820500004005FB -:10660000000300008221080484410805C003080239 -:1066100000210000002108410208C01000002100F4 -:106620000021012102030041844102210000820077 -:106630000008000408210010000508030800900568 -:1066400000218209404082C001000080000504054D -:106650008210201000000000000000000000000078 +:1061B00000000000000000000000000000000000DF +:1061C00000000000000000000000000000000000CF +:1061D00000000000000000000000000000000000BF +:1061E00000000000000000000000000000000000AF +:1061F000000000000000000000000000000000009F +:10620000000000024000000000000000000000004C +:10621000000000000000000000000000000000007E +:10622000000000000000000000000000000000006E +:1062300000000000000000000080000000000000DE +:10624000000200000000000000000000000000004C +:10625000000000000000000000000000000000003E +:10626000000000000000009000000000000000009E +:1062700000000000400000000000000000000000DE +:10628000000000000000000000000000000000000E +:1062900000004000000000000000000000000000BE +:1062A00000000000000000000000000000000000EE +:1062B00000000000000000000000001000000000CE +:1062C00000000001000000000000001000100000AD +:1062D00000000000000000000800000000000000B6 +:1062E0000000001000000000000000000840020054 +:1062F0000000001000000200000000000010000577 +:10630000000000410000000000000000001000003C +:10631000000000000000000002000000000000007B +:10632000000000000000001000000200000000104B +:10633000000000000000000002000000001000004B +:106340000000020000000000000000000000000843 +:106350000000000000000008000000000000000035 +:10636000000000000000000800000000000000081D +:106370000000000000000008000000000000000015 +:106380000000000000000008000000000000000005 +:1063900000080000000000000008000000000000ED +:1063A0000000000000000000008400000000000069 +:1063B00000080010000004000010000000000000B1 +:1063C00000000000000000000000000000000000CD +:1063D00000000000000000000000000000000000BD +:1063E00000000000000000000000000000000000AD +:1063F000000000000000000000000200000000009B +:106400000000040000000000000000000000000088 +:106410000000000000080000000000000000000074 +:10642000000000000000000000000000000000006C +:106430000000000000000000000000080000000054 +:10644000000000000000000000000000000000004C +:10645000000000000000000000000000000000003C +:10646000000000000000000000000000000000002C +:106470000000000000000000000004000000000018 +:10648000000000000000000000000000000000000C +:1064900000000000000000000000000000000000FC +:1064A00000000000000000000000000000000000EC +:1064B00000000000000000000000000000000000DC +:1064C00000000000000000000000000003000000C9 +:1064D00000000000000000000000000000000000BC +:1064E000004000000000000000000000000000105C +:1064F00000000000000000410000004000410004D6 +:106500000004000000110000000000000000000076 +:106510000004000000000000000000000000000077 +:106520000000000000000000000004000000000067 +:106530002000000000000000A0000000000020007B +:1065400082000000A0002080000000000000080081 +:10655000000000000000000000000000000000003B +:10656000000000000000000000000000000000002B +:106570000000000000000000000000C0000000005B +:1065800000900000009000000900000000000000E2 +:1065900000000004000000000000000000000000F7 +:1065A00000000000000000000000000000000000EB +:1065B00000000000000000000000000000000000DB +:1065C00000000000000000000020000000000000AB +:1065D000800000000000000000000000000000003B +:1065E00000000000000000000000000000000000AB +:1065F000000000000000000000000000000000009B +:10660000000000000000000000000000000000008A +:10661000000000000000000000000000000000007A +:10662000000000000000000000000000000000006A +:10663000000000000000000000000000000000005A +:106640000000900000000000000000000041022156 +:1066500008410204000000000000000000000000EB :10666000000000000000000000000000000000002A -:1066700000000000000040000000200000100000AA -:106680008000000000000000000000000008000082 -:1066900000A10000000000A008C00000009141001F -:1066A000400000104000800040000000800000001A -:1066B0000002022000040088000000200000800882 -:1066C000209004040090800000100840201000007A -:1066D00080000000800100000000000000000000B9 -:1066E0000000000000000000000000000000820028 -:1066F000000000000000A02100039005C011000070 -:1067000020040803004120040005011003110000CB -:106710000004000000080000104000100800000401 -:106720000000080000400000044104210411080496 -:106730000021400040410000004100210041008054 -:106740000002821000200010001000040010000061 -:106750000041000020208204000000000000000032 -:106760000000000000200000000000000000000009 -:1067700003A0000800C000A0000002000008000004 -:106780000004008483A0090020A020A040C00800CD -:10679000212000000000098200000000410080C0AC -:1067A0000000000020080000000000900000000031 -:1067B000800020902100008800000290020011005B -:1067C000090200854008000009C0000000C0002048 -:1067D0002000020000000001000100000000000095 -:1067E000000000A00088000200000000000000007F -:1067F000000001A0040808020082000008008800D0 -:106800000000A141000090A0820104C10910C083D2 -:1068100082C0000404090082401100000040A0C0B2 -:1068200000820004A00082000008C0101008C00010 -:10683000002082A00882090204848204000008006B -:10684000C000000020A000A00802000240A090109C -:106850000011A011020002000100820800000000E7 -:1068600000000000008000000000000000000000A8 -:106870000000000020822180800900890011910918 -:106880000011002091021121088300081004838563 -:1068900000218020050000A1008300A100000080ED -:1068A0000000008000008000200000808000008048 -:1068B00000000000800090008880898080800000B7 -:1068C0009000000000000280041080C000888080DA -:1068D00000820088000880000000040080000000A2 +:10667000000000000000000000000000000000001A +:10668000002000C0008400000000050000000000A1 +:1066900000000000000000000000000000000000FA +:1066A00000000000000000000000000000000000EA +:1066B00000000000000000000000000000000000DA +:1066C0000000000000000000000000000000008446 +:1066D00080888000800000000000000000000000B2 +:1066E00000000000000000000000000000000000AA +:1066F000000000000000000000000000000000009A +:106700000000000000000000000000000000002168 +:106710000000000000000000000000000000000079 +:106720000000000000000000000000000000000069 +:106730000000000000000000080000000000000051 +:106740000000820020000000000000002000200067 +:106750000400020008059000000000000000000096 +:106760000000000000000000000000000000000029 +:106770000000000000000000001000040000000005 +:106780000000000000C000001184020000000000B2 +:1067900000042004000420000000000000000000AD +:1067A00000000000000000000000000000000000E9 +:1067B00000000000000000000000000000000000D9 +:1067C00000000000000000000000000000000000C9 +:1067D00000000000800080000000000000000000B9 +:1067E00000000000000000000000000000000000A9 +:1067F0000000000000000000000000000000000099 +:106800000000000000000000000000000000000088 +:106810000000000000000000000000000000000078 +:106820000000000000000000000000000000000068 +:106830000000000000000000000000000000000058 +:10684000000000000000000000000000A0020000A6 +:106850000004C0100040008800C088A000000000B4 +:106860000000000000000000000000000000000028 +:106870000000000000000000000000000000000018 +:106880000000000000000000000000000000000008 +:1068900000000000000000000000000000000000F8 +:1068A00000000000000000000000000000000000E8 +:1068B00000000000000000000000000000000000D8 +:1068C0000000000000000000000000000000C00008 +:1068D00000000000008000800000000000000000B8 :1068E00000000000000000000000000000000000A8 -:1068F000000000000000900090048900004110801A -:106900004000108209030080204180108441400033 -:106910000221A00021A183008241C09110A00000AB -:106920000000001080A0000080004009832040117A -:106930008000004100A10000800000008000008075 -:106940008000000500808000200009008000408059 -:1069500000800002808400098000000080000000A8 +:1068F0000000000000000000000000000000000098 +:106900000000000000000000000000000000000087 +:106910000000000000000000000000000000000077 +:106920000000000000000000000000000000000067 +:106930000000000000000000000000000000000057 +:106940000000000000000000000000000000000047 +:106950000000002180800000910000C08584A1809B :106960000000000000000000000000000000000027 -:10697000000000000000000008A01000A0020401B8 -:1069800000400100008400111040C00104C1050155 -:1069900084820000A1020103108482004102840568 -:1069A000000000000001A0A1840040C0A100A1C11E -:1069B0008500020010028809020088008802020097 -:1069C0008402020088004004820001889000A00236 -:1069D000019002C0C00088829000A0000000A000CA -:1069E000040000000000000000008800000000001B -:1069F0001000000000000000000008010011A021AC -:106A0000000500000000A1000000080401020011C0 -:106A100000A1040300A10040C0C000820190858550 -:106A200090A00000A0C0004090088200000400A0D8 -:106A3000008501089004000400A0A000C01000041C -:106A4000100083110001000100010000C0080000D7 -:106A5000A1100101C04000028482914000000008A2 -:106A60008402008800000000000000000000000018 -:106A700000008000000000000000000080081108F5 -:106A8000802102400041411188020020800311034F -:106A900041A10411008404A040858220000520004B -:106AA00085A1028500000000008000008000000930 -:106AB000009100A1048000000000000080008080A0 -:106AC0000005804189820008000200100009800052 -:106AD000414184004010008000808080210004003B -:106AE00000000080410000000000000000000000E5 -:106AF0000000000000000000000000000000C100D5 -:106B000088400800800341049100200004008303B2 -:106B1000910009009102211190009100101085113F -:106B2000A180040082090000000000840000000031 -:106B30000911910021800008804000800080000041 -:106B4000000580910080000000110000808000009E -:106B50004009208341000304822121A18980800013 -:106B60000000004180000000000000000000000064 -:106B700000004000080002000000000000000000CB -:106B8000080083000584A00110032000C0008800D5 -:106B900004008310020809009100100084082000FE -:106BA00040C0A00289A0A0000000C00000A0880092 -:106BB0009000000002048340A001080100C0A04032 -:106BC000000082001040048400008800040410408B -:106BD000A0002100A01100000000A001A0110820C9 -:106BE00008000000048808C08400000000000000C5 +:106970000000000000000000000000000000000017 +:106980000000000000000000000000000000000007 +:1069900000000000000000000000000000000000F7 +:1069A00000000000000000000000000000000000E7 +:1069B00000000000000000000000000000000000D7 +:1069C00000000000000000000000000000000000C7 +:1069D000000040000000100284C0400004C1108587 +:1069E000050800000000000000000000000000009A +:1069F0000000000000000000000000000000000097 +:106A00000000000000000000000000000000000086 +:106A10000000000000000000000000000000000076 +:106A20000000000000000000000000000000000066 +:106A30000000000000000000000000000000000056 +:106A40000000000000000000000000000000000046 +:106A500000000000C01000A0008800A00011000489 +:106A60001084C18900000000000000000000000048 +:106A70000000000000000000000000000000000016 +:106A80000000000000000000000000000000000006 +:106A900000000000000000000000000000000000F6 +:106AA00000000000000000000000000000000000E6 +:106AB00000000000000000000000000000000000D6 +:106AC00000000000000000000000000000000000C6 +:106AD00000000000000080800000000000800088AE +:106AE00000418089A1C000000000000000000000FB +:106AF0000000000000000000000000000000000096 +:106B00000000000000000000000000000000000085 +:106B10000000000000000000000000000000000075 +:106B20000000000000000000000000000000000065 +:106B30000000000000000000000000000000000055 +:106B40000000000000000000000000000000000045 +:106B500000000000000000000000008500000000B0 +:106B600000008000000080400000000000000000E5 +:106B70000000000000000000000000000000000015 +:106B80000000000000000000000000000000000005 +:106B900000000000000000000000000000000000F5 +:106BA00000000000000000000000000000000000E5 +:106BB00000000000000000000000000000000000D5 +:106BC00000000000000000000000000000000000C5 +:106BD00000000000000000000000900084A09084ED +:106BE00040001010400204A010000000000000004F :106BF0000000000000000000000000000000000095 -:106C00000000000000000000001200000000000072 -:106C10000000000000E0000050060000000000003E -:106C200000820000000000000000000000000000E2 -:106C300000000000000000000000008200000000D2 -:106C400000004100880000E000004100000000005A -:106C50000000000000410000070088000000000064 -:106C600000005000000000E00700000000000000ED -:106C700000000000FCC0FCC000000000000000009C -:106C8000000000003C3C3C3CFF00F0F0B4B4BD24EC -:106C90000000000085049D1CB199B1F0BDBDF690C7 -:106CA0000F090B0F0009C0CF00F3FFF30000E7E767 -:106CB000E4E4F330F3308C8F8C8F0000C3B10F0FFE -:106CC000090935823582FF0F0000FDFDF4F4FF66EF -:106CD0003CF000000000FF66006600180018240069 -:106CE0006642FF00FB02C30FC30F6F6F60600000BE -:106CF000000000000000FCC0FCC00000000000001C -:106D00000000000000009F90FF00FF00F0F0B4B40E -:106D1000BD2400000000C746DF5ED899D8F02424C7 -:106D2000F6900F0F0B0F000000000003FF030000A0 -:106D30002424E4E4F330F330BCBFBCBF003CC3B157 -:106D400000000909AF53AF53FF0F00009D9D9494BD -:106D500000663CF000000000FF66006600180018A6 -:106D600064406440C3C3C3C3C30FC30F0FFF00F02D +:106C00000000000000000000000000000000000084 +:106C10000000000000000000000000000000000074 +:106C20000000000000000000000000000000000064 +:106C30000000000000000000000000000000000054 +:106C40000000000000000000000000000000000044 +:106C50000000000000000000000000000000000034 +:106C600007004200000000000000840A000000004D +:106C70000000000000000000000000000000000014 +:106C80000000000000000000000000000000000004 +:106C900000000000000000000000000000000000F4 +:106CA00000000000000000000000000000000000E4 +:106CB00000000000000000000000000000000000D4 +:106CC00000000000000000000000000000000000C4 +:106CD0000000000000000000000000000000F0FFC5 +:106CE000F00081990109FFFFFFFF00000030000064 +:106CF0000000000000000000000000000000000094 +:106D00000000000000000000000000000000000083 +:106D10000000000000000000000000000000000073 +:106D20000000000000000000000000000000000063 +:106D30000000000000000000000000000000000053 +:106D40000000000000000000000000000000000043 +:106D50000000000000000000000000000000000033 +:106D6000663C663CC3FF030F4646466600000000D3 :106D70000000000000000000000000000000000013 :106D80000000000000000000000000000000000003 :106D900000000000000000000000000000000000F3 @@ -145153,493 +145153,493 @@ :106DC00000000000000000000000000000000000C3 :106DD00000000000000000000000000000000000B3 :106DE00000000000000000000000000000000000A3 -:106DF000000000000000000000000606060600007B -:106E000000000000000000000000000FFF0FF33042 -:106E10003C3C0000000000000000FFFF0000C3FE3B -:106E200042FEC3000000FF3CFF3C27FF00D82406C1 -:106E3000249F0000BDFFFFDBFFFF66FF0C0C0C0C66 -:106E4000DBD0DBD000000202939F93900000092D5D -:106E500018187E7E000000000D6D9DFD0000F0F012 -:106E6000000600069000901096969F9FC3C3C3C370 -:106E7000FFFF0000000000000000000000000066AE -:106E800000000000000000000000000000C3FFC37D -:106E9000F330FFFF00000000000000000F0F0F0F95 -:106EA000E7FE66FEFF270027C300C30027FF00D8C8 -:106EB000BD06BD9F00002D6F6F4BFFFF66FF0C0CE2 -:106EC0000C0CDBD0DBDB0000030300000000000043 -:106ED000096F1C187C7E00000000046494F4FC0C14 -:106EE000FC0C000600060FFF0FCF8E968F9FC3C3CA -:106EF000C3C37E1800000000000000000000000076 -:106F00000000000000000000000000000000006120 -:106F10004006000D000080610006000D0000806149 -:106F200000010019000000610006000D0000006172 -:106F30000006000D0000000000000000001000002E -:106F400000610006000D000000003000001000008D -:106F500000613007C019000000610006000D00014B -:106F60000061003E000D000080610006000D000081 -:106F70000061000F000D0000000000000000000094 +:106DF0000000000000000000000000000000000093 +:106E00000000000000000000000000000000000082 +:106E10000000000000000000000000000000000072 +:106E20000000000000000000000000000000000062 +:106E30000000000000000000000000000000000052 +:106E40000000000000000000000000000000000042 +:106E50000000000000000000000000000000000032 +:106E600000000000F3F30000662442008083BCBFF2 +:106E70003C3E3C3F0000000000000000000000001D +:106E80000000000000000000000000000000000002 +:106E900000000000000000000000000000000000F2 +:106EA00000000000000000000000000000000000E2 +:106EB00000000000000000000000000000000000D2 +:106EC00000000000000000000000000000000000C2 +:106ED00000000000000000000000000000000000B2 +:106EE000000000000000F3F3F3F36666666680833B +:106EF000BCBFFFFFFFFF000000000000000000001B +:106F00000000000000000000000000000000000081 +:106F10000000000000000000000000000000000071 +:106F20000000000000000000000000000000000061 +:106F30000000000000000000000000000000000051 +:106F40000000000000000000000000000000000041 +:106F50000000000000000000000000000000000031 +:106F6000000000000000000000000008000000A079 +:106F700000613006000D000100000000000000006C :106F80000000000000000000000000000000000001 -:106F9000FFFF5050000038FB00ACF0ACFFF0ACAC91 -:106FA0007D285F0A1454BFFF5FF05FFC00C371715E -:106FB00003C317D700C33CFF00000000000000001F -:106FC00000000FA5A05A0F0C0F0C000000000000DD -:106FD000000000000000000000000000000034B6C7 -:106FE00075F7E30023005555505055555555000091 -:106FF0000000000000000000000000000000000091 +:106F900000000000000000000000000000000000F1 +:106FA00000000000000000000000000000000000E1 +:106FB00000000000000000000000000000000000D1 +:106FC00000000000000000000000000000000000C1 +:106FD00000000000000000000000000000000000B1 +:106FE00000000000000000000000000000000000A1 +:106FF000000000000000FFC30F03000000000000BD :107000000000000000000000000000000000000080 -:107010000000FFFFF000000010D30FACFFAC0F002A -:10702000ACAC7D28FF000040ABEB5FF35FFF3CFFA3 -:1070300071713FFF17D700C33CFF00000000000044 -:10704000000000000F0AFAAFCCCCCCCC000000004E -:10705000000000000000000000005A0000000000D6 -:1070600020A261E3E3002300FFFFF0F000FF0F0F19 -:107070000000000000000000000000000000000010 +:107010000000000000000000000000000000000070 +:107020000000000000000000000000000000000060 +:107030000000000000000000000000000000000050 +:107040000000000000000000000000000000000040 +:107050000000000000000000000000000000000030 +:107060000000000000000000000000000000000020 +:107070000000000000000000FFC30F03000000003C :107080000000000000000000000000000000000000 -:1070900000000000ACACA3A33028302873437F4F1E -:1070A000FF00FF007D417D41AAAAF0F0FCFCD7144F -:1070B000EFE04F40C0CFC0CF4BAA4B000000000014 -:1070C0000000000000000000000055550FF0000017 +:1070900000000000000000000000000000000000F0 +:1070A00000000000000000000000000000000000E0 +:1070B00000000000000000000000000000000000D0 +:1070C00000000000000000000000000000000000C0 :1070D00000000000000000000000000000000000B0 -:1070E000000000000000955495540F0F6969F0C32B -:1070F000F0C30000000000000000000000000000DD +:1070E00000000000000000000000000000000000A0 +:1070F000000000000000000000000000FF41000050 :10710000000000000000000000000000000000007F -:10711000000000000000ACACA3A330283028704071 -:107120007C4CF3F33030FF03FC00AAAAF0F0C0C09F -:10713000D714EFE04F40505F505F4BFF4B550000BE -:1071400000000000000000000000000055550FF096 +:10711000000000000000000000000000000000006F +:10712000000000000000000000000000000000005F +:10713000000000000000000000000000000000004F +:10714000000000000000000000000000000000003F :10715000000000000000000000000000000000002F -:10716000000000000000000062F962F90F0F696979 -:10717000F0C3F0C3000000000000000000000000A9 -:107180000400000000004000200000000004000493 -:107190000000000000000004040040000800880017 -:1071A0000000040000002000200040000004000453 -:1071B0004000040000000000000020000009200042 -:1071C0000002C00040804000010084002010000048 -:1071D000000240000005C00088008400200000007C -:1071E00084000510218085800504208420A00400EF -:1071F00020802008882000000404200089008404E6 -:10720000208040004000000000000000000000025C -:10721000000040000000000000004000000080006E -:10722000002000001000000000001000000000001E -:10723000000080004100000000001000000000027B -:1072400000000000100020028000408400000000C8 -:107250000000100400001000000000004000408802 -:1072600000000000A00004040420A0018020C0054C -:10727000890289204000000100084000000202004D -:10728000000000020040000000000200100500089D -:1072900002100008000000080008A0038204084053 -:1072A00002089008080808109000000883100803DE -:1072B0000002000584104108089000410002000906 -:1072C00008030904000008020040020882090202C3 -:1072D0000004001000100003020400081005010360 -:1072E000110400200040020810C00403040403201D -:1072F00021C0020910040004004190100410000095 -:1073000002100808820000000000000000080010C1 -:107310000010000002000008000010000008000833 -:107320008008001008820000000000000084088926 -:1073300080100085008809098884800204100509EE -:10734000000802404040000000110408400400040E -:1073500000C00082008804C00008001000840210F1 -:10736000080402100082038405200504824080087E -:1073700004118402400000000410004000888008CE -:10738000008400C0008200880000000000000000AF -:1073900000000000000000000000001000000000DD -:1073A0000010004000000100000000000000000587 -:1073B000000890000805002000100041000800406F -:1073C00000410003002100210000004100100003E3 -:1073D00000080003000800090002002184080005DD -:1073E00002400221402140210008400540100010C9 -:1073F0000010020200419183020440008821842190 -:1074000040210020000000000000000000000000FB -:107410000000000008000000000000000000030061 -:10742000000000000000000008A000A041080000CB -:10743000004000A000C080A00302030041A0004063 -:107440000020000000020000008400000000200076 -:1074500000100000000000000500000000400000D7 -:10746000042000400008000000000090200003827B -:107470000800000000A00008202010010008000003 -:10748000000800000800004041080400000004213A -:107490000400000000000000000088000041080512 -:1074A0000010000008210011081109000804000460 -:1074B00000000041822100050110008800044011F5 -:1074C0000011000800110010000000400000000240 -:1074D0000005000208000000002100210000000457 -:1074E00008202004000400400008C00008112011FA -:1074F000050900048405A002080441800140000041 -:10750000000208008240C0210020020004000000A8 -:107510000400000000000000000000000000000067 -:107520000000000000008000009080A08810008211 -:1075300004C002082082412009A00809034000403D -:10754000809000880088001000A011081108000039 -:10755000110803C0058500000010004000A0008253 -:107560000820009040C000C0110804C000840082C0 -:10757000800004040020000008C1048440040400CA -:10758000000000C00040000000A00000000000005B +:10716000000000000000000000000000000000001F +:107170000000000000000000000000000000FFEB25 +:1071800000000000000000000000000000000000FF +:1071900000000000000000000000000000000000EF +:1071A00000000000000000000000000000000000DF +:1071B00000000000A000000000000000000004002B +:1071C000000300800000000000000000000000003C +:1071D000000000000000200000000000000000008F +:1071E000200000000000000000000000000000007F +:1071F000000000000000000000000000000000008F +:10720000000000000000000000000000000000007E +:10721000000000000000000000000000000000006E +:10722000000000000000000000000000000000005E +:1072300000004000000000000000100000000000FE +:1072400090000000000400000000000000000000AA +:1072500000020000400000000000000000000000EC +:10726000000000000000000000000002000000001C +:1072700000000004400000000000000000000000CA +:1072800000000000000000000000000000000000FE +:1072900000000000000000000000000000000000EE +:1072A00008000000002002000800000003000000A9 +:1072B00000000000000000000800080000000000BE +:1072C0000000080000000021004100000000000054 +:1072D00000000000000002000000080000000200A2 +:1072E000020000000000020000000000000000009A +:1072F0000000000000000000020002000210000078 +:107300000200000002000000000000000000000079 +:107310000000000000000000000000000000000865 +:107320000000000000000001000000000000040058 +:107330000000000000000000000000000000000845 +:10734000000000000000000000000000000000003D +:107350000000000000000000000000000000000825 +:1073600000400000000000000000000000000000DD +:1073700000000000000000000000000000000040CD +:1073800000000000000000000000000000000000FD +:1073900000000000000000000000000000000000ED +:1073A00000000000000000000000000000000000DD +:1073B000000000000000C1000000004000000000CC +:1073C000004100000000000000000000000000007C +:1073D00000000000000000000000000000000000AD +:1073E000000000000000000000000000000000009D +:1073F000000002000000000000000000000000008B +:107400000000040000000000000000000000000078 +:10741000000000000000000000000000000000006C +:10742000000000000000000000000000000000005C +:10743000000000000000000020000000000100002B +:10744000000000000000000000000000000000003C +:10745000000000000000000000000000000000002C +:10746000000000000000000000000000000000001C +:10747000000000000000000000000000000000000C +:1074800000000000000000000000000000000000FC +:1074900000000000000000000000000000000000EC +:1074A00000000000000000000000000004000000D8 +:1074B0000000000004804000000000000000000008 +:1074C0000000001000000000001100400000000457 +:1074D00000040000000000000000000000000000A8 +:1074E000000000000000000000000000000000009C +:1074F000000000000000000000000000000000008C +:107500000000000000000000000000000800000073 +:10751000000000000000000000000000000000006B +:1075200000000000000000000000000000008000DB +:1075300000A00090000080208010000000000004E7 +:1075400000902004008900C00000000400840000B6 +:107550000004000400000000000000000000000023 +:107560000000000000000008000000000000000013 +:10757000000000080000000000000000000000C043 +:1075800000000000000000000000000000000000FB :1075900000000000000000000000000000000000EB -:1075A00000000000000000000000000008000000D3 -:1075B000080082000000004000000200821000115C -:1075C00000212002004100200000000200410000D4 -:1075D00000000002004000400005082100410000BA -:1075E0000000000000000003C011000000080000BF -:1075F000000020000008084004008420C00384022A -:10760000400200030403000009410041082100007A -:1076100001100000000000000000000000A00008B1 -:107620000000000000000000000000000040008496 -:1076300000A00010000000000090000440000010B6 -:10764000000004000000000000100300000008001B -:107650000084000021000800000000100008000065 -:10766000000011A000000000004011080000000808 -:107670000082008280C003820000000002100484A7 -:1076800002008000404000002000042000100000A4 -:1076900000080200000000000000000000000000E0 -:1076A00000000000000000000000000000000010CA -:1076B000010000000000002100210000000000087F -:1076C0000000401000040010001100C0080000037A -:1076D0000004004100000000001000410040004193 -:1076E00000410011000400102000000000002000F4 -:1076F00000000008000008008800000300000008E7 -:10770000C0050009004100408208002184040008EF -:107710000008000400080000000000001000000045 -:1077200000000000000000000300000000000082D4 -:10773000008408A000C0112000842010090000105F -:1077400000A00482028200A011900082110241A0D8 -:10775000008400820082000020A00582201002C068 -:10776000008410A0000000000000000000000000E5 -:10777000040802C0200811000088001011080088C9 -:107780000990418400000400000403000008000088 -:1077900000000000000011000000000000000000D8 +:1075A00000000000000000000000000000000000DB +:1075B00004000000000000000000000000000005C2 +:1075C00000020000000000100005000000000000A4 +:1075D00000000000000000000000000000000000AB +:1075E000000000000000000000000000000000009B +:1075F000000000000000000000000000000000008B +:10760000000000000000000000000000000000007A +:10761000000000000000000000000000000000006A +:10762000000000000000000000000000000000005A +:1076300000008000000000000000000000000000CA +:107640000000000000000000000100000000000039 +:10765000000000000000000000000000000000002A +:10766000000000000000000000000000000000001A +:10767000000000000000000000000000000000000A +:10768000000000C009000000080000100084008411 +:107690000084000000000000000000000000000066 +:1076A00000000000000000000000000000000000DA +:1076B0000000000000000000840010000021000015 +:1076C0000000000000000040000001080000000071 +:1076D0000000000400000004000000000040000062 +:1076E000000000000000000000000000000000009A +:1076F000000000000000000000000000000000008A +:107700000000000000000000000000000000000079 +:107710000000000000000000000000000000000069 +:107720000000000000000000000000000000000059 +:107730000000000000000000009000000010008227 +:107740000000000000900000000100000884030019 +:107750000090000020000000000100000000050073 +:107760000000000000000000000000000000000019 +:107770000000000000000000000000000000000009 +:1077800000000000000000000400000000000000F5 +:1077900000000000000000000000000000000000E9 :1077A00000000000000000000000000000000000D9 -:1077B00000A0001000000004000000000000000015 -:1077C00088A00340A010008284A0A00502C0C0824F -:1077D00000000100000000000000000000000201A5 -:1077E0000001000000000000000000000000000098 -:1077F000000000000000000000000040029102882C -:107800002020200510830121829100A0908400A0F7 -:1078100002820203892040092004000000000000C9 +:1077B00000000000000000000000000000000000C9 +:1077C00000000001000000000000000000000000B8 +:1077D000A00000000000C0000000000084000100C4 +:1077E0000000000000000000000000000000000099 +:1077F0000000000000000000000000000000000089 +:107800000000000000000000000000000000000078 +:107810000000000000000000000000000000000068 :107820000000000000000000000000000000000058 -:107830000000008000800000000000000000000048 -:1078400000000080088000800080008080400000F0 -:1078500000110004021100110010000000040010CB -:107860000008001000000000000000000000000000 -:1078700000000000000000000000000000A02083C5 -:1078800009080011008400884008801000808000F2 -:107890000000808003102180009000900000000014 +:107830000000000000000000000000000000000048 +:1078400000000004000804110020000000000000F7 +:107850000000000000000000000000000000000028 +:107860000300000000000000000000000000000015 +:107870000000000000000000000000000000000008 +:1078800000000000000000000000000000000000F8 +:1078900000000000000000000000000000000000E8 :1078A00000000000000000000000000000000000D8 -:1078B0000000000000000000800000000000000048 -:1078C00000000000A0002011842121000300090015 -:1078D00000800300000000000000000000000080A5 -:1078E0000000000010000000000000000000000088 -:1078F000000000000000000000050000000004007F -:107900008900101184830409800011408890800050 -:10791000000980A08000400041C0208803110000C1 +:1078B00000000000000000000000000000000000C8 +:1078C00000000000000000100000000500000000A3 +:1078D00080008000800000000000800000000002A6 +:1078E0000000000000000000000000000000000098 +:1078F0000000000000000000000000000000000088 +:107900000000000000000000000000000000000077 +:107910000000000000000000000000000000000067 :107920000000000000000000000000000000000057 -:1079300000000000000000000000A00000000000A7 -:1079400000000000000002008500A101C1000084C9 -:10795000000000080100000000000000000000001E -:10796000000800000000000000000000000000000F -:1079700000000000000000000000000004C08400BF -:10798000012010000000900901001000C10009034F -:1079900040009000A00390008910841004A0830090 +:107930000000000000000000000000000000000047 +:1079400000000000000000000001000000004000F6 +:1079500010001000C00088004000C00008000000B7 +:107960000001000000000000000000000000000016 +:107970000000000000000000000000000000000007 +:1079800000000000000000000000000000000000F7 +:1079900000000000000000000000000000000000E7 :1079A00000000000000000000000000000000000D7 -:1079B0000000000000000000C00000C00082A10024 -:1079C00000000000000000000002000100030300AE -:1079D000028800A001C08404000001000000000033 -:1079E0000000000000000101000000000000000095 +:1079B00000000000000000000000000000000000C7 +:1079C00000000000000000000000000000000100B6 +:1079D00000000000000000000084004084A00008B7 +:1079E0000000000000000000000000000000000097 :1079F0000000000000000000000000000000000087 -:107A00000000000000110191001140A00510A00924 -:107A100002910802004002C000088820004188034B -:107A20001110000000000000000000000000000035 +:107A00000000000000000000000000000000000076 +:107A10000000000000000000000000000000000066 +:107A20000000000000000000000000000000000056 :107A30000000000000000000000000000000000046 -:107A40004000000000000000000000100009008558 -:107A5000C009800000A02104008200004004090247 -:107A600000000000000000000521020000000000EE +:107A4000000011000000000000000000090010000C +:107A5000080000000000000000000000008000009E +:107A60000000000000000000000000000000000016 :107A70000000000000000000000000000000000006 -:107A8000000000000010008320A104088000910085 -:107A900088A1C010800000800000008000111090BC -:107AA00008218982000000000000000000000000A2 -:107AB0000000000000000000000000000000008046 -:107AC0008000800000000000000000808000008036 -:107AD00080000020040000004000091100000000A8 -:107AE00000000000000021000200210040200000F2 +:107A800000000000000000000000000000000000F6 +:107A900000000000000000000000000000000000E6 +:107AA00000000000000000000000000000000000D6 +:107AB00000000000000000000000000000000000C6 +:107AC00000000000000900040000000021028800FE +:107AD0008500A00000000000000000000000000081 +:107AE0000000000000000000000000000000000096 :107AF0000000000000000000000000000000000086 -:107B00000000000000009080C0C1000002110000D1 -:107B100080A0210040088000800080800000028951 -:107B2000858890809108000000000000000000009F -:107B30000000000000000000000000000000040041 -:107B400004088402A00000000000000000100804E7 -:107B50000084080440010002840085000000000049 -:107B60000000000000000000010000000100010111 +:107B00000000000000000000000000000000000075 +:107B10000000000000000000000000000000000065 +:107B20000000000000000000000000000000000055 +:107B30000000000000000000000000000000000045 +:107B400000000000000000000000000000008900AC +:107B5000100002009100000000840084000000007A +:107B60000090002000000000000000000000000065 :107B70000000000000000000000000000000000005 -:107B800000000410A0A0000091041011202090001B -:107B90009000020901100001020004840810400056 -:107BA00008A01020838402010000000000000000F3 +:107B800000000000000000000000000000000000F5 +:107B900000000000000000000000000000000000E5 +:107BA00000000000000000000000000000000000D5 :107BB00000000000000000000000000000000000C5 -:107BC00000000000000000000000000000000000B5 -:107BD00000000000000000000000000000000000A5 -:107BE0000000000000000000000000000000000095 +:107BC000000000000000000000810000070000002D +:107BD000810000E00700000000000000000000003D +:107BE00000000000070000000000000000E00000AE :107BF0000000000000000000000000000000000085 -:107C000000000000000000000000000000E007008D -:107C10004200000000E00700000000000000070034 +:107C00000000000000000000000000000000000074 +:107C10000000000000000000000000000000000064 :107C20000000000000000000000000000000000054 :107C30000000000000000000000000000000000044 -:107C4000000000003000F00FF00F00000000000006 -:107C50000000C0C0303082BE82BEAF05AF050F0647 -:107C60000F6F000000000000000000000000000096 +:107C40000000000000000000000000000000000034 +:107C50000000000000000000000000000000000024 +:107C60000000000000000000000000000000000014 :107C70000000000000000000000000000000000004 -:107C8000000000005F505F5000000000000C0FFC7F -:107C900000F000F0FFFF00FFFF01FF0000C000F058 -:107CA000F3F3030350F050D082D70A5F00000000C6 +:107C800000000000000000000000000000000000F4 +:107C900000000000000000000000000000000000E4 +:107CA00000000000000000000000000000000000D4 :107CB00000000000000000000000000000000000C4 -:107CC0000000000000003000F00FF00F0000000086 -:107CD00000000000CFCF3F3F82BE82BEAF05AF05A0 -:107CE0000006FF6F00000000000000000000000020 +:107CC00000000000000000000000000000000000B4 +:107CD000000000000000C0C3000000000000000021 +:107CE0000000000000000000000001000000000093 :107CF0000000000000000000000000000000000084 -:107D00000000000000005050505000000000000C27 -:107D10000FFC000FF0FFFFFF00FFFF05FF00FAF868 -:107D2000FAF0F3C303C3505050D082D7AAFF00002B +:107D00000000000000000000000000000000000073 +:107D10000000000000000000000000000000000063 +:107D20000000000000000000000000000000000053 :107D30000000000000000000000000000000000043 -:107D40000000000000000014000000FF00FF000021 -:107D50000000000000008DE760D8FFFFFFFF3CFC43 -:107D60003C0C0000000000000000000000000000CB +:107D40000000000000000000000000000000000033 +:107D50000000000000000000000000000000000023 +:107D60000000FFFF280000000000FFFDFDFD0000F7 :107D70000000000000000000000000000000000003 -:107D8000000000000000000000000000FFFF0000F5 -:107D90003F03C300555500003D017D41AFFF0F0F6C -:107DA000303C3F3CEBFB00103C280C0C00F200F098 +:107D800000000000000000000000000000000000F3 +:107D900000000000000000000000000000000000E3 +:107DA00000000000000000000000000000000000D3 :107DB00000000000000000000000000000000000C3 -:107DC000000000000000000000D700FFAAAAAAAA35 -:107DD00000000000000000008DE760D8FFFFFF7F7B -:107DE0003AFA3A0A0000000000000000000000001B +:107DC00000000000000000000000000000000000B3 +:107DD00000000000000000000000000000000000A3 +:107DE000000000003F3F280000000000FDFDFDFDF9 :107DF0000000000000000000000000000000000083 -:107E0000000000000000000000000000000000551D -:107E100000553F03C300AFAF0505FFC3FFC3FFFF1E -:107E20000F0F303C303CEFFF041414000C0C00FA30 -:107E300000F0000000000000000000000000000052 +:107E00000000000000000000000000000000000072 +:107E10000000000000000000000000000000000062 +:107E20000000000000000000000000000000000052 +:107E30000000000000000000000000000000000042 :107E40000000000000000000000000000000000032 -:107E50000000000000000000000000614006000D6E -:107E6000000100610006000D000000610006000D29 -:107E70000000000000610006000D0000000000008E +:107E50000000050000380000000000610007C00DB0 +:107E600000000000000000000005000000000010FD +:107E70000000000000610007000D0000000000008D :107E800000000000000000000000000000000000F2 -:107E90000000000100610009000900000061000FFE -:107EA000000D00000000000000000000006130062E -:107EB000000D0001000000000000000000000000B4 +:107E900000000000000000000000000000000000E2 +:107EA00000000000000000000000000000000000D2 +:107EB00000000000000000000000000000000000C2 :107EC00000000000000000000000000000000000B2 -:107ED00000000000000000000000000000000000A2 -:107EE00000000000C5C5CACA00AAA0A0000000008A -:107EF000F0FFF0FF000003010B0900AA00AA000038 +:107ED000000000000000000000000000FFFF0000A4 +:107EE0000000000000000000000000000000000092 +:107EF0000000000000000000000000000000000082 :107F00000000000000000000000000000000000071 -:107F10000000000000005500553C3CFFFFFF3C3CCA -:107F20003C3C00FF00000000000000000000005486 -:107F30000054D0D7D0D7000000000000000000009F +:107F10000000000000000000000000000000000061 +:107F20000000000000000000000000000000000051 +:107F30000000000000000000000000000000000041 :107F40000000000000000000000000000000000031 -:107F50000000000000000000000000000000000021 -:107F6000000000000100C5C5CACA00AAA0A0000008 -:107F70000000F000F000000003010B0900AA00AAB5 +:107F50000000000000000000000000000000F3FF2F +:107F60000000000000000000000000000000000011 +:107F70000000000000000000000000000000000001 :107F800000000000000000000000000000000000F1 -:107F9000000000000000000055FF553C3CFF7FFF43 -:107FA000F0F0F0F000FF0000000000000000000012 -:107FB000005455555055D0D7000000000000000077 +:107F900000000000000000000000000000000000E1 +:107FA00000000000000000000000000000000000D1 +:107FB00000000000000000000000000000000000C1 :107FC00000000000000000000000000000000000B1 :107FD00000000000000000000000000000000000A1 -:107FE0000000000000000000003C003C4040BDBD1F -:107FF000AFA02F20000000000000F0F003CF555587 +:107FE0008282828200000000000000000000000089 +:107FF0000000000000000000000000000000000081 :108000000000000000000000000000000000000070 -:1080100000000000000000000000FFFF000000FF63 -:10802000001C003CC2FED7D7D700000000000000B3 -:10803000000008080C0CAAAFF1FB000000000000D3 +:108010000000000000000000000000000000000060 +:108020000000000000000000000000000000000050 +:108030000000000000000000000000000000000040 :108040000000000000000000000000000000000030 :108050000000000000000000000000000000000020 -:1080600000000000000000000400000000009D9DD2 -:108070004747AFA0EFE000000000000033C0CCF3A2 -:108080005555000000000000000000000000000046 -:10809000000000000000000000000000CFFF0C0006 -:1080A00000000000C2FEC2FED7D7D70000000000CB -:1080B0000000000028283C3C0000000000004000B8 -:1080C00000000404000084002000100010000000E4 -:1080D0000000000000000000200000000000080078 -:1080E0000800080000004008108004002000400044 -:1080F0004000000400000000088001100002080891 -:1081000004204110020001088500400088842003FB -:10811000C008021088038488040040000008200082 -:10812000200320002100C11100418809081088089F -:10813000200084102003C000001020000010000068 -:10814000000000020000200000000000000000000D -:1081500000000000000000000000000000004000DF -:10816000A0008000A0000000000000020000050048 -:10817000800080000000000000008010400000002F -:108180009000000104C00000400040008500001085 -:108190000000000040A00000004009200002000094 -:1081A00000004000410440020884000000008001FB -:1081B00010000000000000000000000009C02100C5 -:1081C000000000000008000000000010041000057E -:1081D000A0080008080400091004080400080109A8 -:1081E0000110101000410008084101049002080825 -:1081F0001003080008090009A00490100000000006 -:108200000000080301408303404000108210A008D2 -:1082100002020205020400090010000008410210D9 -:108220000805900584412009000382089083000915 -:108230000200000582040003020440050000021051 -:1082400004041002001000000000000800040008F0 -:1082500000080010008880000010080004080000DA -:108260004084400803C00084000480400884000566 -:10827000020400048004048400000088090420042F -:1082800000040000008804100490800840040004EA -:1082900010040009401010820084008800040010BF -:1082A000410880040004008800084104000405100F -:1082B0000410208400C005084008000080820008E7 -:1082C00000820908004000000000000800000000D3 -:1082D0000000040000000000000000000021000079 -:1082E000001000080005904100050010004000410A -:1082F00008218821000500000008081000800009FE -:108300000003000800000021004100219002000548 -:1083100000050010001000410405000500030021C5 -:1083200000400002C00820080008002100000021D1 -:10833000900882218404002120030003001100081A -:10834000000090088403000000000000000000000E -:10835000000000000000000000000000000000001D -:108360000000000000100500000000000082000076 -:1083700008000000000000C0000800008082210208 -:1083800002080400000000000000000808080000C7 -:1083900000A0110008820001000000A000000040C1 -:1083A0004182210000004100051000A003100008D8 -:1083B000008200100808054008100008088809829B -:1083C0000000001040000020000000080000000035 -:1083D0000000000000000000084002000000001043 -:1083E0000021011100400040820382054010C0417D -:1083F000081004800000000000400200A0000008F7 -:10840000000500000103C0100000C100008420909E -:1084100004400000100008080821040400000800BF -:108420000000000090000800021020400041000001 -:10843000001000000805101082200002C00000009B -:108440004008004008000009004000840000008847 -:1084500000000000000800A00082800080000200F0 -:1084600000010000404000A000000204000080085D -:1084700011A080C040020084000010008090000025 -:10848000008200A0008408C00985000040A000020E -:108490001140A0C000A000048090000400C020048F -:1084A00003840000110400A040820390090009C069 -:1084B0000900049111A00004110420840020000090 -:1084C0000000219000C00004000000C00000000077 +:10806000000082808282000000000000000000000A +:108070000000000000000000000000000000000000 +:1080800000000000000000000000000000000000F0 +:1080900000000000000000000000000000000000E0 +:1080A00000000000000000000000000000000000D0 +:1080B00000000000000000000000000000000000C0 +:1080C00000000000000000000000000000000000B0 +:1080D00000000000000000000000000000000000A0 +:1080E000000004000000000000000000000000008C +:1080F00000000000000000000000008400030000F9 +:10810000000000002000000000000000000000004F +:10811000000000000000000000000000000000005F +:10812000000000000000000000000000000000004F +:10813000000000000000000000000000000000003F +:10814000000000000000000000000000000000002F +:10815000000000000000000000000000000010000F +:10816000000000008000000000000000000040004F +:1081700000000000000000000000210000110000CD +:1081800000000000004000000000000000000000AF +:1081900000000000000000040000000000000000DB +:1081A00000000000000000000000000000000000CF +:1081B00000000000000000000000000000000000BF +:1081C00000000000000000000000000008000000A7 +:1081D0000000820010800800000000800000000005 +:1081E0000000000000000800000000000000000483 +:1081F00002000200000090000100000000000200E8 +:108200000000040800000000000000000000000062 +:10821000080000000000000008000000000002004C +:108220000000020000000800000000000000000044 +:10823000000000000200000000000200000000003A +:10824000000000000000000000000000000000002E +:10825000000000000000000400000000000400888E +:108260000000000000000000000000000000080006 +:1082700000010000000000100000080000000200E3 +:10828000000000008000000000000000000000006E +:108290000000000000000000000000000000008856 +:1082A00000000000000800080000000000000000BE +:1082B00000000000000000000000000000000000BE +:1082C000000000000021000000000000000000008D +:1082D0000000000000210000000000080000000075 +:1082E0000000001100210000C00900000000000093 +:1082F000000000000041000000000120000000001C +:108300000000010000000008000000000000000064 +:10831000000000000041000000000000000000001C +:10832000000000000000000000000000000000004D +:10833000000000000000000000000000000000003D +:10834000000000000000000000000000000000002D +:10835000000000000000000000000000000100001C +:1083600000001100000000000000000021000000DB +:108370000000000000000000000000C004010090A8 +:1083800000000000020000000000000000000000EB +:1083900000000000000000000000000000000000DD +:1083A00000000000000000000000000000000000CD +:1083B00000000000000000000000000000000000BD +:1083C00000000000000000000000820082000000A9 +:1083D00000000000A00000000000400000000002BB +:1083E0000000018000100000008400002004000054 +:1083F000000000000000200000080000000401044C +:10840000010000000000001000000020000000003B +:10841000000000000000000000000000000000005C +:10842000000000000000000000000000000000004C +:108430000800000000000000000000000000020032 +:10844000020000000000000000000000000000002A +:10845000000000000000000000000000800000009C +:1084600000010000202041000000001000008001F9 +:1084700000000000000000008082090100001101DE +:10848000040120C0024000020001000000050008B5 +:1084900000000000000000000000000000000000DC +:1084A00000000000000000000000000000000000CC +:1084B000000000C0000000000000000000000000FC +:1084C00000000000000000000400000000000000A8 :1084D000000000000000000000000000000000009C -:1084E0000008000004008400004100000000024079 -:1084F000001004000000044100080902C000000050 -:1085000000050002820840020810A00000000005DB -:1085100000080402001000030808000300030441DF -:1085200008080008000900080000A0020000000080 -:1085300000100008010300000000401000080000C7 -:1085400000000010002100100002000400210000C3 +:1084E0000000100000002000904104000000001077 +:1084F0000000000001050000000500000000000071 +:10850000000300000000090802030800000000202A +:108510000008000000000000000000000000000053 +:10852000000000000000000000000000000000004B +:10853000000000000000000000000000000000003B +:10854000000000000000000000000000000000002B :10855000000000000000000000000000000000001B -:10856000000000000000000000000000000000000B -:1085700000000000000000000002001008000000E1 -:108580000010000002000000000080000000000059 -:108590000000000003000040000000000000002078 -:1085A00000000000000000C00000000000012000EA -:1085B00005820000000040A0401000000305028872 -:1085C0000582000000000000080803A0050811084B -:1085D000000000000000000000210000000000007A -:1085E0000000000000000000000020000003000068 -:1085F0000000000000094004001100100285000086 -:1086000040040004C021400401100004090800A037 -:10861000000000040803A105080500080000000888 -:108620000040000810032000000400040040202146 -:1086300000000011000000000004002100400021A3 -:108640009000002100110000002000000000000048 -:10865000000000100000000000000000000000000A -:1086600000000000000000080000200400A000A09E -:10867000090000000004000000200008008800023B -:1086800009828010000000A000A00282094088A09A -:10869000024000000000200404C00988000000A07F -:1086A00000020083008400C00000030000000908ED -:1086B00003A01104030002882084020804000900BA -:1086C00000C0008211C000000000401000080282BB -:1086D000000800040000000000000000000000008E -:1086E00000000000A01000000010000000000000CA -:1086F00000000000A08805888804821109A12000DC -:108700009005820585A0040800A00009000211C0A0 -:1087100082902003000001A1022082C0888301A072 -:108720000210000200820000000000000000A00013 -:10873000A0000004C082821000400008C08800A091 -:108740000000008808000000000000000000000099 +:10856000000000008000000080000000000000000B +:10857000000100000000041000880010000000004E +:108580000000000000000000C0008000800000002B +:1085900000010000000000000000000000000000DA +:1085A00000000000000000000000000000000000CB +:1085B00000000000000000000000000000000000BB +:1085C00000000000000003000000000000000000A8 +:1085D00000000000820000210000000000000000F8 +:1085E000400000002000000000000084000008009F +:1085F00001210000000000210180008000840100B2 +:108600002021000082050204000001410140030016 +:10861000000020040000000900000000000000002D +:10862000000000000000000000000000000000004A +:10863000000000000000000000000000000000003A +:10864000000000000000000000000000000000002A +:10865000000000000000000000000000000000001A +:108660000000800000008000000000000005000005 +:10867000800008000300000000000420002000200B +:10868000040000A000000082000000002000200282 +:10869000A0A000008000000000000000000000001A +:1086A00000000000000000000000000000000000CA +:1086B00000000000000000000000000000000000BA +:1086C0000000000000000000000011000000000099 +:1086D000000000000000000000000000000000009A +:1086E0000000000000010100020100000010000471 +:1086F0000002000800C0C188A1A09082C1900010B3 +:10870000000488900000A0000100000020C090003C +:10871000010800A0000000010000000000000000AF +:108720000000000000000000000000000000000049 +:108730000000000000000000000000000000000039 +:108740000000000000000000000000000000000029 :108750000000000000000000000000000000000019 -:108760000000000000000000000000000000000405 -:108770000200001000008080400900008082C0904C -:108780008004000880A120C010C0004100C000117A -:10879000A10280028040000004C090040003008217 -:1087A0002004800500050085000000000000000096 -:1087B00080000000000080800080008000800000B9 -:1087C00000000000008080000000000000000000A9 -:1087D00020040009004100400000000000000000EB -:1087E0000000000000000000800000418021000027 -:1087F00041801000040440098300840085208880A3 -:10880000C00088048800C00210000300C00040833C -:1088100091004090A000C00000000810A041A0847A -:1088200091212000039084802109000000000000B5 -:108830000000A00000000000000080008000800513 -:1088400000000000000080000000000000000000A8 +:10876000000000000000000821000011000000804F +:1087700000000080008000808980A18000800400CB +:1087800000001000000000008000030000000080D6 +:1087900000000280000000000341000341030005C7 +:1087A00000000000000000000000000000000000C9 +:1087B00000000000000000000000000000000000B9 +:1087C00000000000000000000000000000000000A9 +:1087D0000000000000000000000000000000000099 +:1087E0000000000000000000000009001100090066 +:1087F00080008000000580008900830091118500C1 +:1088000080008021001000000000000011004100E5 +:108810000011000080A080050000000000000000A2 +:108820000000000000000000000000000000000048 +:108830000000000000000000000000000000000038 +:108840000000000000000000000000000000000028 :108850000000000000000000000000000000000018 -:108860000000000000000000000010000200A00353 -:10887000000000C000000001010010004000A10144 -:1088800010A009200901A1C0090084C08500A0A092 -:1088900084A18800890804900900000010002100CC -:1088A00085C1A02182040110A04085900000000035 -:1088B00000000000090000000400C00008000800DB -:1088C000A000900000000200A000200000000000B6 +:108860000000000000000000000000020000010005 +:1088700001004000900088000800A1004000A10510 +:1088800091004000820004899084000000000100F3 +:10889000011090908800A089820000000000000074 +:1088A00000000000000000000000000000000000C8 +:1088B00000000000000000000000000000000000B8 +:1088C00000000000000000000000000000000000A8 :1088D0000000000000000000000000000000000098 -:1088E000000000000000000000000000C08800043C -:1088F00000041000000100010001000184100011BB -:108900000008C0020010000002850008C082008339 -:1089100001048285100800000101911100008811F6 -:1089200000100403101108910111A110A0200000F3 -:108930000000000000000010002000020810840267 -:1089400000A00089C082000800408400A0A00000B0 +:1088E0000000000000000000000000000000000088 +:1088F000000100000400400010000200049000404D +:10890000008989C1909000880004040800000000DC +:1089100000000001000488080004A04000000000DE +:1089200001008800000000000000000000000000BE +:108930000000000000000000000000000000000037 +:108940000000000000000000000000000000000027 :108950000000000000000000000000000000000017 -:108960000000000000000000000000000000800087 -:108970000000000080000040000802210008800282 -:1089800005030090919000004104092104808002B9 -:1089900021084091101000841104402109A000001A -:1089A00000A04002032180048008408384108203D9 -:1089B0000000000000000000008000800000800037 -:1089C0000088008800048080000000800000800093 +:1089600000000000000000000000000000000010F7 +:108970000009400800108000800080008000000492 +:108980000000000591C180800000000011800000FF +:108990000000000000110080000000808200000044 +:1089A00041001000A10000000500000000000000D0 +:1089B00000000000000000000000000000000000B7 +:1089C00000000000000000000000000000000000A7 :1089D0000000000000000000000000000000000097 :1089E0000000000000000000000000000000000087 -:1089F000001080000080000040212102210003902F -:108A0000008000000000000011A18300C100880266 -:108A1000214003912100880300021080848000001F -:108A20000000C1900841A0000802A183C180040099 -:108A30000408000000000000000000020021000007 -:108A40000008000200A0000000008040008000003C +:1089F0004102080008000811000900000000000002 +:108A00000002808080008008001180C0000000000B +:108A10000484040900000011880991A18800210044 +:108A20000000000400000000000000000000000042 +:108A30000000000000000000000000000000000036 +:108A40000000000000000000000000000000000026 :108A50000000000000000000000000000000000016 :108A60000000000000000000000000000000000006 -:108A700000001000A0020240020001A1000001005D -:108A80000110A0100088C004000000C10884848286 -:108A9000A101019103C08982A1010890C08241080F -:108AA0009000000002A0C1014110840009C0201004 -:108AB000028240000000000000000000900010A1B1 -:108AC0000000C00100000020008800000800002015 -:108AD000C0020000000000000000000000000000D4 +:108A7000000001400100010001000000004000046E +:108A80000000C084021008C0100104012021040469 +:108A900000000188010000000001C100881109C028 +:108AA00011000000000100000000000000000000B4 +:108AB00000000000000000000000000000000000B6 +:108AC00000000000000000000000000000000000A6 +:108AD0000000000000000000000000000000000096 :108AE0000000000000000000000000000000000086 -:108AF0000000000000000000000042000000000034 -:108B000000004200000000000000000A0000000019 -:108B100000005000000000000000410000000000C4 -:108B2000000000000000000000000700428200007A -:108B300000000000410000000000000000000000F4 -:108B40000000000000810000000000000082000022 +:108AF00000000000810000E000000000008100E0B4 +:108B000007000000818100E007008400000000E011 +:108B100007000000810000E007000000008100E085 +:108B2000070000000000810000E0070000000000D6 +:108B30000000000000000000000000000000000035 +:108B40000000000000000000000000000000000025 :108B50000000000000000000000000000000000015 :108B60000000000000000000000000000000000005 -:108B700000000000000000F600CF69C369C30000D8 -:108B8000000000000000F0F00000999909186363EC -:108B900063631818FF997E1E7E1E90907E181F0733 -:108BA0000F0F0000000000009999030FC0F0FFFFB5 -:108BB000EFFF0800C000C0F000000000000000004F -:108BC000003C3C3C6660662000000000030F070F7D -:108BD0000000F0F0F3F303030000000000000000C9 +:108B700000000000000000000000000000000000F5 +:108B80000000000000000000100000000000F6F6E9 +:108B90000606FF7F007F0000000000000000FF3C91 +:108BA00000960F0D0F0F00000000000000000000F5 +:108BB00000000000000000000000000000000000B5 +:108BC00000000000000000000000000000000000A5 +:108BD0000000000000000000000000000000000095 :108BE0000000000000000000000000000000000085 -:108BF000000000000000000000F600C969C369C35E -:108C00000000000000000000F0F0000099000918CA -:108C1000F303F303181866007E1E7E1E90907E18E4 -:108C20009F069F063C3C000000009999C3FF00008E -:108C3000FFFF6F6F0909C000C0F0000000000000D6 -:108C40000000003C3C3C66606626000000000F0F00 -:108C50000F0F0000F0F00303F3F30000000000002A +:108BF0000000000000000000000000000000000075 +:108C000000000000000000000000100000C0000391 +:108C1000F6F00600FF4000400000000000000000E9 +:108C2000FF3C00960F0D0F0F000000000000000039 +:108C30000000000000000000000000000000000034 +:108C40000000000000000000000000000000000024 +:108C50000000000000000000000000000000000014 :108C60000000000000000000000000000000000004 :108C700000000000000000000000000000000000F4 :108C800000000000000000000000000000000000E4 @@ -145649,477 +145649,477 @@ :108CC00000000000000000000000000000000000A4 :108CD0000000000000000000000000000000000094 :108CE0000000000000000000000000000000000084 -:108CF000000000000000000000000000060606065C -:108D0000C1BCC1BC0000000000000000003D001913 -:108D1000626206003030F3F390F698FE66FF009929 -:108D200090F698FEBFFF0040998199BD0000FFFFBB -:108D30008000FCFF0003F0F4FFFF00FFC3C300004E -:108D40000000000000003636363642DB424270F04A -:108D5000F0F0206020600000F9F9099600FF0000A3 +:108CF0000000000000000000000000000000000074 +:108D000000000000FF00FD00040404046F5F002069 +:108D100024F4E7F7000FF0FF00FF00FF0000000061 +:108D200000000000B4B47E7E0000000000000000DF +:108D30000000000000000000000000000000000033 +:108D40000000000000000000000000000000000023 +:108D50000000000000000000000000000000000013 :108D60000000000000000000000000000000000003 :108D700000000000000000000000000000000000F3 -:108D80000F0FA2D5A2D50000000000000000007F58 -:108D9000005B020206003030F3F390F680E67E7E40 -:108DA0001C1C90F680E60FFF00F0F0F0F0F00000E1 -:108DB000FFFF8100FFFF0000F0D0000099FFC3C358 -:108DC00000000000000000003636363642DB42422A -:108DD00070F07070006020600000F9F996F9F99069 +:108D800000000000000000000400000000FF6F6F02 +:108D900000002424E7E7202FE0EF3C3C2D2D0000CD +:108DA000000000000000B4B47E7E0000004000001F +:108DB00000000000000000000000000000000000B3 +:108DC00000000000000000000000000000000000A3 +:108DD0000000000000000000000000000000000093 :108DE0000000000000000000000000000000000083 :108DF0000000000000000000000000000000000073 -:108E0000000000000000000100610006000D0000ED -:108E100000610006001D000000610006000D00005A -:108E200000610006000D000100613006001D000019 -:108E300000008061000E000D000000613006000D92 -:108E40000000000000000000000000610006001D9E -:108E5000000000610006000D00008000000000001E -:108E60000000000000000000000000610006000D8E +:108E000000610006C005000000610036000D000092 +:108E100000612036C09200000061000F000D0000CC +:108E20000060000FC00100A01061203F000D000194 +:108E3000000005610003C00D0000000000000000FC +:108E40000000000000000000000000000000000022 +:108E50000000000000000000000000000000000012 +:108E60000000000000000000000000000000000002 :108E700000000000000000000000000000000000F2 -:108E80000000000000000000000008CB00C33CFF11 -:108E900000C3000000000FC500C5280F0000A0009F -:108EA000A0003C3C3C3C30F33CFF0F000F00703016 -:108EB000501000000303C300C3C04140FF0F000F68 -:108EC000FFCF00CF00000000000000000000000005 -:108ED000000000000000000000CF00CF00000000F4 +:108E8000000030000505C141404000000000000026 +:108E900000000000000041411441000000000000FB +:108EA00000000000FF00FFFF000000008000000045 +:108EB00000000000000000000000000000000000B2 +:108EC00000000000000000000000000000000000A2 +:108ED0000000000000000000000000000000000092 :108EE0000000000000000000000000000000000082 :108EF0000000000000000000000000000000000072 -:108F000000000000000000000000000008CB28EB7B -:108F10000F0F0F0F00000000FFC5F0C5AA0F0000E3 -:108F2000A000A0002C283C2800C30CCF0F000F008D -:108F30006020400000003F3FFF3CFFF05550FF0E17 -:108F4000000EFFCF00CF0000000000000000000076 -:108F50000000000000000000000000CF00CF000073 +:108F00000000000030000505800040400000000027 +:108F100000000000000000001414005500000000D4 +:108F2000000000000000FF00FFFF00000000000044 +:108F30000000000000000000000000000000000031 +:108F40000000000000000000000000000000000021 +:108F50000000000000000000000000000000000011 :108F60000000000000000000000000000000000001 :108F700000000000000000000000000000000000F1 -:108F80000000000000000000000000000000FFFFE3 -:108F90000000D714D4D4D714D71400000000410225 -:108FA0004143A0A028AA2B2B0303A2A2A20000FFEA -:108FB000AAAAC300CFCF0000704040400000554532 -:108FC00040400050000007000000000000000000CA -:108FD0000000000082828282000000000000000089 +:108F8000000000000000F0F00000FF005F000000A3 +:108F9000000000000000000000005055000000002C +:108FA000000000000000000000005555AA55000018 +:108FB0000000000000000000C0F0100000000000F1 +:108FC00000000000000000000000000000000000A1 +:108FD0000000000000000000000000000000000091 :108FE0000000000000000000000000000000000081 -:108FF0003CFF3C0F000000000000000000000000EB -:109000000000000000000000000000000000000060 -:109010000F0F0F0FFF00FCC0D714D7140FFF03C3AF -:10902000550A555FA0A028003F033F03A200A200FD -:10903000C3C3F0F0FF3CCFCF00007F4F7F7F000025 -:1090400005454F4F0F5F07000700000000000000BC -:109050000000000000008282828200000000000008 +:108FF0000000000000000000000000000000000071 +:109000000000000000000000FFFF000000FF005F04 +:10901000000000000000000000000000FCFDFCFC5F +:10902000000000000000000000000000AAAA00FFED +:109030000000000000000000000030000000000000 +:109040000000000000000000000000000000000020 +:109050000000000000000000000000000000000010 :109060000000000000000000000000000000000000 -:1090700000003CFF3C0F000000002000000000004A -:1090800000002000200020000000880000002000D8 -:109090000200000040002004040220002000208084 -:1090A000200420042003200000808800008020008D -:1090B0002010400500802004C002000301002000B1 -:1090C0002003200389002000A00000048800820300 -:1090D000040802040800080420000404001000082A -:1090E000200521204003004088008800840088007B -:1090F000210288050203051000042103100000006E -:1091000000000000400040000000000000000000DF -:10911000000000000000200000000000800080002F -:109120008004804100000000000000200000400496 -:1091300090000000000041200000000400000840F2 -:1091400000000000000040004000000000A00000FF -:109150000000000000008000C00185001000100029 -:10916000000000824001009000010000000011A0FA -:10917000040040010000A000080540000404008431 -:10918000000000009004001100100010020482048E -:109190004004000000000804000440100002000920 -:1091A000840410040800004111400041010900043A -:1091B0000010021000040804080000400210000023 -:1091C00008080441001040040003904000100240D1 -:1091D00040040420001040408200000802100009F2 -:1091E000C0100802200304100404A00300040004BB -:1091F0000410020808020010A02000100000001057 -:10920000004000840008008400080008008200106C -:109210000010800800C000840084001080820011CB -:10922000000800080084808200C004050084041047 -:1092300021100004110900C0808800040010008281 -:1092400000000482008400C084A000100010058388 -:1092500009118040401100848009000400108084BE -:1092600000080583A011021080080584048400080A -:1092700004080008800484110588000903850000A3 -:10928000408500020008000000080021004000089E -:10929000002100000010000800100008000000215C -:1092A000000800210010000000400021881000404C -:1092B0000020002100080002000000210008000832 -:1092C00001410000004100080010000800210002D8 -:1092D0000009009000080008012100100003C004EC -:1092E00004100182C0039021412101820008004046 -:1092F00000218402020500410021412100A1054115 -:10930000C082021000820000000000000000000087 -:1093100000000000000008000000000811A0000884 -:1093200000000000091000A000000010001000A1C3 -:1093300000A0000300080020080000080008210029 -:10934000000004C0000003A00040000105840008E4 -:109350000909000800030008000004A00001080833 -:1093600000A003012004030000C002080421200023 -:109370000010000000A10800001009008200001089 -:10938000040008208009C000001000210000002116 -:109390000005000500210002004100000011000549 -:1093A00088024002414108110041000500000121EE -:1093B000000304050005084140A10010004104110C -:1093C00008098205082000000805850900110841E8 -:1093D0000021004082418805080000200821084142 -:1093E00000020004080008111000088000820440F8 -:1093F000000000000000000382021000000008408E -:1094000004200008C1A10010000800C000100010D6 -:109410000010000000A00000000900000000108201 -:10942000210002838004C00000000004041000003A -:109430000400030080080408000400100004000079 -:1094400000A01090008220910000008840100000D1 -:1094500082840084000800200482008200A1900021 -:10946000108405A121410090001000080010400365 -:10947000900200C04084000211040040210010004E -:10948000210809112100040200000003000000006F -:1094900001050000000000000008000000000000BE -:1094A00000000021000000410000004020000008F2 -:1094B000000500A001089110104000212005A01017 -:1094C00000030010004010A10008000000409004BC -:1094D00000080010084000000000824000108203D5 -:1094E00008418208000304400000004000410040A1 -:1094F000004104A000000000C0050040A0000800DA -:10950000000882800000040000000000000000004D -:10951000000008000000000000000000000000A0A3 -:109520000000000000C000000008000000000082F1 -:1095300000080008001008A0040203824082800096 -:1095400010080010200005900502000000000082B5 -:1095500000C000080904000000040800022100A067 -:1095600000000000000005A000000000000100C095 -:1095700000000500802100A000080000000000009D -:10958000000021000002000080000008118400405B -:109590000000000800000021000000000021400041 -:1095A000001000050000000040080011002100210B -:1095B000000000412000000800109010002102105F -:1095C00084040005001120210103001104000000A3 -:1095D0002002001040400021004100050005000865 -:1095E00020040441030420100010000001050005C0 -:1095F0009000004000218203081108080810A041D3 -:1096000000110421020500210004080004080011D3 -:1096100000010090000800000000000000000008A9 -:10962000800020820000000000048008000000107C -:109630000000000002000000008400001100204033 -:109640000000098200C00000028804401100800070 -:1096500000000041411111A0001004402000001042 -:109660000000000080000400200002900084200020 -:10967000200020400004110004020004000000004B -:109680004040009020004000008841000010000091 -:1096900002000000000400040008000000000000B8 -:1096A0000000000000000001000100000000840034 -:1096B000000000010100900000004010904000A058 -:1096C0008208908582821084C00088A000100088E3 -:1096D00090100000C0A000080809908802050090C2 -:1096E00004010090C0402003C002108201A00411B8 -:1096F000011082C0C0041082848908C100000000EB -:10970000000000000041418220088220000000C0CB -:10971000040288C0000000800000008000000000FB -:1097200000000000000200000004004002002100D0 -:10973000000000001110040402100020808080004E -:1097400000808000000804200002000209801080D0 -:1097500000000000000091C1090800020005800817 -:10976000020080400000C0090040000000804183EA -:10977000009040C18011004180910088802100004C -:10978000000000000000118821A1808280040000F8 -:109790000900008000008010000080000000000030 -:1097A0000000000000000080000000008000008039 -:1097B00004002002202141800800C111110800008E -:1097C000008900408000C18010000211A1108000BB -:1097D0008409050008800000808088004110000492 -:1097E000828010C002808221000000218080000061 -:1097F000200002032080108020800800800902835E -:109800008000000000000000000003410084890285 -:10981000040420859100218008008400A00000003D -:10982000000000000000000000C000001000080060 -:10983000004001000100010184080300080010013C -:10984000820084108804048208200204C00183007E -:10985000880021000310A0A000000804020090006E -:109860000000898800109110A00190000090A008CD -:10987000000001A00100008401040208C100A00052 -:109880008491080002000000000000900489A008F4 -:109890000402A10000100402831000400088028826 -:1098A0000088000000000000000000000000000030 -:1098B000000000000000A0000000000101010901FB -:1098C0000000850200101084910800030000881039 -:1098D00003A140850020100802080000909000417C -:1098E000A08940A002C0844005010101402100027E -:1098F00003000808408401840441018900A0000895 -:109900000511A00200000001000001000205011085 -:10991000A001C183000100A1C084010800800000F3 -:109920000000000000000000000000000000110026 -:1099300041000000000900418009000000081002F9 -:1099400003400003400000808080218000C011415E -:1099500020C189888002008080800090000000087B -:109960004108892184820020009004210902800896 -:109970000321C011828080000803898211880002BF -:1099800010A005211004000500040010400900216A -:109990004041C108A00410100088009021910010DF -:1099A0000080008000000000000000000000210492 -:1099B00004800400210011000800400040000891CC -:1099C00004854100100800008040000000002108CC -:1099D0000300048003208005800800800008000048 -:1099E000410088880300824021A1108089800910ED -:1099F0000004000880808000A0102000400088083B -:109A0000A12040A10900100000200080008000007B -:109A10000502030510000300008080108000801004 -:109A2000000000A000400000000000000000000056 -:109A30000101000800000100001001000100010008 -:109A400001400108000401010000A01140C0C00055 -:109A50000191008800840001020404050408040147 -:109A6000000040C083100102A001050521201084E0 -:109A7000030020000201028408000500010000002C -:109A800011014101880882C0A0000000002000846C -:109A9000001003000510030021000408A085020047 -:109AA00002010000000000000000000000000000B3 -:109AB0000000000000000000420000000000000064 -:109AC0000000000000E000000000000000000700AF -:109AD0000000000000E0000000000000000007009F -:109AE00000000000000000000000840000000000F2 -:109AF000000000000000000007005000000000E02F -:109B000000008400000000000700000000000000CA -:109B100000000000000000000000500A00000000EB -:109B20000700000000000000FFCF3C0C0000000018 +:1090700000000000000000000000000000000000F0 +:1090800000000000000000000000000000000000E0 +:1090900001000000200000000000000000000000AF +:1090A0000000000000000000008000000000000040 +:1090B00000000000000000000000000301000000AC +:1090C00000000000000000000000000000000000A0 +:1090D0000000000000000000000000000000000090 +:1090E0000000000000000000000000000000000080 +:1090F0000000000400000000000000040000000068 +:10910000000000000000000000000000000000005F +:1091100000000400000280000000000010000000B9 +:10912000000000000000000000000002000000003D +:109130000000000000000000000000000000080027 +:10914000000000000000000000000000000000001F +:1091500000000000000000000000000000001000FF +:1091600000000000000000000000000000000000FF +:1091700000000000000000000000000000000000EF +:1091800000000000000000000000000000000000DF +:1091900000000000000000000000000000000000CF +:1091A000000000000000200000000000000000009F +:1091B000000000000000002100000003000000008B +:1091C000000000000000000000000000000000009F +:1091D000000000000000000000000000001100007E +:1091E000000000000000000000000000000000007F +:1091F000000000000000000000000000000000006F +:10920000000000000000000000000000000000005E +:10921000000000000000000000000000000000004E +:1092200000000000000000008000000000000000BE +:10923000000000000000000000000000000000002E +:10924000000000000000000000000000000000001E +:10925000000000000000000000040000009000007A +:109260000088000000000000001000000000000066 +:1092700000000000000000000000000000000000EE +:1092800000000000000000000000000000000000DE +:10929000000000000000000000000080000000004E +:1092A000000000000000000000000021000082001B +:1092B000002100000000C00000080041000500007F +:1092C0000008000010000000000000000000000086 +:1092D000000000000000000000000000000000008E +:1092E000000000000000000000000000000000007E +:1092F000000000000000000000000000000000006E +:10930000000000000000000000000000000000005D +:109310000000000000000000000000000004000049 +:1093200000000082000000000000000000000000BB +:1093300000000000211000100000000000000000EC +:109340000002000000000000000000000008000013 +:10935000000000000000000000000000000000000D +:1093600000000000000000000000000000000000FD +:1093700000000000000000000000000000000000ED +:1093800000000000000000000000000000000000DD +:1093900000000000000000000000000000200000AD +:1093A00000008408000000100020000400C100003C +:1093B0000000000400000005001000000000004153 +:1093C0000009000001020000000000000000000091 +:1093D000000000000000000000000000000000008D +:1093E0000004000000000000000000000000000079 +:1093F000000000000000000000000000904000009D +:109400000000000000030000000000000000000059 +:109410000200000000000000000000000000000149 +:1094200000C0000000010000000100010001000474 +:10943000000000000001000000000000000000002B +:10944000009000C0000002000000000000020000C8 +:10945000000000000000000000000000000000000C +:1094600000000001000000000000000000000000FB +:1094700000000000000000000000000000000000EC +:1094800000000000000000000000000000000000DC +:10949000000000000000000000000000000000804C +:1094A000048020002000C08004000080000001042F +:1094B0000084208021002180210000412041A04023 +:1094C000A000010020000000000000000000A0003B +:1094D000000000000000000000000000000000008C +:1094E000000000000000000000000000000000007C +:1094F000000000000000000000000000000000006C +:10950000000000000000000000004000000000001B +:10951000000000000000000000000000001000C07B +:1095200000208020800080000008800000100000E3 +:1095300020014105804082008240820000008000BE +:1095400000010000040080080002028800002100E1 +:10955000000000000000000000000000000000000B +:1095600000000000000000000000000000000000FB +:1095700000000000000000000000000000000000EB +:1095800000000000000000000000000000000000DB +:1095900000000000000000000000000000000000CB +:1095A000000000000000000000008800000500002E +:1095B0000002000400210421880002009000000045 +:1095C0000000A04100000489080000000000000025 +:1095D0000002000400000000000000000000000085 +:1095E000000000000000000000000000000000007B +:1095F000000000000000000000000000000000006B +:10960000000000000000000000000000000000005A +:10961000000000000000000000000000000000004A +:10962000000000000000000000000000000000003A +:1096300000000001000141008000000080000000E7 +:1096400000000010000000000020000020000004C6 +:109650000000000400000000000000000000000006 +:1096600000000000000000000000000000000000FA +:1096700000000000000000000000000000000000EA +:1096800000000000000000000000000000000000DA +:1096900000000000000000000000000000000000CA +:1096A00000000000000000000000010110000001A7 +:1096B000000100A00190908200A000C0010084C0C1 +:1096C000C00041C001000300000141C0A00003012F +:1096D0000001000001000000000000000000000088 +:1096E0000000000000000000000000000101000078 +:1096F000000000000000000000000000000000006A +:109700000000000000000000000000000000000059 +:109710000000000000000000000000000000000049 +:109720000000000000000000000000001141802146 +:1097300000400003008003808000000002801000D1 +:10974000890000009191400585040040918903043F +:10975000820900400000020000000000000000003C +:1097600000000000000000000000000000001110D8 +:1097700000210008000400000000000000000000BC +:1097800000000000000000000000000000000000D9 +:1097900000000000000000000000000000000000C9 +:1097A00000000000000000000000000080808080B9 +:1097B000800080208041110021000580038000048A +:1097C00000000008800009800321081184050900B9 +:1097D0000321031183080000000000020080000044 +:1097E0000000000000000000000000000000000079 +:1097F0000000000000000000000000000000000069 +:109800000000000000000000000000000000000058 +:109810000000000000000000000000000000000048 +:1098200000000000000000000000000000000890A0 +:10983000884010000800900100000100000400882A +:10984000000000000001C020010200000101C084EE +:1098500001A000000001C101000000000001004063 +:1098600000000000000000000000000000000000F8 +:1098700000000000000000000000000000000000E8 +:1098800000000000000000000000000000000000D8 +:1098900000000000000000000000000000000000C8 +:1098A0000000000000000000000000000000C000F8 +:1098B0000000001000080008000240010001040040 +:1098C000100100011000000001C0000000010400B0 +:1098D00003C001010001000103C1000000000000FD +:1098E0000000000000000000000000000000000078 +:1098F0000000000000000000000000000000000068 +:109900000000000000000000000000000000000057 +:109910000000000000000000000000000000000047 +:109920000000000000000000000000000000000037 +:109930008000000000800980098000008020000273 +:109940008003001121110011001108830041410919 +:109950008304918502400303052091C000000000AC +:1099600000000000000000000000000000000000F7 +:1099700000000000000000002000080000000000BF +:1099800000000000000000000000000000000000D7 +:1099900000000000000000000000000000000000C7 +:1099A00000000000000000000000000000000000B7 +:1099B000000000000000040210800900030041893B +:1099C00080000800201100000002000000008880D4 +:1099D0004100048009058304030910804040000011 +:1099E0000004800000008000000000000000000073 +:1099F0000000000000000000000000000000000067 +:109A00000000000000000000000000000000000056 +:109A10000000000000000000000000000000000046 +:109A20000000000000000000000000000000000036 +:109A300000000000008800000000000201C00000DB +:109A40000102020083000001000000A0A00000004D +:109A5000C140000000840100C082000000840101B8 +:109A60000000900120002000020000000000000023 +:109A700000000000000000000000000000000000E6 +:109A800000000000000000000000000000000000D6 +:109A900000000000000000000000000000000000C6 +:109AA00000000000000000000000000000000000B6 +:109AB00000000000000007000041810000E00700F6 +:109AC0000006818100E007000000004100E007007F +:109AD0000000000000E000000000008100E007003E +:109AE0000000000000000000000000000000000076 +:109AF000000000000000000000000000000000E086 +:109B00000000000000000000000000000000000055 +:109B10000000000000000000000000000000000045 +:109B20000000000000000000000000000000000035 :109B30000000000000000000000000000000000025 -:109B4000000000000000000000000000FF7DFF7D1D -:109B5000B3B3FFF300000000FF14FF1455551505C3 -:109B60000000CF0000003CFF3C003CF53CA0E0C002 -:109B7000E0C08A8A8A8AC3F3D7F3AAAA3F3F1414A3 -:109B80002828F0000000FF003333FFFFF3F6000049 -:109B9000000000000000AA82A0820F0FFFFF00005B -:109BA000D7D0FF0F000000000000FFCF3C0C0000EA +:109B4000003F3C3FA000A000000000000F0F0F0FDF +:109B5000FFFF0000FFFF0000FFFF5555FFFF000063 +:109B6000FFFF55550000F0AAF0AA00000000000019 +:109B700000000000000000000000000000000000E5 +:109B800000000000000000000000000000000000D5 +:109B900000000000000000000000000000000000C5 +:109BA00000000000000000000000000000000000B5 :109BB00000000000000000000000000000000000A5 -:109BC00000000000000000000000000000000F0F77 -:109BD0000F0FB3B3FFFF000000000000FF140000F0 -:109BE0000000CF5FCF5F00003CFF3C00FFFFFFFFA6 -:109BF000E0C0F0F08A8A8A8A00301430AAAA303095 -:109C0000D7D7EBEB30F030F0FF0033335F5FF3E694 -:109C10000000000000000000FFD7F5D70C0CFCFC92 -:109C200000005550FF0FFF0FC0FCC0FC0F0F0F0FBF -:109C30000000000000000000000000005555005525 -:109C40000000000000000000000000003C553C55F2 -:109C50000A0F0A0F40000000AFA0A0AF0F8F4FCF38 -:109C6000FCF0C0F0C3CFC3CF0000A4AEAEAE28EB73 -:109C700028EBC3C3FF003CAAFFAAFFBF551500C3D2 -:109C800000C33CCCC0030000000073993174080885 -:109C9000FFFF00000000A2A2A2A2A3A3A0A0FF5F5A -:109CA000AA0AC000C000EB41BE14C0FCC0FC82BECA -:109CB00082BE0000000000000000000000005555BA -:109CC000005500000000000000000000000000003F -:109CD0000F0F0A0F0B0B00000000AFA0A0AF0C8C01 -:109CE0004CCC7C504050C3CFC3C70000A4A4AEA44A -:109CF00030F330F30000000000AAFFAAAABF00154D -:109D00003CFF3CFFFCF3C3CC0000000073993174AE -:109D100000FF000000000000F3F3F3F3A3A3A0AFE3 -:109D2000FF5FAA0AC000C000EB41BE1400000000A3 -:109D300000100000000000000000000000610006AC -:109D4000000D000000610006000D00000061000130 -:109D50000001000005000A08050000A100614004A0 -:109D6000000500000061000E001D00000000006101 -:109D70000006000D000000613006001D00000061BB -:109D80003E0E000D00008061400500010000806172 -:109D9000000E000D000000610006000D00010061D2 -:109DA0003006000D000105614A0E051D00A00000EF -:109DB0000000000000000000000000000000F5F4BA -:109DC000FFFE00000000CFCB000047F047F00F0F70 -:109DD0002800FFFF00000000000000000000AAAA09 -:109DE000AA50E3000000000000000000C3C3000010 -:109DF0000700F700F0F0F0F00B0F0B00008200827C -:109E000000000000C0C5C0C53C007F430F0F00FF2D -:109E1000F7F700004054EAFE0000000000000003D5 -:109E2000FF00280000003F3F000000000F55C30066 +:109BC0000000003F3C3FA000A000000000000F0F7D +:109BD0000F0FFFFFFFFFFFFFFFFFFFFF5555FFFFC9 +:109BE000FFFFFFFF55550000003CFF3C0000000058 +:109BF0000000000000000000000000000000000065 +:109C00000000000000000000000000000000000054 +:109C10000000000000000000000000000000000044 +:109C20000000000000000000000000000000000034 +:109C3000000000000000000000000000FFFF000026 +:109C40000000000028FD1428DF00DF1F00000000D6 +:109C5000F0F0FFFFAAAAFFFFAAAAFFFF0000FFFF84 +:109C6000AAAAFFFFFFFF00000000000000000000A4 +:109C700000000000000000000000000000000000E4 +:109C800000000000000000000000000000000000D4 +:109C900000000000000000000000000000000000C4 +:109CA00000000000000000000000000000000000B4 +:109CB00000000000000000000000000000000000A4 +:109CC000000000000000FFFF0000D700D7140000D4 +:109CD0000000F0F0FFFFAAAAFFFFAAAAFFFFFFFF04 +:109CE000FFFFAAAAFFFF0000000000000000000024 +:109CF0000000000000000000000000000000000064 +:109D00000000000000000000000000000000000053 +:109D10000000000000000000000000000000000043 +:109D20000000000000000000000000000000000033 +:109D30000000000000000000000000000000000023 +:109D40000500000000610000C01D00000061003639 +:109D5000C00100004563803F002D920240E3800176 +:109D60000021920245E3803900218A0000000000B2 +:109D700000000000000000000000000000000000E3 +:109D800000000000000000610002000D0000000063 +:109D900000000000000000000000000000000000C3 +:109DA00000000000000000000000000000000000B3 +:109DB00000000000000000000000000000000000A3 +:109DC000000000000000FF003C3C00000000C0C09C +:109DD0000303B4000F0F00000000AF0CAFFC3F3FC7 +:109DE0003030E8FFF0FFCF4DCFCF0A0F3C3C0000F2 +:109DF0000000000000000000000000000000000063 +:109E00000000000000000000000000000000000052 +:109E10000000000000000000000000000000000042 +:109E20000000000000000000000000000000000032 :109E30000000000000000000000000000000000022 -:109E4000F5F4FFFE00000000FFFB0000D964D964B8 -:109E5000FFFFFFFFFFFF0100000000000000000007 -:109E60003C3C3C3C0000000000000000FFFFC3C37E -:109E700000000300F300E0A04000000F000000D746 -:109E8000008700000000C0C5C0C53C007F430F0F25 -:109E900000FFF7F400004054EAFE0000000000005C -:109EA0000003FF0F280800003F7F000000000F554F -:109EB000C3FF0000000000000000000000000000E0 -:109EC00000009C9CF6F60000000000000000000F5F -:109ED00000F03F0FBF8F3F3F303F00000000000009 -:109EE0000000A0A0A0A03C0C3CAC00000000F5F5D8 -:109EF000A0A00000FFFF000005000500F0F0F0F05A -:109F00005555004055FF55FF000000003F3F0F0F23 -:109F1000B4F5A0E1FFFF00553C3CF0F0000000006C -:109F2000000000000028042CF0F0000000000000F9 -:109F3000FF3FFF3F000000000000000000000000A5 -:109F4000000000006262C1C10000000000000000CB -:109F5000FF0FFFF03F0F3F0F3F3F303A0000000080 -:109F600000000000A0A0AAA23CFC3CAC0000000045 -:109F7000F5A0F5A00000F8FA00000F0A0F0A000093 -:109F8000FFFF5555504055FF5500000000003C7D37 -:109F90000055B4F5A0E13CFFFF0F3C3CF0F00000A1 -:109FA0000000000000001038143CF0F00000000039 -:109FB00000007D3DFF3F0000100000002000000079 -:109FC000C0000000000020108800400000042000B5 -:109FD000C00800008400000000008809000000059F -:109FE0000410000088008409201020004004401064 -:109FF00010054003400500020004880420051004F9 -:10A00000400340101005C010000004002000841020 -:10A0100004052008840884080400841088002003B4 -:10A02000201000082000841000042000880404038D -:10A03000201020008804200800000000000000001C -:10A0400000080000000000004000000000000000C8 -:10A0500000004000000000000800000200020000B4 -:10A0600000000000000000000000000041000000AF -:10A07000200040000000000000001000050040002B -:10A08000000000000000040200000000400000404A -:10A0900000000000000040C000000000000020841C -:10A0A00000000090002000000000400000000000C0 -:10A0B000000000004000040104010040000500040D -:10A0C0000003004000041011080800000003000510 -:10A0D00000030804904100040804000084210005E6 -:10A0E000000404100004000302000003080900102B -:10A0F0000841820400100005904100000040000368 -:10A1000000050009000500040210000800400004DA -:10A110001005000090030005000500000005000484 -:10A12000004000000005000802401004904021405B -:10A1300004080000000802000000840900840010E8 -:10A1400000082084000800080204008800900088AD -:10A1500000900008008400100084000800840008BB -:10A1600000C02088000800080004040800400084A3 -:10A170000040009000080008000404100000008463 -:10A1800000841182409000080088009000C0008286 -:10A19000008202404104000800100000008205080F -:10A1A0000088000811040090008505112088001126 -:10A1B00090028011001040880508028400080041C8 -:10A1C00000000010001000410000002100050021E7 -:10A1D00000080008002100080040004100000008BD -:10A1E0000021001090100002000500210003004033 -:10A1F00000020003000800214003000300050000E6 -:10A2000082020010000802119005000500400002C3 -:10A21000040900080003000000400009000200409B -:10A22000004084218410000090400802C008902162 -:10A230001004002100080008004001210208042148 -:10A24000004000080082004000A000000000000064 -:10A250000000000000100000000000A0000040000E -:10A260000082000000080000004005821190008874 -:10A2700000001008020804C000820888001040088E -:10A280000000218400844110000803C011A00008D0 -:10A2900000C0081000A0411000C00800218408C0C0 -:10A2A000000000104000000040820082008300A0F7 -:10A2B0002108A109030800A0002000000810800068 -:10A2C00080000000080000000008001000000000EE -:10A2D00000000009001008410000000300210040B8 -:10A2E00010400005000400000041001100090009B1 -:10A2F00000000410A00500000002A00300200040A0 -:10A300000040000000110011041100020040000292 -:10A3100010009000C000A00904410800C0400009DE -:10A3200000110009821008201000000400080091AC -:10A330000480200000910191114001401141112041 -:10A34000082110100082200000A00008008200A058 -:10A3500000100040000805A0090000040208099050 -:10A36000208420824010028200002082000400A08D -:10A37000400241840088404000A00000008400901A -:10A380000004008800000082119020840082008870 -:10A3900000C0000020C002C00010038800000010B0 -:10A3A0000090410208A00082008400C00308004120 -:10A3B00000040008008400081040100020049004ED -:10A3C0008800909080400000000000000005000020 -:10A3D0000010000200030000000000020005000061 -:10A3E000080000000000C000000500400203000358 -:10A3F00000000008004000080010020400110041A5 -:10A4000000410000081100000008000800110010C1 -:10A410009000080000208403000808000009A00341 -:10A42000C0030041000382008200000800034010C6 -:10A4300000080005A0050008002100000000080831 -:10A44000000004002000408000080000000200849A -:10A4500000000000000000000020000000000000DC -:10A46000000000000010000004020840000040A0AE -:10A47000040000002082200009A000400008020221 -:10A4800000080584201000020000001011C04010D8 -:10A49000110240000508050000A0020000C0008471 -:10A4A000410005080000038800000000008800A0AB -:10A4B00000A0000000000000000000000488080068 -:10A4C00004A100A0A0008082A00200000000000003 -:10A4D000000000000000000000082000000000054F -:10A4E00000102011004100080005000000030005D5 -:10A4F00000080005080300050000082100100041C5 -:10A50000002190000009000000030000001000047A -:10A510000000000500030403000408052021900347 -:10A52000000000080000000090202003000002034B -:10A530009000C0008200001090A000C001C0000880 -:10A5400001C1110403801000080040000010000049 -:10A5500009C009820090000000840008048402847D -:10A560000090000421080284098200A021040088D0 -:10A570000204020200C009C041C000A0208204827F -:10A58000090009840008410009000000000011C012 -:10A59000094000402090008802902004409000C0B4 -:10A5A000040000000084210000A000100200100040 -:10A5B000200000840000000000012041000820402D -:10A5C000000004408801C04080004002A10000005B +:109E40000000000000000000FF053D3D0000000094 +:109E5000C0C0030314000F0F00000000A00CA0FC02 +:109E60005F3F5030E800F0000C4D0C0C0F0F3C3CF5 +:109E700000000000000000000000000000000000E2 +:109E800000000000000000000000000000000000D2 +:109E900000000000000000000000000000000000C2 +:109EA00000000000000000000000000000000000B2 +:109EB00000000000000000000000000000000000A2 +:109EC00000000000000000000000F00D0F00000086 +:109ED0000000000000003C043C0000000000000006 +:109EE0000000FCFC0C5C787800FFBF833D01AEBE37 +:109EF000FEBE0000000000000000000000000000A6 +:109F0000000000000000000000000000AF50AF5053 +:109F10000000000000000000000000000000000041 +:109F20000000000000000000000000000000000031 +:109F30000000000000000000000000000000000021 +:109F4000000000000000000000000000F0000F0012 +:109F500000000000000000003C863C000000000003 +:109F600000000000FCAC0C0C3C3C00FF3F033F0336 +:109F70000414541400000000000000000000000061 +:109F800000000000000000000000000000003C3C59 +:109F9000FF000000000000000000000000000000C2 +:109FA00000000000000000000000000000000000B1 +:109FB00000000000000000000000000000000000A1 +:109FC0000000000000000000000000000000000091 +:109FD0000000000000000000000000000000000081 +:109FE0000000000000000000000000000000000071 +:109FF00000000000820000000000000000000000DF +:10A00000000000000400000000000000000000004C +:10A010000000000000000000000000000000000838 +:10A020000000000000000000000000000000000030 +:10A030000000000000000000000000000000000020 +:10A040000000000000000000000000000000000010 +:10A0500000000000000000001000000000000000F0 +:10A06000000000000090000000000000000040021E +:10A0700000000000000000000000000000000000E0 +:10A0800000000000000000000000000000000000D0 +:10A0900000000000000000000000000000000000C0 +:10A0A00000000000000000000000000000000000B0 +:10A0B000000000000000000000040000000000009C +:10A0C000000000000000000000000000020000008E +:10A0D0000000000000000000000000000000000080 +:10A0E000004000000000000000000200A00000008E +:10A0F0000000000000090000000000000000000057 +:10A10000000000000000000000000000000000004F +:10A11000000000000000000000000000000000003F +:10A12000000000000000000000000000000000002F +:10A13000A00000000000020000000000000000007D +:10A140000000000000080000000000000000000007 +:10A1500000000000000000000000000000000000FF +:10A1600003000000004000000000000000000000AC +:10A1700000000000000000000000000000000000DF +:10A1800000000000000000000000000000000000CF +:10A1900000000008000000000000000000000000B7 +:10A1A000000800080000000000000000000000009F +:10A1B000000000840000000000000000000000001B +:10A1C000000000000000000000000000000000008F +:10A1D000000000000000000000000000000000007F +:10A1E000000000000000000000000000000000006F +:10A1F000004100000000000000008400000000009A +:10A200000000000800000000000000000000000046 +:10A21000000000000000000000000000000000003E +:10A22000000000000000000000000000000000002E +:10A2300000000000000000000000000000000040DE +:10A24000000000000000000000000000000000000E +:10A2500000000000400000000000000000000000BE +:10A26000400000A00000100000000000000000827C +:10A27000000000A000000000000000000000050039 +:10A2800000000000000000080000000000000000C6 +:10A29000000000002000000000000000000000009E +:10A2A00000000000000000000000000000000000AE +:10A2B000000000000000000000000000000003009B +:10A2C000000000000000000000000000000000008E +:10A2D0000000004100000000000500000000000434 +:10A2E000004100040000000900000005000000001B +:10A2F00000000041004100000000000000000000DC +:10A30000000000000000000000000000000000004D +:10A31000000000000000000000000000000000003D +:10A32000000000000000000000000000000000002D +:10A3300008000000004000000000000000000000D5 +:10A34000000000000000000000000000000000000D +:10A3500000000000000000000000000000000000FD +:10A3600000000000000000000000000000000000ED +:10A3700000000000000000000904000000900088B8 +:10A380000020000000000004009000000000000019 +:10A39000000000000000004000000000000000007D +:10A3A00000000000000000000000000000000000AD +:10A3B0000000000000A000000000000000000000FD +:10A3C000000000000000000000000000000000008D +:10A3D000000000000000000000000000000000007D +:10A3E000000000000000000000000000000000006D +:10A3F0000000000000000000000000080000000055 +:10A40000000000000000000000000000000000004C +:10A41000000000000000000000000000000000003C +:10A42000000000000000000000000000000000002C +:10A43000000000000000000000000000000000001C +:10A44000000000000000000000000000000000000C +:10A450000000000000000000000000000000008478 +:10A4600000000000000000000000000000000040AC +:10A470000484000000840000000000A00008000028 +:10A4800000880000000000840000040000000000BC +:10A4900000000000000000000000000000000000BC +:10A4A00000000000000000000800000000000000A4 +:10A4B000000000000000000000000000000000009C +:10A4C000000000C0000000000000000000000000CC +:10A4D000000000000000000000000000000000007C +:10A4E000000000000000000000100000000000005C +:10A4F0000000000000000000000000100000000844 +:10A50000000000000000000000000000000000004B +:10A510000000000200000000000000000000000039 +:10A52000000000000000000000000000000000002B +:10A53000000000000000000000000000000000001B +:10A54000000000000000000000000000000000000B +:10A5500000000000000000000000000000020000F9 +:10A5600000002000000000000000000000000000CB +:10A57000000000000000000000840000200000C077 +:10A5800020002000000009C00000200000000000A2 +:10A59000000000000000002000000000000000009B +:10A5A00000000000000000000000000008000000A3 +:10A5B0000200000000080000000000000000000091 +:10A5C0000000000000000000008200000000000009 :10A5D000000000000000000000000000000000007B :10A5E000000000000000000000000000000000006B :10A5F000000000000000000000000000000000005B :10A60000000000000000000000000000000000004A :10A61000000000000000000000000000000000003A :10A62000000000000000000000000000000000002A -:10A63000C100C100000000820000C00001820103CF -:10A640000101C000004000820900C1000100A18298 +:10A63000000000000000000000000000000000001A +:10A64000000000000000000000000000000000000A :10A6500000000000000000000000000000000000FA :10A6600000000000000000000000000000000000EA :10A6700000000000000000000000000000000000DA :10A6800000000000000000000000000000000000CA :10A6900000000000000000000000000000000000BA :10A6A00000000000000000000000000000000000AA -:10A6B00000008441A02100000080004180414180D1 -:10A6C00041834104832100800080C100C1214141B8 -:10A6D00041800000000000000000000000000000B9 +:10A6B000000000000000000000000000000000009A +:10A6C000000000000000000000000000000000008A +:10A6D000000000000000000000000000000000007A :10A6E000000000000000000000000000000000006A :10A6F000000000000000000000000000000000005A :10A700000000000000000000000000000000000049 :10A710000000000000000000000000000000000039 :10A720000000000000000000000000000000000029 -:10A73000000000000000C14100410009808041414B -:10A7400000418341C1C1A1200041004100C18041BD -:10A7500000000041000000000000000000000000B8 +:10A730000000000000000000000000000000000019 +:10A740000000000000000000000000000000000009 +:10A7500000000000000000000000000000000000F9 :10A7600000000000000000000000000000000000E9 :10A7700000000000000000000000000000000000D9 :10A7800000000000000000000000000000000000C9 :10A7900000000000000000000000000000000000B9 :10A7A00000000000000000000000000000000000A9 -:10A7B000000000000000000440410001000040C013 -:10A7C000008500018301C0C120830001820190C186 -:10A7D00020010000900100000000000000000000C7 +:10A7B0000000000000000000000000000000000099 +:10A7C0000000000000000000000000000000000089 +:10A7D0000000000000000000000000000000000079 :10A7E0000000000000000000000000000000000069 :10A7F0000000000000000000000000000000000059 :10A800000000000000000000000000000000000048 :10A810000000000000000000000000000000000038 :10A820000000000000000000000000000000000028 -:10A83000000000000000000000400000C100010016 -:10A84000000800008583008200A00000C183C001D1 -:10A8500000400000C1400084000000000000000033 +:10A830000000000000000000000000000000000018 +:10A840000000000000000000000000000000000008 +:10A8500000000000000000000000000000000000F8 :10A8600000000000000000000000000000000000E8 :10A8700000000000000000000000000000000000D8 :10A8800000000000000000000000000000000000C8 :10A8900000000000000000000000000000000000B8 :10A8A00000000000000000000000000000000000A8 -:10A8B0000000000000000000000000800041854111 -:10A8C0002000008000214183008000410000C183FE -:10A8D000800300800021C1C10000000000000000D2 +:10A8B0000000000000000000000000000000000098 +:10A8C0000000000000000000000000000000000088 +:10A8D0000000000000000000000000000000000078 :10A8E0000000000000000000000000000000000068 :10A8F0000000000000000000000000000000000058 :10A900000000000000000000000000000000000047 :10A910000000000000000000000000000000000037 :10A920000000000000000000000000000000000027 -:10A93000000000000000000000000000044100C012 -:10A94000C1050385844180C18384034141808041E6 -:10A950008341038080C10080C104004100000000E9 +:10A930000000000000000000000000000000000017 +:10A940000000000000000000000000000000000007 +:10A9500000000000000000000000000000000000F7 :10A9600000000000000000000000000000000000E7 :10A9700000000000000000000000000000000000D7 :10A9800000000000000000000000000000000000C7 :10A9900000000000000000000000000000000000B7 :10A9A00000000000000000000000000000000000A7 -:10A9B000000000000000000000000000000000C1D6 -:10A9C000000340C001C084C1400583C1014100C0F3 -:10A9D0004001050101C040C1A0024041000100004A +:10A9B0000000000000000000000000000000000097 +:10A9C0000000000000000000000000000000000087 +:10A9D0000000000000000000000000000000000077 :10A9E0000000000000000000000000000000000067 :10A9F0000000000000000000000000000000000057 :10AA00000000000000000000000000000000000046 :10AA10000000000000000000000000000000000036 :10AA20000000000000000000000000000000000026 :10AA30000000000000000000000000000000000016 -:10AA40008112000000004842821200E000004842EB -:10AA500088120000000048428112000000004842B5 +:10AA40000000000000000000000000000000000006 +:10AA500000000000000000000000000000000000F6 :10AA600000000000000000000000000000000000E6 :10AA700000000000000000000000000000000000D6 :10AA800000000000000000000000000000000000C6 @@ -146134,7 +146134,7 @@ :10AB10000000000000000000000000000000000035 :10AB20000000000000000000000000000000000025 :10AB30000000000000000000000000000000000015 -:10AB400000000000000000000000003000000000D5 +:10AB40000000000000000000000000000000000005 :10AB500000000000000000000000000000000000F5 :10AB600000000000000000000000000000000000E5 :10AB700000000000000000000000000000000000D5 @@ -146142,196 +146142,196 @@ :10AB900000000000000000000000000000000000B5 :10ABA00000000000000000000000000000000000A5 :10ABB0000000000000000000000000000000000095 -:10ABC0000000000000000000000000000000400045 +:10ABC0000000000000000000000000000000000085 :10ABD0000000000000000000000000000000000075 -:10ABE000000000000000080020032000210088046D -:10ABF00001000404200400102000000020050100D2 -:10AC0000200502002009201020104000408011047F -:10AC10008508000420008808C104880440900404CA -:10AC200005082008088900030010211021002104D4 -:10AC300002044010888402032003028520000409D6 -:10AC40001040200084400409881020008900200959 -:10AC500002400203880002040280204100000280BA -:10AC60000009200300908884800080000000880094 -:10AC70000000400000400000000000000000000054 -:10AC8000400000008000110000A0410040000020B2 -:10AC9000400040004100008400002000000000044B -:10ACA0008000080000908004000000000400040000 -:10ACB0004000808489000002800440A0804000821F -:10ACC000090005010000000100000000040040022E -:10ACD000000080C1800040408500804000000000EE -:10ACE0000040000209000040004001102020010443 -:10ACF000900302080003000200400841020800051A -:10AD00000009004041020800000502000000004068 -:10AD1000080400090000084001100004000402417A -:10AD20000004000500100003029000000004002051 -:10AD300002048240004009054080084101100040A3 -:10AD40000010034102100240004001400340918581 -:10AD5000024102048805208802800809044000A0FE -:10AD600002400840040402410240004020088005DF -:10AD70002082200410100088408300890000C00455 -:10AD80000088400400C184094104001009820800C1 -:10AD90000004C11009400084A00908090000000354 -:10ADA000008400080000412103C003050000008466 -:10ADB000008500840082000802048040090802081F -:10ADC00000890082020880008909098502090201C0 -:10ADD0000240000003080240094080400908400981 -:10ADE0000040048300092084800800092085002198 -:10ADF00000000008000500024000001000080041AB -:10AE0000001000850000001100000011002100006A -:10AE1000010800090402000800400021202120113F -:10AE2000010300400021000500210021080200006C -:10AE30000003408241830088084100880205000524 -:10AE4000000500050008000500410003020800108D -:10AE50000008000304410010000004100008002155 -:10AE600000400008001000400008012100210041BE -:10AE700000000510000000000000A0000008001005 -:10AE80000000030000020000000000C0009000402D -:10AE90000000400000000000002000004100000011 -:10AEA000001020100011000000C0001000008010F1 -:10AEB0000000000040024020051000A000028010A9 -:10AEC00008A005C00000000021A000402084200050 -:10AED00000000040000000820002000000000000AE -:10AEE00000880000000000000000000002000000D8 -:10AEF00000100000040000210040C011A002094021 -:10AF000040108910C0044010400402004080A00896 -:10AF100000091000004082058402000500408211F3 -:10AF2000000200210840004108000010080204400F -:10AF30000521000008008200011082108421C01148 -:10AF40009102C01104410810022140048200A000B7 -:10AF5000C000080040050010410000910000C04002 -:10AF6000080509800800020002000241C0400020DC -:10AF700082000440009080042184008409040908B0 -:10AF800040088501048200C08082890808C0A002B0 -:10AF900002A00900000040904004080008A0410001 -:10AFA00021A0209020C0200811C0000000840004CF -:10AFB000808220820000110021C0408400C020A0B7 -:10AFC0000088028400A000820008A0C0C002080817 -:10AFD00002C00000090485A02108020821400810D1 -:10AFE000118800A040400082801080888982001172 -:10AFF000008200A000010000080904000005000212 -:10B0000000034008000900030005001084410040CF -:10B010009010002140080040A040081008080003DC -:10B020008210011090020002000500020141001090 -:10B03000004082080908000008034088C109018017 -:10B0400000050005824011218240A0008802A00373 -:10B0500000000010080800050003004108A182025A -:10B060000005844184020003C000C0004088042120 -:10B070000000C04184054003000000008000000083 -:10B08000000100008000000000000000000000003F -:10B09000000000000000800000000000000000022E -:10B0A0000010000108C000000000000000000800BF -:10B0B0000000000000102000000000040020080034 -:10B0C00040400000009000014000000000400001EE -:10B0D00000100000000000100002002000000040EE -:10B0E000000100000000000100200000000080407E -:10B0F0000000000000000800A1000021044120041D -:10B1000000082000001000082021001182A108087A -:10B110002005822188408282024020080000A00889 -:10B120008200081000000005001000400021000807 -:10B13000000000048804204184400000040400054D -:10B14000880500030005080901084000000982C0C5 -:10B1500084040002004020408411880284000140E1 -:10B1600000000021A0118400002184118421C0115D -:10B1700090030809A00388024021900400A08000E9 -:10B18000208200C009042000000800001182001085 -:10B190000000214011101100401120A040080004BF -:10B1A00009882100A00409040004090400A0008209 -:10B1B000408211000084208800A02000000002903E -:10B1C00000001120008211902084020089000000FC -:10B1D000204020040802410141A10400000111C0E7 -:10B1E000020000102002000800000040204020C0A3 -:10B1F0000000080000042000020080A0020040417E -:10B20000C0900503000988A10210901000C000043E -:10B21000009000840090100101880201901002A0AB -:10B22000C1100210C004010401A00289C08220C024 -:10B2300009C110A1100110A00000000200080000C8 -:10B2400000088504004082A089894003C0090008E5 -:10B25000C00220008484008200000490A0040082C8 -:10B260004040000208918400008820089020A0003F -:10B270000202A1020840C0000202A090880402025B -:10B2800080910982200500C000C0A0890002000250 -:10B290000080000000800000000402100002808591 -:10B2A000C08403008090000504A010048085000580 -:10B2B0000009A003000380048880210004000080AE -:10B2C000000020804000008082000405A18200C0B0 -:10B2D0000090910083000000000000000900008041 -:10B2E0000080A09105A184088008110082800000E0 -:10B2F0008000C0A010828084000580800200008051 -:10B30000808085084104911011839100C0000500E0 -:10B3100080031100000400004080090011038480B4 -:10B3200010C10580804084808321048241219011D6 -:10B3300021100880020084008241000000088084FF -:10B34000800000008080402182848521400000C070 -:10B35000051184C11000414104202080000000112B -:10B3600080008000820020804185080020001000BD -:10B37000088020808900C189A0099080410089004F -:10B380000440900088038810098420098890830075 -:10B3900084001021000088000004010400900001D6 -:10B3A000A010019108102001A020098985038400C4 -:10B3B000A00085850002A000A0001141000000014E -:10B3C000A0400800000040880502A011A0010190E3 -:10B3D0008802000008838900880385848282000037 -:10B3E0000090040002400800000200049190000058 -:10B3F000218805020082020002208200A1A09000A4 -:10B4000004900182030800000010909101080804D4 -:10B410000000048910080200000000001000001065 -:10B42000000285C10090020800A0000502A1C0082A -:10B4300000C00100A0888484010500C141410010C2 -:10B440001082000803100000C003000490A104054E -:10B450000010010003090109C100C02040850083DC -:10B460000088002040408283010000002021C0832A -:10B47000010400218820020011A001004000000208 -:10B4800001000002C0A00101000310909185118904 -:10B4900080021141C12180908009001100008000CC -:10B4A0000080418508210402009102C00221100899 -:10B4B00000820902210280110011110309219190DB -:10B4C000000080800080111000000084004180A1F5 -:10B4D00000040085030002840585C02000838008E5 -:10B4E000400511100010808480A010204020090821 -:10B4F00000A0410900100002802010A04110C002ED -:10B500000085410500C080020210110091A01100C9 -:10B51000090921034100218088008000804000004B -:10B520008000210090104080080221A0821090002D -:10B5300011402100080011002010882190C0410016 -:10B540008320000080098000000000000408080932 -:10B55000058003002100098490A1C1030040008000 -:10B560008090004100040020008000000080001056 -:10B5700000808040008000000080804180A1800029 -:10B5800000000009008080808000004010A041037E -:10B5900088848800010082880108A1000400A001BD -:10B5A000A0040400C14083000210110089C12003DF -:10B5B0001010A00005208582C0008500058511A01F -:10B5C0000488090100008200100210000000C00081 -:10B5D0000408A04004008900001009090801009037 -:10B5E00000C010A0820120012020C010000000C077 -:10B5F0009091200408002010202000A008010205DE -:10B60000040020000000000404820200C0000000CA -:10B6100000E0070000000000000000000000000043 -:10B6200000000700000000000000070000120000FA -:10B63000000007008400000000000000000000007F -:10B6400000E000000006820000E0070000000000AB -:10B650000000000007000000000000000000000AD9 -:10B660000000000000004221000000000000000077 -:10B670000000000000004200000000000000601216 -:10B6800000000000000042000000000000008206F0 -:10B69000F666FE7E0600090900C300C3006642424A -:10B6A0006060E0E000000000FD3DFC3CFFF6F3F6CA -:10B6B0002000000000002000CFCCCC0C333333330B -:10B6C0000FFC0F0CF0C3F0C3A0A1A0A13C00C2026C -:10B6D00000007E427E72303FFFFFCFCFFFFF5A3C1B -:10B6E0003C3CD4D4D4D496F0F0F00FFF0F0FC33C01 -:10B6F000F30CD4CCD4CC996600FF5A665A5AC3F3E3 -:10B70000C3F30F0FF00FC3C3A5A55A3A5A3A96F0E8 -:10B7100096F0F000F8180600090900C300C300669F -:10B720004242FF00FFC000000000F909F0000C06D3 -:10B7300000060000000000000000CC3F330C0000B9 -:10B74000FFFF0FFC0F0CC3C3E1E1A020A0203C00D1 -:10B75000C202000042424272303F0000303000001E -:10B760005A3C3C3CF0F0F0F096F0F0F0F000F0F0D5 -:10B77000C33CF30CD4CCD4CCFF00FF005A665A5A19 -:10B780003C0C3C0CF0F0F0F03C3C3C3C5A3A5A3A51 -:10B790000FF00FF0000000000000000000000000AB +:10ABE0000000000000000000000000000000000065 +:10ABF0000000000000000000000000000000000055 +:10AC00000000000000000000000000000000000044 +:10AC100000000000000001000000000000800000B3 +:10AC200000000080000000030000000000000000A1 +:10AC30000000000000100000000000000000000004 +:10AC4000000088000000000000000000000000205C +:10AC500000000000000000000000000002000000F2 +:10AC600000000000000000000000000000000000E4 +:10AC700000000000000000000000000000000000D4 +:10AC800000000000000000000000000000000000C4 +:10AC900000000000000000000200000000000010A2 +:10ACA0000000000000100000000000000000000094 +:10ACB0000000000000000040000000000000000054 +:10ACC0000000000000000000000000000000000084 +:10ACD00000830000000000000000000000000000F1 +:10ACE000000800000000000000000000000000005C +:10ACF0000000000000000000000000000000000054 +:10AD000000000000000002000000000000000241FE +:10AD10000000020000000000000000000000020926 +:10AD2000020000000000000002000000000000001F +:10AD3000000000000009000000000000000000000A +:10AD4000020000000000020000800000020000007D +:10AD500000000000000000000000000000000000F3 +:10AD6000004100000000020000000000000400009C +:10AD700000000004000000000000000000000000CF +:10AD800000000000000000000000000000000000C3 +:10AD900000000000000000000000000000000000B3 +:10ADA0000000000000C000000000000000000000E3 +:10ADB000000000000000000000000000000000088B +:10ADC000000000000000024000000004000000003D +:10ADD000000000000000000000000000000000046F +:10ADE000000010080000000000000000000000004B +:10ADF0000000000000000000000000000000000053 +:10AE00000000000000000000000000000000000042 +:10AE10000000000000000000000000000000000032 +:10AE200000000100010000000041000000000000DF +:10AE30000000000000000000000000000010000002 +:10AE40000000000000000000008000002000200042 +:10AE500000000000000000000021000000000000D1 +:10AE600000000000000000080003000000002100B6 +:10AE700000000000000000000000000000000000D2 +:10AE800000000000000000000000000000000000C2 +:10AE900000000000000000000000000000000000B2 +:10AEA0000000000008000400000000000000000096 +:10AEB0000000000000000000000000000000000092 +:10AEC00000000000000000000000000800008000FA +:10AED00080000000000000000000000000000000F2 +:10AEE0000000000000000000000000000000000062 +:10AEF00084000000000000000000000000000000CE +:10AF00000000000000110000000000000000000030 +:10AF100000030000004000000004000000000000EA +:10AF2000881100080000000900090000000000006E +:10AF300021800000000000000000000000008800E8 +:10AF4000000082000008000000080000000000006F +:10AF500000000000008000000080000000000000F1 +:10AF60000000000000000040200800000000000079 +:10AF70002000A040000000000000000000000000D1 +:10AF8000000000000082000000880000000800842B +:10AF9000000400000082000000000004000000A087 +:10AFA0000004000000840088008811880000000070 +:10AFB0000000880400000000000000000000000005 +:10AFC0000000000000000040000000000000000041 +:10AFD0000000000000000004000000040000000069 +:10AFE000000000000000000000002000020000003F +:10AFF00008008000000000000000000000000000C9 +:10B0000000000000000000000000000084000000BC +:10B010000000000000050000000000050000001016 +:10B020000000404100020000840090000400000085 +:10B030000080000800000000000000000000000088 +:10B040000000000000000000000000000000000000 +:10B0500000000000020002000000000400000004E4 +:10B0600000000000000000080000000000000000D8 +:10B0700020000000040000000000000000000000AC +:10B0800000000000000000000000000000000000C0 +:10B0900000000000000000000000000000000000B0 +:10B0A00000000000000000000000000000000000A0 +:10B0B0000000004000000000000000000000000050 +:10B0C0000000000000000000000000000000000080 +:10B0D000000000000000800080000000000100006F +:10B0E000000100000000000000000000000000005F +:10B0F0000000800000008000000000000000000050 +:10B10000000000000000000000000000000000003F +:10B11000000000000000000000000000000300002C +:10B1200000040000000000410000000090009000BA +:10B130009000000800410011000400000000000021 +:10B1400000000000000000000000000000000000FF +:10B15000000000000000000090008400002000209B +:10B1600000200000000000000000000500000000BA +:10B170000000021004000180200000000000000018 +:10B1800000000000000000000000000000000000BF +:10B1900000002000000000004100008200042000A8 +:10B1A00020002082000000000010000000000000CD +:10B1B000000000000000000000000000000000008F +:10B1C000000000000000000000000000000000007F +:10B1D000000000000000000000000000000000016E +:10B1E000000100010000000000000000000000005D +:10B1F000000002000000800020200000000000008D +:10B20000000000000000000000000000000000003E +:10B21000000000000000000000000000000000002E +:10B2200000000000000000000000000000001040CE +:10B23000000800A090A0A002840201048204000083 +:10B2400000000000000000000000000000000000FE +:10B25000000000000000000000C0019090A08820C5 +:10B26000C101909090040404000000000000000060 +:10B2700000000000000000000000000001000000CD +:10B2800000000000000000000000000000000000BE +:10B2900000000000000000000000000000000000AE +:10B2A000000000000000000000000000000000009E +:10B2B000008000000000800000800080028080800C +:10B2C000000000000000000000000000000000007E +:10B2D00000000000000000000000008003808000EB +:10B2E0000000A011808080858085000000000000A3 +:10B2F000000000000000000000000000000040000E +:10B30000000000000000000000000000000000003D +:10B31000000000000000000000000000000000002D +:10B32000000000000000000000000000000000001D +:10B3300000000000800380108000800000A00080DA +:10B34000800000000000000000000000000000007D +:10B35000000000000000000000000000A000C1008C +:10B360008991C1001080C140851189000000000052 +:10B3700000000000000000000000000000090000C4 +:10B380000009008000000000000000000000000034 +:10B3900000000000000000000000000000000000AD +:10B3A000000000000000000000000000000000009D +:10B3B00000000000840008A0A00908C010000404D8 +:10B3C000A084C09000000000000000000000000009 +:10B3D0000000000000000000000000000000080065 +:10B3E0009000A09111409190020140019000000056 +:10B3F000000000000000000000000000000000004D +:10B4000000880000000800000000000000000000AC +:10B41000000000000000000000000000000000002C +:10B42000000000000000000000000000000000001C +:10B4300000000000000088040004000421C0C020B7 +:10B44000880400C0828800000000000000000000A6 +:10B4500000000000000000000000000000000000EC +:10B4600002100009840189899001004191040510AE +:10B4700000000000000000000000000000000000CC +:10B4800000000400080000000000000000000000B0 +:10B4900000000000000000000000000000000000AC +:10B4A000000000000000000000000000000000009C +:10B4B0000000000000000000000000000000098003 +:10B4C000808080000000C0800000000000000000BC +:10B4D000000000000000000000000000000000006C +:10B4E000000000A000898020A1918010038388853E +:10B4F0001102000000000000000000000000000039 +:10B5000000000900000080000900000000000000A9 +:10B51000000000000000000000000000000000002B +:10B52000000000000000000000000000000000001B +:10B530000000000000000000000000000084008007 +:10B540000000000400A08000800000000000000057 +:10B5500000000000000000000000000000000000EB +:10B560000000000000900000008080119100919187 +:10B57000858085030000000000000000000000003E +:10B5800000000000000000090000000000000000B2 +:10B5900000000000000000000000000000000000AB +:10B5A000000000000000000000000000000000009B +:10B5B0000000000000000000000000009000A083D8 +:10B5C000A0080800880108880402040000000000A8 +:10B5D000000000000000000000000000000000006B +:10B5E000000000000000844000884008A001900096 +:10B5F000834104040401000000000000000000007A +:10B60000000000000000000000000000000000003A +:10B61000000000000000000000000000000000002A +:10B62000000000000000000000000000000000001A +:10B63000000000000000000000000000000000000A +:10B64000000007000000008100E00701600000002A +:10B6500000000000000000000000000000000000EA +:10B660000000000000000000810000E00700000072 +:10B67000000000E007008200000000000000000061 +:10B680000000000000000000000000E007000000D3 +:10B6900000000000000000000000000000000000AA +:10B6A000000000000000000000000000000000009A +:10B6B000000000000000000000000000000000008A +:10B6C0006FFC60FC00013C3C7F734F43F63FF6305B +:10B6D000000000000000000000000000000000006A +:10B6E00000000000000000000000181808083030BA +:10B6F0000000FFC3FCC06666666600000000000034 +:10B700000000000000000000000000000000000039 +:10B710000000000000000000000000000000000029 +:10B720000000000000000000000000000000000019 +:10B730000000000000000000000000000000000009 +:10B7400000006F0C600C000100007C704C40063F54 +:10B7500006300000000000000000000000000000B3 +:10B760000000000000000000000000001818080899 +:10B77000000000003F033C00FFF000F0000000006C +:10B7800000000000000000000000000000000000B9 +:10B7900000000000000000000000000000000000A9 :10B7A0000000000000000000000000000000000099 :10B7B0000000000000000000000000000000000089 :10B7C0000000000000000000000000000000000079 @@ -146339,476 +146339,476 @@ :10B7E0000000000000000000000000000000000059 :10B7F0000000000000000000000000000000000049 :10B800000000000000000000000000000000000038 -:10B81000000000000000C0C00030FFF90F09BD812A -:10B820003D01068106000C0CFFFFFFFFFFFF00C378 -:10B8300000C3000000000000000400080008000031 -:10B840001000452EFE416000F090FFF09F90FBFB42 -:10B850000B0BFFFF000000006606FF9F0B0B6B6BDE -:10B8600000FF0CF3666669690C0CF3F3CFFFCF9908 -:10B8700034CB34CBFF660099609F66993C3CC3C3D0 -:10B88000009FFF60FF09FF09F0F00FF000CFFF30CD -:10B8900003FC0FF05A5A3A3AC0C00030F3F30303E6 -:10B8A00081BD013D9F819F000C0C0099F0F0F0F0EC -:10B8B00000C300C300FF00FF0000000000089999CA -:10B8C00000000000452EFE4199FF00660F009F908A -:10B8D000FBFB0B0BFF00FF0000002406BD9F6B0B62 -:10B8E0006B0B00FF0CF3666666660000FFFF30001E -:10B8F000306634CB34CB0000FFFF609F6699181888 -:10B90000E7E7009FFF6000F600F60F0F0F0F00CF74 -:10B91000FF3003FC0FF05A5A3A3A00610009001157 -:10B92000000000614006001D00000061000E000DD7 -:10B9300000018061000E001D00000061000E000D7E -:10B94000000080610006000D000080610004000915 -:10B9500000000061000FC0090000000000613E0E01 -:10B96000001D000040618006002D1002406180062D -:10B97000002D100240618006002D100240618006FB -:10B98000002D100240618006002D100240618006EB -:10B99000002D100240618006002D10021414FD3DA0 -:10B9A0000C0FFAFAF0F0F06000000AFF000000004F -:10B9B000303030300000F700000050000000F0FF91 -:10B9C000FF380000000080C00000140CF0B0F03020 -:10B9D000FA50FA50000000000000FFFF00000000D5 -:10B9E000F100033F00002828000841FFD7000000B5 -:10B9F000000041F1EBFB00000000400000000000EF -:10BA00000000EAEAEAFF000000000F3CAFBE0000C1 -:10BA10000000A0E1FFFF00000000C0AAFFFF141417 -:10BA2000C10100030A0AF0F0F070083C0AFF0000B0 -:10BA30000000303030300000D7005500000000001A -:10BA4000F1FF000000000000C0C00000D7CFF0F1FF -:10BA5000F0F3D2D2505000000000000000000000BF -:10BA60000000FD00033FFFFF28282000D76969146C -:10BA70000000000000F0AAFA000000000000000032 -:10BA800000000000404040FF00000000003CAABE53 -:10BA900000000000A0E1A0E100000000C0AAC0AAD0 -:10BAA0002E242E24A8ADADAD40C20082003000305F -:10BAB000000000003C3C00003000131341504100E6 -:10BAC000FEFEEAEA41C300004100C300F300FF00AC -:10BAD0003C303C3FFFD7FFD20000000000000000D8 -:10BAE000000000000000FF0FF000FFBF0000AA3CB4 -:10BAF000AAC3000000000CAAF0AA00000000000089 -:10BB000000003D3D3D3D3C3CFCFC000000000FAA18 -:10BB10003FBE3D3DBF3DA0BCA0BC0000000000F00A -:10BB20003CFCAEA40E04080D080850FA55FF003086 -:10BB30000030000000003C3C00003000D3D3C3FFC5 -:10BB4000C30F0000000055FF00000100C300D30038 -:10BB5000FF00AAAAAAAA28002D00000000000000E9 -:10BB60000000000000000000FF0FF000FFDF0000F9 -:10BB7000AA3CAAC30000000000AA00AA000000001E -:10BB80000000000005FF0505AA00FAF00000000013 -:10BB900000AA3CBE0505AF05A0BCAFBF0000000079 -:10BBA000AAF0BEFC0400080005004010400005009B -:10BBB0002000018020032000200520832000A00910 -:10BBC000C005C000200089002080C00200100120B4 -:10BBD0004120892088008409851000042010838575 -:10BBE0000905008400032010210388108910000338 -:10BBF0004000210420808885400441054003000066 -:10BC000088042085020985008803890088100102C4 -:10BC100001000100209085108808210021050209FB -:10BC2000200020000285C002800088C000010000C2 -:10BC3000880000A004100000000080000002000046 -:10BC4000000000000000000040000010200140A0A3 -:10BC500040A1400140010000000040002000090018 -:10BC60002020880000050000000108820000080173 -:10BC700000000000400000202002000088000000BA -:10BC80000000000000100000040000000400008517 -:10BC9000400104004000002008000000840004006F -:10BCA000000000000000041000040010000000006C -:10BCB00000040000000900040040402100030003CC -:10BCC00084100040822000080000001001100104D0 -:10BCD0000003080540000003821000100009000066 -:10BCE00000001020001090100000000882050000E5 -:10BCF000000400090840010201C000040009088492 -:10BD000000040003001000040010004000050010B3 -:10BD10000102000800400008002000040083002009 -:10BD200000020000001000090000118800850008D2 -:10BD3000008200C0000000040000000480C002C0B7 -:10BD4000008400000008040000000008050008A0AE -:10BD5000028420840008808800400004410800829A -:10BD600000840084004100080409000000040088E9 -:10BD70000008008400000508040904200040200891 -:10BD800000100084000800080940058800880010A1 -:10BD90000008088541C00508058440010000001026 -:10BDA0000085000940084188040800000041004067 -:10BDB00000C0000000020008000304410008042144 -:10BDC00000034010000800400010020500030008B6 -:10BDD00000839041000000000010000900080002EC -:10BDE00000000208884008410041C14100000000F5 -:10BDF0000008204100022110001001102140000322 -:10BE000000100008000800030041001001000010AD -:10BE100004030003050200059000004101000041F9 -:10BE20000021000500200121004000A100000000C9 -:10BE300011100002218400A0008200A0911000A037 -:10BE400080C008108008000021000000830820A0A6 -:10BE50000808400200A02140088400C00040000003 -:10BE600008A0008210A02108808400840400000043 -:10BE70000382000000400082880100A1040084C009 -:10BE8000000041004184009003104100410840003F -:10BE9000080883080300C0410300000041004082FD -:10BEA0000000008408000001020441A00302030016 -:10BEB0000000080900410811081000031000821159 -:10BEC00001020421C0004000001108090800090017 -:10BED000C003000888000800080088850805008065 -:10BEE000100500410800080000000800084000009C -:10BEF0000000040000410405404008109104821134 -:10BF000000030805C000C011821182000200000079 -:10BF1000A01082210402020008028202A004C000D4 -:10BF2000A000822110020041000082000004821063 -:10BF300008090008008200002000850100C00210EE -:10BF400000882090891000080008004005042100A6 -:10BF50000200000000001000A0888500051000A06D -:10BF60000002001010840000A10411A00000008352 -:10BF700008000000A000410088402000C0A12082ED -:10BF800021A0008880C002040820218400C000880D -:10BF9000009000C1008289000084039109410900DA -:10BFA000000000C0000000100010004000840000ED -:10BFB0001140400400410003002000100808400424 -:10BFC00040401000A0210408010082000040111030 -:10BFD0008200C18000C000080008001000000002BC -:10BFE0000040000810021140830882100000204029 -:10BFF00010050010000000000010000208020840B8 -:10C000008240042004200010A000820540050100A9 -:10C01000080000000040A0400000090040C10003EB -:10C020000840100300400005004008080021A1213D -:10C0300000000000001000A0000400C1000880847F -:10C040004010000911084100808204000000418274 -:10C05000408402080802000210400000001009821B -:10C0600000010208001021000208080000840000FE -:10C07000800800000001000000000000000100092D -:10C08000800803108301820103000804000083A0DC -:10C090004000001000000001000003004000A10269 -:10C0A00003A04188008400840800000003002100F0 -:10C0B00040000000030010C000050009001000113E -:10C0C00008108821008088210021822140008400FE -:10C0D000000200009003900040411040834182081C -:10C0E00040C0404100401005404000400040400337 -:10C0F0000240001040020090000008029041202100 -:10C1000040401010204100400441000510049004FC -:10C1100084110821900040414041000008000420A3 -:10C12000040884100041080240110421084100C1A4 -:10C130000002000400082003000809000088000035 -:10C1400000001100000000100000080000A0000026 -:10C15000002000080000000020000010110008006E -:10C160000000A0200010000440080800000403881C -:10C17000002000000000209020200000021100821A -:10C18000000011021104809000000288009000005D -:10C1900040000320000420000004A0001104020459 -:10C1A0008000118400000300000080400908029014 -:10C1B00020042020218808000000000010A000A01A -:10C1C0009004C00000A000900008000002850082DA -:10C1D00000840002C084840804088804C11002217D -:10C1E00000C0048240004103C0830102C000A100DE -:10C1F0000200C0000341828820418804000000C082 -:10C2000001C10088820800040800048900041100AC -:10C2100001039088C0400288004190110082030011 -:10C2200000904000C08211020090A088020104002A -:10C23000A002040082A040000101080008018080E3 -:10C24000000000000000008000800000000080115D -:10C250000003099000038000000000800080A1849A -:10C2600000C000048009800940210085200580006D -:10C2700008000000000088A009210010000900004B -:10C280002005212100890084008980058982000021 -:10C2900002090388004100040340218400020020B9 -:10C2A000A1000000000080008820419000C18002B1 -:10C2B0008200218091008000004008108040804072 -:10C2C00041000309C0900080800900040080000044 -:10C2D0004100040540910000800080850084000337 -:10C2E000040010098280410320800000A04011C09A -:10C2F0000500030003002100090011108384A0033E -:10C300000000410404039190A111098040038000C2 -:10C3100089830300882020800300000000080002B9 -:10C3200000000200A0C08500210008000411831055 -:10C33000C000890004094180210010008000110024 -:10C3400021000000A100A12088A0880110008284A3 -:10C35000A0A000C0001001A1008208A0404090A051 -:10C36000900103848200A0A0000101C00004050028 -:10C3700000A185000100010001C004842000A0A0EC -:10C38000200100000000C001A04009820008000157 -:10C39000020090910000030000A08820000090415E -:10C3A0000001A00021002009A00085020000020079 -:10C3B000A0029000020001000084011001001000A2 -:10C3C00010000100C00000880211001104000010DC -:10C3D00000881000004101020483A0020808001137 -:10C3E000000582C08409008400A182C00089850004 -:10C3F000A0054000001000C000410088400100017D -:10C400000301C1C000000220008800101010408805 -:10C41000010390010000C0C000A1008200A002A0A2 -:10C4200000100001900890840004109001A0000802 -:10C43000010800400083009100A10020004000217D -:10C440000004854001C180000000008200820000DD -:10C45000008000000000008240C100210085808033 -:10C4600000400084004080880800050280100040E1 -:10C470000841848211000084002000880010800898 -:10C480001003A02111020000000511000005008426 -:10C490008000028284210000800505A0080300823C -:10C4A00000401105050200A0890000C000040940F9 -:10C4B00000C040830589009000040083000402202E -:10C4C000000820C1051004088000000200000002DE -:10C4D0008004000900800000A182210204000040C5 -:10C4E0001000A0110380108010A0031000809100A4 -:10C4F00040001085A00000400009008000000002FC -:10C500002182210982008311000009808004080033 -:10C5100080400082022090808820800000800000FF -:10C520000002000000000080000000000004008005 -:10C530000040801180110000004100800002800056 -:10C540008002000000000000000240040400880493 -:10C55000C00008000202884000000903A000C000DB -:10C560001000A000028811082088A003828888405B -:10C570004000110002108588020100000004000044 -:10C5800000014103C0040900040000008804080001 -:10C5900001041001001101219090050108A0020280 -:10C5A000004000000200100090080000841000828B -:10C5B000A08400000882100088004001101088113B -:10C5C0009000080000400090000000000000000003 -:10C5D000070041000000000007000000000000E02C -:10C5E0000700000000000000000042000000000002 -:10C5F00000004200000000000700420000000000B0 -:10C6000000004200000000E0070000000000000001 -:10C61000000007000000008100E0070000000000AB -:10C6200000000000600000000000000000000000AA -:10C6300000000700000A00000000070000120000D0 -:10C6400000E007000000000000000000000020A241 -:10C65000FFFFAA00FFFF000A00000F000F00E8E83C -:10C66000E8E880F08FFF0000F5D5FFC3FBC3000CA6 -:10C6700000080FC300AA0C00CFFFAAC3AAC3000082 -:10C680000000FCAB0CFB0000C3435555000000004C -:10C690000000696900C3003C0F0F0F0F30303030CD -:10C6A000FF00AAAAFFC3FFC3000000005151505071 -:10C6B000F0F0F0F00838FFFFC3AAC3AAC000E0A062 -:10C6C0005F1CF5347D7D7D7D0000000014F4FFFFCC -:10C6D0000082FFFFAA00FAF00F0F00000F000F000A -:10C6E000E8E8EBE880F08FFF000075553C0038006B -:10C6F000000000000FC3FFAA0C00CFFFAAC3AAC30B -:10C700000000000000000000000003435555FFFF3B -:10C71000000000412869C0C0003CF3F3F3F330305F -:10C720003030FFFFAAAAA0A0F5F5F000000051519B -:10C7300050500000F0F0CBFBFFFFF3AAC3AAFFFFAD -:10C74000E0A05F43F5C178287D7D0000000014F46F -:10C7500000F0F000F0FF00F00FFFFFFFF000FF140B -:10C76000FF00D7F014F0000000005404540408083F -:10C770000B0B0000EAEA070007000F2B0F2B0055F8 -:10C78000005500000000141414140F0F3F2F05AFC4 -:10C790003C3C0000FFFFFFFFF0F0FFFFF0F0000067 -:10C7A0000000FF0000FF00FFFFFFFFFF0000000090 -:10C7B0000F0F0F0F003C003C000000000F0FFF00A8 -:10C7C000FFF00F00003C003CBEBEBEBE00000000FB -:10C7D00000AF00AFFF00FFFF0FFF0FFFF555F000A8 -:10C7E000FF0CFF0CD7F014F00000000055550000BE -:10C7F000000C030F000028EB070707070F2B0F2B78 -:10C80000FF55FF5500000000141414140F0F1F0FE4 -:10C8100005AF3C3C00001405000500FF00FFC0C050 -:10C82000000000005500FFC0FFC05F5FFFFF100069 -:10C830005050FFFF000000000000FBAAFAAA0F0FF3 -:10C84000FF00FFF00F00003C003CBEBEBEBE00007B -:10C85000000000AF00AF0061000E000D000080007E -:10C8600000080010000000610E0B000500000061D0 -:10C870003006000D000000614006000D0000006160 -:10C88000000E000D000000610006000D0001806137 -:10C89000000C0009000000008061000E000D000087 -:10C8A000806100390009000000610006000D0000F1 -:10C8B00000613006000D000005614A0E050D00A064 -:10C8C00080610006000D00000061000F00050000FF -:10C8D00000610006001D0000000000005555FF002B -:10C8E00000000000000000000A0FFAFFFFF0CFC0B8 -:10C8F00000383838FF05FA0041414141FFC300C309 -:10C900005FA0A05A8CCE8CCE00000000EF2CC70494 -:10C910007828287D41007D000000F0F0F0F0C3C3CE -:10C920003C003CAF3CAFAFA0AFA000000000AFA008 -:10C93000BFBC00000000C0FFEAFF000000000F00C5 -:10C940000A0000000000C3AAF3FA00000000BE3C89 -:10C95000BE3C00000000F151A1010000000055554F -:10C96000FF0000000000000000000A0FFAFFFFF0C7 -:10C97000CFC000282828FF05FA0055550055FFC3F1 -:10C9800000C3AF00FAAF269D269D00000000000006 -:10C9900000003C3C3C3CF0F0F0F000000000FFFFE9 -:10C9A0003C003C003C053C05AFA0AFA000000000EF -:10C9B000A0A0BCBC00000000C000EAAA000000006B -:10C9C0000F000A000000000000AAF0FA00000000BA -:10C9D0000000F0F000000000FB5BAB0B000000006B -:10C9E000C3AAC3AA00000000000000001CFF1C1C1A -:10C9F000A0AAA0AA0000000000000000202C000057 -:10CA0000303C300020000000FF6900690000000099 -:10CA10001410000055555551820A0A0A0000000200 -:10CA2000AA2A0B0B0B00F5A0FFAA4D4D41410300B4 -:10CA30000101F0FAF0FA3F3C7F7C000000000000AA -:10CA4000000014FFF4FFF0F082C3A0A0A0FF0000DC -:10CA500000007130F3F33F3C7F7D41004141000015 -:10CA600000000FAA0FAA00000000000000001CFF39 -:10CA70001C1CBCBEBCBE0000000000000000202C3E -:10CA80003C3C3C3C3C0000000000FF6900690000A9 -:10CA900000001410000055505551820A8282000097 -:10CAA0000002AA2A03030300F5A055004D4D7D7D29 -:10CAB000030303033CBE00AA0F005F500000000008 -:10CAC000000000001400F4F0F0F0AAFFB4B4B4FFCA -:10CAD000000000003030F3F30F004F41C300C3C328 -:10CAE000880484100009C0000008200082090200A8 -:10CAF0002000000520052010200420002008888444 -:10CB00000000840900000409821004008810200439 -:10CB1000000988058809040540058403040802808B -:10CB2000000384090209000584100009C00884007C -:10CB3000200002050200000802100210041089887B -:10CB40002184880588058800040002100410040070 -:10CB5000200040050200000020052000C000200049 -:10CB6000040400002000000020000000000000007D -:10CB700000000400000004000400000000000001A8 -:10CB800000030000000000004100009000000000D1 -:10CB90000000000000400000000000000000000154 -:10CBA0000508000041000000000000000000000037 -:10CBB00000000082000000000000000000A000084B -:10CBC00020210821040000000000000000000000F7 -:10CBD00000000000000000000000040004C0040089 -:10CBE0000900000100000009000300100003000418 -:10CBF00000040004000300040010000400110008F9 -:10CC00000010009000000003004100040003020037 -:10CC10000041000000040010020000040040004039 -:10CC200000040003000000040004000900090004DF -:10CC3000004100040004000900090004000400048D -:10CC40000005000900100041000300050008000372 -:10CC50000041004100030004001000100003000523 -:10CC6000000400040010000800084000004000100C -:10CC7000008200C000100488020804A00000051013 -:10CC8000008400C0000800840284000802000084C0 -:10CC90000010000800080400008200840000000862 -:10CCA0000004008400840000000800080008000858 -:10CCB0000008000400C00084000000100088008408 -:10CCC0004008000400084008001000080010001090 -:10CCD0000084058200100008041000080084001081 -:10CCE000001000820008000800020003000000009D -:10CCF00000210008000800030000004100000000BF -:10CD00000008000200090003A00800100005000848 -:10CD10000008000800000000200200080040000099 -:10CD200082030008000920000000000320212010D9 -:10CD300000030003000800100008000500210002A5 -:10CD4000000500030008000300C0004000050003C8 -:10CD50001005000000210021002100030005004013 -:10CD60000040000800100003A04121820084000060 -:10CD70000002000000080000110800A008000300E5 -:10CD800003A041080082008209080382088400820F -:10CD90000010008408A00000008400100582090033 -:10CDA0000384030200A000848002000000A0008829 -:10CDB0004100000000000308051005020082000089 -:10CDC000001011C0050041000000000208C00082F0 -:10CDD000000000000002008221844100038421A0A1 -:10CDE0000000000010C041A000840000820000216B -:10CDF00008001000A000040008008400C005000422 -:10CE000040001004820082000440A00008090411C0 -:10CE100084404010880088000400001108000004CD -:10CE20000000080008108210080004000000824082 -:10CE300008100005820008000800C00000408802B9 -:10CE40004000C002080000000800000004000200CA -:10CE500000110009820000090840C00082000000A3 -:10CE6000040000000000A0412000A04182000084D6 -:10CE700000000090100000C00000210009A0022066 -:10CE8000008400900082000040020008000000883A -:10CE9000008840C00000001000041108200010A00D -:10CEA0001100208203100390000000C020840000C5 -:10CEB00040100084009000A040A000A0008403C0A7 -:10CEC0000008000400A0080800C000900040008492 -:10CED00021840040000808A00582008400C00410DE -:10CEE0000020000000000090020403000000110474 -:10CEF000001000404000A040004082008200A011CD -:10CF0000000084000008000000000000820800000B -:10CF1000101000408221A0000000C0410000A003CA -:10CF200000030000000800000010A00582080908A6 -:10CF30000000C005A0020000084082108810822175 -:10CF4000101000000000080000020000A0000021F6 -:10CF50000103C00000400005084100400008000037 -:10CF60000000000800001000000800000808000091 -:10CF7000000500001188000800C00000000000004B -:10CF80000010000000000000000000A020000208C7 -:10CF9000000000000008001000880010001000844D -:10CFA000021000820000008800080084028200A0B5 -:10CFB0004000000000000010008400840084008411 -:10CFC0000000000000002008001000080300038497 -:10CFD0000800100008000800000000000000000425 -:10CFE00008880090000000000008030011C00382C0 -:10CFF00000A0110008000000A004C004A02104212A -:10D0000020000800000000000800A00004400011FB -:10D0100000000800000020000000080482008205D3 -:10D02000082190000004042108108803000408214E -:10D030000000001000000003000390049009C004E9 -:10D040000441080800050004082100040003080941 -:10D05000000000000021000000048400000488108B -:10D0600082410008000508000802020384410040D4 -:10D0700000050000082100000000411000C0200051 -:10D080002010000020C00000000003040000000089 -:10D09000400200000000000000000010000000003E -:10D0A000008200080000208400840000000020208E -:10D0B000110420820000000009900900008202048F -:10D0C0004000020420202020001009880088200051 -:10D0D00000000000008800C00000001002900288DC -:10D0E000000000000000000202000000000000003C -:10D0F000008800C000A00000000000000000000147 -:10D100000000040000010120000000000020109039 -:10D11000000000000001000000000000000000000E -:10D120000000040000010102000001000002900460 -:10D1300000000000000100000000000000000000EE -:10D14000000000000000000001040000C000000416 -:10D15000C08201008200000000000000000000000A -:10D16000000000000000000000000100010000A01D -:10D1700000000000040000000000000000000000AB -:10D180000020000000000003208000410300000098 -:10D19000000000000000004100000000000000004E -:10D1A0000040000080000010038000031000008099 -:10D1B00000800000000000410000000000000000AE -:10D1C0000000001000000000000520804003A100C6 -:10D1D000008080804100000000410000000000004D -:10D1E00000000000000000000000000020042000FB -:10D1F00000000000000080000000000000000500AA -:10D20000000000000000030000004000030485004F -:10D2100000020800800000000005800900000300F3 -:10D220000000000000000300000040000200850034 -:10D230000000400080000000000580410000000068 -:10D240000300000000000000400000000400100087 -:10D250008300000003008000000000820003000043 -:10D26000400000000000000000000000000002007C -:10D2700003800000800080000000004000030000E8 -:10D28000000000000000000000000000000040015D -:10D2900082C0000101A0400000000000C0000000AA -:10D2A00000000000000000000100000000C041007C -:10D2B00082C0000001A0400000000000C00100008A -:10D2C000000000000000000000000100000000005D -:10D2D00021000440000001004000000000C10801DE -:10D2E000000001000000000000000000000000003D -:10D2F0000500C12000C008844000000000010001BA -:10D30000000000000000000000000000000082019A -:10D3100000820000C10000000000000000010000C9 -:10D32000000000000000000000000000000182007A -:10D3300000200000000000000000000000010000CC -:10D3400000000000000000000000000000000001DC -:10D350008201000400000300000000000000000043 +:10B810000000000000000000000000000000000028 +:10B820000000000000000000000000000000000018 +:10B830000000000000000000000000000000000008 +:10B840000000000000004C4F7C7FF3F30303073738 +:10B85000C7F766000F0F00000000000000000000A6 +:10B8600000000000000000000000000000000000D8 +:10B87000437F30F0000000003EFE3EFEFF00FF0070 +:10B8800000000000000000000000000000000000B8 +:10B8900000000000000000000000000000000000A8 +:10B8A0000000000000000000000000000000000098 +:10B8B0000000000000000000000000000000000088 +:10B8C0000000000000000000404370739F909F90B4 +:10B8D0000434C4F467000C0C0000000000000000F9 +:10B8E0000000000000000000000000000000000058 +:10B8F0000000407C30F00000000402C202C2FF2CB5 +:10B90000FFEF000000000000000000000000000049 +:10B910000000000000000000000000000000000027 +:10B920000000000000000000000000000000000017 +:10B930000000000000000000000000000000000007 +:10B94000000000000000000000000000300800902F +:10B9500000A000613037000D00080000000000006A +:10B9600000000000000000000000000000000000D7 +:10B970000000000080612006C0010001006100009D +:10B9800000010000000000000000000000000000B6 +:10B990000000000005610A0F050D00A00000000076 +:10B9A0000000000000000000000000000000000097 +:10B9B0000000000000000000000000000000000087 +:10B9C0000000000000000000000000000000000077 +:10B9D0000000000000000000000000000000000067 +:10B9E0000000000000000000000000000000000057 +:10B9F0000000000000000000000028FFC7C7D717A4 +:10BA0000D414E828E8EB000000000000000000006B +:10BA10000000000000000000000000000000000026 +:10BA20000000000000000000000000000000000016 +:10BA30000000000000000000000000000000000006 +:10BA400000000000000000000000000000000000F6 +:10BA500000000000000000000000000000000000E6 +:10BA600000000000000000000000000000000000D6 +:10BA700000000000000000000000000028FFD7D7F1 +:10BA8000D717D414E828E8EB0000000000000000FD +:10BA900000000000000000000000000000000000A6 +:10BAA0000000000000000000000000000000000096 +:10BAB0000000000000000000000000000000000086 +:10BAC0000000000000000000000000000000000076 +:10BAD0000000000000000000000000000000000066 +:10BAE0000000000000000000000000000000000056 +:10BAF0000000000000000000000000000000003C0A +:10BB0000D8D8D7D71717E828E8EB000000000000C6 +:10BB10000000000000000000000000000000000025 +:10BB20000000000000000000000000000000000015 +:10BB30000000000000000000000000000000000005 +:10BB400000000000000000000000000000000000F5 +:10BB500000000000000000000000000000000000E5 +:10BB600000000000000000000000000000000000D5 +:10BB700000000000000000000000000000000000C5 +:10BB8000003CD0D0D4D41414E828E8EB0000000026 +:10BB900000000000000000000000000000000000A5 +:10BBA0000000000000000000000000000000000095 +:10BBB0000000000000000000000001000000000084 +:10BBC0000080008000000000000001000000000074 +:10BBD000000000000000000000000009000000005C +:10BBE00000000000000100000000000084000000D0 +:10BBF0000000000000000000000000000000000045 +:10BC00000000000000000000000000000000000034 +:10BC10000000000000000000000000000000000024 +:10BC20000000000000000000000000000000000014 +:10BC30000000000000000000000000000400000000 +:10BC400000000010001000000000000008000000CC +:10BC500000000000000000000000000000000000E4 +:10BC600000000000000000000000000000000000D4 +:10BC700000000000000000000000000000000000C4 +:10BC800000000000000000000000000000000000B4 +:10BC900000000000000000000000000000000000A4 +:10BCA0000000000000000000000000000000000094 +:10BCB0000000010000001100000000000100001061 +:10BCC0000000000000000000000000000000004034 +:10BCD00000410000010000000200004000000000E0 +:10BCE0000000000000000000000000000000000054 +:10BCF00000000009000000000040000000000000FB +:10BD000000400008000000000000000000000040AB +:10BD1000000000050000000000000000020000001C +:10BD20000000001000000000000000020000000001 +:10BD300000000000200000408208000000004000D9 +:10BD400000400000000000000000000000000000B3 +:10BD500000000000000008001108000000000000C2 +:10BD600000000000000000000000000000000000D3 +:10BD700000000000000000000000000800000000BB +:10BD800000000000100000000000000000000000A3 +:10BD9000000000000000000000000008000000009B +:10BDA0000000000800880000000000000000000003 +:10BDB0000000000000000000000001000000000082 +:10BDC00008000000000000000000002182000000C8 +:10BDD00000000000004101000041C105000000001A +:10BDE0000100000000000000000000000000000052 +:10BDF0000000000000000040000000000000000003 +:10BE00000000000000000000000000000000000032 +:10BE10000000000000000000000000000000000022 +:10BE200000000000000000100000000000400000C2 +:10BE300000000000000000000000000004000000FE +:10BE40000000800000000000000000000000000072 +:10BE500000000000000000002000000004000000BE +:10BE60001100040000840000000000000000000039 +:10BE700000000000000000000000000000000000C2 +:10BE800003000000000003000000000000000000AC +:10BE9000000800000000000000000000000000A0FA +:10BEA0000000000000000000000000000000000092 +:10BEB0000000000000000000200001100408032121 +:10BEC000C00800884000C004C0004002A0008208F2 +:10BED00082020002A00500080810014100100105BF +:10BEE000012000000000010000000000000000022E +:10BEF0000000020000000000400000000000000000 +:10BF00000000000000000000000000000000000031 +:10BF10000000000000000000000000000000000021 +:10BF200000000000000000000000004000000000D1 +:10BF300040020000000000000000800008018001B5 +:10BF4000A000210121098000000100A08001000063 +:10BF500000010001000100880001800104000001CF +:10BF60002000200141000020040000A0000000008B +:10BF700000000000000000000000000000000000C1 +:10BF800000000000000000000000000800080000A1 +:10BF90000000000000400000000000000000000061 +:10BFA00000000000200000880000000002400000A7 +:10BFB000000200000000000000000000100010005F +:10BFC00010082000A008100300002005A0051000A4 +:10BFD0000000C02140110005820482040803C00053 +:10BFE0004000A041000021800080004100000000CE +:10BFF0000000000000000000000000000000000041 +:10C000000000000000000000000000000000000030 +:10C010000000000000000000000000000000000020 +:10C020000000000000000000000000000000000010 +:10C0300000009000000000000000000000008000F0 +:10C04000800080018000000180000000800000006E +:10C0500000000000000080000000000100018000DE +:10C060000000800000001100A0200004000000007B +:10C0700000041000000000000000000000000000AC +:10C0800000000000000000000000000000000000B0 +:10C0900000C0000000C00000000000000000080810 +:10C0A0000000000000000000000000000000000090 +:10C0B00000000084000000000000000000000000FC +:10C0C000200020002000110010051008A009200405 +:10C0D00000050000C000200440020041A004C0058B +:10C0E000820082100841A04100040004000000C04A +:10C0F0000000000000000040000000000000000000 +:10C10000000000000000000000000000000000002F +:10C11000000000000000000000000000000000001F +:10C12000000000000000000000000000000000000F +:10C1300000009000000088000000000000000000E7 +:10C140000000800080008000900880008041020094 +:10C15000000100000000000000008001000000015C +:10C16000000000000000800000000000000000004F +:10C1700000040000000000000000000000000000BB +:10C180000000000000C000000000000000000000EF +:10C190000000000800000000020000000000000095 +:10C1A0000000000000000000000000000004008803 +:10C1B0000000000800C000000000000000000000B7 +:10C1C0000000000091C10008881010030002050261 +:10C1D00010028202C04001A04002040800030121B5 +:10C1E0000009000800A001900404C0400241019031 +:10C1F00040040404000000000000000000000000F3 +:10C20000000000000000000000000000000000002E +:10C21000000000000000000000000000000000001E +:10C22000000000000000000000000000000000000E +:10C2300000000000000000000000000000000000FE +:10C2400000000000000091C1119104898009008064 +:10C25000898080808080C08003008000808000848E +:10C26000034000840085008003808080000080916E +:10C270004185008380830000000000000000000072 +:10C2800000000000000000000000000000000000AE +:10C29000000000000000000000000000000000009E +:10C2A000000000000000000000000000000000008E +:10C2B000000000000000000000000000000000007E +:10C2C0000000000000000000918011009100C110EA +:10C2D000090011008400C100C1802110809103C1B8 +:10C2E0001100A111A000008309008009800089A02D +:10C2F000038085411110854100000000000000000E +:10C30000000000000000000000000000000000002D +:10C31000000000000000000000000000000000001D +:10C32000000000000000000000000000000000000D +:10C3300000000000000000000000000000000000FD +:10C340000000000000000000000008900400410010 +:10C35000910084008800A0009100880805C1A00910 +:10C360001089A00209C01190048840408200A000FA +:10C37000900420C0020091419001000000000000E4 +:10C3800000000000000000000000000000000000AD +:10C39000000000000000000000000000000000009D +:10C3A000000000000000000000000000000000008D +:10C3B000000000000000000000000000000000007D +:10C3C000000000000000000000000000080500A0C0 +:10C3D00010900901400400A104010105401000096A +:10C3E000401091C190010100000191014000000343 +:10C3F00004030508040400409090828300000000BC +:10C40000000000000000000000000000000000002C +:10C41000000000000000000000000000000000001C +:10C42000000000000000000000000000000000000C +:10C4300000000000000000000000000000000000FC +:10C440000000000000000000000000000000800963 +:10C4500000801090894180910090800511C1800971 +:10C4600000880080899100212003102009110040DC +:10C47000008380A191C08083218540C1809100000C +:10C4800000000000000000000000000000000000AC +:10C49000000000000000000000000000000000009C +:10C4A000000000000000000000000000000000008C +:10C4B000000000000000000000000000000000007C +:10C4C000000000000000000000000000000000006C +:10C4D00041911100418000000084000000000041F3 +:10C4E000C18585004100820441A121008580404131 +:10C4F00083801180400085408585854085800303C9 +:10C50000000000000000000000000000000000002B +:10C51000000000000000000000000000000000001B +:10C52000000000000000000000000000000000000B +:10C5300000000000000000000000000000000000FB +:10C5400000000000000000000000000000000000EB +:10C5500000000140010000840000008800A00004E9 +:10C560000001110810000284080089A11004088449 +:10C57000880104044140004008009004024040400B +:10C58000400100000000000000000000000000006A +:10C59000000000000000000000000000000000009B +:10C5A000000000000000000000000000000000008B +:10C5B000000000000000000000000000000000007B +:10C5C000000000000000000000000000000000006B +:10C5D00000000000000000E007000000818100E092 +:10C5E00007000006000000E000008406000000E0F4 +:10C5F00000000006000000E007000000000000E06E +:10C600000700608100000000000000000000000042 +:10C61000000000000000000000000000000000001A +:10C62000000000000000000000000000000000000A +:10C6300000000000000000000000000000000000FA +:10C6400000000000000000000000000000000000EA +:10C6500000000000000000000000A0AFA0AF00003C +:10C66000000000000000B0BCB3BFF5C0F000000F38 +:10C67000F0FF000000003C3C00FF00F0FFF0002055 +:10C680000020000F282F0000000000000000000024 +:10C69000000000000000000000000000000000009A +:10C6A000000000000000000000000000000000008A +:10C6B000000000000000000000000000000000007A +:10C6C000000000000000000000000000000000006A +:10C6D000000000000000000000000000303F303F7C +:10C6E00000000000C0C00000808C838FF5CFF000F8 +:10C6F000ACACACAC00000000000000FF00F000F0AB +:10C700000020FFFF000F000F0000000000000000ED +:10C710000000000000000000000000000000000019 +:10C720000000000000000000000000000000000009 +:10C7300000000000000000000000000000000000F9 +:10C7400000000000000000000000000000000000E9 +:10C7500000000000000000000000050000503F0342 +:10C760003F0300000000CFEF0CAEFD3DCD0DC3C375 +:10C77000F3C3DFD31F13BFB5BAB0FF00C300FF0080 +:10C7800040000404FF0404FF040400000000000053 +:10C790000000000000000000000000000000000099 +:10C7A0000000000000000000000000000000000089 +:10C7B0000000000000000000000000000000000079 +:10C7C0000000000000000000000000000000000069 +:10C7D0000000000000000000000000000400001045 +:10C7E000FFFF0000000000C0CFCF0C0CF131C101F1 +:10C7F00000000000DCD01C101F151A10FF0AC30037 +:10C80000FFFF40000000FF0000FF000000000000EC +:10C810000000000000000000000000000000000018 +:10C820000000000000000000000000000000000008 +:10C8300000000000000000000000000000000000F8 +:10C8400000000000000000000000000000000000E8 +:10C8500000000000000000000000000000000000D8 +:10C8600050010000000000600036C00800000061B8 +:10C8700030060091000000613006000100000061F8 +:10C880000004000900000061000000010000000039 +:10C890000000000000000000000000000000000098 +:10C8A0000000000000000000000000000000000088 +:10C8B0000000000000000000000000000000000078 +:10C8C0000000000000000000000000000000000068 +:10C8D0000000000000000000000000000000000058 +:10C8E0005555FF00AAAA3C3C000000004F4FB04F36 +:10C8F0007000000DE8E8E8E8C040000030F330F3D5 +:10C90000FF82F000F0F000F00E3E0C3C00003F3FD4 +:10C910000000000000000000000000000000000017 +:10C920000000000000000000000000000000000007 +:10C9300000000000000000000000000000000000F7 +:10C9400000000000000000000000000000000000E7 +:10C9500000000000000000000000000000000000D7 +:10C960000000F5F5FFF0FFAAFF3C00000000B0B0AA +:10C9700000FF000000000000FFFF0000C0400000BA +:10C98000FFFFFF00F000F0F200F20C3C0C3C00282E +:10C990003F3F000000000000000000000000000019 +:10C9A0000000000000000000000000000000000087 +:10C9B0000000000000000000000000000000000077 +:10C9C0000000000000000000000000000000000067 +:10C9D0000000000000000000000000000000000057 +:10C9E000000000000F0F3C3C00FF3C3C000000003A +:10C9F000030328E8000000000C0CFCFC0000FF0012 +:10CA0000ACACACAC00000000AAAAAAAA3CFF101073 +:10CA1000283F003F00000000000000000000000070 +:10CA20000000000000000000000000000000000006 +:10CA300000000000000000000000000000000000F6 +:10CA400000000000000000000000000000000000E6 +:10CA500000000000000000000000000000000000D6 +:10CA60000000000000000FFF3CFF0FFF3F3F0000F1 +:10CA70000000FCFC28E800000000ACACACAC0000FE +:10CA8000FF800CFC0CFC0000000000003C3C3CFF64 +:10CA90000000003F003F0000000000000000000018 +:10CAA0000000000000000000000000000000000086 +:10CAB0000000000000000000000000000000000076 +:10CAC0000000000000000000000000000000000066 +:10CAD0000000000000000000000000000000000056 +:10CAE0000000000000000000000000000000000541 +:10CAF000000384000000000500000000000000802A +:10CB0000000000008800000000000000000000009D +:10CB10000000000000000000000000000000010014 +:10CB200000030000000020000000000000000000E2 +:10CB300000000000000000000000000000000000F5 +:10CB40000080000000002000000004000000000041 +:10CB500000000000000000000000000000000000D5 +:10CB60000080000000000000000000000000000045 +:10CB70000000000000000000000000840000000031 +:10CB800000040000000000000000000000000000A1 +:10CB90000000000000000000000000000000000095 +:10CBA0002000000000000000000000000000000065 +:10CBB0000000000000000000000000000000000075 +:10CBC0000000000400000000000000000000000061 +:10CBD0000000000000000000000000000000000055 +:10CBE0000000000400000000000000000000000041 +:10CBF0000000000000000000000000000000000035 +:10CC00000000000000000000000000000000000024 +:10CC10000000000000000000000000000000000014 +:10CC20000000000000000000000000000000000004 +:10CC300000000000000000000000000000000000F4 +:10CC400000000000000000000000000000000000E4 +:10CC500000000000000000000000000000000000D4 +:10CC60000000000000410000000000000000000083 +:10CC700000000000000000000000000000000000B4 +:10CC800000000000000000000000000000000000A4 +:10CC90000000000000000000000000000000000094 +:10CCA000000000000008000000080000000800006C +:10CCB00000080084000000000000000800080008D0 +:10CCC000000000840000008400080000000800004C +:10CCD0000084008800000000000000080008000830 +:10CCE0000000000800840084000000000000000034 +:10CCF0000000000000000000000000000000000034 +:10CD000000000000000000080008002100210021B0 +:10CD1000000800082000000000004008200800086B +:10CD200090000000840000050000002100000021A8 +:10CD3000002100000008000500410003002100055B +:10CD4000002100000008000000090021000300038A +:10CD5000002100000005000000210021000000006B +:10CD60000021000800000000000800000000000092 +:10CD700000000000000000000000000000000010A3 +:10CD800000000000410000000000008400000010CE +:10CD900005000500008800C0000000000000000041 +:10CDA0000000000000000000000000000000000083 +:10CDB0000000000000000000000000000000000073 +:10CDC0000000000000000000000000000000000063 +:10CDD0000000000000000000000000000000000053 +:10CDE0000000000000000000000000000000000043 +:10CDF0000000000000000000000000000000000033 +:10CE0000880000000000000000000000000000009A +:10CE10000000000000000000000000000000000012 +:10CE20000000000000000000000000000001000001 +:10CE300000000000000000000000000000000000F2 +:10CE4000A000000000000000000000000000000042 +:10CE50008200000000000000000000000000000050 +:10CE60000000000000004000A000000000000000E2 +:10CE700000000000000000000000110000000000A1 +:10CE80000000000000004000000000000000000062 +:10CE90000000000000000000000000000000100082 +:10CEA000400020000000000000020082000000009E +:10CEB0000000000000000000000000000000000072 +:10CEC00000000000000000000000008800000000DA +:10CED0000000000000100000000000000000000042 +:10CEE0000000000000000000000000000000000042 +:10CEF0000000000000000000000000000000000032 +:10CF00000000000090000000000000210000000070 +:10CF10000000000000000000000000000000000011 +:10CF200000000000000000000000002100000021BF +:10CF300000000000002100000000000000000000D0 +:10CF400000000000000000000000000000000000E1 +:10CF50000008000000000000000000080041000080 +:10CF600000000000000000000000000000000000C1 +:10CF70000021000000000000000000000000000090 +:10CF8000008411000002000000002000000000C02A +:10CF90000000098805042100090000880000000045 +:10CFA0000000000008040000000000000000000075 +:10CFB0000000000000000000000000000000000071 +:10CFC0000000000000000000000000000000000061 +:10CFD0000000000000000000000000000000000051 +:10CFE0000000000000000000000000000000000041 +:10CFF00000C00000000000000000000088000000E9 +:10D000000000000000000000000000020021840079 +:10D01000840500000000000000080000004000003F +:10D0200000000000000000000000000000100008E8 +:10D0300000210000000000000000000000050000CA +:10D0400088000000002100000000000400000041F2 +:10D0500000210008000000000000000000000000A7 +:10D060000000000000000000200400000000000597 +:10D070008800002100000000000000000000000007 +:10D0800000C0008800000000000000000000000058 +:10D09000000200000504000021000000200005003F +:10D0A0000000000020000090000000044004400048 +:10D0B000400000000002000000000000000000002E +:10D0C0000000000000000000000000000000000060 +:10D0D0000000000000000000000000000000000050 +:10D0E0000000000000000000000000000000000040 +:10D0F0000000000000000000000000000000000030 +:10D1000001000000000000000000000000C000005E +:10D11000000000000000000000000000000000000F +:10D1200000000000000000000100000000020000FC +:10D1300000000000000000000000000000000000EF +:10D1400000000000000000000000010000000008D6 +:10D1500000000000A000000000000000000000002F +:10D1600000000000000000000000010000000008B6 +:10D1700000000000000000000000000000000000AF +:10D1800000004100000000000000000202000080DA +:10D19000000000000000000000000000000000008F +:10D1A0000000000000000000000041091100000024 +:10D1B000000000000000000000000000000000006F +:10D1C00000000000000000000000000040092100F5 +:10D1D00000800000000000000000000000000000CF +:10D1E000000000000000000000000000404121009D +:10D1F00000800000000000000000000000000300AC +:10D2000000000080000080000000000009002000F5 +:10D210000080000000000000000000410000040049 +:10D2200000000000000000000000000004002100D9 +:10D2300000808000000000000000001100000000DD +:10D2400010000000000000000000000000000400CA +:10D2500082800000000000000000000000030000C9 +:10D2600010000000000000000000000000000900A5 +:10D2700082000040000000000000000000040000E8 +:10D280000100000000C000002000000000000200BB +:10D2900085040008C000020000000000000100003A +:10D2A000010000000000000000000000000003007A +:10D2B00002880008100002000000000000000000CA +:10D2C000000000000000000000000000000000005E +:10D2D00003001004008402000200000000000001AE +:10D2E000000000000000000000000000000000003E +:10D2F000880010400085C00002000000000000010E +:10D3000000000000C000000000000000000000005D +:10D310000004000002000000000000000000000007 +:10D3200000000000000000000000000000000000FD +:10D3300000040000C0000000000000000000000029 +:10D3400000000000000000000000000000000000DD +:10D3500000000010000000000000000000000000BD :10D3600000000000000000000000000000000000BD -:10D3700000000004000004000100000000000000A4 -:10D38000000000000000000000000000000000029B -:10D3900000100000000090000000000000000041AC -:10D3A0000000000000000000000000000000000875 -:10D3B0000004000000001100000000000000004117 +:10D3700000000004000000000000000000000000A9 +:10D38000000000000000800000000000000000001D +:10D39000000000800000000000000000000000000D +:10D3A000000000000000000000000000000000007D +:10D3B00000000000000080000000000000000000ED :10D3C000000000000000000000000000000000005D -:10D3D0000020800200800000C1000000000000006A -:10D3E00000410000000000000000000000000000FC -:10D3F000000000000080000000002000000000008D -:10D40000000000000000800500830000000880008C -:10D41000C100000000808000000500000000002026 -:10D42000000003040003800000C10000000480002D -:10D430004100000000C100000005000000000000E5 -:10D440000000054000000003800000C10000000053 -:10D450000040C000000000C100000040000000418A -:10D460000000000002400040800000C100000000F9 -:10D4700000000000000000C180000040000000002B -:10D480000000000000000000040000830000000015 -:10D490000200040000000004020000000000000080 -:10D4A0000001000001840000200000400000000096 -:10D4B0000200820000000005820000000000000061 -:10D4C000000000000091000000002000004000006B -:10D4D0000000820103000000004120000000000065 -:10D4E00000010000000001A1000120000040000038 -:10D4F0000000000000000000004182000001000068 -:10D50000000000000000000000000000000000001B -:10D510000000000000000000841200E0070000424C -:10D5200000000000000000000000000000000000FB -:10D530000000000000000000811200E00700480029 -:10D54000000000000000000A0000000000000000D1 -:10D5500000000000000000000000811200E0070051 -:10D5600048420000000000004842000000000000A7 +:10D3D000000000000000000000000000000000004D +:10D3E000000000000000000000000000000000003D +:10D3F000000000000000000000000000000000002D +:10D40000000000000000800000C1000000000000DB +:10D41000000000000041800000110000000000003A +:10D420000000000000000004008300000000000075 +:10D43000000000000000800000100000000000005C +:10D440000000000000000010800000C1000000008B +:10D4500000000000000000418000001000000000FB +:10D460000000000000000010800000C1000000006B +:10D470000000000000000041000000040000000067 +:10D480000000000000000000400000C1000000009B +:10D49000000000000000001140000000000000003B +:10D4A0000000000000000000840100830000000074 +:10D4B0000000000000000010080000000000000054 +:10D4C00000000000000000000000200000400000FC +:10D4D000000000000000000000050800000000003F +:10D4E00000000000000000000000200000400000DC +:10D4F0000000000000000000009184000000000017 +:10D5000000000000000000000000000000000042D9 +:10D510000000000000004800810000E0000048001A +:10D5200000000000000000420000000000000000B9 +:10D530000000000000000000840000E00000A042A5 +:10D5400000000000000000000000000000000000DB +:10D5500000000000000000000000810000E000006A +:10D560004800000000000000000000000000000073 :10D5700000000000000000000000810000E000004A :10D580004800000000000000000000000000000053 :10D59000000000000000000000000000000000008B @@ -146826,210 +146826,210 @@ :10D6500000000000000000000000000000000000CA :10D6600000000000000000000000000000000000BA :10D6700000000000000000000000000000000000AA -:10D680000000000000000000000000000000257BFA +:10D680000000000000000000000000000000747BAB :10D69000000000000000000000000000000000008A -:10D6A000000000000000000000000000DEA4257B58 +:10D6A000000000000000000000000000DE2E747B7F :10D6B000000000000000000000000000000000006A -:10D6C000000000000000000000000000DEA40000D8 -:10D6D000757B00000000000000000000000000005A -:10D6E0000000000000000000000000000000DEAEAE +:10D6C000000000000000000000000000DE2E00004E +:10D6D000747B00000000000000000000000000005B +:10D6E0000000000000000000000000000000DE2E2E :10D6F000747B00000000000000000000000000003B :10D700000000000000000000000000000000DE2E0D -:10D71000612603400000000000000230A00000006D -:10D72000000000000C4000000000000002C0648601 -:10D73000612603400000000000000230A00000004D -:10D74000000000000C4000000000000002C06486E1 -:10D750000000612603400000000000000230A0002D +:10D71000615603400000000000000231E0000000FC +:10D72000000000000C4000000000000002C06A86FB +:10D73000615603400000000000000230A00000001D +:10D74000000000000C4000000000000002C06A86DB +:10D750000000615603400000000000000230A000FD :10D760000000000000000C4000000000000002C0AB -:10D770006486615603400000000000000230A000F3 +:10D770006A86615603400000000000000230A000ED :10D780000000000000000C4000000000000002C08B -:10D790006A862080880004102000881089082000F4 -:10D7A00040092088202088202000040440004108EF -:10D7B00021840104890020002100020588048800DA -:10D7C00008002010201020802009888821102008BF -:10D7D000208500034020050920A02110200900A079 -:10D7E0008280400020092000C01000102009041091 -:10D7F00020092104200988082004200420000410A6 -:10D800002004000021A02080218041A020004010A1 -:10D8100000002003000200000000000000002000C3 -:10D82000000080000010030105010000C10000009D -:10D8300088000402200020A000A020A0800000009A -:10D8400004008000000000000010000020024000E2 -:10D8500000000002000000010400001108000000A8 -:10D8600000210020801000000000000000010000E6 -:10D87000800041000400000004000000000041009E -:10D8800080000000200040114110080288030000C1 -:10D89000000004004000011000000003000000032D -:10D8A0000041000400C000800041001000840040DE -:10D8B0000040008900000090000001040105000400 -:10D8C0000005000300050003000000090005000931 -:10D8D0000002000800400000001000000009008461 -:10D8E0000000001000090104000400040004000905 -:10D8F00000040000001000200005000900080110CD -:10D900000004000400050109000400000088000470 -:10D910000004004000100000400800C00004001097 -:10D9200000040800001000020010408400040020E1 -:10D9300020082008001000102004200820082004DF -:10D940002040001003100208008800C000080010EA -:10D95000004000090004000000000088008400046A -:10D9600000020010000440400808000800080908F0 -:10D970000000004009820984090900C000C00000BD -:10D980000289000800080008020811880008000247 -:10D9900000200084008409084108000300004003BF -:10D9A000000300084010400000C00000000500080F -:10D9B0000002002184210103000000800041202199 -:10D9C000000000030040004000410008004000212A -:10D9D000004000210040002100080000004000033A -:10D9E00001210103002100080008001001000010BF -:10D9F00040059021000300080005000000020040DF -:10DA000000000021C0050085001000210008000270 -:10DA1000000000020010A0080040001000000000FC -:10DA2000800821080082C100A1820010008200103D -:10DA30000000000100840000044003000004001006 -:10DA40008000000021000884000000000082000027 -:10DA500000000084091000C0000000000000000861 -:10DA600008840400040803A00002418200000800AA -:10DA70000000800000A0000800000940001008001D -:10DA800000000000000000000020000008000084EA -:10DA900021A10000001141000900000000404000E9 -:10DAA000080040000000200000009080200082005C -:10DAB000838005830500C000C000840000000800CA -:10DAC000000008008200C000200041000800820021 -:10DAD0000200A0008500040008090002A000000068 -:10DAE00000008200820040002000080004000800BE -:10DAF0004000C000000000008200C00004000400DC -:10DB000000000810000000000000000004000200F7 -:10DB10000800C000C0000400040008004000040029 -:10DB20000000200088000404090000000310A00881 -:10DB300000000420842084104110000403000082AF -:10DB4000800005008384038403A00000409000103F -:10DB500000000090000040840000800000840090DD -:10DB6000000000820010000080840088008285840C -:10DB70000004001000A00040000400100084000811 -:10DB80002002038220A00010001003000084004047 -:10DB900021008040000402A01108000000828004DF -:10DBA00002840040C02140008210A021A040400813 -:10DBB00000050040040808210008C0000003000020 -:10DBC000201000884003821082040041C000000041 -:10DBD0000040022101008840000200050200001000 -:10DBE00000100000040200400010820200080841FA -:10DBF00008100003C00300410841000800080800A5 -:10DC00000000C00300408200004100080002400301 -:10DC10008202828300838200001000000000A000C6 -:10DC2000080082030000000880A00000000000003F -:10DC3000C10000100000A0002100208400000000AE -:10DC4000080000A1001000000000000100002100F9 -:10DC5000000000C0890002002000000200008000D7 -:10DC60000000004000008000000000821000100052 -:10DC7000000000000000000000000000081000008C -:10DC80000000000000000000000000000000000094 -:10DC90000000000000020020000000000200000060 -:10DCA0000000000000C004002010C0100041C005AA -:10DCB0002100020000002020C141018041910004A8 -:10DCC00000108880004082030204000482080040A3 -:10DCD0000008084100400005040804000400081082 -:10DCE0000021001000410000C01100089004202114 -:10DCF00000410005000000410000001100104090AC -:10DD0000001108200020A0200010820588032011A7 -:10DD100088008221820504020010020400040080B1 -:10DD200000080011100500080000000000000000BD -:10DD3000080088000000000000040488042004207B -:10DD40004000000000100000000000040321030058 -:10DD500003080000000821004100200003000340E8 -:10DD600000000000008300820000000005000000A9 -:10DD7000000000001100000004000000000000018D -:10DD8000000200000401000000000008000411006F -:10DD900021A020002000000000000000000000047E -:10DDA0000020000004C000900904000000011000E1 -:10DDB0000001080800040211908200040088040099 -:10DDC0009090A000000400000400090184000500F8 -:10DDD0004001000800881000008800000000820058 -:10DDE000000010A1018384040083000001040100ED -:10DDF0004002081004A0014040C0C0A0008400C040 -:10DE00009010C0848840000400200410000200A08C -:10DE10000008000801020010100400104040000932 -:10DE200000880404000000000000000040042121DC -:10DE3000801100408080098904850004008005006D -:10DE40000000808000000080000080001104092193 -:10DE5000830300080380400000000000000002006F -:10DE60000000000080A0032000100020000002003D -:10DE700040008000800090800300800000000000CF -:10DE800040000080000000800000000000000080D2 -:10DE9000000000800080028021000080000080805F -:10DEA000008300808085000000000000000000006A -:10DEB000100002000821000000000400A000800003 -:10DEC00080110010800020009100A000008041001F -:10DED00002000511020240008300C1002100200061 -:10DEE00090008011100090800002C08210A10000FC -:10DEF00080008000000000000000804000000080E2 -:10DF000000008010898009000000808280908000DD -:10DF1000000000030080008000000010008000006E -:10DF200004001003890400A103000400050002009E -:10DF30000088000000000101A0020000000009A00C -:10DF400004009001880090004000040084000490C8 -:10DF5000108408004001400000000800A0000300F9 -:10DF6000840041000800C10008400200A1C19009DE -:10DF70000000080008000010A000000010010000D0 -:10DF80000202A0008200A0C0408400000808A01186 -:10DF90000400200090C100101008000000040004DC -:10DFA000000021100400040100A100000100010094 -:10DFB000009000000100A100000002050000A01078 -:10DFC00010034004008890900202400402029084F2 -:10DFD000008800090140400200A10010001000016B -:10DFE0001001000100C01001008202000000A0C06A -:10DFF000A1880000828200C00202A00588410002C0 -:10E00000C0841140020000000085000840020000AA -:10E0100004400802C00000000000100008000000DA -:10E020001000C00000850008000100A000000000F2 -:10E0300000000000000908419002001000040241A5 -:10E04000800000918089000480C180C18084000428 -:10E05000808011800084028202820091000300838C -:10E060000005114000080009002100008011404116 -:10E070008040C0400000000500090002000200844A -:10E080000008009021098002000900200280800021 -:10E090000000008080008000000000008000004040 -:10E0A0000021000980050004008500210480000093 -:10E0B00000000000000040000400040010002100E7 -:10E0C000040000001111000400848080000000059D -:10E0D00080090000804108401180050010100008F0 -:10E0E000008000800041008000000000001021003E -:10E0F000898083802002000080028084000000006C -:10E1000000020020808080008000808080008000ED -:10E1100000098082000000000000809180008000E3 -:10E12000800280098000800082058084A18009002F -:10E13000000000000000000201A001000100010039 -:10E14000010001A000C00000000100419002000099 -:10E150008420200002C00801058401200004C001C1 -:10E16000000900A0004000010040008800A000015C -:10E170008308041004844100000040012021A00213 -:10E18000C00082008411044004000800A0C084C0C4 -:10E19000A000100020400020C000A00004020820C1 -:10E1A0001000400004000800020005000203854042 -:10E1B000820000900000000000000000000000004D -:10E1C0000000000000E00000000000110000070057 -:10E1D00000000000000007000012000000E0000046 -:10E1E0000000000000000000000600000000000029 -:10E1F00000000000000000000021000000000000FE -:10E200000700000000000000070000000000000000 -:10E210000000428200000000070000000000000033 -:10E220000000810000000000070000120000000054 -:10E2300007000000000000000000000000000000D7 -:10E240000000000000000000FF66BD240000000088 -:10E2500000000C3C3C3CFC3CFFFFB920C3C3000069 -:10E260003CFF3C000000000003030303000000002B -:10E270000F0F00007FFF7EFFFF00999900003C0018 -:10E2800000363CC3000300FF0CCF0081FFFF80E697 -:10E2900000000000FF0066FF6600FF7E007E406415 -:10E2A000D9FD000000003C3C0F00000000003C00D5 -:10E2B0003C0004041C1C00000000000000000000E2 -:10E2C000000000000000000000009900BD24F0F0F4 -:10E2D000F0F000000C003C3CFC3CFFFF0000C3C31E -:10E2E000000036FF360000000000030303030000B7 -:10E2F00000000F0F0000FFFFFFFFFF0099990000D3 -:10E300003C0000363CC000000F0F0CCF0003FFFFA5 -:10E3100099FF000000000000663C663CFF4200429E -:10E320004266DBFF000000006666666600000000D3 -:10E33000003C00F024243C3C0000000000000000F1 +:10D790006A86000000000000000000000100000098 +:10D7A0000000000000000000000000000000000079 +:10D7B0000080000000000000008000000000010068 +:10D7C00000000000000000000080000000000000D9 +:10D7D00000800001000000000000000000000000C8 +:10D7E0000000000000000000000000000008000031 +:10D7F0000000000000000000000000000000000029 +:10D800000000000000000000000000000000000018 +:10D8100000000000000000000000000000002000E8 +:10D8200000000000000000000000000000000000F8 +:10D830000000004000000000000000400000000068 +:10D840002000000000000000000000400000000078 +:10D850000000004000000000000000000000000088 +:10D8600000000000000000000000000000000000B8 +:10D8700000000000000000000000000000000000A8 +:10D880000000000000000000000000000000000098 +:10D890000000000000000000000000000000000088 +:10D8A0000000000000000000000000000010000068 +:10D8B0000000000000000000001000000000000058 +:10D8C0000000000000000040000000000000000018 +:10D8D0000000000000100000000000000000001028 +:10D8E000000000000000000000000009001000001F +:10D8F0000000000000000000000000000000000028 +:10D900000000000000000000000000000000000017 +:10D9100000000040000000000000000000000010B7 +:10D9200000000000000000000000004000080000AF +:10D9300000000000000000000000000000000000E7 +:10D94000000000000000000000000000008800004F +:10D9500000000000000000000000000000000000C7 +:10D9600000000008000000000000000000000000AF +:10D97000000000000000008800000000000000001F +:10D98000000000080000000000000000000000008F +:10D99000000000C0000000000000000000000000C7 +:10D9A0000000000000000000000000000100010075 +:10D9B000010000050121000200000000000000003D +:10D9C00000000008000500000000000000800100C9 +:10D9D00000050000008020000000000000000000A2 +:10D9E0000000000000100000000000000000000027 +:10D9F0000000000000210000000000000000000006 +:10DA000000000000002100000000000000000000F5 +:10DA100000000000004100000000000000000000C5 +:10DA200000000000000000000000000000002000D6 +:10DA30000400200000A020A00000218203000000BC +:10DA400000000000000000000000000000000004D2 +:10DA50002000000000A0000480080000000000007A +:10DA600000000000000000A0000000000000000016 +:10DA70000000000000000008000000C000000000DE +:10DA800000000000000000A00000000000000000F6 +:10DA90000000000000000000000000000000000086 +:10DAA0000000000000000000000000002000200036 +:10DAB00004000000C000C0000000A00020008200A0 +:10DAC0004000C0001000200020002000C0008200A4 +:10DAD0000000000000000000000000000000000046 +:10DAE0000000000000000000000000000000000036 +:10DAF0000000000000000000000000000000000026 +:10DB00000000000000000000000000000000000015 +:10DB100000000000020000000000000000002000E3 +:10DB20000000000000000000000000000000800075 +:10DB30000000C100000000002110002000000000D3 +:10DB400000008000000080000000008421880300A5 +:10DB500000000000000000000002000000000000C3 +:10DB600000000000000000000000000000000000B5 +:10DB700000000000000000000000000000000000A5 +:10DB80000000000000000000000000000000000095 +:10DB90000000000000000000000000000000000085 +:10DBA00020000000000000000000200000004000F5 +:10DBB00000000000C00300800405A005A021880229 +:10DBC000A000C0000000C0041100200020A0A0A000 +:10DBD00020002000C0410000C00000102000000014 +:10DBE0000004000000000000000000000000000031 +:10DBF0000000000000000000000000000000000025 +:10DC00000000000000000000000000000000000014 +:10DC10000000000000000000000000000000000004 +:10DC200000000000000000000000000080840000F0 +:10DC300080000000000000000004800000000000E0 +:10DC400000000000000000880501A00080008005A1 +:10DC50000021800080880082000000000000800019 +:10DC600000000001000000000000000000000000B3 +:10DC70000000000000000000000000000000001094 +:10DC80000000000000000000000000000000001084 +:10DC90000000000000002100000000000000000063 +:10DCA0000000000000000000000000000000000074 +:10DCB0002000000000002004200040002004200577 +:10DCC000A0040000002020042104040400212000FE +:10DCD0002004C000C08420008240820000000011A7 +:10DCE00000000020002000000000000000000000F4 +:10DCF0000000000000000000000000000000000024 +:10DD00000000000000000000000000000000000013 +:10DD100004000000000000000000000000000000FF +:10DD200000000000000000000000000000000000F3 +:10DD300000000000000000000000200000002000A3 +:10DD4000A100040021002000200440004120200008 +:10DD50000000000000000020210000C0038421001A +:10DD60000000000000004100000000000000000072 +:10DD700000000000000000000000000000000000A3 +:10DD80000000000000000000000000000000000093 +:10DD90000000000000000000000000000000000083 +:10DDA0000000000000000000000000000000000073 +:10DDB000000000010000C000000008208508C0101D +:10DDC0000010019000400008000800A001400084FD +:10DDD00000021105900884020083009001C040A059 +:10DDE000000801040182048200A00000000000007D +:10DDF0000000000000000000000000000000000023 +:10DE00000000000000000000000000000000000012 +:10DE10000000000000000000000000000000000002 +:10DE200000000000000000000000000000000000F2 +:10DE3000000000000011111100100000808004801B +:10DE4000808000801109008900C100800500030066 +:10DE5000000000009184858580C100A04005032159 +:10DE60000005008511C0030580410040000000004E +:10DE700000000000000000000000000000000000A2 +:10DE80000000000000000000000000000000000092 +:10DE90000000000000000000000000000000000082 +:10DEA0000000000000000000000000000000000072 +:10DEB0000000000000000000020004000411418086 +:10DEC0008580911180000300091011A00508110040 +:10DED00021A1200000C141008500851183A04000E0 +:10DEE00003C0118040C10380052111404040000063 +:10DEF0000000000000000000000000000000000022 +:10DF00000000000000000000000000000000000011 +:10DF10000000000000000000000000000000000001 +:10DF200000000000000000000000000000000000F1 +:10DF300000000000000000000000000001000100DF +:10DF40008408029082019000000000C0019100004E +:10DF500000840108019000894020020084019003A0 +:10DF60000040000501020005004000400182004021 +:10DF700000000000000000000000000000000000A1 +:10DF80000000000000000000000000000000000091 +:10DF90000000000000000000000000000000000081 +:10DFA0000000000000000000000000000000000071 +:10DFB000000000000000000000000000000100015F +:10DFC00001008840000882900111C000000001009B +:10DFD000400002010000100140019004000300A075 +:10DFE0000083080001004000C1012001000004007E +:10DFF000840100000000000000000000000000009C +:10E000000000000000000000000000000000000010 +:10E010000000000000000000000000000000000000 +:10E0200000000000000000000000000000000000F0 +:10E0300000000000000000000000000000090203D2 +:10E04000112111090083008500C1049180000200A4 +:10E0500040001000800400218020001100832190E6 +:10E060000311009180400804400511110020210592 +:10E0700085410011000000000000000000000000C9 +:10E080000000000000000000000000000000000090 +:10E090000000000000000000000000000000000080 +:10E0A0000000000000000000000000000000000070 +:10E0B000000000000000000000000000000011004F +:10E0C00011000200400008840591118003110980AD +:10E0D0008911900083034102852103000903038312 +:10E0E00005C004000340C1809100050005050282BF +:10E0F00085008500034000000000000000000000D3 +:10E10000000000000000000000000000000000000F +:10E1100000000000000000000000000000000000FF +:10E1200000000000000000000000000000000000EF +:10E1300000000000000000000000000000000000DF +:10E1400000100100000001000141000900840100ED +:10E1500090048201080009008985400084000201C2 +:10E160000002000201A00000104083008800C000EF +:10E170009141020002008400000000000000000045 +:10E18000000000000000000000000000000000008F +:10E19000000000000000000000000000000000007F +:10E1A000000000000000000000000000000000006F +:10E1B000000000000000000000000000000000005F +:10E1C0000000000000E000000000000000E0070088 +:10E1D0000021000000E000006000000000E00000FE +:10E1E0000006000000E007000000000000E0000062 +:10E1F0000012000000E0000000000000000000002D +:10E20000000000000000000000000000000000000E +:10E2100000000000000000000000000000000000FE +:10E2200000000000000000000000000000000000EE +:10E2300000000000000000000000000000000000DE +:10E2400000000000000000000000000000000000CE +:10E25000BFB02F207F4F7C4C00000000FEF2CEC2EA +:10E260000000000000000000F636C606FF3CC300B8 +:10E2700000000000F7B57634000000000000000048 +:10E28000000000000000000000000000000000008E +:10E29000000000000000000000000000000000007E +:10E2A000000000000000000000000000000000006E +:10E2B000000000000000000000000000000000005E +:10E2C000000000000000000000000000000000004E +:10E2D0000000BFB02F2073437040000000003E32AA +:10E2E0000E020000000000000000F636C606E4E45E +:10E2F000E4E400000000D391521000000000000090 +:10E30000000000000000000000000000000000000D +:10E3100000000000000000000000000000000000FD +:10E3200000000000000000000000000000000000ED +:10E3300000000000000000000000000000000000DD :10E3400000000000000000000000000000000000CD :10E3500000000000000000000000000000000000BD :10E3600000000000000000000000000000000000AD @@ -147038,364 +147038,364 @@ :10E39000000000000000000000000000000000007D :10E3A000000000000000000000000000000000006D :10E3B000000000000000000000000000000000005D -:10E3C00000000000000000000000F0F0C399FFFF13 -:10E3D00000000000009938182000FF00FF003CFCFE -:10E3E0003CFC000000000F0F3C0FE724E7E7F0F0D3 -:10E3F000F0F90000000000003C992626666689803E -:10E40000898000000C0C0C0C06060606F634C200CF -:10E4100009090000F0F03C00F3E3030300FF00FFF4 -:10E4200009F90FFFE6E68080000000000F7E0FFF75 -:10E4300000000000F0F0FFC31824182400000000C2 +:10E3C000000000000000000000000000000000004D +:10E3D0000000003FFF3F00039F9F707C737F0000A1 +:10E3E000000043734F7F00000000303F3F3F0000BC +:10E3F000BDBD253D677F0000000029B92FBF00008B +:10E40000000000000000000000000000000000000C +:10E4100000000000000000000000000000000000FC +:10E4200000000000000000000000000000000000EC +:10E4300000000000000000000000000000000000DC :10E4400000000000000000000000000000000000CC -:10E450007E7E0000000042422808200000000000EC -:10E4600000F03CFC000000000F0F660FE724E7E718 -:10E47000000000000000000000003939200060406A -:10E480000909999900002020B0B018180909F6343C -:10E49000F60000000000F0F0FFC3FFEF0F0FBCBC60 -:10E4A0003C3C00F006F6FF00FF00404070700F4259 -:10E4B0000FC300000000F0F0FFC30924092400008E -:10E4C00000000000000000610006000D0000006177 -:10E4D0000005000900000061003E000D0000006121 -:10E4E000400E000D0000006100010001000000610D -:10E4F0000006001D000000610006001D0001006113 -:10E500000006000D000100000061000E000D00007B -:10E510000061000E000D000000610006000D00000B -:10E5200000000E08000000000000300000000000A5 -:10E5300000613E0E000D00008061000E000D000025 -:10E5400000610006000D0000FCBEFFBE141454550F -:10E55000280028823C3C3F3F0000000000000000F3 -:10E56000000000000C0C0C0CBEBE141480F3C1F3B0 -:10E5700000000000BFBF3FFF0000000000000000DF -:10E58000FA0050000AAA8AAA00000000000014281D -:10E5900000280000000040EAFFFF0000000000D754 -:10E5A00000D7000000000000000000000000000094 -:10E5B000000000000000C0AAFFFF00000000FC00F7 -:10E5C000FC0000000000000000000C1400141414F3 -:10E5D00055552800288228282F2F00000000FDFD17 -:10E5E000FD3D000000000C0C0C0CA808A8088030B1 -:10E5F000C13000000000808000C000000000000169 -:10E600000001EA0040000A0A0A0A000000000000B7 -:10E61000502850280000000040EA40EA00000000B6 -:10E62000005F005F0000000000000000000000002C -:10E630000000000000000000C0AAC0AA08082828A6 -:10E64000FC00FC0000000000000000000000FFCB08 -:10E65000000000000AC30AC300FF55FF00000000CD -:10E660000000000000000000000000000F0F3C3C14 -:10E670000000F0F000000000383CFBFF000000004C -:10E6800000000000FB38CB084100414100000000C1 +:10E45000000000000030FF3000009F9F404C434F01 +:10E460000000000040704C7C00000000303F303065 +:10E470000030BDBD0119435B0000000020B026B68E +:10E48000000000000000000000000000000000008C +:10E49000000000000000000000000000000000007C +:10E4A000000000000000000000000000000000006C +:10E4B000000000000000000000000000000000005C +:10E4C00000000000000000000000000000000061EB +:10E4D000000000090000006100040001000000616C +:10E4E00030000005000000613006000100000061FE +:10E4F0000000000100000061300000010000006128 +:10E5000030000001000000000000000000000000DA +:10E5100000000000000000000000000000000000FB +:10E5200000000000000000000000000000000000EB +:10E5300000000000000000000000000000000000DB +:10E5400000000000000000000000000000000000CB +:10E550003C3CFF0000F000F15F3C0A3C00280F2F1C +:10E56000FF3C0F3C000000000000000030F330F3DF +:10E570000C3C0E3E004000F0FF00FF284040FFF042 +:10E58000507C003C00140F1F000000000000000041 +:10E59000000000000000000000000000000000007B +:10E5A000000000000000000000000000000000006B +:10E5B000000000000000000000000000000000005B +:10E5C000000000000000000000000000000000004B +:10E5D00000000F0FFF00F0F0F0F15F3C0A3C00007C +:10E5E0000F0F003C0F3C000000000D007000000009 +:10E5F000FFFF003C003C0040FFFFF000F000000087 +:10E60000FFF0003C003C00000F0F00000000000085 +:10E6100000000000000000000000000000000000FA +:10E6200000000000000000000000000000000000EA +:10E6300000000000000000000000000000000000DA +:10E6400000000000000000000000000000000000CA +:10E65000000000000FFF0F0000F00FFF000000009F +:10E66000ACFCACFCFF0F550F143F003F0000000056 +:10E67000ACACACAC0C0F000F0C2C0C2C5555505006 +:10E6800000FF00F0000F000F000F000F000000005F :10E69000000000000000000000000000000000007A -:10E6A000000000FF0000000000000000000000006B -:10E6B00000000000000000000000000000003C001E -:10E6C0003C00C3C0C3C00000000000000000000008 -:10E6D00000000000F0000AC30AC300FF55FF00005D -:10E6E0000000000000000000000001000100000028 -:10E6F000AF053CF0AAAA000000000004C3C7000058 -:10E70000000001010000FB38CB08C300C3C30000B8 +:10E6A000000000000000000000000000000000006A +:10E6B000000000000000000000000000000000005A +:10E6C000000000000000000000000000000000004A +:10E6D00000000000000055FF550000F000F00000B1 +:10E6E0000000AC0CAC0C000F550F000F000F000029 +:10E6F00000000CFC0CFC2C2F000F0CAE0C2C557DDC +:10E70000505080FF80F0141F000F000F282F0000D2 :10E7100000000000000000000000000000000000F9 -:10E720000000000000FF00000000000000000000EA +:10E7200000000000000000000000000000000000E9 :10E7300000000000000000000000000000000000D9 -:10E740003C003C00C3C0C3C000000000010000004A -:10E7500020000203C00004008803201084088409FC -:10E7600000090210000020102010020520092009D5 -:10E7700000000010850002900088401020008400F6 -:10E7800084000408C000201020002000201084090C -:10E790000003021002000204001001092008000515 -:10E7A000020088108810840020902010020520109C -:10E7B00020102080208021850010008300080200A6 -:10E7C0000490881020092080000088900300000039 -:10E7D00084000000000000000200000000000000B3 -:10E7E0000000020000000000000000000000000027 -:10E7F00000000300000020A00004040280000000CC -:10E8000000000000001000000000000000000000F8 -:10E8100002000000800080000000000002000000F4 -:10E820000000A00000000000000002020000000044 -:10E83000000000000210001008100000412000003D -:10E84000000000200000000000020000000408009A -:10E8500000000000000000000000000000000008B0 +:10E7400000000000000000000000000000000000C9 +:10E7500000000000000000000000000000000000B9 +:10E7600000000000000000000000000000000000A9 +:10E770000000000000000000000000000000000099 +:10E780000000000000800000000000000000000009 +:10E790000001000000000000000000000000000078 +:10E7A0000000000000000000000000000000000069 +:10E7B0000000000000000000000000000000000059 +:10E7C0000000000000000000000000000000000049 +:10E7D0000000000000000000000000000000000039 +:10E7E0000000000000000000000000000000000029 +:10E7F0000000050000000000000000000000000014 +:10E8000000000000000000200000000000000000E8 +:10E8100000000000000000000000000000000000F8 +:10E8200000000000000000000000000000000000E8 +:10E8300000000000000000000000000000000000D8 +:10E8400000000000000000000000000000000000C8 +:10E8500000000000000000000000000000000000B8 :10E8600000000000000000000000000000000000A8 -:10E870000000000000000080000000000000008098 -:10E8800000000000008000800000008000400000C8 -:10E8900000000000000000000000000000C00000B8 -:10E8A0000000004000000000000000000000000028 -:10E8B0000000000300030000000000000000000052 -:10E8C0000000000000400000000000000000000008 -:10E8D00000000000000000840008000000400084E8 -:10E8E0000088008800840008000800820008008476 -:10E8F0000082008400080088004000840008008432 -:10E9000000400008000000400040008400400089F2 -:10E91000000800000008000000C0008400C00002E1 -:10E92000000800080089000800840008000800842E -:10E9300000080088008800880000000800400040AF -:10E94000000800100008000800840008008800107B -:10E9500000080008000000820008001020210010BC -:10E96000000320400021000300400040002100215E -:10E9700000402040004000210040000000400040D6 -:10E9800000402003002100400003000500020003B6 -:10E990000008014100400000000000050041011096 -:10E9A0000040004000100000000500080041002168 -:10E9B00000080005000500050200010300020041F7 -:10E9C00000080020002104210005000300050010BC -:10E9D00001050002001000100021001000A000102E -:10E9E00000020008000100100002080308010810DE -:10E9F00000C000850803008300000001000000093A -:10EA0000008341010000000008110008000200110D -:10EA10000008001002A00085008400000000001023 -:10EA200002820001001100A0081000C0000000A038 -:10EA30000382038403C0000000008300081000105C -:10EA4000000200000311210080100000000800C037 -:10EA50000009081000100000000000008200000003 -:10EA6000090000000800000000000000C0000000D5 -:10EA7000040040800000400000000000040002008C -:10EA800004000800088008004080C08040000000AA -:10EA9000A080A0000200820082008200000004002A -:10EAA000A00008000900C00002009100C00008009A -:10EAB000080008000000020020000004010082009D -:10EAC0000000A000A0800400020000000800020076 -:10EAD0000000020082000200080000008200000026 -:10EAE0000800088200A0004000000000001000A004 -:10EAF0000000000080400000000000400084004052 -:10EB00008000000000A00002009000400002009081 -:10EB10000084004000848300000400002182000083 -:10EB200000C0000441C00200030083A00240004076 -:10EB3000098200840010000000A08382008304008A -:10EB400000000040001000020200000000100082DF -:10EB5000080000A0000008400900038400402100D4 -:10EB60000000000000030008081082038421000553 -:10EB700000030000A040C04082088400C010004094 -:10EB8000C008080808008200001000028403C04189 -:10EB900000100002A008A041A003C009C008022183 -:10EBA0000000C000C0089021C008000000410040E3 -:10EBB000081000000000C000004120002008822151 -:10EBC0000008002108030000C00000410800000008 -:10EBD0000041C005002100100000000000000800F6 -:10EBE00008100000200000C020C00000000011003C -:10EBF00020000000000000090001000000000000EB -:10EC000000010088008400000000000800080010D7 -:10EC100011000300088203C00300009000002000E0 -:10EC2000880000000000000000000000000000025A -:10EC3000000000000000210000000008800088A003 -:10EC40000000000003008000000000000000000041 -:10EC500000000000000000000000000008000000AC -:10EC600008000000000000050008008290214021FB -:10EC7000082000008200000000090004000040029B -:10EC8000400040110810040020000004000300218F -:10EC90004040400840210021C0400440A021021013 -:10ECA000A000821000008221C00001088221002102 -:10ECB000024000080040204100000041000300091C -:10ECC000C010200082A10040822100050000000049 -:10ECD0008204C00504000000002100210408000394 -:10ECE000044040000008000008000000004100004F +:10E870000000000000000000000000000000000098 +:10E880000000000000000000000000000000000088 +:10E890000000000000000000000000000000000078 +:10E8A0000000000000000000000000000000000068 +:10E8B0000000000000000000000000000000000058 +:10E8C0000000000000000000000000000000000048 +:10E8D0000000000000000008000000080000000820 +:10E8E00000080008000800000008000800080000F8 +:10E8F0000008004000080008000000400000004040 +:10E9000000820008000800000082000800400000AB +:10E9100000080000004000000008000000000000A7 +:10E920000000000000080008000000000040000097 +:10E93000000000080000000000400000000000008F +:10E9400000000000000800100000000000000000AF +:10E9500000000008000000000000000000000000AF +:10E9600000000000000000000000000000000000A7 +:10E9700000000000010000000000000020000080F6 +:10E980000000000000000000010004002000000062 +:10E990000000000000000000000000000000000077 +:10E9A0000000000000000000000000000000000067 +:10E9B0000000000000000000000000000000000057 +:10E9C0000000000000000000000000000000000047 +:10E9D0000000000000000000000000000000000037 +:10E9E0000000000000000000000000C000C00000A7 +:10E9F000000000000000040000000384000080C04C +:10EA000000040000000000000000040080008000FE +:10EA100000000000000000000000000000000000F6 +:10EA200000000000000000000000000000000000E6 +:10EA300000000000000000000000000000000000D6 +:10EA400000000000000000000000000000000000C6 +:10EA500000000000000000000000000000000000B6 +:10EA60000000000000000000008000009000000096 +:10EA70000000000000000000000090008200000084 +:10EA800090008880A000000000000000000000004E +:10EA90000000000000000000000000000000000076 +:10EAA0000000000000000000000000000000000066 +:10EAB0000000000000000000000000000000000056 +:10EAC0000000000000000000000000000000000046 +:10EAD0000000000000000000000000000000000036 +:10EAE0000000000000000000000000100000000016 +:10EAF0000000000000000000000000000000000016 +:10EB000000000000002000000000000000000000E5 +:10EB100000000040000000000000000000000000B5 +:10EB200000000000000000000000000000000000E5 +:10EB30000000000000000000000000400000000095 +:10EB400000000000000000000000000000000000C5 +:10EB50000000000000000000000000400000000075 +:10EB600000000000000000000000000000000000A5 +:10EB7000000000000000000000000500000001008F +:10EB8000A000058000C10000A000000000000000FF +:10EB90000000008000000180000000000000000074 +:10EBA0000000000000000000000000000000000065 +:10EBB0000000000000000000000000000000000055 +:10EBC0000000000000000000000000000000000045 +:10EBD0000000000000000000000000000000000035 +:10EBE0000000000000000000000000000000000025 +:10EBF0000000000000C000000000200084000000B1 +:10EC00000400000084040020000021000000000037 +:10EC10004100000000040084040421000000000002 +:10EC200000000000000000000000000000000000E4 +:10EC300000000000000000000000000000000000D4 +:10EC400000000000000000000000000000000000C4 +:10EC500000000000000000000000000000000000B4 +:10EC600000000000000000000100000000000000A3 +:10EC700000000000900000009000000090004000A4 +:10EC8000000000004000004100000009A011000049 +:10EC900000008200200000000000000000000000D2 +:10ECA000000900000000000000000000000000005B +:10ECB0000000000000000000000000000000000054 +:10ECC0000000000000000000000000000000000044 +:10ECD0000000000000000000000000000000000034 +:10ECE00000000000000000000420080000000000F8 :10ECF0000000000000000000000000000000000014 -:10ED00000008000000A0000000000000000000005B -:10ED100000000000000000000000000000010000F2 -:10ED20008000000000000000000000000200000061 -:10ED300000000001000000010000000000000000D1 -:10ED4000000000008000000400000000000000003F -:10ED50000000000000000000000000000000800033 -:10ED60000000000000000000040000000200040099 -:10ED70000000000000000000A0A000208990C0C09A -:10ED80004040002000848282028285A01108C002D7 -:10ED90004040834090A082021140A0840002A082E3 -:10EDA00004401002000410C0000003020802828820 -:10EDB0000402020400820040028800000000880073 -:10EDC00000009001010101019000C18820401088DD -:10EDD0000282022004820082100240000000000033 -:10EDE000040004A1000501C084C0820021000000CD -:10EDF000800000000000000000000000040010007F -:10EE00008000858000000000000083092111C0847B -:10EE10008084A0891005000900900980000000800E -:10EE20000080808000800080800000008980A180B8 -:10EE30008000808080801180000080000000100031 -:10EE4000000000008011030308118011210084805C -:10EE50008000008000008000008000008000000032 -:10EE600000008000009100210410800300000000D9 -:10EE700000000000000000008000000041000503C9 -:10EE80004040020080000083008200001080A190BA -:10EE900080801103800000C1008200908900C04181 -:10EEA00041051100800000C0000300800000000048 -:10EEB000809080800080050090054080A140000087 -:10EEC000000000000000418003008011911100004B -:10EED0000004002100008000800380000000020088 -:10EEE0004000A040020080000041800000100000AF -:10EEF000000000008800200000000800A000A00022 -:10EF0000A0209091919082008220821120201108EF -:10EF100005024040202140888202A041A0831000C9 -:10EF200040A0A0A01010040010C1404010820000BA -:10EF3000400010C0080440C00004A1100084C1407B -:10EF4000000000000000000000400100A00110408F -:10EF50009000A001408582000200080110100210FC -:10EF600041000100A000010008040401A0A0040069 -:10EF700000100010000500A00000000000000000CC -:10EF8000844000A18291C01104200020901083824F -:10EF9000214000044004C0C002050041400284C07A -:10EFA0008282000282820404048400021040104025 -:10EFB0000000884100208411041091030002080819 -:10EFC00004410000000000010000008801900100E1 -:10EFD000019102200008002082A0848200A0041079 -:10EFE000A0020020000400040020A0C001100004C2 -:10EFF000A02000890082008502910000000000002E -:10F0000000000385000400218084830000000000CC -:10F0100082804102028041918009A0880409808297 -:10F0200000090300008000008080890000808000CB -:10F0300010000000102000838003918941A000A0EF -:10F0400080C180040009001000040010000011803D -:10F0500005111191004000850002808500000080AC -:10F06000008000800000008000800000000003801D -:10F070001100890000000000008000000000000076 -:10F080000000000000008080008000090000008275 -:10F0900000000000210410209080900910050380DA -:10F0A00085802000808280898080000280008080AE -:10F0B0008080000000008003000900800000858837 -:10F0C0004000218005050000000000000000000550 -:10F0D0000341400003118000001000000000000008 -:10F0E0008084000080000000000000000040080450 -:10F0F00082000800110000000084000800000000E9 -:10F10000000400040000C0820810C0C0C00020003D -:10F11000828382A08200830220A0040404004000B5 -:10F1200088080202830002C1020340401000080068 -:10F1300002020404400000000400404140041000AA -:10F140000409400089A01000000000000000000039 -:10F1500000000101004000010200A0C0C000A000AA -:10F16000020040A02000020000100000004000014A -:10F17000050120000584A000000000000000000040 -:10F180000000000000000000000000000000000A75 -:10F190000000000000000000000000E00000810A04 -:10F1A00000000000000000000000000000008100DE -:10F1B00000000000000084000000000000000000CB -:10F1C00041120000000000004100000000000000AB -:10F1D0000000818100E00700410000000000000005 -:10F1E0000000000000000700000000000000070011 -:10F1F0000000000000E00000420000000000415557 -:10F2000051550000000000000000A595A555699625 -:10F210003CC3AAFE550133CCCCCCAA55AA5599992A -:10F220009696A55A5A5A33CC3CC30CF3F30CB14E04 -:10F23000B14EF0F00F0FBCBE4341000096965655FC -:10F2400038FFC70099995A5A0CF3F30C00000000DC -:10F250000000000000000000FFFFDFDF2C2C3C3C22 -:10F26000F0F0F080000A000AF0C0F0C000000000DA -:10F270000000002053530F00AA8FAA8F0000000047 -:10F280004141515100000000000000005A6A5AAA92 -:10F29000639C3CC35501AAFE33CC99CC55AAA95610 -:10F2A00069999696A55A995A639C3CC31CE3E31C42 -:10F2B000A55AB14E2733D8CC4341BCBE0000696982 -:10F2C000A9AAC70038FF9999995A1CE3E31C0000CA -:10F2D00000000000000000000000000020202C0CB6 -:10F2E0003C1CF0F00000FF0AC30AF0FCF0D4000060 -:10F2F0000000000000005353FFF0FF82AA820000CC -:10F300000000AAAA0000000000000000FFFFF00FAC -:10F31000F00F827D7D82A05FE01FC3C33C3CC363CE -:10F320003333C03F3FC0C3696369F0725A5A333305 -:10F330003399AA6A55955A5A5A99F0F0331B00002E -:10F340005A5A5A5AC03FE01FC33CC33C0F0FFFFF3D -:10F35000000000000000000000000000FF000000AE -:10F36000FFD30000808AC0CF8282C2823C353C3C01 -:10F3700000000000C300C300A0F080C000F0003017 -:10F380000000000000000000000000002800FFFF57 -:10F39000728D0FF0A25D5DA25FA01FE03339CCC675 -:10F3A0003C9CCCCCC23D3DC23C969C960F8DA5A505 -:10F3B00033CC33CC69699696999999990F0FCCE41F -:10F3C0000000999999A53FC01FE0639C3CC30F0FB3 +:10ED00000000000000000000000000000000000003 +:10ED10000000000000008000000000000000000073 +:10ED200000000000000000000000000000000000E3 +:10ED300000000000000000000000000000000000D3 +:10ED400000000000000000000000000000000000C3 +:10ED500000000000000000000000000000000000B3 +:10ED600000000000000000000000000000000000A3 +:10ED70000000000000000000000000000000000093 +:10ED800000A0000800A008081004010440A020A072 +:10ED90000000000000000000C005A191C082828335 +:10EDA0000000000000000000000000000000000063 +:10EDB0000000000000000000000000000000000053 +:10EDC0000000000000000000000000000000000043 +:10EDD0000000000000000000000000000000000033 +:10EDE0000000000000000000000000000000000023 +:10EDF0000000000000000000000000000000000013 +:10EE000000000000008000008080C08020008000A2 +:10EE100000000000000000000000801120A000C0E1 +:10EE20008020000000000000000000000000000042 +:10EE300000000000000000000000000000000000D2 +:10EE400000000000000000000000000000000000C2 +:10EE500000000000000000000000000000000000B2 +:10EE600000000000000000000000000000000000A2 +:10EE70000000000000000000000000000000000092 +:10EE800000000000800000008000800020004100A1 +:10EE9000401184000000000000000000C080410418 +:10EEA000C09140830000000000000000000000004E +:10EEB0000000000000000000000000000000000052 +:10EEC0000000000000000000000000000000000042 +:10EED0000000000000000000000000000000000032 +:10EEE0000000000000000000000000000000000022 +:10EEF0000000000000000000000000000000000012 +:10EF0000000000000000040082000400900041A006 +:10EF1000A000A1019000000000000000000004C05B +:10EF2000A000848382910000000000000000000027 +:10EF300000000000000000000000000000000000D1 +:10EF400000000000000000000000000000000000C1 +:10EF500000000000000000000000000000000000B1 +:10EF600000000000000000000000000000000000A1 +:10EF70000000000000000000000000000000000091 +:10EF80000000000000000000004000A090A002105F +:10EF90000001004090A002A100000000000000005D +:10EFA000C00401419082C182000000000000000006 +:10EFB0000000000000000000000000000000000051 +:10EFC0000000000000000000000000000000000041 +:10EFD0000000000000000000000000000000000031 +:10EFE0000000000000000000000000000000000021 +:10EFF0000000000000000000000000000000000011 +:10F000000000000000000000000000800000800000 +:10F0100080800020008580418011000000000000F9 +:10F020000000804041838340110500000000000083 +:10F0300000000000000000000000000000000000D0 +:10F0400000000000000000000000000000000000C0 +:10F0500000000000000000000000000000000000B0 +:10F0600000000000000000000000000000000000A0 +:10F070000000000000000000000000000000000090 +:10F080000000000000000000000000000000000080 +:10F090000000000005020491208003100000000021 +:10F0A0000000000084004011030040400000000008 +:10F0B0000000000000000000000000000000000050 +:10F0C0000000000000000000000000000000000040 +:10F0D0000000000000000000000000000000000030 +:10F0E0000000000000000000000000000000000020 +:10F0F0000000000000000000000000000000000010 +:10F1000000000000000000000000000000000000FF +:10F1100000A000A000000001000501400101000066 +:10F1200000000000000090A0A0A1A1C0830000008A +:10F1300000000000000000000000000000000000CF +:10F1400000000000000000000000000000000000BF +:10F1500000000000000000000000000000000000AF +:10F16000000000000000000000000000000000009F +:10F17000000000000000000000000000000000008F +:10F18000000000000000000000000000000000007F +:10F190000000000007000000000000E00700000081 +:10F1A0000000000000000000000000E00700500028 +:10F1B000000000000000000000000000000000004F +:10F1C000000000000000000000000000000000003F +:10F1D000000000000000000000000000000000002F +:10F1E000000000000000000000000000000000001F +:10F1F000000000000000000000000000000000000F +:10F2000000000000000000000000000000000000FE +:10F210000000000000003CF03CF000000000F0AAFC +:10F22000F0FF0000000000000000A000F3F3F0F485 +:10F23000003400000000000000000000000000009A +:10F2400000000000000000000000000000000000BE +:10F2500000000000000000000000000000000000AE +:10F26000000000000000000000000000000000009E +:10F27000000000000000000000000000000000008E +:10F28000000000000000000000000000000000007E +:10F2900000000000000000003C003CFF00000000F7 +:10F2A000F0AAF00000000000000000000000C3C34E +:10F2B000F0F000300000000000000000000000003E +:10F2C000000000000000000000000000000000003E +:10F2D000000000000000000000000000000000002E +:10F2E000000000000000000000000000000000001E +:10F2F000000000000000000000000000000000000E +:10F3000000000000000000000000000000000000FD +:10F310000000000000005F5C5350AFAF03005F5C73 +:10F32000535055FF00000000000000000000D7000F +:10F33000C3003C08FF0800000000000000000000BF +:10F3400000000000000000000000000000000000BD +:10F3500000000000000000000000000000000000AD +:10F36000000000000000000000000000000000009D +:10F37000000000000000000000000000000000008D +:10F38000000000000000000000000000000000007D +:10F3900000000000000000005F5C5350AAAA0000BB +:10F3A0005F5C535055FF404000000000000000002B +:10F3B000D705C3000000FF000000000000000000AF +:10F3C000000000000000000000000000000000003D :10F3D000000000000000000000000000000000002D -:10F3E0000000FFFF0000808AC0CFC3C3C3C33C3509 -:10F3F0003C3C0000000000000000AAFF82C300FFA8 -:10F4000000FF00614006000D000000000000000049 -:10F41000100240618006002D100240008000002094 -:10F420001002406180070021100240618006002D1B -:10F43000100240618006002D100240008000002074 -:10F440001002000040618006002D1002406180061D -:10F45000002D420200610006000D000000614039ED -:10F46000C001000000610006000D0000000000085F -:10F470000000000000610006000D000000610002B5 -:10F48000000D00000000000000000000000000006F -:10F49000000000000000000002000000000000006A -:10F4A000000000000000FFFFAABEAAAAC0C2FCFE26 -:10F4B000000000000000000000000000000000004C -:10F4C00000000000000000000000000000000F4EDF -:10F4D0005A5A3CFF30F300000000FFCF5545090C9D -:10F4E000090C00FF0000000000005755D755000030 -:10F4F0000000000000000000000000000000AAAAB8 -:10F50000AAAA0000000000000000010000000000A6 +:10F3E000000000000000000000000000000000001D +:10F3F000000000000000000000000000000000000D +:10F4000000000000000000000000000000000000FC +:10F4100000000000000000000000000000000000EC +:10F420000000006100040001000000000000000076 +:10F43000000000610000000100000000000000006A +:10F4400000000000000000000000000000000000BC +:10F4500000000000000000000000000000000000AC +:10F46000000000000000000000000000000000009C +:10F47000000000000000000000000000000000008C +:10F48000000000000000000000000000000000007C +:10F49000000000000000000000000000000000006C +:10F4A000000000007D2D78280000C3C3000000008C +:10F4B000000000000C0F0C0FF0A0F0A000000000F6 +:10F4C000000000000000000000000000000000003C +:10F4D000000000000000000000000000000000002C +:10F4E000000000000000000000000000000000001C +:10F4F000000000000000000000000000000000000C +:10F5000000000000000000000000000000000000FB :10F5100000000000000000000000000000000000EB -:10F5200000000000000000005F57AA82AAAA0000A5 -:10F530003C3C010000000000000000000000000052 -:10F5400000000000000000000000000001000000BA -:10F55000F0B1A5A500C330F300000000FFFF555532 +:10F520000000000000007D2D782800A0C3E300004B +:10F530000000000000000C0F2C2FF2A2F0A0000031 +:10F5400000000000000000000000000000000000BB +:10F5500000000000000000000000000000000000AB :10F56000000000000000000000000000000000009B :10F57000000000000000000000000000000000008B -:10F58000020A565A000000000000000000000000BF -:10F5900000000000000000000000000000F500C5B1 -:10F5A00000000000000000000A5F0000F0F0E1E150 -:10F5B000BF003D000000000000000000FFFFFFFF53 +:10F58000000000000000000000000000000000007B +:10F59000000000000000000000000000000000006B +:10F5A000000000000000000000000000C0E8FCE8CF +:10F5B0000000000000000000FCFC0000F000F0F083 :10F5C000000000000000000000000000000000003B -:10F5D0000000000000007CFCFEFC000000000000B9 -:10F5E00000003800040000009090000000000000BF -:10F5F0000000000000000000000000000000AAEB76 -:10F60000FAFBFFFB05010000000000000000000005 -:10F61000000000000000000000000000000000FFEB -:10F6200000FF000000000000000082D70000F0F0A2 -:10F63000F0F0BF003D000000000000000000FEFFF1 -:10F64000FFFF0000000000000000000000000000BC -:10F65000000000000000000068FCEAFC0000000060 -:10F66000000000003C00000000009090000000003E +:10F5D000000000000000000000000000000000002B +:10F5E000000000000000000000000000000000001B +:10F5F000000000000000000000000000000000000B +:10F6000000000000000000000000000000000000FA +:10F6100000000000000000000000000000000000EA +:10F620000000000000000000000000000000C0E832 +:10F63000FCE80000000000000000FCFC0028F000D6 +:10F64000F1F10000000000000000000000000000D8 +:10F6500000000000000000000000000000000000AA +:10F66000000000000000000000000000000000009A :10F67000000000000000000000000000000000008A -:10F680000041F0F1FEFA04000000000004880400CC -:10F69000201004200010001084080005040502005A -:10F6A000000900000210000502100008001004000C -:10F6B000001000080409000088050009201020003F -:10F6C00004100010200982090009040800008400C9 -:10F6D0008809001084102000000984058405841026 -:10F6E0008408841000050000200904002004201074 -:10F6F0008405040900002010000020100405840582 -:10F70000201000090410840920100009840000055D -:10F7100020000001000100000400000000000000C3 +:10F6800000000000000000000000000000840000F6 +:10F690000010002000000000000002000000000038 +:10F6A000000000000000000000000000000000005A +:10F6B000000000000000000000000000000000004A +:10F6C000000000000000000000000000000000003A +:10F6D000000000000000000000000000000000002A +:10F6E000000000000000000000000000000000001A +:10F6F000000000000000000000000000000000000A +:10F7000000000000000000000000000000000009F0 +:10F7100000000001000100000000000000000000E7 :10F7200000000000000000000000000000000000D9 -:10F7300000000000000000000000000000000400C5 -:10F7400000000000100004000000040000000000A1 +:10F7300000000000000000000000000000000000C9 +:10F7400000000000000000000000000000000000B9 :10F7500000000000000000000000000000000000A9 :10F760000000000000000000000000000000000099 -:10F770000000000000000000000004000400200061 -:10F780000000000000000000000000000000040075 +:10F770000000000000000000000000000000000089 +:10F780000000000000000000000000000000000079 :10F790000000000000000000000000000000000069 :10F7A0000000000000000000000000000000000059 :10F7B0000000000000000000000000000000000049 :10F7C0000000000000000000000000000000000039 :10F7D0000001000000000000000000000000000028 -:10F7E0000000000000000009000000000000001000 +:10F7E0000000000000000000000000000000000019 :10F7F0000000000000000000000000000000000009 :10F8000000000000000000000000000000000000F8 -:10F810000000000800840010008800880084008434 -:10F8200000080008004000C0000800880008000828 -:10F83000008400080084008800880084004000885C -:10F840000010004000880084000800080040000804 -:10F85000004000000084004000080088008800404C -:10F8600000880008008800880040000800A0001000 -:10F8700000880010000800C0008400880084008414 -:10F8800000080088000000080008008400840008C8 -:10F8900000080010000500080021002100030003FB -:10F8A0000000000300050005000800210008000515 -:10F8B00000210041082108000000002100088241C9 -:10F8C000000800080021002100000021002182051D -:10F8D00000100021000000100010000300210010A3 -:10F8E0000021C003001000210021002100100010A1 -:10F8F000002100210008002100050005001000087B -:10F90000A04100210008001000210005000800109F -:10F9100000050010000308A000100300000800A06C -:10F920000308008200C0411008000084088441825E -:10F9300000002182410003820008088400100010AA -:10F9400000100882008400080084008400C00000C9 -:10F95000000800A000100000000841A000A000085E -:10F960000084000000100040008400840000008239 -:10F9700041A00008030000A00300000000102108BF -:10F980000300000803102100000800C0001003005D -:10F99000000800000000000000000000000000005F -:10F9A0000000080000000000A000000000000000AF -:10F9B00088000400080000000000000000000000B3 -:10F9C000000004000000000000000400000004002B +:10F810000000000800080000001000840008000834 +:10F8200000080008000800000008000000080000B0 +:10F830000008001000080000000000000008008818 +:10F840000010004000080084001000000084000048 +:10F850000008000000000010000000000000000888 +:10F860000000000000080088000000000000008484 +:10F8700000000008000000840000000000000010EC +:10F880000000000000080040000000000000000030 +:10F89000000000080000000000000000000000055B +:10F8A000000500000000000000000000000500004E +:10F8B00000008200000000000000000000000000C6 +:10F8C0000000000000080000000000000000000030 +:10F8D0000000000000000000000800100000000010 +:10F8E0000005000000000000000000000000000013 +:10F8F0000000000000000000000000000000000008 +:10F9000000080000000000000041000000000000AE +:10F9100000000000000000000000000000000000E7 +:10F9200000000000000000000000000000000000D7 +:10F930000000000003C00000000000000000000004 +:10F94000000000000000000000A000000000000017 +:10F95000000800000000000000000000000000009F +:10F960000000000000000000000000000000000097 +:10F970000000000000000000000000000000000087 +:10F980000000000000000000000000000000000077 +:10F990000000000000000000000000000000000067 +:10F9A0000000000000000200000000000000000055 +:10F9B0000000000000000000000000000000000047 +:10F9C0000000000000000000000000000000000037 :10F9D0000000000000000000000000000000000027 -:10F9E0000000000000000800000008000000000007 -:10F9F000000088000000A0000000000000000000DF -:10FA0000C00000000000000000000800000000002E -:10FA1000000000000000A00008000000000000003E +:10F9E0000000000000000000000000000000000017 +:10F9F0000000000000000000000000000000000007 +:10FA000000000000000000000000000000000000F6 +:10FA100000000000000000000000000000000000E6 :10FA200000000000000000000000000000000000D6 :10FA300000000000000000000000000000000000C6 :10FA400000000000000000000000000000000000B6 @@ -147403,32 +147403,32 @@ :10FA60000000000000000000000000000000000096 :10FA70000000000000000000000000000000000086 :10FA80000000000000000000000000000000000076 -:10FA90000000000000000000000000000041000025 -:10FAA000000000000000080000080000080308082B -:10FAB00000100010000000000000000300000041E2 -:10FAC00000080003000300000010002100000008EF -:10FAD00000030040000000100803000000000000C8 -:10FAE000080800008200000800050008000000006F -:10FAF00008030008000008080000000800030000D8 -:10FB000000000008000000000000000000000000ED -:10FB100000000000000000000021080000000000BC -:10FB200000000000001000000000001000000000B5 -:10FB30000800210000C0000003000000000000C019 -:10FB4000008400000800030002A00484008200007A -:10FB50000000000000000200000000400000000063 -:10FB60000000008200C0008241A000080000028264 -:10FB7000000000000000008400000004000000C03D -:10FB800000000008000008A00000000000000000C5 -:10FB90000000000000000000000000C0000000089D -:10FBA0000000000000080003080800020800000030 -:10FBB00000000000080000000021001000110010EB -:10FBC00000000003000000000000000800400000EA -:10FBD00000000000000800030000002100040000F5 -:10FBE000000000000009000000000000000000000C -:10FBF00000000003001008000000001000210000B9 -:10FC0000040800000800000040000000001000058B -:10FC100000000000000008030000000000000021B8 -:10FC200000000000000000000000000000000000D4 +:10FA90000000000000000000000000000000000066 +:10FAA0000000000000000000000000000000000056 +:10FAB0000000000000000000000000000000000046 +:10FAC0000000000000000000000000000000000036 +:10FAD0000000000000000000000000000000000026 +:10FAE0000000000000000000000000000000000016 +:10FAF0000000000000000000000000000000000006 +:10FB000000000000000000000000000000000000F5 +:10FB100000000000000000000000000000000000E5 +:10FB200000000000000000000000000000000000D5 +:10FB300000000000000000000000000000000000C5 +:10FB400000000000000000000000000008000000AD +:10FB500000000000000000000000000000000000A5 +:10FB60000000000000000000000000000000000095 +:10FB70000000000000000000000000000000000085 +:10FB80000000000000000000000000000000000075 +:10FB90000000000000000000000000000000000065 +:10FBA0000000000000000000000000000000000055 +:10FBB000000000100008000000000000000000002D +:10FBC0000021000000000000000000000000000014 +:10FBD0000000000000000000000000000000000025 +:10FBE0000000000000000000000000000000000015 +:10FBF00000000000000800000000000000000000FD +:10FC000000000000000000000000000000000000F4 +:10FC100000000000000000000000000000000000E4 +:10FC20000000000000000090000000000000000044 :10FC300000000000000000000000000000000000C4 :10FC400000000000000000000000000000000000B4 :10FC500000000000000000000000000000000000A4 @@ -147436,7 +147436,7 @@ :10FC70000000000000000000000000000000000084 :10FC80000000000000000000000000000000000074 :10FC90000000000000000000000000000000000064 -:10FCA0000000000000000000000000400000000014 +:10FCA00000000000000000000000008300000000D1 :10FCB0000000000000000000000000000000000044 :10FCC0000000000000000000000000000000000034 :10FCD0000000000000000000000000000000000024 @@ -147444,7 +147444,7 @@ :10FCF0000000000000000000000000000000000004 :10FD000000000000000000000000000000000000F3 :10FD100000000000000000000000000000000000E3 -:10FD2000000000000000400000000000000500008E +:10FD200000000000000000000000000000100000C3 :10FD300000000000000000000000000000000000C3 :10FD400000000000000000000000000000000000B3 :10FD500000000000000000000000000000000000A3 @@ -147452,7 +147452,7 @@ :10FD70000000000000000000000000000000000083 :10FD80000000000000000000000000000000000073 :10FD90000000000000000000000000000000000063 -:10FDA000000000000000000080000040000300058B +:10FDA00000000000000000000000002000000040F3 :10FDB0000000000000000000000000000000000043 :10FDC0000000000000000000000000000000000033 :10FDD0000000000000000000000000000000000023 @@ -147460,24 +147460,24 @@ :10FDF0000000000000000000000000000000000003 :10FE000000000000000000000000000000000000F2 :10FE100000000000000000000000000000000000E2 -:10FE20000000000000000000000040000001000091 -:10FE300000000000000000000000000000000000C2 +:10FE200000000000000000000000A0000001000031 +:10FE300000010000000000000000000000000000C1 :10FE400000000000000000000000000000000000B2 :10FE500000000000000000000000000000000000A2 :10FE60000000000000000000000000000000000092 :10FE70000000000000000000000000000000000082 :10FE80000000000000000000000000000000000072 :10FE90000000000000000000000000000000000062 -:10FEA0000000000000000000000000000001000051 -:10FEB00000820400000000000000000000000000BC +:10FEA0000000000000000000000000000000000151 +:10FEB0008404900100000000000000000000000029 :10FEC0000000000000000000000000000000000032 :10FED0000000000000000000000000000000000022 :10FEE0000000000000000000000000000001000011 :10FEF0000000000000000000000000000000000002 :10FF000000000000000000000000000000000000F1 :10FF100000000000000000000000000000000000E1 -:10FF200000000000000000000000000000000020B1 -:10FF300000090000804000000000000000000000F8 +:10FF20000000000000000000000000000000004190 +:10FF300000038000400200000000000000000000FC :10FF400000000000000000000000000000000000B1 :10FF500000000000000000000000000000000000A1 :10FF60000000000000000000000000000000000091 @@ -147485,7 +147485,7 @@ :10FF80000000000000000000000000000000000071 :10FF90000000000000000000000000000000000061 :10FFA0000000000000000000000000000000000051 -:10FFB00000008000000000020000000000000000BF +:10FFB0000005804000000003000000000000000079 :10FFC0000000000000000000000000000000000031 :10FFD0000000000000000000000000000000000021 :10FFE0000000000000000000000000000000000011 @@ -147494,7 +147494,7 @@ :1000000000000000000000000000000000000000F0 :1000100000000000000000000000000000000000E0 :1000200000000000000000000000000000000000D0 -:1000300000000000040000000001000000000000BB +:1000300000000000020000000001000000000000BD :1000400000000000000000000000000000000000B0 :1000500000000000000000000000000000000000A0 :100060000000000000000000000000000000000090 @@ -147502,7 +147502,7 @@ :100080000000000000000000000000000000000070 :100090000000000000000000000000000000000060 :1000A0000000000000000000000000000000000050 -:1000B00000000000884100C843000000000000006C +:1000B00000000000818100C8430000000000000033 :1000C0000000000000000000000000000000000030 :1000D0000000000000000000000000000000000020 :1000E0000000000000000000000000000000000010 @@ -147603,8 +147603,8 @@ :1006D000000000000000000000000000000000001A :1006E000000000000000000000000000000000000A :1006F00000000000000000000000000000000000FA -:1007000000000000000000000000000000000001E8 -:1007100000000001000000000000000000000000D8 +:1007000000000000000000000000000000001001D8 +:1007100000001001000000000000000000000000C8 :1007200000000000000000000000000000000000C9 :1007300000000000000000000000000000000000B9 :1007400000000000000000000000000000000000A9 @@ -147620,7 +147620,7 @@ :1007E0000000000000000000000000000000000009 :1007F00000000000000000000000000000000000F9 :1008000000000000000000000000000000000000E8 -:1008100000000000000000040000000000000000D4 +:100810000000400000004004000000000000000054 :1008200000000000000000000000000000000000C8 :1008300000000000000000000000000000000000B8 :1008400000000000000000000000000000000000A8 @@ -147632,15 +147632,15 @@ :1008A0000000000000000000000000000000000048 :1008B0000000000000000000000000000000000038 :1008C0000000000000000000000000000000000028 -:1008D000000000000000000000000000C000000058 -:1008E000C0000000000000008800200000000000A0 -:1008F0008800000000000000000000002000000050 -:1009000020000000000000002000C00000000000E7 -:10091000C0000000000100000000000000002000F6 -:100920000000880000000000880000002000000097 -:100930000000C0000000000088000000000020004F -:100940008800000000008800200088000000880067 -:10095000C0002000000000000000000000000000B7 +:1008D0000000000000000000000000000000000018 +:1008E0000000000000000000000000000000000008 +:1008F00000000000000000000000000000000000F8 +:1009000000000000000000000000000000000000E7 +:1009100000000000000100000000000000000000D6 +:1009200000000000000000000000000000000000C7 +:1009300000000000000000000000000000000000B7 +:1009400000000000000000000000000000000000A7 +:100950000000000000000000000000000000000097 :100960000000000000000000000000000000000087 :100970000000000000000000000000000000000077 :100980000000000000000000000000000000000067 @@ -147648,63 +147648,63 @@ :1009A0000000000000000000000000000000000047 :1009B0000000000000000000000000000000000037 :1009C0000000000000000000000000000000000027 -:1009D0000000000000000000000500000000000012 +:1009D0000000000000000000000000000000000017 :1009E0000000000000000000000000000000000007 -:1009F00000000000000000020000000000000008ED -:100A000000000000000000000000000000000000E6 +:1009F00000000000000000000000000000000000F7 +:100A000000000000000000000000000000040000E2 :100A100000000000000000000000000000000000D6 -:100A200000000000000000000008000000000000BE -:100A300000000000000000000000000000000000B6 +:100A200000000000000000000000000000000008BE +:100A300000000000000000000002000000000000B4 :100A400000000000000000000000000000000000A6 -:100A50000002000000000000000000080084008484 -:100A600000000008000800080008000800840002D8 -:100A700000820004000800000008000800000008D0 -:100A80000000008400080084000800080008000836 -:100A900000080084000800000008000000080000B2 -:100AA000000800080008000800000088000800088E -:100AB0000008000400000008000000080008000012 -:100AC000000200080084000800000008000800047C -:100AD00000080008000000080000000800000003F3 -:100AE0000008002100000000002100210021000377 -:100AF0000008000800000000000900210021000398 -:100B000000000000000000000000002100210000A3 -:100B1000000000200003000000050021000000206C -:100B200000000000000000030000000000200000A2 -:100B30000000000000210000000000000000000094 -:100B40000000000000200000000000000000000085 -:100B50000000000000000005000000000000000090 +:100A5000000000000000000000000008000800087E +:100A6000000800840008000800080008000800844E +:100A7000000800080008000800080008000400083A +:100A800000080084000800080008000800080008AA +:100A9000000800080008000800080000000800081E +:100AA000000800080008008400080008000800088A +:100AB0000002000800080040000800080008008448 +:100AC000000800080008000800080008008400086A +:100AD00000080008000800020002000800000021D1 +:100AE000002100210008000000210000000000217A +:100AF0000040002100210000000300000000002150 +:100B0000000500200003000000000000000000219C +:100B100000000000000300000021000000000000B1 +:100B2000002000000021000000080021000000005B +:100B3000000000000020000000080003000000008A +:100B400000000000000000000000000000000000A5 +:100B50000020000000000000000000000000000075 :100B60000000000000000000000000000000000085 :100B70000000000000000000000000000000000075 :100B80000000000000000000000000000000000065 :100B90000000000000000000000000000000000055 :100BA0000000000000000000000000000000000045 -:100BB0000000000000000020000000000000000015 +:100BB0000000000000000000000000000000000035 :100BC0000000000000000000000000000000000025 :100BD0000000000000000000000000000000000015 -:100BE000000000008200000000000000C0000000C3 +:100BE0000000000000000000000000000000000005 :100BF00000000000000000000000000000000000F5 -:100C000000000000000000000000000000001000D4 -:100C1000000000000000000000000000C000000014 -:100C200000000000C000C000000000000000000044 -:100C300000000000C000820000000000C0000000B2 -:100C40000000C000000082000000C00000000000A2 -:100C500000008800C000000010000000000000003C +:100C000000000000000000000000000000000000E4 +:100C100000000000000000000000000000000000D4 +:100C200000000000000000000000000000000000C4 +:100C300000000000000000000000000000000000B4 +:100C400000000000000000000000000000000000A4 +:100C50000000000000000000000000000000000094 :100C60000000000000000000000000000000000084 :100C70000000000000000000000000000000000074 -:100C8000000000000000000000A0000000000000C4 -:100C90000000000000000000000000000000000054 +:100C8000000000000000000000000008000000005C +:100C900000000000000000000000000000A00000B4 :100CA0000000000000000000000000000000000044 :100CB0000000000000000000000000000000000034 :100CC0000000000000000000000000000000000024 :100CD0000000000000000000000000000000000014 -:100CE00000000000000000000000080000030000F9 -:100CF00000030000000000080000002000080000C1 -:100D000000000000000000000000000000080000DB -:100D100000000000000000000000080000000000CB -:100D20000800820000000000000000000021000018 -:100D30000003080000000040000008000008000058 -:100D40009000080000000000C0000000000000004B -:100D5000000008000000000000000000000000008B +:100CE00000080000000000000000000000000000FC +:100CF00000050000000000000000000000000000EF +:100D000000000000000000080000000000000000DB +:100D100000000000000000000000002100000000B2 +:100D200000000000000000000000000000200000A3 +:100D300000000000000000000000000000000000B3 +:100D4000000000000000000000080000000000009B +:100D50000000000000000000000000000000000093 :100D60000000000000000000000000000000000083 :100D70000000000000000000000000000000000073 :100D80000000000000000000000000000000000063 @@ -147712,12 +147712,12 @@ :100DA0000000000000000000000000000000000043 :100DB0000000000000000000000000000000000033 :100DC0000000000000000000000000000000000023 -:100DD000000000000000000000000000000008000B -:100DE00000000000040000000000000000000000FF -:100DF00000000000000000000000000000000000F3 +:100DD0000000000000000000000000000000000013 +:100DE0000000000000000000000000000000000003 +:100DF00000000000000000000000000000080000EB :100E000000000000000000000000000000000000E2 -:100E100000000000000000000000000000000000D2 -:100E200000000000000000000000000000000003BF +:100E100000000000002100000000000000000000B1 +:100E200000000000000000000000000000000000C2 :100E300000000000000000000000000000000000B2 :100E400000000000000000000000000000000000A2 :100E50000000000000000000000000000000000092 @@ -147779,7 +147779,7 @@ :1011D000000000000000000000000000000000000F :1011E00000000000000000000000000000000000FF :1011F00000000000000000000000000000000000EF -:1012000000000000000000000000000000000000DE +:1012000000100000000000000000000000000000CE :1012100000000000000000000000000000000000CE :1012200000000000000000000000000000000000BE :1012300000000000000000000002000000000000AC @@ -147795,7 +147795,7 @@ :1012D000000000000000000000000000000000000E :1012E00000000000000000000000000000000000FE :1012F00000000000000000000000000000000000EE -:101300000000000041000000000000070000000095 +:101300000000000081000000000000070000000055 :1013100000000000000000000000000000000000CD :1013200000000000000000000000000000000000BD :1013300000000000000000000000000000000000AD @@ -147876,14 +147876,14 @@ :1017E00000000000900000000000000090000000D9 :1017F00000000000000000000000000000000000E9 :1018000000000000000000000000000000000000D8 -:101810000000000000000000000000000000400088 -:1018200020004000000000000000000040002000F8 -:101830008800000000004000000000004000200080 -:101840002000200000000000000000002000200018 -:10185000000220000000A000200000000000200086 -:101860004000000020000000880000000000200070 -:101870000000400000002000880000000000200060 -:1018800020008800200088002000000000002000C8 +:1018100000000000000000000000000000000000C8 +:1018200000000000000000000000000000000000B8 +:1018300000000000000000000000000000000000A8 +:101840000000000000000000000000000000000098 +:101850000000000000000000000000000000000088 +:101860000000000000000000000000000000000078 +:101870000000000000000000000000000000000068 +:101880000000000000000000000000000000000058 :101890000000000000000000000000000000000048 :1018A0000000000000000000000000000000000038 :1018B0000000000000000000000000000000000028 @@ -147898,78 +147898,78 @@ :101940000000000000000000000000000000000097 :101950000000000000000000000000000000000087 :101960000000000000000000000000000000000077 -:101970000000000000000400000000000000000063 +:101970000000000000000000000000000000000067 :101980000000000000000000000000000000000057 -:101990000000000000000000000000000000000047 -:1019A000000000000008000000000000000000002F -:1019B000000000000088000000000000000000009F -:1019C0000000000000040000000000000000000013 -:1019D00000000000000800000000000000000000FF -:1019E00000000000000000000000000000000000F7 -:1019F0000000000000000004800000000000000063 -:101A000000000000000000000000000000000000D6 -:101A100000000000000000000003000000000000C3 +:10199000000000000000000800000000000000003F +:1019A000000000000008000000080008000000001F +:1019B000000000000000008800000000000000009F +:1019C000000000000008000000880008000000007F +:1019D0000000000000000000000000000000000007 +:1019E00000080000400000040000000000080000A3 +:1019F00000000000000000000000000000000000E7 +:101A00000008000000000000000000004088000006 +:101A100000000000000000000000000000000000C6 :101A200000000000000000000000000000000000B6 -:101A3000000000000009000000000000000000009D -:101A40000000000000000000000000000000000096 +:101A300000000000000000000000000000000000A6 +:101A4000000800000000000000000000000000008E :101A50000000000000000000000000000000000086 :101A60000000000000000000000000000000000076 :101A70000000000000000000000000000000000066 :101A80000000000000000000000000000000000056 -:101A900000000000000000000000100000004100F5 -:101AA0000000000000000000000000000000000036 -:101AB00000000000000000000040000000000000E6 -:101AC00000000000000000001000000000004100C5 +:101A90000000000000000000000000000000000046 +:101AA00000000000000000000000008400000000B2 +:101AB0000000000000000000000000000000000026 +:101AC0000000000000000000000000000000000016 :101AD0000000000000000000000000000000000006 :101AE00000000000000000000000000000000000F6 -:101AF00041000000000000000000000000000000A5 -:101B00000000000000000000000000000000410094 -:101B100000000000000000000000040000000000C1 -:101B200000000000000000000000000010000000A5 -:101B30000000000000000000000010000000000095 +:101AF00000000000000000000000000000000000E6 +:101B000000000000000000000000000000000000D5 +:101B100000000000000000000000000000000000C5 +:101B200000000000000000000000000000000000B5 +:101B300000000000000000000000000000000000A5 :101B40000000000000000000000000000000000095 :101B50000000000000000000000000000000000085 -:101B600000000000A00000000000000000000800CD -:101B700000000000A00000000000000000000800BD -:101B80000000C00000000000000000000000000095 -:101B90000000000000000000000010000000000035 +:101B60000000000000000000000000000000000075 +:101B70000000000000000000000000000000000065 +:101B80000000000000000000000000000000000055 +:101B90000000000000000000000000000000000045 :101BA0000000000000000000000000000000000035 :101BB0000000000000000000000000000000000025 :101BC0000000000000000000000000000000000015 :101BD0000000000000000000000000000000000005 :101BE00000000000000000000000000000000000F5 :101BF00000000000000000000000000000000000E5 -:101C000000000000000000000000000000000000D4 -:101C100000000000000010000000000000000000B4 -:101C20000000000000000000000000000000004074 +:101C000010000000100000001000000000000000A4 +:101C100000000000000000000000000000000000C4 +:101C200000000000000000000000000000000000B4 :101C300000000000000000000000000000000000A4 -:101C40000000000000000000000000000000820012 +:101C40000000000000000000000000000000000094 :101C50000000000000000000000000000000000084 -:101C60000000000000000000000000000000001163 -:101C70000400000000000000000000000000000060 -:101C80000800000000000000080000000000C00084 +:101C60000000000000000000000000000000000074 +:101C70000000000000000000000000000000000064 +:101C80000000000000000000000000000000000054 :101C90000000000000000000000000000000000044 -:101CA000000000000000000000000000000000A094 +:101CA0000000000000000000000000000000000034 :101CB0000000000000000000000000000000000024 -:101CC000000800000000000000000000000000000C +:101CC0000000000000000000000000000000000014 :101CD0000000000000000000000000000000000004 :101CE00000000000000000000000000000000000F4 -:101CF00000000000000000000000000000000020C4 +:101CF00000000000000000000000000000000000E4 :101D000000000000000000000000000000000000D3 :101D100000000000000000000000000000000000C3 :101D200000000000000000000000000000000000B3 -:101D300000000000000000000000000000000000A3 +:101D30000000000000000000000000000021000082 :101D40000000000000000000000000000000000093 :101D50000000000000000000000000000000000083 -:101D600000001000000000000000008000000000E3 -:101D7000000000000800000000000000000000005B +:101D60000000000000000000000000000000000073 +:101D70000000000000000000000000000000000063 :101D80000000000000000000000000000000000053 :101D90000000000000000000000000000000000043 -:101DA0000000000010000000000000000000000023 +:101DA0000000000000000000000000000000000033 :101DB0000000000000000000000000000000000023 :101DC0000000000000000000000000000000000013 :101DD0000000000000000000000000000000000003 -:101DE00000000000000000000000000000200000D3 +:101DE00000000000000000000000000000000000F3 :101DF00000000000000000000000000000000000E3 :101E000000000000000000000000000000000000D2 :101E100000000000000000000000000000000000C2 @@ -147978,7 +147978,7 @@ :101E40000000000000000000000000000000000092 :101E50000000000000000000000000000000000082 :101E60000000000000000000000000000000000072 -:101E70001000000000000000000000000000000052 +:101E70000000000000000000000000000000000062 :101E80000000000000000000000000000000000052 :101E90000000000000000000000000000000000042 :101EA0000000000000000000000000000000000032 @@ -148010,7 +148010,7 @@ :102040000000000000000000000000000000000090 :102050000000000000000000000000000000000080 :102060000000000000000000000000000000000070 -:1020700000000088009000900010000000000000A8 +:102070000000000000000000000000000000000060 :102080000000000000000000000000000000000050 :102090000000000000000000000000000000000040 :1020A0000000000000000000000000000000000030 @@ -148018,9 +148018,9 @@ :1020C0000000000000000000000000000000000010 :1020D0000000000000000000000000000000000000 :1020E00000000000000000000000000000000000F0 -:1020F00000000000000000000080008000000000E0 +:1020F00000000000000000000000000000000000E0 :1021000000000000000000000000000000000000CF -:10211000000000004000000000000000000000007F +:1021100000000000000000000000000000000000BF :1021200000000000000000000000000000000000AF :10213000000000000000000000000000000000009F :10214000000000000000000000000000000000008F @@ -148028,7 +148028,7 @@ :10216000000000000000000000000000000000006F :10217000000000000000000000000000000000005F :10218000000000000000000000000000000000004F -:10219000000000000000002000000000000000001F +:10219000000000000000000000000000000000003F :1021A000000000000000000000000000000000002F :1021B000000000000000000000000000000000001F :1021C000000000000000000000000000000000000F @@ -148042,16 +148042,16 @@ :10224000000000000000000000000000000000008E :10225000000000000000000000000000000000007E :10226000000000000000000000000000000000006E -:102270000000000000000000000000000000070057 +:10227000000000000000000000000000000000005E :10228000000000000000000000000000000000004E -:1022900000000000000000000000008100000700B6 +:10229000000000000000000000000000000000003E :1022A000000000000000000000000000000000002E :1022B000000000000000000000000000000000001E :1022C000000000000000000000000000000000000E :1022D00000000000000000000000000000000000FE :1022E00000000000000000000000000000000000EE :1022F00000000000000000000000000000000000DE -:1023000030F33CFF0000000000000000000000006F +:1023000000000000000000000000000000000000CD :1023100000000000000000000000000000000000BD :1023200000000000000000000000000000000000AD :10233000000000000000000000000000000000009D @@ -148059,7 +148059,7 @@ :10235000000000000000000000000000000000007D :10236000000000000000000000000000000000006D :10237000000000000000000000000000000000005D -:10238000000030F300C30000000000000000000067 +:10238000000000000000000000000000000000004D :10239000000000000000000000000000000000003D :1023A000000000000000000000000000000000002D :1023B000000000000000000000000000000000001D @@ -148085,7 +148085,7 @@ :1024F00000000000000000000000000000000000DC :1025000000000000000000000000000000000000CB :1025100000000000000000000000000000000000BB -:102520000000000005000020000000000000000086 +:1025200000000000000000000000000000000000AB :10253000000000000000000000000000000000009B :10254000000000000000000000000000000000008B :10255000000000000000000000000000000000007B @@ -148120,190 +148120,190 @@ :1027200000000000000000000000000000000000A9 :102730000000000000000000000000000000000099 :102740000000000000000000000000000000000089 -:102750000000200000000000000000100000000049 -:102760000000000000002000000000000000000049 -:102770000000200000020000000000000000000037 -:102780000000200000002000000000000003000006 -:102790000000000020000000000000000000000019 -:1027A0000000000000000000000000000000000227 -:1027B00000000000001000000000000040000000C9 -:1027C00000000000C00000000000000084000000C5 +:102750000000000000004000200000000000000019 +:102760000000000000002000200000000000000029 +:1027700000100000400000002000000000000002E7 +:102780000000000000000000200000000000000029 +:1027900000000010000020004000000000000000C9 +:1027A0000000000000000000000000000000000029 +:1027B000000000000000840000000000C0000000D5 +:1027C0000000000000000000000000000000000009 :1027D00000000000000000000000000000000000F9 -:1027E00000000000000000000000000010000000D9 +:1027E00000000000000000000000000000000000E9 :1027F00000000000000000000000000000000000D9 -:102800000000000080000000000000000000000048 +:1028000000000000000000000000000000000000C8 :1028100000000000000000000000000000000000B8 :1028200000000000000000000000000000000000A8 -:102830000000000000002000000000000000000078 +:102830000000000000000000000000000000000098 :102840000000000000000000000000000000000088 :102850000000000000000000000000000000000078 :102860000000000000000000000000000000000068 :102870000000000000000000000000000000000058 -:1028800001000100200000000000080020000100FD -:1028900000000000000000000040000000202000B8 -:1028A000010000000000080000000000000000001F +:102880000000000000000000000000000000000048 +:102890000000000000000000000000000000000038 +:1028A0000000000000000000000000000000000028 :1028B0000000000000000000000000000000000018 :1028C0000000000000000000000000000000000008 -:1028D00000000008000000000000000000000000F0 -:1028E00000000000000000000010000000000000D8 -:1028F00000000002000000000000000000000000D6 -:102900000000200020008000000000008000800007 -:102910002010000000000000000000010000000185 -:10292000800020000000000080000008000000007F -:102930000000000000000000000000000082000015 +:1028D00000000000000000000000000000000000F8 +:1028E00000080000000000000008000000000000D8 +:1028F00000000000000000000000000000000000D8 +:1029000000080000000000000008000000000000B7 +:1029100000000000000000000000000000000000B7 +:10292000000000100000000000000008000000008F +:102930000000000000000000000000000000000097 :10294000000000000000000000000008000000007F :102950000000000000000000000000000000000077 :102960000000000000000000000000000000000067 :102970000000000000000000000000000000000057 :102980000000000000000000000000000000000047 -:102990000000000000000000000000000000000235 -:1029A00000000010000000200021000000000000D6 -:1029B00000000000000000000020000000000000F7 +:102990000000000000000000000000000011000026 +:1029A0000000000000000000000000000000000027 +:1029B0000000000000000000000000000000000017 :1029C0000000000000000000000000000000000007 :1029D00000000000000000000000000000000000F7 :1029E00000000000000000000000000000000000E7 :1029F00000000000000000000000000000000000D7 :102A000000000000000000000000000000000000C6 :102A100000000000000000000000000000000000B6 -:102A20000000000000830000000100000000000022 -:102A3000000008000000000000000000000000008E +:102A200000000000000000000000000000000000A6 +:102A30000000000000000000000000000000000096 :102A40000000000000000000000000000000000086 -:102A50000000000004000000000000000000000072 +:102A50000000000000000000000000000000000076 :102A60000000000000000000000000000000000066 :102A70000000000000000000000000000000000056 :102A80000000000000000000000000000000000046 -:102A9000000400040000000000000000002100000D -:102AA0000010008400040005002000000000000069 +:102A90000000000000000000000000000000000036 +:102AA0000000000000000000000000000000000026 :102AB0000000000000000000000000000000000016 -:102AC0000000000000000000000000000000000006 -:102AD00000000000000000000000000000000000F6 -:102AE00000000000000000000000000000000000E6 -:102AF00000000000000000000000000000000000D6 -:102B000000000000000000000000000000000000C5 -:102B100000000001000100000000000000000000B3 -:102B2000000000830011000100000001000000000F -:102B30000000000000000000000000000000000095 -:102B40000000000000000000000000000000000085 +:102AC00000000800000000000000000000000000FE +:102AD0000000820000000000000000002100000053 +:102AE00008000000100008000000000000000000C6 +:102AF00000000000000000000000000021000000B5 +:102B000000000000080008000000000000000000B5 +:102B100000A00000000000000000000000002100F4 +:102B2000000000000000100008000000000000008D +:102B3000000000000000000008000000000000008D +:102B400000000500400008004000000040000000B8 :102B50000000000000000000000000000000000075 :102B60000000000000000000000000000000000065 :102B70000000000000000000000000000000000055 -:102B80000000000000000000000000000000200025 -:102B90000000000000029000002100000000400042 -:102BA000400000000004C00804020002C009000048 -:102BB00000210000000400000000000000400000B0 +:102B80000000000000000000000000000000000045 +:102B90000000000000000000000000000000000035 +:102BA0000000000000000000000000000000000025 +:102BB0000000000000000000000000000000000015 :102BC0000000000000000000000000000000000005 :102BD00000000000000000000000000000000000F5 :102BE00000000000000000000000000000000000E5 -:102BF00000000000000000000000000000080000CD +:102BF00000000000000000000000000000000000D5 :102C000000000000000000000000000000000000C4 -:102C10008000000000000000000000000000000034 -:102C20004000004000000000000080002000000084 +:102C100000000000000000000000000000000000B4 +:102C200000000000000000000000000000000000A4 :102C30000000000000000000000000000000000094 :102C40000000000000000000000000000000000084 :102C50000000000000000000000000000000000074 :102C60000000000000000000000000000000000064 -:102C70000000000000000000000000000000000054 +:102C7000000000000000000000000800000000004C :102C80000000000000000000000000000000000044 -:102C900000000000000000000421001000000000FF -:102CA0000000C000002100030082A000000000001E -:102CB0000000000001000010000000000000000003 +:102C9000000000000000000000000800000000002C +:102CA0000000000000000000000000000000000024 +:102CB0000000000000000000000000000000000014 :102CC0000000000000000000000000000000000004 :102CD00000000000000000000000000000000000F4 -:102CE00000000000000000000000000000000000E4 -:102CF00000000000000000000000000000000000D4 -:102D000000000000000000000000000000000000C3 -:102D1000000000000000000000088000000100002A -:102D200000000000000000000000000300000000A0 -:102D300000000000008204000001080800000000FC -:102D40000000000000000000000000000000000083 -:102D5000000000000000000000000008000000006B +:102CE00000000000000000000000100000000000D4 +:102CF00000000000000000000000000000000800CC +:102D000000000000000000000000100000000000B3 +:102D100000000000000000000000000000000800AB +:102D2000000000000000000000000000080000009B +:102D3000000000000000000005000000000000008E +:102D40000800000000000000000000000800000073 +:102D50000000000000000000000000000000000073 :102D60000000000000000000000000000000000063 :102D70000000000000000000000000000000000053 :102D80000000000000000000000000000000000043 -:102D90000000000000010000100000000189001088 -:102DA000900800100000089008820088109009A187 -:102DB0004140900990000408009000A002880000A3 +:102D90000000000000000000000000000000000033 +:102DA0000000000000000000000000000000000023 +:102DB0000000000000000000000000000000000013 :102DC0000000000000000000000000000000000003 :102DD00000000000000000000000000000000000F3 :102DE00000000000000000000000000000000000E3 :102DF00000000000000000000000000000000000D3 :102E000000000000000000000000000000000000C2 -:102E1000000000000000001100090011000011086E -:102E2000009000C100090000030021800000800024 -:102E300011A183A100900008800000800080800024 +:102E100000000000000000000000000000000000B2 +:102E200000000000000000000000000000000000A2 +:102E30000000000000000000000000000000000092 :102E40000000000000000000000000000000000082 :102E50000000000000000000000000000000000072 :102E60000000000000000000000000000000000062 :102E70000000000000000000000000000000000052 :102E80000000000000000000000000000000000042 -:102E9000000000000000000009800900110000008F -:102EA0000080020911100900000088008041118093 -:102EB000A100908010009190830000000008008025 +:102E90000000000000000000000000000000000032 +:102EA0000000000000000000000000000000000022 +:102EB0000000000000000000000000000000000012 :102EC0000000000000000000000000000000000002 :102ED00000000000000000000000000000000000F2 :102EE00000000000000000000000000000000000E2 :102EF00000000000000000000000000000000000D2 :102F000000000000000000000000000000000000C1 -:102F10000000000000000000000000C000000100F0 -:102F2000000000400000010100000000020010212C -:102F30000190831005880000A1C1910800000001E4 -:102F400000A00000000000000000000000000000E1 +:102F100000000000000000000000000000000000B1 +:102F200000000000000000000000000000000000A1 +:102F30000000000000000000000000000000000091 +:102F40000000000000000000000000000000000081 :102F50000000000000000000000000000000000071 :102F60000000000000000000000000000000000061 :102F70000000000000000000000000000000000051 :102F80000000000000000000000000000000000041 :102F90000000000000000000000000000000000031 -:102FA0000001000100010001010189000000020090 -:102FB00000031090C0A0048900100000022188883E -:102FC00000200008000000000000000000000000D9 +:102FA0000000000000000000000000000000000021 +:102FB0000000000000000000000000000000000011 +:102FC0000000000000000000000000000000000001 :102FD00000000000000000000000000000000000F1 :102FE00000000000000000000000000000000000E1 :102FF00000000000000000000000000000000000D1 :1030000000000000000000000000000000000000C0 -:1030100000000000000000000000000000000010A0 -:1030200010094108031100080003100811090000ED -:1030300000080008809100888010080000108011AE +:1030100000000000000000000000000000000000B0 +:1030200000000000000000000000000000000000A0 +:103030000000000000000000000000000000000090 :103040000000000000000000000000000000000080 :103050000000000000000000000000000000000070 :103060000000000000000000000000000000000060 :103070000000000000000000000000000000000050 :103080000000000000000000000000000000000040 :103090000000000000000000000000000000000030 -:1030A0001010091005001103880091008200090822 -:1030B00000008080800200918003858010110380D1 -:1030C000100080008002800000000000000000006E +:1030A0000000000000000000000000000000000020 +:1030B0000000000000000000000000000000000010 +:1030C0000000000000000000000000000000000000 :1030D00000000000000000000000000000000000F0 :1030E00000000000000000000000000000000000E0 :1030F00000000000000000000000000000000000D0 :1031000000000000000000000000000000000000BF :1031100000000000000000000000000000000000AF -:10312000000000100000010000019188A1000800CB -:10313000080100000440108810118401100411914E -:1031400021088900900002008200000000000000B9 +:10312000000000000000000000000000000000009F +:10313000000000000000000000000000000000008F +:10314000000000000000000000000000000000007F :10315000000000000000000000000000000000006F :10316000000000000000000000000000000000005F :10317000000000000000000000000000000000004F :10318000000000000000000000000000000000003F :10319000000000000000000000000000000000002F -:1031A00000000000000000E000008100000000E0DE -:1031B000070000000000000000E0070041000000E0 -:1031C00000E007000082000000000700000000008F +:1031A000000000000000000000000000000000001F +:1031B000000000000000000000000000000000000F +:1031C00000000000000000000000000000000000FF :1031D00000000000000000000000000000000000EF :1031E00000000000000000000000000000000000DF :1031F00000000000000000000000000000000000CF :1032000000000000000000000000000000000000BE :1032100000000000000000000000000000000000AE -:103220000000000000000000000000000000FCFFA3 -:10323000FC000000000000003F303F30F0F0FF00D5 -:10324000810081C001010000F9F9606006040604F4 +:10322000000000000000000000000000000000009E +:10323000000000000000000000000000000000008E +:10324000000000000000000000000000000000007E :10325000000000000000000000000000000000006E :10326000000000000000000000000000000000005E :10327000000000000000000000000000000000004E :10328000000000000000000000000000000000003E :10329000000000000000000000000000000000002E :1032A000000000000000000000000000000000001E -:1032B0000CFF0C000000000000006F6F606066668D -:1032C000FF00810081C091919090FF9966000000FD +:1032B000000000000000000000000000000000000E +:1032C00000000000000000000000000000000000FE :1032D00000000000000000000000000000000000EE :1032E00000000000000000000000000000000000DE :1032F00000000000000000000000000000000000CE @@ -148318,231 +148318,231 @@ :10338000000000000000000000000000000000003D :10339000000000000000000000000000000000002D :1033A000000000000000000000000000000000001D -:1033B00000000000190000000000000000000CF6F2 -:1033C000FCF60C0C00006F6F6F00FFDBFFDB0CFCEA -:1033D0000CFC0000000000000000000000000000E5 +:1033B000000000000000000000000000000000000D +:1033C00000000000000000000000000000000000FD +:1033D00000000000000000000000000000000000ED :1033E00000000000000000000000000000000000DD :1033F00000000000000000000000000000000000CD :1034000000000000000000000000000000000000BC :1034100000000000000000000000000000000000AC :10342000000000000000000000000000000000009C -:103430000000000000001900000000000000000073 -:103440000C06FC06040400006F6F6F6F0000FFDBCA -:1034500000F00FFF0000000000000000000000006E +:10343000000000000000000000000000000000008C +:10344000000000000000000000000000000000007C +:10345000000000000000000000000000000000006C :10346000000000000000000000000000000000005C :10347000000000000000000000000000000000004C :10348000000000000000000000000000000000003C :10349000000000000000000000000000000000002C :1034A000000000000000000000000000000000001C -:1034B0000061000000010000006100000001000048 -:1034C00000000061300600050000006100000011EE +:1034B000000000000000000000000000000000000C +:1034C00000000000000000000000000000000000FC :1034D00000000000000000000000000000000000EC :1034E00000000000000000000000000000000000DC :1034F00000000000000000000000000000000000CC :1035000000000000000000000000000000000000BB :1035100000000000000000000000000000000000AB :10352000000000000000000000000000000000009B -:103530000000FF0FD707F0B0FFBEF534FF3CF0E00E -:10354000FFEB000000000000C0C300003F3F2A3F27 -:103550003C3CFFFF000000000000000000000000F5 +:10353000000000000000000000000000000000008B +:10354000000000000000000000000000000000007B +:10355000000000000000000000000000000000006B :10356000000000000000000000000000000000005B :10357000000000000000000000000000000000004B :10358000000000000000000000000000000000003B :10359000000000000000000000000000000000002B :1035A000000000000000000000000000000000001B -:1035B00000000000FF0FD707F0B0FFBEF534FF3C5E -:1035C000F0E0FFEB000000000000000000003F3FC3 -:1035D0002A3F3C14FF5500000000000000000000DE +:1035B000000000000000000000000000000000000B +:1035C00000000000000000000000000000000000FB +:1035D00000000000000000000000000000000000EB :1035E00000000000000000000000000000000000DB :1035F00000000000000000000000000000000000CB :1036000000000000000000000000000000000000BA :1036100000000000000000000000000000000000AA :10362000000000000000000000000000000000009A -:10363000000000000000FFFFFF00F0FFF0FF3F3F31 -:103640003F3F00AFAFAF00000000000000FFAAAA9C -:10365000FC54FF553CFF3CFF000000000000000050 +:10363000000000000000000000000000000000008A +:10364000000000000000000000000000000000007A +:10365000000000000000000000000000000000006A :10366000000000000000000000000000000000005A :10367000000000000000000000000000000000004A :10368000000000000000000000000000000000003A :10369000000000000000000000000000000000002A :1036A000000000000000000000000000000000001A -:1036B0000000000000000000F5F5F500E0EBE0EB95 -:1036C000003F3F3F00FFFFFF00000000000000FF41 -:1036D0003C3CFC54FF553CFF0C0F00000000000078 +:1036B000000000000000000000000000000000000A +:1036C00000000000000000000000000000000000FA +:1036D00000000000000000000000000000000000EA :1036E00000000000000000000000000000000000DA :1036F00000000000000000000000000000000000CA :1037000000000000000000000000000000000000B9 -:1037100000000000000000000000000000000000A9 -:103720000000000000000000400200000000000057 -:103730000000000000000000000200000000000087 -:103740000000000000000000400200030000000034 -:103750000000000000000000000010000000000059 -:103760000000000000000000100020000000000029 -:1037700000004000000000001000100240000000A7 -:103780000000100000000000200010004000400079 -:103790000000000000000000100010000000000009 -:1037A00000001000000000001000100000000000E9 -:1037B00000000000000000000000100000000000F9 -:1037C00000000000000000000000200000000000D9 -:1037D00000000000000000000000000000001000D9 -:1037E00000000000000000000000000000000000D9 -:1037F0000000000010000000000040004000000039 -:103800000000000000000000000010004000000068 +:103710000000200000002000A00020000000200089 +:1037200000000000200020008800000000000000D1 +:1037300000000000000020002000000000008800C1 +:1037400000008800200000002000000300000000AE +:10375000000000008800840020002000000000001D +:1037600088000000C00020000400200200000000CB +:1037700000000000200020002000200000000000C9 +:1037800020000000000020002000200000000000B9 +:103790000000000000000000000000000000000029 +:1037A0000000000000000000000000000000000019 +:1037B0000000000000000000000000000000000009 +:1037C00000000000000000002000000000000000D9 +:1037D00000000000000000000000000000000900E0 +:1037E00000000500000021000004000000000000AF +:1037F00000000500000000000000000000000000C4 +:1038000000000000000000000000000000000000B8 :1038100000000000000000000000000000000000A8 -:103820000000000000000000000000000000000098 +:103820000000000000000000000000002008000070 :103830000000000000000000000000000000000088 -:103840000000000000000000000000002000000058 +:103840000000000000000000000000002008000050 :103850000000000000000000000000000000000068 -:103860000000000000000000000000000000200038 +:103860000000000000000000000000000000200830 :103870000000000000000000000000000000000048 -:103880000000000000000000000000000000200018 +:103880000000000000000000000000000000200810 :103890000000000000000000000000000000000028 -:1038A0000000000000000000000000000000000018 +:1038A0000000000000000000000000000000800197 :1038B0000000000000000000000000000000000008 -:1038C0000000000000000000000000000000800078 -:1038D00000000000000000000000000000000000E8 -:1038E00000000000000000080000000000000000D0 -:1038F0008000008400000000000000000084000040 -:1039000000000000000000020000000000000000B5 -:103910008000000000000000000000000000000027 -:103920000000000000000000000000000000000097 -:103930000000000000000000000000000000000087 -:103940000000000000000000000000000000000077 -:103950000021000000080021C02100210000000813 -:1039600000000021000000210021002100000000D3 -:1039700000000021002100210021000200000021A0 -:1039800000000021002100210021000000000003B0 -:103990000000002100000000000000000000000006 +:1038C00000000000000000000000000000848001F3 +:1038D0000000008400000000000000000000000064 +:1038E00000000000000000000000000000000000D8 +:1038F0008001000000000000000000000000000047 +:1039000000000000000000000000000000000000B7 +:103910008001000000000021000000000000000005 +:103920000000000000000005000000000000000092 +:103930000000002100000000002100000000000441 +:103940000000000200000000002100000000000054 +:103950000000000000210000000000210000000025 +:10396000000300000004000000000004000000004C +:103970000000000000000000000000000000000047 +:103980000000000000000000000000000000000037 +:103990000000000000000000000000000000000027 :1039A0000000000000000000000000000000000017 :1039B0000000000000000000000000000000000007 -:1039C00000000000000000000000000000020202F1 -:1039D00000000000000000C000000088110000008E -:1039E0000900009000000020008800200000000076 -:1039F00000000000000000000000000000000000C7 -:103A0000000000000800004000000000000000006E -:103A1000000000000800000000000000000000009E -:103A20000000000000000000000000000000000096 -:103A30000000000000000000000000000000000086 -:103A40000000000000000000000000000000000076 -:103A500000000000000000000000A00000000000C6 -:103A600000000000000000000009820000000000CB -:103A700000000000000000000000820000000000C4 -:103A80000000000000000000840082000000000030 -:103A900084000000000000000000000000000000A2 +:1039C00000000000000000000000000000000000F7 +:1039D00000000000000000000000000000000000E7 +:1039E00000000800000000000000000000000000CF +:1039F000000000000900000000000000410000007D +:103A000000000000000000000000000000000000B6 +:103A1000000000000000820000000000820008009A +:103A20008200820040008200000000008200A000AE +:103A300082000000000082000000C0008200080038 +:103A40008200000000008200000008008200A00048 +:103A50008200000008000000820000008200820056 +:103A60000000820000000000000000000000820052 +:103A700000008200A000080000001000400082004A +:103A800000008200820000008400820000008200AA +:103A900040008200820008000000000000000000DA :103AA0000000000000000000000000000000000016 -:103AB0000000000000000000000000000000000006 -:103AC00000000000000000000000000000000000F6 +:103AB00000000000000000000008000000000000FE +:103AC00000000000000000000000400000000000B6 :103AD00000000000000000000000000000000000E6 :103AE00000000000000000000000000000000000D6 :103AF00000000000000000000000000000000000C6 -:103B000000000000000000000000000000000000B5 +:103B00000000000000000000210000004000000054 :103B100000000000000000000000000000000000A5 -:103B20000000000000000000000000000000000095 -:103B30000000000000000000000000000000000085 -:103B4000000000000000000000000000000040082D -:103B5000000000000000000004020000000000005F -:103B60000000000000000000000000000000000055 -:103B7000000800000000000000000002000000003B -:103B80000000000000000000000000000000000035 -:103B90000020040000000000C00000000000000041 +:103B20008400840000000800000000000000000085 +:103B3000000082000000002184000000000000005E +:103B4000C00040000000080000000000000000006D +:103B500000008200000000000000000000000000E3 +:103B60000000C00000000000000000000000000491 +:103B7000080000000800000000000000A000000095 +:103B80000000C0000000000008000000000000006D +:103B90000000000000000000000000000000000025 :103BA0000000000000000000000000000000000015 :103BB0000000000000000000000000000000000005 :103BC00000000000000000000000000000000000F5 -:103BD0000000008400022002000000C0000000007D -:103BE00000000488099000904020020005400088F1 -:103BF000008800002100000000000000000000001C +:103BD00000000000000000000000000000000000E5 +:103BE0000000000000000000000000004000000095 +:103BF00000000000000000000000000000000000C5 :103C000000000000000000000000000000000000B4 :103C100000000000000000000000000000000000A4 -:103C20000000000000000000000000000000000094 -:103C30000000000000000000000000000000000084 -:103C40000000000000000000000000000000000074 -:103C50000000000000000000C02100000041000042 -:103C600000000000000000000000000000008400D0 -:103C70000000000000000000000000210000000023 -:103C80000000000000000000000000000000000034 -:103C90000000000000000000000000030000000021 +:103C200000000000000082004000000000000800CA +:103C300000000000000300000009000882000000EE +:103C400000000000A000820040000000000008000A +:103C500000008200100000000009002100000000A8 +:103C60000000000000000000820040000000000092 +:103C7000000000000800000084000009000010009F +:103C8000000000000000A000080008000000400044 +:103C9000000000000000000008000000000000001C :103CA0000000000000000000000000000000000014 :103CB0000000000000000000000000000000000004 :103CC00000000000000000000000000000000000F4 :103CD00000000000000000000000000000000000E4 -:103CE00000000900000000000000000000000000CB -:103CF00000000000000011000000000000000000B3 +:103CE00000000000000000000000000000000000D4 +:103CF00000000000000000000000000000000000C4 :103D000000000000000000000000000000000000B3 :103D100000000000000000000000000000000000A3 -:103D20000000000000000000000000000000000093 -:103D30000000000000000000000000000000000083 -:103D40000000000000000000000001000000000072 -:103D500000000000000000C00000000000000000A3 -:103D60000000000000000000000000000100000052 -:103D7000000000000000010000C000000000000082 -:103D80000000000000000000000000000100000032 -:103D9000000000000000010000C000000000000062 -:103DA0000000000000000000000000000000000013 -:103DB0000000000000000000000000000000000003 -:103DC00000000000000000000000000041000000B2 -:103DD0000000000000021000008000000000000051 -:103DE0000000000000000000000000000000410092 -:103DF0000000000000000002400000800000000001 -:103E00000000000000000000000000000000410071 -:103E10000000000000000002100000800000000010 -:103E20000000000000000000000000000000000092 -:103E30000000000000000000000000000000000082 -:103E400000000000000000000300000000800000EF -:103E50008000000000001100098000080000000040 -:103E6000000000000041000000000300000000808E -:103E70000000800000000000110089000000000028 -:103E8000000000000000004100000300000000806E -:103E90000000800000000000110009000000000088 -:103EA00000000000000000410000000000000000D1 -:103EB0000000000000000000000000000000000002 -:103EC000000000000000000000000100000000C031 -:103ED00000002000000000000200884000020200F4 -:103EE00002000000000000010000000001000000CE -:103EF00000C000002000000000000200104000028E -:103F000002000200000000000001000001000000AB -:103F100000C000002000000000000200104000026D -:103F2000020020000000000000010000000000006E -:103F30000000000000000000000000000000000081 -:103F40000000000000000000000000000000C000B1 -:103F50000000000000000000000000100000000051 -:103F60000100000000000000000000000000000050 -:103F7000C000000000000000000000000010000071 -:103F80000000010000000000000000000000000030 -:103F9000C000000000000000000000000020000041 -:103FA0000000010000000000000000000000000010 -:103FB0000000000000000000000000000000000001 -:103FC00000000000000000000000000000000000F1 -:103FD00080000000000000000000000000800000E1 -:103FE00000000800000000000000000000000000C9 -:103FF0000000800000000000000000000000000041 -:1040000000000000080000000000000000000000A8 -:104010000000800000000000000000000000000020 -:104020000000000008000000000000000000000088 -:104030000000000000000000000000000000000080 -:104040000000000000000000000000000000000070 -:10405000800000C1000000000000000000000041DE -:1040600080000008000000000000000000000000C8 -:104070000000800000C100000000000000000000FF -:104080000041800000080000000000000000000067 -:104090000000800000C100000000000000000000DF -:1040A0000041800000080000000000000000000047 -:1040B0000000000000000000000000000000000000 -:1040C00000000000000000000000000000000000F0 -:1040D0000000400000C100000000000000000000DF -:1040E00000C182000001000000000000000000008C -:1040F00000000000400000C10000000000000000BF -:10410000000000C18200000100000000000000006B -:1041100000000000400000C100000000000000009E -:10412000000000C18200000100000000000000004B -:10413000000000000000000000000000000000007F -:10414000000000000000000000000000000000006F +:103D2000000000010001000100C00001000100C00E +:103D3000002100000101000800020001000100C094 +:103D4000000000010001000100C00001000100C0EE +:103D5000000500000101000800880001000100C00A +:103D60000000000000010001000100C0000100018E +:103D700000C00009000001010008008800010201E4 +:103D800000C0000000010001000100C000010001AE +:103D900000C000050000010100080004000140010E +:103DA00000C0000000410041004100C0004100414E +:103DB000008309410005024100800080004100416C +:103DC00000C0000000410041004100C0004100412E +:103DD00000830841000502410080000000410041CD +:103DE00000850000000000410041004100C000418A +:103DF0000041008310410005024100000000004125 +:103E000080410085000000410041004100C00041A8 +:103E10000041008308C1000502410000008000410C +:103E2000804100C00000410003000000008041000C +:103E3000C00000001000100090800000A0004100B1 +:103E4000C10000800000410003000000008041002C +:103E5000C0000000100010008280000083004100BC +:103E6000C1000080800000034100030000000080CA +:103E70004100C000000020001000880000009000F9 +:103E80004100C1000080800041000300000000806C +:103E90004100C000000020001000C0800000900021 +:103EA0004100C1000040800001000100000000C08E +:103EB0000100C00000000000410004020090C000AA +:103EC0000300C1000084202001000100000000C0A8 +:103ED0000100C00000000000410004020090C0008A +:103EE0000300C10000040400000001000100000004 +:103EF00000C00100C00000000000410004A00090CC +:103F0000C1000900C100000482000100010000009E +:103F100000C00100C0000000000083000402009007 +:103F2000C1008300C1000040820000C00001C0C188 +:103F300000000000000100C182830003000100C1F5 +:103F40000000000000010000000000C00001C0C12E +:103F500000000000000100C182050011000100C145 +:103F600000000000000100000000000000C000018F +:103F7000C0C100000000000100C182410021000119 +:103F800000C10000000000010000000000C00001AE +:103F9000C0C100000000000100C1824100210001F9 +:103FA00000C100000000000100000000008000418E +:103FB00080C10000000000410090802000410041CD +:103FC00000C10000000000410040000000800041EE +:103FD00080C1000000000041009080A0004100412D +:103FE00000C100000000004100050000000000804A +:103FF000004180C10000000000410090802000418D +:10400000004100C1000000000041000500000080E8 +:10401000004180C10000000000410090802000416C +:10402000004100C100000000004100400000C1004C +:10403000800080C100004100000808004100C1412B +:104040008000800200004100000080004100C100AB +:10405000800080C100004100000808004100C1410B +:10406000800080020000410000008000410000004C +:10407000C100800080C1000041000008080041002C +:10408000C14180008002000041000000800041002A +:10409000C100800080C10000410000080300410011 +:1040A000C14100008002000041000000800041008A +:1040B000C1004000C0C100000100200091000100CB +:1040C000C1910800C001000001000000C000010013 +:1040D000C1004000C0C100000100200091000100AB +:1040E000C1910800C001000001000000C0000100F3 +:1040F0000000C1004000C0C100000100200091008C +:104100000100C1910800C001000001000000C000D2 +:104110000100C1004000C0C100000100200090006B +:104120000100C1914000C001000001000000C0007A +:10413000010000000000000000420000000000003C +:104140000000811200480700480000000000000045 :10415000000000000000000000420000000000001D -:104160004800810000E0000048000000000000005E -:1041700000420000000000000000004200000000BB -:1041800000004800810000E000004800000000003E -:10419000000000420000000000000042000000009B -:1041A00000004800810000E000004800000000001E -:1041B00000000042000000000000000000000000BD +:104160000000811200480700480000000000000025 +:1041700000000000000000000000004200000000FD +:104180000000000081120048070048000000000005 +:1041900000000000000000000000004200000000DD +:1041A00000000000811200480700480000000000E5 +:1041B00000000000000000000000000000000000FF :1041C00000000000000000000000000000000000EF :1041D00000000000000000000000000000000000DF :1041E00000000000000000000000000000000000CF @@ -148558,454 +148558,454 @@ :10428000000000000000000000000000000000002E :10429000000000000000000000000000000000001E :1042A000000000000000000000000000000000000E -:1042B00000000000000000000000000000000000FE +:1042B0000000000000000000757B0000000000000E :1042C00000000000000000000000000000000000EE -:1042D0000000000000000000747B000000000000EF +:1042D000000000000000DEAE757B00000000000062 :1042E00000000000000000000000000000000000CE -:1042F000000000000000DE2E0000747B00000000C3 +:1042F000000000000000DEAE0000757B0000000042 :1043000000000000000000000000000000000000AD -:104310000000000000000000DE2E747B00000000A2 +:104310000000000000000000DEAE757B0000000021 :10432000000000000000000000000000000000008D -:104330000000000000000000DE2E00000000000071 -:10434000000000000000000000000000000000006D -:104350000000000000000000000061560340000063 -:10436000000000000231E0000000000000000C40EE -:1043700000000000000002C06A8600006156034091 -:104380000000000000000231E0000000000000001A -:104390000C4000000000000002C06A866156034025 -:1043A0000000000000000231E000000000000000FA -:1043B0000C4000000000000002C06A8600000000FF -:1043C00000000000000000000000000000000000ED -:1043D000000000000000000000000000000040009D -:1043E00000000000000000000000000000000000CD -:1043F00000000000000000000000000000020000BB -:10440000200000000000A0000000000000000000EC -:10441000000200000000000000000000000000009A -:104420000000000000000000000000000011A000DB -:10443000000000000000000000000000000000007C +:104330000000000000000000DEAE60C603000000C8 +:10434000000000000031E0000000000000000C0050 +:1043500000000000000000C0630660C6030000000B +:10436000000000000031E0000000000000000C0030 +:1043700000000000000000C06306000060C60300EB +:104380000000000000000031E0000000000000001C +:104390000C0000000000000000C0630660C60300BF +:1043A0000000000000000031E000000000000000FC +:1043B0000C0000000000000000C0630600000000C8 +:1043C000200000000000200020000000200020004D +:1043D000000020000000000020000000000000009D +:1043E000200000000000200020000000200020002D +:1043F000000020000000000020000000000000007D +:1044000040002000A00090002000200000002000BC +:10441000200000002000000000000000000000005C +:1044200020002000200000002000200000002000CC +:10443000200000002000000000000000000000003C :10444000000000000000000000000000000000006C -:104450000000000400040000000000000004000050 -:10446000000000000000000000000000000000004C -:104470000000000000040000000000000000000038 -:104480000002000000000000000000000000000426 -:104490000000000100000004000000000000100007 -:1044A0000000000000040004000000000000000004 -:1044B00000000000000000040000000200000000F6 +:10445000000000000000200000000000000000003C +:104460000000000000040000000000000000000048 +:104470000000000000000000050000000000000037 +:104480000000000200000002000000000000000028 +:104490000000000000040004000000000000000410 +:1044A000000000000000000000000000000000000C +:1044B00000000002000005000000050200040000EA :1044C00000000000000000000000000000000000EC :1044D00000000000000000000000000000000000DC :1044E00000000000000000000000000000000000CC -:1044F00000000000000008000000000000000000B4 -:10450000000000000000000000000041000000006A -:104510000200000000000000020000000000000097 +:1044F00000000000000000000000000000000000BC +:1045000000000000000000000000000000000000AB +:10451000000000000000000000000000000000009B :10452000000000000000000000000000000000008B :10453000000000000000000000000000000000007B :10454000000000000000000000000000000000006B :10455000000000000000000000000000000000005B :10456000000000000000000000000000000000004B -:10457000000000000000000000000000000000003B +:104570000084000000000084000000000000000033 :10458000000000000000000000000000000000002B -:10459000000080000008000000008008000000000B -:1045A00000000000000020000000008200840000E5 -:1045B00000000090000800000000008400000000DF +:10459000000000000000000000000000000000001B +:1045A000000000000000000000000000000000000B +:1045B00000000000000000000000000000000000FB :1045C00000000000000000000000000000000000EB :1045D00000000000000000000000000000000000DB :1045E00000000000000000000000000000000000CB :1045F00000000000000000000000000000000000BB -:104600000000000000008400900300000100400052 -:104610000000C0008800840000000002C0110409EE -:104620000000000900000000000000000000000081 -:104630000000000000000000000000000000000377 -:10464000000000000000000000000000000000006A -:10465000000000000000000000000000000000005A -:10466000000000000000000000000000000000004A -:1046700000000000000000000000000000000082B8 -:104680000000000000000000008800040000400856 -:10469000000000000000000000000000000000001A -:1046A0000082000000000000000000000000000880 -:1046B00020000000000000200400000000000000B6 -:1046C0000082000000000000000000000000000068 +:104600000000002100000000000000040000000085 +:104610000000000000110000000000000000000089 +:10462000000000000000000000000000000000008A +:10463000000000000000000000000000000000007A +:104640000000000000000800000008000800000052 +:10465000000000004100000000000008110000C040 +:104660000000000000000000000008000000000042 +:104670000000000000000000000000A00000008218 +:1046800000000000000000000000000008004000E2 +:104690002000000000000000090000000090000061 +:1046A00000000000000000000000000008000800FA +:1046B00008000000000000000000000000000000F2 +:1046C00000000000000000000000000000000000EA :1046D00000000000000000000000000000000000DA :1046E00000000000000000000000000000000000CA :1046F00000000000000000000000000000000000BA -:104700000000200000000000000000000000000089 -:104710002100000000000000000000000000000078 -:104720000080000000000000000000000000000009 +:1047000000000000000000000000000000000000A9 +:104710000000000000000000000000000000000099 +:104720000000000000000000000000000000100079 :104730000000000000000000000000000000000079 :104740000000000000000000000000000000000069 :104750000000000000000000000000000000000059 :104760000000000000000000000000000000000049 :104770000000000000000000000000000000000039 -:1047800000000000000000001000000000200000F9 -:1047900000004000000005000000000000000000D4 -:1047A0000000030400000000000000000000000002 -:1047B00000004100080000000000000000000000B0 -:1047C00005000000000000000000000000000000E4 +:104780000000000000000000000000000000000029 +:104790000000000000000000000000000000000019 +:1047A0000000000000000000000000000000000009 +:1047B00000000000000000000000000000000000F9 +:1047C000000000000000000000000000C000000029 :1047D00000000000000000000000000000000000D9 :1047E00000000000000000000000000000000000C9 :1047F00000000000000000000000000000000000B9 :1048000000000000000000000000000000000000A8 -:10481000000041004005900890000000880400005E -:104820000000000400000400000000000000000080 -:104830000000000000020000000000000000000076 +:104810000000000000020000000000000000000096 +:104820000000000000000000000000000000000088 +:104830000000000000000000000000000000000078 :104840000000000000000000000000000000000068 -:104850000000000000000000000000000000000058 -:104860000000000000000000000000000000000048 -:104870000000000000000000000000000000000830 -:1048800000A0000000080000000000000000000080 -:1048900000000000200080884000000005000501A5 -:1048A00000080002000300080000000000000000F3 -:1048B00000000000000000000000000000000000F8 -:1048C00040080000000000A0000000000000000000 +:104850000000000000000000080008000008080038 +:104860000800000008000000000000000000000038 +:1048700000000000000000000800080000A00890F0 +:104880000800000008000000000000000000000018 +:104890000000000000000000000008000800009078 +:1048A0000890080005000800000000000800000053 +:1048B00000000000000000000000080008000000E8 +:1048C00008000800030008000000000000000000CD :1048D00000000000000000000000000000000000D8 :1048E00000000000000000000000000000000000C8 :1048F00000000000000000000000000000000000B8 :1049000000000000000000000000000000000000A7 -:10491000000000000480010000800000010000820F -:104920000408010001000000000000000000000079 -:104930000020000000000000000000000000000057 +:104910000000000000000000000000000000000097 +:104920000000000000000000000000000000000087 +:104930000000000000000000000000000000000077 :104940000000000000000000000000000000000067 :104950000000000000000000000000000000000057 :104960000000000000000000000000000000000047 :104970000000000000000000000000000000000037 -:1049800000000000000000000000200000100000F7 -:104990000000000000820020040020200000200011 -:1049A00041031082200040000000000000000000D1 +:104980000000000000000000000000000000000027 +:104990000000000000000000000000000000000017 +:1049A0000000000000000000000000000000000007 :1049B00000000000000000000000000000000000F7 :1049C00000000000000000000000000000000000E7 :1049D00000000000000000000000000000000000D7 :1049E00000000000000000000000000000000000C7 :1049F00000000000000000000000000000000000B7 :104A000000000000000000000000000000000000A6 -:104A100000000000000010000090000210A0004004 -:104A20000084082000840190A089822000200000DA +:104A10000000000000000000000000000000000096 +:104A20000000000000000000000000000000000086 :104A30000000000000000000000000000000000076 :104A40000000000000000000000000000000000066 :104A50000000000000000000000000000000000056 :104A60000000000000000000000000000000000046 :104A70000000000000000000000000000000000036 :104A80000000000000000000000000000000000026 -:104A90000000000000000000000010800000000086 -:104AA00008800000000000001120882180410010D3 +:104A90000000000000000000000000000000000016 +:104AA0000000000000000000000000000000000006 :104AB00000000000000000000000000000000000F6 :104AC00000000000000000000000000000000000E6 :104AD00000000000000000000000000000000000D6 :104AE00000000000000000000000000000000000C6 :104AF00000000000000000000000000000000000B6 :104B000000000000000000000000000000000000A5 -:104B100000000000000000000000200004009100E0 -:104B2000A100080021401010020010002120118077 -:104B300010900000000000000000000000000000D5 +:104B10000000000000000000000000000000000095 +:104B20000000000000000000000000000000000085 +:104B30000000000000000000000000000000000075 :104B40000000000000000000000000000000000065 :104B50000000000000000000000000000000000055 :104B60000000000000000000000000000000000045 :104B70000000000000000000000000000000000035 :104B80000000000000000000000000000000000025 -:104B9000000000000000000000000000000089008C -:104BA000090091000102002001200000008801217D -:104BB000018400040000000000000000000000006C +:104B90000000000000000000000000000000000015 +:104BA0000000000000000000000000000000000005 +:104BB00000000000000000000000000000000000F5 :104BC00000000000000000000000000000000000E5 :104BD00000000000000000000000000000000000D5 :104BE00000000000000000000000000000000000C5 :104BF00000000000000000000000000000000000B5 :104C000000000000000000000000000000000000A4 -:104C1000000000000000000000000000000008018B -:104C20000040908810A1C0000000A0012001C00039 -:104C3000000000000801000000000000000000006B +:104C10000000000000000000000000000000000094 +:104C20000000000000000000000000000000000084 +:104C30000000000000000000000000000000000074 :104C40000000000000000000000000000000000064 :104C50000000000000000000000000000000000054 :104C60000000000000000000000000000000000044 :104C70000000000000000000000000000000000034 :104C80000000000000000000000000000000000024 :104C90000000000000000000000000000000000014 -:104CA0000008008880100008800300418004001183 -:104CB00080101003000080110000000000000000C0 +:104CA0000000000000000000000000000000000004 +:104CB00000000000000000000000000000000000F4 :104CC00000000000000000000000000000000000E4 :104CD00000000000000000000000000000000000D4 :104CE00000000000000000000000000000000000C4 :104CF00000000000000000000000000000000000B4 :104D000000000000000000000000000000000000A3 :104D10000000000000000000000000000000000093 -:104D200000000000000000000010100088110400C6 -:104D300083080800030003000010000000000000CA +:104D20000000000000000000000000000000000083 +:104D30000000000000000000000000000000000073 :104D40000000000000000000000000000000000063 :104D50000000000000000000000000000000000053 :104D60000000000000000000000000000000000043 :104D70000000000000000000000000000000000033 :104D80000000000000000000000000000000000023 :104D90000000000000000000000000000000000013 -:104DA000000000000000000800A000010300050151 -:104DB00021000300900020002000100100000000EE +:104DA0000000000000000000000000000000000003 +:104DB00000000000000000000000000000000000F3 :104DC00000000000000000000000000000000000E3 :104DD00000000000000000000000000000000000D3 :104DE00000000000000000000000000000000000C3 :104DF00000000000000000000000000000000000B3 :104E000000000000000000000000000000000000A2 :104E10000000000000000000000000000000000092 -:104E2000000000000000000000E00700000000009B -:104E300000E000004100000000E000004100000030 +:104E20000000000000000000000000000000000082 +:104E30000000000000000000000000000000000072 :104E40000000000000000000000000000000000062 :104E50000000000000000000000000000000000052 :104E60000000000000000000000000000000000042 :104E70000000000000000000000000000000000032 :104E80000000000000000000000000000000000022 :104E90000000000000000000000000000000000012 -:104EA000000000000000000000000000F0F0AAAACE -:104EB0001A1FBABF000000003F0A3FFA00000000BE +:104EA0000000000000000000000000000000000002 +:104EB00000000000000000000000000000000000F2 :104EC00000000000000000000000000000000000E2 :104ED00000000000000000000000000000000000D2 :104EE00000000000000000000000000000000000C2 :104EF00000000000000000000000000000000000B2 :104F000000000000000000000000000000000000A1 :104F10000000000000000000000000000000000091 -:104F20000000000000000000000000000000F0F0A1 -:104F300000FF1015B0B500000000300A30FA000084 +:104F20000000000000000000000000000000000081 +:104F30000000000000000000000000000000000071 :104F40000000000000000000000000000000000061 :104F50000000000000000000000000000000000051 :104F60000000000000000000000000000000000041 :104F70000000000000000000000000000000000031 :104F80000000000000000000000000000000000021 :104F90000000000000000000000000000000000011 -:104FA000000000000000000000000000F734F734AB -:104FB000AFFFAFFFFD5DF858000000007F7C73700D +:104FA0000000000000000000000000000000000001 +:104FB00000000000000000000000000000000000F1 :104FC00000000000000000000000000000000000E1 :104FD00000000000000000000000000000000000D1 :104FE00000000000000000000000000000000000C1 :104FF00000000000000000000000000000000000B1 :1050000000000000000000000000000000000000A0 :105010000000000000000000000000000000000090 -:105020000000000000000000000000000000C704B5 -:10503000C704AFFF0000AD0DA808000000004F4CF2 -:1050400043400000000000000000000000000000DD +:105020000000000000000000000000000000000080 +:105030000000000000000000000000000000000070 +:105040000000000000000000000000000000000060 :105050000000000000000000000000000000000050 :105060000000000000000000000000000000000040 :105070000000000000000000000000000000000030 :105080000000000000000000000000000000000020 :105090000000000000000000000000000000000010 :1050A0000000000000000000000000000000000000 -:1050B00000610006000500000061300400090000E6 -:1050C000006130020001000000000000000000004C +:1050B00000000000000000000000000000000000F0 +:1050C00000000000000000000000000000000000E0 :1050D00000000000000000000000000000000000D0 :1050E00000000000000000000000000000000000C0 :1050F00000000000000000000000000000000000B0 :10510000000000000000000000000000000000009F :10511000000000000000000000000000000000008F :10512000000000000000000000000000000000007F -:1051300000000000000000000000353F353000DFB7 -:10514000DFDF550000008A8ACFCF0000000000009A +:10513000000000000000000000000000000000006F +:10514000000000000000000000000000000000005F :10515000000000000000000000000000000000004F :10516000000000000000000000000000000000003F :10517000000000000000000000000000000000002F :10518000000000000000000000000000000000001F :10519000000000000000000000000000000000000F :1051A00000000000000000000000000000000000FF -:1051B0000000000000000000000C0C0C353F3530F2 -:1051C00000DFDFDF05000000AAAAFFFF00000000EB +:1051B00000000000000000000000000000000000EF +:1051C00000000000000000000000000000000000DF :1051D00000000000000000000000000000000000CF :1051E00000000000000000000000000000000000BF :1051F00000000000000000000000000000000000AF :10520000000000000000000000000000000000009E :10521000000000000000000000000000000000008E :10522000000000000000000000000000000000007E -:105230000000000000000000000000FFB4B4000007 -:1052400000000E0A0400D70F140F303FA0AF00007B +:10523000000000000000000000000000000000006E +:10524000000000000000000000000000000000005E :10525000000000000000000000000000000000004E :10526000000000000000000000000000000000003E :10527000000000000000000000000000000000002E :10528000000000000000000000000000000000001E :10529000000000000000000000000000000000000E :1052A00000000000000000000000000000000000FE -:1052B00000000000000000000000000000FFB4B487 -:1052C000000000000E0A0400D70F140F303FA0AFFB +:1052B00000000000000000000000000000000000EE +:1052C00000000000000000000000000000000000DE :1052D00000000000000000000000000000000000CE :1052E00000000000000000000000000000000000BE -:1052F000000000000000000020000000880088007E -:10530000000000000000C00000000000200020009D -:10531000C000880000000000000000002000200005 -:1053200000000000000020008800000000002000B5 -:10533000200020000000000000030000000020000A -:105340002000004000000000200020000000C000FD -:10535000880000004004000000050000000020005C -:10536000200000000000000020002000400000009D -:1053700040004000880040000000000000000000E5 -:10538000000000000000000010000000000000000D +:1052F00000000000000000000000000000000000AE +:10530000000000002000000000000000000020005D +:10531000000000000000000000000000000000008D +:10532000000000002000000000000000000020003D +:10533000000000000000000000000000000000006D +:1053400000000000000020001000400000001000DD +:10535000200000000000000000000000000000002D +:1053600000000000000220002000200000002000BB +:10537000200000000000000000000000000000000D +:10538000000000000000000000000000000000001D :10539000000000000000000000000000000000000D -:1053A00000000000000000001000000000000000ED +:1053A00041000000000000000000000000000000BC :1053B00000000000000000000000000000000000ED -:1053C00000000000000000000002000000000000DB -:1053D000000010000000000240001000100000005B -:1053E00000000000000000000000100000000000AD -:1053F000000010000000000000401000000000004D -:10540000000000000000000000000000000000009C +:1053C000000000000000000000002100000021009B +:1053D00000000000000000000000000000000000CD +:1053E00000000000000000000000000000000000BD +:1053F00000000000000000000000000000000000AD +:10540000000000000000000000000010000000008C :10541000000000000000000000000000000000008C -:10542000000000000000000000000000000000007C -:10543000000000002000000000000010000000003C -:1054400000000000001000000000000004900000B8 -:10545000000000040010000400000004000002002E -:1054600000000080080000000080000000800000B4 -:1054700000200000008000800080002000800000EC -:105480000000000000000000000000840000000098 +:10542000000000000000000000000010000000006C +:10543000000000000000000000000000000000006C +:10544000000000000000000000000002001000004A +:10545000000000000000000000000000000000004C +:10546000000000000000000000000000001000002C +:10547000000000000000000000000000000000002C +:10548000000000000000000000000000000000001C :10549000000000000000000000000000000000000C -:1054A00000000000000000040000000000080000F0 -:1054B00000000084000080000000000000010000E7 -:1054C0000000000000000001000200000000802138 -:1054D00000000000000100010001000000010000C8 -:1054E00000000000002080000000002000000020DC -:1054F000000000010000002000200020000100202A -:10550000000000000000000000080021000000086A -:105510000000000000080000000000400003000040 -:10552000000000000000000000000000000000007B -:105530000000000004000000000000000000000067 -:1055400000000000000000030000002190000000A7 -:105550000000000300800000000300880008001025 -:1055600000000021002000210000001000000110B8 -:105570000009001000000010000000000000000002 +:1054A00000000000000000000000000000000000FC +:1054B00000000000000000000000000000000000EC +:1054C00000000000000000000000000000000000DC +:1054D00000000000000000000000000000000000CC +:1054E00000000000000000000000000000000000BC +:1054F00000000000000000000000000000000000AC +:10550000000000000000000000000000080008008B +:10551000000000000000000000000000000000008B +:10552000000000000000000004000000080002006D +:10553000000000000000000000000000000000006B +:105540000000000000000000000000000000080053 +:1055500040000000400004000000040000000000C3 +:105560000000000000000000000000000000080033 +:10557000080000000000080000000000000000001B :10558000000000000000000000000000000000001B :10559000000000000000000000000000000000000B :1055A00000000000000000000000000000000000FB -:1055B00000000000000000000000090000000000E2 -:1055C0000000000000004000050005A01190100040 -:1055D00021882188000000040000000400400082AF -:1055E000008300080000000100000000000100002E -:1055F0000201002000010000000100000000000086 -:105600000000000000000000000000000000080092 +:1055B00000000000000000000000000000000000EB +:1055C00000000000000000000000000000000000DB +:1055D00004000020000000000000000000000000A7 +:1055E00000000000000000000000000000000000BB +:1055F00000000000000000000000000000000000AB +:10560000000000000000000000000000000000009A :10561000000000000000000000000000000000008A -:1056200000000000080000000000000084000000EE +:10562000000000000000000000000000000000007A :10563000000000000000000000000000000000006A -:1056400000000000000000002000880010000000A2 -:1056500000000000001100800000000008000800A9 -:105660000800C00000808480840010000800A000B2 -:105670008200080000000000000000000800000098 -:105680000800000000000000000000000000000012 +:10564000000000000000000000000000000000005A +:10565000000000000000000000000000000000004A +:10566000000000000000000000000000000000003A +:10567000000000000000000000000000000000002A +:10568000000000000000000000000000000000001A :10569000000000000000000000000000000000000A :1056A00000000000000000000000000000000000FA :1056B00000000000000000000000000000000000EA -:1056C000000000000000000000008000000000005A -:1056D00000000000000000000004000000000000C6 -:1056E0000000000000000004002000000000830013 -:1056F0000300000080000000000000000000000027 -:105700000000000000000000000000000021000078 +:1056C00000000000000000000000000000000000DA +:1056D00000000000000000000000000000000000CA +:1056E00000000000000000000000000000000000BA +:1056F00000000000000000000000000000000000AA +:105700000000000000000000000000000000000099 :105710000000000000000000000000000000000089 -:105720000000000000000000000000030000000076 -:105730000008000000000000000000000000000061 -:10574000000002004020400000000000C0052008CA -:10575000A000C0040040A000A0040000C002840318 -:1057600011034021C0A00840002084020003A000D3 -:105770000000A003C0008200000008000400080030 -:105780000004000000000000000000000000000015 +:105720000000000000000000000000000000000079 +:105730000000000000000000000000000000000069 +:105740000000000000000000000000000000000059 +:105750000000000004000000040000000000000041 +:105760000000000000000000000000000000000039 +:105770000000000000000000000000000000000029 +:105780000000000000000000000000000000000019 :105790000000000000000000000000000000000009 -:1057A00000000000000000000000000000000000F9 -:1057B00000000000000000000000000000000000E9 -:1057C0000000000000000000000000000040000297 -:1057D00080000004409004A005881109200000000A -:1057E0000004200800000005800002030000000003 -:1057F00000000000000000000000000080008000A9 -:105800008000000000000000000000000000000018 +:1057A0000090000000000000000000000000000069 +:1057B00000000000000000000000040000000000E5 +:1057C00000000000000000000000000000000000D9 +:1057D0000000000000000000000000004100000088 +:1057E000410009000000000000000000000000006F +:1057F00000000000000000000000000000000000A9 +:105800000000000000000000000000000000000098 :105810000000000000000000000000000000000088 :105820000000000000000000000000000000000078 :105830000000000000000000000000000000000068 -:1058400008000000000000000000840000000000CC -:105850009003840084040003200884210241000096 -:105860000021A00084030020C000A0210000C0216E -:105870000003002100000000000000000000C00242 -:10588000000008008200000000000000000000008E +:105840000000000000000000000000000000000058 +:105850000000000000000000000000000000000048 +:105860000000000000000000000000000000000038 +:105870000000000000000000000000000000000028 +:105880000000000000000000000000000000000018 :105890000000000000000000000000000000000008 :1058A00000000000000000000000000000000000F8 :1058B00000000000000000000000000000000000E8 :1058C00000000000000000000000000000000000D8 -:1058D00000000000000000010000800000008000C7 -:1058E0000000000000002100000100000000000096 +:1058D00000000000000000000000000000000000C8 +:1058E00000000000000000000000000000000000B8 :1058F00000000000000000000000000000000000A8 :105900000000000000000000000000000000000097 :105910000000000000000000000000000000000087 :105920000000000000000000000000000000000077 :105930000000000000000000000000000000000067 -:1059400000000000000000009088008801C0901056 -:105950000000000200C00820002000C00140000438 -:10596000000401090104040200A001080090048859 -:105970009011029000900010000208A090020040D8 -:10598000908282A0400200822002044000900040E9 -:105990000004000000000000000000000000000003 +:105940000000000000000000000000000000000057 +:105950000000000000000000000000000000000047 +:105960000000000000000000000000000000000037 +:105970000000000000000000000000000000000027 +:105980000000000000000000000000000000000017 +:105990000000000000000000000000000000000007 :1059A00000000000000000000000000000000000F7 :1059B00000000000000000000000000000000000E7 -:1059C0000000000000000000000080000000050052 -:1059D0000080000011000000800000000000208016 -:1059E0000080008011A041A180A00000110200A150 -:1059F00080050082800000800080008080808080A0 -:105A0000000000804080008000800080C000008096 -:105A10000000008000000000000000000000000006 +:1059C00000000000000000000000000000000000D7 +:1059D00000000000000000000000000000000000C7 +:1059E00000000000000000000000000000000000B7 +:1059F00000000000000000000000000000000000A7 +:105A00000000000000000000000000000000000096 +:105A10000000000000000000000000000000000086 :105A20000000000000000000000000000000000076 :105A30000000000000000000000000000000000066 -:105A400000000000000000000000000000110084C1 -:105A50008000000000001000C121A0110088880013 -:105A60000005111182002000021011802020090081 -:105A70008309918082050000801000800000800072 -:105A800080118000800080008021800080008000E4 -:105A900080218000808000000000000000000000E5 +:105A40000000000000000000000000000000000056 +:105A50000000000000000000000000000000000046 +:105A60000000000000000000000000000000000036 +:105A70000000000000000000000000000000000026 +:105A80000000000000000000000000000000000016 +:105A90000000000000000000000000000000000006 :105AA00000000000000000000000000000000000F6 :105AB00000000000000000000000000000000000E6 -:105AC00000000000000000000000000000002000B6 -:105AD0000808A0880020000011000208852182111A -:105AE000028810088909912021A090821102880063 -:105AF00000000200A1109100200004000810000026 -:105B000004000200A000900002000200A00090002B -:105B10000400020084000490000000000000000067 +:105AC00000000000000000000000000000000000D6 +:105AD00000000000000000000000000000000000C6 +:105AE00000000000000000000000000000000000B6 +:105AF00000000000000000000000000000000000A6 +:105B00000000000000000000000000000000000095 +:105B10000000000000000000000000000000000085 :105B20000000000000000000000000000000000075 :105B30000000000000000000000000000000000065 :105B40000000000000000000000000000000000055 -:105B500010400008000888880000100100000001C3 -:105B60000901A00100019000110184010000000062 -:105B70000301C010009104100111000200200090E8 -:105B8000A0A004100000000200080040000000086F -:105B900002080440004090020004000000000000E1 +:105B50000000000000000000000000000000000045 +:105B60000000000000000000000000000000000035 +:105B70000000000000000000000000000000000025 +:105B80000000000000000000000000000000000015 +:105B90000000000000000000000000000000000005 :105BA00000000000000000000000000000000000F5 :105BB00000000000000000000000000000000000E5 :105BC00000000000000000000000000000000000D5 -:105BD00000000000000000000080000080080010AD -:105BE00000208911000800030020914000201100CE -:105BF00005028911800320038089110200800000C2 -:105C00000080808080800000008000000000000094 -:105C10000000800080000080808000800000000084 +:105BD00000000000000000000000000000000000C5 +:105BE00000000000000000000000000000000000B5 +:105BF00000000000000000000000000000000000A5 +:105C00000000000000000000000000000000000094 +:105C10000000000000000000000000000000000084 :105C20000000000000000000000000000000000074 :105C30000000000000000000000000000000000064 :105C40000000000000000000000000000000000054 -:105C500000000000000280000080808000001080B2 -:105C6000A09103800810C180910388808209804040 -:105C700011A089800303039191808280020080003B -:105C80000080008080008000000080000000000094 -:105C9000000000800000800580000080800000007F +:105C50000000000000000000000000000000000044 +:105C60000000000000000000000000000000000034 +:105C70000000000000000000000000000000000024 +:105C80000000000000000000000000000000000014 +:105C90000000000000000000000000000000000004 :105CA00000000000000000000000000000000000F4 :105CB00000000000000000000000000000000000E4 :105CC00000000000000000000000000000000000D4 -:105CD00000000000000088002000A004020800006E -:105CE000C00885032184910002C009A005100500A9 -:105CF0000200418240028901084103024004010080 -:105D0000900020100004A0000800904002008200D3 -:105D100082004000900208009000200082040400ED +:105CD00000000000000000000000000000000000C4 +:105CE00000000000000000000000000000000000B4 +:105CF00000000000000000000000000000000000A4 +:105D00000000000000000000000000000000000093 +:105D10000000000000000000000000000000000083 :105D20000000000000000000000000000000000073 :105D30000000000000000000000000000000000063 :105D40000000000000000000000000000000000053 -:105D50000000000000000000000000E00000000063 -:105D60000000000000E000000000000000E007006C -:105D70004100000000E000008100000000E007009A -:105D800060000000000007000000000000000700A5 -:105D900000000000000007000000000000000700F5 +:105D50000000000000000000000000000000000043 +:105D60000000000000000000000000000000000033 +:105D70000000000000000000000000000000000023 +:105D80000000000000000000000000000000000013 +:105D90000000000000000000000000000000000003 :105DA00000000000000000000000000000000000F3 :105DB00000000000000000000000000000000000E3 :105DC00000000000000000000000000000000000D3 -:105DD00000000000000000000000B4B4FF99C900FA -:105DE000C90F0000FE9EF89800000000FEF2CEC22F -:105DF00000000000F9607E7E0000000066F066F0A2 -:105E000000C0FFC0FFE73C24F7F7F70000FF0000E9 -:105E1000000024240CCF000000000024FFFF3C3CC5 -:105E20007EFF70F000000000000000000000000095 +:105DD00000000000000000000000000000000000C3 +:105DE00000000000000000000000000000000000B3 +:105DF00000000000000000000000000000000000A3 +:105E00000000000000000000000000000000000092 +:105E10000000000000000000000000000000000082 +:105E20000000000000000000000000000000000072 :105E30000000000000000000000000000000000062 :105E40000000000000000000000000000000000052 -:105E5000000000000000000000000000B4B4660074 -:105E6000C9F0C9FF00006E0E6808000000003E3255 -:105E70000E0200000000F960181800000000FFF09A -:105E800000F000000000DBC31800F7F7F700C0C007 -:105E90000000420066240C0C000066660024FF0F20 -:105EA0003C0C7EFF70F000000000000000000000CD +:105E50000000000000000000000000000000000042 +:105E60000000000000000000000000000000000032 +:105E70000000000000000000000000000000000022 +:105E80000000000000000000000000000000000012 +:105E90000000000000000000000000000000000002 +:105EA00000000000000000000000000000000000F2 :105EB00000000000000000000000000000000000E2 :105EC00000000000000000000000000000000000D2 :105ED00000000000000000000000000000000000C2 @@ -149017,155 +149017,155 @@ :105F30000000000000000000000000000000000061 :105F40000000000000000000000000000000000051 :105F50000000000000000000000000000000000041 -:105F6000663C0FFFFC3CFC3C0000C4C7F4F767072D -:105F7000610123E32FEFDBDB181864F46DFDF0C340 -:105F8000F0C30C0CCFCF6666FFFF20B926BF000020 -:105F900000003F3F003F6646FFCF66FF46CF0F0C35 -:105FA000FF3C3CFF3CFF00FFFFFF00000000000043 +:105F60000000000000000000000000000000000031 +:105F70000000000000000000000000000000000021 +:105F80000000000000000000000000000000000011 +:105F90000000000000000000000000000000000001 +:105FA00000000000000000000000000000000000F1 :105FB00000000000000000000000000000000000E1 :105FC00000000000000000000000000000000000D1 :105FD00000000000000000000000000000000000C1 -:105FE0000000663C0F00F000F000000004073437AA -:105FF000F797F19120E02CECF330F33004940D9DF1 -:1060000099FF990000FF00FF6660FFF020B926BFEE -:10601000007000703F3F3F3F6646FFCF66FF46CFB0 -:106020000F0FFFFF30F03CFF00FCFCFC0000000005 +:105FE00000000000000000000000000000000000B1 +:105FF00000000000000000000000000000000000A1 +:106000000000000000000000000000000000000090 +:106010000000000000000000000000000000000080 +:106020000000000000000000000000000000000070 :106030000000000000000000000000000000000060 :106040000000000000000000000000000000000050 :106050000000000000000000000000000000000040 -:106060000000000000613007000D0000000000612A -:106070003004000100000061300C000100A000614C -:10608000300000010000006100000011000000006D -:106090000000000000008000000000000000000080 +:106060000000000000000000000000000000000030 +:106070000000000000000000000000000000000020 +:106080000000000000000000000000000000000010 +:106090000000000000000000000000000000000000 :1060A00000000000000000000000000000000000F0 :1060B00000000000000000000000000000000000E0 :1060C00000000000000000000000000000000000D0 :1060D00000000000000000000000000000000000C0 :1060E00000000000000000000000000000000000B0 -:1060F000FF0F000F00F7F7F7DF1CD310FFFFC3FF00 -:10610000F351F3513C14FF55FF3CF030F070FF7D2C +:1060F00000000000000000000000000000000000A0 +:10610000000000000000000000000000000000008F :10611000000000000000000000000000000000007F :10612000000000000000000000000000000000006F :10613000000000000000000000000000000000005F :10614000000000000000000000000000000000004F :10615000000000000000000000000000000000003F :10616000000000000000000000000000000000002F -:1061700000003C0F3C0F00F7F7F7DF1CD310F0F0E6 -:10618000C0F0FF55FF553C3CFFFFFF3CFF3CF0706B -:10619000FF7D000000000000000000000000000083 +:10617000000000000000000000000000000000001F +:10618000000000000000000000000000000000000F +:1061900000000000000000000000000000000000FF :1061A00000000000000000000000000000000000EF :1061B00000000000000000000000000000000000DF :1061C00000000000000000000000000000000000CF :1061D00000000000000000000000000000000000BF :1061E00000000000000000000000000000000000AF -:1061F0000000000000000000F0BEF0BE0000000043 -:1062000000FFAAAAFAFAFA003CFF1C5FF534FF3C33 -:1062100000F3F3F3000000000000000000000000A5 +:1061F000000000000000000000000000000000009F +:10620000000000000000000000000000000000008E +:10621000000000000000000000000000000000007E :10622000000000000000000000000000000000006E :10623000000000000000000000000000000000005E :10624000000000000000000000000000000000004E :10625000000000000000000000000000000000003E :10626000000000000000000000000000000000002E -:1062700000000000000000000000F014F014000016 -:10628000000000FF3C3CFFFFFF003CFF1C5FF534BB -:10629000FF3C00FFFFFF00000000000000000000C6 +:10627000000000000000000000000000000000001E +:10628000000000000000000000000000000000000E +:1062900000000000000000000000000000000000FE :1062A00000000000000000000000000000000000EE -:1062B000000000000000000000002000200400009A -:1062C000000010001000100000000000200000007E -:1062D000000000002000000000002002200200005A -:1062E000000000000002000000000000200000008C -:1062F000000000002000000000000000200020043A -:10630000000000000000000000000000000020006D -:106310000000000000002002000000002000200219 -:1063200000008800000084008400040000022002B5 -:10633000000000000000200000000000000000003D -:10634000000000000000000000004000000000000D -:1063500000000000004000000002000000000000FB -:1063600000020000000040000000000000000000EB -:106370000000000000000900000000000000000014 -:10638000000000000000000000000000000000000D -:106390000000000000000000000000020082000079 +:1062B00000000000000000000000000000000000DE +:1062C00000000000000000000000000000000000CE +:1062D00000000000000000000000000000000000BE +:1062E00000000000000000000000000000040000AA +:1062F000000000000000000000000000000000009E +:10630000000000000000000000000000000000008D +:106310000000000000000000000000000002000477 +:106320000000000000000004000000000000000069 +:10633000000000000000000000000000000000005D +:10634000000000000000000000000000000000004D +:10635000000000000000000000000000000000003D +:1063600000000000000000000000400400000000E9 +:10637000000000000000000000000000000000001D +:1063800000000000000000000000000000004000CD +:1063900000000000000000000000000000000000FD :1063A00000000000000000000000000000000000ED -:1063B00000000000000200000000000000000000DB +:1063B00000000000000000000000000000000000DD :1063C00000000000000000000000000000000000CD :1063D00000000000000000000000000000000000BD :1063E00000000000000000000000000000000000AD :1063F000000000000000000000000000000000009D :10640000000000000000000000000000000000008C :10641000000000000000000000000000000000007C -:106420000003000000000000000000000000000069 +:10642000000000000000000000000000000000006C :10643000000000000000000000000000000000005C :10644000000000000000000000000000000000004C -:106450000000000000000000000000000000000438 -:1064600000040000000000000000008200000000A6 +:10645000000000000000000000000000000000003C +:10646000000000000000000000000000000000002C :10647000000000000000000000000000000000001C :10648000000000000000000000000000000000000C :1064900000000000000000000000000000000000FC :1064A00000000000000000000000000000000000EC :1064B00000000000000000000000000000000000DC -:1064C00000000000000000000000000000080000C4 +:1064C00000000000000000000000000000000000CC :1064D00000000000000000000000000000000000BC :1064E00000000000000000000000000000000000AC :1064F000000000000000000000000000000000009C -:10650000000020002000000088000000880000003B -:106510002000C0000000004000000000000000005B -:106520000009000000000000000000000000000062 -:1065300088000000000000000000000000000000D3 -:10654000000000080008100000000000000000002B -:106550000900000000000000000000000000000032 -:10656000100000000000000000000000000000001B -:1065700008000000000040000000000011001100B1 -:10658000000000840000200011A041880090090054 -:10659000090200A04100000000C011C0050409006C -:1065A000000000040000000000020088000000005D -:1065B00011000000000000000000000000000000CA +:10650000000000000000200000000000000000006B +:10651000000000000000000000000000000000007B +:10652000000000000000000000000000000000006B +:10653000000000000000000000000000000000005B +:10654000000000000000000000000000000000004B +:106550000000000000000000000000000000090032 +:10656000000000000000000000000000000000002B +:10657000000000000000000000000000000000001B +:10658000000000000000000000000000000000000B +:1065900000000000000000000000000000000000FB +:1065A00000000000000000000000000000000000EB +:1065B00000000000000000000000000000000000DB :1065C00000000000000000000000000000000000CB :1065D00000000000000000000000000000000000BB :1065E00000000000000000000000000000000000AB -:1065F00008000000C00000000000000000000000D3 +:1065F000000000000000000000000000000000009B :10660000000000000000000000000000000000008A -:10661000000000000000000000000000000010006A -:10662000A0000000000000000000000000000000CA +:10661000000000000000000000000000000000007A +:10662000000000000000000000000000000000006A :10663000000000000000000000000000000000005A :10664000000000000000000000000000000000004A :10665000000000000000000000000000000000003A :10666000000000000000000000000000000000002A -:106670000000000000000000000000000000020018 -:106680000200000000000000000000000000000008 +:10667000000000000000000000000000000000001A +:10668000000000000000000000000000000000000A :1066900000000000000000000000000000000000FA :1066A00000000000000000000000000000000000EA :1066B00000000000000000000000000000000000DA :1066C00000000000000000000000000000000000CA :1066D00000000000000000000000000000000000BA :1066E00000000000000000000000000000000000AA -:1066F0000000080000000000000000000000000092 -:106700000000000000000000000082000000000007 -:1067100000000000880000000000000000000000F1 -:106720000000000000000000000000000002000067 +:1066F000000000000000000000000000000000009A +:106700000000000000000000000000000000000089 +:106710000000000000000000000000000000000079 +:106720000000000000000000000000000000000069 :106730000000000000000000000000000000000059 :106740000000000000000000000000000000000049 :106750000000000000000000000000000000000039 -:106760000000000000000000000000000000000029 +:106760000000000000000900000000000000000020 :106770000000000000000000000000000000000019 -:10678000001000880988400000000002000200009C -:10679000110209881190008411020290000000008B -:1067A00000901100000005000082000000000000C1 -:1067B0002000009009000300000000000000050018 +:106780000000000000000000000000000000000009 +:1067900000000000000000000000000000000400F5 +:1067A00000000000000000000000000000000000E9 +:1067B00000000000000000000000000000000000D9 :1067C00000000000000000000000000000000000C9 :1067D00000000000000000000000000000000000B9 :1067E00000000000000000000000000000000000A9 :1067F0000000000000000000000000000000000099 :106800000000000000000000000000000000000088 -:106810000000000000410000000000000000000037 -:1068200084090000000000000000000000000000DB +:106810000000000000000000000000000000000078 +:106820000000000000000000000000000000000068 :106830000000000000000000000000000000000058 :106840000000000000000000000000000000000048 :106850000000000000000000000000000000000038 :106860000000000000000000000000000000000028 :106870000000000000000000000000000000000018 -:106880000200000000000000000000000000000006 -:1068900000000000000000000000004000000000B8 -:1068A00000000200000000000000000000000000E6 +:106880000000000000000000000000000000000008 +:1068900000000000000000000000000000000000F8 +:1068A00000000000000000000000000000000000E8 :1068B00000000000000000000000000000000000D8 :1068C00000000000000000000000000000000000C8 :1068D00000000000000000000000000000000000B8 @@ -149265,217 +149265,217 @@ :106EB00000000000000000000000000000000000D2 :106EC00000000000000000000000000000000000C2 :106ED00000000000000000000000000000000000B2 -:106EE000000000000000040004000000200040003A -:106EF0000000000020001000000020002000000022 -:106F00000000000000000000000000002000000061 -:106F100000021000200000000000200020000011EE -:106F200001008800000000030000000000001000C5 -:106F30000010000020002000109100002080A00020 -:106F400000000020200000000000000000004000C1 -:106F5000000000042020200020004000200040000D -:106F600040000000200000000000000000000000C1 -:106F700000000040000200000000000000020000CD -:106F800000000002000200040000000000000000F9 -:106F900000000000000200040000000000004000AB -:106FA0000000040000900004000000000040000009 -:106FB000400000001002400200400010000041109C -:106FC000000000000041000000000000400000023E -:106FD0002000400000411041100440000000000269 -:106FE000000000000040000200000000000000005F +:106EE00000000000000000000000000000000000A2 +:106EF0000000000000000000000000000000000092 +:106F00000000000000000000000000000000000081 +:106F10000000000000000000000000000000000071 +:106F20000000001000000000000000000000000051 +:106F30000000000000000000000000000000000051 +:106F40000000000000000000000000000000000041 +:106F50000000000000000000000000000000000031 +:106F60000000000000000000000000000000000021 +:106F70000000000000000000000000000000000011 +:106F80000000000000000000000000000000000001 +:106F900000000000000000000000000000000000F1 +:106FA00000000000000000000000400000000000A1 +:106FB00000000000000000000000000000000000D1 +:106FC00000000000000000000004000000000000BD +:106FD00000000000000000000000000000000000B1 +:106FE00000000000000000000000000000000000A1 :106FF0000000000000000000000000000000000091 -:107000000000000000000000000000000000000080 -:107010000000000000000000080000000000000068 -:107020000010000000000000001000000000000040 -:107030000010001000000000000000000000000030 -:10704000000000000000010000000200000000003D +:10700000000000000000000002100000000000006E +:107010000000000000000000000000000000000070 +:10702000000000000000000002100000000000004E +:107030000000000000000000000000000000000050 +:1070400000000000000000000000084000000000F8 :107050000000000000000000000000000000000030 -:10706000000000000000000000000200000000001E -:107070000000000000020002000004000000000008 +:10706000000000000000000000000210000000000E +:107070000000000000000000000000000000000010 :107080000000000000000000000000000000000000 :1070900000000000000000000000000000000000F0 -:1070A00000000000000000000000020000000000DE -:1070B00000000001200000000000000000000000AF -:1070C000000000002000000004000000000000009C -:1070D00000000000000000000000001000000000A0 +:1070A00000000000000000000000000000000000E0 +:1070B00000000000000000000000000000000000D0 +:1070C00000000000000000000000000000000000C0 +:1070D00000000000000000000000000000000000B0 :1070E00000000000000000000000000000000000A0 :1070F0000000000000000000000000000000000090 :10710000000000000000000000000000000000007F :10711000000000000000000000000000000000006F -:10712000000000000000000088004000880000000F -:107130000000A000000000004000820004000000E9 -:1071400000000021000004001002102100000000D7 -:107150000000001082000021000000200184008453 -:10716000C000000000000840020000000000000015 +:10712000000000000000000000000000000000005F +:10713000000000000000000000000000000004004B +:10714000000004000000000000000000000000003B +:10715000000000000000000000000000000000002F +:10716000000000000000000000000000000000001F :10717000000000000000000000000000000000000F :1071800000000000000000000000000000000000FF :1071900000000000000000000000000000000000EF -:1071A0000000000000000088000000000000000057 -:1071B0000000000000000000000000040004840043 -:1071C000008400004100410080A000000000000099 -:1071D00000000000000000000000000000892021E5 -:1071E000002100000000000000000000000000007E +:1071A00000000000000000000000000000000000DF +:1071B00000000000000000000000000000000004CB +:1071C00000000000000000000000000000000000BF +:1071D00000000000000000000000000000000000AF +:1071E000000000000000000000000000000000009F :1071F000000000000000000000000000000000008F :10720000000000000000000000000000000000007E -:10721000000008000800000000000000000010004E -:1072200000000800900000000002000004000100BF +:10721000000000000000000000000000000000006E +:10722000000000000000000000000000000000005E :10723000000000000000000000000000000000004E -:107240000000000000000000C0000000000000007E +:10724000000000000000000000000000000000003E :10725000000000000000000000000000000000002E -:10726000000001000000000010000000000000000D +:10726000000000000000000000000000000000001E :10727000000000000000000000000000000000000E :1072800000000000000000000000000000000000FE :1072900000000000000000000000000000000000EE -:1072A000000000000000000000000001000080005D -:1072B00002000000000000000000000000000000CC -:1072C000000000000084000000000000000010002A -:1072D000100000000000000041000000000000005D -:1072E000000000002000000000000000000000007E +:1072A00000000000000000000000000000000000DE +:1072B00000000000000000000000000000000000CE +:1072C00000000000000000000000000000000000BE +:1072D00000000000000000000000000000000000AE +:1072E000000000000000000000000000000000009E :1072F000000000000000000000000000000000008E :10730000000000000000000000000000000000007D -:107310000000000000000000000000000000080065 -:1073200000000000000082000000000000000000DB -:1073300000004080048500000000000000100000F4 -:107340000000040540101080000004000000100040 -:1073500000001000C000010000000000000000005C -:1073600001002080000000800000000000000000FC +:10731000000000000000000000000000000000006D +:10732000000000000000000000000000000000005D +:10733000000000000000000000000000000000004D +:10734000000000000000000000000000000000003D +:10735000000000000000000000000000000000002D +:10736000000000000000000000000000000000001D :10737000000000000000000000000000000000000D -:1073800000000000000000000000000000001000ED -:1073900000000000000000000000000000000000ED +:1073800000000000000000000000000000000000FD +:1073900000000000040000000000000000000000E9 :1073A00000000000000000000000000000000000DD -:1073B00000002000002080200000000000000000ED -:1073C0000004000085A0400010204104800000005F -:1073D00000000000100000002000000000900000ED -:1073E00000002000802000000004000000000000D9 -:1073F000400000000000000000000000000000004D +:1073B00000000000000000000000000000000000CD +:1073C00000000000000000000000000000000000BD +:1073D00000000000000000000000000000000000AD +:1073E000000000000000000000000000000000009D +:1073F000000000000000000000000000000000008D :10740000000000000000000000000000000000007C :10741000000000000000000000000000000000006C :10742000000000000000000000000000000000005C -:107430000000000004000400C00000000000400044 -:10744000000000200021840000080011000000203E -:1074500000000021000000000021012100000000C8 -:107460000000000000800180018001800000000019 +:10743000000000000000000000000000000000004C +:10744000000000000000000000000000000000003C +:10745000000000000000000000000000000000002C +:10746000000000000000000000000000000000001C :10747000000000000000000000000000000000000C :1074800000000000000000000000000000000000FC :1074900000000000000000000000000000000000EC -:1074A00000000000000000000000000003000300D6 -:1074B00000000000000080008000000000000000CC -:1074C00000000000000100000000000000000000BB -:1074D000000100000000000000000000200000008B -:1074E0000000000000000004202004042020000010 +:1074A00000000000000000000000000000000000DC +:1074B00000000000000000000000000000000000CC +:1074C00000000000000000000000000000000000BC +:1074D00000000000000000000000000000000000AC +:1074E000000000000000000000000000000000009C :1074F000000000000000000000000000000000008C :10750000000000000000000000000000000000007B :10751000000000000000000000000000000000006B :10752000000000000000000000000000000000005B -:10753000000000000000000000900000909000009B -:10754000901000020004901008000204008210084D -:1075500000A004A000820200000000000000000063 -:1075600000000000000000000000908891108201DF +:10753000000000000000000000000000000000004B +:10754000000000000000000000000000000000003B +:10755000000000000000000000000000000000002B +:10756000000000000000000000000000000000001B :10757000000000000000000000000000000000000B :1075800000000000000000000000000000000000FB :1075900000000000000000000000000000000000EB :1075A00000000000000000000000000000000000DB -:1075B000000011000000000000000080000080803A -:1075C00000000080000000808080000000800080BB -:1075D00000800080800000800000000000000300A8 -:1075E0000000000000000000000000008000881083 -:1075F00080110000000000000000000000000000FA +:1075B00000000000000000000000000000000000CB +:1075C00000000000000000000000000000000000BB +:1075D00000000000000000000000000000000000AB +:1075E000000000000000000000000000000000009B +:1075F000000000000000000000000000000000008B :10760000000000000000000000000000000000007A :10761000000000000000000000000000000000006A :10762000000000000000000000000000000000005A :10763000000000000000000000000000000000004A -:1076400080000000000000C1800980800000000070 -:1076500080000080000000008080800000000000AA -:10766000000000000000000000000000008000009A -:1076700010000000000000000000000000000000FA +:10764000000000000000000000000000000000003A +:10765000000000000000000000000000000000002A +:10766000000000000000000000000000000000001A +:10767000000000000000000000000000000000000A :1076800000000000000000000000000000000000FA :1076900000000000000000000000000000000000EA :1076A00000000000000000000000000000000000DA :1076B00000000000000000000000000000000000CA -:1076C000002090000000200010048482049000003C -:1076D0002000840084900000A000A0029000000020 -:1076E00000200000000000000000000000000090EA +:1076C00000000000000000000000000000000000BA +:1076D00000000000000000000000000000000000AA +:1076E000000000000000000000000000000000009A :1076F000000000000000000000000000000000008A :107700000000000000000000000000000000000079 :107710000000000000000000000000000000000069 :107720000000000000000000000000000000000059 -:107730000000000000000000000000000001400008 -:107740000000909000000000C00200200020088887 -:107750000800000400900208020800020008020865 +:107730000000000000000000000000000000000049 +:107740000000000000000000000000000000000039 +:107750000000000000000000000000000000000029 :107760000000000000000000000000000000000019 -:1077700000000010000000000000000000000000F9 +:107770000000000000000000000000000000000009 :1077800000000000000000000000000000000000F9 :1077900000000000000000000000000000000000E9 :1077A00000000000000000000000000000000000D9 -:1077B000000000000000000000400040000300083E -:1077C0008000000080800000000080800000000039 -:1077D00080800000008000808080800000800000A9 -:1077E0008080000000000000030000000000000096 -:1077F0000000000000100000000000000000000079 +:1077B00000000000000000000000000000000000C9 +:1077C00000000000000000000000000000000000B9 +:1077D00000000000000000000000000000000000A9 +:1077E0000000000000000000000000000000000099 +:1077F0000000000000000000000000000000000089 :107800000000000000000000000000000000000078 :107810000000000000000000000000000000000068 :107820000000000000000000000000000000000058 :107830000000000000000000000000000000000048 -:10784000000000080008000000000000000980009F -:10785000800080000000008800800000000300809D -:107860008080000000100003000000000000000005 -:107870000000000000001041008000030000000034 +:107840000000000000000000000000000000000038 +:107850000000000000000000000000000000000028 +:107860000000000000000000000000000000000018 +:107870000000000000000000000000000000000008 :1078800000000000000000000000000000000000F8 :1078900000000000000000000000000000000000E8 :1078A00000000000000000000000000000000000D8 :1078B00000000000000000000000000000000000C8 -:1078C000000000009000080190004000000040000F -:1078D0000200049010000000000400820000080074 -:1078E000200408400200000000000000000000002A -:1078F00000000000000000000011009000000000E7 +:1078C00000000000000000000000000000000000B8 +:1078D00000000000000000000000000000000000A8 +:1078E0000000000000000000000000000000000098 +:1078F0000000000000000000000000000000000088 :107900000000000000000000000000000000000077 :107910000000000000000000000000000000000067 :107920000000000000000000000000000000000057 :107930000000000000000000000000000000000047 -:1079400000000000000000810000070000000000AF -:107950000081000007006000000000000700000038 -:107960000000000007000000810000E007000000A8 -:107970000000000000000000000000E007004100DF +:107940000000000000000000000000000000000037 +:107950000000000000000000000000000000000027 +:107960000000000000000000000000000000000017 +:107970000000000000000000000000000000000007 :1079800000000000000000000000000000000000F7 :1079900000000000000000000000000000000000E7 :1079A00000000000000000000000000000000000D7 :1079B00000000000000000000000000000000000C7 -:1079C000000000000000000004000000FF00FF00B5 -:1079D0000000A03FAF3FC34D004D00000000A0AF2E -:1079E000F0FF040445040F0F000000000000000039 -:1079F0000000000000000000000000000000FFFF89 -:107A0000FFFF000000000000000000000000000078 +:1079C00000000000000000000000000000000000B7 +:1079D00000000000000000000000000000000000A7 +:1079E0000000000000000000000000000000000097 +:1079F0000000000000000000000000000000000087 +:107A00000000000000000000000000000000000076 :107A10000000000000000000000000000000000066 :107A20000000000000000000000000000000000056 :107A30000000000000000000000000000000000046 -:107A4000000000000000000000000400000000FF33 -:107A500000FF0000A030AF30FF4D3C4D00000000A3 -:107A6000A0AF000F040445040C000C00000000004F +:107A40000000000000000000000000000000000036 +:107A50000000000000000000000000000000000026 +:107A60000000000000000000000000000000000016 :107A70000000000000000000000000000000000006 -:107A8000F0F0F0F000000000000000000000000036 +:107A800000000000000000000000000000000000F6 :107A900000000000000000000000000000000000E6 :107AA00000000000000000000000000000000000D6 :107AB00000000000000000000000000000000000C6 -:107AC000000000000000000000000000C33CC33CB8 -:107AD0000000FFFF0000FF0FF00000000000CF5586 -:107AE000CF55FF55FF55F050FF55AAFF0A0F000074 -:107AF0000000000000000000000000000000FF0F78 -:107B0000FF0FFFFFFFFF000000000000000000006B +:107AC00000000000000000000000000000000000B6 +:107AD00000000000000000000000000000000000A6 +:107AE0000000000000000000000000000000000096 +:107AF0000000000000000000000000000000000086 +:107B00000000000000000000000000000000000075 :107B10000000000000000000000000000000000065 :107B20000000000000000000000000000000000055 :107B30000000000000000000000000000000000045 -:107B40000000000000000000000000000000FF0036 -:107B5000FF000000FFFF00005C5C5C5CFF00FF03B7 -:107B60000C550C550F05FF55FF55FF55FFFF0F0F27 +:107B40000000000000000000000000000000000035 +:107B50000000000000000000000000000000000025 +:107B60000000000000000000000000000000000015 :107B70000000000000000000000000000000000005 -:107B8000FF0FFF0F55555555000000000000000085 +:107B800000000000000000000000000000000000F5 :107B900000000000000000000000000000000000E5 :107BA00000000000000000000000000000000000D5 :107BB00000000000000000000000000000000000C5 -:107BC000000000000000000000610006000D000041 -:107BD000800000380000000000000000303000008D -:107BE0000100000000000000000000000000000094 -:107BF000000000610A0FC00D00000000000000003E -:107C00000000006100090001000000000000000009 +:107BC00000000000000000000000000000000000B5 +:107BD00000000000000000000000000000000000A5 +:107BE0000000000000000000000000000000000095 +:107BF0000000000000000000000000000000000085 +:107C00000000000000000000000000000000000074 :107C10000000000000000000000000000000000064 :107C20000000000000000000000000000000000054 :107C30000000000000000000000000000000000044 @@ -149483,15 +149483,15 @@ :107C50000000000000000000000000000000000024 :107C60000000000000000000000000000000000014 :107C70000000000000000000000000000000000004 -:107C800000000000FF55FF55FAFAFAFA0000000064 +:107C800000000000000000000000000000000000F4 :107C900000000000000000000000000000000000E4 :107CA00000000000000000000000000000000000D4 :107CB00000000000000000000000000000000000C4 :107CC00000000000000000000000000000000000B4 -:107CD00000000003000000000000000000000000A1 +:107CD00000000000000000000000000000000000A4 :107CE0000000000000000000000000000000000094 :107CF0000000000000000000000000000000000084 -:107D0000000000000000FF55FF55FAFAFAFA0000E3 +:107D00000000000000000000000000000000000073 :107D10000000000000000000000000000000000063 :107D20000000000000000000000000000000000053 :107D30000000000000000000000000000000000043 @@ -149499,7 +149499,7 @@ :107D50000000000000000000000000000000000023 :107D60000000000000000000000000000000000013 :107D70000000000000000000000000000000000003 -:107D800000000000000000003F3F3F3FAAFFAAFFA5 +:107D800000000000000000000000000000000000F3 :107D900000000000000000000000000000000000E3 :107DA00000000000000000000000000000000000D3 :107DB00000000000000000000000000000000000C3 @@ -149507,195 +149507,195 @@ :107DD00000000000000000000000000000000000A3 :107DE0000000000000000000000000000000000093 :107DF0000000000000000000000000000000000083 -:107E0000000000000000000000003F3F3F3FAAFFCD -:107E1000AAFF0000000000000000000000000000B9 -:107E20000000040001000000040020000000000029 -:107E300000002100200004000004000000000000F9 -:107E400000002000000000002000200000000000D2 -:107E5000000020002010401000008800C000C0007A -:107E6000000000032080000000002000200000002F -:107E7000000000002000200020000004200040003E -:107E80000000000520000000000020042000000089 -:107E90000000000020002000200000002000200042 -:107EA00000000000800004000000800000000000CE -:107EB000000010000400000080000000000000002E -:107EC0000000400000000000000000000000000072 -:107ED00000000000000000010001000000000000A0 -:107EE0000000000000000002000000000000000090 -:107EF0004000000000000000000000000040000002 -:107F0000000000020000000000000000000100006E -:107F1000000000000002000000000000000000005F -:107F2000000200000000000000000000000000004F -:107F3000000000000000000000000000040000003D +:107E00000000000000000000000000000000000072 +:107E10000000000000000000000000000000000062 +:107E20000000000000000000000000000000000052 +:107E30000000000000000000000000000000000042 +:107E40000000000000000000000000000000000032 +:107E50000000000000000000000000000000000022 +:107E600000000000000000C00000009000000000C2 +:107E70000000000000000000000000000000000002 +:107E800000000000000000000000000000000000F2 +:107E900000000000000000800000000200000080E0 +:107EA00000000010000000000000000000000000C2 +:107EB00000000000000000000000000000000000C2 +:107EC0000000000000004000000000000000000072 +:107ED00000000000000000000000000000000000A2 +:107EE0000000000000000000000340000009000046 +:107EF0000000000000000000000000000000000082 +:107F00000000000000000000000000000000000071 +:107F10000000000000000000000800000001000058 +:107F20000040000000010000000000000000000010 +:107F30000000000000000000000000000000000041 :107F40000000000000000000000000000000000031 -:107F50000000000000000000000000800040000061 -:107F60000000000000800000000000000000000988 -:107F700000000000000000000000000000000040C1 -:107F800000000000008000000080000000000000F1 -:107F900000000800000000200000000000040000B5 +:107F50000000000000000000000000000000000021 +:107F60000000000000000000000000000000000011 +:107F70000000000000000000000000000000000001 +:107F800000000000000000000000000000000000F1 +:107F900000000000000000000000000000000000E1 :107FA00000000000000000000000000000000000D1 -:107FB00000000000000000000000000009828000B6 +:107FB00000000000000000000000000000000000C1 :107FC00000000000000000000000000000000000B1 -:107FD0000000000000000000000000000010000091 -:107FE0000000000000000020000000000000000071 -:107FF0000000000000000000004000000000000041 -:10800000000000000000004000000004000000002C -:1080100000000000800000000001000000000001DE -:10802000000000040000000000000000000000004C +:107FD00000000000000000000000000000000000A1 +:107FE0000000000000000000000000000000000091 +:107FF0000000000000000000000000000000000081 +:108000000000000000000000000000000000000070 +:108010000000000000000000000000000008000058 +:108020000000000000000000000000000000000050 :108030000000000000000000000000000000000040 -:1080400000000000000000000000001100000040DF +:108040000000000000000000000000000000000030 :108050000000000000000000000000000000000020 -:108060000400000000000000C0000000000000004C -:10807000000000000021000000000000004000009F -:10808000000000210008000008000000000082003D -:10809000000000400000000000000004000000009C -:1080A00000000000000001020000011000000000BC +:108060000000000000000000000000000000000010 +:1080700000000000000000000000000000000008F8 +:1080800000000000000000000000000000000000F0 +:1080900000000000000000000000000000000000E0 +:1080A00000000000000000000000000000000000D0 :1080B00000000000000000000000000000000000C0 :1080C00000000000000000000000000000000000B0 :1080D00000000000000000000000000000000000A0 -:1080E0001100000021004100050000000000000810 -:1080F00005000000000000A000004100000000009A -:108100000500001000000000000000000000000852 -:10811000000000000000000000000000000100005E -:108120000082000000000000400100000801000083 -:10813000000004000000000000000000000000003B -:10814000010000000000000000000000000000002E -:10815000000000000000100000000000000000000F -:1081600000000810000500000000000004000000EE -:10817000000000000000000000000000000082007D -:10818000000084000000000000000000200020002B -:10819000000000000000000000000000000082005D -:1081A000000000002000000000000080000001002E -:1081B000000000008400000000000000000000003B -:1081C00000000400000800000000000000000000A3 +:1080E0000000000000000000000000000000000090 +:1080F0000000000000000000000000000000000080 +:10810000000000000000000000000000000000006F +:10811000000000000000000000000000000000005F +:10812000000000000000000000000000000000004F +:10813000000000000000000000000000000000003F +:10814000000000000000000000000000000000002F +:10815000000000000000000000000000000000001F +:10816000000000000000000000000000000000000F +:1081700000000000000000000000000000000000FF +:1081800000000000000000000000000000000000EF +:1081900000000000000000000000000000000000DF +:1081A00000000000000000000000000000000000CF +:1081B00000000000000000000000000000000000BF +:1081C00000000000000000000000000000000000AF :1081D000000000000000000000000000000000009F -:1081E000000000008001000000000000000080008E +:1081E000000000000000000000000000000000008F :1081F000000000000000000000000000000000007F -:1082000000000000000000000000000000008000EE -:1082100080000000000000000000000000A00082BC -:10822000000000000000800000000000002021008D -:10823000200000000000000000000000000000001E +:10820000000000000000000000000000000000006E +:10821000000000000000000000000000000000005E +:1082200000000000008400000000000000000000CA +:10823000000000000000000000000000000000003E :10824000000000000000000000000000000000002E -:108250000008000000000000000000000000000016 -:1082600000002000000008000400000000000008DA -:1082700000000000000000000020040000000000DA -:1082800000000000000000000000000010000000DE -:108290000800000000000100400000000000000095 -:1082A000820082000408C02104200020000504028E -:1082B000A000C0000000000000000000000000005E +:10825000000000000000000000000000000000001E +:10826000000000000000000000000000000000000E +:1082700000000000000000000000000000000000FE +:1082800000000000000000000000000000000000EE +:1082900000000000000000000000000000000000DE +:1082A00000000000000000000000000000000000CE +:1082B00000000008000000000000000000000000B6 :1082C00000000000000000000000000000000000AE :1082D000000000000000000000000000000000009E -:1082E00000000000008400000000000011000000F9 -:1082F00005840000000000000000030021000000D1 +:1082E000000000000000000000000000000000008E +:1082F000000000000000000000000000000000007E :10830000000000000000000000000000000000006D -:1083100000000000000000002000800000000000BD -:108320000000008200A0800000008001000000002A -:1083300080000000000000000000000000000000BD -:108340000000000000000100010001000100000029 +:10831000000000000000000000000000000000005D +:10832000000000000000000000000000000000004D +:10833000000000000000000000000000000000003D +:10834000000000000000000000000000000000002D :10835000000000000000000000000000000000001D -:108360000000000000089000000000000000002154 -:1083700000000000200400000000000000020000D7 +:10836000000000000000000000000000000000000D +:1083700000000000000000000000000000000000FD :1083800000000000000000000000000000000000ED -:108390000000080000000000000040000000000095 -:1083A000001000059000820004004005C004000099 -:1083B0000000C18300002000000000000000000059 -:1083C000000000000000000004820400040004001B -:1083D0000000000000000500000000000000008414 +:1083900000000000000000000000000000000000DD +:1083A00000000000000000000000000000000000CD +:1083B00000000005000000000000000000000000B8 +:1083C00000000000000000000000000000000000AD +:1083D000000000000000000000000000000000009D :1083E000000000000000000000000000000000008D -:1083F00000000000000080010000000000000000FC +:1083F000000000000000000000000000000000007D :10840000000000000000000000000000000000006C :10841000000000000000000000000000000000005C -:10842000000000010000000000008000800000014A -:1084300000000000040200008000000000000000B6 +:10842000000000000000000000000000000000004C +:10843000000000000000000000000000000000003C :10844000000000000000000000000000000000002C :10845000000000000000000000000000000000001C -:10846000000000000000000000000008008800205C -:1084700000080000000000000000000000000000F4 +:10846000000000000000000000000000000000000C +:1084700000000000000000000000000000000000FC :1084800000000000000000000000000000000000EC -:1084900000000000000000000000000001000000DB -:1084A00088000000A0A000900810C0908840000242 -:1084B0000102200001A0A002001000410000000005 +:1084900000000000000000000000000000000000DC +:1084A00000000000000000000000000000000000CC +:1084B00000000000000000000000000000000000BC :1084C00000000000000000000000000000000000AC :1084D000000000000000000000000000000000009C -:1084E000000000000000000000000000008000000C -:1084F00000000080000000000300000000000002F7 -:108500000000000000020000000000000000000069 -:108510000000000000000000000000000000110941 -:108520002021000000030080050080808080008002 -:108530000080118000000383A18000000010000073 -:1085400000800000000000000000000000000000AB -:10855000008000100000000000000000000000008B +:1084E000000000000000000000000000000000008C +:1084F000000000000000000000000000000000007C +:10850000000000000000000000000000000000006B +:10851000000000000000000000000000000000005B +:10852000000000000000000000000000000000004B +:10853000110000000000000000000000000000002A +:10854000000000000000000000000000000000002B +:10855000000000000000000000000000000000001B :10856000000000000000000000000000000000000B -:10857000000000000000000000000000008000007B -:1085800000000000000000000000000000000000EB -:10859000000000000000000000000000004100009A -:1085A0001000050020000010000000009080000076 -:1085B0001100212111911120838091039091830357 -:1085C0000000000200000040000000000000000069 -:1085D000000000400001001000000000000000004A +:1085700000000000000000000000000000000000FB +:108580000000000000008008000000000000000063 +:1085900000000000000000000000000000000000DB +:1085A00000000000000000000000000000000000CB +:1085B00000000000000000000000800000008000BB +:1085C00000000000000000000000000000000000AB +:1085D000000000000000000000000000000000009B :1085E000000000000000000000000000000000008B -:1085F0000000000000000000000000000000000279 -:10860000000000000000000000000000000000006A -:108610000000000000000000000000000000000159 -:10862000000001000000000000000000A000A00801 -:10863000000800000101019100008382030005048D -:1086400003000000000040000000000000000000E7 -:108650000000000000000200000000000000000018 +:1085F000000000000000000000000000000000007B +:108600000000000000000200C001000000000000A7 +:10861000000000000000000000000000000000005A +:10862000000000000000000000000000000000004A +:1086300000000000000000000000880008000000AA +:10864000C00000000000000000000000000000006A +:10865000000000000000000000000000000000001A :10866000000000000000000000000000000000000A -:10867000000090A000A0000010A0000000009000EA +:1086700000000000000000000000000000000000FA :1086800000000000000000000000000000000000EA -:1086900000000000000000000000000000010000D9 -:1086A00000000100000100000101000110C000C134 -:1086B000001191C0909000A0009082820400000000 -:1086C0001001020140000000000000000000000056 -:1086D0000000000002000000000000000000000098 +:1086900000000000000000000000000000000000DA +:1086A00000000000000000000000000000000000CA +:1086B00000000000000000000000000100000000B9 +:1086C00000000000000000000000000000000000AA +:1086D000000000000000000000000000000000009A :1086E000000000000000000000000000000000008A -:1086F000000000000000008000008000000000007A -:108700000000110000000000000000000000000058 -:108710000000000000000000000000000000001049 -:1087200000000000114000080040212100118003DA -:10873000000300A11140808000800080800080093B -:108740000010002180110000000000000000000067 -:108750000000000000000000001000000000000009 +:1086F000000000000000000000000000000000007A +:108700000000000000000000000000000000000069 +:108710000000000000000000000000000000000059 +:108720000000000000000000000000000000000049 +:1087300000000000000000020009000000410000ED +:108740000000000000000000000000000000000029 +:108750000000000000000000000000000000000019 :108760000000000000000000000000000000000009 :1087700000000000000000000000000000000000F9 -:1087800000030000000000000000000000000000E6 +:108780000000000000000000411010004100000047 :1087900000000000000000000000000000000000D9 -:1087A000000000000000000002800811210003000A -:1087B00000000002000080210091802085008000E0 -:1087C00003A1A100858080110000000000000000CE +:1087A00000000000000000000000000000000000C9 +:1087B00000000000000000000000000000000000B9 +:1087C00000000000000000000000000000000000A9 :1087D0000000000000000000000000000000000099 :1087E0000000000000000000000000000000000089 :1087F0000000000000000000000000000000000079 -:108800000000000000000000000000000000000068 +:108800000000000000000000000001000010001047 :108810000000000000000000000000000000000058 -:1088200000000000A0004000100001020101010052 -:1088300001000000100140C0A001889120009000BC -:10884000040020410410024002010000000007045F -:108850000000000000000000000000000000070011 +:108820000000000000000000000000000000000048 +:108830000000000000000000000000000000000038 +:108840000000000000100000000000000000000018 +:108850000000000000000000000000000000000018 :108860000000000000000000000000000000000008 :1088700000000000000000000000000000000000F8 -:108880000000840000E0070000000000000000007D +:1088800000000000000000000000000000000000E8 :1088900000000000000000000000000000000000D8 -:1088A00000000000000000E000000021480000E09F -:1088B00000000000480000E00700000A484200E015 -:1088C00007000000820000E0070000000000000038 +:1088A00000000000000000000000000000000000C8 +:1088B00000000000000000000000000000000000B8 +:1088C00000000000000000000000000000000000A8 :1088D0000000000000000000000000000000000098 :1088E0000000000000000000000000000000000088 :1088F0000000000000000000000000000000000078 -:108900000000C0C0000000000000000000000000E7 +:108900000000000000000000000000000000000067 :108910000000000000000000000000000000000057 -:10892000000000000000C000C000000000000000C7 -:1089300000000000000004000400000000000080AF -:10894000FF0099C099E0A0A0A9A9000000000000C4 +:108920000000000000000000000000000000000047 +:108930000000000000000000000000000000000037 +:108940000000000000000000000000000000000027 :108950000000000000000000000000000000000017 :108960000000000000000000000000000000000007 :1089700000000000000000000000000000000000F7 -:1089800000000000C0C00000000000000000000067 +:1089800000000000000000000000000000000000E7 :1089900000000000000000000000000000000000D7 -:1089A0000000000000000000C000C0000000000047 -:1089B00000000000000000000400040000000001AE -:1089C0000980FF0099C099C0F0A0F0A0000000004D +:1089A00000000000000000000000000000000000C7 +:1089B00000000000000000000000000000000000B7 +:1089C00000000000000000000000000000000000A7 :1089D0000000000000000000000000000000000097 :1089E0000000000000000000000000000000000087 :1089F0000000000000000000000000000000000077 @@ -149708,490 +149708,490 @@ :108A60000000000000000000000000000000000006 :108A700000000000000000000000000000000000F6 :108A800000000000000000000000000000000000E6 -:108A900000000000000000000000000000000000D6 +:108A90000000000000000000FF999999000000000C :108AA00000000000000000000000000000000000C6 -:108AB000000000000000000000000000FFF9C3C13A -:108AC00000000000FFFF0000000000006F6F60600A -:108AD000C200404000000000000000000000000054 +:108AB00000000000000000000000000000000000B6 +:108AC00000000000000000000000000000000000A6 +:108AD000F3F3F9F9000000000000000000000000BE :108AE0000000000000000000000000000000000086 :108AF0000000000000000000000000000000000076 -:108B00000000000000001030000000000000000025 -:108B10000000000000000000000000000000000055 +:108B00000000000000000000000000000000000065 +:108B100000000000000000000000FF99FFFF0000BF :108B20000000000000000000000000000000000045 -:108B30000000000000000000000000000000FFFF37 -:108B4000C3C300F000F00060000000000000666792 -:108B500060600200404005180A00050004A0000003 -:108B600000000000000005000A08050000A0000049 +:108B30000000000000000000000000000000000035 +:108B40000000000000000000000000000000000025 +:108B50000000F3F3F9F9000000000000000000003D +:108B60000000000000000000000000000000000005 :108B700000000000000000000000000000000000F5 -:108B80000000000000000000000000000000006184 -:108B9000000FC00D00A0000000610006000D0000E5 +:108B800000000000000000000000000000000000E5 +:108B9000000000000000000000610006000D00055C :108BA00000000000000000000000000000000000C5 -:108BB000806100060009000000610000C00900009B -:108BC0000061000EC00900A000610036C005000071 -:108BD00000610006C0092000000000000000000045 +:108BB00000000000000000000000000000000000B5 +:108BC000000000000000000000610006000D000031 +:108BD0000000000000000005000000000000000090 :108BE0000000000000000000000000000000000085 :108BF0000000000000000000000000000000000075 :108C00000000000000000000000000000000000064 -:108C10000000000000000000000000000000000054 +:108C100000000000000000000000F0FF00FF000066 :108C20000000000000000000000000000000000044 -:108C300000000000000000003C3CFF3FFF3014F447 -:108C4000FFF400000000FCFEFCFC0000000000003F -:108C500000000000000000F000FF00000000000025 +:108C30000000000000000000000000000000000034 +:108C400000000000000000000000000000000F0F06 +:108C5000CFCF000000000000000000000000000076 :108C60000000000000000000000000000000000004 :108C700000000000000000000000000000000000F4 :108C800000000000000000000000000000000000E4 -:108C900000000000000000000000000000000000D4 +:108C9000000000000000000000000000F0FFFFFFE7 :108CA00000000000000000000000000000000000C4 -:108CB000000000000000000000003C3C3C3F3C3055 -:108CC00000F0FFF000000000C0EAC0C0F0F0F0F0DB -:108CD000000000000000A000003C00FF00000000B9 +:108CB00000000000000000000000000000000000B4 +:108CC00000000000000000000000000000000000A4 +:108CD000FFFFCFCF000000000000000000000000F8 :108CE0000000000000000000000000000000000084 :108CF0000000000000000000000000000000000074 :108D00000000000000000000000000000000000063 -:108D10000000000000000000000000000000C3C3CD -:108D2000FFFF000000000000000000000000000045 -:108D30000000000000000000000000000000FFFF35 -:108D40003C3C000000000000000000550055000001 -:108D5000000000FFFC003C3C0000FFB000000000F1 +:108D10000000000000000000000000000000000053 +:108D20000000000000000000000000000000000043 +:108D30000000000000000000000000000000000033 +:108D40000000000000000000000000000000000023 +:108D50000000000000000000000000000000000013 :108D60000000000000000000000000000000000003 :108D700000000000000000000000000000000000F3 :108D800000000000000000000000000000000000E3 :108D900000000000000000000000000000000000D3 -:108DA000C3C3FFFF0000000000000000000000003F +:108DA00000000000000000000000000000000000C3 :108DB00000000000000000000000000000000000B3 -:108DC000FFFFFF00000C000C0000000000550055E4 -:108DD0000000000000FF00003C3C0000FFBE00005F -:108DE0000000200000004000000000000000000023 -:108DF000000000000000000000000000000004006F -:108E000000002000000020000000000040000004DE -:108E1000000008000100C10000000000C0002104A3 -:108E200000010000200040002000000000000000C1 -:108E300002080000000000000000000040000000E8 -:108E400000000200200000002000000000000000E0 -:108E50000000000000000000000000000000000012 -:108E600000020000000000001000000000000002EE -:108E700000000000000000000000000000004000B2 -:108E800000000000000000001000000000000002D0 -:108E90000000000080020400080000000000400202 -:108EA0002000000040000000000021004090400031 -:108EB00040020000000040000002040040000002E8 -:108EC000404010024000400020000400400000002C -:108ED000400200024000400000020000400040004C -:108EE000400200010000000000000000A00000009F -:108EF0000000000000000000000000000000000072 -:108F00000000000000000000000008100000000049 -:108F100000000800000000000010080000400000F1 +:108DC00000000000000000000000000000000000A3 +:108DD0000000000000000000000000000000000093 +:108DE0000000000000000000000000000000000083 +:108DF0000000000000000000000000000000000073 +:108E00000000000000000000000000000000000062 +:108E10000000000000000000000000000000000052 +:108E20000000000000000000000000000000000042 +:108E30000000000000000000000000000000000032 +:108E400000000000000000000000000000800000A2 +:108E50000010000000000000000000000000000002 +:108E60000000000000000000000000000000000002 +:108E700000000000000000000000000000000000F2 +:108E800000000000000000000002000000000000E0 +:108E90000002400000000000000000000000000090 +:108EA0000000000000000000000000000040000280 +:108EB00000020002000000020000000200000000AA +:108EC0000000000000000000000000000000004062 +:108ED0000000000100000000000000000000000091 +:108EE0000000000000000000000000000000000082 +:108EF0000000001000000000000000000000000062 +:108F00000000000000000000000000000000000061 +:108F10000000001000000000000000000000000041 :108F20000000000000000000000000000000000041 -:108F3000000000000400000000000000000000002D +:108F30000000000000100000000000000000000021 :108F40000000000000000000000000000000000021 -:108F5000000000000000000000050000000000000C -:108F600000000000000000000000000200000000FF -:108F700000000000040000000000000000000000ED -:108F8000000000000000000400000000800000005D +:108F50000000000000100000000000000000000001 +:108F60000000000000000000000000000000000001 +:108F700000000000000000000000000000000000F1 +:108F800000000000000000000000000000000000E1 :108F900000000000000000000000000000000000D1 :108FA00000000000000000000000000000000000C1 -:108FB0000090000000000000000000000000000021 -:108FC0000000000000000000000000000088000019 -:108FD000000000000000008200000000000000000F -:108FE0000000000000000000000800000000000079 -:108FF000002100000000000000000000001101003E -:10900000002100000004000000000000000000003B -:109010000008000000000000000000000000000048 -:1090200000004100C000100000000000000000002F -:109030000000100010008200000000000800000086 -:109040001000000000000000000000000000000010 +:108FB00000000000000000000000000000000000B1 +:108FC00000000000000000000000000000000000A1 +:108FD00000080088000000000000000000080008F1 +:108FE0000000000000000000000000000000000081 +:108FF0000000000000000000000000000000000071 +:109000000000000000000000000000000000000060 +:109010000000000000000000000000000000000050 +:109020000000000000000000000000000000000040 +:1090300000000000000000004000000000000000F0 +:109040000008000000000000000000000000000018 :109050000000000000000000000000000000000010 -:1090600040000000000000000000000000000000C0 +:1090600000000000002100210000000000000000BE :1090700000000000000000000000000000000000F0 -:10908000200000000004002000000000000000009C -:1090900000000000000021000000000009000300A3 -:1090A0000088000020000000000000000000000018 -:1090B0000000000000004000000000000000000070 -:1090C000000000000000100003000000000000008D -:1090D000000000080000000003820800000021A03A +:1090800000000000000000000000000000000000E0 +:1090900000000000000000000000000000000000D0 +:1090A00000000000000000000000000000000000C0 +:1090B000000000000008000800840000000000001C +:1090C00000000000000000000000000000000000A0 +:1090D0000000000000000000000000000000000090 :1090E0000000000000000000000000000000000080 -:1090F000000000000000000000410000000000002F -:1091000000000080000000000000000000000000DF -:10911000C00000000000000000000000001000106F -:10912000000000040000000020000000000000001B -:109130000000000000000000000008000000000027 -:10914000000000000800000000000800000000000F -:10915000000000000200000000008200000000008B -:10916000000000008200000000000000000000007D +:1090F0000000000000000000000000000000000070 +:10910000000000000000000000000000000000005F +:10911000000000000000000000000000000000004F +:10912000000000000000000000000000000000003F +:10913000000000000000000000000000000000002F +:10914000000000000000000000000000000000001F +:10915000000000000000000000000000000000000F +:1091600000000000000000000000000000000000FF :1091700000000000000000000000000000000000EF -:1091800021900000004000000000000000000000EE -:1091900000000000000000000000000000000001CE -:1091A000000100000000000000008000000000003E +:1091800000000000000000000000000000000000DF +:1091900000000000000000000000000000000000CF +:1091A00000000000000000000000000000000000BF :1091B00000000000000000000000000000000000AF :1091C000000000000000000000000000000000009F :1091D000000000000000000000000000000000008F :1091E000000000000000000000000000000000007F -:1091F00000002000020400002000200000400002C7 -:1092000000002000004000000000000000001020CE -:10921000000000000000000000000000000010003E -:1092200000000000000084000000000000000003B7 -:109230000000000000000008000000000000000026 +:1091F000000000000000000000000000000000006F +:10920000000000000000000000000000000000005E +:10921000000000000000000000000000000000004E +:10922000000000000000000000000000000000003E +:10923000000000000000000000000000000000002E :10924000000000000000000000000000000000001E :10925000000000000000000000000000000000000E -:1092600000000000004100000000020000000000BB -:1092700090000000800080010000000080000001DC -:10928000000000009100000100000000000000004C -:1092900000000400000000000000000000000000CA -:1092A00000000090000000202100000040000000AD -:1092B00000000000000000000000000000000000AE +:1092600000000000000000000000000000000000FE +:1092700000000000000000000000000000000000EE +:1092800000000000000000000000000000000000DE +:1092900000000000000000000000000000000000CE +:1092A00000000000000000000000000000000000BE +:1092B0000000000000000000000000A0000000000E :1092C000000000000000000000000000000000009E -:1092D00000000800000000C0000803084000000073 -:1092E00020000000000000A00000000000000800B6 -:1092F0000300000000000000000000000000C000AB -:10930000000000000000000000000000000040001D -:1093100000090000000000008400000000000000C0 -:109320000000100000000000000000000000000429 -:109330000004000400000000000000000000000025 -:10934000000000000000000000000000000000001D +:1092D000000000000000000000000000000000008E +:1092E0000000000000080000000000000000000076 +:1092F000000000000000000000000000000000006E +:10930000000000000000000000000000000000005D +:10931000000000000000000000000000000000004D +:10932000000000000000000000000000000000003D +:10933000000000000000000000000000000000002D +:109340000000000000000000000000080000000015 :10935000000000000000000000000000000000000D -:109360000400000000000000000000000000900069 -:10937000080088000000000000000000000000A0BD -:1093800000000002000000000000000000000000DB -:1093900000000000000000000000000000000008C5 +:1093600000000000000000000000000000000000FD +:1093700000000000000000000000000000000000ED +:1093800000000000000000000000000000000000DD +:1093900000000000000000000000000000000000CD :1093A00000000000000000000000000000000000BD -:1093B00000010001000100000000000000000000AA +:1093B00000000000000000000000000000000000AD :1093C000000000000000000000000000000000009D :1093D000000000000000000000000000000000008D :1093E000000000000000000000000000000000007D -:1093F000000000000000000010C000008800000015 -:1094000041C000018800000141C000008801000146 +:1093F000000000000000000000000000000000006D +:10940000000000000000000000000000000000005C :10941000000000000000000000000000000000004C -:1094200000000000000000000040009000088820BC +:10942000000000000000000000000000000000003C :10943000000000000000000000000000000000002C :10944000000000000000000000000000000000001C :10945000000000000000000000000000000000000C :1094600000000000000000000000000000000000FC -:1094700000000000000000000000808041000200A9 -:109480000000919103081002000891910511100845 -:1094900000200000000000000000000000000000AC -:1094A000000000000000000000000080000000003C +:1094700000000000000000000000000000000000EC +:1094800000000000000000000000000000000000DC +:1094900000000000000000000000000000000000CC +:1094A00000000000000000000000000000000000BC :1094B00000000000000000000000000000000000AC :1094C000000000000000000000000000000000009C :1094D000000000000000000000000000000000008C :1094E000000000000000000000000000000000007C -:1094F00000000000000000000000000009804100A2 -:1095000008099010090003210811900209000521A3 -:1095100008118803000000000000000000000000A7 -:10952000800000000000000000000000000080003B -:1095300080C0800000804100081100000000000091 +:1094F000000000000000000000000000000000006C +:10950000000000000000000000000000000000005B +:10951000000000000000000000000000000000004B +:10952000000000000000000000000000000000003B +:10953000000000000000000000000000000000002B :10954000000000000000000000000000000000001B :10955000000000000000000000000000000000000B -:1095600000000000000000000000000000000000FB -:1095700000000000000000000000000000000140AA -:1095800000000101C001018800000101C10001A02B -:1095900000000101C1000000000000000000900078 -:1095A000C000020090000000000000000000000069 -:1095B0000800080208000040000000010000000050 +:10956000000000000000000000000000800000007B +:1095700000000000000000000000000000000000EB +:1095800000000000000000000000000000000000DB +:1095900000000000000000000000000000000000CB +:1095A00000000000000000000000000000000000BB +:1095B00000000000000000000000000000000000AB :1095C000000000000000000000000000000000009B :1095D000000000000000000000000000000000008B -:1095E000000000000000000000000000000000007B +:1095E0000000000000000000000000000200C000B9 :1095F000000000000000000000000000000000006B -:1096000000000000000003C100000101020103C0CE -:1096100000010001010102C0000000000000000084 +:10960000000000000000000000000000000000005A +:10961000000000000000000000000000000000004A :10962000000000000000000000000000000000003A -:1096300020100040908808A00000000000000001F9 +:10963000000000000000000000000000000000002A :10964000000000000000000000000000000000001A :10965000000000000000000000000000000000000A :1096600000000000000000000000000000000000FA :1096700000000000000000000000000000000000EA -:109680000001002000210010918300021008410316 -:109690009190001005090520888800000000000056 +:1096800000000000000000000000000000000000DA +:1096900000000000000000000000000000000000CA :1096A00000000000000000000000000000000000BA -:1096B00000000080008080000080000000080000A2 -:1096C0000011000000000000000000000000000089 +:1096B00000000000000000000000000000000000AA +:1096C000000000000000000000000000000000009A :1096D000000000000000000000000000000000008A :1096E000000000000000000000000000000000007A -:1096F000000000000000000000000000001000005A -:109700000000000888912109108009208883080939 -:109710004180090888000500088008080000000052 -:1097200000000000000000800000000000000000B9 -:109730000000000000008080000000000008081108 -:1097400003001111000000000000000000000000F4 +:1096F000000000000000000000000000000000006A +:109700000000000000000000000000000000000059 +:109710000000000000000000000000000000000049 +:109720000000000000000000000000000000000039 +:109730000000000000000000000000000000000029 +:109740000000000000000000000000000000000019 :109750000000000000000000000000000000000009 :1097600000000000000000000000000000000000F9 :1097700000000000000000000000000000000000E9 -:109780000000000000001010000100840100C14032 -:10979000010100840100C1A00000010800000000D8 -:1097A00000000000000000000004001000000000A5 -:1097B0000000000000000000A0A0008800000000E1 -:1097C0000001010001010000000000000000000095 +:1097800000000000000000000000000000000000D9 +:1097900000000000000000000000000000000000C9 +:1097A00000000000000000000000000000000000B9 +:1097B00000000000000000000000000000000000A9 +:1097C0000000000000000000000000000000000099 :1097D0000000000000000000000000000000000089 :1097E0000000000000000000000000000000000079 -:1097F0000000000000000000000000000000000069 -:109800000000000000000000000000E00000000078 -:10981000000000E000000000000000E00000000088 +:1097F0000000000400020000000000000000000063 +:109800000000000000000000000000000000000058 +:109810000000000000000000000000000000000048 :109820000000000000000000000000000000000038 -:109830000000000000000000000000000700000021 -:10984000810000E0000000000000000000000000B7 +:109830000000000000000000000000000000000028 +:109840000000000000000000000000000000000018 :109850000000000000000000000000000000000008 :1098600000000000000000000000000000000000F8 :1098700000000000000000000000000000000000E8 -:1098800000000000000000000000FFFF0000FFFFDC -:109890005555FFFF0000FFFF5555FFFF0000FFFF7C -:1098A000555500000000000000000000000000000E -:1098B0000000000000000000000000AA00AAF0F074 -:1098C000FF3C00000000000000000000000000005D +:1098800000000000000000000000000000000000D8 +:1098900000000000000000000000000000000000C8 +:1098A00000000000000000000000000000000000B8 +:1098B00000000000000000000000000000000000A8 +:1098C0000000000000000000000000000000000098 :1098D0000000000000000000000000000000000088 :1098E0000000000000000000000000000000000078 :1098F0000000000000000000000000000000000068 -:10990000000000000000000000000000FFFF000059 -:10991000FFFF5555FFFFFFFFFFFF5555FFFFFFFFFF -:10992000FFFF55550000000000000000000000008F -:1099300000000000000000000000000000AA00AAD3 -:10994000F0F0003C000000000000000000000000FB +:109900000000000000000000000000000000000057 +:109910000000000000000000000000000000000047 +:109920000000000000000000000000000000000037 +:109930000000000000000000000000000000000027 +:109940000000000000000000000000000000000017 :109950000000000000000000000000000000000007 :1099600000000000000000000000000000000000F7 :1099700000000000000000000000000000000000E7 -:109980000000000000000000000000000000AAAA83 -:10999000FFFF0000FFFFAAAAFFFF0000FFFFAAAA27 -:1099A000FFFFFFFF000000000000000000000000BB -:1099B000000028C028FC000000000000000000009B -:1099C0000100000F00000000000000000000000087 +:1099800000000000000000000000000000000000D7 +:1099900000000000000000000000000000000000C7 +:1099A00000000000000000000000000000000000B7 +:1099B00000000000000000000000000000000000A7 +:1099C0000000000000000000000000000000000097 :1099D0000000000000000000000000000000000087 :1099E0000000000000000000000000000000000077 -:1099F0000000000000000000000000000000000067 +:1099F000000000000000000000000000AAAAAAFF6A :109A00000000000000000000000000000000000056 -:109A1000AAAAFFFFFFFFFFFFAAAAFFFFFFFFFFFFAA -:109A2000AAAAFFFF000000000000000000000000E4 -:109A300000000000EBC0EBFC000000000000000094 -:109A40000000000000050000000000000000000011 +:109A10000000000000000000000000000000000046 +:109A20000000000000000000000000000000000036 +:109A30000000000000000000000000000000000026 +:109A40000000000000000000000000000000000016 :109A50000000000000000000000000000000000006 :109A600000000000000000000000000000000000F6 -:109A700000000000000000000000000000000000E6 -:109A800000000000000000000000000000000000D6 -:109A90000000406380050021920240E38001002124 -:109AA000920240E3800100218A02000000000000D1 +:109A70000000000000000000000000000000FFFFE8 +:109A8000AAFF00000000000000000000000000002D +:109A900000000000000000000000000000000000C6 +:109AA00000000000000000000000000000000000B6 :109AB00000000000000000000000000000000000A6 -:109AC0000000000000000000000000610004C00170 +:109AC0000000000000000000000000000000000096 :109AD0000000000000000000000000000000000086 :109AE0000000000000000000000000000000000076 :109AF0000000000000000000000000000000000066 -:109B000000000000000000000000000000610006EE -:109B1000000D00003F7F30700CAAFCAA553C553C5C -:109B20003A3A303F7FFF43C3A0F53C3C00000000C1 +:109B00000000000500000000000000000000000050 +:109B10000000000000000000000000000000000045 +:109B20000000000000000000000000000000000035 :109B30000000000000000000000000000000000025 -:109B40000000000000000000000000000F1B0F1BC1 -:109B50000F0FF0F000000000000000000000000007 +:109B40000000000000000000000000000000000015 +:109B50000000000000000000000000000000000005 :109B600000000000000000000000000000000000F5 :109B700000000000000000000000000000000000E5 :109B800000000000000000000000000000000000D5 -:109B90000000FFFFC3C33F2F302000AAFFAA553F9C -:109BA0005530303F303F7C3C4000F0F03C3C000002 +:109B900000000000000000000000000000000000C5 +:109BA00000000000000000000000000000000000B5 :109BB00000000000000000000000000000000000A5 -:109BC00000000000000000000000000000000F1B6B -:109BD0000F1B0F0FF0F0000000000000000000005D +:109BC0000000000000000000000000000000000095 +:109BD0000000000000000000000000000000000085 :109BE0000000000000000000000000000000000075 :109BF0000000000000000000000000000000000065 :109C00000000000000000000000000000000000054 -:109C100000000000FFFFC3C3000000003C3CAAAAF4 -:109C20003C5F3C503CAA3CAAFF00FF0054FE14BE1F +:109C10000000000000000000000000000000000044 +:109C20000000000000000000000000000000000034 :109C30000000000000000000000000000000000024 :109C40000000000000000000000000000000000014 -:109C5000000000005AF05AF0000000000000000070 +:109C50000000000000000000000000000000000004 :109C600000000000000000000000000000000000F4 :109C700000000000000000000000000000000000E4 :109C800000000000000000000000000000000000D4 -:109C900000000000000000000000000000000CFCBC -:109CA000AAAA3CFF3C000CAAFCAABFBF101004AE3D -:109CB00014BE0000000000000000000000000000D2 +:109C900000000000000000000000000000000000C4 +:109CA00000000000000000000000000000000000B4 +:109CB00000000000000000000000000000000000A4 :109CC0000000000000000000000000000000000094 -:109CD0000000000000005AF05AF0000000000000F0 +:109CD0000000000000000000000000000000000084 :109CE0000000000000000000000000000000000074 :109CF0000000000000000000000000000000000064 :109D00000000000000000000000000000000000053 :109D10000000000000000000000000000000000043 -:109D20000000000000000080008021800000000092 -:109D30000000000000000000000020000080000083 -:109D40000080C08200800000000020800400A0008D -:109D5000820400000000000000002000000100005C -:109D60000000000020000000000000002000200093 -:109D7000200020000000000000000000208000857E -:109D80000000000020820000000000002000000011 -:109D900000000080008400000000000000000000BF -:109DA0000000000000000000000400042002000089 -:109DB0000000000000004000000000000000001053 -:109DC00000000402001100100000000000108000DC -:109DD0000000000000000000400000000000000043 -:109DE00000000000000000004100400000000000F2 -:109DF0000000000000000000000000000000001053 -:109E00000010000000000011000000000000000031 -:109E100000000000001000024000000200000000EE -:109E200000000000000000000000010000004000F1 -:109E3000000000000008000000000000000000001A +:109D20000000000000000000000000000000000033 +:109D30000000000000000000000000000000000023 +:109D40000000000000000000000000000000000013 +:109D50000000000000000000000000000000000003 +:109D600000000000000000000000000000000000F3 +:109D700000000000000000000000000000000000E3 +:109D800000000000000000000000000000000000D3 +:109D900000000000000000000000000000000000C3 +:109DA00000000000000000000000000000000000B3 +:109DB0004000000000000000000000000000000063 +:109DC0000000000000000000000000000000000093 +:109DD0000000400000000000000000000000000043 +:109DE0000000000000000000000000000000000073 +:109DF0000000000200000000000000000000000061 +:109E0000000000000004000000000000000000004E +:109E10000000000000000000000000000000000042 +:109E20000000000000000000000000000000000032 +:109E30000000000000000000000000000000000022 :109E40000000000000000000000000000000000012 -:109E500000000000000000410000000000000000C1 -:109E600000000000000000000010000000000000E2 +:109E50000000000000000000000000000000000002 +:109E600000000000000000000000000000000000F2 :109E700000000000000000000000000000000000E2 -:109E800000100000000000000000000000000000C2 +:109E800000000000000000000000000000000000D2 :109E900000000000000000000000000000000000C2 -:109EA00000000000000000000082000040000000F0 -:109EB000800000000000000800000000000000001A +:109EA00000000000000000000000000000000000B2 +:109EB00000000000000000000000000000000000A2 :109EC0000000000000000000000000000000000092 -:109ED00000000090000400040000000000000000EA +:109ED0000000000000000000000000000000000082 :109EE0000000000000000000000000000000000072 -:109EF00000000000008400080004000800000000CA -:109F000000000000008400080010000000000000B5 -:109F10000000000000080008000000080000000029 +:109EF0000000000000000000000000000000000062 +:109F00000000000000000000000000000000000051 +:109F10000000000000000000000000000000000041 :109F20000000000000000000000000000000000031 -:109F300000000000004000000000002100000000C0 -:109F400000110000000000000000001000000000F0 -:109F500000000000002100210008000000000000B7 -:109F600000000000000000080008000000000000E1 +:109F30000000000000000000000000000000000021 +:109F40000000000000000000000000000000000011 +:109F50000000000000000000000000000000000001 +:109F600000000000000000000000000000000000F1 :109F700000000000000000000000000000000000E1 -:109F800000000000000000080000000000000000C9 -:109F900000000000A000000500400000008000005C -:109FA0000000000000004000000000000000000071 -:109FB000000000A000C000000002000000900000AF -:109FC00000900300000000000000000000000500F9 -:109FD000000000020300000000001100000000006B +:109F800000000000000000000000000000000000D1 +:109F900000000000000000000000000000000000C1 +:109FA00000000000000000000000000000000000B1 +:109FB00000000000000000000000000000000000A1 +:109FC0000000000000000000000000000000000091 +:109FD0000000000000000000000000000000000081 :109FE0000000000000000000000000000000000071 :109FF0000000000000000000000000000000000061 :10A000000000000000000000000000000000000050 -:10A010000000000000000000000000A00000001090 +:10A010000000000000000000000000000000000040 :10A020000000000000000000000000000000000030 -:10A0300000000000400000000000000000000000E0 -:10A040000000000000001000000000000000000000 -:10A0500000000000000000000000000000000010F0 +:10A030000000000000000000000000000000000020 +:10A040000000000000000000000000000000000010 +:10A050000000000000000000000000000000000000 :10A0600000000000000000000000000000000000F0 :10A0700000000000000000000000000000000000E0 :10A0800000000000000000000000000000000000D0 -:10A0900000000000000000000000080008000800A8 -:10A0A00000000000000000000800000000000000A8 -:10A0B0000000000000008000000000000008000018 +:10A0900000000000000000000000000000000000C0 +:10A0A00000000000000000000000000000000000B0 +:10A0B00000000000000000000000000000000000A0 :10A0C0000000000000000000000000000000000090 -:10A0D000000000000000000003000000000000007D -:10A0E00000000000000000840000000000000000EC -:10A0F0000000000000000000000000000008000058 +:10A0D0000000000000000000000000000000000080 +:10A0E0000000000000000000000000000000000070 +:10A0F0000000000000000000000000000000000060 :10A10000000000000000000000000000000000004F :10A11000000000000000000000000000000000003F :10A12000000000000000000000000000000000002F -:10A1300000000000010000800100008000400000DD +:10A13000000000000000000000000000000000001F :10A14000000000000000000000000000000000000F -:10A1500000000000000000000000000000080000F7 +:10A1500000000000000000000000000000000000FF :10A1600000000000000000000000000000000000EF :10A1700000000000000000000000000000000000DF :10A1800000000000000000000000000000000000CF :10A1900000000000000000000000000000000000BF -:10A1A000020000000000000000000000000000A00D -:10A1B0000000400400022084000420A000040000ED -:10A1C000000820084090000000000000000000008F -:10A1D0000000210021000000000000000000110428 -:10A1E000000000000010000000000000000000005F +:10A1A00000000000000000000000000000000000AF +:10A1B000000000000000000000000000000000009F +:10A1C000000000000000000000000000000000008F +:10A1D000000000000000000000000000000000007F +:10A1E000000000000000000000000000000000006F :10A1F000000000000000000000000000000000005F :10A20000000000000000000000000000000000004E :10A21000000000000000000000000000000000003E -:10A22000000000000000000000080000000000C066 -:10A23000000000000000000000000000010000001D -:10A240000008000000000000000000008200100074 -:10A2500000000000000000000000000300000000FB -:10A2600000210008000000080000000000000000BD -:10A2700000000000000000080000000000000000D6 +:10A22000000000000000000000000000000000002E +:10A23000000000000000000000000000000000001E +:10A24000000000000000000000000000000000000E +:10A2500000000000000000000000000000000000FE +:10A2600000000000000000000000000000000000EE +:10A2700000000000000000000000000000000000DE :10A2800000000000000000000000000000000000CE -:10A29000000000210000000010000000000000008D -:10A2A00000000000000000000000000800000000A6 -:10A2B000000000000000000000000000000040005E -:10A2C000000000000000000000000000000200008C -:10A2D00000000000000000000000000000900000EE -:10A2E000000000000000200000040000000000004A +:10A2900000000000000000000000000000000000BE +:10A2A00000000000000000000000000000000000AE +:10A2B000000000000000000000000000000000009E +:10A2C000000000000000000000000000000000008E +:10A2D000000000000000000000000000000000007E +:10A2E000000000000000000000000000000000006E :10A2F000000000000000000000000000000000005E :10A30000000000000000000000000000000000004D :10A31000000000000000000000000000000000003D :10A32000000000000000000000000000000000002D -:10A33000000000000000000000000000010100011A -:10A34000000000010000000000000000000000000C +:10A33000000000000000000000000000000000001D +:10A34000000000000000000000000000000000000D :10A3500000000000000000000000000000000000FD :10A3600000000000000000000000000000000000ED :10A3700000000000000000000000000000000000DD :10A3800000000000000000000000000000000000CD :10A3900000000000000000000000000000000000BD :10A3A00000000000000000000000000000000000AD -:10A3B000000000000000000000000000000011107C -:10A3C0002010024100080000000000000000000012 -:10A3D000000000000000000010000000000000006D +:10A3B000000000000000000000000000000000009D +:10A3C000000000000000000000000000000000008D +:10A3D000000000000000000000000000000000007D :10A3E000000000000000000000000000000000006D :10A3F000000000000000000000000000000000005D :10A40000000000000000000000000000000000004C :10A41000000000000000000000000000000000003C :10A42000000000000000000000000000000000002C :10A43000000000000000000000000000000000001C -:10A4400000090800081008210000000000000000BA -:10A4500000000000000000000000020002000000F8 -:10A4600080008000000000000000000000000000EC +:10A44000000000000000000000000000000000000C +:10A4500000000000000000000000000000000000FC +:10A4600000000000000000000000000000000000EC :10A4700000000000000000000000000000000000DC :10A4800000000000000000000000000000000000CC -:10A49000000080000000000000000000000000003C -:10A4A000000000000000000000008000000000002C +:10A4900000000000000000000000000000000000BC +:10A4A00000000000000000000000000000000000AC :10A4B000000000000000000000000000000000009C -:10A4C0000000000201000100010100000000000086 -:10A4D000000000000000000000000000020000007A -:10A4E000000008000800000000000000000000203C +:10A4C000000000000000000000000000000000008C +:10A4D000000000000000000000000000000000007C +:10A4E000000000000000000000000000000000006C :10A4F000000000000000000000000000000000005C :10A50000000000000000000000000000000000004B -:10A5100000000000080088000000000000000200A9 -:10A52000000000000000000000000000080088009B +:10A51000000000000000000000000000000000003B +:10A52000000000000000000000000000000000002B :10A53000000000000000000000000000000000001B -:10A5400000000000000110010101010000000000F6 +:10A54000000000000000000000000000000000000B :10A5500000000000000000000000000000000000FB :10A5600000000000000000000000000000000000EB :10A5700000000000000000000000000000000000DB :10A5800000000000000000000000000000000000CB :10A5900000000000000000000000000000000000BB -:10A5A00000000000000000000000000000000008A3 -:10A5B0000000000000020000000000000000000099 -:10A5C00000000000000000108410102103100000A3 -:10A5D0000000000000000000000000000000000279 +:10A5A00000000000000000000000000000000000AB +:10A5B000000000000000000000000000000000009B +:10A5C000000000000000000000000000000000008B +:10A5D000000000000000000000000000000000007B :10A5E000000000000000000000000000000000006B :10A5F000000000000000000000000000000000005B :10A60000000000000000000000000000000000004A :10A61000000000000000000000000000000000003A -:10A620000002000000000008000000000000000020 -:10A63000008900000002008000000000000000000F -:10A6400000000000000000002021204041004008E0 +:10A62000000000000000000000000000000000002A +:10A63000000000000000000000000000000000001A +:10A64000000000000000000000000000000000000A :10A6500000000000000000000000000000000000FA -:10A66000000000800000000080000000000080006A +:10A6600000000000000000000000000000000000EA :10A6700000000000000000000000000000000000DA :10A6800000000000000000000000000000000000CA :10A6900000000000000000000000000000000000BA :10A6A00000000000000000000000000000000000AA :10A6B000000000000000000000000000000000009A -:10A6C0000000000000000000000000010001000088 -:10A6D0000101000000000000000000000000000078 -:10A6E0000000020000080200000008000000000056 -:10A6F0000800900088002000840000000000000096 +:10A6C000000000000000000000000000000000008A +:10A6D000000000000000000000000000000000007A +:10A6E000000000000000000000000000000000006A +:10A6F000000000000000000000000000000000005A :10A700000000000000000000000000000000000049 :10A710000000000000000000000000000000000039 -:10A72000000000000200000288000000000000009D +:10A720000000000000000000000000000000000029 :10A730000000000000000000000000000000000019 -:10A74000000000000000000000000000000000E029 +:10A740000000000000000000000000000000000009 :10A7500000000000000000000000000000000000F9 :10A7600000000000000000000000000000000000E9 -:10A7700000000000000000000700000000000000D2 +:10A7700000000000000000000000000000000000D9 :10A7800000000000000000000000000000000000C9 :10A7900000000000000000000000000000000000B9 :10A7A00000000000000000000000000000000000A9 :10A7B0000000000000000000000000000000000099 :10A7C0000000000000000000000000000000000089 :10A7D0000000000000000000000000000000000079 -:10A7E0000000000000000F0FFFFF00000000C3C3C7 -:10A7F000FFFF000000000000060400000000000051 +:10A7E0000000000000000000000000000000000069 +:10A7F0000000000000000000000000000000000059 :10A800000000000000000000000000000000000048 :10A810000000000000000000000000000000000038 -:10A8200000000000000000000F0FFFFF000000000C -:10A83000000000000000000000000000C3C3FFFF94 +:10A820000000000000000000000000000000000028 +:10A830000000000000000000000000000000000018 :10A840000000000000000000000000000000000008 :10A8500000000000000000000000000000000000F8 -:10A8600000000000000000000F0FFFFF00000000CC -:10A87000C3C3FFFF0000000000000604000000004A +:10A8600000000000000000000000000000000000E8 +:10A8700000000000000000000000000000000000D8 :10A8800000000000000000000000000000000000C8 :10A8900000000000000000000000000000000000B8 -:10A8A000000000000000000000000F0FFFFF00008C -:10A8B0000000000000000000000000000000C3C312 -:10A8C000FFFF00000000000000000000000000008A +:10A8A00000000000000000000000000000000000A8 +:10A8B0000000000000000000000000000000000098 +:10A8C0000000000000000000000000000000000088 :10A8D0000000000000000000000000000000000078 :10A8E0000000000000000000000000000000000068 :10A8F0000000000000000000000000000000000058 @@ -150202,407 +150202,407 @@ :10A940000000000000000000000000000000000007 :10A9500000000000000000000000000000000000F7 :10A9600000000000000000000000000000000000E7 -:10A97000F9F9F9F900000000F3F3F3F30000000027 +:10A9700000000000000000000000000000000000D7 :10A9800000000000000000000000000000000000C7 :10A9900000000000000000000000000000000000B7 -:10A9A00000000000000000000000F3F3F3F30000DB -:10A9B0000000F9F9F9F900000000000000000000B3 -:10A9C0000000F3F3F3F300000000000000000000BB +:10A9A00000000000000000000000000000000000A7 +:10A9B0000000000000000000000000000000000097 +:10A9C0000000000000000000000000000000000087 :10A9D0000000000000000000000000000000000077 :10A9E0000000000000000000000000000000000067 -:10A9F0000000F9F9F9F900000000F3F3F3F30000A7 +:10A9F0000000000000000000000000000000000057 :10AA00000000000000000000000000000000000046 :10AA10000000000000000000000000000000000036 -:10AA2000000000000000000000000000F3F3F3F35A -:10AA300000000000F9F9F9F9000000000000000032 -:10AA400000000000F3F3F3F300000000000000003A -:10AA5000000000000000000000610007000D000081 +:10AA20000000000000000000000000000000000026 +:10AA30000000000000000000000000000000000016 +:10AA40000000000000000000000000000000000006 +:10AA500000000000000000000000000000000000F6 :10AA600000000000000000000000000000000000E6 -:10AA700000610006000D0000000000000000000062 +:10AA700000000000000000000000000000000000D6 :10AA800000000000000000000000000000000000C6 :10AA900000000000000000000000000000000000B6 :10AAA00000000000000000000000000000000000A6 -:10AAB000000000610006000D000000000000000022 -:10AAC000000000610006000D000000000000000012 -:10AAD00000000000000000000000C3C302030000EB -:10AAE0000300000000000000000000000000000063 -:10AAF000000000000000C3C3C3C30000000000004A +:10AAB0000000000000000000000000000000000096 +:10AAC0000000000000000000000000000000000086 +:10AAD0000000000000000000000000000000000076 +:10AAE0000000000000000000000000000000000066 +:10AAF0000000000000000000000000000000000056 :10AB00000000000000000000000000000000000045 :10AB10000000000000000000000000000000000035 :10AB20000000000000000000000000000000000025 -:10AB30000000000000000000FFFFC3C30000000091 -:10AB40000000000000000000FFC3FFC30000000081 -:10AB5000000000000000000000000000FFFF0A0FDE +:10AB30000000000000000000000000000000000015 +:10AB40000000000000000000000000000000000005 +:10AB500000000000000000000000000000000000F5 :10AB600000000000000000000000000000000000E5 -:10AB70000000000000000000FFFFFFFF00000000D9 +:10AB700000000000000000000000000000000000D5 :10AB800000000000000000000000000000000000C5 :10AB900000000000000000000000000000000000B5 :10ABA00000000000000000000000000000000000A5 -:10ABB00000000000000000000000FFFFC3C3000011 -:10ABC00000000000000000000000FFC3FFC3000001 -:10ABD0000000000000000000000000000000F0AADB -:10ABE000FFFF050000000000000000000000000062 -:10ABF00000000000000000000000FF0FFF0F000039 +:10ABB0000000000000000000000000000000000095 +:10ABC0000000000000000000000000000000000085 +:10ABD0000000000000000000000000000000000075 +:10ABE0000000000000000000000000000000000065 +:10ABF0000000000000000000000000000000000055 :10AC00000000000000000000000000000000000044 :10AC10000000000000000000000000000000000034 :10AC20000000000000000000000000000000000024 :10AC30000000000000000000000000000000000014 :10AC40000000000000000000000000000000000004 :10AC500000000000000000000000000000000000F4 -:10AC6000F0AA3CFF0500000000000000000000000A -:10AC7000000000000000000000000000FF0FFF0FB8 +:10AC600000000000000000000000000000000000E4 +:10AC700000000000000000000000000000000000D4 :10AC800000000000000000000000000000000000C4 :10AC900000000000000000000000000000000000B4 :10ACA00000000000000000000000000000000000A4 :10ACB0000000000000000000000000000000000094 :10ACC0000000000000000000000000000000000084 :10ACD0000000000000000000000000000000000074 -:10ACE000200004800080400004800000000000007C -:10ACF0002000C00000000100410000000000000032 -:10AD00002000000000000000000000020000000021 -:10AD1000200000000000000000040003000000000C -:10AD200000002000088004000400008400000000EF +:10ACE0000000000000000000000000000000000064 +:10ACF0000000000000000000000000000000000054 +:10AD00000000000000000000000000000000000043 +:10AD10000000000000000000000000000000000033 +:10AD20000000000000000000000000000000000023 :10AD30000000000000000000000000000000000013 -:10AD40000000200020002000200020000000000063 +:10AD40000000000000000000000000000000000003 :10AD500000000000000000000000000000000000F3 -:10AD60000000000080200002C0024102000000003C -:10AD700000020000000000404002A00000000000AF -:10AD800000000000000000024002400040000000FF -:10AD900040000000410041004000000000000000B1 -:10ADA0001000000240001020C090C002402040006F -:10ADB0004000000000004000000040000000400093 -:10ADC000400000400000C000A020C0028000400001 -:10ADD00000000002000040000000400200000100EE -:10ADE000000000000080410004000020002001005D -:10ADF000000000000010000000000000040000003F -:10AE000000000800000000800002008000800100B7 -:10AE100001000000000000800000000000000000B1 -:10AE2000000000800080000400000000010000001D -:10AE30000000000000000000000000000000020010 +:10AD600000000000000000000000000000000000E3 +:10AD70000000000000000002000000004000000091 +:10AD800000000000000000000000000000000000C3 +:10AD90000000000000004000000000000000000073 +:10ADA000000000000000000000000002000000029F +:10ADB0000000000000000000000000000000000093 +:10ADC0000000000000000000000000000000000083 +:10ADD0000000000000000000000000000000000073 +:10ADE0000000000000000000000000000000000063 +:10ADF0000000000000000000000000000210000041 +:10AE00000000000000000000000000000000000042 +:10AE10000000000000000000000000000210000020 +:10AE20000000000000000000000000000000000022 +:10AE30000000000000000000000000000000021000 :10AE40000000000000000000000000000000000002 -:10AE500000000000000000000000000000000800EA -:10AE600008820000000000208400808400010001AE -:10AE7000080000000000008400080000208400009A -:10AE800000000008000800840020000000200020CE -:10AE90000800200000000000000400000000000086 -:10AEA00000000000000400040001008800002000F1 +:10AE500000000000000000000000000000000210E0 +:10AE600000000000000000000000000000000000E2 +:10AE700000000000000000000000000000000000D2 +:10AE800000000000000000000000000000000000C2 +:10AE900000000000000000000000000000000000B2 +:10AEA00000000000000000000000000000000000A2 :10AEB0000000000000000000000000000000000092 -:10AEC0000000000000100000000000000000000072 +:10AEC0000000000000000000000000000000000082 :10AED0000000000000000000000000000000000072 -:10AEE00000000005200400100000000000410008E0 -:10AEF00000088800000000000000020400A1080013 -:10AF000004000005000000000005000000200021F2 -:10AF1000000000000000400000030802200240047E -:10AF200000020000000000080000A0400000040033 -:10AF3000000400000000000000000000000000000D -:10AF400000000000000000000000000008000000F9 -:10AF500000000000000000000000400000000000B1 -:10AF60000000000000004000100100000000000090 -:10AF70000000002000000088000000848000001015 -:10AF800080008800030000000000000000080001AD -:10AF90000300030000000000008400000000000027 -:10AFA0000001000000000900000000000000000097 -:10AFB0000000000100000000000000000000000090 +:10AEE0000000000000000000000000000000000062 +:10AEF0000000000000000000000000000000000052 +:10AF00000000000000000000000000000000000041 +:10AF10000000000000000000000000000000000031 +:10AF20000000000000000000000000000000000021 +:10AF300000004000000000000000000000000000D1 +:10AF40000000000000000000000000000000000001 +:10AF500000000000000000000000000000000000F1 +:10AF600000000000000000000000000000000000E1 +:10AF700000000000000000000000000000000000D1 +:10AF800000000000000000000000000000000000C1 +:10AF900000000000000000000000000000000000B1 +:10AFA00000000000000000000000000000000000A1 +:10AFB0000000000000000000000000000000000091 :10AFC0000000000000000000000000000000000081 :10AFD0000000000000000000000000000000000071 -:10AFE00000000000000000000020080000000580B4 -:10AFF0000000000000021004A0000000000000009B -:10B00000108088100584000082000000C00040000D -:10B010004000400004400000000400000000000068 -:10B02000008000000000000000000100000000801F -:10B030000000000000000000000000000000080008 +:10AFE0000000000000000000000000000000000061 +:10AFF0000000000000000000000000000000000051 +:10B000000000000000000000000000000000000040 +:10B010000000000000000000000000000000000030 +:10B020000000000000000000000000000000000020 +:10B030000000000000000000000000000000000010 :10B040000000000000000000000000000000000000 :10B0500000000000000000000000000000000000F0 -:10B06000000000000000000000000001800000005F -:10B070008420210000000001080100000000000001 -:10B08000000080080001C003000000000000000074 -:10B0900080008000800080000000000000000000B0 -:10B0A0000300030200000300000000002000000075 -:10B0B0000010000000000000000000000000000080 +:10B0600000000000000000000000000000000000E0 +:10B0700000000000000000000000000000000000D0 +:10B0800000000000000000000000000000000000C0 +:10B0900000000000000000000000000000000000B0 +:10B0A00000000000000000000000000000000000A0 +:10B0B0000000000000000000000000000000000090 :10B0C0000000000000000000000000000000000080 :10B0D0000000000000000000000000000000000070 -:10B0E0000000000000000000004000000000000020 -:10B0F00000080080058004A0048000000000820099 -:10B100000005A00001000100010000000000000097 -:10B1100000400800000008212000A0030000A0005B -:10B12000000300044000000240020000000900117A -:10B130000000A01100200004000000000000001129 +:10B0E0000000000000000000000000000000000060 +:10B0F0000000000000000000000000000000000050 +:10B10000000000000000000000000000000000003F +:10B11000000000000000000000000000000000002F +:10B12000000000000000000000000000000000001F +:10B13000000000000000000000000000000000000F :10B1400000000000000000000000000000000000FF -:10B15000000082000000000000000000000000006D +:10B1500000000000000000000000000000000000EF :10B1600000000000000000000000000000000000DF -:10B1700000000000092084208021852000000000BC -:10B1800000000000000008000800040000000000AB -:10B19000000000000090000000008000020000009D -:10B1A0000004000000018000000080010000000099 +:10B1700000000000000000000000000000000000CF +:10B1800000000000000000000000000000000000BF +:10B1900000000000000000000000000000000000AF +:10B1A000000000000000000000000000000000009F :10B1B000000000000000000000000000000000008F -:10B1C000000000000000000000020000000000007D -:10B1D00000000000008800000000000000000000E7 -:10B1E00000880000000000000000000000000000D7 -:10B1F00008080808008084080441000000002000BE -:10B20000000000000000000000000000000400003A -:10B2100000000000000040108280040000040000D4 -:10B220000003C000400000000000002108000000F2 -:10B23000008000000080008000000000000000008E +:10B1C000000000000000000000000000000000007F +:10B1D000000000000000000000000000000000006F +:10B1E000000000000000000000000000000000005F +:10B1F000000000000000000000000000000000004F +:10B20000000000000000000000000000000000003E +:10B21000000000000000000000000000000000002E +:10B22000000000000000000000000000000000001E +:10B23000000000000000000000000000000000000E :10B2400000000000000000000000000000000000FE :10B2500000000000000000000000000000000000EE :10B2600000000000000000000000000000000000DE -:10B27000000000000000002000008000000000002E -:10B28000800000000000000000000000000000013D -:10B290000000000000000000800000208000080185 +:10B2700000000000000000000000000000000000CE +:10B2800000000000000000000000000000000000BE +:10B2900000000000000000000000000000000000AE :10B2A000000000000000000000000000000000009E -:10B2B00000004104008200041004000000000000AF +:10B2B000000000000000000000000000000000008E :10B2C000000000000000000000000000000000007E :10B2D000000000000000000000000000000000006E :10B2E000000000000000000000000000000000005E -:10B2F000000002900808008200101011010420854F -:10B30000908900000000010000000000001091A0E2 -:10B31000000000000000000000000001A00121006A -:10B32000000000A0004000110003010040000100E7 -:10B33000000100000000000000000000000000000C +:10B2F000000000000000000000000000000000004E +:10B30000000000000000000000000000000000003D +:10B31000000000000000000000000000000000002D +:10B32000000000000000000000000000000000001D +:10B33000000000000000000000000000000000000D :10B3400000000000000000000000000000000000FD :10B3500000000000000000000000000000000000ED :10B3600000000000000000000000000000000000DD -:10B3700000000000800080000080000091900880A4 -:10B380000090802100000000080000000000008004 -:10B390000580000000000000000000000008901080 -:10B3A0008320000000880003001000841140002169 -:10B3B0000340001000000000000003000000200017 -:10B3C000000003000000000000000000000000007A +:10B3700000000000000000000000000000000000CD +:10B3800000000000000000000000000000000000BD +:10B3900000000000000000000000000000000000AD +:10B3A000000000000000000000000000000000009D +:10B3B000000000000000000000000000000000008D +:10B3C000000000000000000000000000000000007D :10B3D000000000000000000000000000000000006D :10B3E000000000000000000000000000000000005D -:10B3F00000000000000000000011808800801000A4 -:10B4000091218480A18000050002008000002000BE -:10B41000200080008080000000000000000011007B -:10B420004100100208000005000000000041A0805B -:10B43000A100800083000000001000000008000050 -:10B4400000000080000800800000000000000000F4 +:10B3F000000000000000000000000000000000004D +:10B40000000000000000000000000000000000003C +:10B41000000000000000000000000000000000002C +:10B42000000000000000000000000000000000001C +:10B43000000000000000000000000000000000000C +:10B4400000000000000000000000000000000000FC :10B4500000000000000000000000000000000000EC -:10B460000041000000080000000000000000000093 -:10B47000000000000000000040000001A0840090D7 -:10B4800089009000418491900000000000020000BB -:10B4900008000000A00090A00000000000000000D4 -:10B4A00000000008000001C000840000000000014E -:10B4B00010901100900010000000100188000001A1 -:10B4C00090000000002000000010000000000000BC +:10B4600000000000000000000000000000000000DC +:10B4700000000000000000000000000000000000CC +:10B4800000000000000000000000000000000000BC +:10B4900000000000000000000000000000000000AC +:10B4A000000000000000000000000000000000009C +:10B4B000000000000000000000000000000000008C +:10B4C000000000000000000000000000000000007C :10B4D000000000000000000000000000000000006C -:10B4E000000000010000000000000000000000005B -:10B4F00000000000000000000000020200880000C0 -:10B50000000040900004A1A0020300000000000021 -:10B51000000000080040A021110100000000000010 -:10B5200000000001000090010001C00001000100C6 -:10B53000400000000000000000000000000040008B -:10B54000100000000100000090000000000000005A +:10B4E000000000000000000000000000000000005C +:10B4F000000000000000000000000000000000004C +:10B50000000000000000000000000000000000003B +:10B51000000000000000000000000000000000002B +:10B52000000000000000000000000000000000001B +:10B53000000000000000000000000000000000000B +:10B5400000000000000000000000000000000000FB :10B5500000000000000000000000000000000000EB -:10B5600000000000000020000000000000000000BB -:10B5700000000000000000000000000080800000CB -:10B5800000000000808800908585A09000000000E9 -:10B590000000000000030080802110410000000036 -:10B5A0000000000010110809002100110000200017 -:10B5B000030000000040200005000005000000001E -:10B5C0008000800020000800000000000000000053 +:10B5600000000000000000000000000000000000DB +:10B5700000000000000000000000000000000000CB +:10B5800000000000000000000000000000000000BB +:10B5900000000000000000000000000000000000AB +:10B5A000000000000000000000000000000000009B +:10B5B000000000000000000000000000000000008B +:10B5C000000000000000000000000000000000007B :10B5D000000000000000000000000000000000006B -:10B5E000000000000000000000000000200000003B -:10B5F0000000000000000000000000000000000843 -:10B60000808800008000A0108080A18080088000D9 -:10B61000800000000000000000A1000000400000C9 -:10B620000000000000002182001108000802210033 -:10B6300082210400020000904080050000210000EB -:10B6400000100000000000000000000000000000EA +:10B5E000000000000000000000000000000000005B +:10B5F000000000000000000000000000000000004B +:10B60000000000000000000000000000000000003A +:10B61000000000000000000000000000000000002A +:10B62000000000000000000000000000000000001A +:10B63000000000000000000000000000000000000A +:10B6400000000000000000000000000000000000FA :10B6500000000000000000000000000000000000EA :10B6600000000000000000000000000000000000DA :10B6700000000000000000000000000000000000CA -:10B68000900120090808820091020404A1A0020090 -:10B6900002000400000040000000008300C0000021 -:10B6A0000000000000000000011000000000010088 -:10B6B0008900040108000000000200100088000159 -:10B6C0000000000000900088000000000000000062 +:10B6800000000000000000000000000000000000BA +:10B6900000000000000000000000000000000000AA +:10B6A000000000000000000000000000000000009A +:10B6B000000000000000000000000000000000008A +:10B6C000000000000000000000000000000000007A :10B6D000000000000000000000000000000000006A :10B6E000000000000000000000000000000000005A :10B6F000000000000000000000000000000000004A -:10B700000000001100000700000000810000070099 -:10B710000000000000E000000000000000E0070062 -:10B7200000000000000000000000818100E0070030 -:10B730000000000000E000000012810000E00000B6 -:10B7400000000000810002E000000000000000E0B6 -:10B7500007000000000000000000000000000000E2 -:10B76000000000000000000000000000000002E0F7 -:10B770000000600000000000000000000000000069 -:10B7800000000000FF00F700404040400020FFFFA5 -:10B79000AA6AAA6A820000000000000000000000FF -:10B7A00000C000C000000000000000000000000019 -:10B7B0000000000000F00000000000000000000099 +:10B700000000000000000000000000000000000039 +:10B710000000000000000000000000000000000029 +:10B720000000000000000000000000000000000019 +:10B730000000000000000000000000000000000009 +:10B7400000000000000000000000000000000000F9 +:10B7500000000000000000000000000000000000E9 +:10B7600000000000000000000000000000000000D9 +:10B7700000000000000000000000000000000000C9 +:10B7800000000000000000000000000000000000B9 +:10B7900000000000000000000000000000000000A9 +:10B7A0000000000000000000000000000000000099 +:10B7B0000000000000000000000000000000000089 :10B7C0000000000000000000000000000000000079 :10B7D0000000000000000000000000000000000069 :10B7E0000000000000000000000000000000000059 :10B7F0000000000000000000000000000000000049 -:10B80000000000000000FFFFF7F74040404000004C -:10B81000FEFE94AA95AA00000000000000000000AF -:10B82000000000C000C00000000000000000000098 -:10B8300000000000000000F0000000000000000018 +:10B800000000000000000000000000000000000038 +:10B810000000000000000000000000000000000028 +:10B820000000000000000000000000000000000018 +:10B830000000000000000000000000000000000008 :10B8400000000000000000000000000000000000F8 :10B8500000000000000000000000000000000000E8 :10B8600000000000000000000000000000000000D8 :10B8700000000000000000000000000000000000C8 :10B8800000000000000000000000000000000000B8 -:10B8900056555555BEBE4141000000000000000055 -:10B8A000FF5FFF5F55FF553C0000000000000000F7 -:10B8B000000000000000000000000F0E000000006B -:10B8C0000000000000FF00FF000000000000AAAA26 -:10B8D000AAAA000000000000000000000000000014 +:10B8900000000000000000000000000000000000A8 +:10B8A0000000000000000000000000000000000098 +:10B8B0000000000000000000000000000000000088 +:10B8C0000000000000000000000000000000000078 +:10B8D0000000000000000000000000000000000068 :10B8E0000000000000000000000000000000000058 :10B8F0000000000000000000000000000000000048 -:10B90000000000000000000000000C000000140017 -:10B910001400555565254141BE7E00000000000021 -:10B920000000FF5FFF5F55005500000000000000B1 -:10B930000000000000000000000000000F0F0000E9 -:10B9400000000000000000FF807F000000000000F9 -:10B95000AAAA6A6A000000000000000000000000BF +:10B900000000000000000000000000000000000037 +:10B910000000000000000000000000000000000027 +:10B920000000000000000000000000000000000017 +:10B930000000000000000000000000000000000007 +:10B9400000000000000000000000000000000000F7 +:10B9500000000000000000000000000000000000E7 :10B9600000000000000000000000000000000000D7 :10B9700000000000000000000000000000000000C7 -:10B980000000000000000000000000000000003087 -:10B990000000000000610036000D0000006100079B -:10B9A000000D00000061000F001C000000000000FE -:10B9B0000000000005790A3FC50925A000610004C8 -:10B9C000000D000000650003C007000000000065D6 -:10B9D0000007C00F200005790A07050D05A000002B +:10B9800000000000000000000000000000000000B7 +:10B9900000000000000000000000000000000000A7 +:10B9A0000000000000000000000000000000000097 +:10B9B0000000000000000000000000000000000087 +:10B9C0000000000000000000000000000000000077 +:10B9D0000000000000000000000000000000000067 :10B9E0000000000000000000000000000000000057 -:10B9F00000000000000000650006000F20000000AD +:10B9F0000000000000000000000000000000000047 :10BA00000000000000000000000000000000000036 -:10BA10000000000000000000F0F00000080000003E -:10BA200000000000000000000000AAAA003C000086 -:10BA3000000000000000FFFFCFCFAAAEFFFA57556D -:10BA4000FFFF00000000A000A00000003C3C000040 +:10BA10000000000000000000000000000000000026 +:10BA20000000000000000000000000000000000016 +:10BA30000000000000000000000000000000000006 +:10BA400000000000000000000000000000000000F6 :10BA500000000000000000000000000000000000E6 :10BA600000000000000000000000000000000000D6 :10BA700000000000000000000000000000000000C6 :10BA800000000000000000000000000000000000B6 -:10BA900000000000000000000000F0F000000000C6 -:10BAA000000000000000000000000000AAAA003C06 -:10BAB0000000000000000000FFFFCFCF0004555041 -:10BAC0000000FFFF00000000A000A00000003C3CC0 +:10BA900000000000000000000000000000000000A6 +:10BAA0000000000000000000000000000000000096 +:10BAB0000000000000000000000000000000000086 +:10BAC0000000000000000000000000000000000076 :10BAD0000000000000000000000000000000000066 :10BAE0000000000000000000000000000000000056 :10BAF0000000000000000000000000000000000046 :10BB00000000000000000000000000000000000035 -:10BB10000000000000000000000000000000FF0026 -:10BB2000BF00000000000000000000000000202016 -:10BB30002020000000000000000000000050000075 -:10BB40000000D707D7D7000000005555F00F555516 -:10BB50003C3C00000000000000000000000000006D +:10BB10000000000000000000000000000000000025 +:10BB20000000000000000000000000000000000015 +:10BB30000000000000000000000000000000000005 +:10BB400000000000000000000000000000000000F5 +:10BB500000000000000000000000000000000000E5 :10BB600000000000000000000000000000000000D5 :10BB700000000000000000000000000000000000C5 :10BB800000000000000000000000000000000000B5 -:10BB90000000000000000000000000003030000045 -:10BBA000FF00FF0000000000000000000000000097 -:10BBB00020202020000000000000000000000050B5 -:10BBC0000100000000000000000000005555F00CCE -:10BBD00005053C3C000000000000000000000000E3 +:10BB900000000000000000000000000000000000A5 +:10BBA0000000000000000000000000000000000095 +:10BBB0000000000000000000000000000000000085 +:10BBC0000000000000000000000000000000000075 +:10BBD0000000000000000000000000000000000065 :10BBE0000000000000000000000000000000000055 :10BBF0000000000000000000000000000000000045 :10BC00000000000000000000000000000000000034 -:10BC10000000000000008800000000000004000098 -:10BC200000002000000020008400000000008400CC -:10BC300000000000000020030000000000000000E1 -:10BC4000000020000000000000000000880000004C -:10BC500000000000000000030000000300110000CD +:10BC10000000000000000000000000000000000024 +:10BC20000000000000000000000000000000000014 +:10BC30000000000000000000000000000000000004 +:10BC400000000000000000000000000000000000F4 +:10BC500000000000000000000000000000000000E4 :10BC600000000000000000000000000000000000D4 -:10BC700000000000000000000000000000040000C0 -:10BC800000000000000000000000000000000000B4 -:10BC900000000000000000000000000000000000A4 -:10BCA0004000000000022000000000000000000032 -:10BCB0000000000000000000000000000000000084 -:10BCC00000004000000000000000000000A0000094 -:10BCD0000000400000000000000000000000009094 +:10BC700000000000000000000000000000000000C4 +:10BC800000000000000000000000000000040000B0 +:10BC90000000000000000000000040000000000064 +:10BCA0000000000000000000000000000000000094 +:10BCB0000000000000000000000000004000000044 +:10BCC0000000000000000000000000000000000074 +:10BCD0000000000000000000000000000000000064 :10BCE0000000000000000000000000000000000054 -:10BCF0001000000000000002000000000000000032 -:10BD00000000100000000000000200000000000021 -:10BD10000008000000024000000090000000000049 +:10BCF0000000000000000000000000000000000044 +:10BD00000000000000000000000000000000000033 +:10BD10000000000000000000000000000000000023 :10BD20000000000000000000000000000000000013 :10BD30000000000000000000000000000000000003 -:10BD40000000000000000000008000000000000073 -:10BD5000000000000000000000020000000200805F -:10BD600000000000000000000000001000000000C3 +:10BD400000000000000000000000000000000000F3 +:10BD500000000000000000000000000000000000E3 +:10BD600000000000000000000000000000000000D3 :10BD700000000000000000000000000000000000C3 :10BD800000000000000000000000000000000000B3 -:10BD9000000090000000000000000000000400000F -:10BDA000000200000000000000000000000000840D -:10BDB0000000028800000400000000000082000073 -:10BDC00000000082008200000000002000000084CB -:10BDD0000000000000000000000000000000000162 -:10BDE000000400000000000000000000000000004F +:10BD900000000000000000000000000000000000A3 +:10BDA0000000000000000000000000000000000093 +:10BDB0000000000000000000000000000000000083 +:10BDC0000000000000000000000000000000000073 +:10BDD0000000000000000000000000000000000063 +:10BDE0000000000000000000000000000000000053 :10BDF0000000000000000000000000000000000043 -:10BE000000000000000000000040000000000008EA -:10BE10000000000000000000000000000000880892 -:10BE200000000200020800080000000000000000FE -:10BE300000080000200000040000000000000000D6 -:10BE400000080000000000000000000000000000EA -:10BE50008800000000000000000000000005000055 -:10BE6000000000A00080008000000008000000002A -:10BE700000080000000000000000000000000000BA -:10BE800000000000000000000200000000000000B0 -:10BE9000000000080000000000000000000000009A -:10BEA000090800A00304400800A0000000040000EE -:10BEB0004002408803000000000000000000000075 -:10BEC000000000000500001000000000000000005D -:10BED000059005A000000000000000A00000050083 -:10BEE000000004A000050020000400840000000001 +:10BE00000000000000000000000000000000000032 +:10BE10000000000000000000000000000000000022 +:10BE20000000000000000000000000000000000012 +:10BE30000000000000000000000000000000000002 +:10BE400000000000000000000000000000000000F2 +:10BE500000000000000000000000000000000000E2 +:10BE600000000000000000000000000000000000D2 +:10BE700000000000000000000000000000000000C2 +:10BE800000000000000000000000000000000000B2 +:10BE900000000000000000000000000000000000A2 +:10BEA0000000000000000000000000000000000092 +:10BEB0000000000000000000000000000000000082 +:10BEC0000000000000000000000000000000000072 +:10BED0000000000000000000000000000000000062 +:10BEE0000000000000000000000000000000000052 :10BEF0000000000000000000000000000000000042 -:10BF00000000000041A0000041000000000000000F +:10BF00000000000000000000000000000000000031 :10BF10000000000000000000000000000000000021 -:10BF2000000000000000840000000000000000008D -:10BF300000000000004100000000000000000000C0 -:10BF40000000000000000000400000000000880029 -:10BF500000000800000000000000000000000000D9 -:10BF6000000000000000000000000000A000000031 -:10BF700008000000000000000000000000000000B9 +:10BF20000000000000000000000000000000000011 +:10BF30000000000000000000000000000000000001 +:10BF400000000000000000000000000000000000F1 +:10BF500000000000000000000000000000000000E1 +:10BF600000000000000000000000000000000000D1 +:10BF700000000000000000000000000000000000C1 :10BF800000000000000000000000000000000000B1 :10BF900000000000000000000000000000000000A1 :10BFA0000000000000000000000000000000000091 :10BFB0000000000000000000000000000000000081 :10BFC0000000000000000000000000000000000071 -:10BFD000110000A00000000000002004000000008C -:10BFE00000000000000000A00000000000000000B1 +:10BFD0000000000000000000000000000000000061 +:10BFE0000000000000000000000000000000000051 :10BFF0000000000000000000000000000000000041 :10C000000000000000000000000000000000000030 :10C010000000000000000000000000000000000020 -:10C02000000000000000000000000000040000000C +:10C020000000000000000000000000000000000010 :10C030000000000000000000000000000000000000 :10C0400000000000000000000000000000000000F0 -:10C0500000000000000000000000200000000800B8 -:10C0600000000000000000000000018001200080AE +:10C0500000000000000000000000000000000000E0 +:10C0600000000000000000000000000000000000D0 :10C0700000000000000000000000000000000000C0 -:10C0800082000000820000000000000000000000AC +:10C0800000000000000000000000000000000000B0 :10C0900000000000000000000000000000000000A0 -:10C0A000000000000000000040C000040004400048 -:10C0B000008405004104080000000000008811C051 -:10C0C0000000400009000000000000000000000027 -:10C0D00040020904000000A0000008020000000067 -:10C0E0000000000003000084000000002020040580 -:10C0F00005200000400400002100000009000000AD -:10C100000000000000000000000000080000000027 -:10C110000000000000000000000000000000000817 -:10C1200000000000000000000000000000000010FF -:10C1300000000000000000000000000200000000FD +:10C0A0000000000000000000000000000000000090 +:10C0B0000000000000000000000000000000000080 +:10C0C0000000000000000000000000000000000070 +:10C0D0000000000000000000000000000000000060 +:10C0E0000000000000000000000000000000000050 +:10C0F0000000000000000000000000000000000040 +:10C10000000000000000000000000000000000002F +:10C11000000000000000000000000000000000001F +:10C12000000000000000000000000000000000000F +:10C1300000000000000000000000000000000000FF :10C1400000000000000000000000000000000000EF -:10C15000000000000000000000000000004100009E -:10C1600000000000000000001000000008000000B7 -:10C170000000202000000002000000000008000075 +:10C1500000000000000000000000000000000000DF +:10C1600000000000000000000000000000000000CF +:10C1700000000000000000000000000000000000BF :10C1800000000000000000000000000000000000AF :10C19000000000000000000000000000000000009F -:10C1A0000000000000000000000000000900000086 -:10C1B0000000000000000000000000080000000077 +:10C1A000000000000000000000000000000000008F +:10C1B000000000000000000000000000000000007F :10C1C000000000000000000000000000000000006F :10C1D000000000000000000000000000000000005F -:10C1E000000003100000410000001000000000A04B -:10C1F00000000000800100000000000000000000BE -:10C200000000000008000000000000000000000026 +:10C1E000000000000000000000000000000000004F +:10C1F000000000000000000000000000000000003F +:10C20000000000000000000000000000000000002E :10C21000000000000000000000000000000000001E :10C22000000000000000000000000000000000000E :10C2300000000000000000000000000000000000FE :10C2400000000000000000000000000000000000EE :10C2500000000000000000000000000000000000DE :10C2600000000000000000000000000000000000CE -:10C27000C08282410188C000000000000000000070 +:10C2700000000000000000000000000000000000BE :10C2800000000000000000000000000000000000AE :10C29000000000000000000000000000000000009E :10C2A000000000000000000000000000000000008E @@ -150610,7 +150610,7 @@ :10C2C000000000000000000000000000000000006E :10C2D000000000000000000000000000000000005E :10C2E000000000000000000000000000000000004E -:10C2F0000000C02000C003C10005000000000000D5 +:10C2F000000000000000000000000000000000003E :10C30000000000000000000000000000000000002D :10C31000000000000000000000000000000000001D :10C32000000000000000000000000000000000000D @@ -150618,15 +150618,15 @@ :10C3400000000000000000000000000000000000ED :10C3500000000000000000000000000000000000DD :10C3600000000000000000000000000000000000CD -:10C3700000000000110011114090A0C0000000005A +:10C3700000000000000000000000000000000000BD :10C3800000000000000000000000000000000000AD :10C39000000000000000000000000000000000009D :10C3A000000000000000000000000000000000008D :10C3B000000000000000000000000000000000007D :10C3C000000000000000000000000000000000006D -:10C3D00000000000000000000000000090001000BD +:10C3D000000000000000000000000000000000005D :10C3E000000000000000000000000000000000004D -:10C3F0000000000000008204C101A18491910000AE +:10C3F000000000000000000000000000000000003D :10C40000000000000000000000000000000000002C :10C41000000000000000000000000000000000001C :10C42000000000000000000000000000000000000C @@ -150634,7 +150634,7 @@ :10C4400000000000000000000000000000000000EC :10C4500000000000000000000000000000000000DC :10C4600000000000000000000000000000000000CC -:10C47000000000000000000000830140900901A0BE +:10C4700000000000000000000000000000000000BC :10C4800000000000000000000000000000000000AC :10C49000000000000000000000000000000000009C :10C4A000000000000000000000000000000000008C @@ -150642,32 +150642,32 @@ :10C4C000000000000000000000000000000000006C :10C4D000000000000000000000000000000000005C :10C4E000000000000000000000000000000000004C -:10C4F0000000000000000000000000020380832113 -:10C5000011200000000000000000000000000000FA +:10C4F000000000000000000000000000000000003C +:10C50000000000000000000000000000000000002B :10C51000000000000000000000000000000000001B :10C52000000000000000000000000000000000000B :10C5300000000000000000000000000000000000FB :10C5400000000000000000000000000000000000EB :10C5500000000000000000000000000000000000DB -:10C56000000000000080000000000000000000004B -:10C570000000000000000000000000008282800235 -:10C580002000021100000000000000000000000078 +:10C5600000000000000000000000000000000000CB +:10C5700000000000000000000000000000000000BB +:10C5800000000000000000000000000000000000AB :10C59000000000000000000000000000000000009B :10C5A000000000000000000000000000000000008B :10C5B000000000000000000000000000000000007B :10C5C000000000000000000000000000000000006B :10C5D000000000000000000000000000000000005B -:10C5E0000000000000000008000000000000000043 -:10C5F000000000000000000000000000000041C03A -:10C600000801A1A0010100000000000000000000DE +:10C5E000000000000000000000000000000000004B +:10C5F000000000000000000000000000000000003B +:10C60000000000000000000000000000000000002A :10C61000000000000000000000000000000000001A :10C62000000000000000000000000000000000000A :10C6300000000000000000000000000000000000FA :10C6400000000000000000000000000000000000EA :10C6500000000000000000000000000000000000DA -:10C6600000000000000000000000070000000000C3 +:10C6600000000000000000000000000000000000CA :10C6700000000000000000000000000000000000BA -:10C68000818102E007048800000000000000000033 +:10C6800000000000000000000000000000000000AA :10C69000000000000000000000000000000000009A :10C6A000000000000000000000000000000000008A :10C6B000000000000000000000000000000000007A @@ -150675,7 +150675,7 @@ :10C6D000000000000000000000000000000000005A :10C6E000000000000000000000000000000000004A :10C6F000000000000000000000000000000000003A -:10C700000000FF0F66067D417D4100000000000033 +:10C700000000000000000000000000000000000029 :10C710000000000000000000000000000000000019 :10C720000000000000000000000000000000000009 :10C7300000000000000000000000000000000000F9 @@ -150683,7 +150683,7 @@ :10C7500000000000000000000000000000000000D9 :10C7600000000000000000000000000000000000C9 :10C7700000000000000000000000000000000000B9 -:10C7800000000000000099093C007D41000000000D +:10C7800000000000000000000000000000000000A9 :10C790000000000000000000000000000000000099 :10C7A0000000000000000000000000000000000089 :10C7B0000000000000000000000000000000000079 @@ -150698,33 +150698,33 @@ :10C8400000000000000000000000000000000000E8 :10C8500000000000000000000000000000000000D8 :10C8600000000000000000000000000000000000C8 -:10C870000000646464640000000000000000000028 -:10C8800000000000000000000F0F00FF033F003C0D +:10C8700000000000000000000000000000000000B8 +:10C8800000000000000000000000000000000000A8 :10C890000000000000000000000000000000000098 :10C8A0000000000000000000000000000000000088 :10C8B0000000000000000000000000000000000078 :10C8C0000000000000000000000000000000000068 :10C8D0000000000000000000000000000000000058 :10C8E0000000000000000000000000000000000048 -:10C8F00000000000646464640000000000000000A8 -:10C90000000000000000000000000F0F00FFC3FF48 -:10C91000003C0000000000000000000000000000DB +:10C8F0000000000000000000000000000000000038 +:10C900000000000000000000000000000000000027 +:10C910000000000000000000000000000000000017 :10C920000000000000000000000000000000000007 :10C9300000000000000000000000000000000000F7 :10C9400000000000000000000000000000000000E7 :10C9500000000000000000000000000000000000D7 :10C9600000000000000000000000000000000000C7 :10C9700000000000000000000000000000000000B7 -:10C980000000000000000000000000008069003D81 -:10C99000C0092400000000000000000000000000AA +:10C9800000000000000000000000000000000000A7 +:10C990000000000000000000000000000000000097 :10C9A0000000000000000000000000000000000087 :10C9B0000000000000000000000000000000000077 :10C9C0000000000000000000000000000000000067 :10C9D0000000000000000000000000000000000057 :10C9E0000000000000000000000000000000000047 :10C9F0000000000000000000000000000000000037 -:10CA00000000000000000000000000000000FFFF28 -:10CA1000A8A800C33CFF00000000000000000000C8 +:10CA00000000000000000000000000000000000026 +:10CA10000000000000000000000000000000000016 :10CA20000000000000000000000000000000000006 :10CA300000000000000000000000000000000000F6 :10CA400000000000000000000000000000000000E6 @@ -150732,7 +150732,7 @@ :10CA600000000000000000000000000000000000C6 :10CA700000000000000000000000000000000000B6 :10CA800000000000000000000000000000000000A6 -:10CA90000000A8A800C33CFF000000000000000048 +:10CA90000000000000000000000000000000000096 :10CAA0000000000000000000000000000000000086 :10CAB0000000000000000000000000000000000076 :10CAC0000000000000000000000000000000000066 @@ -150740,7 +150740,7 @@ :10CAE0000000000000000000000000000000000046 :10CAF0000000000000000000000000000000000036 :10CB00000000000000000000000000000000000025 -:10CB100000003F3F7D41AAAA00AA000000000000DB +:10CB10000000000000000000000000000000000015 :10CB20000000000000000000000000000000000005 :10CB300000000000000000000000000000000000F5 :10CB400000000000000000000000000000000000E5 @@ -150748,436 +150748,436 @@ :10CB600000000000000000000000000000000000C5 :10CB700000000000000000000000000000000000B5 :10CB800000000000000000000000000000000000A5 -:10CB90000000000003037D41A9A900A900000000D6 +:10CB90000000000000000000000000000000000095 :10CBA0000000000000000000000000000000000085 :10CBB0000000000000000000000000000000000075 :10CBC0000000000000000000000000000000000065 -:10CBD00000000000100000008800100000000000AD -:10CBE00000058200000000000000000000000000BE -:10CBF0002000000010000000000000000000000005 -:10CC0000040000000000000000800020000001007F -:10CC100020000021000320000000000000000000B0 -:10CC20000000200000048800000000000420000034 -:10CC300000002000000410000000000000000000C0 -:10CC400040008800000020000000000020000000DC -:10CC5000000020000000090000000040000000006B -:10CC60000000400200000000000000000000000082 -:10CC7000000040041082200000004040000000003E -:10CC8000000040020000000000020010210100002E -:10CC90002000404010000000100040000000000094 -:10CCA0004000000040020000400040000002C001BF -:10CCB0004000000240020040200000000000000090 -:10CCC00040000000100200024000000000020000CE -:10CCD0000000000040020000018000000000000091 -:10CCE000008001800000000004040000000000003B -:10CCF00000000000000082000000000000000200B0 -:10CD00000000000000000200000208000000020015 -:10CD1000080000800020040400000000040000005F -:10CD20000000000000000000020000000000000001 -:10CD300000200000000000000000000000000000D3 -:10CD400000000000000000000000000000000000E3 -:10CD500000000000000000000000040200C000000D -:10CD600000000002040204000008000000000000AF -:10CD70000090000000100000008200000000000091 -:10CD8000098800000000000000080000800000008A -:10CD900000108088000400018001000000000000F5 -:10CDA0000000000000000000000000020008000079 -:10CDB0000000000100000000000000000000000072 -:10CDC000000000000000000000000000000400005F -:10CDD0000000000000000000000000000000A000B3 -:10CDE000400288020021201000210000880000037A -:10CDF000000000089008C000004000000000000093 -:10CE00000000000000009000820084048200000006 -:10CE100088000400000000804000000000000000C6 -:10CE200000000000000000000000400000000000C2 +:10CBD0000000000000000000000000000000000055 +:10CBE0000000000000000000000000000000000045 +:10CBF0000000000000000000000000000000000035 +:10CC00000000000000000000000000000000000024 +:10CC10000000000000000000000000000000000014 +:10CC20000000000000000000000000000000000004 +:10CC300000000000000000000000000000000000F4 +:10CC400000000000000000000000000000000000E4 +:10CC500000000000000000000000000000000000D4 +:10CC60000000000000004000000000000000000084 +:10CC700000000000000000000000000000020000B2 +:10CC80004000000000020000000000000000000062 +:10CC90000000000000000000000000000000000094 +:10CCA000000000020002000200000002000000027A +:10CCB0000000000000000000000000000000000074 +:10CCC0000000000000000000000000000000000064 +:10CCD0000000000000000000000000000000000054 +:10CCE0000000000000000010000000000000000034 +:10CCF0000000000000000000000000000000000034 +:10CD00000000000000000010000000000000000013 +:10CD10000000000000000000000000000000000013 +:10CD200000000000000000000010000000000000F3 +:10CD300000000000000000000000000000000000F3 +:10CD400000000000000000000010000000000000D3 +:10CD500000000000000000000000000000000000D3 +:10CD600000000000000000000000000000000000C3 +:10CD700000000000000000000000000000000000B3 +:10CD800000000000000000000000000000000000A3 +:10CD90000000000000000000000000000000000093 +:10CDA0000000000000000000000000000000000083 +:10CDB0000000000000000000000000000000000073 +:10CDC0000000000000000000000000000000000063 +:10CDD0000000000000000000000000000000000053 +:10CDE0000000000000000000000000000000000043 +:10CDF0000000000000000000000000000000000033 +:10CE00000000000000000000000000000000000022 +:10CE10000000000000000000000000000000000012 +:10CE200000000000000000000000000040000000C2 :10CE300000000000000000000000000000000000F2 -:10CE400000000000000000000000080000000000DA -:10CE50000000000040000000000000000000000092 -:10CE600021A080010001000000010000000000007E -:10CE70000000000000000008000021400000000049 -:10CE80000000000000001088110000000088000869 -:10CE900000000000C000050000108000100000002D -:10CEA000000000000000000000000004000000007E +:10CE400000000000000000000000000000000000E2 +:10CE500000000000000000000000000000000000D2 +:10CE600000000000000000000000000000000000C2 +:10CE700000000000000000000000000000000000B2 +:10CE800000000000000000000000000000000000A2 +:10CE90000000000000000000000000000000000092 +:10CEA0000000000000000000000000000000000082 :10CEB0000000000000000000000000000000000072 :10CEC0000000000000000000000000000000000062 :10CED0000000000000000000000000000000000052 -:10CEE000008000004000000002000000000001007F -:10CEF00000800000000020000000200084000000EE -:10CF00000400000008000000000000000000000411 -:10CF100020000000000000000000000000000000F1 -:10CF200000000400000000000000000000000000FD -:10CF300000000000000000000000000000000400ED +:10CEE0000000000000000000000000000000000042 +:10CEF0000000000000000000000000000000000032 +:10CF00000000000000000000000000000000000021 +:10CF10000000000000000000000000000000000011 +:10CF20000000000000000000000000000000000001 +:10CF300000000000000000000000000000000000F1 :10CF400000000000000000000000000000000000E1 :10CF500000000000000000000000000000000000D1 -:10CF600000000020000080840000214000004100FB -:10CF70002004002000000000800000208008210420 -:10CF800000A00000210000000000000000000000E0 -:10CF9000000080840000000000000000000000008D +:10CF600000000000000000000000000000000000C1 +:10CF700000000000000000000000000000000000B1 +:10CF800000000000000000000000000000000000A1 +:10CF90000000000000000000000000000000000091 :10CFA0000000000000000000000000000000000081 :10CFB0000000000000000000000000000000000071 :10CFC0000000000000000000000000000000000061 :10CFD0000000000000000000000000000000000051 -:10CFE00000000000040004210040040800020000CA -:10CFF0000000000000000000080000000002000423 -:10D00000000000000000000000000000840000009C -:10D0100000000800000004004000000000002000A4 -:10D0200000200000000000000000000000000000E0 +:10CFE0000000000000000000000000000000000041 +:10CFF0000000000000000000000000000000000031 +:10D000000000000000000000000000000000000020 +:10D010000000000000000000000000000000000010 +:10D020000000000000000000000000000000000000 :10D0300000000000000000000000000000000000F0 :10D0400000000000000000000000000000000000E0 :10D0500000000000000000000000000000000000D0 -:10D0600000000000000080008000000104000001BA -:10D07000000000000000000000000020000400018B -:10D08000100100000000000000000000000010007F -:10D0900000000000050011000000800000000000FA -:10D0A00080000001000000000000000000000000FF -:10D0B000000000000000000004000000000000006C +:10D0600000000000000000000000000000000000C0 +:10D0700000000000000000000000000000000000B0 +:10D0800000000000000000000000000000000000A0 +:10D090000000000000000000000000000000000090 +:10D0A0000000000000000000000000000000000080 +:10D0B0000000000000000000000000000000000070 :10D0C0000000000000000000000000000000000060 :10D0D0000000000000000000000000000000000050 -:10D0E00000000000000000002002210200000021DA -:10D0F0000021080000040005000000008200000478 -:10D10000000808000000000000000000000000000F -:10D11000000000000000000020002100820040000C -:10D12000004100100020002000000000001100005D +:10D0E0000000000000000000000000000000000040 +:10D0F0000000000000000000000000000000000030 +:10D10000000000000000000000000000000000001F +:10D11000000000000000000000000000000000000F +:10D1200000000000000000000000000000000000FF :10D1300000000000000000000000000000000000EF :10D1400000000000000000000000000000000000DF :10D1500000000000000000000000000000000000CF -:10D160000000000000000000000080010421000019 -:10D17000001000008000000100000004000000001A -:10D18000000100000000210000000000000000007D -:10D190000800000003000000000080004000410083 -:10D1A00080000000000100010001000000000000FC +:10D1600000000000000000000000000000000000BF +:10D1700000000000000000000000000000000000AF +:10D18000000000000000000000000000000000009F +:10D19000000000000000000000000000000000008F +:10D1A000000000000000000000000000000000007F :10D1B000000000000000000000000000000000006F :10D1C000000000000000000000000000000000005F :10D1D000000000000000000000000000000000004F -:10D1E00000000000000000000000000000A0018816 -:10D1F0000005008800A040050191004100000000EA +:10D1E000000000000000000000000000000000003F +:10D1F000000000000000000000000000000000002F :10D20000000000000000000000000000000000001E -:10D2100000000000000000000000000001100020DD -:10D220000102000210009100400082010000000095 +:10D21000000000000000000000000000000000000E +:10D2200000000000000000000000000000000000FE :10D2300000000000000000000000000000000000EE :10D2400000000000000000000000000000000000DE :10D2500000000000000000000000000000000000CE -:10D26000000000000000000000000000000000803E -:10D2700010000588000040858091058800030000AB -:10D28000000011000000002000030020002000002A -:10D29000000000000000000000000000000021006D -:10D2A00000802080008091031000800500110000A4 +:10D2600000000000000000000000000000000000BE +:10D2700000000000000000000000000000000000AE +:10D28000000000000000000000000000000000009E +:10D29000000000000000000000000000000000008E +:10D2A000000000000000000000000000000000007E :10D2B000000000000000000000000000000000006E :10D2C000000000000000000000000000000000005E :10D2D000000000000000000000000000000000004E :10D2E000000000000000000000000000000000003E -:10D2F0004020000020800041000000211111008327 -:10D300000000000500000000000000000000000018 +:10D2F000000000000000000000000000000000002E +:10D30000000000000000000000000000000000001D :10D31000000000000000000000000000000000000D -:10D3200000080000C00089410080852080000203C1 +:10D3200000000000000000000000000000000000FD :10D3300000000000000000000000000000000000ED :10D3400000000000000000000000000000000000DD :10D3500000000000000000000000000000000000CD :10D3600000000000000000000000000000000000BD -:10D370000000008800000010000100900000010182 -:10D3800000A10000000000000000000000000000FC +:10D3700000000000000000000000000000000000AD +:10D38000000000000000000000000000000000009D :10D39000000000000000000000000000000000008D -:10D3A00000009004C000A0829009A0C0020040A02C -:10D3B00083010000000000000000000000000000E9 -:10D3C0000000000000000000000000080000000055 +:10D3A000000000000000000000000000000000007D +:10D3B000000000000000000000000000000000006D +:10D3C000000000000000000000000000000000005D :10D3D000000000000000000000000000000000004D :10D3E000000000000000000000000000000000003D -:10D3F0000000000000000000A100020190010000F8 -:10D40000000191000000000000000000000000008A +:10D3F000000000000000000000000000000000002D +:10D40000000000000000000000000000000000001C :10D41000000000000000000000000000000000000C -:10D42000000000004000000990090808C003000542 -:10D43000904103890000000000000000000000008F +:10D4200000000000000000000000000000000000FC +:10D4300000000000000000000000000000000000EC :10D4400000000000000000000000000000000000DC :10D4500000000000000000000000000000000000CC :10D4600000000000000000000000000000000000BC -:10D4700000000000000000410005A14080100040B5 -:10D4800040000021C1000000000000000800000072 -:10D490000000050000000000000000000000000087 -:10D4A0000000000000008000008400A1008080A136 -:10D4B000009180A191910000000000000000000098 +:10D4700000000000000000000000000000000000AC +:10D48000000000000000000000000000000000009C +:10D49000000000000000000000000000000000008C +:10D4A000000000000000000000000000000000007C +:10D4B000000000000000000000000000000000006C :10D4C000000000000000000000000000000000005C :10D4D000000000000000000000000000000000004C :10D4E000000000000000000000000000000000003C -:10D4F00000000000000000002109040003000900F2 -:10D5000000020000C000911180098000800000002E -:10D5100021101100000010000000000000000000B9 -:10D52000000000000000000000090420210080032A -:10D53000A12141910380850000000000000000004F -:10D5400000000000000000000000000000200000BB +:10D4F000000000000000000000000000000000002C +:10D50000000000000000000000000000000000001B +:10D51000000000000000000000000000000000000B +:10D5200000000000000000000000000000000000FB +:10D5300000000000000000000000000000000000EB +:10D5400000000000000000000000000000000000DB :10D5500000000000000000000000000000000000CB :10D5600000000000000000000000000000000000BB -:10D570000000000000000000000001009100A00079 -:10D58000900000002000020009019000100010002F -:10D590004000010001000000000000000000000049 -:10D5A0000000000000000000000090000121219018 -:10D5B000A0000501000521408800000000000000D7 -:10D5C000000000000000000000000000000000015A +:10D5700000000000000000000000000000000000AB +:10D58000000000000000000000000000000000009B +:10D59000000000000000000000000000000000008B +:10D5A000000000000000000000000000000000007B +:10D5B000000000000000000000000000000000006B +:10D5C000000000000000000000000000000000005B :10D5D000000000000000000000000000000000004B :10D5E000000000000000000000000000000000003B -:10D5F000000000000000000000000000008100E0CA -:10D6000007000012810000E007000011008100E027 -:10D6100007000000810000E00000000000000000A2 -:10D62000000000000000000000000000818100E018 -:10D6300007000012484200E00700840000000000DC +:10D5F000000000000000000000000000000000002B +:10D60000000000000000000000000000000000001A +:10D61000000000000000000000000000000000000A +:10D6200000000000000000000000000000000000FA +:10D6300000000000000000000000000000000000EA :10D6400000000000000000000000000000000000DA -:10D6500000000700000000000000000000000000C3 +:10D6500000000000000000000000000000000000CA :10D6600000000000000000000000000000000000BA -:10D6700000000000000000000000000000000002A8 -:10D6800000020000000000F300F300000000F0C002 -:10D69000FFC30000000000000000000000000000C8 -:10D6A00000000000000000000000000000001C1C42 -:10D6B0005F5FF00000005F5F0A0A56565656000092 +:10D6700000000000000000000000000000000000AA +:10D68000000000000000000000000000000000009A +:10D69000000000000000000000000000000000008A +:10D6A000000000000000000000000000000000007A +:10D6B000000000000000000000000000000000006A :10D6C000000000000000000000000000000000005A :10D6D000000000000000000000000000000000004A :10D6E000000000000000000000000000000000003A :10D6F000000000000000000000000000000000002A -:10D700000002000200000000000000000000000015 -:10D710000000FFC300000000000000000000000047 +:10D700000000000000000000000000000000000019 +:10D710000000000000000000000000000000000009 :10D7200000000000000000000000000000000000F9 -:10D730001C1C5F5FF00000007D7D7D7D9A559A1076 +:10D7300000000000000000000000000000000000E9 :10D7400000000000000000000000000000000000D9 :10D7500000000000000000000000000000000000C9 :10D7600000000000000000000000000000000000B9 :10D7700000000000000000000000000000000000A9 -:10D780000000F351515100000000000200000000B1 +:10D780000000000000000000000000000000000099 :10D790000000000000000000000000000000000089 :10D7A0000000000000000000000000000000000079 -:10D7B0000000FFF0FFF0EB41EB4100000000556579 -:10D7C000AA9A000000000000000000000000000015 +:10D7B0000000000000000000000000000000000069 +:10D7C0000000000000000000000000000000000059 :10D7D0000000000000000000000000000000000049 :10D7E0000000000000000000000000000000000039 :10D7F0000000000000000000000000000000000029 -:10D8000000000000F351515100000000000300002F +:10D800000000000000000000000000000000000018 :10D810000000000000000000000000000000000008 :10D8200000000000000000000000000000000000F8 -:10D83000000000002820EBE0A0A0F5F5AAAAAAAA03 -:10D84000A5A55A5A000000000000000000000000DA +:10D8300000000000000000000000000000000000E8 +:10D8400000000000000000000000000000000000D8 :10D8500000000000000000000000000000000000C8 :10D8600000000000000000000000000000000000B8 :10D8700000000000000000000000000000000000A8 -:10D8800000000000000080610037000D0000006112 -:10D890000007C005000000610037000D00000061B6 -:10D8A0000004C00D000000000000000000000000A7 -:10D8B0000000000000000061003FC00D00A00061FA -:10D8C0004034C0090000000000000000000000001B -:10D8D000000000000000000000000008000000A0A0 +:10D880000000000000000000000000000000000098 +:10D890000000000000000000000000000000000088 +:10D8A0000000000000000000000000000000000078 +:10D8B0000000000000000000000000000000000068 +:10D8C0000000000000000000000000000000000058 +:10D8D0000000000000000000000000000000000048 :10D8E0000000000000000000000000000000000038 :10D8F0000000000000000000000000000000000028 -:10D900000000000000000000FFFFFF070003000010 -:10D91000E0E0E0E0FF3CFF3C000000000000000011 -:10D920003C3CFF0000000000000000000000000080 -:10D9300000000000000000005F055F0500F000F03F -:10D940005B555B5FFFFF000000000000000000006F +:10D900000000000000000000000000000000000017 +:10D910000000000000000000000000000000000007 +:10D9200000000000000000000000000000000000F7 +:10D9300000000000000000000000000000000000E7 +:10D9400000000000000000000000000000000000D7 :10D9500000000000000000000000000000000000C7 :10D9600000000000000000000000000000000000B7 :10D9700000000000000000000000000000000000A7 -:10D9800000000000000000000000FFFFFF0000009A -:10D990000000EBEBEBEBFF3CFF3C00000000000065 -:10D9A00000003C3CFF000000000000000000000000 -:10D9B000000000000000000000000000000000F077 -:10D9C00000F00B050B0F1010FFEB00000000000033 +:10D980000000000000000000000000000000000097 +:10D990000000000000000000000000000000000087 +:10D9A0000000000000000000000000000000000077 +:10D9B0000000000000000000000000000000000067 +:10D9C0000000000000000000000000000000000057 :10D9D0000000000000000000000000000000000047 :10D9E0000000000000000000000000000000000037 :10D9F0000000000000000000000000000000000027 :10DA00000000000000000000000000000000000016 -:10DA1000FFC3FFC3010001015500550000000000D5 +:10DA10000000000000000000000000000000000006 :10DA200000000000000000000000000000000000F6 :10DA300000000000000000000000000000000000E6 -:10DA40000000FF55030300000F0F0000000000005E +:10DA400000000000000000000000000000000000D6 :10DA500000000000000000000000000000000000C6 :10DA600000000000000000000000000000000000B6 :10DA700000000000000000000000000000000000A6 -:10DA800000000000000000000000000000000F0F78 -:10DA90000F0FFFC3FFC30100010155005500000037 -:10DAA00000000000000000000C000000000000006A +:10DA80000000000000000000000000000000000096 +:10DA90000000000000000000000000000000000086 +:10DAA0000000000000000000000000000000000076 :10DAB0000000000000000000000000000000000066 -:10DAC00000000000FF55030300000F0F00000000DE +:10DAC0000000000000000000000000000000000056 :10DAD0000000000000000000000000000000000046 :10DAE0000000000000000000000000000000000036 :10DAF0000000000000000000000000000000000026 :10DB00000000000000000000000000000000000015 -:10DB100004000000000000000000000000000200FF -:10DB20000011A00400042004000000000000000018 +:10DB10000000000000000000000000000000000005 +:10DB200000000000000000000000000000000000F5 :10DB300000000000000000000000000000000000E5 :10DB400000000000000000000000000000000000D5 -:10DB500000010000000000000000000000000000C4 -:10DB60000000000000000000000000004000000075 +:10DB500000000000000000000000000000000000C5 +:10DB600000000000000000000000000000000000B5 :10DB700000000000000000000000000000000000A5 -:10DB80000000400000000004000840004000400089 -:10DB90004000000000000000000000000000000045 -:10DBA00000000000000100018001000040000000B2 -:10DBB0000000000000000000000000004000000025 -:10DBC0004100000000000000000000000000000014 +:10DB80000000000000000000000000000000000095 +:10DB90000000000000000000000000000000000085 +:10DBA0000000000000004000000000000000000035 +:10DBB0000000000000000000000000000000000065 +:10DBC0000000000000000000000000000000000055 :10DBD0000000000000000000000000000000000045 -:10DBE0000000000000000000000000000000000035 +:10DBE0000000000000000002000000000000000033 :10DBF0000000000000000000000000000000000025 -:10DC000040000000000000000000000010000002C2 -:10DC1000000010000000010000009009000000005A -:10DC200000000400410090000000400000000000DF -:10DC30000000000000000000088000800000058057 -:10DC400000002000000000000000000000000000B4 -:10DC500000000800000000000000000000000000BC +:10DC00000000000000000000000000000000000014 +:10DC10000000000000000000000000000000000004 +:10DC200000000000000000000000000000000000F4 +:10DC300000000000000000000000000000000000E4 +:10DC400000000000000000000000000000000000D4 +:10DC500000000000000000000000000000000000C4 :10DC600000000000000000000000000000000000B4 :10DC700000000000000000000000000000000000A4 :10DC80000000000000000000000000000000000094 -:10DC90000000000000000000080000080000400034 -:10DCA000000000000008A00000000000800000004C -:10DCB00000080000000000000000801000200000AC -:10DCC000200400000010000000020000000000001E -:10DCD00000840000000000000000000000000000C0 +:10DC90000000000000000000000000000000000084 +:10DCA0000000000000000000000000000000000074 +:10DCB0000000000000000000000000000000000064 +:10DCC0000000000000000000000000000000000054 +:10DCD0000000000000000000000000000000000044 :10DCE0000000000000000000000000000000000034 :10DCF0000000000000000000000000000000000024 :10DD00000000000000000000000000000000000013 -:10DD100000000000000000008803000020008808C8 -:10DD2000000000000000040904004008000000009A -:10DD300000000400000000200000000000000100BE -:10DD4000C00000008400000000000000000000008F +:10DD10000000000000000000000000000000000003 +:10DD200000000000000000000000000000000000F3 +:10DD300000000000000000000000000000000000E3 +:10DD400000000000000000000000000000000000D3 :10DD500000000000000000000000000000000000C3 -:10DD60002000000084118800000000000000000076 +:10DD600000000000000000000000000000000000B3 :10DD700000000000000000000000000000000000A3 :10DD80000000000000000000000000000000000093 -:10DD90000000000000000000000000000000210062 -:10DDA00000820000000000000000090400004100A3 -:10DDB00009000000000000000000118400000000C5 -:10DDC0000490000000000500080021004100000050 -:10DDD000082000000000000000000000000000001B +:10DD90000000000000000000000000000000000083 +:10DDA0000000000000000000000000000000000073 +:10DDB0000000000000000000000000000000000063 +:10DDC0000000000000000000000000000000000053 +:10DDD0000000000000000000000000000000000043 :10DDE0000000000000000000000000000000000033 :10DDF0000000000000000000000000000000000023 :10DE00000000000000000000000000000000000012 -:10DE100000000000000004000000000000000000FE -:10DE20000000820000000000000000004000C00070 -:10DE300000008200000090000000000000000000D0 -:10DE400000000400000000000000000000000000CE +:10DE10000000000000000000000000000000000002 +:10DE200000000000000000000000000000000000F2 +:10DE300000000000000000000000000000000000E2 +:10DE400000000000000000000000000000000000D2 :10DE500000000000000000000000000000000000C2 :10DE600000000000000000000000000000000000B2 :10DE700000000000000000000000000000000000A2 :10DE80000000000000000000000000000000000092 :10DE90000000000000000000000000000000000082 :10DEA0000000000000000000000000000000000072 -:10DEB000000000000000000000000000000003005F -:10DEC0000000050003001100000000000000000039 -:10DED00000880000000000000000000000000000BA +:10DEB0000000000000000000000000000000000062 +:10DEC0000000000000000000000000000000000052 +:10DED0000000000000000000000000000000000042 :10DEE0000000000000000000000000000000000032 :10DEF0000000000000000000000000000000000022 :10DF00000000000000000000000000000000000011 :10DF10000000000000000000000000000000000001 -:10DF2000000000020000000000000008822004053C -:10DF30000080000000000000002000000000000041 -:10DF40000000040084000000000000008400840041 +:10DF200000000000000000000000000000000000F1 +:10DF300000000000000000000000000000000000E1 +:10DF400000000000000000000000000000000000D1 :10DF500000000000000000000000000000000000C1 :10DF600000000000000000000000000000000000B1 :10DF700000000000000000000000000000000000A1 :10DF80000000000000000000000000000000000091 -:10DF90000000000000000000000000000800000079 -:10DFA000000041C0410005820004000000000000A4 -:10DFB00008840004000000000900000000000000C8 -:10DFC0000000000000000000000000200020000011 -:10DFD00000002100080041000300210000000000B3 +:10DF90000000000000000000000000000000000081 +:10DFA0000000000000000000000000000000000071 +:10DFB0000000000000000000000000000000000061 +:10DFC0000000000000000000000000000000000051 +:10DFD0000000000000000000000000000000000041 :10DFE0000000000000000000000000000000000031 :10DFF0000000000000000000000000000000000021 :10E000000000000000000000000000000000000010 :10E010000000000000000000000000000000000000 -:10E0200000000000000000000000000000410000AF -:10E03000000000400000000000800002000000001E -:10E04000000000000800820000000000C0C10000C5 -:10E050000000000090100000000000000000000020 +:10E0200000000000000000000000000000000000F0 +:10E0300000000000000000000000000000000000E0 +:10E0400000000000000000000000000000000000D0 +:10E0500000000000000000000000000000000000C0 :10E0600000000000000000000000000000000000B0 :10E0700000000000000000000000000000000000A0 :10E080000000000000000000000000000000000090 :10E090000000000000000000000000000000000080 :10E0A0000000000000000000000000000000000070 -:10E0B000000000000000000000000004000000005C -:10E0C000000000000000000000000000000041020D -:10E0D000210000000000000000000000000000001F +:10E0B0000000000000000000000000000000000060 +:10E0C0000000000000000000000000000000000050 +:10E0D0000000000000000000000000000000000040 :10E0E0000000000000000000000000000000000030 :10E0F0000000000000000000000000000000000020 :10E10000000000000000000000000000000000000F :10E1100000000000000000000000000000000000FF -:10E120000000000000000000A0A00002000200406B -:10E1300000000000000000000001A000200000011D +:10E1200000000000000000000000000000000000EF +:10E1300000000000000000000000000000000000DF :10E1400000000000000000000000000000000000CF -:10E15000000102002001000100000000000000009A +:10E1500000000000000000000000000000000000BF :10E1600000000000000000000000000000000000AF :10E17000000000000000000000000000000000009F :10E18000000000000000000000000000000000008F :10E19000000000000000000000000000000000007F -:10E1A000000000000000000000000080000000806F -:10E1B00000000000000000000000001090040400B7 -:10E1C000001000000000000000000000000000003F -:10E1D000000000208003001000210000000000006B +:10E1A000000000000000000000000000000000006F +:10E1B000000000000000000000000000000000005F +:10E1C000000000000000000000000000000000004F +:10E1D000000000000000000000000000000000003F :10E1E000000000000000000000000000000000002F :10E1F000000000000000000000000000000000001F :10E20000000000000000000000000000000000000E :10E2100000000000000000000000000000000000FE -:10E22000000000000000000000000000800000036B -:10E2300080000080000000000000000002081000C4 -:10E2400010020300000000000000000080008000B9 -:10E2500000208000030002002000200300000000D6 +:10E2200000000000000000000000000000000000EE +:10E2300000000000000000000000000000000000DE +:10E2400000000000000000000000000000000000CE +:10E2500000000000000000000000000000000000BE :10E2600000000000000000000000000000000000AE :10E27000000000000000000000000000000000009E :10E28000000000000000000000000000000000008E :10E29000000000000000000000000000000000007E -:10E2A0000000000000000000000000000000080066 -:10E2B0000001A00000080000000000000000009124 -:10E2C00001000001010000000000000000008800C3 -:10E2D000400082009000009001000000000100005A +:10E2A000000000000000000000000000000000006E +:10E2B000000000000000000000000000000000005E +:10E2C000000000000000000000000000000000004E +:10E2D000000000000000000000000000000000003E :10E2E000000000000000000000000000000000002E :10E2F000000000000000000000000000000000001E :10E30000000000000000000000000000000000000D :10E3100000000000000000000000000000000000FD :10E3200000000000000000000000000000000000ED -:10E330002090004020C0A0900000000000000000DD -:10E3400000001100010100000000000000000000BA -:10E3500000900088000000020000000100010000A1 +:10E3300000000000000000000000000000000000DD +:10E3400000000000000000000000000000000000CD +:10E3500000000000000000000000000000000000BD :10E3600000000000000000000000000000000000AD :10E37000000000000000000000000000000000009D :10E38000000000000000000000000000000000008D :10E39000000000000000000000000000000000007D :10E3A000000000000000000000000000000000006D -:10E3B000000000000080000080000000000000005D -:10E3C0000000000384080321044000000000000056 -:10E3D000000000000000000000800009051000217E +:10E3B000000000000000000000000000000000005D +:10E3C000000000000000000000000000000000004D +:10E3D000000000000000000000000000000000003D :10E3E000000000000000000000000000000000002D :10E3F000000000000000000000000000000000001D :10E40000000000000000000000000000000000000C :10E4100000000000000000000000000000000000FC :10E4200000000000000000000000000000000000EC :10E4300000000000000000000000000000000000DC -:10E44000000000000400401110001008000000004F -:10E4500000000000000900000000000040842011BE -:10E460000300100300000000000000000000000096 +:10E4400000000000000000000000000000000000CC +:10E4500000000000000000000000000000000000BC +:10E4600000000000000000000000000000000000AC :10E47000000000000000000000000000000000009C :10E48000000000000000000000000000000000008C :10E49000000000000000000000000000000000007C :10E4A000000000000000000000000000000000006C -:10E4B000000000000000C000821082000400000084 -:10E4C0000000000000000008010101000100000040 -:10E4D000000000000000000000A000900000000408 -:10E4E0000001010001010000000000000000000028 +:10E4B000000000000000000000000000000000005C +:10E4C000000000000000000000000000000000004C +:10E4D000000000000000000000000000000000003C +:10E4E000000000000000000000000000000000002C :10E4F000000000000000000000000000000000001C :10E50000000000000000000000000000000000000B :10E5100000000000000000000000000000000000FB :10E5200000000000000000000000000000000000EB :10E5300000000000000000000000000000000000DB -:10E540000000000000000000000000E000000000EB -:10E550000000000000000000008100000700000033 -:10E56000810000E00000000000000000000000004A +:10E5400000000000000000000000000000000000CB +:10E5500000000000000000000000000000000000BB +:10E5600000000000000000000000000000000000AB :10E57000000000000000000000000000000000009B :10E58000000000000000000000000000000000008B :10E59000000000000000000000000000000000007B :10E5A000000000000000000000000000000000006B -:10E5B000000000000000000000003030303CFBFB99 -:10E5C000FFF000000000000000000000000000005C +:10E5B000000000000000000000000000000000005B +:10E5C000000000000000000000000000000000004B :10E5D000000000000000000000000000000000003B -:10E5E0000303000000000000000000000000000025 +:10E5E000000000000000000000000000000000002B :10E5F000000000000000000000000000000000001B :10E60000000000000000000000000000000000000A :10E6100000000000000000000000000000000000FA :10E6200000000000000000000000000000000000EA -:10E630000000000000000000000000000000003C9E -:10E64000FBFBFFF0000000000000000000000000E5 +:10E6300000000000000000000000000000000000DA +:10E6400000000000000000000000000000000000CA :10E6500000000000000000000000000000000000BA -:10E6600000000303000000000000000000000000A4 +:10E6600000000000000000000000000000000000AA :10E67000000000000000000000000000000000009A :10E68000000000000000000000000000000000008A :10E69000000000000000000000000000000000007A @@ -151191,148 +151191,148 @@ :10E7100000000000000000000000000000000000F9 :10E7200000000000000000000000000000000000E9 :10E7300000000000000000000000000000000000D9 -:10E740004646464600DB00DB0000000000000000FB +:10E7400000000000000000000000000000000000C9 :10E7500000000000000000000000000000000000B9 -:10E76000000000002000EFFF00000000000000009B +:10E7600000000000000000000000000000000000A9 :10E770000000000000000000000000000000000099 :10E780000000000000000000000000000000000089 :10E790000000000000000000000000000000000079 :10E7A0000000000000000000000000000000000069 :10E7B0000000000000000000000000000000000059 -:10E7C0000000CF0C0C0C00DB00DB000000000000A0 +:10E7C0000000000000000000000000000000000049 :10E7D0000000000000000000000000000000000039 -:10E7E0000000000000000000FFFF0000000000002B +:10E7E0000000000000000000000000000000000029 :10E7F0000000000000000000000000000000000019 :10E800000000000000000000000000000000000008 :10E8100000000000000000000000000000000000F8 :10E8200000000000000000000000000000000000E8 :10E8300000000000000000000000000000000000D8 :10E8400000000000000000000000000000000000C8 -:10E850000000000000610007000D00000000000043 -:10E860000000000000000030001000000061000403 -:10E87000C00D0000000000000000000000000000CB +:10E8500000000000000000000000000000000000B8 +:10E8600000000000000000000000000000000000A8 +:10E870000000000000000000000000000000000098 :10E880000000000000000000000000000000000088 :10E890000000000000000000000000000000000078 :10E8A0000000000000000000000000000000000068 :10E8B0000000000000000000000000000000000058 :10E8C0000000000000000000000000000000000048 -:10E8D000000000000000A1ABF1FB030302020000F6 -:10E8E00000000000000000000000000000000F0F0A -:10E8F0000F0FFB0BFB0B00000000000000000000EE +:10E8D0000000000000000000000000000000000038 +:10E8E0000000000000000000000000000000000028 +:10E8F0000000000000000000000000000000000018 :10E900000000000000000000000000000000000007 :10E9100000000000000000000000000000000000F7 :10E9200000000000000000000000000000000000E7 :10E9300000000000000000000000000000000000D7 :10E9400000000000000000000000000000000000C7 -:10E950000000000000000000A1ABF1FB00C38282B8 +:10E9500000000000000000000000000000000000B7 :10E9600000000000000000000000000000000000A7 -:10E970000F0F170FFB0BFB0B000000000000000047 +:10E970000000000000000000000000000000000097 :10E980000000000000000000000000000000000087 :10E990000000000000000000000000000000000077 :10E9A0000000000000000000000000000000000067 :10E9B0000000000000000000000000000000000057 :10E9C0000000000000000000000000000000000047 -:10E9D0000000000000000000000000C3EBEBFF009F -:10E9E000FFFF000000000000000000000000000029 -:10E9F000000005450041C382C00000000000000087 +:10E9D0000000000000000000000000000000000037 +:10E9E0000000000000000000000000000000000027 +:10E9F0000000000000000000000000000000000017 :10EA00000000000000000000000000000000000006 :10EA100000000000000000000000000000000000F6 :10EA200000000000000000000000000000000000E6 :10EA300000000000000000000000000000000000D6 :10EA400000000000000000000000000000000000C6 -:10EA50000000000000000000000000003CFFEBEBA5 -:10EA6000D000D0D000000000000000000000000036 -:10EA700000000000054500410082C00000000000C9 +:10EA500000000000000000000000000000000000B6 +:10EA600000000000000000000000000000000000A6 +:10EA70000000000000000000000000000000000096 :10EA80000000000000000000000000000000000086 :10EA90000000000000000000000000000000000076 :10EAA0000000000000000000000000000000000066 :10EAB0000000000000000000000000000000000056 :10EAC0000000000000000000000000000000000046 -:10EAD000000000008800200000002000000010005E -:10EAE0002000200000002000000040000000004046 -:10EAF0004000000000002000000020410000000055 -:10EB0000000000000000C000000020000000000322 -:10EB1000C080010000800080200000002000000074 -:10EB200000000000000000002000000020000004A1 -:10EB30002000000000000000200000002000000471 -:10EB40000000000000000000200000002000000085 -:10EB50000000000000000000000011004040000222 -:10EB60000000000040024000110000001002000000 -:10EB700000000000000000000000000240402100F2 -:10EB80000040400000000000400000004000000085 -:10EB900000004020040000201020400200004040FF -:10EBA00000004000000000000000400040000000A5 -:10EBB0000000400000000000000000000000404095 -:10EBC0000000000000004002000040000000400281 -:10EBD000000000000400000400000000020000002B -:10EBE0000000040000000000000000000400040019 -:10EBF0000000000000000000000000000480081079 -:10EC00000000840000000000000000000000000080 -:10EC100000000000000000000000080000000000EC +:10EAD0000000000000000000000000000000000036 +:10EAE0002000000000000000000000000000000006 +:10EAF0000000000000000000000000000000000016 +:10EB000020000000000000000000000000000000E5 +:10EB100000000000000000000000000000000000F5 +:10EB200000002000000000000000000000000000C5 +:10EB300000000000000000000000000000000000D5 +:10EB400000002000000000000000000000000000A5 +:10EB50004000000000000000000000000000000075 +:10EB600000000000000000000000409000000000D5 +:10EB70000000000000000000000000000000000095 +:10EB80000000000000000000000000000000000085 +:10EB900000000000000000000000000000000090E5 +:10EBA0000000000200000000000000000000000063 +:10EBB0000000000000000000000000000000000055 +:10EBC0000000000000000000000000000000000045 +:10EBD0000000000000000000000000000000000035 +:10EBE0000000000000000000000000000000000025 +:10EBF00008400000000000000000000000000000CD +:10EC00000000000000000000000000000000000004 +:10EC100008400000000000000000000000000000AC :10EC200000000000000000000000000000000000E4 -:10EC300000000200000000000000000000000000D2 +:10EC3000000008400000000000000000000000008C :10EC400000000000000000000000000000000000C4 -:10EC5000000002000010000000080000004000005A -:10EC6000008200820000000000000000008400001C -:10EC700000000000000000000008000000008010FC -:10EC800080000010000000000000000000000000F4 -:10EC900000000004000000000000008400000000EC -:10ECA0004000000000000000000000000000000024 +:10EC5000000008400000000000000000000000006C +:10EC600000000000000000000000000000000000A4 +:10EC70000000000000000000000000000000000094 +:10EC80000000000000000000000000000000000084 +:10EC90000000000000000000000000000000000074 +:10ECA0000000000000000000000000000000000064 :10ECB0000000000000000000000000000000000054 :10ECC0000000000000000000000000000000000044 :10ECD0000000000000000000000000000000000034 -:10ECE00000000000000800000000000000002000FC -:10ECF000000000000000000000000000000000090B -:10ED0000000000000000080000000000A0008800D3 +:10ECE0000000000000000000000000000000000024 +:10ECF0000000000000000000000000000000000014 +:10ED00000000000000000000000000000000000003 :10ED100000000000000000000000000000000000F3 -:10ED20000000000004000000000000000011880046 +:10ED200000000000000002000000000000000000E1 :10ED300000000000000000000000000000000000D3 -:10ED40000000000000000000000000000000400083 +:10ED400000000000000000000000000000000000C3 :10ED500000000000000000000000000000000000B3 -:10ED6000000000084100000000000000000000005A -:10ED700000040082080000000000000003000300FF +:10ED600000000000000000000000000000000000A3 +:10ED70000000000000000000000000000000000093 :10ED80000000000000000000000000000000000083 -:10ED9000000000000000000000000000080000006B -:10EDA0000000000000000020000000000000000043 +:10ED90000000000000000000000000000000000073 +:10EDA0000000000000000000000000000000000063 :10EDB0000000000000000000000000000000000053 :10EDC0000000000000000000000000000000000043 -:10EDD0000000000000000000000008000000080023 -:10EDE0000000000000000000080000000000820099 -:10EDF0000800000000000000824000000000004009 -:10EE000008000000000000000000000008000000F2 +:10EDD0000000000000000000000000000000000033 +:10EDE0000000000000000000000000000000000023 +:10EDF0000000000000000000000000000000000013 +:10EE00000000000000000000000000000000000002 :10EE100000000000000000000000000000000000F2 :10EE200000000000000000000000000000000000E2 :10EE300000000000000000000000000000000000D2 -:10EE400000080000000000000000000000000000BA -:10EE500000000000000000000008000000000000AA +:10EE400000000000000000000000000000000000C2 +:10EE500000000000000000000000000000000000B2 :10EE600000000000000000000000000000000000A2 -:10EE7000000000000000000000000008000000008A +:10EE70000000000000000000000000000000000092 :10EE80000000000000000000000000000000000082 :10EE90000000000000000000000000000000000072 :10EEA0000000000000000000000000000000000062 :10EEB0000000000000000000000000000000000052 :10EEC0000000000000000000000000000000000042 -:10EED000000000000000000000000008000000002A -:10EEE000000000000800000000000000000000001A -:10EEF0000000000000000000000000000000001002 -:10EF000000008200820000000100000000000000FC -:10EF100000000000000008000000A0000000000049 +:10EED0000000000000000000000000000000000032 +:10EEE0000000000000000000000000000000000022 +:10EEF0000000000000000000000000000000000012 +:10EF00000000000000000000000000000000000001 +:10EF100000000000000000000000000000000000F1 :10EF200000000000000000000000000000000000E1 :10EF300000000000000000000000000000000000D1 :10EF400000000000000000000000000000000000C1 :10EF500000000000000000000000000000000000B1 -:10EF60000000000008000300000200000000000094 -:10EF7000030000000300080000040000000021005E -:10EF80000000000003040300090008000000400026 -:10EF9000000000000000030000000000000000006E -:10EFA0000000000000000000000000000900000058 +:10EF600000000000000000000000000000000000A1 +:10EF70000000000000000000000000000000000091 +:10EF80000000000000000000000000000000000081 +:10EF90000000000000000000000000000000000071 +:10EFA0000000000000000000000000000000000061 :10EFB0000000000000000000000000000000000051 :10EFC0000000000000000000000000000000000041 :10EFD0000000000000000000000000000000000031 :10EFE0000000000000000000000000000000000021 -:10EFF0000000000000000000880000000000000089 -:10F0000000000000000000000800000000000000F8 -:10F010008400000000000800002000000000000044 +:10EFF0000000000000000000000000000000000011 +:10F000000000000000000000000000000000000000 +:10F0100000000000000000000000000000000000F0 :10F0200000000000000000000000000000000000E0 :10F0300000000000000000000000000000000000D0 :10F0400000000000000000000000000000000000C0 @@ -151347,8 +151347,8 @@ :10F0D0000000000000000000000000000000000030 :10F0E0000000000000000000000000000000000020 :10F0F0000000000000000000000000000000000010 -:10F1000000000000000000000000000000008290ED -:10F110000002008208A000000000000000000000C3 +:10F1000000000000000000000000000000000000FF +:10F1100000000000000000000000000000000000EF :10F1200000000000000000000000000000000000DF :10F1300000000000000000000000000000000000CF :10F1400000000000000000000000000000000000BF @@ -151356,7 +151356,7 @@ :10F16000000000000000000000000000000000009F :10F17000000000000000000000000000000000008F :10F18000000000000000000000000000000000007F -:10F19000000000800000800000000000000000006F +:10F19000000000000000000000000000000000006F :10F1A000000000000000000000000000000000005F :10F1B000000000000000000000000000000000004F :10F1C000000000000000000000000000000000003F @@ -151364,48 +151364,48 @@ :10F1E000000000000000000000000000000000001F :10F1F000000000000000000000000000000000000F :10F2000000000000000000000000000000000000FE -:10F210000000000000418008000000000000000025 +:10F2100000000000000000000000000000000000EE :10F2200000000000000000000000000000000000DE -:10F23000000000800000000000000000000000004E +:10F2300000000000000000000000000000000000CE :10F2400000000000000000000000000000000000BE :10F2500000000000000000000000000000000000AE :10F26000000000000000000000000000000000009E :10F27000000000000000000000000000000000008E :10F28000000000000000000000000000000000007E -:10F2900000000000A000102084C182840000000053 +:10F29000000000000000000000000000000000006E :10F2A000000000000000000000000000000000005E -:10F2B000002000000002000000000000000000002C +:10F2B000000000000000000000000000000000004E :10F2C000000000000000000000000000000000003E :10F2D000000000000000000000000000000000002E :10F2E000000000000000000000000000000000001E :10F2F000000000000000000000000000000000000E :10F3000000000000000000000000000000000000FD -:10F31000000000000000C00200A000820004000005 +:10F3100000000000000000000000000000000000ED :10F3200000000000000000000000000000000000DD -:10F33000000000004000000000000000000000008D +:10F3300000000000000000000000000000000000CD :10F3400000000000000000000000000000000000BD :10F3500000000000000000000000000000000000AD :10F36000000000000000000000000000000000009D :10F37000000000000000000000000000000000008D :10F38000000000000000000000000000000000007D -:10F39000000000000000000080800080000000806D +:10F39000000000000000000000000000000000006D :10F3A000000000000000000000000000000000005D -:10F3B00000000300000080000000000000000000CA +:10F3B000000000000000000000000000000000004D :10F3C000000000000000000000000000000000003D :10F3D000000000000000000000000000000000002D :10F3E000000000000000000000000000000000001D :10F3F000000000000000000000000000000000000D :10F4000000000000000000000000000000000000FC -:10F4100000000000000000000000000080108000DC -:10F42000800000000000000000000000000000005C -:10F43000000000000040000000000000000000008C +:10F4100000000000000000000000000000000000EC +:10F4200000000000000000000000000000000000DC +:10F4300000000000000000000000000000000000CC :10F4400000000000000000000000000000000000BC :10F4500000000000000000000000000000000000AC :10F46000000000000000000000000000000000009C :10F47000000000000000000000000000000000008C :10F48000000000000000000000000000000000007C -:10F4900000000000000000000000000088000205DD -:10F4A0008240A000000000000000000000000000FA +:10F49000000000000000000000000000000000006C +:10F4A000000000000000000000000000000000005C :10F4B000000000000000000000000000000000004C :10F4C000000000000000000000000000000000003C :10F4D000000000000000000000000000000000002C @@ -151413,15 +151413,15 @@ :10F4F000000000000000000000000000000000000C :10F5000000000000000000000000000000000000FB :10F5100000000000000000000000000000000000EB -:10F520000000070060000000000000000000000074 -:10F5300000000000000000000000000007000000C4 +:10F5200000000000000000000000000000000000DB +:10F5300000000000000000000000000000000000CB :10F5400000000000000000000000000000000000BB :10F5500000000000000000000000000000000000AB :10F56000000000000000000000000000000000009B :10F57000000000000000000000000000000000008B :10F58000000000000000000000000000000000007B :10F59000000000000000000000000000000000006B -:10F5A000EBEBFFF00F0F070F000000000000000062 +:10F5A000000000000000000000000000000000005B :10F5B000000000000000000000000000000000004B :10F5C000000000000000000000000000000000003B :10F5D000000000000000000000000000000000002B @@ -151429,7 +151429,7 @@ :10F5F000000000000000000000000000000000000B :10F6000000000000000000000000000000000000FA :10F6100000000000000000000000000000000000EA -:10F620000000EBEB00F0FFFFD7FF00000000000040 +:10F6200000000000000000000000000000000000DA :10F6300000000000000000000000000000000000CA :10F6400000000000000000000000000000000000BA :10F6500000000000000000000000000000000000AA @@ -151437,7 +151437,7 @@ :10F67000000000000000000000000000000000008A :10F68000000000000000000000000000000000007A :10F69000000000000000000000000000000000006A -:10F6A0000000000000000000FFFFBCFC00000000A4 +:10F6A000000000000000000000000000000000005A :10F6B000000000000000000000000000000000004A :10F6C000000000000000000000000000000000003A :10F6D000000000000000000000000000000000002A @@ -151445,7 +151445,7 @@ :10F6F000000000000000000000000000000000000A :10F7000000000000000000000000000000000000F9 :10F7100000000000000000000000000000000000E9 -:10F72000000000000000000030000000BCFC0000F1 +:10F7200000000000000000000000000000000000D9 :10F7300000000000000000000000000000000000C9 :10F7400000000000000000000000000000000000B9 :10F7500000000000000000000000000000000000A9 @@ -151453,9 +151453,9 @@ :10F770000000000000000000000000000000000089 :10F780000000000000000000000000000000000079 :10F790000000000000000000000000000000000069 -:10F7A000000000000000000000000E00000000004B +:10F7A0000000000000000000000000000000000059 :10F7B0000000000000000000000000000000000049 -:10F7C000000005180A00050005A000000000000068 +:10F7C0000000000000000000000000000000000039 :10F7D0000000000000000000000000000000000029 :10F7E0000000000000000000000000000000000019 :10F7F0000000000000000000000000000000000009 @@ -151491,102 +151491,102 @@ :10F9D0000000000000000000000000000000000027 :10F9E0000000000000000000000000000000000017 :10F9F0000000000000000000000000000000000007 -:10FA0000000000000000000000002000880000004E -:10FA100000002000000020000000200088000000FE -:10FA2000000004000000C000000000000000000012 -:10FA3000000020000000000000000400040004009A -:10FA40000400100000008800C00000030000000057 -:10FA50000000400020000000000000002000200006 -:10FA600020002000400000002000000000000000F6 -:10FA70000000200021000100010001002100200001 -:10FA80002000200000000000200000000000000016 -:10FA900000020000000040000040000000000000E4 -:10FAA0000000000000004000000000000000000016 -:10FAB0000000000000000000000000008000800046 -:10FAC00080008000000000000000004000000000F6 -:10FAD00000000000000000004000000000000000E6 -:10FAE0000000000200000000000040020000400092 -:10FAF000000000000040200020002000200208003C -:10FB000000000000000000000002000000000200F1 -:10FB100000000000000000000000000000000000E5 -:10FB200004000008000000000000000000000000C9 +:10FA000000000000000000000000000000000000F6 +:10FA100000000000400000000400000000000000A2 +:10FA200000000000000000000000000000000000D6 +:10FA300000000000000000002000000000000000A6 +:10FA40004000000000000000000000000000000076 +:10FA50000000000000000000000020000000000086 +:10FA60000000000000000000000000000000000096 +:10FA7000000000000000C0000000200000000000A6 +:10FA80000000000000000000000000000000000076 +:10FA90004000000000000000000000000000000026 +:10FAA0000000000000000000000000000000000056 +:10FAB0000000000000000000000000000000000046 +:10FAC0000000000000000000000000000000000036 +:10FAD0000000000000000000000000000000000026 +:10FAE0000000000000000000000000000000000016 +:10FAF0000000000000000000000000000000000006 +:10FB000000000000000000000000000000000000F5 +:10FB100000000000000000000000000400000000E1 +:10FB200000000000000000000000000000000000D5 :10FB300000000000000000000000000000000000C5 -:10FB400000000000000000000400000000000000B1 +:10FB400000000000000000000000000000000000B5 :10FB500000000000000000000000000000000000A5 :10FB60000000000000000000000000000000000095 :10FB70000000000000000000000000000000000085 -:10FB80000000000000000200000000000000000073 -:10FB900000000000000000840008000000080000D1 -:10FBA0000000008200000084000000080000000047 -:10FBB0000008000000080000000400080008000021 -:10FBC000000000000008000000000008000800001D -:10FBD00000000008000000080008000000080008FD -:10FBE0000000000000000002000000000008000803 -:10FBF0000000000800000008000800000008009055 -:10FC000000000000000000000000000000080008E4 -:10FC10000000000800000003000084030000000052 -:10FC20000000000004008800000240000000000006 -:10FC3000000000200000000000080000000000009C +:10FB80000000000000000000000000000000000075 +:10FB90000000000000000000000000000004000061 +:10FBA0000000000000000000000000000000000055 +:10FBB0000000000000000000000000000000000045 +:10FBC0000000000000000000000000000000000035 +:10FBD0000000000000000000000000000000000025 +:10FBE0000000000000000000000000000000000015 +:10FBF0000000000000000000000000000000000005 +:10FC000000000000000000000000000000000000F4 +:10FC100000000000000000000000000000000000E4 +:10FC200000000000000000000000000000000000D4 +:10FC300000000000000000000000000000000000C4 :10FC400000000000000000000000000000000000B4 -:10FC50000000000000000000000000400000000064 +:10FC500000000000000000000000000000000000A4 :10FC60000000000000000000000000000000000094 :10FC70000000000000000000000000000000000084 :10FC80000000000000000000000000000000000074 :10FC90000000000000000000000000000000000064 -:10FCA0000000000000A00000000800C000000000EC -:10FCB000000000200000030000000400000000001D -:10FCC00000000000080400000000000008002100FF +:10FCA0000000000000000000000000000000000054 +:10FCB0000000000000000000000000000000000044 +:10FCC0000000000000000000000000000000000034 :10FCD0000000000000000000000000000000000024 :10FCE0000000000000000000000000000000000014 :10FCF0000000000000000000000000000000000004 :10FD000000000000000000000000000000000000F3 -:10FD100000000000000000000800000000000000DB -:10FD200000000000000000000800000000000000CB -:10FD300000000000000000200800C00000000000DB -:10FD400000000800000000000000000000000000AB +:10FD100000000000000000000000000000000000E3 +:10FD200000000000000000000000000000000000D3 +:10FD300000000000000000000000000000000000C3 +:10FD400000000000000000000000000000000000B3 :10FD500000000000000000000000000000000000A3 :10FD60000000000000000000000000000000000093 -:10FD70000800000000000800000000000000000073 -:10FD800082000000000010000000000000000000E1 -:10FD900082000000000000000000000000000000E1 -:10FDA000000000000000000000000000000000C093 -:10FDB000080000000000000000000000000000003B -:10FDC000000000000000000000000000000000A093 -:10FDD000000000000800000000000000000000001B +:10FD70000000000000000000000000000000000083 +:10FD80000000000000000000000000000000000073 +:10FD90000000000000000000000000000000000063 +:10FDA000000010000000080000000000000000003B +:10FDB0000000000000000000000000000000000043 +:10FDC0000500080000000000000000000000000026 +:10FDD0000000000000000000000000000000100013 :10FDE0000000000000000000000000000000000013 -:10FDF00010000000000000000000000000000000F3 -:10FE000000000000000000000000000000000000F2 +:10FDF00000000000000000000000000000001000F3 +:10FE000000000000050000000000000000000000ED :10FE100000000000000000000000000000000000E2 -:10FE200000000000000800000000000000000000CA -:10FE300000030000000000080800000000000000AF -:10FE40000000A000000000000000000000000020F2 -:10FE50000020000000000000000000000000000082 +:10FE200000000000000000000000000000000000D2 +:10FE300000000000000000000000000000000000C2 +:10FE400000000000000000000000000000000000B2 +:10FE500000000000000000000000000000000000A2 :10FE60000000000000000000000000000000000092 :10FE70000000000000000000000000000000000082 -:10FE80000000000000000000400000000000000032 -:10FE90000000000000000000002000000000000042 +:10FE80000000000000000000000000000000000072 +:10FE90000000000000000000000000000000000062 :10FEA0000000000000000000000000000000000052 :10FEB0000000000000000000000000000000000042 -:10FEC00000000000000004200020050000000000E9 -:10FED0000000000000000000000009000000000019 -:10FEE0000000000000001000000000000000000002 -:10FEF00000000400000000000000000000000000FE +:10FEC0000000000000000000000000000000000032 +:10FED0000000000000000000000000000000000022 +:10FEE0000000000000000000000000000000000012 +:10FEF0000000000000000000000000000000000002 :10FF000000000000000000000000000000000000F1 :10FF100000000000000000000000000000000000E1 -:10FF200000000008000000000000000000000000C9 -:10FF300000000000000000000000000000000800B9 +:10FF200000000000000000000000000000000000D1 +:10FF300000000000000000000000000000000000C1 :10FF400000000000000000000000000000000000B1 -:10FF50000800000000000000000000000000000099 +:10FF500000000000000000000000000000000000A1 :10FF60000000000000000000000000000000000091 :10FF70000000000000000000000000000000000081 :10FF80000000000000000000000000000000000071 -:10FF900000000000000000000800000000008200D7 -:10FFA0000000000000000000000000000008000049 +:10FF90000000000000000000000000000000000061 +:10FFA0000000000000000000080000000000000049 :10FFB0000000000000000000000000000000000041 -:10FFC000000000000000000000820000000000822D -:10FFD0000000000000000000000000000000000021 -:10FFE0000000000000000000000000000000000809 -:10FFF0000000000000000000000000000000000001 +:10FFC0000000000000000000000000000000000031 +:10FFD0000000000000001000000000000000000011 +:10FFE0000000000000000000000000000000000011 +:10FFF00000000000000000000800000000000000F9 :020000040025D5 :1000000000000000000000000000000000000000F0 :1000100000000000000000000000000000000000E0 @@ -151605,40 +151605,40 @@ :1000E0000000000000000000000000000000000010 :1000F0000000000000000000000000000000000000 :1001000000000000000000000000000000000000EF -:1001100000000000000000000000040000000000DB +:1001100000000000000000000000000000000000DF :1001200000000000000000000000000000000000CF :1001300000000000000000000000000000000000BF :1001400000000000000000000000000000000000AF -:10015000000000000000000000000000008000001F +:10015000000000000000000000000000000000009F :10016000000000000000000000000000000000008F :10017000000000000000000000000000000000007F :10018000000000000000000000000000000000006F -:100190000008000000100000000000000000000047 +:10019000000000000000000000000000000000005F :1001A000000000000000000000000000000000004F :1001B000000000000000000000000000000000003F :1001C000000000000000000000000000000000002F -:1001D00000000000000000000000004000000002DD +:1001D000000000000000000000000000000000001F :1001E000000000000000000000000000000000000F :1001F00000000000000000000000000000000000FF :1002000000000000000000000000000000000000EE -:1002100000000000000000010000000000000000DD +:1002100000000000000000000000000000000000DE :1002200000000000000000000000000000000000CE :1002300000000000000000000000000000000000BE :1002400000000000000000000000000000000000AE -:10025000000000000000000000000000000040005E +:10025000000000000000000000000000000000009E :10026000000000000000000000000000000000008E :10027000000000000000000000000000000000007E :10028000000000000000000000000000000000006E -:1002900000000000000090000000000000000000CE +:10029000000000000000000000000000000000005E :1002A000000000000000000000000000000000004E :1002B000000000000000000000000000000000003E :1002C000000000000000000000000000000000002E -:1002D00000000000000000000000000020000000FE +:1002D000000000000000000000000000000000001E :1002E000000000000000000000000000000000000E :1002F00000000000000000000000000000000000FE :1003000000000000000000000000000000000000ED -:10031000000000000000000000000000400000009D -:1003200000000000110000000000000000000000BC +:1003100000000000000000000000000000000000DD +:1003200000000000000000000000000000000000CD :1003300000000000000000000000000000000000BD :1003400000000000000000000000000000000000AD :10035000000000000000000000000000000000009D @@ -151646,7 +151646,7 @@ :10037000000000000000000000000000000000007D :10038000000000000000000000000000000000006D :10039000000000000000000000000000000000005D -:1003A00000000000000080000000000000000000CD +:1003A000000000000000000000000000000000004D :1003B000000000000000000000000000000000003D :1003C000000000000000000000000000000000002D :1003D000000000000000000000000000000000001D @@ -151654,15 +151654,15 @@ :1003F00000000000000000000000000000000000FD :1004000000000000000000000000000000000000EC :1004100000000000000000000000000000000000DC -:1004200000000000020088009000000000000000B2 +:1004200000000000000000000000000000000000CC :1004300000000000000000000000000000000000BC :1004400000000000000000000000000000000000AC :10045000000000000000000000000000000000009C -:100460000000000000000704000000000000000081 +:10046000000000000000000000000000000000008C :10047000000000000000000000000000000000007C :10048000000000000000000000000000000000006C -:10049000000000000000000000000000000002E07A -:1004A00000000000600000E000000000000000000C +:10049000000000000000000000000000000000005C +:1004A000000000000000000000000000000000004C :1004B000000000000000000000000000000000003C :1004C000000000000000000000000000000000002C :1004D000000000000000000000000000000000001C @@ -151670,7 +151670,7 @@ :1004F00000000000000000000000000000000000FC :1005000000000000000000000000000000000000EB :1005100000000000000000000000000000000000DB -:100520000000000000003CF03CF000000000000073 +:1005200000000000000000000000000000000000CB :1005300000000000000000000000000000000000BB :1005400000000000000000000000000000000000AB :10055000000000000000000000000000000000009B @@ -151678,7 +151678,7 @@ :10057000000000000000000000000000000000007B :10058000000000000000000000000000000000006B :10059000000000000000000000000000000000005B -:1005A00000000000000000003CF03CF000000000F3 +:1005A000000000000000000000000000000000004B :1005B000000000000000000000000000000000003B :1005C000000000000000000000000000000000002B :1005D000000000000000000000000000000000001B @@ -151706,12 +151706,12 @@ :1007300000000000000000000000000000000000B9 :1007400000000000000000000000000000000000A9 :100750000000000000000000000000000000000099 -:10076000000000000000000000000000000005186C -:100770000A00050004A000000000000000000000C6 +:100760000000000000000000000000000000000089 +:100770000000000000000000000000000000000079 :100780000000000000000000000000000000000069 :100790000000000000000000000000000000000059 -:1007A000000000000000000000650006000F2000AF -:1007B00000610007800D2000000000000000000024 +:1007A0000000000000000000000000000000000049 +:1007B0000000000000000000000000000000000039 :1007C0000000000000000000000000000000000029 :1007D0000000000000000000000000000000000019 :1007E0000000000000000000000000000000000009 @@ -151744,178 +151744,178 @@ :100990000000000000000000000000000000000057 :1009A0000000000000000000000000000000000047 :1009B0000000000000000000000000000000000037 -:1009C00000000000000000000000200020020002E3 -:1009D0002000100020000000A0008800000500009A -:1009E000000020002180018088000000200000001D -:1009F000880088008800C000A000A000000010004F -:100A0000880020002180A1800003C0000000840035 -:100A10008800000088008800200520002000C00019 -:100A200020002000040089802180200000000000B8 -:100A3000200000000000A0000004000000000000F2 -:100A400000000000000001800182000000004082E0 -:100A500010000000000040020000000010000082B2 -:100A600000000000000020200410000040000000F2 -:100A700000004000000010020000400200020000E0 -:100A80000000400011002020041000004000000081 -:100A900000000000400010000002000240000000C2 -:100AA00000020000000000400404041000000000E8 -:100AB0001000000040000040100200020000000092 -:100AC0000040000000000000202004100000000092 -:100AD00000000000200000000000000302000000F1 -:100AE00000000000000000001000410000000000B5 -:100AF00000000000000000000000000000000200F4 -:100B0000000000000040000010004008000000004D -:100B100000000000000000000000000002000000D3 -:100B20000000000000000000000010002100000094 -:100B300000000000000000000000000000000000B5 -:100B40000000000000000000000010002008000865 -:100B5000000800000008000800000000000000007D -:100B600000080008000800080000801090840008B9 -:100B70000008000000080008000000080000000055 -:100B80000084000800080084000880848041000080 -:100B90000008000800840008000800000082000827 -:100BA0000000000000080084000000088000C00071 -:100BB0000008000800000002000800000000000813 -:100BC0000000000000040000000000088000800118 -:100BD0002003002100210000002000200008000464 -:100BE000000000090005000000089000002100003E -:100BF00000000000000884000000000000089008C9 -:100C000000000000000000000002000000000002E0 -:100C1000000000000003001100110021000000117D -:100C20000000000000000021000000210000000082 -:100C3000002100000000000300030011000000007C -:100C4000000900000000000040000000000000005B -:100C5000000810000000000000000000000000007C -:100C60000000000000000900000000000008000073 -:100C70000008000000000000050041000000000026 -:100C80000000000000000000210000000000000043 +:1009C00000000000000000002000000000002000E7 +:1009D000200000002000A0000000C0002000000057 +:1009E0000000200000001000200010000000200087 +:1009F0002000000020004000000020004000000017 +:100A00000000200000002000000320002000000063 +:100A1000200020000000200020008800200020008E +:100A2000000088002000002020002000C0000000FE +:100A300020002000000020002000200020002000D6 +:100A40000000200020000000200000000000000046 +:100A50000000000040000000000000000000000056 +:100A60000000000000000000000000000000000086 +:100A70000002000000000000000200000000000072 +:100A80000000000000000000000000000000000066 +:100A9000000000000000000200C000A000000020D4 +:100AA000000000A0000000000000000000000000A6 +:100AB0000000000000000000000000000000000036 +:100AC0000000000000000000000000000000000026 +:100AD0000000000000000000000000100000000006 +:100AE00000000000000000000000200800000000DE +:100AF00000000000000000000000001000000000E6 +:100B000000000000000000000000200800000000BD +:100B100000000000000000000000000000100000C5 +:100B2000000000000000000000000000200800009D +:100B300000000000000000000000000000100000A5 +:100B4000000000000000000000000000100400048D +:100B50000000000000840000000400040000000009 +:100B6000000400000000000000000090800100026E +:100B70000000000000000000000000000000000075 +:100B800000000000000000000000000080010000E4 +:100B90000000000000000000000000000000000055 +:100BA00000000000000000000000000000008001C4 +:100BB0000000000000000000000000000000000035 +:100BC0000000000000000000000000840000800120 +:100BD0000040000000210021000000400003000050 +:100BE0000002000000040003000000008804000070 +:100BF0000020000000000040000000000000000095 +:100C000000000000000000000000000000000000E4 +:100C100000000020000000000000000000000000B4 +:100C2000C000000000000000000000000000000004 +:100C300000000000000000000000000000000000B4 +:100C400000000000000000000000000000000000A4 +:100C50000021000000000000000000000000000073 +:100C60000000000000000000000000000000000084 +:100C70000000020000000000000000000000000072 +:100C80000000000000000000000000000000000064 :100C90000000000000000000000000000000000054 :100CA0000000000000000000000000000000000044 -:100CB0000000000000000000000000000000000034 +:100CB000000000000000080000000000000000002C :100CC0000000000000000000000000000000000024 -:100CD0000000000082008200000000000000000010 -:100CE000000000008200000000000000A000C00022 -:100CF000C00000040000000000000000A000080088 -:100D00008400004000000800A000C04000008200F5 -:100D10008200000400000800824082000000000001 -:100D20000000C0000000A000A000A0008400A000FF -:100D30000800A00000088200820082008200A0005B -:100D40000000080008000800080000000000000083 -:100D50000800A00082020000000000000000000067 -:100D6000000000840084000041000000000000003A -:100D70000000000000010000000000000000000072 -:100D8000000010000000000005000000000021002D -:100D90000000000000010000000000000000000052 -:100DA0000000000000000000000003000000000040 -:100DB000000000000000000100000000200000080A -:100DC00000000008000000A000000000000008086B -:100DD000000000000000000100000000080000000A -:100DE00000000400040000119000A000900588009D -:100DF000000040000000000010000800000000009B -:100E000008000000000000000000000200200000B8 -:100E100000000000080000110000000000000000B9 -:100E2000880000098200A00000000000000000000F -:100E300000000000000008000000000000000800A2 -:100E4000000000000809000300000000001100116C -:100E50000000840000008200080000000000000084 -:100E6000000000000000000000000000050000007D +:100CD0000000000000000000000082000000820010 +:100CE0000000000000000000000082000000820000 +:100CF00000000000000000000000820000008200F0 +:100D000000000000000000001000820000008200CF +:100D1000000008000000100008008200820010009F +:100D200082000000000082000000080082008200B3 +:100D30008200000008008200000082008200820021 +:100D40008200000000000800000008008200080087 +:100D500082000000080000A0000000000000000069 +:100D6000000000000000050000000000000000007E +:100D70000000000000000000000000000000000073 +:100D80000000000000000000000000000000000063 +:100D90000000000000000000000000000000000053 +:100DA0000000000000000800050000000000000036 +:100DB0000000000000000000000000000000000033 +:100DC000000000000000080000000000000000001B +:100DD00000000000000000000808A000000008005B +:100DE00000000000000000000000004000110011A1 +:100DF00000000000002040400800A004000008009F +:100E000000000000000000000000000000000000E2 +:100E100000000800A011004000000800C000000011 +:100E20000800C000000000000000000000000000FA +:100E3000000000000000000000400800A0000000CA +:100E4000080000000000000000000000000000009A +:100E50000000000000000000004000000000000052 +:100E60000000000000000000000000000000000082 :100E70000000000000000000000000000000000072 :100E80000000000000000000000000000000000062 -:100E9000000000000000040000000000000000004E +:100E90000000000000000000000000000000000052 :100EA0000000000000000000000000000000000042 :100EB0000000000000000000000000000000000032 -:100EC000000000000500030000000000000000001A -:100ED00000000020000000000000000008000000EA -:100EE00000000000A000C00008000000080000088A -:100EF0000021000800000000000800004000000081 -:100F000000000000880000000800C0000800000089 -:100F1000002184000000000000000000000000002C -:100F200000004000000008000800080000008200E7 -:100F30000000822100218400000000000000A000C9 -:100F40000000000000008200C000820000000000DD -:100F50000000080000000800000008000000000079 +:100EC0000000000000000000000000000000000022 +:100ED0000000000000000000000000000000000012 +:100EE0000000000008000000080090000000000062 +:100EF00000000003000008000003000000000000E4 +:100F0000C000000008000000080008000000000009 +:100F10000800000300000000000000000000C00006 +:100F200000000000000008000000080000000000B1 +:100F300000000000000000000808000000000000A1 +:100F40008400000000000800A0000800100000005D +:100F50000000000000000000082100000000000068 :100F60000000000000000000000000000000000081 -:100F70000000000000000000000000002040000011 -:100F8000000000040200000000000000000000005B -:100F90000000000000000000000000000000000051 -:100FA0000000000008000000000000000000000039 +:100F70000000000000000000000000000000000071 +:100F80000000000000000000000000000000000061 +:100F90000000000000000000000000000800000049 +:100FA0000000000000000000000000000000000041 :100FB0000000000000000000000000000000000031 :100FC0000000000000000000000000000000000021 -:100FD00000000000000000000000000020000000F1 -:100FE00000000000000000010000000000000004FC -:100FF0000001C1000004C0820000C0000001000028 -:1010000001000000000000010000000000000004DA -:101010000001C1000084C0820000C0000001000087 -:1010200000000000000000000001000000000000BF -:1010300000020001C0000040C0820000C0000001AA -:101040000000000000000000000100008800000116 -:1010500000880001C0000004C0820000C000000140 -:10106000000000000000000000080000000000096F -:1010700009000810880000808080000080000003C4 -:101080000000020000000000000802000000004113 -:1010900011000808880000808080000080000003A4 -:1010A0000000000000000000000000080000000038 -:1010B0000009090000108500000080800000800009 -:1010C0000003000000000000000000080000000015 -:1010D000000311000010C00000808080000080002C -:1010E00000030000000003000000000000000900F1 -:1010F000000002008300C180001003008000000097 -:10110000008080030000210000000000000041007A -:1011100000201000900021800000038000000000EB -:1011200000808005000000000300000000000000B7 -:10113000080000001000830003000000030000000E -:101140000000008080080000030000000000000094 -:101150002000000010000300050000000300000054 -:10116000000000808010000000000000000000006F -:101170000000000000000400200200010100020045 -:10118000000000C08200000000000000000000001D -:101190000000000000001100081000000102020021 -:1011A000000000828200000000000000000000003B -:1011B0000000010000000000040090200000010079 -:1011C0002000000000C082010000000000000000BC -:1011D0000000000000000100400090080000010035 -:1011E00040000000008282010000000000000000BA -:1011F000000000000001100100400000010001009B -:1012000000000000000000000000000000000000DE -:101210000000000000018200000400000100000046 -:1012200000000000000000000000000000000000BE -:1012300000000000000000019001004000000500D7 -:10124000000000000000000000000000000000009E -:101250000000000000000001820000040000010006 -:10126000000000000000000000000000000000007E -:101270000000000000000005904000000000410058 -:10128000100000000000004100000000000000000D -:1012900000000000000000058210008000004100F6 -:1012A00000000000000000410000000000000000FD -:1012B00000000000000000000005104000000000D9 -:1012C000C10000000000000000410000000000001C -:1012D00000000000000000000005A01100800000D8 -:1012E00041000000000000000041000000038000F9 -:1012F00000C1000000020000410000000041800029 -:101300000008000000410000000008030002800007 -:1013100000C1000000000040A000000000410000EB -:1013200000080000004100100000038800000003D6 -:10133000800000C1000000020000410000000041E8 -:1013400080000020000000410000000008020003AF -:10135000800000C1000000100010410000000041AA -:10136000000000400000004100000000088800006C -:1013700020000040000000008800880000000041BC -:1013800082000001000000010000000001080001CF -:10139000200000400000000088010800000000213B -:1013A00090000001000000010001000001C10000E8 -:1013B00000002000004000000000880088000000BD -:1013C0000041400000000000000100000000019109 -:1013D0000000200000400000000120018800000003 -:1013E000002140000000000000010000000001C0DA -:1013F00000000000000000000000000000000000ED -:10140000811200E00700484200000000000048424E -:1014100000000000000000000000000000000000CC -:10142000811200E0070048420000000000004882EE -:1014300000000000000000000000000000000000AC -:101440000000811200E00700484200000000000098 -:101450004842000000000000000000000000000002 -:101460000000811200E00700484200000000000078 -:1014700048820000000000000000000000000000A2 +:100FD0000000000000000000000000000000000011 +:100FE00000010001000100C00001000100C0000379 +:100FF00000000101000800820001400100C1000062 +:1010000000010001000100C00001000100C0000358 +:1010100000000101002000880001400100C1000023 +:10102000000000010001000100C00001000100C03B +:10103000000300000001004000900001400100C1D9 +:10104000000000010001000100C00001000100C01B +:10105000000300000001004000040001400100C145 +:10106000000000410041004100C00341004100C1B7 +:1010700020C100200241008000000041804100901A +:10108000000000410041004100C00341004100C197 +:1010900020C100200241000000000041804100907A +:1010A0000000000000410041004100C00541004136 +:1010B00000C120C100200941000000000041804122 +:1010C0000090000000410041004100C00341004188 +:1010D00000C120C100200941000000800041804182 +:1010E0000090000041000300000000804100C000AB +:1010F0000000090090000800008085004100C10048 +:101100000010800041000300000000804100C0008A +:1011100000001000C100020000A085004100C100D5 +:101120000010800000034100030000000080410027 +:10113000C00000004000C100080000A08300410082 +:10114000C100001080004100030000000080410049 +:10115000C00000004000820088000080A000410024 +:10116000C1000010800001000100000000C001006B +:10117000C00000000000050010020004C0000300D1 +:10118000C1000091820001000100000000C00100C8 +:10119000C00000000000040010080005C0000900A5 +:1011A000C10000918200000001000100000000C0A9 +:1011B0000100C00000000000040020400005C00045 +:1011C0004100C1000091820001000100000000C048 +:1011D0000100C00000000000040004820004C00000 +:1011E0004100C1000091820000C00001C0C10000A8 +:1011F0000000000100C110830011000100C10000C7 +:10120000000000010001000000C00001C0C100009A +:101210000000000100C110820083000100C1000035 +:101220000000000100010000000000C00001C0C17A +:1012300000000000000100C110830041000100C156 +:101240000000000000010001000000C00001C0C15A +:1012500000000000000100C110830041000100C136 +:10126000000000000001000100000080004180C17A +:101270000000000000410090119000C1004100C139 +:10128000000000000041001000000080004180C10B +:10129000000000000041009000890041004100C1B1 +:1012A000000000000041001000000000008000412C +:1012B00080C100000000004100900090004100410A +:1012C00000C100000000004100100000008000414B +:1012D00080C10000000000410090009000410041EA +:1012E00000C100000000004100100000C1008000AB +:1012F00080C100004111800305004100C141000090 +:10130000800800004100000080004100C100800012 +:1013100080C100004100000390004100C1C10000F5 +:101320008008000041000000800041000000C10072 +:10133000800080C100004100000302004100C1C1E3 +:101340000000800800004100000080004100C10052 +:10135000800080C100004100000302004100C1C1C3 +:101360000000800800004100000080004100C10032 +:101370004000C0C100000100200003000100C1893D +:101380009000C000000001000000C0000100C1008A +:101390004000C0C100000100200005000100C11193 +:1013A0009000C000000001000000C000010000002B +:1013B000C1004000C0C10000010020008900010000 +:1013C000C1119000C000000001000000C000010039 +:1013D000C1004000C0C100000100200089000100E0 +:1013E000C1119000C000000001000000C000010019 +:1013F00000000000000000420000000000000000AB +:1014000081120048070048000000000000000000B2 +:10141000000000000000004200000000000000008A +:101420008112004807004800000000000000000092 +:10143000000000000000000000420000000000006A +:101440000000811200480700480000000000000072 +:10145000000000000000000000420000000000004A +:101460000000811200480700480000000000000052 +:10147000000000000000000000000000000000006C :10148000000000000000000000000000000000005C :10149000000000000000000000000000000000004C :1014A000000000000000000000000000000000003C @@ -151939,442 +151939,442 @@ :1015C000000000000000000000000000000000001B :1015D000000000000000DEAE757B0000000000008F :1015E00000000000000000000000000000000000FB -:1015F000000000000000DEAE612603400000000095 -:1016000000000230A0000000000000000C400000BC -:101610000000000002C06486612603400000000054 -:1016200000000230A0000000000000000C4000009C -:101630000000000002C06486000061260340000034 -:10164000000000000230A0000000000000000C407C -:1016500000000000000002C0648661260340000014 -:10166000000000000230A0000000000000000C405C -:1016700000000000000002C064861000200020006E -:1016800020000040000000000000000000002000DA -:10169000C00010008400000010802000080020001E -:1016A000200004000400040004000000A000A000CA -:1016B000200088408400000020000003200020005B -:1016C000880020002000200020002000880020004A -:1016D00020002008200020001000000000008800EA -:1016E000200020002000200020002000000020001A -:1016F00020000000010001000080008000000000C8 -:101700000000000000004000000200020000000095 -:1017100000000000009000000000001000C0000069 -:101720000000000080908090800080004000000257 -:101730000000100240004000000000000000000017 -:101740000000000021001000000010000000100048 -:101750000000000000004000000000001000000039 +:1015F000000000000000DEAE60C603000000000036 +:1016000000000031E0000000000000000C000000BD +:101610000000000000C0630660C603000000000078 +:1016200000000031E0000000000000000C0000009D +:101630000000000000C06306000060C60300000058 +:10164000000000000031E0000000000000000C007D +:1016500000000000000000C0630660C60300000038 +:10166000000000000031E0000000000000000C005D +:1016700000000000000000C0630600000000000041 +:1016800020000000200000000000200020000000DA +:10169000200000002000004040000000000000008A +:1016A00020008800200000000000200020004000F2 +:1016B0002000000020004000200000010000000089 +:1016C00000002000000020000000000000002000BA +:1016D000200000000000200020002000000000008A +:1016E0000000200088002000000000000000200012 +:1016F000200000000000200020002000000000006A +:1017000000000000000000000000000000000000D9 +:1017100000000000000000000000000000000000C9 +:1017200000000900000000000000000000000000B0 +:101730004000000000000000000000000000000069 +:101740000000000000000000000000000000000099 +:101750000020200000000000000000000000000049 :101760000000000000000000000000000000000079 -:10177000000000000040044004024020002010004F -:101780000000900090000000000000020200000035 -:1017900000400000200000000800000000000000E1 -:1017A000080002000000000000000000000000002F -:1017B0000100000000000000001100000200000015 +:101770000000200000000000000000000000000049 +:101780000000000000000000000000000000000059 +:101790000000000000000000000000000000000049 +:1017A0000000000000000000000000000000000039 +:1017B0000000000020000000000000000000000009 :1017C0000000000000000000000000000000000019 :1017D0000000000000000000000000000000000009 -:1017E00000800000000000000000000820002080B1 -:1017F00000000000000010000000000000000000D9 -:1018000000080000001000000000000000000008B8 -:10181000000000020008000200008000000000003C -:1018200000088000000040000000000000000008E8 -:101830000000080000080008000000000000000090 -:101840000000000800000000000000000000000090 -:101850000008000000000084008400000002000274 -:1018600000020004000000000000000000018000F1 -:1018700080080000000000000002000000000000DE +:1017E00000000000000000000000000000000000F9 +:1017F00000000000000000000000000000000000E9 +:1018000000000000000000000000000000000000D8 +:1018100000000000000000000000000000000000C8 +:1018200000000000000000000000000000000000B8 +:101830000000000000008000000000000000000028 +:101840000000000000000000000000000000000098 +:101850000000000000000000000000000000000088 +:101860000000000000000000000000000000000078 +:101870000000000000000000000000000000000068 :101880000000000000000000000000000000000058 -:101890000000002000000000000002200000000006 +:101890000000000000000000000000000000000048 :1018A0000000000000000000000000000000000038 -:1018B0000000000040000020001000000040000078 -:1018C00000000000000200020020004000000000B4 +:1018B000000000000000000900000000000000001F +:1018C0000000000000000000000000000004000014 :1018D0000000000000000000000000000000000008 -:1018E0000000000000000104010401049000000059 -:1018F000400420000000000800000000002100213A -:101900000000000000000000000000900000040043 -:10191000004000000000000000000008000000007F -:1019200000824100000000000200020000000900E7 -:101930000000020000008000008500851100000802 -:101940000000000000000020000000000020000057 -:1019500003004100410041000000008400A000009D -:10196000000000000000080020012001200100000C -:10197000030000018000410000000000000004009E -:101980000000000000000000000000000200A000B5 -:10199000000000000800084000000000104008009F -:1019A000C10008000010A0000800A0000000820094 -:1019B000004000000000001082000800000000004D -:1019C000080000000000000040008200000000004D -:1019D0000000000000000000000082000000000085 -:1019E00000004000000000000000000000000000B7 -:1019F000000000000000C000000000000000000027 -:101A00000000080008004000000000000000000086 -:101A100021000000000000000000000000000300A2 -:101A20000000020000000801210441004100000004 -:101A30004100000000000040000100000000000024 -:101A4000000000000000000000000000410008004D -:101A500000000000030000840000000000000000FF -:101A60000000000000000000000000000000000076 +:1018E00000000000000000000000000000000000F8 +:1018F00000000000000000000000000000000000E8 +:1019000000000000000000000000080008001000B7 +:101910000000000000000000000000820020000025 +:10192000000000000000000041000800030000006B +:1019300005000000000000000084008200A00000FC +:101940000000000000000000000041000800080046 +:1019500040000000000000000000000000820000C5 +:10196000100000000000000000004100080003001B +:1019700000000000410000000000000000820000A4 +:101980000000000000000000000000000000000057 +:10199000000000000000000000000000C000400047 +:1019A0000000000004000400040005000400010021 +:1019B0000100000000000000000000000000000026 +:1019C0000000100000000000000000000000000007 +:1019D00000000000000000000800000000000000FF +:1019E00040000000080000000000000000000000AF +:1019F00000000000000000000000000000000000E7 +:101A000000000000080000000000000000000000CE +:101A100000000000000000000000000000000000C6 +:101A20000000000000008000800080008400800032 +:101A3000040004000000000000000000000000009E +:101A40000000000000000000000000000000000096 +:101A50000000000000000000000000000000000086 +:101A6000080000000000000000000000000000006E :101A70000000000000000000000000000000000066 :101A80000000000000000000000000000000000056 -:101A90000011000000000000000008000000A0008D -:101AA000820000000000C000080040000420042064 -:101AB00000218800000090030000000004210020A5 -:101AC000000000000040020000000000A000000034 -:101AD000000004000000A000000000000000000062 -:101AE0000000000000000000000000000480000072 -:101AF000000000000180A1000180208000000000A3 -:101B000000000005080000000000000000080000C0 -:101B10000000000000A00000008400080000040095 -:101B20000420052000900004000080000040000018 -:101B30000000000000000000008400040000C00459 -:101B4000000304880090040000000020000000084A -:101B50000000040009000000008402841108030052 -:101B600000000000080000900000000000040004D5 -:101B70000000000021001004100020088008080068 -:101B80002100410008000020000009000020082179 -:101B900000000010004000000000080000000000ED -:101BA0000000000800008200000010808200820017 -:101BB0000000C0000011A000C021A000C0000180F2 -:101BC000010000A1018008000000000800080000DA -:101BD0000000900000000000000000000000000075 -:101BE000000000210021000000000000002108008A -:101BF00000000800000000000003200000000008B2 -:101C00000000002100210000000000000000820808 +:101A90000000040000000000000000000000000042 +:101AA0000000000000000011100000030000000012 +:101AB0000000000000000000820300000400000994 +:101AC00000000000000000110800000000000000FD +:101AD0000000000000000000000000000000000006 +:101AE000000000000000000000110800820000005B +:101AF00000000000000000000000000000000000E6 +:101B000000000000000000000011080000000000BC +:101B100000000000000008004000000000000888ED +:101B20000400410000000800000010000000000058 +:101B300000000000000008004000000000048800D1 +:101B4000000000000000080010000000000000007D +:101B500000000000000000000800030000840000F6 +:101B6000080009000000000008000000000000005C +:101B700000000000000000000800030000840000D6 +:101B80000800000000000000080000000000000045 +:101B90000000000000000000000000000000000045 +:101BA0000000000000000000000000000000000035 +:101BB0000000000000000400040004000400000015 +:101BC000000000000000000000000009000000000C +:101BD0000000000000000000000000000000000005 +:101BE00000000000000000020000000000000000F3 +:101BF00000000000000000000000000000000000E5 +:101C000000000000000000020000000010000000C2 :101C100000000000000000000000000000000000C4 -:101C2000000000000000000009000000411000005A -:101C300000000000000000000000000000000200A2 -:101C40000420040000200420000000000500000023 +:101C200000000000000000000000000000000000B4 +:101C300000000000000000008000800080008000A4 +:101C4000030003004100030000000000000000004A :101C50000000000000000000000000000000000084 :101C60000000000000000000000000000000000074 -:101C700000000000000000000000000080000000E4 +:101C70000000000000000000000000000000000064 :101C80000000000000000000000000000000000054 :101C90000000000000000000000000000000000044 -:101CA0000000000000000000000009080020000201 -:101CB000020808100010008810400000000000001A -:101CC0000000901010030089901000000000000038 +:101CA0000000000000000000000000000000000034 +:101CB000000000C000900000000000C00090000084 +:101CC000000000C0A0909000000000000000000094 :101CD0000000000000000000000000000000000004 :101CE00000000000000000000000000000000000F4 -:101CF00000000000000000000000000000001000D4 -:101D0000000000000000000000000000008800004B -:101D100000100000000000000000000000000000B3 -:101D20000000000000000000000000002100008012 -:101D30000080808000800000008000000000000023 -:101D40000000000008C00011008380850000000032 +:101CF00000000000000000000000000000000000E4 +:101D000000000000000000000000000000000000D3 +:101D100000000000000000000000000000000000C3 +:101D200000000000000000000000000000000000B3 +:101D300000000000008000800000000000800080A3 +:101D4000000000000080858000000000000000000E :101D50000000000000000000000000000000000083 :101D60000000000000000000000000000000000073 :101D70000000000000000000000000000000000063 -:101D800080090000000000000000000000000000CA -:101D900000000080000000000000000000000000C3 +:101D80000000000000000000000000000000000053 +:101D90000000000000000000000000000000000043 :101DA0000000000000000000000000000000000033 -:101DB0000010800000000000800380000000000090 -:101DC00000000000000000000090800000A0000063 +:101DB0000000000080000000000080008080000023 +:101DC00000008000808041004000C0058391000039 :101DD0000000000000000000000000000000000003 :101DE00000000000000000000000000000000000F3 -:101DF00000000000000000000004000000040000DB -:101E000000040000090200000000000000000000C3 -:101E10000000800000000000000000000000000042 +:101DF00000000000000000000000000000000000E3 +:101E000000000000000000000000000000000000D2 +:101E100000000000000000000000000000000000C2 :101E200000000000000000000000000000000000B2 -:101E300000000000A090000088000800A00008003A -:101E4000000000400000002000882020A0000002C8 +:101E30000000000000009000000000008400C0903E +:101E4000000000008400C090004000008400C191A8 :101E50000000000000000000000000000000000082 :101E60000000000000000000000000000000000072 :101E70000000000000000000000000000000000062 -:101E80000000000000000001000000000000000051 -:101E90000000000010000010000000000000000022 +:101E80000000000000000000000000000000000052 +:101E90000000000000000000000000000000000042 :101EA0000000000000000000000000000000000032 -:101EB0000000C0880000001011089004001000020B -:101EC000A0100000000040000000020400902188E3 -:101ED00000100000000000000000000000000000F2 +:101EB0000000000000000000000000000000029090 +:101EC00000C000000000009000C000000001009170 +:101ED00001C0000000000000000000000000000041 :101EE00000000000000000000000000000000000F2 -:101EF00000000000000000000000000000000200E0 -:101F0000400000000000020000000000000000008F -:101F10000000000000900010000000000000000021 +:101EF00000000000000000000000000000000000E2 +:101F000000000000000000000000000000000000D1 +:101F100000000000000000000000000000000000C1 :101F200000000000000000000000000000000000B1 -:101F30000000000080000000008021000080000000 -:101F4000000080802000000000000000828021004E -:101F5000100002000000000000000000000000006F +:101F300000000000000000000000000000000000A1 +:101F4000008000800000000000801180000000037D +:101F500000A111C00000000000000000000000000F :101F60000000000000000000000000000000000071 :101F70000000000000000000000000000000000061 -:101F800000008000090000020000000004000000C2 -:101F900000000000000000000080000000000000C1 +:101F80000000000000000000000000000000000051 +:101F90000000000000000000000000000000000041 :101FA0000000000000000000000000000000000031 -:101FB0000000000000008000000080000000000021 -:101FC00000800000800000000000000000002108E8 -:101FD00083C00500A0000000000000000000000019 +:101FB000000000000000000000110000000080117F +:101FC0008041000000008011800300000000859126 +:101FD0008341110003050000000000000000000024 :101FE00000000000000000000000000000000000F1 :101FF00000000000000000000000000000000000E1 -:1020000000090000000000000000080000000000BF -:102010000000000000000000002080A1000000007F +:1020000000000000000000000000000000000000D0 +:1020100000000000000000000000000000000000C0 :1020200000000000000000000000000000000000B0 -:1020300000000000000000001000088884008800F4 -:102040002000A00288200400000000000000000022 -:1020500089018304008202000000000000000000EB +:1020300000000000000000000000000000000000A0 +:10204000C001200000000000C001200100000000CD +:10205000C09120010100000000000000000000000D :102060000000000000000000000000000000000070 :102070000000000000000000000000000000000060 -:10208000000000000000000000000000010000004F -:10209000000000000000000000000001101000001F +:102080000000000000000000000000000000000050 +:102090000000000000000000000000000000000040 :1020A0000000000000000000000000000000000030 -:1020B0000000000000000000000000000000000020 -:1020C00050000000000000000000000000000700B9 -:1020D0000000008200000700000000000000000077 +:1020B0000000000000000000000000000000070019 +:1020C0000000000000000700000000000000070002 +:1020D0000000000000E007004100000000000000D8 :1020E00000000000000000000000000000000000F0 :1020F00000000000000000000000000000000000E0 -:102100000000000000000044000000000000004249 -:10211000000000000000000000000000008200003D -:1021200007000000000000000000000000000000A8 -:10213000000000000000000000000000C082C38218 -:1021400014000000FF303030AF830F0300000000A8 -:102150000000000000003C3CBFBAB5B00000000029 +:1021000000000000000000000000000000000000CF +:1021100000000000000000000000000000000000BF +:1021200000000000000000000000000000000000AF +:10213000000000000000000000000000000000009F +:1021400000000000000000FF000000FF000000FF92 +:10215000000000FF000000FF000000FF0000000082 :10216000000000000000000000000000000000006F :10217000000000000000000000000000000000005F :10218000000000000000000000000000000000004F -:102190000000000000000000000000000000AA0095 -:1021A000AA000C0C0C0C0000000000000000000055 -:1021B000000000000000000000000000000000829D -:1021C000C3821441000000000000FFC35F43000011 -:1021D0000000000000000000003CFFFAF5F00000E5 +:10219000000000000000000000000000000000003F +:1021A000000000000000000000000000000000002F +:1021B000000000000000000000000000000000001F +:1021C000000000000000000000FF000000FF000011 +:1021D00000FF000000FF000000FF000000FF000003 :1021E00000000000000000000000000000000000EF :1021F00000000000000000000000000000000000DF :1022000000000000000000000000000000000000CE :1022100000000000000000000000000000000000BE -:10222000AA00AA000C0C0C0C00000000000000002A +:1022200000000000000000000000000000000000AE :10223000000000000000000000000000000000009E -:1022400000FA00F8AA00AA00F030F0500000FFFFEA -:10225000000000000000000000C0F0F000000000DE +:1022400000000000FFFF0000FF000000FF00000092 +:10225000FF000000FF000000FF00000000FFFFFF84 :10226000000000000000000000000000000000006E :10227000000000000000000000000000000000005E :10228000000000000000000000000000000000004E :10229000000000000000000000000000000000003E -:1022A0000000F0F000000A0A0A0A00000000000026 +:1022A000000000000000000000000000000000002E :1022B000000000000000000000000000000000001E -:1022C000000000FF00FCAA00AA0030305050FE3C85 -:1022D000FE3C0000000000000000F0F0F0F000A064 -:1022E00000A000000000000000000000000000004E +:1022C000000000000000FFFF0000FF000000FF0012 +:1022D0000000FF000000FF000000FF00000000FF02 +:1022E000FFFF0000000000000000000000000000F0 :1022F00000000000000000000000000000000000DE :1023000000000000000000000000000000000000CD :1023100000000000000000000000000000000000BD -:1023200000000000F0F000000A0A0A0A00000000A5 +:1023200000000000000000000000000000000000AD :10233000000000000000000000000000000000009D -:10234000000000000000000000000001800000000C -:102350000000000005180A00050005A085610A3E7E -:10236000050D00A0000000000000000000000000BB +:102340000000000000000008000010C00382030825 +:102350000C0092C0038203080C0092C003E3030E3A +:102360000C0982C000000000000000000000000016 :10237000000000000000000000000000000000005D -:1023800000000000000000000000000000000061EC -:102390000086000D000000000086000C0000000018 -:1023A0000000000000000000002800000000000005 +:10238000000000000000000000000000000000004D +:10239000000000000000000000000000000000003D +:1023A000000000000000000000000000000000002D :1023B000000000000000000000000000000000001D :1023C000000000000000000000000000000000000D -:1023D00000000000000000000000000000002828AD -:1023E000282800000000000000000000000000009D +:1023D00000000000000000000000000000000000FD +:1023E0000000A0A0A0AA0000000000000000000063 :1023F00000000000000000000000000000000000DD :1024000000000000000000000000000000000000CC -:1024100000000000000000000000FF003C3C000045 +:1024100000000000000000000000000000000000BC :1024200000000000000000000000000000000000AC :10243000000000000000000000000000000000009C :10244000000000000000000000000000000000008C :10245000000000000000000000000000000000007C -:102460000A00AAAA0000000000000000000000000E +:1024600000004000A0A0A0A00000000000000000AC :10247000000000000000000000000000000000005C :10248000000000000000000000000000000000004C -:10249000000000000000000000000000FF003C3CC5 +:10249000000000000000000000000000000000003C :1024A000000000000000000000000000000000002C :1024B000000000000000000000000000000000001C :1024C000000000000000000000000000000000000C :1024D00000000000000000000000000000000000FC -:1024E000000000B2B2B200000000000000000000D6 +:1024E00000000000000000000000000000000000EC :1024F00000000000000000000000000000000000DC :1025000000000000000000000000000000000000CB -:102510000000000000000000000000000000FF00BC -:1025200000FF0000000000000000000000000000AC +:1025100000000000000000000000000000000000BB +:1025200000000000000000000000000000000000AB :10253000000000000000000000000000000000009B :10254000000000000000000000000000000000008B :10255000000000000000000000000000000000007B -:102560000000000000FFFFFF00000000000000006E +:10256000000000000000000000000040000000002B :10257000000000000000000000000000000000005B :10258000000000000000000000000000000000004B :10259000000000000000000000000000000000003B -:1025A000FF0000FF0000000000000000000000002D -:1025B00000000000000020002000000020000000BB -:1025C00020000000000010000000000000000000DB -:1025D000200000000000000020004000000000007B -:1025E00020000000000000000000000000000000CB -:1025F0002000000000000003000020001000000088 -:102600000000200084000000900084000000000012 -:10261000000020000000000000002000000000007A -:10262000000020002000000020000000000000004A -:102630000000000000000004000000000000000096 -:102640000000000000000002400040000002000006 -:1026500040000002210200004000000000000000D5 -:1026600040000002000000004000000000000000E8 -:1026700040000000000000000000400000000002D8 -:102680000000009000C040C00000000000000000FA -:1026900000004000000040000000000000000000BA -:1026A0001000000000000000000000000000000218 -:1026B00000000000000000024000000002000000D6 -:1026C0000000000000000000040002000000000004 -:1026D00000000000000000000000000000000000FA -:1026E000000008004000020004000000400000005C -:1026F0000000000000000000820000000000000058 -:102700009000020000000000000000000000000037 -:1027100000000000000000000000000000000000B9 +:1025A000000000000000000000000000000000002B +:1025B000000000000000000000000000000000001B +:1025C0000000000000000004000000000000000007 +:1025D00000404040000000000040000000000000FB +:1025E000000000000040000000000000404000002B +:1025F00000002000000000000000000000000000BB +:1026000000000000000000404000400000002000EA +:10261000000000002000000000000000000000009A +:10262000000000000000002020002000000020002A +:10263000000000002000100000000000000000006A +:10264000000000000000000000000000000000008A +:1026500000000000000040000000000040000000FA +:10266000000000000000000040000000000000002A +:10267000400000000000000000000000000000001A +:10268000000000000000000000000040000000000A +:102690000000000000000000050000000000000035 +:1026A000000000000000000000000000000000002A +:1026B000000000000000000000000000000000001A +:1026C0000000000000000000080000000000000002 +:1026D00000000000000000000210000000000000E8 +:1026E00000000000000000000800000000000000E2 +:1026F00000000000000000000210000000000000C8 +:1027000000000000000000000000080000000000C1 +:1027100000000000000000000000021000000000A7 :1027200000000000000000000000080000000000A1 -:10273000000000000000000000000200000800008F -:102740000000000000040040000000000500000040 -:10275000000000000000020000820300008400006E -:102760000000000000008200000000000200800065 +:102730000000000000000000000002100000000087 +:102740000000000000000000000000000000000089 +:102750000000000000000000000000000000000079 +:102760000000000000000000000000000000000069 :102770000000000000000000000000000000000059 :102780000000000000000000000000000000000049 :102790000000000000000000000000000000000039 -:1027A0000000000000000000000000000400000025 +:1027A0000000000000000000000000000000000029 :1027B0000000000000000000000000000000000019 -:1027C0000000000000000000004000000000400089 -:1027D00000000000000000009000000000009000D9 -:1027E00000000000000000000000000000000411D4 -:1027F00040000100000000030000000288210000EA -:102800000009000200000011000400840000000420 -:10281000000000000000000000110000000900009E -:10282000000000000000000000000000A000000008 -:102830000000080000004000000000000008000048 -:102840000000000000000000000000000000400048 -:10285000000000000000000000000500000009006A -:1028600008840000000041C00004038805840900BA -:10287000050000000200000000A00000009000A081 -:10288000000000000000000000000005000500003E -:102890000001000000000000000000000000000037 +:1027C0000000000000000000000000000400000005 +:1027D00002000000020000000000000010000000E5 +:1027E00000001000000000000000000000000000D9 +:1027F00010000000100010000000000000000000A9 +:1028000000000000000000000000000000000000C8 +:1028100000001000000008000000000000000000A0 +:1028200000000000000000000000000000000000A8 +:102830000000080000000800000000000000000088 +:102840000000000000000000000000000000000088 +:102850000000000000000000000000000000000078 +:102860000000000010000000000000000000000058 +:102870000000000000000000000000000000000058 +:102880000000000000000000000000000000000048 +:102890000000000000000000000000000000000038 :1028A0000000000000000000000000000000000028 :1028B0000000000000000000000000000000000018 -:1028C0000000000000000000000008000000000000 -:1028D00008008400000000000000000084000040A8 -:1028E0008240010000000000000000000010000015 -:1028F000001000A0000000800009C00000000000DF +:1028C0000000000000000000000000000000000008 +:1028D00000000000000000000000000000000000F8 +:1028E00000000000000000000000000000000000E8 +:1028F00000000000000000000000000000000000D8 :1029000000000000000000000000000000000000C7 :1029100000000000000000000000000000000000B7 -:102920000000004000000000000000000000000067 +:1029200000000000000000000000000000000000A7 :102930000000000000000000000000000000000097 -:102940000000000400000000000000000000000083 -:1029500000000000050000000000000000000088EA -:1029600000000001400040000500000000000001E0 -:1029700000000000080300004140090000001000B2 -:10298000000005000000000000000000000003003F -:10299000210021A000000000000000000000000055 +:10294000080000000000000000000000000000007F +:102950000000000000000000000000000000000077 +:102960000000000000000000000000000000000067 +:102970000000000000000000000000000000000057 +:102980000000000000000000000000000000000047 +:102990000000000000000000000000000000000037 :1029A0000000000000000000000000000000000027 :1029B0000000000000000000000000000000000017 :1029C0000000000000000000000000000000000007 -:1029D00000000000000000000000000090008200E5 -:1029E00000000000080082008811C00008000000FC -:1029F0000000002090000002888000200480000079 -:102A00002021000200200000000000000000001152 -:102A10000000200000000000000000000000000096 +:1029D00000000000000000000000000000000000F7 +:1029E00000000000000000000000000000000000E7 +:1029F0000000000000000000000000000080000057 +:102A000000000000000000000000000000000000C6 +:102A100000000000000000000000000000000000B6 :102A200000000000000000000000000000000000A6 :102A30000000000000000000000000000000000096 -:102A4000000008000000000000000000000000007E -:102A50000000000000000200000000000000000074 -:102A6000409004040088000000000000000008C03E -:102A70000404000000841000212011200091852012 -:102A80002000000000000000000000000000040022 -:102A900000000000800000000002000000000000B4 -:102AA0000000050000000000000000900000000091 -:102AB00000000000000000A0000000000000000076 -:102AC00000000000090400A0400000000000000019 -:102AD00000000000000000000000400000000000B6 -:102AE00000000000000000000000000001000000E5 -:102AF000400084210000840010008810000001A024 -:102B0000018400A100090000000000000000200076 -:102B100008000000000000000100000000000000AC +:102A40000000000000000000000000000000000086 +:102A500000000000000000000000000000880000EE +:102A60000000000010000000000000000000000056 +:102A70000000000000000000000021000000000233 +:102A8000000000000800000000000000000000003E +:102A90000000000000000000000000000400000032 +:102AA000000000000000080000000000000000001E +:102AB0000000000000000000000000000000000016 +:102AC00000000000000008000000000000000000FE +:102AD00000000000000000000000000000000000F6 +:102AE00000000000000000000000000000000000E6 +:102AF0000000000002004000000000000000000094 +:102B000000000000000000000000000000000000C5 +:102B100000000000000000000000000000000000B5 :102B200000000000000000000000000000000000A5 -:102B3000080000000000000000000000000000008D +:102B30000000000000000000000000000000000095 :102B40000000000000000000000000000000000085 -:102B50000000000000000000000000000002000073 -:102B60000000000021000000000000000000400004 -:102B7000000000004184400000000000000105004A -:102B800004030802000200A0000000000000410051 -:102B900000000000000000000000400000000000F5 -:102BA0000000000000000000000000000004000021 +:102B50000000000000000000000000000000000075 +:102B60000000000000000000000000000000000065 +:102B700000000000000080000000000000000000D5 +:102B80000000000000000000000000000000000045 +:102B90000000000000000000000000000000000035 +:102BA0000000000000000000000000000000000025 :102BB0000000000000000000000000000000000015 :102BC0000000000000000000000000000000000005 :102BD00000000000000000000000000000000000F5 -:102BE000000000000000100000200008108200011A -:102BF00000000000000000A00090820800031009FF -:102C000001900089000100000000000000000000A9 -:102C1000000000000000000001000500900000001E +:102BE00000000000000000000000000000000000E5 +:102BF00000000000000000000000000000000100D4 +:102C000000000000A0000000000000000000000024 +:102C100000000000000000000000000000000000B4 :102C200000000000000000000000000000000000A4 :102C30000000000000000000000000000000000094 :102C40000000000000000000000000000000000084 :102C50000000000000000000000000000000000074 -:102C600000000000000000000000000000008000E4 -:102C7000000800080008000000910008000300A1FF -:102C8000808940A00010002100050011000300020F -:102C9000000000000000000000001140832100053A -:102CA0000010000000000000000000000000000014 +:102C60000000000000000000000000000000000064 +:102C70000000000000000000000000000000000054 +:102C80000200000000000000000000000000000042 +:102C90000000000000000000000000000000000034 +:102CA0000000000000000000000000000000000024 :102CB0000000000000000000000000000000000014 :102CC0000000000000000000000000000000000004 :102CD00000000000000000000000000000000000F4 -:102CE0000000000000000000000000000003008061 -:102CF00000000080000000100000100008038800A1 -:102D00001005900010110300009100000000000069 -:102D10000000000000000000000000000080100221 -:102D20000800020300000000000000000000000096 +:102CE00000000000000000000000000000000000E4 +:102CF00000000000000000000000000000000000D4 +:102D000000000000800000008000000000000000C3 +:102D100000000000000000000000000000000000B3 +:102D200000000000000000000000000000000000A3 :102D30000000000000000000000000000000000093 :102D40000000000000000000000000000000000083 :102D50000000000000000000000000000000000073 -:102D600000000000000000000000000010000491BE -:102D700000A0009000400000000000009104090045 -:102D8000A1A0020089020290C00008050000000016 -:102D9000000000000000000000000000000000A093 -:102DA00000000008002100000000000000000000FA +:102D60000000000000000000000000000000000063 +:102D70000000000000000000000000000000000053 +:102D800000000000A0002000A000C0000000000023 +:102D90000000000000000000000000000000000033 +:102DA0000000000000000000000000000000000023 :102DB0000000000000000000000000000000000013 :102DC0000000000000000000000000000000000003 :102DD00000000000000000000000000000000000F3 -:102DE0000000000000000000000000000000C0041F -:102DF0000088009091100000000000000000C082D8 -:102E0000011001834110A1001102041000C1000053 +:102DE00000000000000000000000000000000000E3 +:102DF00000000000000000000000000000000000D3 +:102E0000000000000000000000A0000000C0000062 :102E100000000000000000000000000000000000B2 -:102E2000000101019100010100000000000000000C +:102E200000000000000000000000000000000000A2 :102E30000000000000000000000000000000000092 :102E40000000000000000000000000000000000082 :102E50000000000000000000000000000000000072 :102E60000000000000000000000000000000000062 -:102E70008080000000002100000020000000000011 -:102E8000800010900521100002022121A088000579 +:102E70000000000000000000000000000000000052 +:102E800000000000000000000000000500000080BD :102E90000000000000000000000000000000000032 -:102EA00000000010100310051105000000000000D4 +:102EA0000000000000000000000000000000000022 :102EB0000000000000000000000000000000000012 :102EC0000000000000000000000000000000000002 :102ED00000000000000000000000000000000000F2 :102EE00000000000000000000000000000000000E2 -:102EF00000000000800000000000102121000800F8 -:102F0000080021400209410009412111208900A146 -:102F1000021100000000000000000000000000009E -:102F2000000000004100200005210308000000000F +:102EF00000000000000000000000000000000000D2 +:102F00000000000000000000000000000000008041 +:102F100000000000000000000000000000000000B1 +:102F200000000000000000000000000000000000A1 :102F30000000000000000000000000000000000091 :102F40000000000000000000000000000000000081 :102F50000000000000000000000000000000000071 :102F60000000000000000000000000000000000061 -:102F7000000000001000020088A0C0000001000056 -:102F8000010001004182838900888400890101A039 -:102F900020410000000000000000000000000000D0 -:102FA0000000000000001002820002018801000001 +:102F70000000000000000000000000000000000051 +:102F800000000000000000000000000000000082BF +:102F9000000400000000000000000000000000002D +:102FA0000000000000000000000000000000000021 :102FB0000000000000000000000000000000000011 :102FC0000000000000000000000000000000000001 :102FD00000000000000000000000000000000000F1 :102FE00000000000000000000000000000000000E1 -:102FF000000000000000000000000000840000004D -:10300000000000000000000000000000810000003F -:1030100000000700000000000000000000000000A9 -:103020000000000000000000410000E0000000007F +:102FF00000000000000000000000000000000000D1 +:1030000000000000000000000000000000000000C0 +:1030100000000000000000000000000000000000B0 +:1030200000000000000000000000000000000000A0 :103030000000000000000000000000000000000090 :103040000000000000000000000000000000000080 :103050000000000000000000000000000000000070 :103060000000000000000000000000000000000060 -:103070000000000000000000FF00FF00030F436F8E -:1030800000000000000000006600E70003C30FFF1F -:103090000F0F0000999000000000000000000000E9 +:103070000000000000000000000000000000000050 +:103080000000000000000000000000000000000040 +:10309000FFFFFFFFF0F00000000000000000000054 :1030A0000000000000000000000000000000000020 :1030B0000000000000000000000000000000000010 :1030C0000000000000000000000000000000000000 :1030D00000000000000000000000000000000000F0 :1030E00000000000000000000000000000000000E0 -:1030F000000000000000000000009D9D9999839F42 -:10310000C3FF00000000000000000000C30003C374 -:103110000FFF000000009990000000000000000078 -:10312000000000000000000000000000000200009D +:1030F00000000000000000000000000000000000D0 +:1031000000000000000000000000000000000000BF +:103110000000FFFFFFFF00000000000000000000B3 +:10312000000000000000000000000000000000009F :10313000000000000000000000000000000000008F :10314000000000000000000000000000000000007F :10315000000000000000000000000000000000006F @@ -152388,403 +152388,403 @@ :1031D00000000000000000000000000000000000EF :1031E00000000000000000000000000000000000DF :1031F00000000000000000000000000000000000CF -:103200000000303030300000000000000000CF9996 -:10321000FF99F040F0600F00FF00E7E7E7E70000EC +:1032000000000000000000000000000000000000BE +:103210000000FFFFFFFFFFFFFFFF000C002000008A :10322000000000000000000000000000000000009E :10323000000000000000000000000000000000008E :10324000000000000000000000000000000000007E :10325000000000000000000000000000000000006E :10326000000000000000000000000000000000005E :10327000000000000000000000000000000000004E -:1032800008000800F3F3F3F3000000000000000062 -:103290000C99FF99F000F02000000000E7E0E70043 +:10328000000000000000000000000000000000003E +:1032900000000000FFFFFFFFFFFFFFFF0000000036 :1032A000000000000000000000000000000000001E :1032B000000000000000000000000000000000000E :1032C00000000000000000000000000000000000FE :1032D00000000000000000000000000000000000EE :1032E00000000000000000000000000000000000DE :1032F00000000000000000000000000000000000CE -:103300000000000030000000000000610006000D19 -:10331000000000610006000D000185610A0E051D18 -:1033200000A000610006000D000000000000000089 -:103330000000000000610000C00900000000000063 +:1033000000000000000000000000000000000000BD +:103310000000000000000000100600610006000D23 +:103320008A00000000000000000000000000000013 +:10333000000000000000000000000000000000008D :10334000000000000000000000000000000000007D :10335000000000000000000000000000000000006D :10336000000000000000000000000000000000005D :10337000000000000000000000000000000000004D -:1033800000000000000000000000000000FF00E35B -:103390000000000000002AFF005F005FFFFF000048 -:1033A000F3F000000000000000000000000000003A -:1033B000000000000000AAAAAAAAF05530140000DC +:10338000000000000000000000000000000000003D +:10339000000000000000000000000000000000002D +:1033A0000F0F0F0F000000000000000000000000E1 +:1033B000000000000000000000000000000000000D :1033C00000000000000000000000000000000000FD :1033D00000000000000000000000000000000000ED :1033E00000000000000000000000000000000000DD :1033F00000000000000000000000000000000000CD -:10340000000000000000000000000000000000FFBD -:1034100000E30000000000003FFF005F005F82FF4C -:103420000000FFFF0000000000000000000000009E -:10343000000000000000000020282A20F0A030201A +:1034000000000000000000000000000000000000BC +:1034100000000000000000000000000000000000AC +:1034200000000F0F0F0F0000000000000000000060 +:10343000000000000000000000000000000000008C :10344000000000000000000000000000000000007C :10345000000000000000000000000000000000006C :10346000000000000000000000000000000000005C :10347000000000000000000000000000000000004C :10348000000000000000000000000000000000003C -:103490000000550500000000F0FA5050FF17000032 -:1034A00000000000380038000F0C00000000000091 -:1034B00000000000000000000000D000D700000065 +:10349000000000000000000000000000000000002C +:1034A000000000000000000000000000000000001C +:1034B000000000000000000000000000000000000C :1034C00000000000000000000000000000000000FC :1034D00000000000000000000000000000000000EC :1034E00000000000000000000000000000000000DC :1034F00000000000000000000000000000000000CC :1035000000000000000000000000000000000000BB -:103510000000000055050000000050D250D2FF17F7 -:10352000FF1700000008380038000F0C00000000F2 -:10353000000000000000000000000000D707D000DD -:10354000000050000000000000000000000000002B +:1035100000000000000000000000000000000000AB +:10352000000000000000000000000000000000009B +:10353000000000000000000000000000000000008B +:10354000000000000000000000000000000000007B :10355000000000000000000000000000000000006B :10356000000000000000000000000000000000005B -:10357000000000002000200020002000000040008B -:1035800000000000000020002000880000008800EB -:103590002011000088002000A0002005000020006D -:1035A0000000000040042004200404008400000007 -:1035B000200200000003040084000000200000003E -:1035C000A0200000000000002000200020040000D7 -:1035D00088102000000000002000000020000000F3 -:1035E000000000000000000020002000200000007B -:1035F0002000200000000000000000020400000085 -:1036000000004100000000C0000000002000000099 -:1036100000000000000240C0000000020000400264 -:103620004090009000000000000000020004000034 -:10363000000000000000000080000000000000000A -:1036400040000001000000000000000200400001F6 -:103650000000000000020000000000000000000068 -:103660004000400040000002000000000000000098 -:103670000000004000C00000044000000000000006 -:1036800000000000000000000000020000004000F8 -:103690000000000001020000400041002000000086 -:1036A0000000000041000000010000000000400098 -:1036B00001004000080002000000000004000000BB -:1036C0000000000000000000000000008404000072 -:1036D000008000000000000000000000000000006A -:1036E0000000C0000080400000000000000000005A -:1036F000020000000000000000000084000800003C -:103700000000000200020084000800000000000029 -:103710008000000000000409000480008890C100BF -:103720000000000000008800000808000000000001 -:1037300080004000800080848000000000000000C5 -:103740000000000000000008000000080000000168 -:1037500000000004000000000000008400000000E1 -:1037600000000000000000048000000800000000CD -:103770000000000000000000000000000000001039 -:103780000000000000000000000000000003000036 -:1037900000000000840091004040000090000040C4 -:1037A0000002840000A1C100890300000420040578 -:1037B000048900830011004082030008000000A07B -:1037C0000020000004000000008800040000000445 -:1037D0000004008000020000000000000020100033 -:1037E00000000020000000000000C00000040000F5 +:10357000000000000000000000000000000000004B +:10358000000000000000000000000000000000003B +:10359000000000000000000000000000000000002B +:1035A000000000000000000000000000000000001B +:1035B00000000000000000000000000040000000CB +:1035C00000000000000000000000000000000000FB +:1035D00000000000000000000000000020000000CB +:1035E00000000000000000000000000000000000DB +:1035F00000000000000000000000000000000000CB +:1036000000000000100000000000000000000000AA +:10361000000000000000000000004000000000006A +:10362000000040000000000000000000000000005A +:10363000000000000000000000000000000000008A +:10364000000040000000000000000000000000003A +:10365000000000000000000000000000000000006A +:10366000000000004000000000000000000000001A +:10367000000000000000000000000000000000004A +:10368000000000000000000000000000000000003A +:10369000000000000000000000000000000000002A +:1036A000000000000000000000000000000000001A +:1036B000000000000000000000000000000000000A +:1036C00000000000000000000000000000000000FA +:1036D00000000000000000000000000000000000EA +:1036E00000000000000000000000000000000000DA +:1036F00000000000000000000000000000000000CA +:1037000000000000000000000000000000000000B9 +:1037100000000000000000000000000000000000A9 +:103720000000000000000000000000000000000099 +:103730000000000000000000000000000000000089 +:103740000000000000000000000000000000000079 +:103750000000000000000000000000000000000069 +:103760000000000000000000000000000000000059 +:103770000000000000000000000000000000000049 +:103780000000000000000000020000000000000037 +:103790000000000000000000000000000000000029 +:1037A0000000000000000000A000000000008400F5 +:1037B0000000000000000000000000000000000009 +:1037C00000000000000000001000000000000000E9 +:1037D00000000000000000000000000000000000E9 +:1037E00000000000000000000000000000000000D9 :1037F00000000000000000000000000000000000C9 -:103800000000000000004000000000000000000078 -:10381000090000000000000004004000008840880B -:103820000001402000880220080802004100000139 -:1038300000A000200820008200820000002000007C -:103840000003000108400300000000200000000009 -:103850000804000100020020000000000000000039 -:103860000000000000000000000000000000000157 +:1038000000000000000000000000000000000000B8 +:1038100000000000000000000000000000000000A8 +:103820000000000000000000000000000000000098 +:103830000000000000000000000000000000000088 +:103840000000000000000000000000000000000078 +:103850000000000000000000000000000000000068 +:103860000000000000000000000000000000000058 :103870000000000000000000000000000000000048 -:10388000000000000000100000000800840000009C -:10389000A0000011000000040400000000800404E7 -:1038A0000800082108002100040000110400400065 -:1038B0008280A080820010100000084000000000FC -:1038C00000000000000000000102000008000000ED -:1038D00000210002000440020080C011000000002E +:103880000000000000000000000000000000000038 +:103890000000000000000000000000000000000028 +:1038A0000000000000000000000000000000000018 +:1038B0000000000000000000000000000000000008 +:1038C00000000000000000000000000000000000F8 +:1038D00000000000000000000000000000000000E8 :1038E00000000000000000000000000000000000D8 -:1038F00001000000000000000000000000000000C7 +:1038F00000000000000000000000000000000000C8 :1039000000000000000000000000000000000000B7 -:103910000000000000000000000080000000002007 -:103920008084000085000000C0008000410080000D -:103930008000002000200000000100000082000044 -:103940000000000000000000000004000000000073 -:10395000000000000001000100A0000400000000C1 +:1039100000000000000000000000000000000000A7 +:103920000000000000000000000000000000000097 +:103930000000000000000000000000000000000087 +:103940000000000000000000000000000000000077 +:103950000000000000000000000000000000000067 :103960000000000000000000000000000000000057 -:103970000000200000000000000000000000000027 +:103970000000000000000000000000000000000047 :103980000000000000000000000000000000000037 -:10399000020082000000840000000000000001001E -:1039A00004000420900409800440000082004000CC -:1039B000A020828304008204C0058300001100005F -:1039C000000200040000004008208440822000051E -:1039D000C0208400410400044000000000020800F0 -:1039E000000000000020040000008200040000002D -:1039F00008000000000000110000000000050000A9 +:103990000000000000000000000000000000000027 +:1039A0000000000000000000000000000000000017 +:1039B0000000000000000000000000000000000007 +:1039C00000000000000000000000000000000000F7 +:1039D00000000000000000000000000000000000E7 +:1039E00000000000000000000000000000000000D7 +:1039F00000000000000000000000000000000000C7 :103A000000000000000000000000000000000000B6 -:103A10000000000000000000000000000002412043 -:103A20000420C0A0800504A1A00400000002400002 -:103A30008010058341208400030411000408000065 -:103A40000000040000000000000000A100000001D0 -:103A500020024001008484000000000000000000FB -:103A600020000000000000204000000000000000D6 +:103A10000000000000000000000000000020000086 +:103A20000000000000000000000000000000000096 +:103A30000000000000000000000000000000000086 +:103A40000000000000000000000000000000000076 +:103A50000000000000000000000000000000000066 +:103A60000000000000000000000000000000000056 :103A70000000000000000000000000000000000046 -:103A80000420000000000000000000000000000012 -:103A9000080000000000000000000000000000001E -:103AA000C000040000218404A08000000321000461 -:103AB00040A0C021024100002021902004200400E9 -:103AC000000200210021000000000800012008037E -:103AD0004020000000000000A000000300040021BE -:103AE00000000000000000000000080000000000CE -:103AF000C000000000000000000000000000000006 -:103B000000000000000000000008000000000000AD +:103A80000000000000000000000000000000000036 +:103A90000000000000000000000000000000000026 +:103AA0000000000000000000000000001000000006 +:103AB0000000000000000000000000000000000006 +:103AC00000000000000000000000000000000000F6 +:103AD00000000000000000000000000000000000E6 +:103AE00000000000000000000000000000000000D6 +:103AF00000000000000000000000000000000000C6 +:103B000000000000000000000000000000000000B5 :103B100000000000000000000000000000000000A5 -:103B20000000000080000000000000040000C00051 -:103B30000001002100008000000009000001800158 -:103B400080000000000000000000000000000401F0 -:103B50000000000100000000000000000000000163 +:103B20000000000000000000000000000000000095 +:103B30000000000000000000000000000000000085 +:103B40000000000000000000000000000000000075 +:103B50000000000000000000000000000000000065 :103B60000000000000000000000000000000000055 :103B70000000000000000000000000000000000045 :103B80000000000000000000000000000000000035 -:103B90000000000000000000000000000000010024 -:103BA00020000000000001000200000000A1001041 -:103BB000008800030209910900832002C10410401B -:103BC00088A040C0008800830090082000000803FF -:103BD0001110840490A120A0901090109002000079 -:103BE00010000001000100000000000000000000C3 -:103BF000000000000000000000008800000000003D +:103B90000000000000000000000000000000000025 +:103BA0000000000000000000000000000000000015 +:103BB0000000000000000000000000000000000005 +:103BC00000000000000000000000000000000000F5 +:103BD00000000000000000000000000000000000E5 +:103BE00000000000000000000000000000000000D5 +:103BF00000000000000000000000000000000000C5 :103C000000000000000000000000000000000000B4 -:103C10000000000000000000000000000000004163 -:103C2000210200090009000041000000090000080D -:103C30001085098000089188919000838003C080DE -:103C4000A1808000000000C100A1001180400000A0 -:103C50004008912180208082008083800080800045 -:103C600000088008000800030000000000000000B9 -:103C700000000000000000000520200300200005D7 +:103C100000000000000000000000000000000000A4 +:103C20000000000000000000000000000000000094 +:103C30000000000000000000000000000000000084 +:103C40000000000000000000000000000000000074 +:103C50000000000000000000000000000000000064 +:103C60000000000000000000000000000000000054 +:103C70000000000000000000000000000000000044 :103C80000000000000000000000000000000000034 :103C90000000000000000000000000000000000024 -:103CA00004002000044020000300028000102100D6 -:103CB0000091050083A00008208004A188801000E6 -:103CC000802100A0808500800000800580850003A1 -:103CD00000000000001080800000000000038080D1 -:103CE0000000880088000000830000000000000041 -:103CF0000000000000000000000010009000880399 -:103D000010030000000000000000000000000000A0 +:103CA0000000000000000000000000000000000014 +:103CB0000000000000000000000000000000000004 +:103CC00000000000000000000000000000000000F4 +:103CD00000000000000000000000000000000000E4 +:103CE00000000000000000000000000000000000D4 +:103CF00000000000000000000000000000000000C4 +:103D000000000000000000000000000000000000B3 :103D100000000000000000000000000000000000A3 -:103D200000000190000000010000000000400001C0 -:103D300001088890010090900001010801028908A3 -:103D400001A0A0010804A0C00082904002880208DF -:103D50001040000000000000A08200080000A00049 -:103D6000A082000002000200200005000000000008 -:103D700000000000000000000000000040402000A3 -:103D8000110008000000000000000000000000001A +:103D20000000000000000000000000000000000093 +:103D30000000000000000000000000000000000083 +:103D40000000000000000000000000000000000073 +:103D50000000000000000000000000000000000063 +:103D60000000000000000000000000000000000053 +:103D70000000000000000000000000000000000043 +:103D80000000000000000000000000000000000033 :103D90000000000000000000000000000000000023 -:103DA0000000000000000100000100000001000010 -:103DB00040010101C0002100000190000004012029 -:103DC000900400A0A00300A008080210A000008238 -:103DD0000082A010000010890041204002831002E0 -:103DE000000200200804000000000301010100009F +:103DA0000000000000000000000000000000000013 +:103DB0000000000000000000000000000000000003 +:103DC00000000000000000000000000000000000F3 +:103DD00000000000000000000000000000000000E3 +:103DE00000000000000000000000000000000000D3 :103DF00000000000000000000000000000000000C3 -:103E000001010101000100000000000000000000AD +:103E000000000000000000000000000000000000B2 :103E100000000000000000000000000000000000A2 -:103E20000000000000000003080302210020101120 -:103E30000011800520088009110200218510200949 -:103E400003891180028209A000C000858080800063 -:103E500009804000858000008008408341200302E3 -:103E6000008500890020008500000000102111213C +:103E20000000000000000000000000000000000092 +:103E30000000000000000000000000000000000082 +:103E40000000000000000000000000000000000072 +:103E50000000000000000000000000000000000062 +:103E60000000000000000000000000000000000052 :103E70000000000000000000000000000000000042 -:103E800000031103052103210000000000000000D1 +:103E80000000000000000000000000000000000032 :103E90000000000000000000000000000000000022 -:103EA0000000000000000000038003002000032049 -:103EB0000008004000000004808080800200400272 -:103EC000218202C002000803000080208000000060 -:103ED000A000100208000300000000118000000094 -:103EE00000000000000080008000210203800080AC -:103EF00000100000000000000000000000000000B2 -:103F00000000218008000880201000000000000050 +:103EA0000000000000000000000000000000000012 +:103EB0000000000000000000000000000000000002 +:103EC00000000000000000000000000000000000F2 +:103ED00000000000000000000000000000000000E2 +:103EE00000000000000000000000000000000000D2 +:103EF00000000000000000000000000000000000C2 +:103F000000000000000000000000000000000000B1 :103F100000000000000000000000000000000000A1 -:103F20000000000000000000000000A000000000F1 -:103F300000000083000000000001021008081000CB -:103F40000000010511A103880000900010000290FC -:103F500088000400C190C10283000000020110101B -:103F6000A000020040002000040004000111002015 -:103F700000840000000000000000000000000000BD -:103F8000000000000110009000020000000000008E +:103F20000000000000000000000000000000000091 +:103F30000000000000000000000000000000000081 +:103F40000000000000000000000000000000000071 +:103F50000000000000000000000000000000000061 +:103F60000000000000000000000000000000000051 +:103F70000000000000000000000000000000000041 +:103F80000000000000000000000000000000000031 :103F90000000000000000000000000000000000021 :103FA0000000000000000000000000000000000011 -:103FB000000000000082000007004200000000E056 -:103FC0000000600000000000070000000082000008 -:103FD0000700608200000000000000000000008276 -:103FE00000000700000000820000070000008400BD -:103FF00000E00000000000000000000000000000E1 -:10400000000000000000820000E00000000000004E +:103FB0000000000000000000000000000000000001 +:103FC00000000000000000000000000000000000F1 +:103FD00000000000000000000000000000000000E1 +:103FE00000000000000000000000000000000000D1 +:103FF00000000000000000000000000000000000C1 +:1040000000000000000000000000000000000000B0 :1040100000000000000000000000000000000000A0 :104020000000000000000000000000000000000090 :104030000000000000000000000000000000000080 -:1040400050550000000000000000C2C3C0C30000C3 -:10405000C3C3F0F0F0F000C7FFFF00F000F0000075 -:104060000F0F0F0D043C0414550555CF00AB000B8A +:104040000000000000000000000000000000000070 +:104050000000000000000000000000000000000060 +:104060000000000000000000000000000000000050 :104070000000000000000000000000000000000040 :104080000000000000000000000000000000000030 :104090000000000000000000000000000000000020 :1040A0000000000000000000000000000000000010 :1040B0000000000000000000000000000000000000 -:1040C0000000505500000000A0AAA0AA00000000B7 -:1040D00000004303F070707000FFFFFF000000F06D -:1040E00000000F0F0F0FD7FFD7D7550F55CFFFAFDA -:1040F000FF0F0000000000000000000000000000B2 +:1040C00000000000000000000000000000000000F0 +:1040D00000000000000000000000000000000000E0 +:1040E00000000000000000000000000000000000D0 +:1040F00000000000000000000000000000000000C0 :1041000000000000000000000000000000000000AF :10411000000000000000000000000000000000009F :10412000000000000000000000000000000000008F :10413000000000000000000000000000000000007F -:10414000000050D0000028EB28EBF0003000000009 -:1041500000000000AAAA0F030F03FFFF0000383C75 -:10416000383C000043C3C3C300AA00AA0000FFFFFD -:1041700000F000F0000000000A020F020000000042 +:10414000000000000000000000000000000000006F +:10415000000000000000000000000000000000005F +:10416000000000000000000000000000000000004F +:10417000000000000000000000000000000000003F :10418000000000000000000000000000000000002F -:10419000001000000000000000000000000000000F +:10419000000000000000000000000000000000001F :1041A000000000000000000000000000000000000F :1041B00000000000000000000000000000000000FF -:1041C00000000000F0F0000028EB28EBF0003000C9 -:1041D00000AA00AA0000FFEAFFC3FFC3ABA8ABA878 -:1041E000383C3C3C0000C3C3C3C300AA00AA000083 -:1041F000FFFE00F000F000000000FAFAFFFA0000F5 +:1041C00000000000000000000000000000000000EF +:1041D00000000000000000000000000000000000DF +:1041E00000000000000000000000000000000000CF +:1041F00000000000000000000000000000000000BF :1042000000000000000000000000000000000000AE :10421000000000000000000000000000000000009E :10422000000000000000000000000000000000008E -:1042300000000000000000610006000D00000561A4 -:104240000A3E050D00A080610007000D0001856198 -:104250000A0E050D00A085610A3E050D00A0006153 -:104260003006001D0000000000610036000D000057 -:1042700000610036000D000000610004C00900006C +:10423000000000000000000000000000000000007E +:10424000000000000000000000000000000000006E +:10425000000000000000000000000000000000005E +:10426000000000000000000000000000000000004E +:10427000000000000000000000000000000000003E :10428000000000000000000000000000000000002E -:1042900000610004C00900000000000000000000F0 +:10429000000000000000000000000000000000001E :1042A000000000000000000000000000000000000E -:1042B0000000000000000000AA80000000000000D4 -:1042C000000000005F4355411414141430FF3CFFFC -:1042D000A3F303033030F0F0000000008A0A8A0ADA -:1042E0000000EA0000000000000000000000343080 -:1042F0001410000000000F3D0F15000000FFFF002C +:1042B00000000000000000000000000000000000FE +:1042C00000000000000000000000000000000000EE +:1042D00000000000000000000000000000000000DE +:1042E00000000000000000000000000000000000CE +:1042F00000000000000000000000000000000000BE :1043000000000000000000000000000000000000AD -:1043100000000000FFFFFF8E000000000000000012 +:10431000000000000000000000000000000000009D :10432000000000000000000000000000000000008D -:1043300000000000000000000000AA8000001455EA -:104340001555000000005F43FFC30404040400FF90 -:1043500000FFA3F3030300000000000000000A0AAE -:104360000A0A0000FF00000000000000000000003A -:10437000F7F7D7D7000000000F7D0F55000000FFB2 -:10438000FF0000000000000000000000000000002E -:10439000000000000000FFEFFFA20000000000008E +:10433000000000000000000000000000000000007D +:10434000000000000000000000000000000000006D +:10435000000000000000000000000000000000005D +:10436000000000000000000000000000000000004D +:10437000000000000000000000000000000000003D +:10438000000000000000000000000000000000002D +:10439000000000000000000000000000000000001D :1043A000000000000000000000000000000000000D -:1043B0000000000000000000000000008280C3C078 -:1043C0000040000000000000000000005500140044 -:1043D00000F000F000E8E8E80C0000000000000039 -:1043E000000000008000C300000000000000EBA0FF +:1043B00000000000000000000000000000000000FD +:1043C00000000000000000000000000000000000ED +:1043D00000000000000000000000000000000000DD +:1043E00000000000000000000000000000000000CD :1043F00000000000000000000000000000000000BD -:10440000C0000000000000000000000000000000EC -:10441000000000000000B0A0BEAA0000282000009C +:1044000000000000000000000000000000000000AC +:10441000000000000000000000000000000000009C :10442000000000000000000000000000000000008C -:104430000000000000000000000000000000AAA032 -:10444000FFF00F4F0000000000003C3C7F7F550054 -:10445000140000A000A000FFFFFF550000000000B6 -:10446000000000000000C300C300000000000000C6 -:10447000EBAAFFFF000000000000000000000000A9 -:10448000000000000000101000000000000000000C -:104490000000000000000000C0A0C3AA0000AAA005 +:10443000000000000000000000000000000000007C +:10444000000000000000000000000000000000006C +:10445000000000000000000000000000000000005C +:10446000000000000000000000000000000000004C +:10447000000000000000000000000000000000003C +:10448000000000000000000000000000000000002C +:10449000000000000000000000000000000000001C :1044A000000000000000000000000000000000000C -:1044B00000000000200000000400200000000000B8 -:1044C0002000000020002000000420042004000040 -:1044D0000000000020000000200004000000000098 -:1044E00000008400200000000000200020000000E8 -:1044F0000000040000002000000020002000000058 -:10450000000000000000200000000000200020004B -:10451000000000000000200000002000000000005B -:10452000000000000000200000000000200020002B -:1045300000001000100000020002400200020040D3 -:1045400000004002000040000000400000000000A9 -:104550001100410000000000000040002040004029 -:104560000000404000020002000000000002400085 -:1045700000000000000000000000000040020000F9 -:104580004040004000000000000200000000000069 -:104590000000000000000002000000020000000215 -:1045A0000002400240000000100000020000000075 -:1045B00000000004000000000000000002000000F5 -:1045C00000000000000000000000000000000000EB -:1045D0000200020000000000000000000000820055 -:1045E0000000820000000000000000000000000049 -:1045F00002000200000000000000000000000000B7 -:1046000000000000020000000000000000000000A8 -:104610000000020002000000000000000000000096 -:10462000200000000000000000000000000000006A -:104630000000020002000000000000000000000076 -:1046400000000000000000000000000000880002E0 -:1046500000020082000000000000000000000000D6 -:104660000000000004000000000000000000000046 -:104670000400000000000000000000000000000036 -:1046800000000000008800000000000000000000A2 -:104690000000008200000000000000000000000098 -:1046A0000000008200000000000000000000000088 +:1044B00000000000200000000000000020000000BC +:1044C00000000000000000000000000000000000EC +:1044D00000404000204000000000000020000000DC +:1044E00000000000000000000000000000000000CC +:1044F000000000000000200000000000000020007C +:10450000000000000000000040000000000000006B +:10451000000000000000200000000000000020005B +:10452000000000000000000020000000000000006B +:10453000000000000000000000000000000010006B +:104540001000000000001000000000000000000249 +:1045500000001002100000004002400000000000B7 +:10456000004000000000000000000000000000000B +:1045700000000000402020000000000000000002B9 +:10458000000000000000000000000000000000002B +:10459000000000000000000000000000000000001B +:1045A000000000000000000000000000000000000B +:1045B00000000000000000000000000000000000FB +:1045C00000000010000000000000000000000000DB +:1045D000000000400000000000000000000000009B +:1045E00000000010000000000000000000000000BB +:1045F000000000400000000000000000000000007B +:10460000000000000010000000000000000000009A +:10461000000000000040000000000000000000005A +:10462000000000000010000000000000000000007A +:10463000000000000040000000000000000000003A +:10464000000000000000000000000000000000006A +:10465000000000000000000000000000000000005A +:10466000000000000000000000000000000000004A +:10467000000000000000000000000000000000003A +:10468000000000000000000000000000000000002A +:10469000000000000000000000000000000000001A +:1046A000000000000000000000000000000000000A :1046B00000000000000000000000000000000000FA -:1046C00000000000000004000400000000000000E2 -:1046D0000400000040000000000020002000000056 -:1046E00000008400880800000003040000009040DF -:1046F00000000000000000020000000000000005B3 -:104700000040000084009000000000000000000055 -:104710000000002100000000000000000000000078 -:104720000000000900000000000900000000000077 -:1047300090000000000004000400000000000400DD -:104740000000000010004000020005000000000012 -:104750001100000004000400042010A00000090063 -:10476000000000C02100408800A0000003C000003D -:104770002100000000000500000000000300000010 -:104780004002000000A00002410000C000880000BC -:104790000000000000A00000000000A008000300CE -:1047A000410000001100000000000008008200002D -:1047B00000084008000000000000000000000000A9 -:1047C00000000000000000000000000000400000A9 -:1047D000000000000000000010040004040090002D -:1047E00000000000000000000000000008000000C1 -:1047F00000000800000000000000000000000000B1 +:1046C00000000000000000000000000000000000EA +:1046D00000000000000000000000000000000000DA +:1046E00000000000000000000000000000000000CA +:1046F00000000000000000000000000000000000BA +:1047000000000000000000000000000000000000A9 +:104710000000000000000000000000000000000099 +:104720000000000000000000000000000000000089 +:104730000000000000000000000000000000000079 +:104740000000000000000000000000000000000069 +:104750000000000000000000000000000000000059 +:104760000000000004000000000000000000000045 +:104770000000000000000000000000000000000039 +:104780000000000000000000000000000000000029 +:104790000000000000000000000000000000000019 +:1047A0000000000000000000000000000000000009 +:1047B00000000000000000000000000000000000F9 +:1047C00000000000000000000000000000000000E9 +:1047D00000000000000000000000000000000000D9 +:1047E00000000000000000000000000000000000C9 +:1047F00000000000000000000000000000000000B9 :1048000000000000000000000000000000000000A8 -:10481000080000000000000000000000000400008C +:104810000000000000000000000000000000000098 :104820000000000000000000000000000000000088 -:104830000000000000000000000000000020000058 +:104830000000000000000000000000000000000078 :104840000000000000000000000000000000000068 -:104850000000000000000000000010000000000048 -:1048600000000000000000C0400000000000000048 -:1048700000400000000000000000000000000000F8 -:1048800011000000000000000000000800004000CF +:104850000000000000000000000000000000000058 +:104860000000000000000000000000000000000048 +:104870000000000000000000000000000000000038 +:104880000000000000000000000000000000000028 :104890000000000000000000000000000000000018 -:1048A0000008000000000000000000000000000000 +:1048A0000000000000000000000000000000000008 :1048B00000000000000000000000000000000000F8 :1048C00000000000000000000000000000000000E8 :1048D00000000000000000000000000000000000D8 :1048E00000000000000000000000000000000000C8 -:1048F00000000000000000000000000000000011A7 -:10490000000000000000000082000000080000001D -:104910000000C000000000000000000000000000D7 -:10492000C0000000000000000000000000000000C7 +:1048F00000000000000000000000000000000000B8 +:1049000000000000000000000000000000000000A7 +:104910000000000000000000000000000000000097 +:104920000000000000000000000000000000000087 :104930000000000000000000000000000000000077 -:104940000003000000000000000000000000000064 -:1049500000000500000000C005000004042000A0C5 -:10496000000000020002000000A0210009C00304B2 -:1049700000840288000040A000A00200400800005F -:104980004002000000000004008400000000050058 -:1049900000C00000000011000000008800000000BE -:1049A00000000000000000000000000000001100F6 -:1049B000000800841100000000000000000000005A +:104940000000000000000000000000000000000067 +:104950000000000000000000000000000000000057 +:104960000000000000000000000000000000000047 +:104970000000000000000000000000000000000037 +:104980000000000000000000000000000000000027 +:104990000000000000000000000000000000000017 +:1049A0000000000000000000000000000000000007 +:1049B00000000000000000000000000000000000F7 :1049C00000000000000000000000000000000000E7 :1049D00000000000000000000000000000000000D7 -:1049E000000000000400880000000000000000003B -:1049F000000040000000000000000009000000006E +:1049E00000000000000000000000000000000000C7 +:1049F00000000000000000000000000000000000B7 :104A000000000000000000000000000000000000A6 -:104A10000000004100000000000000000000000055 +:104A10000000000000000000000000000000000096 :104A20000000000000000000000000000000000086 -:104A30000000000000000000000000000002000074 +:104A30000000000000000000000000000000000076 :104A40000000000000000000000000000000000066 :104A50000000000000000000000000000000000056 -:104A60000000000000000020000000000000210005 -:104A70000900000000A00304000000000004000082 +:104A60000000000000000000000000000000000046 +:104A70000000000000000000000000000000000036 :104A80000000000000000000000000000000000026 -:104A90000000000000000000000000000000000016 +:104A90000000000005000000000000000000000011 :104AA0000000000000000000000000000000000006 :104AB00000000000000000000000000000000000F6 -:104AC00000000000000020000000000000000000C6 +:104AC00000000000000000000000000000000000E6 :104AD00000000000000000000000000000000000D6 :104AE00000000000000000000000000000000000C6 :104AF00000000000000000000000000000000000B6 @@ -152882,435 +152882,435 @@ :1050B00000000000000000000000000000000000F0 :1050C00000000000000000000000000000000000E0 :1050D00000000000000000000000000000000000D0 -:1050E0002000000020002000200000002000200000 -:1050F0002000000020000000A00000402000200050 -:1051000020000000C0000000200000002004200457 -:105110002000848020050002000000000000200024 -:1051200000032084008400A000A0200000200000D4 -:105130002000200400002004000000000080008007 -:10514000208020000000000000002000000000007F -:1051500020002000000020000000000000000000EF -:10516000200000000000000000000002000000021B -:105170000002400200020002000240024000000261 -:105180000000100400A000901000000000000000CB -:1051900000000000000200020004400200000000C5 -:1051A0000002000000210021000510050000004160 -:1051B00000000040100100000001000040004020FD -:1051C000402000200000000000000000000000005F -:1051D00040000000400000004000004000020002CB -:1051E000000000020200000000400040000000003B -:1051F000001000000000004100000200000000005C -:105200000000004100000000000800080000040049 -:10521000000000000000000000800002000000000C -:105220000000000500000400050005850584C0801D -:105230008880000000800000000000000100830062 -:105240000400040004000000000000000000000052 -:105250000000004000400000000008000800A0001E -:10526000000000000000000800000000000800002E -:10527000000200820204000000000008000000009C -:10528000000000040008000400000000000200000C -:105290008000000000000000040000020001000087 -:1052A00040000400004000008400A000A004A0050D -:1052B00004200004000000040000000000002000A2 -:1052C000040080008000800000000000000000005A -:1052D0000000000000000084008400840000000042 -:1052E0000000000000840008000000000000000032 -:1052F00004000000000000000000000000000000AA -:105300000000000010008400840000000400000081 -:105310008800000088008800900090004000C000D5 -:1053200000000000000000000000820000100020CB -:1053300082210000C000000004088808408000218D -:105340000004000500000008000810050005000822 -:10535000000800000000C000020000000000000083 -:10536000000000210008000000050000000000000F -:1053700000000500000000004000000000000000E8 -:1053800000000500000000000000000011000020E7 -:10539000000000080008000000000000000083007A -:1053A00000000000000000000000000000001000ED -:1053B00000000040000000000082800000000002A9 -:1053C0000000000100000000000000000000008854 -:1053D00000000000000000000000000000000008C5 -:1053E00000000000000000001000000000000000AD +:1050E0000000000020002000000000000000200060 +:1050F00000000000200020000000204020000000F0 +:10510000000000002000200000000000000020003F +:10511000000000002000200000002000200000000F +:10512000000000000000200020000000000000003F +:1051300020000000000020002000000020002000CF +:10514000000000000000000020000000000000003F +:105150002000000000002000200000008800200047 +:10516000000000000000000000020000000000003D +:10517000000000000040400000000002000040006D +:10518000000000000000000000000000000000001F +:1051900000000000000000000200000040000000CD +:1051A00000000000000000000000000000000000FF +:1051B00000000000000000000000000000000000EF +:1051C000400000000000000000000000000000009F +:1051D00000000000000000000000000000000000CF +:1051E00000000000000000000000000000000000BF +:1051F00000000000000000000000000000000000AF +:10520000000000000000000000000000000000009E +:10521000000000000000000000000040000000004E +:10522000000000000000000000000000000000007E +:10523000000000000000000000000000000000006E +:10524000000000000000000000000000000000005E +:10525000000000000000000000000000000000004E +:10526000000000000000000000000004000000003A +:10527000000000000000000000000000000000002E +:10528000000000000000000000000000000000001E +:10529000000000000000000000000000000000000E +:1052A00000000000000000000000000000000000FE +:1052B00000000000000000000000000000000000EE +:1052C00000000000000000000000000000000000DE +:1052D00000000000000000000000000000000000CE +:1052E00000000000000000000000000000000000BE +:1052F00000000000000000000000000000000000AE +:10530000000000000000000000000000000000009D +:105310000000000000000000000000090000000084 +:10532000000000000000000000000000000001007C +:10533000000000000000000000000000000000006D +:10534000000000000000000000000000000000005D +:10535000000000000000000000000000000000004D +:10536000000000000000000000000000000000003D +:10537000000000000000000000000000000000002D +:10538000000000000000000000000000000000001D +:10539000000000000000000000000000000000000D +:1053A00000000000000000000000000000000000FD +:1053B00004000000000000000000000000000000E9 +:1053C00000000000000000000000000000000000DD +:1053D00000000000000000000000000000000000CD +:1053E00000000000000000000000000000000000BD :1053F00000000000000000000000000000000000AD -:105400008400000000000000000020008400000074 -:105410008202A00000000000000000001000401107 -:105420000000C00008002000A000000000000004F0 -:10543000100008000000A0000080000001800000B3 -:105440000004000000000005000000000000000053 -:10545000000000000000000000000000000000004C -:1054600000000000004002000205020902000000E6 +:10540000000000000000000000000000000001009B +:105410000100040000000000000000000000000087 +:10542000000000000000000000000000000000106C +:105430000100010001000000000000000000000069 +:10544000000000000000000000000000000000005C +:105450000000000000000000C0000000000000008C +:105460000000000000000000080000000000000034 :10547000000000000000000000000000000000002C -:1054800000000000200000000000000000000000FC -:105490004140080121000000200000000000090038 -:1054A00000000000000400000000000000000000F8 -:1054B0000001008400842084000041202184200415 -:1054C00000000000210000000000000000000000BB -:1054D000008400840000000000A000000000000024 -:1054E00000000000000000008000800080008000BC -:1054F00000000000000000000000080000000000A4 -:10550000000000000000000000000000100000008B -:10551000840084008400840004000000C0000000B7 -:105520000000000000020000080000000000000071 -:10553000000000000000080082000000C000C0035E -:10554000002100040004000400110000000300001A -:1055500000000085000000001000000500000000B1 +:10548000000000000000000000000000000000001C +:105490000400040080000000000000000000000084 +:1054A00000000000000000000000000000000000FC +:1054B00000010400040002000000000000000000E1 +:1054C00000000000000000000000000000000000DC +:1054D00000000000000000000000000000000000CC +:1054E00000000000000000000000000000000000BC +:1054F00000000000000000000000000000000000AC +:10550000000000000000000000000000000000009B +:10551000000000000000000000000400040004047B +:105520000000C000000000000000000000000000BB +:10553000000000000000000000000040001100001A +:10554000000000000000000000000000000000005B +:105550000000000000000800000000000000000043 :10556000000000000000000000000000000000003B -:105570000008000000000000000000000000000023 -:105580000000000000000000000400000000000017 -:1055900000000000410000000000040009000000BD -:1055A000000800000088000100A0000000000000CA -:1055B00000000000000000000000040000000000E7 -:1055C0000002000000A000A0000100000000000098 -:1055D000000000000010000000000000000800A013 -:1055E000000000000000000000000020000000009B +:10557000000000000000000000000000000000002B +:10558000000000000000000000000000000000001B +:10559000000000000000000000000000800080000B +:1055A000800000000000000000000000000000007B +:1055B00000000000000000000000000000000000EB +:1055C00000000000000000000000000000000000DB +:1055D00000000000000000000000000000000000CB +:1055E00000000000000000000000000000000000BB :1055F00000000000000000000000000000000000AB :10560000000000000000000000000000000000009A -:105610000000200000008400400008000011C000CD -:105620000000820000000000048000000000000074 -:10563000000000000000820082000800C00040005E -:10564000008508210005000000080004002100007A -:10565000000000000000001000030000000000082F -:105660000021000000000003000000000000000016 +:105610000000000000800000000000000100000009 +:105620000000000000000100000001000000000078 +:1056300000000000000000800000000000000000EA +:105640000009000000000000000000000000000051 +:10565000000000000000000000000000000000004A +:10566000000000000000000000000000000000003A :10567000000000000000000000000000000000002A -:1056800000000000000041000000000000000000D9 -:1056900000400000000000000000020000000000C8 -:1056A00000000020118200000000000203880000BA -:1056B00000000800050000000000000008002000B5 -:1056C00003000004030000000000080020000000A8 -:1056D00000000000000000000001000000000000C9 +:10568000000000000000000000000000000000001A +:1056900000000000000000200000000000000400E6 +:1056A00000000000000000004000000004000000B6 +:1056B0000000000000000000004000820000000028 +:1056C00000000000000005000000000000000000D5 +:1056D00000000000000000000000000000000000CA :1056E00000000000000000000000000000000000BA :1056F00000000000000000000000000000000000AA :105700000000000000000000000000000000000099 -:105710000000000000000000000085008400000080 -:1057200000020002000000020001200188010001C7 -:105730000000000000000000000000001000000059 -:105740000000204090028808908201002100400162 -:105750000001000000000000000000000000000048 +:10571000000000000000000000C000900000000039 +:1057200000C000900000000000C0009100000000D8 +:105730000000000000000000000389C090080088FD +:10574000C082000000000000000000000000000017 +:105750000000000000000000000000000000000049 :105760000000000000000000000000000000000039 -:10577000000000C000080000000000000000000061 +:105770000000000000000000000000000000000029 :105780000000000000000000000000000000000019 -:105790000000000000000000000000002100800068 -:1057A00000000080008000000080004000400003F6 -:1057B0000020000000000000000000000000800049 -:1057C000000000000082809100918090110384030A -:1057D00000040003000000000000000000000000C2 +:105790000000000000000000000000800080000009 +:1057A00000000080008000000000088000910000E0 +:1057B00000000000000000000000000089808080E0 +:1057C0000080808000000000000000000000000059 +:1057D00000000000000000000000000000000000C9 :1057E00000000000000000000000000000000000B9 -:1057F00000000000008000800000000000000000A9 +:1057F00000000000000000000000000000000000A9 :105800000000000000000000000000000000000098 -:105810000000000000000000000000000800080078 -:105820000200210300000005008000004080050008 -:10583000400200080000000000000000000000021C -:105840000080000900808000110591C010009100C7 -:105850002100400082000000000000000000000065 +:105810000000000000000000000000000000000088 +:1058200080008080000000008000808000800000F8 +:10583000800080C0000000000000000000000000A8 +:105840000021008080000000000000000000000037 +:105850000000000000000000000000000000000048 :105860000000000000000000000000000000000038 -:1058700000000000000000000000000080000000A8 +:105870000000000000000000000000000000000028 :105880000000000000000000000000000000000018 -:1058900000000000000000000000000000000120E7 -:1058A0000100010001210000000800A000000040EC -:1058B00000000000000000000000000000000000E8 -:1058C000000000080000000810000200A00884008A -:1058D0000490090088001100000000040000008806 +:105890000000000000000000000000000000000008 +:1058A00000008400C090000000008400C09000024E +:1058B00000008400C0900000000000000000000014 +:1058C000900090008882100000000000000000009E +:1058D00000000000000000000000000000000000C8 :1058E00000000000000000000000000000000000B8 -:1058F0000000000000000000000002000000C000E6 +:1058F00000000000000000000000000000000000A8 :105900000000000000000000000000000000000097 :105910000000000000000000000000000000000087 -:105920000000000100000000C090000400042004FA -:105930000001010001010000000000000000000063 -:105940000000000004000200010040020040A00925 -:10595000900400010100840100010000000010001B +:1059200000000000009000C000000000849000C053 +:1059300000000000019000C0000000000000000016 +:10594000000088880088009089C0000000000000E6 +:105950000000000000000000000000000000000047 :105960000000000000000000000000000000000037 -:105970000000000000000000000000000000000225 -:1059800000C0000000000000000000000000000057 +:105970000000000000000000000000000000000027 +:105980000000000000000000000000000000000017 :105990000000000000000000000000000000000007 -:1059A0000000000900400041000580000000008068 -:1059B00000800008032021210200000000000000F8 -:1059C00000000000020000000000080080800000CD -:1059D00080A180800004094005040011100000002F +:1059A00000000000000000800080000000008080F7 +:1059B000088000000000118000800000000000004E +:1059C00000000000000000800080898000000000CE +:1059D00000000000000000000000000000000000C7 :1059E00000000000000000000000000000000000B7 :1059F00000000000000000000000000000000000A7 -:105A00000000008000000000000000000000000016 +:105A00000000000000000000000000000000000096 :105A10000000000000000000000000000000000086 -:105A2000000000002084204003002010000000003F -:105A300000000000218010001000050000000000A0 -:105A40000000000000000000000000000000A12194 -:105A500080A1900080000888020008000840000033 -:105A60000000000000008000800000000000000036 +:105A200000000000801100020000000080118008CA +:105A300000000000A11183084100030000000000E5 +:105A4000000000000000800880108000800000003E +:105A50000000000000000000000000000000000046 +:105A60000000000000000000000000000000000036 :105A70000000000000000000000000000000000026 -:105A80000000000080000000000000000000000096 +:105A80000000000000000000000000000000000016 :105A90000000000000000000000000000000000006 -:105AA00000000000000000020000010001012000D1 -:105AB00090000800900001020100010000000000B9 -:105AC00000000000000000000000000000000000D6 -:105AD000910390100510820000410002018801002E -:105AE00000000000000000000800080000000000A6 +:105AA0000000000000009000000000000000C001A5 +:105AB000200100000000C1012001000000000000E2 +:105AC0000000000000000000C000880190888800ED +:105AD00000000000000000000000000000000000C6 +:105AE00000000000000000000000000000000000B6 :105AF00000000000000000000000000000000000A6 -:105B0000000000000000080000000000000000008D +:105B00000000000000000000000000000000000095 :105B10000000000000000000000000000000000085 -:105B20000000000000000000000000000000000075 -:105B300000000000070060000000000000000000FE -:105B40000000000000000000000000000042120001 -:105B50000000418200E007000000810000E000003A -:105B60000000000000000400000000000000000031 +:105B200000000000000000000081000006000000EE +:105B300000210000060000000041000006000000F7 +:105B400000000000000000000000008100000600CE +:105B50000021000000000000000000000000000024 +:105B60000000000000000000000000000000000035 :105B70000000000000000000000000000000000025 :105B80000000000000000000000000000000000015 :105B90000000000000000000000000000000000005 -:105BA00000000000000000000000000000000000F5 -:105BB000000055F0FFF0C0C3FCFF00000000000033 -:105BC00000000000000000000000000000000000D5 -:105BD00000000000020A435F0043001C00000000B8 -:105BE0000000000000000000000000000000FF00B6 +:105BA000000000000000000000000000FFFF0000F7 +:105BB00000FF000000FF000000FF000000FF0000E9 +:105BC00000FF0000000000000000000000FF0101D5 +:105BD0001818201C00000000000000000000000059 +:105BE00000000000000000000000000000000000B5 :105BF00000000000000000000000000000000000A5 -:105C0000000000003C3C3C3C000000FF00000000A5 +:105C00000000000000000000000000000000000094 :105C10000000000000000000000000000000000084 -:105C20000000000000000000000000000000000074 -:105C300000000000553CFF3CC0C3FCFF000000001A -:105C40000000000000000000000000000000000054 -:105C50000000000000000000C1F55F5F5F1C000055 +:105C20000000000000000000000000000000FFFF76 +:105C3000000000FF000000FF000000FF000000FF68 +:105C4000000000FF00000000000000000000000055 +:105C500000001818003C00000000000000000000D8 :105C60000000000000000000000000000000000034 -:105C7000FF00000000000000000000000000000025 -:105C80000000000000003C3C3C3C000000FF000025 +:105C70000000000000000000000000000000000024 +:105C80000000000000000000000000000000000014 :105C90000000000000000000000000000000000004 -:105CA00000000000000000000000000000000000F4 -:105CB000000000000000960014000000000000003A -:105CC00000000000000000000000000000000000D4 -:105CD00000000000000000001015141000FF00FF7D +:105CA0000000000000000000000000000000FF00F5 +:105CB0000000FF000000FF000000FF000000FF00E8 +:105CC000000000FFFFFF00000000000000000000D7 +:105CD000393C5A5A0C00000000000000000000008F :105CE00000000000000000000000000000000000B4 :105CF00000000000000000000000000000000000A4 -:105D00000000000000000000FF0000000F0F000076 +:105D00000000000000000000000000000000000093 :105D10000000000000000000000000000000000083 :105D20000000000000000000000000000000000073 -:105D30000000000000000000C3C3000000000000DD -:105D40000000000000000000000000000000000053 -:105D500000000000000000000000303F3C3000FE6A -:105D600000FF000000000000010000000000000033 +:105D3000FF000000FF000000FF000000FF00000067 +:105D4000FF00000000FFFFFF000000000000000057 +:105D50000000000000000000000000000000000043 +:105D60000000000000000000000000000000000033 :105D70000000000000000000000000000000000023 -:105D800000000000000000000000FF0000000F0FF6 +:105D80000000000000000000000000000000000013 :105D90000000000000000000000000000000000003 :105DA00000000000000000000000000000000000F3 -:105DB000000000610006000D000000000E00000061 -:105DC000000000610006000D00000000000000005F -:105DD0000000000005610A86150D00A00061003476 -:105DE000C009000000610002C001000105000A00B6 -:105DF000150000A0000000000000000000000000EE -:105E000000000000000000000000000040028000D0 -:105E100000209202000000000000000000000000CE +:105DB0000000030203380C0092C0038203380C0079 +:105DC00092C003E3033E0C0D82C0000000000000FF +:105DD00000000000A000203800400001000000008A +:105DE00000000000000000000000000000000000B3 +:105DF00000000000000000000000000000000000A3 +:105E00000000000000000000000000000000000092 +:105E10000000000000000000000000000000000082 :105E20000000000000000000000000000000000072 -:105E30000000000000A00020AA0A8202000000006A -:105E400000000000F010F0F000AC00AC000000001A +:105E30000000000000000000000000000000000062 +:105E40000000000000000000000000000000000052 :105E50000000000000000000000000000000000042 -:105E6000F0F055005500020000000050FF5A0000FD +:105E60000000000000000000000000000000000032 :105E70000000000000000000000000000000000022 :105E80000000000000000000000000000000000012 :105E90000000000000000000000000000000000002 :105EA00000000000000000000000000000000000F2 -:105EB00000000000000000000020FF0FC3030000EE -:105EC000000000000000001000F000AC00AC00007A +:105EB00000000000000000000000000000000000E2 +:105EC0000000000000000040000000000000000092 :105ED00000000000000000000000000000000000C2 -:105EE0000000F0F055005500020000000040C342E1 +:105EE00000000000000000000000000000000000B2 :105EF00000000000000000000000000000000000A2 :105F00000000000000000000000000000000000091 :105F10000000000000000000000000000000000081 :105F20000000000000000000000000000000000071 -:105F30000000000000000000000000001400140039 -:105F4000000000000000000002C20AFA0000000089 +:105F30000000000000000000000000000000000061 +:105F40000000000000000000000000000000000051 :105F50000000000000000000000000000000000041 -:105F600000000C0000000000000FAAAAAAAA0A0460 -:105F7000AA14000000000000000000000000000063 +:105F60000000000000000000000000000000000031 +:105F70000000000000000000000000000000000021 :105F80000000000000000000000000000000000011 :105F90000000000000000000000000000000000001 :105FA00000000000000000000000000000000000F1 -:105FB000000000000000000000000000000055008C -:105FC00050000000000000000000C3C3FFFF0300FA -:105FD00003000000000000000000000000000000BE -:105FE000000000000C0000000000000020282A2013 -:105FF0000C0C3C3C00000000000000000000000011 +:105FB00000000000000000000000000000000000E1 +:105FC0000000000000000000000000FF00FF0000D3 +:105FD00000000000000000000000000000000000C1 +:105FE00000000000000000000000000000000000B1 +:105FF00000000000000000000000000000000000A1 :106000000000000000000000000000000000000090 -:10601000000000000000000000000000C0000200BE -:10602000210300002000A004200020004000000008 -:1060300020002000C0002000201100008800000087 -:10604000200000002011401020112000400000001E -:106050000000200084002000200000020003200037 -:10606000200020000005200020002000200020004B -:106070000000880020200000200020000000100008 -:1060800020002000000020002000200020008800C8 -:106090000000200020000000200020000000100070 -:1060A0000000400000004000000009000002100055 -:1060B00000000002000040020002404010001000FA -:1060C0002100000000020000000340020002000264 -:1060D00000000000000040000000400040A100005F -:1060E000C00080020002000000000000000000006C -:1060F000000000000000000100000000000010008F -:10610000400000000002000000000000000000004D -:10611000400000000002000000000000000200003B -:106120000000000000000000000000000800020065 -:1061300000000000000000000000040000008400D7 -:10614000000000000000000000000020000000002F -:10615000000000050000094001009000000903094B -:1061600000000000000200400040000000000000AD -:10617000000000000000000000000000000084009B -:10618000820000000000000000000000000000008D -:1061900002000000000000000000000000000000FD -:1061A0000041000000080008000000082008C100AD -:1061B0000008200800080008000800008008000807 -:1061C00000080000000400080000000800090000AA -:1061D0000008000802080008C00940000008000884 -:1061E0004008000000000000000800080008040843 -:1061F000000000080008000800080008000000086F -:1062000000080008008800000008000800080008D6 -:10621000000000080008000800080008000000084E -:106220000008000800030000000000000004000057 -:106230008200000000000000000000000000824119 -:1062400082000000000000000000000800000000C4 -:1062500088008400000000004000010000004000B1 -:106260000000020000000021000540210020000085 -:1062700000000000002100200004002000040010A5 -:1062800000200000002000000000000000000000CE -:10629000000000000040000000000000400000215D -:1062A000000000000000410000000090000000001D -:1062B0000000040000000300000000881100090035 -:1062C000030003000300000008000000410000007C -:1062D0000300000000000000000080000400000037 -:1062E0008000000080000000080000008000000125 -:1062F0000000000000000000000100010003000198 -:106300000001000100000001008400000084000082 +:106010000000000000000000000000000000000080 +:106020002000200020002000200020000000200090 +:1060300020002000000020002000200000000000C0 +:106040002000200020002000200020000000200070 +:1060500020002000000020002000200000000000A0 +:106060000000200000002000200020002000000090 +:106070002000200020000000200020002000000060 +:106080000000200000002000200020002000000070 +:106090002000200020000000200020002000000040 +:1060A00000000000000000000000000200000000EE +:1060B0001000000010001000000000000000400070 +:1060C0000000000000000000000000000000400090 +:1060D00000000000000000000000000000000000C0 +:1060E0000000000000002000000000000000000090 +:1060F000000200000000000000000000000000009E +:10610000000000000000000000000000000000008F +:10611000000000000000000000000000000200007D +:106120000000000000000000000000000000020865 +:106130000000000000000000000000000000084017 +:106140000000000000000000000000000000020845 +:1061500000000000000000000000000000000840F7 +:106160000000000008000010000000000000000017 +:1061700000400000000000000000000000000000DF +:1061800008400000000000000000000000000000C7 +:1061900008400000000000000000000000000000B7 +:1061A00008400000000000000000000000000000A7 +:1061B00000100000000800000008000800000000B7 +:1061C00000080000000000000000000000000000C7 +:1061D000001000000002000000080008000000009D +:1061E0000008000000008000000100000000000026 +:1061F000000000100000000000000008000800007F +:106200000000000800000000000000000000000086 +:10621000000000000000000000000008000800006E +:106220000000000800000000000000000000000066 +:10623000000000000000000000000000000000005E +:10624000000000000000000000000000000000004E +:10625000000000000000000000000000000000003E +:10626000000000110000000000000009010900000A +:10627000000000000000000000000000000000001E +:1062800000200000000000000000000000000000EE +:1062900000000000000000000000000900000000F5 +:1062A00000000000000000000000000000000000EE +:1062B00000000000000000000000000000000000DE +:1062C00000000000000000000000000000000000CE +:1062D00000000000000000000000000000000000BE +:1062E00000000000000000000000000000000400AA +:1062F000000000000000000000000000000000009E +:10630000000000000000000000000000000000008D :10631000000000000000000000000000000000007D -:10632000000000000000000010001000000000004D -:106330008400C0008400C000020000000000900043 -:10634000C000820000000000000000090000820080 -:106350008240000040408840080000009000820019 -:1063600008000100000000000000000040002100C3 -:106370004100A0000000000000000000000000003C -:106380000000000000000000000008000000000005 -:1063900000000000000000000000080000000000F5 -:1063A00000000000000000000000000000000000ED +:10632000000000000000000000000000000000006D +:10633000000000000000000000000000000000005D +:1063400000000000000000000000880000000000C5 +:10635000000000000000000000000100000000003C +:10636000000000000000000000000090000001009C +:10637000008000000000000000000000000000009D +:10638000000000000000000000000000000000000D +:1063900000000000000000000000000000000000FD +:1063A00000020000000000000000000000000000EB :1063B00000000000000000000000000000000000DD -:1063C00000000000000000000000080000000000C5 -:1063D0000000000000400000000000000000080075 -:1063E000210000004000000004000000000080A028 -:1063F000C0A0A0000000000000000000000000009D -:106400000000000008000000000000000000000084 -:1064100000840000000000000000000000000000F8 -:10642000000000000000000000000040C000040068 -:10643000C004000000000020000000200000080050 -:1064400000000000820000000000000000000000CA -:1064500040200000020004000400840000210480A9 -:1064600040A04005000000050000000300000021DE -:1064700000414021000000000000010000800000F9 -:106480002000000282000000004100000020000007 -:1064900000000000000000000000000000000000FC +:1063C00000000000000000000000000000000000CD +:1063D000000000000000000000000000400000007D +:1063E0000000000000000000000000004109000063 +:1063F0000200000400000000000000000000000097 +:10640000000000000000000000000000000000008C +:10641000000000000000000000000000000000007C +:10642000410000010000000000000000000000002A +:10643000000000000000000000000000000000005C +:10644000000000000000000000000000000000004C +:10645000000000000000200000000000000000001C +:10646000000000000000900000000000000001009B +:10647000018000800180000000400000000000005A +:10648000000000000000000000000000000000000C +:1064900000000000000000000000000010000000EC :1064A00000000000000000000000000000000000EC :1064B00000000000000000000000000000000000DC -:1064C000000000000000004000000000000000008C -:1064D00000040000000040208800C000050000000B -:1064E000A120851184A00000000000000000000031 -:1064F00000080000800000000000000040020010C2 -:10650000008480880002200200000000000011A129 -:106510000000000000040000000000000000000077 +:1064C00000000000000000000000000000000000CC +:1064D0000000000000000000000000840000000038 +:1064E000000000A00000000000000000000000000C +:1064F000100040100004040400002100000000000F +:10650000000000000000000000000000000000008B +:10651000000000000000000000000000000000007B :10652000000000000000000000000000000000006B -:10653000000010000000000000000000000000004B -:1065400000048200000000210000000000000000A4 -:1065500000000000000000000000400000000400F7 -:106560000000C0000400A000820090058209842180 -:10657000000040210021900000410021C021A00026 -:106580000021000000000000000200410041001056 -:1065900000000000000000000000002100000008D2 +:10653000000000000000000000000000000000005B +:10654000000000000000000000000000000000004B +:10655000000000000000000000004000400090002B +:106560000000000000210100000000000000000009 +:106570000000008010800080010000000021000960 +:10658000000000000000000000000000000000000B +:1065900000000000000000000000000000000000FB :1065A00000000000000000000000000000000000EB :1065B00000000000000000000000000000000000DB :1065C00000000000000000000000000000000000CB -:1065D000200000000000000000000000000000009B -:1065E000800000000000800000000000000011009A -:1065F000000000008000000000000000000000001B -:106600002100110000000000000000000000000058 -:106610000001000000000000000000000000000079 -:10662000000000000000000000000000000000006A -:106630000000000000000000000000000220908820 -:106640000020820200000000000000004090004096 -:1066500000400840000000000000000000A082028E -:106660000082002000A090048202901000212020CF -:1066700010880082000000000000A001000000005F -:10668000000000000000C08910080001901000A068 -:1066900088000002820000000000000000000000EE -:1066A00000000000000000000000000000000000EA -:1066B000000000000000000800000020000880002A -:1066C00080000000808000000000000000008000CA -:1066D000000000000000000000000000000000803A -:1066E000008000800000008083808080808003081C -:1066F000A120808300850000000808100020000908 -:1067000000000000000000008010808500050020CF -:1067100000800000008080000000000000000000F9 -:106720000000000000000000000000000000000069 -:106730000000000000000000030021000500109090 -:1067400080008088000800000000000000000000B9 -:10675000000000880084000000000000000000002D -:106760000000004000800000030000118200800053 -:1067700000000000000000400000C0050000C0054F -:1067800000850800830008008200110008200080B6 -:1067900091000000000480000000000000000000E4 +:1065D00000000000000000000000000000000000BB +:1065E000000000000000000040000000000000006B +:1065F00000000000410880080004040000000002C0 +:106600004002400000000000000000000000000008 +:10661000000000000000000000A0000000000000DA +:106620000000000000000000000000000000050065 +:106630000500000000000000000000000000000055 +:10664000000000000000000000000000000000004A +:10665000000000000000000000000000000000003A +:106660000000000000000001A00000010000000088 +:1066700000000000000210C0A10901C0880800004D +:10668000000000000000000000000000000000000A +:1066900000000000000000000000000000000000FA +:1066A0000000000000000000010090000000000059 +:1066B00000000000000000000000000000000000DA +:1066C00000000000000000000000000000000000CA +:1066D00000000000000000000000000000000000BA +:1066E000000000000000000305080008000800008A +:1066F0000000000000000000008389100310000863 +:106700000000000000000000000000000000000089 +:106710000000000000000000000000000000000079 +:106720000000000000000000000041000000000028 +:106730000000000000000000000000000000000059 +:106740000000000000000000000000000000000049 +:106750000000000000000000000000000000000039 +:106760000000000000000000100008000800418840 +:10677000000000000000000000000800890991806E +:10678000C110000000000000000000000000000038 +:1067900000000000000000000000000000000000F9 :1067A00000000000000000000000000000000000E9 -:1067B0000000000000000000000000900100010047 -:1067C0000011080040044003000000000000000029 -:1067D00000000000000400A1000000000000000014 -:1067E0000000000000080010001004000208A008CB -:1067F0000810002000000000000000000820A00099 -:106800008400049040000200080009002000A1015B -:106810008282909040000000A088000000000000EC +:1067B00000000000000000000000000000000000D9 +:1067C00000000000000000000000000000000000C9 +:1067D00000000000000000000000000000000000B9 +:1067E00000000000000000000000010201000000A5 +:1067F00001A10000000000000000000089088901DC +:1068000091909101000000000000000000000000D5 +:106810000000000000000000000000000000000078 :106820000000000000000000000000000000000068 :106830000000000000000000000000000000000058 -:1068400000000000020000000088000800000000B6 -:10685000000000004090000800C000200000000080 -:10686000000000001000000008008200C0000009C5 -:1068700002039004020001000100880000000000F3 -:1068800004000101000100000000C00000000840F9 -:106890000182904111020004002010880082000053 +:106840000000000000000000000000000000000048 +:106850000000000000000000000000000000000038 +:106860000000000000000000000000000001000027 +:10687000010000000000000000000000000020886F +:10688000A109200989890000000000000000000023 +:1068900000000000000000000000000000000000F8 :1068A00000000000000000000000000000000000E8 -:1068B00000000000000000000000000000000000D8 -:1068C00008000000000080000000000000800000C0 +:1068B00000000000000100000000000000000000D7 +:1068C00000000000000000000000000000000000C8 :1068D00000000000000000000000000000000000B8 -:1068E00000000000000080000000000000008002A6 -:1068F000008580210589800308052005000200002D -:106900000010A0092121401000000000000000003C -:106910008080114085A111800000000000000080EF +:1068E0000000000000000000000000000000002088 +:1068F000104010050005000000000000000000002E +:10690000000088A1110511C1000000000000000076 +:106910000000000000000000000000000000000077 :106920000000000000000000000000000000000067 -:106930000000000000000000000000000000000057 -:1069400000800803080003008000000000008000B1 -:1069500000000000000000000000000000008000B7 -:106960000000000000000000000000108000808097 -:106970000003808280800002A100A0009100090035 -:106980000000100820802180020000A0008000800C -:106990000020A1A021A180800010000000040000C0 +:10693000002000030008001000000000000000001C +:106940000000000000000000000000000000000047 +:106950000000000000000000000000000000000037 +:106960000000000000000000000000000000000027 +:106970002189210021001002000000000000000019 +:10698000000088A108C1C18088110000000000003B +:1069900000000000000000000000000000000000F7 :1069A00000000000000000000000000000000000E7 :1069B00000000000000000000000000000000000D7 -:1069C000000000A0010001000100020040209040F2 -:1069D000A00000000000000000004000880000004F -:1069E00010000000000000000000C000A0019000A6 -:1069F0001010C00082210890C000090004000400AB -:106A000002000000000001080140000000410020D9 -:106A1000000400019109838308A0080020000400FD -:106A200088000000000000000000000000000000DE +:1069C00000000000000000000000000000000000C7 +:1069D00000000000000000000000000000000000B7 +:1069E00000000000000000000000000000000000A7 +:1069F000000001C1000001000000000000000000D4 +:106A0000000000008821C1A108849101000000005D +:106A10000000000000000000000000000000000076 +:106A20000000000000000000000000000000000066 :106A30000000000000000000000000000000000056 :106A40000000000000000000000000000000000046 -:106A5000070000000000000000000000000000002F -:106A6000070000000000000000000000008200009D -:106A700007000000000000000700500000000000B8 -:106A8000000000000000008202E00700000000009B -:106A9000000000000000418200E0070081000021AA -:106AA00000000700000000000000000000000000DF -:106AB00000000000000000000000000000000000D6 -:106AC0000000000000000000000000000000F0F0E6 -:106AD0000000FF9900FF0000000000000000FF0020 -:106AE0003C3CBFBF0000000000000000000009990E -:106AF0000FFF0000000000CBCBCB00000000F00037 -:106B00003000000000000000000000000000000055 -:106B10000000000000000000432C002C0F3C09186E -:106B200060000000003000000000000000000000D5 +:106A50000000000000000000000000000000000036 +:106A60000000000000000000000000000000000026 +:106A7000000000000000000000008800000000008E +:106A80000000000000008421006006008200000079 +:106A900000000000000000000000000000000000F6 +:106AA00000000000000000000000000000000000E6 +:106AB0000000000000000000000000004100000095 +:106AC00000000000000000000000000000000000C6 +:106AD00000000000000000000000000000000000B6 +:106AE00000000000000000000000000000000000A6 +:106AF0000000000000000000000000000000000096 +:106B00000000000000000000000000002424BDBDC3 +:106B10000000000000000000000000000000000075 +:106B20000000000000000000000000000000000065 :106B30000000000000000000000000000000000055 :106B40000000000000000000000000000000000045 -:106B50003CBD3CBDFF99FFFF0000000000000000AD -:106B600099999999BFB0BFB00000000000000000E3 -:106B700003C30FFF0000000000EFEFEFFFF0000085 -:106B8000F0003000000000000000000000000000E5 -:106B9000000000000000000000006F6F0000303CAB -:106BA00010180000000000000000000000000000BD +:106B50000000000000000000000000000000000035 +:106B60000000000000000000000000000000000025 +:106B70000000000000000000000000000000000015 +:106B800000000000000000000000000000016000A4 +:106B9000F999000000000000000000000000000063 +:106BA00000000000000000000000000000000000E5 :106BB00000000000000000000000000000000000D5 :106BC00000000000000000000000000000000000C5 :106BD00000000000000000000000000000000000B5 @@ -153321,493 +153321,493 @@ :106C20000000000000000000000000000000000064 :106C30000000000000000000000000000000000054 :106C40000000000000000000000000000000000044 -:106C5000000000000000000000C300C300000000AE -:106C60000000000003000C00000000000000000015 -:106C70000000000000C080C0000000006000E000D4 -:106C80003C003C0083830383000000000000000000 -:106C9000000000E7E0E000000000F9F9090800004A -:106CA000004204006462F0F00000C300C300000072 +:106C50000000000000000000000000000000000034 +:106C60000000000000000000000000000000000024 +:106C70000000000000000000000000000000000014 +:106C800000000000000000000000000000003800CC +:106C900018180004666200000000000000000000F8 +:106CA00000000000000000000000000000000000E4 :106CB00000000000000000000000000000000000D4 :106CC00000000000000000000000000000000000C4 -:106CD0000000000000000000030C00D300D30000FF -:106CE00000000000000003000000000000000000A1 -:106CF00000000000000000C0C0C0000000006000F4 -:106D0000F0003C043C249F9F0F9F00000000000007 -:106D10000000000000E7000700000000FDFD0D0C72 -:106D2000000000000C00FCF3F0F00000C300C30002 +:106CD00000000000000000000000000000000000B4 +:106CE00000000000000000000000000000000000A4 +:106CF0000000000000000000000000000000000094 +:106D00000000000000000000000000000000000083 +:106D100038BD181800006666000000000000000082 +:106D20000000000000000000000000000000000063 :106D30000000000000000000000000000000000053 :106D40000000000000000000000000000000000043 -:106D500000610006000D000000000E0000000000B1 -:106D6000000000000000000000000E000000000015 -:106D7000000000000000000000000A38050000A02C -:106D800000614A0E050D00A080614006000D000064 -:106D9000000000650036000F200000610006000DB5 -:106DA000000000610034C009000000000030000055 +:106D50000000000000000000000000000000000033 +:106D60000000000000000000000000000000000023 +:106D70000000000000000000000000000000000013 +:106D800000610006000D000000000000000000008F +:106D900000008060503FC0000000000000000000C4 +:106DA00000000000000000000000000000000000E3 :106DB00000000000000000000000000000000000D3 -:106DC00000000000000000000000000000000000C3 -:106DD00000000400040000000000000000000000AB +:106DC000000000610006000D00000000000000004F +:106DD00000000000000000000000000000000000B3 :106DE00000000000000000000000000000000000A3 :106DF0000000000000000000000000000000000093 -:106E0000000000000000CF450F0580AA00005FFFD2 -:106E10000FFF0000C0C5C0C50F000F5500000000E7 -:106E200000000000000000FF0F000F000000000045 +:106E000000004141EBEB000000000000000000002A +:106E1000000000003C00FCF00000F000000000005A +:106E20000000000000000000000000000000000062 :106E30000000000000000000000000000000000052 -:106E40000000000000000000000000000000000042 +:106E400000000000000000003F00AA550000000004 :106E50000000000000000000000000000000000032 :106E60000000000000000000000000000000000022 :106E70000000000000000000000000000000000012 -:106E80000000000000000000FF55FF55AAAA000006 -:106E900043C303C30000C7C7CFCF0FCF0FFF00000E -:106EA000000000000000000000FF0F000F000000C5 +:106E80000000000050FA50FA04000000000000006A +:106E90000000000000003C003C20F0F000F000008A +:106EA00000000000000000000000000000000000E2 :106EB00000000000000000000000000000000000D2 -:106EC00000000000000000000000000000000000C2 -:106ED00000000000000000001010C00000000000D2 +:106EC00000000000000000000000003FAA55000084 +:106ED00000000000000000000000000000000000B2 :106EE00000000000000000000000000000000000A2 :106EF0000000000000000000000000000000000092 -:106F000000000000000000000000283C283C0003B6 -:106F1000000B0000000000005050D7FF003C003C78 -:106F20000000000070305010F0AAE0AA00004040BD +:106F0000000000000000F0F0F070CF55F0510000DC +:106F10000000000000000000FC5FDC5F9C9C20DFA4 +:106F20000000000000000000000000000000000061 :106F30000000000000000000000000000000000051 :106F40000000000000000000000000000000000041 -:106F50000000000000000000000010100000000011 +:106F50000000000000000000000000000000000031 :106F60000000000000000000000000000000000021 :106F70000000000000000000000000000000000011 -:106F8000000000000000000000000000283C283C39 -:106F9000000F000F000000000000C3C3C3C3003C8B -:106FA000003C000000007F7F5F5FFFAAE0AA0000B6 +:106F80000000000000000000FFFFFF7FCF55FC5D08 +:106F900000000000000000000000FC5FFC5F00003B +:106FA00000000000000000000000000000000000E1 :106FB00000000000000000000000000000000000D1 :106FC00000000000000000000000000000000000C1 -:106FD0000000000000000000000020002000200051 -:106FE0000008200088002000880000000000200029 -:106FF00020002000000020002011400000002000A0 -:107000000000840040002008200000408200200092 -:1070100020002000000020040004000220000400E2 -:107020002000000420000400200084000000000074 -:107030002000010420000000200088002000000043 -:1070400020000000200020002000200000000000A0 -:107050002000000020000000200820004000000068 -:10706000000200004002400240000000000000005A -:1070700000000000009000900000009021000090AF -:10708000009000004002200000000040009040906E -:1070900000020000000000C040900002000040001C -:1070A00000000002000040002000400000004000FE -:1070B000000200002005000000004002000840001F -:1070C0000000400400000400000040000002000036 -:1070D000000000000002000200004000000000006C -:1070E0000000000000000000000800000000000098 -:1070F0000000080008000000000000000000000080 -:107100000000000000100000000000000800000067 -:107110000000080000000100000000000000000066 -:107120000000840000008400000000000400000053 -:107130000000030004000000000000009010001098 -:10714000000000000000000002000000020000003B -:10715000000000000000900000008200820000009B -:10716000000000000008000000080000000400000B -:10717000000002000000000000000000000000000D -:10718000000800880008000800080008000000004F -:1071900000000900000002000800020002000200D6 -:1071A00000000008020000080008000400040008B5 -:1071B0000000000040000400040000000000000087 -:1071C00000000008000000080008000000000004A3 -:1071D00000000000000000000000000000000008A7 -:1071E0000008000000000000000000000000000097 -:1071F00004100000000000000000880000000000F3 -:10720000000000000000000084000000400000209A -:1072100040000000004000001000000000000000DE -:10722000000000000000000000210000000000003D -:1072300000030000000041002021000000000000C9 -:1072400000000000000000000040000000000008F6 -:10725000000000000000000000000000000000002E -:107260000000000005040008050400000000000004 -:1072700000040000080000000000030000000000FF -:1072800000000000000000000000050000000000F9 -:107290000500000003000300038402000300030054 -:1072A00000A00000000000000000000000000988AD -:1072B0000000000009000000C00080A000000000E5 -:1072C000000000080008000000000040000000006E -:1072D00000000000000000000000000000000000AE -:1072E0000000000000000200000000000800000094 -:1072F000000000000000000000000000004000004E -:10730000000000000000020002210200000008004E -:10731000A0000000000500000000000000000000C8 -:107320000000400000000000000400000000000019 -:107330000000000000000800000000000000002025 -:10734000000000000000000000000000000000003D -:1073500000200000000000000000000000000040CD -:1073600000000000000000000000000000000020FD -:10737000000000000000000003000000000000000A -:1073800000000800000000000800000000000000ED -:1073900000000000004000000000000000000000AD -:1073A00000000000000000000000000000000000DD -:1073B00000000000000000000000040008200000A1 -:1073C0000000040021000000000000000000000098 -:1073D00000000000000000000000000000000000AD -:1073E000000000000000000000000000000000009D +:106FD00000000000000000000000000000000000B1 +:106FE0000000000000002000200000000000200839 +:106FF0000000000000000000000000000000000091 +:107000000000000000002000200000000000200020 +:107010000000000000000000000000000000100060 +:1070200040000000000002002000080000000000F6 +:1070300020000000000200000000880000000000A6 +:107040000000000000000000200000000000000020 +:1070500020000000000000000000200000000000F0 +:10706000210000000000000021900000000000004E +:107070000000009000000000000000000000000080 +:1070800000000000000040000000000000000000C0 +:1070900000000000000000000000000000000000F0 +:1070A00080008000000000008000400080000000A0 +:1070B00000000000000000000000000000000000D0 +:1070C00000000000000000000000000000000000C0 +:1070D00000000000000000000000000000000000B0 +:1070E00000000000000000000000000000000000A0 +:1070F0000000000000000000000000000000000090 +:10710000000000000000000000000000000000007F +:10711000000000000000000010000000000000005F +:10712000000040004000000000800000100000004F +:10713000000000000000000000000000000000004F +:1071400000000000000400000000C000000000007B +:1071500000000000040004000180010000000300A2 +:1071600000000008000000000008000800080000FF +:107170000000000000000000000000080000000007 +:107180000000008400000000000800080008000063 +:1071900000000000000800000000000800000000DF +:1071A000000000008000800000000040000800088F +:1071B0000000000000080008000000000008400077 +:1071C00000000000000000000000000000080008AF +:1071D000000000000008800880082010200800003F +:1071E000A0000000000000000000000000000000FF +:1071F000000000000000000000000000000000008F +:10720000000000000000000000000000000000007E +:107210000000400000080000000000000000000026 +:10722000000000000000C00000020000000000009C +:10723000000000000000000000000000000000004E +:107240000002000000000000000000080000000034 +:10725000000000000000000001000000000000002D +:10726000000001000000000000000000000000001D +:10727000000000000000000000000000000000000E +:1072800000000000000000000000000000000000FE +:10729000000000008020000000000000400000828C +:1072A0004000000200000000000000010004000097 +:1072B000009000000000000000000000000000003E +:1072C00000000000000000000000000000000500B9 +:1072D000000000000000000011004000000000005D +:1072E000000000002000000000000000000000007E +:1072F000000000000000000000000000000000008E +:10730000000000000000000000000000000000007D +:10731000000000000000000000000000000000006D +:1073200000000000000000000080000000100000CD +:1073300000000000080008800000000000000000BD +:107340000000000082000000000000000000880033 +:107350000000080004000400C080000000800080DD +:10736000008000800000008000000000000000009D +:10737000000000000000000000000000000000000D +:1073800000000000000000000000000000000010ED +:1073900000000000000000000000000000000000ED +:1073A000000040000000000000000002000000019A +:1073B000000000000000800000400000000000000D +:1073C000000000000000000041000000000000007C +:1073D00000000000000083008000000800000002A0 +:1073E0000020000400100002001000000000000057 :1073F000000000000000000000000000000000008D :10740000000000000000000000000000000000007C -:10741000000000000000000000000000000000006C -:1074200000000080000000000800000000000000D4 -:10743000000000000000000000004000000000A06C -:107440000004000000000000000000000000000038 -:10745000000000000000000000000000000000002C -:10746000000000000000000000000000000000001C -:1074700040204088000000000204000200000000DC -:10748000000000900000000000A0050000000000C7 -:107490000000000000000500008400000000000063 -:1074A00021000000001000C000C00000000000002B -:1074B000000041A00000000000000000800000006B -:1074C000000204A1080000000000000800080000FD -:1074D00000000000000000000000000000000000AC -:1074E0000000000000000000000000000000000894 +:107410000000000000000000000000000400000068 +:107420000000C00000004000001100000008400003 +:1074300000089080000400000000000090000000A0 +:107440000000002100000000000000000000080013 +:107450000000000084000400402008009000850027 +:10746000A0209080000008008200C0000000000002 +:10747000000000000000000000000000000000000C +:1074800000000000000000000000000000000000FC +:107490000000000000000000000000000002118851 +:1074A0000002118800C000200000000000000589D3 +:1074B000800420891102000000000000000000008C +:1074C00000000000000000000000000000000000BC +:1074D000000000000000000080000001000000002B +:1074E00008002101004000008000000000000000B2 :1074F000000000000000000000000000000000008C :10750000000000000000000000000000000000007B -:1075100008000000000000000000840000000000DF -:107520000000002100100000000000210000000009 -:10753000000000000000000000009000400000007B -:1075400000002000000000000004002100080008E6 -:10755000000000000000000000000000000000002B -:10756000000000000000000000000000000000001B -:1075700000000010000000000000000000000000FB -:1075800000000000000000000000000011000020CA -:1075900000000000000400000000000000000000E7 -:1075A00000000000000000000000000000000000DB -:1075B00000000000000000000000000000000000CB -:1075C00000000000000000000000000000000000BB -:1075D000000040000800000004000000000000005F -:1075E000000000000000000020000000000000007B +:10751000000000000000000000000000000000006B +:10752000000000000000000000000000000000005B +:107530000000018000800000000200000021000027 +:10754000000500000000000000080000000000002E +:1075500000000000000000000000000083000000A8 +:10756000C1908505C1C085200000C1900000820047 +:10757000000000000000000000000000000000000B +:1075800000000000000000000000000000000000FB +:1075900000000000000000000000000000000000EB +:1075A00000000000110000000000000000000000CA +:1075B0000000000040100002410000000000119097 +:1075C00009000000000000000008000000000000AA +:1075D0000000000008000800000041840000028450 +:1075E00008000803408404414001000008054100F0 :1075F000000000000000000000000000000000008B :10760000000000000000000000000000000000007A :10761000000000000000000000000000000000006A -:10762000000000000000000000000000000000005A -:10763000000000000000000000000000000000004A -:1076400082000000000101000000000000000000B6 -:10765000000000000000000000000000000000002A -:10766000000000000000000000000000000000001A -:10767000000000000000000000000000000000000A +:107620000000000100000001000100000000000057 +:1076300000000002901101091090889008A00088B5 +:1076400000A0200800000000000000000000000072 +:1076500000000000000000000000000010A000205A +:1076600000209010C1C10921C0889090A0C0049052 +:1076700083A00820000000000000000000000000BF :1076800000000000000000000000000000000000FA :1076900000000000000000000000000000000000EA -:1076A00000000000000000000000000000000000DA -:1076B00000000000000000000000000000000000CA -:1076C000410000000000001021050005002000001E -:1076D00000000000000000000000000000000000AA -:1076E000000000000000000000000000000000009A -:1076F000000000000000000000000000000000008A +:1076A00000000000000800080020000800000000A2 +:1076B00000000000000000C10921890000030080D3 +:1076C000000000800000000000000000000000003A +:1076D00000000000000000000000000000008080AA +:1076E000000000008000A190888880838040808016 +:1076F0008040108380200000000000000000000097 :107700000000000000000000000000000000000079 :107710000000000000000000000000000000000069 :107720000000000000000000000000000000000059 -:107730000000000000000000000000000000000049 -:1077400000000000004000000900210003000900C3 +:10773000000000000000000020001000880041410F +:107740008000802080008000000000000000000019 :107750000000000000000000000000000000000029 -:107760000000000000000000000000000000000019 -:107770000000000000000000000000000000000009 +:107760000000800300008080410009030509C1C1B9 +:1077700005000303400003030000000000000000B8 :1077800000000000000000000000000000000000F9 :1077900000000000000000000000000000000000E9 :1077A00000000000000000000000000000000000D9 -:1077B00000000000000000000000000000000000C9 -:1077C00000000000000000000000000001000000B8 +:1077B0000000000000000000000088040900110023 +:1077C000A10108001001A082C0000000000000001C :1077D00000000000000000000000000000000000A9 -:1077E0000000000000000000000000000000000099 -:1077F0000000000000000000000000000000000089 +:1077E00000002000820140000890209090010001DC +:1077F0009191900200012040004100000000000033 :107800000000000000000000000000000000000078 :107810000000000000000000000000000000000068 :107820000000000000000000000000000000000058 -:107830000000000000000000000000000000000048 -:107840000000000000010001000100000001010033 -:107850000200010000000000000000000000000025 -:107860000000000000000000000000000000000018 -:107870000000000000000000000000000000000008 +:10783000000000000000000000000000902101880E +:10784000A091A0A108200002009020C0000000002C +:107850000000000000000000000000000000000028 +:10786000000000002090000800400210884189902C +:1078700005910201401101A18305908800000000DC :1078800000000000000000000000000000000000F8 :1078900000000000000000000000000000000000E8 -:1078A00000000000000000000000000000000000D8 -:1078B00000000000000000000000000000000000C8 -:1078C000000000000000000800200020001100213E -:1078D0000321200911090000000000000000000041 -:1078E0000000000000000000000000000000000098 -:1078F0000000000000000000000000000000000088 +:1078A00000000000000000000000000000002100B7 +:1078B00002000000000000000000000000000008BE +:1078C0001041800800C1000000800000008000001E +:1078D00000000000000000000000000000000000A8 +:1078E0000000000000000000008000008080009088 +:1078F0002103A1A1800980A0101002A103A0000013 :107900000000000000000000000000000000000077 :107910000000000000000000000000000000000067 -:107920000000000000000000000000000000000057 +:107920000000000000000000000000000000001146 :107930000000000000000000000000000000000047 -:107940000000000000000000000000000000000037 -:10795000088909000000000000000000000000008D -:107960000000000000000000000000000000000017 -:107970000000000000000000000000000000000007 +:107940000480400040004003001000000080000060 +:107950000000000000000000000000000000000027 +:107960000000000000000000802000108080000067 +:10797000A1000321A19009058080919085008511C7 :1079800000000000000000000000000000000000F7 :1079900000000000000000000000000000000000E7 :1079A00000000000000000000000000000000000D7 -:1079B0000000000000000000A0000400040082009D -:1079C00000000000000000000000000000000000B7 -:1079D000000001C0000000000000000000000000E6 -:1079E0000000000000000000000000000000000097 -:1079F0000000000000000000000000000000000087 -:107A00000000000000000000000000000000000076 +:1079B00000000000000000000000000000000000C7 +:1079C000000001080190019001002000A090C0403B +:1079D000880000000000000000000000000000001F +:1079E00000000000000000000000C00040219040A6 +:1079F0008800C00000219103910104C091A10300FF +:107A000090010000000000000000000000000000E5 :107A10000000000000000000000000000000000066 :107A20000000000000000000000000000000000056 :107A30000000000000000000000000000000000046 -:107A40000000000000000000000000000000000036 -:107A500000000000840000E0000042000000000080 +:107A400000000000600000600000000A000000006C +:107A50000000000000000000000000000000000026 :107A60000000000000000000000000000000000016 -:107A70000000000000000000000000000000000006 -:107A800000000000000000000000000000000000F6 +:107A70000600000000060000060082810000006091 +:107A80000600880000000000000000000000000068 :107A900000000000000000000000000000000000E6 :107AA00000000000000000000000000000000000D6 -:107AB0000000000000000000000000000000303C5A -:107AC00000000000000000000000000000000000B6 -:107AD00000000000000000000000000000000000A6 -:107AE0000000000000000000000000000000000096 -:107AF0000000000000000000000000000000000086 -:107B00000000000000000000000000000000000075 +:107AB00000000000000000000000000000000000C6 +:107AC00000000000000000000000CFEFDFFFC3C394 +:107AD000000080000C0C000000000000000000000E +:107AE000000000000000000000000000000033CC97 +:107AF000300350507C7C30300000802F802F0000FD +:107B0000002020E3D4FC0000000000000000000082 :107B10000000000000000000000000000000000065 :107B20000000000000000000000000000000000055 :107B30000000000000000000000000000000000045 -:107B4000303C0000000000000000000000000000C9 -:107B50000000000000000000000000000000000025 +:107B400000000000000000000000000022002200F1 +:107B5000C1C30000000100000000000000000000A0 :107B60000000000000000000000000000000000015 -:107B70000000000000000000000000000000000005 -:107B800000000000000000000000000000000000F5 +:107B7000C3CC0003A050BC7C00000303208F208FE7 +:107B8000000000002020D7FF0000000000000000DF :107B900000000000000000000000000000000000E5 :107BA00000000000000000000000000000000000D5 :107BB00000000000000000000000000000000000C5 -:107BC00000000000000000000000000000000000B5 -:107BD00000000000000000000000000000000000A5 +:107BC00000000000000000000000D0D0D050FFAA4C +:107BD000550040604060AA000F3C0000000000001B :107BE0000000000000000000000000000000000095 -:107BF0000000000000000000000000000000000085 -:107C00000000000000000000000000000000000074 +:107BF000000030AA3055AAAA000000000404F0F0EA +:107C00000303C300030055145514000000000000D6 :107C10000000000000000000000000000000000064 :107C20000000000000000000000000000000000054 :107C30000000000000000000000000000000000044 -:107C40000000000000000000000000000000000034 -:107C50000000000000000000000000000000000024 +:107C4000000000000000000000000000DFDFDF5F38 +:107C5000FFAADF8A00004040AA00F0C30000000035 :107C60000000000000000000000000000000000014 -:107C70000000000000000000000000000000000004 -:107C800000000000000000000000000000000000F4 +:107C70000000000030A030500FB00FB082000000B4 +:107C8000F0F00202C3C3171755145514000000008A :107C900000000000000000000000000000000000E4 :107CA00000000000000000000000000000000000D4 -:107CB00000000000000000000000000000000000C4 -:107CC00000000000000000000000000000000000B4 -:107CD00000000000000000610006000D00000061CF -:107CE0000006C001000000000000000000000000CD -:107CF0000000000000000000000000000000000084 -:107D00000000000000000000000000000000000073 +:107CB000000000000000000000000000006100065D +:107CC000000D000000000000000000000000006146 +:107CD0000007C00C000000004000009000050000FC +:107CE0000000000000000000000000000000000094 +:107CF000000000000000A000000800000000A061DB +:107D00005036000D0000006120090009000000004D :107D10000000000000000000000000000000000063 :107D20000000000000000000000000000000000053 :107D30000000000000000000000000000000000043 :107D40000000000000000000000000000000000033 -:107D5000000000000000000000000000FF5FAA0A11 -:107D6000FF00000003C3C3C30000000000000000C8 +:107D500000000000000000400000000000000000E3 +:107D60000000000000000000000000000000000013 :107D70000000000000000000000000000000000003 -:107D800000000000000000000000000000000000F3 +:107D8000FBFB55FFFFFFF3F33E3D3E3DF5001414B2 :107D900000000000000000000000000000000000E3 :107DA00000000000000000000000000000000000D3 :107DB00000000000000000000000000000000000C3 :107DC00000000000000000000000000000000000B3 -:107DD0000000000000000000000000000000FF554F -:107DE0008200FF000000C3C3C3C300000000000006 +:107DD000000000800000FF000040000000000000E4 +:107DE0000000000000000000000000000000000093 :107DF0000000000000000000000000000000000083 -:107E00000000000000000000000000000000000072 -:107E10000000000000000000000000000000000062 +:107E00000000FBFBFFFF7DFF7DFF0A050A05F50073 +:107E1000141400000000000000000000000000003A :107E20000000000000000000000000000000000052 :107E30000000000000000000000000000000000042 -:107E40000000000000000000000000000000000032 -:107E50000000000000000000000000000000000022 -:107E600000000000A0ACAEAEFF00FF00000000006C +:107E4000000000FF01FF0000000000000000000033 +:107E5000000000004100EBFFFFFF3C0000000000BD +:107E60000000000000000000000000000000000012 :107E70000000000000000000000000000000000002 -:107E800000000000000000000000000000000000F2 -:107E900000000000000000000000000000000000E2 +:107E800000000000CF3CFF052000F0000041004151 +:107E9000955555590000000000000000000000004A :107EA00000000000000000000000000000000000D2 :107EB00000000000000000000000000000000000C2 -:107EC00000000000000000000000000000000000B2 -:107ED00000000000000000000000000000000000A2 -:107EE000000000000000A0ACAFAFFF00CF0000001A +:107EC0000000000000FF00FF0000000000000000B4 +:107ED0000000000000004100EBFFFFDF3C0000005D +:107EE0000000000000000000000000000000000092 :107EF0000000000000000000000000000000000082 -:107F00000000000000000000000000000000000071 -:107F10000000000000000100088000002080000038 -:107F200000002000200000000000000020000000F1 -:107F30000004200000000000000000002000840277 -:107F40000000200020000000000800000041C000E8 -:107F500000002000000000030000040000002000DA -:107F600000000000200020000000000000000000D1 -:107F700000000000200000000000000000002000C1 -:107F80000000000020002000000000000000008031 -:107F900000000000200000100840801000020010C7 -:107FA0004002000240024002004000000000008247 -:107FB00000020402409000020400000000000000E3 -:107FC00040000000400040004090004000C0000021 -:107FD000000000020000000000000000000000009F -:107FE000000000400000000000004000000000020F -:107FF0000000000000000000000040000040000001 -:10800000000400000040004000400000004000006C -:108010000020000021040004000000000000000017 -:10802000000400000000000000000000000000004C -:108030000000000020000200020000000400000018 -:10804000040400000000080082000000000000009E -:10805000000000000000020002000000000000001C -:1080600000000400040000090000020000000000FD -:108070000000000000000400020000008400400036 -:108080002000C100000002000000080020002000C5 -:10809000200020000000000002100010000800086E -:1080A0000084000000080008000800080008000024 -:1080B0000008000800008008000800080008800888 -:1080C00000008010000800080008000800020004FA -:1080D0000010000800000008000800080000000868 -:1080E0000008000000000008110800080408000053 -:1080F0000004000000080000000800080208000852 -:10810000C10880084000000800080008000880003E -:1081100080088000800800000084000802088400B5 -:1081200000214000880000008400000000000040A2 -:10813000000800400000000082108200840000005F -:1081400088008800000040008400040090000000C7 -:10815000A0008400000000000000000000000000FB -:10816000A0008200000000000800000040000000A5 -:1081700000000000000000000800000000000000F7 -:1081800000000000000040000000000000000000AF -:1081900000000000000008000000000000000000D7 +:107F0000000000000000CF00AA052000F0000CCF08 +:107F10000CCF9555555500000000000040000000B2 +:107F20000000000000000000000000000000000051 +:107F300000000000200040000000000000000000E1 +:107F40000000000000000000000000000000000031 +:107F5000C000000020000001C00004000000A000DC +:107F60000000000000000000880040000000400009 +:107F700000000005000020000000000000000000DC +:107F800010000000000000000000000000002000C1 +:107F90000000000000002000000000000000800041 +:107FA00000000090009000004000009000000000E1 +:107FB0000000000000400040414000000000004080 +:107FC00000020000000000000000000000000000AF +:107FD0000000000000000000000000008000000021 +:107FE000000000000002000000000000000000008F +:107FF0000000000000000000090000000000000078 +:1080000000008000000000000000000000000000F0 +:108010000000000000000000000000000000000060 +:1080200000800000000000000800000000000000C8 +:10803000000000000000000004000000000000003C +:10804000000000000000400040100000020000108E +:10805000080200000000A00009000000000000006D +:10806000000000004000400010110808000000005F +:1080700000000000000000000000080000000800F0 +:10808000000004000000A0004000080208000404F2 +:10809000202004000000000000080800000000008C +:1080A00000000002000000000000200000000000AE +:1080B00000080008000000000008C0880000400020 +:1080C0000000000000000000800880000000800028 +:1080D00000848009000000000084080000004000C7 +:1080E0000000000000008000800880040000000004 +:1080F0000000000000080008000800000008000060 +:108100008000000080000000000880088011808846 +:1081100080018001800800080008000000080000BD +:10812000000000000000000000000000000000004F +:10813000000000000000000000000000000000003F +:108140000000000000000000000800000000000027 +:108150000000880000000008000800000000000087 +:108160002004A0200004408000000000000800005F +:1081700000000000000000000000000000000000FF +:108180000000000000800000000001110000000855 +:108190000000000001802004000000210005000014 :1081A00000000000000000000000000000000000CF -:1081B0000000000000000540000000000000050075 -:1081C000000008000900000000000000000000009E -:1081D000000000004000000000000000000000005F -:1081E000000000000000000000000000000040004F -:1081F000210000000000000000000000000000005E -:1082000000000000000000008000000000000000EE -:1082100000000000000000008000000000000000DE -:1082200000000000000000000000080084000400BE -:1082300084000008A0080000840082000000000004 -:10824000000000000010000000000000000000001E -:1082500000100000A0100000080000000000000056 -:1082600000000000000000000000100000000041BD -:1082700000000000000000000000000040000000BE -:1082800000000000000000000000000000000000EE -:1082900000000000000000000009000000000000D5 -:1082A0000000000041000084000000080000000001 -:1082B00000000000000000000000000009000000B5 -:1082C0000000000041004100000003000000000029 -:1082D000000000000000000000000010000000008E -:1082E0000000000000000000000000080000000086 -:1082F000000000000000000000000000000000007E +:1081B00000000000000000000000000000000000BF +:1081C00000000000000000000000000000000000AF +:1081D0000000000000000000090200000082000012 +:1081E0000000410021010000410200000090000059 +:1081F0000000000800000000000000000000000077 +:1082000000000300080041100000410004002100AC +:108210000500000000000420C10100000000000073 +:10822000000000000000000004000000000000004A +:10823000000000000000000000000000000000003E +:108240000010C0000000000000000000000000005E +:10825000000082100000000000000000000000008C +:1082600000000000080000A000000020000000083E +:108270000000A08084000000C0000000000000009A +:10828000000000000800000082000000A000400084 +:1082900000000000002100000000000000000000BD +:1082A0000000000000000000000080000000080046 +:1082B000000000000000000000000000000000A01E +:1082C00000000000000000000000000000000000AE +:1082D000000000000001000000000000000000009D +:1082E0000000000000000300002100000001000069 +:1082F00000000000002000900000000000000000CE :10830000000000000000000000000000000000006D -:10831000000000000000000000000000000000005D -:10832000000000000000000000000000000000004D -:10833000000000000000000000000000000000003D -:108340008200820000000020000000000000000009 -:10835000000000110000000000000000000000000C -:10836000000000000000000000000000000000000D -:1083700000000000000000000000000000000000FD -:1083800000000000000000000000080000000000E5 -:1083900000000000000000000000000000000000DD -:1083A00000050000000000000004000000000000C4 +:1083100080000000000000000800000000000000D5 +:108320000000000000000000080000000003000042 +:108330000000000800000000000000000000000035 +:108340000800000000000000000000000000000025 +:108350000000000000000000002100020011880061 +:108360008400080000000000C00404A00008C191BF +:1083700000050400000040000000000000000000B4 +:108380000000080000008200C000080090050800FE +:10839000C08001048821C0000102208001A001A04A +:1083A00000000000000000200000000000000000AD :1083B00000000000000000000000000000000000BD -:1083C00000000000000004000000000000000000A9 -:1083D000000000000000000000000000000000009D -:1083E000000000000000000000000000000000008D -:1083F000000000000004400005000000000800002C -:108400000300000000000000000000000000000069 -:10841000000000000000000000000000000000005C -:10842000000000000000000000000021000000111A -:108430000000000008210000000000000000000013 -:108440000000000000000400000000000000000028 -:108450000000000484000000000000000000000094 -:108460000000840000000000000000000000000088 -:10847000000082000000000000000000000000007A -:10848000000000004000400000000000000000006C -:1084900000000000000000000000000000000000DC -:1084A0000000000000210000000500001000000096 -:1084B0004100000202400000000000000000000037 +:1083C00000000000000000000000000000000000AD +:1083D000000000000000000000A000A000A000902D +:1083E00000C000008000000000002104A12004055E +:1083F0000420009021000090800000000000000098 +:10840000000000000000000000000000000000006C +:108410000000000840000000050040018020040525 +:1084200020050300030021002100000000000000DF +:1084300040000000000000000000000000000000FC +:1084400082000000000000000000000000000000AA +:1084500000000000000000000000002100210021B9 +:1084600000008400840000000008000020090400CF +:1084700000000420000000000002002000110000A5 +:108480000000000500000000000082218200900032 +:10849000C000A000C0000000000200000021002079 +:1084A00020200404000900098800000000000000EA +:1084B00000008000410000000000210000000000DA :1084C00000000000000000000000000000000000AC -:1084D000000000000000004020000200000000003A +:1084D0000000080000000000000000000000000094 :1084E000000000000000000000000000000000008C -:1084F000000000000000000000000000000000007C +:1084F0008000000080010000000000010001000079 :10850000000000000000000000000000000000006B -:10851000000000000000000000000000000000005B -:10852000000000000000000000000000000000A0AB -:10853000000000C00000000000000000000000007B -:10854000000000000000000100000000000002A088 -:108550000090009090C000000000000000000000AB -:10856000000000000000000000000000000000000B -:1085700000000000000000000000000000000000FB +:108510000000000000000000000000010000080052 +:108520000001800180010000000000000000000048 +:10853000000000000000000000000000000000003B +:10854000000000000000000000000000000000002B +:108550000000000000000000000088000000000093 +:1085600001000800000020C00010001000080003F7 +:1085700002A19182101190090101000090010000F8 :1085800000000000000000000000000000000000EB -:108590000000A100A000000000000000000000009A -:1085A00001000000000000000000000000000000CA -:1085B000008000000000000000000000000000003B -:1085C0000000000000000000000200200040004009 -:1085D000808000000000000000000000000000009B -:1085E000000000000000000000000000000000008B -:1085F000000000000000000000000000000000007B -:10860000000000000000000000000000000000006A -:1086100000000000820000000000000000000000D8 -:108620000000100000001100000000000000000029 -:108630000000000000088080000000000000000032 -:108640000000000000000000000000800000001199 -:10865000000800000004808000000000000000000E -:10866000000000000000000000000000000000000A -:1086700000000000000000000000000000000000FA -:1086800000000000000000000000000000000000EA -:108690000000000020002000050320A100000000D1 -:1086A00000000000800800008009000000000000B9 -:1086B0000000000020002001A0A0900000000000A9 -:1086C000000000000000000000000000004000006A -:1086D0000000000100002001A004000000000000D4 -:1086E000000000000000000000000000000000008A -:1086F000000000000000000000000000000000007A -:108700000000000000000000000000000000000069 -:1087100000000000000001000000010100A10000B5 -:1087200000000000000008011000400000000000F0 -:1087300000000000000000080088000000000000A9 +:10859000021040A0000282100040A108090400C09F +:1085A00010100090008204C10000000000000000D4 +:1085B00000000000000000000000000000000000BB +:1085C00000000000000000000000000000000000AB +:1085D0000000000000000000000002000000000099 +:1085E0000000030000000000008000800080008088 +:1085F000000091C191050088809110410521001073 +:108600000003000000000000000000000000000067 +:1086100000008080800000800080038591A103031A +:1086200000038088008300030008000000000000B1 +:1086300000000000000000000080000000000000BA +:10864000000000000000000000000000000000002A +:108650000080000000000000000009000200090086 +:1086600011008000000000008000800000008000F9 +:1086700080000000030089088980838005002000B5 +:10868000200000800000000000000000000000004A +:108690000000000000008000802180808500A0890B +:1086A0004140C10805004111401184000000000054 +:1086B00000000000000000000000000400000000B6 +:1086C00000000000000000000000000000000000AA +:1086D0000000000400000000000000000000000096 +:1086E000000000001000A0000088C0100800080072 +:1086F000A0001000000020002101A08483900090C1 +:10870000010001000008000000000000000000005F +:10871000000000000000A00082000201C090109044 +:10872000919002C1090104A0A00105019000000080 +:108730000000000000000000000000000000000039 :108740000000000000000000000000000000000029 -:1087500001000100000008100082000410880000E1 -:108760000000000000000000000000000000000009 -:1087700000000000000000000000000000000000F9 -:1087800000000000000000000000000000000000E9 -:108790000000000000000000000100009000000147 -:1087A00000000000000000000000100000000000B9 -:1087B00000000000000000000000000000000000B9 +:108750000000000000000000000000000000000019 +:108760000000000000000000000000000000901069 +:1087700000000000030000004002000802A0020503 +:1087800000010000090100000000000000000000DE +:1087900000000000000000002040880200400202AB +:1087A000C0000100A0001001080501822082A1A1E3 +:1087B00000000000000000000000000500000000B4 :1087C00000000000000000000000000000000000A9 -:1087D0000000200005002000800000000000800054 -:1087E0000000000000000000000000000000000089 -:1087F0000000000000000000000000000000000079 -:108800000000000000000000000000000000000068 -:108810000000000000000000000000020005002031 -:108820000020000000000000000000000000000028 -:1088300010000000000000000000000000A0008008 +:1087D0000000000000000000000000000000000099 +:1087E000000900090009001100020002000200094E +:1087F0000000000000008900000000C14105880859 +:10880000804100100303212100050000000000004A +:108810000000000000000000000080008080008058 +:108820000080804108058505802080A110894003D3 +:1088300040040000000000000000000000000000F4 :108840000000000000000000000000000000000028 -:108850000000210010001000030000038000000051 -:108860000000000000000000000000000000000008 -:1088700000000000000000000000000000000000F8 -:1088800000000000000000000000000000000000E8 -:108890000000000000000000000000000580100043 -:1088A0002000034000000000000000000000000263 -:1088B00000000000000000000000000000000802AE -:1088C0008882880000000000000000000000000016 -:1088D0000000000001000100010000004000200035 -:1088E0004088400000000000000000000000000080 -:1088F0000000000000000000000000000000000078 -:108900000000000000000000000000000000000067 -:108910000000000000000000000000000000004017 -:108920000100000000000000000000000000000046 -:1089300000900000000000000000000000000000A7 -:108940000000000000000000000000000000000027 -:10895000000000000000000000E000000000000037 -:108960000000070000000000000000000000000000 +:108850000000000000000000000000000000000018 +:108860000000008000000000000800000000000080 +:1088700000000000008000800000000080210080D7 +:1088800080000040210000000000034000000000C4 +:10889000000000000000000000000000002000C1F7 +:1088A000000000002189109183804005A1A1A02132 +:1088B0004000034000000000000000000000000035 +:1088C00000000000000000000000000000000000A8 +:1088D0000000000000000000000000000000000098 +:1088E0000000000000100000000000010200909055 +:1088F00002029000000000A00084000000000209B5 +:108900008820A0C0080101900000000000010000C4 +:108910000000000000000000000000000000000156 +:108920000089000000000510A1200808000011A126 +:108930009100898200000000000000000000008219 +:108940000000060000000000000000000000000021 +:10895000000000000000008200000700000000008E +:108960000000000000000000000000000000000007 :1089700000000000000000000000000000000000F7 -:1089800000000000000000000000000000000000E7 +:1089800000000000060000000021000006000000BA :1089900000000000000000000000000000000000D7 -:1089A000820000E000000000000000000000000065 -:1089B000410000E00700000000000000000000008F -:1089C00020002000303030300000000000000000A7 +:1089A0000082000006008200000600600600500001 +:1089B00084210060060000000000000000000000AC +:1089C00000000000000000000000000000000000A7 :1089D0000000000000000000000000000000000097 -:1089E0003C3C303CBD0DBD0D00000000000000000F -:1089F0000000000000000000000000000000000077 -:108A00000000000000000000000000000000000066 +:1089E0000000000000000000000000000000000087 +:1089F000000200000000000000000000424242426D +:108A00000000F69090900F070F0700000000000094 :108A10000000000000000000000000000000000056 -:108A20000000000000000000000000000000000046 -:108A30000000000000000000000000000000000036 -:108A40000000000000003030303000000000000066 +:108A2000000000000000F1F00000FFFF0000000067 +:108A30000000F00F0000999F669600000000000003 +:108A40000000000000000000000000000000000026 :108A50000000000000000000000000000000000016 -:108A600000003C3C343CFF0F99090000000000006E -:108A700000000000000000000000000000000000F6 -:108A800000000000000000000000000000000000E6 +:108A60000000000000000000000000000000000006 +:108A70000000000200000000000000000000424270 +:108A800042420000F690B4B4FFFF00000000000076 :108A900000000000000000000000000000000000D6 -:108AA00000000000000000000000000000000000C6 -:108AB00000000000000000000000000000000000B6 +:108AA0000000000000000000F0F0000006000600DA +:108AB000000000000000F00F8100420000000000F4 :108AC00000000000000000000000000000000000A6 :108AD0000000000000000000000000000000000096 :108AE0000000000000000000000000000000000086 @@ -153816,478 +153816,478 @@ :108B10000000000000000000000000000000000055 :108B20000000000000000000000000000000000045 :108B30000000000000000000000000000000000035 -:108B400000000000000000000F0F000000100000F7 +:108B40000000000000000000000000000000000025 :108B50000000000000000000000000000000000015 -:108B600000000000000099991010FFFFFFFF0000B7 -:108B700000000000000000000000000000000000F5 -:108B800000000000000000000000000000000000E5 +:108B60000000000000000000000000000000000005 +:108B7000000000000000000000001818A5A589668C +:108B800089677666F6F60000FCFDFEFFF3F3C3FF8F :108B900000000000000000000000000000000000D5 -:108BA00000000000000000000000000000000000C5 -:108BB0000000000000000000000000004F7F4F7F19 -:108BC000000000000000000000000F0F0000000087 +:108BA0000000000000000000202020F05A002B00F0 +:108BB000FFFF6FFF1008200406F930CF00C0003F10 +:108BC00000000000000000000000000000000000A5 :108BD0000000000000000000000000000000000095 -:108BE00000000000000000009999101800F000F04B -:108BF0000000000000000000000000000000000075 -:108C00000000000000000000000000000000000064 -:108C10000000000000000000000000000000000054 -:108C20000000000000000000000000000000000044 -:108C300000000000000000000000000000004F7F66 -:108C40004F7F000000000000000000000000000056 -:108C50000000000000000000000000000000000014 -:108C6000000000610004000D000000000000000092 -:108C700000000000000000000000000000000000F4 -:108C800000000000000000000000000000000000E4 -:108C900000000000000000000000000000000000D4 -:108CA000000000000000000000000000006100065D -:108CB000C005000000000000000000000061000F7F -:108CC000800D000000000000000000000000000017 -:108CD0000000000000000000000000000000000094 -:108CE00000000000FFFFFFFF000000000000000088 -:108CF0000000000000000000000000000000000074 -:108D00000000000000000000000000000000000063 -:108D10000000000000000000000000000000000053 +:108BE0000000000000000000000000000000000085 +:108BF0000000000000000000000000004242303091 +:108C000010FF10FF466606060000FFFFFFFFDBDBDC +:108C1000C3FF000000000000000000000000000092 +:108C200000000000000000000000202020205A006A +:108C30002B000F0B0F0B8001400200000000000C06 +:108C400000F3000000000000000000610026000D9D +:108C500000A0000000000000000000000000000074 +:108C6000000000000020000000A000000000000044 +:108C7000000000610006000D000000610006000D0C +:108C80000005000050000000000000000061000628 +:108C9000000D000000610026000D00A00000000093 +:108CA000000000000000000000000000000000388C +:108CB0000000000800600E3F000D00000061003C55 +:108CC000C0010000000000000000000000000000E3 +:108CD0000F0F0F0F00000000000000000000000058 +:108CE0000000000000000000000000000000000084 +:108CF00000000000000000000000008C00000000E8 +:108D00000080008C00000000000000000000000057 +:108D10000000FFBE0FC3C3C3414182C20000000078 :108D20000000000000000000000000000000000043 -:108D30000000C3FFF3FF000000000000000000007F -:108D40000000000000000000000000000000000023 -:108D50000000000000000000000000000000000013 -:108D6000000000000000000400C700000000000038 -:108D700000000000000000000000000000000000F3 +:108D300000000000000028083C3CAA00BA000E0217 +:108D40003C3CC0C0FCC0000000000000000000006F +:108D500000000F0F0F0F00000000000000000000D7 +:108D60000000000000000000000000000000000003 +:108D70000000000000000000000000000080000073 :108D800000000000000000000000000000000000E3 -:108D900000000000000000000000000000000000D3 +:108D9000000000000F3CFFF3C3C341410808949456 :108DA00000000000000000000000000000000000C3 -:108DB00030000000C3FFE3FF0000000000000000DF -:108DC00000000000000000000000000000000000A3 +:108DB000000000000000000000003C3C000030000B +:108DC0000E023C3CC0C0FCC00000000000000000DF :108DD0000000000000000000000000000000000093 -:108DE00000000000000000003C003C3C00000000CF -:108DF0000000000000000000000000000000000073 +:108DE0000000000000000000000000000000000083 +:108DF00000000000000000000000000000300082C1 :108E00000000000000000000000000000000000062 -:108E10000000000000000000000000000000000052 +:108E10000000C286C387F0F0F0F096964D0C00007B :108E20000000000000000000000000000000000042 -:108E3000000000000000D70F0F0F0000000000002E -:108E40000000000000000000000000000000000022 +:108E30000000000000000000000000BF00FC0D5515 +:108E400000C3FCFCFDFD00C3008200000000000028 :108E50000000000000000000000000000000000012 -:108E600000000000000000000000AF00AFAF0000F5 +:108E60000000000000000000000000000000000002 :108E700000000000000000000000000000000000F2 :108E800000000000000000000000000000000000E2 -:108E900000000000000000000000000000000000D2 -:108EA00000000000000000000000000000000000C2 -:108EB00000000000000000000F0F0F0F0000000076 -:108EC00000000000000000000000000000000000A2 -:108ED000000000004002400200001080000020005E -:108EE00000880080880088000000000000800004E6 -:108EF00000042080410001800080008088008800FC -:108F0000000084002000200000000000008000001D -:108F10000000208000018200000800020200000022 -:108F200000000004000420002000000000100002E7 -:108F3000020800002000200000004000040482001D -:108F40000000000000002000200000080000008059 -:108F5000A0000008208080008000000000100002B7 -:108F60000002001000104002000200020002400255 -:108F700040000002001004000220002020400000F9 -:108F800000004000000040000000009000C04002CF -:108F9000000040000002000020000000000200006D -:108FA00000000000400000024000000040000001FE -:108FB0000000000040000000000000000000000071 -:108FC000000000004000000000000000000000025F -:108FD000000200400000000201400800000001A063 -:108FE0000000080000100000000000000000000069 -:108FF00000000000000000000440044004C004C061 -:109000000000030404000000000000000000000055 -:10901000000000000000000000000041040000000B -:1090200004400400020400100010000000000000D2 -:10903000000002000000000000000000040000002A -:109040000004000000000000000000000000080014 -:109050000805020000000000000008008008000869 -:109060004002000880080005008400840084008419 -:1090700000000000000809080008800180C180414C -:109080008021008404088084008800000000000023 -:10909000000000000908410800080000000000402E -:1090A0000084000800000008000800000000000024 -:1090B0000004000000080004000400080000090883 -:1090C0000404000800C000080008000000000000C0 -:1090D000000000000008008800880008008041802F -:1090E000900240800010000000099008000000007D -:1090F000000000000000040040000005020200051E -:10910000020504000040A04000004002000590005D -:109110008805000000080040004108000000000031 -:109120000000000800000000000000000000000037 -:10913000000000210000000000000000000000000E -:109140000000000800000000000000000000000017 -:1091500000000000000000000000000000000010FF -:1091600088020000880200010000000011000000D9 -:1091700008000000080000000800800000208000B7 -:109180000400800080000082000003001101110033 -:10919000000000000000000000000000800000004F -:1091A00000000000000004000000000000000000BB -:1091B00000000000000000000000030003000300A6 -:1091C000000000000000000000000000000000009F -:1091D0000000000000000000001000A0000000A03F -:1091E0000800092000000000400082008200820088 -:1091F000000000000000020482008200820082055C -:10920000C000002000000005000008000009000068 -:109210000000000000000000000000000000000549 -:1092200000000000000000000000004004000400F6 -:109230000400000004000000000000000000000026 -:109240000000000000000000000000050000000019 -:10925000000000000010004000400000000000007E -:10926000100500000800000000000000009003004E -:1092700000000000000000000010000000000000DE -:109280004100000000080000000000000000000095 -:1092900000000000000000A000000000000000002E -:1092A0000000000002400000020002000000000078 -:1092B000000000000000000000000000000000406E -:1092C000000002000000000010000800050000007F -:1092D0000500000000000000000000000000000089 -:1092E0000000000000100000018300081000004092 -:1092F00000000000080000009000C000000008000E -:1093000000000000C011000000080000000000087C -:10931000010000000000000000000040000000000C -:109320000000000000000000000000000020080015 -:10933000080000000800000000000000000000001D -:10934000000000000000000000000000000000001D -:10935000000000000000000000000000000000000D -:1093600000000000000000050088080200900000D6 -:1093700000010000000000000000000000000000EC -:109380000800030000A008880800210000840000F5 -:109390000000400000880000000000000000000005 -:1093A00000000000000000000000000000000000BD -:1093B00000000000000000000000000000000000AD -:1093C000000000000000000000000300000000009A -:1093D0000008000000000000000004000008040075 -:1093E0000000000000000000001100020002000266 -:1093F000000000000000000000000000000000006D -:109400000000000082000100400084000008820883 -:1094100000210021000800020000000000080000F8 -:1094200000030000004100000000000000000000F8 -:109430000008000000000000000000000000000024 -:109440000000000000000008000000000000000014 -:1094500004000000000000000000001000000000F8 -:1094600000000000000000000000000000010001FA -:1094700000210000000000001100000000000000BA -:109480000000000000000000408200000008000012 -:1094900000000000000000002001000000000000AB -:1094A000000000000000000000000000200000405C -:1094B00000000000000800000000000000000000A4 -:1094C0000000200000000200004000000800000032 -:1094D000000000002000000000002100000000004B -:1094E00000002000000008000000000009A0A0010A -:1094F000200100A100820040008800000000000060 -:109500000000000000000100200100000000000039 -:1095100000000000404082408440028200000000C1 -:109520000000000000000801080100000000000029 +:108E900000000000C3E7C3E741C37DFF96964D4D38 +:108EA00004000400000000000000000000000000BA +:108EB0000000000000000000000000003FFDFFFF78 +:108EC0000D0000C33C3C7D3DF0F0F0F000000000E0 +:108ED000000000000000000000000000880000000A +:108EE0000000C000000000000000A0000000C00062 +:108EF0002000000040004000000040002000000072 +:108F00004000200000000000880020000000200039 +:108F10002000400000014000200000001000200060 +:108F20000000000020000000400020002000400061 +:108F30000000000000002000000040004000000091 +:108F4000000000000000000000000004000000001D +:108F500000000000000000000000000000A0000071 +:108F6000000000000000000000000000000000C041 +:108F700041000000000000000000000000000000B0 +:108F800000000000000000000000000000000000E1 +:108F90000000400000000000000000000000000091 +:108FA00000000000200000000000000000000000A1 +:108FB00000000000000000000000000000000000B1 +:108FC00000000000000000000000000000000000A1 +:108FD0000000000000000000000000000000000091 +:108FE00000000000000000000080010001000000FF +:108FF0000000000000000000000000000000000071 +:109000000000000000000000002000000000000040 +:109010000000000000000000000000000000000050 +:109020000000000000000000000000000000000040 +:109030000000000000000000000000000000000030 +:109040000000000000000000000000000000000020 +:109050000000000000000000000000000004000804 +:1090600000080008000800080008000220884008E6 +:109070000908000800080008000800000082000835 +:10908000400800080008000800080001000000086F +:1090900000080008000800080008000000000000A8 +:1090A000000800080008000800080008008400000C +:1090B000001009080008000800080008000040002F +:1090C0000008000800080008000800080000000070 +:1090D0000008000800080008000800080000000060 +:1090E000A0000000000000009000880000000000C8 +:1090F00000000000900000000000000000210000BF +:1091000000000000000000400003000001044000D7 +:1091100000000000100000004000000000000004FB +:1091200004009020000090218400000584000000CD +:109130000000000000000021000000000000000806 +:1091400000000000000000400000040000000000DB +:10915000000000000000000000000000000000000F +:1091600000000000000000000000000000000000FF +:1091700000000000000011000000000000000000DE +:1091800000000000000000000000000000000400DB +:10919000100000000000410000000020000000005E +:1091A00000200000000000201100008800000000E6 +:1091B00000000000000000000000000000000000AF +:1091C0000000000000000800000000000400000093 +:1091D000000000000000000000000000210000006E +:1091E0000000000000000800080000000009000066 +:1091F000000000000000000000000000000000006F +:1092000000000000900900000000000000000000C5 +:1092100000200000000000000000004100000000ED +:1092200000000800000000040841000200000000E7 +:1092300000008200000000000000000008000000A4 +:10924000000000000000000000000000000000001E +:109250000000000000000000000000004000C0000E +:1092600000000000080021000000030000000000D2 +:1092700011000000000000000000000000000000DD +:1092800000000000000000000000000000000000DE +:109290000000000100000000000000A0000000002D +:1092A00000000000000000000000000000000000BE +:1092B00000000000000000000000100000A00000FE +:1092C0000800000003000000410005000800030042 +:1092D000100000001000000008000000080000005E +:1092E0000000000000000008000000000200000074 +:1092F000080000000000080000000000000000005E +:10930000000000000000000000000000000000005D +:10931000000000000000404082000000000000004B +:109320000000040400000000000000000000000035 +:10933000000000000000000000000000000000002D +:10934000000000000800000008000000000000000D +:1093500000200000000000000000000008000000E5 +:109360000000000000000000000000840000000079 +:1093700000000000000000000000000000000000ED +:10938000000000A0000000000000000000000090AD +:109390000000000000880000100000A00000000095 +:1093A00000000000840100000000000400040088A8 +:1093B000040005001100050000000000000000008E +:1093C000000000000000000000000000008200001B +:1093D00000000400002011200420000000000040D4 +:1093E000000000000000000000000000000000007D +:1093F0000800080000090000000000000000000054 +:10940000000000210000000000000000000000003B +:10941000000000000000000000000000000000004C +:10942000000000000000000000000000000000003C +:109430000000000000000000000000000000000824 +:10944000000000000000000000000000000000001C +:109450000000000000000000000000000000080004 +:1094600000000000000000000000000000000000FC +:109470000000000000000000000021000084000047 +:1094800000000300000000000000000000000000D9 +:1094900000000000000000000000000800000000C4 +:1094A00000000000000000000000000000000000BC +:1094B0000000000000C000000000000000A000004C +:1094C000000000000000000000000000000000009C +:1094D000000000004100000000200800000008001B +:1094E00000000088000000000000000000000000F4 +:1094F000000000000000000000000000000001016A +:109500000800000000000000000000000000000053 +:10951000000000000000000000000000000000004B +:10952000000000000000000000000000000100003A :10953000000000000000000000000000000000002B :10954000000000000000000000000000000000001B :10955000000000000000000000000000000000000B -:1095600000000000000000010000880000001091D1 -:1095700080080003009000000080008000000000D0 -:109580000000000000000002034100080009000084 -:109590000000000000008000050080008000000046 -:1095A0000000000000000041110800030009000055 +:1095600000000000000000000000000000000000FB +:1095700000000000000000000000000000000000EB +:1095800003020008002000000000000000000000AE +:1095900000000000000000000000000000000000CB +:1095A00000000000000000000000000000000000BB :1095B00000000000000000000000000000000000AB :1095C000000000000000000000000000000000009B :1095D000000000000000000000000000000000008B -:1095E0000000000000000000001011080010000939 -:1095F000208085218090A0000000000080210000D4 -:1096000000000000000000004100030002208380F1 -:10961000000000000000008082004182894021009B -:109620000000000000000000000000000008000032 +:1095E000000000000000000000000000000000007B +:1095F000000000000000000000000000000000006B +:109600000580090008002120000000000000000083 +:10961000000000000000000000000000000000004A +:10962000000000000000000000000000000000003A :10963000000000000000000000000000000000002A -:10964000000080000000000080000000000000001A +:10964000000000000000000000000000000000001A :10965000000000000000000000000000000000000A :1096600000000000000000000000000000000000FA -:10967000000090400200A0A1A10000000000A00195 -:1096800000000000000000000000080002001000C0 -:10969000080800000084000000C00500A0058288C2 -:1096A0000140000000000000000090000800880059 -:1096B00004000000000000000000000000000000A6 -:1096C0000000000002000000200002000000000076 +:1096700000000000000000000000000000000000EA +:10968000000000C0000001000120000000000000F8 +:1096900000000000000000000000000000000000CA +:1096A00000000000000000000000000000000000BA +:1096B00000020000000000000000000000000000A8 +:1096C000000000000000000000000000000000009A :1096D000000000000000000000000000000000008A :1096E000000000000000000000000000000000007A -:1096F0000000000000000101A0890000000000003F -:109700000088004000000000000000000000000091 -:10971000000000010210000010000000008200A004 -:1097200000204105000000000000000000000001D2 -:109730000000000000000000000000000000000029 +:1096F000000000000000000000000000000000006A +:109700000000000000000000000000000000000059 +:109710000000000000000000000000000000000049 +:109720000000000000000000000000000000000039 +:109730000000000000000000020000000000000027 :109740000000000000000000000000000000000019 :109750000000000000000000000000000000000009 :1097600000000000000000000000000000000000F9 -:10977000000001010001000002208821000000001B -:1097800000000000000000000000000000000002D7 -:1097900011030303001009000000800000000040D6 -:1097A00000C000400282000000000000000000082D -:1097B000100841200909000000000000000000001E +:1097700000000000000000000000000000000000E9 +:10978000000000000000000320052003004000004E +:1097900000000000000000000000000000000000C9 +:1097A00000000000000011000000000000000000A8 +:1097B00000000000410000000000800000000000E8 :1097C0000000000000000000000000000000000099 :1097D0000000000000000000000000000000000089 :1097E0000000000000000000000000000000000079 -:1097F0000020081008100003C103A1808380050029 -:109800000000000000000000000000000000000058 -:109810000000000000800009000080080000000037 -:109820000040008000808040000000000000000038 -:109830000040000000800000000000000000000068 -:109840000000000000000000000000000080008018 +:1097F0000000000000000000000000000000000069 +:10980000000000000000000002A121110800400338 +:109810000000000000000000000000000000000048 +:109820000000000000000000000200000000000036 +:109830000000000000000000000000000000000028 +:109840000000000000000000000000000000000018 :109850000000000000000000000000000000000008 :1098600000000000000000000000000000000000F8 -:109870000000000000080000000002900202020246 -:1098800000004000400000900000000000000000C8 -:109890000000000200200008000000000800000294 -:1098A000000082084020C084A000000000000000EA -:1098B000000000000008008400000000000000001C -:1098C0000000000000000000000000000000000296 -:1098D0000008000000000000000000000000000080 +:1098700000000000000000000000000000000000E8 +:109880000000000000000000000000A10001000036 +:1098900000000000000000000000000000000000C8 +:1098A00000000000000000000000000000000000B8 +:1098B00000000000000000000000000000000000A8 +:1098C0000000000000000000000000000000000098 +:1098D0000000000000000000000000000000000088 :1098E0000000000000000000000000000000000078 :1098F0000000000000000000000000000000000068 -:109900000000000000000000000000000000000057 -:109910000000000000000000000000000000000047 -:109920000700001200000000070000000000000017 -:109930000000000000000000000000000000000027 +:1099000000000000000000000000000000000060F7 +:1099100000008100000000000000000000000000C6 +:1099200000000000000000000000000000810000B6 +:1099300006000000608200600700000000000000D8 :109940000000000000000000000000000000000017 :109950000000000000000000000000000000000007 :1099600000000000000000000000000000000000F7 :1099700000000000000000000000000000000000E7 -:1099800000A055005500000000FFFF00000000008F -:10999000000000000000000000000000000000FFC8 -:1099A00000003C3C00003C3C00AAF0F0F0F000005D +:1099800000000000000000000000000000000000D7 +:1099900000000000000000000000000000000000C7 +:1099A00000000000000000000000000000000000B7 :1099B00000000000000000000000000000000000A7 :1099C0000000000000000000000000000000000097 :1099D0000000000000000000000000000000000087 :1099E0000000000000000000000000000000000077 :1099F0000000000000000000000000000000000067 -:109A00000000000055005500000000FFFF000000AE +:109A00000000000000000000000000000000000056 :109A10000000000000000000000000000000000046 -:109A200000FF00003C3C0000FCFC00AAC3EB002847 +:109A20000000000000000000000000000000000036 :109A30000000000000000000000000000000000026 :109A40000000000000000000000000000000000016 :109A50000000000000000000000000000000000006 :109A600000000000000000000000000000000000F6 :109A700000000000000000000000000000000000E6 -:109A800000003C3C00000000000000000F0000004F -:109A90000000000000000000000000000000FFFFC8 -:109AA00004000000FFFF0000FFFF06008383F000BA -:109AB000F000000000000000000000000000FFFFB8 -:109AC000080000000000000000000000000000008E -:109AD0000000000000000000008200000000000004 +:109A800000000000000000000000000000000000D6 +:109A900000000000000000000000000000000000C6 +:109AA00000000000000000000000000000000000B6 +:109AB00000000000000000000000000000000000A6 +:109AC0000000000000000000000000000000000096 +:109AD0000000000000000000000000000000000086 :109AE0000000000000000000000000000000000076 :109AF0000000000000000000000000000000000066 -:109B0000000000003C3C00002000000000000F00AE -:109B1000FF00FF0000000000000000000000000047 -:109B20000400040000000000000000000600838321 -:109B3000F200F20000000000000000000000000041 -:109B40000800080000000000000000000000000005 +:109B00000000000000000000000000000000000055 +:109B10000000000000000000000000000000000045 +:109B20000000000000000000000000000000000035 +:109B30000000000000000000000000000000000025 +:109B40000000000000000000000000000000000015 :109B50000000000000000000000000000000000005 :109B600000000000000000000000000000000000F5 :109B700000000000000000000000000000000000E5 -:109B800000000000000000610006000D00008000E1 -:109B90000000000000010000000000000000006163 -:109BA0000006000D000015002A08054000A800610D -:109BB0000E06000D00000000000000000000006123 -:109BC0000006000D00000000000000000000000082 +:109B800000000000000000000000000000000000D5 +:109B900000000000000000610004000D0000000053 +:109BA00000000000000000000000000000000000B5 +:109BB000000000000000050000200000000000611F +:109BC0000026800D00A00000000000000000000042 :109BD0000000000000000000000000000000000085 :109BE0000000000000000000000000000000000075 :109BF0000000000000000000000000000000000065 -:109C000000610006000D00001000000000050005C6 -:109C10000000000000000000000000000000000044 -:109C2000000000000010FFFF000000000000000026 -:109C30000000000000D30020000000000000000031 -:109C4000000000000010FFFF000000000000000006 +:109C00000000000000000000000000000000000054 +:109C100000000000000000000F5F5F5FAA00AA00C4 +:109C20000000000000000000000000000000000034 +:109C30000000000000000000000000000000000024 +:109C40000000000000000000000000000000000014 :109C50000000000000000000000000000000000004 :109C600000000000000000000000000000000000F4 :109C700000000000000000000000000000000000E4 -:109C80000000000000003C3C3CBC1000000000054F -:109C900000050000000000000000000000000000BF -:109CA0000000000000000010001000000000000094 +:109C800000000000000000000000000000000000D4 +:109C9000000000000000000000000F4F5F5F202068 +:109CA00000000000000000000000000000000000B4 :109CB00000000000000000000000000000000000A4 -:109CC0000000000000000010001000000000000074 +:109CC0000000000000000000000000000000000094 :109CD0000000000000000000000000000000000084 :109CE0000000000000000000000000000000000074 :109CF0000000000000000000000000000000000064 -:109D00000000000000000000000000A002000000B1 -:109D10000000000000000000000000000000000043 -:109D2000000000005D0C0C0C00AA30BA000000001E -:109D30000000000000000000BAAA000000000000BF -:109D40000000000014141F140000000000000000B8 +:109D00000000000000000000000000000000000053 +:109D1000000000000000000000000000000400043B +:109D2000FF00FF0000000000000000000000000035 +:109D30000000000000000000000000000000000023 +:109D40000000000000000000000000000000000013 :109D50000000000000000000000000000000000003 :109D600000000000000000000000000000000000F3 :109D700000000000000000000000000000000000E3 -:109D80000000000000003D053C0000000000000055 -:109D900000000303000000000000000000000000BD -:109DA0000000000000000C0C0C0C00AA00AA00002F -:109DB00000000000000000000000BEAE0000000037 -:109DC0000000000000001414141400000000000043 +:109D800000000000000000000000000000000000D3 +:109D900000000000000000000000000000000000C3 +:109DA0000000AFAF0303000000000000000000004F +:109DB00000000000000000000000000000000000A3 +:109DC0000000000000000000000000000000000093 :109DD0000000000000000000000000000000000083 :109DE0000000000000000000000000000000000073 :109DF0000000000000000000000000000000000063 -:109E000000000000000000003C003C0000000000DA -:109E1000000000000000000000000000880020009A -:109E200000000000200000100000000001802180E0 -:109E3000000200000003000488000004200000006D -:109E40008800000000000005000000000000200065 -:109E50000003C0000002880000002000880000000D -:109E600084002000000088000000880004000180B9 -:109E70002180200000050000840020002000000058 -:109E8000000000000000000000040000000001804D -:109E900021800002400000000000000000A04000FF -:109EA0000004000000000040000040900040040456 -:109EB000082040000000100200A0009000020002F4 -:109EC000009000C0000000022100000040000000DF -:109ED0000000000040000002004000000000000000 -:109EE00000000000400000004000000000000000F2 -:109EF000202004104000000010400000000000007E -:109F0000000000000000000000020000000000004F -:109F100020200820000000000000000000000000D9 -:109F20000200020000000004000000000000020027 -:109F300010004008000000000000000000000000C9 -:109F400000000000000000050000020000000040CA -:109F500010001104000000000000000000000000DC -:109F600000000000000000000000000000000000F1 -:109F700000000208020000000000000000000000D5 -:109F80000000001002100000000082000400000029 -:109F900000001000010000000000000000000000B0 -:109FA000000000000000000000000084000000002D -:109FB000000080008001000000C0000000000000E0 -:109FC0000000000000000000000000000000000091 -:109FD00000008000C0010000000000080000000038 -:109FE0000000000000000000000000000000000071 -:109FF0000000000000010400000000080000000054 -:10A00000000000000000000000000400000000004C -:10A010000000000080002000002182210821002192 -:10A020000021002100020021002100210002002166 -:10A030000005002100051021002100210009000277 -:10A0400004210003000000040004400990210000E6 -:10A0500000200000000000210000000000050005B5 -:10A0600000050000000008030021000000000000BF -:10A0700000000000000000000005000000000000DB -:10A0800000000000000000000000000000080000C8 -:10A0900000000000880000000000008200080000AE -:10A0A0000020000000000084000000000000030009 -:10A0B000000000000900000000000000000802008D -:10A0C00000000088000000000000040000000800FC -:10A0D000000000000000000000000000000000027E -:10A0E0000000000000000000080000000000000068 -:10A0F0000000000000000000000000000800000058 -:10A100000800000000000000000000002000000027 -:10A1100000000000000000000000000088000000B7 -:10A120008400000000000000000000008200000029 -:10A13000A0000000841100000000008082000000E8 -:10A1400082000000000000000000080482000000FF -:10A15000820000000000C0000000004000008400F9 -:10A1600010008200C0004000000040000000A0007D -:10A170008200C0008200000000000000888482008D -:10A1800082008200820000000000A0008200000027 -:10A1900082008209820000000000A000820200000C -:10A1A000000000000000000040000000000000006F -:10A1B0000082000000000000000000000004000019 -:10A1C00000000000400000000000000000A00000AF -:10A1D0000000000000000000001000A003000000CC -:10A1E000000000000000000000000000210000004E -:10A1F0000800000000000000000000000000000354 -:10A200000000000000000000000000000000082026 -:10A210000800000000000000000000000000001125 -:10A2200000000041000000000000000000000041AC -:10A23000000000400000000000210041000000215B +:109E00000000000000000000000000000000000052 +:109E10008800000000008800200000030008000007 +:109E20002000900000008800C000880088008800A2 +:109E300088008800000020002000000000000400CE +:109E40002000200000002000200020002000200032 +:109E500000032000200000002000200088000000F7 +:109E600088008800000040004000C0000000400260 +:109E7000840000000000000000002000000000003E +:109E8000A0000000000000000000000000008400AE +:109E90000000400000000000000000000000000280 +:109EA000410041822100009000A04000000000001D +:109EB00000000000000000000000000000000000A2 +:109EC0000000090000020000000000000000000087 +:109ED0000000000000001000000010000000000062 +:109EE000000000000002000000000000000000046C +:109EF0000000000000000000000000000000000062 +:109F00000000000005000900000000000000000043 +:109F1000000200000000000000000000000000003F +:109F200000000040000000000000000000000000F1 +:109F300000000210000000000000001000000000FF +:109F400000000040000000000000000000000000D1 +:109F50000000204000000000004000000000000061 +:109F600000000000000000000000000300000000EE +:109F70000000000020100000001000100000000091 +:109F80000000000000400000000000000000000091 +:109F900000000000104000080008000800080082CF +:109FA00000080090000000840008008400080008F9 +:109FB0000008000800080008000800080008000069 +:109FC0000008000400000000040800000008000869 +:109FD00000080008800800000008000800080008C9 +:109FE0000000000800080000000000080000000851 +:109FF000000800080008C008000800080008000861 +:10A000000000000800100084000000840000000828 +:10A01000000800080008800800210000000400007B +:10A0200000000009C004900000020000C000000011 +:10A0300000000000000000000020000000050000FB +:10A0400000000000000000000000000040000000D0 +:10A050000000900000000000000000008821902116 +:10A06000900090050005000084000000000300211E +:10A0700000000005000000000000000300210002B5 +:10A080000000004000039000000090000008000065 +:10A0900000000000000000000010000000000000B0 +:10A0A0004000000008000800080000002100000037 +:10A0B00000000000000000000000000000000000A0 +:10A0C0000000000000400000000000000000000050 +:10A0D0000000000000000000000000000000090077 +:10A0E000000011000000000000000000000000005F +:10A0F0000000000000000000000008000000000058 +:10A10000000000000000000000000000000000004F +:10A11000000000000000000000000000820082003B +:10A120000000A000A00082008200C000C0008200E9 +:10A130000000000000000000000000040800000013 +:10A1400000100000000000000000000000040000FB +:10A15000000000000000840000001010000010004B +:10A1600000000000000000000004000008000400DF +:10A1700000000000080008000800080082008200BB +:10A1800008000000C00000008200000000009000F5 +:10A190000000000008001000000008000880000017 +:10A1A0000000000000000000400000000800000067 +:10A1B00000004100000003000000000000890000D2 +:10A1C000000000000000000000000000000000048B +:10A1D000000000000000000000000000000000007F +:10A1E00000000000000000040000009000000020BB +:10A1F0000084080000000000000000A000000040F3 +:10A20000000000000000000000000000000000004E +:10A21000000000000000000000000000000000043A +:10A2200008000000000040000000A0000000400006 +:10A23000000000000000000000000000000000001E :10A2400000000000000000000000000000000011FD -:10A250000005842190000000C020040000000000E0 -:10A260000000C000000800200000080000000000FE -:10A27000C002000000410000000082000000000059 -:10A280000000A00000000000C0000000000000006E -:10A290000000821000000000000008000000000024 -:10A2A000C00004000300082041200000000003005B -:10A2B0000520000000000020000000000000050054 -:10A2C000000204000004000000000020000000C0A4 -:10A2D0000002000011820000000000000000008267 -:10A2E000030000000000000000000000000000006B -:10A2F000000000000000000000000000000000005E +:10A2500000000000004000000000000000000005B9 +:10A2600000000000000000000000000000000000EE +:10A2700000000000000000020000A0030000000039 +:10A280000005080000000000000382000000000834 +:10A29000080808080000080010008400C000C00082 +:10A2A000C00000000000000000000000000011904D +:10A2B000000000900000000200000000000000000C +:10A2C000000000000000000000004004000000004A +:10A2D000000000000000000000000000000000106E +:10A2E00000000000009000000004000000000000DA +:10A2F000002000000000000000000000000000003E :10A30000000000000000000000000000000000004D -:10A3100000000000000000000000000000004000FD -:10A320000000098800000000000500000000000097 -:10A330009021000000000000000300100005000054 -:10A3400000000000000300008821000082000000DF -:10A350000000000000000005002100210041001065 -:10A360000000000000000003000088000000100052 -:10A3700082110002000500000000000900059000A5 -:10A380000400820000910000A000A000400208002C -:10A39000080000000000000000000800000090001D -:10A3A00008008200008000000000000000000000A3 -:10A3B000400000000000000000000002000000005B -:10A3C000000000000040000000000000000000004D +:10A3100000000088000000000000000000000000B5 +:10A3200000000000A000080000008200000084007F +:10A33000000000000000000000000000000000001D +:10A34000000000A00000000000000000000000006D +:10A3500000080000000000000000000000210021B3 +:10A3600000000000000000050000000000050021C2 +:10A37000000000000008082100210000000000216A +:10A380000021000000000005000040000805400812 +:10A3900008000000002100000000C00000000800CC +:10A3A0000000A000100000000000000000000000FD +:10A3B0000000000000000000000000900088000085 +:10A3C0000000000020080000000000000000000065 :10A3D000000000000000000000000000000000007D -:10A3E000000000000000000000000000000000006D +:10A3E000000000000000000000002000000020002D :10A3F000000000000000000000000000000000005D -:10A400000000000000000008000000000000000044 -:10A4100000000082000000000000000000000000BA -:10A420000000000000000008000000000000000123 -:10A4300000000200000100100001C0000004C08202 -:10A440000000C0000001000000002000000000012A -:10A4500000000000000000100001C1000040C082A8 -:10A460000000C0000001000000000000200000000B -:10A4700000010100C000000000820001C000004097 -:10A48000C0820000C00000010000000000000000C9 -:10A49000000100000000000000A00001C0000082D8 -:10A4A000C0820000C00000010000000000000000A9 -:10A4B00000080000000000031080000882000080F7 -:10A4C0008080000080000003000040008000000049 -:10A4D000000800000000001110800808880000003B -:10A4E0008080000080000003000000004000800029 -:10A4F00000000020020000000041118008088500D3 -:10A5000000008080000080000003000000000000C8 -:10A510000000002000000000000303000808850080 -:10A520000000808000008000000300000000400068 -:10A5300000000000000008000000090009001100F0 -:10A5400000000300000000000080800800002100DF -:10A5500000000000000009000000090010002100B8 -:10A560000000030080000000008080080000000060 -:10A5700021000000000000000400000009000500A8 -:10A580002180000803000000000000808008000017 -:10A590001000000000000000050000004000400026 -:10A5A00021800008030000000000008080200000DF -:10A5B0000100000000000000010000000000840015 -:10A5C0000284000001000200000000C082000000C0 +:10A40000000000000000000000000000000000004C +:10A410000000000000000000000400000000000038 +:10A42000000000004000000000010001000100C029 +:10A430000001820100C000830000000100020082D0 +:10A440000001400100C10000000000000000000009 +:10A4500000000000000000000000000000020000FA +:10A4600000000000000000000000000000000000EC +:10A4700000000000000000000000000000000002DA +:10A4800000000000000000000000000100010001C9 +:10A4900000C00001000100C001A100010001008214 +:10A4A00000400001400100C10000004100410041A6 +:10A4B00000850041004100C003C100104041008000 +:10A4C0000000004100410083000000000000000087 +:10A4D000000000000000000000000009090000006A +:10A4E000000000000000000000000000000000006C +:10A4F0000000000000000000000000000002020058 +:10A5000000000000000000000000000000410041C9 +:10A51000004100C00041004100C002410010404124 +:10A5200000000000004100410083000041000300E2 +:10A530000000008041009000000020000200900018 +:10A54000000089004100C10000808000000011006F +:10A550000000000000000000000000008800100063 +:10A560000000000080000000000000080003000060 +:10A570001000000000000000000000000000890042 +:10A580009000000000008000000000000008410072 +:10A590000300000000804100900000004000020025 +:10A5A0002000000083004100C10000808000010005 +:10A5B0000100000000C00100C100000000004100D7 +:10A5C00004080020C0004100C10000828200000099 :10A5D000000000000000000000000000000011006A -:10A5E0000884000001000800000000C08200000094 -:10A5F000000000000000000000000100000000005A -:10A6000040004040000001009000000000828200F5 -:10A610000000010000000000000000000000000039 -:10A6200082004040000001002000000000C08200C5 -:10A630000000000000000000000000000001880091 -:10A640000090000001000000000000000000000079 -:10A6500000000000C00000000000000000018800B1 -:10A6600000200000C1000000000000000000000009 -:10A67000000000000000C00000000000000000001A -:10A6800082000090000003000000000000000000B5 -:10A6900000000000000000000000000000000001B9 -:10A6A0008200009000000100000000000000000097 -:10A6B0000000000000000000000000000000000892 -:10A6C00000100000000041000000000000000041F8 -:10A6D00000000000000080000000000000000020DA -:10A6E000000200000000C100000000000000004166 -:10A6F00000000000000000008000000000000000DA -:10A700000009000200000000C1000000000000007D -:10A7100000410000000000000000000000000000F8 -:10A7200000200005000000004100000000000000C3 -:10A73000004100000040800000C100000000000057 -:10A740008200000000418000001000000041002055 -:10A75000000008030000800000C1000000000000AD -:10A760008900000000A080000041000000410000BE -:10A770000000110800000000800000C1000000007F -:10A7800000008200000000C1800000400000004185 -:10A790000000000008410010800000C1000000001F -:10A7A00000000500000000C1000000400000004162 -:10A7B0000000000010080001200000400000000020 -:10A7C0008800080000000091100000000000000157 -:10A7D0000001000000210000400000C10000000056 -:10A7E0002000040000000004100000000000000130 -:10A7F00000000000000900000000400000C100004F -:10A800000000880005000000004102000000000078 -:10A81000000100000000008900012000004000004D -:10A820000000200082000000000540000000000041 -:10A8300000010000000001200000000000000000F6 -:10A840000000000000000000811200E00700484204 -:10A85000000000000000484200000000000000115D -:10A860000000000000000000841200E007004842E1 -:10A87000000000000000484200000000000000004E -:10A8800000110000000000000000811200E007003D -:10A890004842000000000000488200000000000064 -:10A8A00000000000000000000000811200E007002E -:10A8B0004842000000000000484200000000000084 +:10A5E000889000C088000800000000000001000002 +:10A5F000000000000000000000000000000000005B +:10A600001000089000C08800080000000000000151 +:10A6100001000100000000C00100C10000000000B6 +:10A62000410082080020C0008300C1000082820037 +:10A6300000C00001C0C100000000000100C1C00551 +:10A640000021000100C10000000000010000000026 +:10A6500000000000000000000000000000000000FA +:10A6600000040000000000000000000000000000E6 +:10A6700000000000000000000000000000000000DA +:10A6800000000004000000000000000000000000C6 +:10A69000000000C00001C0C100000000000100C0B7 +:10A6A000C00500C1000100C1000000000001000061 +:10A6B00000000080004180C10000000000410083D4 +:10A6C00080900041004100C10000000000410041B5 +:10A6D000000000000000000000000000000000007A +:10A6E000000000000000000000000000000000006A +:10A6F000000000000000000000000000000000005A +:10A700000000000000000000000000000000000049 +:10A71000000000000080004180C1000000000041F6 +:10A72000008380C00041004100C1000000000041E2 +:10A7300000410000C100800080C100004100000510 +:10A7400002004100C14100008008000041400000BB +:10A75000800041000011800000C1000000000000E6 +:10A760000000000000C10000001000000000000018 +:10A770000000000000000010800000C10000000088 +:10A7800000000000000000C1800000080000000080 +:10A79000000000000000C100800080C100004100F6 +:10A7A000000005004100C1C1800080080000414058 +:10A7B000000080004100C1004000C0C10000010055 +:10A7C000880089000100C1919000C00000000100D4 +:10A7D0000000C00001000000200000400000000058 +:10A7E0000000000000000011020000000000000056 +:10A7F00000000000000000000000200000400000F9 +:10A800000000000000000000001110000000000027 +:10A810000000000000000000C1004000C0C10000B6 +:10A820000100200082000100C1050400C0000000FA +:10A8300001000000C0000100000000000000004214 +:10A8400000000000000000068112004807004800D8 +:10A8500000000000000000000000000000000000F8 +:10A860000000000000000000810000E0000048003F +:10A8700000000000000000000000000000000000D8 +:10A8800000000000000000000000810000E0000067 +:10A890004800000000000000000000000000000070 +:10A8A0000042000000000000000A8112004807007A +:10A8B0004800000000000000000000000000000050 :10A8C0000000000000000000000000000000000088 :10A8D0000000000000000000000000000000000078 :10A8E0000000000000000000000000000000000068 @@ -154305,208 +154305,208 @@ :10A9A00000000000000000000000000000000000A7 :10A9B0000000000000000000000000000000757BA7 :10A9C0000000000000000000000000000000000087 -:10A9D000000000000000000000000000DEAE757BFB +:10A9D000000000000000000000000000DEAE747BFC :10A9E0000000000000000000000000000000000067 -:10A9F000000000000000000000000000DEAE0000CB -:10AA0000757B000000000000000000000000000056 -:10AA10000000000000000000000000000000DEAEAA +:10A9F000000000000000000000000000DE2E00004B +:10AA0000747B000000000000000000000000000057 +:10AA10000000000000000000000000000000DE2E2A :10AA2000757B000000000000000000000000000036 :10AA30000000000000000000000000000000DEAE8A -:10AA4000612603400000000000000230A00000006A -:10AA5000000000000C4000000000000002C06486FE -:10AA6000612603400000000000000230A00000004A -:10AA7000000000000C4000000000000002C06486DE -:10AA80000000612603400000000000000230A0002A +:10AA400060C603000000000000000031E0000000CC +:10AA5000000000000C0000000000000000C06306C1 +:10AA6000615603400000000000000230A00000001A +:10AA7000000000000C4000000000000002C06A86D8 +:10AA80000000615603400000000000000230A000FA :10AA90000000000000000C4000000000000002C0A8 -:10AAA0006486612603400000000000000230A00020 -:10AAB0000000000000000C4000000000000002C088 -:10AAC000648600000000000000000000000000009C -:10AAD00000040000840020000000A0000000000529 -:10AAE000000000000000000000000080400400841E -:10AAF00000000000000000004000201100100000D5 -:10AB000000800003000000000000000400000408B2 -:10AB10000400000000000000000020004000880247 -:10AB20000004400400000000000200008800200231 -:10AB30002040400000000000000420402080200051 -:10AB40000000200040000000009000004002400291 -:10AB500000020000400000000000000000000000B3 -:10AB60001000000040000000000000004004000150 -:10AB70004004000000000000004000000000000051 -:10AB80004000000200004000000040020000000001 -:10AB90000000400000000000004005000000000030 -:10ABA0000000400200000000000000000000000063 -:10ABB00000004000100200000000000000024002FF -:10ABC000000000000000000000000000000800007D -:10ABD00000000000000008000900080490100000B8 -:10ABE0000010000000410400000000000000000010 -:10ABF0000000820000400000000002000000000091 -:10AC00000000000000000000000000000000020042 -:10AC1000820000000000000000000000000090081A -:10AC20000000000000400000000000000000900054 -:10AC300002042000000400040000000000000209DB -:10AC400000000200020000100004000400040004E0 -:10AC50000000000800080000000004080040008414 -:10AC600000000084000800088084008400000004C4 -:10AC700000000082008400000000008800880010AE -:10AC8000000004000010001000000000020000009E -:10AC90000508000000040208000000000200000097 -:10ACA0000010000000000000000000000000000094 -:10ACB00000100001800802030001000004000000F1 -:10ACC000000800000000000000008808880800005C -:10ACD00040000000004100030005000000200000CB -:10ACE0000008400000000000000000000021840077 -:10ACF00000410000200800082000001000110000A2 -:10AD00009000000040024020000000000000000011 -:10AD10000000000000000000000000000000000033 +:10AAA0006A8660C603000000000000000031E0007C +:10AAB0000000000000000C0000000000000000C0CA +:10AAC000630600020000000400000000000088008F +:10AAD0001000080020020000A010100000008400F8 +:10AAE0000000840004000000100088000000200026 +:10AAF0001000400040004000000020000020200026 +:10AB0000880000034000204040000800880040000A +:10AB100020004000200020002000880020000000CD +:10AB200000008800000020002000400020000000FD +:10AB300000002000000020000400000000080000C9 +:10AB40000000020000000000000000000000000003 +:10AB50000000000089000500000020010000000046 +:10AB6000090000000000400000000000100000008C +:10AB700040000900100200000000000000000091E9 +:10AB8000000000000000000040010000A0004000A4 +:10AB900000000000000000004000400040000004F1 +:10ABA000000020000000090000000000000000007C +:10ABB000000000008000000009008000000000008C +:10ABC0000000000000000000000000000000000085 +:10ABD00000008200000000850080000090800000DE +:10ABE0000000000000000000000000000000000065 +:10ABF0000000000000000000000000000000000055 +:10AC0000000001800000000001000080020000043C +:10AC1000000000000000000000000000000000092B +:10AC20000000000000000000000000000000000024 +:10AC300000000000000000001000000000000009FB +:10AC40000100000000000000008400000000000877 +:10AC5000000200000000000000400040000800105A +:10AC600000020000000000040000000000000002DC +:10AC700000000000000000000008000000080020A4 +:10AC800000000200200400820000200002400000BA +:10AC90000001038800000000000000080088000890 +:10ACA000000000820000000000840000000000009E +:10ACB000000800000000000000000008000000087C +:10ACC000000004000000000000080000000000096F +:10ACD000000000000000000000090088000088005B +:10ACE0000400000000000000000000100000000050 +:10ACF0000000000000000000000000004000000014 +:10AD000000000000000090000000000000000200B1 +:10AD100040000504000000000002000000000000E8 :10AD20000000000000000000000000000000000023 -:10AD30000000000000000000000000000000000013 -:10AD400000000000000088008800000000000000F3 -:10AD500000004000000000000000000011000000A2 -:10AD6000020800A0040000000082000000000000B3 -:10AD700003000040090004000090808400000000EF -:10AD800000C000881100000000000000000000006A -:10AD900000000000000000000008000000000000AB -:10ADA0000000000000100000000000000000000093 -:10ADB000000003000000000000000000000021006F -:10ADC0000000000011040900000000000000000065 -:10ADD000200000000000000000000000000004004F -:10ADE0000000020004200000000000000004000039 -:10ADF0000000000000000000000000004000000013 -:10AE0000000000000000000000000000000400003E -:10AE1000000000000000000000000800000000002A -:10AE20000000000002000000081100000000000007 -:10AE300000000000000000000005000000110000FC -:10AE400000000000040040000011000000000000AD +:10AD3000000000000000000000000008000000000B +:10AD400000000000000000000008000000000800F3 +:10AD5000000011000300000003000000080200884A +:10AD60000000000800900000000800000000000043 +:10AD700000000000000000000000000000000800CB +:10AD8000000000000008000000A00000000000001B +:10AD90008000000008010088000000000000100092 +:10ADA000000000000000000200000084000000001D +:10ADB0000000410000000000030008A00000410066 +:10ADC0000000000000000000210000004100A00081 +:10ADD000000000000000C0000000C00000000100F2 +:10ADE000000000000000821100050009C0080000FA +:10ADF000100004000400C000000000000800000271 +:10AE00000000000000008205A0000000000000001B +:10AE10000809008000091004080000000000080074 +:10AE20008200000000000000820040000000C0001E +:10AE300008001000000004000000000000000000F6 +:10AE40000800001108400840000000000000000059 :10AE500000000000000000000000000000000000F2 -:10AE600000000000000000010000000000000000E1 -:10AE70000000000000000000000000000000400092 -:10AE80000000000000000000000041000000000081 -:10AE900000000000000000000000000000000000B2 +:10AE600040000000000000000000000000000000A2 +:10AE700000000000000000000000000000000000D2 +:10AE800000010000000000000000000400004184F8 +:10AE9000000000000040110000050000000000005C :10AEA00000000000000000000000000000000000A2 :10AEB0000000000000000000000000000000000092 :10AEC0000000000000000000000000000000000082 -:10AED00000000000000000000021000082000800C7 -:10AEE00000000000004000000008A000000000007A -:10AEF000000000000003000000000020000000111E -:10AF00000000000000000800001000000000000029 -:10AF10000000000000000000000000000000000031 -:10AF20000000000000000000000000000000000021 -:10AF30000000000000000000000000000000000011 -:10AF40000000000000000000000000000000000001 -:10AF500000000000000800000000050000820084DE -:10AF600000840084110000A0000002002100000005 -:10AF70000000000000A0000000000008008200A007 -:10AF80000000000000000090009011000088000008 -:10AF900000000000000000000000000000000000B1 -:10AFA00000000084000000000090000008000090F5 -:10AFB000000000001120210000000000000000003F -:10AFC000000000000000000000900000080040A009 -:10AFD0000000400000000000002100000000900080 -:10AFE000000000000000C000000800400040001108 -:10AFF0000000000000050000000000000004000048 -:10B000000000002000000000000000000008000018 -:10B010000000000000000000000000000000000030 -:10B0200000000000000000000000000000400000E0 -:10B0300040000000000000000000000000000000D0 -:10B040008400000000000000000800040004000468 -:10B050004000000000004000000000000000000070 -:10B0600000000000000000000000000005000000DB -:10B0700000000000000000000000000000000000D0 -:10B0800000000000040000000000080000000000B4 -:10B090000000000000002000000000000000000090 -:10B0A00000000000000000000000000000000000A0 +:10AED00000000000A0000000A00000000000000032 +:10AEE00000009000000000100000000000000000C2 +:10AEF000000000000400000000000000000000004E +:10AF000000000800820082004000000000000000F5 +:10AF10000800000001000000000000A00000820006 +:10AF200000000000C0000000000000000000000061 +:10AF300000000800000000000000080000000800F9 +:10AF4000000008008200A0000000000000000000D7 +:10AF500000000800000000000000000041000000A8 +:10AF600041200088030008000001000000000000EC +:10AF700000000000000000000000000000080000C9 +:10AF80000000000020000008000010840000000401 +:10AF90000000808400002020000000040004000065 +:10AFA00000000000000020000000000000840000FD +:10AFB0000000000000080000000000000000030482 +:10AFC000000000200000000000000000030000005E +:10AFD0000000000000000000000000000000000071 +:10AFE00000000000008000000000000000040000DD +:10AFF000000500080000000000080000000000003C +:10B0000000000000000020002000000008000000F8 +:10B01000000000000008000000040040004001089B +:10B02000000400000000000000000000000000001C +:10B0300000000000000000210000000000080000E7 +:10B0400000000200000000000000040000000000FA +:10B0500008000000000000000000000000000000E8 +:10B0600000000000000000200000000000000001BF +:10B0700000000000000000000000000020000000B0 +:10B0800000C000000000000020008000000003005D +:10B0900000000000000000C00000000100000000EF +:10B0A0000800000000000040000000000000000058 :10B0B0000000000000000000000000000000000090 -:10B0C0000000000000000000000000000000000080 -:10B0D00000000000000000008000000000000000F0 -:10B0E00000000000000000000000040200020088D0 -:10B0F000C084000000000000000000400084000840 -:10B1000000880000000000000000000000000000B7 -:10B110000000000000000800000000000000000027 -:10B12000000000000000000000000000000000001F +:10B0C000000000000000410000000000210000001E +:10B0D0000000000000000000000000000000000070 +:10B0E00000000000000000000000C11190910091DC +:10B0F000200400000000000000000000000000002C +:10B10000000000000000000000000000000100003E +:10B1100000000804019002A020A00003010100012A +:10B120008401000100000000000000000000000099 :10B13000000000000000000000000000000000000F -:10B1400000000000000000000100000000000000FE -:10B1500000000000000000000801000100000000E5 -:10B16000000000000000000000000000808000805F -:10B1700000808000000000000000000000000000CF -:10B18000008000000000000002000000000000003D -:10B1900000000000000003000000000000000000AC -:10B1A000000000000000000000000000000000009F +:10B1400000000000000000000000000000000000FF +:10B1500000000000000000000000000000000000EF +:10B1600000000000000000000000000089C0808393 +:10B17000001000200000000000000000000000009F +:10B1800000000000000000000000000000080003B4 +:10B190000020004083800300808000800000202089 +:10B1A00021218004000400000000000000000000D5 :10B1B000000000000000000000000000000000008F -:10B1C000000000000000000000004000000000003F -:10B1D000000000000000000204040010000800004D -:10B1E00000000000000000000000000000008000DF -:10B1F000000080008000000000000000000000004F -:10B2000000000000000000110000004100000000EC -:10B21000000000000000000000000000000000002E -:10B22000000000000000000000000000000000001E +:10B1C000000000000000000000000000000000007F +:10B1D000000000000000000000000000000000006F +:10B1E000000000000000000000000000008080005F +:10B1F00080030080800000000000000000000000CC +:10B2000000000000000000000000000000000080BE +:10B21000000000000010030084098980A180000064 +:10B2200091801000030008410000000000000000B1 :10B23000000000000000000000000000000000000E -:10B2400000000000000000000004000000090000F1 +:10B2400000000000000000000000000000030000FB :10B2500000000000000000000000000000000000EE -:10B2600000000000000000000000000000000000DE -:10B2700002000000A0000800000000000000000024 -:10B2800000000000000000000000000000010000BD -:10B2900000000000000000000000000000000000AE -:10B2A000000000000000000000000000000000009E +:10B2600000000000000000000000000000000008D6 +:10B27000100090019040C08200000000000000001B +:10B2800000000000000000000000000000000000BE +:10B2900000C00000000000090200118440A0C102AB +:10B2A0000000099000000000008500000000000080 :10B2B000000000000000000000000000000000008E -:10B2C000000000000000000000000001000000007D +:10B2C000000000000000000000000000000000007E :10B2D000000000000000000000000000000000006E -:10B2E000000000000000000000000000000000005E -:10B2F000000004080040001008C00000000000002A -:10B30000000090000000000040000000100000005D -:10B31000000000000000000000000000000000012C -:10B32000010000000000000000000000000000001C +:10B2E00000000000000000000000000000008400DA +:10B2F000000002880140089083C0000000000000A8 +:10B30000000000000000000000000000000000003D +:10B31000000000000100010000000803008410018B +:10B320000404000000000000000100000000000014 :10B33000000000000000000000000000000000000D -:10B3400000000000000000000000000000000800F5 -:10B3500000000000000000000000000000000101EB -:10B3600001010101000000000000000000000000D9 -:10B37000000000008080000000008000000000004D +:10B3400000000000000000000000000000000000FD +:10B3500000000000004000029020000201000000F8 +:10B3600000000000000000000000000000000000DD +:10B37000000000000000418041004080000000000B :10B3800000000000000000000000000000000000BD -:10B39000000008000000000000000000000800108D -:10B3A0000005044000000000000000000000000054 +:10B39000000000000000030010000800808800206A +:10B3A0000010000500000009040441210004000011 :10B3B000000000000000000000000000000000008D :10B3C000000000000000000000000000000000007D -:10B3D00080000000090000000000000000000002E2 -:10B3E0000810051004040000000000000000000028 -:10B3F000000000000000000000000000000000004D -:10B40000000000000000000080008000000000003C -:10B41000000000000000000000000000000000002C -:10B42000000000000000000000000000000000001C +:10B3D000000000004000008000808000008010001D +:10B3E000000000000000000000000000000000005D +:10B3F000000000000000000200808000000000004B +:10B40000000000000000000000000000000000003C +:10B410000000000000000821110041000800800524 +:10B4200080088080000000000889080000002008D3 :10B43000000000000000000000000000000000000C :10B4400000000000000000000000000000000000FC -:10B4500000090000000000000000000000000000E3 +:10B4500000000000000000000000000000000000EC :10B4600000000000000000000000000000000000DC -:10B470000000000000000000000088000000C00084 -:10B4800000000000000000000000A0000200840096 -:10B4900000000000000000000000000000000000AC -:10B4A000000000000000000000000000000000009C -:10B4B000000000000000000000000000000000008C +:10B47000000000000000000002000020082004007E +:10B4800000000000000000000000000000000000BC +:10B4900000000000000000000001010000000000AA +:10B4A0004000889082408800000001C00100000038 +:10B4B000000100000000000000000000000000008B :10B4C000000000000000000000000000000000007C :10B4D000000000000000000000000000000000006C :10B4E000000000000000000000000000000000005C -:10B4F0000000000000000000000000000000070045 -:10B5000000820000000000000000000000000700B2 -:10B510000000000000E000000082000000000000C9 -:10B52000000000000000000000000000000000001B -:10B53000000000000000000000000000000000000B +:10B4F00000000021000007000000488200600600F4 +:10B5000082000000000000000000000000000000B9 +:10B5100000000000000000000000000000600000CB +:10B52000880041820060060000000000000000600A +:10B530000000500A000000000000000000000000B1 :10B5400000000000000000000000000000000000FB -:10B5500000000000810000E000000000000000008A -:10B5600000000000000000000000000000000000DB -:10B570000000000000000000000000003C003C0053 -:10B580006767670100000000000000003F3C3F3C8F +:10B550000000000082000060000000000000000009 +:10B5600006000000000A00000700000000000000C4 +:10B57000000000000000000000000000F0F0E0E02B +:10B580000303FC9900000000000000000000000020 :10B5900000000000000000000000000000000000AB -:10B5A000000000000000000000000000000000009B +:10B5A0000000000067666666C7C7C3C300000000EE :10B5B000000000000000000000000000000000008B :10B5C000000000000000000000000000000000007B :10B5D000000000000000000000000000000000006B -:10B5E000000000000000000000000000000000005B -:10B5F00000000000000000000000000000003C000F -:10B600003C000101670100000000000000003F3C19 -:10B610003F3C0000000000000000000000000000AF -:10B62000000000000000000000000000000000001A +:10B5E00000000CFCFCFC000000000000000000005B +:10B5F0000000000000000000000000000000F0F06B +:10B60000F0F00303FC000000000000000000000058 +:10B61000000000000000000000000000000000002A +:10B6200000000000000066666666C3C3C3C3000076 :10B63000000000000000000000000000000000000A :10B6400000000000000000000000000000000000FA :10B6500000000000000000000000000000000000EA -:10B6600000000000000000000000000000000000DA +:10B66000000000000CFCFCFC0000000000000000DA :10B6700000000000000000000000000000000000CA :10B6800000000000000000000000000000000000BA :10B6900000000000000000000000000000000000AA @@ -154516,283 +154516,283 @@ :10B6D000000000000000000000000000000000006A :10B6E000000000000000000000000000000000005A :10B6F000000000000000000000000000000000004A -:10B7000000006F6F666600C3FFFF000000000000CE -:10B710000000FF00FD6400000000000000000000C9 -:10B720000000000000000000000000000000000019 -:10B730000000000000000000000000000000000009 +:10B70000000004FF00FF06002424000000000000E9 +:10B710000000000000000000000000000000000029 +:10B72000000000000000000000000F0F2F2F990004 +:10B73000BF3C000000000000C3C3C3C30000000002 :10B7400000000000000000000000000000000000F9 :10B7500000000000000000000000000000000000E9 :10B7600000000000000000000000000000000000D9 :10B7700000000000000000000000000000000000C9 -:10B78000000000007EFF666600C3FFFF00000000AF -:10B7900000000000FF009D04000000000000000009 -:10B7A0000000000000000000000000000000000099 -:10B7B0000000000000000000000000000000000089 +:10B780000000000004DF00DF660024240000000049 +:10B7900000000000000000000000000000000000A9 +:10B7A0000000000000000000000000009F0FBF2FFD +:10B7B00000003F3C000000000000C3C3C3C3000002 :10B7C0000000000000000000000000000000000079 :10B7D0000000000000000000000000000000000069 :10B7E0000000000000000000000000000000000059 :10B7F0000000000000000000000000000000000049 -:10B8000000000000000080000000000000000000B8 -:10B8100000000000000000000000000000000061C7 -:10B820000007000D000000000000000000000061A3 -:10B830000006000D000000000000000000000000F5 +:10B800000020000000A000610036809D00050000BF +:10B810000000000000000000000000000000000028 +:10B8200000000000000000610004000D0000006145 +:10B830000E36C0050005000000610002000900018D :10B8400000000000000000000000000000000000F8 :10B8500000000000000000000000000000000000E8 -:10B8600000610007800D00000000000000000000E3 -:10B8700000610006000D0000000000000000000054 +:10B8600000610006800D00000000000000000000E4 +:10B8700005000020000000000000000000000000A3 :10B8800000000000000000000000000000000000B8 :10B8900000000000000000000000000000000000A8 -:10B8A0000000000000000000000000000000000098 -:10B8B0000000000000F014F4000000000000000090 -:10B8C0000000000000000000000000000000000078 +:10B8A0000000000000000000EFE0FF0000000000CA +:10B8B00000000000DF005F0000000000FFFF00103C +:10B8C0000010000000000000000000000000000068 :10B8D0000000000000000000000000000000000068 :10B8E0000000000000000000000000000000000058 -:10B8F0000000000000002800F8F000000000000038 +:10B8F0000000000000000000000000000000000048 :10B900000000000000000000000000000000000037 :10B910000000000000000000000000000000000027 -:10B920000000000000000000000000000000000017 -:10B9300000000000000000F000F000000000000027 -:10B9400000000000000000000000000000000000F7 +:10B9200000000000000000000000FF00FF00000019 +:10B93000000000000000FF00FF000000EB41EB41B1 +:10B9400000001010000000000000000000000000D7 :10B9500000000000000000000000000000000000E7 :10B9600000000000000000000000000000000000D7 -:10B9700000000000000000000000F0F000000000E7 +:10B9700000000000000000000000000000000000C7 :10B9800000000000000000000000000000000000B7 :10B9900000000000000000000000000000000000A7 -:10B9A0000000000000000000000000000000000097 -:10B9B0000000000000000000000000000000000087 -:10B9C0000000000000000000000000000000000077 +:10B9A000000000000000000000000000FFD78AFF38 +:10B9B0000000000000000000FFFF00C00000410088 +:10B9C000010100FF00000000000000000000000076 :10B9D0000000000000000000000000000000000067 :10B9E0000000000000000000000000000000000057 -:10B9F0000000000000003D3C3C3C00000000000056 -:10BA00000000000000000000000000000000000036 +:10B9F0000000000000000000000000000000000047 +:10BA00000000000000000000000000000000DF0F48 :10BA10000000000000000000000000000000000026 -:10BA20000000000000000000000000000000000016 -:10BA30000000000000000000000000000000000006 -:10BA400000000000000000000000000000000000F6 +:10BA20000000000000000000000000000000FFDF38 +:10BA3000FFAA0000000000000000FFFF00C000009F +:10BA40000000000071717171000000000000000032 :10BA500000000000000000000000000000000000E6 :10BA600000000000000000000000000000000000D6 -:10BA700000000000000000000500000000000000C1 -:10BA80000000001000000000009000800080008096 -:10BA90000000000000000000008000800080000422 -:10BAA0000000001000000000000001000000000085 -:10BAB00010009005000000040000000200000000DB -:10BAC0000001000000000000000000000000000075 -:10BAD00000002000200040000000000000000000E6 -:10BAE0000000000000000000000000000000000056 -:10BAF00000002000200020000000000000000000E6 -:10BB000000000000000000901000401100104010E4 -:10BB100010102000000000000000000400040004D9 -:10BB20000003000200000000000000020402000008 -:10BB30000000400221000000400010000040000012 -:10BB40000000000040000000400000000000000075 -:10BB50000000000040000000000240000000000063 -:10BB600000000000000000000000000000000000D5 -:10BB70000000000040000000000000004000000045 -:10BB80000000000000000000000000000004008031 -:10BB90000080049000000000200000002000200031 -:10BBA0000004020400000200000000400000080041 -:10BBB000020000100400000000000000000000006F -:10BBC00000008200000000000000000000000000F3 -:10BBD000000008000200000000000000000000005B -:10BBE00000000808084100000000000002000000FA -:10BBF000020000000008020802081040104008027D -:10BC0000080002080000000000000000000809050C -:10BC10004110001000100000000800000000800823 -:10BC2000820002010009000000000000000800047A -:10BC30000000000000008000000800020000000872 -:10BC40000000020000820000000005000000020465 -:10BC500002000000000004080000000200000000D4 -:10BC600000080208000000000200020802000000B4 -:10BC7000000000000000048400000000000000003C -:10BC80000004000800100000400000000000000058 -:10BC9000000800000100000000000000000000009B -:10BCA0000000040000000400100000000400000078 -:10BCB0000000400000000000048040000020A000C0 -:10BCC00000000000000090400000900200400000D2 -:10BCD000000000000000000000000800000010004C -:10BCE0000000000000000000040040000000000010 -:10BCF0000000000000000000000008000000080034 -:10BD00000000000090000000004000020000000061 -:10BD1000000200000000040000000000000000001D -:10BD2000000000000000218400000000000000006E -:10BD3000000000000000000000000020008400015E -:10BD400000000000000000000000000000000008EB -:10BD500000000000000000000000000000000000E3 -:10BD600000000000000000000000000020000000B3 -:10BD700000000000000000000000000000000000C3 -:10BD800000000000000000000000000000000000B3 -:10BD9000000000000000C10000000080000008005A -:10BDA000000010000008000001002000000000005A -:10BDB000000000000800000000000040002100001A -:10BDC0000000000000000000000000000000000073 -:10BDD0000000000000000000000000000000000063 -:10BDE0000000000000000000000000400000000013 -:10BDF0000000000000000000000000000000000043 -:10BE0000000000040000000000000000000400002A -:10BE100000000000000000002000000000040000FE -:10BE2000000000000000000003002000800000006F -:10BE3000000000000000800000000000000400007E -:10BE400000000000400000000000000002000000B0 -:10BE500000000000000000000000000000000000E2 +:10BA700000000000000000000000000000000000C6 +:10BA80000011000000000000000000002000000085 +:10BA90000000C00000002000840000000000020040 +:10BAA0000000000000000000000000000000000096 +:10BAB0000000000000002000000000030003200040 +:10BAC000000000000400001000004000400084005E +:10BAD00040001000000000002000000000000000F6 +:10BAE0002000400040000000400000004002000034 +:10BAF000040020000000000000000008000000001A +:10BB000000000000000000000000400000000000F5 +:10BB10000000000000000000000000000000000025 +:10BB20000000000000000000000000020000000013 +:10BB300010001000000000000000000000000000E5 +:10BB400000000000000000821000100000900002C1 +:10BB50004000100000000000000000000000000095 +:10BB60000000000000000000000010004000000085 +:10BB70000000840000000000000000000000000041 +:10BB800000000008000000000000000000000000AD +:10BB90000000021000000000000000000000000093 +:10BBA00000001010000000000000008000000000F5 +:10BBB00000401040040004100000010900000000D3 +:10BBC000000002080000000000000000000000402B +:10BBD00000400000001000000010080000000000FD +:10BBE00000000000004000000040000000000000D5 +:10BBF000000000000010000000000008000000002D +:10BC000000000000084000000000000000000000EC +:10BC100000000000000800004100000000040000D7 +:10BC20000000000000C00000000000000020000034 +:10BC30000000000000108000888400000400000064 +:10BC40000000000000C00000000000000000000034 +:10BC50000000000000000040000000080000000894 +:10BC600000000000000000100000000800000000BC +:10BC7000000000000000000000000040000000087C +:10BC800000000000000000000000000000000408A8 +:10BC90000000000000009000000008000000080004 +:10BCA0000000000000000000000000000000000094 +:10BCB0000400040000000000000000000400000078 +:10BCC000000000000000000000000000000800006C +:10BCD0004000000000000000000000000000000024 +:10BCE0000200000000000000000000000000000052 +:10BCF00000000000000000000800000082000000BA +:10BD0000080000000000000000000000000000002B +:10BD1000000000000000000008000000000000001B +:10BD20000000000000000000000000000000000013 +:10BD30000000800080000800000000000800800073 +:10BD4000110800000000000000000000400000009A +:10BD50000002008800040000000000000000000055 +:10BD60000040000800000000000000000008000083 +:10BD700000000000000000000800000000000000BB +:10BD800000000000030003000000000000000000AD +:10BD900000000000000000000000000000000000A3 +:10BDA0000000001000000000000000000000000083 +:10BDB0000000000000000000000000000000004043 +:10BDC0000000904000000000000000410000000062 +:10BDD000000000090000000000000000000000005A +:10BDE0000000000000000000000000000000000053 +:10BDF00008000000004008000800004000000000AB +:10BE00000000000000000000000000000000000032 +:10BE10000000000000000090000000000000000092 +:10BE20000000000000000000000000000000000012 +:10BE3000008800000000000000000000000000007A +:10BE400000C0000000000890000002000000000098 +:10BE5000000000000000000000000004000000904E :10BE600000000000000000000000000000000000D2 -:10BE700000000000000000000000000000000200C0 -:10BE800000000000000000000000000000000000B2 -:10BE900020009000080000000000000000000000EA -:10BEA0000000000000400000000000000000000052 -:10BEB00000000000000082000800000000000408EC -:10BEC0000000000200200000000000000000000050 -:10BED0000000000000000000000000000000000062 +:10BE700000000000000000000000110008000000A9 +:10BE80001140000000400000000000000000000021 +:10BE900000000000000000000000000000000000A2 +:10BEA0000000000000000000000000000000000092 +:10BEB0000000000000000000000000000000000082 +:10BEC0000000000000000000000000000000000072 +:10BED0000000000000000009000000000000000059 :10BEE0000000000000000000000000000000000052 :10BEF0000000000000000000000000000000000042 :10BF00000000000000000000000000000000000031 -:10BF100000001000000000001000004000000000C1 -:10BF200000000000000000200020000000000000D1 -:10BF300000000082000000004000800000000200BD -:10BF400005A0002020004101002000000088000022 -:10BF500000000000000000000000000000000000E1 -:10BF600000000000000008000000000020000000A9 -:10BF700000000002000000000000000000000000BF -:10BF800000000000000008000000009040200900B0 -:10BF90000020110000000000000000000000000070 -:10BFA0000000000000000009080800000000000078 -:10BFB00000000000000082000021000000000000DE -:10BFC00000008200002000000000000000000008C7 -:10BFD0000000000000000000000000000000000061 -:10BFE0000000000000000000000000000000000051 +:10BF10000000000000000000009000880000000009 +:10BF200000000000050800020000110000000000F1 +:10BF30000000000000000000000000000000000001 +:10BF40000000000008000500000020882084009008 +:10BF500000000000009000040084000000000004C5 +:10BF600000000000000000000000000000000000D1 +:10BF700000000000000000000000000000000000C1 +:10BF800000000000000000000000000000040000AD +:10BF90000000080000000000000000000000000099 +:10BFA0000000000000000000000000000000000091 +:10BFB00000000000000000000000000000008800F9 +:10BFC0000100010500040000000000040000004121 +:10BFD0000000000300000000000800000000000056 +:10BFE0000000004000000000000000000000000011 :10BFF0000000000000000000000000000000000041 :10C000000000000000000000000000000000000030 :10C010000000000000000000000000000000000020 :10C020000000000000000000000000000000000010 -:10C030000000000000000000000000000000000000 -:10C0400000000000000000010000000000000000EF -:10C0500000001100000000000000000000000000CF +:10C0300000000000000000000000200000000000E0 +:10C0400000000400040000000808110011010000B5 +:10C0500000000000000000000000000000000302DB :10C0600000000000000000000000000000000000D0 :10C0700000000000000000000000000000000000C0 -:10C0800000000000000000000000000000000000B0 +:10C0800000000200000002001188000000000040D3 :10C090000000000000000008000000000000000098 -:10C0A0000000410001889000000000000000000036 +:10C0A0000000000000000000000000000000000090 :10C0B0000000000000000000000000000000000080 -:10C0C00000A0008800000010100000000000100018 -:10C0D0000000000000000000000000000000000060 +:10C0C00000C000900000000000C0009000000000D0 +:10C0D000000000000000000000030000000000005D :10C0E0000000000000000000000000000000000050 :10C0F0000000000000000000000000000000000040 :10C10000000000000000000000000000000000002F :10C11000000000000000000000000000000000001F -:10C1200000000000900310088020000000000000C4 -:10C1300000000000000005000000000000000000FA -:10C14000000000800000000000808000000000006F +:10C12000000000000000000000000000000000000F +:10C1300000000000000000000000000000000000FF +:10C1400000000080008000000000008000800000EF :10C1500000000000000000000000000000000000DF :10C1600000000000000000000000000000000000CF :10C1700000000000000000000000000000000000BF :10C1800000000000000000000000000000000000AF :10C19000000000000000000000000000000000009F -:10C1A0000000000003002011001120A0000000008A -:10C1B0000000000000040000000800000000000073 -:10C1C00000000000000000050080000000000003E7 -:10C1D00000000080000000000000000000000000DF +:10C1A000000000000000000000000000000000008F +:10C1B000000000000000000000000000000000007F +:10C1C000000000800000000080008080000000006F +:10C1D00080008080000000000000000000000000DF :10C1E000000000000000000000000000000000004F :10C1F000000000000000000000000000000000003F :10C20000000000000000000000000000000000002E :10C21000000000000000000000000000000000001E -:10C2200000000000000090000089000100020000F2 -:10C2300000000000000000010000000000000000FD -:10C2400000000000000000000000000200000000EC -:10C2500000010000000400000000000000000000D9 +:10C22000000000000000000000000000000000000E +:10C2300000000000000000000000000000000000FE +:10C24000000000000008000000008400C090000012 +:10C2500000008400C090000000000000000000000A :10C2600000000000000000000000000000000000CE :10C2700000000000000000000000000000000000BE -:10C2800000000000000000000000000000000000AE +:10C28000000000000000000000000000000000901E :10C29000000000000000000000000000000000009E -:10C2A000000000000000000090000088C08810001E -:10C2B000000000000000000000001000000000006E -:10C2C0000000000000000000080000000000400026 -:10C2D000009000100002009000000000000000002C +:10C2A000000000000000000000000000000000008E +:10C2B000000000000000000000000000000000007E +:10C2C000000000000000000000000000009000C01E +:10C2D00000000000009000C000000000000000000E :10C2E000000000000000000000000000000000004E :10C2F000000000000000000000000000000000003E :10C30000000000000000000000000000000000002D :10C31000000000000000000000000000000000001D -:10C3200000000000000000000000A040000888009D -:10C33000802000000000000000000000000000005D -:10C340000800000000000000000080000000000065 -:10C3500000000080000000800000000000000000DD +:10C32000000000000000000000000000000000000D +:10C3300000000000000000000000000000000000FD +:10C34000000000000000000000000000000000806D +:10C350000080000000000080098000000000000054 :10C3600000000000000000000000000000000000CD :10C3700000000000000000000000000000000000BD :10C3800000000000000000000000000000000000AD :10C39000000000000000000000000000000000009D -:10C3A000000000000000000000000000004008A1A4 -:10C3B00090000810000000000000000000000000D5 -:10C3C000000000000000000000000000000000006D -:10C3D00000000000800200000000000000000000DB +:10C3A000000000000000000000000000000000008D +:10C3B000000000000000000000000000000000007D +:10C3C00000000000000000000000000080090021C3 +:10C3D0000000000080118005000000000000000047 :10C3E000000000000000000000000000000000004D :10C3F000000000000000000000000000000000003D :10C40000000000000000000000000000000000002C :10C41000000000000000000000000000000000001C :10C42000000000000000000000000000000000000C -:10C430000008098811010000000000000000000051 -:10C440000000000000000000000000000000A0004C -:10C4500008000000A0009000100010004000000044 +:10C4300000000000000000000000000000000000FC +:10C44000000000000000000000000000000090005C +:10C45000000000000000C0012000000000000000FB :10C4600000000000000000000000000000000000CC :10C4700000000000000000000000000000000000BC :10C4800000000000000000000000000000000000AC :10C49000000000000000000000000000000000009C :10C4A000000000000000000000000000000000008C -:10C4B000000000E007000011000000000000000084 -:10C4C000000000E00000000000000000000000008C -:10C4D00000000000070000000081000007000000CD +:10C4B000000000000000000000000000000000007C +:10C4C0000000000000000000000A0000060000005C +:10C4D00000820000060000004882006006000000A4 :10C4E000000000000000000000000000000000004C :10C4F000000000000000000000000000000000003C :10C50000000000000000000000000000000000002B -:10C51000000000000000000000000000000000001B +:10C510000000000A0000060000000000000000000B :10C52000000000000000000000000000000000000B -:10C530000000F3F3F3F3FFF0FFF000000000000051 +:10C5300000000000000000000000000000000000FB :10C5400000000000000000000000000000000000EB -:10C55000000000140000000000003CFCFFFFEAC0E7 -:10C56000EAFF0000000000000000000000000000E2 +:10C5500000000000FFFF000000FF000000FF0000DF +:10C5600000FF0000000000000000000000000000CC :10C5700000000000000000000000000000000000BB :10C5800000000000000000000000000000000000AB :10C59000000000000000000000000000000000009B :10C5A000000000000000000000000000000000008B -:10C5B00000000000F0F0F0F0F0F0F0F000000000FB +:10C5B000000000000000000000000000000000007B :10C5C000000000000000000000000000000000006B -:10C5D00000000000000000000000000000F0C3C3E5 -:10C5E000AA00AAFF000000000000000000000000F8 +:10C5D000000000000000FFFF000000FF000000FF5F +:10C5E000000000FF0000000000000000000000004C :10C5F000000000000000000000000000000000003B :10C60000000000000000000000000000000000002A :10C61000000000000000000000000000000000001A :10C62000000000000000000000000000000000000A -:10C63000000000000000F5F5F5F53C3C3C3C000036 +:10C6300000000000000000000000000000000000FA :10C6400000000000000000000000000000000000EA -:10C6500000000000000000000000000000000000DA -:10C6600000000000000000000000000000000000CA +:10C65000000000000000FF000000FF000000FF00DD +:10C66000000000FFFFFF00000000000000000000CD :10C6700000000000000000000000000000000000BA :10C6800000000000000000000000000000000000AA :10C69000000000000000000000000000000000009A :10C6A000000000000000000000000000000000008A -:10C6B0000000000000000000555555557D7D7D7D32 +:10C6B000000000000000000000000000000000007A :10C6C000000000000000000000000000000000006A -:10C6D00000000000000000007D553C00000000004C -:10C6E000000000000000000000000000000000004A +:10C6D0000000000000000000FF000000FF0000005C +:10C6E000FF00000000FFFFFF00000000000000004E :10C6F000000000000000000000000000000000003A :10C700000000000000000000000000000000000029 :10C710000000000000000000000000000000000019 :10C720000000000000000000000000000000000009 -:10C730000000000000000000000005610A0905017A -:10C7400000A0000000000000000000610007000DD4 -:10C7500000000000000000000000000000000000D9 -:10C760000000000000300000000000000000000099 +:10C7300000000000000000000000000000000000F9 +:10C7400000000000000000000000000000000000E9 +:10C75000000000000020000000A0030203380C00CD +:10C7600092C003E3033E8C0D82C000000000000075 :10C7700000000000000000000000000000000000B9 :10C7800000000000000000000000000000000000A9 -:10C790000000000000000000000000000000000099 -:10C7A0000000000000000000000000000000000089 -:10C7B0000000000000000000000000003F3C3F3C83 -:10C7C0003030FFFF0000000000000000000000000B +:10C790000000000000000000000000000000002079 +:10C7A000000000A0000000000000000000000000E9 +:10C7B0000000000000000000000000000000000079 +:10C7C0000000000000000000000000000000000069 :10C7D0000000000000000000000000000000000059 :10C7E0000000000000000000000000000000000049 :10C7F0000000000000000000000000000000000039 :10C800000000000000000000000000000000000028 :10C810000000000000000000000000000000000018 :10C820000000000000000000000000000000000008 -:10C8300000000000000000000000000000000F00E9 -:10C840000F00303030300000000000000000000019 +:10C8300000000000000000000000000000000000F8 +:10C8400000000000000000000000000000000000E8 :10C8500000000000000000000000000000000000D8 :10C8600000000000000000000000000000000000C8 :10C8700000000000000000000000000000000000B8 @@ -154800,7 +154800,7 @@ :10C890000000000000000000000000000000000098 :10C8A0000000000000000000000000000000000088 :10C8B0000000000000000000000000000000000078 -:10C8C0003F3C3F3C3030BABA00000000000000009E +:10C8C0000000000000000000000000000000000068 :10C8D0000000000000000000000000000000000058 :10C8E0000000000000000000000000000000000048 :10C8F0000000000000000000000000000000000038 @@ -154808,203 +154808,4300 @@ :10C910000000000000000000000000000000000017 :10C920000000000000000000000000000000000007 :10C9300000000000000000000000000000000000F7 -:10C9400000000F000F003030BABA000000000000F5 +:10C9400000000000000000000000000000000000E7 :10C9500000000000000000000000000000000000D7 :10C9600000000000000000000000000000000000C7 :10C9700000000000000000000000000000000000B7 :10C9800000000000000000000000000000000000A7 :10C990000000000000000000000000000000000097 :10C9A0000000000000000000000000000000000087 -:10C9B0000000000000000000000000000000000077 -:10C9C000001000040000000000002004208200820B -:10C9D00000822082000000000080000400000002AD -:10C9E0000002000000000000000040000000000005 -:10C9F000000000040000000000040000000300002C -:10CA00000000000000000000000000002000000006 -:10CA10000000000000040000000200000000000010 -:10CA200000000000000000000000000420040000DE -:10CA300000000000000000000000000000004002B4 -:10CA4000000200020000000200020000000040039B -:10CA50000003000300032002210040020002000244 -:10CA60000000000010000000000040000000200056 -:10CA70000000400000000000000040000000000036 -:10CA80000000000040400004400000004000104052 -:10CA90000000000000000000000200004000100044 -:10CAA0000000000000000000100000000000000076 -:10CAB00040020000000200904000400040000000E2 -:10CAC0000000000000000000000000402000000006 -:10CAD00000000000000082000000000000000010C4 -:10CAE000020084400040904000000200A0000000CE -:10CAF0000000000000000000000000030000000330 -:10CB0000000000000000000084101000020000106F -:10CB100000000000000000000400084100000010B8 -:10CB2000001000000400000000102000200000049D -:10CB3000000400000000000084100241000000001A -:10CB40000000000020400008400809840010410057 -:10CB500000100000090000000000000000000002BA -:10CB6000000800000400004000080000000002006F -:10CB700000080000000000000008000000000000A5 -:10CB80000908000000000200000002040200040086 -:10CB90000000000800000400000000080000000081 -:10CBA00004080004000002000000008480C080002F -:10CBB00000010083000000000000000200000000EF -:10CBC00004080000000000000000900000030000C6 -:10CBD0000000000800000000000000000409000040 -:10CBE0000000000000000000000000200000000025 -:10CBF00000000000400000000000000000004000B5 -:10CC00008808000000000000000000000000000094 -:10CC10000000000000000000000000000000000014 +:10C9B0000000000000000000000000000000200057 +:10C9C0000000000420004000200020000000400083 +:10C9D0000004000000002000000000000000000033 +:10C9E0000000000000000000000000040000000043 +:10C9F00020000000000000000800C10000030080CB +:10CA00004000008082800000000000000000000064 +:10CA10000400000000000000000000000000000012 +:10CA20000000000000000085000000000000000081 +:10CA30008400000000000000000000000000000072 +:10CA400000000000000000000000000000000000E6 +:10CA50004000000000000000000040000000400016 +:10CA600040004000100000000000000000004000F6 +:10CA70004000C00040004000400080C002000000B4 +:10CA80004002C00040024010000000000000000012 +:10CA90000000400000004000000000000000000016 +:10CAA0000000000000000000001000A000A000C076 +:10CAB00000A0000000000000000040000000000096 +:10CAC00090000000000000000000000000000000D6 +:10CAD0000000000000000000004182008205040008 +:10CAE0000000000000030000000000002080001093 +:10CAF00003000000000001800000000401000000AD +:10CB000000000041010000020000000000000000E1 +:10CB10000000000000000000000000000000000015 +:10CB200000000000000000000010000000900080E5 +:10CB300000800000820000000000A1000000001042 +:10CB40000000000000000000008400000004000459 +:10CB50000008000400000000000800004000000081 +:10CB60008000000000000008000800000000001025 +:10CB70000009820000000000201000C00000080032 +:10CB8000000000000000100000090010000000007C +:10CB90000000000800000000000000000400000089 +:10CBA0000000000000000000000400080000004138 +:10CBB00000400040000000000000000010000000E5 +:10CBC0000001000000100000000000000000000054 +:10CBD0000000004000000000000040400000000095 +:10CBE0000000000000000000000000000000000045 +:10CBF0000021000088009000000040008405000033 +:10CC00002010000000000082000082094011000096 +:10CC100000080040000000000000000000110000BB :10CC20000000000000000000000000000000000004 -:10CC300000000000000000000000000000040400EC -:10CC400000008800000011400300000008C000A0A0 -:10CC50000000000000100000000000000084000040 -:10CC60000000000000000000009000000400000030 -:10CC70000000000000000000000000000000002094 -:10CC80000004000800000000000000000000000890 -:10CC9000000800000000000000000000000000008C -:10CCA0000000000000000020000000000000002044 +:10CC300040000000000000000000000000000003B1 +:10CC400000000000010000000000000000000000E3 +:10CC500008000000000000000000000000000000CC +:10CC6000000000A000000000000000000000000024 +:10CC700000000800000000000000000000000000AC +:10CC8000000000010084000000030090008280008A +:10CC9000000000080040000000000000000000004C +:10CCA0000000000000000000000000000000000084 :10CCB0000000000000000000000000000000000074 -:10CCC000400000000000000000004000C000001014 -:10CCD000000000000000000000000000000001054E -:10CCE00000000000100000000000000040000000F4 -:10CCF000000000000000080000000000000000002C -:10CD0000000000000000000400000000000000001F -:10CD10000000000000000000000000000000000013 -:10CD200000000040000000000000000000000000C3 -:10CD300000000000000000000000000000000000F3 -:10CD40000000001100000000000000000000410091 -:10CD500000000000000000000000000000000000D3 -:10CD60002000000000002100000000000000000082 -:10CD700000000000000003000000000000000000B0 -:10CD80000000000000004100000000000000000062 -:10CD90000000000000000000000000000000000093 +:10CCC0000000000000002000000000000000000044 +:10CCD000000000000008000000000000000000004C +:10CCE00000080000000000000000000900000080B3 +:10CCF0000800000300050005000090000900008006 +:10CD0000C00000000005000000000000000000005E +:10CD100000040000000000000000002004000800E3 +:10CD200000000000000008000800000008000008E3 +:10CD3000000000000000824182000411080004028B +:10CD4000002040110000A10082000000000000004F +:10CD50004108000003000000000000000000000087 +:10CD600000000000000400000000000000000000BF +:10CD70000020410005000000008421C000008890D0 +:10CD800000402004210021000000000000004100BC +:10CD90000000000400000000000800000000000087 :10CDA0000000000000000000000000000000000083 -:10CDB0000000000000000000000000100000000063 -:10CDC000000000080000000000000000000000005B -:10CDD000000008000000000000000000000000004B -:10CDE00000000008000040000000000000000000FB +:10CDB00000000000008800000084008480008000E3 +:10CDC00080080001408200002000000000000000F8 +:10CDD000000800000000000000000000000000004B +:10CDE00000000000200000000000200000000811EA +:10CDF00000200000000008000800080000400800B3 +:10CE00000000000082000000090084000000018092 +:10CE100000000000000000000040000000030000CF +:10CE200000000040000000000000000000000000C2 +:10CE30000000000000000000840082410800C000E3 +:10CE40000800000000000000000082000000000058 +:10CE5000000000000000000000200000042000206E +:10CE600000000000000000000000000000000000C2 +:10CE70000000000100000000000000A00000000110 +:10CE8000000000840010000000A0880000000000E6 +:10CE9000080800000000000800000000000000007A +:10CEA0000000000000000000000000000000000082 +:10CEB00000000000000000000000000021008000D1 +:10CEC0000000000000000000000000000000000062 +:10CED0000000000000000000000000000000000052 +:10CEE0000000000000000000000000000000000042 +:10CEF0000080000000000000C000000000000000F2 +:10CF00000005080090210010000408000010000037 +:10CF100000000104000001040104000000200020C2 +:10CF20000000000000000000000000000000000001 +:10CF30000000000082008200080090000000000055 +:10CF400000000011000040040004401100008200B5 +:10CF500000000000080000000000000000000000C9 +:10CF60000000000000000000000000080000008237 +:10CF7000000000400000410000000500000000A08B +:10CF8000050000000000000000000000000000019B +:10CF900000000000400441004004080000000000C0 +:10CFA000000005000000000000000000000000007C +:10CFB0000000000000000000000000000000000071 +:10CFC00000000000000000000000000000000082DF +:10CFD0000000000000000000000000000000000051 +:10CFE0000000000000000000000000000000000041 +:10CFF0000000000000009000000000100800000089 +:10D00000000008009003012100A0080200080000B1 +:10D0100000A00020000300C10840A0881004000008 +:10D020000000000000000000000000000000000000 +:10D03000000000000000000000000000000011C01F +:10D0400000200040C040000200400002009091001B +:10D0500000000000080000000000000000000000C8 +:10D0600000000000000000000000000000000000C0 +:10D07000000000000000110080000000000080009F +:10D08000000000008000101021A000830008008034 +:10D09000000000800000000000C00085000980033F +:10D0A0000000000000000000000000000000000080 +:10D0B0000000000000000000000000000000000070 +:10D0C000A18000000080800000800000008000003F +:10D0D000110021000000800000000000000000009E +:10D0E0000000000000000000000000000000000040 +:10D0F000000000000004000000000080000000802C +:10D100008000000000008000A000082191000908B4 +:10D11000000000C10082000000000480890304A117 +:10D1200041030000000000000000000000000000BB +:10D1300000000000000000000000000000000000EF +:10D1400000008000000880008000800000040000D3 +:10D15000800000410900000900800000000000007C +:10D1600000000000000000000000000000000000BF +:10D17000000000000000000000840000002000000B +:10D1800000C0080088000400080003840104A10016 +:10D190000100000000C000A00000000011C0090153 +:10D1A00091039185000000000000000000000000D5 +:10D1B000000000000000000000000000000000006F +:10D1C0000000000008000400A000080008000001A2 +:10D1D00000C0900000010100000000880000000075 +:10D1E000000000000000000000000000000000003F +:10D1F00000000000000000000000000001000088A6 +:10D20000020001000002001000A00010C0A0019167 +:10D21000084102C1840000200000080000009011B5 +:10D220000004008211030000000000000000000064 +:10D2300000000000000000000000000000000000EE +:10D240000000000000000888001000A00400200476 +:10D2500000A0009002A0008288400402014000006B +:10D2600000000000000000000000000000000000BE +:10D27000000000000000000000000000000041006D +:10D2800000808000090000000000000010008041C4 +:10D290001010008880910000000000008000000055 +:10D2A00000A14008414009410000000000000000CA +:10D2B000000000000000000000000000000000006E +:10D2C00000000000000000000000000000008000DE +:10D2D000008000800080800000000080808041008D +:10D2E000000000000000000000000000000000003E +:10D2F000000000000000000000000000000000002E +:10D30000001100000080000000200080008000006C +:10D31000C18310214100A003800080100000800024 +:10D3200000002182C080108020100000000000005A +:10D3300000000000000000000000000000000000ED +:10D34000000000000000000000008002808000005B +:10D350008000800080808000000000022111000019 +:10D3600000000000000000000000000000000000BD +:10D3700000000000000000000000000000000000AD +:10D3800000000001000000400000000100200084B7 +:10D39000000009A0110000000201080004000200C2 +:10D3A00082000000018988A0008440010000000084 +:10D3B000000000000000000000000000000000006D +:10D3C000000000000000000000000000C000042079 +:10D3D0000088A0009000A0A090A000000000000124 +:10D3E000000000000000000000000000000000003D +:10D3F000000000000000000000000000001100001C +:10D40000060000000000000007008221000000006C +:10D41000000000000000006000005000000000005C +:10D4200000004200000060000060000050000000AA +:10D4300000000000000000000000000000000000EC +:10D4400000000000000000000000000000000000DC +:10D4500000000000001200060000060000000000AE +:10D4600000E000008141000000000000000000001A +:10D4700000000000000000000000000000000000AC +:10D48000000000000000000000000000F0F00000BC +:10D49000000058400000FF003C3C00040008909051 +:10D4A00000800F0F0F0F00004242424200000000B8 +:10D4B000000000000000000000000000000000006C +:10D4C000000000000000000000000000000000005C +:10D4D00000C30000A000A000F6FF6F003F300FF077 +:10D4E00000000000C4C4C8CC000000000000000020 +:10D4F000000000000000000000000000000000002C +:10D500000000000000000000000000000000F0F03B +:10D510000000000000000000FF00C3C3080000205E +:10D52000909000000F0F0F0F0000BDFFBDFF000027 +:10D5300000030000000000000000000000000000E8 +:10D5400000000000000000000000000000000000DB +:10D55000000000C3C3000500050090FF09003F3034 +:10D560000FF000000000C4C4080800000000000024 +:10D5700000000000000000000000000000000000AB +:10D58000000000000000000000000000000000009B +:10D59000000000000000000000000000000000008B +:10D5A000000000000000000000000000000000007B +:10D5B000000000000000000000000000000000006B +:10D5C000000000000000000000000000000000005B +:10D5D000000000000000000000000000000000004B +:10D5E000000000000000000000000000000000003B +:10D5F000000000000000000000000000000000002B +:10D600000000000000000000000000003C3C0000A2 +:10D61000FFFF00000000000000000C42006600E078 +:10D620003C003C000000F0F0000000000000302052 +:10D630000001FFFF0FDF00000000000000000000FD +:10D6400000000000000000000000000000000000DA +:10D650000000000000000000E73C0008000440FF5C +:10D6600000FF2424BDBD00000000000000000000F9 +:10D6700000000000000000000000000000000000AA +:10D6800000000000000000000000000000003C3C22 +:10D69000000000000000000000000000000000E0AA +:10D6A00000E03C003C008080F0F000000000000042 +:10D6B000743000010BFF00DF0000000000000000DC +:10D6C000000000000000000000000000000000005A +:10D6D00000000000000000006060C73C0001000284 +:10D6E00000FF00FF0000FFFF00000000000000003E +:10D6F000000000000000000000000000000000002A +:10D70000000000000000000000000020000000A059 +:10D7100005002A00054000A80000000000000000ED +:10D7200000613006009100000000300000000000A1 +:10D73000000000605006C00D000100000000000065 +:10D7400000000000000000000000000000000000D9 +:10D7500000000000000000000000A00050000000D9 +:10D760000001000000300000000000400006000C36 +:10D7700000000000000000000000000000000000A9 +:10D780000000000000000000000000000000000099 +:10D790000000000000000000000000000000000089 +:10D7A00000000A00080000CFCFCF000000000000FA +:10D7B00000000000000C00087D00707D00000000EB +:10D7C0000000000000000000000000000000000059 +:10D7D0000000000000000000000000000000000049 +:10D7E0000000000000000000000000000000FF003A +:10D7F000FFFF00000000000000000000000000002B +:10D800000000000000000000000000000000000018 +:10D810000000000000000000000000000000000008 +:10D82000000000000A00000000FFFFFF00000000F1 +:10D83000000000000000000000007D00707D00007E +:10D8400000000000000000000000000000000000D8 +:10D8500000000000000000000000000000000000C8 +:10D8600000000000000000000000000000000000B8 +:10D87000FF000000000000000000000000000000A9 +:10D880000000000000000000000000000000000098 +:10D890000000000000000000000000000000000088 +:10D8A000000000000000FFFDEBEB00FF00000000A7 +:10D8B0000000000000000000BEBEBE14FFE33C00FC +:10D8C0000000000000000000000000000000000058 +:10D8D0000000000000000000000000000000000048 +:10D8E0000000000000000000000000000000000038 +:10D8F00000000000F0F00000000000000000000048 +:10D900000000000000000000000000000000000017 +:10D910000000000000000000000000000000000007 +:10D920000000000000000000FFFDEBEB20FF000006 +:10D9300000000000000000000000BFBFBF15002075 +:10D940003C0000000000000000000000000000009B +:10D9500000000000000000000000000000000000C7 +:10D9600000000000000000000000000000000000B7 +:10D97000000000000000F0F00000000088008800B7 +:10D9800000000000200020000000000088000000CF +:10D990000000000000000000000000800000000007 +:10D9A000004000000000000000000400040000002F +:10D9B00004000400040001000300000300008400D0 +:10D9C0000080200000000000000000002000000097 +:10D9D00000000000200040000000200000000000C7 +:10D9E00000100000000000000000000040000000E7 +:10D9F0000000000020000000008020000000000067 +:10DA00000000000000000000000200000000000014 +:10DA100000000000000000000000000000400000C6 +:10DA200000000001000000000000000080008002F3 +:10DA300000008000C000C00004000400000000904E +:10DA40000000000480000000000000C00000400250 +:10DA50004000000040004000200000820000000064 +:10DA600000000000000000000000000000000000B6 +:10DA70000000000000000000000000400000000363 +:10DA80000100000000000000000000000010000085 +:10DA9000000000000000000000000010A0100000C6 +:10DAA000020000400809A000000000000004000976 +:10DAB0000100010040080000000000000004000018 +:10DAC000200000000004100400000000000000001E +:10DAD000000400000000000400000000000200102C +:10DAE0000009000800000000000000000000001015 +:10DAF0000000000000000000020002000000021010 +:10DB000000840200000000840000000000080508F6 +:10DB100000840000000000080000008200000004F3 +:10DB20000082800400850004000000000090008452 +:10DB30000084400804048004000000000004001079 +:10DB40000000800004100009840500000084000823 +:10DB5000000840002010000020020008000000849F +:10DB6000020800000008008800880008000800087B +:10DB700000082000008400000000800880080000E9 +:10DB8000804000029002000000020000000000003F +:10DB90000000000800410000000500000000000037 +:10DBA00000000103000000820100000000000041AD +:10DBB000000800400100000501A100210000000054 +:10DBC000000800002003000888000388000884087B +:10DBD0000403000000000000000000000000000836 +:10DBE0000000001100000000000000000000000024 +:10DBF00000400000000000000000000001000800DC +:10DC000000000021000000000000000000000000F3 +:10DC10000000000000000000000000000000000004 +:10DC2000000000C010000800000404000000000014 +:10DC300000080000050040840000100800000010EB +:10DC40000000000000000900004000001008000073 +:10DC50000000000400A00000000000000000000020 +:10DC600000000000000000000800000000000500A7 +:10DC7000000000000000000000A0000000001000F4 +:10DC8000000000000000000082000000080000000A +:10DC90000000080000000000090000000000000073 +:10DCA0000100000000000000040008000000000067 +:10DCB00000000000008000000180000001880000DA +:10DCC0000000000000000000000900090000101121 +:10DCD0000000000000000000000000000000000044 +:10DCE0000000000000000000000000000000000034 +:10DCF0000000000000000003000000000000000021 +:10DD0000000000030100018000000008000800007E +:10DD10000300000000840800080002000808080052 +:10DD2000008202900308000000A00008000000002C +:10DD300000C000000000002000C0400200001009E8 +:10DD400000000500400000000000400209900000B3 +:10DD500089900000000000000000000000000500A5 +:10DD60000300000000004100000000000800000067 +:10DD700020000000000000C0000000C00000000003 +:10DD800000000000000020000404000084000000E7 +:10DD90000008000000000000000900000000000072 +:10DDA000820000000000000000002000850000004C +:10DDB0001008C000A00000200010C000018000007A +:10DDC00000800008000000000000000000000000CB +:10DDD00001000180000300000000001000000008A6 +:10DDE00000008211000000000000000000000000A0 +:10DDF0000000000000000000000000000000000023 +:10DE0000000890000000000000001000000000006A +:10DE10000000000000000000000000000000000002 +:10DE200000000000000000000000000000002000D2 +:10DE30000000800000000008000100000500400212 +:10DE400000000502000000000000000000000000CB +:10DE50001100200010040000000000000500000078 +:10DE60000000000000000000000000002000000092 +:10DE700000000000000000000084000000A000007E +:10DE80000000090000000000000000848500010877 +:10DE9000010001000100000000000000000000007F +:10DEA0000000002100000000000000000040000011 +:10DEB0008400000001000040000500090009000086 +:10DEC0000803820001020010842100080004000001 +:10DED0000000000000000000000000020009000037 +:10DEE0000000000000000000000000000000000032 +:10DEF0000000000000000000000000000000000022 +:10DF00000000000800000000000000000000000009 +:10DF1000400040A040004000000000000000000061 +:10DF200000000008000000040000090000A0000834 +:10DF300000000310000820A0000108000800009065 +:10DF400000000500000040010000000000A000C02B +:10DF500000004000219020020088000000000082A4 +:10DF600005000000000800000000000000000000A4 +:10DF70000000000000000000080000000000200079 +:10DF80000000000000000000000000000000000091 +:10DF900000000001000090010001000000000000EE +:10DFA0000000000000000000000000000000000071 +:10DFB0000000010000900000000000009000000040 +:10DFC0000000000001004000000000000000000010 +:10DFD00000000003000101C1080100C100000000B1 +:10DFE0000000000000000000000000000000000031 +:10DFF0000000000000000000000000000000000021 +:10E00000000000000000000000000000010000907F +:10E010000000000000081105900800080000000042 +:10E0200000000000000000000000000000000000F0 +:10E03000000000001100218000000000110080009D +:10E04000000000002000210080000000000000000F +:10E0500000000000000000114120911100090000A3 +:10E0600000000000000000000000000000000000B0 +:10E0700000000000000000000000000000000000A0 +:10E08000000000000000000000000000000011007F +:10E0900021800000000010A00500054010100000C5 +:10E0A0000000000000000000000000000000000070 +:10E0B00000000000000000400980002000800000F7 +:10E0C00000800000008009000400100004890000A6 +:10E0D000008000000080000000002182110009097A +:10E0E0000000000000000000000000000000000030 +:10E0F0000000000000000000000000000000000020 +:10E10000000000000000000000000000000000000F +:10E110000041090000030080019100000100008817 +:10E1200000000000000000000000000000000000EF +:10E1300000000000000000000003010800000008CB +:10E1400000000020000000C0000401820000010265 +:10E15000000000040000000200000082018301C0F2 +:10E1600001A100000000000000000000000000000D +:10E17000000000000000000000000000000000009F +:10E18000000000000000000000000000000000008F +:10E190000000100101020000000800004100000121 +:10E1A000000100000000000000000000000000006E +:10E1B000000000000000000000000000A0008290AD +:10E1C000000003000288020001000101000040007D +:10E1D0000000010000000400000000000001000138 +:10E1E00083010101000000000000000000000000A9 +:10E1F000000000000000000000000000000000001F +:10E20000000000000000000000000000000000000E +:10E210000000000000008800C09000000010110500 +:10E2200010080310000000000000000000000000C3 +:10E2300000000000000000000000000009000000D5 +:10E240008080410041008080800009000210004071 +:10E2500000200020020000008000000000000002FA +:10E26000002005201109000000000000000000004F +:10E27000000000000000000000000000000000009E +:10E28000000000000000000000000000000000008E +:10E29000000000000000100000000080410010108D +:10E2A0000500410010110000000000000000000007 +:10E2B00000000000000000000080000000000011CD +:10E2C00080400080000000110000008000804100BC +:10E2D00002052100081000000020000000000000DE +:10E2E000C180A0001000090900000000000000002B +:10E2F000000000000000000000000000000000001E +:10E30000000000000000000000000000000000000D +:10E31000000000000000000000119111000000004A +:10E3200000110020000000010000000000000000BB +:10E330000000008200000000000000020000000059 +:10E34000000120010008000000010000004000085A +:10E3500001040001010001000000000000000000B5 +:10E36000000041C005000500C101000000000000E0 +:10E37000000000000000000000000000000000009D +:10E38000000000000000000000000000000000008D +:10E39000000000000000000000000001200100005B +:10E3A00000004100006000000000000000000000CC +:10E3B000000000000000000000000000000000005D +:10E3C0000000000000E0070000000000000007005F +:10E3D000822100000060060000000000000006002E +:10E3E0000000000048000060000084000000000001 +:10E3F000000000000000000000000000000000001D +:10E40000000000000000000000000000000000000C +:10E41000000000000000000000000000000000E01C +:10E420000700810000000000000000000000000064 +:10E4300000000000000000000000000000000000DC +:10E440000000000000FF000000FF000000000000CE +:10E45000F0F00000000000000000000000000000DC +:10E460000000000000007D7D7D7D000000000000B8 +:10E47000000000000000000000000000000000009C +:10E48000000000000000000000000000000000008C +:10E49000000000000000000000000000000000FF7D +:10E4A000000000FF0000000000000000000000006D +:10E4B000000000000000000000000000000000005C +:10E4C00000000000000000FF000000FF000000004E +:10E4D0000000F0F00000000000000000000000005C +:10E4E00000000000000000007D7D7D0500000000B0 +:10E4F000000000000000000000000000000000001C +:10E50000000000000000000000000000000000000B +:10E5100000000000000000000000000000000000FB +:10E5200000FF000000FF0000000000005555555599 +:10E530000000000000000000000000005555555587 +:10E5400000000000555555550000FF000000FFFF7A +:10E550000000FFFF0000FFFF0000000000000000BF +:10E56000000000000000000000003CFF3CFF000035 +:10E57000000000000000000000000000000000009B +:10E58000000000000000000000000000000000008B +:10E59000000000000000000000000000000000007B +:10E5A00000000000FF0000003C3C0000000055554A +:10E5B0005555000000000000000000000000555507 +:10E5C000555500000000555555550000FF0000004E +:10E5D000000000000000000000000000000000003B +:10E5E0000000000000000000000000003CFF3CFFB5 +:10E5F000000000000000000000000000000000001B +:10E60000000000000000000000000000000000000A +:10E6100000000000000000000000000000000000FA +:10E62000000000000000FF0000003C3C006100070B +:10E63000C00D00020000000000000000000000000B +:10E6400000000002000000000000000215402A0641 +:10E65000054C00A805002A00054000A805410A0E47 +:10E66000050D00A005000A08050000A000000041FB +:10E670003003C001000000000000000000000000A6 +:10E68000000000000000000000000000000000008A +:10E69000000000000000000000000000000000007A +:10E6A00000000000000015402A06054C00A80000EC +:10E6B000000000000000000000000000000000005A +:10E6C000000000000000000000000000000000004A +:10E6D0005555FFFF00000000000000000000000092 +:10E6E0000000002400000000000000000000000006 +:10E6F0000F053C3C1050FFFF000000000000000030 +:10E700000000000000000000000000000000000009 +:10E7100000000000000000000000000000000000F9 +:10E7200000000000000000000000FF00FFFF0000EC +:10E730000C000F140002C0F20000000000000000F6 +:10E7400000000000000000000000000000000000C9 +:10E75000000055550000000000000000000000000F +:10E76000FF00170000000000000000000000000093 +:10E7700000000F050F0520A020A0000000000000F1 +:10E780000000000000000000000000000000000089 +:10E790000000000000000000000000000000000079 +:10E7A000000000000000000000000000FF0000006A +:10E7B0000000000000000030000000000000000029 +:10E7C0000000000000000000000000000000000049 +:10E7D000000000000000F0F0000000000000000059 +:10E7E0000000000000000A5F0A5F00000000000057 +:10E7F00000000000F3FF0C0000FAF0AA0000000087 +:10E800000000000000000000000000000000000008 +:10E8100000000000000000000000000000000000F8 +:10E8200000000000000000000000000000000000E8 +:10E83000F0F00000CF010001303A000000000000BD +:10E8400000000000000000000000000000000000C8 +:10E850000000000000000000F0F0000000000000D8 +:10E8600000000000000000001414BEBE0000000004 +:10E87000000000000000FFFF000000FA00FA0000A6 +:10E880000000000000000000000000000000000088 +:10E890000000000000000000000000000000000078 +:10E8A0000000000000000000000000000000000068 +:10E8B0000000F0F00000848084008820200488801C +:10E8C00020000220000021000180050020A000801F +:10E8D00000200420042005A0210005A021880100BB +:10E8E0000100008000800100010001000100200003 +:10E8F0002000000020200000208000000280008016 +:10E90000000084050000000000000000000000007E +:10E910002000200540100000000010000009000049 +:10E920000000000000800000000000000010000057 +:10E9300000000000000000000020050000010001B0 +:10E94000002020004003000020002020A0840005BB +:10E95000002000018001800190059000A009902016 +:10E9600004000400002000202002200020002000DD +:10E970008000800000000001000000102000004026 +:10E980002020000000000000000000000000000047 +:10E9900000000000000000010000000080000000F6 +:10E9A0000000000040000002000000000000000124 +:10E9B0000000000000000000000000000000000057 +:10E9C000000089000480038001808980880088908D +:10E9D00084000100010000000000880083000000A6 +:10E9E0000000000401004008A10800000000000031 +:10E9F0000000010884008300910000000000000076 +:10EA000000000500008000840000000000000400F9 +:10EA10000000020000000000880000102000000834 +:10EA200000040000008000000080000000000000E2 +:10EA30008200000000110000000000000000000043 +:10EA40000000000004108020400204200420008404 +:10EA5000002000000408040000000008000004007A +:10EA600000080000008940C0800440C02000000071 +:10EA70000008000802840082208420840000000036 +:10EA80000004000804840002000200840008410819 +:10EA90000000000880040084001000842009800029 +:10EAA000008200080008040800040002000800C0FA +:10EAB0004104410800020000008400820084000537 +:10EAC000000300050000000000030008000500210D +:10EAD000000000080408002100000021001000418F +:10EAE000002000110005008501030089004100108D +:10EAF00000090000100500400000000800080000A8 +:10EB000000009100400201A0000800000008001071 +:10EB10000005002100000010004000080020000255 +:10EB200000000040000000000002822100100003ED +:10EB30000040000800100000000000080010001154 +:10EB4000000000000000000000A000080082000893 +:10EB5000000000000000000000000800110000009C +:10EB600000000041000000C0081020004010050017 +:10EB7000000004002100000000000008000000C0A8 +:10EB80000000000008008000044000000000210098 +:10EB90000001000000000000000000000000000074 +:10EBA000000041000000008400000001000000019E +:10EBB000000000000000000105000000000000004F +:10EBC00000840800080008000000820000004110D6 +:10EBD000008040000000000002004000A000820011 +:10EBE000A0000000C000080000000011A0090800FB +:10EBF00082030000000000100000880000000803ED +:10EC0000400000000000A000C003008040000000A1 +:10EC10000400000000040000820000008200048064 +:10EC200001008400A0002000008000030003000019 +:10EC3000C0000021820000102000008008030800AE +:10EC4000C000848000000000000000000000000000 +:10EC50008410000400000000000000000000000814 +:10EC6000000000A00000000008880000008821C00B +:10EC700000A00000000000000800000000C000002C +:10EC80002100408400000000000000002004410238 +:10EC9000400841A021022000000000000000030005 +:10ECA0008020088400A000008000000441000300D0 +:10ECB00040000084030041400001200400100004D3 +:10ECC000410000000002012100800108410000080D +:10ECD00000020010004000030041000000208221DB +:10ECE00000410808A0020841C008000008400000D8 +:10ECF0000810000400210008A000001000002003FC +:10ED000000008200020000000021A1040800A10808 +:10ED100000000020C040A00300008208A004A02042 +:10ED20000200020082080100080000000800200024 +:10ED3000000008210020000002208400021184202D +:10ED4000000000000000000004840020048484848B +:10ED500000080001000000000000000000000000AA +:10ED600000000000000000000000000000000000A3 +:10ED7000000000000001000000100000000008007A +:10ED800000000000000080000000000040081000AB +:10ED9000080000000000000000000000000000006B +:10EDA000000080008000000008000000000000005B +:10EDB000A000000000000000000080002100000012 +:10EDC00000C00000000000840000002100000000DE +:10EDD0000021002100030010000800210441000070 +:10EDE0000421820040004005400000410821C0117C +:10EDF00000050008080884210041001082039021CA +:10EE0000002100008200820040910000000000000C +:10EE10000200200400024000040940050000A00890 +:10EE2000C011A008821000000000000010000000C7 +:10EE300000218400000082000008C00000050000DE +:10EE40002004011000210000091000000000000053 +:10EE50000000000000000000000000000000800032 +:10EE600000008000000000000000000000C0000062 +:10EE7000000003004184002000002000000000008A +:10EE800000000000000000C0000040400000002022 +:10EE9000210021902082000240020000400000007A +:10EEA0000000000021080301000000004000800075 +:10EEB000000000000000030040000010410041403D +:10EEC000000020044000000000000200410011C0CA +:10EED000A0101002108888C1001000880288C08825 +:10EEE000000400088810081000100010C0C00505BC +:10EEF000111041C10288C0048488014090040000C0 +:10EF000000000000000088C00040000282040003EE +:10EF100000C00104820810048283820988218205CE +:10EF20000082000400020088100290040004209077 +:10EF30000000000100010000A1400300100282094E +:10EF40004102009084A02008000001009000000011 +:10EF5000A08010008000800011900089001000093E +:10EF6000000000000280008082800080000080009D +:10EF70001041822188020003900009000300000074 +:10EF800000000000050000000080000005000000F7 +:10EF900000000080418008808080800211A1400331 +:10EFA00000822080008000800000C080808000807F +:10EFB000000000020008400200109041A103000977 +:10EFC0008082108021008080000000000800000086 +:10EFD000000000008010808080008900091005007A +:10EFE000C1900040000400400000000080048082C6 +:10EFF0008000400021049000410509A005084190CF +:10F00000049000030000004000000003000480A002 +:10F010008000000020008802888089A110800208FA +:10F0200090801021000000210080000080008021DD +:10F030008080800000000000040041004080200427 +:10F0400005844188800000008000800000000041AD +:10F0500000800000020010008240C0000800000094 +:10F060008588C109000000880008C0888400400825 +:10F07000104008880290041083100920001100A19C +:10F080000003010200000000000000008800820070 +:10F0900088849082000090A01101A10890030102D1 +:10F0A0000009A1840083000000400002000002006B +:10F0B0000400A082C0000000000001000100000860 +:10F0C0000000014101A002009000A00004840000A3 +:10F0D00000010004000002100021C0A0A0C0080927 +:10F0E0000008010000C103024010000403C00984AD +:10F0F000000810100808C103000940100989218880 +:10F10000A0A0908811010000400000000100100440 +:10F1100004A0001041100000080000020011851139 +:10F120008882002000118304020000000000050016 +:10F13000C0400088000402C000010000010000017E +:10F14000908801A02109000340900040844002C043 +:10F150000001000000000000000900820041088951 +:10F1600080892003210000914100000000000280FE +:10F170008800008080801080082020888583C0411E +:10F18000200900850005C1110000000000001000EA +:10F190008000808000001000000080000005002139 +:10F1A00041A00040021009A1098280000000000077 +:10F1B0008800800000000080808000211002200470 +:10F1C0000041004120912183118880400021008965 +:10F1D00080A0000800030005002080028089000054 +:10F1E0000000A109A01102001010001180210000F0 +:10F1F00000000040808300000000418985050380F5 +:10F200008840094005200400842000000000000020 +:10F21000000000400080008080000000C0008500E9 +:10F220002000402103000280C080C01080008000C8 +:10F2300080008000000080800000800021800000AD +:10F2400011000041900890084100051000100000D6 +:10F25000000000008000000000000000C00020202E +:10F2600010041000C10220900004090002001000E8 +:10F270000888A000100120C11088881089048285A8 +:10F28000C008080002414000890009010000000098 +:10F290000000000040010410844008000000C1107C +:10F2A0000408C1900101829021021084050002002F +:10F2B000040084000400000004022082040001A075 +:10F2C0000000000000010400830140004001000034 +:10F2D0000020008400001000400020004000840056 +:10F2E00000600600000088000060060000000000CA +:10F2F0000060060048000000000006004212000006 +:10F30000006006000000810000600600424100002D +:10F310000060000000000000006006000000000027 +:10F32000500600600600428200000000000000005D +:10F33000000000000000000000060000060082003F +:10F3400060000060000000120000000000000000EB +:10F35000000000000000000000000000000060004D +:10F36000C3CF00000B080000007E0000DBDB0000C4 +:10F37000003CF1FD3D00C2FF00FF00FFFF00EF1069 +:10F38000FFFF0000FF00FFD2000089CF80C080C0D7 +:10F390000000000000000000FFFFFC0066660000A7 +:10F3A0000000F090F00000000000D958FF183C3C2D +:10F3B00018180030C17200000000404C404C3C0066 +:10F3C000306600000000000000001018343C00000F +:10F3D000BDF0000000008181606066426440000072 +:10F3E0000000C3E70000FFFF0000FFFF00009B9B41 +:10F3F00000000000F1F1C2FFC2FF2CD3EF10FF00AC +:10F40000FF00BFFF4000FF00FF9089CF89CF90F041 +:10F4100090F00000000000000000FF7FF040FF03BC +:10F4200003030000F090F0FF0000000FC140FF1840 +:10F43000033F3F3F0030C1300000000000000000EB +:10F44000000030000000000000000000131B373FE8 +:10F45000000099F00000000081813C0042424040E1 +:10F46000000000000000000000000000000000009C +:10F47000000000000000000000000000000000008C +:10F48000000000000000000000000000000000007C +:10F49000000000000000000000000000000000006C +:10F4A000000000000000000000000000000000005C +:10F4B000000000000000000000000000000000004C +:10F4C000000000000000000000000000000000003C +:10F4D000000000000000000000000000000000002C +:10F4E0000000000000000000C3C3000010910000F5 +:10F4F000C3C3000042C30000FFFFFFFF000006FF80 +:10F5000006FFFBFFFFFF08F700FFFFFFFFFFF0F024 +:10F51000F0B00000000000000000000000000C0C33 +:10F52000C3810203F6FF00005840262600000000B9 +:10F530000707195BFF66FF66240024000000000037 +:10F540008999FFFF0090079700000000000000006D +:10F5500000000000000000000000000000000000AB +:10F5600000000000000000000000E7F30000FFFFC3 +:10F570000000CFFF0000FFFF0008FFF70000FFFFC3 +:10F5800006FF3AC30400000000FF00FF40707070E7 +:10F59000FFFFFFBD000000000000000000000000B1 +:10F5A0000C0CFFBD0003F0FF00005ADB2626000014 +:10F5B000001007070143990099002490BD990000AD +:10F5C0000000000066660090069600000000000043 +:10F5D000000000000C0C00000000F6FC0000C3401E +:10F5E000C343000000000000000003E3030E8C0D85 +:10F5F00092C003E3030ECC09B2C00361030F0C0DEC +:10F6000090C0030003080C0010C0030003090C00A5 +:10F6100000C005610A0FC50D00A000610007000DC4 +:10F62000000080615007001D00000000A06150260E +:10F63000800D00A000613006000D000000003000C9 +:10F640000000000000000030009000050060000194 +:10F65000C000000000610006000D0000006100060F +:10F66000009D000080610006000D00000000000009 +:10F670004FBE843F00F3000030303F3F00000000E9 +:10F68000000000000000000000000000707050004A +:10F69000AA0078503F03FF14F303F00000000000BD +:10F6A000000000000000000000000000000000005A +:10F6B0003028005550557F5F2F0F3C003C3C000028 +:10F6C000000000000000000000000000000000003A +:10F6D0000F0F00C3C0C08082A0AAFFD7FF070000A1 +:10F6E00000000000000000000000300AF00C0000E4 +:10F6F000000007BE86BFF3F3000030303F3F00003C +:10F7000000000000000000000000000000002020B9 +:10F7100050000000785003030014FF0FFC0C0000A1 +:10F7200000000000000000000000000000000000D9 +:10F73000FFFFF3EB00555555705020003C003C2076 +:10F7400000000000000000000000000000000000B9 +:10F7500000000F0F00C3C0C0C0C3F0FF00000000D6 +:10F76000000000003C140C0C00000000300A000CEB +:10F770000000000000000000A8AAAAAAFDFF0102E4 +:10F780000000000000000000000000000000000079 +:10F79000C30341000000000000000000C3FFFEFEA4 +:10F7A0000000000000000000000000000000000059 +:10F7B000000000000000200000005555F7750F05FF +:10F7C0000301000000000000000000000000000035 +:10F7D0000000FF77FFFF00000000F0F01000800045 +:10F7E00010100000000000000000000000000000F9 +:10F7F00000000000000000000000FCFFFFFFB0D38D +:10F80000004D0000000000000000000000000000AB +:10F8100000000003410000F0ACAC00000000003C20 +:10F8200002020000000000000000000000000000D4 +:10F830000000000000000000000000005555D755F2 +:10F84000FF55C34100000000000000000000000060 +:10F8500000000000FFFFFF7700FFAAAA10001000C1 +:10F8600080001010000000000000000000000000F8 +:10F87000000000002000C0000000880020002000E0 +:10F880000000200500000000200088008800000023 +:10F89000000000000000000000000000050005005E +:10F8A000048000900000000500000002000000003D +:10F8B00000000002000240088200044040020100F3 +:10F8C000210020828482840000092004880800002E +:10F8D00020000000000000080400200004080000D0 +:10F8E0000000000000000000000000000000000018 +:10F8F0000000000400000000000000020000000002 +:10F9000000000000000000000000000000000000F7 +:10F910000000000000000000000000000000A00245 +:10F92000A0008004000400000000000000010000AE +:10F9300000000000000100000900404000A121017A +:10F9400004000402002100210000000080000000EB +:10F9500000008000000000002000000000200000E7 +:10F960000000008400000000000000000000000013 +:10F970000000000000000000000000000000000087 +:10F98000000000000000004000000000080000002F +:10F990000000000000000440908000009000C000C3 +:10F9A0000000000000000140000084000000000092 +:10F9B0000080000000000040000004000100000082 +:10F9C000002000800000000000100100C1000000C5 +:10F9D000058000000000000000900080888000800A +:10F9E0000002000020802000001000000000000045 +:10F9F000000000808200000002100000410000882A +:10FA00000088000000000000040000000000050065 +:10FA1000008800840000008420840010008800908A +:10FA20000010000000000000040800000002008434 +:10FA3000008400100008000800080000808404080A +:10FA40000008090900020008000800082000200240 +:10FA500009402002000800040008001004100010F3 +:10FA600000100005008400020008040800000000E7 +:10FA7000200000880002008400880084000000004C +:10FA8000000800080000000000400008000000001E +:10FA90000000000800080000000800100005000039 +:10FAA00001000000000300000008404000000008C2 +:10FAB00000000008000800210000002100000040B4 +:10FAC00089820009009000800002000008080021DF +:10FAD000000200000002000000080002000800030D +:10FAE0000040000300000011000000200021000879 +:10FAF00000040000000200030008000800080000E5 +:10FB00000302110000A00082000000A0008200A0FB +:10FB10000088000000100000030800001100030826 +:10FB200000A0080808A000A0008200008082000059 +:10FB300000002184000020000000000000C0000040 +:10FB40000001021103820010084000010010800132 +:10FB5000000000A100200320000000000000400081 +:10FB6000000003000200008200000808088308006B +:10FB7000000400A1000008010008000000000000CF +:10FB800000000000000008008200040000000000E7 +:10FB9000C000040000000800000000000000040095 +:10FBA00008408440A010840000000800A000080065 +:10FBB000824000400800C0000805820082008200E8 +:10FBC0000000000004004009401110000082A00065 +:10FBD000018800100410000000000000A0000000D8 +:10FBE0000000000000080000000000000000040009 +:10FBF0008400000201020109001000020000000060 +:10FC000000000000000000000000000000000000F4 +:10FC100000000000000000000000000000000000E4 +:10FC200000000001000100010000000000000000D1 +:10FC3000000000C0000000100810000000A000003C +:10FC400000000000000020000000408400080003C5 +:10FC500000001009009100840000008241000000B3 +:10FC600000000000000000080000000000C00000CC +:10FC7000A100080000002000200800010000000092 +:10FC80000000100000080000080000000000C00094 +:10FC9000000000000000080000080041080000000B +:10FCA00000000000000000000100C080080000000B +:10FCB00000020005004100000010004000000000AC +:10FCC0000000000000000010000084000880000018 +:10FCD0009003000040000002204000098200000064 +:10FCE0000005C021A0030000080220040000000855 +:10FCF000A0200440084000000008C10808000021BE +:10FD0000C004C0000000008800000000000000A047 +:10FD100009842010201000020008000020840084C4 +:10FD2000008400C000840010038408040810000050 +:10FD300005A0200400A000840000030800000000CB +:10FD40000082210000000000000000A002C0850425 +:10FD5000400040A0000002900010000000000000E1 +:10FD60000000000003C000000000000000080000C8 +:10FD7000004004A100400800080000002001080025 +:10FD80000000088800A0000000000008000000003B +:10FD90000000000000000000000000410000000022 +:10FDA000C000000008000008001008080800000853 +:10FDB0000008000840090000002100008200000443 +:10FDC00000118400900200000000004100040800BF +:10FDD00040108209828200038221000040059021A8 +:10FDE00040000102A184210400004008C02140001D +:10FDF0000000000001809121840400000000001038 +:10FE000000210000000000090000000000000000C8 +:10FE100000000000000000000000000000000000E2 +:10FE20000000000000000000000000000000800052 +:10FE30004100000000000000008400C0000000003D +:10FE4000200400000000000000A0000000C020040A +:10FE5000800040030000090300A000000000000033 +:10FE60000084000040002005A00100000000000008 +:10FE700000000000000004200400000000020990BF +:10FE8000000008000000000000000000000000006A +:10FE90000000000000000000000000000000000062 +:10FEA000000000000000000000000000040000004E +:10FEB00000009000000001001000000000000000A1 +:10FEC000840000000000000090000000000304C057 +:10FED0000009A0048403100101019000100000003B +:10FEE000010084010001C003402100A0A00502A080 +:10FEF000041008A00882A041011184889089A00301 +:10FF00000082100204C00000A00182010001000074 +:10FF100000000000000000000000000000000000E1 +:10FF20000000000000000000000000000000800051 +:10FF300000000000000000004100850000000000FB +:10FF40001000800000000000000000000000000021 +:10FF5000000400840085001000202121000380059A +:10FF600000090204C00200028041800800100083E2 +:10FF70000080C1808080008088A0110880C100209E +:10FF800080C1034180908010002080100003002178 +:10FF90000000000000000000000000000000000061 +:10FFA0000000000000000000000000000000000051 +:10FFB0008000001180C080000020000000200000B0 +:10FFC0000000020005004000100009102000100091 +:10FFD000000000008009808080002000A1008800CF +:10FFE00002050305112009030891080090009011F3 +:10FFF00090100000000000850000028040110010F9 +:020000040026D4 +:10000000042190800820C011081141000300031052 +:1000100010200000000000000000000000000000B0 +:1000200000000000000000000000000000000000D0 +:10003000000040000000A009C0000000000800000F +:1000400000A0000001000100008401000000010286 +:1000500001000000A0020490A008C040C1040940B3 +:10006000A1009040008200000082018821880400E5 +:10007000A1010501000000000010000000C0000107 +:10008000000800210310A101A109030000C0000025 +:100090000000000000000000000000000000000060 +:1000A0000000000000000000000000000000000050 +:1000B000000000000090000400A000C00100040146 +:1000C000C00000000000000000010000000000006F +:1000D00000010000000008A000200890A0C000005F +:1000E00001110809000000000500A1000001C0087E +:1000F00001041184A0088202000200040009041017 +:10010000001091410883048301A10990A08300019C +:100110000100A0000000000000000000000000003E +:1001200000000000000000000000000000000000CF +:100130000000000000000000000000000080100926 +:10014000804000104009000400100021000400203D +:100150000002002100020000C00408102040898035 +:100160004003031010881120004182402004050242 +:100170008080118088800200008300830004008852 +:100180000005050088A109C00002118205051002C2 +:1001900000022041C108000900000000000000002A +:1001A000000000000000000000000000000000004F +:1001B00000000000000000000000000000008000BF +:1001C0000000000300000000000000000000000428 +:1001D00000800000000080200000A1040940908001 +:1001E000880041804040400002054121210021005B +:1001F00004401010218009800810000300008000D6 +:100200008000A104831005000402088040801000D3 +:1002100008080882400040000320000000000000A1 +:1002200000000000000000000000000000000000CE +:10023000000000000000000000001000C00420408A +:10024000100000000000000000000040000000005E +:1002500000008808A000C00008000000090104A1F7 +:100260000490A10001C001A0010201008311A000BF +:1002700009008200018800A00104010182008800B9 +:1002800040000200C10041011000100183A083C0A2 +:10029000A1A0910100090000000000010000000081 +:1002A000000000000000000000000000000000004E +:1002B000000000000000000000000000000000003E +:1002C0000600000000000060060050000000000072 +:1002D000000000000000000000000000000050814D +:1002E00000E00600000000000000060060000000C2 +:1002F000006000000000840000E0000060000000DA +:10030000000000000000000600000700420084001A +:1003100000E00000420000000000000000000000BB +:1003200000000000000000000000000000000000CD +:100330000000000000000000000000000000FF0FAF +:10034000FFEBAFAF00000000000000000000000065 +:100350000000000000005555515100000000000051 +:10036000F700FF00AA00AAAA000000000000000099 +:1003700038AA7DAA0000000000000000FBF1FBF19C +:100380002020202C2C03EC0F3F3FA0AFBA82BABE36 +:100390000000000015003F00000000000000000009 +:1003A000000000000000000000000000000000004D +:1003B000000000000000000000000000000000003D +:1003C000AA00AAAAAFAF0040000000000000000091 +:1003D0000000000000000000FFFFF3FF000000002D +:1003E0000000F7D7FFFF0404000000000000050034 +:1003F000050038AA28AA0000000000000000FFFF46 +:1004000000002020202C2C00EC0C3030A0AF8A8281 +:100410008ABE0030A0A015153F3F0000000000007C +:1004200000000000000000000000000000000000CC +:1004300000000000000000000000000000000000BC +:10044000000000000000FF55BEBE000000000000DC +:10045000000000000000000000000000000000009C +:1004600000000000C3FFC3FFAA004D4D00000000C4 +:10047000000000000000000000000000D7D70000CE +:1004800030303030FFFF0303000000003C0F3C0F12 +:100490000000000029296869CF00FF00000000006B +:1004A000000000000000000000000000000000004C +:1004B000000000000000000000000000000000003C +:1004C0000000000000000000FF00BEBE00000000B1 +:1004D000000000000000000000000000000000001C +:1004E00000000000000083ABC3FFAA000C0C00005A +:1004F0000000100000000000000000000000570293 +:10050000570235FF3535FFFFFF0000000000550F93 +:100510000F0F0000000029294040FA00FA000000F7 +:1005200000000000000000000000000000000000CB +:1005300000000000000000000000000000000000BB +:1005400000000000000000000000004000080561FD +:100550000A0F050D00A000610006000D00000061FB +:100560000006000D0000000085610A3E859D00A583 +:1005700005610A0E051D00A000610007000D0000C6 +:10058000006100048005000000610006000D00000D +:10059000A0610026000D000000610004800500003D +:1005A00000610006000D00000000000000000000D7 +:1005B000000000000000000000000000000000003B +:1005C000000000000000000000000000000000002B +:1005D0000000000001030F0F0000000004C704C763 +:1005E0000000000000CF00450000E0EB000070F2CA +:1005F00070F24000000055054101000000AAB0B0B3 +:10060000B0F05F1E0A1E0000000000000000200382 +:10061000E00F00000034550014004D7D4D55C3031C +:1006200055555055101455005501000000000000AC +:1006300000000000000000000000000000000000BA +:1006400000000000000000000000000000000000AA +:1006500000000000000003030F0F00000000AEEFD9 +:100660002CEF0000000000CF00450000E0EB000090 +:1006700070F270F220004000FF0FC303020200AAD4 +:10068000A0E0A0E05F0F0A0F0000000000000000E3 +:100690002000E00CFFFFFFFFFF003C004D414D55E7 +:1006A000FF3F5555F0FFB0BE55005501000000005A +:1006B000000000000000000000000000000000003A +:1006C000000000000000000000000000000000002A +:1006D000000000000000000000000000000000001A +:1006E0005FAA0A0000000000CFFF4555000083C349 +:1006F000C3C30000000000FF00FAFF0FBE0C303043 +:10070000C3C3000000003F305F5F8ABA8EBE0000A6 +:1007100000000000000000010001C0C00A0AFF0F35 +:100720005C5C5F7DFF7DFCFCFCFCC5F5C50000004A +:1007300000000000000000000000000000000000B9 +:1007400000000000000000000000000000000000A9 +:100750000000000000000000000000000000000099 +:100760000000FFAAAA0000000000FFFF555500008E +:10077000AFFFFFFF00000000FFFFFEFEFF0FFF0FB7 +:100780001C140000010000003F3050508ABA82B2B1 +:1007900000000000000000004141C3C3C0C00A0ABD +:1007A000F0005C5C0028A028FDFDFDFFCFFFCF001E +:1007B000200000000400880020000000200020002D +:1007C000200000002000880020002000040000100D +:1007D000200000008800200000000400200000002D +:1007E000200000022000200420000000000400007F +:1007F00000030400000000000000000800002000CA +:100800000400200000022000200020000008000456 +:100810000000200000000000000400110000200083 +:10082000200020000011200420002000000800000B +:1008300000000000000000000000000000020002B4 +:1008400000020002000000000000000000000000A4 +:10085000000000000000000209000000000000008D +:100860000000000000010300000000000000000084 +:100870000000000000000000000000000000000078 +:100880000400000000000000000000000000100054 +:100890000001000000000000000000000000000057 +:1008A0000000000000000000000100000000050042 +:1008B0000000000000000000001000002000000008 +:1008C0000000000000000000000000000800000020 +:1008D000020004000000000000000000040000000E +:1008E0000200008001000000000000800080050080 +:1008F000000000090000000000800000000000006F +:1009000084800000001000000008010004000000C6 +:1009100090800000000000090000000000000010AE +:10092000000001000000000000C000000000020004 +:10093000000000900000000000000000000880009F +:10094000000000C0000000040000000000080408CF +:10095000000800000008000000080008000811005E +:100960000008000000100200048800C0000200021D +:100970000210000004080000200000020008000827 +:100980000000000200000000000000100210000043 +:100990000000000400080004040000000008000833 +:1009A00000080000028800080000000400080000A1 +:1009B00000000004000400840000000000000000AB +:1009C0009000000090000000020000002000C00025 +:1009D00000009000000000002000000000008800DF +:1009E000C0100000C0000000000000000000000077 +:1009F0000000000000000100000000000021C00015 +:100A000000410021882000050002000400210004AC +:100A1000400300210021002100000011002100807E +:100A200000000005402100404000000000210009B6 +:100A3000A0210021200300400020008200000000CF +:100A40000000000000080000000000000008008214 +:100A5000000000A0080000100800030003000900C7 +:100A6000000000C000000000000020000308000893 +:100A7000000003820820080040A0000000C0000021 +:100A800000000800000008900040009121000904C7 +:100A900000080000008200000000000800C0008480 +:100AA000000403000000008800000000050800A00A +:100AB0000082028800008082009000400000000058 +:100AC000A00008000000000000008200C000080034 +:100AD0008200082000000000040082000000C00521 +:100AE0000000000008040000004100410000010077 +:100AF000000900000100000000400100000000406B +:100B00000040004000400040000000400040010064 +:100B10000000000040400005000000000000004010 +:100B20000040000001000000008020800440000818 +:100B3000000000110000040000008300C00000005D +:100B400000000000000000000000000000000000A5 +:100B50000000000000010000000000000000040090 +:100B6000000011000000000000000000000009006B +:100B700002001188000002000000000102000000D5 +:100B80001185410100010001000100000001000188 +:100B900002040000000000010084110000000000B9 +:100BA00000010001000020A01100000480040001E9 +:100BB00000000900110040000000008220000082B7 +:100BC00000000000000000000200A000000000087B +:100BD00000000000000000000000004008000000CD +:100BE000000082000000820000000000820002007D +:100BF00000000000024000000000900008004000DB +:100C0000000002110441004004A100000040012046 +:100C1000000800000221200400000300C10400407D +:100C2000020500414021C0020204008001200008AA +:100C300000009008201101000100000320030211B0 +:100C4000024000000008000800000400000000004E +:100C5000000000000000000800000000000000008C +:100C600000900000000008000300000000000000E9 +:100C70000800000000000000000000000908080053 +:100C80000400000008A04000080000020500024027 +:100C900040080084008480000000028802020203F1 +:100CA000028880880008000000042101044002003E +:100CB00020200084000889A00200020205008000B4 +:100CC000800883000200080000000000000000000F +:100CD00000000000000000050000000000000040CF +:100CE00000000040000000000000000000000004C0 +:100CF0000000080000000041000000210021002148 +:100D00000008000200000000C021000000000421D3 +:100D100001210000000000000021000300029021DA +:100D20000121008090000041002100A10021000568 +:100D30000021000004000008202120000002000023 +:100D400000020002C00000000000000000000000DF +:100D50000000000000000000000000000000000093 +:100D6000000000000000030003000000000020005D +:100D700000000000000000400000200021000000F2 +:100D80000000000000000000000009004100000019 +:100D900000880200410040840000000000000000C4 +:100DA00000002000000400002100000000040000FA +:100DB0000000110000A000000000A000C08840005A +:100DC00000042102210200000000000000000000D9 +:100DD0000000000000000000000000000000000013 +:100DE0000000000000000000000000000000000003 +:100DF000C0000000000084000801C0000201900053 +:100E000090039008028888820000022188080285E9 +:100E1000082103410003088888110808020800829D +:100E2000822002030402000910110808030840820E +:100E300084020803000200111003020302020008EA +:100E400008100809080800118221000000000000B5 +:100E50000000000000000000000000000000000092 +:100E60000000000000000000000000000000000082 +:100E7000000000000000000000008040200380030C +:100E80000020084000830041009100008020118371 +:100E90000020119020900402004100828080008098 +:100EA00000808000004100020091808384802180C6 +:100EB0008080008080410002009180080041004154 +:100EC0000091009180C180C10088808800000000EE +:100ED000000000000005000000000000000000000D +:100EE0000000008000000000000000000000000082 +:100EF000000000000000000080008000C180400071 +:100F0000400409800000008900000080000090007B +:100F1000409040004083A010088908880382800028 +:100F200080910000808009800289090010919180E1 +:100F3000A1C10911098391808289118004A0A08038 +:100F40000282901183C08980898990118983000071 +:100F50000000000000000000000000000000000091 +:100F60000000000000080000000000000000000079 +:100F700000000000000000009000A0000800081021 +:100F80009100030188C0900002C0088490C0000056 +:100F9000090003C1030221C1840003C0020390C001 +:100FA000080008C0020210C0C00202C0030488C0CA +:100FB000084008C0030389C0080808C0020291C0A5 +:100FC000418802C0100383C1088840C0100582C157 +:100FD0000000000000000000000000000000000011 +:100FE0000000000000000000000000000000000001 +:100FF000000000000000000000040020004000404D +:10100000001000020111000891110008C0401011E9 +:10101000000009100108C141838203100003C010C1 +:10102000111003100008C088108889100002C1C088 +:10103000108883100208C083108985100102C1C086 +:10104000108211100102C010100289100110C0207E +:10105000100200000000000000000000000000007E +:101060000000000000000000000000000000000080 +:101070000000000000000000000000000000000070 +:101080000000000009040421000241080091808052 +:1010900000900000C100408488A18884412005039D +:1010A00088834084410000808000000041000800E7 +:1010B0008300000041090082808510094100110071 +:1010C00088000080C10011008880008041001180EC +:1010D000A0000080000000000000000000000000F0 +:1010E0000000000000000000000000000000000000 +:1010F0000000000000000000000000000000008070 +:101100000000000021800400090002080008000916 +:10111000008000000000A189840211808403210066 +:1011200008004080090480088000008000000280E0 +:10113000111109800341C18889024180910383A074 +:10114000090909802020108082090980880390897C +:10115000A1090900090300000000000000000000D0 +:10116000000000000000000000000000000000007F +:10117000000000000000000000000000000000006F +:101180000008001000000102001000100001020021 +:101190008810108208000000090208101084100056 +:1011A0000304031011109000080108101040900073 +:1011B00002A002111110900009080810101003017C +:1011C00008A102101140910188A00811111010010E +:1011D00008A01011118808010000000000000000A4 +:1011E000480000E00000000000420000070000008E +:1011F00000000000000000000000000000000000EF +:10120000000000000000000000000000000000429C +:101210000000000000004842000000000000000044 +:1012200048420000000000004842000000000000AA +:101230004842410000E000004842410000E0000058 +:101240004842410000E000004842410000E0000048 +:101250004842410000E00000484200000000000059 +:10126000000000000000000000000000000000007E +:10127000000000000000000000000000000000006E +:1012800000000000000000EFEFEF00000000BFBF13 +:10129000BF20F0F03C663F393630000078F93CFF63 +:1012A0003CF6F6F6F0F0663CBDFFB4F0F978FF3C92 +:1012B000BD2DB424F0F0663CBDB42D2478F93CFF7C +:1012C000BDFF2D0FF0F03C66BDB4FFF07878F960FB +:1012D000BFBFBF20F0F03C66BD2DB424000000006D +:1012E00000000000000000000000000000000000FE +:1012F00000000000000000000000000000000000EE +:10130000000000000000000000FFFFFF00000000E0 +:1013100020BF20203C663C66FF9966000000786094 +:101320003C003C060606663C663C2D0F24006078B7 +:10133000003CFF0FF000663C663CFFF00F00786059 +:101340003C00B4F024003C663C662D240F003C3C7D +:10135000FF0020BF20203C663C66FF0FF00000002D +:10136000000000000000000000000000000000007D +:10137000000000000000000000000000000000006D +:10138000000000000000000000000000000000005D +:10139000000000000000000000000000000000004D +:1013A000000000000000000000000000000000003D +:1013B000000000000000000000000000000000002D +:1013C000000000000000000000000000000000001D +:1013D000000000000000000000000000000000000D +:1013E00000000000000000000000000000000000FD +:1013F00000000000000000000000000000000000ED +:1014000000000000000000000000000000990090B3 +:10141000000000000F270F270F0F0F660636C6F6D5 +:1014200000002D242DBD0F27FFE72427E7273606D0 +:1014300036F63CFF36F60F27FFE7FF0FE7273606A5 +:1014400036F6FF3CF6360F27FFE7FF3CF636F7048B +:10145000F7F73F3F3F6600FF06F63F3F3F660FFF4F +:1014600027E700000000000000000000000000006E +:10147000000000000000000000000000000000006C +:10148000000000000000000000000000000000FF5D +:1014900000F0000000000024FFE73C3C3C66003CFC +:1014A000C3FF00000F000FFF0F270024000FFF0FE6 +:1014B0003C003CFF3C0036060024F0E4000F2427EB +:1014C0003C003CFF003C06360024F0E4003C0636BD +:1014D000040404F7030303663C3C363630303066C0 +:1014E0000F0027240000000000000000006100063B +:1014F000800D000000000020000000A0000000009F +:1015000000000000000000000000000000000000DB +:101510000000000000610006002D100240618006FE +:10152000002D1002000040618006002D1002406175 +:101530008006002D10024000800000201002406153 +:1015400080048025100240618006802110024061E5 +:1015500080048025100240618004802510024061D3 +:101560008004802510020000000000000000000040 +:10157000000000000000000000000000000000006B +:10158000000000000000000000000000000000005B +:10159000000000000000E0EB0000005F0000000021 +:1015A000000001010000000000F30000000F000532 +:1015B000C0F000000000000000000000000000007B +:1015C000553C0F0F00000000FF3C0F55C7D7EFFF41 +:1015D0005F1F4B0B000000001717171700000000DB +:1015E000D70F140F000000000000000000000000F2 +:1015F00000000000000000000000000000000000EB +:1016000000000000000000000000000000000000DA +:101610000000000000000000E0EB0000005F005F41 +:1016200000000000010100000000F3F3000000FFD3 +:101630000055C3FF00000100000000000000000092 +:101640000000550F0F0F00000000003C0F55001068 +:1016500028381E1F0A0B000000003F0F030F000078 +:101660000000170F170F000000000000000000002E +:10167000000000000000000000000000000000006A +:10168000000000000000000000000000000000005A +:1016900000000000000000000000C3FFC2FAFFF7D6 +:1016A0000000C0F0C3FF00000000000083AFC3FFD4 +:1016B000C3C3C3C1A8AAFCFF0000000000000000D3 +:1016C000000000003C0F55FF4F7FCFFF00000000DF +:1016D00008F80DFD3C0FFF55FF2DFF7DCF0C7D7DE4 +:1016E000EFEF2FEFCF0C7D7DCFFFEBEB0000000085 +:1016F00000000000000000000000000000000000EA +:1017000000000000000000000000000000000000D9 +:10171000000000000000000000000000C3FFC3FF45 +:10172000FFF7FFF7C0F0C3FF000000000000C3FF99 +:10173000C3FFFFFFFFF5AAAAFFFF010000000000A2 +:101740000000000000003C0F5500003080B0000099 +:1017500000000000FFFF3C0F005500280078CF0C70 +:101760004141202020E0CF0C4141003028280000DA +:1017700000002000200020002000000020080000C1 +:1017800000000000200020000000000820000000F1 +:101790000000200020000000000000000400010004 +:1017A000010001002100000000000000040400000E +:1017B0000000000000000002100000000000000017 +:1017C0000000004100000400000000008804000048 +:1017D00004000409040404000000000200000000EA +:1017E00000000011000000020002000000020004DE +:1017F00000000000000000000000000000020000E7 +:1018000000000000000000000000000000000000D8 +:1018100000000000000000000000000000000000C8 +:101820000400048204008400110000000000000095 +:101830000000000000000000000180000002000025 +:101840000000000200000000000400000000008210 +:101850000000000000000000000000000000000088 +:101860001000000000000000000140000000000027 +:101870000000000000000000000000000000000068 +:101880000000000000000000000000000000000058 +:10189000044082008240000000400200000000007E +:1018A00000100000000000000000000000000080A8 +:1018B00000000000004000000000000000000000E8 +:1018C000008082100000040800000000A00000005A +:1018D00000000010000000000000000500000000F3 +:1018E0000000881000000008000000000200020054 +:1018F00000000410000000000000000000000400D0 +:1019000000000010000004000000000800000000BB +:1019100000840004000000000400000020002000FB +:10192000000400840000000000000010000000001F +:10193000000200100000000400000300000000008E +:10194000000000020000000010000000200800005D +:1019500000000000000400000000008800000000FB +:101960000008000000000300000800000088008458 +:101970000500001005080000000000000000000045 +:101980000000000000000000000000000000000057 +:101990000000000000000000000000000400000043 +:1019A000820000089000000000000000000000809D +:1019B0000080000000080000008000802088C080B7 +:1019C0008880C089008408A100A1008000A108804F +:1019D0000080008900A1048804A1008800A1218062 +:1019E00004C0008020A1008002A1888088A188888E +:1019F0000083408002A14080000000000000000041 +:101A000000000000000000000000000000000000D6 +:101A10000000004000000000000002000000004044 +:101A200000001100000008000000000000A00008F5 +:101A300002400040008811000000094000400040C2 +:101A40000040004000400040024000400040004094 +:101A50000040004000400040004000400040004086 +:101A600002400840004000400040844000400240E6 +:101A7000004000400040C0408240000000000000E4 +:101A80000000000000000000000000000000000056 +:101A900000000000A0000000000000000000200086 +:101AA000C009000200050041000000000004000021 +:101AB0000800000000000000080500000000000011 +:101AC0000080000090410011C0800100000401046A +:101AD0000083000001000000000009000000000079 +:101AE000000000000000000000008205000000006F +:101AF00000000000A00400410802A0020000000055 +:101B000000000000000000000000000000000000D5 +:101B100000000084000000000000001011002100FF +:101B20000000110000000300000000000000008819 +:101B300000000000000000004000008400000000E1 +:101B4000000000402040000000000040408400C031 +:101B5000020400400000020000000000020000003B +:101B600000000000000000840000000000000000F1 +:101B7000000000840000000021000000034000007D +:101B80000000000000000000000000000000000055 +:101B9000080000000000C000000000000000000875 +:101BA0000000000000000000000000000000000035 +:101BB000A000000000000800000004112000000048 +:101BC000000000004005C0030000000800054003BD +:101BD00000050021C00500030000C004000500024C +:101BE0000005000000031003004000400005000055 +:101BF00000002000004000210020000040200000E4 +:101C000000200000000000000000000000080000AC +:101C10000000000000000000000000820000000042 +:101C2000000021000200020020000000000000006F +:101C3000110200000900008220C000A011881102DA +:101C400000001102000008820388020202A00202C2 +:101C50000302028200080000050200A000840008C0 +:101C6000098240020000009021900020000020081E +:101C70000084090220C00090210800C00004111057 +:101C800000820000000000000000000000000000D2 +:101C90000000000008000000000000000800000034 +:101CA00000080000000000000000080008004000DC +:101CB00000000000001100000000010001004000D1 +:101CC00000000000012100800004090400809080D1 +:101CD0000021008301210000002101104008C00004 +:101CE00000A18800002100410021880091030080AC +:101CF000C02188000421202100A109080000000063 +:101D000000210005000000000000000000000000AD +:101D100000000000000000000000000000000000C3 +:101D20000000000000002100000000000000000092 +:101D300000001100000400000088024002000202BE +:101D40000084000000000202004000000202004087 +:101D500000400000004002000000000002000300FC +:101D60000000004000002100000000000000020010 +:101D700000400000000000000000004002000000E1 +:101D80000000000000000000000000000000000053 +:101D90000000000000000000000000000000000043 +:101DA0000000000000000000000000000000000033 +:101DB0000000000000000000000000000000000023 +:101DC0000000000008000001900200200488089034 +:101DD00010088510820220089002002000028890DE +:101DE0000908000200028810020200040008A00294 +:101DF00002080090000290088202A10384080202F7 +:101E0000A0081108820282C000000000000000004B +:101E100000000000000000000000000000000000C2 +:101E200000000000000000000000000000000000B2 +:101E3000000000000000000000000000050000009D +:101E4000000000000000000000001000038080007F +:101E500080008080088080000000100000800080EA +:101E60000000A08000800000000080800000008052 +:101E7000000000800000000000000011A01000859C +:101E80000020008082800000800000000000000030 +:101E90000000000000000000000000000000000042 +:101EA0000000000000000000000000000000000032 +:101EB00000000000000000000000000000800000A2 +:101EC000000082008800090009800000800000A056 +:101ED0008083008090008490A080418080000085F5 +:101EE000809000808000809080800080800000844E +:101EF000808080808000008880800080840004C111 +:101F0000A088038984008582408040800000000012 +:101F100000000000000000000000000000000000C1 +:101F200000000000000000000000000000000000B1 +:101F3000000000000000000000000000000000049D +:101F40000000004009001100080090C0000040009F +:101F500002C1080802C0080010C1110891C0400069 +:101F600002C0080810C0080002C0400802C00200F9 +:101F700002C1080810C0080088C0080802C0051087 +:101F800003C0090903C0090010C0118202C000008B +:101F90000000000000000000000000000000000041 +:101FA0000000000000000000000000000000000031 +:101FB0000000000000000000000000000000000021 +:101FC0000000A000000000000000008800080000E1 +:101FD00011030021C089101189090089C0088810E7 +:101FE00009020002C008101011020010C0020810FF +:101FF00003020010C008101011080008C0028288F7 +:1020000091030002C009080311090008C003102150 +:1020100000000000000000000000000000000000C0 +:1020200000000000000000000000000000000000B0 +:1020300000000000000000000000000000000000A0 +:102040000500000000000300000000000000110077 +:102050000000C12000088004808441C0000280117B +:102060000085C100008080808080C1800080800069 +:1020700000004100008080808080C180008080005E +:1020800000004120201090A10084C18400828021A2 +:10209000000200000000000000000000000000003E +:1020A0000000000000000000000000000000000030 +:1020B0000000000000000000000000000000000020 +:1020C0000000000000400000000000000080000050 +:1020D000000200000010800000008000800000006E +:1020E00000008008000080800000800080080080E0 +:1020F0000080000000008000000080008000008060 +:1021000000008000008811080380914080208088B2 +:1021100000808002000000000000000000000000BD +:1021200000000000000000000000000000000000AF +:10213000000000000000000000000000000000009F +:102140000000000000000000000000000084008289 +:102150000002000000000201202088881000088290 +:10216000089008081000020002022002100002017C +:102170008820020804000200048202020400080011 +:1021800088080888040002A1020203400401082113 +:102190000809C040820100000000000000000000AB +:1021A000000000000000000000000000000000002F +:1021B000000000000000000000000000000000001F +:1021C00000000000000000000060060000000000A9 +:1021D0000000000000420000000000000000484233 +:1021E00000000000000048420000000000004842DB +:1021F00000000000000048420000000000004842CB +:1022000000000000000048420000000000004842BA +:102210000000000000004842000000000000000034 +:1022200000000000000000000000000000000000AE +:10223000000000000000000000000000000000009E +:10224000000000000000000000000000000000008E +:1022500000000000FF00FFFF00000020FFFF282813 +:1022600028F80020FFFF303030BA0028F0F8282886 +:1022700028F800FF20FF0030AABA00A03CBC3C3C7C +:102280003CBC00A03CBC3C3C3CBC0020FFFF2828E0 +:1022900028F80028F0F8282828F80000000000009E +:1022A000000000000000000000000000000000002E +:1022B000000000000000000000000000000000001E +:1022C000000000000000000000000000000000000E +:1022D000000000000000000000FF000000200020BF +:1022E0002828282800200020303030300000F0F06E +:1022F00028282828000020200000AAAA00003C3C32 +:10230000000000A000003C3C000000A000200020D5 +:10231000282828280000F0F028282828000000009D +:1023200000000000000000000000000000000000AD +:10233000000000000000000000000000000000009D +:10234000000000000000000000000000000000008D +:1023500000000000000000003D3C050000003D3C86 +:1023600005005D0C0C0CFFFF04003D3C05003D3CEE +:1023700005005D0C0C0C3D3C05003D053C00FF04D8 +:10238000FF003D0505055D550C003D3C3C3CFFFF55 +:1023900004005D0C0C0C3D3C05003D3C3C3C000049 +:1023A000000000000000000000000000000000002D +:1023B000000000000000000000000000000000001D +:1023C000000000000000000000000000000000000D +:1023D000000000000000000000003C3C0000000085 +:1023E0003C3C00000C0C0C0C040004003C3C0000C5 +:1023F0003C3C00000C0C0C0C3C3C00003C003C0045 +:102400000404000005050505555500000500000001 +:10241000040004000C0C0C0C3C3C00000500000007 +:1024200000000000000000000000000000000000AC +:10243000000000000000000000000000000000009C +:10244000000000000000000000000000000000008C +:1024500005610A0F050D00A000610006002D1002A5 +:10246000000040618006002D100240618006002DB2 +:102470001002400080000020100240008000002078 +:102480001002400080000020100240008000002068 +:10249000100240618006002D100240618006002D70 +:1024A000100200000000000000000000000000001A +:1024B000000000000000000000000000000000001C +:1024C000000000000000000000000000000000000C +:1024D00000000000000000000000000000000000FC +:1024E00000000000000000000020141400000000A4 +:1024F000C3410301000000000000000000000000D4 +:1025000000000000000000000000000000000000CB +:10251000000000001C0C1C0CFFFF1000000000005D +:102520005D5DDFDF00000000000000000000000033 +:10253000000000000000000000000000000000009B +:10254000000000000000000000000000000000008B +:10255000000000000000000000000000000000007B +:10256000000000000000000000000020000000004B +:102570000000FF550F0500000000000000000000F3 +:10258000000000000000000000000000000000004B +:1025900000000000000014001400FFFF1400000001 +:1025A00000005D08D782000000000000000000006D +:1025B000000000000000000000000000000000001B +:1025C000000000000000000000000000000000000B +:1025D00000000000000000000000000000000000FB +:1025E00000000028C0C00000000000000000000043 +:1025F00000000000FFF01C3C000000000000000094 +:1026000000000000000000000000000000000000CA +:1026100000000000000000008082C0C383828300AD +:1026200000000000F4FCF6FE0000000000000000C6 +:10263000000000000000000000000000000000009A +:10264000000000000000000000000000000000008A +:10265000000000000000000000000000000000007A +:10266000000000000000000000000000000000006A +:10267000000000000000FFF03C3C000000000000F3 +:10268000000000000000000000000000000000004A +:1026900000000000000000000000A0AAF0FF83007E +:1026A000830000000000141C161E00002000000023 +:1026B00000000000020000000000000020000000F8 +:1026C00000080000000000002004000220000000BC +:1026D00000000000000200000000000000000000F8 +:1026E00000000000000000052000000300000410AE +:1026F00000200083000000800004000804000000A7 +:1027000000210000001000200088200000000000D0 +:102710000004001100000005008400040000000017 +:1027200000200082000000000010200000000000D7 +:102730000000000000000000000200000000000097 +:102740000002000400000000000000000000000083 +:102750000000000000000000000000000004000075 +:102760000000000000000000000000000000000069 +:102770000000000100200000000400000000000034 +:102780000000000000020000000100200000000026 +:102790000000000000000000000000200000208277 +:1027A0000000000100200000000000000000000008 +:1027B0000000000000000200000000000000000017 +:1027C0000000000000000000000000000000000009 +:1027D00000000000000000000000000009000000F0 +:1027E00000000000000000000200000000000000E7 +:1027F00000000000000002000000008000000080D7 +:1028000000000200000002000000000002000000C2 +:10281000020000000000000000000000080000802E +:102820000400100004009000A00000000000000060 +:10283000000000000000000004000000000000880C +:102840000000000000000088000000000000000000 +:102850000000000000000000000000000000020076 +:102860000000000000000008000000000000000060 +:102870000000000000000000000000000004000054 +:102880000420000000000000000400080000000018 +:102890000000000000000008000000000000000828 +:1028A0000020000000008000000000040000008400 +:1028B0000004000000000000000000000000000014 +:1028C0000000000000000000000000000000000008 +:1028D00000000000000000000000000000000000F8 +:1028E00000000000000000000005880920008400AE +:1028F000040000002000C000008020000021002112 +:10290000830811210010C00004800400002100A1F0 +:102910002003002100002000008590800005102188 +:10292000008584210000000004000200A0000021B6 +:102930000000002100000000000000000000000076 +:102940000000000000000000000000000000000087 +:102950000000000000000000000000000000000077 +:1029600000000008000000000000000000042088B3 +:102970000500808200000000000000202004000408 +:102980000004040004840004000080208002000091 +:1029900000200090009000C00000002000200004F3 +:1029A000100000200500000003088000020400A0C1 +:1029B0000008008800000000000000000000000087 +:1029C0000000000000000000000000000000000007 +:1029D00000000000000000000000000000000020D7 +:1029E00000000020000000000000000000000003C4 +:1029F0000000040002000000200008000000200089 +:102A000000000000000000030000000000002000A3 +:102A1000000000000000000000000800008000002E +:102A20000000000000000400040500080000000091 +:102A30000000000000080008000000000000000086 +:102A40000000000000000000020000000200020080 +:102A50000000210000000000000020000000000035 +:102A6000000021000201020000840890008800009C +:102A70000020000080400090000000200000400086 +:102A800080C0000000C00000030000100000000033 +:102A9000000000000084000000080000001000207A +:102AA0000000000000A00000800000000000000006 +:102AB0000000000000000000030000000000000013 +:102AC0000000000000000000000000000000000006 +:102AD00000000000000000000000000000000000F6 +:102AE00000000040000000000000000300000000A3 +:102AF000000502000000052000100000900000000A +:102B000001040120000200A105A100000000000551 +:102B100001400100002100000180000800000005C4 +:102B2000000000000000000001000180000000051E +:102B300000A00100000000210000000000000000D3 +:102B40000000000000000000000000000000000085 +:102B50000000000000000000000000000000000075 +:102B60000000000000A1000800000020000020007C +:102B70000000000000820004848500A00000200402 +:102B800000002009209110904004840440000004BB +:102B9000000004000400008800020420000000007F +:102BA0000000110000004004000404C004204000A4 +:102BB00009081121040000000000000800000000C6 +:102BC0000000000000000000000000000000000005 +:102BD00002000000000000000000000000000000F3 +:102BE00002000000000000000000000001000000E2 +:102BF000000000000000000800000000004100008C +:102C000000212000002020002021002000002021A1 +:102C10000005000000000002002100210021002129 +:102C200020002010002000000005002100052021C8 +:102C300020040005000400000021002100200021E4 +:102C40000000000000000000000000000200000082 +:102C50000000000000000004000000000000000070 +:102C60000288058200000000000208021100040230 +:102C700000900002200009C000A000A0000011A0E8 +:102C800000000000000000010000000000A00000A3 +:102C900000020082030000000000000000000000AD +:102CA0000000000000000000000000000000000024 +:102CB0000000000000000200000000000000000012 +:102CC0000000000000000000000000000000000004 +:102CD00000000000000000000000000000000000F4 +:102CE0000000000000000000000088C00004008810 +:102CF000C0000000000000000000A0C0022000840E +:102D00008802000102C001824010100802C10009BF +:102D100000851002C0C000080084C008A002008224 +:102D20000088101088C000900084400804C000088B +:102D300000081002C0C0008200401008000000001F +:102D40000000000000000000000000000000000083 +:102D50000000000000000000000000000000000073 +:102D60000000000000000000000000008080000063 +:102D70000080800000000000000000001180008042 +:102D8000008000000000028021808000808000C15F +:102D90000010009180028080000000808080800010 +:102DA0000000008080800080000000800080808023 +:102DB0000000000080009180008000808080000082 +:102DC0000000000000000000000000000000000003 +:102DD00000000000000000000000000000000000F3 +:102DE00000000000000000000000000000000000E3 +:102DF0000003800000800000000000000000800050 +:102E0000000000008080000089804000200089834D +:102E1000C1800200400203838000800080000080A7 +:102E20000000001100800000000080008000008091 +:102E30008000800080000080000080000000808012 +:102E40000000000000000000000000000000000082 +:102E50000000000000000000000000000000000072 +:102E60000000000000000000000000000000000062 +:102E700002001001840084900000000000000000A7 +:102E80000800020084008290000008100300850002 +:102E9000119008080400850002900400080010004A +:102EA00002900000000100840090820008000800E9 +:102EB000A090080008000800C09084000800A0004E +:102EC000049000000000000000000000000000006E +:102ED00000000000000000000000000000000000F2 +:102EE00000000000000000000000000000000000E2 +:102EF0000000101000A0009089C000000000000039 +:102F000000008802000200C010880000400800098C +:102F100090C091894004010491C0108840080008C5 +:102F200090A01104848400200008A0C090080082B2 +:102F300090088382400800829008C1A00284008229 +:102F4000008403C00000000000000000000000003A +:102F50000000000000000000000000000000000071 +:102F60000000000000000000000000000000000061 +:102F70000000000080800080008089800000000048 +:102F800000000000000000000000008000008089B8 +:102F900000C0801111A08000118085008880808091 +:102FA0000080800009800000008000800000008018 +:102FB00000808080890080800080808089000000FF +:102FC0000080000009000000000000000000000078 +:102FD00000000000000000000000000000000000F1 +:102FE00000000000000000000000000000000000E1 +:102FF00000000000000000040011000000000000BC +:103000000000000000000000008000000000000040 +:10301000410011800500091140800280090005402F +:10302000000000800000000080020000800000001E +:10303000000900C100800000000000A10080000025 +:103040000000008000000000000000000000000000 +:103050000000000000000000000000000000000070 +:103060000000000000000000000000000000000060 +:1030700000000000000000001001000484848400AF +:103080000000000000000000000000A0000400009C +:103090000000010200A00104000001A000A0010442 +:1030A0000000000000A000A00000C0000800900088 +:1030B0000200000000A000400000000000050082A7 +:1030C0000000000000A000840000000000000000DC +:1030D00000000000000000000000000000000000F0 +:1030E00000000000000000000000000000000000E0 +:1030F0000000000000000000000000810000060049 +:103100000021000000000000000000820000070015 +:1031100000000000418200E007000000418200E062 +:1031200007000000008200000700841200820000F7 +:10313000070000000082000007000000008200007D +:10314000070000410082000007004200000000006C +:10315000000000000000000000000000000000006F +:10316000000000000000000000000000000000005F +:1031700000000000000000000000000030300000EF +:10318000DF20565600000000000000000000000094 +:103190003C00FFC30000000000003820FBE30000FB +:1031A00000006220FBB900000000BDBD8181FCC0B1 +:1031B000E7E7F6C6360600000000FCF4FCD000008D +:1031C0000000E4FCE4C000000000E4FCE4C00000F7 +:1031D00000000000000000000000000000000000EF +:1031E00000000000000000000000000000000000DF +:1031F00000000000000000000000000000000000CF +:103200000000FF00666600000000000000000000F3 +:1032100000002020EFEF0000000000002020FBFB5A +:10322000000000002020FBFB00000000B989B989E4 +:10323000FCC024247646764600000000C0F4C0D0CE +:1032400000000000E4F0E4F000000000E4F0E4F02E +:10325000000000000000000000000000000000006E +:10326000000000000000000000000000000000005E +:10327000000000000000000000000000000000004E +:10328000000000000000000000000000000000003E +:10329000000000000000000000000000000000002E +:1032A000000000000000000000000000000000001E +:1032B000000000000000000000000000000000000E +:1032C00000000000000000000000000000000000FE +:1032D00000000000000000000000000000000000EE +:1032E00000000000000000000000000000000000DE +:1032F00000000000000000000000000000000000CE +:1033000000006669000F00FF04FB000000000000E1 +:103310000000C300D8D8919D939F00001818F33087 +:10332000919DB1BD3C00D8D8919DB1BD1818FCC08D +:10333000999F993C0F0F666600000000427E3F3F58 +:103340006C006CFFC3FF4E4EF3E7FFE727273CFFFF +:1033500042427E7E000000000000000000000000ED +:10336000000000000000000000000000000000005D +:10337000000000000000000000000000000000004D +:10338000000000006666000F00FF00FF0000000064 +:1033900000000000FF3CD8D8919D909C0000DBDB32 +:1033A000F330919D818DFFC3D8D8919D818DDBDB5A +:1033B000FCC09990993C0F0F033F00000000427E33 +:1033C000030366666666003C4E4E00240C242727E5 +:1033D00000C3626E626E000000000000000000008A +:1033E00000000000000000000000000000000000DD +:1033F00000000000000000000000000000000000CD +:1034000000000000000080002038004000000000A4 +:10341000000000000000000050200000000000003C +:1034200000615026800100000061502480050000EA +:103430000000502000000000A0000020000000005C +:10344000000050200000000000005020000000009C +:1034500000005020000000000000000000000000FC +:10346000000000000000000000000000000000005C +:10347000000000000000000000000000000000004C +:10348000000000000000000000000000000000003C +:10349000000000000000000000000000000000002C +:1034A0000000C0FC828220202034B4B4B4B40000F8 +:1034B000000000000000000000000000000000000C +:1034C00000000000000000000000000000000000FC +:1034D00000000000000000000000000000000000EC +:1034E00000000000000000000000000000000000DC +:1034F00000000000000000000000000000000000CC +:1035000000000000000000000000000000000000BB +:1035100000000000000000000000000000000000AB +:1035200000000000C0FCBEBEF7E3F7F7F5F0A0F026 +:10353000000000000000000000000000000000008B +:10354000000000000000000000000000000000007B +:10355000000000000000000000000000000000006B +:10356000000000000000000000000000000000005B +:10357000000000000000000000000000000000004B +:10358000000000000000000000000000000000003B +:10359000000000000000000000000000000000002B +:1035A00000000000000000000000F3F33030C0C055 +:1035B00082BE0030A0A0000000000000000000005B +:1035C00000000000000000000000000000000000FB +:1035D00000000000000000000000000000000000EB +:1035E00000000000000000000000000000000000DB +:1035F00000000000000000000000000000000000CB +:1036000000000000000000000000000000000000BA +:1036100000000000000000000000000000000000AA +:10362000000000000000000000000000D7FF00289C +:10363000FCFC82BECFFFAFAF000000000000000026 +:10364000000000000000000000000000000000007A +:10365000000000000000000000000000000000006A +:10366000000000000000000000000000000000005A +:1036700000004000000000000000200000000000EA +:103680008800000000000000200020002000200032 +:103690000000000220000008000400900040000824 +:1036A00000000000000400000003200020002000B3 +:1036B0002004000000000000084004020080A00078 +:1036C0000104000800410009001120002000200032 +:1036D0000404000000000004000400000000004199 +:1036E0008800000800080000000000000000000240 +:1036F00000000000000000000000000000000000CA +:103700000000000000000000000080008000800039 +:103710008000004000018000000000000003000164 +:103720000000000000000000000000000000000099 +:1037300000000000000000900000800180010002F5 +:10374000008404820000000000000000000000006F +:1037500000000000400400820000000000000000A3 +:103760000000000000000000000000C00000000099 +:103770000000000020000000000008000000080019 +:103780000200080000000400000008000800080013 +:10379000090008000100010001000900000000000C +:1037A000900000000000040000000010000009006C +:1037B00009000800080000000000000000102000C0 +:1037C00009000900090000030000000808000000CB +:1037D0000200A00804000000020402000000000033 +:1037E00000000000000000080208000502100000B0 +:1037F0000000000000008000000000000000000049 +:103800000000000000000000000000000008800030 +:10381000800084008200200020000400A00400003A +:10382000000004000000000000000000000800008C +:1038300084008400800080000000008420000004D8 +:103840008000A082A084A08400000000000000840A +:1038500009840082008400000084000800080082BF +:103860000084000800000000008200000004000046 +:103870000000000000000000000000000000000840 +:103880000000000000000000000000000000000038 +:103890000000000000000000000000000000000028 +:1038A00000210000000200410040004020002041B3 +:1038B000000090020003040000000041000390009B +:1038C000080890400000000000410021000520058C +:1038D00000050240002100040008000890000000DC +:1038E0000810000900400808000020210200200004 +:1038F00001080000000000000000000000000000BF +:1039000000000000000000000000000008000000AF +:1039100000000000000000000000000000000000A7 +:103920000000001000000200000000020000000083 +:103930008000000000A0000080000002000000885D +:10394000008880900040000000000000000000009F +:10395000800000020000001000004000008800000D +:103960000000000000000000000000000040800097 +:10397000000008000000000000000000C00008096E +:10398000000000000000000008000000000000002F +:1039900000000240000004000200102000000800A7 +:1039A00000000000040002000400040000084011B0 +:1039B0000000002100008200A01082088200001197 +:1039C000000400020003A0000000002000400000EE +:1039D00000000008000000000000000008000000D7 +:1039E00000000000002108009000000000082002F4 +:1039F0000021002120040000000008000000000059 +:103A000000000000000000000000000000000000B6 +:103A10000000000000000000800000008001108213 +:103A200011840088000080C000A080008000000198 +:103A300000A0009000A0000000000000000800A00E +:103A4000410000004000008400000500000000C0AC +:103A5000000000C0000000820000002000A0000064 +:103A6000000000000000000400000000000005004D +:103A7000000100000000000000000800000000003D +:103A80000000000000000000000000000000000036 +:103A9000200082000800080004001000002002003E +:103AA0000000000000000020001008000008004195 +:103AB0000840824000038905000084088208002035 +:103AC0000000004082000000010000080400002007 +:103AD00000000000000000000011002100000011A3 +:103AE00000000000000000000000000000000000D6 +:103AF00000000000000002000000000000000000C4 +:103B000000000000000000000000000000000000B5 +:103B100000000000000000000000800080000001A4 +:103B20000000000000000000000100000000000094 +:103B3000000000A00002008420000000000000003F +:103B4000020900000200000000A008000000800040 +:103B5000008500000000000405840000020000C091 +:103B600000A005040000000000840000090000001F +:103B7000000800000000000000000002000000003B +:103B80000000000000000000000000000011000024 +:103B9000000000004000000040004000030004005E +:103BA00089009000C100000800410000004104406D +:103BB00000000005C020A02000000004000002005A +:103BC00000000008002020082008400800212021D3 +:103BD000200820202041000400040005000400000B +:103BE000000800210005000000000000000800009F +:103BF000000000080000200000002000000000007D +:103C000000000000000000000000000000000000B4 +:103C10000000000000000000000000000000108212 +:103C200000001000000004820084200000842100B5 +:103C30009008000003000000008200000000000067 +:103C400000A00000000000010004000000000000CF +:103C5000A100A140842080100001000100000001AB +:103C60000300000000000000000000000000000051 +:103C70000000000000000000000400000000000040 +:103C80000000000000000000000000000000000034 +:103C90000000000000000000000000000000000024 +:103CA000100200880088C091A001910010008200DD +:103CB000100502111011100901000100C0000000E0 +:103CC000000100040088002002900240008400A04F +:103CD000C0021003008990000004000000000000F2 +:103CE00000000000000000000000000000000000D4 +:103CF00000000000000000000000000000000001C3 +:103D000000000000000000000000000000000000B3 +:103D100000000000000000000000000000000000A3 +:103D200000008080000009008084000488090411DC +:103D30008009884021A0008280A14000400000004E +:103D400000000000118000000000808080800000E2 +:103D5000008080808090112110000002000000008F +:103D60001100000000000000000000000000000042 +:103D7000000000000000000000000000000800003B +:103D80000008000200000000000000000009000020 +:103D90000000000000000000000000000000000023 +:103DA0000000000000058090400500C1A00584804F +:103DB000824003211100888291001104080008004C +:103DC000410041000000800080A1800000800000D0 +:103DD00000020082000010C01180024082A1000594 +:103DE00000000005000000000000000000000000CE +:103DF00000000000000000000000000000000000C3 +:103E000080000000800000000000000000000000B2 +:103E100000000000000000000000000000000000A2 +:103E2000000000000000A0009009898888020802B4 +:103E30001004A001884110022009A04008C0000021 +:103E4000010000000100000002009008029000083C +:103E5000000088C000A1C000A0040108C0009009B3 +:103E60000000000000000000000000000000000052 +:103E70000000000000000000000000000000000042 +:103E8000840008002000C0000000000000000000C6 +:103E90000000000000000000000000000000000022 +:103EA0000000000000000000C0028288024020885C +:103EB00001118308C0050008C0010190A189A0017B +:103EC00000000000000100010000009000880800D0 +:103ED000020208C000908240C00000214088840196 +:103EE00002040000040000000000000000000000C8 +:103EF00000000000000000000000000000000000C2 +:103F000000000000000000000000000000000000B1 +:103F100000000000000000000000000000000000A1 +:103F20000000000000000000000082800000000887 +:103F300005004088108841A10588890804020521F0 +:103F40008408000400210021000300000980000013 +:103F50008000020080000000008080000908000846 +:103F60000021C008000080000000050000000000E3 +:103F70000000000000000000000000000000000041 +:103F80000000000000000000000000000000000031 +:103F90000000000000000000000000000000000021 +:103FA0000000000000000000000000008000001081 +:103FB000000000002111048404000911210488403C +:103FC00041800911000200200000001100000000E3 +:103FD0000004008000000005809080008000044103 +:103FE00004040500021000000000000000000000B2 +:103FF00000000000000000000000000000000000C1 +:1040000000000000000000000000000000000000B0 +:1040100000000000000000000000000000000000A0 +:104020000000000000000000000000000000900000 +:104030002000889000000102000301840000A140DC +:10404000A11104C082000010000100000001000066 +:104050000000888800840200840040080810820064 +:1040600001110089000001000000000000000000B4 +:104070000000000000000000000000000000000040 +:104080000000000000000000000000840084000028 +:104090000000000000000000500000E000000000F0 +:1040A0000000000000000000000000000000000010 +:1040B0000000006007006082000A00600600000047 +:1040C0000000000006008411410000E00000000034 +:1040D00000000000000007000000000000000000D9 +:1040E0000012810000E007004200410000E00000F3 +:1040F00000000000000000000000000000000000C0 +:1041000000000000000000000000000000000000AF +:10411000000000000000000000000000000000009F +:10412000000000000000000000000000000000008F +:104130000000F555F050F303F30300000000ACACB1 +:1041400020E3AFAFAEAF0F050F0500000000000089 +:1041500000000000C382C382FCFC0000553FFF0F3B +:10416000A0E1A0E1000000003A3A000000000000D9 +:10417000000000000000000000000000000000003F +:10418000000000000000000000000000000000002F +:10419000000000000000000000000000000000001F +:1041A000000000000000000000000000000000000F +:1041B00000000000FF5FFA5AF5F505050000000059 +:1041C000A0A020E3AAAAAEAFFF55FF550000000053 +:1041D000000000000000008200820C0C0000553F2F +:1041E000FFFF80808080000000003A3A000000005D +:1041F00000000000000000000000000000000000BF +:1042000000000000000000000000000000000000AE +:10421000000000000000000000000000000000009E +:10422000000000000000000000000000000000008E +:104230000000000000000AC0FAC0FF00C3F0000048 +:104240000000ABABABAB0000BFBEF000FB0000005A +:10425000000000000000000055D2FFD255FF55FFBE +:104260000055C3F00F0FAFAFC341004100BE0014B3 +:10427000000000000000000000000000000000003E +:10428000000000000000000000000000000000002E +:10429000000000000000BEBE0000000000000000A2 +:1042A000000000000000000000000000000000000E +:1042B00000000000000000000ACFFACFFFFFC3F0AB +:1042C0000000000000C33CFF00000000FB00FB00FA +:1042D0000000000000000000000055D2FFD2E1E124 +:1042E000E1E1FFFFC3F00F0F0F0FC341004100BE1C +:1042F00000140000000000000000000000000000AA +:1043000000000000000000000000000000000000AD +:104310000000000000000C00FFFF00000000000093 +:10432000000000610006800D000000000000000099 +:104330000000000000000000000005000A0F050C4E +:1043400000A005610A3F050D00A085610A0E050D5C +:1043500000A00061000680090000000005000A08B6 +:10436000050000A0000030000000000005610A0FF9 +:10437000850D00A000610007800D00000000000016 +:10438000000000000000000000000000000000002D +:104390000000000000610006000D000500000000A4 +:1043A000000000000000000000000000000000000D +:1043B0000000000000000000000000000000FFFFFF +:1043C00000FF00000B0FFBFF00FF000701010101D0 +:1043D00000CF00450000000030353A3F00000000EB +:1043E0000000000000000000000000000000FDFDD3 +:1043F0007D55005F00430000000000000000000049 +:1044000000000000000000000000000000000000AC +:10441000000000000000000000000000000000009C +:10442000000000000000000000000000000000008C +:10443000000000000000000000000000000000007C +:10444000000000FF00000A0EFAFE00FF00D7FF0187 +:10445000FFF100FF00FF0000000000FF00FF000070 +:10446000000000000000000000000000000000004C +:10447000FFFF7D5500FF00FF00000000000000006E +:10448000000000000000000000000000000000002C +:10449000000000000000000000000000000000001C +:1044A000000000000000000000000000000000000C +:1044B00000000000000000000000000000000000FC +:1044C00000003C3C00FF0000FF7D00415F43000016 +:1044D000AAF03CF0D700070000000000FCFCAAFF97 +:1044E00000000000000000000000000000000000CC +:1044F0000000FFFF3C005F004300000000000000E0 +:1045000000000000000000000000000000000000AB +:10451000000000000000000000003030F3F3000055 +:10452000000000000000000000000000000000008B +:10453000000000000000000000000000000000007B +:10454000000000003C3C00FF0000CFCF0C0C5F439C +:104550005F43FFF0FFF0D7D70707000000000C0C07 +:10456000AA000000000000000000000000000000A1 +:1045700000000000FFFF3C005F5F434300000000BD +:10458000000000000000000000000000000000002B +:104590000000000000000000000000003030F3F3D5 +:1045A00000000000200000000000000000000000EB +:1045B0002000000000002000000000000400200097 +:1045C00020000000000000000000000402000000C5 +:1045D0000000004004000000000020000000000077 +:1045E00000000000000100020000000000032000A5 +:1045F0000200000000000000000000002000000099 +:10460000000002040000000000000003000200009F +:104610002000000000000000000000032000000057 +:104620000000004100410000000000000008000000 +:104630000002000200020002000000000000000072 +:104640000000000000000000000000020000000068 +:104650000000000000018000000000008000030056 +:1046600000C000C021000000009100000008000010 +:1046700000008090008400000000000200000000A4 +:104680000040110080000000000000000000000950 +:10469000000000C000020000000000000000000058 +:1046A00000000000000000100000000000000000FA +:1046B00000400000000000000000000000000000BA +:1046C0000000000002000000000000000000108058 +:1046D000000000000200000009008500090909002F +:1046E0000000020000000000000000001000004078 +:1046F00000000000000000000003000000030000B4 +:104700000200000000000000A00800000003880074 +:104710000003000000080000A000000200000005E7 +:104720000000104000000000000000000000000039 +:104730000000000000000000000000000000000079 +:104740000000000800000000000000000000000061 +:1047500000400000000000000000A0000800A000D1 +:1047600084080008000000000000000000000000B5 +:1047700000830088000000820000000800000000A4 +:10478000000000080008008200080000000800087F +:104790000082000000080002000800080004000277 +:1047A00000000082000400840008000800000000EF +:1047B00000000000000300000000000000000000F6 +:1047C00000000000000000000000000000000000E9 +:1047D00000000000000000000000000800000000D1 +:1047E000000000000000900888080021000000215F +:1047F00088050002002020219002C00802209008B5 +:10480000840000110020002000009002000300003E +:1048100000000021001120212000842100038400D9 +:1048200000210004000504210000002100400000D8 +:104830000000000000000000000000000000000078 +:1048400000000000000000000000030009A01100AB +:10485000000000000000000000A0000000000000B8 +:10486000008200000020050000A003A0000000005E +:10487000000800080000000041080400000000A03B +:104880000000000805A000C00002000800000902A6 +:1048900000200000000000900000004000004000E8 +:1048A0000000009041000090210020000000001056 +:1048B00000000000000000000000000040000000B8 +:1048C00000000000080000000200000000000000DE +:1048D000000000000000000084000000080000004C +:1048E0000021082000000000084000C00041040032 +:1048F0000000844000400040004000400040004074 +:104900000040824090404040004000400040004055 +:104910000040004000000080004000400040004097 +:1049200000C0844000400040004000400080004043 +:1049300000830000000000000000000000000000F4 +:104940000000000000000000000000000000000067 +:10495000000000000082000000000000008800004D +:10496000000000000001000000000085210500C0DB +:1049700000000000000100010001008500010001AD +:1049800000010001400311014001008921010001E3 +:1049900000010001000100000040000108010001C9 +:1049A0000001000300010001000100090083004034 +:1049B000080520400000000000000000000000008A +:1049C00000000000000000000000000800000000DF +:1049D0000000000008000000000000000041A008E6 +:1049E0000021A0050000004100200000402110210E +:1049F0000000844100000000A00000004000000012 +:104A0000000484000000000000000000010090008D +:104A10000000000400200405000000080000000061 +:104A200040000000840200050000000200000000B9 +:104A30000000401000100000000000000000000016 +:104A40000000000000000000000000000000000066 +:104A5000000000000000219000000308000803008F +:104A600000C0008400A0052000A0008900C0808450 +:104A7000000208C000000000000003000002000067 +:104A80000390002000A00088000004040002400001 +:104A90000000000000C00000000000000200020052 +:104AA0000000008800000000000000080000050071 +:104AB0000000000000000084000000000000000072 +:104AC00000000000000000000000000000000000E6 +:104AD00008000000000002000000900000009000AC +:104AE000001100410000C0002021200021032021EE +:104AF0000004080800040004000000088408000006 +:104B0000000000000208000020210800C000000092 +:104B10000000000002000000000000000121002150 +:104B200000210021000000218480C000002100003D +:104B3000000500210000002100210000000000000D +:104B40000000000000000000000000000000000065 +:104B50000000000000000000000000000000000055 +:104B600000000000000000000000800080008400C1 +:104B700080000001000000010001000000000000B2 +:104B80000000000000000090000003C009000000C9 +:104B9000000000000000000000000400000002000F +:104BA00000080000000000000000004000000008B5 +:104BB000000000A000C00908000000000000000084 +:104BC00000000000000000000000000000000000E5 +:104BD0000000000000000000000000001004004081 +:104BE0000010880010C000C000A0101082A00000BB +:104BF000010200902001000001010000000000C03F +:104C000000010002000000C000200020880000C059 +:104C100000028200000220C0000400889020880862 +:104C200000024002020488109008908882088408DC +:104C300000020008080802020008000802820000C2 +:104C40000000000000000000000000000000000064 +:104C50000000000000000000000000000000000054 +:104C60000080008000000000000000800080000044 +:104C700000004000008000080010401000200000EC +:104C8000088300210082000800800000000000006E +:104C9000008005800000000000800080000000000F +:104CA000008011000000800000000880000080806B +:104CB000008000000080800005000080008000006F +:104CC00000000000000000000000000000000000E4 +:104CD00000000000000000000000000000000000D4 +:104CE000800000000021800000000004000000009F +:104CF0008003801100038080000580000005800093 +:104D0000000000000008008080080000000580000E +:104D10008000020091030400A00080008002800057 +:104D200000808000808580900080000080C180101D +:104D30008080800000A080808080000080A18000B2 +:104D400000800000000000000000000000000000E3 +:104D50000000000000000000000000000000000053 +:104D6000000008000488C00104008400C0A0840082 +:104D7000A0001000108900000408000008002000B6 +:104D8000C0000000001088010040C0010000880041 +:104D90000200C000010002000000C1001000080174 +:104DA000108802C0080040C0080820C0020008C0E7 +:104DB000108902C0080084C0080804C0020008C0AE +:104DC000108402C00000000000000000000000008D +:104DD00000000000000000000000000000000000D3 +:104DE0000000000008100008001010100408000463 +:104DF000000800881010C0200802012000080510DB +:104E0000040000000000888801C0002010C00000DD +:104E10000090002010C090030020C04100C100029B +:104E20000008C008000841080002C0020203210275 +:104E30000008C088820811080002C0082082050806 +:104E40000008C00802100000000000000000000080 +:104E50000000000000000000000000000000000052 +:104E60000000000000008080008000808000008042 +:104E70000000008000008980808080002000008089 +:104E800088000800050000000000100020000080DD +:104E9000000000000000008000A0001000A100C081 +:104EA000000000808080008041A00040800300203E +:104EB00041200088800880A0C18000008000008020 +:104EC0004100008080802080000000000000000081 +:104ED00000000000000000000000000000000000D2 +:104EE0000000000000000000800080000000800042 +:104EF0000000000000008000801100090000000098 +:104F00000000000000000000000088001000038086 +:104F10008200800000000000000080880000000087 +:104F200080408000800000800000800000100000B1 +:104F30008000000080110000800080000010000050 +:104F400080000000808080800000000000000000E1 +:104F50000000000000000000000000000000000051 +:104F60000000000000000000000008001004880499 +:104F7000A000C00010C000C0A0001001200002026C +:104F8000400000000010000000000000C000011000 +:104F900000100800C000202002000000C040902047 +:104FA00000200401C00004040008000008000203FF +:104FB000020282000200082088880800080002031C +:104FC0000808100002000882080802000000000023 +:104FD00000000000000000000000000000000000D1 +:104FE00000000000000000000000000000000000C1 +:104FF000000000000000000000000000410000E090 +:1050000007005000840000E00000000000000000E5 +:105010000000000000000000000000000000000090 +:10502000000000000000000000000000004200003E +:10503000000000004842000000000000484200005C +:10504000000000004842000000000000484200004C +:105050000000000000000000000000000000000050 +:105060000000000000000000000000000000F03C14 +:10507000003C89CFFFFFFF0000009B9FDBFF0FFF7D +:10508000C0C0813FBD3F000000003636363600000C +:105090003C3C0000F3300000F0FF0000FFF0000097 +:1050A0003C3C0000F330000066FF0000F6F6E666C8 +:1050B0007E3CFE3C6F6F7FFFE7FF67FF6F6F7FFFF8 +:1050C000BDFF3DFF6F6F6060E7FF67FFFCFC0C0CEE +:1050D00000000000000000000000000000000000D0 +:1050E00000000000000000000000000000000000C0 +:1050F000F03C003C000000003C3C3C3C0000000058 +:105100000FFFCFCF813FBD3F00000000363636365F +:10511000000066660000F3300000F000000000F0C0 +:105120000000FF000000F3300000660000000606EB +:105130002666183C083C6060400024006400606003 +:105140004000240034007FFF400024006400BC3C89 +:105150002C3C0000000000000000000000000000E7 +:10516000000000000000000000000000000000003F +:10517000000000000000000000000000000000002F +:10518000000000000000000000000000000000001F +:10519000000000000000000000000000000000000F +:1051A00000000000000000000000000000000000FF +:1051B00000000000000000000000000000000000EF +:1051C00000000000000000000000000000000000DF +:1051D00000000000000000000000000000000000CF +:1051E00000000000000000000000000000000000BF +:1051F00000000000666606063031767700003C3C11 +:10520000343D343D000000000000F0F000000000DC +:105210000000069F0000000066660000F6F6000031 +:1052200006F60000069F0000FF3C0000F6F60000B6 +:105230003C0F363C3636FFBCFFBD0206BF9FFFC2A7 +:10524000FFFF0604F6F7667F666F0206BF9F3C7F8E +:105250003C7E6C666C6C00000000000000000000EA +:10526000000000000000000000000000000000003E +:105270000000000000000000F0000001464700F0C0 +:105280003C000009606930303F3F30303030000072 +:1052900000000000069F000000000F0F000006063F +:1052A000000006F60000069F0000003C0000060615 +:1052B00000003C0F3C3C3636002C00240006FF9FCB +:1052C0000000003D0404F7F7664066600006FF9F9B +:1052D0003C103C1866666C6C00000000000000008A +:1052E00000000000000000000000000000000000BE +:1052F000000000000000000000003000000000007E +:10530000000030000000000005610A0F850D00A0BC +:1053100000610007802D1202000040E38006002D8E +:105320009202408280000020920240E38006002D1D +:105330009202408280000020100240618006002D11 +:10534000100240618006002D100240008000002005 +:105350001002400080000020100200000000000049 +:10536000000000000000000000000000000000003D +:10537000000000000000000000000000000000002D +:10538000000000000000000000000000000000001D +:10539000000000000000000000000000000000000D +:1053A00000000000000000000000000000000000FD +:1053B000F5A0F7A2000000000000000000000000BF +:1053C0000808283C00000000FFFFFFFF000000006D +:1053D00000000000000000000000000000000000CD +:1053E00000000000000000000000000000000000BD +:1053F00000000000000000000000000000000000AD +:10540000000000000000000000000000000000009C +:10541000000000000000000000000000000000008C +:105420000008000000000000000000000000000074 +:10543000000000000000000000000000000000006C +:1054400000000000001400000000FEFFFFFF00004D +:10545000000000000000000000000000000000004C +:10546000000000000000000000000000000000003C +:10547000000000000000000000000000000000002C +:10548000000000000000000000000000000000001C +:10549000000000000000000000000000000000000C +:1054A00000000000000000000000000000000000FC +:1054B0000000000082000F0F00000000000000004C +:1054C00000000000000000000000000000000000DC +:1054D00000000000000000000000000000000000CC +:1054E00000000000000000000000000000000000BC +:1054F00000000000000000000000000000000000AC +:10550000000000000000000000000000000000009B +:10551000000000000000000000000080000000000B +:1055200000000000800000000000000000000000FB +:10553000000000000000AA280F0F0000000000007B +:10554000000000000000000000000000000000005B +:10555000000000000000000000000000000000004B +:105560000000208020042000000000000000200037 +:10557000000000000000000000000000000000002B +:1055800020000000000020000000000000002000BB +:1055900000000000000000080400040004000000F7 +:1055A000041000030041A0082000000000050005D1 +:1055B0000010880000000005000000052041C00028 +:1055C000040020C0022002000200028202800200C9 +:1055D0000280020400118800880000020004100804 +:1055E00010208802000400000000000000000000FD +:1055F000004000000000000000000000200010003B +:105600000000000000002000000200000000000078 +:10561000000000000000000000000000000000C0CA +:10562000000000000000000000000000000000007A +:1056300000040001000000400000000000004000E5 +:10564000000000080003800180008000800280408C +:105650008002804080020500000000000000002160 +:10566000000000C100210080008000800080000058 +:10567000000000000000000000000000000000002A +:10568000000900000200000000000000820000008D +:1056900000000000001000000000040900000000ED +:1056A00000000000000000000000000000000004F6 +:1056B00000000100000001000000040000000004E0 +:1056C0000000000000000000004000C000A000003A +:1056D000038002800020002000000008000040003D +:1056E0000340212000A00200002000200020002014 +:1056F00000080000000000000000000000000000A2 +:105700000000000800080000000000000000000089 +:1057100000400084000800080000000800000000AD +:10572000000800C0000400000000000805000000A0 +:10573000008400101000000840080000000800105D +:10574000000210020010000000000003002100030E +:1057500004888220802000110085000009090000D3 +:105760008010A08882850041000000000000000039 +:105770000000000000000000000000000008000021 +:105780000000000000000000000000000000000019 +:10579000A00000000000880000000200900000004F +:1057A0009040A0000008000400000000000000037A +:1057B0000008000000000009400300000000000095 +:1057C00090000008900300031021000388040020CB +:1057D000008088208421004000A1004000210003B7 +:1057E0000008000088080040002100400000000080 +:1057F00000000000000000000000000000000000A9 +:105800000000000000000000000000000800000090 +:10581000000000080200000003000340050000A093 +:1058200005A00900020040000500000000000090F3 +:105830004140020000020000418404A041024100F6 +:105840000088000005A00300000800A04000090433 +:105850000009042040891100411000204108002067 +:1058600000000000400805000900050800080000CD +:105870000000000000000000000000000000C00068 +:1058800000000000000000000000C000C000000098 +:1058900000000000000000000000002100000000E7 +:1058A0009000000000000003000004000800000059 +:1058B00000008400000400002008200400100040C4 +:1058C0000000C000000000000040080000040000CC +:1058D0000020052005000103C000820000400810E0 +:1058E000C020004188C10000082082400800080450 +:1058F000000000A000000000000000080000000000 +:105900000000000000000000000000000000000097 +:105910000000000000000000000000000084000003 +:105920000084000000C0000000040000000000C06F +:10593000000000002000000000000004000800003B +:105940000000100000000000000000000000000047 +:1059500000000089020102A00284009000000009FA +:10596000004000900084001000041101009000002D +:105970000001000000000000000008000800000016 +:105980000000080000000000C0000000000000004F +:105990000000000000000000000000000000000007 +:1059A00000000000000000000000000000004000B7 +:1059B00000000000400040004000004000044000A3 +:1059C0000800000000028440010208000000A0005E +:1059D0000008000040044002402000099010A0058B +:1059E0000020410420208400000002000020080064 +:1059F0000010010000000000000000000000000096 +:105A0000000000000000000000000000000800008E +:105A100008000000030800C0000000A0000800000B +:105A200000000000000000C000C0000800004004AA +:105A300000A000000000400005400000000805082C +:105A400000080000000000040300400010000000F7 +:105A50000000102000A000000882000000000500E7 +:105A60000582000904900000100000000000000101 +:105A70000000000004000000000000000000000022 +:105A80000004000800080000000000000000000002 +:105A900000000000200000000000000000000000E6 +:105AA000000000000000840000000041000000042D +:105AB0000000000000000000000082000400000060 +:105AC000C0000000000000000421022100042003A7 +:105AD000A000000000000000008082000880000894 +:105AE00000000308A12100C1044100210005C000FD +:105AF00001410041012100400000000000000000C1 +:105B00000000000000000000000000000000000095 +:105B10000000000000000000020002000000000081 +:105B2000000000000000000000C0000000000000B5 +:105B3000000000A000002000000000000000200085 +:105B400000000000000020840004000000000000AD +:105B500000884102000000C0000000400008004032 +:105B600000900000840002000040000021C00000FE +:105B700020C00804000020002001000000000000F8 +:105B80000000000000000000000000000000000015 +:105B90000000000000000000000000000000000005 +:105BA00000000000000000000000000000000000F5 +:105BB00000000000000000000000000000000000E5 +:105BC00000000000A0020104881004020000000090 +:105BD00000000000C00288408382828488C0009058 +:105BE0004008001088C000900002C088000001003A +:105BF000040002000000000020000010000000006F +:105C00000000000000000000000000000000000094 +:105C10000000000000000000000000000000000084 +:105C20000000000000000000000000000000000074 +:105C30000000000000000000000000000000000064 +:105C40000000000000008000038000000000000051 +:105C5000000000000000800010002100808085808E +:105C6000088080800080808000800000800000002C +:105C700003008000000011002100100000800010CF +:105C80000000000000800000000000000000000094 +:105C90000000000000000000000000000000000004 +:105CA00000000000000000000000000000000000F4 +:105CB00000000000000000000000000000000000E4 +:105CC0000000000000000000000000418080008013 +:105CD00005000800050008009000A04005028800AB +:105CE000100088029080908080000000808080807A +:105CF00000000000000000800308A18403842085C8 +:105D00000000008800000008000000000000000003 +:105D10000000000000000000000000000000000083 +:105D20000000000000000000000000000000000073 +:105D30000000000000000000000000000000000063 +:105D4000000000000000000000008400900110042A +:105D5000C008000000000100002040001082110077 +:105D60001120000010008588C19008000000848880 +:105D7000C090000000000000000800411108001160 +:105D80000002000000000800000000000000000009 +:105D90000000000000000000000000000000000003 +:105DA00000000000000000000000000000000000F3 +:105DB00000000000000000000000000000000000E3 +:105DC0000000000000000000000000000885002026 +:105DD000208410A100000000000000008288002044 +:105DE000A089032000400008900989C1000000023A +:105DF000109088C00000000300000005000184002E +:105E000010090001100000008000000000000000E8 +:105E10000000000000000000000000000000000082 +:105E20000000000000000000000000000000000072 +:105E30000000000000000000000000000000000062 +:105E40000000000000000000000000000000804092 +:105E50000041000280C1000000000000000000407E +:105E600000418020A10500A000828085908800006C +:105E700000000080808000090088000900410220A5 +:105E8000002100A104040000000000000000000048 +:105E90000000000000000000000000000000000002 +:105EA00000000000000000000000000000000000F2 +:105EB00000000000000000000000000000000000E2 +:105EC00000000000000000000000000000000000D2 +:105ED000000400C08080800000000000000000106E +:105EE0000008808000808009801180888080000800 +:105EF000801180C1000000000000000000000000D0 +:105F0000900591104000090300000000000000000F +:105F10000000000000000000000000000000000081 +:105F20000000000000000000000000000000000071 +:105F30000000000000000000000000000000000061 +:105F40000000000000000000000000000000000051 +:105F500000000401A0A040088200009000000000A2 +:105F600000018200021082400200C08320890808DC +:105F70000001C0012088020284000000000000002F +:105F80000000C110890003004100480000E0070044 +:105F90000000000000000000000000000000000001 +:105FA00000000000000000000000000000000000F1 +:105FB00000000000000000000000000000000000E1 +:105FC00000000000000000000000000000000000D1 +:105FD000000000000000000000004200000000007F +:105FE000000000000000000000008400000000002D +:105FF0000700000000000000070000120000000081 +:1060000000000000000000E00700000000000000A9 +:106010000000000000000000000000000000000080 +:106020000000000000000000000000000000000070 +:106030000000000000000000000000000000000060 +:106040000000000000000000000000000000000050 +:106050000000000000000C0CAAAACF00CFFF000037 +:10606000000000000000F000F000AA0AAA02AFAF92 +:10607000F0FFF0AA3CF0ACAC303FAAAAF0F0000070 +:106080000000FFFF0000AAAA0F0F00FF00000000A1 +:106090000000000000000000000000000000000000 +:1060A00000000000000000000000000000000000F0 +:1060B00000000000000000000000000000000000E0 +:1060C00000000000000000000000000000000000D0 +:1060D000000000000000000000F00AFA550055FF23 +:1060E0000000000000000000F300F000AAAAAA824D +:1060F000A0A0000FF0AA3CF0ACAC303FF0F000FFE5 +:10610000000000000F0F0F0FAAAACFC000FF000071 +:10611000000000000000000000000000000000007F +:10612000000000000000000000000000000000006F +:10613000000000000000000000000000000000005F +:10614000000000000000000000000000000000004F +:106150000000000000000000000000C2C2C2C3FF37 +:106160003D3D0000000000000000000C0F0C00A2EC +:10617000A2A2FC0C35350F0F5555FC0C35353C3CB7 +:106180005555000000000000000000003C3C0000ED +:106190000F0F0000000000000000000000000000E1 +:1061A00000000000000000000000000000000000EF +:1061B00000000000000000000000000000000000DF +:1061C00000000000000000000000000000000000CF +:1061D00000000000000000000000000000FAFAFAD1 +:1061E000C3FFC3FF000000000000000000AC0FACC4 +:1061F00000F3F3F3FC0C3535FF000F0FFC0C3535C5 +:10620000FF003C3C000000000000000000003C3C9F +:1062100000000F0F05790A06850D05A0000000009B +:10622000000000000000000000000000000000006E +:10623000000000000000000000000000000000005E +:10624000000000000000000000000000000000004E +:1062500000000000000000000000000000000061DD +:106260000006000D000000610006000D0000006146 +:106270003006000D00001061200E004D00081000D7 +:1062800020080040000800610006000D00001561B4 +:106290002A0F054D00A800000000000000000000CB +:1062A00000000000000000000000000000000000EE +:1062B00000000000000000000000000000000000DE +:1062C00000000000000000000000000000000000CE +:1062D00000000000000000000000000000000000BE +:1062E000000000008200C3C00000000000000000A9 +:1062F00000000000D580FDA800000000C30341019C +:10630000000000000000000000000000C000C38288 +:1063100080C082C3D7D71C1F00000000000000000F +:10632000000000000000000000000000000000006D +:10633000000000000000000000000000000000005D +:10634000000000000000000000000000000000004D +:10635000000000000000000000000000000000003D +:10636000000000000000820000C0000000000000EB +:10637000000000000000D782FFAA00000000FF0F0D +:106380005505000000000000000000000000C000F3 +:106390000082A0F0AAFFD7D7DCDF000000000000D9 +:1063A00000000000000000000000000000000000ED +:1063B00000000000000000000000000000000000DD +:1063C00000000000000000000000000000000000CD +:1063D00000000000000000000000000000000000BD +:1063E00000000000000000000000000000000000AD +:1063F000FFFFFFFF00000000000030BA00000000B7 +:1064000055054101000000000000000000000000F0 +:106410000000000000000000F0F05040000000000C +:10642000000000000000000000000000000000006C +:10643000000000000000000000000000000000005C +:10644000000000000000000000000000000000004C +:10645000000000000000000000000000000000003C +:10646000000000000000000000000000000000002C +:106470000000FEFFFFFF00000000000030BA000037 +:106480000000FF0FC3030000000000000000000038 +:1064900000000000000000000000F0F0F0C000006C +:1064A00000000000000000000000000000000000EC +:1064B00000000000000000000000000000000000DC +:1064C00000000000000000000000000000000000CC +:1064D00000000000000000000000000000000000BC +:1064E00000000000000000000000000000000000AC +:1064F000000000000000000000000000000000009C +:10650000000000000000000000000000000000008B +:10651000000000000000000000000000000000007B +:10652000000000002000000000000000000000004B +:1065300000000000008000000000000000000000DB +:106540000480000020000000080001800800048092 +:106550000000000000000004000000000000000037 +:1065600000030400C000040002000000000040001E +:10657000000000000000C000000000000000000457 +:1065800000000000200020002000000000000004A7 +:1065900000000200000400110000000000040000E0 +:1065A00000000000000000000000000000000002E9 +:1065B000000000000000004000000000000000009B +:1065C0000000802000000000000080000420800007 +:1065D000802000000000000000000000000000001B +:1065E000000000000000000000000000000040006B +:1065F0000000000000000000000000040000000097 +:106600000001000000000000000000000000000089 +:106610000000000000000000000000040000000076 +:1066200000000000000000000000C10000000000A9 +:106630000000000000000000000000000004000056 +:106640000000000000000000001000000000010039 +:106650000100000000000000000000000000020037 +:10666000000000000000010008000000040000001D +:1066700000030004000200000000008000882000E9 +:10668000210402040040004100000000000400005A +:1066900000000040000002410040000002000040F5 +:1066A00000000000004100820008000840080008C7 +:1066B00000080000000800000008000000000000C2 +:1066C00000000084000000820008000800080008A4 +:1066D0000408200000400908000800000000000431 +:1066E0000000000800000000200004080008000866 +:1066F000000800080000000100080082004000407F +:106700008000A00000090001200000080008000827 +:106710000010098400000082000800000040001002 +:106720000008000800040000000000000000000055 +:106730000000000000000000000000000040000316 +:106740000000000000000000000000000000000049 +:1067500001000000014000000003000000100002E2 +:1067600000210140004020400000090040000021BD +:10677000200400020000104000400003100004212B +:10678000002101030000004010050000014000212D +:1067900000110000204108212021012100020121D7 +:1067A0009021012184032009004100000000000025 +:1067B00000A00084000000000000000000000001B4 +:1067C00000000000000000000000000000000000C9 +:1067D0000000200000002000000000000000090070 +:1067E00000010000200000018001000020001100D5 +:1067F000080080000001200000010891000002A0B4 +:106800000000020820080000004100401110204054 +:10681000000000040000C00800008000200000000C +:106820002008400820000000800000000005000053 +:106830000000000000000000000000000800000050 +:1068400000000000000000000000000083090000BC +:1068500005000009000000000004C00083040000DF +:106860000080000000050140400901030000A14133 +:1068700000040085008308050005000000110005E4 +:106880000040000800400080C09100020091000517 +:1068900000C00011884140914085000800059040EB +:1068A000A0000900A00000C1000990090109000032 +:1068B0000000000000000000000000000000800058 +:1068C0000082000000000000000000000000040042 +:1068D000000084000000000000000001000008002B +:1068E0002090000200000000200180002000000035 +:1068F000200000C0004000400900008800A009847A +:1069000000900285008200820040004000010004E7 +:10691000090809050090008480400040408400C0C0 +:10692000218400C020840084210403C000A040080A +:106930000000000000000000000000000000000057 +:10694000080000000000000000080000000800002F +:10695000820000000000020000000002000090031E +:106960000805000540214000A0000040400200054D +:106970000000002100000021C003002190000882D7 +:10698000000800032000A021200540418808404164 +:10699000402140030020400521112000000040213B +:1069A000C02100030041C04040401040C002200907 +:1069B0000003000000C00000000000000000000014 +:1069C0000000800000000000000000000000000047 +:1069D00000000000000000000000000002000000B5 +:1069E00000008000002083008004000000000001FF +:1069F000000000000800000000000000020000008D +:106A000000020010114000000040000000000010D3 +:106A1000008290900040400002102000000800001A +:106A20008000000000080000000391014001000008 +:106A300000000500000800000021000000400000E8 +:106A4000000000000008000000000000000000003E +:106A50000000C000820000000000000001000000F3 +:106A60000121C021824000400008000841040004C8 +:106A7000000000000000830400040004C1040104BD +:106A80000104C004000400840004A0040104000404 +:106A9000000400040004010401050011010488043D +:106AA00090840104418403844104C0040004000470 +:106AB000C0400104002100000000000000000000B0 +:106AC00000000000000000000000000000000000C6 +:106AD0000000000000000000000000000000200096 +:106AE00000082000000000010001000000C082003A +:106AF00000820000001000002082000000002084BE +:106B0000020002020000080009400010008240104C +:106B10000000000000C000000240200000C0200073 +:106B200011C01104020002042040821011102184BF +:106B300000100385208400A00000010084000000F4 +:106B40000000000000000000000000000000000045 +:106B50000000000000000000001000880002000299 +:106B600010A00083880890880400200000008200A4 +:106B7000200400039010400800002091042100022E +:106B80000208200200200041040820100002000436 +:106B90000208201020020020A0082004002000028B +:106BA0008821209020400402080820C100039002A0 +:106BB00002202090A003908920090000100080008E +:106BC00000000000000000000000000000000000C5 +:106BD0000000000000000000000040000000000075 +:106BE0000000058921A100908000200080000000A5 +:106BF000800011802188008000900000400910A1D1 +:106C00000000008010000091000880801180118039 +:106C100000800080000000800900008008000380E0 +:106C2000000400100000000000030080000802A122 +:106C3000809180020400A188800980830000000008 +:106C4000000000000000000000000000000000083C +:106C500000800000000000000000000000000003B1 +:106C600080000080008009119080A1081000800041 +:106C7000C000908000009090808410C000008000D0 +:106C800080A1088083831000C1A189A000808000BA +:106C900080A180800080000309918083828003802E +:106CA00080A10009908000008090A0801180108059 +:106CB00009C1A09021C08280C1A14090A191000093 +:106CC0000000000000820000000000000000000042 +:106CD000000100880000000000000000000010001B +:106CE00002014000101000040201A002091140003E +:106CF0000800029010C002000883100340C1000089 +:106D0000102008C0911003C0020008C0100290C0FB +:106D1000020008C0040402C0020004C0040482C0CF +:106D2000084008C0020303C0100208C1821090C0CE +:106D3000029020C00302C1C0109008C1912021C060 +:106D40000000000000000000000000000000000043 +:106D50000000000000000000000000000000000033 +:106D6000100000880410040800010088040082005C +:106D70000008000300020004C0080110C003201036 +:106D8000000003080083C002209105080090C08322 +:106D9000201011090090C004201011080221C00227 +:106DA000200811090191C003841103080111C003D7 +:106DB000200211080003C003108883080005C08862 +:106DC0002002000900100020002000000000000048 +:106DD00000000000000000000000000000000000B3 +:106DE0000000800000800080808000080002001108 +:106DF00091110080009000100084C1911180808862 +:106E00001182000041910089C1901005C1801111CB +:106E100080851082C188001180800000C1800088B8 +:106E200080020411C188110880218089C1911183D9 +:106E3000A0A11004C190008391088509C19010831E +:106E4000821102900000000000000000000000001D +:106E50000000000080008000000000000000000032 +:106E6000000000000011808080000000040011106C +:106E7000050020000020008000000000A1201080FC +:106E80008280901100008911038090A102110020DE +:106E900000918080000080110000808000000011BF +:106EA000800000000000A1020300882102112102DD +:106EB000088085801111900202008802091090025A +:106EC0000480858010090000000000000000000020 +:106ED000000000000000C00010000000880000005A +:106EE0000000000000000000A02008880000000052 +:106EF0008810011000000000102000029000050022 +:106F000021820840100100000200218209A1100125 +:106F10000200200208404000100020080840400005 +:106F2000828810909002C000A10020900803900178 +:106F3000410091100902020110002088090240005E +:106F4000020020020904040100000000000000000B +:106F500000000000000000000082000007000000A8 +:106F600000000000000000000021000007000000F9 +:106F7000842100E007000000000000000000004243 +:106F8000820000E0000084420000500000E00000A9 +:106F900048420000000000004842000000000000DD +:106FA0004842000000E000004842810000E000008C +:106FB0004842810000E000004842810000E00000FB +:106FC0004842810000E0000048420000000000004C +:106FD000000000000000000000000000E766000064 +:106FE00000000000000000000000F0F0F0F0FF0FD3 +:106FF000000F66FF66FF6F6F6F6F7E427E423F66D7 +:107000006666727266663636FF000000FBB9622063 +:1070100036FF360078783C3C3C66F0F078787E1895 +:107020003CF066F0BDF9246036F66666FBE3382076 +:107030003CF066F0FBB9FFFF3666F66678783C3CBC +:107040003FFF3000FBB9FFFF3C66F0F0000000009E +:10705000000000000000000000000000C3006624E3 +:1070600000000000000000000000000000FF00FF22 +:10707000FF0F000F66006600606060607E427E4227 +:10708000306666667E426666FF00FF000000FFFF16 +:107090000000FFFF00007E183C3CF0F0F0F03C3CAC +:1070A0003C3CF0F0F0F0FFFF000036066666FFFFA4 +:1070B0000000F0F0F0F062200000366606667E18F0 +:1070C0003C3C6FFF600062200000F0F0F0F0000038 +:1070D00000000000000000000000000000000000B0 +:1070E00000000000000000000000000000000000A0 +:1070F0000000000000000000000000000000000090 +:10710000000000000000000000000000000000007F +:10711000000000000000000000000000000000006F +:10712000000000000000000000000000000000005F +:10713000000000000000000000000000000000004F +:10714000000000000000000000000000000000003F +:10715000000000000000000000000000000000002F +:10716000000000000000000000000000000000001F +:10717000E781E1E1FFB9002006879F879090F6F64E +:1071800000000000240CE7CF00FF6C6C3C3C7E1E2E +:107190000000000CFFFCFFFFC7DF0F0F663C24045C +:1071A000FFDF00FF0CFC6666660F0F660F3C664E45 +:1071B000664E6660666F240CE7CFFFFFFF6C0446E7 +:1071C0009DDF08F80EFE6603663F006CFF6C666686 +:1071D0000CCF0000000000000000000000000000D4 +:1071E000000000000000000000000000000000009F +:1071F0000000C3C3C3C3FFFB006206879F870099DB +:1072000066FF000000000000FFFF00FF00FF3C3CA5 +:10721000181E00000006FFF60000041C0F0F0F0FE1 +:107220000004DBDF00FF06F66666663C0F0F0F0FFB +:107230006642667E666C666C0000FFFF0000006CB4 +:107240000000FFFF00FF00FF666666660000FFFFAC +:107250006666666600610006000D00000000000022 +:1072600000000000100000200000000000000000EE +:10727000000000000000002000000001006100226A +:107280008005000000610006002D100240618004AE +:1072900080291002000040618002802910024061B4 +:1072A0008006002D100240618006002D1002406112 +:1072B0008007002D10024061800480291002406187 +:1072C0008004802910024061800280251002406104 +:1072D0008002802510020000000040108020000085 +:1072E000000000000000000000000000000000009E +:1072F0000000000000000000000000000000FFFA95 +:1073000005000F0FEB4100000000F000F0FF0FC37D +:107310000F005541FFEB0000C0E8FCE8F330F3300C +:1073200000000000FFF00F00000000000F0F0F0F23 +:10733000000000000FFF0F00C5F5053500033C3FBE +:10734000ACFC0C5C303F3535FF555755B2F0B2B24E +:10735000FF007545AABEAABF000000000104020894 +:10736000000000000000000000000000000000001D +:10737000000000000000000000000000000000000D +:10738000FEFE04040F0F0F0F00000000F000F0FFDE +:107390000FFF0F3C1400BEAA0000F0F0F0F03030F8 +:1073A000F3F300000000FFF00F0000000000C3C373 +:1073B000C3C3000000000FFF0F00C5F50535C0C3B3 +:1073C000FCFFACFC0C5C303F353500555455AAAA87 +:1073D000AAAA55555555AA82AA80000000000000AF +:1073E000000000000000000000000000000000009D +:1073F000000000000000000000000000000000008D +:107400000000FF0FF000FFF000F00000000000FFA0 +:107410003C3C7D417D41AAAAF0F00000FFFF000046 +:10742000AA00AAFFA0F5A0F53F033F03000000005B +:10743000000000000000000000000F0F4D4D4D4DFA +:10744000AAAA3C3C0F0F0F0FAA00AAFF0F0F0F0FA5 +:107450003071F37105AF05AFACA0AFA30000000021 +:10746000000000000000000000000000000000001C +:10747000000000000000000000000000000000000C +:1074800000000000FF0FF000FFF000F0000000001F +:1074900000FF3C3C7D417D41AAAAF0F0000000FFC6 +:1074A00000FFAA00AAFFA0F5A0F53F033F030000DC +:1074B00000000000000000000000FFFF0F0F4D4D16 +:1074C0004D4DAAAA3C3C55555555AA00AAFFC300EC +:1074D000FF3C3071F3712D2D2D2DACA0AFA300001A +:1074E000000000000000000000000000000000009C +:1074F000000200000000000000002000000000006A +:10750000000000000000000000000000000000007B +:10751000000002000008000000002000000300033B +:107520000100000000000004400000000004000012 +:1075300002000441000000080000040220000400D2 +:107540000000010400000209200002000200000007 +:1075500000002000000000000000200420002003A4 +:107560000000000000020000000000000000000019 +:10757000000000000000000000000000000000000B +:1075800000000000000000000000000000000000FB +:1075900000000000000000000000000000000000EB +:1075A0000000400040000000050110000000110133 +:1075B00000000000000000000000000000000000CB +:1075C000000000002001000000000000000000009A +:1075D00000000000000000000000000000010000AA +:1075E000000000000000000000002040200000809B +:1075F0000000000002000200004000000000000047 +:107600000210000000000000000000000000000068 +:107610000000000000000040000000000200000028 +:10762000A0000000000000400200000000000080F8 +:10763000000000040010000002000009010000002A +:10764000000020400041084100090000080300003C +:1076500000100041100000100009000500008240E9 +:1076600000080040000000000000000080848088C6 +:10767000000400400000008200080008000002082A +:1076800000080000020802000200020000000008DA +:1076900000000004000000000084001000840008C6 +:1076A000008400000000000800080008020800082C +:1076B000000400000085000000000084028820080B +:1076C00000080010800800080008000800080008F2 +:1076D00000840084000000000000001000880010FA +:1076E00000080010000800000005000000000080F5 +:1076F0000004000000080000000000000003000873 +:107700000000000000000000000000100000010068 +:1077100001000000000001000100014001400108DB +:1077200089009100214000008940214089030140E7 +:107730000104904011080103018321090021838382 +:10774000012120210108A121890041218821214115 +:1077500001210108010803218503212101412102A2 +:107760000121010901A100900000000000000000BB +:1077700000040011000000000000000000000000F4 +:107780000000000000000000000000000000008475 +:107790000208020000C00002020002020209020305 +:1077A0000200028202028201000002A082000202A4 +:1077B00002110283000002A002A04040821003A038 +:1077C000024002C0804002A002A04000020005006A +:1077D000820002000200028482A00200A0000200D7 +:1077E00082A002A002C0020400020000000000000B +:1077F000000000000008000000040000000000007D +:107800000000000000000000000000000000000078 +:10781000000040080000210002800100010000007B +:1078200041800000000000000000000000402040F7 +:1078300040002000004000000000000000030000A5 +:1078400000400004204000040041004100090040C5 +:1078500084C0000000004100200000008800A0005B +:1078600000000400A08000040204020000000000E8 +:107870000000000000000001000000010000000006 +:1078800000000000000010000000000000000000E8 +:1078900000080000000100002000000402000200B7 +:1078A0000000C004009000A000A0030800000091A8 +:1078B000890185048000408920040000208821007F +:1078C000009008A1000180050001000000A0200038 +:1078D00002910040208840820288028821A0200076 +:1078E000000840000408100400A18001A01000005E +:1078F0000000000000000000000000000000000583 +:107900000000000000000000000000030000000074 +:1079100000080000900800000080000090000000B7 +:1079200000000004000000000009200490A10000F5 +:10793000004000800000004100419088A04100808C +:1079400000400282401001212000908000904010F1 +:10795000004000030200000200050000008000213A +:1079600002A10204028000080002000000C000051D +:107970000200000000000000000000000000000005 +:107980000002000200A00000000000000000000053 +:107990000000000000A000A000A0004000020008BD +:1079A0002100200000010000090020000009200241 +:1079B000000000002104200203001188004005009F +:1079C00000401101004080002000218841402140FA +:1079D00080001191218885A0110011004100210231 +:1079E00020008002008380020008000121000002C4 +:1079F0001110000800000000000000000008000056 +:107A00000000000000000000000000030000000073 +:107A100000000000000000000000400000004000E6 +:107A20000008010000000000000000910221010098 +:107A300000000000000500002009000921040000EA +:107A400000114000880000210205200400210200EE +:107A500000830180012100214009029182218803D5 +:107A600000004041081102210004000404218209A1 +:107A7000000202850000000000000000000000007D +:107A800000000000000000000000000000000000F6 +:107A900000000000000000000000000000000000E6 +:107AA000000000A010820084000000004008C00018 +:107AB00002C011C00000004000C02084000040044B +:107AC000000021828000400002008808C001000000 +:107AD000C0000004204002822000820002401120E9 +:107AE0000210020080882100A0C011000083000461 +:107AF00011000000A00400000000000000000000D1 +:107B000000009000000000000000000000000000E5 +:107B10000000000000000000000000000000010064 +:107B200000000000000003C000880004000001C045 +:107B3000018840000810000000C001000200001091 +:107B4000C0C0008800A0100008080002A00888A19A +:107B500002041010000882100308110208108202AB +:107B60000302040800821004C008000288C0A009B3 +:107B7000C1020008004008080000000000000000EA +:107B80000000000080000000000000000000000075 +:107B900000000000000000000000000000000000E5 +:107BA000110021000000000011802100008002006F +:107BB000118005008000800000000080400200006D +:107BC000001080800004000089028080040000A072 +:107BD000000880808080048080800880081000A0D9 +:107BE00080000900218000808000028000000040A9 +:107BF00000C0400404842080808300000000000056 +:107C00000000000200000011000000000000000061 +:107C10000000000000000000000000000000000064 +:107C2000000000410900000380800041094000037A +:107C3000808000410910804080800000000000002A +:107C4000110490020011000080048080800080C038 +:107C5000200040858040009100040080800008C121 +:107C6000A09080838000009109808480800005C0FE +:107C700040008085000303C08489808000000000EC +:107C800000000000000000000000000000000000F4 +:107C900000000000000000000000000000000000E4 +:107CA000000000000001A1000000C08800010101E7 +:107CB0000200C088008501010800C0880000900013 +:107CC00088000001C00090000200089110C0080068 +:107CD00084C01088C1C0080102C0900588C0080097 +:107CE00003C0401108C0080002C0C10808C0080055 +:107CF000C0C1A00408C0820002C1401008C000003A +:107D000000000000000000008800000001000000EA +:107D10000000000000000000000000000000000063 +:107D200000000000000000008804001001A0001006 +:107D30008489000011C1C0088400001101C1000045 +:107D400002020108001182C000020308C0081002EC +:107D500011209103C009408203020208C01083026F +:107D600091080102C0831108C1100008C088820474 +:107D7000C1090103C0838208A102C008C0411108E3 +:107D800000000000000000000000000000000800EB +:107D900000000000000000000000000000000000E3 +:107DA0000000000000000000000000000000410092 +:107DB00000098008001141C100918000004041C1CC +:107DC00000000080110300210090001009918080C4 +:107DD00004824180910380A1108241100091808033 +:107DE000C0824180110480A1118441840080800000 +:107DF000800241A0112080218082410000858040C6 +:107E000088000000000000000000000000000000EA +:107E10000000000000000000000000000000000062 +:107E20000000000000000000000000000011400001 +:107E3000008080000011020000808000001100001E +:107E400000000000A1004000040008118000009024 +:107E500000000000842121108280901100008089A0 +:107E6000808080008421031141800411001180A1D1 +:107E70000080000221094009848082110040808036 +:107E800080008040000000000000000000000000B2 +:107E900000000000000000000000000000000000E2 +:107EA00000000000000000000000000000000011C1 +:107EB00001100010C000888900884010C000000533 +:107EC000101002000000C100830010100201C00069 +:107ED000880800C090000801020208088201020020 +:107EE0000808101008000801020320841001020095 +:107EF0000808C04004000500030240080801020011 +:107F00000808400408010000000000000000000014 +:107F100002E000000000000000000000000000007F +:107F20000000000000000000000000000000000051 +:107F300000E000008141000000E0000081410000FD +:107F400000E0000081410000820000E0000000002D +:107F5000000002E000008142600000E000004842B2 +:107F6000000000E000004842480000E000004842F5 +:107F70000000000000004842880000E00000484285 +:107F8000000000E000004842000000000000000087 +:107F900000000000000000000000000000000000E1 +:107FA00000000000000000000000000000000000D1 +:107FB0000000000000F0FFF000003CFF0000ACAC4F +:107FC00000003F3F0000FF3C00000000303F000089 +:107FD0003CF00000AA3CA020AFEFFFFBFFAABCBC16 +:107FE000FCBCAAACAA3CA020AFEFFFFBFFF0B0FFA7 +:107FF00030FFF0B2F0AA4FFF5FFF00A0FFAFCFFF4E +:108000008FFFAAAAAAF000708FFF000000000000F6 +:108010000000000000000000000000000000000060 +:108020000000000000000000000000000000000050 +:1080300000000000000000F0FFF000003C00000025 +:10804000ACAC000030300000003C00000000303FCD +:1080500000003CF00000AA3C2020EFEF000800AA3E +:108060001C1C0C1CAAAAAA3C2020EFEF001000F058 +:10807000004F00CFF0F0F0AA00B000A000A8FFABC6 +:1080800000300070AAB2AAF00030CFFF000000005C +:1080900000000000000000000000000000000000E0 +:1080A00000000000000000000000000000000000D0 +:1080B000000000000000000055550000550F0000B2 +:1080C000FFAA0000FF3C00005555000000007D7D28 +:1080D00000000F0F0000550F00003D7D3D3D3C5559 +:1080E00035551F1F0B0B5F5F0A0AFFFA05003CFFA7 +:1080F000BFFFFFEBFFEA0FFFBFFFFFBA45000F55C1 +:108100005555FFABFFEBFF557555FEBEFEFE00005B +:10811000000000000000000000000000000000005F +:10812000000000000000000000000000000000004F +:10813000000000000000000000000F0F0000550FBD +:10814000000055000000C3000000FF000000000018 +:10815000414100003C3C0000550F000038283838F1 +:108160003C5555555F1F0A0B4F0F0E0FFFEA1500C8 +:108170003C001000140015000F000100FFFA05007C +:108180000F554D5554001400005545550414040472 +:10819000000000000000000000650006000E200046 +:1081A00000000000000000000000000000000000CF +:1081B000000000000000000000400006002C120239 +:1081C00040C28006002C920240C28006002C92021F +:1081D000000040E380048029920240E78006002FDF +:1081E0003002406180048029100240618007002D28 +:1081F0001002406180048029100240618006002D39 +:108200001002406180048029100240618007002D27 +:108210001002000000000000000000000000AAAAF8 +:10822000000000000000000000000000000000004E +:108230000000000000000000000000000F0FFFFF22 +:10824000000000000F0FFFFF303F00005555AAAAA5 +:1082500000C300000FC30FC30000FFFF00000000B9 +:108260000F0FC3C3FC3CC000F0FFF5F50000000099 +:108270000F0FC3C3FFFF0000F0F0F0F0000000009C +:108280000000C3C3FCC03C00505F3C3C0000000049 +:10829000FF00FF00000000000000000000000000E0 +:1082A000AAAA00000000000000000000000000007A +:1082B00000000000000000000000000000000F0FA0 +:1082C0000000000000000F0F0000303F0000555577 +:1082D000AAAAFFC300000FFF0F000A5F0A5F000099 +:1082E00000000F0FC3C3FF3FC303000F05050000CD +:1082F00000000F0FC3C3033F033F00FF55550000AD +:108300000000FFFFC3C3FFC33F03505F3C3C0000BE +:1083100000000F0F0F0F0000000000000000000021 +:10832000000000000000000000000000000000004D +:10833000000000000000000000000000000000003D +:108340000000F0F0000000000000F0F0000000006D +:108350000000F0F0000000007D417D41AAAA00FF6E +:1083600082BE82BE000000005C5C5C5CAA00AAFFCA +:1083700000000000000000005F505F50AAF0AAF06B +:1083800000000000FFAA55005C5C5C5CAAF0AAF04B +:1083900000C3FFC30F550F55000000000000000090 +:1083A00000000000000000000000000000000000CD +:1083B00000000000000000000000000000000000BD +:1083C00000000000F0F0000000000000F0F00000ED +:1083D00000000000F0F0000000007D417D41AAAAED +:1083E00000FF82BE82BE000000005C5C5C5CAA00F4 +:1083F000AAFF00000000000000005F505F50AAF0DC +:10840000AAF000000000FFAA55005C5C5C5CAAF0CA +:10841000AAF000C3FFC30F550F5500000000000075 +:10842000000040000000000000000000000000000C +:1084300000004000000000000000000000000000FC +:10844000000020080000820000004000000000083A +:1084500000002005000001100000000304000100DE +:1084600000000002400300400000118020008480D2 +:108470000000008820000000881040800088000074 +:1084800000021002200000A000A020040490009030 +:108490000000000520000400000220000000000091 +:1084A00000000000000000020002000200020000C4 +:1084B00000000000000000000000000000000000BC +:1084C000000200000000000000000000009000001A +:1084D00000000088000040000400000000000000D0 +:1084E00004000000000900A00085000020040090A6 +:1084F00000020000001000840000000000200005C1 +:108500000000000100010300000500030001094113 +:108510000003000000040000000000010000000053 +:10852000000000000000000000000000000000004B +:108530000000000000000000000002000000000039 +:1085400085000000000000000000000000000000A6 +:108550000200000003000000000000000000000016 +:108560000000900000000000000800000000000073 +:108570008800000000000000000040000000000231 +:1085800000041004000000A00008001000100010FB +:10859000000021200588018400000000000801027D +:1085A00003000008000000000010000800080000A0 +:1085B000000000000010000000000000000800089B +:1085C0000000080800000000000400080208000085 +:1085D00003080000000002000000028400080008F8 +:1085E00000000000000800000000008400080008EF +:1085F00000000008000000820010000080840008D5 +:10860000008321018009000800050084000900C1E1 +:108610000001000888098202021100080008000415 +:10862000020100000000000000000008000000003F +:1086300000000000000000000000000000000041F9 +:108640000000000000000000000000080000000022 +:108650000000000000000000000020800000C100B9 +:1086600000030000004004800105000008040089A8 +:1086700001C0000000020002A02100210208000841 +:108680008800000308088820080290210404C00420 +:108690000000A0200083000900040240C003002164 +:1086A00000210002000000000000000000000000A7 +:1086B00000000000000000000000000000A0000812 +:1086C00000000000000000000000000000000000AA +:1086D000000000000000000200A00008002000824E +:1086E00004000084000000828020088400A0800034 +:1086F0000010081100100010000800000010808415 +:108700000082030002820011000180010000841138 +:108710000001000000C100200000201180010000C5 +:108720000000000000100000000000000000000039 +:10873000000000000000000000000000040008002D +:1087400000000000000000000000000002008200A5 +:108750000000000000000000004101400080900087 +:1087600004080000000000002000001100000000CC +:108770000000000008100000000940210808001156 +:10878000400000009000C0001100000091C02004D3 +:10879000400500008200828508C109C10100010076 +:1087A0000041000308000005000000000000000078 +:1087B00000000000000000000000000000000000B9 +:1087C00000000000000000000000000000000000A9 +:1087D0000000000000000000020000002000000473 +:1087E0000000009000000000000000040040009025 +:1087F00000840804000480002000000404008000BD +:10880000000000A0000000000904900403004004E0 +:1088100000C111884004000800200010201004A0AE +:1088200002000090000400A0000000000000000012 +:108830000000000000000000000000000000000038 +:108840000000000000000000000000000000000028 +:1088500000000000000000009000A00000000000E8 +:1088600040000100000000A0004000000083000064 +:10887000A00801000089009008C121218221000880 +:108880000000A000008000808205028000C121005D +:108890004009010820000000A0200205082108006E +:1088A000002100A0C0404002A000C0100000000055 +:1088B000000000000084000000A000000000000094 +:1088C00000000000000000000000000000000000A8 +:1088D000000000C000000000008400C00000000094 +:1088E00000A0808220000000000511100000001090 +:1088F000200200000400000203040010200000C059 +:10890000000000402000001011200000002008108E +:108910000410808804A00000000000010010800006 +:1089200080000000000300848000001000C00000F0 +:10893000000000000000000000000000000000082F +:108940000000000000000000000000000000000027 +:1089500000000000000088000000004000000080CF +:1089600000000002000000040010040400000000E9 +:108970000020020400040010000000034010200446 +:1089800000204004000002000000002000410220FE +:1089900091410004214090009009000901210384C5 +:1089A0008204088940000205204000102021400870 +:1089B00000000000000000000000000000000000B7 +:1089C00000000000000000000000000000000000A7 +:1089D0000000000000000000000000000000000097 +:1089E000000800000000110000010000000000006D +:1089F00000000000000000000000000000008001F6 +:108A00000000030000020000218209820001000032 +:108A100041A110000000C08820000082402020906A +:108A20002002030588100302838400000000000078 +:108A30000000000000000000000000000000000036 +:108A40000000000000000000000000000000000026 +:108A5000000000A00088001000400000000000009E +:108A6000000001100004008804200084012188888F +:108A700000A1000000A0A110C0889004020889C0D5 +:108A800004A18200000083010201000100A0010096 +:108A90008288900402A08904034090824084009060 +:108AA000C002A002A0C110900082904110890090E5 +:108AB00082028808000000000000000000000000A2 +:108AC00000000000000000000000000000000000A6 +:108AD0000000000000800000000000000000000016 +:108AE000000000001100210000000000090003A1A7 +:108AF00000110040000000808380000080000080A2 +:108B0000020000A180110040412000050004008007 +:108B1000410000008000008003000400808000000D +:108B2000098020000000A0A10021101180204040F9 +:108B3000210500400083000000000000000000004C +:108B40000000000000000000000000000000000025 +:108B50000000000000000000002000800000000075 +:108B600000000000000000418908808300808080B0 +:108B7000C0009180210800001000091191000290AE +:108B800040008000A1800000108010001004A0832D +:108B9000100085118300410309088911A00241805A +:108BA00082080300100800001109C09009034083E7 +:108BB00020800903048040850000000000000000C0 +:108BC00000000000000000000000000000000000A5 +:108BD000000000000000000000000000000800008D +:108BE00000000000000000000201090308A0408806 +:108BF0000808090084100385000001100401A0008A +:108C0000840801900200A1A00000824090000201AF +:108C100009A100A00801A00011000000A001A1000E +:108C2000890410019088C0008288404003090082B6 +:108C300091110104000301A00008000000000000E1 +:108C40000000000000000000000000000000000024 +:108C50000000000000000000000084000000000090 +:108C6000000000000000000000004000889110108B +:108C7000414182000084048284A1000000010010B0 +:108C80000009100100100102008900C100000188E4 +:108C9000010900044000001010401001C002200033 +:108CA00090000001C090041010029002052103A161 +:108CB00010888220C01000890002111000000000FE +:108CC00000000000000000000000000000000000A4 +:108CD0000000000000000000000000000000000094 +:108CE00000000000000000000000000080090040BB +:108CF00000024141000400210083008200000004C2 +:108D0000000400A1800200001109002100200002DF +:108D1000030320A111028008000500039105809142 +:108D200000210009034110850082000210098820FB +:108D300021824100050480901140110204100000BE +:108D40000000000000000000000000000000000023 +:108D50000000000000000000000000000000000013 +:108D6000000000000000000000000000000080047F +:108D70008091040000002009031109008400000014 +:108D8000029102009180400221000480040002113F +:108D900021032080208002400980048402210503F1 +:108DA000C089C000000009040080002000000040CD +:108DB000A1041010108009090421A1001000100363 +:108DC00000000000000000000000000000000000A3 +:108DD0000000000000000000000000000000000093 +:108DE000100082001000840000000000000000005D +:108DF00010008821C01040000100A0820088890076 +:108E0000000010C00088084000000100100482002B +:108E10000001018800080040010111C04182018564 +:108E200000010341038800040001000800880002DB +:108E300000000582010441028300888382008900CA +:108E400041000000000000000000000000000000E1 +:108E50000000000000000000000000000000000012 +:108E60000000000000000000000000000000000002 +:108E70000000000000E000008141842100E00700C4 +:108E800000000000000A000007008200500000E01F +:108E9000000000000000000000004100008200000F +:108EA00007004200000A00E007004100000000E067 +:108EB00007000000000000E00700000000000000C4 +:108EC0000000500000000000000000000000000052 +:108ED0000000000000000000000000000000000092 +:108EE000000000002040040200000000000000001C +:108EF000000000003F3FF90900F000FFE781E78133 +:108F0000F000F0FF0000FFFF0F0FF0FFF0FFF69002 +:108F1000F690F000F000000000000F0F00FFFFFFD0 +:108F200000FFF0FFF0FFFF00FFFFE7E7E7E70000CB +:108F30000000C300990F00000101018103C33C3C04 +:108F4000FF00990FC30000000000000000000000B7 +:108F50000000000000000000000000000000000011 +:108F60000000000000001080080100000000000068 +:108F70000000000000003030F90900F00000E78137 +:108F8000E781F000F0FF0000F0F00000F000F000DA +:108F9000F690F690F100F000000000000F0F00FFC7 +:108FA000FF000000F000F000FF0000002424242453 +:108FB00000000000C3FF990F0000000009990FFF97 +:108FC000F0F06666990FC3FF00000000000000008B +:108FD0000000000000000000000000000000000091 +:108FE0000000000000000000000000000000000081 +:108FF0000000000000000000000000000000000071 +:109000000000000000000000000000000000000060 +:109010000000000000000000000000000000000050 +:109020000000000000000000000000000000000040 +:109030000000000000000000000000000000000030 +:109040000000000000000000000000000000000020 +:109050000000000000000000000000000000000010 +:1090600000000000000000000000FFFFFFF3000010 +:10907000000000000000000000003F3F3F3F9999C2 +:10908000FF00C387C381FFF300300000603CF93C60 +:109090000F0F0F0F000FF0FF0F660F6600000000AC +:1090A00000000000B4B4B4B4069F060600FF00FF41 +:1090B00060F9FFFFBCB08C80FFC300C30000080054 +:1090C000F3F391911CDF3CFF000000000000000062 +:1090D0000000000000000000000000000000000090 +:1090E000000000000000000000000000FFFFF3FF90 +:1090F0000000000000000000000000003F3F1B3F98 +:10910000C3C3F0F0C3E7C3E1FFDB00180000603C1D +:10911000F93C00FF9999000FF0FF0F660F66000001 +:109120000000800000002424BDBD069F9F9F3030BA +:10913000F3F360F90000BFB38F8399F099F09000CA +:109140000000FFFFFFFF3CFF3CFF000000000000AD +:10915000000000000000000000000000000000000F +:1091600000000000000000000000000000000000FF +:1091700000000000000000000000000000000040AF +:109180003006000C00010061402280050000000054 +:1091900000610026000D00008061000480090001CC +:1091A00000610006000D000000610026001D0000A7 +:1091B00000610027000D000005610A0F050D00A0E9 +:1091C00085615A0F051D00A000613006000D0000EA +:1091D000000000000000000000000000000000008F +:1091E000000000000000000000000000000000007F +:1091F000000000000000000000000000000000006F +:1092000000000F0FFFFF3CF010FB10FBDF8FD08042 +:1092100000008082A0AA3F3D0200FEC23E02F0F0A4 +:10922000F0F0FF1FFF1F00FF0043000400F40000E8 +:10923000AA00C300C3FFEB00A0A0000000000FC302 +:109240000055E3EB00000F0FC3C3E000EB00C300C9 +:10925000550F0000000000000000000000000000AA +:1092600000000000000000000000000000000000FE +:1092700000000000000000000000000000000000EE +:10928000000000000F0F00003CF000EB14FFFFFF98 +:1092900000000000C0C3F0FF3D3D0000FEC23E02E2 +:1092A000AAFF0055FF1FFFFF00FF005F0000000046 +:1092B0000010AA10C300C3FF2800A0A000000000F7 +:1092C0000FC3FF55F3FF00000F0FC3C3FF00FF00E4 +:1092D000C3FF550F00000000000000000000000068 +:1092E000000000000000000000000000000000007E +:1092F000000000000000000000000000000000006E +:109300000000000000000000F0F000000CFC0CFC6D +:10931000FFF000F0000000000000DFDFDF555C5CC4 +:109320005C5CAA3CAA3CC3828283554105010000D3 +:109330000000F0FF3CA000000000AAA85455000067 +:109340000000283828380000C2FAAF82058280C0A9 +:10935000A0F0FF0FC3C300000000000000000000E9 +:1093600000000000000000000000000000000000FD +:1093700000000000000000000000000000000000ED +:1093800000000000000000000000F0F000000CFCF5 +:109390000CFCFFF000F000000000000000000000E6 +:1093A0005C5C5C5CAA3CAA3CC3C382C3FFC30F03E2 +:1093B000000000000FFF00A000000000AAAA555501 +:1093C0000000000000300030C2FAC2FAAFD705D763 +:1093D00082C3AAFFFFAAC3FF000000000000000034 +:1093E0000000000020000004000000000000000059 +:1093F000000000000000000040000000000002002B +:109400000000000020000000000001000200000039 +:109410000000000000000010000320000000000019 +:109420002000000040002000000084100010000018 +:109430000080000040080000000020850800008037 +:1094400004800000209084000080200000000000C4 +:1094500000808800200000000200000000000000E2 +:1094600000000000090000000000000000000000F3 +:1094700000000040000000000000000000000002AA +:1094800000000000000000000000000002000000DA +:10949000000040000000400000000000000000004C +:1094A00000000000000000080000000000000000B4 +:1094B00000000010001000000084000000108084F4 +:1094C0000004001005000010000000020008000069 +:1094D00000000010004000400000000000000000FC +:1094E00000000010000082000000001000000000DA +:1094F000000000000000000000000200000000006A +:109500000000000000000000000000000200000059 +:1095100000400040000000009000900000000000AB +:10952000000000000000000000000000001000002B +:109530000000000000000000000800100010008083 +:10954000000000000080000000000000001000008B +:1095500000000000000000000000004100000000CA +:1095600000000008000000000000000000C0000033 +:1095700000000000000000000000000000000000EB +:109580000000080800000000040000000000C00007 +:1095900004000401000100000000000000000000C1 +:1095A00000000000000800000000000000000000B3 +:1095B000000000000000040000000000000000881F +:1095C00000040000008400400000000800100008B3 +:1095D0000000008400840200000000080010001059 +:1095E000000000000000000000000000000000007B +:1095F000000000000000000000000000000000006B +:10960000000000000000000000000000000000005A +:109610000000000000000000004100000000000009 +:1096200000000000000020000010200000000000EA +:109630000000000000000000000500000000000322 +:1096400000080008081040000003004100410040ED +:1096500000050008000800050000000200400005A9 +:1096600000030000000000000000000000000000F7 +:1096700000000000000000000000000008000000E2 +:109680000000000000000000000000A000400020DA +:10969000110000000000000000A0000000C0000257 +:1096A0000002000000000000000000080088000820 +:1096B00002A0110000A00010000800A000A011A04E +:1096C00000A0008200A080A1A110000841080000B5 +:1096D0000000218400A000820002000221A041C0FD +:1096E00000A00002000000000000000000000000D8 +:1096F0000000000400000000000000000000000066 +:109700000000000000000000000000000000000059 +:109710000000000004000000000000000000000045 +:109720000000000000000010000000000000000029 +:109730000000000000002000000008084083000036 +:10974000A008904100002000000000410002A0118C +:109750000021400500000000010000000000002181 +:1097600000400000000000000000000000000000B9 +:1097700000000000000000000000000000000000E9 +:1097800000000000000000000000000000000000D9 +:109790000000000000000000000000000000400089 +:1097A00000000000000000000308000000000000AE +:1097B0000000008400A0000010C00084000000022F +:1097C000101040900000000000000010000000C0D9 +:1097D0000440004000A000000090108200000090B3 +:1097E00000000004000200C00000000000000000B3 +:1097F0000000000000000000000000000000000069 +:109800000000000000000000000000000000000058 +:109810000000000000000000000000000000000048 +:1098200000000000000000000000000000000080B8 +:1098300000800000000000000100000000000000A7 +:10984000000000000100000820C101000804000819 +:109850008200004100410841000000000000A0001B +:1098600000000008000000000005000000000000EB +:1098700000000000000000000000000000000000E8 +:1098800000000000000000000000000000000010C8 +:10989000000000000000000000C002000010008472 +:1098A0000020000000000000000800000000000090 +:1098B000001020020000008400080808200000A01A +:1098C0000010008200000284008400022040A001F9 +:1098D000001000101100004020080040110020027C +:1098E000210800104084000803C0000800000000A8 +:1098F0000002000000000000000000000000000066 +:109900000000000000000000000000000000000057 +:109910000000000020000000000000000000000027 +:1099200000000080000000000002000000000000B5 +:109930000000000000000000000000000000000027 +:109940000208000000058800000820000041100007 +:1099500000218284090000210041400000004000F5 +:10996000000500100105004000020008000200028E +:1099700000000000000000000000000000000000E7 +:1099800000000000000000000000000000000000D7 +:1099900000000000000000000000000000000000C7 +:1099A0000000000004200000000000000000000093 +:1099B00000000000000000000000000000000000A7 +:1099C000000000000000000000002008000000006F +:1099D00003000000000420000000119011000000AE +:1099E000098200C000844008000000080000000058 +:1099F0000000000000000000000000000000000067 +:109A00000000000000000000000000000000000056 +:109A10000000000000000000000000000000000046 +:109A200000000490000000000000000000000000A2 +:109A30000000000084000000820000000000000020 +:109A40000000000000000000000000000000000016 +:109A50000000C004001000A010C002A0008282908C +:109A60001090A090A010400482C0000000000000F0 +:109A700000000000000000000000000000000000E6 +:109A800000000000000000000000000000000000D6 +:109A900000000000000000000000000000000000C6 +:109AA0000000000000800000000000000000000036 +:109AB0000000000000000000000080000000000026 +:109AC0000000000000000000000000000000000096 +:109AD00000000000800000000500000080800900F8 +:109AE00000000000890003808080800000000000EA +:109AF0000000000000000000000000000000000066 +:109B00000000000000000000000000000000000055 +:109B10000000000000000000000000000000000045 +:109B200000000000000000800040008000000000F5 +:109B30000000000000000000000000000000000025 +:109B40000000000080000000000000000000000095 +:109B50000000000000000409040984030000030061 +:109B600004028480C000000000218000000000008A +:109B700000000000000000000000000000000000E5 +:109B800000000000000000000000000000000000D5 +:109B900000000000000000000000000000000000C5 +:109BA000000000000000880000400001008200006A +:109BB00000000000000000000000000000000000A5 +:109BC00084000400000008000200C000A000C000E3 +:109BD00000000000000084000200A100A020A000FE +:109BE0008200A001A0020900A0008200A004C00021 +:109BF0000000000000000000000000000000000065 +:109C00000000000000000000000000000000000054 +:109C10000000000000000000000000000000000044 +:109C2000000000000000000000000000A090000004 +:109C30000000000000000000000000000004000020 +:109C40000002000000000000000000000000000111 +:109C50000100000000000001000000901010001042 +:109C60001182A00500040005A002C08300A00082AC +:109C7000A0C1000000000000000000000000000083 +:109C800000000000000000000000000000000000D4 +:109C900000000000000000000000000000000000C4 +:109CA000000000000000000000000500000000802F +:109CB00000000000000000000000000000040000A0 +:109CC0000041000200000000000000000011000040 +:109CD00000040404000400210005040000000080CA +:109CE000008041000002000200A18009804000A124 +:109CF000008400410000000000000000000000009F +:109D00000000000000000000000000000000000053 +:109D10000000000000000000000000000000000043 +:109D200000000000000000000000000000118000A2 +:109D3000000000000000000000000000000000041F +:109D40000000000000000000000000000000000013 +:109D5000008000000000000400800000000080007F +:109D6000802180008000000000800000004000048E +:109D700000400000000000000000000000000000A3 +:109D800000000000000000000000000000000000D3 +:109D900000000000000000000000000000000000C3 +:109DA00000000000000000000000000000000001B2 +:109DB0002000000000000000000000000000000083 +:109DC0000001000000000000000000000000000092 +:109DD0000000008200A000000001008200A000003E +:109DE0000400108982049000104040C0908240011D +:109DF000A000A0210088000000000000000000007A +:109E00000000000000000000000000000000000052 +:109E10000000000000000000000000000000000042 +:109E20000000000000000000000000000000000032 +:109E3000000000000700000000000000000000001B +:109E40000000000000000000000000000000000012 +:109E50000000000000000000000000000000000002 +:109E60000000000000E0000081820000000000000F +:109E7000420000000000000042000000000000005E +:109E800000000000000000000000000000000000D2 +:109E900000000000000000000000000000000000C2 +:109EA00000000000000000000000000000000000B2 +:109EB000000000FF000000FF0000000000000000A4 +:109EC000000000000000000000000F0F0000000074 +:109ED0000000000000000000000000000000000082 +:109EE00000000000CF450000CF004500000C00FC42 +:109EF0005541050100FFFF55004100000000000032 +:109F00000000000000000000000000000000000051 +:109F10000000000000000000000000000000000041 +:109F20000000000000000000000000000000000031 +:109F30000000000000FF000000FF00000000000023 +:109F400000000000000000000000FFFF0F0F0000F5 +:109F50000000000000000000000000000000000001 +:109F6000000000000000CF45CF45CFCF45450000A1 +:109F70000050FFC30F03FFFFFF5503410300000024 +:109F800000000000000000000000000000000000D1 +:109F900000000000000000000000000000000000C1 +:109FA00000000000000000000000000000000000B1 +:109FB0000000000000000000FF0000003C3C00002A +:109FC0000000000000000000000000000000000091 +:109FD00000000000F0F0C3C3000000005C5C000C57 +:109FE000000000000000555500000800E300F300E9 +:109FF000FFFF002BA200FF00B0B2F0F3010101004F +:10A000000000000000000000000000000000000050 +:10A010000000000000000000000000000000000040 +:10A020000000000000000000000000000000000030 +:10A0300000000000000000000000FF0000003C3CA9 +:10A040000000000000000000000000000000000010 +:10A05000000000000000F0F0C3C30000000000009A +:10A06000000000000000AAAAFFFF00000800EB00AB +:10A07000FF00FFFF0003F300FF00BCBEFCFF010078 +:10A0800001000000000000000000000000000000CF +:10A0900000000000000000000000000000000000C0 +:10A0A00000000000000000000000000000000000B0 +:10A0B0000000000000000000000015002A0005401C +:10A0C00000A8000000000000000000000061000681 +:10A0D000000D00000000000000000000006100060C +:10A0E000000D000000610006000D00010061400746 +:10A0F000000D000000610006000D00000061000678 +:10A10000000D000000000000000000000000000042 +:10A11000000000000000000000000000000000003F +:10A12000000000000000000000000000000000002F +:10A13000000000000000000000000000000000001F +:10A14000000000000000000000000000000000000F +:10A150000000FF00C3C3000000000000000000007A +:10A160000000FF3CC300000000000FC30FC300004D +:10A170000000000000000000000000FF004300009D +:10A1800000003FC382C30000000000000000000088 +:10A1900000000000000000000000000000000000BF +:10A1A00000000000000000000000000000000000AF +:10A1B000000000000000000000000000000000009F +:10A1C000000000000000000000000000000000008F +:10A1D00000000000FF00C3C30000000000000000FA +:10A1E00000000000FF3CC300000000000FC30FC3CD +:10A1F00000000000000000000000000000FF005F01 +:10A20000000000003FC382000000000000000000CA +:10A21000000000000000000000000000000000003E +:10A22000000000000000000000000000000000002E +:10A23000000000000000000000000000000000001E +:10A24000000000000000000000000000000000000E +:10A2500000000000000000000000000000000000FE +:10A2600000000000000000000000000000000000EE +:10A270000000000000003F033F03000000000F0546 +:10A2800003010000000000000000000000000000CA +:10A2900000000000000000000000000000000000BE +:10A2A00000000000000000000000000000000000AE +:10A2B000000000000000000000000000000000009E +:10A2C000000000000000000000000000000000008E +:10A2D000000000000000000000000000000000007E +:10A2E000000000000000000000000000000000006E +:10A2F00000000000000000003F033F0300000000DA +:10A30000FF55C341000000000000000000000000F5 +:10A31000000000000000000000000000C00000007D +:10A320000000880020000000000000004000000045 +:10A3300000002000000000000000000020000000DD +:10A34000000000004000000000000000201000009D +:10A3500000002000000000000000000000000000DD +:10A360000400000000034005000000000000200081 +:10A3700000000000000000000000000900000000D4 +:10A38000400000100000000000000000000020005D +:10A390000000000800000000000000000000400075 +:10A3A00000000002000000000000000000000000AB +:10A3B000000000000000400000000000000000005D +:10A3C0004000000000000000008400000000400089 +:10A3D000000000000000000000000000000000007D +:10A3E00000000000000010000000008200000000DB +:10A3F0000000000000000000000000080000000055 +:10A40000000000000000000040000000000000000C +:10A41000000000000000000000000000000002003A +:10A42000000000000000000000000000000000002C +:10A43000000000000000000000000000000000001C +:10A440000000000000000000000004000000010007 +:10A4500000000200040001000000000000400000B5 +:10A460000500000090000000020000000000000055 +:10A4700001000000000002000100000000000000D8 +:10A480000200000900000000080000000041000078 +:10A4900003000000000000100200000000000000A7 +:10A4A00000000000000000000000040000000000A8 +:10A4B000000000000000000000000000000000009C +:10A4C000000000000000000000000000000000008C +:10A4D0000200000000000000020000000000000078 +:10A4E0000000020000000000000080820000000068 +:10A4F0000000020000000000000002080000001040 +:10A50000000080100000000000008000000000003B +:10A5100000000200000000080000801000000000A1 +:10A52000000000000000000000000000000000002B +:10A53000000000000000000000000000000000001B +:10A54000000000000000000000000000000090007B +:10A5500000000000000000000000000000000021DA +:10A5600000080021000500219003000000030021E5 +:10A570009010002100000021A01000100000C02158 +:10A5800000030021000500210008900000000021C8 +:10A590000003002100020021000000000041000033 +:10A5A00000000000000000000000000000000000AB +:10A5B000000000000000000000000000000000009B +:10A5C000000000000000000000000000000000008B +:10A5D000000000000000000000000000000000007B +:10A5E0000000000000A0000800000002008200C07F +:10A5F000000000000000001000000000410000000A +:10A60000000000000010000000840084210800C049 +:10A610000008001000C000010010008200C0000807 +:10A62000000000000000000000000000000000002A +:10A63000000000000000000000000000000000001A +:10A640000000000000000000000000000000080002 +:10A650000000000000000000A000000000008200D8 +:10A6600000000000000000000200080000000000E0 +:10A6700000000800000000040004000000000000CA +:10A68000080082000000000800000009000000002F +:10A6900000040800000000000000000000000000AE +:10A6A000000000000090000000000000000000001A +:10A6B000000000000000000000000000000000009A +:10A6C000000000000000000000000000000000008A +:10A6D000000000000000000000000000000000007A +:10A6E00000000000000000000000000800A000C002 +:10A6F00000840000000000000000000002000000D4 +:10A70000000000000084000021A00090100400C0A0 +:10A71000000000100000000000A0008800A0001051 +:10A720000090000400000000000000000000000095 +:10A730000000000000000000000000000000000019 +:10A740000000000000000000000000000000000009 +:10A7500000000000000020000000000000000000D9 +:10A7600004000008000000000000000000030000DA +:10A7700000410021000000100010000582000010C0 +:10A780000241000000000000A0080000002100417C +:10A7900000000000820500020009004000100008CF +:10A7A00000000000000500000000000000000000A4 +:10A7B0000000000000000000000000000000000099 +:10A7C0000000000000000000000000000000008405 +:10A7D0000000000000080000000000000000000071 +:10A7E0000000000000000000000000000000000069 +:10A7F0000000000200000010000000000000000047 +:10A80000000000080000000000C000000008200850 +:10A81000008408002100000000000000000002A0E9 +:10A8200000840000000000000000000000020000A2 +:10A830000000000000000000000000000000000018 +:10A840000000000000000000000000000000000008 +:10A8500000000000000000000811000020000000BF +:10A860000000000400000021000000200000002182 +:10A870000005000000210000000500412003002128 +:10A880000021820002008811000000050021202123 +:10A89000000500030000000000040440010800213E +:10A8A00000080000000088112000000000000000E7 +:10A8B0000000000000000000000000000000000098 +:10A8C0000000000000000000000000000000000088 +:10A8D0000000000000000000000000000000000078 +:10A8E0000000000000000000000000000000000464 +:10A8F00000000084000000000004000000000000D0 +:10A9000000000000000000000084001000000000B3 +:10A9100000000000410000000000000000021000E4 +:10A9200000000010001000000900000400000000FA +:10A930000000000000000000000000000000000017 +:10A940000000000000000000000000000000000007 +:10A950000000000000000000000000000040008433 +:10A96000000200020002004000080208000088887F +:10A970000082000210100408008800080008C010BF +:10A98000008200A09010C0A00040000808100082C3 +:10A990000088000200080004008200C002101110AC +:10A9A00000820002C0A0849000200008100800006F +:10A9B0000000000000000000000000000000000097 +:10A9C0000000000000000000000000000000000087 +:10A9D00000000000000000000000000000000080F7 +:10A9E0000000000000000380008000800080000064 +:10A9F00000800080000080800080000000800080D7 +:10AA00009000008000800080800000800080800036 +:10AA100009000000000000800000008000000080AD +:10AA20008400218000000000000000000080808081 +:10AA30000000000000000000000000000000000016 +:10AA40000000000000000000000000000000000006 +:10AA500000000000000000000000000000000000F6 +:10AA60000000001000820000800000210021800012 +:10AA7000000000000009000080000000004100808C +:10AA80008000000000210080000000008011802173 +:10AA900000000000802180800000000000208080F5 +:10AAA0000000000000410021000080000003008041 +:10AAB0008000000000000000000000000000000016 +:10AAC0000000000000000000000000000000000086 +:10AAD0000000000000000000000000000000000076 +:10AAE00000000000000200A00000080000020011A9 +:10AAF000080000000000000202100804900010038B +:10AB000010A00800000088020208000202000802EB +:10AB1000080300000400100210A0A000900008022A +:10AB200010A088100000000200A100C00400100363 +:10AB300004A00884000000000000000000000000E5 +:10AB40000000000000000000000000000000000005 +:10AB500000000000000000000000000000000000F5 +:10AB60000000000010880008000208020408000825 +:10AB7000000802080000C000002000020808C08889 +:10AB8000000000081008C00000200002020208882F +:10AB9000000800C00800081000100002C084200453 +:10ABA00000A000081100208800C00002C0A14000E1 +:10ABB0000020C00884080000000000000000000021 +:10ABC0000000000000000000000000000000000085 +:10ABD0000000000000000000000000000000000075 +:10ABE00000000000000000000080000000000000E5 +:10ABF0000000008000800000800000800000808055 +:10AC000080000000008090808000000000000000B4 +:10AC100080000000000080008000008000008000B4 +:10AC200000000000008009000011000400028041C3 +:10AC30008000008000800080000000000000000014 +:10AC40000000000000000000000000000000000004 +:10AC500000000000000000000000000000000000F4 +:10AC600000000000000000000011000080008000D3 +:10AC70008000800080800000000000038000000051 +:10AC80000000000000800080800000000000000044 +:10AC90008000000080000080000080000000800034 +:10ACA0008000800000800000000000008000800024 +:10ACB0000000001100000080800000000000000083 +:10ACC0000000000000000000000000000000000084 +:10ACD0000000000000000000000000000000000074 +:10ACE000000000000000000000009000A0004000F4 +:10ACF0000800100088020408880000008200880410 +:10AD000088024000820004084008A000840004106B +:10AD10002002A00082008810C01088000400820475 +:10AD20000402A0001000108210904000C000020039 +:10AD30000800040090008284C008A0000000000009 +:10AD40000000000000000000000000000000000003 +:10AD500000000000000000000000000000000000F3 +:10AD600000000000000000000000000000000000E3 +:10AD700000000000000000000000000000000000D3 +:10AD800000000000410000000000000084000000FE +:10AD9000000000004200000000000000420000002F +:10ADA00000000000000A0000000000000000000099 +:10ADB0000000000000120000000000000000000081 +:10ADC0000000000000000000000000000000000083 +:10ADD0000000000000000000000000000000000073 +:10ADE0000000000000000000000000000000FF3C28 +:10ADF000C30000F0003CB4B4B4B4FFF000000000A5 +:10AE0000B6BF262F00660000F0FFF0000066003C91 +:10AE10006060F9F966600099737043407E007E00BF +:10AE2000F0FF000F00FC000C3F3FF90900F300F3B6 +:10AE3000FBCB3B0BC399000FFFF00F00000FFF99F6 +:10AE40000000000000000000000000000000000002 +:10AE500000000000000000000000000000000000F2 +:10AE600000000000000000000000000000000000E2 +:10AE7000B1B1B1B100F0003C66FF00990000003CA8 +:10AE80000000B0B92029000000F03C993C99006610 +:10AE9000003CE781E781666000007F7C4F4C0090BA +:10AEA00000903939393900FC000C3030F909003094 +:10AEB0000030F8C83808C399FF0F36363636FF0F12 +:10AEC000FF990000000000000000000000000000EA +:10AED0000000000000000000000000000000000072 +:10AEE0000000000000000000000000000000000062 +:10AEF0000000000000000000000000000000000052 +:10AF00000000000000000000000000000000000041 +:10AF10000000000000000000000000000000000031 +:10AF20000000000000000000000000000000000021 +:10AF30000000000000000000000000000000000011 +:10AF40000000000000000000000000000000000001 +:10AF500000000000000000000000000000000000F1 +:10AF600000000000000000000000000000000000E1 +:10AF700000000000FFFFCFFF00000000FF00EFEF28 +:10AF8000000000000000FFBFFFBF00000000FFFF47 +:10AF9000EFEFFF009999F0F0FFFF00000000FFFFC6 +:10AFA000BFBF81F381F3DFFFDFFFFFC300C3BDFF3E +:10AFB000FDFFF0C06040FFFF7F6F0000000066FFF4 +:10AFC00066FFC3C399990000000000000000000064 +:10AFD0000000000000000000000000000000000071 +:10AFE0000000000000000000000000000000000061 +:10AFF0000000000000006666666600000000FF00BA +:10B00000FFFF3C3C66660000FFFF0000666600FF35 +:10B0100000FF00FFF0F0C3C3F0F0DBFF0F660F6628 +:10B02000FF00FF00BDF3BDF30000FFFFF099F099B2 +:10B0300024666466FFC3664200007F6F0000000064 +:10B0400026BF069FF0F0FF00000000000000000097 +:10B0500000000000000000000000000000000000F0 +:10B0600000000000000000000000000000000000E0 +:10B0700000000000000000000000300000000000A0 +:10B08000000030000000000100000000300000104F +:10B09000000100003000000000000000300000004F +:10B0A000000000003000000000010000300000003F +:10B0B0000000000030000000000000613006000DBC +:10B0C0000000000030000000000000000000000050 +:10B0D0000000000000000000000000000000000070 +:10B0E0000000000000000000000000000000000060 +:10B0F0000000000000000000000000000000000050 +:10B10000000000000000000000000000000000003F +:10B11000000000000000000000000000000000002F +:10B12000000000000000000000000000000000001F +:10B13000000000000000000000000000000000000F +:10B14000C300C0000000000000000000000000007C +:10B1500000000000000000000000000000000000EF +:10B1600000000000000000000000000000000000DF +:10B1700000000000000000000000000000000000CF +:10B1800000000000000000000000000000000000BF +:10B1900000000000000000000000000000000000AF +:10B1A000000000000000000000000000000000009F +:10B1B000000000000000000000000000000000008F +:10B1C00000000000C00000000000000000000000BF +:10B1D000000000000000000000000000000000006F +:10B1E000000000000000000000000000000000005F +:10B1F000000000000000000000000000000000004F +:10B20000000000000000000000000000000000003E +:10B21000000000000000000000000000000000002E +:10B22000000000000000000000000000000000001E +:10B23000000000000000000000000000000000000E +:10B2400000000000000000000000000000000000FE +:10B2500000000000000000000000000000000000EE +:10B2600000000000000000000000000000000000DE +:10B2700000000000000000000000000000000000CE +:10B2800000000000000000000000000000000000BE +:10B2900000000000000000000000000000000000AE +:10B2A000000000000000000000000000000000009E +:10B2B000000000000000000000000000000000008E +:10B2C000000000000000000000000000000000007E +:10B2D00000004000000000002000400000000000CE +:10B2E000200020000000400020002000000000009E +:10B2F00020042000000000000000200000000000EA +:10B3000020002000000000002000000000020000DB +:10B3100000090001040004000400000020000000F7 +:10B3200000002000200000000000000000000008D5 +:10B3300000000200200000000000000000000000EB +:10B3400000002000200800000000000000000008AD +:10B35000001000100000000000020000000040008B +:10B36000000000004000000200000000000000009B +:10B370000000000009000000000000004000000084 +:10B38000400000000000000000000000000040003D +:10B39000000000000000200000000000004010003D +:10B3A000400000000000100000000000000000004D +:10B3B000000200000000000000000000000000008B +:10B3C00040004000000040000000000000000000BD +:10B3D000000000000000000000000000000000006D +:10B3E000000000000000000000000200000000005B +:10B3F000000000000000000000000010001000002D +:10B400000000000000000000000004000000000038 +:10B410000200000000100000000000000000010019 +:10B42000000000000000001000000000000000000C +:10B4300000000000000001100000000000000100FA +:10B4400002000000000001000200000000000100F6 +:10B4500000000200000008000000000000000000E2 +:10B4600000000000000000000000000000000000DC +:10B4700000000000000000000000000000000000CC +:10B4800000000000000000000000000000000000BC +:10B4900000000400000000000000000000000000A8 +:10B4A000020000000000000000000000000000009A +:10B4B0000000000000000000020000000008000082 +:10B4C00002000000008400000200000000080000EC +:10B4D0000288001000100000910000000000000031 +:10B4E000000000000000000000000000000000005C +:10B4F000000000000000000000000000000000004C +:10B50000000000000000000000000000000000003B +:10B510000000000000000000000000000000000823 +:10B52000000000000000000000000000000000001B +:10B5300000000008000000000000000000080000FB +:10B540000000000000210008000000000041004150 +:10B55000004100001041000300000000080000004E +:10B5600000000000000000000000000000000000DB +:10B5700000000000000000000000000000000000CB +:10B5800000000000000000000000000000000000BB +:10B590000000000000820000000000000000000029 +:10B5A00000C000000000000040100000030000A0E8 +:10B5B000008200000008000000A000000000100051 +:10B5C00008A000A00000100800000010000000000B +:10B5D000091000C000C00008000000000000820048 +:10B5E00000000000000082080000010000808208C6 +:10B5F000000001000080000000000000004010007A +:10B600000000000008000000000000000000000032 +:10B610000000080082000000000000000800000098 +:10B62000A000000002000000000000000000000078 +:10B6300082000000820008000000000000000000FE +:10B6400000000000000000000000000000000000FA +:10B6500000000000000000000000000000000000EA +:10B6600000000000000000000001000020000004B5 +:10B670000001004020000004030000000000000062 +:10B6800000000000000000000000000000000000BA +:10B6900000000000000000000000000000000000AA +:10B6A0000000000000C000000000000000000000DA +:10B6B000000000000000020000001000200000C098 +:10B6C0000082000000000800000000A00000000050 +:10B6D000000000C00000008400C00008000000005E +:10B6E00000000000000000009000000000000000CA +:10B6F00090000000000000000000000000000000BA +:10B700000000000000000000000000000000000039 +:10B710000000000000000000000000000000000029 +:10B7200000000000000000000000002100200000D8 +:10B7300000000005000000000000000000080000FC +:10B7400000000000000000000021000508000000CB +:10B7500000410005000000000041C0410000000061 +:10B7600000000008000000000000000000000000D1 +:10B7700000000000000000000000000000000000C9 +:10B7800000000000000000000000000000000000B9 +:10B7900000000000030000A0000000000090000076 +:10B7A00000000000000000000082000000A0000077 +:10B7B000000800042000000000080500000000C090 +:10B7C0000004000000000000000000A000000000D5 +:10B7D00000000584110200000088008400000500BC +:10B7E000000000000800000000000002000000004F +:10B7F0000200000000000000000000000000000047 +:10B800000000000000000000000000000000000038 +:10B810000000000000000000000000000000080020 +:10B820000000000002000000000000000000000016 +:10B8300000000000001000110000000000000008DF +:10B8400000000000000000000000000000000400F4 +:10B85000000000000000004100000000000800415E +:10B860000004001100410041000000000000000041 +:10B870000040000000000000000000000000000088 +:10B8800000000000000000000000000000000000B8 +:10B8900000000000000000000000000000000000A8 +:10B8A0000000000000000000000000000000000098 +:10B8B0000000000000000000000000000000200068 +:10B8C000200800000000000000000000004020A050 +:10B8D0000004008200002000008200000000000040 +:10B8E0000000000000000000000000000000000058 +:10B8F0000000010000000000000001000000000046 +:10B900000000000000000000000000000000000037 +:10B910000000000000000000000000000000000027 +:10B9200000000000000000000000000090C00004C3 +:10B9300000044008000000000000000000000000BB +:10B9400000000000088884100082C0C0008200103F +:10B950000002080810100020008200A0118800C01A +:10B9600000088808C0C00084000400040000000033 +:10B970000000000011002100000000001100210063 +:10B9800000000000000000000000000000000000B7 +:10B9900000000000000000000000000000000000A7 +:10B9A0000000000000000000000000000000000097 +:10B9B0000000000000800000000000000000000007 +:10B9C00000000000000000800080008000000000F7 +:10B9D0000080000080808080000000000000A080C7 +:10B9E00000000080008080000000000000000000D7 +:10B9F0000000000000000041090000030080004139 +:10BA000009000003008000000000000000000000AA +:10BA10000000000000000000000000000000000026 +:10BA20000000000000000000000000000000000016 +:10BA30000000001180808000000000000000000075 +:10BA400000000000000000000000804000800000B6 +:10BA500000000003008000000000001100800000D2 +:10BA600080008040008080000000004000800000D6 +:10BA7000000000000000000000010100000000883C +:10BA8000000101000000008800000000000000002C +:10BA900000000000000000000000000000000000A6 +:10BAA0000000000000000000000000000000000096 +:10BAB00000008400C00408A0040000000000000092 +:10BAC000000000000000000000000000100384825D +:10BAD00004000000000300A000020000000200A01B +:10BAE000000008001005004008000800900500A0B4 +:10BAF0008800000000000000000000008800000036 +:10BB000001000000880000000100000000000000AB +:10BB10000000000000000000000000000000000025 +:10BB20000000000000000000000000000000000015 +:10BB30000000000020C0004040040290000000000F +:10BB40000000000000000000000000000410008859 +:10BB500000000410900400040000101010880084FD +:10BB6000000004044000002004080408408800107D +:10BB70004004090400000000000000000000000074 +:10BB80000000410000000000000041000000000033 +:10BB900000000000000000000000000000000000A5 +:10BBA0000000000000000000000000000000000095 +:10BBB0000000000000000000008000000000000005 +:10BBC00000000000000000000000000000000080F5 +:10BBD0000000000000800000000000008080800065 +:10BBE0000000000011008000000000800280800042 +:10BBF00000008000090000000000000000000000BC +:10BC00000011000004000000051100000000000009 +:10BC10000000000000000000000000000000000024 +:10BC20000000000000000000000000000000000014 +:10BC30000000000000000000000000000000800084 +:10BC400000000000000000000000000000000000F4 +:10BC500000008000000000008000000000000000E4 +:10BC60000004800080008000000080800080800050 +:10BC70000020800000808000000000000000000024 +:10BC800000000001000001000000000100000000B1 +:10BC900000000000000000000000000000000000A4 +:10BCA0000000000000000000000000000000000094 +:10BCB0000000000000000000000088000488C004AC +:10BCC000A0000000000000000000000000000000D4 +:10BCD00000000400881020004000100040004000D8 +:10BCE00004009001200084000400820082080408FF +:10BCF000A000A00102001084080000000000000065 +:10BD00000000000000E000008141000000E00000B1 +:10BD10008141000000000000000000000000000061 +:10BD20000000000000000000000000000000000013 +:10BD30000000000000000000000000000000000003 +:10BD400000000000000000000000000000000000F3 +:10BD500000000000000000000000000000000000E3 +:10BD600000000000000000000000000000000000D3 +:10BD70000000000000000000000042000000000081 +:10BD800000000000000000000000000000000000B3 +:10BD900000000000000000000000000000000000A3 +:10BDA0000000000000000000000000000000000093 +:10BDB00000000000000000000000000000000FAACA +:10BDC0000FAAC317001700000000000000000000C9 +:10BDD000000000000000FFAA2D2D000000003C3CE8 +:10BDE000F0F03C3C00000C0CFCFC50501414050519 +:10BDF000F5F55000AAAAC3C300FF55FFC30F00000A +:10BE00000000000000000000000000000000000032 +:10BE10000000000000000000000000000000000022 +:10BE20000000000000000000000000000000000012 +:10BE30000000000000000000000000000000000002 +:10BE4000FF3C003CFF173C17000000000000000012 +:10BE5000000000000000000055002D2D82823030CF +:10BE60005555FF00F0F0000005F505F5505014148D +:10BE70000CFC0CFC500000AAAAAAF0F055FFC30F5E +:10BE800000000000000000000000000000000000B2 +:10BE900000000000000000000000000000000000A2 +:10BEA0000000000000000000000000000000000092 +:10BEB0000000000000000000000000000000000082 +:10BEC0000000FFEFFFFF000FF0FF00000000000088 +:10BED00000000000000000000000BFFFBFFF0000E6 +:10BEE0005F50DFFFFFFF00000000FFFFEFEF0000EB +:10BEF00000005555FFFFF0F0FFFFFFFF5555C3C38E +:10BF0000FFFF000000000000000000000000000033 +:10BF10000000000000000000000000000000000021 +:10BF20000000000000000000000000000000000011 +:10BF30000000000000000000000000000000000001 +:10BF40000000000055455555A3A3A3A30000000021 +:10BF50000000000000000000000000000000FFFFE3 +:10BF600000005F50DF00FF0000000000FF00FF0046 +:10BF7000000000000515AFBFC3C3AAAACFFF5555E7 +:10BF8000C0C0F0F00000000000000000004000060B +:10BF9000000C000000400006000C00000000000043 +:10BFA0000000000000000000000000000000000091 +:10BFB0000000000000000000000000000000000081 +:10BFC0000000000000000000300000000000000041 +:10BFD0000000000000000000000000000000000061 +:10BFE00030000010000100003000000000000000E0 +:10BFF00030000000000000003000001000000000D1 +:10C000003000000000000000000000000000000000 +:10C010003C3CFFFF00000000FF00FFFF00000000AD +:10C020000000000000000000000000000000000010 +:10C030000000000000000000000000000000000000 +:10C0400000000000000000000000000000000000F0 +:10C0500000000000000000000000000000000000E0 +:10C0600000000000000000000000000000000000D0 +:10C0700000000000000000000000000000000000C0 +:10C0800000000000000000000000000000000000B0 +:10C0900000003C3C000000000000FF000000000029 +:10C0A0000000000000000000000000000000000090 +:10C0B0000000000000000000000000000000000080 +:10C0C0000000000000000000000000000000000070 +:10C0D0000000000000000000000000000000000060 +:10C0E0000000000000000000000000000000000050 +:10C0F0000000000000000000000000000000000040 +:10C10000000000000000000000000000000000002F +:10C11000000000000000F0F0000000000000F0F05F +:10C12000000000000000000000000000000000000F +:10C1300000000000000000000000000000000000FF +:10C1400000000000000000000000000000000000EF +:10C1500000000000000000000000000000000000DF +:10C1600000000000000000000000000000000000CF +:10C1700000000000000000000000000000000000BF +:10C1800000000000000000000000000000000000AF +:10C190000000000000000000F0F0000000000000BF +:10C1A000F0F00000000000000000000000000000AF +:10C1B000000000000000000000000000000000007F +:10C1C000000000000000000000000000000000006F +:10C1D000000000000000000000000000000000005F +:10C1E000000000000000000000000000000000004F +:10C1F000000000000000000000000000000000003F +:10C2000000000000000000000000000000004000EE +:10C2100000000000200020000000000020000000BE +:10C22000000020002000400000000000000084000A +:10C230000000000020002000000000002000880016 +:10C2400000000000020020000000000000000001CB +:10C25000200000000000200000000000000000009E +:10C2600020000000000000000000000000000000AE +:10C270004000000000002000000800000000000056 +:10C2800000000000000000000000000000000000AE +:10C290000000000000000000400000020002000258 +:10C2A000400200000000000000004000000000000C +:10C2B000200000000002000040000000000000001C +:10C2C000000000000000000000000000000000006E +:10C2D00000004000000000000000000000000040DE +:10C2E00000000000000000000000200040000000EE +:10C2F000000010000000000200020000000000002A +:10C3000000000000000000000000400040000000AD +:10C31000000000000000000000000000900000008D +:10C32000000000000000000000000000000000000D +:10C3300000000000000000000000000000000000FD +:10C3400000000000080000000000000000000000E5 +:10C3500000000000000000000000000000000000DD +:10C3600000000000000000000000050000000200C6 +:10C3700000000000000000000000050000000000B8 +:10C3800000000105000000000000000000000000A7 +:10C390000008000000000000000000000000000095 +:10C3A000000000000000000000000000000000008D +:10C3B0000000000004000000000000000000000079 +:10C3C000000000000000000000000000000000006D +:10C3D0000000000000000000000000000400000059 +:10C3E0000000000004000000000000000200000047 +:10C3F0000000000000000000004000840200000077 +:10C400000000000008000000000000100000000014 +:10C41000000000000000000000000000000000001C +:10C42000000000000000000000000000000000000C +:10C4300000000000000000000000000000000000FC +:10C4400000000000000000000000000000000400E8 +:10C450004000880000000000000000000000000014 +:10C4600000000000000000000000000000000000CC +:10C47000000000004000000000410000000000003B +:10C48000000088000000000000000000000800001C +:10C490000000000000000008000000000000000094 +:10C4A000000000000000000000000000000000008C +:10C4B000000000000000000000000000000000007C +:10C4C000000000000000000000000000000000006C +:10C4D0000500000000000000000000000000000057 +:10C4E0000000000000000300000000000000000841 +:10C4F0000800000000000000000000000910040017 +:10C500000000000010000000000008000000000013 +:10C510000004000000000000000000000000000017 +:10C520000000000800000100008000000000000082 +:10C5300000000000000000000000100000000000EB +:10C5400000000000000000000000000000000800E3 +:10C550000800000000411000000000000000004042 +:10C56000000000000000000000000000A0400000EB +:10C570000000000000000000000000008200000039 +:10C58000000000000000000000000020004100004A +:10C59000000000000000000000000000000000009B +:10C5A0000000000000010000200000040000000066 +:10C5B0000000000000000000000000000000020079 +:10C5C000000000000000000000000000000000006B +:10C5D000000000000000000000000000000000005B +:10C5E00000000000000000000000000000000084C7 +:10C5F000000000C00000000000000000000000007B +:10C60000000000000000000000000000000000002A +:10C6100000000040000000000000000000000000DA +:10C62000000000009000000000000000000000007A +:10C6300000000000000000000000000000000000FA +:10C6400000000000000000000000000000000000EA +:10C6500000000000000000000000000000000000DA +:10C6600000000000000000000000000000000800C2 +:10C6700000000000000000000010000000000000AA +:10C680000000000000000000000000000010004159 +:10C690000000000000000004000000000000000096 +:10C6A00000000000000000C000000000008400C086 +:10C6B00000000000008400000000000000000000F6 +:10C6C000000000000000000000000000000000006A +:10C6D000000000000000000010000000000000004A +:10C6E0000000000000080308030000000000000034 +:10C6F0000000000000000000000000000000000436 +:10C700000000000000000000100021000084000074 +:10C7100000081004000000400000400000840000F9 +:10C720000002000000000000000200000000000005 +:10C7300000000000000000020000000000000002F5 +:10C7400000000000000000000000000000000000E9 +:10C7500000000000000000000000000000000000D9 +:10C7600000000000000000000000000008000000C1 +:10C7700000000000000000000000000000100000A9 +:10C78000000200000800000000000000000000009F +:10C7900000410004004100400000000000000000D3 +:10C7A0000000000000000000000000000000000089 +:10C7B0000000000000000000000000000000000079 +:10C7C0000200000000000000000000000000000067 +:10C7D0000000000000000040000000000000000019 +:10C7E0000000000000000000000000000000000049 +:10C7F0000000000000000000000000000000000039 +:10C800000000000000000000000000000000000028 +:10C810000000000000000000000000000000000018 +:10C820000000000000000000000000000000010007 +:10C8300000000000000000000000000000000000F8 +:10C8400000000000000000000000000000000000E8 +:10C8500000000000000000000000000000000000D8 +:10C8600000000000000000000000000000000000C8 +:10C87000000000000000000008C00040001020047C +:10C880000000000000000000C08810820082C00884 +:10C8900000C00088000400840000000000000000C8 +:10C8A0000000000000000000000000000000000088 +:10C8B0001100210000000000000000000000000046 +:10C8C0000000000000000000000000000000000068 +:10C8D0000000000000000000000000000000000058 +:10C8E0000000000000000000000000000000000048 +:10C8F00000000000000000000000800000800080B8 +:10C900000000000000000000000080808000008027 +:10C910000080110000000000000000000000000086 +:10C920000000000000000000000000000000000007 +:10C93000000000410900000300800000000000002A +:10C9400000000000000000000000000000000000E7 +:10C9500000000000000000000000000000000000D7 +:10C9600000000000000000000000000000000000C7 +:10C9700000000000000000000000000080000041F6 +:10C9800000210000000000000000000080000011F5 +:10C9900080048000800080210080000000000000F2 +:10C9A0000000000000000000000000000000000087 +:10C9B00000000000000101000000008800000000ED +:10C9C0000000000000000000000000000000000067 +:10C9D0000000000000000000000000000000000057 +:10C9E0000000000000000000000000000000000047 +:10C9F000000000000000000000000000000008002F +:10CA0000A0030085040000000000000000004000BA +:10CA1000A004081108000800100420A01000000065 +:10CA20000000000000000000000000000000000006 +:10CA3000000000000000000088000000010000006D +:10CA400000000000000000000000000000000000E6 +:10CA500000000000000000000000000000000000D6 +:10CA600000000000000000000000000000000000C6 +:10CA700000000000000000000000000000000000B6 +:10CA80004090004004008504000000000000000009 +:10CA9000C09000820000C008208400A0000405842B +:10CAA0000000000000000000000000000000000086 +:10CAB0000000000000000000000000000000410035 +:10CAC0000000000000000000000000000000000066 +:10CAD0000000000000000000000000000000000056 +:10CAE0000000000000000000000000000000000046 +:10CAF0000000000000000000000000000000000036 +:10CB00000000800000800000210000000000000004 +:10CB10000000000000800000A08000000000000075 +:10CB200009000000000000000000000000000000FC +:10CB300000000000000000000000000040110000A4 +:10CB400000000000000000000000000000000000E5 +:10CB500000000000000000000000000000000000D5 +:10CB600000000000000000000000000000000000C5 +:10CB700000000000000000000000000000000000B5 +:10CB800000000000000080008000000000000000A5 +:10CB90000000000000008000000000000010008085 +:10CBA0000080000000000000000000000000000005 +:10CBB0000000000000000000000000000000010173 +:10CBC0000000000000000000000000000000000065 +:10CBD0000000000000000000000000000000000055 +:10CBE0000000000000000000000000000000000045 +:10CBF0000000000000000000000000000000000035 +:10CC0000000000000000C00002A08400040000003A +:10CC100000000000000082008888C000C000C00141 +:10CC2000C0208284400000000000000000000000DE +:10CC300000000000000000000000000000000000F4 +:10CC400000E0000081410000000000000000000042 +:10CC500000000000000000000000000000000000D4 +:10CC600000000000000000000000000000000000C4 +:10CC700000000000000000000000000000000000B4 +:10CC80000000000000000000000000000000420062 +:10CC90000000000000000000000000000000421240 +:10CCA0000000000000000000000000000000000084 +:10CCB0000000000000000000000000000000000074 +:10CCC0000000000000000000000000000000000064 +:10CCD0000000000000000000000000000000000054 +:10CCE0000000000000000000000000000000000044 +:10CCF0000000000000000000000000000000000034 +:10CD0000000000000000000000003C00272706068D +:10CD1000080800000000000000003F3F030390905F +:10CD200000003CFFF099003C00F000000000000013 +:10CD300000000000000000000000000000000000F3 +:10CD400000000000000000000000000000000000E3 +:10CD500000000000000000000000000000000000D3 +:10CD600000000000000000000000000000000000C3 +:10CD700000000000000000000000000000000000B3 +:10CD8000000000000000000000000000FFC3272793 +:10CD9000000008080000000000000000E724E7246D +:10CDA000000018183C00F099003C00F00000000062 +:10CDB0000000000000000000000000000000000073 +:10CDC0000000000000000000000000000000000063 +:10CDD0000000000000000000000000000000000053 +:10CDE0000000000000000000000000000000000043 :10CDF0000000000000000000000000000000000033 -:10CE00000000080000800000009100800000000089 +:10CE00000000000000000000000000000000000022 :10CE10000000000000000000000000000000000012 :10CE20000000000000000000000000000000000002 :10CE300000000000000000000000000000000000F2 :10CE400000000000000000000000000000000000E2 -:10CE500000040000000040042184080405100000C4 -:10CE600000000000040000000000000000000000BE -:10CE70000000000000000000000000A00000000012 -:10CE80000000030000000002000000020002000099 -:10CE90000000000000000000000000000000000092 -:10CEA0000000000000000000000000000000000082 +:10CE500000000000000000000000000000000000D2 +:10CE600000000000000000000000000000000000C2 +:10CE700000000000000000000000000000000000B2 +:10CE800000000000000000000000000000000000A2 +:10CE9000FF00FFFF27270000000000000000000047 +:10CEA000F7FF070FF0FFC399FFDFFFFFFF99C38173 :10CEB0000000000000000000000000000000000072 -:10CEC000000000000000000010000020000004200E -:10CED0000000400000001000200020002000200082 -:10CEE00000000002820000000000000000000004BA +:10CEC0000000000000000000000000000000000062 +:10CED0000000000000000000000000000000000052 +:10CEE0000000000000000000000000000000000042 :10CEF0000000000000000000000000000000000032 :10CF00000000000000000000000000000000000021 -:10CF10000000000000000000000000000000000011 -:10CF20000000000000000000000000000000000001 -:10CF300000000000000000000000000000000000F1 -:10CF40000000000800080040004000000000000051 -:10CF50000000000000000000000080008000800051 -:10CF60008000000000000000000000000000000041 +:10CF10000000FF00FDFD27270000000000000000CA +:10CF20000000FFFF0F0FF0FFC39966466666F090A2 +:10CF3000C0800000000000000000000000000000B1 +:10CF40000000000000000000000000400006000C8F +:10CF500000000000000000000000000000000000D1 +:10CF600000000000000000000000000000000000C1 :10CF700000000000000000000000000000000000B1 -:10CF80000000000000000000050005000000000097 -:10CF90000000000000000000000000000000000091 -:10CFA0000000000000000000000000000000000081 +:10CF800000000000000000000000000000000000A1 +:10CF90000000000000003000000000000000000061 +:10CFA0000000000000003000001000010000300010 :10CFB0000000000000000000000000000000000071 -:10CFC0000000000000000000000000000000000061 -:10CFD000000000000000000000000000000005014B -:10CFE00003000001000041010101000000000000F9 +:10CFC0000000000000000000000000000000FF0062 +:10CFD000FFFF000000000000000000000000000053 +:10CFE0000000000000000000000000000000000041 :10CFF0000000000000000000000000000000000031 -:10D00000000000000000000000000000000000011F -:10D01000840100010000000000000000000000008A +:10D000000000000000000000000000000000000020 +:10D010000000000000000000000000000000000010 :10D020000000000000000000000000000000000000 :10D0300000000000000000000000000000000000F0 -:10D0400000000100000000000000000000000000DF -:10D050000000000000000000000000000000004090 -:10D060008308830300100000030303110002000083 +:10D0400000000000000000000000000000000000E0 +:10D05000FF000000000000000000000000000000D1 +:10D0600000000000000000000000000000000000C0 :10D0700000000000000000000000000000000000B0 -:10D08000000000000000000000000000000000118F -:10D09000412080100002000000000000000000009D +:10D0800000000000000000000000000000000000A0 +:10D090000000000000000000000000000000000090 :10D0A0000000000000000000000000000000000080 :10D0B0000000000000000000000000000000000070 -:10D0C000000000000400000000000000000000005C -:10D0D0000000000000000000000000000000000050 -:10D0E0001000000003001010110500000005108959 -:10D0F0000800080005000400000000000000000017 +:10D0C0000000000000000000000000000000000060 +:10D0D00000000000F0F00000000000000000000070 +:10D0E0000000000000000000000000000000000040 +:10D0F0000000000000000000000000000000000030 :10D10000000000000000000000000000000000001F -:10D1100041000800101002000000000000000000A4 +:10D11000000000000000000000000000000000000F :10D1200000000000000000000000000000000000FF :10D1300000000000000000000000000000000000EF -:10D1400000000009000000090000000000000000CD -:10D1500000000000000000000000000000000000CF -:10D16000000001000000000001910100000000002B -:10D1700000080000010000000100000000000000A5 +:10D1400000000000000000000000000000000000DF +:10D15000000000000000F0F00000000000000000EF +:10D1600000000000000000000000000000000000BF +:10D1700000000000000000000000000000000000AF :10D18000000000000000000000000000000000009F -:10D19000000000000000000101400000000000004D +:10D19000000000000000000000000000000000008F :10D1A000000000000000000000000000000000007F :10D1B000000000000000000000000000000000006F :10D1C000000000000000000000000000000000005F -:10D1D000000000000000000000000000000000004F -:10D1E000000000000000000000000000000004003B -:10D1F000000100010000000000000000000000002D -:10D20000000000000000000000000000000000001E -:10D21000000000000000010100010001000000000A -:10D2200000000000000000000000000000000000FE -:10D2300000000000000000000000000000000000EE -:10D2400000000000000000000800000000000000D6 -:10D2500000000000000000000000000000000000CE -:10D2600000000000000000000000001000050000A9 -:10D270008000000805080000000000000000000019 -:10D28000000000000000000000000000000000009E -:10D2900000000000000000081020410510020000FE -:10D2A000000000000000000000000000000000007E -:10D2B000000000000000000000000000000000006E -:10D2C00000000000000000000000800000000900D5 +:10D1D00000002000400000000000000000000000EF +:10D1E00000000000400000000000000000000000FF +:10D1F00000002000200000000000100400000000DB +:10D200000000880000000000000000000000100086 +:10D2100000000000200000000000000000000000EE +:10D2200000000000200000000000000000001000CE +:10D2300000000000200000000000000000000000CE +:10D24000000000002000000000000000000040007E +:10D25000000040000000000000000000000020006E +:10D26000000000000000200000004000000000005E +:10D270000000000200000000100000040000000098 +:10D28000000000000002200040000000000000003C +:10D29000000000000000000020000000000000006E +:10D2A00010000000000000001000400040000000DE +:10D2B00040000000000000004000000000000000EE +:10D2C000000000000000000000000000000000005E :10D2D000000000000000000000000000000000004E -:10D2E00000000000000000000800032000002003F0 -:10D2F0000000110000001009000000000000000301 -:10D30000000000000000000000000000000000001D -:10D310000000000000000000008800000000000481 -:10D3200000000000000000000000000000000000FD +:10D2E000000000000000001000000000000000002E +:10D2F000000000000000000000000000000000101E +:10D3000000400000000000000000000000000000DD +:10D3100000000000000000000000000904000009F7 +:10D3200000100000000000000000000000000000ED :10D3300000000000000000000000000000000000ED -:10D3400000000000000000000000000400000000D9 +:10D3400004000000000000000000000000000000D9 :10D3500000000000000000000000000000000000CD -:10D3600000000000000000000000010000000000BC -:10D37000000100000100000001000010000000009A +:10D3600000000000000000000000000000000000BD +:10D3700000000000000000000000000005000000A8 :10D38000000000000000000000000000000000009D -:10D390000000000000000000000000C000000000CD -:10D3A000000100000000000000000000000000007C +:10D39000001000000000000000000000000000007D +:10D3A0000000000000000000000004000000000079 :10D3B000000000000000000000000000000000006D -:10D3C000000000000000000000000000000100005C -:10D3D000000000000000000000000000000000004D -:10D3E000000000000000000000000000000000E05D -:10D3F00000000000000000E000000000000000004D +:10D3C0000000000000000000000004000000000059 +:10D3D0000000040000000000000000000000000049 +:10D3E000000000000000000000000000000000003D +:10D3F000000000000000000000000000000000002D :10D40000000000000000000000000000000000001C :10D41000000000000000000000000000000000000C -:10D42000000060000000000000000000000000009C -:10D4300000000000000000000000000000000000EC -:10D44000000000000000000000000000000081005B -:10D4500000E00000000000000000000000000000EC +:10D42000040000000400000000000000000088006C +:10D4300000000400000000000000000000000000E8 +:10D4400000000000000000000000000000000200DA +:10D4500000000000000000000000000000000000CC :10D4600000000000000000000000000000000000BC :10D4700000000000000000000000000000000000AC -:10D48000000000000000000000000000000000009C +:10D480000000000000000400000000000000000098 :10D49000000000000000000000000000000000008C -:10D4A000000000000000000000000000000000007C -:10D4B000000000000000000000000000000000006C -:10D4C000000000000000000000000000000000005C +:10D4A0000000000000000800000000000000000074 +:10D4B0000000000000000400210000004000000007 +:10D4C00000000088000000000000000000020000D2 :10D4D000000000000000000000000000000000004C -:10D4E000000000000000000000000000000000003C -:10D4F000000000000000000000000000000000002C +:10D4E0000000000000000000000000000000080034 +:10D4F00000000000000000000000000000008200AA :10D50000000000000000000000000000000000001B -:10D51000000000000000000000000000000000000B -:10D5200000000000000000000000000000000000FB +:10D51000000000000040004000000000000000008B +:10D5200000000000000000410000000000000000BA :10D5300000000000000000000000000000000000EB :10D5400000000000000000000000000000000000DB -:10D5500000000000000000000000000000000000CB +:10D5500000000005000000000000000000000000C6 :10D5600000000000000000000000000000000000BB -:10D5700000000000000000000000000000000000AB -:10D58000000000000000000000000000000000009B +:10D5700000000000000000000200000000000000A9 +:10D580000000000000000000000000000000090092 :10D59000000000000000000000000000000000008B :10D5A000000000000000000000000000000000007B :10D5B000000000000000000000000000000000006B @@ -155018,4461 +159115,364 @@ :10D6300000000000000000000000000000000000EA :10D6400000000000000000000000000000000000DA :10D6500000000000000000000000000000000000CA -:10D6600000000000000000000000000000000000BA +:10D660000000000000C00000000000840000000076 :10D6700000000000000000000000000000000000AA :10D68000000000000000000000000000000000009A -:10D69000000000000000000000000000000000008A +:10D690000000000000000000040000000000000086 :10D6A000000000000000000000000000000000007A -:10D6B000000000000000000000000000000000006A -:10D6C000000000000000000000000000000000005A +:10D6B0000000000000000500000000000000000065 +:10D6C00008000000000805000200000000C0000083 :10D6D000000000000000000000000000000000004A :10D6E000000000000000000000000000000000003A -:10D6F00000000000000000000061000100010000C7 -:10D7000000610007000D000000610006000D000030 +:10D6F0000000000000020000000000000000000028 +:10D700000000000000000000000000000000000019 :10D710000000000000000000000000000000000009 -:10D72000000000000000000000610006000D000085 -:10D7300000000000000000000000000000000000E9 +:10D7200000000000000000000000000000000000F9 +:10D7300000000000000000000000100000000000D9 :10D7400000000000000000000000000000000000D9 -:10D750000000000000000000000000610007800DD4 -:10D7600000000000000000000000000000000000B9 -:10D7700000000000000000000000FF3C3C3C00AA4C -:10D78000FFFF3C3C3C3C0000FFFF000000000000AD +:10D7500000000000000000000000000000000000C9 +:10D760000000000000000000000020000040000059 +:10D7700000200004000000100500000000880000E8 +:10D780002008000000000000000000000000000071 :10D790000000000000000000000000000000000089 -:10D7A000000000000000000000000000000000F089 -:10D7B00000F0000000000000000000000000000079 +:10D7A00000000000000000000000000000C00000B9 +:10D7B00000C00000000000000000000000000000A9 :10D7C0000000000000000000000000000000000059 :10D7D0000000000000000000000000000000000049 :10D7E0000000000000000000000000000000000039 -:10D7F000000000000000000000000000FF0000002A -:10D8000000AA00AAFF3CFF3C00FFFFFF0000000051 +:10D7F0000000000000000000000000000000000029 +:10D800000000000000000000000000000000000018 :10D810000000000000000000000000000000000008 :10D8200000000000000000000000000000000000F8 -:10D8300000F028F8000000000000000000000000D8 +:10D8300000000000000000000000000000000000E8 :10D8400000000000000000000000000000000000D8 :10D8500000000000000000000000000000000000C8 :10D8600000000000000000000000000000000000B8 -:10D8700000000000000000000000000000003F3C2D -:10D880000F00003CAABE3C3F3C3F1414FFFF0000C9 -:10D8900000000020FFFF000000000000000000006A -:10D8A00000000000000000000000000000007530D3 -:10D8B000550000AAC0EA00000000000000000000BF +:10D8700000000000000000000000000000000000A8 +:10D880000000000000000000000000000000000098 +:10D890000000000000000000000000000000000088 +:10D8A0000000000000000000000000000000000078 +:10D8B0000000000000000000000000000000000068 :10D8C0000000000000000000000000000000000058 :10D8D0000000000000000000000000000000000048 :10D8E0000000000000000000000000000000000038 :10D8F0000000000000000000000000000000000028 -:10D900003F3C0F00003CAABE3C3F3C3F1414FFFFCD -:10D9100000000000002000200000000000000000C7 +:10D900000000000000000000000000000000000017 +:10D910000000000000000000000000000000000007 :10D9200000000000000000000000000000000000F7 -:10D930005500550000AA00AA0000000000000000E9 +:10D9300000000000000000000000000000000000E7 :10D9400000000000000000000000000000000000D7 :10D9500000000000000000000000000000000000C7 :10D9600000000000000000000000000000000000B7 -:10D9700000000000000000000000200000008800FF -:10D980000480000200000000008020000000000071 -:10D990000000000200002000000010000000200431 -:10D9A00000000000000000000000880000000000EF -:10D9B0000000000200022000000000030000000040 -:10D9C000000000040000000000000004200000022D -:10D9D0000000000400000000200000000000000023 -:10D9E0000000000000000000000000002000000017 -:10D9F0000000000000000000000000000002000025 -:10DA000000A08904000000000000000410000000D5 -:10DA100000A0000000000000000000C04002000262 -:10DA2000000240020090008210400002200000002E -:10DA30004002000000400000000000000000200044 -:10DA4000004040C040000000000000000000000056 -:10DA50000000000000000000000000000000400086 -:10DA60000002000000004000000000000000000074 -:10DA70000000000200004000000000000000000064 -:10DA800000000000002000000000041002800008D8 -:10DA9000000000000800000002000000021000006A -:10DAA000000000000000000000030000000400006F -:10DAB000010000000004000000000000020000005F -:10DAC00000000000000000000000018004000800C9 -:10DAD00000000000000000000000000082000400C0 -:10DAE000080008000010901000000000001002095B -:10DAF0000000040082000000000000000800000098 -:10DB000000000008000041010008000002000404B9 -:10DB100000000000000000000400040002000000FB -:10DB20004100000205000004000804000400000198 -:10DB30000008400000000201008400000200000014 -:10DB40000000000000000500000000084002000086 -:10DB500000000008040000000400040000000200AF -:10DB60000000000000040000000400100400000099 -:10DB7000000004080000040002040000000020006F -:10DB80000400040000000021102000210000840097 -:10DB90000400002100000021000000080000020035 -:10DBA0000020880500000003900000000400C00071 -:10DBB000000001000402000000200000000000003E -:10DBC0000000000000000000000000000004000051 -:10DBD00000400000000000000000000800000000FD -:10DBE0000000000004000000000000000000000031 -:10DBF0000000000000000000000000009000000095 -:10DC000000000000000000000800040141000000C6 -:10DC10000000000000000000000400000000000000 -:10DC200000400000000200000000000000000000B2 -:10DC30000000210040000001000000010000000081 -:10DC400000000000000000000008000000080001C3 +:10D9700000000000000000000000000000000000A7 +:10D980000000000000000000000000000000000097 +:10D990000000000000000000000000000000000087 +:10D9A0000000000000000000000000000000000077 +:10D9B0000000000000000000000000000000000067 +:10D9C0000000000000000000000000000000000057 +:10D9D0000000000000000000000000000000000047 +:10D9E0000000000000000000000000000000000037 +:10D9F0000000000000000000000000000000000027 +:10DA00000000000000000000000000000000000016 +:10DA10000000000000000000000000000000000006 +:10DA200000000000000000000000000000000000F6 +:10DA300000000000000000000000000000000000E6 +:10DA400000000000000000000000000000000000D6 +:10DA500000000000000000000000000000000000C6 +:10DA600000000000000000000000000000000000B6 +:10DA700000000000000000000000000000000000A6 +:10DA80000000000000000000000000000000000096 +:10DA90000000000000000000000000000000000086 +:10DAA0000000000000000000000000000000000076 +:10DAB0000000000000000000000000000000000066 +:10DAC0000000000000000000000000000000000056 +:10DAD0000000000000000000000000000000000046 +:10DAE0000000000000000000000000000000000036 +:10DAF0000000000000000000000000000000000026 +:10DB00000000000000000000000000000000000015 +:10DB10000000000000000000000000000000000005 +:10DB200000000000000000000000000000000000F5 +:10DB300000000000000000000000000000000000E5 +:10DB400000000000000000000000000000000000D5 +:10DB500000000000000000000000000000000000C5 +:10DB600000000000000000000000000000000000B5 +:10DB700000000000000000000000000000000000A5 +:10DB80000000000000000000000000000000000095 +:10DB90000000000000000000000000000000000085 +:10DBA0000000000000000000000000000000000075 +:10DBB0000000000000000000000000000000000065 +:10DBC0000000000000000000000000000000000055 +:10DBD0000000000000000000000000000000000045 +:10DBE0000000000000000000000000000000000035 +:10DBF0000000000000000000000000000000000025 +:10DC00000000000000000000000000000000000014 +:10DC10000000000000000000000000000000000004 +:10DC200000000000000000000000000000000000F4 +:10DC300000000000000000000000000000000000E4 +:10DC400000000000000000000000000000000000D4 :10DC500000000000000000000000000000000000C4 :10DC600000000000000000000000000000000000B4 -:10DC7000000000000000000000000000008800001C -:10DC80000000000000000000000000008400000010 -:10DC90000000000000000000000000000000000480 -:10DCA00000000000000008000000400040000000EC -:10DCB000000000800004000000800000010000005F +:10DC700000000000000000000000000000000000A4 +:10DC80000000000000000000000000000000000094 +:10DC90000000000000000000000000000000000084 +:10DCA0000000000000000000000000000000000074 +:10DCB0000000000000000000000000000000000064 :10DCC0000000000000000000000000000000000054 :10DCD0000000000000000000000000000000000044 -:10DCE00000000000000000400000000000000000F4 -:10DCF00000000000000000000000000000400000E4 -:10DD000000000000004000040000000000000008C7 -:10DD1000410000004000031000000000000000006F -:10DD20000000000000000000000000000000800073 -:10DD3000000000000020000000000020030004009C +:10DCE0000000000000000000000000000000000034 +:10DCF0000000000000000000000000000000000024 +:10DD00000000000000000000000000000000000013 +:10DD10000000000000000000000000000000000003 +:10DD200000000000000000000000000000000000F3 +:10DD300000000000000000000000000000000000E3 :10DD400000000000000000000000000000000000D3 -:10DD50000000000000002110000000000000000092 +:10DD500000000000000000000000000000000000C3 :10DD600000000000000000000000000000000000B3 :10DD700000000000000000000000000000000000A3 -:10DD8000000000000000000000000021080000006A -:10DD900000840000000000000000000000000000FF -:10DDA00000000000000000000000000000008800EB -:10DDB00008000020C00800200400002040020020CD +:10DD80000000000000000000000000000000000093 +:10DD90000000000000000000000000000000000083 +:10DDA0000000000000000000000000000000000073 +:10DDB0000000000000000000000000000000000063 :10DDC0000000000000000000000000000000000053 :10DDD0000000000000000000000000000000000043 :10DDE0000000000000000000000000000000000033 :10DDF0000000000000000000000000000000000023 :10DE00000000000000000000000000000000000012 -:10DE100000000021000000200504030000020000B3 -:10DE2000000000840000000400002000000020002A -:10DE3000000000000001000000000000000180015F -:10DE40000001000040000500080000000000000084 +:10DE10000000000000000000000000000000000002 +:10DE200000000000000000000000000000000000F2 +:10DE300000000000000000000000000000000000E2 +:10DE400000000000000000000000000000000000D2 :10DE500000000000000000000000000000000000C2 :10DE600000000000000000000000000000000000B2 :10DE700000000000000000000000000000000000A2 -:10DE80000000000000000000090000000000000089 -:10DE9000000000210000002100000000002100001F -:10DEA00000000021000000008400000000020000CB -:10DEB0000000000004000105C0200000040300046D -:10DEC0000002002000000000000000210009000006 -:10DED000000000000800000000000000000000003A +:10DE80000000000000000000000000000000000092 +:10DE90000000000000000000000000000000000082 +:10DEA0000000000000000000000000000000000072 +:10DEB0000000000000000000000000000000000062 +:10DEC0000000000000000000000000000000000052 +:10DED0000000000000000000000000000000000042 :10DEE0000000000000000000000000000000000032 :10DEF0000000000000000000000000000000000022 :10DF00000000000000000000000000000000000011 :10DF10000000000000000000000000000000000001 :10DF200000000000000000000000000000000000F1 -:10DF300000000000000080000400000100008000DC -:10DF400000000001000100000000000000000000CF +:10DF300000000000000000000000000000000000E1 +:10DF400000000000000000000000000000000000D1 :10DF500000000000000000000000000000000000C1 :10DF600000000000000000000000000000000000B1 -:10DF70000010000000000000000000000000000091 +:10DF700000000000000000000000000000000000A1 :10DF80000000000000000000000000000000000091 :10DF90000000000000000000000000000000000081 :10DFA0000000000000000000000000000000000071 -:10DFB0000000000001001000000000009002088234 -:10DFC0000010020390A10083000100000000000087 -:10DFD000000000000000000000000000000100013F +:10DFB0000000000000000000000000000000000061 +:10DFC0000000000000000000000000000000000051 +:10DFD0000000000000000000000000000000000041 :10DFE0000000000000000000000000000000000031 :10DFF0000000000000000000000000000000000021 :10E000000000000000000000000000000000000010 -:10E0100000000000000000000200000000000000FE -:10E0200009000000000000000000000000000000E7 -:10E03000000000000000080080000000000089804F -:10E0400080800080808880A100820008000000009D -:10E0500000000000000000000000000000000011AF -:10E06000002100100000000000000000000000007F +:10E010000000000000000000000000000000000000 +:10E0200000000000000000000000000000000000F0 +:10E0300000000000000000000000000000000000E0 +:10E0400000000000000000000000000000000000D0 +:10E0500000000000000000000000000000000000C0 +:10E0600000000000000000000000000000000000B0 :10E0700000000000000000000000000000000000A0 :10E080000000000000000000000000000000000090 -:10E090000000000000008000000000000000000000 +:10E090000000000000000000000000000000000080 :10E0A0000000000000000000000000000000000070 -:10E0B00000000000000000000000000080001100CF -:10E0C000A1800800C1839080A1A12000C0A0000011 +:10E0B0000000000000000000000000000000000060 +:10E0C0000000000000000000000000000000000050 :10E0D0000000000000000000000000000000000040 -:10E0E0000000000000000010000000000000000020 +:10E0E0000000000000000000000000000000000030 :10E0F0000000000000000000000000000000000020 -:10E10000000000000000000000000000000000000F -:10E1100000000000000000000800000040000200B5 -:10E1200000000000000000000000000000000000EF -:10E13000000000000000000000000000020090004D -:10E14000000203900100909102C0A1910100C0085B -:10E1500000000000000000000000000000000000BF -:10E1600000000002000000000000000000000000AD -:10E17000000000000000000000000000000000009F -:10E18000000000000000000000000000000000008F -:10E19000000000000000000000000000000000007F -:10E1A000000000000000000000000000000000006F -:10E1B000000000000000000000000001000000005E -:10E1C00000000102000990910100010100009091FE -:10E1D000000300000000000000000000000000003C -:10E1E000000000000000000000000000000000002F -:10E1F000000000000000000000000000000000001F -:10E20000000000000000000000000000000000000E -:10E2100000000000000000000000000000000000FE -:10E2200000000900000000000000080000000000DD -:10E2300000000000000000000000000000080009CD -:10E24000000000091180008380A11120110803053E -:10E25000A0A10091000000000000000000000000EC -:10E2600000000000000000000000050000000000A9 -:10E27000000000000000000000000000000000009E -:10E28000000000000000000000000000000000008E -:10E29000000000000000000000000000000000027C -:10E2A000000000000000000000000000000000006E -:10E2B0000000000000000000000000000000000955 -:10E2C000000500000000910991901100054188842B -:10E2D000801009001105000000000000000000008F -:10E2E00000000000000000002000080020000800DE -:10E2F000000000000000000000000000000000001E +:10E1000000000000000000004000000000000200CD +:10E11000200001000000400000000000000000009E +:10E12000200000000000200020000000000020006F +:10E13000000040000000400000000000000000005F +:10E14000200000000000410000012000000000004D +:10E150000000000020000000880000000000000017 +:10E16000000020000000000000002000000000006F +:10E17000000000000000000002000000400000005D +:10E1800000000000000000008800100000000000F7 +:10E19000000040001000009000002000000000007F +:10E1A000000040000000000000000000000000002F +:10E1B00000002000000040000000100000000000EF +:10E1C000000000000040000002000000000000000D +:10E1D00000000000000040000040000010000000AF +:10E1E000000040000000400000000000100000009F +:10E1F000000000004000400000000000100080000F +:10E2000000000000000040000000000000000000CE +:10E2100000000200000800001000000800000000DC +:10E2200000000000020000000000000000000000EC +:10E2300000000000000000000000000000000000DE +:10E2400000000000000000000000000000000000CE +:10E250008800000002000000000000000200000032 +:10E260000000000000000000000002400410000058 +:10E27000000000000200000000000000820000001A +:10E280000000000004000000000000000200000088 +:10E2900000000000000000010000800000010000FC +:10E2A00000000000000080000000000000000000EE +:10E2B000000000000000000000000000000000005E +:10E2C000000000000000000000000000000000004E +:10E2D000000000000000000000000000000000003E +:10E2E000000000000000000000000000000000002E +:10E2F000000000000000040000000000000000001A :10E30000000000000000000000000000000000000D -:10E3100000000000000000000000000000000000FD -:10E32000000000900040000000000000000000001D -:10E3300000000000000000000000000000000000DD -:10E34000000000900000000003880809010090010F -:10E35000919104010088010000000000000000000D -:10E3600000000000000000000000000001000000AC -:10E37000010000000000000000000000000000009C -:10E38000000000000000000000000000000000008D +:10E3100000000000000000000000000000000100FC +:10E3200000000000000000000000000000000000ED +:10E3300000000000000000000000000000110000CC +:10E3400000000000000000000000100000000000BD +:10E3500000000000000000000000000000000000BD +:10E36000000000000000000000000000000010009D +:10E370008800000000000000000000000000000015 +:10E3800000000000840000000000200000000000E9 :10E39000000000000000000000000000000000007D -:10E3A0000000008100E007000000000000E0000025 +:10E3A0000400000000000000000000000000000069 :10E3B000000000000000000000000000000000005D -:10E3C00000000081000007000000818100E00700DC -:10E3D0000041008100E00700600000000000000034 -:10E3E000000000000000000000000000000000E04D -:10E3F000000000000000000000000000000000001D +:10E3C000000000000000000000000000000000004D +:10E3D000000000000000000000000000000000003D +:10E3E0000000080000000000000000000000000025 +:10E3F000000010000000000000000000000000000D :10E40000000000000000000000000000000000000C -:10E4100000000000000000000000000000000000FC -:10E4200000000000000000000000000000000000EC +:10E41000000800000000000000000000880000006C +:10E42000088009000000000000000011000000004A :10E4300000000000000000000000000000000000DC -:10E440000000000000000000000000003CC33C3C55 -:10E45000C03FC03FFF0000FF00FF55AA00000000C2 -:10E4600000000000000000000000000000000000AC -:10E47000000000000000000000000000000000009C -:10E48000000000000000000000000000000000008C -:10E49000000000000000000000000000000000007C -:10E4A000000000000000000000000000000000006C +:10E4400000000000000002000000000000000000CA +:10E4500000000800000000000000000000000000B4 +:10E4600000000000000000000000000004000000A8 +:10E47000000000000000000000000000820000001A +:10E48000000000000800C000000000000040000084 +:10E490000000000004000000000000000000000078 +:10E4A000000000202000000000000000000000002C :10E4B000000000000000000000000000000000005C -:10E4C00000000000000000000000000000003CC34D -:10E4D0003C3CC03FC03F0000FFFF00FF55AA0000CA -:10E4E000000000000000000000000000000000002C +:10E4C000000000000800040002000000000000003E +:10E4D0000500000000000000000003040000000030 +:10E4E0000000020000000090000400000000000096 :10E4F000000000000000000000000000000000001C :10E50000000000000000000000000000000000000B -:10E5100000000000000000000000000000000000FB -:10E52000000000000000000000000000557D003CDD +:10E51000000000000000000000000000900000006B +:10E5200000000000000000000200000008000000E1 :10E5300000000000000000000000000000000000DB -:10E5400000000000000000000000000055FFAA00CD -:10E550000F330F33AFAF50500F0FF00F0303FFFF18 +:10E5400000000000000000000000000000000000CB +:10E5500000000000000000000000000000000000BB :10E5600000000000000000000000000000000000AB :10E57000000000000000000000000000000000009B -:10E58000000000000000000000000000000000008B +:10E580000000000008000000000000000000000083 :10E59000000000000000000000000000000000007B -:10E5A0000000000000000000000000000000FF7DEF -:10E5B000FF3C000000000000000000000000000020 -:10E5C000000000000000000000000000000055FFF7 -:10E5D000AA000F330F33AFAF50500F0FF00FFCFCFA +:10E5A000000000000000000000000000000000006B +:10E5B000000000000000000000000000000000005B +:10E5C000000000000000000000000000000000004B +:10E5D000000000000000000000000000000000003B :10E5E000000000000000000000000000000000002B -:10E5F000000000000000000000000000000000001B -:10E60000000000000000000000000000000000000A +:10E5F0000000000000000000000008000000000013 +:10E6000000000000000000000010000000000000FA :10E6100000000000000000000000000000000000FA -:10E620000000000000000000000000000061003752 -:10E63000000D000000610007000D00000000000058 -:10E640000000000000000000000000000061003E2B -:10E65000000D10C00361033ECC0910C00361033EEE -:10E660000C0942C000000000000000000000000093 -:10E6700000000000000000610002000D000000002A +:10E6200000000000020000000000000000000011D7 +:10E6300008090000000000000000000000000000C9 +:10E6400000000002000000000000000000000000C8 +:10E6500000000000000000000000000000000000BA +:10E6600000000000000000000000000000000000AA +:10E67000000000000000000000000000000000009A :10E68000000000000000000000000000000000008A -:10E69000000000000000000000000000000000007A -:10E6A000000000000000000000000000000000006A +:10E69000000000000000080000080000000000006A +:10E6A00000000000000080000000000000000000EA :10E6B000000000000000000000000000000000005A :10E6C000000000000000000000000000000000004A -:10E6D0000000000000000100000000000000010137 -:10E6E0000000030F0F0F00000000000000000000FA +:10E6D0000040000000000000020040400000000078 +:10E6E000050000000000080000000090000000008D :10E6F000000000000000000000000000000000001A :10E700000000000000000000000000000000000009 :10E7100000000000000000000000000000000000F9 -:10E7200000000000000000000000000000000000E9 -:10E7300000000000000000000000000000000000D9 +:10E720000000000000000000010090000000000058 +:10E730000000000000000000904000880040080237 :10E7400000000000000000000000000000000000C9 -:10E75000000000000101000000000000F0F0F0FAED -:10E7600000000000030F0F0F000000000000000079 -:10E770000000000000000000000008000000000091 +:10E7500000000000000000000188008800000000A8 +:10E7600000000000000000000000000000000000A9 +:10E770000000000000000000000000000000000099 :10E780000000000000000000000000000000000089 :10E790000000000000000000000000000000000079 -:10E7A0000000000000000000000000000000000069 +:10E7A00000000000000000000000110080210000B7 :10E7B0000000000000000000000000000000000059 -:10E7C0000000000000000000000000000000000049 -:10E7D0000000000000000000000000000000000039 -:10E7E0000020FE00FF00000000000000000000000C +:10E7C00000800000000000000000000000000000C9 +:10E7D0000000000000000000000010000000000029 +:10E7E0000000000000000000000000000000000029 :10E7F0000000000000000000000000000000000019 :10E800000000000000000000000000000000000008 :10E8100000000000000000000000000000000000F8 -:10E8200000000000000000000000000000000000E8 -:10E8300000000000000000000000000000000000D8 -:10E8400000000000000000000000000000000000C8 -:10E8500000000000000000000000000000000000B8 -:10E8600000000000FF00FF0000001000000000009A +:10E820000000000000000000000000000004008064 +:10E83000112100000005000000000000000000831E +:10E840008000000000000000000000000000000048 +:10E850000000000000000000000000000000002197 +:10E8600000000000000000000000000000000000A8 :10E870000000000000000000000000000000000098 -:10E880000F00000000000000000000000000000079 -:10E890000000000000000000000000000000000078 -:10E8A0000000000000000000000000000000000068 -:10E8B00000000000000000004000000020110000E7 -:10E8C000000000000000200304000000008400009D -:10E8D00000000000880400000000000000000000AC -:10E8E000000000000004200040000000A000000024 -:10E8F00000000000200000020400000000000004EE -:10E9000000000000000400002000000000002004BF -:10E9100040000000000020802000000000000004F3 -:10E92000880000000000000420001000000020808B -:10E930002000C0000004200440000000000000008F -:10E94000000400041002000000000090000000021B -:10E950000000004010001000000000002100000036 -:10E960000002000010000000000000004000400015 -:10E9700040000000404000000000C00000000040D7 -:10E980000000000000004000000000000000000047 -:10E990000000000000820040001040000000000461 -:10E9A00000000900100240020002000000004000C8 -:10E9B0000002000000004000000000000000000015 -:10E9C000040000000000000008000000000000102B -:10E9D0000210000000000000000002000000000023 -:10E9E0000000000000100200001000000000020003 -:10E9F00000100000000000100000000000000000F7 -:10EA0000900002000200000000100410000000004E -:10EA10000000021082000000001000100000000042 -:10EA200000000808020002000000000000000000D2 -:10EA30000010021082000200021000000082040098 -:10EA4000000000880900000000000000000800101D -:10EA500000000000000000000000000800000400AA -:10EA60000000000000000000000000080002040098 -:10EA7000000000000000000004000008000000008A -:10EA80000000000000000000000000000004000082 -:10EA90000408050004000400040000004108000010 -:10EAA000040000000000000000000400410000001D -:10EAB00004080000000000000084000000100000B6 -:10EAC0000000080000008200C000000002080000F2 -:10EAD000000000000000C000400000000000000036 -:10EAE0000000000000000000000000000000200006 -:10EAF00000000000000000004000040001000000D1 +:10E880000000000000000000000000000000000088 +:10E890000000000000000000000000000008000070 +:10E8A0000000000000000000000000000000000167 +:10E8B0000002010000C00000000000000000100085 +:10E8C000C08204A020020000000000000000000040 +:10E8D0000000000000000000000000000000000038 +:10E8E0000084009000000000000000000000000014 +:10E8F0000000000000000000000000000000000018 +:10E900000000000000000000000000000000000007 +:10E910000000000000000000009000000000000166 +:10E9200000000000000000000000000000000000E7 +:10E93000010008880801010000000000000000003C +:10E94000020200082040080800000000000000004B +:10E9500000000000000000000000000000000000B7 +:10E960000800000000008800000000000000000017 +:10E970000000000000000000000000000000000097 +:10E980000000000000000000000000000000000087 +:10E990000000000000000000000000000000000077 +:10E9A0000000000000000000000000000000000067 +:10E9B000000041008080800820000000000000006E +:10E9C00000008080000000008000000000000000C7 +:10E9D0000000000000000000000000000000000037 +:10E9E0000000000000000000000000000000000027 +:10E9F0000000000000000000000000000000000017 +:10EA00000000000000000000000000000000000006 +:10EA100000000000000000000000000000000000F6 +:10EA200000000000000000000000000000000000E6 +:10EA30000000000000111100008000000000000034 +:10EA400000000000000000000000000000000000C6 +:10EA500000000000000000000000000000000000B6 +:10EA600000000000000000000000000000000000A6 +:10EA70000000000000000000000000000000000096 +:10EA80000000000000000000000000000000000086 +:10EA90000000000000000000000000000000040072 +:10EAA000090040001000000000000000000000000D +:10EAB0000000000000000001010000400000000014 +:10EAC00000000000000090004040C04090000000A6 +:10EAD0000000000000000000000000000000000036 +:10EAE00000000000000090008800880088000000FE +:10EAF0000000000000000000000000000000000016 :10EB00000000000000000000000000000000000005 :10EB100000000000000000000000000000000000F5 -:10EB200000000000000000000000000000000000E5 -:10EB300000000000000000000200000000000000D3 -:10EB400000000000080000000000000000000000BD -:10EB5000000003000000000004400000000000006E -:10EB6000000000000002080000400000100040000B -:10EB700000001008000000840000000000004000B9 -:10EB80000000000041000000020000000000000042 -:10EB900000000000000800820000000000000000EB +:10EB200001000000000000000000000000000000E4 +:10EB30000000000000000000000000E0070082006C +:10EB400000000000000000000000000000000000C5 +:10EB500000000000000000000000000000000000B5 +:10EB600000000000000000000000000000000000A5 +:10EB70000000000000000000000000000000000095 +:10EB80000000000000000000000000000000000085 +:10EB90000000000000000000000000000000000075 :10EBA0000000000000000000000000000000000065 :10EBB0000000000000000000000000000000000055 -:10EBC00000000000100000000041000000000000F4 -:10EBD000820040400000000004000000000000002F -:10EBE000000000000800000000000000000000001D +:10EBC000F0F00000000000000000C300C3FF810C53 +:10EBD000BD0C00000000000000000000000000006C +:10EBE000000000000000000000001803183F0000B3 :10EBF0000000000000000000000000000000000015 -:10EC000000000000000000000000000000100000F4 -:10EC1000000000000000000000000000C01184009F -:10EC20008400000000000000000000400010000010 +:10EC00000000000000000000000000000000000004 +:10EC100000000000000000000000000000000000F4 +:10EC200000000000000000000000000000000000E4 :10EC300000000000000000000000000000000000D4 -:10EC40000000002100000000000000000000410062 -:10EC5000000000000000000000404004040000002C -:10EC6000040000000000040000000000000000009C -:10EC70000000000000000000000000000000210073 -:10EC80000000000400000000000000000000000080 +:10EC40000000F0F00000000000000000990F990F94 +:10EC500081CFBDCF000000000000000000000000D8 +:10EC6000000000000000000000000000DB03DB3FAC +:10EC70000000000000000000000000000000000094 +:10EC80000000000000000000000000000000000084 :10EC90000000000000000000000000000000000074 :10ECA0000000000000000000000000000000000064 -:10ECB0000000000000002100210000000000000012 -:10ECC0000000000000000000000004000000000040 -:10ECD00000000000000000008400000000000000B0 -:10ECE0000000000000000000000000000000000024 -:10ECF0000000000000000000000000000000000014 -:10ED000000000400022000000000000000000000DD -:10ED100000000000000000000000080000000000EB -:10ED200000000008000000000000000000000000DB -:10ED30000000000082000000000000000000000051 -:10ED400000000000000000000000200000000000A3 -:10ED500000000000000000000000000000000000B3 -:10ED600000000000000000000000048400C0110446 -:10ED700000002184000400000082030800002184B8 -:10ED80000000000000000000000000000000000083 -:10ED9000000000040000002000000000000000004F -:10EDA0000000000000000000000000000000000063 -:10EDB0000000000000000000000000200000000033 -:10EDC00000001084000000000000000000000000AF -:10EDD0000000000000000000000000000000000033 -:10EDE000000000000000000000000000080000001B -:10EDF0000000000000410000900000000808000032 -:10EE00000000000000000000000200000000000000 -:10EE100000000000000000000000000000000000F2 -:10EE200000000000000000000000000000000000E2 -:10EE300000000000820082000000000000000000CE -:10EE400000000000000000000000002100000000A1 -:10EE50000000200000000000000000000000020090 -:10EE6000400000000000000000000000030000005F -:10EE7000000003000000000000000000000000008F -:10EE80000000000000000000000000000000000082 -:10EE90000000000000000000000000000000000072 -:10EEA000080000000000000000000000000000005A -:10EEB0000000100000000000000000000000000042 -:10EEC0000000000000000000000000000000000042 -:10EED0000000000000000000000000000000000032 -:10EEE000000008000000000000000000000000001A -:10EEF0000000000000000000000000000000000012 -:10EF000000000000000000000000200000000000E1 -:10EF100000000000000000000000000000000000F1 -:10EF200000000000000000000000000000000000E1 -:10EF300000000000000000000000000000000000D1 -:10EF40000000000090000000000000000000000031 -:10EF500000000000000000000000000000000000B1 -:10EF60000000200000000000000000000000000081 -:10EF70000000000000000000000000000000000091 -:10EF8000000000000000000000000500000000007C -:10EF90000000000000000000000000000000000071 -:10EFA0000000000000000000000000000000000061 -:10EFB0000000000000000000000000000000000051 -:10EFC000000000000300000000000000000000003E -:10EFD0000000000000000000000000000000000031 -:10EFE0000000000000000000000000000000000021 -:10EFF0000000000000000000000000000000000011 -:10F000000000000000000000000000000000000000 -:10F0100000000000000000000000000000000000F0 -:10F020000000000000000000000000008000000060 -:10F0300000000000000000000000000000000000D0 -:10F0400000000000000000000000000000000000C0 -:10F0500000000000000000000000000000000000B0 -:10F0600000000000000000000000000000000000A0 -:10F070000000000000000000000000000000000090 -:10F080000000000000000000000000000000000080 -:10F090000000000000000000000000000000000070 -:10F0A000000000000000000000000000000002005E -:10F0B0008800200020000000000000000000000088 -:10F0C0000000000000000000000000000000000040 -:10F0D0000000000000000000000000000000000030 -:10F0E000000000000000000000000001000100001E -:10F0F0000000000000000000000000000000000010 -:10F1000000000000000000000000000000000000FF -:10F1100000000001000100000000000000000000ED -:10F1200000000000000000000000000000000000DF -:10F1300000000000000000000000000000000000CF -:10F1400000000000000000000000000000000000BF -:10F1500000000000000000000000000000000000AF -:10F160000000000000000000001000100002000479 -:10F17000000000000000000000000000000000008F -:10F18000000000000000000000000000000000007F -:10F190000008002000020004000020000000000021 -:10F1A000000000000000000000000000000000005F -:10F1B000000000000000000000000000000000004F -:10F1C0000000000000000000000000050005002015 -:10F1D0000009000000000000000000000000000026 -:10F1E000000000000000000000000000000000001F -:10F1F000000000000000000000000000000000000F -:10F2000000000000000000000000000000000000FE -:10F2100000000000000000000000000000000003EB -:10F2200000000000000000000000000000000000DE -:10F2300000000000000000000000000000000000CE -:10F2400000000000000000000000000000000000BE -:10F2500000000000000000000000000000000000AE -:10F26000000000000000000000000000000000009E -:10F27000000000000000000000000000000000008E -:10F28000000000000000000000000000000000007E -:10F29000000000000000000000000000000000006E -:10F2A000000000000000000000000000000000005E -:10F2B00000000000000000000010008800000000B6 -:10F2C000000000000000000000000000000000003E -:10F2D000000000000000000000000000000000002E -:10F2E000000000000000000000000000000000001E -:10F2F000000000000000000000000000000000000E -:10F3000000000000000000000000000000000000FD -:10F3100000000000000000000000000000000000ED -:10F3200000000000070000000000000000000000D6 -:10F3300000000000000000000000000000000000CD -:10F3400000000000000000000000000000000000BD -:10F3500000000000000000000000000000000000AD -:10F36000000000000000000000000000000000009D -:10F37000000000000000000000000000000000008D -:10F38000000000000000000000000000000000007D -:10F39000000000000000000000000000000000006D -:10F3A000000000000000000000000000000000005D -:10F3B000000000000000000000000000000000004D -:10F3C000000000000000000000000000000000003D -:10F3D000000000000000000000000000000000002D -:10F3E000000000000000000000000000000000001D -:10F3F000000000000000000000000000000000000D -:10F4000000000000000000000000000000000000FC -:10F4100000000000000000000000000000000000EC -:10F4200000000000000000000000000000000000DC -:10F4300000000000000000000000000000000000CC -:10F4400000000000000000000000000000000000BC -:10F4500000000000000000000000000000000000AC -:10F46000000000000000000000000000000000009C -:10F47000000000000000000000000000000000008C -:10F48000000000000000000000000000000000007C -:10F49000000000000000000000000000000000006C -:10F4A000000000000000000000000000000000005C -:10F4B000000000000000000000000000000000004C -:10F4C000000000000000000000000000000000003C -:10F4D000000000000000000000000000000000002C -:10F4E000000000000000000000000000000000001C -:10F4F000000000000000000000000000000000000C -:10F5000000000000000000000000000000000000FB -:10F5100000000000000000000000000000000000EB -:10F5200000000000000000000000000000000000DB -:10F5300000000000000000000000000000000000CB -:10F540000000000066666667000000000000000022 -:10F5500000000000000000000000000000000000AB -:10F56000000000000000000000000000000000009B -:10F57000000000000000000000000000000000008B -:10F58000000000000000000000000000000000007B -:10F59000000000000000000000000000000000006B -:10F5A000000000000000000000000000000000005B -:10F5B000000000000000000000000000000000004B -:10F5C0000000000000000000000300000000000038 -:10F5D000000000000000000000000000000000002B -:10F5E000000000000000000000000000000000001B -:10F5F0000000000000000000000000610006000D97 -:10F6000000000000000000000000000000000000FA -:10F6100000000000000000000000000000000000EA -:10F62000000000610006000D000000000500000859 -:10F6300000000000000000000000000000000000CA -:10F6400000000000000000000000000000000000BA -:10F650000000000000000000000000000061000643 -:10F66000000D00000000000000000000000000008D -:10F67000000000000000000000000000000000008A -:10F6800000003C3C00000000000000000000000002 -:10F69000000000000000000000000000000000006A -:10F6A0000000000000000000000CAAAE00000000F6 -:10F6B000000000000000000000000000000000004A -:10F6C000000000000000000000000000000000003A -:10F6D000000000000000000000000000000000002A -:10F6E00000000030AABA0000000000000000000086 -:10F6F000000000000000000000000000000000000A -:10F70000000000A03CBC0000000000000000000061 -:10F7100000000000000000000000000000000000E9 -:10F72000000000000000000000000000AAAA000085 -:10F7300000000000000000000000000000000000C9 -:10F7400000000000000000000000000000000000B9 -:10F7500000000000000000000000000000000000A9 -:10F76000000000000000AAAA000000000000000045 -:10F770000000000000000000000000000000000089 -:10F780000000000000000000000000000000000079 -:10F790000000000000000000000000000000000069 -:10F7A0000000000000000000000000000000000059 -:10F7B0000000000000000000000000000000000049 -:10F7C0000000000000000000000000000000000039 -:10F7D0000000000000000000000000000000000029 -:10F7E0000000000000000000000000000000000019 -:10F7F0000000000000000000000000000000000009 -:10F8000000000000000000000000000000000000F8 -:10F8100000000000000000000000000000000000E8 -:10F8200000000000000000000000000000000000D8 -:10F8300000000000000000000000000000000000C8 -:10F8400000000000000000000000000000000000B8 -:10F8500000000000000000000000000000000000A8 -:10F860000000000000000000000000000000000098 -:10F870000000000000100000000000000000000078 -:10F8800010000000000084000000040000000000E0 -:10F890000000000000000000000000000000010364 -:10F8A0000091008004000000A1031084A00000006B -:10F8B00000000000000300008400000004000000BD -:10F8C0000000000000002000400000000004C00014 -:10F8D000000000040004000004000000C004000058 -:10F8E00000000000000088008811200020110000A6 -:10F8F00000000000400000000000000200000000C6 -:10F9000000000040000040000000000420820002CF -:10F9100000000090100200020002400000000002FF -:10F92000089000100010000200004090400200000B -:10F9300000040000000000000000000000000000C3 -:10F940000000000000000000400000020020000055 -:10F950001000000000900000000000000000000007 -:10F96000400000000000000000004000C0008000D7 -:10F9700021900000009080000000000000000000C6 -:10F98000000000000000080000000000000000006F -:10F9900000000840000004100000004000000000CB -:10F9A000000002000400820000000011200020007E -:10F9B0000000040000000008000000000400000037 -:10F9C0000000000000000400020000000000001021 -:10F9D00000100000000002100010000000000000F5 -:10F9E00040000000020000000000020002000210BF -:10F9F000021010400440020000100000040000004B -:10FA000000000000000200000400000000000000F0 -:10FA1000000000400000040002080500000005008E -:10FA20000010000000002000000000000000800026 -:10FA300080000900410004000004000000000000F4 -:10FA40000000000000000000000000002000000294 -:10FA5000040000000000040000000040000000005E -:10FA6000000004000000000004000000000000008E -:10FA70000000000000000000000000840000000002 -:10FA800000000000000000000000040090000000E2 -:10FA90000000040000000000200000000000000042 -:10FAA00000000000000084000000000000000000D2 -:10FAB0000000000040000000000000000000000006 -:10FAC0000000000000000000000000000000000036 -:10FAD0000000000000000000000000000000000026 -:10FAE00000000000000000000040000000000000D6 -:10FAF0000100000000000000000000000000000005 -:10FB00000000000000000020400000000000000095 -:10FB100000000000000000020002000000000000E1 -:10FB200000000000000000000000000200000000D3 -:10FB30000500400000204000000000000000000020 -:10FB400000000000000000000000000000000000B5 -:10FB5000000004000300030000000000000000009B -:10FB60000000000200000800000000000200000089 -:10FB70000000200000000000000000000000000065 -:10FB80000000000000000000000000000000004035 -:10FB900000000000C00000000000000000000000A5 -:10FBA000C0000000C0090000040004000040000084 -:10FBB00000400000040008000000000000000040B9 -:10FBC0000000000000008200820000000000000031 -:10FBD000000000000000000000000800000000001D -:10FBE0000000C000080000000040002000000000ED -:10FBF00000002010081000040000000000000004B5 -:10FC0000000400000000110000080000000000C017 -:10FC100000C0008811000200000000000000000089 -:10FC20004000000000000000110000000000000083 -:10FC3000000000000008002000C0000000000000DC -:10FC400000000000000000000000000000000000B4 -:10FC50000000000011000000030000000000000090 -:10FC600000002000000000880000000005000000E7 -:10FC70000500410088000500410010000800000058 -:10FC800000820000000000000000000000000000F2 -:10FC90000000040000000000000004000000080054 -:10FCA0001000080000000400000000000000000038 -:10FCB0000000000082000800820000000000000038 -:10FCC0000000000000000000000000000000000034 -:10FCD000000000000000000000000800000000001C -:10FCE000C0000000000090000000000000000000C4 -:10FCF00000000000A000000000000000000000085C -:10FD000000000000000000000000000000000000F3 -:10FD100000000000000000000000000000000000E3 -:10FD20000000000000000000800000000040000013 -:10FD300000000000000000000000000000000000C3 -:10FD400000000000000000000000000000000000B3 -:10FD500000000000000000000000000000000000A3 -:10FD6000000000A0000000080000000000000000EB -:10FD7000000000000000000000000900000000007A -:10FD80000000000000000000000000000000000073 -:10FD90000000000000000000000000000000000063 -:10FDA00000000800C000400004000000040004003F -:10FDB000000040020000010082000000000000413D -:10FDC0000004000400040004000000000000000023 -:10FDD0000000000000000000000000000000000023 -:10FDE0000000000000000000000000000000000013 -:10FDF0001000820000000000000000000000000071 -:10FE000000000000000000000000000000000000F2 -:10FE1000000000000000000000C000000000000022 -:10FE200000002000000000000000800000008000B2 -:10FE3000800000000000000004000000000004003A -:10FE400000C00001000100010001000000000000EE -:10FE50000000000000000000004000000000000062 -:10FE60000000000005000000100000080000000075 -:10FE7000000010000500000000002100000000004C -:10FE80000000000008024000000000000000000028 -:10FE90000000000000000000000000000000000062 -:10FEA000000000000000000000000000020200004E -:10FEB000000200A0000000900000001000000400FC -:10FEC0000100000000000000010000000000000030 -:10FED0000000000000000000000000000000000022 -:10FEE0000000000000000000000000000000000012 -:10FEF0000000000000000000000000000000000002 -:10FF00000000000000000000010090000000000060 -:10FF100000000000000000000000000000000000E1 -:10FF200000000000000000000000000000008080D1 -:10FF300000000080000003000080000000000000BE -:10FF40008000030000000005030310000000000013 -:10FF500000000000000000000000000000000000A1 -:10FF60000000000000000000000000000000000091 -:10FF70000000000000000000000000000000000081 -:10FF8000000000001100000000004100000000001F -:10FF90000000000000000000000000000000000061 -:10FFA0000000000000000000000000000000000051 -:10FFB0000000804100000000000000800000808000 -:10FFC0001109000000091000008040000000030338 -:10FFD0000000000000000000000000000000000021 -:10FFE0000000000000000000000000000000000011 -:10FFF0000000000000000000000000000000000001 -:020000040026D4 -:1000000000000040000000080000000000000000A8 -:1000100000000000000000000000000000000000E0 -:1000200000000000000000000000000000000000D0 -:10003000000000000401A04000000000902000002B -:1000400008040100000000000000000200000000A1 -:1000500000000000000000000000000000000000A0 -:100060000000000000000000000000000000000090 -:100070000000000000000000000000000000000080 -:100080000000000000000000000000000000000070 -:100090000000000000000000000000000000000060 -:1000A0000000000000000000000000000000000050 -:1000B0000000000002000002008200040090000026 -:1000C000040808080000080100000000000000010A -:1000D0000000000000000000000000000000000020 -:1000E0000000000000000000000000000000000010 -:1000F0000000000000000000000000000000000000 -:1001000000000000000000002000000000000000CF -:1001100000000000000100000000000000000000DE -:1001200000000000000000000000000000000000CF -:1001300000000000000080000080000000800580BA -:100140000000800080800000801100080904004049 -:100150002010080300000000000000000000000064 -:10016000000000000000000000000000000000008F -:10017000000000000000000000000000000000007F -:1001800000000000000000000000800000000800E7 -:100190000020002000110008000000000000000006 -:1001A000000000000000000000000000000000004F -:1001B00000000000000000000000808900800000B6 -:1001C00000000002008000000000000000000004A9 -:1001D000038000001000001000000000000000007C -:1001E000000000000000000000000000000000000F -:1001F00000000000000000000000000000000000FF -:1002000000000000000000000000000500000000E9 -:1002100000000000000000000000000000000000DE -:1002200000000000000000000000000000000000CE -:100230000000000000000000000082000402000432 -:10024000000000000001009000000000000000001D -:10025000000000020000010000010000000000009A -:10026000000000000000000000000000000000008E -:10027000000000000000000000000000000000007E -:10028000000000000000000000000000000000006E -:10029000000000000000000000000000000000005E -:1002A000000000000000000000000000000000004E -:1002B000000000000000000000000000000000003E -:1002C000070060000000000007000000000000E0E0 -:1002D00000000000000000E000000000000000003E -:1002E000000000000000000000000000000000000E -:1002F00000000000000000000000000000000000FE -:1003000000000000000000000000000000000000ED -:1003100000E00000000000000000000041000000BC -:1003200000000000000000000000000000000000CD -:100330000000000000000000000000000000AAAA69 -:10034000AAFF00AAF0FA000000003CFF00FF000036 -:10035000000000000000000000000000000000009D -:10036000000000000000000000000000000000008D -:10037000000000000000000000000000000000007D -:10038000000000000000000000000000000000006D -:10039000000000000000000000000000000000005D -:1003A000000000000000000000000000000000004D -:1003B000000000000000000000000000000000003D -:1003C000000000FF00AAF0FA000000003CFF00FF60 -:1003D000000000000000000000000000000000001D -:1003E000000000000000000000000000000000000D -:1003F00000000000000000000000000000000000FD -:1004000000000000000000000000000000000000EC -:1004100000000000000000000000000000000000DC -:1004200000000000000000000000000000000000CC -:1004300000000000000000000000000000000000BC -:1004400000003F3F0F0F5F555F55BE3CBE3C0F0F96 -:10045000FFFF00000000000000000000000000009E -:10046000000000000000000000000000000000008C -:10047000000000000000000000000000000000007C -:10048000000000000000000000000000000000006C -:10049000000000000000000000000000000000005C -:1004A000000000000000000000000000000000004C -:1004B000000000000000000000000000000000003C -:1004C000000000003C3C00000F000F00BE3CBE3CA2 -:1004D0000F0F0F0F000000000000000000000000E0 -:1004E000000000000000000000000000000000000C -:1004F00000000000000000000000000000000000FC -:1005000000000000000000000000000000000000EB -:1005100000000000000000000000000000000000DB -:1005200000000000000000000000000000000000CB -:1005300000000000000000000000000000000000BB -:10054000000000000000000000080000000005009E -:100550000A08050000A000610007000D000000610E -:100560000001000100000000000000000000000089 -:10057000000000000000000000000000000000007B -:10058000000000000000000000000000000000006B -:10059000000000000000000000610007000D0000E6 -:1005A00000610006000D00000000000000000000D7 -:1005B000000000000000000000000000000000003B -:1005C000000000000000000000000000000000002B -:1005D000000000000000000000000000F0FF00FF2D -:1005E0005F5F0F0FF0FCF0FC000000000000000057 -:1005F00000000000000000000000000000000000FB -:1006000000000000000000000000000000000000EA -:1006100000000000000000000000000000000000DA -:10062000000000000000C300550F000000000000A3 -:1006300000000000000000000000000000000000BA -:1006400000000000000000000000000000000000AA -:100650000000000000000000000000000000F0FFAB -:1006600000FF55550000003C003C00000000000069 -:10067000000000000000000000000000000000007A -:10068000000000000000000000000000000000006A -:10069000000000000000000000000000000000005A -:1006A0000000000000000000C3FF550F0000000024 -:1006B000000000000000000000000000000000003A -:1006C000000000000000000000000000000000002A -:1006D000000000000000000000000000000000001A -:1006E0001414FFFFFF55FF00AAAAFAFA0000000049 -:1006F00000000000000000000000000000000000FA -:1007000000000000000000000000000000000000E9 -:1007100000000000000000000000000000000000D9 -:1007200000000000000000000000000000000000C9 -:1007300000000000000000000000000000000000B9 -:1007400000000000000000000000000000000000A9 -:100750000000000000000000000000000000000099 -:1007600000001414FFFF555500000000F0F00000D9 -:100770000000000000000000000000000000000079 -:100780000000000000000000000000000000000069 -:100790000000000000000000000000000000000059 -:1007A0000000000000000000000000000000000049 -:1007B0000080008000040004000500800204200482 -:1007C00000000000000010000484100400040080F9 -:1007D0000080000001000110001100000000201046 -:1007E000C100000040000100000400000000C0043F -:1007F00000030000000000000000000000000008EE -:100800002000200000000002020300000800000495 -:1008100000840000C00088000004040040000000C4 -:100820000400400000000004200484000000008058 -:1008300004C10004000400030001000200044001A0 -:10084000800100000000000200020010000040844F -:10085000001000044182200220051000000040002A -:1008600021014000000000000800000200004000DC -:100870000000000000000000000000004000000038 -:100880000002400040000000200000000004804002 -:100890004040000200000000400000401000000046 -:1008A00040000000A002000000020090100040C0C4 -:1008B0000002000201042000010401042100218043 -:1008C000010401040000000000000200000000001C -:1008D0000000000000800080008002900000020004 -:1008E0000000840000000400000000000000000080 -:1008F0000010001000000000000000000210820044 -:1009000000000010001000000000000000100200B5 -:100910000000000000000000000000108410020031 -:1009200002000010C00000000000000000100200E3 -:100930000000001000102001840020112011A08868 -:10094000A0402001200100C00400000000000000C1 -:100950000010000000100004000400040504000062 -:100960000000000000000000000000000000200067 -:10097000200009000000000000000400000000004A -:1009800000000200048400000000000000000000DD -:100990000000000000000000000002000400000051 -:1009A0000000040000082000000004000000000017 -:1009B0000000000000000000000800000000000827 -:1009C0002000000000000000000000000200000005 -:1009D00000054000000000000004010010000000BD -:1009E0004005000000081000000000020000880020 -:1009F0000000900000000000000000000000000067 -:100A000000000000040000000000000000000000E2 -:100A100000000000000000090000000000000000CD -:100A200000000004000000040000000001110000AC -:100A300000000004000000000000000000000000B2 -:100A40000000800000000000000000000000000026 -:100A500000000000000000000020008820A000002E -:100A600000000000210000000000000003820004DC -:100A70000000000000000002000000000000000074 -:100A8000000000000000000000000000090000005D -:100A90000000000000000000000011001000000035 -:100AA00004000000000040080000000041000800B1 -:100AB0000000000000000000000000000000000036 -:100AC000000000000000000000000800000000100E -:100AD0000000000000000000000000000000020014 -:100AE00000000000000500000810000000000000E9 -:100AF00000000800000008000000000000000000E6 -:100B000000000000A0000040820000000011000072 -:100B1000000008000000C0041000840084001000E1 -:100B2000C0000000A00482048400820008000000CD -:100B300000000000084000000000040082000800DF -:100B40000000000041C000000000000000000000A4 -:100B50000001000000000000000000000000000094 -:100B600000A00000210000000000000000000000C4 -:100B70000000000000000000000000000000000075 -:100B80000000000000000000000000000000000065 -:100B90000000000000000000000000000000000055 -:100BA000000004004100040000000000000080007C -:100BB00000000000000080000000000000000000B5 -:100BC0000000000040400000000000000804040095 -:100BD00000000000000000000020000000040000F1 -:100BE0000000840000000000C00000410000000080 -:100BF00000000002000000000002000000000000F1 -:100C000000000000000000000000000000000000E4 -:100C1000000040004000900082000000C00008007A -:100C20000800040000200400A000020008000011D9 -:100C300082008200000000118200001102000011F9 -:100C4000008400000000000100000090000000018E -:100C50000000000000000000000000000000000094 -:100C60000000000000000000000002000000000082 -:100C70000000000000000000000008002100030048 -:100C80000000000000000000000003000000000061 -:100C90000000000000000000000000000020000034 -:100CA0008000800000000000000000008000800044 -:100CB00000000000200000000000000000908800FC -:100CC000000000400004A088840800000004000028 -:100CD000840000000104000000000100000000008A -:100CE0004000820000408421000000000005000058 -:100CF000004100000011040000000000000000009E -:100D0000000084000000000000000000000000005F -:100D100000000000000000000000000000000000D3 -:100D2000000000000800C00000210009000082004F -:100D3000C0000000C0000000A0004000A0050005A9 -:100D400000000010000200010040000000000091BF -:100D5000000008000000020000004100080000A0A0 -:100D60004000000000000000000000000000000043 -:100D70000000114000000000000000000000000022 -:100D80000000000000000000000000000000000063 -:100D90000040000000000000000000000000000013 -:100DA00009000000400000000000000000000000FA -:100DB0000000000000000000000000000000000033 -:100DC000000009000001200001C1000004900001A2 -:100DD00001C1000000900001088808400090C08216 -:100DE0000000000000000000000000000000000003 -:100DF00000000000000000000001000000000000F2 -:100E000000000000000000000000000000000000E2 -:100E100000000000000000000000000000000000D2 -:100E20000000408808208290A0820000000000009E -:100E30000000401020020082C002901120040082B5 -:100E40000804901041044082A0040991210500A0EB -:100E500000100991210500850010000000800000AD -:100E6000808000000000000000000000000005007D -:100E700000000000000000000000204000210010E1 -:100E8000000300000000000000000000000000005F -:100E90000000000000000000000000000000000052 -:100EA000000000008000040000000080000000003E -:100EB000000000008080008000808080008900C0E9 -:100EC000008900830880408080800080C180050008 -:100ED00020118400118005000509800000000082B7 -:100EE0000020000080008002001000008008000048 -:100EF0008010800080000000000000000000000062 -:100F00008000000000000000000000000000000061 -:100F100000000000000000000000000000000000D1 -:100F20000000000000008000008200A0000000001F -:100F300000000000000000000008004000008000E9 -:100F400000880010000020004102904004000810BA -:100F500000000001C100204000000001C00010009E -:100F6000900220100820400008010891A00008010C -:100F7000200008000400080090008800040004001D -:100F8000A000100090000000000000000000000021 -:100F90000000000000000000000000000000000051 -:100FA00000000000000000000200900808089008FF -:100FB00000000000000000004000204020A0902021 -:100FC0000400204182219082410040210483910845 -:100FD00000000000008401C100000000018401C184 -:100FE000C1080090042008900000000000000000EC -:100FF00000002000000001000000000000000000D0 -:1010000000000100010000000000000000000000DE -:1010100000010000000000000000000000000000CF -:101020000000000000000000000003090090021111 -:1010300020900000000000000000054000208420F7 -:101040004190090400204082C09009410040020400 -:1010500020910000100500A01191000200050285FA -:1010600011919000000080000000000000000000CE -:1010700000000000800000004100000000000000AF -:101080000000000020000800000000000000000038 -:10109000000000010000000000000000000000004F -:1010A000000000000000000000000000C10200106D -:1010B000808800100000000000000000C100000057 -:1010C00080002000C18011008400C000C108001011 -:1010D00080A00004A000A01103000509890085116B -:1010E00005000309001000118080800000028000CC -:1010F0000080000000080000008000000000008068 -:1011000000800000000000000080000000000000DF -:1011100000000000000100000000000000000000CE -:10112000000000000000000000000000000000407F -:1011300080210000000000000000000000000010FE -:101140008021000080008002808800008000000074 -:10115000801000000020C000900101000001C004C8 -:101160009001000001012000880840C0100002002A -:101170000882024090000001000200100000000000 -:101180000004001000000000001000020000000039 -:10119000000000000000000100000000000000004E -:1011A000000000000000000000000000000000003F -:1011B000A000022002A0900000000000000000003B -:1011C000020102400888080010018202200808007D -:1011D0000888024188A08200600000E00000000052 -:1011E000600000E000000000000000000700600652 -:1011F0000000000000000000000000E0000000828D -:1012000000000000000000000000000000000000DE -:1012100000000000000000000000000000000000CE -:1012200000000000000000000000000000000000BE -:10123000000000000000070048000000000000005F -:1012400000000000000007004882000000000700C6 -:1012500048060000000007004800FF000000FF00F3 -:101260000000FF000000FF00000000000000000080 -:101270000000F4F024000000000000000000000066 -:10128000000000000000000000000000000000005E -:10129000000000000000000000000000000000004E -:1012A000000000000000000000000000000000003E -:1012B000000000000000000000000000000000002E -:1012C000000000000000000000000000000000001E -:1012D000000000000000000000000000FF0000000F -:1012E000FF000000FF000000FF0000000000000001 -:1012F00000000000F0F0000000000000000000000E -:1013000000000000000000000000000000000000DD -:1013100000000000000000000000000000000000CD -:1013200000000000000000000000000000000000BD -:1013300000000000000000000000000000000000AD -:10134000000000000000000000000000000000009D -:10135000000000000000000000000000000000008D -:10136000000000000000000000000000000002106B -:101370002000008810840000000000000000000031 -:10138000000000000000000000000000000000005D -:10139000000000000000000000000000000000004D -:1013A000000000000000000000000000000000003D -:1013B00000000000000000000210200000881084DF -:1013C00000000000000000000210200000881084CF -:1013D0000210200000881084021020000088108471 -:1013E00000000F0F00003C3C00000F0FFFFFC3C3C5 -:1013F0000000000000000000000000000004FFFFEB -:10140000000000003C3C3C7C000000000C0C0C6E1A -:1014100000000000003C063E00000000000000004C -:1014200000000000000000000000000000000000BC -:1014300000000000000000000000000000000000AC -:10144000000000000000000000000000000000009C -:10145000000000000000000000000000000000008C -:10146000000000000F0F00003C3C00000F0FFFFFCA -:10147000C3C30000000000000000000000000004E2 -:1014800000040000000000000060000000000C0CE0 -:101490000C0C00000000003C003C000000000000BC -:1014A000000000000000000000000000000000003C -:1014B000000000000000000000000000000000002C -:1014C000000000000000000000000000000000001C -:1014D000000000000000000000000000000000000C -:1014E0000000000040E380008021920240E3800081 -:1014F00080218202000000000010000000000000B7 -:101500000000000000610007000D00000000000066 -:101510000000000000610006000D00000000000057 -:1015200000000000000000000000000000000000BB -:10153000000000000000000000000000000000614A -:101540000006000D00000000000000000000000088 -:1015500000000010000000610006001D0000006196 -:101560004006000D00013C550F55FFA0FFAF5F5C2A -:10157000505CFF30FF3F0000000000000000000052 -:10158000000000000000000000000000000000005B -:10159000000000000000000000000000000000004B -:1015A000000000000000000000000000000000003B -:1015B000000000000000000000000000000000002B -:1015C00000000000808080FF00000000000000009C -:1015D000000000000000000000000000000000000B -:1015E000000000000000AAAA3C550F5500A000AF63 -:1015F0005F5C505C0030003F000000000000000015 -:1016000000000000000000000000000000000000DA -:1016100000000000000000000000000000000000CA -:1016200000000000000000000000000000000000BA -:1016300000000000000000000000000000000000AA -:10164000000000000000000000FF0000000000009B -:10165000000000000000000000000000000000008A -:101660000000000000000030AABA353F3530AA0C57 -:10167000AAFC3F3F3F30AAFCAAFC0000000000008B -:10168000000000000000000000000000000000005A -:1016900000000000000000000000FFFF0400000048 -:1016A000000000000000000000000000000000003A -:1016B000000000000000000000000000000000002A -:1016C000000000000000000000000000000000001A -:1016D000000000000000000000000000A0A0F5F5E0 -:1016E0000000000000000000000CAAAE353F3530BD -:1016F000AA0CAAFC303F3030AA0CAA0C0000000053 -:1017000000000000000000000000000000000000D9 -:1017100000000000000000000000000004000400C1 -:1017200000000000000000000000000000000000B9 -:1017300000000000000000000000000000000000A9 -:101740000000000000000000000000000000000099 -:10175000000000000000000000000000000082D730 -:1017600082D700000000000000000000AAAA0000CC -:1017700000000008000020000000000010800000B1 -:1017800000000000A00000000000000000000000B9 -:101790000000C002000020000000000084000000E3 -:1017A00000000000400500000000000000000002F2 -:1017B000000000004000400820000004000020035A -:1017C0000000C0000000A000000000000000008039 -:1017D00040000000200082042000840084042004D3 -:1017E000000002000000000400000005040000806A -:1017F000410200000002000000840090210200105D -:101800000000000040000000000200000000000294 -:101810000002000200824002009000020004000268 -:101820000002000000C000000002000200000000F2 -:1018300000004000400000000000000000014100E6 -:101840000000000000020000200041000000000035 -:1018500000100000400240004000000000000000B6 -:101860000000000000000002000000004000100026 -:1018700000020000840000000000000000000200E0 -:1018800002100000080400004140000002000000B7 -:1018900002000000000000000000000000008200C4 -:1018A0000010040000000000000000000000000024 -:1018B0008240000000000000001000100000000046 -:1018C00000100010000000000000000000000000F8 -:1018D00002000000020002000010021009000800CF -:1018E00000000210820082000000000000000000E2 -:1018F00002109010000004080000000020000010FA -:10190000000800000000040000048800000000003F -:101910000000040000000010030400000084000028 -:1019200004080400000000000002000200000000A3 -:1019300000000000000000000000000000000400A3 -:10194000040000080000000000000000000000008B -:10195000008400000000000000000400008220005D -:101960000400000400000000000000000000000867 -:10197000000000000084000000000000004000089B -:101980008221000000000000000000000000004074 -:1019900000410000080000000000000000000000FE -:1019A00000008809400000000000040040000420FE -:1019B0000000000082000000000000000000004065 -:1019C0000000000000000000000000000000000017 -:1019D00000080000000040000000000000000000BF -:1019E000000800210000000000000000400000008E -:1019F00090008821000088002100000011000000F4 -:101A0000000009101100090000000000000000881B -:101A1000009003880000800000000000000000002B -:101A200005000002000000000000000000000800A7 -:101A3000000000080000000000000040000000401E -:101A40000000000000000000000000001100400045 -:101A50004000000041000000808400002184050057 -:101A600005840000030005000500000008001000C8 -:101A7000082004000000000000000000000000003A -:101A800000000000820000000004000000000000D0 -:101A90000000000000000000000000000000000046 -:101AA000000000000000000008000000000000200E -:101AB0000000000000000400000000000000000022 -:101AC00008000000000200000020000000000000EC -:101AD000000000000000840000000005000000007D -:101AE00000000000000000001000000000000000E6 -:101AF000004004000000000000040004000000009A -:101B000000000000000011000008000000000000BC -:101B100000080008000000000000000000000000B5 -:101B200000000000000000000000000000040000B1 -:101B30000000000000000000410003000000000061 -:101B400000002100000000830000000002000000EF -:101B50000000000000000000000000000000000085 -:101B6000000000000800000000000000000000006D -:101B700000000000000000000000000000A00005C0 -:101B800000000000000000000000000084000000D1 -:101B90000000000001000000000000000000000044 -:101BA00000000000004000000000000000000000F5 -:101BB000000000000800000000000000000000001D -:101BC0000000000004000000000000000000000011 -:101BD000002000008200000500000000000400005A -:101BE00000000000000000000000000000000000F5 -:101BF00000000008000000100000000000001000BD -:101C0000000000002100000004000000210000008E -:101C100011000588110402000040030000000000CC -:101C200000000040000009400200000000880000A1 -:101C300000000000400000A00000000800000000BC -:101C40000000000000000000000000000000000094 -:101C50000000000000000020040011000504400006 -:101C60000020000000000000100010000000100024 -:101C700000900000089021000800100021A003003F -:101C80002190000000008800000000020100000018 -:101C900000000000000000000080000000000000C4 -:101CA0000000000000000000000000000000000034 -:101CB0000000000000000000000000000000040020 -:101CC0000000000000000000000000000100000013 -:101CD00000000000000000008200000000008400FE -:101CE0000000000800200000000020080000002183 -:101CF0001000000800001040000008001000000064 -:101D000000000000000000000000000000000800CB -:101D100000000000000000880008004000000000F3 -:101D2000000000000000000000000000000000882B -:101D3000000009000000000000000000000000009A -:101D40000000000000000000000000000000400053 -:101D50000000034000000000000000000800000038 -:101D60000000000002000000000000000000000071 -:101D7000000000000000000000000004000000005F -:101D80000000000000000000000000000000000053 -:101D900000000000000000000100A00000000000A2 -:101DA0000000000000000000000000000000000033 -:101DB0000000000000000000000000000000000023 -:101DC0000000000000000000000000000000000013 -:101DD0000000000000000001000000000000000002 -:101DE000000000008400000000000000000000006F -:101DF00000010000000000000000000000000000E2 -:101E000000000100A0000000000000000000000031 -:101E100000000000000000000000030000000000BF -:101E200000000000000000000000000000000000B2 -:101E300000000000000000000000000000000000A2 -:101E40000000000000000000000000000000000092 -:101E50000000000200114011000800000000000016 -:101E600000000000020080000000000000000000F0 -:101E70000000000400110010000500000000000038 -:101E80000000000010000000000000000000000042 -:101E90000000000000000000000000000000000042 -:101EA00000000000800000000000000000000000B2 -:101EB0000000000000000000000000000000000022 -:101EC0000000000000000000000000000000000012 -:101ED00000000000000000000040000000000000C2 -:101EE0000000000080000000800000800000000072 -:101EF00000000000000000000000000000000000E2 -:101F000000000000000000000000000000000000D1 -:101F10000000000082000200C000820090009000DB -:101F20009000A090A0001000C0000200000000007F -:101F300000000000000000000000000000000000A1 -:101F40000000000000000000000000000000000091 -:101F500000000000000000880000000100000000F8 -:101F60000000000000001000A0000400A008000015 -:101F70000000000000000000000000000000000061 -:101F80000000000000000000000000000000000051 -:101F90000000000000000000000000000000000140 -:101FA0000000000100000000000000000000000030 -:101FB0000000000000000000000000000000000021 -:101FC0000000000000000000000000000000000011 -:101FD00000000000000000000000010001000100FE -:101FE00000000000000000000000000100000001EF -:101FF00000000000000000000000010000000100DF -:1020000000000000000000000001000000000001CE -:1020100000000000000000000000000000000000C0 -:102020000010000300080020000000000000000075 -:1020300000000000000000000000000000000000A0 -:102040000000000000000000000000000000000090 -:102050000000000000000000000000000300080075 -:10206000100000000000000000000009002000082F -:10207000002000000000000000000000030011002C -:10208000020000000000000000000020000200111B -:102090000010000000000000000000400000008070 -:1020A0000000000000000000000000400000008070 -:1020B0000000000000000000000000000000000020 -:1020C0000000000000000000000000000000000010 -:1020D00000000000000000000000000003212100BB -:1020E00008001000000000000000000000020000D6 -:1020F0000080000000000000000000000000000060 -:1021000000000000000000000000000000000000CF -:1021100000000000000000000000000000000002BD -:1021200000400000000000200090000000000004BB -:10213000004000000000000000000000000000005F -:10214000000000000000000000000000000000008F -:10215000000000000000000000000000000000017E -:10216000000000000000000000000000000000006F -:10217000000200400000000000000000000000001D -:10218000000000000000000000000000000000004F -:10219000000000000000000000000000000000003F -:1021A000000000000000000000000000000000002F -:1021B000000000000000000000000000000000001F -:1021C000000000000000000000000000000000000F -:1021D00000000000000000000000000000000000FF -:1021E000820000E00000000000000000000000008D -:1021F00000000000000000000000000000000000DF -:10220000480000E0000000000000000000000000A6 -:1022100000000000000000000000000000000000BE -:1022200000000000000000000000000000000000AE -:10223000000000000000000000000000000000009E -:10224000000000000000000000000000000000008E -:10225000000000000000000000000000000000007E -:10226000000000000000000000000000000000006E -:10227000000000000000000000000000000000005E -:10228000000000000000000000000000000000004E -:10229000000000000000000000000000000000003E -:1022A000000000000000000000000000000000002E -:1022B000000000000000000000000000000000001E -:1022C000000000000000000000000000000000000E -:1022D00000000000000000000000000000000000FE -:1022E00000000000000000000000000000000000EE -:1022F00000000000000000000000000000000000DE -:1023000000000000000000000000000000000000CD -:1023100000000000000000000000000000000000BD -:1023200000000000000000000F000F00000000008F -:10233000B2B2B2B2000000000F000F0000000000B7 -:10234000000000000000000000000000000000008D -:10235000000000000000000000000000000000007D -:10236000000000000000000000000000000000006D -:1023700000000000000000000000FFFF010000005E -:10238000000000000000000000000000000000004D -:10239000000000000000000000000000000000003D -:1023A000000000000000000000001F140F000000EB -:1023B000000000C33CFF000000001F140F000000DD -:1023C000000000000000000000000000000000000D -:1023D00000000000000000000000000000000000FD -:1023E00000000000000000000000000000000000ED -:1023F00000000000000000000000000001000100DB -:1024000000000000000000000000000000000000CC -:1024100000000000000000000000000000000000BC -:1024200000000000000000000000000000000000AC -:1024300000614006000D00000000000000000000E8 -:10244000000000000000000000000000000000008C -:10245000000000000000000000000000000000007C -:102460000000000000000000000000610005800D79 -:102470000000000000000000000000610006000DE8 -:102480000000000000000000000000610002C00D1C -:102490000000000000000000000000610006000DC8 -:1024A000000000000000000000000000000000002C -:1024B0000000000000003F033F0300000000000098 -:1024C000000000000000000000000000000000000C -:1024D00000000000000000000000000000000000FC -:1024E00000000000000000000000000000080000E4 -:1024F00000000000000000000000000000000000DC -:102500003000BAAA00000000000000000000000037 -:1025100000000000000000000000000000000000BB -:10252000AAAAAAEA000000000000000000000000C3 -:102530000000000000000000D7D7141400000000C5 -:10254000000000000000000000000000000000008B -:10255000000000000000000000000000000000007B -:102560000000000000000000000000000000000863 -:10257000000000000000000000000000000000005B -:1025800000000000AAAA00000000000000000000F7 -:10259000000000000000000000000000000000003B -:1025A0000000000000C0000000000000000000006B -:1025B000000000000000000000000000000000001B -:1025C000000000000000000000000000000000000B -:1025D00000000000000000000000000000000000FB -:1025E00000000000000000000000000000000000EB -:1025F000FCD7FC14000000000000000000000000F8 -:1026000000000000000000000000000000000000CA -:10261000FF02FF02000000000000000000000000B8 -:1026200000000000000000000000000000000000AA -:10263000000000000000000000000000000000009A -:10264000000000000000000000000000000000008A -:10265000000000000000000000000000000000007A -:10266000000000000000000000000000000000006A -:102670000000FCFFFC3C0000000000000000000027 -:10268000000000000000000000000000000000004A -:1026900000000002FF020000000000000000000037 -:1026A00000000000000000000000880000000000A2 -:1026B000040000000000200800082000000088003E -:1026C00004000400040020000400200000020000B8 -:1026D000200000A0002020020000200000000000D8 -:1026E00020110000000040008800000320000000CE -:1026F0000000200004030000000000082000C000CB -:102700004000A000C0008800880040002000C000F9 -:10271000C000400000040180000484822000880082 -:102720000400004040000000C000C00000000002A3 -:1027300000000000000000A02102000000000000D6 -:1027400010000002000000024002400000400000B3 -:102750002100000000030041100000000002000002 -:102760000000000041000004000040200000400084 -:102770000000000000000000100010041000100015 -:102780000000100000002100400040000000000098 -:1027900000000000000000414004000300030002AC -:1027A00041000000000000000000100000000000D8 -:1027B000000004000200000000000400020000000D -:1027C0000000000003000000000000000000020004 -:1027D000000000000000000001008290A0900000B6 -:1027E00000000200080000000000080008000000CF -:1027F00000000000000002000400000004000000CF -:1028000020000000080002108900000004100000F1 -:102810000000000000000210820002000800090011 -:1028200000000000000002000000020002000000A2 -:1028300004000400000005000400040009000088F2 -:1028400004000408040040000008200000002008E4 -:1028500000000400000000000000088400200020A8 -:102860000000000820000000000400000000000438 -:10287000000000000000000005000200040020002D -:102880000000000004080000000040004182000039 -:1028900000080000000040000000000800000000E8 -:1028A0004004000004080000000000000400008450 -:1028B000000800000000A000010000000008000067 -:1028C0000109401140118802200990040404820487 -:1028D0008800000440000004000002009000008016 -:1028E000090000000000000004000021004000007A -:1028F0000008000000410000000000000008000087 -:1029000000000000040040000000000000218800DA -:10291000A0088800000000000000000000118200F4 -:102920000000A08000000000080008000421100042 -:1029300000401000000000000000080000004000FF -:10294000210008000000000000000000000000005E -:1029500003000000100000000000000080000000E4 -:102960000040820000000084000000000000000021 -:102970000000000000000000000010000000000047 -:102980000400000000001100090000000002000027 -:1029900000002100090000000000100010000000ED -:1029A0000000000000040000001000000000000013 -:1029B000000000000000000000000800000000000F -:1029C00000211000000500000000000000100000C1 -:1029D00000000000000000000000000000000000F7 -:1029E0000000004008000000000000000000080097 -:1029F0000000840000000000000000004000001003 -:102A00008204C009082100910000010001000802B1 -:102A10000004A020000900000000C0000000000425 -:102A20000040000000000000000500000000001150 -:102A300008000800080008000000000021C0000095 -:102A40000000000003000000008200000000000001 -:102A50000000000004000000000000000000000072 -:102A60000084000000008000000000000000000062 -:102A7000000008080000080000000000000000003E -:102A80000000000000000000020400000800080030 -:102A9000C1000040000041000000100000000000E4 -:102AA00003000800000021000000000000000000FA -:102AB00000000000000000000000000008000021ED -:102AC00088004000000008020011012100000002FF -:102AD000008400110000001100400200000000000E -:102AE00000000000010000000000000000000000E5 -:102AF00000000000000000000000000008000000CE -:102B0000A000000040000200A00090800000000033 -:102B1000000008020000000008000800000000009B -:102B20000000080000000400000000000000000099 -:102B300000000041000010000000000000008000C4 -:102B40000004000020040000C10400000204410051 -:102B500020020510400000000004000000000000FA -:102B60004000000000000200000000200000000003 -:102B70000000000000000000000000000000004015 -:102B80000000000000000008000008000020009085 -:102B90000004000000000000000000000000000031 -:102BA00000000000000000000000000000000040E5 -:102BB00008000000080011000000200000000000D4 -:102BC000000008000000C0030021002102050000F1 -:102BD00000020021000300000000000000000000CF -:102BE00000000000000000000000000001000021C3 -:102BF00000000000000000000008080000000000C5 -:102C00000000000010000000100004000000100090 -:102C100000008400840000000000000000000000AC -:102C200000000000C00010000000000000000000D4 -:102C30000000000000000000004000001000040040 -:102C40000000000088000000000005000000800077 -:102C50000000000000000000000000000000000074 -:102C6000000000000000000000000000000008005C -:102C70000000000000000020000000000000000034 -:102C80000000000000000200000000000000000042 -:102C90002000000041004100000000000000000092 -:102CA0000000000000000000100010000000000004 -:102CB00000000000080000002000000000000000EC -:102CC0000000101000880010C010C0100020008804 -:102CD0002088081009401020C08200000000000079 -:102CE0000000000000000000000000C1000000899A -:102CF00000020000000000000000000000000000D2 -:102D000000000000000000000000000000000000C3 -:102D1000010000009002084000020882000000004C -:102D200000000000000000000000000000000000A3 -:102D30000200000000000000000000000000000091 -:102D400000000000008000000000800088800080FB -:102D500000000000008004800000008000000000EF -:102D600000000000000000000000000000880000DB -:102D70000040000000000000000000000000000013 -:102D80000000000000000000000000000000000043 -:102D900011000200000000800080008000804020C0 -:102DA00000210003002000000000000000002000BF -:102DB000110085000000000000000000000000007D -:102DC000000000000000000000080080000000007B -:102DD00000C1801100800000000200880000000097 -:102DE0000000000000000000000000000000800063 -:102DF00000000000808000000000000000000000D3 -:102E000000000000000000000000000000000000C2 -:102E1000000000000000000000000020000800800A -:102E200000000000000000000000000000000000A2 -:102E300010080800084110210000000000000000F8 -:102E40000000000000000000020002098808029053 -:102E500090000808408810C0880090820810100870 -:102E60000000000000000000000000000000000062 -:102E700008000400A000C0020000000000000000E4 -:102E80000000000000000000000000000000000042 -:102E9000000090002000000000001000901008A02A -:102EA00020040000000000000000000000000000FE -:102EB000000001000000010001010000000000000E -:102EC00000000000000000000000C0100010088496 -:102ED00002108990002008080810210800910202C1 -:102EE00088900000000000000000000000000000CA -:102EF00000000002000020000100000000000000AF -:102F000000000000000000000000000100000000C0 -:102F1000000000000000000100000001890800908E -:102F20000220908800000000000000000000000067 -:102F30000000000000009000000100000000000000 -:102F400000000000000000000000000085000000FC -:102F50000080088020000080800008804010002150 -:102F600000C1080500000000000000000000000093 -:102F700000000000100000004100210000000000DF -:102F80000000000000000000000000000001000040 -:102F900000000000000000020008002000204100A6 -:102FA0000000800000000000200020000000000061 -:102FB00000000000000000020000002100030000EB -:102FC0000000000000000000000000000000800978 -:102FD00080108000800000080090000080008005C4 -:102FE00000408000800000000000000000000000A1 -:102FF00000000000000000040003000000000000CA -:1030000000000000000000000000000000000001BF -:10301000000000000000000000040000008000002C -:103020008005000580000000000000000000000096 -:10303000000000000000000010000000020010006E -:103040000000000000000000000000000000000080 -:1030500010000803408808000200028390040890D2 -:103060008400889084C01000000000000000000070 -:1030700000000000000000000001000390000000BC -:103080000000000000000000000000000000000040 -:1030900000010000000000000000000100400002EC -:1030A000000002004088400890000000000000007E -:1030B0000000000000000000000000000000000010 -:1030C00001000000000000000000000000000000FF -:1030D000000000000000070041820000000007001F -:1030E000840600000000070000000000000000004F -:1030F00000000000000000000000000000000700C9 -:1031000000000000000000000000000000000000BF -:10311000000000000000000000000000810600E048 -:103120000700000000000000070048000000000049 -:10313000000000000000000000000000000000E0AF -:10314000000000000000000000000000000000007F -:10315000000000000000000000000000000000006F -:10316000000000000000000000000000000000005F -:103170000000000000000000000000000000F0F06F -:1031800000003C3C000000000000000000000000C7 -:10319000000000000000000000000000000000002F -:1031A000000000000000000000000000000000001F -:1031B000000000000000000000000000000000000F -:1031C00000000000000000000000000000000000FF -:1031D00000000000000000000000000000000000EF -:1031E00000000000000000000000000000000000DF -:1031F00000000000000000000000000000000000CF -:10320000F0F000003C3C0000000000000000000066 -:1032100000000000000000000000000000000000AE -:10322000000000000000000000000000000000009E -:10323000000000000000000000000000000000008E -:10324000000000000000000000000000000000007E -:103250000000000000000000021020000088108420 -:1032600002102000008810840210200000881084C2 -:10327000000000000000000000000000000000004E -:10328000000000000000000000000000000000003E -:10329000000000000000000000000000000000002E -:1032A0000000000000000000000002102000008864 -:1032B000108400000000000000000000000000007A -:1032C00000000000000000000000000000000000FE -:1032D00000000000000000000000000000000000EE -:1032E00000000000000000000000000000000000DE -:1032F00000000000000000000000000000000000CE -:1033000000000F0FC3C33C3C600000000000000041 -:1033100000000000000000000000000000000000AD -:10332000000000000000000000000000000000009D -:10333000000000000000000000000000000000008D -:10334000000000000000000000000000000000007D -:10335000000000000000000000000000000000006D -:10336000000000000000000000000000000000005D -:10337000000000000000000000000000000000004D -:10338000000000000F0FC3C33C3C600000000000C1 -:10339000000000000000000000000000000000002D -:1033A000000000000000000000000404040400000D -:1033B000000000000000000000000000000000000D -:1033C00000000000000000000000000000000000FD -:1033D00000000000000000000000000000000000ED -:1033E000000000000000000040000000000000613C -:1033F0000006001D000000000000000000000000AA -:103400000000000000001561200E054D00A800001E -:1034100000000000000000000000000000000000AC -:10342000000000000000000000610027800900008B -:10343000000000000000000000610006000D000018 -:10344000000000000000000000610007000900000B -:10345000000000000000000000000000000000006C -:10346000000000000000000000000000000000005C -:1034700000000000CB498A080000000000000000A6 -:10348000000000000000000000000000000000003C -:10349000000000000000000000000000000000002C -:1034A00000000000000000000000000000003000EC -:1034B000000000000000000000000000000000000C -:1034C00000000000000000000000FCFC3C3C00008C -:1034D000C3C3000000000000000000000000000066 -:1034E00000000000000000000000000000000000DC -:1034F000000000000000DF5D9E1C000000000000D6 -:1035000000000000000000000000000000000000BB -:1035100000000000000000000000000000000000AB -:10352000000000000000000000000000000000009B -:10353000000000000000000000000000000000008B -:103540000000000000000000000000000C0C3C3CEB -:1035500028EB28EB00000000000000000000000045 -:10356000000000000000000000000000000000005B -:10357000000000000000000000000000000000004B -:10358000000000000000000000000000FFFF00003D -:10359000000000000000000000000000000000002B -:1035A000000000000000000000000000000000001B -:1035B0000000000000000000000000000000040007 -:1035C00000000000000000000000000000000000FB -:1035D000000000F03030000000000000000000009B -:1035E00000000000000000000000000000000000DB -:1035F00000000000000000000000000000000000CB -:103600000000000000000000000000000000FFFFBC -:103610000F0F00000000000000000000000000008C -:10362000000000000000000000000000000000009A -:10363000000000000000000000000000000000008A -:10364000000000000000000000000000000000007A -:103650000000000000F0303000000000000000001A -:1036600000000000000000000004900000000000C6 -:10367000000900802000880400008800840088047D -:103680000000880020002000880020418408880075 -:1036900088054000A000200010002103210421051E -:1036A000000020002020080000032000200000006F -:1036B0002000000000002000880021032000C0033B -:1036C000880500002000200088000000000088001D -:1036D0002000000041002000200000000000A000A9 -:1036E0000005880020002004200300000000404066 -:1036F000000000840002000400000000000000C080 -:1037000040000090000000400090009000900000F9 -:103710004100000200000000000040402000204066 -:103720002008000000000000000000000000000071 -:1037300000000000000000000000000020C0C0C029 -:103740004000414041000000400000000000200017 -:103750004000000040004000000020002000000069 -:103760000500000041000000000008000100050005 -:103770000100088000000003002102000000040096 -:103780001000000000000000000002100000040013 -:103790000000040000000200020000000000000021 -:1037A00002100010000002000410001000000000D1 -:1037B0000000000000000000000002000200900075 -:1037C00000000900080000000000020008000000DE -:1037D00020000008000000000000080008000200AF -:1037E00002008410084004400200020008040400A3 -:1037F0000400040000200008000000000300000096 -:103800000000000400000000000000000000008232 -:1038100000000000000000040000000000000000A4 -:103820000000040800000000000000040400000084 -:10383000000000000004000000C0200400000000A0 -:103840000000000020080004000000000000050047 -:10385000000400000500000000004000008400009B -:103860000000000000040000009004000010009020 -:1038700000200020002000000021000004040000BF -:10388000000000000008900000210040000000003F -:1038900000000000000000000008400000000200DE -:1038A00001000000400004000005000000000000CE -:1038B0000000000000000000000300000000000005 -:1038C0008800000000009000400000000000100090 -:1038D00088200000000000210040000000000000DF -:1038E000000000000000200300000008000000218C -:1038F00000000001200100A1020209880090099047 -:103900001182000000000084000000400040000818 -:1039100000000000000002000000000000000000A5 -:10392000000020020000080000000000000000006D -:103930000000000000002100400000000000050021 -:10394000110005002182030003000388009041005C -:1039500041000020040000400000000000000500BD -:1039600000000000008400001000030000000000C0 -:1039700000004000008008890000040000210802C7 -:1039800000000020A000000000000800040000006B -:1039900000000000004100000008000000001000CE -:1039A00000000040000000000000000000000000D7 -:1039B0000000080000000000404008004000000037 -:1039C0000000000008000000080082002000040041 -:1039D0000000000040040800000000008200C00059 -:1039E0000040000000008200840008041000100065 -:1039F000A0000004000400200020000000000000DF -:103A000000010000000000000084008400000000AD -:103A10000040000800000000080000000000000056 -:103A2000000008000000000000000000020000008C -:103A30000000000000000000000011000500000070 -:103A40000000000000000500000000000084C0002D -:103A50002100400040000800000008001100210083 -:103A600003A00000000000000088000004400000E7 -:103A70000000008441A0000000400040C00220205F -:103A80000000000200000000000000000011000023 -:103A90000000000000000000000000000000000026 -:103AA0000000000000000000000000000000000016 -:103AB0000000000000000000000000000000000006 -:103AC00000000000000000084000000000000800A6 -:103AD0000800000000000000A00800008200C000F4 -:103AE0009000000000000000000000000000000046 -:103AF00008000000000800000000000020100988F5 -:103B000000910088208920020988119009001188FD -:103B1000090009000000090000000000000000008A -:103B2000000000000008400000200000000000002D -:103B30000000000000000000000000000000000085 -:103B4000000000000088000000900304400400040E -:103B500011044000110000000900210000000000D5 -:103B600000000000090000000220400000040000E6 -:103B700000004000000000000000000000880180FC -:103B80000103012010000000000000000000000000 -:103B900000000000000000400008000000000000DD -:103BA0000000000000000000000000000000000015 -:103BB0000000000000058200000000000000000876 -:103BC000000000000000080000000000000090005D -:103BD000000000008400000884000008A00000002D -:103BE00000000000000000000000000000000000D5 -:103BF000080000000000102100000000000000206C -:103C0000042004000403008841A00000008200009A -:103C100000000000000000000000000000000000A4 -:103C200000000000050000000000110004100990D1 -:103C30000000000400000000000000000000000080 -:103C400000000000000000C020000000110400A0DF -:103C5000000000884100000000001020000000006B -:103C6000050021080500020005004100000003884E -:103C7000000200A0110000A00000000800A0000841 -:103C80000000009000049090000000000000000080 -:103C90000000000000000000000000000000000024 -:103CA0000000000000000000000000000000000014 -:103CB0000000000001000000000000000000000003 -:103CC00000000000000000000000000000000000F4 -:103CD00000000000100000000000000000000000D4 -:103CE00000000000000000000000000000000000D4 -:103CF00000000000000000000000000000000000C4 -:103D000000000000008000808080000000000000B3 -:103D100000000000000000000000000000000000A3 -:103D20000000000000000000000000000000000093 -:103D30000000000000001000000000000000000073 -:103D40000000000000000000000000000000000073 -:103D50000000000000000000020000000000000061 -:103D60000000000000000000000000000000000053 -:103D70000000000000000000000000000000000043 -:103D800000000000000000118080008000000000A2 -:103D90000000000000000000000000000000000023 -:103DA0000000000000000000000000000000000013 -:103DB00000000000000900000004000000000000F6 -:103DC00000000000000000000000000000000000F3 -:103DD00000000000000000090000000300000000D7 -:103DE00000000000000000000000000000000000D3 -:103DF00000000000002000000000000000000000A3 -:103E00000000000000000000000184848290000097 -:103E100000000000000000000000000000000000A2 -:103E20000000000000000000000000000000000092 -:103E30000000000000000000000000000000000082 -:103E40000000000000000000000000000000000072 -:103E50000000000000000000000000000001000061 -:103E60000000000000000000000000000000000052 -:103E700000820000000000000000000000000000C0 -:103E8000000000000000000040000040900482821A -:103E90000000000000000000000000000000000022 -:103EA0000000000000000000000000000000000012 -:103EB00000000000000000000000100000000000F2 -:103EC00000000000000000000000000000000000F2 -:103ED00000000000000000000000000020000000C2 -:103EE00000000000000000000000000000000000D2 -:103EF00000000000000000000000000000000000C2 -:103F000000000000000000000000800000808080B1 -:103F100000000000000000000000000000000000A1 -:103F20000000000000000000000000000000000091 -:103F30000000000000000000000000000000000081 -:103F4000020000000000000000000000000000006F -:103F500000000000000000000000000000008000E1 -:103F6000000002000000000000000000000000004F -:103F70000000000000000000000000000000000041 -:103F80000000000000000000000000008000800031 -:103F900080800000020403004100000000000000D7 -:103FA0000000000000000000000000000000000011 -:103FB0000000000000000000000000000000000001 -:103FC00000000000000000000000000000000000F1 -:103FD00000000000000000000000000000000011D0 -:103FE00000000000000000000000000000000000D1 -:103FF0000000000000002000030008000200000094 -:104000000000000000000000000000000000900020 -:1040100040000404820000000000000000000000D6 -:104020000000000000000000000000000000000090 -:104030000000000000000000000000000000000080 -:104040000000000000000000000000000000000070 -:104050000000000000000000000000000000000060 -:104060000000000000000000000000000000000050 -:10407000000000000000000000000000010001003E -:104080000000000000000000000000000000000030 -:104090000006000007000000000000000000000013 -:1040A0000000000000000000000000000000000010 -:1040B0000000000000000000000000000000000000 -:1040C000000000E000000000000000000000000010 -:1040D00000000000000000000000000000000000E0 -:1040E0000000000000E000000000000000000000F0 -:1040F00000000000000000000000000000000000C0 -:1041000000000000000000000000000000000000AF -:10411000000000A0F3D3F0FF000F0000000000003B -:10412000000000000000000000000000000000008F -:10413000000000000000000000000000000000007F -:10414000000000000000000000000000000000006F -:10415000000000000000000000000000000000005F -:10416000000000000000000000000000000000004F -:10417000000000000000000000000000000000003F -:10418000000000000000000000000000000000002F -:10419000000000000000F3F3F0F000F00000000069 -:1041A000000000000000000000000000000000000F -:1041B00000000000000000000000000000000000FF -:1041C00000000000000000000000000000000000EF -:1041D00000000000000000000000000000000000DF -:1041E00000000000000000000000000000000000CF -:1041F00000000000000000000000000000000000BF -:1042000000000000000000000000000000000000AE -:10421000000000000000AB0CAB0C00FFFFFF000033 -:10422000000000000000000000000000000000008E -:10423000000000000000000000000000000000007E -:10424000000000000000000000000000000000006E -:10425000000000000000000000000000000000005E -:10426000000000000000000000000000000000004E -:10427000000000000000000000000000000000003E -:10428000000000000000000000000000000000002E -:104290000000000000000000AF00AF000000FF00C1 -:1042A000000000000000000000000000000000000E -:1042B00000000000000000000000000000000000FE -:1042C00000000000000000000000000000000000EE -:1042D00000000000000000000000000000000000DE -:1042E00000000000000000000000000000000000CE -:1042F00000000000000000000000000000000000BE -:1043000000000000000000000000000000000000AD -:10431000000000000000000000000000002000007D -:10432000000000610006000D000000000000000019 -:10433000000000000000000000000000000000007D -:104340000000000000000000000000610007000DF8 -:10435000000000000000000000000000000000005D -:1043600000000000000000000000000000610007E5 -:10437000000D000000000000000000000000000030 -:104380000000000000610006000D000000000000B9 -:10439000000000000000000000000000000000001D -:1043A00000000000FFFFF0FF000000000000000020 -:1043B00000000000000000000000000000000000FD -:1043C00000000000000000000000000000000000ED -:1043D00000000000000000000000000000000000DD -:1043E00000000000000000000000000000000000CD -:1043F00000000000000000000000000000000000BD -:10440000000000000000A0A041EB00000000000040 -:10441000000000000000000000000000000000009C -:10442000000000000000FFFFF0FF0000000000009F -:10443000000000000000000000000000000000007C -:10444000000000000000000000000000000000006C -:10445000000000000000000000000000000000005C -:10446000000000000000000000000000000000004C -:10447000000000000000000000000000000000003C -:104480000000000000000000F5F541EB0000000016 -:10449000000000000000000000000000000000001C -:1044A000000000000000000000000000000000000C -:1044B00000000000000000000000000000000000FC -:1044C00000000000000000000000000000000000EC -:1044D00000000000000000000000000000000000DC -:1044E00000000000000000000000000000000000CC -:1044F00000000000000000000000000000000000BC -:1045000000000000000000000000000000000000AB -:10451000000000000000000000000000000000009B -:10452000000000000000000000000000000000008B -:10453000000000000000000000000000000000007B -:10454000000000000000000000000000000000006B -:10455000000000000000000000000000000000005B -:10456000000000000000000000000000000000004B -:10457000000000000000000000000000000000003B -:10458000000000000000000000000000000000002B -:10459000000000000000000000000000000000001B -:1045A0000000000000000400000020002000400087 -:1045B0000000200040000400040004000480040007 -:1045C0000400000000000000000000802000200027 -:1045D0000000040421002000840020002000880046 -:1045E00020000800000300008800000000002041B7 -:1045F000C103208020110005000020002000904110 -:104600002100040584004000200000000000040098 -:104610000000000000001080040001000480200061 -:1046200021008400208200008000000200000002BF -:10463000000040820900C0001100800200028002D8 -:104640008000C00000820000000000020010000096 -:1046500000000900400008000000200000002002C7 -:10466000000000000800000000000000040000003E -:1046700080822000C002A000410000004108090023 -:1046800040400800000000C0000000A00000000240 -:1046900040004100200002000004800004A0A0109F -:1046A000C000040040004120000004000000002180 -:1046B00004400440400004004000000001000300EA -:1046C0000580050004100410000005000000000033 -:1046D000000002000041000008000400000000008B -:1046E00000000400000000000000000000000000C6 -:1046F00002100800040001900402000000000800FD -:104700008210028008000000000040000400000049 -:1047100002000200044000090100000000004010F7 -:1047200008000205010000000100008200400000B6 -:1047300004000000000080000000840000880400E5 -:104740000482400204008000800004000200040093 -:1047500004000000000000082000800000000000AD -:104760000000000000000000000000000000000049 -:104770000000000080C080000810800100000000E0 -:10478000800000000010840000000000890000008C -:104790000000000020000000000040000090000029 -:1047A000800980000002200000000400000082A0B8 -:1047B00000A0080020802003C011900020809000FD -:1047C000C000C0000400C000C10205000000C0001D -:1047D00004000800000800000000000000050002BE -:1047E00000000000C00000000000002100000000E8 -:1047F000000000000000080000030000002100008D -:104800009100C000880090000002002100210003F8 -:1048100000000000001188002000000800210000B6 -:104820000000000000000021000000000041000224 -:104830000021002100000002000000080402000224 -:10484000008200840000800000000400840000005A -:104850000000000000000008000000000000000050 -:10486000000000000000008400A0400000000000E4 -:10487000000041000000200000001000090041007D -:104880000800080000000000080800000888000078 -:1048900041000500000003000000080000000000C7 -:1048A000410000000000000000000484000000003F -:1048B00000050009048904050082000000030003CC -:1048C000000000000085008400000800088000004F -:1048D00000000000000000400011820200090040BA -:1048E0000000A040080000110000000000000002CD -:1048F00000000005C0000400C0000040000084412A -:104900008400C0008409C00008000810A000100442 -:104910000800000000000011200200000800000054 -:104920000021850040000000A0000811820008045A -:1049300004040400020091208000000300840000B1 -:104940000082008408000320032000000000000211 -:1049500008000000000011000000000800880000AE -:104960000000000000000000000000000000000047 -:1049700000000000000000000300000002850500A8 -:1049800000A01100080041002100A10088210504B9 -:10499000000000000000000000088001000000008E -:1049A00000001000040080000800000000C00000AB -:1049B000000100014011082090008300C0000000A9 -:1049C0000041900004200403054104830020C1003D -:1049D00004200102000000000000000000000000B0 -:1049E00000000000000004000000000008000800B3 -:1049F000080000210000C0000000000000000000CE -:104A00000800A100904008089000C0048400C00085 -:104A100084408400C01084000800A00084808200CC -:104A200010108210418200000000001104000000FC -:104A30002008C00400030000080100000402000276 -:104A4000200220022088A001800084C08020000174 -:104A500004008001040100000000000000000000CC -:104A60000000000000000000200000000000000026 -:104A70000000000000000000000000000000000036 -:104A80000000000408880000008800000088000082 -:104A90001000100003000001000080000000001062 -:104AA00000000001000140110000000000000000B3 -:104AB0000000000000010000000000200020002095 -:104AC0000011000001000010000204200005002079 -:104AD00001210080000500800000000000090000A6 -:104AE00000000400000000210000000000000000A1 -:104AF00000080000000000000000880300008200A1 -:104B00000000080400000880C0008421080000089C -:104B10000421A000C000840008008400A0008200DE -:104B20000000000010000000090300000000002049 -:104B30000000044100210421004100000091009187 -:104B4000000100840000080800850001800100C009 -:104B50000083040000200400000200A00800000000 -:104B600000840000000000000000000000000000C1 -:104B700011000000000000000000000041004100A2 -:104B80000400410400004088800209040000030082 -:104B90000000000020880500080000A000C00800F8 -:104BA00000002000200005000000400009040088EB -:104BB0000000000488000000C1000000C0C0A091F7 -:104BC0000083C000C01140200002108200C19090FC -:104BD0000001898800C0A0900200A0A00000000091 -:104BE00000000000000000000000000000000000C5 -:104BF00000000000000000000000000000000000B5 -:104C0000000000000000C1080120090010A0901061 -:104C100040A000C090820140002000C0000440037A -:104C20009004A182900240209004888290020201A8 -:104C300020000101C0000000000001000000000091 -:104C400000C00020800090A08089111100C009835D -:104C5000809000030800008083858000808300002E -:104C60000000000000000000000000000000000044 -:104C70000000000000000000000000000000000034 -:104C80000000000000000000898020800400000077 -:104C900000808000000000802180008000000080F3 -:104CA00084A020A0C0A100918000408000800080EE -:104CB000801100114008804000000000400000000A -:104CC000000000008000800088002011A09040803B -:104CD00000008003808080800080110500009183A7 -:104CE00080000000001080000000000000000000B4 -:104CF00000000011000000000000000000000000A3 -:104D00000000000000000000000090080803A01050 -:104D1000A00080000040801000800000000000889B -:104D20000000000000200020008080031004888321 -:104D300000000911850003008808000800800008B1 -:104D40000000A000C00082009000410010904008C8 -:104D50000502000010018410C09088C0010100000D -:104D6000C1824000020002010800000000000000B3 -:104D700000000000000000C0000000000000000073 -:104D80000000000000000000000000000900C10158 -:104D9000A009088440009020022182100000000039 -:104DA000000200002000904140A08204040090C056 -:104DB0000508A04082900208C1000805000100C05B -:104DC000000100088210004090820000038800204B -:104DD0000988101000000000009000C000010000D1 -:104DE000919000C1000000000000000000000000E1 -:104DF00000000000000000000000010000000000B2 -:104E00000000000000010000000000000000C010D1 -:104E1000200304030811C08800904010C182C00024 -:104E2000000000000200032001908841208203045A -:104E30000090A005C0A00184002010900120000077 -:104E4000020020000100400000808000000090006F -:104E500004804100108000000000008000800011EC -:104E600000058383008500000000000000000000B2 -:104E700000000000000000000000000040000000F2 -:104E80000000000000000001000000000000000021 -:104E9000000800020002884091000000800090009D -:104EA0008000000000000000C10502084102091155 -:104EB000C182000800A1800041000000110008002C -:104EC0001000800000004000002100800000000071 -:104ED000001000C0800000098010002180008000C8 -:104EE0009182050821A103000000000000000000DD -:104EF0000000000000000000800000008000800032 -:104F000000000000000000000001000000000000A0 -:104F100000000084800400000002800500400000C2 -:104F200080000000000000000000000500030000F9 -:104F30000000000000820000000821000904098030 -:104F400011040000000400000000000100200082A5 -:104F50000000C00884831010840190008800900035 -:104F60000200C1400000010990000000008800908C -:104F70000000000000000000000008001000840095 -:104F8000020000000000000000000001000000001E -:104F9000000000000805400190A088000200088879 -:104FA00040900400900040004000000082009020EB -:104FB000A090A000208820038290820101A0002000 -:104FC00000020001000000000000000000060000D8 -:104FD0000700000A000000000700840600410000EE -:104FE00007000000008100000700600000000000D2 -:104FF00000000000000000000000000000000000B1 -:1050000000000000000000000000000000000000A0 -:10501000000000000000008100E0070042000000E6 -:1050200000000700848200000000000041008800AA -:1050300000E00700480000000000070048060000EC -:1050400000E007008406000000E0070060000000A8 -:105050000000DC90DC900000000000000000DFFF9A -:105060000000000000000000000000000000000040 -:1050700000000000000000000000000000003C3CB8 -:105080003C3C0000000000000000000000000000A8 -:105090000000000000000000F9F97E180000000088 -:1050A00000000000000000000000600000000000A0 -:1050B00000000000000000000000000000000000F0 -:1050C00000000000FD6D9D0D0000000000000000CC -:1050D00000000000F090F0900000000000000000D0 -:1050E000FFFF0000FF0000003C3C0000FF0000004C -:1050F00000000000000000000000000000000000B0 -:10510000FC7EFC3C000000000000000000000000ED -:105110000000000000000000000060607E18200019 -:10512000000000000000000000000000600000001F -:10513000000000000000000000000000000000006F -:10514000000000000000F46494040000000000006F -:105150000000000000000000000002102000008895 -:1051600010840000000000000000000000000000AB -:10517000000000000000000000000000000000002F -:10518000000000000000000000000000000000001F -:10519000000000000000000000000000000000000F -:1051A00000000000021020000088108400000000B1 -:1051B000000000000210200000881084021020006F -:1051C00000881084000000000000000000000000C3 -:1051D000000000000FFF0F000024FFFB0000000094 -:1051E00000000000000000C3000000F0000000C349 -:1051F0000000C3C3000000006EFF666600000000F0 -:10520000000000000000000000000000000000009E -:10521000000000000000000000000000000000810D -:105220000000000000000000000000000000FFFF80 -:10523000FFFF000000000000000000000000000070 -:10524000000000000000000000002FBF0F0F000052 -:1052500000000000000000FF000F0000F0F0000060 -:10526000000000000000000000C3000000F000008B -:1052700000C300000000000000006E6666660000CB -:10528000000000000000000000000000000000001E -:10529000000000000000000000000000000000000E -:1052A0000000000000C0000000000000000000003E -:1052B00000180909000000000000000000000000C4 -:1052C0000000000000000000000000002F2F0F0F62 -:1052D000000000000000000000610026000D00003A -:1052E00000614006000D00000363033E0C0D92C0F8 -:1052F00003E3033E0C0DC2C00000000000000001EB -:10530000000000000000000000000000000000009D -:10531000000000000000000000000000000000008D -:1053200000000061002F001D0000000000000000D0 -:105330000000000000000000000000610007800D78 -:10534000200000610006000D000005610A0F050D38 -:1053500000A005610A0F050D00A00000000000007C -:10536000000000000000000000000000000000003D -:105370000000FBFFFFFF0000002000000000000015 -:10538000000000000000000000000000000000001D -:10539000000000000000000000000000000000000D -:1053A000000000000000000094D5BCFD00000000DB -:1053B00000000000000000000000000000000000ED -:1053C000CFCF0C0C0000000094D594D500030F0340 -:1053D00000000000000000000000000000000000CD -:1053E00000000000000000000000000000000000BD -:1053F00000000000FFFFFFFF0000000000000000B1 -:10540000000000000000000000000000000000009C -:10541000000000000000000000000000000000008C -:105420000000000000000000000080C1A8E90000AA -:10543000000000000000000000000000000000006C -:1054400000007D417D410000000080C180C1000A54 -:105450000F0A0000000000000000000000000F0024 -:105460000F00000000001000000003037D41000059 -:10547000F00000000000003C003C0000F0F00000E4 -:10548000000000000000000000000000000000001C -:10549000000000000000000000000000000000000C -:1054A00000000000000000000000000055555551AC -:1054B00000000000000000000000000000000000EC -:1054C00000AAFFAA000000000000000000F000F0A9 -:1054D0003F303F30A0FCAFFC0000000000000000A7 -:1054E0000F000F0000000000000000003F3F7D4162 -:1054F0000000F000000000000000000000000000BC -:10550000000000000000000000000000000000009B -:10551000000000000000000000000000000000008B -:105520000000000000000000000000000000FFFF7D -:10553000FFFB000000000000000000000000000071 -:105540000000C3F0C3F00000000000000000A0A0B5 -:10555000A0A0FFF00F00A00CAF0C000000000000A6 -:1055600000002000000020000000840084000000F3 -:105570002000000520050008200000004100200256 -:105580002002C18008802090200320082008840089 -:10559000100088002004100020001002000000020B -:1055A00020000003200020002005200000008800CB -:1055B0000120200040002000008820002000050479 -:1055C0002000400020002000000088024000100061 -:1055D0000000200020050003408088022000000415 -:1055E0008400000000020000000410080000000019 -:1055F0000002C00000000000000000000002C00027 -:1056000000000085402090100021C04000000002F2 -:1056100000000090009000020008000200820002DA -:1056200000000000000000001082100000001000C8 -:105630001000040100000002000410200000090016 -:105640002000800000020000000204002100090088 -:1056500000000000000040004000900200400000F8 -:105660002002400000000000020000000000004195 -:105670000000020002000000020000000200000022 -:10568000020000800220010090008210081000003B -:10569000A0000210821000000000000000000000C6 -:1056A00000000000020000000000000000090000EF -:1056B00004800480000001A084800080008040A15C -:1056C000000000210200A0000204004000100210AF -:1056D0000040004000000300020002004080090476 -:1056E0000000000002100010000000000000000098 -:1056F000000000000400038800000000000000001B -:1057000000000000000200004000000000008004D3 -:105710000008000800000008000800080008000851 -:105720000000000000000900000000880082040062 -:105730000000A020A0200008402000200020002021 -:1057400080200008000800000000000300000000A6 -:105750000000001000000008400000080000800267 -:10576000C0000084000400000000000000C10080B0 -:105770000000000000000000900000000008000889 -:1057800000000002400000000000040804080400BB -:105790000080000090004000002000210005400033 -:1057A00000000008000800000000000000080000E1 -:1057B0002000000001080004008004000400C00074 -:1057C0000520040000000003000000800000000825 -:1057D000000000000000000000058408000004082C -:1057E000100004000000904000200800000011405C -:1057F0002040000000A00000000000080008000891 -:1058000000080008008900000000008200008000FD -:1058100000820020000000000000000000000000E6 -:105820000000000000A000A0000000000000000038 -:1058300011004000040004000900082090008008C6 -:1058400041A0841080824100030041902104210086 -:1058500021A00900000004000300030003000088E9 -:105860000000200010000300000000A00900000557 -:105870000000401100110000050540410410001116 -:105880000000000000000000000000000000080010 -:105890000000008400000000000000000808000074 -:1058A00000000009000000000800080000000000DF -:1058B00000110000000000000500050008000011B4 -:1058C0000400C080048041808400840284000800B9 -:1058D000200000000808C000C0000800C000000050 -:1058E00008000800830008004000900082000004C7 -:1058F00000C02000000000000084049000000008A8 -:1059000000080008000800080000000000900000E7 -:1059100000000000001100000000008200000000F4 -:105920000000000000000000000000000000000077 -:105930000000000011001120110084008400080004 -:105940002100808800208020042041901100030065 -:105950004000808800000000000000880000000077 -:1059600000000000000040000300000000000800EC -:1059700000000100002100000200000008000000FB -:10598000010000000021820000000000080000006B -:1059900000000000200000A0000000000003000044 -:1059A00000200008000000000000000000000800C7 -:1059B00000000000000000000000000000000400E3 -:1059C00004200080012005800520058020000000C3 -:1059D000A00300000004C008000408000003000049 -:1059E000000082000000020000000040044182002C -:1059F000000508210284000000A080000508008442 -:105A0000410008080084000800C0000000000000F9 -:105A1000000000000000C000051021000000000090 -:105A20000000000000000000000000000000000076 -:105A300000000000000000000000000000000088DE -:105A40008404830110200491842084898420A1008F -:105A50000000000000A003010500030000842108ED -:105A600000A021A0091000A00900200002A0000051 -:105A7000000000A00000000000000000000000087E -:105A800000080000000004210408040000000011C8 -:105A90000000000090000100000000000000002154 -:105AA00000210008000000000000000000000000CD -:105AB0000021000000000000000020000000900015 -:105AC0000000A0000480058009804105098205804E -:105AD0009000400540210004820000118200000077 -:105AE0000000000000090020000000000005000088 -:105AF00008000408080890400084008400A000C04A -:105B000000901108000000080090000000000090C4 -:105B100000000000009000002000000000000000D5 -:105B200000000082000000000040000000000000B3 -:105B3000000800000000000000000088410000880C -:105B4000008200900082C0208420402004A0042114 -:105B500084200002410000001188400003020088F8 -:105B60000000000000000000000000000000002015 -:105B70000000000000000004000000C00000000859 -:105B800000000084000000880010000000000000F9 -:105B900000000000010040000001C08508000088EE -:105BA000008800000000000000000000000000006D -:105BB00000000000000000000000000000000000E5 -:105BC00000000000C0C00090A008000000C0A0912C -:105BD00000000000000000000000000000010000C4 -:105BE000000000000000000000000000A1C0A1882B -:105BF0000284008800000000000000000080000017 -:105C00000000000004000000000000800000000010 -:105C10000000000000052005000500021140000200 -:105C200000C10008000000000000000000000000AB -:105C30000000000000000000000000000000000064 -:105C400000000000000080800880008000000091BB -:105C500080A1000500050000000004000000001104 -:105C6000000000050040000000000000000090005F -:105C700083008080000000000000000000000000A1 -:105C80000000000080000000000000000000000094 -:105C900000000000000000000300020040000002BD -:105CA0000009800480800000000000000000000067 -:105CB00000000000000000000000000000000000E4 -:105CC0000000000000000000000000008000808054 -:105CD0001180110005008311002000000040000029 -:105CE0000000000000400000000000000000000074 -:105CF0008800902100918300000000000000000057 -:105D0000080000000000C0000000000000000000CB -:105D10000000000000000000000000000100000082 -:105D20000800C000A09182C0000000000000000038 -:105D30000000000000000000000000000000000063 -:105D400000000000000000000000000000008400CF -:105D5000C090000201000000C1210000000000010D -:105D60000000000000000001000000000000000032 -:105D700000008900400084840982000000000000C7 -:105D8000000000000000000800C008000000000043 -:105D9000C000000000000000000000010001000140 -:105DA00000000208A1A0850082020000000000009F -:105DB00000000000000000000000000000000000E3 -:105DC00000000000000000000000000000010000D2 -:105DD000009100C040000040A19000C000000400FD -:105DE00000000000000000000000000000000001B2 -:105DF00000000001904000A1081008100000000001 -:105E00000000000000000000000000808000000092 -:105E1000000003000000000000000000002100025C -:105E2000002100031180C0800800108000000000E5 -:105E30000000000000000000000000000000000062 -:105E40000000000000000000000000000000002032 -:105E5000000200C000A0800421848589038900001D -:105E60008000000011000000110009000000004047 -:105E7000000400090020004000C0004100A0000014 -:105E80000000000000008000000000000000004052 -:105E9000000400000000000000000000000040219D -:105EA0000221210003200004000480000000000003 -:105EB00000000000000000000000000000000000E2 -:105EC00000000000000000000000000000000000D2 -:105ED00080000005808000008091808580804005E2 -:105EE00000000000000000000000000000000000B2 -:105EF0000000000000000000111089800200032053 -:105F00000000000000000000C00090000000000041 -:105F10000000000100000000000000000000000080 -:105F200000010100010001010000102008900000A4 -:105F30000000000000000000000000000000000061 -:105F40000000000000000000000000000000000051 -:105F500000009000000008080000C09120C0A0A030 -:105F60000000000000000000000000000000000031 -:105F700000000000000000000000040940C0C0A0B4 -:105F80009000000000000000000000000000000081 -:105F90000000814100E00700000000000000000058 -:105FA00000000000000000000000810000E0070089 -:105FB00000210000000000000000000000000000C0 -:105FC00000000000000000000000000000000000D1 -:105FD00000000000004200000700420000420000F4 -:105FE00007004100000000E000000000820000E027 -:105FF00000000000000000000000000000000000A1 -:10600000000041000000000000000000FFFFFF0052 -:10601000FFFFFF0000000000000000000000000083 -:1060200000000000000000000000000000AA00AA1C -:106030008080A8A800000000000000000000000010 -:106040000000000000000000000000000000000050 -:1060500000000000000000000F0F000000550000CD -:10606000000F0000000F0000000000000000000012 -:1060700000000000000000000000000000005F5F62 -:106080000A0A00FF17170000000000000000FFFFD1 -:10609000FF00FFFFFF000000000000000000000004 -:1060A000000000000000000000000000000000F000 -:1060B00000F08080A8A800000000000000000000A0 -:1060C00000000000000000000000000000000000D0 -:1060D000000000000000000000000F0F000000554D -:1060E0000000000F0000000F000000000000000092 -:1060F00000000000000000000000000000000000A0 -:10610000D782D78200FF17170000000000000000B0 -:10611000F0F0FFFF3C3C0000000000000000000029 -:10612000000000000000000000000000000000006F -:10613000C3C31717FFF0FF100000000000000000AD -:10614000000000000000000000000000000000004F -:1061500000000000000000000000F000000000004F -:10616000000000000000000000000000000000002F -:10617000000000000000000000000000000000001F -:10618000000000F00FFFC0C0CFCF000000000000F3 -:106190000000F0F0FFFF3C3C000000001010000089 -:1061A00000000000000000000000000000000000EF -:1061B000000000001717FF10FF1000000000000093 -:1061C00000000000000000000000000000000000CF -:1061D000000000000000000000000000F0000000CF -:1061E000FF000000FF000000555500000000000007 -:1061F000000000000000000000000000000000009F -:1062000000000000A3A3A3A3A0AFA0AF0000000064 -:10621000000000004082800000208A020061002E01 -:10622000800D00000000000000000000006100067A -:10623000000D00008561000E850D00A0000000002B -:10624000000000000000000000000000000000004E -:1062500000000000000000000000000000000363D8 -:10626000033E0C0D92C003E3033E0C0DC2C000615F -:106270000007000D000000610002800D00000061B9 -:106280000006000D000000610006001D0000000077 -:1062900000000000000000000000000000000000FE -:1062A00000000000000000000000000000000000EE -:1062B00000F30008000000000000000000000000E3 -:1062C00000000000000000000000000000000000CE -:1062D00000000000000000000000000000000000BE -:1062E000000000003F3FA0AF141414140030FF3032 -:1062F000000000000000000000000000000000009E -:10630000000000003C003CF00C0F0C00E8E8E8E85E -:10631000000000000000000000000000000000007D -:10632000000000000000000000000000000000006D -:10633000000000F30000000000000000000000006A -:10634000000000000000000000000000000000004D -:10635000000000000000000000000000000000003D -:106360000000000000003030A0AF0000000000304E -:10637000FF300000000000000000000000000000EE -:106380000000000000003C003CF00C0F0C00003C42 -:10639000C3FF00000000000000000000000000003B -:1063A00000000000000000000000000000000000ED -:1063B00000000C0000000000000A0F0F3F5F00000B -:1063C00000000000000000000000000000000000CD -:1063D00000000000000000000000000000000000BD -:1063E000000000000000000000000000FBFFFFFFB5 -:1063F000000000200000000000000000FFFF08086F -:10640000000000000000000000000000000000008C -:10641000C8C8CBCB00000000000000000000000056 -:10642000000000000000000000000000000000006C -:10643000000000000C0000000000000A0F0F3F0FDA -:10644000000000000000000000000000000000004C -:10645000000000000000000000000000000000003C -:106460000000000000000000000000000000FFFF2E -:10647000FFFF000000000000000000000000F7F730 -:10648000000000000000000000000000000000000C -:10649000000008080B0B00000000000000000000D6 -:1064A00000000000000000000000000000000000EC -:1064B00000000000000000000000000000000000DC -:1064C00000000000000000000000000000000000CC -:1064D00000000000000000000000000000000000BC -:1064E00000000000000000000000000000000000AC -:1064F000000000000000000000000000000000009C -:10650000000000000000000000000000000000008B -:10651000000000000000000000000000000000007B -:1065200000000000200000000000200020002000EB -:10653000000000000000000000002000100020000B -:106540000000000020000000880020002000000063 -:10655000040000000400000000002000000004030C -:1065600000030000000020002000008085804082A1 -:106570002080210000802000000002002000400058 -:10658000200400004000200084000000202088003B -:106590000000040000004000000004002000820011 -:1065A00082004000000200000000000000004002E5 -:1065B0000000000000400000000200400040000217 -:1065C0004000000000020000000000000040000445 -:1065D0000002000200000002000000004000400035 -:1065E00000000000000000000000800020024004C5 -:1065F000C0058002400000020000000010000900F9 -:10660000000009000000000000000000400200003F -:106610004020000000020000000000400400004094 -:1066200005000000900000000000030000000000D2 -:106630000010031000000000000002000000000035 -:106640001000000002000000000082008200000034 -:1066500002000040000000000200021000000000E4 -:1066600002100210000000000000000021100100D4 -:1066700021092100010002090900004002009041A7 -:106680000800821040000000080082100200020092 -:1066900002000040004000000000080002008200EC -:1066A00002001009000000C000000200408800C085 -:1066B000040002C040000000000003880400000045 -:1066C00000000800000004000000000000080000B6 -:1066D000000000000000000004000000048400002E -:1066E0000000000800000000000400000000A008F6 -:1066F00020000800200020000000C008000005085D -:106700000000000002118000000085000000030866 -:106710000000008200000000000000840000090466 -:106720000000000000000000A009000300050005B3 -:106730000000108000004003004000000000000541 -:106740000000000004030000000000000000000042 -:106750000000000000000000000000000000000039 -:106760000000000002000000000000000000000027 -:106770000102C0000800080000008400000088003A -:10678000A000000500002000000000000000100430 -:106790000010000000009000400000009000000089 -:1067A0000400000000000000900041000000000014 -:1067B00000000000001000000000000100000000C8 -:1067C0000000080000004000000000000000000081 -:1067D00000000000008400000084000000000000B1 -:1067E0000000000000000000000000000088000021 -:1067F000000004000000000800001100210041001A -:10680000050000000000050000000000000000007E -:10681000000002010000000000004000080000002D -:106820000000000000C000A0008211000000000372 -:1068300000050011000000002041000400110002CA -:1068400000040004A000000000410000000000411E -:1068500000000009C0200004001100000000001129 -:10686000000000048200C0110841080400008800F4 -:106870008800000089A0000009119009A01188116A -:1068800088119011881120090000040900020002FB -:1068900000020000081100000000000000000000DD -:1068A0000000000000100800000008400411000073 -:1068B000009000900000000009C0208400C000008B -:1068C00000000000000000000000030000000000C5 -:1068D0000000040000000000000020000000000094 -:1068E0002000000000000000000000000000000088 -:1068F00000040900000020110200200240400900AD -:106900000088008800022188000009900000000033 -:106910000000000000000000000000000000000473 -:10692000000000000000090000000000000000005E -:10693000A0009080000000000041004000000041E5 -:1069400000000000004100000000000008000000FE -:106950000000C0410000000000000000000008002E -:1069600000000000C00000000000000000009000D7 -:1069700000000000900000008400020000080800F1 -:1069800008000000C00008000000A0008211820082 -:1069900000100000000000000000000000000000E7 -:1069A000000000000000080000000000C00004001B -:1069B00000000000051000000000000000010000C1 -:1069C0000084000000000000000000000020000023 -:1069D00000000008090002000090000000200000F4 -:1069E00000000000000000000000000000000000A7 -:1069F00000000000000000200000000088000040AF -:106A000000008000100000008000008400000000F2 -:106A10000300000100002100000000000010000041 -:106A200020000000020400A00020038400000020D9 -:106A30000400080020000000080088080000000092 -:106A400000410004081100110004000800000000CB -:106A50000000001100000000000000000000000025 -:106A60000000000000000008000000080000000016 -:106A70000000000000008800000000000480C00446 -:106A8000000090008800901140110002C011900495 -:106A9000841182004002000200000010000000008B -:106AA00000200000000000000000000000000000C6 -:106AB00000000000402100002082A00240C009C068 -:106AC00009C0000020C00000000000C0000000005D -:106AD0000000000000000000000000000020000096 -:106AE0000020000000040000200000000000000062 -:106AF00000000000000000001100000000008220E3 -:106B000000001100030440C011000000000200005A -:106B10000000000003000802000000000001000067 -:106B20000300000000002000000000000000000042 -:106B3000000000000000000010C00190C010C00460 -:106B4000C1080420200204820000000000000000B0 -:106B50000000000000000000000000000000000035 -:106B60000000000000000000000000000000000025 -:106B70000000000000000000000000000000000015 -:106B800000000904042090C00882C1412085001142 -:106B9000C082020001000800200040A040020082E4 -:106BA00040020000000000000000000000000000A3 -:106BB0000000000000000000000000004000008015 -:106BC0000080C08041800000808000000000000044 -:106BD00000000000000000000000000000000000B5 -:106BE00000000000000000000000000000000000A5 -:106BF0000000000000000000000000001000000085 -:106C000003000000C080008080408080200280025D -:106C100000080082800010000000000000000080DA -:106C20000080008000000000000000000000000064 -:106C30000000000000000000000000000000809044 -:106C4000801180808004000980A100800000000085 -:106C50000000000000000000000000000000000034 -:106C60000000000000000000000000000000000024 -:106C70000000000000000000000000000000800094 -:106C8000800000000080114080044083800000C02C -:106C90008040804080A00000000000000000000054 -:106CA0000002800000000000000000000000000062 -:106CB0000000000000000000000000000000C00014 -:106CC00040042088080202000440400984020000B9 -:106CD00000000000000000000000000000000000B4 -:106CE00000000000000000000000000000000000A4 -:106CF0000000000000000000000000000000000094 -:106D0000080020000000001089000890A0082090D2 -:106D1000A0094020048304100000000000000000CF -:106D2000820040210482C0900000000000000000AA -:106D30000000000000000000000000000000000053 -:106D4000C08900110884C0098821042108880485AD -:106D50000000000000000000000000000000000033 -:106D60000000000000000000000000000000000023 -:106D70000000000000000000000000000000000013 -:106D8000000100000000000000008902410820A06E -:106D900004C0C0A001C00304090400C00040844036 -:106DA00000020582004008040420000000000000EA -:106DB00000000000000000000000000000000000D3 -:106DC0000000821000890091848410A000900005CA -:106DD00004050000000000000000000000000000AA -:106DE00000000000000000000000000000000000A3 -:106DF0000000000000000000000000000000000093 -:106E0000000000010000000000001000410011809F -:106E100000404000910009004180C08000030085CF -:106E200000890085C1000000008080000000000093 -:106E30000000000000000000000000000000000052 -:106E400000000000001100848080000080040082A7 -:106E50000040800000000000000000000000000072 -:106E60000000000000000000000000000000000022 -:106E70000000000000000000000000000000000012 -:106E800000000000000100040009000000000009EB -:106E9000408200001100102020091080100000081E -:106EA0000000000000000000800900000000000059 -:106EB00000000000000000000000000000000000D2 -:106EC00000000000000084001020040802000400FC -:106ED000C0838405100000000000000000000000D6 -:106EE00000000000000000000000000000000000A2 -:106EF0000000000000000000000000000000000092 -:106F000000000000000000010001000100880000F6 -:106F1000A000902182048300890190A0414082005A -:106F2000000000000000000004000440A0408200B7 -:106F30000000000000000000000000000000000051 -:106F40000000000000000000000000000700428276 -:106F500000000000070084000000000000000000A6 -:106F60000000000000000000000000000000000021 -:106F70000000000000000000000000000000000011 -:106F800000000000000000000000818100E0070018 -:106F90000000000000E007004800000000000700BB -:106FA0008406000000000000000000000000070050 -:106FB0004800000000000000000000000000000089 -:106FC00000000000000000000000000000000000C1 -:106FD00000000000000000000000000000000000B1 -:106FE00000000000000000000000000000000000A1 -:106FF0000000000000000000000000000000000091 -:107000000000000000000000000000000000000080 -:107010000000000000000000000000000000000070 -:107020000000000000000000F6F6BD240000000093 -:107030000000000000000000000000000000000050 -:107040000000000000000000000000000000000040 -:107050000000000000000000000000000000000030 -:107060000000000000000000000000000000000020 -:107070000000000000000000000000000000000010 -:107080000000000000000000000000000000000000 -:1070900000000000000000000000000000000000F0 -:1070A000000000000000000000009090BD240000DF -:1070B00000000000000000000000000000000000D0 -:1070C00000000000000000000000000000000210AE -:1070D0002000008810840210200000881084000026 -:1070E00000000000000000000000000000000000A0 -:1070F0000000000000000000000000000000000090 -:10710000000000000000000000000000000000007F -:107110000000000000000000021020000088108421 -:107120000210200000881084000000000000000011 -:107130000210200000881084000000000000000001 -:10714000000000000000000000000000000000003F -:10715000000000000000000000000000000000002F -:10716000000000000000000000000000000000001F -:10717000000000000000000000000000000000000F -:1071800000000000000000000000000000000000FF -:10719000000000000000303030300000000000002F -:1071A00000000000000000000000000000000000DF -:1071B00000000000000000000000000000000000CF -:1071C00000000000000000000000000000000000BF -:1071D00000000000000000000000000000000000AF -:1071E000000000000000000000000000000000009F -:1071F000000000000000000000000000000000008F -:10720000000000000000000000000000000000007E -:10721000000000000000000000000000000000006E -:10722000000000000000000000000000000000005E -:10723000000000000000000000000000000000004E -:10724000000000000000000000000000000000003E -:107250000000000000610006000D00010061000652 -:10726000000D000100000000001000000000000000 -:10727000000000000000000000000000000000000E -:1072800000000000000000000000000000000000FE -:107290000000000000000061002F800D00A10061CF -:1072A0000006001D000000610006000D00010061E5 -:1072B0000006000D000000000000000000000000BB -:1072C00000000000000000000000000000000000BE -:1072D00000000000000000000000EB41EB41000056 -:1072E00000005F50030300000000000000000000E9 -:1072F000000000000000000000000000000000008E -:10730000000000000000000000000000000000007D -:10731000000000000000000000000000000000006D -:107320003C003C0000AA00AACF4F0F4F0000000015 -:1073300000000000FFF00F0000000000000000004F -:10734000000000000000000000000000000000003D -:10735000000000000000000000000000AFAF0505C5 -:10736000000000005F50F3F3000000000000000088 -:10737000000000000000000000000000000000000D -:1073800000000000000000000000000000000000FD -:1073900000000000000000000000000000000000ED -:1073A00000003C003C0000AA00AACF0F0F0F000015 -:1073B0000000000000005353535300000000000081 -:1073C00000000000000000000000000000000000BD -:1073D00000000000000000000000000000000000AD -:1073E000000000000000000000000000000000009D -:1073F000000000000000000000000000000000008D -:10740000000000000000000000000000000000007C -:10741000000000000000000000000000000000006C -:107420000000000005050505003C003C00C3F0AA73 -:10743000000000000000000000000000000000004C -:10744000000000000000000000000000000000003C -:10745000000000000000000000000000000000002C -:10746000000000000000000000000000000000001C -:10747000000000000000000000000000000000000C -:1074800000000000000000000000000000000000FC -:1074900000000000000000000000000000000000EC -:1074A00000000000000005050505003C003CFFC38E -:1074B000F0AA000000000000000000000000000032 -:1074C00000000000000000000000000000000000BC -:1074D00000000000000000000000000000000000AC -:1074E000000000000000200000001000200000004C -:1074F0000000000400000000000000000000000088 -:1075000088000000000000000000000020000000D3 -:1075100000000000000340000000C0000000000266 -:107520000000000400000000000000000000000057 -:107530000000000000000000200004000000000027 -:10754000010085040100010040000011010000005D -:107550000000000000000000200000000000C0004B -:107560000000000000000000000000020000000019 -:1075700000000000000010001000000000000000EB -:1075800000000000000000000040000000000002B9 -:1075900000000000000400000000000000002100C6 -:1075A000000040000000000000000000000000009B -:1075B00004000000000000000000040000000000C3 -:1075C0000008200020002000200010000000080219 -:1075D00000000000000000000000000000000000AB -:1075E0000000000000000080028000000000000099 -:1075F0000220000000000010001000000000001039 -:107600000210000000000000020000000200000064 -:1076100000000000000084000000000000000000E6 -:107620000800000082009000000000100000000030 -:10763000020802080021841002100210080008410C -:107640000208000000000000000000000000000030 -:107650000808104002100210100008400000080046 -:107660000208084000000200114000400000000035 -:1076700000000300000002000240000000000000C3 -:1076800004000000000002000300000000000008E9 -:10769000020000C004000000000000000000020022 -:1076A00002001000000000000000110000000000B7 -:1076B000008800000300020000000000000000003D -:1076C0000000000009200000000000000010000081 -:1076D0000000801000100000000000000000020008 -:1076E000020000100484028000800280020000007A -:1076F000000000000000008000000000000000000A -:107700004000000000004000400000004000000079 -:10771000000004000000400004000400000000001D -:107720000000000000000000000000004000000019 -:107730000000900040000000000000000000000079 -:10774000000000000000000800000000000004002D -:107750000000000000000000000010000000820097 -:10776000040000000000000080400040854080C010 -:1077700000840084000000000040000000000000C1 -:1077800000000000000000000000000000000000F9 -:1077900000000000000000000000000000000000E9 -:1077A0000000000000004100000000000000110087 -:1077B000000804000500400003A0000003000000D2 -:1077C000210000000390000021840000000400005C -:1077D00000000000000000000000000000080000A1 -:1077E000000000000800000000000011004100003F -:1077F0000000000000050000001000004000000034 -:107800000000000000000000002000110000000047 -:10781000000000000008000200000000000000401E -:107820000000004100000000840000000005080086 -:107830000041000000098410004108000010000011 -:10784000A002000900000009080900400000000033 -:10785000000010000000000000090000000000000F -:10786000000000000000000000004000009008C080 -:10787000009000C00088000000880084000400021E -:10788000000200900000000000000800000003005B -:107890004000000009000000080000000000008413 -:1078A00000100000000000000000000000000900BF -:1078B00008001100110000881100000000000010F5 -:1078C00021C04002119000000000000000000000F4 -:1078D0000040000000000000000000400000000028 -:1078E0000000020000000000000000000000000096 -:1078F0000000000000000000000000000000000088 -:107900000000000000000000000000000000000077 -:107910000000000000000000000000000000A000C7 -:107920000000000000000000000000000000000057 -:107930000000000000000000000000000000000047 -:1079400000000000A0000000000000000000000097 -:1079500000000000400000000000000000000000E7 -:107960000000000000000000000000000000000017 -:10797000110000C000C005C0210000080000000880 -:1079800000000000000000000000000000000000F7 -:1079900004000000000000000000000000001000D3 -:1079A000000000000000000000000000000000C017 -:1079B00000000084002000000010110021C005001C -:1079C00000C010000384100000901000410000006F -:1079D00000000000000003000000000000000004A0 -:1079E000000000000088000000000000000000000F -:1079F00000202011000000000040000000000000F6 -:107A0000000000040002000000110000000000005F -:107A1000000000000000000000000800000000005E -:107A20000000000000000000000000000002000054 -:107A30000000000000000800000000000041840079 -:107A40008400080000000000000040000000000466 -:107A500000000000000000000000004100000000E5 -:107A60000000000000000000000000000000000016 -:107A70000000000000900000000000C1099020906C -:107A800020901188000000000000000000000000AD -:107A900000000000000000000000000000000008DE -:107AA00040902004008800842004000000000002B0 -:107AB0000000000000000000000000000000009036 -:107AC00040C000884090000000000020098800901D -:107AD00000000000000200000000000000000000A4 -:107AE000000000080000000000000000000000008E -:107AF00000000000000400000040000000840000BE -:107B00000000000000000000000000000000000075 -:107B10000000000000000000000000000000000065 -:107B20000000000000000000000000000000000055 -:107B30000000000000000000000000000000000045 -:107B40000000000000000000000000000000000035 -:107B50000000000000000000000000000100000024 -:107B6000C000000000002000000000000000000035 -:107B700000000000000000004000000000000000C5 -:107B800000000000000000000000000000000000F5 -:107B900000000000000000000000000000000000E5 -:107BA00000000000000000000000000000000000D5 -:107BB00000000000000000000000000000000000C5 -:107BC00000000000000000000000000000000000B5 -:107BD00000000000000000000000000000000400A1 -:107BE0000000800000000000000000000000000015 -:107BF0000000000000000000000000000021000064 -:107C000000800000000000000000000000000000F4 -:107C10000000000000000000000000000000000064 -:107C20000000000000000000000000000000000054 -:107C30000000000000000000000000000000000044 -:107C40000000000000000000000000000000000034 -:107C5000000000000000000000000000000800001C -:107C6000000800000000000000000000000000000C -:107C70000000000000000000000000000000A04024 -:107C8000000000C000000000000000000000000034 -:107C900000000000000000000000000000000000E4 -:107CA00000000000000000000000000000000000D4 -:107CB00000000000000000000000000000000000C4 -:107CC00000000000000000000000000000000000B4 -:107CD00000000000000000000000000000000001A3 -:107CE0000000000100000000000000000000000093 -:107CF000000000000000000000000000000000A0E4 -:107D00000000840001C0000000000000000000002E -:107D10000000000000000000000000000000000063 -:107D20000000000000000000000000000000000053 -:107D30000000000000000000000000000000000043 -:107D40000000000000000000000000000000000033 -:107D50000000000000000000000000000000000023 -:107D6000000010000000000000020008004000A019 -:107D70000000000000000000000000000000000003 -:107D800040000000800040000000000000000000F3 -:107D900000000000000000000000000000000000E3 -:107DA00000000000000000000000000000000000D3 -:107DB00000000000000000000000000000000000C3 -:107DC00000000000000000000000000000000000B3 -:107DD00000000000000000000000000000000000A3 -:107DE0000000000000000000100000800000000003 -:107DF0000000000000000000000000000000000083 -:107E00000000000000000000000000000000000072 -:107E10000000000000000000000000000000000062 -:107E20000000000000000000000000000000000052 -:107E30000000000000000000000000000000000042 -:107E40000000000000000000000000000000000032 -:107E50000000000000000000000000000000000022 -:107E60000000000000000000000000000000000012 -:107E70000000000000000000000000000000000002 -:107E800000000000000000A08400000000000000CE -:107E900000000000000000000000000000000000E2 -:107EA00000000000000000000000000000000000D2 -:107EB00000000000000000000000000000000000C2 -:107EC00000000000000000000000000000000000B2 -:107ED00000000000000000000000000000000000A2 -:107EE0000000000000000000000000000000000092 -:107EF0000000000000000000000000000000000082 -:107F0000000000000000000000000000000A000067 -:107F10000000000000000000000000000000000061 -:107F20000000000000000000000000000000000051 -:107F30000000000000000000000000000000000041 -:107F40000000000000000000000000000000000031 -:107F50000000000000000000000000000000000021 -:107F60000000000000000000000000E00000000031 -:107F700000000000000050000000000000000000B1 -:107F80000000000000000000F0F0F0F0C3C33C3C33 -:107F900000000000000000000000000000000000E1 -:107FA00000000000000000000000000000000000D1 -:107FB00000000000000000000000000000000000C1 -:107FC00000000000000000000000000000000000B1 -:107FD00000000000000000000000000000000000A1 -:107FE0000000000000000000000000000000000091 -:107FF000000000000000F4F4F4F5000000000000B0 -:10800000000000000000000000000F0F0F0FC3C3AE -:108010003C3C0000000000000000000000000000E8 -:108020000000000000000000000000000000000050 -:108030000000000000000000000000000000000040 -:108040000000000000000000000000000000000030 -:108050000000000000000000000000000000000020 -:108060000000000000000000000000000000000010 -:108070000000000000000000F0F0F0F1000000003F -:108080000000000000000000000000003CC33CC3F2 -:10809000A5A5A5A50000000000000000000000004C -:1080A00000000000000000000000000000000000D0 -:1080B00000000000000000000000000000000000C0 -:1080C00000000000000000000000000000000000B0 -:1080D00000000000000000000000000000000000A0 -:1080E0000000000000000000000000000000000090 -:1080F0000000000000000000000000000000000080 -:1081000000000000000000000000000000003CC370 -:108110003CC3A5A5A5A500000000000000000000CC -:10812000000000000000000000000000000000004F -:10813000000000000000000000000000000000003F -:10814000000000000000000000000000000000002F -:10815000000000000000000000000000000000001F -:10816000000000000000000000000000000000000F -:1081700000000000000000000000000000000000FF -:1081800000000000000000000000000000000000EF -:1081900040008000002008020000000000000000F5 -:1081A00000000000001000000000000000000000BF -:1081B00000000000000000000000000000000000BF -:1081C00000000000000000000000000000000000AF -:1081D000000000000000000000000000000000009F -:1081E000000000000000000000000000000000008F -:1081F000000000610007000D00000000000000000A -:10820000000000000000000000000000000000006E -:10821000000000000000000000000000000000005E -:10822000000000000000000000000000000000004E -:10823000000000000000000000000000000000003E -:10824000000000000000000000000000000000002E -:10825000000000000000000000000000000000001E -:10826000000000000000000000000000000000000E -:1082700000000000000000000000000000000000FE -:1082800000000000000000000000000000000000EE -:1082900000000000000000000000000000000000DE -:1082A00000000000000000000000000000000000CE -:1082B00000000000000000000000000000000000BE -:1082C00000000000000000000000000000000000AE -:1082D000000000000000000000000000000000009E -:1082E000000000000000000000000000000000008E -:1082F000000000000000000000000000000000007E -:10830000000000000000000000000000000000006D -:10831000000000000000000000000000000000005D -:10832000000000000000000000000000000000004D -:10833000000000000000000000000000000000003D -:10834000000000000000000000000000000000002D -:10835000000000000000000000000000000000001D -:10836000000000000000000000000000000000000D -:1083700000000000000000000000000000000000FD -:1083800000000000000000000000000000000000ED -:1083900000000000000000000000000000000000DD -:1083A00000000000000000000000000000000000CD -:1083B00000000000000000000000000000000000BD -:1083C00000000000000000000000000000000000AD -:1083D000000000000000000000000000000000009D -:1083E000000000000000000000000000000000008D -:1083F000000000000000000000000000000000007D -:10840000000000000000000000000000000000006C -:108410000000000000000000000000000200040056 -:1084200000000200020004002000000000004000E4 -:1084300010002000880000002000000020002080A4 -:108440000000200020002000000004800003000045 -:108450000400208002000110200000030000200022 -:108460002000100020001002200000000005000085 -:10847000880040002000880284002000C000200006 -:10848000200004002000020020008804C000040036 -:1084900020040000200088008400208400000000E8 -:1084A0001002000000024000400410000000000024 -:1084B0000002000200000000400000000000000276 -:1084C00000100000000040004000000000400000DC -:1084D00000008000001000000801000000004000C3 -:1084E000000000000000000000004100000000004B -:1084F00040000200000004000000400000000000F6 -:108500000000400000401000000040000002000099 -:108510000000008200000002400040000004000053 -:108520000000010000000000000002000200000046 -:108530000000000004000000200004000010000003 -:108540000000000000100000020090100800080465 -:1085500008000805011000030841010001050000A2 -:108560000000000000108200020002000010010064 -:10857000000000000800040002000000821000104B -:1085800000000200000902000200000000000000DC -:10859000000000000040080002100000840082007B -:1085A00000000008080004000000000000000000B7 -:1085B000004000000400000002000200004004002F -:1085C000400002900400040000000084000020002D -:1085D000820182008000080000008010080008006E -:1085E000000000000400000004000000050000007E -:1085F000400020C005C00000A000000002000000F4 -:10860000040003000400000800000000090004004A -:108610000000000000000000020800080000000048 -:108620000008000000000000A0000005004100411B -:10863000824100000000000000000000000008006F -:10864000000000000000000000000000000000002A -:108650000000000500000000000000030010000002 -:1086600000210000000000000008000500000000DC -:10867000000000050000000000000008000040208D -:108680000800000800080000000008210008000899 -:10869000001004000000100000000021000000088D -:1086A00000080000000000000000000000000000C2 -:1086B00000000000000000000000000000000000BA -:1086C00000000000000000000000000000000000AA -:1086D0000000000000000000410008000000000051 -:1086E00000000084000000000400040000000000FE -:1086F000000000000000000000000000000000007A -:1087000000008000000000000000000003000000E6 -:1087100000A00000000800000000000008000000A9 -:10872000000000000000001101040000010500002D -:10873000081100100011004000000000004000007F -:10874000080000000000000500040005000500040A -:1087500000050009882101050085080201210000AB -:1087600000000011820000000041000082000000B3 -:1087700000050811200420040004000400098800FA -:1087800000200820000082400000000000000000DF -:1087900000000800000000110000000000001000B0 -:1087A00000110800000000000000080000000800A0 -:1087B00000880088008500C0020000000000000062 -:1087C000000004000800000000A0000000000000FD -:1087D000000040C01100090004082020000020A073 -:1087E00000840800000000000000000000000000FD -:1087F00000000010400040002100000000820084C2 -:10880000092000000000000021010200000000001B -:1088100003080000000000000990000000000000B4 -:1088200020000000000008000000000000000041DF -:1088300000000041000800000000000000000000EF -:108840000000000000000000000040000000A00048 -:10885000000000008200040010000008200000005A -:108860000005000000000000000000000000000003 -:1088700000000005000000000000000000000000F3 -:10888000A00000000021000000030100000000081B -:1088900000000000000000000000000000000000D8 -:1088A00000000000000000000000000000000000C8 -:1088B00000000000000000000000000000000000B8 -:1088C00000000000000000000000000000000000A8 -:1088D0000000000000000000000000000000800018 -:1088E0000000000000000000000000000000002068 -:1088F0000000002000000000002000000000000038 -:108900000000000000000008210000000800000036 -:1089100000000084000000000000000000000000D3 -:108920000000000200000000000000000000001134 -:10893000200500042000000901110009008900043D -:108940000000000400000000000002000000000021 -:1089500000000400000000A182210002089100082C -:1089600000080000002100050004000400210000B0 -:10897000001000000000202100000200210000047F -:10898000001120049000200400210021002100009B -:10899000000400040000002000000000002100008E -:1089A0000000000000000000000082004000000005 -:1089B00000000082000000000000080000042010F9 -:1089C0000000200000000004000000080204020073 -:1089D00010A0008400002002004003820920804093 -:1089E0004000000040002100008420000000000042 -:1089F000000000100000030002001100800208C007 -:108A000002C00000210021880204000000C0040010 -:108A10000000000000000000200000000000000036 -:108A200000000000000000000020000010002000F6 -:108A30000000C01084C0008284104108002000C0E3 -:108A400004C0000000000000000000000000000062 -:108A50000000000000000000000009020220008465 -:108A600002820808408801A010840008009000A03D -:108A70000890000000000000000000004189008311 -:108A8000000408400202909000A0101040C00402B0 -:108A900000820482000000000000000000000000CE -:108AA00000000000000000000000000000000000C6 -:108AB000010000000080000000800080C080008075 -:108AC0000000800000000000000000000000000026 -:108AD000000000000000000000000000C000008056 -:108AE000000000808003850340800020008000009B -:108AF0000080800000000000000000000000A002D4 -:108B000010040008800800008080008000008000C1 -:108B10008080008080000000000000000000000055 -:108B20000000000000000000000000000000000045 -:108B30000000020000008000004100110000000061 -:108B4000800400C0000000000000000000000000E1 -:108B50000000000000000000000000000000800095 -:108B6000800300828000800005A0809104008000C6 -:108B700000008080000000000000000000000000F5 -:108B80008200C0A110C00200000000008000800030 -:108B90008000800900C0000000000000000000000C -:108BA00000000000000000000000000000000000C5 -:108BB000000000000000000008008408C0880408CD -:108BC000A0000490A0098420000000000000000024 -:108BD0000000000000000000000000000000000095 -:108BE00040000808A0040808088200C1A0A101886C -:108BF00008000000A0A0000000000000000000002D -:108C000000000900098284C1859000009000820064 -:108C10009000080004824005409000000000000021 -:108C20000000000000000000000000000000000044 -:108C30000000000000000000000090080084880888 -:108C4000081089A0000408A0A08400000000000013 -:108C50000000000000000000000000020008008882 -:108C600000001120020802A0880808000108C002C4 -:108C7000C000100800840088880000010000000087 -:108C800000000000A00900080185048440080008D5 -:108C90008490021085080004084084400000000011 -:108CA00000000000000000000000000000000000C4 -:108CB0000000000000000000000000002080000014 -:108CC00000808000410000800000000000000000E3 -:108CD0000000000000000000000000000000000094 -:108CE00000000000C180008080000080A003048399 -:108CF0008009030000800000000000000001000067 -:108D000000000000000020A102A1202104028080B8 -:108D10000080000000804180008000000000000012 -:108D20000000000000000000000000000000000043 -:108D3000000000000000000000000000100000041F -:108D4000808280000000000000020000000000009F -:108D50000000000000000000000000000000000013 -:108D6000000000000000000000840000000083807C -:108D7000054002800040800000000000000000016B -:108D80000000000000000000008400040000000853 -:108D9000000000800000000000040004008080004B -:108DA00000000000000000000000000000000000C3 -:108DB00000000000000000000000000000000000B3 -:108DC0008800200904840400A00004C10484040075 -:108DD0000000000000000000000000000000000093 -:108DE0000000000000000000A000821182C0C0004E -:108DF00008021001099084010800000000088400A6 -:108E00000001000000000000000088C082C004C013 -:108E1000C000000000C000840000200120C082408B -:108E2000080000000000000000000000000000003A -:108E30000000000000000000000000000000000032 -:108E40000000000000000700000000000000070014 -:108E500048000000000000000000000000000000CA -:108E600000000000000000000000000000000700FB -:108E70004800000000E0070084110000000000002E -:108E800000000000000000000000000000000000E2 -:108E90000700502100000000070042000000000011 -:108EA0000700480000000000000000000000000073 -:108EB000000000000000000000000000000000E0D2 -:108EC00000000000000000000000000000000000A2 -:108ED0000000000000000000000000000000000092 -:108EE0000000000000000000F3F0F3F000000000BC -:108EF000000000006666FF766066606666667E7EDD -:108F00003C0C3C0C000000000000000000000000D1 -:108F100000000000000000000000000067010000E9 -:108F20000000000000000000000000000000000041 -:108F30000000000000000000000000000000000031 -:108F40000000000000000000000000000000000021 -:108F50000000000000000000000000000000000011 -:108F600000000000000000000000F3F0F3F000003B -:108F70000000000000006666767600060006666661 -:108F80007E7E300030000000000000000000000085 -:108F90000000000000000000000000009900FF0039 -:108FA00000000000000000000000000000000000C1 -:108FB00000000000000000000000000000000000B1 -:108FC0000000000000000000021020000088108453 -:108FD0000210200000881084000000000000000043 -:108FE0000000000000000000000000000000000081 -:108FF0000210200000881084000000000000000023 -:109000000000000000000000000000000000000060 -:109010000000021020000088100400000000000082 -:1090200000000210200000881084000000000000F2 -:109030000000000000000000000000000000000030 -:109040000000000000000000000000000000000020 -:109050000000000000000000000000000000000010 -:109060000000000000000000000000000000000000 -:10907000000000000000000000000F0F0F0FC3FFF2 -:10908000C3FF3F7F0F0FC3FFC3FF000000000000BE -:109090000000000000000000000000001E1E060688 -:1090A00000060000000000000000000000000000BA -:1090B00000000000000000000000000000000000B0 -:1090C00000000000000000000000000000000000A0 -:1090D0000000000000000000000000000000000090 -:1090E0000000000000000000000000000000000080 -:1090F0000000000000000000000000000F6F3F7F34 -:1091000000FF00FF0F6F0F0F00FF00FF00000000C7 -:10911000000000000000000000000000000000FF50 -:1091200000FF000066660000000000000000000074 -:10913000000000000000000000000000000000002F -:10914000000000000000000000000000000000001F -:10915000000000000000000000000000000000000F -:1091600000000000000000000000000000000000FF -:109170000000000000000000400000100000056139 -:109180000A09051100A00000000000000000000016 -:10919000000000000000000000610006000D00015A -:1091A000000000000000000000004000000000007F -:1091B00000000000000000000000000000000000AF -:1091C000000000000000000000610007000D00002A -:1091D000000000000000000000000000000000008F -:1091E000000000000000000000000000000000007F -:1091F000000000000000000000000000000000006F -:109200005F0F550030FF30FF00000000000000003D -:1092100000000000000000000000000000000CFC46 -:109220000CFC000000000000000000000000000036 -:10923000000000000000000000000000000000002E -:10924000000000000000000000000000000000001E -:10925000000000000000000000000000000000000E -:1092600000000000000000000000000000000000FE -:1092700000000000000000000000000000000000EE -:1092800000005F0F5500303030300000000000005B -:1092900000000000000000000000000000000000CE -:1092A000FFFF0000000000000000000000000000C0 -:1092B00000000000000000000000000000000000AE -:1092C000000000000000000000000000000000009E -:1092D000000000000000000000000000000000008E -:1092E000000000000000000000000000000000007E -:1092F000000000000000000000000000000000006E -:10930000000000007D553C00AAAAFAFA0000000007 -:10931000000000000000000000000000000000FF4E -:10932000AAAA3F3F03030000000000000000000065 -:10933000000000000000000000000000000000002D -:10934000000000000000000000000000000000001D -:10935000000000000000000000000000000000000D -:1093600000000000000000000000000000000000FD -:1093700000000000000000000000000000000000ED -:109380000000000000007D553C000000F0F00000EF -:1093900000000000000000000000000000000000CD -:1093A000C3C3F0F0D714D714000000000000000081 -:1093B00000000000000000000000000000000000AD -:1093C000000000000000000000000000000000009D -:1093D000000000000000000000000000000000008D -:1093E000000000004000000000000000000000003D -:1093F0000080000000000000008084000084000065 -:109400000000000000000000000000000000C0009C -:10941000C00000004080C000000300808480400342 -:109420000080000082008800000082000008040024 -:10943000200000000000000000000080110000007B -:10944000A000400020000000C000C0008882200072 -:10945000010000000000880000000002000000027F -:1094600000000000000000020000000000000000FA -:109470000000001010000020414000100002001009 -:109480000000400000400002008440000002000094 -:109490000002008200828002000000004002000200 -:1094A000C0C00002029000000000000000020002A4 -:1094B0000004100020000000000000020020044012 -:1094C00000000004004000000000000000404010C8 -:1094D00040040802000000400004400200000009AF -:1094E00000100010000500004010082000000200DD -:1094F000002000000000020000088220000004108C -:10950000041008000000900002050000000900009F -:1095100000200800A1004003100009020000050817 -:109520000110080301100000000904090400820072 -:109530000800040003080000000020410208084061 -:109540000800000002100008000800024010020499 -:1095500002400000020000000000001000100000A7 -:10956000000000000000000000008208030000006E -:1095700004000000020000000000000000000000E5 -:10958000000100018200000002C0410800880000C4 -:1095900004000000000040008000041040010000B2 -:1095A00040004000000040000000040000100000E7 -:1095B00002008000000040000000000000100404D1 -:1095C0000008410200000500000020000011800892 -:1095D00000008005000000080000000000880088EE -:1095E0000000000000000000000000000000000873 -:1095F000000000000000000000411000000000001A -:10960000880084000000C00000000000000000008E -:1096100040410000000000000000000000828808B7 -:109620000000000000008400000000050000A00809 -:109630000008000000000000000000000000000022 -:1096400000000000000008000000000000004000D2 -:1096500040000000000000000003000000000000C7 -:10966000000000C000000000050000000000000035 -:1096700000080000000000000000000000000000E2 -:1096800000000000000000000000110000000000C9 -:109690000300000000000000000000000084002122 -:1096A0000000000011100000040000000000000095 -:1096B000000000000002210421000000040000005E -:1096C0000008000000000000000000001100000081 -:1096D000800000000000000000000000000000000A -:1096E0000020000000000000000000000000080052 -:1096F0000800884000110000000000000000000089 -:109700000000084004000040000090000009001123 -:10971000082082110000000000040000000000008A -:109720008408004000000000C000000900000000A4 -:109730000000000900000004820000050000000095 -:109740000009004008020000080000090141400033 -:109750000000080000400000014000000800000078 -:1097600000090000000000000000008400C0008824 -:10977000000400880090000000000000000040008D -:10978000110011000390800000000000008409C057 -:109790000000000005000000000200880002408474 -:1097A0000084008400000000000408900004000011 -:1097B00020000000000005000088030200000004F3 -:1097C00000000004099000100000030000000400E5 -:1097D0000000000000000020080008000000000059 -:1097E00000820000004000000000000000000000B7 -:1097F0000000000000000000000000000000000069 -:1098000008000000820084000000000420000080A6 -:10981000000000000000820000000000C000000006 -:10982000900000008200880000000000000000009E -:109830000000840000000000000000008200001111 -:109840000000000000004000004100000000040093 -:109850008400000000000000000000000000002064 -:1098600000000000000000080000000000C000C070 -:10987000119010000008000000000000000000002F -:109880000000000000000000000000000001800057 -:10989000002000C0000000000000000000000004E4 -:1098A000008405880000050000A000000000000002 -:1098B0000000000000000010050000004000400013 -:1098C0000000000000000000050000000000000093 -:1098D0000000000000000000000000000000000088 -:1098E0000001000000000000000000000004024130 -:1098F000004100000000000200090011000000000B -:1099000000000000080082008200840000000000C7 -:109910000020000000000004000000210000000002 -:109920000000820000000080000010820000004162 -:109930000008400200000000200088000000000332 -:109940000000000000000000000000100004000003 -:109950000000000000800000000000000000000087 -:1099600000000000000000000005000000002004CE -:109970002084098400840900000000000002000027 -:109980000000000000000000000000900000000443 -:1099900009840291000000C01104209002C003005D -:1099A0000088400011000004002000080020000092 -:1099B000000000008001000002900288090409886C -:1099C00009002188200409040000000000000000B4 -:1099D0000020000000000020000000002000000027 -:1099E000080000000040000000880000000040085F -:1099F0000000000000000000000000000000000067 -:109A00000000000000000000000000000000000056 -:109A1000000404C001A00890000000000000000045 -:109A20000000000000000000000083018200000030 -:109A30000000000001012001000000000000000003 -:109A4000000000100140008800200000000000001D -:109A500000009000009000909090000001008400B1 -:109A6000000010A00088001000100000000000009E -:109A700000000000000000000000000000000000E6 -:109A800000000000000000000000000000000000D6 -:109A90001100008000000380800000000000000032 -:109AA00000000000000000000000000940408009A4 -:109AB00000400000000440400004001000000000CE -:109AC00000000000008021800080000000000000F5 -:109AD0000000000000000080000080000000030083 -:109AE0000000000080800000000000000000000076 -:109AF0000000000000000000000000000000050061 -:109B00000000000000000000000000000000000055 -:109B100000000000418005918582808000000000E7 -:109B20000000000000000000000000002080000095 -:109B30004040020300000000030008001003000082 -:109B400000000000000004002003021020090000B3 -:109B50000000000000000000800380000000020000 -:109B600010000400100000008003800000000000CE -:109B700000000000000000000000000000000000E5 -:109B800000000000000000000000000000000000D5 -:109B900000000000000090C08885A0A104C0000063 -:109BA0000000000000000000000000000000014074 -:109BB0000010010100110000002000000100010060 -:109BC00000000000000000000004000101A100905E -:109BD000000000000000000000009001A0000090C4 -:109BE000000001000100004090000801A0008882F0 -:109BF0000000000000000000000000000000000065 -:109C00000000000000000000000000000000000054 -:109C10000000000000000000C102001020A1A1000F -:109C20000000000000000000000000000000000034 -:109C3000000001008301000000000000010001019C -:109C40000000000000000000000090000000000183 -:109C50000201000000000000000090880088000859 -:109C600000880000000000010001C0C000000000EA -:109C70001082000000000000000000000000000052 -:109C800000000000000000000000000000000000D4 -:109C900000000000000000000000C003000580106C -:109CA0001120030000000000000000000000000080 -:109CB000000002030209A12100200000000020038F -:109CC0002121002000000000000000000010001012 -:109CD0000021800200000000000000008000000061 -:109CE00000000000000300030021000280000000CB -:109CF0000000000000000000000000000000000064 -:109D00000000000000000000000000200000000033 -:109D100000000000000000008000000003000504B7 -:109D200003800000000000000000000000000000B0 -:109D30000000000003842010210005000000040042 -:109D400040002100050000000000000000000400A9 -:109D500008000300884100000000000000008008A7 -:109D60000021000000000000000000000000802032 -:109D700000000000000000000000000000000000E3 -:109D800000000000000000020000000000010000D0 -:109D9000000000000000040000000800C0000020D7 -:109DA000C0C0000200000000000000000000000031 -:109DB0000000000000000091000001000000000011 -:109DC0000088010001000000000000000000000009 -:109DD00041849100820009010000000000000000A1 -:109DE0009000909000902000000000000000000013 -:109DF0009000001000104000000000000000000073 -:109E00000000000000000000000000000000000052 -:109E10000000000000000000000000000000000042 -:109E2000000000E0070060210000000000000000CA -:109E3000000000000000000000810000070000009A -:109E40000000000000000000000000000000000012 -:109E50000000000000000000000A000000000000F8 -:109E600000000006000007000000000000000000E5 -:109E70000000008100000700410000000000000019 -:109E800000000000000000000000000000000000D2 -:109E900000000000000000000000FCFC3C3C000052 -:109EA0000000FFAAFFAA0C3C0C3C000000000000D0 -:109EB00000000000000000000000000000000000A2 -:109EC0000000000000000000000000000000000092 -:109ED00000000000C3FFC30F0000000000000000EE -:109EE000000000003C003CFFFF20000000000000DC -:109EF00000000000C3C3C3C3AAAAC3C3000000007C -:109F00000000000000000000000000000000000051 -:109F1000000000000000000000000000FCFC3C3CD1 -:109F200000000000AAAAAAAA003000300000000029 -:109F30000000000000000000000000000000000021 -:109F40000000000000000000000000000000000011 -:109F5000000000000000FF00FF55000000000000AE -:109F60000000000000000000FFFFFFDFFFDF000037 -:109F70000000000000000000FFFFAAAAC3C3000009 -:109F800000000000000000000000000000000000D1 -:109F900000000000000000000000000000000000C1 -:109FA0000000000000000F7F0F3FFF2AFF28000085 -:109FB00000000000000000000000000000000000A1 -:109FC0000000000000000000000000000000000091 -:109FD000000000000000000007050700000000006E -:109FE0000000000000000000FF30FF300AFF0AFF01 -:109FF0000000000000000000C300C3000000FF00DC -:10A000000000000000000000000000000000000050 -:10A010000000000000000000000000000000000040 -:10A0200000000000000000000F5F0F0FFF0AFF009C -:10A030000000000000000000000000000000000020 -:10A040000000000000000000000000000000000010 -:10A0500000000000000000000000070507050000E8 -:10A0600000000000000000000000CF00CF0000FF53 -:10A0700000FF00000000000000007C7C40403C3CF1 -:10A080000A0A0000000000000000000000000000BC -:10A09000000000610006000D00000000000000004C -:10A0A0000000000000000000000005610A0D05012D -:10A0B00000A0000000000000000000000000000000 -:10A0C000000005610A26050D00A0000000610006E1 -:10A0D000000D00000000000000000000806100068C -:10A0E000000D00000000000000000000000000382B -:10A0F0000000000000610006000D000000000020CC -:10A10000000000010000000000000000000000004E -:10A11000000000000000000000000000000000003F -:10A120000000000000000000000000005F550F006C -:10A13000003CF0FC000000000000000000000000F7 -:10A1400000000000AF2F2F2F00FF00FF0000FFFFD7 -:10A15000FFFF000000000000000000000000A0A0C1 -:10A1600082D7C0C0FCC0000000000000000000005A -:10A170000000000000000000000010FF55FF00007C -:10A1800000000000000000000000000000000000CF -:10A1900000000000000000000000000000000000BF -:10A1A00000000000000000000000000000005F55FB -:10A1B0000F00003CF0FC0000000000000000000068 -:10A1C000000000000000AF0F0F0F30FFBAFF0000CB -:10A1D000005C000CFF005F000000000000000000B9 -:10A1E000F5F582D7FCFCFCC0000000000000000078 -:10A1F00000000000000000000000000010FF10FF41 -:10A20000000000000000000000000000000000004E -:10A21000000000000000000000000000AAAAAAAA96 -:10A22000000000000000000000000000000000002E -:10A230000000000030FF30FF0000000000000000C0 -:10A240000000000000000000FFFFFFFF003C00FFD7 -:10A2500000003C3F3C3F0000000000000000000008 -:10A26000000000000000FFC33C00000000000000F0 -:10A2700000000000000000000000000000000030AE -:10A2800000F30000000000000000000000000000DB -:10A290000000000000000000000000000000F0F0DE -:10A2A000F0F00000000000000000000000000000CE -:10A2B00000000000000030303030000000000000DE -:10A2C0000000000000000000000000350005000054 -:10A2D00000C300003C7D3C3C000000F0000000009A -:10A2E0000000000000000000171717170000000012 -:10A2F000000000000000000000000000000000005E -:10A30000003000F30000000000000000000000002A -:10A310000000000088002000100020000000000065 -:10A320008800880088004000200004000000000031 -:10A3300020042000200000008400820000000000B3 -:10A34000000000004100000000802000000000002C -:10A3500000000400000300000080000000008800EE -:10A3600084008200000082008200820020800000C1 -:10A370000400880020008800040084008900000098 -:10A3800020000000840010008800A00020000000D1 -:10A3900088002000200200000002100000000000E1 -:10A3A0000000400200002000000000000002000049 -:10A3B000100240020800000000020000000000003F -:10A3C0000040000000400882000000020000000081 -:10A3D000000000000000000000001040000010001D -:10A3E000000000004000000000000000210000020A -:10A3F0004000000040000000000090000000040049 -:10A4000000020500400000000040000000020000C3 -:10A410000000009040000000030000000000400029 -:10A42000000000000100041000000000100082097C -:10A430000000000000100009010040004010011061 -:10A4400000000000020001000100401040900905DA -:10A450000000000008090200000084000000200045 -:10A460000810000090000010901082408200080345 -:10A47000030082030200100004000000000000102E -:10A480000420000808400000042001000000020829 -:10A4900002100200840208100000400004000000C6 -:10A4A000820000000000080000000000000000081A -:10A4B000001000000000000800004000850084003B -:10A4C00040000400040000004000400084018010AF -:10A4D000C0400000000009404000000004000400EB -:10A4E000400084010000000004000400000004009B -:10A4F0000000400000000000000009000400000807 -:10A5000000840001000084000000040840000400F2 -:10A51000000041084000001180080084000088000D -:10A52000000088050000000000001000000000008E -:10A5300000000005002100000000002104000000D0 -:10A5400040000000000288000000900282410041AB -:10A550000041820000410000000084000000000073 -:10A560000000000000210000000040000421400025 -:10A57000000000020008000040000008A0080000E1 -:10A580000021000000050021000000210000000063 -:10A590000020000800000009000000210021000048 -:10A5A00000000000000000000000000000000000AB -:10A5B0000000000003000000410000000300000054 -:10A5C00000008400080000000010000004000300E8 -:10A5D000000011000300410000000800030000001B -:10A5E00008820008090808000000090000A0030014 -:10A5F000000000001000000000A021080000100072 -:10A6000040000000000009001100030000000000ED -:10A610000000000100080000000008A000A0008267 -:10A620000800000000008220000000000000084038 -:10A63000080000000000084000000000004000008A -:10A6400082400809010482402140000008090800F6 -:10A65000000008050800A0008800000000000800B5 -:10A660000000000082000000080000000040C1045B -:10A6700040040800A000A000A0410000A0020000CB -:10A6800000000000040082400041C00040020800B9 -:10A6900010210800080008000405A00500408221E0 -:10A6A000C02100000300000000C000000000000006 -:10A6B0000000000000000000000821000000000071 -:10A6C000000000000000080008004040008808006A -:10A6D00000C00000000000400300210000C0100482 -:10A6E0000300000008820000418400001100000007 -:10A6F000400091A00000020000840400414041009D -:10A7000000A0020000000340000000080010C08903 -:10A71000000000A000000000038489900090040065 -:10A7200004A0000000000200004100050005000038 -:10A73000000000000000000010000000A000000069 -:10A740000800820004000800080008000000001053 -:10A750000000001000808200000000008200004124 -:10A76000000082000000000000008800C00000001F -:10A7700004008800000800008200A0020010000011 -:10A780000000840000110000828082000100C000EF -:10A790000000400800000800040000C10100A00003 -:10A7A00000000000000000008000000000C0000069 -:10A7B0000000000010000000000000000000000089 -:10A7C0000000800000000010A1A005008300000030 -:10A7D00000000000000000400000000000000090A9 -:10A7E000002003000000000000000084038400003B -:10A7F0000000000000000000004021002105400191 -:10A80000000000000000000000904020408804008C -:10A810000800000000000000000080000020048408 -:10A82000000000000000000000040004C00000055B -:10A8300000210004000400040804000000000000DF -:10A840000000080000008221000040002000880075 -:10A8500000000011010404050802000900200004A2 -:10A86000000000110011880000002000000000001E -:10A870000800000002400240200000048204001092 -:10A8800010090000002000210008000082000000E4 -:10A89000000000000080000000040420000082008E -:10A8A000C000000000000040002100000000000087 -:10A8B000000000000000000008000000000004008C -:10A8C0000000000008000000000000000000000080 -:10A8D00000000010410008000000032008040000F0 -:10A8E0000400000000000800000000000000030059 -:10A8F0000000020000000000020000000000210033 -:10A900000001000000A02000004020000000039093 -:10A910000300028402000002000020040001000085 -:10A92000000000000304002000000000841184C027 -:10A9300040820408020000000000A00000000000A7 -:10A9400000000000000000000000000004848440BB -:10A95000028282C140C0840802828405844000884B -:10A96000A0A0008200000000000000000000000025 -:10A97000000000000400080400A0C0A0080484A097 -:10A98000A0080882A0400000000000000000C0A055 -:10A9900000080008880000A1820500100082400025 -:10A9A000209000088283A0020089000400400489EE -:10A9B0000503808900828000000000000000000084 -:10A9C0000000000000000000000000000000000285 -:10A9D0000585808200088309109080C100900004E2 -:10A9E0004141008400110000000000000000000050 -:10A9F00000000000000080008080110000008080C6 -:10AA00001100218080800000000000000000000094 -:10AA1000808000000000000011910083000000A071 -:10AA200080040083002080A08041004000200005B9 -:10AA300000000020000000000000000000000000F6 -:10AA40000000000000000000000000000000000006 -:10AA500020000002880991030000000500C080006A -:10AA60000400040089840040000000000000000091 -:10AA7000000000000000800000002000C1C009218B -:10AA8000200010004188001180000000000000003C -:10AA90000000000080118080008000800021008084 -:10AAA00000100000000000088000000000080020E6 -:10AAB0000040A0008491C0880490000000000000C5 -:10AAC0000000000000000000000000000000000086 -:10AAD0000000C1A0840909820808C000849084098C -:10AAE000088885404100A0A182010000000000000C -:10AAF0000000000002008800A0001000850008830C -:10AB000084C18520050084820485042000000000A3 -:10AB10000000000000009001A084009000080000E8 -:10AB2000008200840000200008089000004000001F -:10AB300000A10000C1A00085098585C000C00020DB -:10AB400000040002000000000000000000000000FF -:10AB5000000000001085008491094008A102C18511 -:10AB60000384C00884110184014102000000000038 -:10AB70000000000000010000000000900040C085BF -:10AB800000090084C08508C0008404C0C10400001E -:10AB9000000000000000C02000900088009002002B -:10ABA000000000008200900001900090080282885E -:10ABB00001A0004088204109102102C020020000AD -:10ABC0000080008000000000000000000000000085 -:10ABD00000000000000083A0030221A180C04120EA -:10ABE0002109850410901004410421A18040000037 -:10ABF00000000000000000010000000000800000D4 -:10AC00000320008900080920201100020010C089DB -:10AC10000000000000000000000000000000000034 -:10AC2000800000000000800080000300048020807D -:10AC300000000880058000000040009180808000B6 -:10AC40000002000000000000000000000000000002 -:10AC50000000000000000000100220A121000500FB -:10AC600000040021800000000411082021000302DC -:10AC70000000000000000000000100400000000093 -:10AC800000008041000380808003000480C18000B8 -:10AC9000000200000000000000000008001000801A -:10ACA0000000A1408808020082000011001080808E -:10ACB000000021104000050008008801040804403D -:10ACC0000400000000000000000000000000000080 -:10ACD000000000000000000000C089A1C00885C07D -:10ACE0008400A00104C004C0040085010105A14046 -:10ACF0000100000000000000000000010000001042 -:10AD0000000200000405048440840400820108203D -:10AD100084A082000000000000000000900088096C -:10AD200088400000030005009000100020018811F9 -:10AD30004090100083002100040008000000000083 -:10AD400007004800000000000000000000000000B4 -:10AD500000000000000000000000000000000000F3 -:10AD6000070000000000000007004800004200004B -:10AD700007005000000000000000000000000081FB -:10AD80000000070000000000000007005000600005 -:10AD900000E00700000A00000000000000000006BC -:10ADA000000007008800810000E0000000000000B3 -:10ADB000000007000000000000000000000000008C -:10ADC00000000000000000000000000FC9C90000E2 -:10ADD0000000000000000000000000000000000073 -:10ADE0000000000000000000000000000000666697 -:10ADF000F6F6640464040000000000000000000097 -:10AE0000000000000000FFFF000000000000000044 -:10AE10000000000000000000000000000000000032 -:10AE2000FFFF9F006060F9669F0042000000000085 -:10AE30003C3CF690F0F0F0F0FC0C6F6F18DB0CCFA0 -:10AE4000000000000000000000000000F0FFC9C981 -:10AE500000000000000000000000000000000000F2 -:10AE600000000000000000000000000000000000E2 -:10AE70006666F6F66404640400000000000000004A -:10AE8000000000000000FF00FF00000000000000C4 -:10AE900000000000000000000000000000000000B2 -:10AEA000000060006000404040429FFF42420000BE -:10AEB00000003C3CF690FF669900FC0C606018DBDB -:10AEC0000CCF021020000088108400000000000059 -:10AED0000000000000000000000000000000000072 -:10AEE000000002102000008810840210200000885A -:10AEF00010840000000000000000000000000000BE -:10AF0000000000000000000000000000021020000F -:10AF100000881004021020000088100400000000C7 -:10AF20000000000000000000000000000000000021 -:10AF30000000000000000000000000000000000011 -:10AF40000000000000000000000000000000000001 -:10AF500000000000000000000000000000000000F1 -:10AF600000000000000000000000000000000000E1 -:10AF7000000000000F0F0F0F02FFC3FF00000000D2 -:10AF800000000000000000000000242400C30000B6 -:10AF900000000000000000000000000000000000B1 -:10AFA0000000000000000F00FFFF00FF00FF000096 -:10AFB0003CFC0000000027E727E709F9F9F9606F7A -:10AFC000606F0000000000000000000000000000B2 -:10AFD0000000000000000000000000000000000071 -:10AFE0000000000000000000000000000000000061 -:10AFF0000000000000000F6F3F7F02FF02FF000013 -:10B00000000000000000000000000000272700C32F -:10B010000000000000000000000000000000000030 -:10B0200000000000000000000000FFFF06FF06FF18 -:10B03000180018FC0000000024E424E40909F909C0 -:10B040000C0CFCFC0000000000610006001D00016B -:10B0500000000000000000000000000000000000F0 -:10B06000000000000000000000610006000D00006C -:10B0700000610006000D000105610026001D0000B2 -:10B0800000000000000000000000000000200000A0 -:10B09000000100610006000D00010061000680054E -:10B0A0000000000000000000000000000038000068 -:10B0B000000000610002800D00000061000E000D24 -:10B0C000000000610006000D0000000000003F03CA -:10B0D0001414000000000000000000000000000048 -:10B0E00000000000000000000000AF2F2F2FC0FF65 -:10B0F000C2FF00000000FF00C3C30F0FFF1FC0FF0F -:10B10000C2FF00000000000000000000000000007E -:10B11000000000000000000041413F03000000006B -:10B12000BEAA505000000000000000000000000017 -:10B130000000000013D310D0000000000000000049 -:10B1400000000000FFFF00BE000000000000000043 -:10B150003F03D7D7000000000000000000000000FF -:10B16000000000000000000000000000AF0F0F0F03 -:10B1700000FF82FF0000000055550F0F0F0F1F1F2B -:10B1800000FF82FF0000000000000000000000003F -:10B19000000000000000000000007D7D3F03000073 -:10B1A00000001400505000000000000000000000EB -:10B1B0000000000000001313101000000000000049 -:10B1C0000000000000005FFF00BE00000000B2B2FF -:10B1D000B2B200000000000000000000000000000B -:10B1E0000000000000000000000000000000FFFF61 -:10B1F000FFFF3C3C003CC3AAC3AA00000000FFFFC5 -:10B20000FFFF0434043400000000000000000000D0 -:10B210000000000000000000000000003C001717C4 -:10B2200000000000D2D2D2D20000000000000000D6 -:10B230000000000000000000C3FFC3000000000089 -:10B24000109238BA000000004D414D41000000004E -:10B25000003CC3FF000000000000000000000000F0 -:10B2600000000000000000000000000000000000DE -:10B27000C10101010000003C00F0FFF000000000EF -:10B28000C10101010434043400000000000000008A -:10B290000000000000000000000000000000FFC3EC -:10B2A000171700000000D2D2D2D200000000000028 -:10B2B00000000000000000000000C3FFC300000009 -:10B2C000000051D379FB00000000FFFFC3FF000026 -:10B2D000000020002000200020002000200020008E -:10B2E00088000000000000000000200000000400B2 -:10B2F000200020002000200002000000200020008C -:10B300000800848000001102880010000000040082 -:10B31000200000032000008020004080000020006A -:10B320002000040084000000000084002000880049 -:10B330002000000020000100000400800000000048 -:10B34000000020022000C0000000211020000000AA -:10B350008400840000000000000000000000404065 -:10B36000000000004000000000020040100000004B -:10B370004000000240000000000000000000000249 -:10B380000000850211020090400100000000000052 -:10B39000000000000000000000100000800200001B -:10B3A000000000000000000000002000000021005C -:10B3B00040000000000000004000212000020000CA -:10B3C000000040044001000040000000089100001F -:10B3D0004000400000840000000000000200000067 -:10B3E000000000100809000008000800000000002C -:10B3F0001000001000000000000000009008000095 -:10B40000084090000800201040100100050090083E -:10B4100008200800020800000000200000000008CA -:10B42000C021000200008802001002000200041087 -:10B430000904041000110810002000000008048313 -:10B4400000050000001004109040020000080210E7 -:10B4500000100210001008000000000000000000B2 -:10B4600000000000000000000000000000000000DC -:10B47000000000000000000011000488000000002F -:10B4800040000000030020008000800040004010C9 -:10B49000090000080900000000000000040000008E -:10B4A0001184040000010800040104A00400000449 -:10B4B00000A040400340000085080508008400000B -:10B4C00000104108410002880240410405000000CC -:10B4D00040050002040005000940000000000000D3 -:10B4E000000000000000000000000000000000005C -:10B4F000000000000000000000000000000000004C -:10B50000000000000000000000001000000000002B -:10B510008900000000000000002100000000000081 -:10B52000002100410008408000000008400884001D -:10B530000441000500080000A021000000000441B3 -:10B54000000040080000000800080400000000405F -:10B550000041002100210000000000100000000058 -:10B560000000000000000084000000000000000057 -:10B5700000000000000000000500000020000000A6 -:10B5800000000000000000000000000000080000B3 -:10B5900000002008008400000000000000000000FF -:10B5A0000000000041004100802000C04100000078 -:10B5B0000000100000004100000000A0000000900A -:10B5C0000000000003000000090008000300000064 -:10B5D000002003842100000000A0000000210000E2 -:10B5E0000000000000000000000000000004000453 -:10B5F000000000000000000000000000004000000B -:10B6000000040000040008000000C0000000000961 -:10B6100000414010002108059009824140040000CB -:10B62000004000109004080282808209824000409D -:10B6300008410000C0048200000500110010844190 -:10B6400040000010C0094002000508000009404108 -:10B6500082000004004104000000001108400000C6 -:10B660000000000000000000000040000088000012 -:10B6700000000000000000080000000000000000C2 -:10B680004000000000000000000000000000000476 -:10B69000008200C0110811000000110008C0000065 -:10B6A00000000082020111884085002011880408F2 -:10B6B000008411040000400000A0008200900000FF -:10B6C000000011C011C000900001059040001190D1 -:10B6D00080A00008000010C0000010000804408492 -:10B6E0001100000000000000000000000000000049 -:10B6F000000000000000000000000000000000004A -:10B700000000000000000000080000000000200011 -:10B7100000000000000000000000820000000000A7 -:10B7200000050000A00008008200100000000400D6 -:10B7300000210820000040008200002000000000DE -:10B740000000080000000000840000210020000824 -:10B75000000000110000A00800210000000082008D -:10B7600000408200210000082110000000000000BD -:10B7700000000000000000000000000000000000C9 -:10B7800000000000211040C0001000001100000067 -:10B790008500008800000000009000000300000009 -:10B7A0000000000000000000080800000000040085 -:10B7B00085000000000100000000000008000000FB -:10B7C00000000000000010400400100420040000ED -:10B7D000000008080000020005000004000000044A -:10B7E0000008000800000000000800100000000031 -:10B7F00000000000000000000009000000009000B0 -:10B800000000000000000000000000000000200018 -:10B8100020000000200000080100004100088221F3 -:10B82000000020000000000090080080A000001030 -:10B83000002101000000001040000021100040081D -:10B84000000000000000004100100100080400009A -:10B8500000004000A00882001021002100400803E1 -:10B86000A02104058803A0080000000000000000DB -:10B8700000000002000002200000000000000000A4 -:10B880000000000000002020000000000000000078 -:10B8900080008000000080040000200002A0000062 -:10B8A0000800000000000000000000000010000080 -:10B8B000008200004000000000002088000003C05B -:10B8C00002000000030420400904090240000000B7 -:10B8D00008C0000000020000110400000020000069 -:10B8E00083080000000000000000000000000000CD -:10B8F0000000000000000000000000000000000048 -:10B900000000000000000000000000000000000037 -:10B910000000000100000000000100000200900192 -:10B9200000000000000000000000000001A00088EE -:10B93000020200889191009084000008000000003D -:10B9400000000000000100000001000001000100F3 -:10B9500008000001000000000000000000000000DE -:10B9600000000000000000000000000000000000D7 -:10B9700000000000000000000000000000000000C7 -:10B9800000000000000000000000000000000000B7 -:10B990000000000000040000090000100000800406 -:10B9A000840400000000000000000000000020806F -:10B9B00011000000000010114080000500A00000F0 -:10B9C00000000000000000200004002000051140DD -:10B9D00003218000000400000300000000000000BC -:10B9E0000000000000000000000000000000000057 -:10B9F0000000000000000000000000000000000047 -:10BA00000000000000000000000000000000000036 -:10BA100000000000000084002000000090100205DB -:10BA200000000403401000000000000000000000BF -:10BA3000410000000511000000000021808000840A -:10BA40000000000000000000000080000000000076 -:10BA50000000C1004011800200000900090011002F -:10BA60008000000080008000800080000000000056 -:10BA700000000000000000000000000000000000C6 -:10BA800000000000000000000000000000000000B6 -:10BA9000000000000000000009A0A00082000901D1 -:10BAA0000010000000010101000000000000000083 -:10BAB000000000000000008300009004000084C02B -:10BAC000089000000000000000004000020040005C -:10BAD0002000A0101000A0011002000000000000D3 -:10BAE0000000080004000400080002001000C0006C -:10BAF00090000000000000000000000000000000B6 -:10BB00000000000000000000000000000000000035 -:10BB1000000000000000000000000001000108001B -:10BB2000000100000400010100000000000000000E -:10BB3000000000000200000100010400901000401D -:10BB40009009080200000000000000000000010051 -:10BB500000000000000100000001000000010000E2 -:10BB600000010000000000000000000000000000D4 -:10BB700000000000000000000000000000000000C5 -:10BB800000000000000000000000000000000000B5 -:10BB9000000000000000000000000000000841401C -:10BBA0001041001000008004212105000000000069 -:10BBB0000000000000000009000300210411808340 -:10BBC0000089800200C000000000000000000000AA -:10BBD00002004100000000100011002100040010CC -:10BBE0000021002100110000000000000000000002 -:10BBF0000000000000000000000000000000000045 -:10BC00000000000000000000000000000000000034 -:10BC1000000000000000000000000000000004041C -:10BC200008000000001020804004210003000000F4 -:10BC30000000000000000000800000008000000004 -:10BC4000A105C110028008000000000000000000F3 -:10BC50000005000000800000210208000900040027 -:10BC60000002000000000009000000800000000049 -:10BC700000000000000000000000000000000000C4 -:10BC800000000000000000000000000000000000B4 -:10BC900000000000000000000000000000000000A4 -:10BCA00001010184002000000008010001000100E2 -:10BCB000000000000000000000009082000004006E -:10BCC00000009100028908900100000000000000BF -:10BCD0000000000000020008000001C10182008491 -:10BCE000000000000000000000000000000800024A -:10BCF000000000000084008200000000000000003E -:10BD00000000000000000000000000000000000033 -:10BD10000000000000000000000000000000000023 -:10BD20000000000000E000000000000000E0000053 -:10BD3000000000000000000000000000884100E05A -:10BD400007000000810000E0070000820000000002 -:10BD5000000000000000000000000000810000E082 -:10BD600000000000000000000000000000000000D3 -:10BD700000000000000000000000000000000000C3 -:10BD800000000000000000000000000000000000B3 -:10BD900000000000000000000000000000000000A3 -:10BDA0000000000000000000000000000000000093 -:10BDB00000000000000000000000000000005050E3 -:10BDC0005F5F000000000AFA0AFA503CFA3C0000EB -:10BDD0000000000000000000000000000000000063 -:10BDE0000000000000000000000000000000000053 -:10BDF0000000000000000000000000000000000043 -:10BE00000000000000000000000000000000000032 -:10BE10000000000000000000000000000000000022 -:10BE20000000000000000000000000000000000012 -:10BE30000000000000000000000000000000000002 -:10BE400050505F5F0000000000F00FFF503CFA3CD4 -:10BE500000000000000000000000000000000000E2 -:10BE600000000000000000000000000000000000D2 -:10BE700000000000000000000000000000000000C2 -:10BE800000000000000000000000000000000000B2 -:10BE900000000000000000000000000000000000A2 -:10BEA000000000000000000000000000C0C028EBFF -:10BEB0000000000000000000000000000000000082 -:10BEC00000001ABA10B000000000BEBEBE145555E6 -:10BED000FF3C000000000000000000000000FF0F19 -:10BEE0003535000000007F573E16000000000000BE -:10BEF0000000000000000303030300000000171708 -:10BF00001717000000000000000000000000000003 -:10BF10000000000000000000000000000000000021 -:10BF20000000000000000000000000000000FCFC19 -:10BF300028EB0000000000000000000000000000EE -:10BF4000000000001A1A1010000000001414BE14A3 -:10BF50005555C30000000000000000000000000074 -:10BF6000F0003535000000006B432A02000000009D -:10BF700000000000000000007D413C0000000000C7 -:10BF8000FFC33C00000000000000000000000000B3 -:10BF900000000000000000000000000000000000A1 -:10BFA000000000000000000000000000006100012F -:10BFB0000001000000610007000D0000000000000B -:10BFC0000000000000000061002680050000006104 -:10BFD000000A800D00000000000000000000006169 -:10BFE0000006000D000000610002800500000061F5 -:10BFF0000006000D0000000000000000000000002E -:10C000000000000000000000000000000000000030 -:10C010000000000000000000000000000000000020 -:10C020000000000000000000000000000000FF55BC -:10C030005555003CF0FCCFCF4F0F0AFF0AFF000020 -:10C04000000000000000000000000000545E505A94 -:10C05000AAAA00005F5F5F5F000000000000000010 -:10C060000000000000000000C3C3000000FF00004B -:10C0700000000000F0FF0C0C0000000000000000B9 -:10C0800000000000000000000000000000000000B0 -:10C0900000000000000000000000000000000000A0 -:10C0A0000000000000000000000000000000000090 -:10C0B000FF000000003CF0FC4F0F4F0F0AFF0AFF8B -:10C0C0000000000000000000000000000000040E5E -:10C0D000000A752075205F5C5F5F000000000000B3 -:10C0E000000000000000000000007C407C40505038 -:10C0F0003C3C00000000000F0C0C000000000000A1 -:10C10000000000000000000000000000000000002F -:10C11000000000000000000000000000000000001F -:10C12000000000000000000000000000000000000F -:10C130000000FFFF14142828F8F8FFFFFFFF003C61 -:10C1400000FF0000000000000000000000000000F0 -:10C150003C003C00F3F3030300000000000000007B -:10C1600000000000C0C0FCFC00000000C300FF3C59 -:10C17000FF00FF000000000000A000AF0000000072 -:10C1800000000000000000000000000000000000AF -:10C19000000000000000000000000000000000009F -:10C1A000000000000000000000000000000000008F -:10C1B00000000000141414142828F8F8000F000FD1 -:10C1C000003C000000000000000000000000000033 -:10C1D00000003CFF3CFFF3F30303000000000000FD -:10C1E00000000000000082BE82BE00000000C3000C -:10C1F000FF3CF0F0F0F00000000000A000AF0000F5 -:10C20000000000000000000000000000000000002E -:10C2100000008400880020000000020002002000CE -:10C22000000040000200200088000200880000009A -:10C23000080088000000400040001002200020009C -:10C240000400040040002000040020002000000240 -:10C25000000000000000000020000000040040007A -:10C26000200084002000000088002000A00088003A -:10C27000C002410000008880C000A00000002080B3 -:10C280004000C1008800100088002000880088005D -:10C2900000000940210200000002000040400000B0 -:10C2A000000000000020002000000000100000003E -:10C2B0004000804000000000000000A020001000AE -:10C2C000000000002000000000000000400000000E -:10C2D000000000400002100210004040002040001A -:10C2E00004000000000000000000000000401000FA -:10C2F00011000000080000000010200000004002B3 -:10C300000020000008000000000000C00000400005 -:10C310000000000000009100040800000000080870 -:10C320009110000000000010041000000200004105 -:10C3300000000000821082108210900002000200B3 -:10C34000010002008200004000040000020084108E -:10C350000010000008040000000004050000840331 -:10C360008300820900002000090005841040108924 -:10C3700000040800000308C00010032090C0001053 -:10C380000010008388039185C0100811080904413A -:10C3900000094010000009004000030010000000E8 -:10C3A000000040000400040800000008000800002D -:10C3B00004000000000008000000000405841000D4 -:10C3C0000084080004001008000004840408000031 -:10C3D0000000048400000410040010000400114058 -:10C3E00009820808000004880408400808020004C4 -:10C3F00000020400840000848411000408880502FF -:10C400000504000440200404081000880084A040B3 -:10C41000091005048408000000000000A0000000CE -:10C4200000000000002100000000000000000000EB -:10C4300000000000000800009000000090050000CF -:10C4400000000000000000000000000000000021CB -:10C45000000000410005000000080000000000414D -:10C4600000410000040004050400080088004002A8 -:10C4700000218800000000050208882182090010C0 -:10C48000000800004000000000080008A0020002B0 -:10C49000840840008804000900000000000000003B -:10C4A000000000000000000000000000100000007C -:10C4B0000000000000000000000041000400042013 -:10C4C000000021000000000000000000002000200B -:10C4D0000000000000000000000003004000000019 -:10C4E0000300000010000000000000000000000039 -:10C4F0000300000000000800000009000200000026 -:10C5000000A01100410000080040000000000000F1 -:10C5100000000000000000000800002000000002F1 -:10C5200000100011C0000000080000000000C00062 -:10C5300000000000000008000800000500030000E3 -:10C5400000050010000220108240020000400000A0 -:10C550000800004108088200820900000000080865 -:10C5600040110208840800080420080200080000A6 -:10C57000C02108110002000000030810A00988086B -:10C580009041000040118420080982000800000248 -:10C5900008058440000402800840004000000000BC -:10C5A000410000000000210008000004000000001D -:10C5B000000000A000900000100000000008000033 -:10C5C00000000000080141C100C000840008000014 -:10C5D00000C0100800000000400040C000000090B3 -:10C5E000400041C00200110020004020040041A092 -:10C5F00010C021400008000041100000000000842D -:10C600000082000404040582410521A000A04082AC -:10C61000108200A000000000C140051000040000CE -:10C620000000080000000000000000008200000080 -:10C6300000000000080000000000C0000020000012 -:10C6400000000800080000080400000800000000C6 -:10C6500000030008000000210000000004000000AA -:10C660000000A00000000000C0000800400084009E -:10C6700000004041020800050010400020080000B2 -:10C6800002030011848421000003040504008420B7 -:10C6900082200000C00800401003000040088421F0 -:10C6A000000000000000000000000000000000008A -:10C6B000000000000000000000000000000000007A -:10C6C00000880000000000000090004003100000FF -:10C6D0000000000008000000000000000000000052 -:10C6E000000000C00000001000000010090000045D -:10C6F00005080000800000000000000000000000AD -:10C700000000040000000005A0000500800080007B -:10C7100041000000000000001000000000002100A7 -:10C7200000000000A0000000000000000000000069 -:10C7300000000000000000000000000000001000E9 -:10C7400000000000C0008200000000210000000086 -:10C750000021002100090041001000000800000035 -:10C76000000000000000000008000240000000007F -:10C770004000000000004000000082050841000366 -:10C780004041000800000200820800080121000862 -:10C79000A04100200000000584000000000000040B -:10C7A000000400000000000040022000000800001B -:10C7B00011080000008200020000000400000000D8 -:10C7C00011880000200000000800088220A000005E -:10C7D00000A000A0110000000000090005000000FA -:10C7E000000000000000001040C000000000000039 -:10C7F0000840402000000000090211200210409073 -:10C8000011C0114021904100418411A00400040096 -:10C81000210400C020820900080009020004101051 -:10C8200010A1030420040000040000000000000028 -:10C830000100C00000000000000000000000000037 -:10C84000000000000000004000200020000804401C -:10C85000000800880208000000000000000000003E -:10C8600000000000000000000000000000000000C8 -:10C87000A004004000400040A000050182008200AA -:10C88000000000000000000001A02020900208111C -:10C89000404100210011000100A00002000800102A -:10C8A0000000000082010000000080000000000085 -:10C8B0000000410000000000000000000000000037 -:10C8C0000000000000000000008000000000008068 -:10C8D0000080008000000000000000000000000058 -:10C8E0000000000000000000000000000000000048 -:10C8F0000000800000800000000080094020000946 -:10C900008020000400050004000911898088A040EF -:10C910008083A0C0008800A00010008000800080FC -:10C9200000000011090000080000020010000300D0 -:10C9300003000000000000000000000000000000F4 -:10C9400000000000000000000000000000000005E2 -:10C95000000080000020808300080000000000002C -:10C9600000000000000000000000000000000000C7 -:10C97000000000000000000400820000100003031B -:10C9800091000303000080000040001011008804A3 -:10C99000C0400083000080218085800000000000EE -:10C9A00000000000008000090000001100000000ED -:10C9B0000000010000000000000000000000000076 -:10C9C0000000000000000000000000000000000067 -:10C9D0000000000008048800A0040001000000001E -:10C9E0000000000000000000000000000000000047 -:10C9F0000000000000000000000000050000100220 -:10CA00009101A0408540A08240002000C001108814 -:10CA10008300A00108C11000200004029000000063 -:10CA20000000000000000008880002200000000054 -:10CA30000000820000000001000000010000000072 -:10CA400000000000000000000000000000000800DE -:10CA5000000000001000401000200202020200004E -:10CA600000000000000000000000000000000000C6 -:10CA70000000000000000000100200A082108804E6 -:10CA8000000000410104010200000100000000005C -:10CA9000C00001010090C0A1902001409108020255 -:10CAA0009000000000008400000001004000000031 -:10CAB0000000000000000000001000050008000851 -:10CAC0000000000000000000000000000000000066 -:10CAD0008000000000008000800000800000408096 -:10CAE0000000000000000000000000000000000046 -:10CAF0000000000000000000000000000080008036 -:10CB000000800003090205C020110000040041005C -:10CB100000000010101000C0801180000280C000D2 -:10CB20008080000000000000000000411120002073 -:10CB3000001000800000000000080000000000005D -:10CB400000000000000000000000000000000000E5 -:10CB50000000000000000000000090408980098073 -:10CB6000A000000000000000000000000000000025 -:10CB700000000000000000000000000080008000B5 -:10CB800000008000A080900020008803210204059E -:10CB90002080030090004091830000038003002167 -:10CBA00080800000804000000000000082211021F1 -:10CBB00090000300004000000000000100000000A1 -:10CBC0000000000000000000000000000000000065 -:10CBD000000000000000000000000000020182A030 -:10CBE00084101000000000000000000000000000A1 -:10CBF0000000000000000000000000000000100025 -:10CC000040009000100003A08202838811000101FF -:10CC100001040008010091900091050200019000BC -:10CC20002000049000009000A0008200000040015D -:10CC3000900403001100000000000000000000004C -:10CC40000000000050000000000000000000000094 -:10CC500000000000000000000000000000000000D4 -:10CC600000000000000000000000000000000000C4 -:10CC700000000000000000000000000000000000B4 -:10CC800000000000000000000000000000000000A4 -:10CC90000000000000000000001100E0070000128A -:10CCA00000000000070000000081000007000000F5 -:10CCB000000000E000000000000000000000000094 -:10CCC0000000000000000000000000000000000064 -:10CCD0000000000000000000000000000000000054 -:10CCE000F0F0FF00F066F0660000000000000000B9 -:10CCF0000000000000000000000000000000000034 -:10CD00000000C399C3990F3C993C66F066F0990FF7 -:10CD1000990F00000000000000000F0F0F0F00002F -:10CD2000FF00FF00FF00FEC2BC800FFF00F000000C -:10CD300000003C003C00000000000000000000007B -:10CD400000000000000000000000000000000000E3 -:10CD500000000000000000000000000000000000D3 -:10CD600000003C3C66663CFF3C0000000000000008 -:10CD700000000000000000000000000000000000B3 -:10CD8000000000000F000FFF0F3C993C3CFF3C00EF -:10CD90000000FFFF0000000000000000FFFF000097 -:10CDA000FFFFFF006F6F6060FEC2BC800FFF00F0EE -:10CDB000000000007C603C0000000000000000005B -:10CDC0000000000000000000000000000000000063 -:10CDD0000000000000000000000000000000000053 -:10CDE0000000000000000000000000000000000043 -:10CDF0000000000000000000000000000000000033 -:10CE00000000000000000000000000000000000022 -:10CE10000000000000000000000000000000000012 -:10CE20000000000000000000000000000000000002 -:10CE300000000000000000000000000000000000F2 -:10CE400000000000000000000000000000000000E2 -:10CE50000000000000000000000000000000003C96 -:10CE6000C3FF00000000096F096FC9C9C9C90000EC -:10CE700000000000000000000000000000000000B2 -:10CE800000000000000000009900C3F00000000056 -:10CE900000000000FCFCC0C0000000006666666781 -:10CEA0000099009920232023660FFF0F0CFCFCFC47 -:10CEB00080E089E900000000000000000609060982 -:10CEC0000000000000000000000000000000000062 -:10CED0000000000000000000000000000000000052 -:10CEE00027272727000000002424BDBDCFC0CFC0C6 -:10CEF0000000000000000000000000000000000032 -:10CF00000000000000000000000099FFC3F00000D6 -:10CF100000000000000081BD81BD00000000000095 -:10CF20000003101076762023E0E3660F000F0C0C50 -:10CF3000FC0C006009690000000000000000060908 -:10CF4000060900610006000D000000610006000DEA -:10CF500000000000000000000000000000000000D1 -:10CF60000000000000000000000000610006000D4D -:10CF700000000000000000000000000000000000B1 -:10CF800000000000000000000000000000000000A1 -:10CF90000000000000610006000D000000610006B6 -:10CFA000000D000000610021000100010061000E81 -:10CFB000000D0000000000200000000000610004DF -:10CFC000000D000100000000000000000000000053 -:10CFD000707A757F00000000000000000000000073 -:10CFE000000000000000000000000000202CE0EC29 -:10CFF0000000000000000000000000000000000031 -:10D000000000000000000000000000000000000020 -:10D01000000000000000F5053F3F0AFA0AFA000090 -:10D02000FF5000000000AAAAFF0FC0CACFCA00002C -:10D0300000000000000000000000000000005F0F82 -:10D040007F3F0000F0F00000000000000000000042 -:10D050000000202A252F0000000000000000000032 -:10D060000000000000000000000000000000232F6E -:10D07000E3EF0000000000000000000000000000DE -:10D0800000000000000000000000000000000000A0 -:10D090000000000000000000F50530300C0CFCFC26 -:10D0A0008200FF5000000000AAAA000FC0CACFCA29 -:10D0B0000000000000000000000000000000000070 -:10D0C00055007D3C0028F0F80000000000FFAAAAEF -:10D0D0000000000000000000000000000000000050 -:10D0E0000000000000000000000000000000000040 -:10D0F0000000000000000000000000000000000030 -:10D10000000000000000000000000000000000001F -:10D11000000000000000000000000F3C0F3C3C003D -:10D12000040405FF05AA000000002A207F750F0FE8 -:10D130000F0F5F5F0A0A00000000000000000000FF -:10D1400000000F0F555500000000000000003C3C9F -:10D15000F0F00000000000000000000000000000EF -:10D1600000000000000000000000000000000000BF -:10D1700000000000000000000000000000000000AF -:10D18000000000000000000000000000000000009F -:10D19000000000000000000000000000FF550055E6 -:10D1A0003C0034343CFF3CFF000000002A207F7527 -:10D1B0003CAA3CAA7D287D28000000000000000059 -:10D1C000000000000F0F5555000000002000000077 -:10D1D00000008800000000008400C0002000000063 -:10D1E000840020008800000020002000080000804B -:10D1F000000008000000000020000000100008806F -:10D200002000088004000000880020000003C00007 -:10D210000000A000080090009000840000002100A1 -:10D220004000C00040800000C000000021008800D5 -:10D230004000041083008904890008004000002099 -:10D24000A000880440808800A00090042082100282 -:10D250000000000200004000000040C0000040004C -:10D260000000000000002040000000000000C0009E -:10D270000004000080000000000000020000000028 -:10D2800080100000C010000000000000000000003E -:10D29000000000024000800000004000000000008C -:10D2A00002C0009009C000200000000040002004DF -:10D2B0004002C00289000400080040009100800084 -:10D2C000400008040000C1020000200000C000026D -:10D2D000A0000000000890080000000508104009A8 -:10D2E000000002000000000000000804C000000070 -:10D2F000000200050200A00008000200000040003B -:10D3000000080308A041400002410200100002048E -:10D31000000082000241050005000404100040885E -:10D32000000084050440084004080009C00202040B -:10D330000340084002090109090802104002A00048 -:10D340000108020482830805021100108210000007 -:10D35000050200000008000011840000000882009F -:10D36000800011000000000000080000080000001C -:10D370000082000902080008028808080004000072 -:10D380008088200088820000C0840984000804008E -:10D390000008000002848004084040C000080088A3 -:10D3A0008240051009C08488C100828404100505EC -:10D3B00003C008100404048420000804A08284111F -:10D3C00000100404200802020088208200090001E5 -:10D3D00004084008000000000000000500000040B4 -:10D3E00000000000002100000000001000080021E3 -:10D3F0000000000800108400000000000000000889 -:10D4000000000800010000050802000800080021D3 -:10D41000000300210000000800000020011000109F -:10D4200000410010C0088210822000040020100873 -:10D43000000200104000000400839004090810005E -:10D440000010004000000000010800030441040334 -:10D45000880301210008000000000000000000080F -:10D4600000000000000000000000000000000000BC -:10D470000300400000000000030000000000410025 -:10D480000000000000000490000000000000000008 -:10D49000000000000000000008000000000104007F -:10D4A00000000000000003000010000905002185B5 -:10D4B000110000904100804008010304412040A079 -:10D4C00000081101030021840200400008008920A7 -:10D4D000101020000810104082219002000004115A -:10D4E000080084000000000000004080000010855B -:10D4F00000000040000002020000001000090021AE -:10D50000C0210010C000001000030000C000C04097 -:10D51000820300C0080004100000841008050904FC -:10D5200004000041200900050040400008090810DF -:10D5300008210809C0040821000041000004080473 -:10D5400010A1C02011408404A00082201000C0025D -:10D55000820500004020A0044000008200890300F2 -:10D56000100000200090000009000082000200006E -:10D5700000024100110800002085000000C000A04A -:10D5800003C0009000A0000000A000820402000080 -:10D5900005000300214000A0208400000088A08234 -:10D5A00084C0C08211A040A0412020C0408200A0C1 -:10D5B00020880884090000A000900020848411883D -:10D5C000008800041104088309A04084218200001F -:10D5D00021021082000091C000C080008200000083 -:10D5E00000040800000004000000084082008208D7 -:10D5F000080000000008C0008400C0100000820085 -:10D6000000410400A00000000000A0040000000091 -:10D61000000000418241A003900000050000840347 -:10D6200004020020084010030000A011C0400000C8 -:10D6300011400408C002900000000008101100888A -:10D6400041002003208090038405000304008440EF -:10D65000A0039008C002C021822004200402000818 -:10D6600000000000000000000000000003A0000017 -:10D6700000000000000000000000000000010000A9 -:10D6800000200000008811000008000000080000D1 -:10D69000000000000000000000000000000000008A -:10D6A0000000000100010000100800000800000058 -:10D6B00010900400000000A14008000009000000D4 -:10D6C000080420A08000052000000000080480005D -:10D6D000000000000000400100880511A001800545 -:10D6E00000000000000004000000000000002140D5 -:10D6F0000011400000001000000082000000000344 -:10D70000080082410021080800000000002100916B -:10D7100000204000000008410841A0100040A0097E -:10D7200000000800C00010000020A00020100041F0 -:10D7300082000240000088024000000000410020FA -:10D740000008012000200188200584030880C021F2 -:10D750000421C11005021000890804910000001086 -:10D76000401100000000000000A0000000000000C8 -:10D770000808000403004100000000004100000010 -:10D780000000000000880084108400C0000002082F -:10D79000001000A040020000001000102000000057 -:10D7A00000000000C10021080084000900002002E0 -:10D7B000098200902008008420A0041020840384A3 -:10D7C0000008008220C140012020A0400000030288 -:10D7D00020A002000488C0C1200040C01120000029 -:10D7E000410091000000820100010000A10201C07F -:10D7F0001008C00400004000C0000000020000004B -:10D800002000C000000184000100000000000100B1 -:10D8100000000000C0A0008800A0008440000000BC -:10D82000000084000000102109880483909000010A -:10D83000A00000000000C040408208A08208A108AB -:10D8400001A084A0100400019101890000000105DD -:10D850000800880588900183919008828201C0A009 -:10D860009002A0C01082004000200020000990001B -:10D8700021000000008000004000800000008300C4 -:10D88000030000000000004000050303002000002A -:10D890002100000000008080000000000000000067 -:10D8A0000000000000000000A00440050082808508 -:10D8B0000010000500020020C0000580808080006C -:10D8C000A0000200840000000020110803020004F0 -:10D8D0001110032100040080021183808000804029 -:10D8E0008541858000208088000000000000000342 -:10D8F0001000A0214000C0080400400003004003C5 -:10D900000000800080008000800080110000000086 -:10D91000C1008300104020208000000000000000B3 -:10D9200000008000800000000000808000218080D6 -:10D9300080400080210404040203800000A1808054 -:10D94000808011000241C100A0400011800000044D -:10D95000004180000082000280030080412100110C -:10D9600085A02000000411400508004000000000D0 -:10D970000001C008210009880200014000000000E9 -:10D98000010190002000A000040002000200040039 -:10D990009000080811009101054088008800A0004F -:10D9A000840040000400A000080000000402880079 -:10D9B000A0A0C04100400101008501010400C09009 -:10D9C000A084909002C01101A00809A110A090A00D -:10D9D0009000A04088C0004008049085820808009C -:10D9E0008283909182020408050440210000010016 -:10D9F00001000000C00000020011048900000001C5 -:10DA0000000100000010000400020084000040003B -:10DA100005000000000000000001000108000041B6 -:10DA200090218801004000048404008200008821C5 -:10DA30000088404082030000000002000000004017 -:10DA4000002108114002040100A0A082C18300004F -:10DA5000100041000101000100000001001190834D -:10DA6000024082890984888901039002910500009F -:10DA70000200020000008000000200A104C000407B -:10DA800000400021002000040089008900090000F6 -:10DA9000C0000200000000100002002100408000D1 -:10DAA000008480040020008000800000000000004E -:10DAB0000020009003A0A0840000210009000000C5 -:10DAC0000010000200052090804000C180050490F5 -:10DAD0004020A010C0034120094000100005111093 -:10DAE00080408082202105894010080310040540F1 -:10DAF000202121001000400090004088888003020F -:10DB0000400011024000050300000080008000007A -:10DB100000000000000000004000408008001009E4 -:10DB200000040080808080000000000000000000F1 -:10DB300000002108030904004000888940084100D2 -:10DB40000311800800A1000080001005C08404803B -:10DB500005082040082021801100A1202083A0007A -:10DB6000C0002111830209910940A100020303A111 -:10DB7000A18000010000000001000810C10385829F -:10DB80008400010400010000000100000004000204 -:10DB9000000090000002A002020001C00104014048 -:10DBA000010082010010081008000000002000841D -:10DBB00000000000890003010300020041A04000B2 -:10DBC0002000A1004000400240400200834021119B -:10DBD0000908080100000182000800000900031084 -:10DBE000111041009101210120910001910041C0DB -:10DBF0001009118200000000000000000000000079 -:10DC00000000600000000000000000810000000033 -:10DC100000000000000000E0000000000000000024 -:10DC2000000000000081000007004200000000002A -:10DC300000000000000000000000070000000000DD -:10DC40000000000000000006000007005000000077 -:10DC500000E000005000000000E00700000A810022 -:10DC600000E007000000500000E00700000088000E -:10DC700000E00700820000000000000000000F3AF2 -:10DC8000FF3A5F505F5000000000000000000000FD -:10DC900000000FF30F533F3F3F3F00000000000024 -:10DCA000000000000000FCFC0C0CFA50FA500000D0 -:10DCB00000003C281C08000014041444FFFFFF006F -:10DCC000003CC3FF0000000000003C00000000001A -:10DCD0003CAA3CAA0000550F000000000000000014 -:10DCE0007D0D0D7D00000000FFFF0000FCC0FFC3A4 -:10DCF00045158A2A05F30503000000000000000016 -:10DD0000003AF03AFFF00F000000000000000000B1 -:10DD100000000000AFF3AF53FFFFC3C300000000DB -:10DD20000000000000000000FCFC0C0CFA50FA504F -:10DD300000000000BCA89C880000000014447FFF85 -:10DD40007F00E8E8E8E800000000A0A0BCA0FFFF1A -:10DD5000FFDFF000F0FFFFFF550F000000000000A4 -:10DD60000000D70707D7FFFF0000A0F5A0F53C0093 -:10DD70003F03CF3FCF3FF5F3F50300000000000065 -:10DD80000000BE5FBE0A7D7DCF0C000000000000D9 -:10DD90000000000000004F004F0000000000D5C050 -:10DDA0005500000000005F5FBE1413131010000F39 -:10DDB0003CAA00000000D0FFD0FF000000007C3C27 -:10DDC000000F3C3C0000000000000000CFCFDF8FC0 -:10DDD000FF3E3E3E5C5C5C5CEB28303000000000A7 -:10DDE00030F330F33333000000FF0055AAAAFF0FD1 -:10DDF000F3F3F330CC8888CCF5FAC1C20000000000 -:10DE000000000000145F140A4141CF0C0000000024 -:10DE1000000000000000000045004F00000000006E -:10DE200055005500000000000A0ABE14D313D0109C -:10DE3000000F3C0000000000D0FFD0FC00000000FC -:10DE40003C3C000F3C3C0000000000000000CFCF35 -:10DE5000DF8FFF3C3C3CFFF00F00EB28F3F30000AA -:10DE600000008282BEBE33330000C3FFC3D7AAAA1C -:10DE7000F00030F33030FFAAAAFFC1C2F5FA00610A -:10DE80000006000D000000614006000D000000616A -:10DE90000006000D000000610006000D000000619A -:10DEA0000007000D000000610006000D0000006189 -:10DEB0000026001D0001000000000000000100001D -:10DEC00000610006050D00A880610006000D00003D -:10DED00000610E3E001D000000610007000D000003 -:10DEE00005610A0F050D00A00061000A801D00A158 -:10DEF0000061000A8005000005610A0E850500A08A -:10DF00003C00FF0000000000FF3C550FFAFA0AFA3F -:10DF1000BEBE141400BF00BF000000000000F0F0FF -:10DF20000000000000000000C300AAF0F3F303F3B8 -:10DF30000000000000FF0FFF0000000000000000D4 -:10DF400000000000FFFF0041F0F1A0AFA0AF000013 -:10DF5000000000000000A0AFA0AF0F0F0F0F8F0F49 -:10DF60008F0F458ACFCF0F09F06003BE0382D7EB36 -:10DF7000D0E0E9A8C1807C7C00C310000000BEAAEC -:10DF800050503420342000000000003C550F0A0A95 -:10DF90000AFAAF05AF0500AA000000000000002843 -:10DFA000F0F80000000000000000C3FFAAF0030327 -:10DFB00003F30000000000FF0FFF0000000000005E -:10DFC00000000000EFAEEFAE0000F0F0C0C0CFCF19 -:10DFD000000000000000000030303F3FFF1F1F1F07 -:10DFE0000A0A000051A2F3F3FF69FF69033C030032 -:10DFF000D7EB070B69284100404000C30000000038 -:10E000001400505082D7D000000000000000000033 -:10E01000F000F0FF000000005555EB4B0000000041 -:10E02000000000007F7A2F2A00000000000000009E -:10E03000CFCF0C0C0000000000000000000000002A -:10E04000000000000000F0C3F0C300000000D2D2C6 -:10E05000D2D2AA00AA0F00000000000000000000B9 -:10E0600000003C3C00F0CF8A8ACF00000000F000A6 -:10E07000FF0F00000000C3C30000FAFA5050040470 -:10E08000080800FFC3C3D7D7D0000000000000007D -:10E0900000003CAA3CAA00000000F5F5EB4B000094 -:10E0A0000000000000007570252000000000000046 -:10E0B0000000D714D714000000000000000000008A -:10E0C00000000000000000000000FF000000000051 -:10E0D0000055AAFFAAFFAA0F0000000000000000E0 -:10E0E00000000000AAAAFFFFF3A2A2F300000000B4 -:10E0F000F000FF0F00000000FFFF3C3CFAFA505018 -:10E100000C0C0C0C00FFC3C3000000004100840095 -:10E1100088002000400020008800200000008800C7 -:10E12000880088000000008004000000000000005B -:10E1300020000400208020000000200000000210C9 -:10E140000400024188008800000300000000000075 -:10E150008410200084002000040088080200C00011 -:10E16000400004000000000085000000030440009F -:10E17000400400892000C14140848840C00008104C -:10E1800088002000090402102084000000404000A4 -:10E19000000000000000209000004000000010007F -:10E1A000000210A020C0000200100000004000008B -:10E1B0000900000080004020000000004000000036 -:10E1C00000004100C0C04000050000000040050004 -:10E1D0000040000000900000C00200000000C100EC -:10E1E0000000800000000000400040004008C00126 -:10E1F0000000100005044100200000114101000052 -:10E20000890304000000A0010000040302000000D4 -:10E21000080882410088000404800088000008107B -:10E220000200090400000005C000080000410000D1 -:10E23000084001202188000000410090882004400F -:10E2400001200220880088030805041000000084D3 -:10E250000004008400000004200000890200020085 -:10E2600002000840404003200805A01003000105FB -:10E27000000004100409A010841000110400080418 -:10E280000080840500040202A04001039100000800 -:10E29000000841004182000400090004000400005D -:10E2A0000008411040880008008200848082000835 -:10E2B00004840008400104040008020800040085EA -:10E2C00080C0200900010008201080080000000024 -:10E2D00004210001002100840411808800020388C9 -:10E2E0000484040800048404081180080408080455 -:10E2F0002082048210040984208400400010020857 -:10E3000000830410090800110009000820082000FB -:10E3100000050041880000000009004000400000A6 -:10E32000400300050005000000210108000800214D -:10E33000004100000000000800210004000440210A -:10E340000010000800000008000300000189000818 -:10E350000000000382000009000800000010080807 -:10E360009088009000050008A00200402105204090 -:10E3700001000103A000001120040002A005040810 -:10E380009003002101000000002120039105820478 -:10E390009005000041000000400000000000000265 -:10E3A000030400A000C008000000000002000000FC -:10E3B000090000A00000000004100000000103019B -:10E3C000040000080000040000001100000808100C -:10E3D00040000000000000000000400000000510A8 -:10E3E0000300080200020800000000010584840008 -:10E3F00085A004100410031040820083410000A097 -:10E40000030803000882088805820890C1004002C2 -:10E41000410100A008000002A00208030800C0009B -:10E420008210000008000408A00008100800000284 -:10E430000800040282808280828508008200080928 -:10E4400004000400C00082048240018008004000F3 -:10E4500008000002000008008220004002C083097A -:10E4600000402021881020008210040090410411F7 -:10E4700008200820089104828300A1020840820439 -:10E480002000C009000090020810A04004402004B1 -:10E49000880900020002009000A100A00210000400 -:10E4A00000A000000200000004000400040100209D -:10E4B00000010000000100204120032000001000A6 -:10E4C0000000001080000888040000902004000074 -:10E4D0000900C1402141000002080009200002207B -:10E4E000208803048304058540900001400008084B -:10E4F00083200000400120042002208204C1051076 -:10E50000008491A009A041A01090890841C008088A -:10E51000842003202085000400210021082182118D -:10E520000000820000088241000000000804002171 -:10E530000000004182000011000082008200000003 -:10E540000000A0050040000082C000910008820089 -:10E55000001100410000004000000000A000000089 -:10E560000040042100038240204000402000C00001 -:10E570009021200004032040000005C00902202053 -:10E58000C10500088208080384100000082109045E -:10E5900040009090A0210004004000000000000016 -:10E5A00000000000000000A010200000000000009B -:10E5B0000000000000000000080005200000050029 -:10E5C0000000000009000000002002040004000216 -:10E5D000100000000000002000000000000000907B -:10E5E00000840000000000202000C0000490000013 -:10E5F000000000008890840084000000C0028400B5 -:10E600008005041000A00090100008C00500000064 -:10E61000088380A02104051009C102020003012023 -:10E620002021011000030000C000000000080020AD -:10E630008208000000000041004108004000C000C6 -:10E64000880000000000A004000800020021004132 -:10E650000000080590840404010000210000A000CF -:10E660000404000801008804080820021000880043 -:10E6700088001004001040081010840041004088F9 -:10E6800009030004010890009002880088211040CE -:10E690004104C0000000824190800021400500003C -:10E6A00040002002400100000000000000000000C7 -:10E6B000001000004040000003C00000000000C047 -:10E6C00002C0088400002000099002002008000019 -:10E6D000020000000000110200A0088420000000D9 -:10E6E0004088040200C0202000082104001000C05F -:10E6F0001000401021C0404020880200020220008B -:10E700008902840011C0408200004104040400001A -:10E710004191400520C0200008A002041000A088FC -:10E7200000000500C0000000000100000200000021 -:10E7300000000100020000000000020004000000D0 -:10E7400083820108404008040404900084828211FE -:10E75000A102041090408211C0004000A00082007D -:10E76000000040C000024040C01100000000020054 -:10E770000000C0048202A005C04110100308888474 -:10E780009082100090C0880040909101000091009C -:10E79000000008A000A0880508A1010300880189E5 -:10E7A000000800008300800000000040041080404A -:10E7B000000200002000800000004000A100800056 -:10E7C0000000040021008000000003118403808504 -:10E7D00080C01189C121110080888004024180100D -:10E7E00080200000401021100041002000000200A5 -:10E7F0000800000000900588000480408283218585 -:10E80000051180C08002A010211080891011002104 -:10E81000900400008085042040058010021100084B -:10E82000028800A0840084008520831041800200BB -:10E830000340024180000000000080000000000052 -:10E84000000000032100C0042000820988804004E9 -:10E8500004008910808041031011094100008000EC -:10E86000802100000000400002214000C004050398 -:10E87000400005100200890020009140800088823D -:10E88000830983109000900520848810C1838085BF -:10E8900090809121040011200300080200080084E8 -:10E8A00021210209200009204000040083090040C2 -:10E8B000000000000101020088004000100000A0DC -:10E8C0004000000000018288030341901100080409 -:10E8D0000500000090400290C001C14102C120002B -:10E8E0000800A001040000004040830040401101E6 -:10E8F000400083008500C19040001100A10102008A -:10E90000889110044089080489A01109891108051B -:10E9100090904102910190000091000001010010CF -:10E920000011010000A00100000100000001000032 -:10E930000000000082000001000000010001000151 -:10E940000000000000000001020200080041C010A9 -:10E950009002008800901000A090010901419003EE -:10E9600000400002040000040000408800820041D2 -:10E97000A0890000040000000000C0900001A10276 -:10E98000A089090305080911030500020810900475 -:10E9900090C10088010120000189C002C010A1833C -:10E9A0000904100010001000900000040002002173 -:10E9B000201000090320054000030002001000039E -:10E9C0000002000300100004000380900084002176 -:10E9D00000008020050520C1801000000883050884 -:10E9E0000411000402410403008400000002110429 -:10E9F0004005042000110021000909108041030393 -:10EA0000C0101004409011A0C021822005C091A127 -:10EA10000420850800001010000411110000C1112D -:10EA2000C0A102900000A1008500000404000200C3 -:10EA30002100040204800320050011200000004092 -:10EA4000008000001000040404000400C040020024 -:10EA500020000405838311100280030380C09011FD -:10EA6000030010040004000000800000000004C047 -:10EA7000C000200008110004000000000004004055 -:10EA80000000008000002190402190912008089112 -:10EA90008440201140051000119104800003A14022 -:10EAA00090020900200003910810000000030100FB -:10EAB000000201020101004000010000000100000D -:10EAC00000210008000000000020000000000304F6 -:10EAD0004110C0880300900288888890020010C00E -:10EAE000054105C0080000000002004000000000D1 -:10EAF00090080888A102100000A0004000900001CA -:10EB0000000000040010000089044110911102006F -:10EB1000058310100105000101000191008400012E -:10EB20009100050020000000024040011000880113 -:10EB30000000000000000021480000E0000000127A -:10EB400000000000000000000000000000000000C5 -:10EB50000081000007000000880000E007000000BE -:10EB6000008100E00700812100000000000060003B -:10EB70000000818100E007000000000000E00000CC -:10EB80000000810000E000008282000000E0070039 -:10EB90000000000000E007000000840000E000002A -:10EBA0000000008100E007005000000000E00000CD -:10EBB0000000000000000000000000000000000055 -:10EBC0000000000000000000000000000000000045 -:10EBD00000003CF63C00FF040004C3F0C3F0CFC6C5 -:10EBE000CFC609006F66000EFF0E00000000000097 -:10EBF0000000000024BD24B4C366C3600000000010 -:10EC000000000000000000000000E70042DB42DBE3 -:10EC100080E089E96699FF9909C0F9C00000000009 -:10EC2000242400000FFF0F0000200000909F03032A -:10EC300000000000000000000000000000000000D4 -:10EC400000000000000000000000000000000000C4 -:10EC5000000000003C063C00FF1C001CC3FFC3007A -:10EC6000C9C0C9C008006E660000FF0000000000B7 -:10EC700000000101000024242424C306C300000076 -:10EC8000000000000000000000000000DB0006069D -:10EC90009F9F86E68FEF66FFFFFF09CFF9CF000049 -:10ECA0000000242400000FFF0F0000000000909FD0 -:10ECB000F3F300000000000000000000000000006E +:10ECB0000000000000000000000000000000000054 :10ECC0000000000000000000000000000000000044 :10ECD0000000000000000000000000000000000034 :10ECE0000000000000000000000000000000000024 @@ -159480,479 +159480,479 @@ :10ED00000000000000000000000000000000000003 :10ED100000000000000000000000000000000000F3 :10ED200000000000000000000000000000000000E3 -:10ED300000000000000000000000000024242F2438 -:10ED400000000000000000000000000024002F0F61 -:10ED500000000000060606066C0C6C6C00990C990D -:10ED60001B1BDBDB2D2DBDBD0F006F606E086E0819 -:10ED7000000000000606060600000FEF00E00C99F8 -:10ED80003C99000000002F0F0F0F0C0C0C0C000022 -:10ED90000019F00099C30003006324182418000030 -:10EDA000020200000000000000043C003C000000E3 -:10EDB0000000CF0CCFCF0000000000000000242492 -:10EDC00024240000000000000000000000000000FB -:10EDD0000F0F00000000060606060C0C0C0C009934 -:10EDE0000F991B1B18182424B4B40F003F30660081 -:10EDF0007E1800000000063E060600000F0F00000F -:10EE00000099309900000000240000000C6E0C0CEA -:10EE100000000010F0FF99C300000000241824181F -:10EE20000F0002020000000000000000600060FF10 -:10EE300000000000FFFFBDBD0000000000610006F3 -:10EE4000000D00000061000080010000006100066C -:10EE5000000D000000610006000D000100610026A9 -:10EE6000000D000000610008800100000061002129 -:10EE70000001000000610006000D000100000061BB -:10EE800000208001000000610007000D000000610B -:10EE900000068005000105610A0F051D00A08561BF -:10EEA0000A0F051D00A100610001C0010000006102 -:10EEB0000027001D000080610007000900003CFFE2 -:10EEC0003C3D080FFFFF000000452878287D00002A -:10EED0000000E8E83CFF3E0A3C000014F0F4003C6F -:10EEE000E8E853F353F3F0F03C14A0FFA000C3553F -:10EEF000C355FA50FF55000000000080FFFF0000DE -:10EF00000015FF158782878700000000FF55AA00C3 -:10EF100000000000FAAA141481C3000000000020C1 -:10EF200045518AA207D70D7DFF00F505000AFFFABB -:10EF3000000600000000F500AA005500FFFF0000D9 -:10EF40003C3D3C3D0808FFFFFF00FF452828282DD9 -:10EF500000000000E8E800C33C003C000000F0F0C6 -:10EF6000C3FFE8E803A303A3F0F0280030FF30005C -:10EF7000C30FC30FAA00AF0500000000008000808F -:10EF800000000010FF1082828282000000004B4BC4 -:10EF90004B4B000000005000141481C3000000001F -:10EFA0000000CFF3CFF3D7077D0DFF00F505000A72 -:10EFB000FFFA000F000000005F00AA005500FFFFED -:10EFC000000000000000000040004B4B4141280FB2 -:10EFD0003C0F0000000000000000000000000000E6 -:10EFE000000000000000F5F50505FF540054FFFF88 -:10EFF0000000D7D71414FAFFFA0005053D050000FC -:10F000000000000000FF00FF38FF38000000000093 -:10F010007F00FF00D7EBD0E0C0CFC0CF0606960040 -:10F02000C3FF81A50000000007D00D70FFF50A00A6 -:10F0300000FF0AFA00000000300C300CF5C1C1F5E9 -:10F040000F05050F00000000000040004B414B4140 -:10F05000000F140F0000000000000000000000007E -:10F060000000000000000000CFC0CFC0FF0400047B -:10F0700028A028A0D714D71450FF50000505050577 -:10F0800000000000000000000E0E08FF0800000055 -:10F0900000007FFFFFFFD0E0D7EBC0CFC0CF0F0F46 -:10F0A000FF00FFC3A58108000000D7D77D7DFFF5D5 -:10F0B0000A0000FF0AFA2080A0A0300C300CFAC22F -:10F0C000C2FA000000002000000000002000200024 -:10F0D0000000200084000000000000008480880000 -:10F0E00020040000000804000000000021000000CF -:10F0F0000084000002800800A000890002808400D3 -:10F1000020034000880000032000040000000400E9 -:10F1100041008200000085100500841020002004BA -:10F12000200303002000840489004109040020001A -:10F13000050000098885210220404000050089085B -:10F140001004050020200110100000000000410004 -:10F150000000400000000000400000000002200409 -:10F160000000000000000004000000000000020099 -:10F17000000000110000001080000040020000208C -:10F1800010004000000000000000040040000000EB -:10F1900020824000000040000200200040400000AB -:10F1A0004005100088000000000008A0820009004F -:10F1B000090004020000002004010900800284000C -:10F1C00004002102400000010202000000000004CF -:10F1D00002030003000000000240000002000000E3 -:10F1E000000400090209040900802000A0100009A1 -:10F1F000020008800220000002200210040000002B -:10F2000002090320000389100009000000410400E6 -:10F2100082088400850383000500020400100204B4 -:10F2200000000820011002000000081084094000BE -:10F23000000084090010820004000402020040C0A3 -:10F240000009048088080440010308400084008805 -:10F25000000800080008008400000200008400107C -:10F2600000400001100000080082001000000008AB -:10F27000008480C000040901000000110005840022 -:10F28000000000084010000808000584000000008D -:10F290000084000000102008208240008009000047 -:10F2A000000100C08205404020100004808420003E -:10F2B00084C00908001020080008000040100484E1 -:10F2C000A00240084002048800080888800000006E -:10F2D00000000000400004000000900084000008CE -:10F2E0000009000000080000000304000000000501 -:10F2F0000009000500004040000500000004A000D7 -:10F3000000100005004000050021000390050000EA -:10F3100000038210C00001000000010841210040EC -:10F32000011109088808040889410041844190417D -:10F330008403410000419120002102058841840896 -:10F3400000081103000320000404080300404020CB -:10F3500000000308000280A0000000002100000857 -:10F3600000100000088800000800000003004000B2 -:10F37000101000A020000008000800A000000009F4 -:10F380000300002002C00302008200000008000801 -:10F39000000000000309000008A000104000201039 -:10F3A000000220004010400000C00808020020A019 -:10F3B000040200C0841041880400048411A041406C -:10F3C0000300401040000000410003A12182001111 -:10F3D00083A082410000040000058200A000A0007C -:10F3E00008000011000082404004A0094004A0056C -:10F3F000000208000005C004A00008110005080470 -:10F4000008000000040000800804080000008811C3 -:10F4100000050000901100001000A0000009A021CC -:10F4200000024040204108098411400010040011EE -:10F4300004000840A10390090404020940000809DF -:10F44000A0054011048005A008038440A00908110C -:10F450008402410011000000210000000000211082 -:10F46000000000000000024000A08485008400A08D -:10F47000000021001100110400002140000000885C -:10F480000041000000008040002000000008004013 -:10F490000000200000000900000440880000000077 -:10F4A000001000008000A1000000031084A000886C -:10F4B0000008110800022000000080000400008401 -:10F4C00008A0000290A091108410008811A00808E4 -:10F4D00000000001202000000040000000000000AB -:10F4E000000000008900000000210002000000026E -:10F4F00000001000820000030000A00001000000D6 -:10F50000C000000000210000040000000000000016 -:10F5100000000000900000008410001000008288AD -:10F52000000090002003A0400989402000040190C1 -:10F53000000940110011C00000020011C010400974 -:10F5400082A1049001040103908041008221040003 -:10F55000C020210204040080000008010300110003 -:10F5600000000084000040000900001000000000BE -:10F5700000090000040000000000200000000288D4 -:10F5800002000000008800C00090890011024002C3 -:10F59000040000000000000800000202100400A0A7 -:10F5A000000200000000830000410402000100018D -:10F5B00004044100034020C02082004008C00240F3 -:10F5C000A0022120A12004000420002088001004B3 -:10F5D0008510009184888209202082098204080015 -:10F5E00000000000000000030020820000038400EF -:10F5F0000800000000004000082100090009001078 -:10F6000000008811000800400004002100050008E7 -:10F610000020000002049040030000009002040556 -:10F620000041084182200021400340004008C105FC -:10F6300005404080100500042000829004108200E4 -:10F64000820000044041040500414080C11082094D -:10F65000820440008200000404040004000008004A -:10F660001100000000000000000002000300020082 -:10F670000090000000A002400000200000000900EF -:10F6800000000090000000200200000000880284BA -:10F69000000000210300C0900000400000000001B5 -:10F6A0002140001080000040000000000800110010 -:10F6B0002000A02008200000110000020402000029 -:10F6C00000000000000005000000000082020400AD -:10F6D00000C00400080000000000800008010400D1 -:10F6E00000000800020000000000200000000000F0 -:10F6F0000100A00000000000000000010000080858 -:10F7000000080088102010840089828988080184FC -:10F71000009000000000A0850108080210210000F0 -:10F7200000A0019004C0000900C00190C010200397 -:10F73000A0C08488828882080008018888880088A0 -:10F740004090010210054088C0040090C0080000ED -:10F7500001900401C0100000081091C0040982212A -:10F760000000400080008000000005000000000054 -:10F7700000000800200000000005004000080020F4 -:10F7800080800080000000000209210200A000200B -:10F79000210000000000000080080389801100089B -:10F7A00000000982082180000008021108024102BD -:10F7B00000888211200020028080009110040084C3 -:10F7C000001183020820008280008580098000806B -:10F7D000000011000408004109000984C104C0C0F0 -:10F7E0008010000000008000000000000000000009 -:10F7F0000000000000000000000000008000000089 -:10F8000000008000008880800000400002048280A8 -:10F81000A00400000000000080008000000980407B -:10F82000000000000000002000000000110504C1DD -:10F830002082081000400004808500A00000801194 -:10F84000800080000080004080848010840041217E -:10F850009184800041000541092003841020A0A16B -:10F860000410A08540004000A000840000000000BB -:10F8700000000000000000000000000090000800F0 -:10F880008800C0000800008384A0008484028901ED -:10F89000A108090084009000000090004000A00032 -:10F8A0000888A0A000000000000090C000000184B3 -:10F8B000001100A1000004821088A0408405080007 -:10F8C0008200A000080200089085A010040905002D -:10F8D0000082090990000020004100900105218963 -:10F8E000850883889108008400A00040000900007A -:10F8F0000000000100010000000000000101000004 -:10F90000000000000000C00200C000C0094088A044 -:10F9100000850508C00088840290009002029004CF -:10F920000005000310880000040001000000A00191 -:10F930000840110908850985048310A1051140417B -:10F9400004418421900004C191A100A002A084215F -:10F9500091040000A090000300010100820110004A -:10F9600003C108C04008200200400002008500C01A -:10F970000005000800051110000400030010040336 -:10F980000000000041000000808000000000A10095 -:10F99000000441020282801000000000008080808C -:10F9A000004020200240008900000009021041416F -:10F9B0000040808891C0C103024040A080A091C057 -:10F9C00005C08082054085208020881100820021AA -:10F9D0008008A0840041808400820508020800217C -:10F9E0009000A008A00382908984004000000000DD -:10F9F0000000000000000000000000000002000005 -:10FA00000000000200000080000080008000000074 -:10FA10008000104002C002004103000800218080E5 -:10FA200000000000000000000000000080048000D2 -:10FA300000808000040820110804030289210308C3 -:10FA400041800800000880000000000021110940EA -:10FA500089911100802000050080000021044009E8 -:10FA60000500400421100004038010410000001034 -:10FA7000000800000000000000000000000000007E -:10FA800000000000000000200008000008000840FE -:10FA90008808A000009001C0C10888008200000012 -:10FAA000089000000000041000C0C0000000080022 -:10FAB000200488080400C020100190019000040177 -:10FAC00088A020101100020010020008000011019F -:10FAD00002094011C00090000000009004000505DC -:10FAE000050001009100834082C1000889010000E7 +:10ED300000000000000000000000000000000000D3 +:10ED400000000000FFFF00000000000000000000C5 +:10ED50009F9F9090D299D200000000000000000018 +:10ED600000000000000000000000000000000000A3 +:10ED700099990099000000000000000000000000C8 +:10ED80000000000000000000000000000000000083 +:10ED90000000000000000000000000000000000073 +:10EDA0000000000000000000000000000000000063 +:10EDB0000000000000000000000000000000000053 +:10EDC0000000000000000000000000000000000043 +:10EDD0000000F303F303D2FFD2660000000000003E +:10EDE0000000000000000000000000000000000023 +:10EDF0000000FF996699000000000000000000007C +:10EE00000000000000000000000000000000000002 +:10EE100000000000000000000000000000000000F2 +:10EE200000000000000000000000000000000000E2 +:10EE300000000000000000000000000000000000D2 +:10EE40000000000005000A06054C00A800000000B4 +:10EE5000000000000000000000C0000000000000F2 +:10EE600000000000000000000000000000000000A2 +:10EE70000000000000003000000000000000000062 +:10EE80000000000000000000000000000000000082 +:10EE90000000000000000000000000000000000072 +:10EEA0000000000000000000000000000000006101 +:10EEB0000006000D0000000000000000000000003F +:10EEC0000000000000000000FF0000FF0000000044 +:10EED0000000000000000000000000000000000032 +:10EEE0000000000000000000000000000000000022 +:10EEF0000000000000000000000000000000000012 +:10EF00000000000000000000000000000000000001 +:10EF100000000000000000000000000000000000F1 +:10EF200000000000000000000000000000000000E1 +:10EF3000008A8A8A00000000000000000000000033 +:10EF400000000000000000000000FF0000FF0000C3 +:10EF500000000000000000000000000000000000B1 +:10EF600000000000000000000000000000000000A1 +:10EF70000000000000000000000000000000000091 +:10EF80000000000000000000000000000000000081 +:10EF90000000000000000000000000000000000071 +:10EFA0000000000000000000000000000000000061 +:10EFB000000000CFCFCF00000000000000000000E4 +:10EFC000000000000000000000000000FF0000FF43 +:10EFD0000000000000000000000000000000000031 +:10EFE0000000000000000000000000000000000021 +:10EFF0000000000000000000000000000000000011 +:10F000000000000000000000000000000000000000 +:10F0100000000000000000000000000000000000F0 +:10F0200000000000000000000000000000000000E0 +:10F0300000000000000000000000000000000000D0 +:10F040000000000000000000000000000000FF00C1 +:10F0500000FF0000000000000000000000000000B1 +:10F0600000000000000000000000000000000000A0 +:10F070000000000000000000000000000000000090 +:10F080000000000000000000000000000000000080 +:10F090000000000000000000000000000000000070 +:10F0A0000000000000000000000000000000000060 +:10F0B0000000000000000000000000000000000050 +:10F0C000000000000000000000000000C000000080 +:10F0D0000000000000000000000000000000000030 +:10F0E0000000000000000000000000000000000020 +:10F0F000000000000000000000000000840000008C +:10F1000040800004000400000000000000000080B7 +:10F11000000000000000108000000000000020003F +:10F12000400020000000400000000000000004003B +:10F13000400000000000400000000000000000054A +:10F1400040000000000088000000000000200000D7 +:10F150004000000040000000000000A0000000008F +:10F16000000000000000000000000000000000009F +:10F17000000040000000000000000000000000004F +:10F18000000000020001000100000000000000007B +:10F19000004010024000400000401000000000004D +:10F1A00000001000008200000000000000000000CD +:10F1B000000000000000000000000000400000000F +:10F1C00000002000400000000000000000000000DF +:10F1D000000000000000000000000000000002002D +:10F1E000000000000000000000000000000000001F +:10F1F000000000000000000000000000000000000F +:10F200000000840003000000011000000100002045 +:10F2100000002008000000000000010000000000C5 +:10F2200000000000000000000000000000000000DE +:10F2300000000000020000000000000002000000CA +:10F240000000000000410200000002000000000079 +:10F2500000000000000000000000000000000000AE +:10F26000000800000008000800000008001000006E +:10F27000000000000000000000000000000000008E +:10F280000040000000840288000020C00000200030 +:10F2900000010000800000000000000004000000E9 +:10F2A0000008000000000000400000000000000016 +:10F2B000000000080008000000000000000000003E +:10F2C0000008000000000000000000000000000036 +:10F2D000000000000000000000000000000000002E +:10F2E000000000000000000000000000000000001E +:10F2F000000000000000000000000000000000000E +:10F3000000000000000001000000002000000000DC +:10F31000000000000000004000410000000000006C +:10F3200000000000000000000000000000000000DD +:10F3300000000000100000000000000000000000BD +:10F3400000000000000000000000000000000000BD +:10F3500000000000000000000000000000000000AD +:10F360000000000003000300000000000000001087 +:10F37000000000000000000000000000000000008D +:10F380000000090000000000100000000001000063 +:10F39000000000000000000000000000000000006D +:10F3A000000000000000000000000000000000005D +:10F3B000000000000000000000000000100000003D +:10F3C000000000000000000000000000000000003D +:10F3D000080800000000100082000000000000008B +:10F3E000000000000000000000000000000000001D +:10F3F00000000000000000000000000000000021EC +:10F400000000000000008811000001C00102A040BF +:10F4100088400000C0000100010000000020000042 +:10F4200000200000000000000000000000000000BC +:10F4300000000000000000000000000000000000CC +:10F4400000000800000000000000000000000000B4 +:10F450000000000000000000080008100300080081 +:10F46000000000000000000000000000000000009C +:10F47000000000000000000000000000000000008C +:10F480000000000000000000000000000421040053 +:10F490000001000100000000200020080000000121 +:10F4A00000000001000000000000000000000082D9 +:10F4B000000000000000000000000000000000004C +:10F4C00000000000000000080000000000000082B2 +:10F4D000000000000000000000000000000000002C +:10F4E000000000000000000000000000000000001C +:10F4F000000000000000000000000000000000000C +:10F5000000000000000000000000000000002100DA +:10F5100010000200890000000000A00400000003A9 +:10F520000011000000200020000000000004000086 +:10F5300000000000000000000000000000000008C3 +:10F5400000000000000000000000000000000000BB +:10F5500000000000000000000000000000C00000EB +:10F560000000000000000084000000000000000017 +:10F5700009000000008804000000000000000800EE +:10F58000000000001000000000000000000000006B +:10F5900010108988801002020000000000010000A5 +:10F5A0000000000000000001000100000000000059 +:10F5B000000000000000400000000000000000000B +:10F5C000000000000000000000000000000000003B +:10F5D00008A0000000000000000000000000000083 +:10F5E000000000000000000000000000000000001B +:10F5F0000002000000000000000000000000000009 +:10F6000000000000000000000000000000000200F8 +:10F610000000400004000000010400000020C020A1 +:10F6200001800109000000850011000000000002B7 +:10F6300000000000000000000000000000000000CA +:10F6400000000000000000000000000000000000BA +:10F65000000000000000080000000000000800009A +:10F66000000000000000000000000000000000009A +:10F67000000000000000000000000000000000008A +:10F680000000000000000000000000000000000872 +:10F69000000000A0001000000000040100000001B4 +:10F6A000000104040400000000200000000000002D +:10F6B0000008000000000000000000000000000042 +:10F6C000000000000000000000000000000000003A +:10F6D000000800000000000400000000000000001E +:10F6E000000000000000000000000000000000001A +:10F6F000000000000000000000000000000000000A +:10F7000000000000000000000000000000000000F9 +:10F7100000000000000000008800000000900003CE +:10F7200001C000200008000400C0004000C000909C +:10F7300000000000000000000000000000000000C9 +:10F7400000000000000000000000000000000000B9 +:10F7500000000000000000000000000000000000A9 +:10F760000000000000000000000000000000000099 +:10F770000000000000000000000000000000000089 +:10F780000000000000000000000000000000000079 +:10F790000000000000000900000080000000008060 +:10F7A0000000118000804080000000800080000088 +:10F7B0000000000000000000000000000000000049 +:10F7C0000000000000000000000000000000000039 +:10F7D0000000000000000000000000000000000029 +:10F7E0000000000000000000000000000000000019 +:10F7F0000000000000000000000000000000000009 +:10F8000000000000000000000000000000000000F8 +:10F8100000000000000000000000208002800404BE +:10F8200041910000000500A000A0008000000085BC +:10F8300000040000000000000000000000000000C4 +:10F8400000000000000000000000000000000000B8 +:10F8500000000000000000000000000000000000A8 +:10F860000000000000000000000000000000000098 +:10F870000000000000000000000000000000000088 +:10F880000000000000000000000000000000000078 +:10F8900000000000000000000000000001400084A3 +:10F8A0000101010800000000000800110002000032 +:10F8B000000800850040000000000000000000007B +:10F8C0000000000000000000000000000000000038 +:10F8D0000000000000000000000000000000000028 +:10F8E0000000000000000000000000000000000018 +:10F8F0000000000000000000000000000000000008 +:10F9000000000000000000000000000000000000F7 +:10F9100000000000000000000000000000000009DE +:10F920000000C00101010000080002004000880042 +:10F930000500000040001000000000000000000072 +:10F9400000000000000000000000000000000000B7 +:10F9500000000000000000000000000000000000A7 +:10F960000000000000000000000000000000000097 +:10F970000000000000000000000000000000000087 +:10F980000000000000000000000000000000000077 +:10F990000000000000000000000000000000000067 +:10F9A00011A00004800504410000110080008000C7 +:10F9B00003000500000000008000000000000000BF +:10F9C0000000000000000000000000000000000037 +:10F9D0000000000000000000000000000000000027 +:10F9E0000000000000000000000000000000000017 +:10F9F0000000000000000000000000000000000007 +:10FA000000000000000000000000000000000000F6 +:10FA100000000000000000000000000000000000E6 +:10FA200000000900038290000300000080080040ED +:10FA300080000080000000020000000000000000C4 +:10FA400000000000000000000000000000000000B6 +:10FA500000000000000000000000000000000000A6 +:10FA60000000000000000000000000000000000096 +:10FA70000000000000000000000000000000000086 +:10FA80000000000000000000000000000000000076 +:10FA90000000000000000000000000000000000066 +:10FAA0000000000001000109910000000000900129 +:10FAB00082000800049020002001C00040000000E7 +:10FAC0000000000000000000000000000000000036 +:10FAD0000000000000000000000000000000000026 +:10FAE0000000000000000000000000000000000016 :10FAF0000000000000000000000000000000000006 -:10FB000000E0000000000000000000000000000015 -:10FB1000000000008400810000E0070041820041F5 -:10FB200000000700000000000000000000000000CE -:10FB30000000000000000000000000E00000600085 -:10FB4000000000E007000000008100000700000046 -:10FB5000880000E007000000810600E00700420086 -:10FB6000810000E007004100000000E00700410ABA -:10FB700000000000C3FFC30F0000000000000000F1 +:10FB000000000000000000000000000000000000F5 +:10FB100000000000000000000000000000000000E5 +:10FB2000000000000000000A006006000011000054 +:10FB30004182006006000000008200000600000014 +:10FB400000000000000000000000000000000000B5 +:10FB500000000000000000000000000000000000A5 +:10FB60000000000000000000000000000000000095 +:10FB70000000000000000000000000000000000085 :10FB80000000000000000000000000000000000075 -:10FB900003050305008A0080B0B0B0B0000000008B -:10FBA0000F0FFFFF00F30CFF55FF55FF3030000033 -:10FBB0000000FF000AD70000000000C0C382FC0C58 -:10FBC000FCFCFF0F000F000000B200FF00003C3CF7 -:10FBD0000F0F7D7D4141000000E00000FFFF007D30 -:10FBE00082FF0055C3000000000055005500F3508F -:10FBF000035000000000FF50FF5000000000000014 +:10FB90000000000000000000000000000000000065 +:10FBA0000000000000000000F0F000003C3C0000FD +:10FBB0000000D3D0131000000000E545E040000035 +:10FBC0000000000000000000000000000000000035 +:10FBD0000000000000000000000000000000000025 +:10FBE0000000000000000000000000000000000015 +:10FBF0000000000000000000000000000000000005 :10FC000000000000000000000000000000000000F4 -:10FC1000000003000305AA8AAA80F0F0F0F020009B -:10FC200020000F0FFFFF00F30CFFFFC3FFC3140002 -:10FC300014000000FFFF0AD70000000000C000828F -:10FC40000C0C0CFC55C355C300FF00B2000000FFB4 -:10FC50003C3C0F0F3F033F03000000D028287D7D70 -:10FC6000007D82FFFF55C30000000000C3FFC300FA -:10FC7000F35F035F00000000BF0000000000000011 +:10FC100000000000000000000000000000000000E4 +:10FC200000000000000000000000F0F000003C3C7C +:10FC300000000000DFDC1F1C00000000EF4FEA4A5C +:10FC400000000000000000000000000000000000B4 +:10FC500000000000000000000000000000000000A4 +:10FC60000000000000000000000000000000000094 +:10FC70000000000000000000000000000000000084 :10FC80000000000000000000000000000000000074 -:10FC9000FFFFFFFF500030003CEB3CEB00007D001D -:10FCA000C303C00055FF5555FFFF3030030AF30A68 -:10FCB00055555D5500000F5F0000AA55AA55000F6D -:10FCC000005C00000000AAC3AAC33C3C00FF00A0E7 -:10FCD0000080AAAA752034F538FA05000000FF005C -:10FCE000FF0FFFFFC3005A5A000000000000030A84 -:10FCF000F30A4141EBEB00000000BF000F000000E1 +:10FC90000000000000000000000000000000000064 +:10FCA00000000000000000000000000000003C3CDC +:10FCB0000000555500003E3EFF0000000000F0CA65 +:10FCC000FFFF000000000000000000000000000036 +:10FCD0000000000000000000000000000000000024 +:10FCE0000000000000000000000000000000000014 +:10FCF0000000000000000000000000000000000004 :10FD000000000000000000000000000000000000F3 -:10FD1000000000003D0550F030F0FFEBFFEBFFFF6F -:10FD20000F0FC101C00055005555CFCF000003FA99 -:10FD3000F3FA00000C00000007570000000000006C -:10FD40000000005C0000000000F0FFF05555000FBF -:10FD5000008000A000007520C1F5C2FA000000007C -:10FD6000FF00F0003CFF00005A5A000000000000B5 -:10FD700003FAF3FA50FA50FA00610006000D000190 -:10FD800000610006000D000000610007000D00008A -:10FD900000610006000D00000000300000000000BF -:10FDA0008061000880010000800000380000000031 -:10FDB00000614006000D0001000000610006000D1A -:10FDC000000000613007000D000005610A0F050DFD -:10FDD00000A080610026000D000105610A0A850D62 -:10FDE00000A10061003E8005000005610A0A850D42 -:10FDF00000A085614A0F050D00A000000000003C36 -:10FE0000C3FF00000000E8E8E8E80000000092D32B -:10FE1000BAFB00000000000000000000000000002D -:10FE20000000C505C5055000FAAA0000000000004A -:10FE3000000000000000000000FF000000000000C3 -:10FE4000F382F3BED7D0D0D7070BD0E0000000007C -:10FE5000020202FF000000003A3A0FFFAA75007587 -:10FE6000458A152A00000000C0C0C0C000FF000085 -:10FE7000EB00EB0006060000070BD7EB00000000CC -:10FE8000E8E8E8E80000000000C33CFF00000000D4 -:10FE90001051387900000000000000000000000050 -:10FEA00000000000C50505051000BAAA000000000A -:10FEB0000000000000000000202020FF00000000E3 -:10FEC0000000308230BEEBE0E0EBD7EBD7EB00D0A8 -:10FED00000E0000000FF000000003A3A00F0AA2015 -:10FEE0000020CFCF3F3F000000002828EB2855031B -:10FEF0005503AF00AF000F0F0000D7EB070B00005A +:10FD100000000000000000000000000000000000E3 +:10FD200000000000000000000000000000000000D3 +:10FD30003C3C000055550000FEFEFF0000000000A6 +:10FD4000F0CA0000000000000000000000000000F9 +:10FD500000000000000000000000000000000000A3 +:10FD60000000000000000000000000000000000093 +:10FD70000000000000000000000000000000000083 +:10FD80000000000000000000000000000000000073 +:10FD90000000000000000000000000000000000063 +:10FDA0000000000000000000000000000000000053 +:10FDB00015602A3E054000A800000561343FC50DCE +:10FDC00000A005003438050000A00000000000007D +:10FDD0000000000000000000000000000000000023 +:10FDE0000000000000000000000000000000000013 +:10FDF0000000000000000000000000000000000003 +:10FE000000000000000000000000000000000000F2 +:10FE100000000000000000000000000000000000E2 +:10FE200000000000000000000000000000000000D2 +:10FE3000000004010802003C303000000000000017 +:10FE400000000000000000000000000000000000B2 +:10FE500000000000000000000000000000000000A2 +:10FE60000000000000000000000000000000000092 +:10FE70000000000000000000000000000000000082 +:10FE80000000000000000000000000000000000072 +:10FE90000000000000000000000000000000000062 +:10FEA0000000000000000000000000000000000052 +:10FEB0000000000010402080003C303000000000B6 +:10FEC0000000000000000000000000000000000032 +:10FED0000000000000000000000000000000000022 +:10FEE0000000000000000000000000000000000012 +:10FEF0000000000000000000000000000000000002 :10FF000000000000000000000000000000000000F1 -:10FF100000000000000000C3F0000000000000002E -:10FF2000000000000000FFFF000080FFB0FF0000A5 -:10FF3000000000000000AA00AAFF0000000000006E -:10FF4000FF55FF5500000000C0A0CFA069690960FF -:10FF5000F0F00F0F00000000C0A0C0AF00000000D4 -:10FF6000F000FF0F0000000000000000C0CFC0CF75 -:10FF70000A5F0A5FAFAF0CFCEEEEEE005555FF00D6 +:10FF100000000000000000000000000000000000E1 +:10FF200000000000000000000000000000000000D1 +:10FF300000000000000000000000003CF3F300009F +:10FF400000000000000000000000000000000000B1 +:10FF500000000000000000000000000000000000A1 +:10FF60000000000000000000000000000000000091 +:10FF70000000000000000000000000000000000081 :10FF80000000000000000000000000000000000071 -:10FF9000000000000000000000C3F0FF00000000AF -:10FFA00000000000000000002D002D008000B000C7 -:10FFB0000000000000000000C3F0C3F000000000DB -:10FFC0000000FF3C003C00000000C0AFCFAFFFFFCF -:10FFD0000FF00000000000000000CFA0CFAF000035 -:10FFE0000000F000FF0F0000000000000000C0CF84 -:10FFF000C0CF0A5F0A5F0F0F0F0F0000EE00C3C3F0 +:10FF90000000000000000000000000000000000061 +:10FFA0000000000000000000000000000000000051 +:10FFB000000000000000000000000000003CF3F31F +:10FFC0000000000000000000000000000000000031 +:10FFD0000000000000000000000000000000000021 +:10FFE0000000000000000000000000000000000011 +:10FFF0000000000000000000000000000000000001 :020000040027D3 -:100000000F0F000082000000880000008800400000 -:1000100020002000200088000400000040080005A7 -:100020000080880000000000041000000000200094 -:100030002000020020002000040004002000010431 -:10004000000800032005880004002000840004004C -:10005000200000090400C000C000200304000000CC -:100060008410000804030200841020090409880099 -:10007000821084028808C000C01020088800020096 -:10008000880005000500000000C0000000400000DE -:10009000000000000000000004000000200000201C -:1000A0001000000200001002000211020082100283 -:1000B000404000000000410000204104000000001A -:1000C000104010010000110000401140000000002D -:1000D0004090100200904000000009004000000025 -:1000E0000002030010042084000000000000000053 -:1000F00000002002000800900000400200000500FF -:1001000000000300200000080000000002000000C2 -:10011000001090000000000588000400001000108E -:1001200000400010900400102040040000058400EE -:1001300008000000840502000040000000000000EC -:1001400000000210400000000000000082000221B8 -:100150000000000000000000000502000000020096 -:100160008240084000800204100904090004820053 -:1001700010400000040004088200820000000440D7 -:100180000241000020000209050400880008001058 -:10019000000004080040008800080008000804006F -:1001A000000800840000000100840010001000001E -:1001B0000000031000840000001004840010000000 -:1001C000008400080008C0000000020411000010B4 -:1001D00000000084020000100000208820882040D9 -:1001E00000100000001000080003008400080084D4 -:1001F000000020080010008800880288000800081D -:100200000004000011A000000002002100020021F3 -:1002100082000000000000211000040900000021FD -:100220000200000000050003000500082000002176 -:100230009000200000410010402100080008000547 -:100240000021904000400041402100000040000893 -:1002500000052009020888009000400800054000C1 -:1002600000080021A01010080002000284100021E4 -:10027000900504210021000800084000000300212F -:100280000005842120058802A00200000000000073 -:100290000300110000000082038800A000C00000DD -:1002A00040000300000000000008080000000000FB -:1002B00000C0410000A000A0000800100082020061 -:1002C000000011082100200000408008000000000C -:1002D0002084418803900082038211004120008223 -:1002E000024041C0000840A0200000001190208280 -:1002F0000582000840400302008808841084200022 -:100300000800030009004100418808080082000934 -:1003100090000840080000000000002100001000CC -:10032000820284100009000040000000010000006B -:1003300082008240000000400000000000008811A0 -:10034000A000C00010000000A00000000009000094 -:10035000820000008204400000040004904000403D -:1003600082009000000000110802080482000000D2 -:1003700082000840C0000400C0110000900000008E -:100380000800000090048204044100009000000274 -:100390000000000803000000000000A000080000AA -:1003A0000010000000000040000000080090401015 -:1003B00000880010000008000000400002820000D9 -:1003C000000000C00000000000000040002000000D -:1003D00000000000000400002000000000104000A9 -:1003E00000840000008400100084008800001000D9 -:1003F00010200004080000000008000200001000A7 -:10040000000000200088022000C0000800C000A0FA -:1004100000C1900000100003000000000041000037 -:100420000000000300000000000004000041000084 -:100430000004A00000410000000000008200000055 -:100440000400002100100000000000000041000036 -:1004500090C0000040000041000002009010000029 -:100460000000080000080021000282400000A009EE -:10047000C02140080000C000000002000005084143 -:100480008200A040C000A02110090000A0000000D0 -:10049000820820080000000000000040000000006A -:1004A0000804000000000000008408840000000030 -:1004B000001040A1000400A0000800A0020800886D -:1004C00000C00020040000040008000000100084A8 -:1004D000008411040000400811000008001011847D -:1004E00000A002C0000004A00884008441204084D1 -:1004F00002A0218489051108038408C0201000107F -:100500000404000000000010038800A009822110EC -:1005100000840921C010000000098400000440008C -:1005200000002000020000210000000020009008D0 -:100530000021000840880000000500000240400043 -:100540000804000000000800080500000000002169 -:10055000000800030000000000000003002102006A -:100560004000880800082000880920088400A003B3 -:100570000011002100090002001000000003040027 -:1005800008000810200400000410020808200009D8 -:10059000080002008221C180000000200004210028 -:1005A000000000000002000000000004000008003D -:1005B0000000009000010009000008000000000297 -:1005C000000000400200210000880000000400003C -:1005D0000000000000000000000000000000090012 -:1005E000009000000000200000000010000000004B -:1005F0001100000000001100202100000000000494 -:1006000002002000000000000000000004020900B9 -:1006100000820000210400C040080000000000002B -:100620000000000000000000008800010000002021 -:10063000048800000000000100000000000000002D -:1006400000000000000000000088010101000040DF -:100650001010000000000001000000000000000079 -:1006600000000000000000000000008801001100F0 -:1006700000208810000000000001000000000000C1 -:1006800000000000000000000000008800000000E2 -:1006900000841010000000000001000000000000B5 -:1006A00000000003090000000041100000080400E1 -:1006B0000000800000000000004100000000000079 -:1006C00000000005000000000011030020080300E6 -:1006D0000000800000000000004100000000000059 -:1006E00000000000000200000000000311004111A2 -:1006F00003000080008000000000004100000000B6 -:10070000000000000002000000000003110008418A -:100710000300008000000000000000410000000015 -:1007200003000000000000000800000002000900B3 -:100730008400000011000000000000008041000063 -:1007400040000000000000000900000010008900C7 -:100750008400000002000000000000008040000053 -:100760000000030000000000000009000000090074 -:1007700010000500000003000010000000008002CF -:10078000000003000000000000000900000010004D -:100790001000210000201000800000000020804197 -:1007A00000000100000000840000010000000000C3 -:1007B000A000094000000000C00000000000C001CF -:1007C0000000010000000000000000000000000028 -:1007D00002002140000000C0A00000000000C00195 -:1007E0000000000001000000008200000000000086 -:1007F0000000410090880000018404010000000016 -:10080000C001000000000000000000000000000027 -:100810000000410090200000008240000000000124 -:10082000C001000000000000010000000000000006 -:1008300002010004000000000000000000000001B0 -:1008400000000000000000000000000000000001A7 -:10085000040000040000000000000000000000018F -:100860000000000000000000000001000000000087 -:100870000001100000040000A100000000000000C2 -:100880000001000000000000000000000000000067 -:100890000001100100040000A000000000000000A2 -:1008A0000001000000000000000004000000000043 -:1008B000000300030000000005000000000000002D -:1008C00000410000000000000000000000000000E7 -:1008D00000108020008000004100000000000000A7 -:1008E00000410000000000000000000002000000C5 -:1008F000000000080002008000001000000000005E -:1009000000000041000000000000000000000000A6 -:10091000000000088020008000001000000000009F -:100920000000004100000000800000C10000000045 -:1009300000208400000000C1000000020000000050 -:1009400000040000048500408000008400000020B6 -:100950000000410000000004000000090000000049 -:100960000000000004A000000000800000C10000A2 -:1009700000000000100000800080800000020000E5 -:1009800000000000000005C00003800000C100005E -:10099000000800004100000000C1800000050000C8 -:1009A00000000000000002200000820000C10000E2 -:1009B000000002010400000000051000000000001B -:1009C0000000000100000182000120000041000041 -:1009D00000018400C00000000090C0000000000082 -:1009E00000000000000001C100000000820000C102 -:1009F000000000001000020000040040840000001D -:100A00000000000000000000000300002000004083 -:100A1000000000010200020000000041020000008E -:100A20000000000000000000018500000000000040 -:100A300000410000000000000000811200E00700FB -:100A40004800000000000000000A00000000000054 -:100A500000000000000000000000411200E007005C -:100A60000000000000000000000A0000000000007C -:100A7000000000410000000000000000881200E0BB -:100A80000700480000000000000000000000000017 -:100A9000000000000000000000000000811200E0E3 -:100AA00007004800000000000000001200000000E5 +:1000000000000000000000000000000000002000D0 +:1000100000000000000000000000000000000000E0 +:1000200000080000000000000000000000000000C8 +:1000300000000000000000000000000000000000C0 +:10004000110000030000000000000000000000009C +:1000500000000000000000000000000000000000A0 +:1000600000002080000000000000020000000000EE +:100070000000000000000000000000000000000080 +:10008000000020000000000000000000400000020E +:10009000009000A000A00000000000000000100080 +:1000A0001000100100000000000800000000100017 +:1000B000100010000000000000000004000010000C +:1000C00000002000000000000000000040000000D0 +:1000D00010001000100000000000000000004000B0 +:1000E0004000000000040000000200400084000006 +:1000F00010000000000040000000000000000000B0 +:1001000000000000A000000000000000000000004F +:100110000000000000008800000000000000000057 +:1001200000000000000000000000000000000000CF +:1001300000000000000000000200000000000000BD +:1001400000000009000000000000000000000000A6 +:100150000000000000000800000000000000020095 +:10016000000000000000000000000000100000007F +:1001700000000000000000000000000000008200FD +:10018000000000000000000000000000000000006F +:100190000000000000000000000800000000000057 +:1001A000000000000000000000000000000000004F +:1001B0000000000000000000000800000000000037 +:1001C0000000000000000000000000000000000827 +:1001D0000000000000000000000000080000000017 +:1001E00000000008000800080008000000000008E7 +:1001F000000000000084000000840008008400006B +:1002000000000008000800080008000000000000CE +:100210000000000000200000C000000000000000FE +:1002200000000000000090004000040000000000FA +:1002300000000000000000000000000000000000BE +:1002400000000000880000000021000000210021C3 +:100250000021000000000008000000080021000844 +:10026000002100000000000000000021002100210A +:1002700000210000000000210000002100210021D9 +:1002800000210021000000210000002100000000EA +:10029000000000000000000000000000000000005E +:1002A000000000000000000000000000000000004E +:1002B000000000000000000000000000000000003E +:1002C000000000000000200000000084000000008A +:1002D00011000500002000000000000000000000E8 +:1002E000000000000000000000000000000000000E +:1002F000008400000000000000000000000000007A +:10030000000000000000000000000000000082006B +:1003100082000000000000000000820000000000D9 +:1003200000000000000000000000000000000000CD +:100330000000000000000000000008000000004174 +:1003400000000000000000000000000000000000AD +:100350000000000900000000000000000011000083 +:10036000000000000000000000000000000000008D +:10037000000000000000002100000000000000005C +:10038000000000000000000000000041000000002C +:10039000000000000000000000000000000000005D +:1003A000000000000000000000000000000000004D +:1003B000000000000000000010000000000000002D +:1003C0000000000000000000000000900088000015 +:1003D000000000000002000000000000400040900B +:1003E000000000000000000000000000004000824B +:1003F00000000000000000000000000000000000FD +:100400000000000000000000040000000000008266 +:1004100010000800000008000000000000001000AC +:10042000A000000000000004000000000000000028 +:100430000080000000000008000000000000000034 +:1004400000000000000000000000000000080000A4 +:100450000000000000000000000800000000000094 +:100460000000000000000000000000000000000884 +:100470000000000000000003000000000041000830 +:100480000000000000000000000000000000000864 +:10049000000000000000000000000000000000005C +:1004A000000000000000000000000000000000004C +:1004B0000000080400000000000000000000000030 +:1004C000000000000400000000000000090000001F +:1004D000030400000000009000840084000010006D +:1004E00000001010000000000000000000000000EC +:1004F00000000000000000000000000000000000FC +:1005000000000000000000000000000000000000EB +:10051000000000000000000008110000840000003E +:1005200002000000000000000000000000000000C9 +:1005300000000000000000000000000000000000BB +:1005400000000000000000000000000000000008A3 +:100550000021000800080000000000000000001159 +:100560000000000200100000000000000000000079 +:100570000008002100080008000000000000000042 +:100580000000000800000000000000000000000063 +:100590000008002100080008000000000000000022 +:1005A000000000000000000000000000000000004B +:1005B000000000000000000000000000000000003B +:1005C000000000000000000000000000000000002B +:1005D0000000009000000000000040001102110027 +:1005E000000000000000000000000000000000000B +:1005F00000000000000000000000000000000000FB +:1006000000000000000000000000000000000000EA +:1006100000000000090000000000000100010001CE +:1006200000C00001040100C001830000050100407A +:1006300000820001400100C0000000002000000016 +:1006400000000000000000000000000000000002A8 +:10065000000000000000000000000000000020007A +:10066000000000000000000000000000000000008A +:100670000002000000000000000000000000000078 +:10068000000000000000000000000000000000006A +:1006900000020000000000000000000000410041D6 +:1006A000004100C000418041008810C140119041CC +:1006B000008000800041804100C0000011008000E7 +:1006C0000000000000000000000000000009090018 +:1006D0000000000000000000000000000000110009 +:1006E0008000000000000000000000000000000981 +:1006F00009000000000000000000000000000000F1 +:1007000000000000000000000000000000000009E0 +:10071000090000000000000000000000000041008F +:100720000300000000804100830000000800080072 +:100730004000000084004100C10000408000000033 +:100740002100000000000000000000000000410047 +:1007500040000082000000000000000000040001D2 +:100760000000210000000000000000000000000068 +:1007700041000300008200000000000000000011A2 +:100780000000090000000000000000000000000060 +:100790004100030000820000000000000000001182 +:1007A00001000100000000C00100C00000000000C6 +:1007B000200082080020C1009100C100004082009A +:1007C0000000000000000000000000000000000029 +:1007D000020003100008C0008800000000000000B4 +:1007E0000000000000000000000000000000000009 +:1007F0000000020003100008C0888800000000000C +:1008000000000000000000000000000000000000E8 +:100810000000020003100008C088880000000000EB +:10082000000000C00001C0C100000000000102C0C3 +:1008300082200003000100C1000000000001000050 +:10084000000000000000C0000000000000000000E8 +:100850000000008800008800000000000000000088 +:100860000000000000000000C000000000000000C8 +:1008700000000000008800000000000000000000F0 +:100880000000000000000000000000000000000068 +:1008900000000000008800000000000000000000D0 +:1008A000000000000080004180C100000000004105 +:1008B00080C1004000C1004100C1000000000041B3 +:1008C0000040000000000000800000000000000068 +:1008D000000000000000000000000900000000000F +:1008E0000000000000000000000080000000000088 +:1008F00000000000000000000000000009000000EF +:1009000000000000000000000000000000000000E7 +:1009100000000000000000000000000009000000CE +:10092000000000000000C100800080C100004140C4 +:10093000800002004100C1418000801000004100A1 +:100940000000800041000000800000C100000000A5 +:1009500000000000000000C1800000110000000045 +:1009600000000000000000000000800000C1000046 +:1009700000000000000000000041800000110000A5 +:100980000000000000000000000080000091000056 +:100990000000000000000000004180000011000085 +:1009A0000000000000000000C1004000C0C10000C5 +:1009B0000100400089000100C1830200C001000065 +:1009C00001000000C00001000000400000C1000064 +:1009D0000000000000000000004182000000000054 +:1009E000000000000000000000000000400000C106 +:1009F0000000000000000000000000058200000070 +:100A000000000000000000000000000008000010CE +:100A1000000000000000000000000005820000004F +:100A200000000000000000000000000000000000C6 +:100A30000042000000000000000081120048070092 +:100A4000480000000000000000000000000000005E +:100A500000110000000000000000810000E0000024 +:100A6000480000000000000000000000000000003E +:100A7000000000110000000000000000810000E004 +:100A8000000048000000000000000000000000001E +:100A9000000000000000000000000000810000E0F5 +:100AA00000004800000000000000000000000000FE :100AB0000000000000000000000000000000000036 :100AC0000000000000000000000000000000000026 :100AD0000000000000000000000000000000000016 @@ -159969,453 +159969,453 @@ :100B80000000000000000000000000000000000065 :100B90000000000000000000000000000000000055 :100BA0000000000000000000000000000000000045 -:100BB000257B000000000000000000000000000095 -:100BC0000000000000000000000000000000DEA4A3 -:100BD000257B000000000000000000000000000075 -:100BE0000000000000000000000000000000DEA483 -:100BF0000000257B00000000000000000000000055 +:100BB000757B000000000000000000000000000045 +:100BC0000000000000000000000000000000DEAE99 +:100BD000747B000000000000000000000000000026 +:100BE0000000000000000000000000000000DE2EF9 +:100BF0000000747B00000000000000000000000006 :100C000000000000000000000000000000000000E4 -:100C1000DEA4257B000000000000000000000000B2 +:100C1000DE2E747B000000000000000000000000D9 :100C200000000000000000000000000000000000C4 -:100C3000DEA4612603400000000000000230A00096 -:100C40000000000000000C4000000000000002C096 -:100C50006486612603400000000000000230A0000E +:100C3000DE2E60C603000000000000000031E0006E +:100C40000000000000000C0000000000000000C0D8 +:100C50006306615603400000000000000230A0005F :100C60000000000000000C4000000000000002C076 -:100C7000648600006126034000000000000002308E +:100C70006A86000061560340000000000000023058 :100C8000A0000000000000000C4000000000000078 -:100C900002C06486612603400000000000000230AC +:100C900002C06A8661560340000000000000023076 :100CA000A0000000000000000C4000000000000058 -:100CB00002C064860000C000200820002010000050 -:100CC00001002000000000000010200010000000C3 -:100CD0000000400000000000C00084004000010847 -:100CE00001800084000084008800001120100400AE -:100CF000880020000003880501A0200021082100B1 -:100D000000000400A004080000000000020004002D -:100D1000020020002104000001000000040420095A -:100D2000040920042004201082100402210004047D -:100D30000000200404004102000000020000000244 -:100D40000000400000001000000000000000000053 -:100D5000000000008000000000024002000080004F -:100D60000800080200200000400040000000410090 -:100D7000000040000000000000404004400040002F -:100D80002000000000000000800000400000800003 -:100D90000000000000004000004040A005022000CC -:100DA0000000000000000000000000000000200221 -:100DB000000000000000000400000000000002002D -:100DC0000000000000000000000000000000000023 -:100DD000820908408200011000000041000000006C -:100DE0000840100008100010000290400000400071 -:100DF0000200020500400200000002410000004025 -:100E000002090000004000008405084108050000B8 -:100E10000010000002000200000202008310001017 -:100E20008240020002410141000002000200004035 -:100E3000030000000000000002100008000000880D -:100E40000908000800000210020000000010000065 -:100E50000088118400080000088400080000008851 -:100E60000010800800C000C102014001008800009D -:100E70008200000800880000000000000010040844 -:100E8000000000000410008802000088800080003C -:100E9000050000010084040000000011000440402F -:100EA00000000084000800104008001004880400BE -:100EB000400002000084000800840084000000411B -:100EC00000008400004000109008000000000003B3 -:100ED000000000000000000200009000002100005F -:100EE0000000080004020000000040100010400054 -:100EF0000005900000000000002100210000000219 -:100F000000092003209000802108054120081008D6 -:100F10009000C000001004000808000082210000BA -:100F20000008A0009003000500080102882184A1A8 -:100F3000002182080489C0030000000800080000A6 -:100F40000000000000000000000821000000000078 -:100F5000000000C00000000000C000000000000011 -:100F600000000000210000822100002041200090AC -:100F7000000000C00000000000000084000000002D -:100F800000820000000000020004A0902090800079 -:100F9000000000A0008200A01108080000A000C00E -:100FA00000C000000008000800822100401121005C -:100FB0000004000000A000040800000000840020DD -:100FC00000000000000010101000000000000000F1 -:100FD0000004004000112000820000410040000099 -:100FE0009010000008000000000590100409400067 -:100FF000A000001100050000100000000000000427 -:101000000000880000000200A000000000090000AD -:101010000405204002400800104008009000C01065 -:101020000000820000008400820040004000101098 -:101030000041A00000000000400482000800000001 -:101040000800020000000000000000C000002100B5 -:101050000000000000000004000008000000000084 -:1010600000840000000820A0000000040088800028 -:1010700008080000000000000090000000000000D0 -:1010800021080000000000400000000003400000B4 -:101090000000000000008090C104008400000004F3 -:1010A00000830000000800000000000080008300B2 -:1010B00000004100030000080000800020900000B4 -:1010C0000388000000000021000000000000000074 -:1010D0000000000000000000000082000008000086 -:1010E000000000001000000000008200000004006A -:1010F000000000000000000500A1002000008205A3 -:1011000000000000000000000000000000000000DF -:10111000002100004110011008800800A1002000FB -:101120001021000001088200002182218400842116 -:101130008202002100000000200001000010004198 -:101140008241000800000000000000000020004074 -:1011500000840000009000A00008000000000000D3 -:1011600000000000000000000000000000900010DF -:10117000200000840000030200C0001000A0000056 -:10118000000000000010000000080010000000A097 -:1011900040080000008820A00882204000000200D3 -:1011A0000010000040084084000000000002100011 -:1011B0000008000800C000A008008000200208828B -:1011C0000800100000C0000000000000880000407F -:1011D00000000021000000000000004100000000AD -:1011E00000000000000004000000080002000240AF -:1011F0000800020000000000002100210010080487 -:10120000000000210004820000000000000400052E -:1012100000000000000000082000200020009000D6 -:101220000010000090000400204008048200080024 -:101230008211041040000205000800400000004137 -:10124000000000040004880488052000008404884D -:10125000200000000000000000C00000000011009D -:101260000000000000000000000009000000000075 -:10127000000000200000000000000000000002004C -:10128000000000000000000000000000000011014C -:101290000000000000001104000000840000009025 -:1012A000020400000084410400000000000000006F -:1012B000000000020000000041000000030011884F -:1012C000000000001100004040000000000000008D -:1012D000000000000000020000000000000000000C -:1012E00000000000000000000200000000000000FC -:1012F0000000000040A1A02000A1020800000000A2 -:1013000000010000000000000000000000000000DC -:101310000000000000000000000000000000C040CD -:10132000008800A00404A08400A004A00090000095 -:10133000000110010000000100000000000003A0F7 -:10134000012011A0100200000000000000000000B9 +:100CB00002C06A8600000000000000000000000082 +:100CC00000000000000000000000000040000000E4 +:100CD0000000000000000000000000000000000014 +:100CE0000000008000004000000000802000100094 +:100CF0000000008000020000000000000000000072 +:100D0000000000000080000020000000008821009A +:100D10000000000001800000000000000000000052 +:100D20000000000000000000200000000000200083 +:100D30000000400041000000000000000000000032 +:100D400000000000000000000000000000000000A3 +:100D500040004100000000000000000200000040D0 +:100D600010000002004000000000000000400002EF +:100D7000C000400000400000000000000000000033 +:100D800040400400004010400000000040000040CF +:100D9000100010020002404000004000000000006F +:100DA00040004000000000000000000000000000C3 +:100DB0000000000080008200000000000000000031 +:100DC0002000000000000000000000000000000003 +:100DD0000000000000000000000000000000000013 +:100DE00000000000000000100000000000000000F3 +:100DF00000000000000000000000000000080000EB +:100E00000008000000000000000000009000000941 +:100E100000000000000000000000000000000000D2 +:100E200000000000000000000200000000000009B7 +:100E300000000000000400050000000000000000A9 +:100E4000000000000000000000000000000800009A +:100E50000000000000000000000000000000000092 +:100E60000000000000000000008400000088000076 +:100E7000000003000000000000000000000000016E +:100E80000000000100000000000000000008000851 +:100E9000000000000008000000000000000000004A +:100EA0000000000000000000000000000008000832 +:100EB0000000000800080001000000000000002100 +:100EC0000000000000000000000000080000000812 +:100ED0000000000000000000000000000000000012 +:100EE0000000000000000000000000000000000002 +:100EF000000000000000000001040021000000804C +:100F00008800000000000000000000000021000038 +:100F1000000000000400002100001000002100007B +:100F20000000002000000021000800000021000057 +:100F3000000000000000004100210000000500004A +:100F4000000000000800080000000300000000008E +:100F50000000000000000000000000000000000091 +:100F60000000000000000000000000000000000081 +:100F70000000000000000008000010010000000058 +:100F8000000400000000000000000000000000005D +:100F90000000000000000000000800000000000049 +:100FA0000000000000000000000000000000000041 +:100FB0000000000000000000000800000000000029 +:100FC0000000000000000000000000000000000021 +:100FD0000000000000000000000000000000000011 +:100FE0000000000000000000000000000000000001 +:100FF000000000102000000001800000000301003C +:10100000000001000409118011800000004000046C +:1010100000000400000500000000000000000000C7 +:1010200000000000000000000000000000000000C0 +:1010300000000000000000080000000000000000A8 +:101040004000002000A000000000000000000000A0 +:101050000000000000000000000000000000000090 +:101060000000000000000000000000000000000080 +:101070000000000000C020000000100420000990C3 +:101080001000000010008000840882200000210071 +:10109000000000A0000000000000000000A0080008 +:1010A000000000A003000008000000000010000085 +:1010B0000000000000820000000800000588008495 +:1010C0000084008400000000000000000000000018 +:1010D0000000000000000000000000000000000010 +:1010E0000000000000000000000000000000000000 +:1010F00000000000000000000420000300040004C1 +:101100000011010400000004040400000000A0001D +:10111000000000000000000000008200C00000008D +:101120000000000000000009000000030000900023 +:10113000002100000000000084000000C00000004A +:101140000000000500040000000000000000000096 +:1011500000000800009008000000080000000000E7 +:1011600000000088080000000000000000000000EF +:10117000000000000000000800080000001002014C +:1011800000010000100100000401800500000000C3 +:101190000000000000000000000800080000000837 +:1011A000000000000000000000000000000000003F +:1011B0000000000000000000000800080000000817 +:1011C000000000000000000100000000000000001E +:1011D000000000000000000000000000000000000F +:1011E00000000000000000000000000000000000FF +:1011F000000000000000000000000041200000008E +:101200002000000001000021000004C00240030093 +:1012100000800004002000000400000040050000E1 +:10122000000000210005000000210000000800006F +:1012300000000000000000000000000000000000AE +:10124000000001000100010001000000000000009A +:10125000000000000000000000000000000000008E +:10126000000000000000000000000000000000007E +:10127000000000000000000000000000008200826A +:101280000000000000001000000000008041850107 +:10129000A00000040000000000000000000000C0EA +:1012A0000000210000A00000000004A000000000D9 +:1012B0000000000000A000200000000000A00000CE +:1012C0000008418220882000208220C00000000009 +:1012D000000000000000000000000000000000000E +:1012E00000000000000000000000000000000000FE +:1012F00000000000000000080000000200000004E0 +:10130000008800080000009000C1000200030000F7 +:1013100000000001A0900002000000880002000808 +:10132000000000020008000201001020000200007E +:1013300000000000000000000000000000000000AD +:101340000000000000000002108884200008000057 :10135000000000000000000000000000000000008D -:1013600000000000000000000000800000000000FD -:10137000000000000000C084002100C000850002C1 -:101380000002000200110000000000000000000048 -:10139000000000000000000000000000110000003C -:1013A00080000000008000808000050080000000B8 -:1013B00000020003002000090010000800200020A7 -:1013C0008800038082808000000000000000000090 -:1013D00000000000000000004000040008000300BE -:1013E000000000000000000000000000800000007D -:1013F00000000000000000000900A0008305A1809B -:1014000000000000000000000000000000000000DC -:101410000000008000000000000000040000000444 -:1014200000000000804180888080000000410000B2 -:101430000000030005000400039141000300400583 -:101440001004000900080004000000000000000073 -:10145000000000000000000000000100000001008A -:10146000010000000000000000001000C000840027 -:10147000C084000000000000000020000500A00063 -:1014800011820000000000000000000000000000C9 -:101490000000000000020000000000000001000049 -:1014A0000001000090008200A0A1040800000001DB -:1014B0000088000000900000010000A00010000063 -:1014C000000000014000C0114089104000000000F1 -:1014D000000000000000000000000000000000000C -:1014E0008200000000000000000000000000000179 -:1014F000000000000000000000000000208800053F -:101500001003201100000000000000010000000096 -:1015100000000000000000010000000000000000CA -:10152000040000000100040000840082020402059F -:1015300000A00010021000000000000100000000E8 -:1015400000000000000002000402000800A00000EB -:10155000000000000000000000000000000000008B -:10156000000000000000000000000000000000106B -:10157000000400000009000000000000000000203E -:1015800000038010038800000005000900400000EF -:10159000000000000000000000080004000000102F -:1015A0000000000000000200000000000000808039 -:1015B00080C000830090808000401102412100051E -:1015C00000002100030000000020000900850489BC -:1015D000000000000000000000000000000000000B -:1015E000008000000000004000000000000000003B -:1015F0000004000000800000000000000000000067 -:1016000000800089808000030000000000000000CE -:1016100000000000000000000000100008110000A1 -:1016200003000000000000000000000000000000B7 -:101630008000002000008000800021901000100039 -:101640004041089003042000400300000080800017 -:10165000000000000000000000000000000000008A -:101660000000004000000000000100000000000039 -:10167000000000000010004000000000000000001A -:1016800000009040900284028801000000000000E9 -:101690000000000000000000000000000000010148 -:1016A00000000100000000000000000090004088E1 -:1016B0002040040004012000400002000108010055 -:1016C00000000001000400010100000102001004FC -:1016D00002C0000000000000000000000000000048 +:10136000000000000000000000000000000000007D +:1013700000000000000000000080000000000000ED +:1013800000000000008000000000051100000000C7 +:10139000000000004011008020000000000000005C +:1013A00000800000000000800000080080000000B5 +:1013B000000000000000000000000000000000002D +:1013C0000000000000000000008089008200008012 +:1013D000000000000000000000000000000000000D +:1013E00000000000000000000000000000000000FD +:1013F00000000000000000000000001100000000DC +:10140000000000110000000000090020110400008D +:1014100000000005000009210000000500A1008077 +:101420000000000000C000000000100002830280E5 +:10143000410000000000000000000000000000006B +:101440000000000000000000000021A02190118990 +:101450000883000000000000000000000000000001 +:10146000000000000000000000000000000000007C +:101470000000000000000000000000000088008460 +:101480000000000000880004000000000088000543 +:1014900000000000000000A001000004000000089F +:1014A00000040000000000080082000001000008A5 +:1014B0000002010000000000000000000000000029 +:1014C0000000000000000000000000000091010981 +:1014D00000900189000000000000000000000000F2 +:1014E00000000000000000000000000000000000FC +:1014F00000000000000000000000000040000000AC +:101500001000100000000000000020000200080091 +:1015100090000100000001000800400100000000F0 +:10152000000000009000000000000000200000000B +:101530000000000188000000000000000000000022 +:101540000000000000000000000000000000040097 +:1015500020000000880000000000000000000000E3 +:10156000000000000000000000000000000000007B +:1015700000000000000000000000000000008000EB +:10158000000000008000000000000000100080004B +:10159000800000110400000020008000800803008B +:1015A000000000000000000000000000000000003B +:1015B00000020009002100100000000000000000EF +:1015C000000000000000000000000000000000001B +:1015D0000020000300410411000000000000000092 +:1015E00000000000000000000000000000000000FB +:1015F00000000000000000000000000000000000EB +:10160000000080000000000000008000000080005A +:1016100080008000000011000000000900408000F0 +:1016200011000004800000000000800000000000A5 +:101630008000000880008000001100000000000011 +:10164000000000000000000000000000000000009A +:101650000000410421000800A0110000000000006B +:10166000000000000000000000000000000000007A +:10167000000000000000000000000000000000006A +:101680000000200008000200020082008200040026 +:10169000080040009000C0000300000000000000AF +:1016A00090C0010002012000200002000800080094 +:1016B0004000080002880400400002000000000012 +:1016C000000000000000000000000000000000001A +:1016D00000000000050488009000080000000000E1 :1016E00000000000000000000000000000000000FA :1016F00000000000000000000000000000000000EA -:1017000000000000000000000700000000000000D2 -:1017100000000000000000000000000000000000C9 -:1017200000E000000000000000E0000000000000F9 -:101730000000000050000000000000004100000018 -:101740000000000000120000000000000000000087 -:1017500000E00000000000000000000000000000A9 +:1017000000000000000000000000000000000000D9 +:101710000000000041000060000000000000418265 +:101720000060060000000000000000000000000053 +:1017300000000000000000000000000000000000A9 +:101740000000000000000000000000000000000099 +:10175000000000000000000000E0000000000000A9 :101760000000000000000000000000000000000079 :101770000000000000000000000000000000000069 -:10178000000000000000F0FCFCFC2028FFFF00002F -:101790000000000000000000000000000000000049 -:1017A0000000000000000000000000000000000039 -:1017B00000FF00FF05000000838FB3BF00B2FFB23F +:10178000000000000000CF410C41000000006B434E +:101790002A02000000007C704C40000000000000A5 +:1017A000F0F00000FFFF00001717C300000000006A +:1017B000C3004D4D000000001717C30000000000DB :1017C0000000000000000000000000000000000019 -:1017D000FF00555500A050F0000000000000000080 +:1017D0000000000000000000000000000000000009 :1017E00000000000000000000000000000000000F9 :1017F00000000000000000000000000000000000E9 -:101800000000000000000000F0FCFCFC2020FFFFB6 -:1018100000000000000000000000000000000000C8 -:1018200000000000000000000000000000000000B8 -:101830000000A0FFBCFF00000000808CB0BC00B224 -:10184000FFB20000000000000000000000000000E7 -:101850000000FFFF0F0F0FAF5FFF00000000000050 +:101800000000000000000000CF7D0C7D0000000003 +:101810007F573E16000000007F734F43000000001A +:101820000000F0F00000000000001717FF3C00006F +:101830000000FF3C4D4D000000001717FF3C00006A +:101840000000000000000000000000000000000098 +:101850000000000000000000000000C00082000046 :101860000000000000000000000000000000000078 -:1018700000000000000000000000000000007D28C3 -:101880007D2800000000000000007FFF7FFFFFF0C8 -:10189000FFFF00000000000000000000000000004A -:1018A0000000000000000000000000000000000038 -:1018B00000000000FFFFFFFFAF2FAF0F7DAF28AF8D +:101870000000000000000000000000000000000068 +:1018800000000000000000000000BE3CBE3C000064 +:10189000000082FC82FC0000000030F030F000000C +:1018A0000000000000003C3C0000FFFFFCFCBEBE4E +:1018B00000000000FCFCBEBE00000000BEBEFCFC40 :1018C0000000000000000000000000000000000018 -:1018D00000000000C3FFC3FF00C33CFF0000000086 +:1018D0000000000000000000000000000082000086 :1018E00000000000000000000000000000000000F8 :1018F00000000000000000000000000000000000E8 -:10190000AFAF050500000000000000007FFF70F091 -:10191000FF28FF7D00000000000000000000000024 -:1019200000000000000000000000000000000000B7 -:10193000000000000000003D00052F2F0F0F7D0567 -:10194000280500000000000000000000000000006A -:101950000000000000000F000FFFE8E8E8E80000CA -:101960000000000000000000000000000000006116 -:101970000006000D000000000000000000000061F3 -:101980000006000D000000000000000000000061E3 -:10199000000E000D00A000610006000D0000000018 -:1019A000000000000000000000610004000D0000C5 -:1019B00000610007000D0000000040000000000171 -:1019C00000610006000D000000610006000D00002F -:1019D00000610006000D000000613007000D0000EE -:1019E00000000000000000000000000000000000F7 +:10190000000000000000000000000000BEFFBEFF5D +:101910000000000082FC82FC0000000033F333F37F +:1019200000000000000000003C3C00000000FCFC47 +:10193000BEBE00000000FCFCBEBE00000000BEBE3B +:10194000FCFC00000000000000000000000000009F +:101950000000000000000000000000000000000285 +:101960000002000000000000000000000000000075 +:101970000000000000000000000000000000000067 +:101980000000000000000000000000000000000057 +:1019900030000000000000003000000000000000E7 +:1019A0003007C00C0000000015002A3FC54C00A8FD +:1019B00000003000000000000000300000000000C7 +:1019C00000613006000D0000000000000000000073 +:1019D0000000000000000000000000000000000007 +:1019E00000613007000D0000000000000000000052 :1019F00000000000000000000000000000000000E7 -:101A000000000000CFCF7D7D00000000000000003E -:101A1000000000000300000000000000F000FFFFD5 -:101A200000000000000000000000553C003C303089 -:101A3000C0C0000000000000000000000000000026 -:101A40000000000000000F000F00FA00FAFFF5355B -:101A5000C505CFCF7D410000000000000000CF058C -:101A6000C0050000000000000000000000000000B1 +:101A000000000000000000000000000000000000D6 +:101A100000000000000000000000000000000000C6 +:101A200000003C3C00FF0000000000003C3C00FFC8 +:101A300000000000000000000000000000000000A6 +:101A4000000000000000F0FFF0FF000000000000B8 +:101A50000000000000000000000000000000000086 +:101A6000000000F0AAC3C30FFFFF00000000000049 :101A70000000000000000000000000000000000066 -:101A8000000000000000CFCF7D7D000000000000BE -:101A90000000000000000300000000000000F00053 -:101AA000FFFF00000000000000000000553C003C6B -:101AB0003030C0C000000000000000000000000046 -:101AC00000000000000000000B000B00FA3CFA3C94 -:101AD000F535C5050C0C7D4100000000000000003C -:101AE000CFF5C0F50000000000000000000000007D -:101AF0000000000000000000F0FFACAC000000009F +:101A80000000000000000000000000000000000056 +:101A90000000000000000000000000000000000046 +:101AA000000000003C3C00FF0000000000003C3C47 +:101AB00000FF000000000000000000000000000027 +:101AC0000000000000000000DFDF1F1F000000001A +:101AD0000000000000000000000000000000000006 +:101AE00000000000FFF0AAC3FFFFAAAA0000000048 +:101AF00000000000000000000000000000000000E6 :101B000000000000000000000000000000000000D5 -:101B100000000000FCFCC3FF8A008A00F0C3FFC382 -:101B200000000000000000000000000000000000B5 -:101B300000000000000000000000000000000000A5 -:101B400000000000000000000000000000003C3C1D -:101B500000FFC2F2CEFE3CFF3C00FAFEAAAA000043 -:101B60000000000000000000000000000000000075 -:101B700000000000000000000000000FACAC0000FE +:101B100000000000000000000000000000000000C5 +:101B20000000000000000F0F00FF00000000000098 +:101B30000F0F00FF00000000000000000000000088 +:101B4000000000000000000000005F50C0C0000066 +:101B50000000000000000000000000000000000085 +:101B60000000000000000000000002160216000045 +:101B70000000000000000000000000000000000065 :101B80000000000000000000000000000000000055 -:101B9000000000000000FCFCC3FF8A8A8AFFF0C33B -:101BA000FFC3000000000000000000000000000073 -:101BB0000000000000000000000000000000000025 -:101BC0000000000000000000000000000000000015 -:101BD0000F0F555502320E3E0F550F55AABEAAAA39 -:101BE00000000000000000000000000000000000F5 -:101BF000C010000000002000201002002000200083 -:101C00000010000000000010000000004000200054 -:101C100084008800A040040020002000880000000C -:101C20000000000000000009000002004000020067 -:101C3000000320100400200084A0001020020108EE -:101C40000105840800000010C00800000208200000 -:101C500020000403200502002008000520000000E9 -:101C6000A00320008400880800080800200000006D -:101C7000400420000000000000000000C000000040 -:101C80000002000000040000000500000000100237 -:101C90000900009000000091100000000000000208 -:101CA000400200000002400040000000410000200F -:101CB000000000004000000000001002000102A12E -:101CC000208420900000000000000000008200A09E -:101CD0000500210000000000049000000000000248 -:101CE00000000000000000000090000080000000E4 -:101CF000000000400200000000400100010001005F -:101D00008300010000000800840000400000000083 -:101D10000000008000000009000000000200000038 -:101D2000000000008200000000000210000004001B -:101D3000000000000000000000000005000000108E -:101D400000000000000900000400904002800290A2 -:101D5000000000000000000000000000001008412A -:101D60000200000002000840000002000080024162 -:101D7000000000100140000000000008401040007A -:101D80004008401040080400000800000004000063 -:101D9000048802000002000000100040000000085B -:101DA000000800000088020000400000000002005F -:101DB0000000000800080000000000000000000013 -:101DC0000008001000000210040000841000001041 -:101DD0000010002000080208000004C000000200FB -:101DE000000800880004000000400000008400108B -:101DF00000080008000808080000000000000000BB -:101E00000000000000050421000000008200000521 -:101E1000000000000008C021004102000000000096 -:101E2000000000000000C00800000005880000005D -:101E3000000000000000000000000400000000009E -:101E40000000001000004000400088000200000573 -:101E50000000880800050040001002000008000093 -:101E600002000000000010084000822188080021C4 -:101E70000000000500000000040000000000000059 -:101E80000000000000000000000000000000000052 -:101E90000000000000004100001008C0090200001E -:101EA0000800000000000000000010840000000096 -:101EB000000000080000000000000000000000001A -:101EC0000000000000A000080020218200000000A7 -:101ED0001100000000C00000040010830800000092 -:101EE00041A0020021A000080004802000C00008DA -:101EF00000A00000008421C002400000000000009B -:101F00000800000000000000000082000021200402 -:101F100000002041000000000840000000000021F7 -:101F2000000400000000000000100000000000009D -:101F300000004000000000000840080400000041CC -:101F40000000000008000000A004080404040000D1 -:101F5000004000000000000082008840A000040053 -:101F60000000080008000040000000001000000011 -:101F7000A000882182100405004000000800000035 -:101F8000000800000000000000000000000000A0A9 -:101F90000200084000C00000000000C01000000067 -:101FA0000000000000000000000008000800000021 -:101FB000008800000000000000C0000000000000D9 -:101FC00011000000000000000000000009C0000037 -:101FD00000400010009000000200082000000000F7 -:101FE000000000000000000000A00300000000004E -:101FF000000000000000000000C000000000000021 -:102000000000200804110400000800000004001073 -:1020100008000000820509100000000000000021F7 -:1020200010000000000082410000000000000100DC -:1020300000000000000000000000000000000000A0 -:10204000000000000000000000000000A1000040AF -:1020500000C0C010001000400000000000000000A0 -:1020600082000000000000040000000000000000EA -:10207000820000410000840000000000000508000C -:10208000820000000000800080000000000000A12D -:102090000000000000000000400000000000000000 -:1020A000000400000000000000001004098400008B -:1020B0004000400000000000000800000000000098 -:1020C000000000000000008400A0000000000200EA -:1020D00004000010214000880008030000000000F8 -:1020E00003A00002000011000000058400000000B1 -:1020F00005000500009000080082000000000000BC -:10210000000000000000040882000200000200102D -:102110000040000000210000000400410003000016 -:1021200000410008000082000000000000000011D3 -:10213000000000000000000800000000002100086E -:1021400000000000000000000800000082000800FD -:10215000A040000400040000000000008411000002 -:10216000000400400010880000040000000000008F -:1021700082000000001000004000000008800041C4 -:1021800000000000000000008000000000000000CF -:10219000000000000000000000000000200000001F -:1021A000000000C00200000000000000000000006D -:1021B0000000000000000000008800000000000097 -:1021C0000000000000000000000000080004000003 -:1021D00000000082000100010000008800002000D3 -:1021E000000000000040000000A000A0000000006F -:1021F000000000000000000000A040080090110254 -:1022000000C00000000000000082A1081008824009 -:1022100000000200000000000000010000000000BB -:1022200000000100040000000000000000000000A9 -:10223000000000008200000000000000000000001C -:102240000000000000000000000000000100880005 -:10225000000000000000010000000000000000007D -:10226000000001000000000000000000000000006D -:1022700000000000000010000000000000009000BE -:1022800000008320040200C0848800002180808038 -:102290008000001180000500000500000300000020 -:1022A0000000000003000000000008000000000023 -:1022B0000000000005000000000000000000000019 -:1022C000000000000000000000000000000003000B -:1022D00000000000000000004100000000000000BD -:1022E00000000000200000000000000000000000CE -:1022F00000000000000040008000000002002100FB -:102300000000000021008080000000000905A000FE -:1023100020004020914080000803801080000000D1 -:1023200000000000000000000000000000000003AA -:10233000008000000000000000000000000000001D -:10234000000000000000000000000000000000008D -:1023500000000000008000000005800280080000EE -:1023600080000000800000008040008080000000AD -:10237000000000000000000000000000000010004D -:1023800082008200100000008000800080000002B7 -:1023900008008500010109011000910108000800F2 -:1023A0008400000084840000000000000040000061 -:1023B000000100400040000000000000000000009C -:1023C000000000000000000000000000000000000D -:1023D0000000000000000008A084C00010081000E9 -:1023E000080004000400080084008200C0400220AD -:1023F00000000000000000000000000000000000DD -:10240000A10004000200890088002000A0008200D2 -:102410000084000900090000000004010000010020 -:1024200000000001000000000000000100000001A9 -:10243000000000000000000000010000000000009B -:10244000000000000000000000000000000000008C -:10245000000000000001000000000000000000007B -:102460000000000000000000000000000000C000AC -:10247000000000000000000000000001000100005A -:1024800000000000000084010001822000A00088FC -:10249000A0040004008200A10200000080111004CA -:1024A000411100110004002000090003000800038E -:1024B0000010000000000000000000040003000302 -:1024C0000008000000000000000000000000000004 -:1024D00000000000001100080009001100000000C9 -:1024E00000000900000000000000000000000000E3 -:1024F00000000000000000000000000000100020AC -:10250000004000200009001000210004000000002D -:1025100000000080118003C04080030300400000E1 -:102520000980111100200080000000000000000060 -:10253000000000000000800000000000000000001B -:10254000000000000000000000000000000000008B -:102550000000000000000000000000000000080073 -:1025600040094000030000000080000000008000DF -:10257000000000000000000000000000000000005B -:1025800000000000000000800000000000020000C9 -:1025900080800080000000C00104010800000001EC -:1025A0000010004001000001002000880000000031 -:1025B00000000000000040000800A0000000000033 -:1025C000000000000000000000000000000000000B -:1025D00000000000000000000000000000000000FB -:1025E0008500200502C090000000000800000000E7 -:1025F0004000000002C010000000000000000000C9 -:102600000000000000000000004000200004000165 -:10261000040010A00010000000000000070060008F -:10262000000000E0000000060000000000000000C4 +:101B90000000000000000000000000000000000045 +:101BA00000000000000000000F0F00FF0000000018 +:101BB00000000F0F00FF0000000000000000000008 +:101BC0000000000000000000000000005F50CFCFC8 +:101BD0000000000000000000000000000000000005 +:101BE00000000000000000000000000002021616C5 +:101BF00000000000000000000000000000000000E5 +:101C00000000400000000000200000000000200054 +:101C10000000000000000000000000000000008044 +:101C2000000020000000010021000200010020004F +:101C30000002000000000000004000000000000062 +:101C400002800000200000000100200000000000D1 +:101C500002800000000000000200020000000000FE +:101C60008980000020000000000021000000020028 +:101C70002000000000000000000000000000000044 +:101C8000000000000000000000000800000000004C +:101C90000000000000000000000000000000000044 +:101CA000004000000000000002000400800002006C +:101CB00000000000000000000000000140004000A3 +:101CC00000000040000000000000020000000000D2 +:101CD0000000004040000000000000008000000004 +:101CE00000000440000000000000000002000000AE +:101CF0008000000000000000000000000000000064 +:101D00000040000000000000000020000000000073 +:101D100000000000000000000000000000000000C3 +:101D2000001000000000000000000000000000089B +:101D300000000000000000000000000000000000A3 +:101D40000000000000000000000000000000000093 +:101D50000000000000000000000000000000000083 +:101D6000000001000300000000000000000000006F +:101D7000008000000000000004000000004000009F +:101D80000000000000000000000000000000004013 +:101D90000000000000000000000000000000000043 +:101DA0000000000000000000000000000000000033 +:101DB0000001000000000000000000000000020020 +:101DC0000000000000000000000000000000000013 +:101DD000000000880040000000000000000000003B +:101DE00000000000040008000000000000000200E5 +:101DF00000000004000000000000000000000000DF +:101E00000000000008000800820008000000080030 +:101E10000000000000004000000000000000000082 +:101E20000000000000000000000000000080000032 +:101E3000000001000003028000000100000000001B +:101E4000004100000000000000000000000000054C +:101E50000000000000000000000000000000000082 +:101E6000000000000000002100000100000001410E +:101E7000000501000100000801050000000000004D +:101E8000000000000000000000000000000008004A +:101E90000000000000000000000000001100000031 +:101EA00000000000000000002000000010000020E2 +:101EB000000000000200000080040000200000007C +:101EC00000001000000000000000210000000000E1 +:101ED00003000000000000000000000000000000FF +:101EE00000000082000041000000000020001100FE +:101EF000200000002000020000000200040000009A +:101F000000000000000000000000000000000000D1 +:101F100000000000000000000000000000000000C1 +:101F20000000000000000000000000000000C000F1 +:101F3000880088000100100011001080000041009E +:101F4000008011002000A0000000000000008200BE +:101F50000000000000000000000000400800000039 +:101F60000400000000000000000000000000040069 +:101F7000200004000400C000000000000000000079 +:101F80000000000000000000000000000000000051 +:101F90000000000000000000000000000000000041 +:101FA0000000000000000000000000000000000031 +:101FB000000000000000100080008200804000004F +:101FC00010000920A00280C00000000040000000B6 +:101FD00000C00000000000C0009000900040000021 +:101FE000000080020000000000000000000000006F +:101FF000C100800080008000410800000000020055 +:1020000000110000000000000000000000000000BF +:1020100000000000000000000000000000000000C0 +:102020000000000000000000000000002000000090 +:102030002000040000410084000401000508044160 +:10204000000001080008002000040000000000005B +:102050000000000000000000000000000800000078 +:102060000000C08000800400040004000400040399 +:10207000000000200404200020000041C0002110C6 +:10208000202100000000000000000000000000000F +:102090000000000000000000090000000000000037 +:1020A000002000000000000000000000008400008C +:1020B0000000000080840000002141012008A008E9 +:1020C000800000000401000100A100850000000064 +:1020D0000300009000000000000000000002000863 +:1020E00000A02000002000208000800080008000F0 +:1020F00080000000000180018000800011080000C5 +:10210000A00880C0000000000000000000000000E7 +:1021100000000000000000000000000000000000BF +:1021200000000000000000000000000000000000AF +:1021300000000000000300050000002102080088E4 +:10214000400204080000A0022040000410820002A7 +:10215000820500000002004100050000004100006F +:1021600000410040000000004000000004000000AA +:10217000C000C00004008800004100002041201180 +:102180002000C0100004000000000000000000005B +:10219000000000000000000000000000000000003F +:1021A000000000000000000000000000000000002F +:1021B000000000000000000000000000000080019E +:1021C0000020000080010000090080004003A120E1 +:1021D00000020000000000000000000009000000F4 +:1021E000000000000200000000000000000080006D +:1021F00000000000000088000000000000008000D7 +:1022000080008000000021010000000000000000AC +:1022100000000000000000000000000000000000BE +:1022200000000000000000000000000000000000AE +:10223000000000880000000800C000200004000228 +:102240000000A00001000000000300C00020008288 +:1022500000040008008800000008000000040000DE +:10226000000400C000C000000008000000000000E2 +:10227000000040C000C0001004020202C0C00411EF +:10228000829002C01084A00800C10000000000007D +:10229000000000000000000000000000000000003E +:1022A000000000000000000000000000000000002E +:1022B0000000000000000000008000800000090015 +:1022C00000001100000002110000000011800083D6 +:1022D0000500000000800000000000800000008079 +:1022E00000000000000000000000000000000000EE +:1022F0000000000080800000000080800084000258 +:1023000082A08010008410100480002000000000D3 +:1023100000000000000000000000000000000000BD +:1023200000000000000000000000000000000000AD +:102330000000000000000083000000000000008496 +:10234000000000001141800000830080000011099E +:1023500000830040008000000083000000000000B7 +:1023600000A0000000000000009000040000000039 +:10237000000000000000000080908040000000008D +:1023800085000210840085000400800083030000A3 +:10239000000000000000000000000000000000003D +:1023A000000000000000000000000000000000002D +:1023B0000000000000000000000900100002000002 +:1023C0000008009000880101908800910002000040 +:1023D00001000008009000880000000900840082CD +:1023E0000000000800A000000000004100A0000064 +:1023F000000000880000008402000809A0C10288D3 +:1024000000024000C0C0040008A000000800C10194 +:1024100000000000000000000000000000000000BC +:1024200000000000000000000000000000000000AC +:10243000000000000000000010000000000010007C +:10244000900000001000080000902001040090009F +:102450000000A0004001880088000000000000008B +:102460004000040000000000880040000000000060 +:102470000000000000000200000020900010041086 +:1024800008C010020010000100C00808010801087F +:1024900000C000000000000000000000000000007C +:1024A000000000000000000000000000000000002C +:1024B000000000000000000000008000000000009C +:1024C00080008900000000000900098080110000E0 +:1024D000890000000500001180004000000000009D +:1024E00000000000000000000000000000000000EC +:1024F00000000000040000000000000010800080C8 +:10250000000080808089008209100011808440A131 +:1025100003910480000000000000000000000000A3 +:1025200000000000000000000000000000000000AB +:10253000000000000000000000000000800000001B +:102540000000800000008041000000000011000930 +:1025500011000000000000000302000000008000E5 +:10256000800000008000000000000000000000006B +:10257000000000000000000000080000000000044F +:1025800080080080800008408288C10011118440CA +:10259000048880000908000000000000000000001E +:1025A000000000000000000000000000000000002B +:1025B0000000000000000000000000000000080013 +:1025C000040008000800840010010400020000005C +:1025D0000000000000000000A00084018200040050 +:1025E0000800040008000800040082004000040005 +:1025F000C000C000200040000000000100000000FA +:10260000820004C1C040080091101011028810001F +:1026100008A11083088810010000000000000000DD +:1026200000000000000000000000000000000000AA :10263000000000000000000000000000000000009A -:10264000000000000000000000000000000000008A -:10265000000000000000000000000000000000007A -:102660000000000000E00000008100000000000009 -:10267000000000000000000000000000000000005A -:10268000000000000000000000000000000000004A -:102690000000000000000000000000000000FCF04E -:1026A000FCF000000000000000000000000000003E -:1026B0000000000000000000000000000F0F0000FC -:1026C000000000000000000000000000000000000A -:1026D00000000000000000000000000000000000FA -:1026E000000000003C3CF0F0000000000000000092 -:1026F00000000000FFFFF0F00000000000000000FC -:1027000000000000000000000000000000000000C9 -:10271000000000000000FF00082C4A6E00000000CE -:102720003C003C0000000000000000000000000031 -:1027300000000000000000000000000000FF999968 -:102740000000000000000000000000000000000089 -:102750000000000000000000000000000000000079 -:10276000000000000000FF0066660000000000009E -:1027700000000000000066663C3C00000000000015 -:102780000000000000000000000000000000000049 -:102790000000000000000000FF0089ADCBEF00004A +:10264000000000000000000041820060060042001F +:1026500088410060060042000000418200600600E0 +:10266000000000000000000000000000000000006A +:102670000000000000000000000000000000070053 +:1026800000000000000007000000000000E007005C +:102690000000000000E0000000000000000000005A +:1026A000000000000000000000000000000000002A +:1026B000000000000000000000000000000000001A +:1026C0000000001BC31B000000000131C1F100002D +:1026D00000000000666600003C3C000001C10DCD1A +:1026E0000000000081BD0303000000008D8D003C50 +:1026F00000000000C300990F00000000000000006F +:1027000000000000082C4A6EFF664B4BFFB400B47B +:10271000F6F6060600CFCFCF8DCFFFFF00000000FA +:1027200000000000000000000000000000000000A9 +:102730000000000000000000000000000000000099 +:10274000000000003C1BFF1B000000000D3DCDFD04 +:10275000000000000000666600003C3C000031F113 +:102760003DFD0000000081BD3F3F000000008D8D59 +:10277000C3FF00000000C3FF990F0000000000002D +:1027800000000000000089ADCBEF99004B4BFFB477 +:1027900000B4FCFC0C0C00CFCFCF8DCFFFFF0000AE :1027A0000000000000000000000000000000000029 :1027B0000000000000000000000000000000000019 :1027C0000000000000000000000000000000000009 @@ -160424,545 +160424,545 @@ :1027F00000000000000000000000000000000000D9 :1028000000000000000000000000000000000000C8 :1028100000000000000000000000000000000000B8 -:102820000C0C0CFF666F666F00000000707060E0BB -:1028300000000000C0C090900000000000000000F8 -:102840000000000000000000000000000000000088 -:102850000000000000000000000000000000000078 -:102860000000000000000000000000000000000068 -:10287000000200000000306F3F6F000000003C3C91 -:10288000FFFF00000000000000000000000000004A -:10289000000000000000C4F4C7F7FF0099990F0082 -:1028A00009090C0C0CFF000F000F00000000606015 -:1028B00060E000000000CFCF90900000000000001A -:1028C0000000000000000000000000000000000008 -:1028D00000000000000000000000000000000000F8 -:1028E00000000000000000000000000000000000E8 -:1028F0000000000000000000306F3F6F000000008B -:1029000000FF0F0F000000000000000000000000AA -:10291000000000000000000004340737C3C3F0F0DB -:102920000C0C0C0C0061000E000D00000061000793 -:10293000000D000100610006000D000000610006AE -:10294000000D000080000000000000000061000693 -:10295000000D00000000000000000000000000006A -:1029600000000000000000610006000D0000006192 -:102970000007000D00010000000000000000000042 -:1029800000000000000000000000000000000061E6 -:102990000006000D000000610006000D00000000B0 -:1029A0000000000000007F4F7C4CCAFACAFA0F0FEB -:1029B0000F0FF0FF00FF000000000F000F000000ED -:1029C0000000F4F4F4F50000000000000000000036 -:1029D0000000F303F303000000000000000000000B -:1029E0000000000000000000000000007D0D0D7DD3 -:1029F000BFAB978300000000000000000000000053 +:1028200000000000000000000000000000000000A8 +:102830000000000000000000000000000000000098 +:1028400000000000000000005A185A1800000000A4 +:1028500000FF3D3D00000000666600000F0F000015 +:102860000000FFFFFD3D00000000BDBDFF3C00007B +:102870000000BDBDBDBD0000000000C3FF000000A2 +:10288000000000000000000000000F0FE700000F34 +:1028900070700CFCFCFC666FFF6FFFFFC3C3FFFF93 +:1028A000C3810000000000000000000000000000E4 +:1028B0000000000000000000000000000000000018 +:1028C00000000000000000000000DB99DB99000020 +:1028D000000000FFFDFD00000000666600000F0F15 +:1028E000000000000000FD3D00000000BDBDFF3CF9 +:1028F00000000000FF3CFF3C00000000FFC3FF00A1 +:102900000000000000000000000000000F0FE79929 +:10291000000F10100C0CFC0C00099909FFFFFFF0D0 +:10292000FFFFFFBD000000000000000000000000ED +:102930000000000000000000000000000000000097 +:102940000000000000000000000000000000300057 +:10295000000000000561343FC50D00A015002A3FAE +:10296000C54C00A800000500343FC50C00A00000C5 +:1029700030000000000000003000000000000000F7 +:1029800030000000000005000A08050000A0050056 +:102990003408059000A000610009000100004063B8 +:1029A00080010021920200000000000000000000F1 +:1029B0000000000000000000000000000000000017 +:1029C0000000000000000000000000000000000007 +:1029D00000000000000000000000000000000000F7 +:1029E0000F0FF0F0000000000000FF00F0F000000A +:1029F00000000000000000000000000000000000D7 :102A000000000000000000000000000000000000C6 -:102A1000000000003CF03CF000000000C300FF3C60 -:102A20000000000000000000734370400A3A0A3AB8 -:102A30003F3F3F3FF0FF00FF00000000F3F30303C0 -:102A400000000000F0F0F0F50000000000000000C1 -:102A5000000000005F5F5050000000000000000018 -:102A60000000000000000000000000000000D70788 -:102A700007D73D29150100000000000000000000FC +:102A10000000000000000000FF1700173A3A303FA6 +:102A2000FF003C3C30F330F30000000000000000E9 +:102A30000000000000000000000000000000000096 +:102A40000000000000000000000000000000000086 +:102A50000000000000000000000000000000000076 +:102A600000000F0FF0F0000000000000FF00F0F089 +:102A70000000000000000000000000000000000056 :102A80000000000000000000000000000000000046 -:102A9000000000000000AA00AAFF00000000E828D3 -:102AA000E828000000000000000000000000FAFA22 -:102AB00014BE3C3C3C3C14FF14FF0000000000002E +:102A900000000000000000000000FF1700173A3A95 +:102AA000303FFF005555B2B2B2B200000000000046 +:102AB0000000000000000000000000000000000016 :102AC0000000000000000000000000000000000006 :102AD00000000000000000000000000000000000F6 -:102AE00000000000000000000000000000000000E6 -:102AF00000000000000000000000000000000000D6 +:102AE000000000000F0F3C3C000000000000FF0051 +:102AF0003C3C00000000000000000000000000005E :102B000000000000000000000000000000000000C5 -:102B100000000000000000000000000000000000B5 -:102B200000E0004000000000000000000000000085 -:102B3000505014BEFFFF3C3C14FF14FF0000000087 +:102B1000000000000000000000000000FF3C003C3E +:102B2000FA00FAFF5555FF3C3F3F3A3A00000000DB +:102B30000000000000000000000000000000000095 :102B40000000000000000000000000000000000085 :102B50000000000000000000000000000000000075 -:102B60000000000000000000000000000000000065 -:102B70000000000000000000000000000000000055 +:102B60000000000000000F0F3C3C000000000000CF +:102B7000FF003C3C000000000000000000000000DE :102B80000000000000000000000000000000000045 -:102B90000000000000000000000000000000000035 -:102BA0000000F0E0F0400000000000000000000025 -:102BB00000000000000000000010040010004000B1 -:102BC000200020000400001000000400000082002B -:102BD0002100400084000000000088000400200064 -:102BE000208020008480000000008800040800038A -:102BF000040000002100210000000200020020006B -:102C00002000210020800080040000000400200536 -:102C1000840088000400408000000000C000880498 -:102C200088058800A00002400280000020202020AB -:102C30000000000000000090000000000000000004 -:102C40000900000040020000000000020000000037 -:102C50000200A00021000000400000004100000030 -:102C600000004140050000100000000000000000CE -:102C7000000040000000040004000000020000000A -:102C800000000000040000101110000000002004EB -:102C9000000000000000200000020002040000000C -:102CA0000008000000C000001003402000000001E8 -:102CB00000030000100000000000010908000000EF -:102CC00008090000021082000000080084000205CC -:102CD000040002000810000002000410020082003C -:102CE00002000800820000000210020008000040FC -:102CF000080000000800080002090410000002009B -:102D000000000210820008400800080000000000D7 -:102D10000000020000000300080000000000004066 -:102D2000020000100000020000008200000002000B -:102D300004000010000000000000000008000084F3 -:102D4000000000000000000000080000000000403B -:102D500000100000001000400004000000C100103E -:102D60000000000000000000001000080000000843 -:102D700000080000000000000000000002000288BF -:102D800000400000020000080400000002080000EB -:102D900000100008000802004000000000000000D1 -:102DA00000000000020000400400000000100000CD -:102DB00000000008000800000000000800000008F3 -:102DC0000008004100210000000000000000000099 -:102DD00000080000001000000000000000000000DB -:102DE00000000010880000004100000000004000CA -:102DF00000000000000000000000000000000000D3 -:102E000088000000000040000000000000000003F7 -:102E10000000000090000000000000000000000022 -:102E20000000080000000005004100000000000450 -:102E30000008000800000000000000000082000000 -:102E400000100000080000000000001000C000009A +:102B90000000000000000000000000000000FF0F27 +:102BA000000F500050FF5555003C30303A3A0000BD +:102BB00000000000200000002000000020000000B5 +:102BC0000000000000000000000000000000000005 +:102BD0000000000020004000200000002000000055 +:102BE00000000000000000000000000001000000E4 +:102BF0000000000000002084200020000000208051 +:102C00000000000000000080000000000000000044 +:102C10000000000000002000200020000000200034 +:102C2000000000000000000088000000000002001A +:102C30000000000000000000400040000000000014 +:102C40000000000000000000000040000002000042 +:102C500000004000000000000000400040000000B4 +:102C600000000000000000004000400000000200E2 +:102C70000000000000004000004000400000400252 +:102C80000040000040000000004040004000000004 +:102C90000000000000000000000000000000000034 +:102CA0000000000000000000000000000000000024 +:102CB0000000000000000000000000000000000014 +:102CC0000000000000000200000000000000000002 +:102CD00008000000000000000000000000000000EC +:102CE00000000000000000000000020002000000E0 +:102CF00000000000000000000010000000000000C4 +:102D000000000000000000000009000000000000BA +:102D100000000000000000000800000002000000A9 +:102D20000000000000000000080000000000020099 +:102D30000000000000000000000000000000000093 +:102D4000000000000000000000080000000000007B +:102D50000000000000000000000000000000000073 +:102D6000000000000000000000080000000000005B +:102D70000000000000000000000000000000000053 +:102D800000000000000000000000008800000000BB +:102D900000880000000000000000000000000000AB +:102DA0000000000000000000000000000000000023 +:102DB0000000000000000000008000800000000013 +:102DC00000000000000000000000000800000000FB +:102DD00000000000000000000000000000000000F3 +:102DE00000000000000000000000000000000000E3 +:102DF0000000000000000000000000009000000043 +:102E000000000000000000000000000090410000F1 +:102E1000000084000000000000000000000000002E +:102E200000000000000000000000000000000000A2 +:102E300000000000000090000000002000200000C2 +:102E40000000000000000000000000000000000082 :102E50000000000000000000000000000000000072 -:102E600000000008000000000000840000000000D6 -:102E7000000000000000000000000000000003004F -:102E80000000000000000000A100000000000000A1 -:102E90002000000000000000040000040000040006 -:102EA00008900082000003000000410000000000C4 -:102EB00000400000008400004100C000000000004D -:102EC00000000000000000000840000400040009A9 -:102ED000000000000004C004821140000000000057 -:102EE0000100000800000800080000004000400049 -:102EF0000800000000000800820400000800824072 -:102F000000000000000000000800820000000241F4 -:102F10000000000000000000820082000800400065 -:102F20000000000000000000000400040841000050 -:102F3000000008400900000000030200000000003B +:102E6000000011000000000000000010000400102D +:102E700000000000008400000000000000000000CE +:102E8000000000000500000000000000000000003D +:102E90000500000000000000000040040000008267 +:102EA0000000000000000000000000A000400084BE +:102EB000000000C000C000C000C000000000000012 +:102EC0000000000000000000000000000000000002 +:102ED00000000000000000000000000000000000F2 +:102EE00000000000000000000000000000000000E2 +:102EF00000000000000000000000000000000000D2 +:102F000000000000040000000000000000000009B4 +:102F100000000000000000000000000000000000B1 +:102F20000000000010000000900000000000000001 +:102F300020000000000000008200000000000000EF :102F40000000000000000000000000000000000081 -:102F5000000000000000000011080000A0000000B8 -:102F600000000400000800000000000000008000D5 -:102F700000040084000000000000000000000000C9 -:102F800000000090090000000000030000000000A5 -:102F900000C0000000000000000000000000000071 -:102FA00000000900000000A000000000000000A0D8 -:102FB000000000008001044000000000000000004C -:102FC00000000000000000000008000000000000F9 -:102FD00000000000100000000000000000000000E1 -:102FE00020000000840000000000C00282110000E8 -:102FF000004100000005000000000000000000008B -:1030000000000000008000800000000000000002BE -:10301000000004000000000002000000001000009A -:103020000000000000000000000008210000000077 -:10303000C02108000000000800000000000410008B -:1030400000000000210000000000040000C000009B -:1030500000000000000000080000000008A00000C0 -:1030600010008000000000000400000000000000CC -:10307000000041000000000000000000000000000F -:1030800000000000000000200020000000040000FC -:103090000001000080000040080000000000000067 -:1030A000110000000084000000000000000000008B -:1030B000400004100900080021A000820000000068 -:1030C00000A0000800000000020400000000000052 +:102F50000000000000000000000000000000000071 +:102F60000000000000000000000000000000000061 +:102F70000000000000000000000000000000000051 +:102F8000000000000000000020040000000000001D +:102F900000000000000000000088000000000000A9 +:102FA00000000000000000000000000000000040E1 +:102FB0000000000000000000000000000000010010 +:102FC0000000000000000000000000000000000001 +:102FD00000000000000000000000000000000000F1 +:102FE00000000000000000000000000000000000E1 +:102FF00000000000000000000000000000000000D1 +:1030000000000000000000000000000000000000C0 +:1030100000000000000000000000000000000000B0 +:103020000000000000000000000000100000000090 +:103030000000000000000000000000000000000090 +:10304000040000000000000000000000000000007C +:10305000000000000500000000000000000000006B +:1030600000000088000000000000000000040000D4 +:1030700000000900000800C0000000080000000077 +:1030800000000004210000A0000000000000000477 +:103090000000000400000000100003000000000019 +:1030A00000000000000800080000050000000010FB +:1030B000008411C01110020800A000C0000000C070 +:1030C000008400000000000000200000000000005C :1030D00000000000000000000000000000000000F0 -:1030E00000000000000000000000010300000003D9 -:1030F0000100000800400000000000000000000087 -:103100000005000000000800000082210000A0006F -:1031100000000000000000000002000000000200AB -:10312000200000000000000000000000000000037C -:10313000080008000000001000000002000000006D -:10314000000000000000000000000000000000007F -:10315000000000000000000000000000000000402F -:10316000000200000000000000000082204020C09B -:1031700000000800004000002004000000000000E3 -:10318000000000000000000000000000000040C03F -:10319000000000000000000000000000000000002F -:1031A00000000000090000000000000000400000D6 -:1031B000008400000000000000000000000100008A -:1031C0000900000000C00000000000000000000036 +:1030E00000000000000000000000000000000000E0 +:1030F000000000002000000000000000840000002C +:1031000000000000400000050002020040008805A9 +:103110000000A041000000040000000000000000CA +:10312000000000000000000000000000000000009F +:10313000000000000000000000000021400000002E +:103140000009000000000000000000010000000075 +:10315000000000000000000000000000000000006F +:10316000000000000000000000000000000000005F +:10317000000000000000000000000000000000004F +:10318000000000000000000000000000000000003F +:10319000000400000000000000000000000000002B +:1031A000000000000000000000000000000000001F +:1031B000000000000000000000000000000000000F +:1031C00000000000000000C00090000000000000AF :1031D00000000000000000000000000000000000EF -:1031E00000000000000000000000000000000301DB -:1031F0000000000100010001049000C082200000D6 -:1032000000000000000000000000000000000000BE -:1032100000000000080000000088004000C00020FE -:10322000000000000000000000008801C001000054 -:103230000000000000000000000401C0100400882D -:1032400004000400000282210000000000000000D1 +:1031E00000000000000000000000000000000000DF +:1031F00000000000000000000000000000000000CF +:1032000000040004000400010000000000080008A1 +:10321000000400000000000400040004000000009E +:10322000000000000000000000000000000000009E +:10323000000000000000000000000000000000008E +:10324000000000000000000000800080000000007E :10325000000000000000000000000000000000006E -:103260000000000000000000000000110009000044 -:103270009111001100080010001000800003800070 +:10326000000000000000000000000000000000005E +:10327000000000000000000000000000000000004E :10328000000000000000000000000000000000003E -:1032900000000000040080000000400000800000EA -:1032A0000000000000000000000000020940004093 -:1032B000001100000000000000000000030000807A -:1032C000000000000008000280080000000000006C -:1032D00000000000001000800080000000000000DE -:1032E000000000000000000000000080000000005E -:1032F000002080008021800000000080000080000D -:10330000800000000000000000000000000000003D -:103310000000000000000000000000000000008528 -:103320008010000000000000000000000000040009 -:1033300005000321000000000000000000008002E2 -:1033400000A0000091000341008082800000000086 -:1033500000000000000000010084000400000000E4 -:103360000000000000000000000000000008000055 -:103370000000000890001000A0009000408820008D -:10338000A000080000000000000000000000000095 -:103390000000000000040000000000000000000029 -:1033A0000090A0A0840000000000000000000010B9 -:1033B0000000000001010000000000000000A0006B -:1033C00040C0A00408100800110104101090000073 -:1033D00000000000000000000000000000000000ED +:10329000008020000000000000000000000000008E +:1032A000000000000000000000000000000000001E +:1032B000000000000000000000000000000000000E +:1032C000000000000000000000000000000080007E +:1032D00080800000000000000000000000000000EE +:1032E00000000000000000000000000000000000DE +:1032F00000000000000000000000000000000000CE +:10330000000000000090000000000000000000A08D +:1033100000000000000000A1000000000000000507 +:10332000000000000000000000000000000000009D +:10333000000000000000000000000000000000008D +:10334000000000000000000000000000000000007D +:103350008400C09000000000000000000000000099 +:10336000000000000000000000000000000000005D +:10337000000000000000000000000000000000004D +:1033800000000000000000090084000000000000B0 +:10339000000800A0000000000008008200000000FB +:1033A0000084008200000000000000000000000017 +:1033B000000000000000000000000000000000000D +:1033C00000000000000000000000000000000000FD +:1033D0000000029000C0000000000000000000009B :1033E00000000000000000000000000000000000DD -:1033F0000000000000000000000800100040020073 -:1034000000020000080000000000000000000000B2 -:1034100000000000C000000000000001C00000012A -:1034200000880010000010020000000000000000F2 -:103430000001000100010001000000000000000088 -:1034400040010001C0000201400800A090100010DF -:10345000000000000000000000000000000000006C +:1033F00000000000000000000000000000000000CD +:1034000000000000000000000000C00008000000F4 +:10341000C00000000000C000040000000000080020 +:103420000400000000001000000000000000000088 +:10343000000000000000000000000000000000008C +:10344000000000000000000000000000000000007C +:10345000000000000080008000000000000000006C :10346000000000000000000000000000000000005C -:103470000000000008000000000004800080000040 -:1034800080000080080080000000000000000000B4 -:1034900000000000000000000000004100040004E3 -:1034A0000004000000000000808000000000000018 -:1034B00000000021051008210008000000000000A5 -:1034C00000008008000200008040808000808000B2 -:1034D000008000000000000000000000000000006C +:10347000000000000000000000000000000000004C +:10348000000000000000000000000000000000003C +:1034900000000000000000000000800000000000AC +:1034A000000080000000000000000000000000009C +:1034B000000000000000000000000000000000000C +:1034C00000000000000000000000000000000000FC +:1034D00000008011800500000000000000000000D6 :1034E00000000000000000000000000000000000DC -:1034F00000002104110010001000800000000000F6 -:103500000000210020092000090000000000000048 -:103510000000000000110021000000000000000079 -:1035200000000000004000210000800000000000BA -:103530000000000010001000030002100000000056 -:10354000000000000000000000008000002180005A -:103550008080000000000000000000000400000067 -:103560000000040000000000000000000000000057 -:10357000000000000101010000000000080000043C -:1035800040888800010000210020000000000000A9 -:10359000000000000000000000000000000000002B -:1035A00000000000000088001084200010000000CF -:1035B0000000000000000002000000000000000009 -:1035C0000000000000000400C010C0100200100144 -:1035D000201008A010000000000000000000000003 +:1034F00000000000000000000000000000000000CC +:1035000000000000000000000000800080000000BB +:10351000000000000000000000008000000000002B +:10352000000000000000000000008000000000001B +:10353000000000000000000000000000000000008B +:10354000000000000000000000000000000000007B +:1035500000000000C001200000000000000000008A +:10356000000000000000000000000000000000005B +:10357000000000000000000000000000000000004B +:1035800000000000000000000000000040000400F7 +:10359000040004000000A0008400A0000800040053 +:1035A000820084000400040004008800040000007D +:1035B000000000000000000000000000000000000B +:1035C00000000000000000000000000000000000FB +:1035D00000000000000000210000060000000000C4 :1035E00000000000000000000000000000000000DB -:1035F000000000000000810000E007000000000063 -:1036000000E00000000000000000070000000000D3 -:1036100000000000000000000000000007000000A3 -:103620000000000000000000004100000700000052 +:1035F00000000000000000000000000000000000CB +:1036000000000000000000000000000000000000BA +:1036100000000000000000000000000000000000AA +:10362000000000000000000000000000000000009A :10363000000000000000000000000000000000008A :10364000000000000000000000000000000000007A -:1036500000000000070082000000000000000000E1 -:10366000C3C37D7D000000000000000000000000DA +:103650000000000000000000000000FF000000FF6C +:10366000000000000000000000000000000000005A :10367000000000000000000000000000000000004A -:103680000C0CFCFCFF05F000000000000000000036 -:10369000000000000000000000000000000000002A -:1036A00000000000000000000000000C555D00005C -:1036B00030300000000000000000000000000000AA +:10368000000000000000000000000000000000003A +:10369000F434C4040000000000000C0CD714000037 +:1036A00000003C001717000000000FC35500000089 +:1036B000000000000000000000000000000000000A :1036C00000000000000000000000000000000000FA -:1036D0000000F0F5F3F7C0FFEAFF00000000000073 -:1036E0000000FFFF7D7D00000000000000000000E2 +:1036D00000000000000000000000000000FF0000EB +:1036E00000FF0000000000000000000000000000DB :1036F00000000000000000000000000000000000CA -:1037000000000000F0F0FF05F000000000000F0FC7 -:103710000F0F00000000000000000000000000008B -:10372000000000000000000000000000000C000C81 -:103730000000303000000000000000000000000029 -:10374000000000000000000000000000000A0C0063 -:10375000000000000055C3D7C0C0EAEA0000000026 -:103760000000000000000000000000000000000059 +:1037000000000000000000000000000000000000B9 +:103710000000F737C707000000000000CFCFD71424 +:1037200000000000FFC31717000000000FC355FF83 +:103730000000000000000000000000000000000089 +:103740000000000000000000000000000000000079 +:10375000000000000000000000000000FF0000006A +:1037600000FFFFFF0000000000000000000000005C :103770000000000000000000000000000000000049 -:10378000000000000000000020200000FD7DFD7D05 -:103790000A0A0A0A00000000000000000000000001 -:1037A00000000000000000000000000000004F0FBB -:1037B000FFBF5500000000000000000000000000F6 -:1037C0000000000000000000000000000000C3C373 -:1037D000C3C3B200B23CFCFCFCFCD7C3DFCF00008B -:1037E00000000000000000000000000000000000D9 +:103780000000000000000000000000000000000039 +:10379000000000003EFE3EFE0000000000007C7CB9 +:1037A0007C7C00000000BEBE3C3C00000000FFFF2F +:1037B000AA0000000000000000000000000000005F +:1037C00000000000000000000000000000000000F9 +:1037D0000000000000000000000000000000FF00EA +:1037E000000000FFFFFF00000000000000000000DC :1037F00000000000000000000000000000000000C9 -:1038000000000000000000000000FFFFFFAFBC3C14 -:10381000BC3C2A2A2AAA0000000000000000000088 -:103820000000000000000000000000000000000098 -:103830004F0FFFBF55000000000000000000000017 +:1038000000000000000000000000000000000000B8 +:103810000000000000003EFE3EFE00000000000030 +:10382000FEFEFEFE00000000BEBEFFFF0000000026 +:10383000FFFFAAFF000000000000000000000000E1 :103840000000000000000000000000000000000078 -:1038500000410300B2C3B2FF0C0C0C0C55005F0F0B -:103860000000000000000000000000000000000058 +:103850000000000000000000000000000000000068 +:10386000038203380C0082C000000000000000004A :103870000000000000000000000000000000000048 -:1038800000610004C00D00A000610002000D0000F6 -:103890000061000E001D000100000000000000009B -:1038A000000000000008050000A000610006000DF7 -:1038B000000000000E3800000000000000000000C2 -:1038C000000000610006000D000000000000000084 -:1038D000000000613006000D000000610006000DD0 +:103880000000000000000000000000000000000038 +:1038900000000000000000000000300000000000F8 +:1038A00000000000300000000000000030000000B8 +:1038B00000000000300000000000000000000000D8 +:1038C00000000000000000000000000000000000F8 +:1038D00000000000000000000000000000000000E8 :1038E00000000000000000000000000000000000D8 :1038F00000000000000000000000000000000000C8 -:103900000000FF40FF000000000000000000000079 -:10391000000000FF008F0000000000000000000019 +:1039000000000000000000000000000000000000B7 +:1039100000000000000000000000000000000000A7 :103920000000000000000000000000000000000097 -:103930000000002000000000000000000000000067 -:103940000000000000410341FFFF0F0F00000000D6 -:1039500000000000000000003F3FFAFA00000000F5 +:103930000000000000000000000000000000000087 +:103940000000000000000000000000000000000077 +:103950000000000000000000000000000000000067 :103960000000000000000000000000000000000057 :103970000000000000000000000000000000000047 -:1039800000000000BF00FF00000000000000000079 -:103990000000000000FF008F000000000000000099 +:103980000000000000000000000000000000000037 +:103990000000000000000000000000000000000027 :1039A0000000000000000000000000000000000017 :1039B0000000000000000000000000000000000007 -:1039C00000000000000000C303C341C341C3000066 -:1039D000000000000000000000003030FAFA000093 +:1039C00000000000000000000000000000000000F7 +:1039D00000000000000000000000000000000000E7 :1039E00000000000000000000000000000000000D7 :1039F00000000000000000000000000000000000C7 -:103A0000000000000000000F000F00000000C0FFD9 -:103A1000C0D40000000000000F0F000000000000F4 +:103A000000000000000000000000000000000000B6 +:103A100000000000000000000000000000000000A6 :103A20000000000000000000000000000000000096 :103A30000000000000000000000000000000000086 -:103A400000000000000000000CF05000F5F5F5F556 +:103A40000000000000000000000000000000000076 :103A50000000000000000000000000000000000066 -:103A60003F303F30F0F03C3C000000000000000020 +:103A60000000000000000000000000000000000056 :103A70000000000000000000000000000000000046 :103A80000000000000000000000000000000000036 -:103A9000C0FFC0D4000000000000000000000000D3 +:103A90000000000000000000000000000000000026 :103AA0000000000000000000000000000000000016 :103AB0000000000000000000000000000000000006 -:103AC000000000000000000000000C005000FF0F8C -:103AD000F0000000000000000000000000000000F6 -:103AE00000003F303F30F0F03C3C20000000000080 -:103AF000040000000000000004002000000000009E -:103B00008800000020002000400021802084838065 -:103B100021840080040000000480200200000000D6 -:103B200020000000200020002000000320002000D2 -:103B3000200020000400000000808200200082009D -:103B40008400200000008800892004202003200039 -:103B50000003200020008800C0082184000000002D -:103B60000004400000000000000888800000000001 -:103B700000000000000000004000200440000000A1 -:103B800000000002400000400000100020028011F0 -:103B9000401040110010004004028020400000004E -:103BA00000000000000000000040000000000000D5 -:103BB00000000000000000000040001009020000AA -:103BC0000000000000C00000009004032005000079 -:103BD0000000008200000002000000020810400007 -:103BE0001000002080000000000000020010000013 -:103BF000000000000800000000000200000000417A -:103C0000020000000441040004000400040020003D -:103C1000204002040904030000000000000002002C -:103C200000000000010000100000900002000000F1 -:103C30000000000008000200080000000000000072 -:103C40000000000000000210084002000000020016 -:103C50000410000000000000021000000000080036 -:103C600090000200080008000200080000000800A0 +:103AC00000000000000000000000000000000000F6 +:103AD00000000000000000000000000000000000E6 +:103AE00000000000000000000000000000000000D6 +:103AF00000000000000000000000000000000000C6 +:103B00000000008000800080200000000100000014 +:103B10000020008000800080008000000000000085 +:103B20000100008001000080200000000000000073 +:103B30000000008000800080008000000000000085 +:103B40000000020000000000000020004000000013 +:103B500000008800C000000000000000000000001D +:103B600000002000000000000000040000004000F1 +:103B70000000000000000002000000000000000043 +:103B80000000000000200020002000900000040041 +:103B900000000001002000200020002000000000A4 +:103BA000000004004020040000200000000000008D +:103BB0000000000000200020002000200000400045 +:103BC00000000000000000000000000000000000F5 +:103BD0000002000000000040000000000000400063 +:103BE00000000000000000000000000000000000D5 +:103BF00004000000000000000000000000000200BF +:103C000004000000000000000000080000000000A8 +:103C100000000000000000000000000000000000A4 +:103C20000200000000000000000000000000000092 +:103C30000000000000000000000000000000004044 +:103C40000000000000000000000000000041000033 +:103C50000000000002000000000900000000000059 +:103C60000000000000000200000000000000000052 :103C70000000000000000000000000000000000044 -:103C80001008001000880000000000000084000000 -:103C900080008000000120014000000000000000C2 -:103CA00000080000000040000000000002000000CA -:103CB000000000000000004000000084200000C060 -:103CC00000C0000800C0000800000008000000005C -:103CD00000000800000000000000000000000900D3 -:103CE00004000088048400082008000880100004F4 -:103CF0008000000000000000000000000000000044 +:103C8000000000000000000000000000000800002C +:103C90000000000000000000000000000000000024 +:103CA000000000000000000000000000000800000C +:103CB0000000000000000000000000000000000004 +:103CC000000000000000000000000000000000C034 +:103CD00000000000000000000000000000000000E4 +:103CE00000000000000000000000000000000000D4 +:103CF00020000000000000000000000000000000A4 :103D000000000000000000000000000000000000B3 -:103D100000000400400020009000000089000185A0 -:103D20000185400500210008002100080000000076 -:103D30000000000000000005000000210009000054 -:103D4000040002000200000000000005000900005D -:103D5000000004000000000000004000000000001F -:103D600000100400000000000000400000000000FF -:103D7000000000080000000000000000000000003B -:103D80000000000000000000000000000000000033 -:103D90000000050000008000900000000000080006 -:103DA00004200420000000000008000000000000C3 -:103DB0000000000000000000000000000000000003 -:103DC00000000000080000000000000000000000EB -:103DD0000008000880000000000008000002000247 -:103DE0000002040080A0000000000000200000008D -:103DF000210400A0030000000000000008000000F3 -:103E0000000000000000000020000000080000008A -:103E10000000001100000020000000000000000071 -:103E20000011000008000000000000000000000079 -:103E30000000000082000000000000000000000000 -:103E400000008800200000000000000000000000CA -:103E500000000800200000000000000000000040FA -:103E600000000000000005200040080000050040A0 -:103E700000410800000008400000000000000000B1 -:103E8000000004000000000000000004000000002A -:103E900000000000200008000000030000000000F7 -:103EA0000000004000C000080000110000080900E8 -:103EB00000000000000400000000002000000000DE -:103EC00000000000000000040000000000400000AE -:103ED0000000000000000800000002900200002026 -:103EE0000000000000000290880100000000200097 -:103EF0002000000000040000080000000000000096 +:103D1000040000000000000000000000000000009F +:103D20008200000001210000000090000000000857 +:103D30000000000001000141000000000000000040 +:103D400000008300000001000000000000000000EF +:103D500000009000000000000000000000000000D3 +:103D60000000000000000000000000000041000012 +:103D70000000000000000000000000000000000043 +:103D8000040000000000000000000000000000002F +:103D90000000000000000000000000000000000023 +:103DA00000000000000004000000000000004100CE +:103DB00000000000000004000400000000000000FB +:103DC00000000000040000000400000000000000EB +:103DD00000000000000203000000000000000000DE +:103DE00000000000000000000000000000000000D3 +:103DF00000000000000000000000000000000000C3 +:103E000000000000000000000000000000000000B2 +:103E1000000000000400040000000000000000009A +:103E20000000000000000000000000000000000092 +:103E3000000000000400000000000000000000007E +:103E4000000000000000000004000000000004006A +:103E50000000000000000000000000000000000062 +:103E60000000000000000000000000000000000052 +:103E70000000000000000000000000000000000042 +:103E80000000000000000000000000000000000032 +:103E90000000000000008000800000000000000022 +:103EA0000000000000000000000000000000000012 +:103EB000000000000008800000000000000000007A +:103EC0000000000000000000000080000000000072 +:103ED00000000000000000040000000000000000DE +:103EE00000000000000000000000000000000000D2 +:103EF00000000000000000000000000000000000C2 :103F000000000000000000000000000000000000B1 -:103F10000000000000000000000000000000000899 -:103F20008400000000000100008500000000000087 +:103F10000000000000000008000000000000008019 +:103F2000000000000000000000000000000004008D :103F30000000000000000000000000000000000081 -:103F40000000000000000000000001000000000070 -:103F5000000000050000000000000000000000005C -:103F60000000000000000008000000200000000029 -:103F7000000000000000040010000000000000002D -:103F8000000000000500000000000000000000002C +:103F400000800000000000000000000000000000F1 +:103F50000080008000000000000000000000000061 +:103F60000000000000000000000000000000000051 +:103F70000000000000000000000000000000000041 +:103F80000000000000000000000000000000000031 :103F90000000000000000000000000000000000021 -:103FA0000000000000A0000004000020000000004D -:103FB00000002100000000000000000000000000E0 -:103FC00000000000000000000000000008000000E9 -:103FD00000080000000000000000000400204082F3 -:103FE00000000082000000000000000002010884C0 -:103FF00000880000000000840000000000000000B5 +:103FA00000200000000000100000000003000000DE +:103FB0008000000021000000000000000000000060 +:103FC00000000020000000000000000000000000D1 +:103FD00000000020002000000000000000000000A1 +:103FE00000000000000000A0000000000000000031 +:103FF00000100000000000C00000000000C0000031 :1040000000000000000000000000000000000000B0 -:10401000000000000000000000002000020000007E -:1040200040000000000000080005000840080000F3 -:104030000008001000210021000000000010000016 -:104040002000000008000000000000040000000044 -:10405000000000040008000800000000000000202C -:10406000004100000000000000000000000000000F -:10407000000084000800002000410000084000000B -:1040800000000000000000400000000000000000F0 -:1040900020000000004020000000000000000000A0 -:1040A000000080000000000000000000000002008E -:1040B00000000000000000000000000020002000C0 -:1040C00000000000000002000000000000000000EE -:1040D00000000000000000000000000000000000E0 -:1040E00000000000000000000000200000000000B0 -:1040F0000040000000000000000000000008000870 +:1040100000000000000000000000000000000000A0 +:10402000002100000000000000000000000004006B +:10403000002100000000000000000000000000005F +:10404000000000410000000000000000000000002F +:1040500000000041000000000000000020000000FF +:104060000000000000000000000000000000000050 +:10407000000000000000000000000000040000003C +:104080000000000000000000000000000000000030 +:104090000000000000000000000000000000000020 +:1040A0000000000000000000000000000000000010 +:1040B0008000000000000000000000000000000080 +:1040C00000000000000000000000000000000000F0 +:1040D00000000000000000000000000000002000C0 +:1040E00000000000000021000000000000000000AF +:1040F00000000000000000000000000000000000C0 :1041000000000000000000000000000000000000AF -:10411000000000000000000000000000000000009F -:10412000000004100888908210020041000100087D -:10413000A09000000100000000000000000000004E -:1041400000000000000000000000000040020084A9 -:104150000004C00800000000000000000000000093 +:104110000000000000000000000000C0009000004F +:10412000000000C000900000000000C000900000EF +:10413000000000C000900000000000C000900000DF +:104140000000000300C000900000000000C00090CC +:104150000000000000C0009000000000000000000F :10416000000000000000000000000000000000004F -:10417000000090000000010008000000A0A0001056 -:104180000090080200000000000000000000000095 -:10419000000000000000000000000000000000001F -:1041A00000000000110080008085000000A00008D1 -:1041B00000840090000020000000000000000000CB -:1041C000000000000000000000000000000080006F -:1041D000000000808080000000000000000000005F +:10417000000000000000000000000000000000003F +:10418000000000000000000000000000000000002F +:10419000000000000000000000000000118000800E +:1041A000000000000080008000000000008000800F +:1041B00000000000008000800000000000800080FF +:1041C000000000000000008000800000000000806F +:1041D000008000000000008000800000000000005F :1041E00000000000000000000000000000000000CF -:1041F000000000008000000003008000000000803C -:1042000000800000800000000000000000000000AE +:1041F00000000000000000000000000000000000BF +:1042000000000000000000000000000000000000AE :10421000000000000000000000000000000000009E -:1042200000000000000000C0800205A080800000A7 -:104230000083000400800000000000000000000077 -:10424000000000000000000000000000000000006E -:104250000000808800400000000000000000000016 +:10422000800000008080000080000000808000008E +:10423000800000008080000080000000808000007E +:10424000800000008080000000008000000080806E +:10425000000080000000808000008000000080805E :10426000000000000000000000000000000000004E -:10427000800000000000800000000000000000003E -:1042800000000000800000000000000000000000AE +:10427000000000000000000000000000000000003E +:10428000000000000000000000000000000000002E :10429000000000000000000000000000000000001E -:1042A00000000000000000000291088888400840DB -:1042B00000000005A00100900000000000000000C8 -:1042C00000000000000000000000000000000000EE -:1042D000000002000883849184A000000000000018 -:1042E00000000000000000000002000000000000CC -:1042F000000088000400820008C0000000000000E8 -:10430000002020000400A0022000000000000000A7 +:1042A000000082000000C090000082000000C0906A +:1042B000000082000000C090000082000000C0905A +:1042C000000082000000C09000000000820000009A +:1042D000C090000082000000C0900000820000003A +:1042E000C09000000000000000000000000000007E +:1042F00000000000000000000000000000000000BE +:1043000000000000000000000000000000000000AD :10431000000000000000000000000000000000009D -:1043200000000000000000000000C1100908820821 -:104330008808004000A090C00004000000010000B8 -:10434000000000000000000000000001000000006C -:104350000000000088100008008482840000000033 -:10436000000000000000000040000000000000000D -:10437000000000000090000000100000000000009D -:1043800000010001C08400080004020400000000D5 +:10432000000000000000009000C0000000000090AD +:1043300000C000000000029000C0000000000090DB +:1043400000C000000000009000C00000000000005D +:10435000009000C000000000C09000C000000000FD +:10436000009000C0000000000000000000000000FD +:10437000000000000000000000000000000000003D +:10438000000000000000000000000000000000002D :10439000000000000000000000000000000000001D -:1043A00000000000000000000000000010801180EC -:1043B0000085408000800380A000000000000040D5 -:1043C00000000009000000000000000000010000E3 -:1043D00000000000000005800080000000000000D8 -:1043E000000000000000000000008000000000004D -:1043F00000000000000000000000000000000004B9 -:1044000000200004001000000080008080000000F8 +:1043A000000000000000000000800080000000000D +:1043B00000800080000000000080008000000000FD +:1043C00000800080000000000080008000000000ED +:1043D00000000080008000000000008000800000DD +:1043E00000000080008000000000000000000000CD +:1043F00000000000000000000000000000000000BD +:1044000000000000000000000000000000000000AC :10441000000000000000000000000000000000009C -:104420000000000000000000000000000000800408 -:104430000084050080110002008000800000000060 -:10444000000000000000000000000000000000016B -:1044500000000000000000000000000480808000D8 -:104460000000000000000000000900200000000023 -:1044700000000000000000000000004000000000FC -:1044800000000000000000000000000000008000AC +:104420000000000000008000000900000000801172 +:10443000800200000000801180090000000080114F +:1044400080020000000080118009000000000000D0 +:1044500080118004000000008011804100000000F5 +:104460008011800200000000000000000000000039 +:10447000000000000000000000000000000000003C +:10448000000000000000000000000000000000002C :10449000000000000000000000000000000000001C -:1044A000000000000000000000000000000000000C -:1044B0000800022184020401000100A08490000091 -:1044C00000000000000000000000000000000000EC -:1044D00000010000000000000000020084C0040889 -:1044E00008000000000000000000000000010000C3 -:1044F000000000000000000000000000000000209C -:1045000000000000000000000000880088208840B3 -:10451000A0000000000000000000000000000000FB -:10452000000000000000000000000000000000008B -:104530000000000000E0070000000081000007000C -:10454000000000000000000000000000000000006B -:10455000000000000000000000000000000000005B -:104560000700001200000000000000000000000032 -:104570000700000000000000000000000000000034 -:104580000700000000000000000000000000000024 +:1044A000000000000000000090000000000000007C +:1044B000C001200000000000C0012000000000003A +:1044C000C001200000000000C0012000000000002A +:1044D0000000C001200000000000C001200000001A +:1044E0000000C001200100000000000000000000EA +:1044F00000000000000000000000000000000000BC +:1045000000000000000000000000000000000000AB +:10451000000000000000000000000000000000009B +:104520000000000000000000000000410000060044 +:1045300000000082000006000000002100000600CC +:10454000000000820000060000000082000006005B +:104550000000000000820000060000000042000091 +:1045600006000000008200000600000000000000BD +:10457000000000000000000000000000000000003B +:10458000000000000000000000000000000000002B :10459000000000000000000000000000000000001B -:1045A000000000000000000000000000000000000B -:1045B0000000000000000000000000000F0F0F0FBF -:1045C000FCFCFCC000000000000000000000000037 -:1045D00000000000000000000000000000000000DB -:1045E00000000000000000000000000000000000CB +:1045A000000000000000000000000000FFFF00000D +:1045B000FF000000FF000000FF000000FF000000FF +:1045C000FF000000FF000000FF000000FF000000EF +:1045D000FF0000000000FF000000FF000000FF00DF +:1045E0000000FF000000FF000000FF0000000000CE :1045F00000000000000000000000000000000000BB -:104600000000C3C3C3C300000000000000000C6C26 -:104610000000C0D04050000000000000000000007A -:10462000000000000000000000000000000000008A -:10463000000000000000000000000000000000007A -:104640000000FCFCFCFC000000000000000000007A -:10465000000000000000000000000000000000005A -:10466000000000000000000000000000000000004A +:1046000000000000000000000000000000000000AA +:10461000000000000000000000000000000000009A +:104620000000000000000000000000000000FFFF8C +:104630000000FF000000FF000000FF000000FF007E +:104640000000FF000000FF000000FF000000FF006E +:104650000000FF0000000000FF000000FF0000005D +:10466000FF000000FF000000FF000000FF0000004E :10467000000000000000000000000000000000003A -:104680000000000000FF00FF00000000000000002C -:104690000C6C000080900010000000000000000082 +:10468000000000000000000000000000000000002A +:10469000000000000000000000000000000000001A :1046A000000000000000000000000000000000000A -:1046B00000000000000000000210200000881084AC +:1046B00000000000000000000000000000000000FA :1046C00000000000000000000000000000000000EA :1046D00000000000000000000000000000000000DA -:1046E00000000210200000881004000000000000FC +:1046E00000000000000000000000000000000000CA :1046F00000000000000000000000000000000000BA :1047000000000000000000000000000000000000A9 :104710000000000000000000000000000000000099 :104720000000000000000000000000000000000089 -:104730000000000000000000000000000000000079 -:10474000000000000C0CFF00FF0000000000000053 -:104750000000000000000000000000000000000059 -:104760000000000000000000000000000000000049 -:104770000000000000000000000000000000000039 -:104780000000000000000000FC0CFCFC0000000029 -:10479000000000002F200F0060F06FFF00000000FD +:104730000000000000FF00000F0F000000FF00005D +:104740000F0F000000FF00000F0F000000FF00002F +:104750000F0F000000FF00000F0F0000000000FF1F +:1047600000000F0F000000FF00000F0F000000FF0F +:10477000FFFFF0F00000000000000000000000005B +:104780000000000000000000000000000000000029 +:104790000000000000000000000000000000000019 :1047A0000000000000000000000000000000000009 -:1047B00000000000000000000000000000000000F9 -:1047C0000000000000000C0C99009900000000009F -:1047D00000000000000000000000000000000000D9 -:1047E00000000000000000000000000000000000C9 -:1047F00000000000000000000000000000000000B9 -:10480000000000000000000000000C0C0CFC000088 -:10481000000000000000BFB09F906CFC6CFC00002A +:1047B00000000000000000FF00000F0F000000FFDD +:1047C00000000F0F000000FF00000F0F000000FFAF +:1047D00000000F0F000000FF00000F0F000000009E +:1047E00000FF00000F0F000000FF00000F0F00008F +:1047F00000FFFFFFF0F000000000000000000000DC +:1048000000000000000000000000000000000000A8 +:104810000000000000000000000000000000000098 :104820000000000000000000000000000000000088 -:104830000000000000000000000000000000006117 -:104840000006000D000000610036000D0000006150 -:104850000006000D00000000000000000000000045 -:104860000000000000000000000000000000000048 -:10487000000000000000000000000008050000A08B -:10488000000000000000000000000008001000A070 -:1048900000610006000D00000000000000000000A4 +:10483000000000000000030203380C0092C0038255 +:1048400003380C0092C0038203380C0092C003822C +:1048500003380C0092C0038203380C0092C00000A1 +:10486000038203380C0092C0038203380C0092C00C +:10487000038203380C0082C000000000000000002A +:104880000000000000000000000000000000000028 +:104890000000000000000000000000000000000018 :1048A0000000000000000000000000000000000008 :1048B00000000000000000000000000000000000F8 -:1048C0000505050500AA00AA000000000000000080 -:1048D000000000000000FFFF0000000000000000DA +:1048C00000000000000000000000000000000000E8 +:1048D00000000000000000000000000000000000D8 :1048E00000000000000000000000000000000000C8 :1048F00000000000000000000000000000000000B8 :1049000000000000000000000000000000000000A7 -:10491000000000000000003CA0BC000000000000FF +:104910000000000000000000000000000000000097 :104920000000000000000000000000000000000087 :104930000000000000000000000000000000000077 -:1049400000000505050500AA00AA000000000000FF -:10495000000000000000F0F0FFFF00000000000079 +:104940000000000000000000000000000000000067 +:104950000000000000000000000000000000000057 :104960000000000000000000000000000000000047 :104970000000000000000000000000000000000037 :104980000000000000000000000000000000000027 -:104990000000000000000000003C003C000000009F +:104990000000000000000000000000000000000017 :1049A0000000000000000000000000000000000007 :1049B00000000000000000000000000000000000F7 -:1049C000000000000505050500AA00AA0F0F000061 +:1049C00000000000000000000000000000000000E7 :1049D00000000000000000000000000000000000D7 :1049E00000000000000000000000000000000000C7 :1049F00000000000000000000000000000000000B7 @@ -160970,354 +160970,354 @@ :104A10000000000000000000000000000000000096 :104A20000000000000000000000000000000000086 :104A30000000000000000000000000000000000076 -:104A40000000000000000505050500AA00AA2F0FC0 -:104A5000280000000000000000000000000000002E +:104A40000000000000000000000000000000000066 +:104A50000000000000000000000000000000000056 :104A60000000000000000000000000000000000046 :104A70000000000000000000000000000000000036 :104A80000000000000000000000000000000000026 :104A90000000000000000000000000000000000016 -:104AA00000000000000000004000000020000000A6 -:104AB00000000000000000800400000001000080F1 -:104AC0000000000000002000200000802000840082 -:104AD000000000000000008020000000881000009E -:104AE00000000000000020000003200082002000E1 -:104AF000200000000000000088000000820020006C -:104B00000000000000000000040020002000004120 -:104B100000081000880000118800000000008400D8 -:104B200000008800000000002003C040000040405A -:104B300010C00082000000000010C000000008004B -:104B40000010400000000000000000000002000211 -:104B500000C00040000000C0001040000000000045 -:104B600000820000000000000000000000000000C3 -:104B70000000000000000002000000000000000033 -:104B8000000004040000000000000000000000001D -:104B900000020000400000000000200000000000B3 -:104BA000000410901000400000000004000000000D -:104BB0000000020000000000001082000000010060 -:104BC0000000000008000241004008080800000042 -:104BD0000000080000400040084000000000020003 -:104BE000001002000040020000034010000002001C -:104BF0000800000002000000000000000040020069 -:104C00000200000000000800000002001010020076 -:104C10000200000900400000004082412000020024 -:104C20000210000002000100010020040910000031 -:104C30000000000000000000110000000000000063 -:104C4000041000000000040000000000800080004C -:104C50000000000000000000000000000000000054 -:104C600000080000000011000000000080C00000EB -:104C700000000000008800000000000000000000AC -:104C8000000000080000000091000000000000008B -:104C90000000040000000000000000000000000010 -:104CA0000400040800008500200020088000A0A067 -:104CB000000000000000000088000000000000006C -:104CC00000000008000000000000000000000000DC -:104CD00000000000880082000000000000000000CA -:104CE00000000000004182000400000000000000FD -:104CF00000000000000000000000000000000400B0 -:104D000000000000000000000000000000000000A3 -:104D10000000000088000000C00000000005000046 -:104D20009040000000009000200020002000008043 -:104D30002008080000100000000000000000000033 -:104D40000000000000000000080000000000030058 -:104D5000030000000000210000C00000000000C0AF -:104D600000000000000000C0000000000000000083 -:104D70000000000000000000000000000000000033 -:104D8000000000000900000000000000000000001A -:104D9000000000000000000008000800008203007E -:104DA000008208A009080084032040000000800061 -:104DB00000048400C00000000000000000000000AB -:104DC00008000800000000002004C011004000009E -:104DD0000005820000000000A041820000000002E7 -:104DE000000982000000000000000010000090098F -:104DF0000009821000000000000400000000000014 -:104E00008200000000000000000000000000002000 -:104E100082210041080000000000400000058802D7 -:104E2000820200000821000408410805004000003B -:104E3000000500020011000000000000000000005A +:104AA00000000000000000000000000000002000E6 +:104AB00000000000000000000000000000002000D6 +:104AC0000000000000000000400000004000200046 +:104AD00000800100008000000000008000802000B5 +:104AE0004080010041000080000020000000200004 +:104AF00021004100010000800000880000000080CB +:104B000020202080008020800000200000002080E5 +:104B10002000200000000000020020000000000033 +:104B20002000200000002000000000000000000025 +:104B300000000000400000000000000040000000F5 +:104B400000004000400040000000000000000002A3 +:104B50000000402004000020000000000020402051 +:104B600000000020040004000020000000004000BD +:104B70000000040004000400002000000000000009 +:104B80000020000140200020002000000000000064 +:104B900000200000000000000000000000000000F5 +:104BA0000000000000000000000000000000000005 +:104BB00000000000020000000000000000000000F3 +:104BC00000000000000000000000000000000000E5 +:104BD00000000000000000000000000000000000D5 +:104BE00000100000000000000000000000000000B5 +:104BF00000000000000000000000000000000000B5 +:104C000000000000000000000000000000000000A4 +:104C10000000000000000000000000000000000094 +:104C20000000000000000000000000000000000084 +:104C3000000000080000000000000000000000006C +:104C40000000000000000000000000000000000064 +:104C5000000000080000000000000000000000004C +:104C60000000000000000000000000000000000044 +:104C7000000000000008000000000000000000002C +:104C80000000000000000000000000000000000024 +:104C9000000000000008000000000000000000000C +:104CA0000000000000000000000000000000000004 +:104CB00000000000000000000000000000000000F4 +:104CC00000000000000000000000000000000000E4 +:104CD00000000000000000000000000000000400D0 +:104CE000000000000041040000000021000000005E +:104CF000000004000405041000000000000500008E +:104D00000400040004000000000000000000000097 +:104D1000000004000400000000800000000000000B +:104D20000000000000000000000000000000000083 +:104D30000000000000000000000000000000000073 +:104D40000000000000000000000000000000000063 +:104D50000000000000000000000000000000000053 +:104D60008000000000000000800000000000000043 +:104D700000000000800080008000000000000000B3 +:104D800000008000800080000000000000000000A3 +:104D900000000000900080000000002000000000E3 +:104DA0000000000000000000000000000000000003 +:104DB00000000000000000000000000000000000F3 +:104DC00000000000000000000000000000000000E3 +:104DD00000000000000000000000000000000000D3 +:104DE00000000000000000000000000000000000C3 +:104DF00000000000000010000000000000000000A3 +:104E000000000000000000000000000000000000A2 +:104E10000000000000000000000000000000000092 +:104E20000000000000000000000000000000000082 +:104E30000000000000000000000000000000000072 :104E40000000000000000000000000000000000062 :104E50000000000000000000000000000000000052 -:104E6000000000000000000000000300000000003F -:104E700000000000004100000000000000000000F1 +:104E60000000000000000000000000000000000042 +:104E70000000000000000000000000000000000032 :104E80000000000000000000000000000000000022 -:104E900000000000210000000000000000000400ED -:104EA00002000000000011000000001000000000DF -:104EB00000000000000221000000000000000000CF -:104EC00008000000000000000000000000200000BA -:104ED00000000000000000000000008082000100CF -:104EE00000000000000000000000000000000000C2 +:104E90000000000000000000000000000000000012 +:104EA0000000000000000000000000000000000002 +:104EB00000000000000000000000000000000000F2 +:104EC00000000000000000000000000000000000E2 +:104ED00000000000000000000000000000000000D2 +:104EE0000000000000000000008000000000000042 :104EF00000000000000000000000000000000000B2 :104F000000000000000000000000000000000000A1 -:104F1000A000A00000000000000000000000000051 -:104F20000000000000000000000000000040000041 -:104F30000040000000210000000800000000000008 -:104F40000000000000000000000000000000000160 -:104F500000000000000000000000008400020008C3 -:104F60000802100000000010000000000000000017 -:104F70000000000000000000000000000000000031 -:104F800000000000000021C0000000000000000040 -:104F90000000000000000008000000000000000009 -:104FA00000000000000000000000050000000000FC -:104FB00008020000000011A000A00008000000216D -:104FC00000000000000000001000000000000000D1 -:104FD000000400000000000020008200000000002B -:104FE0000021000000040000000900000000000093 -:104FF000820000000000000000000000000000002F -:105000009000000000000000000000008200080086 -:105010000000080000000000000000000000000088 -:10502000000000000000000000000000011000006F -:1050300000410800200020080005002104000000B5 +:104F10000000000000000000008000000000000011 +:104F20000000000000000000000000000000000081 +:104F30000000000000000000000000000000000071 +:104F40000000000000000000000000000000000061 +:104F5000000000000000000000000000000000A0B1 +:104F6000000000000000000000000020000000A081 +:104F700000000000000000840000000000000000AD +:104F80000010000000000000000000000000000011 +:104F900000C0000000000000000000200000000031 +:104FA0000000000000000000000000000000000001 +:104FB00000000000000000000000000000000000F1 +:104FC00000000000000000000000000000000000E1 +:104FD00000000000000000000000000000000000D1 +:104FE00000000000000000000000000000000000C1 +:104FF00000000000000000000000000000000000B1 +:10500000000000100000000000050000000000008B +:105010000240000000000000A009000000000000A5 +:105020000000000000000000000000000000000080 +:105030000000000000000000000000000000000070 :105040000000000000000000000000000000000060 -:105050000000000000000000000020000000000030 -:10506000000000A0000000000000000000000000A0 +:105050000000000000000000000000000000000050 +:105060000000000000000000000000000000000040 :105070000000000000000000000000000000000030 -:10508000000000000000000000000000000003001D -:1050900000000000000000000000021000000000FE -:1050A00000000000000000000000000000000204FA -:1050B00000080000088200008000000000000208D4 -:1050C00000010000000100010000000000000000DD -:1050D00010000000000000000000000000000000C0 -:1050E00000000000000000000000000000000000C0 -:1050F00000000000000000000000010004000000AB -:10510000000000000000000000000000000000009F -:10511000000000000000000000000000000000008F -:105120000000000000000000000000820010008469 -:1051300000100008081000820002000000000100BA -:1051400000000040000000080008200000000000EF -:1051500000008000000000000000000000000000CF -:10516000000000000000000000001000000000002F -:1051700000000000000000000000000003008000AC -:10518000000000000000000000000000000000001F -:10519000000000000000000000000000000000000F -:1051A000000000000000000000000000000000807F -:1051B0000000008000808080008000000009000066 -:1051C0004011000500000000000000000000000089 -:1051D000800000000000000000008000000080004F -:1051E00000000000000000030080000000008000BC -:1051F00080000000000000000000000080000000AF -:105200000005000000000000000000000000000099 -:10521000000000000000000000000000000000008E -:1052200000040080000000000000000000000000FA -:1052300000800000000000000091000000008900D4 -:1052400000000905000000000000000000009000C0 -:105250001000400088000000840800009020C0007A -:105260008200840084400000000100080002200049 -:10527000020040002000000000000000000040008C -:10528000A000A00184400000000000000000000019 -:10529000000000000000000000000000000000000E -:1052A00000000000000400000000000000000000FA -:1052B000000000080000000000000008009000004E -:1052C000400040008200820000000000000000005A -:1052D00000000000000000000084000004A000A006 -:1052E00000000000000000000000000004000000BA -:1052F00000000000000000000000000000000000AE -:10530000000000010000000100000000000000009B -:10531000000000000000000000000000000000008D -:10532000000000000000000000000000000000007D -:105330000000000000000000A000100000000000BD -:105340001000000000010001000000000000080043 -:10535000000000000000000000004000000080008D -:1053600000000000000000000000000000008000BD -:10537000000000000000000000000000000000002D -:1053800000000004002000100002000000000000E7 -:10539000000000000000000000000000000000000D -:1053A00000000000000000000000000000000000FD -:1053B00000000000000000000000000000000000ED -:1053C00000001000000900100004040000000000AC -:1053D000000000000000000000800000000000024B -:1053E00000000000000000800000000080001000AD -:1053F000020080000000000000000000000000002B -:10540000000000000000000000800000000000001C -:10541000000000000000000000000000000000008C -:1054200000000000000000008000000000000000FC -:1054300000000000000000000000000000008000EC -:105440000000800000000900030000001040000080 -:105450000000000000000000000400080000000040 -:1054600000A100A00000000000C000880000400073 -:105470000500050004000000008200880000000014 -:105480000000000000000000008200040000000096 -:10549000000000000000000000000000000000000C -:1054A00000000000000000004000020004000200B4 -:1054B00000000000000000000000000000000000EC -:1054C0000800880084008200000001900040000174 +:105080000000000000000000000000000000000020 +:105090000000000000000000000000000000000010 +:1050A0000000000000000000000000000000000000 +:1050B00000000000000000000000000000000000F0 +:1050C00000000000000000000000000000000000E0 +:1050D00000000000000000000000000000000000D0 +:1050E000000000000000000000C000900000000070 +:1050F00000C000900000000000C000900000000010 +:10510000000300C000900000000000C000900000FC +:10511000000000C000900000000000C000900000EF +:10512000000000C00090000000000000000000002F +:10513000000000000000000000000000000000006F +:10514000000000000000000000000000000000005F +:10515000000000000000000000000000000000004F +:10516000000000000000000000000080008000003F +:10517000000000800080000000000080008000002F +:10518000000000000080008000000000008000801F +:10519000000000000080008000000000008000800F +:1051A00000000000008000800000000000000000FF +:1051B00000000000000000000000000000000000EF +:1051C00000000000000000000000000000000000DF +:1051D00000000000000000000000000000000000CF +:1051E00000000000000000000000000000000000BF +:1051F00080008080000000008000808000000000AF +:10520000800080800000000000008000808000009E +:10521000000080008080000000008000808000008E +:10522000000080008080000000008000808000007E +:10523000000000000000000000000000000000006E +:10524000000000000000000000000000000000005E +:10525000000000000000000000000000000000004E +:10526000000000000000000000000000000000003E +:1052700000008400C090000000008400C090000086 +:1052800000008400C0900000000000008400C09076 +:10529000000000008400C090000000008400C09066 +:1052A000000000008400C090000000008400C09056 +:1052B00000000000000000000000000000000000EE +:1052C00000000000000000000000000000000000DE +:1052D00000000000000000000000000000000000CE +:1052E00000000000000000000000000000000000BE +:1052F00000000000009000C000000000029000C00C +:1053000000000000009000C00000000000000090BD +:1053100000C000000000009000C0000000000090ED +:1053200000C000000000009000C0000000000090DD +:1053300000C00000000000000000000000000000AD +:10534000000000000000000000000000000000005D +:10535000000000000000000000000000000000004D +:10536000000000000000000000000000000000003D +:1053700000000000000000800080000000000080AD +:10538000008000000000008000800000000000009D +:10539000008000800000000000800080000000000D +:1053A00000800080000000000080008000000000FD +:1053B00000800080000000000000000000000000ED +:1053C00000000000000000000000000000000000DD +:1053D00000000000000000000000000000000000CD +:1053E00000000000000000000000000000000000BD +:1053F0000000000080000002000000008011800218 +:1054000000000000801180020000000000008011F8 +:105410008009000000008011800900000000801158 +:105420008004000000008011800500000000801151 +:1054300080050000000000000000000000000000E7 +:10544000000000000000000000000000000000005C +:10545000000000000000000000000000000000004C +:10546000000000000000000000000000000000003C +:105470000000000000009000000000000000C001DB +:10548000200000000000C00120000000000000001B +:10549000C001200000000000C0012000000000004A +:1054A000C001200100000000C00120000000000039 +:1054B000C00120000000000000000000000000000B +:1054C00000000000000000000000000000000000DC :1054D00000000000000000000000000000000000CC -:1054E0000000000007000000000000000000420073 -:1054F00000000000000000000000000000000000AC -:10550000000000000000000000000000000000009B -:10551000000000000000000000000000000000008B -:10552000000000000000000000000000000000007B -:10553000000000000000000000000000000000006B -:1055400000000000000000000000000000E000007B +:1054E00000000000000000000000000000000000BC +:1054F0000000000000000000008200000600000024 +:1055000000210000060000000082000006000000EC +:10551000000000820000060000000082000006007B +:1055200000000042000006000000000A0000060023 +:105530000000000A0000060000000000000000005B +:10554000000000000000000000000000000000005B :10555000000000000000000000000000000000004B -:10556000000000000000FF55C3FF00000000000025 -:10557000000082F200F000000000000000000000C7 -:10558000000000000000000000000000000000001B -:10559000000000000000000000000000000000000B -:1055A0000000000000000000000000003030BA30B1 -:1055B00000000000000000000000000000000000EB -:1055C00000000000555555FF0000000000000000DD +:10556000000000000000000000000000000000003B +:10557000000000000000000000000000FFFF00002D +:1055800000FF000000FF000000FF000000FF00001F +:1055900000FF0000000000FF000000FF000000FF0F +:1055A000000000FF000000FF000000FF000000FFFF +:1055B000000000FF000000FF000000FF00000000EE +:1055C00000000000000000000000000000000000DB :1055D00000000000000000000000000000000000CB -:1055E0000000000000000000FF55C3FF00000000A5 -:1055F0000000000000F000F00000000000000000CB -:10560000000000000000000000000000000000009A -:10561000000000000000000000000000000000008A -:10562000000000000000000000000000000030301A -:10563000303000000000000000000000000000000A -:10564000000000000000030303FF00000000000052 +:1055E00000000000000000000000000000000000BB +:1055F0000000000000000000000000000000FFFFAD +:10560000000000FF000000FF000000FF000000FF9E +:10561000000000FF0000000000FF000000FF00008D +:1056200000FF000000FF000000FF000000FF00007E +:1056300000FF000000FF000000FF000000FF00006E +:10564000000000000000000000000000000000005A :10565000000000000000000000000000000000004A -:1056600000007D287D2800000000F5F5F5F500001C -:105670000000FFFF0010000000000000000000001C -:105680000000FDADF8A800000000000000000000D0 -:105690000000555500000000000000000000000060 -:1056A00000000000000000000000000000000000FA -:1056B00000000000000000000000000000000000EA -:1056C0008000000000000000875082000000000001 -:1056D00000000000FF0000000000000000000000CB -:1056E00000000000AFAF050500000000AAAAFFFF00 -:1056F000000000000010001000000000000000008A -:10570000000000005D0D58080000000000000000CF -:1057100000000000575503000000000000000000DA -:105720000000000000000000000000000000000079 -:105730000000000000000000000000000000000069 -:105740000000800000000000000005500000000084 -:10575000000000000000FF04040400610006000DCA -:105760000000000000000000000005000A0805001D -:1057700000A0000000000000000000610006000D15 -:105780000000000000000000000000000000000019 -:10579000000000610006000D000000000000000095 -:1057A00000000000000000000000000000000000F9 -:1057B00000000000000000000000000000000000E9 -:1057C0000000000000003000000000000000300079 -:1057D0000000000000610001000100000000000066 +:10566000000000000000000000000000000000003A +:105670000000000000000000000000000000FF002B +:105680000000FF000000FF000000FF000000FF001E +:105690000000FF0000000000FF000000FF0000000D +:1056A000FF000000FF000000FF000000FF000000FE +:1056B000FF000000FF000000FF00000000FFFFFFF0 +:1056C00000000000000000000000000000000000DA +:1056D00000000000000000000000000000000000CA +:1056E00000000000000000000000000000000000BA +:1056F00000000000000000000000000000000000AA +:10570000FF000000FF000000FF000000FF0000009D +:10571000FF000000FF0000000000FF000000FF008D +:105720000000FF000000FF000000FF000000FF007D +:105730000000FF000000FF000000FF00000000FF6D +:10574000FFFF00000000000000000000000000005B +:105750000000000000000000000000000000000049 +:105760000000000000000000000000000000000039 +:105770000000000000000000000000000000000029 +:105780000000030203380C0092C0038203380C00AF +:1057900092C0038203380C0092C0000003820338D9 +:1057A0000C0092C0038203380C0092C003820338BD +:1057B0000C0092C0038203380C0092C003820338AD +:1057C0000C0082C00000000000000000000000008B +:1057D00000000000000000000000000000000000C9 :1057E00000000000000000000000000000000000B9 -:1057F0000000000000000000000000000F000F008B +:1057F00000000000000000000000000000000000A9 :105800000000000000000000000000000000000098 -:105810000000000000000000000000FF0000000089 +:105810000000000000000000000000000000000088 :105820000000000000000000000000000000000078 :105830000000000000000000000000000000000068 :105840000000000000000000000000000000000058 -:105850000000000000003C3C00FFCF0CCF0C00001B +:105850000000000000000000000000000000000048 :105860000000000000000000000000000000000038 -:1058700000000000000000000000000000000F0019 -:105880000F00000000000000000000000000000009 -:1058900000000000000000000000101010FF0000D9 +:105870000000000000000000000000000000000028 +:105880000000000000000000000000000000000018 +:105890000000000000000000000000000000000008 :1058A00000000000000000000000000000000000F8 :1058B00000000000000000000000000000000000E8 :1058C00000000000000000000000000000000000D8 -:1058D00000000000000000003C3C00FFCF0CCF0C9B -:1058E000CCCCFCFC00000000000000000000000028 +:1058D00000000000000000000000000000000000C8 +:1058E00000000000000000000000000000000000B8 :1058F00000000000000000000000000000000000A8 :105900000000000000000000000000000000000097 :105910000000000000000000000000000000000087 :105920000000000000000000000000000000000077 :105930000000000000000000000000000000000067 :105940000000000000000000000000000000000057 -:10595000000000000000000000003C3C0F0F28EB9E -:1059600028EBCFCFFFFF0000000000000000000088 +:105950000000000000000000000000000000000047 +:105960000000000000000000000000000000000037 :105970000000000000000000000000000000000027 :105980000000000000000000000000000000000017 :105990000000000000000000000000000000000007 :1059A00000000000000000000000000000000000F7 :1059B00000000000000000000000000000000000E7 :1059C00000000000000000000000000000000000D7 -:1059D0000000000000000000000000003C3C0F0F31 -:1059E00028EB28EB2000200004000000000000004D +:1059D00000000000000000000000000000000000C7 +:1059E00000000000000000000000000000000000B7 :1059F00000000000000000000000000000000000A7 -:105A00002000000400000000000000000200000070 +:105A00000000000000000000000000000000000096 :105A10000000000000000000000000000000000086 -:105A20002000000000000000000000000000000056 -:105A300000000000C00000000000000000000000A6 -:105A4000040020020004000000000000000000002C -:105A500000000000200440000000000000000000E2 -:105A60002000400200024000000000000000400052 -:105A70000000409010840000000040000000000082 -:105A80000002400200002000000000400000000072 -:105A900000000002408400000090000000000000B0 -:105AA0000000400000400000000000000040000036 -:105AB0000000004000400000000000000000000066 -:105AC0000000004000000000400000000000000056 -:105AD00000000090400000020000400000000000B4 -:105AE0000000400000040000004000000000000032 -:105AF0000000000000000000000000400010000056 -:105B00000000000082000000000000000000000013 -:105B10000040004100000000020000000000020000 -:105B20000400000000000000000000000000000071 -:105B3000041000100000040000000010000002002B -:105B40000000001000000000000000000000000045 -:105B500082000040000000040200044000088200AF -:105B600000210204000000090008000000000000FD +:105A20000000000000000000000000000000000076 +:105A30000000000000000000000000000000000066 +:105A40000000000000000000000000000000000056 +:105A50000000000000000000000000000000000046 +:105A60000000000000000000000000000000000036 +:105A70000000000000000000000000000000000026 +:105A800000000000000200000000000000004000D4 +:105A90000000000000000000000000000000000006 +:105AA00000000000000000001000000000000000E6 +:105AB00000000000000000004000000000000000A6 +:105AC00000001000000000001000000000000000B6 +:105AD00000000000000000000000000000000000C6 +:105AE00000000000000000000000000000000000B6 +:105AF00000000000000000000000000000000000A6 +:105B00000000000000000000000000000000000095 +:105B10000000000000000000000000000000000085 +:105B2000100000000000080000000000000000005D +:105B30000000000000000000000000000000000065 +:105B40000000000000000000000000000000000055 +:105B50000000000000000000020000000000000043 +:105B60000000000000000000000000000000000035 :105B70000000000000000000000000000000000025 :105B80000000000000000000000000000000000015 :105B90000000000000000000000000000000000005 -:105BA00000000000020000000008000000000000EB -:105BB00000000000000000000000000000000000E5 -:105BC0000000004000000000000000020000000093 -:105BD0000000410000000000000000000000000084 -:105BE00000400000000000000000100084000000E1 +:105BA00000000000000000000000000000000000F5 +:105BB00000000000000000000010000000000000D5 +:105BC00000000000001000000000000000000000C5 +:105BD00000000000000000000000000000000000C5 +:105BE00000000000000000000000000000000000B5 :105BF00000000000000000000000000000000000A5 -:105C0000000000000000000000000008000000008C -:105C10000800000000000000000000000400000078 -:105C2000000000080000000000000020000000004C -:105C30000000000000000000000000000000000064 -:105C400000000008000000000000040010008400B4 -:105C500000000000900000000000000000000000B4 -:105C60000000000090000041004108000000041006 -:105C70000000000000000000000000004100008261 -:105C80000000000000000000000000000000030011 -:105C900000000000210000000000000000040000DF -:105CA00000000000000000000000000000400000B4 -:105CB0000000000000A00000000000000000000044 -:105CC00000000000000000000000000000000200D2 -:105CD0000000000000004000000000000000000084 -:105CE0000000000000000000008400000004000824 -:105CF0000000080000000000000000000040080054 -:105D0000080000100040000000000000000000003B -:105D10000000000000000000001000000000000073 -:105D20000000000000000041000000000000000032 +:105C00000000000000000000000000000200000092 +:105C10000000000000000000000000000000000084 +:105C20000000000000000000000000000000000074 +:105C30000000000000000000000000100000000054 +:105C40000000000000000000000000000000000054 +:105C5000000000000000000000000008000000003C +:105C60000000000000000000000000000000000034 +:105C70000000000000000000000000000000000024 +:105C80000000000000000000000000000000000014 +:105C90000000000000000000000000000000000004 +:105CA00000000000000000000000000000000000F4 +:105CB00000000000000000000000000000000000E4 +:105CC00000000000000000000000000000000000D4 +:105CD00000000000000000000000000000000000C4 +:105CE00000000000000000000000000000000000B4 +:105CF00000000000000000000000000000000000A4 +:105D00000000000000000040000000000000000053 +:105D10000000000000000000000000000000000083 +:105D20000000000000000000000000000000000073 :105D30000000000000000000000000000000000063 -:105D4000000000000040000000000000000088008B -:105D500000000000000000000003001100400009E6 -:105D60000000000200090000000200000000000026 -:105D7000000400000400000000000000000000001B -:105D80000000000003000000001000001188200047 -:105D900000000020000000000000000000000000E3 -:105DA00000000000000000000400000000004000AF +:105D40000000000000000000000000000000000053 +:105D50000000000000000000000000000000000043 +:105D60000000000000000000000000000000000033 +:105D70000000000000000000000000000000000023 +:105D80000000000000000000000000000000000013 +:105D90000000000000000000000000000000000003 +:105DA00000000000000000000000000000000000F3 :105DB00000000000000000000000000000000000E3 -:105DC000110000000000000000000000008800003A -:105DD00000000000000000000000000800A000A07B -:105DE000030020000084009000C000A0000400C058 -:105DF00011C0000090000000000000000000000042 +:105DC00000000000000000000000000000000000D3 +:105DD00000A0000000000000000000000000000023 +:105DE00000000000000000000000000000000000B3 +:105DF00000000000000000000000000000000000A3 :105E00000000000000000000000000000000000092 -:105E10000000002000000000000000000000000062 +:105E10000000000000000000000000000000000082 :105E20000000000000000000000000000000000072 :105E30000000000000000000000000000000000062 :105E40000000000000000000000000000000000052 -:105E50000000000000000000000020000000000022 -:105E600000410040000000000000000000000000B1 -:105E70000000000000000010000000000010000002 -:105E80000000000003A0000000000000000000006F -:105E90000000000000840000080000000000000076 -:105EA0000000000000A00000000000000000000052 -:105EB00000000000000000000000000000000000E2 -:105EC00000000000000000000000000000002100B1 -:105ED0000000000000000000400000000000000082 -:105EE0000000000000000020000020000002090067 -:105EF0002000080400000000000000000000001066 +:105E50000000000000000000000000000000000042 +:105E60000000000000000000000000000000000032 +:105E70000000000000000000000000000000000022 +:105E80000000000000000000000000000000000012 +:105E90000000000000000000000000000000000002 +:105EA00000000008000000000000000000000000EA +:105EB000000000A0000000000000000000840000BE +:105EC00000000000001000000000000000000000C2 +:105ED00000000000000000000000000000000000C2 +:105EE00000000000000000000000000000000000B2 +:105EF00000000000000000000000000000000000A2 :105F00000000000000000000000000000000000091 -:105F100000000000000082000000000000000021DE +:105F10000000000000000000000000000000000081 :105F20000000000000000000000000000000000071 :105F30000000000000000000000000000000000061 -:105F40000000000000000000100000000000000041 +:105F40000000000000000010000000000000000041 :105F50000000000000000000000000000000000041 :105F60000000000000000000000000000000000031 -:105F700000000041000000000000000000000000E0 +:105F70000000000000000000000000000000000021 :105F80000000000000000000000000000000000011 -:105F90000000000011880000000020000000000048 -:105FA0000090000000000000000000000000000061 -:105FB000000000000000400200000000000000009F -:105FC00000000000080000000000000000000000C9 -:105FD00000000200020000000900000000000000B4 -:105FE00040820000000841A00000000220001100D3 -:105FF00002C020902090000004C0040800000000AF +:105F90000000000000000000000000000000000001 +:105FA00000000000000000000000000000000000F1 +:105FB00000000000000000000000000000000000E1 +:105FC00000000000000000000000000000000000D1 +:105FD00000000000000000000000000000000000C1 +:105FE00000000000000000000000000000000000B1 +:105FF00000000000000000000000000000000000A1 :106000000000000000000000000000000000000090 :106010000000000000000000000000000000000080 :106020000000000000000000000000000000000070 @@ -161472,437 +161472,437 @@ :106970000000000000000000000000000000000017 :106980000000000000000000000000000000000007 :1069900000000000000000000000000000000000F7 -:1069A0000000000000000000000020002000200087 -:1069B00000000000000082008200000000000000D3 -:1069C00002000000000084000200040020002000FB -:1069D000C00000008800000088000000000088005F -:1069E00084000002000000000000200020002000C1 -:1069F00020008800000088008400400000000000A3 -:106A000000800200000000808800402000802100FB -:106A1000200002800000080088000880400000007C -:106A200000000183100000000000000010020000C0 -:106A30000002000000000000004000004000409004 -:106A40000000000040000000000000020000000004 -:106A50000000000000000000000000000000000036 -:106A60000000000000000000000000000000000026 -:106A70000000000000000000000000008000400056 -:106A8000000000040000000000200000800100045D -:106A9000200000008040000080000002C110800043 -:106AA00000000000400200000200000000000000A2 -:106AB0000003000002100000000400004000081065 -:106AC0000000001000000000020000004000004034 -:106AD0000040080008000200000000000200004022 -:106AE00000400000824000000000020002000000A0 -:106AF00000000200000002100100014009400110E6 -:106B000082030000000000000000080000400000B8 -:106B100000009000020008000100081000210000A1 -:106B2000000002100241824000000008000800003E -:106B300000080810000000080082000000828000A9 -:106B40008040000002C00008000800080008800023 -:106B50000010000002840284000000040000000015 -:106B6000000000C0000000080000000400C0200871 -:106B70000200000000000000000008844082400085 -:106B800008000000400000000088000000400008ED -:106B90000000000000000000000040008000000035 -:106BA0002000000080000000000100000000002123 -:106BB000040000000002001000000000880800052A -:106BC0000000000000100000000000000021000094 -:106BD00000000000000000000000000800080000A5 -:106BE000000000000000000300050000000000009D -:106BF0000000000000000000000000000000000095 -:106C00000005000501000000000000000008002150 -:106C100000000000000000800008201100000009B2 -:106C200000009000400800000088004000000000C4 +:1069A00000000000000000000000000000000000E7 +:1069B00000000000200000000000000000000000B7 +:1069C00000000000000000000000000000000000C7 +:1069D0000000000020000000000000000000000097 +:1069E00000000002000000000000000000000000A5 +:1069F00000800000100020002000100000000000B7 +:106A00000000000000000000000000004000000046 +:106A100000000000200020002000200000000000F6 +:106A200000000000000040000000000040004000A6 +:106A30004000000040000000400000004000000056 +:106A40000090000000000000400000004000000036 +:106A50004000000040001000000000001000000096 +:106A600000000000000000000000000000004000E6 +:106A7000000000200000C000000080008000000036 +:106A80000000000000000000000000000000000006 +:106A900000000000000000000000000000000000F6 +:106AA00000000000000000000000000000000000E6 +:106AB00000000000000000000000000000000000D6 +:106AC00000000000000000000000080000000000BE +:106AD00000000000000000000000100000000200A4 +:106AE0000200000000000000400000000000000064 +:106AF000000000000000000020081004A08400082E +:106B00000000000000000000000000000200000083 +:106B10000200000000000000000000000200000071 +:106B20000000004000000000000000000000200005 +:106B30000000000000000000000000000000000055 +:106B40000000000000000040000000000000000005 +:106B50000000000000000000000000000000000035 +:106B600000000000000000000000800000000000A5 +:106B7000000000000000000000008001800100090A +:106B80000001000000000000000000000000000004 +:106B900000000008000000000000000000000000ED +:106BA000000000000008008200000000000000005B +:106BB00000000000000000000000000000000000D5 +:106BC00000000000000000000000000000000000C5 +:106BD00000000000000000000000000000000000B5 +:106BE00000000000000000000000000000000000A5 +:106BF0000000000000000000000000000040000055 +:106C0000000000000000000000000009000000215A +:106C1000002100000000000000000000000000084B +:106C2000000800000000000000000000000000005C :106C30000000000000000000000000000000000054 :106C40000000000000000000000000000000000044 :106C50000000000000000000000000000000000034 :106C60000000000000000000000000000000000024 -:106C700000000000410000000000000000000000D3 -:106C800000000000000020000000000008000000DC -:106C90000000000000000000004000008000000034 -:106CA0000000000000000082000000100041000011 -:106CB000000008000000000040000000000000008C -:106CC000004000000010000000400800000200002A -:106CD0000400C00090000800A00082040000000032 -:106CE000000000000804000000400010080200003E -:106CF000C000A000400082800000000000000000F2 -:106D000082000800C0020800000000042004914036 -:106D100000008240A00008000820000008002000B9 -:106D200090000004900000C000100002820408805F -:106D3000000000A00000000000000040000800006B -:106D4000000000400000000100840021000000015C -:106D500000400000001000000200200000000000C1 -:106D600000000000000000000000000120010011F0 -:106D7000000000402000400041100400000000001E -:106D8000080000400084000000400000000080A0D7 -:106D900040880084001000000008200400008010DB -:106DA0000300200004400002210209900205410076 -:106DB00021020000000000000000000000000000B0 -:106DC00000000000000000000000000000080000BB -:106DD0008400000000000000000300000000000329 -:106DE000000000000040820000008200C00000009F -:106DF000000000000000000800000000000000008B -:106E0000000008000000000000000000000000007A -:106E10000010000000050008004020002041A008EC -:106E20000003000000410841082182200002000008 -:106E30000010002100000000000000000000000021 +:106C70000000000000000000000000000000000014 +:106C80000000000000000000000000000000000004 +:106C900000000000000000000000000000000000F4 +:106CA00000000000000000000000000000000000E4 +:106CB00000000000000000000000000000000000D4 +:106CC00000000000000000000000000000000000C4 +:106CD00000000000000000000000000000000000B4 +:106CE00000000000000000000000000000000000A4 +:106CF0000000000000000000000000000000000094 +:106D000000800000000000040000000000000000FF +:106D10000000000000000000000000000000000073 +:106D20000000000000000000000000000000000063 +:106D30000000000000000000000000000000000053 +:106D40000000000000000000000000000000000043 +:106D50000000000000000000000000000000000033 +:106D60000000000000000000000000000000000023 +:106D70000000000000000000000000000000000013 +:106D800000000008000000000001000000000000FA +:106D900000000000000000000000000000000000F3 +:106DA00000000000000000000000000000000000E3 +:106DB00000000000000000000000000000000000D3 +:106DC00000000000000000000000000000000000C3 +:106DD00000000000000000000000000000000000B3 +:106DE00000000000000000000000000000000000A3 +:106DF000000000000000000000000000000800008B +:106E0000000000400008000000000000000000003A +:106E10000000000000000000000000000000000072 +:106E20000000000000000000000000000000000062 +:106E30000000000000000000000000000000000052 :106E40000000000000000000000000000000000042 :106E50000000000000000000000000000000000032 :106E60000000000000000000000000000000000022 :106E70000000000000000000000000000000000012 -:106E80000000000000000000000000000000000002 -:106E90000000000000000000000000000040800032 -:106EA0000000000000000000000040000090000012 -:106EB000000000010000000800050021000500009E -:106EC0000021000000410000000000000000010956 -:106ED000000800050000002102000004000000007E +:106E80000000000000000001000000000000000001 +:106E900000000000000000000000000000000000F2 +:106EA00000000000000000000000000000000000E2 +:106EB00000000000000000000000000000000000D2 +:106EC00000000000000000000000000000000000C2 +:106ED00000000000000000000000000000000000B2 :106EE00000000000000000000000000000000000A2 -:106EF0002000000000000000000000000021002130 -:106F000000000000000090000100820082000000EC -:106F1000000000900804004000001000000000087D -:106F200000040008824108002003000500084021F9 -:106F300000059004000000000000000000000000B8 -:106F400000000000000000000000000020400000E1 -:106F500040000200000000000000000000000000EF -:106F60000000000000000000000002000800000017 +:106EF0000000000000000000000000000000000092 +:106F0000000000030000000000000000000000007E +:106F10000000000800080000000000000000000061 +:106F20000000000000000000000000000000000061 +:106F30000000000000000000000000000000000051 +:106F40000000000000000000000000000040000001 +:106F50000000000000000000000000000000000031 +:106F60000000000000000000000000000000000021 :106F70000000000000000000000000000000000011 -:106F8000000000000000000000004000000000843D -:106F900000000000110200100000000000082100A5 -:106FA000000020000000001000A000C020044000ED -:106FB000000021000090200021A00000000000003F -:106FC0000000000000000000000001000000400080 -:106FD0000000000101008401000000000100020027 +:106F80000000000000000000000000000000000001 +:106F900000000000000000000000000000000000F1 +:106FA00000000000000000000000000000000000E1 +:106FB00000000000000000000000000000000000D1 +:106FC00000000000000000000000000000000000C1 +:106FD00000000000000000000000000000000000B1 :106FE00000000000000000000000000000000000A1 -:106FF0000000C00002002000C000000000000000EF -:107000000000000000000000000000000000000080 -:10701000400000010010A19004A0080100A0010898 -:1070200084109084A0080585C010842184A1A0113B -:1070300004210011010401859040000500000000BA -:107040000000000000000000000000001000090027 -:107050008000000000200240000400200000020028 -:1070600080000000000000000000000000000000A0 -:10707000000000008000C0000000000000000000D0 -:107080000000000000000000000000000000404080 -:10709000094000090008008083008080800800808B -:1070A000208080809100009085050009008800A064 -:1070B0000010000300404000030800800040000072 +:106FF0000000000000000000000000000000000091 +:10700000000000000000000000000000010101007D +:10701000040000000000000000000000000000006C +:107020000000000000000000000000000000000060 +:107030000000000000000000000000000000000050 +:107040000000000000000000000000000000000040 +:107050000000000000000000000000000000000030 +:107060000000000000000000000000000000000020 +:10707000000000000000000000000000000000020E +:107080000011001100080000000000000000114184 +:10709000090900410010000000000000000000008D +:1070A00000000000000000000000000000000000E0 +:1070B00000000000000000000000000000000000D0 :1070C00000000000000000000000000000000000C0 -:1070D000000080008000000080030000000000002D +:1070D00000000000000000000000000000000000B0 :1070E00000000000000000000000000000000000A0 -:1070F0000000000000000000000080008000000090 -:1071000080008000000080000000000000000000FF -:107110004000822102400510110004000000030914 -:1071200000000011800000000080900403808011A6 -:10713000800400028005000085800821A089099054 +:1070F0000000000000000000000000000000000090 +:10710000000000000000000000000000000000007F +:1071100008004100021141090000000000000000C9 +:10712000000000000000000000000000000000005F +:10713000000000000000000000000000000000004F :10714000000000000000000000000000000000003F -:107150009000100008001000840010018484C020FA +:10715000000000000000000000000000000000002F :10716000000000000000000000000000000000001F -:1071700000000000000000009000A0008200080055 -:107180000000020004008200020000000000000075 -:10719000000040884000A010400100000184000071 -:1071A00001A002000401A0008840008409C104205D -:1071B000080040010400A084840040022184A1A0B2 -:1071C000900400000000000000000000000000002B -:1071D0000000000000000000000100000100C000ED -:1071E000000000010000000100010000000000009C -:1071F00000000000000000000000000200850010F8 -:1072000000830000000000000000000000000000FB -:107210000000000000000000080000000000001056 -:10722000011111108800000800101001C0100008A2 -:10723000A088828808100140000011A040C000C052 -:107240000801408300000000000000000000000072 -:1072500000000000000900020009000300040841CA -:107260000909002000400010000400200000000078 -:107270000000000000000000000000000083000487 -:10728000008900C0000000000000000000000000B5 -:1072900000000000000000402102C0090020001092 -:1072A0000085058409880040000200098040808430 -:1072B00021C19102849080800800080382108040E0 -:1072C0001108002102A000000000000000000000E2 -:1072D00000000000000000000040000000008000EE -:1072E000808080800000000000000000000000009E +:10717000000000000000000000000000000000000F +:1071800000000000000000000000000000000000FF +:1071900000000102000000010101000000000000E9 +:1071A00000000000000000000000000000000000DF +:1071B00000000000000000000000000000000000CF +:1071C00000000000000000000000000000000000BF +:1071D00000000000000000000000000000000000AF +:1071E000000000000000000000000000000000009F +:1071F000000000000000000000000000000000008F +:10720000000000000000000000000000000000007E +:107210002000000000010001030001010000000047 +:10722000000000000000000000000000000000005E +:10723000000000000000000000000000000000004E +:10724000000000000000000000000000000000003E +:10725000000000000000000000000000000000002E +:10726000000000000000000000000000000000001E +:10727000000000000000000000000000000000000E +:1072800000000000000000000900100000000000E5 +:10729000000000000000001041030902114100003D +:1072A00000000000000000000000000000000000DE +:1072B00000000000000000000000000000000000CE +:1072C00000000000000000000000000000000000BE +:1072D00000000000000000000000000000000000AE +:1072E000000000000000000000000000000000009E :1072F000000000000000000000000000000000008E -:1073000000400080000000000000000000000000BD -:1073100000000000000000004188024082808303DA -:10732000000011001100111000000000008000009A -:1073300082044011C1809111000000800080800013 -:107340008380A084040040110000000000000000C1 -:107350000000000000000000000000040010000019 -:10736000080040C00808880000000000000000007D +:10730000000000000000000000000000000000007D +:10731000000000000000000041804111090003103E +:10732000000000000000000000000000000000005D +:10733000000000000000000000000000000000004D +:10734000000000000000000000000000000000003D +:10735000000000000000000000000000000000002D +:10736000000000000000000000000000000000001D :10737000000000000000000000000000000000000D -:1073800000000084000800000000000000840002EB -:107390000000000000000000000004C00202090814 -:1073A0008301009000000000000010000004101095 -:1073B00000000800110882840201C000021000844D -:1073C000A00040C002094104880000000000000045 +:1073800000000000000000000000000000000000FD +:1073900000000000000000000000014000010000AB +:1073A00001010000000000000000000000000000DB +:1073B00000000000000000000000000000000000CD +:1073C00000000000000000000000000000000000BD :1073D00000000000000000000000000000000000AD -:1073E0000000000000000000880000000000000015 +:1073E000000000000000000000000000000000009D :1073F000000000000000000000000000000000008D -:10740000000000000000000042000000000000003A -:10741000000000000000000000000000000000006C -:1074200000004200500000E00000000000000000EA -:1074300007000000000000E00000820000000000E3 -:1074400000000000000000000000840000000000B8 +:10740000000000000000000000000000000000007C +:10741000000000000000000007000000000000E085 +:10742000000000000000000000000000000000005C +:10743000000000000000000000000000000000004C +:10744000000000000000000000000000000000003C :10745000000000000000000000000000000000002C -:10746000000000000000F0F000000000000000003C +:10746000000000000000000000000000000000001C :10747000000000000000000000000000000000000C -:10748000000000000000000000AAC0EA00000000A8 -:107490000000000000000000000000000000A0A0AC -:1074A000A0A00000000000000000F000FF000F0F8F -:1074B000FFFFFFF0FFF008000500FCAAFCAA000097 -:1074C000C3557F7F6B6BC0C0EAEA0C0C3030000004 +:1074800000000000000000000000000000000000FC +:1074900000000000000000000000000000000000EC +:1074A00000000000000000000000000000000000DC +:1074B00000000000000000000000000000000000CC +:1074C00000000000000000000000000000000000BC :1074D00000000000000000000000000000000000AC -:1074E0000000000000002800F8F00000000000008C +:1074E000000000000000000000000000000000009C :1074F000000000000000000000000000000000008C -:107500000000000000000000000000AA00AA000027 +:10750000000000000000000000000000000000007B :10751000000000000000000000000000000000006B -:10752000A0A0A0E30000000000000000F0000F0099 -:107530000000F0F000F000F008000000FFAAF0AA40 -:107540000000C3007F7F6B6BC0CFEAEF0C0C3030C4 +:10752000000000000000000000000000000000005B +:10753000000000000000000000000000000000004B +:10754000000000000000000000000000000000003B :10755000000000000000000000000000000000002B -:1075600000000000FF01FF00000000002F0F0F0FC0 +:10756000000000000000000000000000000000001B :10757000000000000000000000000000000000000B -:10758000000000000000000000000000FFFF0004F9 -:107590000000000000005755555500000000000095 -:1075A000000000000000FF40FF0000005F0A000034 -:1075B00000005DFF5D5D5D5D0C0C8A0A2A2A0F0FDD -:1075C0000FA0000000E0F353A303050A151A3C3C8A -:1075D000FF5000000000000000000000000000005C -:1075E0000000000000000101000000000000280071 +:1075800000000000000000000000000000000000FB +:1075900000000000000000000000000000000000EB +:1075A00000000000000000000000000000000000DB +:1075B00000000000000000000000000000000000CB +:1075C00000000000000000000000000000000000BB +:1075D00000000000000000000000000000000000AB +:1075E000000000000000000000000000000000009B :1075F000000000000000000000000000000000008B -:107600000000000000000000000000000000000476 -:107610000004000000000000030000000000000063 -:1076200000000000000000004040000000005F0A71 -:10763000000000000CFF0C0CFF5DFF0C8A0A0A0A18 -:10764000FFFFFFAF000F00EFFF5FAF0F0000101054 -:107650003C3C505000000000000000000000000012 -:107660000000000000610006000D0000006100063F -:10767000000D000100610006000D00000000000088 -:107680000000000000000000000000000061000693 -:10769000000D0001000000000000000000000000DC -:1076A00000000000000000610006000D0000006105 -:1076B0003002C005000000610006000D00000061FE -:1076C00030000009000100610006000D00000061AB -:1076D0003006000D00010000000000000000000066 -:1076E0000000000000000000000000F041F1000078 -:1076F0000000A0BC003C0000000000F000F0000012 +:10760000000000000000000000000000000000007A +:10761000000000000000000000000000000000006A +:10762000000000000000000000000000000000005A +:10763000000000000000000000000000000000004A +:10764000000000000000000000000000000000003A +:10765000000000000000000000000000000000002A +:10766000000000000000000000000000000000001A +:10767000000000000000000000000000000000000A +:1076800000000000000000000000000000000000FA +:1076900000000000000000610006000D0000000076 +:1076A00000000500000000000000000000000000D5 +:1076B00000000000000000000000000000000000CA +:1076C00000000000000000000000000000000000BA +:1076D00000000000000000000000000000000000AA +:1076E000000000000000000000000000000000009A +:1076F000000000000000000000000000000000008A :107700000000000000000000000000000000000079 -:10771000000000FF80FF00000000000000000000EB -:107720000000000000000000D555C00000FF40FF31 -:10773000F030F030A0BC003C00000000000000FF72 -:10774000AE0CFFFF00AA3CBE000000000055AAFFDF -:107750000F0F1F0F41EBF0F00000000000000000D1 -:1077600000000000000000000000000000F000F039 -:1077700000000000003C003C0000000000F014F499 +:107710000000000000000000000000000000000069 +:1077200000000000000000000F3C55FFFF3CF0AAE5 +:107730000000000000000000000000000000000049 +:107740000000000000000000000000000000000039 +:107750000000000000000000000000000000000029 +:107760000000000000000000000000000000000019 +:107770000000000000000000000000000000000009 :1077800000000000000000000000000000000000F9 -:1077900000000000000080800000000000000000E9 -:1077A000000000000000000000005555000000002F -:1077B0004040C000C000003C003C00000000808051 -:1077C00080FFAE0CAE0CF0FAFCFE0000000000558D -:1077D000AAFF0000140041EB0000000000000000C0 +:1077900000000000000000000000000000000000E9 +:1077A000000000000000000000000F3C5500003CFD +:1077B000F0AA00000000000000000000000000002F +:1077C00000000000000000000000000000000000B9 +:1077D00000000000000000000000000000000000A9 :1077E0000000000000000000000000000000000099 -:1077F0000000575555550000000000000000000033 +:1077F0000000000000000000000000000000000089 :107800000000000000000000000000000000000078 -:107810000000000000000000000000000000000068 -:107820000000000000000000000000000C0C5D0CD7 -:10783000F0F0F0F1C3C3C3C38080C0C000000000FB -:1078400000000000C7FFC7C7AAF0AAF00C0C0C0C80 -:10785000000000007D417D41EB28EB280000000086 +:107810000000000000000000000000000F0F0F0F2C +:107820000000000000000000000000001E1EFFAA73 +:1078300000FF55550000000000000000000000009F +:107840000000000000000000000000000000000038 +:107850000000000000000000000000000000000028 :107860000000000000000000000000000000000018 -:107870000000000003000000000000000000000005 +:107870000000000000000000000000000000000008 :1078800000000000000000000000000000000000F8 -:1078900000000000000000000000000000000000E8 -:1078A00000000000000000000000000000000C0CC0 -:1078B0000C0C0000004100000000000040400000EF -:1078C00000000000000005FF0505AAF0AAF00C0C5E -:1078D0005D0C000000007D417D41C0C0FCFC00004B -:1078E00000002000200020000000200020000000F8 -:1078F000000000000380000000008800000002007B -:1079000000000200C0002000000000000004008011 -:107910000000880021000000000088000000000234 -:10792000000000008400200000000000880000101B -:107930008400000020002000000000000000000083 -:107940000100090020000800008005002104200437 -:1079500000800100200004008800000000050340B2 -:1079600000000000210000000000000040000000B6 -:1079700000000000000040100000000000904002E5 -:1079800000000000000000000000000040020000B5 -:107990004002000000004000000000002100210023 -:1079A0000000000000000000000000000002400095 -:1079B0004005400000000000000000000000209092 -:1079C00000020800A000000080000002A002844025 -:1079D000800000200400000000000082000000027F -:1079E00040010000001000000000000800000041FD -:1079F000000090000000000000000000080090005F -:107A00000000000000000000020000410000000033 -:107A100000008400000000000010901000000240F0 -:107A200000000000001000000200020090100000A2 -:107A3000000000000008004190000000020001402A -:107A40004000010001000000000000004040000074 -:107A50009000000008400900020000000000000043 -:107A6000400009000000110000880040000000886C -:107A70000000000800880340030000080200020024 -:107A8000020802000040004000080000030800084F -:107A900000000008000000080000000800000000CE -:107AA000000802000000000000000040000000404C -:107AB000048800080088000000080000000800108A -:107AC00040888008080820000000000000008000B6 -:107AD000000000840040008440100000004040008E -:107AE00000008088C00800000000000000000000C6 -:107AF000000800004000000000000000000000003E -:107B00000000000000000021000000000000000054 -:107B100000000008000004050000C0000000000094 -:107B2000000800000000000000000000000000004D +:1078900000000000000000000000000000000F8E4B +:1078A0000F0F0000000000000000000000001E1E7E +:1078B00055003C3CF0F0000000000000000000001B +:1078C00000000000000000000000000000000000B8 +:1078D00000000000000000000000000000000000A8 +:1078E0000000200000000000000000000000000078 +:1078F0000000000000000000000020000000000068 +:107900000000200000000000000000000004000053 +:107910000000000000000000000000000000000067 +:107920000000000020000000000000000000000037 +:107930000000000000000000000000000000000047 +:1079400000000000C0000000000000000000000077 +:10795000000000008800000000000000000000009F +:1079600000000000000000000000002000000000F7 +:107970000000000000000000400000000090000037 +:1079800000000000000000000000000000000000F7 +:1079900000000000000000000000000000000000E7 +:1079A0000000400000000000000000000000000097 +:1079B00000000000000000000000000000000000C7 +:1079C0000000000000C000000000000000000000F7 +:1079D00000000000000000000000000000000000A7 +:1079E0000000000000000000000000000000000097 +:1079F0000000000000000000000000000000020085 +:107A00000000000000000000000000000000000076 +:107A10000000000000000000000000000000000066 +:107A20000000000000000000000000000000000056 +:107A30000000000000000000000000000000000046 +:107A40000000000000000000000000000000000036 +:107A50000000000000000000000002000000000024 +:107A600000000000000000400000000000000000D6 +:107A70000000000000000000000000000000000006 +:107A800000000000000000000000000000000000F6 +:107A900000000000000000000000000000000000E6 +:107AA00000000000000000000000000000000000D6 +:107AB00000000000000000000000000000000000C6 +:107AC00000000000000000000000000000000000B6 +:107AD000000000000000000000000000000000089E +:107AE000000000080000000000000000000000008E +:107AF0000000000000000000000000000000000086 +:107B00000000000000000000000000000000000075 +:107B10000000000000000000000000000000000065 +:107B20000000000000000000000000000000000055 :107B30000000000000000000000000000000000045 -:107B40000000000000000000021000000000200003 -:107B500000020041100201030000000000000000CC -:107B600000080000820884000008000800080000E7 -:107B700000000000000000000000000800000800F5 -:107B800000C00000004000000000000000000800ED -:107B9000000000A000000000000000002100000024 -:107BA00000000000000000000000000000000000D5 -:107BB0000000000000000000410000000000000084 -:107BC0000000000000A0000000000008000000000D -:107BD000801000110000031004C000000202080021 -:107BE000000200820000000200A00000000000006F -:107BF00000000000000020400000000000400004E1 -:107C00000011000900000000080900000000080041 -:107C10000000004000000800A000004040000000FC -:107C200000040000A0000800004100000000000067 -:107C3000080000000000000000000000000000003C -:107C4000000000090000000040114040000000005A -:107C50000000080204C0C000820088094000202102 -:107C6000001108000040000282000200000000C075 +:107B40000000000000000000000000000000000035 +:107B50000000000000000000000000000000000025 +:107B60000000000000000000000000000000000015 +:107B70000000000000000000000000000000000005 +:107B800000000000000000000000000000000000F5 +:107B900000000000000000000000000000000000E5 +:107BA00000000000000000000000000000002100B4 +:107BB00000000000000000020000000000000000C3 +:107BC00000000000000000080000000000000000AD +:107BD00000000000000000000000000000000000A5 +:107BE0000000000000000000000000000040000055 +:107BF0000000000000000000000000000040000045 +:107C00000011000000000000000000000000000063 +:107C10000000000000000000000000000040000024 +:107C20000000000000000000000000000000000054 +:107C30000000000000000000000000000000000044 +:107C40000000000000000000000000000000000034 +:107C500008400000000000000000000000000000DC +:107C60000000000000000000000084000000000090 :107C70000000000000000000000000000000000004 -:107C8000000000000088000000000000000041002B -:107C9000000000000000000000000000008800005C -:107CA000000000C00008000000000000000000000C -:107CB00000000000000008004000400040080000F4 -:107CC0000000000002C0114002408000800000C09F -:107CD000008800900000A002000003000000800463 -:107CE000200400004000000011C1030090000000CB -:107CF0000000000000000000000082000000000002 -:107D000000000000000000000000820000000000F1 -:107D1000000000000000000000000000080000005B -:107D20000000000000000000000000200000000033 -:107D3000080000000000000000000000000000003B -:107D40000000000000000000000000000010020021 -:107D50000002000320400010840800000000820997 -:107D600000050005C0110080001000000021000087 +:107C800000000000000000000000000000000000F4 +:107C900000000000000000000000000000000000E4 +:107CA00000000000000000000000000000000000D4 +:107CB00000000000000000000000000000000000C4 +:107CC00000000000000000000000000000000000B4 +:107CD00000000000000000000000000000000000A4 +:107CE0000000000000000000000000000000000094 +:107CF0000000000000000000000000000000000084 +:107D00000000000000000000000000000000000073 +:107D10000000000000000000000000000000000063 +:107D20000000000000000000000000000000000053 +:107D30000000000000000000000000000000000043 +:107D40000000000000000000000000000000000033 +:107D50000000000000000000000000000000000023 +:107D60000000000000000000000000000000000013 :107D70000000000000000000000000000000000003 -:107D800040000000000008000010000000C00000DB +:107D800000000000000000000000000000000000F3 :107D900000000000000000000000000000000000E3 -:107DA00000000000000000000000000000000300D0 +:107DA00000000000000000000000000000000000D3 :107DB0000000000000000000000000C00000000003 -:107DC0000000000800000300000020A000000000E8 -:107DD0008000000000108000000802A000000000E9 -:107DE0000010080000000008202000A0118403A05B -:107DF0004000000000000010000000000000000033 -:107E00000000000000000000000000000000002151 -:107E10000000000000000000080000000000080052 -:107E200082000000900000000000004100000000FF -:107E300000080000000082000000000000000000B8 -:107E400000000000000000000041000002000000EF -:107E50004000000002100000004100008800000007 -:107E60000005900000098805011182000041904141 -:107E700000110002000000C000100000000000001F -:107E800020000000000000040000000000000000CE -:107E900000000000000000000000000020000000C2 -:107EA00000000000110000000000000000000000C1 -:107EB00000000000000000100000000000000000B2 -:107EC00000000302000000A020000000409080821B -:107ED00000008800090000C100000090001021008F -:107EE000200408001100400200400800200000C0EB -:107EF0000040000020010000000000000000000021 -:107F000000000000000000000300820000000000EC +:107DC000000000000000000011000008000000009A +:107DD0002000000000000000000000000000000083 +:107DE0000000000000000000000000900000000003 +:107DF0000000000000000000000000000000000083 +:107E00000000000000000000000000000000000072 +:107E10000000000000000000000000000000000062 +:107E2000000000000000000000000000000008004A +:107E30000000000000000000000000000000000042 +:107E40000000000000000000000000000000000032 +:107E50000000000000000000000000000000000022 +:107E60000000000000000000000000000000000012 +:107E70000000000000000000000000000000000002 +:107E800008000000020000000000000400000000E4 +:107E900000000000000000000000000000000000E2 +:107EA00000000000000000000000000000000000D2 +:107EB00000000000000000000000000000000000C2 +:107EC00000000000000000000000000000000000B2 +:107ED0000000000000000000000000400000000062 +:107EE0000000000000000000000000000000000092 +:107EF0000000000000000000000000000000000082 +:107F00000000000000000000000000000000000071 :107F10000000000000000000000000000000000061 -:107F2000000000000000010001014001000000000D +:107F20000000000000000000000000000000000051 :107F30000000000000000000000000000000000041 :107F40000000000000000000000000000000000031 -:107F5000000000000000100088A0001000A08411A4 -:107F6000000100000084100001A0008800A00002B1 -:107F7000C000004000A0C090000000000000000011 -:107F800000000000000000000000880080000000E9 +:107F50000000000000000000000000000000000021 +:107F60000000000000000000000000000000000011 +:107F70000000000000000000000000000000000001 +:107F800000000000000000000000000000000000F1 :107F900000000000000000000000000000000000E1 -:107FA000000000000000000002000302800500093C +:107FA00000000000000000000000000000000000D1 :107FB00000000000000000000000000000000000C1 :107FC00000000000000000000000000000000000B1 -:107FD0000000001100000009800000800000008304 -:107FE0000008000400090009801020040004008932 -:107FF000008400000000000080000000000000007D -:1080000000000000000000000000800000000009E7 -:1080100080000000000000000000000000000000E0 +:107FD00000000000000000000000000000000000A1 +:107FE0000000000000000000000000000000000091 +:107FF0000000000000000000000000000000000081 +:108000000000000000000000000000000000000070 +:108010000000000000000000000000000000000060 :108020000000000000000000000000000000000050 -:1080300000800000000000000000000000000000C0 -:1080400000000000000000008000000000000000B0 -:1080500000000000000000048000100084001100F7 -:10806000898040402000210009000000008080211C -:1080700000A18009808003C00080A12100000000D1 -:108080000000000000000000000000004000200090 -:10809000040082000000000000000000000000005A +:108030000000000000000000000000000000000040 +:108040000000000000000000000000000000000030 +:108050000000000000000000000000000000000020 +:108060000000000000000000000000000000000010 +:108070000000000000000000000000000000000000 +:1080800000000000000000000000000000000000F0 +:1080900000000000000000000000000000000000E0 :1080A00000000000000000000000000000000000D0 -:1080B00000000004000000000000000000000000BC -:1080C0000000000000000000400008002000000048 -:1080D00000000000000090900088A08811000402B9 -:1080E0001000A01091010000010000000000100429 -:1080F000400020A104000810000500A011010000AC +:1080B00000000000000000000000000000000000C0 +:1080C00000000000000000000000000000000000B0 +:1080D00000000000000000000000000000000000A0 +:1080E0000000000000000000000000000000000090 +:1080F0000000000000000000000000000000000080 :10810000000000000000000000000000000000006F -:10811000000000000001000000000000000000005E +:10811000000000000000000000000000000000005F :10812000000000000000000000000000000000004F -:10813000010001010000000000000000000000003C +:10813000000000000000000000000000000000003F :10814000000000000000000000000000000000002F -:1081500000000000000000000000001001A100105D -:108160000041000004049001A009001004110188DE -:108170000084000800C09000008200100008018206 +:10815000000000000000000000000000000000001F +:10816000000000000000000000000000000000000F +:1081700000000000000000000000000000000000FF :1081800000000000000000000000000000000000EF -:1081900000020020000900080000000000000000AC +:1081900000000000000000000000000000000000DF :1081A00000000000000000000000000000000000CF -:1081B000000920030505110900000000000000006F +:1081B00000000000000000000000000000000000BF :1081C00000000000000000000000000000000000AF -:1081D000000000000000000000000010100021A1BD -:1081E0000480009000000080000880A111000805B4 -:1081F000080800001180020000000010008000C08C -:108200000900000000000000000000000000000065 -:1082100000000020000000800000000000000000BE +:1081D000000000000000000000000000000000009F +:1081E000000000000000000000000000000000008F +:1081F000000000000000000000000000000000007F +:10820000000000000000000000000000000000006E +:10821000000000000000000000000000000000005E :10822000000000000000000000000000000000004E :10823000000000000000000000000000000000003E -:1082400000000000000000000000000000000080AE -:10825000000000000000000000000000892191A142 -:10826000108003082111210089001010A1210000B5 -:108270000880000021000203830008001000104065 -:10828000408083400000000000000000000000006B -:108290000000000000010088004000000000000015 +:10824000000000000000000000000000000000002E +:10825000000000000000000000000000000000001E +:10826000000000000000000000000000000000000E +:1082700000000000000000000000000000000000FE +:1082800000000000000000000000000000000000EE +:1082900000000000000000000000000000000000DE :1082A00000000000000000000000000000000000CE :1082B00000000000000000000000000000000000BE :1082C00000000000000000000000000000000000AE -:1082D0000004000800000000000000000000100181 -:1082E00082100240C1018904000004109000A10125 -:1082F00000880140900083008888030009008800FE -:108300008288A0840500000000000000000000003A +:1082D000000000000000000000000000000000009E +:1082E000000000000000000000000000000000008E +:1082F000000000000000000000000000000000007E +:10830000000000000000000000000000000000006D :10831000000000000000000000000000000000005D :10832000000000000000000000000000000000004D :10833000000000000000000000000000000000003D :10834000000000000000000000000000000000002D :10835000000000000000000000000000000000001D -:108360000000000000000000410000E000000000EC -:10837000842100E007000000000A00000700000060 -:10838000000000000000008200000000000000006B +:10836000000000000000000000000000000000000D +:1083700000000000000000000000000000000000FD +:1083800000000000000000000000000000000000ED :1083900000000000000000000000000000000000DD :1083A00000000000000000000000000000000000CD :1083B00000000000000000000000000000000000BD :1083C00000000000000000000000000000000000AD :1083D000000000000000000000000000000000009D -:1083E000000000000000FF0FFF00909093930081B9 -:1083F000008100003C3C00000000F4F2F0F4000CAE -:10840000000C6666F0FF0119435B000000000000ED +:1083E000000000000000000000000000000000008D +:1083F000000000000000000000000000000000007D +:10840000000000000000000000000000000000006C :10841000000000000000000000000000000000005C :10842000000000000000000000000000000000004C :10843000000000000000000000000000000000003C :10844000000000000000000000000000000000002C :10845000000000000000000000000000000000001C -:108460000000000000000080000F00009090939337 -:10847000FF81FF8100003C3C0030000024420024CA -:10848000000C000C6666CFCF253D677F0000000022 +:10846000000000000000000000000000000000000C +:1084700000000000000000000000000000000000FC +:1084800000000000000000000000000000000000EC :1084900000000000000000000000000000000000DC :1084A00000000000000000000000000000000000CC :1084B00000000000000000000000000000000000BC @@ -161912,477 +161912,477 @@ :1084F000000000000000000000000000000000007C :10850000000000000000000000000000000000006B :10851000000000000000000000000000000000005B -:108520000000000FFF0F000000000000000000002E +:10852000000000000000000000000000000000004B :10853000000000000000000000000000000000003B :10854000000000000000000000000000000000002B -:108550000000000000000000000000006909600049 -:1085600000000000000000000000000018007E0075 -:10857000F6FC90C0FC0C3C3C000000000000000039 -:1085800006093E3DFF06FF08CFC0CFC042420000B3 +:10855000000000000000000000000000000000001B +:10856000000000000000000000000000000000000B +:1085700000000000000000000000000000000000FB +:1085800000000000000000000000000000000000EB :1085900000000000000000000000000000000000DB -:1085A000000000003C663C66000000000000000087 +:1085A00000000000000000000000000000000000CB :1085B00000000000000000000000000000000000BB :1085C00000000000000000000000000000000000AB -:1085D0000000000000000000000000000000F99909 -:1085E000F090000000000000000000000000FFE725 -:1085F000FF81F6FC90C0FF003F300F0F0F0F666643 -:10860000666606093E3DFF06FF08CFC0CFC07E7EEE -:108610003C3C0000000000000000000000000000E2 -:10862000000000610006000D0000000000000000D6 +:1085D000000000000000000000000000000000009B +:1085E000000000000000000000000000000000008B +:1085F000000000000000000000000000000000007B +:10860000000000000000000000000000000000006A +:10861000000000000000000000000000000000005A +:10862000000000000000000000000000000000004A :10863000000000000000000000000000000000003A -:10864000000000610006000D0000000000000000B6 +:10864000000000000000000000000000000000002A :10865000000000000000000000000000000000001A -:108660000000000000000000000000000061300673 -:10867000001D000000610000C00100000061003426 -:10868000C001000000610036000D000000613006EE -:10869000000D0000000000000000000000000000CD -:1086A000000000000000000028EBF3F300000000D1 +:10866000000000000000000000000000000000000A +:1086700000000000000000000000000000000000FA +:1086800000000000000000000000000000000000EA +:1086900000000000000000000000000000000000DA +:1086A00000000000000000000000000000000000CA :1086B00000000000000000000000000000000000BA -:1086C0000000000000000000CB8A49080000000004 +:1086C00000000000000000000000000000000000AA :1086D000000000000000000000000000000000009A -:1086E0000000000000000000000000000000302832 -:1086F0003F7D003C003CFFFF00003C3C00000000D0 -:108700000F0F3C3C3CFF4DCF7DFF0000000000D729 -:1087100000173C003C0000000000000000000000CA -:108720000000000000000000000028EB30300000D6 +:1086E000000000000000000000000000000000008A +:1086F000000000000000000000000000000000007A +:108700000000000000000000000000000000000069 +:108710000000000000000000000000000000000059 +:108720000000000000000000000000000000000049 :108730000000000000000000000000000000000039 -:1087400000000000000000000000DF9E5D1C000033 +:108740000000000000000000000000000000000029 :108750000000000000000000000000000000000019 :108760000000000000000000000000000000000009 -:1087700030283F7D003C003CFFFF08003C3C0000EF -:1087800000000F0F3C3C3CFF0CCF0CCF0000000062 -:10879000D7D717173C003C00000000000000000085 +:1087700000000000000000000000000000000000F9 +:1087800000000000000000000000000000000000E9 +:1087900000000000000000000000000000000000D9 :1087A00000000000000000000000000000000000C9 :1087B00000000000000000000000000000000000B9 -:1087C0000000000000000000825082500000000005 +:1087C00000000000000000000000000000000000A9 :1087D0000000000000000000000000000000000099 :1087E0000000000000000000000000000000000089 -:1087F0000000FFFF00000000AAAA030303031020EB -:10880000000000000000F0FCF0FC0000C0C0000010 -:108810000000000000000F0F0A0A00000000000026 +:1087F0000000000000000000000000000000000079 +:108800000000000000000000000000000000000068 +:108810000000000000000000000000000000000058 :108820000000000000000000000000000000000048 :108830000000000000000000000000000000000038 -:108840000000000000000000000082FA82FA000030 +:108840000000000000000000000000000000000028 :108850000000000000000000000000000000000018 :108860000000000000000000000000000000000008 -:10887000000000000A0A0A0A0000AAAA0303030370 -:1088800020A0000004000000F0FCF0FCFAAFFFFFA5 -:1088900000000000000000000F0F0A0A00000000A6 -:1088A0000000840004002000000088000000400058 -:1088B00088002000000040000000200000000008A8 -:1088C0000000200020002000020000000000200026 -:1088D0000000020000002000000020000002400014 -:1088E000000400000200C00088002000000084098D -:1088F000880000002000000020000000840020000C -:1089000082000400208000000400080088000000AD -:10891000010084902183000000000000000000009E -:10892000000000C0200040004000000000004000A7 -:108930000000000000000000000000000000000037 -:10894000000000C000000000000000000000000067 -:108950000000000000820000000000000000000095 -:1089600000000000000000004000200200000000A5 -:1089700000002000000000000000000000000000D7 -:108980000000000000C00020000000008000000087 -:108990000000200000040404000000001002000099 -:1089A0000000000000000000000000000000004087 -:1089B0000000000000000000020000400000020073 -:1089C000020000030000020000100000000008097F -:1089D00000000040000082000000000000000210C3 -:1089E0000000000800080000001000000000000067 -:1089F0000000020002000000000040000000020031 -:108A000084400040084000002000000000100000EA -:108A1000880000004008000020000804000000005A -:108A2000080900000082000800A0001000080000F3 -:108A30000200000800080008000000000410000008 -:108A40000000008200000008000800080008040080 -:108A50000008008802080008000000000000040070 -:108A6000000000000000004000100988001000080D -:108A700000000088000000080010040090000000C2 -:108A800000000000040804080000000000080008BE -:108A90000000080000008010000009008084000031 -:108AA0000000800000000000000000080008000036 -:108AB00000020008000000000000000000000000AC -:108AC00090000000000000000000000000410000D5 +:1088700000000000000000000000000000000000F8 +:1088800000000000000000000000000000000000E8 +:108890000000000000000000000000000000880050 +:1088A0000000000000002000200000000000880000 +:1088B0002000000000000000200020000000200038 +:1088C0004000000000002000200000000000200008 +:1088D0002000000000000000200020000000000038 +:1088E0002000200000000000200020000000000008 +:1088F00020002000000040000000200020050005AE +:1089000020002000000000002000200000000000E7 +:1089100020002000C00000000000200020004000D7 +:1089200000004000000040000000000000000000C7 +:108930000000400000004000000040000000400037 +:108940000000000400000000000000000000000023 +:1089500000000000000040000000000000000000D7 +:1089600040000000000000000000000000000000C7 +:1089700000000000000000004100000000000000B6 +:1089800000000000000000000000000000000000E7 +:1089900000000000000000000000000000000000D7 +:1089A0000000000000000000004000000000000087 +:1089B00000000000000000000000000000000000B7 +:1089C00000000000000000000000000000000000A7 +:1089D0000000000000000000000000000000000097 +:1089E0000000001000100010001000000000000047 +:1089F0000000000000000000000040000000000037 +:108A00000005000000000000000000000000000061 +:108A10000000000000000000000000000000000056 +:108A20000000000000000000000000000000000046 +:108A30000000000000000000000000000000000036 +:108A40000000000000000000000000000000000026 +:108A50000000000000000000000000000000000016 +:108A600000000000000000000000000000000008FE +:108A7000000000000000000000000084808400006E +:108A80000084000000000000000000000000001052 +:108A900000000000000000000008000800000000C6 +:108AA00000000000000000000000000000000000C6 +:108AB00000000000000000000000000000000000B6 +:108AC0000000900000000000000000000000000016 :108AD0000000000000000000000000000000000096 -:108AE0000000000000000000000000000000000086 -:108AF00000000000000000008200000000000000F4 -:108B00000000000000002000000020000000000025 -:108B1000000520210005002100800404A0000400BD -:108B20000000042120000000000000000000000000 -:108B30001100000000000000000000000000000024 -:108B40000000000010000000000000000000000015 +:108AE0000000000000000000000000001000000076 +:108AF0000000000000000000000000000000000076 +:108B0000000000000000000000000000000800025B +:108B10000000000800050008000000000000000040 +:108B20000000000000000000000000000000000045 +:108B30000000000000000000000000000000000035 +:108B40000000000000000000000000000000000025 :108B50000000000000000000000000000000000015 -:108B60000000000000000000000000000000030002 -:108B700000000000000000000000000000000000F5 -:108B8000000000000000008241A00082008400007C -:108B9000008400000308008200000002801004101E -:108BA00003000008410800020000002088000000C7 +:108B60000000000000000000000000000000000005 +:108B700000000000000000000000000000080000ED +:108B8000000000004100000000000000000800009C +:108B900000000000000000000000000000000900CC +:108BA00000000000000000000000080000000000BD :108BB00000000000000000000000000000000000B5 :108BC00000000000000000000000000000000000A5 -:108BD0000000000000000000000000000800080085 -:108BE000000002000020002000000040020082007F -:108BF00000000800000000000000000210008200D9 -:108C00000010820000210804080200118200000008 -:108C100004002000000008110003090000410009C1 -:108C2000A040000008002011000200000000090020 -:108C30000290000000000010000000C000000000D2 -:108C4000200000A000200000000000000000000044 -:108C500000000000001020000800000000000000DC -:108C60000000000000400020000000000000001094 -:108C7000030000000508030000000000000100C020 -:108C80000000000100000000800000010000400022 -:108C9000030010000800080002000040400011001E -:108CA0000000200000000000029000010000000011 -:108CB00000000003000000000005000000000000AC +:108BD0000000000000000000000000000000000095 +:108BE0000000000000000000000000000000000085 +:108BF0001000000000000000000000000000000065 +:108C0000000400000003000300000000000000005A +:108C10000000000000000000000000000000000054 +:108C2000000000000000000000000000000008003C +:108C3000080002001000000000000000000000001A +:108C40000020000000000000000000000000000004 +:108C5000000000000008000000000000000000000C +:108C600000000008000000080000000000000000F4 +:108C700000000000000000000000000000000000F4 +:108C80000000000000A0000000A0000000000000A4 +:108C900000000000000000000000000000000000D4 +:108CA000000000000008000000A00000000000001C +:108CB00000000000000000000000000000000000B4 :108CC00000000000000000000000000000000000A4 :108CD0000000000000000000000000000000000094 :108CE0000000000000000000000000000000000084 -:108CF000000000000800000000000000000000006C -:108D000000000000000000000800000000002041FA -:108D10000000002100050002000000100085000096 -:108D200000410110A1100000A00000000800000098 -:108D300000000000000000000000000000000084AF -:108D40000000000200000000000000000000000021 +:108CF0000000000000000000000000000000000074 +:108D000000000000820000000000000000000021C0 +:108D1000000800000000000000000000000000004B +:108D20000000000000000000000000000000000043 +:108D30000000000000000000000000000000000033 +:108D40000000000000000000000000000000000023 :108D50000000000000000000000000000000000013 :108D60000000000000000000000000000000000003 :108D700000000000000000000000000000000000F3 -:108D80000000000000000000000880A020C02000BB -:108D900000C000821110210000C00000000420402B -:108DA00000840000401002000000000821080008B4 -:108DB0000000001000000040000000000000000063 -:108DC0000000000000110000001000000000000082 +:108D800000000000000000080000000000000000DB +:108D900000000000000000000000000000000000D3 +:108DA00000000000000000000800000000000000BB +:108DB00000000000000000000000000000000000B3 +:108DC00000000000000000000000000000000000A3 :108DD0000000000000000000000000000000000093 :108DE0000000000000000000000000000000000083 :108DF0000000000000000000000000000000000073 -:108E00008800000000004000000000002000002159 -:108E100002048803000400000005000000000208AE -:108E20000203000808042000001020034011C000C5 -:108E3000000000080020000000020400008800007C -:108E400002000000200009000000000000040000F3 -:108E500020000000000000000800080000020000E0 -:108E6000110000000200000000880000000400045F -:108E700020000000000000900000080008000088AA -:108E800041000000110010900020000002000000CE -:108E900000008000000000000000000003000088C7 -:108EA0000000000000400340A190001000000004FA -:108EB0000088020000000000000000000000000028 +:108E00000000000000000000000000000000000062 +:108E1000000000080000000000000000000000004A +:108E20000000000000000000001000000000000032 +:108E300000000000000000000000000000880000AA +:108E40000000089008000000110000000000000071 +:108E50000000000000000000000000000000000012 +:108E600000000000000000000008000000000000FA +:108E700000000000000000000000000000000000F2 +:108E80000000000000000000000000A00000000042 +:108E90000000000000000000000000900000000042 +:108EA00000000000000000000000000000000000C2 +:108EB00000000000000000000000000000000000B2 :108EC00000000000000000000000000000000000A2 :108ED0000000000000000000000000000000000092 :108EE0000000000000000000000000000000000082 :108EF0000000000000000000000000000000000072 -:108F0000000000000000000100010000000000005F -:108F100002C084A08201008800000002C01010007E -:108F20000000000002000089012100040008000088 -:108F300000008400000000000000000000000000AD +:108F00000000000000000000000000000000000061 +:108F10000000000000000000000000000000000051 +:108F20000000000000000000000000000000000041 +:108F30000000000000000000000000000000000031 :108F40000000000000000000000000000000000021 :108F50000000000000000000000000000000000011 :108F60000000000000000000000000000000000001 :108F700000000000000000000000000000000000F1 -:108F80000000000000000000004000020009000591 -:108F90000041410400028008008000000000000041 -:108FA0008000000000008000118210A000C10000BD -:108FB0000000410040000000000000000000000030 +:108F800000000000000000000000000000000000E1 +:108F90002009002100030011000000000000000073 +:108FA00000000000000000000000000000000000C1 +:108FB00000000000000000000000000000000000B1 :108FC00000000000000000000000000000000000A1 :108FD0000000000000000000000000000000000091 :108FE0000000000000000000000000000000000081 :108FF0000000000000000000000000000000000071 :109000000000000000000000000000000000000060 -:10901000800080000011000580000000008000003A -:10902000000000000091000000000000100000009F -:1090300020008000804100030000000000000000CC +:109010000000000000000000000000000000000050 +:109020000000000000000000000000000000000040 +:109030000000000000000000000000000000000030 :109040000000000000000000000000000000000020 :109050000000000000000000000000000000000010 :109060000000000000000000000000000000000000 :1090700000000000000000000000000000000000F0 -:10908000000000000000000000000000C000C00060 -:10909000840008000800048400A008000000040404 -:1090A00000000000000000080088000000000184AB -:1090B00000000100400008000484020000000000DD +:1090800000000000000000000000000000000000E0 +:1090900000000000000000000000000000000000D0 +:1090A00000000000000000000000000000000000C0 +:1090B00000000000000000000000000000000000B0 :1090C00000000000000000000000000000000000A0 :1090D0000000000000000000000000000000000090 :1090E0000000000000000000000000000000000080 :1090F0000000000000000000000000000000000070 :10910000000000000000000000000000000000005F -:10911000010001000100C000001101001002C01098 -:1091200000C00000010800A00004000200A0C00070 -:109130000091000082A0000000010000000100007A +:10911000000000000000000000000100000000004E +:10912000000000000000000000000000000000003F +:10913000000000000000000000000000000000002F :10914000000000000000000000000000000000001F :10915000000000000000000000000000000000000F :1091600000000000000000000000000000000000FF :1091700000000000000000000000000000000000EF :1091800000000000000000000000000000000000DF -:109190000000030004000200802009A00402809067 -:1091A00000800000000009800000000000000000B6 -:1091B000800009400000800000040002000200025C +:1091900000000000000000000000110005000200B7 +:1091A00000000000000000000000000000000000BF +:1091B00000000000000000000000000000000000AF :1091C000000000000000000000000000000000009F :1091D000000000000000000000000000000000008F :1091E000000000000000000000000000000000007F :1091F000000000000000000000000000000000006F :10920000000000000000000000000000000000005E -:1092100000000000000000800000000000090000C5 -:1092200000000002000000800000800000008000BC -:109230008000102100042000000000000000000059 -:10924000800000000000000000000000000000009E +:10921000000000000000000000000000000000004E +:10922000000000000000000000000000000000003E +:10923000000000000000000000000000000000002E +:10924000000000000000000000000000000000001E :10925000000000000000000000000000000000000E :1092600000000000000000000000000000000000FE :1092700000000000000000000000000000000000EE :1092800000000000000000000000000000000000DE -:1092900000000000000000A0000800000400C00161 -:1092A0000404020000010000008400000400A0008B -:1092B000100010000101000001A00000880082825F -:1092C0000204020000000000000000000000000096 +:1092900000000000000000000000000000000000CE +:1092A00000000000000000000000000000000000BE +:1092B00000000000000000000000000000000000AE +:1092C000000000000000000000000000000000009E :1092D000000000000000000000000000000000008E :1092E000000000000000000000000000000000007E :1092F000000000000000000000000000000000006E :10930000000000000000000000000000000000005D :10931000000000000000000000000000000000004D -:109320000000000081000081000007000000000034 -:10933000000000000000818100E0070050000000F4 +:10932000000000000000000000000000000000003D +:10933000000000000000000000000000000000002D :10934000000000000000000000000000000000001D :10935000000000000000000000000000000000000D :1093600000000000000000000000000000000000FD :1093700000000000000000000000000000000000ED :1093800000000000000000000000000000000000DD :1093900000000000000000000000000000000000CD -:1093A000050004000F0F0000000000000000000096 -:1093B0000001000028282828000000000F0F0000EE -:1093C0000000AAAA00000000000000000000000049 +:1093A00000000000000000000000000000000000BD +:1093B00000000000000000000000000000000000AD +:1093C000000000000000000000000000000000009D :1093D000000000000000000000000000000000008D :1093E000000000000000000000000000000000007D :1093F000000000000000000000000000000000006D :10940000000000000000000000000000000000005C :10941000000000000000000000000000000000004C -:109420000000000004000F0F0F0F00000000CCCC64 -:109430003030000000002828282F000000000F0F07 -:1094400000003000BAAA0000000000000000000088 +:10942000000000000000000000000000000000003C +:10943000000000000000000000000000000000002C +:10944000000000000000000000000000000000001C :10945000000000000000000000000000000000000C :1094600000000000000000000000000000000000FC :1094700000000000000000000000000000000000EC :1094800000000000000000000000000000000000DC :1094900000000000000000000000000000000000CC -:1094A0000F4F004150F050F0000000000303030391 -:1094B000F0F0F0F00000000000000000303030302C -:1094C00000000000000000008F0F0F0F00000000E0 +:1094A00000000000000000000000000000000000BC +:1094B00000000000000000000000000000000000AC +:1094C000000000000000000000000000000000009C :1094D000000000000000000000000000000000008C :1094E000000000000000000000000000000000007C :1094F000000000000000000000000000000000006C :10950000000000000000000000000000000000005B :10951000000000000000000000000000000000004B -:1095200000000F0F000050005000FCFC3F3FC3C381 -:109530000000000000000000000000000000A0008B -:109540000000FFFFFFFF000000008200000000009D +:10952000000000000000000000000000000000003B +:10953000000000000000000000000000000000002B +:10954000000000000000000000000000000000001B :10955000000000000000000000000000000000000B :1095600000000000000000000000000000000000FB :1095700000000000000000000000000000000000EB :1095800000000000000000000000000000000000DB :1095900000000000000000000000000000000000CB -:1095A00000610006000D000000613006000D0001A2 -:1095B000000030300010000000003000000000000B -:1095C00000613034C011000000610006000D000091 +:1095A000000000000000000000610006000D000047 +:1095B00000000000000000000000000000000000AB +:1095C000000000000000000000000000000000009B :1095D000000000000000000000000000000000008B :1095E000000000000000000000000000000000007B :1095F000000000000000000000000000000000006B :10960000000000000000000000000000000000005A :10961000000000000000000000000000000000004A -:1096200000000000000000000000000000002828EA -:1096300028280000000000000000000000000000DA -:109640000000F0F000000F0F0F0F000000002828AE -:1096500028280000000000000000000000000000BA +:10962000000000000000000000000000000000003A +:10963000000000000000000000000000000000002A +:10964000000000000000000000000000000000001A +:10965000000000000000000000000000000000000A :1096600000000000000000000000000000000000FA :1096700000000000000000000000000000000000EA :1096800000000000000000000000000000000000DA :1096900000000000000000000000000000000000CA :1096A00000000000000000000000000000000000BA -:1096B00028F828280000000000000000000000003A -:1096C00000000000F0F00000F0F0F0F000000000FA -:1096D0002828282F000000000000000000000000E3 +:1096B00000000000000000000000000000000000AA +:1096C000000000000000000000000000000000009A +:1096D000000000000000000000000000000000008A :1096E000000000000000000000000000000000007A :1096F000000000000000000000000000000000006A :109700000000000000000000000000000000000059 :109710000000000000000000000000000000000049 -:10972000000000000000FF00000000000000555590 -:10973000575500000000000000000000000000007D -:10974000000000000000FFFF5FFF00000F0F00009F +:109720000000000000000000000000000000141411 +:109730000010000000000000000000000000000019 +:109740000000000000000000000000000000000019 :109750000000000000000000000000000000000009 :1097600000000000000000000000000000000000F9 :1097700000000000000000000000000000000000E9 :1097800000000000000000000000000000000000D9 :1097900000000000000000000000000000000000C9 -:1097A0000000000000000000FF01010100000000B7 -:1097B00000000300000000000000000000000000A6 -:1097C0000000000000000000FFFF5FFF00000F0F1F +:1097A00000000000000000000000000000000000B9 +:1097B0005050505000000000000000000000000069 +:1097C0000000000000000000000000000000000099 :1097D0000000000000000000000000000000000089 -:1097E000000000008200840000000000820082006F -:1097F000820000001000200088000400000000002B -:109800000400040004100400000000008400840030 -:1098100004000000880001040003000000000000B4 -:109820000200200020002000200000000000200096 -:1098300020000000000001004108000010000000AE -:10984000200020002000200002050000000002058A -:1098500020080000000000082004000000000000B4 -:1098600000000000000000400900000000000000AF -:10987000000000000002A0400002400000000000C4 -:1098800000000000000000A00090000000000000A8 -:109890000000000000002000400300004000000025 +:1097E0000000000000000000200000004000000019 +:1097F0000000200040000000000000000000000009 +:109800000000000000000000200000002000000018 +:109810000000200020000082000300000000000083 +:109820000000000000000000000000000000200018 +:109830000000000020002000008000000000000068 +:109840000000000000000000000000000000000018 +:109850000000000020002000008000000000000048 +:1098600000004000000000000000000000000000B8 +:1098700000000000000000000002000000000000E6 +:109880000000000000000000000040000000000098 +:1098900000000000000000000004000000000000C4 :1098A00000000000000000000000000000000000B8 -:1098B0000000000000000040100210020000000044 -:1098C0000000000010000000000004040000100070 -:1098D0000000000000000000000300020000000083 -:1098E0000000000000000000000000000004000074 -:1098F0000000000000100000000000000000000058 -:109900000000000000100000000000000210000035 -:109910000000020002000000000000000000000043 -:109920000000000002000000000000002000000015 -:109930000000000000000000000000000000001017 -:109940000000000000002000200020000040000077 -:1099500000000010000000000000000000110000E6 -:109960000008000000080008008400000000000853 -:1099700000080008000800080000000000000008BF -:10998000098800000008038400080000000000842B -:10999000008400880008000800880008000000001B -:1099A0000010000000000008008400840000000097 -:1099B0000000000000000008001000000008000087 -:1099C000000000000000000800000000000000008F -:1099D000000000000000001000400008000800081F -:1099E00000210021C0210000000000020005040544 -:1099F000904100210021000000100008000011002B -:109A0000000500210021000000000000000000000F -:109A10000000004100050000001000211000088037 -:109A200000000041000500000000000000050000EB -:109A30000400000000000000000000080008000012 -:109A400021000000000000000003000000000000F2 -:109A500020002000000000080000A000000000001E -:109A6000408800080000000000000000000800001E -:109A700000000000000000020000000000000008DC -:109A8000C0000000000000000000000800A000006E -:109A90000000000000000000000000000000800046 -:109AA00000080000080000000000000000000000A6 -:109AB00000000000050000000000000000000000A1 -:109AC0000000C00000000008000800C000000008FE -:109AD000008400000082000800A000004100000097 -:109AE00000008005000000000000000000000000F1 -:109AF0000000400090002000A00020002000A000F6 -:109B000000002000820082000400000082000000AB -:109B10000800080088040000080008000000000099 -:109B200082000000000082000000820000000000AF -:109B30009000C0400000820000008240900084003D -:109B40000400820000008200000082218240820026 -:109B5000000800000800040300210041000000008C -:109B60000004000082000000000009000000000066 -:109B700000000000000000A0000000000000000045 -:109B80000000024080000000000000000010000003 -:109B9000000000000800000000A000000000080015 +:1098B0000000000000400000000000040000000064 +:1098C0000000000000000000000000000000000098 +:1098D0000000000000000000000000040000000084 +:1098E00000000000000000000000900000000000E8 +:1098F00088000000000000000000000000000000E0 +:109900000000000000000000000000000000000057 +:109910000000000000000000000000000000000047 +:109920000000000000000000000000000000000037 +:109930000000000000000000000000000000000027 +:109940000000000000000000000000000000000017 +:109950000000000000000000000000000000000007 +:1099600000000000000000000000000000000000F7 +:1099700000C0000000000000000000000000000027 +:1099800000000000000000000000000000000000D7 +:1099900000000000000000000000000000000000C7 +:1099A00000000000000800000000000000000000AF +:1099B0000000000000000000000000080008000097 +:1099C0000000000000C000000000000800000200CD +:1099D00000000000000000000008008400080000F3 +:1099E0000000000000000000000000050000000072 +:1099F0000000000000000000000000000000200047 +:109A00000000000000000000000000000000000056 +:109A10000000000000000000000000000000002125 +:109A200000000021002100210021000000000000B2 +:109A30000021002100210021002100000000000081 +:109A40000021002100210021002100000000000071 +:109A5000002100210008002100210000000000007A +:109A600000210000000000000000000000000000D5 +:109A700000000000000000000000000000000000E6 +:109A80008000000000000000000000000000000056 +:109A900000000000000000000000000000000000C6 +:109AA00000000000000000000000000000000000B6 +:109AB000000000000800000000000000000000009E +:109AC0000000000000000000000000000000000096 +:109AD0000000090000080000000000000000000075 +:109AE00000000000000000008200000000000000F4 +:109AF0008211820000000000000000000000000051 +:109B00000000000000000000000000000000000055 +:109B10000000000000000000000000000000000045 +:109B20000000000000000000000000000000000035 +:109B30000000000000000000000000000000000025 +:109B40000000000000000000000000000000000015 +:109B50000000000000000000000000000000000005 +:109B600000000000000000000000000000000000F5 +:109B700000000000000000000000000000000000E5 +:109B800000000000000000000000000000000000D5 +:109B900000000000000000000000000000000000C5 :109BA00000000000000000000000000000000000B5 -:109BB000410000000000000000000000000009005B +:109BB00000000000000000000000000000000000A5 :109BC0000000000000000000000000000000000095 -:109BD00000000000000000000090000000020000F3 -:109BE0000002001000000000000000000041000022 -:109BF000000000000000000000400000000800001D -:109C000000000000000000000000000000008200D2 -:109C100000000000C0000000001000000041000033 -:109C200000000002000000000000A000081000007A -:109C3000820000000000C0000000000000000000E2 -:109C400000000000000500000000A000000000006F -:109C5000004100080000820800000000A000000091 -:109C6000000000000000A0008204000000000000CE -:109C700000000000002000000000000000000000C4 -:109C800000000000000000200000000000000000B4 +:109BD000000000000000000000000000000800007D +:109BE0000000000000820000080000000000A0004B +:109BF000000008001000000000000000000000004D +:109C000000000005000000800000000000080000C7 +:109C10000000000000000000000000000000000044 +:109C20000000000000000000000000000000000034 +:109C3000000000000008000000000000000000001C +:109C40000000000000000000000000000000000014 +:109C50000000000000000000000000000000000004 +:109C6000001100000000840000410000000000001E +:109C700000000000000000000000000000000000E4 +:109C800000000000000000000008000000000000CC :109C900000000000000000000000000000000000C4 :109CA00000000000000000000000000000000000B4 :109CB00000000000000000000000000000000000A4 -:109CC0000000000000820000000000000000000012 -:109CD00000080000000000000084000011000000E7 -:109CE00000000000000000C000000000000500119E -:109CF00000050000004100002004000200000408EC -:109D000000040004000800000000820000000000C1 -:109D1000820000002004000000000000000000009D -:109D200000000000040800000003820000000000A2 -:109D3000000088000000C0000010000000000000CB -:109D4000000500002011081082200800000000001B -:109D50000003A00000042000040000000000884070 -:109D600000000802000000000000000000020000E7 -:109D700000000000000000000000000000000000E3 -:109D800000000000000000000000000000000000D3 -:109D900004000000000000000000000000000000BF -:109DA00000000000000000000000000000000000B3 -:109DB000000000000000000000000000000004009F -:109DC000000000000000000000000000000400008F -:109DD0000000000000000000000000000000200063 -:109DE0000910208820000000000040000000000052 -:109DF000000000000000000000000000000000A0C3 -:109E000000010000008410100000000000010000AC -:109E1000000000000000000000000000000001A0A1 -:109E20000001000000408810000000000001000058 +:109CC0000000000000000000000000000000000094 +:109CD0000000000000000000000000000000000084 +:109CE000080000000000000000000000000020004C +:109CF000080008008200A000080000000000000426 +:109D00000000000000000000000000000000004112 +:109D10000000000000000000000000000000000043 +:109D200000000000004000080008004000000000A3 +:109D3000000000000000000000080000000000001B +:109D400000000000000000080008000800000000FB +:109D50000000000000000000000000000000000003 +:109D600000000000000000080021000800000000C2 +:109D700000000000000000000000210000000000C2 +:109D800000002100000000000000000000000000B2 +:109D900000000000000000000000000000000000C3 +:109DA0002000000000000000000000000000000093 +:109DB00000000000000000000000000000000000A3 +:109DC0000000000000000000000000000000000093 +:109DD0000000000000000000008200000000000001 +:109DE000000000000500000000000000000000006E +:109DF00000010001000100C00001000100C00121BC +:109E00000100010100A000100001000100C00000DD +:109E10000000200000000000000000000000000022 +:109E20000000000000020000000000000000000030 :109E30000000000000000000000000000000000022 -:109E400000A000010100004010020000000000011D +:109E40000000000000000002000000000000000010 :109E50000000000000000000000000000000000002 -:109E600000A0000101000040C0C00000000000018F -:109E700000000000000000000009000000000011C8 -:109E80001000000802000000000000000000004177 -:109E900000000000000000000005000000000011AC -:109EA000100000200400000000000000000000413D -:109EB000000000000000000000000005000000009D -:109EC0000005090040200200000000000000000022 -:109ED0000041000000000000000000200900000018 -:109EE000004120004020020000008000000000002F -:109EF00000410000000040000000000000000900D8 -:109F000000004000090003000000100000000000F5 -:109F10000000804000004100002000000000080018 -:109F200000004000090003000000040000000000E1 -:109F30000000804000000000410000200000000000 -:109F400041000004400009008300000040000000C0 -:109F5000000000008020000005000000000000005C -:109F6000020000004000050083000000090000001E -:109F70000000000080400000010000000000000020 -:109F8000000000000100A00005840000008484009F -:109F900000000000C00100000000000100000000FF -:109FA0000100000001004000C0400000010040002E -:109FB00000000000C00100000000000000010000DF -:109FC00000000000000001008200200800000100E5 -:109FD000200000000000C0010000000000000000A0 -:109FE000000001000000010082002008000000C005 -:109FF000400000000000C001000000000000000060 -:10A00000000000000000100100020000000000003D -:10A01000000000000001000000000000000000003F -:10A02000000000000001100000040000000000001B -:10A03000000000000001000000000000000000001F -:10A040000000000000000000900000100000000070 -:10A0500000000000000000010000000000000000FF -:10A06000000000000000000090010020000001003E -:10A0700000000000000000010000000000000000DF -:10A0800000000000000000418003000000001000FC -:10A09000000000000000004100000000000000007F -:10A0A000000000000000002080200080000011005F -:10A0B000000000000000004100000000000000005F -:10A0C000000000000000000000030020000000006D -:10A0D000110000000000000000410000000000002E -:10A0E000000000000000000000030002000000006B -:10A0F000030000000000000000410000004080005C -:10A1000000C1000000020020040000000041000027 -:10A1100000020000000000000000024100000000FA -:10A1200000C1000000400000850000000041000068 -:10A130000009000000000000000004C00000000052 -:10A14000000000C10000000080400300000000C1CA -:10A150000000002000000000000000000984000052 -:10A1600080050083000000408000050000000041E1 -:10A1700000400040000000040021000003C0000176 -:10A18000200000400000000010018300000000A13A -:10A190000400000000000000000000000185000035 -:10A1A000A00000C10000000002004000000000917B -:10A1B00090000000000000000000000001C100004D -:10A1C0000000A00000C100000000080083000000A3 -:10A1D00000059000000100000000000000000005E4 -:10A1E0000000040000830000000020008200000046 -:10A1F000009190010000000000010000000001C17A -:10A20000000000000000000000000000000000004E -:10A21000811200E007004800000000000000000A72 -:10A22000000000000000000A000000000000000024 -:10A23000811200E007004800000000000000000A52 -:10A240000000000000000000000A00000000000004 -:10A250000000811200E0070048000000000000003C +:109E600000000000000000020000000000000000F0 +:109E7000000000410041004100C000410041008558 +:109E8000104120410241000000800041004100C01B +:109E90000000110080000000000000000000000031 +:109EA0000000000910000000000000000000000099 +:109EB00000000000000000000000000000000000A2 +:109EC0000000000000091000000000000000000079 +:109ED0000000000000000000000000000000000082 +:109EE0000000000000091000000000000000000059 +:109EF0000000000041000300000000804100C0009D +:109F00000000050005002180004084004100C100E0 +:109F10000000000000002100000000000000000020 +:109F20000000000002000900008080000000000026 +:109F30000000001000010000090000000000000007 +:109F40000000000000000200090000800000000086 +:109F500000000000000800004000000000000000B9 +:109F600000000000000002000980008000000000E6 +:109F700000000000001101000100000000C001000D +:109F8000C00000000000820084040041C100910074 +:109F9000C100004040000000000000000000000080 +:109FA000000000000000880002C000080800020055 +:109FB00000000000000000000000000000000000A1 +:109FC0000000000000000000880002C0000810002F +:109FD000020000000000000100000100000000007D +:109FE00000000000000000008800021000081000BF +:109FF000020000000000000000C00001C0C100001D +:10A000000000000100C004030003000100C10100C2 +:10A01000000000010000000000000000C00000007F +:10A0200000000000000000000088000000000000A8 +:10A030000000000000000000000000000000000020 +:10A040000000000000000000000000880000000088 +:10A050000000000000000000000000000000000000 +:10A060000000000000000000000000880000000068 +:10A07000000000000000000000000080004180C1DE +:10A080000000000000410083008200C1004100C1C7 +:10A09000200000000041004000000000000080009F +:10A0A00000000000000000000000000000000000B0 +:10A0B00000000000000000000000000000000000A0 +:10A0C0000000000000000000000000000000000090 +:10A0D0000000000000000000000000000000000080 +:10A0E0000000000000000000000000000000000070 +:10A0F000000000000000000000000000C10080001F +:10A1000080C100004100800002004100C141800088 +:10A110008005000041000000800041000000800038 +:10A1200000C100000000000000000000004100002D +:10A13000000400000000000000000000000000001B +:10A1400080000091000000000000000000000041BD +:10A1500000000004000000000000000000000040BB +:10A1600080000084000000000000000000000041AA +:10A170000000000400000000000000000000C1001A +:10A180004000C0C1000001000200C1000100C189FF +:10A190008200C000000001000000C00001000000BB +:10A1A000400000C1000000000000000000000005A9 +:10A1B000020000000000000000000000000000009D +:10A1C0000000080000100000000000000000000077 +:10A1D0000005020000000000000000000000000078 +:10A1E000000120000041000000000000000000000D +:10A1F0000005020000000000000000000000000058 +:10A20000000000000000004200000000000000000C +:10A210008112004807004800000000000000000014 +:10A22000000000000000001100000000000000001D +:10A23000810000E000004800000000000000000075 +:10A24000000000000000000000000000000000000E +:10A250000000810000E00000480000000000000055 :10A2600000000000000000000000000000000000EE -:10A270000000811200E007004841000000000000DB -:10A28000000A0000000000000000000000000000C4 +:10A270000000810000E00000480000000000000035 +:10A2800000000000000000000000000000000000CE :10A2900000000000000000000000000000000000BE :10A2A00000000000000000000000000000000000AE :10A2B000000000000000000000000000000000009E @@ -162398,210 +162398,210 @@ :10A3500000000000000000000000000000000000FD :10A3600000000000000000000000000000000000ED :10A3700000000000000000000000000000000000DD -:10A38000000000000000257B00000000000000002D +:10A38000000000000000757B0000000000000000DD :10A3900000000000000000000000000000000000BD -:10A3A00000000000DEA4257B00000000000000008B +:10A3A00000000000DEAE747B000000000000000032 :10A3B000000000000000000000000000000000009D -:10A3C00000000000DEA40000257B0000000000006B +:10A3C00000000000DE2E0000747B00000000000092 :10A3D000000000000000000000000000000000007D -:10A3E000000000000000DEA4257B0000000000004B +:10A3E000000000000000DE2E747B00000000000072 :10A3F000000000000000000000000000000000005D -:10A40000000000000000DEA4612603400000000000 -:10A4100000000230A0000000000000000C4000001E -:10A420000000000002C064866126034000000000B6 +:10A40000000000000000DE2E60C603000000000017 +:10A4100000000031E0000000000000000C0000001F +:10A420000000000000C06306615603400000000009 :10A4300000000230A0000000000000000C400000FE -:10A440000000000002C06486000061260340000096 +:10A440000000000002C06A86000061560340000060 :10A45000000000000230A0000000000000000C40DE -:10A4600000000000000002C0648661260340000076 +:10A4600000000000000002C06A8661560340000040 :10A47000000000000230A0000000000000000C40BE -:10A4800000000000000002C064860100010000809E -:10A49000008000800100008001000000000000003A -:10A4A00000000000000000000400000002000000A6 -:10A4B0000000000004000000000000000000000098 -:10A4C0008400000000000400000000030000000001 -:10A4D00000000000000000000400000084000010E4 -:10A4E000020000000000000020000000000000004A -:10A4F0000000040000000000000000000400040050 -:10A5000020800000000000000000000004000400A3 -:10A5100000200020000420000004200000000000B3 -:10A52000000000000000000000000000000000002B -:10A5300000000002000000000000000040000000D9 -:10A5400000000000400000000000000000000000CB -:10A5500004000000000000000000000000000000F7 -:10A5600000000000090000000000000000000000E2 -:10A5700000000000000000000000000000000000DB -:10A5800000000020000200000000000000000000A9 -:10A5900002000000000000000000000000000000B9 -:10A5A0000000000002000200000000000010000097 -:10A5B0000200000002000000000000400210020043 -:10A5C0000000000002000000000000000200000087 -:10A5D000000000400000000000000000000000102B -:10A5E00082000800000082000000000020008300BC -:10A5F0000000020000000020000000000200021025 -:10A6000000000000010000000005000003008200BF -:10A61000000800400000000000840010000000401E -:10A62000000800080008000800100008000000886A -:10A630000084001000000002000000000000000084 -:10A6400000100010000800100008000800000000C2 +:10A4800000000000000002C06A86000040000000DA +:10A49000000000000000000000000000000020009C +:10A4A000000000000000000000000000200040004C +:10A4B000000000000000000000000080900000404C +:10A4C0000080A0000000000000000000000020004C +:10A4D0008800000000000000A00000000000000054 +:10A4E000020000000000000000000000000020004A +:10A4F0008800000000002000200020000400000070 +:10A50000200020000000000000000000000000000B +:10A51000400000004000000040000000400000003B +:10A5200040000000000000000000000000000000EB +:10A53000000000004000000000000000402000007B +:10A5400000010908000000000000000000000000F9 +:10A5500000000000000040000000000000000000BB +:10A56000000080000000000000000000000000006B +:10A5700000000000000000008000800080008000DB +:10A5800000008000800000000000000000000000CB +:10A5900000000000000000000000000000000000BB +:10A5A0000000000800000000000000002000000083 +:10A5B000000000400000000000000000000010103B +:10A5C000401008020808000000000000000000031E +:10A5D000004000000000000000000000001100002A +:10A5E00004400000004000000000000000000005E2 +:10A5F000000000000040A01002100004002000C075 +:10A60000000000000209000000000000000000003F +:10A61000000000000000000000000000000000003A +:10A62000000000000000000000000000000000002A +:10A63000000000000000000000000000000000001A +:10A6400080008000004100010000000000000000C8 :10A6500000000000000000000000000800000000F2 -:10A660000000001000000040000002080010030875 -:10A6700002000000001000000000000800000300BD -:10A68000000000000000200000000010000804107E -:10A690000000000000080021000000410000000050 -:10A6A0000000000000000041000000080000000061 -:10A6B000000000000010000000000000000000008A -:10A6C0000000000800000000000000000000000082 -:10A6D000000000000000000000000000000000007A -:10A6E000000000000000000000000000000000006A -:10A6F0000000000000000000000000000041000514 -:10A7000000410200000000410080089000030000AA -:10A710000003000000000000000000000000000036 -:10A72000000000000000001000C000000000000059 -:10A730000082000000000000000021000000000076 -:10A740000000000000000000000000000000000009 -:10A750000008000000000000000800002100410087 -:10A760000000000000000300000000000000009056 -:10A7700000000082210000000000000021002100F4 -:10A7800000000000800000000000001080110000A8 -:10A7900000000800000000000000000000000000B1 -:10A7A00000000000000000000000000000000000A9 -:10A7B0000000000000009000000000000000000009 -:10A7C0000000000000000000000000000000000089 -:10A7D0000000200000000000400000000000A00079 -:10A7E00000000000000002000000A00000000000C7 -:10A7F00000002000000000000000820000000000B7 -:10A80000000000000000000000090000000001211D -:10A81000000900050000000000000000000000002A +:10A6600000008000000800000000000800C000C0DA +:10A6700000000000000000000001000900010009C6 +:10A6800000050008000800000000000800000000AD +:10A6900000000000000000000000000000000000BA +:10A6A00000000000000000000000000000000000AA +:10A6B000000000000000000000000000000000009A +:10A6C000000000000000000000000000000000008A +:10A6D0000021000000000000000000000000000059 +:10A6E0000008001000000000000000000021000031 +:10A6F0000000000000000000000000000005000253 +:10A7000000410008000000000100000400000000FB +:10A710000000000900000000000008000000000028 +:10A720000000000000000000000000000000000029 +:10A730000000000000000000000000000000000019 +:10A740000000000000000000000000000008000001 +:10A750000000000000000000000000820000000077 +:10A7600000000000000000000000000000000008E1 +:10A77000000000A000000000000000000000000039 +:10A7800000010800000000000000020000010008B5 +:10A7900000000008000000000000000000000000B1 +:10A7A000000900000000000000090000080000008F +:10A7B0000000000000000000000000008200000017 +:10A7C0000000000000000000000008000000000081 +:10A7D0000000000000000000000000000800000071 +:10A7E000002100000000000800000040820000007E +:10A7F0000800000000000000000000800000008051 +:10A800008400000008801000010020800880000003 +:10A8100000000000018000030000000000000000B4 :10A820000000000000000000000000000000000028 :10A830000000000000000000000000000000000018 -:10A840000000000000000000000000000000000008 -:10A8500000000000000000040000200000000000D4 -:10A8600000000000000000000000000000000000E8 -:10A8700000200000000800000300000000000000AD -:10A8800000000410004000A02000000002000000B2 -:10A890000200000000C000A0022000000000000034 -:10A8A00008000000000000000000000000000000A0 -:10A8B0000000000000000000000000000003000095 -:10A8C0000000000800000000000000000000000080 -:10A8D0000000000000000000000000000000080070 -:10A8E0000000000000000000000000000000000068 -:10A8F0000000000000000000000000000000002137 -:10A90000000500050000000800030000000000082A -:10A91000000000000000080000210000000000000E -:10A92000000000000020000000000000000000A067 -:10A930000000000000000000000000000000000017 -:10A9400000000000000000C021000000038821007A +:10A840000000000000000000000000000000008484 +:10A850000000000000000000000000000000008276 +:10A8600000000000000000000000000021000000C7 +:10A870000000000000000000000000000040008216 +:10A88000000200000082000480000800850400042B +:10A890000000000010000240000000000000000066 +:10A8A00000000000000000000000000000000000A8 +:10A8B0000000000000000000000000000000000098 +:10A8C0000000000000000000000000000000000088 +:10A8D0000000000000080008000000000000000068 +:10A8E0000000000000000003400000000008080015 +:10A8F0000000000000000000000000000000200038 +:10A9000084000000400002204002404000208402F9 +:10A910000808000282100000820000000000000011 +:10A920000000000000000000080000000000008897 +:10A93000000000000000000000000800000000000F +:10A9400000000000000800000000000000000008F7 :10A9500000000000000000000000000000000000F7 -:10A9600000000000000000000000030000000000E4 -:10A9700021000000000000000000000000000000B6 -:10A9800000000000000000C00000080000000800F7 -:10A990000300000000000000800000000000000034 -:10A9A000000000000008000000000000000000009F -:10A9B0000000000000000000000000000400000093 -:10A9C0000000400000000000040000000000000043 -:10A9D000000000000000000000000000080000006F -:10A9E000000000000000000000000800000000005F -:10A9F000000000000000080000000000000040000F -:10AA000084040000000000210021000090092004BF -:10AA10000000000400040000000500800003002086 +:10A9600000000000000000080000000000000000DF +:10A9700000080000000000000000000000A000002F +:10A98000000000000000000880012101000100011A +:10A9900000090001000100010000000003000000A8 +:10A9A00000000000000000000000000000000000A7 +:10A9B0000000000000000000000000000000000097 +:10A9C0000000000000000000000000000000000087 +:10A9D00000000000000000400040002100210000B5 +:10A9E0000000000000000000000010000000000057 +:10A9F0000000000000000000000000000000000057 +:10AA00000000000008000000004000C0402000A03E +:10AA1000002000040004014000001000018000003C :10AA20000000000000000000000000000000000026 :10AA30000000000000000000000000000000000016 :10AA40000000000000000000000000000000000006 :10AA500000000000000000000000000000000000F6 -:10AA60000000000000000040000000000040110055 -:10AA700000000000000000000000000000000000D6 -:10AA80000000008400080082008200C000841100E1 -:10AA90002000000009A0001020080084021000041B -:10AAA00000000000000000000000000000000100A5 +:10AA600000000000050000000000000000000000E1 +:10AA700000000000080000000004000000A000002A +:10AA800000000000000005000000410100058801F1 +:10AA900000050001410100012001000010000240FA +:10AAA00000000000000000000000000000000000A6 :10AAB0000000000000000000000000000000000096 :10AAC0000000000000000000000000000000000086 -:10AAD0000000000000000000000000000000000076 +:10AAD00000000110008800080008000000000000CD :10AAE0000000000000000000000000000000000066 -:10AAF000000000000000000000000000000800004E -:10AB0000000200080000000000000000000000003B -:10AB1000000000000100000000C0A0201008041088 -:10AB20000082102000000000000000000000000073 -:10AB30000200000000000000000000000000000013 +:10AAF0000000000000000000000000000000000056 +:10AB0000000000009190001084089088C0C00010E0 +:10AB10000890A088002102030010009100000000AE +:10AB20000000000000000000000000000000000025 +:10AB30000000000000000000000000000000000015 :10AB40000000000000000000000000000000000005 -:10AB500000000000000000000000000000000000F5 +:10AB50000000000020000000008000000000000055 :10AB600000000000000000000000000000000000E5 -:10AB70000000000000000000000000000000008055 -:10AB80000000000000800000000000000000000045 -:10AB9000000000000000200021000900000080806B -:10ABA00000000080000000000000000000000040E5 -:10ABB0000000001000000000000000000000000085 +:10AB700000000000000000000000000000000000D5 +:10AB80000000000000001000218080800000918003 +:10AB900008004180808011418390058300104000AF +:10ABA00000000000000000000000000000000000A5 +:10ABB0000000000000000000000000000000000095 :10ABC0000000000000000000000000000000000085 -:10ABD0000000000000000000000000000000000075 +:10ABD000000000000000000008210500418800007E :10ABE0000000000000000000000000000000000065 -:10ABF0000000000000000000000000000000000055 -:10AC00000000001100000000000000000000000033 -:10AC100000000009008000004100030088028880D5 -:10AC20000000000000000000000000900000004054 -:10AC30000000000000010000000000000000000013 +:10ABF0000000000000000000000000100000000045 +:10AC0000000000000000000080008009002100001A +:10AC10002000800890C090890011002000410003AE +:10AC20000000002100000000000000000000000003 +:10AC30000000000000000000000000000000000014 :10AC40000000000000000000000000000000000004 -:10AC500000000000000000000000000000000000F4 +:10AC50000000000000000000000201000120018946 :10AC600000000000000000000000000000000000E4 -:10AC700000000000000000000000000000000000D4 -:10AC8000000000000084000200000000000000003E -:10AC900000000000004000080000000085A0A100A6 -:10ACA00005A00000000000000000010000002000DE -:10ACB0000000000002000000000000000000000092 +:10AC7000000000000000000000000000000100884B +:10AC800000000000000000000000A00040001001D3 +:10AC90000090020810012185C190002000000000F2 +:10ACA00000010000000000000000000000000000A3 +:10ACB0000000000000000000000000000000000094 :10ACC0000000000000000000000000000000000084 -:10ACD0000000000000000000000000000000000074 -:10ACE0000000000000000000000000000000000064 +:10ACD0000000000000000000000010000000100054 +:10ACE000080000000000000000000000000000005C :10ACF0000000000000000000000000000000000054 -:10AD000000000000000000000000C0000000000083 -:10AD100000000000000000000000000040000000F3 -:10AD20008405A000020200A0008888201000000016 -:10AD30000000000000008000000040000000000053 +:10AD00000000000000000000000000002011009082 +:10AD10000008908908400009081021C0A001000027 +:10AD200005000200000000004000000000000000DC +:10AD30000000000000000000000000000000000013 :10AD40000000000000000000000000000000000003 :10AD500000000000000000000000000000000000F3 -:10AD600000000000000000000000000000000000E3 +:10AD60008000000000000000000000000000000063 :10AD700000000000000000000000000000000000D3 -:10AD800000000000000000000000000000000000C3 -:10AD9000000000000000000000000000000080092A -:10ADA0000002008582090000008000000000000011 -:10ADB000000400000000000000000000000000008F +:10AD8000000000000000000000000000000000883B +:10AD9000002000A01008800300908088118280218C +:10ADA0002111900080000000000000000000000061 +:10ADB0000000000000000000000000000000000093 :10ADC0000000000000000000000000000000000083 -:10ADD0000000000000000000000000000000000073 -:10ADE0000000000000000000000000000000000063 +:10ADD0000000000000000000000000000000C109A9 +:10ADE000C100C00091100000000000000000000041 :10ADF0000000000000000000000000000000000053 -:10AE000000000000000000008002800000008000C0 -:10AE10000000000000000000000000000000000032 -:10AE20000004000000000011000000090000000004 -:10AE30000000000100000000000000000000000011 +:10AE000080008000000080000000000000000000C2 +:10AE10000009808000C18000C12000A000008800DF +:10AE2000A103914190000300800300210000000075 +:10AE30000000000000000000000000000000000012 :10AE40000000000000000000000000000000000002 :10AE500000000000000000000000000000000000F2 -:10AE600000000000000000000000000000000000E2 +:10AE6000C100080040008800000000000000000051 :10AE700000000000000000000000000000000000D2 -:10AE80000000000000000000000008002000020098 -:10AE9000100000000000000000000400A0000400FA -:10AEA000840000100000000000000000000000000E -:10AEB00000000000000007000000000000E00000AB +:10AE80000000C000040020000200000000000000DC +:10AE90000000000082A01040080083008840882045 +:10AEA0000300C100A00003004000C0000000080033 +:10AEB000880000000000000000000000000000000A :10AEC0000000000000000000000000000000000082 :10AED0000000000000000000000000000000000072 -:10AEE0000000000000000000000000000000000062 +:10AEE000000000000000430000000000000000001F :10AEF0000000000000000000000000000000000052 -:10AF00000000000000000000000000000000000041 -:10AF10000000000000000000000000000000000031 -:10AF200000000000008100E00700000000000000B9 -:10AF3000070000000000000000000000000000000A +:10AF000000000000000600004300000000000000F8 +:10AF1000000000000000000000000000818100C867 +:10AF200043008400500A00C84300000000210000D4 +:10AF300043000000000000000000000000000000CE :10AF40000000000000000000000000000000000001 :10AF500000000000000000000000000000000000F1 -:10AF600000000000000000000000000000000000E1 +:10AF6000000000004242000F00000000000000004E :10AF700000000000000000000000000000000000D1 -:10AF800000000000000000000000000000000000C1 -:10AF900008000000000000000000000000000000A9 -:10AFA0000000000000000000000000FF00FF0000A3 -:10AFB00000006066F9FF00000000000000000000D3 +:10AF8000000000000000000034300000000000005D +:10AF9000000000000000F3C0F3C04FEF4F4FD98016 +:10AFA000FFFFFCC07E7EF0F0C0C00000000030302B +:10AFB0000000000000000000000000000000000091 :10AFC0000000000000000000000000000000000081 :10AFD0000000000000000000000000000000000071 -:10AFE0000000000000000000000000000000000061 +:10AFE00000000000000042420F00000000000000CE :10AFF0000000000000000000000000000000000051 -:10B000000000000000000000000000000000000040 -:10B010000000000000000000000000000000000030 -:10B02000090901080000000000000000FFFFFFFF09 -:10B03000000000004042F9FF000000000000000096 +:10B00000000000000000000004000010000000002C +:10B010000000000000000000F3F3F3F30207020257 +:10B020000000D980FCC0424200F0C0C00000000017 +:10B0300030303C3C00000000000000000000000038 :10B040000000000000000000000000000000000000 :10B0500000000000000000000000000000000000F0 :10B0600000000000000000000000000000000000E0 @@ -162612,492 +162612,492 @@ :10B0B0000000000000000000000000000000000090 :10B0C0000000000000000000000000000000000080 :10B0D0000000000000000000000000000000000070 -:10B0E0000000000000000000000000000000000060 +:10B0E000000000000000000000000F0F0F0E000025 :10B0F0000000000000000000000000000000000050 :10B10000000000000000000000000000000000003F -:10B11000000000006060303000000000000000000F -:10B12000000000000000000000000000606060609F -:10B13000F00000000642064200000000000000008F +:10B110000000000000000000000000006400666401 +:10B120000F270F272D2D99FF0F0F00FFFBDB8181CC +:10B13000000000000000000000000000000000000F :10B1400000000000000000000000000000000000FF :10B1500000000000000000000000000000000000EF -:10B1600000000000000000000000000000000000DF +:10B160000000000000000000000000000F0F0F0FA3 :10B1700000000000000000000000000000000000CF :10B1800000000000000000000000000000000000BF -:10B19000000000000000606030300000000000008F -:10B1A000000000000000000000000000000030303F -:10B1B0003030F000000006660600000000000500C8 -:10B1C0000A08050000A000610007000D0000000053 +:10B190000000000000000000000000000000FE664B +:10B1A000FFFE276627662D2D00663C3C6666FBDBAE +:10B1B000810000000000000000000000000000000E +:10B1C000000000000000000000000000000000007F :10B1D000000000000000000000000000000000006F -:10B1E000000000000000000000000000000000005F -:10B1F000000000000000000000000000000000004F +:10B1E0000000000000000000000000000000A0615E +:10B1F0004006000D000000000000000000000000FC :10B20000000000000000000000000000000000003E -:10B2100000000000000000000000300000000000FE -:10B2200000000000000000000000300000000000EE -:10B230000061303700050000000000080000000039 +:10B21000A00000300000000000000000000000005E +:10B2200000610006000D00010061203DC0490008DA +:10B23000A061403DC009000010000038000000007F :10B2400000000000000000000000000000000000FE :10B2500000000000000000000000000000000000EE :10B2600000000000000000000000000000000000DE -:10B2700000000000000000000000000000000000CE +:10B270001400A0A00000000000000000000000007A :10B2800000000000000000000000000000000000BE :10B2900000000000000000000000000000000000AE -:10B2A000000000000000000000000000000000009E -:10B2B000000000000000C0C0C0CF0000000000007F +:10B2A0000000000000008B8BEB8B41416969E46674 +:10B2B000667266663636FCFCFCFC0000000000008E :10B2C000000000000000000000000000000000007E :10B2D000000000000000000000000000000000006E :10B2E000000000000000000000000000000000005E -:10B2F000000000000000000000000000000000004E +:10B2F000000014000000000000000000000000003A :10B30000000000000000000000000000000000003D :10B31000000000000000000000000000000000002D -:10B32000000000000000000000000000000000001D -:10B330000000000000000000CFCFCFCF00000000D1 +:10B32000000000000000000082828B822828969690 +:10B33000E4E46672666C666C0303030300000000BD :10B3400000000000000000000000000000000000FD :10B3500000000000000000000000000000000000ED :10B3600000000000000000000000000000000000DD -:10B3700000000000000000000000000000000000CD +:10B370000000000000000000AA00F0000000000033 :10B3800000000000000000000000000000000000BD :10B3900000000000000000000000000000000000AD :10B3A000000000000000000000000000000000009D -:10B3B00000000000000000000000FF28D70000008F +:10B3B00000000000003C00F0366C000000000000BF :10B3C000000000000000000000000000000000007D :10B3D000000000000000000000000000000000006D :10B3E000000000000000000000000000000000005D -:10B3F000000000000000000000000000000000004D +:10B3F00000000000000000000000AA00F0000000B3 :10B40000000000000000000000000000000000003C :10B41000000000000000000000000000000000002C :10B42000000000000000000000000000000000001C -:10B43000000000000000000000000000F5A0F5A0E2 -:10B4400000000000000000000010000000000000EC -:10B4500000100000000000000000000000000000DC -:10B4600000000000000000000010000000000000CC -:10B4700000000000000000000000040000000000C8 -:10B4800004000000000000000002000000000000B6 -:10B49000000000000000000001000000200000008B -:10B4A000000000000000020000002000000000007A -:10B4B0002000000000000000000004000000000068 -:10B4C000040000000400000004050000000000006B -:10B4D000000000000000000010004000000000001C -:10B4E00000000000000000000090000000000000CC -:10B4F0000000000000000002000240000000000008 -:10B500000000000000000002000000000000000039 -:10B5100000000000000000024000400000000000A9 -:10B520000000000000000000000000028000000099 -:10B5300000008000000000400000000080000000CB -:10B540000000800000008000000280000000000079 -:10B5500000000000000000000000000002000000E9 -:10B560000000000008000200004000000000000091 -:10B570000000020000000000000000008200000047 -:10B5800000009000000000000040000000000000EB -:10B590000000004000400000000000000000080023 -:10B5A0000000000000000200000000000800000091 -:10B5B0000100011000000000000000000000004039 -:10B5C0000200004000000100000004000010000024 -:10B5D0000000000000040000000000000000000067 -:10B5E000000000000000000000000000000000005B -:10B5F000000000000000000000000000000000004B -:10B60000000000000000000000000000000000003A -:10B610000000000000000000020000000000000028 -:10B620000000008800000000000000000000000092 -:10B6300000002000200000000000000000000000CA -:10B6400000000000000000000400008480000200F0 -:10B6500000000000000000000000000000000000EA +:10B43000000000000000003C00FF36690000000032 +:10B4400000000000000000000000000002000000FA +:10B4500000000000000000000000000000000000EC +:10B4600000000000000000000000000000000000DC +:10B4700000000000000000000000000000000000CC +:10B48000000040000000000000000000000000007C +:10B49000000000000000C0000000000000000000EC +:10B4A000000000000000000000000000000000009C +:10B4B000000000000000000000000000000000008C +:10B4C0000000000000000000040000000000C000B8 +:10B4D000000000000000400000000000000000002C +:10B4E000000000000000000000004000000000001C +:10B4F000000000000000000000000000000000004C +:10B50000000000000000000000000000000000003B +:10B510000000000000000900000000000000000022 +:10B52000000000000000000000000000000000001B +:10B53000000000000000000000000000000000000B +:10B5400000000000000000000000000000000000FB +:10B550000000000000000000820000000000000069 +:10B56000000000000000000000400000000000009B +:10B5700000000000000000000000000900000000C2 +:10B58000000000200000000011090000000300007E +:10B5900000000000000000000000000000000000AB +:10B5A000008000000000000240000089000200004E +:10B5B0000000000900020000000000090000000077 +:10B5C000000000000200000900000009000900005E +:10B5D0000000000000000008000000000000000063 +:10B5E00000000000000000000000000000000084D7 +:10B5F00000000000000000080084008400840000B7 +:10B6000000000000000100000000400000000000F9 +:10B610000000000000000000000800000000000022 +:10B620000000001000000008000180080010000960 +:10B630000000000000000001000800880000000079 +:10B6400000000000000000080000000800000008E2 +:10B6500000000000000000000000000800000008DA :10B6600000000000000000000000000000000000DA :10B6700000000000000000000000000000000000CA -:10B6800002000000000000000000000000000000B8 -:10B6900000000000000000000000000000000000AA -:10B6A000000000000800000000000000000800008A -:10B6B000000000000000000000000000000000008A -:10B6C0000100000208210021011000000000000814 +:10B680000003000800000000000000200020000867 +:10B6900000000004000400000000000200000000A0 +:10B6A0000000000000210000000001000000000078 +:10B6B0000000000000200020000000A000A0009179 +:10B6C00000890000000000000000000000000000F1 :10B6D000000000000000000000000000000000006A :10B6E000000000000000000000000000000000005A -:10B6F000000000000000000000000000000000004A -:10B700000000000000000000000000000000000039 -:10B710000000000000000000000000000000000029 -:10B720000000000000000000000000000800000011 -:10B730000000000000000000000000000000000009 -:10B7400000000800000000000000400000C00000F1 -:10B7500000000000000000000000000000000000E9 +:10B6F000000000000000000000000000000040000A +:10B700000000000000000000009000044101000162 +:10B71000000900000001000100000000000000001E +:10B7200000000300000000000000000002002000F4 +:10B730001100000003004101410121000903112112 +:10B7400000200020008400000000000009004100EB +:10B7500005000000000000000000000000000000E4 :10B7600000000000000000000000000000000000D9 -:10B7700000000000000000000000000000000000C9 -:10B7800000000000020000000000000002000000B5 -:10B790000000000000008200000000000000000027 -:10B7A0000000000000000000000000000000000099 -:10B7B00000000000000000000900A00000040000DC -:10B7C0000000022120000000000000410080000075 -:10B7D000000408000000000000000000000000005D +:10B7700000000000000000000800000200000000BF +:10B780000000000000000000000000000000C08277 +:10B79000C0008400000000000000008000000000E5 +:10B7A0001000820082008400000000000080000081 +:10B7B0000800000000000000000800000000000079 +:10B7C00000000000000090000000000000000000E9 +:10B7D0000200000000000000000000000000000067 :10B7E0000000000000000000000000000000000059 -:10B7F0000000000000000000000000000000000049 +:10B7F0000000000000000000000000000001000048 :10B800000000000000000000000000000000000038 -:10B810000000000000000000000000000000000028 -:10B8200000000000000000000000000000400000D8 -:10B830000000000000000000000088000000000080 -:10B84000020000000000800000A000C000C0400214 -:10B8500000C0009000000000000000000000000098 -:10B8600000000000000000000000000000000000D8 +:10B810000003000000000000000000A00004000081 +:10B820000000000800000000000000000000001000 +:10B830000000000000000000000000000000000008 +:10B8400000000000009000000000008405C000001F +:10B850000000910000000000000000000000000354 +:10B8600000000000000800000000000000000000D0 :10B8700000000000000000000000000000000000C8 -:10B8800000000000000000000000000000000000B8 -:10B8900000000000000000000000000000000000A8 -:10B8A0000000000000000000000000000000000098 -:10B8B0000000000000000000000000000000000088 -:10B8C000000000030005000000100000820000419D -:10B8D0000082008090000805008009000000000040 -:10B8E0000900000009000000000000000000000046 +:10B88000000020009011200000020404820810052E +:10B8900000030420002000200000000088000000B9 +:10B8A00000040000000000000000000088004000CC +:10B8B0000800002182008202020082090420012087 +:10B8C00001020000008000A0008000000000840051 +:10B8D000000088000000840002000000000000005A +:10B8E00000000000000000000000000000000088D0 :10B8F0000000000000000000000000000000000048 -:10B90000000000000000000000000000000800002F -:10B910000000000000000000000000000000000027 -:10B920000000000000000000000000000000000017 -:10B9300000000000080000000000000000000000FF -:10B9400000000000000000000000000000000000F7 -:10B95000008400020002000000000002000000005D -:10B9600000000000000000000000000000000000D7 +:10B9000000000000800000008000000180850091A0 +:10B91000000800008001000100010000000000009C +:10B920000000000100000000000000000500000011 +:10B9300000048000000000000000800021848003DB +:10B9400004010401098803200821002011000500DA +:10B9500005000000009000000000800000080000CA +:10B960000040000000000000000000000000000097 :10B9700000000000000000000000000000000000C7 -:10B9800000000000000000000000000000000000B7 -:10B990000000000000000000000000000000820025 -:10B9A0000000000000000000000000000000000097 -:10B9B0000000000400000000000002000000000081 -:10B9C000000000000000000800080000010800114D -:10B9D000000800000100000900080040000000000D -:10B9E0000000000000000000000000000000000057 +:10B9800000000000002000200000008000030008EC +:10B9900000080000000040880020000800000000AF +:10B9A0000000000000000000000000000000840013 +:10B9B000000000000000024000000041820500007D +:10B9C00000020000002000200020000000A0000075 +:10B9D0000000000900000202C041000088000000D1 +:10B9E0000000000100000000000000000000000056 :10B9F0000000000000000000000000000000000047 -:10BA00000000000000000000000000000000000036 -:10BA10000000000000000000000000000000000026 +:10BA00000000000000000001000100000020000014 +:10BA100000000001000000008002000100010000A1 :10BA20000000000000000000000000000000000016 -:10BA30000000000000000000000000000000000006 -:10BA40000000000000000000008420000000200032 -:10BA50000090000003C040C0000000000300400050 -:10BA600000000000000000000000000000000000D6 +:10BA3000090000000000000080010000000000007C +:10BA40004100000900000001000100010000002188 +:10BA50000000000000000000800000C0000000C0E6 +:10BA60000000009000000000000000000000000046 :10BA700000000000000000000000000000000000C6 -:10BA800000000000000000000000000000000000B6 -:10BA900000000000000000000000000000000000A6 -:10BAA000000000000000000000000000010008008D -:10BAB0000000000000000000000000000000000086 -:10BAC000000010A10011000588C000000000000067 -:10BAD000000011080110408488880210219010C0D5 -:10BAE00082C0000000000000000000000000000014 +:10BA800000C091908208000000C000908810000063 +:10BA900000410010000810100210901000829088E1 +:10BAA0000000000004000100000000000000000091 +:10BAB000000000200090002008080104828202405B +:10BAC0004041004005904082202010C0009000209E +:10BAD0000202000000000000000000A002040100BB +:10BAE00000000000008000000000000000000000D6 :10BAF0000000000000000000000000000000000046 -:10BB00000000000000000000000000000000000035 -:10BB10000000000000000000000000000000000025 -:10BB200000000000000000000000000000002100F4 -:10BB30008000000000000000000000000000000085 -:10BB400000000000008800C0048800100000000011 -:10BB50000200000082000400800000008489881038 -:10BB60008011804000000000000000000000000084 +:10BB000000000080838080000000008041800000F1 +:10BB1000000000C100910089008900808000008041 +:10BB20008080000000008000030000000000000092 +:10BB300000000000000000000000800010830904E5 +:10BB40000090002111000380808000008080008030 +:10BB50000020808300000000000000000000800042 +:10BB600009000000000000110000000000000000BB :10BB700000000000000000000000000000000000C5 -:10BB800000000000000000000000000000000000B5 -:10BB900000000000000000000000000000000000A5 -:10BBA0000000000000000000000000000000050090 -:10BBB0002000040040080000000000000000000019 -:10BBC000000000000000880002039104889000003B -:10BBD0000000000000000000000280000000800063 -:10BBE000000980900000000000000000000000003C +:10BB80000000000000000000800080801100110013 +:10BB90000211821180000002800200001080A103C7 +:10BBA000A083A0830000000800000008000000003F +:10BBB00000000000000080000000800000001180F4 +:10BBC0001088089109030900090080008989000094 +:10BBD0000041800480000000000000000000000020 +:10BBE0008000000000800000000100000000000054 :10BBF0000000000000000000000000000000000045 -:10BC00000000000000000000000000000000000034 -:10BC10000000000000000000000000000000000024 -:10BC20000000000000000000000000000000000014 -:10BC300000C0000001000100000000000000000042 -:10BC400000000000000000004100C001A001090840 -:10BC50000000A000A000000088000000A000040078 -:10BC6000400082004008C00000000000000000000A +:10BC0000000000000000000000008400C0908800D8 +:10BC100000000011C020100800001020080021C002 +:10BC200003018282889100000001000000000000F2 +:10BC3000000000000000000008000000A00002005A +:10BC40009002404091400801400200008400C190F1 +:10BC5000880000000820C0A00000000000000000D4 +:10BC6000000002820000008240000000909000006E :10BC700000000000000000000000000000000000C4 -:10BC800000000000000000000000000000000000B4 -:10BC900000000000000000000000000000000000A4 -:10BCA0000000000000000000000000000000000094 -:10BCB0000000000000000001000000000000000083 -:10BCC0000000000000000000000008100008100341 -:10BCD000A0820000000000000000A009000200C1D6 -:10BCE000100304A0004108C004040000000000008C +:10BC8000000000000000000000000008089000C153 +:10BC900000000010009000C090A0000890880802EA +:10BCA000909000840090C00200000000C0000000DE +:10BCB00000000000000000000000A01000100010B4 +:10BCC000A0100888008804C103C0004000880491C7 +:10BCD00000C0C0000040042000C0000000000000C0 +:10BCE0000000000000002020000480000000808090 :10BCF0000000000000000000000000000000000044 -:10BD00000000000000000000000000000000000033 -:10BD10000000000000000000000000000000000023 -:10BD20000000000000000000000000000000000013 -:10BD300000000000004000020021000000000000A0 -:10BD400000000000000000000000000080411082A0 -:10BD500005088010000000000000100000840010A2 -:10BD6000002082C0000900C0C120040300000000C0 -:10BD700000000000000000000000000000000000C3 -:10BD800000000000000000000000000000000000B3 -:10BD900000000000000000000000000000000000A3 -:10BDA0000000000000000000000000000000000093 -:10BDB00000000000000020000800400040040000D7 -:10BDC0000000000000000000000000000000000073 -:10BDD0001000880002100000000000000000004079 -:10BDE00080A10080000000080084008000000000A6 -:10BDF0000000000000000000000000000000000043 -:10BE00000000000000000000000000000000000032 -:10BE10000000000000000000000000000000000022 -:10BE20000000000000000000000000000000000012 -:10BE3000000000000000000001820100010000007D -:10BE400000000000000000000000000000000000F2 -:10BE50000004880411C09000000000C000C0000071 -:10BE60008801A0088884100004018482C0080400AE -:10BE700000000000000000000000000000000000C2 +:10BD0000000000000000000000000009000900C160 +:10BD1000008500090002008200828080000091807E +:10BD20008080808000800080808000000000800093 +:10BD30000000030000000000000000000000008080 +:10BD40000000800000004182112189840010001051 +:10BD500000A11183000000800000008000000000AE +:10BD600000000000000000000000000080118000C2 +:10BD70008000000000000000000000000000000043 +:10BD80000000000000000000000000008011000220 +:10BD9000001100008891910909000003A121908001 +:10BDA00089800080C1008588918000030000000028 +:10BDB0000000000000000000000000000000000083 +:10BDC000000000800000A111030341009011410018 +:10BDD000038810001010801180088080000000008F +:10BDE0000000000000000000000000000000C00192 +:10BDF0002000900000000000000000000000000093 +:10BE000000000000000000000000000000009001A1 +:10BE1000080800010000C109201000000000A10175 +:10BE2000034089400008918885C09190A0010000DE +:10BE30000000000000000000000000000000000002 +:10BE40000000000200080000050282834090030009 +:10BE500001A0014000200001C001202002020000DA +:10BE600000000000000000000400000020040000AA +:10BE70000006000043000000000000000000000079 :10BE800000000000000000000000000000000000B2 -:10BE900000000000000000000000000000000000A2 -:10BEA0000000000000000000000000000000000092 -:10BEB0000000000000000000000000000000000082 -:10BEC0000000000000000000000000000000000072 -:10BED0000000000000E000000000000000E00000A2 -:10BEE0000000000000000700000000000000070044 -:10BEF0000000000000000000000000000000000042 +:10BE90000021000043000000418200C84300000070 +:10BEA000600600C843000000821100C843008841BA +:10BEB0000000000000C80000410000000000000079 +:10BEC0000000000000000000000000060000430029 +:10BED00000000006000043000000000A00004300CC +:10BEE0000000000000000000000000000000000052 +:10BEF000000000F0F00FFF00FF0000000000000055 :10BF00000000000000000000000000000000000031 -:10BF10000000000000000000000000000000000021 -:10BF20000000000000000000000000000000000011 -:10BF30000000000000000000000000000000000001 -:10BF400000000000000000000000000000000000F1 -:10BF500000000000C30FC30F5FFF50F0000000009F -:10BF6000000000003CFF000000820082F3F7F7F7BA -:10BF70003C3C0CFF0000000000000000000000003E +:10BF10000000000000FF000000F0000000AA000088 +:10BF200000F0F0FFAAAA30F3F3F30000FFFF0F00C8 +:10BF30000F000000000000000000000000000000F2 +:10BF40000000000000000000000003CF040000001B +:10BF500000FF0F0F00000000003CFCC000F0AF5FCE +:10BF6000AAAAAA5500000000000000000F0FF0F080 +:10BF7000FF0000FF000000FFFF00FF0000000000C6 :10BF800000000000000000000000000000000000B1 -:10BF900000000000000000000000000000000000A1 -:10BFA0000000000000000000000000000000000091 -:10BFB0000000000000000000000000000000000081 -:10BFC0000000000000000000000000000000000071 -:10BFD000000000000000000000005FCF50C0000023 -:10BFE000000000000000F0FF00000AAA0A00303440 -:10BFF00030303C3C0AFF0000000000000000000060 +:10BF900000000000000000FF000000F0000000AA08 +:10BFA000000000F0000FAAAA3030F3301000FFFAB2 +:10BFB000000D000F00000000000000000000000065 +:10BFC0000000000000000000000003CFFFFF0000A1 +:10BFD00000003C3C000000000000003CC0FC00F001 +:10BFE000A0500000F0F000000000000000000F0F63 +:10BFF000F0F0FF0000FF00FF00FF00000000000065 :10C000000000000000000000000000000000000030 -:10C010000000000000000000000000000000000020 -:10C020000000000000000000000000000000000010 -:10C030000000000000000000000000000000000000 -:10C0400000000000000000000000000000000000F0 -:10C0500000000000000000000CFCACFC0000F7F742 -:10C060000000000000000000BA38FB7900FF00FF6C -:10C070008787C7C7F5F5A0A00000000000000000FA +:10C010000000000000000F000000550000000F00AD +:10C020000000141400007FFF5DDFFFFF0000C2422C +:10C030000303AAAA0A0A0000000000000000000092 +:10C04000000000000000000008000C0CBEAAFFBEAB +:10C050000000304000EFD3D7C33C0F0F417D3C00C0 +:10C06000F3CF3C0096963C3C00000000000000002E +:10C07000FF0000FF0F0F0F0FFF00FF000000000088 :10C0800000000000000000000000000000000000B0 -:10C0900000000000000000000000000000000000A0 -:10C0A0000000000000000000000000000000000090 -:10C0B0000000000000000000000000000000000080 -:10C0C0000000000000000000000000000000000070 -:10C0D000000000000000000000000C0CAC0C000090 -:10C0E000FF0000000000550A550AFF3CFF3C00D746 -:10C0F0000055878787D7F5F5F0E0000000000000C5 +:10C0900000000000000000000F000000550000003C +:10C0A0000F00000014140000222000007D417D419B +:10C0B00042420303AAAAAA280000000000000000D0 +:10C0C0000000000000000000000000000000280048 +:10C0D000AA280000000000EFD3D3C33C0F0F7D411E +:10C0E0003C00300C3C00FF0000000000000000009D +:10C0F0000000FF0000FFF0F0F0F0A00000300000B2 :10C10000000000000000000000000000000000002F -:10C11000000000000000000000000000000000001F -:10C12000000000000000000000000000000000000F -:10C1300000000000000000000000000000000000FF -:10C140000000000000610006000D0000000000007B -:10C15000000000000000000000000000006100017D -:10C160000001000000610007000D00000061000EEA -:10C17000000D00000061000E000D00000000000036 +:10C11000000000000000000000000363033E0C0D5F +:10C1200092C003E3033CCC01C2C000610034C00DE7 +:10C13000000000410036C00D000000000061000753 +:10C14000000D0000000000000000000000000000E2 +:10C15000000000000061303E004D00010061033E20 +:10C160000C0D92C003E3033E0C0DC2C000000000A2 +:10C1700000000000400080000020100200000000CD :10C1800000000000000000000000000000000000AF :10C19000000000000000000000000000000000009F -:10C1A000000000000000000000000000000000008F -:10C1B000000000000000000000000000000000007F -:10C1C000000000000000F7C7F4C4D2FAD2FA000061 -:10C1D0000000000000000000000000000000F0006F -:10C1E000F000C0C0FCC00000000000000000000023 -:10C1F0000000BFAB150100000000D7D7D414000029 +:10C1A0000000000000FF00F0A3FBFFFFF555F000CA +:10C1B000000000000000AA050000000000000000D0 +:10C1C000000000000000000000000000000000006F +:10C1D000000000000000C3C3C3C30050AFFF005500 +:10C1E000055F741400000000000000000000000063 +:10C1F000000000000000000000000000000000003F :10C20000000000000000000000000000000000002E :10C21000000000000000000000000000000000001E -:10C22000000000000000000000000000000000000E -:10C2300000000000000000000000000000000000FE -:10C2400000000000000000003707340450785078E8 -:10C2500000000000000000000000000000000000DE -:10C260003C3C3C3CC0C0FCC00000000000000000A2 -:10C27000000000003F033F0300000000F7F7F43424 +:10C22000000001000000000F0000A0080000F5550C +:10C23000F0000000000000A0AA00000000000000C4 +:10C2400000000000000000000000000000000000EE +:10C250000000000000000000C3F7003400F50AFFF2 +:10C26000147D0FFF7D74000000000000000000003E +:10C2700000000000000000000000000000000000BE :10C2800000000000000000000000000000000000AE :10C29000000000000000000000000000000000009E -:10C2A000000000000000000000000000000000008E -:10C2B000000000000000000000000000000000007E -:10C2C0000000000000000000000000000000B2B20A -:10C2D000C3FF00000000000000000000000000009C -:10C2E0000000D310D310E8F0C0F000000000000000 -:10C2F00000000000000000000000F000000000004E +:10C2A000000000000000000000000000A0ACACAAEC +:10C2B0000000C0C00000000000000000FFD7DFC386 +:10C2C000000000000000000000000000000000006E +:10C2D00000000000000000000000005500018B8BF2 +:10C2E000EBEB00000000747414140C0C0C0C000038 +:10C2F000000000000000000000000000000000003E :10C30000000000000000000000000000000000002D :10C31000000000000000000000000000000000001D -:10C32000000000000000000000000000000000000D -:10C3300000000000000000000000000000000000FD -:10C3400000000000000000000000000000000000ED -:10C35000B2B2003C0000000000000000000000003D -:10C36000000000001010D3D3AAB20030000000007B -:10C37000000000000000000000000000F0003C3C55 -:10C3800000000000000000000000000000000000AD -:10C39000000000000000000000002000000000007D +:10C320000000000000000000000000000000AAACB7 +:10C33000AAAAC000C30000000000000000007FFFA8 +:10C34000FF410000000000000000000000000000AD +:10C3500000000000000000000000000055FF45CF75 +:10C360008B82EB8B000000007D7D74740C0C0C0C38 +:10C3700000000000000000000000000000000000BD +:10C38000000000000000C0000000000000000000ED +:10C39000000000000000000000000000200000007D :10C3A000000000000000000000000000000000008D -:10C3B000000000000000000000000000000000007D -:10C3C000000000000002000000000000000000006B +:10C3B0000000000000000000000000000000C000BD +:10C3C000000000000000000000000000000000006D :10C3D000000000000000000000000000000000005D :10C3E000000000000000000000000000000000004D -:10C3F00000000000000000000000200000004100DC -:10C4000004800480008000000000000000000000A4 -:10C41000000000000000000000000000000000001C -:10C42000000000000000400000000000000040008C -:10C4300000000000000000000000000000000000FC -:10C4400000000000000000000000000000000000EC -:10C4500000000002000000000000000000000000DA +:10C3F000010000000000000000000000000000003C +:10C4000000000000000040000000400000000000AC +:10C41000000000000000000000004000000040009C +:10C4200000000000000040000000000000000000CC +:10C4300000000000000000000000000000002000DC +:10C4400041000000000000000000000000000000AB +:10C4500000000000000000000000000000000000DC :10C4600000000000000000000000000000000000CC -:10C47000000000000000000010000000808200901A -:10C480002000800480040004000000000000000080 -:10C49000000000000000001000000000000000008C -:10C4A0000200000000100210000000000000020066 -:10C4B0000000000000000200000008000000020070 -:10C4C000000000000000021000000000000000005A -:10C4D0000000000000000000000002000200000058 -:10C4E000080002000000000002101000020000001E -:10C4F00000400000000001200200000000000000D9 -:10C500000220020000000000020000000000000005 -:10C51000000000000000000000000000000000001B -:10C520000000000000000000000002000000000009 -:10C5300000000000000000000000000000000000FB +:10C4700000000400000000000000000000000000B8 +:10C48000000000000000000000000000001000009C +:10C490000000040000000000000082000010000006 +:10C4A000000000000000000008000800001000105C +:10C4B00000000000000000000880000000000008EC +:10C4C0000000000900000000000300100000000050 +:10C4D0000000000000000000001000000208001032 +:10C4E0000802020000000000000008000000001028 +:10C4F000008000800000000000000000000000003C +:10C500000000000000000000000000000000000823 +:10C510000000000000000008000000000000000013 +:10C520000000000000000000000000000000000803 +:10C5300000000000000000080000000800000000EB :10C5400000000000000000000000000000000000EB -:10C5500000000000000000000000000000000000DB -:10C5600000000000000000000000000000000000CB -:10C5700000000000000000000401000000000000B6 -:10C58000000000010088000004000000000000001E +:10C5500000100000000800000008008800008001B2 +:10C5600000008011000000000000000080000000BA +:10C57000000000100020000000080000000800007B +:10C5800000000000000000000000000000000000AB :10C59000000000000000000000000000000000009B :10C5A000000000000000000000000000000000008B :10C5B000000000000000000000000000000000007B -:10C5C000000000000000000000000000000000006B -:10C5D000000000000000000000000000000000005B +:10C5C0000000900088000000001000000000000043 +:10C5D00000000000000200040000820004000008C7 :10C5E000000000000000000000000000000000004B -:10C5F000000000000000000000800000008000003B -:10C600000000000000020000000000000000000028 +:10C5F0000000000000000480038005C004A10000CA +:10C6000000000000001000000041004082400000D7 :10C61000000000000000000000000000000000001A :10C62000000000000000000000000000000000000A -:10C6300000000000000000000000000000000000FA -:10C6400000000000000000000000000000000000EA -:10C650000000410000000000000000000000000099 -:10C6600000000000000000000000000000000000CA -:10C6700000000000000000080088004000C000101A -:10C68000000000001100008500A000020000001062 -:10C69000000000000000000000000000000000009A +:10C630000000000040000000000020000000410059 +:10C640000088050040000000000000C0000000005D +:10C6500000A000000300000011000000090080009D +:10C66000000800000000000000100000001005108D +:10C67000008200824182000080208220822180206E +:10C6800000000000410041000000030003014101DF +:10C690000000000000000000000000040000000096 :10C6A000000000000000000000000000000000008A -:10C6B000000000000000000000000000000000007A -:10C6C000000000000000000000000000000000006A -:10C6D000000000000000000000000000000000005A -:10C6E000000000000000000000000000000000004A -:10C6F000000000000000000000000000000000003A -:10C70000050000000000000004000000C000C000A0 +:10C6B0000000080000000000000000001000000062 +:10C6C000100800004000400000008400100000003E +:10C6D0000000000000800000000000008400000056 +:10C6E00000000000000000000000840008000000BE +:10C6F0000000000000000000000002000200040032 +:10C700000400A00000000000000000000000000085 :10C710000000000000000000000000000000000019 :10C720000000000000000000000000000000000009 -:10C7300000000000000000000000000000000000F9 -:10C7400000000000000000000000000000000000E9 -:10C7500000000000000000000000000000000000D9 -:10C7600000000000000000000000000000000000C9 -:10C770000200000000000000000000000020400057 -:10C7800000200800000000000000800000C0000041 -:10C790000000000000000000000000000000000099 +:10C7300000000000000000000000000800000000F1 +:10C740000000000100C08000808400A000C0419073 +:10C750001000000000000020030010000000000096 +:10C760000000000000004100000000000000000088 +:10C77000000000000000000000000000800080C0F9 +:10C7800080008000000000000000000000000000A9 +:10C790000002000000000000000000000000000097 :10C7A0000000000000000000000000000000000089 -:10C7B0000000000000000000000000000000000079 -:10C7C0000000000000000000000008000000000061 -:10C7D000C000000000000000000000000000000099 -:10C7E0000000000000000000000000000000000049 -:10C7F0000000000000000000000000000000000039 -:10C8000002000041080000410041C000402100003A -:10C8100000000000000800000000080008000800F8 -:10C820000000000000000000000000000000000008 -:10C8300000000000000000000000000000000000F8 -:10C8400000000000000000000000000000000000E8 -:10C8500000000000000000000000000000000000D8 -:10C860000000000000C00000000000000000000008 -:10C87000000800000000000000080008000800A0F8 -:10C88000001080000000A00000C000080000800828 -:10C89000050800100010000000000000000000006B +:10C7B0000000000000000000000000000000908069 +:10C7C000010000C000000000000010000000000098 +:10C7D0001000100000000000040010200480000081 +:10C7E0008404C00004000011000500008400000063 +:10C7F000080000008400000000800000000004A089 +:10C8000090A001000340A000A000C00000100200A2 +:10C810008200820082000000000000000000000092 +:10C8200000000000000000000000000000200000E8 +:10C830000000000000000084000000000000000074 +:10C84000002004040020000003000900000000880C +:10C85000009000000500000009000000000080209A +:10C860000000000000008000040000000000000044 +:10C870000000031005A005000084001000C0210086 +:10C88000804100210400820100000000000000003F +:10C890008300000000000300000000000000000012 :10C8A0000000000000000000000000000000000088 :10C8B0000000000000000000000000000000000078 -:10C8C0000000000000000000000000000000000068 -:10C8D0000000000000000000000000000000000058 -:10C8E0000000000000000000000000000000000048 -:10C8F0000000000000000000000000000000000038 -:10C900000000900000000000000040030200000052 -:10C91000412100410021001000080000000000003B -:10C920000000000000000000000000000000000007 -:10C9300000000000000000000000000000000000F7 -:10C9400000000000000000000000000000000000E7 -:10C9500000000000000000000000000000000000D7 -:10C9600000000000000000000000000000000000C7 -:10C9700000000000000000000000000000000000B7 -:10C980000000000000000000000000000000009017 -:10C990000010C008000000000000000000000000BF +:10C8C0000011000000000008018085C10000002167 +:10C8D0000000000000000010000000000100000047 +:10C8E0000008000000000000000400000000C0007C +:10C8F00000000000011001008480C0004000000022 +:10C9000000000411040200210005001000100000C6 +:10C910000021820002000000000000000000000072 +:10C9200000000000000000000000000800000000FF +:10C93000000000000000000000000082000000086D +:10C94000058400000000000000001008100205002F +:10C9500000080000000003000001000003000400C4 +:10C96000030003002000000003000000000000009E +:10C97000000000000000040004000020000080000F +:10C9800000000000800080010000000000000000A6 +:10C990000000000000008000000000000000000017 :10C9A0000000000000000000000000000000000087 :10C9B0000000000000000000000000000000000077 -:10C9C0000000000000000000000000000000000067 -:10C9D0000000000000000000000000000000000057 -:10C9E0000000000000000000000000000000000047 -:10C9F0000000000000000000000000000000000037 -:10CA00000000000000001000000000000400000012 -:10CA100001000900000004040402000208100000E4 +:10C9C00000000000000000000000000000008900DE +:10C9D000900000000000000000000000000010A017 +:10C9E00000880000084008C000900090201000005F +:10C9F000010084000000000000000000000088002A +:10CA0000000000C1002009C11004008988910000C5 +:10CA10000000000000000002000000C00000000054 :10CA20000000000000000000000000000000000006 :10CA300000000000000000000000000000000000F6 :10CA400000000000000000000000000000000000E6 -:10CA500000000000000000000000000000000000D6 -:10CA600000000000000000000000000000000000C6 -:10CA700000000000000000000000000000000000B6 -:10CA80000000000000000000800000000000000026 -:10CA900000000800C100000000058080008080C008 +:10CA500008000000000000000000000000000000CE +:10CA600000800000000080000080000000000080C6 +:10CA70000000040080000000000000000000000032 +:10CA800000000000004000009089800900030011B0 +:10CA90000000000000000000008000000000000016 :10CAA0000000000000000000000000000000000086 :10CAB0000000000000000000000000000000000076 -:10CAC0000000000000000000000000000000000066 -:10CAD0000000000000000000000000000000000056 -:10CAE0000000000000000000000000000000000046 -:10CAF0000000000000000000000000000000000036 -:10CB000000000000000000000000800000000000A5 -:10CB10008000850009008300A100040021000000BE -:10CB20000300000000000000000000000000000002 +:10CAC00000000000000000000000000000000080E6 +:10CAD00010000000200041030000800000008000E2 +:10CAE0000000800000418004000080000010808071 +:10CAF0000000000000000000800000000080000036 +:10CB00000000008000418000802000808021000023 +:10CB10008010000000000000000000008080000085 +:10CB20000000000000000000000000000000000005 :10CB300000000000000000000000000000000000F5 -:10CB400000000000000000000000000000000000E5 -:10CB500000000000000000000000000000000000D5 -:10CB600000000000000000000000000000000000C5 -:10CB700000000000000000000000000000000000B5 -:10CB80000000000000000000000000000800040099 -:10CB9000A00008000200C0008400A1840100010080 -:10CBA0000000010000000000000000000000000084 +:10CB400000000000000000000000000000100000D5 +:10CB500000080000000000000101900004009000A7 +:10CB60000800000010000000A0401000A0002001FC +:10CB7000A0840008000088000000C0A0000000C0E1 +:10CB80000000009002021001A02008000208080026 +:10CB90000888C000000000000000000000008208BB +:10CBA0000000008400000000000000000000000001 :10CBB0000000000000000000000000000000000075 :10CBC0000000000000000000000000000000000065 -:10CBD0000000000000000000000000000000000055 -:10CBE0000000000000000000000000000000000045 -:10CBF0000000000000000000000000000000000035 -:10CC00000000000000000000000000000000001014 -:10CC10000010001000A00000000000010100100240 -:10CC2000000800891004000000000000000000005F +:10CBD0000200000000010000000000010000000051 +:10CBE00000000000000040880008004002889020FB +:10CBF00000104084039000010001000000010000CB +:10CC0000000004000000001001080010A01004083B +:10CC10000140200402C000000000000000000002EB +:10CC20000000404000000000000000000000000084 :10CC300000000000000000000000000000000000F4 :10CC400000000000000000000000000000000000E4 -:10CC500000000000000000000000000000000000D4 -:10CC600000000000000000000000000000000000C4 -:10CC700000000000000000000000000000000000B4 -:10CC800000000000000000000000000000000000A4 -:10CC90000080008000800080000900040020400225 -:10CCA000808500800020008000000000000000005F +:10CC50000000000000000009002000080041000062 +:10CC60000000000000000000000000000000800044 +:10CC700000000080008089000008000800000041DA +:10CC8000000000008000000000800980008080001B +:10CC90008000090004008080000000000000000007 +:10CCA0000080000080800000000000000000000004 :10CCB0000000000000000000000000000000000074 :10CCC0000000000000000000000000000000000064 -:10CCD0000000000000000000000000000000000054 -:10CCE0000000000000000000000000000000000044 -:10CCF0000000000000000000000000000000000034 -:10CD00000000000000000000000000000000000023 -:10CD100000000000004000000000000400C000808F -:10CD20000040050020040000000200000000000098 +:10CCD000000000090000000008000410210003000B +:10CCE00000000080000000000000000000908000B4 +:10CCF0000000804080A000008000000000000000D4 +:10CD0000000000000008000000002100A08010804A +:10CD10000500A1400885910000000000000000000F +:10CD200000000040000000000000000000000000C3 :10CD300000000000000000000000000000000000F3 :10CD400000000000000000000000000000000000E3 -:10CD500000000000000000000000000000000000D3 -:10CD600000000000000000000000000000000000C3 -:10CD700000000000000000000000000000000000B3 -:10CD800000000000000000000000000000000000A3 -:10CD900000000000000000050000000000A100836A -:10CDA000004000010000010100000001000000003F +:10CD500000000000000000000000010000010100D0 +:10CD60000100000000C00020000000008800200337 +:10CD700010408800020020A090880200000000847B +:10CD800000A0000000000000000000002100A01032 +:10CD9000A1084000C100032041082000000000005D +:10CDA00000000000000104000082400000000000BC :10CDB0000000000000000000000000000000000073 :10CDC0000000000000000000000000000000000063 -:10CDD0000000000000000000000000000000000053 -:10CDE0000000000000000000000000000000000043 -:10CDF0000000000000000000000000000000000033 -:10CE00000000000000000000000000000000000022 -:10CE1000000000000000000000000700000000000B -:10CE200000E007000081500000E007000000000063 +:10CDD0000000000000000000430000000000000010 +:10CDE00000000000000000000000410000000006FC +:10CDF000000043000000002100004300000000008C +:10CE0000000000000000000000004300600000007F +:10CE1000000000006000002100004300000000004E +:10CE20000000000000000000000000000000000002 :10CE300000000000000000000000000000000000F2 :10CE400000000000000000000000000000000000E2 :10CE500000000000000000000000000000000000D2 :10CE600000000000000000000000000000000000C2 -:10CE700000000000000000000000000000000000B2 +:10CE70008B9B00DB001F1B3FC2C202029999C3C3F8 :10CE800000000000000000000000000000000000A2 -:10CE900000000000000000000000000024BF009916 -:10CEA0000000000000000000000000000F090F2D2E +:10CE9000C0C0BDBD46EF0267FC0C6F6F6C6CFF0F2E +:10CEA00000000000000000003CC33CC33CC33CC386 :10CEB0000000000000000000000000000000000072 :10CEC0000000000000000000000000000000000062 :10CED0000000000000000000000000000000000052 :10CEE0000000000000000000000000000000000042 -:10CEF0000000000000000000000000000000000032 -:10CF00000000000000000000000000000000000021 -:10CF1000000000000000000000000000000064FFAE -:10CF20000099000000000000000000000000060062 -:10CF30001E3C000000000000000000000000000097 +:10CEF00000008FBF00FF1F1F1B3FC3C600060F0FA0 +:10CF000000FF000000000000000000000000000022 +:10CF100000003C00000046EF0267FC0C60606C6C97 +:10CF2000F00000000000000000003CC33CC33CC314 +:10CF30003CC30000000000000000000000000000F2 :10CF400000000000000000000000000000000000E1 :10CF500000000000000000000000000000000000D1 :10CF600000000000000000000000000000000000C1 @@ -163109,488 +163109,488 @@ :10CFC0000000000000000000000000000000000061 :10CFD0000000000000000000000000000000000051 :10CFE0000000000000000000000000000000000041 -:10CFF0000000000000000000000000000000000031 -:10D000000000000000000000000000000000000020 -:10D010000000000000000000000000000000000010 -:10D0200000000CFC046400000000242D0009C3C3B0 -:10D0300042D20000000000000000000000000000DC +:10CFF0003CFF3CFF0000FFFF3C7EFF66FF7E00FF22 +:10D000006F186666666600000000F0F06060000061 +:10D010000000000000002C2C2C2C099F099F0F0FF2 +:10D0200000FF9F9F24BD0000000000000000F0F002 +:10D030000F0F0F0F0F0F0000000000000000000096 :10D0400000000000000000000000000000000000E0 :10D0500000000000000000000000000000000000D0 :10D0600000000000000000000000000000000000C0 -:10D0700000000000000000000000000000000000B0 -:10D0800000000000000000000000000000000000A0 -:10D090000000000000000000000000000000000090 -:10D0A000000000000CFC046400000000BDBD999964 -:10D0B00000F042D20000000000000000000000006C +:10D070000000002700030000FFFF0066FF00FF3CE8 +:10D08000000066183F3C3F3C000000006060F0F08C +:10D0900000000000000000002C2C2C2C099F081C14 +:10D0A0003C3C6666060624BD00000000000000004F +:10D0B000F0F00F0FF0F0F0F00000000000000000B2 :10D0C0000000000000000000000000000000000060 :10D0D0000000000000000000000000000000000050 -:10D0E0000000000000000000000000000000000040 -:10D0F0000000000000000000000000000000000030 -:10D10000000000000000000000000000000000001F -:10D11000000000000000000000000000000000000F -:10D12000000000000008000000010061000F000581 -:10D13000000000610008C0010000000000000000C5 +:10D0E00000000A08050000A000610006000D000015 +:10D0F00000000000000000000000000000380000F8 +:10D100000000000050380000000000610006000D23 +:10D11000000500000A08050000A000610006000DDF +:10D1200000011061203E004D0008000000000000DA +:10D1300000004000800000201002000000000000FD :10D1400000000000000000000000000000000000DF :10D1500000000000000000000000000000000000CF -:10D1600000000000000000000000000000000000BF -:10D1700000000000000000000000000000000000AF +:10D1600000000000000000000000000C000CAAFFFE +:10D17000003C000000000000000000000000000073 :10D18000000000000000000000000000000000009F -:10D19000000000000000000000000000000000008F -:10D1A000000000000000000000000000000000007F -:10D1B00010FB00000000FF003CFF3CFF00000000EF +:10D19000C2C2C1C100000000000000000901080077 +:10D1A00000000000AFFF0AFF0000000000000000C8 +:10D1B000000000000000000000000000000000006F :10D1C000000000000000000000000000000000005F :10D1D000000000000000000000000000000000004F -:10D1E000000000000000000000000000000000003F -:10D1F000000000000000000000000000000000002F +:10D1E0000000000000000000000000000303000039 +:10D1F000A000283C0000000000000000000000002B :10D20000000000000000000000000000000000001E -:10D21000000000000000000000000000000000000E -:10D2200000000000000000000000000000000000FE -:10D230000000D0F800000000FF003CFF3CFF0000B1 +:10D21000000083834343000000000000000008007A +:10D2200008000000000000AF000A0000000000003D +:10D2300000000000000000000000000000000000EE :10D2400000000000000000000000000000000000DE :10D2500000000000000000000000000000000000CE :10D2600000000000000000000000000000000000BE -:10D2700000000000000000000000000000000000AE +:10D270000000C30000C30000000000000000000028 :10D28000000000000000000000000000000000009E :10D29000000000000000000000000000000000008E -:10D2A000000000000000000000000000000000007E -:10D2B0000000000014BE141400003C3CF0F0F4F434 +:10D2A000A0A0A0A00000000074FC0000000000008E +:10D2B000000000000000000000000000000000006E :10D2C000000000000000000000000000000000005E :10D2D000000000000000000000000000000000004E :10D2E000000000000000000000000000000000003E -:10D2F000000000000000000000000000000000002E +:10D2F00000000000C30000C30000000000000000A8 :10D30000000000000000000000000000000000001D :10D31000000000000000000000000000000000000D -:10D3200000000000000000000000000000000000FD -:10D3300000000000000050FA505000003C3CF0F0AB -:10D34000F4F40000000000000000000000000000F5 -:10D3500000000000000000000004000000000000C9 -:10D3600000000000000000000000000000000000BD -:10D3700000000000000000000000000000000000AD -:10D380000002000200000000000000000000000099 -:10D390000000C000000000000000000000000000CD -:10D3A000000000000080000000004080000000003D -:10D3B0000000200000002000050020000000000008 -:10D3C00000000000400000000000000000000040DD -:10D3D000000200000000000000000000000000400B -:10D3E00000020004400000000000000000000000F7 -:10D3F000000000000000000000000000000000002D -:10D4000040000004000000000000000000000000D8 -:10D41000000000020000000000000000000000000A -:10D420000000400400040002000000008002000030 -:10D4300000000000000000028000200080000000CA -:10D4400000000004000400000000000000000000D4 -:10D4500000000010000000000000000000000000BC -:10D4600000000000000000000000000000000000BC -:10D470000000001000000200000000100200020086 -:10D48000000000000000000000000000000002009A -:10D49000000000000000020000000000001000007A -:10D4A000000000000000000001000000001040002B -:10D4B000020002000040080001000000000000001F -:10D4C0000000000000000000000800000000000054 +:10D320000000A0A0A0A000000000FFFF74FC00000F +:10D3300000000000000000000000000000000000ED +:10D3400000000000000000000000000000000000DD +:10D3500000000000000000000000000000000000CD +:10D3600000000000000002000000000001000000BA +:10D370000000000000000200200000000800000083 +:10D380000400000100000000200000000000000078 +:10D39000000000000000000000000000000000008D +:10D3A000000000000000000000000000000000007D +:10D3B000000000000000000000000000000000006D +:10D3C000000000000000000000000000000000005D +:10D3D000000000004000000000000000000000000D +:10D3E0000000000400000000800021000000080090 +:10D3F00000000000000000008000800000008300AA +:10D400000000800400000000000000000000000098 +:10D41000000000000000000000000000000000000C +:10D4200000000000000000000000000000000000FC +:10D4300000000000000000000000000000000000EC +:10D4400000000000000000000000000000000000DC +:10D4500000000010020000000000020000000000B8 +:10D460000000000000101000040000040040000450 +:10D470000010001000800000008000000004000088 +:10D480000000000000800003000000000000000019 +:10D49000020000000000000000000000000000008A +:10D4A000000000000000000000000000000000007C +:10D4B000000000000000000000000000000000006C +:10D4C000000000000000000000000000000000005C :10D4D000000000000000000000000000000000004C -:10D4E0000000000000000000000800000000000034 -:10D4F000000000000000000000000000000000002C -:10D500000000000000000000000000080000000013 -:10D51000000000000000000000000000000000000B -:10D5200000000400000000000000401000000000A7 -:10D530008000000000000000000020000400040043 +:10D4E00000000084000000008000800000010011A6 +:10D4F0000001000100000004000000100000000115 +:10D5000000000000000000200000000000000000FB +:10D510000000800800000000001000000000000073 +:10D5200020100000000000000000000000C000000B +:10D5300000000008000000000000000000080008D3 :10D5400000000000000000000000000000000000DB -:10D5500000000000000000000000000000000000CB -:10D5600000000000000000000000040000000000B7 -:10D5700000000000000000000000000000000000AB -:10D58000000000000000000000000000000000009B -:10D590000000000000000000000004000000000087 -:10D5A000000000000000000000000000000000007B -:10D5B000000000000000000000000000200000004B +:10D5500000000000000000030000000000000000C8 +:10D560000000000000000000010000030005902101 +:10D570004000000200058402000004000184044011 +:10D58000040800400810C121000000000103000849 +:10D590002004000000100000009001800000000046 +:10D5A00040050800000008040000C0000000000062 +:10D5B0000800000001000000A000000000000000C2 :10D5C000000000000000000000000000000000005B :10D5D000000000000000000000000000000000004B -:10D5E000000000000000000000000000000000003B -:10D5F000000000000000000000000000000000002B -:10D60000000000000000000000000000000000001A -:10D61000000000000000000000000000000000000A -:10D6200000000000000000000000000000000000FA -:10D6300000000000000000000000000000002000CA -:10D6400000000008000000000000002000000000B2 +:10D5E000000000000000000000002000000000001B +:10D5F00000000000000003002100000080A02021A6 +:10D600008001C0040000800102000000000004004E +:10D6100010008300410200000000001004044000DC +:10D62000000008000800000003004000080000009F +:10D63000000040000000201000000000001000006A +:10D64000000000C00000000000000000000000001A :10D6500000000000000000000000000000000000CA -:10D6600000000000000000000000000000000000BA -:10D6700000000000000000000000000000000000AA -:10D68000000000000010000000000000000000008A -:10D69000000000000000000000000000000000008A -:10D6A000000000000000000000000000000000007A +:10D6600000000000010008000200000002000000AD +:10D6700088000000000000000005401000000000CD +:10D680000100A011000400000000820085000000DD +:10D690000000000020000000A000A0210000A00069 +:10D6A00000000000000000000020202020202000BA :10D6B000000000000000000000000000000000006A :10D6C000000000000000000000000000000000005A :10D6D000000000000000000000000000000000004A -:10D6E000000000000000000000000000000000003A -:10D6F000000000000000000000000000000000002A -:10D700000000000000000000000000000000000019 -:10D710000000000000000000000000000000000009 -:10D7200000000000000000000000000000000000F9 -:10D7300000000000000000000000000000002000C9 +:10D6E0000000000800000800800080A0000080000A +:10D6F00000000000000000000000008480010084A1 +:10D7000000002000000000010500000400000200ED +:10D710000000000021008000000000000000040064 +:10D7200010000000000000000000000180018001E6 +:10D730008000000000000000000000000000000069 :10D7400000000000000000000000000000000000D9 -:10D7500000000000000000000000000000000000C9 -:10D7600000000000000000000000000000000000B9 -:10D7700000000000000000000000000000000000A9 -:10D780000000000000000000000000000000000099 -:10D790000000000000000000000000000000000089 -:10D7A0000000000000000000000000000000000079 -:10D7B0000000000000000000000000000000000069 -:10D7C0000000000000000000000000000000000059 -:10D7D0000000000500000000000000000000000044 -:10D7E0000000000000000000000000000000000039 -:10D7F0000000000000000000000000000000000029 -:10D800000000000000000000000000000000000018 -:10D810000000000000000000000000000000000008 -:10D8200000000000000000000000000000000000F8 -:10D8300000000000000000000000000000000000E8 -:10D8400000080000000000000000001000000000C0 -:10D850000000000000840000000000000000000044 -:10D8600000000000000000000000000000000000B8 -:10D8700000000000000000000000000000000000A8 -:10D880000000000000000000000000000000000098 -:10D890000000000000000000000000000000000088 -:10D8A0000000000000000000000000000000000078 -:10D8B0000000000000000000000000000000000068 +:10D750000000000000000000400000000000000089 +:10D76000000800000021000000000000202104004B +:10D7700002008800000000040002822100A1900243 +:10D7800008050000210002042089C0000000822159 +:10D790000280000000000000C020C1000002000064 +:10D7A00000001020400000114000A0000000000018 +:10D7B000880000000000C000400000000000008061 +:10D7C0000100010000000000000000000000000057 +:10D7D0000000000000000000000000000000000049 +:10D7E00000000000000000000000000000008000B9 +:10D7F0008000800000000000000100000000000424 +:10D80000000080000000A08880048004000021C087 +:10D8100000008520000000044190008520000900E0 +:10D8200005000500200511000008000800000000A8 +:10D83000000041000000000000C0050000000004DE +:10D840000004201020100000000000000000000074 +:10D8500000000000000000030000000000080000BD +:10D860000000000000000000000000000000002197 +:10D8700000000021000800030021100900800008BA +:10D880008441402101080000208400800104C0215F +:10D89000110400108420000090001100900021006D +:10D8A00000000009001020000000000082100000AD +:10D8B00000000000001001800000000008000000CF :10D8C0000000000000000000000000000000000058 -:10D8D0000000000400000000000000000000000044 -:10D8E0000000000000000000000000000000000038 -:10D8F0000000000000000000000000000000000028 -:10D900000000000000000000000000000000000017 -:10D910000000000000000000000000000000000007 -:10D9200000000000000000000000000000000000F7 -:10D9300000000000000000000000000000000000E7 +:10D8D0000000000000000000000000000000050043 +:10D8E00000000000410005000500000000000000ED +:10D8F00000000000000000000082000000000002A4 +:10D900000082000080002000000089050010200136 +:10D9100041000800000100010000000004000000B8 +:10D9200084000000000000018000000000004100B1 +:10D9300000000000000000000404000000000000DF :10D9400000000000000000000000000000000000D7 :10D9500000000000000000000000000000000000C7 -:10D9600000000000000000000000000000000000B7 -:10D9700000000000000000000000000000000000A7 -:10D980000000000000000000000000000000000097 -:10D990000000000000000000000000000000000087 -:10D9A0000000000000000000000000000000000077 -:10D9B0000000000000000000000000000000000067 -:10D9C0000401000000000000000000000100000051 -:10D9D0004101000100000000000000000000000004 -:10D9E0000000000000000000000000000000000037 -:10D9F0000000000000000000000000000000000027 -:10DA00000000000000000000000000000000000016 -:10DA10000000000000000000000000000000000006 -:10DA200000000000000000000000000000000000F6 -:10DA300000000000000000000000000000000004E2 -:10DA40000000000200000000000000000000400490 -:10DA50001111C020000200000000000000000000C2 -:10DA600000000000000000000000000000000000B6 -:10DA700000000000000000000000000000000000A6 -:10DA80000000000000000000000000000000000096 -:10DA90000000000000000000000000000000000086 -:10DAA0000000000000000000000000000000000076 -:10DAB0000000000000000000000000000000000066 -:10DAC0000000000000000000000000000000000056 -:10DAD00010000400410002410000000000000000AE +:10D9600000000000000000000000089000C000025D +:10D970001010C1C0894000088240C0C0018202A0CE +:10D98000021010C000100020081041A001048800FF +:10D99000080890C000900090C000000041400121A4 +:10D9A000828420822090A0040488C04000000000EF +:10D9B00000000000000000009000000000000000D7 +:10D9C0000000000000000000000000000000000057 +:10D9D0000000000000000000000000000000000047 +:10D9E00000000000000000000000000080000000B7 +:10D9F000000080808880898000808080118008807D +:10DA0000808000800090001000058009A09120888F +:10DA100000090009008000000000800000009085DF +:10DA20000310408300052000C180C08080000000FA +:10DA30000000000000000000000080000000000066 +:10DA400000000000000000000000080000000000CE +:10DA500000000000000000000000000000000000C6 +:10DA60000000000000000000000000000000800036 +:10DA7000000000008000888009091111410309009D +:10DA800021C191A0C100100009000500A020840060 +:10DA9000A110020903000000800580008000000042 +:10DAA00041002121A00800021000202182A1034191 +:10DAB0000000000000000000100020000000100026 +:10DAC0000000000000000000000300000040000013 +:10DAD0000000000000000000000000000000000046 :10DAE0000000000000000000000000000000000036 -:10DAF0000000000000000000000000000000000026 -:10DB00000000000000000000000000000000000015 -:10DB10000000000000000000000000000000000005 -:10DB200000000000000000000000000000000000F5 -:10DB300000000000000000000000000000000000E5 -:10DB400000000000000000000000000000000000D5 -:10DB500000000000000000000101000000000000C3 +:10DAF000880002009000080009400100018901012E +:10DB00002000040208A009081010200004000800EA +:10DB10000810044188050420900004000288900049 +:10DB20000000902021008508822001080800A10340 +:10DB30000101000000000000000000A001820000C0 +:10DB40000140000000000000000000000000000094 +:10DB500000000000000000000000000000000000C5 :10DB600000000000000000000000000000000000B5 -:10DB700000000000000000000000000000000000A5 -:10DB80000000000000000000000000000000000095 -:10DB90000000000000000000000000000000000085 -:10DBA0000000000000000000000000000000000075 -:10DBB0000000000000000000000000000000000065 -:10DBC0000000000000000001000000010000000053 -:10DBD0000000000000000001010101010000000040 +:10DB70000000C002000200081010888800200090F9 +:10DB80000391881000900085A084201000040003F9 +:10DB90004088C0910190038541080002A0840008DC +:10DBA0000120000090900021A084A1832090000516 +:10DBB0000021A0C100000000000000000001900052 +:10DBC0000401000000000000000000000000400010 +:10DBD0000000000000000000000000000000000045 :10DBE0000000000000000000000000000000000035 -:10DBF0000000000000000000000000000000000025 -:10DC00000000000000000000000000000000000014 -:10DC10000000000000000000000000000000000004 -:10DC200000000000000000000000000000000000F4 -:10DC300000000000000000000000000000000000E4 -:10DC400000000000000000000008040000040000C4 -:10DC50000000000000000004210205204002000036 +:10DBF0000000000080000000008000008090008095 +:10DC0000008989C10090000900909011000009006E +:10DC100003A100808408118305A191080080800081 +:10DC200000000900000000411108208920080000C0 +:10DC30000090002100820000000000000000404031 +:10DC400080218008000800000000000000000000A3 +:10DC50000000000040000000000000000000000084 :10DC600000000000000000000000000000000000B4 -:10DC700000000000000000000000000000000000A4 -:10DC80000000000000000000000000000000000094 -:10DC90000000000000000000000000000000000084 -:10DCA0000000000000000000000000000000000074 -:10DCB0000000000000000000000000000000000064 -:10DCC0000000000000000000000000000000000054 -:10DCD000000000000000000000C009000400024134 +:10DC7000000000000000000000800000000089900B +:10DC800091214180111100808000800080401000AF +:10DC9000098005000909A1C00809A0008021000829 +:10DCA000808000008000000020219005410010418C +:10DCB000038820C0C1002010000000000000000008 +:10DCC0000888100808000808000000000000000094 +:10DCD0000000000000000000000000000000000044 :10DCE0000000000000000000000000000000000034 -:10DCF0000000000000000000000000000000000024 -:10DD00000000000000000000000000000000000013 -:10DD10000000000000000000000000000000000003 -:10DD200000000000000000000000000000000000F3 -:10DD300000000000000000000000000000000000E3 -:10DD400000000000000000000000000000000000D3 -:10DD500000000000000000000000001100000100B1 -:10DD600001010000000000000000000000000000B1 +:10DCF0000000000000000000000000A00020000064 +:10DD00001188890102849101888808101088A00177 +:10DD1000001000A000080000C1C1119041081001CE +:10DD2000A00082A02020100000002111830820A064 +:10DD3000830100C120A0100090000000000000003E +:10DD400000000121010001000000000000000000AF +:10DD500000000000000000000000000000000000C3 +:10DD600000000000000000000000000000000000B3 :10DD700000000000000000000000000000000000A3 -:10DD80000000000000000000000000000000000093 -:10DD90000000000000000000000000000000000083 -:10DDA0000000000000000000000000000000000073 -:10DDB0000000000000000000000000000000000063 -:10DDC0000000000000000000000000000000000053 -:10DDD000000000000000000000000000000000E063 -:10DDE0000000000A00000000000000000000000029 +:10DD80004200884100C843008100000000E04300D9 +:10DD90000000410000C800000000600000C843000F +:10DDA000840000810000430000210000484200C8B8 +:10DDB00043000012500A00C8430042060000000061 +:10DDC00000000000600000C84300000000000000E8 +:10DDD00000000000600000C800000000000000001B +:10DDE0000000000000000000000000000000000033 :10DDF0000000000000000000000000000000000023 -:10DE00000000000000000000000000000000000012 -:10DE10000000000000000000000000000000000002 -:10DE200000000000000000000000000000000000F2 -:10DE300000000000000000000000000000000000E2 +:10DE00004141515100C3FFFF00F020D00000B0B0ED +:10DE100000000000000000008080D58000001D1D73 +:10DE20003010FFFF000C00FC1F000F00000000007E +:10DE3000FFFFF402108F50005000FDFB04000000B3 :10DE400000000000000000000000000000000000D2 :10DE500000000000000000000000000000000000C2 :10DE600000000000000000000000000000000000B2 :10DE700000000000000000000000000000000000A2 -:10DE80000000000000000000000000000000000092 -:10DE90000000000000000000000000000000000082 -:10DEA0000000000000000000000000000000000072 -:10DEB0000000000000000000000000000000000062 +:10DE8000000055415555B0B03C3C00F000F000009A +:10DE9000B0F00010000000000000FFC3FFC300FF4F +:10DEA00000000000FFFD00AF00AFFF00FF0000001A +:10DEB000000038FFFC02708F50145014BFFF450063 :10DEC0000000000000000000000000000000000052 :10DED0000000000000000000000000000000000042 :10DEE0000000000000000000000000000000000032 :10DEF0000000000000000000000000000000000022 -:10DF00000000000000000000000000000000000011 -:10DF10000000000000000000000000000000000001 -:10DF200000000000000000000000000000000000F1 -:10DF300000000000000000000000000000000000E1 -:10DF400000000000000000000000000000000000D1 +:10DF00002C006D008282820255003C1C3C3C3C3C53 +:10DF10000014000C020082000C0CAAC33C14341440 +:10DF20004100410041C341C30F00000FEBEB010072 +:10DF300000005D7F557D4E4EB1B10055000F5F551D +:10DF40005F5500000000000000000000000000001D :10DF500000000000000000000000000000000000C1 :10DF600000000000000000000000000000000000B1 :10DF700000000000000000000000000000000000A1 -:10DF80000000000000000000000000000000000091 -:10DF90000000000000000000000000000000000081 -:10DFA0000000000000000000000000000000000071 -:10DFB0000000000000000000000000000000000061 -:10DFC0000000000000000000000000000000000051 +:10DF80000000450045000A0A0A0A55003C1400003A +:10DF9000000000000000020283820000AAC3FCD738 +:10DFA000F4D71400000055FF50F00F00000FFBFFE6 +:10DFB000000000008200A200D84E27330F000C00A2 +:10DFC0005F555F55000000000000000000000000E9 :10DFD0000000000000000000000000000000000041 :10DFE0000000000000000000000000000000000031 :10DFF0000000000000000000000000000000000021 -:10E000000000000000000000000000000000000010 -:10E010000000000000000000000000000000000000 -:10E0200000000000000000000000000000000000F0 -:10E0300000000000000000000000000000000000E0 -:10E0400000000000000000000000000000000000D0 -:10E0500000000000000000610006000D000000004C -:10E06000000000000000006100010001000000004D +:10E00000000000000000000000100000006050341C +:10E01000C000000180602006000500000061500083 +:10E02000C0090000A5610A0CC50900A0800050309D +:10E030000000000000000061003FC001000080619E +:10E04000003FC099000000000000000000000561D2 +:10E050000A0CC50100A000000000000000000061E3 +:10E060000007C00D000000000000000000000000DC :10E0700000000000000000000000000000000000A0 -:10E080000000000000000000000000000000000090 -:10E090000000000000000000000000000000000080 -:10E0A0000000000000000000000000000000000070 -:10E0B0000000000000000000000000000000000060 -:10E0C0000000000000000000000000000000000050 -:10E0D000000000000000000000000000F0F0F5F576 -:10E0E0000000000000000000F000F000B0B0F1B04F +:10E0800000000000000000000000000000000B0481 +:10E090000F0000003C0000000000CFFCCFFCC0C01F +:10E0A0004404FF00FF00FFFF0500C0C000C30000E4 +:10E0B000000000000000000082C0FBF0BEFEFFFF79 +:10E0C000553C0000FFF0FFFA0000000000000000D7 +:10E0D000FD01D414AA30ACAC000000000000000028 +:10E0E0000000000000000000000000000000000030 :10E0F0000000000000000000000000000000000020 :10E10000000000000000000000000000000000000F -:10E1100000000000000000000000000000000000FF -:10E1200000000000000000000000000000000000EF -:10E1300000000000000000000000000000000000DF -:10E1400000000000000000000000000000000000CF -:10E150000000000000000000000000000000F0F0DF -:10E16000F5F50000000000000000FC0CFC0C8080B5 -:10E17000FD80000000000000000000000000000022 +:10E110000F000F003C3C003C000000000CD7CF1467 +:10E12000C0C00406FF00FF00FFFF05005555555510 +:10E1300000000000000000000000BAF0FBF0AAFAA6 +:10E14000FFFF0FFF0000FF00FFAA0000000000001B +:10E150000000FD01D414AA30ACAC000000000000A7 +:10E1600000000000000000000000000000000000AF +:10E17000000000000000000000000000000000009F :10E18000000000000000000000000000000000008F -:10E19000000000000000000000000000000000007F -:10E1A000000000000000000000000000000000006F -:10E1B000000000000000000000000000000000005F -:10E1C000000000000000000000000000000000004F -:10E1D0000000000000000000000000000F0F0F0F03 -:10E1E000000000000000000000000000FF30757516 -:10E1F000C0C3C5C300000000000000000000000014 +:10E190000000000000001C1C201C000000007D7D11 +:10E1A00050FA004000005560553CF5A0F5A05F5FB7 +:10E1B0000A0A000000000000000000000F0307072B +:10E1C000AFBFAFBF00000000FF43D0400000000021 +:10E1D0000000000000000000E1E1FBFB0000000087 +:10E1E000000000000000000000000000000000002F +:10E1F000000000000000000000000000000000001F :10E20000000000000000000000000000000000000E -:10E2100000000000000000000000000000000000FE -:10E2200000000000000000000000000000000000EE -:10E2300000000000000000000000000000000000DE -:10E2400000000000000000000000000000000000CE -:10E250000000000000000000000000000000FFFFC0 -:10E260000F0F000000000000000000000000003060 -:10E2700020200003555300000000000000000000B3 -:10E28000000000000000000000000000000000008E -:10E29000000000000000000000000000000000007E -:10E2A000000000004000000000000000000000002E -:10E2B000000000000000400000000000000000001E -:10E2C000000000001000000000000000000000003E -:10E2D0000000000000008800200000000000000096 -:10E2E00000000000400000000000000040000000AE -:10E2F0000000000088001000200000000000000066 -:10E3000000000000000000000040000000000000CD -:10E31000400000000000000040000000000000007D -:10E3200000000000000000400000000000000000AD -:10E3300000000000000000000000000000000000DD +:10E2100000000000000000002020003C0000000082 +:10E22000282850FA000080008A699029550055413D +:10E230000A820A82000000000000000000000C00BA +:10E2400007070F3F0F3F00000000FF7FD050000086 +:10E2500000000000000000000000A0A0101000005E +:10E2600000000000000000000000000000000000AE +:10E270000000000000000000000000000000880016 +:10E28000000000000000000000002000C0000000AE +:10E290001000000000000400000001000400040061 +:10E2A000400000000100000000000000000000002D +:10E2B00000004000000000000200080000200000F4 +:10E2C000000000000000000000000000000000004E +:10E2D000000000000000000000000000000000003E +:10E2E000000000000000000000000000000000002E +:10E2F000000000000000000000000000000000001E +:10E30000000000004000000040000000800000000D +:10E310004000800000000000800000000400800039 +:10E32000C10080000000400000000000210020002B +:10E3300000000000C10041000000800080000001DA :10E3400000000000000000000000000000000000CD :10E3500000000000000000000000000000000000BD -:10E36000000000000000000000004000000000006D -:10E370000000000000000000000440004000000019 -:10E38000000000000200000000000000000000107B -:10E390000010000000000000020002000000000069 -:10E3A0000000000002000000020000000000000069 -:10E3B0000210020000000000020000000000000047 -:10E3C000020000000000000000000000000000004B -:10E3D0000000001002000200000008000000000021 -:10E3E0000210020000000200000000000000000017 -:10E3F0000000004040000000000000050000000098 -:10E4000000080208000000000000000000000000FA -:10E4100000000000000000000000000000000000FC -:10E4200000000000000000000000000000000000EC -:10E4300000000000000000000000000000000000DC -:10E4400000000000000000000000000000000000CC -:10E4500000000000000000000000000002000000BA -:10E4600000000000000000000000000000000000AC -:10E4700000000000000080000000000020000000FC -:10E48000000002000000000000000000000000008A -:10E49000000000000000000000000000000000007C -:10E4A000000000000000000000000000000000006C -:10E4B000000000000000000000000000000000005C -:10E4C000000000000000000000000000000000004C -:10E4D000000000000000000000000000000000003C -:10E4E000000000000000000000000000000000002C -:10E4F000000000000000000000000000000000001C -:10E500000400000000000000000000000000000007 -:10E5100000000000000000000000000000000000FB -:10E5200000000000000000000000000000000000EB -:10E5300000000000000000000000000000000000DB -:10E5400000000000000000000000000000000000CB -:10E5500004000000000000000000000000000000B7 -:10E5600000000000000000000000000000000000AB +:10E3600000000000000000000000000000000000AD +:10E37000000000000000000000000000000000009D +:10E3800000000000000000100000000082000000FB +:10E3900000000000000000100010004000400000DD +:10E3A00002400002008000080000010000000000A0 +:10E3B00000000210020902100040004000000000AE +:10E3C0000010000300000800001000100000000012 +:10E3D000000000000000000000100000000000002D +:10E3E00000000000000000000000004002000000EB +:10E3F00000000000000000000010001000000000FD +:10E4000000000010000000000000000800000000F4 +:10E4100000000008000000000008000000010001EA +:10E4200000000009000100020001000820000000B7 +:10E4300000000008090800000009000000010000B9 +:10E4400000000008000000000000000000080000BC +:10E45000000000000008004000000008000000006C +:10E46000000000000008000000000000000800009C +:10E470000000000000080000000000400000000054 +:10E48000000000000008000000080000010001007A +:10E490000041000200000000000000000000000039 +:10E4A0000000000000050102010900409140000049 +:10E4B00000000000880001080011000082820011A5 +:10E4C00000800000000300000011000402000000B2 +:10E4D000820082002020888000820000008000806E +:10E4E000000000009000000000000000000000009C +:10E4F0000000880090009000000000000000000074 +:10E50000000000000000000000000088000004007F +:10E5100004000000000020000000000000000000D7 +:10E52000080000000800000240A040004101100166 +:10E5300000A0001000004102028800000002031148 +:10E540002100414009000300000021000800A10053 +:10E5500000002104000080010004002100000004EC +:10E56000000400000000080000900000000000000F :10E57000000000000000000000000000000000009B -:10E58000001000000000000000000000000000007B -:10E59000000000000000000000000000000000007B -:10E5A000000000000000000000000000000000006B -:10E5B000000000000000000000000000000000005B -:10E5C000000000000000000000000000000000004B -:10E5D0000000080000000000000000000000000033 -:10E5E000000000000000000000000000000000002B -:10E5F0000800001000000000000000000000000003 -:10E600000000000000000000040000000000000006 -:10E6100000000000000000000000000000000000FA -:10E6200000000000000000000000000000000000EA -:10E6300000000000000000000000000004000000D6 -:10E6400000000000000000000000000000000000CA -:10E6500000000000000000000000000000000000BA -:10E6600000000000000000000000000000000000AA +:10E58000000000000000000000000000000000008B +:10E5900000000000000001802100000000000100D8 +:10E5A000A18000000100008082000800040000003B +:10E5B00010800000000000008200000082000111B5 +:10E5C0008400088004808480840000000000000033 +:10E5D000C0000400000000000000000001800000F6 +:10E5E0000002000000000000000000000000000029 +:10E5F000000000000000000000000000000000001B +:10E60000000000000000000000000000000000000A +:10E6100000000000000000002004A0A0000000C0D6 +:10E620000800081000000400004000000000800006 +:10E63000000080080000000000000000000400004E +:10E64000400003000040C0402140000000000000E6 +:10E6500000002100850000000000000000001008FC +:10E660000000400100000000000000000000000069 :10E67000000000000000000000000000000000009A :10E68000000000000000000000000000000000008A -:10E69000000000000000000000000000000000007A -:10E6A000000000000000000000000000000000006A -:10E6B000000000000000000000000000000000005A -:10E6C000000000000000000000000000000000004A -:10E6D000000000000000000000000000000000003A -:10E6E000000000000000000000000000000000002A +:10E69000000088000000400000002000000000038F +:10E6A000C04100000102C0000000A00040050200BF +:10E6B00000800002010000000000400008004080CF +:10E6C000008084008280000000008411C0090000E6 +:10E6D000008000008804841100804085820840206A +:10E6E0000002010000000000000000000000000027 :10E6F000000000000000000000000000000000001A -:10E700000000000000000000000000000000000306 -:10E7100000000000000000000000000000000000F9 -:10E7200000000000000000000000000000000000E9 -:10E7300000000000000000000000000000000000D9 -:10E7400000000000000000000000000000000000C9 -:10E7500000000000000000000000000000000000B9 -:10E7600000000000000000000000000000000000A9 -:10E770000000000000000084000000000000000015 +:10E700000000000000000000000000000000000009 +:10E7100000000000000000008000000080000000F9 +:10E72000000820000000080100000088000400002C +:10E73000080009020089101000000000009000008D +:10E7400003020802000203400500050000A00500C6 +:10E7500000000802080000040300092080200001D6 +:10E76000030100012000000003000000400220001F +:10E770000090000000000000000000000000000009 :10E780000000000000000000000000000000000089 -:10E790000000000000000000000000000000000079 -:10E7A0000000000000000000000000000000000069 -:10E7B0000000000000000000000000000000000059 -:10E7C0000000000000000000000000000000000049 -:10E7D0000000000000000000000000000000000039 -:10E7E0000000000000000000000000000000000029 +:10E7900000000020002000090000010004410109E0 +:10E7A00021880000C0218421A02100000000000079 +:10E7B000400000000021000001080000880008005F +:10E7C0000000100000009000008084034100C000A1 +:10E7D0000900000090000000C00000000000008060 +:10E7E00001000000000200A0000000020000000084 :10E7F0000000000000000000000000000000000019 -:10E8000000400000000000000000000000000000C8 -:10E8100000000000000000000000000000000000F8 -:10E8200000000000000000000000000000000000E8 -:10E8300000000000000000000000000000000000D8 -:10E8400000000000000000000000000000000000C8 -:10E8500000000000000000000000000000000000B8 -:10E8600000000000000000000000000000000000A8 -:10E870000000000000000000000000000000000098 -:10E880000000000000000000000000000000000088 -:10E890000000000000000000000000000000000078 -:10E8A0000000000000000000000000000000000068 -:10E8B0000000000000000000000000000000000058 -:10E8C0000000000000000000000000000000000048 -:10E8D0000000000000000000000000000000000038 -:10E8E0000000000000000000000000000000000028 +:10E800000000000000000000000000000000000008 +:10E810000000000000010001000000000200800074 +:10E8200020008405000000C000000000000000007F +:10E8300000000300000000C00000100100000500FF +:10E8400000000000830000C00990030200000400E3 +:10E8500000000400000000000000050000000000AF +:10E8600000024000000000010003080000010090C9 +:10E87000080011000000000000000000000005007A +:10E88000000005000500000000000000000000007E +:10E8900000000000000000C000900088000001009F +:10E8A0000100000100000100000040000000020221 +:10E8B00000900004402000210103108500020000A8 +:10E8C00000000000000020A0000500A120C1892058 +:10E8D00000200004202000000001000000000001D2 +:10E8E000000900830888900900C100010090000918 :10E8F0000000000000000000000000000000000018 -:10E900000000000000000000000000000001000006 -:10E9100000000000000000000000000000000000F7 -:10E9200000000000000000000000000000000000E7 -:10E9300000000000000000000000000000000000D7 -:10E9400000000000000000000000000000000000C7 -:10E9500000000000000000000000000000000000B7 -:10E9600000000000000000000000000000000000A7 -:10E970000000000000000000000000000000000097 -:10E980000000000000000000000000000011000274 -:10E990000002000000000000000000000000000075 -:10E9A0000000000000000000000000000000000067 -:10E9B0000000000000000000000000000000000057 -:10E9C0000000000000000000000000000000000047 -:10E9D0000000000000000000000000000000000037 -:10E9E0000000000000000000000000000000000027 -:10E9F0000000000000000000000000000000000017 +:10E900000000000000000000000000000000000007 +:10E9100000000000000000000080008000000900EE +:10E9200010410500410800000900100080000000AF +:10E930008080000000800000004121A10088008448 +:10E94000000000001000000008100003412000211A +:10E9500089000000008000000000000200050005A2 +:10E96000000200C108A105030090009000104020A3 +:10E970000010000000000000000000000000000087 +:10E980000000000000000000000000000000000087 +:10E9900000000000000000000000000000008000F7 +:10E9A000800000802100091110A0000080000000FC +:10E9B0000000800000908080000010801083408064 +:10E9C0001009004100000000000002009080820059 +:10E9D0004100A00002218521A000000000000003EA +:10E9E0000000008011000390118008002000410009 +:10E9F0000588C18000000000000000000000000049 :10EA00000000000000000000000000000000000006 :10EA100000000000000000000000000000000000F6 -:10EA200000000000000000000000000000000000E6 -:10EA300000000000000000000000000000000000D6 -:10EA400000000000000000000000000000000000C6 -:10EA500000000000000000000000000000000000B6 -:10EA600000000000000000000000000000000000A6 -:10EA70000000000000000000000000000000000096 +:10EA20000800C088004001A0000100C020000400D0 +:10EA30009000A000020090C10404402000100002D9 +:10EA40000184004100010000000000000084100467 +:10EA5000A0008940400083000401C00000000000C5 +:10EA6000020100A08804901009C1888409100000E8 +:10EA700000000103C1A00000000000000000000031 :10EA80000000000000000000000000000000000086 :10EA90000000000000000000000000000000000076 -:10EAA0000000000000000000000000000000000066 -:10EAB0000000000000000000000000000000000056 -:10EAC0000000000000000000000000000000000046 -:10EAD0000000000000000000000000000000000036 -:10EAE0000000000000000000000000000000000026 -:10EAF0000000000000000000000000000000000016 +:10EAA0000040908800C000000188210001000002A1 +:10EAB0000088001100C14040009020044020000365 +:10EAC000010102030040000000000000000040902F +:10EAD0000002C005A0C0C0A0000220A0A0C000008D +:10EAE00000000000000000000091000141A0880328 +:10EAF00091010101890991910000000000000000CE :10EB00000000000000000000000000000000000005 -:10EB100000000100010000000000000000000000F3 -:10EB200000000000000000000000000000000000E5 -:10EB300000000000000000000000000000000000D5 -:10EB400000000000000000000000000000000000C5 -:10EB500000000000000000000000000000000000B5 -:10EB600000000000000000000000000000000000A5 -:10EB70000000000000000000000000000000000095 +:10EB100000000000000000000000000000000000F5 +:10EB2000000000808000008003100911911011097D +:10EB300003110084000800C18080000000800000F4 +:10EB400020881010C18800100000000000000000A4 +:10EB50008002419010A180918000008000800080A0 +:10EB6000000000004000110000000010000885882F +:10EB70000990411020101010081000000000000043 :10EB80000000000000000000000000000000000085 -:10EB90000000000008000800000000000000000065 -:10EBA0000000000000000000000000000000000065 -:10EBB0000000000000000000000000000000000055 -:10EBC0000000000000000000000000000000000045 -:10EBD0000000000000000000000000000000000035 -:10EBE0000000000000000000000000000000000025 -:10EBF0000000000000000000000000000000000015 +:10EB90000000000000000000000000000000000075 +:10EBA00000008011800900000000411110211100B7 +:10EBB00011020000000000800000800080090000B9 +:10EBC000800041080402908005020000000000005F +:10EBD000000021802010400021100000000900806A +:10EBE00000410000800080038000000088908802BF +:10EBF0000800800821802040200010100000000044 :10EC00000000000000000000000000000000000004 :10EC100000000000000000000000000000000000F4 -:10EC200000000000000000000000000000000000E4 -:10EC300000000000000000000000000000000000D4 -:10EC400000000000000000000000000000000000C4 -:10EC500000000000000000000000000000000000B4 -:10EC600000000000000000000000000000000000A4 -:10EC70000000000000000000000000000000000094 +:10EC200000000000C00120008888000001100100E1 +:10EC300000880100000000200002000040000420C5 +:10EC40002020040001C19000030290000000000099 +:10EC500000000000850805210140C1010020008955 +:10EC60000082000100001000042004208200C0A1E6 +:10EC700010098890080191A09090900883010000ED :10EC80000000000000000000000000000000000084 :10EC90000000000000000000000000000000000074 -:10ECA0000000000000000000000000000000000064 -:10ECB0000000000000000000000000000000000054 -:10ECC0000000000000000000000000000000000044 -:10ECD0000000000000000000000000000000000034 -:10ECE0000000000000000000000000000000000024 -:10ECF0000000000000000000000000000000000014 +:10ECA0000000000000000082000043000000484215 +:10ECB00000C84300002100000000000000000082A6 +:10ECC000000043004800418200C8430000000000EB +:10ECD00000C800005000600600C84300000000218A +:10ECE00000004380600600000006000043000000B2 +:10ECF000600600C843004100600600C84300880069 :10ED00000000000000000000000000000000000003 :10ED100000000000000000000000000000000000F3 -:10ED200000000000000000000000000000000000E3 -:10ED300000000000000000000000000000000000D3 -:10ED400000000000000000000000000000000000C3 -:10ED500000000000000000000000000000000000B3 -:10ED600000000000000000000000000000000000A3 -:10ED70000000000000000000000000000000000093 -:10ED80000000000000000000000000000000000083 +:10ED20000000000000000000F0000000F000000003 +:10ED3000000000000000F0F000000000F0000C00F7 +:10ED4000FFFF0000F431DC70CC55CC553CC33C3C9B +:10ED50000000000000000000FFFF3C002000A5A60E +:10ED600000000000000000660000343C340C00008D +:10ED700000006E7F0000C33C00FF5AAC3CCAFF009D +:10ED800000FF000000000000000000000000000084 :10ED90000000000000000000000000000000000073 -:10EDA0000000000000000000000000000000000063 -:10EDB0000000000000000000000000000000000053 -:10EDC0000000000000000000000000000000000043 -:10EDD0000000000000000000000000000000000033 -:10EDE0000000000000000000000000000000000023 -:10EDF0000000000000000000000000000000000013 -:10EE00000000000000000000000000000000000002 +:10EDA00000000000000000000000F0000000F00083 +:10EDB0000000000000000000F0F000000000F00083 +:10EDC0000C00F6F40000F033D470CC5CCC5C3CC397 +:10EDD0003C3C0000000000000000FFFF3C00000081 +:10EDE000A5A6FFFFFFFF3030C3660000043C040C03 +:10EDF00000000000900000003CC3FF005AAC3CCA79 +:10EE0000FF0000FF00000000000000000000000004 :10EE100000000000000000000000000000000000F2 :10EE200000000000000000000000000000000000E2 :10EE300000000000000000000000000000000000D2 @@ -163601,494 +163601,494 @@ :10EE80000000000000000000000000000000000082 :10EE90000000000000000000000000000000000072 :10EEA0000000000000000000000000000000000062 -:10EEB0000000000000000000000000000000000052 -:10EEC0000000000000000000000000000000000042 -:10EED0000000000000000000000000000000000032 -:10EEE0000000000000000000000000000000000022 -:10EEF0000000000000000000000000000000000012 -:10EF00000000000000000000000000000000000001 +:10EEB000000F000000FF00000000FFFF0000000046 +:10EEC000000000000000C13CC43C669956A9300F08 +:10EED000CFF0FFFFFFFF0000000000000000003C3B +:10EEE000003C0F6F000022F08000FFFF30000000A8 +:10EEF000000000000000FFFF0DF7401FC9D97A593C +:10EF0000A6A6F5F5000066660000000000000000FF :10EF100000000000000000000000000000000000F1 :10EF200000000000000000000000000000000000E1 -:10EF300000000000000000000000000000000000D1 -:10EF400000000000000000000000000000000000C1 -:10EF500000000000000000000000000000000000B1 -:10EF600000000000000000000000000000000000A1 -:10EF70000000000000000000000000000000000091 -:10EF80000000000000000000000000000000000081 +:10EF30000000000F000000000000000000000000C2 +:10EF400000000000140000140C3C2C3C655A659A2B +:10EF5000300FCFF0000000000000000000000000B3 +:10EF6000003C607C000000000BF0C000002030007E +:10EF70000000000000000000F6F60DF7401F3626E6 +:10EF800085A6A6A60A0AFFFF9999000000000000C6 :10EF90000000000000000000000000000000000071 :10EFA0000000000000000000000000000000000061 -:10EFB0000000000000000000000000000000000051 -:10EFC0000000000000000000000000000000000041 -:10EFD0000000000000000000000000000000000031 -:10EFE0000000000000000000000000000000000021 -:10EFF0000000000000000000000000000000000011 -:10F000000000000000000000000000000000000000 +:10EFB0000000038203380C00C2C005610A3FC5414E +:10EFC00000A800610006009D0001430083380C206A +:10EFD00010C24341833EC00D000000610007000DD8 +:10EFE00000000060303FC04D000080610036004DE1 +:10EFF000000800008061003E000D10C003E1033FE7 +:10F00000CC0110C00363033DC005020000000000F6 :10F0100000000000000000000000000000000000F0 -:10F020000000000000610006000D0000000000006C -:10F0300000000000000000000000000000000000D0 -:10F0400000000000000000000000000000000000C0 -:10F0500000000000000000000000000000000000B0 -:10F0600000000000000000000000000000000000A0 +:10F0200000000000000000000000000000000000E0 +:10F030000000000000000000000000009C93353537 +:10F0400000003C000000000033F000080000000059 +:10F05000000000000000F3F3800880C800000000FA +:10F0600000000000001055553C3C3C0C0000000026 :10F070000000000000000000000000000000000090 -:10F080000000000000000000000000000000000080 +:10F0800000A09695696A3C0C3C3C333C3C3C00003B :10F090000000000000000000000000000000000070 :10F0A0000000000000000000000000000000000060 -:10F0B0000000000000000000000000000000000050 -:10F0C0000000000000000000000000000000000040 -:10F0D0000000000000000000000000000000000030 -:10F0E0000000000000000000000000000000000020 +:10F0B0000000000000000000000000000000969921 +:10F0C0003A3AC000FC000000000033F000000000ED +:10F0D00000000000000000FF5500000000C000001C +:10F0E000000000000000001055553C3C3C0C0000A6 :10F0F0000000000000000000000000000000000010 -:10F1000000000000000000000000000000000000FF +:10F10000000000A0155DEAA23C0C3C3C333C3C3CBA :10F1100000000000000000000000000000000000EF :10F1200000000000000000000000000000000000DF :10F1300000000000000000000000000000000000CF -:10F1400000000000000000000000000000000000BF -:10F1500000000000000000000000000000000000AF -:10F16000000000000000000000000000000000009F -:10F17000000000000000000000000000000000008F -:10F18000000000000000000000000000000000007F -:10F19000000000000000000000000000000000006F +:10F140005A5AFFFF00FF000000000000000000000E +:10F150000000000000000000C30002820000100058 +:10F160000000000000000000F5BFFFFF843F00200A +:10F1700000000000100438380000340C040C0000BB +:10F1800000003FF3C0CCC70000C742CAE7E70E4A01 +:10F190003236000000000000000000000000000007 :10F1A000000000000000000000000000000000005F :10F1B000000000000000000000000000000000004F -:10F1C000000000000000000000000000000000003F -:10F1D000000000000000000000000000000000002F -:10F1E000000000000000000000000000000000001F -:10F1F000000000000000000000000000000000000F -:10F2000000000000000000000000000000000000FE -:10F2100000000000000000000000000000000000EE -:10F2200000000000000000000000000000020002DA -:10F2300000000000000000000000000000000000CE -:10F2400000000000000000000000000400000000BA -:10F2500000000000000000000000000000000000AE -:10F26000000000200000000000000004000000007A -:10F27000000000000000000000000000000000008E -:10F28000000000000000000000000000000400007A +:10F1C0000000FFFF5A5A0A0A000000000000000079 +:10F1D00000000000000000000000C300440400FF25 +:10F1E00010FF0000000000000000FF055A007BC077 +:10F1F00000000000000001200402000034000400B0 +:10F200000000000003C0FFFFC7FFFFC7CA98EF2C34 +:10F2100058D0343C00000000000000000000000056 +:10F2200000000000000000000000000000000000DE +:10F2300000000000000000000000000000002000AE +:10F2400000000000000000000400040000000000B6 +:10F25000850084000000100000000200000084000F +:10F260000000000000000000000000048800010011 +:10F27000C0002000000000000000010000000000AD +:10F280000000000000000005000000000004000075 :10F29000000000000000000000000000000000006E -:10F2A0000000000000000400400000040004000012 -:10F2B000400000000000000000000200000000000C -:10F2C00000000000000000000000400200004000BC -:10F2D000000000000000000000000000000000002E -:10F2E00000000000000100000000400200020000D9 -:10F2F000000000000000000000000002000000000C -:10F3000000000000000000000000000240000000BB -:10F31000000000000000000000000000000000905D +:10F2A000000000000000000000000000000000005E +:10F2B000000000000000000000000000000040000E +:10F2C00080000000000000000000800080000000BE +:10F2D000000020000000000080000000800000000E +:10F2E000000000000000000011000000000000000D +:10F2F000200000008000000000000000200000004E +:10F3000000000000000000000000000000000000FD +:10F3100000000000000000000000000000000000ED :10F3200000000000000000000000000000000000DD -:10F33000000040000000000000000000000200008B -:10F3400000000000000000000000000000000000BD -:10F35000020000000000000002000200080000009F -:10F360000000000008000200000000000000000093 -:10F370000200000000000200840000000000000005 -:10F38000000100000000001000000000000000006C -:10F390000000020000000010000002000000080051 -:10F3A000020000000000000000000000100000004B -:10F3B0000000040002000800000000000000000837 +:10F3300000000000000000000000000000000000CD +:10F3400000000000000000000000000002000800B3 +:10F35000000000050904080000000000080000008B +:10F36000000000000011000000000000000000008C +:10F37000000000000000000000000000000000008D +:10F38000000300000000000000000000000000007A +:10F3900000000000000000000000000000000080ED +:10F3A00000800000000000000000000000000000DD +:10F3B00088000000000000000200000000000800BB :10F3C000000000000000000000000000000000003D -:10F3D000000000000000000000000000000000002D -:10F3E000000000000000000000000000000000001D -:10F3F000000000000000000000000000000000000D +:10F3D00000000000008420010000001000100082E6 +:10F3E0000088000000000000008400000000000011 +:10F3F000000000000000000000C00000000000004D :10F4000000000000000000000000000000000000FC -:10F4100000000000000000000000000000000000EC -:10F4200000000000000000000000000000000000DC -:10F4300000000000000000000000000000000000CC -:10F4400000000000000000000000000000000000BC -:10F4500000000000000000000000000000000000AC -:10F46000000000000000000000000000000000009C -:10F47000000000000000000000000000000000008C -:10F48000000000000000000000000000000000007C -:10F49000000000000000000000000000000000006C -:10F4A0000000000000000000000000000008000054 -:10F4B000000000000000000000000000000000004C -:10F4C0000000000000080000000000000000000034 -:10F4D000000000000000000000000000000000002C -:10F4E000000000000000000000000000000000001C -:10F4F000000000000000000000000000000000000C -:10F5000000000000000000000000000000000000FB -:10F5100000000000000000000000000000000000EB -:10F5200000000000000000000000000000000000DB -:10F5300000000000000000000000000000000000CB -:10F5400000000000000000000000000000000000BB -:10F5500000000000000000000000000000000000AB -:10F56000000000000000000000000000000000009B -:10F570000000000000000000000000000000000487 -:10F58000000000000000000000000000000000007B -:10F59000000000000000000000000000000000006B -:10F5A000002100000000000000000000000000003A -:10F5B000000000080000000000210000000000031F -:10F5C000000000000000000000000000000000003B -:10F5D000000000000000000000000000000000002B -:10F5E000000000000000000000000000000000001B -:10F5F000000000000000000000000000000000000B -:10F6000000000000000000000000000000000000FA -:10F6100000000000000000000000000000000000EA -:10F6200000000000000000000000000000000000DA -:10F6300010000000000000000000000000080000B2 -:10F6400000000000000000000000000000000000BA -:10F6500000000000000000000000000000000000AA -:10F66000000000000000000000000000000000009A -:10F67000000000000000000000000000000000008A -:10F68000000000000000000000000000000000007A -:10F69000000000000000000000000000000000006A -:10F6A000000000000000000000000000000000005A -:10F6B000000000000000000000000000000000004A -:10F6C0000000000000000000000800000000000032 -:10F6D000000000000000000000000000000000002A -:10F6E000000000000000000000000000000000001A -:10F6F000000000000000000000000000000000000A -:10F7000000000000000000000000000000000000F9 -:10F7100000000000000000000000000000000000E9 -:10F7200000000000000000000000000000000000D9 -:10F7300000000000000000000000000000000000C9 -:10F7400000000000001000080000000000000000A1 -:10F7500000000000000000000000000000000000A9 -:10F760000000000000000000000000000000000099 -:10F770000000000000000000000000000000000089 -:10F780000000000000000000000000000000000079 -:10F790000000000000000000000000000000000069 -:10F7A0000000000000000000000000000000000059 -:10F7B0000000000000000000000000000000000049 -:10F7C0000000000000000000000000000000000039 -:10F7D0000000000000000000000000000000000029 -:10F7E0000000000000000000000000000000000019 -:10F7F0000000000000000000000000000000000009 -:10F8000000000000000000000000000000000000F8 -:10F8100000000000000000000000000000000000E8 -:10F8200000000000000000000000000000000000D8 -:10F8300000000000000000000000000000000000C8 -:10F8400000000000000000000000000000080000B0 -:10F8500000000000000000000000000000000000A8 -:10F860000000000000000000000000000000000098 -:10F870000000000000000000000000000000000088 -:10F880000000000000000000000000000000000078 -:10F890000000000000000000000000000000000068 -:10F8A0000000000000000000000000000000000058 -:10F8B0000000000000000000000000000000000048 +:10F4100000000000000000000000000000020040AA +:10F4200000100010000000000000000000000000BC +:10F4300000000000000000000000000000080000C4 +:10F440000000000000000000002121000100000079 +:10F4500000200020000300000083002100030000C2 +:10F4600000000002000501210021401000030005FA +:10F47000000240000011090400102184C000C08077 +:10F480000100090800000000C00982092003C141F1 +:10F490008200001100000800000008800000000841 +:10F4A000000008000000050000808300010000004B +:10F4B0000400A000000000000000000000000000A8 +:10F4C000000000000000008200820000A0A00800F0 +:10F4D000000041010001008400002104210003829A +:10F4E000000000A0000100001000000000A041C0CA +:10F4F0000002080288020300A0890501A00500029D +:10F50000000420082000000000000000000080002F +:10F51000080000000300039000000000000200004B +:10F5200000000000800000008200002008001000A1 +:10F53000000080000000000000000000000000004B +:10F5400000000000000000000080200000002000FB +:10F55000C000000000000480000000000000000067 +:10F560000000000000000000C0000000A00000003B +:10F5700000000000000000000000C00008002000A3 +:10F58000900020002000210000000000000000008A +:10F590000000010004000400410000000000080019 +:10F5A00000802000200020002000000000800000DB +:10F5B00001800000000000000000000000000000CA +:10F5C0000000000000000000000000028084000035 +:10F5D00080A00090000000008002000000000000F9 +:10F5E0000008008200A000000000000000000000F1 +:10F5F00000A0000000000000000000C0000000C0EB +:10F600008000000080008008A00000000000400092 +:10F610004000410004008088830084000000000056 +:10F620000000000280008000C100C1000000002036 +:10F6300000000420000000000000000000000000A6 +:10F640000000000000000000000000000000210495 +:10F65000000020080021000004A005850000000033 +:10F66000204182080000C002002100410021082141 +:10F670000100402100000000C00000008200208046 +:10F6800084002090C0020208C120C02000000000B9 +:10F690000809A0002010018000000005008008007B +:10F6A00000000880088000000000A080000000200A +:10F6B000002082000108010000000080008000009E +:10F6C000000000000000000000000000000000003A +:10F6D000A00100408008000021008021C02000001F +:10F6E0000300800000090300000000020000410048 +:10F6F00008A0400400A00000000041000800000035 +:10F7000089040000880541088800200911010000D3 +:10F71000020003000000808508100000039003022F +:10F720000984050005020502000000000010030026 +:10F73000000100010000040104000000002000207E +:10F7400000000000000000000000000000000000B9 +:10F7500000052005004100040011004104200420A0 +:10F7600000030021400400210003000040210005A7 +:10F7700000000021000941210003000020000000DA +:10F78000010000C100090104C102000091404000D5 +:10F790000000000000090000000000000000000060 +:10F7A00082020000000008110000020200000000B8 +:10F7B0000000018000A008000020000000000009F7 +:10F7C0000009000000000000000000000000000030 +:10F7D0000000000080000000000100000000800127 +:10F7E0008001008200A009A100000000410000008B +:10F7F0000000000000000000C00000000000000049 +:10F8000021000200000403000804048300004000FB +:10F8100000020000000000000000210000000000C5 +:10F82000030203010800110000000800800000002E +:10F8300000000000044000118000002100000000D2 +:10F8400000000000000000000000000000000000B8 +:10F85000000000000001000111000001021100057C +:10F8600008000011004000108490001010100102E8 +:10F8700004A01010000000000000000000000000C4 +:10F880000800000041A10182A004A0850001110030 +:10F8900001010000000000000100820000000000E3 +:10F8A000000040000000000000000000000089018E +:10F8B000850090000800C0049090008290880000AD :10F8C0000000000000000000000000000000000038 -:10F8D0000000000000000000000000000000000028 -:10F8E0000000000000000000000000000000000018 -:10F8F0000000000000000000000000000000000008 -:10F9000000000000000000000000000000000000F7 -:10F9100000000000000000000000000000000000E7 +:10F8D000000000000000002100030803000811C020 +:10F8E000092080030011008040808080008000801B +:10F8F00003009180808000000000000000000000F4 +:10F900000900800000008989208200C000401009A1 +:10F910008800031100000000000002000000000049 :10F9200000000000000000000000000000000000D7 -:10F9300000000000000000000000000000000000C7 +:10F93000A0042040801180098080800000808080A9 :10F9400000000000000000000000000000000000B7 -:10F9500000000000000000000000000000000000A7 -:10F960000000000000000000000000000000000097 -:10F970000000000000000000000000000000000087 -:10F980000000000000000000000000000000000077 -:10F990000000000000000000000000000000000067 -:10F9A0000000000000000000000000000000000057 -:10F9B0000000000000000000000000000000000047 -:10F9C0000000000000000000000000000000000037 -:10F9D0000000000000000000000000000000000027 -:10F9E0000000000000000000000000000000000017 -:10F9F0000000000000000000000000000000000007 -:10FA000000100000000000000000000000000000E6 -:10FA100000000000000000000000000000000000E6 -:10FA200000000000000000000000000000000000D6 -:10FA300000000000000000000000000000000000C6 -:10FA400000000000000000000000000000000000B6 -:10FA500000000000000000000000000000000000A6 -:10FA60000000000000000000000000000000000096 -:10FA70000000000000000000000000000000000086 -:10FA80000000000000000000000000000000000076 -:10FA90000000000000000000000000000000000066 -:10FAA0000000000000000000000000000000000056 -:10FAB0000000000000000000000000000000000046 -:10FAC0000000000000000000000000000000000036 -:10FAD0000000000000000000000000000000000026 -:10FAE0000000000000000000000000000000000016 -:10FAF0000000000000000000000000000000000006 -:10FB000000000000000000000000000000000000F5 -:10FB100000000000000000000000000000000000E5 -:10FB200000000000000000000000000000000000D5 -:10FB300000000000000000000000000000000000C5 -:10FB400000000000000000000000000000000000B5 +:10F950000000000000000000090009030580090004 +:10F9600080008021000000804100219191820921C6 +:10F9700000000091008000000300410005024000EB +:10F980000000000000000000C000A0210904114197 +:10F9900011001180411008110000800000000000DB +:10F9A0008000000000800000000010002000200007 +:10F9B0002000418089009104890300808011919189 +:10F9C0008080000000000000000000000000000037 +:10F9D0000000000000000000000000880001010895 +:10F9E000000408001000000088A0040203C0099071 +:10F9F000004100000002000800400000000000007C +:10FA000001000000000000000000080211009088C2 +:10FA100088C1100201C00000010200000400820041 +:10FA200082000400000000020000008801000000C5 +:10FA30000000000020902000A0010201004002010F +:10FA40008309900800000040000000400000000012 +:10FA500000000000000000000000000000000100A5 +:10FA600001010100A00800A00108001040000000F2 +:10FA7000C001030110900010000304050000000104 +:10FA800000000001000100010000000040000189A9 +:10FA900041C103C1200091081100010100000000D4 +:10FAA00000000000000000000000C0010000000194 +:10FAB00000000000000000110110401000C09090F4 +:10FAC00000208408C1C100000000400000000000C8 +:10FAD0000000000000000000000000000000000224 +:10FAE0001111052111208089058411C1008980032D +:10FAF00000030002210280400003002000410010AA +:10FB00000010000000410020000400100009000067 +:10FB10000983032191889002918305030902000063 +:10FB20000003000300030005400000408040004047 +:10FB30000010002000000000009040911191008909 +:10FB4000800000808080A191400000000000000043 :10FB500000000000000000000000000000000000A5 -:10FB60000000000000000000000000000000000095 -:10FB70000000000000000000000000000000000085 -:10FB80000010000000000000000000000000000065 -:10FB90000000000000000000000000000000000065 -:10FBA0000000000000000000000000000000000055 -:10FBB0000000000000000000000000000000000045 -:10FBC0000000000000000000000000000000000035 +:10FB600090809100A0008403000200C1008000008A +:10FB7000C18841808200020900008000000000006E +:10FB8000000800000000000200000000000000006B +:10FB900021801191840004032180092002000203C6 +:10FBA0000000004000800000000000000004000091 +:10FBB000000000000000000000050080119111000D +:10FBC0000903C11191000000111100200021000063 :10FBD0000000000000000000000000000000000025 -:10FBE0000000000000000000000000000000000015 -:10FBF0000000000000000000000000000000000005 -:10FC000000000001000000000000000000000000F3 -:10FC100000000000000000000000000000000000E4 -:10FC200000000000000000000000000000000000D4 -:10FC300000000000000000000000000000000000C4 -:10FC400000000000000000000000000000000000B4 +:10FBE000000008C0080084000800C000A021A00890 +:10FBF0000000411102401002020102000800020050 +:10FC000082000088000000000000000000000000EA +:10FC10000000C140A11185028500004000000100E4 +:10FC20000100000000000002004000000000400150 +:10FC3000C00082000000000000000000004000033F +:10FC4000008200010501210088002101000100005F :10FC500000000000000000000000000000000000A4 -:10FC60000000000000000000000000000000000094 -:10FC70000000000000000000000000000000000084 -:10FC800000000000008100004300000000000000B0 -:10FC90000000000000000000000000000000000064 -:10FCA0000000000000000000000000000000000054 -:10FCB0000000000000000000000000000000000044 -:10FCC0000000000000000000000000000000000034 -:10FCD0000000000000000000000000000000000024 -:10FCE0000000000000000000000000000000000014 -:10FCF0000000000000000000000000000000000004 -:10FD000000000000000000000000000000000000F3 -:10FD100000000000000000000000000000000000E3 -:10FD200000000000000000000000000000000000D3 -:10FD300000000000000000000000000000000000C3 -:10FD400000000000000000000000000000000000B3 +:10FC600000000000410000C8000084000082000085 +:10FC700043008800810000C800008400410000C8E3 +:10FC800000000000810000C800000000000000002B +:10FC900000000000600000C80000000A600600C804 +:10FCA000430041000000810000C800000000000087 +:10FCB0000000430000060000000000000000600695 +:10FCC00000C843000000840600C84300828200068A +:10FCD00000004300000000000000000000000000E1 +:10FCE000000000000000007A00FD00000000F000AD +:10FCF00000F01000BA0055FF55EF0000000085002D +:10FD0000A5000014005500000000000000000000E5 +:10FD10000000000000004BCBCBCB005F00AA00002E +:10FD20000000F0F0000000000000000000000000F3 +:10FD3000C03FC03F000000000000000000000000C5 +:10FD400000000000AA0A0000F00FF80F0000A0A0B9 :10FD500000000000000000000000000000000000A3 -:10FD60000000000000000000000000000000000093 -:10FD70000000000000000000000000000000000083 -:10FD80000000000000000000000000000000000073 -:10FD90000000000000000000000000000000000063 -:10FDA0000000000000000000000000000000000053 -:10FDB0000000000000000000000000000000000043 -:10FDC0000000000000000000000000000000000033 +:10FD60000000000000000000006A00FA000000002F +:10FD70000F00000F1000BA005555557D000000001F +:10FD8000AF00AF005A5A0A0A00000000000000004D +:10FD900000000000000000004BFBCBFB0055000002 +:10FDA00000000000F0F00000000000000000000073 +:10FDB0000000C03FC03F0000000000000000000045 +:10FDC000000000000000AAAE0F0000FF00FF54FE7C :10FDD0000000000000000000000000000000000023 :10FDE0000000000000000000000000000000000013 -:10FDF0000000000000000000000000000000000003 -:10FE000000000000000000000000000000000000F2 -:10FE100000000000000000000000000000000000E2 -:10FE200000000000000000000000000000000000D2 -:10FE300000000000000000000000000000000000C2 -:10FE400000000000000000000000000000000000B2 -:10FE500000000000000000000000000000000000A2 +:10FDF0000000FFC3FF3C00000000EFF5A0F00D0580 +:10FE00000D050F0F0F0F00000000000000000000A4 +:10FE1000000000000000000000000F0F0F0F0400A2 +:10FE200008000000FFFF00003C3C00000000000054 +:10FE30001494060000000000000000000000000014 +:10FE40000000000000000000000000005A5A5A5A4A +:10FE5000FFFF0FFF00000000000000000000000096 :10FE60000000000000000000000000000000000092 -:10FE70000000000000000000000000000000000082 -:10FE80000000000000000000000000000000000072 -:10FE90000000000000000000000000000000000062 -:10FEA0000000000000000000000000000000000052 -:10FEB0000000000000000000000000000000000042 -:10FEC0000000000000000000000000000000000032 -:10FED0000000000000000000000000000000000022 -:10FEE0000000000000000000000000000000000012 -:10FEF0000000000000000000000000000000000002 -:10FF000000000000000000000000000000000000F1 -:10FF10000020000000A00000000000000000000021 -:10FF200000000000000000000000000000000000D1 -:10FF300000000000000000000000000000000000C1 -:10FF400000000000000000000000000000000000B1 -:10FF500000000000000000000000000000000000A1 +:10FE70000000000000C3003C75752020FFF0A0F0DA +:10FE8000080008000F4F0F0F0000000000000000E6 +:10FE9000000000000000000000000000EBFF4155E2 +:10FEA000100020000000000000003C3C00000000AA +:10FEB00000000000008100000000000000000000C1 +:10FEC00000000000000000000000F5555D5D5A5A7A +:10FED000525AFFFF0FFF000000000000000000006A +:10FEE00000000000000000000000000000000061B1 +:10FEF0000005C00900000061003E000D0000006127 +:10FF00003006C005000000613007C00C0000006131 +:10FF10000006800C000000610006000D000000617A +:10FF20000004C099000105612A3DC54900A80000F0 +:10FF300000610006C009000005610A0E050D00A061 +:10FF400000610006000D000000610030C0410000AB +:10FF500000610034C09100A005000A38050000A02F :10FF60000000000000000000000000000000000091 -:10FF70000000000000000000000000000000000081 -:10FF80000000000000000000000000000000000071 -:10FF90000000000000000000000000000000000061 -:10FFA0000000000000000000000000000000000051 -:10FFB0000000000000000000000000000000000041 -:10FFC0000000000000000000000000000000000031 -:10FFD0000000000000000000000000000000000021 +:10FF7000F0200020A0AC000000000000002800A835 +:10FF8000000CFF55FD7D7D7400000000AB69002072 +:10FF90000000000003033F3F00000000207AA0F0B3 +:10FFA000BE3CAE0CF000FA0AD4D7171400003000A3 +:10FFB0000000000000002000200000000000F0A56C +:10FFC000F0F00000000033333333F54DF54DFAAA5D +:10FFD000FCAFEB141400FFFF000000000000000065 :10FFE0000000000000000000000000000000000011 -:10FFF0000000000000000000000000000000000001 +:10FFF0000000F0200020A0AC0000000000009104F0 :020000040028D2 -:1000000000000000000000000000000000000000F0 -:1000100000000000000000000000000000000000E0 -:1000200000000000000000000000000000000000D0 -:1000300000000000000000000000000000000000C0 -:1000400000000000000000000000000000000000B0 -:1000500000000000000000000000000000000000A0 +:100000000400000C0055838B838B00000000549685 +:10001000FFDF0000000003033F3F00000000207AE4 +:10002000A0FAAA00AA00F000F00000000000F00012 +:1000300030000000000000006A05600500000000BC +:10004000F0A5F0F0000000003333333305410541E3 +:100050000AAA0CA0EB141400FFFF0000000000002F :100060000000000000000000000000000000000090 -:100070000000000000000000000000000000000080 -:100080000000000000000000000000000000000070 -:100090000000000000000000000000000000000060 -:1000A0000000000000000000000000000000000050 -:1000B0000000000000000000000000000000000040 -:1000C0000000000000000000000000000000000030 -:1000D0000000000000000000000000000000000020 +:1000700000000000F0F090A07F838F739496949618 +:10008000000000000000000000FF555500000000C7 +:1000900000000000000000002F2FFFFF0000000004 +:1000A000000000000200020028FD00FD0505505080 +:1000B0000408102000000000000000000000000004 +:1000C00000000000000000000000A9AAAAAA75759F +:1000D0004545AAAC3FAC00000000AA55AA55000057 :1000E0000000000000000000000000000000000010 -:1000F0000000000000000000000000000000000000 -:1001000000000000000000000000000000000000EF -:1001100000000000000000000000000000000000DF -:1001200000000000000000000000000000000000CF -:1001300000000000000000000000000000000000BF -:1001400000000000000000000000000000000000AF -:10015000000000000000000000000000000000009F +:1000F000000000000000F0F0A0A0E08C107C1C1CB0 +:100100001C9C000000000000000030FF555500005E +:10011000000000000000000000002D2F3D3D000009 +:100120000000000000003E00020028FC00FC0A0A5B +:10013000A0A00102408000000000000000000000BC +:10014000000000000000000000000000A9AAAAAA08 +:100150007F4F7040AAAC30AC00000000AA55AA55F1 :10016000000000000000000000000000000000008F :10017000000000000000000000000000000000007F -:10018000000000000000000000000000000000006F +:10018000000000000000000000002000000000004F :10019000000000000000000000000000000000005F -:1001A000000000000000000000000000000000004F -:1001B000000000000000000000020000000000003D -:1001C00000004000000000000000000000000000EF +:1001A0000000000000000008000020000000000027 +:1001B0000400000000000000000200800000008039 +:1001C000000000000000000000000000200000000F :1001D000000000000000000000000000000000001F -:1001E000000020000100C0000080000000000000AE -:1001F0000000000000008800000010000000000067 -:1002000000001000000000000000000000000000DE -:10021000100040000000000000000000000000008E -:1002200000001000000000000000000000000000BE -:1002300000000000000000000000000000000000BE -:10024000000000000000009000000000000000001E -:1002500040000000400000004000000000000000DE -:10026000000000001000040000000020000000005A -:10027000000000000000410000000000000000003D -:10028000000000000000000000000000000000006E -:10029000000000000200000000000210000000004A -:1002A0000000020000000000000002000000020048 -:1002B0000000020000000000000008000000000034 -:1002C000000000000000000000000808000002001C -:1002D0000200000002000200000000000800000010 -:1002E00000400000080000080000000802000000B4 -:1002F000000808000200000000000800084000009C +:1001E000000000000000000000000000000000000F +:1001F00000000000000000000000400000000000BF +:1002000000000000000000000000000000000000EE +:1002100000020000000000000000000000000000DC +:1002200000000000000000000000000000000000CE +:10023000000000000000000000000000002000009E +:100240000040000000000000000000A000000000CE +:10025000000000000000000000000000000000009E +:10026000000000000000000000000000000000008E +:10027000000000000000000000000000000000007E +:10028000080008000000020000000000000020003C +:100290000000000300000000000000000840020011 +:1002A000000008000000000000000800020000003C +:1002B000080008000000000000000000000300002B +:1002C0000000080000000000000000000080400066 +:1002D0000200010002000200000000000000000017 +:1002E00000000800090000000000000008000000F5 +:1002F00000000880088000000000000000000000EE :1003000000000000000000000000000000000000ED -:1003100000000000000000000000000000000000DD -:1003200000000000000000000000000000000000CD +:10031000800000100000000000000000000000004D +:100320000000008400000000000000000000000049 :1003300000000000000000000000000000000000BD -:1003400000000000000000000000000000000000AD -:10035000000000000000000000000000000000009D -:100360000008000000000000000000000010000075 -:100370000000000000000084008200000000000077 -:10038000000000000000000000000000000000006D -:10039000000000000000000000000000000000005D -:1003A000000000000000000000000000000000004D -:1003B000000000000000000000000000000000003D -:1003C000000000000000000000000000000000002D -:1003D000000000000000000000000000000000001D -:1003E00000000000000000000000000000000020ED -:1003F00000000000000000000000000000100000ED -:1004000000110000000000000000000000000000DB -:1004100000000000000000000000000000000000DC -:100420000000000000000000000000000000008448 -:1004300000000000000000000000000000000000BC -:1004400000000000000000000000000000000000AC -:10045000000000000000000000000000000000009C -:10046000000000000000000000000000000000008C -:10047000000100000000000000000000000000007B +:10034000000000000000000000000000000000208D +:1003500080000000100800100000000000000000F5 +:100360000040000000000400000000000000000049 +:10037000000000000020002000000000000000003D +:100380000000000000080000000000000000000065 +:1003900000100009000000000000000000008200C2 +:1003A000000000000010000000000000C00000007D +:1003B0000280008001080000000000000000000032 +:1003C00000000088000004A004210000C000A0007C +:1003D000C0000000000800028202000020000000AF +:1003E00000000000000000200000000000000000ED +:1003F00000000000000000000000000000000000FD +:1004000000050000000000000000001000100000C7 +:1004100000000000000000A000000000000000003C +:1004200000C0000000100088000000100000410023 +:1004300000008040000808C0000800000000000024 +:1004400000840000002000A0802180000000410006 +:1004500021004100030000010001000100008000B4 +:10046000000000002100000000010000000000006A +:10047000000000000000000000000000000000007C :10048000000000000000000000000000000000006C -:100490000000000008000000000000000000000054 -:1004A000000000000000000000000000000000004C -:1004B000000000000000000000000000000000003C -:1004C000000000000000000000000000000000002C -:1004D000000000000000000000000000000000001C -:1004E00000000000000000400000000000200000AC -:1004F00000000400000000000000000000000040B8 +:10049000000008000000004000000000000500000F +:1004A00000000000008000000000000001000000CB +:1004B000C0000100000000000000000088000000F3 +:1004C0008200000000000480000091000400000091 +:1004D0004000820040000000000082000000000098 +:1004E000000000000000000000000000000000000C +:1004F000000000000000000040002000000000009C :1005000000000000000000000000000000000000EB -:1005100000000000000008000000000000000000D3 -:1005200000000000000000000000000000000000CB -:1005300000000000000000000000000000000000BB -:10054000000000000040000000000000000000006B -:10055000000000000000000000001000000000008B -:100560000008000000000040000000000000000043 -:10057000000000088000001000A000000000000043 -:10058000000000080000000800000000000000005B +:1005100000000000000000000000000000000000DB +:1005200000000000000000040000000000000400C3 +:1005300000000000040000000000000000000000B7 +:10054000008800000000000000200000040080007F +:100550000000000000000000000000000000000893 +:10056000000000000000000000000000000000008B +:100570000000000000000000000088008000000073 +:10058000000000000000000000000000000000006B :10059000000000000000000000000000000000005B -:1005A000000000000000000000000000000000004B -:1005B000000000000000000000000000000000003B -:1005C0000000000300000000000000080000000020 -:1005D00000000000200000000000000000000000FB -:1005E0000000000000000000000000000200000009 -:1005F00000000000000000000000000200000000F9 -:1006000000080000000000000000000000000000E2 -:1006100000000000000000000000000000000000DA -:1006200000000000000000000000030000000000C7 -:1006300000000000000000000000000000000000BA -:1006400000000000000000000000000000000000AA -:10065000000000000000000000000000000000009A -:10066000000000000000000000000000000000008A -:10067000000000000000000000000000000000007A -:10068000000000000000000000000000000000006A +:1005A000000000009000000001000000000090002A +:1005B00000100000C000000001000000000040002A +:1005C000000300008200000300000400001004404B +:1005D00004A000000000820000C11000A000000084 +:1005E00020000000000082008200000000000000E7 +:1005F00001400000000000000000000008000008AA +:100600000000000000080008000500C0000000888D +:1006100000C0000000000002001000000088000080 +:1006200000000000000000880300400000100000EF +:100630000000000000000000000002A0110000C047 +:100640008084000000000082008200008000000121 +:1006500080A18021000000004100002080000000F7 +:1006600000008300000000000000210021000000C5 +:1006700000002084000000000000000000000000D6 +:100680000000000000000000000000000021002128 :10069000000000000000000000000000000000005A -:1006A000000000000000000000000000000000004A -:1006B000000000000000000000000000000000003A -:1006C0000003000000000000000000000000000027 -:1006D000000000000000000000000000000000001A -:1006E00000000000010000000000002100000000E8 -:1006F0000000000000000000008000000100000079 -:1007000000000000002100000000000000000000C8 +:1006A000000000000000000004000400000500003D +:1006B0000009000000100000000000000000000021 +:1006C0000000000000008800C000000900000000D9 +:1006D00000000200000200004000400040404000D6 +:1006E0000000000940000800820000000000000037 +:1006F00000000000000900000000000000020000EF +:1007000000000000000000000008000800000000D9 :1007100000000000000000000000000000000000D9 -:1007200000000000000000000000000000000000C9 +:1007200000000000000000000000800080000000C9 :1007300000000000000000000000000000000000B9 :1007400000000000000000000000000000000000A9 -:100750000000000000000000000000000000000099 -:1007600041000000000040080008000000000000F8 -:1007700000000008000020000082002000000408A3 -:100780000008000000000000000009000000000058 +:100750000000000080000000000000000000000118 +:100760000000000000000000000000000000000089 +:100770000000000000000000000000000000000079 +:100780000000000000000000000000000000000069 :100790000000000000000000000000000000000059 -:1007A0000000000000000000000000000000000049 -:1007B0000000000000000000000000000000000039 -:1007C0000000000000000000000000000000000029 -:1007D0000000000000000000000000000000000019 -:1007E0000000000000000000000000000000000009 -:1007F00000000000000000000000A00200900010B7 -:1008000088880000000000000000000000000000D8 +:1007A0000000000100010001000000000000000046 +:1007B00000C000910000000000C000900000000098 +:1007C00041000000000002000000000000000000E6 +:1007D0000000C0C0008800888290004000A0000493 +:1007E00000020001A00085000000000000000001E0 +:1007F00000000000000040000000000000000000B9 +:100800000000C088909000089010000000000000D8 :1008100000000000000000000000000000000000D8 -:1008200000000000000000000000000000000000C8 -:1008300000000000000000000000000000000000B8 -:1008400000000000000000000000000000000000A8 -:100850000000000000000000000000000000000098 -:100860000000000000000000000000000000000088 -:1008700000000000000000000000000080800080F8 -:100880000000000000000000000000000000000068 +:100820000000000400200040004000000000000024 +:10083000000000800091000500050080008000009D +:1008400000008900100041000000000000000000CE +:100850000000000080800000008000800000000098 +:10086000008000800041C100030200000000001170 +:100870000008000300000500000000000000000068 +:100880000000000080008080008080800000000068 :100890000000000000000000000000000000000058 -:1008A0000000000000000000000000000000000048 -:1008B0000000000000000000000000000000000038 -:1008C0000000000000000000000000000000000028 -:1008D0000000000000000000000000000000000018 -:1008E0000000000000000000000000000000000008 -:1008F00000000000000000000000000000000000F8 -:1009000080040091808000000000000000000000D2 +:1008A0000000000000000000000000108000800038 +:1008B0000000808080008000000080800000000434 +:1008C00000008000000000000004000000000000A4 +:1008D00000000000000080008041008000800000D7 +:1008E000008380800080418003002040410500801B +:1008F000000000000009000000008000000000006F +:100900000000000000001180A10091009183000010 :1009100000000000000000000000000000000000D7 -:1009200000000000000000000000000000000000C7 -:1009300000000000000000000000000000000000B7 -:1009400000000000000000000000000000000000A7 -:100950000000000000000000000000000000000097 -:100960000000000000000000000000000000000087 -:100970000000000000000000000000000000000077 -:1009800010004000108490A0000000000000000053 +:1009200000000000000000040000000000000800BB +:1009300082000000C090080082000000C09000000B +:1009400004000000C0040000A000840100000000BA +:10095000000000000000000010008201A0040290CE +:10096000400082C00884820200C00100010001A092 +:10097000000400000000000000000000A0000000D3 +:10098000000000000000000002C009008500C091C6 :100990000000000000000000000000000000000057 -:1009A0000000000000000000000000000000000047 -:1009B0000000000000000000000000000000000037 -:1009C0000000000000000000000000000000000027 -:1009D0000000000000000000000000000000000017 -:1009E0000000000000000000000000000001000006 -:1009F00000000000000000000000000000000000F7 -:100A00000000C040001090910210000000000000A3 -:100A100000000000000000000000000000000000D6 -:100A200000000000000000000000000000000000C6 -:100A300000000000000000000000000000000000B6 -:100A400000000000000000000000000000000000A6 -:100A50000000000000000000000000000000000096 -:100A6000000000000000000000000000000000087E -:100A7000000900100000000000000000000000005D -:100A800000000000808000028002001000000000D2 -:100A90000000000000000000000000000000000056 -:100AA0000000000000000000000000000000000046 -:100AB0000000000000000000000000000000000036 -:100AC0000000000000000000000000000000000026 -:100AD0000000000000000000000000000000000016 -:100AE0000000000000000000000000000000000006 -:100AF00000000000000000000000000000000000F6 -:100B000000000000000000008000000080000000E5 -:100B100000000000000000000000000000000000D5 -:100B200000000000000000000000000000000000C5 -:100B300000000000000000000000000000000000B5 -:100B400000000000000000000000000000000000A5 -:100B50000000000000000000000000000000000095 -:100B60000000000000000000000000000000000085 -:100B70000000000000000000000000000000000075 -:100B8000000000000000000010001090009008001D -:100B90000000000000000000000000000000000055 +:1009A0000000000000000000000001000000000046 +:1009B000000800000090000008080000019000C03E +:1009C00004040000009000C000C0008800C000C106 +:1009D00000000000000000000000901000209002C5 +:1009E0008288020000004000C00000010100820176 +:1009F00001010000000040000000000100C000C133 +:100A0000000100000000000000001010000800902D +:100A10008210000000000000000000000000000044 +:100A20000000000000000000000000004000000086 +:100A30000000008000000080000080802100118004 +:100A40000080000000000080008000110091000282 +:100A500000C1000000000000000000008080008055 +:100A60008000008080000000000080000020034122 +:100A7000412111410000030000000000004000037C +:100A800000020002000000000000000080800080E2 +:100A900000808080000000000000000000000000D6 +:100AA0000000000000000000000000002100041110 +:100AB00003002000000000410000000080118020A1 +:100AC00080000000801000200000000000000000F6 +:100AD0000000000000000000000000000000801185 +:100AE00000850080800000000000800000002009D8 +:100AF0004000050003052100040000000400000080 +:100B00000000000000000000000000000000008263 +:100B100009890980031100000000000000000000A6 +:100B200000000000000000000000000000000100C4 +:100B30000001010001000000000100000000C001F0 +:100B4000100140000000C001000100888800000082 +:100B500000A000A000000000000000000000000055 +:100B6000C001044002400800A000A0200482C00090 +:100B70000001000000000000010000000000000073 +:100B80000000000000A000000000000000000000C5 +:100B900000100089000800000000000000000000B4 :100BA0000000000000000000000000000000000045 -:100BB0000000000000000000000000000000000035 -:100BC0000000000000000000000000000000000025 -:100BD0000000000000000000000000000000000015 -:100BE0000000000000000000000000000000000005 -:100BF00000000000000000000000000000000000F5 -:100C000000000000000000000000000000000700DD -:100C10004100000000000000000000000000000093 +:100BB000410002C800000000008200004300420023 +:100BC000000600C843000000008100004300000050 +:100BD000600000C8000000000000000000000000ED +:100BE0000000000600004300500000210000430008 +:100BF000600A600000C800005000840000C80000C7 +:100C00000000600000C84300000000000000000079 +:100C10000000818100E0070081000000000000006A :100C200000000000000000000000000000000000C4 -:100C300000000000000000000000000000000000B4 -:100C400000000000000000000000000000000000A4 -:100C50000000000000000000000000000000000094 -:100C60000000000000000000000000000000000084 +:100C30000000000000000000000000000000C300F1 +:100C4000C30000F00000C300000000000000C3006B +:100C5000000000000000000C008100000000000007 +:100C600000000000F00030308100E700F0E8CCD454 :100C70000000000000000000000000000000000074 -:100C8000000000000000000000000000FFFFC3990A -:100C90006C666C66000000000000000000000000B0 +:100C800000000000000000000F000F000000000046 +:100C900000000000000000008F40FF000000000086 :100CA0000000000000000000000000000000000044 :100CB0000000000000000000000000000000000034 -:100CC0000000000000000000000000000000000024 -:100CD0000000000000000000000000000000000014 -:100CE0000000000000000000000000000000000004 -:100CF00000000000000000000000000000000000F4 -:100D000000000000000000000000000000000000E3 -:100D1000C3996C663C660000000000000000000003 +:100CC000C300C30000F00000C30000003C3C000073 +:100CD000C300000000000000000000000000000051 +:100CE00000000000000090903030C100E700D0F01C +:100CF000ECCC00000000000000000000000000003C +:100D0000000000000000000000000F000F000000C5 +:100D100000000000000000000000CF00FF00000005 :100D200000000000000000000000000000000000C3 :100D300000000000000000000000000000000000B3 :100D400000000000000000000000000000000000A3 @@ -164099,403 +164099,403 @@ :100D90000000000000000000000000000000000053 :100DA0000000000000000000000000000000000043 :100DB0000000000000000000000000000000000033 -:100DC0000000000000000000000000000000000023 -:100DD0000000000000000000000000000000000013 -:100DE0000000000000000000000000000000000003 -:100DF00000000000000000000000000000000000F3 +:100DC00000000000000003030000000000003F3F9F +:100DD000000000000000F0F000000000F600F60047 +:100DE000000000000000000000007DDB999500007D +:100DF000F071F0F0699689860000000000000000A4 :100E000000000000000000000000000000000000E2 -:100E10000000666606F699BFFFFF000000000000B4 -:100E200000000000000000000000000000000000C2 +:100E10000000000000000000000000F300F361612A +:100E200002F10000000000000000000000000000CF :100E300000000000000000000000000000000000B2 -:100E400000000000000000000000000000000000A2 -:100E50000000000000000000000000000000000092 -:100E60000000000000000000000000000000000082 -:100E70000000000000000000000000000000000072 +:100E400000000000000000000303000000FF00009D +:100E50003F3F000000FF0000000000000000F6FF20 +:100E6000F6FF00000000000000000000569999996C +:100E70000000F08E0F0F708F62089B990000000039 :100E80000000000000000000000000000000000062 -:100E900000000000666604F70000664000000000E5 -:100EA0000000000000000000000000000000000042 -:100EB0000000000000000000000000000000000032 -:100EC0000000000000000000000000000000000022 -:100ED0000000000000000000000000000000000012 -:100EE0000000000000000000000000000000000002 -:100EF0000000000000000000000000000000006191 -:100F00000006000D000000000000000000000000CE -:100F100000000000000000610006000D000000005D -:100F200000000000000000000000000000000000C1 -:100F300000000000000000000000000000000000B1 -:100F400000000000000000000000000000000000A1 +:100E900000FF00FF000000000000000000FF04FB56 +:100EA000666600FF00000000000000000000000077 +:100EB00000000000000000000000000000610004CD +:100EC000C00D0000000000280C0012C003E3032A3C +:100ED0000C0D92C0038203280C00C2C00061000701 +:100EE000C09C000100000000000000000000100095 +:100EF00050380000000000003030000000000060AA +:100F00000007C009000000610004C00D000000617E +:100F10000006C009000000000000000000000061A1 +:100F20000036C005000800000000000000000000BE +:100F300000000000000000000000000000004F4F13 +:100F40000F0F000000000000000000000000000083 :100F50000000000000000000000000000000000091 -:100F60000000000000000000000000000000000081 +:100F60000000CC0F00300000000000000000000076 :100F70000000000000000000000000000000000071 -:100F800000000000FF000F0F000000000000000044 -:100F90000000000000000000000000000F0FFF0034 -:100FA0000000000000000000000000000000000041 +:100F80005524000000AA00FFFF0000000000000040 +:100F9000000000000C004100000000000000000004 +:100FA0000400040000000000000000000000000039 :100FB0000000000000000000000000000000000031 -:100FC0000000000000000000000000000000000021 +:100FC00045EF05AF00000000000000000000000039 :100FD0000000000000000000000000000000000011 -:100FE0000000000000000000000000000000000001 +:100FE0000000000033F0FFCF000000000000000010 :100FF00000000000000000000000000000000000F1 -:10100000000000000000FF000F0F000000000000C3 -:1010100000000000000000000000000000000F0FB2 -:10102000FF000000000000000000000000000000C1 +:1010000000008020090300CC0000C3D700140000BA +:101010000000000000000404820000000000000046 +:1010200000000000000000000000000000000000C0 :1010300000000000000000000000000000000000B0 -:1010400000000000000000000000000000000000A0 -:101050000000000000000000000000000000000090 +:101040000000100000080000000000000000000088 +:1010500000000F0F0F0F0000000000000000000054 :101060000000000000000000000000000000000080 :101070000000000000000000000000000000000070 -:101080000000000000000000000000000000000060 +:10108000000000000A0A00001CBF000F2A022A020A :101090000000000000000000000000000000000050 -:1010A0000000000000000000000000000000000040 +:1010A000000000000000000030CF004500000000FC :1010B0000000000000000000000000000000000030 -:1010C0000000000000000000000000000000000020 -:1010D0000000000000000000000000000000000010 +:1010C0000000000010000008000000000000000008 +:1010D000000000000F0D0F0D0000000000000000D8 :1010E0000000000000000000000000000000000000 :1010F00000000000000000000000000000000000F0 -:1011000000000000000000000000000000000000DF -:1011100000000000000000000000000000000000CF -:1011200000000000000000000000000000000000BF +:1011000000000000000000000A0A1CBF000F2A02B5 +:101110002A020000000000000000000000000000A3 +:101120000000000000000000000030CF30CF0000C1 :1011300000000000000000000000000000000000AF -:10114000000000000000000000000000000000009F -:10115000000000000020000000000000000000006F -:10116000000000001000000000000000000000006F -:101170000000000000040002000000000000000069 -:10118000400000000000000040004000410000005E -:1011900000000400000000048800010000000000BE -:1011A0002000400008000000008020002000010016 -:1011B000000004008804000410000000000000008B -:1011C000000000000004000000000000000000001B -:1011D00000000000400200030000000000000000CA +:10114000000000000000000000000010000000008F +:10115000000000000000000000000400000000008B +:10116000000000000000000000000000000000007F +:10117000000000000004000000000000000000006B +:10118000000000000000000400000000000000005B +:10119000000000000000000400000000000000004B +:1011A000000000000000000000000000000000003F +:1011B000000000000000000000000000000000002F +:1011C000000000000000000000000000000000001F +:1011D000000000000000000000000000000000000F :1011E00000000000000000000000000000000000FF -:1011F00000000000400000020000000000000000AD -:1012000000000000000000900000800000002000AE -:101210000000000085000000000000004000000009 -:10122000000000000000800000004020400000009E -:101230000400000080000002000000000000000028 +:1011F00000000000000000000000000000000000EF +:1012000000000000000000000000000000000000DE +:1012100000000000000000000000000000000000CE +:1012200000000000000000000000000000000000BE +:1012300000000000000000000000000000000000AE :10124000000000000000000000000000000000009E -:101250000000000000000000000000001008000076 -:10126000000000000000000000000000000400106A -:1012700090000000000000000000000110000004C9 -:10128000A00000040000A000000400000500000011 -:1012900004000008000400200000001020000004EA -:1012A0000004024000400004000800001020000478 -:1012B0000000000000040020019008000000000071 -:1012C000000800000000000000000000000800000E -:1012D000000000000000000000000000000000000E -:1012E00000080000000000000000000000080000EE -:1012F00000000000000000000000000000000008E6 -:101300000008001002001000000000080000A00803 -:10131000000080000000000800010000000180843F -:1013200000081001000000C00000001000000011C3 -:10133000000000000084000800830420000000007A +:10125000000000000000400000000200020000004A +:1012600000800000000000000000000000000000FE +:10127000000000000000000000000003000000006B +:10128000000000000000000000000000000000005E +:10129000000000000000000000000000000000004E +:1012A000000000000000000000000000000000003E +:1012B000000000000000000000000000000000002E +:1012C0000000000800000000000000840000000092 +:1012D000000000000000000080000004000000008A +:1012E00000000004000000000000000800000000F2 +:1012F00000000000000000000000000800000000E6 +:101300000000000000000040000000000088000015 +:1013100000000000000000000000000000020000CB +:1013200000000000000000000000000000000000BD +:1013300000000000000000000000000000000000AD :10134000000000000000000000000000000000009D -:10135000000000000000000000000000000000008D -:10136000000000000000000000000000000000007D -:10137000000000000000000000000000000000006D +:101350000000000000000000000000000008000085 +:1013600088000000200000000000000000000000D5 +:10137000000000000000000000000000002000004D :10138000000000000000000000000000000000005D -:101390000080000000050000000000400000000088 -:1013A00004080000000800000021000000000021E7 -:1013B00000030120000800050021000200210002B6 -:1013C000000000000000000000000000000000001D -:1013D000000000000000000000000000000000000D -:1013E00000000000000000000000000000000000FD -:1013F00000000000000000000000000000000000ED -:1014000000000000000000000000000000000000DC -:1014100000000020000000000000000000000000AC -:10142000008400000000090000000000000000002F -:10143000008400A004A10000008400A000000000BF +:10139000000000000000000000000000000000004D +:1013A000000000000000000000000000000000112C +:1013B000000000000000000000000000000000002D +:1013C00000000010001000000000000000000000FD +:1013D000000000000010000000000000008200205B +:1013E000000000000000800000000000000000007D +:1013F000000000000000000000C00000000000002D +:101400000000000000000800000000004100000093 +:1014100000000000000000000000000000000000CC +:1014200000000000000000000000000000000000BC +:1014300000000000000000000000000000000000AC :10144000000000000000000000000000000000009C -:10145000000000000000000000000000000000008C -:10146000000000080000000000000000000000086C -:1014700000000040000000000040004000000000AC +:101450000040000000000040000000080000000004 +:10146000000000000000000000000000000000007C +:10147000010000000000C0000000010000000000AA :10148000000000000000000000000000000000005C -:10149000000008400400200000002041000000116E -:1014A000C005000500000041000000040000A0404D -:1014B0001021004008000021000800080021000859 -:1014C00000000021000000000000000000000000FB -:1014D000000000000000000000000000000000000C +:10149000000000000000000000000000000000004C +:1014A000000000000000000000000000000000003C +:1014B000000000000000000000000000000000002C +:1014C000000000000000000000000000000000001C +:1014D000000000000000000000000000000100000B :1014E00000000000000000000000000000000000FC -:1014F00000000000000000000000000000000000EC +:1014F000000004A000000000000000000400000044 :1015000000000000000000000000000000000000DB -:101510000000000000008000800000A080000000AB -:1015200000000000000000000000000000010000BA -:101530000008000000040084000800000000000013 +:1015100000000000000000000000000000000000CB +:1015200000000000000000000000000000000000BB +:1015300000000000000000000000000000000000AB :10154000000000000000000000000000000000009B -:10155000000000000000000000000000000000008B -:10156000000000000000000000000000000000007B -:10157000000000000000000000000000000000006B -:10158000000000000000000000000000000000005B -:1015900000000000000000000000000000A010009B -:1015A000000204404040820300000000004082002E -:1015B000080000008300000000000000000000415F -:1015C00000210810000000080000000000000000DA -:1015D000000000000000000000000000000000000B -:1015E00000000000000000000000000000000000FB -:1015F00000000000000000000000000000000000EB -:1016000000000000000000000000000000000000DA -:1016100000000000000000000000000000000005C5 -:101620000000000080000000000000000000000139 -:10163000000080A0200040000084000000000000A6 -:10164000000000000000000000000000000000009A -:10165000000000000000000000000000000000008A +:101550000000000000080000000000000000000083 +:1015600010000000200000000003000000800008C0 +:10157000000000004000000000000000A00000008B +:101580000000000000000000000000000800000053 +:10159000000000000000000000000000000000004B +:1015A000000000000000000000000000000000003B +:1015B000000000000000000000000000000000002B +:1015C0000000000000000000000000000000000813 +:1015D00000000000000000000000000000100000FB +:1015E00000008000008880840000000000000004EB +:1015F0000584000000008084000000C0000000009E +:101600000000000000000000000000000000008456 +:1016100000000000000000000000000000000000CA +:10162000000000000000000000A00000000000001A +:101630000000000000000000000000000084000026 +:101640000000000000000000000000030000000097 +:101650000000000000000000000000000800000082 :10166000000000000000000000000000000000007A -:10167000000000000000000000000000000000006A -:10168000000000000000000000000000000000005A -:10169000000000000000000000000000000000004A -:1016A0000000000000210008000800210000822145 -:1016B00000080021000800000009000000210011BE -:1016C0000000C0050010820000080021000000009A +:1016700000048420000000004000A10200000000DF +:101680000002A000000000000000000001000000B7 +:101690000000000000000000000200000000000048 +:1016A000000000000000000000000000000000003A +:1016B000000000000000000000000000000000002A +:1016C0000000000000000002000000000000000018 :1016D000000000000000000000000000000000000A :1016E00000000000000000000000000000000000FA -:1016F00000000000000000000000000000000000EA -:1017000000002000000800000000000000000000B1 +:1016F0000000000100010000000080000400000064 +:1017000000000000000000000000000000000400D5 :1017100000000000000000000000000000000000C9 -:1017200000000000000400000000000000000000B5 -:101730000000000000080004000000000008000095 -:10174000000000000000000000A0000000080000F1 +:1017200000000000000000000000000000000000B9 +:1017300000000000000000000000000000000000A9 +:101740000000000000000000000000000000000099 :101750000000000000000000000000000000000089 :101760000000000000000000000000000000000079 -:101770000000000000000000000000000000000069 -:101780000000000000000000000000000000000059 -:101790000000000000000000000000000000000049 -:1017A00004090040008800A1008882C00000C01029 -:1017B00001010100C1010001000000000000000063 -:1017C000024090020082108840A09000001000109B +:1017700000000000000000C000900000000000C059 +:1017800000900000000000C0009000000000000079 +:1017900000C00090000000000000000000000000F9 +:1017A0000000000000000000000000000000000039 +:1017B0000000000000000000000000000000000029 +:1017C0000000000000000000000000000000000019 :1017D0000000000000000000000000000000000009 :1017E00000000000000000000000000000000000F9 -:1017F00000000000000000000000000000000000E9 -:1018000000000000000000000000000000000000D8 -:1018100000000000000000000000000000000000C8 -:101820000000118821800210000400000000000068 -:101830008000081141411008001000000000000065 -:10184000000000808004008000098080800000800B +:1017F00003000000000000002080008000000000C6 +:1018000000800080000000000080008000000000D8 +:1018100000000080008000000000000000000000C8 +:1018200000000000000000000000000000000000B8 +:1018300000000000000000000000000000000000A8 +:101840000000000000000000000000000000000098 :101850000000000000000000000000000000000088 -:101860000000000000000000000000000000000078 -:101870000000000000000000000000000000000068 -:101880000000000000000000000000000000000058 -:101890000000000000000000000000000000000048 -:1018A000000000008080C00480A0880080008002CA -:1018B00000808000418021004191080009008200E1 -:1018C00002002100418082218491A100800000114A -:1018D0008083800000000000000000000000000085 +:101860000000000000000000000000001000080060 +:101870004100000000000000000000000000000027 +:101880008080000000008000808000000000800058 +:1018900080800000000000008000808000000000C8 +:1018A0000000000000000000000000000000000038 +:1018B0000000000000000000000000000000000028 +:1018C0000000000000000000000000000000000018 +:1018D0000000000000000000000000000000000008 :1018E00000000000000000000000000000000000F8 -:1018F00000000010000000000000000000000000D8 -:1019000000000000000000000000000000000000D7 -:1019100000000000000000000000000000000000C7 -:1019200000000000000008C0110040110900100074 -:10193000901010A0820000080100000901000400BE -:101940001000C000850000401001A11091000800A7 -:101950000200202104000000000000000000000040 +:1018F00000000100000000000000000000000000E7 +:101900000000C0A0000000008400C09000000000A3 +:101910008400C0900000000000008400C09000001F +:1019200000000000000000000000000000000000B7 +:1019300000000000000000000000000000000000A7 +:101940000000000000000000000000000000000097 +:101950000000000000000000000000000000000087 :101960000000000000000000000000000000000077 -:101970000000000000000000000000000000000067 -:101980000000000000000000000000000000000057 -:101990000000000000000000000000000000000047 -:1019A0000000000000000000C0900010021108A01C -:1019B0000000000800000008000000000000000116 -:1019C000008500880000000040100010A1100808E9 -:1019D00010040010904002A0000000000000000071 +:101970000000000100010000000000010000000163 +:101980000000009000C000000000009000C00000B7 +:101990000000009000C0000000000000009000C0A7 +:1019A0000000000000000000000000000000000037 +:1019B0000000000000000000000000000000000027 +:1019C0000000000000000000000000000000000017 +:1019D0000000000000000000000000000000000007 :1019E00000000000000000000000000000000000F7 -:1019F00000000000000000000000000000000000E7 -:101A000000000000000000000000000000000000D6 -:101A100000000000000000000000000000000000C6 -:101A20000000000000000000000000800089110894 -:101A3000808000000080000002800003210302413A -:101A4000001100400083000000098003008090899D -:101A500089890000008080808080000000000000F4 +:1019F0000004000500210041000900030010000060 +:101A000000110000008000800000000000800080C5 +:101A10000000000000800080000000000000008046 +:101A20000080000000000000000000000000000036 +:101A300000000000000000000000000000000000A6 +:101A40000000000000000000000000000000000096 +:101A50000000000000000000000000000000000086 :101A60000000000000000000000000000000000076 -:101A70000000000200000000000000000000000064 -:101A80000000000000000000000000000000000056 -:101A90000000000000000000000000000000000046 -:101AA000000000000000000000000000028080C173 -:101AB00088000000000080410000800010882000A5 -:101AC00000000011000080800000800082212100C1 -:101AD00088002010001000C100000000000000007D +:101A700000000090000800000011000000000000BD +:101A8000000080000041000000008005000300000D +:101A900000008005000300000000000080050040F9 +:101AA0000000000000000000000000000000000036 +:101AB0000000000000000000000000000000000026 +:101AC0000000000000000000000000000000000016 +:101AD0000000000000000000000000000000000006 :101AE00000000000000000000000000000000000F6 -:101AF00000000000000100000000000000000000E5 -:101B000000000000000000000000000000000000D5 -:101B100000000000000000000000000000000000C5 -:101B20000000000000000000000000000000109015 -:101B3000A0080988000090008209880002000003C4 -:101B400001004000020100040408C00208009001E6 -:101B500002008500890002009041048840000000D6 +:101AF0000000000000900001000000010000000054 +:101B0000000000009000000100880000C0000000FC +:101B100000009000C0000000000088000000C0002D +:101B20000000000090000000000000000000000025 +:101B300000000000000000000000000000000000A5 +:101B40000000000000000000000000000000000095 +:101B50000000000000000000000000000000000085 :101B60000000000000000000000000000000000075 -:101B700000000000000000810000430000000000A1 -:101B80000000000000000000000000000000000055 -:101B90000000000000000000000000000000000045 -:101BA0000000000000000000000000000000000035 -:101BB000000000E0070042000000000007004206AD -:101BC000000000E0000041000000000000000000F4 -:101BD00000000000070000000000000007004200B5 +:101B7000000000000000008100C843000000880051 +:101B800000C8000000000041000043008800008100 +:101B9000000043000000008100004300000000003E +:101BA0000081000043000000000000000000000071 +:101BB0000000000000000000000000000000000025 +:101BC0000000000000000000000000000000000015 +:101BD0000000000000000000000000000000000005 :101BE00000000000000000000000000000000000F5 :101BF00000000000000000000000000000000000E5 -:101C000000000000000000000000000000000000D4 -:101C100000000000000000000000000000000000C4 -:101C200000000000000000000000000000000000B4 -:101C30000000A0F5A0F570207F2F0F3C0F0F0F0FB5 -:101C40000000B2B2B2B2000000003F033F030C0C30 -:101C50000C0CC3FBFFFF41EF41EB82D782D700ACF6 -:101C6000FFAC0000000000000000000000000000C9 +:101C000000000000000000000000FFFF000000FFD7 +:101C100000003C3C000000FF00003C3C000000FFD6 +:101C2000000000003C3C000000FF0000000000003D +:101C300000000000000000000000000000000000A4 +:101C40000000000000000000000000000000000094 +:101C50000000000000000000000000000000000084 +:101C60000000000000000000000000000000000074 :101C70000000000000000000000000000000000064 -:101C80000000000000000000000000000000000054 -:101C90000000000000000000000000000000000044 -:101CA0000000000000000000000000000000000034 -:101CB00000000000AAFF005570207F2F553C550FF3 -:101CC0000F0FFFFFB2B2B2B2000000003F033F03AC -:101CD0000C0C0C0C00003C04414F4141828782D720 -:101CE00000ACFFAC0000000000000000000000009D +:101C8000000000000000000000000000FFFF000056 +:101C900000FF00003C3C000000FF00003C3C000056 +:101CA00000FF000000003C3C000000FF00000000BE +:101CB0000000000000000000000000000000000024 +:101CC0000000000000000000000000000000000014 +:101CD0000000000000000000000000000000000004 +:101CE00000000000000000000000000000000000F4 :101CF00000000000000000000000000000000000E4 -:101D000000000000000000000000000000000000D3 -:101D100000000000000000000000000000000000C3 -:101D200000000000000000000000000000000000B3 -:101D3000000000000000101010BAAAAA2B2BFFC34D -:101D400000C300830001000000000000000000004C -:101D50000000F0F000FFFFCFDFCFFFF00F00C5C5A0 -:101D6000C5C5C303C3F3000000000000000000006D +:101D0000000000000000000000000000FF000000D4 +:101D1000FFFF0000FF000000FF000000FF000000C8 +:101D2000FF0000000000FF00000000FFFFFF0000B8 +:101D300000000000000000000000000000000000A3 +:101D40000000000000000000000000000000000093 +:101D50000000000000000000000000000000000083 +:101D60000000000000000000000000000000000073 :101D70000000000000000000000000000000000063 -:101D80000000000000000000000000000000000053 -:101D90000000000000000000000000000000000043 -:101DA0000000000000000000000000000000000033 -:101DB0000000000000000000BFBF15BFFF002B2B7C -:101DC000FFC300C30083000100000000000000000A -:101DD00000000000C3C3AAAA000C080CFFF00F000B -:101DE0000000FFFF550355F3000000000000000055 +:101D80000000000000000000000000000000FF0054 +:101D9000000000000000FF000000FF000000FF0046 +:101DA0000000FF0000000000FF00000000FFFFFF38 +:101DB0000000000000000000000000000000000023 +:101DC0000000000000000000000000000000000013 +:101DD0000000000000000000000000000000000003 +:101DE00000000000000000000000000000000000F3 :101DF00000000000000000000000000000000000E3 -:101E000000000020000000A0000000000000000012 -:101E100000000000000000000000000000000000C2 -:101E200000000000000000000000000000000000B2 -:101E30000000000000000000000000610009000137 -:101E4000000000000E080000000080610003000197 -:101E5000000000610006000D000100610006000D99 -:101E6000000000000008000000000000000000006A +:101E00000560002E00090000006100068009200026 +:101E10000363032E0C0D92C0038203280C0092C0B2 +:101E2000038203280C0092C00000038203280C00E8 +:101E300082C0000000000000000000000000000060 +:101E40000000000000000000000000000000000092 +:101E50000000000000000000000000000000000082 +:101E60000000000000000000000000000000000072 :101E70000000000000000000000000000000000062 -:101E80000000000000000000000000000000000052 -:101E90000000000000000000000000000000000042 +:101E80000000000000003C0000F000000000CFC394 +:101E9000CFC300000000C3C3C3C3000000000000A4 :101EA0000000000000000000000000000000000032 -:101EB00000000000000000000000000050505F5FC4 -:101EC000FF0FFF0F0000000000000000FFAA5500F8 -:101ED000F000F0FF00000000C3C30F0F3C3CFA50BD -:101EE000FF00C3C30000000000000000000000006D +:101EB0000000000000000000000000000000000022 +:101EC0000000000000000000000000000000000012 +:101ED0000000000000000000000000000000000002 +:101EE00000000000000000000000000000000000F2 :101EF00000000000000000000000000000000000E2 -:101F000000000000000000000000000000000000D1 -:101F100000000000000000000000000000000000C1 +:101F000000000000000000003C0000F000000000A5 +:101F1000CFC3CFC300000000C3C3C3C30000000091 :101F200000000000000000000000000000000000B1 -:101F30000000000000000000000000000000505001 -:101F40005F5F000F000F0000000000000000FFAA0C -:101F500055002800EBFF00000000C3C30F0F3C3CFE -:101F6000FA50FF00C3C300000000000000000000A2 +:101F300000000000000000000000000000000000A1 +:101F40000000000000000000000000000000000091 +:101F50000000000000000000000000000000000081 +:101F60000000000000000000000000000000000071 :101F70000000000000000000000000000000000061 -:101F80000000000000000000000000000000000051 +:101F800000000000000000000000F5F5000F000058 :101F90000000000000000000000000000000000041 :101FA0000000000000000000000000000000000031 :101FB0000000000000000000000000000000000021 -:101FC000CFCFFFFFFFFF0F0F000000000000000059 -:101FD000FFF52A20F03CAA3C00000000FF3FFC3C3B -:101FE000FF3CFF3C07F704F4000000000000000085 +:101FC0000000000000000000000000000000000011 +:101FD0000000000000000000000000000000000001 +:101FE00000000000000000000000000000000000F1 :101FF00000000000000000000000000000000000E1 -:1020000000000000000000000000000000000000D0 +:10200000000000000000000000000000FFFF0000D2 :1020100000000000000000000000000000000000C0 :1020200000000000000000000000000000000000B0 :1020300000000000000000000000000000000000A0 -:1020400000000000303000000F0F00000000000012 -:102050000000DFD50A003C3CAA3C00000000C3039E -:10206000C000C300C30007F704F400000000000034 +:102040000000000000000000000000000000000090 +:102050000000000000000000000000000000000080 +:102060000000000000000000000000000000000070 :102070000000000000000000000000000000000060 -:102080000000100000000000000000000000000040 +:102080000000000000000000000000000000000050 :102090000000000000000000000000000000000040 -:1020A0000000200000000000000000000000000010 +:1020A0000000000000000000000000000000000030 :1020B0000000000000000000000000000000000020 -:1020C00000000000200000001000000010000000D0 -:1020D000000000000000C000000040000000000000 -:1020E000000000002003000020000000200040004D -:1020F00000000000000000000000000020000000C0 +:1020C0000000000000000000000000000000000010 +:1020D0000000000000000000000000000000000000 +:1020E00000000000000000000000000200000000EE +:1020F00000000000000000000000000000000000E0 :1021000000000000000000000000000000000000CF :1021100000000000000000000000000000000000BF -:10212000000000000000000000000000400000006F -:10213000000000000000000010024002000010003B -:10214000000041000000000000000000000000004E +:1021200000000000000000000000000000000000AF +:10213000000000000000000000000000000000009F +:10214000000000000000000000000000000000008F :10215000000000000000000000000000000000007F -:102160000000000000000000210000020008000044 -:10217000000000000000000002000000000000005D -:10218000000000000010000000000000000000003F -:102190000000000000000000020000040000000039 -:1021A000000000110000000000000000000000001E -:1021B00000000010020000001004000000000003F6 -:1021C0000000000400000000000002040000000401 -:1021D0000000000400400208000400400004000069 -:1021E0000000000000030004001100000003A00430 -:1021F00000080003001000050000000000000000BF -:1022000000000000000000000000000800080008B6 -:1022100000080000000000000000000000000000B6 -:102220000000000000000000000000080008000896 -:102230000008000000000000000000000000000096 -:102240000000000800000000000002080010000468 -:102250000008001000000000000000840008008456 -:102260000008008800000000080000020000008450 -:102270000002008400000088000800000000000048 -:10228000000000000000000000000000000000004E +:10216000000000000000000000000000000000006F +:10217000000000000000000000000000000000005F +:1021800000000000000008000000000000008200C5 +:10219000000000000000000000000000000000003F +:1021A00000000000000002000200004000000000EB +:1021B000000000000000000000000200000000001D +:1021C000000000000000000000000000000000000F +:1021D00000000000000000000000000004000000FB +:1021E00000000000000000000000000000000400EB +:1021F00000000000000000000000000000000010CF +:1022000000000000000000000000000000000000CE +:1022100000000000000000000000400000000088F6 +:1022200000000000000000000000000000000000AE +:10223000000000000000000000000000400000005E +:102240000000000800000000000000000000000086 +:10225000000000000000000000000000400000003E +:102260000000000800000000000000000000000066 +:10227000000000000000000000000000000000005E +:102280000008000000000000000000000000000046 :10229000000000000000000000000000000000003E :1022A000000000000000000000000000000000002E :1022B000000000000000000000000000000000001E -:1022C000000000000000000090000000000000007E +:1022C000000000000000000000000000000000000E :1022D00000000000000000000000000000000000FE -:1022E000000000000021000800000021000800009C -:1022F000000800000041000800000041000000004C +:1022E00000000000000000000000000000000000EE +:1022F00000000000000000000000000000000000DE :1023000000000000000000000000000000000000CD -:1023100000000000000000000000000000000000BD -:10232000008200000000000000000000000000002B +:102310000000000000000000000000001184000028 +:1023200000000000000000000000000000000000AD :10233000000000000000000000000000000000009D :10234000000000000000000000000000000000008D -:10235000000000000000000800A0000800000002CB -:102360000002000800000008000000000000000259 -:1023700000000000000000900000000800080000BD -:10238000000000000000000000000000000000004D -:1023900000000000004000000000000000000000FD -:1023A00000000000000000080000000000400040A5 -:1023B00000000000004000000011000000000000CC -:1023C0000000000000000008000000000000000005 -:1023D0000011000000050040002100210040002104 -:1023E00000080005000000050011000000000000CA -:1023F000004000000005000500030000001100007F +:10235000000000000000000000000000000000007D +:10236000000000000000000000000000000000006D +:10237000000000000000000000000000000000005D +:10238000000000000000000000400000000000000D +:1023900000040000000000000000000000400000F9 +:1023A000000000000000000000000000000000002D +:1023B000000000000000000000000000000000001D +:1023C000000000000000000000000000000000000D +:1023D00000000000000000000000000000000000FD +:1023E00000000000000000000000000000000000ED +:1023F00000000000000000000000000000000000DD :1024000000000000000000000000000000000000CC :1024100000000000000000000000000000000000BC -:10242000000000000000004000000000000000006C -:102430000000000000880000000000000000000014 -:10244000000000080008000000000000000000C0BC -:102450000000000000000008000000000000000074 -:1024600000000090001000000004000000A0000820 -:10247000000800A0008400000000009000000000A0 -:10248000004000000000000000000000000000000C +:1024200000000000000000000000000000000000AC +:10243000000000000000000000000000000000009C +:10244000000000000000000000000000000000008C +:10245000000000000000000000000000000000007C +:10246000000000000000000000000000000000006C +:10247000000000000000000000000000000000005C +:10248000000000000000000000000000000000004C :10249000000000000000000000000000000000003C -:1024A0000000000000000000000000000003000029 -:1024B0000000000800000000000000000000000014 +:1024A000000000000000000000000000000000002C +:1024B000000000000000000000000000000000001C :1024C000000000000000000000000000000000000C :1024D00000000000000000000000000000000000FC -:1024E00000000000000000000000004100000000AB +:1024E00000000000000000000000000000000000EC :1024F00000000000000000000000000000000000DC :1025000000000000000000000000000000000000CB :1025100000000000000000000000000000000000BB -:1025200000000000000000000000000000000000AB -:10253000000000000000000000000000000000009B -:10254000000000000000000000000000000000008B -:1025500000000000000000000002000000900900E0 -:102560000090000000080000040205000090000038 -:102570000000000000000002050000000040000014 -:102580000900000000200000000000000000000022 +:102520000004008811000500000000000000000009 +:102530000000008400000000000000000084000093 +:10254000000021000000000000000000000000006A +:10255000000000002100000000000000000000005A +:10256000000000000000000000000000000000006B +:102570000000000000000000000000000400000057 +:10258000000000000000000000000000000000004B :10259000000000000000000000000000000000003B -:1025A000000000000000000000000000000000002B -:1025B000000000000000000000000000000000001B -:1025C000000000000000000000000000000000000B +:1025A0000000000000000000000000000000000823 +:1025B0000000000000000000000000009002000089 +:1025C0000000000000000000000200000000900079 :1025D00000000000000000000000000000000000FB -:1025E00000000000001000000000000000000000DB -:1025F0000000004100000008000000000000000092 -:102600000000001000210041000000000000000058 +:1025E00000000000000000000000000000000000EB +:1025F00000000000000000000000000000000000DB +:1026000000000000000000000000000000000000CA :1026100000000000000000000000000000000000BA -:1026200002000000000000000000000000000000A8 -:102630000000000000000000000000001100000089 -:102640000000000000000000000000000000000882 +:1026200000000000000000000000000000000000AA +:10263000000000000000000000000000000000009A +:10264000000000000000000000000000000000008A :10265000000000000000000000000000000000007A -:1026600000000082000000000000200800C0000000 -:1026700000C0000009000000000000080008001071 -:102680000000209000C000000010000000000000CA +:10266000000000000000000000000000000000006A +:102670000000020000000000000000000000000058 +:10268000000000000000000000000000000000004A :10269000000000000000000000000000000000003A :1026A000000000000000000000000000000000002A :1026B000000000000000000000000000000000001A @@ -164593,193 +164593,193 @@ :102C70000000000000000000000000000000000054 :102C80000000000000000000000000000000000044 :102C90000000000000000000000000000000000034 -:102CA0000000000000000000000000000000000024 -:102CB00000000000000000004000000000000011C3 -:102CC0000000000000000000000000000000000004 -:102CD0000000000040000000200090000000000004 -:102CE00000000002000001040000010000000000DC -:102CF00000000004100020100000820820000100E5 -:102D0000001000000100C100C00088000010001089 -:102D10008803C00400002008C00020002100210416 -:102D20000000200000000000000000000000000083 -:102D30004040000000000000000080000000000093 +:102CA0000000000000000000000000000000020022 +:102CB000820400000000000000000000A0000000EE +:102CC00000000000000000000000000000002000E4 +:102CD00000040000000000000000000000000000F0 +:102CE00000000000000000000000000000000000E4 +:102CF0002000000400000000000000000080000030 +:102D000000000004000000000000000000000000BF +:102D100000000004000000000000000000000000AF +:102D200000000000000000000000000000000000A3 +:102D30000000000000000000000000000000000093 :102D40000000000000000000000000000000000083 -:102D500040400004000000000000000040000000AF -:102D6000009000000000000004014100200000006D -:102D70000040000000000000000000000000000013 -:102D8000040041000000400040000000000000007E -:102D90000000000000000000800000008000200013 -:102DA0008801009080000000000000080000000082 -:102DB0000000000000000200000000000008020007 -:102DC00000400200000000000010080400000000A5 -:102DD0000000004100000000A000000000410000D1 -:102DE00000040000000300000000000300080005CC -:102DF00000100005000000000208000308050000A4 -:102E0000204001042008201000040008400082082F -:102E1000000500410000A0030005824000400000C2 -:102E200010040090001000080000000000000000E6 -:102E30000000000000000000000000000000000092 -:102E40000000000000000000000400820040008438 -:102E5000000800000084008400C000820008000414 -:102E60000084000800080000000000840084008442 -:102E70000008000400040000000000000008000832 -:102E8000008288082010800480090000000080086B -:102E900000040008008208824108000400040004C5 -:102EA0000008000940100004008800000000000035 -:102EB000000000000000000000000000000000080A -:102EC00000000000000000000000000900000000F9 -:102ED00000000000000000000000000300100009D6 -:102EE00000080000000000100008000000000020A2 -:102EF0000000002100080010000010A100050005DE -:102F00000003000500020041200000020000000054 -:102F10000040000000400002000200090000000024 -:102F20000005000000400000000500100000000047 +:102D50000000000000000000000000000000000073 +:102D60000000000000000000000000000000000063 +:102D70000000000000000000000000000000002033 +:102D80000000000000010000000000000000000042 +:102D90000000000000000000000000000000000033 +:102DA0000000000000000000000000000000000023 +:102DB0000000000000000000000000400040000093 +:102DC0000000020000000000000000000000000001 +:102DD00000000000000000000000000000000000F3 +:102DE00000000000000000030000000000000000E0 +:102DF00000000000000000000000000000000000D3 +:102E000000000000000000000000000000000000C2 +:102E100000000000000002000000000000000000B0 +:102E20000000000002000000000800000000000890 +:102E3000000000000000004000000000030000004F +:102E4000000000000000000800080000000000086A +:102E50000000000000002000000000000000000052 +:102E60000000000000000008000000080000000052 +:102E7000000800000000000000000000000000004A +:102E80000000000000000000000800080000000032 +:102E9000000800000000000000000000000000002A +:102EA000000000000000000000040000000000001E +:102EB0000000000000000000000000000000000012 +:102EC00000000000010040000000000000000000C1 +:102ED00000000000000000000000000000000000F2 +:102EE00000000000000000000000000000000000E2 +:102EF00000000000000000000000000000000000D2 +:102F000000000000000000000000000000000000C1 +:102F100000000000000000000000000000000000B1 +:102F200000000000000000000000000000000000A1 :102F30000000000000000000000000000000000091 -:102F40000000000000000000000000000000000081 +:102F400000000000000020008000000000000000E1 :102F50000000000000000000000000000000000071 :102F60000000000000000000000000000000000061 -:102F70000001090000000000000000000002000045 -:102F80000000000000000000090820000000000010 -:102F900000000000000000400302000000000000EC -:102FA000000000820000008800000008000000000F -:102FB00000000000000000000005000000080008FC -:102FC00000000000000300000003000000090008EA -:102FD00000000000000000000000000000210004CC -:102FE0000009000000400000002100000000000077 -:102FF0002000000020000080000000000000000011 -:1030000000050000000008040010C000020000419C -:103010000400000000000000000000000010000498 -:103020000040000000080041C0000000000000094E -:103030000008008200A00008000000000008000056 -:103040000000000800000000000000840084000070 -:1030500000A041A0008400820082000800C000841B -:10306000004000080000000002C000000000000056 -:103070000000800000008084001000A000A000007C -:1030800000100082000000000000000000000004AA -:10309000000400080000008400000000204003A09D -:1030A000000408100082040000900084009041A0F9 -:1030B00020040000000000000000000800000000E4 -:1030C0000000000000000000000000000000900868 -:1030D00000050002000000000000000000000002E7 -:1030E000000000000021000000210000000000009E -:1030F00000050000000000000000000000000010BB -:1031000000020000004000008200000000000120DA -:103110000000004000100010004100000009000005 -:1031200000080005820008000009020001100008E4 -:1031300020009008000000000000000000000000D7 -:10314000000000000000000000000000000000007F +:102F70000000000000000000000000000000000051 +:102F80000000000000000000000000000000000041 +:102F90000000000000000000000000000000000031 +:102FA0000000000000000000000000000000000021 +:102FB00000000000000000000000004000040000CD +:102FC000000000040000008000000100000000007C +:102FD00000000000000000000000000000000000F1 +:102FE00000000000000000000800000000000000D9 +:102FF000000000000000000000008200000000004F +:1030000000000000000000000000000000000000C0 +:1030100000000000000000000000000000000009A7 +:103020000000000000000040000000000000000060 +:103030000000000000000000000000000000000090 +:103040000000000000000000000800002000000058 +:103050000000000000000000000000000000000070 +:103060000000000000000000000000000000000060 +:103070000000000000000000000000000000000050 +:103080000000000000000000000000000000000040 +:103090000000000000000000000000000000000030 +:1030A0000000000000000000000000000000000020 +:1030B0000000000000000000000000000000000010 +:1030C00000000000000000002000000000000000E0 +:1030D00000000000000000000000000000000000F0 +:1030E00000000000000000000000000000000000E0 +:1030F00000000000000000000000000000000000D0 +:1031000000000000000000000000000000000000BF +:1031100000000000000000000000000000000000AF +:10312000000000000000000000000000000000009F +:10313000000000000000000000000000000000008F +:1031400000000000000000000000800000040000FB :10315000000000000000000000000000000000006F :10316000000000000000000000000000000000005F :10317000000000000000000000000000000000004F -:1031800000000040000000000000000000000000FF -:1031900004010000400000000000000000000000EA -:1031A00000000000200000000000000000000800F7 +:10318000000000000000000000000000000000003F +:10319000000000000000000000000000000000002F +:1031A000000000000000000000000000000000001F :1031B000000000000000000000000000000000000F -:1031C00000000000000000000010000000000000EF -:1031D00000080000000000000008000800080000CF -:1031E00000000003000000000000000000102000AC -:1031F00000000000000000000000008000008810B7 -:103200000021000800080008000000000000000085 -:103210000021000400000004000300100000000072 -:1032200000410041000400000000200000000010E8 -:1032300088040000094100000008000800000000A8 -:10324000000000000000000000A0000000000000DE -:1032500000080084008400C02008000800A00200CC -:103260000082000820000000000000000000200094 -:10327000000800C000000000000021000004000061 -:1032800000A000000000000000040000000000009A -:103290000410048409040282004000002000090098 -:1032A00000820000000800000082008209820404FD -:1032B000080000A000848810000400000000000046 +:1031C00000000000000000000000000000000000FF +:1031D00000000000000000000000000000000000EF +:1031E00000000000000000000000000000000000DF +:1031F00000000000000000000000000000000000CF +:1032000000000000000000000000000000000000BE +:1032100000000000000000000000000000000000AE +:10322000000000000000000000000000000000009E +:10323000000000000000000000000000000000008E +:10324000000000000000000000000000000000007E +:10325000000000000000000000000000000000006E +:10326000000000000800080000000000000000004E +:10327000000000000000000000000000000000004E +:103280000000000000000800000000000000000036 +:10329000000000000000000000000000000000002E +:1032A0000000000000000800000000000000000016 +:1032B000000000000000000000000000000000000E :1032C00000000000000000000000000000000000FE :1032D00000000000000000000000000000000000EE :1032E00000000000000000000000000000000000DE -:1032F00000000000000000000000000090009002AC -:1033000000010009000000000400000000000000AF -:10331000000000000140008401010088000001015C -:103320000800000100000000000000000000000094 -:10333000000100000105019000084011000000009C +:1032F00000000000000000000000000000000000CE +:1033000000000000000000000000000000000000BD +:1033100000000000000000000000000000000000AD +:10332000000000000000000000000000000000009D +:10333000000000000000000000000000000000008D :10334000000000000000000000000000000000007D -:10335000000000000000000000000000000000006D +:10335000000000002000000000000000000000004D :10336000000000000000000000000000000000005D -:1033700000000000000000000000000000008000CD -:103380008000040300C000001000000000000000E6 -:10339000000000000000118009210408001000094D -:1033A0004008800000200000000000000000000233 -:1033B0000000004000101108400500C1808400009A +:10337000000000000000000000000000000000004D +:10338000000000000000000000000000000000003D +:10339000000000000000000000000000000000002D +:1033A000000000000000000000000000000000001D +:1033B000000000000000000000000000000000000D :1033C00000000000000000000000000000000000FD -:1033D00000000000000000000000000000000000ED +:1033D0000000000000000400210003004100000084 :1033E00000000000000000000000000000000000DD :1033F00000000000000000000000000000000000CD -:103400000200801100800200020000001100000094 -:1034100000000000000000000000891111A0081148 -:1034200000000300110010A00000000000000000D8 -:10343000090002000000040004000400800089402C +:1034000000000000000000000000000000000000BC +:1034100000000000000000000000000000000000AC +:10342000000000000000000000000000000000009C +:10343000000000000000000000000000000000008C :10344000000000000000000000000000000000007C -:10345000000000000000000000000000000000006C +:10345000000000000000000001000000000001006A :10346000000000000000000000000000000000005C :10347000000000000000000000000000000000004C -:1034800000000000900390A0080000000000000071 -:10349000000000000000000000000000900303A0F6 -:1034A000030000000100000000A100000000000077 -:1034B0000000000000000000010003840300A000E1 -:1034C00020010000000000000000000000000000DB -:1034D00000000000000000000000000000000000EC +:10348000000000000000000000000000000000003C +:10349000000000000000000000000000000000002C +:1034A000000000000000000000000000000000001C +:1034B000000000000000000000000000000000000C +:1034C00000000000000000000000000000000000FC +:1034D0000000000000000000010000008800A000C3 :1034E00000000000000000000000000000000000DC :1034F00000000000000000000000000000000000CC -:10350000000000000800000105200002000000008B -:103510000001000000000000000000000002001197 -:10352000840101840001000100010000000000008E -:10353000000000000000000000010001C010008930 -:103540000089A10000000000000000000000000051 -:103550000000000000110009000000100000000041 -:10356000000000000000000000000000000000005B +:1035000000000000000000000000000000000000BB +:1035100000000000000000000000000000000000AB +:10352000000001000000000000000000000000009A +:10353000000000000000000000000000000000008B +:10354000000000000000000000000000000000007B +:103550000000000000000000000008000000000063 +:1035600080000000000000000000000000000000DB :10357000000000000000000000000000000000004B -:1035800000000000000000000003051111100002FF -:103590000000002100050000000000000000008481 -:1035A00009830008110000400904004000040000E5 -:1035B00000000000000000041000022100118080C3 -:1035C0002103102191000000000000000000000015 -:1035D00000000000000000000000000000000000EB +:10358000000000000000000000000000000000003B +:10359000000000000000000000000000000010001B +:1035A0000000000008000000000000000000000013 +:1035B000000000000000000000000000000000000B +:1035C00000000000000000000000000000000000FB +:1035D0000000000000000000000000000000008863 :1035E00000000000000000000000000000000000DB :1035F00000000000000000000000000000000000CB -:103600000000000000000000880080C1108011113F -:10361000000000000000004000000000000000006A -:1036200000101141088011020080080402000320EC -:103630000000000000000000042111004100001003 -:1036400008848511830004100000000000000000C1 +:1036000000000000000000000000000000000000BA +:1036100000000000000000000000000000000000AA +:10362000004000000000000000000000000000005A +:10363000000000000000000000000000000000008A +:10364000000000000000000000000000000000007A :10365000000000000000000000000000000000006A -:10366000000000000000000000000000000000005A +:10366000004000000000000000000000000000001A :10367000000000000000000000000000000000004A -:10368000000000000000000000000900820811088E -:10369000C00000000000000000000000000000006A -:1036A0000000100189100940100000100100000006 -:1036B000010100000000000000000089010000007E -:1036C00000008509A0110300850000000000000033 -:1036D00000000000000000000000000000000000EA -:1036E00000000000000000000000000000000000DA +:10368000000000000000000000000000000000003A +:10369000000000000000000000000000000000002A +:1036A000000000000000000000000000000000001A +:1036B000000000000000000000000000000000000A +:1036C00000000000000000000000000000000000FA +:1036D00000000000000000000000000000C8000022 +:1036E0000000810000C80000000000000000000091 :1036F00000000000000000000000000000000000CA -:10370000000000000000000000000000000000E0D9 -:1037100007000000000000000000000000000000A2 -:1037200000000000000000E00700000000000000B2 -:10373000000000000000000000000000000000E0A9 -:1037400000000000000000E0000041000000000058 +:1037000000000000000000000000000000000000B9 +:1037100000000000000000000000000000000000A9 +:1037200000000000818100C843000000000000008C +:103730000000000000000000000000000000000089 +:103740000000000000000000000000000000000079 :103750000000000000000000000000000000000069 :103760000000000000000000000000000000000059 :103770000000000000000000000000000000000049 -:103780000000000000000000000000000000C3F383 -:10379000C6F66666FF0000000000000000000000A2 -:1037A000000000000000CFC3CF663C3CF0F00000FA +:103780000000000000000000000000000000000039 +:103790000000000000000000000000000000000029 +:1037A0000000000000000000000000000000000019 :1037B0000000000000000000000000000000000009 -:1037C000000000000000FF00CFCF0000000000005C +:1037C00000000000000000000000000000000000F9 :1037D00000000000000000000000000000000000E9 :1037E00000000000000000000000000000000000D9 :1037F00000000000000000000000000000000000C9 :1038000000000000000000000000000000000000B8 -:10381000C303C6066666FF0000000000000000004B -:103820000000000000000000C0C3C0663C3CF0F097 +:1038100000000000000000000000000000000000A8 +:103820000000000000000000000000000000000098 :103830000000000000000000000000000000000088 -:103840000000000000000000FF00CFCF30F030F09B +:103840000000000000000000000000000000000078 :103850000000000000000000000000000000000068 :103860000000000000000000000000000000000058 :103870000000000000000000000000000000000048 @@ -164792,474 +164792,474 @@ :1038E00000000000000000000000000000000000D8 :1038F00000000000000000000000000000000000C8 :1039000000000000000000000000000000000000B7 -:1039100000000000C3FFC3FF000000000000000023 -:10392000000000000000000000000000C300C3FF12 -:103930009F000000000000000000000000000000E8 -:103940000000000000000000000000006363F303BB -:10395000FF007F00000000000000000000000000E9 +:1039100000000000000000000000000000000000A7 +:103920000000000000000000000000000000000097 +:103930000000000000000000000000000000000087 +:103940000000000000000000000000000000000077 +:103950000000000000000000000000000000000067 :103960000000000000000000000000000000000057 :103970000000000000000000000000000000000047 :103980000000000000000000000000000000000037 -:10399000000000000000C300C300009909090000F6 -:1039A0000000000000000000000000000000C30054 -:1039B000C3FF06000000000000000000000000003F -:1039C00000000000000000000000000000006F6F19 -:1039D0006F6FFF007F00000000000000000000008B -:1039E00000000000000000610006000D0000000063 -:1039F00000000000000000000000000000000000C7 +:103990000000000000000000000000000000000027 +:1039A0000000000000000000000000000000000017 +:1039B0000000000000000000000000000000000007 +:1039C00000000000000000000000000000000000F7 +:1039D00000000000000000000000000000000000E7 +:1039E00000000000000000610006000D0000006102 +:1039F000000680050000000000000000000000003C :103A000000000000000000000000000000000000B6 -:103A1000000000000000000000610E09000100002D -:103A200000610006000D0000000000000000000022 -:103A300000610E090001000000610006000D000099 -:103A40000000000000000000006100040009000008 -:103A500000610000000900000000000000000000FC -:103A60000000000000000000000000000F0FC3C3B2 +:103A100000000000000000000000000000000000A6 +:103A20000000000000000000000000000000000096 +:103A300005610026800D000000000000000000006D +:103A40000000000000000000000000000000000076 +:103A50000000000000000000000000000000000066 +:103A60000000000000000000000000000000000056 :103A70000000000000000000000000000000000046 :103A80000000000000000000000000000000000036 -:103A90000000000000000000000003033F3FF0FFB3 -:103AA000000F00000000AAAAAAAA0000000000005F -:103AB00000000F000F0000F000F0FFC3FFC3571617 -:103AC00043020000000000000000F0F0FF003C0096 -:103AD000FFC37F0FFFFFFF00FF000000000000009A -:103AE00000000000000000000000000000000F0FB8 -:103AF000C3C3000000000000000000000000000040 +:103A90000000000000000000000000000000000026 +:103AA0000000000000000000000000000000000016 +:103AB0000000000000000000000000000000000006 +:103AC00000000000000000000000000000000000F6 +:103AD00000000000000000000000000000000000E6 +:103AE00000000000000000000000000000000000D6 +:103AF00000000000000000000000000000000000C6 :103B000000000000000000000000000000000000B5 -:103B100000000000000000000000000003033F3F21 -:103B2000F0FF000F000000003CFF00C30000000099 -:103B300000000000FC0CFC0CF03CF03CF0C3F0C3B7 -:103B40007F3E6B2A0000000000000000F0F0FF0044 -:103B50003C00FFC3020F0000F0F0F0F00000000096 +:103B100000000000000000000000000000000000A5 +:103B20000000000000000000000000000000000095 +:103B30000000000000000000000000000000000085 +:103B40000000000000000000000000000000000075 +:103B50000000000000000000000000000000000065 :103B60000000000000000000000000000000000055 -:103B70000000000000000000000000000000000045 +:103B7000000000000000000000FF30F30000000023 :103B80000000000000000000000000000000000035 -:103B90000000000000000000000000000000C3C39F -:103BA000C3C38282D7D70000000028EB28EB0000B7 -:103BB000000000000000AD08AD08000F0AFABE00CA -:103BC000BEFFF50000000000000000000000C3C3BD -:103BD000AFAF040407077F0FFFFF0F0F0F0F0000A9 +:103B90000000000000000000000000000000000025 +:103BA0000000000000000000000000000000000015 +:103BB0000000000000000000000000000000000005 +:103BC00000000000000000000000000000000000F5 +:103BD00000000000000000000000000000000000E5 :103BE00000000000000000000000000000000000D5 -:103BF00000000000000000000000000000000000C5 +:103BF00000000000000000000000F0F030F30000C2 :103C000000000000000000000000000000000000B4 :103C100000000000000000000000000000000000A4 -:103C20000F0F0F0F8282D7D70000000028EB28EB80 -:103C30000000000000000000AD08AD08000F0AFA07 -:103C4000BE00BEFFF5F5000000000000000000000F -:103C5000C3C30505F4F4F7F7020F00001414D7D717 -:103C600000000000000000800000000000000000D4 -:103C70000000000020000000A0000400040000007C -:103C8000000020000000208001000000000008006B -:103C90000000000001210200200020002000400060 -:103CA0000003000088000000200088008800400019 -:103CB00000000203000000000000000020042000BB -:103CC000200000008809000408882000001020005F -:103CD00000002002C0008810040002002000200024 -:103CE00008040000000000000002000000000000C6 -:103CF00000000000000080C0000000008000800084 -:103D00000000000080000000802020000000000073 -:103D1000800000000000080000000000000000001B -:103D20008000000000000000000000000000000013 -:103D30000000000000000000000020000000000063 -:103D400000000000000000000000800200002000D1 -:103D50000000000000010000000080008000000062 -:103D600000008000000000000000000000000000D3 -:103D70000000000040000000000000000200000001 -:103D80000004000000040084000920000004000476 -:103D900000000040080001000000010001080004CC -:103DA00001020040000000080010001000040000A4 -:103DB0000000000300000004001000050080000463 -:103DC0000020401000400004000400830089000926 -:103DD00000040010001001100003010400030000A3 -:103DE000000500C00004000000000000000000000A -:103DF00000000000000080000000000000000084BF -:103E0000000000080000000000200082800000097F -:103E100000000010030080080882008420C0408455 -:103E20000008040500080000000400040009000068 -:103E300000880000008420000040004000100202C2 -:103E40000084008380080008008400000010004007 -:103E500009080082000800884088000020830200D2 -:103E600000100004001000410000000000000000ED -:103E700000080000000000000040000000030000F7 -:103E800000000000001000210008000000210000D8 -:103E900000210080002120020021000000030021F9 -:103EA0000005000000080080000000210041002102 -:103EB0000008002100210008000000080040000860 -:103EC000004000080005010900100010004000211A -:103ED000000000020041000500000008040900087D -:103EE0000000000000410041001000000000000040 -:103EF00000000000000000000000000000000000C2 -:103F0000000000000000000000A000000000000011 -:103F1000000000C000040000800000000000000855 -:103F2000000000000010030000200000000000005E -:103F3000000000100000000800A0001000080000B1 -:103F4000030200000000400804000088000800A1EF -:103F5000001008100000000010820000000080A087 -:103F600000A0001000000382008441A000000000B7 -:103F7000000800000008000000008221000000414D -:103F8000000400000000000000000011000000001C -:103F90000021020000000004201120000021020086 -:103FA00008210000040504000100000300000000D7 -:103FB00008008200004100000021002100054008A7 -:103FC0008200200020418805050500110000C00086 -:103FD0000000A0000000A00082000000000000001F -:103FE0000008000400410000000300002000000061 -:103FF000000000000000000000000000008200003F -:104000000000001120000008000000C000080000AF -:10401000000011A00200008400018082800020C006 -:1040200000001100004080828000400003C00000BA -:10403000008400000000008809080000001000A0B3 -:104040008010028480848040009084A020A0009092 -:104050000082000000840040030400A00000004033 -:1040600000004000114041080082050800A0809037 -:104070000009400200410000000800414003002107 -:1040800000000008000800000003000800410009CB -:10409000000004000008020300210041000800099C -:1040A00000000808000000000021002100020011AB -:1040B00000000000000000050021000200000010C8 -:1040C00000000800000000000000000004200020A4 -:1040D00000000021080082090008C005C005000397 -:1040E0001021820040050040008001409000000047 -:1040F00000000000800000000000000000008000C0 -:10410000000000000000000000000000000000109F -:104110000000000080080000000000000000000017 -:104120000000000080000000000800000000000106 -:104130000000000000000540030000000000000037 -:1041400000000000800000000000000008C08001A6 -:1041500000890082000000000008000000100040FC -:1041600000000000000080100000002040A000A01F -:104170000010001000030008000000000000000014 -:104180000008000000000000000000000021000006 -:1041900000000005000001110000110300210000D3 -:1041A00000080000001000030021001000030000C0 -:1041B000004100030000004100210021000500052E -:1041C0000000004000080004000000000041000062 -:1041D00000042020000482080008000000030005FD -:1041E0000021002100850021001100400041000055 -:1041F00000100000080000000000000000000000A7 -:10420000000000000000000800820008000809000B -:10421000000000000200000020C01100200020C0AB -:104220000000008220000008004000880204000016 -:10423000000000A00000000040000000000000821C -:104240000000001000000000090000001100200420 -:1042500000401100200100000400000000000000E8 -:104260002000001000900210000040001102020027 -:1042700000000000000204000000010088000000AF -:10428000000000000000000000004001900000015C -:10429000C0A0900000C0008800040111C0100003FD -:1042A00001010101020000018888011090020890BC -:1042B00090900109000008010000040000000000C7 -:1042C0008400000000000000000000000000000169 -:1042D00000001084900804C0820001C0018440A046 -:1042E0000808000000000000000002009004908810 -:1042F0008482000000C18985001000004000000099 -:104300000000000000000000000000218303822064 -:104310000008808080000000000000114091020928 -:1043200000401108024080410008048041800000E4 -:104330008000000304A100048010000000000000C1 -:104340000000000000000000000000000000090064 -:10435000040400041100C1000000800004002000DB -:104360008080808000000000000000008011C110EB -:10437000808000800002104002850084040002005A -:1043800011000240000000001000020000800280C6 -:10439000041121030000001100008000A1001000A2 -:1043A00091001190C1800800C01189410000831064 -:1043B000A18091800080880010008800000000002B +:103C20000000000000000000000000000000000094 +:103C30000000000000000000000000000000000084 +:103C40000000000000000000000000000000000074 +:103C50000000000000000000000000000000000064 +:103C60000000200020002000200000002000200094 +:103C70000000000020002000000000000000820082 +:103C800000000000000000002000000020002000D4 +:103C900000000000200020000000000000002000C4 +:103CA0000000000000004000400020000000200054 +:103CB00020000000000020002000000000000000A4 +:103CC00020000000000000000000000000000000D4 +:103CD00000000000000000000000000000000000E4 +:103CE00000000000000000000000000000000000D4 +:103CF000000000000300000000A000000000000021 +:103D000000000000000000000000000000000000B3 +:103D1000000000000400000000000000000000009F +:103D20000000000000000000000000000000000093 +:103D3000000000000000040000000000000000007F +:103D40000000000000000000000000000000000073 +:103D50000000000000000000000000000000000063 +:103D60000000000000000000004000000000000013 +:103D70000000000000000040000000000000000003 +:103D80000000000000400040000000400000000073 +:103D90000000004002000000004000400000000061 +:103DA00000000000000000000000004000000000D3 +:103DB000000000000000020000400000004002007F +:103DC0000000000000000000000000400040000073 +:103DD0000000000000400000000000400040000023 +:103DE000000000000000000000000008004000008B +:103DF00003C00008000800000000000000080000E8 +:103E000000000000000000000000001000000000A2 +:103E1000000000080008000000000000000800008A +:103E20000000000000000000000000000000000092 +:103E3000000000000008000800000000000000086A +:103E40000000000000000000000000000000000072 +:103E5000000000000008000800000000000000084A +:103E60000000000000000000000000000000000052 +:103E70000000000000000000000000000000000042 +:103E8000000000000000C000000000000000000072 +:103E90000000000000000000000000000000000022 +:103EA0000000000000000000000000000000000012 +:103EB0000000000000000000000000000000000002 +:103EC00000000000000000000000000000000000F2 +:103ED00000000000000000000000000000000000E2 +:103EE00000000000000000000000000000000000D2 +:103EF0000000000000000000000040000000000082 +:103F000000000000000000000000000000000000B1 +:103F100000000000000000000000000000000000A1 +:103F20000000000000000000000000000000000091 +:103F30000000000000000000000000000000000081 +:103F40000000000000000000000000000040000031 +:103F50000000000000000000000000000000000061 +:103F60000000000000000000000000000000000051 +:103F70000000000010000000000000000000000031 +:103F800000000000820000000000000000000000AF +:103F9000000000008200000000000000000000009F +:103FA000000000008200000000000000000000008F +:103FB000000000000000820000000000000000007F +:103FC000000000000000820000000000000000006F +:103FD00000000000000000000000000000000000E1 +:103FE00000000000000000000000000000000000D1 +:103FF000000008000800100002000000000000009F +:1040000000000000000000000000000000040000AC +:104010000000080008000300050005000000000083 +:104020000000000000000000000000000000000090 +:10403000000000001000100003000000000000005D +:104040000000000000000000000000000000000070 +:10405000000000000800080003000000000000004D +:104060000000000000000000000000000000000050 +:104070000000000000000000000000000000000040 +:1040800040000000000000000000000000000000F0 +:104090000000000000000000000000000000000020 +:1040A0000000000000000000000000000000000010 +:1040B0000000000000000000000000000000000000 +:1040C00000000000000000000000000000000000F0 +:1040D00000000000000000000000000000000000E0 +:1040E00000000000000000000000000000000000D0 +:1040F00000000000000000000000000000000000C0 +:10410000000000C00000000000000000000000846B +:10411000000000000000000000000000000000009F +:10412000000000000000000000000000000000008F +:10413000000000000000000000000000000000007F +:1041400000000000000000000000000000840000EB +:10415000000000000000000000000000000000005F +:10416000000000000000000000000000000000004F +:10417000000000000000000000000000000000003F +:10418000000000000000000000000000000000002F +:10419000000000000000000000020000000000001D +:1041A000000000000000000000000000000000000F +:1041B00000000000000000000000000000000000FF +:1041C00000000000000000000000000000000000EF +:1041D00000000000000000080000000000000000D7 +:1041E00000000000000000000000000000000000CF +:1041F00000000000000000000000000000000800B7 +:104200000004080008000000000408000800000086 +:10421000000000000000000008000000000008008E +:10422000008808880800000000200800080000003E +:104230000000000008000000000000000000000076 +:10424000080000880800080000000020080008009E +:104250000000000000000800000000000000000056 +:10426000080000880800080000000020080008007E +:104270000000000000000800000000000000000036 +:10428000000000000000000000000000000000002E +:10429000000000000000000000000000000000001E +:1042A000000000000000000000000000000000000E +:1042B00000000000000000000000000000000000FE +:1042C00000000000000000000000000000000000EE +:1042D00000000000000000000000000000000000DE +:1042E00000000000000000000000000000000000CE +:1042F00000000000000000000000000000000000BE +:1043000000000000000000000000000000000000AD +:10431000000000000000000000000000000000009D +:10432000000000000000000000000000000000008D +:10433000000000000000000000000000000000007D +:10434000000000000000000000000000000000006D +:10435000000000000000000000000000000000005D +:10436000000000000000000000000000000000004D +:10437000000000000000000000000000000000003D +:10438000000000000000000000000000000000002D +:10439000000000000000000000000000000000001D +:1043A000000000000000000000000000000000000D +:1043B00000000000000000000000000000000000FD :1043C00000000000000000000000000000000000ED -:1043D0000000090010118800831140902080000027 -:1043E00000008000000080000000000080009000BD -:1043F00020000204A100880084030800028000005D -:10440000000000000001000000000000000000109B -:1044100000A0000101219000020010C00800A100CE -:104420000300A090A19008C0A100090104010000B0 -:104430001100A140909000100900008809000000C0 -:104440000000C0000000C0000000000000000000EC -:1044500000000000000000000900211191C085A0AB -:10446000C0001000080088000800C000000008001C -:1044700089A0050004919100A000080185000408AE -:104480000000000008010000000000000000000023 -:1044900000000001010000001004000890C004A00A -:1044A00008040011001102000001000100000001D9 -:1044B000C090000210038811100001090101088852 -:1044C000000000020010000000A00000000000003A -:1044D000000000010100000000000011000000C009 -:1044E00000A108010010008488A100000000000065 -:1044F0000000008900200284000100C0011000C1FA -:1045000004A0004100108021000300000000000012 -:104510000000000910400808000900000080800029 -:1045200000808000119141A180040008210308410E -:1045300010088011004180210008000210C01021E5 -:1045400080100000000000800000008000000000DB -:1045500000000000000411020041000000200011D2 -:104560000041008880200089009140840000000004 -:104570000000000000040083008404400009209033 -:10458000002100900800110011001110000000002F -:1045900000000002108010000400101100000088CC -:1045A000000000002104C0004080101108020891A2 -:1045B000410008088020808000808011080080026F -:1045C0000900801100000000000000000000000051 -:1045D0000000000000000840800010000009801169 -:1045E00000098000000900110080000000000003A5 -:1045F0000000008000002182A08010001003000451 -:10460000008080800003018800000000000000009E -:104610000000000000000110000000000000020087 -:104620000441024002000504118821C0000001027B -:10463000010900C001010820A020021010010000A3 -:10464000088810C0080000000000000000100000F2 -:1046500000000000000000000300900000000400C3 -:1046600008000288028810000000002000040000FA -:10467000000000000040000005402010C000400085 -:104680000083C0A0104004000000000000000000F3 -:104690000000000000000000000000E0000000003A -:1046A0000000000007008200000000E00700004159 -:1046B000000000E000008121000000E0070042004F -:1046C00000000000070000000000000000000000E3 -:1046D00000000000000000000000000000E00000FA -:1046E0000000000000000700008200000000000041 -:1046F00000000000000000000000000000E00700D3 -:104700000000000000E000000000000000000000C9 +:1043D00000000000000000000000000000000000DD +:1043E00000000000000000000000000000000000CD +:1043F00000000000000000000000000000000000BD +:1044000000000000000000000000000000000000AC +:10441000000000000000000000000000000000009C +:10442000000000000000000000000000000000008C +:10443000000000000000000000000000000000007C +:10444000000000000000000000000000000000006C +:10445000000000000000000000000000000000005C +:10446000000000000000000000000000000000004C +:10447000000000000000000000000000000000003C +:10448000000000000000000000000000000000002C +:10449000000000000000000000000000000000001C +:1044A000000000000000000000000000000000000C +:1044B00000000000000000000000000000000000FC +:1044C00000000000000000000000000000000000EC +:1044D00000000000000000000000000000000000DC +:1044E00000000000000000000000000000000000CC +:1044F00000000000000000000000000000000000BC +:1045000000000000000000000000000000000000AB +:10451000000000000000000000000000000000009B +:10452000000000000000000000000000000000008B +:10453000000000000000000000000000000000007B +:10454000000000000000000000000000000000006B +:10455000000000000000000000000000000000005B +:10456000000000000000000000000000000000004B +:10457000000000000000000000000000000000003B +:10458000000000000000000000000000000000002B +:10459000000000000000000000000000000000001B +:1045A000000000000000000000000000000000000B +:1045B00000000000000000000000000000000000FB +:1045C00000000000000000000000000000000000EB +:1045D00000000000000000000000000000000000DB +:1045E00000000000000000000000000000000000CB +:1045F00000000000000000000000000000000000BB +:1046000000000000000000000000000000000000AA +:10461000000000000000000000000000000000009A +:10462000000000000000000000000000000000008A +:10463000000000000000000000000000000000007A +:10464000000000000000000000000000000000006A +:10465000000000000000000000000000000000005A +:10466000000000000000000000000000000000004A +:10467000000000000000000000000000000000003A +:10468000000000000000000000000000000000002A +:10469000000000000000000000000000000000001A +:1046A000000000000000000000000000000000000A +:1046B00000000000000000000000000000000000FA +:1046C00000000000000000000000000000000000EA +:1046D00000000000000000000000000000000000DA +:1046E00000000000000000000000000000000000CA +:1046F00000000000000000000000000000000000BA +:1047000000000000000000000000000000000000A9 :104710000000000000000000000000000000000099 -:104720000000FF00FF00C0A0CFAF0055F055000310 -:1047300000030000000000000000906F9A65C3694C -:10474000C3CCE8AAE8AAAAAAAAAA0000000000000E -:104750007F7F3E3E0000000000000000FFC33C00E1 -:1047600000000000AF87FF82143CD7FF000000006C -:104770000F00FFF00000000000000000C30FAAAA15 -:10478000F3F5F3F53CC33CC30F03FFF30000000057 +:104720000000000000000000000000000000000089 +:104730000000000000000000000000000000000079 +:104740000000000000000000000000000000000069 +:104750000000000000000000000000000000000059 +:104760000000000000000000000000000000000049 +:104770000000000000000000000000000000000039 +:104780000000000000000000000000000000000029 :104790000000000000000000000000000000000019 -:1047A000000000007070F0F0C0A0CFAF0055F055D1 -:1047B000000300030000000000000000906F906FF5 -:1047C000C369C333E8AAE8AAA0A0AFAF0000000005 -:1047D0000000434302020000000000000000FFC38D -:1047E0003C00000000002D057D001400D7C3000030 -:1047F00000000F0FFFFF0000000000000000C30FCB -:10480000AAAA030503053FC33FC30F03FFF300003C +:1047A0000000000000000000000000000000000009 +:1047B00000000000000000000000000000000000F9 +:1047C00000000000000000000000000000000000E9 +:1047D00000000000000000000000000000000000D9 +:1047E00000000000000000000000000000000000C9 +:1047F00000000000000000000000000000000000B9 +:1048000000000000000000000000000000000000A8 :104810000000000000000000000000000000000098 -:104820000000000000002C2CEFEF417D000F3C3514 -:104830003C35F535FFFF000000007FFFFFFFBEBEE7 -:104840001414FFAF5000FFFF00AA5555F5F5000006 -:104850000000000000000F0F00000000000000003A -:1048600000000000000000000F00FFF00A0A5F5F78 -:10487000F5F5A0A0AAFFAAFF000000003C3CFCFC4C -:104880000F3C0F3CC5FFC500FFDFFFDF30503F5F2F +:104820000000000000000000000000000000000088 +:104830000000000000000000000000000000000078 +:104840000000000000000000000000000000000068 +:104850000000000000000000000000000000000058 +:104860000000000000000000000000000000000048 +:104870000000000000000000000000000000000038 +:104880000000000000000000000000000000000028 :104890000000000000000000000000000000000018 -:1048A00000000000000000002020E3E3417DF0FF55 -:1048B0003C353535F535000000000000FFFFFFFFF7 -:1048C000BEFFB400FFFF0000FF5500005555050571 -:1048D000000000000000F0F0FFFF000000000000FA -:1048E000000000000000000000000F00FFF000FFCB -:1048F0003CFFF7F5A2A0F3F3FCFC00000000FFFF73 -:10490000FCFC0F3C0F3CC5FFC500FFDFFFDF3F5F36 -:104910003F5F00610006000D000000610006000D11 -:104920000000006100070005000000000008000012 -:1049300000000061000500090000006100000001A6 -:10494000000000610006001900000061000E000D6B +:1048A0000000000000000000000000000000000008 +:1048B00000000000000000000000000000000000F8 +:1048C00000000000000000000000000000000000E8 +:1048D00000000000000000000000000000000000D8 +:1048E00000000000000000000000000000000000C8 +:1048F00000000000000000000000000000000000B8 +:1049000000000000000000000000000000000000A7 +:104910000000000000000000000000000000000097 +:104920000000000000000000000000000000000087 +:104930000000000000000000000000000000000077 +:104940000000000000000000000000000000000067 :104950000000000000000000000000000000000057 -:1049600000000000006100050001000000610E0E63 -:10497000000D000000614006000D00010000000075 -:1049800000000000806100060015000000610007C3 -:10499000001900000F003CFF07F707F700000000B8 -:1049A00000000000FFEF002CCFCFAA0F0000000096 -:1049B00000000000CF00CFFFA0A0F5F57D41FF0073 -:1049C000BEBEAEAA00000000C0FF00AFFAFA0505A7 -:1049D00003CFFF0000000000000000000000000006 -:1049E000000000000000F0F0FFFF00FF00FF0000EB -:1049F00000005716430200000000F053005300006F -:104A0000000000000000FB04FA05AAAAAAAA000000 -:104A1000000004FF34FF0F003C00FFFFF0F0000037 -:104A2000000000000000FFC700040C0CAA0F0000EB -:104A3000000000000000C000C0FF00FF00FF5D514B -:104A4000FF008282A2AA0000000000FF00EFFAFA35 -:104A50000505CF3333C00000000000000000000057 -:104A6000000000000000000000000F0F0CCF0CCF72 -:104A7000000000007F3E6B2A00000000FF530F5330 -:104A80000000000000000000FB04FA05AAA2AAAA88 -:104A9000000000003CFF3CFF00000000C3FFC3001B -:104AA0000000000000AA55FFCFCF0C0C0FAA0FAAE0 -:104AB0000000000000000000F3F30303B4B4B4B43A -:104AC0003F1FFFFF1010BFBF00000000AAAAA00AEE -:104AD000C3405CDF00FF5A5A0000000000000000E5 -:104AE00000000000000000000000E8E8E8E800FF27 -:104AF00055550000000055415040000000000000E6 -:104B0000000000000000000000000000FF000000A6 -:104B1000FFFF55D75557C000C10000000000550FDA -:104B2000550F0000000000AA55FFEFC72C0400003D -:104B3000FFFF000000000000000053F30303B4B4C3 -:104B4000F5B4030B000030103FBF00000000AAAA1C -:104B5000AAAADF5C40C300FF5A5A00000000000010 -:104B6000000000000000000000000000E8E8E8E8A5 -:104B700000FF555500000000554150400000000066 -:104B80000000000000000000000000000000FF0026 -:104B90001000DFFF55D75557CF00CB0000000000B5 -:104BA0000000000000000000000000000000000005 -:104BB00000000000000000000080008000004000B5 -:104BC0000000C00000000000840084008208820011 -:104BD00000058200840088008500018800038800A9 -:104BE0002000840084050000000820002000200030 -:104BF0002000000020002005840400080084200517 -:104C0000200020002000000004052004201082085D -:104C100088008810881088058400848085880000BA +:104960000000000000000000000000000000000047 +:104970000000000000000000000000000000000037 +:104980000000000000000000000000000000000027 +:104990000000000000000000000000000000000017 +:1049A0000000000000000000000000000000000007 +:1049B00000000000000000000000000000000000F7 +:1049C00000000000000000000000000000000000E7 +:1049D00000000000000000000000000000000000D7 +:1049E00000000000000000000000000000000000C7 +:1049F00000000000000000000000000000000000B7 +:104A000000000000000000000000000000000000A6 +:104A10000000000000000000000000000000000096 +:104A20000000000000000000000000000000000086 +:104A30000000000000000000000000000000000076 +:104A40000000000000000000000000000000000066 +:104A50000000000000000000000000000000000056 +:104A60000000000000000000000000000000000046 +:104A70000000000000000000000000000000000036 +:104A80000000000000000000000000000000000026 +:104A90000000000000000000000000000000000016 +:104AA0000000000000000000000000000000000006 +:104AB00000000000000000000000000000000000F6 +:104AC00000000000000000000000000000000000E6 +:104AD00000000000000000000000000000000000D6 +:104AE00000000000000000000000000000000000C6 +:104AF00000000000000000000000000000000000B6 +:104B000000000000000000000000000000000000A5 +:104B10000000000000000000000000000000000095 +:104B20000000000000000000000000000000000085 +:104B30000000000000000000000000000000000075 +:104B40000000000000000000000000000000000065 +:104B50000000000000000000000000000000000055 +:104B60000000000000000000000000000000000045 +:104B70000000000000000000000000000000000035 +:104B80000000000000000000000000000000000025 +:104B900000000000000000000000000020002000D5 +:104BA00000000000200000000000000000000000E5 +:104BB000000000000000000000002088200020000D +:104BC00000000000200000000000000000000000C5 +:104BD00000000000000000000000008800038800C2 +:104BE0002000000000002000000000000000000085 +:104BF000000000000000000000000000008800002D +:104C000000000000000000000000000000000000A4 +:104C1000000000000000000000000000000800008C :104C20000000000000000000000000000000000084 -:104C3000000000000000000000002008200200002A -:104C40004100000000004000000000900000000053 -:104C500000000000000000000000100040080000FC +:104C30000000000000000000000000000004000070 +:104C40000000000000000000000000000000000064 +:104C50000000000000000000000000000004000050 :104C60000000000000000000000000000000000044 -:104C70000000000000000000000000000001000330 -:104C8000000000000000000000000900000000001B -:104C900000000000000000000000000009081020D3 -:104CA00000000000000000090000000000000000FB -:104CB000000000030000000000040000000000806D -:104CC00000050004000000000005000400000000D2 -:104CD0000004000400000009000900410000000079 -:104CE00000000000000000040000000400000000BC -:104CF0000010004100030000000900090003000942 -:104D00000080000000100010000000000000000003 -:104D100000000040000500410000000400110005F3 -:104D20000040000000000000000000000010000033 -:104D300000000000000000000000008400000010DF -:104D400000080000000800000000000000100084BF -:104D50000010000000080008000000A0000000840F -:104D60000000000000100008000000000082008227 -:104D700000880084001000080008000000040008FB -:104D800000000008000800880084000800000008F7 -:104D90000008108800000088000820000008008437 -:104DA000210400820000000000000000000000005C -:104DB000000800000040000800000041000000055D -:104DC0000009200300030021000500100005000079 -:104DD000000000050041001000100000000800085D -:104DE000000520090000002102210021900000415F -:104DF000001000080008000300100021001000054A -:104E00000021000090100041000300050003001085 -:104E10000009000000210010000000050000000350 -:104E2000000800004140000000A000000000000059 -:104E30000008400002080000001000000000000010 -:104E400000880000C102000800840000000000008B -:104E5000200800080008000000000000001000A06A -:104E600010A0000080A00000000800A000080008BA -:104E70000000000000100000008800000084000016 -:104E80000008000000880040000200080000000246 -:104E9000000841000210000000A0084000000000CF -:104EA00000C0004000A0A0A0000000000000000022 -:104EB0000000000800000000000000030041001195 -:104EC00000000000000000000000000000000000E2 -:104ED00000008800000000008800000000000000C2 -:104EE00000000000000000000000000500000000BD -:104EF000000000030000000000004000900090004F -:104F00000000000008000000000082008200A000F5 -:104F100002000400000090000800084100050000A5 -:104F2000000000000800C000820000A00000000097 -:104F30000000000000000000000000C000000000B1 -:104F40000000008400820000000000880082000051 -:104F500000000000000000000000008200840090BB -:104F6000000000A00084000000000000020000100B -:104F7000008200C000840000410000000004000026 -:104F80000000000000000000000000C0004000021F -:104F9000000000840090001000000090030000104A -:104FA0000000008208100010000000000000000057 -:104FB0000000000000000021000000004000000090 -:104FC00000080000004000000000902100410000A7 -:104FD00000410000004100000000004100410000CD -:104FE000000800090000000300000002000000416A -:104FF0000000000008000010004100000000004018 -:105000000040000000410003001000000008000004 -:10501000000082009041000500000805000000002B -:10502000082100000800C000000000052021000049 -:105030000008000000100000000000000000020254 -:105040000000000000020084000000C00500100005 -:10505000200000A00000000800080002000000027C -:1050600005A00500110020100510098811A00000FE -:10507000000000000000110000000000000000001F -:10508000000400C0000000000010200000880002A2 -:10509000001000000000008400000000000000007C -:1050A0000000200800881100000000100008001017 -:1050B00000000000000000210000002100000000AE -:1050C0000000002100100005000800040008000591 -:1050D00000040209C0000005000088219009902109 -:1050E000002100100021020400020005002100112F -:1050F000000000000005001000090005004000004D -:105100000000004000000041000500049000080875 -:10511000002100050000000000090421C0009004E7 -:1051200000080004C000000920410800A041040359 -:10513000400000000008000000C000000000000067 -:105140000000000000000900000000000000000056 -:1051500000000000000011900000008200820000AA -:10516000000000C000840000001000C0200000000B -:10517000000000000000008200400000000000006D -:10518000000000000200000002000000000000001B +:104C70000000000000000000000000000000000430 +:104C80000000000000000000000000000000000024 +:104C90000000000000000000000000000000000113 +:104CA00000000000001000100000000000000000E4 +:104CB0000000000000000000000000000000008074 +:104CC0000040004000000000000000000000000064 +:104CD0000000000000000000000000000000008054 +:104CE00000000000000000000000000000000000C4 +:104CF00000000000000000000000000000000000B4 +:104D00000080000000000000000000000000000023 +:104D10000000000000000000000000000000000093 +:104D2000008000000900000000000000000000C03A +:104D300000000000000000000088000000000000EB +:104D40000008000000000400000000000000000057 +:104D50000000000000000000000000000000000053 +:104D60000408000000000000000000000000000037 +:104D70000000000000000000000000000000000033 +:104D8000000000080000000000000000000000001B +:104D900000000000000040000000000000000000D3 +:104DA00000000004000000000005002100000000D9 +:104DB000000000000000000000000041000088002A +:104DC00000000000000000000000000000000000E3 +:104DD00000000000000000000000000000000000D3 +:104DE00000000000000000000000000000000000C3 +:104DF00000000000000000000000000000000000B3 +:104E000000000000000000000000000000000000A2 +:104E10000000000000000000000000000000000092 +:104E20000000000000000000000000000000000082 +:104E30000000000000000000000000000000000072 +:104E4000000000000000000003000300000000005C +:104E50000000000000000000000000000000000052 +:104E60000000000000000000000000000000000042 +:104E70000000000000000000000000000000000032 +:104E80000000000000000000000000000000000022 +:104E90000000000000000000000000000000000012 +:104EA000000000000000000082008200400082003C +:104EB00000008200820082008200400082008200A6 +:104EC00000008200820082008200C0000400820094 +:104ED00000008200820082008200400040008200C8 +:104EE00000008200820082000000820082008200B6 +:104EF00082000000820082008200000082008200A6 +:104F0000820000008200820082000800820082008D +:104F1000000000000000820082000000000000008D +:104F20000000000000000000000000000000000081 +:104F3000000000000000000000000000000005006C +:104F40000000000000000000000000000000000061 +:104F500000000000000040004000000000000000D1 +:104F60000000000000000000000000000000000041 +:104F700041000000000000000000000000000000F0 +:104F8000050000000000000000000000000000001C +:104F90000000000000000000000000000000000011 +:104FA0000000000000000000000000000000000001 +:104FB000C00000008200C0000000000000000000EF +:104FC00000000000000000000800000000000000D9 +:104FD00000000000A0000000000000000000000031 +:104FE00000000000000000000000080000000800B1 +:104FF0000000C00000000000C00000000000000031 +:1050000000000000000000000000000000000000A0 +:105010000000000000000000000000000000000090 +:105020000000000000000000000000000000000080 +:105030000000000000000000000000000000000070 +:105040000000000000000000000000000000000060 +:105050000000000000000000000000000000000050 +:105060000000000000000000000000000000000040 +:105070000000000000000000000000000000000030 +:105080000000000000000000000000000000000020 +:105090000000000000000000000000000000000010 +:1050A0000000000000000000000000000000000000 +:1050B0000000080000000800080000000004A00034 +:1050C00000000000000000000000000000000800D8 +:1050D000900008000000A000080000000000000090 +:1050E00000000000000000000000000000000400BC +:1050F0000000000008000000A00008000000000000 +:10510000C0000000000000000000000000000000DF +:105110001000000008000000A000080000000000CF +:10512000200000000000000000000000000000005F +:10513000000000000000000000000000000000006F +:10514000000000000000000000000000000002005D +:10515000000000000000000000000000000000004F +:10516000000000000000000000000000000000003F +:10517000000000000000000000000000000000002F +:10518000000000000000000000000000000000001F :10519000000000000000000000000000000000000F -:1051A000000000080082000000C000000000008233 -:1051B0000010092000000000000000010000840031 -:1051C00000000108000000000002848400000000CC -:1051D00000010000000000000000000100000400C9 -:1051E00000000102000001000004040800000000AB -:1051F00000010000000000000000000000010000AD -:105200000000000001080000C0000010C082000083 -:10521000C0000001000000000000000000010000CC -:105220000000000001020101C0000004C082000073 -:10523000C0000001000000000000000000080000A5 -:1052400000000010038000111100000000000000A9 -:105250000000004100000000000000000008000005 -:105260008000001003000011030000808080000017 -:1052700000000041000000000000000000000008E5 -:10528000000000000011088000048200008080807F -:105290000000800000030000000000000000000883 -:1052A00000000000000340000402A1000080808094 -:1052B0000000800000030000000009000000000062 -:1052C0000000090000000400020089000040040002 -:1052D000000000000000802000002000000000000E -:1052E000000009000000020040008580004010001E -:1052F00000000000000080090000000040000000E5 -:105300000000000002000000100004000300000084 -:105310000300000000000080800400000500000081 -:10532000000000000200000009001000A0000000C2 -:105330000300000000000080800900000000000061 -:105340000000000000000000000084004002000196 -:105350000100020000000000C00100000100000088 -:1053600000000000000000000100850040C00001B6 -:105370000084C00000000000C00000000000010028 -:105380000000000000000000000000008200C1A03A -:1053900000000184A000000000C0820100000000A5 -:1053A0000000000000000000000000004100054077 -:1053B00000000100C000000000C0820000000000EA -:1053C0000000000000000000000084000008000051 -:1053D00001000100000000000001000000000000CA -:1053E0000000000000000000000084000008000031 -:1053F000C0000000000000000001000000000000EC -:10540000000000000000000000000000100000404C -:10541000000011000000000000000000000000007B -:10542000000000000000000000000000840100A057 -:10543000000001000000000000000000000000006B -:1054400000000000000000000000000200100080CA -:105450000000050004000000000000410000000002 -:1054600000000000000000000000000500100080A7 -:10547000000091000000000000000041000000005A -:1054800000000000000000000000000000110021EA -:1054900002800000C1000200000000000041000086 -:1054A00000000000000000000000000000110020CB -:1054B000000000004100000000000000004100006A -:1054C000000080000091000000100000C1000000FA -:1054D00000410000000900000000000000000284FC -:1054E0000020800000C1000000020000C100000098 -:1054F000000000000009000000000000000005049A -:10550000000000408000008400000000000009004E -:10551000000000C1800000200000004100400000A9 -:1055200009030000800000020000000000000400E9 -:10553000000000C100000040000000410020000009 -:1055400005030000080000100000000088000800AB -:10555000000000C188000000000000000000000002 -:1055600001C1000120000040000000008800080088 -:10557000000000C0840000000000000000000000E7 -:105580000090000000012000004000000000020028 -:10559000C0000000000982000001000000010001BD -:1055A000000000910000040000830000000088005B -:1055B000C00000000005A000000000000001000184 -:1055C0000000008500000000000000000000000056 -:1055D00000000000811200E0070048000000000009 -:1055E0000000000A000000000000000000000000B1 -:1055F00000000000841200E007005042000000009C -:10560000000000000000000000000000000000009A -:10561000000000000000811200E007004842000086 -:1056200000000000484200000000000000000000F0 -:10563000000000000000811200E007004842000066 -:1056400000000000484200000000000000000000D0 +:1051A00000000000000000000000000000000000FF +:1051B0000000000000010001000100C00001A0018A +:1051C00000C1018300000101004000040001000152 +:1051D00000C0000000010001000100C00001A001AA +:1051E00000C10083000041010082000200010001B3 +:1051F00000C00000000000010001000100C000012B +:10520000A00100C100830000000100400020000157 +:10521000000100C0000000010001000100C0000109 +:10522000A00100C1008300000001004000840001D3 +:10523000000100C0000000410041004100C00041E9 +:10524000004100C0104100410241000000800041C7 +:10525000004100C0000000410041004100C0004189 +:1052600000410090204100410241000000800041C7 +:10527000004100C00000000000410041004100C0AA +:1052800000410041009020410041404100000000E9 +:105290000041004100C0000000410041004100C049 +:1052A00000410041009020410041404100000000C9 +:1052B0000041004100C000004100030000000080E8 +:1052C0004100C00000000300200010000020830007 +:1052D0004100C10000000000410003000000008008 +:1052E0004100C000000003002000100000208300E7 +:1052F000C100C100002000000003410003000000C5 +:1053000000804100C00000000300200010000020C9 +:105310008500C100C1000020000041000300000022 +:1053200000804100C00000000300200010000020A9 +:105330008500C100C1000020000001000100000044 +:1053400000C00100C000000001004000A140008535 +:10535000C0000500C1000040400001000100000045 +:1053600000C00100C000000001004000A108004191 +:10537000C1004100C10000414000000001000100E7 +:10538000000000C00100C000000001004000A108B2 +:105390000009C0004100C1000041400001000100BF +:1053A000000000C00100C000000001004000A10892 +:1053B0000009C0004100C1000041400000C00001E0 +:1053C000C0C100000000000100C184A00005000170 +:1053D00000C10000000000010000000000C000014A +:1053E000C0C100000000000100C1C0A00005000114 +:1053F00000C100000000000100000000000000C02B +:105400000001C0C100000000000100C104A00005AF +:10541000000100C10000000000010000000000C009 +:105420000001C0C100000000000100C104A100058E +:10543000000100C100000000000100000000008029 +:10544000004180C100000000004100A0000300C135 +:10545000004100C100000000004100400000008049 +:10546000004180C100000000004100A0000500C113 +:10547000004100C1000000000041004000000000A9 +:105480000080004180C100000000004100A08003B6 +:1054900000C1004100C100000000004100400000C8 +:1054A0000080004180C100000000004100A0801089 +:1054B00000C1004100C100000000004100400000A8 +:1054C000C100800080C10000410080000200410056 +:1054D000C141000080400000410000008000410008 +:1054E000C100800080C10000410080000200410036 +:1054F000C1410000804000004100000080004100E8 +:105500000000C100800080C1000041008000020056 +:105510004100C141000080400000410000008000C7 +:105520004100C100800080C10000410080000200F5 +:105530004100C141000080400000410000008000A7 +:105540004100C1004000C0C100000100040085000E +:105550000100C1832000C001000001000000C00064 +:105560000100C1004000C0C1000001000400C100F2 +:105570000100C1832000C001000001000000C00044 +:1055800001000000C1004000C0C100000100040093 +:10559000C1000100C1832000C00100000100000023 +:1055A000C0000100C1004000C0C1000001000400B3 +:1055B000C1000100C1832000C00100000100000003 +:1055C000C0000100000000000000004200000000D8 +:1055D00000000000811200480700480000000000A1 +:1055E0000000000000000000000000420000000079 +:1055F0000000000081120048070048000000000081 +:105600000000000000000000000000000042000058 +:105610000000000000008112004807004800000060 +:105620000000000000000000000000000042000038 +:105630000000000000008112004807004800000040 +:10564000000000000000000000000000000000005A :10565000000000000000000000000000000000004A :10566000000000000000000000000000000000003A :10567000000000000000000000000000000000002A @@ -165275,210 +165275,210 @@ :105710000000000000000000000000000000000089 :105720000000000000000000000000000000000079 :105730000000000000000000000000000000000069 -:1057400000000000000000000000257B00000000B9 +:1057400000000000000000000000757B0000000069 :105750000000000000000000000000000000000049 -:105760000000000000000000DEA4257B0000000017 +:105760000000000000000000DEAE757B00000000BD :105770000000000000000000000000000000000029 -:105780000000000000000000DEA40000757B0000A7 +:105780000000000000000000DEAE0000757B00009D :105790000000000000000000000000000000000009 :1057A00000000000000000000000DEAE757B00007D :1057B00000000000000000000000000000000000E9 -:1057C00000000000000000000000DEAE6126034083 -:1057D0000000000000000230A000000000000000F7 -:1057E0000C4000000000000002C0648661260340F7 -:1057F0000000000000000230A000000000000000D7 -:105800000C4000000000000002C064860000612619 -:1058100003400000000000000230A0000000000073 -:1058200000000C4000000000000002C064866126F9 -:1058300003400000000000000230A0000000000053 -:1058400000000C4000000000000002C06486000060 -:105850000000000800000000040020008880000014 -:10586000040000000000880004008800000000051B -:10587000C000C0000000000000002009000000047B -:1058800000100010000020000003210004000003AD -:105890000080888020800480040000200410000024 -:1058A000881088908400008800008800080020008C -:1058B000C0108810C00020102004000588000000DF -:1058C0002109881004848900880020204000098074 -:1058D00000000000000000000000800080000004C4 -:1058E0000000800000002000000080000000000098 +:1057C00000000000000000000000DEAE60C6030024 +:1057D0000000000000000031E000000000000000B8 +:1057E0000C0000000000000000C0630660C603005B +:1057F0000000000000000031E00000000000000098 +:105800000C0000000000000000C06306000060C63D +:1058100003000000000000000031E0000000000074 +:1058200000000C0000000000000000C0630660C61D +:1058300003000000000000000031E0000000000054 +:1058400000000C0000000000000000C06306000023 +:105850000000000020008800000000000000200080 +:105860000000000000000000000000002000000018 +:1058700000000000200020008800880000002000B8 +:105880000000000000000000000000000000000018 +:105890000000000000002000200020008400000024 +:1058A00020000000000000000000000000000000D8 +:1058B00000000000000000000000000000000000E8 +:1058C00000040000000000000000000000000000D4 +:1058D00000000000000000000000000000000000C8 +:1058E00000000000000000000000000000000000B8 :1058F00000000000000000000000000000000000A8 -:105900000000000000000000000000004000000057 -:105910000000000400040004000400000001000076 -:1059200000000000000400000004000000008900E6 -:105930000400002000000000000000000000000043 -:105940000000040400008004040405000001890034 -:1059500088100000000001000000000000000008A6 -:105960000000000800000105000001090009001006 -:1059700000050000004000080000011000050000C4 -:1059800000100000000800000008000000050108E9 -:1059900000000000000400040010000400000000EB -:1059A000000300030000004001080000000900009F -:1059B0000010000900040003000800850008000929 -:1059C000000500100108010000410100000500036E -:1059D0000003000400000040400000000000000040 -:1059E00000840000000000004000000440080004A3 -:1059F00000090084008200840004000802080000FE -:105A00000008000800880082000000100004000860 -:105A1000088800C000000085041100040084000410 -:105A20000000000800100004000408040004001036 -:105A3000008200040010000800040010000400822E -:105A40000004001000880410048200844040000814 -:105A50000900000000820003002100210000002155 -:105A60000040000500210000000200219003882171 -:105A70000085000301080009000500050000002161 -:105A800001020002840300100002008900210009C5 -:105A9000084100050000000000400021000800054A -:105AA0000010000500000000000300080002004193 -:105AB0000021040900210000000000080005004149 -:105AC0000009001000030021000000000000000396 -:105AD000C0410008004000100000000000000084E9 -:105AE000000000000000000000020010000011088B -:105AF00000A021200000048400000000000000A09D -:105B00000010080121000000000821110010001001 -:105B10000088000000100084000000000000000069 -:105B20000008000000000000000000880084001051 -:105B30000010000080100000000000C000C0000045 -:105B4000000800A00000000000A00000000000000D -:105B5000000000100000000008010000000000002C -:105B6000080040000000C1000080000000000000AC -:105B70000000010008000800088000000008000084 -:105B80000000008000008200820000004005C0008C -:105B90000200A1000100000000000000C000080099 -:105BA0008200000000000410080000850100900041 -:105BB00000000000080000800800000084000800C9 -:105BC000000004008200C0000800000082000800FD -:105BD000000002000400C00008000000009000A0C7 -:105BE00009A00008A1A0000004000004211000A0EA -:105BF0000004038402A0211000080002008200A01B -:105C000000A0000000022000001000000004A1001D -:105C1000000880A040044084008400000000004090 -:105C2000000000900000000080A000040010400868 -:105C300000A00008000400080020000400A00000EC -:105C400000000000000009A000000000000800089B -:105C500000000000000000000000000000900005AF -:105C60000803080582020008900000200405A00532 -:105C700000000000080500100008C040002000409F -:105C8000002100052021204182000040080200037D -:105C90000002902100800009080582000003000036 -:105CA0000004C0049004204000080008C040000028 -:105CB000000500008402002100210000000000080F -:105CC000000000030840000882050009820040002F -:105CD0000000840808000000004000404008080858 -:105CE000000800000000000000000000001180001B -:105CF00000000000001000000000000000840011FF -:105D000000020000000080000000000000C0000051 -:105D10000008000000000004000811000000000856 -:105D20000000001100010001A184008200000000B9 -:105D30000000000000100000000000000000000053 -:105D400000A00010000000002188000000000008F2 -:105D50008000000000000000030800000000800038 -:105D6000000008030008000408214021200000046E -:105D700020080003A141C02108050021000000A166 -:105D8000000500080021400500A140210810002165 -:105D90000004C041002188210021080400050805F5 -:105DA00002020000020800880021008540210080D6 -:105DB00000804005000408210002000500042021A5 -:105DC00000030205000082000003000582000000BD -:105DD00082050005002000000008200800210000C6 -:105DE000000920100984000800A08800A00080009D -:105DF000008500000000040820A0808403080084BF -:105E0000030221000000000080000002800000006A -:105E10000000000109000800000000A000A0000030 -:105E2000000000830000000041040800090400A0F5 -:105E300041200002800800008000000000000000F7 -:105E400000000000008400000000000000000000CE -:105E50000000000000000001000000000000000041 -:105E600000081110800000000000100000009010D9 -:105E7000009102109008008800840800901088A00B -:105E8000000300020202000001000100000088047B -:105E90004100000982000840A00409088810210080 -:105EA0001000400108000000400041010501C00150 -:105EB0000004880000028410400000830000088570 -:105EC0000200904000840800000000000000000074 -:105ED00000000000000000000410200220848288DE -:105EE00010C0900811C082000000030000000000F4 -:105EF0000082039082808090000005008000008076 -:105F000004820521000900090000200004000000AF -:105F100000004000008480008080820083800000B8 -:105F200004090402800880400000852010108308C6 -:105F300000040080100000000000800000830010BA -:105F400080040000800000008000000005000000C8 -:105F500000000000050000000000A000A0800980F3 -:105F6000800080008080A0008000890091000500F2 -:105F70002100838041009003A0908900911103804B -:105F8000A10080800211C1118904000003001100EA -:105F90000900890089000500C00008800400401144 -:105FA000030000008000C00084030000898010000E -:105FB0004111914008008911908083008480000085 -:105FC000A04082058000800300C080000000000027 -:105FD00000000000000000000000000080008403BA -:105FE000C080A1800000001100808900080010001E -:105FF00085008902040402008400089108009005CD -:1060000000A0090008401001A000020100000000EB -:106010000000000010008200050009100140C000CF -:1060200001000000A0900200050008010000090422 -:106030000500000108000100900508A009001108F2 -:10604000A00008000820400090108882080000008E -:10605000000000000000000000000000000004003C -:106060000300414009020000000400A010000000ED -:10607000000000000000041100419009C1880000E8 -:10608000001002000004020201000300C010000022 -:10609000000000000100A0020089A1029108008414 -:1060A0000000841102A100880110110900A1000064 -:1060B000000800010402010800880000840100417A -:1060C00000029010001190A100200020000810A0F4 -:1060D00000000001000001000001000100000000BC -:1060E000208800900004401100000288A00400C035 -:1060F000001100210002002109A10088808590057F -:106100000002008200021089001105100541A091D3 -:106110000009002000094002804103838511918914 -:106120000005001100A100830010059085A10484E2 -:10613000000000852109854011910009001100210E -:106140000090008580800021809100000000008088 -:1061500080800010000300101109000800080041B1 -:1061600000090002000400918040000000C1800985 -:106170000200004000000000001110A103824180D5 -:106180001003008000900000000991024109108076 -:106190009111008000000000001121002080080003 -:1061A0000000008210850900029121822180088070 -:1061B0001003000010851180050040038002800458 -:1061C0008080000008800911030004080011800489 -:1061D0008000000000000000000000000009000036 -:1061E0000000000080C080A1000000020008002024 -:1061F00000808010008900000002000000A100085B -:1062000000080000A0408882880288901090044016 -:106210008804100000C00000000000010110001000 -:106220000102000000400020002000090110004091 -:10623000010801000000014000820002000040004F -:106240001003A04010000108008901A00101840092 -:1062500004054010020000000000000000000000E3 -:10626000000000000000081002108810400010011B -:106270008401888404010000000000000000000088 -:1062800000E007000012000000000700000000000E -:10629000000007000006000000E00000840000008D -:1062A00000E000000000000000E00000000000002E -:1062B0000000000000000000000000E000000000FE -:1062C0000000000007000000000000E000000000E7 -:1062D0000000000007000000000000E000000000D7 -:1062E0000000000000000000410000E00700000086 -:1062F000810000E007000000000000000000000036 -:1063000000000000F0F0FFE40FFF81BD00000F0F60 -:106310000CCF0C0C3C3CFFFF000000000000000014 -:1063200000000000FCFCFCE4000000003C7EBDFF1F -:1063300000000000E7E7242400000000000000C384 -:106340000042CFCF0F99C3C3C3C3000000006F6FDB -:10635000606040404F40BDBD2424000000000000AC -:1063600000000000000000000000FFFFFFFFFFF63C -:10637000FFF0999999990000F0900000000000004A -:10638000000000000000F0F000E400F081BDFFFF1D -:106390000F0F0CCFCFCF1818DBDB00000000000080 -:1063A000000000000000C0C0C0E400000000004287 -:1063B00081C300000000E7F324300000000000006B -:1063C000000000420C0C0F990000FFFF00000000CD -:1063D0006F3F60307F7F7F70BDF924600000000058 -:1063E000000000000000000000000000FFBCFF9063 -:1063F000FFFEFFFCF0F3F0F00F0FFF9F0000000026 +:10590000000000000500050000000000000000008D +:105910000000000000000000000000000000000087 +:105920000000000000000000000000000000000077 +:105930000000000000000000000000000000000067 +:10594000000000000000000400040000000000004F +:105950000000000000050000000000000000000042 +:105960000000001000000000001001000000000016 +:10597000000800000000000000000000000000001F +:1059800000000040000000000000000000000000D7 +:1059900000000000000000400000000000000000C7 +:1059A00000000000000000000010000000000000E7 +:1059B00000000000000000000010001000000000C7 +:1059C00000000000000000000000000000000000D7 +:1059D00000000000000800080000000800840082A9 +:1059E00000080004004000080008008440400082D5 +:1059F0000084001000820008000000100000000079 +:105A000000040084000000400010000800040000B2 +:105A1000000000080000000000100000001000005E +:105A2000000000080000000000080008001000004E +:105A3000000000000010000000000200000800004C +:105A400000000082000000000008000800000000C4 +:105A50000000000000000000001000000000000036 +:105A6000000000050008020000100000000000080F +:105A7000000000000000000000000010000800000E +:105A8000000000080000000000000000000000000E +:105A90000000000000050000000000000000000001 +:105AA00000000000000000000000000000000000F6 +:105AB00000000000000000000000000000000000E6 +:105AC00000000000000000000000000000000000D6 +:105AD00000000000000000000000000000000000C6 +:105AE00003000000080000000000000000000000AB +:105AF000000000000000000000000000000008009E +:105B0000080000000300000000000000000000008A +:105B10000000000000000000000000000000000085 +:105B2000080008000000080003000000000000005A +:105B30000000000000000000000000000000000065 +:105B40000800080000000300000000000000000042 +:105B50000000000000000000000000000000000045 +:105B60000000000000000000000000000000000035 +:105B7000000000820400400000000000000000005F +:105B80000000000000000000000000000000000015 +:105B900000000000000000000800000000000000FD +:105BA00000000000000000000000000000000000F5 +:105BB00000000000000000004000000000000000A5 +:105BC00000000000000000000000000000000000D5 +:105BD0000000004000000000000000000000000085 +:105BE00000000000000000000000000000000000B5 +:105BF0000000000800031100000000000000000089 +:105C0000000000000000008400000082000000008E +:105C10000000000000000000000000000000000084 +:105C20000000000000000000000000000000000074 +:105C30000000000000000000000000000000000064 +:105C40000000000000000000000000000000000054 +:105C50000000000000000000000000000000000044 +:105C6000000000000800000000000000000000002C +:105C70000000000000000100000000000000000023 +:105C80000000000000000000000000000000000014 +:105C900000000008000000000000000000000000FC +:105CA00000000000000000000000000000000000F4 +:105CB00000000000000000000000000000000000E4 +:105CC00000000000000000000000000000000000D4 +:105CD00000000000000000000000000000000000C4 +:105CE0000000000000000000000000004100000073 +:105CF000080000000000000040000000000000005C +:105D00000000000000000000000003000000000090 +:105D1000080000000000000000000000000000007B +:105D2000000000000000000000000000080000006B +:105D3000000008000000000000000000000000005B +:105D40000000000000000000000000000800080043 +:105D5000000008000000000000000000000000003B +:105D60000000000000000000000000000000000033 +:105D70000000000000000021000000000000000002 +:105D80000000000000000000000000000000000013 +:105D900000000000000800000000000000000000FB +:105DA00000000000000000000000000800000000EB +:105DB00000000000000000000000000000000000E3 +:105DC00000000000000000000000000000000000D3 +:105DD00000000000000000000000000000000000C3 +:105DE00000000000000000000000000000000000B3 +:105DF00000000000000000000000000000000000A3 +:105E00000000000000000000000000000000000092 +:105E10000000000000000000000000000000000082 +:105E20000000000000000000000000000000000072 +:105E30000000000000000000000000000000000062 +:105E40000000000000000000000000000000000052 +:105E50000000000000000000000000000000000042 +:105E60000000000000000000000000000000000032 +:105E70000000000000000000000000000000000022 +:105E80000001000000000000000000000000000011 +:105E90000000000000000000000000000000000002 +:105EA00000000000000000000000000000000000F2 +:105EB00000000000000000000000000000000000E2 +:105EC00000000000000000000000000000000000D2 +:105ED00000000000000000000000000000000000C2 +:105EE00000000000000000000000000000000000B2 +:105EF00000000000000000000000000000000000A2 +:105F00000000002000000000000000000000000071 +:105F10000000000000000000000000000000000081 +:105F20000000000000000000000000000000000071 +:105F30000000000000000000000000000000000061 +:105F40000000000000000000000000000000000051 +:105F50000000000000000000000000000000000041 +:105F60000000000000000000000000000000000031 +:105F70000000000000000000000000000000000021 +:105F80000000000000000000000000000000000011 +:105F90000000000000000000000000000000000001 +:105FA00000000000000000000000000000000000F1 +:105FB00000000000000000000000000000000000E1 +:105FC00000000000000000000000000000000000D1 +:105FD00000000000000000000000000000000000C1 +:105FE00000000000000000000000000000000000B1 +:105FF00000000000000000000000000000000000A1 +:106000000000000000000000000000000000000090 +:106010000000000000000000000000000000000080 +:106020000000000000000000000000000000000070 +:106030000000000000000000000000000000000060 +:106040000000000000000000000000000000000050 +:106050000000000000000000000000000000000040 +:106060000000000000000000000000000000000030 +:106070000000000000000000000000000000000020 +:106080000000000000000000000000000000000010 +:106090000000000000000000000000000000000000 +:1060A00000000000000000000000000000000000F0 +:1060B00000000000000000000000000000000000E0 +:1060C00000000000000000000000000000000000D0 +:1060D00000000000000000000000000000000000C0 +:1060E00000000000000000000000000000000000B0 +:1060F00000000000000000000000000000000000A0 +:10610000000000000000000000000000000000008F +:10611000000000000000000000000000000000007F +:10612000000000000000000000000000000000006F +:10613000000000000000000000000000000000005F +:10614000000000000000000000000000000000004F +:10615000000000000000000000000000000000003F +:10616000000000000000000000000000000000002F +:10617000000000000000000000000000000000001F +:10618000000000000000000000000000000000000F +:1061900000000000000000000000000000000000FF +:1061A00000000000000000000000000000000000EF +:1061B00000000000000000000000000000000000DF +:1061C00000000000000000000000000000000000CF +:1061D00000000000000000000000000000000000BF +:1061E00000000000000000000000000000000000AF +:1061F000000000000000000000000000000000009F +:10620000000000000000000000000000000000008E +:10621000000000000000000000000000000000007E +:10622000000000000000000000000000000000006E +:10623000000000000000000000000000000000005E +:10624000000000000000000000000000000000004E +:10625000000000000000000000000000000000003E +:10626000000000000000000000000000000000002E +:10627000000000000000000000000000000000001E +:10628000000000000000000000000000000000000E +:1062900000000000000000000000000000000000FE +:1062A00000000000000000000000000000000000EE +:1062B00000000000000000000000000000000000DE +:1062C00000000000000000000000000000000000CE +:1062D00000000000000000000000000000000000BE +:1062E00000000000000000000000000000000000AE +:1062F000000000000000000000000000000000009E +:10630000000000000000000000000000000000008D +:10631000000000000000000000000000000000007D +:10632000000000000000000000000000000000006D +:10633000000000000000000000000000000000005D +:10634000000000000000000000000000000000004D +:10635000000000000000000000000000000000003D +:10636000000000000000000000000000000000002D +:10637000000000000000000000000000000000001D +:10638000000000000000000000000000000000000D +:1063900000000000000000000000000000000000FD +:1063A00000000000000000000000000000000000ED +:1063B00000000000000000000000000000000000DD +:1063C00000000000000000000000000000000000CD +:1063D00000000000000000000000000000000000BD +:1063E00000000000000000000000000000000000AD +:1063F000000000000000000000000000000000009D :10640000000000000000000000000000000000008C :10641000000000000000000000000000000000007C :10642000000000000000000000000000000000006C @@ -165487,79 +165487,79 @@ :10645000000000000000000000000000000000003C :10646000000000000000000000000000000000002C :10647000000000000000000000000000000000001C -:10648000000000000000109F70FF303F303F3C00D4 -:106490003CFF0000000034F734F77F6FFFFF00007F -:1064A000000000000000F0F0606066666666107034 -:1064B0000000909090900000000066666666000004 -:1064C0000000000000000000C0C0FCFC0000000054 -:1064D000427E427E00FF83BF606F606F3C3C663C43 +:10648000000000000000000000000000000000000C +:1064900000000000000000000000000000000000FC +:1064A00000000000000000000000000000000000EC +:1064B00000000000000000000000000000000000DC +:1064C00000000000000000000000000000000000CC +:1064D00000000000000000000000000000000000BC :1064E00000000000000000000000000000000000AC -:1064F00006FFFFFFFF2FFFFFF000F0FFFFFF000090 -:10650000000000000003C0C3008F60EF00FF606F59 -:106510003C003CFF42420303FFFF00007F6F7F6FA0 -:1065200000000000000000000000000066660CFC97 -:10653000107000009F9F9F9F000000006666303F24 -:1065400000000000000042420303C0C0FCFC0099B0 -:106550000909427E427E00FF023E606F606F3C3C54 -:106560000F3C0000000000000000000000000000E0 -:1065700000003EFFFFFF2F2FFFFFF000F0FF0000A5 -:10658000000000610006000D00000061000D000128 -:10659000000000610E0E000D00000061000E001DE5 -:1065A000000000610007000D0000006100060019F6 -:1065B0000001006140070009000000610006000DB5 -:1065C00000000000006100010011000100610E0EDA -:1065D000000D0000006100040009000000000E082A -:1065E00000000000006100060009000000610006D4 -:1065F000000D00000061000FC005000000610E0FDB -:10660000C0090001000000002C00EFFFFF3DFF3D2E -:10661000FEBEFFFF00000000FFFF78FF17D75555B3 -:10662000F300000000000000C000C3000F0FFF00D7 -:10663000F0F0F03CBF00BF00FAFF3A3F5055FAFFC0 -:10664000FB38CB080000FFFFFFFFFAFEFAFE000058 -:106650000000FF3FFC3C7FFF0FFF003CC3FF00003A -:1066600000000000000000000000C0FCF0FC000082 -:1066700000000003030300000000BEAABFAF00003B -:106680000000A000A000000000002000E3FFFFFFCA -:10669000FF3DFAAAFFFF0000000000007800171479 -:1066A00055553000000000000000C00000000F0F32 -:1066B000FF00F0F0F0F0BF00BF00C0C5000550556E -:1066C000DADFFF3CCF0C00001F1FFF1FFAFEFFFFA9 -:1066D00000000000C303C00002000F00003CC3FF25 -:1066E000000000000000000000000000F0F0F0F0EA -:1066F00000000000000300000000000082AA80A04B -:1067000000000000A000A000000000002C28EFEB1B -:1067100000C30000FCFDFFFF00000000003CC3FFC1 -:106720007F7FFF0005050005000000000F5A0F0FD6 -:10673000AAAAAAAAF033CC0F000000000A3A0C3C27 -:106740000303030AFF00FFAA0000FFFFFFFFFFFF94 -:10675000FFFF00000000FFF0CFC03F033F03C30076 -:10676000FF3C0000000000000000000000000000EE -:10677000000000000000000000000000000000A079 -:106780000000000000000000555500000000202817 -:10679000E3EB00C30000F0F5FFFF0000000010383D -:1067A000D3FB4040FF0000000005000000000F0F79 -:1067B0000F0F0A0A0A0AF0F0F0F0000000000A3A8F -:1067C00000300A030A0A000000AA00007D7F3C3F57 -:1067D0003CBE3FBF00000000FFF0CFC03F033F03BF -:1067E0008282BEBE00000000000000000000000029 +:1064F000000000000000000000000000000000009C +:10650000000000000000000000000000000000008B +:10651000000000000000000000000000000000007B +:10652000000000000000000000000000000000006B +:10653000000000000000000000000000000000005B +:10654000000000000000000000000000000000004B +:10655000000000000000000000000000000000003B +:10656000000000000000000000000000000000002B +:10657000000000000000000000000000000000001B +:10658000000000000000000000000000000000000B +:106590000000000000000000000000610006000D87 +:1065A00000000000000000000000000000000000EB +:1065B00000000000000000000000000000000000DB +:1065C00000000000000000000000000000000000CB +:1065D00000000000000000000000000000000000BB +:1065E00000000000000000000000000000000000AB +:1065F000000000000000000000000000000000009B +:10660000000000000000000000000000000000008A +:10661000000000000000000000000000000000007A +:10662000000000000000000000000000000000006A +:10663000000000000000000000000000000000005A +:10664000000000000000000000000000000000004A +:10665000000000000000000000000000000000003A +:10666000000000000000000000000000000000002A +:10667000000000000000000000000000000000001A +:10668000000000000000000000000000000000000A +:1066900000000000000000000000000000000000FA +:1066A00000000000000000000000000000000000EA +:1066B00000000000000000000000000000000000DA +:1066C00000000000000000000000000000000000CA +:1066D00000000000000000000000000000000000BA +:1066E00000000000000000000000000000000000AA +:1066F000000000000000000000000000000000009A +:106700000000000000000000000000000000000089 +:106710000000000000000000000000000000000079 +:1067200000FF00FF0000000000000000000000006B +:106730000000000000000000000000000000000059 +:106740000000000000000000000000000000000049 +:106750000000000000000000000000000000000039 +:106760000000000000000000000000000000000029 +:106770000000000000000000000000000000000019 +:106780000000000000000000000000000000000009 +:1067900000000000000000000000000000000000F9 +:1067A000000000FF00FF00000000000000000000EB +:1067B00000000000000000000000000000000000D9 +:1067C00000000000000000000000000000000000C9 +:1067D00000000000000000000000000000000000B9 +:1067E00000000000000000000000000000000000A9 :1067F0000000000000000000000000000000000099 -:10680000000000000000000000005555840000005A -:106810000800000000000000200004108500210096 -:1068200008002000010000000020202084108400C7 -:1068300020000000081000002000200020000405B7 -:106840002000200000000003880000000003200555 -:10685000880520000000200040002000008000206B -:106860000000201020000205880002000200C01075 -:1068700020100200000020108810200000100400EA -:10688000040004002100200020052010200000004A -:106890000000800000000000000000000001400037 -:1068A00020008000000020000000000180010000A6 -:1068B000000000000000800009000000000000004F -:1068C0008000000000000000000000000000000048 -:1068D0000000000000000000000080000000000236 +:106800000000000000000000000000000000000088 +:106810000000000000000000000000000000040074 +:1068200000000000000000000000000000008400E4 +:106830000000000000000000000000000000200038 +:106840000400000000000000000000000000000044 +:106850002000000000000000000000000000000018 +:1068600020002000000000000000000000000000E8 +:106870000000000000000000000000000000000018 +:106880000000000000000000000000000000000008 +:1068900000000000000000000000000000000000F8 +:1068A00000000000000000000000000000000000E8 +:1068B00000000000000000000000000000000000D8 +:1068C00000000000000000000000000000000000C8 +:1068D00000000000000000000000000000000400B4 :1068E00000000000000000000000000000000000A8 -:1068F0000000000000000000000000000000000098 -:1069000080008000A00004000000000000000000E3 +:1068F0000000200000000000000000000000000078 +:106900000000000000000000000000000000000087 :106910000000000000000000000000000000000077 :106920000000000000000000000000000000000067 :106930000000000000000000000000000000000057 @@ -165568,234 +165568,234 @@ :106960000000000000000000000000000000000027 :106970000000000000000000000000000000000017 :106980000000000000000000000000000000000007 -:106990000000008800000000000000000008000067 -:1069A000000000100000000800000040001000403F -:1069B0000000000000000088000800820008008439 -:1069C0000082008800080010008200100084008807 -:1069D0000084000000080008008400100008001077 -:1069E00000100000008400840084008400080084FB -:1069F000000800080008000800100040000800001F -:106A0000000000080084004000840088001000821C -:106A10000084008400020003000000030010000551 -:106A2000A000000020000041000000000000010460 -:106A30000104008800080021001001000008000087 -:106A40000041C02100410021000000800008000832 -:106A50000008000800000010001000410041000084 -:106A600000210100010500080841000800030002A0 -:106A700000080005002100020002000500080021B6 -:106A800000080008000300000021000000000002D0 -:106A9000000820020041000000A0000003000000E8 -:106AA00000C00000000880A00008008203C00010A1 -:106AB00020092001000400820010038308000082E6 -:106AC0000000000021C00384000000080010210025 -:106AD00000A000840000000000A0000200000000F0 -:106AE00000000000080004000802038200C000C08B -:106AF0000300008409A0000000C0008200840000A0 -:106B000021C0088403A0000000840000000000A051 -:106B1000000000A0800900102000000020002010CC -:106B2000C000000040004000820000004000200043 -:106B3000008004000800000008000000000082003F -:106B400000000000820000809000080000000000AB -:106B50000000880000000000000040000810C00095 -:106B60000000A000C00000000800000000000000BD -:106B700000000000C000C100820000000000000012 -:106B80000000A000000000008200C0000000000023 -:106B900000008200C00001000000800000008000B2 -:106BA000800900000000800080000040001000000C -:106BB00080000004800000080000009000000040F9 -:106BC00000000000000000820010000041400000B2 -:106BD0000088000040000000008400000000000069 -:106BE00000880008001000000000000000400010B5 -:106BF000000000000000000008000000000041004C -:106C000000000000000000A00000004000000000A4 -:106C1000000000000000008408000300004120057F -:106C200090080041C00200000021000000000003A5 -:106C30008305004005080003A00001008241000513 -:106C40000000C01000210010C00000050008002056 -:106C50000008000800000008000008000000000014 -:106C60000000080800000000008001050000000886 -:106C700000028200A0410003000008210000000083 -:106C80000000080000410003C00000000000900068 -:106C9000040008104010000900100000004100002E -:106CA0008010000000C02084008811082000000827 -:106CB000001020A00008A0000082000004A0000036 -:106CC00000100000000000840002000000A0008806 -:106CD000000100080084000000080000208200007D -:106CE00008840000800820840000002002100000BA -:106CF0000084000800A000000000000000A00000C8 -:106D00000010000000000000000000080008000063 -:106D10002008800800088008001000080000000813 -:106D20000000001020000005000800A10000004144 -:106D3000004100212000820000000020002000000F -:106D400082020008000882000041000300080000E1 -:106D5000820500000041002189410021000000104F -:106D6000000082004000009100030010001100218B -:106D700040080141084100400008000200000000F6 -:106D80000000080000210005004000000000001085 -:106D90000000000000100000000002080009880048 -:106DA00088200000000080000000000000100400A7 -:106DB0000000000000008000000000000001000151 -:106DC00000000000000000000000000000000000C3 -:106DD00000000000000000000000020000000000B1 -:106DE00000000000000000000002000000000000A1 -:106DF0000000800002000000000000000000000011 +:1069900000000008000800080008000800080008BF +:1069A000000800100010000800080082000800081D +:1069B00000080008008800080088008200820008A3 +:1069C0000008000000080008000800000008000897 +:1069D0000008000000080008008400840008000887 +:1069E00000820008000000080008000800000008FD +:1069F00000080008000800840008000000080008E3 +:106A000000000008000000820008000800000008E4 +:106A1000004000080000000000000000000000210D +:106A20000000004100000000000000000000002104 +:106A3000000000000000000000000000000000084E +:106A4000000000000000080000210000000000001D +:106A5000000000000000000000000008000000002E +:106A600000000000000000000800080900210000EC +:106A70000000000000000000000000000003000013 +:106A800000000000000000000808080000000000EE +:106A900000000000000000000000000000000000F6 +:106AA00000000000000000000008000000000000DE +:106AB00000000000000000000008000000000008C6 +:106AC00000000000000000000000000000000000C6 +:106AD00000000000000000000000000000000000B6 +:106AE00000000000000000000000000000000000A6 +:106AF0000000000000000000000000000000000096 +:106B00000000000000000000000000000084000001 +:106B10000000000000000000000000000100000074 +:106B20000000000000000000000000000000000065 +:106B30000000000000000000000000000000000055 +:106B40000000000000000000000000000100000044 +:106B50000000000000000000000000000000000035 +:106B60000000000000000100000000000000000024 +:106B70000000000000000000000000000000000015 +:106B80000000000000000000020000000000000003 +:106B900000000000000000000000000000000800ED +:106BA0000000000000000000000000C00000000025 +:106BB000000000000000004000000000000000A0F5 +:106BC00000080000000000000000000000000800B5 +:106BD00000000000000000000000000000000000B5 +:106BE000000000000000000008000000000000009D +:106BF0000000000000000000000000000000000095 +:106C00000000000000000000000000000000000084 +:106C10000000000000000000000003000000000071 +:106C20000000000000000000000000000000000064 +:106C30000000000000000000000000000000000054 +:106C40000000000000000000000000000000000044 +:106C50000000000000000000000000000000000034 +:106C60000000000000000000000000000000000024 +:106C70000000000000000000000000000000000014 +:106C800000000000000000000000000800000000FC +:106C900000000000000000000000000000000000F4 +:106CA00000000000000000000000000000000000E4 +:106CB00000000000000000000000000000000000D4 +:106CC00000000000000000000000000000000000C4 +:106CD00000000000000000000000000000000000B4 +:106CE00000000000000000000000000000000000A4 +:106CF0000000000000000000000000000000000094 +:106D00000000000000000000000000000000000083 +:106D10000000000000000000000000000000000073 +:106D20000000000000000000000000000000000063 +:106D30000000000000000000000000000000000053 +:106D400000000000008000000000000000000000C3 +:106D50000000000000000000000000000000000033 +:106D60000000000000000000000000000000000023 +:106D70000000000000000000000000000000000013 +:106D80000000000000000000000000000000000003 +:106D900000000000000000000000000000000008EB +:106DA00000000000000000000000000000000000E3 +:106DB00000000000000000000000000000000000D3 +:106DC00000000000000000100000000000000000B3 +:106DD00000000000000000000000000000000000B3 +:106DE00000000000000000000000000000000000A3 +:106DF0000000000000000000000000000000000093 :106E00000000000000000000000000000000000082 :106E10000000000000000000000000000000000072 -:106E2000000000009100C1018300C00000000000CC -:106E30000400100004000001010002010809A01074 -:106E4000A1828211000000020000001000880040B2 -:106E50000008000400A0900000884010000000001E -:106E6000000000000000A000010002000200C000BD -:106E7000011010C010C00000000000000000110050 -:106E800000000000080000000000000000000000FA -:106E90000000000000008284101000108208000032 -:106EA00001000800000011090840C041000900006D -:106EB0000300000080000000000440048008898274 -:106EC00021A14082808200000080000000000000BC -:106ED00000000080000000008000000000000000B2 -:106EE00000000000000000000000410080000000E1 -:106EF0000000418000008000000000000000000051 -:106F0000C000000000008000000000000000000041 -:106F10000000000000000000000080000080808071 -:106F2000000003009000000041800800081189095A -:106F30008900080000000200200000000000020894 -:106F4000898020049080A003800000008000000061 -:106F5000000000410000000000000011808080005F -:106F600000000000000000000000410009000504CE -:106F700008802080C111881104100000000000006A -:106F80000000000080008000000000000000000001 -:106F90000000000000000000000000000011800060 -:106FA0008080410009000302218010401100890106 -:106FB0000800880005008200A000C102C000840013 -:106FC00084010808A100844005A108000200A00077 -:106FD000000000000001000200000000C00382A0C9 -:106FE0001000000000000000000000008400C0004D -:106FF000A10089A001081001A1000000000000000C -:1070000000000000400004004000020000000000FA -:1070100000000000000000000000000002008800E6 -:10702000848808900000000000000108000501109D -:1070300001A10108001000850082008800C100093C -:10704000018401C0400201094140A14100880010B3 -:1070500000081088400000001000100000000082AE -:10706000000000A00000000000000000000000047C -:107070000008008900A100840004008900080000C5 -:1070800000000000000000C00002004000A000005E -:107090000000000000000000000000000000108858 -:1070A000008400900288000000000201000000023D -:1070B00008900305118900890003000011040008ED -:1070C000008810802110009020A005894020000039 -:1070D0000080008000008000000080008000000030 +:106E20000000000000000000000000000000000062 +:106E30000000000000000000000000000000000052 +:106E40000000000000000000000000000000000042 +:106E50000000000000000000000000000000000032 +:106E60000000000000000000000000000000000022 +:106E70000000000000000000000000000000000012 +:106E80000000000000000000000000000000000002 +:106E900000000000000000000000000000000000F2 +:106EA00000000000000000000000000000000000E2 +:106EB00000000000000000000000000000000000D2 +:106EC00000000000000000000000000000000000C2 +:106ED00000000000000000000000000000000000B2 +:106EE00000000000000000000000000000000000A2 +:106EF0000000000000000000000000000000000092 +:106F00000000000000000000000000000000000081 +:106F10000000000000000000000000000000000071 +:106F20000000000000000000000000000000000061 +:106F30000000000000000000000000000000000051 +:106F40000000000000000000000000000000000041 +:106F50000000000000000000000000000000000031 +:106F60000000000000000000000000000000000021 +:106F70000000000000000000000000000000000011 +:106F80000000000000000000000000000000000001 +:106F900000000000000000000000000000000000F1 +:106FA00000000000000000000000000000000000E1 +:106FB00000000000000000000000000000000000D1 +:106FC00000000000000000000000000000000000C1 +:106FD00000000000000000000000000000000000B1 +:106FE00000000000000000000000000000000000A1 +:106FF0000000000000000000000000000000000091 +:107000000000000000000000000000000000000080 +:107010000000000000000000000000000000000070 +:107020000000000000000000000000000000000060 +:107030000000000000000000000000000000000050 +:107040000000000000000000000000000000000040 +:107050000000000000000000000000000000000030 +:107060000000000000000000000000000000000020 +:107070000000000000000000000000000000000010 +:107080000000000000000000000000000000000000 +:1070900000000000000000000000000000000000F0 +:1070A00000000000000000000000000000000000E0 +:1070B00000000000000000000000000000000000D0 +:1070C00000000000000000000000000000000000C0 +:1070D00000000000000000000000000000000000B0 :1070E00000000000000000000000000000000000A0 -:1070F00000C00084000800880010000500210290F4 -:10710000000000000000000000000000008000807F +:1070F0000000000000000000000000000000000090 +:10710000000000000000000000000000000000007F :10711000000000000000000000000000000000006F -:1071200080090000009080100011002180050210ED -:10713000040008911000031100800000000000040A -:1071400000200280108010100282C004200008106D -:10715000000000800000000080008000800000002F -:107160000003008900000000000000000000000093 -:1071700000000000000000800011020005822100D4 -:10718000104000000000000000000003000000802C +:10712000000000000000000000000000000000005F +:10713000000000000000000000000000000000004F +:10714000000000000000000000000000000000003F +:10715000000000000000000000000000000000002F +:10716000000000000000000000000000000000001F +:10717000000000000000000000000000000000000F +:1071800000000000000000000000000000000000FF :1071900000000000000000000000000000000000EF -:1071A00000000011800900808000008200000000C3 -:1071B00000110004010900A0000100020084008801 -:1071C00000000001002000080000A041218889047F -:1071D0004100000000A0008800000400A00008009A -:1071E000040004000420020410000000000000005D -:1071F0000000000000A00004000800000440000897 -:1072000001000400000000000000000000000090E9 -:107210000008000000000000000000000000000066 -:1072200000000000880120108810080000400000C5 -:1072300000000000000000E000000000000000006E -:1072400000000000000000E000000000000000E07E -:107250000700000000000000000000000000000027 -:1072600000006000000000000700000000000000B7 -:1072700000000000000000000000000042000000CC -:107280000000070084000000000000000000000073 +:1071A00000000000000000000000000000000000DF +:1071B00000000000000000000000000000000000CF +:1071C00000000000000000000000000000000000BF +:1071D00000000000000000000000000000000000AF +:1071E000000000000000000000000000000000009F +:1071F000000000000000000000000000000000008F +:10720000000000000000000000000000000000007E +:10721000000000000000000000000000000000006E +:10722000000000000000000000000000000000005E +:10723000000000000000000000000000000000004E +:10724000000000000000000000000000000000003E +:10725000000000000000000000000000000000002E +:10726000000000000000000000000000000000001E +:10727000000000000000000000000000000000000E +:1072800000000000000000000000000000000000FE :1072900000000000000000000000000000000000EE -:1072A00000000000000000000000070000000000D7 -:1072B00000E0000000000000000082BE82BE00006E -:1072C0000000CF0FCF0000000000A8FDAAFFFFFFC5 -:1072D000FFFFFFFFFFFF000000003F3F3F0302579B -:1072E000AAFF00000000F5C5FFC00F0F000000005E -:1072F000000000000000000000000000A0A0AFAFF0 -:10730000C3C30000FEFB00000000000000000000FE -:1073100000000000B0F0BFFF00000000000000000F -:107320000000000000000000B2B228286060E2E225 -:10733000000000000000000000000000B2B282BEA9 -:1073400000000000CFFFCFF00000000080D5005506 -:10735000507CFFFF507CFFFF000000003F3F3F03D9 -:107360000055A8FD0000000035053F000F0FFFFF8E -:10737000000000000000000000000000000030A03D -:107380003FAFFFFF3C3CFEFF00000000000000009C -:1073900000000000000000400F4F0000000000004F -:1073A0000000000000000000000030F328282061E9 -:1073B000A2E3000000000000000000000000553CB7 -:1073C000555500000000AA503C3C00000000FDFDA7 -:1073D000FFFCFF5FFF7FFFFFFFFF82D782D7BCBFAD -:1073E000BCBFFF30EF20000000003F3F0303000060 +:1072A00000000000000000000000000000000000DE +:1072B00000000000000000000000000000000000CE +:1072C00000000000000000000000000000000000BE +:1072D00000000000000000000000000000000000AE +:1072E000000000000000000000000000000000009E +:1072F000000000000000000000000000000000008E +:10730000000000000000000000000000000000007D +:10731000000000000000000000000000000000006D +:10732000000000000000000000000000000000005D +:10733000000000000000000000000000000000004D +:10734000000000000000000000000000000000003D +:10735000000000000000000000000000000000002D +:10736000000000000000000000000000000000001D +:10737000000000000000000000000000000000000D +:1073800000000000000000000000000000000000FD +:1073900000000000000000000000000000000000ED +:1073A00000000000000000000000000000000000DD +:1073B00000000000000000000000000000000000CD +:1073C00000000000000000000000000000000000BD +:1073D00000000000000000000000000000000000AD +:1073E000000000000000000000000000000000009D :1073F000000000000000000000000000000000008D -:107400002D2D0F0FC30FC30F505F505F0000000002 -:10741000000000000000000055550F55000000005E -:10742000000000000000000000000000FCCC300064 -:10743000F5F5D01000000000000000000000000082 -:10744000550F555500000000FF503C3C0000000067 -:1074500001010300FF0FFF3FFF4F4F4F82D782D73D -:1074600080838083DF10CF00000000003F3F0303D4 -:1074700000005F500000000000000000000000005D -:107480000000AF050F0FC30FC30F505F505F000028 -:107490000000000000000000000055553C550000B1 -:1074A00000000000000000000000000000007C4C14 -:1074B00070400505D01000000000000000000061D1 -:1074C00000010001000000610006001D00000061D5 -:1074D000000100010000006100090001000000003F +:10740000000000000000000000000000000000007C +:10741000000000000000000000000000000000006C +:10742000000000000000000000000000000000005C +:10743000000000000000000000000000000000004C +:10744000000000000000000000000000000000003C +:10745000000000000000000000000000000000002C +:10746000000000000000000000000000000000001C +:10747000000000000000000000000000000000000C +:1074800000000000000000000000000000000000FC +:1074900000000000000000000000000000000000EC +:1074A00000000000000000000000000000000000DC +:1074B00000000000000000000000000000000000CC +:1074C00000000000000000000000000000000000BC +:1074D00000000000000000000000000000000000AC :1074E000000000000000000000000000000000009C -:1074F0000E08000000000000000000100000000066 -:1075000000610006000D00008061000E000D00000B -:10751000000000000010000000000000000000005B +:1074F000000000000000000000000000000000008C +:10750000000000000000000000000000000000007B +:10751000000000000000000000000000000000006B :10752000000000000000000000000000000000005B -:107530000061000E000D0000006100070005000062 -:107540003C3C550F14BE14BE0000000000000000BB -:10755000F734F734F0F0C3C3FFFFFFFFFAFAFEFE83 +:10753000000000000000000000000000000000004B +:10754000000000000000000000000000000000003B +:10755000000000000000000000000000000000002B :10756000000000000000000000000000000000001B :10757000000000000000000000000000000000000B -:10758000000000000000AAACAAAC0F0F4F0EF0F0F4 -:1075900000FF0000000000000000000000000000EC +:1075800000000000000000000000000000000000FB +:1075900000000000000000000000000000000000EB :1075A00000000000000000000000000000000000DB -:1075B0000000000000003CFFFFFF00000000000092 -:1075C00004003C3C553C00FF50FA00000000C0C0E5 -:1075D0008282D714D714F0F0C3C3BFBE3F3CFAFF7A -:1075E000FEFF00000000000000000000000000009E +:1075B00000000000000000000000000000000000CB +:1075C00000000000000000000000000000000000BB +:1075D00000000000000000000000000000000000AB +:1075E000000000000000000000000000000000009B :1075F000000000000000000000000000000000008B -:107600000000000000000000AAA0AAAF0F0F0F0F9B -:10761000D0F8D0F8000000000000000000000000DA +:10760000000000000000000000000000000000007A +:10761000000000000000000000000000000000006A :10762000000000000000000000000000000000005A -:1076300000000000000000003CFFFFFF0000000011 -:10764000000000000F7F0F573C3C3C3C0000000056 -:10765000000000000C3C0C3CBEBE1414FFFFFFFFFA -:10766000FFFFFFFF0000000000000000000000001E +:10763000000000000000000000000000000000004A +:10764000000000000000000000000000000000003A +:10765000000000000000000000000000000000002A +:10766000000000000000000000000000000000001A :10767000000000000000000000000000000000000A -:1076800000000000000000000000E0EFA0AF0000DC -:1076900000001514C3C3000000000000000000003B +:1076800000000000000000000000000000000000FA +:1076900000000000000000000000000000000000EA :1076A00000000000000000000000000000000000DA :1076B00000000000000000000000000000000000CA -:1076C0000000000000000F2A0F023CAAF0AA0000F0 -:1076D00000008080C1C1FC3CFC3CBEBE14147D7F18 -:1076E000555FF0F3FAFB000000000000000000000E +:1076C00000000000000000000000000000000000BA +:1076D00000000000000000000000000000000000AA +:1076E000000000000000000000000000000000009A :1076F000000000000000000000000000000000008A -:10770000000000000000000000000000202FA0AFDB -:10771000000000001514FFFF000000000000000042 +:107700000000000000000000000000000000000079 +:107710000000000000000000000000000000000069 :107720000000000000000000000000000000000059 :107730000000000000000000000000000000000049 -:107740000000000000000100000000000000000038 -:10775000000000100000880002000000040000008B -:10776000000088102000200000000000040000102D -:10777000040000080010200020100000201000006D -:107780000400840020092000000088088400000014 -:1077900000002010880004002000201004002010A9 -:1077A000880500058800021020002010200904052B -:1077B00000052000840088100000200520088810A3 -:1077C0002000001000042000000000000000000065 +:107740000000000000000000000000000000000039 +:107750000000000000000000000000000000000029 +:107760000000000000000008000000000000000011 +:107770000000000000000000000000000000000009 +:1077800000000000000800000000000000000000F1 +:107790000000880800000000000002000000000057 +:1077A00000000000000000000000000000000000D9 +:1077B00000000000000000000000000000000000C9 +:1077C00000000000000000000000000000000000B9 :1077D00000000000000000000000000000000000A9 :1077E0000000000000000000000000000000000099 :1077F0000000000000000000000000000000000089 @@ -165806,46 +165806,46 @@ :107840000000000000000000000000000000000038 :107850000000000000000000000000000000000028 :107860000000000000000000000000000000000018 -:107870000000000800000000000000000000000000 +:107870000000000000000000000000000000000008 :1078800000000000000000000000000000000000F8 :1078900000000000000000000000000000000000E8 :1078A00000000000000000000000000000000000D8 :1078B00000000000000000000000000000000000C8 -:1078C00000000000000000000000000000000000B8 -:1078D0000008008400000088008400840000008408 -:1078E00000840008000000400084008800100000B0 -:1078F0000008000000400008008400080008008420 -:1079000000C0008400080008000000840008000097 -:107910000088008400840084008400C000100008F7 -:10792000008400080008001000080084008400089B -:10793000000800080010000800000008008400840F -:1079400000080088008400080008008400080088FF -:107950000000002100000000000000000000000006 -:1079600000080010004100000000000500050000B4 -:10797000000500100041000000000005000000218B -:10798000000300080000004100210008000800106A -:107990000000000300080008000800410041000842 -:1079A00000000000002100030008000300000008A0 -:1079B000000000210021000800050010002100083F -:1079C0000000001000210005000500000003000574 -:1079D00000080010000000100008001000840008DB -:1079E000001000C000000010000000000000008235 -:1079F00000A000A000A0000000A00000000000A067 -:107A000000C000080010000000100000000000107E -:107A1000001000000000001000100000000000082E -:107A200000A000000008001000A000840810001052 -:107A300000000000008200000000000000080010AC -:107A40000000000000000000000000A000A00008EE -:107A5000038400840000000000000000A0009000EB +:1078C00000000000000000000000000000000008B0 +:1078D0000008000000080000000800000008000880 +:1078E00000080088000800080008008800880010D0 +:1078F0000008000800080000000800080008004018 +:10790000000800000008000800080000000800004F +:107910000008000800100008000000080008000827 +:1079200000080008000000100040000800080008DF +:10793000000800080000000800080008000800080F +:10794000000800080000000800000084008400080F +:1079500000100000000000100041000000080010AE +:107960000000000000000000000000000000000017 +:107970000000000000000000000000000000000007 +:1079800000000000000000000000000000000000F7 +:1079900000000000000000000000000000000000E7 +:1079A00000000000000000000000000000000000D7 +:1079B00000000000000000000000000000000000C7 +:1079C00000000000000000000000000000000000B7 +:1079D00000000000000000000000000000000000A7 +:1079E0000000000000000000000000000000000097 +:1079F000000000080000000000000000000000007F +:107A0000000000080010000000000000000000005E +:107A10000000000000000000000000000000000066 +:107A20000000000000000000001000000000000046 +:107A30000000000000000000000000000000000046 +:107A4000000000000000000000000000000000082E +:107A50000000000000000000000000000000000026 :107A60000000000000000000000000000000000016 -:107A700000000000A0000000000000000000000066 -:107A8000000000000200000000000000A00008004C -:107A9000000000000000000000000000880000005E -:107AA000C00000000000A000000000000000000076 -:107AB00000000800000082000000400000000000FC -:107AC000080008000000820000000800A00000007C -:107AD000080000000000000000000000000000009E -:107AE0000000000000000000000000000000001086 +:107A70000000000000000000000000000400000002 +:107A80000000000000000000000000008200000074 +:107A900000000000000000000000000000000000E6 +:107AA00000000000000000000000000000000000D6 +:107AB00000000000000000000000000000000800BE +:107AC0000000000000000000000004002000000092 +:107AD00000000000000000000000000000000000A6 +:107AE0000000000000000000000000000000000096 :107AF0000000000000000000000000000000000086 :107B00000000000000000000000000000000000075 :107B10000000000000000000000000000000000065 @@ -165854,29 +165854,29 @@ :107B40000000000000000000000000000000000035 :107B50000000000000000000000000000000000025 :107B60000000000000000000000000000000000015 -:107B700000080000000000050000000500000000F3 -:107B800000000000000000000000000000080000ED -:107B9000000000000000004100000000000008009C -:107BA00000000000000000000010000000000000C5 -:107BB00000000000000800000000000000000000BD -:107BC000004100000000000000080000000000006C -:107BD00000000000000000100821000000840010D8 -:107BE0004000000800C0001000080082200800A02B -:107BF000000800C000000008000800080084000021 -:107C00000084000000C000000000000000A0000090 -:107C100000A00000000000000000000000040000C0 -:107C2000000000840000000000A000100000000020 -:107C3000000000000000080000000000000000003C -:107C40000000000000080000000000000082008426 -:107C500000080082000000100000000082210000E7 -:107C60000000000000000008000000000000000309 -:107C7000000000008200000000000000000000047E -:107C800000080040002100100000000382000005F1 -:107C900000000000000000210000000000000000C3 -:107CA000000000000000820000000000000400004E -:107CB00000000000000000000000000000100000B4 -:107CC000000000000000000000000000081000009C -:107CD00000000000000000008210004108100000B9 +:107B70000000000000000000000000000000000005 +:107B800000000000000000000000000000000000F5 +:107B900000000000000000000000000000000000E5 +:107BA00000000000000000000000000000000000D5 +:107BB00000000000000000000000000000000000C5 +:107BC00000000000000000000000080000000000AD +:107BD0000000000000000000C000000000000000E5 +:107BE0000000000000000000000000000000000095 +:107BF0000000000000000000000000000000000085 +:107C00000000000000000000000000000000000074 +:107C10000000000000000000000000000000000064 +:107C20000000000000000000000000000000000054 +:107C3000000000080000000000000000000000003C +:107C40000000000000000000000000000000000034 +:107C50000000000000000000000000000000000024 +:107C6000000800000000000000000000000000000C +:107C700000000000200000000000000000000000E4 +:107C800000000000000000000000000000000000F4 +:107C900000000000000000000000000000000000E4 +:107CA0000000000000008200000000000000000052 +:107CB00000000000000000000000000000000000C4 +:107CC00000000000000000000000000000000000B4 +:107CD0000000000000008200000000000000000022 :107CE0000000000000000000000000000000000094 :107CF0000000000000000000000000000000000084 :107D00000000000000000000000000000000000073 @@ -165896,7 +165896,7 @@ :107DE00000004100802141C1C100000580050080E4 :107DF000000080414141000000004100802141C15C :107E0000C100000580050080000080414141000064 -:107E100000004100802141C1C100000580050080B3 +:107E100000004100802141C1C10040058005008073 :107E2000000000008041414100000000410080212D :107E300041C1C10000058005008000000000000075 :107E40000000000000000000000000000000000032 @@ -165919,7 +165919,7 @@ :107F50000000000000000000000000000000000021 :107F6000000000000000000000000000010000828E :107F7000000000000100000000000000C040000000 -:107F8000000000000100008200000000010000006D +:107F8000000000000100008200000000010001006C :107F900000000000C040000000000000010000825E :107FA0000000000001000000000100000000C040CF :107FB000000000000000010000820000000001003D @@ -165928,23 +165928,23 @@ :107FE000000000000000000000000000000041410F :107FF000008000000000410000000041004180C1FD :10800000000000000000414100800000000041002D -:1080100004000041004180C1000000000000414117 +:1080100040000041004180C10000000000004141DB :10802000008000000000410000000000004100410D :1080300080C10000000000004141008000000000FD :1080400041000000000000000000000000000000EF :108050000000000000000000000000000000000020 :10806000000000000000000000000000004100418E -:10807000C1C10041000500004040000041410080B6 +:10807000C1C1004100040000020200004141008033 :1080800080C1004100410041C1C100410005000024 -:10809000050504004141008080C1004100410041CC -:1080A000C1C1004100050000202000000002414144 +:10809000050540004141008080C100410041004190 +:1080A000C1C1004100000000020200000002414185 :1080B000008080C1004100410041C1C10041000574 -:1080C0000000202000000000000000000000000070 +:1080C00000000202000000000000000000000000AC :1080D00000000000000000000000000000000000A0 :1080E000000000000000000000000000000000018F :1080F000000140C10001000000000101000000017A :1081000000C040C100010001000140C100010000A9 -:10811000000001010000000100C040C10001000199 +:10811000000001010100000100C040C10001000198 :10812000000140C10001000000000101000000004A :10813000000100C040C100010001000140C1000178 :10814000000000000101000000000000000000002D @@ -165953,7 +165953,7 @@ :108170000000000000004842818100000000000073 :1081800000000000220048420000000000004842B9 :108190008181000000000000000000002200484231 -:1081A0000000000000004842818100000000000043 +:1081A000000000000000484288410000000000007C :1081B0000000000000002200484200000000000013 :1081C0004842818100000000000000000000000023 :1081D000000000000000000000000000000000009F @@ -166051,7 +166051,7 @@ :1087900000000000000000000000000000000000D9 :1087A00000000000000000000000000000000000C9 :1087B00000000000000000000000000000000000B9 -:1087C0000000000000000000000010010000000197 +:1087C0000000000000000000000010010000100187 :1087D0000000000000000000000000000000000099 :1087E0000000000000000000000000000000000089 :1087F0000000000000000000000000000000000079 @@ -166060,15 +166060,15 @@ :108820000000000000000000000000000000000048 :108830000000000000000000000000000000000038 :108840000000000000000000000000000000000028 -:108850000000000000000000000000000000000018 +:108850000000008000000000000000000000000098 :108860000000000000000000000000000000000008 :1088700000000000000000000000000000000000F8 :1088800000000000000000000000000000000000E8 :1088900000000000000000000000000000000000D8 :1088A00000000000000000000000000000000000C8 :1088B00000000000000000000000000000000000B8 -:1088C00000000000000000000000000000000100A7 -:1088D0000000000400000000000000000000000094 +:1088C0000000000000000000000000000000400068 +:1088D0000000400400000000000000000000000054 :1088E0000000000000000000000000000000000088 :1088F0000000000000000000000000000000000078 :108900000000000000000000000000000000000067 @@ -166076,7 +166076,7 @@ :108920000000000000000000000000000000000047 :108930000000000000000000000000000000000037 :108940000000000000000000000000000000000027 -:108950000000000000000000000000000000000017 +:108950000000000000810000000000000000000096 :108960000000000000000000000000000000000007 :1089700000000000000000000000000000000000F7 :1089800000000000000000000000000000000000E7 @@ -166086,8 +166086,8 @@ :1089C00000000000000000000000000000000000A7 :1089D0000001000000000000000000000000000096 :1089E0000000000000000000000000000000000087 -:1089F0000000000000000000C000000000000000B7 -:108A00000000000000000000C000000000000000A6 +:1089F0000000000000000000000000000000000077 +:108A00000000000000000000000000000000000066 :108A10000000000000000000000000000000000056 :108A20000000000000000000000000000000000046 :108A30000000000000000000000000000000000036 @@ -166098,29 +166098,29 @@ :108A800000000000000000000000000000000000E6 :108A900000000000000000000000000000000000D6 :108AA00000000000000000000000000000000000C6 -:108AB00000000008000000000008000000000000A6 +:108AB00000000000000000000000000000000000B6 :108AC0000000100000000000000000000000000096 :108AD0000000000000000000000000000000000096 :108AE0000000000000000000000000000000000086 :108AF0000000000000000000000000000000000076 :108B00000000000000000000000000000000000065 -:108B1000000000000000000000840008008400083D -:108B2000000000000008000800000008000800081D -:108B30000008000800840000000000840000000815 -:108B400000000000808400040008000800080008FD -:108B50000008008400080000000800080008000069 -:108B600000840008000000080084000800080008D5 -:108B700000840008000800080008000800840000C5 -:108B80000008000800080008000800840008000829 -:108B900000080008008400840000000000000000BD -:108BA000000000000000000000000008002100217B -:108BB000000000000000000000050000000300218C -:108BC0000002000000000008000000000005002175 -:108BD0000021000000000021000000000000000053 -:108BE0000021000800000008002100000000002112 -:108BF00000210008000000000021004000000008E3 -:108C000000210003000000030021000300000021F8 -:108C100000210000000000000040000000000000F3 +:108B10000000000000000008000800000008000835 +:108B20000008000800080008000000080008000015 +:108B300000080008000800080008000800080008F5 +:108B400000080084800800840008000800840000F9 +:108B500000080008000800000008000800080008DD +:108B60000008000800080008000800080084000849 +:108B700000080008000800080008000800080008B5 +:108B80000008000800080008000800080084000829 +:108B900000080008000800080000000000000000B5 +:108BA00000000000000000000000000000050000C0 +:108BB000000200000000000000050000000300218A +:108BC0000004000000080000000000000000000891 +:108BD0000008000000210000000000050000000067 +:108BE000002100000000002100000000000000083B +:108BF000002100210000000300000000000000052B +:108C000000210021000000050000000900210000F3 +:108C100000210021000000210000000000000000F1 :108C20000000000000000000000000000000000044 :108C30000000000000000000000000000000000034 :108C40000000000000000000000000000000000024 @@ -166136,7 +166136,7 @@ :108CE0000000000000000000000000000000000084 :108CF0000000000000000000000000000000000074 :108D00000000000000000000000000000000000063 -:108D10000000C00000000000000000000000000093 +:108D10000000000000000000000000000000000053 :108D20000000000000000000000000000000000043 :108D30000000000000000000000000000000000033 :108D40000000000000000000000000000000000023 @@ -166145,30 +166145,30 @@ :108D700000000000000000000000000000000000F3 :108D800000000000000000000000000000000000E3 :108D900000000000000000000000000000000000D3 -:108DA0000000000000400000000000000000000083 -:108DB00000000000000000000000000300000000B0 -:108DC0000008000800000000000000030000000090 +:108DA00000000000000800000000000000000000BB +:108DB00000000000000000000000000000000000B3 +:108DC00000000000000000000000000300000000A0 :108DD000000800000000000000000000000000008B :108DE0000000000000000000000000000000000083 :108DF0000000000000000000000000000000000073 -:108E00000000000000000000000000000000000062 -:108E1000100000000008000000200000000000001A -:108E2000000800000000000000000000000000003A -:108E30000000000000000000000000000000000032 -:108E4000000000000000000000000000000800001A +:108E00000000000000210000000000000000000041 +:108E10000000000000000000000000000000000052 +:108E20000000000000000000000000000000000042 +:108E3000000000000008000000000000000000002A +:108E40000000000000000000000000000000000022 :108E50000000000000000000000000000000000012 :108E60000000000000000000000000000000000002 :108E700000000000000000000000000000000000F2 :108E800000000000000000000000000000000000E2 :108E900000000000000000000000000000000000D2 -:108EA00000000000000000000000000000000000C2 +:108EA00000000000000000000000000000210000A1 :108EB0000000000000210000000000000021000070 -:108EC000000300000000000000000000002100007E +:108EC0000021000000000000000000000021000060 :108ED0000000000000000000000000000000000092 -:108EE0000008000000000000000000000000000575 -:108EF000000000000000000800000000000000006A +:108EE0000000000000000000000000000000002161 +:108EF0000000000000000000000000000000000072 :108F00000000000000000021000000000000000040 -:108F10000000000000000000000000000000000051 +:108F10000000002100000000000000080000000028 :108F20000000000000000000000000000000000041 :108F30000000000000000000000000000000000031 :108F40000000000000000000000000000000000021 @@ -166195,18 +166195,18 @@ :1090900000000000000000000000000000000000D0 :1090A0000000000000000000000000008000000040 :1090B000000000028000000000000000000000002E -:1090C000000000110000000000000000000000008F +:1090C000000000020000000000000000000000009E :1090D0000000000000000000000000000000000090 :1090E0000000000000000000000000000000800000 -:1090F000000000000002000000000000000000006E +:1090F0000000000800020000000000000000000066 :1091000000000000000080000000000000020000DD :10911000000000000000000000000000000000004F -:10912000000000000000000000000000000010002F -:109130000000000000000800000000000000900097 +:109120000000000000000000000000000000080037 +:109130000000000000000800000000000000A00087 :10914000000000000000000000000000000000001F -:10915000000000000000A00000000000000000006F +:1091500000000000000010000000000000000000FF :1091600000000000000000000000000000000000FF -:1091700008000000000000000000000000000000E7 +:1091700040000000000100000000000000000000AE :1091800000000000000000000800000000000000D7 :1091900000000000000000000000000000000000CF :1091A00000000000000000000000000000000000BF @@ -166219,7 +166219,7 @@ :10921000000000000000000000000000000000004E :10922000000000000000000000000000000000003E :10923000000000000000000000000000000000002E -:10924000000000000000000000000000000000001E +:10924000000000000000000002000000000000001C :10925000000000000000000000000000000000000E :1092600000000000000000000000000000000000FE :1092700000000000000000000000000000000000EE @@ -166228,14 +166228,14 @@ :1092A00000000000000000000000000000000000BE :1092B00000000000000000000000000000000000AE :1092C0000000000000090000008000000000000015 -:1092D000000000000000000000000000001000007E +:1092D0000000000000000000000000000008000086 :1092E000000000000000000000000000000000007E :1092F000000000000002000000000000000000006C :10930000000000000000000000000000000000005D :10931000000000000000000000000000000000004D :10932000000000000000000000000000000000003D :10933000000000000000000000000000000000002D -:109340000000000000000000000000080000000015 +:109340000000000000000000000000840000000099 :10935000000000000000000000000000000000000D :1093600000000000000000000000000000000000FD :1093700000000000000000000000000000000000ED @@ -166324,20 +166324,20 @@ :1098A0000000000000000000900000000000000028 :1098B00000000000000000000000000000000000A8 :1098C0000000000000000000000000000000000098 -:1098D0000000200000000000000000000000000068 +:1098D0000000000000000000000000000000000088 :1098E0000000000000000000000000000000000078 -:1098F0000000200000000000000000000000000048 -:109900000000000000000000000000000002000055 -:109910000000000000000000000000000000040043 +:1098F0000000000000000000000000000000000068 +:109900000000000000000000000000000000000057 +:109910000000000000000000000000000000000047 :109920000000000000000000000000000000000037 -:109930000000000000000000000000000000200007 -:1099400000000000000000000000000040000000D7 +:109930000000000000000000000000000000000027 +:109940000000000000000000000000000000000017 :109950000000000000000000000000000000000007 :1099600000000000000000000000000000000000F7 :1099700000000000000000000000000000000000E7 :1099800000000000000000000000000000000000D7 :1099900000000000000000000000000000000000C7 -:1099A0008000000000000000000000000000000037 +:1099A00000000000000000000000000000000000B7 :1099B00000000000000000000000000000000000A7 :1099C0000000000000000000000000000000000097 :1099D0000000000000000000000000000000000087 @@ -166349,29 +166349,29 @@ :109A30000000000000000000000000000000000026 :109A40000000000000000000000000000000000016 :109A50000000000000000000000000000000000006 -:109A600000080008000000000000000000000000E6 -:109A700000080000000000000000000000000000DE -:109A800000080008000000000000000000000000C6 -:109A900000080000000000000000000000000000BE -:109AA00000000008000800000000000000040000A2 -:109AB000000000080000000000000000000000009E -:109AC000000000080084000000000000000000000A -:109AD000000000080000000000000000000000007E +:109A600000080000000000000000000000000000EE +:109A700000000000000000000000000000000000E6 +:109A800000080000000000000000000000000000CE +:109A900000000000000800000000000000000000BE +:109AA00000000008000000000000000000000000AE +:109AB000000000000008000000000000000000009E +:109AC0000000000800000000000800000000000086 +:109AD0000000000000000000000000000000000086 :109AE0000000000000000000000000000000000076 :109AF0000000000000000000000000000000000066 :109B00000000000000000000000000000000000055 :109B10000000000000000000000000000000000045 -:109B20000000000000000000000000000000000035 +:109B2000000000000000000000000008000000002D :109B30000000000000000000000000000000000025 :109B40000000000000000000000000000000000015 :109B50000000000000000000000000000000000005 :109B600000000000000000000000000000000000F5 -:109B700000000000000000000000000000000000E5 -:109B80000000000000000084000000000000000051 +:109B700000000000000000080000000000000000DD +:109B800000000000000200000000000000000000D3 :109B900000000000000000000000000000000000C5 :109BA00000000000000000000000000000000000B5 -:109BB0000000000000001000000000000000000095 -:109BC0000000000000000400000000000000000091 +:109BB00000000000000000000000000000000000A5 +:109BC0000000000000000000000000000000000095 :109BD0000000000000000000000000000000000085 :109BE0000000000000000000000000000000000075 :109BF0000000000000000000000000000000000065 @@ -166393,22 +166393,22 @@ :109CF0000000000000000000000000000000000064 :109D00000000000000000000000000000000000053 :109D10000000000000000000000000000000000043 -:109D200000000000080000000000C000000000006B +:109D20000000000000000000000000000000000033 :109D30000000000000000000000000000000000023 :109D40000000000000000000000000000000000013 -:109D500000000000000000000000000004000000FF +:109D50000000000000000000000000000000000003 :109D600000000000000000000000000000000000F3 -:109D700000000000110000000000000000000000D2 +:109D700000000000000000000000000000000000E3 :109D800000000000000000000000000000000000D3 :109D900000000000000000000000000000000000C3 -:109DA00000000000000000000000000000000000B3 +:109DA0000000000000A00000000000000000000013 :109DB00000000000000000000000000000000000A3 :109DC0000000000000000000000000000000000093 -:109DD0000000000000000000000000000000000083 +:109DD000000000080000000000000000000000007B :109DE0000000000000000000000000000000000073 :109DF0000000000000000000000000000000000063 :109E00000000000000000000000000000000000052 -:109E1000000000000000000000080000000000003A +:109E10000000000000000000000000000000000042 :109E20000000000000000000000000000000000032 :109E30000000000000000000000000000000000022 :109E40000000000000000000000000000000000012 @@ -166417,7 +166417,7 @@ :109E700000000000000000000000000000000000E2 :109E800000000000000000000000000000000000D2 :109E900000000000000000000000000000000000C2 -:109EA00005000000000000000000000000000000AD +:109EA00000000000000000000000000000000000B2 :109EB00000000000000000000000000000000000A2 :109EC0000000000000000000000000000000000092 :109ED0000000000000000000000000000000000082 @@ -166467,7 +166467,7 @@ :10A1900000000000000000000000000000000000BF :10A1A00000000000000000000000000000000000AF :10A1B000000000000000000000000000000000009F -:10A1C000030000000000000000000000000000008C +:10A1C000000000000000000000000000000000008F :10A1D000000000000000000000000000000000007F :10A1E000000000000000000000000000000000006F :10A1F000000000000000000000000000000000005F @@ -166491,7 +166491,7 @@ :10A31000000000000000000000000000000000003D :10A32000000000000000000000000000000000002D :10A33000000000000000000000000000000000001D -:10A340000000000000000082000007000000000084 +:10A34000000000000000000000000000000000000D :10A3500000000000000000000000000000000000FD :10A3600000000000000000000000000000000000ED :10A3700000000000000000000000000000000000DD @@ -166532,7 +166532,7 @@ :10A5A00000000000000000000000000000000000AB :10A5B000000000000000000000000000000000009B :10A5C000000000000000000000000000000000008B -:10A5D0000500002000000000000000000000000056 +:10A5D000000000000000000000000000000000007B :10A5E000000000000000000000000000000000006B :10A5F000000000000000000000000000000000005B :10A60000000000000000000000000000000000004A @@ -166567,42 +166567,42 @@ :10A7D0000000000000000000000000000000000079 :10A7E0000000000000000000000000000000000069 :10A7F0000000000000000000000000000000000059 -:10A800000000000000000000000000002000000028 -:10A810000000000000000010000000000010000018 -:10A820000000000000000000000000000000000028 -:10A8300000000000000020000000000000000000F8 -:10A840000000880000000000000300080000000075 -:10A8500000000000000000000000000000000000F8 -:10A8600000000000200000000000000000000000C8 -:10A8700010000000000000000000001000000000B8 -:10A8800000000000200000000000000000000000A8 +:10A8000000000000000000000000000000008800C0 +:10A8100000004000000000000000000000000000F8 +:10A820000000200000000000000000000000000008 +:10A830000000000000000000000000000000000018 +:10A840000000000000000000000000000000000008 +:10A850004000400040000000000000000000000038 +:10A8600000000000000000000000000000000000E8 +:10A870002000000000004000000000000000000078 +:10A8800000000000C00040000000000000000000C8 :10A8900000000000000000000000000000000000B8 :10A8A00000000000000000000000000000000000A8 -:10A8B0000000000000000000800000000000000018 +:10A8B0000000000000000000000000000000000098 :10A8C0000000000000000000000000000000000088 :10A8D0000000000000000000000000000000000078 -:10A8E0000000000000000000000010000000000058 +:10A8E0000000000000000000000000000000000068 :10A8F0000000000000000000000000000000000058 :10A900000000000000000000000000000000000047 :10A910000000000000000000000000000000000037 :10A920000000000000000000000000000000000027 :10A930000000000000000000000000000000000017 -:10A940000000000001000000040000000000000002 +:10A940000000000000000000000000000000000007 :10A9500000000000000000000000000000000000F7 -:10A9600000000000000000000000000004000000E3 +:10A9600000000000000000000000000000000000E7 :10A9700000000000000000000000000000000000D7 :10A9800000000000000000000000000000000000C7 -:10A9900000000000000000000000000000000000B7 +:10A99000000000002000000000000000000800008F :10A9A00000000000000000000000000000000000A7 -:10A9B0000000000000000000000000000000000097 -:10A9C00000000000000804000000800000000000FB -:10A9D0000000000000000000000000000000000077 -:10A9E00000000000000000080000000000008000DF -:10A9F000000800000000000000000000000000004F +:10A9B000000000000000000000000000000800008F +:10A9C0000000000000000000000000000000000087 +:10A9D000000000000000000000000000000000086F +:10A9E000000000000000000800000000000000005F +:10A9F000000000000000000000000000000000084F :10AA0000000000000000000800000000000000003E :10AA10000000000000000000000000000000000036 :10AA20000000000000000000000000000000000026 -:10AA30000000000000000000000000000000000016 +:10AA300000000000000000000000400000000000D6 :10AA40000000000000000000000000000000000006 :10AA500000000000000000000000000000000000F6 :10AA600000000000000000000000000000000000E6 @@ -166611,30 +166611,30 @@ :10AA900000000000000000000000000000000000B6 :10AAA00000000000000000000000000000000000A6 :10AAB0000000000000000000000000000000000096 -:10AAC0000000000000000000040000000000000082 +:10AAC000000000000000000000080000000000007E :10AAD0000000000000000000000000000000000076 :10AAE0000000000000000000000000000000000066 :10AAF0000000000000000000000000000000000056 :10AB00000000000000000000000000000000000045 :10AB10000000000000000000000000000000000035 :10AB20000000000000000000000000000000000025 -:10AB30000000000000000000000000000000C00055 -:10AB400000000000000000000000000000000020E5 -:10AB500000000020000000000000000000000000D5 -:10AB600000000000080000000000000000000000DD +:10AB30000000000000000000000000000000000015 +:10AB40000000000000000000000000000000000005 +:10AB500000000000000000000000000000000000F5 +:10AB600000000000000000000000000000000000E5 :10AB700000000000000000000000000000000000D5 :10AB800000000000000000000000000000000000C5 -:10AB900000000000000000000000000000000000B5 -:10ABA00000000000000000000000000000000000A5 -:10ABB0000000000000000000000000000000000095 -:10ABC0000000000000000000000000000000000085 -:10ABD0000001000000010000000000000000000073 -:10ABE0000000000000000000000000000000000065 -:10ABF0000000000000000000000000000000000055 -:10AC00000000000000000000000000000000000044 -:10AC10000000000000000000000000000000000034 -:10AC20000000000000000000000000000000000024 -:10AC30000800000000000000000000000800000004 +:10AB900000000000000000000000000003000800AA +:10ABA00005000000000000000000000000000000A0 +:10ABB0000800000000000000000000000800000085 +:10ABC000080000000000000000000000000000007D +:10ABD000080000000000000000000000000010005D +:10ABE0001000100000001000000000000000000035 +:10ABF0000500000000000000000000000000080048 +:10AC00000800080010000000000000000000000024 +:10AC1000000000000000000000000000000008002C +:10AC200000000000C0000000000000000000000064 +:10AC30000000000000000000000000000000000014 :10AC40000000000000000000000000000000000004 :10AC500000000000000000000000000000000000F4 :10AC600000000000000000000000000000000000E4 @@ -166642,25 +166642,25 @@ :10AC800000000000000000000000000000000000C4 :10AC900000000000000000000000000000000000B4 :10ACA00000000000000000000000000000000000A4 -:10ACB000000800000000000000000000000000008C +:10ACB0000000000000000000000000000000000094 :10ACC0000000000000000000000000000000000084 :10ACD0000000000000000000000000000000000074 :10ACE0000000000000000000000000000000000064 -:10ACF00000880000000000000000000000000000CC +:10ACF0000000000000000000000000000000000054 :10AD00000000000000000000000000000000000043 :10AD10000000000000000000000000000000000033 :10AD20000000000000000000000000000000000023 :10AD30000000000000000000000000000000000013 -:10AD40000000C00000000000000000000000000043 +:10AD40000000000000000000000000000000000003 :10AD500000000000000000000000000000000000F3 :10AD600000000000000000000000000000000000E3 :10AD700000000000000000000000000000000000D3 :10AD800000000000000000000000000000000000C3 -:10AD900000000000000000000000000000000000B3 +:10AD9000000000000000000084000000000000002F :10ADA00000000000000000000000000000000000A3 -:10ADB0000000000000000000000000000000000093 +:10ADB000410000000000000005000000000000004D :10ADC0000000000000000000000000000000000083 -:10ADD0000000000000000000000000000000000073 +:10ADD000000000000000000005000000000000006E :10ADE0000000000000000000000000000000000063 :10ADF0000000000000000000000000000000000053 :10AE00000000000000000000000000000000000042 @@ -166693,23 +166693,23 @@ :10AFB0000000000000000000000000000000000091 :10AFC0000000000000000000000000000000000081 :10AFD0000000000000000000000000000000000071 -:10AFE0000008000000100000000000000000000049 +:10AFE0000000000000000000000000000000000061 :10AFF0000000000000000000000000000000000051 -:10B000000000000000000040000000000000000000 +:10B000000000000000000000000000000000000040 :10B010000000000000000000000000000000000030 :10B020000000000000000000000000000000000020 :10B030000000000000000000000000000000000010 :10B040000000000000000000000000000000000000 :10B0500000000000000000000000000000000000F0 -:10B0600000000000A0000000000000000000000040 +:10B0600000000000000000000000000000000000E0 :10B0700000000000000000000000000000000000D0 :10B0800000000000000000000000000000000000C0 :10B0900000000000000000000000000000000000B0 :10B0A00000000000000000000000000000000000A0 :10B0B0000000000000000000000000000000000090 :10B0C0000000000000000000000000000000000080 -:10B0D000000000000000000005000000000000006B -:10B0E0000000200000000000000000000000000040 +:10B0D0000000000000000000000000000000000070 +:10B0E0000000000000000000000000000000000060 :10B0F0000000000000000000000000000000000050 :10B10000000000000000000000000000000000003F :10B11000000000000000000000000000000000002F @@ -166717,25 +166717,25 @@ :10B13000000000000000000000000000000000000F :10B1400000000000000000000000000000000000FF :10B1500000000000000000000000000000000000EF -:10B16000000000000000004100000000000000009E +:10B1600000000000000000000000000000000000DF :10B1700000000000000000000000000000000000CF -:10B1800000000000000000100000000000000000AF +:10B1800000000000000000000000000000000000BF :10B1900000000000000000000000000000000000AF :10B1A000000000000000000000000000000000009F :10B1B000000000000000000000000000000000008F :10B1C000000000000000000000000000000000007F :10B1D000000000000000000000000000000000006F -:10B1E000000000000000000000010000000000005E +:10B1E000000000000000000000000000000000005F :10B1F000000000000000000000000000000000004F -:10B20000000000000000000000010000000000003D +:10B20000000000000000000000000000000000003E :10B21000000000000000000000000000000000002E :10B22000000000000000000000000000000000001E :10B23000000000000000000000000000000000000E :10B2400000000000000000000000000000000000FE -:10B250000000000000000000600000E000000000AE -:10B260000000000000000000000000000700410096 +:10B2500000000000000000000000000000000000EE +:10B2600000000000000000000000000000000000DE :10B2700000000000000000000000000000000000CE -:10B280000000000000000000000000810000070036 +:10B2800000000000000000000000000000000000BE :10B2900000000000000000000000000000000000AE :10B2A000000000000000000000000000000000009E :10B2B000000000000000000000000000000000008E @@ -166781,10 +166781,10 @@ :10B53000000000000000000000000000000000000B :10B5400000000000000000000000000000000000FB :10B5500000000000000000000000000000000000EB -:10B560000000000000610006800D000000000000E7 -:10B570000000000005000A08050000A0000000000F +:10B5600000000000000000000000000000000000DB +:10B5700000000000000000000000000000000000CB :10B5800000000000000000000000000000000000BB -:10B5900000000000000000000020000000A00000EB +:10B5900000000000000000000000000000000000AB :10B5A000000000000000000000000000000000009B :10B5B000000000000000000000000000000000008B :10B5C000000000000000000000000000000000007B @@ -166820,94 +166820,94 @@ :10B7A0000000000000000000000000000000000099 :10B7B0000000000000000000000000000000000089 :10B7C0000000000000000000000000000000000079 -:10B7D0000000000000000000000000000000000069 +:10B7D0002000000000000000200000000000200009 :10B7E0000000000000000000000000000000000059 :10B7F0000000000000000000000000000000000049 -:10B800000000000000000000000000000000000038 -:10B810000000000000000000000000000000000028 +:10B8000000000000000000038800000000000000AD +:10B810000000000090000000000000000000000098 :10B820000000000000000000000000000000000018 -:10B830000004000000000000000000000000000004 -:10B8400000000000000000000000000000000000F8 +:10B83000C000000020000000880000008800000018 +:10B8400000001000100000000000000000000000D8 :10B8500000000000000000000000000000000000E8 :10B8600000000000000000000000000000000000D8 :10B8700000000000000000000000000000000000C8 :10B8800000000000000000000000000000000000B8 -:10B890000000000000000000100000000000000098 +:10B8900000000000000000000000000000000000A8 :10B8A0000000000000000000000000000000000098 -:10B8B0000000000000000000400010000000000038 -:10B8C0000000000000000000100000000000000068 +:10B8B0000000000000000000000000000000000088 +:10B8C0000000000000000000000000000000000078 :10B8D0000000000000000000000000000000000068 -:10B8E0000000000000000000000000000000000058 +:10B8E0000000000000000000110000000000000047 :10B8F0000000000000000000000000000000000048 -:10B900000000000000000000000000000011000026 +:10B900000000000000000000100000000000000027 :10B910000000000000000000000000000000000027 -:10B920000000000000000000000000000000000017 +:10B9200000000000000000000000200800000000EF :10B930000000000000000000000000000000000007 -:10B9400000000000000000000000000000000000F7 +:10B9400000000000000000000000200800000000CF :10B9500000000000000000000000000000000000E7 -:10B9600000000000000000000000000000000000D7 -:10B9700000000000000000000000000000000000C7 -:10B9800000000000000000000000000000000000B7 +:10B9600000000000000000000084A00000000000B3 +:10B97000000000000000008400000084000020821D +:10B98000008400000000008400008000000000002F :10B9900000000000000000000000000000000000A7 -:10B9A0000000000000000000000000000000000097 +:10B9A0000000000000000000000000008001000016 :10B9B0000000000000000000000000000000000087 -:10B9C0000000000000000000000000000000000077 -:10B9D0000000000000000000000000000000000067 -:10B9E0000000000000000000000000000000000057 -:10B9F0000000000000000000000000000000000047 -:10BA00000000000000000000000000000000000036 -:10BA10000000000000000000000000000000000026 -:10BA200000000000000000000000000000200000F6 +:10B9C00000000000000000000000000080010004F2 +:10B9D0000000000000000000000800030008000054 +:10B9E000000000000000000000080021002100000D +:10B9F00000000021000000000021002100210000C3 +:10BA000000000005000000000005002100210000EA +:10BA10000003000000050000000000090004000908 +:10BA20000000000400000000000000000009000009 :10BA30000000000000000000000000000000000006 :10BA400000000000000000000000000000000000F6 -:10BA500000000000000000000000000000000000E6 -:10BA600000000000000000000000000000000000D6 +:10BA500000004000000000000000000000000000A6 +:10BA600000000800000000000000000000000000CE :10BA700000000000000000000000000000000000C6 -:10BA80002000000000000000000000000000000096 -:10BA9000000000000000008800000000000000001E -:10BAA0000000000000000000000000000000000096 +:10BA800000000800000000000000000000000000AE +:10BA900000000000000000000000000000000000A6 +:10BAA0000000400000000000000000000000000056 :10BAB0000000000000000000000000000000000086 -:10BAC0000000000000000000000000000000000076 -:10BAD0000000000000000000000000000000000066 -:10BAE0000000000000000000000000000000000056 -:10BAF0000000000000000000000000000000000046 -:10BB00000000000000000000000000000000000035 -:10BB10000000000000000000000000000000000025 -:10BB200000210000000000000000000000000000F4 -:10BB30000000000000000000000000000000000005 -:10BB400000000000000000000000000000000000F5 -:10BB500000000000000000000000000000000000E5 +:10BAC0000000000021000000000000000000000055 +:10BAD000000082000000820082008200820082005A +:10BAE0000000820000000000820008008200820046 +:10BAF000000082004000000082008200820082007C +:10BB00000000C000000000008200080082008200E7 +:10BB100000800000000040000000820082008200DF +:10BB2000820000000000820000008200820082008B +:10BB30008200000040008200C0008200820082007B +:10BB4000820000004000000000008200A00082008F +:10BB50008200000000000000000000000000000063 :10BB600000000000000000000000000000000000D5 :10BB700000000000000000000000000000000000C5 -:10BB800000000000000000000000000000000000B5 -:10BB900000000000000000000000000000000000A5 +:10BB8000000040000300400000000000000000A092 +:10BB900000000004000000000000000000000000A1 :10BBA0000000000000000000000000000000000095 :10BBB0000000000000000000000000000000000085 -:10BBC0000000000000000000000000000000000075 +:10BBC00000000000000041004000000000000000F4 :10BBD0000000000000000000000000000000000065 -:10BBE0000000000000000000000000000000000055 +:10BBE0000800000000000000000800000000000045 :10BBF0000000000000000000000000000000000045 -:10BC00000000000000000000000000000000000034 -:10BC10000000000000000000000000000000000024 -:10BC20000000000000000000000000000000000014 -:10BC30000000000000000000000000000000000004 -:10BC400000000000000000000000000000000000F4 +:10BC0000080000000000000000000000000000002C +:10BC10000000000000000000820000400000000062 +:10BC20000000000000000004000000000000000010 +:10BC300000000000100004000800000010000000D8 +:10BC40000400A00008000000000000000000000048 :10BC500000000000000000000000000000000000E4 :10BC600000000000000000000000000000000000D4 :10BC700000000000000000000000000000000000C4 :10BC800000000000000000000000000000000000B4 -:10BC900000000000000000040000000000000000A0 +:10BC900000000000000000000000000000000000A4 :10BCA0000000000000000000000000000000000094 -:10BCB0000004400000000000000000000000000040 +:10BCB0000000000000000000000000000000000084 :10BCC0000000000000000000000000000000000074 :10BCD0000000000000000000000000000000000064 -:10BCE0000000000000000000000000000000000054 -:10BCF0000000000000000000000000000000000044 -:10BD00000000000000000000000000000000000033 -:10BD10000000000000000000000000000000000023 -:10BD20000000000000000000000000000000000013 -:10BD30000000000000000000000000000000000003 -:10BD400000000000000000000000000000000000F3 +:10BCE000000000000000000000000000000000084C +:10BCF000000000090021000000000000000000001A +:10BD00000000000000000000000000000000002112 +:10BD100000000009000500030000000000000021F1 +:10BD200000000000000000000021000000000000F2 +:10BD30000000000000000000000000000000C00043 +:10BD4000000084000000C00000000000820000002D :10BD500000000000000000000000000000000000E3 :10BD600000000000000000000000000000000000D3 :10BD700000000000000000000000000000000000C3 @@ -166916,80 +166916,80 @@ :10BDA0000000000000000000000000000000000093 :10BDB0000000000000000000000000000000000083 :10BDC0000000000000000000000000000000000073 -:10BDD0000000000000000000000000000000000063 -:10BDE0000000000000000000000000000000000053 -:10BDF0000000000000000000000000000000000043 -:10BE00000000000000000000000000000000000032 -:10BE10000000000000000000000000000000000022 -:10BE20000000000000000000000000000000000012 -:10BE30000000000000000000000000000000000002 -:10BE400000000000000000000000000000000000F2 -:10BE500000000000000000000000000000000000E2 -:10BE600000000000000000000000000000000000D2 -:10BE700000000000000000000000000000000000C2 -:10BE800000000000000000000000000000000000B2 -:10BE900000000000000000000000000000000000A2 -:10BEA0000000000000000000000000000000000092 -:10BEB0000000000000000000000000000000000082 -:10BEC0000000000000000000000000000000000072 -:10BED0000000000000000000000000000000000062 -:10BEE0000000000000000000000000000000000052 -:10BEF0000000000000000000000000000000000042 -:10BF00000000000000000000000000000000000031 -:10BF10000000000000000000000000000000000021 -:10BF20000000000000000000000000000000000011 -:10BF30000000000000000000000000000000000001 -:10BF400000000000000000000000000000000000F1 -:10BF500000000000000000000000000000000000E1 -:10BF600000000000000000000000000000000000D1 -:10BF700000000000000000000000000000000000C1 -:10BF800000000000000000000000000000000000B1 -:10BF900000000000000000000000000000000000A1 -:10BFA0000000000000000000000000000000000091 -:10BFB0000000000000000000000000000000000081 -:10BFC0000000000000000000000000000000000071 -:10BFD0000000000000000000000000000000000061 -:10BFE0000000000000000000000000000000000051 -:10BFF0000000000000000000000000000000000041 -:10C000000000000000000000000000000000000030 -:10C010000000000000000000000000000000000020 -:10C020000000000000000000000000000000000010 -:10C030000000000000000000000000000000000000 -:10C0400000000000000000000000000000000000F0 -:10C0500000000000000000000000000000000000E0 -:10C0600000000000000000000000000000000000D0 -:10C0700000000000000000000000000000000000C0 -:10C0800000000000000000000000000000000000B0 -:10C0900000000000000000000000000000000000A0 -:10C0A0000000000000000000000000000000000090 -:10C0B0000000000000000000000000000000000080 -:10C0C0000000000000000000000000000000000070 -:10C0D0000000000000000000000000000000000060 -:10C0E0000000000000000000000000000000000050 -:10C0F0000000000000000000000000000000000040 -:10C10000000000000000000000000000000000002F -:10C11000000000000000000000000000000000001F -:10C12000000000000000000000000000000000000F -:10C1300000000000000000000000000000000000FF -:10C1400000000000000000000000000000000000EF -:10C1500000000000000000000000000000000000DF -:10C1600000000000000000000000000000000000CF -:10C1700000000000000000000000000000000000BF -:10C1800000000000000000000000000000000000AF -:10C19000000000000000000000000000000000009F -:10C1A000000000000000000000000000000000008F -:10C1B000000000000000000000000000000000007F -:10C1C000000000000000000000000000000000006F -:10C1D000000000000000000000000000000000005F -:10C1E000000000000000000000000000000000004F -:10C1F000000000000000000000000000000000003F -:10C20000000000000000000000000000000000002E -:10C21000000000000000000000000000000000001E -:10C22000000000000000000000000000000000000E -:10C2300000000000000000000000000000000000FE -:10C2400000000000000000000000000000000000EE -:10C2500000000000000000000000000000000000DE -:10C2600000000000000000000000000000000000CE +:10BDD0000000000000000000000000000000000162 +:10BDE0000001000100C00001000100C000210001AD +:10BDF0000001001000880001400100C000000001A7 +:10BE00000001000100C00001000100C0002100008D +:10BE10000101001000880001400100C00000000086 +:10BE200000010001000100C00001000100C001216B +:10BE300000000101002000880001400100C0000056 +:10BE400000010001000100C00001000100C000214C +:10BE500000000101000200020001400100C00000DA +:10BE600000410041004100C00041004100890841FB +:10BE700000022041000000000041804100C000009D +:10BE800000410041004100C00041004100890841DB +:10BE900000020241000000000041804100C000009B +:10BEA000000000410041004100C00041004100820B +:10BEB000104100080241000000000041804100C024 +:10BEC000000000410041004100C02041004100C18C +:10BED000084100400241000000800041804100C054 +:10BEE000000041000300000000804100C00000008D +:10BEF0000800200082000000A0004100C1000040B6 +:10BF0000800041000300000000804100C0000000EC +:10BF100008001000C000000088004100C10000407F +:10BF20008000000341000300000000804100C000C9 +:10BF3000000008001000C000000882004100C1009D +:10BF40000040800041000300000000804100C0006C +:10BF5000000005001000C0800000A0004100C100EA +:10BF60000040800001000100000000C00100C0008E +:10BF700000000100410009880090C0004100C1009C +:10BF80000040820001000100000000C00100C0006C +:10BF900000000100410008880090C0004100C1007D +:10BFA00000408200000001000100000000C001000C +:10BFB000C00000000100830040880090C1004100E3 +:10BFC000C1000040820001000100000000C001002B +:10BFD000C00000000000830004020090C000410087 +:10BFE000C1000040820000C00001C0C1000000008C +:10BFF000000100C102830009000100C1000000002F +:10C0000000010000000000C00001C0C100000000ED +:10C01000000100C102830009000100C1000000000E +:10C02000000100000000000000C00001C0C10000CD +:10C030000000000100C188830009000100C1000068 +:10C04000000000010000000000C00001C0C10000AD +:10C050000000000100C182820009000100C100004F +:10C0600000000001000000000080004180C10000CD +:10C07000000000410090030800C1004100C1000021 +:10C0800000000041004000000080004180C100002D +:10C09000000000410090030800C1004100C1000001 +:10C0A000000000410040000000000080004180C10D +:10C0B000000000000041009000030041004100C169 +:10C0C000000000000041004000000080004180C1ED +:10C0D000000000000041009080030041004100C1C9 +:10C0E00000000000004100400000C100800080C14D +:10C0F00000004100000005004100C1410000800235 +:10C1000000004100000080004100C100800080C1AB +:10C1100000004100000005004100C141000080090D +:10C12000000041000000800041000000C1008000CC +:10C1300080C100004100000803004100C14100002F +:10C14000801000004100000080004100C10080001C +:10C1500080C100004100000803004100C14100000F +:10C16000800200004100000080004100C10040004A +:10C17000C0C100000100020003000100C1914000A5 +:10C18000C000000001000000C0000100C10040002C +:10C19000C0C100000100100003000100C19188002F +:10C1A000C000000001000000C00001000000C1004C +:10C1B0004000C0C100000100880008000100C191DA +:10C1C0008800C000000001000000C0000100C100A4 +:10C1D0004000C0C100000100200090000100C1919A +:10C1E0002000C001000001000000C00001000000AC +:10C1F000000000000042000000000000000081126A +:10C200000048070048000000000000000000000097 +:10C210000000000000420000000000000000811249 +:10C220000048070048000000000000000000000077 +:10C2300000000000000000420000000000000000BC +:10C2400081120048070048000000000000000000C4 +:10C25000000000000000004200000000000000009C +:10C2600081120048070048000000000000000000A4 :10C2700000000000000000000000000000000000BE :10C2800000000000000000000000000000000000AE :10C29000000000000000000000000000000000009E @@ -167006,173 +167006,173 @@ :10C3400000000000000000000000000000000000ED :10C3500000000000000000000000000000000000DD :10C3600000000000000000000000000000000000CD -:10C3700000000000000000000000000000000000BD +:10C3700000000000757B00000000000000000000CD :10C3800000000000000000000000000000000000AD -:10C39000000000000000000000000000000000009D +:10C390000000DEAE757B0000000000000000000021 :10C3A000000000000000000000000000000000008D -:10C3B000000000000000000000000000000000007D +:10C3B0000000DEAE0000757B000000000000000001 :10C3C000000000000000000000000000000000006D -:10C3D000000000000000000000000000000000005D +:10C3D00000000000DEAE757B0000000000000000E1 :10C3E000000000000000000000000000000000004D -:10C3F000000000000000000000000000000000003D -:10C40000000000000000000000000000000000002C -:10C41000000000000000000000000000000000001C -:10C42000000000000000000000000000000000000C -:10C4300000000000000000000000000000000000FC -:10C4400000000000000000000000000000000000EC -:10C4500000000000000000000000000000000000DC -:10C4600000000000000000000000000000000000CC -:10C4700000000000000000000000000000000000BC -:10C4800000000000000000000000000000000000AC -:10C49000000000000000000000000000000000009C -:10C4A000000000000000000000000000000000008C -:10C4B0000000000000000000000300000000000079 -:10C4C000020000000000000000000000000000006A -:10C4D000000000000000000000000000000000005C -:10C4E000000000000000000000000000000000004C -:10C4F000000000000000000000000000000000003C +:10C3F00000000000DEAE60C6030000000000000088 +:10C400000031E0000000000000000C00000000000F +:10C41000000000C0630660C60300000000000000CA +:10C420000031E0000000000000000C0000000000EF +:10C43000000000C06306000060C6030000000000AA +:10C4400000000031E0000000000000000C000000CF +:10C450000000000000C0630660C60300000000008A +:10C4600000000031E0000000000000000C000000AF +:10C470000000000000C06306200000000000200053 +:10C480000000000000000000200088000000040000 +:10C4900000002000200020002000000000002000FC +:10C4A000000000000000000020002000000020002C +:10C4B000000020002000000000002000000000001C +:10C4C00020000000A000000000002000200000006C +:10C4D0002000000020002000000020000000880054 +:10C4E000200000002000C00000002000200000000C +:10C4F0002000840000002000000000000000000078 :10C50000000000000000000000000000000000002B :10C51000000000000000000000000000000000001B :10C52000000000000000000000000000000000000B -:10C5300000000000000000000000000000000000FB -:10C54000000080000000000000000000000000006B -:10C5500000000000000000000000000000000000DB -:10C5600000000000000000000000000000000000CB -:10C5700000000004000000000000000000000000B7 +:10C5300005000500050000002000000000000000CC +:10C5400000000000000000000000000000000000EB +:10C55000000000000000000041000000000000009A +:10C5600000000000000000000900000000000000C2 +:10C5700000000000050005000000000000000000B1 :10C5800000000000000000000000000000000000AB :10C59000000000000000000000000000000000009B -:10C5A0000000000000000000000002000000000089 -:10C5B0000100000000000000000001000000000079 -:10C5C000000000000000000000000000000000006B +:10C5A0000000000000040000000002000000000085 +:10C5B00000009000000000000000000000000000EB +:10C5C000000000000000001100000000000000005A :10C5D000000000000000000000000000000000005B :10C5E000000000000000000000000000000000004B -:10C5F0000000000000000000000000000000000833 -:10C600000000000000000000000000000004000026 -:10C610000000000000000000000000000000000416 -:10C62000000000000000000000000000000000000A -:10C6300000000400400000000000000002000000B4 +:10C5F000000000000000000000000000000000003B +:10C600000000000000000000000000000008000022 +:10C6100000080000002000000000000000000000F2 +:10C620000000000000000000000000000084000086 +:10C63000000800000000000000840000000000006E :10C6400000000000000000000000000000000000EA -:10C650000000000000820000000000000000000058 +:10C6500000000090009000000000000000000000BA :10C6600000000000000000000000000000000000CA :10C6700000000000000000000000000000000000BA :10C6800000000000000000000000000000000000AA :10C69000000000000000000000000000000000009A -:10C6A000000000000000000000000000000000008A -:10C6B00000000000000000000000900000000000EA -:10C6C000000000000000000000000000000000006A -:10C6D000000000000000000000000000000000005A +:10C6A0000000000000000000000004000000000086 +:10C6B0000000000000000000000000000000002159 +:10C6C0000000000000000000000000000002000068 +:10C6D0000011000000000000000000000000000049 :10C6E000000000000000000000000000000000004A :10C6F000000000000000000000000000000000003A -:10C700000000000000000000000000000000000029 -:10C710000000000000000000000000000000000019 -:10C720000000000000000000000000000000000009 -:10C7300000000000000000000004000000000000F5 -:10C7400000000000000000000000000000000000E9 -:10C7500000000000000000000000000000000000D9 -:10C7600000000000000000000000000000000000C9 -:10C7700000000000000000000000000000000000B9 -:10C7800000000000000000000000000000000000A9 +:10C70000000000000000000008000000030000001E +:10C71000040000000000000000000000000800000D +:10C720000000000000000000080000000000000001 +:10C730000000000000C000000000000000A0000099 +:10C7400000000000000000000000080000000000E1 +:10C7500020000000000000040000000000000000B5 +:10C7600000904100110000000300080000000000DC +:10C7700003001100000000000000000000000000A5 +:10C780000000030000008200000000000000000024 :10C790000000000000000000000000000000000099 :10C7A0000000000000000000000000000000000089 :10C7B0000000000000000000000000000000000079 -:10C7C00000040000000000000000008000000000E5 -:10C7D0000000000000000000000000000000000059 -:10C7E0000000000000000000000000000000000049 -:10C7F0000000000000000000000000000000000039 +:10C7C0000000000000000000000000000000000069 +:10C7D00000000000000000000000C0000000000099 +:10C7E0000000C00000000000000000000000000089 +:10C7F00000000000C0000000000000000000000079 :10C800000000000000000000000000000000000028 :10C810000000000000000000000000000000000018 :10C820000000000000000000000000000000000008 -:10C83000000000840000000000000008000000006C -:10C8400000000001000000000000000000040000E3 +:10C8300000000000000000000000000000000000F8 +:10C8400000000000000000000000000000000000E8 :10C8500000000000000000000000000000000000D8 :10C8600000000000000000000000000000000000C8 :10C8700000000000000000000000000000000000B8 :10C8800000000000000000000000000000000000A8 :10C890000000000000000000000000000000000098 :10C8A0000000000000000000000000000000000088 -:10C8B0000000000000000000040004008800900058 -:10C8C000000000000000C011000000000011000086 -:10C8D0000004000000000000000000000000000054 -:10C8E0000000000000000000000000000000000048 +:10C8B0000000000000000000000000000000000078 +:10C8C0000000000000000000000000000000000068 +:10C8D00000000000000000000400880000000000CC +:10C8E0004000000000000000000090000000000078 :10C8F0000000000000000000000000000000000038 -:10C900000000000000000000000000000000000027 -:10C910000000000000000000000000000000000017 +:10C90000000000000800000000000000000000001F +:10C910000000008802000000000808200308000052 :10C920000000000000000000000000000000000007 -:10C9300000000000000000000000800080000000F7 -:10C9400000000000000000000000000000000000E7 -:10C9500000000005000000000000000000000000D2 -:10C9600000000000000000000000000000000000C7 -:10C9700000000000000000000000000000000000B7 -:10C9800000000000000000000000000000000000A7 +:10C93000000000880200000000A0080408080008A9 +:10C9400008000000000000000000000000000000DF +:10C9500000000000008840000520009008900804B6 +:10C960000004080000000000000000880000000033 +:10C97000000000000000080005000000080008009A +:10C98000000008000000000000000000000000009F :10C990000000000000000000000000000000000097 :10C9A0000000000000000000000000000000000087 :10C9B0000000000000000000000000000000000077 -:10C9C000000800802000000000000080000020001F -:10C9D0000004000000000020000000000000000033 +:10C9C0000000000000000000000000000000000067 +:10C9D0000000000000000000000000000000000057 :10C9E0000000000000000000000000000000000047 :10C9F0000000000000000000000000000000000037 :10CA00000000000000000000000000000000000026 :10CA10000000000000000000000000000000000016 :10CA20000000000000000000000000000000000006 :10CA300000000000000000000000000000000000F6 -:10CA4000000000000020808200000082200400001E -:10CA50008000000100000000000000000000000055 +:10CA400000000000000000000000000000000000E6 +:10CA500000000000000000000000000000000000D6 :10CA600000000000000000000000000000000000C6 -:10CA700000000000000008000000000000000000AE +:10CA700000000000000000000000000000000000B6 :10CA800000000000000000000000000000000000A6 :10CA90000000000000000000000000000000000096 :10CAA0000000000000000000000000000000000086 :10CAB0000000000000000000000000000000000076 -:10CAC00000000000000000000002008401200010AF -:10CAD0000000000890880102001000000000000023 +:10CAC0000000000000000000000000000000000066 +:10CAD0000000000000000000000000000000000056 :10CAE0000000000000000000000000000000000046 :10CAF0000000000000000000000000000000000036 :10CB00000000000000000000000000000000000025 :10CB10000000000000000000000000000000000015 :10CB20000000000000000000000000000000000005 :10CB300000000000000000000000000000000000F5 -:10CB4000000000000000000000000080000008005D -:10CB500000000000008000000380000000000000D2 +:10CB400000000000000000000000000000000000E5 +:10CB500000000000000000000000000000000000D5 :10CB600000000000000000000000000000000000C5 :10CB700000000000000000000000000000000000B5 :10CB800000000000000000000000000000000000A5 :10CB90000000000000000000000000000000000095 :10CBA0000000000000000000000000000000000085 :10CBB0000000000000000000000000000000000075 -:10CBC0000000000000000000000000000008000954 -:10CBD00000080000000000080003008800000005B5 +:10CBC0000000000000000000000000000000000065 +:10CBD0000000000000000000000000000000000055 :10CBE0000000000000000000000000000000000045 :10CBF0000000000000000000000000000000000035 :10CC00000000000000000000000000000000000024 :10CC10000000000000000000000000000000000014 :10CC20000000000000000000000000000000000004 :10CC300000000000000000000000000000000000F4 -:10CC400000000000000000000088000000880000D4 -:10CC500000100090000000000001001100200010F2 +:10CC400000000000000000000000000000000000E4 +:10CC500000000000000000000000000000000000D4 :10CC600000000000000000000000000000000000C4 :10CC700000000000000000000000000000000000B4 :10CC800000000000000000000000000000000000A4 :10CC90000000000000000000000000000000000094 :10CCA0000000000000000000000000000000000084 :10CCB0000000000000000000000000000000000074 -:10CCC000000000000000000000000000080000005C -:10CCD00002002000100011000000080010000000F9 -:10CCE0002000000000000000000000000000000024 +:10CCC0000000000000000000000000000000000064 +:10CCD0000000000000000000000000000000000054 +:10CCE0000000000000000000000000000000000044 :10CCF0000000000000000000000000000000000034 :10CD00000000000000000000000000000000000023 :10CD10000000000000000000000000000000000013 :10CD20000000000000000000000000000000000003 :10CD300000000000000000000000000000000000F3 -:10CD400000000000000000000000100000000000D3 -:10CD50000000800080000000410000000000000092 -:10CD600000000800000000000000000000000000BB +:10CD400000000000000000000000000000000000E3 +:10CD500000000000000000000000000000000000D3 +:10CD600000000000000000000000000000000000C3 :10CD700000000000000000000000000000000000B3 :10CD800000000000000000000000000000000000A3 :10CD90000000000000000000000000000000000093 :10CDA0000000000000000000000000000000000083 :10CDB0000000000000000000000000000000000073 -:10CDC0000000000000000000000000000011002131 -:10CDD00000000000800800118000000000008000BA +:10CDC0000000000000000000000000000000000063 +:10CDD0000000000000000000000000000000000053 :10CDE0000000000000000000000000000000000043 :10CDF0000000000000000000000000000000000033 :10CE00000000000000000000000000000000000022 @@ -167180,40 +167180,40 @@ :10CE20000000000000000000000000000000000002 :10CE300000000000000000000000000000000000F2 :10CE400000000000000000000000000000000000E2 -:10CE500000000000000040011001820010000000EE -:10CE600004008800080088000000000000000000A6 +:10CE500000000000000000000000000000000000D2 +:10CE600000000000000000000000000000000000C2 :10CE700000000000000000000000000000000000B2 :10CE800000000000000000000000000000000000A2 :10CE90000000000000000000000000000000000092 :10CEA0000000000000000000000000000000000082 :10CEB0000000000000000000000000000000000072 :10CEC0000000000000000000000000000000000062 -:10CED0000000000007000000000000E00000000665 -:10CEE0000000000000E00000000000000000000062 +:10CED0000000000000000000000000000000000052 +:10CEE0000000000000000000000000000000000042 :10CEF0000000000000000000000000000000000032 :10CF00000000000000000000000000000000000021 :10CF10000000000000000000000000000000000011 :10CF20000000000000000000000000000000000001 :10CF300000000000000000000000000000000000F1 :10CF400000000000000000000000000000000000E1 -:10CF500000000000000000000000F3F328EB0000D8 -:10CF60000000000000F0FFF00000000000000000E2 +:10CF500000000000000000000000000000000000D1 +:10CF600000000000000000000000000000000000C1 :10CF700000000000000000000000000000000000B1 :10CF800000000000000000000000000000000000A1 :10CF90000000000000000000000000000000000091 :10CFA0000000000000000000000000000000000081 :10CFB0000000000000000000000000000000000071 :10CFC0000000000000000000000000000000000061 -:10CFD000000000000000000000000000303028EBDE -:10CFE000000000000000AA3CAA3C00000000000075 +:10CFD0000000000000000000000000000000000051 +:10CFE0000000000000000000000000000000000041 :10CFF0000000000000000000000000000000000031 :10D000000000000000000000000000000000000020 :10D010000000000000000000000000000000000010 :10D020000000000000000000000000000000000000 :10D0300000000000000000000000000000000000F0 :10D0400000000000000000000000000000000000E0 -:10D050000000000000000000000000000000BFAB66 -:10D0600097830000000000003F7D037D000000006A +:10D0500000000000000000000000000000000000D0 +:10D0600000000000000000000000000000000000C0 :10D0700000000000000000000000000000000000B0 :10D0800000000000000000000000000000000000A0 :10D090000000000000000000000000000000000090 @@ -167221,16 +167221,16 @@ :10D0B0000000000000000000000000000000000070 :10D0C0000000000000000000000000000000000060 :10D0D0000000000000000000000000000000000050 -:10D0E0003D2915010000000000003F410341000000 +:10D0E0000000000000000000000000000000000040 :10D0F0000000000000000000000000000000000030 :10D10000000000000000000000000000000000001F :10D11000000000000000000000000000000000000F :10D1200000000000000000000000000000000000FF :10D1300000000000000000000000000000000000EF :10D1400000000000000000000000000000000000DF -:10D150000000000000000000000005000A080500B3 -:10D1600000A000613007000D0000000000613007E2 -:10D17000000D0000000000000000000000000000A2 +:10D1500000000000000000000000000000000000CF +:10D1600000000000000000000000000000000000BF +:10D1700000000000000000000000000000000000AF :10D18000000000000000000000000000000000009F :10D19000000000000000000000000000000000008F :10D1A000000000000000000000000000000000007F @@ -167266,194 +167266,194 @@ :10D38000000000000000000000000000000000009D :10D39000000000000000000000000000000000008D :10D3A000000000000000000000000000000000007D -:10D3B000000000000000000000001000000000005D -:10D3C000000000000000000000000000000000005D -:10D3D0000000000000000000040020000000000029 -:10D3E000000000000000000000000000000000003D -:10D3F00000000000000340000000000002000000E8 -:10D40000000000008800000000000000880000000C -:10D4100000000000000020000000000000000000EC -:10D42000C00000000000010001008800200000058D +:10D3B000000000000002000000000000000000006B +:10D3C000000020000000000000001000000000002D +:10D3D000000000000000000000000000000000004D +:10D3E000000010000000000000002000000000000D +:10D3F00000008800000000000000000000000000A5 +:10D400000000100020000000884000002000000004 +:10D41000000000000000000000000000000000000C +:10D42000000020002000000000000000200000009C :10D4300000000000000000000000000000000000EC :10D4400000000000000000000000000000000000DC -:10D45000000000000000000000008000000000004C +:10D4500000000000000000000000000000000000CC :10D4600000000000000000000000000000000000BC -:10D47000000000000000000000000000000080002C -:10D48000000000000000000000000000000000009C -:10D49000000000000000100000000000000000007C -:10D4A0000000000000020000040004000000000072 -:10D4B000000000000002000000000000000000006A +:10D4700000000000000000000000000000000000AC +:10D48000000000002100000000000000210000005A +:10D49000000000000000000000000000000000008C +:10D4A000000000000000000000000000000000007C +:10D4B000000000000000000000000000000000006C :10D4C000000000000000000000000000000000005C -:10D4D000000000000000000000000000000001004B -:10D4E000000000000000010000000000000000003B +:10D4D000000000000000000000000000000000004C +:10D4E0000000000000000400000000000000000038 :10D4F000000000000000000000000000000000002C -:10D500000000000000000000020000000000000019 -:10D51000000000000080000000200000000000006B -:10D52000C000000000000000000001000100000039 -:10D53000000000050000000089000000000000005D -:10D5400000000000000000000000000000000000DB -:10D5500000000000000000000000000000000000CB -:10D5600004000000000000000400000000000000B3 +:10D50000000000000000000000100000000000000B +:10D51000000000000000000000000000000000000B +:10D5200000000000000000000010000000000000EB +:10D5300000000000000000000000000000000000EB +:10D5400000000000000200000000000000000000D9 +:10D5500000000000000400000000000000000000C7 +:10D5600000000000000800000000000000000000B3 :10D5700000000000000000000000000000000000AB -:10D58000000000000000000000008000000000001B -:10D590000000000000820020009000010000000058 -:10D5A000000000000000000000000000200020003B -:10D5B0000000000000000000000004000000000067 -:10D5C000000000000000000000000000000000005B +:10D58000000000000000009000000000000000000B +:10D59000000000000000000000000000000000008B +:10D5A000000000000000000000000000000000007B +:10D5B0000000000000000000000000000000040067 +:10D5C0000000000000000000000008000000000053 :10D5D000000000000000000000000000000000004B -:10D5E0000000000000000000000000000003000038 -:10D5F00000000000000800000008000000000221F8 -:10D60000028000020008000900210003000200045B -:10D6100000000005000004200040000000000000A1 -:10D6200000000000000000000000000800000000F2 -:10D6300000050000000000200002000200000000C1 +:10D5E0000000000000000000000008000000000033 +:10D5F00000004000000000000000000000000000EB +:10D6000000000000000000000000400004000400D2 +:10D610008200400000000000000000000000000048 +:10D620000000000000000000000008008200000070 +:10D6300008000000000000000000000000000000E2 :10D6400000000000000000000000000000000000DA :10D6500000000000000000000000000000000000CA :10D6600000000000000000000000000000000000BA -:10D6700000000200000000900000000041000000D7 -:10D6800000A0000400020003008800A00088000041 -:10D6900000000000000000000001000000A00000E9 -:10D6A000000000000000000000000000000000007A -:10D6B0000000000000000000000100000000000069 +:10D6700000000000000000000000000000000000AA +:10D680000000000041000000000000000000000059 +:10D69000000000201000000000000000000000005A +:10D6A0000000000003000000000000000000000077 +:10D6B000000000000000000000000000000000006A :10D6C000000000000000000000000000000000005A :10D6D000000000000000000000000000000000004A -:10D6E000040004000000000001000000040000002D -:10D6F0008200000000000100000000088241038059 -:10D700000000A00000080021080000000080C00008 -:10D7100002000080000000001000000000000080F7 -:10D720000000000008009000200000000800000039 -:10D7300008000000000004000400000000000000D9 +:10D6E0000000000000000000000000000000080032 +:10D6F000000000000000000000000000000000002A +:10D700000000000004000000000000000000000015 +:10D71000000000000000C000000000000000000049 +:10D7200008000000000000000000000000000000F1 +:10D7300000000000000000000000000000000000E9 :10D7400000000000000000000000000000000000D9 :10D7500000000000000000000000000000000000C9 -:10D760000000800080000000000004000000800035 -:10D7700000000000000000000200000000010000A6 -:10D78000A00200000000000100A000000000000452 -:10D7900000008000002000000000000000000000E9 -:10D7A00000200000000080000000800000008000D9 -:10D7B0004100000000000000800080000000000028 +:10D7600000000000000000000000000000000000B9 +:10D7700000000000000000000000000000000000A9 +:10D780000000000000000000000000000000000099 +:10D790000000000000000000000000000000000089 +:10D7A0000000000000000000000000000000000079 +:10D7B0000000000000000000000000000000000069 :10D7C0000000000000000000000000000000000059 :10D7D0000000000000000000000000000000000049 -:10D7E0000000000000000000000000000021000018 -:10D7F00000000000204001000003000000000108BC -:10D8000000400202000041840200080241040004BA -:10D8100000040004C000001100200005000000000A -:10D82000000000008200000000000000080002204C -:10D83000000000200000200082040000820200009E -:10D8400000000002000000000000000000000000D6 -:10D8500000000000000000000000000000000000C8 +:10D7E0000000000000000000000000000000000039 +:10D7F0000000000000000000000000000000000029 +:10D800000000820000000000000000000000040092 +:10D810000400000004000000000000000000000000 +:10D8200000000000000000000000000000000000F8 +:10D8300000000000000000000000000000000000E8 +:10D8400000000000000000000000000000000000D8 +:10D8500000080000000000000000000000000000C0 :10D8600000000000000000000000000000000000B8 -:10D870000000000000008000208400000082009072 -:10D8800020A0000000050000C00402000002C0014A -:10D890000001000000010000000000010000000085 -:10D8A0000000000000000000000000000000000078 -:10D8B00000010000000100008000000100000000E5 +:10D8700000080000000000000000000000000000A0 +:10D880000000000000000000000000000000000098 +:10D8900000000020000000004100000000004100E6 +:10D8A0000020000021000000000000000000000037 +:10D8B0000000000000000020000000000000000048 :10D8C0000000000000000000000000000000000058 :10D8D0000000000000000000000000000000000048 :10D8E0000000000000000000000000000000000038 -:10D8F00000050400002100008810000000802000C6 -:10D900001100002110A10008000010000000010219 -:10D910000000C02100210000008000000000002065 -:10D920000080000000000021000000000000000056 -:10D930000000002100100021002020042000000031 -:10D940000000002100200000002100000000000075 +:10D8F0000000000000000000000000000000000028 +:10D900000000000000000000000000000000000017 +:10D9100000000000000000000000000000001000F7 +:10D9200000000000000000000000000000000000F7 +:10D9300000000000000000000000000000000000E7 +:10D9400000000000000000000000000000000000D7 :10D9500000000000000000000000000000000000C7 :10D9600000000000000000000000000000000000B7 -:10D970000000000080000000000000000000000423 -:10D980008000A0A0000080040001000080000000D2 -:10D990002001000000000000000000040000000062 -:10D9A0000001002000000000000000000000000056 -:10D9B0000000000000000001000000018001800064 -:10D9C0000000000000000001000000000000000056 +:10D9700000000000000000000000000000000000A7 +:10D980000000000000000000000000000000000097 +:10D990000000000000000000000000000000000087 +:10D9A0000000000000000000000000000000000077 +:10D9B0000000000000000000000000000000000067 +:10D9C0000000000000000000000000000000000057 :10D9D0000000000000000000000000000000000047 :10D9E0000000000000000000000000000000000037 -:10D9F00000000000000000000000000000100040D7 -:10DA0000010200880120012090A00005000001090A -:10DA1000A088031000110010008801880010000089 -:10DA2000000000000000000000000000000001A154 -:10DA3000010290100008100800100000C010000142 -:10DA40000000000000000200904000820010000072 +:10D9F0000000000000000000000000000000000027 +:10DA00000000000000000000000000000000000016 +:10DA10000000000000000000000000000000000006 +:10DA200000000000000000000000000000000000F6 +:10DA300000000000000000000000000000000000E6 +:10DA400000000000000000000000000000000000D6 :10DA500000000000000000000000000000000000C6 :10DA600000000000000000000000000000000000B6 -:10DA70000000000000000000000000000000008026 -:10DA800000000800000040000800100000C0000076 -:10DA900010C1A121039000100080000010000000C0 +:10DA700000000000000000000000000000000000A6 +:10DA80000000000000000000000000000000000096 +:10DA90000000000000000000000000000000000086 :10DAA0000000000000000000000000000000000076 -:10DAB00011910309808300898080008000008080AC -:10DAC0000011004000000000800080050090000070 +:10DAB0000000000000000000000000000000000066 +:10DAC0000000000000000000000000000000000056 :10DAD0000000000000000000000000000000000046 :10DAE0000000000000000000000000000000000036 -:10DAF0000000008000110000000000000000000095 -:10DB000000100003000800800010002000850000C5 -:10DB100000000220201008A0411100030041000471 -:10DB20000000000000000000008000000000000075 -:10DB300000004180092109910040000080000000A0 -:10DB4000008000800080000000898080001000803C -:10DB50008003000000000000000000000000000042 +:10DAF0000000000000000000000000000000000026 +:10DB00000000000000000000000000000000000015 +:10DB10000000000000000000000000000000000005 +:10DB200000000000000000000000000000000000F5 +:10DB300000000000000000000000000000000000E5 +:10DB400000000000000000000000000000000000D5 +:10DB500000000000000000000000000000000000C5 :10DB600000000000000000000000000000000000B5 -:10DB7000000000000040000000040000000200005F -:10DB800000040000000300910008000100020041B1 -:10DB9000002000000088000300040100000000894C -:10DBA0000041000000000090000000C000000010D4 -:10DBB0000000000200900000009100209000820010 -:10DBC00000000290009000C00000000288044001A4 -:10DBD00010029001000000000000000000000000A2 +:10DB700000000000000000000000000000000000A5 +:10DB80000000000000000000000000000000000095 +:10DB90000000000000000000000000000000000085 +:10DBA0000000000000000000000000000000000075 +:10DBB0000000000000000000000000000000000065 +:10DBC0000000000000000000000000000000000055 +:10DBD0000000000000000000000000000000000045 :10DBE0000000000000000000000000000000000035 -:10DBF000000000000000000008000000000000001D -:10DC0000020000008800080002001000040002006A -:10DC100010001001000040000800890111010200FD -:10DC20001000000008000000000088000000000054 -:10DC300000000800000008000000000090010090B3 -:10DC400000A000020000010001009100000090000F -:10DC500000900102400200000000000000000000EF +:10DBF0000000000000000000000000000000000025 +:10DC00000000000000000000000000000000000014 +:10DC10000000000000000000000000000000000004 +:10DC200000000000000000000000000000000000F4 +:10DC300000000000000000000000000000000000E4 +:10DC400000000000000000000000000000000000D4 +:10DC500000000000000000000000000000000000C4 :10DC600000000000000000000000000000000000B4 -:10DC70000000000000000900000080000000090012 -:10DC80000000000000000000800000001100804142 -:10DC900000110009904100000008A110A12141419C -:10DCA000800080000000110005000000000000005E -:10DCB0000800000000000000800000090909801130 -:10DCC000008000800000000010001100050010001E -:10DCD00080000080088000000000000000000000BC +:10DC700000000000000000000000000000000000A4 +:10DC80000000000000000000000000000000000094 +:10DC90000000000000000000000000000000000084 +:10DCA0000000000000000000000000000000000074 +:10DCB0000000000000000000000000000000000064 +:10DCC0000000000000000000000000000000000054 +:10DCD0000000000000000000000000000000000044 :10DCE0000000000000000000000000000000000034 -:10DCF0000000000000000000000200210000000001 -:10DD00000000001100000000800080008000000082 -:10DD1000801021000000800200004188A100210045 -:10DD20000808800000000000000000000003000060 -:10DD30000000000000400000000000808911090080 -:10DD400083038000008000808000400911000500EE -:10DD50001100211185110380110000000000000056 +:10DCF0000000000000000000000000000000000024 +:10DD00000000000000000000000000000000000013 +:10DD10000000000000000000000000000000000003 +:10DD200000000000000000000000000000000000F3 +:10DD300000000000000000000000000000000000E3 +:10DD400000000000000000000000000000000000D3 +:10DD500000000000000000000000000000000000C3 :10DD600000000000000000000000000000000000B3 :10DD700000000000000000000000000000000000A3 -:10DD80000000000000000000000040000400080047 -:10DD900002001000C00088001000000011C0400008 -:10DDA00011001100040088008800400000000000FD -:10DDB00000000000000000000000000000C0900112 -:10DDC00000001101900002A00090880000000100F6 -:10DDD000010000004101200311C00000000000000C +:10DD80000000000000000000000000000000000093 +:10DD90000000000000000000000000000000000083 +:10DDA0000000000000000000000000000000000073 +:10DDB0000000000000000000000000000000000063 +:10DDC0000000000000000000000000000000000053 +:10DDD0000000000000000000000000000000000043 :10DDE0000000000000000000000000000000000033 :10DDF0000000000000000000000000000000000023 -:10DE0000070000000000000007000000000000E024 -:10DE100000000000000000E0000000000000000022 -:10DE200000E000004106000000E0000042000000A9 -:10DE300000000700001200000000070000000000C2 -:10DE400000E0000050000000000007000006810014 -:10DE500000E007044100000000E00700001100009E +:10DE00000000000000000000000000000000000012 +:10DE10000000000000000000000000000000000002 +:10DE200000000000000000000000000000000000F2 +:10DE300000000000000000000000000000000000E2 +:10DE400000000000000000000000000000000000D2 +:10DE500000000000000000000000000000000000C2 :10DE600000000000000000000000000000000000B2 :10DE700000000000000000000000000000000000A2 -:10DE800000000000000000000000000000007E7E96 -:10DE9000F690000000007272727200000000000034 -:10DEA000EF2FEC2C000000003F6F306F00000000EF +:10DE80000000000000000000000000000000000092 +:10DE90000000000000000000000000000000000082 +:10DEA0000000000000000000000000000000000072 :10DEB0000000000000000000000000000000000062 -:10DEC00024002400000000003CFF3C3C3F363F366D -:10DED00000000000000000006666FFF000600066C1 +:10DEC0000000000000000000000000000000000052 +:10DED0000000000000000000000000000000000042 :10DEE0000000000000000000000000000000000032 :10DEF0000000000000000000000000000000000022 :10DF00000000000000000000000000000000000011 -:10DF10001818F69000000000FF3CC300000000004D -:10DF20000000E323E020000000003F6030600000BC +:10DF10000000000000000000000000000000000001 +:10DF200000000000000000000000000000000000F1 :10DF300000000000000000000000000000000000E1 -:10DF4000000000000000000000003CFF3C3C0036E8 -:10DF50000036000000000000000006060F00006010 -:10DF6000006600000000000000000000000000004B +:10DF400000000000000000000000000000000000D1 +:10DF500000000000000000000000000000000000C1 +:10DF600000000000000000000000000000000000B1 :10DF700000000000000000000000000000000000A1 :10DF80000000000000000000000000000000000091 :10DF90000000000000000000000000000000000081 @@ -167464,146 +167464,146 @@ :10DFE0000000000000000000000000000000000031 :10DFF0000000000000000000000000000000000021 :10E000000000000000000000000000000000000010 -:10E01000000000002CEC2FEF000000007E067E9F29 -:10E0200000000000000085C79DDF00000000F63002 -:10E03000F63F0000000000000000000000000000AB -:10E040000000000000000000040000000000003C90 -:10E0500000FF6F6F3C3C000000000000000027E75D -:10E0600027E79F9FFF9F00000000000000000000C6 +:10E010000000000000000000000000000000000000 +:10E0200000000000000000000000000000000000F0 +:10E0300000000000000000000000000000000000E0 +:10E0400000000000000000000000000000000000D0 +:10E0500000000000000000000000000000000000C0 +:10E0600000000000000000000000000000000000B0 :10E0700000000000000000000000000000000000A0 :10E080000000000000000000000000000000000090 -:10E0900000000000000020E023E30000000018065C -:10E0A000189F00000000000004461C5E00000000F5 -:10E0B0000630063F000000000000000000000000E5 +:10E090000000000000000000000000000000000080 +:10E0A0000000000000000000000000000000000070 +:10E0B0000000000000000000000000000000000060 :10E0C0000000000000000000000000000000000050 -:10E0D000003C00FF090918180000000000000000C3 -:10E0E000270027009D9DFD9D00000000000000000E +:10E0D0000000000000000000000000000000000040 +:10E0E0000000000000000000000000000000000030 :10E0F0000000000000000000000000000000000020 -:10E10000000000000000000005000A08050000A053 -:10E1100005000A08050000A000613007000D00009E -:10E1200000003007000C0000000000003007000C69 -:10E13000000000613007000D000005000A0805001E -:10E1400000A005000A08050000A000610000000111 -:10E150000000000040000000000005790A00C50D25 -:10E1600004A000610004001D000000000000000089 +:10E10000000000000000000000000000000000000F +:10E1100000000000000000000000000000000000FF +:10E1200000000000000000000000000000000000EF +:10E1300000000000000000000000000000000000DF +:10E1400000000000000000000000000000000000CF +:10E1500000000000000000000000000000000000BF +:10E1600000000000000000000000000000000000AF :10E17000000000000000000000000000000000009F :10E18000000000000000000000000000000000008F :10E19000000000000000000000000000000000007F -:10E1A00000000000FF00FFFF00020000000A3C3CEE -:10E1B000AAAA00C00000000000000000000000004B -:10E1C000000000000000000000000000553F553F27 -:10E1D000A0AFAFAF0000000000000000F03DFA3D2E -:10E1E000000000000F0FA52D00000000000000003F +:10E1A000000000000000000000000000000000006F +:10E1B000000000000000000000000000000000005F +:10E1C000000000000000000000000000000000004F +:10E1D000000000000000000000000000000000003F +:10E1E000000000000000000000000000000000002F :10E1F000000000000000000000000000000000001F :10E20000000000000000000000000000000000000E :10E2100000000000000000000000000000000000FE -:10E22000000000000000FF000000000200000000ED -:10E230003C3CAAAA00000000000000000000000012 -:10E24000000000000000000000000000000050304E -:10E250005030A000AF000000000000000000FA3DB8 -:10E26000FA3D000000000F0F0F2D0000000000001D +:10E2200000000000000000000000000000000000EE +:10E2300000000000000000000000000000000000DE +:10E2400000000000000000000000000000000000CE +:10E2500000000000000000000000000000000000BE +:10E2600000000000000000000000000000000000AE :10E27000000000000000000000000000000000009E :10E28000000000000000000000000000000000008E :10E29000000000000000000000000000000000007E -:10E2A00000000000000000003C3CAAAA00000000A2 -:10E2B00000A03C3C3C3C00000000000000000000CE +:10E2A000000000000000000000000000000000006E +:10E2B000000000000000000000000000000000005E :10E2C000000000000000000000000000000000004E -:10E2D0000C0F0C0FACAFACAF000000000000000052 -:10E2E000AAAA55000000000000F000F000000000A5 +:10E2D000000000000000000000000000000000003E +:10E2E000000000000000000000000000000000002E :10E2F000000000000000000000000000000000001E :10E30000000000000000000000000000000000000D :10E3100000000000000000000000000000000000FD -:10E32000000000000000000000003C3CAAAA000021 -:10E33000000000003C3C3C3C00A00000000000004D +:10E3200000000000000000000000000000000000ED +:10E3300000000000000000000000000000000000DD :10E3400000000000000000000000000000000000CD -:10E3500000003CFF3C00AC00AC00000000000000EE -:10E360000000FFFF000000000000F0F0F0F00000EF -:10E37000000000002000200020000000000000003D -:10E38000000000000000000000000000000000008D -:10E39000000200002000200000000000000000003B -:10E3A000000000020000000000000000000000006B -:10E3B0008400000000002000200004000000000095 +:10E3500000000000000000000000000000000000BD +:10E3600000000000000000000000000000000000AD +:10E37000000000000000000000000000000000009D +:10E38000000000000000000000000010000000007D +:10E39000000000000000000000000000000000007D +:10E3A000000000000000000000000010000000005D +:10E3B000000000000000000000000000000000005D :10E3C000000000000000000000000000000000004D -:10E3D00000000000000000002000200000000000FD -:10E3E00000000000000000000000400000000000ED -:10E3F000000010000000000000000000000000000D +:10E3D000000000000000000000000000000000003D +:10E3E000000000000000000000000000000000002D +:10E3F000000000000000000000000000000000001D :10E40000000000000000000000000000000000000C -:10E4100000000000000000000000200000000000DC -:10E4200000000000000000000004000000000000E8 +:10E4100000000000000000000000000000000000FC +:10E4200000000000000000000000000000000000EC :10E4300000000000000000000000000000000000DC :10E4400000000000000000000000000000000000CC -:10E4500000000002000000000000000200000000B8 +:10E4500000000000000000000000000000000000BC :10E4600000000000000000000000000000000000AC :10E47000000000000000000000000000000000009C :10E48000000000000000000000000000000000008C :10E49000000000000000000000000000000000007C :10E4A000000000000000000000000000000000006C :10E4B000000000000000000000000000000000005C -:10E4C0000000000300000000000000000000000049 -:10E4D000000000000000020000000000000000003A -:10E4E00000000000000088000000000000000000A4 +:10E4C000000000000000000000000000000000004C +:10E4D000000000000000000000000000000000003C +:10E4E000000000000000000000000000000000002C :10E4F000000000000000000000000000000000001C :10E50000000000000000000000000000000000000B :10E5100000000000000000000000000000000000FB :10E5200000000000000000000000000000000000EB :10E5300000000000000000000000000000000000DB :10E5400000000000000000000000000000000000CB -:10E55000000000000000000000000090000000002B -:10E5600000000000000000000000000000000500A6 +:10E5500000000000000000000000000000000000BB +:10E5600000000000000000000000000000000000AB :10E57000000000000000000000000000000000009B :10E58000000000000000000000000000000000008B :10E59000000000000000000000000000000000007B -:10E5A000000000000000000000000000000000006B -:10E5B000020020000000C0000000000000008841B0 -:10E5C000A000A00088000000000000000000000083 -:10E5D000000000110000000000000000000000002A +:10E5A000000000000000000000000000C0000000AB +:10E5B000000000000000000000000000000000005B +:10E5C00000000000000090000000000000000000BB +:10E5D000C0008800000000000000000000000000F3 :10E5E000000000000000000000000000000000002B :10E5F000000000000000000000000000000000001B :10E60000000000000000000000000000000000000A :10E6100000000000000000000000000000000000FA -:10E6200000000000000000000000000020002000AA -:10E630000000020220000200410000020000000869 -:10E6400000900002009000C00090000200900000C6 -:10E65000000000C000900000000000000300000463 -:10E6600008000000000000000000000000000000A2 -:10E6700000000000000000000000000000A00000FA +:10E6200000000000000000000000000000000000EA +:10E6300000000000000000000000000000000000DA +:10E6400000000000000000000000000000000000CA +:10E6500000000000000000000000000000000000BA +:10E6600000000000000000000000000000000000AA +:10E67000000000000000000000000000000000009A :10E68000000000000000000000000000000000008A :10E69000000000000000000000000000000000007A -:10E6A000000000000000000000000000000040002A +:10E6A000000000000000000000000000000000006A :10E6B000000000000000000000000000000000005A -:10E6C0000000000000000000000000000000040046 -:10E6D0000000000000000000000000000000080032 +:10E6C000000000000000000000000000000000004A +:10E6D000000000000000000000000000000000003A :10E6E000000000000000000000000000000000002A :10E6F000000000000000000000000000000000001A :10E700000000000000000000000000000000000009 :10E7100000000000000000000000000000000000F9 :10E7200000000000000000000000000000000000E9 -:10E7300000000000000009000000090000000000C7 -:10E740000000000000000020000000900000000019 -:10E750000000009000000000000000000000000029 +:10E7300000000000000000000000000000000000D9 +:10E7400000000000000000000000000000000000C9 +:10E7500000000000000000000000000000000000B9 :10E7600000000000000000000000000000000000A9 :10E770000000000000000000000000000000000099 :10E780000000000000000000000000000000000089 :10E790000000000000000000000000000000000079 -:10E7A0000000000000000000000000000000000069 -:10E7B0000000000000000000020000000000000057 +:10E7A0000000000000000000000000000000040065 +:10E7B0000000000000000000000000000000000059 :10E7C0000000000000000000000000000000000049 -:10E7D0000000000000000000000000000000000039 +:10E7D00000009000000000000000000000000000A9 :10E7E0000000000000000000000000000000000029 :10E7F0000000000000000000000000000000000019 :10E800000000000000000000000000000000000008 :10E8100000000000000000000000000000000000F8 :10E8200000000000000000000000000000000000E8 -:10E8300000000000000220A0004000C0208811005D -:10E8400000C0118400000308000020902002000096 -:10E85000110200020090050000000000009000007E +:10E8300000000000000000000000000000000000D8 +:10E8400000000000000000000000000000000000C8 +:10E8500000000000000000000000000000000000B8 :10E8600000000000000000000000000000000000A8 -:10E87000000000000300000009000000052009005E -:10E880000000000000A000000000000000000000E8 +:10E870000000000000000000000000000000000098 +:10E880000000000000000000000000000000000088 :10E890000000000000000000000000000000000078 :10E8A0000000000000000000000000000000000068 :10E8B0000000000000000000000000000000000058 -:10E8C0000000C000900000000000000000000002F6 +:10E8C0000000000000000000000000000000000048 :10E8D0000000000000000000000000000000000038 :10E8E0000000000000000000000000000000000028 :10E8F0000000000000000000000000000000000018 @@ -167611,8 +167611,8 @@ :10E9100000000000000000000000000000000000F7 :10E9200000000000000000000000000000000000E7 :10E9300000000000000000000000000000000000D7 -:10E94000000000002040090000000000110000004D -:10E9500000A0000000000000000000000000000017 +:10E9400000000000000000000000000000000000C7 +:10E9500000000000000000000000000000000000B7 :10E9600000000000000000000000000000000000A7 :10E970000000000000000000000000000000000097 :10E980000000000000000000000000000000000087 @@ -167714,59 +167714,59 @@ :10EF80000000000000000000000000000000000081 :10EF90000000000000000000000000000000000071 :10EFA0000000000000000000000000000000000061 -:10EFB0000000000000002000000000000000000031 -:10EFC0000000000000000000C00000000000000081 -:10EFD0000000000000002000000000000000000011 -:10EFE00002000002000200040000210000000000F6 -:10EFF00000030010000400002000000000000000DA -:10F0000000002000000000000000200000000005BB -:10F01000000040000000000020004002000000004E +:10EFB0000000000000000000000000000000000051 +:10EFC000000000000000000000000000000200003F +:10EFD0000000000000000000000000000000000031 +:10EFE0000000000000000000000000000000000021 +:10EFF0000000000000000000000000000000000011 +:10F000000000000000000000000000000000000000 +:10F0100000000000000000000000000000000000F0 :10F0200000000000000000000000000000000000E0 :10F0300000000000000000000000000000000000D0 :10F0400000000000000000000000000000000000C0 -:10F0500000000000100000000000000000000000A0 -:10F06000000080000000000100010000020000001C -:10F07000000000020001000000000000000000008D -:10F08000000000020000000000000000000000007E -:10F090000000000000400000000000000000000030 -:10F0A000000000020000000000000000000000005E +:10F0500000000000000000000000000000000000B0 +:10F060000000000000000000000010000000000090 +:10F070000000000000000000000000000000000090 +:10F08000000000020000000000000000004000003E +:10F090000000000000000000000000000000004030 +:10F0A0000040000000000000000000000000000020 :10F0B0000000000000000000000000000000000050 -:10F0C0000000000000000000000000000000000040 +:10F0C000000000000200000000000000000000003E :10F0D0000000000000000000000000000000000030 -:10F0E000000000000000000000000000000001001F +:10F0E000000000000210000000000000000000000E :10F0F0000000000000000000000000000000000010 -:10F1000000000000000000000000000000000000FF +:10F1000000000000000002100000000000000000ED :10F1100000000000000000000000000000000000EF -:10F1200000000000000000000000000800000000D7 +:10F1200000000000000002100000000000000000CD :10F1300000000000000000000000000000000000CF -:10F1400000080008000000000000000400000000AB +:10F1400000000000000000000000000000000000BF :10F1500000000000000000000000000000000000AF -:10F16000000200020000000000000000000041005A -:10F17000020000000000000000000000000000008D +:10F16000000000000000000000000000000000009F +:10F17000000000000000000000000000000000008F :10F18000000000000000000000000000000000007F -:10F1900000000000008400000000000000000000EB -:10F1A000000000000000000020000000000000003F +:10F19000000000000000000000000000000000006F +:10F1A000000000000000000000000000000000005F :10F1B000000000000000000000000000000000004F :10F1C000000000000000000000000000000000003F :10F1D000000000000000000000000000000000002F -:10F1E0000000000000000000000000004000C0001F -:10F1F000840000842000000420800084820020809D -:10F20000008400040021040000000400000000004D -:10F2100000030000000800000000000000000000E3 -:10F2200000000000000000200000000000000000BE +:10F1E000040000000000000000000000000000001B +:10F1F00000000000000000001000000000000000FF +:10F2000010000000000000000000000000000000EE +:10F2100000000000000000000000000000000000EE +:10F2200000000000000000000000000000000000DE :10F2300000000000000000000000000000000000CE :10F2400000000000000000000000000000000000BE :10F2500000000000000000000000000000000000AE -:10F26000000000A0008200000000000400008000F8 -:10F270000000000000091100008380040005000068 -:10F2800080040005000100000000000000000000F4 -:10F29000000000000000000000000000040000006A +:10F26000000000000000000000000000000000009E +:10F27000000000000000000000000000000000008E +:10F28000000000000000000000000000000000007E +:10F29000000000000000000000000000000000006E :10F2A000000000000000000000000000000000005E :10F2B000000000000000000000000000000000004E :10F2C000000000000000000000000000000000003E :10F2D000000000000000000000000000000000002E :10F2E000000000000000000000000000000000001E -:10F2F000100000000000000000000080000000007E +:10F2F000000000000000000000000000000000000E :10F3000000000000000000000000000000000000FD :10F3100000000000000000000000000000000000ED :10F3200000000000000000000000000000000000DD @@ -167774,247 +167774,247 @@ :10F3400000000000000000000000000000000000BD :10F3500000000000000000000000000000000000AD :10F36000000000000000000000000000000000009D -:10F370000000800000000000000000000004000009 +:10F37000000000000000000000000000000000008D :10F38000000000000000000000000000000000007D :10F39000000000000000000000000000000000006D :10F3A000000000000000000000000000000000005D :10F3B000000000000000000000000000000000004D :10F3C000000000000000000000000000000000003D :10F3D000000000000000000000000000000000002D -:10F3E0000000000000000000000000000000040019 -:10F3F000A0000000010091000121002100410183D3 -:10F4000000020005004000000000010000000000B4 -:10F4100000000000000000000000000000100008D4 +:10F3E000000000000000000000000000000000001D +:10F3F000000000000000000000000000000000000D +:10F4000000000000000000000000000000000000FC +:10F4100000000000000000000000000000000000EC :10F4200000000000000000000000000000000000DC :10F4300000000000000000000000000000000000CC :10F4400000000000000000000000000000000000BC :10F4500000000000000000000000000000000000AC -:10F46000000000000000000000000000000000A0FC -:10F470000000000400002000400010000000000018 -:10F4800020400000200000000000000020000000DC -:10F490000000000004000000000000000000000068 -:10F4A0000000000000000400000000000000000058 -:10F4B0000000000008000000000000000000000044 +:10F46000000000000000000000000000000000009C +:10F47000000000000000000000000000000000008C +:10F480000020000000200000000004000000000038 +:10F49000000000000000000000000000000000006C +:10F4A000000000000000000000000000000000005C +:10F4B000000000000000000000000000000000004C :10F4C000000000000000000000000000000000003C :10F4D000000000000000000000000000000000002C -:10F4E0000000000000000000000000000400000018 -:10F4F00020000000040000000000000000A1000047 -:10F50000000000080080001000000005000000045A -:10F5100000000005000000000000000300000000E3 +:10F4E000000000000000000000000000000000001C +:10F4F000000000000000000000000000000000000C +:10F5000000000000000000000000000000000000FB +:10F5100000000000000000000000000000000000EB :10F5200000000000000000000000000000000000DB :10F5300000000000000000000000000000000000CB :10F5400000000000000000000000000000000000BB :10F5500000000000000000000000000000000000AB :10F56000000000000000000000000000000000009B -:10F570000000000000000000000000000000000487 -:10F580000000000000000004000000000000000077 -:10F59000000100000000000000000000000000006A +:10F57000000000000000000000000000000000008B +:10F58000000000000000000000000000000000007B +:10F59000000000000000000000000000000000006B :10F5A000000000000000000000000000000000005B :10F5B000000000000000000000000000000000004B :10F5C000000000000000000000000000000000003B :10F5D000000000000000000000000000000000002B :10F5E000000000000000000000000000000000001B -:10F5F00000000010001000040082000001112088AB -:10F600008503000800000000010000010000000068 +:10F5F000000000000000000000000000000000000B +:10F6000000000000000000000000000000000000FA :10F6100000000000000000000000000000000000EA :10F6200000000000000000000000000000000000DA :10F6300000000000000000000000000000000000CA :10F6400000000000000000000000000000000000BA :10F6500000000000000000000000000000000000AA :10F66000000000000000000000000000000000009A -:10F67000000000000000008000000000000008C141 -:10F68000A1A10588009100020000410000100000C7 -:10F690000000020000000000000000000000000068 +:10F67000000000000000000000000000000000008A +:10F68000000000000000000000000000000000007A +:10F69000000000000000000000000000000000006A :10F6A000000000000000000000000000000000005A :10F6B000000000000000000000000000000000004A :10F6C000000000000000000000000000000000003A :10F6D000000000000000000000000000000000002A :10F6E000000000000000000000000000000000001A -:10F6F00000000000000000000011000000000000F9 -:10F70000028810052088418380800000911100004C -:10F710000080000011110000000000000000000047 +:10F6F000000000000000000000000000000000000A +:10F7000000000000000000000000000000000000F9 +:10F7100000000000000000000000000000000000E9 :10F7200000000000000000000000000000000000D9 :10F7300000000000000000000000000000000000C9 :10F7400000000000000000000000000000000000B9 :10F7500000000000000000000000000000000000A9 :10F760000000000000000000000000000000000099 -:10F77000000000000000000000000088008400007D -:10F78000000000C00082001101A1024000009101B0 -:10F790000000004000000101000000000000000027 +:10F770000000000000000000000000000000000089 +:10F780000000000000000000000000000000000079 +:10F790000000000000000000000000000000000069 :10F7A0000000000000000000000000000000000059 :10F7B0000000000000000000000000000000000049 :10F7C0000000000000000000000000000000000039 :10F7D0000000000000000000000000000000000029 :10F7E0000000000000000000000000000000000019 -:10F7F00000000000000000000000C0000000000049 -:10F80000C000000004000800A10102010000000087 -:10F8100000000101000000000000000100000000E5 +:10F7F0000000000000000000000000000000000009 +:10F8000000000000000000000000000000000000F8 +:10F8100000000000000000000000000000000000E8 :10F8200000000000000000000000000000000000D8 :10F8300000000000000000000000000000000000C8 :10F8400000000000000000000000000000000000B8 :10F8500000000000000000000000000000000000A8 :10F860000000000000000000000000000000000098 -:10F870000000000000000000000000008000000008 -:10F880000000000000000003A141A1081141000098 -:10F890000000000011110000000000000011000035 +:10F870000000000000000000000000000000000088 +:10F880000000000000000000000000000000000078 +:10F890000000000000000000000000000000000068 :10F8A0000000000000000000000000000000000058 :10F8B0000000000000000000000000000000000048 :10F8C0000000000000000000000000000000000038 :10F8D0000000000000000000000000000000000028 :10F8E0000000000000000000000000000000000018 :10F8F0000000000000000000000000000000000008 -:10F900000000800000000000C103210021008810D9 -:10F91000002111A1000011110000110000001111BF +:10F9000000000000000000000000000000000000F7 +:10F9100000000000000000000000000000000000E7 :10F9200000000000000000000000000000000000D7 :10F9300000000000000000000000000000000000C7 :10F9400000000000000000000000000000000000B7 :10F9500000000000000000000000000000000000A7 :10F960000000000000000000000000000000000097 :10F970000000000000000000000000000000000087 -:10F98000A000A0000800A000000011C08400030037 -:10F99000050000010182009001010000010000004B -:10F9A0000101000000000000000000000000000055 +:10F980000000000000000000000000000000000077 +:10F990000000000000000000000000000000000067 +:10F9A0000000000000000000000000000000000057 :10F9B0000000000000000000000000000000000047 :10F9C0000000000000000000000000000000000037 :10F9D0000000000000000000000000000000000027 :10F9E0000000000000000000000000000000000017 :10F9F0000000000000000000000000000000000007 -:10FA0000000000000000000042000000000000E0D4 -:10FA100000004100480000E000000081480000E0D4 +:10FA000000000000000000000000000000000000F6 +:10FA100000000000000000000000000000000000E6 :10FA200000000000000000000000000000000000D6 :10FA300000000000000000000000000000000000C6 :10FA400000000000000000000000000000000000B6 :10FA500000000000000000000000000000000000A6 :10FA60000000000000000000000000000000000096 :10FA70000000000000000000000000000000000086 -:10FA80000000000000F00FFF0000000000000AFA74 -:10FA9000FCFC00000000000000000000000000006E +:10FA80000000000000000000000000000000000076 +:10FA90000000000000000000000000000000000066 :10FAA0000000000000000000000000000000000056 :10FAB0000000000000000000000000000000000046 :10FAC0000000000000000000000000000000000036 :10FAD0000000000000000000000000000000000026 :10FAE0000000000000000000000000000000000016 :10FAF0000000000000000000000000000000000006 -:10FB00000000000000003A3A3A3A0000000000000D -:10FB10000AFA0C0C000000000000000000000000C9 +:10FB000000000000000000000000000000000000F5 +:10FB100000000000000000000000000000000000E5 :10FB200000000000000000000000000000000000D5 :10FB300000000000000000000000000000000000C5 :10FB400000000000000000000000000000000000B5 :10FB500000000000000000000000000000000000A5 :10FB60000000000000000000000000000000000095 :10FB70000000000000000000000000000000000085 -:10FB80000000000000000000550F550F00000000AD -:10FB900000007D7D5F0A00000000000000001400EE -:10FBA0001400000000000000000000000000000041 +:10FB80000000000000000000000000000000000075 +:10FB90000000000000000000000000000000000065 +:10FBA0000000000000000000000000000000000055 :10FBB0000000000000000000000000000000000045 :10FBC0000000000000000000000000000000000035 :10FBD0000000000000000000000000000000000025 :10FBE0000000000000000000000000000000000015 :10FBF0000000000000000000000000000000000005 -:10FC000000000000000000000000FF3C003C00007D -:10FC10000000000028285F0A00000000000000002B +:10FC000000000000000000000000000000000000F4 +:10FC100000000000000000000000000000000000E4 :10FC200000000000000000000000000000000000D4 :10FC300000000000000000000000000000000000C4 :10FC400000000000000000000000000000000000B4 :10FC500000000000000000000000000000000000A4 :10FC60000000000000000000000000000000000094 :10FC70000000000000000000000000000000000084 -:10FC80000000000000000000000000000000300044 -:10FC900000000000000000003007000C00000061C0 -:10FCA0000005C001000100610005C0010000000066 +:10FC80000000000000000000000000000000000074 +:10FC90000000000000000000000000000000000064 +:10FCA0000000000000000000000000000000000054 :10FCB0000000000000000000000000000000000044 :10FCC0000000000000000000000000000000000034 :10FCD0000000000000000000000000000000000024 :10FCE0000000000000000000000000000000000014 :10FCF0000000000000000000000000000000000004 :10FD000000000000000000000000000000000000F3 -:10FD1000000000000000000000003C3CAAAAC00057 -:10FD2000EB14EB14FFFF0000EB14EB14FFFF0000DB +:10FD100000000000000000000000000000000000E3 +:10FD200000000000000000000000000000000000D3 :10FD300000000000000000000000000000000000C3 :10FD400000000000000000000000000000000000B3 :10FD500000000000000000000000000000000000A3 :10FD60000000000000000000000000000000000093 :10FD70000000000000000000000000000000000083 :10FD80000000000000000000000000000000000073 -:10FD90000000000000000000000000053C3CAAAA92 -:10FDA0000000EB14EB14FFFF0000EB14EB14FFFF5B +:10FD90000000000000000000000000000000000063 +:10FDA0000000000000000000000000000000000053 :10FDB0000000000000000000000000000000000043 :10FDC0000000000000000000000000000000000033 :10FDD0000000000000000000000000000000000023 :10FDE0000000000000000000000000000000000013 :10FDF0000000000000000000000000000000000003 :10FE000000000000000000000000000000000000F2 -:10FE100000000000000000000000000000A03C3CCA -:10FE2000FFFF002000003C3CAA55AA55000000003E -:10FE3000AA55AA55000000000000000000000000C4 +:10FE100000000000000000000000000000000000E2 +:10FE200000000000000000000000000000000000D2 +:10FE300000000000000000000000000000000000C2 :10FE400000000000000000000000000000000000B2 :10FE500000000000000000000000000000000000A2 :10FE60000000000000000000000000000000000092 :10FE70000000000000000000000000000000000082 :10FE80000000000000000000000000000000000072 :10FE90000000000000000000000000000000000062 -:10FEA0003C3C0000002000003C3CAA55AA55000044 -:10FEB0000000AA55AA550000000000000000000044 +:10FEA0000000000000000000000000000000000052 +:10FEB0000000000000000000000000000000000042 :10FEC0000000000000000000000000000000000032 -:10FED0000000000000000000000000000000200002 -:10FEE0002000000000002000000040002000000072 -:10FEF000000000000000000000008800000020005A -:10FF00002000000000002000000000002000400051 -:10FF10004000000000000000000020000000000081 -:10FF20002000200000080000200300000000200046 -:10FF30002000200000000000000000002000000061 -:10FF40000000000000000000200000000000000091 -:10FF50002000200000000000000000000000000061 -:10FF60000000000000000000000000000000000091 -:10FF70000000000000000000000000000000000081 -:10FF80000000000000000000000000000000000071 +:10FED0000000000000000000000000000000000022 +:10FEE0000000000000000000000000000000000012 +:10FEF0000000000000000000000000000000000002 +:10FF000000000000000000000000000000000000F1 +:10FF100000000000000000000000000000000000E1 +:10FF200000000000000000000000000000000000D1 +:10FF300000000000000000000000000000000000C1 +:10FF400000000000000000000000000000000000B1 +:10FF500000000000000000000000000000000000A1 +:10FF6000000000000000000000000000000200008F +:10FF7000000200000000000000000000000000007F +:10FF8000000000000000000000020000000000006F :10FF90000000000000000000000000000000000061 -:10FFA0000000000000000000000000000000000051 +:10FFA000000000000000000000000000000000024F :10FFB0000000000000000000000000000000000041 -:10FFC0000000000000000000100000000000000021 -:10FFD0000000000000000000100000000000000011 +:10FFC0000000000000000000000000000000000031 +:10FFD0000000000000000000000000000000000021 :10FFE0000000000000000000000000000000000011 :10FFF0000000000000000000000000000000000001 :020000040029D1 :1000000000000000000000000000000000000000F0 -:1000100000000000000000000000000000000000E0 +:1000100000000000000000000200000000000000DE :1000200000000000000000000000000000000000D0 :1000300000000000000000000000000000000000C0 :1000400000000000000000000000000000000000B0 -:10005000000000000000000000020000000000009E -:100060000000000000040000000000040000000088 -:10007000000000000000000000000000000200007E +:1000500000000000000000000000000000000000A0 +:100060000000000000000000000000000000000090 +:100070000000000000000000000000000000000080 :100080000000000000000000000000000000000070 :10009000000002000000000000000000000000005E :1000A0000000000000000000000000000000000050 -:1000B000000000000000000000000000000400003C -:1000C0000000000000000004000000040000000028 -:1000D0000000000000000000000000080000000018 +:1000B0000000000000000000000000000000000040 +:1000C0000000000000000000000000000000000030 +:1000D0000000000000000000000000000000000020 :1000E0000000000000000000000000000000000010 :1000F0000000000000000000000000000000000000 :1001000000000000000000000000000000000000EF :1001100000000000000000000000000000000000DF :1001200000000000000000000000000000000000CF :1001300000000000000000000000000000000000BF -:1001400000000000000000000000020000000000AD +:1001400000000000000000000000000000000000AF :10015000000000000000000000000000000000009F :10016000000000000000000000000000000000008F :10017000000000000000000000000000000000007F -:100180000000000000000800000000000000000067 +:10018000000000000000000000000000000000006F :10019000000000000000000000000000000000005F -:1001A00000000000030000840000000000000000C8 -:1001B00000000002000000000040000000000008F5 +:1001A000000000000000000000000000000000004F +:1001B000000000000000000000000000000000003F :1001C000000000000000000000000000000000002F :1001D000000000000000000000000000000000001F :1001E000000000000000000000000000000000000F -:1001F00000000000000008000000000000000000F7 +:1001F00000000000000000000000000000000000FF :1002000000000000000000000000000000000000EE -:1002100000000000000008000000000000000000D6 -:1002200000080000000000000000000000000000C6 +:1002100000000000000000000000000000000000DE +:1002200000000000000000000000000000000000CE :1002300000000000000000000000000000000000BE :1002400000000000000000000000000000000000AE -:10025000000000000000000000000000C0000000DE -:10026000C000C0000000000000000000000000000E +:10025000000000000000000000000000000000009E +:10026000000000000000000000000000000000008E :10027000000000000000000000000000000000007E :10028000000000000000000000000000000000006E :10029000000000000000000000000000000000005E @@ -168029,13 +168029,13 @@ :1003200000000000000000000000000000000000CD :1003300000000000000000000000000000000000BD :1003400000000000000000000000000000000000AD -:100350000000000000000000A000A0000000080055 -:100360000000000000000000000000000800000085 +:10035000000000000000000000000000000000009D +:10036000000000000000000000000000000000008D :10037000000000000000000000000000000000007D :10038000000000000000000000000000000000006D :10039000000000000000000000000000000000005D -:1003A000000000000000000000000010000000003D -:1003B0000000000800C000080084000000002000C9 +:1003A000000000000000000000000000000000004D +:1003B000000000000000000000000000000000003D :1003C000000000000000000000000000000000002D :1003D000000000000000000000000000000000001D :1003E000000000000000000000000000000000000D @@ -168043,9 +168043,9 @@ :1004000000000000000000000000000000000000EC :1004100000000000000000000000000000000000DC :1004200000000000000000000000000000000000CC -:1004300000000000000000000000001100000000AB -:10044000000000110000000000000000000000009B -:10045000000000000800080000000000000000008C +:1004300000000000000000000000000000000000BC +:1004400000000000000000000000000000000000AC +:10045000000000000000000000000000000000009C :10046000000000000000000000000000000000008C :10047000000000000000000000000000000000007C :10048000000000000000000000000000000000006C @@ -168212,41 +168212,41 @@ :100E90000000000000000000000000000000000052 :100EA0000000000000000000000000000000000042 :100EB0000000000000000000000000000000000032 -:100EC000000000000000000000000000000000031F +:100EC0000000000000000000000000000000000022 :100ED0000000000000000000000000000000000012 :100EE0000000000000000000000000000000000002 -:100EF00000000000000000000000000000000003EF -:100F000040000000000000000000000000000000A1 -:100F100000000000000000000000000000000000D1 -:100F200000000002000000000000000000000000BF -:100F300000000000000000000000000000000000B1 -:100F400000000000000000000000000000000000A1 -:100F50000000000000000000000000000000000091 -:100F60000000000000000000000000000000000081 -:100F7000000000000000000200000000004010001F -:100F8000400000000000100000000000000200000F -:100F900000000000000000001000000040020000FF +:100EF00000000000000000000000000000000000F2 +:100F000000000000000000000000000000000000E1 +:100F100000000000000000000000000000000002CF +:100F200000000000000000000002000000000000BF +:100F300000000002000000000000000000000000AF +:100F4000000000000000000000000002000000009F +:100F50000000000000000000000040000000000051 +:100F60000000000040000002000200020002000237 +:100F7000000000020000000040020000000000002D +:100F800000000000000000000000400040000040A1 +:100F90000000000000000000000000000000000051 :100FA0000000000000000000000000000000000041 :100FB0000000000000000000000000000000000031 -:100FC0000000000000000000000000000000000021 +:100FC000000000000000000000000000000002100F :100FD0000000000000000000000000000000000011 :100FE0000000000000000000000000000000000001 -:100FF00002000000000000000400000000000000EB -:1010000000000000000000000200000000000000DE -:1010100000000000000000000000000000000000D0 -:1010200000000000000000080000000000000000B8 -:1010300000000008000000000000000000000000A8 -:101040000000000000000008000000000000000098 -:101050000000000800000000000000000000000088 -:101060000000000000000000000800000000000078 -:101070000000000000080000000000000000000068 -:101080000000000000000000000800000000000058 -:1010900000000000008400000000000000000000CC -:1010A000000002000000000000000000000000003E +:100FF00000100000000000000000000000000000E1 +:1010000000000000000000000000000000000000E0 +:1010100000100000000000000000000000000000C0 +:1010200000000000000000000000000000000000C0 +:1010300000000000000000000000000000000000B0 +:1010400000000000000000000000000000000000A0 +:101050000000000000000000000000000000000090 +:101060000000000000000000000000000000000080 +:101070000000000000000000000000000000000070 +:101080000000000000000000000000000000000060 +:101090000000000000000000000000000000000050 +:1010A0000000000000000000000000000000000040 :1010B0000000000000000000000000000000000030 :1010C0000000000000000000000000000000000020 :1010D0000000000000000000000000000000000010 -:1010E00000000000000002000000000000000000FE +:1010E0000000000000000000000000000000000000 :1010F00000000000000000000000000000000000F0 :1011000000000000000000000000000000000000DF :1011100000000000000000000000000000000000CF @@ -168255,7 +168255,7 @@ :10114000000000000000000000000000000000009F :10115000000000000000000000000000000000008F :10116000000000000000000000000000000000007F -:1011700000000000000000000040004000000000EF +:10117000000000000000000000000000000000006F :10118000000000000000000000000000000000005F :10119000000000000000000000000000000000004F :1011A000000000000000000000000000000000003F @@ -168272,9 +168272,9 @@ :10125000000000000000000000000000000000008E :10126000000000000000000000000000000000007E :10127000000000000000000000000000000000006E -:10128000040000000000000000000000000000005A +:10128000000000000000000000000000000000005E :10129000000000000000000000000000000000004E -:1012A0000000000000A0000000000000000000009E +:1012A000000000000000000000000000000000003E :1012B000000000000000000000000000000000002E :1012C000000000000000000000000000000000001E :1012D000000000000000000000000000000000000E @@ -168282,7 +168282,7 @@ :1012F00000000000000000000000000000000000EE :1013000000000000000000000000000000000000DD :1013100000000000000000000000000000000000CD -:10132000000000000000002100000000000000009C +:1013200000000000000000000000000000000000BD :1013300000000000000000000000000000000000AD :10134000000000000000000000000000000000009D :10135000000000000000000000000000000000008D @@ -168303,10 +168303,10 @@ :10144000000000000000000000000000000000009C :10145000000000000000000000000000000000008C :10146000000000000000000000000000000000007C -:101470000500000000000000000000000000000067 +:10147000000000000000000000000000000000006C :10148000000000000000000000000000000000005C :10149000000000000000000000000000000000004C -:1014A00000000000000000820000000000000000BA +:1014A000000000000000000000000000000000003C :1014B000000000000000000000000000000000002C :1014C000000000000000000000000000000000001C :1014D000000000000000000000000000000000000C @@ -168453,43 +168453,43 @@ :101DA0000000000000000000000000000000000033 :101DB0000000000000000000000000000000000023 :101DC0000000000000000000000000000000000013 -:101DD0000000000000000000000000000000000003 -:101DE00000020000000000000002000000000002ED -:101DF00000000000000020000000000000000000C3 -:101E00000000000000004000000000000000000092 -:101E1000000000000000200000030000000000009F -:101E20000000000000000000200000000000000092 -:101E3000000000000000000020030000000000007F -:101E400000080000000000008800000300000008F7 -:101E50000000000000000000200000000000000062 +:101DD00000000000000000000000000000040000FF +:101DE00000000000000000000000000000000000F3 +:101DF00000000000000000000000000000000000E3 +:101E000000000000000000000000000000000000D2 +:101E100000000000000000000000000000000000C2 +:101E200000000000000000000000000000000000B2 +:101E300000000000000000000000000000000000A2 +:101E40000000000000000000000000000000000092 +:101E50000000000000000000000000000000000082 :101E60000000000000000000000000000000000072 -:101E700000000000000000000004400040000000DE -:101E80000000000000000000000000020000000050 +:101E70000000000000000000000000000000000062 +:101E80000000000000020000000000000000000050 :101E90000000000000000000000000000000000042 :101EA0000000000000000000000000000000000032 -:101EB0000000000000000000000200000000000020 -:101EC0000002000000000000000000000000000010 -:101ED00000000040000000000002000000000000C0 +:101EB0000000000000000000000000000000000022 +:101EC0000000000000000000000000000000000012 +:101ED0000000000000000000000000000000000002 :101EE00000000000000000000000000000000000F2 :101EF00000000000000000000000000000000000E2 -:101F000000000000000000000000000000000100D0 -:101F10002100000000000000000040000000000060 +:101F000000000000000000000000000000000000D1 +:101F100000000000000000000000000000000000C1 :101F200000000000000000000000000000000000B1 :101F300000000000000000000000000000000000A1 -:101F4000000000000000000000000000030000206E -:101F5000000004000000000000000000000000007D -:101F60000000000800040000000800040008000051 -:101F70000000000000000008000000000000000059 -:101F80000000000800000000000200000002000045 -:101F90002000840000000090000000008400000089 -:101FA0000000000000080000000000000000000029 -:101FB0000000000000000000000000000000000819 -:101FC00000000002001000000000000000000800F7 -:101FD00000010000800000000000000000000090F0 +:101F40000000000000000000000000000000000091 +:101F50000000000000000000000000000000000081 +:101F60000000000000000000000000000000000071 +:101F70000000000000000000000000000000000061 +:101F80000000000000000000000000000000000051 +:101F9000000000000000000000000000040000003D +:101FA0000000000000000000000000000000000031 +:101FB0000000000000000000000000000000000021 +:101FC0000000000000000000000000000000000011 +:101FD0000000000000000000000000000000000001 :101FE00000000000000000000000000000000000F1 :101FF00000000000000000000000000000000000E1 :1020000000000000000000000000000000000000D0 -:1020100000000000000001000000000000000000BF +:1020100000000000000000000000000000000000C0 :1020200000000000000000000000000000000000B0 :1020300000000000000000000000000000000000A0 :102040000000000000000000000000000000000090 @@ -168497,133 +168497,133 @@ :102060000000000000000000000000000000000070 :102070000000000000000000000000000000000060 :102080000000000000000000000000000000000050 -:1020900000000000000000000400000000880000B4 +:102090000000000000000000000000000000000040 :1020A0000000000000000000000000000000000030 :1020B0000000000000000000000000000000000020 -:1020C000000000000000000000000000008200008E -:1020D00000000000000000000000000002000000FE +:1020C0000000000000000000000000000000000010 +:1020D0000000000000000000000000000000000000 :1020E00000000000000000000000000000000000F0 :1020F00000000000000000000000000000000000E0 :1021000000000000000000000000000000000000CF -:1021100000000000010000000000010400000000B9 -:1021200000000008000000000000000000000000A7 +:1021100000000000000000000000000000000000BF +:1021200000000000000000000000000000000000AF :10213000000000000000000000000000000000009F -:10214000000000000200000000000000000000206D -:10215000010300000000000000200000000000005B +:10214000000000000000000000000000000000008F +:10215000000000000000000000000000000000007F :10216000000000000000000000000000000000006F :10217000000000000000000000000000000000005F :10218000000000000000000000000000000000004F -:1021900000000000000020000000000020000000FF +:10219000000000000000000000000000000000003F :1021A000000000000000000000000000000000002F :1021B000000000000000000000000000000000001F -:1021C00000000000400000000000000000000000CF -:1021D00000010800000000000000000100000000F5 +:1021C000000000000000000000000000000000000F +:1021D00000000000000000000000000000000000FF :1021E00000000000000000000000000000000000EF :1021F00000000000000000000000000000000000DF :1022000000000000000000000000000000000000CE -:10221000000000000000000000000400002000009A -:102220000002000500040040000000000000000063 +:1022100000000000000000000000000000000000BE +:1022200000000000000000000000000000000000AE :10223000000000000000000000000000000000009E -:10224000000000000000000000000200000000008C -:10225000000004000000042004000041A0009002DF -:10226000000200000000000000000000000000006C +:10224000000000000000000000000000000000008E +:10225000000000000000000000000000000000007E +:10226000000000000000000000000000000000006E :10227000000000000000000000000000000000005E :10228000000000000000000000000000000000004E -:1022900000000000000000000000000080000001BD +:10229000000000000000000000000000000000003E :1022A000000000000000000000000000000000002E :1022B000000000000000000000000000000000001E :1022C000000000000000000000000000000000000E -:1022D00000000000800000000001800000000000FD +:1022D00000000000000000000000000000000000FE :1022E00000000000000000000000000000000000EE :1022F00000000000000000000000000000000000DE :1023000000000000000000000000000000000000CD -:102310000000000000000000000000000400200099 -:10232000000000000000000000090008000000009C -:102330000008000000000000000000000000000095 +:1023100000000000000000000000000000000000BD +:1023200000000000000000000000000000000000AD +:10233000000000000000000000000000000000009D :10234000000000000000000000000000000000008D -:102350000000000000000000040004000000000075 -:1023600000800020010000000000000000000000CC +:10235000000000000000000000000000000000007D +:10236000000000000000000000000000000000006D :10237000000000000000000000000000000000005D :10238000000000000000000000000000000000004D -:1023900000000000000000000000000000008000BD -:1023A000800000002000210000001100000000005B -:1023B0000000000800000000000000000000000015 +:10239000000000000000000000000000000000003D +:1023A000000000000000000000000000000000002D +:1023B000000000000000000000000000000000001D :1023C000000000000000000000000000000000000D -:1023D0000000000000000000000080828000080073 -:1023E0000000002041090400050041000000050034 +:1023D00000000000000000000000000000000000FD +:1023E00000000000000000000000000000000000ED :1023F00000000000000000000000000000000000DD :1024000000000000000000000000000000000000CC :1024100000000000000000000000000000000000BC -:1024200000009100080100000000000040000000D2 +:1024200000000000000000000000000000000000AC :10243000000000000000000000000000000000009C :10244000000000000000000000000000000000008C -:10245000000000000000000000000808009000904C -:102460009020080800080088080000000000000014 +:10245000000000000000000000000000000000007C +:10246000000000000000000000000000000000006C :10247000000000000000000000000000000000005C :10248000000000000000000000000000000000004C :10249000000000000000000000000000000000003C -:1024A0000000111083209010000803000500800038 +:1024A000000000000000000000000000000000002C :1024B000000000000000000000000000000000001C :1024C000000000000000000000000000000000000C -:1024D000000000000000000000000000110000806B -:1024E00000000000080000000000000000000000E4 +:1024D00000000000000000000000000000000000FC +:1024E00000000000000000000000000000000000EC :1024F00000000000000000000000000000000000DC :1025000000000000000000000000000000000000CB :1025100000000000000000000000000000000000BB -:102520000000000000002000410010030000000037 +:1025200000000000000000000000000000000000AB :10253000000000000000000000000000000000009B :10254000000000000000000000000000000000008B :10255000000000000000000000000000000000007B -:10256000800080000080000000200080000000004B +:10256000000000000000000000000000000000006B :10257000000000000000000000000000000000005B :10258000000000000000000000000000000000004B :10259000000000000000000000000000000000003B -:1025A0000000000000000010001000000085000086 +:1025A000000000000000000000000000000000002B :1025B000000000000000000000000000000000001B :1025C000000000000000000000000000000000000B :1025D00000000000000000000000000000000000FB -:1025E00008002020A0002040080008040040C0008F +:1025E00000000000000000000000000000000000EB :1025F00000000000000000000000000000000000DB :1026000000000000000000000000000000000000CA :1026100000000000000000000000000000000000BA -:102620000000000000000000000000008400000026 -:102630000000000100000001000000000000000098 +:1026200000000000000000000000000000000000AA +:10263000000000000000000000000000000000009A :10264000000000000000000000000000000000008A :10265000000000000000000000000000000000007A -:102660000000889000900210001010080000000484 -:102670000220000000000000000000000000000038 +:10266000000000000000000000000000000000006A +:10267000000000000000000000000000000000005A :10268000000000000000000000000000000000004A :10269000000000000000000000000000000000003A -:1026A0000000000000000000000011080020C1111F -:1026B00009000008000800200010000000000000D1 +:1026A000000000000000000000000000000000002A +:1026B000000000000000000000000000000000001A :1026C000000000000000000000000000000000000A :1026D00000000000000000000000000000000000FA -:1026E00000000000110000008000008000000000D9 -:1026F00000808000000000000000000000000000DA +:1026E00000000000000000000000000000000000EA +:1026F00000000000000000000000000000000000DA :1027000000000000000000000000000000000000C9 :1027100000000000000000000000000000000000B9 -:102720000000000000000000000000002011114126 -:10273000000011090000000000000000000000007F +:1027200000000000000000000000000000000000A9 +:102730000000000000000000000000000000000099 :102740000000000000000000000000000000000089 :102750000000000000000000000000000000000079 -:1027600000000000000000000088000000000003DE -:1027700000888080000000000000000000000000D1 +:102760000000000000000000000000000000000069 +:102770000000000000000000000000000000000059 :102780000000000000000000000000000000000049 :102790000000000000000000000000000000000039 -:1027A0000000000000000000000000000000000920 -:1027B0000001000000000000000000000000000018 +:1027A0000000000000000000000000000000000029 +:1027B0000000000000000000000000000000000019 :1027C0000000000000000000000000000000000009 :1027D00000000000000000000000000000000000F9 -:1027E0000000000000000000000000C00008000021 -:1027F000080000020240100000000000000000007D +:1027E00000000000000000000000000000000000E9 +:1027F00000000000000000000000000000000000D9 :1028000000000000000000000000000000000000C8 :1028100000000000000000000000000000000000B8 :1028200000000000000000000000000000000000A8 -:10283000000000E007004100000000000000000070 +:102830000000000000000000000000000000000098 :102840000000000000000000000000000000000088 :102850000000000000000000000000000000000078 -:102860000000000000000000000000000000070061 -:10287000420000000000070000000000000000000F +:102860000000000000000000000000000000000068 +:102870000000000000000000000000000000000058 :102880000000000000000000000000000000000048 :102890000000000000000000000000000000000038 :1028A0000000000000000000000000000000000028 @@ -168631,7 +168631,7 @@ :1028C0000000000000000000000000000000000008 :1028D00000000000000000000000000000000000F8 :1028E00000000000000000000000000000000000E8 -:1028F000020B929B3C3CF9F9FFBDC3810000000034 +:1028F00000000000000000000000000000000000D8 :1029000000000000000000000000000000000000C7 :1029100000000000000000000000000000000000B7 :1029200000000000000000000000000000000000A7 @@ -168639,7 +168639,7 @@ :102940000000000000000000000000000000000087 :102950000000000000000000000000000000000077 :102960000000000000000000000000000000000067 -:102970000000626BF2FB3C3C60607E3C4200000069 +:102970000000000000000000000000000000000057 :102980000000000000000000000000000000000047 :102990000000000000000000000000000000000037 :1029A0000000000000000000000000000000000027 @@ -168655,28 +168655,28 @@ :102A40000000000000000000000000000000000086 :102A50000000000000000000000000000000000076 :102A60000000000000000000000000000000000066 -:102A700000003C00FCFC00FFFCFC0FFF66FFE0E0F8 -:102A8000EFEF000000000000000000000000000068 +:102A70000000000000000000000000000000000056 +:102A80000000000000000000000000000000000046 :102A90000000000000000000000000000000000036 :102AA0000000000000000000000000000000000026 :102AB0000000000000000000000000000000000016 :102AC0000000000000000000000000000000000006 :102AD00000000000000000000000000000000000F6 :102AE00000000000000000000000000000000000E6 -:102AF00000000000FFC3FCFC00FFBDBD0F0066002E -:102B000020202F2F00000000000000000000000027 +:102AF00000000000000000000000000000000000D6 +:102B000000000000000000000000000000000000C5 :102B100000000000000000000000000000000000B5 :102B200000000000000000000000000000000000A5 -:102B300000000000000000000000000005610A091C -:102B4000050100A000610006000D0000000000006B +:102B30000000000000000000000000000000000095 +:102B40000000000000000000000000000000000085 :102B50000000000000000000000000000000000075 :102B60000000000000000000000000000000000065 -:102B700000000000000005000A08050000A0000099 -:102B8000000800000000000000000000000000003D +:102B70000000000000000000000000000000000055 +:102B80000000000000000000000000000000000045 :102B90000000000000000000000000000000000035 :102BA0000000000000000000000000000000000025 -:102BB0000000000000000000000000000000FF0016 -:102BC0007D7DF8FBF8FB00000000FFCF7C7C00005F +:102BB0000000000000000000000000000000000015 +:102BC0000000000000000000000000000000000005 :102BD00000000000000000000000000000000000F5 :102BE00000000000000000000000000000000000E5 :102BF00000000000000000000000000000000000D5 @@ -168684,7 +168684,7 @@ :102C100000000000000000000000000000000000B4 :102C200000000000000000000000000000000000A4 :102C30000000000000000000000000000000000094 -:102C4000FF002828080B080B00000000FFCF7F7F43 +:102C40000000000000000000000000000000000084 :102C50000000000000000000000000000000000074 :102C60000000000000000000000000000000000064 :102C70000000000000000000000000000000000054 @@ -168692,7 +168692,7 @@ :102C90000000000000000000000000000000000034 :102CA0000000000000000000000000000000000024 :102CB0000000000000000000000000000000000014 -:102CC00000000FFF0F3CA0AFA0AF0000000000000D +:102CC0000000000000000000000000000000000004 :102CD00000000000000000000000000000000000F4 :102CE00000000000000000000000000000000000E4 :102CF00000000000000000000000000000000000D4 @@ -168700,442 +168700,442 @@ :102D100000000000000000000000000000000000B3 :102D200000000000000000000000000000000000A3 :102D30000000000000000000000000000000000093 -:102D4000000000000F000F3CA0A0AFAF000000008B +:102D40000000000000000000000000000000000083 :102D50000000000000000000000000000000000073 :102D60000000000000000000000000000000000063 :102D70000000000000000000000000000000000053 :102D80000000000000000000000000000000000043 -:102D90000000000000000000000200002000000011 -:102DA00000000004000000000000000020000000FF -:102DB00000000000200000000000000020000000D3 -:102DC0000000000000800000000000002000000063 -:102DD00000000000200000030000000000002000B0 -:102DE00000000000000000080000000000002000BB -:102DF000000000000000200000024002A0002000AF -:102E0000000000000000000004000000000020009E -:102E1000000000008800200000000000000000000A +:102D90000000000000000000000000000000000033 +:102DA0000000000000000000000000000000000023 +:102DB0000000000000000000000000000000000013 +:102DC0000000000000000000000000000000000003 +:102DD00000000000000000000000000000000000F3 +:102DE00000000000000000000000000000000000E3 +:102DF00000000000000000000000000000000000D3 +:102E000000000000000000000000000000000000C2 +:102E100000000000000000000000000000000000B2 :102E200000000000000000000000000000000000A2 :102E30000000000000000000000000000000000092 -:102E4000000000000000000400000000000000007E -:102E50000082009000000000000000000000000060 -:102E600000000000000000024000400040000000A0 -:102E700000000084000000840000000180010000C8 -:102E8000000000000000400200028000000000007E -:102E9000100200000084000200000000000000009A +:102E400000000002400000000000000040020000FE +:102E50000000000000000000000000000040000032 +:102E6000000010000002000000400000000200000E +:102E70000000000040004002000040000000000090 +:102E80000000000000000000000000000000000042 +:102E90000000000000000000000000000000000032 :102EA0000000000000000000000000000000000022 -:102EB0000000000000000000000000000000000012 -:102EC0000000000000000000008000000000000082 -:102ED0000000000009000000840000000000000065 -:102EE00000000000000000000000000000000004DE -:102EF00000000000000000000000000001000000D1 -:102F00000000000000000000000000000000410080 -:102F1000000500000000000001004000000400085F -:102F20000002000200840000000800080004000005 -:102F300000080004000400000000000000000082FF -:102F40000000000000000000000400040000000079 -:102F5000000200000500C0000000000000000000AA +:102EB0000000000000000000021000000000000000 +:102EC0000000000000000000000000000000000002 +:102ED00000000000000000000800000000000000EA +:102EE00000000000000000000000000000000000E2 +:102EF00000000000000000000000021000000000C0 +:102F000000000000000000000000000000000000C1 +:102F1000000000000000000000000210000000009F +:102F200000000000000000000000000000000000A1 +:102F30000000000000000000000000000000000091 +:102F40000000000000000000000000000000000081 +:102F50000000000000000000000000000000000071 :102F60000000000000000000000000000000000061 -:102F70000000000000000000000000000000400809 -:102F800000000500000000000000000000820000BA -:102F90008800000000000000000008008000000021 -:102FA00000000000004000000000002000000000C1 -:102FB00000000000000000200000000000000000F1 +:102F70000000000000000000000000000000000051 +:102F80000000000000000000000000000000000041 +:102F90000000000000000000000000000000000031 +:102FA0000000000000000000000000000000000021 +:102FB0000000000000000000000000000000000011 :102FC0000000000000000000000000000000000001 :102FD00000000000000000000000000000000000F1 :102FE00000000000000000000000000000000000E1 :102FF00000000000000000000000000000000000D1 -:1030000000000000000000000005000000090000B2 -:1030100000000000000001000000000000000000AF +:1030000000000000000000000000000000000000C0 +:1030100000000000000000000000000000000000B0 :1030200000000000000000000000000000000000A0 :103030000000000000000000000000000000000090 -:10304000000000000000000000000200000000007E -:1030500000000000200000040084004000900000F8 -:103060000000000800000000000000000000000058 +:103040000000000000000000000000000000000080 +:103050000000000000000000000000000000000070 +:103060000000000000000000000000000000000060 :103070000000000000000000000000000000000050 -:103080000000000020000000408800001100000047 -:10309000110005000000008408000002000000A0EC -:1030A000000200000000000000000000000000001E +:103080000000000000000000000000000000000040 +:103090000000000000000000000000000000000030 +:1030A0000000000000000000000000000000000020 :1030B0000000000000000000000000000000000010 :1030C0000000000000000000000000000000000000 :1030D00000000000000000000000000000000000F0 -:1030E00000000000000000000000000000000000E0 +:1030E00000400000000000000000000000000000A0 :1030F00000000000000000000000000000000000D0 -:1031000000000000000000000000000800000000B7 -:103110009000000284000000000901040084000007 +:1031000000000000000000000000000000000000BF +:1031100000000000000000000000000000000000AF :10312000000000000000000000000000000000009F :10313000000000000000000000000000000000008F :10314000000000000000000000000000000000007F -:10315000000000000000000011000000000000005E -:1031600000000000000000000000009000000000CF +:10315000000000000000000000000000000000006F +:10316000000000000000000000000000000000005F :10317000000000000000000000000000000000004F :10318000000000000000000000000000000000003F -:103190000000000000010000000000000801000520 -:1031A00000A000000000000000000000000000007F +:10319000000000000000000000000000000000002F +:1031A000000000000000000000000000000000001F :1031B000000000000000000000000000000000000F :1031C00000000000000000000000000000000000FF :1031D00000000000000000000000000000000000EF :1031E00000000000000000000000000000000000DF :1031F00000000000000000000000000000000000CF -:1032000000000000000000000000000000000400BA -:10321000000001000100400084212000208084087B -:1032200000004000C040000200000000000000005C +:1032000000000000000000000000000000000000BE +:1032100000000000000000000000000000000000AE +:10322000000000000000000000000000000000009E :10323000000000000000000000000000000000008E :10324000000000000000000000000000000000007E -:10325000000000000000000000002000000000202E -:103260000000000040880000000000000000000096 +:10325000000000000000000000000000000000006E +:10326000000000000000000000000000000000005E :10327000000000000000000000000000000000004E :10328000000000000000000000000000000000003E -:1032900000000900040804000900000080008020EC -:1032A000009000000000000000000000000000008E +:10329000000000000000000000000000000000002E +:1032A000000000000000000000000000000000001E :1032B000000000000000000000000000000000000E :1032C00000000000000000000000000000000000FE :1032D00000000000000000000000000000000000EE -:1032E00000000000000000000000000000080000D6 +:1032E00000000000000000000000000000000000DE :1032F00000000000000000000000000000000000CE :1033000000000000000000000000000000000000BD -:10331000000000000080010000800500018304809F -:103320000180018000080021000800210000000049 +:1033100000000000000000000000000000000000AD +:10332000000000000000000000000000000000009D :10333000000000000000000000000000000000008D :10334000000000000000000000000000000000007D :10335000000000000000000000000000000000006D -:1033600000000000008400000000000000000500D4 -:103370000000050005000000000000000000000043 +:10336000000000000000000000000000000000005D +:10337000000000000000000000000000000000004D :10338000000000000000000000000000000000003D -:10339000000000000000002004000020840004045D -:1033A00080202020040441000000000000000000F4 +:10339000000000000000000000000000000000002D +:1033A000000000000000000000000000000000001D :1033B000000000000000000000000000000000000D :1033C00000000000000000000000000000000000FD -:1033D00000000000000000000100080000000000E4 -:1033E00000000000000000A00040008900890000EB +:1033D00000000000000000000000000000000000ED +:1033E00000000000000000000000000000000000DD :1033F00000000000000000000000000000000000CD :1034000000000000000000000000000000000000BC -:10341000000000010000000000000000100000009B -:1034200000A001904008002089A000089140028877 +:1034100000000000000000000000000000000000AC +:10342000000000000000000000000000000000009C :10343000000000000000000000000000000000008C :10344000000000000000000000000000000000007C -:103450000000000000000000000008000000000064 -:10346000000000000000000000C1009000080008FB +:10345000000000000000000000000000000000006C +:10346000000000000000000000000000000000005C :10347000000000000000000000000000000000004C :10348000000000000000000000000000000000003C -:10349000000000080008000000100000110080007B -:1034A000000008A002208308000011800500208091 -:1034B000800000000000000000000000000000008C +:10349000000000000000000000000000000000002C +:1034A000000000000000000000000000000000001C +:1034B000000000000000000000000000000000000C :1034C00000000000000000000000000000000000FC :1034D00000000000000000000000000000000000EC -:1034E00000000000000000000000000000000008D4 +:1034E00000000000000000000000000000000000DC :1034F00000000000000000000000000000000000CC :1035000000000000000000000000000000000000BB -:1035100000000000000000000000000800000000A3 -:103520000000000020101088410800A1034009039A -:103530008300830000000000000000000000000085 +:1035100000000000000000000000000000000000AB +:10352000000000000000000000000000000000009B +:10353000000000000000000000000000000000008B :10354000000000000000000000000000000000007B :10355000000000000000000000000000000000006B -:1035600000000000000000000000000000900000CB +:10356000000000000000000000000000000000005B :10357000000000000000000000000000000000004B :10358000000000000000000000000000000000003B :10359000000000000000000000000000000000002B -:1035A0000010000000C02000080900A100C1A00117 -:1035B0000801082002900000000000000000000048 +:1035A000000000000000000000000000000000001B +:1035B000000000000000000000000000000000000B :1035C00000000000000000000000000000000000FB -:1035D00000000000000000000000000000000001EA -:1035E000000108000100000000000000000082004F -:1035F00001000100A1000000000000000000000028 +:1035D00000000000000000000000000000000000EB +:1035E00000000000000000000000000000000000DB +:1035F00000000000000000000000000000000000CB :1036000000000000000000000000000000000000BA :1036100000000000000000000000000000000000AA -:10362000000100018800000191010800110104005F -:10363000401000021085A189000000000000000079 +:10362000000000000000000000000000000000009A +:10363000000000000000000000000000000000008A :10364000000000000000000000000000000000007A :10365000000000000000000000000000000000006A -:10366000000800030000110000000000000000003E -:103670000000200005000200000000000000000023 +:10366000000000000000000000000000000000005A +:10367000000000000000000000000000000000004A :10368000000000000000000000000000000000003A -:103690000000000000000000000000000800000022 -:1036A000000009100010004100084121800840215D -:1036B00091208088008300A121A00000000000006C +:10369000000000000000000000000000000000002A +:1036A000000000000000000000000000000000001A +:1036B000000000000000000000000000000000000A :1036C00000000000000000000000000000000000FA :1036D00000000000000000000000000000000000EA :1036E00000000000000000000000000000000000DA -:1036F0000000210008001000080000000000000089 +:1036F00000000000000000000000000000000000CA :1037000000000000000000000000000000000000B9 -:103710000000000000000000000000002100000088 -:1037200002000800001100030000000010882110B2 -:103730000800880000038090800000030000000063 +:1037100000000000000000000000000000000000A9 +:103720000000000000000000000000000000000099 +:103730000000000000000000000000000000000089 :103740000000000000000000000000000000000079 :103750000000000000000000000000000000000069 :103760000000000000000000000000000000000059 -:10377000000000009100010088002100000000000E +:103770000000000000000000000000000000000049 :103780000000000000000000000000000000000039 -:103790000000000000000000000000000000010028 -:1037A0000000010001000001000000000000A0086E -:1037B0000803200209000820022002100001000076 +:103790000000000000000000000000000000000029 +:1037A0000000000000000000000000000000000019 +:1037B0000000000000000000000000000000000009 :1037C00000000000000000000000000000000000F9 :1037D00000000000000000000000000000000000E9 -:1037E000000000000000840000E000000000000075 +:1037E00000000000000000000000000000000000D9 :1037F00000000000000000000000000000000000C9 :1038000000000000000000000000000000000000B8 :1038100000000000000000000000000000000000A8 -:103820000000000000000000000000000700000091 -:10383000000000E007004121000000E0000000005F +:103820000000000000000000000000000000000098 +:103830000000000000000000000000000000000088 :103840000000000000000000000000000000000078 :103850000000000000000000000000000000000068 :103860000000000000000000000000000000000058 -:103870000000000000000000CFCFC0C0000000002A +:103870000000000000000000000000000000000048 :103880000000000000000000000000000000000038 :103890000000000000000000000000000000000028 :1038A0000000000000000000000000000000000018 -:1038B0000000C0F5C005000000000F00F50000008A -:1038C0000FFF0000000000000000000000000000EA +:1038B0000000000000000000000000000000000008 +:1038C00000000000000000000000000000000000F8 :1038D00000000000000000000000000000000000E8 :1038E00000000000000000000000000000000000D8 -:1038F00000000000000000000000CFCFC0C00000AA +:1038F00000000000000000000000000000000000C8 :1039000000000000000000000000000000000000B7 :1039100000000000000000000000000000000000A7 :103920000000000000000000000000000000000097 -:1039300000000000CFF5CF0500000000FF00F500FB -:1039400004140FFF00000000000000000000000051 +:103930000000000000000000000000000000000087 +:103940000000000000000000000000000000000077 :103950000000000000000000000000000000000067 :103960000000000000000000000000000000000057 -:103970000000000000000000000000003EFF3EC309 +:103970000000000000000000000000000000000047 :103980000000000000000000000000000000000037 :103990000000000000000000000000000000000027 :1039A0000000000000000000000000000000000017 -:1039B0000000000000002FFF2F002020202028AF53 -:1039C00028AF000000000000000000000000000020 +:1039B0000000000000000000000000000000000007 +:1039C00000000000000000000000000000000000F7 :1039D00000000000000000000000000000000000E7 :1039E00000000000000000000000000000000000D7 -:1039F0000000000000000000000000000000FEFFCA -:103A0000FEC30000000000000000000000000000F5 +:1039F00000000000000000000000000000000000C7 +:103A000000000000000000000000000000000000B6 :103A100000000000000000000000000000000000A6 :103A20000000000000000000000000000000000096 -:103A30000000000000000000EFFFEF0000000000A9 -:103A40000000FFFF5050FC0C0000000000000000D0 +:103A30000000000000000000000000000000000086 +:103A40000000000000000000000000000000000076 :103A50000000000000000000000000000000000066 :103A60000000000000000000000000000000000056 -:103A70000061000680090000000000000000000056 -:103A800000610006000D00000000000000000000C2 +:103A70000000000000000000000000000000000046 +:103A80000000000000000000000000000000000036 :103A90000000000000000000000000000000000026 -:103AA0000000000000000000000000610006000DA2 -:103AB000000005610A0E050D00A005610A0F050D45 -:103AC00000A000614007000D0000000000000000A1 +:103AA0000000000000000000000000000000000016 +:103AB0000000000000000000000000000000000006 +:103AC00000000000000000000000000000000000F6 :103AD00000000000000000000000000000000000E6 :103AE00000000000000000000000000000000000D6 -:103AF000000000000000F2F2F2F2000000000000FE -:103B000000002028F0FF000000000000000000007E +:103AF00000000000000000000000000000000000C6 +:103B000000000000000000000000000000000000B5 :103B100000000000000000000000000000000000A5 :103B20000000000000000000000000000000000095 -:103B30000000000000000000F4C434040C3C003C11 -:103B40004F41000000000000C704FF3C00000000DF +:103B30000000000000000000000000000000000085 +:103B40000000000000000000000000000000000075 :103B50000000000000000000000000000000000065 :103B60000000000000000000000000000000000055 -:103B70000000000000000000B0B0B0B00000000085 -:103B8000000000002028F0FF0000000000000000FE +:103B70000000000000000000000000000000000045 +:103B80000000000000000000000000000000000035 :103B90000000000000000000000000000000000025 -:103BA00000000000000000000000000000000C0CFD -:103BB00000000000000000000000F7C737070C0CF1 -:103BC00000004F41555500000000F734FF3C000055 +:103BA0000000000000000000000000000000000015 +:103BB0000000000000000000000000000000000005 +:103BC00000000000000000000000000000000000F5 :103BD00000000000000000000000000000000000E5 :103BE00000000000000000000000000000000000D5 :103BF00000000000000000000000000000000000C5 -:103C0000000000000000C1C1F03000000000000012 +:103C000000000000000000000000000000000000B4 :103C100000000000000000000000000000000000A4 :103C20000000000000000000000000000000000094 -:103C30000000140000000000000000000000000070 -:103C40000FFFF0F03C0C3C0C00000000AAF0FF3C21 +:103C30000000000000000000000000000000000084 +:103C40000000000000000000000000000000000074 :103C50000000000000000000000000000000000064 :103C60000000000000000000000000000000000054 :103C70000000000000000000000000000000000044 -:103C800000000000000000000101F0300000000012 +:103C80000000000000000000000000000000000034 :103C90000000000000000000000000000000000024 :103CA0000000000000000000000000000000000014 -:103CB00000000000140000000000000000000000F0 -:103CC00000000FFFFFFFFF0CFF0C00000000AAF038 -:103CD000003C0000000000020000000000000000A6 -:103CE0000000200000000000000800000000200884 +:103CB0000000000000000000000000000000000004 +:103CC00000000000000000000000000000000000F4 +:103CD00000000000000000000004000000000000E0 +:103CE00000000000000000040000000000000000D0 :103CF00000000000000000000000000000000000C4 -:103D0000000220000000000000000000040020006D -:103D1000000000030000000004000000000000009C -:103D200088000008200000000000000000000000E3 +:103D000000000000000000000000000000000000B3 +:103D100000000000000000000000000000000000A3 +:103D20000000000000000000000000000000000093 :103D30000000000000000000000000000000000083 -:103D40002000C0030400000000000000000000008C +:103D40000000000000000000000000000000000073 :103D50000000000000000000000000000000000063 -:103D600000000000400040000000000000020000D1 -:103D70000000200000000000000000000000000023 -:103D800000000000000000000000000000008000B3 -:103D900080000000000000000000000000000000A3 -:103DA0000000000000000000000000000000000013 -:103DB00000000000000000000000000200001000F1 -:103DC0000000000000008000000000020000000071 -:103DD00000000000000000000003000000000000E0 +:103D6000000200000002000000000000000000004F +:103D70000000000000000000000000000002000041 +:103D80000000000000000000000000000000000033 +:103D90000000000000000000000000000000000023 +:103DA0000000000200000000000000000000000011 +:103DB0000000000000000000000000000000000003 +:103DC00000000000000000000000000000000000F3 +:103DD00000000000000000000000000000000000E3 :103DE00000000000000000000000000000000000D3 :103DF00000000000000000000000000000000000C3 -:103E000000000000000000000000000000000100B1 -:103E1000040001000000000000000000000000009D +:103E000000000000000000000000000000000000B2 +:103E100000000000000000000000000000000000A2 :103E20000000000000000000000000000000000092 -:103E30000000000000000000000000000000000280 -:103E40000000000000000000010900030000000065 -:103E500000000000000000000004000400040084D2 -:103E600000020082000400820004000000820000C2 -:103E7000000800040002000400040000000200002A -:103E80000002008200020004000000000000008424 -:103E9000040480000404000400000000040000008A -:103EA0000000000000080000040000000000000006 -:103EB0000000000000000000000000900000000072 -:103EC0000082000000040000000420000000000048 -:103ED00000000000000000000400000800030005CE -:103EE00000000000000800000008000000000000C2 -:103EF00000030000000000000008000000000000B7 -:103F00000000000000000000000000002000000091 -:103F100020000100208001002100000000000000BE -:103F2000000000080000000200090000000000007E -:103F30000040000000000000000000000000000041 -:103F40000000000084000100C00084008400210003 -:103F50002100C00000000000000000000000000080 +:103E30000000000000000000000000000000000082 +:103E40000000000000000000000000000000000072 +:103E50000000000000000000000000000000000062 +:103E60000000000000000000000000000000000052 +:103E70000000000000000000000000000000000042 +:103E80000000000000000000000000000000000032 +:103E90000000000000000000000000000000000022 +:103EA000000000000000000004000000000000000E +:103EB0000000000000000000000000000000000002 +:103EC00000000000000000000000000000000000F2 +:103ED00000000000000000000000000000000000E2 +:103EE00000000000000000000000000000000000D2 +:103EF00000000000000000000000000000000000C2 +:103F000000000000000000000000000000000000B1 +:103F100000000000000000000000000000000000A1 +:103F20000000000000000000000000000000000091 +:103F30000000000000000000000000000000000081 +:103F40000000000000000000000000000000000071 +:103F50000000000000000000000000000000000061 :103F60000000000000000000000000000000000051 :103F70000000000000000000000000000000000041 -:103F80000000000000000008000000000000000029 -:103F90000000000020840004200020000000000831 -:103FA000000000A000000000000000000000000071 +:103F80000000000000000000000000000000000031 +:103F90000000000000000000000000000000000021 +:103FA0000000000000000000000000000000000011 :103FB0000000000000000000000000000000000001 -:103FC000000000000000058404000020050000A09F -:103FD00020000400000200A0000000840000000097 +:103FC00000000000000000000000000000000000F1 +:103FD00000000000000000000000000000000000E1 :103FE00000000000000000000000000000000000D1 :103FF00000000000000000000000000000000000C1 :1040000000000000000000000000000000000000B0 -:104010000000000000000000000008000100000097 +:104010000000000000400000000000000000000060 :104020000000000000000000000000000000000090 :104030000000000000000000000000000000000080 -:1040400000100000000000000004002000200020FC -:1040500008200020C1200084008000000000000033 -:10406000000000000008000000000000000000A0A8 +:104040000000000000000000000000000000000070 +:104050000000000000000000000000000000000060 +:104060000000000000000000000000000000000050 :104070000000000000000000000000000000000040 :104080000000000000000000000000000000000030 -:10409000000000000000000000000000000004001C +:104090000000000000000000000000000000000020 :1040A0000000000000000000000000000000000010 -:1040B00000000000000000000000000000000800F8 -:1040C00000000000000000000000000000010001EE -:1040D000000100010905200100050020000000008A -:1040E00000000000000000000000000800000000C8 -:1040F0000000000000000000000000000000004080 +:1040B0000000000000000000000000000000000000 +:1040C00000000000000000000000000000000000F0 +:1040D00000000000000000000000000000000000E0 +:1040E00000000000000000000000000000000000D0 +:1040F00000000000000000000000000000000000C0 :1041000000000000000000000000000000000000AF -:10411000000000002000000000000100200000005E -:10412000010000000000000000000000000000008E -:104130000000000800000000000000000000000077 -:10414000000000000000000000009000408000001F -:10415000C100040000000000000400000080000016 +:10411000000000000000000000000000000000009F +:10412000000000000000000000000000000000008F +:10413000000000000000000000000000000000007F +:10414000000000000000000000000000000000006F +:10415000000000000000000000000000000000005F :10416000000000000000000000000000000000004F :10417000000000000000000000000000000000003F -:1041800000000000000000000000000000000088A7 -:104190000004000000000000000000000402800095 -:1041A00009840490000000000000000000000000EE +:10418000000000000000000000000000000000002F +:10419000000000000000000000000000000000001F +:1041A000000000000000000000000000000000000F :1041B00000000000000000000000000000000000FF -:1041C00000000000000000080000000800000520BA -:1041D0000004040005022188410800842102002017 -:1041E00021902100100000000000000000000000ED -:1041F00000000008000000000000000000000000B7 +:1041C00000000000000000000000000000000000EF +:1041D00000000000000000000000000000000000DF +:1041E00000000000000000000000000000000000CF +:1041F00000000000000000000000000000000000BF :1042000000000000000000000000000000000000AE -:10421000000000000000000000000000200000007E -:104220000000000000000000000300090009000970 +:10421000000000000000000000000000000000009E +:10422000000000000000000000000000000000008E :10423000000000000000000000000000000000007E :10424000000000000000000000000000000000006E -:1042500084800000000004000121050020000121ED -:1042600000800000000500090000000000000000C0 +:10425000000000000000000000000000000000005E +:10426000000000000000000000000000000000004E :10427000000000000000000000000000000000003E :10428000000000000000000000000000000000002E :10429000000000000000000000000000000000001E -:1042A00041000000000000000000000000000000CD +:1042A000000000000000000000000000000000000E :1042B00000000000000000000000000000000000FE -:1042C00000000000080000000000001000000800CE -:1042D000000000200000000080002000A0009100ED -:1042E0000408002000000000400000000000000062 +:1042C00000000000000000000000000000000000EE +:1042D00000000000000000000000000000000000DE +:1042E00000000000000000000000000000000000CE :1042F00000000000000000000000000000000000BE :1043000000000000000000000000000000000000AD :10431000000000000000000000000000000000009D -:104320000000080800C000888410000000000000A1 +:10432000000000000000000000000000000000008D :10433000000000000000000000000000000000007D :10434000000000000000000000000000000000006D -:104350000000000009A000200088C00820400011D3 -:1043600001C18808000000000000000000000000FB +:10435000000000000000000000000000000000005D +:10436000000000000000000000000000000000004D :10437000000000000000000000000000000000003D :10438000000000000000000000000000000000002D :10439000000000000000000000000000000000001D -:1043A0000000000008000000020000000000000003 +:1043A000000000000000000000000000000000000D :1043B00000000000000000000000000000000000FD :1043C00000000000000000000000000000000000ED -:1043D00000000000000010000080000000002080AD -:1043E000084010080020000000000000000000004D +:1043D00000000000000000000000000000000000DD +:1043E00000000000000000000000000000000000CD :1043F00000000000000000000000000000000000BD :1044000000000000000000000000000000000000AC :10441000000000000000000000000000000000009C -:10442000000000000000000900210005000000005D +:10442000000000000000000000000000000000008C :10443000000000000000000000000000000000007C :10444000000000000000000000000000000000006C -:10445000000000000000000000000021000000003B -:10446000008020210904202000000000000000003E +:10445000000000000000000000000000000000005C +:10446000000000000000000000000000000000004C :10447000000000000000000000000000000000003C :10448000000000000000000000000000000000002C :10449000000000000000000000000000000000001C -:1044A00000000000000000000800000082010484F9 +:1044A000000000000000000000000000000000000C :1044B00000000000000000000000000000000000FC :1044C00000000000000000000000000000000000EC -:1044D0000000000000000000000090000800A0C0E4 -:1044E000000020101100A0000000000000000000EB +:1044D00000000000000000000000000000000000DC +:1044E00000000000000000000000000000000000CC :1044F00000000000000000000000000000000000BC :1045000000000000000000000000000000000000AB :10451000000000000000000000000000000000009B -:10452000000000000000000000000000C00800883B -:1045300002880000000000000000000000000000F1 +:10452000000000000000000000000000000000008B +:10453000000000000000000000000000000000007B :10454000000000000000000000000000000000006B -:1045500000000000000000000000000008900000C3 -:104560000088001020110000110900C001000000A7 +:10455000000000000000000000000000000000005B +:10456000000000000000000000000000000000004B :10457000000000000000000000000000000000003B :10458000000000000000000000000000000000002B :10459000000000000000000000000000000000001B -:1045A000000000000000000000000000000000808B -:1045B0000000850000000000000000000000000076 +:1045A000000000000000000000000000000000000B +:1045B00000000000000000000000000000000000FB :1045C00000000000000000000000000000000000EB -:1045D000000000000000000000000000000080005B -:1045E0000000000000000040084105881020410044 +:1045D00000000000000000000000000000000000DB +:1045E00000000000000000000000000000000000CB :1045F00000000000000000000000000000000000BB :1046000000000000000000000000000000000000AA :10461000000000000000000000000000000000009A -:10462000000000000000000000000000000080000A -:104630000082000080000000000000000000000078 +:10462000000000000000000000000000000000008A +:10463000000000000000000000000000000000007A :10464000000000000000000000000000000000006A :10465000000000000000000000000000000000005A -:104660000020002100008000008804900800090854 -:10467000000000100000000000000000000000002A +:10466000000000000000000000000000000000004A +:10467000000000000000000000000000000000003A :10468000000000000000000000000000000000002A :10469000000000000000000000000000000000001A :1046A000000000000000000000000000000000000A -:1046B000080088C088880800000000000000000092 +:1046B00000000000000000000000000000000000FA :1046C00000000000000000000000000000000000EA :1046D00000000000000000000000000000000000DA -:1046E0000000000008848888080010C00820A1107D -:1046F00010010000000000000000000000000000A9 +:1046E00000000000000000000000000000000000CA +:1046F00000000000000000000000000000000000BA :1047000000000000000000000000000000000000A9 :104710000000000000000000000000000000000099 :104720000000000000000000000000000000000089 -:104730000000000000E00700420000000000000050 +:104730000000000000000000000000000000000079 :104740000000000000000000000000000000000069 :104750000000000000000000000000000000000059 -:10476000000000000000000007000000000000E062 -:1047700007004100000000000700420000000000A8 +:104760000000000000000000000000000000000049 +:104770000000000000000000000000000000000039 :104780000000000000000000000000000000000029 :104790000000000000000000000000000000000019 :1047A0000000000000000000000000000000000009 -:1047B00000000000FCFC0C0CFFF9FF600000000092 +:1047B00000000000000000000000000000000000F9 :1047C00000000000000000000000000000000000E9 :1047D00000000000000000000000000000000000D9 -:1047E00000000000000036363636FF7E007E3C3C7E -:1047F000F0F0FFC3BD8100000000000000000000D9 +:1047E00000000000000000000000000000000000C9 +:1047F00000000000000000000000000000000000B9 :1048000000000000000000000000000000000000A8 :104810000000000000000000000000000000000098 :104820000000000000000000000000000000000088 -:10483000000000000000FFF00F0000F90060000021 +:104830000000000000000000000000000000000078 :104840000000000000000000000000000000000068 :104850000000000000000000000000000000000058 -:1048600000000000000000003F303F30FF420042E7 -:104870003C3CFF007E423C000000000000000000C5 +:104860000000000000000000000000000000000048 +:104870000000000000000000000000000000000038 :104880000000000000000000000000000000000028 :104890000000000000000000000000000000000018 :1048A0000000000000000000000000000000000008 @@ -169147,52 +169147,52 @@ :1049000000000000000000000000000000000000A7 :104910000000000000000000000000000000000097 :104920000000000000000000000000000000000087 -:1049300000000000000000000000303F606F00FF3A -:1049400000FF000000000000000000000000000068 +:104930000000000000000000000000000000000077 +:104940000000000000000000000000000000000067 :104950000000000000000000000000000000000057 -:104960000000000000000000000000003F0F3FFFBB -:10497000666666660F000FFF4F7F4F7F00000000E6 +:104960000000000000000000000000000000000047 +:104970000000000000000000000000000000000037 :104980000000000000000000000000000000000027 :104990000000000000000000000000000000000017 :1049A0000000000000000000000000000000000007 -:1049B000000000000000000000000000303F606FB9 -:1049C0002424E7E7000000000000000000000000D1 +:1049B00000000000000000000000000000000000F7 +:1049C00000000000000000000000000000000000E7 :1049D00000000000000000000000000000000000D7 -:1049E0000000000000000000000000000000300097 -:1049F00030F0033F033F3C003CFF4070407000003C +:1049E00000000000000000000000000000000000C7 +:1049F00000000000000000000000000000000000B7 :104A000000000000000000000000000000000000A6 :104A10000000000000000000000000000000000096 :104A20000000000000000000000000000000000086 -:104A30000000000000000000000000000000006115 -:104A4000000F000D0000000000000000000000004A +:104A30000000000000000000000000000000000076 +:104A40000000000000000000000000000000000066 :104A50000000000000000000000000000000000056 :104A60000000000000000000000000000000000046 -:104A700000000008000000000061000900010000C3 -:104A80000500000800000000000000000000000019 +:104A70000000000000000000000000000000000036 +:104A80000000000000000000000000000000000026 :104A90000000000000000000000000000000000016 :104AA0000000000000000000000000000000000006 :104AB00000000000000000000000000000000000F6 :104AC00000000000000000000000000000000000E6 :104AD00000000000000000000000000000000000D6 :104AE00000000000000000000000000000000000C6 -:104AF000000000000000000000003F303F30FFF0E9 -:104B00003CF0000000000000000000000000000079 +:104AF00000000000000000000000000000000000B6 +:104B000000000000000000000000000000000000A5 :104B10000000000000000000000000000000000095 :104B20000000000000000000000000000000000085 :104B30000000000000000000000000000000000075 :104B40000000000000000000000000000000000065 :104B50000000000000000000000000000000000055 :104B60000000000000000000000000000000000045 -:104B70000000000000000000000000005F505F50D7 -:104B800000F03CF000000000000000000000000009 +:104B70000000000000000000000000000000000035 +:104B80000000000000000000000000000000000025 :104B90000000000000000000000000000000000015 :104BA0000000000000000000000000000000000005 :104BB00000000000000000000000000000000000F5 :104BC00000000000000000000000000000000000E5 :104BD00000000000000000000000000000000000D5 :104BE00000000000000000000000000000000000C5 -:104BF00000000000000000000000000000007F4FE7 -:104C00007F4F00FF00FF00000000000000000000D8 +:104BF00000000000000000000000000000000000B5 +:104C000000000000000000000000000000000000A4 :104C10000000000000000000000000000000000094 :104C20000000000000000000000000000000000084 :104C30000000000000000000000000000000000074 @@ -169200,438 +169200,438 @@ :104C50000000000000000000000000000000000054 :104C60000000000000000000000000000000000044 :104C70000000000000000000000000000000000034 -:104C800070407040AAAAF0F0000000000000000090 -:104C90000000000800040002000000050000000001 -:104CA00000080000000000040000000000020000F6 -:104CB00000080000000000040008000000000000E0 -:104CC00000000000000000000005000000080000D7 -:104CD0000003000000000000840000000005000048 -:104CE00000000000000000000200000000000000C2 -:104CF000200000000008000000000000000000008C -:104D0000000000000000C0000080000084001000CF -:104D10000000000000000002000000000000000091 -:104D20000000000000000000000000000000000083 -:104D30000000000000000000000000000000000073 -:104D40000000000000000000000000000000000063 -:104D50001000000010001000000000000000000023 -:104D60000000000000000000000000C00000000083 -:104D7000400280000000000000020000000000006F -:104D800000020000000000000400002000000000FD -:104D900040020000000000000000000000000000D1 -:104DA000008000052000000000000000000000005E -:104DB00000000000000000000004000000000000EF -:104DC00000001000000000000000000001000000D2 +:104C80000000000000000000000000000000000024 +:104C90000000000000000000000000000000000014 +:104CA0000000000000000000000000000000000004 +:104CB00000000000000000000000000000000000F4 +:104CC00000000000000000000000000000000000E4 +:104CD00000000000000000000000000000000000D4 +:104CE00000000000000000000000000000000000C4 +:104CF00000000000000000000000000000000000B4 +:104D000000000000000000000000000000000000A3 +:104D1000000000020000000000000000000200008F +:104D20000000000000000002000000000000400041 +:104D30000000000000004000000000000000000231 +:104D40000000000000004000000000000000000023 +:104D500000000000400000000000000200024002CD +:104D600040020002400000020000000000020000BB +:104D70000000000000000000000000000000000033 +:104D80000000000000000000000000000000000023 +:104D90000000000000000000000000000000000013 +:104DA00000000010000000000000000000000000F3 +:104DB00000000000000000000000000000000000F3 +:104DC00000000000000000000000000000000000E3 :104DD00000000000000000000000000000000000D3 -:104DE0000000000000000000000500000005008039 -:104DF000010000000004000000000010020000009C -:104E0000000000000080000001000000040000001D -:104E1000000000100010000400040084008800045A -:104E20000002000400040004000200040002000468 -:104E30000004000400040004000400080002000450 -:104E400000080000000400024004000400020808FA -:104E50000008000400040000000400000004000238 -:104E60000402040400000208000000020000000028 -:104E7000002040080004008500000000000141C03F -:104E80000000000000000002000040000000800060 -:104E90000000000800000000000200030000000005 -:104EA0000008004000000008000000000020000092 -:104EB00000000008000000080000000000000008DA -:104EC0000000000002009000000000000000000050 -:104ED000088000002000000000000000000000002A -:104EE000000000210021002100000000000000005F -:104EF0000000000500020002000040000110400018 -:104F000088200000000000004005C041900084217E -:104F100020000000C000000000020008000000089F -:104F20000000000000080000000000000008000071 -:104F300000A00000000000080000000000000000C9 -:104F40000000000000000000000000000008000059 -:104F500000008010000000020000000000020000BD -:104F6000008800000000000000000000000000A019 -:104F70000000000000000000000100001100080116 -:104F8000000005011000000000008508000000007E -:104F9000000000080084008409A000080000000050 +:104DE00000000000001000000000000000000000B3 +:104DF00000000000000000000000000000000000B3 +:104E0000000000000800000000000000000000009A +:104E10000000000000000000000000000000000092 +:104E20000000000000000000000000000000000082 +:104E30000000000000000000000000000000000072 +:104E40000000000000000000000000000000000062 +:104E50000000000000000000000000000000000052 +:104E60000000000000000000000000000000000042 +:104E70000000000000000000000000000000000032 +:104E80000000000000000000000000000000000022 +:104E90000000000000000000000000000000000012 +:104EA0000000000000000000000000000000000002 +:104EB00000000000000000000000000000000000F2 +:104EC00000000000000000000000000000000000E2 +:104ED00000000000000000000000000000000000D2 +:104EE00000000000000000000000000000000000C2 +:104EF00000000000000000000000000000000000B2 +:104F000000000000000000000000000000000000A1 +:104F10000000000000000000000000000000000091 +:104F20000000000000000000000000000000000081 +:104F30000000000000000000000000000000000071 +:104F40000000000000000000000000000000000061 +:104F50000000000000000000000000000000000051 +:104F60000000000000000000000000000000000041 +:104F70000000000000000000000000000000000031 +:104F80000000000000000000000000000000000021 +:104F90000000000000000000000000000000000011 :104FA0000000000000000000000000000000000001 :104FB00000000000000000000000000000000000F1 :104FC00000000000000000000000000000000000E1 -:104FD0000000000000000000008000000000000051 +:104FD00000000000000000000000000400000000CD :104FE00000000000000000000000000000000000C1 -:104FF00000000000000000050000000000000000AC -:105000000800001001020000000000000000040081 -:105010000000040000002000040000000800000060 -:105020000000000000080000000000000000000078 -:105030000000000800000000000000000000000068 -:105040000000000000000000000000000000000060 -:1050500000000000000000A041000040000000002F +:104FF00000000000000000000000000000000000B1 +:1050000000000000000000000000000000000000A0 +:105010000000000000000000000000000000000090 +:105020000000000000000000000000000000000080 +:105030000000000000000000000000000000000070 +:10504000000000000000000000000000020000005E +:105050000000000000000000000000000000000050 :105060000000000000000000000000000000000040 -:10507000000000000000000000000000000005002B -:105080000000890000000401000009000000008405 -:1050900000000000000400008000C100410000008A -:1050A00000000000000000000003000000000000FD -:1050B00000050000000000080000000000000000E3 +:105070000000000000000000000000000000000030 +:105080000000000000000000000000000000000020 +:105090000000000000000000000000000000000010 +:1050A0000000000000000000000000000000000000 +:1050B00000000000000000000000000000000000F0 :1050C00000000000000000000000000000000000E0 -:1050D00000000000200000000000000000000400AC -:1050E00000000009000000000008000000000000AF +:1050D00000000000000000000000000000000000D0 +:1050E00000000000000000000000000000000000C0 :1050F00000000000000000000000000000000000B0 -:1051000088000021000800000080000084000000EA -:1051100000210000000084000800200400000000BE -:10512000000500000000000000000000000000007A +:10510000000000000000000000000000000000009F +:10511000000000000000000000000000000000008F +:10512000000000000000000000000000000000007F :10513000000000000000000000000000000000006F -:10514000000000000000000000000000000000203F -:10515000000000000000000000000002200000022B -:105160008008000000000000000020000000000097 -:105170000000000800000000000000000000000027 -:10518000000000000000000000000002000000001D -:105190000000058400900388000000A08001410009 +:10514000000000000000000000000000000000005F +:10515000000000000000000000000000000000004F +:10516000000000000000000000000000000000003F +:10517000000000000000000000000000000000002F +:10518000000000000000000000000000000000001F +:10519000000000000000000000000000000000000F :1051A00000000000000000000000000000000000FF -:1051B00000000000000000000000000000080000E7 +:1051B00000000000000000000000000000000000EF :1051C00000000000000000000000000000000000DF -:1051D000000000000000000000000000010001804D -:1051E000008085000000000000100000008000002A -:1051F000000000000000000000000000000090001F -:105200000000000000000008008500000000000809 -:1052100084080000010500000000002100210003B7 -:10522000C02090000000000000000000000000000E +:1051D00000000000000000000000000000000000CF +:1051E00000000000000000000000000000000000BF +:1051F00000000000000000000000000000000000AF +:10520000000000000000000000000000000000009E +:10521000000000000000000000000000000000008E +:10522000000000000000000000000000000000007E :10523000000000000000000000000000000000006E :10524000000000000000000000000000000000005E -:1052500000000000000800000000000000000882BC -:1052600004200020040800000000000010002110AD +:10525000000000000000000000000000000000004E +:10526000000000000000000000000000000000003E :10527000000000000000000000000000000000002E -:1052800000000000000000002100111000020800D2 -:10529000000000C0000040041100000011001108CF -:1052A00000000001400000000000000000000000BD +:10528000000000000000000000000000000000001E +:10529000000000000000000000000000000000000E +:1052A00000000000000000000000000000000000FE :1052B00000000000000000000000000000000000EE :1052C00000000000000000000000000000000000DE :1052D00000000000000000000000000000000000CE -:1052E0000302002000102000000300000000000066 +:1052E00000000000000000000000000000000000BE :1052F00000000000000000000000000000000000AE -:105300000000000001008400000000880188000205 -:105310000008000000002000000000012100A000A3 -:10532000000001A1009000A00000000000000000AB +:10530000000000000000000000000000000000009D +:10531000000000000000000000000000000000008D +:10532000000000000000000000000000000000007D :10533000000000000000000000000000000000006D :10534000000000000000000000000000000000005D :10535000000000000000000000000000000000004D -:10536000000021000080008000000000000000001C +:10536000000000000000000000000000000000003D :10537000000000000000000000000000000000002D -:10538000000000002000100090000000000003005A -:1053900000000000000020000000000000082009BC -:1053A0000011000811A1008200410011000000005E -:1053B00000000000000000000011000000000000DC +:10538000000000000000000000000000000000001D +:10539000000000000000000000000000000000000D +:1053A00000000000000000000000000000000000FD +:1053B00000000000000000000000000000000000ED :1053C00000000000000000000000000000000000DD :1053D00000000000000000000000000000000000CD -:1053E0000000000080000009000000000000000034 -:1053F000000080000000000000000000000000002D -:1054000000000000000000000900110000A00000E2 -:105410000000800080000000000000000000048008 -:105420001100030020210000000000000000000027 +:1053E00000000000000000000000000000000000BD +:1053F00000000000000000000000000000000000AD +:10540000000000000000000000000000000000009C +:10541000000000000000000000000000000000008C +:10542000000000000000000000000000000000007C :10543000000000000000000000000000000000006C :10544000000000000000000000000000000000005C :10545000000000000000000000000000000000004C -:10546000000000000000A00002009000000000000A -:105470009000100084009020000000000000000058 -:10548000000000000000000000020000000000100A -:1054900090009000A00008900000000000000000B4 -:1054A0000002000001000089000000000000000070 +:10546000000000000000000000000000000000003C +:10547000000000000000000000000000000000002C +:10548000000000000000000000000000000000001C +:10549000000000000000000000000000000000000C +:1054A00000000000000000000000000000000000FC :1054B00000000000000000000000000000000000EC :1054C00000000000000000000000000000000000DC :1054D00000000000000000000000000000000000CC -:1054E000000000000000000090000090008890A0E4 +:1054E00000000000000000000000000000000000BC :1054F00000000000000000000000000000000000AC -:105500000000000000000000000001000000A000FA -:10551000000108000009000085880000000000006C -:10552000000000000000A000000084000100000056 -:10553000100000000000000000000000000000005B +:10550000000000000000000000000000000000009B +:10551000000000000000000000000000000000008B +:10552000000000000000000000000000000000007B +:10553000000000000000000000000000000000006B :10554000000000000000000000000000000000005B :10555000000000000000000000000000000000004B :10556000000000000000000000000000000000003B -:10557000100000000000000000000000000000001B -:105580000000000000000000000000004109004190 -:10559000801000108011008800020420000000101C -:1055A000000900000041052090200020000040007C -:1055B000000080000000000000000000000000006B +:10557000000000000000000000000000000000002B +:10558000000000000000000000000000000000001B +:10559000000000000000000000000000000000000B +:1055A00000000000000000000000000000000000FB +:1055B00000000000000000000000000000000000EB :1055C00000000000000000000000000000000000DB :1055D00000000000000000000000000000000000CB -:1055E00000000000000000000000000000000002B9 -:1055F00000800000000000000080000000000000AB -:10560000000000000000000000000000000010008A -:10561000080803001100000000A100800000000045 -:1056200000000000000021C00821100000048002DA +:1055E00000000000000000000000000000000000BB +:1055F00000000000000000000000000000000000AB +:10560000000000000000000000000000000000009A +:10561000000000000000000000000000000000008A +:10562000000000000000000000000000000000007A :10563000000000000000000000000000000000006A :10564000000000000000000000000000000000005A :10565000000000000000000000000000000000004A :10566000000000000000000000000000000000003A -:105670008808028400000000000000020010000002 +:10567000000000000000000000000000000000002A :10568000000000000000000000000000000000001A -:10569000010001000100010000000003008400007F -:1056A00000000000000000000109010001000001ED -:1056B0000200900002001000000000000000000046 -:1056C0004100006000000000000000000000000039 +:10569000000000000000000000000000000000000A +:1056A00000000000000000000000000000000000FA +:1056B00000000000000000000000000000000000EA +:1056C00000000000000000000000000000000000DA :1056D00000000000000000000000000000000000CA :1056E00000000000000000000000000000000000BA -:1056F00000000000070000000000000000000000A3 +:1056F00000000000000000000000000000000000AA :105700000000000000000000000000000000000099 -:105710000000004100E0060041000000000007001A -:105720000000000000000000000000000000070072 -:105730000000818100E00700000000000000000080 +:105710000000000000000000000000000000000089 +:105720000000000000000000000000000000000079 +:105730000000000000000000000000000000000069 :105740000000000000000000000000000000000059 :105750000000000000000000000000000000000049 :105760000000000000000000000000000000000039 -:105770000000FFFFFFFFFAFAAAFF00000000000090 +:105770000000000000000000000000000000000029 :105780000000000000000000000000000000000019 :105790000000000000000000000000000000000009 -:1057A0000000F0F000000000000000000000000019 -:1057B00000000000C0F0F0F0000000000000000059 +:1057A00000000000000000000000000000000000F9 +:1057B00000000000000000000000000000000000E9 :1057C00000000000000000000000000000000000D9 :1057D00000000000000000000000000000000000C9 :1057E00000000000000000000000000000000000B9 -:1057F0000000000000F000F05050005500000000D4 +:1057F00000000000000000000000000000000000A9 :105800000000000000000000000000000000000098 :105810000000000000000000000000000000000088 -:1058200000000000F0F00000000000000000000098 -:10583000000000000000C0F0F0F0000000000000D8 +:105820000000000000000000000000000000000078 +:105830000000000000000000000000000000000068 :105840000000000000000000000000000000000058 :105850000000000000000000000000000000000048 :105860000000000000000000000000000000000038 -:1058700000000000000055550FFFF535F53500001C -:1058800000000000CFCFFFFF00000000000000007C +:105870000000000000000000000000000000000028 +:105880000000000000000000000000000000000018 :105890000000000000000000000000000000000008 -:1058A000FFFFFFFF3C3C0F0F000000000000000066 -:1058B0000000000000000000FF0FF00000000000EA +:1058A00000000000000000000000000000000000F8 +:1058B00000000000000000000000000000000000E8 :1058C00000000000000000000000000000000000D8 :1058D00000000000000000000000000000000000C8 :1058E00000000000000000000000000000000000B8 -:1058F000000000000000000055550F00C505C5055B -:10590000000000000000AFAFF0FF0000000000004A +:1058F00000000000000000000000000000000000A8 +:105900000000000000000000000000000000000097 :105910000000000000000000000000000000000087 -:105920000000555555753C3C055500000000000031 -:1059300000000000000000000000AF0FA000000009 -:105940000000000000000000000000610006800D63 +:105920000000000000000000000000000000000077 +:105930000000000000000000000000000000000067 +:105940000000000000000000000000000000000057 :105950000000000000000000000000000000000047 :105960000000000000000000000000000000000037 -:10597000000000000000000000008000000800009F +:105970000000000000000000000000000000000027 :105980000000000000000000000000000000000017 -:10599000000000000000000000000000056100277A -:1059A000000900000061000E000D0000006100060B -:1059B000000D00000061000E000D00A0006100322B -:1059C000C00D00000000000000000000000000000A +:105990000000000000000000000000000000000007 +:1059A00000000000000000000000000000000000F7 +:1059B00000000000000000000000000000000000E7 +:1059C00000000000000000000000000000000000D7 :1059D00000000000000000000000000000000000C7 :1059E00000000000000000000000000000000000B7 :1059F00000000000000000000000000000000000A7 :105A00000000000000000000000000000000000096 -:105A10000000000000000000000000000000FFAFD8 -:105A2000FFAF82BEC3FF0000000000000C000000BA -:105A3000000000000000A000FF00C3FAC300000047 +:105A10000000000000000000000000000000000086 +:105A20000000000000000000000000000000000076 +:105A30000000000000000000000000000000000066 :105A40000000000000000000000000000000000056 :105A50000000000000000000000000000000000046 :105A60000000000000000000000000000000000036 :105A70000000000000000000000000000000000026 :105A80000000000000000000000000000000000016 :105A90000000000000000000000000000000000006 -:105AA000F0F3FFF3003C013D0000000000000000A7 -:105AB000000000000A000A000000FF00C30AC30043 +:105AA00000000000000000000000000000000000F6 +:105AB00000000000000000000000000000000000E6 :105AC00000000000000000000000000000000000D6 :105AD00000000000000000000000000000000000C6 :105AE00000000000000000000000000000000000B6 :105AF00000000000000000000000000000000000A6 :105B00000000000000000000000000000000000095 :105B10000000000000000000000000000000000085 -:105B200000000000000000F000F000000000000095 -:105B300000000000000000000000F0F0E0F0000FA6 -:105B4000C3553D3F010300000000000000000000BD +:105B20000000000000000000000000000000000075 +:105B30000000000000000000000000000000000065 +:105B40000000000000000000000000000000000055 :105B50000000000000000000000000000000000045 :105B60000000000000000000000000000000000035 :105B70000000000000000000000000000000000025 :105B80000000000000000000000000000000000015 :105B90000000000000000000000000000000000005 -:105BA000000000000000000000F000F00000000015 -:105BB000000000000000000000000000FFFFEBFFFD -:105BC000FF0FC3553D3F010300000000000000002F -:105BD000000800040005000200002008200800085A -:105BE0000004200000000000000800000004000085 -:105BF000000000000400000800042004200210003F -:105C00000200200040000000020000080003000025 -:105C1000000000000000000200000002200400005C -:105C20000000000000001000A000200000000000A4 -:105C300000800002000000000080000085000000DD -:105C40000000000000000000000800000005410006 -:105C5000210000000000009000000000000000048F -:105C60000000000000020000000000000000000032 -:105C7000000000000000800000020000000200049C -:105C80000000000000008000000080000000000014 +:105BA00000000000000000000000000000000000F5 +:105BB00000000000000000000000000000000000E5 +:105BC00000000000000000000000000000000000D5 +:105BD00000000000000000000000000000000000C5 +:105BE00000000004000000000000000000000000B1 +:105BF00000040000000000000000000000000000A1 +:105C00000000000000000000000000000000000094 +:105C10000000000000000000000000000000000084 +:105C20000000000000000000000000000000000074 +:105C30000000000000000000000000000000000064 +:105C40000000000000000000000000000000000054 +:105C50000000000000000000000000000000000044 +:105C60000000000000000000000000000000000034 +:105C70000000000000000000000200000000000022 +:105C80000000000000000000000000000000000014 :105C90000000000000000000000000000000000004 -:105CA00000000000000000000000000000020000F2 -:105CB000000000400003000000000040000002005F -:105CC00000000000000000002000000000020000B2 -:105CD000008400040084008020000008000000050B -:105CE0002000000400050000000800000000000083 -:105CF000000000000000000000020400000001009D -:105D0000000001000000010040002000000402002B -:105D1000000000004000010000020000000002003E -:105D20000200020002000200020000000000000069 -:105D300004000080010000800080000001000000DD -:105D4000020000000000000000030000000000004E -:105D50000000002000840020002000040004000453 -:105D6000000200020000000200080004000200829D -:105D700000080082000400820002009080040000FD -:105D80000408008208040000080880048000000560 -:105D90000004000000008004400000030000000236 -:105DA000800080088000A000808480100000000037 -:105DB000000000040040400000400040000040009F -:105DC00000000008000000000000000000000000CB -:105DD000000000000008000800200020000300115F -:105DE00000410040000000210000004000200000B1 -:105DF000000000200000000800050008000000006E -:105E0000000004000000000000000000400000044A -:105E100000000100000000050002000500C00000B5 -:105E20000000000000030005000000050021000440 -:105E300000000004000000009000010900030200BF -:105E40000200020002000000020202200221000003 -:105E500000000041000000000000000000080008F1 +:105CA00000000000000000000000000000000000F4 +:105CB00000000000000000000000000000000000E4 +:105CC0000000400000000000000000000000000094 +:105CD00000000000000000000000000000000000C4 +:105CE00000000000000000000000000000000000B4 +:105CF00000000000000000000000000000000000A4 +:105D00000000000000000000000000000000000093 +:105D10000000000000000000000000000000000083 +:105D20000000000000000000000000000000000073 +:105D30000000000000000000000000000000000063 +:105D40000000000000000000000000000000000053 +:105D50000000000000020000000000000000000041 +:105D60000000000000000000000000000000000033 +:105D70000000000000000000000000000000000023 +:105D80000000000000000000000000000000000013 +:105D90000000000000000000000000000000000003 +:105DA00000000000000000000000000000000000F3 +:105DB00000000400000000000000000000000000DF +:105DC00000000000000000000000000000000000D3 +:105DD0000000400000000000000000000000000083 +:105DE00000000000000000000000000000000000B3 +:105DF00000000000000000000000000000000000A3 +:105E00000000000000000000000000000000000092 +:105E10000000000000000000000000000000000082 +:105E20000000000000000000000000000000000072 +:105E30000000000000000000000000000000000062 +:105E40000000000000000000000000000000000052 +:105E50000000000000000000000000000000000042 :105E60000000000000000000000000000000000032 :105E70000000000000000000000000000000000022 -:105E8000000000000000000000000000040080008E -:105E900000040000200000000008000200080005C7 -:105EA00000A0000000A00000080000000000110099 -:105EB0000000000000004000000011104088410078 -:105EC0008000C100A100C1000000800280008000AD -:105ED000210000004182000000000080000000005E +:105E80000000000000000000000000000000000012 +:105E90000000000000000000000000000000000002 +:105EA00000000000000000000000000000000000F2 +:105EB00000000000000000000000000000000000E2 +:105EC00000000000000000000000000000000000D2 +:105ED00000000000000000000000000000000000C2 :105EE00000000000000000000000000000000000B2 :105EF00000000000000000000000000000000000A2 -:105F000000000400040004000010200000000080D5 -:105F1000A0000000000000000000209100000080B0 -:105F200000000440004004000000A000040008003D -:105F300008008200000000000000200000000002B5 -:105F40000000000000000000080000000000000049 -:105F5000C00000000000C0000000000000200000A1 +:105F0000000000000000000000000000000000028F +:105F10000000000000000000000000000000000081 +:105F20000000000000000000000000000000000071 +:105F30000000000000000000000000000000000061 +:105F40000000000000000000000000000000000051 +:105F50000000000000000000000000000000000041 :105F60000000000000000000000000000000000031 :105F70000000000000000000000000000000000021 -:105F80000000000080008000900000018000000000 -:105F90000020009000820082008400008002000047 -:105FA000004000000083000100000000000000002D -:105FB00000000000080000000000000000000010C9 -:105FC000009100C0000000000088000000000000F8 +:105F80000000000000000000000000000000000011 +:105F90000000000000000000000000000000000001 +:105FA00000000000000000000000000000000000F1 +:105FB00000000000000000000000000000000000E1 +:105FC00000000000000000000000000000000000D1 :105FD00000000000000000000000000000000000C1 -:105FE0000000002100000000000000000000000090 -:105FF0000000002100000000000000000000000080 -:106000000000000090000000000090000000200050 -:1060100000200400010021008280A1000000004057 -:1060200004C0040405040005000000000000000096 -:106030000000002100200800400082004000C00055 -:106040000000C00800114000000000210000010015 -:1060500000000005040000000800080082000000A5 -:1060600000000000000000000000009000000000A0 +:105FE00000000000000000000000000000000000B1 +:105FF00000000000000000000000000000000000A1 +:106000000000000000000000000000000000000090 +:106010000000000000000000000000000000000080 +:106020000000000000000000000000000000000070 +:106030000000000000000000000000000000000060 +:106040000000000000000000000000000000000050 +:106050000000000000000000000000000000000040 +:106060000000000000000000000000000000000030 :106070000000000000000000000000000000000020 -:1060800000000000000000000000000000200000F0 -:1060900080000001000002008200404002820000F7 -:1060A00000010005200120080000000000000000A1 -:1060B00000000000000000002104000008040004AB -:1060C000031000A005901100000000000000000077 -:1060D000020000022020000200C0040000000000B6 +:106080000000000000000000000000000000000010 +:106090000000000000000000000000000000000000 +:1060A00000000000000000000000000000000000F0 +:1060B00000000000000000000000000000000000E0 +:1060C00000000000000000000000000000000000D0 +:1060D00000000000000000000000000000000000C0 :1060E00000000000000000000000000000000000B0 :1060F00000000000000000000000000000000000A0 -:10610000000000000000000000000000000510007A -:106110002000000001882000010000008803000921 -:1061200000000000000301210040082100000021C0 -:106130000000820500000005000000850080018548 -:106140000100000500008405820000050000002118 -:106150000000882100020040000000000009084102 +:10610000000000000000000000000000000000008F +:10611000000000000000000000000000000000007F +:10612000000000000000000000000000000000006F +:10613000000000000000000000000000000000005F +:10614000000000000000000000000000000000004F +:10615000000000000000000000000000000000003F :10616000000000000000000000000000000000002F :10617000000000000000000000000000000000001F :10618000000000000000000000000000000000000F -:1061900000008000000004048000400000000000B7 -:1061A00000000000000000000200000100000000EC -:1061B0000000000000000000000000000840004057 -:1061C0000240020003000000000000000000000088 +:1061900000000000000000002000000000000000DF +:1061A00000000000000000000000000000000000EF +:1061B00000000000000000000000000000000000DF +:1061C00000000000000000000000000000000000CF :1061D00000000000000000000000000000000000BF :1061E00000000000000000000000000000000000AF :1061F000000000000000000000000000000000009F :10620000000000000000000000000000000000008E -:1062100000000000900290020802009040C0400977 -:106220000009C000000000C020400510200288C006 -:1062300000020008008800C000000020209001C07B -:1062400000200008900008C10040000800A1C1C162 -:10625000008400C0000040C0A084000800A000002E +:10621000000000000000000000000000000000007E +:10622000000000000000000000000000000000006E +:10623000000000000000000000000000000000005E +:10624000000000000000000000000000000000004E +:10625000000000000000000000000000000000003E :10626000000000000000000000000000000000002E :10627000000000000000000000000000000000001E :10628000000000000000000000000000000000000E -:106290000000000000008420802190040090808095 -:1062A00011C0108900100000118080208889002012 -:1062B00003800080008000000080000000000000DB -:1062C000088000800080000080A00003008300029E -:1062D00084C00003004100038080000000800000B3 +:1062900000000000000000000000000000000000FE +:1062A00000000000000000000000000000000000EE +:1062B00000000000000000000000000000000000DE +:1062C00000000000000000000000000000000000CE +:1062D00000000000000000000000000000000000BE :1062E00000000000000000000000000000000000AE :1062F000000000000000000000000000000000009E :10630000000000000000000000000000000000008D -:1063100000000080000200001180040880C1888312 -:106320000900C00003118003000009020010902042 -:1063300080038000000800808000800000080000CA -:1063400080008000801000008000838000108300A7 -:106350008021800080090000800500000002800488 -:1063600080000000000000000000000000080000A5 -:10637000001000000000000000000000000000000D +:10631000000000000000000000000000000000007D +:10632000000000000000000000000000000000006D +:10633000000000000000000000000000000000005D +:10634000000000000000000000000000000000004D +:10635000000000000000000000000000000000003D +:10636000000000000000000000000000000000002D +:10637000000000000000000000000000000000001D :10638000000000000000000000000000000000000D -:106390000000000000400000001010400290A082A9 -:1063A000020501000900A001C001000090C0000129 -:1063B0000201C001080000000840C0000800900170 -:1063C0000000C000080010010000C000081000011B -:1063D0000800C001080082000000C0840000020024 -:1063E00082A1C000000000000000000000000000CA -:1063F000400000000000000000000000000000005D +:1063900000000000000000000000000000000000FD +:1063A00000000000000000000000000000000000ED +:1063B00000000000000000000000000000000000DD +:1063C00000000000000000000000000000000000CD +:1063D00000000000000000000000000000000000BD +:1063E00000000000000000000000000000000000AD +:1063F000000000000000000000000000000000009D :10640000000000000000000000000000000000008C -:106410000000000001000000080000009090000053 -:1064200008029000A0010009000803C0000020023B -:1064300082A1A10200C008080002000800C00808EC -:106440000088080802C008080088000882C0080305 -:106450000040400900C108080140840210C0020247 -:106460000008000801C0000000000000000020003B -:10647000000080000000000000000000000000009C +:10641000000000000000000000000000000000007C +:10642000000000000000000000000000000000006C +:10643000000000000000000000000000000000005C +:10644000000000000000000000000000000000004C +:10645000000000000000000000000000000000003C +:10646000000000000000000000000000000000002C +:10647000000000000000000000000000000000001C :10648000000000000000000000000000000000000C -:106490000000000000004100000000000000208417 -:1064A0000003410480050040008900C191C0000044 -:1064B00000410011A10908808080008000800080D8 -:1064C000808000000080008080800000008080804C -:1064D00080A1418020A100C08080028005009180C1 -:1064E0000000008000800480000000000000000028 -:1064F000000800080000000000000000000000008C +:1064900000000000000000000000000000000000FC +:1064A00000000000000000000000000000000000EC +:1064B00000000000000000000000000000000000DC +:1064C00000000000000000000000000000000000CC +:1064D00000000000000000000000000000000000BC +:1064E00000000000000000000000000000000000AC +:1064F000000000000000000000000000000000009C :10650000000000000000000000000000000000008B -:10651000000000000000000000400021000000001A -:10652000101100410400820940A188C0C180090304 -:1065300000008903A1900900030080098000808089 -:106540000000800980808080000080098090808029 -:1065500000008809822082000203A10990802000A7 -:10656000080080048080808000000000000000009F -:10657000000000010000000000000000000000001A +:10651000000000000000000000000000000000007B +:10652000000000000000000000000000000000006B +:10653000000000000000000000000000000000005B +:10654000000000000000000000000000000000004B +:10655000000000000000000000000000000000003B +:10656000000000000000000000000000000000002B +:10657000000000000000000000000000000000001B :10658000000000000000000000000000000000000B -:1065900000000000000000000000000100000000FA -:1065A0000000038902030202020011A10882080808 -:1065B00011010000C000101002024100C00020883C -:1065C00008080000C000204008088800C00020C162 -:1065D00008088800C10020A008204001C1002082D6 -:1065E00002044100C00120820808000000000000F1 -:1065F0000000000000000000070000000000000094 +:1065900000000000000000000000000000000000FB +:1065A00000000000000000000000000000000000EB +:1065B00000000000000000000000000000000000DB +:1065C00000000000000000000000000000000000CB +:1065D00000000000000000000000000000000000BB +:1065E00000000000000000000000000000000000AB +:1065F000000000000000000000000000000000009B :10660000000000000000000000000000000000008A :10661000000000000000000000000000000000007A -:1066200007004200000000E007004100000000E019 -:10663000000000000000000000E00000000000007A +:10662000000000000000000000000000000000006A +:10663000000000000000000000000000000000005A :10664000000000000000000000000000000000004A -:1066500000000000410000000000000000000000F9 -:1066600000000000420000000000000000000000E8 +:10665000000000000000000000000000000000003A +:10666000000000000000000000000000000000002A :10667000000000000000000000000000000000001A :10668000000000000000000000000000000000000A :1066900000000000000000000000000000000000FA -:1066A000000000000000FF0F93FFC399C399030F80 -:1066B000C3FF909FFFFF000000CFFFFF0CCFFFFF45 -:1066C000009FFFFF8DCFFFFF00CFFFFF03C3FFFF42 -:1066D00000CFFFFF0CCFFFFFC30FFFFF4BDBFFFF20 -:1066E00000CFFFFF8DCFFFFF9999FFFF8DCFFFFFF9 +:1066A00000000000000000000000000000000000EA +:1066B00000000000000000000000000000000000DA +:1066C00000000000000000000000000000000000CA +:1066D00000000000000000000000000000000000BA +:1066E00000000000000000000000000000000000AA :1066F000000000000000000000000000000000009A :106700000000000000000000000000000000000089 :106710000000000000000000000000000000000079 -:106720000000000000000000FFFF93FFC399C39921 -:10673000030FC3FF9F9FFFFF0000FFCFFFFFCFCFDF -:10674000FFFFFF9FFFFF8DCFFFFFFFCFFFFF3FFF4B -:10675000FFFFFFCFFFFFCFCFFFFFC3FFFFFF4BDBED -:10676000FFFFFFCFFFFF8DCFFFFF0FFFFFFF8DCF9D -:10677000FFFF00000000000000000000000000001B +:106720000000000000000000000000000000000069 +:106730000000000000000000000000000000000059 +:106740000000000000000000000000000000000049 +:106750000000000000000000000000000000000039 +:106760000000000000000000000000000000000029 +:106770000000000000000000000000000000000019 :106780000000000000000000000000000000000009 :1067900000000000000000000000000000000000F9 :1067A00000000000000000000000000000000000E9 @@ -169642,490 +169642,490 @@ :1067F0000000000000000000000000000000000099 :106800000000000000000000000000000000000088 :106810000000000000000000000000000000000078 -:10682000000000000000000000000000FF930FFFC8 -:1068300097F797F7FFFFF099FFFFF9090000FFFFB7 -:10684000F0C0FFFFDB42FFFFC3C3FFFFBD81FFFFBF -:10685000F0F0FFFFB1B1FFFFFF00FFFFB1B1FFFF9D -:10686000C3C3FFFFDB18FFFFFF00FFFFB1B1FFFF56 -:10687000C3C3000006F60000000000000000000096 +:106820000000000000000000000000000000000068 +:106830000000000000000000000000000000000058 +:106840000000000000000000000000000000000048 +:106850000000000000000000000000000000000038 +:106860000000000000000000000000000000000028 +:106870000000000000000000000000000000000018 :106880000000000000000000000000000000000008 :1068900000000000000000000000000000000000F8 -:1068A0000000000000000000000000000000FF9356 -:1068B000FFFF9FFF96F6FFFFFF99FFFFF9F900002A -:1068C000FFFFFFCFFFFFDBDBFFFFFFF0FFFFFFC39B -:1068D000FFFFDBDBFFFFF3F3FFFFF9F9FFFFF3F34C -:1068E000FFFFFFF0FFFFDBDBFFFFF9F9FFFFF3F333 -:1068F000FFFFFFF00000060600000000000000009F -:1069000005000A08050000A00000000000000000CB +:1068A00000000000000000000000000000000000E8 +:1068B00000000000000000000000000000000000D8 +:1068C00000000000000000000000000000000000C8 +:1068D00000000000000000000000000000000000B8 +:1068E00000000000000000000000000000000000A8 +:1068F0000000000000000000000000000000000098 +:106900000000000000000000000000000000000087 :106910000000000000000000000000000000000077 -:10692000000000000000000005000A08050000A0AB -:1069300005610A09050100A040638005002192025B -:10694000000040E38007002D92024082800000207A -:10695000920240828000002092024082800000204B -:10696000920240E38006002D920240E38006002D53 -:1069700092024082800000208A0200000000000095 +:106920000000000000000000000000000000000067 +:106930000000000000000000000000000000000057 +:106940000000000000000000000000000000000047 +:106950000000000000000000000000000000000037 +:106960000000000000000000000000000000000027 +:106970000000000000000000000000000000000017 :106980000000000000000000000000000000000007 :1069900000000000000000000000000000000000F7 :1069A00000000000000000000000000000000000E7 -:1069B00000007F7F2A2A82C0BEFCFF003F3FFC3CD4 -:1069C000FCFF0000FCFFE3E328302830000000005B +:1069B00000000000000000000000000000000000D7 +:1069C00000000000000000000000000000000000C7 :1069D00000000000000000000000000000000000B7 -:1069E000000000000F0B0F0F3C3C3C0000C300FFF9 +:1069E00000000000000000000000000000000000A7 :1069F0000000000000000000000000000000000097 :106A00000000000000000000000000000000000086 :106A10000000000000000000000000000000000076 :106A20000000000000000000000000000000000066 -:106A3000000000007575202082C0BEFCFF003030D1 -:106A4000C000C0C30000FCFFEFEF2830283000007A +:106A30000000000000000000000000000000000056 +:106A40000000000000000000000000000000000046 :106A50000000000000000000000000000000000036 -:106A60000000000000000F0B0F003C3C3C0000C089 -:106A700000F0000000000000000000000000000026 +:106A60000000000000000000000000000000000026 +:106A70000000000000000000000000000000000016 :106A80000000000000000000000000000000000006 :106A900000000000000000000000000000000000F6 :106AA00000000000000000000000000000000000E6 -:106AB000000000000000FF3F003F0D0DFDFDFF0C3A -:106AC000FF0C0AFA0AFA00003F303F3000C300C34F +:106AB00000000000000000000000000000000000D6 +:106AC00000000000000000000000000000000000C6 :106AD00000000000000000000000000000000000B6 -:106AE0000000000000000000BCBCBFBF0014001488 -:106AF000034103410000000000000000000000000E +:106AE00000000000000000000000000000000000A6 +:106AF0000000000000000000000000000000000096 :106B00000000000000000000000000000000000085 :106B10000000000000000000000000000000000075 :106B20000000000000000000000000000000000065 -:106B30000000000000000000FF3000300808F8F8F6 -:106B4000FF0CFF0C0CFC0CFC00000000000000C35C -:106B500000C3000000000000000000000000000072 -:106B600000000000000000000000CFFFCFFF001475 -:106B700000140000FFFF0000000000000000000003 -:106B800000000000000000000000000800031004E6 -:106B9000400220030005400320110004000300020E -:106BA000000000030008200000084002000020044C -:106BB0002002200800082002200800020002010430 -:106BC000000800020002000002040003200000028E -:106BD0002008200040000000200820040004880055 -:106BE0000008000000000408000000002000000071 -:106BF0009000200020000000200420000000200061 -:106C000088000400C0000000A00000000000000296 -:106C10000008000800000000000200000000000062 -:106C20000000000000020000000000000000100052 -:106C30000000000000000000000000000000000054 -:106C4000200200840000000000000000000000009E -:106C500000000000000000000000404000000000B4 -:106C6000000000000000090080000000000000009B -:106C70000000008800000000000040020002000048 -:106C8000000000401002000000004002000000026E -:106C90000000880000000004000400000000000064 -:106CA00000000000000400002011000000050003A7 -:106CB00000080000000000000000000000000000CC -:106CC00000000000000000000200000000000000C2 -:106CD000000000000800100000000000000000009C -:106CE0000000000000000000004105000000040951 -:106CF0000000000000000000000000000800080084 -:106D0000000002000000000000002000000002055A -:106D100000040004200200820084009000840084AB -:106D2000000200020004000200040004000400024B -:106D300000040002000200040002000200040082BD -:106D40000004000800080002000000040000000227 -:106D50000000008800828002008400040008000017 -:106D60000008000000040004000800002088000063 -:106D7000000000080000000203C000080004000238 -:106D800000020000000000040002000000020000F9 -:106D900000000002000800210003000400000005BC -:106DA000000800080040002100210004002000200D -:106DB0000040000800000003000800000000000080 -:106DC0000011000400000000000000000000900915 -:106DD00000000000000000000000000800000000AB -:106DE0000000000000000000001000400000001142 -:106DF000880000000400000004008400000000007F -:106E000000080000000000000000820000000000F8 -:106E10000000000000A00000000000400000000092 -:106E20000040000000000000000000000000000022 -:106E300000000000000000000008000020880000A2 -:106E400000A00000000100000002000441842108AD -:106E500000C0210000000082001000A0001000000F -:106E600000A004000400000000000000000000007A -:106E700000000900080000000000000011000000F0 -:106E8000000000000000000000820000000002007E -:106E900000044000000400000000000000000000AA +:106B30000000000000000000000000000000000055 +:106B40000000000000000000000000000000000045 +:106B50000000000000000000000000000000000035 +:106B60000000000000000000000000000000000025 +:106B70000000000000000000000000000000000015 +:106B80000000000000000000000000000000000005 +:106B900000000000000000000000000000000000F5 +:106BA00000000000000000000000000000000000E5 +:106BB0000000000000000000000040004000000055 +:106BC00000000000000000000000000301000000C1 +:106BD0000000008000000000000000000000200015 +:106BE00000000000000000000000000000000000A5 +:106BF0000000000000000000000000000000200075 +:106C00000000000000000000000000000000000084 +:106C10000000000000000000210000000000000053 +:106C20002100000000000000000000000000000043 +:106C30004000000000000040000000004000000094 +:106C400000020000000040004000000000000200C0 +:106C50000000000000400000009000000000000064 +:106C60000090000000000000000000020000000092 +:106C70000000000000000000000000000000000014 +:106C80000000000000000000000000000000000004 +:106C900000000000000000000000000000000000F4 +:106CA00000000000000000000000000000000000E4 +:106CB00000000000000000000000000000000000D4 +:106CC00000000000000000000000000008000000BC +:106CD00000000100010000000000000000000000B2 +:106CE00000000000000000000000000000000200A2 +:106CF0000000000000000000000000000000000094 +:106D0000000000000000000000000000000008007B +:106D10000000000000000000000000000000000073 +:106D20000000000000000000000000000000000063 +:106D30000000000000000000000000000000000053 +:106D40000000000000000000000000000000000043 +:106D5000000000000200020000000000000000002F +:106D60000000000000000000000000000000000023 +:106D7000000800000000000000000000000000000B +:106D80000000000000000000000000000000000003 +:106D900000400000000000000000000000000000B3 +:106DA00000000000000000000000000000000000E3 +:106DB00000000000000000000000000000000000D3 +:106DC00000000000000000000000000000000000C3 +:106DD00000000000000000000000000000000000B3 +:106DE00000000000000000000000000000000000A3 +:106DF0000000000000000000000000000000000093 +:106E00000000000000000000000000000000000082 +:106E10000000000000000000000000000000000072 +:106E20000000000000000000000000000000000062 +:106E30000000000000000000000000000000000052 +:106E40000000000000000000000000000000000042 +:106E50000000000000000000000000000000000032 +:106E60000000000000000000000000000000000022 +:106E70000000000000000000000000000000000012 +:106E80000000000000000000000000000000000002 +:106E900000000000000000000000000000000000F2 :106EA00000000000000000000000000000000000E2 :106EB00000000000000000000000000000000000D2 -:106EC0000000000000002000000000002000000082 -:106ED00000000000000000000000040000000000AE -:106EE000042000000000000000000000000000007E -:106EF000000000410000200000000000080884009D -:106F000000000000000000080000000000008200F7 -:106F100000000000000000000000000000820000EF -:106F2000000800000000210000A000000008000888 -:106F30000000000000000000000000000000000051 -:106F40000000000000000000800000000000800041 -:106F500000C00000000000000000000000880000E9 -:106F600000000820000000000000000000000000F9 -:106F7000000000001000000080000000000000C0C1 -:106F8000008200000020000000000000000000005F -:106F900000000000000000000000000300000000EE -:106FA0000000000000200008004000000000000079 +:106EC00000000000000002000000000001000000BF +:106ED00000000000010000000000000000000100B0 +:106EE00000000000000000000000000000000000A2 +:106EF0000000000000000000000000000000000092 +:106F00000000000000000000000000000000000081 +:106F10000000000000000000000000000000000071 +:106F20000000000000000000000000000000000061 +:106F3000000000000000020000000000100000003F +:106F400000000000100000008000000000000400AD +:106F50000000000000000404000000000000000029 +:106F6000040000000000000000000000000000001D +:106F70000000000000000000000000000000000011 +:106F80000000000000000000000000000000000001 +:106F900000000000000000000000000000000000F1 +:106FA00000000000000000000000000000000000E1 :106FB00000000000000000000000000000000000D1 -:106FC0000000000020400000000000002000000041 -:106FD0000100000000000000000400000000041098 -:106FE0000000000000000000000000100000000091 -:106FF000000000000180018001800080001100007D -:107000000011000000000000000800000000000067 -:1070100000090000000800000000000000000084DB -:10702000000000000000040010000000000000004C -:1070300000000000000000000000000000A00000B0 -:107040000000000000000000000000C0020080C03E -:10705000000020A00000000000000000000003006D -:1070600000000000030800040004000400000420E5 -:1070700000880420000420200404040400202100CF -:1070800000022000002000040000000003000000B7 +:106FC00000000000000000000000000000000020A1 +:106FD000000002000000002000000000000000008F +:106FE00000000000000000000000000000000000A1 +:106FF0000000000000000000000000000000000091 +:107000000000000000000000000000000000000080 +:107010000000000000000000000000000000000070 +:107020000000000000000000000000000000000060 +:107030000000000000000000000000000000000050 +:107040000000000000000000000000000000000040 +:1070500000010000800000000001000000000000AE +:107060000000000000000000000000000000000020 +:107070000000000000000000000000000000000010 +:107080000000000000000000000000000000000000 :1070900000000000000000000000000000000000F0 -:1070A000002100000821000000080000000000008E -:1070B00000000010000000000000000000000000C0 +:1070A00000000000000000000000000000000000E0 +:1070B00000000000000000000000000000000000D0 :1070C00000000000000000000000000000000000C0 -:1070D0009080010088000000000008030009000003 -:1070E0000008000000000000000000000000000098 -:1070F00000000000000000000580000000A00180EA -:107100000002000000080000000000000000000075 +:1070D00000000000000000000000000000000000B0 +:1070E00000000000000000000000000000000000A0 +:1070F0000000000000000000000000000000000090 +:10710000000000000000000000000000000000007F :10711000000000000000000000000000000000006F -:10712000000000000000000000000000000000005F -:107130000000000800000000000000000000000047 +:10712000000000000000000000000000000005005A +:10713000000000000000050000000000000000004A :10714000000000000000000000000000000000003F -:10715000000000042000000000000000000000000B -:1071600000000000001000000008000800000000FF -:10717000000000000000008400000404000000057E -:1071800004040000000000041100000000000000E2 -:10719000008200000000000000000000000000006D +:107150001000000011000000000000000000020804 +:10716000000000000000000000000000000000001F +:107170000000080000000000000000000000000007 +:1071800000000000000000000000000000000000FF +:1071900000000000000000000000000000000000EF :1071A00000000000000000000000000000000000DF :1071B00000000000000000000000000000000000CF :1071C00000000000000000000000000000000000BF -:1071D0000000000001018800000000000000000025 -:1071E000000000000000000000000000000000009F -:1071F0000000000000000000000000004084C0010A -:1072000002A0108800000000000000000000000044 +:1071D0000000000090000008000000009000000087 +:1071E0000088000000000090000000000000000087 +:1071F000000000000000000000000000000000008F +:10720000000000000000000000000000000000007E :10721000000000000000000000000000000000006E :10722000000000000000000000000000000000005E :10723000000000000000000000000000000000004E :10724000000000000000000000000000000000003E -:1072500000000000000403100910000900000000F5 -:10726000000000000000000000000000000000001E -:1072700000000000000000000000000000004009C5 -:1072800000100411000400000000000000000000D5 +:10725000000000001100800000000000110080000C +:10726000000000000000400000800000000000005E +:10727000000000000000000000000000000000000E +:1072800000000000000000000000000000000000FE :1072900000000000000000000000000000000000EE :1072A00000000000000000000000000000000000DE :1072B00000000000000000000000000000000000CE :1072C00000000000000000000000000000000000BE -:1072D0000000000000001080000004000989000088 -:1072E000000000000000000000000000000000009E +:1072D00000000000000000000080000000800000AE +:1072E000008000000080000000000080000000809E :1072F000000000000000000000000000000000008E -:107300000000031089802000000000000000000041 +:10730000000000000000000000000000000000007D :10731000000000000000000000000000000000006D :10732000000000000000000000000000000000005D :10733000000000000000000000000000000000004D :10734000000000000000000000000000000000003D -:107350000000000000000000010200000000000822 -:10736000000000000000000000000000000000001D -:10737000000000000000000000000000000000000D -:107380000000841001004040C19000000000000097 +:10735000000000000000000000000020000000C04D +:1073600000000020000000C000000000002000001D +:10737000000200000000000000000000000000000B +:1073800000000000000000000000000000000000FD :1073900000000000000000000000000000000000ED :1073A00000000000000000000000000000000000DD :1073B00000000000000000000000000000000000CD :1073C00000000000000000000000000000000000BD -:1073D00000000000000000000000000001000000AC -:1073E0000001000000000000000000000090000804 -:1073F0000004000200000000000000000000000087 -:1074000000000000408401C0C0091000000000001E +:1073D000000000000000000000000100008888009C +:1073E000010001000088880001000000000000008A +:1073F000909000000000000000000000000000006D +:10740000000000000000000000000000000000007C :10741000000000000000000000000000000000006C :10742000000000000000000000000000000000005C :10743000000000000000000000000000000000004C :10744000000000000000000000000000000000003C -:107450000000000000000000000000000004030025 -:10746000000408020000000000000000000000000E -:10747000000000800080000000000000000000000C -:107480000000000000000009204100889004000076 +:10745000000000000000000000000000410000806B +:107460000000090041000080000009000000200029 +:10747000000000800000000000000000000000008C +:1074800000000000000000000000000000000000FC :1074900000000000000000000000000000000000EC :1074A00000000000000000000000000000000000DC :1074B00000000000000000000000000000000000CC :1074C00000000000000000000000000000000000BC -:1074D0000000000000000000000000000000041197 -:1074E0002100000004200000000000000000000057 -:1074F000000000000000000000000000000000008C -:107500000000000000000000088020842000040427 +:1074D000000000000000000000000000000000119B +:1074E000000000800000001100000080000000008B +:1074F00000118000000000000000000000000000FB +:10750000000000000000000000000000000000007B :10751000000000000000000000000000000000006B :10752000000000000000000000000000000000005B :10753000000000000000000000000000000000004B :10754000000000000000000000000000000000003B :10755000000000000000000000000000000000002B -:107560000004000000000000000000000000000017 -:10757000000000000000000000000000000000000B -:107580000000000000000000000085C00182090228 -:10759000C00000000000000000000000000000002B +:107560000001000000400000000100000040000099 +:107570000000000120000088000000000000000062 +:1075800000000000000000000000000000000000FB +:1075900000000000000000000000000000000000EB :1075A00000000000000000000000000000000000DB :1075B00000000000000000000000000000000000CB :1075C00000000000000000000000000000000000BB :1075D00000000000000000000000000000000000AB -:1075E0000000000000E000000000000000000000BB -:1075F000000000000000000000000000000000008B -:10760000000000000000000000000000000000E09A -:1076100007008200000000000000000000000000E1 +:1075E00000000000000007008221000000000700EA +:1075F00082210000000000000700000000000000E1 +:10760000000000000000000000000000000000007A +:10761000000000000000000000000000000000006A :10762000000000000000000000000000000000005A :10763000000000000000000000000000000000004A :10764000000000000000000000000000000000003A :10765000000000000000000000000000000000002A -:10766000000000000000000000000000000000001A -:1076700000000000000000000000FFFFFFCF00003E -:107680000000000000000000000000000000BEBE7E -:10769000F0F0C2FEC2FE000000000000000000008A +:107660000000000000000000F0F00000000000003A +:10767000F0F00000000000FF000000FF000000002C +:1076800000000000000000000000000000000000FA +:1076900000000000000000000000000000000000EA :1076A00000000000000000000000000000000000DA :1076B00000000000000000000000000000000000CA :1076C00000000000000000000000000000000000BA :1076D00000000000000000000000000000000000AA -:1076E000000000000000000000000000000000009A -:1076F000000000000000000000000000FFFFFFCFBE +:1076E00000000000000000000000F0F000000000BA +:1076F0000000F0F00000000000FF000000FF0000AC :107700000000000000000000000000000000000079 -:107710001414F0F0407C407C0000000000000000E9 +:107710000000000000000000000000000000000069 :107720000000000000000000000000000000000059 :107730000000000000000000000000000000000049 :107740000000000000000000000000000000000039 :107750000000000000000000000000000000000029 -:107760000000000000000000000000000000000019 -:107770000000000000000000000000000000000009 -:1077800000000000000000000000000000000000F9 -:1077900000003C3C55557DFF7D3C00000000000092 +:10776000000000000000000000000F0F0000FFFFFD +:1077700000003C3C0000FFFF00000000FF00000094 +:10778000FFFF0000000000000000000000000000FB +:1077900000000000000000000000000000000000E9 :1077A00000000000000000000000000000000000D9 :1077B00000000000000000000000000000000000C9 :1077C00000000000000000000000000000000000B9 :1077D00000000000000000000000000000000000A9 -:1077E0000000000000000000000000000000000099 -:1077F0000000000000000000000000000000000089 +:1077E0000000000000000000000000000F0F00007B +:1077F000000000003C3C0000000000000000FF0012 :107800000000000000000000000000000000000078 -:10781000000000003C3C0F0F41C34100000000008D +:107810000000000000000000000000000000000068 :107820000000000000000000000000000000000058 :107830000000000000000000000000000000000048 :107840000000000000000000000000000000000038 :107850000000000000000000000000000000000028 -:1078600000000000000000000000000000610001B6 -:107870000001000000000000000000000000000007 -:1078800000000000000000000000000000000000F8 -:10789000000000000000006100090001000000007D +:1078600000000000000000000000000005002A00E9 +:10787000054000A805002A00054000A800001500EA +:107880002A00054000A800000000000000000000E1 +:1078900000000000000000000000000000000000E8 :1078A00000000000000000000000000000000000D8 :1078B00000000000000000000000000000000000C8 :1078C00000000000000000000000000000000000B8 :1078D00000000000000000000000000000000000A8 -:1078E0000000000000000000000000000000FF0099 -:1078F00055558282BEBE000000000000000000005E +:1078E0000000000000000000000000000000000098 +:1078F0000000000000000000000000000000000088 :107900000000000000000000000000000000000077 -:107910000000000000000000D717D414C0FCAAAA81 +:107910000000000000000000000000000000000067 :107920000000000000000000000000000000000057 :107930000000000000000000000000000000000047 :107940000000000000000000000000000000000037 :107950000000000000000000000000000000000027 :107960000000000000000000000000000000000017 -:10797000FF003C3C00C33CFF000000000000000092 +:107970000000000000000000000000000000000007 :1079800000000000000000000000000000000000F7 -:1079900000000000000000000000D717D414C0FC55 -:1079A000AAAA000000000000000000000000000083 +:1079900000000000000000000000000000000000E7 +:1079A00000000000000000000000000000000000D7 :1079B00000000000000000000000000000000000C7 :1079C00000000000000000000000000000000000B7 :1079D00000000000000000000000000000000000A7 :1079E0000000000000000000000000000000000097 -:1079F0000000FF0017173C3C3C3C0000000000006A +:1079F0000000000000000000000000000000000087 :107A00000000000000000000000000000000000076 -:107A10000000000000000000000000003F037D4166 -:107A200055FF50FA000000000000000000000000B8 +:107A10000000000000000000000000000000000066 +:107A20000000000000000000000000000000000056 :107A30000000000000000000000000000000000046 :107A40000000000000000000000000000000000036 :107A50000000000000000000000000000000000026 :107A60000000000000000000000000000000000016 -:107A700000000000FF00171700FFAAAA0000000086 +:107A70000000000000000000000000000000000006 :107A800000000000000000000000000000000000F6 -:107A900000000000000000000000000000003F03A4 -:107AA0007D4100AA50FA0000000000000000000024 +:107A900000000000000000000000000000000000E6 +:107AA00000000000000000000000000000000000D6 :107AB00000000000000000000000000000000000C6 -:107AC00000000000000000050004000000040004A5 -:107AD000200220028805001100030004200840084D -:107AE000880800082002101100040005001100039E -:107AF000000020000000000200080000200020001C -:107B00008808000420040003200200080000000090 -:107B100000020000200200118800000800000000A0 -:107B20002000000000002004880004000000000085 -:107B30009000000002000002200090000000000001 -:107B40001000000000002000000000000082000083 -:107B5000000800000000000000000000000000001D -:107B60000004000000020800000000000090000077 -:107B7000000200000002008200000000000000007F +:107AC0000000000000000000100000000000100096 +:107AD0000000008010000000000000000000000016 +:107AE00000000000400040000000000000032000F3 +:107AF00000008400200000000000001100000000D1 +:107B00000000000000000001200000000000000054 +:107B10002000000000002000000000000000000025 +:107B20000000000000000000000000000000000055 +:107B30002000000000002000000000000000000005 +:107B40000000000000000000000000000000000035 +:107B5000800000000008800000020000000000001B +:107B60000000000000000000000000000000000015 +:107B70000002000000000000000000000000000003 :107B800000000000000000000000000000000000F5 -:107B900000000000000000000000000000000000E5 -:107BA00000000000000000000000000000000002D3 -:107BB000000200000000800200000000000000023F -:107BC0000000200000000000000020040000001061 -:107BD0000000000200050420200400000004200032 -:107BE000000400110000000000000003000000007D -:107BF0000004000000000000000000000100000080 -:107C0000200000000000000000000000000004044C -:107C10000000000000002000A00020000000000084 -:107C200004000000080041000000400000000400C3 -:107C3000000000000200000000000000000004003E -:107C4000000000000000040000000000008200822C -:107C50002004008200100004008304080082000851 -:107C600000080090008400020082000400020084EA -:107C700000040002000800020010000200042002BC -:107C800000048004000400020008009000000004CA -:107C90000002000200840008800400088000000048 -:107CA0000002000000048008A004008280000000A0 -:107CB0008002008200088008000000080000000028 -:107CC00000020082000000040000000000000041EB -:107CD0004005A000002100A1902000080020002005 -:107CE00000210021002000100021000000110000F0 -:107CF00000200008000800040208000090000000B6 -:107D00004003002088000000000040000000000048 -:107D100000020005000800088405880940210000D1 -:107D2000000000000000042000008803000540005F -:107D30000421000000000000880000000000000492 -:107D400000020000000300100021000000050000F8 -:107D5000000000A000080000002000890000009141 -:107D60000040000000200000000000820000000031 -:107D700000900000000000000088000000000004E7 -:107D80000904000000000020000000C0008800007E -:107D900000000000000000000000000000200000C3 +:107B900000000000000000080000000000000000DD +:107BA0000000000000000000000000004000000095 +:107BB00000000000000000000400000000000000C1 +:107BC00000000000000000000000000000000000B5 +:107BD0000000000010000000000000000000000095 +:107BE0000000000000000000000000000000000095 +:107BF0000000000000000000000002000000000083 +:107C00000000000000000000000000000000000074 +:107C1000000000000000000000080000000000005C +:107C20000000000000000000000000000000000054 +:107C3000000000000000000000080000000000003C +:107C40000000000000000000000000000002000032 +:107C500000000000000080000000000000000000A4 +:107C60000000000000000000000000000000000014 +:107C70000000000000000000000000008000000084 +:107C800000000000000000000000000000000000F4 +:107C900000000000000000000000000000000000E4 +:107CA00000000000000000000000000000000000D4 +:107CB00000000000000000000000000800000000BC +:107CC00000000000000000000000000000000000B4 +:107CD00000000000010000000000000001000000A2 +:107CE0000000000000000000000000000000000094 +:107CF0000000000000000000000000000000000084 +:107D00000000000000000000000000000000000073 +:107D10000000000000090021000000000000000039 +:107D20000000000000000011000000000000000042 +:107D30000000000000000000000000000000000043 +:107D40000000000000000000000000000000000033 +:107D500000000000000004000000000000002000FF +:107D60000000000000000000000000000000000013 +:107D70000000000000000000000000000000000003 +:107D800000000000000000002000000000000000D3 +:107D900000000000000000000000000000000000E3 :107DA00000000000000000000000000000000000D3 -:107DB0000984008200000040004000000020000014 -:107DC00000000300000000000000000000000000B0 -:107DD0000000000000000000000000001000000093 -:107DE0000000000000000000000000000000000093 -:107DF0000000000300000000000000000800000078 -:107E0000000000000000000500100000004000809D -:107E100004000000C041000000000000000000114C -:107E20000000000040000000000008000004000006 -:107E30000000000008000000000000110000000029 -:107E4000000000000000C000000000000000000072 -:107E500000000000000800101000408405000082AF -:107E60000000000000080000000000A0000000006A -:107E700000000000000000080000000000000000FA -:107E80000000000000A0000000A0000800080000A2 -:107E900000100000000000000000000000000000D2 -:107EA00000040000000000000000000000000001CD -:107EB00008000000000000000000000000000000BA +:107DB00000000000000000000000000000000000C3 +:107DC00000000000000000000000000000000000B3 +:107DD000000000000000000000050000000000801E +:107DE0000080000000000000000000000000000013 +:107DF0000000000000000000400000000000000043 +:107E00000000000000000000000000000000000072 +:107E10000000000000000000000000000000000062 +:107E20000000000000000000000000000000000052 +:107E30000000000000000000000000000000000042 +:107E40000000000000000000000000000000000032 +:107E500000000000000000000000000041000000E1 +:107E600005200540050000000000000000000000A3 +:107E700000000000000008000000210021000000B8 +:107E8000400000000000000000A000000000000012 +:107E900000000000000000000000000021002100A0 +:107EA00000000800000000000000000000000000CA +:107EB00000000000000000000000000000002100A1 :107EC00000000000000000000000000000000000B2 -:107ED0000000000000000000000800210008000071 -:107EE000000000000000000300000000000000008F -:107EF0000000000000080008000000000000000072 -:107F00000000000008040000000000000000002045 -:107F10000800002100000002000000000000000036 +:107ED00000000000000020200400902000000000AE +:107EE0000000000000000000000000000000000092 +:107EF00000000000000000000000000084002000DE +:107F00000000C000040000000000000000000000AD +:107F10000000000000110000000000000000000050 :107F20000000000000000000000000000000000051 -:107F300000000080010400800002000000400010EA -:107F40000000000008000004002100000000000202 -:107F50000000000800000000000000000000000019 +:107F30000000000000000000000000000000000041 +:107F40000000000000000000000000000000000031 +:107F50000000000000000000000000000001000020 :107F60000000000000000000000000000000000011 :107F70000000000000000000000000000000000001 -:107F800000000040000000004000000000000990D8 -:107F90000000000000880020000000000000000039 -:107FA0004000000000000000000000000000008809 -:107FB00000000982400420010004210000000200AA -:107FC0000090000000000000000000000000000021 -:107FD0000008000000000000000000000000000099 -:107FE0000000000000080000004100000000001137 -:107FF0000000000000000000000000000000000081 -:1080000000000000000000000000000000000180EF -:1080100000000021002100210000000020000000DD -:10802000000004000000001100000000002100001A -:108030000408000020000000000000000000000014 -:108040000004001000000000000000000000000814 -:1080500000210008000000000000000000000000F7 -:108060000000080000000000000000000000000008 -:1080700010000002000000000000000000000000EE -:1080800000000000000000000008000000000000E8 -:108090000810000000000000000000000000009038 -:1080A0000000009000002000000000000000000020 -:1080B0000000000000008000000000000000000040 -:1080C00000000000000000000000000800000000A8 +:107F8000000000000000000000000000000000846D +:107F900000900000000000840000000005000000C8 +:107FA000008400000000000000000000000000004D +:107FB00000000000000000000000000000000000C1 +:107FC00000000000000000000000000000000000B1 +:107FD000000000000000000000000200000000009F +:107FE000000002000000000900200000000000095D +:107FF0000000000000000000100010000000000061 +:108000000000000000000000000000000000000070 +:108010000000001100000009080200000800000034 +:10802000000000020000000000000002000000004C +:108030000000000000000000000000000800000038 +:108040000000000000000000000000000000000030 +:1080500000000000000000000000000080000000A0 +:10806000000000008000000000000001000000008F +:108070000000000000000000000000000000000000 +:1080800000000000000000000000000000000000F0 +:108090000000008800000000000000000000000058 +:1080A00000000000000000000000000000000000D0 +:1080B0000000000000880000000000000000000038 +:1080C00000000000000000000000000000000000B0 :1080D00000000000000000000000000000000000A0 -:1080E0000000000000000000000000000000000090 +:1080E0009000000800000100900000000000000067 :1080F0000000000000000000000000000000000080 -:10810000000000000000000000000000000000016E -:10811000A0000801000000000000000000000000B6 -:1081200000000000000000000000890008000000BE -:108130000000000000000000000001000400000139 -:1081400000A000820002000200C020400088888257 +:1081000000000000000000000000000000004040EF +:10811000008800208820000000000000000000000F +:10812000000000000000000000000000000000004F +:10813000000000000000000000000000000000003F +:10814000000000000000000000000000000000002F :10815000000000000000000000000000000000001F -:10816000000000000000000000000000000000000F +:1081600011008000000000001100802100000000CC :1081700000000000000000000000000000000000FF :1081800000000000000000000000000000000000EF -:108190000004090900400020000000000000000069 -:1081A0000000000000000000000000050302800243 -:1081B00000200000000000000000001141208409A0 -:1081C00000400080000000000000100080800000DF -:1081D000008000000000000000000000000000001F -:1081E000000000000000000000000000000000008F -:1081F000000000000000000000000000000000007F +:1081900080800000000000000000000000000000DF +:1081A00000000000000000000000000000000000CF +:1081B00000000000000000000000000000000000BF +:1081C00000000000000000000000000000000000AF +:1081D000000000000000000000000000000000009F +:1081E00000000000008000000080000500801121D8 +:1081F00000800005000000000000000000000000FA :10820000000000000000000000000000000000006E -:1082100000000880100008000310000000000000AB -:1082200000000000000000000000000010800800B6 -:10823000100003880000000000000000001040084B -:10824000098810080000004100040000000080C1FF -:10825000801180000000000000000000000000000D -:1082600000000000000000000000000000000010FE -:1082700000000004000000000000000000000000FA +:1082100000008000008300020080000000000000D9 +:10822000000000000000000000000000000000004E +:10823000000000000000000000000000000000003E +:10824000000000000000000000000000000000002E +:10825000000000000000000000000000000000001E +:108260000000000000000020000000C0000000022C +:1082700001000002000000000000000000000000FB :1082800000000000000000000000000000000000EE -:1082900000000000010800000100010000000000D3 -:1082A00000000000000000000000000000000108C5 -:1082B000010001000105000000000000000000C1F5 -:1082C0000100008501A00000000000050000100072 -:1082D00010831000080200000000000000000000F1 -:1082E000000000000000000000000000000000008E -:1082F0000000080000000000000000000000000076 +:1082900000000000080010828283880200000000B5 +:1082A00000000000000000000000000000000000CE +:1082B00000000000000000000000000000000000BE +:1082C00000000000000000000000000000000000AE +:1082D000000000000000000000000000000000009E +:1082E0000000000000000100008808000100890073 +:1082F00020880800010000000000000000000000CD :10830000000000000000000000000000000000006D -:10831000000000000000000000000001000000005C -:10832000000000000000000100000000000000004C -:108330000000010101010001000000000000000038 -:108340000000200008010001020000000000C00041 -:10835000C0840020082001080000900000000000F8 -:10836000000000000000000000000000000000000D -:108370000400000080000000000000000000000079 +:10831000000000000000C01000A0082002040000BF +:10832000000000000000000000000000000000004D +:10833000000000000000000000000000000000003D +:10834000000000000000000000000000000000002D +:10835000000000000000000000000000000000001D +:1083600000000000000000004100008080000900C3 +:10837000410000800009080000000000000000002B :1083800000000000000000000000000000000000ED -:10839000000000000000000000092003412100103F -:1083A00000000000000000000001000000000000CC -:1083B00000000009084005214008000000000000FE -:1083C00000000010804100210403000000000000B4 -:1083D0000000828000808080088002000000000091 -:1083E000000000000000000000000000000000008D -:1083F0000000000000080000000000000000000075 +:1083900000000000000000008080000000000000DD +:1083A00000000000000000000000000000000000CD +:1083B00000000000000000000000000000000000BD +:1083C00000000000000000000000000000000000AD +:1083D000000000000000000000000000000000009D +:1083E00000000000000000000000001100000080FC +:1083F00000000011110000800000000000000000DB :10840000000000000000000000000000000000006C -:10841000000000000000000000002110020803001E -:108420000211000000000000000000010000000038 -:108430000000000021104010410003000000000077 -:1084400000000000211111110500111100000000B1 -:108450000000000000118009008080000000000082 -:10846000000000000000000000000000000000000C -:1084700000000000000000000000000000000000FC +:1084100000000000000000000000000000000080DC +:10842000000000000000000000000000000000004C +:10843000000000000000000000000000000000003C +:10844000000000000000000000000000000000002C +:10845000000000000000000000000000000000001C +:10846000000000000000000000000000000100000B +:10847000004000000001010000400000000000007A :1084800000000000000000000000000000000000EC -:1084900000000000000000000000000001040000D7 -:1084A00001000000000000000000000000010000CA -:1084B00000000000000001000101000001000000B8 -:1084C0000000000000009100C00008000201100040 -:1084D000A00040009010C000100088844000000000 +:10849000000000000000000000000000200020207C +:1084A0004008840000000000000000000000000000 +:1084B00000000000000000000000000000000000BC +:1084C00000000000000000000000000000000000AC +:1084D000000000000000000000000000000000009C :1084E000000000000000000000000000000000008C -:1084F0000000000000000000000007000000000075 +:1084F000000007008221000000E007008200000069 :10850000000000000000000000000000000000006B :10851000000000000000000000000000000000005B -:1085200000E000000000000000000000000000006B -:108530000000000000000000000000E0000000005B -:108540000000000000000000000000E000005000FB -:10855000000000000700000000000000410084004F +:1085200000000000600000000000000000000000EB +:10853000000000000000000000000000000000003B +:10854000000000000000000000000000000000002B +:10855000000000000000000000000000000000001B :10856000000000000000000000000000000000000B -:1085700000000000000000000000000000000000FB +:10857000000000000000F0F0000000000000F0F03B :1085800000000000000000000000000000000000EB :1085900000000000000000000000000000000000DB -:1085A00000000000000000000000000000000000CB +:1085A00009816F81004B994B000000000000000022 :1085B00000000000000000000000000000000000BB -:1085C00000000000000000000000FFFFC9C900001B -:1085D00000000062F3F30000000000000000000053 +:1085C00000000000000000000000000000000000AB +:1085D000000000000000000000000000000000009B :1085E000000000000000000000000000000000008B -:1085F000000000000000000000000000000000007B -:10860000000000000000000000000000000000006A +:1085F0000000000000000000F0F00000000000009B +:10860000F0F000000000000000000000000000008A :10861000000000000000000000000000000000005A -:10862000000000000000000000000000000000004A +:10862000000009E76FE7664BFF4B00000000000009 :10863000000000000000000000000000000000003A -:10864000000000000000000000000000F0FFFFFF3D -:10865000000000006262F3F3000000000000000070 +:10864000000000000000000000000000000000002A +:10865000000000000000000000000000000000001A :10866000000000000000000000000000000000000A :1086700000000000000000000000000000000000FA :1086800000000000000000000000000000000000EA @@ -170133,236 +170133,236 @@ :1086A00000000000000000000000000000000000CA :1086B00000000000000000000000000000000000BA :1086C00000000000000000000000000000000000AA -:1086D0000000000000000000000000000000000892 -:1086E00040000084200000000000000000000000A6 -:1086F000000000000000000000000000000000007A -:108700000000000000000000000000000000000069 +:1086D000000000000000000000000000000000009A +:1086E000000000000000000000000000000000008A +:1086F0000000000000000F0F0000FFFF0000FFFF60 +:108700000000FFFF0000000000000000000000006B :108710000000000000000000000000000000000059 -:108720000000000000000000000000000000000049 +:108720000000000000000303F909F68190810000B9 :108730000000000000000000000000000000000039 :108740000000000000000000000000000000000029 :108750000000000000000000000000000000000019 :108760000000000000000000000000000000000009 -:1087700000000000000000000000000000000000F9 +:1087700000000000000000000F0F000000000000DB :1087800000000000000000000000000000000000E9 :1087900000000000000000000000000000000000D9 -:1087A00000000000000000000000000000000000C9 +:1087A0000000000000000000F3F3F909F6E790E78D :1087B00000000000000000000000000000000000B9 :1087C00000000000000000000000000000000000A9 -:1087D00000000000000000000000FFFF242F000048 +:1087D0000000000000000000000000000000000099 :1087E0000000000000000000000000000000000089 -:1087F0000000000000000000000000000000000079 -:10880000000005000A08050000A0000000000000AC +:1087F0000000000000000000000005002A00054005 +:1088000000A805002A06054C00A800000000000092 :108810000000000000000000000000000000000058 -:1088200000000000000000000000006100040009DA +:10882000000000000000000000000000000000C088 :108830000000000000000000000000000000000038 -:1088400000000000006100040009000000000000BA -:108850000000000000610007000D000000000000A3 -:10886000000000003000000000C000000000000018 +:108840000000000000000000000000000000000028 +:108850000000000000000000000000000000000018 +:108860000000000000000000000000000000000008 :1088700000000000000000000000000000000000F8 -:1088800000000000000000000000000000000000E8 +:10888000000000000000FF0000FF000000000000EA :1088900000000000000000000000000000000000D8 -:1088A0000000000000000000000000002A0AAAAA40 -:1088B00003C383C3000000000000000000000000AC -:1088C000000000000000AA08AAAAC380C38000001C -:1088D0000000000000000C00FF000000FF2A000064 +:1088A00000000000000000000000000000000000C8 +:1088B00000000000000000000000000000000000B8 +:1088C00000000000000000000000000000000000A8 +:1088D0000000000000000000000000000000000098 :1088E0000000000000000000000000000000000088 :1088F0000000000000000000000000000000000078 -:108900000000000000000000000000000000000067 +:108900000000000000000000FF0000FF0000000069 :108910000000000000000000000000000000000057 -:10892000000000000000000000000000000028001F -:10893000AAAA00C382C300000000000000000000DB -:1089400000000000000000000808AAAAC380C3C3FA -:1089500000000000000000000500FF000000FF20F4 +:108920000000000000000000000000000000000047 +:108930000000000000000000000000000000000037 +:108940000000000000000000000000000000000027 +:108950000000000000000000000000000000000017 :108960000000000000000000000000000000000007 :1089700000000000000000000000000000000000F7 -:1089800000000000000000000000000000000000E7 +:1089800000000000000000000000FF0000FF0000E9 :1089900000000000000000000000000000000000D7 :1089A00000000000000000000000000000000000C7 -:1089B00038FA0000F0F0F0F00000000000000000C5 -:1089C00000000000000000000000B0BE00BEFF0F6D -:1089D0003C0C0000000000000000C0F0C3FFFF5589 -:1089E0000F05000000000000000000000000000073 +:1089B00000000000000000000000000000000000B7 +:1089C00000000000000000000000000000000000A7 +:1089D0000000000000000000000000000000000097 +:1089E0000000000000000000000000000000000087 :1089F0000000000000000000000000000000000077 -:108A00000000000000000000000000000000000066 +:108A0000000000000000000000000000FF0000FF68 :108A10000000000000000000000000000000000056 :108A20000000000000000000000000000000000046 -:108A300000003CFF3CFF00A030B000000000000040 -:108A4000000000000000000000000000BEBE00BEEC -:108A5000FF0F3C0C0000000000000000C0F0C3FF4E -:108A6000FF550F050000000000000000000000009E +:108A30000000000000000000000000000000000036 +:108A40000000000000000000000000000000000026 +:108A50000000000000000000000000000000000016 +:108A60000000000000000000000000000000000006 :108A700000000000000000000000000000000000F6 -:108A800000000000000000030011000200050004C7 -:108A9000000320040004000500082008200200084C -:108AA0000004200400020002000400080002000884 -:108AB00000080008A00800000002000400000004F4 -:108AC000418441830003001100000004000088007D -:108AD00000048800A0040000000000000000000264 -:108AE000100000000002880284041002001120001F -:108AF00000004000000088000000000000000000AE -:108B00002002898201800000000000400004000073 -:108B100000820000000040000008000200900000F9 -:108B20000000008200000000000000000082000041 -:108B300000000004000000020000000000084000E7 -:108B400000000404082000000040000000000002B3 -:108B50000004210000000000000000900000000060 -:108B60000000000020200000000000000002400083 -:108B700000000000100200000000000000000000E3 -:108B8000000000020404041000042004200000037C -:108B9000201120052000000500112004000400041D -:108BA0000008204000040010000000030000000442 -:108BB0009000000000000009000000040000000018 -:108BC0000000000010001100000000000000100074 +:108A8000000000008400C000000010000000000092 +:108A900010000000400000000000000000008800FE +:108AA0000000000088000000000020008800A000F6 +:108AB000880000000000000000000000000020000E +:108AC00000000000000320008800000020002000BB +:108AD00020002000000000008800040000000000CA +:108AE0002000000000002000000000002000200006 +:108AF0000000200000000000000020000000000036 +:108B000020000000000000840000000000000000C1 +:108B1000000200000000000000000502000000004C +:108B200000001000000010004000000000000000E5 +:108B30001000100200000000000000000000000013 +:108B4000000000000000000000000000000000081D +:108B500000020008000800A000000008000000005B +:108B600000200000000000000000000000000000E5 +:108B700000000000000000004000000000000000B5 +:108B800000000000000000000000000000000000E5 +:108B900000000000000000000000000000000000D5 +:108BA00000000000000000000000000000000000C5 +:108BB00000000000000000000000000000000000B5 +:108BC00000000000000000000000000000000000A5 :108BD0000000000000000000000000000000000095 -:108BE0000000000000410000000000000000000044 -:108BF0000000000000000000000000000000000075 -:108C000000000000000010004100008209840904F7 -:108C10000408000840080002008802100082008258 -:108C20000082000500050009008300040004000222 -:108C30000002008400020002000400880008000412 -:108C40000002000200028084C002000000020082D4 -:108C50000002000400820002400200020002000242 -:108C60000000000800080008008400080084008458 -:108C7000008400080084000000840010008200844A -:108C800000080002008400848000A08410210004F9 -:108C900000030010004120039008001004050005A7 -:108CA0000000001100029008402000200000000891 -:108CB000000000000009000000000020000000008B -:108CC00000000021900300000000000000002021AF -:108CD0000021040800210002840084408400000870 -:108CE000000800080021400000000000900000087B -:108CF0000008000000090000200000090000002119 -:108D00000008002100000008000084210008100075 -:108D100000000000000000400010008800880008EB -:108D20000000008200000008002100000001000097 -:108D30000000000800000008020000000800000415 -:108D400000000000000400A0000000840084000077 -:108D50000400000000000300000800000000000004 -:108D600000A0410000000000000000000000000022 -:108D70000082000000820000000200000084002049 -:108D800000000000000000000020000000080008B3 -:108D90008408000000000000000000000400000043 -:108DA00000000000002000000080000000800000A3 -:108DB00000000000000000000003000000000000B0 -:108DC000000000000000080008000000C0000804C7 -:108DD0000000000000000000000000000000100083 -:108DE000000008000000000000000000000000007B -:108DF0000000820000000000000000000000C00031 -:108E000000008400C000000000000000000000001E -:108E10000008000000C0000000000000000000008A -:108E2000000800000000000000000010000000200A -:108E3000000800000000000000000000000000002A +:108BE0000000000000000000000000000000000085 +:108BF0000000000000000000020000000000000073 +:108C000000000000000000000080000000000000E4 +:108C100000080000000000000000000000000084C8 +:108C20000000000000000000000000000000000044 +:108C30000002000000000000000000000000000032 +:108C4000000000000000000000000000000800001C +:108C500000000008000000080008000000000008F4 +:108C600000000000000000000000000000080000FC +:108C70000000000800000008000800840000000850 +:108C800000000000000000000000000800030000D9 +:108C90000021000000000000C003000000210011BE +:108CA0008805000000000000000501000008000029 +:108CB00000030000000000000003000000000000AE +:108CC0004000000000000000000500000000000857 +:108CD0000000000300050000000088030000000001 +:108CE00000008800000000000000000500080008E7 +:108CF0000000000300080000000000030000000066 +:108D00000000000000000000000000080004000057 +:108D10002000200204C00400000000000000000049 +:108D20000000000000000000000000002000000023 +:108D300000000000000000004100080011200000B9 +:108D4000000000000000008440000000002000003F +:108D50000000000000000000000000000000000013 +:108D60000000000000000000000000000000000003 +:108D700000000000000000000000000000000000F3 +:108D800000000000000000000000000000000001E2 +:108D90004000000000000000000082000000000011 +:108DA000C00000000000000040008200C0008400FD +:108DB0000800A0000000A0000000A0000000820049 +:108DC0008200A00000008200A000820000000000DD +:108DD0000000820082000000820082008200000009 +:108DE00040000000040000008200820082000000B9 +:108DF00082800000080000008200820082000000E3 +:108E0000000000000000000082000000820000005E +:108E1000000000A00000000000000000000000A012 +:108E20000000000000000000000000004100000001 +:108E30000000000000000000000000000000000032 :108E40000000000000000000000000000000000022 -:108E50000001000000080090000000000010000069 -:108E60000008008800000000000000000000000072 -:108E700000000000000000002000020000000000D0 -:108E800000000004000000000000000800000000D6 -:108E90000000000108000008A008080300200011DD -:108EA0008203C0110803001000000000000040030E -:108EB0000000002100080000000000000000000089 -:108EC00000000000000000000021900300000002EC -:108ED000000300080000000000080000000200007D -:108EE000000010000000000000000000000300006F -:108EF00000000003000000000020040084000000C7 -:108F0000C04008000002000000000021000800002E -:108F1000400082000021000000000000000000006E -:108F2000002000A000000000000000000900000078 -:108F300000000000000004000000000020000040CD -:108F400000400000009000000000049009000000B4 -:108F500000000000052000000000000000000000EC -:108F600011024084000403080000000000000020FB -:108F70004000000003841100000000000000000019 -:108F800000080000000008A004000000000000002D -:108F900000000000000000000003C00390008221D8 -:108FA0001000C000000000000000000008000000E9 -:108FB000002100410000000000000000000000004F -:108FC0000000000000000000000000000005880014 -:108FD0000008000800080000000000050000002153 -:108FE0000008000300000000000000000021000055 -:108FF000000000000000000000000000000000046D -:1090000000000000000010000000C0000008001078 -:10901000000000210021000000000000000000000E -:109020000000000000000000000000000000000040 -:109030000000000000000000000000000000000030 -:10904000000000000000000002000000000000001E -:10905000000000000000000000000000000000C050 -:1090600000000900000400000000001000000000E3 +:108E50000000000000000000000000000000000012 +:108E600000000000030000000000000000000000FF +:108E700000000004000000000000000000000000EE +:108E800000000000000008000000000000000000DA +:108E900000000000C000000200202020000084002C +:108EA000000000110000000388218800000300007A +:108EB0000000102082000000C00000080000000830 +:108EC0000000000000000008002100000000000079 +:108ED0000000000800000800A000000008000000DA +:108EE0000808000000080000000800210000000041 +:108EF0000800000001000800820000000800C00017 +:108F00000808000000000000000800030000000046 +:108F10000021000000000000000000C000000090E0 +:108F2000000400000000000000000000000000003D +:108F300000000000800000000000000000000000B1 +:108F400000000000000000820000008800A0400037 +:108F500000000000000100000000000000002108E7 +:108F60000000000000000000000000000000000001 +:108F700000000000000010000000000000000000E1 +:108F800000000000000000000000000000000000E1 +:108F9000000000000000000000008421000000002C +:108FA000000010000000000010000000000000029F +:108FB0000002C000002108000000080000050800B1 +:108FC000820040008208000008000000000000004D +:108FD0000000080000212000000000030000000540 +:108FE0000000080000000808002100000000000048 +:108FF00000210000000000210000C000000000056A +:109000000000080000000808000000000000000048 +:109010000021000008030021000000000000000003 +:10902000000000000000000000000000000005003B +:10903000050000000000000000000000000000002B +:109040000000000000000000000000000000000020 +:109050000000000000000000800000000000000090 +:109060000000000000000000000000000000000000 :1090700000000000000000000000000000000000F0 -:1090800000000000000004000000000000000000DC -:109090000000044000000000000000000000C100CB -:1090A0000001C1830100C0000140C083C001C101B3 -:1090B0000020C0820000C000010502000000000086 -:1090C000000000000000000000000104000100009A -:1090D0000020C0C001008800000000000001000066 -:1090E0000000000000000000000000000000000080 -:1090F0000000000000000000000000000000000070 -:1091000000000000000100001000000001840100C8 -:10911000C0000004C0820000C00000010000004147 -:10912000C1410041C1904141804141838803801089 -:10913000A00300008080004180410883800000007F -:1091400000000000000200000000000441000008D0 -:10915000020000008000410000000041000000000B -:1091600000000000000000000000000000000000FF -:1091700000000000000000000000000000000000EF -:10918000000000000000000800008000000903004B -:109190004102820000808080000080000003000007 -:1091A0004100034100C100004141854100410541AA -:1091B00040C10541008083804100C14100C1801051 -:1091C000000010000000000000001100000010006E -:1091D00009008280000004008000000000808003FD -:1091E000000000000000000000000000000000007F -:1091F000000000000000000000000000000000006F -:109200000000000003000000000000000900000052 -:109210000200090090800000030080000000008030 -:1092200080200000010100C10020000140010083F6 -:10923000000120C1C02100C083C02000400100C146 -:10924000820100000000000000000000000000009B -:1092500000000800100800000000080000000040A6 -:1092600004010000000000000000000000000000F9 -:1092700000000000000000000000000000000000EE -:1092800000000000000001000000002000000000BD -:109290000000000040001008000001000400000071 -:1092A00000C0820000400000C1400000000000003B -:1092B000C183408300820000C14000000000000024 -:1092C000C0000000000000000000000000000000DE -:1092D00000011101004000009100000000000000AA -:1092E000000000000000000000000000000000007E -:1092F000000000000000000000000000000000006E -:10930000000000000000000000000000000000005D -:10931000000000011001002000000100000000001A -:1093200000000000000000800041C1C120000000DA -:109330000041C190008300410041C1C10000000014 -:109340000021C041000000000000000000000000FB -:10935000000000058840008000004100000000007F -:1093600000000041000000000000000000000000BC -:1093700000000000000000000000000000000000ED -:1093800000000000000000000000000000002000BD -:1093900000000000001080400000000041000000BC -:1093A0000000000000410000C1C1800080200000DA -:1093B0004140804190C103C1C1C1808080C1000093 -:1093C00041410000808008030010800000C10000BF -:1093D00000040000C1000000008000000011000037 -:1093E0000041001000000803000000000000000021 -:1093F000000000000000000000000000000000006D -:1094000000000000000000000000000080000020BC -:1094100000000002000041000000008880000008F9 -:109420000000004100080000030340C1820040200A -:1094300000000000200105C101C1400502C040C17B -:1094400000000001000040C00108000020000040B2 -:109450000000000088000800000000C010000000AC -:1094600000000001000100000109000000000000F0 -:1094700000000000000000000000000000000000EC -:10948000000000000000000000000000000082005A -:109490000020000000008800880000000003200079 -:1094A0000001000000010000000000890000000031 -:1094B00000004842000000000000484260060060D2 -:1094C0000600484200000000000048420000000082 -:1094D000000000000000000000000082501200E0C8 -:1094E00007004142000000000000480000000000AA -:1094F000000000000000000000000000000000006C -:10950000000000000000000000000000000000005B -:1095100000000000000000000000000000008812B1 -:1095200000E0070048420000000000004842000040 +:1090800000000000000000000000000000000000E0 +:1090900000000000000000000000000000010001CE +:1090A000000100C00001400100C1000301000001F7 +:1090B000000800880001000100C10000000100015B +:1090C000000100C00001400100C100030000900148 +:1090D000000800200001000100C1000000000001A4 +:1090E0000001000100C00001000100C000030000F9 +:1090F0000001000800080001400100C1000000015B +:109100000001000100C00001000100C000030000D8 +:109110000001000800020001400100C10000004100 +:1091200000410041008500410041008320C1024010 +:1091300021410080000000410041009000000041FA +:1091400000410041008500410041008320C10040F2 +:109150000541008000000041004100900000000037 +:1091600000410041004100C00341004100C120C155 +:10917000004040410080000000418041009000001C +:1091800000410041004100C00541004100C120C133 +:10919000002040410080008000418041009000009C +:1091A0004100030000000080410085000000110024 +:1091B0008800828000908800C100C100000000008B +:1091C0004100030000000080410085000000040011 +:1091D0008800020000808300C100C1000000000080 +:1091E000000341000300000000804100C0000000B7 +:1091F0000900880002000080A0004100C1000010AA +:10920000800041000300000000804100C000000019 +:10921000090088000280008090004100C100001019 +:10922000800001000100000000C00100C00000003B +:109230000000090040100085C1900500C1000090A9 +:10924000200001000100000000C00100C00000007B +:109250000000050040C00004C1000500C1000090EE +:109260004000000001000100000000C00100C0003B +:1092700000000000050020C00004C0004100C10043 +:109280000091820001000100000000C00100C00048 +:1092900000000000050010080004C1004100C100EA +:1092A0000091820000C00001C0C100000000000168 +:1092B00000C110090091000100C100000000000180 +:1092C0000001000000C00001C0C10000000000015A +:1092D00000C110050091000100C100000000000164 +:1092E00000010000000000C00001C0C1000000003B +:1092F000000100C110830091000100C100000000C6 +:1093000000010001000000C00001C0C10000000019 +:10931000000100C110820091000100C100000000A6 +:109320000001000100000080004180C10000000039 +:109330000041009080830041004100C10000000016 +:109340000041001000000080004180C100000000CA +:109350000041009080820041004100C100000000F7 +:1093600000410010000000000080004180C10000AA +:1093700000000041009083820041004100C10000D4 +:1093800000000041001000000080004180C100008A +:1093900000000041009083C00041004100C1000076 +:1093A0000000004100100000C100800080C10000EA +:1093B0004108000341004100C141800080020000DB +:1093C0004100000080004100C100800080C1000019 +:1093D0004108000041004100C1410000800200003E +:1093E00041000000800041000000C100800080C1F9 +:1093F00000004100000305004100C141000080025F +:1094000000004100000080004100C100800080C1D8 +:1094100000004100000305004100C141000080023E +:1094200000004100000080004100C1004000C0C1B8 +:1094300000000100880002000100C1910400C00189 +:10944000000001000000C0000100C1004000C0C1D8 +:1094500000000100880002000100C1839000C001EB +:10946000000001000000C00001000000C100400039 +:10947000C0C100000100880003000100C18390000A +:10948000C001000001000000C0000100C100400058 +:10949000C0C100000100880003000100C1839000EA +:1094A000C000000001000000C0000100000000003A +:1094B000000000420000000000000000811200488F +:1094C000070048000000000000000000000000004D +:1094D000000000420000000000000000811200486F +:1094E000070048000000000000000000000000002D +:1094F0000000000000420000000000000000811297 +:1095000000480700480000000000000000000000C4 +:109510000000000000420000000000000000811276 +:1095200000480700480000000000000000000000A4 :10953000000000000000000000000000000000002B :10954000000000000000000000000000000000001B :10955000000000000000000000000000000000000B @@ -170383,446 +170383,446 @@ :10964000000000000000000000000000000000001A :10965000DEAE757B0000000000000000000000008E :1096600000000000000000000000000000000000FA -:10967000DEAE00000000000000000000000000005E +:10967000DEAE0000757B000000000000000000006E :1096800000000000000000000000000000000000DA -:1096900000000000757B00000000000000000000DA +:109690000000DEAE757B000000000000000000004E :1096A00000000000000000000000000000000000BA -:1096B0000000DEAE67E6434000000000000002311B -:1096C000E0000000000000000C400000000000006E -:1096D00002C267E66126034000000000000002307D -:1096E000A0000000000000000C400000000000008E -:1096F00002C06486000000000000000000000000BE -:109700000000000000000000000000000000000059 -:10971000000000000000612603400000000000007F -:109720000230A0000000000000000C40000000001B -:10973000000002C06486000888042005400302037C -:1097400000034005200200040002200488082002D3 -:10975000000220000002C040200820082004001160 -:10976000000020032004000090102008200320089F -:109770000011200008000003208220802088201192 -:109780000011000020022002000200022000200040 -:1097900020000004200000002000200020002009FC -:1097A000000000022000840288000004200440041D -:1097B000200000002000880000000000410400900C -:1097C00040000090000000040090000000820004AF -:1097D000008400C000000004000000000000004001 -:1097E000000200020002009000900000000400004F -:1097F00000000000000080000000000400040020C1 -:10980000000200020002000400000000000000004E -:109810000002000000000002000000000000000242 -:1098200000000000000000000000000000010083B4 -:1098300080010002400000024000000520020008F4 -:109840000005000500000003000820102000200093 -:109850000009000020050008000500052000200088 -:1098600020002000000000000000000000020000B6 -:10987000200000000000000009000000820000003D -:10988000000000001000000000000000880002003E -:109890000200020082000000000002000000000040 -:1098A00000000041000000000000100001800000E6 -:1098B0000000880000020000000000000002040810 -:1098C00004020904201004040004048200080008B3 -:1098D000048820820004009000840408000400042E -:1098E00000040002000400040004008200840084DC -:1098F00000028004000400020004C00800001104FB -:10990000044000040004000800C000080008000033 -:1099100000040002000000040000008400080000B1 -:109920000000000800000082000000A00088400243 -:1099300000080000200800000000000000024000B5 -:109940000202000900050009000908080011004191 -:1099500004400003000304039040000500000008D9 -:1099600040200009042188029021000800090440D9 -:10997000200002000121000000404008000000001B -:10998000040901200141051100110000C000000080 -:10999000020000080000000000001000000010405D -:1099A00000000000000000000000000000050009A9 -:1099B0002080000000000080000000000000000087 -:1099C0000000000000000088030408A021000084BB -:1099D00003020090002000000000000200200004AC -:1099E0000020000000040088008400822104009010 -:1099F0000000800000A020000000008400000000A3 -:109A000000000000048220002090000000400000C0 -:109A100000A000080000000000000000000000009E -:109A200008000000000000000000410000000000ED -:109A300000008002000011001104008400000000FA -:109A4000000082000000820008000000000000000A -:109A50000000000000000000000000000000000006 -:109A600000002003000000000000000000000000D3 -:109A700000000000000000000000000001000000E5 -:109A800001000000A020000000890000001100007B -:109A9000000000000040080000000000000010006E -:109AA0000000100084000000000020009000000072 -:109AB00000000200000000000000000000000000A4 -:109AC0000000000508840010008400C000820084AB -:109AD000000000000200000000000000000800007C +:1096B0000000DEAE60C603000000000000000031C4 +:1096C000E0000000000000000C00000000000000AE +:1096D00000C0630660C60300000000000000003107 +:1096E000E0000000000000000C000000000000008E +:1096F00000C06306000060C6030000000000000018 +:109700000031E0000000000000000C00000000003C +:10971000000000C0630660C60300000000000000F7 +:109720000031E0000000000000000C00000000001C +:10973000000000C063060000000000008800000078 +:1097400020000000000000002000000000000000D9 +:109750002000000000000000840000002000000045 +:1097600020800000000000002000000040000000F9 +:109770002000880000000001000000000000200020 +:109780000000200000000000000020000000200079 +:109790000000200000000000000000000000200089 +:1097A0008800200000000000400020000000200091 +:1097B0000000200000000000000000020000000087 +:1097C0000000000000001000400000000000000049 +:1097D0000000000000000000000000000000000089 +:1097E0000000004000000000000000000000000039 +:1097F0000000000000000000000000000000000069 +:109800000000000000000000000000004000000018 +:109810000000000000000000000000000000000048 +:1098200000000000000000000000000000004000F8 +:109830000000000005000000000000000000000023 +:109840000000000000000000000000000000000018 +:109850000000000000000000000000000000000008 +:1098600000000000000000000000000000000000F8 +:1098700000000000000000000000000000000000E8 +:1098800000000000000000000000000000000000D8 +:1098900000000000000000000000000000000000C8 +:1098A00000000000000000000000000000000000B8 +:1098B00000000000000000000000000000000000A8 +:1098C0000000000000000002008400000000000012 +:1098D0000000000000000000000000000000000088 +:1098E0000000000000000000000000000000000078 +:1098F0000000000000000000001000000000000058 +:109900000000000000000000000000000000000057 +:1099100000000000008800000000000000000000BF +:109920000000000000000000000000000000000037 +:109930000000000000000000000000000000002007 +:10994000000040410000008000000100A100000074 +:1099500000000000000000000000000800000000FF +:1099600000000000000000000000000001000000F6 +:109970000000000084000000000000100000000053 +:1099800000000000000000000000000000000000D7 +:1099900000000000000000000000000000100000B7 +:1099A00000000000000000000000000000000000B7 +:1099B0000000000000000000000000000010000097 +:1099C0000020049000000300000800202020040074 +:1099D0000000000000004100000000000000000046 +:1099E000000000000000080000000000000002006D +:1099F0000000000000000000000000000000000067 +:109A0000000000000000000008000000210000002D +:109A10001100000000000000000000000000000035 +:109A2000000000000000000008000300000000002B +:109A30000000000000000000000000C00000000066 +:109A40000000000000000000000000000080008016 +:109A50000180000000000000000000000000000085 +:109A60000000000000000000840000000000020070 +:109A70000100000000000000820000000000000063 +:109A80000000000000000000000082000000000054 +:109A90000000000000000000000082004000000004 +:109AA0000000000000000000A00082000000000094 +:109AB00000000000000000000000000000000000A6 +:109AC0000000000000000000000000000000000492 +:109AD0000020020400000000000000000000000060 :109AE0000000000000000000000000000000000076 -:109AF00000000000000000002104000400000440F9 -:109B00000000040000000001000000200000000030 -:109B1000000000000000000800000000000000003D +:109AF00080000400000000000000000000000000E2 +:109B00000000000000000000000000000000000055 +:109B10000000000000000000000000000000000045 :109B20000000000000000000000000000000000035 -:109B3000000000000800000000000000000000829B -:109B40000000000000000002000000030008000008 -:109B500000080000000000000000000800210000D4 -:109B6000001100400000000000000000000800009C -:109B700000040000200400A0004011000000044187 -:109B80000000042004100000008300110000040005 -:109B90000003000000000021000000000000000899 -:109BA00000000000000000008400820000000000AF -:109BB00000008200000082000000000000000000A1 -:109BC0000003000000050005000000002100000067 -:109BD000004005000388000400000000200005008C -:109BE00000040008210020880000000000000000A0 -:109BF0000008008400A00008000420822000022049 -:109C000080900400802180010000002000000000FE -:109C100080000000000000000000000000000000C4 -:109C2000000000000000000000A00008000000008C -:109C30000000000020000084000800000008000070 -:109C40000008009000000000000000000021C0009B -:109C50000010000500000005000300210021822102 -:109C6000001000000000000000000000000084035D -:109C70000000000000009000000000030008000049 -:109C8000000002000400008000000000000401A1A8 -:109C9000000401800011001100400040000000009D -:109CA00000000000000000000000000000000000B4 -:109CB00000000000000004004000C00000000000A0 -:109CC0000008000000000000000000000400000088 -:109CD000000000000008000000000000000000007C +:109B30000000000000000000000000000000000025 +:109B400000000000000000009000900090009100D4 +:109B500000000000100000000000000000000000F5 +:109B6000040000000000C0000000880000000000A9 +:109B700000000000000000000000000000000000E5 +:109B800000000000000000000000000000000000D5 +:109B900000000000000000000000000000000000C5 +:109BA00000000000000000000000000000000000B5 +:109BB00000000000000000000000000000000000A5 +:109BC0000000000000000000000000000000000095 +:109BD0000290080000A0800010880400080040885F +:109BE000000008000000000000000000000000006D +:109BF0000090080000A000042100080000000308F5 +:109C0000000008000000000000000000000000004C +:109C100000000090080000A0000000000800000004 +:109C20000300000008000000000000000000000029 +:109C300000000090080000A00000000008000300E1 +:109C40000300000008000000000000000000000009 +:109C500020000000000000000000000000090009D2 +:109C600000000000000000000000000000000000F4 +:109C700000000200000000000000000000000000E2 +:109C800000000000000000000000000000000800CC +:109C900000000000000000000000000000000000C4 +:109CA00000000000000000000800000000000000AC +:109CB00000000000000000000000000000000000A4 +:109CC0000000000000000000000000000000000094 +:109CD0000000000000000000000000000000000084 :109CE0000000000000000000000000000000000074 -:109CF00000000000000002080082000000000000D8 -:109D000000000000000080040002020000000001CA -:109D100020200001202000002000000000000000A2 +:109CF00000000000800000000000000000000000E4 +:109D00000000000000000000000000000000000053 +:109D10000000000000000000000000000000000043 :109D20000000000000000000000000000000000033 :109D30000000000000000000000000000000000023 :109D40000000000000000000000000000000000013 -:109D50000000000000000000000000000000000003 +:109D500000000000000001009088000000000000EA :109D600000000000000000000000000000000000F3 -:109D700000000000000000000000000000000100E2 +:109D70000000000000000000009000000000000053 :109D800000000000000000000000000000000000D3 -:109D90000408000002880009000000000000000024 +:109D900000000000000000000000000000000000C3 :109DA00000000000000000000000000000000000B3 :109DB00000000000000000000000000000000000A3 -:109DC000010005014100000100000000000000004A -:109DD0000000000000000000000000000000000083 +:109DC0000000000000000000000000000000000093 +:109DD00000000000000000001100A10000000000D1 :109DE0000000000000000000000000000000000073 -:109DF0000000000000000000000000000000000063 -:109E00000800000005000000110000000000000034 -:109E10000000888409099009008800000000000003 +:109DF00000000000000000000000008000000000E3 +:109E00000000000000000000000000000000000052 +:109E10000000000000000000000000000000000042 :109E20000000000000000000000000000000000032 :109E30000000000000000000000000000000000022 -:109E4000000040008308A000001000000000000097 -:109E50000000000000000000000000000000000002 +:109E40000000000000000000000000000000000012 +:109E50000000000000000000000000030980000373 :109E600000000000000000000000000000000000F2 :109E700000000000000000000000000000000000E2 -:109E80000000004000000041000010008800410078 -:109E900010000000840004211000000000000000F9 +:109E800000000000000000000000000000000000D2 +:109E900000000000000000000000000000000000C2 :109EA00000000000000000000000000000000000B2 :109EB00000000000000000000000000000000000A2 -:109EC00000000000008821002005000300000000C1 -:109ED0000000000000000000000000000000000082 -:109EE0000000000000000000000000000000000072 -:109EF0000000000000000000000000000000000062 -:109F0000000000000000000000000000000003024C -:109F10000000008800000984900089000000000013 +:109EC0000000000000000000000000000000000092 +:109ED000000000000000000000000000000001027F +:109EE00000000088000000000000000000000000EA +:109EF0000000000000000000000000000000002042 +:109F00000000002000000000000000000000000031 +:109F10000000000000000000000000000000000041 :109F20000000000000000000000000000000000031 :109F30000000000000000000000000000000000021 -:109F400000000000000000030100000000410000CC -:109F50000000000000000000000000000000000001 -:109F600000000000000000000000000000000000F1 +:109F40000000000000000000000000000000000011 +:109F50000000000000000000000000000000010000 +:109F60000888080000000000020000000000000057 :109F700000000000000000000000000000000000E1 -:109F80000000000000000000880000000100000048 -:109F90000000100000000000040800090091900477 +:109F8000000002900000000000000000000000003F +:109F900000000000000000000000000000000000C1 :109FA00000000000000000000000000000000000B1 :109FB00000000000000000000000000000000000A1 -:109FC0000000000000000000000010000001000080 +:109FC0000000000000000000000000000000000091 :109FD0000000000000000000000000000000000081 -:109FE0000000000000000000000000000000000071 +:109FE00041008080800041000000800000000000EF :109FF0000000000000000000000000000000000061 -:10A00000000000000000000000000000000041000F -:10A01000100900218010000000008084001003401F +:10A00000030000008080000000000000000000004D +:10A010000000000000000000000000000000000040 :10A020000000000000000000000000000000000030 :10A030000000000000000000000000000000000020 -:10A04000000000000000000000000011801010213E -:10A0500011100000000000000000000000000000DF -:10A0600000000000000000000000000000000000F0 +:10A040000000000000000000000000000000000010 +:10A050000000000000000000000000000000000000 +:10A060000000001108000080000000000000000057 :10A0700000000000000000000000000000000000E0 -:10A0800000000000000000000000000000000000D0 -:10A09000000000910084000000100000848585A06D -:10A0A000880009040000000000000000000000001B +:10A08000000000118000000000000000000000003F +:10A0900000000000000000000000000000000000C0 +:10A0A00000000000000000000000000000000000B0 :10A0B00000000000000000000000000000000000A0 -:10A0C00000000000000000000000000008800311F4 -:10A0D0000300054000000000000000000000000038 -:10A0E0000000000000000000000000000000000070 +:10A0C0000000000000000000000000000000000090 +:10A0D0000000000000000000000000000000000080 +:10A0E000000000000001000000400000000000002F :10A0F0000000000000000000000000000000000060 -:10A10000000000000000000000000000000000004F -:10A110000000000000C100100090000100000802D3 -:10A12000202109C08800000000000000000000009D +:10A1000000000000000120000088000000000000A6 +:10A11000000000000000000000000000000000003F +:10A12000000000000000000000000000000000002F :10A13000000000000000000000000000000000001F -:10A14000000000000000000000000000000001A06E -:10A1500000010100000000000000000000000000FD -:10A1600000000000000000000000000000000000EF +:10A14000000000000000000000000000000000000F +:10A1500000000000000000000000000000000000FF +:10A16000000000000000000000E007008200000086 :10A1700000000000000000000000000000000000DF -:10A1800000000000000000000000000000000000CF -:10A1900000E0000000060000000007004200000090 -:10A1A000000000E0070000000000000000000000C8 +:10A1800000000000000000000000070000000000C8 +:10A1900000000000000000000000000000000000BF +:10A1A00000000000000000000000000000000000AF :10A1B000000000000000000000000000000000009F :10A1C000000000000000000000000000000000008F -:10A1D000000000E00000000000000000000000009F -:10A1E000000000000000000000000000000000006F +:10A1D000000000000000000000000000000000007F +:10A1E000000000000000000000000000F0F000008F :10A1F000000000000000000000000000000000005F -:10A20000000000000000000000000000000000004E +:10A20000000000000000000000FF000000FF000050 :10A21000000000000000000000000000000000003E -:10A220000000F0FF3C3C80BCC1FD000000000000CD +:10A22000000000000000000000000000000000002E :10A23000000000000000000000000000000000001E :10A24000000000000000000000000000000000000E :10A2500000000000000000000000000000000000FE -:10A2600000000000000000000000000000000000EE +:10A260000000000000000000000000000000F0F00E :10A2700000000000000000000000000000000000DE -:10A2800000000000000000000000000000000000CE +:10A280000000000000000000000000FF000000FFD0 :10A2900000000000000000000000000000000000BE -:10A2A00000000000F0003C3C80BCC1FD000000004C +:10A2A00000000000000000000000000000000000AE :10A2B000000000000000000000000000000000009E :10A2C000000000000000000000000000000000008E :10A2D000000000000000000000000000000000007E -:10A2E000000000000000000000000000000000006E -:10A2F000000000000000000000000000000000005E -:10A30000000000000000000000000000000000004D -:10A31000000000000000000000000000000000003D -:10A320005F5F5F5F00000F0F5555CF8ECF8E00002F +:10A2E0000000000000000000000000000000FF006F +:10A2F0000000FFFF00000000000000000000000060 +:10A300000000000000000000000000000000FF004E +:10A310000000FFFF0000000000000000000000003F +:10A32000000000000000000000000000000000002D :10A33000000000000000000000000000000000001D :10A34000000000000000000000000000000000000D :10A3500000000000000000000000000000000000FD :10A3600000000000000000000000000000000000ED -:10A3700000000000000000000000000000000000DD +:10A37000FF000000000000000000000000000000DE :10A3800000000000000000000000000000000000CD -:10A3900000000000000000000000000000000000BD -:10A3A00000000A0A0A0A00000F0F3C3C4D0C4D0C3D +:10A39000FF000000000000000000000000000000BE +:10A3A00000000000000000000000000000000000AD :10A3B000000000000000000000000000000000009D :10A3C000000000000000000000000000000000008D :10A3D000000000000000000000000000000000007D :10A3E000000000000000000000000000000000006D -:10A3F000000000000000000000000000000000005D +:10A3F00005402A06054C00A80000000000000000EF :10A40000000000000000000000000000000000004C -:10A41000000000000000000000610007000D0000C7 -:10A4200005610A0E050D00A0000000610009000191 +:10A4100015002A00054000A8000000000000000010 +:10A42000000000000000000000000000000000002C :10A43000000000000000000000000000000000001C :10A44000000000000000000000000000000000000C -:10A450000000000000000000000000610007000D87 +:10A4500000000000000000000000000000000000FC :10A4600000000000000000000000000000000000EC -:10A4700000000000000000000000000000000000DC +:10A4700000000000FF00FFFF0000000000000000DF :10A4800000000000000000000000000000000000CC :10A4900000000000000000000000000000000000BC -:10A4A0000000000000003CF03CF000000F0F7D2891 -:10A4B000B2B2B2B2000000000000000000000000D4 +:10A4A00000000000000000000000000000000000AC +:10A4B000000000000000000000000000000000009C :10A4C000000000000000000000000000000000008C -:10A4D00000000000000000000000000029412900E9 -:10A4E000D000FF000000000000000000000000009D -:10A4F000000000000000000000000000000000005C +:10A4D000000000000000000000000000000000007C +:10A4E000000000000000000000000000000000006C +:10A4F000000000000000FF0000000000000000005D :10A50000000000000000000000000000000000004B :10A51000000000000000000000000000000000003B -:10A5200000000000000000003CF03CF000000F0FB5 -:10A530007D2830F330F30000000000000000000030 +:10A52000000000000000000000000000000000002B +:10A53000000000000000000000000000000000001B :10A54000000000000000000000000000000000000B -:10A5500000000000000000000000000000000141B9 -:10A560000100F000FF0000000000000000000000FB -:10A5700000000000000000000000000000000000DB +:10A5500000000000000000000000000000000000FB +:10A5600000000000000000000000000000000000EB +:10A5700000000000000000000000F0F000000000FB :10A5800000000000000000000000000000000000CB :10A5900000000000000000000000000000000000BB -:10A5A00000000000000000000000C0C008C800005B -:10A5B0003C3CFF0F0EFE0EFE0000000000000000FD +:10A5A00000000000000000000000000000000000AB +:10A5B000000000000000000000000000000000009B :10A5C000000000000000000000000000000000008B :10A5D000000000000000000000000000000000007B -:10A5E00000C300C3F0FAF0FA000000000000000011 -:10A5F000000000000000000000000000000000005B +:10A5E000000000000000000000000000000000006B +:10A5F000000000000000000000000000F0F000007B :10A60000000000000000000000000000000000004A :10A61000000000000000000000000000000000003A -:10A62000000000000000000000000000000008C85A -:10A6300000003C3C000F02F202F2000000000000AB +:10A62000000000000000000000000000000000002A +:10A63000000000000000000000000000000000001A :10A64000000000000000000000000000000000000A :10A6500000000000000000000000000000000000FA :10A6600000000000000000000000000000000000EA -:10A6700000008884880240058400840004110011D1 -:10A68000880220080008000320042002040820009B -:10A6900000032008200300020003200420110040D2 -:10A6A00020050002000200032005204020022111A5 -:10A6B000C008000320002004000200022000200443 -:10A6C0000040200000000000004000112040200257 -:10A6D000000202042000200000008800200020006A -:10A6E00000002000000000400000000000002040AA -:10A6F0000000200040040004000800020090000454 -:10A70000000200000090008200900090000800020B -:10A710000008009000900090009000904090004051 -:10A7200040904000009040080084009000050040E8 -:10A73000080000020000009000400004000000003B -:10A7400000020002000200020002000240000000BD -:10A7500000002000000200000002009000900000B5 -:10A7600000000002000240000000400200900000D3 -:10A77000000240400000000320102010200520109F -:10A7800020002010201088032005880088088400FD -:10A790000005200408000403200420002000820398 -:10A7A0002000200000000000000000000000000069 -:10A7B000020085008300000000000000020002008B -:10A7C00090002000200004000000000000000000B5 -:10A7D000000002000000000000080000000000006F -:10A7E00000000000000002000000020000008400E1 -:10A7F00000000000000202002002000802020482A1 -:10A800000902048204040082000204100308040206 -:10A8100020040282000200080084001000040004EA -:10A82000000280028004000400080004009000047C -:10A830000090008408020804000000040090000852 -:10A8400000080008800880840004000800040082DA -:10A8500000820000000000000090000200000002E2 -:10A860000004000800020040000000880000009082 -:10A870000000200000000008000004410004A004C3 -:10A880002009000390110021A00800219040000938 -:10A8900000218805C00040210020C00900110003EC -:10A8A000002000000040000800080421841100007E -:10A8B00000030421000200000002000090080420B0 -:10A8C00000050040004184040004840000000000F2 -:10A8D00088000020040000210008000000000000A3 -:10A8E000000000000400000800000000000000005C -:10A8F000000000000000900090000000001041A146 -:10A9000000410010004000840000108400C00004DA -:10A91000042000840388004008020040000000A0DA -:10A920000090000000000000000000000040000057 -:10A93000000400820020000000000084000000905D -:10A9400000000002000000000010000000000000F5 -:10A9500000000000000004000000000000000000F3 -:10A960000000000000000000000003000000008262 -:10A97000000000000000000000A0002000200402F1 -:10A98000000004009000040010000000000000001F -:10A9900000000000000000000800000008000000A7 +:10A67000000000000000000000000800880000004A +:10A6800000000000000000000000000000000000CA +:10A69000000000000000000000002000000000009A +:10A6A00000000000000000000000000000000000AA +:10A6B000000000000000000000000000200000007A +:10A6C000000000000000000000000000000000008A +:10A6D000000000000000000000000000000000007A +:10A6E000000000000000000000000000000000006A +:10A6F0000000000021000000000000000000000039 +:10A700000000000000004000000000000000000009 +:10A710000000000000000000000000000000000039 +:10A720000000000000000000000200000000000027 +:10A730000000000000000000000000000000000019 +:10A740000000000000000000000000000000000009 +:10A7500000000002000040000000000000000000B7 +:10A7600000000000000000000000000000000000E9 +:10A770004000000000000000000000000000000099 +:10A7800000000000000000000000000000000000C9 +:10A7900000000000000000000000000000000000B9 +:10A7A00000000000000000000000000000000000A9 +:10A7B0000000000002000000000000000000000097 +:10A7C0000000000000000000000000000000000089 +:10A7D0000000000000000200000000000000000077 +:10A7E0000000000000000000000000000000000069 +:10A7F0000000000000000210000000000000000047 +:10A800000000000000000000000000000000000048 +:10A810000000000000000000000000000000000038 +:10A820000000000000000000000000000000000028 +:10A830000000000000000000000000000000000018 +:10A840000000000000000000000000000000000008 +:10A8500000000000000000000000000000000000F8 +:10A8600000000000000000000000000000000000E8 +:10A8700000000000000000000000002000000000B8 +:10A880000000000082000400000000000000000042 +:10A8900000000000000000000000000000000000B8 +:10A8A000000000000800000000000000000004009C +:10A8B0000000040004000000000000000000000090 +:10A8C0000000000000000000000000000000000088 +:10A8D0000000100000000000000000000000000068 +:10A8E0000000000000000000000000000000000068 +:10A8F0000000000000000000000000000004000054 +:10A900000000000000000000000000000000000047 +:10A910000000000000000000000005000000200012 +:10A920000000110000000000000004000000000012 +:10A930000000000000000000000000000000000017 +:10A940000000000000000000000000000000000007 +:10A9500000000000000000000000000000000000F7 +:10A9600000000000000000000000000000000000E7 +:10A9700000000000000000000000000000000000D7 +:10A9800000000000000000000000000000000000C7 +:10A9900000000000000000000000000000000000B7 :10A9A00000000000000000000000000000000000A7 -:10A9B000000000000000000008000080000000000F -:10A9C000000000000000000000090000000000007E -:10A9D000000000000000080000000000040000006B +:10A9B0000000000000000000000000000000000097 +:10A9C0000000000000000000000000000000000087 +:10A9D0000000000000000000000000000000000077 :10A9E0000000000000000000000000000000000067 :10A9F0000000000000000000000000000000000057 -:10AA000000840000008200000008009000000000A8 -:10AA1000008400000000000000000300000000A00F -:10AA20000000000000000000000000A00000000086 -:10AA30000000000000000000000080004010000046 -:10AA40000000000000000000000000C00000000046 +:10AA00000000000000000000000000000000000046 +:10AA10000000000000000000000000000000000036 +:10AA20000000000000000000000000000000000026 +:10AA30000000000000000000000000000000000016 +:10AA40000000000000000000000000000000000006 :10AA500000000000000000000000000000000000F6 -:10AA600008000000000000000000000000000000DE +:10AA600000000000000000000000000000000000E6 :10AA700000000000000000000000000000000000D6 -:10AA8000000400210005000501400002001000083C -:10AA9000004000000000080000020000100000005C -:10AAA0000000002000000008000000000008000076 -:10AAB0000002080000410021000800000000000919 -:10AAC00000050000880000000405000000030400E9 -:10AAD000000800000000000200000020000000004C +:10AA800000000000000000000000000000000000C6 +:10AA900000000000000000000000000000000000B6 +:10AAA00000000000000000000000000000000000A6 +:10AAB0000000000000000000000000000000000096 +:10AAC0000000000000000000000000000000000086 +:10AAD0000000000000000000000000000000000076 :10AAE0000000000000000000000000000000000066 :10AAF0000000000000000000000000000000000056 -:10AB00000000001000880000000020080000002065 -:10AB1000000200900000020000000200000409840E -:10AB2000000000000040000000000008000800A035 -:10AB30000000040000000004008404002000000263 -:10AB400040000004000040901102098809881100AB -:10AB500000000000400000000000000000000000B5 -:10AB600000000000000000000000000000000008DD -:10AB70000000000000000000008405040020200008 -:10AB8000000000000000000300030000A0030021FB -:10AB90000008000500210000000500210010000849 -:10ABA0000003000000030003000800000000000094 -:10ABB0000000000000000003002100080000000069 -:10ABC0000000002100000000000040000000012102 -:10ABD0000000000000050000000000000008000068 +:10AB000000000000000402C000C000C002000000FD +:10AB10000004008400900088000000000000000095 +:10AB20000000000000000900000000000800000014 +:10AB30000000008400000000000000000000000091 +:10AB400000000000000000000000000000000800FD +:10AB500000000000002000000000000000000000D5 +:10AB600000000000000000000000000000000800DD +:10AB700000000000000000000000000000000000D5 +:10AB800000000000000000000000000000000000C5 +:10AB900000000000000000000000000000020000B3 +:10ABA00000000000000000000000000000000000A5 +:10ABB0000000000000000000000000000002000093 +:10ABC0000000000000000000000000000000000085 +:10ABD0000000000000000000000000000000000075 :10ABE0000000000000000000000000000000000065 :10ABF0000000000000000000000000000000000055 -:10AC000000000040000000000008000000000000FC -:10AC10000000000003000000000000000020000011 +:10AC00000000000000000000000000000000000044 +:10AC10000000000000000000000000000000000034 :10AC20000000000000000000000000000000000024 -:10AC3000000008000000000000000000000000000C -:10AC40000000000000000000000000008000000084 -:10AC500002A0000000100000000000000000000042 +:10AC3000000000000000000000000000000005000F +:10AC40000000000000000000000000000000000004 +:10AC500000000000000000000000000000000000F4 :10AC600000000000000000000000000000000000E4 :10AC700000000000000000000000000000000000D4 :10AC800000000000000000000000000000000000C4 :10AC900000000000000000000000000000000000B4 :10ACA00000000000000000000000000000000000A4 -:10ACB000000001000000880000000000000000000B -:10ACC0000000012000200088080200000011008917 -:10ACD000000800820000100040000000000000009A +:10ACB0000000000000000000000000000000000094 +:10ACC0000000000000000000000000000000000084 +:10ACD0000000000000000000000000000000000074 :10ACE0000000000000000000000000000000000064 :10ACF0000000000000000000000000000000000054 :10AD00000000000000000000000000000000000043 -:10AD100040000000000000000000000000000000F3 +:10AD10000000000000000000000000000000000033 :10AD20000000000000000000000000000000000023 -:10AD300000000000200211210004001000000000AB -:10AD40000000000021000080000080800000002042 -:10AD50000002008000101104C020801000030000D9 +:10AD30000000000000000000000000000000000013 +:10AD40000000000000000000000000000000000003 +:10AD500000000000000000000000000000000000F3 :10AD600000000000000000000000000000000000E3 :10AD700000000000000000000000000000000000D3 -:10AD800000000000000000000000000000000004BF -:10AD900000000004000000000000000000000000AF +:10AD800000000000000000000000000000000000C3 +:10AD900000000000000000000000000000000000B3 :10ADA00000000000000000000000000000000000A3 -:10ADB000000000000000080009000200214100001E -:10ADC0000000000000000000000080800000000083 -:10ADD0000080004100900040020083000900210330 +:10ADB0000000000000000000000000000000000093 +:10ADC0000000000000000000000000000000000083 +:10ADD0000000000000000000000000000000000073 :10ADE0000000000000000000000000000000000063 :10ADF0000000000000000000000000000000000053 :10AE00000000000000000000000000000000000042 -:10AE10000001000000000000000000000000000031 +:10AE10000000000000000000000000000000000032 :10AE20000000000000000000000000000000000022 -:10AE3000000000000000000001020000000001010D -:10AE4000000000000000000000000200A0A00000C0 -:10AE50000000004000110011000100A0020090005D -:10AE60009101000000000000000000000000000050 +:10AE30000000000000000000000000000000000012 +:10AE40000000000000000000000000000000000002 +:10AE500000000000000000000000000000000000F2 +:10AE600000000000000000000000000000000000E2 :10AE700000000000000000000000000000000000D2 :10AE800000000000000000000000000000000000C2 -:10AE900000000000100000000000000000000000A2 +:10AE900000000000000000000000000000000000B2 :10AEA00000000000000000000000000000000000A2 -:10AEB000000000000000000000000001010000018F -:10AEC0000000000000000000000002000010000070 -:10AED0001010000040000000A0000200000100016E -:10AEE00091000000000000000000000000000000D1 +:10AEB0000000000000000000000000000000000092 +:10AEC0000000000000000000000000000000000082 +:10AED0000000000000000000000000000000000072 +:10AEE0000000000000000000000000000000000062 :10AEF0000000000000000000000000000000000052 :10AF00000000000000000000000000000000000041 -:10AF10000000000000000000000009000000000028 +:10AF10000000000000000000000000000000000031 :10AF20000000000000000000000000000000000021 -:10AF300000000000000000000000000000080340C6 -:10AF400011400402000000000000000000000000AA -:10AF500000008000000080000000000000000020D1 -:10AF6000050805112003000000000000000000009B +:10AF30000000000000000000000000000000000011 +:10AF40000000000000000000000000000000000001 +:10AF500000000000000000000000000000000000F1 +:10AF600000000000000000000000000000000000E1 :10AF700000000000000000000000000000000000D1 :10AF800000000000000000000000000000000000C1 :10AF900000000000000000000000000000000000B1 :10AFA00000000000000000000000000000000000A1 -:10AFB00000000000000000000000000000002180F0 -:10AFC00009004000401100000000000000000000E7 -:10AFD000000000000000000021102100900002008D -:10AFE00021830200418021080000000000000000D1 +:10AFB0000000000000000000000000000000000091 +:10AFC0000000000000000000000000000000000081 +:10AFD0000000000000000000000000000000000071 +:10AFE0000000000000000000000000000000000061 :10AFF0000000000000000000000000000000000051 :10B000000000000000000000000000000000000040 :10B010000000000000000000000000000000000030 :10B020000000000000000000000000000000000020 :10B030000000000000000000000000000000000010 -:10B0400001080000000001000000000000000000F6 -:10B05000000000A004C0C0000000C10010000800F3 -:10B06000900001400088000801010000000000007D +:10B040000000000000000000000000000000000000 +:10B0500000000000000000000000000000000000F0 +:10B0600000000000000000000000000000000000E0 :10B0700000000000000000000000000000000000D0 :10B0800000000000000000000000000000000000C0 -:10B0900000000000000000000000000000E00000D0 +:10B0900000000000000000000000000000000000B0 :10B0A00000000000000000000000000000000000A0 :10B0B0000000000000000000000000000000000090 -:10B0C0000000000000E0000000120000000000008E +:10B0C0000000000000000000000000000000000080 :10B0D0000000000000000000000000000000000070 -:10B0E00000004100000000E000000000000000003F +:10B0E0000000000000000000000000000000000060 :10B0F0000000000000000000000000000000000050 :10B10000000000000000000000000000000000003F :10B11000000000000000000000000000000000002F :10B12000000000000000000000000000000000001F :10B13000000000000000000000000000000000000F :10B1400000000000000000000000000000000000FF -:10B15000000000007C7C7C7C00000F0F00000006DB -:10B1600000040000000000000000000000000000DB +:10B1500000000000000000000000000000000000EF +:10B1600000000000000000000000000000000000DF :10B1700000000000000000000000000000000000CF :10B1800000000000000000000000000000000000BF :10B1900000000000000000000000000000000000AF :10B1A000000000000000000000000000000000009F :10B1B000000000000000000000000000000000008F :10B1C000000000000000000000000000000000007F -:10B1D0000000000000007C7C7C7C0000000000007F -:10B1E000000200000000000000000000000000005D +:10B1D000000000000000000000000000000000006F +:10B1E000000000000000000000000000000000005F :10B1F000000000000000000000000000000000004F :10B20000000000000000000000000000000000003E :10B21000000000000000000000000000000000002E @@ -170837,399 +170837,399 @@ :10B2A000000000000000000000000000000000009E :10B2B000000000000000000000000000000000008E :10B2C000000000000000000000000000000000007E -:10B2D00000000000000000000000F800FE00090F60 -:10B2E000090F0000900010000000000000000000A6 -:10B2F0000000000600000000000000000000000048 +:10B2D000000000000000000000000000000000006E +:10B2E000000000000000000000000000000000005E +:10B2F000000000000000000000000000000000004E :10B30000000000000000000000000000000000003D :10B31000000000000000000000000000000000002D :10B32000000000000000000000000000000000001D :10B33000000000000000000000000000000000000D :10B3400000000000000000000000000000000000FD -:10B35000000000000000000000000000F8F8FEFE01 -:10B3600009090909000000001000000000000000A9 -:10B3700000000600000000000000000000000000C7 +:10B3500000000000000000000000000000000000ED +:10B3600000000000000000000000000000000000DD +:10B3700000000000000000000000000000000000CD :10B3800000000000000000000000000000000000BD :10B3900000000000000000000000000000000000AD -:10B3A00000000000000000610007000D0000000028 +:10B3A000000000000000000000000000000000009D :10B3B000000000000000000000000000000000008D -:10B3C000000000000000000000000000000000611C -:10B3D0000004000500000000000000000000000064 -:10B3E000000000100000000000613006000D0000A9 -:10B3F00000610004000500000000000000000000E3 +:10B3C000000000000000000000000000000000007D +:10B3D000000000000000000000000000000000006D +:10B3E000000000000000000000000000000000005D +:10B3F000000000000000000000000000000000004D :10B40000000000000000000000000000000000003C :10B41000000000000000000000000000000000002C :10B42000000000000000000000000000000000001C :10B43000000000000000000000000000000000000C :10B4400000000000000000000000000000000000FC -:10B4500000FF007CF0C05040000000000000000031 -:10B46000000000000000000000003CCBFFCB00000B -:10B4700000007C3CFCFCD7D7D70700000000000090 +:10B4500000000000000000000000000000000000EC +:10B4600000000000000000000000000000000000DC +:10B4700000000000000000000000000000000000CC :10B4800000000000000000000000000000000000BC :10B4900000000000000000000000000000000000AC :10B4A000000000000000000000000000000000009C :10B4B000000000000000000000000000000000008C :10B4C000000000000000000000000000000000007C -:10B4D000000000FF0050F0C0F0C0000000000000BD -:10B4E0000000000000000000000000003CFBFFFB2B -:10B4F000000000005000F0F000000000000000001C +:10B4D000000000000000000000000000000000006C +:10B4E000000000000000000000000000000000005C +:10B4F000000000000000000000000000000000004C :10B50000000000000000000000000000000000003B :10B51000000000000000000000000000000000002B :10B52000000000000000000000000000000000001B :10B53000000000000000000000000000000000000B :10B5400000000000000000000000000000000000FB -:10B55000000000007F7D00001F0F100000000000B1 -:10B560000000000000000000000000000000FFC319 -:10B570003C00000000001014303C8F2F80200000A1 +:10B5500000000000000000000000000000000000EB +:10B5600000000000000000000000000000000000DB +:10B5700000000000000000000000000000000000CB :10B5800000000000000000000000000000000000BB :10B5900000000000000000000000000000000000AB :10B5A000000000000000000000000000000000009B :10B5B000000000000000000000000000000000008B :10B5C000000000000000000000000000000000007B -:10B5D0000000000000005F5500000F0F0000000099 +:10B5D000000000000000000000000000000000006B :10B5E000000000000000000000000000000000005B -:10B5F000FFC33C00000000005055F0FF0F0F00009B +:10B5F000000000000000000000000000000000004B :10B60000000000000000000000000000000000003A :10B61000000000000000000000000000000000002A :10B62000000000000000000000000000000000001A -:10B6300088038804040484100408400402110202F0 -:10B6400020110004880420050003000320082002C4 -:10B650000083840240202041000400030003000313 -:10B660000040880420028804000200042011200504 -:10B670000003A008A002A0400002A011000490084E -:10B680000000000388008802201100000040200212 -:10B690002091200020022000840020024040000071 -:10B6A0000011000020002000208000000000200089 -:10B6B00000000000000000000000008400900082F4 -:10B6C0000000008208000002008210000004000256 -:10B6D00000900020008220010082009000900090E5 -:10B6E000000200C00002009000900004000800006A -:10B6F00000C00000000200030090000000041102DE -:10B700000002110000000002009000020000000092 -:10B710000000000400000090000200020000102061 -:10B720000004100200000002004000100000400071 -:10B730000000000020082009200300032009000861 -:10B74000200540058800200820110400200020006A -:10B750008804000000000800040508002000200004 -:10B7600020000404000000000000020800000000A7 -:10B770000000000000004000400000004000000009 -:10B7800002000000020000000400000000000200AF -:10B7900002000000020000000200000000000200A1 -:10B7A000000000000000000002000000080000008F -:10B7B0000200000082000410048809020404090445 -:10B7C0000910040204080002048400080908048423 -:10B7D0000908008409042004800880048084000291 -:10B7E0000084000000080090008200880082009021 -:10B7F00000820004000400008000808200048004B5 -:10B800000008000800040008000400080000001000 -:10B81000000200020008000000080008000000000C -:10B820000010000200840008000000840000800076 -:10B83000000000000010000890090005000300202F -:10B8400088110421881000024008900400020000C2 -:10B850000040841140050008C021041000030411B9 -:10B860000002880004089000880890210040000928 -:10B8700000080020880800090000200001082000BE -:10B880000000200004000000002000000000000074 -:10B8900000000000000000000000000000030000A5 -:10B8A0000000000000080008000000000000000088 -:10B8B000000000000000000800000040000400003C -:10B8C000008400820002004000100010000200A06E -:10B8D00000820008008800040082000000A00090A0 -:10B8E000002000A01108000000040820000000C093 -:10B8F000082000000000002000200000800040829E -:10B90000800004820002000200020000000000A08B -:10B9100000000000000000A000A0000800000000DF -:10B92000000000000000000008000000000000000F -:10B93000000000000000000000000020A00000083F -:10B940001000820000000809820082000000000050 -:10B95000002000110000002000000020002008004E -:10B9600000200400000000000000080000000000AB +:10B630000000000200000000000200000000000006 +:10B6400000000000000000000000000000000000FA +:10B6500000000000000000000000000000000000EA +:10B6600000000000000000000000000000000000DA +:10B6700000010000000000000000000000000000C9 +:10B6800000000000000000000000000000000000BA +:10B6900000000000000000000000000000000000AA +:10B6A000000000000000000000000000000000009A +:10B6B0000000100200000000000000000000000078 +:10B6C0000000000200000000000000000000000078 +:10B6D0000000000000000000100000020000000256 +:10B6E000000000000000000000000000000000005A +:10B6F000000000000000400000000000000000000A +:10B700000000000000000000000000000000000039 +:10B7100000000000400000004000000000000000A9 +:10B7200000000000000000000000000000004000D9 +:10B730000000000000000000000000000000020007 +:10B7400000000000000000000000000000000000F9 +:10B7500000000000000000000000000000000000E9 +:10B7600000000000020000000000000000000000D7 +:10B7700000000000000000000000000000000000C9 +:10B7800000000000000000000000000000000000B9 +:10B7900000000000000000000000000000000000A9 +:10B7A0000000000000000000000000000000000099 +:10B7B0000000000000000000000000000002000087 +:10B7C0000000000000000000000000000000000079 +:10B7D0000000000000000000000000000000000069 +:10B7E0000000000000000000000000000000000059 +:10B7F0000000000000000000000000000000000049 +:10B800000000000000000000000000000000000038 +:10B810000000000000000000000000000000000028 +:10B820000000000000000000000000000000000018 +:10B8300000000000000000000000000040000000C8 +:10B84000000000000400000000000000000088006C +:10B8500000000000000000000000000000000000E8 +:10B860000080000000000100040000000000000053 +:10B8700000000000000000000000000000000000C8 +:10B8800000000000000000000000000000000000B8 +:10B8900000000000000000000000000000000000A8 +:10B8A0000000000000000000000000000000000098 +:10B8B0000000000000000000000000000000000088 +:10B8C0000000000000000000000000000000000078 +:10B8D000090000000000000000000000000000005F +:10B8E0000000000800000000200000000000000030 +:10B8F0000000000000000000000000000000000048 +:10B900000000000000000000000000000000000037 +:10B910000000000000000000000000000000000027 +:10B920000000000000000000000000000000000017 +:10B930000000000000000000000000000000000007 +:10B9400000000000000000000000000000000000F7 +:10B9500000000000000000000000000000000000E7 +:10B9600000000100000000000100000000000000D5 :10B9700000000000000000000000000000000000C7 -:10B98000084008040000000400000011000000202E -:10B99000080000400000000000000000000000005F +:10B9800000000000000000000000000000000000B7 +:10B9900000000000000000000000000000000000A7 :10B9A0000000000000000000000000000000000097 -:10B9B000000000000041000000000000080000C07E -:10B9C000090021A008000000040000000800000099 -:10B9D0000000020000000000000000000000000164 -:10B9E00000000000000800880000000000000000C7 +:10B9B0000000000000000000000000000000000087 +:10B9C0000000000000000000000000000000000077 +:10B9D0000000000000000000000000000000000067 +:10B9E0000000000004000000000020000000000033 :10B9F0000000000000000000000000000000000047 :10BA00000000000000000000000000000000000036 -:10BA1000000000000800000000000000000000001E -:10BA200000000300000000001000000000001000F3 +:10BA10000000000000000000000000000000000026 +:10BA20000000000000000000000000000000000016 :10BA30000000000000000000000000000000000006 -:10BA4000002000212021000800040003000900401C -:10BA50000021000000090041000304000002000072 -:10BA60000000000000040040000000400020000929 +:10BA400000000000000000000000000000000000F6 +:10BA500000000000000000000000000000000000E6 +:10BA600001000400002000000000000000000000B1 :10BA700000000000000000000000000000000000C6 -:10BA8000000000000100012000800002000200020E -:10BA90000000000000008400000000000000000022 -:10BAA000000000000000000000000008000000008E +:10BA800000000000000000000000000000000000B6 +:10BA900000000000000000000000000000000000A6 +:10BAA0000000000000000000000000000000000096 :10BAB0000000000000000000000000000000000086 -:10BAC000000000A0009000000900000020200000FD -:10BAD000000000000020000009404000002000009D -:10BAE00011000084400402000000000000840000F7 -:10BAF00000A0000002000000000000900000000014 -:10BB00000082000040042004208208040008200075 -:10BB100020022000000004000000000000000000DF +:10BAC0000000000000000000000000000000000076 +:10BAD0000000040000000020000000000000000042 +:10BAE0000000020000000001002000000000000033 +:10BAF0000000000000000000000000000000000046 +:10BB00000000000000000000000000000000000035 +:10BB10000000000000000000000000000000000025 :10BB20000000000000000000000000000000000015 -:10BB300000000000000000000000000000000020E5 -:10BB400000200000000000080008000300000005BD -:10BB500000000003000000030000000000000000DF -:10BB600000000000000000000008000000080000C5 -:10BB7000002100000000000800000000000000009C -:10BB80000000820000000000000000000000000033 -:10BB90000000000000200000000000000000000085 +:10BB30000000000000000000000000000000000005 +:10BB400000000000000000000000000000000000F5 +:10BB500000000000000000000000000000000000E5 +:10BB600000000000000000000000000000000000D5 +:10BB700000000000000000000009000000000000BC +:10BB800000000000000000000000000000000000B5 +:10BB900000000000000000000000000000000000A5 :10BBA0000000000000000000000000000000000095 :10BBB0000000000000000000000000000000000085 -:10BBC000000000000000028200820000410000002E -:10BBD0004100000000000000000000000000000024 +:10BBC0000000000000000000000000000000000075 +:10BBD0000000000000000000000000000000000065 :10BBE0000000000000000000000000000000000055 :10BBF0000000000000000000000000000000000045 :10BC00000000000000000000000000000000000034 -:10BC100000000000004000002000000000000000C4 +:10BC10000000000000000000000000000000000024 :10BC20000000000000000000000000000000000014 :10BC30000000000000000000000000000000000004 :10BC400000000000000000000000000000000000F4 :10BC500000000000000000000000000000000000E4 -:10BC600000000000000000008808029000080002A8 -:10BC700000000000000000000000000000000000C4 -:10BC8000000000000000000000000001A00183018E +:10BC60000000000000000000000090200000000024 +:10BC700001000000000000000000000000000000C3 +:10BC800000000000000000000000000000000000B4 :10BC900000000000000000000000000000000000A4 :10BCA0000000000000000000000000000000000094 :10BCB0000000000000000000000000000000000084 :10BCC0000000000000000000000000000000000074 :10BCD0000000000000000000000000000000000064 -:10BCE0000000000000000000000000800000008054 -:10BCF0000000000000000000000000000000000044 -:10BD00000000000000000000000000001110A11061 -:10BD1000820300100000000000000000000000008E +:10BCE00000000000000000000000110080000000C3 +:10BCF0000000110021000000000000000000000012 +:10BD00000000000000000000000000000000000033 +:10BD10000000000000000000000000000000000023 :10BD20000000000000000000000000000000000013 -:10BD300000000000000000000000000008000000FB +:10BD30000000000000000000000000000000000003 :10BD400000000000000000000000000000000000F3 :10BD500000000000000000000000000000000000E3 -:10BD6000000000000000000000000000800000084B -:10BD700080008000000000000000000000000000C3 -:10BD8000000000000000000000000000000011089A -:10BD90004000110809000000000000000000000041 +:10BD60000000000000000000000000000000008053 +:10BD70000000008000C109000009008000000000F0 +:10BD800000000000000000000000000000000000B3 +:10BD900000000000000000000000000000000000A3 :10BDA0000000000000000000000000000000000093 :10BDB0000000000000000000000000000000000083 -:10BDC00000008000000000000000000000000000F3 +:10BDC0000000000000000000000000000000000073 :10BDD0000000000000000000000000000000000063 -:10BDE000000000000000000000000000000008004B -:10BDF0009001080082000000000000000000000028 +:10BDE0000000000000000000000000000000000053 +:10BDF0000020000000C000030100000000880000D7 :10BE00000000000000000000000000000000000032 -:10BE10000188010000000000000000000000000098 +:10BE10000000000000000000000000000000000022 :10BE20000000000000000000000000000000000012 :10BE30000000000000000000000000000000000002 -:10BE40002000000040000000000000000000000092 +:10BE400000000000000000000000000000000000F2 :10BE500000000000000000000000000000000000E2 :10BE600000000000000000000000000000000000D2 -:10BE70009020008800888210000000000000000070 +:10BE70000100008888000100000088000000010027 :10BE800000000000000000000000000000000000B2 -:10BE9000000000002100A1010000000000000000DF +:10BE900000000000000000000000000000000000A2 :10BEA0000000000000000000000000000000000092 -:10BEB0000100000000000000000000000000000081 +:10BEB0000000000000000000000000000000000082 :10BEC0000000000000000000000000000000000072 :10BED0000000000000000000000000000000000062 :10BEE0000000000000000000000000000000000052 -:10BEF0000000800000800000808000000000000042 -:10BF00000000000000000000000000000000000031 -:10BF10000000000000048841A0080805000000009F +:10BEF0000000410000800000090000000000000078 +:10BF000041000000000000000000000000000000F0 +:10BF10000000000000000000000000000000000021 :10BF20000000000000000000000000000000000011 -:10BF300000001000000000000000000000000000F1 +:10BF30000000000000000000000000000000000001 :10BF400000000000000000000000000000000000F1 :10BF500000000000000000000000000000000000E1 :10BF600000000000000000000000000000000000D1 -:10BF70000000000080048004008000000000000039 +:10BF7000000000000011000000800000000000111F :10BF800000000000000000000000000000000000B1 -:10BF90000000000000000008000000001111000077 +:10BF900000000000000000000000000000000000A1 :10BFA0000000000000000000000000000000000091 :10BFB0000000000000000000000000000000000081 :10BFC0000000000000000000000000000000000071 :10BFD0000000000000000000000000000000000061 :10BFE0000000000000000000000000000000000051 -:10BFF0000000000000001001A0048890080000006C -:10C000000000000000000000000000000000000030 -:10C01000000000000000000000840000000000009C +:10BFF0000000000000000001000000400000000000 +:10C00000000100000000000000000000000000002F +:10C010000000000000000000000000000000000020 :10C020000000000000000000000000000000000010 :10C030000000000000000000000000000000000000 -:10C0400000000000000000000000001000000000E0 +:10C0400000000000000000000000000000000000F0 :10C0500000000000000000000000000000000000E0 :10C0600000000000000000000000000000000000D0 -:10C070000000000000000000008100000700000038 -:10C0800000000000000000000000000000000000B0 -:10C0900000000000000000000000000000E00000C0 +:10C070000000000000000000000000000700822116 +:10C08000000000E00000814100000000000000000E +:10C0900000000000000000000000000000000000A0 :10C0A0000000000000000000000000000000000090 -:10C0B0000000600000E00000000000000000000040 +:10C0B0000000000000000000000000000000000080 :10C0C0000000000000000000000000000000000070 :10C0D0000000000000000000000000000000000060 :10C0E0000000000000000000000000000000000050 -:10C0F00000000000000000000000C3CFFFFFF3C3FA -:10C10000FBEB000000000000000000000000000049 +:10C0F0000000000000000000000000000000F0F060 +:10C10000000000000000000000000000000000002F :10C11000000000000000000000000000000000001F :10C12000000000000000000000000000000000000F :10C1300000000000000000000000000000000000FF :10C1400000000000000000000000000000000000EF :10C1500000000000000000000000000000000000DF :10C1600000000000000000000000000000000000CF -:10C17000000000000000000000000000C3CFC3CF9B -:10C18000F3C3FBEB00000000000000000000000013 +:10C1700000000000000000000000000000000000BF +:10C18000F0F00000000000000000000000000000CF :10C19000000000000000000000000000000000009F :10C1A000000000000000000000000000000000008F :10C1B000000000000000000000000000000000007F :10C1C000000000000000000000000000000000006F :10C1D000000000000000000000000000000000005F :10C1E000000000000000000000000000000000004F -:10C1F0000000000000000000000000000000FDFF43 -:10C20000FFFFFFFFF7FF000000000000000000003C +:10C1F000000000000000000000000000000000003F +:10C20000FF000000FFFF0000000000000000000031 :10C21000000000000000000000000000000000001E :10C22000000000000000000000000000000000000E :10C2300000000000000000000000000000000000FE :10C2400000000000000000000000000000000000EE -:10C2500000000000553C553C0000000000000000BC +:10C2500000000000000000000000000000000000DE :10C2600000000000000000000000000000000000CE :10C2700000000000000000000000000000000000BE -:10C28000080000000800000000000000000000009E +:10C280000000FF00000000000000000000000000AF :10C29000000000000000000000000000000000009E :10C2A000000000000000000000000000000000008E :10C2B000000000000000000000000000000000007E :10C2C000000000000000000000000000000000006E -:10C2D000000000000000553C553C0000000000003C +:10C2D000000000000000000000000000000000005E :10C2E000000000000000000000000000000000004E :10C2F000000000000000000000000000000000003E -:10C30000000000000020000000010000000000000C +:10C30000000005002A00054000A800400006000CBF :10C31000000000000000000000000000000000001D -:10C320000000000000610007000D00000000000098 -:10C330000000000000000000000000000061000696 -:10C34000800D000000000000000000000000000060 +:10C32000000000000000000000000000000000000D +:10C3300000000000000000000000000000000000FD +:10C3400000000000000000000000000000000000ED :10C3500000000000000000000000000000000000DD :10C3600000000000000000000000000000000000CD :10C3700000000000000000000000000000000000BD -:10C3800000000000000000000000000000000000AD -:10C39000000000000000000000000000000000009D -:10C3A000000000000000141414140000F3510000F9 +:10C380000000000000000000000000000000555503 +:10C39000FFFF00000000000000000000000000009F +:10C3A000000000000000000000000000000000008D :10C3B000000000000000000000000000000000007D :10C3C000000000000000000000000000000000006D :10C3D000000000000000000000000000000000005D :10C3E000000000000000000000000000000000004D :10C3F000000000000000000000000000000000003D :10C40000000000000000000000000000000000002C -:10C41000000000000000000000000000000000001C -:10C42000000000000000000014141414F351F35134 +:10C410005555000000000000000000000000000072 +:10C42000000000000000000000000000000000000C :10C4300000000000000000000000000000000000FC :10C4400000000000000000000000000000000000EC :10C4500000000000000000000000000000000000DC :10C4600000000000000000000000000000000000CC :10C4700000000000000000000000000000000000BC :10C4800000000000000000000000000000000000AC -:10C49000000000000000000000000000000000009C -:10C4A0000000000000000000000000C2C2C28FFFB8 -:10C4B0008FF00000000000000000000000000000FD +:10C4900000000000F0F000000000000000000000BC +:10C4A000000000000000000000000000000000008C +:10C4B000000000000000000000000000000000007C :10C4C000000000000000000000000000000000006C :10C4D000000000000000000000000000000000005C :10C4E000000000000000000000000000000000004C :10C4F000000000000000000000000000000000003C :10C50000000000000000000000000000000000002B -:10C51000000000000000000000000000000000001B -:10C5200000000000000000000000000000FAFAFA1D -:10C53000DFFFDFF00000000000000000000000004E +:10C51000000000000000F0F000000000000000003B +:10C52000000000000000000000000000000000000B +:10C5300000000000000000000000000000000000FB :10C5400000000000000000000000000000000000EB :10C5500000000000000000000000000000000000DB -:10C560000000000000000000000000004010020277 -:10C570000402200220008841840484080011001174 -:10C5800020110008000520112011000500110011E4 -:10C590000005200320050005000400030003000837 -:10C5A0002003000500112004000500030000000323 -:10C5B00000114000000420110000000000020002F1 -:10C5C000004120020011000020028400000300004E -:10C5D000000320000000000084000000001184001F -:10C5E000000020008408000020002000000000005F -:10C5F0000000000000040004408200C00090000021 -:10C6000000000082000040020084408240C000829E -:10C6100040020004000200900002400200900084EA -:10C6200000900804009000C000020000109000007C -:10C6300000020002000240820000100200020040DE -:10C6400000400002000000400002000000000090D6 -:10C650004002000240C00000000000024002400210 -:10C660000000000000000002009000020002000034 -:10C670008803200520030008040320102003200461 -:10C680002010200040008400880888000404200254 -:10C69000200020002011880004002000000020005D -:10C6A0000000000000000000000000000200020086 -:10C6B0000000000000000200000000000000000078 -:10C6C0000400000000000000000000000000000066 +:10C5600000000000000000000000000010000000BB +:10C570002000000000020000200000000002000077 +:10C58000000000400000000000000000000000006B +:10C59000200000000000000020000000000000005B +:10C5A000000000000000000000000000000000008B +:10C5B000000020000000000000002000000000003B +:10C5C000000000000000000000000000000000006B +:10C5D000000020000000000000002000000000001B +:10C5E000000000000000000000000000000000004B +:10C5F00040000002000200000002000000000000F5 +:10C600000000000200000000000200000020000006 +:10C6100000000000000400020002004000020000D0 +:10C6200000000000000000000000000000400000CA +:10C6300000000000000010000002000000000000E8 +:10C6400040000000000000000000000000000000AA +:10C6500000000000000000000000100000000000CA +:10C6600000000000000000000000000000000000CA +:10C6700000000000000000000000000000000000BA +:10C6800000000000000000000000000000000000AA +:10C69000000000000000000000000000000000009A +:10C6A000000000000000000000000000000000008A +:10C6B000000000000000000000000000000000007A +:10C6C000000000000000000000000000000000006A :10C6D000000000000000000000000000000000005A -:10C6E0000000000000000000000000000000020048 -:10C6F0000200040209040204401009020002098435 -:10C7000004020402020804022084041000820008CB -:10C710000088000800000082008400080482209045 -:10C7200000040090000200900002008400820004D7 -:10C730000002000000040084000020020008000045 -:10C74000008200040010000400000000000000044B -:10C75000000800000000000000000000008400004D -:10C7600000100000000000000000000000000008B1 -:10C7700000080000002100040011001100119021A8 -:10C7800002049011000820402000882090401040B2 -:10C790008803000888110209880084038809881129 -:10C7A00002089008000002094005044088090411AD -:10C7B0004000100000008409400002000011004009 -:10C7C00000008840900000000003000000400400CA -:10C7D00000080000000004000000000004008800C1 -:10C7E000000000000000000000000000020010082F -:10C7F000000000000000004000900088000000825F -:10C800000088000800A000A010A000880002090411 -:10C81000002000200088402000400020000000028E -:10C820000488000000200020009000900088100084 -:10C830000008000000400000000000880000000028 -:10C84000000000A00308000400040004000400002D -:10C8500000040000000000000000000000000000D4 -:10C8600008000000000000000000000000000000C0 -:10C8700000000040000000000000A0204009A009C6 -:10C880000200020000200000000000020000102052 -:10C890000000002000000000000000000020002038 +:10C6E0000210000000000000000000000000000038 +:10C6F000000000000000000000000000000000003A +:10C700000000000000000000000000000000000029 +:10C710000000000000000000000000000000000019 +:10C720000000000000000000000000000000000009 +:10C7300000000000000000000000000000000000F9 +:10C7400000000000000000000000000000000000E9 +:10C7500000000000000000000000000000000000D9 +:10C7600000000000000000000000000000000000C9 +:10C770000000000020000400000000000000000095 +:10C780000000200000000000000000000000000089 +:10C790000000000000000000000000000000000099 +:10C7A0000000000000000000000000000000000089 +:10C7B0000000000000000000000000000000000079 +:10C7C0000000000000000000000000000000000069 +:10C7D0000000000000000000000000000000000059 +:10C7E0000000000000000000000000000000000049 +:10C7F0000000000000000000000000000000000039 +:10C800000000000000000000000000000000000028 +:10C810000500000000000000000000000000000013 +:10C820000000000000000000000000000000000008 +:10C8300000000000000000000000000000000000F8 +:10C8400000000000000000000000000000000000E8 +:10C8500000000000000000000000000000000000D8 +:10C8600000000000000000000000000000000000C8 +:10C8700000000000000000000000000000000000B8 +:10C8800000000000000000000000000000000000A8 +:10C890000000000000000000000000000000000098 :10C8A0000000000000000000000000000000000088 -:10C8B0000000000008000000000000000000000070 -:10C8C0000000000400000020001100000000000033 -:10C8D000000900000000000000000000000000004F +:10C8B0000000000000000000000000000000000078 +:10C8C0000000000000000000000000000000000068 +:10C8D0000000000000000000000000000000000058 :10C8E0000000000000000000000000000000000048 -:10C8F00000000000000000000000080840900082D6 -:10C900000482008800020282030000820384038400 -:10C9100003000800000040000000000004000000C8 -:10C9200000080000000000000000000000000000FF +:10C8F0000000000000000000000000000000000038 +:10C900000000000000000000000000000000000027 +:10C910000000000000000000000000000000000017 +:10C920000000000000000000000000000000000007 :10C9300000000000000000000000000000000000F7 :10C9400000000000000000000000000000000000E7 :10C9500000000000000000000000000000000000D7 :10C9600000000000000000000000000000000000C7 -:10C9700000000000000000000000000000090005A9 -:10C98000000800050008000800100000004000102A -:10C990000008004000000000000000400000000807 -:10C9A0000000000000000000001100000000000076 +:10C9700000000000000000000000000000000000B7 +:10C9800000000000000000000000000000000000A7 +:10C990000000000000000000000000000000000097 +:10C9A0000000000000000000000000000000000087 :10C9B0000000000000000000000000000000000077 :10C9C0000000000000000000000000000000000067 -:10C9D0000000000000000003000000000000000054 -:10C9E0000000000000200000000000000000000027 +:10C9D0000000000000000000000000000000000057 +:10C9E0000000000000000000000000000000000047 :10C9F0000000000000000000000000000000000037 -:10CA00001010200040002000400000000402000040 -:10CA100000880400000400001100008800020400E7 -:10CA200000A0200000040240000400002090000844 -:10CA30000002000040002040200000000000000034 -:10CA400009000000000402A0000000000000000037 -:10CA500000000000000000000000000009000000CD +:10CA00000000000000000000000000000000000026 +:10CA10000000040000000000000000000000000012 +:10CA200000000000008400000000008400000000FE +:10CA300000000000000000000000000000000000F6 +:10CA400000000000000000000000000000000000E6 +:10CA500000000000000000000000000000000000D6 :10CA600000000000000000000000000000000000C6 :10CA700000000000000000000000000000000000B6 -:10CA80000005000300110021002100030000000345 -:10CA9000000000000000000000000008002100006D -:10CAA0000000000000000000000000000000000086 -:10CAB000000000000000000000000000000800006E +:10CA800000000000000000000000000000000000A6 +:10CA90000000000000000000000000000000000096 +:10CAA0000000000000000000000000000000000284 +:10CAB0000000000000020000000000000000000074 :10CAC0000000000000000000000000000000000066 :10CAD0000000000000000000000000000000000056 :10CAE0000000000000000000000000000000000046 :10CAF0000000000000000000000000000000000036 -:10CB0000000000040000000003840000000000009A -:10CB10000082000000000000000000000040000053 -:10CB2000000000C000000000000000400000000005 +:10CB00000000000000000000000000000000000025 +:10CB10000000000000000000000000000000000015 +:10CB20000000000000000000000000000000000005 :10CB300000000000000000000000000000000000F5 :10CB400000000000000000000000000000000000E5 -:10CB500004000000000000000000000000000000D1 +:10CB500000000000000000000000000000000000D5 :10CB600000000000000000000000000000000000C5 :10CB700000000000000000000000000000000000B5 :10CB800000000000000000000000000000000000A5 @@ -171329,104 +171329,104 @@ :10D1600000000000000000000000000000000000BF :10D1700000000000000000000000000000000000AF :10D18000000000000000000000000000000000009F -:10D190000000000000000000000000002005020464 -:10D1A00040048811200340118808C00400110008C1 -:10D1B0002040000288028403201100102011000387 -:10D1C00020022011204120418841200488040004CD -:10D1D00020110011000400412000880400012004F7 -:10D1E0000002200820112011200220022008200027 -:10D1F000000020020002000200112008200020028E -:10D20000000020002000200020002000200020003E -:10D2100000002000000000000000200320000002A9 -:10D2200000080010000000000000000000840082E0 -:10D230000082218200840082000200C0008200047B -:10D2400041900082008400900040000200400008ED -:10D250000040004041020002000400C000820000C3 -:10D26000000200040090004000400090089000027E -:10D27000000200C000900040410041001040410009 -:10D28000000000000002400000004040000000409C -:10D290000000000000000200000240000002000246 -:10D2A000C0092010200920034008C00920092003DC -:10D2B00020088800820520002000880804052041FD -:10D2C000820020008821880002008400000088007D -:10D2D000000000000000020000000000000002004A -:10D2E000000000000000000000000200000000003C -:10D2F000000000000000000000000200000000002C +:10D19000000000000000000000000000001100007E +:10D1A000200220000002000000002000000000001B +:10D1B00020002000000020002000000000000000EF +:10D1C00020002000000000000000200000000000FF +:10D1D00020002000000020002000000000000000CF +:10D1E00000002000200000000000000020000000DF +:10D1F00000002000200000002000200000000000AF +:10D2000000002000200000000000000020000000BE +:10D21000000020002000000020002000000000028C +:10D220000002000000000000000200020000009068 +:10D2300000000000000000020000000000000000EC +:10D2400000000000000000000000000000000000DE +:10D25000400000000000000000000000000000008E +:10D2600000000000000000000000000000000000BE +:10D27000400000004000000000000000000000002E +:10D28000000000000000000000004000000000005E +:10D29000000000000000000000000000000000008E +:10D2A00000000000000484000000000000000000F6 +:10D2B000000000000000000000000000000000006E +:10D2C000000000000000000000000000000000005E +:10D2D000000000000000000000000000000000004E +:10D2E000000000000000000000000000000000003E +:10D2F000000000000000000000000000000000002E :10D30000000000000000000000000000000000001D -:10D31000004000100000000082000000000000003B -:10D320000000040404020902400409040902040282 -:10D330000902020220020502030804842084000876 -:10D3400005080008000800080410000400082090E8 -:10D3500000024090008200024108208220040082E6 -:10D3600000900000009000900004000841000008B8 -:10D370000008000000900090000400080000000079 -:10D38000000002000008000000040008000000087F -:10D390000008400800000000000002040000000037 -:10D3A00000080000400000218802002100209008B1 -:10D3B000020940089040104088110205200300092E -:10D3C000022104034020102090211040042020203E -:10D3D00002081021880088080008021102091011B3 -:10D3E00000000421000040004000400004208200B2 -:10D3F000200000000040000000200000900002001B -:10D4000000000000000004000000042100000000F3 -:10D410000000000000000400000000080000000000 -:10D420000000000000000000008240081188000495 -:10D430000084001000040084008800080040404080 -:10D440000004009002A0000000400040000200889C -:10D4500000020040000400880404008200021090D2 -:10D460000002000400200000000200A00000009064 -:10D4700000900000200000880000000000A00000D4 -:10D480000000000000000400000000000000002078 -:10D4900000000090000000000000000000000000FC -:10D4A0000000000000000000C005820484020402A5 -:10D4B00040114004C00040008420002002200402EB -:10D4C00000030040821182208202004000400000E0 -:10D4D0000000001100000400040000000000000033 -:10D4E000100000000000000000000000000000002C +:10D31000000000000000000000000000000000000D +:10D3200000000000000000000004000000000000F9 +:10D3300000020000000400000002000000000004E1 +:10D3400000000000000000000000000000000000DD +:10D3500000000000000000000000000000000000CD +:10D3600000000000000000000000000000000000BD +:10D3700000000000000000000000000000000000AD +:10D38000000000000000000000000000000000009D +:10D39000000000000000000000000000000000008D +:10D3A000000000000000000040000000000000003D +:10D3B000000000000000000000000000000000006D +:10D3C000000000000000000000000000000000005D +:10D3D000000000000000000000000000000000004D +:10D3E000000000000000000000000000000000003D +:10D3F000000000000000000000000000000000002D +:10D40000000000000000000000000000000000001C +:10D41000000000000000000000000000000000000C +:10D4200000000000000000000000000000200000DC +:10D4300000000000000000000400002000000000C8 +:10D4400000000000000000000000000000000000DC +:10D4500000000000000000000000000000000000CC +:10D4600000000000000000000000000000000000BC +:10D4700000000000000000000000000000000000AC +:10D48000000000000000000000000000000000009C +:10D49000000000000000000000000000000000008C +:10D4A000000000000000000000000000000000007C +:10D4B000000000000000000000000000000000006C +:10D4C000000000000000000000000000000000005C +:10D4D000000000000000000000000000000000004C +:10D4E000000000000000000000000000000000003C :10D4F000000000000000000000000000000000002C -:10D50000000000000000000000000000000000001B +:10D500000000000000000000000000000000000813 :10D51000000000000000000000000000000000000B -:10D5200000000000000000000008030809C011848A -:10D53000000004C021A010A004820300418203085F -:10D54000038200000400000000000000040020002E -:10D5500002000000000000000000000000000000C9 -:10D5600000000000000000000000000000080000B3 -:10D5700020000000210000002000000000400040CA -:10D58000004000000000000000000000000000005B +:10D5200000000000000000000000000000000000FB +:10D5300000000000000000000000000000000000EB +:10D5400000000000000000000000000000000000DB +:10D5500000000000000000000000000000000000CB +:10D5600000000000000000000000000000000000BB +:10D5700000000000000000000000000000000000AB +:10D58000000000000000000000000000000000009B :10D59000000000000000000000000000000000008B -:10D5A0000000000000000000000000000009000969 -:10D5B0000000200000030000A00000000021000087 -:10D5C00000030009000800050003002000090021F5 -:10D5D000001100080003000000000000000000002F -:10D5E0000000002100000004000000000000000016 +:10D5A000000000000000000000000000000000007B +:10D5B000000000000000000000000000000000006B +:10D5C000000000000000000000000000000000005B +:10D5D000000000000000000000000000000000004B +:10D5E000000000000000000000000000000000003B :10D5F000000000000000000000000000000000002B :10D60000000000000000000000000000000000001A :10D61000000000000000000000000000000000000A :10D6200000000000000000000000000000000000FA -:10D63000208420008090040000880002029000886E -:10D640000000408840900004118200001140090051 -:10D65000200000884000090009A04090110200024B -:10D66000100004020900000040200000100000002B -:10D670000000000200880500000004000000020411 -:10D680000000000000000000000002000000000098 -:10D69000000000000000000000000000000010007A +:10D6300000000000000000000000000000000000EA +:10D6400000000000000000000000000000000000DA +:10D6500000000000000000000000000000000000CA +:10D6600000000000000000000000000000000000BA +:10D6700000000000000000000000000000000000AA +:10D68000000000000000000000000000000000009A +:10D69000000000000000000000000000000000008A :10D6A000000000000000000000000000000000007A -:10D6B000400510000421000800210003000500219E -:10D6C00000000021001000000005000000000041E3 -:10D6D0000005000300000000002100000000000021 +:10D6B000000000000000000000000000000000006A +:10D6C000000000000000000000000000000000005A +:10D6D00000000000000000000000000000800000CA :10D6E000000000000000000000000000000000003A -:10D6F0000000020000000000000000000000000028 +:10D6F000000000000000000000000000000000002A :10D700000000000000000000000000000000000019 :10D710000000000000000000000000000000000009 :10D7200000000000000000000000000000000000F9 -:10D730000000090040000000210021000800000056 -:10D7400000000082004010000000000020000002E5 -:10D750000000000009000000000000200020000080 +:10D7300000000000000000000000000000000000E9 +:10D7400000000000000000000000000000000000D9 +:10D7500000000000000000000000000000000010B9 :10D7600000000000000000000000000000000000B9 -:10D770000000000003000004000000002000110071 -:10D7800000000000200000400204054000000000EE +:10D77000050000000000000000000500000000009F +:10D780000000000000000000000000000000000099 :10D790000000000000000000000000000000000089 -:10D7A0000000000000000000000000400000000039 +:10D7A0000000000000000000000000000000000079 :10D7B0000000000000000000000000000000000069 :10D7C0000000000000000000000000000000000059 :10D7D0000000000000000000000000000000000049 @@ -171468,7 +171468,7 @@ :10DA10000000000000000000000000000000000006 :10DA200000000000000000000000000000000000F6 :10DA300000000000000000000000000000000000E6 -:10DA400000000000090000000000000000000000CD +:10DA400000000000000000000000000000000000D6 :10DA500000000000000000000000000000000000C6 :10DA600000000000000000000000000000000000B6 :10DA700000000000000000000000000000000000A6 @@ -171476,7 +171476,7 @@ :10DA90000000000000000000000000000000000086 :10DAA0000000000000000000000000000000000076 :10DAB0000000000000000000000000000000000066 -:10DAC0000040000000000000000000000000000016 +:10DAC0000000000000000000000000000000000056 :10DAD0000000000000000000000000000000000046 :10DAE0000000000000000000000000000000000036 :10DAF0000000000000000000000000000000000026 @@ -171484,7 +171484,7 @@ :10DB10000000000000000000000000000000000005 :10DB200000000000000000000000000000000000F5 :10DB300000000000000000000000000000000000E5 -:10DB400000000001000000000000000000000000D4 +:10DB400000000000000000000000000000000000D5 :10DB500000000000000000000000000000000000C5 :10DB600000000000000000000000000000000000B5 :10DB700000000000000000000000000000000000A5 @@ -171492,7 +171492,7 @@ :10DB90000000000000000000000000000000000085 :10DBA0000000000000000000000000000000000075 :10DBB0000000000000000000000000000000000065 -:10DBC00000000000810000E00000000000000000F4 +:10DBC0000000000000000000000000000000000055 :10DBD0000000000000000000000000000000000045 :10DBE0000000000000000000000000000000000035 :10DBF0000000000000000000000000000000000025 @@ -171532,8 +171532,8 @@ :10DE10000000000000000000000000000000000002 :10DE200000000000000000000000000000000000F2 :10DE300000000000000000000000000000000000E2 -:10DE40000000000000000000000000000000006171 -:10DE50000006800D0000000000000000000000002F +:10DE400000000000000000000000000000000000D2 +:10DE500000000000000000000000000000000000C2 :10DE600000000000000000000000000000000000B2 :10DE700000000000000000000000000000000000A2 :10DE80000000000000000000000000000000000092 @@ -171573,194 +171573,194 @@ :10E0A0000000000000000000000000000000000070 :10E0B0000000000000000000000000000000000060 :10E0C0000000000000000000000000000000000050 -:10E0D0000000000000000000840500022011000282 -:10E0E0008804880220054002C004840484020411CC -:10E0F0000041200200402004000800052000000428 -:10E100002004200420050011880320051002881136 -:10E1100000112011000400110002004000112041F4 -:10E12000000321052082208488822082208220838F -:10E1300020020002200088040002000000082000E5 -:10E1400000042000200320002000200020002000E8 -:10E15000200000002000208000800002408805840C -:10E160004090400240824190410400024182009070 -:10E1700000820004008441C0008200C0000000044E -:10E1800000084002000200901102009000C040040C -:10E1900041C0000200C0009000C00000409010820A -:10E1A0000090009020840004000400044104000456 -:10E1B00040040090000000C010C010900002000257 -:10E1C0000002009010000002009000020000000019 -:10E1D00000400002400011400010101020082003F1 -:10E1E0000404200904102004021020000200200270 -:10E1F0004010200020008200400004008808020037 -:10E2000004088800880084000221840020000000A7 -:10E2100000050000010004000000200000000000D4 -:10E2200000000200000000000200000002000000E8 -:10E2300001000000000000000000000000000000DD -:10E24000000000000000000000000000004000008E -:10E2500000000000000000000400010000000404B1 -:10E2600004044102090440080208050409080408DE -:10E2700002080208020809020508A00809080204A9 -:10E2800004020990000204080208000200080008C5 -:10E2900000080008000808880208000802080000BA -:10E2A000000800040008000200080008020200083C -:10E2B000000804080008040800000208000800081C -:10E2C00000840000000800000008000800000008AA -:10E2D00000080008000800080084800808080008FA -:10E2E00000100003900890050003400900208841B9 -:10E2F00088114021900984058808201110400409E4 -:10E30000401190082011C003880240021000024012 -:10E310001040044004002040040010208811000038 -:10E3200000000400900904400400002110000000D7 -:10E3300001110209900990049004100840000000A7 -:10E3400000001002000000040000000000000000B7 -:10E350000000102100000000000000008800000004 -:10E3600000000004030800842188088400A000083D -:10E37000000400020000009002A000041088009039 -:10E3800000A0008240880500040200880088008800 -:10E39000050200900090400040900040008800027C -:10E3A00004A000000488009000900088000400028F -:10E3B000020004000940214000004100000000006C +:10E0D00000000000000000000000000220002002FC +:10E0E000200220002002200000002000200020004C +:10E0F0000000200020002000000000002000200080 +:10E10000200020002000200001002080200020842A +:10E1100000802000200020000001000000002000FE +:10E12000200020002000200020000000200020000F +:10E13000200000002000200020000000000020003F +:10E1400020002000200020002000000020002000EF +:10E15000200000002000200020000002000000003D +:10E16000000021000002000000000000000000008C +:10E17000000000000000000010000000000000008F +:10E180000000000000000002000002000004000285 +:10E190000004000800000000000000004000000033 +:10E1A000000000000000000000000002000000006D +:10E1B000000000000000000000020000000000005D +:10E1C000000000000000000000000000000000004F +:10E1D00000000000000000000000000020002000FF +:10E1E0008400880000000000000010000000000013 +:10E1F000000000000000000000000000000000001F +:10E20000000000000000000000000000000000000E +:10E21000200020000000000000000040000000007E +:10E2200000000000000000000000000000000000EE +:10E2300000000000000000000000000002100000CC +:10E2400000000000000000000000000010000000BE +:10E2500000000000000000000000000008400084F2 +:10E260000084400040080082400409044008000483 +:10E270000002000000040008000200040002000088 +:10E280000000000000840000000000000004000006 +:10E290000008890080000008000000000002000063 +:10E2A000000000000000000000000000000000006E +:10E2B000000000080000000800080000000000083E +:10E2C000000000000000000000000000000000004E +:10E2D000000000080000000800080000000000081E +:10E2E000000000000000000200000000000000210B +:10E2F00000030008000000000000000000000021F2 +:10E3000000000000000000000000000000000021EC +:10E3100000000000000001080000000000000108EB +:10E3200000000000000000000000000000000000ED +:10E3300000000000000000000000000000000000DD +:10E3400000000000000000000000000000000000CD +:10E3500000000000000000000000000000000000BD +:10E3600000000000000000000004000000000000A9 +:10E37000000000000000000000000000000000009D +:10E38000000000000000000000000000000000008D +:10E390000000000000000000040000000000000079 +:10E3A000200000000000000000000000000000004D +:10E3B000000000000000000000000000000000005D :10E3C000000000000000000000000000000000004D :10E3D000000000000000000000000000000000003D -:10E3E0000000000082090002824004404040C0203A -:10E3F000102004098202002008208202022000006E -:10E400000020001108200002004004040000000069 -:10E4100000110800000000000800000000000000DB -:10E420000200A00000000002000000119040000463 -:10E430000000A01001040004000000000011000012 +:10E3E000000000000000000000000000000000002D +:10E3F000000000000000000000000000000000001D +:10E400000000000000000000C0000000000000004C +:10E41000000000000080008000800100000000007B +:10E4200001000000000000000000000000000000EB +:10E4300000000000000000000000000000000000DC :10E4400000000000000000000000000000000000CC :10E4500000000000000000000000000000000000BC -:10E4600000000810020021C04100008240A041A02D -:10E47000400020C021102182209003842000400011 -:10E48000030003024000000000002104020002001B -:10E490000900210000000000000000000000000052 -:10E4A0000000040010000000000100000000000057 -:10E4B0000000000000010800000100000000000052 -:10E4C000000010000000000000000000000000003C -:10E4D0000000000000000000090000000000000033 -:10E4E0000000000080010000C005A021A002000380 -:10E4F000000200410003000300210003002100206E -:10E500001021000200000020002000400000000058 -:10E5100000000000000800110000000000000000E2 -:10E5200000000000000000000000004000000000AB -:10E5300000008800080000204000000000000020CB -:10E54000008000000000000000000000000000004B -:10E5500000000000000000000000000004000000B7 -:10E560000000000040000000400000882090009063 -:10E570000002009000040002110200880504090254 -:10E580001040000000040204119000000004090281 -:10E590001188400000A04000108805000002110012 -:10E5A00011001000094000001100000000000000F0 -:10E5B000000000401020800000014000000000002A -:10E5C0000000000400000000000000000000000047 -:10E5D0000000000000000400000000000000000037 -:10E5E0000000000000000000000000001003020511 -:10E5F00000412008A0210003000500218205000041 -:10E600000003000000050000020300050021004097 -:10E6100010000021000000000000000000000000C9 -:10E6200000000800000000000000000000000000E2 -:10E630008400820000000380A000000000000011A0 -:10E64000000000890104000000000000000000003C -:10E6500000000000000000000000000000000000BA -:10E6600002000000020000000000010000000000A5 -:10E6700005041104110011002100000041400800B0 -:10E68000110009000500110000000000004000001A +:10E4600000000000000000000000000000000000AC +:10E47000000000000000000000000000000000009C +:10E48000000000000000000000000000000000008C +:10E490000000000000000004000400200200000052 +:10E4A000000020000000000000000000000000004C +:10E4B000000000000000000000000000000000005C +:10E4C000000000000000000000000000000000004C +:10E4D000000000000000000000000000000000003C +:10E4E000000000000000000000000000000000002C +:10E4F0000000000000000000A0000000000000007C +:10E50000000000000000C008000000000000000043 +:10E51000000000009000000000000000000000006B +:10E5200000000000000000000000000000000000EB +:10E5300000000000000000000000000000000000DB +:10E5400000000000000000000000000000000000CB +:10E5500000000000000000000000000000000000BB +:10E5600000000000000000000000000000000000AB +:10E57000000000000000000000000000000000009B +:10E58000000000000000000000000000000000008B +:10E59000000000000000000000000000000000007B +:10E5A000000000000000000000000000000000006B +:10E5B000000000000000000000000000000000005B +:10E5C000000000000000000000000000000000004B +:10E5D000000000000000000000000000000000003B +:10E5E000000000000000000000000000000000002B +:10E5F000000000001000000000000000000000000B +:10E60000000000000000000000000000000000000A +:10E6100000000000000000000000000000000000FA +:10E6200020000000000000000009000000000000C1 +:10E6300000000009000000000000000000000000D1 +:10E6400000000000000000000000000000000000CA +:10E6500000000000010000000000000000000000B9 +:10E6600000000000000000000000000000000000AA +:10E67000000000000000000000000000000000009A +:10E68000000000000000000000000000000000008A :10E69000000000000000000000000000000000007A -:10E6A000000000000000000000000000000000006A -:10E6B000000000000000000004040000000000044E -:10E6C0002100000000042000000000000000000005 -:10E6D000000000000000000000000000000000003A -:10E6E0000000000000000000000000000800000022 +:10E6A00000008000000000000000000000000000EA +:10E6B000000000000000000000000000000000005A +:10E6C000000000000000000000000000000000004A +:10E6D000000000000000080000000500000000002D +:10E6E000000000000000000000000000000000002A :10E6F000000000000000000000000000000000001A :10E700000000000000000000000000000000000009 :10E7100000000000000000000000000000000000F9 -:10E7200000000000000000000000000000000000E9 -:10E7300000000000000000000000400091900184F3 -:10E740000085038901890188880900000000000014 +:10E720000100902000000000010000000000000037 +:10E7300000000000000000000000000000000000D9 +:10E7400000000000000000000000000000000000C9 :10E7500000000000000000000000000000000000B9 -:10E76000000000000000000000000208008800080F -:10E770001008000000000000000000000000000081 +:10E7600000000000000000000000000000000000A9 +:10E770000000000000000000000000000000000099 :10E780000000000000000000000000000000000089 :10E790000000000000000000000000000000000079 -:10E7A0000000000000000000000000000000000069 -:10E7B00000000000000200020002000280048380CA -:10E7C000020400209002102002000020000000003F +:10E7A0000000110080800000000011002100000026 +:10E7B0000000000000000000000000000000000059 +:10E7C0000000000000000000000000000000000049 :10E7D0000000000000000000000000000000000039 -:10E7E00000000000000000000000000080000000A9 +:10E7E0000000000000000000000000000000000029 :10E7F0000000000000000000000000000000000019 -:10E8000000000000000000000000000005000900FA -:10E8100011001000000000000000000000000000D7 -:10E8200000000000000000000000000000000002E6 -:10E830000000000000000000000000000000118047 -:10E840000480801120038200214108802000000004 +:10E800000000000000000000000000000000000008 +:10E8100000000000000000000000000000000000F8 +:10E82000000000000040008000400000004109009E +:10E83000000900800000000000000000000000004F +:10E8400000000000000000000000000000000000C8 :10E8500000000000000000000000000000000000B8 :10E8600000000000000000000000000000000000A8 -:10E870008041002180000000000000000000000036 +:10E870000000000000000000000000000000000098 :10E880000000000000000000000000000000000088 :10E890000000000000000000000000000000000078 -:10E8A0000000000000000000000000000000000068 -:10E8B0000000000000000000000000000000000058 -:10E8C00000080004080185091188100900A0110042 -:10E8D0000000000000000000000000000000000038 +:10E8A00000000000000000010002000000880001DC +:10E8B00001000000008800000000000000000000CF +:10E8C0000000000000000000000000000000000048 +:10E8D00000000000000000000800080000008800A0 :10E8E0000000000000000000000000000000000028 -:10E8F000880040902011040000000000000000008B +:10E8F0000000000000000000000000000000000018 :10E900000000000000000000000000000000000007 :10E9100000000000000000000000000000000000F7 -:10E9200000000000000000000000000000000000E7 -:10E9300000000000000000000000000000000100D6 -:10E94000000021A091001090018500050090008931 -:10E9500008C10000000000000000000000000000EE +:10E9200000000000000000000100888808000100CD +:10E93000000088000000010000000000000000004E +:10E9400000000000000000000000000000000000C7 +:10E9500000000000000000000000000000000000B7 :10E9600000000000000000000000000000000000A7 -:10E970000000088800000084001000000000000073 +:10E970000000000000000000000000000000000097 :10E980000000000000000000000000000000000087 :10E990000000000000000000000000000000000077 -:10E9A0000000000000000000000000000000000067 -:10E9B0000000000000000000000000000000100047 -:10E9C00008000000900488044189112000822083FF -:10E9D00003400020000000000000000000000000D4 +:10E9A0000000000000000000000041000080800026 +:10E9B000080000000000000041000000000000000E +:10E9C0000000000000000000000000000000000047 +:10E9D0000000000000000000000000000000000037 :10E9E0000000000000000000000000000000000027 -:10E9F000000000000000000000800880000000000F +:10E9F0000000000000000000000000000000000017 :10EA00000000000000000000000000000000000006 -:10EA100000000000000000000000002000000000D6 -:10EA200000000000000000000000000000000000E6 -:10EA30000000000000008000000000000000000056 -:10EA4000000000000000049105C020000009024001 -:10EA500021002000880400000000000000000000E9 +:10EA100000000000000000000000000000000000F6 +:10EA200000000000000000000000000000110000D5 +:10EA30000080000000000011050000000000000040 +:10EA400000000000000000000000000000000000C6 +:10EA500000000000000000000000000000000000B6 :10EA600000000000000000000000000000000000A6 -:10EA70000000000000000010800000800000000086 +:10EA70000000000000000000000000000000000096 :10EA80000000000000000000000000000000000086 -:10EA900000000000000000900000000000010000E5 -:10EAA0000000000000000000000000000000000066 -:10EAB000000000000000880010004000000000007E -:10EAC00000000000000000000041008201840000FE -:10EAD000030190200340A10100000000000000009D -:10EAE0000000000000000000000000000000000026 -:10EAF00000000000000000000200049008408800B0 +:10EA90000000000000000000000000000000000076 +:10EAA0000000000000000000000000000000000165 +:10EAB0000000004000000000000100000000000015 +:10EAC0000000000000000000000000000000000046 +:10EAD0000000000000000000000000000000000036 +:10EAE0000000000800080000000000000000000016 +:10EAF0000000000000000000000000000000000016 :10EB00000000000000000000000000000000000005 :10EB100000000000000000000000000000000000F5 :10EB200000000000000000000000000000000000E5 -:10EB300000000000000000000000000000000000D5 -:10EB400000000000000000000000000000E00700DE -:10EB50000000000000E0070041000000000000008D +:10EB3000000002E007008200000000E000008141C8 +:10EB400000000000000000000000000000000000C5 +:10EB500000000000000000000000000000000000B5 :10EB600000000000000000000000000000000000A5 -:10EB7000000000000000000000000000000007008E +:10EB70000000000000000000000000000000000095 :10EB80000000000000000000000000000000000085 :10EB90000000000000000000000000000000000075 :10EBA0000000000000000000000000000000000065 -:10EBB0000000000000000000000000000000000055 +:10EBB0000000000000000000F0F000000000000075 :10EBC0000000000000000000000000000000000045 -:10EBD00000DBDBDBFE7E0E7E3C38181800000000F8 +:10EBD0000000000000000000000000000000000035 :10EBE0000000000000000000000000000000000025 -:10EBF0000000000000000000000000003030FF00B6 -:10EC000024000000000000000000000000000000E0 +:10EBF0000000000000000000000000000000000015 +:10EC00000000000000000000000000000000000004 :10EC100000000000000000000000000000000000F4 :10EC200000000000000000000000000000000000E4 -:10EC300000000000000000000000000000F000FFE5 +:10EC300000000000000000000000F0F000000000F4 :10EC400000000000000000000000000000000000C4 -:10EC5000000000DBDBDB0E7E0E7E1838181800008B +:10EC500000000000000000000000000000000000B4 :10EC600000000000000000000000000000000000A4 -:10EC70000000000000000000000000000000303034 -:10EC8000FF990000000000000000000000000000EC +:10EC70000000000000000000000000000000000094 +:10EC80000000000000000000000000000000000084 :10EC90000000000000000000000000000000000074 :10ECA0000000000000000000000000000000000064 :10ECB0000000000000000000000000000000000054 @@ -171771,238 +171771,238 @@ :10ED00000000000000000000000000000000000003 :10ED100000000000000000000000000000000000F3 :10ED200000000000000000000000000000000000E3 -:10ED300000000000000000000000000000000000D3 +:10ED3000000000000000000000FF0000FFFF0000D6 :10ED400000000000000000000000000000000000C3 -:10ED50000000F0C0F0C09999990040000020000028 -:10ED60003C3C00000000000000000000000000002B +:10ED500000000000000000000000000000000000B3 +:10ED600000000000000000000000000000000000A3 :10ED70000000000000000000000000000000000093 -:10ED800000000030000C0F0F3FBF0000000000002B +:10ED80000000000000000000000000000000000083 :10ED90000000000000000000000000000000000073 :10EDA0000000000000000000000000000000000063 -:10EDB0000000000000000000000000000000000053 +:10EDB0000000000000000000000000FF0000000054 :10EDC0000000000000000000000000000000000043 -:10EDD00000000000FFC3FFC3FFFFFF004000002052 -:10EDE00066667F7F00000000000000000000000059 -:10EDF0000000000000000000000000000000000013 -:10EE000000000000F03030300F8F3FBF00000000E6 +:10EDD0000000000000000000000000000000000033 +:10EDE0000000000000000000000000000000000023 +:10EDF0008080000000000000000000000000000013 +:10EE00000000000000000000000000000000000002 :10EE100000000000000000000000000000000000F2 -:10EE20000000000000610006000D0000000000006E -:10EE300000000000000000000000000000000000D2 -:10EE40000000000000000000000000000000006161 -:10EE50000006000D000005610A09050100A000611F -:10EE60000E01000100000000000000000000000092 +:10EE200000000000000000000000000000000000E2 +:10EE300000000000000000000000000005652A0638 +:10EE4000054F20A800400006000C00000000000054 +:10EE500000000000000000000000000000000000B2 +:10EE600000000000000000000000000000000000A2 :10EE70000000000000000000000000000000000092 -:10EE800000000000000000000E0000000000000074 +:10EE80000000000000000000000000000000000082 :10EE90000000000000000000000000000000000072 :10EEA0000000000000000000000000000000000062 :10EEB0000000000000000000000000000000000052 -:10EEC0000000000000000000000000000000000042 -:10EED0000000000000000000FFF05F50C0FCFFFFDA -:10EEE0003535F5053CFFF0F00000000000000000A3 +:10EEC00000000000000000000F0FFFFF0000000026 +:10EED0000000000000000000000000000000000032 +:10EEE0000000000000000000000000000000000022 :10EEF0000000000000000000000000000000000012 :10EF00000000000000000000000000000000000001 :10EF100000000000000000000000000000000000F1 :10EF200000000000000000000000000000000000E1 :10EF300000000000000000000000000000000000D1 -:10EF400000000000000000000000000000000000C1 -:10EF5000000000000000000000000F005F50C0FC37 -:10EF600000003535F50500C3F0F00000000000009A +:10EF4000000000000000000000000F0F00000000A3 +:10EF500000000000000000000000000000000000B1 +:10EF600000000000000000000000000000000000A1 :10EF70000000000000000000000000000000000091 :10EF80000000000000000000000000000000000081 :10EF90000000000000000000000000000000000071 -:10EFA000000000000000000000000000000041D749 -:10EFB00043DF00000000000000000000000000002F -:10EFC0000000000000000000000000000000000041 -:10EFD000000000005555555500000000D7D7171701 -:10EFE0003A3AFFFF7D7DFF3C82BEF0F0000000005A +:10EFA0000000000000000000000000000000000061 +:10EFB0000000000000000000000000000000000051 +:10EFC0000000000000000000000000000000F0F061 +:10EFD0000000000000000000000000000000000031 +:10EFE0000000000000000000000000000000000021 :10EFF0000000000000000000000000000000000011 :10F000000000000000000000000000000000000000 :10F0100000000000000000000000000000000000F0 :10F0200000000000000000000000000000000000E0 -:10F0300000C301C700000000000000000000000045 +:10F0300000000000000000000000000000000000D0 :10F0400000000000000000000000000000000000C0 -:10F050000000000000001155050500000000141418 -:10F0600017173A3A00004141C30082BEF0F0000099 +:10F05000F0F00000000000000000000000000000D0 +:10F0600000000000000000000000000000000000A0 :10F070000000000000000000000000000000000090 :10F080000000000000000000000000000000000080 -:10F0900000000000000088C0850484020804840485 -:10F0A0000402200220028802880220020040004060 -:10F0B0008841200404050003004088118803204093 -:10F0C00000022041044100110041200200400004E0 -:10F0D00020402011200400010402004000042011FF -:10F0E0000404000220000003404000402004880087 -:10F0F0008800204020022004200084008802200292 -:10F1000088400000200000002000000020022000B5 -:10F11000200002002000040000202000099040C0D0 -:10F1200000C08088009080840084418400904082E8 -:10F1300000C000821040410441C04004410410401E -:10F14000100221400008108200C000400090009092 -:10F15000118210C000400002000000C000020082C6 -:10F1600000C01040009000C010900002009000C04D -:10F1700040C0000240C0109040001000004000025B -:10F18000004000024002004000400000004000003B -:10F1900000000000000200020002200820002004FD -:10F1A000200520102008040020002021202102102A -:10F1B0002021022120409000202120210221020054 -:10F1C000020004000441882184002021840088007A -:10F1D000022000000000000000000000000000000D -:10F1E000000000000000020000000200000000001B -:10F1F00000000000020000000000001000000000FD +:10F0900000000000000000110000041188000008BA +:10F0A00000082000040800000000201100040000F7 +:10F0B0002000000000000000000800000000000028 +:10F0C00000002004200000000000200000000000DC +:10F0D0000000000000000000000000000000000030 +:10F0E00000000000200020000000000020000000C0 +:10F0F0000000000000000000000000000000000010 +:10F10000000000002000200000000000200000009F +:10F11000000000000000000000020002000000905B +:10F12000000200900000004000400000004000008D +:10F13000000000000000000000024000004000024B +:10F1400000020000000200020000000000000000B9 +:10F15000000000000000000000004000000040002F +:10F16000000000000000000000000000000000009F +:10F17000000000004000000000000000000000004F +:10F18000000000000000000000000000000000007F +:10F19000000000000000000000002000200020000F +:10F1A000840020000000000000002000000000009B +:10F1B000200020000000000000000000000000000F +:10F1C00020009000900000000000020000000000FD +:10F1D000000000000000000000000000000000002F +:10F1E000000000000000000000000000000000001F +:10F1F000000000000000000000000000000000000F :10F2000000000000000000000000000000000000FE -:10F2100000100010000000000004000004020202C0 -:10F220000408040209030304090808080208020884 -:10F23000110409022002030803020990049003024A -:10F24000050805840008038205040208050200027F -:10F2500000A00000000000040000008200000090F8 -:10F2600000082008000400020400009000020008CA -:10F270000200000000000000020000000200001078 -:10F2800002820008000000000000000004000004EA -:10F29000020000000200000000000000000020400A -:10F2A000000811210104044111049040110984094E -:10F2B0002011900884040240900588212005100840 -:10F2C0000203400210200203900290031011040078 -:10F2D00002030200900588008800400084000000BE -:10F2E0004000100090000411900090091000880068 -:10F2F00010008400020090000000000002000000E6 -:10F3000000000000000000000000000000400000BD -:10F3100000000000000000000000000000000000ED -:10F32000800400842090208841A020100002044026 -:10F33000000410820590209000024188100400888B -:10F34000008800880088080405000004059008046F -:10F3500010080002099000880404022000880200BE -:10F3600000000000000000040000100020901100C8 -:10F37000004000000090049004000088000000A0FD -:10F380000000000000000000000000080000000075 -:10F3900000000000004041000000030000004000A9 -:10F3A0000000C0009020C0C02002000940A09000D2 -:10F3B000C020A00900048202044000040020A040F4 -:10F3C000000900000020082000200040004000400C -:10F3D000000000020000000000000000000000002B -:10F3E0000000000000000000A00004000800000071 -:10F3F0000000000000000000820000110400000076 -:10F4000000000000000000000000100008000000E4 -:10F4100000000000000000000000000000000809DB -:10F4200000000821408420A0092021820900042135 -:10F43000214040002082418804A0110009200000E2 -:10F4400040202008200008002000000000000800E4 -:10F450000000008200000000000000000000210009 -:10F4600000000000000000000000400000000090CC -:10F470000900000008000000000000000088008271 -:10F48000000000A0000000000000000000000000DC -:10F490000000000000000000000041000310000018 -:10F4A00000000000020084028482001082880803A9 -:10F4B0000002C009A0000040000510400020000428 -:10F4C00000400003000304000008001100090002CE -:10F4D000001100000000000000040040A0400002F5 +:10F210000000000000000000000000000082000864 +:10F220004104200400040204000409040002000256 +:10F230000002000800900004000200040004000422 +:10F2400000040000000400080000000400040000A6 +:10F2500000040004000000000000000000000000A6 +:10F26000000800000000000000080000000000008E +:10F27000000000000000000000000000000000008E +:10F28000000800000000000000080000000000006E +:10F290000000000000000000000000000000C0406E +:10F2A000104040210011000000200000002100005B +:10F2B00040000008000000000000000000200000E6 +:10F2C000000000000000000000000000000000003E +:10F2D000000000000000000000000000000000002E +:10F2E000000000000000000000000000000000001E +:10F2F000000000000000000000000000000000000E +:10F3000000000100000000000000000000000003F9 +:10F3100000000000000000110000000000000000DC +:10F3200000000000000000000000000000000020BD +:10F3300000080000000000000000000000000000C5 +:10F3400000000000000000000000000000000000BD +:10F3500000000000000000000000000000000000AD +:10F36000000000000000000000000000000000009D +:10F37000000000000000000000000000000000008D +:10F38000000000002000000000000000000000005D +:10F39000000000000000000000000000000000006D +:10F3A000000000000008000800200000000000002D +:10F3B000000000000000000000000000000000004D +:10F3C000000000000000000000000000000000003D +:10F3D000000000000000000000000000000000002D +:10F3E000000000000000000000000000000000001D +:10F3F000000000000000000000000000000000000D +:10F400000000000001000040010001820000000037 +:10F4100000000000000000000000000000000000EC +:10F4200000000000000000000008210000000800AB +:10F4300003000000000000000000000000000000C9 +:10F4400000000800000000000800000000000000AC +:10F4500000000000000000000000000000000000AC +:10F46000000000000000000000000000000000009C +:10F47000000000000000000000000000000000008C +:10F480000000000000002000000120002005000016 +:10F49000000000000000000000000000000000006C +:10F4A000000000000000000800000009000000004B +:10F4B0000000000000000000080000000000000044 +:10F4C000000000000000000000000000000000003C +:10F4D00000000000000000000000008000000000AC :10F4E000000000000000000000000000000000001C :10F4F000000000000000000000000000000000000C -:10F5000000000000000000000000000000000003F8 -:10F5100000000000000802000000000000000000E1 -:10F52000000000000000000000A011201182202037 -:10F530009000000010C0000210000902408211A0DB -:10F54000118209004090119020200990208205909E -:10F55000004000400088404011001000000205A05B -:10F56000050011A041200988000000020204099052 -:10F570000002000400000088110009882002000237 -:10F5800009900000000000000000000000000000E2 -:10F5900000000000000000000000009000000000DB -:10F5A0000000118404040090000002108203A005F2 -:10F5B0008400A00800830021008004050000900959 -:10F5C00000030021002100000000000000210000D5 -:10F5D0000008000000000000C0000000080000005B -:10F5E0000000000000000400000500000200000010 -:10F5F0000000000200000000000000000000000009 -:10F6000000000000000000000000000000000000FA -:10F6100000000000000000000000000000000000EA -:10F620000000000000000000000000000088210031 -:10F63000050441C0044021200010022000000020E9 -:10F640004104410421000002030000000300000007 +:10F500002000000000002000000000000004008037 +:10F5100000000000000000110000000000030000D7 +:10F5200000000008000000000000000000000000D3 +:10F5300000000000000000000000000000000000CB +:10F5400000000000000000000000000000000000BB +:10F550000000000000C000000090000000100084C7 +:10F560000000000000840000000000000000000017 +:10F57000000000000000000000000000000000008B +:10F58000000000000000000000000000000000017A +:10F590000004000000000000000000000000000067 +:10F5A000000000000000000000000000000000005B +:10F5B000000000000000000000000000000000004B +:10F5C000000000000000000000000000000000003B +:10F5D000000000000000000000000000000000002B +:10F5E0000000000000000000000200000000000019 +:10F5F0000002000000000000000000000000000009 +:10F6000000000000000000000000000001000100F8 +:10F610000000018000090000000800000000000058 +:10F6200000000000000000000000000000000000DA +:10F6300004000000000000000000080000000000BE +:10F640000000000041000000080000000000000071 :10F6500000000000000000000000000000000000AA -:10F660000000000000000000000000000000000892 -:10F67000004000000200210000000000008800009F -:10F680000000110011020000000000000000000056 -:10F690000000000000000200000000000000000068 -:10F6A0000000000000000002000000100204000042 -:10F6B00000002100000000A01000900000A0000049 +:10F660000000000000000800000000000000000092 +:10F67000000000000000000000000000000000008A +:10F68000000000000000000000000000000020005A +:10F69000200000002004000800000000000000001E +:10F6A0000000050000000000000000000000000055 +:10F6B000000000000000000000000000000000004A :10F6C000000000000000000000000000000000003A :10F6D000000000000000000000000000000000002A -:10F6E000000000000000000000000000000000001A +:10F6E0000000000000000000000000000000000218 :10F6F000000000000000000000000000000000000A :10F7000000000000000000000000000000000000F9 -:10F7100000000000000000000000000000000000E9 +:10F71000909001108891080800000000000000008F :10F7200000000000000000000000000000000000D9 -:10F730000020000010040004108980100041001116 +:10F7300000000000000000000000000000000000C9 :10F7400000000000000000000000000000000000B9 :10F7500000000000000000000000000000000000A9 :10F760000000000000000000000000000000000099 :10F770000000000000000000000000000000000089 :10F780000000000000000000000000000000000079 -:10F790000000000000000000000000000000000069 +:10F790000000918021809010000000000000000017 :10F7A0000000000000000000000000000000000059 -:10F7B0000000410010800005008040800803030025 -:10F7C0001003000000000000000000000000000026 +:10F7B0000000000000000000000000000000000049 +:10F7C0000000000000000000000000000000000039 :10F7D0000000000000000000000000000000000029 :10F7E0000000000000000000000000000000000019 :10F7F0000000000000000000000000000000000009 :10F8000000000000000000000000000000000000F8 -:10F8100000000000000000000000000000000000E8 +:10F810000000000091828810918408000000000020 :10F8200000000000000000000000000000000000D8 -:10F8300000000000008401A0000000A00120008959 -:10F840000100014100000000000000000000000075 +:10F8300000000000000000000000000000000000C8 +:10F8400000000000000000000000000000000000B8 :10F8500000000000000000000000000000000000A8 :10F860000000000000000000000000000000000098 :10F870000000000000000000000000000000000088 :10F880000000000000000000000000000000000078 -:10F890000000000000000000000000000000000068 +:10F89000000000000000A1102001A1910000000064 :10F8A0000000000000000000000000000000000058 -:10F8B00000000000000001000000A00000000000A7 -:10F8C0000000000100000000000000000000000037 +:10F8B0000000000000000000000000000000000048 +:10F8C0000000000000000000000000000000000038 :10F8D0000000000000000000000000000000000028 :10F8E0000000000000000000000000000000000018 :10F8F0000000000000000000000000000000000008 :10F9000000000000000000000000000000000000F7 -:10F9100000000000000000000000000000000000E7 +:10F9100000000000000000000811C190A09108093B :10F9200000000000000000000000000000000000D7 -:10F93000000000000000000021040000800000041E -:10F94000000000020021110900000000000000007A +:10F9300000000000000000000000000000000000C7 +:10F9400000000000000000000000000000000000B7 :10F9500000000000000000000000000000000000A7 :10F960000000000000000000000000000000000097 :10F970000000000000000000000000000000000087 :10F980000000000000000000000000000000000077 -:10F990000000000000000000000000000000000067 -:10F9A0000000000000000000000000000000000057 -:10F9B00000000000000000000000204100080000DE -:10F9C0000404210400008500001100000000000074 +:10F990000000000000000000000080A191C1802054 +:10F9A000020800000000000000000000000000004D +:10F9B0000000000000000000000000000000000047 +:10F9C0000000000000000000000000000000000037 :10F9D0000000000000000000000000000000000027 :10F9E0000000000000000000000000000000000017 :10F9F0000000000000000000000000000000000007 :10FA000000000000000000000000000000000000F6 -:10FA100000000000000000000000000000000000E6 -:10FA200000000000000000000000000000000000D6 -:10FA300000000000000000000000000000010000C5 -:10FA40000000000001890000090000000000000023 +:10FA1000000000000000000000000000088080805E +:10FA200008809010000000000000000000000000AE +:10FA300000000000000000000000000000000000C6 +:10FA400000000000000000000000000000000000B6 :10FA500000000000000000000000000000000000A6 :10FA60000000000000000000000000000000000096 :10FA70000000000000000000000000000000000086 :10FA80000000000000000000000000000000000076 -:10FA90000000000000000000000000000000000066 -:10FAA0000000000000000000000000000000000056 -:10FAB0000000000000000000000000000000818144 -:10FAC00000E007005000818100E007000000000016 +:10FA900000000000000000000000000000008808D6 +:10FAA00002A088029000000000000000000000009A +:10FAB0000000000000000000000000000000000046 +:10FAC0000000000000000000000000000000000036 :10FAD0000000000000000000000000000000000026 :10FAE0000000000000000000000000000000000016 :10FAF0000000000000000000000000000000000006 :10FB000000000000000000000000000000000000F5 :10FB100000000000000000000000000000000000E5 -:10FB200000000000000000000000000000000000D5 +:10FB200041000060000042000000000000000000F2 :10FB300000000000000000000000000000000000C5 -:10FB400000000000000000000F0F0F0F0000000079 +:10FB400000000000000000000000000000000000B5 :10FB500000000000000000000000000000000000A5 :10FB60000000000000000000000000000000000095 :10FB70000000000000000000000000000000000085 :10FB80000000000000000000000000000000000075 :10FB90000000000000000000000000000000000065 -:10FBA0000000000000000000000000000000000055 +:10FBA000000000000000EFF7DFFB00000000000095 :10FBB0000000000000000000000000000000000045 :10FBC0000000000000000000000000000000000035 :10FBD0000000000000000000000000000000000025 @@ -172010,253 +172010,253 @@ :10FBF0000000000000000000000000000000000005 :10FC000000000000000000000000000000000000F4 :10FC100000000000000000000000000000000000E4 -:10FC200000000000000000000000000000000000D4 +:10FC20000000000001000000BFFD7FFF0000000099 :10FC300000000000000000000000000000000000C4 -:10FC40000000000000000000000000003C3C00003C +:10FC400000000000000000000000000000000000B4 :10FC500000000000000000000000000000000000A4 :10FC60000000000000000000000000000000000094 :10FC70000000000000000000000000000000000084 :10FC80000000000000000000000000000000000074 :10FC90000000000000000000000000000000000064 -:10FCA0000000000000000000000000000000000054 +:10FCA000000000000000EFBFDF7F00000000000048 :10FCB0000000000000000000000000000000000044 -:10FCC00000000000000000000000000000003C3CBC +:10FCC0000000000000000000000000000000000034 :10FCD0000000000000000000000000000000000024 :10FCE0000000000000000000000000000000000014 :10FCF0000000000000000000000000000000000004 :10FD000000000000000000000000000000000000F3 :10FD100000000000000000000000000000000000E3 -:10FD200000000000000000000000000000000000D3 +:10FD20000000000000000000F7FDFEFF20E020E0E2 :10FD300000000000000000000000000000000000C3 -:10FD4000000000000000000005610A29850100A0F4 -:10FD500000610024800900A00000000000000000F5 +:10FD400000000000000000000000000000000000B3 +:10FD500000000000000000000000000000000000A3 :10FD60000000000000000000000000000000000093 :10FD70000000000000000000000000000000000083 :10FD80000000000000000000000000000000000073 :10FD90000000000000000000000000000000000063 -:10FDA0000000000000000000000000000000000053 -:10FDB0000000000000000000000000000000000043 -:10FDC00000000000000000000000D7D71414AAAA09 -:10FDD0003C3CFAFAFFFFFFFAFFFF000000000000C2 +:10FDA0000000000000000000000080610007C00D9E +:10FDB0000001000000000000000000000000000042 +:10FDC0000000000000000000000000000000000033 +:10FDD0000000000000000000000000000000000023 :10FDE0000000000000000000000000000000000013 :10FDF0000000000000000000000000000000000003 :10FE000000000000000000000000000000000000F2 :10FE100000000000000000000000000000000000E2 -:10FE200000000000000000000000000000000000D2 -:10FE300000000000000000000000000000000000C2 -:10FE4000000000000000000000000000D7D71414DC -:10FE5000AAAA3C3C5F5FFFFFFFFAFFFF0000000023 +:10FE2000000000000000000000000000BBBB77776E +:10FE300008000000000000000000000000000000BA +:10FE400000000000000000000000000000000000B2 +:10FE500000000000000000000000000000000000A2 :10FE60000000000000000000000000000000000092 :10FE70000000000000000000000000000000000082 :10FE80000000000000000000000000000000000072 :10FE90000000000000000000000000000000000062 -:10FEA0000000000000000000000000000000000052 -:10FEB0000000000000000000000000000000000042 -:10FEC0000000000000000000000000000000CFCF94 -:10FED0000C0CB4B4B4B4000C0F0FFF55F351000078 +:10FEA0000000000000000000000000000000BBBBDC +:10FEB00077771C0000000000000000000000000038 +:10FEC0000000000000000000000000000000000032 +:10FED0000000000000000000000000000000000022 :10FEE0000000000000000000000000000000000012 :10FEF0000000000000000000000000000000000002 :10FF000000000000000000000000000000000000F1 :10FF100000000000000000000000000000000000E1 :10FF200000000000000000000000000000000000D1 -:10FF300000000000000000000000000000000000C1 +:10FF3000A5A5A5A5FAAFF55F000000000000000030 :10FF400000000000000000000000000000000000B1 -:10FF5000CFCF0C0CB4B4B4B4000C0F0FFFFFE3F31D +:10FF500000000000000000000000000000000000A1 :10FF60000000000000000000000000000000000091 :10FF70000000000000000000000000000000000081 :10FF80000000000000000000000000000000000071 :10FF90000000000000000000000000000000000061 :10FFA0000000000000000000000000000000000051 -:10FFB0000000000000000000000000000000000041 +:10FFB0000000A5A5A5A5F96FF69F000000000000B0 :10FFC0000000000000000000000000000000000031 -:10FFD00000008202201100022002884082112004C9 -:10FFE0002041040284400404000200400011200269 -:10FFF0000040844100400041000400050405204108 +:10FFD0000000200888040403000310020011040834 +:10FFE0008808200020000000000000000408000431 +:10FFF0002000000820000000004020000000000851 :02000004002AD0 -:100000002041000500110002A04000110041201114 -:10001000000300020041000200020011041104026A -:10002000200420000003000400112002000004024C -:1000300020020040404000020000040020000400B4 -:1000400020022080000000000000200300000000CB -:1000500020000000008200400490408241024140A4 -:1000600008404102000400C0080200824004004031 -:1000700008904102084000040910000241C01082AB -:100080000082108210024102009000041040109083 -:1000900000820040000000900082404000024002C8 -:1000A00040400040008240020040004000400040CC -:1000B000804000000082100200900090414040000B -:1000C00000401040000440001100000000404000CB -:1000D000004000400020040504102000040404092E -:1000E0000405041104042021202020402021204167 -:1000F00020210841202020410441842004210400C3 -:1001000020210400040020002000200888000400B2 -:1001100004000200020000000000040004000000CF -:1001200000000400000005000000040000000000C2 -:10013000048004000420040000000400000000000B -:1001400000000000000000090000000000000000A6 -:10015000000004000200020009900908090405904B -:1001600020082008050809840990030205100208E8 -:1001700004020208090809020908200802900388FD -:100180000008000400080008008205840000000840 -:1001900000080084000800080000000880088000B3 -:1001A000000000088090000804080000800000089B -:1001B00000088020800000098008000800080082F4 -:1001C0000000000800080008000800000000000807 -:1001D00000080082808200080008880802400002AF -:1001E0008808904090208420900820058808880482 -:1001F0008804900340218821C008201120118440E8 -:10020000C0048802901190034021900088001009DA -:1002100002038402900910091021000040402003CD -:1002200040009000841110080000902100822000FE -:1002300020022000042004A000A0002040000000B4 -:1002400000099000040000000000400000000000D1 -:100250000000000082000800900082001090102032 -:1002600000A000A010020984099020880082418427 -:10027000408410A041020920050211884004008832 -:10028000209020021082090404A010904004000273 -:1002900005001002000002020040008800000490E7 -:1002A00000000000024000880200000404A00404D2 -:1002B000000084000090800900210021000100005E -:1002C00000000000000000000088000000000000A6 -:1002D00000000000000003000000030000000840D0 -:1002E00088402040A00420090041A0044009C00427 -:1002F0000040C041821100020020000210020020D4 -:10030000004000008209000200400004004000009C -:1003100000200000000000000000000000000000BD +:1000000000000000000000000000000020000000D0 +:100010002008000000002000000000080000000090 +:1000200000000000000000000000000000002000B0 +:100030000000200000002000000000000000A000E0 +:100040000000400000000000000000000000200050 +:10005000000020000002000000900090009000408E +:10006000000000000040009000020000000000407E +:100070000000000000000000000000000040004000 +:10008000000000024000000000000000000000002E +:10009000000000000000000000000002000000401E +:1000A0000000000000000000000000000000000050 +:1000B0000000000000000000000000000000004000 +:1000C0000000000000000000000000000000000030 +:1000D00000000000000004002000200004002000B8 +:1000E0002000200020000000000088002000000008 +:1000F00000000000000010000000000000000000F0 +:1001000000000000080020000000000000000000C7 +:1001100000000000000000000000000004000000DB +:1001200000000000000008000000000000000000C7 +:1001300000000000000000000000000000000000BF +:1001400008000000000004000000000000000000A3 +:100150000000000000000800098205820904200454 +:10016000000404040904050400040004040409084C +:100170000008200400820082200400000000090022 +:100180000004000400040004000000000000000857 +:1001900000900004000000000000000800000000C3 +:1001A000000020000000000400000000000000002B +:1001B00000080000000000000008400400000000EB +:1001C0000008800000000000800000000000000027 +:1001D00000080000000000000008100300000021DB +:1001E00000110408000800110009000000000002CE +:1001F00000040000000000000000000000000000FB +:1002000000000000000000000000000000000000EE +:1002100000000000000000000000000000000000DE +:1002200000000000000000000000000000000000CE +:10023000000000000000000000000000200020007E +:100240002080200000000000010000800000000964 +:100250000000000300030040000000000000000058 +:1002600000900088008200000000000000000000F4 +:10027000000000000000000000000000000000007E +:10028000000000000000000000000000000000006E +:10029000000000000000000000000000000000005E +:1002A000000000000000000000000000000000004E +:1002B00000000000000000000000000000C08000FE +:1002C0008000800480000000008402000020000004 +:1002D000000000000000000000000000000000021C +:1002E0000000C0008202000000000020002000008A +:1002F00000000000042000000000002000090000B1 +:1003000000000000000200000000000200000000E9 +:1003100000000000000000000000000000000000DD :1003200000000000000000000000000000000000CD -:1003300000000000000800000400008004000480A9 -:100340000000000000000000820000008200820027 -:100350000008002100000000000000000000000074 -:1003600011822182111003004190020211904190EC -:100370000910030003040020030800000200208885 -:1003800040020000200008000200000000020000FF -:10039000048200000020000000A000000000000017 -:1003A0000000000000000208000000000000200023 -:1003B00020000000000000000000800800208000F5 -:1003C0008020000000000000000000000800000085 -:1003D0000000000000000084000000000800000091 -:1003E0000000A000C1110005C00300058202904179 -:1003F00004111021040000020005020000000000AA -:1004000000050020000000000003000000000011B3 -:10041000000010000040000000110000000000205B -:100420000011000000000000000000000021080092 -:100430000004A041000388800002010200080000BF -:10044000000001100000000000000000000000009B -:100450000000000000000000000000000000080094 -:100460000000400004880888050811000004020804 -:1004700004A00084408805021188009005880502C8 -:10048000114009900540110404201188000402085D -:1004900010400340004010000900208840900040B8 -:1004A0000400419000000020100002040000000041 -:1004B0002040090420020000400420002005000024 -:1004C0000008000004000000000000000000000020 -:1004D0000000000000000902000000000000000011 -:1004E00000000300000000054005A040008000213E -:1004F0000003000500030008002100210041002145 -:100500000003000500210000000000210021000080 +:1003300000000000000000000000000000000000BD +:10034000000001800000008000000000000000406C +:10035000000000000000000000000000000000009D +:100360000000110021002100030003000000000034 +:100370000000400000000000080000000800040029 +:100380000000000000000000000000000800000065 +:10039000000000000000000000000000000000005D +:1003A000000000000000000000000000000000004D +:1003B00000000000000000000000000000840000B9 +:1003C00000000000024000000004000000A0000047 +:1003D000000000000000000000000000000000001D +:1003E000000000400000000000A100020020820088 +:1003F00000020000000000000040000000000000BB +:1004000000000000000000000000000000000000EC +:1004100000000000000000000000000000000000DC +:1004200000000000000000000000000000000000CC +:10043000000000000000000000000000200000009C +:100440000000000001802080000004800011902145 +:10045000000000000000000000000000000000009C +:100460000008000000000000000000040000000080 +:10047000000020000000000000000000000000005C +:10048000000000000000000000000000000000006C +:100490000000000008000000000000000000000054 +:1004A000000000000000000000000000000000004C +:1004B000000000000000000000000000000000003C +:1004C000000000000000201005040082000400006D +:1004D00000000000000000000000000021000000FB +:1004E0000000000002000000000800000000000002 +:1004F000000000008200000000000000000000007A +:1005000000000000000000000000000000000000EB :1005100000000000000000000000000000000000DB -:100520000000000000000000000000008800200023 -:100530000021002100210000000000000141000016 -:100540000020002000200020000000000008000023 -:100550000000000000000000000000050000000096 -:1005600000000008000900004102208841C1094044 -:10057000020221904140020402C0110009880004D7 -:1005800000401100092002000200000000000040AD -:10059000080000000000000000000000000800004B -:1005A0000000000000000000000008000000000043 -:1005B0000000000000000084020000840084208805 -:1005C000208400010009000100010000000000007B -:1005D000000000000000000000000000000000001B -:1005E000000003000800038403C000A00004001002 -:1005F00000400000000000000000000000000000BB +:1005200000000000000000000000000000000000CB +:1005300000000000000000000000000000000000BB +:1005400000000000000000009000014000000100D9 +:100550000021002100400500000000090008000003 +:10056000000008000000100000000001040000006E +:1005700004000300110005000000410008022100F2 +:100580000000110000000000000000000800000052 +:10059000000000000000080000000800000000004B +:1005A000110000000000000000000000000000003A +:1005B0000008000000000000000000000000000033 +:1005C00000000000000000000000000040010000EA +:1005D0004000410000000001881000000000000001 +:1005E00000000000000000000000000085009000F6 +:1005F00000000000000000000000000000000000FB :1006000000000000000000000000000000000000EA :1006100000000000000000000000000000000000DA -:1006200000000000000000000000000003842082A1 -:1006300000C0888210A0001000108488C108000843 -:1006400040088410000000000000000000000000CE -:10065000000000000000000000000000000000009A -:1006600000000000C04000880040C0400080000042 -:1006700000000080000000000000000000000000FA +:1006200000000000000000000000000300000000C7 +:1006300000000000000000000000000000000000BA +:1006400000000000000000000000000001010001A7 +:10065000A001000004918821009190090000000091 +:100660000000000000000000000000000000C100C9 +:1006700080000000000000000000000000000000FA :10068000000000000000000000000000000000006A :10069000000000000000000000000000000000005A -:1006A0000000000000000000000000000000210029 -:1006B00080000000008000800000000000009180A9 -:1006C000098083800000000000000000000000009E -:1006D000000000000000000000000000000000001A -:1006E000000000000000800000000000000000008A -:1006F000000000000000000000800000000000007A +:1006A000000000000000000000000000000000004A +:1006B000000000000000000000000000000000003A +:1006C0000000000000000000000000000000110811 +:1006D0002103091100038091000808108008000020 +:1006E000000000000000000000000000000000000A +:1006F0000080110011800000008000000000000058 :1007000000000000000000000000000000000000E9 :1007100000000000000000000000000000000000D9 :1007200000000000000000000000000000000000C9 -:1007300000008004000000008000000080800000B5 -:100740000010000300900080000000000000000086 -:100750000000000000000000000000000000000099 -:1007600000000000000000000000809000900000E9 -:100770000000000000000000000000100000000069 +:1007300000000000000000000000000000000000B9 +:1007400000000000000000000000000000000000A9 +:1007500010890800110210200000000880820000AB +:100760000000000000000000000000000000000089 +:100770000000008201000040000000C000000000F6 :100780000000000000000000000000000000000069 :100790000000000000000000000000000000000059 :1007A0000000000000000000000000000000000049 -:1007B000000002000800C08410008800100008102B -:1007C00008009000001108A0820800000008000046 -:1007D0000008000000000000000000000000000011 -:1007E000000000000000000000002000824084A102 -:1007F000829040000000100008000000000000008F +:1007B0000000000000000000000000000000000039 +:1007C0000000000000000000000000000000000029 +:1007D0000000909011008900019000000000A0022C +:1007E0008210000000000000000000000000000077 +:1007F000000000000000C000010100000000000037 :1008000000000000000000000000000000000000E8 :1008100000000000000000000000000000000000D8 :1008200000000000000000000000000000000000C8 -:100830000000000088080008000210A002C000208C -:100840000804100400C020A100A0089001000000CE -:100850000800000000000000000000000000000090 -:1008600000000100000000000000000000C000C007 -:1008700000A002A0800000008000800000000000B6 +:1008300000000000000000000000000000000000B8 +:1008400000000000000000000000000000000000A8 +:100850000000000000011101010100002082019050 +:100860000090C02000000000000000000000000018 +:100870000000000041000011801111410000000043 :100880000000000000000000000000000000000068 :100890000000000000000000000000000000000058 :1008A0000000000000000000000000000000000048 -:1008B0000000000000000080008000008080000038 -:1008C0000080008080000009000200418389080048 -:1008D0000000800000000000000000000000000098 -:1008E00000000000200000000000000000000000E8 -:1008F00000000000C08000000000000000000000B8 -:1009000000000000000000000000000000000000E7 +:1008B0000000000000000000000000000000000038 +:1008C0000000000000000000000000000000000028 +:1008D000000000000000002111100821022000008B +:1008E000400009008000000000000000000000003F +:1008F000000000000000000800050000009100005A +:1009000000050000000000000000000000000000E2 :1009100000000000000000000000000000000000D7 :1009200000000000000000000000000000000000C7 -:100930000000000000000000800280000080000035 -:100940000011800000008000000480000000800092 -:10095000000000080000000000000000000000008F -:100960000000000000000000000000000000000087 -:100970008000800000000000C00002000000900025 -:100980000000000000000000000000000000000067 +:1009300000000000000000000000000000000000B7 +:1009400000000000000000000000000000000000A7 +:10095000000000000000000040808011210008110C +:1009600080008009000080000000000000000000FE +:1009700000000000000000000001000100000083F2 +:100980000000000100000000000000000000000066 :100990000000000000000000000000000000000057 :1009A0000000000000000000000000000000000047 -:1009B00000000000000000000000100020A020083F -:1009C000000084004088A082020004011088020414 -:1009D000A000000000000000000000000000000077 -:1009E0000000000000000000000000000000000007 -:1009F00000000800821020821000000000000000AB -:100A000000000000000000000000000000000000E6 +:1009B0000000000000000000000000000000000037 +:1009C0000000000000000000000000000000000027 +:1009D0000000000000000000000001C01021A1087C +:1009E0000101C000A0009082020000000000000091 +:1009F0000000000000000000000081000060000214 +:100A000084110000000000008100000000000000D0 :100A100000000000000000000000000000000000D6 :100A200000000000000000000000000000000000C6 :100A300000000000000000000000000000000000B6 -:100A4000070000000000000007000000000000E0B8 -:100A50000700880000000000070000000000000000 -:100A600000000000480000E000000000000000005E -:100A70000000000000000000070088003C000000AB +:100A400000000000000000000000000000000000A6 +:100A500000000000000000000000000048000060EE +:100A6000000081000011006006000011000000007D +:100A70000000000000000000000000000000000076 :100A80000000000000000000000000000000000066 :100A90000000000000000000000000000000000056 :100AA0000000000000000000000000000000000046 -:100AB0000000000000000000000000000000000630 -:100AC00000FF2000B999109030F0010399FFFE7EDD -:100AD0000E7EF700D30000000000000000000000C0 -:100AE0000000000000000000000000000000000006 -:100AF000000000000000FEC2C2C2000076663C009A +:100AB0000000000000000000000000000000000036 +:100AC0000000000000000000000000000000000026 +:100AD00000000000000000000000000000000FF017 +:100AE0000FF0000000000F0F0000DDEEFFFF000020 +:100AF00000000000000000000000000000000000F6 :100B000000000000000000000000000000000000E5 :100B100000000000000000000000000000000000D5 :100B200000000000000000000000000000000000C5 :100B300000000000000000000000000000000000B5 -:100B4000006600FF00009999109030F0090F99FF9E -:100B50000E7E0E7EC300C3000000000000000000F7 -:100B60000000000000000000000000000000000085 -:100B70000000000000000000F6F6F6F60000FFFF9F +:100B400000000000000000000000000000000000A5 +:100B50000000000000000000000000000000000095 +:100B60000FF00FF0000000000B0B0600FFFFDDEEA2 +:100B70000000000000000000000000000000000075 :100B80000000000000000000000000000000000065 :100B90000000000000000000000000000000000055 :100BA0000000000000000000000000000000000045 @@ -172265,478 +172265,478 @@ :100BD0000000000000000000000000000000000015 :100BE0000000000000000000000000000000000005 :100BF00000000000000000000000000000000000F5 -:100C00000000006600660000000000000000000018 +:100C000000000000000000000000000000000000E4 :100C100000000000000000000000000000000000D4 :100C200000000000000000000000000000000000C4 :100C300000000000000000000000000000000000B4 -:100C400000000000EFCF000066666666FF04000447 -:100C5000C0E0C0E0000100087EFF00FF00000000CF -:100C60000000000000000000000000000000000084 -:100C70000000000000000000000000009E0098043A -:100C800080FFCFFF0066307600000000000000000B +:100C400000000000000000000000000000000000A4 +:100C50000000000000000000000000000000000094 +:100C6000000000000000000004000400000000007C +:100C7000FF00000000000000000000000000000075 +:100C80000000000000000000000000000000000064 :100C90000000000000000000000000000000000054 :100CA0000000000000000000000000000000000044 :100CB0000000000000000000000000000000000034 -:100CC000000000000000E7C3000066666646FF18EB -:100CD0000018C0E0F0F0000100083C3C00000000FB -:100CE0000000000000000000000000000000000004 -:100CF00000000000000000000000000000009E0056 -:100D0000980400FF0FFF800040000000000000007A +:100CC0000000000000000000000000000000000024 +:100CD0000000000000000000000000000000000014 +:100CE00000000000000000000000050005000000FA +:100CF00020000000000000000000000000000000D4 +:100D000000000000000000610006C000200000009C :100D100000000000000000000000000000000000D3 :100D200000000000000000000000000000000000C3 :100D300000000000000000000000000000000000B3 :100D400000000000000000000000000000000000A3 -:100D5000000000000010000000610E07000D000000 -:100D600005000A08050000A00000000000000000C7 -:100D700000610006C00D000000000000000000003F -:100D800000000E0000000000000000000000000055 +:100D50000000000000000000000000000000000093 +:100D6000000000000000000000610007C00D00014D +:100D7000A061003B000D00A000000000000000008A +:100D80000000000000000000000000000F0FA5A5FB :100D90000000000000000000000000000000000053 :100DA0000000000000000000000000000000000043 :100DB0000000000000000000000000000000000033 :100DC0000000000000000000000000000000000023 -:100DD000000000000000000000000000000000C350 -:100DE00082820000000000000000000000000000FF -:100DF00000000000000000000000000000000000F3 -:100E000000000000000000000000000000000000E2 -:100E100000000000000000000000000000000000D2 +:100DD0000000000000000000000000000000000013 +:100DE00000000000000000000000FFFFF7F71015F2 +:100DF000202A0000000000000000000000000000A9 +:100E00000000000000000000000000000000AAAA8E +:100E1000FF000000000000000000000000000000D3 :100E200000000000000000000000000000000000C2 :100E300000000000000000000000000000000000B2 :100E400000000000000000000000000000000000A2 :100E50000000000000000000000000000000000092 -:100E60003030000000000000000000000000000022 -:100E70000000000000000000000000000000000072 +:100E6000000000000000000000000000F7F7FFFF96 +:100E700004A408580000000000000000000000006A :100E80000000000000000000000000000000000062 -:100E90000000000000000000000000000000000052 +:100E900055AA00FF00000000000000000000000054 :100EA0000000000000000000000000000000000042 :100EB0000000000000000000000000000000000032 :100EC0000000000000000000000000000000000022 :100ED0000000000000000000000000000000000012 -:100EE0000000000000000000000000000000000002 -:100EF00000000000000000000000000000000000F2 +:100EE0000000000000000000000000000000000101 +:100EF000400200000000DFFF555500000000000028 :100F000000000000000000000000000000000000E1 -:100F100000000000000000000000000000000000D1 +:100F1000000055AA00FF00000000000000000000D3 :100F200000000000000000000000000000000000C1 :100F300000000000000000000000000000000000B1 :100F400000000000000000000000000000000000A1 :100F50000000000000000000000000000000000091 :100F60000000000000000000000000000000000081 -:100F70000000000000000000000000000000000071 +:100F70000410082000001000CFFF00000000000057 :100F80000000000000000000000000000000000061 -:100F900000400404004004020091004000410005AC -:100FA0004040004000020002884000020041004131 -:100FB00088042000000204400041000300030002F6 -:100FC00000030040000504410040C04100024041D0 -:100FD00000032041204000032011000400020040D3 -:100FE0000004001100000440C004000200000000E2 -:100FF000C00420002002001120000000C0020000F8 -:10100000000288008400000020000000A00001020F -:101010000400400288021102C1200810100241029F -:101020001102410211020840089011022182414040 -:10103000214011204140084000021182000208A016 -:1010400040C00090400411080082200211400804B2 -:1010500000040000409008024102404000C040C02F -:1010600008C01082004000022102209040C0404091 -:1010700000402040100200C021C00002000000001B -:101080000000000840000000000000004084400014 -:10109000400300408400040002000221404104009B -:1010A0000409021004100440882004400441022076 -:1010B00004218841020004409021202104410400C1 -:1010C00084000400200204000000100084000000DE -:1010D000008004000000000000000000000000404C -:1010E0000000000000000000040000008400100068 -:1010F00004000000000000000400001000000000D8 -:1011000000000008000000000400000002000000D1 -:10111000040200020000040003000500080084002F -:1011200008000200040003900800100011000900EC -:10113000050002840400040200020000080002000E -:1011400000000008020000890008000800080000F4 -:1011500000000002008200000084008200000008FD -:101160000000000000A000000000808800840088CB -:101170000000008400000008000000080084001047 -:1011800000080008008800000000000000000000C7 -:10119000008480110085000840004000908002001B -:1011A0004009020040004000000884028408400911 -:1011B0001002840590002011C000200890218408AE -:1011C00088411000882002004000040040401002C6 -:1011D000100088008800400200004000100802094A -:1011E0000221840802084040900010110000100005 -:1011F000002100080000000088000005000500082C -:101200000005004000400010000000080008000831 -:101210000000000400088408000009A0110010204C -:10122000090010A04188024000400982110809020B -:101230002182050011900290118440041002008860 -:101240000288210411881088009020900020052039 -:1012500000410082212000022189000009900090B5 -:1012600000040088002002900008000400A000C0D4 -:10127000000400200084002000080400000000009A -:10128000000000880000000000A00000090000002D -:10129000000021000504110005000040044000404A -:1012A00004040420081140040040200282090002C6 -:1012B00000024009000900090005C0000002000406 -:1012C00000400009000000000020000900020000AA -:1012D0000400000000000000040000000000000006 -:1012E0000000820000000000000000090010000063 -:1012F0000000000500110040000000008400C00054 -:1013000000000000008000000400000082000000D7 -:101310000000000000000000900490009000891080 -:1013200011000900890082102140110309842190D5 -:10133000208220A020A00084031011100900211099 -:101340000000040002A00000028220C040A00004AF -:1013500000000000009000840020002002400000F7 -:101360000000000000001100000000000300000069 -:10137000000000000000000000000000000000006D -:10138000000000000000000200000000000000005B -:101390000300000000A00000008200000000000028 -:1013A000840088000800000000808400000000091C -:1013B000C005000000000008004188000020002057 -:1013C0000003000000000040001100000011004078 -:1013D0000003000000000000000400000000000204 -:1013E00000000020000500000020000000000000B8 -:1013F000000000200000000000000000080040087D -:101400000000002100400000000800400000000033 -:1014100000000000000008000800840000008402B2 -:1014200008000308200809042088410209A0209030 -:101430001102404009A04088099002820282404087 -:10144000214011901190409040040540040405048F -:1014500005001088020000004004044000020090D3 -:1014600005080000048400040000099002A04088E0 -:1014700000040020040000000084050000000008B3 -:101480000000400000000000000000080000000014 -:1014900000200000000000000000080000004000E4 -:1014A00041A10000900088000000000040410003BE -:1014B0000000C000000000080000820502210000BA -:1014C0000000000882080003000400030000000080 -:1014D00000000000000084000000020000A10008DD -:1014E0000080010000000021000000080021002110 -:1014F00000030000000000000000000000000103E5 -:10150000000000110100000500000000000500219E -:10151000002100000408000000000000000000009E -:1015200084000000400000904010111020882188A5 -:101530000988090811C040401190020009A0400428 -:101540000904200802000900000000000304400014 -:101550002000000800000020000000000000000241 -:1015600000200040080000000020000000000000F3 -:101570000000000000020010000000000000000059 -:1015800040000000000040000000000000000000DB +:100F90000100110004001100000004418400000061 +:100FA00000088403880800080008040800080008F6 +:100FB00000002000000020040000000400000008E1 +:100FC00000080008000800000004200000040004DD +:100FD00000010008200000040004000000000000E0 +:100FE0000000000000000000000000000000000001 +:100FF00000000000200000004000080088000800F9 +:101000000000000088000000000000000000400018 +:101010000000020202020002029000C00040000430 +:101020000004000240000040100400020000000024 +:1010300000000000000000000000000000000000B0 +:101040000000400000004000000000000000000020 +:101050000000000000000000000000000000100080 +:101060000000000000000000000000000000000080 +:101070000000000000000000000080008000000070 +:1010800080000000000000000000000000000000E0 +:1010900000000000840082000200840004000000C0 +:1010A00004008400000000000000000000000000B8 +:1010B000000000000000000000000021000000000F +:1010C0000000000000000000000000000000000020 +:1010D0000004000000000080000000000004000088 +:1010E0000000000000000000000000000000000000 +:1010F000000000000000A00000000002000000004E +:1011000008000000000000000000000000000000D7 +:10111000000000000000000005008000000000004A +:101120000000410000004100000000000400000039 +:10113000000000000000000000080000000000089F +:10114000000800080000008200000082000800087B +:10115000000800080008000000040008000800085B +:1011600000080008000800080008008400080008C3 +:1011700000080008000800080004008800090008B2 +:1011800000088008000800080004000000040008AF +:10119000000800080008000840008800880041009E +:1011A00084000000880000000000400000002000D3 +:1011B0000000020000000000000800000000000025 +:1011C000000000000000000000000000000000001F +:1011D000000000000000000000000000000000000F +:1011E00000000000000000000000000000000000FF +:1011F000000000000100000001000000C008000025 +:1012000082808280000000000000000800000000D2 +:101210000000000000000000000000880000000046 +:101220000400000800080008000400A000000040BE +:101230000090000000000090000000000000000886 +:101240000008000000000000000000000000000096 +:10125000000000000000000000000000000000008E +:10126000000000000000000000000000000000007E +:101270000000000000000400410004C00900050057 +:1012800000000320001000840000000000000000A7 +:10129000008400000000000000000000002000208A +:1012A00040040004000000000000000900000000ED +:1012B000000000000000000000000400000000002A +:1012C000000000000000000000000000000000001E +:1012D000000000000000000000000000000000000E +:1012E00000000000000000000000000000000000FE +:1012F00000000000040004000400400000000002A0 +:101300004000000001020011000000000010000079 +:101310000000000000008400000000000000000049 +:101320001100040000001100110000000000000086 +:101330000000040009200000000000000000000080 +:101340001100080040001000000011000000000023 +:101350002100000241000000000000000000000029 +:10136000000008000000080010000000000000005D +:10137000000010000000800080008000800000005D +:1013800000018800000004011000000000000001BE +:10139000000000000000000000000000000000004D +:1013A000000000000000000000000000000000201D +:1013B00000000000820000000000000000000000AB +:1013C0000000000000000000A000000000008200FB +:1013D0000000000008000000000000000000000005 +:1013E00000000000000000000000000000000000FD +:1013F000000004000000000088200000000004003D +:10140000C0000180C0A005008380001000000080A3 +:1014100000000000000000000000000000000000CC +:10142000000000040008400002000040000004002A +:1014300004000000000000000000000000000000A8 +:10144000000000000000000000000000000000009C +:10145000000000000000000000000000000000008C +:10146000000000000000000000000000000000007C +:10147000000000000000000000000000000000006C +:10148000800000000420002184024020032103206A +:10149000091000000000000000080000000000002B +:1014A000000000000000000000000000000000003C +:1014B0000009000000000000000000000000000023 +:1014C00000000020400000000000000000000800B4 +:1014D000000000009000000000000000000000007C +:1014E00000000000000000000000000000000003F9 +:1014F00000000000000000000000000000000000EC +:101500000005C000400000200041A00005080000C8 +:1015100000020009000000000008000000000000B8 +:101520000000100300000000000000000220000086 +:1015300000024000002040881100110000841100CA +:101540004102000000000000000000020000000056 +:101550000000080000000000080041000000210019 +:101560004100000011000000009000000000000099 +:10157000000000000000000000000000000000006B +:101580000000080000008000000100000000900141 :10159000000000000000000000000000000000004B -:1015A0000000000000008000000090100008208271 -:1015B000000090000001000000000000000000009A +:1015A00000000000000000000000009000000000AB +:1015B000000000000000000000000000000000002B :1015C000000000000000000000000000000000001B -:1015D00000000000000000000000000110010000F9 -:1015E00001010000020000000000000000000000F7 -:1015F00000000000000000000000C00000C000C0AB -:10160000C0040100010008000000000000004000CC -:1016100000000000000000000000000000000000CA -:10162000000008A003A0000204A0000080800000C9 -:101630008080002000200003000000000000000067 +:1015D000000000000000000000000000000000000B +:1015E00000000000000000000002000000000000F9 +:1015F00000000000000000000000000000000000EB +:10160000000040C000900002000000C100900804EB +:10161000C00102880240000482A000000000000017 +:10162000000000000000000000000000008000003A +:1016300000000000000000000000000000000000AA :10164000000000000000000000000000000000009A -:1016500000000000000000000000000909088010E0 -:10166000000210102108000800090000000000001E -:1016700000000000000000000000000080000000EA -:101680000000000010020321000200090300020014 -:1016900080000000000000000000000000000000CA -:1016A00000000000910088000000000080000000A1 -:1016B0008002008000100000000000000000000018 +:10165000000000000000000000000000000000008A +:10166000000000000000000000000000000000007A +:10167000000000000000000000000000000000006A +:10168000000000008080008000800000029003A124 +:10169000808580098080800000808000000000003C +:1016A00000000000000000000000000000000080BA +:1016B000000000000000000000000000000000002A :1016C000000000000000000000000000000000001A :1016D000000000000000000000000000000000000A -:1016E0000000000010000808828084000000000054 +:1016E00000000000000000000000000000000009F1 :1016F00000000000000000000000000000000000EA -:1017000000040080000000000000000000800000D5 -:1017100000000000000000000000000000000000C9 -:1017200000000000000020808341A090C0844000A1 -:1017300004008408049000010000008800000000FC +:101700000000000080000900804185C19180100028 +:1017100020009084A1A100000000800000000000D3 +:1017200000000000000000000000000000000000B9 +:101730000010000000900000000000000000000009 :101740000000000000000000000000000000000099 :101750000000000000000000000000000000000089 -:101760000000000000008900080040400800000060 +:101760000000000000000000000000000000000079 :101770000000000000000000000000000000000069 -:10178000C000880200A02000000000000000000847 -:101790000000000000000000000000000000000049 -:1017A00000000000000000001040090940A082A1D4 -:1017B00040080008849004100000000000000000B1 +:101780000000000000009000000040008503C090B1 +:101790000188000004C0C10500004000A000000056 +:1017A0000000000000000000000000000000000039 +:1017B0000000000088900000000000000000000011 :1017C0000000000000000000000000000000000019 :1017D0000000000000000000000000000000000009 -:1017E00000000000100100000000000000000000E8 +:1017E00000000000000000000000000000000000F9 :1017F00000000000000000000000000000000000E9 -:10180000000000C000A00082108400000000010061 -:1018100000000000000000010000000000000000C7 -:1018200000000000000000000000C0C100880801A6 -:101830000002808000008080100000000000000096 -:101840000000040000000000000000000000000094 +:101800000000000000000000000000000002009046 +:10181000C0C040010021C09100C1904000020040C2 +:1018200000040000000000000000000000000000B4 +:101830000000100000000080000000000000000018 +:101840000000000000000000000000000000000098 :101850000000000000000000000000000000000088 -:101860000000004111021010000200082020410970 -:10187000000900000000000000000000000000005F -:1018800000000000000000000000800000020811BD -:1018900005110303000300110010000900000000FF -:1018A0000000000000000000000000008008008030 -:1018B000800510088000000080000000800080008B -:1018C0000000800000000000000000000000000098 +:101860000000000000000000000000000000000078 +:101870000000000000000000000000000000000068 +:1018800000000000000000000000000000000083D5 +:10189000008080808020110490A0008400000080DF +:1018A00000000080000000000000000000000000B8 +:1018B0000000000000118000008000000000000017 +:1018C0000000000000000000000000000000000018 :1018D0000000000000000000000000000000000008 -:1018E0000000000000000000000000000008800070 -:1018F00080008009000000000000000000000000DF -:101900000000000000008040000080808000000097 -:1019100000000000000000000000000000000000C7 -:101920000000000000000000000000000000108027 -:1019300084002180C010900004088402020010007E -:1019400008008800200000000000000000000000E7 +:1018E00000000000000000000000000000000000F8 +:1018F00000000000000000400000000000000000A8 +:101900000000000000000000000400000000801142 +:10191000808400000080C19183899000081000003D +:1019200000000000000000000000000000000000B7 +:10193000000000000000000120000008000000007E +:101940000000000000000000000000000000000097 :101950000000000000000000000000000000000087 -:101960000000000000000000000000000000202136 -:10197000108810880800000000000000000000002F -:101980000000000000000000080102404008A00024 -:101990000000000000000000000000000000000047 -:1019A0000000000000000000000000000000000037 -:1019B0004040108491C0090100420000070000006F +:101960000000000000000000000000000000000077 +:101970000000000000000000000100000000000066 +:1019800000000000000000000000000000900000C7 +:10199000C001200200000008C18520400488010128 +:1019A0008800900000008800000000000000000097 +:1019B0000000000000000000000000000700000020 :1019C0000000000000000000000000000000000017 :1019D0000000000000000000000000000000000007 :1019E00000000000000000000000000000000000F7 -:1019F00000000000000000000000000000000000E7 -:101A000000000000000000000000000000000700CF -:101A10005000000000000000000000000000000076 -:101A200000000000000000000000000000000000B6 -:101A30000000000000000700500630BA35BF30003B -:101A4000FF00000100000000000000000000000096 +:1019F0000000000000000000000081000060000006 +:101A0000000000000000000000000042000006008E +:101A10000000004200000600004200110000060025 +:101A20000042000000000000000000000000000074 +:101A30000000000000000000000000FF000000FFA8 +:101A40000000000000000000000000000000000096 :101A50000000000000000000000000000000000086 :101A60000000000000000000000000000000000076 -:101A70000000303030BA000000000000000000001C -:101A8000000000000000000000000000BEBE00F0EA -:101A9000FF20FFA200000000000000000000000086 -:101AA0000000000000000000000000000000000036 -:101AB00000000000AAB2FFF30000080830BA35BFEA -:101AC00030003000000100000000000000000000B5 +:101A70000000000000000000000000000000000066 +:101A80000000000000000000000000000000000056 +:101A9000000000000000AAFF0000A0AF0000A0AFFF +:101AA0000000F0FF00003C0000000000000000000B +:101AB00000000000000000000000000000FF000027 +:101AC00000FF000000000000000000000000000017 :101AD0000000000000000000000000000000000006 :101AE00000000000000000000000000000000000F6 -:101AF0000000000030303030000000000000000026 -:101B00000000000000000000000000000000BEBE59 -:101B1000BEBE000000000000000000000000000049 -:101B200000000000000000000000000000000000B5 -:101B3000000000000000AA82FFC30F0F0F0FFF0577 -:101B4000FF05FF55F35100000000000000000000F9 +:101AF00000000000000000000000000000000000E6 +:101B000000000000000000000000000000000000D5 +:101B1000000000000000000000550000A0AF000021 +:101B2000A0AF0000000F00003C000001000000001A +:101B300000000000000000000000000000000000A5 +:101B4000FF000000FFFF0000000000000000000098 :101B50000000000000000000000000000000000085 :101B60000000000000000000000000000000000075 -:101B7000000000000000000000005D550C000000A7 +:101B70000000000000000000000000000000000065 :101B80000000000000000000000000000000000055 -:101B900080008000AEAE2C2C000000000000000091 -:101BA0000000000000000000000000000000000035 -:101BB0000000000000000000CC00F0F0FFFF5555D1 -:101BC00035353535AA00A2000000000000000000F5 +:101B90000000000000000000F5050000AF05000097 +:101BA000FF0F000055FF0000000000000F000F00B5 +:101BB0000000000000000000000000000000000025 +:101BC0000000FF0000000000000000000000000016 :101BD0000000000000000000000000000000000005 :101BE00000000000000000000000000000000000F5 -:101BF000000000000000000000000000555500003B +:101BF00000000000000000000000000000000000E5 :101C000000000000000000000000000000000000D4 -:101C1000000080008000AEAE0C0C00000000000050 -:101C200000000000000000000000000000000000B4 -:101C3000000000000000000000000C003030D7550C -:101C4000D555000000200000000080610006000D56 +:101C1000000000000000FFFF0000F5050000AF0518 +:101C20000000F0000000550000000C0000000F0054 +:101C30000F00000000000000000000000000000095 +:101C4000000015002A00054000A800000000000068 :101C50000000000000000000000000000000000084 :101C60000000000000000000000000000000000074 -:101C7000000000610006000D000080610006000DFC -:101C80000000000000000000000000000000000054 -:101C90000000000000000E000000000000610006CF -:101CA000000D000000610006000D000000000000B3 -:101CB00000000000000000000000000000610E06AF -:101CC000000D000100000000000000000000000006 +:101C70000000000000000000000000000000000064 +:101C80000000000000610006800D00000000000060 +:101C90000000000000000038000010C003E3033E15 +:101CA0000C0D92C003E3033E0C0DC2C00000000007 +:101CB0000010000000000000000000000000000014 +:101CC0000000000000000000000000000000000014 :101CD0000000000000000000000000000000000004 :101CE00000000000000000000000000000000000F4 -:101CF00000000000000000000028F0F800000000D4 -:101D0000202020FF00000000000000000000000074 +:101CF00000000000000000000000000000000000E4 +:101D000000000000000000000000000000000000D3 :101D100000000000000000000000000000000000C3 -:101D20000000F0F0F0F8000000000020FFFF0000CD +:101D200000000F0F0F0F3C3C0000C0C000FF000080 :101D300000000000000000000000000000000000A3 -:101D400080A0000000000000000000000000000073 +:101D40000000000000000000000000000000000093 :101D50000000000000000000000000000000000083 :101D60000000000000000000000000000000000073 -:101D7000000000000000000000000000F0F0000083 -:101D80000000000000FF0000000000000000000054 +:101D70000000000000000000000000000000000063 +:101D80000000000000000000000000000000000053 :101D90000000000000000000000000000000000043 -:101DA00000000000000000280000000000200020CB +:101DA000000000000F0F0F0F0C0CFF55828200FF88 :101DB0000000000000000000000000000000000023 -:101DC0000000C0F0C30000000000000000000000A0 -:101DD000000000F000000000000000000000000013 +:101DC0000000000000000000000000000000000013 +:101DD0000000000000000000000000000000000003 :101DE00000000000000000000000000000000000F3 -:101DF00000000000000000003D3C05000000000065 -:101E00005D0C0C0C00AA30BA0000000000000000BD +:101DF00000000000000000000000000000000000E3 +:101E000000000000000000000000000000000000D2 :101E100000000000000000000000000000000000C2 -:101E200000005D0C0C0C0000000000000000000031 -:101E300000000000000000000000000000000000A2 -:101E40000000000000008000000000000000000012 -:101E50000000000000F00000000000000000000092 +:101E2000000000000000C3000000FF00FF00FAF007 +:101E3000AAA0000000000000000000000000000058 +:101E40000000000000000000000000000000000092 +:101E50000000000000000000000000000000000082 :101E60000000000000000000000000000000000072 -:101E7000000000000000000000003C3C00000000EA -:101E800000000C0C0C0C00AA00AA000000000000CE +:101E70000000000000000000000000000000000062 +:101E80000000000000000000000000000000000052 :101E90000000000000000000000000000000000042 -:101EA000000000000C0C0C0C000000000000000002 -:101EB0000000000000000000000000000000000022 -:101EC000000000000000000000000000C00300212E -:101ED000C01100419008A00300400041A041004013 -:101EE0000002000200080011C0020440004000404F -:101EF0000005000200110041000400200002A011B2 -:101F00000003C040001100022041202100030041D5 -:101F100000410041000400030002004100000020D5 -:101F200010110040001110410040019121000000FB -:101F300000401000000000000000000088000000C9 -:101F40000000400000000000000001802180090422 -:101F50000040210208402102400208042102400200 -:101F6000090208040090114000401182A120109045 -:101F7000410220022140210411042190108440409C -:101F8000088241A008C010844190400208C00000AF -:101F90004040004021821002410240400840004081 -:101FA00010904040009000C040400020040404C055 -:101FB00040900002000200024040009010001040DB -:101FC00010204000000000824000000004040820AF -:101FD0000441904004000220041004100210042167 -:101FE0000820044002200220842084201020214068 -:101FF0000220022084098400844002200220022161 -:102000000200842084208420000000401000410051 -:1020100000000000040002000000000002000010A8 -:10202000020000000000000000000000000010009E -:10203000410000000000000000000000000000005F -:10204000000000000000000000000000020010007E -:102050002100110008000200080011000200050024 -:10206000080005000090080008000900080083002F -:1020700090000300000000000000000200000008C3 -:102080000008000800000000000000080084800034 -:10209000908200000000008200000082000000002A -:1020A000001000040008000000080000000200000A -:1020B0008000900000000000000000000000000010 -:1020C0000000000000880000000800000000000080 -:1020D0008000C00040001000040010000240840096 -:1020E000102088000200100084001000104104033A -:1020F000042182218421882140038221A021A0057E -:10210000880210210403A0091020102140210200A0 -:1021100090021021000040219021040088214004F9 -:102120008803840004040003880202000803880076 -:1021300040000200211004000000C00090000021B7 -:10214000000000004000000000000000000000400F -:1021500000210005040010040400090009901190FA -:10216000080405020002090009880902408405826A -:1021700002900040050202020490028805080590C2 -:1021800008201000000405880990049041020220F4 -:10219000090205040082000004200288020410885D -:1021A0000000009000040400000002000000048809 -:1021B000000000000400080000000900000000000A -:1021C00000000000000000004100040004000000C6 -:1021D00004000000040000880009840400040004D6 -:1021E000884000020020A04088000009000284000E -:1021F0000004000400020002000000040040A004EB -:102200000020000400020020C02000110000000592 -:1022100000000000000000040000000000000000BA -:1022200000000000000000000000000000000000AE -:102230000000000000000000840400000000000016 -:102240000000000000000000000000000800000086 -:1022500000000000000010000008401009200910D4 -:102260000000110009000088000020404004200008 -:1022700020021140008802000403009000021100B7 -:1022800002202000000020002000000000000000CC -:10229000000000000000000000010000000000003D -:1022A000000000000000000000000000000000002E -:1022B0000004000000000000000004010000000015 -:1022C000000000000000000000000000000000000E -:1022D000000000000000000000A00001000000005D -:1022E0000000000000050021000000000003004184 -:1022F00000030000000488080209000382030008AC -:10230000001002090800840300000005902100412C -:102310000003000000000021000000030000900006 -:102320000000000300000000000440000000000561 -:102330000000000000000000000000200440000039 -:102340000000000000000000040000000000000089 -:102350000040000040000800000000000021098843 -:10236000094020021100048800901108050811405E -:1023700040822000098809882088098209040940D0 -:102380001188209020020900118841900590029048 -:1023900009400008400011021040099040900000E0 -:1023A00002904000090002900000050000400988EA -:1023B00009000020000000000000000040000500AF -:1023C00000200900000000000000000000000000E4 -:1023D000000000000000100000000020412000006C -:1023E0000000000000008400000000210000000048 -:1023F0000008000000000003002100210000100878 -:10240000C000C000000000410000100000000000FB -:102410000000002100000041002100008800004071 -:10242000000000008800A000000000000000000084 -:10243000000000000000000000000021000000007B -:10244000000000000000000000000000000000008C -:102450000000000000000000001000210000000348 -:1024600000000290118211C00900400420882090D1 -:1024700020881100091011901100000009400988FE -:1024800020880000000000201100008800000000EB -:10249000000000002000000000000000000000001C +:101EA0000000000000000000C3000000FF00FF1061 +:101EB000FBF1ABA1000000000000000000000000EA +:101EC00000000000000000000000000000004000D2 +:101ED0004002A0000411100000001000044140085E +:101EE000000800088908048800084088C008200805 +:101EF000200820082000000800080000C00820007A +:101F000000000000000800080004209000022000EB +:101F1000200000002000200000030000000020003E +:101F20000000C0000000C000000088038800880096 +:101F30002000000000002000C000A000A0008803D6 +:101F40000000000000000000000000000000004051 +:101F5000104000000040004000C040400000000071 +:101F60000082000000001000400810020010400035 +:101F70000000000000000000000000200000000041 +:101F800000000002000000014001000100210000EB +:101F9000000000000000000000000000000000023F +:101FA00041000000000000000000100000022000BE +:101FB00000000000000000000000000000004000E1 +:101FC0000000000000000000000000000000000011 +:101FD00004000200020004000000000000000000F5 +:101FE00000000000000004000000000000000400E9 +:101FF00000000000000004000000000000000000DD +:1020000000000000000000000000000000000000D0 +:1020100000000000000000000000000000000000C0 +:1020200000000000000000000000000000000000B0 +:10203000114000000000000000000000000000004F +:102040008200000000000000000000000005000009 +:10205000104000000400000000000000000000002C +:10206000040000000000000000000000000000006C +:102070000000000000000000000000000000000060 +:10208000000004000008000800080008000800081C +:102090000008000000080008000800080000000810 +:1020A000008400000008000800080008000800087C +:1020B0000008A00800080008000800080000000848 +:1020C00000000000000400080008000800080008E4 +:1020D0000008800888000000000040004000040064 +:1020E000900000000000000088000005080000804B +:1020F000008000000000000000000000000000213F +:102100000000000000000000000000000080020548 +:10211000008000000000000000000000000000003F +:1021200000000000000000000000000000000000AF +:102130000040000900000021000000218440000050 +:1021400088038408400000210000002100000000F6 +:10215000002100000000400040000400000040900A +:1021600000000000000000000000000000008000EF +:10217000004000020000000000000000000000001D +:10218000000000000000000000000000000000103F +:10219000800000200000000000000000000000009F +:1021A000000000000000000000000000000000002F +:1021B00000004100000000000000000000000000DE +:1021C00000000002000400002100000000000000E8 +:1021D0000000000000000000884004000000000033 +:1021E00010000000000020408200A000A0000000BD +:1021F000A0000000A080820082000000A00000007B +:1022000000000000000000000000000000000000CE +:10221000A0000000000000000000A000000000007E +:10222000000000000000A0004000820084000000C8 +:1022300000009000A0008200000008008200000062 +:10224000080000008200000000400400820000003E +:1022500082000000820008000080200000000000D2 +:10226000020000000000000000002100400000000B +:10227000000000000000002000000000000000003E +:102280000000000008000000000000000000000046 +:10229000000000000000000000000000000000003E +:1022A0000000000000000000000000000800000026 +:1022B000000000000000000000000000000000001E +:1022C00000000000000000000000000008200000E6 +:1022D00008000000000000000000000400000000F2 +:1022E00000000000000000000000000000000000EE +:1022F000000000000000A00001000100000000003C +:10230000000000000000A000000000000800000025 +:102310000000000000000800000000000000A00015 +:1023200000000000000000000000000000000000AD +:1023300000000421000000000021000000008200D5 +:102340000000000000008200000000000000000803 +:10235000000000000000000000000000000010006D +:102360000904090000200000050000000000000032 +:102370000000000000000000000020000400000039 +:10238000000000000000000000000000000000004D +:10239000000000000000000000000000000000003D +:1023A000000000000000000000000000000000002D +:1023B0000000000004000000008800000000000091 +:1023C0000084000000000584009005040000400027 +:1023D00000000000000000000000000000000000FD +:1023E000000000000400200088000420A00000007D +:1023F0009000040004209004000000210400200448 +:1024000000008200822020118200000000000000F5 +:10241000840000000000002008000005000000000B +:102420000000000008110800080082000000000001 +:10243000000200000800000000000420000200214B +:102440008200A000080000000800A00800000000B2 +:102450000002000000000021000008000000002130 +:102460000800000000001100000000000000000053 +:102470000500000000000000000000000000000057 +:10248000000000000000000000000000002000002C +:102490000000000000000200020000000000000038 :1024A000000000000000000000000000000000002C :1024B000000000000000000000000000000000001C -:1024C000000000000000000000000000000000000C -:1024D00000000000000000000000000000020000FA -:1024E00000000000000000000000000000000400E8 -:1024F000000000820000C0000004C0820000C00094 -:1025000000010000000004000000000100000000C5 -:10251000000000A00000C1000004C0820000C00054 -:1025200000010000000000000000000000010000A9 -:102530000000000100820001C1000082C082000092 -:10254000C0000001000000000000000000010000C9 -:102550000200000100100001C0000008C08200005D -:10256000C0000001000000000000000000040000A6 -:10257000000000040480000482000000808000004D -:1025800080000003000000000000000000030000C5 -:1025900000000002030000048800000080800000AA -:1025A00080000003000000000000000000000008A0 -:1025B0000000000000080200001088000000808079 -:1025C0000000800000030000000000000000000880 -:1025D000000000000003108000088200008080805E -:1025E000000080000003000000000900000000005F -:1025F0000000020000000200110090000000030033 -:1026000000000000008080090000110000000000B0 -:102610000000040000001000110010000000030082 -:1026200000000000008080030000000003000000A4 -:1026300000000000050000001000090090000000EC -:1026400003008000000000808020000010000000D7 -:10265000000000000800000009000900110000004F -:102660000300000000000080802000000000000047 -:10267000000000000000000000000200828800004E -:1026800001020200000000C0820000000000000003 -:102690000000000000000000000002000220000016 -:1026A0000100020000000082820000000000010022 -:1026B0000000008200000000000000000800102060 -:1026C000000001001000000000C0820100000000B6 -:1026D00000000000000001000000000084000284EF -:1026E000000001000200000000C0820000000000A5 -:1026F00000000000000000000000C0000008000012 -:1027000001000000000000000000000000000000C8 -:1027100000000000000000000001C00000080000F0 -:1027200001000000000000000000000000000000A8 -:102730000000C0000000000000000000C0000040D9 -:1027400000009100000000000000000000000000F8 -:102750000000000000000000000000018800009060 -:102760000000010000000000000000000000000068 -:10277000000000000000000000000041000900808F -:1027800000004100000000000000004100000000C7 -:1027900000000000000000000000000304100080A2 -:1027A00000004100000000000000004100000000A7 -:1027B0000000000080000000000000000003001086 -:1027C0000080000041000000000000000041000007 -:1027D00000000000000000000000000000080010E1 -:1027E0000000000041000000000000000041000067 -:1027F0000000800000910000001080001100000027 -:102800000041800000080000004100000000084076 -:102810000011800000C100000000801011000000C5 -:1028200000C100000008000000410040000040C15D -:1028300000000000800000C1000000400000850092 -:10284000000000C10000000800000041002000005E -:1028500004030010800000C100000000000002001E -:1028600000000041000000020000004100000000E4 -:102870001020000008000010000000001000880078 -:10288000000000030800000100000001000000003B -:1028900001050000200000400000000082008800C8 -:1028A0000000001102000001000000010001000012 -:1028B000018300000000400000C10000000188000A -:1028C00040000000000310000001000000010001B2 -:1028D0000000008900002000004000000000880087 -:1028E0000400000000911000000000000001000042 -:1028F00000000108000000000000000000000000CF -:1029000000000000811200E00700484200000000C3 -:10291000000048420000000000000000000000002D -:1029200000000000811200E00700484200000000A3 -:102930000000480A00000000000000000041000004 -:10294000000000000000811200E007004842000083 -:1029500000000000484200000000000000000000ED -:10296000000000000000811200E007004842000063 -:1029700000000000484200000000000000000000CD +:1024C0000000000000000000008800000000000084 +:1024D00000000000000000000000000000000000FC +:1024E000000000000000C1000001C1820100C00026 +:1024F0000140C105C00105010082C0900000C0007C +:10250000018304000000C1000001C1820100C0007D +:102510000140C005C000C0010040C0820000C000F2 +:102520000185A000000100010001000100C00001C0 +:10253000820100C0008300010001000800020001C8 +:10254000040100C1000000010001000100C0000101 +:10255000820100C0008300010001000800020001A8 +:10256000400100C100000041C1410041C182414120 +:102570008041418984838020A00800808000004140 +:102580008041040380000041C1410041C1854141B7 +:10259000804141C0C0838305C10300808080004129 +:1025A000804110830000000000410041004100898B +:1025B00000410041008503C100102041008000005F +:1025C000004180410083000000410041004100853E +:1025D0002041004100C003C1001040410080008044 +:1025E00000410041008300004100094100C100009A +:1025F0004141A0410041094140C102410080100019 +:102600004100C14100C180204100404100C10000A3 +:102610004141A0410041094140C1204100828380E5 +:102620004100C14100C18090000241000300000050 +:1026300000804100A000000010000900820000009E +:1026400091004100C10000808000410003000000B3 +:1026500000804100A1000000100005000200000001 +:10266000A0004100C100008080000000000100C106 +:102670000000000141010083000104C1C14100C00C +:102680009100A000400100C182010000000100C1D2 +:102690000000000141010083000190C1A00900C1B8 +:1026A00083C0A000400100C18203000001000100BE +:1026B000000000C00100C000000000002000080869 +:1026C0000020C0002100C100008282000100010042 +:1026D000000000C00100C0000000000088002008C9 +:1026E0000088C0002100C10000828200004000007C +:1026F000C140000000000000C18310830082000080 +:10270000C140000000000000C000000000400000C8 +:10271000C183000000000000C183828300A000008C +:10272000C140000000000000C1000000000000C027 +:102730000001C0C100000000000100C1100400053C +:10274000000100C10000000000010001000000C005 +:102750000001C0C100000000000100C1C004002150 +:10276000000100C100000000000100000000008026 +:102770000041C1C1000000000041C1C00083004110 +:102780000041C1C10000000000218941000000801B +:102790000041C183000000000041C184008300416A +:1027A0000041C1C1000000000021A0410000000064 +:1027B0000080004180C1000000000041008380A033 +:1027C00000C1004100C10000000000410003000002 +:1027D0000080004180C1000000000041008380A013 +:1027E0000041004100C10000000000410041000024 +:1027F000C1C18009808300004100004105C103C1BF +:10280000C1C1008080C10000414100000080090377 +:10281000C1C0804180C100004100004105C103C129 +:10282000C141008080C100004141000280800382DC +:102830000000C100800080C10000410000051000C0 +:102840004100C141000080080000410000058000F7 +:102850004100C100800080C100004100000510005F +:102860004100C1410000800800004140000080009C +:10287000410040C10800408300000000820184C183 +:1028800001C14005C0C040C1000000010000C0C03F +:10289000008240C02001824000000000820104C18B +:1028A00001C1408340C040C100000001000140C0A0 +:1028B00001030000C1004000C0C10000010002008F +:1028C00089000100C1839000C000000001000000E9 +:1028D000C0000100C1004000C0C1000001000200B2 +:1028E00089000100C1839000C000000001000000C9 +:1028F000C00001000000000000004842000000008D +:1029000000004842484200600600484200000000C3 +:1029100000004842000000000000484200000000A3 +:1029200000004842484200600600484200000000A3 +:1029300000004842000000000000000000420000CB +:10294000000000000000811200480700480000005D +:102950000000000000000000000000000042000035 +:10296000000000000012811200480700480000002B +:102970000000000000000000000000000000000057 :102980000000000000000000000000000000000047 :102990000000000000000000000000000000000037 :1029A0000000000000000000000000000000000027 @@ -172760,201 +172760,201 @@ :102AC0000000000000000000000000000000000006 :102AD00000000000000000000000DEAE757B00007A :102AE00000000000000000000000000000000000E6 -:102AF00000000000000000000000DEAE6126034080 -:102B00000000000000000230A000000000000000F3 -:102B10000C4000000000000002C0648661260340F3 -:102B20000000000000000230A000000000000000D3 -:102B30000C4000000000000002C064860000612616 -:102B400003400000000000000230A0000000000070 -:102B500000000C4000000000000002C064866126F6 -:102B600003400000000000000230A0000000000050 -:102B700000000C4000000000000002C06486200538 -:102B800020002040200004410003041104030841F8 -:102B9000A002A00208400041880800020040200472 -:102BA0008984200584822002004100412040904019 -:102BB000C041A003202100020040000200400003A9 -:102BC0000041004000050002000200118240002088 -:102BD00000400040104100110002004000100004BD -:102BE00000000000000000040000000020000004BD -:102BF000000000202000000000030088008000800A -:102C0000A102C002C002A140900240908040C14099 -:102C10004140114009402102410211C02140419030 -:102C2000A02020049002080421901104109010901C -:102C30004108100208A04090104020C00040080247 -:102C40000000214010A008024020409040400802AF -:102C500020022102009000900000004000020004C9 -:102C600000024000000000400090400240020000CE -:102C700000004000000000020000210200020002EB -:102C80000002020002000221020002210209822148 -:102C9000020904400220002004408420020982200E -:102CA000022082C00541028405040220022004089B -:102CB0008400022100000221040000200000000026 -:102CC00000000000000000000000200000000200E2 -:102CD0000000000000000000000000008200000072 -:102CE00000000000000000000000000000000000E4 -:102CF0000000000000000000000000000000004193 -:102D00000010000008000000080000000800000497 -:102D1000000008000300110008000800080000007F -:102D20000200110000042000020520010000000044 -:102D30000000000800000000000402084184008236 -:102D4000000000080000000020000000410000001A -:102D50000000008202C00004000000840084000023 -:102D6000000000080008000000000000050000004E -:102D7000000000080000001000000000000000003B -:102D80000000000800081000848088009000900077 -:102D9000401010000400C011080084088411820053 -:102DA0000221024090028400400010004000902167 -:102DB00010111000100004004005100988021010C6 -:102DC000400040008400000008008800200040000F -:102DD00088218402880040000208080008100800CA -:102DE00004050000400004000000000090080408F2 -:102DF00000000000001000000021000000000000A2 -:102E00000003100000000021099020200240204013 -:102E10002090208905A0099040840040090211906B -:102E200040081020000403900290040409900890C8 -:102E30000290118808024188089003820884048463 -:102E400005A009880482094000000504020484A04A -:102E50004140000011880040008805901100008466 -:102E60000484108400840000000000000000008240 -:102E7000000000820000000000000000000000C010 -:102E80001108020000A00300004000040004042018 -:102E90000404844104040010C0110000C0020008B2 -:102EA00000410004002000110002008210C0C0098F -:102EB0001040840000000004002000040000A00076 -:102EC00000020000002100000000000000000000DF -:102ED00000000000000000000000000000000000F2 -:102EE0000004000400400000002100000000000079 -:102EF00000000000000000101000000000000000B2 -:102F00000000000000001000000000001102090293 -:102F100091C09190200080100040112040C0208876 -:102F20000204208802C01104000200900004000482 -:102F300040200090000000904040004004880000C5 -:102F40000000000000000000000000200000000061 +:102AF00000000000000000000000DEAE67E643407A +:102B00000000000000000231E000000000000000B2 +:102B10000C4000000000000002C267E667E6434088 +:102B20000000000000000231E00000000000000092 +:102B30000C4000000000000002C267E6000060C612 +:102B400003000000000000000031E0000000000071 +:102B500000000C0000000000000000C0630660C61A +:102B600003000000000000000031E0000000000051 +:102B700000000C0000000000000000C06306000020 +:102B800040004011410040004000000000004000B3 +:102B9000040000090000880800000440400404000C +:102BA000200020082008200800000000000020006D +:102BB00084000000000820008805000020000001BB +:102BC0000000400000000000000800008808000429 +:102BD00020002000000488082000200000002000C1 +:102BE00000002000000000000000000000000000C5 +:102BF0002002200000002000000000000000000073 +:102C000000404140000004000040000200000004B9 +:102C10000002000200020000050000000008000899 +:102C2000404000004000004000020000000200029E +:102C30000000000000000000200000000000000074 +:102C40000000000040000000000000000000000044 +:102C50000000000000000000000020000000000054 +:102C60000000000000000000000000000000200044 +:102C70000000000000000000000000000000000054 +:102C800000000200020082000200020000000000BA +:102C900000000000000000000040000000000000F4 +:102CA000000000000000000000000008000000100C +:102CB0000000044004000020082000000000000084 +:102CC0000000000000000000000000000000000004 +:102CD00000000000000000000000000000000000F4 +:102CE00000000000000000000080000082000000E2 +:102CF0000000000000000000000090000000000044 +:102D000000000000000000000000000000000000C3 +:102D100000000000000000000000000000000000B3 +:102D200000000000000000000000020000000000A1 +:102D30000008000080008000000900010008000871 +:102D400000080008000000080000000800080084D7 +:102D5000000000040000000000000008000400085B +:102D60000008000400080008000000200304000818 +:102D700000020004008400000002000800040002B9 +:102D8000000200000008840005004100110010004E +:102D900000000000000040034000000800000000A8 +:102DA0000003000000080000000000000000000018 +:102DB0000000000000000000000000000000000013 +:102DC0000000000000000000000000000000000003 +:102DD00000000008000000000000000000000000EB +:102DE00000030000000000000000000000210000BF +:102DF00000000000000000000000000000210000B2 +:102E00000000000000000021000004000400200079 +:102E1000000004000000000000000000000000109E +:102E2000100000080000000000000000000000008A +:102E3000410003000000000000000000000000004E +:102E40000000000000000000000000002100000061 +:102E5000210021002100210000002100000800A025 +:102E6000000000000000000010004100050040408C +:102E7000210003002100000005000300000800A05D +:102E800000000008000000000000000400200140D5 +:102E90000020C00200000000000000401000000000 +:102EA00000000000400000000003000000000000DF +:102EB000040000000800880000000000000000007E +:102EC00000000000000008000000000000000000FA +:102ED000000008000000000000000000A00000004A +:102EE0000010000040000000000000008200000010 +:102EF00000000000000000000000000400000000CE +:102F00000000000040000000400000000000200120 +:102F1000200000010000000000000002000000008E +:102F200000000000000000000000000000000000A1 +:102F30000000000000000000000000000000000091 +:102F40000000000000000000000000000000000081 :102F50000000000000000000000000000000000071 :102F60000000000000000000000000000000000061 -:102F70000000000000000000000000000000000051 -:102F80000000000000000000000000000000040934 -:102F90000000000000000003021140030021042093 -:102FA00000090008004020094000880020030400B8 -:102FB000000000050000000000000000000000000C -:102FC0000000000000008810000000000000000069 -:102FD000000000028400000000000000000000006B -:102FE00000000000001000000000000000000000D1 -:102FF00000000000000000000000000800000000C9 -:1030000000000000000000100000000000000000B0 -:10301000850402020500059040882182040202080E -:103020001140118220900308118409021090410878 -:1030300041884188080205A010400502404021084F -:10304000024008020308400811102000020400009A -:10305000000009A02188089005004040410004C0FC -:1030600005821004050000A020A00004000000005C -:10307000400040A000000000002000A00084008468 -:1030800000A0110000A0000002000090000000005D -:1030900000000000A00040004000001000210021BE -:1030A00000030000000000000000002100000000FC -:1030B0000000001000008400C00000000000A00814 -:1030C0000000000000000000000000008421000853 -:1030D00000080000000000000000000000000000E8 -:1030E00000080000000000000000000000000000D8 -:1030F00000080008000800080000000000000000B0 -:1031000000000000000000080008000000000000AF -:103110000000000004081110A00884101191098813 -:1031200011902082118200101190009011904000A7 -:1031300000880000002000000004000400000000DF -:1031400040000004000000400000050000000000F6 -:10315000000000000000080000000800000000005F +:102F70000000410000000000000000000000000808 +:102F80000000000000000000000000000000010040 +:102F900004000000100000000021000000210000DB +:102FA0000000018000000000000000000003000895 +:102FB0008200000800000000000000000000000087 +:102FC0000000000000000000000000000000000001 +:102FD00000000000000000000000000000000000F1 +:102FE00000000000000000000000080000001000C9 +:102FF00000000000000000080003000000000000C6 +:1030000000000000000000080000000000000000B8 +:1030100004000900000091002100000000080000E9 +:103020000000100008100000000000000000000078 +:103030000000000000000000000000000000000090 +:103040000000000000000300000021000300000059 +:10305000000000000000000000000000000003006D +:10306000000800000800000003000000002000002D +:103070000040000000000000000040C00000080008 +:1030800000A000000800008408000000000000000C +:103090000000108000000080000000000000000917 +:1030A0000000000000000000000000000000000020 +:1030B000000000000000000000000200020000000C +:1030C0000000000008000000000000008200000076 +:1030D00008000000080008000800000008000000C8 +:1030E00000000000000000000000000000000000E0 +:1030F00000000800000008000000000000000000C0 +:1031000000000000000000000000000008000800AF +:1031100000020800802011000020200000000000B4 +:10312000000020000000000000000000020000007D +:10313000000000000000000000000000000000008F +:10314000000000000000000000000000000000007F +:10315000000000000000000000000000000000006F :10316000000000000000000000000000000000005F -:10317000000000000000000000000000000000004F +:103170000000000000000004000000000004000047 :10318000000000000000000000000000000000003F -:1031900000000000000040000090C09008400000C7 -:1031A0000000008800100000000000000000000087 +:10319000000000000000010000000000000000002E +:1031A000000000000000000000000000000000001F :1031B000000000000000000000000000000000000F :1031C00000000000000000000000000000000000FF -:1031D00000000000000000000000000000000000EF +:1031D00000000000000000020000000000000000ED :1031E00000000000000000000000000000000000DF -:1031F00000000000000000000000000000000000CF +:1031F0000000000000000000A0100020000288C0B5 :1032000000000000000000000000000000000000BE -:103210000000010040000000800011800900808053 -:10322000000000000000008000000000000000001E -:103230000000000000000000000000000900000085 +:10321000000000000000000011002100000000007C +:10322000000000000000000000000000000000009E +:10323000000000000000000000000000000000008E :10324000000000000000000000000000000000007E -:103250000000000000000000000000000000090065 +:10325000000000000000000000000000000000006E :10326000000000000000000000000000000000005E -:10327000000000000000000000000000000000004E +:10327000000000000000000000008000000000804E :10328000000000000000000000000000000000003E -:103290000000000040000000000000099141088883 -:1032A000028000000080000200800000000000009A -:1032B0000000000000000000000000080000000204 -:1032C00000000000000000000000000000000000FE -:1032D00000000000000000000000000000000000EE -:1032E000004100000000000000000000000000009D -:1032F00000000000000000000000000000000000CE -:1033000000000000000000000000000000000000BD -:1033100000000000088041004040022000008201BF -:1033200009119090000000C000000004000000009F -:10333000000000000000000000000000000100008C -:10334000000000000000000000000000000000007D -:10335000000000000000000000000000000000006D -:10336000000000010000000000000000000000005C +:10329000000000000000000000000041098000095B +:1032A000000000000000000000000000000000001E +:1032B000000000000000000000000000000000000E +:1032C000000000000000000000000000008000007E +:1032D000008000000000000000000000000000006E +:1032E00000000000000000000000000000000000DE +:1032F00000000000000000000000000000000020AE +:10330000008000000000000000000000000000003D +:10331000000000000000000000000000000101109B +:10332000000000020000000000000000000000009B +:10333000000000000000000000000000000000008D +:103340000000000000000000000000000000000479 +:10335000000000C0000000000000000000000000AD +:10336000000000000000000000000000000000005D :10337000000000000000000000000000000000004D -:10338000000000000000000000000000000000003D -:103390000000000000000040000001000000C0002C -:1033A0004040909010030000000004000200000064 +:10338000000000100000000000000000000000002D +:10339000000000000000000000000000000000002D +:1033A0008800100000000000020000000000000083 :1033B000000000000000000000000000000000000D -:1033C00010000000010000000000000000000000EC -:1033D00000000000000000000000000000000000ED +:1033C00000000000000000000000000000000000FD +:1033D00000004000000000000000000000000000AD :1033E00000000000000000000000000000000000DD :1033F00000000000000000000000000000000000CD -:1034000000000000000000000000000000000000BC -:1034100000000000000000000000000000010000AB -:10342000800000808000821000000000800000000A +:1034000010900008009008880000000000000000F4 +:1034100000000000000000000000000000000000AC +:103420000200000080004100000080000000000059 :10343000000000000000000000000000000000008C -:10344000000000000000410000000000000000003B -:10345000000000000000000000000000000000006C +:10344000000000000000000000000000000000007C +:1034500005000000800000000000000000000000E7 :10346000000000000000000000000000000000005C :10347000000000000000000000000000000000004C -:10348000000000000000000000000000000000003C -:103490000000000000000000000000100009001003 -:1034A000101080000000800000008000000200007A +:1034800000000000000000000080000000000000BC +:10349000000000000000000000000000000000002C +:1034A0000000000000110000080000000000000003 :1034B000000000000000000000000000000000000C :1034C00000000000000000000000000000000000FC -:1034D00000000000000000000000000000000000EC +:1034D00000000020000000000000000000000000CC :1034E00000000000000000000000000000000000DC :1034F00000000000000000000000000000000000CC -:1035000000000000000000000000000000000000BB -:10351000000000000000000000000000100040005B -:10352000050008109000909010C00000100090015D -:103530000000020000000000000000000000000089 +:10350000000000000000800000000000000000003B +:1035100000000000000000000000000000000000AB +:103520000000000000000001000001000000000099 +:10353000000000000000000000000000000000008B :10354000000000000000000000000000000000007B -:10355000000000000000000000000000000000006B +:10355000000000000001000000000000000000006A :10356000000000000000000000000000000000005B :10357000000000000000000000000000000000004B -:10358000000000000000000000000000000000003B -:10359000000000000000000000000000000000101B -:1035A000010001000100484200E007008400001112 -:1035B00000000700410000000000000000000000C3 -:1035C000000000000000000000E000000082000099 -:1035D00000000000000000000000000000000000EB -:1035E0000000000000000000000000E00000008279 +:103580000000000000009000020010008400000015 +:10359000000000000000000000000000000000002B +:1035A000000000000000000000E0070481000000AF +:1035B000000000000000000000000000000000000B +:1035C00000000000000000000000000000000000FB +:1035D000000000000000008200000704000A000054 +:1035E00000000000000000000000000000000000DB :1035F00000000000000000000000000000000000CB -:1036000000000000000000000000000000000000BA +:1036000000000000000000000000000006000000B4 :1036100000000000000000000000000000000000AA -:103620000000000000000000F6F0F6F0FF66FFF07A -:10363000FF3CC3000000000000000000000000008C +:10362000000000000000000000000000000000009A +:10363000000000000000000000000000000000008A :10364000000000000000000000000000000000007A :10365000000000000000000000000000000000006A :10366000000000000000000000000000000000005A :10367000000000000000000000000000000000004A -:10368000000000000000000000000000000000003A -:10369000000000000000000000000000000000002A -:1036A0000000000000000000000066FF6600666683 -:1036B00000F0FF3CC300000000000000000000001C +:10368000000000000000000000000000F0F01FFF3C +:103690001FFF00000000000000000000000000000C +:1036A000000000000000000000000000000000001A +:1036B000000000000000000000000000000000000A :1036C00000000000000000000000000000000000FA :1036D00000000000000000000000000000000000EA :1036E00000000000000000000000000000000000DA :1036F00000000000000000000000000000000000CA -:1037000000000000000000000000000000000000B9 -:1037100000000000000000000000000000000000A9 +:103700000000000000000000000000009090F0C0E9 +:103710000FFF3FFF0000000000000000000000005D :103720000000000000000000000000000000000099 :103730000000000000000000000000000000000089 :103740000000000000000000000000000000000079 @@ -172963,40 +172963,40 @@ :103770000000000000000000000000000000000049 :103780000000000000000000000000000000000039 :103790000000000000000000000000000000000029 -:1037A00000000000000000000000000000003E3E9D -:1037B0003E3E606060F02D2D2D2D000000000000C9 +:1037A0000000000000000000000000000000000019 +:1037B0000000000000000000000000000000000009 :1037C00000000000000000000000000000000000F9 :1037D00000000000000000000000000000000000E9 :1037E00000000000000000000000000000000000D9 :1037F00000000000000000000000000000000000C9 :1038000000000000000000000000000000000000B8 -:1038100000000000000000000000000000000000A8 +:1038100026009000000000000000000000000000F2 :103820000000000000000000000000000000000098 -:1038300006F606F6000000F02D2D2D2D00000000EC +:103830000000000000000000000000000000000088 :103840000000000000000000000000000000000078 :103850000000000000000000000000000000000068 :103860000000000000000000000000000000000058 :103870000000000000000000000000000000000048 :103880000000000000000000000000000000000038 -:103890000000000000000000000000000000000028 +:1038900000002600909900000000000000000000D9 :1038A0000000000000000000000000000000000018 -:1038B00000000061002780010000000000280500D2 -:1038C00000A0000000000000000000000000000058 -:1038D000000000610007000D000000000000000073 -:1038E00000000000000000000000000000000000D8 -:1038F0000000000000610007000D00000000000053 +:1038B000000005580A06050C04A0000000000000E6 +:1038C00000000000000000000000000000000000F8 +:1038D00000000000000000000000000000000000E8 +:1038E000000005180A20050004A0000000000000E8 +:1038F00000000000000000000000000000000000C8 :1039000000000000000000000000000000000000B7 -:1039100000000000000000000000000000000000A7 -:103920000000000000000000000000000061000630 -:10393000000D000000000000AAAAAAAA00000000D2 +:103910000000000000004000000000000000000067 +:103920000000000000000000000000000000000097 +:103930000000000000003C3CFFFF00000000000011 :103940000000000000000000000000000000000077 :103950000000000000000000000000000000000067 :103960000000000000000000000000000000000057 :103970000000000000000000000000000000000047 :103980000000000000000000000000000000000037 :103990000000000000000000000000000000000027 -:1039A00000000000000000000000000000005D0CAE -:1039B0000C0C202020FF000000000000FFFF000092 +:1039A0000000000000000000000000000000000017 +:1039B00000000000000000003C3C0000000000008F :1039C00000000000000000000000000000000000F7 :1039D00000000000000000000000000000000000E7 :1039E00000000000000000000000000000000000D7 @@ -173004,7 +173004,7 @@ :103A000000000000000000000000000000000000B6 :103A100000000000000000000000000000000000A6 :103A20000000000000000000000000000000000096 -:103A30000C0C0C0C000000FF00000000000FF0FF59 +:103A3000000000000000000000000000F0F00000A6 :103A40000000000000000000000000000000000076 :103A50000000000000000000000000000000000066 :103A60000000000000000000000000000000000056 @@ -173012,445 +173012,445 @@ :103A80000000000000000000000000000000000036 :103A90000000000000000000000000000000000026 :103AA0000000000000000000000000000000000016 -:103AB0000000000000000030AABA00000000000F63 -:103AC000F0FF000000000000000000000000000007 +:103AB0000000000000000000000000000000F0F026 +:103AC00000000000000000000000000000000000F6 :103AD00000000000000000000000000000000000E6 :103AE00000000000000000000000000000000000D6 :103AF00000000000000000000000000000000000C6 :103B000000000000000000000000000000000000B5 :103B100000000000000000000000000000000000A5 :103B20000000000000000000000000000000000095 -:103B300000000000000000000000AAAA1000880099 -:103B4000200010808800C000080088009084882130 -:103B5000C0048821100488210440002088024020ED -:103B6000204010002004100200030040C040C0208C -:103B700000200000C00220020004002000030040DA -:103B800000112020001100400040004100410011C0 -:103B9000204100410002C000200200110004000288 -:103BA0000004200000000000000301800008400025 -:103BB0004000400000000000000000000000204025 -:103BC000204010204102414020A0202040402020E1 -:103BD00020202120002021402020C120080421A0F5 -:103BE00041C0212009401040202008402102082027 -:103BF00021C010402102000440C0214041C000000B -:103C000040C0204008C008C0209041C02140009022 -:103C10002040004010000040200240400040009042 -:103C200040C04040410040024000004020040000ED -:103C30000000200000000000000000004000000024 -:103C400008400310021082100840084084410440DC -:103C500085C0054091208505021084200241080995 -:103C6000022102410409022003090210022002413C -:103C70000440004100400141840000000000820037 -:103C80000000000000000000000000000200000032 -:103C90000200000000000000000000000000020020 -:103CA00000400000000000000000000000000000D4 -:103CB0000000000000000000000000000200000002 -:103CC000820000C002A040C0000400200020084084 -:103CD00003A0042004840440044005880040050833 -:103CE0000340002000880040088408C0002000082D -:103CF00004000000000000A00840000802000210BC -:103D0000020000000000020002000000000800089D -:103D100040840400000002000000000000080000D1 -:103D200000000300000002000000000800840008FA -:103D300000000404000000080000000000840000EF -:103D400002000200402190A1824110219041822175 -:103D5000104188418210C020A0101020A020844172 -:103D6000901085000400A010880088414003C0081E -:103D700010000902900004002000204190009000F3 -:103D8000100088400000400088000400100004007B -:103D9000040004000440040004004000040040004B -:103DA0004000400988000000900000000000000072 -:103DB0000000880804000000000000000400000863 -:103DC00000000000000041844040050841C04090D0 -:103DD00004024004410402880591040405891090FE -:103DE000009004900488059041021004058421008D -:103DF00021882040400008884104102002901000D3 -:103E00000902088804900000002040900000400053 -:103E100010000490000011000000000800400000A5 -:103E20000000000000A000000000000000000000F2 -:103E30000000000000000000000000000000110071 -:103E400000000000000040008409C008C002822079 -:103E50000802A011C0110010841110411080040943 -:103E60000020C011004100200011A011C004C004B6 -:103E70000011000900040000000000000011000013 -:103E80000008000000100000000000000009000011 -:103E9000000000000000000000080000000000001A -:103EA0000000004000400000004000000000000052 -:103EB0000000000000000000000000000000000002 -:103EC000000008000800000000000002090409A02A -:103ED00009400004400800A0008800C02084202081 -:103EE00084C04188001004004090000000020010CF -:103EF00000900020000400000000000400400000CA -:103F000000000200000000000000000000000000AF +:103B30000000000000000000000000000000000085 +:103B40000000000000002000000000000000040051 +:103B50000000000000000000000020000000000045 +:103B60000000000000000000000000000000000055 +:103B70000000000000000000000020000000000025 +:103B80000000000000000000000000000000000035 +:103B9000C0000000C00000000000000000000000A5 +:103BA000000000000000000000108400020000007F +:103BB000200000002008000000000000000000C0FD +:103BC000410000000040008210A000002000100012 +:103BD00000000020000000000000000000000000C5 +:103BE00000000000000000002000000000020000B3 +:103BF00000000000000000000000000000000000C5 +:103C000000000000000200000000000000000000B2 +:103C10000000000000000000000000000000400064 +:103C20000000000000820000000000000000000012 +:103C30004000000000000000000000000000000044 +:103C400000410200004000090200022120408200E1 +:103C5000000000000200000000000000200004003E +:103C60000000000000000000000000000000000054 +:103C70000000000000000000000000000000000044 +:103C80000000000000000000000000000000000034 +:103C900000400000000000000000000000000000E4 +:103CA000000800000000000000000000000000000C +:103CB000820800000000000000000000000000007A +:103CC000084000400000000002000000000000006A +:103CD0000208000020002000020000002000000078 +:103CE0000084004000000000000000000000000010 +:103CF0000040020000000000000000000000000082 +:103D000000000000040000000200000000000000AD +:103D10000000001000000000000000000000000093 +:103D20000000000000000000000000000000000093 +:103D3000000004000000000000000000000000007F +:103D40000000000808088800880010008400840033 +:103D50000000000000000000000000000000000063 +:103D60000000000000000000000000000000000053 +:103D70000000000800000800000000000000000033 +:103D80000000000000000000000000000000000033 +:103D9000000000000000000084000000840000001B +:103DA0000000000000000000000000000000000013 +:103DB0000000900040000000080000000800000023 +:103DC00000000000000000000000000000000000F3 +:103DD00000000000000000000000000000000000E3 +:103DE00000000000000000000000000000000000D3 +:103DF00000000000000000000000000000000000C3 +:103E000000000000000000000000000000000000B2 +:103E100000000000000000000000000000000000A2 +:103E200000004000000000000000000000002182AF +:103E300000820000000400000000000000000000FC +:103E40000000000000000000000900000000000069 +:103E50000000000000000000000000000000000062 +:103E60000000000000000000000000000000000052 +:103E70000000000000000000000000000000000042 +:103E80000000000000000000000000000000000032 +:103E90000000000000000000000000000000000022 +:103EA0000000000000000000000000000000000012 +:103EB00000000000000000000010000000000000F2 +:103EC000000000000000000000000000000000886A +:103ED00000000000000011000000000000000000D1 +:103EE000000000000000000000880000000000004A +:103EF00000000000000000000000000000000000C2 +:103F000000000000000000000000000000000000B1 :103F100000000000000000000000000000000000A1 -:103F20000000000000000000000000000000000091 -:103F30000000000000000000000000000000000081 -:103F4000000000000000080000000000820088035C -:103F5000400320081008904188050403C0000400B5 -:103F6000020804200200A040C0200400100320200A -:103F700082000002000008008400000400800000AD -:103F80000104002008000000000000000000000004 +:103F200000000000000000000000000009000090F8 +:103F30000000000000400000000000000000000041 +:103F4000000000A0000000000000000000000000D1 +:103F50000000000000000000000000000000000061 +:103F60000000000000000000000000000000000051 +:103F70000000000000000000000000000000000041 +:103F80000000000000000000000000000000000031 :103F90000000000000000000000000000000000021 :103FA0000000000000000000000000000000000011 -:103FB00000000000000000000000000000000003FE -:103FC00000000000000000000000000000081020B9 -:103FD00021901140409021A0412005022190110420 -:103FE000098841824183050840A01000C1020940B0 -:103FF0004040118802404102830800204100051022 -:10400000000008010004020000001102400000004E -:104010000400000011204108004008080002400090 -:104020001000004000000000000000000000000040 -:104030000000000000200000000800000000000058 -:104040000000000000000004044020000000000008 -:10405000A0200209A009A005C0090000A0090005D0 -:10406000A100040000200008008504040080000076 -:10407000C00508000000000000080800000008213A -:1040800000000000001000400000000000000021BF +:103FB00040000000000000000000000400000000BD +:103FC00000000000002100000000000000001004BC +:103FD000000000840020000000000000000000003D +:103FE00000000000000000000000000000000000D1 +:103FF00000000000000000000000000000000000C1 +:104000000000008800000000000000000000000028 +:1040100000000000000000000000000000000000A0 +:104020000000000000000000000000000000000090 +:10403000090405000000200000000000000000004E +:104040000000000000000000000000000000000070 +:10405000000000000000000000000000000200005E +:104060000000000000000000000000000000000050 +:104070000000000000000000000000000000000040 +:104080000000000000000000000000000000000030 :104090000000000000000000000000000000000020 :1040A0000000000000000000000000000000000010 -:1040B0000000000000000000000000000000000000 -:1040C00000000000000000000000000000000000F0 -:1040D0000000090804C00484110209822088000835 -:1040E000090004209110090109002010800000201F -:1040F00000A00000000000000000000080000000A0 -:10410000800000000000000100000000000000002E -:10411000000000000000000000001100000000008E +:1040B00008000000000000000000000000000000F8 +:1040C00001000000000000000021000000000000CE +:1040D00000000000090000000900000000000000CE +:1040E00000000000000000000000000000000000D0 +:1040F00000000000000000000500000000000000BB +:1041000000000000000000000000000000000000AF +:10411000000000000000000000000000000000009F :10412000000000000000000000000000000000008F -:10413000000000000000000000000000000000007F -:10414000000000000000000000000000000000006F -:1041500000000000000001008800000000000000D6 -:1041600000000000000000000000000010880000B7 -:10417000008810100000000000000000889001A0DE -:104180008882000811032090919182900000000025 +:1041300000000000000000000000000000C00000BF +:1041400000000284000000000000000000000000E9 +:10415000000000000000000000000000000000005F +:10416000000000000000000000000000000000004F +:10417000000000000000000000000000000000003F +:10418000000000000000000000000000000000002F :10419000000000000000000000000000000000001F :1041A000000000000000000000000000000000000F -:1041B00000000000000000000000000000000000FF -:1041C00000000000000000000000000000000000EF -:1041D000000000000000000040000000000000009F +:1041B00000000000000000000000000000000002FD +:1041C00000880082000800000000000000000000DD +:1041D00000000000000000000000000000000000DF :1041E00000000000000000000000000000000000CF -:1041F000000000808080000000000000000000003F -:104200004100000000809191A100A01180000000F9 +:1041F00000000000000000000000000000000000BF +:1042000000000000000000000000000000000000AE :10421000000000000000000000000000000000009E :10422000000000000000000000000000000000008E :10423000000000000000000000000000000000007E -:10424000000000001000000000000000000000005E -:104250000000000000000000000080008200A100BB -:10426000001000000000000000000000000000003E -:1042700080000003008080000000000000000000BB -:104280000000000080800000918080031121000068 +:1042400000800000000000000000000000000000EE +:10425000000000000000000000000000000000005E +:10426000000000000000000000000000000000004E +:10427000000000000000000000000000000000003E +:10428000000000000000000000000000000000002E :10429000000000000000000000000000000000001E :1042A000000000000000000000000000000000000E :1042B00000000000000000000000000000000000FE -:1042C00000000000000000110000000000000000DD -:1042D00000000000000000000000000010001000BE -:1042E00008000000000000000000000000100000B6 -:1042F00000880200020110C010040000000000004D -:10430000000088002000A0089000A1104001894111 -:1043100090200000000000000000000000000000ED +:1042C00000000000000300000000000000000000EB +:1042D00000000000000000000000000000000000DE +:1042E00000000000000000000000000000000000CE +:1042F00000000000000000000000000000000000BE +:1043000000000000000000000000000000000000AD +:10431000000000000000000000000000000000009D :10432000000000000000000000000000000000008D :10433000000000000000000000000000000000007D -:10434000000000000000000000000000000000006D +:10434000000000000000009100880008000000004C :10435000000000000000000000000000000000005D -:1043600084010100000000000000000000000000C7 -:1043700010000000C0900008000888A000000000A5 -:1043800000000000842000011000A00090000191B6 -:104390000100099100000000000000000000000082 +:10436000000000000000000000000000000000004D +:10437000000000000000000000000000000000003D +:10438000000000000000000000000000000000002D +:10439000000000000000000000000000000000001D :1043A000000000000000000000000000000000000D :1043B00000000000000000000000000000000000FD -:1043C00000000000000000000000000000000000ED -:1043D000000000000000000000000000000000419C -:1043E00000108021400200000000000000000900D1 -:1043F000000000000000800000000000100000002D -:1044000000000000000000080021001080200000D3 -:1044100011910500919100000000000000000000D3 +:1043C0000000000000000400000000008800000061 +:1043D00000000000000000000000000000000000DD +:1043E00000000000000000000000000000000000CD +:1043F00000000000000000000000000000000000BD +:1044000000000000000000000000000000000000AC +:10441000000000000000000000000000000000009C :10442000000000000000000000000000000000008C :10443000000000000000000000000000000000007C :10444000000000000000000000000000000000006C :10445000000000000000000000000000000000005C -:10446000000000000000001100000000000000003B -:10447000000000400000000080000091800000006B -:10448000000000000000000080108000008000009C -:104490000090919100809103000000000000000056 +:10446000000000000000000000000000000000004C +:10447000000000000000000000000000000000003C +:10448000000000000000000000000000000000002C +:10449000000000000000000000000000000000001C :1044A000000000000000000000000000000000000C :1044B00000000000000000000000000000000000FC :1044C00000000000000000000000000000000000EC -:1044D00000000000000000000000000000000000DC +:1044D000800000000000000000000000000000005C :1044E00000000000000000000000000000000000CC -:1044F00000000000000100000000100010C01010BB -:10450000880000000000000000004001A008884072 -:10451000900040C105A140400501000000000000DE +:1044F00000000000000000000000000000000000BC +:1045000000000000000000000000000000000000AB +:10451000000000000000000000000000000000009B :10452000000000000000000000000000000000008B :10453000000000000000000000000000000000007B -:10454000000000000000000000000000000000006B -:10455000000000000000000000000000000000005B +:104540000000000000000000000000008800900053 +:1045500082000800000000000000000000000000D1 :10456000000000000000000000000000000000004B -:10457000000000000000000007000000000600002E -:1045800007004121000000000000000000000000C2 -:1045900000004200600000E0000084000000000015 +:10457000000000000000000000000000000000003B +:10458000000000000000000000000000000000002B +:10459000000000000000000000000000000000001B :1045A000000000000000000000000000000000000B :1045B00000000000000000000000000000000000FB :1045C00000000000000000000000000000000000EB -:1045D00000E00000000000000000000000000000FB +:1045D00000000000000000000000000000000000DB :1045E00000000000000000000000000000000000CB -:1045F0000000000000000000000000000000EF0FBD -:10460000EFFFD0D0F8F80000000000000000F3F049 -:10461000A30041414141100000000A0A00000000CF +:1045F00000000000000000000000000000000000BB +:1046000000000000000000000000000000000000AA +:10461000000000000000000000000000000000009A :10462000000000000000000000000000000000008A :10463000000000000000000000000000000000007A :10464000000000000000000000000000000000006A -:10465000000000000000000000000000000000005A +:10465000AFAFAFAF0000000000000000000000009E :10466000000000000000000000000000000000004A :10467000000000000000000000000000000000003A -:10468000EFFFEFFF50FA50FA0000000000000000BA -:10469000F3F0A300414141413C003C000000000018 +:10468000000000000000000000000000000000002A +:10469000000000000000000000000000000000001A :1046A000000000000000000000000000000000000A :1046B00000000000000000000000000000000000FA :1046C00000000000000000000000000000000000EA -:1046D00000000000000000000000000000000000DA +:1046D0000000BEAABEFF00000000000000000000B5 :1046E00000000000000000000000000000000000CA -:1046F00000F00000000000000000000000000000CA -:104700000000F3F3F0F05F0F1E1E00000000000039 -:10471000000000000000000000001F3F1F3F555533 -:104720005400000000000000000000000000000035 +:1046F00000000000000000000000000000000000BA +:1047000000000000000000000000000000000000A9 +:104710000000000000000000000000000000000099 +:104720000000000000000000000000000000000089 :104730000000000000000000000000000000000079 :104740000000000000000000000000000000000069 -:104750000000000000000000000000000000000059 +:1047500000000000FFFFFFFC000000000000000060 :104760000000000000000000000000000000000049 -:10477000000000F000000000000000000000000049 -:1047800000000000555555550A0F1E1E0000000080 -:104790000000000000C30083000080001F1C1F1FDA -:1047A00055555555000000000000000000000000B5 +:104770000000000000000000000000000000000039 +:104780000000000000000000000000000000000029 +:104790000000000000000000000000000000000019 +:1047A0000000000000000000000000000000000009 :1047B00000000000000000000000000000000000F9 :1047C00000000000000000000000000000000000E9 -:1047D00000000000000000000000000000000000D9 -:1047E0000000000000000000000000000000006168 -:1047F0000006000D000100000000000000000500A0 -:104800000A08050000A08000002800000000000049 -:1048100000000000000000610006000D00000061C3 -:104820000001800100000000000000000000000006 +:1047D000000000000000FFEBFFE800000000000008 +:1047E00000000000000000000000000000000000C9 +:1047F00000000000000000000000000000000000B9 +:1048000000000000000000000000000000000000A8 +:104810000000000000000000000000000000000098 +:104820000000000000000000000000000000000088 :104830000000000000000000000000000000000078 :104840000000000000000000000000000000000068 -:10485000000000000000000000610007000D0000E3 +:104850000000000000000000000030000000000028 :104860000000000000000000000000000000000048 :104870000000000000000000000000000000000038 :104880000000000000000000000000000000000028 -:104890000000000000000000000000000000000810 -:1048A000EB14EB14F5F50000000000000000000020 +:104890000000000000000000000000000000000018 +:1048A0000000000000000000000000000000000008 :1048B00000000000000000000000000000000000F8 :1048C00000000000000000000000000000000000E8 :1048D00000000000000000000000000000000000D8 :1048E00000000000000000000000000000000000C8 -:1048F0000000000000000040000000000000000078 +:1048F00000000000000000000000000000000000B8 :1049000000000000000000000000000000000000A7 :104910000000000000000000000000000000000097 -:104920000028EB14EB14FFFF000000000000000063 +:104920000000000000000000000000000000000087 :104930000000000000000000000000000000000077 :104940000000000000000000000000000000000067 :104950000000000000000000000000000000000057 :104960000000000000000000000000000000000047 -:1049700000000000000000005500000000000000E2 +:104970000000000000000000000000000000000037 :104980000000000000000000000000000000000027 :104990000000000000000000000000000000000017 -:1049A00000000000FAFA0505FF00FF00000000000B +:1049A0000000000000000000000000000000000007 :1049B00000000000000000000000000000000000F7 :1049C00000000000000000000000000000000000E7 :1049D00000000000000000000000000000000000D7 :1049E00000000000000000000000000000000000C7 -:1049F0000000000000000000000055000000000062 +:1049F00000000000000000000000000000000000B7 :104A000000000000000000000000000000000000A6 :104A10000000000000000000000000000000000096 -:104A2000000000000000F5F5000000EB00EB0000C6 +:104A20000000000000000000000000000000000086 :104A30000000000000000000000000000000000076 :104A40000000000000000000000000000000000066 :104A50000000000000000000000000000000000056 :104A60000000000000000000000000000000000046 -:104A70000000000000000000840988008400841009 -:104A800010008800A000C0001020C1A0C0A0C0403D -:104A900088040003C040C0118820A0401020A0035B -:104AA00020112002884088410202004000408841D5 -:104AB00088820040004000110001404110110008B0 -:104AC0001000200000412011402188110440000006 -:104AD00004412011000200048804000220000000AC -:104AE000200000000000200420042000000000003E -:104AF0002004400000000000000240204020094047 -:104B0000202010201020402040204040200421047C -:104B10000820212009202120214008A0108209041A -:104B20004102400440C020022040209020C02020AC -:104B30000890200240822004414000000902212008 -:104B4000082000024090200208C00002400200C07D -:104B500000C0200240C04040114000C04040004022 -:104B600000000004000011020040000240000000AC -:104B700000000000200040000002000004000210BD -:104B800004100441904008400440821000C0850990 -:104B90000300828482208209840984400440020048 -:104BA00082200421900002000041044000410040A6 -:104BB00000001041020000000000004000008400DE -:104BC000000000008800A0000000000000000000BD -:104BD00000000000000000000000000000000000D5 -:104BE0000000000000000000004100100000000074 -:104BF0000000000002000000020000000000104061 -:104C000000C00040004021080008001002400404D9 -:104C1000204020100004004000100040098808884F -:104C2000008800A0004002100088004000C000047E -:104C300000820084008400820000000000840000E4 -:104C400000820900000004000400000800000000C9 -:104C50000000020000000004000802000008040038 -:104C6000200002000008000000000008000000848E -:104C7000000002000000041000840000000800840E -:104C8000C010902188214021C0101141044104002E -:104C900002108804102182908810C0218202A02175 -:104CA0009000A02108102011400390021000C14084 -:104CB00088001003040004000400400004110400F4 -:104CC000000002001000840910214021040040006F -:104CD00004084000100004000408900502002000B1 -:104CE00004000400000000000000040800000000B0 -:104CF0000000000000000000000040000000000074 -:104D0000000808842108400800400500088203408C -:104D10004184050004210290110404A04000048491 -:104D200009902000118805880490052003040200E2 -:104D300004840388000402024008100002900090DE -:104D40000800000004001120109040002000000026 -:104D500010000800080000000004000000008400AB -:104D6000090000000000000000000000000000003A -:104D700000000000000000880000000000000000AB -:104D800000000000A0214011A0118211A084A00405 -:104D9000C002A109C1098209820400411020A0407B -:104DA0000804C004C0040004004010048220000075 -:104DB00000000000A000040000000400002100002A -:104DC00000000000000008000000000000000000DB -:104DD00000000000C0000000000000000000000013 -:104DE00000000000000000000000000000000800BB -:104DF0000000000000000000080000000000820029 -:104E000000000000000000880084100000880010EE -:104E100000080088080820C00904049100400090A0 -:104E2000098200000988020204004100100000000D -:104E3000000000200000000041000020000800A049 -:104E40000000000000000000000000001100000051 -:104E500000200000000000000000000020002000F2 -:104E6000000000000000000000000008000000003A -:104E70000000001000000000000000000000000022 -:104E8000000000000000000084008841C0050441CB -:104E90004002C00084000000A00400089008001038 -:104EA000840588000000041108021000840000003E -:104EB00001000088850001000411000000000003CB -:104EC0000008000000880100000040000000000011 -:104ED00000000000000000000000000000000000D2 -:104EE00000000000000000000000000000000000C2 -:104EF00000000000000000000008000000000000AA -:104F00000000000000000000080040040488009039 -:104F100000A011051190210003001105029000046A -:104F20004109112010881040119004900500409014 -:104F30004188040200200488040440020590110204 -:104F4000030020000040400240020000050008006D -:104F50000040050000001000000000880000000074 -:104F600000000000000000004000000800000020D9 -:104F7000000000000000040000000000000000002D -:104F800000000020000000000000000082118403E7 -:104F90008441A00810090004000800008208C00431 -:104FA00000041004A008840000100088A00800007D -:104FB00000030000A000000000000000000000004E -:104FC00000000008000000000000000000000000D9 -:104FD00000000000010000000000000000000000D0 -:104FE00000000000000000000000000000000003BE -:104FF00000000000000800000000000000000000A9 -:105000000000000000000000000000000000200080 -:1050100011201104000000000000090400C00082FB -:105020000011110500A10000400000000410004024 -:105030001000000000000000000000000000000060 -:105040000000000000400000000000000000000020 -:105050000000000000000800000000000000000048 -:105060000000000000000200020400002000000018 -:105070000000000000000000000000000000000030 -:105080000000000000000000000000000000000020 -:105090000000000000000000114000A10088108204 -:1050A0000000000000000000000000000000000000 -:1050B0000000000000000000000000200020008828 -:1050C00000000000000000000000080108010000CE -:1050D00000000000000000000000000000000000D0 -:1050E00000000000000000000000000000000000C0 -:1050F00000000000000000000000000000000000B0 -:10510000000000000000000000000000000000009F -:1051100000000000000000000000100000820004F9 -:1051200080000000000009000000000000000000F6 -:10513000000000000000000000000000000000006F -:105140000000000000000000000000022004000336 -:105150000008000000000000000000000000000047 -:10516000000000000000000000000000000000003F -:10517000000000000000000000000000000000002F -:10518000000000000000000000000000000000001F -:1051900000000000000000000000000080008010FF -:1051A000808000418040008000110000000000006D -:1051B000000000000000000000000000800000006F -:1051C000000080000000000000000000080008004F -:1051D00008000300000000000000000000000000C4 -:1051E000000000000000000000000000000080003F -:1051F000000000008000000000000000000000002F -:10520000000000000000000000000000000000009E -:105210000000000000000000000000000000080284 -:105220001001A040020008018882000000A00200D6 -:10523000C0000000000000000000000000000200AC -:1052400020008800080000000000000000000100AD -:1052500000000000000000000000400000004000CE -:10526000000000000000000000000000000000003E -:10527000080002009000080000000000000000008C -:10528000000000000000000000000000000000001E -:10529000000000000000000000000000000000000E -:1052A00002000102001010020000020000000000D5 -:1052B00000000000000000000000000000000000EE -:1052C00000880090024020880000000000000000DC -:1052D00000000000010100000000000000000000CC -:1052E00000000000000000000000000000000000BE -:1052F00000000000000000000000000000000000AE -:10530000000000000000000000000000000000009D -:10531000000000000000000000000000000000008D -:105320000000000040000900110010000000000013 -:105330000900000000000000000000000000000064 -:1053400000000000000000800000000000000000DD -:1053500000000008082105080808000000000000FF -:10536000000000000000000000000000000000003D -:10537000000000000000000000000000000000002D -:10538000000000000000000000000000000000001D +:104A700000000000000000000000C0000000400036 +:104A80000000000000000000008021000000000085 +:104A9000018000000000000800002000000020004D +:104AA00000000000000000204000000000000000A6 +:104AB00000000000000000000001000000000000F5 +:104AC0000000000000000000008020000000000046 +:104AD000040004000400000400040000C0000004FE +:104AE00000044080C0802004820400000000000414 +:104AF000000300008800000400002020092000209E +:104B0000000020000008000820A020042000202031 +:104B1000000002080000000000000000000000008B +:104B20000000000000000000000100002000000064 +:104B30000000000000000000000000000000000075 +:104B400000000000004000000000412000000000C4 +:104B500000008008800080000000000000000000CD +:104B60000000000080020020800000000000000023 +:104B70000000000000000000000000000200000033 +:104B800004000210000000000000000020002000CF +:104B90000004000400000000000000000800000005 +:104BA00000100010000000000000A0200000000025 +:104BB00000000000000000000000000000000000F5 +:104BC00000000000000000000000000300000000E2 +:104BD00000000000000000000000010000000000D4 +:104BE00000000000000000000120000000000000A4 +:104BF000000000000000000000000000000000C0F5 +:104C0000050082C0000000C0000000080200830808 +:104C10008000050111850010000000100008000050 +:104C2000000000000000000000080008000100086B +:104C30000000000004000000000000000008000068 +:104C4000000000000000000800000008000800004C +:104C50000008000000000000000000000400000840 +:104C6000000000000000000800000409000800081F +:104C700000080000000000040000000000000084A4 +:104C800000000000100010000000000800000000FC +:104C90000200080000000000000000000000010009 +:104CA00000000000000000080000000000000000FC +:104CB0000000000000000000004000000000004074 +:104CC00000000040000000000000000000000000A4 +:104CD000000800000000000000000000004100008B +:104CE000000000000000200000008800000000809C +:104CF0000041000000000000000000000000000073 +:104D0000000304001000000000000000000000008C +:104D1000000000080000000000000000000000008B +:104D2000040000000000000000000000000000007F +:104D30000000000000000000000000000000000073 +:104D40000000000000000000000000000000210042 +:104D5000000021000000000000000000000003002F +:104D60000000000000000000000000000000000043 +:104D7000000400000000000000000000000000002F +:104D800000000000822000200000008000000000E1 +:104D90000000000000000000000000000000000013 +:104DA000018001040000000000000000000000007D +:104DB00000000000000000000000000000000000F3 +:104DC00000000000000000000000000000000000E3 +:104DD0004000000000000020002001000100002031 +:104DE00000000000010000400000000300000080FF +:104DF0000200008400C1000000000000000000006C +:104E00000800000000000001000100000020000078 +:104E10000000004000002100000000000000000031 +:104E20000000202002000000000000000000000040 +:104E30000000000000000000000000000000000072 +:104E40000000000000000000000000000000000062 +:104E500000008000000000000001000104000400C8 +:104E600000010000000004A000C0000000000000DD +:104E700000100000000500100000000000000020ED +:104E80000000000000000000000000000000000022 +:104E90000000000000000000000000009000200062 +:104EA00000000000000010040000000000000000EE +:104EB00000000000000000000000000000000000F2 +:104EC00000000000000000000000000000000000E2 +:104ED00000000000000000000000000000020000D0 +:104EE00000000009900000000000C0000000000069 +:104EF0000000000004C0008000000000000000006E +:104F00000008A000000000000000100005000000E4 +:104F10000000000000000000000000000000000091 +:104F20008000000000000000800100000000000080 +:104F30000000000000000000000000000000000071 +:104F400000880000000000000000000000000000D9 +:104F50000000000000000000000000000000000051 +:104F60000000000000000000000000000000000041 +:104F700000000500098485200004000000000000F6 +:104F80000000000000000000000000000000000021 +:104F9000000000000200000000000000000000000F +:104FA00020000000000001000000000000000000E0 +:104FB00000090000000000000000000000210000C7 +:104FC00000000005000000000000002100000000BB +:104FD00008000000080000000000000000000000C1 +:104FE00000000000000000800141010000000000FE +:104FF0000000000084000000010000000000082103 +:1050000000000000000000000000000000000000A0 +:10501000020000000000000000000000000000820C +:1050200000008000000000002000000000000000E0 +:105030000000000000000000000000000000000070 +:105040000000000000000000000000000000000060 +:105050000000000000000000000000000000000050 +:105060000000008200040000002004000400000092 +:10507000000000000000000000900400000000009C +:105080000000000000000800080000000000000010 +:105090000000000000000000000000000000000010 +:1050A000000000000000000001009000000200006D +:1050B00000000000000000008808002000900202AC +:1050C00000000000000000000000000000000000E0 +:1050D00000030000000000000000000100000000CC +:1050E000000040C000900010000000C000900000D0 +:1050F000000000000000000000004011011090912D +:105100008402000000000000000000000000000019 +:10511000000000000000000000000000000000008F +:10512000000000000000000000001100A10000804D +:10513000000000000000000000000280008000006D +:10514000000000000000000000000000000000005F +:10515000000000000000000000000000001000102F +:10516000001000208080008000000000008000808F +:10517000000000000000000000000000A01021213D +:10518000801100200000000000000000000000006E +:10519000000000000000000000000000000000000F +:1051A0000000000000040000000200000008098068 +:1051B000001000000000000000000000800000005F +:1051C000800080800000000000000000000000005F +:1051D00000000000000000000000000000000000CF +:1051E00000000000801100008041804180800000AC +:1051F00000080000808000000000000000008080A7 +:10520000884180912105000000000000000000009E +:105210000000000000000000008400000084000086 +:10522000000000000000000100000001000000017B +:1052300001020001008800000000000000000800DA +:105240008800A0000890000000000000000000009E +:10525000000000000000000000000000000000004E +:105260000010880000009000000040008401C09001 +:10527000000088010000C0A0000000000000000045 +:1052800008404100A0A189000000000000000000CB +:10529000000000000000000001000000A00000006D +:1052A00000000000000000000000200000000000DE +:1052B00001008888080000000000020000000000D3 +:1052C000880800200090101000000000000000007E +:1052D00000000000000000000000000000000000CE +:1052E000000000000100000000000000001000901D +:1052F000C0C088890040C090C0C00000000000000D +:10530000000010820020018910030000000000004E +:10531000000000000000000000002000000000006D +:1053200000000000000000000000000080000000FD +:105330000400410000808000410000008000000067 +:10534000000000800080000000000000000000005D +:10535000000000000000000000000000000000004D +:105360000000000000000300110008000000000021 +:105370000080808000080080808080800000000025 +:1053800000000000802020000820009000000000A5 :10539000000000000000000000000000000000000D -:1053A000000000002100898000800900000000004A -:1053B00000000000000000000000000000000000ED -:1053C000000000000020801100000000000000002C -:1053D00000000000000200000000000800000010B3 -:1053E000000000800000000000000000000000003D -:1053F00000000000000000000000000000000000AD -:10540000000000000000000000000000000000009C +:1053A00000000000000000000000000000050000F8 +:1053B0000000000000110000058000000000000057 +:1053C00000000000000200800080000000000000DB +:1053D00000000000000000000000000000000000CD +:1053E00000000000000021001002080008008011E9 +:1053F000000980000000801180848000000000000F +:10540000000000000000A04021000880880000008B :10541000000000000000000000000000000000008C -:105420000000000000002100A08200200800000011 -:1054300000100000000000000000008800000000D4 -:10544000000000000000200040900890880000004C -:1054500000000000000000900000000000000000BC -:10546000000100A00040000000000000000000005B -:1054700000000000000000000000001000400000DC -:10548000000000000000000000000000000000001C +:10542000000000000000000000000000000000007C +:10543000000000000000000100000040000000002B +:10544000000000000000000000A000C000000000FC +:10545000000000000000000000000000000000004C +:10546000000000000000000001000000010000003A +:10547000C001101040000000C00140404088000002 +:1054800000000000000000000801C0C08902030005 :10549000000000000000000000000000000000000C -:1054A00000000000000000000000000000000000FC -:1054B000000000E00000000000000000000000000C -:1054C00000000000000000000006000007000000CF +:1054A000008200000704000000000000000000006F +:1054B000000002E000000000000000E007008200A1 +:1054C000000000000000000000820000060400410F :1054D00000000000000000000000000000000000CC -:1054E00000000000000000000000000000000000BC -:1054F00000000000000000000000000000000000AC -:10550000000000000000000000000000000000009B +:1054E0000000000000000000000000820000060034 +:1054F000000000820000060000420082000006005A +:105500000042000000000000000000820060060071 :10551000000000000000000000000000000000008B -:1055200000000000000000000000FFFFFFFFFFFF81 -:10553000FFFF00000000000000000000000000006D -:1055400000000000000000000000C300F33000F085 -:105550003C3C0000000000000000000000000000D3 +:10552000000000000000000000000000000000007B +:10553000000000000000000000000000000000006B +:10554000F0F000000000000000000000000030FB50 +:10555000303C0000000000000000000000000000DF :10556000000000000000000000000000000000003B -:10557000000000000000000000000000000000002B -:10558000000000000000000000000000000000001B -:10559000000000000000000000000000000000000B -:1055A000000000000000000000000000FFFFFFBD41 -:1055B000FFF6FFFF000000000000000000000000F8 -:1055C000000000000000000000000000C300F330F5 -:1055D00000F03C3C00000000000000000000000063 +:1055700000000000FFF000006F600000FF0000006E +:10558000F330000000000000000000000999090944 +:10559000909000900000000000000000000000005B +:1055A00000000000000000000000000000000000FB +:1055B00000000000000000000000000000000000EB +:1055C0000000F0F0000000000000000000000000FB +:1055D00070F8B0BA000000000000000000000000F9 :1055E00000000000000000000000000000000000BB -:1055F00000000000000000000000000000000000AB -:10560000000000000000000000000000000000009A -:10561000000000000000000000000000000000008A +:1055F00000000000000000F000006F600000F0F00C +:105600000000F33000000000000000000000899955 +:10561000898990D000D00000000000000000000048 :10562000000000000000000000000000000000007A :10563000000000000000000000000000000000006A :10564000000000000000000000000000000000005A @@ -173460,493 +173460,493 @@ :10568000000000000000000000000000000000001A :10569000000000000000000000000000000000000A :1056A00000000000000000000000000000000000FA -:1056B000F6F6F6B400000000000000001010101014 -:1056C000000000000F0F0F0F00000000000000009E -:1056D0002703270320B926BF0000000000000000B8 +:1056B00000000000000000000000000000000000EA +:1056C0000F0F0000FFFF00000000000000000000BE +:1056D0005FFFEFFF676766660000000000000000E4 :1056E00000000000000000000000000000000000BA -:1056F00000000000000000000000000000000000AA -:1057000000000000000000063C3E00000000000019 -:105710000000000000000000000000000000000089 +:1056F0000000000000000000F0F0000006F60000CE +:10570000069F000066660000F6F60000000000003C +:105710000000FFFFFF0000FF07070000000000007F :105720000000000000000000000000000000000079 -:105730000000F0F0F0F00100000000000000101088 -:105740001010000000003C3C3C3C00000000000049 -:1057500000002703270320BF20BF00000000000037 +:105730000000000000000000000000000000000069 +:1057400000000F0F0000000000000000000000003B +:105750000000DFFEEFFF00670066000000000000B1 :105760000000000000000000000000000000000039 -:105770009090000000000000000000000000000009 -:10578000000000000000000000003C3C00000000A1 -:105790000000000000000000000000000000000009 -:1057A00000000000000000000000000000000000F9 -:1057B0000000000000610006000D0000006100070D -:1057C000000D0000000000000000000000000000CC -:1057D00000000000000000280000000000000000A1 -:1057E0000000000000610006000D00000000000045 -:1057F00000000000000000000000000000000000A9 -:105800000000000000000000000000000001000097 -:105810000000000000000000000000000000000088 +:1057700000000000000000000000F0F0000006F64D +:105780000000069F000000FF000006060000000069 +:10579000000000001000000000FF07FF00000000F4 +:1057A00000000000000000000000000005180A20B2 +:1057B000050004A0000000000000000000650006D5 +:1057C000000F200005402A06054C00A8000000003C +:1057D0000000000000000030000000000000000099 +:1057E00000000000000000000000000000000000B9 +:1057F0000000000000000061003E000D10C00382A8 +:1058000003380C0092C003E3033E0C0DC2C000003D +:1058100000000000000000610036000500000000EC :105820000000000000000000000000000000000078 :105830000000000000000000000000000000000068 -:105840000000000000000000000000000000000058 +:1058400000000000000000000F0FFFFF000000003C :105850000000000000000000000000000000000048 -:105860000000000000000000000000F028F8000028 -:105870000000000000000000000000000000000028 -:105880000000000000000000000000000000000018 -:105890000000000000000000000000000000000008 +:105860000000000000000000000000000000000038 +:105870000000000000000000A2AAF7FF00000000E6 +:10588000000000000000000000000000C3C3C3C30C +:105890000000000000000000FFFFFFFF28AA7DFFBE :1058A00000000000000000000000000000000000F8 -:1058B0000000000000000000820000000000000066 -:1058C00000000000000000000000000000000000D8 +:1058B00000000000000000000000000000000000E8 +:1058C000000000000000000000000F0F00000000BA :1058D00000000000000000000000000000000000C8 -:1058E00000000000000000000000000000F000F0D8 -:1058F00000000000000000000000000000000000A8 -:105900000000000000000000000000000000000097 -:105910000000000000000000000000000000000087 -:105920000000000000000000000000000000000077 +:1058E00000000000000000000000000000000000B8 +:1058F00000000000000000000000AAA2FFF300006A +:105900000000000000000000000000000000C3C311 +:10591000C3C30000000000000000F353F5FF008245 +:1059200055D700000000000000000000000000004B :105930000000000000000000000000000000000067 -:105940000000000000000000000000000000000057 +:105940000000000000000000000000000000F0F077 :105950000000000000000000000000000000000047 -:1059600000000000000000000000FF0404043C3CB4 -:105970003CBC00000000000000000000000000002F +:105960000000000000000000000000000000000037 +:10597000000000000000000000000000E2E2E2E39E :105980000000000000000000000000000000000017 -:105990000000000000000000000000000000000007 -:1059A00000000000000000000000000000000000F7 -:1059B00000000000000000000000000000A000A0A7 +:105990000000000000000000000000000000000106 +:1059A0000F0FFFFF000000000000000000000000DB +:1059B00000000000000000000000000000000000E7 :1059C00000000000000000000000000000000000D7 -:1059D00000000000000000000000000000000000C7 -:1059E000000000000000000000000000FF000000B8 -:1059F000000000A000000000000000000000000007 -:105A00000000000000000000000000000000000096 +:1059D000F0F00000000000000000000000000000E7 +:1059E00000000000000000000000000000000000B7 +:1059F0000000000000000000000000000000005F48 +:105A000000DF0000000000000000000000000000B7 :105A10000000000000000000000000000000000086 -:105A20000000000000000000000000000000000076 -:105A3000000000000000840020004008C000A0001A -:105A4000C000A0009000A00040008803C0088400AF -:105A50002021100004400420202120210010C0201B -:105A60000803840400082040201100400004402165 -:105A70000020004100040003A0002000200200419B -:105A80000011000020C100024080004000C10080E1 -:105A9000004000000400A004200021C121400000BB -:105AA000008000000000008821800082000001804A -:105AB00000000080208000842002412041202140FD -:105AC00010201002052040200920412008204020FD -:105AD00041901040082090A0100211202120402168 -:105AE000210241020820110410C0212010C008909A -:105AF0001140208210901002000009401040104018 -:105B0000002010204040090210C120024002210460 -:105B100010042002004010400008402020040241F0 -:105B20000040000400402002000440200004000067 -:105B30001004400000044004000582400010824030 -:105B40008208000890089008A0400241004104002B -:105B5000901002418441040504208210824002100A -:105B60008240822000210241000900400000020022 -:105B7000000804020000A041020000002000821082 -:105B800002000000000004000480029000000000F9 -:105B900004000000004100410200000000000080FD -:105BA0000040000000000000000004000080000031 -:105BB0000000008000000200020000800910004088 -:105BC0000910004000404040004000880088044028 -:105BD000404000400010001002A0820800000008B1 -:105BE00000C00010004000C01108040800880084B4 -:105BF000008404400001000002000408000041008D -:105C000009090982090000004100050204020000A0 -:105C100004000000008400000000000004080000F0 -:105C2000040400010000000800000004000000025D -:105C30000400000000040000000000000410100533 -:105C400010088841C040A0000005A010A00810085E -:105C5000C02188104000C0008221841084100800F8 -:105C600082108809048210899002A0411000A000CF -:105C70008800840004020400000484001002000074 -:105C8000100088899004A0001040040040084000E3 -:105C90008800080090000000100502004000040881 -:105CA00004000004002100200000000300000004A4 -:105CB0000020000000210000042100030000041067 -:105CC000054004004100118403002100050040400C -:105CD00004002100040841020040110221000300D9 -:105CE000090040401008210404021104102000881B -:105CF00010882040000008000540048210904104F4 -:105D000000000004001002004190000800000400A0 -:105D1000102010000400000000000400000000003B -:105D20000000000000210000000100000000000051 -:105D300000010083000000000000000000000000DF -:105D40000001C009A00440008210044104090800B9 -:105D50008411C01083098405A000100900A108A1C6 -:105D60000120C0000400040004000000100008200E -:105D70000000821182408200820000000000A0002A -:105D800000000000001000000000001000000040B3 -:105D900040000002000000000000000000000000C1 -:105DA00000000004000000000400040000000000E7 -:105DB00000002000000000008200820000000000BF -:105DC0000000084004C0038200900090000400041A -:105DD00010A0040400C04010008400040000001063 -:105DE000201002050040000000C00000000000403C -:105DF000008402C0009000000000000000A000002D -:105E0000000000000000000100000000008500000C -:105E1000000080000001000000000000000000827F -:105E2000000000000289000000088000808400005B -:105E300000000000800000000000000000A0000042 -:105E4000000000000010040040210403A041C01025 -:105E50008810820090000400400004000000000050 -:105E60001003A000C000010440A082044000000212 -:105E7000880082000020840004090000001108004E -:105E80000000000000000000000200000000000010 -:105E900000000000000000000008000000000008F2 -:105EA0000000000000000021000000410000002070 -:105EB0002021000000000021040302000000200057 -:105EC0000000040000040020118841042184000027 -:105ED0001004038800004184A1408408A1200088A8 -:105EE0000390000011902182208800041104118881 -:105EF000039109A0410440A121C0419000884000C5 -:105F00000200050003000002000008000002030078 -:105F100000020090000000000000000400000000EB -:105F2000000000000500000000000000000000006C -:105F3000000180000000000000008000000000A0C0 -:105F400080000010000000010001A0210441042194 -:105F500004000811C000C0208210000000028483E9 -:105F600082820021C01000041003000910002000EC -:105F7000000040200000002000000000000010048D -:105F80000000000000000000080000000000020007 -:105F900000000000000000000000000200030021DB -:105FA000900000040000000000000000002100003C -:105FB00000000005000000210000000800000000B3 -:105FC0000021000000030004000400000000110094 -:105FD00000000088000000A02084000800C000012C -:105FE000090209100000020111000000000009026E -:105FF000800000008001000000010000000000009F -:10600000000000000004000000000000000000008C -:10601000000000004120000000000000000100001E -:10602000000000000001000000000000000000006F -:106030000000000000000000000000000000000060 -:10604000000000000000000000010001000000004E -:106050000000000000000000000000000000201010 -:1060600000100088101009080020020800900000AD -:1060700000000001000002039001002108890000D7 -:106080000000000000000003008900000011000073 -:10609000010001208888020800000000880000003C -:1060A0000001000000010000000100018400000068 -:1060B00000000000000000000000000000000000E0 -:1060C00000000000000001010000000000000000CE +:105A200000000F0FFFFF000000000000000000005A +:105A30000000000000000000200000000000000046 +:105A4000000000000000000000002000A000000096 +:105A500020000000200040002000000002000000A4 +:105A600000000000000000004000200000000000D6 +:105A7000200000000000000000002000000088005E +:105A8000000088004000010000002080200000008D +:105A9000000004000000000000000000000084007E +:105AA0000000C000C000C0000200020002000200AE +:105AB000000000000000000000A0002000A000A0E6 +:105AC0000020000000200000000000000000000096 +:105AD0000000004000020000000000000000000084 +:105AE00000000000000000000000000000020000B4 +:105AF00000000000000000000000000000000000A6 +:105B00000000000000008000204000000020000095 +:105B10000000004080000002000040000000000083 +:105B200000000000000000000000800080008000F5 +:105B3000800040000000000000000241000004401E +:105B4000000000000000040004000000000000004D +:105B50000200000000000000020800000000040035 +:105B60000000000000000000000000000000000035 +:105B70000000000000000000000000000000000025 +:105B8000000000000000000000000010880001007C +:105B900000000000000000000000050000080000F8 +:105BA000000000000000000000008208000000006B +:105BB000000000000000010000000200040004409A +:105BC000008802000400040000000000000800003B +:105BD0004000040405000000000004000008040068 +:105BE0000000048400000400000000080008000019 +:105BF0000000000800000000000000080000040889 +:105C00000000000020080000008200840008040852 +:105C100004000400008400000000000084100082E2 +:105C20000000000000840000000000000084000864 +:105C3000000000000000000002000000040000005E +:105C40000403000000000000000000000008000045 +:105C50000000000000000000000000000000000044 +:105C60000000000000000000000000000000000034 +:105C7000000000000005000000000000000000001F +:105C80000000000000000002000000000000000012 +:105C90000000008000000000000004A000210100BE +:105CA00000008205004100080000000200024000E0 +:105CB000000000000000000500000000000000419E +:105CC00000000000000000000000000000000000D4 +:105CD00000000000000000000000000000000000C4 +:105CE00000000000000000000000000000000000B4 +:105CF00000000000000000A0000000000000000004 +:105D00000000000000000000030000000000000090 +:105D100000840082002000A0000000008821000014 +:105D20000400410003000000080000000002000021 +:105D3000008800A00000000000A00000000000009B +:105D400000900000000000000000000000000000C3 +:105D50000000000000000000000000001000000033 +:105D600000000000000000000000000082000000B1 +:105D70000000000000000000080000008200000099 +:105D800008000000080000000000000000000005FE +:105D90000000030000000400000000000000A0203C +:105DA000400004400000080000000000001008054A +:105DB000000000100000820008000000C000000089 +:105DC000000000000088000000000000000000004B +:105DD0000000000000000000000000000082000041 +:105DE00000000000000000000000000000000000B3 +:105DF00000000000000000000000000000000000A3 +:105E0000000000000000000000000000030000008F +:105E100000000000900000008000000000000088EA +:105E200000910000800000000000000000000083DE +:105E300000844100004000820082000000A04184F4 +:105E4000030800000008000800000000000800032C +:105E5000000000000000000000000000000800003A +:105E6000000000000000000000000000000800002A +:105E70000000000000000000000000000000000022 +:105E80000000000000000000000000000000820090 +:105E900000000000C00082808200C02100210005B7 +:105EA000000004A10000000300410000004108417F +:105EB0000000000082000000000008000000001147 +:105EC0000003000000000040000000000088000007 +:105ED00000000000000000000084000000C000007E +:105EE0000000210000840084000000000000000089 +:105EF000000003080008000000200000000000006F +:105F00000000000000000000000000000000000091 +:105F10000000000000A000A00308000000000084B2 +:105F200000000000802000A00084000000000000AD +:105F300000000004080208020390000000000000B6 +:105F40000000000000000000000000000000000051 +:105F500000000000000000000000000088000000B9 +:105F60000000000900000000000000000000000226 +:105F7000000200000000000000000000000000001F +:105F80000000000000000000001000000000000001 +:105F900000000000080000000000000000030420D2 +:105FA0000003000500000021012100200000000086 +:105FB000004100020000001100000000000000216C +:105FC0000000000800008200000000100000000037 +:105FD00000000000000000000000000000000000C1 +:105FE00000000000000000000000000000000000B1 +:105FF00000000000000000000000000000000000A1 +:106000000000000000000000000000000000000090 +:1060100000000000000080000000000003000000FD +:106020008001000000840088008840024085000054 +:10603000000000C000000000080000080384000009 +:106040000800000005A0000008000000000000009B +:106050000000000000000000000000000000000040 +:106060000000000000000000000000000000000030 +:106070000000000000000000000000000000000020 +:10608000000000000000000000000000000000020E +:10609000000000000000000088C008088403101100 +:1060A000C005900900A1040802A005020010C082EA +:1060B00000000000000000000100000000000000DF +:1060C0008800008800900000000000000000000030 :1060D00000000000000000000000000000000000C0 -:1060E0000000080000008080A10002800000000085 -:1060F0000000200811080002838800100008000238 -:10610000000000000000000000900002004000219C -:106110000000080008800080808000000900000066 -:106120000900000500000211000000080220804064 -:106130000020000000000000000000000000090036 -:106140000000000900090209090900000000090017 +:1060E00000000000000000000000000000000000B0 +:1060F00000000000000000000000000000000000A0 +:10610000000000000000000000000000000000008F +:1061100000000000000000000000009090C089888E +:106120000008809080A100C000898080910000005C +:10613000808000000000000000002000000000003F +:10614000000000000000000000000000000000004F :10615000000000000000000000000000000000003F -:106160000000000083108800918080000000800003 -:106170008000A000880088000820800000218000A6 -:10618000800000000000000000000000000000008F -:1061900000000000000000038000008009001100E2 -:1061A0001100040000000000001000001000210099 -:1061B00004000411000080008080800000080000BE -:1061C00000000000000000000000000080008000CF -:1061D00080410000000000000000000000000000FE -:1061E000000000008890090102C008A00200200001 -:1061F000A000A000080004000900830002000800BD -:106200000208820000000000000000000000000002 -:1062100000000000000000004001A01040A00000AD -:1062200000000000010000000000000000000088E5 -:106230000100000001A000001000A0A090000000DC -:10624000000000000000000000000000000010003E -:106250008400A001400000000000000000000000D9 -:10626000000000000000048800C02008C1A004C095 -:1062700000A0049020820000000000010000908235 -:10628000000201100488000000000000000002016C -:1062900001000001000000002004008400A0A08292 -:1062A00000000000000100000100000000000000EC -:1062B0000001010101010000000000100090000039 -:1062C00000000000000000000100C100020000000A -:1062D00000008802000200900000000000000000A2 -:1062E00000000000000000000004002100091089E7 -:1062F00000000091800800910008000820080000BC -:1063000000000080058020800000000000000000E8 -:106310000008210802080000000000100008000822 -:1063200090880010000500210002210000000000FC -:106330000800000408040221000900000080008019 -:1063400000000000000000000800100091000300A1 -:1063500003000000008000800380000000000000B7 -:1063600000000000000000000000094088848280D6 -:1063700002030000009100800000081110800880D6 -:10638000000080218021000080000000000000004B -:10639000000000000000000000000000000080106D -:1063A00000000000000000000000002100000000CC -:1063B0000000000021004000050002000000918064 -:1063C0000280080000000000000000000000004102 -:1063D00000000800001100800080000000000000A4 -:1063E000000000000000000000000000C001A182C9 -:1063F000101090001000001008108800000000022B -:106400000140000010010410900402000000000090 -:106410000000000000000000000000000000080074 -:10642000824110908800000200000000000000007F -:106430000000000000000100010000000100000059 -:10644000919000900100000000000000000000009A -:10645000000000000100000000900040000000006B -:10646000000000000000000000000000000000210B -:10647000000007000000002100000700000060008D -:1064800000E000000000000600000700000000001F +:10616000000000000000000000000000000000002F +:10617000000000000000000000000000000000001F +:10618000000000000000000000000000000000000F +:10619000000000000000000000000000C180A10914 +:1061A000210209830000008000000003A000A0037A +:1061B000C080898000000000000000000000002175 +:1061C00000800000000000800008000000000000C7 +:1061D00000000000000000000000000000000000BF +:1061E00000000000000000000000000000000000AF +:1061F000000000000000000000000000000000009F +:10620000000000000000000000000000000000008E +:106210000000000000000000000000000000084036 +:106220001100030010890090001000000001890097 +:1062300091018508A090000000000000000000000F +:1062400000000084000800000040000100900000F1 +:10625000000000000000000000000000000000003E +:10626000000000000000000000000000000000002E +:10627000000000000000000000000000000000001E +:10628000000000000000000000000000000000000E +:1062900000000000000000000000000000000000FE +:1062A000080900090010408940900188C000C0081A +:1062B0000420000400022002000000000000000092 +:1062C000000000000000000000020000400000008C +:1062D00000000000000000000000000000000000BE +:1062E00000000000000000000000000000000000AE +:1062F000000000000000000000000000000000009E +:10630000000000000000000000000000000000008D +:10631000000000000000000000000000000000007D +:10632000000080A110890088009180004100410098 +:10633000008000200085008900C0000000000000EF +:10634000000000000000000000000080000080004D +:10635000000000000000000000000000000000003D +:10636000000000000000000000000000000000002D +:10637000000000000000000000000000000000001D +:10638000000000000000000000000000000000000D +:1063900000000000000000000000000000000000FD +:1063A00000000000410083A190801103830383005B +:1063B0004000040080000082008080020000000095 +:1063C0000000000000008000000000000008000045 +:1063D00000000000000000000000000000000000BD +:1063E00000000000000000000000000000000000AD +:1063F000000000000000000000000000000000009D +:10640000000000000000000000000000000000008C +:10641000000000000000000000000000000000007C +:106420000000000000000100020910109001A0000F +:1064300008000100000010900810408202010000D6 +:1064400000000000000040000200400004000001C5 +:1064500000A0009088000000000000A000000000E4 +:10646000000000000000000000000000000000002C +:10647000000000000000000000000000000000001C +:10648000000000000000000000000000000000000C :1064900000000000000000000000000000000000FC -:1064A00000000000000000000000000000000000EC -:1064B000000000E000000000000000E0000000001C -:1064C000484200E007000000000000E0000000007B -:1064D000000000E007004100000000E0070000822B +:1064A000000000000000000000000060000000008C +:1064B000000000000600820000000000060000123C +:1064C00000000000000000000000000000000000CC +:1064D00000000000000000000000000000000000BC :1064E00000000000000000000000000000000000AC -:1064F000BE14BE14000F505FFCFCFFFF0A0A3C00F4 -:106500000000000000000000AAAAB2B23CFF3C005C +:1064F000000000000000000000000000000000009C +:10650000000000000000000000000000000000008B :10651000000000000000000000000000000000007B -:106520000000000000000000000300000000000068 -:10653000000000000000000000000000000000005B -:10654000000000AA00AAF000F00000000000000017 -:10655000000000000000000000000000000000003B -:1065600000F000000000000000000000000000003B -:106570000000BE34BE14000F303FFCFCFFFF0A0ACF -:106580003C00000000000000000082BE82BE3CFF14 -:106590003C080000000000000000000000000000B7 -:1065A00000000000000001000000000000000000EA -:1065B00000000000000000000000000000000000DB -:1065C0000000000000AA00AAF000F0000000000097 -:1065D00000000000000000000000000000000000BB -:1065E000000000F0000000000000000000000000BB -:1065F000000000003CFF3CFFFF3CFF550000000096 -:10660000001C00000000000000000000D7D7F0F0E0 -:10661000173FFFFF0000000000000000FFFFFFFF2A -:10662000000000000000EBE8EBE8000000000000C4 -:10663000000000000000000000000000000000005A -:1066400000000000000000000000A000F0F00000CA -:10665000000000000000000000000000000000003A -:106660000000040000000000000000000000000026 -:1066700000000000000038FB3CFFF0F0F0F00000EC -:106680000080C3DFC3C30000000000000080FFFFE4 -:10669000F0F0170300000000000000000000FFFF02 -:1066A000FF3C000000000000FFF0FFF00000A00031 -:1066B00000000000000000000000000000000000DA -:1066C000000000000000000000000000A000A0008A -:1066D00000000000000000000000000000000000BA +:1065200000000000000000000000C3FFC3FF434F55 +:10653000434FFF00FFFFDFDF00002C2CFFFF103078 +:1065400003330000000000000000AAAAFDFF0000C5 +:1065500000003C3C3C3C96969696000000000000F3 +:10656000000000000000000000000000000000002B +:10657000000000000000000000000000000000001B +:10658000000000000000000000000000000000000B +:1065900000000000000000000000000000000000FB +:1065A000000000000000000000000000FCC0FCC073 +:1065B00003030F0FFF00FFFF49490000143C14FFC5 +:1065C000103000300000000000000000AAAAF8FA15 +:1065D000000000003C3C3C3C969696960000000073 +:1065E00000000000000000000000000000000000AB +:1065F000000000000000000000000000000000009B +:10660000000000000000000000000000000000008A +:10661000000000000000000000000000000000007A +:1066200000000000000000000000000000003FCF5C +:10663000A0A010001000F0FFF0FF00000000FFFF1E +:10664000C0FFFF3C503C00000000000000000000C4 +:10665000000000000000F00FF00FAAAAAAAA000094 +:106660000000FFFFFFFF000000000000000000002E +:10667000000000000000000000000000000000001A +:10668000000000000000000000000000000000000A +:1066900000000000000000000000000000000000FA +:1066A00000000000000000000000000000000000EA +:1066B00020C3A0A010000000D7FF14FF00000000BE +:1066C000FFFFE8FF000000000000000000000000E5 +:1066D0000000000000000000F00FF00F5555555568 :1066E00000000000000000000000000000000000AA -:1066F00000000000000000000061002E000D0000FE -:1067000000614026000D00000061000180010000D2 -:106710000061402E000D000000000000000000009D -:1067200000610006000D0000000080610006000D01 -:10673000000000610006000D000000610007000D70 -:106740000000006100060009000080610034C00DF7 -:10675000000000610007000D00000541000F000D62 -:10676000000000610007000D0000000000000000B4 -:106770000000000000000000000000000001F0F038 -:10678000FF3C00000000A0AFF0FFF000FF0FF0C3DF -:10679000F0C3000000000000000000000000000046 -:1067A00000000000000003000300000000000000E3 -:1067B000FFFFFFFF000000000008000000000000D5 -:1067C00000000000FBC3FBC38F8F2020F303F30303 -:1067D00000000000000000000000000000003C3C41 +:1066F000000000000000000000000000000000009A +:106700000000000000000000000000000000000089 +:106710000000000000000000000000000000000079 +:106720000000000000000000000000000000000069 +:106730000000006150070009000100610E06000D15 +:10674000000000610006001D0000000000000000C5 +:106750000000000000000000000040008000002059 +:106760000002000000000000000200000000000025 +:106770000000000000000000000000000000000019 +:106780000000000000000000000000000000000009 +:1067900000000000000000000000000000000000F9 +:1067A00000000000000000000000000000000000E9 +:1067B000000000003C0500C3AA00AF0F00000A0F54 +:1067C0000000000000000000FC00CC000000000001 +:1067D00000000000000000000000000000000000B9 :1067E00000000000000000000000000000000000A9 -:1067F0000000000000000000000000000000000198 -:10680000FFFFFF3C00000000A0AF000FF000F00011 -:10681000F000F00000000000000000000000000098 -:106820000000000000000000030003000000000062 -:106830000000FFFFFEFF000000000000000000005D -:10684000000000000000FBC3000000FF00FFF30396 -:10685000F303000000000000000000000000000042 -:106860003C3C0000000000000000000000000000B0 +:1067F0000000000000000000000000000000000099 +:106800000000000000000000000000000000000088 +:106810000000000000000000000000000000000078 +:106820000000000000000000000000000000000068 +:106830000000000000003C0A00C382008303E5E57D +:10684000E0E000000000000000000C000C00000070 +:106850000000000000000000000000000000000038 +:106860000000000000000000000000000000000028 :106870000000000000000000000000000000000018 -:10688000000000AA0A0A0000000000000000303FDB -:10689000303F00FF0C0C0000000000000000000072 -:1068A00000000000000000000030000000000000B8 -:1068B00000000000000000000000000000000000D8 -:1068C0000000F0F000000000FCFCFCFC0F000F3C9E +:106880000000000000000000000000000000000008 +:1068900000000000000000000000000000000000F8 +:1068A00000000000000000000000000000000000E8 +:1068B000000000000000000000020000F0F0EB28E3 +:1068C000417D417D0000000000000000FFFFFFCF80 :1068D00000000000000000000000000000000000B8 :1068E00000000000000000000000000000000000A8 :1068F0000000000000000000000000000000000098 -:106900000000000000AA0A0A0000000000000000C9 -:106910003030303000FF0C0C000030F00000000080 -:106920000000000000000000AAAA003000000000E3 -:10693000000000000000000000000000000000084F -:1069400000000000F0F000000000FCFCAC0C0F00A8 -:106950000F3C0000000000000000000000000000EC -:1069600000000000008000000000000000000000A7 -:10697000000020004005C0080410400085084000C9 -:1069800088052000400088008810040020002002B4 -:10699000202088400404040488108821200020401E -:1069A00088038800C00000040000002000201000C0 -:1069B0002084000140050041001120000002202039 -:1069C0000004000288000040000200004000002097 -:1069D000000020000000000040004008000000000F -:1069E0000004000404000000000000040000000097 -:1069F000000400044102202040204090052004A013 -:106A000010204090402041402020410221044002BB -:106A100009C0094021C010022040219020044140BB -:106A2000410204202190400221C04040414041C029 -:106A300040022102000020C010A02102004020904E -:106A40004040210220042020210241400002004059 -:106A500000C0004020A02000000000C000404020F6 -:106A60004090000000002000000000040900000227 -:106A70000000000000000809904100410005820864 -:106A8000902000410008004121202110824002098D -:106A9000004102108200024100100041002100402C -:106AA00002000000A01004090000000000400000E7 -:106AB00000000000000900000000000000000000CD -:106AC00000000200000000000000000000080009B3 -:106AD00000000000001000000000000000000000A6 -:106AE0000000000000000400000000000000900012 -:106AF0000000000000000000004004400940004089 -:106B0000044000C1004004400840A041A0C000086B -:106B10000008004000880440001000400588008202 -:106B200000C000040040414000000000008400A0BC -:106B300004840000000040880000000000042000E1 -:106B40000004000000080000000000000008000031 -:106B50000400000800000000008800080400000095 -:106B600005040004048400000088000004080002FA -:106B7000000000040000000000888800C0104041B0 -:106B800004418310101008100010A00020214008BC -:106B9000104190214003C00588109000A0411020B2 -:106BA00008419021100082008800040008000800BD -:106BB000080040084020400010080000400010007D -:106BC00010031000040884008400200040401000DE -:106BD000000040000040880010000000000000009D -:106BE00000000000000000000000000000000000A5 -:106BF000000000000400001000000000000003007E -:106C00004184410002000400090041000400910099 -:106C10001104118205900500090210084190030833 -:106C200005000400210404A04000402010000308D7 -:106C30004120030008200000000000200000100098 -:106C400008200082050821A000400040104000C03C -:106C5000040000000300000000C004000008000061 -:106C60000000000000000000000000000000000024 -:106C700000000000000000000000000004001009F7 -:106C8000A0000400400484024109C002A000842046 -:106C900083044000C0008209A0091000A0058420E0 -:106CA00008008200840000000000000584008400C9 -:106CB0000000820000000000000000000000000052 -:106CC000841100000009020000080000000000001C -:106CD000100000080000000000200000000000007C -:106CE000000000000000080000000000000000009C -:106CF0000000000000000000080000000000080084 -:106D00000004000800A0000000918440040100C0BD -:106D10000000049000C0008400A0000200040040B5 -:106D2000008800820090000800C00008000002A057 -:106D30000200000000000000000000000000000051 -:106D4000000000080000000000000000000000003B -:106D5000000000000400000000000000000000002F -:106D60000000000000000000000000000000000023 -:106D70000000000000000000000000000000000013 -:106D800000008208880020008200A00002008840E5 -:106D900040830000040004050411101104020003E4 -:106DA000000200400005000000000021000000007B -:106DB000080000000000000040000000000000008B -:106DC00000000000000000000000000000000020A3 -:106DD00000000000000000000000000000000000B3 -:106DE00000000000000000000000000000000000A3 -:106DF0000000000000000000000000000000000093 -:106E000000000000000005840000002008100000C1 -:106E1000009000022020820211A005840890030443 -:106E200005041100004040040090412004A000200F -:106E300009000520210004900040002000000020EF -:106E400041020320000005A0084008400040400027 -:106E500000000000400800840000008809000000D5 -:106E60000010000400000008000000000000000006 -:106E70000000000000000008000000000484000082 -:106E80000000008800A04011000000008400C00045 -:106E90008420000800000010A00500804085C00488 -:106EA000C00200030008A0000000004000401000E5 -:106EB000000800000000000000000040000000008A -:106EC0000000000000000000820000000000000040 -:106ED00000000000000000000000000000000000B2 -:106EE0000040000000000000000000000000000062 -:106EF0000000000000000000000000000000000092 -:106F000000000000000000080082000000A000084F -:106F1000000000840000099000001100000400023D -:106F200020000500000000080000200400002004EC +:106900000000000000000000000000000000000087 +:106910000000000000000000000000000000000077 +:106920000000000000000000000000000000000067 +:106930000000000000000000000000020000F0F075 +:10694000EB2883BF82BE0000000000000000AAAA5E +:10695000AA8A000000000000000000000000000003 +:106960000000000000000000000000000000000027 +:106970000000200020002000000000002000C000D7 +:10698000000000002000C000000000002000000007 +:1069900004080000200020000000C00020002000AB +:1069A000C0000000000020000000000020000000E7 +:1069B0002000000000008800200004000008000003 +:1069C00000000005000582004000840000002080D7 +:1069D000C000000088008800880020000000888037 +:1069E000002000204080008000202020008020A087 +:1069F00020200020004000000000000000080008E7 +:106A0000000000000008000800080000000000006E +:106A10000000000020000000000000000040000016 +:106A20000002000200000000000000000000400022 +:106A30000000000000000000000000000000000056 +:106A40000000000000000000000000000000000046 +:106A50000010000000000000000000000000000026 +:106A600000200001000100200020000100010020A2 +:106A70000421000100018200824000100010020089 +:106A800000000000000000000000041000100000E2 +:106A900000000000000000000000000000000000F6 +:106AA00000000000000002000200000000000000E2 +:106AB00000000000000000000000000000000000D6 +:106AC00000000000000000000000000000000000C6 +:106AD0000000000000000000000000000000900026 +:106AE000032001000100000000000000000002007F +:106AF00000200000000000000040040004400040AE +:106B00000008040800000084008804080008000849 +:106B10000000000010000008040000000400040051 +:106B200000080008000000000008000800080040FD +:106B3000000000000010000800000000200000001D +:106B400040000004000800000000000800080008E1 +:106B500000000000000000000084000000000000B1 +:106B600000000485040804000088000800080508E7 +:106B70000000000100000000008400000000000090 +:106B80000000000000000000000000000000000005 +:106B900000000000000000000010000000000000E5 +:106BA00000000000000000000000000000000000E5 +:106BB00000000000000000000000000000000000D5 +:106BC00000000000000000000000000020000000A5 +:106BD000000000000000001000000008002100215B +:106BE000000000000000000000000108002100215A +:106BF0000000000500050021002100080000000041 +:106C00000000000000000000000000000000000084 +:106C10000000000000000000000000000000000074 +:106C20000000000000000000000000000000000064 +:106C30000000000000000000000000000000000054 +:106C4000000000000000000000000000000820A07C +:106C500000A00088110000000000000000000000FB +:106C60000802080003000008000000000400000003 +:106C7000000200A000000000080003000000000067 +:106C800008000000000000000000000000000000FC +:106C900000000000000000000000000000000000F4 +:106CA00000000000000000000000000000000000E4 +:106CB00008000000000000000000000000000000CC +:106CC00000000000000000000000000000000000C4 +:106CD000C000C000C000C0000000C00000000000F4 +:106CE0000800080008000800000000000400000080 +:106CF00000000000080000009000000000000000FC +:106D00000000000000000000050005000000000079 +:106D10000008000000000000000000000008000063 +:106D20000000000000000000000000000000000063 +:106D30000000000000000000000000000000000053 +:106D40000000000000000000000000000000000043 +:106D5000000000900500000040000000000000005E +:106D600000008004800080008900110000002000E5 +:106D70000000008400A000000084008800000000E3 +:106D80000000000000000000000000000000000003 +:106D900000000000000000000000000000000000F3 +:106DA00000000000000000000000000000000000E3 +:106DB00000000000000000000000000000000000D3 +:106DC00000000000000000000000000008000800B3 +:106DD000080008000000000008000000002000007B +:106DE000002008000000001108009000400502008B +:106DF0000008000300A100A1838582200008000391 +:106E000000000105000000000000008800000000F4 +:106E10000000000000000000000000000000000072 +:106E20000000000000000000000000000000000062 +:106E30000000000000000000000000000000000052 +:106E4000000000000000000000000000000000083A +:106E500000A0000000A000000000000211000901D5 +:106E6000000000010000000000000000000080A001 +:106E700000000000000000040804200809010000D0 +:106E800000000000040000000000000000020000FC +:106E900000000000000000000000000000000000F2 +:106EA00000000000000000000000000000000000E2 +:106EB00000000000000000000000000000000000D2 +:106EC00000000000000000000000000000000000C2 +:106ED0000000000000000000200020001000020060 +:106EE000004000200010002000000000C000000052 +:106EF0009009C000000000418321820001090105C2 +:106F00000009002100200021000000000000000016 +:106F10000000000000000000000003000500000069 +:106F2000000000000000000400000000000000005D :106F30000000000000000000000000000000000051 -:106F40002000000000000000000000000000000021 -:106F50000000000000000000000000000000000031 -:106F60000000000000000000000000000000000021 -:106F70000000000000000000000000000000000011 -:106F80000000000000000000000000000000000001 -:106F9000000010880140041008C00241200400A134 -:106FA00010100000000000000000000000000000C1 +:106F40000000000000000000000000000000000041 +:106F5000000000000000110000020000000000001E +:106F6000800000010001000100010000000000009D +:106F7000000011840082110020C0049000A00402CF +:106F800010000000000000010000000000000000F0 +:106F900000000000000000000000000000000000F1 +:106FA00000000000000000000000000000000000E1 :106FB00000000000000000000000000000000000D1 -:106FC00000000000010008000000000000000000B8 -:106FD00000000000000000000000000000000000B1 -:106FE00000000000000000000000000000000000A1 -:106FF0000000000000000000000000000000000091 -:107000000000000000000000000000000000000080 -:107010000000000010090890000080008088101017 -:1070200000888091000000000000000000000000C7 +:106FC00000000000000000000000000200000000BF +:106FD0000000000000000000000000004004000469 +:106FE0000008880011A0902090A0900404080002DE +:106FF00000109008C0030104081008C011C101046A +:10700000418410A0C0C000040010880200000000ED +:107010000000000000000000000000000000000070 +:107020000000000000000000000000000000000060 :107030000000000000000000000000000000000050 -:107040000000000000004000000000000000000000 -:107050000000000000000000000000000000000030 -:107060000000000000000000000000000000000020 -:107070000000000000000000000000000000000010 -:107080000000000000000000000000000000000000 -:107090000000000000001180109180210288000093 -:1070A00009902011210300000000000000000000F2 +:107040000000000000000000000000000000000040 +:1070500000000000000000000000000000008000B0 +:10706000000000800000908085800000808000800B +:10707000000000808080112010118011800440C128 +:10708000110888808080808000000080000000005F +:1070900000000000000000000000000000000000F0 +:1070A00000000000000000000000000000000000E0 :1070B00000000000000000000000000000000000D0 :1070C00000000000000000000000000000000000C0 :1070D00000000000000000000000000000000000B0 -:1070E00000000000000000000000000000000000A0 -:1070F0000000000000000000000000000000000090 -:10710000000000000000000000000000000000007F -:10711000000000000000000088C00309400984A1AD -:1071200000400009C09001010000000000000000C4 +:1070E0000400108400910000850085A010A091008C +:1070F0008000801180008000000000A180808080DE +:1071000000008010808880808000800500808000E2 +:10711000000000000000000000000000000000006F +:10712000000000000000000000000000000000005F :10713000000000000000000000000000000000004F :10714000000000000000000000000000000000003F :10715000000000000000000000000000000000002F -:10716000000000000000000000000000000000001F -:10717000000000000000000000000000000000000F -:1071800000000000000000000000000000000000FF -:10719000000000000000000000000291002190119A -:1071A0004010881005881008C0080000000000008A +:1071600000000100000800A0000088002041C1824A +:10717000A0900800104110840840020004C084045C +:10718000C0A090A010008485C0100800020010105C +:10719000C00000000000000000000000000000002F +:1071A00000000000000000000000000000000000DF :1071B00000000000000000000000000000000000CF -:1071C00000000000000000000000000000010000BE +:1071C00000000000000000000000000000000000BF :1071D00000000000000000000000000000000000AF -:1071E000000000000000000000000000000000009F -:1071F000000000000000000000000000000000008F -:10720000000000000000000000000000000000007E -:107210000000000000000000000000008021008944 -:1072200000218089099108A041919082000000000E +:1071E00000000000080000040084820882C0000142 +:1071F00004C084C1900200024040880808110010B9 +:10720000C0400802C0040020021110C1040800821E +:10721000008810C000000000000000000000000016 +:10722000000000000000000000000000000000005E :10723000000000000000000000000000000000004E -:107240000000000000000000000000000008001026 -:1072500000410008000000000000000000000000E5 -:10726000000000000000000000000000000000001E -:10727000000000000000000000000000000000000E -:1072800000000000000000000000000000000000FE -:10729000000000000000000000000000000000846A -:1072A0000000210010034089C1009000C0000000D0 +:10724000000000000000000000000000000000003E +:10725000000000000000000000000000000000002E +:107260000000000000008000000000809180830585 +:107270000010801180C0C0000000008009808020C4 +:1072800003919191000480050502411009888080D6 +:1072900000800000028000000000000000000000EC +:1072A00000000000000000000000000000000000DE :1072B00000000000000000000000000000000000CE -:1072C00000000000000000000000000000000004BA +:1072C00000000000000000000000000000000000BE :1072D00000000000000000000000000000000000AE -:1072E000000000000000000000000000000000009E -:1072F000000000000000000000000000000000008E -:10730000000000000000000000000000000000007D -:10731000000000000000000000000000000000006D -:107320000810200208C0900009A002A085000300F8 +:1072E000000000000000000080000011802180806C +:1072F0008004800880A18040000900048080000094 +:107300000002008200008000C109908900802000F6 +:10731000800000020080000000000000000000006B +:10732000000000000000000000000000000000005D :10733000000000000000000000000000000000004D :10734000000000000000000000000000000000003D -:10735000000100000000000000000000000000002C -:10736000000000000000000000000000000000001D -:10737000000000000000000000000000000000000D -:1073800000000000000000000000000000000000FD -:1073900000000000000000000000000000000000ED -:1073A00000000021000007008800600600E00700E0 -:1073B00000110000000000000000000000000000BC +:10735000000000000000000000000000000000002D +:107360000000000000000000000008000400080108 +:107370008208909184A19041A001020002028490B1 +:10738000A0000200002088020200C100108220023A +:107390000500C0000888048402000000000000000E +:1073A00000000000000000000000000000000000DD +:1073B00000000000000000000000000000000000CD :1073C00000000000000000000000000000000000BD :1073D00000000000000000000000000000000000AD :1073E000000000000000000000000000000000009D -:1073F000000000000000000000000000000000008D -:10740000000000000000000000000000000000007C -:10741000000000000000000000000000000000006C -:10742000000000007F196F09F9F93CFFF67E667EC7 -:10743000F042424200000000000000000000000096 +:1073F0000000000000000000060000000082000005 +:107400000600000000000000060048428400006002 +:10741000060084000000000006006000000000007C +:10742000000000000000000000000000000000005C +:10743000000000000000000000000000000000004C :10744000000000000000000000000000000000003C :10745000000000000000000000000000000000002C -:10746000000000000000000000000000000000001C -:10747000000000000000000000000000000000000C -:1074800000000000000000000000000000000000FC -:1074900000000000000000000000000000000000EC -:1074A000000000000000761066003CFF3CFF9018D2 -:1074B00000180000000000000000000000000000B4 +:1074600000000000000000000000000000000030EC +:10747000003096969696000000000000BD7E002029 +:1074800000E406030200E7E7EFEF0F6F0060DBDBCD +:107490000000C3C3000089FF000002C2000000001A +:1074A00000000000000000000000000000000000DC +:1074B00000000000000000000000000000000000CC :1074C00000000000000000000000000000000000BC :1074D00000000000000000000000000000000000AC :1074E000000000000000000000000000000000009C -:1074F000000000000000000000000000000000008C -:10750000000000000000000000000000000000007B -:10751000000000000000000000000000000000006B +:1074F000000099999696969F000000011800FFDB06 +:107500000020002406000200C3C3CFCF0FCF00C06D +:10751000DBD30000FFF7000008FF0000FFFF0000C2 :10752000000000000000000000000000000000005B :10753000000000000000000000000000000000004B :10754000000000000000000000000000000000003B @@ -173955,494 +173955,494 @@ :10757000000000000000000000000000000000000B :1075800000000000000000000000000000000000FB :1075900000000000000000000000000000000000EB -:1075A000000000000000000000003C003E0200005F -:1075B00000000F0F8FCF6600660000000000000083 +:1075A00000000000000000000000000000000000DB +:1075B00000000000000000000000000000000000CB :1075C00000000000000000000000000000000000BB :1075D00000000000000000000000000000000000AB :1075E000000000000000000000000000000000009B -:1075F000000000000000000000000000000000008B -:10760000000000000000000000000000000000007A -:10761000000000000000000000000000000000006A -:107620000000000000000000000000003C003F03DC -:10763000800000000F0F0F0F6600660000000000C2 +:1075F000000000000906000000000000DFFB9F9B68 +:10760000F0F090903000640008008908FF383030B6 +:107610000000F0F10000FF900000DFC30000FFD089 +:107620000000FF81000000000000000000000000DA +:10763000000000000000000000000000000000004A :10764000000000000000000000000000000000003A :10765000000000000000000000000000000000002A :10766000000000000000000000000000000000001A -:10767000000000000000000000000000000000000A -:1076800000000000000000000000000000000000FA -:1076900000000000000000000000000000000000EA -:1076A0000000000000000000000000000000006179 -:1076B0000E26001D000100610E248005000100005F +:107670000000000000000906996600000000DFFB22 +:10768000009BF0F0109000006400080008083838F3 +:1076900030300000F8F90000FF300000C7C30000E0 +:1076A000FF100000FF0300000000000000000000C9 +:1076B00000000000000000000000000000000000CA :1076C00000000000000000000000000000000000BA -:1076D0000000000000000000000000000000006149 -:1076E0000006000D00000000000000000000000087 -:1076F000000000000000000000000000000000008A -:107700000000000000000000000000000000000079 -:107710000000000000000000000000000000000069 -:107720000000000000000000000000000000000059 -:1077300020202020FFC3AFAF55757575F000F0FF16 +:1076D00000000000000000000000000000000000AA +:1076E000000000000000000000000000000000009A +:1076F000000000000000000000613006000D0000E6 +:1077000005610A0E059D00A005000A38050000A0CD +:107710000361030E0C0D12C003A30309CC0D92C02C +:10772000038203080C0092C000000000000000006B +:107730000000000000000000000000000000000049 :107740000000000000000000000000000000000039 :107750000000000000000000000000000000000029 -:107760000000000000FF20FF0000000000000000FB +:107760000000000000000000000000000000000019 :107770000000000000000000000000000000000009 -:1077800000000000000000000000000000000000F9 -:1077900000000000000000000000000000000000E9 -:1077A00000000000000000000000000000000000D9 -:1077B0000000A2A2A2A2FFC3FFC375757575F03CBD -:1077C000F03C00000000000000000000000000008D +:107780000000000000000022440000000000000093 +:1077900000000000000008002B0041413CFF0C0EDF +:1077A00008080000000000000000000000000000C9 +:1077B00000000000000000000000000000000000C9 +:1077C00000000000000000000000000000000000B9 :1077D00000000000000000000000000000000000A9 -:1077E0000000000000000000202000000000000059 +:1077E0000000000000000000000000000000000099 :1077F0000000000000000000000000000000000089 -:107800000000000000000000000000000000000078 -:107810000000000000000000000000000000000068 -:107820000000000000000000000000000000000058 -:1078300000000000000000FF000000003F173C14A3 -:10784000F0FF000F0000000000000000000000003A +:107800000000000000000000001122000000000045 +:1078100000000000000000000800280041413CFF7B +:107820000002000000000000000000000000000056 +:107830000000000000000000000000000000000048 +:107840000000000000000000000000000000000038 :107850000000000000000000000000000000000028 :107860000000000000000000000000000000000018 :107870000000000000000000000000000000000008 -:1078800000000000000000000000000000000000F8 +:1078800000000C0C0C0C000000000410082000008C :1078900000000000000000000000000000000000E8 :1078A00000000000000000000000000000000000D8 -:1078B000000000000000000000FF010100000317AD -:1078C0000014000F000F0000000000000000000086 +:1078B00000000000000000000000000000000000C8 +:1078C00000000000000000000000000000000000B8 :1078D00000000000000000000000000000000000A8 :1078E0000000000000000000000000000000000098 :1078F0000000000000000000000000000000000088 -:107900000000000000000000000000000000000077 -:107910000000000000000000000000000000000067 -:107920000000000000000000000000000000000057 -:10793000A004840088038408050389000203410031 -:10794000049021000400200988000400C000880978 -:107950004011C0A0100010001005A021C000880038 -:1079600020001021400088002041104021214004C7 -:10797000000100004003004000041021000040000E -:10798000204000000003000020000008000000006C -:1079900040000000000000000000000200000000A5 -:1079A0000004000000000000400000004000001043 -:1079B00020004140202010C02000022020409020C4 -:1079C0000200104002201020C140109040204002D0 -:1079D00020C0102040020920409009402040102083 -:1079E00040A0402021202140104041042104049067 -:1079F0002020000041C02020102000204002200252 -:107A000020C01002202000C0000240C02020000240 -:107A100020000000002000000002002040000000C4 -:107A20002020000000000000000420900000000062 -:107A30000000000082000240A0009010004083047B -:107A40000840831082408208004009048209021025 -:107A50000800A008021002000000404002000200DE -:107A60000440000000400800000000000300000087 -:107A70000400020000000000000000000000000000 -:107A80008200000004000000000000000000000070 -:107A90000000000082000000000000000000000064 -:107AA00000000000000000000000000000000000D6 -:107AB000020000000200404002880008004020C090 -:107AC0002041000420400008054000C020090010AB -:107AD000009000400300000004000008801000082F -:107AE000100800C0044041C000C0000405080800A0 -:107AF0000000000004100000000000000008040066 -:107B0000001000100400020800000000000000083F -:107B100000000000020004000000040000820000D9 -:107B20000082000800000482000004000000001031 -:107B3000000800000000000800008200A005A0402E -:107B400082001188880582080809209003082021F6 -:107B5000C04008A103030240004040828402410269 -:107B60001000C00440004008000010209040082091 -:107B70009009000004000400000004002000200020 -:107B8000200088081008400010400000400010004D -:107B9000000088000000100008080000000000003D -:107BA0000000020000000000000090000000000043 -:107BB0000000000000000000000003004100100071 -:107BC0000000410002400200044003200302820240 -:107BD00010A00882054082C09088000083031090A6 -:107BE000C083080003000000040811001100050014 -:107BF0000004030010004000050000000000040025 -:107C000010900000000000000900000000000000CB -:107C1000040400000000000000004100000000001B -:107C20000000000000000000000000000000000054 -:107C3000000000000000000000000000020002043C -:107C400002000304A010C0040800A0041009A00052 -:107C5000400000048440C000828084408200008094 -:107C600004008400840000080000C0000000000040 -:107C700000000000000008000000000000000004F8 -:107C800000000000000400000040000000000000B0 -:107C900000000000000000000000000000000000E4 -:107CA00000000000000000000000000000000000D4 -:107CB000000000000000000000000000000484102C -:107CC00080A085408284000800110300000100C0EC -:107CD0000200001000A10000000000401110000090 -:107CE0000002004000000010000000000000000042 -:107CF00000000000000000A00000000000000000E4 +:10790000000000000C0C0C0C000000000140028084 +:107910000000000000000000FC001010000000004B +:107920005555FF00000000000000000000000000AE +:1079300004000400000020008800880088008800FF +:107940008900400088000200C00088008800000014 +:10795000880088000400040520002000200020008A +:107960002000200020002000200000000000000077 +:107970000000200000002000200020008800880077 +:1079800020000000000000000400400010008800FB +:107990000000200000002000200020004000000027 +:1079A000880000008800C000400020000000200087 +:1079B00088000000000004000008004002004000B1 +:1079C0000040400080000000800000000000000037 +:1079D0000000000020000000000000000000000087 +:1079E0000002000000000000000000000000000095 +:1079F00000000000400000000040000000004000C7 +:107A00000000000040000000000000008000800036 +:107A10000000000000000000000000004000000026 +:107A200000000000000000000000800000000000D6 +:107A3000000000000000204088000000020002005A +:107A40002000004000000000000000000000A00036 +:107A50000000000000000000000000000000000026 +:107A60000000000000000000000000000000000016 +:107A70000000000000000000000000000000000006 +:107A800000000000000000000000000000001000E6 +:107A90004000000010000000040000000000000092 +:107AA0002000200011000000000000000000000085 +:107AB00000000000084000002000000000080488CA +:107AC0000400020000100408040000000400040088 +:107AD0000400020000080000000000000008000090 +:107AE0000000000004000008040000000000000086 +:107AF000040000000010000000000000000000086A +:107B000000002082000000000010000000000000C3 +:107B10008900C10000008310000000000000000880 +:107B20000000A0008000A000000000000000000095 +:107B30000000200000000000000000000000000025 +:107B40000000000000000000000000000000A00095 +:107B50000000000000000000000000000000000025 +:107B60000000000800000000000000000000000508 +:107B70000000000000000000000000000000000005 +:107B800000000000010000004000000000000000B4 +:107B900000000080000002800021000000000000C2 +:107BA0000000000083A10000110800800000000018 +:107BB000000800000005000000080300080008009D +:107BC00000000000000008000000000000000000AD +:107BD000000000000000000000000800000000009D +:107BE000080000000000000000000000000000008D +:107BF0000000000000000000000000000000000085 +:107C000000000000000010000000800000000000E4 +:107C10000800008400040000800200000000000052 +:107C20000000000000000208000082010002008441 +:107C3000000000A00008008400A0004008008200AE +:107C400082000000A000080004000000A0008200E4 +:107C50000000000000000000000000000000000024 +:107C60000000000004000000000000000000000010 +:107C700000000000000008000800000000000000F4 +:107C8000000000000000C000000008000000A0008C +:107C90000000000000000800A000A000C00082005A +:107CA0000400000000008200000000000900000045 +:107CB000C0000000A00082000000000000000000E2 +:107CC00004000000000000000000000000000000B0 +:107CD0000800020000000300000000000200000095 +:107CE0000000000000000000000000000000000094 +:107CF000000000000400030000000000000000007D :107D00000000000000000000000000000000000073 -:107D1000002000000010040000000000040000002B -:107D20000000210000000000000000000000000032 -:107D30000000000000000000000000000000000043 -:107D40000241A000020000000200200004110241D4 -:107D5000024002C0112000840140024002000205DE -:107D600008020041C0020002000000000004000000 +:107D1000040000000000000000000004000000005B +:107D2000040000000400000000000000000010003B +:107D3000000000000000080000000000000000003B +:107D400000000000000000008200000082008200AD +:107D50000000000000000000000000000000000023 +:107D60000000000000000000000000000000000013 :107D70000000000000000000000000000000000003 -:107D800000000003000000000000000000000000F0 -:107D90000040900000000000000000000000000013 -:107DA00000000000000000000000000000000000D3 -:107DB00000000000000000000000000000000000C3 -:107DC000000004A00000800010009100918805A030 -:107DD00089822105C1034020204102208300110037 -:107DE00082884120000040010001000009000800D5 -:107DF0000000000009000000000021000000000059 +:107D800000000000080000000000000000000000EB +:107D9000080008000000000008050100010020881C +:107DA0000104000000000000A00000000000082006 +:107DB00010080041000000000080000000000000EA +:107DC0000000002000000000000000000000000093 +:107DD00000000000000000000000000000000000A3 +:107DE0000000000000000000000000000000000093 +:107DF0000000000000000000000000000000000083 :107E00000000000000000000000000000000000072 -:107E1000000000000000000008000020100000002A -:107E20000000000000000000000000000000000052 -:107E30000000000000000000000000000000000042 -:107E400000000008A0210000000004001000050050 -:107E5000020820040011400200410000001100A1AE -:107E600000030009000900000009002100080008C3 -:107E7000001000008400000000000000000000006E -:107E800000000000000000000000000000050000ED -:107E900000000000002100000000000000000000C1 -:107EA0004000000000000000000000000000000092 -:107EB00000000000000000000000000000000000C2 -:107EC00000000000000000000010000000000000A2 -:107ED000028489008001000000010000020000000F -:107EE0004040000000000000000000000000000012 +:107E1000000000000082000000000084200020001C +:107E200083092001000241000008008402000000D4 +:107E3000000180A10010210041A0110200020000F9 +:107E4000000800A08200000000000000080082007E +:107E500000000800000000000000000000110021E8 +:107E60000000000000000000000000000000000012 +:107E70000000000000000000000000000000000002 +:107E800000000008000000000000000000004000AA +:107E900000000000000000000800C0000800000012 +:107EA000000000004021000304000000000000006A +:107EB000040000000420000000090009000900007F +:107EC00000030000000000000000000000000000AF +:107ED00000000000000000000000000000000000A2 +:107EE0000000000000000000000000000000000092 :107EF0000000000000000000000000000000000082 -:107F00000000000011000000000000000000000060 -:107F10000000000000002000000000200020000001 -:107F20000000002000000000000000000000000031 -:107F30000000000000000000000000000000000041 -:107F4000000800000010000004C000C00010000085 -:107F500001C000200403100302080020200888C08C -:107F600000C000840084101000019000080100008F +:107F00000000000000000000000000000000000071 +:107F100080000000000000000000000000000000E1 +:107F20000000000000000000000000000000000051 +:107F30000000800000002041000000000000000060 +:107F40000000000000000000000000000000000031 +:107F5000000000000000000004A121010000000456 +:107F60000000000000000000000000000000000011 :107F70000000000000000000000000000000000001 -:107F800000000000000008000000000000000000E9 -:107F900000000000000000000000000000000000E1 -:107FA00000000000000000000000000000000000D1 -:107FB00000000000000000000000000000000000C1 -:107FC0000000000000000000000000800000000031 -:107FD00000000882000000200008918003800083D8 -:107FE00000030000000000000080094021038040E1 -:107FF000000200000000000000000000000000007F -:1080000000000000000000008000000000000000F0 -:108010000000000000000000000000000000000060 -:108020000000000000000000000000000000000050 -:108030000000000000000000000000000000000040 -:1080400000000000000000000000000000008010A0 -:108050000000800082808910100011C080002190F3 -:1080600082800040000000C000008000028000000C -:1080700020002103000000000000000000000000BC -:10808000000000000000000380008080000000006D +:107F800000000000000000000002000000000000EF +:107F900000000001010110000000000000000000CE +:107FA0000000000188000201000100000000000044 +:107FB000000010A0050402C100050001010102003B +:107FC00000010000000000000000000000000000B0 +:107FD000000000000000000000008082102100046A +:107FE0000080000000000000000000000000000011 +:107FF0000000000000000000000000000000000081 +:108000000000000000000000000000000000000070 +:108010000000000000400404001000020000000006 +:108020000000000011418002C103000200000000B6 +:10803000000000008088A04080200009000203406A +:108040008020000800000000000000000000000088 +:10805000000000000000000000000000000082009E +:10806000C08080210000000000000000000000002F +:108070000000000000000000000000000000000000 +:1080800000000000000000000000000000000000F0 :1080900000000000000000000000000000000000E0 -:1080A00000000000000000000000000000000000D0 -:1080B00000000000000000000000000000000000C0 -:1080C00000000000000000000000000000000000B0 -:1080D0001001C000C000100810000000020308409A -:1080E0008910080800029000C0C100040288001036 -:1080F000000000000101000000000000000000007E -:1081000000000000000000000401100008900000C2 +:1080A00000000000000020400504052041A1000060 +:1080B00000000000000004002000910903020000FD +:1080C0000000000000800000000000000000000030 +:1080D000000000000000000000000000000000A000 +:1080E0000300A0A0820100000000000000000000CA +:1080F0000000000000000000000000000000000080 +:10810000000000000000000000000000000000006F :10811000000000000000000000000000000000005F -:10812000000000000000000000000000000000004F -:10813000000000000000000000000000000000003F -:10814000000000000000000000000000000000002F -:10815000049000C00002C0C000900082C10304C0AF -:10816000000900001009088300C000828210848882 -:1081700000000000020100000000000000000000FC -:1081800000000000000000000004001000100002C9 -:1081900000000000000000000000000000000000DF -:1081A00000000000000000000000000000000000CF -:1081B00000000000000000000000000000000000BF -:1081C00000000000000000000000000000000000AF -:1081D00000000000000000000080000811C108211C -:1081E000048002C0000480A1859009000000808006 -:1081F0000000000402091005041000000000000047 +:10812000000000000000000000200001019001A1FB +:1081300000000000000000000300C108A0C01141C1 +:10814000000000000000000400000000000000002B +:10815000000000000000000000000000000000001F +:10816000084000040103200100000000000000009E +:1081700000000000000000000000000000000000FF +:1081800000000000000000000000000000000000EF +:1081900000000000000000000000000001010000DD +:1081A000000100000000000000000000210090001D +:1081B00001010000000000000000C0C0010840C133 +:1081C00010A10000010001010001000000000000FA +:1081D000000000000000000000000000000000009F +:1081E00000008020098005A10810000000000000A8 +:1081F000000000000000000000000000000000007F :10820000000000000000000000000000000000006E -:10821000000000000000000000000000000000005E -:10822000000000000000000000000000000000004E -:10823000000000000000000000000000000000003E -:10824000000000000000000000000000000000002E -:10825000000000000040000000800000C021090272 -:1082600041800803A100409105802000000000919A -:108270008080000021902108080008030000000011 -:1082800000000000000000000000000000100002DC -:1082900000000000000000000000000000000000DE -:1082A00000000000000000000000000000000000CE -:1082B00000000000000000000000000000000000BE -:1082C00000000000000000000000000000000000AE -:1082D0000000000000008801000800400200C1C149 -:1082E0009004028404010900100884840100040041 -:1082F0009004101000000140000001000101000086 -:1083000000000000000000000000000000008200EB -:108310000010A0100000000000000000000000009D +:10821000000000000000000000000000001120200D +:108220004141004100000000000000000004020580 +:108230000000104100000000000000004004108217 +:108240000008004100040840400200400000000017 +:10825000000000000000000000000000000000001E +:108260000000000009409080A0800521000000006F +:1082700000000000000000000000000000000000FE +:1082800000000000000000000000000000000000EE +:1082900000000000000000000000000000000004DA +:1082A0000000000000000000000000000000C1808D +:1082B00090000000800500000000000000004191D7 +:1082C00082042100C0000000000000000000000047 +:1082D000000000000000000000000000000000009E +:1082E00000000000000082A0030284402001000082 +:1082F000000000000000000000000000000000007E +:10830000000000000000000000000000000000006D +:10831000000000000000000000000000000000005D :10832000000000000000000000000000000000004D -:10833000000000000000000000000000000000003D -:10834000000000000000000000000000000000002D +:1083300009400500000004000000000000000000EB +:10834000C1A12005A1C0080000000000000000003D :10835000000000000000000000000000000000001D -:10836000880000E000000000410000E00000000084 -:1083700000000000000042000000000000000000BB +:10836000000000000000000000000000000000000D +:1083700000000000000000000000000000000000FD :1083800000000000000000000000000000000000ED -:108390000081000007000000000000000000000055 +:1083900000000000000000000000000000000000DD :1083A00000000000000000000000000000000000CD -:1083B00000000000000000000000000000000000BD -:1083C00000000000000000000000000000000000AD -:1083D000000000000000000000003C3C0000FFFF27 -:1083E000E343FFFFCF00FFFFC30300FF0AF555691A -:1083F000AAAA5FA050AF0F33F0F000000000000009 +:1083B000000000000060000000000000000000005D +:1083C00000000082006006000000000000000000C5 +:1083D000000000000000000000000000000000009D +:1083E0000000000000000000000000000008010084 +:1083F000010000000000000000000000000000007C :10840000000000000000000000000000000000006C -:108410000000F0F0FFFF000000C0000000000000BE +:10841000000000000000000000000000000000005C :10842000000000000000000000000000000000004C -:10843000000000000000000000000000000000003C -:10844000000000000000000000000000000000002C -:10845000000000000000000000000000FFFFC3C398 -:10846000FFFFE343FFFFFF30FFFFC3F3FF005FA009 -:108470005555AA96FF0000FF0F0FF0CC000000003A +:10843000000000000000C3820000000000000000F7 +:1084400000000000EAEACFCA14FF0FCF00000000CE +:10845000000000000000000000000000000000001C +:108460000000000000000000000000000000000804 +:1084700001000100000000000000000000000000FA :1084800000000000000000000000000000000000EC -:108490000000000000000F0F0000000000000000BE +:1084900000000000000000000000000000000000DC :1084A00000000000000000000000000000000000CC :1084B00000000000000000000000000000000000BC -:1084C00000000000000000000000000000000000AC -:1084D0000000000000000000000000000000AAF002 -:1084E000FFFFA0AAFFFF01FBFFFFA5A5CCCC36C66E -:1084F0003CC34D554D5595A9A5A595959A9A000053 +:1084C000000000000000EAEACFCA14FF0FCF00004E +:1084D000000000000000000000000000000000009C +:1084E000000000000000000000000000000000008C +:1084F000000000000000000000000000000000007C :10850000000000000000000000000000000000006B -:10851000000000000000000000000000500000000B +:10851000000000000000000000000000000000005B :10852000000000000000000000000000000000004B :10853000000000000000000000000000000000003B -:10854000000000000000000000000000000000002B +:108540000000000000000000040004C334B60082F4 :10855000000000000000000000000000000000001B -:10856000F0F0FFFFAFAAFFFF01FBFFFFCCCCCCCCAC -:1085700036C63CC3B2AAB2AA95A9A5A59696969668 +:10856000000000000000000000000000000000000B +:108570008282000000000A000000000000000000ED :1085800000000000000000000000000000000000EB :1085900000000000000000000000000000000000DB :1085A00000000000000000000000000000000000CB :1085B00000000000000000000000000000000000BB -:1085C00000000000000000000000000000000000AB -:1085D000000000000000000000000000000000009B -:1085E0000000400280000020920240E380048029C5 -:1085F0009002406180068029100240008000002027 -:10860000080200610006000D0000000000000000EC -:108610000000000000000000000000000028000032 -:10862000000000000000000000000000000000004A -:10863000000000000000000000000000000000003A -:10864000000000000000000000000000000000002A -:10865000000000000000000000000000000000001A -:10866000000000000000000000000000A0A0A0002A -:108670000C5C0C5C000000003AFA3AFA00000000C2 -:10868000000000002020202000000000000000006A +:1085C00000000000000000000000040404C7008256 +:1085D0000082000000000000000000000000000019 +:1085E000000000000000000000000000000000008B +:1085F000000000614006000D0000000000000000C7 +:10860000000000000000000000000000000000006A +:10861000000000000000000000000000000000005A +:1086200000000000000000000000000000610006E3 +:10863000000D000000000000000000008061000745 +:10864000000D0000000000000000000005414A3C51 +:10865000050900A100610006000D000000000000F7 +:10866000000000000000000000000000000000000A +:108670000000000000000000FFFFFFFF00000000FE +:1086800000000000000000000000000000000000EA :1086900000000000000000000000000000000000DA :1086A00000000000000000000000000000000000CA -:1086B00000000000000000000000000000000000BA -:1086C00000000000000000000000000000000000AA -:1086D000000000000000000000000000000000009A -:1086E0000000000000000000000000000000C3C304 -:1086F000C3C30C5C0C5C0080000030F03FFF000046 -:1087000000000000000020282020000008000000D9 +:1086B0000000BEF796F70000000000000000005523 +:1086C00000AA282830300000000000000000FFFF52 +:1086D0000FFFC3C30FFF00000000000000000000F8 +:1086E000000000000000000000000000000000008A +:1086F000000000000000000000803CFFFFFF0000C1 +:108700000000000000000000000000000000000069 :108710000000000000000000000000000000000059 :108720000000000000000000000000000000000049 -:108730000000000000000000000000000000000039 -:108740000000000000000000000000000000000029 -:108750000000000000000000000000000000000019 +:1087300000000000FFFE82FE0000000000000000BC +:108740000000000028283030000000000000000079 +:1087500000FF3CFFFF410FFF0000000000A00020D1 :108760000000000000000000000000000000000009 -:10877000A3A3A3A382BE82BEC0C0C0C00F000F00CF -:10878000000000000000000000000000AAFFFFFF42 +:10877000000000000000000000000500FFFFFFFFF8 +:1087800000000000000000000000000000000000E9 :1087900000000000000000000000000000000000D9 :1087A00000000000000000000000000000000000C9 -:1087B00000000000000000000000000000000000B9 -:1087C00000000000000000000000000000000000A9 -:1087D0000000000000000000000000000000000099 +:1087B0000000FC3FF7BF00000000000000000000C8 +:1087C000000028000F00003C4545000000000000AC +:1087D0000000FCC0D4C03CFF3CF0C3C3C3C30000D6 :1087E0000000000000000000000000000000000089 -:1087F0000000A0A0AFAF0000F0F0C0C0C0C00F00EC -:108800000F00000000000000000000000080AAFF30 -:108810003C3C0000000000000000000000000000E0 +:1087F0000000000000000000000000000000F5FF85 +:10880000F5FF000000000000000000000000000074 +:108810000000000000000000000000000000000058 :108820000000000000000000000000000000000048 -:108830000000000000000000000000000000000038 -:108840000000000000000000000000000000000028 -:108850000000000000000000000000000000000018 -:10886000000000000000000000000000A000200048 -:10887000C00010108810880004101000880020002C -:10888000A000880010042000000404002040100014 -:10889000C0008800400810000000C000880988411E -:1088A00088210000C0824002A00000000003A00058 -:1088B00000008811020000000180000004A01000E8 -:1088C00000050005000500000004000400042084E9 -:1088D0000000000000800004008010002000000064 -:1088E000000000000003000400000004008440C0F9 -:1088F000090020204020052004400520052010C04C -:1089000010201000402040821020410220C0102082 -:108910000920000441042040202010A020402020F5 -:108920001020080220201010208440402020000049 -:1089300040022120210240204020201010902005DC -:1089400000840020404010A02020402100030003AC -:108950000005002000000004004100040000002089 -:1089600040004000000000020001000000900004F0 -:1089700082400840021000400003832000050040B0 -:10898000004182400005004020400040204020413E -:10899000024100400040004000400040000500400F -:1089A000000800000000000800400000A0000000D7 -:1089B0000000000000000000001000042100201052 -:1089C000018400000000100000000180018001808F -:1089D000A1800180010401880580018001880100D7 -:1089E00001000185058001800380014003000180B2 -:1089F0002000000805080008000400080409000819 -:108A000000080004000800400004800805088008F1 -:108A1000800804080008000805080008000800C0D5 -:108A20000408408800080000000000080008000852 -:108A30000008000000400004000800080409C00805 -:108A4000800004210008008400080008200420049D -:108A500020042004200420012004200420042004F9 -:108A60002084200020042004200420042001200869 -:108A700020048008000000008221002104218810C9 -:108A800040414000A0004000101088058210A04125 -:108A90001041100090108400C0210803880082005B -:108AA000400010008400100010081000100090001A -:108AB0002021900000004000000010000800040089 -:108AC000A009200310210800080300004000000452 -:108AD00000210021900800090004000400040002A5 -:108AE00000042084000400000000000000000000DA -:108AF00000000005000000C04082410200080000A4 -:108B000000400840030009A00302030241000502DF -:108B10000584044003000300000004020000040474 -:108B2000000010880010040005000000050003008C -:108B30000300000000000000004000A00010410001 -:108B400000A000A090A000001000000000000000A5 -:108B50000001000800000000000000010001000109 -:108B6000000000018005000100080000000000A0D6 -:108B70000000000000000000821004410400C00456 -:108B80000440044082008400C00004008400080007 -:108B900004008200820084401000A00082001000C7 -:108BA0008200C0000000000000000000A020004083 -:108BB0000000000000000020000000040000000091 -:108BC000000020410103850920000000000088000A -:108BD0008800820000000000820008000000000001 -:108BE0000000000000000000000000000000000085 -:108BF00000200000008500000041080000000090F7 -:108C00000000000480000004000000100010008834 -:108C1000000011040004000000000010000000002B -:108C20000010000000000000000000000000000034 -:108C3000000000000000000000000000000800002C -:108C400000000000800020002008800000000000DC -:108C50000000000000000008000800A00000000064 -:108C600000000008000800000000000000000000F4 -:108C70000000000000000404000000000000A0004C -:108C800000000000A005A00004000000100000008B -:108C900000410041000000000000C0000000000092 -:108CA0001000000000000000002100000041000052 -:108CB0000000000040000000000000000000000074 -:108CC0000000000000000000000000000500000897 -:108CD0000008A0000008002100008204000000003D -:108CE0000000A004000000000000020400000000DA -:108CF00002000004000004000000900000000202D6 -:108D000000020000090000840588208420C00008BB -:108D1000000211040000004003000004024002C0F1 -:108D2000000021000002119000000000000011046A -:108D30000020000400000000000800000000000007 -:108D4000000000002000000000201000000084004F -:108D500000000000000000000000000000012000F2 -:108D600000000000000100000002000000010000FF -:108D70000000800000010000000000000000000072 -:108D8000A000100000050000C000000000400041ED -:108D90000008C0000405001000001100A011001020 -:108DA0000000002000210000000000008200000000 +:10883000000000003C3CC30C0000000000000000F1 +:108840000000000028000F00000045450000000067 +:1088500000000000FCC0D4C03CFF3CFFAAF000F0C8 +:1088600000000000000000000000000000002000E8 +:1088700000000200000088000000000088000000E6 +:10888000200000000000840084000000840020001C +:108890000000840000002000000000000400000030 +:1088A0000400040000002000200084000000840078 +:1088B00020000000200000000000000088002000D0 +:1088C0000400200004008410200020002000880004 +:1088D00020000000880084000000840020002000A8 +:1088E0002000200084002008040004002000000074 +:1088F0000000000000000000000000000000000078 +:108900000000000000000000100000000000000057 +:108910000000000000000000400000000000000017 +:10892000000000000900000000000000000000003E +:10893000000000000900000000000000000000002E +:108940000000000000000000000000000000000027 +:1089500020000000000000000000000000000000F7 +:1089600000000000000000000000000040000000C7 +:1089700002000000021000100000000000000000D3 +:1089800002000200200000000000000000000000C3 +:108990000200000000000000000000000400004091 +:1089A00000000000000000000000000000000000C7 +:1089B00000000000000000000000000000000000B7 +:1089C00000000000000000000000000000000000A7 +:1089D0000000000000000000000800000000000887 +:1089E0000000000000000000000000000000000087 +:1089F0000000000000000000000000000000000077 +:108A0000000000000400040000000000040000005A +:108A10000000000004000000000000000000000052 +:108A20000000000000000000000000000000000046 +:108A30000000000000000000000000000000000036 +:108A40000000000000000000000000000000000026 +:108A50000000000000000000000000000000000016 +:108A60000000000000000000000000000400000002 +:108A700000000000000000000000000000000000F6 +:108A800000000000000000000000000000000000E6 +:108A900000000000000000000000000000000000D6 +:108AA00000000000000000000000000000000000C6 +:108AB00000000000000000000000000000000000B6 +:108AC00000000000000000000000000000000000A6 +:108AD0000000000000000000000000000000000096 +:108AE000000000000000200008000000000000005E +:108AF00000009000000000000000000000002100C5 +:108B00000300000003000800000000000000000057 +:108B10000000000000000000000000000000000055 +:108B20000000000000000000000000000000000045 +:108B30000000000000000000000000000000000035 +:108B40000000000000000000030021C04100000000 +:108B50000000000000000000000000000000000015 +:108B600000100000410000000000000000820084AE +:108B700000000800000000000800000000000000E5 +:108B800000000000000000000000000000000000E5 +:108B900000000000000000000000000000000800CD +:108BA00000000000000000000000000008000000BD +:108BB000000000000000C0000000080000000000ED +:108BC0000000000000000000000082000000000023 +:108BD000080000000000000000000000000000008D +:108BE000000000000000000900000000000000007C +:108BF000080000000000000040000000000000002D +:108C00000000000000000000000000000000000064 +:108C10000000000000000000000000000000000054 +:108C20000000000000000000000000000000000044 +:108C30000000000000000000000000000000000034 +:108C40000000000000000000000000000000000024 +:108C50000000000000000000000000000000000014 +:108C60000000000000000000000000000000000004 +:108C700000000000000000000000000000000000F4 +:108C800000000000000000000000000000000000E4 +:108C900000000000000000000000000000000000D4 +:108CA00000000000000000000000000008000000BC +:108CB00000000000000000000000000000000000B4 +:108CC0000000000000000000000000008200000022 +:108CD0000000000000000000000000000000000094 +:108CE000000000000800000000000000000000007C +:108CF000000000000000000000080000000000006C +:108D0000000000000000000000000000000008005B +:108D1000210008000000000000000000000000002A +:108D20000000000000000000000000000000000043 +:108D30000000000000000000000000000000000033 +:108D40000000000000000000000000000000000023 +:108D50000000000000000000000009000900000001 +:108D60000000000000000000210000000008008456 +:108D7000000800000084000800000000000000005F +:108D8000080000000000000000004000000000009B +:108D900000000000000000000000000000000000D3 +:108DA00000000000000000000000000000000000C3 :108DB00000000000000000000000000000000000B3 -:108DC00000000000080020000000000000008500F6 -:108DD000000000A102050421002100040204820019 -:108DE000400000048480840008000004A100A0006A -:108DF00082000004A000000000000004A080000029 -:108E00008800000000100000008400000000000046 -:108E100000000000000040000000000020000000F2 -:108E200000000000040004000000000000820000B8 -:108E30000010000000000000000000000000000022 -:108E4000040000000000000000000000020000001C -:108E5000080000000040A0000008000000018001A0 -:108E600000000000000100400000000000010200BE -:108E700000000000030100000000000000010040AD -:108E80000000000000000000000000004088000218 -:108E900000C0040800000000000000000000000006 -:108EA00001000000000000000000000000000000C1 +:108DC000000000000000000000000000080000009B +:108DD0000000000000000000000000000000000093 +:108DE0000000820000000000000000000000000001 +:108DF0000000000000000000000200000000082049 +:108E0000000800000000000000000000000000005A +:108E10000000000000000000000000000000000052 +:108E20000000000000000000000000000000000042 +:108E30000000000000000000000000000000000032 +:108E40000000000000000000000000000000000022 +:108E50000000000000000000000000000000000012 +:108E60000000000000000000000000000090000072 +:108E700000000000000000000000000000000000F2 +:108E800000000000000000000000000000000000E2 +:108E900000000000000000000000000000000000D2 +:108EA00000000000000000000000000000000000C2 :108EB00000000000000000000000000000000000B2 -:108EC000000000000000000000000000000000A002 -:108ED000000200030008000000000000000001C1C3 -:108EE00000000091000001C100002090000001C1BD -:108EF00000010090000101C100000090000001C0CD -:108F000001000090000100000000000000008080CF -:108F100000000000008000000000000000000000D1 -:108F20000000080000000000000000000000000039 +:108EC00000000000000000000000000000000000A2 +:108ED0000000000000000000000000000000000092 +:108EE0000000000000000000000000000000000082 +:108EF0000000000000000000000000000000000072 +:108F00000000000000000000000000000000000061 +:108F10000000000000000000000000000000000051 +:108F20000000000000000000000000000000000041 :108F30000000000000000000000000000000000031 :108F40000000000000000000000000000000000021 -:108F500000800011041000910000000000000000DB -:108F600009912105009000000991210500A0000051 -:108F7000099121020085001009912105008500005A -:108F80001183400500C10010000000000000000037 -:108F900000000011001000000000000000000000B0 -:108FA00000020000001000000000000000000000AF +:108F50000000000000000000000000000000000011 +:108F60000000000000000000000000000000000001 +:108F700000000000000000000000000000000000F1 +:108F800000000000000000000000000000000000E1 +:108F900000000000000000000000000000000000D1 +:108FA00000000000000000000000000000000000C1 :108FB00000000000000000000000000000000000B1 -:108FC0000000004100000000000000000000000060 -:108FD00000008009000380108080800000000000F5 -:108FE00080009180200010098000918020002009DD -:108FF00085409180050005098500918005000509DF -:1090000085108280050011099041000000000000D9 -:109010000000000000A1002000000000000000008F +:108FC00000000000000000000000000000000000A1 +:108FD0000000000000000000000000000000000091 +:108FE0000000000000000000000000000000000081 +:108FF0000000000000000000000000000000000071 +:109000000000000000000000000000000000000060 +:109010000000000000000000000000000000000050 :109020000000000000000000000000000000000040 :109030000000000000000000000000000000000030 -:10904000000000000001001000000000000000000F -:10905000000000008884880104009090080000004F -:109060000000C000084000000101C00008400000EE -:109070000001C000084000000001C00008400000DE -:109080000001C001084000000101C1010000000012 -:1090900000000000A0040002004010880000000052 -:1090A000000000000000C000000000000000000000 +:109040000000000000000000000000000000000020 +:109050000000000000000000000000000000000010 +:109060000000000000000000000000000000000000 +:1090700000000000000000000000000000000000F0 +:1090800000000000000000000000000000000000E0 +:1090900000000000000000000000000000000000D0 +:1090A00000000000000000000000000000000000C0 :1090B00000000000000000000000000000000000B0 :1090C00000000000000000000000000000000000A0 -:1090D0000000000000001004880021A00000000033 -:1090E00000020000000000000000018501C1000036 -:1090F0000000008501C100000000008401C10000E3 -:109100000100018401C100000000008501C10000D0 -:10911000000000000000000000000080800000004F -:1091200000000000000000008000000010000000AF +:1090D0000000000000000000000000000000000090 +:1090E0000000000000000000000000000000000080 +:1090F0000000000000000000000000000000000070 +:10910000000000000000000000000000000000005F +:10911000000000000000000000000000000000004F +:10912000000000000000000000000000000000003F :10913000000000000000000000000000000000002F -:10914000000000000000000000000000020000001D -:1091500000000000000000000000110008000200F4 -:1091600000000080000000000020202040901191AD -:1091700000002020408211910040050500851191DA -:10918000000210051085119100200905008511903D -:1091900000000000000000000011000000000000BE +:10914000000000000000000000000000000000001F +:10915000000000000000000000000000000000000F +:1091600000000000000000000000000000000000FF +:1091700000000000000000000000000000000000EF +:1091800000000000000000000000000000000000DF +:1091900000000000000000000000000000000000CF :1091A00000000000000000000000000000000000BF :1091B00000000000000000000000000000000000AF -:1091C000000000000000000000000000800000001F -:1091D000000000000000000000000021A10090003D -:1091E00010000000000000000000A0009011050029 -:1091F0000309A000A01103000009A00085110500CB -:109200000309800085110500030980008511100005 -:1092100003090000000000000000900008000800A2 -:1092200088000000000000000000000000000000B6 +:1091C000000000000000000000000000000000009F +:1091D000000000000000000000000000000000008F +:1091E000000000000000000000000000000000007F +:1091F000000000000000000000000000000000006F +:10920000000000000000000000000000000000005E +:10921000000000000000000000000000000000004E +:10922000000000000000000000000000000000003E :10923000000000000000000000000000000000002E -:10924000000000000000000000008800A000840072 -:1092500008000000000000000000000002010800FB -:10926000089000000000000000000000C084910190 -:1092700000000101C000900101000001C000900148 -:1092800000000101C000900100000101C000900138 -:109290000100010100000000000000000082000049 -:1092A000070000000000000000000000410000E096 -:1092B000000042000000000000000000000000006C +:10924000000000000000000000000000000000001E +:10925000000000000000000000000000000000000E +:1092600000000000000000000000000000000000FE +:1092700000000000000000000000000000000000EE +:1092800000000000000000000000000000000000DE +:1092900000000000000000000000000000000000CE +:1092A00000000000000000000000000000000000BE +:1092B00000000000000000000000000000000000AE :1092C000000000000000000000000000000000009E -:1092D000000041000000000000000000000000212C -:1092E00000E0070000000000000000000000600037 -:1092F00000E000000000600000E0000000006000EE -:1093000000E000000000600000E0000000004100FC -:1093100000E0000000120000000000000000663FB6 -:10932000660F003000300000000000000000000068 +:1092D000000000000000000000000000000000008E +:1092E000000000000000000000000000000000007E +:1092F000000000000000000000000000000000006E +:10930000000000000000000000000000000000005D +:10931000000000000000000000000000000000004D +:10932000000000000000000000000000000000003D :10933000000000000000000000000000000000002D -:109340000000000000000000000000000000F42405 -:10935000F00000000000000000000000000000001D -:10936000FFF0FFFF3C003C0000000000F0F0F0F0D8 -:10937000FF000000FF000000FF000000FF000000F1 -:10938000FF000000FF000000FF000000FF000000E1 -:10939000FF000000FF0000000000000000000000CF -:1093A00066306600909000000000000000000000A1 +:10934000000000000000000000000000000000001D +:10935000000000000000000000000000000000000D +:1093600000000000000000000000000000000000FD +:1093700000000000000000000000000000000000ED +:1093800000000000000000000000000000000000DD +:1093900000000000000000000000000000000000CD +:1093A00000000000000000000000000000000000BD :1093B00000000000000000000000000000000000AD :1093C000000000000000000000000000000000009D -:1093D000F000F000000000000000000000000000AD -:1093E0000000FFFFFFFF3C003C0000000000F0F029 -:1093F000F0F0FF000000FF000000FF000000FF0091 -:109400000000FF000000FF000000FF000000FF0060 -:109410000000FF000000FF0000000000000000004E +:1093D000000000000000000000000000000000008D +:1093E000000000000000000000000000000000007D +:1093F000000000000000000000000000000000006D +:10940000000000000000000000000000000000005C +:10941000000000000000000000000000000000004C :10942000000000000000000000000000000000003C :10943000000000000000000000000000000000002C :10944000000000000000000000000000000000001C @@ -174451,493 +174451,493 @@ :1094700000000000000000000000000000000000EC :1094800000000000000000000000000000000000DC :1094900000000000000000000000000000000000CC -:1094A000000000000400FFFF0000000000000000BA +:1094A00000000000000000000000000000000000BC :1094B00000000000000000000000000000000000AC :1094C000000000000000000000000000000000009C :1094D000000000000000000000000000000000008C -:1094E000000000000000FFFFFFFF003CC3FF000082 -:1094F000000000003C3C00000F0F00003C3C00005E -:109500000F0F00003C3C00000F0F00003C3C00002F -:109510000F0F00003C3C00000F0F00003C3C00001F -:109520000000000000000600FFFF00000000000037 +:1094E000000000000000000000000000000000007C +:1094F000000000000000000000000000000000006C +:10950000000000000000000000000000000000005B +:10951000000000000000000000000000000000004B +:10952000000000000000000000000000000000003B :10953000000000000000000000000000000000002B :10954000000000000000000000000000000000001B :10955000000000000000000000000000000000000B -:1095600000000000000000003FFFFFFF0F0F0F0F83 -:109570000000000000003C3C00000F0F00003C3CDD -:1095800000000F0F00003C3C00000F0F00003C3CAF -:1095900000000F0F00003C3C00000F0F00003C3C9F -:1095A000000000000000000000000E20001000007D -:1095B000000000000000000000610007800D0000B6 +:1095600000000000000000000000000000000000FB +:1095700000000000000000000000000000000000EB +:1095800000000000000000000000000000000000DB +:1095900000000000000000000000000000000000CB +:1095A00000000000000000000000000000000000BB +:1095B00000000000000000000000000000000000AB :1095C000000000000000000000000000000000009B :1095D000000000000000000000000000000000008B -:1095E0000000000000000000000000610027001DD6 -:1095F0000000000000000020120240E380008021F3 -:10960000920240E380008021920240E380008021AA -:10961000920240E380008021920240E3800080219A -:1096200092020000000000000000000000000000A6 +:1095E000000000000000000000000000000000007B +:1095F000000000000000000000000000000000006B +:10960000000000000000000000000000000000005A +:10961000000000000000000000000000000000004A +:10962000000000000000000000000000000000003A :10963000000000000000000000000000000000002A :10964000000000000000000000000000000000001A :10965000000000000000000000000000000000000A -:1096600000000000000000000000000004000400F2 -:109670000000000000000000000000000F3C5555F5 -:109680000F3FFF3FFF550F5555F55FFF5F5C505C87 -:10969000FF30FF3F5F5C5F5CFF30FF3F5F5C5F5C04 -:1096A0003C3CF0FF00000000000000000000000053 +:1096600000000000000000000000000000000000FA +:1096700000000000000000000000000000000000EA +:1096800000000000000000000000000000000000DA +:1096900000000000000000000000000000000000CA +:1096A00000000000000000000000000000000000BA :1096B00000000000000000000000000000000000AA :1096C000000000000000000000000000000000009A :1096D000000000000000000000000000000000008A -:1096E0000000000000000000000000000000040076 -:1096F00004000000000000000000000000000F3C1B -:1097000055550030F03000550F5500A00AAA5F5C97 -:10971000505C0030003F505C505C0030003F505CBB -:10972000505C3C3C000F0000000000000000000006 +:1096E000000000000000000000000000000000007A +:1096F000000000000000000000000000000000006A +:109700000000000000000000000000000000000059 +:109710000000000000000000000000000000000049 +:109720000000000000000000000000000000000039 :109730000000000000000000000000000000000029 :109740000000000000000000000000000000000019 :109750000000000000000000000000000000000009 :1097600000000000000000000000000000000000F9 -:1097700004000400000000000000000000000000E1 -:10978000FF55AF053AFA3AFAFF0FF505AA0CAAFC05 -:109790003F3A3530AA0CAAFC5F5F5F50AA0CAAFCC6 -:1097A000D7CF140CAAAA303F000000000000000030 +:1097700000000000000000000000000000000000E9 +:1097800000000000000000000000000000000000D9 +:1097900000000000000000000000000000000000C9 +:1097A00000000000000000000000000000000000B9 :1097B00000000000000000000000000000000000A9 :1097C0000000000000000000000000000000000099 :1097D0000000000000000000000000000000000089 :1097E0000000000000000000000000000000000079 :1097F0000000000000000000000000000000000069 -:109800000000FA50AA003A0A3A0AFA0AF000AA0C32 -:10981000AAFC3F3A3530AA0CAAFC505F5050AA0C63 -:10982000AAFCD7CF140CAAAA303F40108410A00085 -:109830000400880088090409200520104000100059 -:10984000880888008840C010880840001000C000C8 -:109850001000010400021004100510114000000067 -:10986000000088000000C0000000000304000200A7 -:1098700010090000042000200000402000008400A7 -:109880008400000800008800880000040000000038 -:1098900000000000200000000000000000000000A8 -:1098A00000000085000000000080008441020040AC -:1098B00004002040052010024000104010C010405D -:1098C000202040001040202010C040C020402040F8 -:1098D0001020402020412091402141200082102072 -:1098E0001020102041204002202040200000402075 -:1098F000004021201040A103002110201021002051 -:1099000000020002002040C0002000400090000043 -:1099100000200000100000004000002000000000B7 -:1099200000020000000200040000004010020200DB -:1099300005800010029090410200004000418240EA -:1099400004001000824002410200004090400304E5 -:109950000200014000000280000303040005000033 -:1099600000080040000000000000000004000000AB -:10997000000000000000000004200220000002207F -:1099800000000000000000000000000002000000D5 -:1099900000000000000000000000000000000200C5 -:1099A00000000000000000000000020002000000B3 -:1099B00020048240000900100008008200080040D6 -:1099C000008800880008001000080000000000C0A7 -:1099D00020100000200400400004000420050000C6 -:1099E0000082000000080008008800000040020813 -:1099F00000000008000000000400000100010282D5 -:109A00000401000000080288048800000008040027 -:109A10000488008800000000000000000008040026 -:109A20000400000004880000408200000084000060 -:109A3000040082080100021000080000400000003D -:109A400000109040A00000030004004184000200C8 -:109A5000002100008200080300001000A002200086 -:109A60000240000008081000000090008803100069 -:109A700004030000000000000000000000000000DF -:109A800010000000000004000000100000000000B2 -:109A900000210000000000000000000000000000A5 -:109AA00000080000000000000008000004000000A2 -:109AB00000000000000004002100410000081082A6 -:109AC000218800002108038809A0090008000982F4 -:109AD00003080800004000A0000003820400030007 -:109AE0008508104003000000000000000000000096 -:109AF000000000000000000000200800000000003E -:109B0000000800000000038841C000C000C0000041 -:109B10000300030000000000080000A00000000097 -:109B200000000000000011400000000000000000E4 -:109B30000800080000880000080409008200A01046 -:109B4000C00408001004040090000200840004090E -:109B5000A0000000040082090000830000008204CD -:109B600000000000000000000000000000000000F5 -:109B70000020004000000000020000000000000083 -:109B80000000900408000009000000000000000030 -:109B90000000000000210000080000000800000094 -:109BA00008000000000000000000000000000000AD -:109BB0000000C000000000040000000088900004C5 -:109BC000000021100300000000000400020000005B -:109BD0001000000000000000000000002000000055 -:109BE0000001000008000020000004000000000048 -:109BF0000200410000000000000000000000000022 -:109C00000000008400008000000000000008000048 -:109C10001000000000000000000000000000000034 -:109C20000000000000000000000000000000000034 -:109C30000000000000000000410000000400820855 -:109C40000000000000080000004000080000008044 -:109C5000000000000021000000000008080084004F -:109C6000000000110040000500800000000082029A -:109C700000000000000000000000000000080000DC -:109C800008030000000004080900000000000000B4 -:109C90000000000000000000000000410000000083 -:109CA0000000000000000000000000008200000032 -:109CB0008200000000000000000000410000800061 -:109CC000400000000210000000040000000000003E -:109CD0004040400000200000009000880008800004 -:109CE000000000000520000000000302000000004A -:109CF000000000000000000800000020000000003C -:109D000000000000000000009184888800840000AA -:109D10000000000000000000030000000020000020 -:109D200000080000000000000000210000002100E9 -:109D30000800080000000000000008900000040077 -:109D40000400084000000821040000080000000092 -:109D50000800000000000000040000000400008073 -:109D600091008400010000000000000000000000DD -:109D700000000008000000000000000000000000DB +:109800000000000000000000000000000000000058 +:109810000000000000000000000000000000000048 +:109820000000000000000000000000000000020036 +:109830000000000000000400000000000400000020 +:1098400002002000000000000200000000002000D4 +:109850000400000000000000000001002000008063 +:1098600021002000000000000400000100000000B2 +:109870002000200000000000000088000000200000 +:109880000000200000000000000020000000000098 +:109890002000200004000400000020000000200040 +:1098A00000002008880004000000200040020000A2 +:1098B00000000000000000000000000000000000A8 +:1098C0000000000000000000000200000000000096 +:1098D0000000000000000000000000001002000076 +:1098E00000081000000040000000000000004000E0 +:1098F0000000000000000000000000000000000068 +:109900000000000000004000040000020000000011 +:109910000000000000000000000000000000000047 +:109920000000000000000000000000000000020035 +:109930000000000000000000000000000000000027 +:109940000000000000000000000000000000000017 +:109950000000020000000000000004000000000001 +:1099600010000000000000000000000000000000E7 +:1099700000000000000000000000000000000000E7 +:1099800000000000000000000000000000000000D7 +:1099900000000000000000000000000000000000C7 +:1099A00000000000000000000000000000000400B3 +:1099B0000000040004000000040004000200020093 +:1099C000000000000000000004000400040000008B +:1099D0000400040000000000040004002000000057 +:1099E00000008000000000000000000000000000F7 +:1099F000000000000400000000000000040000005F +:109A00000000000000000000000000000000000056 +:109A10000000000000000000000000000000000046 +:109A20000400000000000000000000000000000032 +:109A30000000000000000000000000000000000026 +:109A4000000000000000000000000800000000000E +:109A50000000000000000000000000000000000006 +:109A600000000000000000000000000000000000F6 +:109A700000000000000000000000000000000000E6 +:109A800000000000000000000000000000000000D6 +:109A900000000000000000000000000082008200C2 +:109AA00000000000000000000000000000000000B6 +:109AB00000000000000000000000000000000000A6 +:109AC0000000000000000000000000000000000096 +:109AD0000000000000000000000000000000000086 +:109AE0000000000000000000000000000000000076 +:109AF0000000000000000000000000000000000066 +:109B00000000000000000000000000000000000055 +:109B10000000000000000000000000000000000045 +:109B200000000000000000000000000000840000B1 +:109B30000000000000000000000000000000000025 +:109B40000000000000000000000000000000000015 +:109B50000000000000000000000000000000000005 +:109B600000000000000000000000000001000000F4 +:109B700000000000080000000000000000000000DD +:109B80000000000000000000004000000000000095 +:109B90000800040000000040000000000000000079 +:109BA000820000110000000800000000000000001A +:109BB00000000000000000000000000000000000A5 +:109BC0000000000000000000000000000000000095 +:109BD0000000000000000000000000000000000085 +:109BE0000000000000000000000000000000200055 +:109BF0000000000000000000000000000000000065 +:109C00000000000000000000000000000000000054 +:109C10000000000000000000000000000000000044 +:109C200000000000000000000040000000000000F4 +:109C30000000000000000000000000000000000024 +:109C40000000000000000000000000000000000014 +:109C50000000000000000000000000000000000004 +:109C600000000000000000000000000000000000F4 +:109C700000000000000000000000000000000000E4 +:109C800000000000000000000000000000000000D4 +:109C900000000000000000000000000000000000C4 +:109CA00000000000000000000000000000000000B4 +:109CB0000000000000000000000000100000000094 +:109CC0000000000000000000000000000000000094 +:109CD0000000000000000000000000000000000084 +:109CE0000000000000000000000000000000000074 +:109CF0000000000000000000000000000000000064 +:109D00000000000000000000000000000000000053 +:109D1000000000000000080021000000000000001A +:109D20000000000000000000000000000000000033 +:109D3000000000000000000000000008000000001B +:109D40000000000000000000000000000000000013 +:109D50000000000000000000000000000000000003 +:109D600000000000000000000000000000000000F3 +:109D700000000000000000000000000000000000E3 :109D800000000000000000000000000000000000D3 -:109D9000000300110000001100000000000000009E -:109DA000000000008800000090000000000000009B -:109DB00000000000000000008200002188000080F8 +:109D900000000800000000000000000000000000BB +:109DA00000000000000000000000000000000000B3 +:109DB000000000000000000000000000000000089B :109DC0000000000000000000000000000000000093 :109DD0000000000000000000000000000000000083 -:109DE00040042020000020200900000421080082F7 -:109DF0000000000000000000000000001100000052 -:109E0000000020000000020000040000000000002C +:109DE0000000000000000000000000000000000073 +:109DF0000000000000000000000000000000000063 +:109E00000000000000000000000000000000000052 :109E10000000000000000000000000000000000042 :109E20000000000000000000000000000000000032 -:109E3000000000000000000000000000050000001D -:109E40000010400890100002820200000000000094 +:109E30000010008200000000000000000000000090 +:109E400000400000000000000000000000000000D2 :109E50000000000000000000000000000000000002 -:109E600000000011008800100010000000019000A8 -:109E700000010000000000000000000000000000E1 -:109E8000000000000000000000000000100000A022 -:109E900000A0001000000000000000000000000012 +:109E600000000000000000000000000000000000F2 +:109E700000000100000000000000000000000000E1 +:109E800000000000000000000000000000000000D2 +:109E900000000000000000000000000000000000C2 :109EA00000000000000000000000000000000000B2 -:109EB0000000000000000100880000000000000019 -:109EC0009000000080808000000080000000000002 +:109EB00000000000000000000000000000000000A2 +:109EC0000000000000000000000000000000000092 :109ED0000000000000000000000000000000000082 -:109EE000000000000020000011100000000002210E -:109EF00080100008000000000000000000000000CA +:109EE0000000000000000000000000000000000072 +:109EF0000000000011000021000000000000000030 :109F00000000000000000000000000000000000051 -:109F100000000080000000000000000000000000C1 +:109F10000000000000000000000000000000000041 :109F20000000000000000000000000000000000031 -:109F30000000000000000000100000000000000011 -:109F40000200000000008000001080880000000077 +:109F30000000000000000000000000000000000021 +:109F40000000000000000000000000000000000011 :109F50000000000000000000000000000000000001 -:109F60000000000000000000050010000000038059 -:109F70000800100021400000000000000000000068 +:109F600000000000000000000000000000000000F1 +:109F700000000000000000080000110800000000C0 :109F800000000000000000000000000000000000D1 -:109F900080000020808080000000000000000000A1 +:109F900000000000000000000000000000000000C1 :109FA00000000000000000000000000000000000B1 :109FB00000000000000000000000000000000000A1 -:109FC0000000000300800000100004C1A08404020F -:109FD00000000000000000000000000000880000F9 +:109FC0000000000000000000000000000000000091 +:109FD0000000000000000000000000000000000081 :109FE0000000000000000000000000000000000071 -:109FF00000900100000001010000000000000000CE +:109FF0000000000000000000000000000100000060 :10A000000000000000000000000000000000000050 -:10A0100000000800A001A0A09000000000000000C7 +:10A010000000000000000000000000000000000040 :10A020000000000000000000000000000000000030 :10A030000000000000000000000000000000000020 -:10A040000000000000000010000040020010081096 -:10A0500008100000000000000000000000000000E8 -:10A060000000000000000000000088000000200048 -:10A07000900000010001000100000000000000004D -:10A0800000000000000000000000000000000000D0 -:10A090000000000000200000000202080000000094 +:10A040000000000000000000000000000000000010 +:10A050000000000000000000000000000000000000 +:10A0600000000000000000000000000000000000F0 +:10A07000000000000000000000000000900000014F +:10A0800001000000000000000000000000000000CF +:10A0900000000000000000000000000000000000C0 :10A0A00000000000000000000000000000000000B0 :10A0B00000000000000000000000000000000000A0 -:10A0C000000000010000000000010001800000000D -:10A0D0000080000000000000000000000000000000 -:10A0E0000000000000000000000000000000001060 -:10A0F0000000800500402004410510110000000010 -:10A10000000000000000000000000000000000004F -:10A1100000000000000000000000000080000000BF +:10A0C0000000000000000000000000000000000090 +:10A0D0000000000000000000000000000000000080 +:10A0E0000000000000000000000000000000000070 +:10A0F0000000000000000000000000000000000060 +:10A100000008100000000000000000000000000037 +:10A11000000000000000000000000000000000003F :10A12000000000000000000000000000000000002F -:10A13000000000000000000000000000000000110E -:10A1400000090040002000030011000504088010F1 -:10A15000800000808000000000000000000000007F -:10A1600000000000000000000000000000002000CF -:10A17000100000000000401004000500110800005D -:10A1800000000000000000000000000000000000CF -:10A19000000000000000000080000000000000003F +:10A13000000000000000000000000000000000001F +:10A14000000000000000000000000000000000000F +:10A1500000000000000000000000000000000000FF +:10A1600000000000000000000000000000000000EF +:10A1700000000000000000000000000000000000DF +:10A1800011000000000000000000000000000000BE +:10A1900000000000000000000000000000000000BF :10A1A00000000000000000000000000000000000AF :10A1B000000000000000000000000000000000009F -:10A1C000000000000000000000000000800000000F -:10A1D00010002090080802000000000000000000AD -:10A1E0000800400020008400000000000000000083 -:10A1F000010000000000000001000100010000015A -:10A20000000000000000000000000000000000004E -:10A21000000000000000000000009000100000009E -:10A22000A00000000000000000000000000000008E +:10A1C000000000000000000000000000000000008F +:10A1D000000000000000000000000000000000007F +:10A1E000000000000000000000000000000000006F +:10A1F000000000000000000000000000000000005F +:10A20000000001000000000000000000000000004D +:10A21000000000000000000000000000000000003E +:10A22000000000000000000000000000000000002E :10A23000000000000000000000000000000000001E -:10A240000000000000000000000002000200020008 -:10A250000400008200000700000000000000000071 +:10A24000000000000000000000000000000000000E +:10A2500000000000000000000000000000000000FE :10A2600000000000000000000000000000000000EE -:10A270000000840000E000000000600000E000003A -:10A2800000000000000000000000000000000000CE -:10A2900000000000000000000000000000060000B8 -:10A2A00007000000000000000000000000000000A7 +:10A2700000000000000000000000000000000000DE +:10A280000000000000E000000000000000000000EE +:10A2900000000000000000000000000000000000BE +:10A2A00000000000000000000000000000000000AE :10A2B000000000000000000000000000000000009E :10A2C000000000000000000000000000000000008E -:10A2D00000000000BCA0FFFF000000000000000024 -:10A2E00000000000FCACFCFC0000000000000000CE +:10A2D000000000000000000000000000000000007E +:10A2E000000000000000000000000000000000006E :10A2F000000000000000000000000000000000005E :10A30000000000000000000000000000000000004D -:10A310000000000000000000000000000000287D98 -:10A32000287DFFEB0000000000000000000000009E +:10A31000000000000000000000000000000000003D +:10A32000000000000000000000000000000000002D :10A33000000000000000000000000000000000001D :10A34000000000000000000000000000000000000D -:10A350003C3C00000000BCA0BCA0010000000000CC -:10A36000000000000000FCACFCFC0000000000004D +:10A3500000000000000000000000000000000000FD +:10A3600000000000000000000000000000000000ED :10A3700000000000000000000000000000000000DD :10A3800000000000000000000000000000000000CD :10A3900000000000000000000000000000000000BD -:10A3A0000055AAFFFFEB00000000000000000000C5 +:10A3A00000000000000000000000000000000000AD :10A3B000000000000000000000000000000000009D :10A3C000000000000000000000000000000000008D -:10A3D00000A03CBC000000001FFF1F1F0200000087 +:10A3D000000000000000000000000000000000007D :10A3E000000000000000000000000000000000006D -:10A3F00000000000000000003D3C3C3C000000006C +:10A3F000000000000000000000000000000000005D :10A40000000000000000000000000000000000004C :10A41000000000000000000000000000000000003C -:10A4200000005C555C55FCFF0C00000000000000C3 +:10A42000000000000000000000000000000000002C :10A43000000000000000000000000000000000001C :10A44000000000000000000000000000000000000C -:10A450000000000000000000000014FF1414AA0017 -:10A46000AA00000000000000000000000000000042 -:10A4700000000000000000000000050000000000D7 +:10A4500000000000000000000000000000000000FC +:10A4600000000000000000000000000000000000EC +:10A4700000000000000000000000000000000000DC :10A4800000000000000000000000000000000000CC :10A4900000000000000000000000000000000000BC -:10A4A000000000005C555C55FCFF0C000000000043 +:10A4A00000000000000000000000000000000000AC :10A4B000000000000000000000000000000000009C :10A4C000000000000000000000000000000000008C -:10A4D00000000000000000000000000000000E204E -:10A4E00000000001000000000000000080000000EB -:10A4F00000000000000000000000000000610001FA -:10A5000080010000006100028005000000000000E2 -:10A51000000000000000000000000000000000003B -:10A52000000000000000000000200000000000000B +:10A4D000000000000000000000000000000000007C +:10A4E000000000000000000000000000000000006C +:10A4F000000000000000000000000000000000005C +:10A500000000000000000000000000000000000645 +:10A51000000C00000000000000000000000000002F +:10A52000000000000000000000000000000000002B :10A53000000000000000000000000000000000001B -:10A5400000000000000000000000000000000061AA -:10A550000006000D000080610006000D00000000F4 +:10A54000000000000000000000000000000000000B +:10A5500000000000000000000000000000000000FB :10A5600000000000000000000000000000000000EB -:10A57000000000000000000000000000000000FFDC -:10A58000000000000F0F555D5555AAAAAAAE0000A5 -:10A5900000000000000000000000000000000000BB +:10A5700000000000000000000000000000000000DB +:10A5800000000000000000000000000000000000CB +:10A59000FF0000FF000000000000000000000000BD :10A5A00000000000000000000000000000000000AB :10A5B000000000000000000000000000000000009B :10A5C000000000000000000000000000000000008B -:10A5D000000000002828F82800000000808080FF8C +:10A5D000000000000000000000000000000000007B :10A5E000000000000000000000000000000000006B :10A5F000000000000000000000000000000000005B -:10A6000000FF000000000F0F55515555AAAAAAA23D -:10A61000000000000000000000000000000000003A +:10A60000000000000000000000000000000000004A +:10A610000000FF0000FF000000000000000000003C :10A62000000000000000000000000000000000002A :10A63000000000000000000000000000000000001A :10A64000000000000000000000000000000000000A -:10A65000000000000000282828280000000000005A -:10A6600000FF0000000000000000000000000000EB +:10A6500000000000000000000000000000000000FA +:10A6600000000000000000000000000000000000EA :10A6700000000000000000000000000000000000DA -:10A680000000F0F00000F000F000FFFFFFFF3CFCD6 -:10A690007DFD000000000000000000000000000040 +:10A6800000000000000000000000000000000000CA +:10A6900000000000FF0000FF0000000000000000BC :10A6A00000000000000000000000000000000000AA :10A6B000000000000000000000000000000000009A :10A6C000000000000000000000000000000000008A :10A6D000000000000000000000000000000000007A :10A6E000000000000000000000000000000000006A :10A6F000000000000000000000000000000000005A -:10A7000000000000F0F00000F000F000C705C705F1 -:10A710003CFC7DFD00000000000000000000000087 +:10A700000000000000000000000000000000000049 +:10A71000000000000000FF0000FF0000000000003B :10A720000000000000000000000000000000000029 :10A730000000000000000000000000000000000019 :10A740000000000000000000000000000000000009 :10A7500000000000000000000000000000000000F9 -:10A760000000000000000400100920008800100014 -:10A77000400240052005880084008400000888000D -:10A7800084084008200010108800000041081120B3 -:10A7900040008820001010000000008240022000CD -:10A7A0004080208004800003880020820800200070 -:10A7B00000000000200000008808042000000400C1 -:10A7C0000000200000002000000000004000000009 -:10A7D0000000000020000000200000000000000039 -:10A7E00000002040400020000940000040204020A0 -:10A7F000409020200900094020C004400920090899 -:10A80000102040C010A04000402040204084C08460 -:10A81000042109844003408540200008100310856E -:10A820004040102040102020000010208004A1C0D3 -:10A83000402000201084000200200002800300C09D -:10A8400080200000102000000000400040000000B8 -:10A850000000000000000000000000000000008276 -:10A8600000020002000010020000821002410000FD -:10A8700008000840820500000000000000400803B6 -:10A880000210020000000008084102000100000060 -:10A890004009001002000000000002080000000053 -:10A8A0000000001001A0000001A0000000000890BE -:10A8B0000000018000000200000000000000000015 -:10A8C0000000008000000000000004000000000004 -:10A8D0000000000000000000000004000010000064 -:10A8E000041004100000A00004100800004000083C -:10A8F000001000C000C00000001000100010000098 -:10A900000040000800100010004000400000200837 -:10A9100000008010008404000000004000000000DF -:10A920000000000800000421001004210000400085 -:10A93000C1050000020400004000000009000008FA -:10A9400000080000202000000400000000000010AB -:10A95000000000000000040004000400020804825B -:10A96000040800000300040004C0000004C0C0008C -:10A97000901000000008000000008800880000001F -:10A980009000080084000000000800108408000007 -:10A990000000000000000021080008000000000086 -:10A9A00010800005C02104400005040000050000DF -:10A9B00008410800880020040000002100009000E9 -:10A9C0000000012000001020000000080000000826 +:10A7600000000000000000000000000000000000E9 +:10A7700000000000000000000000000000000000D9 +:10A7800000000000200000000400000000000000A5 +:10A7900000000000000000000400000000000000B5 +:10A7A0000000000020000000000020000000000069 +:10A7B0000000000000000000000020000000000079 +:10A7C0000000000000002000000020000000000049 +:10A7D0000000000000000000000020000000000059 +:10A7E0000000000000002000000000000000000049 +:10A7F0000000000000000000000000000000000059 +:10A800000000400000000000000000000000000008 +:10A810000000000000020002000000000000000034 +:10A820000000000000000000000000000000000028 +:10A830000000000000000000000000000000000018 +:10A840000000000000000000000000000000000008 +:10A8500000000000000010000000000000000000E8 +:10A8600000000000000000000000020000000000E6 +:10A8700000000200000000000000000000000200D4 +:10A8800000000000000000000800000000000000C0 +:10A8900000000000000000000000020002000000B4 +:10A8A00000000000000000000000000000000000A8 +:10A8B0000000000000000000000000000000000098 +:10A8C0000000001000000000080000000000000070 +:10A8D0000000000000000000000000000000000078 +:10A8E0000800000000000000000000000000000060 +:10A8F0000000000000000000000000000000000058 +:10A900000000000000000000000000000000000047 +:10A91000040000000000040000000000000000002F +:10A920000000000000000000000000000000000027 +:10A930000000000000000000000000000000000017 +:10A940000000000000000000000000000000000007 +:10A9500000000000000000000000000000000000F7 +:10A9600000000000000000000000000000000000E7 +:10A9700000000000000000000000000000000000D7 +:10A9800000000000000000000000000000000000C7 +:10A9900000000000000000000000000000000000B7 +:10A9A00000000000000000000000000000000000A7 +:10A9B0000000000000000000000000000000000097 +:10A9C0000000000000000000000000000000000087 :10A9D0000000000000000000000000000000000077 -:10A9E0000000000000000000000000000000C000A7 -:10A9F0000000000000000000000803A0000009A003 -:10AA0000000010104100100008000000400000008D -:10AA10000800020021000884000080A000880000D7 -:10AA2000084000020800001000850000001000002F -:10AA300000004000800000008001000000000000D5 -:10AA400000A00000048500100001000000000000CC +:10A9E0000000000000000000000000000000000067 +:10A9F0000000000000000000000000000000000057 +:10AA00000000000000000000000000000000000046 +:10AA10000000000000000000000000000000000036 +:10AA20000000000000000000000000000000000026 +:10AA30000000000000000000000000000000000016 +:10AA40000000000000000000000000000000000006 :10AA500000000000000000000000000000000000F6 -:10AA60000000000040000000000041000000000065 -:10AA70000008A000080082000400A000A010000050 -:10AA80008400000082000000000000218200040019 -:10AA90000003408301000000400000A000000020EF -:10AAA00000008220010041800000008000000000C2 -:10AAB000080000000400C004000021A10000000400 -:10AAC0000000000000000020000000000000000066 -:10AAD000000000000800000008000800C00000009E -:10AAE00000000000A0000000000000400000000086 -:10AAF000C000010000000000000000000300004052 -:10AB000040000000000000000000000000A0000065 -:10AB10008000000011202000000080A00021000023 -:10AB20000003000000004000400220080040080030 -:10AB3000000000100000080000010084A0040000D4 -:10AB40000000000000000000000100000000000004 -:10AB500000000000400000000000000000000000B5 -:10AB600000000000000000000000030000000000E2 -:10AB700000000000020000000000000000000000D3 -:10AB800000000000040000000000000000000000C1 -:10AB90000000400000000400040000210400080040 -:10ABA000A0000020C02100A140001000A01020043F -:10ABB000040590001000000000002021000000208B -:10ABC00000000005000082000000040000000000FA -:10ABD000000000000000000000000800000000006D -:10ABE00000000000000000008200080000000800D3 -:10ABF0000000000000000000020011000002000040 -:10AC0000009000000000000800000800050200009D -:10AC10001088000040000000800080020084800056 -:10AC200021A00002000100000002800000000000DE -:10AC3000050080000000000000000000000000008F -:10AC40000000000000C000000008000080100000AC +:10AA600000000000000000000000000000000000E6 +:10AA70000000000000400000000000000000000096 +:10AA800000000000000000000000000000000000C6 +:10AA900000000000000000000000000000000000B6 +:10AAA00000000000000000000000000000000000A6 +:10AAB0000000000000000000000000000000000096 +:10AAC0000000000000000000000000000000000086 +:10AAD0000000000000000000000000000000000076 +:10AAE0000000000000000000000000000000000066 +:10AAF0000000000000000000000000000000000056 +:10AB00000000000000000000000000000000000045 +:10AB10000000000000000000000000000000000035 +:10AB20000000000000000000000000000000000025 +:10AB30000000000000000000000000000000000015 +:10AB40000000000000000000000000000000000005 +:10AB500000000000000000000000000002000000F3 +:10AB600000000000000000000090000000080090BD +:10AB700000000000000000000000000000000000D5 +:10AB800000000000000000000000000000000000C5 +:10AB900000000000000000000000000000000000B5 +:10ABA00000000000000000000000000000000000A5 +:10ABB0000000000000000000000000000000000095 +:10ABC0000000000000000000000000000000000085 +:10ABD0000000000000000000000000000000000075 +:10ABE0000000000000000000000000000000000065 +:10ABF0000000000000000000000000000000000055 +:10AC00000000000000000000000000000000000044 +:10AC10000000000000000000000000000000000034 +:10AC20000000000000000000400000000900008457 +:10AC30000000000000000000000000000000000014 +:10AC40000000000000000000000000000000000004 :10AC500000000000000000000000000000000000F4 -:10AC600000000010000000000000080000000000CC -:10AC700000840008080010000000080082000000A6 +:10AC600000000000000000000000000000000000E4 +:10AC700000000000000000000000000000000000D4 :10AC800000000000000000000000000000000000C4 -:10AC90000000000004000800000040000400040060 -:10ACA000000000000021C0050821000040820002D1 -:10ACB000821001004000C1030005000000080004EC -:10ACC000000000A1000400000004000000000010CB -:10ACD0000000000000200010000000000000000044 -:10ACE00000000000C000000000000000A0000800FC -:10ACF00000808200880000001000010800000000B1 +:10AC900000000000000000000000000000000000B4 +:10ACA00000000000000000000000000000000000A4 +:10ACB0000000000000000000000200000000000092 +:10ACC0000000000000000000000000000000000084 +:10ACD0000000000000000000000000000000000074 +:10ACE0000000000000000000000000000000000064 +:10ACF0000000000000000000000000000000000054 :10AD00000000000000000000000000000000000043 -:10AD10000200000000000000000000008000800031 -:10AD200080000000000000A0000000000000800380 -:10AD300000050411020000000810000400000300D8 -:10AD400000010000002000000000000000000000E2 -:10AD500000000000000000000000000000080000EB -:10AD600000000800000000000000000000000000DB -:10AD700000000010000000000000100002040000AD +:10AD10000000000000000000000000000000000033 +:10AD20000000000000000000000000000000000023 +:10AD30000000000000000000000000000000000013 +:10AD40000000000000000000000000000000000003 +:10AD500000000000000000000000000000000000F3 +:10AD60000000000000C00290000020000008000069 +:10AD700000000000020000000000000000000000D1 :10AD800000000000000000000000000000000000C3 -:10AD900000000000000008000000000000000001AA -:10ADA0000108A000000500C0001004C008A00000B9 -:10ADB0000101020100001002010200A004200000B5 -:10ADC00000080282100800100000000000000000CF -:10ADD00000880090000200880000000000000000D1 +:10AD900000000000000000000000000000000000B3 +:10ADA00000000000000000000000000000000000A3 +:10ADB0000000000000000000000000000000000093 +:10ADC0000000000000000000000000000000000083 +:10ADD0000000000000000000000000000000000073 :10ADE0000000000000000000000000000000000063 -:10ADF000000000000000000001020020000200022C +:10ADF0000000000000000000000000000000000053 :10AE00000000000000000000000000000000000042 :10AE10000000000000000000000000000000000032 -:10AE200000020391210200210000098080008000BF -:10AE300000032121800800090080030000808000B9 -:10AE4000000040800200008300800000000000003D -:10AE50000000000000000080000000000000000072 +:10AE20000000000000000000000000000000000022 +:10AE30000000000000000000000000000000000012 +:10AE40000000000000000000000000000000000002 +:10AE500000000000000000000000000000000000F2 :10AE600000000000000000000000000000000000E2 -:10AE70000000000000000000000010800080008042 -:10AE80000080000000000000000000000000000042 +:10AE700000000000000000000000000000000000D2 +:10AE800000000000000000000000000000000000C2 :10AE900000000000000000000000000000000000B2 -:10AEA0000000080088054000008080050003800045 -:10AEB0000080000080008900802080008041808028 -:10AEC0008080000021000305C18083830000000012 -:10AED00000000000800080008000000000000000F2 +:10AEA00000000000000000000000000000000000A2 +:10AEB0000000000000000000000000000000000092 +:10AEC0000000000000000000000000000000000082 +:10AED0000000000000000000000000000000000072 :10AEE0000000000000000000000000000000000062 -:10AEF000000000000000000000000000000080854D -:10AF000000820000000000000000000000000000BF +:10AEF0000000000000000000000000000000000052 +:10AF00000000000000000000000000000000000041 :10AF10000000000000000000000000000000000031 -:10AF20000000000001000900010000901000C001B5 -:10AF30001000C0A00200A00004001000020002A146 -:10AF4000A0A0A090000091840900A00490C100007E -:10AF500000000000000008009000A00008000000B1 +:10AF20000000000000000000000000000000000021 +:10AF30000000000000000000000000000000000011 +:10AF40000000000000000000000000000000000001 +:10AF500000000000000000000000000000000000F1 :10AF600000000000000000000000000000000000E1 -:10AF70000000000000000000000000000000A00031 -:10AF800040C090408400000000000000000000006D +:10AF700000000000000000000000000000000000D1 +:10AF800000000000000000000000000000000000C1 :10AF900000000000000000000000000000000000B1 -:10AFA00000409082001000010009910100A0900271 -:10AFB00000080088C0A000000001A0000000881068 -:10AFC00000090010C0080000C00001214001A08954 -:10AFD0000000000000000000400000001010028887 +:10AFA00000000000000000000000000000000000A1 +:10AFB0000000000000000000000000000000000091 +:10AFC0000000000000000000000000000000000081 +:10AFD0000000000000000000000000000000000071 :10AFE0000000000000000000000000000000000061 :10AFF0000000000000000000000000000000000051 -:10B0000040000000000005000000000000000000FB +:10B000000000000000000000000000000000000040 :10B010000000000000000000000000000000000030 -:10B020000000008080000080002009888521020344 -:10B0300080100002000900820041410891110009BE -:10B04000008900A0008080800000001021100021F5 -:10B0500000910000000000000000800000000000DF -:10B060008000000000000000000000000000000060 +:10B020000000000000000000000000000000000020 +:10B030000000000000000000000000000000000010 +:10B040000000000000000000000000000000000000 +:10B0500000000000000000000000000000000000F0 +:10B0600000000000000000000000000000000000E0 :10B0700000000000000000000000000000000000D0 -:10B080000000000000000000A1000000000000001F +:10B0800000000000000000000000000000000000C0 :10B0900000000000000000000000000000000000B0 -:10B0A0000000000000020000000040A18921000013 -:10B0B000000000118080000000000800108009805E -:10B0C000020200008000000080000000A021211189 -:10B0D000100083020000000000000000004000801B +:10B0A00000000000000000000000000000000000A0 +:10B0B0000000000000000000000000000000000090 +:10B0C0000000000000000000000000000000000080 +:10B0D0000000000000000000000000000000000070 :10B0E0000000000000000000000000000000000060 :10B0F0000000000000000000000000000000000050 -:10B1000000000000800080808000800000000000BF +:10B10000000000000000000000000000000000003F :10B11000000000000000000000000000000000002F -:10B1200000000000000000010000000001410800D4 -:10B1300000C000000200A02088A00800010000104C -:10B1400000A000008800040820880200000041835D -:10B150009089210888000000000000000000000025 -:10B16000000200400000000000000000000000009D +:10B12000000000000000000000000000000000001F +:10B13000000000000000000000000000000000000F +:10B1400000000000000000000000000000000000FF +:10B1500000000000000000000000000000000000EF +:10B1600000000000000000000000000000000000DF :10B1700000000000000000000000000000000000CF -:10B1800000000000000004000202021004000000A1 +:10B1800000000000000000000000000000000000BF :10B1900000000000000000000000000000000000AF -:10B1A0000000000000000000000007000000600632 -:10B1B00000E007000000000A000007000000000097 -:10B1C0000000000000000082000007004182000033 -:10B1D000600600E0070000810000000000000000A1 -:10B1E00000810000070000000000000000000000D7 +:10B1A000000000000000000000000000000000009F +:10B1B000000000000000000000000000000000008F +:10B1C000000000000000000000000000000000007F +:10B1D000000000000000000000000000000000006F +:10B1E000000000000000000000000000000000005F :10B1F000000000000000000000000000000000004F -:10B2000000000000000000000000000000008400BA +:10B20000000000000000000000000000000000003E :10B21000000000000000000000000000000000002E -:10B2200000000000000000000000000000F000F638 -:10B2300000FF00FF0F0F00003030FF30F3C3F000BD -:10B240000000000000000000FFFFF81800020000EE -:10B25000000034240000F0F00000000000000000B6 -:10B260000000000000000000FF00000000000000DF +:10B22000000000000000000000000000000000001E +:10B23000000000000000000000000000000000000E +:10B2400000000000000000000000000000000000FE +:10B2500000000000000000000000000000000000EE +:10B2600000000000000000000000000000000000DE :10B2700000000000000000000000000000000000CE :10B2800000000000000000000000000000000000BE :10B2900000000000000000000000000000000000AE -:10B2A000000000000000000000000000000000F0AE -:10B2B00000F6000000000F0F0000FFFFFFFFFFFF80 -:10B2C000FFFF0000000000000000F818F8180092CE -:10B2D00000000000343C0000F0F00000000000001E -:10B2E00000000000000000000000FF00000000005F +:10B2A000000000000000000000000000000000009E +:10B2B000000000000000000000000000000000008E +:10B2C000000000000000000000000000000000007E +:10B2D000000000000000000000000000000000006E +:10B2E000000000000000000000000000000000005E :10B2F000000000000000000000000000000000004E -:10B3000000000000000000000000000081600999BA +:10B30000000000000000000000000000000000003D :10B31000000000000000000000000000000000002D :10B32000000000000000000000000000000000001D :10B33000000000000000000000000000000000000D @@ -174948,492 +174948,492 @@ :10B3800000000000000000000000000000000000BD :10B3900000000000000000000000000000000000AD :10B3A000000000000000000000000000000000009D -:10B3B0000000000000003C003C00F0F0F0F0FFFF57 -:10B3C000FFEF383E3C3C00000000F9F9F9C166F699 -:10B3D0007EFE6E6EFF6E000000BD00B09F9F9F9FBF -:10B3E000000000000000000060FF60600006F0F652 +:10B3B000000000000000000000000000000000008D +:10B3C000000000000000000000000000000000007D +:10B3D000000000000000000000000000000000006D +:10B3E000000000000000000000000000000000005D :10B3F000000000000000000000000000000000004D :10B40000000000000000000000000000000000003C -:10B410000930000006460042000000000000000065 +:10B41000000000000000000000000000000000002C :10B42000000000000000000000000000000000001C -:10B4300000000000000000003C003C000000000094 -:10B44000000000203C3C3C3C00000000F9F9F9F908 -:10B4500000F03CFC0C0CFF0C000000BD00BF00C362 -:10B46000FFC3000000000000000062FF626230368F -:10B470003036000000000000000000000000000066 +:10B43000000000000000000000000000000000000C +:10B4400000000000000000000000000000000000FC +:10B4500000000000000000000000000000000000EC +:10B4600000000000000000000000000000000000DC +:10B4700000000000000000000000000000000000CC :10B4800000000000000000000000000000000000BC -:10B490000000F3FF00000042004200000000000036 +:10B4900000000000000000000000000000000000AC :10B4A000000000000000000000000000000000009C -:10B4B000000000000008000000000061002D800D69 -:10B4C000000000610026000D000000610006000D74 -:10B4D000000000610E26001D0000000000614024F5 -:10B4E00080090000000000000000000000000020B3 +:10B4B000000000000000000000000000000000008C +:10B4C000000000000000000000000000000000007C +:10B4D000000000000000000000000000000000006C +:10B4E000000000000000000000000000000000005C :10B4F000000000000000000000000000000000004C :10B50000000000000000000000000000000000003B -:10B5100000000000000030000000000000000000FB +:10B51000000000000000000000000000000000002B :10B52000000000000000000000000000000000001B -:10B5300000000000000000000000000000FF00000C -:10B540000000000000000000C3C3C343003000003F -:10B550000F0F0F07000000003F3F3F3F00000F0F9D -:10B560000F0FAAAAAAAA0000000000000000000015 +:10B53000000000000000000000000000000000000B +:10B5400000000000000000000000000000000000FB +:10B5500000000000000000000000000000000000EB +:10B5600000000000000000000000000000000000DB :10B5700000000000000000000000000000000000CB :10B5800000000000000000000000000000000000BB :10B5900000000000000000000000000000000000AB :10B5A000000000000000000000000000000000009B -:10B5B000000000000000000000000000000000FF8C -:10B5C00000000001000000000000FFFFFF5F00001E -:10B5D0000000FFFFFFD700000000303030300000D7 -:10B5E000FF1FFFFFBEAAAEAA00000000000000007F +:10B5B000000000000000000000000000000000008B +:10B5C000000000000000000000000000000000007B +:10B5D000000000000000000000000000000000006B +:10B5E000000000000000000000000000000000005B :10B5F000000000000000000000000000000000004B :10B60000000000000000000000000000000000003A :10B61000000000000000000000000000000000002A :10B62000000000000000000000000000000000001A :10B63000000000000000000000000000000000000A -:10B64000A00000000000000000000000000000005A -:10B65000E0EBF0FF55005500000000000000000086 -:10B6600000000505050501030000000000000000C2 +:10B6400000000000000000000000000000000000FA +:10B6500000000000000000000000000000000000EA +:10B6600000000000000000000000000000000000DA :10B6700000000000000000000000000000000000CA :10B6800000000000000000000000000000000000BA :10B6900000000000000000000000000000000000AA :10B6A000000000000000000000000000000000009A :10B6B000000000000000000000000000000000008A -:10B6C00000004000400003000300000000000000F4 -:10B6D0000000F0FFF0FF55005500000000000000E2 -:10B6E0000000000005050505C1C3000000000000C2 +:10B6C000000000000000000000000000000000007A +:10B6D000000000000000000000000000000000006A +:10B6E000000000000000000000000000000000005A :10B6F000000000000000000000000000000000004A :10B700000000000000000000000000000000000039 :10B710000000000000000000000000000000000029 -:10B720000000000010002000400888004000208039 -:10B73000A100880484080483210008108800880080 -:10B740008800200588411000C0000000400020054E -:10B750002000400000200080042090802000C0A035 -:10B760002020881000039000C0000000000000802E -:10B770002080208084800000000000000400000081 -:10B780000000200020000000200000000000000059 -:10B790002000200000050000000000002000000044 -:10B7A000000020008800410009200900400020001E -:10B7B000404008C04020040840200808A0C12020C4 -:10B7C000400020C0402000204020404000200000D9 -:10B7D00009400920210020410010A0A100104020B4 -:10B7E0000021409140210000002000400000102076 -:10B7F0002110001000104010000000200002002066 -:10B80000000040C0000000000000000000900400A4 -:10B810000008000000000000000000000000000020 -:10B820000000000000000000020090400000020044 -:10B8300000100040A000020302000380000002008C -:10B84000040802000403040002410200000000009A -:10B8500000000200020000000180020000800000E1 -:10B86000080009A001A00210000000000000000074 -:10B8700000000000100000000400000000000000B4 -:10B880000000000002000400040020002000050069 -:10B8900020002000218005000500000000000000BD -:10B8A00000000000020000000500001010840040AD -:10B8B0000010000800C00010418400100420001097 -:10B8C0000008804000088040804000000010001008 -:10B8D00000000040000000000000042000000020E4 -:10B8E0000088004004210421000000000000000046 -:10B8F0000000000000000000000002000000000046 -:10B900002000000000008082000002008000800013 -:10B9100020008008800082402000200000000000FD -:10B9200000080000000009000400041000000000EE -:10B930000400200020000800000040100000042047 -:10B94000840004002000000000100010000000002F -:10B9500000000000000000000800002100000800B6 -:10B960000003000000000040000000020000000092 -:10B97000000504000000040000000000000040007A -:10B98000000000000000000000000000000088002F +:10B7200000000000000000002000000000000400F5 +:10B7300020000000200004000400000000000400BD +:10B7400000000400000000002000000000000400D1 +:10B750002000000020002000200000000000040065 +:10B760000400200000000000000020000000000095 +:10B770002000200000000000200020000000000049 +:10B7800020002000200000008800200000000000B1 +:10B790002000000000000000200020000000000049 +:10B7A00020002000200000400000000000000000F9 +:10B7B0000000000000000000000000000000000089 +:10B7C0000000000000000000000000000000000079 +:10B7D00040000000002040000000000000000000C9 +:10B7E0000000000000000000000000000000000059 +:10B7F0004000000000000000000000000000000009 +:10B800000000000000000000000000000000000038 +:10B810000000000000000000000000000000000028 +:10B820000000000000000000000000000000000018 +:10B8300002000040000000000000000000000000C6 +:10B8400000000200000000000000000000000000F6 +:10B8500000000000000000000000000000000000E8 +:10B8600000000000000000000000000000000000D8 +:10B8700000000000000000000000000000000000C8 +:10B880000000400002000000024100000000000033 +:10B8900000000200020002000200000000000000A0 +:10B8A0000000000000000000040000000000000094 +:10B8B0000000040000000000000000000000000084 +:10B8C0000000040000000400000000000000000070 +:10B8D000000004000000000000000400040000005C +:10B8E0000000040020000000000000000000000034 +:10B8F0000000000000000000000000000000000048 +:10B9000000000000800000000000000000000000B7 +:10B91000000000008000090020000000000000007E +:10B920000000000000000000000000000000000017 +:10B930000000000000000000000000000000000007 +:10B9400000000000000000000000000000000000F7 +:10B9500000000000000000000000000040000000A7 +:10B96000880000000000000000000000000000004F +:10B9700000000000000000000000000000000000C7 +:10B9800000000000000000000000000000000000B7 :10B9900000000000000000000000000000000000A7 -:10B9A0000000000000000000000000000003000094 -:10B9B0000000000041000000850008044000000075 -:10B9C00080011000100000000000000800000000CE -:10B9D0000000000000000000004000001000100205 -:10B9E00080900000210000000302000008C0000059 -:10B9F000000000000000000000040002000004003D -:10BA00000000000000000000000000000004000032 +:10B9A0000000000000000000000000000021000076 +:10B9B0000000000000000000000000000000000087 +:10B9C0000000000000000000000000000000000077 +:10B9D0000000000000000000000000000000000067 +:10B9E0000000000000000000000000000000000057 +:10B9F0000000000000000000000000000000000047 +:10BA00000000000000000000000000000000000036 :10BA10000000000000000000000000000000000026 -:10BA20000000000000000000008400000082000010 -:10BA3000080000040040000082000400C000000074 -:10BA400082000400000001000004A020100000415A -:10BA50000000000000000800000084000000082131 -:10BA60000000080000200800000000000000004165 -:10BA7000000088000005000000090002000400002A -:10BA800000800000A000000008000000000000008E -:10BA900000002000200020002000840002000000A0 -:10BAA0000800000000000000000001000000010488 -:10BAB00008040800000800000000000400000084E2 -:10BAC0000000000080000000080000000001008469 -:10BAD000008400C00300000000002004000000906B -:10BAE00000A004000000040100000000000040204D -:10BAF00000000000000000840800050800000208A3 -:10BB0000000040200000000000002100009008001C -:10BB100000040000880080009000A1002100800047 -:10BB200000000000100000000000090008000000F4 -:10BB300008010200000000000000080001000100F0 -:10BB400084000800000000C0900000000003000016 -:10BB5000000000050000000000000040020000009E -:10BB6000000000000000000090200000000000081D -:10BB700000200000000000200000040090000000F1 -:10BB80000000002000000000000000000000000095 -:10BB900000000000840000002000880482042000CF -:10BBA00000040000840400000000000010000003F6 -:10BBB000042084008211000000A0000000000800A2 -:10BBC000020005000000000000410000000000C06D -:10BBD0000004000000000000008400C0000080009D -:10BBE0000000000000A0000000A000030090000082 -:10BBF0000004009100020000090003000204030099 -:10BC0000000000000001002040040040000000008F -:10BC100000000000000000000000800000010000A3 -:10BC20008000000100000001000000000000000092 -:10BC30000000830100000300100000000000080065 -:10BC400000000000020008000000080900080010C1 -:10BC5000000000100008001000000000002100405B -:10BC60000000000200008400890000000080000045 -:10BC7000000000040041001100000000400000002E -:10BC800000000000C00800000800000000000008DC -:10BC900000000000840084001000080090000000F4 -:10BCA00000000004200084042000000000000000C8 -:10BCB000000000000180080001A00000000000005A -:10BCC00000000000000000008000000000000000F4 -:10BCD00000010000001000000284000000000000CD -:10BCE0000000000000000000000004000000002030 -:10BCF0000000000000000040000000000000000202 -:10BD00000000000800000000000000000300000028 -:10BD100000002100000000000000000808000000F2 -:10BD20000000000000019000000180000000000001 -:10BD300000A0000000820420C102042100000000D5 -:10BD400000000000C0400082002008081004000825 -:10BD50000010C0080000000000000000000000000B -:10BD600000000000820000000000020090C00008F7 -:10BD700000080208002000820010A0A000000000BF -:10BD80000000000000000010000000080084000017 -:10BD90000000000000000000000000000000112171 -:10BDA00020410020828300010000010000000240C9 -:10BDB000004000020210C188002000A00090000096 -:10BDC00000000000000080800080000080800000F3 -:10BDD0000080008080800000000000000000000063 +:10BA20000000000000000000000000000000000016 +:10BA30000000000000400000000000000040000086 +:10BA400000000000000000000000000000000000F6 +:10BA500000000000000000000000000000000000E6 +:10BA600000000000000000000000000000000000D6 +:10BA700000000000000000000000000000000000C6 +:10BA800000000000040000000000000004050000A9 +:10BA9000C0000000000000000000000000000000E6 +:10BAA0000000000000000000000000000000000096 +:10BAB0000000000000000000000000000000000086 +:10BAC0000000000000000800000000000800000066 +:10BAD000000000000000000000000000080004005A +:10BAE0000000000000000000000000000000000056 +:10BAF0000000000000000000000000000000000046 +:10BB00000000000000000000000000000200000033 +:10BB10000000000000000000000000000000000025 +:10BB20000000000000000000000000000000000015 +:10BB30000000000000000000000000000000000005 +:10BB400000000000000000000000000000000000F5 +:10BB500000000000000000000000000000000000E5 +:10BB600000000000000000000000000000000000D5 +:10BB700000000000000000000000000000000000C5 +:10BB800000000000000008000000000000000000AD +:10BB900000000000000000000000000000050000A0 +:10BBA000000000000000000300400000000500004D +:10BBB000000000000008000000000000000000007D +:10BBC0000000000000000000000000000000000075 +:10BBD0000000000000000000000000000000000065 +:10BBE0000000000000000000040000000000000051 +:10BBF0000000000000000000000000000000000045 +:10BC00000000000000000000000000000000000034 +:10BC10000000000000000000000000000000000024 +:10BC20000000000000000000000000000000000014 +:10BC30000000000000000000000000000000000004 +:10BC400000000000000000000000000000000000F4 +:10BC500000000000000000000000000000000000E4 +:10BC600000000000000000000000000000000000D4 +:10BC700000000000000000000000000000000000C4 +:10BC80000000000000000000000020000000000094 +:10BC900000000000000000000000880000400000DC +:10BCA000000000000000000000400041000000090A +:10BCB0000000000000000000004000000040000004 +:10BCC0000000000000000000000000000000000074 +:10BCD0000000000000000000000000000000000064 +:10BCE0000000000000000000000000000000000054 +:10BCF0000000000000000000000000000000000044 +:10BD00000000000000000000000000000000000033 +:10BD10000000000000000000000000000000000023 +:10BD20000000000000000000000000000000000013 +:10BD30000000000000000000000000000000000003 +:10BD400000000000000000000000000000000000F3 +:10BD500000000000000000000000000000000000E3 +:10BD600000000000000000000000000000000000D3 +:10BD700000000000000000000000000000000000C3 +:10BD800000000000000000000000000000000000B3 +:10BD900000000000000000000000000000010000A2 +:10BDA000000000000000C088000400209082000015 +:10BDB0000000000000000000000000000000000083 +:10BDC0000000000000000000000000000000000073 +:10BDD0000000000000000000000000000000000063 :10BDE0000000000000000000000000000000000053 -:10BDF00000800080808011000000008000000000B2 -:10BE00000000000000000000008000000080000032 -:10BE10000000000000000000000000000000000022 -:10BE20009111852000000090001100051103080009 -:10BE300000000000008080802180008009000080D8 -:10BE40000000000000000000000000100040800022 -:10BE500000008091808000000000000000000000D1 +:10BDF0000000000000000000000000000000000043 +:10BE00000000000000000000000000000000000032 +:10BE10000000000000000000000500110000000408 +:10BE20000000000000000000000000000000000012 +:10BE30000000000000000000000000000000000002 +:10BE400000000000000000000000000000000000F2 +:10BE500000000000000000000000000000000000E2 :10BE600000000000000000000000000000000000D2 -:10BE700080000003000080008000801180800000AE -:10BE80000000004000000000000000008000008072 -:10BE90000000000000000000000000008000000022 -:10BEA00080000000A090911080800000050011002B -:10BEB000800080008085808080808000820011006A -:10BEC0008200000000000000000088009000902028 -:10BED0000484000090110810000000000010000011 -:10BEE0000010000000000000000000000000000042 -:10BEF00000001000C001A0100890040020C1201014 -:10BF00008200000000010000000000000000908896 -:10BF1000000284200000000000000000000010006B -:10BF20000000C00090001182091110C008900000AC -:10BF30000100C000820004C1100404C08800200079 -:10BF4000A0009000000000000000000040900008E9 -:10BF50000220A0A010020002000410040100000052 -:10BF60000800000000000000000000000010004079 -:10BF7000C00400049004000000C0C0A04010008273 -:10BF8000844010A0000000000000000000000190AC -:10BF90000000840801840000000000000000000090 -:10BFA000000000000000C0080083C008032100005A -:10BFB00000000001000189100088C040084088206E -:10BFC00000001004020000000000000000008000DB -:10BFD00000800000808000800080008000804100A0 -:10BFE00000008000000000000000000000000000D1 -:10BFF0000080000000008000000000000080800041 -:10C000000000008000800000000000000000000030 -:10C010001080000080001000000000000000000000 -:10C020000000000000000000C18000A0800091110D -:10C030000000000500100011418000008000800019 -:10C0400000000000800080000000000000000000F0 -:10C050008000000080008000001080098000000047 -:10C0600000000008000000000000000000000000C8 -:10C070000000000000000000000080800080000040 -:10C080000020000000000000000000000000000090 -:10C09000000000000005000000000000000000009B -:10C0A00000000000000000000000200003000080ED -:10C0B0000300000005110300000000000000000064 -:10C0C0000000008900000000801100000000000056 -:10C0D0000000040084081020A00004000801408231 -:10C0E0001000000000000000000000000000000040 -:10C0F000000000000000000000000400A008C008CC -:10C100000000A00082842004100000000000000055 -:10C1100000000000000020000088840000000000F3 -:10C120000000000000000000000000008990880866 -:10C13000100488000090000101000000200090021F -:10C1400090024000104000101000080000000000A5 -:10C15000000000000000000000004200008200001B -:10C1600007000081000600000700410000000000F9 -:10C17000000000000000000000000000008200003D -:10C18000070000000006000007000000000000009B -:10C190000000000000000000000007000000000098 -:10C1A000000000000000000000000000000082000D -:10C1B00000E000004142600000E0000000000000DC -:10C1C000000000004842810A00E007000000000073 -:10C1D0000000000000007F3E4302F0AA3C3CFFFF4D -:10C1E00028F87D410F0F0000000000000000000053 -:10C1F000000000000000000000003C3C3CBCF5FFDB -:10C20000F5F5FFFFFFFFFFFF28F8C3F3C3F30000BE -:10C21000000000000000000082FF82FF3CFF00FFE2 +:10BE700000000000000000000000000000000000C2 +:10BE800000000000000000000000000000000000B2 +:10BE900000000000000000000000000000000000A2 +:10BEA00000000000000000000000800000A00080F2 +:10BEB0000000000000000000000000000000000082 +:10BEC0000000000000000000000000000000000072 +:10BED0000000000000000000000000000000000062 +:10BEE0000000000000000000000000000000000052 +:10BEF0000000000000000000000000000000000042 +:10BF00000000000000000000000000000000000031 +:10BF10000000000000000000000000000000000021 +:10BF20000000000000000000000000000800848302 +:10BF30002010904000000000000000000000000001 +:10BF400000000000000000000000000000000000F1 +:10BF500000000000000000000000000000000000E1 +:10BF600000000000000000000000000000000000D1 +:10BF700000000000000000000000000000000000C1 +:10BF800000000000000000000000000000000000B1 +:10BF900000000000000000000000000000000000A1 +:10BFA000000000000000000000000000000004107D +:10BFB00000821020A104000000000000000000002A +:10BFC0000000000000000000000000000000000071 +:10BFD0000000000000000000000000000000000061 +:10BFE0000000000000000000000000000000000051 +:10BFF0000000000000000000000000000000000041 +:10C000000000000000000000000000000000000030 +:10C010000000000000000000000000000000000020 +:10C020000000090000000000000000000000000007 +:10C03000800000808000040000000000000000007C +:10C0400000000000000000000000000000000000F0 +:10C0500000000000000000000000000000000000E0 +:10C0600000000000000000000000000000000000D0 +:10C0700000000000000000000000000000000000C0 +:10C0800000000000000000000000000000000000B0 +:10C0900000000000000000000000000000000000A0 +:10C0A0000000000000000000000000000000000090 +:10C0B0000000800000000080000000000000000080 +:10C0C0000000000000000000000000000000000070 +:10C0D0000000000000000000000000000000000060 +:10C0E0000000000000000000000000000000000050 +:10C0F0000000000000000000000000000000000040 +:10C10000000000000000000000000000000000002F +:10C11000000000000000000000000000000000001F +:10C12000000000000000000000000000000000000F +:10C1300000000000100020C0900802000000000075 +:10C1400000000000000000000000000000000000EF +:10C1500000000000000000000000000000000000DF +:10C1600000000000000000000000000000000000CF +:10C1700000000000000000000000000000000000BF +:10C1800000000000000000000000000000000000AF +:10C19000000000000000000000000000000000009F +:10C1A000000000000000000000000000000000008F +:10C1B000000000000000000000000000000000007F +:10C1C000000000000000000000000000000000006F +:10C1D000000000000000000000000000000000005F +:10C1E000000000000000000000000000000000004F +:10C1F000000000000000000000000000000000003F +:10C20000000000000000000000000000000000002E +:10C21000000000000000000000000000000000001E :10C22000000000000000000000000000000000000E -:10C230000000000002088020000000000000000054 -:10C2400000000000028008200000303000140014BC -:10C250000000000000000000FFBEC382F0003C3C74 -:10C2600028F828F87D7D0F0F000000000000000076 -:10C27000000000000000000000000000000000A01E -:10C2800055FF555500AAC3EB28F828F8C3F3FFFF64 -:10C290000000000000000000000082FF82FF3CFF61 -:10C2A00000FF00000000000000000000000000008F -:10C2B0000000010000000104401000000000000028 -:10C2C00000000100000001400410000030300014A4 -:10C2D00000140000000000000000FD5DA80800013F -:10C2E0000000FF05FF3D00F000F00000000000002E +:10C230000000000000000000F0C500C5FF0F000F67 +:10C2400000000000000000000000000000000000EE +:10C2500000000000000000000000000000000000DE +:10C2600000000000000000000000000000000000CE +:10C2700000000000000000000000000000000000BE +:10C2800000000000000000000000000000000000AE +:10C29000000000000000000000000000000000009E +:10C2A000000000000000000000000000000000008E +:10C2B00000000000000000000000FFC50FC555C3CE +:10C2C00055C3000000000000000000000000000056 +:10C2D000000000000000000000000000000000005E +:10C2E000000000000000000000000000000000004E :10C2F000000000000000000000000000000000003E -:10C300000000FFF7FFFF3E343C3CFFC7C7C72F0FBD -:10C31000070F00000000000000000000CFCF0F0F4B -:10C32000FFFFFFFF00000000000000000000000011 -:10C33000F0F0000004080102440088000000000042 -:10C34000C3C30000440088002400002479555050E5 -:10C3500038FF04040000000000000000F555A000B4 -:10C360000000000005053D3D000000000000000049 +:10C30000000000000000000000000000000000002D +:10C31000000000000000000000000000000000001D +:10C32000000000000000000000000000000000000D +:10C33000000000000000000000000000A3A300F0C7 +:10C34000AAC3F00000000000000000000000000090 +:10C3500000000000000000000000000000000000DD +:10C3600000000000000000000000000000000000CD :10C3700000000000000000000000000000000000BD -:10C3800000000000000400003C3C3C3CFF050505AB -:10C390000F0F0F0F00000000000000000000CFCFC3 -:10C3A0000F0F00000F0F0000000000000000000051 -:10C3B0000000F0F0000010204080004400880000E1 -:10C3C0000000C3C30000004400888100008155556F -:10C3D000505038FF0404000000000000000000007E -:10C3E00000000000000100000E2000000001050018 -:10C3F0000A28050000A00000000000000000000066 -:10C4000000000010000000000020000000000000FC -:10C410000E200000000000000000000000000000EE -:10C4200005000A08050000A0000000000000000050 -:10C4300000000000000012060061000080010800FA -:10C4400000610000800112060000000000000800EA -:10C4500000610027801500000000000000000000BF +:10C3800000000000000000000000000000000000AD +:10C39000000000000000000000000000000000009D +:10C3A000000000000000000000000000000000008D +:10C3B0000000000000000000000000000000A3A337 +:10C3C0000FFFAAC3F0FF0000000000000000000003 +:10C3D000000000000000000000000000000000005D +:10C3E000000000000000000000000000000000004D +:10C3F000000000000000000000000000000000003D +:10C40000000000000000000000000000000000002C +:10C41000000000000000000000000000000000001C +:10C42000000000000000000000000000000000000C +:10C4300000610006000D0000000000000000000088 +:10C440000000000000C0000000000000000000002C +:10C4500000000000000000000000000000000000DC :10C4600000000000000000000000000000000000CC :10C4700000000000000000000000000000000000BC :10C4800000000000000000000000000000000000AC :10C49000000000000000000000000000000000009C :10C4A000000000000000000000000000000000008C -:10C4B00000000000000000000000FF003C3CF0F025 -:10C4C000FFFF550F550F00F00FFF000000000000A8 +:10C4B000000000000000000000000000000000007C +:10C4C000000000000000000000000000000000006C :10C4D000000000000000000000000000000000005C :10C4E000000000000000000000000000000000004C :10C4F000000000000000000000000000000000003C :10C50000000000000000000000000000000000002B :10C51000000000000000000000000000000000001B :10C52000000000000000000000000000000000000B -:10C53000000000000000000000000000FF003C3C84 -:10C5400000000F0F550F550F00F00FFF0000000007 +:10C5300000000000000000000000000000000000FB +:10C5400000000000000000000000000000000000EB :10C5500000000000000000000000000000000000DB :10C5600000000000000000000000000000000000CB :10C5700000000000000000000000000000000000BB :10C5800000000000000000000000000000000000AB :10C59000000000000000000000000000000000009B :10C5A000000000000000000000000000000000008B -:10C5B00000000000000000000000000000003CFF40 -:10C5C0003C00F0FFF0FF0FFF0F00F0FFF0FF000056 +:10C5B000000000000000410000000000000000003A +:10C5C000000000000000000000000000000000006B :10C5D000000000000000000000000000000000005B :10C5E000000000000000000000000000000000004B :10C5F000000000000000000000000000000000003B :10C60000000000000000000000000000000000002A :10C61000000000000000000000000000000000001A :10C62000000000000000000000000000000000000A -:10C6300000000000000000000000000000000000FA -:10C640003CFF3C00000F000F0FFF0F00000F000F1A -:10C65000000000000000000000000000000A0000D0 -:10C66000200020000400000010001000C00020087E -:10C67000880010001000400040008880C00040008A -:10C6800010000200030002001000C00002000200BF -:10C690008540020002000200880002002000020023 -:10C6A000000388104000208000802000000000006F -:10C6B0000000880001000180080000000400200044 -:10C6C00084000000200000000400200000000000A2 -:10C6D00040000000020000000000000020000400F4 -:10C6E00002004100400040A04020400020402002C5 -:10C6F0004020102040204000002000204020200248 -:10C7000020204020A1208200904020204020C00016 -:10C71000A020022180208020C0200002840200008E -:10C7200080000000000300000002401000400040B4 -:10C7300000000040410008000210800000000000DE -:10C7400000C00040000000000000000000000002E7 -:10C75000090000000000800000000002000000004E -:10C760001000000002000040020908000000004123 -:10C77000000020000005020000090009004100201F -:10C78000020002800300020002000200000002001A -:10C790000280020002000000000000000000020011 -:10C7A0000140020000000000904084000800880062 -:10C7B0000000000008000000820890800080000057 -:10C7C00000000000000001000100890002100000CC -:10C7D00004000010000000000280000002000400BD -:10C7E00000400000040000080010001000000008D5 -:10C7F0000008001000100000000000000000001001 -:10C8000000010084001002108000800080000010F1 -:10C8100080088040800480000000110000000000BB -:10C82000800002018008000000080001000880006C -:10C8300000000040004080000000000000100010D8 -:10C840000000000000000008201020002010000060 -:10C850000000000000000000000000400000000890 -:10C860000000048400000040000000000000000000 -:10C8700000001000000000000000000000000000A8 -:10C880004000018084000000004100000000010021 -:10C89000004000002008000090020010004100004D -:10C8A0000080020090800000000084802000C00012 -:10C8B00008800000000000000000002100080000C7 -:10C8C00084000000000000000000010800210100B9 -:10C8D000010000000000000000000000020800004D -:10C8E0000000000000000002000000002100030022 -:10C8F0000800000000000408000810A0000000006C -:10C9000008100084042004000084000809000008C6 -:10C910000200000000000000000021822100000051 -:10C92000410000408884004008000000004000A052 -:10C9300004009110000000000000000000000890BA -:10C940004000080011000000400005002000000821 -:10C950002000200000882188008800000800800056 -:10C960002100000000000000000000008200000024 -:10C9700000000000000084400000000000000000F3 -:10C980000000000000400000001100080008000046 -:10C990000000004120004010200000102000044052 -:10C9A0000000004002001041004088800000841117 -:10C9B00000040011000482030004080582800410B2 -:10C9C000040208000420820008000800080000009B -:10C9D000040004000400C00004000400C000400083 -:10C9E000C00000000804000800050009080500C098 -:10C9F0000000001000000000000000000000000027 -:10CA000000000000000000000000000000004104E1 -:10CA1000000000C02100000000000000008421820E -:10CA2000001100080089800003000300004000009E -:10CA30000000008409000800410008000000000414 -:10CA4000088500000000000008000000000003202E -:10CA50000000830088008300000080008000210027 -:10CA600040002100000000000000000009900000CC -:10CA700000000005000000000000000000000000B1 -:10CA8000000000000000000000000400840000001E -:10CA90000000000000000000020000000000004054 -:10CAA00000000100010001000000000084000940B6 -:10CAB00000000800080040000400000020808500FD -:10CAC0000000000000000000000500000004080055 -:10CAD000A0000480828000808280000404000400A2 -:10CAE0000000000000000000820000002000080498 -:10CAF00000000084000000000000080005000000A5 -:10CB00000300000000000090000000008000000012 -:10CB1000000800000000000000008000000000008D -:10CB20000001000002000290020000000000080066 -:10CB30000200000000000000800009C000000004A6 -:10CB40002000218400000000000000000000000020 -:10CB50000000000083044104030410040300830068 -:10CB600000000300000005A005A000000000808474 -:10CB70000001000000000000000000000002004072 +:10C6300000000000000000004100000000000000B9 +:10C6400000000000000000000000000000000000EA +:10C6500000000000000000000000000000000000DA +:10C6600000000000200000000000000000000000AA +:10C670000000000000000000000000008400000036 +:10C68000000084002000000000000000880000007E +:10C69000000084008400000000000400200000006E +:10C6A0000000C0000000200000000000000020008A +:10C6B0000000000020002000000088002000200072 +:10C6C000000020000000000000000000000020002A +:10C6D00000000000200020000000200020002000BA +:10C6E000000000000000000000000000400000000A +:10C6F0000000000000000000000000080000000032 +:10C700000000000000000000000000000000000029 +:10C710000000000000000000000000000000000019 +:10C720000000000000000000000000000000000009 +:10C7300000000000000000000000000000000000F9 +:10C7400000000000000000000000000000000000E9 +:10C7500000000000000000000000000000000000D9 +:10C760000000000000400000000000000000000089 +:10C7700000000000000000000000000000000000B9 +:10C7800000000000020000000000000000000000A7 +:10C790000200000000000000000000000000000097 +:10C7A0000000000000000000000000000000000089 +:10C7B0000000000000000000000000000000000079 +:10C7C00000000000000084000000000000000000E5 +:10C7D0000000000000000000000000000000000059 +:10C7E0000000000000000000000000000000000049 +:10C7F000000000000000004000400082000000082F +:10C800000000000000000000000000000000000028 +:10C81000000000000000000000000400000000080C +:10C820000000000200000000000000000000000006 +:10C8300000000000000000000000000000000000F8 +:10C8400000080000000000000000000000000000E0 +:10C8500000000000000000000000000000000000D8 +:10C8600000080000000000000000000000000000C0 +:10C8700000000000000000000000000000000000B8 +:10C8800000000000000800000000000000000000A0 +:10C890000000000000000000400000000000000058 +:10C8A0000000000000000000000000000000000088 +:10C8B0000000000000000000000000000000000078 +:10C8C0000000000000000000000000000000000068 +:10C8D0000000000000000000000000000000000058 +:10C8E0000000000000000000000000000000000048 +:10C8F0000000000000000000000000000000000038 +:10C900000000000000000000000000000000000027 +:10C910000000000000000000000000000000000017 +:10C920000000000000000000000000000000000007 +:10C9300000000000000000000000000000000000F7 +:10C9400000000000000000000000000000000000E7 +:10C95000080000000000000000000000008400004B +:10C9600000000000000000000000000000000000C7 +:10C970000040000000000000002100000000000056 +:10C98000000000000000000008000000000000009F +:10C990000000000000000000000000000000000097 +:10C9A0000000000300000000000000000000000084 +:10C9B000000000000000C0000000000000000000B7 +:10C9C0000000000000000000000000000000000067 +:10C9D0000000000000000000000000000000000057 +:10C9E0000000000000000000000000000000000047 +:10C9F0000000000000000000000000000000000037 +:10CA00000000000000000000000000000000000026 +:10CA10000000000000000000000000000000000016 +:10CA20000000000000000000000000000000000006 +:10CA300000000000000000100000000000000000E6 +:10CA400000000000000000000000000000000000E6 +:10CA500000000000000000000000000000000000D6 +:10CA600000000000000000000000000000000000C6 +:10CA700000000000000000000000000000000000B6 +:10CA800000000000000000000000000000000000A6 +:10CA90000000000000000000000000000000000096 +:10CAA0000000000000000000000000000004000082 +:10CAB000000000000800000000000000000000006E +:10CAC0000000000000000000000000000000000066 +:10CAD0000000000000000000000000000000000056 +:10CAE0000000000000000000000000000000000046 +:10CAF0000000000000000000000000000000000036 +:10CB00000000000000000000000000000000000025 +:10CB10000000000000000000000000000000000015 +:10CB200000000000090000000000000000000000FC +:10CB300000000000000000000000000000000000F5 +:10CB400000000000000000000000000000000000E5 +:10CB500000000000000000000000000000000004D1 +:10CB60004000000000000000000000000000000085 +:10CB700000000000000000040000000000000000B1 :10CB800000000000000000000000000000000000A5 -:10CB90000000400001030040008500410200021037 -:10CBA0000004001000000000000000084000000029 -:10CBB000400000000000000000108800200000007D -:10CBC000000400000880000000000041A0080011DF -:10CBD0000008820000400000200000002000040245 -:10CBE000840082210400000082008200A000000076 -:10CBF0000000000000000000000000000000000035 -:10CC00000000000000000000000000000000000024 -:10CC10000000000020002000000100040000A0002F -:10CC20008000200000002002001000000000000032 -:10CC3000000000000090000000A000A100008000A3 -:10CC4000000000200000041000001004004000005C -:10CC50000000000000000000080080000000808844 -:10CC600080020000030080000000000000000000BF -:10CC700003000000080000000000000000000000A9 +:10CB90000000000000000000000000000000000095 +:10CBA0000000000000000000000000000000000085 +:10CBB0000000000000000000000000000000000075 +:10CBC0000000000000000000000000000000000065 +:10CBD0000000000000000000000000000000000055 +:10CBE0000000000000000000000000000000002124 +:10CBF00000000000000000000500009000000000A0 +:10CC000000000000000000000000004000000000E4 +:10CC10000000000000000000000000000000000014 +:10CC20000000000000000000000000000000000004 +:10CC300000000000000000000000000000000000F4 +:10CC400000000000000000000000000000000000E4 +:10CC500000000000000000000000000000000000D4 +:10CC600000000000000000000000000000000000C4 +:10CC700000000000000000000000000000000000B4 :10CC800000000000000000000000000000000000A4 -:10CC90000002900800C0000800C0000990000000D9 -:10CCA00000C000820000000000C00000000000C0C2 -:10CCB00000C00000000000C000004088038409821A -:10CCC0008484000000000000000002040002000450 -:10CCD00010820000000000000000089191401082C6 -:10CCE0001040A00220900002828800000000000096 -:10CCF000010091A004042088C01000000000000082 +:10CC90000000000000000000000000000000000094 +:10CCA0000000000000000000000000000000000084 +:10CCB0000000000000000000000000000000000074 +:10CCC0000000000000000000000000000000000064 +:10CCD0000000000000000000000000000000000054 +:10CCE0000000000000000000000000000000000044 +:10CCF0000000000000000000000000000000000034 :10CD00000000000000000000000000000000000023 -:10CD100000000000808000000080008202A18000EE -:10CD200000040080000000000000008000000000FF -:10CD3000000000800000000000000000A0000800CB -:10CD4000400000000000000005000000800000001E -:10CD500000008000000000000000000089118240F7 -:10CD600080C100400380800000808000000000003F -:10CD700000004000914000A1000280A000000000DF +:10CD10000000000000000000000000000000000013 +:10CD20000000000000000000000000000000000003 +:10CD300000000000000000000000000000000000F3 +:10CD400000000000000000000000000000000000E3 +:10CD500000000000000000000000000000000000D3 +:10CD600000000000000000000000000000000000C3 +:10CD700000000000000000000000000000000000B3 :10CD800000000000000000000000000000000000A3 -:10CD90000000000000000002008080008080080089 -:10CDA0000800A1000000002000008000000000003A -:10CDB0000000800000000000000080000000000073 -:10CDC00010038002800020000300080002008000A1 -:10CDD0000009800000000000000000000000A0002A -:10CDE00040409180C02080008021808000808000B1 -:10CDF000000000008000C000C1901110A0200000C1 +:10CD90000000000000000000000000000000000093 +:10CDA0000000000000000000000000000000000083 +:10CDB0000000000000000000000000000000000073 +:10CDC0000000000000000000000000000000000063 +:10CDD0000000000000000000000000000000000053 +:10CDE0000000000000000000000000000000000043 +:10CDF0000000000000000000000000000000000033 :10CE00000000000000000000000000000000000022 -:10CE1000000000000000100004C0008282000290A8 -:10CE200001000100C100000000000000C00000007F -:10CE300000000000C000000000000000C000000072 -:10CE40000400030140838284000008000100010007 -:10CE500008000000A0A0000000000000000000008A -:10CE6000081040008540909102008200020210905C -:10CE7000040000000000C000104084C1C140828254 +:10CE10000000000000000000000000000000000012 +:10CE20000000000000000000000000000000000002 +:10CE300000000000000000000000000000000000F2 +:10CE400000000000000000000000000000000000E2 +:10CE500000000000000000000000000000000000D2 +:10CE600000000000000000000000000000000000C2 +:10CE700000000000000000000000000000000000B2 :10CE800000000000000000000000000000000000A2 -:10CE90000000000000000000840000002000C0002E -:10CEA00000000101008800C000880000000000C0F0 -:10CEB00000820000000000C000400000000000C030 -:10CEC0000000041000840041A0A000000000000049 -:10CED0000001C00200080020A1A000000000000026 -:10CEE0000000104001409041A14082820002409029 -:10CEF00002820000000000000000C10401024005A1 -:10CF000041090000000000000000000000000000D7 +:10CE90000000000000000000000000000000000092 +:10CEA0000000000000000000000000000000000082 +:10CEB0000000000000000000000000000000000072 +:10CEC0000000000000000000000000000000000062 +:10CED0000000000000000000000000000000000052 +:10CEE0000000000000000000000000000000000042 +:10CEF0000000000000000000000000000000000032 +:10CF00000000000000000000000000000000000021 :10CF10000000000000000000000000000000000011 -:10CF200080000000081000020085000000000000E2 -:10CF300000800000000000000080000000000000F1 -:10CF4000008000008000000300A1808000030040FA -:10CF5000000300028080000000008200000000004A -:10CF60000000000000890840858511400000008015 -:10CF70000080808000000000000000004120208828 -:10CF8000A18511C0000000000000000000000000AA -:10CF90000000000000000000000000000000800011 -:10CFA0000080800010040200410085048000000021 -:10CFB0000000000080000000000000008000000071 -:10CFC00000000000000000C000008000800003009E -:10CFD000030002000200000000008000800000004A -:10CFE000000000000000C0A0039140000308800280 -:10CFF00080900000000000000000000000000241DE -:10D00000118021808340000000000000000000002B -:10D01000000000000000000000000000000084008C -:10D020000800C00808000100000000000800C0005F -:10D03000008800000000C0000000A0040000C00044 -:10D040000040000040000000200284040410A00002 -:10D050000000000801000100880002008400A00018 -:10D060000000000000000000900810C14040910046 -:10D0700090012021208282000000000000000000BA -:10D080004121909090840400000000000000000006 +:10CF20000000000000000000000000000000000001 +:10CF300000000000000000000000000000000000F1 +:10CF400000000000000000000000000000000000E1 +:10CF500000000000000000000000000000000000D1 +:10CF600000000000000000000000000000000000C1 +:10CF700000000000000000000000000000000000B1 +:10CF800000000000000000000000000000000000A1 +:10CF90000000000000000000000000000000000091 +:10CFA0000000000000000000000000000000000081 +:10CFB0000000000000000000000000000000000071 +:10CFC0000000000000000000000000000000000061 +:10CFD0000000000000000000000000000000000051 +:10CFE0000000000000000000000000000000000041 +:10CFF0000000000000000000000000000000000031 +:10D000000000000000000000000000000000000020 +:10D010000000000000000000000000000000000010 +:10D020000000000000000000000000000000000000 +:10D0300000000000000000000000000000000000F0 +:10D0400000000000000000000000000000000000E0 +:10D0500000000000000000000000000000000000D0 +:10D0600000000000000000000000000000000000C0 +:10D0700000000000000000000000000000000000B0 +:10D0800000000000000000000000000000000000A0 :10D090000000000000000000000000000000000090 -:10D0A000002100000700000A600000E0000000000E +:10D0A0000000000000000000000000000000000080 :10D0B0000000000000000000000000000000000070 -:10D0C00000000000000000000000000000E0000080 -:10D0D0000000000000E00000000000000000000070 -:10D0E00050000000000000000000600600E00700A3 -:10D0F00042000021000007000000000000000000C6 -:10D100000000410000E000004812000000000000A4 +:10D0C0000000000000000000000000000000000060 +:10D0D0000000000000000000000000000000000050 +:10D0E0000000000000000000000000000000000040 +:10D0F0000000000000000000000000000000000030 +:10D10000000000000000000000000000000000001F :10D11000000000000000000000000000000000000F -:10D120000000FC3CFE7E00000000C3C3C3C300FF40 -:10D13000FFFF0000FFFFC3C3FFFF0F0FFFFFC3C3CD -:10D14000FFFFC3C3FFFFC3C3FFFF00007C3C6000C1 -:10D1500083C39FFF000000000000000020000000CB -:10D16000C3FF00C300000000000000007F1976101C -:10D17000FE6E7E7EF0BDF0247F7C43400000000008 -:10D180000000000000000000A000050000000000FA +:10D1200000000000000000000000000000000000FF +:10D1300000000000000000000000000000000000EF +:10D1400000000000000000000000000000000000DF +:10D1500000000000000000000000000000000000CF +:10D1600000000000000000000000000000000000BF +:10D1700000000000000000000000000000000000AF +:10D18000000000000000000000000000000000009F :10D19000000000000000000000000000000000008F -:10D1A00000000000F000F66600000000C3C3C3C327 -:10D1B00000FFFFFFFFFFFFFFC3C3FFFF0F0FFFFFD6 -:10D1C000C3C3FFFFC3C3FFFFC3C3FFFF00003C3C5B -:10D1D0000000C3C3FFFF00000000000000000000CB -:10D1E0000000C1F900C10000000000000000FF992C -:10D1F000660098081818F0FFF000FF3CC30000001C -:10D200000000000000000000000100A00005000078 +:10D1A000000000000000000000000000000000007F +:10D1B000000000000000000000000000000000006F +:10D1C000000000000000000000000000000000005F +:10D1D000000000000000000000000000000000004F +:10D1E000000000000000000000000000000000003F +:10D1F000000000000000000000000000000000002F +:10D20000000000000000000000000000000000001E :10D21000000000000000000000000000000000000E :10D2200000000000000000000000000000000000FE :10D2300000000000000000000000000000000000EE @@ -175443,4333 +175443,236 @@ :10D2700000000000000000000000000000000000AE :10D28000000000000000000000000000000000009E :10D29000000000000000000000000000000000008E -:10D2A0000000000000000000000F3C3F00000000F4 -:10D2B000FFFFFF00FFFFC3C3FFFFFF00FFFF9999C0 -:10D2C000FFFFC3C3FFFF0000FFFFC3C3000066668C -:10D2D0000000FFF399910008000000000000090918 -:10D2E00009090028002400C300C30000000000005A -:10D2F00000006F676F7F2427E4E73C3C3C3C091942 -:10D300006F7F000000000000C3C3402002040088BB -:10D3100000440000000000000000000000000000C9 -:10D3200000000000000000000000666F7E7FC0C0AB -:10D330000000FFFFFF00FFFFC3C3FFFFFF00FFFF71 -:10D340009999FFFFC3C3FFFFFFFFFFFFC3C30000A7 -:10D3500066660000FFFF99990000000000000000D1 -:10D36000090909090000000000C300C30000000013 -:10D3700000000000090109192424E7E76666606FD0 -:10D3800009016F67000000000000C3C3801001089E -:10D3900088004400000000000000000000000000C1 -:10D3A00000000000000000000000000000000E204F -:10D3B00000000000406380028025920240828000CD -:10D3C0000020920240828000002092024082800071 -:10D3D00000208A02000000610007001900010061BE -:10D3E00000050001000080000000000000000000B7 -:10D3F000000000000000006100208001000000002B -:10D400000020000000000000000000001206006183 -:10D410000000800108000000000000000000000083 -:10D4200000000000000000000000000000000000FC -:10D43000000000000000F3AAAAAAF5F5F505000017 -:10D4400000000000000000000000000000000000DC -:10D45000000000000000000000000000F0FAF0FAF8 -:10D46000FF0C0C0C303030FF00000000000000000A -:10D4700000000000000000005555555528EBE8EB72 -:10D48000000000000000000000000000000000009C -:10D490007F702F2030F3B2B20000000000000000C7 -:10D4A000000000000000000000000000000000007C -:10D4B0000000000000000000F3AAAAAA5555555527 -:10D4C000000000000000000000000000000000005C -:10D4D000000000000000000000000000000000AAA2 -:10D4E00000AAFF0C0C0C303030FF000000000000E0 -:10D4F000000000000000000000003F303C3C28EB32 -:10D50000282B0000000000000000000000000000C8 -:10D5100000003F303F3030F3B2B2000000000000A6 -:10D5200000000000000000000000000000000000FB -:10D530000000000000000000000014D700C355F5F3 -:10D5400000A000000000000000000000000000003B -:10D5500000000000000000000000000000000000CB -:10D560000F0F0F0F00000000303030FF00000000F0 -:10D57000000000000000000000000000F5F5350587 -:10D58000AAAAAAAA000000000000000000000000F3 -:10D59000000000000F0F0F0FA0F5B4F50000000011 -:10D5A000000000000000000000000000000000007B -:10D5B00000000000000000000000000014D700C3BD -:10D5C00055F500A000000000000000000000000071 -:10D5D000000000000000000000000000000000004B -:10D5E00000000000000000000000303030FF0000AC -:10D5F0000000000000000000000000000000C5F571 -:10D60000050500FF303F00000000000000000000A2 -:10D61000000000000000D714FF00A0F5A0E12000EA -:10D62000020020002000200088001000A000C000A0 -:10D630001000C00088000800000004002041C00065 -:10D64000C0000200200084000000880000000000EC -:10D65000000000002004840000040000000000031B -:10D6600088000000840000000280010200800100A8 -:10D67000020040020100200000000000020004003F -:10D6800021000040400001000000400000000000B8 -:10D690000000200000002000000004002000200006 -:10D6A00000A020004100400000200440204009204C -:10D6B0000020212041002020C1200020C0002100A6 -:10D6C000404010208040004020200020402040406A -:10D6D000002000C010C00000000000020002200274 -:10D6E0000000000000C00040000080024021000255 -:10D6F000020080908003024000000000090000004A -:10D7000000400200000000020200000000000000D3 -:10D7100000000000008240004002400000000002C3 -:10D7200000000040004000000000004000400010E9 -:10D7300000000040000000000000004082000000E7 -:10D74000004000400000000000090040000002000E -:10D7500008000004000000000000000000000000BD -:10D7600002000000000000000000000002000300B2 -:10D770004000030000020002000000090000000059 -:10D780000000000000000000000000000000000099 -:10D790000000020000000000000000000000020085 -:10D7A00002410000000000080000004000100000DE -:10D7B00000000000001000000000004000000040D9 -:10D7C0000000040000000040000000000000001005 -:10D7D00000000000000000000000000000000088C1 -:10D7E000000000000000000000000082000000882F -:10D7F0004000800020000001000100000000000047 -:10D800000000000000000000000000000000000018 -:10D810000000000004080000008400000000000078 -:10D8200000000008030000000000000000000000ED -:10D830000008820008000000000000000000000056 -:10D840000000880000000000000000000000000848 -:10D8500000000041C0410000000000000000000086 -:10D86000004088031000000000400040000220003B -:10D87000A0000400000020000480840000000000DC -:10D8800000000100000884000000000088008400FF -:10D8900020000100010020000000000000800000C6 -:10D8A0000040000000000000000003001000000025 -:10D8B0000000000000000000000000004100000027 -:10D8C00000000000000000A00000080000000000B0 -:10D8D0000000000000000000000000A008000000A0 -:10D8E00008400200000000000000050000000800E1 -:10D8F00000004188000003A00400000200000000B6 -:10D9000020000800020000000000000003000000EA -:10D91000119080A020822084800003000300034037 -:10D9200021000001000000000000000000000004D1 -:10D930000800000000000000000000000020C040BF -:10D9400000000100000085000000000000008200CF -:10D950000000100000000000004108000011000459 -:10D96000C0418202000008000000000004004004E2 -:10D97000000008000800020404004000400002000B -:10D980000000020000000000020002008800020007 -:10D990000800820000009000820400840000000063 -:10D9A000004100020000820000410000000000046D -:10D9B0000000000000000000000000000000000067 -:10D9C000000000000800000020880004000008009B -:10D9D00000000000000011C00000118200000000E3 -:10D9E00000001188099000000000200000000000E5 -:10D9F0000500100200000000800000A000080000E8 -:10DA000080000090809000000000800080000000F6 -:10DA10008000000000000000000000010041000044 -:10DA200000000400000000000000040004000000EA -:10DA300000000000000000000000000008000000DE -:10DA40000000C000000008000000A000040008045E -:10DA500000008204000440040000000400000000F4 -:10DA60000021002100000000000000000000000074 -:10DA70008200080284008200000000000000000014 -:10DA80000000110000000000020000000000820001 -:10DA900000000000C10000000080018000800080C4 -:10DAA000020300000000A00001002140010400C0AA -:10DAB0000000000000000000000000000000000066 -:10DAC0000000000041000000800000000000800015 -:10DAD0000801008400090005008500100011000005 -:10DAE0000000000003000000000000000002000031 -:10DAF000000003000002112000C0000000000090A0 -:10DB00000000000440080000000080000000000049 -:10DB1000000000000000020241000840020400046E -:10DB2000030480000000000000002000A00120117C -:10DB300000050000000000000000000000000000E0 -:10DB4000000000000040C000000020002000200075 -:10DB50000000000000040004000400200021002058 -:10DB60000000002100000004000008000000000088 -:10DB70000000000008000000000000000000040099 -:10DB80000000000083000080000000000000000092 -:10DB90000000000082000000002000000100008062 -:10DBA00000004000080002000003820000000000A6 -:10DBB00000000000000000000000000000000084E1 -:10DBC000000008000000000000000000A000800825 -:10DBD000A18800000800002103010001400100109D -:10DBE0000011000200000000099000000000000089 -:10DBF0000000000000002100009009000004000067 -:10DC000000000000050840000002000000000000C5 -:10DC100000000000000000000000000000002000E4 -:10DC20000004000000000000800000000000000070 -:10DC30000010008200000000000000000000000052 -:10DC40000000000000000000000000000000900143 -:10DC50000001119190A091C10004000588C000004E -:10DC6000000508848403000000000000000000009C -:10DC700000000000000000000000000000000000A4 -:10DC80000001A10089A0000100C100820000000085 -:10DC900000C000000000000000C00000000082A0E2 -:10DCA000000101019001009100C00000000000206F -:10DCB00000C1000140000020000000000000000042 -:10DCC0000000000000000000000000000000000054 -:10DCD0008011000389A08088918300A10091000435 -:10DCE000000041218082008400000000000000004C -:10DCF0000000000000000000000000000000000024 -:10DD000000000304A1030241000300A00041002120 -:10DD100000100080000000000000008000000000F3 -:10DD2000000000114002000200020080000000001C -:10DD30000000009141030003000500000000000006 -:10DD400000000000000000000000000000000000D3 -:10DD50000000A18000039100A121808080009191AA -:10DD60008303008004009011A10200000000000065 -:10DD700000000000000000000000000000000000A3 -:10DD80000000000000000000000083000000000010 -:10DD9000000880400010000000008000000000002B -:10DDA000000080002080020011408220000000005E -:10DDB00000008000110002000309A0030000000021 -:10DDC0000000000000000000000000000000000053 -:10DDD0000000000091A000018900918508404000EA -:10DDE0000903C0000090A00084110383000000001C -:10DDF0000000000000000000000000000000000023 -:10DE0000000000000000004000000000C000000012 -:10DE100000000000C001820100000000C00082007C -:10DE200000000000C000004001000101C10000002E -:10DE300020000000C000008221000001C1A00000FD -:10DE400000000000000000000000000000000000D2 -:10DE5000000000000000C04001A09182088800007E -:10DE600001890182A1C0900000880110A01100006A -:10DE700000000000000000000000000000000000A2 -:10DE800000000000000000000000010000C101C10E -:10DE900000000140010000C004000000000800C0B4 -:10DEA00000000000000000C000000189000101C165 -:10DEB00000000090000000C000010190000101C1BD -:10DEC0000000000000000000000000000000000052 -:10DED0000000000000000000808221898382800011 -:10DEE00000001103058311848000008405831182E2 -:10DEF0000000000000000000000000000000000022 -:10DF0000000000000000000000000000100041219F -:10DF100008830000030010000380800000000080E0 -:10DF20000080000000000000008000054002200585 -:10DF3000118200000000000000800002050341057E -:10DF400011A0000000000000000000000000000020 -:10DF50000000000000000000000011800891038014 -:10DF6000110980859111858084048080840003805C -:10DF7000840000000000000000000000000000001D -:10DF8000000000000000000000000000408510A01C -:10DF900005001000A0212180400008008000000042 -:10DFA00000000000800000000000000003000211DB -:10DFB000030002408000000000000080850203058D -:10DFC000200003030000000000000000000000002B -:10DFD00000000000000000000000000004C0A1A13B -:10DFE00005820000C0C011014184100008C0A004D7 -:10DFF0000090100000000000000000000000000081 -:10E00000000000000000000000000000000001A06F -:10E01000010201000100C001000400004100C00035 -:10E02000400000000000C0000000900000000090D0 -:10E03000010101880100C000900000000088C08339 -:10E04000900001000001000000000000000000003E -:10E05000000000000000000000000000000060065A -:10E0600000E007004200600000E00000840060065D -:10E0700000E0070084000000000000000000000035 -:10E080000000000000000000000000000000000090 -:10E09000000000E0000000000000000000000000A0 -:10E0A0000000000000000000000000000000000070 -:10E0B000500000E000000000000000000000000030 -:10E0C000500000E000000000000000000000000020 -:10E0D0000000000000000000000000000000000040 -:10E0E00000000F0000003CBCEA801122000A0AA0D8 -:10E0F00055007D28000000FF000000000000000027 -:10E10000000000000000000000000000000000000F -:10E11000000000000000FFFFFF00FFFFC3C3FFFF80 -:10E120000F0FFFFFFF00FFFFFF00FFFF0F0FFFFFBD -:10E13000000000000000FFFF0F0FFFFFFF00FFFFC8 -:10E140000F0FFFFFFF00FFFF0F0F00000000000098 -:10E1500000000000000000000000000000000000BF -:10E1600000000000000000003C3CEA801122AAAF41 -:10E17000055055007D280F0F0F0F00000000000014 -:10E18000000000000000000000000000000000008F -:10E190000000000000000000FFFFFF00FFFFC3C3FE -:10E1A000FFFF0F0FFFFFFF00FFFFFF00FFFF0F0F3D -:10E1B000FFFFFFFF00000000FFFF0F0FFFFFFF004A -:10E1C000FFFF0F0FFFFFFF00FFFF0F0F000000001A -:10E1D000000000000000000000000000000000003F -:10E1E0000000000004040404EB0014004488AB02A7 -:10E1F000CC0003CF3800380050550000000000006C -:10E20000000000000000000000000000000000000E -:10E21000000000000000F0F0F0F0AAAAFFFF00FFED -:10E22000FFFFAAAAFFFF0000FFFFC3C3FFFFC3C396 -:10E23000FFFF3C3C0000C3C3C3C30000FFFFC3C3D8 -:10E24000FFFFF0F0FFFFC3C3FFFFF0F0FFFF000090 -:10E2500000000000000000000000000000000000BE -:10E2600000000000000000000000FF0000004488E3 -:10E27000AB0200CC0303FBFFFBFFFAFFFFFF000034 -:10E28000000000000000000000000000000000008E -:10E290000000000000000000F0F0F0F0AAAAFFFF6C -:10E2A00000FFFFFFAAAAFFFFFFFFFFFFC3C3FFFF9F -:10E2B000C3C3FFFF3C3C0000C3C3C3C3FFFFFFFF5A -:10E2C000C3C3FFFFF0F0FFFFC3C3FFFFF0F0FFFF8A -:10E2D000000000000000000000000000000000003E -:10E2E00000000000000000008061002080050000A8 -:10E2F00060E3000080018A000061002280050001C7 -:10E30000000000000000000000000000000000000D -:10E3100000000000000000000000006180070029EC -:10E32000920240E38006002D92024082800000208D -:10E3300092024082800000208A02006180008021D9 -:10E340009202408280000020920240E380008021FF -:10E350009202000000000000000000000000000029 -:10E36000000000000000000000001105050500800D -:10E370000080FB04FB0400F0000FA3AAA3AA00F096 -:10E38000005000000000000000000000000000003D -:10E39000000000000000000000000000301000003D -:10E3A000AAAAAAFF00000C00000000000000000064 -:10E3B0000000000000000000000000007F5F575FC9 -:10E3C000AAAAAAAA00000000000000007F7D757DB7 -:10E3D0003CFFBCBF00000000000000000000000087 -:10E3E0000000000000000000000000000505050519 -:10E3F000008000800000000000F0000FAFAAAFAA6C -:10E40000FFFFFF5F000000000000000000000000B0 -:10E4100000000000000000000000000000003010BC -:10E420000000000000FF00000000000000000000ED -:10E4300000000000000000000000000000002A0AA8 -:10E44000020A00FF303F00000000000000002A2800 -:10E45000202800C3808300000000000000000000AE -:10E46000000000000000000000000000000020008C -:10E470001000003C2814FB0400000000AA550CCF3B -:10E480000CCFFFF000F000000000000000000000D2 -:10E49000000000000000000000000000000000007C -:10E4A00000000000FFFF000000000000000000006E -:10E4B000000000000000000000000000000000005C -:10E4C000DFFF5D55AAFFBABF00000000000000009A -:10E4D00055555555AAAAAAAA000000000000000040 -:10E4E000000000000000000000000000000000002C -:10E4F00030000000003C003CFF000000000000FF76 -:10E5000000C300C3FF000000000000000000000086 -:10E5100000000000000000000000000000000000FB -:10E52000000000010000000000000000008000006A -:10E5300000000000000000000000000000000000DB -:10E5400000008AAA08000055101500000000000015 -:10E550000000FCFF0C003C3C3CF000000000000010 -:10E5600000000000000000000000000000000000AB -:10E57000000000000000000000000000000000009B -:10E58000000000000000000000000000000000008B -:10E59000000000000000000000000000000000007B -:10E5A000000000000000000000000000000000006B -:10E5B000000000000000000000000000000000005B -:10E5C000000000000000000000000000000000004B -:10E5D00000000000000000000000000000004000FB -:10E5E00020008800410308022005210510000000DA -:10E5F00010004000100010002000208010000000DB -:10E600002000000000000200200020004000000068 -:10E610000000000000081000000000030003880054 -:10E6200005800400008000800000200020032000FE -:10E630000000000000000000000088004000000012 -:10E6400000004000000000004000200020002000EA -:10E6500000000000000040004000200020002020BA -:10E660001000100020408800C08500020800400013 -:10E670000000000000204000402090000004000046 -:10E680000000000020200000C00000020020000068 -:10E69000402000402020002040904000002000004A -:10E6A000100084200000000200040000800200002E -:10E6B0004040004000000900002000000000100061 -:10E6C000000000000000000000000000000000004A -:10E6D00000000000000000028002900240020000E2 -:10E6E0000200020000100040020083C0400020032E -:10E6F00000000000004000400110011020102085A3 -:10E700000200000000000041000002800010000034 -:10E7100002008400000500000020002000200020EE -:10E7200000000000082082200020200003802080BC -:10E73000000000008200000000100000000008A09F -:10E7400000A0000000000000000800050005008097 -:10E7500000000000000000008200080008400000E7 -:10E76000A040000800080000008400004010800065 -:10E770008000000000000088008820412001800106 -:10E78000C110008441880000004000000040008467 -:10E7900000C000000000000000A00085008500050A -:10E7A00020850000000002012000030180C02040FD -:10E7B0008004000000000000000000000084000051 -:10E7C00000210221008200000082000000820882F5 -:10E7D000100202820084008402840284000000008F -:10E7E0000200008200000000000300080000000892 -:10E7F000010000000000000000000008850801047E -:10E8000000040004000008000005000000090040AA -:10E810000040000400410010000000000000000063 -:10E820000005000000000009004004200000000472 -:10E8300020042000000400000011820001040003F5 -:10E840000005A0A10108000000000121010002094B -:10E850000200008800000000000000080002000222 -:10E86000000220020000000000000000000009007B -:10E870000000080000002100000008000000200047 -:10E880002001000100010000000000000000000065 -:10E890000000100010010000001000000000100037 -:10E8A000400008000000000000000000040909000A -:10E8B0000001888980080001000000000020080095 -:10E8C0000000000000200400080000000200020018 -:10E8D0008000A00000402000000020000000200078 -:10E8E00000000088000000000000000000000000A0 -:10E8F000000082000009820000000000A00000006B -:10E900000000000000080004000000008200000079 -:10E910002000080800800000042000048200000499 -:10E9200000008200200000000000001141200420AF -:10E9300005200005C003080500210008000800119B -:10E9400000080000000000800080000000000000BF -:10E950000000000000000000000300000021000093 -:10E960000010000010000000000000000000000087 -:10E970000000001000000900000800000000210055 -:10E980000000000000000004004000000000000043 -:10E990000000800000000004000005A000880000C6 -:10E9A0000090000000000000000000000008C0050A -:10E9B000830984054108210800000008410800007F -:10E9C00000A0200800000000002000200008000037 -:10E9D000000000A000000000000000000000000097 -:10E9E0000000000000000000000000000000000027 -:10E9F0000000000000000010000000000003000004 -:10EA00000020080200000800002000049080840319 -:10EA1000828000110008000020000000002100009A -:10EA20008200000000200405A0080008000000008B -:10EA30000400828400200080A00040410000008388 -:10EA40008211A02100040000000000000108000065 -:10EA50000000000090080008000000020100000211 -:10EA60000002000200001000100000000000000082 -:10EA70000000000000000000000000000000000096 -:10EA80000000000000010084030000850001002058 -:10EA900000000020000000000000800000000000D6 -:10EAA0000000000000000001A000000000000000C5 -:10EAB00000008000000200011004030884000090A0 -:10EAC00000404000000021000000000000000400A1 -:10EAD00000000800080000C0210021001188028801 -:10EAE00020000500000000002000050000000000DC -:10EAF00000000000000000000800008090000000FE -:10EB00000005000000000005000400080000008867 -:10EB1000000200008802000001112080000820414E -:10EB20008421900982004011000300200020002071 -:10EB3000000000022120008501000080A080100458 -:10EB4000218000038208A008008800000000000067 -:10EB500000000200020300000000000000000000AE -:10EB600000000000000000000000100010008800FD -:10EB700088000010000000000010000000201108B4 -:10EB8000030000000000210000C0000100000000A0 -:10EB9000002020000000030000002000A00400006E -:10EBA000910400A0110003000900000820012101C8 -:10EBB00000010000009004050320400209400310FA -:10EBC0000482A0020004410803080302000041007F -:10EBD0000000000080008000000000000000000035 -:10EBE00000901100040000200020000020C000045C -:10EBF0004004200000000000000000000800110098 -:10EC000001000240000000000000000091008802A6 -:10EC100000A0C01010080004000004A000010000C3 -:10EC200020000000109000020090908840880004AE -:10EC3000001020200000C111A0A1C084828908100A -:10EC400008209182C08800000000880000000200B7 -:10EC500000000000900000C000000000000000C0A4 -:10EC600010000000000000C000000000000000C014 -:10EC70000001008800010000000000000000892160 -:10EC8000A11040410002000000000000000004004C -:10EC90000000038000000080000000000000001160 -:10ECA00009090011000800000000000000008500B4 -:10ECB000008000000000000088C082840089800479 -:10ECC00082008580028080000000050000000000B6 -:10ECD00080000000000080000080000000000000B4 -:10ECE000008200020003001100800000000000000C -:10ECF0000080000800000008000000000000000084 -:10ED0000100000A1808080030000000000000000CF -:10ED10000011000000C1800080000003000000001E -:10ED2000098041000511C0088000808380000080B8 -:10ED300000008005800800800000108084000041F1 -:10ED4000A1A100048208884091000000000080001A -:10ED50000000000000000000800000000000000033 -:10ED6000800011002100080088030000000000005E -:10ED70008000000000000000800000000000000093 -:10ED80000000010020A08210080100000000000027 -:10ED900000002000100002A082C008000201040050 -:10EDA000A084000290000101C108080008C00820EA -:10EDB00002C0C00020008411049000000140A100A6 -:10EDC00000009191020109094110080800000000AB -:10EDD000A0000000200020000000900000000000C3 -:10EDE0000000C000000201000100C101000000009D -:10EDF0000000C000000000000000C0000000000093 -:10EE00000000000000100003A00320A0000000008C -:10EE10000000000010029002100203A09000000207 -:10EE2000900008A0000001010000010189100010FD -:10EE3000C010041008400004908202040001400148 -:10EE4000014191080388C1108409A0400208000014 -:10EE5000004140050040002000200090009000107C -:10EE60000000000010C000100000000010C00010E2 -:10EE70000000000010C000100100000000C00000F1 -:10EE800000000000000000000203022110910000B9 -:10EE90000009000200008000000080002080800047 -:10EEA00000008000808000090203030840114180B7 -:10EEB00000808000898080800080808080800001C8 -:10EEC000800403A088048200908000820091049056 -:10EED0000020009000900000000000000080000072 -:10EEE00000000000000000800000110002001080FF -:10EEF0000000000000000080000010000000008002 -:10EF00000000000000000000208221804180890074 -:10EF10000000000000000000004000210000800010 -:10EF200000008080000000000900091105000309AD -:10EF30000000808000800000801080100000000031 -:10EF400000012100080020001104000280820080DE -:10EF5000800300000000000000000040008000006E -:10EF600000000000000000000000A10003100300EA -:10EF700011088000000000000000A1000000000057 -:10EF80000900000000000000000010A003A00240E3 -:10EF9000A00000000000000000000000001040027F -:10EFA00002000000A040100004000020000100004A -:10EFB00001002000048220104000900120102088D1 -:10EFC000820000010100010001080005109084107A -:10EFD000020810000000000000A000000000000473 -:10EFE000009000000000001010000000C188011017 -:10EFF00011000001C000001010000000C10000104E -:10F00000100000000000000000000000002100E0EF -:10F01000070000000000000000000000500A00E0AF -:10F0200007000000000A000007000000600000E088 -:10F030000000000000000000000048420006000040 -:10F0400007000000000000060000070088006000C4 -:10F0500000E00700421200000000000000000081F4 -:10F060000000070000000000000000000000000099 -:10F070000000000000000000000000000000000090 -:10F0800000000000000000000000000000003C3C08 -:10F090003C3C0000100000000000000000000E0ECC -:10F0A0000E0E000000003030303060606F6F0000E6 -:10F0B00000000000000000000000221100007F1985 -:10F0C000761066FC660C00000000000006009690BA -:10F0D00000000000000000000000000000000F0021 -:10F0E0000000000083F083000F0F0F0FC3C3FFFF6A -:10F0F0000F0FFFFFC3C3FFFF0F0FFFFFC3C3FFFFD0 -:10F100000F0FFFFFC3C3FFFF00000000000000005F -:10F110007C3C3C3C000000000000000000000000BF -:10F120000E0E0E0EFFFB000000FF00FF00000F0F91 -:10F13000000000000000000000000001000022119B -:10F14000FF996600663C663C0000000000006660B7 -:10F15000F6F00000000000000000000000000000C9 -:10F160000F0000000000C300C3000F0F0F0FC3C348 -:10F17000FFFF0F0FFFFFC3C3FFFF0F0FFFFFC3C34F -:10F18000FFFF0F0FFFFFC3C3FFFF000000000000E1 -:10F19000000000000000000000000000000000006F -:10F1A000000000000000000000000000000000005F -:10F1B000000000000000000000000000000000004F -:10F1C000000000000000000000000000000000003F -:10F1D00000000000021020000088108400000000E1 -:10F1E000000000000000000000000000000000001F -:10F1F000000000000000000000000000000000000F -:10F2000000000000000000000000000000000000FE -:10F2100000000000424242420000000000000000E6 -:10F2200000000000010F010F00002424003C001822 -:10F23000999999F3000000000000F0F00108020421 -:10F240000500000560706F7F66F76EFF00004640A6 -:10F250004F49FFFFF0F00000000000000000000038 -:10F26000000000FF00FF000000000F0FC1C1FFFF02 -:10F270009999FFFF9999FFFF9999FFFF9999FFFFCE -:10F280009999FFFF9999FFFFF0F000006666000072 -:10F29000000000000000424242420000006F0000F7 -:10F2A000000000000000000F000F00002024FFFFFE -:10F2B000FFDB999999F3000000000000F0F0801046 -:10F2C0004020A00000A060406F4F0091089900000E -:10F2D000424242420000F0F0000000000000000046 -:10F2E0000000000000000000000000000000C1C19C -:10F2F000FFFF9999FFFF9999FFFF9999FFFF99994E -:10F30000FFFF9999FFFF9999FFFFF0F000006666F3 -:10F31000000000000000000000610027000900005C -:10F3200000610006000D00000061002F850D00A0A7 -:10F3300000000020000000000061000080011206B3 -:10F340000000000000000800000000200000000095 -:10F35000000000610026000D000000610007801D14 -:10F36000000100610006001D0000000000200000F8 -:10F370000000400280000020920240E38006002D41 -:10F380009202008200000000920000E30006000DDF -:10F390008A000000000000000000C0C0C000F0F0C3 -:10F3A000F0FF0000000000F000F00000000000008E -:10F3B0000000000000000000000055550F3C28E848 -:10F3C000EBE800000000000000000000000000006A -:10F3D00000000000D7D05550F0F0F0F00000000021 -:10F3E0000A0A0A0A00000000C0C0C0C000000000F5 -:10F3F000000000000000000000000000000000000D -:10F40000000000000000000000000000FFFFC3C378 -:10F4100000000000000000000000000000000000EC -:10F42000000000FF0000000000F000F000000000FD -:10F4300000000000000000000000000055553C3CAA -:10F440002828EBEB00000000000000000000000096 -:10F45000000000000000D7D75555FFF7FFF7000068 -:10F4600000000000FF0000000000AA00AA00000049 -:10F47000000000000000000000000000000000F29A -:10F4800000F0000000000000000000000000FFFF8E -:10F49000C3C30000000000000000000000000000E6 -:10F4A0004000C3C3C3C30000000000000000000010 -:10F4B0000000000000000000000000000000DFFF6E -:10F4C0001F0FFC7CFCFE000000000000000000009C -:10F4D0000000000000000000009600BE0E0E0404B4 -:10F4E000000000000A5F0A0A00000000000000009F -:10F4F000000000000000000000000000000000000C -:10F5000000000000000000000000000000000000FB -:10F5100000820082000000000000000000000000E7 -:10F5200000000000000000000000000000000000DB -:10F5300000000000000000000000000000000000CB -:10F54000D0F01000C040C0C2000000000000000069 -:10F5500000000000000000000000049604BE0E0E33 -:10F56000040400000000005500000000000000003E -:10F57000000000000000000000000000000000008B -:10F5800000000000008040000000000000000000BB -:10F5900000000082008200000000000004800000E3 -:10F5A00000002000000000000000000000004000FB -:10F5B000400000000000000000000000000000000B -:10F5C000000020000000000000000000000000001B -:10F5D0000000000000000000000000030010018097 -:10F5E0000080000920050005000002000003000360 -:10F5F000010000000000000000000400000088007E -:10F6000000000000200000000000200000000000BA -:10F61000000000000000000000002000000080202A -:10F62000000000000000000020000000200020007A -:10F63000800220000900000020002000404000005F -:10F6400000000000000000000000100000000000AA -:10F6500020002100000000000000000000000088E1 -:10F6600020040004108400000000008400901000BA -:10F670000000400200000000400000000000000008 -:10F6800000004000100040000000000000000000EA -:10F690000000000000000000000000001000021048 -:10F6A00002800000020908000004000002100208A5 -:10F6B00002008402031008000200000000000200A3 -:10F6C00002000000000000000200020000000080B4 -:10F6D00000200020000000400000000000000000AA -:10F6E000000008400080000000000008000000004A -:10F6F0000000004000400040000000400005000005 -:10F700000000000000000000000000000200008077 -:10F710000000000000800000008002890009020053 -:10F7200000000020000800080000008500000084A0 -:10F730000010000800092008090000000000000077 -:10F740000000000000080084000000080000000025 -:10F7500000200085000900080088008800080200D9 -:10F760000000008200910004088400880382008465 -:10F7700000000000000100890089000004000284EC -:10F7800002000000000002000000000000840800E9 -:10F7900002400000008200400000004000400000E5 -:10F7A0000400000000000005001000000008000038 -:10F7B00088000000100200410080000801080000DD -:10F7C00002050000000000000000C000012101004F -:10F7D000010000210005000000A0004000020040E0 -:10F7E0000041000000400004001100000040000043 -:10F7F00000400040004090028241002100080008C3 -:10F8000000050041000000000000000800800180A9 -:10F8100000850080008001800080008000800189D8 -:10F8200000800080000008A0000008010000000027 -:10F83000000000002102000000000304000004009A -:10F84000000000000010410241C00008090004004F -:10F850000408040000000000000041210001000035 -:10F8600000850000000000830011000000844101B9 -:10F870000000000100C10385410900000084000070 -:10F880000000000000000000000000000000004038 -:10F890000240004000400040024000400040004064 -:10F8A0000240004000400000000000001000C000C6 -:10F8B0009000000000000000000001000000004077 -:10F8C00082000040004000200020002000000000D6 -:10F8D0000000000004000004000490040000000484 -:10F8E00000400004008400004091002120898880AD -:10F8F000000900800009008900008808000200005B -:10F9000000000000000000000000000000000000F7 -:10F91000A000A0000000A000A000A00000000000C7 -:10F9200000000000004100090000009000000000FD -:10F93000000000000000000005000000400000C0C2 -:10F940000090000000000000218541014101008875 -:10F95000000000000000000000010201000108009A -:10F96000400500840001214100008002419089404F -:10F97000004000C0404009C0000200840090009197 -:10F9800000900000000000000002000000000000E5 -:10F990000000000000000000000000000000000067 -:10F9A0000000000009000000000000000800000046 -:10F9B0000000002100000000000000000000000026 -:10F9C0000000008500000400040004210840040039 -:10F9D00000008921A0000000010000802100010337 -:10F9E000000001008485408000A100002080840583 -:10F9F00020030000C000C0118402000800000000C5 -:10FA000000080000000000000000001000000000DE -:10FA100000000000008000800080008000000000E6 -:10FA200000000000000000000000000000000000D6 -:10FA300000000000000000000000080000000000BE -:10FA400000000000112000008008A10080000000DC -:10FA5000800000000400000800004000002084A096 -:10FA60000400200020000004000400040000000244 -:10FA70000010C004211011C0100800890200050008 -:10FA80002100000010A0000000000500000100009F -:10FA9000000000000008004000400040004000005E -:10FAA000000000000000401000000004008400007E -:10FAB000000000000800402100090040A0000011E3 -:10FAC00000000000820004000000000000000008A8 -:10FAD000080000000485000800210021202100000A -:10FAE000000000002080002100C0002182410000B1 -:10FAF0000021859088840000C0000202A00040031D -:10FB00000009A10200410011004100000005004170 -:10FB100002000200000802000200020000000000D3 -:10FB200000000000000800000000000000000000CD -:10FB30000000000000000000800000000000000045 -:10FB400000000082000405008084000040000000E6 -:10FB500000000008000080200000000000000000FD -:10FB60001100100011820004000000050082000056 -:10FB7000000000882004030510900000098840C0A0 -:10FB8000118403004000100000000000000000008D -:10FB90000000000000000000000000000000000065 -:10FBA00000000000000000000000008400000000D1 -:10FBB00011000004904000020088000000000000D6 -:10FBC00000000000000000000000000000000088AD -:10FBD0000008000000100000000891A09108C082F9 -:10FBE000100411A090C000820202A0C00405009081 -:10FBF0008240000004C00220C0C11010020221088F -:10FC000004908484402021041004020200000000BB -:10FC100000000000000000000000000000C0000024 -:10FC2000000000C000C0000000C0C0000000004094 -:10FC300000C00000000080800000000000090002F9 -:10FC40000000000200002000000000000000000092 -:10FC50000000008000000000000000801000910003 -:10FC600000800000910080000289808900800008E7 -:10FC70001000808400002088200900088080918086 -:10FC800090008500808080000290008880832000A2 -:10FC900000000000000000000000000000000080E4 -:10FCA0000000000000000080000000000000400094 -:10FCB000000000000000800080048084800000803C -:10FCC000000000000005100000001000050000000A -:10FCD0000000000080000000000000008000000024 -:10FCE0000040008080808900002100118900090007 -:10FCF0008000000080000000900009A011800283B5 -:10FD00008000C109900220808000210220880384A5 -:10FD100000008000800000000000000000000000E3 -:10FD200000000000000080000000000080000000D3 -:10FD30000000002180000000040002C0088382004F -:10FD400000020000000000000100000000000000B0 -:10FD50000000000000000800000000000000080093 -:10FD600090000401A040049040008400A0C19000D5 -:10FD7000A00082000404C020000011902010054063 -:10FD800020A1020040C005102082048283C1100817 -:10FD900021A08200040040000000000000000000DC -:10FDA0000000000000000000C0000000000084000F -:10FDB00000840000004084000040080000000000B3 -:10FDC0001000000000000000000000000001000121 -:10FDD00000010000001000000008000000100000FA -:10FDE0000008900300050091110340A10088849051 -:10FDF0000290A0410020902002C000004008002096 -:10FE000091C004C0200200900291020282100004FE -:10FE1000400402400000000000000000000000005C -:10FE20000000000000000000008401C0000000008D -:10FE3000000000C0000000A040840000800000001E -:10FE4000000004000000000000000000002000048A -:10FE500000210011000000800000008000000080F0 -:10FE600000000080009100030091C1A08008000004 -:10FE7000008080890088008000008084000080006D -:10FE80002104201100A0090200058010008011004B -:10FE900005858583042000000000000000000000AC -:10FEA00000000000000000000000000004800000CE -:10FEB0000000000000804000000080000000000002 -:10FEC0008000008000002100200040004000000071 -:10FED00000000000004000400002008080000000A0 -:10FEE0000009800080008040000080808000910038 -:10FEF0000000808089000004004008808404000025 -:10FF0000A1C011090340801000808005008000031B -:10FF10002021C080858005200000000000800000B6 -:10FF20000000000000000000000000000080000051 -:10FF30008000000000000000002000000000000021 -:10FF4000100010C0028488000100010001000100BF -:10FF50000000000000000000000088000010080001 -:10FF600000000002080008009000040402C0100015 -:10FF70009000A0C0020204009000009105821000D1 -:10FF80000000C1A18520C1C1080110820490880829 -:10FF9000C0019189040403C004010000009000081E -:10FFA000000000000000000000000000A00000842D -:10FFB0000000C0000000A0840000000100A00000BC -:10FFC000C0000042000007000000500000E00000F8 -:10FFD0000000500000E00000000000810000070069 -:10FFE0000000000A00000700000000810000070078 -:10FFF0000041500A00E007000000500000E000004F -:02000004002BCF -:1000000000000000500000E00000000000000000C0 -:1000100000000000000000000000000A00000000D6 -:1000200000000000000000000000000000000000D0 -:1000300000000000000000000000000000000000C0 -:1000400000000000303030FF000000000000000021 -:10005000000000000000000000000000003C003C28 -:100060000000F0F0303030300000F0F030B2F3F348 -:100070003C3C3C3CAABAFFBF1051BAFBBFBF1515B0 -:10008000FFFFFF3C0000FFFFF3FFFFFFFFF355FF03 -:10009000AAFFAFAFFAFAF3F3FCFCF3FFF3FF0000A3 -:1000A0000000000000000000000000000000FF0051 -:1000B000FF00FFFFFF00FFFF0F0FFFFF00003C3CB2 -:1000C0003C3C0FF00FF0BABABAFF0000000000008D -:1000D0000000000000000000000000000000003CE4 -:1000E000003C0000F0F0303030300000F0F03030F4 -:1000F000F371005FA0FF001055150055AAFFBFBFA8 -:100100001515FFFFAFAF0000FFFF535FFFFF55F373 -:100110003F3F3F3FC3FFC3FF55FF55FFF355F3AAD2 -:1001200000000000000000000000000000000000CF -:10013000FF00FF00FFFFFF00FFFF0F0FFFFFFFFFAC -:10014000C3C3C3C30FF00FF05D5DFF5DC3C3C3C383 -:10015000000000000000000000000000000000009F -:100160000C0C0C0CFFFF00003C003C00555500003F -:100170007F2A5702FFEFF0E0553F550F1EBE1E14B9 -:10018000AFFFFFFFF53CFFFF0000BFB0FFFF5F5F69 -:10019000AFAFBFBFBF83FFF53CF5FFAFFCAC5FFF68 -:1001A0005CFC00000000E8C0E8C0000000000000A7 -:1001B0000000C3C3FFFF0000FFFFF0F0FFFFFF00E0 -:1001C000FF000FF00FF055AA55AA0C0CFF0CC3C38B -:1001D000C3C100000000000000000000000000009B -:1001E00000000C0C0C0C000000003C003C005555BD -:1001F00000005F0A5F0A1F0F10005503550FBEBEB7 -:100200001414AFC3FFFFF5FFFFFF0000BFBFFFFFE8 -:100210003CFF3CFFBFBF83BF3CF5FFF5FCACFFAF2D -:100220005CFC5FFF000000002800280000000000C8 -:1002300000000000C3C3FFFFFFFFFFFFF0F0FFFF60 -:1002400000FF00FF0FF00FF055AA55AA00000E2086 -:100250000000000000610004800D00000061000645 -:1002600080090000000000280000000000000028B5 -:100270000000000000610026000D00000061002168 -:10028000800100004063800180219202000040E371 -:1002900080048025900240618006002D100240619C -:1002A0008006002D08020000000000000000000091 -:1002B0000000000000004002800000209202408206 -:1002C000800000209002400080000020100200000A -:1002D000000000000000053F050F000000000000C6 -:1002E00000003CFCFFFC00000000000000000000DB -:1002F00000000000000000000000000000003C3C86 -:10030000000000003C3C0C0C0C0C00003C3C0000CD -:100310000055F05550005000000000001E0A1E0A53 -:10032000040000000000FF000000000000000000CA -:1003300000000000000000000000000000000000BD -:1003400000000000000000000000000000000000AD -:100350000000000000000000053D05050000000051 -:100360000000000000C0C3C000000000000000004A -:10037000000000000000000000000000010000007C -:100380003C3C000000003C3C0C0C0C0C00003C3CD5 -:1003900000000000FF005000FAAA00000000140056 -:1003A0001400000000000A0A0A0A00000000000011 -:1003B000000000000000000000000000000000003D -:1003C000000000000000000000000000000000002D -:1003D000000000000000000000003C0000000000E1 -:1003E00000000000000014000000000000000000F9 -:1003F00000000000000000000000000000000000FD -:1004000000000C0C0C0C00003C3C3C003C0028287C -:10041000282800000000F000000028000000000074 -:100420000000555503030303FFAF00000000000068 -:1004300000000000000000000000000000000000BC -:1004400000000000000000000000000000000000AC -:100450000000000000000000000000003C00000060 -:100460000000000000000000140000000000000078 -:10047000000000000000000000000000000000007C -:10048000000000000C0C0C0C00003C3C3C003C004C -:100490002828282800005000F00000FF285F0000F6 -:1004A0000000F000F000AA00AA00FFFF000000001A -:1004B000000000000000000000000000000000003C -:1004C000000000000000000000000000000000002C -:1004D0000000000000000000000000000000030019 -:1004E000090082800290000000000000000000006F -:1004F0000080080088800100010000800180200049 -:1005000020000000200000000000000000000100AA -:100510000240012020000003000000000000000055 -:100520002000200000050000000000200000000066 -:10053000000040004000200000000000000000001B -:1005400000000200000004000000000000000000A5 -:1005500002002100200004002000000000004040B4 -:1005600084208420002000200020002000000000C3 -:1005700000002104C002400408000800001004101C -:10058000400010001000000000000000000000000B -:1005900008048005040100000000400240084004F7 -:1005A0000000000000000000040000000001040042 -:1005B0000000000004000000000000000000000037 -:1005C0000000200020024000000010000000000099 -:1005D0000002000008401000000002050000084072 -:1005E00002100400000804000409000002000000DA -:1005F0000000400004802180218003000140014070 -:1006000004400000004008000000004000410000DD -:1006100000410080010000200040000000000000B8 -:1006200000000002010000000000000001000020A6 -:100630000041080000000000000000000000000071 -:10064000000000000000000000000010000000009A -:100650000000020000000400001000100004000070 -:100660000008000880100010808480080000000846 -:100670000084000880000004A004A0040484040096 -:1006800004108084001000108010001000C00010C2 -:1006900000000010001008A00089008800000088F9 -:1006A0000008028800014088000803C000C040081C -:1006B00000C000C000000000040000004000000076 -:1006C00000080000020000000010000000C0000848 -:1006D00002000000030000000000002002000008EB -:1006E00000000000000000400000000801000008B9 -:1006F00000000000000000000000001000000000EA -:100700000000000500000008000300080808004180 -:1007100001080100012101000300058001400000E3 -:10072000000000410100201100008400000540107D -:1007300000A004A000000041A0210000000800006B -:1007400000000000000000000003000000000000A6 -:100750000000000000000000000000000100010097 -:100760000000000000000000058241000000048439 -:100770000000000000000000000800080000000069 -:1007800000000000000000000082000800000000DF -:10079000000020002008200020008200842020008B -:1007A000000021000002400010C04182030021002F -:1007B000050141218021050000000010001000000B -:1007C0000000000000000000000000000000000029 -:1007D0000000000000000000000000000088080089 -:1007E00008000000080000000800000000200000D1 -:1007F00008000000000000000000000008040000E5 -:1008000008000000020002000200040004000200D0 -:100810000400000021002000202021000200090027 -:100820000000000090000000000000000004000430 -:1008300000040004000400040000000400000000A4 -:1008400000000000000000000000000000000800A0 -:10085000C000000000000000000000000021002196 -:100860000021084100000000000000000008000115 -:100870002010800000000000000000000000C10106 -:1008800000008000000800000000000000000300DD -:10089000080808400200842080008001880083004E -:1008A00004000000000020000200000002A0004040 -:1008B000000000880000000400400084000400A044 -:1008C0000000000800000000000000000000000020 -:1008D0000000000000000000000000000000000018 -:1008E0000000000000009000000008000000000070 -:1008F00000000000000000000000A00082100000C6 -:100900002000000000000003000800080003900021 -:1009100000000808080800080400A004A041C00066 -:100920002100A000A0210000000220210000000002 -:1009300000002004000008100000048200000010E5 -:100940000000000000000000000000000000A00007 -:100950000000000000000000A000000008000003EC -:10096000000000000008000000A0000000000000DF -:10097000000000001000000000C000000000210086 -:1009800000008000000800080000000000000000D7 -:100990000000000000000800000080A0001100001E -:1009A0002100820200020002000000A0A10020003D -:1009B00020902100A10100002108410080200000BA -:1009C000000000000800000000000000000000001F -:1009D0000000000000000000000000000000800097 -:1009E000000000C0000000080000C000000000007F -:1009F00000000000000002000200000082008809E0 -:100A00000010080008000000000000030021001191 -:100A1000000000000200084008002003A0000500BC -:100A20000400C0002000040020000000200002009C -:100A30008800400000000809101000002004000495 -:100A40000004000400000000000508000000000091 -:100A5000004000000800000000000000000020002E -:100A6000000000000000000004000800000000007A -:100A700000000000000000008000000000000000F6 -:100A80000000000000000000020002000900000059 -:100A90000000000040000002400002008900000049 -:100AA00084008000030080408090800000009188D6 -:100AB00000A00000801000828008200202002000B8 -:100AC0000000020000200000000000000000000004 -:100AD0000000000000000000000000000000000016 -:100AE00000000000000000C000000008000000003E -:100AF00000000000000000000000000000200000D6 -:100B0000000000000000081108C000831088019058 -:100B10000490000000008800000000004000041164 -:100B200000911010C08504A10040020040010000A7 -:100B300090A1000300051002841110100004048825 -:100B400000400082002100A0000000000000000022 -:100B50000000000000000000000000000000000095 -:100B60000000000000000000080204C00004C08271 -:100B70000000000000000000000000000000000075 -:100B8000000000000000000080108510009000119F -:100B90001000808000000000000000000000000045 -:100BA000001104A00020804000911010800200106D -:100BB00000008011002000A080A0002080C1004023 -:100BC00000100008000500100010000000000000E8 -:100BD0000000000000000000000000000000000015 -:100BE0000000000000000000000091000000000074 -:100BF00080800000000000000000000080000080F5 -:100C0000008000000000000000000200C188021106 -:100C100004000000002100008080000000000000AF -:100C200000009100A000831003C18080000000003C -:100C300080080000000040C040000488800080025E -:100C40008021804100000041008000000000000081 -:100C50000000000000000000000000000000000094 -:100C60000000000000000000000000008000802163 -:100C70000004008000000000000000000000902040 -:100C800000080002000000000000000089C0080306 -:100C9000C1118908900000900000908200000000BF -:100CA00000000000409083000201A09104C00000F9 -:100CB0000000C0000000908285C0854085C0080209 -:100CC00008208289080900000001000400000000DB -:100CD0000000000000000000000000000000000014 -:100CE00000000000000000000000000000004000C4 -:100CF0000440C0888802000000000000000090004E -:100D000000004090002000000000000000001105DD -:100D100001090805031000900000204000000008B1 -:100D2000008400100002C02100048290C1A1404054 -:100D30000010901000C1000103100102C00904C09E -:100D4000C108900820408408A000000001000200B3 -:100D50000000000000000000000000000000000093 -:100D60000000000000000000000000000000000083 -:100D7000C01000044040041000000000000000000B -:100D800085000000808000000000000000000000DE -:100D9000C1020383C182110405000000008000002D -:100DA000008000000000000080200303C0C1C011CB -:100DB00000A00385C0820011000141911080C1A1F3 -:100DC00082004180888011800080000010000200B5 -:100DD0008000000000000000000000000000000093 -:100DE0000000000000000000000000000000000003 -:100DF00000008300008000800080000000000000F0 -:100E000000000040000000000000000000000000A2 -:100E1000000002080382020083000011000080002D -:100E20000000000000000000000041401011408060 -:100E3000404010002000020003000001880891805B -:100E40000500020021110204400010008000800013 -:100E50000000000000000000000000000000000092 -:100E60000000000000000000000000000000000082 -:100E700000000000000400A000800000000000004E -:100E80000000000000000000202000000000000022 -:100E9000000000000390881085021000000100008F -:100EA00090000000000000000000000000840085A9 -:100EB0000084010100000400200082000001030101 -:100EC0000590419041000400A1840384C10090007A -:100ED0000200840004000000000000000000000088 -:100EE0000000000000000000000000000000000002 -:100EF0000000000000008800020902080200000053 -:100F000000000000000000000000070000000000DA -:100F1000000000000000500000E007004800000052 -:100F20000000070000000000000000000000600654 -:100F300000E007008406600600E007006000000093 -:100F4000480000E000004842500000E0070048125E -:100F5000000A00000700420000000000000000003E -:100F60000000000000000000000000000000000081 -:100F70000000000000000000000000000700421216 -:100F8000000000000000000060606060FF000000E2 -:100F90000000000000000000000000000000000051 -:100FA000F0F0F0F03C003C00000000004B004B660D -:100FB0000000000036363F30C0CCC0CC03181B18F0 -:100FC00000000000000020041008000000000000E5 -:100FD00000006F6F6C600000000000000000000067 -:100FE0000000000000000000000000000000000001 -:100FF00000000000000000000000000000000000F1 -:101000000000000000000000000060606060FF0061 -:1010100000000000000000000000000000000000D0 -:101020000000000000003C003C00000000004B9964 -:101030004BFF000000003F303F30C0CCC0CC181840 -:1010400018180000000000014002800100000000AC -:1010500000000000636F60600000000000000000FE -:101060000000000000000000000000000000000080 -:101070000000000000000000000000000000000070 -:101080000000000000000000000000000000000060 -:10109000000000000000000000000000021020001E -:1010A0000088108400000000000000000000000024 -:1010B0000000000000000000000000000000000030 -:1010C000000000000000000000000000000002100E -:1010D00020000088108400000000000000000000D4 -:1010E0000000000000000000000000000000000000 -:1010F00000000000000000000000000000000210DE -:1011000020000088108400000000000000003C3C2B -:101110003C3C0F0F0F0F000000000000000000001B -:10112000000000000000000000FF00003C3C000048 -:101130000000000000000000FFFF3C3C3C3C0000C1 -:1011400000000000C3C300000082001400820014ED -:10115000000000000000000042424B0900000000B7 -:10116000000000000000000000000000000000007F -:10117000000000000000000000000000000000006F -:10118000000000000000000000000000000000005F -:10119000000000000000000000000000000000004F -:1011A0000000000000000000000000FF00003C3CC8 -:1011B000000000000000000004FD04FD0F0F0F669A -:1011C0000000FF000000C3C3000082001400820082 -:1011D00014000000000000000000424242420000F3 -:1011E00000000000000000000000000000000000FF -:1011F00000000000000000000000000000000000EF -:1012000000000000000000000000000000000000DE -:10121000000085000A00051000A00000000000008A -:101220000000006100048001000005000A000500C4 -:1012300000A000000000000000000061002080010C -:10124000000000610020800912060000006100001B -:10125000800D080000610004800D00000061002680 -:10126000000D000000000000000000000000000071 -:10127000000000000000000000000000000000006E -:10128000000000000000000000000000000000005E -:10129000000000000000000000000000000000004E -:1012A00000000000FF003535FC3CFCFF00000000A2 -:1012B00000000000000000000000000017D7171415 -:1012C0003C3C3C3C7F2F3F3FA03CF53C0000FFFFF7 -:1012D000FE04003C003CFF00FF0000000000000096 -:1012E00000000000000000000000000000000000FE -:1012F00000000000000000000000000000000000EE -:1013000000000000000000000000000000000000DD -:1013100000000000000000000000000000000000CD -:10132000000000000000FF003535C000C0C3000011 -:101330000000000000000000000000000000D7D7FF -:10134000141400A05FFF70203030003CFF3C000010 -:101350000000FE04003C003CEFEF0404000000002D -:10136000000000000000000000000000000000007D -:10137000000000000000000000000000000000006D -:10138000000000000000000000000000000000005D -:10139000000000000000000000000000000000004D -:1013A00000000000000000003C7F3C3FFC3CFCFFD4 -:1013B000000000000000000000000000000000002D -:1013C000CFCF4D0C1454BEFEFCFC5C0C00000000A2 -:1013D00000003C3C3C3C000000F082BE82BE0000AD -:1013E00000008094C1D50000000000000000000053 -:1013F00000000000000000000000000000000000ED -:1014000000000000000000000000000000000000DC -:1014100000000000000000000000000000000000CC -:10142000000000000000000000003C7D3C3CC000CB -:10143000C0C3000000000000000000000000000029 -:1014400000008ECF0C0C1404BEAEACFC0C0C0000E3 -:1014500000000000F5FF0500000000F0C0C0FCFC2B -:1014600000000000A8BCE9FD000000000000000032 -:10147000000000000000000000000000000000006C -:10148000000000000000000000000000000000005C -:1014900000000000000010000008A0000000000094 -:1014A00000002000200000001000000000000000EC -:1014B000000000000000850000000400040000009F -:1014C00000200000000084100000840000000000E4 -:1014D000000000000002000000000000000000808A -:1014E00001000280408000000000000000000000B9 -:1014F00000000010100000000000000000000000CC -:101500000400200000000000000000000000400077 -:10151000000000002000000040000000200000004B -:10152000002000000000402010000000000000002B -:101530000000000000000020020000000000000089 -:101540000000000000000000002000000500000076 -:101550000502000200020000000000000920200037 -:101560000010200000108002000000024100000076 -:101570004000000000010000000000000002000028 -:101580000000000000000000000000000000000259 -:101590000000000000020000000000000000080041 -:1015A000000000000000000000000000000000003B -:1015B000000000000000000000000000000000002B -:1015C000000000000000000000000000000000001B -:1015D0000000000000000000000000008200000089 -:1015E00000000200020000000400000000000000F3 -:1015F00000000000040000000000000000000000E7 -:1016000000000000000004080200000000000400C8 -:101610000000000002000200040000100008008822 -:1016200000080008000000080000000000000000A2 -:1016300000000000000000840000000800100010FE -:10164000008800100000028200000000000000007E -:1016500000000000031000000200000000880000ED -:10166000008800000082000803880288000000C093 -:1016700000000000000000000084000000000000E6 -:1016800000000000000000100084040000000000C2 -:101690000000000000000000000008C00041000041 -:1016A000001000000000000000000000000000002A -:1016B000000000000000000000000000000000002A -:1016C000000000000100A000000800080000000861 -:1016D00000001080000000000200000000008200F6 -:1016E0008200400041000080A080018000000400D2 -:1016F0000000820000000000000000000000000068 -:1017000000000000000000000010001000000000B9 -:10171000000000000000050000000005900003002C -:101720000800000040000000000000000000000071 -:1017300000000000000000000000050000A0008480 -:1017400000A000C000840200000021000000410051 -:1017500000002184054000000002800041000000DC -:10176000008808104010841000020010400200C0E1 -:101770000000000000840000000000A000A00000A5 -:101780000000000000000000000000000000000059 -:101790000000000000000000020000000000000047 -:1017A0000000000000000000080000000000000031 -:1017B0000000000000000000000000000000000029 -:1017C00000004000000002000000000002000900CC -:1017D00008009000410040000000000000008280EE -:1017E00000000000000004000000000000000000F5 -:1017F00000000000000000000000000000000000E9 -:1018000000000000000000000000000000000000D8 -:1018100000000000000000000000000000000000C8 -:1018200000000000000000000000000000000000B8 -:101830000000000000000000000000000088008898 -:101840000000000000000000800000000000800098 -:1018500002000800038402000000000000000000F5 -:1018600011400000409040848000080000004100CA -:101870000000000000C0000400C00088000000005C -:101880000000000000000000000000000000000058 -:101890000000080000000000000000000000000040 -:1018A0002000000000000000000000000000000018 -:1018B0000000000000000000000000000000000028 -:1018C0000000000000800000000000000000020096 -:1018D0000000000002000100000000000200000003 -:1018E000A0000000000000000000830001000000D4 -:1018F00000000010010000000000000000000000D7 -:1019000000000000000000000000000000000000D7 -:1019100000000000000000000000000000000000C7 -:1019200000000000000000000000000000000000B7 -:10193000000000000000008400000000000003C060 -:101940002008008420A011400000000008000000D2 -:1019500080080000000080000200000003008000FA -:1019600000000300000000002100008804000400C3 -:1019700000C000000008400000000800000008004F -:101980000000000000000000000000000000000057 -:101990000000000000000000000000000000000047 -:1019A00000000084008400A0000800000000000087 -:1019B00000000000000000000000000040000000E7 -:1019C00000410000000000000000200002080000AC -:1019D0000008000090000008000000004000000027 -:1019E0004000020488080000000020008800200059 -:1019F0004000000000100000000000110009000479 -:101A00000020000000000021000000000000000095 -:101A100000000000000000000000000000000000C6 -:101A200000000000000000000000000000000000B6 -:101A30000000000000000000000000000000400066 -:101A40000000200000402104200000000000800071 -:101A50000000001000000000020000000000400034 -:101A600000000000800000000000000000000000F6 -:101A70000000800008041190208820C000000000B1 -:101A8000000000000000000000000008000000004E -:101A90000000000000000000000000000000000046 -:101AA000000000000084009004002090000000006E -:101AB0000000000000000000000000000000000026 -:101AC00000000000000000000000000000C00084D2 -:101AD0000000000000C000040000000000C00084FE -:101AE0000000000000C00000000000C00000040072 -:101AF000000082000200080500054005C0C100008A -:101B000000000000000000000000000000000000D5 -:101B100000000000000000000000000000000000C5 -:101B200000000000000000000000000000000000B5 -:101B300000000000000000000000000000000000A5 -:101B40000000000000000000000000000000008015 -:101B50000000000000000080000000000000008085 -:101B600000000000000000800000000000000000F5 -:101B7000000009000000800089820908808500219A -:101B80000000000000000000000000000000000055 -:101B90000000000000000000000000000000000045 -:101BA0000000000000000000000000000000000035 -:101BB0000000000000000000000000000000000025 -:101BC0000000000000000000000000000000000015 -:101BD0000000000000008000000000000000800005 -:101BE00000000000000080000000000000008000F5 -:101BF00000000000800000000080858010008580CB -:101C0000A121000000000000000000000000000012 -:101C100000000000000000000000000000000000C4 -:101C200000000000000000000000000000000000B4 -:101C300000000000000000000000000000000000A4 -:101C40000000000000000000000000000000000094 -:101C50000000000000000000C0000000A000000024 -:101C6000C000000000000000C000000000000000F4 -:101C7000C0000000040082008800409010C00100F5 -:101C800008400941000000000000000000000000C2 -:101C90000000000000000000000000000000000044 -:101CA0000000000000000000000000000000000034 -:101CB0000000000000000000000000000000000024 -:101CC0000000000000000000000000000000000014 -:101CD0000000000000000000008400C000000000C0 -:101CE00000C000C000000000008400C00000000030 -:101CF000008401C000000088008900910041088232 -:101D000000820091A1A0000000000000000000007F -:101D100000000000000000000000000000000000C3 -:101D200000000000000000000000000000000000B3 -:101D300000000000000000000000000000000000A3 -:101D40000000000000000000000000000000000093 -:101D50000000000000000000000000000080000003 -:101D60000000000000800000000000000080000073 -:101D700000000000048000000000000400C00020FB -:101D8000800500040005C08900000000000000007C -:101D90000000000000000000000000000000000043 -:101DA0000000000000000000000000000000000033 -:101DB0000000000000000000000000000000000023 -:101DC0000000000000000000000000000000000013 -:101DD0000000000000000000000000000000000003 -:101DE000800000000000000080048000000000006F -:101DF000800480000080000000000000008000805F -:101E0000000008858000800002050000000000003E -:101E100000000000000000000000000000000000C2 -:101E200000000000000000000000000000000000B2 -:101E300000000000000000000000000000000000A2 -:101E40000000000000000000000000000000000092 -:101E5000000000000000000000008400000000A05E -:101E60000000C0000000A0000000C001200000A091 -:101E70000000C001200000840000000000000004F9 -:101E80000004000082A0880040C0C10000000000E3 -:101E90000000000000000000000000000000000042 -:101EA0000000000000000000000000000000000032 -:101EB0000000000000000000000000000000000022 -:101EC0000000000000000000000000000000000012 -:101ED0000000000000000000000000000000000002 -:101EE00000000000000000000000000000000000F2 -:101EF00000000000000000000000000000000006DC -:101F0000000007000000600000E000004200000048 -:101F100000000000000000000000000000000000C1 -:101F200000000000000000000000000000000000B1 -:101F300000000000000000000000000000000000A1 -:101F40000000000000000000000000000000000091 -:101F50000000000000000000000000000000FFFF83 -:101F60000000FFFFFF00FFFF0F0FFFFFFF00FFFF5D -:101F7000FF00FFFFFF00FFFFFF00FFFFFF0000006B -:101F800000000000F0FFF8FBFFDFEFCFBEBE14142F -:101F90000000000000000000000000000000000041 -:101FA0000000000000000000000000000000000031 -:101FB0000000000000000000000000000000000021 -:101FC0000000000000000000000000000000000011 -:101FD0000000000000000000000000000000000001 -:101FE000FFFF0000FFFFFF00FFFF0F0FFFFFFF00DD -:101FF000FFFFFF00FFFFFF00FFFFFF00FFFFFF00ED -:10200000000000000000000F080BFFDFEFCF0AAA5E -:102010000AAA00000000000000000000000000000C -:1020200000000000000000000000000000000000B0 -:1020300000000000000000000000000000000000A0 -:102040000000000000000000000000000000000090 -:102050000000000000000000000000000000000080 -:10206000000000FFFFFF0000FFFF00FFFFFFF0F098 -:10207000FFFF00FFFFFF0000FFFFC3C3FFFFFFFFE5 -:102080000000000000000000553F550F00D4000084 -:102090000000003C00000000000000000000000004 -:1020A0000000000000000000000000000000000030 -:1020B0000000000000000000000000000000000020 -:1020C0000000000000000000000000000000000010 -:1020D0000000000000000000000000000000000000 -:1020E0000000000000FFFFFFFFFFFFFF00FFFFFFFA -:1020F000F0F0FFFF00FFFFFFFFFFFFFFC3C3FFFF85 -:10210000000000000000000000005503550F000013 -:1021100000C30000000000000000000000000000FC -:1021200000000000000000000000000000000000AF -:10213000000000000000000000000000000000009F -:10214000000000000000000000000000000000008F -:10215000000000000000000000000000000000007F -:102160000000000000004002800000209202408237 -:102170008000002092024082800000209202408273 -:10218000800000208A02000000610026000D00008F -:1021900000610004800D000100000000000000004C -:1021A000000000000000000000000000000000002F -:1021B000000000000000000000000000000000001F -:1021C00000000000001000000000000000000000FF -:1021D00000000000000000000000000000000000FF -:1021E00000000000000000000000000000000000EF -:1021F00000000000000000000000000000000000DF -:1022000000000000000000000000000000000000CE -:102210000000FFFFBEBE000800000000000000003C -:1022200000000000000000000000000000000000AE -:10223000000000000000000000000000000000009E -:10224000000000000000000000000000000000008E -:10225000000000000000000000000000000000007E -:10226000000000000000000000000000000000006E -:10227000000000000000000000000000000000005E -:10228000000000000000000000000000000000004E -:10229000FFFFFFAFFFFF3C3C00000000000000001C -:1022A000000000000000000000000000000000002E -:1022B000000000000000000000000000000000001E -:1022C000000000000000000000000000000000000E -:1022D00000000000000000000000000000000000FE -:1022E00000000000000000000000000000000000EE -:1022F00000000000000000000000000000000000DE -:1023000000000000000000000000000000000000CD -:10231000000000000000C3C3C0C380A0AAAA000040 -:1023200000000000000000000000000000000000AD -:10233000000000000000000000000000000000009D -:10234000000000000000000000000000000000008D -:10235000000000000000000000000000000000007D -:10236000000000000000000000000000000000006D -:10237000000000000000000000000000000000005D -:10238000000000000000000000000000000000004D -:102390000000000000000000C3C3C0C3C0F0FFFF86 -:1023A000000000000000000000000000000000002D -:1023B000000000000000000000000000000000001D -:1023C000000000000000000000000000000000000D -:1023D00010000000000000000000000000000000ED -:1023E0000008000004800000010804000200020050 -:1023F00010000000000000000000000004000400C5 -:1024000000000000000000000000200000000000AC -:1024100000030000000000000000020205020200AC -:10242000881000000000A002100000002000000042 -:102430000000040088000000880000000000000088 -:102440000400080000000800080000002000C00090 -:1024500010000020002000000000000000004002EA -:102460004020000000208020002004208020000068 -:10247000002000000000000000000000000000023A -:1024800000000400040004000300004000000500F8 -:1024900000200000000000A000000000000140211A -:1024A00020022001000000000008000000000000E1 -:1024B00040020000000000000000000000000000DA -:1024C0004000000080000000800080020002400206 -:1024D0004040000002000200000000000200020074 -:1024E00002000200000000000000040004000400DC -:1024F00000000000020000000000000000000200D8 -:10250000001000000440040000000010000000095A -:1025100000000000000000000000000000000000BB -:102520000200010001004000020000000000000065 -:10253000000000000000000000000000000000009B -:10254000200000100010010008000800840840006E -:1025500020000008000000000084000000000000CF -:1025600000000000000800000008001080108084B7 -:102570008010000800000010001000000010000093 -:1025800000000000001000840040040000000088EB -:10259000000000080000000000000000000005002E -:1025A0000000050040002000809005900000000021 -:1025B00004000008094000100000000000000000B6 -:1025C00000000400000000000800800080080400F3 -:1025D000804000400000008800080000000000006B -:1025E00000000000000000000000001000000000DB -:1025F000000004000000880000000000000000004F -:10260000000500000000000000080000002000009D -:10261000000000000000A000000000050000000015 -:1026200010000000000008008800C000000000004A -:10263000000000080000000000080000000000008A -:10264000000000000000000000000000000000008A -:10265000000000000000000000000000000000007A -:102660000000000000000000000000000000210049 -:102670000000000080000000000000A000000084B6 -:102680000000000000000000410000000000008386 -:10269000000000000000000000000000000000102A -:1026A0000000000000000000900000000002000098 -:1026B000000000000000000000000000000000001A -:1026C000000000000000000000000000000000000A -:1026D00000000000000000000000090000000000F1 -:1026E000000008000000000400000800C000900086 -:1026F00084000800000090048440004000000000B6 -:102700000000000000000000000000000000008049 -:1027100008000041400040000800080000000000E0 -:1027200000000000000000000000A0000000000009 -:10273000A0000000A0000000000000000000000059 -:102740000000000000000000000000000000100079 -:10275000C0000000080000000000A000C000000051 -:102760000000000000000000000000000000000069 -:102770000000000000000000000000000000000059 -:102780000000000000000000000011000000000038 -:102790000020000000000000000000000000000019 -:1027A00000000000000000000040090003001100CC -:1027B00000000000000000000000000000200000F9 -:1027C0000000000000000000000000000000000009 -:1027D00041000000000000000000000000000000B8 -:1027E00000000000000000080000080000000000D9 -:1027F00000000000000082000000840010000000C3 -:10280000C000040000008200000020000004000559 -:102810000020000800000000000000080000000880 -:10282000000000000000820000000000080000001E -:10283000000000050000000800000000000000008B -:102840000000000000000000000008000800080070 -:102850000800C00020000800000000000000080080 -:102860000800000000000000000000000000000060 -:102870000000000000000000000000040000000054 -:102880000000000080000000000000008000000147 -:102890000000000100000000000000000000000037 -:1028A0000000000000000010001000000300A10064 -:1028B0000084000000000000000000000000000094 -:1028C0000000000000000000000000000000000008 -:1028D00000000000000000000000000000000000F8 -:1028E00080008020000000080000000000000000C0 -:1028F000080000000000000000000000000084004C -:1029000000000000010000000000000001000003C2 -:102910000003008000030000000040200041000090 -:10292000000800000000000002000200400000213A -:10293000C00000004000000400040020000400115A -:102940000000000000000000000000000000000087 -:1029500004000000000000000000C00000000000B3 -:10296000080020000200000000000000000000003D -:102970000000000000000000000000000000000057 -:10298000000000000000040000000000000004003F -:102990000000000000040000000000000001000032 -:1029A000000000000800000000000000000000001F -:1029B0000000000000000000000000000000000017 -:1029C0000000000000000000000000000000000007 -:1029D00000000000000000000000410000000200B4 -:1029E0000000800000000000000000000000000067 -:1029F00000000000000000000000000000000000D7 -:102A000000C0009000C0C04002C0000400100000E0 -:102A100011C0009001020002000000000000000050 -:102A200000000000000000000000000000000000A6 -:102A3000000084C109890082100400000000000029 -:102A40000000000000000000000000000000000086 -:102A500000000000000000000000000200100088DC -:102A60000290088408C00082C00800000000000036 -:102A70000000000000000000000000000000000056 -:102A800000000080008000000000838000800000C3 -:102A90000000918000801080008000000000000095 -:102AA0000000000000000000000000000000000026 -:102AB000000000000002A12105C00005001100086F -:102AC00000080005000000000000000000000000F9 -:102AD0000000000000000000000000000080000076 -:102AE0000080800080038003008580830000000058 -:102AF0000000000000000000000000000000800056 -:102B00000000808000000020000080808000801095 -:102B10008080808000098010008480800000000098 -:102B20000000008000000000000000000000000025 -:102B30000000000000009000800400008000000001 -:102B40000000000000000000000000000000000085 -:102B50000000000000000000000000000000000075 -:102B60008005808000000000804000000000000020 -:102B70000000000000000000000000000000000055 -:102B800082000000C09000002000A000C090020061 -:102B900010018440C090880082010040C090000075 -:102BA0000002000000C00000000000000000000063 -:102BB0000000000000000000098808408804089018 -:102BC0000000000000000000000000000000000005 -:102BD00000000000000000000000000000000000F5 -:102BE00000000400A0A0000002000891C08804902A -:102BF00000000000000000000000000000000000D5 -:102C0000004000049090000000400020900802C0A6 -:102C100002400040900202C00000C040900203C089 -:102C20000000000010000000000000000000000094 -:102C300000010000000000000000A108010821C1FF -:102C400084090000000000000000000000000000F7 -:102C50000000000000000000000000000000000074 -:102C60000000C090000000900000C010010808C0E3 -:102C700084100000000000000000000000000000C0 -:102C80000000008000008000000000800000800044 -:102C90008080800000808000808000000080808034 -:102CA000C18009000000800000000000000000005A -:102CB00000000001000000000000000041830280CD -:102CC00005214082000005004100000000000000D6 -:102CD00000000000000000000000000000000000F4 -:102CE000000000008000000000000000A0802080A4 -:102CF0002000008000000000000000000000000034 -:102D0000000000000000002000000000801180A0F2 -:102D100000800000804080400000000080400040B3 -:102D20008080000000200021000000000000000062 -:102D300000000000000100000000000000002080F2 -:102D400040112000400000100000000000000000C2 -:102D50000000000000000000000000000000000073 -:102D60000000000000008003000000800000000957 -:102D700000A00000000000000000000000000000B3 -:102D80000000000000000000009000040000C001EE -:102D90002002A0C00000C000080000909000C00009 -:102DA000000002029000000000000000000000008F -:102DB0000000000000000001000000000000000012 -:102DC00089A0A18405840300000000000000000029 -:102DD00000000000000000000000000000000000F3 -:102DE0000000000000000000020020200040000061 -:102DF0008800842184880400000000000000000096 -:102E00000000000000000000000A000007000000B1 -:102E1000000A0000070000410081000007000000D8 -:102E2000818100E00700000A000A0000070000128C -:102E30000000000000000000000000000000000092 -:102E40000000000000E00700480000000000000053 -:102E50000000000000000000000000000000000072 -:102E60000000000000000000000000000000000062 -:102E70006000000000000700418200000000000028 -:102E800000000000000000000000000000003CF016 -:102E90003CF0FF00FF00CF3F3030DB422424DD4414 -:102EA0006060C6C63030F066F00000000000000030 -:102EB0000000000000000000000000000000000012 -:102EC0000000000000000000000000000000000002 -:102ED00000000000000000000000000000000000F2 -:102EE00000000000000000000000000000000000E2 -:102EF00000000000000000000000000000000000D2 -:102F000000000000000000000000000000000000C1 -:102F10003CF03CF0F0F00000C0303030BD24242400 -:102F2000DD44606036363030F066F00000000000AE -:102F30000000000000000000000000000000000091 -:102F40000000000000000000000000000000000081 -:102F50000000000000000000000000000000000071 -:102F60000000000000000000000000000000000061 -:102F70006600FF3CFF3C0000000000000000000075 -:102F80000000000000000000000000000000000041 -:102F90000000000000000000000000000000000031 -:102FA0000000000000000000000000000000000021 -:102FB0000000000000000000000000000000000011 -:102FC00000000000000000000210200000881084B3 -:102FD00000000000000000000000000000000000F1 -:102FE00000000000000000000000000000000000E1 -:102FF0000000000000000000021020000088108483 -:1030000000000000000000000000000000000000C0 -:103010000000000006069F9F00662D4B0F0F09F968 -:1030200000660F99003C3F03003C4E720F0F0F0FDC -:103030000000000000000000000000000000000090 -:103040000000000000000000000000000000000080 -:103050000000000000000000000000000000000070 -:103060000000000000000000000000000000000060 -:103070000000F00030000000000000000000000030 -:103080000000000000000000000000000000000040 -:103090000000000000000606060600662D4B00003A -:1030A00006F600660F66003C033F003C4E720000CF -:1030B0003C3C000000000000000000000000000098 -:1030C0000000000000000000000000000000000000 -:1030D00000000000000000000000000000000000F0 -:1030E00000000000000000000000000000000000E0 -:1030F00000000000F000F0000090009000000000D0 -:1031000000000000000000000000000000000000BF -:1031100000000000000000280C0012C003820328F9 -:103120000C0092C0038203280C0092C003E3032F1B -:103130008C0D82C005000A28050000A000000000D8 -:10314000000000000000000000000000000000611E -:1031500000070009000000610006000D00000000EB -:10316000000000000000000000000000000000005F -:10317000000000000000800000000000000000616E -:103180000006000D0000000000000000000000002C -:10319000000000000000000000000000000000002F -:1031A000000000000000000000000000000000001F -:1031B000000000000000000000000000000000000F -:1031C00000000000000000000000000000000000FF -:1031D00000002808003CFFFF000000000000000085 -:1031E00000000000000000000000000000000000DF -:1031F00000000000000000000000000000000000CF -:1032000000000000000000000000000000000000BE -:1032100000000000000000000000000000000000AE -:10322000000000000000000000000000000000009E -:10323000000000000000000000000000000000008E -:10324000000000000000000000000000000000007E -:10325000000000002808003C003C000000000000C6 -:10326000000000000000000000000000000000005E -:10327000000000000000000000000000000000004E -:10328000000000000000000000000000000000003E -:10329000000000000000000000000000000000002E -:1032A000000000000000000000000000000000001E -:1032B000000000000000000000000000000000000E -:1032C00000000000000000000000000000000000FE -:1032D0000000000000000000C3C3C3C3FFFF0000E4 -:1032E00000000000000000000000000000000000DE -:1032F00000000000000000000000000000000000CE -:1033000000000000AAAAFFCF00000000000000009B -:1033100000000000000000000000000000000000AD -:10332000000000000000000000000000000000009D -:10333000000000000000000000000000000000008D -:10334000000000000000000000000000000000007D -:103350000000000000000040000000000000FFFF2F -:103360005D0C0000000000000000000000000000F4 -:10337000000000000000000000000000000000004D -:10338000000000000000AAAAFFFF000000000000EB -:1033900000000000000010000000000020000000FD -:1033A00000000000000000000000000000004000DD -:1033B000400000000000200000000200200000008B -:1033C0000000840040000000000000000000000039 -:1033D0002000200000000000200004002000200049 -:1033E0000000840084008400000000000000400011 -:1033F000200020008800C0002000200020000000E5 -:103400000000000000000000400000000000040078 -:10341000200000000000000000000000000000008C -:10342000000000000002000000000000000000009A -:10343000000000000000400000000000000200004A -:10344000000000000000000000000000000000007C -:10345000000000000000000200004000000000002A -:103460000002000000000002000000000000000058 -:10347000000000000000000200004000000000000A -:1034800000000000000000000000410000000902F0 -:1034900000000200020000000040020000000000E6 -:1034A0000040020002000200004002000200000092 -:1034B0000000020002000000000000000200000006 -:1034C00000000000000000000000000000000000FC -:1034D00000000000000000000000000000000000EC -:1034E00000000000000000000000000000000000DC -:1034F00000100000000000000000000000000000BC -:1035000088002000000000000010001000000200F1 -:103510000010080000000000000000000000000093 -:10352000000000000000000000000000000000009B -:10353000000000000000000000000000000000008B -:10354000000000000000000000000000000000007B -:103550000400000000000000000000000000000067 -:103560000000000004000000000005000000000052 -:103570000000000004000000000000000000000047 -:1035800000000200200000000010000040000510B4 -:103590000000000000000000000000000400000027 -:1035A000000000000000000000000000000000001B -:1035B000000000000000000000000000000000000B -:1035C00000000000000000000000000000000000FB -:1035D000000000000000000000000000900000005B -:1035E0000000A0000000000000000000000000003B -:1035F00000000000000000000000000000000000CB -:1036000000000000000000000100000000000000B9 -:1036100000000000000000000000000000000000AA -:103620000000000041000000000008002100000030 -:10363000000000000000000000000000000000008A -:10364000000005C0000000000000000000000000B5 -:103650000000000000000000000000000000110059 -:10366000000000000000000000000000000000C09A -:103670000000000800000000000000000000000042 -:10368000000000000000030000000200000008002D -:10369000000000100000000000000000000000001A -:1036A000000010000000000000000000000000000A -:1036B0000000820000000000000000000000000088 -:1036C00000000000000000000000000000000000FA -:1036D00000000000000000090000000000000000E1 -:1036E00000000000000000000000000000000000DA -:1036F00008000800000800000400000000000000AE -:10370000000000000000000082000000000900002E -:103710000009000000000000000008400000000058 -:103720000000000000000000000000000000000099 -:103730000000000000000000000000000000000089 -:103740000000000000000000000000000000000079 -:103750000000000000000000000000000000000069 -:103760000000000000000000000000000000000059 -:103770000000000000000000000000000000000049 -:103780000000000003000000000000000000000036 -:103790000000000000000000000003000000000026 -:1037A0000000000008000000000000000000000011 -:1037B0000000000000000000000000000000000009 -:1037C00000000000000000000000000000000000F9 -:1037D00000000000000000000000000000000000E9 -:1037E00000000000000000000000000000000000D9 -:1037F00000000000000000000000000000000000C9 -:1038000000000000000000000000000000000000B8 -:1038100000000000000000000000000000000000A8 -:103820000000000000000000000000000000000098 -:103830000000080000000000000000002000000060 -:1038400005840000050000000300050000002100C1 -:103850000000000000002100000000000000000047 -:10386000000000C000000000000000000084058887 -:103870000800000000000000000000000000000040 -:103880000000000000000000000000000000000038 -:1038900000000000080008000800050000840584FE -:1038A00000C0000000000000000000000000C00098 -:1038B0000000000000000000000000000000000008 -:1038C0000000000000000000900000110000000057 -:1038D0009000000000000000000000000000000058 -:1038E00000000000000002000000000000000000D6 -:1038F00000000000000000080000000000000000C0 -:1039000000000000000000000000000000000000B7 -:103910000000000000000000000000008400000023 -:103920008400000000000000000000000000000013 -:103930000000000000000000000000000000000087 -:103940000000000000000000000000000000000077 -:103950000000000000000000000000000000000067 -:103960000000000000000000000000000000000057 -:103970000000000000000000000000000000000047 -:103980000000000000000000000000000000000037 -:103990000000000000000000000000000000000027 -:1039A0000000000002000000000000000000000015 -:1039B0000000000000000000000000000000000007 -:1039C00000000000000000000000000000000000F7 -:1039D00000000000000000000000000000000000E7 -:1039E00000000000000000000000000000000000D7 -:1039F00000000000000000000000000000000000C7 -:103A000000000000000000000000000000000000B6 -:103A100000000000000000000000000000000000A6 -:103A20000000000000000000000000000000000096 -:103A30000000000000000000000000000000000086 -:103A40000000000000000000000000000000000076 -:103A50000000000000000000000000000000000066 -:103A60000000000000000000000000000000000056 -:103A70000000000000000000000000000000000046 -:103A80000000000000000000000000000000000036 -:103A90000000000000000000000000000000000026 -:103AA0000000000000000000000000000000000016 -:103AB0000000000000000000000000000000000006 -:103AC00000000000000000000000000000000000F6 -:103AD00000000000000000000000000000000000E6 -:103AE00000000000000000000000000000000000D6 -:103AF00000000000000000000000000000000000C6 -:103B000000000000000000000000000000000000B5 -:103B100000000000000000000000000000000000A5 -:103B20000000000000000000000000000000000095 -:103B30000000000000000000000000000000000085 -:103B40000000000000000000000000000000000075 -:103B50000000000000000000000000000000000065 -:103B60000000000000000000000000000000000055 -:103B70000000000000000000000000000000000045 -:103B80000000000000000000000000000000000035 -:103B90000000000000000000000000000000000025 -:103BA0000000000000000000000000000000000015 -:103BB0000000000000000000000000000000000005 -:103BC00000000000000000000000000000000000F5 -:103BD00000000000000000000000000000000000E5 -:103BE00000000000000000000000000000000000D5 -:103BF00000000000000000000000000000000000C5 -:103C000000000000000000000000000000000000B4 -:103C100000000000000000000000000000000000A4 -:103C20000000000000000000000000000000000094 -:103C30000000000000000000000000000000000084 -:103C40000000000000000000000000000000000074 -:103C50000000000000000000000000000000000064 -:103C60000000000000000000000000000000000054 -:103C70000000000000000000000000000000000044 -:103C80000000000000000000000000000000000034 -:103C90000000000000000000000000000000000024 -:103CA0000000000000000000000000000000000014 -:103CB0000000000000000000000000000000000004 -:103CC00000000000000000000000000000000000F4 -:103CD00000000000000000000000000000000000E4 -:103CE00000000000000000000000000000000000D4 -:103CF00000000000000000000000000000000000C4 -:103D000000000000000000000000000000000000B3 -:103D100000000000000000000000000000000000A3 -:103D20000000000000000000000000000000000093 -:103D30000000000000000000000000000000000083 -:103D40000000000000000000000000000000000073 -:103D50000000000000000000000000000000000063 -:103D60000000000000000000000000000000000053 -:103D70000000000000000000000000000000000043 -:103D80000000000000000000000000000000000033 -:103D90000000000000000000000000000000000023 -:103DA0000000000000000000000000000000000013 -:103DB0000000000000000000000000000000000003 -:103DC00000000000000000000000000000000000F3 -:103DD00000000000000000000000000000000000E3 -:103DE00000000000000000000000000000000000D3 -:103DF00000000000000000000000000000000000C3 -:103E000000000000000000000000000000000000B2 -:103E100000000000000000000000000000000000A2 -:103E20000000000000000000000000000000000092 -:103E30000000000000000000000000000000000082 -:103E40000000000000000000000000000000000072 -:103E50000000000000000000000000000000000062 -:103E60000000000000000000000000000000000052 -:103E70000000000000000000000000000000000042 -:103E80000000000000000000000000000000000032 -:103E90000000000000000000000000000000000022 -:103EA0000000000000000000000000000000000012 -:103EB0000000000000000000000000000000000002 -:103EC00000000000000000000000000000000000F2 -:103ED00000000000000000000000000000000000E2 -:103EE00000000000000000000000000000000000D2 -:103EF00000000000000000000000000000000000C2 -:103F000000000000000000000000000000000000B1 -:103F100000000000000000000000000000000000A1 -:103F20000000000000000000000000000000000091 -:103F30000000000000000000000000000000000081 -:103F40000000000000000000000000000000000071 -:103F50000000000000000000000000000000000061 -:103F60000000000000000000000000000000000051 -:103F70000000000000000000000000000000000041 -:103F80000000000000000000000000000000000031 -:103F90000000000000000000000000000000000021 -:103FA0000000000000000000000000000000000011 -:103FB0000000000000000000000000000000000001 -:103FC00000000000000000000000000000000000F1 -:103FD00000000000000000000000000000000000E1 -:103FE00000000000000000000000000000000000D1 -:103FF00000000000000000000000000000000000C1 -:1040000000000000000000000000000000000000B0 -:1040100000000000000000000000000000000000A0 -:104020000000000000000000000000000000000090 -:104030000000000000000000000000000000000080 -:104040000000000000000000000000000000000070 -:104050000000000000000000000000000000000060 -:104060000000000000000000000000000000000050 -:104070000000000000000000000000000000000040 -:104080000000000000000000000000000000000030 -:104090000000000000000000000000000000000020 -:1040A0000000000000000000000000000000000010 -:1040B00000000000000000100000000000000000F0 -:1040C00000000000000000000000000000000000F0 -:1040D00000000000000000000000000000000000E0 -:1040E00000000000000000000000000000000000D0 -:1040F00000000000000000000000000000000000C0 -:1041000000000000000000000000000000000000AF -:10411000000000000000000000000000000000009F -:10412000000000000000000000000000000000008F -:10413000000000000000000000000000000000007F -:10414000000000000000000000000000000000006F -:10415000000000000000000000000000000000005F -:10416000000000000000000000000000000000004F -:10417000000000000000000000000000000000003F -:10418000000000000000000000000000000000002F -:10419000000000000000000000000000000000001F -:1041A000000000000000000000000000000000000F -:1041B00000000000000000000000000000000000FF -:1041C00000000000000000000000000000000000EF -:1041D00000000000000000000000000000000000DF -:1041E00000000000000000000000000000000000CF -:1041F00000000000000000000000000000000000BF -:1042000000000000000000000000000000000000AE -:10421000000000000000000000000000000000009E -:10422000000000000000000000000000000000008E -:10423000000000000000000000000000000000007E -:10424000000000000000000000000000000000006E -:10425000000000000000000000000000000000005E -:10426000000000000000000000000000000000004E -:10427000000000000000000000000000000000003E -:10428000000000000000000000000000000000002E -:10429000000000000000000000000000000000001E -:1042A000000000000000000000000000000000000E -:1042B00000000000000000000000000000000000FE -:1042C0000000000000000000000000002000880046 -:1042D0000000880010001000100000000000200006 -:1042E000200000000000000000001000000020007E -:1042F000000020000000000040000000000020003E -:1043000020000000000000008800000220000000E3 -:1043100020000000000000000000400040000000FD -:104320000000000000000000040010000000000079 -:10433000880000000400018020008480200000002C -:104340000000C000880000002000200000000000E5 -:10435000000000000000000020000000000000003D -:10436000000000000000000000020000000000004B -:1043700000000000002010200000000000000000ED -:1043800000000300000000004000000000000002E8 -:1043900000000000000000000000400000000000DD -:1043A00000000000000000000000210000001000DC -:1043B00000000000000000002002C00040040000D7 -:1043C0000000000000900000000240000900020010 -:1043D0000000044000400000000000000000000059 -:1043E00002000000000002000200020002000210B1 -:1043F000000000000010000000100000000000009D -:1044000000000000000000000000000000000000AC -:10441000000000000000000000000000000000009C -:10442000000000000000000000000000001000106C -:1044300000000000000000100080010408040004D7 -:10444000000000080000000000080200000000104A -:104450000400000000000000000000000000000058 -:10446000000000000000000000000000001000003C -:104470000000000000000200000000000200000038 -:10448000000000000000000000000000000000002C -:104490000000000000020000000000080000000012 -:1044A0000000000000000000040000000400000004 -:1044B00004000000000000000000000420010001D2 -:1044C00000010000090000000000000000002000C2 -:1044D00000000000000000000000000000000000DC -:1044E00000000000000000000000000008000000C4 -:1044F000C0000000000000000000000000000000FC -:1045000000000000000000000000000000000000AB -:10451000000000000000000000000000000000009B -:10452000000000000000400040000000000000000B -:10453000000000000000000000000000000000007B -:10454000000000000000000000000000000000006B -:1045500000008200000000000000000000000000D9 -:104560000000000000000000000000000800000043 -:104570000800000000000808000000000000000023 -:10458000000000000000000000000000000000002B -:104590000000000000000000000004000000000017 -:1045A000000000000000000000000000000000000B -:1045B00000000000080000000000000000000000F3 -:1045C00000000000000021000000210000000000A9 -:1045D000000000000000000000000000002000407B -:1045E0000004004000400000000000000000000047 -:1045F00000040004000400000000000000000008A7 -:1046000000000000080000000000000000000000A2 -:10461000000000000000000000000000000000009A -:10462000000000000000000000000000C0000800C2 -:104630000000C0000000C0000000040000000000F6 -:104640002000000000204000000082000000A000C8 -:10465000000000000000100000000000000000202A -:10466000000000000000000000000000000000004A -:10467000000000000000000000000000000000003A -:10468000000000000000000000000000000000002A -:1046900000000000000000000000000000000020FA -:1046A000000000000000000000000000000000000A -:1046B00000000000000000000000080000000000F2 -:1046C00000008000000000008000000000000000EA -:1046D00000000000042011000000000000000000A5 -:1046E00000000000000000000000080000000000C2 -:1046F00000000000000000000000000000000000BA -:1047000000000000000000000000000000000000A9 -:104710000000000000000000000000000000000099 -:10472000000000000000000000000800A0000000E1 -:104730000800000000000000000000000000000071 -:1047400000008200000000000004000000000000E3 -:104750000000000000000000000004000000000055 -:104760000000000000000000000000000000000049 -:104770000000000000000000000000000000000039 -:104780000000000000000000000000000000000029 -:104790000000000000000000000000000000000019 -:1047A0000000002000000000000000000084000065 -:1047B00000000000000000000000000000000000F9 -:1047C00000000000000000000000000100000000E8 -:1047D00000000000000000000000000000000000D9 -:1047E00000000000000000000000000000000000C9 -:1047F00000000000000000000000000000000000B9 -:1048000000000000000000000000000000000000A8 -:104810000000000000000000000000000000000098 -:104820000000000000000000080000000000000080 -:104830000000000000000040000000000000000038 -:1048400000000000080000004000000040000800D8 -:1048500000000000000000000000040000008200D2 -:104860000000000000000000000000000000000048 -:104870000000000000000000000000000000000038 -:104880000000000000000000000000000000000028 -:104890000000000000000000000000000000000018 -:1048A0000000000000000000000000000000000008 -:1048B00000000000000000000000000000000000F8 -:1048C00000000000000000000000800000008000E8 -:1048D00000000000000000000208000000000000CE -:1048E00000000000000000000000000000000000C8 -:1048F00000000000000000000000000000000000B8 -:1049000000000000000000000000000000000000A7 -:104910000000000000000000000000000000000097 -:104920000000000000000000000000000000000087 -:104930000000000000000000000000000000000077 -:104940000000000000000000000000000001000066 -:104950000000000000000000000000000000000057 -:104960000000000000000000000000000000000047 -:104970000000000000000000000000000000000037 -:104980000000000000000000000000000000000027 -:104990000000000000000000000000000000000017 -:1049A0000000000000000000000000000000000007 -:1049B00000000000000000000000000000000000F7 -:1049C00000000000000000000000000000000011D6 -:1049D00000000020000000000000000000000000B7 -:1049E00000000000000000000000000000000000C7 -:1049F00000000000000000000000000000000000B7 -:104A000000000000000000000000000000000000A6 -:104A10000000000000000000000000000000000096 -:104A20000000000000000000000000000000000086 -:104A30000000000000000000000000000000000076 -:104A40000000000000000000000000000000000066 -:104A500011410000200500000000000000000000DF -:104A60000000000000000000000000000000000046 -:104A70000000000000000000000000000000000036 -:104A80000000000000000000000000000000000026 -:104A90000000000000000000000000000000000016 -:104AA0000000000000000000000000000000000006 -:104AB00000000000000000000000000000000000F6 -:104AC00000000000000000000000000000000000E6 -:104AD00000000001000000000000000000000000D5 -:104AE00000000000000000000000000000000000C6 -:104AF00000000000000000000000000000000000B6 -:104B000000000000000000000000000000000000A5 -:104B10000000000000000000000000000000000095 -:104B20000000000000000000000000000000000085 -:104B30000000000000000000000000000000000075 -:104B40000000000000000000000000000000000065 -:104B50000000000000004001000000000000000014 -:104B60000000000000000000000000000000000045 -:104B70000000000000000000000000000000000035 -:104B80000000000000000000000000000000000025 -:104B90000000000000000000000000000000000015 -:104BA0000000000000000000000000000000000005 -:104BB00000000000000000000000000000000000F5 -:104BC00000000000000000000000000000000000E5 -:104BD0000000000000000000001100204000000064 -:104BE00000000000000000000000000000000000C5 -:104BF00000000000000000000000000000000000B5 -:104C000000000000000000000000000000000000A4 -:104C10000000000000000000000000000000000094 -:104C20000000000000000000000000000000000084 -:104C30000000000000000000000000000000000074 -:104C40000000000000000000000000000000000064 -:104C50000000000000000000000020000000110023 -:104C60000000000000000000000000000000000044 -:104C70000000000000000000000000000000000034 -:104C80000000000000000000000000000000000024 -:104C90000000000000000000000000000000000014 -:104CA0000000000000000000000000000000000004 -:104CB00000000000000000000000000000000000F4 -:104CC00000000000000000000000000000000000E4 -:104CD00000000000000000000000000000000000D4 -:104CE00001000000000000000000000000000000C3 -:104CF00000000000000000000000000000000000B4 -:104D000000000000000000000000000000000000A3 -:104D10000000000000000000000000000000000093 -:104D20000000000000000000000000000000000083 -:104D30000000000000000000000000000000000073 -:104D40000000000000000000000000000000000063 -:104D5000000000000000000000000000000000E073 -:104D600000006000000000000000000000000000E3 -:104D70000000000000000000000000000000000033 -:104D80000000000000000000000000000000000023 -:104D90000000000000000000000000000000000013 -:104DA0000000000000000000000000000000000003 -:104DB00000000000000000000000000000000000F3 -:104DC00000000000000000000000000000000000E3 -:104DD00000000000000000000000000000000000D3 -:104DE00000000000000000000000000000000000C3 -:104DF00000000000000000000000000000000000B3 -:104E000000000000000000000000000000000000A2 -:104E10000000000000000000000000000000000092 -:104E20000000000000000000000000000000000082 -:104E30000000000000000000000000000000000072 -:104E40000000000000000000000000000000000062 -:104E50000000000000000000000000000000000052 -:104E60000000000000000000000000000000000042 -:104E70000000000000000000000000000000000032 -:104E80000000000000000000000000000000000022 -:104E90000000000000000000000000000000000012 -:104EA0000000000000000000000000000000000002 -:104EB00000000000000000000000000000000000F2 -:104EC00000000000000000000000000000000000E2 -:104ED00000000000000000000000000000000000D2 -:104EE00000000000000000000000000000000000C2 -:104EF00000000000000000000000000000000000B2 -:104F000000000000000000000000000000000000A1 -:104F10000000000000000000000000000000000091 -:104F20000000000000000000000000000000000081 -:104F30000000000000000000000000000000000071 -:104F40000000000000000000000000000000000061 -:104F50000000000000000000000000000000000051 -:104F60000000000000000000000000000000000041 -:104F70000000000000000000000000000000000031 -:104F80000000000000000000000000000000000021 -:104F90000000000000000000000000000000000011 -:104FA0000000000000000000000000000000000001 -:104FB00000000000000000000000000000000000F1 -:104FC00000000000000000000000000000000000E1 -:104FD00000000000000000000000000000000000D1 -:104FE00000000000000000000000000000000000C1 -:104FF00000000000000000000000000000000000B1 -:1050000000000000000000000000000000000000A0 -:105010000000000000000000000000000000000090 -:105020000000000000000000000000000000000080 -:105030000000000000000000000000000000000070 -:105040000000000000000000000000000000000060 -:105050000000000000000000000000000000000050 -:10506000000000000000000000610006000D0000CC -:105070000000000000000000000000000000000030 -:105080000000000000000000000000000000000020 -:105090000000000000000000000000000000000010 -:1050A0000000000000000000000000000000000000 -:1050B00000000000000000000000000000000000F0 -:1050C00000000000000000000000000000000000E0 -:1050D00000000000000000000000000000000000D0 -:1050E000000000000000000000003C003C0000F058 -:1050F00000F00000000000000000000000000000C0 -:10510000000000000000000000000000000000009F -:10511000000000000000000000000000000000008F -:10512000000000000000000000000000000000007F -:10513000000000000000000000000000000000006F -:10514000000000000000000000000000000000005F -:10515000000000000000000000000000000000004F -:105160000000000000000000000000003C003C00C7 -:1051700000F000F00000000000000000000000004F -:10518000000000000000000000000000000000001F -:10519000000000000000000000000000000000000F -:1051A00000000000000000000000000000000000FF -:1051B00000000000000000000000000000000000EF -:1051C00000000000000000000000000000000000DF -:1051D00000000000000000000000000000000000CF -:1051E00000000000000000000000000000000F0FA1 -:1051F0000000003C003C0000000000000000000037 -:10520000000000000000000000000000000000009E -:10521000000000000000000000000000000000008E -:10522000000000000000000000000000000000007E -:10523000000000000000000000000000000000006E -:10524000000000000000000000000000000000005E -:10525000000000000000000000000000000000004E -:10526000000000000000000000000000000000003E -:105270000F0F0000003C003C000000000000000098 -:10528000000000000000000000000000000010000E -:10529000200000000000400000000000400020004E -:1052A0002000000000000000000000000000C0001E -:1052B000200000000000200000000000200020006E -:1052C00020000000000000000000C00000000000FE -:1052D000200020000000000002000000000000008C -:1052E000200020000000000004002000000000005A -:1052F00020002000000000000400C0000000880022 -:1053000040002000000004002000002000000000F9 -:1053100000000000000000000000402040200000CD -:10532000100000000000000000000000000000006D -:10533000200000000000000000000000000000004D -:105340000000400000020002000200000000000017 -:105350000000000000000000000020020000000229 -:1053600000000000410000000002000000000000FA -:105370000090400005000000000000000000000058 -:1053800000000002000010004002000000000000C9 -:105390000000080000000000040000000000000001 -:1053A00000000000000000000000000000000000FD -:1053B00000000000000000000000000000000000ED -:1053C000000000000000A0009000000000000000AD -:1053D00000000000000002000200041000000000B5 -:1053E00000000000000000000200000000000000BB -:1053F000000008000800000000000010000000008D -:105400000000000000080000020000000010000082 -:105410000000000010000000000000000400000078 -:10542000000000000000000000000000000000007C -:10543000000800000008000000000000000000005C -:105440000004000000000000000000000000000058 -:105450000000004000000008000000000000000004 -:1054600000000000000009004100000000000000F2 -:105470000000000809000008000000080200000009 -:105480000000000002000000000000000000020018 -:105490000000000800000000000000000000000004 -:1054A00000000000000000000000000000000000FC -:1054B00000000000000000000000000000000000EC -:1054C00000000000000000000000000000000000DC -:1054D00000000000000000000000000000080000C4 -:1054E00000000000000000000000000000000000BC -:1054F00000000000000000000000000000000000AC -:10550000000000000000000000000000002100007A -:10551000000000000000000000000000000000008B -:10552000000000000000000000000000000000007B -:10553000000000000000000000000000000000006B -:10554000000000000000000000000000000000005B -:10555000000000000000000000000000000000004B -:10556000000000000000000000000000000000003B -:105570000000000000000000030000000000000028 -:105580000000040000000000000000000000000017 -:1055900000000000000000000000004000000000CB -:1055A00000000000000000000000000000000000FB -:1055B00000000000000000000000000000000000EB -:1055C00000000000000000000000000500000000D6 -:1055D00000000000000000000000000010000000BB -:1055E00000000000000000000000080000000000B3 -:1055F00000000000000000000000040000000000A7 -:1056000000000000080020040041080008210000FC -:105610000000000082040000000000000000000004 -:105620000000000000000000000800000000000072 -:105630000000410000000000000000000000000029 -:10564000000000000000000000000000000000005A -:105650000000200000000000000000080000000022 -:10566000000000000000000000000000000000003A -:105670000004000000000000000000840020000082 -:10568000000000000000020009000000830000008C -:1056900000000000021004080000000000000000EC -:1056A00000000000000000000000000000001000EA -:1056B00000000000000000000000000000000000EA -:1056C00000000000000000000000000000000000DA -:1056D0000000000000410000000000000000000089 -:1056E00000000000000000000000000000000000BA -:1056F00000000000000000000000000000000000AA -:105700000000000000000000000000000000000099 -:105710000000000000000000000000000000000089 -:105720000000000000000000000000000000000079 -:105730000000000000000000000000000000000069 -:105740000000000000000000000000000000000059 -:105750000000000000000000000000000000000049 -:105760000000000000000000000000000000000039 -:105770000000000000000000000000000000000029 -:105780000000000000000000000000000000000019 -:105790000000000000000000000000000000000009 -:1057A00000000000000000000000000000000000F9 -:1057B00000000000000000000000000000000000E9 -:1057C00000000000000000000000000000000000D9 -:1057D00000000000000000000000001000000000B9 -:1057E00000000000000000000000000000000000B9 -:1057F00000000000000000000000000000000000A9 -:105800000000000000000000002100000000000077 -:105810000000000000000000000000000000000088 -:105820000000000000080000000000000000000070 -:105830000000000000000000000000000000000068 -:105840000000000000000000000000000000000058 -:105850000000000000000000000020000001000027 -:105860000000000000000000000000000000000038 -:105870000000000000000000200000000000000008 -:105880000000000000000000000000000000000018 -:1058900000000000208800000000000000000082DE -:1058A00000000000000000000000000000000000F8 -:1058B00000000000000000000000000000000000E8 -:1058C00000000000000000000000000000000000D8 -:1058D00000000000000000000000000000000000C8 -:1058E00000000000000000000000000000000000B8 -:1058F00000000000000000000000000000000000A8 -:105900000000000000000000000000000000000097 -:105910000000400000000000C00000000000000087 -:105920000000000000000000000000000000000077 -:105930000000000000000000000000000000000067 -:105940000000000000000000000000000000000057 -:105950000000000000000000000000000000000047 -:105960000000000000000000000000000000000037 -:105970000000000000000000000000000000000027 -:105980000000000000000000000000000000000017 -:105990000000000080000000000080000000000007 -:1059A00000000000000000000000000000000000F7 -:1059B00000000000000000000000000000000000E7 -:1059C00000000000000000000000000000000000D7 -:1059D0000000000000000000000000008000000047 -:1059E00000000000000000000000000000000000B7 -:1059F00000000000000000000000000000000000A7 -:105A00000000000000000000000000000000000096 -:105A10000000000000000000000000040000000082 -:105A20000000000000000000000000000000000076 -:105A30000000000000000000000000000000000066 -:105A40000000000000000000000000000000000056 -:105A50000000000000000000000000000000100036 -:105A60001000840090000000000000000000000012 -:105A70000000000000000000000000000000000026 -:105A80000000000000000000000000000000000016 -:105A90000000000000000000000000000000000006 -:105AA00000000000000000000000000000000000F6 -:105AB00000000000000000000000000000000000E6 -:105AC00000000000000000000000000000000000D6 -:105AD00000000000000000000000000000000000C6 -:105AE00000000000000000000000000000000000B6 -:105AF00000000000000000000000000000000000A6 -:105B00000000000000000000000000000000000095 -:105B100000000000000000000000008400880084F5 -:105B20000010000000000000000000000000000065 -:105B30000000000000000000000000000000000065 -:105B40000000000000000000000000000000000055 -:105B50000000000000000000000000000000000045 -:105B60000000000000000000000000000000000035 -:105B70000000000000000000000000000000000025 -:105B80000000000000000000000000000000000015 -:105B90000000000000000000000000000000000005 -:105BA00000000000000000000000000000000000F5 -:105BB00000000000000000000000000000000000E5 -:105BC00000000000000000000000000000000000D5 -:105BD00000000000000000000000000000000000C5 -:105BE00000000000000000000000000000000000B5 -:105BF00000000000000000000000000000000000A5 -:105C00000000000000000000000000000000000094 -:105C10000000000000000000000000000000000084 -:105C20000000000000000000000000000000000074 -:105C30000000000000000000000000000000000064 -:105C40000000000000000000000000000000000054 -:105C50000000000000000000000000000000000044 -:105C60000000000000000000000200100000000022 -:105C70000000000000000000000000000000000024 -:105C80000000000000000000000000000000000014 -:105C90000000000000000000000000000000000004 -:105CA00000000000000000000000000000000000F4 -:105CB00000000000000000000000000000000000E4 -:105CC00000000000000000000000000000000000D4 -:105CD00000000000000000000000000000000000C4 -:105CE00000000000000000000000000000000000B4 -:105CF00000000000000000000000000000000000A4 -:105D00000000000000000000000000000000000093 -:105D10000000000000000000000000000000000083 -:105D20000000000000000000000A00000000000069 -:105D30000000000000000000000000000000000063 -:105D40000000000000000000000000000000000053 -:105D50000000000000000000000000000000000043 -:105D60000000000000000000000000000000000033 -:105D70000000000000000000000000000000000023 -:105D80000000000000000000000000000000000013 -:105D90000000000000000000000000000000000003 -:105DA000000000000000000068EA7CFE0000000027 -:105DB00000000000000000000000000000000000E3 -:105DC00000000000000000000000000000000000D3 -:105DD00000000000000000000000000000000000C3 -:105DE00000000000000000000000000000000000B3 -:105DF00000000000000000000000000000000000A3 -:105E00000000000000000000000000000000000092 -:105E10000000000000000000000000000000000082 -:105E20000000000000000000000040C254D6000046 -:105E30000000000000000000000000000000000062 -:105E40000000000000000000000000000000000052 -:105E50000000000000000000000000000000000042 -:105E60000000000000000000000000000000000032 -:105E70000000053D050500000000000000000000D6 -:105E80000000000000000000000000000000000012 -:105E90000000000000000000000000000000000002 -:105EA00000000000000000000000000000000000F2 -:105EB00000000000000000000000000000000000E2 -:105EC00000000000000000000000000000000000D2 -:105ED00000000000000000000000000000000000C2 -:105EE00000000000000000000000000000000000B2 -:105EF000000000000505050500000000000000008E -:105F00000000000000000000000000000000000091 -:105F10000000000000000000000000000000000081 -:105F20000000000000000000000000000000000071 -:105F30000000000000000000000000000000000061 -:105F40000000000000000000000000000000000051 -:105F50000000000000000000000000000000000041 -:105F60000000000000000000000000000000000031 -:105F70000000000000000000000000000000000021 -:105F80000000000000000000000000000000000011 -:105F90000000000000000000000000000000000001 -:105FA00000000000000000000000000000000000F1 -:105FB00000000000000000000000000000000000E1 -:105FC00000000000000000000000000000000000D1 -:105FD00000000000000000000000000000000000C1 -:105FE00000000000000000000000000000000000B1 -:105FF00000000000000000000000000000000000A1 -:106000000000000000000000000000000000000090 -:106010000000000000000000000000000000000080 -:106020000000000000000000000000000000000070 -:106030000000000000000000000000000000000060 -:106040000000000000000000000000000000000050 -:106050000000000000000000000000000000000040 -:106060000000000000000000000000000000000030 -:106070000000000000000000000000000000000020 -:106080000000000000000000000000000000000010 -:106090000000000000000000000000000000000000 -:1060A00000000000000000000000000000000000F0 -:1060B00000000000000000000000000000000000E0 -:1060C00000000000000000000000000000000000D0 -:1060D00000000000000000000000000000000000C0 -:1060E00000000000000000000000000000000000B0 -:1060F00000000000000000000000000000000000A0 -:10610000000000000000000000000000000000008F -:10611000000000000000000000000000000000007F -:10612000000000000000000000000000000000006F -:10613000000000000000000000000000000000005F -:10614000000000000000000000000000000000004F -:10615000000000000000000000000000000000003F -:10616000000000000000000000000000000000002F -:10617000000000000000000000000000000000001F -:10618000000000000000000000000000000000000F -:1061900000000000000000000000000000000000FF -:1061A00000000000000000000000000000000000EF -:1061B00000000000000000000000000000000000DF -:1061C000000000001000000020000000820000001D -:1061D00020002000000000000000020020008200DB -:1061E00082001000400000008400880020000000B1 -:1061F000200040000200C0008800040020000000D1 -:1062000004002000000220000000200020002000E8 -:106210000000200020002000200088002000200036 -:1062200000002000200020000000200004002000CA -:106230000400200020002000200020008400200016 -:10624000880020008800000000000000000000001E -:10625000000000020000000000000000000000003C -:1062600000000000212000000000000000000000ED -:1062700000004002000000000000000000000000DC -:10628000000040002100000040000000000000006D -:1062900000000000004000000000000000A000001E -:1062A00000000000100221000000000000000000BB -:1062B000000000004000400000000000400000C05E -:1062C000000200901002210202020200A000A08041 -:1062D0008240004002008200100000000000020026 -:1062E0000000100000000000020000040000000098 -:1062F0008200A040A000A0040200A0000000040052 -:1063000000009000000000000000010000040000F8 -:106310000000000002000008001000000000000063 -:10632000884000000000900800000000000000000D -:1063300000000008020082080800000000000200BF -:1063400008100040020400880880000500000000DA -:106350000402000800000000000804100000000013 -:106360000010000000100008000000000000000005 -:106370000000000800000004000800080000000001 -:106380000008000000080004008200004000000037 -:1063900000000000000800840010008400080000D5 -:1063A0000008000900840008001000100008000820 -:1063B000000020000084000800840408008402001B -:1063C00000088008000004830004000400000000AE -:1063D0000000000000210000002100020008000071 -:1063E000000500080021000800050008000000006A -:1063F000000000000021000800000002000500006D -:106400000021000000050021000800080000000035 -:106410000008000200000000000800000000004129 -:10642000400040000040000000108800000800000C -:10643000000000000000001000000000000000004C -:10644000000000000000C004002100210000000046 -:10645000000000000000000000000000000100003B -:106460000000000000000000000000000800000024 -:10647000000000000000000000000000000100001B -:1064800000000000000010000000000000000000FC -:1064900000A000000002000000000000000000005A -:1064A00041000000000000000000000000000000AB -:1064B00000000000000000002100000000000000BB -:1064C00000000000000000000001050000000008BE -:1064D000000000000000008000000004208400C0D4 -:1064E000000000000000A0000021000420000021A6 -:1064F00000000000080000100000C00000000000C4 -:106500000000000000000800000008000000100269 -:1065100000000000000040008200000000000000B9 -:1065200082000040000008000000000000000000A1 -:10653000820200000000000000080000C0210000EE -:10654000820000000008000002008400C000A000DB -:1065500008400000000000000010000000000002E1 -:106560000010000000000000008400000000030094 -:10657000000000A000000000000100000000000872 -:1065800008000000000000080000000000000000FB -:1065900000010000000800000000000000000000F2 -:1065A0000000000800000040000000000000410062 -:1065B0000000008900000000000000000000000052 -:1065C0000000000000000040000008000008000873 -:1065D0000010008500000000000000000003000023 -:1065E0000008000300000000000500050000000096 -:1065F0000000000000210000A000A0000000C0007A -:1066000000000000C00000000000000000000000CA -:106610000800000000000000000000020000000070 -:106620008200000000000000A000820800000000BE -:1066300000000004000000000000820000000000D4 -:10664000000000000000000008000820000000001A -:106650000000100000080000000000000000000022 -:10666000000000000000000000000000000000002A -:10667000000000000000000000000000000000001A -:10668000000000000000000000000000000000000A -:1066900000000800000000000000000000000000F2 -:1066A00000000000000000000000000000000000EA -:1066B00000000000000000000000000000000000DA -:1066C0000000000000000000000000000088000042 -:1066D0000000000000000000002100000021000573 -:1066E0000021002100A110050000000000050005A8 -:1066F0000100000020042004000000000021A00090 -:1067000000210000002101000200022100210400FC -:106710000088000000800000000000210000000050 -:1067200000000000820000000000000001000000E6 -:106730000000008000800000000010000010000039 -:106740000000000000000000000000000000020047 -:1067500002000000C0004010010000020000000024 -:10676000000400000000001000A000000000000075 -:106770000000404002A000000000000000000000F7 -:106780000000000000000000080000000000000001 -:1067900000000010210000020000000000000000C6 -:1067A00000000000000000000000008200C008009F -:1067B00000000010001000100000000000000000A9 -:1067C00000000000000000000000000000000000C9 -:1067D000000000C00000410040000800000001006F -:1067E000020000000200000084000200000000001F -:1067F0000000000000000000000000010000000098 -:106800000000000000000000020000000000000086 -:1068100000000000000004008200000000000000F2 -:106820000000000100000000000000000000000463 -:1068300000880008004000100108900400A000003B -:1068400000000000000000000000000000004010F8 -:1068500000020020C004000301020410001000091F -:1068600010110009000900001100000000000000E4 -:1068700000000000000000020002001100040000FF -:106880000000000000000000030080000000000085 -:106890000000000000000000C000800000000000B8 -:1068A00000020003000200020000000000000000DF -:1068B00000000000000000000080088000000000D0 -:1068C00000000000000000000000000000000000C8 -:1068D000808000000000000000C008918011008549 -:1068E0008000800080008000020002008900820099 -:1068F0000000000000000000000000000000000098 -:106900008000000080008000000080008000800087 -:106910000000000000000000090020200480038027 -:106920000000000000000000000000000000000067 -:106930000000000000000000000000000003000054 -:106940000000000000000000000000000000000047 -:106950000000000000008002000041008200850469 -:1069600005050800080084000802840002000800F1 -:10697000080000000000000000000000000000000F -:1069800000000800880004000400840008000800DB -:10699000040000000000000000000000010100846D -:1069A00000040000000000000000000000000000E3 -:1069B00000000000000000000000000000000000D7 -:1069C000008800000000000000000000000000003F -:1069D0000000000000008800A000040020820200E7 -:1069E0000800020000000000010000000010008408 -:1069F0000002001000000000000000000000000085 -:106A00008400000000000000000000000000000002 -:106A10000000000000000000000000000000000175 -:106A20000000000000000000000000000000000066 -:106A3000000000000000080000000000020002004A -:106A400000000400820100000000000000000000BF -:106A5000000000000000901000A00088101040000E -:106A600000008200100000092111100900110082AD -:106A70000010000200910000000000000000000073 -:106A800041000900000000000000000000000002BA -:106A900000020009000200000000000000000009E0 -:106AA0000020001000110000000010001000000085 -:106AB0000000000000000000000000000000800056 -:106AC000800300100004802000000000000000008F -:106AD0000000000000000000008000000000000036 -:106AE00080040404051080050040000000800000C0 -:106AF0000080000000000004000000000000000012 -:106B00000000000000000000000000800000000005 -:106B100000020000008000000000000000000000F3 -:106B200080C0000080008011000000000000000014 -:106B30000000000000000000000000000000000055 -:106B400000008000000800000000000000000000BD -:106B50000000000000000000000000000080008035 -:106B60000000090004800580101000010088000862 -:106B700000000010000400020001000000000000FE -:106B800000000000000000000000000000C0000243 -:106B90000000000000400040000000000000000075 -:106BA0000000080488004000100000000000000001 -:106BB00000000000000000000000000000000000D5 -:106BC0000000000040000401A00090000000000050 -:106BD000000000000000000000000000000000A015 -:106BE00000080000008800400010010000000000C4 -:106BF0000000000000000000000000000000000095 -:106C00000000000000000000000000000000000084 -:106C10000000420000000000000000000000000032 -:106C20000000000000000000000000000000000064 -:106C30000000000000000000000000000000000054 -:106C40000000000000000000000000000000000044 -:106C50000000000000000000000000000000000034 -:106C6000000000000000480000E0000000000000FC -:106C700000000000000000000000E66666660000FC -:106C80000000000000000000000000000000000004 -:106C900000000000000000000000000000000000F4 -:106CA000000000000000FF000000000000000000E5 -:106CB00000000000000000000000000000000000D4 -:106CC0000000000000000000F000F00000000000E4 -:106CD00000000000000000000000000000000000B4 -:106CE00000000000090942DB000000000000000075 -:106CF000000000000000000000000000C0000000D4 -:106D00000000000000000000000000000000000083 -:106D10000000000000000000000000000000000073 -:106D20000000000000000000FF2020200000000004 -:106D30000000000000000000000000000000000053 -:106D400000000000000000000000F424F00000003B -:106D50000000000000000000000000000000000033 -:106D60000000000000006F6F42DB00000000000028 -:106D70000000000000000000000000000000000013 -:106D80000000000000000000000000000000000003 -:106D900000000000000000000000000000000000F3 -:106DA00000000000000000000000000000000000E3 -:106DB00000000000000000000000000000000000D3 -:106DC00000000000000000000000000000000000C3 -:106DD00000000000000000000000000000000000B3 -:106DE00000000000000000000000000000000000A3 -:106DF00000000000000000000C6E0C0C0000000001 -:106E0000063E060600000000000000000000000032 -:106E100000000000000000000C6E0C0C00000000E0 -:106E20000F2F0F0F00000000000000000000000006 -:106E30000000000000000000000000000000000052 -:106E40000000000000003EFF00FF00000000003CCA -:106E5000003C0000000000000000000000000000F6 -:106E6000000000000000DB904290F0FF000F0C0CCF -:106E70000C0C0008FFFF000000000C0C0C0C0000C4 -:106E800000000606060600000000000000000000EA -:106E9000000000000000000000000C0C0C0C0000C2 -:106EA00000000024000000000000000000000000BE -:106EB00000000000000000000000000000000000D2 -:106EC000000000000000000006FF00FF00000000BE -:106ED000003C063E00000000000000000000000032 -:106EE0000000000000000000DBF642F6F6F60606A1 -:106EF0000C0C0C6E0008000800610006000D00007C -:106F000000610006000D000000000000000000000D -:106F100000610006000D00000000000000000000FD -:106F200000610006000D00000000000000000000ED -:106F300000610006000D0000000000610006000D69 -:106F40000000000000000000000000004000000001 -:106F5000000000610006000D0000000000000000BD -:106F60000000000000000000000000000000000021 -:106F70000000006140008001000000000000000AE5 -:106F80003C3E0000000030303030000000000000C7 -:106F900000000000000000000000000000000000F1 -:106FA00000000000000030303075000000000000DC -:106FB000000000000000003C0A3E0000000000004D -:106FC00000000000000000000000000000000000C1 -:106FD00000000000000000000082F0F2000000004D -:106FE00000000000000000000000000000000000A1 -:106FF000000000005555555500003C3C00000000C5 -:1070000000003C3C00000000303030BA00000000BE -:107010000000000000000000000000000000000070 -:1070200000000000000000003030303000000000A0 -:107030000000000000000000003C003C00000000D8 -:107040000000000000000000000000000000000040 -:10705000000000000000000000000000F0F0000050 -:107060000000000000000000000000000000000020 -:1070700000000000000000000F03AAA03C3C575590 -:10708000030000000000000000003030303000003D -:107090000000000000004F0F410000000000000051 -:1070A00000000000000000000000000000000000E0 -:1070B00000000000000000000000003C0A3E00004C -:1070C0007C3C5000000000000000000000000000B8 -:1070D00000000000000000000000000000000000B0 -:1070E00000000000000000000000000000000000A0 -:1070F0000000000000000000CF4D8E0C0000AAAA86 -:10710000555500000000000000000000303030BA8B -:1071100000000000000000000F0F00000000000051 -:10712000000000000000000000000000000000005F -:10713000000000000000000000000000003C003CD7 -:1071400000003C3C000000000000000000000000C7 -:10715000000000000000000000000000000000002F -:10716000000000000000000000000000000000001F -:10717000000000000000000000000C0C0C0C003FA0 -:10718000AAAA210001001180C18000002000C000D7 -:107190000000880000000000200000000000000047 -:1071A000040020004000840000000000880020004F -:1071B000000020000000000084000000880088001B -:1071C00020000001200020082000000088000000AE -:1071D0004000400000000000C0002000900020009F -:1071E00020002000200088002000880020000000EF -:1071F00020002000000000000400210040002000CA -:1072000000008400C0004000C00220020000000016 -:10721000000000000000000000020000000000006C -:10722000000000000000000000000000400000001E -:10723000000200000000000000004000000000000C -:10724000000000000000000000000002000000003C -:107250000000000080020000000000900900000013 -:107260000000000000000000000000020400000018 -:1072700000004000000000000000000008002100A5 -:1072800000002190000004400300410021000200A2 -:107290000003000090000200104000000400904035 -:1072A00002000000000002000200000000030000D5 -:1072B00002000009000020000000000000000000A3 -:1072C00000000800000000000000000300000000B3 -:1072D0000000000000030000000000000008008023 -:1072E0000000000000002000000000000005000079 -:1072F00000000000000000100041000040000000FD -:107300000004000000100209000410009000900822 -:1073100000080000000000000008008200000008D3 -:10732000000800080008000800000000000800082D -:10733000000800000000000000080008000020080D -:107340000088000400040008000000000084000819 -:107350000088000800000000000000840008000011 -:10736000000200000000000000080008008400087F -:107370000000040800080000000000080008A00841 -:10738000001000000000008800080000000000005D -:10739000008000210000000000000000000000004C -:1073A00000000003000000000000000000000000DA -:1073B00000000000000000000000000000000000CD -:1073C000000000000000000000400000000000007D -:1073D000000000000000000000000000000000218C -:1073E0000000000800000020000800000021000844 -:1073F000000084080000000000000003004100417C -:107400000040000000000008000000100000000024 -:10741000000000080000000000000000000000085C -:10742000000000000000000000000000000000005C -:10743000000000000000410000000000000000000B -:10744000000000000000000000000000000000003C -:107450000000008200A0000000A000A000000000CA -:10746000000000000000000000000000000000001C -:107470000084000000000000000003000000030082 -:1074800009000000000003000000080008101004BC -:1074900000040004000000110000000000000000D3 -:1074A00000000040000000098800001100000000FA -:1074B00000080000000000000800C00000000000FC -:1074C0000000000000009009000000000000000023 -:1074D0000000000000008400000000000800000020 -:1074E0000800A00000001041000000008200000021 -:1074F0008200080200000000C000000000400040C0 -:107500002000200408000000080000100000000017 -:107510008001000100C100C00000000000000090D8 -:1075200000000000000000820082000000000082D5 -:10753000000000000000000000000000008821A002 -:107540000000000000002000000000000000008299 -:107550000000000800000000000000000000000023 -:10756000000000900000000000000000000000107B -:1075700000A000000000000000100000000000005B -:1075800000000000000000840000418400000000B2 -:107590000000014001000088000000000000000021 -:1075A000000000000000000000000000000000409B -:1075B000000000000000084110030000000000402F -:1075C00000000000000000000000000000000000BB -:1075D0000000000000000002004000000000000861 -:1075E000000000000000000000000000000000009B -:1075F0000000000000008200000000000000000009 -:10760000000000000000820000100000A000000048 -:107610000000000010001000000800000000000042 -:10762000000000000000000000000000000000005A -:107630000000000000000008000000000000000042 -:10764000000000000000000000000000000000003A -:1076500000820000000000000000000000000000A8 -:107660000000000000000000000000080000000012 -:1076700002000008000000000000000011000000EF -:1076800000000000000000000084000010900000D6 -:1076900000840082000000000000000000000000E4 -:1076A00000000000000000000000000000000000DA -:1076B00000000000000000000000000008000000C2 -:1076C00000000000000000000000000000000000BA -:1076D00000000000000000000000000000000000AA -:1076E000000008000000000000080000000000A1E9 -:1076F000000000000000000000000000000000008A -:1077000000000021820000002000000000000000B6 -:1077100000000090040800040000000000000000C9 -:107720000000000000000000000000000000000851 -:107730000000090000001108000000000000000027 -:107740000000000000C00000000000000000000871 -:107750000000009000000908000000000000000088 -:107760000000009000000000000000880000000001 -:1077700000020000009000900008000000000000DF -:107780000000000000C00000000000000000000039 -:1077900000C00000024000880000000190000000CE -:1077A00000000000000000000000000000000000D9 -:1077B00000000000000000000000000000000000C9 -:1077C00000000000000000000000000000000000B9 -:1077D00000000000000000000000000000000000A9 -:1077E0000000000000000000000000000000010098 -:1077F0002000000000000000000000000000000069 -:107800000000000000000000000000000000000078 -:107810000000000000000000000000000041050022 -:107820000000000300000000000000000000000055 -:107830000000000000000000000000000000000048 -:107840000000000000000000000000000000000038 -:107850000000000000000000000000000000000028 -:107860000000000000000000000000000000000018 -:1078700040000000000000000000000000000000C8 -:1078800000000000000000000000000000000000F8 -:10789000000000000000030000000000000011884C -:1078A000200005034100000000000000000000006F -:1078B00000000000000000000000000000000000C8 -:1078C00000000000000000000000000000000000B8 -:1078D00000000000000000000000000000000000A8 -:1078E0000000000000000000000000000000000098 -:1078F0000000000000000000000000000000000088 -:107900000000000000000000000000000000000077 -:1079100002001000A0000400000000008000000031 -:1079200000910000000101000000000000000000C4 -:107930000000000000000000000000000000000047 -:107940000000000000000000000000000000000037 -:107950000000000000000000000000000000000027 -:107960000000000000000000000000000000000017 -:107970000000000000000000000000000000000007 -:1079800000000000000000000000000000000000F7 -:1079900000009000C10004002100A000A0004000F1 -:1079A00004000000C001010101010000000000000E -:1079B00000000000000000000000000000000000C7 -:1079C00000000000000000000000000000000000B7 -:1079D00000000000000000000000000000000000A7 -:1079E0000000000000000000000000000000000097 -:1079F0000000000000010000000100010000000084 -:107A00000000000000000000000000000000000076 -:107A10000000000000000000040000000000000062 -:107A2000000000000000211121210341000000009E -:107A30000000000000000000000000000000000046 -:107A40000000000000000000000000000000000036 -:107A50000000000000000000000000000000000026 -:107A6000000000000000000000000000000000090D -:107A700000040020000900080005000800080000BC -:107A800000000000000000000000000000000000F6 -:107A900000000000000000000000000000000000E6 -:107AA0000000000000004109201021000004000037 -:107AB00000000000000000000000000000000000C6 -:107AC00000000000000000000000000000000000B6 -:107AD00000000000000000000000000000000000A6 -:107AE0000000000000000000000000000000000096 -:107AF0000000000000000000000000000000000086 -:107B00000000000000000000000000000000000075 -:107B10000000000000000000008400000080000958 -:107B2000000400000080000001C10001010000010C -:107B30000000000000000000000000000000000045 -:107B40000000000000000000000000000000000035 -:107B50000000000000000000000000000000000025 -:107B60000000000000000000000000000000000015 -:107B70000000000000000000000000000000000005 -:107B800000000000000000000000000000000000F5 -:107B900000000000000000000000004100840040E0 -:107BA00000000000000400400000000000E00000B1 -:107BB00000000000000000000000000000000000C5 -:107BC00000000000000000000000000000000000B5 -:107BD00000000000000000000000000000000000A5 -:107BE0000000000000000000000000000000000095 -:107BF0000000000000000000000000000000000085 -:107C00000000000000000000000000000000000074 -:107C10000000000000000000000000000000000064 -:107C20000000000000000000000000000000000054 -:107C30000000000000000000000000000000000044 -:107C40000000000000000000000000000000000034 -:107C50000000000000000000000000000000000024 -:107C60000000000000000000000000000000000014 -:107C70000000000000000000000000000000000004 -:107C800000000000000000000000000000000000F4 -:107C900000000000000000000000000000000000E4 -:107CA00000000000000000000000000000000000D4 -:107CB00000000000000000000000000000000000C4 -:107CC00000000000000000000000000000000000B4 -:107CD00000000000000000000000000000000000A4 -:107CE0000000000000000000000000000000000094 -:107CF0000000000000000000000000000000000084 -:107D00000000000000000000000000000000000073 -:107D10000000000000000000000000000000000063 -:107D20000000000000000000000000000000000053 -:107D30000000000000000000000000000000000043 -:107D40000000000000000000000000000000000033 -:107D50000000000000000000000000000000000023 -:107D60000000000000000000000000000000000013 -:107D70000000000000000000000000000000000003 -:107D800000000000000000000000000000000000F3 -:107D900000000000000000000000000000000000E3 -:107DA000000000000000FF55AA000000000075550B -:107DB0005555000000000000000000000000000019 -:107DC00000000000000000000000000000000000B3 -:107DD00000000000000000000000000000000000A3 -:107DE0000000000000000000000000000000000093 -:107DF0000000000000000000000000000000000083 -:107E00000000000000000000000000000000000072 -:107E10000000000000000000000000000000000062 -:107E200000000000000000002D2D2D2D000000009E -:107E30003000000000000006000C00000000000000 -:107E40000000000000000000000000000000000032 -:107E50000000000000000000000000000000000022 -:107E60000000000000000000000000000000000012 -:107E700000000000000000000000000000000061A1 -:107E80000006000D000000610006000D000000006B -:107E900000000000000000000000000000000000E2 -:107EA00000000000000000610006000D000000005E -:107EB0000000000000010505FF00FFFF00F00000CA -:107EC00000000000000000000000000000000000B2 -:107ED00000000000000000000000000000000000A2 -:107EE0000000000000000000000000000000000092 -:107EF0000000000000000000000000000000000082 -:107F000000000000CFCFFF3C0000000000FF00FF9A -:107F10000000000000000000000000000000000061 -:107F20000000000000000000000000000000000051 -:107F300000000000000000000505FF00000000F048 -:107F40000000000000000000000000000000000031 -:107F50000000000000000000000000000000000021 -:107F60000000000000000000000000000000000011 -:107F70000000000000000000000000000000000001 -:107F8000000000000000CFCFFF3C0000000028FFF1 -:107F9000F8FF0000000000000000000000000000EA -:107FA00000000000000000000000000000000000D1 -:107FB0000000000000000000000055553C3CF0F0BF -:107FC0000028000000000000000000000000000089 -:107FD00000000000000000000000000000000000A1 -:107FE0000000000000000000000000000000000091 -:107FF0000000000000000000000000000000000081 -:108000000000000000000000000000000000000070 -:108010000000000000000000000000000000000060 -:108020000000000000000000000000000000000050 -:108030002828EBEB000000000000000000003C3CA2 -:10804000F0F0000000000000000000000000000050 -:108050000000000000000000000000000000000020 -:108060000000000000000000000000000000000010 -:108070000000000000000000000000000000000000 -:1080800000000000000000000000000000000000F0 -:1080900000000000000000000000000000000000E0 -:1080A00000000000000000000000000000000000D0 -:1080B000000030F330F3000000000000000000007A -:1080C00000000000000000001000000088092009E6 -:1080D0000000000000000000000020008980000077 -:1080E0000000100000008800000088000000200050 -:1080F0000010000084004000000020102010000349 -:10810000000000002000000000000000001000003F -:1081100020000008880000002000000010002180DE -:108120000000000088008810000000008800400067 -:10813000200040000000040020000000A1002100F9 -:1081400000000000000000000020002000020000ED -:108150004000000000000000000000001002400489 -:10816000000000000000000040200000100010008F -:10817000400000000000000000000000000040007F -:1081800000000002000200020000000000000000E9 -:10819000000040000000000000000000000040025D -:1081A000100400000000400000000000000040003B -:1081B000000000000000400000000000000210026B -:1081C0002000020000080000000000008200820081 -:1081D000000000000040000000000000001000004F -:1081E00000000040000000000000880000000000C7 -:1081F0000000100000000000000800000000010066 -:1082000020000000000000000000000090000000BE -:10821000A00000080000000090000008000000001E -:10822000100000000008000000080000000000101E -:10823000000000000000000000000000000000102E -:1082400000000010000000000208000800080008FC -:108250000082000800080000000804840000008478 -:1082600000000008000000080008000800080008DE -:1082700000080008008200000008000000080082DA -:1082800010008084000000080008000800080008B2 -:1082900000040008008200C000000088008400087C -:1082A0000082801000820090000800840008001006 -:1082B0000008004000080008000800080010000442 -:1082C0000000000000000003002100210000002148 -:1082D00000210021002100000021002100210021B7 -:1082E0000021002110020003002100210041002193 -:1082F00000030021000000000021002100000021F7 -:1083000000000021100500000003002100210000F2 -:108310000041000000210021000020032021000274 -:108320000000000000212091000400000004000370 -:108330000000000000080000000300000010000220 -:1083400000000000102111030000000041000000A7 -:10835000000000000000000000000010000000000D -:108360000000000800008000000000000000000085 -:1083700000000000000000040000000000000000F9 -:108380000000000000008400000000000000110058 -:1083900000000000000808000000000000000008C5 -:1083A00000000000000000001002000000000000BB -:1083B0000000000000004100050000000000000077 -:1083C000000000000000000040000000000000006D -:1083D0000000000000000000080000000000000095 -:1083E00000000204004003400040000500000000BF -:1083F0000000000000000000082100110000C00083 -:108400000000001100000000A002000000000000B9 -:10841000C000000000000005000000000400000093 -:10842000C00008000000000008000000000000007C -:1084300008000004000000000000000088000000A8 -:10844000820010000009C0000800000500000000C4 -:10845000000000000000000000000000000000829A -:1084600000000000110000001000000004080000DF -:108470000000000000000000000000A0000000005C -:1084800000000000000000000008000100000000E3 -:1084900000000000000000000000000000000008D4 -:1084A00000000000000000100000000000000000BC -:1084B00000000000000000000000000000000000BC -:1084C0000000000000000010000800000000000094 -:1084D000000000050000000000000000000800008F -:1084E000000000000000000800000000000800007C -:1084F00000000041000000000000000040084008AB -:10850000001100000000004100080000822100006E -:108510004008000000000000000800000000040205 -:1085200000000000000000000011004000000011E9 -:1085300000000000000082000000000000100000A9 -:1085400000400002080900002000000000030105AF -:10855000080008000000000000000000000000000B -:10856000000000000000000000000000000000000B -:1085700000000000000000000000000000000000FB -:1085800000000000000000000000000000000000EB -:1085900000000000000000000000000000000000DB -:1085A00000000002000200000008000000000000BF -:1085B000000000000000000000400000000000007B -:1085C0000000040000000000400000000000000067 -:1085D000100000000000000000410008000000083A -:1085E000000000000010000800000011000800005A -:1085F00000100000000000000004820800000000DD -:1086000000000000001000088400001100030000BA -:10861000C0080000000500008200A010080500004E -:1086200000000000200400080041000000110000CC -:1086300000000041000000000000000000000000F9 -:108640008800000000000000000000000008000595 -:108650000000040000000000000000000000000016 -:10866000000020000000000000000000004020008A -:1086700000000000000000000000000000000000FA -:1086800000000000000000000000000000000000EA -:1086900000000000000000000000000000000000DA -:1086A000009000000000000000000000000000003A -:1086B00000000000000000000000000000000000BA -:1086C00000000000000000000000000000000000AA -:1086D000004000000000000000000000000000005A -:1086E00000000000008800000000000210040000EC -:1086F0000000000100000000000000000000000079 -:1087000088000000011000000000000210040000BA -:108710000000000100000000000000000000000058 -:108720000000000000000002000000000002100431 -:108730000000000000010000000000000000000038 -:10874000000000000000018800000000000410107C -:10875000000000000001000009000000000000020D -:1087600000000000001004000002110000000000E2 -:1087700000000000004100000900000000000004AB -:1087800000000000001003800002110000008000C3 -:108790000000000000410000000000000000000098 -:1087A00000020000000000104080001011000000D6 -:1087B00080000000000000410000000000000000F8 -:1087C0000002000000000011100000020200008002 -:1087D0000000000000000041000000002100000037 -:1087E00000000000090000000200090084000000F1 -:1087F0000900800000000002800400002100000049 -:1088000000000000090000000200090003800000D1 -:1088100009008000000000008040000000004100CE -:1088200000110000000009000000020089000300A0 -:1088300000400900800000000000804000000200AD -:108840000000000000000400000002000900048095 -:1088500000001000800000000000804000000000C8 -:1088600000000000000000000000000002000810EE -:1088700000000000400000000000C00100000000F7 -:108880000000000000000000000000000200890855 -:1088900000000010080000000000C00100000000FF -:1088A0000000000000000000000000000000400088 -:1088B000890200010010040000000000C001000057 -:1088C00000000000000000000100000000000200A5 -:1088D000890800000000100000000000C001000036 -:1088E000000000000000000000000000C000008840 -:1088F0000000010000000000000000010000000076 -:10890000000000000000000000000000C1000004A2 -:108910000000010000000000000000010000000055 -:108920000000000000000000000000000000C00087 -:108930000004000001000100000000000001000030 -:108940000000000000000000000000000000100017 -:108950000010000000000000000000000001000006 -:108960000000000000000000000000000041801036 -:1089700000000000030000000000000000410000B3 -:108980000000000000000000000000000041C008DE -:108990000080000003000000000000000041000013 -:1089A0000000000000000000000000000000004186 -:1089B0008005008000000500080000000000004164 -:1089C0000000000000000000000000000000004166 -:1089D0000011000000001000000000000000004135 -:1089E00000000009800000C1000000020000090032 -:1089F000000000410011000800000000000000001D -:108A000011890009800000C10000000280000900F7 -:108A100000000041001100080000000000200000DC -:108A20000302000000008011008300000004000029 -:108A300089000000004180000008000000000000E4 -:108A4000000004400002800000C10000001000008F -:108A5000840000000041000000020000000000004F -:108A600000000440000020000040000000008800DA -:108A70009000000000C102000001000000000000A2 -:108A8000000000C000002000004000000000820044 -:108A90000800000000C10200000100000000000109 -:108AA00000000185000000001000008300000000AD -:108AB000C0000400000000C1100000010000000020 -:108AC0000000000001410000200000400000000004 -:108AD00010001000000000058800000000000000E9 -:108AE0000000000001410000000000000000000044 -:108AF000000000000082811200E007004800000032 -:108B000000000000000A000000000000000000005B -:108B1000000000000082811200E007004800000011 -:108B20000000000000000000000000000000000045 -:108B30000000000000000082811200E007004800F1 -:108B40000000000000000000000000000000000025 -:108B50000000000000000000811200E00700480053 -:108B60000000000000000000000000000000000005 -:108B700000000000000000000000000000000000F5 -:108B800000000000000000000000000000000000E5 -:108B900000000000000000000000000000000000D5 -:108BA00000000000000000000000000000000000C5 -:108BB00000000000000000000000000000000000B5 -:108BC00000000000000000000000000000000000A5 -:108BD0000000000000000000000000000000000095 -:108BE0000000000000000000000000000000000085 -:108BF0000000000000000000000000000000000075 -:108C00000000000000000000000000000000000064 -:108C10000000000000000000000000000000000054 -:108C20000000000000000000000000000000000044 -:108C30000000000000000000000000000000000034 -:108C40000000000000000000000000000000000024 -:108C50000000000000000000000000000000000014 -:108C6000000000000000000000000000257B000064 -:108C700000000000000000000000000000000000F4 -:108C800000000000000000000000DEA4257B0000C2 -:108C900000000000000000000000000000000000D4 -:108CA00000000000000000000000DEA40000257BA2 -:108CB00000000000000000000000000000000000B4 -:108CC000000000000000000000000000DEA4257B82 -:108CD0000000000000000000000000000000000094 -:108CE000000000000000000000000000DEA461267B -:108CF00003400000000000000230A000000000005F -:108D000000000C4000000000000002C064866126E4 -:108D100003400000000000000230A000000000003E -:108D200000000C4000000000000002C0648600004B -:108D3000612603400000000000000230A000000097 -:108D4000000000000C4000000000000002C064862B -:108D5000612603400000000000000230A000000077 -:108D6000000000000C4000000000000002C064860B -:108D700000000000000000000000000002080000E9 -:108D800000050000000000000000000000000000DE -:108D90000000000084004000840000002002000069 -:108DA0000000000000004000000000000008C000BB -:108DB0000002000000002000400000000005000844 -:108DC0000005000000000008200000000000000076 -:108DD00000000000000020002000C0020000000091 -:108DE000C000000000000000C000400001000000C2 -:108DF00000800000000000020000000000000000F1 -:108E000000000000040000200400400000000000FA -:108E10000000000000000000100000000000000042 -:108E2000000000000000000000000000000202023C -:108E3000000200000000000000000400000000002C -:108E4000000000020000000200000000000000001E -:108E500009C00000000000000000400040000000C9 -:108E600000C00000000000000000000200C004007C -:108E700000C00020820008000000004082100000B6 -:108E800000000000000004000400040000000000D6 -:108E900082000000000082000000000000000000CE -:108EA0000000000000000800000010008200020026 -:108EB0001040000000000000000000100000020050 -:108EC000020002001000A0000000000000000800E6 -:108ED0000200A080080200000000004000400000E6 -:108EE0000000000000000000004100000000000041 -:108EF0000000000000000008008400080084000852 -:108F000000080084000800080084000800080088A9 -:108F10000000000800080008000000080008000821 -:108F20000008000800080008000000880008000091 -:108F30000000001000080000008400000008000885 -:108F400000880008008400080088000800100082E3 -:108F500080840000000200090000000000080008F2 -:108F600000100084000800100088000800100000B5 -:108F7000000000844084000800000021000000215F -:108F800000000009000000000000000500000010C3 -:108F9000000000000010000000210021002100005E -:108FA00000000000000300000002000300080000B1 -:108FB0000000000000000000000000000021000090 -:108FC0000000000800000000000000080009000088 -:108FD00004000000000800880010000800000000E5 -:108FE0000000000800000010000000000000000069 -:108FF000000890210008C0009000000000840000DC -:1090000000000000000000000000000000A000A020 -:10901000001000C0000000A00000000000000000E0 -:1090200000C00000000000000400000000820000FA -:10903000000000A00000000800000000000000A0E8 -:10904000000000000000000000000000000000829E -:1090500000000090000200880002001000000002E2 -:10906000002010A00000000000000000008400A00C -:10907000000000100010004002820984000000047B -:1090800000040000000000000000000000000000DC -:1090900000000000000000000000000000000000D0 -:1090A00000000000000000000000000000000000C0 -:1090B00000000000000000000000000000000000B0 -:1090C0000000000000000800000084110000000003 -:1090D0000000000000000000000000000000000090 -:1090E0000000000000000000000000000000000080 -:1090F0000000000008000000004000110080000097 -:109100000000000000080000000000000000000057 -:10911000000020000000000000000000000000022D -:10912000000000000000000000000000000000003F -:10913000000000000000000000000000000000002F -:109140000000000000000800000000000000000017 -:10915000210041000000200000A0000000002100CC -:1091600000000000000000000000000000000004FB -:1091700000000000000000000400200000000020AB -:1091800000000000000000000000000000000000DF -:1091900000000000A000000000000000000000002F -:1091A00000000000000000000000000000000000BF -:1091B000000000080000000000080000000000009F -:1091C0000000000000000000000000000000080097 -:1091D00000000000C00000000000012100000000AD -:1091E000000000000000000000000000000000007F -:1091F000000000000000900040000000044100005A -:10920000000000000000000000000084000011A029 -:1092100000080000008400000008000000000000BA -:10922000000000000000000000000000000000201E -:109230000008000020A0000000080000000000005E -:1092400000000000000000000020000000000000FE -:109250000000000800A000880000000208000000D4 -:1092600000000000000000000000210000A000003D -:1092700002000000000000C000820084000880009E -:10928000000000000000000000000000000000419D -:10929000900000000021000000000000000000110C -:1092A00000000000000000000000000000000000BE -:1092B00000000000000000000000000000000000AE -:1092C0000000000000000000000000000000080096 -:1092D000000000000000000000000000200000006E -:1092E000000000004000000000000000000000003E -:1092F0000000000000000000000000000000000866 -:10930000008000000090000000000000000000004D -:109310000000000000000000000020000000110418 -:1093200041000000000000000000000000000000FC -:10933000000000000000000000000000000000002D -:10934000000000000000000000000000000000001D -:10935000000000000000000000000000000000000D -:10936000000000000300880000102004000000003E -:1093700000000000000400000000000000000000E9 -:10938000000000204100002000000000000000005C -:1093900000000000000000000000000000000000CD -:1093A00000000000000000000000000000000000BD -:1093B00000000000000000000000000000000000AD -:1093C000000000000000000000000000000000009D -:1093D000000000000000000000000000000000008D -:1093E000000000000100200000000000000000005C -:1093F000000000000000000000000000000000006D -:109400000000008800200002002000000000000092 -:10941000000000000000000000000000000000004C -:10942000000000000000000000000000000000003C -:10943000000000000000000000000000000000002C -:10944000000000000000000000000000000000001C -:10945000000000000000000000000000000000000C -:1094600000000000400003000000000000000000B9 -:1094700000000000000000000000000000000000EC -:1094800000000000008000000080000000000000DC -:1094900000000000000000000000000000000000CC -:1094A00000000000000000000000000000000000BC -:1094B00000000000000000000000000000000000AC -:1094C000000000000000000000000000000000009C -:1094D000000000000000000000000000000000008C -:1094E0000000000000000300102108001000000030 -:1094F000000000000000000000000000000000006C -:10950000000000000000000000410080800000001A -:10951000000000000000000000000000000000004B -:10952000000000000000000000000000000000003B -:10953000000000000000000000000000000000002B -:10954000000000000000000000000000000000001B -:10955000000000000000000000000000000000000B -:10956000000000000000000000000000014000209A -:1095700000000000000000000000000000000000EB -:1095800000000000000000008800080990A0900082 -:1095900000000000000000000000000000000000CB -:1095A00000000000000000000000000000000000BB -:1095B00000000000000000000000000000000000AB -:1095C000000000000000000000000000000000009B -:1095D000000000000000000000000000000000008B -:1095E000000000000000000000000000000100007A -:1095F000000000000000000000000000000000006B -:1096000000000000000000000000000800020088C8 -:1096100001880000000000000000000000000000C1 -:10962000000000000000000000000000000000003A -:10963000000000000000000000000000000000002A -:10964000000000000000000000000000000000001A -:10965000000000000000000000000000000000000A -:1096600000000000000000000000000000100008E2 -:1096700000020005000000000000000000000000E3 -:10968000000000000000000000000000000000805A -:1096900000001000000000000000000000000000BA -:1096A00000000000000000000000000000000000BA -:1096B00000000000000000000000000000000000AA -:1096C000000000000000000000000000000000009A -:1096D000000000000000000000000000000000008A -:1096E000000000000000000000000000000000007A -:1096F00000000000800500000000000000000000E5 -:1097000000000000000000000000000000008010C9 -:1097100000A1000080000000000000000000000028 -:109720000000000000000000000000000000000039 -:109730000000000000000000000000000000000029 -:109740000000000000000000000000000000000019 -:109750000000000000000000000000000000000009 -:1097600000000000000000000000000000000000F9 -:1097700010208800880004000000000000000000A5 -:1097800000000000000000000000000000000000D9 -:109790000201088220080200000000000000000012 -:1097A00000000000000000000000000000000000B9 -:1097B00000000000000000000000000000000000A9 -:1097C0000000000000000000000000000000000099 -:1097D0000000000000000000000000000000000089 -:1097E0000000000000000000000000000000000079 -:1097F0000000000000000000000000000000000069 -:109800000000000000000000000000000000000058 -:10981000000000820000070041000000000000007E -:109820000000000000000000000000000000000038 -:109830000000000000000000000000000000000028 -:109840000000000000000000000000000000000018 -:109850000000000000000000000000000000000008 -:1098600000000000000000000000000000000000F8 -:1098700000000000F0F3F2F3000000000000000020 -:1098800000000000000000000000000000000000D8 -:109890000000000028F03CF00CCFCCCF000000000E -:1098A00000000000000000000000000000000000B8 -:1098B00000000000000000000000000000000000A8 -:1098C0000000000000000000000000000000000098 -:1098D0000000000000000000000000000000000088 -:1098E0000000000000000000000000000000000078 -:1098F000000000000000F0F0F2F2000000000000A4 -:109900000000000000000000000000000000000057 -:10991000000000000000EBF03CF00CCFCCCF0000CA -:109920000000000000000000000000000000000037 -:109930000000000000000000000000000000000027 -:109940000000000000000000000000000000000017 -:109950000000000000000000000000000000000007 -:1099600000000000000000000000000000000000F7 -:1099700000000000000000000000000000000000E7 -:1099800000000000000000000000000000000000D7 -:1099900000000000000000003F3C333C090C393C53 -:1099A00000000000000000000000000000000000B7 -:1099B00000000000000000000000000000000000A7 -:1099C0000000000000000000000000000000000097 -:1099D0000000000000000000000000000000000087 -:1099E0000000000000000000000000000000000077 -:1099F0000000000000000000000000000000000067 -:109A00000000000000000000000000000000000056 -:109A1000000000000000000000003F3C333CF9FC67 -:109A2000090C000000000000000000000000000021 -:109A30000000000000000000000000000000000026 -:109A40000000000000000000000000000000000016 -:109A50000000000000000000000000000000000006 -:109A600000000000000000000000000000000000F6 -:109A7000000000000000000000000000006100067F -:109A8000000D0000000000000000000000000000C9 -:109A900000000000000000000000000000000E3880 -:109AA00000100000000000000000000000000000A6 -:109AB00000000000000000000000000000000000A6 -:109AC0000000000000000000000000000000000096 -:109AD0000000000000000000000000000000000086 -:109AE0000000000000000000000000000000000076 -:109AF0000000000000000000000000000000000066 -:109B00000000BCFF00FF000000000000000000009B -:109B10000000000000000000000000000000000045 -:109B20000000000000000000000000000000000035 -:109B30000000000000000000000000000000000025 -:109B40000000000000000000000000000000000015 -:109B50000000000000000000000000000000000005 -:109B600000000000000000000000000000000000F5 -:109B700000000000000000000000000000000000E5 -:109B800000000000A0FF00FF000000000000000037 -:109B900000000000000000000000000000000000C5 -:109BA00000000000000000000000000000000000B5 -:109BB00000000000000000000000000000000000A5 -:109BC0000000000000000000000000000000000095 -:109BD0000000000000000000000000000000000085 -:109BE0000000000000000000000000000000000075 -:109BF0000000000000000000000000000000000065 -:109C00000000000000005054FFFF000000000000B2 -:109C10000000000000000000000000000000000044 -:109C20000000000000000000000000000000000034 -:109C30000000000000000000000000000000000024 -:109C40000000000000000000000000000000000014 -:109C50000000000000000000000000000000000004 -:109C600000000000000000000000000000000000F4 -:109C700000000000000000000000000000000000E4 -:109C800000000000000000000014FFFF00000000C2 -:109C900000000000000000000000000000000000C4 -:109CA0000000000000000000000000000000200094 -:109CB0002000200000000000000000000000000064 -:109CC0002000200000008200100020000000200082 -:109CD0002000200000000000000000000000000044 -:109CE00020002000000000002000200000030000F1 -:109CF00000000000100000000000040088000000C8 -:109D000000000000020000000008200020001000F9 -:109D100000000200200088000005200020008800CC -:109D20000000100088080000010020002100400011 -:109D30000000000000000000000000020000000021 -:109D40000000000000004000000000020000400091 -:109D50000000000000004000000000024000000081 -:109D600000000000000000000000000000000000F3 -:109D70001000000000000000000000004000100083 -:109D80000000000040000000000000024040100001 -:109D90000000410089000900000000004000400070 -:109DA000000000000002000000C00440100204C0D7 -:109DB0000200084000000200020000100000020043 -:109DC0000210000000000000404140004000400040 -:109DD0008240000000000000020002000200820039 -:109DE00082400200000000408200020000000000EB -:109DF0000000000000000000000000000241000020 -:109E000000009000000000000000040004000002B8 -:109E1000A0022000080010008210000000000000D6 -:109E200000400000000000000000000001000000F1 -:109E30008240000000000000000800000008000050 -:109E40000008000800080008000880008208800060 -:109E500080080008000000000010000000080090CA -:109E6000000800080008000800840000000800083E -:109E70000310000000840000000000100000000833 -:109E80000000000800100008001000008000801092 -:109E9000000900018000C10000000009000000105E -:109EA0000000001000100008000002000000401038 -:109EB00000844008000000000000000000000000D6 -:109EC0000000000000000000000000000000000092 -:109ED0000000000000000000000000000000000082 -:109EE000000040000400000000000000000000002E -:109EF000000000000000C00000000000000800009A -:109F00000000000000000008000000000000000049 -:109F100000000000000000800800000008000000B1 -:109F20000000000000080000000000000400000025 -:109F300000082000000000000000000000000000F9 -:109F40000000000000000000000000000000000011 -:109F50000000000000000000000000000000000001 -:109F600000000000000000000000000003000020CE -:109F700000000000000000000000000008000000D9 -:109F800000000000000000000000030003000300C8 -:109F90000000000000000008051080000008890093 -:109FA000000000080000040000000900000040005C -:109FB0004100090080004000000000000000000097 -:109FC000000000000200000000000000040000008B -:109FD00000000000000000000000000082000400FB -:109FE00000000000000000400000000082000000AF -:109FF00000000800000010000000000008008200BF -:10A00000080000008200000040000000000008007E -:10A01000080084000000002082200200000400806C -:10A020008404000000000000820000000000A00086 -:10A030000800000400020000828000000000000010 -:10A0400000000000000000000400080000004100C3 -:10A0500000000000000003000000000000000000FD -:10A0600000000000000000000000000000000000F0 -:10A0700003000000000000000000000000000000DD -:10A0800000000000000000000000000000000000D0 -:10A0900000000000000000000001000180880001B5 -:10A0A000000400010000000000400000000000006B -:10A0B000000000000000000100000004000000009B -:10A0C0000000000000000000000008000000000088 -:10A0D00000009000000000000008000000000000E8 -:10A0E0000000000000000000000000000000000070 -:10A0F000000000000000040000000000000000005C -:10A10000000000000000000000000000000000004F -:10A1100082008200820000008200840001000010A2 -:10A120000000000000000000000000080000000027 -:10A13000840000004000010090000000408000000A -:10A140000000000000000000000000080000000007 -:10A1500000000000000000000000000000000000FF -:10A1600000000000000000000000000000000000EF -:10A1700000000000000000000000000000000000DF -:10A1800000000000000000000000000000000000CF -:10A19000000000000084000000000000008440A0D7 -:10A1A00000010000000000000000000000000000AE -:10A1B0000088000000840000409021000582000417 -:10A1C0000008000000400000000000000000000047 -:10A1D000000090000000020000000000008000006D -:10A1E0000000000000000008000000000000000067 -:10A1F000000000000000000000000000000000005F -:10A20000000000000000000000000000000000004E -:10A2100000000000000000000000000082000002BA -:10A2200000000010000000100000000000400205C7 -:10A2300000110000100000400000400003800104F5 -:10A24000018000000000020000000000000000008B -:10A2500000000000000000000000000000000020DE -:10A2600000000000000000000000000000000000EE -:10A2700000000000000000000000000000000000DE -:10A2800000000000000000000000000000000000CE -:10A2900000000000000000000000000000000000BE -:10A2A0000241400000010000000100000000000029 -:10A2B00000000000000000000000000089004020B5 -:10A2C000209120200000000000000000000000009D -:10A2D0000000000000000000000000000501908464 -:10A2E0000141000400000000000000000000000028 -:10A2F000000000000000000000000000000000005E -:10A30000000000000000000000000000000000004D -:10A3100000000000000000000000000000000282B9 -:10A32000A1400820008200A1888201A100840000D1 -:10A33000000000000000000000000000000000021B -:10A3400090A100A188A00000000000000000000013 -:10A3500000000000000000000000000000001104E8 -:10A3600080000211008900000000000000000000D1 -:10A3700000000000000000000000000000000000DD -:10A3800000000000000000000000000000000000CD -:10A3900000000000000000000000000000000000BD -:10A3A000A00010008000008000900383038500005F -:10A3B000000000000000000000000000000000009D -:10A3C00000802021219000A000000000000000007B -:10A3D000000000000000000000000000000000007D -:10A3E00004A021000803008000000000000000001D -:10A3F000000000000000000000000000000000005D -:10A40000000000000000000000000000000000004C -:10A41000000000000000000000000000000000003C -:10A4200000000900214009801000000085418021C2 -:10A43000100000000000000000000000000000000C -:10A4400000002000204111A183080000000000004E -:10A4500000000000000000000000000000000000FC -:10A46000000001118400C100849000000000000081 -:10A4700000000000000000000000000000000000DC -:10A4800000000000000000000000000000000000CC -:10A4900000000000000000000000000000000000BC -:10A4A000000000000000400000024000A000080082 -:10A4B000A0918340000000000000000000000000A8 -:10A4C000000000008804212021919101000000007B -:10A4D000000000000000000000000000000000007C -:10A4E000000000000041C0858440A1000000000081 -:10A4F000000000000000000000000000000000005C -:10A50000000000000000000000000000000000004B -:10A51000000000000000000000000000000000003B -:10A52000000000000000000100820021000390886C -:10A5300000C00008820800000000000000000000C9 -:10A54000000000000000200001210001C191000076 -:10A5500000000000000000000000000000000000FB -:10A560000000000000000084801100104100000085 -:10A5700000000000000000000000000000000000DB -:10A5800000000000000000000000000000000000CB -:10A5900000000000000000000000000000000000BB -:10A5A00000000000000000000008001100200082F0 -:10A5B00000200505008000A0000000000000000051 -:10A5C000000000000000000000001020000591883D -:10A5D000000000000000000000000000000000007B -:10A5E0000000000000000000040000050000110051 -:10A5F000000000000000000000000000000000005B -:10A60000000000000000000000000000000000004A -:10A61000000000000000000000000000000000003A -:10A6200000000000000000000000800000080000A2 -:10A63000000203808540030011400000000000007C -:10A6400000000000000000000000202108A1100010 -:10A650008311000000000000000000000000000066 -:10A6600000000000000000000000010000400000A9 -:10A6700001000000000000000000000000000000D9 -:10A6800000000000000000000000000000000000CA -:10A6900000000000000000000000000000000000BA -:10A6A000000000000000000000000000020820215F -:10A6B0000090000100020890C100040000000000AA -:10A6C00000000000000000000000000090210904CC -:10A6D000C090100100000000000000000000000019 -:10A6E000000000000000000000000000000000E08A -:10A6F0000700824100000000000000000000000090 -:10A700000000000000000000000000000000000049 -:10A710000000000000000000000000000000000039 -:10A720000000000000000000000000000000000029 -:10A73000000007000000000000E000000000000032 -:10A74000000000000000000000000000000048427F -:10A7500000E007000006000000000000000000000C -:10A7600000000000000000000000000000000000E9 -:10A77000000076307630000000000000000000008D -:10A7800000000000000000000000000000000000C9 -:10A7900000000000000000000000000000000000B9 -:10A7A00000000000000000000000000000000000A9 -:10A7B000FFFF6600F6F06600000000000000C00029 -:10A7C0000000000000000000000000000000000089 -:10A7D000FF0135350000000000000000000000000F -:10A7E0000000000000000000000000000000000069 -:10A7F000000000007630763000000000000000000D -:10A800000000000000000000000000000000000048 -:10A810000000000000000000000000000000000038 -:10A820000000000000000000000000000000000028 -:10A83000000066006600F6F06600020002000000FC -:10A84000C000000000000000000000000000000048 -:10A850000000FF003C3C00000F0F00000000000063 -:10A8600000000000000000000000000000000000E8 -:10A8700000000000000000000000000000000000D8 -:10A8800000000000000000000000000000000000C8 -:10A8900000000000000000000000000000000000B8 -:10A8A00000000000000000000000000000000000A8 -:10A8B0000000000000000000000000000000000098 -:10A8C0000000000000000000000000000000000088 -:10A8D0000000000000000000000000000000000078 -:10A8E0000000000000000000000000000000000068 -:10A8F000000000000C6E0C6E00660F6F0000000080 -:10A900000000000000000000000000000000000047 -:10A910000000000000000000000000000000000037 -:10A920000000000000000000000000000000000027 -:10A930000000000000000C0C0CFF0F0F6F6F3D3D7E -:10A940003DBDFD0000000000000000000000000010 -:10A950000000000000000060FFBDC6F9060900000D -:10A9600000000000000000000000000000000000E7 -:10A970000000000000000C6E0C6E00660F6F0000FF -:10A9800000000000000000000000000000000000C7 -:10A9900000000000000000000000000000000000B7 -:10A9A00000000000000000000000000000000000A7 -:10A9B00000000000000000000C0C0CFF00006666A8 -:10A9C0003C3C3CBDFD000000000000000000000019 -:10A9D00000000000000000000000FFFF0609F6F97B -:10A9E0000000000000000000000000000000000067 -:10A9F00000000000000000000061000F000D0000DA -:10AA00000000000000000000000000000000000046 -:10AA10000000000000000000000000000000000036 -:10AA20000000000000000000000000000000000026 -:10AA3000000000000000000000000061000E000D9A -:10AA40000000806100010011000000000000000013 -:10AA50000000000000000000000000610E3FC00187 -:10AA600000000000000000000000000000000000E6 -:10AA70000000000000000000000055557D7DC0FF73 -:10AA8000C0FF000000000000000000000000000007 -:10AA900000000000000000000000000000000000B6 -:10AAA00000000000000000000000000000000000A6 -:10AAB0000000000000000000000000000000000096 -:10AAC000FCFE3C3C3F0F3C003C3CFCFC000000001A -:10AAD000000000000000000000000000000828281E -:10AAE0000F0F0F0F0000000000000000000000002A -:10AAF00000000000000000000000000055557D7DB2 -:10AB0000C0FFC0FF000000000000000000000000C7 -:10AB10000000000000000000000000000000000035 -:10AB20000000000000000000000000000000000025 -:10AB30000000000000000000000000000000000015 -:10AB400000003CBE3C3C3F0F3C000000F0F0000029 -:10AB500000000000000000000000000000000000F5 -:10AB60000000FF00F00000000000000000000000F6 -:10AB700000000000000000000000000000003C3C5D -:10AB80003F3FC0FFC0FF00000000000000000000C9 -:10AB900000000000000000000000000000000000B5 -:10ABA00000000000000000000000000000000000A5 -:10ABB0000000000000000000000000000000000095 -:10ABC000000000001454FFFF5F550F00A0A0FFFF1E -:10ABD0000000000000000000000000000000000075 -:10ABE000E3A0E3A0CCCCCCCC00000000000000002F -:10ABF0000000000000000000000000000000000055 -:10AC00003C3C3F3FC0FFC0FF0000000000000000D0 -:10AC10000000000000000000000000000000000034 -:10AC20000000000000000000000000000000000024 -:10AC30000000000000000000000000000000000014 -:10AC40000000000000000050FFFF5F550F00A0A0B3 -:10AC5000A0A00000000000000000000000000000B4 -:10AC60000000E3A0E3A055AA1428020000000000A1 -:10AC7000C000000000000400100000008800200058 -:10AC80008400840000008400000020000000840094 -:10AC90000000000000002000200000002000200034 -:10ACA00000002000000020008400000200000000DE -:10ACB00000000000000000008800200000004000AC -:10ACC00000000000000000008800000000000000FC -:10ACD0000000000000000000200020000000200014 -:10ACE00002000000000000082000008000000000BA -:10ACF0000000000040000000000000000000000014 -:10AD00000002200000000000000000000000000021 -:10AD10000000200000000000000200000000000011 -:10AD20000000100000000000000000000000000013 -:10AD3000000000020000000000000000000200000F -:10AD40000000000040004000000200000000000081 -:10AD500000000002000040000000090000000000A8 -:10AD600000000000100010000000000000040000BF -:10AD700002000000080002000000000000000200C5 -:10AD800002000000020000000200000000000200BB -:10AD90000200000000000000020008000000004067 -:10ADA00000000000000000000000020000000000A1 -:10ADB0000000000000000000000000008200001001 -:10ADC00000000000080008000000A0009000400003 -:10ADD00000000000A00000000000000000000000D3 -:10ADE0000002000000020000009000900000080433 -:10ADF00000000000020080000000000000000000D1 -:10AE00000000000000000000000000000000000042 -:10AE10000000000000000000000000000000000032 -:10AE20000000000000080000000000000008000012 -:10AE30000000000000000000000000000000000012 -:10AE400000000000000000080000000000000008F2 -:10AE50008000000000000000000000000000000072 -:10AE600000000001000000850000000300050084D0 -:10AE70008001000000000000000000000000000051 -:10AE800000000000000000080000000000000000BA -:10AE900000000000000000000000000000000000B2 -:10AEA0000000000000000010000000000000000092 -:10AEB0000000000000000000000000000000000092 -:10AEC0000000000000000000000000000000000082 -:10AED000000000000000000000000000000000086A -:10AEE00000000003000000000008C1000021A021B4 -:10AEF0000200080000000000000000000000000048 -:10AF00000000000000000000000000000000000041 -:10AF1000000000000000000000A000000000000091 -:10AF20000000000000000000000000000000000021 -:10AF30000000000000000000000000000000000011 -:10AF400000000000000003000000030000000800F3 -:10AF50002100000008000000000000A00000000028 -:10AF600010000000000040004100410040000900C6 -:10AF70004100800080000000200000000040000030 -:10AF80000000000000000000000000000000004081 -:10AF900000000000000000000000000000000000B1 -:10AFA00000000000000000000000000000000000A1 -:10AFB0000000C000000000000800000008000000C1 -:10AFC0000000000008000000000000000800000071 -:10AFD0000008000808050011000000000000000043 -:10AFE00001800000000000000000000000000000E0 -:10AFF0000005000000000009000000000000000043 -:10B000000000000000000000000000000000000040 -:10B010000000000000000000000000000000000030 -:10B020000000000000000000000000000000000020 -:10B030000000000000000000000000000000000010 -:10B040000000000000000000000000000000000000 -:10B0500000000000000000880000008400000000E4 -:10B06000000040020000008400000000000000001A -:10B07000000000000000000000840000000000004C -:10B0800000000000000000000000000000000000C0 -:10B0900000000000000000000000000000000000B0 -:10B0A00000000000000000000000000000000000A0 -:10B0B0000800000000000000000000000000000088 -:10B0C0000000000000000000000000000000000080 -:10B0D0000000000000000000000000000000000070 -:10B0E0000000000084000000100010000000C000FC -:10B0F000A0214000018020800100008000000000AD -:10B10000000000000000000000000000000000003F -:10B1100000000084000000000008000000000000A3 -:10B12000000000000000000000000000000000001F -:10B13000000000000000000000000000000000000F -:10B1400000000000000000000000000000000000FF -:10B15000000000000000080000A0038400000000C0 -:10B16000211003C021000000000000000000408406 -:10B170000090000080000810A104080800100000E2 -:10B18000000000000000000000000000004000007F -:10B19000000000000000000000000000001100009E -:10B1A000000000000000000000000000000000009F -:10B1B000000000000000000000000000000000008F -:10B1C000000000000000000000000000000000007F -:10B1D00000000800000000000000900000000200D5 -:10B1E00000000000004100000021100008000000E5 -:10B1F0000000C0800005000000100000880800006A -:10B20000000000880004008400000000000000002E -:10B21000000000000000000000000000000000002E -:10B22000000000000000000000000000000000001E -:10B23000000000000000000000000000000000000E -:10B2400000000000000000000000000000000000FE -:10B2500000000000000008000000000000000000E6 -:10B2600000000000000000000000000000A000003E -:10B27000000000000002000000000001200020008B -:10B2800002000000000000000000000000000000BC -:10B2900000000000000000000000000000000000AE -:10B2A000000000000000000000000000000000009E -:10B2B000000000000000000000000000000000008E -:10B2C000000000000000000000000000000000007E -:10B2D000000000000000000000000000000001006D -:10B2E000A0000000000000000000000000000000BE -:10B2F00000000000010000009000000001A1C1005A -:10B300008808C0820000000000000000000000006B -:10B31000000000000000000000000000000000002D -:10B32000000000000000000000000000000000001D -:10B33000000000000000000000000000000000000D -:10B3400000000000000000000000000000000000FD -:10B3500000000000000000000000000000000000ED -:10B3600020000000000000000000000000000000BD -:10B3700000020009000010000503000000002190F9 -:10B3800090008000808900000000800000800000A4 -:10B3900000000000000000000000000000000000AD -:10B3A000000000000000000000000000000000009D -:10B3B000000000000000000000000000000000008D -:10B3C000000000000000000000000000000000007D -:10B3D000000000000000000000000000000000006D -:10B3E000000000000000000000000000000000005D -:10B3F0000000000000000000088000004100030081 -:10B400000300210083040300C00010008400020830 -:10B41000000000000000000000000000000000002C -:10B42000000000000000000000000000000000001C -:10B43000000000000000000000000000000000000C -:10B4400000000000000000000000000000000000FC -:10B4500000000000000000000000000000000000EC -:10B4600000000000000000000000000000000000DC -:10B4700000000000000000000000000800000000C4 -:10B48000000000A0C000A0000100000000000000BB -:10B4900000000000000000000000000000000000AC -:10B4A000000000000000000000000000000000009C -:10B4B000000000000000000000000000000000008C -:10B4C000000000000000000000000000000000007C -:10B4D000000000000000000000000000000000006C -:10B4E000000000000000000000000000000000005C -:10B4F000000000000000000000000000000000004C -:10B50000A1000000A00000A184C191C100000000C2 -:10B51000000000000000000000000000000000002B -:10B52000000000000000000000000000000000001B -:10B53000000000000000000000000000000000000B -:10B5400000000000000000000000000000000000FB -:10B5500000000000000000000000000000000000EB -:10B5600000000000000000040005001000020000C0 -:10B570000000000000000000100041000000004139 -:10B580000503A10900008009001180109105000049 -:10B590000004008000000000000000000000000027 -:10B5A000000000000000000000000000000000009B -:10B5B000000000000000000000000000000000008B -:10B5C000000000000000000000000000000000007B -:10B5D000000000000000000000000000000000006B -:10B5E000000000000000000000000000000000005B -:10B5F0000000000000000000000200000000000049 -:10B6000003000500210004002180031103219102A1 -:10B610000000001100820000000000000000000097 -:10B62000000000000000000000000000000000001A -:10B63000000000000000000000000000000000000A -:10B6400000000000000000000000000000000000FA -:10B6500000000000000000000000000000000000EA -:10B6600000000000000000000000000000000000DA -:10B6700000000000000000000000000000000000CA -:10B680000000000000000100000001400001A101D5 -:10B69000A100000000000000000000000000000009 -:10B6A000000000000000000000000000000000009A -:10B6B000000000000000000000000000000000008A -:10B6C000000000000000000000000000000000007A -:10B6D000000000000000000000000000000000006A -:10B6E000000000000000000000000000000000005A -:10B6F000000000000000000000000000000000004A -:10B70000000000000000000000000000820000E0D7 -:10B710000000810A0000000000000000000000009E -:10B720000000000000000000000000000000000019 -:10B730000000000000000000000000000000000009 -:10B7400000000000000000000000000000000000F9 -:10B7500000000000000000000000000000000000E9 -:10B7600000000000000000000000000000000000D9 -:10B7700000000000000000000000000000000000C9 -:10B7800000000000000000000000000000000C0CA1 -:10B790000C0C000000000000000000000000000091 -:10B7A0000000000000000000000000000000000099 -:10B7B0000000000000000000000000000000000089 -:10B7C0000000000000000000000000000000000079 -:10B7D0000000000000000000000000000000000069 -:10B7E0000000000000000000000000000000000059 -:10B7F0000000000000000000000000000000000049 -:10B800000000000000000000000000000000000038 -:10B810000C0C0C0C0F000000000000000F1F0014A7 -:10B820000000000000000000000000000000000018 -:10B830000000000000000000000000000000000008 -:10B8400000000000000000000000000000000000F8 -:10B8500000000000000000000000000000000000E8 -:10B8600000000000000000000000000000000000D8 -:10B8700000000000000000000000000000000000C8 -:10B8800000000000000000000000000000000000B8 -:10B89000000000003C3CF000F000000000000F0F32 -:10B8A0000000000000000000000000000000000098 -:10B8B0000000000000000000000000000000000088 -:10B8C0000000000000000000000000000000000078 -:10B8D0000000000000000000000000000000000068 -:10B8E0000000000000000000000000000000000058 -:10B8F0000000000000000000000000000000000048 -:10B900000000000000000000000000000000000037 -:10B910000000000040407C7CF000F00000000000CF -:10B920000000000000000000000000000000000017 -:10B930000000000000000000000000000000000007 -:10B9400000000000000000000000000000000000F7 -:10B9500000000000000000000000000000000000E7 -:10B9600000000000000000000000000000000000D7 -:10B9700000000000000000610006000D0000000053 -:10B9800000000000000000610006000D00000061E2 -:10B990000006000D000080610004C00900000000E6 -:10B9A0000000000000000000000000000000000097 -:10B9B0000000000000000000000000000000000087 -:10B9C0000000000000000000000000000000000077 -:10B9D0000000000000000000000000000000000067 -:10B9E0000000000000000000000000000000000057 -:10B9F00000000000000000000000000000C0AAEAF3 -:10BA00000000000000000000000000000000000036 -:10BA1000F00FFD0200FF00FF3F2A0F0AA300FF0006 -:10BA20000000000000000000000000000000000016 -:10BA30000000000000000000000000000000000006 -:10BA400000000000000000000000000000000000F6 -:10BA500000000000000000000000000000000000E6 -:10BA600000000000000000000000000000000000D6 -:10BA700000000000000000000000000000000000C6 -:10BA8000AAAA000000000000000000000000000062 -:10BA90000000F00FFD0200FB00FB3F2A0F0A03002D -:10BAA000FF00000000000000000000000000000097 -:10BAB0000000000000000000000000000000000086 -:10BAC0000000000000000000000000000000000076 -:10BAD0000000000000000000000000000000000066 -:10BAE0000000000000000000000000000000000056 -:10BAF0000000000000000000000000000000000046 -:10BB00000000000000000000000000005000500095 -:10BB10000000000000AA00AAC30000000000C3C388 -:10BB2000AAAA2AAA000000000000000000000000ED -:10BB30000000000000000000000000000000000005 -:10BB400000000000000000000000000000000000F5 -:10BB500000000000000000000000000000000000E5 -:10BB600000000000000000000000000000000000D5 -:10BB700000000000000000000000000000000000C5 -:10BB800000000000000000000000000000000000B5 -:10BB900000000000000000000000C30000000000E2 -:10BBA000C3C30000000000000000200000000000EF -:10BBB00000002000400000000000200020000000E5 -:10BBC00000000000880000000000000000000000ED -:10BBD0000000000020000000000020002000000005 -:10BBE0000000000000000002408000800080400053 -:10BBF00000000000000020004000000020002000A5 -:10BC00000000008000000000200000000000200074 -:10BC100000000000000020002000000000002000C4 -:10BC20000000410040004000000000000000000053 -:10BC30004020000000020000400000000000000062 -:10BC400040000040004010000000004000000000E4 -:10BC50000000004000024000000000000000000062 -:10BC600000000000400200000000800400024002CA -:10BC700080000000000040024000000000000000C2 -:10BC8000000000000002100240000000410000001F -:10BC90000000000000004000104000000000000014 -:10BCA00000000000A04080028000001000000200A0 -:10BCB0000000000002000200000008000000000078 -:10BCC000000000000000000000000800000000006C -:10BCD0000800020000000000000002000000000058 -:10BCE000000000000800000002000000000000004A -:10BCF0000000200000000000080008000000000014 -:10BD000000090800000040000200080000000000D8 -:10BD1000900000000000000000000800000000008B -:10BD200010100009000000030000000000400000A7 -:10BD30008000000000000000000000000000000083 -:10BD400000000000000000000000000000000000F3 -:10BD50002000000000000000000000000008008239 -:10BD600000000000000000000000000000000000D3 -:10BD70000000000080000000000000000400100827 -:10BD80000000000000000000800000000000000033 -:10BD9000000000000000000000000000000000089B -:10BDA000040020000000000000C0000800000000A7 -:10BDB000000000000000000000000000000000087B -:10BDC0000000000000000000000000000000000073 -:10BDD0000000000000000000000000004000000023 -:10BDE0000000000000000000000000000000000053 -:10BDF0000000000000000000000000000000000043 -:10BE000000000000000000000000A0000000000092 -:10BE10000000000000000000000000000000000022 -:10BE2000000000080008100000000000A000400012 -:10BE3000000000000000000000100084000000006E -:10BE400000000000000000000000000000000000F2 -:10BE500000000000000000000000000000000000E2 -:10BE600000000000000000000000000000000000D2 -:10BE700000000000000000000000000000000000C2 -:10BE800000000000000000000000000000000000B2 -:10BE900000000400000000A00000000000000000FE -:10BEA000000000000008000000000000000000008A -:10BEB000000000000000001100000000000500006C -:10BEC000080000000000000000000000000000006A -:10BED0000000000000000000000000000000000062 -:10BEE00000040000C000000000000000000000008E -:10BEF0000000000000800080008000800040000002 -:10BF000000400000000000000040000000000000B1 -:10BF10000000000000000004000000040000000019 -:10BF2000000000000000000000000000000000040D -:10BF300000000000090000000900090000000000E6 -:10BF400000000000000000000000000000000000F1 -:10BF500000000000000000000000000000000020C1 -:10BF600000000000000000000000000000000000D1 -:10BF700000000000000000040004000400040000B1 -:10BF800000000000000000000000000000000000B1 -:10BF900000000004000400C0000000C00000000019 -:10BFA0000000009000000000000000000000000001 -:10BFB0000000000000000000000000000000001071 -:10BFC0000000000000000000000000000000000071 -:10BFD000000000000000000000000000A0000000C1 -:10BFE0000000C000000000000000A00000002000D1 -:10BFF000C000000008000000000000000000000079 -:10C000000000000000000000000000000000000030 -:10C010000000000000080000000000000000000018 -:10C020000000000000000000000000000000000010 -:10C0300000000000000400000000000000000000FC -:10C0400000000000000000000000000000000000F0 -:10C0500000000000000000000000000000000000E0 -:10C0600000000000000000000000000000000000D0 -:10C0700000000000000000000000000000000000C0 -:10C0800000000000000000000000000000000000B0 -:10C0900000000000000000000000000000000000A0 -:10C0A000000000000000000000000000050000008B -:10C0B0001000210005000001100000000000000039 -:10C0C0000000000000050000000000000008000063 -:10C0D0000000000000000000080000000000000058 -:10C0E0000000000000000800000000000000000048 -:10C0F0000000000000000000000000000000000040 -:10C10000000000000000000000000000000090009F -:10C1100000000000000000000000000000000021FE -:10C1200000000000000000000000000040000000CF -:10C1300088000000000000000000008000000000F7 -:10C1400000000000000000000000000000000000EF -:10C1500000000000000000000000000000000000DF -:10C1600000000000000000000000000000000000CF -:10C1700000000000000000000000000000000000BF -:10C1800000000000000000000000000000000000AF -:10C190000000000000000000000800000000000097 -:10C1A000000000000000000000000000000000008F -:10C1B000000000000000110000000000000400006A -:10C1C000000000000000000000000000000000006F -:10C1D000000000000000000000000000000000005F -:10C1E000000000000000000000000000000000004F -:10C1F000000000000000000000000000000000003F -:10C20000000000000001000100000000000000002C -:10C21000000000000000000000000000000000001E -:10C22000000000000000000000000000000000000E -:10C23000000000000000000001008400A1000000D8 -:10C2400000000000000000000000000000000000EE -:10C2500000000000000000000000000000000000DE -:10C2600000000000000000000000000000000000CE -:10C2700000000000000000000000000000000000BE -:10C28000000000000000001100100000000000008D -:10C29000000000000000000000000000000000009E -:10C2A000000000000000000000000000000000008E -:10C2B0000000000000000000000011002100030049 -:10C2C00000000000000200800000000000000000EC -:10C2D000000000000000000000000000000000005E -:10C2E000000000000000000000000000000000004E -:10C2F000000000000000000000000000000000003E -:10C300000000000011030000000310000000000006 -:10C31000000000000000000000000000008000009D -:10C32000000000000000000000000000000000000D -:10C330000000000000000000000000000888080065 -:10C3400010080800000000000010000000000000BD -:10C3500000000000000000000000000000000000DD -:10C3600000000000000000000000000000000000CD -:10C3700000000000000000000000000000000000BD -:10C3800000000000000001000000000001000000AB -:10C39000000000000000000000000000000000108D -:10C3A000000000000000000000000000000000008D -:10C3B000000000000000000000000000000001106C -:10C3C000010000000100000000000000000000006B -:10C3D000000000000000000000000000000000005D -:10C3E000000000000000000000000000000000004D -:10C3F000000000000000000000000000000000003D -:10C4000000000000000000000000400000000001EB -:10C41000000000000000000000000000000000001C -:10C42000000000000000000000000000000000000C -:10C4300000000000000000000000000000000000FC -:10C44000000090000001000100000000000000005A -:10C4500000000000000000000000000000000000DC -:10C4600000000000000000000000000000000000CC -:10C4700000000000000000000000000000000000BC -:10C4800000000000000000000000000000000003A9 -:10C49000201000000000000000000000000000006C -:10C4A000000000000000000000000000000000008C -:10C4B000000000000000000000000000000000007C -:10C4C00000000000000000080808000080000000D4 -:10C4D000000000000000000000000000000000005C -:10C4E000000000000000000000000000000000004C -:10C4F000000000000000000000000000000000003C -:10C50000000000000000000000000000000011001A -:10C51000100000000000000000000000000000000B -:10C5200000000000040009000000000000000000FE -:10C5300000000000000000000000000000000000FB -:10C54000000000002000100008000808C0000800DB -:10C55000C000C0000000000000000000000000005B -:10C5600000000000000000000000000000000000CB -:10C5700000000000000000000000000000000000BB -:10C5800000000000000000000000000000000000AB -:10C590000100010000000000000000000000000099 -:10C5A000000000000000000000000000000000008B -:10C5B000000000000000000000000000000000007B -:10C5C00000000000000001840000010001010000E3 -:10C5D000000000000000000000000000000000005B -:10C5E000000000000000000000000000000000004B -:10C5F000000000000000000000000000000000003B -:10C60000000000000000000000000000000000002A -:10C61000000000E00000000000000000000000003A -:10C62000000000000000000000000000000000000A -:10C6300000000000000000000000000000000000FA -:10C640000000000000000000000000E0000000000A -:10C650006666766600000000000000000000000032 -:10C6600000000000000000000000000000000000CA -:10C6700000000000000000000000000000000000BA -:10C6800000000000000000000000000000000000AA -:10C69000000000000000000000000000000000009A -:10C6A000000000000000000000000000000000008A -:10C6B000000000000000000000000000000000007A -:10C6C000000000000000000000000000000000006A -:10C6D000000000003000000000000000000000002A -:10C6E000000000000000000000000000000000004A -:10C6F000000000000000000000000000000000003A -:10C700000000000000000000000000000000000029 -:10C710000000000000000000000000000000000019 -:10C720000000000000000000000000000000000009 -:10C7300000000000000000000000000000000000F9 -:10C7400000000000000000000000000000000000E9 -:10C7500000000000000000000000000000000000D9 -:10C7600000000000000000000000000000000000C9 -:10C7700000000000000000000000000000000000B9 -:10C7800000000000000000000000000000000000A9 -:10C790000000000000000000000000000000000099 -:10C7A0000000000000000000000000000000000089 -:10C7B0000000000000000000000000000000000079 -:10C7C0000000000000000000000000000000000069 -:10C7D0000000000000000000000000000000000059 -:10C7E0000000000000000000000000000000000049 -:10C7F0000000000000000000000000000000000039 -:10C800000000000000000000000000000000000028 -:10C810000000000000000000000000000000000018 -:10C820000000000000000000000000000000000008 -:10C8300000000000000000000000000000000000F8 -:10C8400000000000000000000000000000000000E8 -:10C8500000000000000000000000000000000000D8 -:10C8600000000000000000000000000000000000C8 -:10C8700000000000000000000000000000000000B8 -:10C8800000000000000000000000000000000000A8 -:10C890000000000000000000000000000000000098 -:10C8A0000000000000000000000000000000000088 -:10C8B0000000000000000000000000000000000078 -:10C8C0000000000000000000000000000000000068 -:10C8D00000000000000000000000800000000000D8 -:10C8E0000000000000000000000000000000000048 -:10C8F0000000000000000000000000000000000038 -:10C900000000000000000000000000000000000027 -:10C9100000000000000000000000000000610006B0 -:10C92000000D0000000000000000000000000000FA -:10C930000000000000610006000D00000000000083 -:10C9400000000000000000000000000000000000E7 -:10C950000000000000610007000D00000000000062 -:10C9600000000000000000000000000000000000C7 -:10C9700000000000000000000000000000000000B7 -:10C9800000000000000000000000000000000000A7 -:10C9900000000000000000000000000000000F0088 -:10C9A0000F00000000FF0000000000000000000079 -:10C9B0000000000000005500000000000000000022 -:10C9C0000000000000000000000000000000000067 -:10C9D00000000000000000CE00FEFF0055FF000038 -:10C9E0000000000000000000000000000000000047 -:10C9F0000000000000000000000000000000000037 -:10CA00000000000000000000000000000000000026 -:10CA10000000000000000000000000000000000016 -:10CA20000F000F00000000FF0000000000000000E9 -:10CA300000000000000000005500000000000000A1 -:10CA400000000000000000000000000000000000E6 -:10CA5000000000000000000000CE00FEFFFF55FFB8 -:10CA600000000000000000000000000000000000C6 -:10CA700000000000000000000000000000000000B6 -:10CA800000000000000000000000000000000000A6 -:10CA90000000000000000000000000000000000096 -:10CAA00000000C0C0C0C00003C3C000000000000DE -:10CAB0000000000000000000000000000000000076 -:10CAC0000000000000000000000000000000000066 -:10CAD0000000000000000000000000000000AA00AC -:10CAE00014A0000000000000000000000000000092 -:10CAF0000000000000000000000000000000000036 -:10CB00000000000000000000000000000000000025 -:10CB10000000000000000000000000000000000015 -:10CB2000000000000C0C0C0C00003C3C000000005D -:10CB300000000000000000000000000000000000F5 -:10CB400000000000000000000000000000000000E5 -:10CB500000000000000000000000000000000000D5 -:10CB6000000014A00000000000000000840000008D -:10CB700000000000000000000400100000000000A1 -:10CB8000200088000000000000000000C00000003D -:10CB90000000000000000000000020000000000075 -:10CBA0002000000000020000000040000000200003 -:10CBB0000000000000000000000000002000000055 -:10CBC0000000400041004000000040000000200044 -:10CBD0000000880088000000000000002000000025 -:10CBE0000000000020000000000000020000000023 -:10CBF0000000000000000000000000000000000035 -:10CC00000000000000000000000000020000000022 -:10CC10000000000200000000000000000000000012 -:10CC200000880088008800000000400000024000EA -:10CC300040000000000000020000000200020000AE -:10CC400040002100C10004000000000000020000BC -:10CC500000020000000000000000000000000002D0 -:10CC60000000000000000000000000400000000084 -:10CC700000000000000000000000000000000000B4 -:10CC800000000000000000000000000000000000A4 -:10CC90000000000000000000000000400000020052 -:10CCA00000400040020008100001000000000000E9 -:10CCB00000000200000000000000020000009000E0 -:10CCC0009000004004400002044000000000000901 -:10CCD0000000000000000000000000000000000054 -:10CCE00000000003000000000841000000000000F8 -:10CCF000000000000000000005000000000000002F -:10CD00000000000000000000000000000000000023 -:10CD10000000000000000000000000000000000013 -:10CD20000000000000000000000100000000000002 -:10CD300000000000000000000000000000000000F3 -:10CD400000000000000080000301800000000000DF -:10CD500000000000000000000000000000000008CB -:10CD60000000000000000000000080000002000041 -:10CD700000000000000000000000000000000000B3 -:10CD800000000000000000000000000000000000A3 -:10CD90000000000000000000000000000000000093 -:10CDA0000000000000000000000000000000000083 -:10CDB0000000000000000000000000000000000073 -:10CDC0000008000000050000000000000000000056 -:10CDD000000000000000001000100000001084009F -:10CDE000000000000000000000000800000000013A -:10CDF0000000000000000000000000000000000033 -:10CE00000000000000000000000000000000000022 -:10CE10000000000000000000000000000000000012 -:10CE200000000000000000000088000008C00000B2 -:10CE300000000000000000000000000000000000F2 -:10CE400000000000000000000000090000000000D9 -:10CE500000000000000000000000030000000000CF -:10CE600000001000000000000000000000000000B2 -:10CE70000040002000000020000200000000A00090 -:10CE8000000000000040000000040000004000001E -:10CE90000000004100000000080000000000000049 -:10CEA00000000000080000000041000500410041B2 -:10CEB00000000000000000000000000000400040F2 -:10CEC00000400000000000000000004104000800D5 -:10CED00020840000000508000000000000000000A1 -:10CEE000000000000000000000000004000000003E -:10CEF00000000000000100000001020000004000EE -:10CF0000000000000200000002000000000000001D -:10CF1000000000000200000000000000000000000F -:10CF20000000000000000000000000000000000001 -:10CF300000000000000000000000000000000000F1 -:10CF400000000000000000000084000000A0800439 -:10CF50000284000200000000000000000000000049 -:10CF600000000000000000000000000000000000C1 -:10CF7000000000000002000200000000000000208D -:10CF800000000000000000000000000000000000A1 -:10CF90000000000000000000000000000000000091 -:10CFA0000000000000000000000000000000000081 -:10CFB0000000000000000000000000000021000050 -:10CFC0000000000000000000000000000000000061 -:10CFD0000400000000000000000500410000000007 -:10CFE0000000000000100000000000000000000031 -:10CFF000100000000000000100010000000000001F -:10D000000000000000000000000000000000000020 -:10D010000000000000000000000000000000000010 -:10D020000000000000000000000000000000000000 -:10D0300000000000000000000000000003000000ED -:10D0400000000000000000000000000000000000E0 -:10D050000000800000000000000000000000000050 -:10D06000000000000000000000840000000000003C -:10D0700005100084000000100000002000000820BF -:10D0800000000000000000000000000000000000A0 -:10D090000000000000000000000000000000000090 -:10D0A0000000000000000000000000000000000080 -:10D0B000000000000000000000000000002100004F -:10D0C0000000000000000000000000000000000060 -:10D0D00000000000010001410004001000000010E9 -:10D0E00000000000001000000000000000008200AE -:10D0F000000000110000000000000000000100001E -:10D10000000500000000000000000000000000001A -:10D1100000000000000000000000001000000000FF -:10D1200000000000000000000000000000000000FF -:10D130000000000000C0000000000000000000002F -:10D1400000000000000000000000000000000000DF -:10D1500000000000200004044000004000820000A5 -:10D1600000000000000000000000000000000000BF -:10D1700000000000000000000000000000089020F7 -:10D180008582A08400000000000000000000000074 -:10D19000000000000000000000000000000000008F -:10D1A000000000000000000000000000000000007F -:10D1B000000000000000040000000000000000006B -:10D1C000000000000000000000000000000000005F -:10D1D000000000000000400584210088821100004A -:10D1E000000000000000000000000000000000003F -:10D1F0000000000000000000000000000000000827 -:10D2000085208920808300000000000000000000CD -:10D21000000000000000000000000000000000000E -:10D2200000000000000000000000000000000000FE -:10D2300000000000000000000000000000000000EE -:10D2400000000000000000000000000000000000DE -:10D25000000000000000000080080010008080A195 -:10D2600000000000000000000000000000000000BE -:10D2700000000000000000000000000000000000AE -:10D280000080001180050083000000000000000005 -:10D29000000000000000000000000000000000008E :10D2A000000000000000000000000000000000007E -:10D2B000000000000000000000008000000080006E +:10D2B000000000000000000000000000000000006E :10D2C000000000000000000000000000000000005E -:10D2D000000000000000000000008000000380A0AB -:10D2E0008880000000000000000000000000000036 -:10D2F00000000000000000000000000000008000AE -:10D30000000008402001A0894091000000000000BA +:10D2D000000000000000000000000000000000004E +:10D2E000000000000000000000000000000000003E +:10D2F000000000000000000000000000000000002E +:10D30000000000000000000000000000000000001D :10D31000000000000000000000000000000000000D :10D3200000000000000000000000000000000000FD -:10D330000000000000000000000040001000880015 -:10D34000820000000000000000000000000000005B -:10D3500000000000000000000000000008000401C0 -:10D36000A0089190000000000000000000000000F4 -:10D37000000000000000000000000000000010009D -:10D380000400A000400801004190000000000000DF +:10D3300000000000000000000000000000000000ED +:10D3400000000000000000000000000000000000DD +:10D3500000000000000000000000000000000000CD +:10D3600000000000000000000000000000000000BD +:10D3700000000000000000000000000000000000AD +:10D38000000000000000000000000000000000009D :10D39000000000000000000000000000000000008D :10D3A000000000000000000000000000000000007D :10D3B000000000000000000000000000000000006D :10D3C000000000000000000000000000000000005D -:10D3D0000000000000000000000000000000C0A0ED -:10D3E0000002000502100000000000000000000024 +:10D3D000000000000000000000000000000000004D +:10D3E000000000000000000000000000000000003D :10D3F000000000000000000000000000000000002D -:10D40000000000000000804010030200050500003D +:10D40000000000000000000000000000000000001C :10D41000000000000000000000000000000000000C :10D4200000000000000000000000000000000000FC :10D4300000000000000000000000000000000000EC :10D4400000000000000000000000000000000000DC :10D4500000000000000000000000000000000000CC -:10D460008080000000218082000000000000000099 +:10D4600000000000000000000000000000000000BC :10D4700000000000000000000000000000000000AC -:10D4800000000000000000000521102185002000A0 +:10D48000000000000000000000000000000000009C :10D49000000000000000000000000000000000008C :10D4A000000000000000000000000000000000007C :10D4B000000000000000000000000000000000006C -:10D4C00000000080000000000000000000000000DC +:10D4C000000000000000000000000000000000005C :10D4D000000000000000000000000000000000004C -:10D4E0000000000200008000801100000000000029 +:10D4E000000000000000000000000000000000003C :10D4F000000000000000000000000000000000002C -:10D5000000000000000000000000000191001182F6 +:10D50000000000000000000000000000000000001B :10D51000000000000000000000000000000000000B :10D5200000000000000000000000000000000000FB :10D5300000000000000000000000000000000000EB -:10D5400000000000000800100000000000000000C3 +:10D5400000000000000000000000000000000000DB :10D5500000000000000000000000000000000000CB -:10D56000000000000800208840C002000000000009 +:10D5600000000000000000000000000000000000BB :10D5700000000000000000000000000000000000AB -:10D58000000000000000000000880000000600000D -:10D590004300000000000000000000000000000048 +:10D58000000000000000000000000000000000009B +:10D59000000000000000000000000000000000008B :10D5A000000000000000000000000000000000007B :10D5B000000000000000000000000000000000006B :10D5C000000000000000000000000000000000005B :10D5D000000000000000000000000000000000004B -:10D5E00000000000000000000000070082000000B2 +:10D5E000000000000000000000000000000000003B :10D5F000000000000000000000000000000000002B -:10D600000000000000000000000000000000F0AA80 -:10D61000F0AAFF3CFF3C00000000000000000000FA +:10D60000000000000000000000000000000000001A +:10D61000000000000000000000000000000000000A :10D6200000000000000000000000000000000000FA -:10D6300000000000000000000000000000000000EA -:10D6400000000000000000000000000000000000DA -:10D6500000000000000000000000000000000000CA -:10D660000000000000000000C3C3C3C305050F0590 -:10D6700000000000000000000000000000000000AA -:10D68000000000000000000000000000000000009A -:10D690000FAA0FAA003C003C0000000000000000A0 -:10D6A000000000000000000000000000000000007A -:10D6B000000000000000000000000000000000006A -:10D6C000000000000000000000000000000000005A -:10D6D000000000000000000000000000000000004A -:10D6E000000000000000000000006BC3C3C3030380 -:10D6F0000F03000000000000000000000000000018 +:10D6300000000000000004000000000020000000C6 +:10D6400000000200000004000000040000000000D0 +:10D6500000000000000004000000000020000001A5 +:10D66000040004002000000004000400200000006A +:10D670000000000000000000880000000000200002 +:10D6800020002000200000002000200020000000DA +:10D6900088000000000000002000000004002000BE +:10D6A0000008000000000000000000000000000072 +:10D6B000000000000000000000001000004000001A +:10D6C000400000000000000000000000000000001A +:10D6D00000C000000000000040000000000000004A +:10D6E000000000000000000000000000000000003A +:10D6F0000000000000000000000000000000000228 :10D700000000000000000000000000000000000019 -:10D710000000F0C0F0000000000000000000000069 -:10D7200000000000000000000000000000000000F9 -:10D7300000000000000000000000000000000000E9 -:10D74000000000000000000000000000000057552D -:10D75000555500000000000000000000000000001F -:10D760000000000000000000000000001414F4F4A9 -:10D77000C0FF757500000000000000000000000000 +:10D710000000000000000000000000000400000005 +:10D7200000000040000000000000000400040004AD +:10D7300000040000000000000000000000000000E5 +:10D7400000000000000000000000000000000200D7 +:10D750000000000000400000000000000000000089 +:10D7600000000000000000000000000000000000B9 +:10D770000000001000000000000000000000004158 :10D780000000000000000000000000000000000099 -:10D790000FFF0FFF00C000003F0F3000000000002F -:10D7A0000000000000000000000000000000000079 -:10D7B0000000000000000000000000000000000069 -:10D7C0000000000000000000000000000000000059 -:10D7D0000300000000000000000000000000000046 -:10D7E0000000000000000000000000000000FF1426 -:10D7F000FF1400FF5555000000000000000000006D -:10D800000000000000000000000000000000000018 -:10D810000000F0F0FFFF8061003E000D00000000FE -:10D8200000000000000000000000000000000000F8 -:10D8300000000000000000000000000000000000E8 -:10D8400000000000000000000000000000000000D8 -:10D8500000000000000000000000000000000000C8 +:10D790000000000000000000000000000000000089 +:10D7A0000000000000000000000000000001000177 +:10D7B0000001000100000000000000000000000067 +:10D7C0000000000800080000000800080000000039 +:10D7D00000000000000000080000000000000090B1 +:10D7E0000008000800000008000000080008000011 +:10D7F0000082000000000000008400000000000023 +:10D800000000000800080008008400080008000864 +:10D810000000000000000000000000000000000008 +:10D820000000000800820000002100000008000045 +:10D8300000000000000000000008000000000000E0 +:10D8400000080000000000000000000000000000D0 +:10D850000000000000004000000000000000000088 :10D8600000000000000000000000000000000000B8 -:10D8700080610006000D00000000000000000000B4 -:10D880000000000000000000000000000000000098 -:10D890000000000000000000DD00DF00AAAA9A9A44 +:10D8700000000000000000000000000000000000A8 +:10D880000000000000000000000000080000000090 +:10D890000000000000000000000000050000000083 :10D8A0000000000000000000000000000000000078 :10D8B0000000000000000000000000000000000068 -:10D8C0000000000000000000000000000000000058 +:10D8C0000000000000080000000000000000000050 :10D8D0000000000000000000000000000000000048 -:10D8E0000000000000000000000000000000000038 -:10D8F000000000000000000000FF00000000000029 +:10D8E0000800000000000000000000000000000030 +:10D8F0000000000000000000000000000000000028 :10D900000000000000000000000000000000000017 -:10D91000000000000000000000003F002C00AAAA48 -:10D92000AAAA0000000000000000000000000000A3 +:10D910000000000000000000000000000000000007 +:10D9200000000000000000000000000000000000F7 :10D9300000000000000000000000000000000000E7 :10D9400000000000000000000000000000000000D7 :10D9500000000000000000000000000000000000C7 -:10D9600000000000000000000000000000000000B7 -:10D970000000000000000000000000FF00000000A8 -:10D980000000000000000000000000000000000097 -:10D99000000000000000000000000000550004200E +:10D960000080000000000000000000000000000037 +:10D97000000000000800000000000000000000009F +:10D98000000000000000000000000000A0000000F7 +:10D990000000000000000000000000000000000087 :10D9A0000000000000000000000000000000000077 -:10D9B0000000000000000000000000000000000067 +:10D9B00000000000000000A00000000000000000C7 :10D9C0000000000000000000000000000000000057 -:10D9D0000000000000000000000000000000000047 -:10D9E0000000000000000000000000000000000037 -:10D9F0000000000000000000003C0000AAAA000097 +:10D9D0000000000005000000000000000000000042 +:10D9E0000000002000000000000000000000008493 +:10D9F0000000000000000000000000000000000027 :10DA00000000000000000000000000000000000016 -:10DA10000000000000000000000000000000802264 -:10DA20000080000000000000000000000000000076 -:10DA300000000000000000000000000000000000E6 -:10DA400000000000000000000000000000000000D6 -:10DA500000000000000000000000000000000000C6 -:10DA600000000000000000000000000000000000B6 -:10DA700000000000000000000000003C0000AAAA16 +:10DA10000000000000000000000000000000000006 +:10DA200000000000000000000000000002000000F4 +:10DA3000200000000000000000000009200000009D +:10DA400020020000000000000000000000000000B4 +:10DA500000000000000020000000000000000100A5 +:10DA60000000002000000000000000000000000096 +:10DA7000000000080000000000000000000000009E :10DA80000000000000000000000000000000000096 :10DA90000000000000000000000000000000000086 -:10DAA0004000000000000000000000000000000036 -:10DAB0002000000000000000000000000000200026 -:10DAC0002000000000000000000000000000000036 -:10DAD00020000000040000000000000010002000F2 -:10DAE0000000100000000000000000000000000026 -:10DAF00000002000C00020000000000000004000E6 -:10DB000020001000C0000000000000000000000025 -:10DB1000880020000000000000000000000020003D -:10DB20000000200000000000000040000000400253 -:10DB300040000000000040000000000000024040E3 -:10DB40001000000000000000000000000000404045 -:10DB50000002000000004000000000020000400041 -:10DB60002120000040000000000200000000000032 -:10DB70000002400000000000000000000000002043 -:10DB800010020020400000000000400000000000E3 -:10DB90004002400000000020009000000000004013 -:10DBA00010020000004000400000000000000000E3 -:10DBB0000000000000000000000000000200020061 -:10DBC0000000004000000000000000000000000015 -:10DBD0000000000000000000000000000200004003 +:10DAA0000000000000000000000000000000000076 +:10DAB0000000000000000000000000000000000066 +:10DAC0000000000000000000000000000000000056 +:10DAD0000000000000000000000000000000000046 +:10DAE0000200000000010000000000000000000033 +:10DAF0000000000000000000000000000000000026 +:10DB00000000000000000000000000000000000015 +:10DB10000000000000000000000000000000000005 +:10DB200000000000000000000000000000000000F5 +:10DB300000000008000020080000000000000000B5 +:10DB400000000000000000000011000000000000C4 +:10DB500000000000000000000000000000000000C5 +:10DB600000000000000000000000000000000008AD +:10DB7000000000000000000000000000000800009D +:10DB8000000000000000000000000000080000008D +:10DB90000000000000000000000000000000000085 +:10DBA000000000000000000000000000000000086D +:10DBB0000000000000880000000000824100050015 +:10DBC000058200000000000041000000410000004C +:10DBD0000000000000000000050005000000000833 :10DBE0000000000000000000000000000000000035 -:10DBF0000000000000000000000000000000000025 -:10DC000000000000000000000040001000100000B4 +:10DBF00000820000000000000000000000000000A3 +:10DC00000000000000000000000000000000000014 :10DC10000000000000000000000000000000000004 :10DC200000000000000000000000000000000000F4 :10DC300000000000000000000000000000000000E4 :10DC400000000000000000000000000000000000D4 :10DC500000000000000000000000000000000000C4 -:10DC600000000000000000000000000000000000B4 +:10DC6000000000000000000090000008000000001C :10DC700000000000000000000000000000000000A4 -:10DC80000000000000000400000000000000000090 -:10DC900000000010008200000000000000000000F2 +:10DC80000000000000000000000000000000000094 +:10DC90000000000000000000000000000000000084 :10DCA0000000000000000000000000000000000074 :10DCB0000000000000000000000000000000000064 :10DCC0000000000000000000000000000000000054 -:10DCD0000000000000000400000000000000000040 -:10DCE0000000000000000000000000000000000034 -:10DCF000000000000000000800000000000000001C +:10DCD0000000000000000000000000000000000044 +:10DCE0000000000000000000110080000080000023 +:10DCF0000000000000000000000000000000000024 :10DD00000000000000000000000000000000000013 :10DD10000000000000000000000000000000000003 -:10DD20000000C0000000900010000900000000008A +:10DD200000000000000000000000000000000000F3 :10DD300000000000000000000000000000000000E3 -:10DD400000000000000000000000100000000000C3 +:10DD4000000000400000000500000000000000008E :10DD500000000000000000000000000000000000C3 -:10DD600000000000000000000000000000000000B3 -:10DD70000010000000000000000000000000400053 -:10DD80004000000000000000000000000000000053 -:10DD9000000000001000000000000000040000006F +:10DD60000000000000000000000000000080000033 +:10DD70000080000000000000000000000000000023 +:10DD80000000000000000000000000000000000093 +:10DD90000000000000000000000000000000000083 :10DDA0000000000000000000000000000000000073 -:10DDB000000400400040000000000040000200009D -:10DDC00000000000000000000040000000400000D3 -:10DDD0000000000000000000000000400000000003 -:10DDE0000000000000000000001100000000000022 -:10DDF00000000000000000000000004100000041A1 -:10DE0000004100410041004000000000104000407F -:10DE1000000400400040000000000000000000007E -:10DE200000000000000000000000000008400000AA -:10DE300000000000000000000004000000000200DC -:10DE40000000400000000000000000000000000092 -:10DE500000900000000000000002004000000040B0 -:10DE60000040000000000000000000000000000072 -:10DE70000000000000100000000000002000000072 -:10DE8000020000C020000000009000400000008858 -:10DE900000200090000200100000000000000000C0 -:10DEA00000000000000000000000000400000084EA +:10DDB0000000000000000000000000000000000063 +:10DDC0000000000000010000000000000000000052 +:10DDD0000000000000000000000000000000000043 +:10DDE0000000000000000000000000000000002013 +:10DDF000000000C000000000000000000000000063 +:10DE00000000000000000000000000000000000012 +:10DE10000000000000000000000000000000000002 +:10DE200000000000000000000000000000000000F2 +:10DE300000000000000000000000000000000000E2 +:10DE4000000000000000000040008400000000000E +:10DE500000000000000000000000000000000000C2 +:10DE600000000000000000000000000000000100B1 +:10DE70000088020001000000000000000000000017 +:10DE80000000000000000000000000000000000092 +:10DE90000000000000000000000000000000000082 +:10DEA0000000000000000000000000000000000072 :10DEB0000000000000000000000000000000000062 -:10DEC0000000000000000000000000000000000052 +:10DEC00000000000000000000000800000000900C9 :10DED0000000000000000000000000000000000042 :10DEE0000000000000000000000000000000000032 -:10DEF0000000000000000000000000000000000022 +:10DEF00041000080800009000000000000000000D8 :10DF00000000000000000000000000000000000011 :10DF10000000000000000000000000000000000001 -:10DF200000000000080000000000000000000000E9 -:10DF30000000210005000088000000000000000033 +:10DF200000000000000000000000000000000000F1 +:10DF300000000000000000000000000000000000E1 :10DF400000000000000000000000000000000000D1 :10DF500000000000000000000000000000000000C1 -:10DF6000000000000000000000000000000000A011 -:10DF700000000000000000000000000000000000A1 -:10DF8000000000000000000000000000400000044D -:10DF900000040084000000000000000000000000F9 +:10DF600000000000000000000000000000000000B1 +:10DF70000000001100000080000000000000000010 +:10DF8000000000000500000000000000000000008C +:10DF90000000000000000000000000000000000081 :10DFA0000000000000000000000000000000000071 -:10DFB00000000084000000000000000000000000DD +:10DFB0000000000000000000000000000000000061 :10DFC0000000000000000000000000000000000051 :10DFD0000000000000000000000000000000000041 :10DFE0000000000000000000000000000000000031 -:10DFF0000000000000000000000000000000000021 -:10E000000000000000000000000000000000000010 -:10E0100000000000000000000000000000100000F0 +:10DFF00000000000000100000040000000000000E0 +:10E00000000000040000010000000000000000000B +:10E010000000000000000000000000000000000000 :10E0200000000000000000000000000000000000F0 -:10E030000000000000000900400220004000000035 +:10E0300000000000000000000000000000000000E0 :10E0400000000000000000000000000000000000D0 -:10E050004000000040000000000000000000004000 -:10E060000040000020000000000000000000000050 -:10E07000000000A000000000000000000000000000 -:10E080002000020800000000000000000000050061 -:10E0900000881188009011000000090000000004B1 +:10E0500002E00000000000000000000000000000DE +:10E0600000000000000000000000000000000000B0 +:10E0700000000000000000000000070082210000F6 +:10E080000000000000000000000000000000000090 +:10E090000000000000000000000000000000000080 :10E0A0000000000000000000000000000000000070 :10E0B0000000000000000000000000000000000060 :10E0C0000000000000000000000000000000000050 :10E0D0000000000000000000000000000000000040 :10E0E0000000000000000000000000000000000030 -:10E0F0000000000000000000000000000000000020 +:10E0F000000000000000000000000000F0F0000040 :10E10000000000000000000000000000000000000F :10E1100000000000000000000000000000000000FF :10E1200000000000000000000000000000000000EF @@ -179777,7 +175680,7 @@ :10E1400000000000000000000000000000000000CF :10E1500000000000000000000000000000000000BF :10E1600000000000000000000000000000000000AF -:10E17000000000000000000000000000000000009F +:10E170000000000000000000000000000000F0F0BF :10E18000000000000000000000000000000000008F :10E19000000000000000000000000000000000007F :10E1A000000000000000000000000000000000006F @@ -179785,8 +175688,8 @@ :10E1C000000000000000000000000000000000004F :10E1D000000000000000000000000000000000003F :10E1E000000000000000000000000000000000002F -:10E1F000000000000000000000000000000000001F -:10E20000000000000000000000000000000000000E +:10E1F00000000000000000000000000000000F0F01 +:10E200000000FFFF00000000000000000000000010 :10E2100000000000000000000000000000000000FE :10E2200000000000000000000000000000000000EE :10E2300000000000000000000000000000000000DE @@ -179794,15 +175697,15 @@ :10E2500000000000000000000000000000000000BE :10E2600000000000000000000000000000000000AE :10E27000000000000000000000000000000000009E -:10E28000000000000000000000000000000000008E +:10E280000F0F000000000000000000000000000070 :10E29000000000000000000000000000000000007E :10E2A000000000000000000000000000000000006E :10E2B000000000000000000000000000000000005E :10E2C000000000000000000000000000000000004E -:10E2D000000000000000000000000000000000003E +:10E2D000000000000000000000650006000F2000A4 :10E2E000000000000000000000000000000000002E :10E2F000000000000000000000000000000000001E -:10E30000000000000000000000000000000000000D +:10E3000005002A00054000A80000000000000000F1 :10E3100000000000000000000000000000000000FD :10E3200000000000000000000000000000000000ED :10E3300000000000000000000000000000000000DD @@ -179851,1419 +175754,1419 @@ :10E5E000000000000000000000000000000000002B :10E5F000000000000000000000000000000000001B :10E60000000000000000000000000000000000000A -:10E6100000000000000000000000000000000000FA -:10E6200000000000000000000000000000000000EA +:10E6100000000000000000000000000000030000F7 +:10E6200000000400000000000000000000000000E6 :10E6300000000000000000000000000000000000DA -:10E6400000000000000000000000000000000000CA +:10E6400000002000000000000000000000000000AA :10E6500000000000000000000000000000000000BA :10E6600000000000000000000000000000000000AA :10E67000000000000000000000000000000000009A -:10E68000000000000000000000000000000000008A +:10E680000000000000000000000000020002000086 :10E69000000000000000000000000000000000007A :10E6A000000000000000000000000000000000006A :10E6B000000000000000000000000000000000005A -:10E6C000000000000000000000000000000000004A +:10E6C000000000000000000000000040000000000A :10E6D000000000000000000000000000000000003A -:10E6E000000000000000000000000000000000002A -:10E6F000000000000000000000000000000000001A -:10E700000000000000000000000000000000000009 -:10E7100000000000000000000000000000000000F9 +:10E6E0000000000000000000020000000000000028 +:10E6F00000000000020000000000000000080040D0 +:10E700000000000000000000008000C000800080C9 +:10E7100000000000000000000080008000A020C079 :10E7200000000000000000000000000000000000E9 -:10E7300000000000000000000000000000000000D9 +:10E730000000000000000000000000000000004099 :10E7400000000000000000000000000000000000C9 -:10E7500000000000000000000000000000000000B9 -:10E7600000000000000000000000000000000000A9 -:10E770000000000000000000000000000000000099 -:10E780000000000000000000000000000000000089 -:10E790000000000000000000000000000000000079 -:10E7A0000000000000000000000000000000000069 -:10E7B0000000000000000000000000000000000059 -:10E7C0000000000000000000000000000000000049 -:10E7D0000000000000000000000000000000000039 -:10E7E0000000000000000000000000000000000029 -:10E7F0000000000000000000000000000000000019 -:10E800000000000000000000000000000000000008 -:10E8100000000000000000000000000000000000F8 -:10E8200000000000000000000000000000000000E8 -:10E8300000000000000000000000000000000000D8 -:10E8400000000000000000000000000000000000C8 -:10E8500000000000000000000000000000000000B8 -:10E8600000000000000000000000000000000000A8 -:10E870000000000000000000000000000000000098 -:10E880000000000000000000000000000000000088 -:10E890000000000000000000000000000000000078 -:10E8A0000000000000000000000000000000000068 -:10E8B0000000000000000000000000000000000058 +:10E750000000100000000000000000000080000029 +:10E760000000000000000084000000840008000495 +:10E770000008000800080000000000840000008479 +:10E7800000080000000000000000004000210040E0 +:10E7900000400040004000840000002000200041B4 +:10E7A00080210000000800040000000000000000BC +:10E7B00000000084000000000000000000080008C5 +:10E7C0000008000000080008000800080008000811 +:10E7D0000000000880000008004000000010000455 +:10E7E000000800000084010001000008008800000B +:10E7F0000000000000110000008800090088008867 +:10E800000005012101030005002100210020000571 +:10E810000009000810200000002000400021000036 +:10E8200000082000000000000000000300000008B5 +:10E8300000000005000000000000000000000000D3 +:10E8400000000000002100000000000000000000A7 +:10E850000000040000210000000000000000000093 +:10E860000000000000040009100020000001000466 +:10E870000000000000000000000000040000000490 +:10E880000004030020001000000000000000000150 +:10E890004100000000C080010000000100010000F4 +:10E8A00000000000800000000000000000000000E8 +:10E8B0000000000000000000000000080000000050 :10E8C0000000000000000000000000000000000048 :10E8D0000000000000000000000000000000000038 -:10E8E0000000000000000000000000000000000028 -:10E8F0000000000000000000000000000000000018 -:10E900000000000000000000000000000000000007 -:10E9100000000000000000000000000000000000F7 -:10E9200000000000000000000000000000000000E7 +:10E8E0000000000000000001880000000005010099 +:10E8F00000000100A0000000000000000000010076 +:10E900000080000000800000000000800080010006 +:10E91000000000000080010000000000010001086C +:10E92000008400040004000000000000000000005B :10E9300000000000000000000000000000000000D7 :10E9400000000000000000000000000000000000C7 -:10E9500000000000000000000000000000000000B7 -:10E9600000000000000000000000000000000000A7 -:10E970000000000000000000000000000000000097 -:10E980000000000000000000000000000000000087 -:10E990000000000000000000000000000000000077 -:10E9A0000000000000000000000000000000000067 -:10E9B0000000000000000000000000000000000057 +:10E9500000000000000000000000000000000100B6 +:10E96000008000840004000400000000000000009B +:10E970002000000020A000080000000000000000AF +:10E98000200000040000000800000000000800044F +:10E990002000000000000020040000000000208291 +:10E9A0000401004100090001000000000000000017 +:10E9B000000000000000000000000008000000004F :10E9C0000000000000000000000000000000000047 :10E9D0000000000000000000000000000000000037 -:10E9E0000000000000000000000000000000000027 -:10E9F0000000000000000000000000000000000017 -:10EA00000000000000000000000000000000000006 -:10EA100000000000000000000000000000000000F6 -:10EA200000000000000000000000000000000000E6 -:10EA300000000000000000000000000000000000D6 +:10E9E00020000004000500010001000000000011EB +:10E9F000A000000310000011A011908020059000DD +:10EA0000A000400340009003900400080021201162 +:10EA1000A005000000050011A00000030040004018 +:10EA2000A0400000001100400003001100000000A1 +:10EA300000080000000800000008000000000000BE :10EA400000000000000000000000000000000000C6 -:10EA500000000000000000000000000000000000B6 +:10EA50000000000000000000000000009000000026 :10EA600000000000000000000000000000000000A6 -:10EA7000000000008800000000000000040000000A -:10EA800000008800000000000000000000000000FE -:10EA900000000000200000000000820000000002D2 -:10EAA00000002000200000004100080008000100D4 -:10EAB0000000000000000000000000002000000036 -:10EAC00000000000200000002000200020000000C6 -:10EAD0000100010000800080000000002000000014 -:10EAE0000000000000000000000000000002000024 -:10EAF0000000000000020000000000000000000014 -:10EB00000000000000000000000000000002000003 -:10EB10000000100010024000100000000000000083 -:10EB2000000000008000000200000400800080005F -:10EB30000802400000004000000000000008000043 -:10EB400000000000410000C0000000004000000084 -:10EB500000000400040040204020000000002100CC -:10EB6000000000100200000000C000400000000093 -:10EB70000000004000000000000000100200000043 -:10EB800000000000004000000010901090400000C5 -:10EB9000080000000000000800080002000000104B -:10EBA000001000000005000000040004001000092F -:10EBB0000040001020A004000421040901A1050068 -:10EBC0000021020000000000000000000000000022 -:10EBD000000000000000000000030000000300002F -:10EBE00000050000000900000008001000000000FF -:10EBF00000000008000000000008000005090000F7 -:10EC000005000000000403000008000100010004EA -:10EC100000008010000800000084000010090000BF -:10EC200000090001000000000000000900010000D0 -:10EC30000000000000C0800580008040804004206B -:10EC400084000084000000000008000800000004A8 -:10EC5000000000000008000011880000008810C0BB -:10EC600000820082004040004000000000000000E0 -:10EC70000000000000000000000000000003000091 -:10EC80000000002100000000000000000000000063 -:10EC9000000900210000000000000000000000004A -:10ECA0000000004100000000000000000003000020 -:10ECB0000008000200000140000500030000000001 -:10ECC0000021844100080000000000000000000056 -:10ECD00000100000000500000008000000210000F6 -:10ECE00000000000000000000000800000000000A4 -:10ECF0000000000000000000000000000000000014 -:10ED00000000000000000000000000000000000003 -:10ED100000000000000000000000000000000000F3 -:10ED200000000000000000000000000000000000E3 -:10ED300000000000040000000400000000000000CB -:10ED40000000000041000000000000000000000082 -:10ED5000000000000000000000000000000000842F -:10ED6000000040000000000000000000000400005F -:10ED7000900420040008002100000008004020004A -:10ED80000000820200000021008000000010000549 -:10ED900000008210C0109011000800000000000563 -:10EDA00000030004000400030002000001000080D2 -:10EDB000C00001000000000500002000000000C1AC -:10EDC000000400040102000000C1209000000000C7 -:10EDD00000000000000000080000820000000000A9 -:10EDE00000000010000800400005000200020000C2 -:10EDF0000000000000000008000000000008000003 -:10EE000000000000000100000000000200400000BF -:10EE100000000000030041000000000000000000AE -:10EE200000000000000000000300000100002000BE -:10EE3000000400002000000000A000000088008402 -:10EE400000040011008508050290022020030088BC -:10EE50000004000000000008000000200310000073 -:10EE6000000000A000010084008500100085000063 -:10EE70000000000000800000000000000000A00072 -:10EE800000000000000082000000000800000000F8 -:10EE90000000A002000000000000000000000000D0 -:10EEA0000000000000000000820000410800000097 -:10EEB0000000000800000000000004210020000005 -:10EEC0000000000082000000000800000000004177 -:10EED00000000000000000000000000010008200A0 -:10EEE00000030000002100000000202100080008AD -:10EEF00000000000000021020000000000000000EF -:10EF00000000000000000000000000000000000001 -:10EF100000000000000000000000000000000000F1 -:10EF200000000000000000000000000000000000E1 -:10EF30000000000000000000000000008000000150 -:10EF400000000000000000000000000000000000C1 +:10EA7000000000000000800000000000000880008E +:10EA80000000000000000000000000010001000084 +:10EA900080000000000000000000000000000001F5 +:10EAA0000001000100000000000100000000000063 +:10EAB0000000000000000000000000000000000056 +:10EAC0000000000000000000000000000000000046 +:10EAD0000000000000000000000000000000000036 +:10EAE0000000000000000000000000000000000026 +:10EAF0000040C004A00400020009C009A0080004EE +:10EB000001030104000000080008C1218200000385 +:10EB100000880008A009000800000003A00300000E +:10EB200000020020000000800004000400040080B7 +:10EB300000000000000000080000000000000000CD +:10EB400000000000000000080000000000000000BD +:10EB500000000000000000000000000000000000B5 +:10EB600000000000000000000000000000000000A5 +:10EB700000000000000121004100000000840001AD +:10EB8000000110001001000041010001100003000D +:10EB9000410000040000000000010000000000002F +:10EBA00000000082000100000004000900010001D3 +:10EBB0000020000000000000000000000000000035 +:10EBC0000000000000000000000000000000000045 +:10EBD0000000000000000000000000000000000035 +:10EBE0000000000000000000000000000000000025 +:10EBF0000000000001C088900182901001C0888848 +:10EC00000190C08301C000030102900801C0001000 +:10EC10000108108901C00090002020100000009021 +:10EC200000000000010000900000000000001090B3 +:10EC300000000000000000000000000000000000D4 +:10EC400000000000000000000000000000000000C4 +:10EC500000000000000000000000000000000000B4 +:10EC600000000000000001000000000000000000A3 +:10EC70000000000000000380002009800080038065 +:10EC80008000098000A00380000809001080038034 +:10EC90000000090080200380002000008080000028 +:10ECA0000080000000001100218000000000000032 +:10ECB0008080000000000000000000000000000054 +:10ECC0000000000000000000000000000000000044 +:10ECD0000000000000000000000000000000000034 +:10ECE00000000000000000001100210000000000F2 +:10ECF000000000000000000080088088110480806F +:10ED0000000880889104808000080089911080802C +:10ED10008009808811108080801080889108808010 +:10ED20000003000000000000004109800011000005 +:10ED300000110000000300000001000000000000BE +:10ED400000000000000000000000000000000000C3 +:10ED500000000000000000000000000000000000B3 +:10ED60000000000000000000000000410900000356 +:10ED700000800009000000090000080108C1C1006E +:10ED8000C0C0020110C11101C0C08800A0C00300B2 +:10ED9000C0C0020084C09100C0C0020002C11100C6 +:10EDA000C0C000000088000000C000010108000091 +:10EDB0000084880000880001008800000000000036 +:10EDC0000000000000000000000000000000000043 +:10EDD0000000000000000000000000000000000033 +:10EDE000000000000000000000000000000301001F +:10EDF00000000088000000000000000091201020AA +:10EE0000C08900C085081021C01000C01184088886 +:10EE1000C08900C021900890C02000C091841020BB +:10EE2000C08900C0000000000290000000008800BF +:10EE3000089000000000C0000290010000010000E6 +:10EE400000000000000000000000000000000000C2 +:10EE500000000000000000000000000000000000B2 +:10EE600000000000000000000000000000000000A2 +:10EE700088000000010000000400000001004100C3 +:10EE8000000080881080C180008580000280418061 +:10EE90000000808810804100800080090880418047 +:10EEA000000080881080020000000080000009003F +:10EEB00000008080200004008000008040000001ED +:10EEC0000000000000000000000000000000000042 +:10EED0000000000000000000000000000000000032 +:10EEE0000000000000000000000000000000000022 +:10EEF00000000000000041000000000000000800C9 +:10EF00008002804090000080801011050000008089 +:10EF10008002800590000000800091400000008089 +:10EF2000800011058000000000118000000000003A +:10EF3000001190110000000000118000000000008E +:10EF400000010000000000000000000000000000C0 :10EF500000000000000000000000000000000000B1 -:10EF600000000000000000000000002000000088F9 -:10EF7000000000000000000000002004000000214C -:10EF8000000000000000000002008200000040803D -:10EF900000000000000000800000000000000021D0 -:10EFA0000000000000000000000001000000004020 -:10EFB000000000000000000000000005000000212B -:10EFC0000221900800000008000908080008000558 -:10EFD00000000020002100050021000000000003C7 -:10EFE0000000000000000000C00800000000000059 -:10EFF0000088000000000000000000000000000089 -:10F0000000000000000000000008000003000000F5 -:10F010004010000000000000001000000000000090 -:10F0200002000000000000000000000008000000D6 -:10F03000000400000000000000000000008400A0A8 -:10F0400000100010008400820008001005C0208815 -:10F050000008009009090900080002A00000000053 -:10F06000000004000000000000000000000000009C -:10F070000000000200000100010084000000000008 -:10F08000000000000000000000000000000040013F -:10F090000200A0008200C00000000000020000008A -:10F0A0000000000000000000000000000000100050 -:10F0B00020004000820000000100000188000000E4 -:10F0C0001002008400C000080000000000000000E2 -:10F0D0000001C000A00000000000000000000000CF +:10EF600000000000000000000000000000000000A1 +:10EF70000000000000110000000000000000000080 +:10EF80000000C000020041889008C0000900A002F3 +:10EF90004008C000200011880200C00003009088D3 +:10EFA0002008C0008900028890000001200000882D +:10EFB0000000000120010088000000012000000086 +:10EFC0000000000100000000000000000000000040 +:10EFD0000000000000000000000000000000000031 +:10EFE0000000000000000000000000000000000021 +:10EFF0000000000000000001000000000000000010 +:10F0000000000000600043E042224842600043E00C +:10F0100042224842600043E042224842600043E00E +:10F0200042224842500043E0422248420006840007 +:10F0300007850000000684E007858100000686E061 +:10F0400007854200000000000000000000000000F2 +:10F0500000000000000000000000000000000000B0 +:10F0600000000000000000000000000000000000A0 +:10F07000000000000000000000E0000081410000EE +:10F0800002E000000000000000000000000000009E +:10F090000000000000000000000000000000000070 +:10F0A0000000000000000000000000000000000060 +:10F0B000FF000000FF000000FF000000FF00000054 +:10F0C000FF000000FF000000000000000000000042 +:10F0D0000000000000000000000000000000000030 :10F0E0000000000000000000000000000000000020 -:10F0F0000000000004000000040004008000000084 +:10F0F0000000000000000000000000000000000010 :10F1000000000000000000000000000000000000FF -:10F1100040202102000280058000000000008000E5 -:10F12000400000000000000000000000000000009F -:10F13000C041C02180048010000011021010004165 -:10F1400000118000000000000080000000000000AE -:10F1500000002008842100090005000000000000D4 +:10F1100000000000000000000000000000000000EF +:10F1200000000000000000000000000000000000DF +:10F130000000FF000000FF000000FF000000FF00D3 +:10F140000000FF000000FF000000000000000000C1 +:10F1500000000000000000000000000000000000AF :10F16000000000000000000000000000000000009F -:10F17000000011002100800000008080002100803C -:10F18000004100000000000000000000000000003E -:10F1900000000000002100000000800080008005C9 -:10F1A00000000000802100000000000000000000BE -:10F1B000000000000040808480000000410010003A -:10F1C00002111011000000800010800000080000F3 -:10F1D00000020080800080038080000000000000AA -:10F1E000000000000000000000000000800000801F -:10F1F00080008000910010008900C00008C0A000BD -:10F200000408A085000000000000000000000000CD -:10F210000000000000000000008400000400400026 -:10F220000800040040000200A004020000000000EA -:10F230000000000040004000844108840000008875 -:10F24000010000010000A000024000010890000140 -:10F250000020000100040800200882400240000055 -:10F26000000000000000000000000000000010008E -:10F2700090C0080010081000910004000800000170 -:10F2800000008201000000000000000000000000FB -:10F290000000000000000011000482020082004013 -:10F2A0000084041000820000000000000000000044 -:10F2B000000000000000008400830510010200002F -:10F2C000000001010000000001020000208402088B -:10F2D0000000100004000000010001008301010192 +:10F17000000000000000000000000000000000008F +:10F180000000000000000000000040084000008473 +:10F190002000400840000084200040084000008417 +:10F1A0002000400840000084200040084000008407 +:10F1B000200000000000000000000000000000002F +:10F1C000000000000000000000000000000000003F +:10F1D000000000000000000000000000000000002F +:10F1E000000000000000000000000000000000001F +:10F1F000000000000000000000000000000000000F +:10F2000000000000000000000000000000000000FE +:10F2100000000000000000000000000000000000EE +:10F2200000000000000000000000000000000000DE +:10F230000000000000FF0000FFFF000000FF0000D2 +:10F24000FFFF000000FF00003C3C00000000000049 +:10F2500000000000000000000000000000000000AE +:10F26000000000000000000000000000000000009E +:10F27000000000000000000000000000000000008E +:10F28000000000000000000000000000000000007E +:10F29000000000000000000000000000000000006E +:10F2A000000000000000000000000000000000005E +:10F2B00000000000000000FF00000000000000FF50 +:10F2C00000000000000000FF00003C3C00000000C7 +:10F2D000000000000000000000000000000000002E :10F2E000000000000000000000000000000000001E -:10F2F00000000000400000000001000100000000CC -:10F300000020000580200005000000000000000033 -:10F3100000000000000000000002414103020091D3 -:10F32000008000008000008000000000000000005D -:10F3300000000000000000000002408305844082BD -:10F340000000000208104111001010000000000031 -:10F3500080800400000080001000020008200540AA -:10F360000440000000000000000000000000000059 -:10F3700000000300000080000000000800100009E9 -:10F380000003C1200504C08005000000000000004B -:10F3900000000000000000000000000080410000AC -:10F3A00080000000004000000000800000400000DD -:10F3B00080000000000000000000800000800000CD -:10F3C00000000000021011090900200300000009DC -:10F3D00000800000000000000000000000000000AD -:10F3E000808000000000000000000000000000001D -:10F3F0000000000000080084000000000080009071 -:10F400000080000308010411410802000000000010 -:10F410000000000000000000000000008400400028 -:10F4200002001000000000040010000002008889A3 -:10F4300002C08200000000000000000040000282C4 -:10F440008804C0000000001001000000000100005E -:10F4500000000008000000000000000000000400A0 -:10F4600088880808840000000000000000000000F8 -:10F470000000000000000000000200100000000872 -:10F48000000800080001000000000000880A0000D9 -:10F49000000000000000000000000000000000006C -:10F4A000000000000000000000000000420000001A -:10F4B000000000000000000000000000000000004C -:10F4C0000000000000000000000000E0000000005C -:10F4D0000000000007000000000000200400000001 -:10F4E0000000000004008400000000000000000094 -:10F4F00000000000000000000000000007004100C4 -:10F50000000000000000000028F82828000000008B -:10F5100000000000000000000000000000000000EB -:10F520000000F0F0003C507C00000000A0A0A0A073 -:10F53000A0A0A0A00000000000000000000000004B -:10F540000014F0F400AA00AA00000000000000006F -:10F55000000000000000FFC37D7D000000000000EF -:10F5600000000014F0F400000000000000000000A3 +:10F2F000000000000000000000000000000000000E +:10F3000000000000000000000000000000000000FD +:10F3100030040006800E300030040006800E3000FD +:10F3200030040006800E300030040006800E3000ED +:10F3300000040006800E280015182A20054004A8A5 +:10F3400015582A26054C04A8157D2A26054F24A801 +:10F3500000000000000000000000000000000000AD +:10F36000000000000000000000000000000000009D +:10F37000000000000000000000000000000000008D +:10F38000000000400006000C000000650006000FB1 +:10F39000200000000F0F00FF00000000FF00F0F051 +:10F3A000000000000F0F00FF00000000FF0000FF42 +:10F3B00000000000FF0000FF00000000000000004F +:10F3C00000000000FF00FFFF000000000000000040 +:10F3D000000000000000000000000000000000002D +:10F3E000000000000000000000000000000000001D +:10F3F000000000000000000000000000000000000D +:10F400000000000000005555FFFF00000000000054 +:10F410000000000000000F0F00FF00000000FF00D0 +:10F42000F0F0000000000F0F00FF00000000FF00E0 +:10F4300000FF00000000FF0000FF000000000000CF +:10F44000000000000000FF000000000000000000BD +:10F4500000000000000000000000000000000000AC +:10F46000000000000000000000000000000000009C +:10F47000000000000000000000000000000000008C +:10F4800000000000000000005555000000000000D2 +:10F490000000000000000000FF0000FF000000006E +:10F4A0003C3C00FF00000000FF0000FF00000000E7 +:10F4B0003C3C00FF00000000FF0000FF00000000D7 +:10F4C00000000000000000000000F0F0000000005C +:10F4D000000000000000000000000000000000002C +:10F4E000000000000000000000000000000000001C +:10F4F000000000000000000000000000000000000C +:10F50000000000000000000000000000F0F000001B +:10F5100000000000000000000000FF0000FF0000ED +:10F5200000003C3C00FF00000000FF0000FF000066 +:10F5300000003C3C00FF00000000FF0000FF000056 +:10F54000000000000000000000000000F0F00000DB +:10F5500000000000000000000000000000000000AB +:10F56000000000000000000000000000000000009B :10F57000000000000000000000000000000000008B -:10F5800000000000000000000000282828280000DB +:10F580000000000000000000000000000000F0F09B :10F59000000000000000000000000000000000006B -:10F5A00000000028F0F8003C003C00000000A0A093 -:10F5B000A0BCA0A0A0BC0000000000000000000053 -:10F5C00000000000F0F000AA30BA000000000000C7 -:10F5D0000000000000000000FFC37D7D000000006F -:10F5E000000000000000F0F000000000000000003B -:10F5F000000000000000000000000000000000000B +:10F5A000000000000000000000000000000000005B +:10F5B000000000000000200000000000000000002B +:10F5C00000000000000000000000008000000000BB +:10F5D000000000000000200000000001000000000A +:10F5E000000000000000000000000000000000001B +:10F5F00000000000000000002000000000000000EB :10F6000000000000000000000000000000000000FA -:10F610005755555500000000000000000000000094 -:10F6200000000000000000000000000000000000DA -:10F630005703550000000000FFFF0100000000001C -:10F640000000000000000000FFFF010000000000BB -:10F6500000000000000030F0E0E00F0FF3F30000C6 -:10F6600000000000000000000000FFFF100000008C +:10F6100000000000000000002000000000000000CA +:10F6200000000000000000000000100010000000BA +:10F6300000000000000000000000000000000000CA +:10F640000000000040000000000000000008000072 +:10F6500000000000000000000000000000000000AA +:10F66000000000000000000000000000000000009A :10F67000000000000000000000000000000000008A -:10F6800000003E3C0A0000000000555D555500009A -:10F690000000030000000000000000000000000067 +:10F68000000000000000000000000000000000007A +:10F69000000000000000000000000000100000005A :10F6A000000000000000000000000000000000005A -:10F6B000000055005500000000000100010000009E -:10F6C0000000000000000000000001000100000038 -:10F6D000000000000000000030F0E0E0FFFFF3F366 -:10F6E00000000000000000000000000010001000FA -:10F6F000000000000000000000000000000000000A -:10F70000000000003C3C000000000000000C000075 -:10F7100000610006000D0000000000000000000075 -:10F72000000000000000000000610006000D000065 -:10F7300000000000000000000000000000000000C9 -:10F74000000000000000000000610006000D000045 -:10F750000000006100000001000005000A0805002B -:10F7600000A005610A86150D00A005610A06150DA9 -:10F7700000A00000000000000000000000000000E9 -:10F78000000005000A08050000A000610006000D49 -:10F790000001D8F04E4C9696D6D60000000000002E -:10F7A0000000000000000000000000000000003C1D -:10F7B000003C00000000000000000000000000000D -:10F7C0000000000000000000000000000000003CFD -:10F7D000507C0000BF01BF01A8A0ABAF000000003B -:10F7E0000000000000000000000000000000000019 -:10F7F0005000F0F0000000000000000000000000D9 +:10F6B0000000000800000008020000000000000434 +:10F6C0000800000000000000000000000000000032 +:10F6D00000000000000020002080000420900000B6 +:10F6E000000000000000000000000010000000000A +:10F6F0000000000000000000000002000000020006 +:10F7000000000000000000000200000000000000F7 +:10F7100000000000000000000000000000000200E7 +:10F720000000008800880000004000000008000081 +:10F7300000080900000000080001000000080000A7 +:10F740000085008400880000008400840088008414 +:10F7500000880088000800088000800400098004F8 +:10F760000000000000000000000000000884000805 +:10F770000000000800000008000800000008000861 +:10F7800000080000008400000000000802080008D3 +:10F7900000080088000800080008000000080008B1 +:10F7A0000084000000000080000000080008000045 +:10F7B00000080000000000000000000000080080B9 +:10F7C000000800000000000000000003002000000E +:10F7D00000000208000300000000000400052000F3 +:10F7E00000080000000000000000000300080008FE +:10F7F00000000008000000000000000000000009F8 :10F8000000000000000000000000000000000000F8 -:10F81000003C507CD0F04C48D6D755550000000035 -:10F8200000000000000000000000000000000000D8 -:10F83000003CA0BC00000000000000000000000030 -:10F8400000000000000000000000000000000000B8 -:10F85000003C003C0000FF003F03A8AAABAA000048 -:10F860000000000000000000000000000000000098 -:10F8700000000000F0F000000000000000000000A8 +:10F8100000000000000000210000000000000000C7 +:10F82000000000000000009000080000000000A0A0 +:10F83000000000A002C0000811C0000009A011A033 +:10F840001104002000900088000000880000009053 +:10F850000000119080000000000000000001008402 +:10F860008000000000000000000000000000000018 +:10F870000000000000000000000000000000000088 :10F880000000000000000000000000000000000078 -:10F890000000003C003C00000000000000000000F0 -:10F8A00000000000000000000000000000000C0C40 -:10F8B0000C0C000000000000000000000000000030 -:10F8C00000000000000000000000000000000C5DCF -:10F8D0000C0C0000000000000F2B0FAA30343F3E3C +:10F890000000000000000000000000000000000068 +:10F8A00000000300030020009000000001000000A1 +:10F8B00000000000000000008200000000000000C6 +:10F8C0000000008001000000000000800100000036 +:10F8D0000000000000000000000001802180000006 :10F8E0000000000000000000000000000000000018 -:10F8F0000F1F0014000000000000000000000000C6 -:10F9000000000000000000000000000000000000F7 -:10F910000000000020FF00FF0000000000000000C9 -:10F9200000000000000000000000000000000000D7 -:10F930005D0C0C0C00000000000000000000000046 -:10F9400000000000000000000000000000000000B7 -:10F950000C0C0C0C0000000000000F0F0F8E383C48 -:10F960003D3C00000000000000000000000000001E -:10F9700000000F0F00000000000000000000000069 +:10F8F0000000000000000000000000000000000008 +:10F9000000400000000000000000000000000000B7 +:10F9100000000000020002000000000000000000E3 +:10F920000000000000000000800000000000200037 +:10F9300000000000000000000000000000000000C7 +:10F9400000000000000820000000009000042000DB +:10F950000000000000080000000000842020822039 +:10F960000000000000000000000000000000000097 +:10F970000000000000000000000000000000000087 :10F980000000000000000000000000000000000077 -:10F990000000000000002020000000000000000027 -:10F9A000000000000000000000000000000008004F -:10F9B000C000000000000000400000000000000047 -:10F9C0000000000000000000100084000000200083 -:10F9D00000000000000082000200000300000000A0 -:10F9E0008400020040000000000020002000000011 -:10F9F0000000010001000000020020800000000063 -:10FA000020002000200000008800200000000000EE -:10FA10000000840000000000000020000000000042 -:10FA200021000000000000004040100040000000E5 -:10FA30008000000000000000219010000000000085 -:10FA400021000000000000004040000040000000D5 -:10FA500000000000000000000090400000000000D6 -:10FA60000000000000008000000040401000400046 -:10FA700000000000040004000040210241200000BA -:10FA800000000000000000000000404010004000A6 -:10FA90000000000000004000000021900000000075 -:10FAA0000000000000000009000000000000084005 -:10FAB00008000800080200000000004100000041AA -:10FAC000000000040000000000000000004108C029 -:10FAD0000400000000000000000000000000000022 -:10FAE00000000000000000090000000004400000C9 -:10FAF00082000400000082C000800000000000803E -:10FB000040004000400200000000000000000040F3 -:10FB100008090000000900090000000500000000BD -:10FB20000008000000400008000000000000008203 -:10FB30008008800880008001008800000008000024 -:10FB40000008000000000008000000080000000895 -:10FB5000821080080084000000080088000800006F -:10FB60000000000800000000000800A0008480845D -:10FB70000004000880100000002000200040000861 -:10FB8000002080888000800900080000000000003C -:10FB9000000800080082000000080000008800083B -:10FBA0000000000300410000000000000000000011 -:10FBB000000800000000000000000000000000003D -:10FBC0000000000000000000002100080003000009 -:10FBD00000210008000000000008000000000000F4 -:10FBE0000808000000050041000500210090000009 -:10FBF000000000000000410084100008A000000880 -:10FC00004021402000000002000000000000000031 -:10FC1000000500000000000000009000000000004F -:10FC20000000000000880000000000000000000844 -:10FC300000000000000000000000000000000000C4 -:10FC40000000000000A00000000000000000000014 -:10FC5000000800000000000000000000000000009C -:10FC60000000000000000300000040080000001138 -:10FC700003000002110808008408000000000000D2 -:10FC800041028000C00300000001000000000000ED +:10F990000000000000000000000000000000000067 +:10F9A0000000000000A000000000010000880088A6 +:10F9B0000000000000000000000000000000000047 +:10F9C00000000100000000000180010000800080B4 +:10F9D0000000200000009000000000000000000077 +:10F9E00000050021000000110000000000000000E0 +:10F9F00000000000000000000003000000000008FC +:10FA000000000000000000000000000000000000F6 +:10FA100000000000000000000000000000000000E6 +:10FA20000000000000000000000000001008210499 +:10FA300021041184008421840384218403840084AC +:10FA400021840084200408C009C01004100021048F +:10FA500000081184000021080000218400840000B7 +:10FA60000084008421000008000000A000000000C5 +:10FA70000000000003000000000000000000000083 +:10FA80000000000000000000000000000000000076 +:10FA900000000000000000000000000000C00000A6 +:10FAA000000000840000008400000000000000004E +:10FAB000100000091000000000008800000200098A +:10FAC00000020009000900092008000900020000E6 +:10FAD000100000001000000000000000000288007C +:10FAE00001000000010200110011000200020000EC +:10FAF00000000008000000410000000000000000BD +:10FB000000000000000000000000000000000000F5 +:10FB100000000000000000000000000000000000E5 +:10FB200000000000000000000000000000020000D3 +:10FB300000008000000080000000000000000000C5 +:10FB40000000000000000000000080010000000034 +:10FB500000008000000080000000000000000000A5 +:10FB60000000200000001000000000000000000065 +:10FB70000000000000000000000000000000000085 +:10FB80000000000000000000000000000000000075 +:10FB90000000000000000000000000000000000065 +:10FBA0000000000000000000000000000000000055 +:10FBB0000000010000000000000000000000000044 +:10FBC0000000000000000000000001000000000034 +:10FBD0000000010000000000000000000000000024 +:10FBE0000000010090000010000000000000000074 +:10FBF0000000000000000000000000000000000005 +:10FC000000000000000000000000000000000000F4 +:10FC100000000000000000000000000000000000E4 +:10FC200000000000000000000000000000000000D4 +:10FC30000000000011000021000000000000000092 +:10FC40000000000000000000000000001100002182 +:10FC50000000000011000021000000000000000072 +:10FC6000000000001100A100008000000000000062 +:10FC70000000000000000000000000000000000084 +:10FC80000000000000000000000000000000000074 :10FC90000000000000000000000000000000000064 -:10FCA00000000084000000000000000000000000D0 -:10FCB00000000000000000000005000000410000FE -:10FCC00000000000001100000000000000110040D2 -:10FCD0000000000000000805000800000800000007 -:10FCE0000200000000090000000000000000000009 -:10FCF00000004000000000410000002100C1008021 -:10FD00000000000008000000008000000000010268 -:10FD100000000000000000000000000800000000DB -:10FD2000000000000800001100000000000020009A -:10FD3000000002000000000000040082000000003B -:10FD4000000011A0000011000000000000000000F1 -:10FD50000000001000080000C0004000000000008B -:10FD600000000040000000000000009000000008BB -:10FD700000400000800000C0004008840000000235 -:10FD800000202000000000000040000200000004ED -:10FD900020030000008800840400080000C0020066 -:10FDA00040000000000000002000000000000000F3 -:10FDB0000000000000000000001000000000000033 -:10FDC0000000002100000000000000000000000012 -:10FDD0000000000000000000000000210000000002 -:10FDE0000000000000000000000000008200000091 -:10FDF00000008200000000004000400000050003F9 -:10FE00000800001000200000000500200000000095 -:10FE100000040000000000000000000000000000DE +:10FCA0000000000000000000000000000000000054 +:10FCB0000000000000000008000011080000000023 +:10FCC0000000000000000000000000000000002014 +:10FCD00000001108000000200000112000000000BA +:10FCE0000000000000000008098000400000000241 +:10FCF00000000010000000000000000000000000F4 +:10FD000000000000000000000000000000000000F3 +:10FD100000000000000000000000000000000000E3 +:10FD200000000000000000000000000000000000D3 +:10FD300000000000000000000001000001010000C0 +:10FD400000000000000000000000000000000000B3 +:10FD500000000000010000000000000001000000A1 +:10FD60000000000000000000000301020001008804 +:10FD70000000000000000000000000000000000083 +:10FD80000000000000000000000000000000000073 +:10FD90000000000000000000000000000000000063 +:10FDA0000000000000000000000000000000000053 +:10FDB0000000000000000000000000001000000132 +:10FDC0000000000000000000000000000000000033 +:10FDD00000000000200000010000000020000001E1 +:10FDE0000000000000000000000001008888020000 +:10FDF0000000000002000000000000000000000001 +:10FE000000000000000000000000000000000000F2 +:10FE100000000000000000000000000000000000E2 :10FE200000000000000000000000000000000000D2 :10FE300000000000000000000000000000000000C2 -:10FE400000000000000000000000000000000000B2 -:10FE5000000000000000000000080000000000009A -:10FE60000000000000A00000000000880000030067 -:10FE7000000000A000840040040085008500000010 -:10FE80000000000000000001000800A000010000C8 -:10FE90000000000100000000000000000000080059 -:10FEA000000000000090210000A0000000200000E1 +:10FE4000000810000000000000000000000000009A +:10FE5000000000000000000000082000000000007A +:10FE600000082000000000000000000041000080A9 +:10FE700080001100000000000000090000000000E8 +:10FE80000000000000000000000000000000000072 +:10FE90000000000000000000000000000000000062 +:10FEA0000000000000000000000000000000000052 :10FEB0000000000000000000000000000000000042 -:10FEC0000000000000000008000800000021000001 -:10FED00000000000004000000009000000000000D9 -:10FEE00000000000000000210008000000000000E9 -:10FEF00000000000000000000103000000040002F8 -:10FF000040110004840500000041000000020000D0 -:10FF10000009000000400041000000000041000016 -:10FF20000800000000400000000000000000000089 -:10FF30000000000020000000200000000040201011 -:10FF400000000000000800900000008820000084ED -:10FF500020400084000000000000000000000004B9 -:10FF60000000000000000000000000002000090068 -:10FF70000000000000000000000008C000C00000F9 -:10FF800041008000000000000000000000000901A6 -:10FF9000200040000000008409020000000800006A +:10FEC0001100000000000000000000000000000021 +:10FED00000000000000000001100000000000040D1 +:10FEE00011000000000000000000000000000011F0 +:10FEF0000000008000000000000000000000000082 +:10FF000000000000000000000000000000000000F1 +:10FF100000000000000000000000000000000000E1 +:10FF200000000000000000000000000000000000D1 +:10FF300000000000000000000000000000000000C1 +:10FF400000000100000000000000000000000000B0 +:10FF500000000000000000000000010000000000A0 +:10FF60000000010000000000000000000000000090 +:10FF70000001000000400000000000000000000040 +:10FF80000000000000000000000000000000000071 +:10FF90000000000000000000000000000000000061 :10FFA0000000000000000000000000000000000051 :10FFB0000000000000000000000000000000000041 -:10FFC00000000008010010A0000000000000000078 -:10FFD0000000000000000000000000000000000021 -:10FFE000000000A0900200820088000000000000D5 -:10FFF000000000000000000000000000A00101015E -:02000004002CCE -:100000008801880084049141A0C09083C0C003830C -:10001000A00590A101000001000100010000000006 +:10FFC0000000500043E0002200000000000000009C +:10FFD00000000000000000000000500043E000228C +:10FFE0000000810043E0002200000000000000004B +:10FFF0000000000000E007008200000002E00000B6 +:02000004002BCF +:1000000000000000000000000000000000000000F0 +:1000100000000000000000000000000000000000E0 :1000200000000000000000000000000000000000D0 :1000300000000000000000000000000000000000C0 -:1000400000000000008003000080000000000000AD +:1000400000000000000000000000000000000000B0 :1000500000000000000000000000000000000000A0 -:100060000000000000808000008000000000000010 -:1000700000000000000000000000000000008040C0 -:1000800008400040000009009191000080910004A8 -:10009000C1C000A08011110021020408004000002E +:100060000000000000000000000000000000000090 +:100070000000000000000000F0F0000000000000A0 +:100080000000000000000000000000000000000070 +:100090000000000000000000000000000000000060 :1000A0000000000000000000000000000000000050 :1000B0000000000000000000000000000000000040 -:1000C0000000000000000000000080800000000030 +:1000C0000000000000000000000000000000000030 :1000D0000000000000000000000000000000000020 -:1000E0000000000000000000000800000000000008 -:1000F0000000000000000000000000000000000000 -:1001000000000003040000118000110391890084A5 -:10011000800080048000A091008400000002100094 +:1000E0000000000000000000000000000000000010 +:1000F00000000000000000000000F0F00000000020 +:1001000000000000000000000000000000000000EF +:1001100000000000000000000000000000000000DF :1001200000000000000000000000000000000000CF :1001300000000000000000000000000000000000BF -:10014000000000000000000000008800A0A00020C7 +:1001400000000000000000000000000000000000AF :10015000000000000000000000000000000000009F -:10016000000000000000000000000001000200008C -:10017000000000000000000000000000000000007F -:100180000000008200010184000408108401A041E5 -:1001900000A10800A000A0A08291001100000001B1 +:10016000000000000000000000000000000000008F +:10017000000000000000000000000F0F0000FFFF63 +:10018000000000000000000000000000000000006F +:10019000000000000000000000000000000000005F :1001A000000000000000000000000000000000004F :1001B000000000000000000000000000000000003F -:1001C0000000000000000000000000000011008995 -:1001D00083C00000000000000000000000000000DC -:1001E0000000000000000000000008000000000007 -:1001F00002000000000000000000000000000000FD -:10020000000000000004001090030083400500116E -:100210008541828390A00104010508090000840043 -:1002200000000101000000000000000000000000CC +:1001C000000000000000000000000000000000002F +:1001D000000000000000000000000000000000001F +:1001E000000000000000000000000000000000000F +:1001F0000000000000000000000000000F0F0000E1 +:1002000000000000000000000000000000000000EE +:1002100000000000000000000000000000000000DE +:1002200000000000000000000000000000000000CE :1002300000000000000000000000000000000000BE -:1002400000000000000000000000000000000003AB -:100250000008C002000000000000000000000000D4 -:10026000000000000000000000000000800000000E -:10027000000000000000000000000000000000007E -:100280000000000000000009208380A102C080104F -:1002900000C021A180C08085412121A180C0000033 -:1002A0000000000920040000000000000000000021 +:1002400000000000000000000000000000040006A4 +:10025000800E2000000000000000000000000000F0 +:100260000000000000040006800E200000040006CC +:10027000800E2000000000000000000005402A065B +:10028000054C00A800650006000F200000000000DB +:10029000000000000000000000000000000000005E +:1002A000000000000000000000000000000000004E :1002B000000000000000000000000000000000003E :1002C000000000000000000000000000000000002E -:1002D000801100008000000000000000000000000D -:1002E000000000000000000000000000000000000E -:1002F000800000000000000000000000000000007E -:10030000000000000000000089808341A10040003F -:10031000A11104A0090011002104840000000008BC -:10032000208000110000404000000000000000009C +:1002D000FF0000FF00000000000000000000000020 +:1002E0000000000000000000FF0000FF0000000010 +:1002F000FF0000FF00000000000000000000000000 +:100300005555FFFF00000000000000000000000045 +:1003100000000000000000000000000000000000DD +:1003200000000000000000000000000000000000CD :1003300000000000000000000000000000000000BD :1003400000000000000000000000000000000000AD -:10035000000008000000080000000000000000008D -:10036000000000000000000000000000000000008D -:100370000200080002000000000000000000000071 -:100380000000000000000000000010C0090009008B -:10039000010003008402C00004004100A0A000A0EE -:1003A000000101C000010000010100000000000088 +:100350000000FF0000FF000000000000000000009F +:1003600000000000000000000000FF0000FF00008F +:100370000000FF0000FF000000000000000000007F +:1003800000005555000000000000000000000000C3 +:10039000000000000000000000000000000000005D +:1003A000000000000000000000000000000000004D :1003B000000000000000000000000000000000003D :1003C000000000000000000000000000000000002D -:1003D000000000000000000000000000000000001D -:1003E000000000000000000000000000000000000D -:1003F00000000000000007000000000000000000F6 -:1004000000000000000000000000000000000000EC -:10041000070042000000000007000000000000008C -:1004200007004200000000E0000081000000000022 +:1003D00000000000FF0000FF00000000000000001F +:1003E000000000000000000000000000FF0000FF0F +:1003F00000000000FF0000FF0000000000000000FF +:10040000000000000000F0F000000000000000000C +:1004100000000000000000000000000000000000DC +:1004200000000000000000000000000000000000CC :1004300000000000000000000000000000000000BC :1004400000000000000000000000000000000000AC -:1004500000000000187E187E0F0000000000000061 -:10046000000000000000000000000000000000008C -:1004700000000000F0FFF0FF00000000000000009E -:100480000000000000000000000000000000F9F97A -:10049000F9F9FFFF0063F391F3F3DBDBDBD90066CF -:1004A00099FF3C3F3C1F00000000000000000000DE +:10045000000000000000FF0000FF0000000000009E +:100460000000000000000000000000000000FF008D +:1004700000FF00000000FF0000FF0000000000007F +:100480000000000000000000F0F00000000000008C +:10049000000000000000000000000000000000005C +:1004A000000000000000000000000000000000004C :1004B000000000000000000000000000000000003C :1004C000000000000000000000000000000000002C -:1004D000000000000000187E187E0F0000000000E1 +:1004D000000000000000000000000000000000001C :1004E000000000000000000000000000000000000C -:1004F0000000000000000000606600000000000036 +:1004F00000000005000000000000000000000000F7 :1005000000000000000000000000000000000000EB -:10051000F900F9F9FF9C0000F3F3F3F30000000287 -:10052000006600663C3C3C18000000000000000033 +:1005100000000000000000030000000000000000D8 +:1005200000000000000000000000000800000000C3 :1005300000000000000000000000000000000000BB :1005400000000000000000000000000000000000AB -:10055000000000000000000000000000000000009B +:10055000400000000000000000000000000000005B :10056000000000000000000000000000000000008B :10057000000000000000000000000000000000007B :10058000000000000000000000000000000000006B -:10059000000000000000000000000000000000005B +:100590000000000000080000000000000000000053 :1005A000000000000000000000000000000000004B -:1005B000000000000000000000000000000000003B +:1005B00000000000000040000000000000000000FB :1005C000000000000000000000000000000000002B -:1005D000000000000000000000000909F9F90F0008 -:1005E0000F000000000000000000000000000000FC -:1005F000000000000000000000008D990F0F0000B7 -:1006000000000000000000000000000000000000EA -:10061000000000000000000000000000FF05FF00D7 -:10062000202F202F00009818F0F0F3F300000000B6 -:1006300000000000000000000000000000000000BA +:1005D000000000000000000000000000000000001B +:1005E00000000000200000000000000000000000EB +:1005F00000000000000000000000020000000000F9 +:1006000000001008100002001000000000000000B0 +:1006100000000000000000000000000000000000DA +:1006200000000000000000000810000000000000B2 +:1006300000000000000000000000000002000000B8 :1006400000000000000000000000000000000000AA -:100650000000000000000000000000000909F9F996 -:100660000F000F000000000000000000000000006C -:100670000000000000000000000000008D0F0F0FC0 -:10068000000000000000000000000000000000006A -:100690000000000000000000000000000000FF0C4F -:1006A000FF00202F202FFFFF7FFFF690F7D30000E1 -:1006B000000000000000000000000000000000003A -:1006C000000000000000000000000000000000002A -:1006D00000000000000000000000000000000061B9 -:1006E0000006000D000000000000000000000000F7 -:1006F00000000000000000000000000000000000FA -:1007000000000000000000000000000000000000E9 -:10071000000000000000000000610006000D000065 -:1007200080610006000D000000610006000D000061 -:1007300000610007000D0000000000000000000044 -:1007400000000000000000000000000000000000A9 -:100750000000000000000000000000000000000099 -:10076000000000000000FFAF0000000000000000DB -:100770000000000000000000000000000000000079 -:100780000000000000000000000000000000000069 -:100790000000000000000000000055553C308E8E27 -:1007A000005520103000FC54FC54FFFF00FF0000F7 -:1007B0001000FFFF4141FF00FFFF000000000000AC +:10065000000000000000000000000000000000009A +:1006600000000000000080000010000800000000F2 +:10067000000000000000001000000000000000006A +:1006800000000000800080000008801000000000D2 +:10069000000800000000000000000008000000004A +:1006A0000000000000000008000800080000000032 +:1006B000000000080000000800000008000800001A +:1006C000000800000000000800080084000000008E +:1006D0000088000800000084000000C0000800003E +:1006E00000000000000300040083A00000809000D0 +:1006F00000002000200090009021900000002000C9 +:100700000000900000000000000800100000000041 +:1007100000000000000000080000000000000000D1 +:1007200000000000000000000000000000000000C9 +:1007300000000000000000000000000000000000B9 +:1007400000000000000000000000000000080000A1 +:100750000000000000000000000000000008000091 +:100760000000000000000000000100040000000480 +:10077000050005000000030005000500050010004D +:10078000000000000000000000000000000000C0A9 +:100790000000000000000000000000000000000059 +:1007A0000000000000080000000000000000000041 +:1007B0000000000000000000000000000000000039 :1007C0000000000000000000000000000000000029 :1007D0000000000000000000000000000000000019 -:1007E0000000000000000050FFFF000000000000BB -:1007F00000000000000000000000000000000000F9 -:1008000000000000000000000000000000000000E8 -:100810000000000000000000000000005155F3FF40 -:100820008E8E008E00000000000000A0FFFF000080 -:1008300000000000FFFF41410000FFFF000000003A +:1007E00000000000000000001000000400000004F1 +:1007F00000040000000000000000000000000000F5 +:100800000000000000000000000000000000008860 +:1008100001000000000000000000000400000000D3 +:1008200000000000000000000000000000000000C8 +:1008300000000000000000000000000000000000B8 :1008400000000000000000000000000000000000A8 -:100850000000000000000000000000000000000098 -:100860000000000000000000000000000000000088 -:100870000000000000000000000000000000000078 +:100850000000000000000000000000000100000493 +:100860000100008000000000000000000001000006 +:100870000001001100000000000000000000000066 :100880000000000000000000000000000000000068 -:100890000000000000000000000000000000FFAAAF -:1008A000F0FF000000003C003C0000F000F0C3C37B -:1008B000C3C3AAAA0000FF03FF035555FFFF0000B2 +:100890000005200000000000000000000000000033 +:1008A0000000000000000000000000000000000048 +:1008B0000000000000000000000000000000000038 :1008C0000000000000000000000000000000000028 -:1008D0000000000000000000000000000000000018 -:1008E0000000000000000000000000000000000008 -:1008F00000000000000000000000000000000000F8 -:1009000000000000000000000000000000000000E7 -:1009100000000000000000000000000000000000D7 -:10092000FFAAF0FF00FF00FF0000000000F000F051 -:1009300083C3C3C3AAAA0000FF03FF030000FFFF95 +:1008D0000000000000000000000000000000100008 +:1008E00000002000000400000000000000000000E4 +:1008F00002000008000000030000000000000000EB +:1009000000000000000800000000000000000000DF +:1009100001000004000000000000000000000000D2 +:1009200000000000000000000000000000000000C7 +:1009300000000000000000000000000000000000B7 :1009400000000000000000000000000000000000A7 -:10095000000000000000000000080000000000008F -:10096000000020000000000000000000008088005F -:100970000000000000002000000000000000000057 -:100980000000200000000000001000000000200017 -:10099000000000080000200000030000000000002C -:1009A0000000000020000000000000000000000027 -:1009B000000000000000000020080000000000000F -:1009C000C000000020000000000000000000000047 -:1009D000840000050000000020000000000000C0AE -:1009E00000000000004000000000000000000020A7 -:1009F00000000000000000000000000000000002F5 -:100A00004100000000000084000000000000000021 -:100A10000000030000000000000000004000000093 -:100A20004040000000000000000000020000000242 -:100A30000002000000004000400000000000000034 -:100A40004110100000100000000000000000000035 -:100A500000000090000000000000000000000008FE -:100A60000000000040109000000284100005820089 -:100A7000000000020000000000000000000008006C -:100A800000004010040082008205000508000400F8 -:100A900000000000100000000010400000000000F6 -:100AA000000000100000041004410020002000009D -:100AB000000000000000080008880880088040004E -:100AC0000003000008000400040000000000000013 -:100AD000000000000000A041000040004010001095 -:100AE0000004000800088008000800090009000848 -:100AF0000008000400050010001000080008008431 -:100B0000808400108011001000820010001000048A -:100B100000080000000400820010000880080000A7 -:100B2000001000840088001080848000000100858F -:100B30000040000800000000800880108040801005 -:100B4000800000080088800000000008000000000D -:100B500000080008000800840082000880008084EB -:100B60004000000000000000000000000003000042 -:100B70000000000000000010000800000005000058 -:100B8000000800080008000800080000000000003D -:100B90000008000300000000000000000003001037 +:100950000000000000000000000000000000900007 +:10096000000000000000000000002100008400845E +:1009700000000000000000000000000000C00000B7 +:10098000000009C000C011841184000000C0008470 +:100990000084200000C10084000000000084218445 +:1009A0000000000021000000000000000000000026 +:1009B0000000000000000000000000000000000037 +:1009C00000000000000000A0000000000000000087 +:1009D0000000000000000000000000000000000017 +:1009E00000000000000000000000000000002000E7 +:1009F00000000000000000040002000000000008E9 +:100A000000000000000000000000000000000000E6 +:100A10000002000400000000200200090000900015 +:100A200000040000000000020002000000000000BE +:100A300000000000000000000000000000000000B6 +:100A400000000000000000000000000000000000A6 +:100A50000000000000000000000000000000000096 +:100A60000000000000000000000000000000000086 +:100A70000000000000000000000100000000000075 +:100A80000000000000000000000000000000000066 +:100A900000000000000100000000800000000000D5 +:100AA000000000000000000400040000000000003E +:100AB0000000000005000000000000000000000031 +:100AC0000000000000000000000000000000000026 +:100AD0000000000000000000000000000000000016 +:100AE0000000000000000004000000000000000002 +:100AF00000000000000000000000000000000000F6 +:100B000000000000000000000000000000000000E5 +:100B100000000000000001000000000100000000D3 +:100B200000000000000000000000000000000000C5 +:100B300000000000000000000000000000000000B5 +:100B400000000000000000000000000000000000A5 +:100B50000000000000000000000000000000000095 +:100B60000000000000000000010000000000000084 +:100B70000000000000000000000000000000000075 +:100B80000000000000000000000000000000000065 +:100B9000000000000000000011002100000800001B :100BA0000000000000000000000000000000000045 -:100BB000000000000005000000000021900000007F -:100BC00000400000000000080000000800210000B4 -:100BD000000000004000000088009000001010009D -:100BE0000005000000000000000000000000000000 -:100BF00008000000000000000008000000080000DD +:100BB0000000000000000000000000000000000035 +:100BC0000000000000000000000000000000000025 +:100BD0000000000000000000000000000000000015 +:100BE00000000000000000000000110021000000D3 +:100BF0000000000000000000000000410000004173 :100C000000000000000000000000000000000000E4 -:100C100000000000000000000000000000000000D4 -:100C200000000000000010000400090000000000A7 -:100C3000050000000000000000080884000000001B -:100C4000000000000000000800000040000000005C -:100C50000010000000000000000000000000008400 -:100C60000000000000000000000008042000000058 -:100C7000000000020000000000000000000000086A -:100C80000000001000000004000000000000000050 -:100C900004000000000000000010001000410010DF -:100CA0000041000000000000000000000000000003 -:100CB000000000000000000000000000000500022D -:100CC00000800080008200000000000000000000A2 +:100C10000000000000000000000000900000000440 +:100C200000000000000000000000000000000000C4 +:100C300000000000000000000000000000000000B4 +:100C400000000000000000000000000000000000A4 +:100C50000000000000000000000000000000000094 +:100C6000000000000000000000000000004109003A +:100C700000030080000000000000000000010000F0 +:100C80000001000000000000000000000000000063 +:100C90000000000000000000000000000010000044 +:100CA0000000000000000000000000000000000044 +:100CB0000000000000000000000000000000000034 +:100CC0000000000000000000000000000000000024 :100CD0000000000000000000000000000000000014 -:100CE00000000000020000000000000000A0090059 -:100CF00020000000000100000002000000080000C9 -:100D000011000008000100000000000000000900C0 -:100D10000000000000A0000000C00000008400826D -:100D200000010000000000000000000000000000C2 -:100D3000054000080010000000000000000400044E -:100D400000C10040004000210000000000000088B9 -:100D500000102000000000A00000000000002000A3 -:100D6000008200C000A000000000000000000000A1 -:100D70000000A000000000000000001000000000C3 -:100D8000002100000000000800000000000000003A +:100CE0000000000000000000000000000000000103 +:100CF000010000000088000000000000000000006B +:100D000002000000000000000000000000000000E1 +:100D100000000000000000000000000000000000D3 +:100D200020000000010000000000000000000000A2 +:100D300000000000000000000000000000000000B3 +:100D400000000000000000000000000000000000A3 +:100D50000000000000000000000000000000000093 +:100D60000000000000000000000000000000000083 +:100D700000008800000001000000000000000000EA +:100D80000000000000000300000000000000000060 :100D90000000000000000000000000000000000053 -:100DA000001000000000000000000000000800002B -:100DB00000410000040000000000000000000021CD -:100DC0009008000004000020000000000000000067 +:100DA00000008000000008000000000000000000BB +:100DB0000000000000000000000000000000000033 +:100DC0000000000000000000000000000000000023 :100DD0000000000000000000000000000000000013 -:100DE00000000000000000000000000000200000E3 -:100DF00000000000000000000000000000A0000053 -:100E000000A0000000000000000000000000000042 -:100E1000000000000000000000000010008400003E -:100E200000000008000000000000000000000000BA -:100E3000000000000084800000C000C0000000002E -:100E40000000080000A08000000100000000000079 -:100E5000000000840000000000000000000000000E -:100E600000000020000000000000100000009000C2 -:100E7000000000000000000000000000000000046E -:100E800000000000820000000000000000000004DC -:100E900000410000000400040020000800000000E1 -:100EA0000000200001900010000000400000000041 -:100EB0000000000800000000000000000000000822 -:100EC00020000200024140000140010000400002F9 -:100ED000004100410011000000410000000200003C +:100DE0000000000000000000000000000000000003 +:100DF00000000000000000004100000000000000B2 +:100E000000000000000000000000000000000000E2 +:100E100000000000000000000000000000000000D2 +:100E200000000002001100000003000000000000AC +:100E300000000000000000000000000000000000B2 +:100E400000000000000000000000000000000000A2 +:100E50000000000000000000000000000000000092 +:100E60000000000000000000000000000000000082 +:100E7000000000000000001104000000000000005D +:100E80000000000000000000000000000000000062 +:100E90000000000000000000000000000000000052 +:100EA0000000000000000001000000010000000040 +:100EB0000000000000000000000000000000000032 +:100EC0000000000000000000000000000000000022 +:100ED0000000000000000000000000000000000012 :100EE0000000000000000000000000000000000002 -:100EF0002000000000000020000000000000208210 -:100F000000000000000020001100000000000000B0 -:100F10000000000000880000000000A02000008405 -:100F20000000000402840802000002042000000007 -:100F300000100000000000000020000000900000F1 -:100F40000000000000000000200008000800200051 -:100F500000000000000000080000000000900000F9 -:100F6000000000000000000000000004000020005D -:100F700000000000000000000001010084000001EA -:100F800000000000840000000000000000000000DD -:100F90000040010484040082000000000000000002 -:100FA000000000000000000000050183400800046C -:100FB00000000000000000000000040400C000A0C9 -:100FC000A0A0000000000000000000110000880444 -:100FD00008080100000000000001000000000000FF -:100FE000000000000000000000000100000084007C -:100FF00000000000000000000000000441090002A1 -:10100000004000000400800000000000000000001C -:10101000000000804100000000000000000000000F -:10102000000000000000000000000002040200892F -:1010300000050000000000000000000000000000AB -:10104000000000000000000000000000008202100C -:10105000000980894005002100040008000000000C -:10106000000000000000000000000000020021005D -:101070000000000000000000000000000400040068 -:10108000040002000000000000000000000000005A -:1010900000000000800000000004000000000000CC -:1010A000000000000000000000000000000000023E -:1010B00000800000000000000000000000000000B0 -:1010C000000400000080000000000000000000009C -:1010D0000080000080808000000000000000000010 -:1010E00000000000000000000000000000000200FE -:1010F0000200020002000000000000000000850065 -:1011000002008500A0000000000000000040400038 -:10111000C0008400C000040082008401C000000000 +:100EF00000000000000000000001010000000000F0 +:100F0000000000000000000002E00000424200007B +:100F100000000000000000000000000000000000D1 +:100F2000000000000000000002E0000000000000DF +:100F300000000000000000000000000000000000B1 +:100F400000000000000000000000000000000000A1 +:100F50000000000000000000000000000000000091 +:100F60000000000000000000000000000000000081 +:100F70000000000000000000000000E000008141CF +:100F80000000000000000000000000000000000061 +:100F90000000000000000000000000000000000051 +:100FA0000000000000000000000000000000000041 +:100FB0000000000000000000000000000000000031 +:100FC0000000000000000000000000000000000021 +:100FD0000000000000000000000000000000000011 +:100FE0000000000000000000000000000000000001 +:100FF00000000000000000000000000000000000F1 +:1010000000000000000000000000000000000000E0 +:1010100000000000000000000000000000000000D0 +:1010200000000000000000000000000000000000C0 +:1010300000000000000000000000000000000000B0 +:1010400000000000000000000000000000000000A0 +:101050000000000000000000000000000000000090 +:101060000000000000000000000000000000000080 +:101070000000000000000000000000000000000070 +:101080000000000000000000000000000000000060 +:101090000000000000000000000000000000000050 +:1010A0000000000000000000000000000000000040 +:1010B0000000000000000000000000000000000030 +:1010C0000000000000000000000000000000000020 +:1010D0000000000000000000000000000000000010 +:1010E0000000000000000000000000000000000000 +:1010F00000000000000000000000000000000000F0 +:1011000000000000000000000000000000000000DF +:1011100000000000000000000000000000000000CF :1011200000000000000000000000000000000000BF -:1011300000010008000000000000000000000000A6 -:1011400088000400C0C0A090000000000000000063 -:1011500000000004000008040400C000A000880093 +:1011300000000000000000000000000000000000AF +:10114000000000000000000000000000000000009F +:10115000000000000000000000000000000000008F :10116000000000000000000000000000000000007F -:10117000010000000100010000000000000000006C -:10118000000100000100000100010000200000013A -:101190000000000000000000C0000000000082000D +:10117000000000000000000000000000000000006F +:10118000000000000000000000000000000000005F +:10119000000000000000000000000000000000004F :1011A000000000000000000000000000000000003F -:1011B00082010001010004000000000000000000A6 -:1011C0000000104000C090A00208000000000000D5 -:1011D00000000001010105A0000200000000010064 +:1011B000000000000000000000000000000000002F +:1011C000000000000000000000000000000000001F +:1011D000000000000000000000000000000000000F :1011E00000000000000000000000000000000000FF -:1011F0000000000000008401000100000000000069 -:101200000000000405050402000200400011000275 -:1012100000400000000000000000800500210004E4 -:101220008009000000000000000000000000000035 -:1012300000000002212004098005000000000000D9 -:10124000000000008080000080008080000000001E -:101250000000000009022003850904890000100035 -:10126000200000000000000000000000000000005E -:101270000000000000100009000200020000000051 -:1012800000000000000000800000000300000000DB -:10129000000000000000008000800000000900C085 +:1011F00000000000000000000000000000000000EF +:1012000000000000000000000000000000000000DE +:10121000000000650006000F200000000000000034 +:1012200000000000000000000000000000000000BE +:10123000000000040006000E200000000000000076 +:10124000000000000000000000000000000000009E +:10125000000000000000000000000000000000008E +:10126000000000000000000000000000000000007E +:10127000000000000000000000000000000000006E +:101280000000000000400006000C0000000000000C +:10129000000000000000000000000000000000004E :1012A000000000000000000000000000000000003E -:1012B00000000000000400000000800000000000AA -:1012C000000000000000800000000080800000009E -:1012D0000000000000000011808900008000000074 -:1012E000008000000000000000000000000000007E -:1012F000000000000000008000000000000200006C -:10130000000000000000008800040002000000004F -:1013100000000000000000000008000800000000BD -:1013200000090004000000000000000000000000B0 -:101330000000000000008201A00004000400000082 -:1013400000000000000000009000A0A0A0C010005D -:1013500000000000000000000001022010840800CE -:101360000000000800040000000000000000000071 -:10137000000000000000000000400000000000002D -:10138000000000000000000000000000000050000D -:101390000000000007000000000000000000000046 -:1013A00000000000000042000000000000000000FB -:1013B000000000000000000000000000000000002D -:1013C0000000000000000000000000000000070016 -:1013D00000410000000000000000000000000700C5 +:1012B0000000000000005555FFFF00000000000086 +:1012C000000000000000000000000000000000001E +:1012D000000000000000000000000000000000000E +:1012E00000000000000000000000000000000000FE +:1012F00000000000000000000000000000000000EE +:1013000000000000000000000F0FFFFF00000000C1 +:1013100000000000000000000000000000000000CD +:1013200000000000000000000000000000000000BD +:101330000000000000000000555500000000000003 +:10134000000000000000000000000000000000009D +:10135000000000000000000000000000000000008D +:10136000000000000000000000000000000000007D +:10137000000000000000000000000000000000006D +:10138000000000000000000000000F0F000000003F +:10139000000000000000000000000000000000004D +:1013A000000000000000000000000000000000003D +:1013B000000000000000000000000F0FAAAA0000BB +:1013C000000000000000000000000000000000001D +:1013D000000000000000000000000000000000000D :1013E00000000000000000000000000000000000FD :1013F00000000000000000000000000000000000ED -:1014000000000000000000000000000000000000DC +:101400000000000000000000000000000000F0F0FC :1014100000000000000000000000000000000000CC :1014200000000000000000000000000000000000BC -:101430000000000000000000000030BA3030000062 -:1014400000000000000000000000000030003FFF2E -:10145000BF3C103C0000000000000000F0F3F0F37F -:1014600000FF00FF0000000000000000000000007E +:101430000000000000000000000000000F0FAAAA3A +:10144000000000000000000000000000000000009C +:10145000000000000000000000000000000000008C +:10146000000000000000000000000000000000007C :10147000000000000000000000000000000000006C :10148000000000000000000000000000000000005C -:10149000000000000000000000000000000000004C +:10149000F0F000000000000000000000001000005C :1014A000000000000000000000000000000000003C -:1014B000000000000000000000000000303030306C -:1014C0000000000000000000000000000000140008 -:1014D000BEFF3D3C383C0000000000000000F0F37F -:1014E000F0F300FFFFFF000000000000000000001C -:1014F00000000000000000000000000000000000EC -:1015000000000000000000000000000000000000DB -:1015100000004F410F00000000000000000000002C -:10152000000057035500FF0101015703550000005B -:101530000000000000000000000000000000555501 +:1014B0000000000400000000000000000000000028 +:1014C000020000000000000000000000000000001A +:1014D0000000000000030000000000000000000009 +:1014E00000002000000000000000000000000000DC +:1014F00004000000000000000000000000000000E8 +:1015000000002000000000000000000000000000BB +:1015100004000000000000000000000000000000C7 +:10152000000000000000000000000000000040403B +:1015300000000000000100000000000000000000AA :10154000000000000000000000000000000000009B -:1015500045455505F7D7FFDF0000000000000000FB -:10156000CFCF0F0FFFFFFFFF000000005703550014 -:10157000000000000000000000000000000000006B +:10155000000000000000000000000000000000008B +:10156000000000000000000000000000000000007B +:101570000000000000020000000000000000000069 :10158000000000000000000000000000000000005B -:10159000000000000F000F0000000000000000002D -:1015A0000000000055005500FF00000055005500E8 +:1015900000000000000000000000000000009000BB +:1015A000000000000000000000000000000000003B :1015B000000000000000000000000000000000002B -:1015C0005D550C000000000000000000000000005D -:1015D0000000757555F502820080000000000000D3 -:1015E0000000CFCF0F0F0000555500000000550040 -:1015F0005500000000000000000000000000000096 +:1015C0000000000008000010000000000000000003 +:1015D0000000080000000000000000000000000003 +:1015E00000000000000000000000000000000000FB +:1015F0000000820000000000000000000000000069 :1016000000000000000000000000000000000000DA -:10161000000000610006000D000000610006050DDD -:101620000000000000000000000000610006000D46 +:1016100000000000000000000000000000000010BA +:1016200000000000000000000000000000000000BA :1016300000000000000000000000000000000000AA -:10164000000000610006000D000000000000000026 +:101640000000000200000000000000000000000098 :10165000000000000000000000000000000000008A -:101660000000000085610A0E050D00A10061000662 -:10167000000D00000000000000000000000000005D -:101680000000000000610006000D000000000000E6 -:10169000000000000000000000C0AAEA00000000F6 -:1016A000FFC3FFEF0000000000000000000000008A -:1016B00000C0AAEA000000000000000000000000D6 -:1016C00000000000000000000080FFFF000000009C -:1016D000000000000000000000000000000000000A -:1016E000000000000000000000000080FFFF00007C +:101660000000000000000000000000080000000072 +:101670000000000000080000000000000000000062 +:10168000000800000000000000000008000000004A +:10169000000000000010000000000000000000003A +:1016A000000000000000000000000000000000003A +:1016B0000000000000001000C080000000000000DA +:1016C00000000000000000200000000000000000FA +:1016D00000000000000800000000010300000000FE +:1016E00000000000000000000000000000000000FA :1016F00000000000000000000000000000000000EA -:101700000000000000000000000028282828000039 -:10171000000000000000000000000000AAAA000075 -:101720000000EBEBEBEB000000000000000000000D -:1017300000000000AAAA0000000000000000000055 -:101740000000000000000000000000800080000099 -:101750000000000000000000000000000000000089 -:101760000000000000000000000000000080008079 +:1017000000000000000000000000000000000000D9 +:1017100000000000000000000000000000000000C9 +:101720000000000000001000100000000000040095 +:10173000040004000000000080A000080000000079 +:1017400000000000008400000000000000A0000075 +:101750000000000000000000000000000400000085 +:101760000000000000000000000000000000000079 :101770000000000000000000000000000000000069 -:10178000000000000000000000000000282828F8E9 -:101790000000000000000000FF00FF0400F082F2E3 +:101780000000000000000000000000000000000059 +:101790000000000000000000000000000000000049 :1017A0000000000000000000000000000000000039 -:1017B0000000000000000000000000000000000029 -:1017C00000000000000000003C3C3D3C0000000028 -:1017D0000000000000000000000000000000000009 -:1017E000000000000000000000003C003D0500007B -:1017F000000055555D55000000000000000000008D -:101800000000000000000000000000000000F0F0F8 -:10181000F0F200000000000000000000040400F0EE -:1018200000F00000000000000000000000000000C8 +:1017B0000000000000000000000000000000010028 +:1017C0000000000000000000000000000000000019 +:1017D00000000000000000000008000001800180FF +:1017E00000000000000000000000000000000000F9 +:1017F00000000000000000000000000000000000E9 +:1018000000000000000000000000000000000000D8 +:1018100000000000000000000000000808000100B7 +:101820000080000000000000000000000000000038 :1018300000000000000000000000000000000000A8 -:101840000000000000000000000000000500000093 -:101850000000000000000000000000000000000088 -:101860000000000000000000000000003C003C0000 -:101870000000000000000C0000000000000000005C +:101840002000000000000000000000000000000078 +:101850000000000000000000000000010000202047 +:101860000204000000000000000000000000000072 +:101870000000000000000000000000000000000068 :101880000000000000000000000000000000000058 -:1018900000000082000000000000000000000000C6 -:1018A0000000000084000000880000000200020028 -:1018B0002100210000008400C000000000000000A2 -:1018C0000000000000000000000800000000000010 -:1018D0000100118000030000000000000000000073 -:1018E00000000000000000000000000000000008F0 -:1018F0000000110041840000000000000000000012 +:101890000000000000000000000000000001000047 +:1018A0002000000400000000000000000000000014 +:1018B00000000000000000000000A0000180008087 +:1018C0000080008000000000000000000000000018 +:1018D00000000000000000009000900000000000E8 +:1018E00000001000000000000000000800000000E0 +:1018F00000000000000000000000000000000000E8 :1019000000000000000000000000000000000000D7 -:101910000000210040004000000000000000000026 -:10192000000000400900000000000000000000006E -:1019300000209002C00040000000000000000000F5 -:101940000000008409820000000000000000000880 -:1019500000201000A0020000400000000002000073 -:101960000000000010020000000000000000000065 -:101970000000004010029004400000000000000041 -:101980004000000000A00002000000000000000075 -:101990000000000210408040000000000000001025 -:1019A0000000000000000000840000410000000072 -:1019B0000000000000000010001000000000000007 -:1019C0000041000900050000004100000000000087 -:1019D000000800000000000000009000000000006F -:1019E0000000000000009000904100000000000096 +:101910000000000000000000000000009000000037 +:1019200000000000000000000000000000000008AF +:10193000000000000000001000000000000020086F +:101940000004000400080000000000C0000000A027 +:101950000000000000840000000000000000000003 +:1019600000000000800000000000000000000000F7 +:101970000000000000000000000000000000000067 +:101980000000000000000000000000000000000057 +:10199000000000000000000000000000000000C087 +:1019A00000000000008400000000000000000000B3 +:1019B000000000000000080000000000000000001F +:1019C00000000000000000000000002000000000F7 +:1019D00000000000000000080000000000000002FD +:1019E000008001000000000000000000000000096D :1019F00000000000000000000000000000000000E7 -:101A00008200000000000000000000000000000054 -:101A100000000000000000000000000800000008B6 -:101A20000008000000080000000800080008000886 -:101A3000000000840008008400840084000000840A -:101A4000000800000084000000880088000800846E -:101A500000000084008400000084000000840084F2 -:101A600000000008000000000088008800880008CE -:101A700000C0000000080000000000100000000886 -:101A80000000000800080008000000000008001026 -:101A90000000000800100000000000880021002164 -:101AA000C00200030000000300000021002100210B -:101AB00000000000000800000402090800080008F7 -:101AC000C000000000050000000300210005000028 -:101AD00000050000000000030003080800000000EB -:101AE0000000884100000009000500000003000319 -:101AF00000050000000800000000210009000000AF +:101A000000000000000000000000000000000000D6 +:101A100000000000000000000000000000000000C6 +:101A200000000000000000000000000000000000B6 +:101A300000000000000000000000000000000500A1 +:101A40000000000000000000000000000000000096 +:101A50000000000000000000000000000000000086 +:101A60000000004020000000000000000000000016 +:101A70000000000000000000000000000000000066 +:101A80000000000000000000000000000000000056 +:101A90000000000000000000000000000000000046 +:101AA0000000000000000000000000000000000036 +:101AB0000000000000000000000000000000000026 +:101AC0000000000001000000000000000000000015 +:101AD0000000000000000000000000000000000006 +:101AE000000000000100900000C0000000000000A5 +:101AF00000000000000000000000000000000000E6 :101B000000000000000000000000000000000000D5 -:101B1000000000000000004000211005100000102F -:101B20000000000000000000000041000000000074 -:101B30000000000000000000000080009000000095 -:101B40000000000000000000000000000000000095 -:101B50000082000000000000000000000000000003 -:101B600003880000080000000000000000000000E2 -:101B7000000000000000000000000000840084005D -:101B80000010000000100000000000100000000025 -:101B900000000000000000000000000000008800BD -:101BA00000000000820000000000000000000000B3 -:101BB0000000000000000000000900000000040018 -:101BC0000000000000000000000000000000000015 -:101BD00008000000080000000800001100000009D3 -:101BE0000000C000080082000000000000000005A6 +:101B100000000000000000000000000000000000C5 +:101B200000000000000001000000000000000000B4 +:101B300000000000000000000000000000000000A5 +:101B40000000000000001100002100000000000063 +:101B50000000000000000000000000000000000085 +:101B60000000000000001100A100000000000000C3 +:101B70000000000000000000000000000000000065 +:101B80000000000000000000000000000000000055 +:101B90000000000000000000000000000000000045 +:101BA0000000000000000000110021000000000003 +:101BB0000000000000000000000000000000000025 +:101BC00000000000000000000008000011100000EC +:101BD0000000000000000000000000000000000005 +:101BE0000000000000000000000809800003000061 :101BF00000000000000000000000000000000000E5 -:101C000008000000000000000000000000000000CC +:101C000000000000000000000000000000000000D4 :101C100000000000000000000000000000000000C4 -:101C2000200000880000000000000000000000000C -:101C30000000000000000000000002400040000022 -:101C4000800000000000000000000082000000088A -:101C5000000800000000000800000008000000006C -:101C60000000000000000900000000000000000863 -:101C700000000090210000000000000000000000B3 +:101C20000000000000000000000000410900000367 +:101C30000080000000000000000000000000000024 +:101C40000000000000000000000000000000010192 +:101C50000000000000000000000000000000000084 +:101C60000000000000000000000000010102000070 +:101C700000880000000000000000000000000000DC :101C80000000000000000000000000000000000054 :101C90000000000000000000000000000000000044 -:101CA00000008000200000000000C00000000008CC -:101CB00000100000001000000000000000000008FC -:101CC000000008000000000000000000000000000C -:101CD00000000000000000050000001000030805DF -:101CE0000000000000000041000800030010000098 -:101CF0000003000000000008820000100000000047 -:101D000000000000000500000000000000000000CE -:101D1000000000000000004000410008000000003A -:101D20000005001004210000000000000000000079 -:101D300000C00000000000000000000000000000E3 +:101CA0000000000000000000000000000001010032 +:101CB000000000880000000000000000000000009C +:101CC000000000000000000000000000000008000C +:101CD0000001000000000000000000000000000003 +:101CE00000000000000000000000000001008888E3 +:101CF00008000000000000000200000000000000DA +:101D000000000000000000000000000000000000D3 +:101D100000000000000000000000000000000000C3 +:101D200000000000000000000000000000000000B3 +:101D3000880000000100000000000000000000001A :101D40000000000000000000000000000000000093 -:101D50000000000000000000000000000000000083 -:101D600000000000000000000084000004000000EB -:101D7000000000000000000000000000000000C0A3 -:101D8000000000840000000800C0000000000010F7 -:101D9000000000000000000000200000090000001A -:101DA000000000000000000000050000000000002E -:101DB00000210008000000000000000000102009C1 -:101DC00000210000000000000000000000000004EE -:101DD00020000000000000000008000000210000BA -:101DE0000040000900100000000000200041000039 -:101DF0000021820800000000000000000004000430 -:101E000000000009000900000000000000080000B8 -:101E100000040000000000000000000000080000B6 -:101E200000030008000000210003008800000000FB -:101E300000020000000000000000000000000000A0 +:101D50000000000808000000000000000000000073 +:101D60000000000000000000000000000000410032 +:101D700000808000410000000000800000000000A2 +:101D80000000000000000000000000000000000053 +:101D90000000000000000000000000000000000043 +:101DA0000000000000000000000000000000000033 +:101DB00000000000000041000000000000000000E2 +:101DC0000000000000000000000000000000000013 +:101DD00000001100000000000000000000000000F2 +:101DE00000000000000000000000000000000000F3 +:101DF0000011000000804000000000000000000012 +:101E000000000000000000000000000000000000D2 +:101E100000000000000000000000000000000000C2 +:101E200000000000000000000000000000000000B2 +:101E30000000000040110000000000000000000051 :101E40000000000000000000000000000000000092 -:101E50000000000000000000000000000000000082 -:101E60000000000000000000090000000000000069 -:101E70000000000000000000000000000000000062 +:101E50000000000001000000000000000000000081 +:101E60000000000000000000000000000000000072 +:101E70000000000100000040010000000000000020 :101E80000000000000000000000000000000000052 :101E90000000000000000000000000000000000042 :101EA0000000000000000000000000000000000032 -:101EB000000000010000C000000100080000C10097 -:101EC0000040C0820000C0000001000000000000CF -:101ED0000000000000000000000001880100000078 -:101EE000001010C000000000000100000000000011 -:101EF000C000000000010000C000000101880000D7 -:101F0000C0000040C0820000C000000100000000CE -:101F10000000000000000000000000000088000138 -:101F200000000008C00800000000000100000000E0 -:101F30000000000000080000000000030480000909 -:101F4000C00000008080000080000003000000004E -:101F500000000000000400000000001040004004E9 -:101F6000210000808000000000000041000000000F -:101F7000000000000000000300000000000340001B -:101F8000090484000000808000008000000300003D -:101F9000000000000000000400000000001110001C -:101FA0000008020000808080000000000041000066 -:101FB0000000090000000000000002000000020014 -:101FC00002008200000003800000000000808020EA -:101FD000000040000000000000004100000410006C -:101FE0000900890000090800800000000000800945 -:101FF00000000000040000000000000008000000D5 -:102000000400110021800000030080000000008017 -:1020100080200000400000000000000009000000D7 -:1020200009000900110000001100800000000000FC -:1020300080400000000000000000000000000000E0 -:1020400000008200830200000110A000000000C018 -:1020500082010000010000000000000000000000FC -:102060000000820040840000010008000000000021 -:10207000C00000000000000000000000000001009F -:102080000000000082008410000001000200000037 -:1020900000C08201000001000000000000000000FC -:1020A00000000000C00002840000000008000000E2 -:1020B0000000C0010000000000000000000000005F -:1020C0000000200000880000010000000000000067 +:101EB0000000000000000101000000000000000020 +:101EC0000000000000000000000000000000000012 +:101ED00000000000480043E0002200000000000075 +:101EE00000000000000000000000000000000000F2 +:101EF00000000000000000E0070082000000000079 +:101F000000000000000000000000000000000000D1 +:101F100000000000000000000000000000000000C1 +:101F200000000000000000000000000000000000B1 +:101F3000000000000000000000E0000081410000FF +:101F40000000000000000000000000000000000091 +:101F50000000000000000000000000000000000081 +:101F60000000000000000000000000000000000071 +:101F700000000000000000000000F0F00000000081 +:101F80000000000000000000000000000000000051 +:101F90000000000000000000000000000000000041 +:101FA0000000000000000000000000000000000031 +:101FB0000000000000000000000000000000000021 +:101FC0000000000000000000000000000000000011 +:101FD0000000000000000000000000000000000001 +:101FE00000000000000000000000000000000000F1 +:101FF000000000000000000000000000F0F0000001 +:1020000000000000000000000000000000000000D0 +:1020100000000000000000000000000000000000C0 +:1020200000000000000000000000000000000000B0 +:1020300000000000000000000000000000000000A0 +:102040000000000000000000000000000000000090 +:102050000000000000000000000000000000000080 +:102060000000000000000000000000000000000070 +:102070000000000000000000000000000F0F000042 +:10208000FFFF000000000000000000000000000052 +:102090000000000000000000000000000000000040 +:1020A0000000000000000000000000000000000030 +:1020B0000000000000000000000000000000000020 +:1020C0000000000000000000000000000000000010 :1020D0000000000000000000000000000000000000 -:1020E0000000C0000004000000000000000000002C -:1020F00000010000000000000000000000000000DF -:102100000000000184000040000001000000000009 +:1020E00000000000000000000000000000000000F0 +:1020F00000000000000000000000000000000F0FC2 +:1021000000000000000000000000000000000000CF :1021100000000000000000000000000000000000BF -:10212000000000001000001000000000000000008F -:10213000000000010000000000000000000000009E -:10214000000000030010000000004100000000003B -:10215000000000410000000000000000000000003E -:10216000000000418010008000001000000000000E -:10217000000000410000000000000000000000001E -:102180000000000000080004000000004100000002 -:1021900000000000004100000000000000000000FE -:1021A000000000000041801000000000040000005A -:1021B00000000000004100000000800000910000CD -:1021C00000000000090000000041000000040000C1 -:1021D00000410000000009840040800000C10000B0 -:1021E0000011000009000000004100000041000053 -:1021F000000000200000031100000004800000C166 -:102200000000000000108900000000C180000004F0 -:10221000000000410020000003040040800000C1D5 -:1022200000000002000082000000004100100002D7 -:102230000000000000200000030200000800001061 -:1022400000000000880010000000001102000000E3 -:102250000000000100000000000500012000004017 -:10226000000000008800020000000091C000000192 -:1022700000000000000100000184000000002000B8 -:1022800000400000000088008200000000050800F7 -:10229000000000000001000100000190000120008A -:1022A0000040000000000200100000000005820055 -:1022B0000000000000000001000001850000000097 -:1022C000000000000000000000000000811200E09B -:1022D00007004842000000000000484200000000E3 -:1022E00000000000000000000000000A811200E071 -:1022F0000700480A00000000000000000000000085 -:10230000000000000000000000000000000081123A -:1023100000E00700484200000000000048420000C2 -:10232000000000000000000000000000000081121A -:1023300000E00700488100000000000000000000ED -:10234000000000000000000000000000000000008D +:1021200000000000000000000000000000000000AF +:10213000000000000000000000000000000000009F +:10214000000000000000000000000000000000008F +:10215000000000000000000000000000000000047B +:102160000006800E200000000000000000000000BB +:10217000000000000000000000000000000005401A +:102180002A06054C00A80000000000000000000026 +:10219000000000000000000000000000000000003F +:1021A000000000000000000000000000000000002F +:1021B000000000000000000000000000000000001F +:1021C00000400006000C00000000000000000000BD +:1021D00000000000000000000000000000000000FF +:1021E0000000FF0000FF00000000000000000000F1 +:1021F00000000000000000000000000000000000DF +:1022000000003C3CFFFF0000000000000000000058 +:1022100000000000000000000000000000000000BE +:1022200000000000000000000000000000000000AE +:10223000000000000000000000000000000000009E +:1022400000000000FF00FFFF000000000000000091 +:10225000000000000000000000000000000000007E +:1022600000000000FF0000FF000000000000000070 +:10227000000000000000000000000000000000005E +:10228000000000003C3C00000000000000000000D6 +:10229000000000000000000000000000000000003E +:1022A000000000000000000000000000000000002E +:1022B000000000000000000000000000000000001E +:1022C000000000000000FF0000000000000000000F +:1022D00000000000000000000000000000000000FE +:1022E000000000000000FF0000FF000000000000F0 +:1022F00000000000000000000000000000000000DE +:102300000000000000000000F0F0000000000000ED +:1023100000000000000000000000000000000000BD +:1023200000000000000000000000000000000000AD +:10233000000000000000000000000000000000009D +:1023400000000000000000000000F0F000000000AD :10235000000000000000000000000000000000007D -:10236000000000000000000000000000000000006D +:102360000000000000000000FF0000FF000000006F :10237000000000000000000000000000000000005D -:10238000000000000000000000000000000000004D +:1023800000000000000000000000F0F0000000006D :10239000000000000000000000000000000000003D :1023A000000000000000000000000000000000002D :1023B000000000000000000000000000000000001D -:1023C000000000000000000000000000000000000D +:1023C000000000000000000000000000F0F000002D :1023D00000000000000000000000000000000000FD -:1023E00000000000000000000000000000000000ED +:1023E00000000000000000000010000000000000DD :1023F00000000000000000000000000000000000DD :1024000000000000000000000000000000000000CC -:1024100000000000000000000000000000000000BC +:1024100000030000000000000000000000000000B9 :1024200000000000000000000000000000000000AC :10243000000000000000000000000000000000009C -:102440000000757B0000000000000000000000009C -:10245000000000000000000000000000000000007C -:10246000DEAE257B00000000000000000000000040 -:10247000000000000000000000000000000000005C -:10248000DEA40000757B00000000000000000000DA +:10244000000040000000000000000000000000004C +:10245000100000000000000000000000000000006C +:10246000100000000000000000000000000000005C +:10247000000000000000000000000000000000025A +:10248000004000000000000000000000000000000C :10249000000000000000000000000000000000003C -:1024A0000000DEAE257B0000000000000000000000 -:1024B000000000000000000000000000000000001C -:1024C0000000DEA46126034000000000000002308E -:1024D000A0000000000000000C4000000000000010 -:1024E00002C0648661260340000000000000023044 -:1024F000A0000000000000000C40000000000000F0 -:1025000002C0648600006126034000000000000055 -:102510000230A0000000000000000C40000000009D -:10252000000002C064866126034000000000000035 -:102530000230A0000000000000000C40000000007D -:10254000000002C0648600110000000000000000CE -:102550000000000000000000000500000000000076 -:10256000000000000000000000000005000900005D -:102570000000000000000180018001800180000057 -:102580000000000000000001000800000000000939 -:10259000000000000000100000000000000000002B -:1025A000C0000000000000000000000000008800E3 -:1025B0000000000000000010000000000000000803 -:1025C000000000000000008000000000000000008B -:1025D00000000000004000000000000000020000B9 -:1025E00000000000000000000000000000000000EB -:1025F000000000000002000004400220044002200D -:1026000000000000000000000000000000000002C8 -:102610000000004010004000000200000000000028 +:1024A00040000000000000000000000000000000EC +:1024B00000000000000000000000000040000002DA +:1024C00000000000000000000000000010000000FC +:1024D00000000000000000000000000002000000FA +:1024E00000000000000000000200000000000000EA +:1024F00000000000000000000000000000000000DC +:102500008200000000000000000000000000000049 +:1025100008100000000000000000000000000000A3 +:1025200000000000000000000000000000000000AB +:10253000000000000000000000000000000000009B +:10254000000000000000000000000000000000008B +:10255000000000000000000000000000000000007B +:10256000000000000000000000000000000000006B +:10257000000000000000000000000000000000005B +:10258000000000000000000000000000000000004B +:10259000000000000000000000000000000000003B +:1025A000000000000000000000000000000000002B +:1025B000000000000000000000000000000000001B +:1025C000000000000000000000000000000000000B +:1025D00000000000000000000000000000000000FB +:1025E00000000000010000000000000000000000EA +:1025F00000000000000000000000000000000000DB +:1026000000000000000000000000000000000000CA +:1026100000000000000000000000000000000000BA :1026200000000000000000000000000000000000AA -:10263000000000000000400020000000000000003A -:1026400000002140210000000010002002000000D6 -:102650000010000000000000004100009000000099 -:10266000080040000200000082000000000000009E -:102670000000000002000000000040000000080010 -:102680004000820082008210001000010000000063 -:1026900000009000000000000000000000000800A2 -:1026A0000000004100000000000082000000000067 -:1026B000000000000000000000000010000000000A -:1026C00000000000000000000000000000090008F9 -:1026D0000000000000080008008400000008000856 -:1026E0000008000880080000001000100088038423 -:1026F000008800840040000800880040800800082E -:1027000080088084000800080084000000000000A9 -:102710000088000000000000051000000000000814 -:1027200000080008004005080040000000080008FC -:102730000008000000000008000800000008000871 -:1027400000080008000800080000000000089010C1 -:102750000021002100080005000000000008000022 -:10276000004100030000000000000008000000001D -:10277000000800000041000200000000000000000E -:10278000000300100008000000000000000000002E -:102790000000000000000021000000080005000803 -:1027A0000000000000000008000000000000000021 +:10263000000000000000000000000000000000009A +:10264000000000000000000000000000000000008A +:10265000000000000000000000000000000000007A +:10266000000000000000200000000000000000004A +:10267000000000000000000000000000000000005A +:10268000000000000000000000000000000000004A +:10269000000000000000000000000000000000003A +:1026A000000000000000000000000000000000002A +:1026B000000000000000000000000000000000001A +:1026C000000000000000000000000000000000000A +:1026D00000000000000000000000000000000000FA +:1026E0000000000001000000000400800000000065 +:1026F00000000000000000000000000000000000DA +:1027000000000000000000000000000000000000C9 +:10271000000000000008001101000080000000001F +:1027200000000000000000000000000000000000A9 +:102730000000000000000000000000000000000099 +:102740000000000000000000000000000000000089 +:1027500000000000000000000000010010800000E8 +:102760000000000000001000000000000004000055 +:102770000000000000000000000000000000000059 +:102780000000000000000000000000000000000049 +:102790000000000000000001000020000004000014 +:1027A0000000000000000000000000000000000029 :1027B0000000000000000000000000000000000019 -:1027C0000000040000000000040000000000000001 -:1027D00000000000000841080000000000080000A0 -:1027E00000000000008200A0008400001100000032 -:1027F0000000000000C00000000000000000000019 -:1028000000000082001000A0000000000082000014 -:1028100000000000000000000000000000000000B8 -:102820000000000000840000000000000000000024 +:1027C0000000000000000000000000000000000009 +:1027D00000000000000000000000000020000004D5 +:1027E0000000000000009000000000000000000059 +:1027F00000000000000000000000000000000000D9 +:1028000000000000000000000000000000000000C8 +:102810000000000000009000000000000000000028 +:1028200000000000000000000000000000000000A8 :102830000000000000000000000000000000000098 -:1028400000000000000000A0008400A000080000BC -:102850000000000000100000010000000000000067 +:102840000000000000000000000000000000000088 +:1028500000000000000000009000000000000000E8 :102860000000000000000000000000000000000068 -:102870000000000000000000000000000000000058 -:10288000000000000000000000100000000000092F -:10289000000000000000000000000000000500052E -:1028A000000500050000000000001000000400000A +:102870000000000000000000000000001100000047 +:1028800000840000000000000000000000000000C4 +:1028900000000084000000C000C0000000000084B0 +:1028A00000840000000000000000000000000000A4 :1028B0000000000000000000000000000000000018 -:1028C00000000000000000000000C0000800000040 -:1028D0000000A00000000001000020000000000037 -:1028E00000000000000000000000000000000000E8 -:1028F00000000000000000000000000000000000D8 -:1029000000000000000000000000000100000000C6 -:1029100000000000000000000000000000000000B7 -:1029200000000000000000000000000000000000A7 +:1028C0000000000000000000000000000000000008 +:1028D0000000000000000000000000C00000000038 +:1028E0000084000000000000000000000000000064 +:1028F00000000000000000090000000000000000CF +:1029000000000000000000000000000200000000C5 +:1029100000000000000000000000000000090000AE +:1029200000000000000000000000000200020000A3 :102930000000000000000000000000000000000097 :102940000000000000000000000000000000000087 -:102950000000000000000000000000000000000077 +:1029500000000000000000000000000000000080F7 :102960000000000000000000000000000000000067 -:10297000000800000000000000000000000000004F -:102980000000000000000000000000030000001034 -:1029900000210000002100000000000300000000F2 -:1029A000000800000000000000000000000000001F +:102970000000000020000000000000000500000032 +:102980000000000000000000000000000000000047 +:102990000000000000000000000000000000000037 +:1029A0000000000002000000000000000000000025 :1029B0000000000000000000000000000000000017 -:1029C0009000000000000000000000000000000077 -:1029D00000000000000000000010000000000000E7 -:1029E0000000000000A00000000000C00000000087 -:1029F00000000000000000000000000000000000D7 -:102A0000008400000010000021000000000000848D -:102A100000000000000000000000000004080000AA -:102A20000000008400840084008400000000000096 +:1029C0000000000000000000000000000000000007 +:1029D00000000000000000000200000000000000F5 +:1029E00000080000000000000000000000000000DF +:1029F00001000000000000000000000000000000D6 +:102A000000000000000000000000000000000000C6 +:102A100000000000000000000000000000000000B6 +:102A200001000000000000000000000000000000A5 :102A30000000000000000000000000000000000096 -:102A400021000010000000000000000010A00000A5 -:102A50000000000000000000000000110000000065 -:102A6000040400000000000000000041000000001D -:102A70000000000000000000000000020000000054 -:102A80000000020000000000000000410000000003 -:102A9000000000000010000000080000000000001E -:102AA00000000000000000000000000000400040A6 -:102AB0000040004000000040000002000000000054 +:102A40000000000000000000000000000000000086 +:102A50000000000000000000000000000000000076 +:102A60000000010000000000000000000000000065 +:102A70000000110021000000000000000000000024 +:102A80000000000000000000000000000000000046 +:102A90000000000000000000000000000000000036 +:102AA00000001100210000000000000000000000F4 +:102AB0000000000000000000000000000000000016 :102AC0000000000000000000000000000000000006 -:102AD00000001000000000000000001000000000D6 -:102AE0000000800000000000000021000000000045 -:102AF00000000000000000000000000000000000D6 +:102AD00000000000000000000000000000000000F6 +:102AE00000000000110021000000000000000000B4 +:102AF0000000000000410900000300800000000009 :102B000000000000000000000000000000000000C5 :102B100000000000000000000000000000000000B5 -:102B200000000000000000000000000000000000A5 +:102B200000000000004109000003008000000000D8 :102B30000000000000000000000000000000000095 :102B40000000000000000000000000000000000085 -:102B50000000000000000000000000000000002055 -:102B600090880088000400000000000000000000C1 -:102B70000000000000000000000100000000000054 -:102B80000000000000000000000000000000400005 -:102B900000008409080000000000000000000000A0 -:102BA0000000000000000000000000000000000025 +:102B50000000000000000000000000000000000075 +:102B60000000000000000041090000030080000098 +:102B70000000000000000085010000000088000047 +:102B80000000000000000000000000000000000045 +:102B90000000000000000000000000000000000035 +:102BA0000000000000000085010000000088000017 :102BB0000000000000000000000000000000000015 :102BC0000000000000000000000000000000000005 :102BD00000000000000000000000000000000000F5 -:102BE000000080000880008000000000000000005D -:102BF00000000000000000000002000800000000CB +:102BE000000000000000000000010100000000885B +:102BF00000000000000000000000080000000100CC :102C000000000000000000000000000000000000C4 -:102C1000800000000004001100000000000000001F -:102C200000000000000000000000000000000000A4 +:102C100000000000000000000000000000000000B4 +:102C2000000000000000000000008800000001001B :102C30000000000000000000000000000000000094 :102C40000000000000000000000000000000000084 :102C50000000000000000000000000000000000074 -:102C600000000000004180C0008000000000000063 -:102C70000000000000000000000000000000000054 -:102C80000000000000000000000000000000000044 -:102C900000008000800000048000000000000000B0 +:102C600000000000000000000000000088000000DC +:102C700001000000000000000000000080000000D3 +:102C80004100000000000000000000000000000003 +:102C90000000000000000000000000000000000034 :102CA0000000000000000000000000000000000024 -:102CB0000000000000000000000000000000000014 +:102CB00041000000000000000000000000000000D3 :102CC0000000000000000000000000000000000004 :102CD00000000000000000000000000000000000F4 -:102CE000000080000000C0C0829188040000000045 -:102CF00000000000000000000000000000000000D4 +:102CE00000000000000000000000000000000000E4 +:102CF0000000410000000000000000000000001182 :102D000000000000000000000000000000000000C3 -:102D100000000000100010888401C0900000000036 -:102D200000000000000000000000000000000000A3 +:102D100000000000000000000000000000000000B3 +:102D20000000000000000000000000000000001192 :102D30000000000000000000000000000000000093 :102D40000000000000000000000000000000000083 -:102D5000000000000000000000000000000008006B -:102D6000080000000800830000008200A1000000AD -:102D70000000000000000000000000000000000053 -:102D80000100000000000000000000000000000042 -:102D900000000000000000100083111001C00000BE +:102D50000000000000000000000000000000000073 +:102D60000000000000000000000000000000000063 +:102D7000041100000000000000000000000000003E +:102D80000001000000000000000000000000000042 +:102D90000000000000000000000000000000000033 :102DA0000000000000000000000000000000000023 -:102DB0000000000000000000000000000000000013 +:102DB0000001000000000000000000000000000012 :102DC0000000000000000000000000000000000003 :102DD00000000000000000000000000000000000F3 -:102DE000000000000000000002000000000084005D -:102DF00000000000000000000000000000000000D3 -:102E000000000400000000000000000000000000BE -:102E1000000000000000000008800083059104808D +:102DE00000000000000000000000000000000000E3 +:102DF00000000101000000000000000000000000D1 +:102E0000000000E000008141000000000000000020 +:102E100000000000000000000000000000000000B2 :102E200000000000000000000000000000000000A2 -:102E30000000000000000000000000000000000092 +:102E3000000000E0000081410000000000000000F0 :102E40000000000000000000000000000000000082 :102E50000000000000000000000000000000000072 -:102E600000000000000000000000800800088080D2 -:102E70000000000000000000000000000000000052 +:102E60000000000000000000000000000000000062 +:102E70000000000000E000008141000000000000B0 :102E80000000000000000000000000000000000042 -:102E900000000000000000000000000000890000A9 +:102E90000000000000000000000000000000000032 :102EA0000000000000000000000000000000000022 :102EB0000000000000000000000000000000000012 :102EC0000000000000000000000000000000000002 :102ED00000000000000000000000000000000000F2 -:102EE00000000000000000000000000040000000A2 -:102EF00090840000000000000000000000000000BE +:102EE00000000000000000000000000000000000E2 +:102EF00000000000000000000000000000000000D2 :102F000000000000000000000000000000000000C1 -:102F1000000000000000000000000000000020820F -:102F20000020000000000000000000000000000081 +:102F100000000000000000000000000000000000B1 +:102F200000000000000000000000000000000000A1 :102F30000000000000000000000000000000000091 :102F40000000000000000000000000000000000081 :102F50000000000000000000000000000000000071 -:102F6000000000000000000000200000000081813F -:102F700000C8430000000000000000000000000046 +:102F60000000000000000000000000000000000061 +:102F70000000000000000000000000000000000051 :102F80000000000000000000000000000000000041 :102F90000000000000000000000000000000000031 -:102FA000000007000000000000000000000000001A +:102FA0000000000000000000000000000000000021 :102FB0000000000000000000000000000000000011 :102FC0000000000000000000000000000000000001 :102FD00000000000000000000000000000000000F1 :102FE00000000000000000000000000000000000E1 -:102FF0006060060600000000000000000000000005 +:102FF00000000000000000000000000000000000D1 :1030000000000000000000000000000000000000C0 :1030100000000000000000000000000000000000B0 -:103020000000FF0000BBFFFF0000000000000000E8 +:1030200000000000000000000000000000000000A0 :103030000000000000000000000000000000000090 :103040000000000000000000000000000000000080 :103050000000000000000000000000000000000070 :103060000000000000000000000000000000000060 -:10307000000090900909000000000000000000001E +:103070000000000000000000000000000000000050 :103080000000000000000000000000000000000040 :103090000000000000000000000000000000000030 -:1030A00000000000FF0000BB000000000000000066 +:1030A0000000000000000000000000000000000020 :1030B0000000000000000000000000000000000010 :1030C0000000000000000000000000000000000000 :1030D00000000000000000000000000000000000F0 :1030E00000000000000000000000000000000000E0 :1030F00000000000000000000000000000000000D0 -:1031000000000000000000000000000000000000BF -:1031100000000000000000000000000000000000AF +:103100000000000000000000000000000040000679 +:10311000000C0000000000000000000000000000A3 :10312000000000000000000000000000000000009F -:10313000000000000000000000000000000000008F -:10314000000000000000000000000000000000007F +:103130000000000000000000000000000040000649 +:10314000000C000000000000000000000000000073 :10315000000000000000000000000000000000006F :10316000000000000000000000000000000000005F -:1031700000000000000000000108FFFF0FF0000049 -:10318000000000000000000000000000000000003F -:10319000000000000000000000000000000000002F -:1031A0000000000000000F0F0000FFFF82C30000BE +:10317000000000000000000000000000000000400F +:103180000006000C0000000000000000000000002D +:103190005555FFFF00000000000000000000000087 +:1031A000000000000000000000000000000000001F :1031B000000000000000000000000000000000000F -:1031C00000000000000000000000000000000000FF +:1031C0005555FFFF00000000000000000000000057 :1031D00000000000000000000000000000000000EF :1031E00000000000000000000000000000000000DF -:1031F0000000000080800000010800000FF0FFFFC9 -:1032000000000000000000000000000000000000BE -:1032100000000000000000000000000000000000AE -:1032200000000000000000000F0F0000000082C33B +:1031F00000000000000000000000000000000000CF +:103200000000FF00FFFF00000000000000000000C1 +:103210000000555500000000000000000000000004 +:10322000000000000000000000000000000000009E :10323000000000000000000000000000000000008E -:10324000000000000000000000000000000000007E +:1032400000005555000000000000000000000000D4 :10325000000000000000000000000000000000006E :10326000000000000000000000000000000000005E -:103270000000000000008080000085610A3FC50D4D -:1032800000A000000000000000000000000000009E -:10329000000000610006000D0000000000000000BA -:1032A0000000000000000000000015612A0E054D1E -:1032B00000A8000000000000000000000000000066 -:1032C00000000000000000000000000000000000FE +:10327000000000000000000000000000000000004E +:1032800000000000FF00000000000000000000003F +:10329000000000000000F0F000000000000000004E +:1032A000000000000000000000000000000000001E +:1032B000000000000000000000000000000000000E +:1032C000000000000000F0F000000000000000001E :1032D00000000000000000000000000000000000EE :1032E00000000000000000000000000000000000DE :1032F00000000000000000000000000000000000CE -:1033000000000000000000000000000000000000BD -:1033100000000000000000000000000000000000AD +:103300000000000000000000F0F0000000000000DD +:103310000000000000000000F0F0000000000000CD :10332000000000000000000000000000000000009D -:10333000FA00FA0000000000000000000000000099 -:10334000000000000000000000000000000000007D +:10333000000000000000000000000000000000008D +:103340000000000000000000F0F00000000000009D :10335000000000000000000000000000000000006D :10336000000000000000000000000000000000005D :10337000000000000000000000000000000000004D -:10338000000000000000000000000000000000003D -:10339000000000000000000000000000000000002D +:1033800000000000000000000000F0F0000000005D +:10339000000000000000010001000080008000002B :1033A000000000000000000000000000000000001D -:1033B0000000FA00FA000000000000000000000019 -:1033C00000000000000000000000000000000000FD -:1033D00000000000000000000000000000000000ED -:1033E00000000000000000000000000000000000DD -:1033F00000000000000000000000000000000000CD -:1034000000000000000000000000000000000000BC -:103410000000000000000000FFAAFF000000000004 -:10342000000000000000000000000000000000009C -:10343000C3C3C3C300000000000000000000000080 +:1033B000000000000000000000000000000000000D +:1033C00000000000000000000000000000000003FA +:1033D00000000000000010000000000000001000CD +:1033E000400000000000100040000000000000004D +:1033F000400000000000200000000000000010005D +:103400004000000000002000400000000080880014 +:10341000000000000000000010001000000800087C +:103420000000000000000000000000000000000498 +:1034300000000000000000000000009000000000FC :10344000000000000000000000000000000000007C :10345000000000000000000000000000000000006C :10346000000000000000000000000000000000005C :10347000000000000000000000000000000000004C -:10348000000000000000000000000000000000003C -:1034900000000000000000000000FFAAFF00000084 -:1034A000000000000000000000000000000000001C -:1034B0000000C0C0C0C0000000000000000000000C -:1034C00000000000000000000000000000000000FC -:1034D00000000000000000000000000000000000EC +:103480000000000000000000000000000000000834 +:10349000000000000000000000000000000000002C +:1034A000000000000000000000000000020000001A +:1034B0000800000002000000000000000000000002 +:1034C00000000000000000000000020002000000F8 +:1034D00002000000000000000000000000000000EA :1034E00000000000000000000000000000000000DC -:1034F00000000000000000000000000000000000CC -:1035000000000000000000000000000000000000BB -:1035100000000000000000000000000000000000AB +:1034F00000000200000000000000000002000000C8 +:10350000000000000000000000000010100010008B +:10351000000008080000000000000000000000009B :10352000000000000000000000000000000000009B :10353000000000000000000000000000000000008B :10354000000000000000000000000000000000007B :10355000000000000000000000000000000000006B :10356000000000000000000000000000000000005B -:103570000000000000040000000000000000000047 -:10358000000000000000000000000000000000003B -:1035900000000002000040000000000000000000E9 -:1035A0000000000200000000000000000000000019 -:1035B00000000002000040000000000000000000C9 +:10357000000000000000000000000000000000004B +:1035800000000000000000000000000000008000BB +:1035900080000000020100000000000000000000A8 +:1035A00000000000010000000000000000002000FA +:1035B000000040000000400000000000000000008B :1035C00000000000000000000000000000000000FB -:1035D0000002000040020000400000000000000067 -:1035E0004000000000020000000000000000000099 -:1035F00000000000404010004000000000000000FB -:103600000000000000001002000000100000000098 -:1036100000000000000000000040020000400040E8 -:103620008200000000000000000000000000000018 -:103630000000000000000000004002000000000048 -:103640000000820000008200000000000000000076 -:103650000000000000000040000000000200000028 -:10366000004000000000000000000000000000001A -:103670000000000000000000000002000000000048 -:103680000000000000000000000000080000000032 -:103690000000000800000000001000100000000002 -:1036A00000000010001000100008001000000000D2 -:1036B00000080010000000000000000000000000F2 -:1036C00000000000000000000810000000000000E2 -:1036D000000000080000000003000000004000009F -:1036E00000000000000000000000000002000200D6 -:1036F00002000008000000000000000000000000C0 -:1037000000000000000000000000000000000000B9 -:1037100000000000000000000000000000000000A9 -:103720000000000000000000000000000000000099 +:1035D00000000000000000000000000000000000EB +:1035E00000000000000000000000000000000000DB +:1035F00000000000000000000000000000000000CB +:1036000000000000000000000000000000000000BA +:1036100000000000000000000000000000000000AA +:10362000000000000000200000000000000000007A +:10363000000000000000000000000000000000008A +:10364000000000000000000000000000000000007A +:10365000000000000000000000000000000000006A +:10366000000000000000000000000000000000005A +:10367000000000000000000000000000000000004A +:10368000000000000000000000000000000000003A +:10369000000000000000000000000000000000002A +:1036A0000000010001000080018000000000000017 +:1036B000000000000000000000000000000000000A +:1036C00000000000000000000000000000000000FA +:1036D00000000000000000000000000000000000EA +:1036E00000000000000000000000000000000000DA +:1036F000000000000000004000000000000000008A +:1037000000000000000000000000080008000000A9 +:1037100000000000080000000000010000000000A0 +:103720000000000002000400002002200000000051 :103730000000000000000000000000000000000089 :103740000000000000000000000000000000000079 :103750000000000000000000000000000000000069 :103760000000000000000000000000000000000059 :103770000000000000000000000000000000000049 :103780000000000000000000000000000000000039 -:103790000000000000080000000000000000000021 -:1037A0000000000000000000000000000000000019 -:1037B00000000000000000000000040040000008BD -:1037C0000000000000000000000000900000000069 +:1037900000000000000000000000000020002000E9 +:1037A0000000900000000000000000000000000089 +:1037B0000000000000000000000000000000000009 +:1037C00000000000000000000000000000000000F9 :1037D00000000000000000000000000000000000E9 -:1037E00009000000000000000000000000000000D0 +:1037E00000000000000000000000000000000000D9 :1037F00000000000000000000000000000000000C9 -:1038000000000000050000000000000005000000AE +:1038000000000000000000000000000000000000B8 :1038100000000000000000000000000000000000A8 -:103820000000000000000000000000000000000098 -:103830000000000000000000000000000000000088 +:1038200000000000000000C00000000000000000D8 +:103830000000000000000000000000200000000068 :103840000000000000000000000000000000000078 -:103850000000000000000000000000000000000068 +:1038500000000000000000C0000000000084000024 :103860000000000000000000000000000000000058 :103870000000000000000000000000000000000048 :103880000000000000000000000000000000000038 -:103890000000000000000000000000000000000028 +:10389000000000000000000000C0000000000084E4 :1038A0000000000000000000000000000000000018 -:1038B0000000000000000000000000000000000008 +:1038B00000000002000000090000000000000000FD :1038C00000000000000000000000000000000000F8 :1038D00000000000000000000000000000000000E8 -:1038E00000000000000000000000000000000000D8 +:1038E00001000000000000000002000000000000D5 :1038F00000000000000000000000000000000000C8 :1039000000000000000000000000000000000000B7 -:1039100000000000000000000000000000000000A7 +:103910000000000000000000000090000000000017 :103920000000000000000000000000000000000097 :103930000000000000000000000000000000000087 :103940000000000000000000000000000000000077 -:103950000000000000000000000000000000000067 -:103960000000000000000000000000000000000057 +:103950000000000000000000000000000004000063 +:103960000000200000000000000000000500000032 :103970000000000000000000000000000000000047 :103980000000000000000000000000000000000037 -:10399000000000000000000000000084008400001F -:1039A0000000000000000000000000000000000017 -:1039B000000000880000000000000000000000007F -:1039C00000000000000000000004050000000000EE +:103990000000000000000000000000000000000027 +:1039A0000000000000000000000000000000010016 +:1039B000900000A0000000000000000000000000D7 +:1039C00000000000000000000000000000000000F7 :1039D00000000000000000000000000000000000E7 :1039E00000000000000000000000000000000000D7 -:1039F000000000000000000000880000000000003F +:1039F00000000000000000000000000000000000C7 :103A000000000000000000000000000000000000B6 :103A100000000000000000000000000000000000A6 -:103A2000000000000009000200000000000000008B -:103A30000000000000000000000000000000000086 +:103A20000100000000000000000000000000000095 +:103A30001100002100000000000000000000000054 :103A40000000000000000000000000000000000076 :103A50000000000000000000000000000000000066 :103A60000000000000000000000000000000000056 :103A70000000000000000000000000000000000046 :103A80000000000000000000000000000000000036 -:103A90000000000000000000000000000000100016 -:103AA0000000000000000000000000000000000016 -:103AB0000000000000000000000000000000000006 +:103A90000000000000000000000000000000000026 +:103AA00000001100002100000000000000000000E4 +:103AB0000000000900801103000000000000000069 :103AC00000000000000000000000000000000000F6 :103AD00000000000000000000000000000000000E6 :103AE00000000000000000000000000000000000D6 :103AF00000000000000000000000000000000000C6 :103B000000000000000000000000000000000000B5 :103B100000000000000000000000000000000000A5 -:103B20000000000000000000000000000000000095 -:103B30000000000000000000000000000000000085 +:103B2000000000000004000011040000000000007C +:103B300000000000000000020101008800000000F9 :103B40000000000000000000000000000000000075 :103B50000000000000000000000000000000000065 :103B60000000000000000000000000000000000055 :103B70000000000000000000000000000000000045 :103B80000000000000000000000000000000000035 :103B90000000000000000000000000000000000025 -:103BA0000000000000000000000000000000000015 -:103BB0000000000000000000000000000000000005 +:103BA0000000000000000001000001000000000013 +:103BB0000000000000000100208802000100000059 :103BC00000000000000000000000000000000000F5 :103BD00000000000000000000000000000000000E5 -:103BE00000000000000000000000000000000000D5 +:103BE00000000000000000000000000001000000D4 :103BF00000000000000000000000000000000000C5 :103C000000000000000000000000000000000000B4 :103C100000000000000000000000000000000000A4 -:103C20000000000000000000000000000000000094 -:103C30000000000000000000000000000000000084 +:103C200000000000000000000000C00000010000D3 +:103C3000000000000000000008000080800908006B :103C40000000000000000000000000000000000074 :103C50000000000000000000000000000000000064 -:103C60000000000000000000000000000000000054 +:103C60000000000000000000000000000000410013 :103C70000000000000000000000000000000000044 :103C80000000000000000000000000000000000034 :103C90000000000000000000000000000000000024 -:103CA0000000000000000000000000000000000014 -:103CB0000000000000000000000000000000000004 +:103CA000000000000000000000000000000000080C +:103CB000050000000000000000000011110000805D :103CC00000000000000000000000000000000000F4 :103CD00000000000000000000000000000000000E4 :103CE00000000000000000000000000000000000D4 :103CF00000000000000000000000000000000000C4 :103D000000000000000000000000000000000000B3 :103D100000000000000000000000000000000000A3 -:103D20000000000000000000000000000000000093 -:103D30000000000000000000000000000000000083 -:103D40000000000000000000000000000000000073 +:103D20000000000000000000000000000000110082 +:103D30000000000000000000000000000001010081 +:103D40000040000000000000000000000000000033 :103D50000000000000000000000000000000000063 :103D60000000000000000000000000000000000053 :103D70000000000000000000000000000000000043 :103D80000000000000000000000000000000000033 :103D90000000000000000000000000000000000023 :103DA0000000000000000000000000000000000013 -:103DB0000000000000000000000000000000000003 -:103DC00000000000000000000000000000000000F3 +:103DB0000100000000000000000000000000000002 +:103DC00000E007000000000000000000000000000C :103DD00000000000000000000000000000000000E3 :103DE00000000000000000000000000000000000D3 -:103DF00000000000000000000000000000000000C3 +:103DF00000E00000000A00000000000000000000D9 :103E000000000000000000000000000000000000B2 :103E100000000000000000000000000000000000A2 :103E20000000000000000000000000000000000092 -:103E30000000000000000000000000000000000082 -:103E40000000000000000000000000000000000072 +:103E3000000000E0000000000000000000000000A2 +:103E400000000000F0F00000000000000000000092 :103E50000000000000000000000000000000000062 :103E60000000000000000000000000000000000052 :103E70000000000000000000000000000000000042 @@ -181271,7 +177174,7 @@ :103E90000000000000000000000000000000000022 :103EA0000000000000000000000000000000000012 :103EB0000000000000000000000000000000000002 -:103EC00000000000000000000000000000000000F2 +:103EC000000000000000F0F0000000000000000012 :103ED00000000000000000000000000000000000E2 :103EE00000000000000000000000000000000000D2 :103EF00000000000000000000000000000000000C2 @@ -181279,7 +177182,7 @@ :103F100000000000000000000000000000000000A1 :103F20000000000000000000000000000000000091 :103F30000000000000000000000000000000000081 -:103F40000000000000000000000000000000000071 +:103F40000000000000000F0F0000FFFF0000000055 :103F50000000000000000000000000000000000061 :103F60000000000000000000000000000000000051 :103F70000000000000000000000000000000000041 @@ -181287,7 +177190,7 @@ :103F90000000000000000000000000000000000021 :103FA0000000000000000000000000000000000011 :103FB0000000000000000000000000000000000001 -:103FC00000000000000000000000000000000000F1 +:103FC00000000000000000000F0F000000000000D3 :103FD00000000000000000000000000000000000E1 :103FE00000000000000000000000000000000000D1 :103FF00000000000000000000000000000000000C1 @@ -181295,233 +177198,233 @@ :1040100000000000000000000000000000000000A0 :104020000000000000000000000000000000000090 :104030000000000000000000000000000000000080 -:104040000000000000000000000000000000000070 +:10404000000000000000000005002A06054C00A842 :104050000000000000000000000000000000000060 :104060000000000000000000000000000000000050 -:104070000000000000000000000000000000000040 +:10407000000000000000000000610006000D0000CC :104080000000000000000000000000000000000030 :104090000000000000000000000000000000000020 :1040A0000000000000000000000000000000000010 -:1040B0000000000000000000000000000000000000 -:1040C00000000000000000000000000000000000F0 +:1040B0000000000000000000000000000006000CEE +:1040C000000000000000000000000000FF0000FFF2 :1040D00000000000000000000000000000000000E0 :1040E00000000000000000000000000000000000D0 :1040F00000000000000000000000000000000000C0 :1041000000000000000000000000000000000000AF :10411000000000000000000000000000000000009F :10412000000000000000000000000000000000008F -:10413000000000000000000000000000000000007F -:10414000000000000000000000000000000000006F -:10415000000000000000000000000000000000005F +:104130000000000000000000000000000000FF0080 +:1041400000FF000000000000000000000000FF0071 +:1041500000FF000000000000000000000000000060 :10416000000000000000000000000000000000004F :10417000000000000000000000000000000000003F :10418000000000000000000000000000000000002F :10419000000000000000000000000000000000001F :1041A000000000000000000000000000000000000F :1041B00000000000000000000000000000000000FF -:1041C00000000000000000000000000000000000EF -:1041D00000000000000000000000000000000000DF +:1041C000FF0000FF000000000000000000000000F1 +:1041D000FF0000FF000000000000000000000000E1 :1041E00000000000000000000000000000000000CF :1041F00000000000000000000000000000000000BF :1042000000000000000000000000000000000000AE :10421000000000000000000000000000000000009E :10422000000000000000000000000000000000008E :10423000000000000000000000000000000000007E -:10424000000000000000000000000000000000006E -:10425000000000000000000000000000000000005E +:104240000000FF0000FF0000000000000000000070 +:104250000000FF0000FF0000000000000000000060 :10426000000000000000000000000000000000004E :10427000000000000000000000000000000000003E :10428000000000000000000000000000000000002E :10429000000000000000000000000000000000001E :1042A000000000000000000000000000000000000E :1042B00000000000000000000000000000000000FE -:1042C00000000000000000000000000000000000EE +:1042C00000000000FF0000FF0000000000000000F0 :1042D00000000000000000000000000000000000DE :1042E00000000000000000000000000000000000CE :1042F00000000000000000000000000000000000BE -:1043000000000000000000000000000000000000AD -:10431000000000000000000000000000000000009D -:10432000000000000000000000000000000000008D -:10433000000000000000000000000000000000007D -:10434000000000000000000000000000000000006D +:1043000000000000000001000000000100000000AB +:10431000000010000000000002001000000000007B +:10432000000040000000000000000000000000004D +:1043300000002000400000000000200000000000FD +:10434000400020000000000000000000000000000D :10435000000000000000000000000000000000005D -:10436000000000000000000000000000000000004D +:10436000000000000000000000000000100000003D :10437000000000000000000000000000000000003D -:10438000000000000000000000000000000000002D +:10438000000000000000000010000000000000001D :10439000000000000000000000000000000000001D -:1043A000000000000000000000000000000000000D -:1043B00000000000000000000000000000000000FD -:1043C00000000000000000000000000000000000ED +:1043A000000000000000400000000000000040008D +:1043B00000000000000000000000000010000000ED +:1043C00000000000000040000000000000000000AD :1043D00000000000000000000000000000000000DD -:1043E00000000000000000000000000000000000CD -:1043F00000000000000000000000000000000000BD -:1044000000000000000000000000000000000000AC +:1043E00000000000000000000000000000000200CB +:1043F00000000000000002000200080002000000AF +:1044000000000000000001000100000001000000A9 :10441000000000000000000000000000000000009C :10442000000000000000000000000000000000008C -:10443000000000000000000000000000000000007C -:1044400000000080000000000000000000000000EC +:10443000020000000000000000000000200000005A +:10444000000000000000000000000000000000006C :10445000000000000000000000000000000000005C -:10446000000000000000100000000000000000003C -:1044700000000000000040000000000000000000FC -:10448000000000000000000010000000000000001C -:104490000000000000000000880000000000000094 -:1044A000000000000000400020004000000000006C -:1044B00000000000000000002000000000000000DC -:1044C00000000000001000000000000000000000DC +:10446000000000000000000000000000000000004C +:10447000000000000000000000000000000000003C +:1044800000000000000000001000100000001000FC +:10449000000000000000000000000000000000001C +:1044A000000000000000000000000000000000000C +:1044B00000000000000000000000000000000000FC +:1044C00000000000000000000000000000000000EC :1044D00000000000000000000000000000000000DC -:1044E00000000000000000020000000000000000CA -:1044F000000000000000000000000000400040003C -:10450000000000000000004000004000000000002B -:104510000000000200000002000200000000000095 -:104520004000000000004000000240000000400089 -:104530000000000000000000000000020000000079 -:104540000000000000000010010001000200020055 -:104550000000020000000000000000000000000059 -:104560000000000000000200000002000200020043 -:104570000210001000000200000000000200000015 -:104580000000000000010000000000000010020018 -:104590000200820082000000000000000000020013 -:1045A00004000200021002000000000002000200ED -:1045B00002000000000000000000000000000200F7 -:1045C00000000200020000000001040004000000DE -:1045D00000000000000000080200000000000000D1 -:1045E00000000000000000000000000000000000CB -:1045F000000000000000004000000000000000007B -:1046000000000000000000000000000000000000AA -:104610000000030000000000000000000000000097 -:104620000000020000000000000000000000000088 -:104630000400000000000000000000000000000076 -:1046400000000000000000008400400002000000A4 +:1044E00000000000000000000000000000000000CC +:1044F00000000000000000000000000000000000BC +:1045000000000000000000000000000000000000AB +:10451000010000000000000000000000000000009A +:10452000000000000000000000000000000000008B +:10453000000000000000000000000000000000007B +:10454000000000000000000000000000000000006B +:104550000000000000002000000000C0000000007B +:10456000000000000000000000000000000000004B +:1045700000000088000000000000000000000000B3 +:10458000000000000000000000000000000000002B +:104590000000040000000000000000000000000017 +:1045A000000000000000000000000000000000000B +:1045B00000000000000000000000000000000000FB +:1045C00000000000000000000000000000000000EB +:1045D00000000000000000000000000000000000DB +:1045E000000001000080000000000000000000004A +:1045F00000000000000000000000000000000000BB +:1046000000000000000000000000000000000100A9 +:104610000000008001000000000000000000000019 +:10462000000000000040000000000000000000004A +:10463000000000000000000000000000000000007A +:10464000000000000000000000000000000000006A :10465000000000000000000000000000000000005A -:10466000000000000000000000000000000000004A -:1046700000000000000000000000880004000400AA +:104660000000000020000004000000000000000026 +:10467000000000000000000000000000000000003A :10468000000000000000000000000000000000002A -:10469000000000000000000000000000000000001A +:1046900002000000002020000000000000000000D8 :1046A000000000000000000000000000000000000A :1046B00000000000000000000000000000000000FA -:1046C000000010001000000000000000000080004A +:1046C00000000000000000000000000000000000EA :1046D00000000000000000000000000000000000DA -:1046E00000000000000000000000000000000000CA -:1046F00000000000000004000000000000000000B6 -:1047000000000000000000000000000000000000A9 +:1046E0009000010000000000000000000000000039 +:1046F00000000000000000000000000000000000BA +:104700000000000000000000000000000000900019 :104710000000000000000000000000000000000099 :104720000000000000000000000000000000000089 -:104730000000000000000000100000000000000069 -:104740000400000000000000000000000000000065 +:104730000000000000000000000000000000000079 +:104740000000000000000000000000000000000069 :104750000000000000000000000000000000000059 -:104760000000000000000000000000000000000049 -:104770000000000000000000000000000000002019 -:1047800000000000000000000004004000000000E5 -:10479000000000000800000400000000000000000D -:1047A0000000000000000004000000000000000005 +:1047600000C00000108400840000008400000000ED +:104770000000000000000000000000000000000039 +:104780000000000000000000000000000000000029 +:104790000000000000000000000000000000000019 +:1047A0000000000000000000000000000000000009 :1047B00000000000000000000000000000000000F9 :1047C00000000000000000000000000000000000E9 -:1047D00000000000000000000000000000000000D9 -:1047E00000000000000000000000000000000000C9 -:1047F00000000000000000000000000000000000B9 +:1047D0000000000000000000000000000084000055 +:1047E00000000000000000000000000000000002C7 +:1047F00000020000000200000000000000000000B5 :1048000000000000000000000000000000000000A8 :104810000000000000000000000000000000000098 -:104820000000000000000000000000000000000088 +:10482000000000000009000000000000000000007F :104830000000000000000000000000000000000078 :104840000000000000000000000000000000000068 -:1048500000008400001000000000000000000000C4 -:104860000000000000000000000000000000000048 +:104850000000000000000000000000000000000058 +:104860000000000000000000000002000000000046 :104870000000000000000000000000000000000038 -:104880000000000000000000000000000000000028 +:1048800000000000000000000000000000400000E8 :104890000000000000000000000000000000000018 :1048A0000000000000000000000000000000000008 :1048B00000000000000000000000000000000000F8 :1048C00000000000000000000000000000000000E8 -:1048D00000000000000000010000000000000000D7 -:1048E00000000000000000000000000000000000C8 -:1048F0000020000000000000000000000000000098 -:1049000000000000000000000000000000000400A3 -:104910000000000000000000000000000000000097 -:10492000000000000000000000000800000000007F -:104930000000000000000020000000000000000057 +:1048D00000000000000000000000000000000000D8 +:1048E00000000000000000000000010000000000C7 +:1048F00000000000000000000000000000000000B8 +:1049000000000000000000000000000000000000A7 +:104910000000000000000000000001009000000006 +:104920000000000000000000000000000000000087 +:104930000000000000000000000000000000000077 :104940000000000000000000000000000000000067 -:104950000000000000000004000000000000000053 -:104960000000000000000000000000000000000047 +:104950000000000000000000000000000000000057 +:104960000000000000000000000000001100210015 :104970000000000000000000000000000000000037 :104980000000000000000000000000000000000027 -:104990000000000000000000000000000000000017 +:104990000000000000000000000000001100802165 :1049A0000000000000000000000000000000000007 :1049B00000000000000000000000000000000000F7 :1049C00000000000000000000000000000000000E7 :1049D00000000000000000000000000000000000D7 -:1049E00000000000000000000000000000000000C7 -:1049F00000000000000000000000000000000000B7 -:104A000000000000000000000000000000040000A2 -:104A10000000000000000000000000000000000096 -:104A20000000000000000000000000000000000086 +:1049E0000000000000000000000000000000004186 +:1049F000090000030080000000000000000000002B +:104A000000000000000000000000000000000000A6 +:104A10000000000000000000000000000000000492 +:104A20000080114000800000000000000000000035 :104A30000000000000000000000000000000000076 :104A40000000000000000000000000000000000066 -:104A5000000000000000000000200000000000082E +:104A50000000000000000000000000000000000056 :104A60000000000000000000000000000000000046 -:104A70000000000000000000000000000000000036 +:104A700000010100000000880000000000000000AC :104A80000000000000000000000000000000000026 :104A90000000000000000000000000000000000016 -:104AA0000000000000000000000000000000000006 +:104AA00000010002010100C0000000000000000041 :104AB00000000000000000000000000000000000F6 :104AC00000000000000000000000000000000000E6 -:104AD0000000000000000000000000200020000393 -:104AE00000080000000000000000000000000000BE -:104AF00000000000000000000000000000000000B6 +:104AD00000000000000000000000000000000000D6 +:104AE00000000000000000000000000000000000C6 +:104AF000000000008800000001000000000000002D :104B000000000000000000000000000000000000A5 :104B10000000000000000000000000000000000095 -:104B20000000000000000000000000000000000085 +:104B2000000001008488080101000000000000006E :104B30000000000000000000000000000000000075 :104B40000000000000000000000000000000000065 -:104B50000000000000000000000000000000004114 -:104B60000021000000000000000000000000000024 -:104B70000000000000000000000000000000000035 +:104B50000000000000000000000000000000000055 +:104B60000000000000000000000000000000000045 +:104B700000000000000000000000410000000000F4 :104B80000000000000000000000000000000000025 :104B90000000000000000000000000000000000015 -:104BA0000000000000000000000000000000000005 +:104BA00000000000410000808008080000000000B4 :104BB00000000000000000000000000000000000F5 :104BC00000000000000000000000000000000000E5 -:104BD00000000000000000000000000000002000B5 -:104BE0002000002100000000000000000000000084 -:104BF00000000000000000000000000000000000B5 +:104BD00000000000000000000000000000000000D5 +:104BE00000000000000000000000000000000000C5 +:104BF00000000000000000000011040000000000A0 :104C000000000000000000000000000000000000A4 :104C10000000000000000000000000000000000094 -:104C20000000000000000000000000000000000084 +:104C200000000000000000111100008000000000E2 :104C30000000000000000000000000000000000074 :104C40000000000000000000000000000000000064 :104C50000000000000000000000000000000000054 -:104C6000000000A0000000020000000000000000A2 -:104C70000000000000000000000000000000000034 +:104C60000000000000000000000000000000000044 +:104C70000000000000000000000000010100000032 :104C80000000000000000000000000000000000024 :104C90000000000000000000000000000000000014 -:104CA0000000000000000000000000000000000004 +:104CA00000000000000000000001010000400000C2 :104CB00000000000000000000000000000000000F4 :104CC00000000000000000000000000000000000E4 :104CD00000000000000000000000000000000000D4 -:104CE00000000000088003000080000000000000B9 -:104CF00000000000000000000000000000000000B4 -:104D000000000000000000000000000000000000A3 +:104CE00000000000000000000000000000000000C4 +:104CF00000000000000000000000000000E00000D4 +:104D000081410000000000000000000000000000E1 :104D10000000000000000000000000000000000093 -:104D20000000000000000000000000000000000083 -:104D30000000000000000000000000000000000073 +:104D200000000000000000000000000000E007009C +:104D3000820A0000000000000000000000000000E7 :104D40000000000000000000000000000000000063 :104D50000000000000000000000000000000000053 -:104D60000000000080210021000000000000000081 +:104D60000000000000000000000000000000000043 :104D70000000000000000000000000000000000033 :104D80000000000000000000000000000000000023 :104D90000000000000000000000000000000000013 :104DA0000000000000000000000000000000000003 -:104DB00000000000000000000000000000000000F3 +:104DB0000000F0F000000000000000000000000013 :104DC00000000000000000000000000000000000E3 :104DD00000000000000000000000000000000000D3 -:104DE00000000000000002018408000840000000EC +:104DE00000000000000000000000000000000000C3 :104DF00000000000000000000000000000000000B3 :104E000000000000000000000000000000000000A2 :104E10000000000000000000000000000000000092 :104E20000000000000000000000000000000000082 -:104E30000000000000000000000000000000000072 +:104E300000000000F0F00000000000000000000092 :104E40000000000000000000000000000000000062 :104E50000000000000000000000000000000000052 -:104E60000000000000000000000A000043000000F5 +:104E60000000000000000000000000000000000042 :104E70000000000000000000000000000000000032 :104E80000000000000000000000000000000000022 :104E90000000000000000000000000000000000012 @@ -181529,16 +177432,16 @@ :104EB00000000000000000000000000000000000F2 :104EC00000000000000000000000000000000000E2 :104ED00000000000000000000000000000000000D2 -:104EE0000000000000000000000000000024F0F0BE +:104EE00000000000000000000000000000000000C2 :104EF00000000000000000000000000000000000B2 :104F000000000000000000000000000000000000A1 :104F10000000000000000000000000000000000091 :104F20000000000000000000000000000000000081 -:104F30000000000000000000000000000000000071 +:104F3000000000000000FFFF000000000000000073 :104F40000000000000000000000000000000000061 :104F50000000000000000000000000000000000051 :104F60000000000000000000000000000000000041 -:104F7000F0F0000000000000000000000000000051 +:104F70000000000000000000000000000000000031 :104F80000000000000000000000000000000000021 :104F90000000000000000000000000000000000011 :104FA0000000000000000000000000000000000001 @@ -181547,112 +177450,112 @@ :104FD00000000000000000000000000000000000D1 :104FE00000000000000000000000000000000000C1 :104FF00000000000000000000000000000000000B1 -:1050000000000000000000000000000000000000A0 +:1050000000000000000000400006000C000000004E :105010000000000000000000000000000000000090 :105020000000000000000000000000000000000080 -:105030000000000000000000000000000000000070 +:1050300000000000000005000A06054C00A8000062 :105040000000000000000000000000000000000060 :105050000000000000000000000000000000000050 :105060000000000000000000000000000000000040 -:105070000000C3C32D2D2D2D0000000000000000F6 -:105080000000000000000000000000000000000020 +:105070000000000000000000000000000000000030 +:10508000000000000000000000000F0FFFFF000004 :105090000000000000000000000000000000000010 :1050A0000000000000000000000000000000000000 -:1050B00000000000000000000000000000000000F0 +:1050B00000000000000000000000FF0000FF0000F2 :1050C00000000000000000000000000000000000E0 :1050D00000000000000000000000000000000000D0 :1050E00000000000000000000000000000000000C0 -:1050F00000000000C3C33F3F3F3F0000000000002E -:10510000000000000000000000000000000000009F +:1050F00000000000000000000000000000000000B0 +:105100000000000000000000000000000F0F000081 :10511000000000000000000000000000000000008F :10512000000000000000000000000000000000007F -:10513000000000000000000000000000000000006F +:10513000000000000000000000000000FF0000FF71 :10514000000000000000000000000000000000005F :10515000000000000000000000000000000000004F :10516000000000000000000000000000000000003F -:10517000000000008061003E000D00000000000003 +:10517000000000000000000000000000000000002F :10518000000000000000000000000000000000001F -:10519000000000000000000000000000000000000F +:10519000F0F000000000000000000000000000002F :1051A00000000000000000000000000000000000FF -:1051B00000000000000000000000000000000000EF -:1051C00000000000000000000000000000000000DF +:1051B0000000000000000000000000000000FF00F0 +:1051C00000FF0000000000000000000000000000E0 :1051D00000000000000000000000000000000000CF :1051E00000000000000000000000000000000000BF :1051F00000000000000000000000000000000000AF :10520000000000000000000000000000000000009E -:10521000000000000000000000000000000000008E +:105210000000F0F0000000000000000000000000AE :10522000000000000000000000000000000000007E :10523000000000000000000000000000000000006E -:10524000000000000000000000000000000000005E +:10524000FF0000FF00000000000000000000000060 :10525000000000000000000000000000000000004E :10526000000000000000000000000000000000003E :10527000000000000000000000000000000000002E :10528000000000000000000000000000000000001E :10529000000000000000000000000000000000000E :1052A00000000000000000000000000000000000FE -:1052B00000000000000000000000000000000000EE -:1052C00000000000000000000000000000000000DE -:1052D00000000000000000000000000000000000CE -:1052E00000000000000000000000000000000000BE -:1052F0000000000000000000000014040230000064 -:10530000000000000000000000000000000000009D -:10531000000000000000000000000000000000008D +:1052B00000800080000000040000000000004000AA +:1052C00000000000000000000001000000000000DD +:1052D00010000000000000000000000000000000BE +:1052E000200000000000000000000000000000009E +:1052F000200000000000000000004000000000004E +:10530000200040000000000000000000000000003D +:1053100000000000000000000040004000400000CD :10532000000000000000000000000000000000007D -:10533000000000000000000000000000000000006D -:10534000000000000000000000000000000000005D -:10535000000000000000000000000000000000004D -:10536000000000000000000000000000000000003D -:1053700000000000000000000000000016022002F3 -:10538000000000000000000000000000000000001D +:105330000000000400040000000100000000000064 +:10534000000000000000000000000000100000004D +:10535000000000001000000000000000100000002D +:1053600000000000000000000040000010000000ED +:10537000000000001000000000000000100000000D +:1053800000000000100040000000000000000000CD :10539000000000000000000000000000000000000D :1053A00000000000000000000000000000000000FD -:1053B00000000000000000000000000000000000ED -:1053C00000000000000000000000000000000000DD +:1053B00000000000000010000200200000000000BB +:1053C000000000000000004000000000000000009D :1053D00000000000000000000000000000000000CD -:1053E00000000000000000000000000000000000BD -:1053F00000000000000000000000000000000000AD +:1053E00000000000000002000000000000000000BB +:1053F000000000000800000000000000080000009D :10540000000000000000000000000000000000009C :10541000000000000000000000000000000000008C :10542000000000000000000000000000000000007C -:10543000000000000000000000000000000000006C +:10543000000000000000000080000000800000006C :10544000000000000000000000000000000000005C :10545000000000000000000000000000000000004C :10546000000000000000000000000000000000003C -:105470000000000000000000000000000000000428 -:1054800040000000000000000000000000000000DC -:10549000000000000000000000000000000200000A -:1054A00040000000000000000000000000000000BC -:1054B00000000000000000000000000040000000AC -:1054C000000040000002004000004000004000409A -:1054D000000000000000000000000000004010027A -:1054E000400040000000000000000000000000003C -:1054F0000002004000000000000000000040000228 -:105500000000080000000010001000000000000073 -:105510000000020000000000000000000000000089 +:10547000000000000000000000000000000000002C +:10548000000000000000000000000000000000001C +:10549000000000000000000000800000000000008C +:1054A00000000000000000000000000004000000F8 +:1054B00004000000000000000000000020000000C8 +:1054C00000000000000000000000000000000000DC +:1054D00000000000000000000000000000000000CC +:1054E00000000000000000000000000000000000BC +:1054F00000000000000000000000000000000000AC +:10550000000000000000000000000000000000009B +:10551000000000000000000000000040000000004B :10552000000000000000000000000000000000007B -:10553000000000000000000000000000000000105B -:105540000000000002000000000000100000000049 -:105550000200020000000000000000000000000047 -:105560000400000000000000000000000000000037 -:10557000000000000400040004000000000000001F -:105580000000000000080000000000000000000013 -:105590000000000000840000000000000000000087 -:1055A00000000000001000000000000000000000EB -:1055B00000000000000000000000000000000000EB -:1055C00000000000000000080000000000000000D3 -:1055D00000000000040000000000000000000000C7 -:1055E00000000000000000080000000002000000B1 -:1055F00000000000000000000000000000000000AB +:1055300000000000000000000000000000008000EB +:10554000000000000000000000000000000000005B +:10555000000000000000000000000000000000004B +:10556000000000000000000000000000000000003B +:10557000000000000000000000000000000000002B +:10558000000000000000000000000000000000001B +:1055900000000000000000000000004000000100CA +:1055A000008001000000000000000000000000007A +:1055B00000000000000000000000000001000004E6 +:1055C00000000000000000000000000000000000DB +:1055D00000000000000000000000000000000000CB +:1055E00000000000000000000000000000000000BB +:1055F00000040000000000000000000000000000A7 :10560000000000000000000000000000000000009A :10561000000000000000000000000000000000008A -:105620000000000000000008000000000000000072 -:105630000000000004000000000004000000000062 -:10564000000000000000000000000000000000005A +:105620000400002004000000000000000000000052 +:10563000000000000000000000000000000020004A +:105640000001000000000000000000000000000059 :10565000000000000000000000000000000000004A :10566000000000000000000000000000000000003A -:10567000000000000000000000000000000000002A +:105670000000000400000000000000000000000026 :10568000000000000000000000000000000000001A -:10569000000000000000000000000000000000000A +:10569000000000000000000000000000900000007A :1056A00000000000000000000000000000000000FA :1056B00000000000000000000000000000000000EA :1056C00000000000000000000000000000000000DA @@ -181661,19 +177564,19 @@ :1056F00000000000000000000000000000000000AA :105700000000000000000000000000000000000099 :105710000000000000000000000000000000000089 -:105720000000000000000000000000000000000079 -:105730000000000000000000000000110000000058 -:105740000000000000000000000000000000000059 -:105750000000000000000000000000000000000049 +:1057200000C0000000000084000000000000000035 +:105730000000002000000000000000000000000049 +:10574000000000000000000000000000000000C099 +:105750000000008400000000008400000000000041 :105760000000000000000000000000000000000039 :105770000000000000000000000000000000000029 :105780000000000000000000000000000000000019 :105790000000000000000000000000000000000009 :1057A00000000000000000000000000000000000F9 -:1057B00000000000000000000000000000000000E9 +:1057B00000020000000000000000000000000000E7 :1057C00000000000000000000000000000000000D9 -:1057D00000000000000000000000000000000000C9 -:1057E00000000000000000000000000000000000B9 +:1057D00000000000000000000000000000000002C7 +:1057E00000000000000200000000000000000000B7 :1057F00000000000000000000000000000000000A9 :105800000000000000000000000000000000000098 :105810000000000000000000000000000000000088 @@ -181685,56 +177588,56 @@ :105870000000000000000000000000000000000028 :105880000000000000000000000000000000000018 :105890000000000000000000000000000000000008 -:1058A00000000000000000000000000000000000F8 +:1058A00000000000000000000100200000000000D7 :1058B00000000000000000000000000000000000E8 -:1058C00011000000000000000000000000000000C7 +:1058C0000000000000000000000000009000000048 :1058D00000000000000000000000000000000000C8 :1058E00000000000000000000000000000000000B8 :1058F00000000000000000000000000000000000A8 :105900000000000000000000000000000000000097 :105910000000000000000000000000000000000087 -:105920000000000000000000000000000000000077 +:1059200000000000000000000000110080000000E6 :105930000000000000000000000000000000000067 -:105940000000000000000000000000000000000057 +:1059400000000000000000000000000000008000D7 :105950000000000000000000000000000000000047 :105960000000000000000000000000000000000037 :105970000000000000000000000000000000000027 :105980000000000000000000000000000000000017 :105990000000000000000000000000000000000007 -:1059A00000000000000000000000000000000000F7 -:1059B00000000000000000000000000000000000E7 -:1059C00000000000000000000000000000000000D7 -:1059D00000000000000000000000000000000000C7 +:1059A0000000000000000000000000000020008057 +:1059B0000000008000000000000000000000000067 +:1059C0000000000000000000000000000041000096 +:1059D0000041000000000000000000000000000086 :1059E00000000000000000000000000000000000B7 :1059F00000000000000000000000000000000000A7 :105A00000000000000000000000000000000000096 :105A10000000000000000000000000000000000086 -:105A20000000000000000000000000000000000076 -:105A30000000000000000000000000000000000066 -:105A40000000000000000000000000000000000056 -:105A50000000000000000000000000000000000046 +:105A20000000000000000000000000000000000175 +:105A300000020000008200000000000000000000E2 +:105A40000000000000000000000000000000000155 +:105A50000000000100000000000000000000000045 :105A60000000000000000000000000000000000036 :105A70000000000000000000000000000000000026 :105A80000000000000000000000000000000000016 :105A90000000000000000000000000000000000006 :105AA00000000000000000000000000000000000F6 -:105AB00000000000000000000000000000000000E6 +:105AB00001000088880000000000000000000000D5 :105AC00000000000000000000000000000000000D6 -:105AD00000000000000000000000000000000000C6 +:105AD0000000C00000000100000000000000000005 :105AE00000000000000000000000000000000000B6 :105AF00000000000000000000000000000000000A6 :105B00000000000000000000000000000000000095 :105B10000000000000000000000000000000000085 :105B20000000000000000000000000000000000075 -:105B30000000000000000000000000000000000065 +:105B300000000800008000000000000000000000DD :105B40000000000000000000000000000000000055 -:105B50000000000000000000000000000000000045 +:105B50000000000080000000400000000000000085 :105B60000000000000000000000000000000000035 :105B70000000000000000000000000000000000025 :105B80000000000000000000000000000000000015 :105B90000000000000000000000000000000000005 :105BA00000000000000000000000000000000000F5 -:105BB00000000000000000000000000000000000E5 +:105BB0000000000000110000008000000000000054 :105BC00000000000000000000000000000000000D5 :105BD00000000000000000000000000000000000C5 :105BE00000000000000000000000000000000000B5 @@ -181742,7 +177645,7 @@ :105C00000000000000000000000000000000000094 :105C10000000000000000000000000000000000084 :105C20000000000000000000000000000000000074 -:105C30000000000000000000000000000000000064 +:105C30000000000000000001000000400000000023 :105C40000000000000000000000000000000000054 :105C50000000000000000000000000000000000044 :105C60000000000000000000000000000000000034 @@ -181750,15 +177653,15 @@ :105C80000000000000000000000000000000000014 :105C90000000000000000000000000000000000004 :105CA00000000000000000000000000000000000F4 -:105CB00000000000000000000000000000000000E4 +:105CB0000000000000000000000000E007000000FD :105CC00000000000000000000000000000000000D4 -:105CD00000000000000000000000000000000000C4 +:105CD0000000000000000000000002E00000484258 :105CE00000000000000000000000000000000000B4 :105CF00000000000000000000000000000000000A4 :105D00000000000000000000000000000000000093 :105D10000000000000000000000000000000000083 :105D20000000000000000000000000000000000073 -:105D30000000000000000000000000000000000063 +:105D30000000000000000000000000000000F0F083 :105D40000000000000000000000000000000000053 :105D50000000000000000000000000000000000043 :105D60000000000000000000000000000000000033 @@ -181767,7 +177670,7 @@ :105D90000000000000000000000000000000000003 :105DA00000000000000000000000000000000000F3 :105DB00000000000000000000000000000000000E3 -:105DC00000000000000000000000000000000000D3 +:105DC000F0F00000000000000000000000000000F3 :105DD00000000000000000000000000000000000C3 :105DE00000000000000000000000000000000000B3 :105DF00000000000000000000000000000000000A3 @@ -181775,7 +177678,7 @@ :105E10000000000000000000000000000000000082 :105E20000000000000000000000000000000000072 :105E30000000000000000000000000000000000062 -:105E40000000000000000000000000000000000052 +:105E400000000000FFFF0000000000000000000054 :105E50000000000000000000000000000000000042 :105E60000000000000000000000000000000000032 :105E70000000000000000000000000000000000022 @@ -181791,9 +177694,9 @@ :105F10000000000000000000000000000000000081 :105F20000000000000000000000000000000000071 :105F30000000000000000000000000000000000061 -:105F40000000000000000000000000000000000051 +:105F4000000005610A06054D00A8000000000000E1 :105F50000000000000000000000000000000000041 -:105F60000000000000000000000000000000000031 +:105F6000000000650006000E200000000000000098 :105F70000000000000000000000000000000000021 :105F80000000000000000000000000000000000011 :105F90000000000000000000000000000000000001 @@ -181801,7 +177704,7 @@ :105FB00000000000000000000000000000000000E1 :105FC00000000000000000000000000000000000D1 :105FD00000000000000000000000000000000000C1 -:105FE00000000000000000000000000000000000B1 +:105FE0000000000000000000AAAA0000000000005D :105FF00000000000000000000000000000000000A1 :106000000000000000000000000000000000000090 :106010000000000000000000000000000000000080 @@ -181809,7 +177712,7 @@ :106030000000000000000000000000000000000060 :106040000000000000000000000000000000000050 :106050000000000000000000000000000000000040 -:106060000000000000000000000000000000000030 +:1060600000000000000000000000AAAA00000000DC :106070000000000000000000000000000000000020 :106080000000000000000000000000000000000010 :106090000000000000000000000000000000000000 @@ -181832,27 +177735,27 @@ :1061A00000000000000000000000000000000000EF :1061B00000000000000000000000000000000000DF :1061C00000000000000000000000000000000000CF -:1061D00000000000000000000000000000000000BF +:1061D000000040000000000020000000000000005F :1061E00000000000000000000000000000000000AF -:1061F000000000000000000000000000000000009F +:1061F000000020000000000020000000000000005F :10620000000000000000000000000000000000008E -:10621000000000000000000000000000000000007E -:10622000000000000000000000000000000000006E -:10623000000000000000000000000000000000005E -:10624000000000000000000000000000000000004E -:10625000000000000000000000000000000000003E +:10621000000082002000000000002000000040007C +:1062200000000000C000000000000000000040006E +:1062300000004000200010000000200000002000AE +:10624000000000002000000000000000000000002E +:10625000000000C00000000000000000000000007E :10626000000000000000000000000000000000002E -:10627000000000000000000000000000000000001E -:10628000000000000000000000000000000000000E -:1062900000000000000000000000000000000000FE -:1062A00000000000000000000000000000000000EE -:1062B00000000000000000000000000000000000DE -:1062C00000000000000000000000000000000000CE -:1062D00000000000000000000000000000000000BE +:1062700000000040000000000000000000000000DE +:1062800000000000000000000000000000004000CE +:1062900010000000000000001000000000000000DE +:1062A000100000000000000000000000400000009E +:1062B000100000400000000040000000000000024C +:1062C000400000000002000000000000000000008C +:1062D00002000000000000000000000000000000BC :1062E00000000000000000000000000000000000AE -:1062F000000000000000000000000000000000009E +:1062F000000000000200000000000000000000009C :10630000000000000000000000000000000000008D -:10631000000000000000000000000000000000007D +:106310000000000004000000000000000000200059 :10632000000000000000000000000000000000006D :10633000000000000000000000000000000000005D :10634000000000000000000000000000000000004D @@ -181864,37 +177767,37 @@ :1063A00000000000000000000000000000000000ED :1063B00000000000000000000000000000000000DD :1063C00000000000000000000000000000000000CD -:1063D00000020000000000000000000000000000BB -:1063E000000010000000100010020000000000007B -:1063F000100010000000000000000000000000403D -:106400000000000200000002000040400002000006 -:1064100040004000400040004000400000000000FC -:1064200000000000000040004000000000000040AC -:10643000000000000040000000000000000000001C -:10644000020000000000000000000000000000004A -:10645000020004000200020002000010021000000E -:106460000000000000000000020000000000020028 -:106470000000020002100200020002008200000080 -:106480000000000000000200820000000000001078 -:1064900000000200000000000000000000000200F8 -:1064A00000000000000000000000040000000000E8 -:1064B00000000000000000000400000000000010C8 +:1063D00000000000000000000000000000000000BD +:1063E00000000000000000000000000000000000AD +:1063F000000000000000000000000000000000009D +:10640000000000000000000000000000000000008C +:10641000000000000000000000000000000000007C +:10642000000000000000000000000000000000006C +:10643000000000000000000000000000000000005C +:10644000000000000000000000000000000000004C +:10645000000000000000000000000000000000003C +:10646000000000000000000000000000000000002C +:10647000000000000000000000000000000000001C +:10648000000000000000000000000000000000000C +:1064900000000000000000000000000000000000FC +:1064A00000000000000000000000000000000000EC +:1064B00000000000000000000000000000000000DC :1064C00000000000000000000000000000000000CC -:1064D00000000000000004000000000000000000B8 -:1064E00000000400000000000000000000000000A8 +:1064D00000000000000000000000000000000000BC +:1064E00000000000000000000000000000000000AC :1064F000000000000000000000000000000000009C -:10650000000000000000000000000000000000008B -:106510000000000000000000000000000400000077 -:10652000000000000000000000000000000000006B +:106500000000000000000000000000000200000089 +:10651000000000000000000000000000000020005B +:10652000002000000000000000000000000000004B :10653000000000000000000000000000000000005B -:1065400000000000C000A000C0000000000000002B +:10654000000000000000000000000000000000004B :10655000000000000000000000000000000000003B :10656000000000000000000000000000000000002B -:10657000000000000000000000000000000000001B -:10658000000000000000000000000000000000000B -:1065900000000000000000000000000000000000FB -:1065A00000000000000000000000000000000000EB -:1065B00000000000000000000000000000000000DB +:10657000000000001000000000000000000000000B +:106580000000000000000000000000000000020009 +:1065900000000000000000001000000000000000EB +:1065A00000000000000000C000000000000000002B +:1065B00000000000000010000000000000000000CB :1065C00000000000000000000000000000000000CB :1065D00000000000000000000000000000000000BB :1065E00000000000000000000000000000000000AB @@ -181904,33 +177807,33 @@ :10662000000000000000000000000000000000006A :10663000000000000000000000000000000000005A :10664000000000000000000000000000000000004A -:10665000000000000000000000000000000000003A -:10666000000000000000000000000000000000002A -:106670000000000000000000000400000000000016 -:106680000000000400000000000000000000000006 +:106650000000000000000000000000C0000000007A +:106660000084000000840000000000000000000022 +:10667000000000000000000000000000000000001A +:10668000000000000000000000000000000000000A :1066900000000000000000000000000000000000FA -:1066A00000040000000000000000000000000000E6 +:1066A00000000000000000000000000000000000EA :1066B00000000000000000000000000000000000DA -:1066C0000000000000000000000000002100410068 +:1066C00000000000000000000000000000000000CA :1066D00000000000000000000000000000000000BA -:1066E00000000000000000000000000000000000AA +:1066E00000000000000000000000000200000002A6 :1066F000000000000000000000000000000000009A :106700000000000000000000000000000000000089 -:106710000000000000000000000000000000000079 -:106720000000000000000000000000000000000069 +:106710000000000002000000000000000000000077 +:106720000000000000002000000000000000000049 :106730000000000000000000000000000000000059 -:106740000000000000000000000000000000000049 +:106740000000000000000800000000000000000041 :106750000000000000000000000000000000000039 -:106760000000000000000000000000000000000029 +:106760000000000000000000050000000000020022 :106770000000000000000000000000000000000019 -:106780000000000000000000000000000000000009 -:1067900000000000000000000000000000000000F9 -:1067A00000000000000000000000000000000000E9 -:1067B00000000000000000000000000000000000D9 -:1067C00000000000000000000000000000000000C9 -:1067D00000000000000000000000000000000000B9 +:1067800000000000000000000000400000000000C9 +:1067900000000000000002000500000000000000F2 +:1067A00021000000040000000300000000000000C1 +:1067B00021000000000000000300000000000000B5 +:1067C00000000000000000000800000000000000C1 +:1067D0002100000000000000000000000000000098 :1067E00000000000000000000000000000000000A9 -:1067F0000000000000040000000000000000000095 +:1067F0000000000000000000000000000000000099 :106800000000000000000000000000000000000088 :106810000000000000000000000000000000000078 :106820000000000000000000000000000000000068 @@ -182083,6 +177986,4103 @@ :10715000000000000000000000000000000000002F :10716000000000000000000000000000000000001F :10717000000000000000000000000000000000000F +:10718000000001000100010020004000000000009C +:107190000000000000000000880000000000000067 +:1071A000000000000000400000000000840000001B +:1071B00000000000000000002000000000000000AF +:1071C00000000001000000002080000040000000DE +:1071D000840000000000000000002000000000000B +:1071E00000000000000000002000400000008400BB +:1071F000000000000000000000000000000000008F +:107200000000000004000400040000000000000072 +:1072100000000000000000000000000000000090DE +:10722000000000000000000000001000000000004E +:10723000000000000000000000000000000000004E +:10724000000000000000000000000020000000001E +:10725000000000401000000000000040000000009E +:1072600000000000000040000000000000001000CE +:1072700040000040000040000000400000004000CE +:10728000000000000000020002000040004000007A +:1072900000000000000000000000000000000000EE +:1072A00000000000000000000000000000000000DE +:1072B00000000000000010000000000000000200BC +:1072C00002000000020000000000000000000000BA +:1072D00000000000010000000000000000000000AD +:1072E000000000000000000001000000000040005D +:1072F0000200000000000000010000000000040087 +:107300000200020000000040800080000001000137 +:10731000000000000000000000000000000000006D +:107320000008000000000000000000000000000055 +:1073300000000000000000008000000000080000C5 +:107340000008000800000008000000000000000025 +:1073500040000000000004000000000000000008E1 +:107360000000000800080000000804000000000001 +:107370000000000000000000000004000000000801 +:107380008000000800080000000800000000000065 +:1073900001000000000000000000000000000000EC +:1073A00000000000000800000000000000000000D5 +:1073B00000000000000000000000000000000000CD +:1073C00001000000000000000000000000000000BC +:1073D0000000000000000041000000000000000567 +:1073E000000000000000000000000000000000009D +:1073F000000000000000000000000000000000008D +:10740000000000000000000000000000000000007C +:107410000000040000000000000000000000000068 +:10742000000000000000000000000000000000005C +:10743000000000000000000000000000000000004C +:107440000000040000000000000000000000000038 +:10745000000000000000000000000000000000002C +:107460000000000004000000000000000000000018 +:10747000000000000000000000000000000000000C +:1074800000000000000000000000000000000000FC +:107490000000000084000000000000000000000068 +:1074A00000000000000000000000000000000000DC +:1074B000000000000000000000000000000000408C +:1074C000000001800080002000200020002000003B +:1074D00000200020000200200020002000000020EA +:1074E000002000200020002000000020002000409C +:1074F00000000020002000000020002000200020CC +:1075000000000020002008008400000000000000AF +:107510000000000008000800100008000000000043 +:10752000000000000000000000000000000000005B +:1075300000000040100008000800400000000000AB +:1075400000010000202000400001000100010001B6 +:1075500000000001000108001001100108014000B6 +:107560001101000100010001000100000001000103 +:10757000000000000001080110000801400108019E +:1075800000010000000100010000000000000000F8 +:1075900000000000000000200000000000030000C8 +:1075A00000030003000000080000000000000000CD +:1075B0000008000000000000000020000000900013 +:1075C00000000000000000001004000000000000A7 +:1075D00000000000000000000000000000000000AB +:1075E000000000000000000000000000000000009B +:1075F000000000000000000000000000000000008B +:10760000000000000000000000000000000000007A +:107610000000000000000000000100000000000069 +:10762000000000000000000000000000000000005A +:10763000000000000000000000000000000000004A +:1076400000000000000000000000800100000000B9 +:10765000000000000000000000000000000000002A +:10766000000000000000000000000000000000001A +:10767000000000000000000000000000000000000A +:1076800000000000000000000000000000000000FA +:1076900000000000000000000000000000000000EA +:1076A00000210009000000000000000000000000B0 +:1076B00000000000000000000000000000000000CA +:1076C0002000000000000000010000000000000099 +:1076D00000000009000000000000000000000000A1 +:1076E000000000000000000000000000000000009A +:1076F00000802004000001000000A0000000010044 +:107700000000A000000000000000000000000000D9 +:107710000000000000000000000000000000000069 +:1077200000000000000000000000008800000000D1 +:107730000000004000000200000000000000000007 +:107740000082001000000000000020000000000087 +:107750000000000000000000000000000000000029 +:107760000000000000000000000000000000000019 +:1077700000000020000000000400000000000000E5 +:1077800004000000000000000000000000000000F5 +:107790000000000000000000000000009020000039 +:1077A0008200000000000000000000000000000057 +:1077B00000000000000000000000000000000000C9 +:1077C0000000000000000000000001009000000028 +:1077D00000A000C0009000000000000300C0009066 +:1077E0000000000000C000900000000000C00090F9 +:1077F0000000000000C000900000000000C00090E9 +:107800000000000000C000900000000000C00090D8 +:107810000000000000000000000000001100808057 +:1078200000008000000000000000000000000000D8 +:107830000000000000000000000000000000000048 +:107840000000000000000000000000001100A10086 +:1078500000000000008000800000000000000080A8 +:107860000080000000000080008000000000008018 +:107870000080000000000080008000000000008008 +:1078800000800000000000800080000000000080F8 +:107890000080000000000000000000000000000068 +:1078A0000080000000000000000000000000000058 +:1078B00000000000000000000000000000000000C8 +:1078C00000000000000000000000000000000008B0 +:1078D000098000100080000000008000808000000F +:1078E0000000000080008080000000008000808098 +:1078F0000000000080008080000000008000808088 +:107900000000000080008080000000008000808077 +:1079100000000000800080800000000000000000E7 +:1079200000000008000000840000000000000000CB +:107930000000000000000000000000000000000047 +:107940000000000000000000000000000000000037 +:107950000001010200010002000000008400C0904C +:107960000000000000008400C090000000008400BF +:10797000C090000000008400C0900000000084005F +:10798000C090000000008400C0900000000084004F +:10799000C090000000008400C090000000000000C3 +:1079A00000000000000010000000000000000000C7 +:1079B00000000000000000000000000000000000C7 +:1079C00000000000000000000000000000000000B7 +:1079D00000000100888808000000000002000090FC +:1079E00000C0000000000000009000C00000000087 +:1079F000009000C000000000009000C000000000E7 +:107A0000009000C000000000009000C000000000D6 +:107A1000009000C000000000009000C000000000C6 +:107A200000000000110000008000000000000000C5 +:107A30000000000000000000000000000000000046 +:107A40000000000000000000000000000000000036 +:107A50000000000041000080800041000000800024 +:107A60000080008000000000000000800080000016 +:107A70000000008000800000000000800080000006 +:107A800000000080008000000000008000800000F6 +:107A900000000080008000000000008000800000E6 +:107AA00000000000000000110000808000000000C5 +:107AB00000000000000000000000000000000000C6 +:107AC00000000000000000000000000000000000B6 +:107AD0000000000000000011050000800000800090 +:107AE0000002000000000000801180020000000081 +:107AF0008011800400000000801180090000000057 +:107B0000801180040000000080118005000000004A +:107B10008011800500000000801180050000000039 +:107B2000000000000000000000010000084000000C +:107B30000000000000000000000000000000000045 +:107B40000000000000000000000000000000000035 +:107B500000000000000000000001000000400000E4 +:107B600090000000000000000000C00120000000A4 +:107B70000000C001200000000000C0012000000043 +:107B80000000C001200100000000C0012000000032 +:107B90000000C001200000000000C0012000000023 +:107BA00000000000000000000000000000000700CE +:107BB00000000000000000000000000000000000C5 +:107BC00000000000000000000000000000000000B5 +:107BD00000000000000000000000000000E00700BE +:107BE0008200000A0000060000000000000A0000F9 +:107BF00006000000000A000006000000000A000065 +:107C000006000000000A00000600000000820000DC +:107C100006000000000A000006000000000A000044 +:107C2000060000000000000000000000F0F000006E +:107C3000FFFF000000000000000000000000000046 +:107C40000000000000000000000000000000000034 +:107C50000000000000000000000000000000000024 +:107C6000F0F000000000FFFF000000FF0000000037 +:107C700000FF000000FF000000FF000000FF000008 +:107C800000FF000000FF000000FF000000FF0000F8 +:107C900000FF000000FF000000FF000000FF0000E8 +:107CA00000FF000000FF0000000000000000F0F0F6 +:107CB00000000000000000000000000000000000C4 +:107CC00000000000000000000000000000000000B4 +:107CD00000000000000000000000000000000000A4 +:107CE0000000F0F000000000FFFF000000FF0000B7 +:107CF000000000FF000000FF000000FF000000FF88 +:107D0000000000FF000000FF000000FF000000FF77 +:107D1000000000FF000000FF000000FF000000FF67 +:107D2000000000FF000000FF000000000000000055 +:107D30000000FF000000FFFF000000000000000046 +:107D40000000000000000000000000000000000033 +:107D50000000000000000000000000000000000023 +:107D600000003C3C0000FFFFFF000000FF0000009F +:107D70000000FF000000FF000000FF000000FF0007 +:107D80000000FF000000FF000000FF000000FF00F7 +:107D90000000FF000000FF000000FF000000FF00E7 +:107DA0000000FF00000000FFFFFF000000000000D7 +:107DB00000000000FF0000000000000000000000C4 +:107DC00000000000000000000000000000000000B3 +:107DD00000000000000000000000000000000000A3 +:107DE000000000003C3C00000000FF000000FF001D +:107DF00000000000FF000000FF000000FF00000086 +:107E0000FF000000FF000000FF000000FF00000076 +:107E1000FF000000FF000000FF000000FF00000066 +:107E2000FF000000FF00000000FFFFFF0000000057 +:107E30000000000015182A00054005A800000000F9 +:107E40000000000000000000000000000000000032 +:107E50000000000000000000000000000000000022 +:107E60000000000005402A06054C00A80302033864 +:107E70000C0092C00000038203380C0092C0038201 +:107E800003380C0092C0038203380C0092C00382B6 +:107E900003380C0092C0038203380C0092C00382A6 +:107EA00003380C0092C0038203380C0082C000002B +:107EB00000000000000000000000000000000000C2 +:107EC00000000000000000000000000000000000B2 +:107ED00000000000000000000000000000000000A2 +:107EE0000000000000000000FF00FFFF0000000095 +:107EF0000000000000000000000000000000000082 +:107F00000000000000000000000000000000000071 +:107F10000000000000000000000000000000000061 +:107F20000000000000000000000000000000000051 +:107F30000000000000000000000000000000000041 +:107F40000000000000000000000000000000000031 +:107F50000000000000000000000000000000000021 +:107F600000000000000000000000FF000000000012 +:107F70000000000000000000000000000000000001 +:107F800000000000000000000000000000000000F1 +:107F900000000000000000000000000000000000E1 +:107FA00000000000000000000000000000000000D1 +:107FB00000000000000000000000000000000000C1 +:107FC00000000000000000000000000000000000B1 +:107FD00000000000000000000000000000000000A1 +:107FE0000000000000000000000000000000F0F0B1 +:107FF0000000000000000000000000000000000081 +:108000000000000000000000000000000000000070 +:108010000000000000000000000000000000000060 +:108020000000000000000000000000000000000050 +:108030000000000000000000000000000000000040 +:108040000000000000000000000000000000000030 +:108050000000000000000000000000000000000020 +:108060000000000000000000000000000000000010 +:10807000F0F0000000000000000000000000000020 +:1080800000000000000000000000000000000000F0 +:1080900000000000000000000000000000000000E0 +:1080A00000000000000000000000000000000000D0 +:1080B00000000000000000000000000000002000A0 +:1080C00020002000000000000000880000000000E8 +:1080D0004000000000008800000000002180200017 +:1080E0002000200000008800000088000000000040 +:1080F000200000000000200000000000200000031D +:1081000020002000200000000000000020000000EF +:10811000000000000000000000000000000040001F +:1081200020002000200000000000000020000000CF +:10813000000000000000000000000000000020001F +:10814000000000000000000000000000000000002F +:1081500000000900000000000000000000002008EE +:10816000000000000000000000000000000000000F +:1081700000000000410010000000000000000000AE +:10818000000000000000000200004000000000406D +:10819000000000002000400000004000000010002F +:1081A000000040000000000000004000000000400F +:1081B000000040000000000000004000000000003F +:1081C000A00000000000000000000000000000000F +:1081D000000000000000000000000000000000009F +:1081E000000000400000000000000200020000004B +:1081F000020000000000000000000000000000007D +:10820000200000000000000000000000000000004E +:1082100000000000880000000000000020000000B6 +:108220000000200800000000000000000000000026 +:1082300040000000000000000000000000000000FE +:108240000000000000000000050000000000000029 +:1082500020000000000800000000000000000000F6 +:10826000000000000000000000000000000000000E +:1082700040000000000800000000000000000000B6 +:108280000000800000000000090000000000000065 +:108290000000400000000008000000000000000096 +:1082A00000000000A0090000000000000000000025 +:1082B000000040000000050805000000000000105C +:1082C000000000000010000000000000000000009E +:1082D000000000000000000000000000000000009E +:1082E000000000000000000000000000000000008E +:1082F000000000000000000000000000000000007E +:10830000000000000000000000000000000000006D +:10831000000000000000000000000003000000005A +:10832000000000000000000000000000000000004D +:10833000000000000000000000000000000000003D +:10834000000000000000010000000000000000002C +:10835000000000000000000000000000000000001D +:10836000000000000000000000000000000000000D +:1083700000000000000000C000000000000000003D +:1083800000000000000000000000000000000000ED +:1083900000000000000000000000000000000000DD +:1083A00000000000000000000000000000000000CD +:1083B000000000000000000000002100000000009C +:1083C0000000000000000000100082008200820017 +:1083D0008200820082008200820082004000000051 +:1083E00082008200820090008200820082001000E1 +:1083F0008200000082000840820082008200820029 +:108400008200000082008200820800008200820058 +:108410000000820000008200820000008200400014 +:108420000000820008008211820000008240820069 +:1084300000098200000082008200000082008200A9 +:108440000000820000008200820010000000000096 +:1084500000000000000000004000000005000800CF +:108460000300000000000000000000000000000009 +:1084700000000000000000000090400040000000EC +:1084800000000000000000000000000100000000EB +:1084900000000000000000000000000000000500D7 +:1084A00000000000000000000000000000000000CC +:1084B00000000000000000000000000000000000BC +:1084C0000000400000000000000000000000080064 +:1084D000000008000000000000000800000000008C +:1084E0000800000400000000004100000000080037 +:1084F0000000080000000000000010000000000064 +:108500000000000400000000000500000000000062 +:1085100008000000080000000000000010009000AB +:10852000000000000004000000080000000000003F +:108530000800000008000000000088001000900003 +:10854000000000050004000000000005000000001D +:10855000000000000000000000000000000000001B +:10856000000000000000000000000000000000000B +:1085700000000000000000000084000000C00000B7 +:108580000000210000840000000000000000000046 +:1085900000000000000000000000000000000000DB +:1085A00000000000000000000000000000000000CB +:1085B0000000000000000084000000000000000037 +:1085C00000000000000000000000000000000000AB +:1085D0000000000008004000A00082000000000031 +:1085E000000000000000000000000000000000117A +:1085F0000800000008001000A000820088000000B1 +:10860000000000090000000000000000000000025F +:1086100008080000000008218200A00008000000F7 +:10862000000020000000000000000000000000002A +:1086300000000800000008000000A0008200000008 +:1086400000400000000000000000000000000021C9 +:1086500000000041000000000000000000000000D9 +:108660000000000000000000008400000000000086 +:1086700011000000000000000000000000000000E9 +:1086800000000000000000000000000000000000EA +:1086900000000000000000000000000000000000DA +:1086A00000000000000000000000000000000000CA +:1086B00000001100000000000000000000000000A9 +:1086C00000000000000000000000000000000000AA +:1086D00000000000000000010001000100C00001D6 +:1086E000040100C0018300000101004000100001EE +:1086F000400100C0000000010001000100C00001B5 +:10870000040100C0018300000101004000080001D5 +:10871000400100C00000000000010001000100C095 +:108720000001040100C001830000010100400004B9 +:108730000001400100C0000000010001000100C074 +:108740000001040100C00183000001010040000895 +:108750000001400100C0000000410041004100C094 +:108760000041804100A010C14011104100800080F4 +:108770000041804100C0000000410041004100C0B4 +:108780000041804100A010C14011104100800080D4 +:108790000041804100C00000000000410041004154 +:1087A00000C00041804100A010C140111041008074 +:1087B00000800041804100C00000004100410041B4 +:1087C00000C000418041008810C14011104100806C +:1087D00000800041804100C0000041000300000013 +:1087E00000804100830000000500020040000000FE +:1087F000C0004100C10000408000410003000000B3 +:10880000008041008300000005000200020000001B +:1088100091004100C10000408000000341000300BE +:1088200000000080410083000000050002000200FB +:10883000000082004100C1000040800041000300B0 +:10884000000000804100830000000500020040009D +:10885000000091004100C1000040800001000100C3 +:10886000000000C00100C0000000000021000882DC +:108870000040C1009100C1000040820001000100E1 +:10888000000000C00100C0000000000021000940FD +:108890000020C0009100C1000040820000000100E3 +:1088A0000100000000C00100C00000000000210025 +:1088B00009400082C1009100C10000408200010017 +:1088C0000100000000C00100C00000000000210005 +:1088D00082080082C0009100C1000040820000C0F8 +:1088E0000001C0C100000000000102C0822000039E +:1088F000000100C10000000000010000000000C0F5 +:108900000001C0C100000000000102C0822000037D +:10891000000100C100000000000100000000000094 +:1089200000C00001C0C100000000000102C08220A0 +:108930000003000100C10000000000010000000071 +:1089400000C00001C0C100000000000102C0822080 +:108950000003000100C10000000000010000000051 +:108960000080004180C100000000004180C1004043 +:1089700000C1004100C103000000004100400000B0 +:108980000080004180C100000000004180C1004023 +:1089900000C1004100C10000000000410040000093 +:1089A00000000080004180C100000000004180C143 +:1089B000004000C1004100C1000000000041004033 +:1089C00000000080004180C100000000004180C123 +:1089D000000300C1004100C1000000000041004050 +:1089E0000000C100800080C1000041408000820082 +:1089F0004100C1C1800080100000410000008000E3 +:108A00004100C100800080C1000041408000820020 +:108A10004100C1C100008010000041000000800042 +:108A200041000000C100800080C100004140800082 +:108A300082004100C1C180008010000041000000A0 +:108A400080004100C100800080C1000041408000E2 +:108A500082004100C1C18000801000004100000080 +:108A600080004100C1004000C0C100000100400082 +:108A700005000100C1058200C001000001000000E6 +:108A8000C0000100C1004000C0C100000100400062 +:108A900005000100C1059000C001000001000000B8 +:108AA000C00001000000C1004000C0C10000010082 +:108AB000400005000100C1050200C00100000100E6 +:108AC0000000C0000100C1004000C0C10000010062 +:108AD000400011000100C1050200C00100000100BA +:108AE0000000C00001000000000000000042000083 +:108AF000000000000000811200480700480000004C +:108B00000000000000000000000000000042000023 +:108B1000000000000000811200480700480000002B +:108B20000000000000000000000000000000004203 +:108B3000000000000000000081120048070048000B +:108B400000000000000000000000000000000042E3 +:108B500000000000000000008112004807004800EB +:108B60000000000000000000000000000000000005 +:108B700000000000000000000000000000000000F5 +:108B800000000000000000000000000000000000E5 +:108B900000000000000000000000000000000000D5 +:108BA00000000000000000000000000000000000C5 +:108BB00000000000000000000000000000000000B5 +:108BC00000000000000000000000000000000000A5 +:108BD0000000000000000000000000000000000095 +:108BE0000000000000000000000000000000000085 +:108BF0000000000000000000000000000000000075 +:108C00000000000000000000000000000000000064 +:108C10000000000000000000000000000000000054 +:108C20000000000000000000000000000000000044 +:108C30000000000000000000000000000000000034 +:108C40000000000000000000000000000000000024 +:108C50000000000000000000000000000000000014 +:108C6000000000000000000000000000757B000014 +:108C700000000000000000000000000000000000F4 +:108C800000000000000000000000DEAE757B000068 +:108C900000000000000000000000000000000000D4 +:108CA00000000000000000000000DEAE0000757B48 +:108CB00000000000000000000000000000000000B4 +:108CC000000000000000000000000000DEAE757B28 +:108CD0000000000000000000000000000000000094 +:108CE000000000000000000000000000DEAE60C6D2 +:108CF00003000000000000000031E0000000000060 +:108D000000000C0000000000000000C0630660C608 +:108D100003000000000000000031E000000000003F +:108D200000000C0000000000000000C0630600000E +:108D300060C603000000000000000031E0000000F9 +:108D4000000000000C0000000000000000C06306EE +:108D500060C603000000000000000031E0000000D9 +:108D6000000000000C0000000000000000C06306CE +:108D700000000000880088000000000020000000C3 +:108D80002000000020000000008000800000208003 +:108D900000000000200020008800000020000000EB +:108DA00020000000200000000000000000002180E2 +:108DB00000010000000000002180000000002000F1 +:108DC00000802100000020000000000000000000E2 +:108DD00021800100000000002080890000002000A8 +:108DE0000080200000002000008000000000000043 +:108DF0002000000000000000000000000000000053 +:108E00000000000000000500000000040004000055 +:108E1000000400000000000000000000000000004E +:108E20000000000000000000050005000000000038 +:108E300040100000000000000002080200000000D6 +:108E4000000000104000000000000400000040008E +:108E50000000401008000000400000024000000038 +:108E6000000000020000000040000002400000007E +:108E700040000000000000000000000000000000B2 +:108E800000000000000000000000000010001000C2 +:108E900000000000000000000000000000000000D2 +:108EA00000000000000000000000000000000000C2 +:108EB00000000000000000000000000000000000B2 +:108EC0000000000000000000000000110000000091 +:108ED0000000000000000000000000000040000052 +:108EE000000000000840000000000000000000003A +:108EF0000000000000000000000000000000000072 +:108F000000000000000000000000000000008000E1 +:108F100080000000000000000000000000000000D1 +:108F20000000000000000000000000000000000041 +:108F30000000000000000000000000000000000031 +:108F40000000000000000000000000000000000021 +:108F500000000000000000C0000000000000000051 +:108F600000000000000000020000000000000000FF +:108F700000000000000000000000000000000000F1 +:108F800000000000000000000000000000000000E1 +:108F900000000000200000000000000000000000B1 +:108FA00000000000000000000000000000000000C1 +:108FB00000000000000000000000000000000000B1 +:108FC000000000210000000400000000000000007C +:108FD000000000030000000000000000000000008E +:108FE0000005000000000004000000000004000074 +:108FF000000000000000000000210000000003004D +:109000000300080000000000000000000000000055 +:1090100000000000000080000000000000000800C8 +:109020000800030000000300000000000000000032 +:109030000000000000000000000000000000000030 +:109040000800080008000000000000000000000008 +:109050000000000000000000000000000000000010 +:1090600000000800030000000000000000000000F5 +:1090700000000000000000000000410000000000AF +:1090800000000000000000000000000000000000E0 +:109090000000000040800004400000000000A0002C +:1090A000000000000000000000400040000400003C +:1090B00000000000000000000000000000000000B0 +:1090C00000000000000000000000000000000000A0 +:1090D0000000000000004040000000000000000010 +:1090E0000004000000030000000000000000000079 +:1090F0000000000000000000000040000000000030 +:10910000000000000000000000000000000000005F +:10911000000000000000000400010000000000004A +:10912000000000000000000000000000000000003F +:10913000000000000000000000000000000000002F +:10914000000000000000000000A00000000000007F +:10915000200000000000000000820000200000004D +:10916000000000000000000000000000000000A05F +:10917000000000002000000000000000000000A02F +:1091800000000000000000000000000000000000DF +:1091900000000000000000000000000000000000CF +:1091A000000000000041000000000000000000007E +:1091B00000000000000000000000000000000000AF +:1091C000000000000000000000000002000000009D +:1091D000000000000000000000000000000000008F +:1091E0000000000000000000000300000000000379 +:1091F0000000040000080000000000000000000063 +:10920000000000000000000008000000000008004E +:10921000000008000000080000000000000000003E +:10922000080000000000000000000000000008002E +:10923000000008000300080000000000000000001B +:109240000800000000000000000000000000000016 +:1092500008000008080000000800000000000000EE +:1092600000000800000000000000000009000000ED +:1092700008000020080000000800000000000000B6 +:1092800000000800000000000000000000000000D6 +:10929000000000000000000000000000000040008E +:1092A00000000000000000000000000000000000BE +:1092B00000000000000000000000000000000000AE +:1092C0000000000000000000000020000005002158 +:1092D0000000000000050000000000000021000365 +:1092E0000000040020000000000000000005000055 +:1092F000000000030021000000000000000000004A +:10930000000000000021000000000000000000003C +:10931000000000000000000000000000000000004D +:10932000000000000000000000000000000000003D +:109330000200000000000000000000000000000427 +:1093400000002000000800000000000020002000B5 +:1093500000040004210000000000000020000004C0 +:1093600000400000000020000000000000002182FA +:1093700020000000000020A00020000800000000E5 +:1093800000000000000000A000000000000000003D +:1093900000000000000000000000000000000000CD +:1093A000000000009000000000000000000000002D +:1093B00000000000000000000000000000000000AD +:1093C00000000100100000000000010001009000FA +:1093D000000000000000000000000000000100008C +:1093E0000000000001000200000000000000040076 +:1093F000000000000001100100000000010010004A +:10940000000000000000000000000000000000005C +:10941000000000000000000000000000000000004C +:1094200000000000000080000000000000000000BC +:10943000000000000000000000000000000000002C +:109440000000000004000000000000000400040010 +:1094500000000000000000000000000000090004FF +:1094600000200002000008000000000000002000B2 +:109470008000000000112008000400020000040029 +:1094800000000000000000000000000000000000DC +:1094900000000000000000000000000000000000CC +:1094A000000000000040000000410000000000003B +:1094B00000000000000000000000000000000000AC +:1094C000000000000000000080008000000080001C +:1094D000000080008000000000000000800000000C +:1094E000000000000000000080000000800000007C +:1094F0000008000000000000000000000000000064 +:10950000000000000000000000000000000000005B +:10951000000000000000000000000000000000004B +:109520000000000000000001000000010000000039 +:10953000000000000000000000000000000000002B +:109540000000000000009000020084000884000079 +:109550000800900040000800900002008800080009 +:1095600000000000000000002000100010000800B3 +:109570000000000100880000000000000000000062 +:1095800000000000000000000000000000000000DB +:1095900000000000000000000000000000000000CB +:1095A00000000000000000000000A000000000001B +:1095B00000000000000000000000000000000000AB +:1095C000000000000000000000000000000100009A +:1095D000000000000000000000000000000000008B +:1095E0000100000000000100000000000001000177 +:1095F0000000000000000800000000000001100151 +:109600000000000000000001000000000000000059 +:10961000000000000000000000000000000000004A +:10962000000000000000000000000000000000003A +:109630001100000000000000000000000000000019 +:1096400000000000000000000000000200210010E7 +:10965000000900000009001000410009000000009E +:1096600000000400000010001000000000110020A5 +:10967000000800090041000880200009004108049A +:1096800090100002002000020010000900000000FD +:1096900000000000000000000000000000000000CA +:1096A00000000000000000000000000000000000BA +:1096B0000000001100000000000000000000000099 +:1096C0000000000000000000000000000008008012 +:1096D0000000000000000008008000000000000002 +:1096E00000800000000000000000000000000008F2 +:1096F00000000080000080000000000080000000EA +:109700000000000000000000000000000000000059 +:109710000000000000000000000000000000000049 +:109720000000000000000000000000000000000039 +:109730000000000000010000000000000000000028 +:109740000000000000000000000000000000000118 +:1097500000C000020000000000010010000800002E +:1097600000000082008800000000000000000000EF +:109770000001008400400000400002008400080056 +:1097800000000000000000000000000000000000D9 +:1097900000000000000000000000000000000000C9 +:1097A00000000000000000000000000000000000B9 +:1097B000000002E000000082000000000000000045 +:1097C0000000000000000000000000000000000099 +:1097D0000000000000004100000000000000000048 +:1097E0000000000000000000000000000000000079 +:1097F0000000000000000000000000000000000069 +:109800000000000000000000000000000000000058 +:109810000000000000000000000000000000000048 +:109820000000000000000000000000000000000038 +:109830000000000000000000000000000000000028 +:109840000000000000000000000000000000000018 +:109850000000000000000000000000000000000008 +:1098600000000000000000000000000000000000F8 +:109870000000000000000000000000007D41030324 +:1098800000000000000000000000000000000000D8 +:1098900000000000000000000000000000000000C8 +:1098A00000000000000000000000000000000000B8 +:1098B00000000000000000000000000000000000A8 +:1098C0000000000000000000000000000000000098 +:1098D0000000000000000000000000000000000088 +:1098E0000000000000000000000000000000000078 +:1098F00000000000000000000000000000007D41AA +:109900003F3F0000000000000000000000000000D9 +:109910000000000000000000000000000000000047 +:109920000000000000000000000000000000000037 +:109930000000000000000000000000000000000027 +:109940000000000000000000000000000000000017 +:10995000000000000000000000000303A0AF0000B2 +:10996000000000008282C0FC0000000003F30A0A2D +:1099700000000000000000000000000003F30A0ADD +:1099800000000000000000000000000000000000D7 +:1099900000000000000000000000000000000000C7 +:1099A00000000000000000000000000000000000B7 +:1099B00000000000000000000000000000000000A7 +:1099C0000000000000000000000000000000000097 +:1099D000000000000000000000000000F3F3A0AF52 +:1099E000000000000000BEBEC0FC0000000003F349 +:1099F000FAFA00000000000000000000000003F37D +:109A0000FAFA000000000000000000000000000062 +:109A10000000000000000000000000000000000046 +:109A20000000000000000000000000000000000036 +:109A30000000000000000000000000640006000EAE +:109A400020000000000000000000000000000000F6 +:109A50000000000000000000000000610006000D92 +:109A60000000000000610006000D00000000000082 +:109A70000000000000610006000D0000006100060B +:109A8000000D000000610006000D000000610006EE +:109A9000000D000000610006000D00000000000045 +:109AA00000000000000000000000000000000000B6 +:109AB00000000000000000000000000000000000A6 +:109AC000AAAA000000000000000000000000000042 +:109AD0000000000000000000000000000000000086 +:109AE00003037D41000000000000C30017170000C1 +:109AF0000000000000000000000000000000000066 +:109B00000000CF0C414100000000D7140303000007 +:109B10000000CF0C4141000000000F00C5C500004F +:109B20000000000000000000000000000000000035 +:109B30000000000000000000000000000000000025 +:109B40000000AAAA000000000000000000000000C1 +:109B50000000000000000000000000000000000005 +:109B600000003F3F7D41000000000000FF3C171750 +:109B700000000000000000000000000000000000E5 +:109B800000000000CF0C7D7D00000000D7143F3F97 +:109B900000000000CF0C7D7D00000000FFF0C5C577 +:109BA00000000000000000000000000000000000B5 +:109BB00000000000000000000000000000000000A5 +:109BC00000000000AAAA0000000000000000000041 +:109BD0000000000000000000000000000000000085 +:109BE0000000000000000000000000000000000075 +:109BF0000000000000000000000030F328280000F2 +:109C00000000000000000000000000000000000054 +:109C10000000E8E800C300000000000000000000B1 +:109C20000000000000000000000000000000000034 +:109C30000000000000000000000000000000000024 +:109C4000000000000000AAAA0000000000000000C0 +:109C50000000000000000000000000000000000004 +:109C600000000000000000000000000000000000F4 +:109C700000000000000000000000000030F3EBEBEB +:109C800000000000000000000000000000000000D4 +:109C900000000000E8E83CFF0000000000000000B9 +:109CA00000000000000000000000000000000000B4 +:109CB000000000000000000000000000000088001C +:109CC0000000200000000000000020000000000054 +:109CD00000000000000000008200000000002000E2 +:109CE00000002000410000000000210000000000F2 +:109CF0000000010000800100000000000080010061 +:109D0000040040002080210000000000210001002C +:109D100000000000008001000000A000048000009E +:109D20002000200020802100000000802080000012 +:109D3000040000000000000000000000000000001F +:109D4000000004000000000000000400000000000B +:109D50000000000000000000000000000000000003 +:109D6000000000000000400000000400400000006F +:109D7000000000000400000240000000000010028B +:109D8000400000000000000240000000040040000D +:109D900040000000000000024000000000004002FF +:109DA0000000000000000002080000000410001085 +:109DB00000000000000000000000000000000000A3 +:109DC0009000000000000000000000000000000003 +:109DD0000000000000000000000000000000000083 +:109DE00000000000000000000000000000008200F1 +:109DF0000000000000000000000000000200000061 +:109E000008000000000000402000000000000000EA +:109E10000000000000000000000000000000000042 +:109E20000000000000000000000000000000000032 +:109E300000000000000000000000004000000000E2 +:109E400000000010000000000000000800000000FA +:109E500000000000000000000000000000000300FF +:109E600000000000000000000000000800000000EA +:109E700000000000000000000000000800000000DA +:109E800000000000000000000000000000080000CA +:109E900000000000000000000000000800000000BA +:109EA000000000000000200000000000000800008A +:109EB00000000000000000000000000000000000A2 +:109EC0000000000000008200000008000000000008 +:109ED0000000000000000000000000000000000082 +:109EE0000000000000000800000008000000000062 +:109EF0000000000000000000000000000000000062 +:109F00000000000000000000080000000821000020 +:109F10000000000000000000000000000041000000 +:109F200000004040000000000800000008000000A1 +:109F300000410000000000000000000000000000E0 +:109F40000000000000000000000000000000000011 +:109F50000000000000000000000000000000000001 +:109F600000000000000000000000000000000000F1 +:109F700000000000000000000000000200000000DF +:109F800000000002090000004190000000000000F5 +:109F90000000410203000000000005020000000074 +:109FA000410000000000000000000002000200006C +:109FB000000000020000000000000400000000009B +:109FC0000000000000000000000000000000000091 +:109FD0000000000000000000000000000000000081 +:109FE000000000000004000000000000000000006D +:109FF0000100000000000000000000000000000060 +:10A00000000000000000040000000000000000004C +:10A01000000000000000900000000400000090001C +:10A02000000000000000000000000400000000002C +:10A030000000000000000000000000000000000020 +:10A040000000000000000000000000000000000010 +:10A050000000000000000000000000000000000000 +:10A0600000000000000020000000000000000000D0 +:10A0700000000400000000000000000000000000DC +:10A080000000000000000000800000000000000050 +:10A0900000000000000009900000000080000000A7 +:10A0A00000000000009000000000000080000000A0 +:10A0B00000000000000000000000000000000000A0 +:10A0C0000000000000000000000000000000000090 +:10A0D0000000000000000000000000000000000080 +:10A0E0000000000000000000000000000000000070 +:10A0F000A0000000000000800000008000000100BF +:10A1000000800000002100004000080000800400E2 +:10A110000100A00000000005008004000080000095 +:10A1200040000080000900000100008000001000D5 +:10A130000100040004000000C00000000000000056 +:10A14000000000000000000000000000000000000F +:10A15000000000000000000000000000008400007B +:10A1600000000000000000000000000000000000EF +:10A17000000000000000000010200000102000007F +:10A1800004001020000000000000000000881020E3 +:10A190008000040000000000000000208004002077 +:10A1A000000000400020000000000400002010001B +:10A1B000000004008000800000000000000000009B +:10A1C000000000000000000000000000000000008F +:10A1D000000000000000000000000000000000007F +:10A1E0000000000000000008000000002000000047 +:10A1F000000000000000000000000000000000005F +:10A2000000000041000000000021000000001005D7 +:10A2100000000041000000050021000000000009CE +:10A2200000001011008000000041A00000000000AC +:10A2300000000000000010001041000000000000BD +:10A24000000000000000000000000000000000000E +:10A2500000000000000000000000000000000000FE +:10A2600000000000000000000000110000000200DB +:10A2700000000000000000000000000000000000DE +:10A2800000000000000000000000000000000000CE +:10A2900008000000000000000000000000000000B6 +:10A2A000000000002004002000000000000000006A +:10A2B000000000000000000000000000000000009E +:10A2C000000000000000000000000000000000008E +:10A2D000000000000000000000000000000000007E +:10A2E000000000000000000000000000000000006E +:10A2F00000000000000000000000000000C001900D +:10A3000020000001000300C00190A000000000C078 +:10A310000190C000000000C101912001000001C0B7 +:10A3200000904001000000C101908801000000C1C0 +:10A330000190A000000100C001904000000040001A +:10A3400000000000100000000000000000000000FD +:10A3500000000000000000000000000000000000FD +:10A3600000000000000000000000000000000000ED +:10A370000000000000000000000000000000008954 +:10A380002091001000080000008003800000000001 +:10A39000008911900008000900C020830008000215 +:10A3A000028911908010000900C00383000200049C +:10A3B00000C0038200100020408040808000000028 +:10A3C000800000000000000000000000000000000D +:10A3D000000000000000000000000000000000007D +:10A3E000000000000000000000000000000000006D +:10A3F000000000000000000000000000000000005D +:10A40000000080000000808000000000800000004C +:10A41000808000008000000080800000800000003C +:10A42000808000008000000080800000800000002C +:10A43000808000008000000080800000800000001C +:10A440008080000000048082800000000000000086 +:10A4500000000000000000000000000000000000FC +:10A4600000000000000000000000000000000000EC +:10A4700000000000000000000000000000000000DC +:10A480000000000082000000C09000000000820078 +:10A490000000C090000082000000C0900000820018 +:10A4A0000000C090000082000000C0900000820008 +:10A4B0000000C090000082000000C09000008200F8 +:10A4C0000000C0909000C0000211040000000000D5 +:10A4D000000000000000000000000000000000007C +:10A4E000000000000000000000000000000000006C +:10A4F000000000000000000000000000000000005C +:10A500000000000000000101019100C000000000F7 +:10A510000001009000C000000100009000C0000099 +:10A520000001009100C000000101029000C0000184 +:10A530000001009100C000000100009000C0000078 +:10A540000001009100C000C00004000400020000EF +:10A5500000000000000000000000000000000000FB +:10A5600000000000000000000000000000000000EB +:10A5700000000000000000000000000000000000DB +:10A580000000000000000009400810910089000050 +:10A5900000040008008800820009402041900089E2 +:10A5A0000004110808910082000904104183008909 +:10A5B00000400810108400840010100241880089B7 +:10A5C0000005001000C00084000000000080008032 +:10A5D000000000000000000000000000000000007B +:10A5E000000000000000000000000000000000006B +:10A5F000000000000000000000000000000000005B +:10A600000000000000000000804000210000000069 +:10A610000000801180410000000080118041000096 +:10A6200000008011804100000000801180200000A7 +:10A630000000801180200000000080118040000098 +:10A640000000801180400000000000000000800039 +:10A6500000000000000000000000000000000000FA +:10A6600000000000000000000000000000000000EA +:10A6700000000000000000000000000000000000DA +:10A680000000000000000000000090010000000039 +:10A6900000000000C001200100000000C0012001F6 +:10A6A00000000000C001200100000000C0012001E6 +:10A6B00000000000C001200100000000C0012000D7 +:10A6C00000000000C001200000000000C0000404E1 +:10A6D00002884000000000000000000000000000B0 +:10A6E000000000000000000000000000000000006A +:10A6F000000000000000000000000000000000005A +:10A700000000000000000000000000000006000043 +:10A71000060000000000000A000006004200000AD7 +:10A720000000060042000006000006004200002172 +:10A730000000060000000082000006000000008209 +:10A74000000006000000008200000600000000007B +:10A7500000000000000000000000000000000000F9 +:10A7600000000000000000000000000000000000E9 +:10A7700000000000000000000000000000000000D9 +:10A780000000000000000000000000000000FFFFCB +:10A790000000FF0000000000FF000000FF000000BC +:10A7A000FF000000FF000000FF000000FF000000AD +:10A7B000FF000000FF000000FF000000FF0000009D +:10A7C000FF000000FF000000FF000000FF0000008D +:10A7D0000F9900C380B083B30000000000000000A8 +:10A7E0000000000000000000000000000000000069 +:10A7F0000000000000000000000000000000000059 +:10A800000000000000000000000000000000000048 +:10A81000FFFF0000FF0000000000FF000000FF003D +:10A820000000FF000000FF000000FF000000FF002C +:10A830000000FF000000FF000000FF000000FF001C +:10A840000000FF000000FF000000FF000000FF000C +:10A8500000000F99FFC38CBC8FBF000000000000F8 +:10A8600000000000000000000000000000000000E8 +:10A8700000000000000000000000000000000000D8 +:10A8800000000000000000000000000000000000C8 +:10A8900000000000000000000000000000000000B8 +:10A8A00000000000000000000000000000000000A8 +:10A8B0000000000000000000000000000000000098 +:10A8C0000000000000000000000000000000000088 +:10A8D0000000000000000000000000000000000078 +:10A8E0000000000000000000000000000000000068 +:10A8F0000000000000000000000000000000000058 +:10A900000000000000000000000000000000000047 +:10A9100000000000000000FF00000F0F000000001A +:10A9200000FF00000F0F000000FF00000F0F0000ED +:10A9300000FF00000F0F000000FF00000F0F0000DD +:10A9400000FF00000F0F000000FF00000F0F0000CD +:10A9500000FFFFFFF0F000000000D646D0400000EE +:10A9600000000000000000000000000000000000E7 +:10A9700000000000000000000000000000000000D7 +:10A9800000000000000000000000000000000000C7 +:10A99000000000000000000000FF00000F0F00009A +:10A9A000000000FF00000F0F000000FF00000F0F6D +:10A9B000000000FF00000F0F000000FF00000F0F5D +:10A9C000000000FF00000F0F000000FF00000F0F4D +:10A9D000000000FFFFFFF0F000000000DF4FD9494A +:10A9E0000000000000000000000000000000000067 +:10A9F0000000000000000000000000000000000057 +:10AA00000000000000000000000000000000000046 +:10AA100000000000000000000363033E0C0D92C024 +:10AA2000000003E3033E0C0D92C003E3033E0C0D54 +:10AA300092C003E3033E0C0D92C003E3033E0C0DF2 +:10AA400092C003E3033E0C0D92C003E3033E0C0DE2 +:10AA500092C003E3033E0C0D82C000000000000022 +:10AA600000000000000000000000000000000000E6 +:10AA700000000000000000000000000000000000D6 +:10AA800000000000000000000000000000000000C6 +:10AA90000000000000000000000000000000C300F3 +:10AAA000171700000000000014143F03000000000E +:10AAB0001414CF0C00000000C300171700000000A2 +:10AAC000D7140C0C000000003C004D4D00000000AD +:10AAD0005050F3030000000055000FC300000000B9 +:10AAE0000000000000000000000000000000000066 +:10AAF0000000000000000000000000000000000056 +:10AB00000000000000000000000000000000000045 +:10AB10000000000000000000000000000000000035 +:10AB2000FF3C1717000000000000D7D73F030000CC +:10AB30000000D7D7CF0C00000000FF3C1717000023 +:10AB40000000D714CFCF00000000FFC34D4D000020 +:10AB500000005F5FF3030000000055FF0FC300001B +:10AB600000000000000000000000000000000000E5 +:10AB700000000000000000000000000000000000D5 +:10AB800000000000000000000000000000000000C5 +:10AB9000000000000000000000000000000000AA0B +:10ABA000F0C30000000000000000000000000000F2 +:10ABB000B2B2003C0000000020A261E300000000EF +:10ABC000B2B2003C00000000E8E800C30000000052 +:10ABD000AAF0C30000000000000000000000000018 +:10ABE0000000000000000000000000000000000065 +:10ABF0000000000000000000000000000000000055 +:10AC00000000000000000000000000000000000044 +:10AC10000000000000000000000000000000000034 +:10AC2000FFAAF0C3000000000000000000000000C8 +:10AC30000000B2B2C3FF0000000034B675F7000098 +:10AC40000000B2B2C3FF00000000E8E83CFF0000D3 +:10AC50000000AAF0C3FF0000000000000000000098 +:10AC600000000000000000000000000000000000E4 +:10AC700000000000000000000000000000000000D4 +:10AC800000000000000000000000000000000000C4 +:10AC900000000000000000001000000000000000A4 +:10ACA00000000000000000000000000000000000A4 +:10ACB0000000000000000000000020000000000074 +:10ACC0000100000000000000000000000000000083 +:10ACD0000000408000004000000020000000000054 +:10ACE0000000000000000000000000000000000064 +:10ACF0000000000000000000000000000000000054 +:10AD00000000000000000000000000000000000043 +:10AD10000002000000000000000000000000000031 +:10AD20000000000000000000000000000000000023 +:10AD30000000000000000000100000020000000001 +:10AD400000000402000000000000000000000000FD +:10AD50000000400000024000000040000000000031 +:10AD600000000000000000000000000000000200E1 +:10AD700002000000000000000000000000000000D1 +:10AD80000000000000000000820000000000000041 +:10AD900000000000000000000000000000000000B3 +:10ADA000000000000000020002000000020000009D +:10ADB0000000000000000000000000000000000093 +:10ADC0000000000000000800000000000000080073 +:10ADD0000000000000000200000000000000000071 +:10ADE000000000000000000002000200000000005F +:10ADF0000008000000000000000800000000000043 +:10AE00000000000000000000000000000000000042 +:10AE10000008000000000000000800000000000022 +:10AE20000000000000000000000000000000000022 +:10AE30000000000200000000000000080000000008 +:10AE40000000000000000000000000000000000002 +:10AE500000000000000000000000004000000000B2 +:10AE600000000000000000000000000000000000E2 +:10AE700000000000000000000000000000000000D2 +:10AE800000000000000000000000000000000000C2 +:10AE900000000000000000000000000000000000B2 +:10AEA00000000000000000000000000000000000A2 +:10AEB00000000000000000000000C0000000008052 +:10AEC00000200400000000800000040000000000DA +:10AED0000000002000000080A02000200000008072 +:10AEE0008480040000000020040000200000008096 +:10AEF00000800000000000000000000000000000D2 +:10AF00000000000000000000000000000000000041 +:10AF10000000000000000000000000000000000031 +:10AF2000000000000000000005000000000000001C +:10AF3000000000000000000005820000000000008A +:10AF400000200501800000840020008280000000B5 +:10AF50001100000000010084002000010001000039 +:10AF6000002000208000008200838000000100009B +:10AF70000020002000000000000000000000000091 +:10AF800000000000000000000000000000000000C1 +:10AF900000000000000000000000000000000000B1 +:10AFA0000000000000040004000000000000000099 +:10AFB0000000000000000000000000000000000091 +:10AFC0000000000000000000000000000000000081 +:10AFD0000100000000000000000000000000000070 +:10AFE0000000000000000000000000000000000061 +:10AFF0000000000000000000000000000000000051 +:10B000000000000000000000000000000000000040 +:10B010000000000000000000000000000000000030 +:10B02000000000000000110000000000000000000F +:10B030000000000000000000000000000000000010 +:10B040000000000000000000000000000000000000 +:10B05000000004000000000000000000009000005C +:10B0600000000000000000000000000000000000E0 +:10B0700000000000000000000000000000000000D0 +:10B0800000000000000000000000000000000000C0 +:10B0900000000000000000000000000000000000B0 +:10B0A00000000000000000000000000000000000A0 +:10B0B0000000900000000000000000000000000000 +:10B0C000000000000020000000000000010000005F +:10B0D00000000000000000200000000000800000D0 +:10B0E000000000000000000000000000010000005F +:10B0F0000000000000200000000000200000000010 +:10B10000000000000000000000000000000000003F +:10B11000000000000000000000000000000000002F +:10B12000000000000000000000000000000000001F +:10B13000000000000084090000A0000000000000E2 +:10B1400000000010000000010500000000A0040045 +:10B15000000000A000A00500090100000000092077 +:10B160000000000200A005000000008400000400B0 +:10B170000000000200000001000000002185000026 +:10B1800000000000000000000000000000000000BF +:10B1900000000000000000000000000000000000AF +:10B1A000000000000000000000000000000000009F +:10B1B000000000000000000000000000000000008F +:10B1C000000200000000000000000000000000007D +:10B1D000000000410000000000200000040000000A +:10B1E00000004000000000000020A000000000005F +:10B1F0000000A000000802000000A0000000000005 +:10B20000000000000000000000000000000000003E +:10B21000000000000000000000000000000000002E +:10B220000000000000000000000011000004000009 +:10B2300002000000400000000000000000000000CC +:10B2400000000000000000000000000000000000FE +:10B25000000000000000000000000001000080006D +:10B2600000000000000000001100000100000000CC +:10B2700000000000000000000000000000000000CE +:10B2800000000000000000000000000000000000BE +:10B2900000000000000000000000000000000000AE +:10B2A000000000000000000000000000000000009E +:10B2B000000000000000000000000000000000008E +:10B2C00000000002000000000000000000C000902C +:10B2D0000000000000C000900000000000C00090CE +:10B2E0000000000000C00190C000000000C00090FD +:10B2F0000000000000C000900000000000C00090AE +:10B30000000000000000000000000000000000003D +:10B31000000000000000000000000000000000002D +:10B32000000000000000000000000000000000001D +:10B33000000000000000000000000000000000000D +:10B34000000000000000000000000000000000807D +:10B3500000800000000000800080000000000080ED +:10B3600000800000000000800480000000000080D9 +:10B3700000800000000000800080000000000080CD +:10B38000008000000000000000000000000000003D +:10B3900000000000000000000000000000000000AD +:10B3A000000000000000000000000000000000009D +:10B3B000000000000000000000000000000000008D +:10B3C000000000000000000000000000000000007D +:10B3D000000000008000808000000000800080806D +:10B3E000000000008000808000000000800080805D +:10B3F000000000008000808000000000800080804D +:10B4000000000000800080800000000000000000BC +:10B41000000000000000000000000000000000002C +:10B42000000000000000000000000000000000001C +:10B43000000000000000000000000000000000000C +:10B4400000000000000000000000000000000000FC +:10B450000000000000008400C09000000000840094 +:10B46000C090000000008400C09000000000840034 +:10B47000C090000000008400C09000000000840024 +:10B48000C090000000008400C09000000000000098 +:10B4900000000000000000000000000000000000AC +:10B4A000000000000000000000000000000000009C +:10B4B000000000000000000000000000000000008C +:10B4C000000000000000000000000000000000007C +:10B4D0000000000000000000009000C0000000001C +:10B4E000009000C000000000009000C000000000BC +:10B4F000009100C100000000009000C000000000AA +:10B50000009000C000000000009000C0000000009B +:10B51000000000000000000000000000000000002B +:10B52000000000000000000000000000000000001B +:10B53000000000000000000000000000000000000B +:10B5400000000000000000000000000000000000FB +:10B5500000000000000000000000008000800000EB +:10B5600000000080008000000000008000800004D7 +:10B5700000020090008400000000008000800000B5 +:10B5800000000080008000000000008000800000BB +:10B5900000000000000000000000000000000000AB +:10B5A000000000000000000000000000000000009B +:10B5B000000000000000000000000000000000008B +:10B5C000000000000000000000000000000000007B +:10B5D00000000000000000008000000900000000E2 +:10B5E00080118004000000008004002100000000A1 +:10B5F0008011800200000000801180050000000022 +:10B60000801180050000000080118005000000000E +:10B61000000000000000000000000000000000002A +:10B62000000000000000000000000000000000001A +:10B63000000000000000000000000000000000000A +:10B6400000000000000000000000000000000000FA +:10B65000000000000000000000009000000000005A +:10B660000000C001200000000000C0010000000038 +:10B670008800C001200100000000C001200000007F +:10B680000000C001200000000000C00120000000F8 +:10B6900000000000000000000000000000000000AA +:10B6A000000000000000000000000000000000009A +:10B6B000000000000000000000000000000000008A +:10B6C000000000000000000000000000000000007A +:10B6D000000000000000000000000000000A000060 +:10B6E000060000000082000006000000008200004A +:10B6F000060000000082000006000000008200003A +:10B700000600000000820000060000000082000029 +:10B710000600000000000000000000000000000023 +:10B720000000000000000000000000000000000019 +:10B730000000000000000000000000000000000009 +:10B7400000000000000000000000000000000000F9 +:10B7500000000000000000000000000000000000E9 +:10B76000FFFF000000FF000000FF000000FF0000DE +:10B770003C3C000000FF000000FF000000FF000054 +:10B7800000FF000000FF000000FF000000FF0000BD +:10B7900000FF000000FF00000000000000000000AB +:10B7A0000000000000000000000000000000000099 +:10B7B0000000000000000000000000000000000089 +:10B7C0000000000000000000000000000000000079 +:10B7D0000000000000000000000000000000000069 +:10B7E0000000FFFF000000FF000000FF000000FF5E +:10B7F00000003C3C000000FF000000FF000000FFD4 +:10B80000000000FF000000FF000000FF000000FF3C +:10B81000000000FF000000FF00000000000000002A +:10B820000000000000000000000000000000000018 +:10B830000000000000000000000000000000000008 +:10B8400000000000000000000000000000000000F8 +:10B8500000000000000000000000000000000000E8 +:10B860000000FF000000FF000000FF000000FF00DC +:10B870000000FF000000FF000000FF000000FF00CC +:10B880000000FF000000FF000000FF000000FF00BC +:10B890000000FF000000FF000000000000000000AA +:10B8A0000000000000000000000000000000000098 +:10B8B0000000000000000000000000000000000088 +:10B8C0000000000000000000000000000000000078 +:10B8D0000000000000000000000000000000000068 +:10B8E00000000000FF000000FF000000FF0000005B +:10B8F000FF000000FF000000FF000000FF0000004C +:10B90000FF000000FF000000FF000000FF0000003B +:10B91000FF000000FF000000FF000000000000002A +:10B920000000000000000000000000000000000017 +:10B930000000000000000000000000000000000007 +:10B9400000000000000000000000000000000000F7 +:10B9500000000000000000000000000000000000E7 +:10B96000000000000000030203380C0092C00382B4 +:10B9700003380C0092C0038203380C0092C003E32A +:10B98000033E0C0D92C0038203380C0092C0038268 +:10B9900003380C0092C0038203380C0092C00000F0 +:10B9A0000000000000000000000000000000000097 +:10B9B0000000000000000000000000000000000087 +:10B9C0000000000000000000000000000000000077 +:10B9D0000000000000000000000000000000000067 +:10B9E0000000000000000000000000000000000057 +:10B9F0000000000000000000000000000000000047 +:10BA0000000000004D4D3C00000000000000000060 +:10BA10000000000000000000000000000000000026 +:10BA20000000000000000000000000000000000016 +:10BA30000000000000000000000000000000000006 +:10BA400000000000000000000000000000000000F6 +:10BA500000000000000000000000000000000000E6 +:10BA600000000000000000000000000000000000D6 +:10BA700000000000000000000000000000000000C6 +:10BA80000000000000004D4DFFC30000000000005A +:10BA900000000000000000000000000000000000A6 +:10BAA0000000000000000000000000000000000096 +:10BAB0000000000000000000000000000000000086 +:10BAC0000000000000000000000000000000000076 +:10BAD0000000000000000000000000000000000066 +:10BAE0000000000000000000000000000000000056 +:10BAF0000000000000000000000000000000000046 +:10BB00000000000000000000000000000000000035 +:10BB10000000000000000000000000000000000025 +:10BB20000000000000000000000000000000000015 +:10BB30000000000000000000000000000000000005 +:10BB400000000000000000000000000000000000F5 +:10BB500000000000000000000000000000000000E5 +:10BB600000000000000000000000000000000000D5 +:10BB700000000000000000000000000000000000C5 +:10BB800000000000000000000000000000000000B5 +:10BB900000000000000000000000000000000000A5 +:10BBA0000000000000000000000000000000000095 +:10BBB0000000000000000000000000000000000085 +:10BBC0000000000000000000000000000000000075 +:10BBD00001000000010000000100008000000000E2 +:10BBE0000000010001000001000000000000000052 +:10BBF0000000000000000000010000000400000040 +:10BC00000000000000000000010000000100010031 +:10BC10000000000000000000000000200000000004 +:10BC20000000000000088800000000000000000084 +:10BC30000000000000000000000000000000000004 +:10BC400000000000000000000000000000000000F4 +:10BC50004000040000000400000004000020000078 +:10BC600000000000040004000000000000002102A9 +:10BC70000000000000000000000004000000800040 +:10BC8000000000000040000010000400000004005C +:10BC900004000000000000000000000000000000A0 +:10BCA0000000000000000000000000000000000094 +:10BCB0000000000000000000000000000000000084 +:10BCC0000000000000000000000000000000000074 +:10BCD0002000020000000000000000000000000042 +:10BCE0000000000000000000020000000000000052 +:10BCF0000000000000000000000000000200000042 +:10BD000000000000020000000000004000000000F1 +:10BD10000000000000000000020000000000000021 +:10BD2000000000000000000008000000000000000B +:10BD30000000000000000000000000000000000003 +:10BD400000000000000000000000000000000000F3 +:10BD50000000800000000000000000000000000063 +:10BD600000000000000000000000000000000000D3 +:10BD700000000000000000000000000000000000C3 +:10BD800000000000000000000000000000000000B3 +:10BD900000000000000000000000000000000000A3 +:10BDA000000000000000000000000008000000008B +:10BDB0000000000000000000000000000000000083 +:10BDC0000000000000000000000000000000000073 +:10BDD0000000000000000000000001000000000062 +:10BDE0000000000000000000012100000000000031 +:10BDF000000001000100820000000421C0000000DA +:10BE000000000000000082000000004100008200ED +:10BE10000000040082000000000000000400820016 +:10BE2000000000000000000000000000000800000A +:10BE30000000000000000000000000000000000002 +:10BE400000000000000000000000000000000000F2 +:10BE500000000000000000000000000004000000DE +:10BE600000000000000000000000040000000000CE +:10BE7000000000000400040000000000800000003A +:10BE800000000300000000000000000000000000AF +:10BE9000000021008000210000000000000000A040 +:10BEA000000000000000000000000000000000088A +:10BEB0000000000000000000000000000000000082 +:10BEC0000000000000000000000000000000000072 +:10BED000000000000000000000000400000020003E +:10BEE000004000000000010004800000000000008D +:10BEF0000000000004000000001004000400000026 +:10BF00000000040000000400A00004000000000085 +:10BF1000000004000000000000000000000000001D +:10BF20000000100000000000000000000000000001 +:10BF30000000000000000000000000000000000001 +:10BF400000000000000000000000000000000000F1 +:10BF50000000000000000000000000008000000061 +:10BF6000000000000000000020008004000000002D +:10BF70000000000000008000000000008000800041 +:10BF80000000000080000000800000008000000031 +:10BF90000000000880000000000000000000000019 +:10BFA0000000000000000000000000000000000091 +:10BFB0000000000800000000000000000000000079 +:10BFC0000000000000000000000000000000000071 +:10BFD0000000000000000000000000000000000061 +:10BFE00000000000900000800000A000000004009D +:10BFF000000082000000000000000000A000C0005F +:10C000000000000000000000000000000000000030 +:10C010000000008000080000000000000000000098 +:10C020000000000000000000000000000000000010 +:10C030000000000000000000000000000000000000 +:10C0400000000000000000000000000000000000F0 +:10C0500000000000000000000000000000000000E0 +:10C0600000000000000000000020000000000000B0 +:10C07000830000000000000000000000000000003D +:10C08000000000000000000000000000000000842C +:10C09000000003840020000800000000030000846A +:10C0A00003000000000000A0000000000000008469 +:10C0B0000000000000000008000000000000000078 +:10C0C0000000000000000000000000000000000070 +:10C0D0000000000000000000000000000000000060 +:10C0E000000000000000200000110080010000009E +:10C0F000000000000021040000000000000000001B +:10C10000000000000000002104000000000000000A +:10C1100000000000040000410408000000020000CC +:10C1200000000000000000000021000000000000EE +:10C1300000000000000000000008000000000000F7 +:10C1400000000000000000000000000000000000EF +:10C1500000000000000000000000000000000000DF +:10C160000000000011000200000000000008200094 +:10C170000000058800000000000000000000000032 +:10C18000000000000000000000008000000000002F +:10C19000000000000000800000008000000000009F +:10C1A000000000000000000000000000000000008F +:10C1B000000000000000000000000000000000007F +:10C1C000000000000000000000000000000000006F +:10C1D000000000000000000000000000000000005F +:10C1E00000000000000000C000900000000001C03E +:10C1F00000900000000000C000900000000000035C +:10C2000000C000900000000000C00090000000008E +:10C2100000C000900000000000C00090000000007E +:10C2200000C00090000000000000000000000000BE +:10C2300000000000000000000000000000000000FE +:10C2400000000000000000000000000000000000EE +:10C2500000000000000000000000000000000000DE +:10C2600000000000000000000080008000000000CE +:10C27000118021800000000000800080000000008C +:10C2800000000080008000000000008000800000AE +:10C29000000000800080000000001180008000008D +:10C2A000000000800080000000000000000000008E +:10C2B000000000000000000000000000000000007E +:10C2C000000000000000000000000000000000006E +:10C2D000000000000000000000000000000000005E +:10C2E00000000000000000000000000080000000CE +:10C2F000808000088900000380800000800000002A +:10C30000808000000000800000008080000080002D +:10C31000000080800000800000008080000080001D +:10C32000000080800000800000008080000000008D +:10C3300000000000000000000000000000000000FD +:10C3400000000000000000000000000000000000ED +:10C3500000000000000000000000000000000000DD +:10C36000000000000000000000000000000082004B +:10C370000000C090000183000000C0900000820017 +:10C380000000C0900000000082000000C09000008B +:10C3900082000000C090000082000000C0900000F9 +:10C3A00082000000C090000082000000C0900000E9 +:10C3B000000000000000000000000000000000007D +:10C3C000000000000000000000000000000000006D +:10C3D000000000000000000000000000000000005D +:10C3E000000000000000000000000000000000004D +:10C3F0000000849000C000008800009001C0000090 +:10C400000000009000C0000000000000009000C08C +:10C4100000000000009000C000000000009000C07C +:10C4200000000000009000C000000000009000C06C +:10C4300000000000000000000000000000000000FC +:10C4400000000000000000000000000000000000EC +:10C4500000000000000000000000000000000000DC +:10C4600000000000000000000000000000000900C3 +:10C4700000000000008000800000000000800280BA +:10C48000000000000080008000000000000000802C +:10C49000008000000000008000800000000000809C +:10C4A000008000000000008000800000000000808C +:10C4B00000800000000000000000000000000000FC +:10C4C000000000000000000000000000000000006C +:10C4D000000000000000000000000000000000005C +:10C4E000000000000000000000000000000000004C +:10C4F00000008000000200000000801180090000A0 +:10C5000000008011800200000000000080118009FE +:10C5100000000000801180020000000080118009EE +:10C5200000000000801180040000000080118020C5 +:10C5300000000000000000000000000000000000FB +:10C5400000000000000000000000000000000000EB +:10C5500000000000000000000000000000000000DB +:10C5600000000000000000000000000000000000CB +:10C57000000000009000000000000000C00120004A +:10C5800000000000C0012000000000000000C00109 +:10C59000200000000000C001200000000000C001D9 +:10C5A000200000000000C001200000000000C001C9 +:10C5B000200100000000000000000000000000005A +:10C5C000000000000000000000000000000000006B +:10C5D000000000000000000000000000000000005B +:10C5E000000000000000000000000000000000004B +:10C5F00000E0000000000021000006000000000A2A +:10C6000000E0060000000006000006000000000038 +:10C610000006000006000000000600000600000002 +:10C62000008200000600000000410000060000003B +:10C630000082000006000000000000000000000072 +:10C6400000000000000000000000000000000000EA +:10C6500000000000000000000000000000000000DA +:10C6600000000000000000000000000000000000CA +:10C670000000000000000000FFFF0000FF000000BD +:10C68000FF000000FF000000FF000000FF000000AE +:10C690000000FF000000FF000000FF000000FF009E +:10C6A0000000FF000000FF000000FF000000FF008E +:10C6B0000000FF000000FF0000000000000000007C +:10C6C000000000000000000000000000000000006A +:10C6D000000000000000000000000000000000005A +:10C6E000000000000000000000000000000000004A +:10C6F00000000000000000000000FFFF0000FF003D +:10C700000000FF000000FF000000FF000000FF002D +:10C7100000000000FF000000FF000000FF0000001C +:10C72000FF000000FF000000FF000000FF0000000D +:10C73000FF000000FF000000FF00000000000000FC +:10C7400000000000000000000000000000000000E9 +:10C7500000000000000000000000000000000000D9 +:10C7600000000000000000000000000000000000C9 +:10C7700000000000000000000000000000000000B9 +:10C7800000000000000000000000000000000000A9 +:10C790000000000000000000000000000000000099 +:10C7A0000000000000000000000000000000000089 +:10C7B0000000000000000000000000000000000079 +:10C7C0000000000000000000000000000000000069 +:10C7D0000000000000000000000000000000000059 +:10C7E0000000000000000000000000000000000049 +:10C7F0000000000000000000000000000000000039 +:10C8000000FF00000F0F000000FF00000F0F0000EE +:10C8100000FF00000F0F0000000000FF00000F0FDE +:10C82000000000FF00000F0F000000FF00000F0FCE +:10C83000000000FF00000F0F000000FFFFFFF0F0FE +:10C8400000000000000000000000000000000000E8 +:10C8500000000000000000000000000000000000D8 +:10C8600000000000000000000000000000000000C8 +:10C8700000000000000000000000000000000000B8 +:10C88000000000FF00000F0F000000FF00000F0F6E +:10C89000000000FF00000F0F0000000000FF00007C +:10C8A0000F0F000000FF00000F0F000000FF00004E +:10C8B0000F0F000000FF00000F0F000000FFFFFF40 +:10C8C000F0F0000000000000000000000000000088 +:10C8D0000000000000000000000000000000000058 +:10C8E0000000000000000000000000000000000048 +:10C8F0000000000000000000000000610006000DC4 +:10C900000000030203380C0092C003E2033E0C0C4B +:10C9100092C0038203380C0092C0000003820338E7 +:10C920000C0092C0038203380C0092C003820338CB +:10C930000C0092C0038203380C0092C003820338BB +:10C940000C0082C000000000000000000000000099 +:10C9500000000000000000000000000000000000D7 +:10C9600000000000000000000000000000000000C7 +:10C9700000000000000000000000000000000000B7 +:10C9800000000000000000000000000000000000A7 +:10C99000FFFF000000000000000000000000000099 +:10C9A0000000000000000000000000000000000087 +:10C9B0000000000000000000000000000000000077 +:10C9C0000000000000000000000000000000000067 +:10C9D0000000000000000000000000000000000057 +:10C9E0000000000000000000000000000000000047 +:10C9F0000000000000000000000000000000000037 +:10CA00000000000000000000000000000000000026 +:10CA10000000000000000000000000000000000016 +:10CA20000000000000000000000000000000000006 +:10CA300000000000000000000000000000000000F6 +:10CA400000000000000000000000000000000000E6 +:10CA500000000000000000000000000000000000D6 +:10CA600000000000000000000000000000000000C6 +:10CA700000000000000000000000000000000000B6 +:10CA800000000000000000000000000000000000A6 +:10CA900000000000F0F000000000000000000000B6 +:10CAA0000000000000000000000000000000000086 +:10CAB0000000000000000000000000000000000076 +:10CAC0000000000000000000000000000000000066 +:10CAD0000000000000000000000000000000000056 +:10CAE0000000000000000000000000000000000046 +:10CAF0000000000000000000000000000000000036 +:10CB00000000000000000000000000000000000025 +:10CB1000000000000000F0F0000000000000000035 +:10CB20000000000000000000000000000000000005 +:10CB300000000000000000000000000000000000F5 +:10CB400000000000000000000000000000000000E5 +:10CB500000000000000000000000000000000000D5 +:10CB600000000000000000000000000000000000C5 +:10CB700000000000000000000000000000000000B5 +:10CB80000000000000000000000010000000000095 +:10CB90000000000000000000000000000000000095 +:10CBA0000000000000010000000000002000000064 +:10CBB0000000000000000000000000004000000035 +:10CBC0000000000000000000000000002000000045 +:10CBD0000000000000000000000000002000000035 +:10CBE0000000000000000000000000000000000045 +:10CBF0000000000000000000000000000000000035 +:10CC00000000000000000000000000000000000024 +:10CC10000000000000000000000000000000000014 +:10CC20000000000000000000000000000002000002 +:10CC300000000000000000000000000040001000A4 +:10CC40004000400040000000000000000000000024 +:10CC500000000000000000020000000000000000D2 +:10CC60001000400000000000000000000000000074 +:10CC700000000000000000000000000000000000B4 +:10CC800002000200000000000000000000000000A0 +:10CC9000000000000000000002000200020002008C +:10CCA0000000000000000000000000000000000084 +:10CCB0000000000000000000000000000000000074 +:10CCC0000000000000000000000000000000000064 +:10CCD0000000000000000000004000000000000014 +:10CCE000000000000000000000000000000000083C +:10CCF0000000000000000000000000000000000034 +:10CD0000000000000000000000000000000000081B +:10CD10000000000000000000000080008000800093 +:10CD20008000000000000000000000000000000083 +:10CD300000080000000000000000000000000000EB +:10CD400000000000000000000000000000000000E3 +:10CD500000080000000000000000000000000000CB +:10CD600000000000000000000000000000000000C3 +:10CD700000000000000000000000000000000000B3 +:10CD800000000000000000000000000000000000A3 +:10CD90000000000000000000000001000000000092 +:10CDA0000000000000000000000000000000000083 +:10CDB0000000000000000000000000000000000073 +:10CDC0000000000000000000000000000000000063 +:10CDD0000000000000000000000000000000000053 +:10CDE0000000004100000000000000000000000002 +:10CDF0000000000000000000000000000000000033 +:10CE00000000000000000000000000000000000022 +:10CE1000000000000000000000000000040000000E +:10CE20000000000000000000000000000000000002 +:10CE300000000000000000000000000000000000F2 +:10CE400000000000000000000000000000000000E2 +:10CE500000000000000000000000000000000000D2 +:10CE600000000000000000000000000000000000C2 +:10CE700000000000000000000000000000000000B2 +:10CE800000000000000000000000000000000000A2 +:10CE90000000000000000000000800000180018088 +:10CEA0000000000000000100000000000000000081 +:10CEB0000000000000000000000000000000000072 +:10CEC0000000000000000000000000000000000062 +:10CED0000000000000000000000000000000000052 +:10CEE0000000000000000000000000000000000042 +:10CEF0000000000000000000000000000000000032 +:10CF00000000000000000000000000000000000021 +:10CF100000000000000000000000000100002020D0 +:10CF200002040000000000000400000000000000F7 +:10CF300000000000000000000000000000000000F1 +:10CF400000000000000000000000000000000000E1 +:10CF500000000000000000000000000000000000D1 +:10CF600000000000000000000000000000000000C1 +:10CF700000000000000000000000000000000000B1 +:10CF800000000000000000000000000000000000A1 +:10CF9000000000000000000090009000020000006F +:10CFA0000000000000000000000000000000000081 +:10CFB0000000000000000000000000000000000071 +:10CFC0000000000000000000000000000000000061 +:10CFD0000000000000000000000000000000000051 +:10CFE0000000000000000000000000000000000041 +:10CFF0000000000000000000000000000000000031 +:10D000000000000000000000000000000000000020 +:10D01000000000000000000000000000000080840C +:10D020000000000000C000000000008400000000BC +:10D0300000000000000000000000000000000000F0 +:10D0400000000000000000000000000000C0000020 +:10D0500000000000000000000000000000A0000030 +:10D0600000000000000000000000000000000000C0 +:10D0700000000000000000000000000000000000B0 +:10D0800000000000000000000000000000000000A0 +:10D090000000000000000000000000000000000090 +:10D0A000000001000000000000090000000900006D +:10D0B000000000000002000000000000000000006E +:10D0C0000000000000000000000000000000000060 +:10D0D0000000000000000000000000000000000050 +:10D0E0000000000000000000000000000000000040 +:10D0F0000000000000000000000000000000000030 +:10D10000000000000000000000000000000000001F +:10D11000000000000000000000000000000000000F +:10D1200000001100200000000000000000000000CE +:10D1300000000000000000000000000000000000EF +:10D1400000000000000000000000000000000000DF +:10D1500000000000000000000000000000000000CF +:10D1600000000000000000000000000000000000BF +:10D1700000000000000000000000000000000000AF +:10D18000000000000000000000000000000000009F +:10D19000000000000000000000000000000000008F +:10D1A00000000000010090000000008400000090DA +:10D1B000000000000000000000000000000000006F +:10D1C000000000000000000000000000000000005F +:10D1D000000000000000000000000000000000004F +:10D1E000000000000000000000000000000000003F +:10D1F000000000000000000000000000000000002F +:10D20000000000000000000000000000000000001E +:10D21000000000000000000000000000000000000E +:10D220000000000000001100A1000000000000004C +:10D23000008000000000000000000000000000006E +:10D2400000000000000000000000000000000000DE +:10D2500000000000000000000000000000000000CE +:10D2600000000000000000000000000000000000BE +:10D2700000000000000000000000000000000000AE +:10D28000000000000000000000000000000000009E +:10D29000000000000000000000000000000000008E +:10D2A00000000000000000000008098000030000EA +:10D2B00000000000000000800000000000000000EE +:10D2C000000000000000000000000000000000005E +:10D2D000000000000000000000000000000000004E +:10D2E000000000000000000000000000000000003E +:10D2F000000000000000000000000000000000002E +:10D30000000000000000000000000000000000001D +:10D31000000000000000000000000000000000000D +:10D3200000000000000000000000000101020000F9 +:10D330000088000000C000000002000000000000A3 +:10D3400000000000000000000000000000000000DD +:10D3500000000000000000000000000000000000CD +:10D3600000000000000000000000000000000000BD +:10D3700000000000000000000000000000000000AD +:10D38000000000000000000000000000000000009D +:10D39000000000000000000000000000000000008D +:10D3A000000000000000000000000000010088886C +:10D3B0000800010001000000829000000000000051 +:10D3C000000000000000000000000000000000005D +:10D3D000000000000000000000000000000000004D +:10D3E000000000000000000000000000000000003D +:10D3F000000000000000000000000000000000002D +:10D40000000000000000000000000000000000001C +:10D41000000000000000000000000000000000000C +:10D4200000000000000000000000000000004100BB +:10D4300000808000200004000000808000000000C8 +:10D4400000000000000000000000000000000000DC +:10D4500000000000000000000000000000000000CC +:10D4600000000000000000000000000000000000BC +:10D4700000000000000000000000000000000000AC +:10D48000000000000000000000000000000000009C +:10D49000000000000000000000000000000000008C +:10D4A000000000000000000000000000000000007C +:10D4B000001100000080000000118040000000000A +:10D4C000000000000000000000000000000000005C +:10D4D000000000000000000000000000000000004C +:10D4E000000000000000000000000000000000003C +:10D4F000000000000000000000000000000000002C +:10D50000000000000000000000000000000000001B +:10D51000000000000000000000000000000000000B +:10D5200000000000000000000000000000000000FB +:10D530000000000100000040000000012001008800 +:10D5400000000000000000000000000000000000DB +:10D5500000000000000000000000000000000000CB +:10D5600000000000000000000000000000000000BB +:10D5700000000000000000000000000000000000AB +:10D58000000000000000000000000000000000009B +:10D59000000000000000000000000000000000008B +:10D5A000000000000000000000000000000000007B +:10D5B00000000000000000E0070082000000000002 +:10D5C0000700000000000000000000000000000054 +:10D5D000000000000000000000000000000000004B +:10D5E000000000000000000000000000000000003B +:10D5F000000000000000000000000000000000002B +:10D60000000000000000000000000000000000001A +:10D61000000000000000000000000000000000000A +:10D6200000000000000000000000000000000000FA +:10D6300000000000000000000000F0F0000000FF0B +:10D64000000000FF000000000000000000000000DB +:10D6500000000000000000000000000000000000CA +:10D6600000000000000000000000000000000000BA +:10D6700000000000000000000000000000000000AA +:10D68000000000000000000000000000000000009A +:10D69000000000000000000000000000000000008A +:10D6A000000000000000000000000000000000007A +:10D6B000000000000000000000000000F0F000008A +:10D6C00000FF000000FF000000000000000000005C +:10D6D000000000000000000000000000000000004A +:10D6E000000000000000000000000000000000003A +:10D6F000000000000000000000000000000000002A +:10D700000000000000000000000000000000000019 +:10D710000000000000000000000000000000000009 +:10D7200000000000000000000000000000000000F9 +:10D730000000000000000000000000003C3C000071 +:10D74000FFFF0000FF000000FFFF000000000000DE +:10D7500000000000000000000000000000000000C9 +:10D7600000000000000000000000000000000000B9 +:10D7700000000000000000000000000000000000A9 +:10D780000000000000000000000000000000000099 +:10D790000000000000000000000000000000000089 +:10D7A0000000000000000000000000000000000079 +:10D7B00000000000000000000000000000003C3CF1 +:10D7C000000000000000FF0000000000000000005A +:10D7D0000000000000000000000000000000000049 +:10D7E0000000000000000000000000000000000039 +:10D7F0000000000000000000000000000000000029 +:10D800000000000000000000000000000000000018 +:10D810000000000000000000000000000000000008 +:10D8200000000000000000000000000000000000F8 +:10D830000000000000000000000000000000056083 +:10D840002A06054C00A815002A00054000A8000083 +:10D8500000000000000000000000000000000000C8 +:10D8600000000000000000000000000000000000B8 +:10D8700000000000000000000000000000000000A8 +:10D880000000000000000000000000000000000098 +:10D890000000000000000000000000000000000088 +:10D8A0000000000000000000000000000000000078 +:10D8B0000000000000000000000000000000000068 +:10D8C00000000000FFFF000000000000000000005A +:10D8D0000000000000000000000000000000000048 +:10D8E0000000000000000000000000000000000038 +:10D8F0000000000000000000000000000000000028 +:10D900000000000000000000000000000000000017 +:10D910000000000000000000000000000000000007 +:10D9200000000000000000000000000000000000F7 +:10D9300000000000000000000000000000000000E7 +:10D9400000000000000000000000000000000000D7 +:10D9500000000000000000000000000000000000C7 +:10D9600000000000000000000000000000000000B7 +:10D9700000000000000000000000000000000000A7 +:10D980000000000000000000000000000000000097 +:10D990000000000000000000000000000000000087 +:10D9A0000000000000000000000000000000000077 +:10D9B0000000000000000000000000000000000067 +:10D9C0000000000000000000F0F000000000000077 +:10D9D0000000000000000000000000000000000047 +:10D9E0000000000000000000000000000000000037 +:10D9F0000000000000000000000000000000000027 +:10DA00000000000000000000000000000000000016 +:10DA10000000000000000000000000000000000006 +:10DA200000000000000000000000000000000000F6 +:10DA300000000000000000000000000000000000E6 +:10DA400000000000000000000000F0F000000000F6 +:10DA500000000000000000000000000000000000C6 +:10DA600000000000000000000000000000000000B6 +:10DA700000000000000000000000000000000000A6 +:10DA80000000000000000000000000000000000096 +:10DA90000000000000000000000000000000000086 +:10DAA0000000000000000000000000000000000076 +:10DAB0000000000000000000000000000000000066 +:10DAC0000000000000000000000000000000000056 +:10DAD0000000000000000000000000000000000046 +:10DAE0000000000000000000000000000000000036 +:10DAF0000000000000000000000000000000000026 +:10DB00000000000000000000000000000000000015 +:10DB10000000000000000000000000000000000005 +:10DB200000000000000000000000000000000000F5 +:10DB300000000000000000000000400000000000A5 +:10DB400000000000000000000000000000000000D5 +:10DB500000000000000000000000000000000000C5 +:10DB600000000000000000000000000000000000B5 +:10DB70004102000000000000000000000000000062 +:10DB80000000100000000000000000000000000085 +:10DB90000000000000001000000000000000000075 +:10DBA0000000000000000000000000000000000075 +:10DBB0000000000002000000000000000000000063 +:10DBC0000000000000000000000000000000000055 +:10DBD0000000000000000000000000000000000045 +:10DBE0000000000000000000000000000000000035 +:10DBF0000200000000000000000000000000000023 +:10DC00000000000000000000000000000000000014 +:10DC10000000000000000000000000000000000004 +:10DC200000000000000000000000000000000000F4 +:10DC300000000000000000000000000000000000E4 +:10DC400000000000000000000000000000000000D4 +:10DC500000000000000000000000000000000000C4 +:10DC600000000000000000000000000000000000B4 +:10DC700000000000000000000000000000000000A4 +:10DC80000000000000000000000000000000000094 +:10DC90000000000000000000000000000000000084 +:10DCA0000000000000000000000000000000000074 +:10DCB0000000000000000000000000000000000064 +:10DCC0000000000000000000000000000000000054 +:10DCD0000000000000000000000000000000000044 +:10DCE00000000000000000000000000000008800AC +:10DCF0000000000000000000000000000000000024 +:10DD00000000000000000000000000000000000013 +:10DD10000000000000000000000000000000000003 +:10DD200000000000000000000000000000000000F3 +:10DD300000000000000000000000000000000000E3 +:10DD400000000000000000000000000000000000D3 +:10DD500000000000000000000000000000000000C3 +:10DD600000000000000000000000000000000000B3 +:10DD700000000000000000000000000000000000A3 +:10DD80000000000000000000000000000000000093 +:10DD90000000000000000000000000000000000083 +:10DDA0000000000000000000000000000000000073 +:10DDB0000000000000000000000000000000000063 +:10DDC0000000000000000000000000000000000053 +:10DDD000000000000000000000000004000000003F +:10DDE0000000000000000000000000000000000033 +:10DDF0000000000000000000000000000000000023 +:10DE000000000000004000000000000000000000D2 +:10DE10000000000000000000000000000000000002 +:10DE200000000000000000000000000000000000F2 +:10DE300000000000000000000000000000000000E2 +:10DE400000000000000000000000000000000000D2 +:10DE500000000000000000000000000000000000C2 +:10DE600000000000000000000000000002000000B0 +:10DE70000000000000000000000000000000001092 +:10DE80000000000000000000000000000000000092 +:10DE90000000000000000000000000000000000082 +:10DEA0000000000000000000000000000000000072 +:10DEB0000000000000000000000000000000000062 +:10DEC0000000000000000000000000000000000052 +:10DED0000000000000000000000000000000000042 +:10DEE0000000000000000000000000000000000032 +:10DEF0000000000000000000000000000000000022 +:10DF00000000000000000000000000000000000011 +:10DF10000000000000000000000000000000000001 +:10DF200000000000000000000000000000000000F1 +:10DF300000000000000000000000000000000000E1 +:10DF400000000000000000000000000000000000D1 +:10DF500000000084000000C000C000000000008439 +:10DF600000840000000000000084000000000000A9 +:10DF700000000000000000000000000000000000A1 +:10DF80000000000000000000000000000000000091 +:10DF90000000000000000000000000000000000081 +:10DFA0000000000000000000000000000000000071 +:10DFB0000000000000000000000000000000000061 +:10DFC0000000000000000000000000000000000051 +:10DFD0000000000000000000000000000009000038 +:10DFE000000000000000000000020002000000002D +:10DFF000000000020000000000000000000000001F +:10E000000000000000000000000000000000000010 +:10E010000000000000000000000000000000000000 +:10E0200000000000000000000000000000000000F0 +:10E0300000000000000000000000000000000000E0 +:10E0400000000000000000000000000000000000D0 +:10E0500000000000000000000000000000000000C0 +:10E06000000000001100000000000000000000009F +:10E070000000000000000000000000002000000080 +:10E080000000000000000040000000000000000050 +:10E090000000000000000000000000000000000080 +:10E0A0000000000000000000000000000000000070 +:10E0B0000000000000000000000000000000000060 +:10E0C0000000000000000000000000000000000050 +:10E0D0000000000000000000000000000000000040 +:10E0E0000000000000000000000000000000000030 +:10E0F0000000000000000000000000000000000020 +:10E10000000000000000000000000000000000000F +:10E1100000000000000000000000000000000000FF +:10E1200000000000000000000000000000000000EF +:10E1300000000000000000000000000000000000DF +:10E1400000000000000000000000000000000000CF +:10E1500000000000000000000000000000000000BF +:10E1600000000000000000000000000000000000AF +:10E17000000000000000000000000000000000009F +:10E18000000000000000000000000000000000008F +:10E19000000000000000000000000000000000007F +:10E1A000000000000000000000000000000000006F +:10E1B000000000000000000000000000000000005F +:10E1C000000000000000000000000000000000004F +:10E1D000000000000000000000000000000000003F +:10E1E000000000000000000000000000000000002F +:10E1F000000000000000000000000000000000001F +:10E20000000000000000000000000000000000000E +:10E2100000000000000000000000000000000000FE +:10E2200000000000000000000000000000000000EE +:10E2300000000000000000000000000000000000DE +:10E2400000000000000000000000000000000000CE +:10E2500000000000000000000000000000000000BE +:10E2600000000000000000000000000000000000AE +:10E27000000000000000000000000000000000009E +:10E28000000000000000000000000000000000008E +:10E29000000000000000000000000000000000007E +:10E2A000000000000000000000000000000000006E +:10E2B000000000000000000000000000000000005E +:10E2C000000000000000000000000000000000004E +:10E2D000000000000000000000000000000000003E +:10E2E000000000000000000000000000000000002E +:10E2F000000000000000000000000000000000001E +:10E30000000000000000000000000000000000000D +:10E3100000000000000000000000000000000000FD +:10E3200000000000000000000000000000000000ED +:10E3300000000000000000000000000000000000DD +:10E3400000000000000000000000000000000000CD +:10E3500000000000000000000000000000000000BD +:10E3600000000000000000000000000000000000AD +:10E37000000000000000000000000000000000009D +:10E38000000000000000000000000000000000008D +:10E39000000000000000000000000000000000007D +:10E3A000000000000000000000000000000000006D +:10E3B000000000000000000000000000000000005D +:10E3C000000000000000000000000000000000004D +:10E3D000000000000000000000000000000000003D +:10E3E000000000000000000000000000000000002D +:10E3F000000000000000000000000000000000001D +:10E40000000000000000000000000000000000000C +:10E4100000000000000000000000000000000000FC +:10E4200000000000000000000000000000000000EC +:10E4300000000000000000000000000000000000DC +:10E4400000000000000000000000000000000000CC +:10E4500000000000000000000000000000000000BC +:10E4600000000000000000000000000000000000AC +:10E47000000000000000000000000000000000009C +:10E48000000000000000000000000000000000008C +:10E49000000000000000000000000000000000007C +:10E4A000000000000000000000000000000000006C +:10E4B000000000000000000000000000000000005C +:10E4C000000000000000000000000000000000004C +:10E4D000000000000000000000000000000000003C +:10E4E000000000000000000000000000000000002C +:10E4F000000000000000000000000000000000001C +:10E50000000000000000000000000000000000000B +:10E5100000000000000000000000000000000000FB +:10E5200000000000000000000000000000000000EB +:10E5300000000000000000000000000000000000DB +:10E5400000000000000000000000000000000000CB +:10E5500000000000000000000000000000000000BB +:10E5600000000000000000000000000000000000AB +:10E57000000000000000000000000000000000009B +:10E58000000000000000000000000000000000008B +:10E59000000000000000000000000000000000007B +:10E5A000000000000000000000000000000000006B +:10E5B000000000000000000000000000000000005B +:10E5C000000000000000000000000000000000004B +:10E5D000000000000000000000000000000000003B +:10E5E000000000000000000000000000000000002B +:10E5F000000000000000000000000000000000001B +:10E60000000000000000000000000000000000000A +:10E6100000000000000000000000000000000000FA +:10E6200000000000000000000000000000000000EA +:10E6300000000000000000000000000000000000DA +:10E6400000000000000000000000000000000000CA +:10E6500000000000000000000000000000000000BA +:10E6600000000000000000000000000000000000AA +:10E67000000000000000000000000000000000009A +:10E68000000000000000000000000000000000008A +:10E69000000000000000000000000000000000007A +:10E6A000000000000000000000000000000000006A +:10E6B000000000000000000000000000000000005A +:10E6C000000000000000000000000000000000004A +:10E6D000000000000000000000000000000000003A +:10E6E000000000000000000000000000000000002A +:10E6F000000000000000000000000000000000001A +:10E700000000000000000000000000000000000009 +:10E7100000000000000000000000000000000000F9 +:10E7200000000000000000000000000000000000E9 +:10E7300000000000000000000000000000000000D9 +:10E7400000000000000000000000000000000000C9 +:10E7500000000000000000000000000000000000B9 +:10E7600000000000000000000000000000000000A9 +:10E770000000000000000000000000000000000099 +:10E780000000000000000000000000000000000089 +:10E790000000000000000000000000000000000079 +:10E7A0000000000000000000000000000000000069 +:10E7B0000000000000000000000000000000000059 +:10E7C0000000000000000000000000000000000049 +:10E7D0000000000000000000000000000000000039 +:10E7E0000000000000000000000000000000000029 +:10E7F0000000000000000000000000000000000019 +:10E800000000000000000000000000000000000008 +:10E8100000000000000000000000000000000000F8 +:10E8200000000000000000000000000000000000E8 +:10E8300000000000000000000000000000000000D8 +:10E8400000000000000000000000000000000000C8 +:10E8500000000000000000000000000000000000B8 +:10E8600000000000000000000000000000000000A8 +:10E870000000000000000000000000000000000098 +:10E880000000000000000000000000000000000088 +:10E890000000000000000000000000000000000078 +:10E8A0000000000000000000000000000000000068 +:10E8B0000000000000000000000000000000000058 +:10E8C0000000000000000000000000000000000048 +:10E8D0000000000000000000000000000000000038 +:10E8E0000000000000000000000000000000000028 +:10E8F0000000000000000000000000000000000018 +:10E900000000000000000000000000000000000007 +:10E9100000000000000000000000000000000000F7 +:10E9200000000000000000000000000000000000E7 +:10E9300000000000000000000000000000000000D7 +:10E9400000000000000000000000000000000000C7 +:10E9500000000000000000000000000000000000B7 +:10E9600000000000000000000000000000000000A7 +:10E970000000000000000000000000000000000097 +:10E980000000000000000000000000000000000087 +:10E990000000000000000000000000000000000077 +:10E9A0000000000000000000000000000000000067 +:10E9B0000000000000000000000000000000000057 +:10E9C0000000000000000000000000000000000047 +:10E9D0000000000000000000000000000000000037 +:10E9E0000000000000000000000000000000000027 +:10E9F0000000000000000000000000000000000017 +:10EA00000000000000000000000000000000000006 +:10EA100000000000000000000000000000000000F6 +:10EA200000000000000000000000000000000000E6 +:10EA300000000000000000000000000000000000D6 +:10EA400000000000000000000000000000000000C6 +:10EA500000000000000000000000000000000000B6 +:10EA60000000000000000000000020000000000086 +:10EA70000000000000000000200000002000000056 +:10EA80000000000000000000000000000000000086 +:10EA90000000000000000000000000000000000175 +:10EAA00000800000000000000000000000000000E6 +:10EAB0000000000000000000000000000000000056 +:10EAC0000000000000000200000000000000000044 +:10EAD0000000100000000000000000000000000026 +:10EAE0000000000000000000000000000000000026 +:10EAF0000000000000000000000000000000000016 +:10EB00000000000000020000000000000002000001 +:10EB100000000000000000000000000000000000F5 +:10EB2000000000400000090010004040100040407C +:10EB300000000000000000020000000000000000D3 +:10EB40000000000000000000000000004000000085 +:10EB500000000000000000000000000010000000A5 +:10EB600000000200020000000000000000000000A1 +:10EB70000000000000000000000000000200000093 +:10EB80000000000000000000000000000000000085 +:10EB90000000000000000000000002000000000073 +:10EBA0000200000000000000000000000000000063 +:10EBB0000000000000000000000002000000000053 +:10EBC0000000000000000000000000400000000005 +:10EBD00000000000000000000000000000400000F5 +:10EBE00000000000000000000000400000000000E5 +:10EBF0000000000000000000000000000000000015 +:10EC000000000000400000000000000000000000C4 +:10EC100000000000000000000000000000000000F4 +:10EC200000000000000000000000000000000000E4 +:10EC300000000000000000000000000000000000D4 +:10EC40000000000000000000000000004000000084 +:10EC500000000000000000000000000000000000B4 +:10EC6000000000000008000000000000000000009C +:10EC70000000000000000000000000000000000094 +:10EC80000000000000000000000000000000000084 +:10EC90000000000000000000000000000000000074 +:10ECA0000000000000000000000000000000000064 +:10ECB000000000000000000000000000004000050F +:10ECC0000000000000000010000000000000000034 +:10ECD0000000000000000000000000000000000034 +:10ECE0000000000000000000000000000000000024 +:10ECF0000000000000000000000000000000000014 +:10ED00000000000000000000000000000000000003 +:10ED100000000000000000000000000000000000F3 +:10ED200000000000000000000000000000004100A2 +:10ED300000000000000000000000000000000000D3 +:10ED400000000000000000000000000000000000C3 +:10ED500000000000000000000000000000000000B3 +:10ED600000000000000000000000000000000000A3 +:10ED70000000000000000000000000000000000093 +:10ED80000000000000000000000000000000000083 +:10ED90000000010000000100008000000000A00051 +:10EDA0000000000000400000000000000000000023 +:10EDB0000000000000000000000000000000000053 +:10EDC0000000000000000000000000400000000003 +:10EDD0000000000000000000000000000000000033 +:10EDE00000000000000000400000000000000000E3 +:10EDF0000000000000000000000000000000000013 +:10EE00000000000000000000000000000000000002 +:10EE100000000000100000002000000400000000BE +:10EE200000000000000000000000000000000000E2 +:10EE300000000000000000000000000000000000D2 +:10EE400000000000000000000000000000000000C2 +:10EE500000000000020000000000000000000000B0 +:10EE600000000000000000000000000000000000A2 +:10EE70000000000000000000000000000000000092 +:10EE80000000000000000000000000000000000082 +:10EE900000000000900000000000000000000000E2 +:10EEA000000000001000000000000000080000004A +:10EEB0000000000000000000000000000000002131 +:10EEC0000000000000000000000000000000000042 +:10EED0000000000000000000000000000000000032 +:10EEE0000000000000000000000000000000000022 +:10EEF0000000000000000000000000000000000012 +:10EF00000000000000000000000000000000000001 +:10EF100000000000000000000000000000000000F1 +:10EF200000000000000000000000000000000000E1 +:10EF300000000000210000000000000000000000B0 +:10EF400000000000000000000000000000000000C1 +:10EF500000000000000000000000000000000000B1 +:10EF600000000000000000000000000000000000A1 +:10EF70000000000000000000000000000000000091 +:10EF80000000000000000000000000000000000081 +:10EF90000000000000000000000000000000080069 +:10EFA0000000000000000000000000000800C00099 +:10EFB0000000000000000000000000000011000040 +:10EFC0000000000000000000000000000000000041 +:10EFD0000000000800000000000000000000000029 +:10EFE0000000000000000000000000000000000021 +:10EFF0000000000000000000000000000000000011 +:10F000000000000000000000000000000000000000 +:10F0100000000000000000000000000020000000D0 +:10F0200000000000000000000000000000000000E0 +:10F0300000000000000000000000000000000000D0 +:10F0400000000000000000000000000000000000C0 +:10F0500000000000000000000000000000000000B0 +:10F0600000000000000000000000000000000000A0 +:10F070000000000000000000000000000000000090 +:10F080000000000000000000000000000000000080 +:10F09000000000000000000000000000000001006F +:10F0A0000000000000000000000000000000000060 +:10F0B0000000000000000000900804A0000282048C +:10F0C0000000000000000000000000000000000040 +:10F0D0000000000000000000000000000000000030 +:10F0E0000000000000000000000000000000000020 +:10F0F0000000000000000000000000000000000010 +:10F1000000000000000000000000000000000000FF +:10F1100000000000000000000000000000000000EF +:10F1200011002100000000000000000000000000AD +:10F13000000000000000000000000080800000804F +:10F1400000000000000000000000000000000000BF +:10F1500000000000000000000000000000000000AF +:10F16000000000000000000000000000000000009F +:10F17000000000000000000000000000000000008F +:10F18000000000000000000000000000000000007F +:10F19000000000000000000000000000000000006F +:10F1A0000000004109000003000000000000000012 +:10F1B000000000000000000000000000000000A0AF +:10F1C000008000800000000000000000000000003F +:10F1D000000000000000000000000000000000002F +:10F1E000000000000000000000000000000000001F +:10F1F000000000000000000000000000000000000F +:10F2000000000000000000000000000000000000FE +:10F2100000000000000000000000000000000000EE +:10F2200000000000000101000000000000000000DC +:10F2300000000000000000000000000000001000BE +:10F24000A0058804108200000000000000000000FB +:10F2500000000000000000000000000000000000AE +:10F26000000000000000000000000000000000009E +:10F27000000000000000000000000000000000008E +:10F28000000000000000000000000000000000007E +:10F29000000000000000000000000000000000006E +:10F2A00000000000000000008800000001000000D5 +:10F2B000000000000000000000000000000000004E +:10F2C0000810000240401002000000000000000092 +:10F2D000000000000000000000000000000000002E +:10F2E000000000000000000000000000000000001E +:10F2F000000000000000000000000000000000000E +:10F3000000000000000000000000000000000000FD +:10F3100000000000000000000000000000000000ED +:10F32000000000000000000000000000000041009C +:10F3300000000000000000000000000000000000CD +:10F34000000000800080008000000000000000003D +:10F3500000000000000000000000000000000000AD +:10F36000000000000000000000000000000000009D +:10F37000000000000000000000000000000000008D +:10F38000000000000000000000000000000000007D +:10F39000000000000000000000000000000000006D +:10F3A000000000000000000000000000001100004C +:10F3B000000000000000000000000000000000004D +:10F3C000000000000020808000000000000000001D +:10F3D000000000000000000000000000000000002D +:10F3E000000000000000000000000000000000001D +:10F3F000000000000000000000000000000000000D +:10F4000000000000000000000000000000000000FC +:10F4100000000000000000000000000000000000EC +:10F4200000000000000000000000000000000001DB +:10F4300000000000000000000000000000000000CC +:10F440000000000000008801020208029000000095 +:10F4500000000000000000000000000000000000AC +:10F46000000000000000000000000000000000009C +:10F47000000000000000000000000000000000008C +:10F48000000000000000000000000000000000007C +:10F49000000000000000000000000000000000006C +:10F4A000000000000000000000000000000000005C +:10F4B00000E00000810A00000000000000000000E1 +:10F4C000000000000000000000000000000000003C +:10F4D000000000000000000000000000000000002C +:10F4E000000000000000000000000000000000001C +:10F4F000000000000000000000000000000000000C +:10F5000000000000000000000000000000000000FB +:10F5100000000000000000000000000000000000EB +:10F5200000000000000000000000000000000000DB +:10F5300000000000000000000000000000000000CB +:10F54000000000000000000000000FFF0F00CF05CA +:10F55000C0050000000000000000000000000000E6 +:10F56000000000000000000000000000000000009B +:10F57000000000000000000000000000000000008B +:10F58000000000000000000000000000000000007B +:10F59000000000000000000000000000000000006B +:10F5A000000000000000000000000000000000005B +:10F5B000000000000000000000000000000000004B +:10F5C00000000000000000000000000055C355C30B +:10F5D000CFF5C0F5000000000000000000000000B2 +:10F5E000000000000000000000000000000000001B +:10F5F000000000000000000000000000000000000B +:10F6000000000000000000000000000000000000FA +:10F6100000000000000000000000000000000000EA +:10F6200000000000000000000000000000000000DA +:10F6300000000000000000000000000000000000CA +:10F640000000000000000000000000000000C00AF0 +:10F65000CF0A40E045E50000000000000000000087 +:10F66000000000000000000000000000000000009A +:10F67000000000000000000000000000000000008A +:10F68000000000000000000000000000000000007A +:10F69000000000000000000000000000000000006A +:10F6A000000000000000000000000000000000005A +:10F6B000000000000000000000000000000000004A +:10F6C000000000000000000000000000000000003A +:10F6D000C0FACFFA4AEA4FEF000000000000000035 +:10F6E000000000000000000000000000000000001A +:10F6F000000000000000000000000000000000000A +:10F7000000000000000000000000000000000000F9 +:10F7100000000000000000000000000000000000E9 +:10F7200000000000000000000000000000000000D9 +:10F73000000000000000000000600006000C000057 +:10F7400000000000000000000000000000000000B9 +:10F7500000000000000000C00000000000000000E9 +:10F760000000000000000000000000000000000099 +:10F770000000000000000000000000000000000089 +:10F780000000000000000000000000000000000079 +:10F790000000000000000000000000000000000069 +:10F7A0000000000000000000000000000000000059 +:10F7B0000000000000000000000000000000FFFF4B +:10F7C0000000000000000000000000000000000039 +:10F7D0000000000000000000000000000000000029 +:10F7E0000000000000000000000000000000000019 +:10F7F0000000000000000000000000000000000009 +:10F8000000000000000000000000000000000000F8 +:10F8100000000000000000000000000000000000E8 +:10F8200000000000000000000000000000000000D8 +:10F8300000000000000000000000000000000000C8 +:10F8400000000000000000000000000000000000B8 +:10F8500000000000000000000000000000000000A8 +:10F860000000000000000000000000000000000098 +:10F870000000000000000000000000000000000088 +:10F880000000000000000000000000000000000078 +:10F890000000000000000000000000000000000068 +:10F8A0000000000000000000000000000000000058 +:10F8B0000000000000000000000000000000000048 +:10F8C0000000F0F000000000000000000000000058 +:10F8D0000000000000000000000000000000000028 +:10F8E0000000000000000000000000000000000018 +:10F8F0000000000000000000000000000000000008 +:10F9000000000000000000000000000000000000F7 +:10F9100000000000000000000000000000000000E7 +:10F9200000000000000000000000000000000000D7 +:10F9300000000000000000000000000000000000C7 +:10F9400000000000F0F000000000000000000000D7 +:10F9500000000000000000000000000000000000A7 +:10F960000000000000000000000000000000000097 +:10F970000000000000000000000000000000000087 +:10F980000000000000000000000000000000000077 +:10F990000000000000000000000000000000000067 +:10F9A0000000000000002000000000000000000037 +:10F9B0000000000000002000000000000000000027 +:10F9C00000000000000020004000000000000000D7 +:10F9D0000000000000002000000000010000000006 +:10F9E00000000000000000002000000000000000F7 +:10F9F00000000000000000002000000000000000E7 +:10FA00004000000000000000200000000000000096 +:10FA100000000000000000002000000000000000C6 +:10FA20000000000040000000000000000000000096 +:10FA300000000000000000000000000000000000C6 +:10FA400000000000000000000000000000000000B6 +:10FA500000000000000000000000000000000000A6 +:10FA60000000000200000000000000000000000094 +:10FA70000000000000000000000000400000000046 +:10FA800000000000000000000090000000000000E6 +:10FA90000000000000000000000000000000000066 +:10FAA0000000000000000000000000000000000056 +:10FAB0000000000000000000000000000000000046 +:10FAC00000000000000010000008100010000000FE +:10FAD0000000000000000000000000000000000026 +:10FAE0000000000000000000000000000000000016 +:10FAF0000000000000000000000000000000000006 +:10FB000000000000000000000000000000000000F5 +:10FB100000000000000000000000000000000000E5 +:10FB200000000000000000000000000000000000D5 +:10FB300000000000000000000000000000000000C5 +:10FB40000000000000000000800000018000800034 +:10FB500000000000000000000000000000000000A5 +:10FB60000000000000000000000000000000000095 +:10FB70000000000000000000000000000000000085 +:10FB800000000000000000840000000000000200EF +:10FB90000004000000000000000000000000000061 +:10FBA0000000000000000000000000000000000055 +:10FBB0000000000000000000000000000000000045 +:10FBC0000000000000000000000000000000000035 +:10FBD0000000000000000000000000000000000025 +:10FBE0000000000000000000000000000000000015 +:10FBF0000000000000000000000000000000000005 +:10FC000000040000000000080000000000000000E8 +:10FC100000000000000000000009000000000000DB +:10FC200000000000000000000000000000000000D4 +:10FC300000000000000000000000000000000000C4 +:10FC400000000000000000000000000000000000B4 +:10FC500000000000000000000000000000000000A4 +:10FC60000000000000000000000000000084000010 +:10FC7000000000A0002000000000000000000000C4 +:10FC80000000000000000000000000000000000074 +:10FC90000000000000000000000000000000000064 +:10FCA0000000000000000000000000000000000054 +:10FCB0000000000000000000000000000000000044 +:10FCC0000000000000000000000000000000000034 +:10FCD0000000008001800000000000000000000023 +:10FCE0000000000000000000000000000000000014 +:10FCF00000000000000000000000002100000000E3 +:10FD000000400000000000000000000000000000B3 +:10FD100000000000004000020000000000000000A1 +:10FD200000000000000000000000000000000000D3 +:10FD300000000000000000000000000000000000C3 +:10FD400000000000000000000000000000000000B3 +:10FD50000000000000202020000000000000000043 +:10FD60000000000000000000000000000000000093 +:10FD70000000000000000000000000000000000083 +:10FD80002000000000000000100000000000000043 +:10FD90000000000000000000000000000000000063 +:10FDA0000000000000000000000000000000000053 +:10FDB0000000000000000000000000000000000043 +:10FDC0000000000000000000200020000000900063 +:10FDD0000000000000000000000000000000000023 +:10FDE0000000000000000000000000000000000013 +:10FDF0000000000000000000000000000000000003 +:10FE000000000000000000000000000000000000F2 +:10FE100000000000000000000000000000000000E2 +:10FE200000000000000000000000000000000000D2 +:10FE300000000000000000000000000000000000C2 +:10FE400000000000000000000000000000000000B2 +:10FE5000000000C00000000000840000000000005E +:10FE60000000000000000000000000000000000092 +:10FE7000000400082100000000000000080000004D +:10FE80000000000000000000000000000000000072 +:10FE90000000000000000000000000000000000062 +:10FEA0000000000000000000000000000000000052 +:10FEB0000000000000000000000000000000000042 +:10FEC0000000000000000000000000000000000032 +:10FED000000000000000020000000000000000021E +:10FEE000000000020000000000000000020000000E +:10FEF00000000000000000000000000000000008FA +:10FF000000000000000000000000000000000000F1 +:10FF100000000000000000000000000000000000E1 +:10FF200000000000000000000000000000000000D1 +:10FF300000000000000000000000000008000000B9 +:10FF400000000000000000000000000000000000B1 +:10FF500000000000410002008200000008000000D4 +:10FF60000000000000000000000000000000000091 +:10FF70000000000000000000050000000000080074 +:10FF8000000002000000000000040000000000006B +:10FF90000000000000000000000000000000080059 +:10FFA000000000000000000000000000000002004F +:10FFB0000000000000000000000000000000000041 +:10FFC0000000000000000000000000000000000031 +:10FFD0000000000000000000000001009000000090 +:10FFE0000000000000000000000000000000000011 +:10FFF0000000000000000000000000000000000001 +:02000004002CCE +:1000000000000000000000000000000000000000F0 +:1000100000000000000000000000000000000000E0 +:1000200000000000000000000000000000000000D0 +:1000300000000000000000000000000000000000C0 +:1000400000000000000000000000000000000000B0 +:1000500000000000000000000000000011008021EE +:100060000000000000000000000000000000000090 +:100070000000000000000000000000000000000080 +:100080000000000000000000000000000000000070 +:100090000000000000000000000000000000000060 +:1000A0000000000000000000000000000000000050 +:1000B0000000000000000000000000000000000040 +:1000C0000000000000000000000000000000000030 +:1000D0000000000000000000000000000000000917 +:1000E0000080112100000005000000000000000059 +:1000F0000000000000000000000000000000000000 +:1001000000000000000000000000000000000000EF +:1001100000000000000000000000000000000000DF +:1001200000000000000000000000000000000000CF +:1001300000000000000000000000000000000000BF +:1001400000000000000000000000000000000000AF +:10015000000000000000000000000000000000009F +:100160000000000201000084000000000000000008 +:10017000000000000000000000000000000000007F +:10018000000000000000000000000000000000006F +:10019000000000000000000000000000000000005F +:1001A000000000000000000000000000000000004F +:1001B000000000000000000000000000000000003F +:1001C000000000000000000000000000000000002F +:1001D000000000000000000000000000000000001F +:1001E00000000100908802010100000000000000F2 +:1001F00000000000000000000000000000000000FF +:1002000000000000000000000000000000000000EE +:1002100000000000000000000000000000000000DE +:1002200000000000000000000000000000000000CE +:1002300000000000000000000000000000000000BE +:1002400000000000000000000000000000000000AE +:10025000000000000000000000000000000000009E +:100260000000000041000080800820000000000025 +:10027000000000000000000000000000000000007E +:10028000000000000000000000000000000000006E +:10029000000000000000000000000000000000005E +:1002A000000000000000000000000000000000004E +:1002B000000000000000000000000000000000003E +:1002C000000000000000000000000000000000002E +:1002D000000000000000000000000000000000001E +:1002E000000000000000001111000080000000006C +:1002F00000000000000000000000000000000000FE +:1003000000000000000000000000000000000000ED +:1003100000000000000000000000000000000000DD +:1003200000000000000000000000000000000000CD +:1003300000000000000000000000000000000000BD +:1003400000000000000000000000000000000000AD +:10035000000000000000000000000000000000009D +:10036000000000000000000000010100004000004B +:10037000000000000000000000000000000000007D +:10038000000000000000000000000000000000006D +:10039000000000000000000000000000000000005D +:1003A000000000000000000000000000000000004D +:1003B000000000000000000000000000000000003D +:1003C000000000000000000000000000000000002D +:1003D000000000000000000000000000000000001D +:1003E00000000000000000000000000000E0070026 +:1003F000820000000000000000000000000000007B +:1004000000000000000000000000000000000000EC +:1004100000000000000000000000000000000000DC +:1004200000000000000000000000000000000000CC +:1004300000000000000000000000000000000000BC +:1004400000000000000000000000000000000000AC +:10045000000000000000000000000000000000009C +:10046000000000000000000000000000000000008C +:100470000000F0F00000000000000000000000009C +:10048000000000000000000000000000000000006C +:10049000000000000000000000000000000000005C +:1004A000000000000000000000000000000000004C +:1004B000000000000000000000000000000000003C +:1004C000000000000000000000000000000000002C +:1004D000000000000000000000000000000000001C +:1004E000000000000000000000000000000000000C +:1004F00000000000F0F0000000000000000000001C +:1005000000000000000000000000000000000000EB +:1005100000000000000000000000000000000000DB +:1005200000000000000000000000000000000000CB +:1005300000000000000000000000000000000000BB +:1005400000000000000000000000000000000000AB +:10055000000000000000000000000000000000009B +:10056000000000000000000000000000000000008B +:10057000000000000000000000000000000000007B +:10058000000000000000000000000000000000006B +:10059000000000000000000000000000000000005B +:1005A000000000000000000000000000000000004B +:1005B000000000000000000000000000000000003B +:1005C000000000000000000000000000000000002B +:1005D000000000000000000000000000000000001B +:1005E000000000000000000000000000000000000B +:1005F000000000000000FFFF0000000000000000FD +:1006000000000000000000000000000000000000EA +:1006100000000000000000000000000000000000DA +:1006200000000000000000000000000000000000CA +:1006300000000000000000000000000000000000BA +:1006400000000000000000000000000000000000AA +:10065000000000000000000000000000000000009A +:10066000000000000000000000000000000000008A +:10067000000000000000000000000000000000007A +:10068000000000000000000000000000000000006A +:10069000000000000000000000000000000000005A +:1006A000000000000000000000000000000000004A +:1006B000000000000000000000000000000000003A +:1006C000000000000000000000000000000000002A +:1006D000000000000000000000000000000000001A +:1006E000000000000000000000000000000000000A +:1006F00000000000000005000A06054C00A80000EC +:1007000000000000000000000000000000000000E9 +:1007100000000000000000000000000000000000D9 +:1007200000000000000000000000000000000000C9 +:1007300000000000000000000000000000000000B9 +:1007400000000000000000000000000000000000A9 +:100750000000000000000000000000000000000099 +:100760000000000000000000000000000000000089 +:1007700000000000000000000000FF0000FF00007B +:100780000000000000000000000000000000000069 +:100790000000000000000000000000000000000059 +:1007A0000000000000000000000000000000000049 +:1007B0000000000000000000000000000000000039 +:1007C0000000000000000000000000000000000029 +:1007D0000000000000000000000000000000000019 +:1007E0000000000000000000000000000000000009 +:1007F000000000000000000000000000FF0000FFFB +:1008000000000000000000000000000000000000E8 +:1008100000000000000000000000000000000000D8 +:1008200000000000000000000000000000000000C8 +:1008300000000000000000000000000000000000B8 +:1008400000000000000000000000000000000000A8 +:100850000000000000000000000000000000000098 +:100860000000000000000000000000000000000088 +:100870000000000000000000000000000000FF0079 +:1008800000FF000000000000000000000000000069 +:100890000000000000000000000000000000000058 +:1008A0000000000000000000000000000000000048 +:1008B0000000000000000000000000000000000038 +:1008C0000000000000000000000000000000000028 +:1008D0000000000000000000000000000000000018 +:1008E0000000000000000000000000000000000008 +:1008F00000000000000000000000000000000000F8 +:10090000FF0000FF000000000000000000000000E9 +:1009100000000000000000000000000000000000D7 +:1009200000000000000000000000000000000000C7 +:1009300000000000000000000000000000000000B7 +:1009400000000000000000000000000000000000A7 +:100950000000000000000000000000002000000077 +:100960002000400000000000000020000000040003 +:100970002000000000000000000000000000000057 +:100980000000000000000000040020000000200023 +:1009900021000100010001000003000000004000F0 +:1009A0000000400040000000000020002000000087 +:1009B0000000000000004000400000004000204116 +:1009C00084000000400040000000200021004000A2 +:1009D0000080000000002000200000000000000057 +:1009E00000000000000000000000200000000000E7 +:1009F00000000000000000000000000000000002F5 +:100A000041000000000000000000000000000000A5 +:100A10000000100010001000100000000000000096 +:100A200000020000000000000000000000000000C4 +:100A30000002200000004000000000000000000054 +:100A40000000000000000000000000200000200066 +:100A500000000004400040004000000000000000D2 +:100A60000000000000000000000000000000000086 +:100A70000000000002000200000000000000000072 +:100A80000000000000000000000000000000000066 +:100A90000200000000000000000000000000000054 +:100AA0000000000000000000000000000000000046 +:100AB0000000000000000000000000000000000036 +:100AC0000000000000210000000000000000000005 +:100AD0000000000000000000000000000000000016 +:100AE0000000000000000000000000000000000006 +:100AF00000000000000000000000000020000000D6 +:100B000000000000000000000000000000000000E5 +:100B100000000000000000000000000000000000D5 +:100B200000000000000000000000000000000000C5 +:100B300000000000000000000000000000000500B0 +:100B400000000000000000000000000000000000A5 +:100B50000000000000000000000000000000000095 +:100B60000000000000000000000000000000000085 +:100B70000000000000000000000000000000000075 +:100B800000000000008000000000000000000000E5 +:100B90000000000000000000000000000000010054 +:100BA0000000000088000000840000000000000039 +:100BB0000000000000000000000000000000000035 +:100BC0000000000000000000000000000000000025 +:100BD0000000000000000000000000000000000015 +:100BE0000000000000000000000000000000000005 +:100BF00000000000000000000000000000000000F5 +:100C0000000000000000000400C000000000000020 +:100C100000000000000000000000000000000000D4 +:100C200020000000000000000000000000000000A4 +:100C300000000000000000000000000000000000B4 +:100C400000000000000000000000000000000000A4 +:100C50000000000000000000000000000000000094 +:100C600000000000000000000000C00000000000C4 +:100C700000000000000000000000820000000000F2 +:100C800000000000000000000000008000000000E4 +:100C900001000080000000000000000001000100D1 +:100CA0000080018000000000000000000000000043 +:100CB000000000000000000000000000900008009C +:100CC0000000000000000000000000000000000024 +:100CD0000000000000000000100000000000000004 +:100CE00000000000000000000000080041000800B3 +:100CF00010000000000000000000000000000000E4 +:100D000000000000000000000000080003040800CC +:100D10000800200000040000004000000200200045 +:100D2000040000200220000000000000100000006D +:100D300010001000000000000090000000000010F3 +:100D40000000000000000004000000000800400057 +:100D50000810080041000000000000000000000032 +:100D6000000000040000000000000000000000007F +:100D70000000000000000000000000000000000073 +:100D80000000000000009000000000000000900043 +:100D9000A100000000000000200000009000C00042 +:100DA0000000000000000000000000000000000043 +:100DB0000000000000000000000000000000000033 +:100DC0000000000000000000000000000000000023 +:100DD0008200000000000000000000000000000091 +:100DE0000000000000000000000000000000000003 +:100DF00000000000000000000000000000000000F3 +:100E0000000000000000000000000000000000C022 +:100E1000000010000000000000840000000000003E +:100E200000000000000000000000000000000000C2 +:100E300000000000000000000000000000000000B2 +:100E400000000000000000000000000000000000A2 +:100E50000000000000000000000000000000000092 +:100E600000000090000000000000000000000000F2 +:100E70000000000000000000000000000000000072 +:100E80000000000000000000000000001000000052 +:100E90000000000000000000000000000000000052 +:100EA0000000000200000000000000000000000040 +:100EB0000000000900000000000000000000000029 +:100EC0000000000000000000000000000000000022 +:100ED0000000000000008200000000000000000090 +:100EE00000000000000000000009000000000000F9 +:100EF0000000000000001000008800000000080052 +:100F00000800000000200000000000000800800031 +:100F10000000000000000000008800000000022027 +:100F200008000000080000000000000000000000B1 +:100F30000000000000000000000000880000000029 +:100F400008900800000011000000000000000000F0 +:100F50000000000000000000000000880000000009 +:100F600008000884000000200000000000000000CD +:100F70000000000000000000000000000000000071 +:100F80000000000000000000000000000000000061 +:100F9000010000000000000001000000000000004F +:100FA000000000000000000001002084000000019B +:100FB0000000000000000000000000000000000031 +:100FC0000000000000000000000000000000000021 +:100FD0000000000000000000000000000000000011 +:100FE0000000000000000000000000000000000001 +:100FF00000000000000000000000000000000000F1 +:1010000000000000000000000000000000000000E0 +:10101000000011002100000000001100210000006C +:101020000000000000000000000009008000000037 +:1010300000080000000000000000000000000000A8 +:1010400000000000000000000000000000000000A0 +:101050000000000000000000000000000000000090 +:101060000000000000000000000000000000000080 +:101070000000000000000000000000000000000070 +:101080000000000000000000000000000000000060 +:1010900000000000004109000003000000410900B9 +:1010A00000030000000000000000000000080080B5 +:1010B000110300000000000000000000000000001C +:1010C0000000000000000000000000000000000020 +:1010D0000000000000000000000000000000000010 +:1010E0000000000000000000000000000000000000 +:1010F00000000000000000000000000000000000F0 +:1011000000000000000000000000000000000000DF +:1011100000000000000000010100000000000001CC +:1011200001000000000000000000000000000000BE +:101130000002010000880000000000000000000024 +:10114000000000000000000000000000000000009F +:10115000000000000000000000000000000000008F +:10116000000000000000000000000000000000007F +:10117000000000000000000000000000000000006F +:10118000000000000000000000000000000000005F +:1011900000000000000000000000A00000000100AE +:1011A00000008800000001000000000000000000B6 +:1011B0000100C088020000000000000000000000E4 +:1011C000000000000000000000000000000000001F +:1011D000000000000000000000000000000000000F +:1011E00000000000000000000000000020000000DF +:1011F00001000000000000000000000000000000EE +:1012000000000000000000000000000000000000DE +:1012100000000000000000000000000000000000CE +:10122000410000000000000020000000000000005D +:101230000000080080808009080000000000000015 +:10124000000000000000000000000000000000009E +:10125000000000000000000000000000000000008E +:1012600000000000000000000000000000008000FE +:101270000000080000000000000000000000000066 +:10128000000000000000000000000000000000005E +:10129000000000000000000000000000000000113D +:1012A000000000000000001100000000000000002D +:1012B000000000000011110000800000000000008C +:1012C000000000000000000000000000000000001E +:1012D000000000000000000000000000000000000E +:1012E00000000000000000000000000000000005F9 +:1012F00000000000000000000000000000000000EE +:1013000000000000000000000000000000000000DD +:1013100000000000000000000000000000000000CD +:1013200000010000000000000001000000000000BB +:10133000000000000000000101000040000000006B +:10134000000000000000000000000000000000009D +:10135000000000000000000000000000000000008D +:10136000000000000000000000000000000000007D +:10137000000000000000000000000000000000006D +:10138000000000000000000000000000000000005D +:10139000000000000000000000000000000000004D +:1013A000000000E00000810A000000E00000810071 +:1013B0000000000000000000000000E007008200C4 +:1013C000000000000000000000000000000000001D +:1013D000000000000000000000000000000000000D +:1013E00000000000000000000000000000000000FD +:1013F0000000000000E0000000000000000000000D +:1014000000000000000000000000000000000000DC +:1014100000000000000000000000000000000000CC +:1014200000000000000000000000000000000000BC +:101430000000000000000000000000000000F0F0CC +:10144000000000000000000000000000000000009C +:10145000000000000000000000000000000000008C +:10146000000000000000000000000000000000007C +:10147000000000000000000000000000000000006C +:10148000000000000000000000000000000000005C +:10149000000000000000000000000000000000004C +:1014A000000000000000000000000000000000003C +:1014B000000000000000000000000000000000002C +:1014C000F0F000000000000000000000000000003C +:1014D000000000000000000000000000000000000C +:1014E00000000000000000000000000000000000FC +:1014F00000000000000000000000000000000000EC +:1015000000000000000000000000000000000000DB +:1015100000000000000000000000000000000000CB +:1015200000000000000000000000000000000000BB +:1015300000000000000000000000000000000000AB +:10154000FF000000FFFF000000000000000000009E +:10155000000000000000000000000000000000008B +:10156000000000000000000000000000000000007B +:10157000000000000000000000000000000000006B +:10158000000000000000000000000000000000005B +:10159000000000000000000000000000000000004B +:1015A000000000000000000000000000000000003B +:1015B000000000000000000000000000000000002B +:1015C0000000FF000000000000000000000000001C +:1015D000000000000000000000000000000000000B +:1015E00000000000000000000000000000000000FB +:1015F00000000000000000000000000000000000EB +:1016000000000000000000000000000000000000DA +:1016100000000000000000000000000000000000CA +:101620000000000000000000000000600006000C48 +:10163000000000600006000C000000000000000038 +:10164000000005002A06054C00A80000000000006C +:10165000000000000000000000000000000000008A +:10166000000000000000000000000000000000007A +:101670000000000000000000000000000061000603 +:10168000000D00000000000000000000000000004D +:10169000000000000000000000000000000000004A +:1016A000000000000000000000000000000000003A +:1016B000FFFF000000000000FFFF0000000000002E +:1016C000000000000000FF0000FF0000000000001C +:1016D000000000000000000000000000000000000A +:1016E00000000000000000000000000000000000FA +:1016F00000000000000000000000000000000000EA +:1017000000000000000000000000000000000000D9 +:1017100000000000000000000000000000000000C9 +:1017200000000000000000000000000000000000B9 +:1017300000000000000000000000000000000000A9 +:101740000000000000000000FF0000FF000000009B +:101750000000000000000000000000000000000089 +:101760000000000000000000000000000000000079 +:101770000000000000000000000000000000000069 +:101780000000000000000000000000000000000059 +:101790000000000000000000000000000000000049 +:1017A0000000000000000000000000000000000039 +:1017B00000000000F0F0000000000000F0F0000069 +:1017C000000000000000000000003C3C00FF0000A2 +:1017D0000000000000000000000000000000000009 +:1017E00000000000000000000000000000000000F9 +:1017F00000000000000000000000000000000000E9 +:1018000000000000000000000000000000000000D8 +:1018100000000000000000000000000000000000C8 +:1018200000000000000000000000000000000000B8 +:10183000000000000000F0F0000000000000F0F0E8 +:101840000000000000000000000000003C3C00FF21 +:101850000000000000000000000000000000000088 +:101860000000000000000000000000000000000078 +:101870000000000000000000000000000000000068 +:101880000000000000000000000000000000000058 +:1018900000000000200020002000200000002000A8 +:1018A0002000840020000000000000000000000074 +:1018B0000000210020000000200020000000200087 +:1018C00020002000000000000000000000000000D8 +:1018D0000000200000032000000020002000000085 +:1018E00020002000000000000000000000000000B8 +:1018F0000000000020002000000020002000000068 +:101900002000200000004000000000000000000057 +:1019100010000000000800000000000000000000AF +:1019200000000000000000000000000000000000B7 +:101930000000000010000000000000000000000097 +:101940000000000000000000000000000000000097 +:101950000000000000000000000000000000000087 +:101960000000000000022000000000004100000014 +:101970000000000000400000000000000000000027 +:101980000000000000000000000200000000000055 +:101990000000000000000001000000000000000046 +:1019A0000000000000000000000000000000000037 +:1019B0000000000000000000000000000000000027 +:1019C0000000000000000000000000000000000017 +:1019D0000000000000000000000000000000000007 +:1019E00000000000020000000000000000000000F5 +:1019F00000000000000000000000000000000000E7 +:101A000000000000000000000000000000000000D6 +:101A100000000000000000000000000000000000C6 +:101A200000000000000000000000000000000000B6 +:101A30000000000000100000000000000000000096 +:101A40000000000000000000000000000000000096 +:101A50000000000000000000000000000000000086 +:101A60000000000000000000000000000000000076 +:101A70000000000000000000000000000000000066 +:101A80000000000000000000030000000000000053 +:101A90000000000000000000000000000000000046 +:101AA0000000000000000000000000000000000036 +:101AB0000000000000000000000001000000000025 +:101AC00000000000000000410000000000000000D5 +:101AD00000000000000000000000012100000000E4 +:101AE0000000C000000000410000000000410000B4 +:101AF00000000000000000000000000011090000CC +:101B000000000000000000000000A0000000000035 +:101B100000080000000000000000000000090000B4 +:101B200000000000000000000000000000000000B5 +:101B30000000000000000000000000002000000085 +:101B40000000000000000000000000000000000095 +:101B50000000000000C000000000000020000000A5 +:101B60000000000000000000000000000000000075 +:101B70000000000000000000000000000000A000C5 +:101B80000000000000000000000000000000000055 +:101B90000000000000000000000000000000000045 +:101BA00082008200820082000000820082008200A7 +:101BB0008240820082008200000082008200820057 +:101BC0008200820082008200000082008200820087 +:101BD000000000008200820000008200820082007B +:101BE00000000000000082008200000082008200ED +:101BF000820000000000820082002000820082003B +:101C0000820000000000820082000000820082004A +:101C100082000000000082008200A000820082009A +:101C20008200000000000000000000000000000032 +:101C300000000000000000000000000000000000A4 +:101C40000000000000000000000000000000400054 +:101C5000000008004000000000000000000000003C +:101C60000000000000000000000000000000000074 +:101C70000000000000000000000000000000000064 +:101C80000000000000000000000000000000000054 +:101C90000000000000004000000000000000000004 +:101CA00000000000080000000000A0000000080084 +:101CB0000000000000000000000000000000002103 +:101CC00000000000080000000000A0000000080064 +:101CD0000000000000000000000000000000000004 +:101CE000000010000000080000000000A00000003C +:101CF00008000000000000000000000000000000DC +:101D0000000300000003084100000005A0000000DF +:101D100008000000000000000000000000000000BB +:101D200000000000010000000000000000000000B2 +:101D300000000000000000000000000000000000A3 +:101D40000000000000C000000000000000C0000013 +:101D50000000008400000000000000C000000084BB +:101D600000840000808400000400000000000000E7 +:101D70000000000000000000000000000000000063 +:101D80000000000000000000000000000000000053 +:101D900000000000000000000090000000000000B3 +:101DA00000000000000020000000080008000800FB +:101DB0000000A0000800000000000000000000007B +:101DC00000000000000008000000080008000800F3 +:101DD0000000A00008000000000000000002000059 +:101DE00000210000000008020000000200020800BC +:101DF00008020000000008000000000000000000D1 +:101E00000000000400050000080000000021080098 +:101E100008008200000008040000400000000000EC +:101E20000000000000210020080000000000000069 +:101E300000000000000000000000000000000000A2 +:101E40000000000000000000000000000000000092 +:101E50000000000000000000000000000000000082 +:101E60000000000000000000000000000000000072 +:101E70000000000000000000000000000000000062 +:101E80000000000000000000000000000000000052 +:101E90000000000000000000000000000000000042 +:101EA0000000000000000000000000000001000130 +:101EB000000100C00001000100C00121010041013A +:101EC000008200100001000100C0000000010001BC +:101ED000000100C00001000100C00121010041011A +:101EE000008200080001000100C0000000000001A5 +:101EF0000001000100C00001000100C0012101003B +:101F0000010100A000040001000100C00000000168 +:101F10000001000100C00001000100C00121010119 +:101F20000501008200820001000100C000000041A4 +:101F30000041004100C000410041008510412041A6 +:101F40000241008000800041004100C000000041CB +:101F50000041004100C000410041008510412009BE +:101F60000241008000800041004100C000000000EC +:101F700000410041004100C0004100410085104186 +:101F800020410241000000000041004100C000006B +:101F900000410041004100C0004100410085104166 +:101FA00020100241000000800041004100C00000FC +:101FB00041000300000000804100C0000000050057 +:101FC0000800A10000108800C100C100002000002E +:101FD00041000300000000804100C0000000050037 +:101FE0000800A1800020A0004100C1000000000006 +:101FF000000341000300000000804100C000000019 +:1020000005000200A100004091004100C100000055 +:10201000000041000300000000804100C0000000FB +:1020200005000200A1000000C0004100C100000046 +:10203000000001000100000000C00100C00000001D +:102040000000200004C00041C0004100C100004168 +:10205000400001000100000000C00100C0000000BD +:102060000000200004400041C1009100C100004078 +:102070004000000001000100000000C00100C0009D +:1020800000000000030008840041C0009100C1006E +:102090000040400001000100000000C00100C0003D +:1020A00000000000030008C00040C1009100C10012 +:1020B0000040400000C00001C0C10000000000015D +:1020C00000C0A0030041000100C1010000000001A8 +:1020D0000000000000C00001C0C1000000000001BD +:1020E00000C002030041000100C100000000000127 +:1020F00000000000000000C00001C0C1000000009E +:10210000000100C004020011000100C10100000034 +:1021100000010000000000C00001C0C1000000007C +:10212000000100C084030041000108C1010000005B +:102130000001000000000080004180C1000000009C +:102140000041008300820041004100C120000000E6 +:102150000041004000000080004180C100000000FC +:102160000041008300820041004100C100000000E6 +:1021700000410040000000000080004180C10000DC +:10218000000000410083009000C1004100C1200018 +:1021900000000041004000000080004180C10000BC +:1021A000000000410083008200C1004180C1200086 +:1021B0000000004100400000C100800080C100001C +:1021C0004100800002004100C14180008005000004 +:1021D0004100000080004100C100800080C100007B +:1021E0004100800002004100C14100008005000064 +:1021F00041000000800041000000C100800080C15B +:1022000000004100800002004100C1C18000800543 +:1022100000004100000080004100C100800080C13A +:1022200000004100800002004100C1C18000800523 +:1022300000004100000080004100C1004000C0C11A +:10224000000001000200C1000100C1838200C00043 +:10225000000001000000C0000100C1004000C0C13A +:10226000000001000200C1000100C183C000C000E5 +:10227000000001000000C00001000000C10040009B +:10228000C0C1000001000200C1000100C1098200BC +:10229000C000000001000000C0000100C1004000BB +:1022A000C0C1000001000200C1000100C1058200A0 +:1022B000C000000001000000C0000100000000009C +:1022C00000000042000000000000000081120048F1 +:1022D00007004800000000000000000000000000AF +:1022E00000000042000000000000000081120048D1 +:1022F000070048000000000000000000000000008F +:1023000000000000004200000000000000008112F8 +:102310000048070048000000000000000000000026 +:1023200000000000004200000000000000008112D8 +:102330000048070048000000000000000000000006 +:10234000000000000000000000000000000000008D +:10235000000000000000000000000000000000007D +:10236000000000000000000000000000000000006D +:10237000000000000000000000000000000000005D +:10238000000000000000000000000000000000004D +:10239000000000000000000000000000000000003D +:1023A000000000000000000000000000000000002D +:1023B000000000000000000000000000000000001D +:1023C000000000000000000000000000000000000D +:1023D00000000000000000000000000000000000FD +:1023E00000000000000000000000000000000000ED +:1023F00000000000000000000000000000000000DD +:1024000000000000000000000000000000000000CC +:1024100000000000000000000000000000000000BC +:1024200000000000000000000000000000000000AC +:10243000000000000000000000000000000000009C +:102440000000757B0000000000000000000000009C +:10245000000000000000000000000000000000007C +:10246000DEAE757B000000000000000000000000F0 +:10247000000000000000000000000000000000005C +:10248000DEAE0000757B00000000000000000000D0 +:10249000000000000000000000000000000000003C +:1024A0000000DEAE757B00000000000000000000B0 +:1024B000000000000000000000000000000000001C +:1024C0000000DEAE60C60300000000000000003126 +:1024D000E0000000000000000C0000000000000010 +:1024E00000C0630660C60300000000000000003169 +:1024F000E0000000000000000C00000000000000F0 +:1025000000C06306000060C6030000000000000079 +:102510000031E0000000000000000C00000000009E +:10252000000000C0630660C6030000000000000059 +:102530000031E0000000000000000C00000000007E +:10254000000000C063060000000000008800880052 +:10255000000020000000000000000000200000003B +:10256000000000000000000000000000200000004B +:10257000000020000000000000000000200000001B +:1025800000000000880000010000000000002000A2 +:1025900000000000200000000000400010002000AB +:1025A00000000000000020000000000000002000EB +:1025B00000000000200000000000000020002000BB +:1025C00000000000000020000000000000000000EB +:1025D00000000000000000000000000000000000FB +:1025E00000000000000000000000000000020000E9 +:1025F00000000000000200000000000005000000D4 +:1026000005000500000000000000000000000002BE +:102610000000004010004000100000001000000208 +:1026200000000000400040000000000040004000AA +:10263000000040004000400000004020000040003A +:102640000000404005000000000000000200000003 +:10265000000000000000000000000000000000007A +:10266000000000000000000000000000000000006A +:10267000000000000000000000000000000000005A +:10268000000000000000000000000000000000004A +:10269000000000000000000000000000000000003A +:1026A00000000040000000000000000000000000EA +:1026B000000000000000000000000000000000001A +:1026C000000000000000000000000000000000000A +:1026D00000000000000000000000000000000000FA +:1026E00000000000000000000000000000000000EA +:1026F00000000000000000000000000000000000DA +:1027000000000000000000000000000000000000C9 +:1027100000000000000000000000000000000000B9 +:1027200000000000000000000000000000000000A9 +:102730000000000000000000000000000000000099 +:102740000000000000000010050000000000000074 +:102750000000000000000000000000000000000079 +:102760000000000000000000000000000000000069 +:102770000000000000000000000000000000000059 +:102780000000000000001000000000000000000039 +:1027900090000000000000000000000000000000A9 +:1027A0000000000000000000000000000000000029 +:1027B0000000000000000000000000000000000019 +:1027C0000000000000000000000000000000000009 +:1027D00000000000000003000300000000000000F3 +:1027E00000000000000000000000000000000000E9 +:1027F00000000000000008000800000000000000C9 +:102800000000000000000000800000000000000048 +:1028100000000000000000000800000000000400AC +:102820000000000000000000001000000000000098 +:102830000000000000000000080000000000000090 +:102840000000000000000000000000000000000088 +:102850000000000000000000000000000000000078 +:102860000000000000000000000000000040000028 +:102870000000000000000000000000000000000058 +:102880000400000000000000000000000000010043 +:1028900000800000000000000000000000000000B8 +:1028A0000000000000000000000000000000000028 +:1028B0000000000000000000000000000000000018 +:1028C0000000000000000000000000000000000008 +:1028D00000000000000000000000000000000000F8 +:1028E00000000000000000000000000000000000E8 +:1028F00000000000000000000000000000000000D8 +:102900000000000000000000000000000040000087 +:102910002000000400000000000000000000000093 +:1029200000000000000000000000000000000000A7 +:102930000000000000000000000000000000000097 +:102940000000000000000000000000000000000087 +:102950000000000000000000000000000000000077 +:102960000000000000000000000000000000000067 +:102970000000000000000000000000000000000057 +:1029800000000000000000000000000090000000B7 +:102990000000000000000000000000000000000037 +:1029A0000000000000000000000000000000000027 +:1029B0000000000000000000000000000000000017 +:1029C0000000000000000000000000000000000007 +:1029D00000000000000000000000000000000000F7 +:1029E00000000000080000000000080000000000D7 +:1029F00000000000000000000000000000000000D7 +:102A000000000000080000000000000000000000BE +:102A100000000000000003000000000000000000B3 +:102A2000000000000000080000000000000000009E +:102A30000000000800000000080000000000000086 +:102A4000000000000000080000000400000000007A +:102A5000210000100000000008000000000000003D +:102A60000000000000000000000000000000000066 +:102A70000000000000000000000000000000000056 +:102A80000000000000000000000000000000000046 +:102A90000000000000000000000000000000000036 +:102AA0000000000000000000000000000000000026 +:102AB0000000000000000000000000000000000016 +:102AC0000000000000000000000004000000000002 +:102AD00000000000000000000000000002000000F4 +:102AE00000000000000000000000000000000000E6 +:102AF00000000000000000000000000000000000D6 +:102B000000000000000000000000000000000000C5 +:102B100000000000000000000000020000000000B3 +:102B200000000000000000000000000000000000A5 +:102B30000000000000000000000000000000000095 +:102B40000000000000000000000000000000000085 +:102B50000000000000000000000000000000000075 +:102B60000000000000000000000000000000000065 +:102B70000000000000000000000000000000000055 +:102B80000000000000000000000000000000000045 +:102B90000000000000000100000000000000000034 +:102BA0000000000000000000000000000000000025 +:102BB0000000000000000000000000000000000015 +:102BC0000000000000000000000000000000000005 +:102BD00000000000000000000000000000000000F5 +:102BE00000000000000000000000000000000000E5 +:102BF00000000000000000000000000000000000D5 +:102C000000000000000000000000000000000000C4 +:102C10000000000000000000110021000000000082 +:102C200000000000000000000000000000000000A4 +:102C30000000000000000000000000000000000094 +:102C40000000000000000000000000000000000084 +:102C50000000000000000000000000000000000074 +:102C60000000000000000000000000000000000064 +:102C70000000000000000000000000000000000054 +:102C80000000000000000000000000000000000044 +:102C900000000000000000000000004109000003E7 +:102CA00000800000000000000000000000000000A4 +:102CB0000000000000000000000000000000000014 +:102CC0000000000000000000000000000000000004 +:102CD00000000000000000000000000000000000F4 +:102CE00000000000000000000000000000000000E4 +:102CF00000000000000000000000000000000000D4 +:102D000000000000000000000000000000000000C3 +:102D10000000000000000000000000000089010029 +:102D2000000000880000000000000000000000001B +:102D30000000000000000000000000000000000093 +:102D40000000000000000000000000000000000083 +:102D50000000000000000000000000000000000073 +:102D60000000000000000000000000000000000063 +:102D70000000000000000000000000000000000053 +:102D80000000000000000000000000000000000043 +:102D90000000000000000000000000000000000033 +:102DA000880000000100000000000000000000009A +:102DB0000000000000000000000000000000000013 +:102DC0000000000000000000000000000000000003 +:102DD00000000000000000000000000000000000F3 +:102DE00000000000000000000000000000000000E3 +:102DF00000000000000000000000000000000000D3 +:102E000000000000000000000000000000000000C2 +:102E100000000000000000000000000000000000B2 +:102E20000000000000004100000000000000000061 +:102E30000000000000000000000000000000000092 +:102E40000000000000000000000000000000000082 +:102E50000000000000000000000000000000000072 +:102E60000000000000000000000000000000000062 +:102E70000000000000000000000000000000000052 +:102E80000000000000000000000000000000000042 +:102E90000000000000000000000000000000000032 +:102EA0000000000000110000000000000000000011 +:102EB0000000000000000000000000000000000012 +:102EC0000000000000000000000000000000000002 +:102ED00000000000000000000000000000000000F2 +:102EE00000000000000000000000000000000000E2 +:102EF00000000000000000000000000000000000D2 +:102F000000000000000000000000000000000000C1 +:102F100000000000000000000000000000000000B1 +:102F200000000000000000010000000000000000A0 +:102F30000000000000000000000000000000000091 +:102F40000000000000000000000000000000000081 +:102F50000000000000000000000000000000000071 +:102F60000000000000000000000000000000000061 +:102F70000000000000000000000000000000000051 +:102F80000000000000000000000000000000000041 +:102F90000000000000000000000000000000000031 +:102FA000000000000000000000E00000814100007F +:102FB0000000000000000000000000000000000011 +:102FC0000000000000000000000000000000000001 +:102FD00000000000000000000000000000000000F1 +:102FE00000000000000000000000000000000000E1 +:102FF00000000000000000000000000000000000D1 +:1030000000000000000000000000000000000000C0 +:1030100000000000000000000000000000000000B0 +:1030200000000000000000000000000000000000A0 +:103030000000000000000000000000000000000090 +:103040000000000000000000000000000000000080 +:103050000000000000000000000000000000000070 +:103060000000000000000000000000000000000060 +:103070000000000000000000000000000000000050 +:103080000000000000000000000000000000000040 +:103090000000000000000000000000000000000030 +:1030A0000000000000000000000000000000000020 +:1030B0000000000000000000000000000000000010 +:1030C0000000000000000000000000000000000000 +:1030D00000000000000000000000000000000000F0 +:1030E00000000000000000000000000000000000E0 +:1030F00000000000000000000000000000000000D0 +:1031000000000000000000000000000000000000BF +:1031100000000000000000000000000000000000AF +:10312000000000000000000000000000000000009F +:10313000000000000000000000000000000000008F +:10314000000000000000000000000000000000007F +:10315000000000000000000000000000000000006F +:10316000000000000000000000000000000000005F +:10317000000000000000000000000000000000004F +:10318000000000000000000000000000000000003F +:10319000000000000000000000000000000000002F +:1031A000000000000000000000000000000000001F +:1031B000000000000000000000000000000000000F +:1031C00000000000000000000000000000000000FF +:1031D00000000000000000000000000000000000EF +:1031E00000000000000000000000000000000000DF +:1031F00000000000000000000000000000000000CF +:1032000000000000000000000000000000000000BE +:1032100000000000000000000000000000000000AE +:10322000000000000000000000000000000000009E +:10323000000000000000000000000000000000008E +:10324000000000000000000000000000000000007E +:10325000000000000000000000000000000000006E +:10326000000000000000000000000000000000005E +:10327000000000000000000000000000000000004E +:10328000000000000000000000000000000000003E +:10329000000000000000000000000000000000002E +:1032A000000000000000000000000000000000001E +:1032B000000000400006000C0000000000000000BC +:1032C00000000000000000000000000000000000FE +:1032D00000000000000000000000000000000000EE +:1032E00000000000000000000000000000000000DE +:1032F00000000000000000000000000000000000CE +:1033000000000000000000000000000000000000BD +:1033100000000000000000000000000000000000AD +:10332000000000000000000000000000000000009D +:103330000000000000005555FFFF000000000000E5 +:10334000000000000000000000000000000000007D +:10335000000000000000000000000000000000006D +:10336000000000000000000000000000000000005D +:10337000000000000000000000000000000000004D +:10338000000000000000000000000000000000003D +:10339000000000000000000000000000000000002D +:1033A000000000000000000000000000000000001D +:1033B0000000000000000000555500000000000063 +:1033C00000000000000000000000000000000000FD +:1033D00000000000000000000000000000000000ED +:1033E00000000000000000000000000000000000DD +:1033F00000000000000000000000000000000000CD +:1034000000000000000000000000000000000000BC +:1034100000000000000000000000000000000000AC +:10342000000000000000000000000000000000009C +:10343000000000000000000000000000F0F00000AC +:10344000000000000000000000000000000000007C +:10345000000000000000000000000000000000006C +:10346000000000000000000000000000000000005C +:10347000000000000000000000000000000000004C +:10348000000000000000000000000000000000003C +:10349000000000000000000000000000000000002C +:1034A000000000000000000000000000000000001C +:1034B0000000000000000000000000000000F0F02C +:1034C00000000000000000000000000000000000FC +:1034D00000000000000000000000000000000000EC +:1034E00000000000000000000000000000000000DC +:1034F00000000000000000000000000000000000CC +:1035000000000000000000000000000000000000BB +:10351000000000002000000000000000000000008B +:10352000000000000000000000000000000000009B +:10353000000000000000000000000000000000008B +:10354000000000000001000000000000000000007A +:10355000000000000000000000000000000000006B +:10356000000000000000000000000000000000005B +:10357000000000000000000000000000000000004B +:10358000000000000000000000000000000000003B +:10359000000000000000000000000000000000002B +:1035A000000000000000000000000000000000001B +:1035B000000000000000000000000000000000000B +:1035C00000000000000000000000000000020000F9 +:1035D00000000000000010020000000000000000D9 +:1035E000000000000000000040000000000000009B +:1035F00000000000000000000000000000000000CB +:103600002100000004000000000000000000000095 +:1036100000000000000000000000000000000000AA +:103620000000100000030004000000000000000083 +:103630000200000000000200000000000000000086 +:103640000000000000000000000200000000000078 +:10365000000000000000000000000000000000006A +:10366000000000000000000000000000000000005A +:10367000000000000000000000000000000000004A +:103680000000000002000000000000000000000038 +:10369000000000000000000000000000000000002A +:1036A0000000000080000000000100000000000099 +:1036B0000000000000000200000000000000000008 +:1036C00000000000000000000000000000000000FA +:1036D00000000000000800000000000000000000E2 +:1036E00000000000000000000000000000000000DA +:1036F00000000000000800000000000000000000C2 +:103700000000000000008000000000000000000039 +:1037100000000000000000000000000008000000A1 +:103720000000040000000000000000000000000095 +:103730000000000000080000000000000800000079 +:103740000000000000000000000000000000000079 +:103750000000000000000000000000000000000069 +:103760000000000000000000000000000000000059 +:103770000000000000000000000000000000000049 +:103780000000000000000000000000000000000039 +:103790000000000000000000000000000000000029 +:1037A0000000000000000000000000000000000019 +:1037B0000000000000000000000000000000000009 +:1037C00000000000000000000000000000000000F9 +:1037D00000000000000000000000000000000000E9 +:1037E00000000000000000000000000000000000D9 +:1037F00000000000000000000000000000000000C9 +:1038000000000000000000000000000000000000B8 +:1038100000000000000000000000000000000000A8 +:103820000004000000000000000000000000000094 +:103830000000000000000000000000000000000088 +:1038400000000000000000000000000001000080F7 +:103850000000000000000000000000000000000068 +:103860000000000000000000000000000000000058 +:103870000000000000000000000000000000000048 +:103880000000000000000000000000000000002018 +:103890000020000000000000008800000000000080 +:1038A0000000000000000000000000000000000018 +:1038B0000000000000000000000000000000000008 +:1038C00000000000000000000000000000002000D8 +:1038D00000040000000000000000000000000000E4 +:1038E00000000000000000000000000000000000D8 +:1038F00000000000000000000000000000000000C8 +:1039000000000000000000000000000000000000B7 +:1039100000010001000000000000000000000000A5 +:103920000000000000000000000000000000000097 +:103930000000000000000000000000000000000087 +:103940000000000000000000000090000080000067 +:103950000000000000000000000000000000000067 +:103960000000000000000000000000000000000057 +:103970000000000000000000000000000000000047 +:103980000000000000000000000000000000000037 +:10399000000008000000000000000000000000001F +:1039A0000000000000000000000000000000000017 +:1039B0000000000000000000000000000000000007 +:1039C00000000000000000C00000000000C000086F +:1039D0000000008400000000000000000000000063 +:1039E00000000000000000000000000000000000D7 +:1039F00000000000000000000000000000000000C7 +:103A000000000000000000000000000000000000B6 +:103A10000000000080000000000000000000000026 +:103A20000000000000000000000000000000000096 +:103A30000000000000000000000000000000000086 +:103A40000000000000000000000000000000000076 +:103A50000000000000000000000000000000000264 +:103A60000000000000000000000000000000000056 +:103A70000000000000000000000000000000000046 +:103A80000000000000000000000000000000000036 +:103A90000000000000000000000000000000000026 +:103AA0000000000000000000000000000000000016 +:103AB0000000000000000000000000000000000006 +:103AC00000000000000000000000000000000000F6 +:103AD00000000000000000000000000000000000E6 +:103AE00000000000000000000000000000000000D6 +:103AF00000000000000000000000000000000000C6 +:103B000000000000000000000000000000000000B5 +:103B100000000000000000000000000000000000A5 +:103B20000000000000000000000000000000000095 +:103B30000000000000000100C000000000000000C4 +:103B40000000000000000000000000000000000075 +:103B50000000000001000000000000000000000064 +:103B60000000000000000000000000000000000055 +:103B70000000000000000000000000000000000045 +:103B80000000000000000000000000000000000035 +:103B900000000000000009002000000002000000FA +:103BA0000000000000000000000000000000000015 +:103BB000000000000000000009008000000000007C +:103BC00000000000000000000000000000000000F5 +:103BD00000000000000011002100000000000000B3 +:103BE00000000000000000000000000000000000D5 +:103BF00000000000000000000000000000000000C5 +:103C000000000000000000000000000000000000B4 +:103C1000000000000000000089008000000000009B +:103C20000000000000000000000000000000000094 +:103C30000000000000000000000000000000000084 +:103C40000000000000000000000000000000000074 +:103C50000000000000000000004109000003008097 +:103C60000000000000000000000000000000000054 +:103C70000000000000000000000000000000000044 +:103C80000000000000000000000000000000000034 +:103C900000000000000000000000000000008000A4 +:103CA0008080000000000000000000000000000014 +:103CB0000000000000000000000000000000000004 +:103CC00000000000000000000000000000000000F4 +:103CD00000000000000000000000000101000000E2 +:103CE000008800000000000000000000000000004C +:103CF00000000000000000000000000000000000C4 +:103D000000000000000000000000000000000000B3 +:103D1000000000000000000000000000080000009B +:103D20004000C08200000000000000000000000011 +:103D30000000000000000000000000000000000182 +:103D40000000010100000000000000000000000071 +:103D500000000000000000000000000000008800DB +:103D60000000010000000000000000000000000052 +:103D70000000000000000000000000000000000043 +:103D80000000000000000000000000000000000033 +:103D90000000000000000000000000000000001013 +:103DA0000008840801C000000000000000000000BE +:103DB0000000000000000000000000000000000201 +:103DC0000008001011410000000000000000000089 +:103DD00000000000000000000000000000000000E3 +:103DE0000000000041000000000000000000000092 +:103DF00000000000000000000000000000000000C3 +:103E000000000000000000000000000000000000B2 +:103E100000000000000000000000000000000000A2 +:103E20000080000080802180000000000000000071 +:103E30000000000000000000000000000000000082 +:103E40000000000000000000000000000000000072 +:103E50000000000000000000000000000000000062 +:103E60000000201100000000000000000000000021 +:103E70000000000000000000000000000000000042 +:103E80000000000000000000000000000000000032 +:103E90000000000000000000000000000000000022 +:103EA0000000000000000000000000000000000012 +:103EB0000000000000000000000000000000000002 +:103EC00000000000000000000000000000000000F2 +:103ED00000000000000000000000000000000000E2 +:103EE00000000000010100000000000000000000D0 +:103EF00000000000000000000000000000000000C2 +:103F000000000000000000000000000000000000B1 +:103F100000000000000000000000000000000000A1 +:103F2000000000000000000200000000000000008F +:103F30000000000000000000000000000000000081 +:103F400000000000000000E0000000210000000070 +:103F50000000000000000000000000000000000061 +:103F600000000000000000E00000814100000000AF +:103F70000000000000000000000000000000000041 +:103F80000000000000000000000000000000000031 +:103F90000000000000000000000000000000000021 +:103FA00000000000000000000000430000000000CE +:103FB0000000000000000000000000000000000001 +:103FC00000000000000000000000000000000000F1 +:103FD00000000000000000000000000000000000E1 +:103FE00000000000000000000000000000000000D1 +:103FF00000000000000000000000000000000000C1 +:1040000000000000000000000000000000000000B0 +:1040100000000000000000000000000000000000A0 +:104020000000000000000000000000000000FFFF92 +:104030000000000000000000000000000000000080 +:104040000000000000000000000000000000000070 +:104050000000000000000000000000000000000060 +:104060000000000000000000000000000000000050 +:104070000000000000000000000000000000000040 +:104080000000000000000000000000000000000030 +:104090000000000000000000000000000000000020 +:1040A00000000000000000000000000000009682F8 +:1040B000FBFB00000000000000000000000000000A +:1040C00000000000000000000000000000000000F0 +:1040D00000000000000000000000000000000000E0 +:1040E00000000000000000000000000000000000D0 +:1040F00000000000000000000000000000000000C0 +:1041000000000000000000000000000000000000AF +:10411000000000000000000000000000000000009F +:10412000000000000000000000000000000000008F +:10413000AA001400000000000000000000000000C1 +:10414000000000000000000000000000000000006F +:10415000000000000000000000000000000000005F +:10416000000000000000000000000000000000004F +:10417000000000000000000000000000000000003F +:10418000000000000000000000000000000000002F +:10419000000000000000000000000000000000001F +:1041A000000000000000000000000000000000000F +:1041B0000000AA0014000000000000000000000041 +:1041C000000000000000000000000000000000618E +:1041D00000060008000000000000000000000000D1 +:1041E000000000000000000000000000000000408F +:1041F0000006000C000000000000000000000000AD +:1042000000000000000000000000000000000000AE +:10421000000000000000000000000000000000009E +:10422000000000000000000000000000000000008E +:1042300000000000059000A8000000000000000041 +:10424000000000000000000000000000000000006E +:1042500000000000FF0FAA3C00000000000000006A +:10426000000000000000000000000000000000004E +:104270000000FF00FFFF0000000000000000000041 +:10428000000000000000000000000000000000002E +:10429000000000000000000000000000000000001E +:1042A000000000000000000000000000000000000E +:1042B00000000000000000000000000000000000FE +:1042C00000000000000000000000000000000000EE +:1042D000000000000000000FAA3C000000000000E9 +:1042E00000000000000000000000000000000000CE +:1042F00000000000FF0000000000000000000000BF +:1043000000000000000000000000000000000000AD +:10431000000000000000000000000000000000009D +:10432000000000000000000000000000000000008D +:10433000000000000000000000000000000000007D +:10434000000000000000000000000000000000006D +:10435000000000000000000000000000000000005D +:10436000000000000000000000000000000000004D +:104370000000000000000000F0F00000000000005D +:10438000000000000000000000000000000000002D +:10439000000000000000000000000000000000001D +:1043A000000000000000000000000000000000000D +:1043B00000000000000000000000000000000000FD +:1043C00000000000000000000000000000000000ED +:1043D00000000000000000000000000000000000DD +:1043E00000000000000000000000000000000000CD +:1043F00000000000000000000000F0F000000000DD +:1044000000000000000000000000000000000000AC +:10441000000000000000000000000000000000009C +:10442000000000000000000000000000000000008C +:10443000000000000000000000000000000000007C +:10444000000000000000000000000000000000006C +:10445000000000000000000000000000000000005C +:10446000000000000000000000000000000000004C +:10447000000000000000000000000000000000003C +:10448000000000000000000000000000000000002C +:10449000000000000000000000000000000000001C +:1044A000000000000000000000000000000000000C +:1044B00000000000000000000000100000000000EC +:1044C00000000000000000000000000000000000EC +:1044D00000000000000000000000000000000000DC +:1044E00000000000000000020000000000000000CA +:1044F000000000000000000000000000400040003C +:104500000000000000001000000200000000400059 +:104510004000000000004000400200004000400059 +:10452000400000004000000040000000400040004B +:1045300000000000000040004000000040000000BB +:10454000400000000000000000000000000000002B +:10455000000000000000000000000000000000005B +:10456000000000000000000000000000000000004B +:10457000000000000000000000000000000000003B +:10458000000000000000000000000000001000001B +:10459000000000000000000000000000000000001B +:1045A000000000000000000000000000000000000B +:1045B00000000000000000000000000000000000FB +:1045C00000000000000000000000000000000000EB +:1045D00000000000000000000000000000000000DB +:1045E00000000000000000000000000000000000CB +:1045F00000000000000000000000020000000000B9 +:1046000000000000000000000000000000080000A2 +:104610000000000000080000000000000000000092 +:104620000000000000000000000000000008000082 +:104630000000000000080000000000000000000072 +:10464000000000000000000000000000000000006A +:10465000000000000000000000000000000000005A +:10466000000000000000000000000000000000004A +:104670000000000000080000000000000000000032 +:10468000000000000000000000000000000000002A +:10469000000000000000000000000000000000001A +:1046A000000000000000000000000000000000000A +:1046B00000000000000000000000000000000000FA +:1046C00000000000000000000000000000000000EA +:1046D00000000000000000000000000000000000DA +:1046E00000000000000000000000000000000008C2 +:1046F00000000000000000000000000000000000BA +:1047000000000000000000000000000000000000A9 +:104710000000000000000000000000000000000099 +:104720000000000000000000000000000000000089 +:104730000000000000000000000000000000000079 +:104740000000000000000000000000000000000069 +:104750000000000000000000000000000000000059 +:104760000000000000400000000000000000000009 +:104770000000000000000000000000000000000039 +:104780000000000000000000000000000000000029 +:104790000000000000000000000000000000000019 +:1047A0000000000000000000000000000000000009 +:1047B00000000000000000000000000000000000F9 +:1047C00000000000000000000000000000000000E9 +:1047D00000000000000000000000000000000000D9 +:1047E00000000000000000000000000000000000C9 +:1047F00000000000000000000000000000000000B9 +:1048000000000000000000000000000000000000A8 +:104810000000000000000000000000000000000098 +:104820000000000000000000000000000000000088 +:104830000000000000000000000000000000000078 +:104840000000000000000000000000000000000068 +:104850000000000000000000000000000000000058 +:104860000000000000000000000000000000000048 +:104870000000000000000000000000000000000038 +:104880000000000000000000000000000000000028 +:104890000000000000000000000000000000000018 +:1048A0000000000000000000000000000000000008 +:1048B00000000000000000000000000000000000F8 +:1048C00000000000000000000000000000000000E8 +:1048D00000000000000000000000000000000000D8 +:1048E000000000000000000000000000000000A028 +:1048F00000000000000000000000000000000000B8 +:10490000000000000000000000C000000000008463 +:104910000000000000000000000000000000000097 +:104920000000000000000000000000000000000087 +:104930000000000000000000000000000000000077 +:104940000000000000000000000000000000000067 +:104950000000000000000000000000000000000057 +:104960000000000000000000000000000000000047 +:104970000000000000000000000000000000000037 +:104980000000000000000000000000000000000027 +:104990000000000000000000000000020000000015 +:1049A0000000000000000000000000000000000007 +:1049B00000000000000000000000000000000000F7 +:1049C00000000000000000000000000000000000E7 +:1049D00000000000000000000000000000000000D7 +:1049E00000000000000000000000000000000000C7 +:1049F00002040000000000000000000000000000B1 +:104A000000000000000000000000000000000000A6 +:104A10000000000000000000000000000000000096 +:104A20000000000000000000000000000000000086 +:104A30000000000000000000000000000000000076 +:104A40000000000000000000000000000000000066 +:104A50000000000000000000000000000000000056 +:104A60000000000000000000000000000000000046 +:104A70000000000000000000000000000000000036 +:104A80000000000000000000000000000000000026 +:104A90000000000000000000000000000000000016 +:104AA0000000000000000000000000000000000006 +:104AB00000000000000000000000000000000000F6 +:104AC00000000000000000000000000000000000E6 +:104AD00000000000000000000000000000000000D6 +:104AE00000000000000000000000000000000000C6 +:104AF00000000000000000000000000000000000B6 +:104B000000000000000000000000000000000000A5 +:104B10000000000000000000000000000000000095 +:104B20000000000000000000000000000000000085 +:104B30000000000000000000000000000000000075 +:104B40000000000000000000000000000000000065 +:104B50000000000000000000000000000000000055 +:104B60000000000000000000000000000000000045 +:104B70000000000000000000000000000000000035 +:104B80000000000000000000000000000000000025 +:104B90000000000000000000000000000000000015 +:104BA0000000000000000000000000000000000005 +:104BB00000000000000000000000000000000000F5 +:104BC00000000000000000000000000000000000E5 +:104BD00000000000000000000000000000000000D5 +:104BE00000000000000000000000000000000000C5 +:104BF00000000000000000000000000000000000B5 +:104C000000000000000000000000000000000000A4 +:104C10000000000000000000000000000000000094 +:104C20000000000000000000000000000000000084 +:104C30000000000000000000000000000000000074 +:104C40000000000000000000000000000000000064 +:104C50000000000000000000000000000000000054 +:104C60000000000000000000000000000000000044 +:104C70000000000000000000000000000000000034 +:104C80000000000000000000000000000000000024 +:104C90000000000000000000000000000000000014 +:104CA0000000000000000000000000000000000004 +:104CB00000000000000000000000000000000000F4 +:104CC00000000000000000000000000000000000E4 +:104CD00000000000000000000000000000000000D4 +:104CE00000000000000000000000000000000000C4 +:104CF00000000000000000000000000000000000B4 +:104D000000000000000000000000000000000000A3 +:104D10000000000000000000000000000000000093 +:104D20000000000000000000000000000000000083 +:104D30000000000000000000000000000000000073 +:104D40000000000000000000000000000000000063 +:104D50000000000000000000000000000000000053 +:104D60000000000000000000000000000000000043 +:104D70000000000000000000000000000000000033 +:104D80000000000000000000000000000000000023 +:104D90000000000000000000000000000000000013 +:104DA0000000000000000000000000000000000003 +:104DB00000000000000000000000000000000000F3 +:104DC00000000000000000000000000000000000E3 +:104DD00000000000000000000000000000000000D3 +:104DE00000000000000000000000000000000000C3 +:104DF00000000000000000000000000000000000B3 +:104E000000000000000000000000000000000000A2 +:104E10000000000000000000000000000000000092 +:104E20000000000000000000000000000000000082 +:104E30000000000000000000000000000000000072 +:104E40000000000000000000000000000000000062 +:104E50000000000000000000000000000000000052 +:104E60000000000000000000000000000000000042 +:104E70000000000000000000000000000000000032 +:104E80000000000000000000000000000000000022 +:104E90000000000000000000000000000000000012 +:104EA0000000000000000000000000000000000002 +:104EB00000000000000000000000000000000000F2 +:104EC00000000000000000000000000000000000E2 +:104ED00000000000000000000000000000000000D2 +:104EE00000000000000000000000000000000000C2 +:104EF00000000000000000000000000000000000B2 +:104F000000000000000000000000000000000000A1 +:104F10000000000000000000000000000000000091 +:104F20000000000000000000000000000000000081 +:104F30000000000000000000000000000000000071 +:104F40000000000000000000000000000000000061 +:104F50000000000000000000000000000000000051 +:104F60000000000000000000000000000000000041 +:104F70000000000000000000000000000000000031 +:104F80000000000000000000000000000000000021 +:104F90000000000000000000000000000000000011 +:104FA0000000000000000000000000000000000001 +:104FB00000000000000000000000000000000000F1 +:104FC00000000000000000000000000000000000E1 +:104FD00000000000000000000000000000000000D1 +:104FE00000000000000000000000000000000000C1 +:104FF00000000000000000000000000000000000B1 +:1050000000000000000000000000000000000000A0 +:105010000000000000000000000000000000000090 +:105020000000000000000000000000000000000080 +:105030000000000000000000000000000000000070 +:105040000000000000000000000000000000000060 +:105050000000000000000000000000000000000050 +:105060000000000000000000000000000000000040 +:105070000000000000000000000000000000000030 +:105080000000000000000000000000000000000020 +:105090000000000000000000000000000000000010 +:1050A0000000000000000000000000000000000000 +:1050B00000000000000000000000000000000000F0 +:1050C00000000000000000000000000000000000E0 +:1050D00000000000000000000000000000000000D0 +:1050E00000000000000000000000000000000000C0 +:1050F00000000000000000000000000000000000B0 +:10510000000000000000000000000000000000009F +:10511000000000000000000000000000000000008F +:10512000000000000000000000000000000000007F +:10513000000000000000000000000000000000006F +:10514000000000000000000000000000000000005F +:10515000000000000000000000000000000000004F +:10516000000000000000000000000000000000003F +:10517000000000000000000000000000000000002F +:10518000000000000000000000000000000000001F +:10519000000000000000000000000000000000000F +:1051A00000000000000000000000000000000000FF +:1051B00000000000000000000000000000000000EF +:1051C00000000000000000000000000000000000DF +:1051D00000000000000000000000000000000000CF +:1051E00000000000000000000000000000000000BF +:1051F00000000000000000000000000000000000AF +:10520000000000000000000000000000000000009E +:10521000000000000000000000000000000000008E +:10522000000000000000000000000000000000007E +:10523000000000000000000000000000000000006E +:10524000000000000000000000000000000000005E +:10525000000000000000000000000000000000004E +:10526000000000000000000000000000000000003E +:10527000000000000000000000000000000000002E +:10528000000000000000000000000000000000001E +:10529000000000000000000000000000000000000E +:1052A00000000000000000000000000000000000FE +:1052B00000000000000000000000000000000000EE +:1052C00000000000000000000000000000000000DE +:1052D00000000000000000000000000000000000CE +:1052E00000000000000000000000000000000000BE +:1052F00000000000000000000000000000000000AE +:10530000000000000000000000000000000000009D +:10531000000000000000000000000000000000008D +:10532000000000000000000000000000000000007D +:10533000000000000000000000000000000000006D +:10534000000000000000000000000000000000005D +:10535000000000000000000000000000000000004D +:10536000000000000000000000000000000000003D +:10537000000000000000000000000000000000002D +:10538000000000000000000000000000000000001D +:10539000000000000000000000000000000000000D +:1053A00000000000000000000000000000000000FD +:1053B00000000000000000000000000000000000ED +:1053C00000000000000000000000000000000000DD +:1053D00000000000000000000000000000000000CD +:1053E00000000000000000000000000000000000BD +:1053F00000000000000000000000000000000000AD +:10540000000000000000000000000000000000009C +:10541000000000000000000000000000000000008C +:10542000000000000000000000000000000000007C +:10543000000000000000000000000000000000016B +:10544000000000000000000000000000000000005C +:10545000000000000000000000000000000000004C +:10546000000000000000000000000000000000003C +:10547000000000000000000000000000000000002C +:10548000000000000000000000000000000000001C +:10549000000000000000000000000000000000000C +:1054A00000000000000000000000000000000000FC +:1054B00000000000000000000000000000000002EA +:1054C00000000000000000000000000000000002DA +:1054D000000040000000000000000000000000008C +:1054E00000000000000000000000000000000000BC +:1054F00000000040000040000000004000004000AC +:10550000000000000000000000000000000000009B +:10551000001000000000000000000000000000007B +:10552000000000000000000000000000000000007B +:10553000000000000000000000000000000000006B +:105540000000000200000000000000000000020057 +:10555000000000000000000000000000000000004B +:10556000000000000000000000000000000000003B +:1055700000000000000000000000000040000000EB +:105580000041004100000000000000000000000099 +:10559000000000000000000000000000000000000B +:1055A00000000000000000000000000000000000FB +:1055B00000000000000000000000000000000000EB +:1055C00004000000000000000000000000000000D7 +:1055D00000000000000000000000000000000000CB +:1055E00000000000000000000000000000000000BB +:1055F000000000000000000000000000000080002B +:10560000000000000000000000000000000000009A +:10561000000000100000000000000000000000007A +:10562000000000000000000000000000000000007A +:10563000000000000000000000000000000000006A +:10564000000000000000000000000000000000005A +:10565000000000000000000000000000000000004A +:10566000000000000000000000000000000000003A +:10567000000000000000000000000000000000002A +:1056800020000000200000000000000000000000DA +:10569000000000000000000000000000000000000A +:1056A00000000000000000000000000000000000FA +:1056B00000000000000000000000000000000000EA +:1056C00000000000000000000000000000000000DA +:1056D00000000000000000000000000000000000CA +:1056E00000000000000000000000000000000000BA +:1056F00000000000000000000000000000000000AA +:105700000000800009000000000000000000000010 +:105710000000000000000000000000400000000049 +:105720000100000000000000010000000000000077 +:105730000000000000000000000000000000000069 +:105740000000000000000000000000000000000059 +:105750000000000000000000000000000000000049 +:105760000000000000000000000000000000000039 +:105770000000000000000000000000000000000029 +:105780000000000000000000000000000000000019 +:105790000000000000000000000000000001000008 +:1057A00000000400000000000000040000000000F1 +:1057B00000000000000000000000000000000000E9 +:1057C00000000000000000000000000000000000D9 +:1057D00000000000000000000000000000000000C9 +:1057E00000000000000000000000000000000000B9 +:1057F00000000000000000000000000000000000A9 +:105800000000000000000000000800000000000090 +:105810000000000000000000000000000000000088 +:105820000000002000000000000000200000000038 +:105830000000000000000000000000000000000068 +:105840000000000000000000000000000000000058 +:105850000000000000000000000000000000000048 +:105860000000000000000000000000000000000038 +:105870000000000000000000000000000000000028 +:105880000000000000000000000000000000000018 +:105890000000000000000000000000000000000008 +:1058A00000000000000100000000000000010000F6 +:1058B00000000000000000000000000000000000E8 +:1058C00000000000000000000000000000000000D8 +:1058D00000000000000000000000000000000000C8 +:1058E00000000000000000000000000000000000B8 +:1058F00000000000000000000000000000000000A8 +:105900000000000000000000000000000000000097 +:105910000000000000000000000000000000000087 +:1059200000000000000000000000008000000000F7 +:105930000000000000000000000000000000000067 +:105940000000000000000000000000000000000057 +:105950000000000000000000000000000000000047 +:105960000000000000000000000000000000000037 +:105970000000000000000000000000000000000027 +:105980000000000000000000000000000000000017 +:105990000000000000000000000000000000000007 +:1059A00000000000000000000000000011400000A6 +:1059B00000000000000000000000000000000000E7 +:1059C00000000000000000000000000000000000D7 +:1059D00000000000000000000000000000000000C7 +:1059E00000000000000000000000000000000000B7 +:1059F00000000000000000000000000000000000A7 +:105A00000000000000000000000000000000000096 +:105A10000000000000000000000000000000000086 +:105A200000000000000000009000000000000000E6 +:105A3000900000C000000000000000000000000016 +:105A40000000000000000000000000000000000056 +:105A50000000000000000000000000000000000046 +:105A60000000000000000000000000000000000036 +:105A70000000000000000000000000000000000026 +:105A80000000000000000000000000000000000016 +:105A90000001000100010000000000000000000003 +:105AA0000000000000000000110080000000000065 +:105AB0001100800000000000000000000000000055 +:105AC00000000000000000000000000000000000D6 +:105AD00000000000000000000000000000000000C6 +:105AE00000000000000000000000000000000000B6 +:105AF00000000000000000000000000000000000A6 +:105B00000000000000000000000000000000000095 +:105B10000000001100100204000900000000000055 +:105B200000000000000000000000000000800000F5 +:105B300000800000008000000080000000000000E5 +:105B40000000000000000000000000000000000055 +:105B50000000000000000000000000000000000045 +:105B60000000000000000000000000000000000035 +:105B70000000000000000000000000000000000025 +:105B80000000000000000000000000000000000015 +:105B900000000000000900000000000000000000FC +:105BA00000000000000000000000000000000020D5 +:105BB000000000C000000020000000C00000000045 +:105BC00000000000000000000000000000000000D5 +:105BD00000000000000000000000000000000000C5 +:105BE00000000000000000000000000000000000B5 +:105BF00000000000000000000000000000000000A5 +:105C00000000000000000000000000000000000094 +:105C10000000000000000000000000000000000084 +:105C200000000000000000000000000000008500EF +:105C30000088880001000100008888000100000041 +:105C40000000000000000000000000000000000054 +:105C50000000000000000000000000000000000044 +:105C60000000000000000000000000000000000034 +:105C70000000000000000000000000000000000024 +:105C80000000000000000000000000000000000014 +:105C90000000000000000000000000000100010002 +:105CA00000000000000000000000000000000000F4 +:105CB0004100008000000900410000800000090050 +:105CC00000000000000000000000000000000000D4 +:105CD00000000000000000000000000000000000C4 +:105CE00000000000000000000000000000000000B4 +:105CF00000000000000000000000000000000000A4 +:105D00000000000000000000000000000000000093 +:105D1000000000000000000000000000000005007E +:105D2000040000000000000000000000000000006F +:105D30000000001100000080000000110000008041 +:105D40000000000000000000000000000000000053 +:105D50000000000000000000000000000000000043 +:105D60000000000000000000000000000000000033 +:105D70000000000000000000000000000000000023 +:105D80000000000000000000000000000000000013 +:105D90000000000000000000000000000000000003 +:105DA00000000000000000000000000000000000F3 +:105DB00000000000000100000040000000010000A1 +:105DC0000040000000000000000000000000000093 +:105DD00000000000000000000000000000000000C3 +:105DE00000000000000000000000000000000000B3 +:105DF00000000000000000000000000000000000A3 +:105E00000000000000000000000000000000000092 +:105E10000000000000000000000000000000000082 +:105E20000000000000000000000000000000000072 +:105E300000000000000000000000070082210000B8 +:105E400000000700822100000000000000000000A8 +:105E50000000000000000000000000000000000042 +:105E60000000000000000000000000000000000032 +:105E70000000000000000000000000000000000022 +:105E80000000000000000000000000000000000012 +:105E90000000000000000000000000000000000002 +:105EA000000000C80000000000000000000000002A +:105EB000000000000000000000000000F0F0000002 +:105EC00000000000F0F000000000000000000000F2 +:105ED00000000000000000000000000000000000C2 +:105EE00000000000000000000000000000000000B2 +:105EF00000000000000000000000000000000000A2 +:105F00000000000000000000000000000000000091 +:105F10000000000000000000000000000000000081 +:105F20000000000000000000000000000000000071 +:105F30000000000000000000000000000000F0F081 +:105F4000000000000000F0F0000000000000000071 +:105F50000000000000000000000000000000000041 +:105F60000000000000000000000000000000000031 +:105F70000000000000000000000000000000000021 +:105F80000000000000000000000000000000000011 +:105F90000000000000000000000000000000000001 +:105FA00000000000000000000000000000000000F1 +:105FB0000000000000000000000000000000FFFFE3 +:105FC0000000FFFF00000F0F0000FFFF00000000B7 +:105FD00000000000000000000000000000000000C1 +:105FE00000000000000000000000000000000000B1 +:105FF00000000000000000000000000000000000A1 +:106000000000000000000000000000000000000090 +:106010000000000000000000000000000000000080 +:106020000000000000000000000000000000000070 +:106030000000000000000000000000000000000060 +:1060400000000000000000000F0F00000000000032 +:106050000000000000000000000000000000000040 +:106060000000000000000000000000000000000030 +:106070000000000000000000000000000000000020 +:106080000000000000000000000000000000000010 +:106090000000000000000000000000000000000000 +:1060A00000000000000000000000000000000000F0 +:1060B00000000000000000000000000000000000E0 +:1060C00005002A00054000A805002A00054000A898 +:1060D00000000000000000000000000000000000C0 +:1060E00000000000000000000000000000000000B0 +:1060F00000000000000000000000000000000000A0 +:10610000000000000000000000000000000000008F +:10611000000000000000000000000000000000007F +:106120000000000000000000000000610007000DFA +:10613000000000000000000000000000000000005F +:10614000000000000000000000000000000000004F +:10615000000000000000000000000000000000003F +:10616000000000000000000000000000000000002F +:10617000000000000000000000000000000000001F +:10618000000000000000000000000000000000000F +:1061900000000000000000000000000000000000FF +:1061A00000000000000000000000000000000000EF +:1061B00000000000000000000000000000000000DF +:1061C00000000000000000000000000000000000CF +:1061D00000000000000000000000000000000000BF +:1061E00000000000000000000000000000000000AF +:1061F000000000000000000000000000000000009F +:10620000000000000000000000000000000000008E +:10621000000000000000000000000000000000007E +:10622000000000000000000000000000000000006E +:10623000000000000000000000000000000000005E +:10624000000000000000000000000000000000004E +:10625000000000000000000000000000000000003E +:10626000000000000000000000000000000000002E +:10627000000000000000000000000000000000001E +:10628000000000000000000000000000000000000E +:1062900000000000000000000000000000000000FE +:1062A00000000000000000000000000000000000EE +:1062B000FC0C3C3C0000000000000000000000005E +:1062C00000000000000000000000000000000000CE +:1062D00000000000000000000000000000000000BE +:1062E00000000000000000000000000000000000AE +:1062F000000000000000000000000000000000009E +:10630000000000000000000000000000000000008D +:10631000000000000000000000000000000000007D +:10632000000000000000000000000000000000006D +:10633000000000000000000000000000000000005D +:10634000000000000000000000002000000000002D +:10635000000020000000000000000000000000001D +:10636000000000000000000000002000000000000D +:1063700000002000000000000000000000000000FD +:1063800000000000000000000000000020000000ED +:1063900000000000200000000000000000000000DD +:1063A00000000000000000000000000000000000ED +:1063B000000000001000000040000000000000008D +:1063C00000000000000000000000000000000000CD +:1063D00000000000000000000000000000000000BD +:1063E0000002000000001000100200000000000089 +:1063F000000000000000400040000000000000001D +:1064000040004002000040024002404000004002C4 +:10641000000240400000400040000000000000007A +:10642000400040000000400000004000009040009C +:10643000000040000000800000008000000000001C +:10644000000000000000000000000000000000004C +:10645000000000000000000000000000000000003C +:10646000000000000000000000000000000000002C +:106470000000000008000000000000000000000212 +:10648000000000000000000000000000000000000C +:1064900000000000000000000000000000000000FC +:1064A00000000000000000000000000000000000EC +:1064B00000000000001000200000000000000000AC +:1064C0000000004000000000000000000000000884 +:1064D00000000000000800000000000000000008AC +:1064E00000000000000000000000000000000008A4 +:1064F000000000000008000000000000000000088C +:10650000000000000000040000080000000000007F +:10651000000800000000000800000000000000006B +:10652000000800000000000000080000000000005B +:10653000000800000000000800010000000000004A +:106540000008000000000000000000000000000043 +:106550000000000000000000000000030000000038 +:10656000000000000000000000000000000000002B +:10657000000000000000000000000000000000001B +:10658000000000000000000000000000000000000B +:1065900000000000000000000000000000000000FB +:1065A00000000000000000000000000000000000EB +:1065B00000000000000000000000000000000000DB +:1065C0000000010000840000000000000000000046 +:1065D00000000000000000000000000000000000BB +:1065E00000000000000000000000000000000000AB +:1065F000000000000000000000000000000000009B +:10660000000000000000000000000000000000008A +:10661000000000000000000000000000000000007A +:10662000000000000000000000000000000000006A +:10663000000000000000000000000000000000005A +:106640000000000004000000000000000000000046 +:10665000000000000000000000000000000000003A +:10666000000000000000000000000000000000002A +:10667000000000000000000000000000000000001A +:10668000000000000000000000000000000000000A +:1066900000000000000000000000000000000000FA +:1066A00000000000000000000000000000000000EA +:1066B00000000000000000000800000000000000D2 +:1066C00000000000000000000000000000000000CA +:1066D00000000000000000000000000000000000BA +:1066E000000000900000000000000000000000001A +:1066F000000000000000000000000000000000009A +:106700000000000000000000000000000000000089 +:106710000000000000000000000000000000000079 +:106720000000000000000000000000000000000069 +:106730000000000000000000000000000000000059 +:106740000000000000000000000000000000000049 +:106750000000000000000000000000000000000039 +:106760000000000000000000000000000000000029 +:106770000008000000000000000000000000000011 +:106780000000000000000000000000000000000009 +:1067900000000000000000000000000000000000F9 +:1067A00000000000000000000000000000000000E9 +:1067B00000000000000000000000000000002000B9 +:1067C00000000000000004000000000200000000C3 +:1067D00000000000000000000000000000000000B9 +:1067E00000000084000000000000008400000000A1 +:1067F0000000000000000000000000000000000099 +:106800000000000000000000000000000000000088 +:106810000000000000000000000000000000000078 +:106820000000000000000000000000000000000068 +:106830000000000000000000000000000000000058 +:1068400000000000000008008000000000000000C0 +:106850000000000000000021000000000000000017 +:106860000000000000000000000000000002000026 +:106870000000000000020000000000000000000016 +:106880000000000000000000000000000000000008 +:1068900000000000000000000000000000000000F8 +:1068A00000000000000000000000000000000000E8 +:1068B00000000000000000000000000000000000D8 +:1068C00000000000000000000000000000210000A7 +:1068D00000000000000000000000000000000000B8 +:1068E0000000000000000000200000000000110077 +:1068F0000000000000000500000000000000000093 +:106900000000000000000000000000000000000087 +:106910000000000000000000000000000000000077 +:106920000000000000000000000000000000000067 +:106930000000000000000000000000000000000057 +:106940000000000000000000000000000000000047 +:106950000000000000000000000000000000000037 +:106960000000000000000000000000000000000027 +:106970000000000000000000000000000000000017 +:106980000000000000000000000000000000000007 +:1069900000000000000000000000000000000000F7 +:1069A00000000000000000000000000000000000E7 +:1069B00000000000000000000000000000000000D7 +:1069C00000000000008800040010000000C00090DB +:1069D000081000000000000000000000000000009F +:1069E00000000000000000000000000000000000A7 +:1069F0000000000000000000000000000000000097 +:106A00000000000000000000000000000000000086 +:106A10000000000000000000000000000000000076 +:106A20000000000000000000000000000000000066 +:106A30000000000000000000000000000000000056 +:106A400000000000000000000000000000000080C6 +:106A5000098080000000000000000000000000002D +:106A60000000000000000000000000000000000026 +:106A70000000000000000000000000000000000016 +:106A80000000000000000000000000000000000006 +:106A900000000000000000000000000000000000F6 +:106AA00000000000000000000000000000000000E6 +:106AB00000000000000000000000000000000000D6 +:106AC0000000000000000000000000918000800035 +:106AD000030010000500C18000000000000000005D +:106AE00000000000000000000000000000000000A6 +:106AF0000000000000000000000000000000000096 +:106B00000000000000000000000000000000000085 +:106B10000000000000000000000000000000000075 +:106B20000000000000000000000000000000000065 +:106B30000000000000000000000000000000000055 +:106B400000000000000000000000000088C00800F5 +:106B50009000000000000100C1A000000000000043 +:106B60000000000000000000000000000000000025 +:106B70000000000000000000000000000000000015 +:106B80000000000000000000000000000000000005 +:106B900000000000000000000000000000000000F5 +:106BA00000000000000000000000000000000000E5 +:106BB00000000000000000000000000000000000D5 +:106BC00000000000000000000000000010000000B5 +:106BD0000000110000000010009100C00000000043 +:106BE00000000000000000000000000000000000A5 +:106BF0000000000000000000000000000000000095 +:106C00000000000000000000000000000000000084 +:106C10000000000000000000000000000000000074 +:106C20000000000000000000000000000000000064 +:106C30000000000000000000000000000000000054 +:106C40000000000000000000000000000000000044 +:106C500000000000090000090021009100830000ED +:106C60000000000000000000000000000000000024 +:106C70000000000000000000000000000000000014 +:106C80000000000000000000000000000000000004 +:106C900000000000000000000000000000000000F4 +:106CA00000000000000000000000000000000000E4 +:106CB00000000000000000000000000000000000D4 +:106CC00000000000000000000000000000000000C4 +:106CD00000100080808000008011000200800040D1 +:106CE00000000000000000000000000000000000A4 +:106CF0000000000000000000000000000000000094 +:106D00000000000000000000000000000000000083 +:106D10000000000000000000000000000000000073 +:106D20000000000000000000000000000000000063 +:106D30000000000000000000000000000000000053 +:106D40000000000000000000000000000000000043 +:106D5000000088000220408400009001101000080C +:106D60000000000000000000000000000000000023 +:106D70000000000000000000000000000000000013 +:106D80000000000000000000000000000000000003 +:106D900000000000000000000000000000000000F3 +:106DA00000000000000000000000000000000000E3 +:106DB00000000000000000000000000000000000D3 +:106DC00000000000000000000000000000000000C3 +:106DD0000000000000820000430442000082000026 +:106DE0004300000000000000000000000000000060 +:106DF0000000000000000000000000000000000093 +:106E00000000000000000000000000000000000082 +:106E10000000000000000000000000000000000072 +:106E20000000000000000000000000000000000062 +:106E30000000000000000000000000000000000052 +:106E40000000000000000000000000000000000042 +:106E50000000000000000000000000000000FF0033 +:106E60000000F00000000000000000000000000032 +:106E70000000000000000000000000000000000012 +:106E80000000000000000000000000000000000002 +:106E900000000000000000000000000000000000F2 +:106EA00000000000000000000000000000000000E2 +:106EB00000000000000000000000000000000000D2 +:106EC00000000000000000000000000000000000C2 +:106ED000000000000000000000000F0000000000A3 +:106EE000FF000000F00000000000000000000000B3 +:106EF0000000000000000000000000000000000092 +:106F00000000000000000000000000000000000081 +:106F10000000000000000000000000000000000071 +:106F20000000000000000000000000000000000061 +:106F30000000000000000000000000000000000051 +:106F40000000000000000000000000000000000041 +:106F50000000000000000000000000000000000031 +:106F60000000000000000000000000000000000021 +:106F70000000000000000000000000000000000011 +:106F80000000000000000000000000000000000001 +:106F900000000000000000000000000000000000F1 +:106FA00000000000000000000000000000000000E1 +:106FB00000000000000000000000000000000000D1 +:106FC00000000000000000000000000000000000C1 +:106FD0000000000000000000000000000F0F66FF2E +:106FE000FF60FF600000000F000066660000000008 +:106FF0000000000000000000000000000000000091 +:107000000000000000000000000000000000000080 +:107010000000000000000000000000000000000070 +:107020000000000000000000000000000000000060 +:107030000000000000000000000000000000000050 +:107040000000000000000000000000000000000040 +:1070500000000000000000000000000000000066CA +:1070600000000000FFFF0000000F00000000000013 +:107070000000000000000000000000000000000010 +:107080000000000000000000000000000000000000 +:1070900000000000000000000000000000000000F0 +:1070A00000000000000000000000000000000000E0 +:1070B00000000000000000000000000000000000D0 +:1070C00000000000000000000000000000000000C0 +:1070D00000000000000000000000000000000000B0 +:1070E00000003030000000000363033E0C0D92C02E +:1070F0000000000000000000000000000000000090 +:10710000000000000000000000000000000000007F +:10711000000000000000000000000000000000006F +:10712000000000000000000000000000000000005F +:10713000000000000000000000000000000000004F +:10714000000000000000000000000000000000003F +:10715000000000000000000000000000000000002F +:10716000000000000000000000000000000000001F +:10717000000000000000000000000000000000000F :1071800000000000000000000000000000000000FF :1071900000000000000000000000000000000000EF :1071A00000000000000000000000000000000000DF @@ -182090,7 +182090,7 @@ :1071C00000000000000000000000000000000000BF :1071D00000000000000000000000000000000000AF :1071E000000000000000000000000000000000009F -:1071F000000000000000000000000000000000008F +:1071F000010000000000000000000000000000008E :10720000000000000000000000000000000000007E :10721000000000000000000000000000000000006E :10722000000000000000000000000000000000005E @@ -182098,7 +182098,7 @@ :10724000000000000000000000000000000000003E :10725000000000000000000000000000000000002E :10726000000000000000000000000000000000001E -:10727000000000000000000000000000000000000E +:107270000000F7FFFCFC0000000000000000000020 :1072800000000000000000000000000000000000FE :1072900000000000000000000000000000000000EE :1072A00000000000000000000000000000000000DE @@ -182106,41 +182106,41 @@ :1072C00000000000000000000000000000000000BE :1072D00000000000000000000000000000000000AE :1072E000000000000000000000000000000000009E -:1072F000000000000000000000000000000000008E -:107300000000000084008400000000000000000075 +:1072F00000000000F7FFFCFC0000000000000000A0 +:1073000000000000000000040000000000800000F9 :10731000000000000000000000000000000000006D :10732000000000000000000000000000000000005D -:10733000000000000000000000000000000000004D +:10733000000000000000000000010000000000004C :10734000000000000000000000000000000000003D :10735000000000000000000000000000000000002D :10736000000000000000000000000000000000001D :10737000000000000000000000000000000000000D -:1073800000000000000000020000400000000000BB -:1073900000000000000000020000000000000000EB -:1073A0000000000000024002000040000000000059 -:1073B000100010000000400040000000000000002D -:1073C00000000000000200004002400040000000F9 -:1073D000000000000000000000020000000040006B -:1073E000000000000000000040020000400000001B -:1073F000000000000000000040020040000000000B -:10740000000000000000000000000000000002007A -:10741000000000000200000000000000000000006A -:1074200000000000000000000800000082000200D0 -:10743000000008000000020000000200000200003E -:10744000000000000000000000000000000000003C -:107450000200000000000000000000000400000026 -:1074600000000000000000000000000000000040DC -:107470000000000004000000000008000000000000 -:1074800000000000000000000000000000000000FC -:1074900000000000000000000000000000000000EC +:1073800000000000000000000000000000000008F5 +:1073900000000000000000000000000000000000ED +:1073A00000000000000000000000000000000000DD +:1073B00000000000000000000000000010000000BD +:1073C00000020000000000000002000400000000B5 +:1073D000000000000000000000000000000040006D +:1073E00040000000000040004000000000000000DD +:1073F000000000000000000000000000000000008D +:10740000000000000000000000000000010001007A +:10741000000010000000020000000000000000005A +:107420000000000002000000000002000000000058 +:10743000000000000000000000000000000200004A +:107440000000000000000000000004000000000038 +:10745000000000000000000000000000000000002C +:1074600000000000000000000000080008002000EC +:107470000000000000000000020008000000000002 +:1074800000000000000000000000000000001000EC +:10749000100000008000000000000000000000005C :1074A00000000000000000000000000000000000DC :1074B00000000000000000000000000000000000CC :1074C00000000000000000000000000000000000BC :1074D00000000000000000000000000000000000AC :1074E000000000000000000000000000000000009C -:1074F000000000000000000000000000000000008C +:1074F000800000000000000000000000000000000C :10750000000000000000000000000000000000007B -:10751000000000000000000000000000000000006B +:10751000000000000000000000000000000001006A :10752000000000000000000000000000000000005B :10753000000000000000000000000000000000004B :10754000000000000000000000000000000000003B @@ -182149,193 +182149,193 @@ :10757000000000000000000000000000000000000B :1075800000000000000000000000000000000000FB :1075900000000000000000000000000000000000EB -:1075A00000000000000000000000000000000000DB +:1075A00020000000000000000000000000000000BB :1075B00000000000000000000000000000000000CB :1075C00000000000000000000000000000000000BB :1075D00000000000000000000000000000000000AB :1075E000000000000000000000000000000000009B -:1075F000000000000000000000000000000000008B -:10760000000000000000000000000000000000007A -:10761000000000000000000000000000000000006A -:10762000000000000000000000000000000000005A +:1075F0000000000000000000000000000082000801 +:107600000000000800000000000000000000000072 +:107610000000000001000000008001800000000068 +:107620000100000000000000000000000000000059 :10763000000000000000000000000000000000004A :10764000000000000000000000000000000000003A -:107650000000000000000000000000000100000029 +:10765000000000000000000000000000000000002A :10766000000000000000000000000000000000001A :10767000000000000000000000000000000000000A :1076800000000000000000000000000000000000FA -:1076900000000000000000000000000000000000EA -:1076A00000000000000000000000000000000000DA -:1076B00010000800080000000000000000000000AA +:107690000000000000000200000000202020000088 +:1076A00000002000000000000000000000000000BA +:1076B00000000000000000000000000000000000CA :1076C00000000000000000000000000000000000BA -:1076D00000000000000000000000000000000400A6 +:1076D00000000000000000000000000000000000AA :1076E000000000000000000000000000000000009A :1076F000000000000000000000000000000000008A -:107700000000000000000000000000000000000079 -:107710000000000000000000000000000000000069 -:107720000000000000000000000000000000000059 +:1077000000820000000000000000000000000000F7 +:1077100020000000900000000000000000000000B9 +:107720000008000000000000000000000000000051 :107730000000000000000000000000000000000049 :107740000000000000000000000000000000000039 -:107750000000040000000000000000000000000025 -:107760004000000000000000A00000040000000035 +:107750000000000000000000000000000000000029 +:107760000000000000000000000000000000000019 :107770000000000000000000000000000000000009 -:1077800000000000000000000000000000000000F9 +:1077800000000000000000000200000000000000F7 :1077900000000000000000000000000000000000E9 -:1077A00000000000000000000000000000000000D9 +:1077A00000000001000000000000000000000000D8 :1077B00000000000000000000000000000000000C9 :1077C00000000000000000000000000000000000B9 -:1077D0000000000080000000000000000000000029 -:1077E0000000800000000000000000000000000019 -:1077F0000000000000000000000000000000000089 -:107800000000000000000000000000000000000078 +:1077D00000000000000000000000000000000000A9 +:1077E0000000000000000000000000000000000099 +:1077F0000000000000000000000000000000000881 +:10780000008400000000000000088000000000006C :107810000000000000000000000000000000000068 -:107820000000000000000000000000000000000058 -:107830000000000000000000000000000000000048 +:10782000000000000000000000000009000000004F +:10783000000900000000000000000000000000003F :107840000000000000000000000000000000000038 :107850000000000000000000000000000000000028 -:1078600000000000400200000003000000000100D2 +:107860000000000000000000000000000000000018 :107870000000000000000000000000000000000008 -:1078800000000000000000000000000000000000F8 +:1078800000000000000000080000000800000000E8 :1078900000000000000000000000000000000000E8 :1078A00000000000000000000000000000000000D8 -:1078B00000000000000000001000000000000000B8 -:1078C00000000000000000000000000005000000B3 +:1078B00000000000000000000000000000000000C8 +:1078C00000000000000000000000000000000000B8 :1078D00000000000000000000000000000000000A8 -:1078E000000000000000C1010000000000000000D6 -:1078F0000400000000000000000000000000000084 -:107900000000000000000000000000000000000077 +:1078E0000000000000000000000000000000000098 +:1078F0000000000000000000000000000000000088 +:1079000000000000000000000082000000000008ED :107910000000000000000000000000000000000067 -:107920000000000000000000000000000000000057 +:1079200001009000000000000100000000000000C5 :107930000000000000000000000000000000000047 :107940000000000000000000000000000000000037 -:107950000000000000000000000000C000900000D7 -:10796000000000C000900000000000C00090000077 -:10797000000000C0009000000000000000000000B7 -:1079800000000000000000000000000000000000F7 -:1079900000000000000000000000000000000000E7 -:1079A00000000000000000000000000000000000D7 +:107950000000000000000000000000000000000027 +:107960000000000000000000000000000000000017 +:107970000000000000000000000000000000000007 +:107980000000000000000000000000080082000865 +:1079900000020000000000000000000000000000E5 +:1079A00000001100802100000000110021000000F3 :1079B00000000000000000000000000000000000C7 :1079C00000000000000000000000000000000000B7 -:1079D00000000000000000000000000000800080A7 -:1079E0000000000000800080000000000080008097 -:1079F0000000000000800080000000000000000087 -:107A00000000000000000000000000000000000076 -:107A10000000000000000000000000000000000066 -:107A20000000000000000000000000000000000056 -:107A30000000000000000000000000000000000046 +:1079D00000000000000000000000000000000000A7 +:1079E0000000000000000000000000000000000097 +:1079F0000000000000000000000000000000000087 +:107A00000000000000000000020000000080008074 +:107A100000800000000000000000000000000000E6 +:107A200000000000000400801111008000410900E6 +:107A3000000900000000000000000000000000003D :107A40000000000000000000000000000000000036 :107A50000000000000000000000000000000000026 -:107A60000000800080800000000000008080000096 -:107A700000008011808000000000800080800000F5 -:107A800000000000000000000000000000000000F6 -:107A900000000000000000000000000000000000E6 -:107AA00000000000000000000000000000000000D6 -:107AB00000000000000000000000000000000000C6 +:107A60000000000000000000000000000000000016 +:107A70000000000000000000000000000000000006 +:107A800000000000000000090000000000000000ED +:107A90000080000000000000000000000000000066 +:107AA00000000000000000010002010000080001C9 +:107AB00001000000000000000000000000000000C5 :107AC00000000000000000000000000000000000B6 :107AD00000000000000000000000000000000000A6 -:107AE000000000008400C090000000000000C0A062 -:107AF000000000008400C090000000008400C090DE +:107AE0000000000000000000000000000000000096 +:107AF0000000000000000000000000000000000086 :107B00000000000000000000000000000000000075 -:107B10000000000000000000000000000000000065 -:107B20000000000000000000000000000000000055 -:107B30000000000000000000000000000000000045 +:107B1000000000080000000200000000000000005B +:107B200000000000000000000100048802010100C4 +:107B300000008800000001000000000000000000BC :107B40000000000000000000000000000000000035 :107B50000000000000000000000000000000000025 -:107B6000000000000000009000C000000000009035 -:107B700000C000000000009000C000000000009065 -:107B800000C0000000000000000000000000000035 -:107B900000000000000000000000000000000000E5 -:107BA00000000000000000000000000000000000D5 -:107BB00000000000000000000000000000000000C5 +:107B60000000000000000000000000000000000015 +:107B70000000000000000000000000000000000005 +:107B800000000000000000000000000000000000F5 +:107B9000000040000000100008000000000000008D +:107BA000000000000000000000004100008080088C +:107BB000080000000000000041000000000000007C :107BC00000000000000000000000000000000000B5 :107BD00000000000000000000000000000000000A5 -:107BE000000000000000000000800980000000008C -:107BF0000083008000000000008000800000000082 -:107C00000080008000000000000000000000000074 -:107C10000000000000000000000000000000000064 -:107C20000000000000000000000000000000000054 -:107C30000000000000000000000000000000000044 +:107BE0000000000000000000000000000000000095 +:107BF0000000000000000000000000000000000085 +:107C00000000000000000000000000000000000074 +:107C100000000000800000008000800000000000E4 +:107C20000000000000000000000000000011110032 +:107C300000800000000000110000000000000000B3 :107C40000000000000000000000000000000000034 :107C50000000000000000000000000000000000024 -:107C600000000000000080080003000000008011F8 -:107C700080410000000080118003000000008008A7 -:107C800000030000000000000000000000000000F1 +:107C60000000000000000000000000000000000014 +:107C70000000000000000000000000000000000004 +:107C800000000000000000000000000000000000F4 :107C900000000000000000000000000000000000E4 -:107CA00000000000000000000000000000000000D4 -:107CB00000000000000000000000000000000000C4 +:107CA00000000000000000000000000000000001D3 +:107CB0000100004000000000000100000000000082 :107CC00000000000000000000000000000000000B4 :107CD00000000000000000000000000000000000A4 -:107CE0000000000000000000900000010000000003 -:107CF000C001200100880000C00120000000000039 -:107D0000C000000000009000000000000000000023 +:107CE0000000000000000000000000000000000094 +:107CF0000000000000000000000000000000000084 +:107D00000000000000000000000000000000000073 :107D10000000000000000000000000000000000063 :107D20000000000000000000000000000000000053 -:107D30000000000000000000000000000000000043 +:107D3000000000E007008200000000E00000810A6F :107D40000000000000000000000000000000000033 :107D50000000000000000000000000000000000023 -:107D6000000000000000000000000081000043004F -:107D700000000042000043008800001100004300A2 -:107D8000000000810000430000000000000000002F -:107D900000000000000000000000000000000000E3 +:107D60000000000000000000000000000000000013 +:107D70000000000000000000000000000000000003 +:107D800000000000000000000000000000000000F3 +:107D90000000000000C8000000000000000000001B :107DA00000000000000000000000000000000000D3 -:107DB00000000000000000000000000000000000C3 +:107DB000000000000000F0F00000000000000000E3 :107DC00000000000000000000000000000000000B3 :107DD00000000000000000000000000000000000A3 -:107DE0000000000000000000000000000000FFFF95 -:107DF000000000FF000000FF000000FF000000FF87 -:107E0000000000FF00003C3C000000FF00000000FC +:107DE0000000000000000000000000000000000093 +:107DF0000000000000000000000000000000000083 +:107E00000000000000000000000000000000000072 :107E10000000000000000000000000000000000062 :107E20000000000000000000000000000000000052 -:107E30000000000000000000000000000000000042 +:107E30000000000000000000F0F000000000000062 :107E40000000000000000000000000000000000032 :107E50000000000000000000000000000000000022 :107E60000000000000000000000000000000000012 -:107E7000FFFF000000FF000000FF000000FF000007 -:107E800000FF000000FF00003C3C000000FF00007D +:107E70000000000000000000000000000000000002 +:107E800000000000000000000000000000000000F2 :107E900000000000000000000000000000000000E2 :107EA00000000000000000000000000000000000D2 -:107EB00000000000000000000000000000000000C2 +:107EB000000000000000000000000000FFFF0000C4 :107EC00000000000000000000000000000000000B2 :107ED00000000000000000000000000000000000A2 :107EE0000000000000000000000000000000000092 -:107EF000FF000000FF000000FF000000FFFF000087 -:107F0000FF000000FF000000FF00000000FFFFFF77 +:107EF0000000000000000000000000000000000082 +:107F00000000000000000000000000000000000071 :107F10000000000000000000000000000000000061 -:107F20000000000000000000000000000000000051 +:107F20005429448800000000000000000000000008 :107F30000000000000000000000000000000000041 :107F40000000000000000000000000000000000031 :107F50000000000000000000000000000000000021 :107F60000000000000000000000000000000000011 -:107F70000000FF000000FF000000FF000000000004 -:107F80000000FF000000FF000000FF00000000FFF5 -:107F9000FFFF0000000000000000000000000000E3 -:107FA00000000000000000000000000000000000D1 -:107FB00000000000000000000000000000000000C1 -:107FC00000000000000000000000000000000000B1 +:107F70000000000000000000000000000000000001 +:107F800000000000000000000000000000000000F1 +:107F900000000000000000000000000000000000E1 +:107FA0000000D62956A900000000000000000000D3 +:107FB0000000000000000000000005000A06054C5B +:107FC00000A800600006000C000000000000000097 :107FD00000000000000000000000000000000000A1 :107FE0000000000000000000000000000000000091 -:107FF00000000000030203280C0092C003E3032EDC -:108000000C0D92C0038203280C0092C00382032847 -:108010000C0082C000000000000000000000000012 -:108020000000000000000000000000000000000050 -:108030000000000000000000000000000000000040 -:108040000000000000000000000000000000000030 +:107FF0000000000000000000000000000000000081 +:108000000000000000000000000000000000000070 +:1080100000000000000000000000000000610007F8 +:10802000000D000000003000000000000000000013 +:108030000000000000000000000000000000FF0041 +:1080400000FF000000000000FFFF00000000000033 :108050000000000000000000000000000000000020 :108060000000000000000000000000000000000010 :108070000000000000000000000000000000000000 -:108080000000FF00FF0000000000000000000000F2 +:1080800000000000000000000000000000000000F0 :1080900000000000000000000000000000000000E0 :1080A00000000000000000000000000000000000D0 :1080B00000000000000000000000000000000000C0 -:1080C00000000000000000000000000000000000B0 +:1080C000FF0000FF000000000000000000000000B2 :1080D00000000000000000000000000000000000A0 :1080E0000000000000000000000000000000000090 :1080F0000000000000000000000000000000000080 -:1081000000000000FF00FF00000000000000000071 +:10810000000000000000000000000000000000006F :10811000000000000000000000000000000000005F :10812000000000000000000000000000000000004F :10813000000000000000000000000000000000003F -:10814000000000000000000000000000000000002F +:108140000000FF0000FF000000000000F0F0000051 :10815000000000000000000000000000000000001F :10816000000000000000000000000000000000000F :1081700000000000000000000000000000000000FF @@ -182343,196 +182343,196 @@ :1081900000000000000000000000000000000000DF :1081A00000000000000000000000000000000000CF :1081B00000000000000000000000000000000000BF -:1081C00000000000000000000000000000000000AF +:1081C00000000000FF0000FF000000000000F0F0D1 :1081D000000000000000000000000000000000009F :1081E000000000000000000000000000000000008F :1081F000000000000000000000000000000000007F :10820000000000000000000000000000000000006E :10821000000000000000000000000000000000005E :10822000000000000000000000000000000000004E -:1082300000000000000000000000840000000000BA -:10824000000000000000000000000000000000002E -:10825000000000000000000000000000000000001E -:10826000000000000000000000000000000000000E -:1082700000000000000000000000000000000000FE -:1082800000000000000000000000000000000000EE +:1082300000000000000020002000000000000000FE +:10824000000020000000000000000000000000000E +:1082500000000000000020002000000000000000DE +:1082600000002000000000000000000000000000EE +:1082700000000000000200002000200000000000BC +:1082800000000000200000000000000000000000CE :1082900000000000000000000000000000000000DE -:1082A00000000000000010000000000000000000BE +:1082A000000000002000000010000000008000001E :1082B00000000000000000000000000000000000BE :1082C00000000000000000000000000000000000AE -:1082D000000000000002000000000002000000009A -:1082E00000400000000000004040000200000000CC -:1082F000000240004000000000004000404010002C -:1083000040004000400000900000004000020000DB -:10831000400040000000000000004040000200005B -:1083200040000000000000000000004000000002CB -:1083300000004000000000000000000000000000FD -:10834000020002000800021000000000000000808F -:108350000000000000000000000002000000021009 -:108360000200020001000000000002000000000006 -:1083700002000000000000000001000000000000FA -:1083800000000200020002000200000000000000E5 -:1083900000000200020002000200020000000000D3 -:1083A00000000200040000000800000000000000BF -:1083B0000000020000000210001000000000000099 -:1083C00000000400000000000000000000000000A9 -:1083D00000200000000000000000000000000084F9 -:1083E0000400000000002000000000000000000069 -:1083F000000000000000000000000000000000007D -:10840000000000000000000000000000000000006C -:10841000000000000000000000000000000000005C -:10842000000000000000000000000000000000004C -:10843000000000000000000000000000000000003C -:108440000008000000000000000000000000000024 +:1082D000000000000000000000000002000000009C +:1082E000400040000000000040004000000040004E +:1082F00040004000400000004002000040401000EC +:10830000400040000000000000004000400200006B +:10831000400000004000000040000000400000005D +:108320000000000000000000000080004000000489 +:1083300040000000000000000000000000000000FD +:10834000000000000000000000000000000000002D +:10835000000000000000000000000000000000001D +:10836000000000000000000000000000000000000D +:1083700000000000000000000002000000000000FB +:1083800000000000000000000000000000000000ED +:1083900000000000000000000000000000000800D5 +:1083A00008000000000000000000000000000800BD +:1083B000000000002000000000000000000000009D +:1083C000000000000000000000000008000000089D +:1083D000000000000008000800000000000000008D +:1083E000000000000000000000000008000000087D +:1083F000000000000008000800000000000000006D +:108400000000000000000000000000000008000064 +:108410000008000000000008000800000000000044 +:1084200000000000000000000000000000880000C4 +:1084300000080000000080880082000000000000AA +:10844000000000000000000000000000000000002C :10845000000000000000000000000000000000001C -:1084600000000000000010030002001100000000E6 -:1084700000090100000000000000000000000000F2 +:10846000000000000000000000000000000000000C +:1084700000000000000000000000000000000000FC :1084800000000000000000000000000000000000EC :1084900000000000000000000000000000000000DC -:1084A00000000000000000000000000000000000CC +:1084A0000000000000000000000000000000880044 :1084B00000000000000000000000000000000000BC -:1084C00000020008000000000000000000000000A2 +:1084C00000000000000000000000000000C00000EC :1084D000000000000000000000000000000000009C -:1084E000000000000000000000000001000000008B -:1084F0000000000004000000000000000000000078 +:1084E000000000000000000000000000000000008C +:1084F000000000000000000000000000000000007C :10850000000000000000000000000000000000006B :10851000000000000000000000000000000000005B :10852000000000000000000000000000000000004B -:10853000000000000000000000000000000000003B +:10853000000000000000000000000000000020001B :10854000000000000000000000000000000000002B :10855000000000000000000000000000000000001B -:1085600000000000000008000000000000400000C3 -:108570000000000400000080000000000004000073 +:10856000000000000000000000000000000000000B +:1085700000000000000000000000000000000000FB :1085800000000000000000000000000000000000EB -:1085900000000000000000000000000400000000D7 -:1085A000000000000000000000000000004000008B +:1085900000000000000000200000000000000000BB +:1085A00000000000080008000000000000000000BB :1085B00000000000000000000000000000000000BB -:1085C00000000000000000080000000000000000A3 -:1085D0000000000000000000008400000000000017 +:1085C00000000000000000000000000000000000AB +:1085D000000000000000000000000000000000009B :1085E000000000000000000000000000000000008B -:1085F0000000000004000000000400000000000073 -:10860000001000000000000000000000000000005A +:1085F000000000000000000000000000000000007B +:10860000000000000000000000000000000000006A :10861000000000000000000000000000000000005A -:10862000000000000000000000000040000000000A -:10863000000000000000000000000000000000003A -:1086400000000040000000020000000000000000E8 +:10862000000000000000000000000000000000004A +:1086300000000000000000000000000000900000AA +:10864000000000000000000000000000000000002A :10865000000000000000000000000000000000001A -:108660000000000000000000040004000000000002 -:108670000020400200020000000000000000001185 +:10866000000000000000000000000000000000000A +:1086700000000000000000000000000000000000FA :1086800000000000000000000000000000000000EA -:10869000000000000000000000000000900000004A +:1086900000000000000000000000000000000000DA :1086A00000000000000000000000000000000000CA :1086B00000000000000000000000000000000000BA :1086C00000000000000000000000000000000000AA -:1086D000000000000000000000000000000000009A -:1086E000000000000000000000008000800000008A -:1086F00000000001800100000000000000000000F8 +:1086D000000000C0000000840000000000840000D2 +:1086E0000000008400000000000000000000000006 +:1086F000000000000000000000000000000000007A :108700000000000000000000000000000000000069 -:1087100000000000000000000000000000000084D5 +:108710000000000000000000000000000000000059 :108720000000000000000000000000000000000049 -:108730000000000000002100000000000000000018 -:108740000000000000000000000000000000000029 +:108730000000000000000000000000000000000039 +:1087400000C0000000000000000000000000000069 :108750000000000000000000000000000000000019 -:1087600000000021002100210000000000000000A6 -:1087700090000003000000800100000000000000E5 -:1087800000000000000900000000000000000000E0 +:108760000002000000000002000000000002000003 +:1087700000000000000000000000000000000000F9 +:1087800000000000000000000000000000000000E9 :1087900000000000000000000000000000000000D9 -:1087A00000000000000000000002000000000000C7 -:1087B0009000000000000000000000000000000029 +:1087A00000000000000000000000000000000000C9 +:1087B00000000000000000000000000000000000B9 :1087C00000000000000000000000000000000000A9 :1087D0000000000000000000000000000000000099 :1087E0000000000000000000000000000000000089 -:1087F0000000000000000000002004000002000251 -:108800000302000000000000000000000000000063 +:1087F0000000000000000000000000000000000079 +:108800000000000000000000000000000000000068 :108810000000000000000000000000000000000058 -:10882000008800000000000041000000000000007F +:108820000000000000000000000000000000000048 :108830000000000000000000000000000000000038 :108840000000000000000000000000000000000028 :108850000000000000000000000000000000000018 :108860000000000000000000000000000000000008 -:108870000000000010C090908888000001C00090A7 -:108880008200000000000000000000000000000066 +:1088700000000000000000000000000000000000F8 +:1088800000000000000000000000000000000000E8 :1088900000000000000000000000000000000000D8 :1088A00000000000000000000000000000000000C8 :1088B00000000000000000000000000000000000B8 -:1088C00000000000000000000000000000000000A8 +:1088C00000000200000000010000000000000000A5 :1088D0000000000000000000000000000000000098 :1088E0000000000000000000000000000000000088 -:1088F0000000000000000080808000000000108068 -:1089000020800000000000000000000000000000C7 +:1088F0000000000000000000000000000000000078 +:108900000000000000000000000000000000000067 :108910000000000000000000000000000000000057 :108920000000000000000000000000000000000047 :108930000000000000000000000000000000000037 -:108940000000000000000000000000000000000027 +:1089400000001000000000000040000400100004BF :108950000000000000000000000000000000000017 -:108960000000000000008000000000000000000087 -:10897000000080000000808011000300031183804C -:1089800000000021000080800000000000000000C6 +:108960000000000000000000000000000000000007 +:1089700000000000000000000000000000000000F7 +:1089800000000000000000000000000000000000E7 :1089900000000000000000000000000000000000D7 :1089A00000000000000000000000000000000000C7 :1089B00000000000000000000000000000000000B7 -:1089C00000000000000000000000000000000000A7 -:1089D0000000000000000000000000000000000097 -:1089E000000000000000000008000000000000007F -:1089F0000000020082000000C0908800000000001B -:108A0000C1A0900000000000C010000000000000A5 +:1089C0000000000000000000000000800000001017 +:1089D0000010000000000000000000000000000087 +:1089E0000000000000000000000000000000000087 +:1089F0000000000000000000000000000000000077 +:108A00000000000000000000000000000000000066 :108A10000000000000000000000000000000000056 :108A20000000000000000000000000000000000046 :108A30000000000000000000000000000000000036 -:108A40000000000000000000000000000000000026 +:108A400000000000000000000000000000400000E6 :108A50000000000000000000000000000000000016 :108A60000000000000000000000000000000000006 -:108A70000000000000000000009000100000000056 -:108A8000009100C090900001889000C1000000009B +:108A700000000000000000000000000000000000F6 +:108A800000000000000000000000000000000000E6 :108A900000000000000000000000000000000000D6 :108AA00000000000000000000000000000000000C6 :108AB00000000000000000000000000000000000B6 -:108AC00000000000000000000000000000000000A6 -:108AD0000000000000000000000000000000000096 +:108AC00000000000000000010000000000010000A4 +:108AD0000100000000000000000000000000000095 :108AE0000000000000000000000000000000000086 -:108AF00000000000000000000000008000000000F6 -:108B0000000000A100800005000300A040820000DA +:108AF0000000000000000000000000000000000076 +:108B00000000000000000000000000000000000065 :108B10000000000000000000000000000000000055 :108B20000000000000000000000000000000000045 :108B30000000000000000000000000000000000035 -:108B40000000000000000000000000000000000025 -:108B50000000000000000000000000000000000015 -:108B60000000000000000000000000000080000085 -:108B700000000000000000000011002100000000C3 -:108B80008091804100000000801000030080000000 +:108B40000000000000000000001000400040004154 +:108B500000004000000000000000000000000000D5 +:108B60000000000000000000000000000000000005 +:108B700000000000000000000000000000000000F5 +:108B800000000000000000000000000000000000E5 :108B900000000000000000000000000000000000D5 :108BA00000000000000000000000000000000000C5 :108BB00000000000000000000000000000000000B5 :108BC00000000000000000000000000000000000A5 -:108BD0000000000000000000000000000000000095 -:108BE000000000000000000000000000000000087D +:108BD00000000921114041000300000000000000D6 +:108BE0000000000000000000000000000000000085 :108BF0000000000000000000000000000000000075 -:108C00000000C091200188880000C000000000081A -:108C100090000000000000000000000000000000C4 +:108C00000000000000000000000000000000000064 +:108C10000000000000000000000000000000000054 :108C20000000000000000000000000000000000044 :108C30000000000000000000000000000000000034 :108C40000000000000000000000000000000000024 -:108C50000000000000000000000000000000000014 -:108C600000000000000000000000000000420000C2 -:108C7000430000000000000000000000004200006F -:108C800043000000001100C843008800848100C830 -:108C90004300000000000000000000000000000091 +:108C50000000000000010101000001000000000010 +:108C60000000000000000000000000000000000004 +:108C700000000000000000000000000000000000F4 +:108C800000000000000000000000000000000000E4 +:108C900000000000000000000000000000000000D4 :108CA00000000000000000000000000000000000C4 :108CB00000000000000000000000000000000000B4 :108CC00000000000000000000000000000000000A4 -:108CD0000000000000000000000000000000000094 +:108CD00000E000000000480000C8000000000000A4 :108CE0000000000000000000000000000000000084 :108CF0000000000000000000000000000000000074 -:108D000000000000FF000F000000990000000000BC -:108D10000000C30000000000000000000000000090 +:108D00000000000000000000000000000000000063 +:108D10000000000000000000000000000000000053 :108D20000000000000000000000000000000000043 :108D30000000000000000000000000000000000033 :108D40000000000000000000000000000000000023 :108D50000000000000000000000000000000000013 :108D60000000000000000000000000000000000003 :108D700000000000000000000000000000000000F3 -:108D8000000000000000FF000F000000990000003C -:108D90003C3C0000C3000000000000000000000098 +:108D800000000000000000000000000000000000E3 +:108D900000000000000000000000000000000000D3 :108DA00000000000000000000000000000000000C3 :108DB00000000000000000000000000000000000B3 :108DC00000000000000000000000000000000000A3 @@ -182547,376 +182547,376 @@ :108E50000000000000000000000000000000000012 :108E60000000000000000000000000000000000002 :108E700000000000000000000000000000000000F2 -:108E8000000000000000000000000303000000F0EC -:108E90000000FFFF000000000000C3C3000000004E +:108E800000000000000000000000000000000000E2 +:108E900000000000000000000000000000000000D2 :108EA00000000000000000000000000000000000C2 :108EB00000000000000000000000000000000000B2 :108EC00000000000000000000000000000000000A2 :108ED0000000000000000000000000000000000092 :108EE0000000000000000000000000000000000082 -:108EF00000000000000000000000FFFF0000000074 -:108F0000000000000000000000000000030300005B -:108F100000F000003C3C000000FF000000000000EA +:108EF0000000000000000000000000000000000072 +:108F00000000000000000000000000000000000061 +:108F10000000000000000000000000000000000051 :108F20000000000000000000000000000000000041 :108F30000000000000000000000000000000000031 :108F40000000000000000000000000000000000021 :108F50000000000000000000000000000000000011 :108F60000000000000000000000000000000000001 -:108F700000000000000000000000002000000000D1 -:108F80000000000000000000000000280C0012C0DB -:108F900003E3032E0C0592C003E3032ECC09C2C0E9 +:108F700000000000000000000000000000000000F1 +:108F800000000000000000000000000000000000E1 +:108F900000000000000000000000000000000000D1 :108FA00000000000000000000000000000000000C1 :108FB00000000000000000000000000000000000B1 :108FC00000000000000000000000000000000000A1 -:108FD0000000000000000000000000000000000091 -:108FE0000000000000000000000000000000000081 +:108FD0000000000000000000000000610006000921 +:108FE000000000610004C00D00000000000000004F :108FF0000000000000000000000000000000000071 :109000000000000000000000000000000000000060 -:10901000000000000000FFAAFFAA000000000040BE -:10902000030000000000000000000000000000003D +:109010000000000000000000000000000000000050 +:109020000000000000000000000000000000000040 :109030000000000000000000000000000000000030 :109040000000000000000000000000000000000020 :109050000000000000000000000000000000000010 -:109060000000000000000000000000000000000000 +:10906000AAAA30F3FF0FFF0F00000000000000006D :1090700000000000000000000000000000000000F0 :1090800000000000000000000000000000000000E0 -:109090000000000000000000FFAAFFAA000000007E -:1090A0000045C000000000000000000000000000BB +:1090900000000000000000000000000000000000D0 +:1090A00000000000000000000000000000000000C0 :1090B00000000000000000000000000000000000B0 :1090C00000000000000000000000000000000000A0 :1090D0000000000000000000000000000000000090 -:1090E0000000000000000000000000000000000080 +:1090E0000000000030F37D00FF00000000000000E1 :1090F0000000000000000000000000000000000070 :10910000000000000000000000000000000000005F -:1091100000000000000000000000F0F0F0F000008F +:10911000000000000000000000000000000000004F :10912000000000000000000000000000000000003F :10913000000000000000000000000000000000002F :10914000000000000000000000000000000000001F :10915000000000000000000000000000000000000F -:1091600000000000000000000000000000000000FF +:1091600000000000000000002505040000000000D1 :1091700000000000000000000000000000000000EF :1091800000000000000000000000000000000000DF -:1091900000000000000000000000000030F0F0F0CF +:1091900000000000000000000000000000000000CF :1091A00000000000000000000000000000000000BF :1091B00000000000000000000000000000000000AF :1091C000000000000000000000000000000000009F :1091D000000000000000000000000000000000008F -:1091E000000000000000000000000000000000007F -:1091F0000000000000000005000000000400040062 -:10920000000000000000000000000000000000005E -:10921000000000000000000000000000000000004E -:109220000000000004000400040000000000100022 +:1091E0000000000000000000000025050400000051 +:1091F000000000000000000000000000000000006F +:10920000200000000000000000000000000000003E +:10921000000200000000000000000000000000004C +:1092200020000000400000000000000000000000DE :10923000000000000000000000000000000000002E -:10924000000000000000000000000000000000001E -:10925000000000000000000000000000000000000E -:1092600000000000000000000000000000000000FE -:1092700000000000100000000000000000000000DE -:1092800000000000000000000000000000002000BE -:10929000400200001000000000000000000000007C -:1092A000409010000000800280008000000000005C -:1092B000400010000000100000400000000000000E -:1092C000000000000000000040000000000000005E -:1092D000002040020000100000000000000000001C -:1092E00000004000004041000000000000000000BD -:1092F000000040020000020000000000000000002A -:109300000000000000090000000000000000000054 -:10931000000000000000000000000000000000004D -:10932000000000000000000000800080908000002D -:1093300084000000000000030000000000000000A6 -:10934000000000000000000000000000000000809D -:1093500001000000020000000000200000000000EA -:10936000000000000000000000000000000090006D -:10937000000000004000400000080000000800005D -:1093800000000000000000000000000000000000DD -:1093900000000000000000000008000000080000BD -:1093A0000000000800000000000000200020002055 -:1093B000000000000000000000000008000000089D -:1093C0000000000000840000000000000000000019 -:1093D00000040800000000000000001080000008E9 -:1093E000000000000000000000000000000000007D -:1093F000000000000000800080000000000000006D -:10940000000000000000000000000000000800084C -:109410000008000000000000000000000000000044 +:1092400000002000000020000000000000000000DE +:10925000000000020000000000000000000000000C +:1092600000000000000020000000000000000000DE +:1092700000000000000000000000000000000000EE +:1092800000000000000000000000000000000000DE +:1092900000000000000000000000000000000000CE +:1092A00000000000000000000000000000000000BE +:1092B00000000002000000000000000000000000AC +:1092C000000000020000000040004000000000001C +:1092D000400040000000000000000000000000000E +:1092E000000000000000400000000000000000003E +:1092F000000000000000000000000000000000006E +:10930000000000000000000000000000000000005D +:109310000000000000000400040000000000000045 +:10932000000000000000000000000000000000003D +:10933000000000000000000000000000000000002D +:10934000000002000000000000000000000000001B +:10935000000000000000000000000000000000000D +:1093600000000000000000000000000000000000FD +:1093700002000000000000000000000000000008E3 +:1093800000000000000000080008000000000000CD +:1093900000000000000000080008000000000008B5 +:1093A000000000000000000800080000000000822B +:1093B000000000000000000800000008000000009D +:1093C0000008000000000000000800080000000085 +:1093D0000000000000000000000800840000000001 +:1093E00000080000000000000008008800000000E5 +:1093F0000000000000000000000800000000000065 +:10940000000000000000000000210000000000003B +:109410000008000000000000004000000000000004 :10942000000000000000000000000000000000003C -:109430000000000000000000000000000005002007 -:1094400000400000000220000000000000000000BA -:10945000002100000000000400000000000088005F -:1094600000040004000000000000000200080000EA -:10947000000000000000000000000000000000A04C -:1094800000A0000000000008000000000000000034 +:10943000000000000000000000000000000000002C +:10944000000000000000000000000000000000001C +:10945000000000000000000000000000000000000C +:1094600000000000000000000000002100030000D8 +:1094700000000000000000000000004000000000AC +:1094800000000000000000000000000000000000DC :1094900000000000000000000000000000000000CC -:1094A0000000000000000800080000840000000028 -:1094B0000000000000A0000000000000000000000C -:1094C000000100010000000000000000000000009A -:1094D000000000000000000000010000000000008B -:1094E000000000000001000000000000000000007B -:1094F000000000000000000000000000000000006C -:10950000000000000000000000000000000000401B -:109510000000000000000000080000000000000043 -:10952000C00000000000000000000000000000007B -:109530000000040004000000000000000000000023 -:109540000040000002000000000000008440404095 -:109550000000000082000000C00000000000004188 -:1095600020000000000000000000000000000000DB -:10957000004000400040000000000000000000002B +:1094A00000000000000000000000000000000000BC +:1094B00000000000000000000000000000000000AC +:1094C000000000000000000000000000000000009C +:1094D000000000000000000000000000000000008C +:1094E000000000000000000000000000000000007C +:1094F00000000000000000840000000000000000E8 +:10950000000000000000000000000000000000005B +:10951000000000000000000000000000000000004B +:10952000000000000000000000000000000000003B +:10953000000000000000000000000000000000002B +:10954000000000000000000000000000000000001B +:10955000000000000000000000000000000000000B +:1095600000000000000000000000000000000000FB +:1095700000000000000000000000000000000000EB :1095800000000000000000000000000000000000DB :1095900000000000000000000000000000000000CB :1095A00000000000000000000000000000000000BB -:1095B00000000000800080000000000000000000AB -:1095C000000000000000800000000000000000001B -:1095D000800000000000000000000000000000000B -:1095E00000008000000000000000000000000000FB +:1095B00000000000000000000000000000000000AB +:1095C000000000000000000000000000000000009B +:1095D0000000008200000000000000000000000009 +:1095E00000A00000000000000000000000000000DB :1095F000000000000000000000000000000000006B -:10960000000000000000000000000000000000005A -:109610000000000000000000000000000000080042 -:10962000000000000000000000000000080008002A -:1096300000000000040002200100C0000000000043 -:1096400000000000000000000000200000000000FA -:109650002000000000000800080008840000C0008E -:10966000C000000200000000000000000000000038 +:109600000000000800000000000000000000000052 +:10961000000000000000000000000000000000004A +:10962000000000000000000000000000000000003A +:10963000000000000000000000000000000000002A +:10964000000000000000000000000000000000001A +:10965000000000000000000000000000000000000A +:1096600000000040000000000000000000000000BA :1096700000000000000000000000000000000000EA -:1096800000000000000000000000000000000000DA +:1096800000000020000000000000000000000000BA :1096900000000000000000000000000000000000CA -:1096A0000000000000840000000000000000000036 -:1096B00000000084000080008001200800002100DC -:1096C00000002100000000000000000080000000F9 -:1096D0000000800000000000000000000005000005 -:1096E0000000000000010000000000000000000079 -:1096F000000000000000000000000000000000006A +:1096A00000000000000000000000000000000000BA +:1096B00000000000000000000000000000000000AA +:1096C000000000000000000000000000000000009A +:1096D000000000000000000000000000000000008A +:1096E000000000000000000000000000000000007A +:1096F0000000000000000000000000002100000049 :109700000000000000000000000000000021000038 :109710000000000000000000000000000000000049 -:109720000000000000000000000000000000001128 -:1097300082000000000000004000000090040000D3 -:10974000040004000400000000000000000000000D -:1097500000030000000000020000000000210021C2 -:109760000000042000000000002100200000000094 -:109770000000000000000000820000000000000067 +:109720000000000000000000000000000000000039 +:109730000000000000000000000000000000000029 +:109740000000000000000000000000000000000019 +:109750000000000000000000000000000000000009 +:1097600000000000000000000000000000000000F9 +:1097700000000000000008000000000000000000E1 :1097800000000000000000000000000000000000D9 :1097900000000000000000000000000000000000C9 :1097A00000000000000000000000000000000000B9 -:1097B0000000000000000000000080000000000128 -:1097C0000000800080008000000000000000000019 -:1097D0000000000000000000000100000000000088 -:1097E00000000000800100000000000000010000F7 +:1097B00000000000000000000000000000000000A9 +:1097C0000000000000000000000000000000000099 +:1097D0000000000000000000000000000000000089 +:1097E0000000000000000000000000000000000079 :1097F0000000000000000000000000000000000069 :109800000000000000000000000000000000000058 :109810000000000000000000000000000000000048 :109820000000000000000000000000000000000038 -:109830000000000000000000000040104090C00345 -:1098400090820000009000009090000000A0009026 -:1098500000400002000000000000000000000000C6 -:109860000000000000A1000088400000000001008E +:109830000000000000000000000000000000000028 +:109840000000000000000000000000000000000018 +:109850000000000000000000000000000000000008 +:1098600000000000000000000000000000000000F8 :1098700000000000000000000000000000000000E8 :1098800000000000000000000000000000000000D8 :1098900000000000000000000000000000000000C8 :1098A00000000000000000000000000000000000B8 -:1098B000000000000000000000000000828305831B -:1098C00080208080000000800000808000000080F8 -:1098D0000080000000800000000000000000000088 -:1098E0000000000000000090000080200002000343 -:1098F0001103004000000000000000000000000014 +:1098B00000000000000000000000000000000000A8 +:1098C0000000000000000000000000000000000098 +:1098D0000000000000000000000000000000000088 +:1098E0000000000000000000000000000000000078 +:1098F0000000000000000000000000000000000068 :109900000000000000000000000000000000000057 :109910000000000000000000000000000000000047 :109920000000000000000000000000000000000037 -:109930000000000000000000000000000000030024 -:109940008303A002408000000000000080000000AF -:1099500000000005000000000000000000410000C1 -:109960000000000000000000008000000000000077 +:109930000000000000000000000000000000000027 +:109940000000000000000000000000000000000017 +:109950000000000000000000000000000000000007 +:1099600000000000000000000000000000000000F7 :1099700000000000000000000000000000000000E7 -:109980000000000000000000050000002000200092 +:1099800000000000000000000000000000000000D7 :1099900000000000000000000000000000000000C7 :1099A00000000000000000000000000000000000B7 :1099B00000000000000000000000000000000000A7 -:1099C000040090018500039000000000000090005A -:1099D0000000000000000000000000000000000186 -:1099E0000000000000000000000000020000000075 +:1099C0000000000000000000000000000000000097 +:1099D0000000000000000000000000000000000087 +:1099E0000000000000000000000000000000000077 :1099F0000000000000000000000000000000000067 :109A00000000000000000000000000000000000056 :109A10000000000000000000000000000000000046 :109A20000000000000000000000000000000000036 :109A30000000000000000000000000000000000026 -:109A40000000C0410040039183034000000090905B -:109A500000000000000000010000410000000000C4 -:109A600000000100000000000000000100000000F4 -:109A700000000001000000000800000000000000DD +:109A40000000000000000000000000000000000016 +:109A50000000000000000000000000000000000006 +:109A600000000000000000000000000000000000F6 +:109A700000000000000000000000000000000000E6 :109A800000000000000000000000000000000000D6 :109A900000000000000000000000000000000000C6 :109AA00000000000000000000000000000000000B6 :109AB00000000000000000000000000000000000A6 -:109AC0000000000080C0002140A191C08000000083 -:109AD0008080000000000000000300021109000067 -:109AE0000003000911090003000900000040000004 -:109AF0000000100000100000000500410000000000 -:109B00000000000000000000000000000000000550 -:109B10000000002000200000000000000000000005 +:109AC0000000000000000000000000000000000096 +:109AD0000000000000000000000000000000000086 +:109AE0000000000000000000000000000000000076 +:109AF0000000000000000000000000000000000066 +:109B00000000000000000000000000000000000055 +:109B10000000000000000000000000000000000045 :109B20000000000000000000000000000000000035 :109B30000000000000000000000000000000000025 -:109B400000000000000000210002808011000000E1 -:109B500000000000000000000009000080008000FC -:109B600000100000000000000011000000000000D4 -:109B7000A1108300410003002102004100004000C9 +:109B40000000000000000000000000000000000015 +:109B50000000000000000000000000000000000005 +:109B600000000000000000000000000000000000F5 +:109B700000000000000000000000000000000000E5 :109B800000000000000000000000000000000000D5 :109B900000000000000000000000000000000000C5 :109BA00000000000000000000000000000000000B5 :109BB00000000000000000000000000000000000A5 -:109BC000000000000000000002C1000090900100B1 -:109BD0000000000000000000000000004000040041 -:109BE0000400000000000000000000000000000071 -:109BF0000000090108004000000001000000000012 +:109BC0000000000000000000000000000000000095 +:109BD0000000000000000000000000000000000085 +:109BE0000000000000000000000000000000000075 +:109BF0000000000000000000000000000000000065 :109C00000000000000000000000000000000000054 :109C10000000000000000000000000000000000044 :109C20000000000000000000000000000000000034 :109C30000000000000000000000000000000000024 -:109C400000000000000000000000884100C8430040 -:109C5000882100060000430000000000008100C8C9 -:109C600043000000810000C800000021810000C8FE -:109C700000000000500000C843000000008100C840 -:109C80004300000000000000000000000000000091 +:109C40000000000000000000000000000000000014 +:109C50000000000000000000000000000000000004 +:109C600000000000000000000000000000000000F4 +:109C700000000000000000000000000000000000E4 +:109C800000000000000000000000000000000000D4 :109C900000000000000000000000000000000000C4 :109CA00000000000000000000000000000000000B4 :109CB00000000000000000000000000000000000A4 -:109CC000000000000000000000000000FFFFFFFF98 -:109CD000EF00FF0000000000FF00FF000000003068 -:109CE0000030000000000000000000000000000044 -:109CF00000000000000000F0000000000000000074 +:109CC0000000000000000000000000000000000094 +:109CD0000000000000000000000000000000000084 +:109CE0000000000000000000000000000000000074 +:109CF0000000000000000000000000000000000064 :109D00000000000000000000000000000000000053 :109D10000000000000000000000000000000000043 :109D20000000000000000000000000000000000033 :109D30000000000000000000000000000000000023 -:109D400000000000000000000000000000000F0FF5 -:109D5000FFFF00EF00FF0000000000FF00FF000019 +:109D40000000000000000000000000000000000013 +:109D50000000000000000000000000000000000003 :109D600000000000000000000000000000000000F3 -:109D7000000000000000000000F0000000000000F3 +:109D700000000000000000000000000000000000E3 :109D800000000000000000000000000000000000D3 :109D900000000000000000000000000000000000C3 :109DA00000000000000000000000000000000000B3 :109DB00000000000000000000000000000000000A3 :109DC0000000000000000000000000000000000093 -:109DD00000FFFF0400FF0000C33CC33C0000FFFF86 -:109DE0000000FB82FB0000000000000000000000FB -:109DF000000000000000000000000F0F0000000045 +:109DD0000000000000000000000000000000000083 +:109DE0000000000000000000000000000000000073 +:109DF0000000000000000000000000000000000063 :109E00000000000000000000000000000000000052 :109E10000000000000000000000000000000000042 :109E20000000000000000000000000000000000032 :109E30000000000000000000000000000000000022 :109E40000000000000000000000000000000000012 -:109E50000000FF04FF0400FF003FFF00FF000000C0 -:109E6000FFFF0000FB82FB0000000000000000007C -:109E70000000000000000000000000000F0F0000C4 +:109E50000000000000000000000000000000000002 +:109E600000000000000000000000000000000000F2 +:109E700000000000000000000000000000000000E2 :109E800000000000000000000000000000000000D2 :109E900000000000000000000000000000000000C2 :109EA00000000000000000000000000000000000B2 :109EB00000000000000000000000000000000000A2 :109EC0000000000000000000000000000000000092 -:109ED0000000000080610036C00920000000003052 -:109EE00000000000000080610036000900000061F1 -:109EF00000068009000000610006800920008061E2 -:109F00000004C00D000000610A28000900000000E4 -:109F100000000000000000000000000000000061E0 -:109F20000006000D0000000000000000000000001E +:109ED0000000000000000000000000000000000082 +:109EE0000000000000000000000000000000000072 +:109EF0000000000000000000000000000000000062 +:109F00000000000000000000000000000000000051 +:109F10000000000000000000000000000000000041 +:109F20000000000000000000000000000000000031 :109F30000000000000000000000000000000000021 :109F40000000000000000000000000000000000011 -:109F5000000000000000C3C3C3C300AAA2A2000007 -:109F600000000000000000000000000000FFF0F012 -:109F700000000000F0F000FF00000000FFFF0303FE -:109F8000020016BE00005555C3C300000FFF0FFFAF +:109F50000000000000000000000000000000000001 +:109F600000000000000000000000000000000000F1 +:109F700000000000000000000000000000000000E1 +:109F800000000000000000000000000000000000D1 :109F900000000000000000000000000000000000C1 -:109FA000000000003C000000000000000000000075 +:109FA00000000000000000000000000000000000B1 :109FB00000000000000000000000000000000000A1 :109FC0000000000000000000000000000000000091 -:109FD0000000000000000000C3C3C3C3FFAAA2A288 -:109FE000000000000000000000000000000000FF72 -:109FF000F0F000000000F0F000FF00000000FFFFA4 -:10A000000303020016BE00005555C3C30000FFFF46 -:10A01000FFFF000000000000000000000000000042 -:10A020000000000000003C000000000000000000F4 +:109FD0000000000000000000000000000000000081 +:109FE0000000000000000000000000000000000071 +:109FF0000000000000000000000000000000000061 +:10A000000000000000000000000000000000000050 +:10A010000000000000000000000000000000000040 +:10A020000000000000000000000000000000000030 :10A030000000000000000000000000000000000020 :10A040000000000000000000000000000000000010 -:10A05000000000000000000000000000F0F0FFCF52 -:10A06000FCFF0000000000000000000000000000F5 +:10A050000000000000000000000000000000000000 +:10A0600000000000000000000000000000000000F0 :10A0700000000000000000000000000000000000E0 -:10A0800000000000CFCF0F0F0000000000F0F00034 +:10A0800000000000000000000000000000000000D0 :10A0900000000000000000000000000000000000C0 -:10A0A000000000000000000000003C000000000074 +:10A0A00000000000000000000000000000000000B0 :10A0B00000000000000000000000000000000000A0 :10A0C0000000000000000000000000000000000090 -:10A0D000000000000000000000000000FFFF0FF083 -:10A0E000FCFFCFFF000000000000000000000000A7 +:10A0D0000000000000000000000000000000000080 +:10A0E0000000000000000000000000000000000070 :10A0F0000000000000000000000000000000000060 -:10A10000000000000000CFCFFFFF0000000000F0C3 -:10A11000F00000000000000000000000000000004F -:10A120000000000000000000000000003C000000F3 +:10A10000000000000000000000000000000000004F +:10A11000000000000000000000000000000000003F +:10A12000000000000000000000000000000000002F :10A13000000000000000000000000000000000001F -:10A140000000020000000400000000000000000009 -:10A150000000880000000000000000000000000077 -:10A1600000002000040020000000040000000000A7 -:10A17000000000000000000040000000000000009F -:10A18000000000002000200000000000000000008F -:10A1900000000000000000001000000000000000AF +:10A14000000000000000000000000000000000000F +:10A1500000000000000000000000000000000000FF +:10A1600000004000000000000000000000000000AF +:10A1700000000000000000000000000000000000DF +:10A1800000000000000000000000000000000000CF +:10A1900000000000000000000000000000000000BF :10A1A00000000000000000000000000000000000AF :10A1B000000000000000000000000000000000009F -:10A1C000000000000040000000001000100000002F -:10A1D0000000100010020000004000024002400099 -:10A1E000000010401002400040001000410000003C -:10A1F00000000000000010020000100240000000FB -:10A2000000400000100010000000100000000000DE -:10A2100000000000000010000000000040000000EE -:10A22000000000000000000000000000000000002E -:10A2300000000000004000000000000000000000DE -:10A2400004000000000000000010020000400000B8 -:10A2500000000000000000000000000002000000FC -:10A2600000000200000002000000020000000200E6 -:10A2700002000000000000000000000000000000DC -:10A28000000000000000004000000000000000008E -:10A2900000000004000000000000000000000000BA -:10A2A000001000000000000000000000000000009E +:10A1C000000000000000000000001000100000006F +:10A1D0000000100010020000104010024002400079 +:10A1E00040000000100010004000100000000000BF +:10A1F00000000000100010400000100200024100AA +:10A20000000040400020100000000000000000009E +:10A21000000000000000100000001000000000001E +:10A2200000004000000000000000000000000000EE +:10A23000000000000000000000000000000000001E +:10A24000000000000000000000000000000000000E +:10A2500000000000000000000000000000000000FE +:10A2600000000000000000000200000000000000EC +:10A2700000000000000000000000000000000000DE +:10A2800000000000000000000000000000000000CE +:10A2900000000000000000000000000000000000BE +:10A2A00000000000000000000000000000000000AE :10A2B000000000000000000000000000000000009E -:10A2C0000000000800000008000000000008000076 -:10A2D000000000000000000000000000000000007E -:10A2E0000000000800000008000000000008000056 -:10A2F000000000000000000000000000000000005E -:10A300000000000000080000000800000000000835 -:10A31000000000000000000000000000000000003D -:10A32000000000000010000000080000000000080D +:10A2C000000000000000000000000000000000008E +:10A2D000000000000000000000000008000800006E +:10A2E0000000000000000000000000080000000066 +:10A2F0000000000000000000000000000084008852 +:10A3000000000000000000000000000000880000C5 +:10A310000000000000000000000000000008000035 +:10A3200000000000000000000000000000840000A9 :10A33000000000000000000000000000000000001D :10A34000000000000000000000000000000000000D :10A3500000000000000000000000000000000000FD :10A3600000000000000000000000000000000000ED :10A3700000000000000000000000000000000000DD -:10A3800000000000000000000400000000000000C9 +:10A3800000000000000000000000000000000008C5 :10A3900000000000000000000000000000000000BD -:10A3A00000000000000000000000000000080000A5 -:10A3B000000000000000000000000000000000009D +:10A3A00000000000000000000000000000000000AD +:10A3B000000000000000000000840082000000088F :10A3C000000000000000000000000000000000008D :10A3D000000000000000000000000000000000007D :10A3E000000000000000000000000000000000006D -:10A3F0000000000000000000000000000000080055 -:10A4000000000000000000000000008200000800C2 -:10A41000000000000000000000000000000000A09C -:10A42000000008000000000000000000000008001C -:10A43000080800000000000000000000000000000C -:10A440000000000000000000000000000040840048 -:10A4500000400000000000000000000000000000BC -:10A4600000000000000000040000000000040000E4 -:10A470000040000000400004000000000000000058 -:10A48000000000400040000000000000000000004C +:10A3F00000000000000000840000000000000000D9 +:10A40000000000000000000000000000000000004C +:10A41000000000000000000000000000000000003C +:10A42000000000000000000000000000000000002C +:10A43000000000000000000000000000000000001C +:10A44000000000000000000000000000000000000C +:10A4500000000000000000000000000000000000FC +:10A4600000000000000000000000000000000000EC +:10A4700000000000000000000000000000000000DC +:10A4800000000000000000000000000000000000CC :10A4900000000000000000000000000000000000BC -:10A4A000000000000000004000000000000000006C -:10A4B000000000000040000000000000000000005C +:10A4A00000000000000000000000000000000000AC +:10A4B000000000000000000000000000000000009C :10A4C000000000000000000000000000000000008C :10A4D000000000000000000000000000000000007C :10A4E000000000000000000000000000000000006C :10A4F000000000000000000000000000000000005C -:10A50000000000000040000000000000000000000B -:10A5100000000000000000000000000000400000FB +:10A50000000000000000000000000000000000004B +:10A51000000000000000000000000000000000003B :10A52000000000000000000000000000000000002B :10A53000000000000000000000000000000000001B -:10A54000000000000000000000000000000000000B -:10A5500000000000000000000000000000000000FB +:10A540000000000000000008000000000000000003 +:10A5500000000000000800000000000000000000F3 :10A5600000000000000000000000000000000000EB :10A5700000000000000000000000000000000000DB :10A5800000000000000000000000000000000000CB -:10A59000000000000000000000000000000000407B +:10A5900000000000000000000000000000000000BB :10A5A00000000000000000000000000000000000AB :10A5B000000000000000000000000000000000009B :10A5C000000000000000000000000000000000008B @@ -182924,25 +182924,25 @@ :10A5E000000000000000000000000000000000006B :10A5F000000000000000000000000000000000005B :10A60000000000000000000000000000000000004A -:10A61000000000000000000000000800000008002A -:10A620002100020000000000000000000000000007 +:10A61000000000000000000000000000000000003A +:10A62000000000000000000000000000000000002A :10A63000000000000000000000000000000000001A -:10A64000000000000000000000000000000000000A +:10A640000000000000000000000000030000000007 :10A6500000000000000000000000000000000000FA :10A6600000000000000000000000000000000000EA :10A6700000000000000000000000000000000000DA -:10A6800000000000000000000000000000000000CA -:10A6900000000000000000000000080000000000B2 +:10A6800000000000000000000000000800000000C2 +:10A6900000000000000000000000000000000000BA :10A6A00000000000000000000000000000000000AA :10A6B000000000000000000000000000000000009A :10A6C000000000000000000000000000000000008A :10A6D000000000000000000000000000000000007A -:10A6E0000000020000000000000000000000000068 +:10A6E000000000000000000000000000000000006A :10A6F000000000000000000000000000000000005A :10A700000000000000000000000000000000000049 -:10A710000000000000000000000000000000200019 +:10A710000000000000000000000000040000000035 :10A720000000000000000000000000000000000029 -:10A730000004000000000000000000000000000015 +:10A730000000000000000000000000000000000019 :10A740000000000000000000000000000000000009 :10A7500000000000000000000000000000000000F9 :10A7600000000000000000000000000000000000E9 @@ -183041,76 +183041,76 @@ :10AD30000000000000000000000000000000000013 :10AD40000000000000000000000000000000000003 :10AD500000000000000000000000000000000000F3 -:10AD600000000000000000000000000000000000E3 +:10AD600000000000000000000000000000040000DF :10AD700000000000000000000000000000000000D3 -:10AD800000000000000000000000000000000000C3 -:10AD90000000000000800000000000000000000033 -:10ADA000820000000000000000000000820000009F +:10AD800001000000000000000000000000040000BE +:10AD90000000000000000000000000000080000033 +:10ADA0000000000000800000000000000000000023 :10ADB0000000000000000000000000000000000093 -:10ADC0000000000000000000000000000000000083 +:10ADC000000000000000000000000000000000047F :10ADD0000000000000000000000000000000000073 -:10ADE00000000000000000000000000040400000E3 -:10ADF00000000000000000000000000021900000A2 -:10AE000000000000000000000000000240400000C0 -:10AE10000000000040900010000000000000000052 -:10AE20000000000040000000000000400000404022 -:10AE30000000000000000000000000000000219061 -:10AE40000000400000000000000000000000404042 -:10AE50000000000000000000000000000000009062 +:10ADE0000000000000000000000000000000000063 +:10ADF0000000000000000000000000000000000053 +:10AE00000000200000000000000000000000000022 +:10AE10000000000000000000000000000000001022 +:10AE200000000000400040100000000040004040D2 +:10AE30000000000000000000000000000000000012 +:10AE400000004000000000000000000000000000C2 +:10AE500000000000000000000000000000000000F2 :10AE600000000000000000000000000000000000E2 -:10AE700000000000020000000000000000000000D0 -:10AE800000000000000000000000000000000208B8 -:10AE9000000000400200000002000000000000006E -:10AEA0000000000100410000000000000000000060 +:10AE700000000000000000000000000002000000D0 +:10AE800000000000000000000000000000000000C2 +:10AE900000000000000000000000000000000000B2 +:10AEA00000000001000000000000000000000000A1 :10AEB0000000000000000000000000000000000092 :10AEC0000000000000000000000000000000000082 -:10AED00000000000004100000041000000000000F0 -:10AEE0000040000000000000000000000000000022 -:10AEF0000000000003C00008000000000000000087 -:10AF00000000000000000000000000000000000041 -:10AF1000000000000000000400000000000000002D -:10AF20000000000000000000000000000000000021 -:10AF3000000000C000000000000000000000000051 -:10AF40000000000000000000000000000000000001 -:10AF5000000000000000000000C000000000000031 -:10AF600000000000000000000000000000000000E1 -:10AF700000000100000000000000000000000000D0 +:10AED000020002000200000000000000000002006A +:10AEE0000040000000080000000000080000000012 +:10AEF0000000000000000000000002000000000050 +:10AF00000000000800080000000000080000000029 +:10AF10000000000800000000000000000000000029 +:10AF20000000000800000008000000000008000009 +:10AF3000000002000004000000000000000000000B +:10AF400000000000000800080000000000080000E9 +:10AF500000000000000800000000000000000000E9 +:10AF600000000000000800000000000000000000D9 +:10AF700000000000000000000000000000000000D1 :10AF800000000000000000000000000000000000C1 -:10AF900000000000040000000000000000000000AD -:10AFA0000000000000410000000000000000000060 +:10AF900000000000000000000000000000000000B1 +:10AFA00000000000000000000000000000000000A1 :10AFB0000000000000000000000000000000000091 -:10AFC00000000000000000000000000000008800F9 +:10AFC0000000000000000000000000000000000081 :10AFD0000000000000000000000000000000000071 -:10AFE0000000000000000000000000000000000061 -:10AFF0000000000020000000000000000000000031 +:10AFE00000000000000000000000000000000084DD +:10AFF0000000000000000000000000000000000051 :10B000000000000000000000000000000000000040 -:10B01000000000000000000000000000110000001F -:10B020000000000000000000000000000000000020 +:10B010000000000000000000000000000000000030 +:10B020000000000000000000000000000000090017 :10B030000000000000000000000000000000000010 :10B040000000000000000000000000000000000000 :10B0500000000000000000000000000000000000F0 :10B0600000000000000000000000000000000000E0 -:10B070000000000000000000008000000008000048 -:10B080000000004000000000000000000000000080 -:10B09000000000000000000000210000000000008F -:10B0A0000000000000400000000000000000000060 -:10B0B000000000000000000000000004000000008C -:10B0C000000000410000000000000004000000003B -:10B0D0000000000000000000001100000004000457 -:10B0E0000000000000000000000000000000000060 -:10B0F000000000000000000000000004000000004C +:10B0700000000000000000000000000000000000D0 +:10B0800000000000000000000000000000000100BF +:10B090000000000000000000004000000000000070 +:10B0A00000000000000000000000000000000000A0 +:10B0B0000000000000000000000000000000000090 +:10B0C000000000110000000000000000000000006F +:10B0D0000000000000000000000000000000000070 +:10B0E0000000000000000000000000000000080058 +:10B0F0000000000000000000000000000000000050 :10B10000000000000000000000000000000000003F -:10B110000000000000000000000800000000000027 +:10B11000200000000000000000000000000000000F :10B12000000000000000000000000000000000001F :10B13000000000000000000000000000000000000F -:10B1400000400000000000000000000002000000BD -:10B15000000000000000000000000090000000005F +:10B1400000000000000000000000000000000000FF +:10B1500000000000000000000000000000000000EF :10B1600000000000000000000000000000000000DF -:10B17000000000009000000000000000000000003F +:10B1700000000000000000000000000000000000CF :10B1800000000000000000000000000000000000BF :10B1900000000000000000000000000000000000AF -:10B1A000000000000000000000000000000000009F -:10B1B000000000000000000000000000000000008F +:10B1A000000000000000000088008800400000004F +:10B1B000000000040000000000000000000000008B :10B1C000000000000000000000000000000000007F :10B1D000000000000000000000000000000000006F :10B1E000000000000000000000000000000000005F @@ -183123,74 +183123,74 @@ :10B2500000000000000000000000000000000000EE :10B2600000000000000000000000000000000000DE :10B2700000000000000000000000000000000000CE -:10B2800000000000000000000000000000000000BE +:10B2800000080000000000000000000000000000B6 :10B2900000000000000000000000000000000000AE :10B2A000000000000000000000000000000000009E :10B2B000000000000000000000000000000000008E -:10B2C000000000000000000000000000000000007E +:10B2C0000000000800000000000000000000000076 :10B2D000000000000000000000000000000000006E :10B2E000000000000000000000000000000000005E :10B2F000000000000000000000000000000000004E -:10B30000000000000000000000000000000000003D -:10B31000110000000000000000000000000000001C +:10B30000000010000000000000000000000000002D +:10B31000000000000000000000000000020000002B :10B32000000000000000000000000000000000001D -:10B3300000000200000020000000000000000000EB -:10B3400000002000000000000008000000000000D5 -:10B3500000000000110008000000000000000400D0 -:10B3600000000800000000000000200002000000B3 +:10B33000000000000000000000000000000000000D +:10B3400000000000000000000000000000000000FD +:10B3500000000000000000000000000000000000ED +:10B3600000000000000000000000000000000000DD :10B3700000000000000000000000000000000000CD :10B3800000000000000000000000000000000000BD :10B3900000000000000000000000000000000000AD :10B3A000000000000000000000000000000000009D -:10B3B000000000000000000000000000000000008D +:10B3B0000000000000000000020000000000C000CB :10B3C000000000000000000000000000000000007D :10B3D000000000000000000000000000000000006D :10B3E000000000000000000000000000000000005D :10B3F000000000000000000000000000000000004D :10B40000000000000000000000000000000000003C -:10B41000000000000000000000000000000000002C +:10B41000000000000000000020000000000000000C :10B42000000000000000000000000000000000001C -:10B43000000000000000000000000000000000000C -:10B4400000000000000000000000000000000000FC +:10B43000000000000000000000008000000000008C +:10B44000800000000000000000000000000000007C :10B4500000000000000000000000000000000000EC :10B4600000000000000000000000000000000000DC :10B4700000000000000000000000000000000000CC -:10B4800000000000000000030000000000000000B9 -:10B4900000000000000000000000000000000000AC +:10B4800000000000000000000000000000000000BC +:10B49000000000000000000000000000000000416B :10B4A000000000000000000000000000000000009C -:10B4B000000000000000000000000000000000008C +:10B4B000000000000000800000000000000000000C :10B4C000000000000000000000000000000000007C :10B4D000000000000000000000000000000000006C :10B4E000000000000000000000000000000000005C :10B4F000000000000000000000000000000000004C :10B50000000000000000000000000000000000003B :10B51000000000000000000000000000000000002B -:10B520000000000000000000000000000800000013 -:10B530000000080000000000000000000000000003 +:10B52000000000000000000000000000000000001B +:10B530000000000000000800A00000000000000063 :10B5400000000000000000000000000000000000FB :10B5500000000000000000000000000000000000EB :10B5600000000000000000000000000000000000DB :10B5700000000000000000000000000000000000CB -:10B580000000000000000000000088000000000033 +:10B5800000000000000000000000000000000000BB :10B5900000000000000000000000000000000000AB -:10B5A000000000000000000000000000000000009B -:10B5B000000000000000000000000000000000008B -:10B5C000000000000000000000000000000000007B +:10B5A0008800000000000000000000000000000013 +:10B5B000000000000000009000900008000800005B +:10B5C00000020008009000080000000000000000D9 :10B5D000000000000000000000000000000000006B :10B5E000000000000000000000000000000000005B :10B5F000000000000000000000000000000000004B -:10B60000000000000000000000000000000020001A +:10B60000000000000000000000000000000000003A :10B61000000000000000000000000000000000002A :10B62000000000000000000000000000000000001A :10B63000000000000000000000000000000000000A -:10B6400000000000000000000000000000000000FA +:10B6400000000080000000000080000000000000FA :10B6500000000000000000000000000000000000EA :10B6600000000000000000000000000000000000DA :10B6700000000000000000000000000000000000CA :10B6800000000000000000000000000000000000BA :10B6900000000000000000000000000000000000AA -:10B6A000000000000000000000000000000000009A -:10B6B000000000000000000000000000000000008A +:10B6A0000000000800000000000000000000000092 +:10B6B000000000000000000000000000000000800A :10B6C000000000000000000000000000000000007A :10B6D000000000000000000000000000000000006A :10B6E000000000000000000000000000000000005A @@ -183198,16 +183198,16 @@ :10B700000000000000000000000000000000000039 :10B710000000000000000000000000000000000029 :10B720000000000000000000000000000000000019 -:10B7300000000000000000880088000000000000F9 -:10B7400000000000000000000000000000000000F9 +:10B730000000000000000000000000000000009079 +:10B7400000100000000000000000000000000000E9 :10B7500000000000000000000000000000000000E9 :10B7600000000000000000000000000000000000D9 :10B7700000000000000000000000000000000000C9 -:10B780000000000000000000000000000000840035 -:10B7900000C80000000000000000000000000000E1 -:10B7A0000000000000000000000000000000000099 +:10B7800000000000000000000000000000000000B9 +:10B7900000000000000000000000000000000000A9 +:10B7A000000000000000810000C800000000000050 :10B7B0000000000000000000000000000000000089 -:10B7C0000000000000000000000000000000000079 +:10B7C0000000000000000000000000000000000673 :10B7D0000000000000000000000000000000000069 :10B7E0000000000000000000000000000000000059 :10B7F0000000000000000000000000000000000049 @@ -183215,7 +183215,7 @@ :10B810000000000000000000000000000000000028 :10B820000000000000000000000000000000000018 :10B830000000000000000000000000000000000008 -:10B8400000000000000000000000000000000000F8 +:10B8400000000000300000000000000000000000C8 :10B8500000000000000000000000000000000000E8 :10B8600000000000000000000000000000000000D8 :10B8700000000000000000000000000000000000C8 @@ -183223,8 +183223,8 @@ :10B8900000000000000000000000000000000000A8 :10B8A0000000000000000000000000000000000098 :10B8B0000000000000000000000000000000000088 -:10B8C0000000000000000000000000000000000078 -:10B8D0000000000000000000000000000000000068 +:10B8C0000000000000003000000000000000000048 +:10B8D0000001000000000000000000000000000067 :10B8E0000000000000000000000000000000000058 :10B8F0000000000000000000000000000000000048 :10B900000000000000000000000000000000000037 @@ -183239,7 +183239,7 @@ :10B9900000000000000000000000000000000000A7 :10B9A0000000000000000000000000000000000097 :10B9B0000000000000000000000000000000000087 -:10B9C000000000002424000000000000000000002F +:10B9C0000000000000000000000090909090000037 :10B9D0000000000000000000000000000000000067 :10B9E0000000000000000000000000000000000057 :10B9F0000000000000000000000000000000000047 @@ -183247,14 +183247,14 @@ :10BA10000000000000000000000000000000000026 :10BA20000000000000000000000000000000000016 :10BA30000000000000000000000000000000000006 -:10BA400000000000000000000000000000000000F6 +:10BA400000000000000000000000000099909990A4 :10BA500000000000000000000000000000000000E6 :10BA600000000000000000000000000000000000D6 :10BA700000000000000000000000000000000000C6 :10BA800000000000000000000000000000000000B6 -:10BA90000000000000000000000000610006800DB2 +:10BA900000000000000000000000000000000000A6 :10BAA0000000000000000000000000000000000096 -:10BAB0000000000000000000000000000000000086 +:10BAB000000000610006800D000000000000000092 :10BAC0000000000000000000000000000000000076 :10BAD0000000000000000000000000000000000066 :10BAE0000000000000000000000000000000000056 @@ -183292,49 +183292,49 @@ :10BCE0000000000000000000000000000000000054 :10BCF0000000000000000000000000000000000044 :10BD00000000000000000000000000000000000033 -:10BD10000000000000000000000000000000000023 -:10BD20000000000000000000000000000000000013 -:10BD30000000000000000000000000000000000003 -:10BD400000000000000000000000000000000000F3 -:10BD500000000000000040000000000000000000A3 -:10BD6000000000000000820000000000020000004F -:10BD700000000000000000000000000000000000C3 -:10BD80000000000000000000000000000082000031 -:10BD90000000000000000000000000000080000023 -:10BDA0000000000041000000000000000000000052 -:10BDB0000000000000000000100010001002000051 -:10BDC000000010C010001000000000000000000083 -:10BDD000000000020000400010020000000000000F -:10BDE0004000000000020000000000000000000011 -:10BDF0000000000000020000000020000000000021 -:10BE00000000000000C0000000000000000000036F -:10BE1000000000000000008200000000000000029E -:10BE2000000000000000000000400210004002007E +:10BD10000000000000000000000000000000200003 +:10BD20002000200020000000200020000000200053 +:10BD3000200020000000000000000000880020001B +:10BD40000000000020000000200020000000000093 +:10BD50002000200000000000400000000000000063 +:10BD6000200040004000200000002000200088004B +:10BD70000000200020000000000020000000000063 +:10BD800020002000200020000000200020000000F3 +:10BD90000000200020000000000000000000000063 +:10BDA0000000000000000000000000000000000093 +:10BDB0000000000000000000100010001000100043 +:10BDC0000000100200001000000000000000000051 +:10BDD0000000000010000000000000000000000053 +:10BDE00040024000000200000000000000000000CF +:10BDF0000000000000020000000000000000000041 +:10BE000040000000000000000000000000000000F2 +:10BE10000000000000000000000000000000000022 +:10BE20000000000000000000000000000000000012 :10BE30000000000000000000000000000000000002 -:10BE40000000000000000003020300008200000068 -:10BE50000000820000008200000000058200000057 -:10BE60000000000000000000000000400040000052 -:10BE70000040000000000000000000000000001072 -:10BE80000000000000000009002100000040000048 -:10BE90000040000000000000000000400000000022 -:10BEA0000010000000000000001000080008000062 -:10BEB00000000000000000000084000000000000FE -:10BEC0000000000000000000000000080008000062 -:10BED00000080000000000000000000000840000D6 -:10BEE0000000000000000000000003C000C0008847 -:10BEF00000000010000000000000000000400000F2 -:10BF000000000000000000000000000000000040F1 -:10BF10000000000000000000000000000000000021 -:10BF2000000000000000000000020000000000000F +:10BE400000000000000000000000000000000000F2 +:10BE500000000000000000000000000000000000E2 +:10BE600000000000000000000000000000000000D2 +:10BE700000000000000000000000000000000000C2 +:10BE80000000000000000040004000000000000032 +:10BE90000000000000000040000000000200000060 +:10BEA000000000000000000800080000000000087A +:10BEB0000008000000000000000800000000000072 +:10BEC000000000000000000800080000000000085A +:10BED0000008000000000000000800000000000052 +:10BEE0000000000000000000000800080000000042 +:10BEF000000800080000000000000008000000002A +:10BF00000000000000000000000800080000000021 +:10BF10000008000800000000000000080000000009 +:10BF20000000000000000000000000000000000011 :10BF30000000000000000000000000000000000001 -:10BF400000000000000000000000000800000000E9 +:10BF400000000000000000000000000000000000F1 :10BF500000000000000000000000000000000000E1 :10BF600000000000000000000000000000000000D1 -:10BF700000080000000000000000000000000000B9 +:10BF700000000000000000000000000000000000C1 :10BF800000000000000000000000000000000000B1 -:10BF90000000000000000000000000400000000061 -:10BFA0000000000000000000000000004100000050 -:10BFB0000000000000000000000000000000000081 +:10BF900000000000000000000000000000000000A1 +:10BFA0000000000000000000000000000000000091 +:10BFB0000000000000000000000000000000080079 :10BFC0000000000000000000000000000000000071 :10BFD0000000000000000000000000000000000061 :10BFE0000000000000000000000000000000000051 @@ -183342,55 +183342,55 @@ :10C000000000000000000000000000000000000030 :10C010000000000000000000000000000000000020 :10C020000000000000000000000000000000000010 -:10C030000000000000000000000000000000000000 -:10C0400000000000000000000000000000000000F0 -:10C050000000004000000000000000400000000060 -:10C0600000000005000000000000000000000000CB +:10C030000000400000000000C00000000000000000 +:10C04000100000000000000082000000000000005E +:10C0500000000000000000000000000000000000E0 +:10C0600000000000000000000000080000000000C8 :10C0700000000000000000000000000000000000C0 -:10C08000000000000000000000000000000000218F -:10C090000000000000000000010900000000000096 -:10C0A0000000000800000000080000000000000080 -:10C0B0000000000000000000000000000000000080 -:10C0C00020A00000000800000000000000000000A8 -:10C0D000004000000000000000000000008200009E -:10C0E0000000004000000000000000000000000010 -:10C0F0000000200000000000000000000000000020 -:10C10000000000000040024002400000000000006B -:10C110000000400000002004050040000000000076 -:10C12000000000000004000000008000000000008B -:10C1300000000000000000000000000000000000FF -:10C1400000000000000000000000000000000000EF +:10C0800000000000000000000000000000000000B0 +:10C0900000000000000000000000000000000000A0 +:10C0A0000000000000000000000000000000080088 +:10C0B0000800100000000000000000000000000068 +:10C0C0000000000000000000000041000000080027 +:10C0D0000800030010000000110000000000000034 +:10C0E0000000000000001000000000000000000040 +:10C0F0001000100010000000000000000000000010 +:10C100000000000000000000080000000000000027 +:10C1100008000800100000000000000000000000FF +:10C120000000000000000000080000000000000007 +:10C1300000000000000008000000000000000000F7 +:10C14000000000000000820000000000000000006D :10C1500000000000000000000000000000000000DF -:10C1600000000000000800000000000000000000C7 +:10C1600000000000000000000000000000000000CF :10C1700000000000000000000000000000000000BF :10C1800000000000000000000000000000000000AF :10C19000000000000000000000000000000000009F -:10C1A0000000000000000000000000080000000087 -:10C1B0000000000000C000000000000000080000B7 +:10C1A000000000000000000000000000000000008F +:10C1B000000000000000000000000000000000007F :10C1C000000000000000000000000000000000006F -:10C1D000000000000000000000000000000000005F -:10C1E000000000040020000000000000000000002B -:10C1F000000000000000000000000000000000003F +:10C1D00000000084000000000000000000000000DB +:10C1E0000000000000000400040000000500000042 +:10C1F000000005000000000000000000000000003A :10C20000000000000000000000000000000000002E -:10C21000000000000400000000000000000000001A +:10C21000000000000000000000000000000000001E :10C22000000000000000000000000000000000000E :10C2300000000000000000000000000000000000FE :10C2400000000000000000000000000000000000EE -:10C2500000000000000000000000000000000000DE +:10C2500000000000000000000000000000020000DC :10C2600000000000000000000000000000000000CE -:10C2700000000000001000000000000000000000AE +:10C2700000000000000000000000000000000000BE :10C2800000000000000000000000000000000000AE :10C29000000000000000000000000000000000009E :10C2A000000000000000000000000000000000008E -:10C2B0000000000000000000000000080000000076 -:10C2C00000000000200000000000000000880000C6 -:10C2D00000000000020000C0000000080000000094 -:10C2E0000000000000820000000000000004008840 -:10C2F000000000000000000000000088200000880E -:10C30000020002000000000009000000020000001E -:10C3100000880240020000000000008808400288F7 -:10C3200000000800000011001100000000000000E3 -:10C3300000400000000000000000000000000000BD +:10C2B00000000000000000000000080000020888E4 +:10C2C000080041000800080008000000000000000D +:10C2D000000000000000000000000800000008004E +:10C2E000080003000800080008000000000000002B +:10C2F0000000000000000000000000000800000036 +:10C30000080008000300000008000800000000000A +:10C31000000000000000000000000000080000080D +:10C3200008000800080000000800080000000000E5 +:10C3300000000000000000000000000000000000FD :10C3400000000000000000000000000000000000ED :10C3500000000000000000000000000000000000DD :10C3600000000000000000000000000000000000CD @@ -183398,7 +183398,7 @@ :10C3800000000000000000000000000000000000AD :10C39000000000000000000000000000000000009D :10C3A000000000000000000000000000000000008D -:10C3B00008008800000000000000000000000000ED +:10C3B000000000000000000000000000000000007D :10C3C000000000000000000000000000000000006D :10C3D000000000000000000000000000000000005D :10C3E000000000000000000000000000000000004D @@ -183406,7 +183406,7 @@ :10C40000000000000000000000000000000000002C :10C41000000000000000000000000000000000001C :10C42000000000000000000000000000000000000C -:10C430000400A10000000000000000000000000057 +:10C4300000000000000000000000000000000000FC :10C4400000000000000000000000000000000000EC :10C4500000000000000000000000000000000000DC :10C4600000000000000000000000000000000000CC @@ -183414,7 +183414,7 @@ :10C4800000000000000000000000000000000000AC :10C49000000000000000000000000000000000009C :10C4A000000000000000000000000000000000008C -:10C4B00000009100210011000300000000000000B6 +:10C4B000000000000000000000000000000000007C :10C4C000000000000000000000000000000000006C :10C4D000000000000000000000000000000000005C :10C4E000000000000000000000000000000000004C @@ -183422,23 +183422,23 @@ :10C50000000000000000000000000000000000002B :10C51000000000000000000000000000000000001B :10C52000000000000000000000000000000000000B -:10C5300000000000080001000000010000000000F1 +:10C5300000000000000000000000000000000000FB :10C5400000000000000000000000000000000000EB :10C5500000000000000000000000000000000000DB :10C5600000000000000000000000000000000000CB :10C5700000000000000000000000000000000000BB :10C5800000000000000000000000000000000000AB :10C59000000000000000000000000000000000009B -:10C5A000000000000000000000000000000100008A -:10C5B00000000000000000000000A00000000000DB +:10C5A000000000000000000000000000000000008B +:10C5B000000000000000000000000000000000007B :10C5C000000000000000000000000000000000006B :10C5D000000000000000000000000000000000005B :10C5E000000000000000000000000000000000004B :10C5F000000000000000000000000000000000003B :10C60000000000000000000000000000000000002A :10C61000000000000000000000000000000000001A -:10C6200000000000000000000000000000000020EA -:10C630000000000000000000004100108011001107 +:10C62000000000000000000000000000000000000A +:10C6300000000000000000000000000000000000FA :10C6400000000000000000000000000000000000EA :10C6500000000000000000000000000000000000DA :10C6600000000000000000000000000000000000CA @@ -183446,16 +183446,16 @@ :10C6800000000000000000000000000000000000AA :10C69000000000000000000000000000000000009A :10C6A000000000000000000000000000000000008A -:10C6B0000000000000000000000002000800000070 -:10C6C0000811000000000000000000000000000051 +:10C6B000000000000000000000000000000000007A +:10C6C000000000000000000000000000000000006A :10C6D000000000000000000000000000000000005A :10C6E000000000000000000000000000000000004A :10C6F000000000000000000000000000000000003A :10C700000000000000000000000000000000000029 :10C710000000000000000000000000000000000019 :10C720000000000000000000000000000000000009 -:10C7300000000000000000000000000000020104F2 -:10C7400000040100000000000000000000000000E4 +:10C7300000000000000000000000000000000000F9 +:10C7400000000000000000000000000000000000E9 :10C7500000000000000000000000000000000000D9 :10C7600000000000000000000000000000000000C9 :10C7700000000000000000000000000000000000B9 @@ -183487,7 +183487,7 @@ :10C910000000000000000000000000000000000017 :10C920000000000000000000000000000000000007 :10C9300000000000000000000000000000000000F7 -:10C9400000000000000000008282828200000000DF +:10C9400000000000000000000000000000000000E7 :10C9500000000000000000000000000000000000D7 :10C9600000000000000000000000000000000000C7 :10C9700000000000000000000000000000000000B7 @@ -183495,23 +183495,23 @@ :10C990000000000000000000000000000000000097 :10C9A0000000000000000000000000000000000087 :10C9B0000000000000000000000000000000000077 -:10C9C00000000000000000000000BEBEBEBE00006F +:10C9C0000000000000000000000000000000000067 :10C9D0000000000000000000000000000000000057 :10C9E0000000000000000000000000000000000047 :10C9F0000000000000000000000000000000000037 :10CA00000000000000000000000000000000000026 :10CA10000000000000000000000000000000000016 :10CA20000000000000000000000000000000000006 -:10CA3000000000000000000000610006000D000082 -:10CA4000000000000000000000610006000D000072 +:10CA300000000000000000000000000000000000F6 +:10CA400000000000000000000000000000000000E6 :10CA500000000000000000000000000000000000D6 :10CA600000000000000000000000000000000000C6 :10CA700000000000000000000000000000000000B6 :10CA800000000000000000000000000000000000A6 :10CA90000000000000000000000000000000000096 :10CAA0000000000000000000000000000000000086 -:10CAB0000000000000000000000000000000FFFF78 -:10CAC0000000000000000000000000FFC3C3505041 +:10CAB0000000000000000000000000000000000076 +:10CAC0000000000000000000000000000000000066 :10CAD0000000000000000000000000000000000056 :10CAE0000000000000000000000000000000000046 :10CAF0000000000000000000000000000000000036 @@ -183519,8 +183519,8 @@ :10CB10000000000000000000000000000000000015 :10CB20000000000000000000000000000000000005 :10CB300000000000000000000000000000000000F5 -:10CB4000FFFF0000000000000000000000FFC3C362 -:10CB5000C000C00000000000000000000000000055 +:10CB400000000000000000000000000000000000E5 +:10CB500000000000000000000000000000000000D5 :10CB600000000000000000000000000000000000C5 :10CB700000000000000000000000000000000000B5 :10CB800000000000000000000000000000000000A5 @@ -183528,7 +183528,7 @@ :10CBA0000000000000000000000000000000000085 :10CBB0000000000000000000000000000000000075 :10CBC0000000000000000000000000000000000065 -:10CBD0000000F5EBF5EB0000000000000000000095 +:10CBD0000000000000000000000000000000000055 :10CBE0000000000000000000000000000000000045 :10CBF0000000000000000000000000000000000035 :10CC00000000000000000000000000000000000024 @@ -183536,80 +183536,80 @@ :10CC20000000000000000000000000000000000004 :10CC300000000000000000000000000000000000F4 :10CC400000000000000000000000000000000000E4 -:10CC500000000000F5FFA0FF000000000000000041 -:10CC600000000000000000000000000000000000C4 -:10CC7000000000000480218004000000000000008B -:10CC800000000000000000000000000000000000A4 -:10CC900000000000010041800003200000050000AA -:10CCA0000000000000000000000000000000000084 -:10CCB00000000000000005000980000000000000E6 -:10CCC0000000000000000000000000000000000064 -:10CCD00000000000000010002180000000000000A3 +:10CC5000000000000000000000008800000000004C +:10CC6000C00000000000000020008800200000003C +:10CC70000000000000002088C00020000000040028 +:10CC800020000000000000008800200020000000BC +:10CC90000000000000002008000320002000000029 +:10CCA0002000200000000000000020002000000004 +:10CCB0000000000000000400208820002000000088 +:10CCC0002000200000000000000000000000000024 +:10CCD000000000000000200020880000000000008C :10CCE0000000000000000000000000000000000044 -:10CCF000000000000000A008200800000000210043 -:10CD000000000000000000A0000000004040000003 -:10CD100000000000402010209004000000000000EF -:10CD200000000000000000000000000040000000C3 -:10CD30000000000000000000A020A0020000000091 +:10CCF000000000000000000000050000000000002F +:10CD000000000000000000000000000040004000A3 +:10CD1000000000004000400040090000000000004A +:10CD20000000000000000000004000004000000083 +:10CD300000000000000000000000000800000000EB :10CD400000000000000000000000000000000000E3 -:10CD50000000000000000000A0208402004000004D +:10CD500000000000000000000000000800000000CB :10CD600000000000000000000000000000000000C3 :10CD700000000000000000000000000000000000B3 :10CD800000000000000000000000000000000000A3 -:10CD90000000000000000000000000000000000093 +:10CD90000000000000000000000000800000000013 :10CDA0000000000000000000000000000000000083 -:10CDB0000000000000000000000000000000000073 +:10CDB00000000000000000000000000000800000F3 :10CDC0000000000000000000000000000000000063 -:10CDD0000000000000000000000000000000000053 -:10CDE000000000000000000000080000000000003B -:10CDF0000088000800080000000000080000000093 -:10CE0000000000000000000000080000000000001A -:10CE100000080008008400000008008400000000F2 -:10CE200000000008000000000000000800080000EA -:10CE300000080084000800000000008400000000DA -:10CE400000000288000000000000000800C0000090 -:10CE5000008800C000100000000000000200020076 -:10CE600000210021002100210005000200210021F5 -:10CE700000210021002100210000000020100921D4 -:10CE8000002100210003002100000000000000211B -:10CE900040210005000040050000000000210021A5 -:10CEA000000000210021002100050005000300050D -:10CEB00000210021000800410000000000001003D4 -:10CEC0001103001000050000000000000005000034 -:10CED0000000004100000000000000000000000011 -:10CEE00010000000000000000000000000000082B0 -:10CEF00000000000000000000000000000008000B2 -:10CF0000C000000000000000000000000000000061 -:10CF10000002000800000000000000000000000007 +:10CDD0000000000000000040000000000080000093 +:10CDE0000000000000000000000000000000000043 +:10CDF0000000090000000000000000000008000022 +:10CE00000200000000000000000000000000000020 +:10CE1000000000000000000000000000000400000E +:10CE200000000000000000000000000000080000FA +:10CE300000000000000400000000000000000004EA +:10CE400000000000000000000000000000100000D2 +:10CE500000000000000000000000000000000004CE +:10CE600000110000000000000000000000000000B1 +:10CE700000000000000000000000000000000000B2 +:10CE80000000900000000000000000000000000012 +:10CE90000000000000000000000088000000840086 +:10CEA0000000880000008800000000000000000072 +:10CEB0000000000000000000000000000000002151 +:10CEC0000000000000000000002100110000000828 +:10CED000000000000000000000080000000000004A +:10CEE0000000000000000000000000000000000042 +:10CEF0000000000000000000000000000000000032 +:10CF00000000000000000000000000000000000021 +:10CF100000000000000000004000000009000000C8 :10CF20000000000000000000000000000000000001 :10CF300000000000000000000000000000000000F1 -:10CF400080008400000000000300000000000000DA +:10CF400000000000000000000000000000000000E1 :10CF500000000000000000000000000000000000D1 -:10CF60000000800800000000000000000000000039 -:10CF70000000000090000000A00000002000000061 -:10CF80000000040082000000820000008200000017 -:10CF900000000000824100008200000082000000CA -:10CFA00000000000000082000000820000008200FB -:10CFB000900000002000820000008200000082003B -:10CFC000820090008200820000004000A0008200E9 -:10CFD0000000000000000000000000000000000051 -:10CFE0000000000000000000000000000000000041 -:10CFF000000000000000000000000000000000042D -:10D000000008000080000000000800000000000090 -:10D0100000000008000000100000000000000000F8 -:10D0200000400000000000000000000800A0000018 -:10D030000000008800000000000000000000000068 -:10D04000000000000000000000A000C00000000080 -:10D0500000000000001000000000000000000000C0 -:10D0600000000000000000000000000000000000C0 -:10D0700000000000000000000000000800000000A8 -:10D080000000000000000000000000009000000010 -:10D090000000004100000000000000080000000047 -:10D0A0000000000800000000000000000000000375 -:10D0B0000000000000050000000000050000000066 -:10D0C000000000000000000000000000000500104B -:10D0D00000000000000082000000000000000000CE -:10D0E0000000000000000000000000000000000040 +:10CF60000000000000000800A0008200080082000D +:10CF70008200820000008200820082008200820023 +:10CF80008200820002008200820082008200820011 +:10CF900082088200900008000008820000008200E1 +:10CFA00082008200000082008200400082000000B7 +:10CFB00082008200820082000800000082000000DF +:10CFC0008200820082008200820040008200000015 +:10CFD0008200820082008200080000008200A0001F +:10CFE00082008200820000000000000000000000BB +:10CFF00000000000050008002100410000000000C2 +:10D000000000000000000000000000000000000020 +:10D010000000400040000800000000000000000088 +:10D020000000000000000000000000000000000000 +:10D0300000000000000000000000000005000000EB +:10D0400000000000000000000000000000000000E0 +:10D0500000000000000000000000000000000000D0 +:10D060000000000000000000A0000000C000000060 +:10D07000820000000000C00000000000000000006E +:10D080000000000000000000880000000000000018 +:10D090000000000000008800000000000000000008 +:10D0A0000000000000000000000000000000000080 +:10D0B0000000000000000000000000000000000070 +:10D0C000000000000000A00000000000C000000000 +:10D0D0000000C00000000000000000000000000090 +:10D0E0000000000000000000080000000000000038 :10D0F0000000000000000000000000000000000030 :10D10000000000000000000000000000000000001F :10D11000000000000000000000000000000000000F @@ -183617,97 +183617,97 @@ :10D1300000000000000000000000000000000000EF :10D1400000000000000000000000000000000000DF :10D1500000000000000000000000000000000000CF -:10D16000000000000008000000A0004000000000D7 -:10D17000000000000000000008000000000900415D -:10D180000005000800050008000800000420000059 -:10D1900000008800A0000000000000000000000067 -:10D1A0000000002100210021000000030000080011 -:10D1B000000000000000A0000000000000040008C3 -:10D1C00000410005200000110021024090000800ED -:10D1D0000000A0000009A0000011000000000000F5 -:10D1E0000009000002000000000000000000000034 +:10D16000000000000000000000000000000082003D +:10D170000000A0008400C0000000000000000000CB +:10D18000000000000000000000000800000008008F +:10D190000000A000080000000000200000000000C7 +:10D1A0000000000000000000000008000000000077 +:10D1B00008000000A00008000200000000000000BD +:10D1C000000008000000002100000000080000002E +:10D1D00008000000A0000800000000000000080097 +:10D1E000000000210000000000000000000000001E :10D1F000000000000000000000000000000000002F -:10D20000000000000000000000000000000000100E +:10D20000000000000000000000000000000000001E :10D21000000000000000000000000000000000000E -:10D2200000000000020000000000000000000000FC +:10D2200000000000000000000000000000000000FE :10D2300000000000000000000000000000000000EE :10D2400000000000000000000000000000000000DE :10D2500000000000000000000000000000000000CE -:10D2600000000000000000020000000000080000B4 -:10D2700000000000000000000000C000000100826B -:10D280000000C0000004C0820000C00000010000D7 -:10D2900000000000000000000000C000000101824A -:10D2A0000000C0000040C0820000C000000100007B -:10D2B000000000000000000000000000000000006E -:10D2C00001A00000C0000040C0820000C0000001BA -:10D2D000000000008200000000010100C000000109 -:10D2E00000A00001C0000082C0820000C000000158 -:10D2F0000000000000000000000200000000000527 -:10D300000480000282000080808000008000000312 -:10D310000000000000000000000200000000000506 -:10D32000048000028900000080800000800000036B -:10D3300000000000000000000000001100000000DC -:10D34000000202000902A1000000808000008000AD -:10D3500000030000000000000000000320000000A7 -:10D360000003200000048300000080800000800093 -:10D370000003000000001000000000000000090091 -:10D38000000002808200088000000300000000000E -:10D390000080804000001000000000000000080035 -:10D3A00000000580820088800002038000000000E9 -:10D3B00000808040000000004000000000000000ED -:10D3C00008000000400082000880004103000000C7 -:10D3D0000000008080040000400000000000000009 -:10D3E000210000004000A000020000000300000037 -:10D3F0000000008080090000000000000000000024 -:10D4000000000000001008008508000001008400F2 -:10D41000000000C0820100000000000000000000C9 -:10D4200001000000001004004182000001104000D3 -:10D43000000000C0820100000000010000000000A8 -:10D4400000000100000001000400A108000101002B -:10D450004000000000C08201000001000000000048 -:10D460000000000000000100050085A00000010090 -:10D470004000000000C0820000000000000000002A -:10D48000000000000001100000A0000001000000EA -:10D49000000000000000000000000000000000008C -:10D4A0000000000000011000004000000300000028 -:10D4B000000000000000000000000000000000006C -:10D4C0000000000000000001100100400000050005 -:10D4D000000000000000000000000000000000004C -:10D4E0000000000000000001820000400000010078 -:10D4F000000000000000000000000000000000002C -:10D5000000000000000000080009000000004100C9 -:10D5100000000000000000410000000000000000CA -:10D5200000000000000000080009000000004100A9 -:10D5300000000000000000410000000000000000AA -:10D5400000000000000000000020000400000000B7 -:10D550004100000000000000004100000000000049 -:10D56000000000000000000000200040000000005B -:10D570004100000000000000004100000010800099 -:10D5800000C1000000000000090000000041000090 -:10D590000002000000410000000020020010800096 -:10D5A00000C10000000300008200000000C18000F4 -:10D5B0000040000000410004000003400000004063 -:10D5C000800000C10000002080000900000000046D -:10D5D00080000041000000410000000009050040FB -:10D5E000800000C1000000408000050000000041F4 -:10D5F00000000040000000410000000040900000DA -:10D600002000004000000000100010000000001189 -:10D61000880000000000000100000000010500007B -:10D620002000004000000000100040000000000941 -:10D630004000000100000001000100000191000015 -:10D640000001200000400000000120001000000048 -:10D65000001040000000000000010000000000C0B9 -:10D6600000012000004000000000200084000000B5 -:10D67000000540000000000000010000000001045F -:10D68000000000000000000000000000000000009A -:10D69000811200E0070048420000000000004842FC -:10D6A000000000000000000000000000000000007A -:10D6B000811200E0070048420000000000004842DC -:10D6C000000000000000000000000000000000005A -:10D6D0000000821200E00700484200000000000045 -:10D6E00048420000000000000000000000000000B0 -:10D6F0000000811200E00700484200000000000026 -:10D70000484200000000000000000000000000008F +:10D2600000000000000000000000000000000000BE +:10D2700000010001000100C00001A00100C0008306 +:10D2800000000001002000020001000100C00000B9 +:10D2900000010001000100C00001A00100C00083E6 +:10D2A00000000101002000040001000100C0000096 +:10D2B000000000010001000100C00001A00100C049 +:10D2C000018300000401004000820001000100C051 +:10D2D000000000010001000100C00001A00100C128 +:10D2E000018300000001004000900001000100C027 +:10D2F000000000410041004100C00041004100A089 +:10D30000054100410541000000800041004100C08E +:10D31000000000410041004100C00041004100A068 +:10D32000034100410241000000800041004100C073 +:10D330000000000000410041004100C000410041E8 +:10D3400000A010410041A0410000008000410041C8 +:10D3500000C0000000410041004100C00041004108 +:10D3600000C0104100412041000000000041004188 +:10D3700000C0000041000300000000804100C00028 +:10D380000000030020001000002090004100C100B8 +:10D390000000000041000300000000804100C000C8 +:10D3A0000000030020001000002082004100C100A6 +:10D3B0000000000000034100030000000080410065 +:10D3C000C0000000030002001000002084004100A3 +:10D3D000C100000000004100030000000080410087 +:10D3E000C000000003002000100000208300410066 +:10D3F000C1000000000001000100000000C00100A9 +:10D40000C00000000100A000A1400041C100410097 +:10D41000C1000040400001000100000000C0010008 +:10D42000C00000000100A000A1400041C100410077 +:10D43000C10000404000000001000100000000C0E9 +:10D440000100C000000001004100A1400009C1002E +:10D450000300C1000040400001000100000000C0C6 +:10D460000100C000000001004000A1400009C00010 +:10D470000300C1000040400000C00001C0C1000026 +:10D480000000000100C120A10005000100C1000052 +:10D49000000000010000000000C00001C0C1000049 +:10D4A0000000000100C120A00005000100C1000033 +:10D4B0000000000100000000000000C00001C0C129 +:10D4C00000000000000100C120A00005000100C113 +:10D4D0000000000000010000000000C00001C0C109 +:10D4E00000000000000100C120A00005000100C1F3 +:10D4F000000000000001000000000080004180C129 +:10D5000000000000004100A0004000C1004100C137 +:10D51000000000000041004000000080004180C188 +:10D5200000000000004100A0000500C1004100C152 +:10D5300000000000004100400000000000800041A9 +:10D5400080C100000000004100A0000500C10041B2 +:10D5500000C10000000000410040000000800041C8 +:10D5600080C100000000004100A0000500C1004192 +:10D5700000C100000000004100400000C100800028 +:10D5800080C100004100800002004100C1418000D4 +:10D59000802000004100000080004100C1008000A8 +:10D5A00080C100004102800082004100C141800032 +:10D5B0008020000041000000800041000000C10008 +:10D5C000800080C100004100800002004100C1C114 +:10D5D0000000802000004100000080004100C100E8 +:10D5E000800080C100004100800082004100C141F4 +:10D5F0000000802000004100000080004100C100C8 +:10D600004000C0C1000001000400C1000100C1834E +:10D610000200C001000001000000C0000100C100C4 +:10D620004000C0C100000101040041000100C183AD +:10D630000200C001000001000000C0000100000065 +:10D64000C1004000C0C1000001000400030001004F +:10D65000C1092000C001000001000000C00001005D +:10D66000C1004000C0C10000010004000900010029 +:10D67000C1832000C001000001000000C0000100C3 +:10D680000000000000000042000000000000000058 +:10D690008112004807004800000000000000000060 +:10D6A0000000000000000042000000000000000038 +:10D6B0008112004807004800000000000000000040 +:10D6C0000000000000000000004200000000000018 +:10D6D0000000811200480700480000000000000020 +:10D6E00000000000000000000042000000000000F8 +:10D6F0000000811200480700480000000000000000 +:10D700000000000000000000000000000000000019 :10D710000000000000000000000000000000000009 :10D7200000000000000000000000000000000000F9 :10D7300000000000000000000000000000000000E9 @@ -183731,202 +183731,202 @@ :10D8500000000000000000000000000000000000C8 :10D86000000000000000DEAE757B0000000000003C :10D8700000000000000000000000000000000000A8 -:10D88000000000000000DEAE612603400000000042 -:10D8900000000230A0000000000000000C4000006A -:10D8A0000000000002C06486612603400000000002 -:10D8B00000000230A0000000000000000C4000004A -:10D8C0000000000002C064860000612603400000E2 -:10D8D000000000000230A0000000000000000C402A -:10D8E00000000000000002C06486612603400000C2 -:10D8F000000000000230A0000000000000000C400A -:10D9000000000000000002C064860000000000006B -:10D910000000000000000000000000000000000007 -:10D9200000000000000000000000000000000000F7 -:10D9300000000000000000000000000000000000E7 -:10D9400000000000000000000000000200000000D5 -:10D9500000000000000000000000000000000000C7 -:10D960000000000000000000000000002000200077 -:10D970002000200000000000000000000000000067 -:10D98000000004000000040004004000000000004B -:10D990000000000000000000000000000000000087 -:10D9A0000000000000900090000000000090009037 -:10D9B0000090000040004040004000004040004017 -:10D9C00000400000004000000000000000000000D7 -:10D9D00000400040004000400000000000400040C7 -:10D9E0000040000000400000000000000000800037 -:10D9F0008040800080400000000000000000000027 -:10DA00000000000080000000800080008000000016 +:10D88000000000000000DEAE60C6030000000000E3 +:10D8900000000031E0000000000000000C0000006B +:10D8A0000000000000C0630660C603000000000026 +:10D8B00000000031E0000000000000000C0000004B +:10D8C0000000000000C06306000060C60300000006 +:10D8D000000000000031E0000000000000000C002B +:10D8E00000000000000000C0630660C603000000E6 +:10D8F000000000000031E0000000000000000C000B +:10D9000000000000000000C0630600000000880066 +:10D910008400200000002000000020000000000023 +:10D9200084000000840000002000000000002000AF +:10D9300020002000000088000000200000000000FF +:10D940000000840000000000200000000000000033 +:10D9500000002000200088000000000020000000DF +:10D960000000000020000000000020000000000077 +:10D9700000002000000000008800000020000000DF +:10D980000000000000000000000020000000000077 +:10D990000000000020000000000000000000000067 +:10D9A0000000000000900590000000000090009032 +:10D9B00000900040004000402040000040004040F7 +:10D9C0000540050005400000000000000000004088 +:10D9D0000040000000400040004000000000400007 +:10D9E00000400000000009000000000000000000EE +:10D9F00000400000004000000000000000000000A7 +:10DA0000000000000000090000000000000000000D :10DA10000000000000000000000000000000000006 :10DA200000000000000000000000000000000000F6 :10DA300000000000000000000000000000000000E6 -:10DA400000000000000000100010000000000000B6 -:10DA500000000000000000000000000000000000C6 -:10DA600000000000000000000000000000000000B6 -:10DA70000000000000000000000000000100001095 -:10DA80000000000000000000000000000000000096 -:10DA90000000000000000000000800000000020874 -:10DAA0000088008800840010001000880008000032 -:10DAB0000000000000000000008803000000008457 -:10DAC000000000840000000000000000008800004A -:10DAD0000000000000000000000000000000000046 -:10DAE0000000000000000000001000000000000026 -:10DAF000001000000008008800000000000008007E -:10DB00000300000000000000000000000000000012 -:10DB10000000000000000000000000000000000005 +:10DA400000000000000000000000000000000000D6 +:10DA500000000000000400000000000000040008B6 +:10DA60000005000000100010000800000000000089 +:10DA70000000000800050004000800000000000588 +:10DA80000000000500000000000000000000000091 +:10DA9000000800080000000000080008000000085E +:10DAA000000800000000000000000000000000006E +:10DAB00000840008000000000008000800000008C2 +:10DAC0000004000000000000000000000000000052 +:10DAD000000000080008000000000008000800081E +:10DAE0000004000800080008000800000008000802 +:10DAF0000008008200040010000800820008008472 +:10DB00000008000800080008000800080008008459 +:10DB100000080000000000000000000000000000FD :10DB200000000000000000000000000000000000F5 -:10DB300000000000000000410000000000000000A4 -:10DB40000000000000000000400000000000000095 -:10DB50000010000000000041000000000000000074 -:10DB600000000000000000000000000000000010A5 -:10DB700000000000000000000000000000000000A5 -:10DB8000000000000021000300210008002100081F -:10DB90000005000300000000000000000008000075 -:10DBA000000000000000000800A0001000100000AD -:10DBB00000000000000000000000000000C00000A5 -:10DBC00000000000000000A00000000800000000AD -:10DBD0000000000000000000000000000000000045 -:10DBE000000000000000000000000010001000C055 -:10DBF0000000000000000000000000000300000022 -:10DC00000000000000000000000000000000000014 +:10DB300000000008000000000000000000000000DD +:10DB400000000008000000000000000000000000CD +:10DB500000000000000000020008000000000000BB +:10DB600000000002000000000000000000000000B3 +:10DB7000000000000008000000000000000000009D +:10DB80000000000000000000001000000000000085 +:10DB9000000800210300000003000800030000004B +:10DBA0000800000000000000000000000800000065 +:10DBB0000000000000000000080003000300000057 +:10DBC000080000000000000000004000000000000D +:10DBD000000000000000000000000800030000003A +:10DBE000030008000000000000000000000000002A +:10DBF000000000000000000000000000030003001F +:10DC00000800030000000000000000000000000009 :10DC10000000000000000000000000000000000004 -:10DC200000000000000000000000000000000000F4 -:10DC300000000000000000000011000000000000D3 -:10DC40000040000000000040000400090000000047 -:10DC500000000000000800000000000000000000BC -:10DC600000000000000000000000000000000400B0 -:10DC70000000000000100000000000000000000094 -:10DC80000000000000000100001100000000400042 -:10DC9000010000000000040000000000000000007F -:10DCA0000000000000000000000000000000000074 +:10DC20000000000000000000000000004000400074 +:10DC300000004000000000000000000000000000A4 +:10DC4000000000080000000000210021080000037F +:10DC50000808000800210000000000000000820009 +:10DC6000080000000000000000000000000082002A +:10DC7000080000004000000000000000000000005C +:10DC8000080000000000000000000000000000008C +:10DC9000080000000000000000000000000000007C +:10DCA00000840000000000000000000000000000F0 :10DCB0000000000000000000000000000000000064 -:10DCC0000000000000000000000000000000000054 +:10DCC000000000000000000000000000000000084C :10DCD0000000000000000000000000000000000044 -:10DCE0000000000000000010000000000000000024 -:10DCF0000000000000000001000000000000000023 -:10DD00000000000000000000400000A0000000A093 -:10DD1000800004000000008480000000000000007B +:10DCE0000000000000000000000000000000000034 +:10DCF0000000000000000000000000000000000024 +:10DD0000000000000000000800000000000000000B +:10DD10000000000000000000000000000000000003 :10DD200000000000000000000000000000000000F3 :10DD300000000000000000000000000000000000E3 :10DD400000000000000000000000000000000000D3 :10DD500000000000000000000000000000000000C3 -:10DD600000000000000000000000000000000000B3 +:10DD600000000808000000000000000000000000A3 :10DD700000000000000000000000000000000000A3 -:10DD80000000000000100000000000000000000083 -:10DD9000000000000008044002080000000000002D -:10DDA00000000000000000000000000800000084E7 -:10DDB00000840000000000000000000000000000DF -:10DDC00000C0000000000010000000A0000000845F -:10DDD0000000000000000000000000000000000043 -:10DDE000000000002100000000A000000000000072 -:10DDF000008400000000000000000000000000009F -:10DE00000000000000000000000000000000000012 -:10DE10000000000000000000800000000000000082 -:10DE200000000000000000000000000000000000F2 -:10DE30000000000000000000004100080000000099 +:10DD8000000008000000000000000000000000008B +:10DD90000000000000000000000000000300000080 +:10DDA000000000000000000000000000080000006B +:10DDB000080000000000000000000000000000401B +:10DDC0000000080000000000030000000800000040 +:10DDD0000000000040000000000000000000000003 +:10DDE00009000000100000000000410000000800D1 +:10DDF0000000000000000000000000000000000023 +:10DE000000000000000008000000410000000800C1 +:10DE100000000900000000000000000000000000F9 +:10DE200000000000000000000000000000000021D1 +:10DE300000000000000000000000000000000000E2 :10DE400000000000000000000000000000000000D2 -:10DE5000000000000000000000410000020000007F +:10DE500000000000000000000000000000000000C2 :10DE600000000000000000000000000000000000B2 -:10DE70000000000000000000000000410000000061 -:10DE800000002000008000000021000000080000C9 -:10DE90000021000000210000002100000000000817 +:10DE700000000000000000000000000000000000A2 +:10DE80000000000000000000000000000000000092 +:10DE90000000000000000000000000000000000082 :10DEA0000000000000000000000000000000000072 -:10DEB0000000000000000000020000000000000060 +:10DEB0000000000000000000000000000000000062 :10DEC0000000000000000000000000000000000052 -:10DED000000000C00200000002002000004000001E -:10DEE0000000000000080008000000000000000022 +:10DED0000000000800080200000000000000000828 +:10DEE0000000000000000000000000000000000032 :10DEF0000000000000000000000000000000000022 -:10DF00000000000080820004000000A0000000006B -:10DF100000000000000000000000000800000000F9 +:10DF00000000000000000000000000000000000011 +:10DF10000000000000000000000000000000000001 :10DF200000000000000000000000000000000000F1 :10DF300000000000000000000000000000000000E1 :10DF400000000000000000000000000000000000D1 :10DF500000000000000000000000000000000000C1 :10DF600000000000000000000000000000000000B1 :10DF700000000000000000000000000000000000A1 -:10DF8000000000000100400102000001020000004A -:10DF900008000200100001000000880003089088BB -:10DFA000401090820000000000000000000000000F +:10DF80000000000000000000000000000000000091 +:10DF90000000000000000000000000000000000081 +:10DFA0000000000000000000000000000000000071 :10DFB0000000000000000000000000000000000061 :10DFC0000000000000000000000000000000000051 :10DFD0000000000000000000000000000000000041 :10DFE0000000000000000000000000000000000031 :10DFF0000000000000000000000000000000000021 -:10E000000000000000001102820809410008000021 -:10E0100000008000000000000300000000000480F9 -:10E02000820080808080000000000000000000006E +:10E000000000000000000000000000000000000010 +:10E010000000000000000000000000000000000000 +:10E0200000000000000000000000000000000000F0 :10E0300000000000000000000000000000000000E0 :10E0400000000000000000000000000000000000D0 :10E0500000000000000000000000000000000000C0 :10E0600000000000000000000000000000000000B0 :10E0700000000000000000000000000000000000A0 -:10E0800000000000000000000980410004110203AC -:10E090008000000080000000800000008000808080 -:10E0A0009100080200008000000000000000000055 +:10E080000000000000000000000000000000000090 +:10E090000000000000000000000000000000000080 +:10E0A0000000000000000000000000000000000070 :10E0B0000000000000000000000000000000000060 :10E0C0000000000000000000000000000000000050 :10E0D0000000000000000000000000000000000040 :10E0E0000000000000000000000000000000000030 :10E0F0000000000000000000000000000000000020 -:10E100000000000000000000000000080000010105 -:10E110000001080010000800020008000200A00032 -:10E120009090080003008888900000000000000024 +:10E10000000000000000000000000000000000000F +:10E1100000000000000000000000000000000000FF +:10E1200000000000000000000000000000000000EF :10E1300000000000000000000000000000000000DF :10E1400000000000000000000000000000000000CF :10E1500000000000000000000000000000000000BF :10E1600000000000000000000000000000000000AF :10E17000000000000000000000000000000000009F -:10E18000000000000000000000000000000001018D -:10E190000000010000080004000800A000100000BA -:10E1A000001100104008004090030990000000009A +:10E18000000000000000000000000000000000008F +:10E19000000000000000000000000000000000007F +:10E1A000000000000000000000000000000000006F :10E1B000000000000000000000000000000000005F :10E1C000000000000000000000000000000000004F :10E1D000000000000000000000000000000000003F :10E1E000000000000000000000000000000000002F :10E1F000000000000000000000000000000000001F -:10E20000000000000000000000000000000000020C -:10E210001103024111100089008200C1108200091F -:10E22000000000880009808400908021C002000066 +:10E20000000000000000000000000000000000000E +:10E2100000000000000000000000000000000000FE +:10E2200000000000000000000000000000000000EE :10E2300000000000000000000000000000000000DE :10E2400000000000000000000000000000000000CE :10E2500000000000000000000000000000000000BE :10E2600000000000000000000000000000000000AE :10E27000000000000000000000000000000000009E :10E28000000000000000000000000000000000008E -:10E2900002091100020002110002000000800000CB -:10E2A000000000000000000080910089808080084C +:10E29000000000000000000000000000000000007E +:10E2A000000000000000000000000000000000006E :10E2B000000000000000000000000000000000005E :10E2C000000000000000000000000000000000004E :10E2D000000000000000000000000000000000003E :10E2E000000000000000000000000000000000002E :10E2F000000000000000000000000000000000001E :10E30000000000000000000000000000000000000D -:10E310000000000201000000000100000002008473 -:10E3200000000000000200020000081120824010DE -:10E3300002010000000000000000000000000000DA +:10E3100000000000000000000000000000000000FD +:10E3200000000000000000000000000000000000ED +:10E3300000000000000000000000000000000000DD :10E3400000000000000000000000000000000000CD :10E3500000000000000000000000000000000000BD :10E3600000000000000000000000000000000000AD :10E37000000000000000000000000000000000009D :10E38000000000000000000000000000000000008D -:10E3900000000000000000E000000000000000009D -:10E3A0000000000000000000070000000000000066 -:10E3B0000700000000000000000000000000000056 +:10E39000000000000000000000000000000000007D +:10E3A000000000000000000000000000000000006D +:10E3B000000000000000000000000000000000005D :10E3C000000000000000000000000000000000004D :10E3D000000000000000000000000000000000003D :10E3E000000000000000000000000000000000002D :10E3F000000000000000000000000000000000001D :10E40000000000000000000000000000000000000C :10E4100000000000000000000000000000000000FC -:10E420000000F9FB60620000000018667E00F0F05A -:10E43000F0F0F9F8F9E00000000000000000000032 +:10E4200000000000000000000000000000000000EC +:10E4300000000000000000000000000000000000DC :10E4400000000000000000000000000000000000CC :10E4500000000000000000000000000000000000BC :10E4600000000000000000000000000000000000AC :10E47000000000000000000000000000000000009C :10E48000000000000000000000000000000000008C :10E49000000000000000000000000000000000007C -:10E4A00000000000F9B9602000000000246642006E -:10E4B000BD24B4B460F860E000000000000000007B +:10E4A000000000000000000000000000000000006C +:10E4B000000000000000000000000000000000005C :10E4C000000000000000000000000000000000004C :10E4D000000000000000000000000000000000003C :10E4E000000000000000000000000000000000002C @@ -183941,73 +183941,73 @@ :10E57000000000000000000000000000000000009B :10E58000000000000000000000000000000000008B :10E59000000000000000000000000000000000007B -:10E5A0000000000000000000030F3F0F000000000B -:10E5B0000000FFFF3CFC6CFC20F0EFFF00000000BF +:10E5A000000000000000000000000000000000006B +:10E5B000000000000000000000000000000000005B :10E5C000000000000000000000000000000000004B :10E5D000000000000000000000000000000000003B :10E5E000000000000000000000000000000000002B :10E5F000000000000000000000000000000000001B :10E60000000000000000000000000000000000000A :10E6100000000000000000000000000000000000FA -:10E6200000000000000000000000270F270F00007E -:10E6300000000002FDFF3C0C6C0C2000EF0F0000FE +:10E6200000000000000000000000000000000000EA +:10E6300000000000000000000000000000000000DA :10E6400000000000000000000000000000000000CA :10E6500000000000000000000000000000000000BA :10E6600000000000000000000000000000000000AA :10E67000000000000000000000000000000000009A :10E68000000000000000000000000000000000008A :10E69000000000000000000000000000000000007A -:10E6A000006100010001000000610006000D000093 -:10E6B00000610006000D00000061000E000D00006A +:10E6A000000000000000000000000000000000006A +:10E6B000000000000000000000000000000000005A :10E6C000000000000000000000000000000000004A :10E6D000000000000000000000000000000000003A :10E6E000000000000000000000000000000000002A :10E6F000000000000000000000000000000000001A :10E700000000000000000000000000000000000009 :10E7100000000000000000000000000000000000F9 -:10E7200000007F2AFF0AEAF0FEF00000000010005F -:10E7300051000000000000003C0000000000F33029 -:10E74000C300000000000000000000000000000006 +:10E7200000000000000000000000000000000000E9 +:10E7300000000000000000000000000000000000D9 +:10E7400000000000000000000000000000000000C9 :10E7500000000000000000000000000000000000B9 :10E7600000000000000000000000000000000000A9 :10E770000000000000000000000000000000000099 :10E780000000000000000000000000000000000089 :10E790000000000000000000000000000000000079 -:10E7A000000000007520F50040F054F0000000006B -:10E7B000100051000000000000003C3C0000000080 -:10E7C000F734C70400000000000000000000000053 +:10E7A0000000000000000000000000000000000069 +:10E7B0000000000000000000000000000000000059 +:10E7C0000000000000000000000000000000000049 :10E7D0000000000000000000000000000000000039 :10E7E0000000000000000000000000000000000029 :10E7F0000000000000000000000000000000000019 :10E800000000000000000000000000000000000008 :10E8100000000000000000000000000000000000F8 -:10E820000000000000004D4D4D4D30F3B2B200002D +:10E8200000000000000000000000000000000000E8 :10E8300000000000000000000000000000000000D8 -:10E840000000F7F7F7F700000000000000000000EC +:10E8400000000000000000000000000000000000C8 :10E8500000000000000000000000000000000000B8 :10E8600000000000000000000000000000000000A8 :10E870000000000000000000000000000000000098 :10E880000000000000000000000000000000000088 :10E890000000000000000000000000000000000078 -:10E8A0000000000000000000CF0C0F0FF0F0B2B22B +:10E8A0000000000000000000000000000000000068 :10E8B0000000000000000000000000000000000058 -:10E8C00000000000A2A2A2A20000000000000000C0 +:10E8C0000000000000000000000000000000000048 :10E8D0000000000000000000000000000000000038 -:10E8E0000000000000000000000000000000000028 -:10E8F0000000000000000000000000000000000018 -:10E900000000000000000000000200000000000005 -:10E9100000000000000000000000000000000000F7 -:10E9200000000000000000000000000000000000E7 -:10E9300000000000000008000000000004000000CB -:10E9400004000000000008000000000000000000BB +:10E8E0000000000000000000000000000400000024 +:10E8F0000000000000000000000004000000000014 +:10E900000000000000000000000000000000000007 +:10E91000000000000000000000000000200088004F +:10E9200000000000000000000000000000000008DF +:10E9300000000000000000000000000000000000D7 +:10E9400000000000000000000000000000000000C7 :10E9500000000000000000000000000000000000B7 :10E960000000000000000000000000004100410025 -:10E970000000000041C000C00000000000000000D6 -:10E980000000000000000000000000004100000046 +:10E9700000000000410041004100000000000000D4 +:10E980000000000000000000410000004100000005 :10E990000000000000000000000000000000000077 :10E9A0000000000000000000000000000000000067 -:10E9B00000000000000000008000000000000000D7 -:10E9C0000000800000000000800000000000000047 +:10E9B0000000000000000000000000000000000057 +:10E9C0000000000000000000000000000000000047 :10E9D0000000000000000000000000000000000037 :10E9E0000000000000000000000000000000000027 :10E9F0000000000000000000000000000000000017 @@ -184015,145 +184015,145 @@ :10EA100000000000000000000000000000000000F6 :10EA200000000000000000000000000000000000E6 :10EA300000000000000000000000000000000000D6 -:10EA400000000000000000000000000000000000C6 -:10EA5000008400000000000000000008000000002A -:10EA60000040000000000000000000000000000066 -:10EA70000000000000000000000000400000000056 -:10EA80000040000000000000000000000000000046 -:10EA9000000000000000000000000008000000006E -:10EAA0000000000000000000000800080000000056 -:10EAB000000000000000000000000008000000004E -:10EAC000000000000000000000080008000800002E +:10EA4000000000000000000000000000000000883E +:10EA50000008000000080008000000080008000886 +:10EA60000008000800000008004000080000000046 +:10EA70000008000000080008000000080008000866 +:10EA800000080008000000080000008400000000EA +:10EA900000000008000000080008000000080082D4 +:10EAA00000080008008400080008000800080008AA +:10EAB00000080008008800840010000800400008DA +:10EAC00000400008000800080008000800080008CE :10EAD0000000000000000000000000000000000036 -:10EAE000000000080000000000000000000000001E -:10EAF000000000008800000000000000000000008E -:10EB000088000000000090000000000000000000ED -:10EB100000000000000000000000000300000000F2 -:10EB200000000000000000000000000000000000E5 -:10EB300000000000000000000000000000000000D5 -:10EB400000000000000000080000000300000000BA -:10EB50000041000000000000000000000000000074 +:10EAE0000000000000000000000000000000000026 +:10EAF0000000000000000000000000000000000016 +:10EB00000000000000009000000000000000000075 +:10EB100000000000000000000000000000210021B3 +:10EB20000003000900008200000000000021002115 +:10EB30000021000000000021000800000021000862 +:10EB4000002100000000081000100000002100005B +:10EB50000021000000000000000000000000000094 :10EB600000000000000000000000000000000000A5 :10EB70000000000000000000000000000000000095 :10EB80000000000000000000000000000000000085 -:10EB90000000000000000000000000000000000075 -:10EBA0000000000000000000000000000000000065 -:10EBB0000000000000000000000000000000000055 -:10EBC000000000A0008400001100001000020000FE -:10EBD00000000082000000000000000000000000B3 +:10EB9000000000000000000000000000000000086D +:10EBA0000000000000000000000000020000000063 +:10EBB000000000000000000000000000000800004D +:10EBC000000000000008000000000000000000003D +:10EBD0000000000000000000000000000000000035 :10EBE00001800000000000000000000000000000A4 :10EBF0000080000000000000010000000000000094 :10EC00000000000000000000000000000000000004 -:10EC100001000009000000000000000000000000EA -:10EC20000000008000000100000000000000000063 -:10EC300000000000000000000000000000000000D4 -:10EC40000000000000000000000000004000000084 +:10EC1000010000000000000000000800000000806B +:10EC200000000000000001000000000000000000E3 +:10EC30000000000000000000000000800000000054 +:10EC400000000100000000000000000000000000C3 :10EC500000000000000000000000000000000000B4 :10EC6000000008100000000000000000000000008C :10EC7000000000100000000000000800000000007C -:10EC80000000000000000000000009000000000873 -:10EC90000000088400000000000000000090000058 -:10ECA0000000000000100000020000000000000052 -:10ECB00000000000000000000000000000900000C4 -:10ECC0000000000000000000000000000000000044 -:10ECD0000000000000000000000000000000000034 +:10EC800000002000000000000000200000000084C0 +:10EC900000A0080800080000000000000008008430 +:10ECA00000400000000000A002000000000000A0E2 +:10ECB0000000000000000000000000000010000044 +:10ECC00000000000080000400000000000000000FC +:10ECD00000000040000000000000000000000000F4 :10ECE0000000000000000000000000000000000024 :10ECF0000000000000000000000000000000000014 :10ED00000000000000000000000000000000000003 :10ED100000000000000000000000000000000000F3 -:10ED200000000000000000000000000000000000E3 -:10ED300000030000000000080000000000000000C8 +:10ED200000000000000000000000000000000008DB +:10ED300000000000000000000000000000000000D3 :10ED400000000000000000000000000000000000C3 :10ED500000000000000000000000000000000000B3 :10ED600000000000000000000000000000000000A3 :10ED70000000000000000000000000000000000093 :10ED80000000000000000000000000000000000083 -:10ED90000000000000000000000000000000000073 +:10ED9000000000000000000000000000050000006E :10EDA0000000000000000000000000000000000063 -:10EDB000000000000000000000000000000800004B -:10EDC00000A000000000000000000000000800009B -:10EDD0000000001000A0008411C00000000000002E +:10EDB0000000000000000000000000000000000053 +:10EDC000000000000000000000000000000008003B +:10EDD0000000000000000000000000000000000033 :10EDE0000000000000000000000000000000000023 :10EDF0000000000000000000000000000000000013 :10EE00000080000000000000008000000000000002 -:10EE100000000000000000000000000000000000F2 -:10EE20000000004100110000000000000000000090 +:10EE10000000000000000000008000000000002151 +:10EE200000000100000000000000000000080000D9 :10EE300000000000000000000000000000000000D2 -:10EE40000000000088000000000000000000002119 -:10EE500000A100410010000300410000000000007C +:10EE400000000000000000000000000000000000C2 +:10EE500000000000000000000000000000000000B2 :10EE600000000000000000000000000000000000A2 -:10EE70000000000000000000000000001100000081 -:10EE8000000000100000000000080010000020003A -:10EE900011000000020011A0000800000984000019 -:10EEA0000000000000000000000000000000000062 +:10EE70000000000000000000000000000000000092 +:10EE800000000010000000000000001000C00000A2 +:10EE900000001190090800900008001000A0000078 +:10EEA0000008000008000000000000000000000052 :10EEB0000000000000000000000000000000000052 :10EEC0000000000000000000000000000000000042 -:10EED0000000001000000000000000000000000022 +:10EED0000000000000000000000000000000000032 :10EEE0000000000000000000000000000000000022 :10EEF0000000000000000000000000000000000012 :10EF00000000000000000000000000000000000001 :10EF100000000000000000000000000000000000F1 :10EF200000000000000000000000000000000000E1 :10EF300000000000000000000000000000000000D1 -:10EF400000000000000000000000040000000000BD -:10EF5000040000000000000000004000000000006D -:10EF60001000000000000000000000000000000091 +:10EF400000000000000000000000000000000000C1 +:10EF500000000000000000000000000000000000B1 +:10EF600000000000000000000000000000000000A1 :10EF70000000000000000000000000000000000091 :10EF80000000000000000000000000000000000081 :10EF90000000000000000000000000000000000071 :10EFA0000000000000000000000000000000000061 :10EFB0000000000000000000000000000000000051 :10EFC0000000000000000000000000000000000041 -:10EFD0000000800000000000000000008000000031 +:10EFD0000000000000000000000000000000000031 :10EFE0000000000000000000000000000000000021 :10EFF0000000000000000000000000000000000011 :10F000000000000000000000000000000000000000 :10F0100000000000000000000000000000000000F0 :10F0200000000000000000000000000000000000E0 :10F0300000000000000000000000000000000000D0 -:10F040000000000000000000000000000000800040 -:10F0500000008000800000000000000000000000B0 -:10F0600000000040800000000000000000000000E0 +:10F0400000000000000000000000000000000000C0 +:10F0500000000000000000000000000000000000B0 +:10F0600000000000000000000000000000000000A0 :10F070000000000000000000000000000000000090 :10F080000000000000000000000000000000000080 :10F090000000000000000000000000000000000070 :10F0A0000000000000000000000000000000000060 :10F0B0000000000000000000000000000000000050 :10F0C0000000000000000000000000000000000040 -:10F0D0000800040008000800000010000000000004 -:10F0E000020004000201080000000000000000000F +:10F0D0000000000000000000000000000000000030 +:10F0E0000000000000000000000000000000000020 :10F0F0000000000000000000000000000000000010 :10F1000000000000000000000000000000000000FF :10F1100000000000000000000000000000000000EF :10F1200000000000000000000000000000000000DF :10F1300000000000000000000000000000000000CF :10F1400000000000000000000000000000000000BF -:10F150000000000200C0000400A000000000000049 -:10F1600000000040001010820008000000000000B5 +:10F1500000000000000000000000000000000000AF +:10F16000000000000000000000000000000000009F :10F17000000000000000000000000000000000008F :10F18000000000000000000000000000000000007F :10F19000000000000000000000000000000000006F :10F1A000000000000000000000000000000000005F :10F1B000000000000000000000000000000000004F :10F1C000000000000000000000000000000000003F -:10F1D00000000000000000000000008000000000AF -:10F1E000000000000080008080801080000000008F +:10F1D000000000000000000000000000000000002F +:10F1E000000000000000000000000000000000001F :10F1F000000000000000000000000000000000000F :10F2000000000000000000000000000000000000FE :10F2100000000000000000000000000000000000EE :10F2200000000000000000000000000000000000DE :10F2300000000000000000000000000000000000CE :10F2400000000000000000000000000000000000BE -:10F250000000000000000000008000000000000826 -:10F26000000900000000000000890000000000000C +:10F2500000000000000000000000000000000000AE +:10F26000000000000000000000000000000000009E :10F27000000000000000000000000000000000008E :10F28000000000000000000000000000000000007E :10F29000000000000000000000000000000000006E :10F2A000000000000000000000000000000000005E :10F2B000000000000000000000000000000000004E :10F2C000000000000000000000000000000000003E -:10F2D0000000000000000000000000080004000022 -:10F2E000000100000088000000000083000400000E +:10F2D000000000000000000000000000000000002E +:10F2E000000000000000000000000000000000001E :10F2F000000000000000000000000000000000000E :10F3000000000000000000000000000000000000FD :10F3100000000000000000000000000000000000ED @@ -184161,7 +184161,7 @@ :10F3300000000000000000000000000000000000CD :10F3400000000000000000000000000000000000BD :10F3500000000000000000000000000000000000AD -:10F360000000008100000700000000000000000015 +:10F36000000000000000000000000000000000009D :10F37000000000000000000000000000000000008D :10F38000000000000000000000000000000000007D :10F39000000000000000000000000000000000006D @@ -184169,40 +184169,40 @@ :10F3B000000000000000000000000000000000004D :10F3C000000000000000000000000000000000003D :10F3D000000000000000000000000000000000002D -:10F3E000B0F0BFFF000000000000000000000000BF -:10F3F000A0AFA0AF0000000000000000000000006F +:10F3E000000000000000000000000000000000001D +:10F3F000000000000000000000000000000000000D :10F4000000000000000000000000000000000000FC :10F4100000000000000000000000000000000000EC :10F4200000000000000000000000000000000000DC :10F4300000000000000000000000000000000000CC :10F4400000000000000000000000000000000000BC :10F4500000000000000000000000000000000000AC -:10F46000000010001F0F000000000000000000005E -:10F470000000303FA0AF00000000000000000000CE +:10F46000000000000000000000000000000000009C +:10F47000000000000000000000000000000000008C :10F48000000000000000000000000000000000007C :10F49000000000000000000000000000000000006C :10F4A000000000000000000000000000000000005C :10F4B000000000000000000000000000000000004C :10F4C000000000000000000000000000000000003C :10F4D000000000000000000000000000000000002C -:10F4E000000000005555555500000000F0F0F0F008 -:10F4F000000000003C3C3C3C00000000000000001C +:10F4E000000000000000000000000000000000001C +:10F4F000000000000000000000000000000000000C :10F5000000000000000000000000000000000000FB :10F5100000000000000000000000000000000000EB :10F5200000000000000000000000000000000000DB :10F5300000000000000000000000000000000000CB :10F5400000000000000000000000000000000000BB :10F5500000000000000000000000000000000000AB -:10F560000000000000005C5C5F5000000000000034 -:10F570000000000000005F503C3C00000000000064 +:10F56000000000000000000000000000000000009B +:10F57000000000000000000000000000000000008B :10F58000000000000000000000000000000000007B :10F59000000000000000000000000000000000006B :10F5A000000000000000000000000000000000005B :10F5B000000000000000000000000000000000004B -:10F5C000000000000000000000000000000000003B +:10F5C000000000000000000000100000000000002B :10F5D000001000000000000000000000000000001B -:10F5E00000000000000000000000000000000038E3 -:10F5F000000000000000000000000001000000000A +:10F5E000000000000000000000000000000000001B +:10F5F000000000000000000000000000000000000B :10F6000000000000000000000000000000000000FA :10F6100000000000000000000000000000000000EA :10F6200000000000000000000000000000000000DA @@ -184236,20 +184236,20 @@ :10F7E0000000000000000000000000000000000019 :10F7F0000000000000000000000000000000000009 :10F8000000000000000000000000000000000000F8 -:10F8100000000200000000000000000003800380E0 -:10F8200009800580030041800580218000000000E0 -:10F8300000000000000000008900118041800000ED -:10F840000000200000010000000000000000000097 -:10F8500000000000000000000000000000000000A8 -:10F860000000000020000000000000000000000078 -:10F870000000000000000000000000000000000088 -:10F880000000040004000000000000000000000070 +:10F8100000000000000000000000000003801180D4 +:10F820000980018003004180058003800000000002 +:10F8300000000000000000058900418021800000D8 +:10F8400000000000000100080000000000000000AF +:10F850000000000000000000000000100000000098 +:10F860000000000800100000000000000000000080 +:10F870000000000000000000001000000005000073 +:10F880000000000000000000000000000000000078 :10F8900000000000000000000000000000009010C8 -:10F8A00084108408100290008204C010822000009E -:10F8B0000900000000000000000020A0C040A020BF -:10F8C0002020000000000000200020002020000078 -:10F8D00009000000000000000000000020200000DF -:10F8E00020000000000000000000000800000000F0 +:10F8A000821090201002900082049004A02000009A +:10F8B0000900000000000000090020A082041020C0 +:10F8C0002000200000000000202000002020000078 +:10F8D00000000000000000000000000020200000E8 +:10F8E00020000000000000000000000000000000F8 :10F8F0000000000000000000000000000000000008 :10F9000000000000000000000000000000000000F7 :10F9100000000000000000000000000000000000E7 @@ -184259,108 +184259,108 @@ :10F9500000000000000000000000000000000000A7 :10F960000000000000000000000000000000000097 :10F970000000000000000000000000000000000087 -:10F98000000000000000000000000000000800006F -:10F990000000000800400008000000840000000093 -:10F9A0000000000800000000000000000008000047 -:10F9B000000000100010000800000000000000001F -:10F9C0000000000800000000000000000000000827 -:10F9D000000000000000000000080000000000001F -:10F9E00000000000000800000088001000840008EB -:10F9F00000000000000800080008000000C00084AB -:10FA000000000000000800080008000800000000D6 -:10FA100000000000000000080000000000210000BD -:10FA20000000000000002100030000000021110080 -:10FA30002100110000000000000000000021000073 -:10FA40000000200000000000000000000000002175 -:10FA5000000000030000000800000005002100086D -:10FA60000000000300030000000000000008000088 -:10FA70000000000800000005000000000000000871 -:10FA80000000000000000000000000000000000076 +:10F980000000000000000000000000080000000867 +:10F99000000800080084000800840008000800082F +:10F9A00000080008008400080008000800000008A3 +:10F9B000008400080008000800000008000800108B +:10F9C000000800080008001000100000008400007B +:10F9D0000010008800100084008400840008008467 +:10F9E00000000084000800080000000000840008F7 +:10F9F00000000084000000080084000800080008DF +:10FA0000000800080008004000080008000000008E +:10FA100000000000000000080000000000000000DE +:10FA2000000000000000210841000005000009005E +:10FA300003001100000000050000000800000000A5 +:10FA4000000005212100000000000000000000056A +:10FA5000002100210010000000050008000800211E +:10FA60000003000800080010002100030021000826 +:10FA700000210000004100210021000000210021A0 +:10FA800000410000000300210008000500210000E3 :10FA90000000000000000000000000000000000066 -:10FAA0000000000000000000C000C00000000000D6 -:10FAB00088009000880000000000000000000000A6 -:10FAC00000000000800008000000000000000000AE +:10FAA0000000000000000000C00082000000000014 +:10FAB00090008800880000000000000000000000A6 +:10FAC000000000009000C0000000000000000000E6 :10FAD0000000000000000000000000000000000026 -:10FAE0000000000000000000000000000000000016 +:10FAE00000000000000000100000000000000008FE :10FAF0000000000000000000000000000000000006 -:10FB00000000000000000000008400000000000071 +:10FB000000000000000000000000000000000000F5 :10FB100000000000000000000000000000000000E5 -:10FB200000000000000000000000100000000000C5 -:10FB300000002000020040000000000088000800D3 -:10FB400000000000000000001000000000000000A5 +:10FB200000000000000000000000040000000000D1 +:10FB30000000040040004000000000002000000021 +:10FB400000000000000000000000000000000000B5 :10FB500000000000000000000000000000000000A5 :10FB60000000000000000000000000000000000095 :10FB70000000000000000000000000000000000085 -:10FB80000000200000000000000000000000000055 -:10FB9000080000000000000000000000000000005D +:10FB80000000000000000000000000000000000075 +:10FB90000000000000000000000000000000000065 :10FBA00000000000000000000000000080000000D5 -:10FBB0000000000000008000800000000000000045 -:10FBC00000000000000000000000800000000000B5 -:10FBD0000000000000000000000000000000000025 +:10FBB00000000000800080008000000000000000C5 +:10FBC0000000000000000000000000000000000035 +:10FBD000000000010000000800000000000000001C :10FBE0000000000000000000000000000000000015 :10FBF0000000000000000000000000000000000005 :10FC000000000000000000000000000000000000F4 :10FC100000000000000000000041000000000000A3 :10FC2000000500000000000000410000000000008E -:10FC300000000000000001000000000000000000C3 -:10FC40000000000000000000000001800000000033 -:10FC50000000000000000000000000410021000042 -:10FC60000008000300000000000800000000000081 -:10FC70000008000800000000000000000000000074 +:10FC300000000000000000000000000000000000C4 +:10FC4000000000000000000000000080000300052C +:10FC50000000000000000003000500000008000094 +:10FC6000000300000041000500000000000000212A +:10FC7000000000000000000000100000000800006C :10FC80000000000000000000000000000000000074 -:10FC90000000000000000000000000000000000064 +:10FC90000000002100000000000000000000000043 :10FCA0000000000000000000000000000000000054 -:10FCB0000000000000000000040000000000000040 -:10FCC000000000000000000000000000082000000C +:10FCB0000000000000000000000000000000000044 +:10FCC0000000000000000000000000000010000024 :10FCD0000000000000000000000000000000000024 -:10FCE0000000000000000000000000000000000014 +:10FCE0000000000000000000000000100000000004 :10FCF0000000000000000000000000000000000004 -:10FD0000000000000000000000000008000800845F -:10FD100000000000001000000000000000000000D3 -:10FD200000000000000000000021000000020000B0 -:10FD3000000000000000000000000000000088003B -:10FD4000020020000200000000210000000000006E -:10FD50000021002000080008000000080000002129 -:10FD6000000300000000000000000000000000216F -:10FD70000000000000000000000000000000000083 -:10FD8000000000000000000000000004000000006F -:10FD90000000000000000000004100000000000022 +:10FD000000000000000000000000000000000000F3 +:10FD100000000000000000000000000000000000E3 +:10FD200000000005000000000000000500020000C7 +:10FD30000000002100000000000000000000880812 +:10FD4000880000000000000000000021000000000A +:10FD500000040021000088000000001000110003D2 +:10FD60000021002100080000000000000008000041 +:10FD70000000000300000000000000000000000080 +:10FD80000000000000000000000000000000000073 +:10FD90000000002100000000000000000000000042 :10FDA0000000000000000000000000000000000053 :10FDB0000000000000000000000000000000000043 -:10FDC00000000000000000000000000000400000F3 -:10FDD00000400000000000400000000000000000A3 +:10FDC0000000000000000000000000000000000033 +:10FDD0000000000000000000000000000000000023 :10FDE0000000000000000000000000000000000013 :10FDF0000000000000000000000000000000000003 :10FE000000000000000000000000000000000000F2 :10FE100000000000000000000000000000000000E2 :10FE200000820000000020000040000000000000F0 :10FE30000082000000000000000000000000000040 -:10FE400000000000000000000082000084000000AC -:10FE50000000000000000001010884000000000014 -:10FE60000000008200000000000000000000000010 +:10FE4000000000000000000000820000050000002B +:10FE5000000000000000840101C01000000000004C +:10FE6000000100820000000000000000000000000F :10FE70000000000000000101200000400000C00060 :10FE80000100000000000100C0000140C1000001AD :10FE9000840100820000C000010000000000111178 :10FEA00000210000000011118021008000001111CC :10FEB0000021000000000000000000000000000021 -:10FEC00000000000000000410041000000000009A7 -:10FED00005410000000000000040028240000000D8 -:10FEE00011110021000000000000000000000000CF +:10FEC0000000000000000041004100000000C102ED +:10FED0004104000000000000004003118900000000 +:10FEE00000040020000000000000000000000000EE :10FEF00000000000000000000202802100800000DD :10FF000080414141000000004100802141C1C10009 :10FF10000005800500800000804141410000000094 :10FF20004100000000000400410000000080830048 :10FF3000410000000000040000000000000000007C :10FF40000000000000000000410080000002850069 -:10FF50000000040900040000000011400000100827 -:10FF6000000041000000000004000000000000004C +:10FF500000808309002000000000404100040404E8 +:10FF600000004100000000028500000000000000C9 :10FF700000000000000000000000410000000080C0 :10FF800083000080C1C10041000000002141000049 :10FF9000034141000000008083000080C1C1004196 :10FFA0000000010000000082040001000000004089 :10FFB0008300010000000082040000000000000037 :10FFC00000000000000000000000C100C00000832D -:10FFD000040000A0844000010000000000010000B7 +:10FFD000040000082184000100020000010000016B :10FFE0000100000001000000008204000000000089 :10FFF0000000000000000000000000000100000000 :02000004002DCD @@ -184369,7 +184369,7 @@ :1000200000010000000000000100000000000000CE :1000300001000000000000000100000000000000BE :1000400000000000000000000000000000000000B0 -:100050000100000000010001020500000000000096 +:100050000100000000000000848300000000000098 :10006000000000820001000000000100000000000C :100070000000C000000000000000000000000000C0 :1000800000000100000000000000C040000000006F @@ -184377,32 +184377,32 @@ :1000A0000000C0400000000000004100000000000F :1000B00000004100000000000000410000000000BE :1000C0000000000000000000000000000000000030 -:1000D0000000410000000010000300900900000033 -:1000E00000004041028000000000000041000000CC +:1000D0000000410000000004004100050400000091 +:1000E000000040020280000000000000410000000B :1000F0000000000080000000000000000000000080 :1001000000000000410000000041004180C10000EB :10011000000000004141008000000000410000009C -:100120000041004180C10000000200000202000006 -:10013000000900000909000000020000020200009E -:10014000000000000000004100000000000000006E -:100150000009000002024000410500800009004142 -:100160000009002004C00009000200020000020291 +:100120000041004180C10000000000000202000008 +:1001300000000000090900000000000002020000A9 +:1001400000000000000000020000000000000000AD +:100150000000000002024000204000808084004037 +:100160000009001089820004000200000000020261 :10017000000000000000000000410000000000003E :10018000000000020000040400004141008080C122 -:10019000004100410041C1C1004100040000404055 +:10019000004100410041C1C10041000900000202CC :1001A00000004141008080C10041000000000101C9 :1001B000000000000000000000000000000001013D -:1001C000000000000000000000010000000000002E -:1001D0000000000000000101010000000020A00458 -:1001E000000100000001A0850000000000000000E8 +:1001C000000000000000000000000000000000002F +:1001D00000000000000001010100010100101040BA +:1001E0000001000000004085000000000000000049 :1001F00001010000000000000000000100000000FC -:10020000000000000000000001010000000100C02B -:1002100040C100010001000140C1000100010000D7 -:1002200001010000000100C040C100018181000007 -:1002300000000000818100000000000081810000BA -:1002400000000000000000000700000A000000009D -:10025000000000008181000000000000000000009C -:100260000700000A0000000000000000000081817B +:10020000000000000000000000000000000100C02D +:1002100040C100010001000140C1000100000000D8 +:1002200001010000000100C040C10001484200007F +:1002300000000000484200000000000048420000AA +:1002400000000000000000000700000000000000A7 +:100250000000000048420000000000000000000014 +:100260000700900000000000000000000000821164 :10027000000000000000000000002200004200001A :10028000000000000000818100000000000000006C :100290000000220048420000000000004842818126 @@ -184441,7 +184441,7 @@ :1004A00000000000000020A4411008822504000084 :1004B000000000000000000000000000000000003C :1004C000000000000000000000000000000000002C -:1004D0000000000001A70000000000000000000074 +:1004D0000000000001E70000000000000000000034 :1004E00000000000000000000000000001E6000025 :1004F00000000000000000000000000000000000FC :1005000000000000000001E7000000000000000003 @@ -184500,7 +184500,7 @@ :100850000000000000000000000000000000000098 :100860000000000000000000000000000000000088 :100870000000000000000000000000000000000078 -:100880000000000000001001004010010000000006 +:100880000000000000001001000000010000000056 :100890000000000000000000000000000000000058 :1008A0000000000000000000000000000000000048 :1008B0000000000000000000000000000000000038 @@ -184508,7 +184508,7 @@ :1008D0000000000000000000000000000000000018 :1008E0000000000000000000000000000000000008 :1008F00000000000000000000000000000000000F8 -:1009000000000000000000002000041200000000B1 +:1009000000000000000000000000000000000000E7 :1009100000000000000000000000000000000000D7 :1009200000000000000000000000000000000000C7 :1009300000000000000000000000000000000000B7 @@ -184516,17 +184516,17 @@ :100950000000000000000000000000000000000097 :100960000000000000000000000000000000000087 :100970000000000000000000000000000000000077 -:100980000000000000000000000008000024000437 +:1009800000000000000000000000490000004004DA :100990000000000000000000000000000000000057 :1009A0000000000000000000000000000000000047 :1009B0000000000000000000000000000000000037 :1009C0000000000000000000000000000000000027 :1009D0000000A40000000000000000000000000073 :1009E0000000000000000000000000000000000007 -:1009F00000000000000000001000000010000000D7 -:100A000000000008200000000000000000000000BE -:100A10000000000000000000A90030000000E0001D -:100A20000000882900000000000000000000000015 +:1009F000000000000000000010000000E000000007 +:100A00000010004021000000000000000000000075 +:100A100000000000000000000100300000000000A5 +:100A20000000800000000000000000000000000046 :100A300000000000000000000000000000000000B6 :100A400000000000000000000000000000000000A6 :100A50000000000000000000000000000000000096 @@ -184553,23 +184553,23 @@ :100BA0000000000000000000000000000000000045 :100BB0000000000000000000000000000000000035 :100BC0000000000000000000000000000000000025 -:100BD000000000000000000000000008000000000D -:100BE00000080008000000080008000800080000D5 -:100BF00000000000000000000000000800000000ED -:100C000000080008000000080008000800080000B4 -:100C100000000000000000000000000000080000CC -:100C20000000000800080084000800080008000810 -:100C300000000000000000000000000000080000AC -:100C40000000000800080000000800080008000874 -:100C50000008000400000000000000000000000088 -:100C60000000000000000000000000000000000084 +:100BD00000000008000800000008000800000000F5 +:100BE00000000008000000000008000000080000ED +:100BF00000000008000800000008000800000008CD +:100C000000000008000000000008000000080000CC +:100C100000000000000800080000000800080000B4 +:100C200000080000000800000000000800000008A4 +:100C30000000000000080008000000080008000094 +:100C40000008000000080000000000080000000884 +:100C50000000000000000000000000000000000094 +:100C6000000800000000000000000000000000007C :100C70000000000000000000000000000000000074 :100C80000000000000000000000000000000000064 :100C90000000000000000000000000000000000054 -:100CA0000000000000000000000000000021000023 -:100CB0000000000800080000000800000008000014 -:100CC000000000000000000000000000000500001F -:100CD0000000000000000000000000000000000014 +:100CA000000000000000000000000000000500003F +:100CB000000000050000000000000000000000002F +:100CC0000000000000080003000000000003000016 +:100CD000000000000008000000000000000000000C :100CE0000000000000000000000000000000000004 :100CF00000000000000000000000000000000000F4 :100D000000000000000000000000000000000000E3 @@ -184588,7 +184588,7 @@ :100DD0000000000000000000000000000000000013 :100DE0000000000000000000000000000000000003 :100DF00000000000000000000000000000000000F3 -:100E000000000000000000000000000000080000DA +:100E000000000000000000000000000000000000E2 :100E100000000000000000000000000000000000D2 :100E200000000000000000000000000000000000C2 :100E300000000000000000000000000000000000B2 @@ -184599,9 +184599,9 @@ :100E80000000000000000000000000000000000062 :100E90000000000000000000000000000000000052 :100EA0000000000000000000000000000000000042 -:100EB000000000000000000000000005000000002D -:100EC0000000000000000000000000000000000022 -:100ED0000000000000000000000000000000000012 +:100EB0000000000000000000000000000000000032 +:100EC0000000000000000000000800050000000015 +:100ED0000000000000000000000000080003000007 :100EE0000000000000000000000000000000000002 :100EF00000000000000000000000000000000000F2 :100F000000000000000000000000000000000000E1 @@ -184615,10 +184615,10 @@ :100F80000000000000000000000000000000000061 :100F90000000000000000000000000000000000051 :100FA0000000000000000000000000000000000041 -:100FB0000021000000000000000000000000000010 -:100FC00000000000000000080021000000000000F8 -:100FD0000000000000000000000000000000000011 -:100FE00000080000000000000000000000000000F9 +:100FB0000000000000000000000000000000000031 +:100FC00000210021000000030003000000000000D9 +:100FD00000210000000000080000000000000000E8 +:100FE0000000000000000000000000000000000001 :100FF00000000000000000000000000000000000F1 :1010000000000000000000000000000000000000E0 :1010100000000000000000000000000000000000D0 @@ -184632,7 +184632,7 @@ :101090000000000000000000000000000000000050 :1010A0000000000000000000000000000000000040 :1010B0000000000000000000000000000000000030 -:1010C0000000000000000000100000000000000010 +:1010C0000000000000000000000000000000000020 :1010D0000000000000000000000000000000000010 :1010E0000000000000000000000000000000000000 :1010F00000000000000000000000000000000000F0 @@ -184647,17 +184647,17 @@ :10118000000000000000000000000000000000005F :10119000000000000000000000000000000000004F :1011A000000000000000000000000000000000003F -:1011B0000009000000000000000200000000000024 +:1011B0000008000000000000000200000000000025 :1011C0000000800000000000000900000000000096 -:1011D0000003000000000000000800000000000004 +:1011D00000090000000000000008000000000000FE :1011E00000000000000000000000000000000000FF :1011F00000000000000000000000000000000000EF :1012000000000000000000000000000000000000DE :1012100000000000000000000000000000000000CE :1012200000000000000000000000000000000000BE -:1012300000000000020000000000000000000000AC -:10124000000000001000000000000000000000008E -:10125000000000011000000000000001000000007C +:1012300000000001020000000000000000000000AB +:101240000000000008000000000000000000000096 +:10125000000000000200000000000001000000008B :10126000000000000000000000000000000000007E :10127000000000000000000000000000000000006E :10128000000000000000000000000000000000005E @@ -184776,10 +184776,10 @@ :101990000000000000000000000000000000000047 :1019A0000000000000000000000000000000000037 :1019B0000000000000000000000000000000000027 -:1019C0000000000000000000000000000000000017 +:1019C00000000000000000000000400000000000D7 :1019D0000000000000000000000000000000000007 :1019E00000000000000000000000000000000000F7 -:1019F00004000000000000000000000000000000E3 +:1019F00000000000000000000000000000000000E7 :101A000000000000000000000000000000000000D6 :101A100000000000000000000000000000000000C6 :101A200000000000000000000000000000000000B6 @@ -184787,58 +184787,58 @@ :101A40000000000000000000000000000000000096 :101A50000000000000000000000000000000000086 :101A60000000000000000000000000000000000076 -:101A700000008000000000000000000000000000E6 +:101A70000000000000000000000000000000000066 :101A80000000000000000000000000000000000056 -:101A90000000000020002000200020002000200086 -:101AA00020002000040004000400040000000000E6 +:101A90000000000000000000000000000000000046 +:101AA0000000000000000000000000000000000036 :101AB0000000000000000000000000000000000026 :101AC0000000000000000000000000000000000016 :101AD0000000000000000000000000000000000006 :101AE00000000000000000000000000000000000F6 :101AF00000000000000000000000000000000000E6 :101B000000000000000000000000000000000000D5 -:101B1000000000000000800080088000800080003D -:101B20008000800080008000800080008000000035 -:101B3000000000000000000000880000000000001D +:101B100000040000000000000000000000000000C1 +:101B200000000000000000000000000000000000B5 +:101B300000000000000000000000000000000000A5 :101B40000000000000000000000000000000000095 :101B50000000000000000000000000000000000085 :101B60000000000000000000000000000000000075 :101B70000000000000000000000000000000000065 :101B80000000000000000000000000000000000055 -:101B90000000000000000000000400040004000039 -:101BA00000000000000000000020002000200000D5 -:101BB0000000000000000000000000000000000025 +:101B90000000004000000000000000000000000005 +:101BA0000000000000000000000000000000000035 +:101BB00000000040000000000000000000000000E5 :101BC0000000000000000000000000000000000015 :101BD0000000000000000000000000000000000005 :101BE00000000000000000000000000000000000F5 :101BF00000000000000000000000000000000000E5 :101C000000000000000000000000000000000000D4 -:101C100000080000000000000000000100010001B9 -:101C200000000000000000000000000100010001B1 +:101C100000000000000000000000000000000000C4 +:101C200000000000000000000000000000000000B4 :101C300000000000000000000000000000000000A4 :101C40000000000000000000000000000000000094 :101C50000000000000000000000000000000000084 :101C60000000000000000000000000000000000074 -:101C700000000000000000000000000000840000E0 -:101C8000000000A0000000000000000000000000B4 -:101C900000000000A100010001000100020002009C -:101CA0000200020000000000000000000000000030 +:101C70000000000000000000000000000000000064 +:101C80000000000000000000000000000000000054 +:101C90000000000000000000000000000000000044 +:101CA0000000000000000021000000000000000013 :101CB0000000000000000000000000000000000024 :101CC0000000000000000000000000000000000014 :101CD0000000000000000000000000000000000004 :101CE00000000000000000000000000000000000F4 :101CF00000000000000000000000000000000000E4 :101D000000000000000000000000000000000000D3 -:101D1000000000000000020002000200020080003B -:101D20008000800080000000000000000000000033 +:101D100000000000000000000000000000000000C3 +:101D200000000000000000000000000000000000B3 :101D300000000000000000000000000000000000A3 :101D40000000000000000000000000000000000093 :101D50000000000000000000000000000000000083 :101D60000000000000000000000000000000000073 -:101D70000000000000000000000000000000000063 +:101D7000000000000000000008000000000000005B :101D80000000000000000000000000000000000053 -:101D9000000000000000000000000000000000053E -:101DA000000000008400000000002000A000840566 +:101D90000000000000000000000000000000000043 +:101DA0000000000000000000000000000000000033 :101DB0000000000000000000000000000000000023 :101DC0000000000000000000000000000000000013 :101DD0000000000000000000000000000000000003 @@ -184846,170 +184846,170 @@ :101DF00000000000000000000000000000000000E3 :101E000000000000000000000000000000000000D2 :101E100000000000000000000000000000000000C2 -:101E20000000000000000000000000008000000032 +:101E200000000000000000000000000000000000B2 :101E300000000000000000000000000000000000A2 :101E40000000000000000000000000000000000092 :101E50000000000000000000000000000000000082 -:101E60000000000000000000000000000000000072 +:101E60000000000200000000000000000000000070 :101E70000000000000000000000000000000000062 :101E8000000000000000000000000008000000004A :101E90000000000000000000000000000000000042 -:101EA00000000000000000008400000400000000AA -:101EB0000000000000000000000000200000000002 +:101EA0000000000000000000000000000000000032 +:101EB0000000000000000000000000000000000022 :101EC0000000000000000000000000000000000012 :101ED0000000000000000000000000000000000002 :101EE00000000000000000000000000000000000F2 :101EF00000000000000000000000000000000000E2 -:101F000000000000000000000000000000000008C9 +:101F000000000000000000000000000000000000D1 :101F100000000000000000000000000000000000C1 -:101F200000000000000000000000000000010000B0 -:101F300000000000000000000000000000010000A0 +:101F200000000000000000000000000000000000B1 +:101F300000000000000000000000000000000000A1 :101F40000000000000000000000000000000000091 :101F50000000000000000000000000000000000081 :101F60000000000000000000000000000000000071 :101F70000000000000000000000000000000000061 :101F80000000000000000000000000000000000051 :101F90000000000000000000000000000000000041 -:101FA00000C000000010000001C10002000000009D -:101FB00041C100000001000000000090000200404C +:101FA0000000000000000000000000000000000031 +:101FB0000000000000000000000000000000000021 :101FC0000000000000000000000000000000000011 :101FD0000000000000000000000000000000000001 -:101FE00000030000000000000000000000000000EE +:101FE00000000000000000000000000000000000F1 :101FF00000000000000000000000000000000000E1 :1020000000000000000000000000000000000000D0 :1020100000000000000000000000000000000000C0 -:10202000000000800000000000001190002100402E -:102030000000919100000009002000000080008055 +:1020200000000000000000000000000000000000B0 +:1020300000000000000000000000000000000000A0 :102040000000000000000000000000000000000090 :102050000000000000000000000000000000000080 :102060000000000000000000000000000000000070 :102070000000000000000000000000000000000060 :102080000000000000000000000000000000000050 :102090000000000000000000000000000000000040 -:1020A000000000000000001000008000100080020E -:1020B00011008000090000211111A00000000000A3 -:1020C0000000800000000000000000000000000090 +:1020A0000000000000000000000000000000000030 +:1020B0000000000000000000000000000000000020 +:1020C0000000000000000000000000000000000010 :1020D0000000000000000000000000000000000000 :1020E00000000000000000000000000000000000F0 :1020F00000000000000000000000000000000000E0 :1021000000000000000000000000000000000000CF :1021100000000000000000000000000000000000BF -:10212000000000000000000000000000C00001905E -:1021300010000100C000010000000101C00000000B -:10214000400000409000000000000000000000007F +:1021200000000000000000000000000000000000AF +:10213000000000000000000000000000000000009F +:10214000000000000000000000000000000000008F :10215000000000000000000000000000000000007F :10216000000000000000000000000000000000006F :10217000000000000000000000000000000000005F -:10218000000000000000000000000000000000202F +:10218000000000000000000000000000000000004F :10219000000000000000000000000000000000003F -:1021A000000000000000000000000000001000C05F -:1021B00000010000200200C100000001000103C076 -:1021C000004000020090000000000000000000003D +:1021A000000000000000000000000000000000002F +:1021B000000000000000000000000000000000001F +:1021C000000000000000000000000000000000000F :1021D00000000000000000000000000000000000FF :1021E00000000000000000000000000000000000EF :1021F00000000000000000000000000000000000DF :1022000000000000000000000000000000000000CE :1022100000000000000000000000000000000000BE :1022200000000000000000000000000000000000AE -:10223000008000100040000000910000000900052F -:1022400091A000000080008000000000000000005D +:10223000000000000000000000000000000000009E +:10224000000000000000000000000000000000008E :10225000000000000000000000000000000000007E :10226000000000000000000000000000000000006E :10227000000000000000000000000000000000005E :10228000000000000000000000000000000000004E :10229000000000000000000000000000000000003E -:1022A00000000000000000000000000080000000AE -:1022B000000000008000110040000040800011007C -:1022C00020800900800080800000000000000000E5 +:1022A000000000000000000000000000000000002E +:1022B000000000000000000000000000000000001E +:1022C000000000000000000000000000000000000E :1022D00000000000000000000000000000000000FE :1022E00000000000000000000000000000000000EE :1022F00000000000000000000000000000000000DE -:1023000000000000000000000000000000000008C5 +:1023000000000000000000000000000000000000CD :1023100000000000000000000000000000000000BD -:102320000000000000000000000000000000C000ED -:10233000000000880000C000010000000000C00094 -:102340000100008401009000020200000000000073 +:1023200000000000000000000000000000000000AD +:10233000000000000000000000000000000000009D +:10234000000000000000000000000000000000008D :10235000000000000000000000000000000000007D :10236000000000000000000000000000000000006D :10237000000000000000000000000000000000005D :10238000000000000000000000000000000000004D -:10239000000100000000000000000000000000003C +:10239000000000000000000000000000000000003D :1023A000000000000000000000000000000000002D -:1023B0000000000000000000840000600000000039 -:1023C0006000006000000000000600000600000041 +:1023B000000000000000000000000000000000001D +:1023C000000000000000000000000000000000000D :1023D00000000000000000000000000000000000FD :1023E00000000000000000000000000000000000ED :1023F00000000000000000000000000000000000DD :1024000000000000000000000000000000000000CC -:102410000000008100000600000000000000000035 +:1024100000000000000000000000000000000000BC :1024200000000000000000000000000000000000AC -:1024300000000000FFFF000000FF0000FFFF0000A1 -:1024400000FF0000FFFF0000AAAA00AAFFAA303F79 -:10245000303F00000000000000000000000000000D +:10243000000000000000000000000000000000009C +:10244000000000000000000000000000000000008C +:10245000000000000000000000000000000000007C :10246000000000000000000000000000000000006C :10247000000000000000000000000000000000005C :10248000000000000000000000000000000000004C :10249000000000000000000000000000000000003C :1024A000000000000000000000000000000000002C -:1024B0000000000000000000000000FF000000001D -:1024C000000000FF000000000000AAAA00AAFFAA66 -:1024D000303F303F0000000000000000000000001E +:1024B000000000000000000000000000000000001C +:1024C000000000000000000000000000000000000C +:1024D00000000000000000000000000000000000FC :1024E00000000000000000000000000000000000EC :1024F00000000000000000000000000000000000DC :1025000000000000000000000000000000000000CB :1025100000000000000000000000000000000000BB :1025200000000000000000000000000000000000AB -:102530000000000000000F0F0000FFFF0000FF0080 -:1025400000000F0F0000555500000000FFFFFC0CBD -:10255000FC0CAFAF0505000000000000000000000B +:10253000000000000000000000000000000000009B +:10254000000000000000000000000000000000008B +:10255000000000000000000000000000000000007B :10256000000000000000000000000000000000006B :10257000000000000000000000000000000000005B :10258000000000000000000000000000000000004B :10259000000000000000000000000000000000003B :1025A000000000000000000000000000000000002B -:1025B00000000000000000000F0F000000000000FD -:1025C000FF0000000F0F000055550000FFFFFFFF48 -:1025D000FC0CFC0CAFAF0505000000000000000083 +:1025B000000000000000000000000000000000001B +:1025C000000000000000000000000000000000000B +:1025D00000000000000000000000000000000000FB :1025E00000000000000000000000000000000000EB :1025F00000000000000000000000000000000000DB :1026000000000000000000000000000000000000CA :1026100000000000000000000000000000000000BA :1026200000000000000000000000000000000000AA -:102630000000000000000000000040828000002038 -:10264000920240E38000C021920240E38000C0215A -:1026500082020000003000000000000000000000C6 +:10263000000000000000000000000000000000009A +:10264000000000000000000000000000000000008A +:10265000000000000000000000000000000000007A :10266000000000000000000000000000000000006A :10267000000000000000000000000000000000005A :10268000000000000000000000000000000000004A -:10269000000000000000000000000000000000201A -:1026A000000000A00000000000000000000000008A +:10269000000000000000000000000000000000003A +:1026A000000000000000000000000000000000002A :1026B000000000000000000000000000000000001A -:1026C00000000000AF05AF053030F3F3FC0CFC0C4C -:1026D00000FFF0F00000000000000000000000001B +:1026C000000000000000000000000000000000000A +:1026D00000000000000000000000000000000000FA :1026E00000000000000000000000000000000000EA :1026F00000000000000000000000000000000000DA :1027000000000000000000000000000000000000C9 :1027100000000000000000000000000000000000B9 :1027200000000000000000000000000000000000A9 :102730000000000000000000000000000000000099 -:10274000000000000000AF05AF053030F3F3FC0CD3 -:10275000FC0C00FFF0F00000000000000000000092 +:102740000000000000000000000000000000000089 +:102750000000000000000000000000000000000079 :102760000000000000000000000000000000000069 :102770000000000000000000000000000000000059 :102780000000000000000000000000000000000049 :102790000000000000000000000000000000000039 :1027A0000000000000000000000000000000000029 :1027B0000000000000000000000000000000000019 -:1027C00000000000000000000F0FFF0028EB28EBC6 -:1027D000CFCF0C0C00FF3C3C0000000000000000CC +:1027C0000000000000000000000000000000000009 +:1027D00000000000000000000000000000000000F9 :1027E00000000000000000000000000000000000E9 :1027F00000000000000000000000000000000000D9 :1028000000000000000000000000000000000000C8 :1028100000000000000000000000000000000000B8 :1028200000000000000000000000000000000000A8 :102830000000000000000000000000000000000098 -:10284000000000000000000000000F0FFF0028EB58 -:1028500028EBCFCF0C0C00FF3C3C00000000000038 +:102840000000000000000000000000000000000088 +:102850000000000000000000000000000000000078 :102860000000000000000000000000000000000068 :102870000000000000000000000000000000000058 :102880000000000000000000000000000000000048 @@ -185017,14 +185017,14 @@ :1028A0000000000000000000000000000000000028 :1028B0000000000000000000000000000000000018 :1028C0000000000000000000000000000000000008 -:1028D00000000000000000000000200020000000B8 +:1028D00000000000000000000000000000000000F8 :1028E00000000000000000000000000000000000E8 -:1028F0000000000000000000000020002000000098 -:1029000000000000000000000000000000000000C7 -:102910000000000000000000000000000000200097 -:10292000000000000000000000000800000000009F -:102930000000000000000000000000000000200077 -:102940000000000000000000000000000000000087 +:1028F000000000000000000000000000C000000018 +:102900000000000000000000000000004000000087 +:1029100000000000000000000000000000000000B7 +:102920000000000000000000000000002000840003 +:102930000000000000000000000000000000000097 +:10294000C0000000000000000000000000000000C7 :102950000000000000000000000000000000000077 :102960000000000000000000000000000000000067 :102970000000000000000000000000000000000057 @@ -185033,36 +185033,36 @@ :1029A0000000000000000000000000000000000027 :1029B0000000000000000000000000000000000017 :1029C0000000000000000000000000000000000007 -:1029D0002000200020002000000000000000000077 -:1029E00000000000000000000000000000000000E7 +:1029D00000000003000000000000000000000000F4 +:1029E00000000000000000000000000000000003E4 :1029F00000000000000000000000000000000000D7 :102A000000000000000000000000000000000000C6 :102A100000000000000000000000000000000000B6 :102A200000000000000000000000000000000000A6 :102A30000000000000000000000000000000000096 :102A40000000000000000000000000000000000086 -:102A50000000800080008000800000000000000076 -:102A60000000000000000000000000000000000066 +:102A500000000000000000000000008400000000F2 +:102A6000000800000000000000000000000000005E :102A70000000000000000000000000000000000056 -:102A80000000000000000000000000000000000046 +:102A800000820000000000000000000000000000C4 :102A90000000000000000000000000000000000036 -:102AA0000000000000000000000000000000000026 -:102AB0000000000000000000000000000000000016 -:102AC00000000000000000000000000000000040C6 -:102AD0000000000000800080008000000000000076 -:102AE00000000000000000000000000000000000E6 -:102AF00000000000000000000000000000000000D6 +:102AA0000000000000020000000000000000000024 +:102AB000000000000000000000000008000000000E +:102AC0000000000000000000000000000000000006 +:102AD00000000000000000000000000000000000F6 +:102AE00000000000000000000000000000210000C5 +:102AF00000000000000000000000000000050000D1 :102B000000000000000000000000000000000000C5 :102B100000000000000000000000000000000000B5 :102B200000000000000000000000000000000000A5 :102B30000000000000000000000000000000000095 :102B40000000000000000000000000000000000085 -:102B50000000020000000004000400040500000062 +:102B50000000000000000000000000000000000075 :102B60000000000000000000000000000000000065 :102B70000000000000000000000000000000000055 :102B80000000000000000000000000000000000045 -:102B90000000000000000000000000000000000035 -:102BA0000000000000000000000000000000210004 +:102B9000000000000000000000000000000000082D +:102BA0000000000000000000000000000000000025 :102BB0000000000000000000000000000000000015 :102BC0000000000000000000000000000000000005 :102BD00000000000000000000000000000000000F5 @@ -185071,58 +185071,58 @@ :102C000000000000000000000000000000000000C4 :102C100000000000000000000000000000000000B4 :102C200000000000000000000000000000000000A4 -:102C30000000000000000000000000000000000094 -:102C40000000000000000000000000000000000084 +:102C30000000000000000000C000000000000000D4 +:102C40000000000000000000820000000000000002 :102C50000000000000000000000000000000000074 :102C60000000000000000000000000000000000064 :102C70000000000000000000000000000000000054 :102C80000000000000000000000000000000000044 :102C90000000000000000000000000000000000034 :102CA0000000000000000000000000000000000024 -:102CB0000000000000000000000000000000000014 +:102CB000000000000000000005004100400000008E :102CC0000000000000000000000000000000000004 -:102CD00000000000000000000200000000000000F2 +:102CD00000000000000000000000000000000000F4 :102CE00000000000000000000000000000000000E4 :102CF00000000000000000000000000000000000D4 :102D000000000000000000000000000000000000C3 :102D100000000000000000000000000000000000B3 -:102D200000000000000000000000000000000000A3 +:102D2000000000000000000000000000000008009B :102D30000000000000000000000000000000000093 :102D40000000000000000000000000000000000083 -:102D500000000000000000000000000000840000EF -:102D6000000000000500000000000000000000005E +:102D50000000000000000000000000000000000073 +:102D60000000000000000000000000000000000063 :102D70000000000000000000000000000000000053 :102D80000000000000000000000000000000000043 :102D90000000000000000000000000000000000033 :102DA0000000000000000000000000000000000023 -:102DB00000000000000000000000004000000000D3 +:102DB0000000000000000000000000000000000013 :102DC0000000000000000000000000000000000003 :102DD00000000000000000000000000000000000F3 -:102DE00000000000000000040000000000000000DF +:102DE00000000000000000000000000000000000E3 :102DF00000000000000000000000000000000000D3 :102E000000000000000000000000000000000000C2 -:102E100000000000000000000000000000000000B2 -:102E200000000000000000000000000000000000A2 -:102E3000080000000000000000000000000000008A +:102E100000080000000000000000000000000000AA +:102E20000000000000000080000000000000000022 +:102E30000000000000000000000000000000000092 :102E40000000000000000000000000000000000082 :102E50000000000000000000000000000000000072 -:102E60000000000000000000000100000000000061 -:102E70000000000000000000000000000000000052 -:102E80000000000000000000000000000000000042 +:102E60000000000000000000000000A000000000C2 +:102E7000000800000000000000000000000000004A +:102E800000000000000000000000008400000000BE :102E90000000000000000000000000000000000032 -:102EA0000000000000000000000000000000000022 +:102EA0000000000000000000001000000000000012 :102EB0000000000000000000000000000000000012 :102EC0000000000000000000000000000000000002 :102ED00000000000000000000000000000000000F2 -:102EE00000000000000100000001000000000000E0 +:102EE00000000000000000000000000000000000E2 :102EF00000000000000000000000000000000000D2 :102F000000000000000000000000000000000000C1 -:102F100000000000000000000000000000010000B0 +:102F100000000000000000000000000000000000B1 :102F200000000000000000000000000000000000A1 :102F30000000000000000000000000000000000091 :102F40000000000000000000000000000000000081 :102F50000000000000000000000000000000000071 -:102F6000000000000000001100000002002000002E +:102F60000000000000000000000000000000000061 :102F70000000000000000000000000000000000051 :102F80000000000000000000000000000000000041 :102F90000000000000000000000000000000000031 @@ -185130,7 +185130,7 @@ :102FB0000000000000000000000000000000000011 :102FC0000000000000000000000000000000000001 :102FD00000000000000000000000000000000000F1 -:102FE00000000000000000000200000011002000AE +:102FE00000000000000000000000000000000000E1 :102FF00000000000000000000000000000000000D1 :1030000000000000000000000000000000000000C0 :1030100000000000000000000000000000000000B0 @@ -185138,7 +185138,7 @@ :103030000000000000000000000000000000000090 :103040000000000000000000000000000000000080 :103050000000000000000000000000000000000070 -:10306000000000000000000000000100000001005E +:103060000000000000000000000000000000000060 :103070000000000000000000000000000000000050 :103080000000000000000000000000000000000040 :103090000000000000000000000000000000000030 @@ -185146,8 +185146,8 @@ :1030B0000000000000000000000000000000000010 :1030C0000000000000000000000000000000000000 :1030D00000000000000000000000000000000000F0 -:1030E00000000000000000000000000000000001DF -:1030F00000010100000000000000000000000000CE +:1030E00000000000000000000000000000000000E0 +:1030F00000000000000000000000000000000000D0 :1031000000000000000000000000000000000000BF :1031100000000000000000000000000000000000AF :10312000000000000000000000000000000000009F @@ -185155,7 +185155,7 @@ :10314000000000000000000000000000000000007F :10315000000000000000000000000000000000006F :10316000000000000000000000000000000000005F -:103170000002000511200000000000000000000017 +:10317000000000000000000000000000000000004F :10318000000000000000000000000000000000003F :10319000000000000000000000000000000000002F :1031A000000000000000000000000000000000001F @@ -185163,7 +185163,7 @@ :1031C00000000000000000000000000000000000FF :1031D00000000000000000000000000000000000EF :1031E00000000000000000000000000000000000DF -:1031F000000011002000020000000000000000009C +:1031F00000000000000000000000000000000000CF :1032000000000000000000000000000000000000BE :1032100000000000000000000000000000000000AE :10322000000000000000000000000000000000009E @@ -185171,7 +185171,7 @@ :10324000000000000000000000000000000000007E :10325000000000000000000000000000000000006E :10326000000000000000000000000000000000005E -:10327000000000000100000001000000000000004C +:10327000000000000000000000000000000000004E :10328000000000000000000000000000000000003E :10329000000000000000000000000000000000002E :1032A000000000000000000000000000000000001E @@ -185179,7 +185179,7 @@ :1032C00000000000000000000000000000000000FE :1032D00000000000000000000000000000000000EE :1032E00000000000000000000000000000000000DE -:1032F000000000006000006000000000000000000E +:1032F00000000000000000000000000000000000CE :1033000000000000000000000000000000000000BD :1033100000000000000000000000000000000000AD :10332000000000000000000000000000000000009D @@ -185228,7 +185228,7 @@ :1035D00000000000000000000000000000000000EB :1035E00000000000000000000000000000000000DB :1035F00000000000000000000000000000000000CB -:1036000000610000C0010000000000000000000098 +:1036000000000000000000000000000000000000BA :1036100000000000000000000000000000000000AA :10362000000000000000000000000000000000009A :10363000000000000000000000000000000000008A @@ -185236,7 +185236,7 @@ :10365000000000000000000000000000000000006A :10366000000000000000000000000000000000005A :10367000000000000000000000000000000000004A -:103680000000FC0CFC0C00FFF0F00000000000004B +:10368000000000000000000000000000000000003A :10369000000000000000000000000000000000002A :1036A000000000000000000000000000000000001A :1036B000000000000000000000000000000000000A @@ -185244,7 +185244,7 @@ :1036D00000000000000000000000000000000000EA :1036E00000000000000000000000000000000000DA :1036F00000000000000000000000000000000000CA -:1037000000000000FC0CFC0C00FFF0F000000000CA +:1037000000000000000000000000000000000000B9 :1037100000000000000000000000000000000000A9 :103720000000000000000000000000000000000099 :103730000000000000000000000000000000000089 @@ -185252,7 +185252,7 @@ :103750000000000000000000000000000000000069 :103760000000000000000000000000000000000059 :103770000000000000000000000000000000000049 -:10378000000000000000CFCF0C0C00FF3C3C00000C +:103780000000000000000000000000000000000039 :103790000000000000000000000000000000000029 :1037A0000000000000000000000000000000000019 :1037B0000000000000000000000000000000000009 @@ -185260,7 +185260,7 @@ :1037D00000000000000000000000000000000000E9 :1037E00000000000000000000000000000000000D9 :1037F00000000000000000000000000000000000C9 -:103800000000000000000000CFCF0C0C00FF3C3C8B +:1038000000000000000000000000000000000000B8 :1038100000000000000000000000000000000000A8 :103820000000000000000000000000000000000098 :103830000000000000000000000000000000000088 @@ -185268,96 +185268,96 @@ :103850000000000000000000000000000000000068 :103860000000000000000000000000000000000058 :103870000000000000000000000000000000000048 -:103880000000000000000000000000000000000038 -:103890000000000000000000000000000000000028 -:1038A0000000000000000000000000000000000018 -:1038B0000000000000000000000000000000000008 -:1038C00000000000000000000000000000000000F8 -:1038D00000000000000000000000000000000000E8 -:1038E00000000000000000000000000000000000D8 -:1038F00000000000000000000000000000000000C8 +:10388000000000000000A000000000000000000098 +:103890000000000000080000000000000000000020 +:1038A000000000000000880088000000A0008800E0 +:1038B000A0000000A01100000000A0008800C000CF +:1038C00000000003000000002000000000002000B5 +:1038D00000000000000020000000000020000000A8 +:1038E00000000000000000000000000000002000B8 +:1038F0000000000000002000000000002000000088 :1039000000000000000000000000000000000000B7 :1039100000000000000000000000000000000000A7 :103920000000000000000000000000000000000097 -:103930000000000000000000000000000000000087 +:103930000000000011000000000000000000000076 :103940000000000000000000000000000000000077 :103950000000000000000000000000000000000067 :103960000000000000000000000000000000000057 :103970000000000000000000000000000000000047 -:103980000000000000000000000000000000000037 +:10398000000000000000000000080000000000032C :103990000000000000000000000000000000000027 :1039A0000000000000000000000000000000000017 :1039B0000000000000000000000000000000000007 -:1039C00000000000000000000000000000000000F7 +:1039C0000000000000800000000000000000000077 :1039D00000000000000000000000000000000000E7 -:1039E00000000000000000000000000000000000D7 +:1039E0001010104020020410000000000000000031 :1039F00000000000000000000000000000000000C7 -:103A000000000000000000000000000000000000B6 -:103A100000000000000000000000000000000000A6 -:103A20000000000000000000000000000000000096 -:103A30000000000000000000000000000000000086 -:103A40000000000000000000000000000000000076 -:103A50000000000000000000000000000000000066 -:103A60000000000000000000000000000000000056 -:103A70000000000000000000000000000000000046 -:103A80000000000000000000000000000000000036 -:103A90000000000000000000000000000000000026 -:103AA0000000000000000000000000000000000016 -:103AB0000000000000000000000000000000000006 -:103AC00000000000000000000000000000000000F6 -:103AD00000000000000000000000000000000000E6 -:103AE00000000000000000000000000000000000D6 +:103A00000000000000002008008400820000000088 +:103A10000000008400020008000000000000008494 +:103A20000084008400820084000000840000000004 +:103A300000000000000000840090009000000000E2 +:103A400000000000000000040000008400000000EE +:103A50000000000000000000200000000000000046 +:103A6000000080018001800180010000000400004E +:103A70000000000000000000000000040000000042 +:103A8000000000000000000080010021000400058B +:103A900000090005001100000000000800000000FF +:103AA0000000002100210021002100030021000965 +:103AB000002100040002001100090004002100049C +:103AC00000040000000000200009000000210008A0 +:103AD00000000000000000000000000000080000DE +:103AE00000000000000000000020000000000000B6 :103AF00000000000000000000000000000000000C6 -:103B000000000000000000000000000000000000B5 -:103B100000000300000000000000000000000000A2 +:103B0000000000000000000000080021000000008C +:103B100000000000000000000000000000000002A3 :103B20000000000000000000000000000000000095 -:103B30000000000000000000000000000000000085 -:103B40000000000000000000000000000000000075 +:103B30000000000000000000000000044000000041 +:103B40000000000000000000000000200000000055 :103B50000000000000000000000000000000000065 -:103B60000000000000000000000000000000000055 +:103B60000000000000000000000003000000000052 :103B70000000000000000000000000000000000045 -:103B80000000000000000000000000000000000035 -:103B90000000000000000000000000000000000025 -:103BA0000000000000000000000000000000000015 -:103BB0000000000000000000000000000000000005 -:103BC00000000000000000000000000000000000F5 -:103BD00000000000000000000000000000000000E5 -:103BE00000000000000000000000000000000000D5 -:103BF00000000000000000000000000000000000C5 -:103C000000000000000000000000000000000000B4 -:103C100000000000000000000000000000000000A4 -:103C20000000000000000000000000000000000094 -:103C30000000000000000000000000000000000084 -:103C40000000000000000000000000000000000074 +:103B80000200000000000000000000000000000033 +:103B900000008400000000000000000000000000A1 +:103BA00000008200C000000000001000C080000083 +:103BB0000000000000000000C00000000000000045 +:103BC0000000000000000000000000000080000075 +:103BD00000000000000008000000000008000000D5 +:103BE00000000800000082000000080008800000BB +:103BF0000000000000008200A0008200820000009F +:103C0000840000008400820008008200820000001E +:103C10000000000041000000000000000000000063 +:103C20000082000000000084000000000000000886 +:103C300000000000000000000000000000A00300E1 +:103C400000820000000000000000000000000008EA :103C50000000000000000000000000000000000064 -:103C60000000000000000000000000000000000054 +:103C60000000000000000000000000000000002034 :103C70000000000000000000000000000000000044 -:103C80000000000000000000000000000000000034 -:103C90000000000000000000000000000000000024 -:103CA0000000000000000000000000000000000014 -:103CB0000000000000000000000000000000000004 -:103CC00000000000000000000000000000000000F4 -:103CD00000000000000000000000000000000000E4 -:103CE00000000000000000000000000000000000D4 -:103CF00000000000000000000000000000000000C4 +:103C80000000000021000000000000000000000013 +:103C90000000000000004000000090002000000034 +:103CA000000090000000000000210000000400005F +:103CB00000044008000008000400040000000000A8 +:103CC00000020000000000000000000000000000F2 +:103CD0000020000002004000000000000000000082 +:103CE0008800000000110000000400000000000037 +:103CF00000040004002082040211000000000800FB :103D000000000000000000000000000000000000B3 :103D100000000000000000000000000000000000A3 :103D20000000000000000000000000000000000093 -:103D30000000000000000000000000000000000083 +:103D30000000000100000000000000000000000082 :103D40000000000000000000000000000000000073 :103D50000000000000000000000000000000000063 :103D60000000000000000000000000000000000053 :103D70000000000000000000000000000000000043 :103D80000000000000000000000000000000000033 -:103D90000000000000000000000000000000000023 -:103DA0000000000000000000000000000000000013 -:103DB0000000000000000000000000000000000003 -:103DC00000000000000000000000000000000000F3 +:103D90000000000000000005000084000000000397 +:103DA00000000021000000210000000000000005CC +:103DB000000300050008002100008221000000002F +:103DC00000000000C0000000000000000000000033 :103DD00000000000000000000000000000000000E3 -:103DE00000000000000000000000000000000000D3 -:103DF00000000000000000000000000000000000C3 -:103E000000000000000000000000000000000000B2 -:103E100000000000000000000000000000000000A2 +:103DE000C000000000000000000000000000000013 +:103DF0000800000000000000A00000000800000013 +:103E0000C000C00000000000000000000000000032 +:103E10000000002100210000000000000000000060 :103E20000000000000000000000000000000000092 :103E30000000000000000000000000000000000082 :103E40000000000000000000000000000000000072 @@ -185365,80 +185365,80 @@ :103E60000000000000000000000000000000000052 :103E70000000000000000000000000000000000042 :103E80000000000000000000000000000000000032 -:103E90000000000000000000000000000000000022 -:103EA0000000000000000000000000000000000012 -:103EB0000000000000000000000000000000000002 -:103EC00000000000000000000000000000000000F2 -:103ED00000000000000000000000000000000000E2 -:103EE00000000000000000000000000000000000D2 -:103EF00000000000000000000000000000000000C2 -:103F000000000000000000000000000000000000B1 -:103F100000000000000000000000000000000000A1 -:103F20000000000000000000000000000000000091 -:103F30000000000000000000000000000000000081 -:103F40000000000000000000000000000000000071 -:103F50000000000000000000000000000000000061 -:103F60000000000000000000000000000000000051 -:103F70000000000000000000000000000000000041 -:103F80000000000000000000000000000000000031 -:103F90000000000000000000000000000000000021 -:103FA0000000000000000000000000000000000011 -:103FB0000000000000000000000000000000000001 -:103FC00000000000000000000000000000000000F1 -:103FD00000000000000000000000000000000000E1 -:103FE00000000000000000000000000000000000D1 -:103FF00000000000000000000000000000000000C1 -:1040000000000000000000000000000000000000B0 -:1040100000000000000000000000000000000000A0 -:104020000000000000000000000000000000000090 -:104030000000000000000000000000000000000080 -:104040000000000000000000000000000000000070 -:104050000000000000000000000000000000000060 -:104060000000000000000000000000000000000050 -:104070000000000000000000000000000000000040 -:104080000000000000000000000000000000000030 -:104090000000000000000000000000000000000020 -:1040A0000000000000000000000000000000000010 -:1040B0000000000000000000000000000000000000 -:1040C00000000000000000000000000000000000F0 -:1040D00000000000000000000000000000000000E0 -:1040E00000000000000000000000000000000000D0 -:1040F00000000000000000000000000000000000C0 -:1041000000000000000000000000000000000000AF -:10411000000000000000000000000000000000009F -:10412000000000000000000000000000000000008F -:10413000000000000000000000000000000000007F -:10414000000000000000000000000000000000006F -:10415000000000000000000000000000000000005F -:10416000000000000000000000000000000000004F -:10417000000000000000000000000000000000003F -:10418000000000000000000000000000000000002F -:10419000000000000000000000000000000000001F -:1041A000000000000000000000000000000000000F -:1041B00000000000000000000000000000000000FF -:1041C00000000000000000000000000000000000EF -:1041D00000000000000000000000000000000000DF -:1041E00000000000000000000000000000000000CF -:1041F00000000000000000000000000000000000BF -:1042000000000000000000000000000000000000AE -:10421000000000000000000000000000000000009E -:10422000000000000000000000000000000000008E -:10423000000000000000000000000000000000007E -:10424000000000000000000000000000000000006E -:10425000000000000000000000000000000000005E -:10426000000000000000000000000000000000004E -:10427000000000000000000000000000000000003E -:10428000000000000000000000000000000000002E -:10429000000000000000000000000000000000001E -:1042A000000000000000000000000000000000000E -:1042B00000000000000000000000000000000000FE -:1042C00000000000000000000000000000000000EE -:1042D00000000000000000000000000000000000DE -:1042E00000000000000000000000000000000000CE -:1042F00000000000000000000000000000000000BE -:1043000000000000000000000000000000000000AD -:10431000000000000000000000000000000000009D -:10432000000000000000000000000000000000008D +:103E9000000000000000000000000001000100011F +:103EA00000C10001000100C00089000000010008FD +:103EB00000100001880100C10000000100010001A4 +:103EC00000C00001000100C00041000000010084AA +:103ED00000040001000100C0000000020000C10059 +:103EE0000001C1820100C0000140C003C000C10147 +:103EF0000040C0820000C000019188000001000164 +:103F0000000100C00001000100C00021000100010B +:103F1000000800880001400100C00000004100418D +:103F20000041008800410041008508410002024133 +:103F300000800080004100410090000000410041ED +:103F4000004100C0004100410085084100100241CD +:103F5000008000800041004100A0000000000041FE +:103F6000C1410041C188414180414182A08385080F +:103F700088030080808000418041080300000041E8 +:103F80000041004100C0004100410085084100029D +:103F90000541008000000041804100C00000410058 +:103FA000030000000080410083000000100090002A +:103FB0000900000088004100C100000080004100AD +:103FC0000300000000804100830000000200100098 +:103FD0008280000883004100C1000000000000034F +:103FE0004100084100C100004141884100410841B1 +:103FF00090C108C100908380C100C14100C1801000 +:1040000041000300000000804100C00000000800E3 +:1040100010008200000088004100C10000408000C4 +:1040200001000100000000C00100C000000000000D +:10403000030084C000C0C1000300C10000888200EA +:1040400001000100000000C00100C00000000000ED +:104050000300401000C0C0080900C100002090000B +:1040600000000000000100C1000000014001000943 +:10407000000111C1091100C183C01000400100C13D +:10408000820101000100000000C00100C00000002A +:104090000100200008880090C1004100C1000040DC +:1040A000820000C00001C0C100000000000100C18A +:1040B00082100009000100C10000000000010001A1 +:1040C000000000C00001C0C100000000000100C0ED +:1040D000C0090009000100C100000000000100004B +:1040E0000000000000400000C1830000000000004C +:1040F000C14088C100020000C14000000000000073 +:10410000C000000000C00001C0C1000000000001AC +:1041100000C102830005000100C100000000000191 +:10412000000000000080004180C10000000000414C +:104130000090800200C1004100C100000000004169 +:10414000001000000080004180C10000000000411C +:1041500000C080080041004100C100000000004193 +:1041600000200000000000800041C183000000002A +:104170000041C190004000C10041C1C100000000E9 +:104180000021914100000080004180C1000000003A +:1041900000410082030300C1004100C10000000093 +:1041A000004100400000C103802180C10080410225 +:1041B000000541004100C1410000800200004100B3 +:1041C000000080004100C100800080C10000410863 +:1041D000000041004100C141000080080000410092 +:1041E0000000800041000000C188804180C10000C3 +:1041F0004141800890C140C1C141008080C10000A0 +:104200004141001180801011C100800080C1000078 +:104210004100001005004100C14100008020000065 +:104220004100000080004100C1014000C0C1008287 +:104230000100020102000100C1111000C0000000D5 +:1042400001000000C0000100C1004000C0C100002A +:104250000100100090000100C1911000C001000099 +:1042600001000000C0000100000040C020018240A9 +:1042700000000001100183C101C1402108C040C1FC +:1042800000000001000082C00020C1004000C0C149 +:1042900000000100200103000100C1912000C000C6 +:1042A000000001000000C00001000000000000004C +:1042B00000420000000000000000811200480700DA +:1042C00048000000000000000000000000000000A6 +:1042D00000420000000000000006811200480700B4 +:1042E0004800000000000000000000000000000086 +:1042F00000004842000000000000484282110060B7 +:104300000600484200000000000048420000000093 +:104310000000004200000000000000008112004880 +:10432000070048000000000000000000000000003E :10433000000000000000000000000000000000007D :10434000000000000000000000000000000000006D :10435000000000000000000000000000000000005D @@ -185455,231 +185455,231 @@ :1044000000000000000000000000000000000000AC :10441000000000000000000000000000000000009C :10442000000000000000000000000000000000008C -:10443000000000000000000000000000000000007C -:10444000000000000000000000000000000000006C -:10445000000000000000000000000000000000005C -:10446000000000000000000000000000000000004C -:10447000000000000000000000000000000000003C +:10443000757B00000000000000000000000000008C +:104440000000000000000000000000000000DEAEE0 +:10445000757B00000000000000000000000000006C +:104460000000000000000000000000000000DEAEC0 +:104470000000757B0000000000000000000000004C :10448000000000000000000000000000000000002C -:10449000000000000000000000000000000000001C +:10449000DEAE757B000000000000000000000000A0 :1044A000000000000000000000000000000000000C -:1044B00000000000000000000000000000000000FC -:1044C00000000000000000000000000000000000EC -:1044D00000000000000000000000000000000000DC -:1044E00000000000000000000000000000000000CC -:1044F00000000000000000000000000000000000BC -:1045000000000000000000000000000000000000AB -:10451000000000000000000000000000000000009B -:10452000000000000000000000000000000000008B -:10453000000000000000000000000000000000007B -:10454000000000000000004100000000000000002A -:10455000000000000000000000000000000000005B -:10456000000000000000000000000000000000004B -:10457000000000000000000000000000000000003B -:10458000000000000000000000000000000000002B -:10459000000000000000000000000000000000001B -:1045A0000000000000000000000200000000000009 -:1045B00000000000000000000000000000000000FB +:1044B000DEAE60C603000000000000000031E00036 +:1044C0000000000000000C0000000000000000C020 +:1044D000630660C603000000000000000031E00039 +:1044E0000000000000000C0000000000000000C000 +:1044F0006306000067E64340000000000000023150 +:10450000E0000000000000000C400000000000007F +:1045100002C267E660C60300000000000000003130 +:10452000E0000000000000000C000000000000009F +:1045300000C063060000000000000000000800004A +:10454000000000000000000000000000000000006B +:1045500000000000000000000000000000009000CB +:10456000000000000800000000008400000040007F +:10457000400040000000400000000800C0000000B3 +:1045800020000000000020000000000000000000EB +:104590002000200020002000000000008800000013 +:1045A00000000000000020000000000000000000EB +:1045B000200020002000000000000000000000009B :1045C00000000000000000000000000000000000EB :1045D00000000000000000000000000000000000DB -:1045E00000000000000000000000000000000000CB +:1045E000000000000000000000000000410000008A :1045F00000000000000000000000000000000000BB :1046000000000000000000000000000000000000AA :10461000000000000000000000000000000000009A :10462000000000000000000000000000000000008A -:10463000000000000000000000000000000000007A -:10464000000000000000000000000000000000006A -:104650000100000000000000000000000000040055 -:10466000040004000400000004000000000000003A -:104670000000010001000000000000000000000038 -:10468000040004000000040000000000000000001E +:104630000000050000000000000000000000000075 +:104640000200000000000000000000000000000068 +:10465000000000000000000000000000000000005A +:10466000000000000000000000000000000000004A +:10467000000000000000000000000000000000003A +:10468000000000000000000000000000000090009A :10469000000000000000000000000000000000001A :1046A000000000000000000000000000000000000A -:1046B00000000000000000000000000800000000F2 -:1046C00000000000000000000008000800000000DA -:1046D00000000400000000000004000800000000CA -:1046E00080008000800080000008808400000000BE -:1046F00000000000040004000000000000040000AE -:104700000000800080000000800000080000000021 -:104710000000000000000000000000000008000091 -:104720000000000000000000000000080000000081 +:1046B0000000000000000000000000000000008278 +:1046C0000008800200000000000800000000000058 +:1046D00000100000000000000000000000000000CA +:1046E00000840088000000000004000000000008B2 +:1046F000008800820084000000000000000000002C +:1047000000000000000000000000000000000000A9 +:104710000004000000000000000000000000000095 +:104720000000000000000000000000000000000089 :104730000000000000000000000000000000000079 -:104740000000000000000000000000000000000069 -:104750000000000000000000000000000000000059 -:104760000000000000000000000000000000000049 -:104770000000000000000000000000000000000831 -:104780000000000000000000000000000000000029 +:104740000000000800000000000000000000000061 +:104750000000000000000000001100000000000048 +:104760000041000000000000000000000000000008 +:104770000000001100000000000000000000000028 +:1047800000400000000000000040000000000000A9 :104790000000000000000000000000000000000019 :1047A0000000000000000000000000000000000009 :1047B00000000000000000000000000000000000F9 -:1047C00000000000000000000000000000000000E9 -:1047D00000000000000000000000000000000000D9 -:1047E00000000000000000000000000000000000C9 -:1047F00000000000000000000000000000000000B9 -:1048000000000000000000000000000000000000A8 -:104810000000000000000000000000000000000098 -:104820000000000000000000000000000000000088 -:104830000000000000000000000000000000000078 -:1048400000008200000000000000000000000000E6 -:104850000020002000200020000000200020002078 -:1048600000200020002000000000000000000020C8 -:104870000000002010200020002000000000002088 -:1048800000000020002000000000000000200000C8 -:1048900000200000000000000000000000000000F8 +:1047C00000000084000000000020000000000084C1 +:1047D000000000A00010008400080000000000009D +:1047E00000000002000000000000000000000000C7 +:1047F00000A003000020000000A000000000000056 +:104800000000000000004100000020000000000047 +:104810000000000000200000400000000000000038 +:1048200000000000080003821100000010002100B9 +:104830000000000000000008000000000000000070 +:104840000000000000000000000000000000000068 +:104850000000000000000000000000000000000058 +:1048600000000000C0000000000000000000000088 +:104870000000000000000000000000000000000038 +:104880000000000000000000000000000000000028 +:104890000000000000000000080000000000000010 :1048A0000000000000000000000000000000000008 -:1048B00000000000000000000000000000000000F8 +:1048B00000000000A0000000000000004000000018 :1048C00000000000000000000000000000000000E8 -:1048D00000000001000100010001000000010001D2 -:1048E00000010001000100010000000000000000C4 -:1048F00000010000000100010001000100000000B3 -:1049000000010000000100010000000000000001A3 -:104910000000000100000000000000000000000096 +:1048D00000000000000000000000000000000000D8 +:1048E00000000000000000000000000000000000C8 +:1048F00000000000000000000000000000000000B8 +:1049000000000000000000000000000000000000A7 +:104910000000000000000000000000000000000097 :104920000000000000000000000000000000000087 :104930000000000000000000000000000000000077 -:104940000000000000000000000000000000000067 -:1049500000000000000000008400000000000000D3 -:10496000A000000000000000840000000000000023 -:1049700000000000000000008400000000000000B3 -:1049800000000000000000000000840000000000A3 +:104940000000000000000000A000080000000000BF +:10495000000000080000000200000041000000000C +:1049600000008800000000000000000000000000BF +:1049700000000040000000000000000002000000F5 +:104980000000000000000000000000000000000027 :104990000000000000000000000000000000000017 :1049A0000000000000000000000000000000000007 -:1049B00000000000000000000000000000000000F7 -:1049C00000000000000000000000000000000000E7 -:1049D00000000000000000000000000000000000D7 -:1049E00000000000000000000000000000000000C7 -:1049F00000000000000000000000000000000000B7 -:104A000000000000000000000000000000000000A6 -:104A10000000000000000000000000000000000096 -:104A20000000000000000000000000000000000086 -:104A30000000000000000000000000000000000076 -:104A40000000000000000000000000000000000066 -:104A50000000000000000000000082008400000050 -:104A60000000A000000000000000A0000000000006 -:104A70000000A000000000000000A00000000000F6 -:104A80000000000000000000000000001000008096 +:1049B00000000011000000000000000000000000E6 +:1049C00000000000000000880000000000000090CF +:1049D0001100000000000000000000002090000016 +:1049E00011000090000000000000000000A0000284 +:1049F00000004000000002000000000005900002DE +:104A00000000210000000000000000000000000085 +:104A10000090040040200000110004040004110074 +:104A20000088400011000088000000000500000020 +:104A300000000800000000080802210800000088AB +:104A400000000000000000000003000000008200E1 +:104A50000000000000210000000000000008000825 +:104A6000000800000000000000030000000000003B +:104A700000000000000000000000000082000000B4 +:104A80000000000000000000000000000000000026 :104A90000000000000000000000000000000000016 :104AA0000000000000000000000000000000000006 -:104AB00000000000000000000000000000000000F6 +:104AB00008000000100000000000000000000000DE :104AC00000000000000000000000000000000000E6 :104AD00000000000000000000000000000000000D6 -:104AE00000000000000021000000000000000000A5 +:104AE00000000000000000000000000000000000C6 :104AF00000000000000000000000000000000000B6 :104B000000000000000000000000000000000000A5 -:104B10000020000000000000000000000000000075 +:104B10000000000000000000000000000000000095 :104B20000000000000000000000000000000000085 :104B30000000000000000000000000000000000075 :104B40000000000000000000000000000000000065 -:104B500000000000000000000000000000C0009005 -:104B60000000000000C000900000000000C00090A5 -:104B70000000000000C000900000000000C0009095 -:104B80000000000000C0009000000000000300C012 -:104B900000900000000000C0009000000000000035 +:104B500000000000409000400082101000000000A3 +:104B60000000000000000000000000000000000045 +:104B70000000000000000000000000000000000035 +:104B80000000000000000000000000000000000025 +:104B90000000000000000000000000000000000015 :104BA0000000000000000000000000000000000005 :104BB00000000000000000000000000000000000F5 :104BC00000000000000000000000000000000000E5 -:104BD0000000000000000000000000000000008055 -:104BE00000800000000000800080000000000080C5 -:104BF00000800000000000800080000000000080B5 -:104C00000080000000000080008000000000000024 -:104C10000080008000000000008000800000000094 +:104BD00000000000000080000080000080800000D5 +:104BE00000000000000000000000000000000000C5 +:104BF00000000000000000000000000000000000B5 +:104C000000000000000000000000000000000000A4 +:104C10000000000000000000000000000000000094 :104C20000000000000000000000000000000000084 :104C30000000000000000000000000000000000074 :104C40000000000000000000000000000000000064 -:104C50000000000000000000000000000000000054 -:104C60000000000080008080000000008000808044 -:104C70000000000080008080000000008000808034 -:104C80000000000080008080000000008000808024 -:104C90000000000000008000808000000000800014 -:104CA0008080000000000000000000000000000004 +:104C50000000000000000000000000910010800033 +:104C60000000000000000000000000000000000044 +:104C70000000000000000000000000000000000034 +:104C80000000000000000000000000000000000024 +:104C90000000000000000000000000000000000014 +:104CA0000000000000000000000000000000000004 :104CB00000000000000000000000000000000000F4 :104CC00000000000000000000000000000000000E4 -:104CD00000000000000000000000000000000000D4 -:104CE0000000000000008400C0900000000084006C -:104CF000C090000000008400C0900000000084000C -:104D0000C090000000008400C090000000008400FB -:104D1000C0900000000000008400C090000000006F -:104D20008400C090000000000000000000000000AF +:104CD000000000000000000000002000208288107A +:104CE000108800000000000000000000000000002C +:104CF00000000000000000000000000000000000B4 +:104D000000000000000000000000000000000000A3 +:104D10000000000000000000000000000000000093 +:104D20000000000000000000000000000000000083 :104D30000000000000000000000000000000000073 :104D40000000000000000000000000000000000063 -:104D50000000000000000000000000000000000053 -:104D60000000000000000000209000C000000000D3 -:104D7000009000C000000000009000C00000000093 -:104D8000009000C000000000209000C00000000063 -:104D9000009000C0000000000000209000C0000053 -:104DA0000000009000C000000000000000000000B3 +:104D5000000000000000000000000000400200020F +:104D600008200440000000000000000000000000D7 +:104D70000000000000000000000000000000000033 +:104D80000000000000000000000000000000000023 +:104D90000000000000000000000000000000000013 +:104DA0000000000000000000000000000000000003 :104DB00000000000000000000000000000000000F3 :104DC00000000000000000000000000000000000E3 -:104DD00000000000000000000000000000000000D3 -:104DE00000000000000000000000008000800000C3 -:104DF00000000080008000000000008000800000B3 -:104E000000000080008000000000008000800000A2 -:104E10000000008000800000000000000080008092 -:104E20000000000000800080000000000000000082 +:104DD0000000000000000000000000000000008053 +:104DE000008080008900000000000000000000003A +:104DF00000000000000000000000000000000000B3 +:104E000000000000000000000000000000000000A2 +:104E10000000000000000000000000000000000092 +:104E20000000000000000000000000000000000082 :104E30000000000000000000000000000000000072 :104E40000000000000000000000000000000000062 :104E50000000000000000000000000000000000052 -:104E60000000000000000000804000210000000061 -:104E70008011800500000000801180050000000006 -:104E800080118005000000008011800500000000F6 -:104E900080118005000000000000801180400000AB -:104EA00000008011800500000000000000000000EC +:104E60000000800080000000000000000000000042 +:104E70000000000000000000000000000000000032 +:104E80000000000000000000000000000000000022 +:104E90000000000000000000000000000000000012 +:104EA0000000000000000000000000000000000002 :104EB00000000000000000000000000000000000F2 :104EC00000000000000000000000000000000000E2 :104ED00000000000000000000000000000000000D2 -:104EE0000000000000000000000090000000000032 -:104EF0000000C001200000000000C00120000000F0 -:104F00000000C001200000000000C00120000000DF -:104F10000000C0012000000000000000C0012000CF -:104F200000000000C00120000000000000000000A0 +:104EE00000000400821010200400000000000000F8 +:104EF00000000000000000000000000000000000B2 +:104F000000000000000000000000000000000000A1 +:104F10000000000000000000000000000000000091 +:104F20000000000000000000000000000000000081 :104F30000000000000000000000000000000000071 :104F40000000000000000000000000000000000061 :104F50000000000000000000000000000000000051 -:104F60000000000000000000000000000021000020 -:104F70000600000000060000060000000006000019 -:104F800006000000000600000600000000210000EE -:104F900006000000000600000600000000000021DE -:104FA00000000600000000060000060000000000EF +:104F60000000000000000000000000000000000041 +:104F70000000000000000000000000000000000031 +:104F80000000000000000000000000000000000021 +:104F90000000000000000000000000000000000011 +:104FA0000000000000000000000000000000000001 :104FB00000000000000000000000000000000000F1 :104FC00000000000000000000000000000000000E1 :104FD00000000000000000000000000000000000D1 -:104FE00000000000000000000000000000000000C1 -:104FF000FFFF000000FF000000FF000000FF0000B6 -:1050000000FF000000FF000000FF000000FF0000A4 -:1050100000FF000000FF000000FF000000FF000094 -:10502000000000FF000000FF000000FF000000FF84 +:104FE000000000000000A707A202EB41EB41000017 +:104FF00000000000000000000000000000000000B1 +:1050000000000000000000000000000000000000A0 +:105010000000000000000000000000000000000090 +:105020000000000000000000000000000000000080 :105030000000000000000000000000000000000070 :105040000000000000000000000000000000000060 :105050000000000000000000000000000000000050 -:105060000000000000000000000000000000000040 -:105070000000FFFF000000FF000000FF000000FF35 -:10508000000000FF000000FF000000FF000000FF24 -:10509000000000FF000000FF000000FF000000FF14 -:1050A0000000000000FF000000FF000000FF000003 -:1050B00000FF0000000000000000000000000000F1 +:105060000000000000000000F757F2525F5F0A0ADC +:105070000000000000000000000000000000000030 +:105080000000000000000000000000000000000020 +:105090000000000000000000000000000000000010 +:1050A0000000000000000000000000000000000000 +:1050B00000000000000000000000000000000000F0 :1050C00000000000000000000000000000000000E0 :1050D00000000000000000000000000000000000D0 -:1050E00000000000000000000000000000000000C0 -:1050F0000000FF000000FF000000FF000000FF00B4 -:105100000000FF000000FF000000FF000000FF00A3 -:105110000000FF000000FF000000FF000000FF0093 -:1051200000000000FF000000FF000000FF00000082 -:1051300000FFFFFF00000000000000000000000072 +:1050E00000000000000000000000C028C0EB82D7D4 +:1050F0005050000000000000000000000000000010 +:10510000000000000000000000000000000000009F +:10511000000000000000000000000000000000008F +:10512000000000000000000000000000000000007F +:10513000000000000000000000000000000000006F :10514000000000000000000000000000000000005F :10515000000000000000000000000000000000004F -:10516000000000000000000000000000000000003F -:1051700000000000FF000000FF000000FF00000032 -:10518000FF000000FF000000FF000000FF00000023 -:10519000FF000000FF000000FF000000FF00000013 -:1051A000FF0000000000FF000000FF000000FF0003 -:1051B000000000FFFFFF00000000000000000000F2 +:10516000000000000000000000000000FC28FCEB34 +:1051700082D7FAFA000000000000000000000000E2 +:10518000000000000000000000000000000000001F +:10519000000000000000000000000000000000000F +:1051A00000000000000000000000000000000000FF +:1051B00000000000000000000000000000000000EF :1051C00000000000000000000000000000000000DF :1051D00000000000000000000000000000000000CF :1051E00000000000000000000000000000000000BF -:1051F000000000000000030203380C0092C003828C -:1052000003380C0092C0038203380C0092C0038262 -:1052100003380C0092C0038203380C0092C0038252 -:1052200003380C0092C00000038203380C0092C0C7 -:10523000038203380C0082C0000000000000000060 +:1051F000000000C0000000000000000000000000EF +:10520000000000000000000000000000000000009E +:10521000000000000000000000000000000000008E +:10522000000000000000000000000000000000007E +:10523000000000000000000000000000000000006E :10524000000000000000000000000000000000005E :10525000000000000000000000000000000000004E :10526000000000000000000000000000000000003E @@ -185715,190 +185715,190 @@ :10544000000000000000000000000000000000005C :10545000000000000000000000000000000000004C :10546000000000000000000000000000000000003C -:10547000000000000000000000020000000000002A +:1054700000000000000000000000000000000040EC :10548000000000000000000000000000000000001C :10549000000000000000000000000000000000000C :1054A00000000000000000000000000000000000FC -:1054B00000000000000000000000000000000000EC -:1054C00000000000000000000000000000000000DC +:1054B00000010000000000000000000000000000EB +:1054C00000110000000000000000000000000000CB :1054D00000000000000000000000000000000000CC -:1054E00000000000000000000000000000000000BC -:1054F00000000000000000000000000000000000AC -:10550000000000000000000000000000000000009B +:1054E0008800000000020000000000000000000032 +:1054F000000000000000000000000000000021008B +:10550000000100000000000000000000000000009A :10551000000000000000000000000000000000008B :10552000000000000000000000000000000000007B :10553000000000000000000000000000000000006B :10554000000000000000000000000000000000005B :10555000000000000000000000000000000000004B :10556000000000000000000000000000000000003B -:105570000000000000000000000000000200020027 -:10558000020002000000020000000200020002000F -:1055900002000200000000000000040004000400FB -:1055A00004000000000000000000000000000000F7 -:1055B00001000000000000000000000004000400E2 -:1055C00000000100000000000000000000000000DA +:1055700000000000000000000000000000000080AB +:10558000000000000000000000000000000000001B +:10559000000000000000000000000000000000000B +:1055A00000020000000000000000000000000000F9 +:1055B00000000000000000000000000000000010DB +:1055C00000100010001000000000000000000000AB :1055D00000000000000000000000000000000000CB -:1055E00000000000000000000000000000000000BB -:1055F00000000000000000000000000000080000A3 -:105600000002000000000200000002000000000094 -:10561000000000080000000000000000800880007A -:10562000800080000000000000000000000000007A -:1056300000000408000000000000000000008004DA -:1056400080000000040000000000000000000000D6 -:105650000000000000040000000000000000000046 -:10566000000000000000000000000000000000003A -:10567000000000000000000000000000000000002A -:10568000000000000000000000000000000000001A -:10569000000000000000000000000000000000000A -:1056A00000000000000000000000000000000000FA -:1056B00000000000000000000000000000000000EA -:1056C00000000000000000000000000000000000DA -:1056D00000000000000000000000000000000000CA -:1056E00000000000000000000000000000000000BA -:1056F00000000000000000000000000000000000AA -:105700000000000000004000000000000000000059 -:105710000000000000000200000000000000000087 -:105720000000000000004000000000000000000039 -:105730000000000000004000000000000000000029 -:105740000000000000000000000000000000000059 -:105750000000000000000000000000000000000049 +:1055E00000000000080000000000000000000000B3 +:1055F00000000000000000000000000000000000AB +:105600000040000400000000000000000000000056 +:10561000000000000000000000000000000000008A +:10562000000000000000000000000000000000007A +:105630000008000000000000000000000000000062 +:105640000000000800000000000000000000000052 +:1056500000000084000000000002000000000000C4 +:1056600000000084000000000000000000000000B6 +:105670000000000200000000002000000400000004 +:105680000000000000800200000000000000000098 +:105690000000000004000000040000000000000002 +:1056A0000000400800090400040004004000040059 +:1056B000400000000000000000000000400000006A +:1056C00004000000400040000400040040004000CE +:1056D00084000000000000000400900000000400AE +:1056E0000000000000080000820000000000000030 +:1056F0000000000000080000000008002100030076 +:1057000021000000000000400000000000840000B4 +:1057100000000000000800A00000000000000000E1 +:10572000000000000000008811000082000000005E +:105730000000000000000000090000000008000058 +:105740000000000000000000000000000020000039 +:105750000000000000000000040000000000000045 :105760000000000000000000000000000000000039 -:105770000000000000000000000000000000000029 -:1057800000000000000000000000000000200020D9 -:105790000020002000200020842000200020002085 -:1057A0008400000000000000820000200020002093 -:1057B0008220002000200100820000200000002044 -:1057C0000000002000110000002000000020000068 -:1057D00000000000000000000000000000000000C9 +:105770000000000000900000000000000000000099 +:105780000000000000000000000001000000000018 +:105790000000000000000000000000000000000009 +:1057A00000000000000000000000000000000000F9 +:1057B00000000000000000000000000000000000E9 +:1057C00000000000000000000000000000000000D9 +:1057D00000000000000000000000000004000000C5 :1057E00000000000000000000000000000000000B9 :1057F00000000000000000000000000000000000A9 -:105800000000000000000000000000000000000197 -:105810000001000100010001000100010001000180 -:105820000001000000000000000000000001000175 -:10583000000100010001000104000000000100005F -:105840000001000000010000000000010000000154 +:105800000000000000000000000000000400000094 +:105810000000000000000000000000000000000088 +:105820000000000000000000000000000000000078 +:105830000000000000000000000000000000000068 +:105840000000000000000000000000000000000058 :105850000000000000000000000000000000000048 :105860000000000000000000000000000000000038 :105870000000000000000000000000000000000028 -:1058800000000000000000000000000040000000D8 -:105890000000000000000000000000000200000006 -:1058A00000000000000000000000000040000000B8 -:1058B00000000000000000000000000040000000A8 +:1058800000000400000000000040000000000000D4 +:105890000000000000000000000000000000000008 +:1058A00000000000000000000000000000000000F8 +:1058B00000000000000000000000000000000020C8 :1058C00000000000000000000000000000000000D8 :1058D00000000000000000000000000000000000C8 :1058E00000000000000000000000000000000000B8 :1058F00000000000000000000000000000000000A8 -:105900000000000000000000000000000000000097 -:105910000000000000000000000000000000000087 -:105920000000000000000000000000000000000077 +:105900000000000000040000000041010004000449 +:105910000802000000000000000000000004400039 +:105920000500000000000000000000000000000072 :105930000000000000000000000000000000000067 -:105940000000000000000000000000000000000057 -:105950000000000000000000000000000000000047 -:105960000000000000000000000000000000000037 -:105970000000000000000000000000000000000027 -:105980000000000000000000000000000000000017 -:105990000000000000000000000000000000000007 -:1059A0000000000001000000008000000000000076 +:10594000090000000000000000000000112000001D +:10595000000000000000000000000088008800082F +:10596000008800000020000000000000000000008F +:105970000400000000900000000000000000000093 +:105980000000000000000003000000000000000014 +:1059900000000000000000000000000000000021E6 +:1059A00000000000000000000000000000000000F7 :1059B00000000000000000000000000000000000E7 -:1059C0000000000000000100008000000000010055 +:1059C00000000000000000000000000000000000D7 :1059D00000000000000000000000000000000000C7 :1059E00000000000000000000000000000000000B7 :1059F00000000000000000000000000000000000A7 :105A00000000000000000000000000000000000096 :105A10000000000000000000000000000000000086 -:105A20000000000000000400000000200000000052 +:105A20000000000000000000000000000000000076 :105A30000000000000000000000000000000000066 -:105A40000000000000000000040000200000000032 -:105A50000400000000000000000000000000000042 +:105A40000000000000000000000000000000000056 +:105A50000000000000000000000000000000000046 :105A60000000000000000000000000000000000036 :105A70000000000000000000000000000000000026 :105A80000000000000000000000000000000000016 -:105A9000000000000000000000C0009000000000B6 -:105AA00000C000900000000000C000900000000056 -:105AB00000C000900000000000C000900000000046 -:105AC00000C0009000000000000300C00090000033 -:105AD000000000C000900000000000000000000076 +:105A90000000009000000000000000000000000076 +:105AA00000000000000000000000000000000000F6 +:105AB00000000000000000000000000000000000E6 +:105AC00000000000000000000000000000000000D6 +:105AD00000000000000000000000000000000000C6 :105AE00000000000000000000000000000000000B6 :105AF00000000000000000000000000000000000A6 :105B00000000000000000000000000000000000095 -:105B10000000000000000000000000800080000085 -:105B20000000008000800000000000800080000075 -:105B30000000008000800000000000800080000065 -:105B40000000008000800000000000000080008055 -:105B50000000000000800080000000000000000045 +:105B10000000000000800000000000000000000005 +:105B20000000000000000000000000000000000075 +:105B30000000000000000000000000000000000065 +:105B40000000000000000000000000000000000055 +:105B50000000000000000000000000000000000045 :105B60000000000000000000000000000000000035 :105B70000000000000000000000000000000000025 :105B80000000000000000000000000000000000015 -:105B90000000000000000000000000000000800085 -:105BA00000008080000080000000808000008000F5 -:105BB00000008080000080000008808000008000DD -:105BC000000080800000800000088080000000004D -:105BD00080000000808000008000000080800000C5 +:105B90000000000000000000000000000000000005 +:105BA00000000000000000000000000000000000F5 +:105BB00000000000000000000000000000000000E5 +:105BC00000000000000000000000000000000000D5 +:105BD00000000000000000000000000000000000C5 :105BE00000000000000000000000000000000000B5 :105BF00000000000000000000000000000000000A5 :105C00000000000000000000000000000000000094 -:105C10000000000000000000000000000000000084 -:105C200082000000C090000082000000C0900000D0 -:105C300082000000C090000082000000C0900000C0 -:105C400082000000C090000082000000C0900000B0 -:105C5000000082000000C090000082000000C090A0 +:105C100000000000000000000008000000900000EC +:105C20000000000000000000000000000000000074 +:105C30000000000000000000000000000000000064 +:105C40000000000000000000000000000000000054 +:105C50000000000000000000000000000000000044 :105C60000000000000000000000000000000000034 :105C70000000000000000000000000000000000024 :105C80000000000000000000000000000000000014 -:105C90000000000000000000000000000000000004 -:105CA00000000000009000C000000000009000C054 -:105CB00000000000009000C000000000009000C044 -:105CC00000000000009000C000000000009000C034 -:105CD000000000000000009000C0000000000090E4 -:105CE00000C00000000000000000000000000000F4 +:105C900000000000000000000100000090900000E3 +:105CA00000000000000000000000000000000000F4 +:105CB00000000000000000000000000000000000E4 +:105CC00000000000000000000000000000000000D4 +:105CD00000000000000000000000000000000000C4 +:105CE00000000000000000000000000000000000B4 :105CF00000000000000000000000000000000000A4 :105D00000000000000000000000000000000000093 -:105D10000000000000000000000000000000000083 -:105D200000000000000000800080000000000080F3 -:105D30000080000000000080008000000000008063 -:105D40000080000000000080008000000000008053 -:105D500000800000000000000080008000000000C3 -:105D60000080008000000000000000000000000033 +:105D100000000000000000000000080000000080FB +:105D20000000000000000000000000000000000073 +:105D30000000000000000000000000000000000063 +:105D40000000000000000000000000000000000053 +:105D50000000000000000000000000000000000043 +:105D60000000000000000000000000000000000033 :105D70000000000000000000000000000000000023 :105D80000000000000000000000000000000000013 -:105D90000000000000000000000000000000000003 -:105DA0000000000080100021000000008011802011 -:105DB00000000000800000200000000080118040F2 -:105DC0000000000080118040000000008011804031 -:105DD0000000000000008000004000000000800083 -:105DE0000040000000000000000000000000000073 +:105D90000000000000000000000000000011800072 +:105DA00000000000000000000000000000000000F3 +:105DB00000000000000000000000000000000000E3 +:105DC00000000000000000000000000000000000D3 +:105DD00000000000000000000000000000000000C3 +:105DE00000000000000000000000000000000000B3 :105DF00000000000000000000000000000000000A3 :105E00000000000000000000000000000000000092 -:105E10000000000000000000000000000000000082 -:105E20000000000000009001000000000000C00120 -:105E3000200000000000C000000000009000C00131 -:105E4000200000000000C001200000000000C00190 -:105E50002000000000000000C000000000009000D2 -:105E6000C0000000000090000000000000000000E2 +:105E10000000000000000000000000000000000181 +:105E200020000088000000000000000000000000CA +:105E30000000000000000000000000000000000062 +:105E40000000000000000000000000000000000052 +:105E50000000000000000000000000000000000042 +:105E60000000000000000000000000000000000032 :105E70000000000000000000000000000000000022 :105E80000000000000000000000000000000000012 :105E90000000000000000000000000000000000002 -:105EA00000000000000000000006000006000000E6 -:105EB000000A0000060000000006000006000000C6 -:105EC00000110000060000000006000006000000AF -:105ED000001100000600000000000006000006009F -:105EE000000000820000060000000000000000002A +:105EA00000000000070000000000000000000000EB +:105EB00000000000000000000000000000000000E2 +:105EC00000000000000000000000000000000000D2 +:105ED00000000000000000000000000000000000C2 +:105EE00000000000000000000000000000000000B2 :105EF00000000000000000000000000000000000A2 :105F00000000000000000000000000000000000091 :105F10000000000000000000000000000000000081 -:105F200000000000000000000000FFFF0000FF0074 -:105F30000000FF000000FF0000003C3C0000FF00EC -:105F40000000FF000000FF000000FF000000FF0055 -:105F50000000FF000000FF00000000003C3C0000CB -:105F6000FF0000003C3C0000FF00000000000000BB +:105F200000000000FF000000FF0000000000000073 +:105F30000000000000000000000000000000000061 +:105F40000000000000000000000000000000000051 +:105F50000000000000000000000000000000000041 +:105F60000000000000000000000000000000000031 :105F70000000000000000000000000000000000021 :105F80000000000000000000000000000000000011 :105F90000000000000000000000000000000000001 -:105FA000000000000000000000000000FFFF0000F3 -:105FB000FF000000FF000000FF0000003C3C00006C -:105FC000FF000000FF000000FF000000FF000000D5 -:105FD000FF000000FF000000FF00000000003C3C4C -:105FE0000000FF0000003C3C0000FF00000000003B +:105FA000000000000000FF000000FF0000000000F3 +:105FB00000000000000000000000000000000000E1 +:105FC00000000000000000000000000000000000D1 +:105FD00000000000000000000000000000000000C1 +:105FE00000000000000000000000000000000000B1 :105FF00000000000000000000000000000000000A1 :106000000000000000000000000000000000000090 :106010000000000000000000000000000000000080 @@ -185910,28 +185910,28 @@ :106070000000000000000000000000000000000020 :106080000000000000000000000000000000000010 :106090000000000000000000000000000000000000 -:1060A00000000000000000000000000000000000F0 -:1060B000000000FF00000F0F000000FF00000F0FA6 -:1060C000000000FF00000F0F000000FF00000F0F96 -:1060D000000000FF00000F0F000000FF00000F0F86 -:1060E0000000000000FF00000F0F000000FFFFFF96 -:1060F000F0F00000000000000000000000000000C0 +:1060A000000000000000000000FF0000FFFF0000F3 +:1060B00000000000000000000000000000000000E0 +:1060C00000000000000000000000000000000000D0 +:1060D00000000000000000000000000000000000C0 +:1060E00000000000000000000000000000000000B0 +:1060F00000000000000000000000000000000000A0 :10610000000000000000000000000000000000008F :10611000000000000000000000000000000000007F -:10612000000000000000000000000000000000006F -:106130000000000000FF00000F0F000000FF000043 -:106140000F0F000000FF00000F0F000000FF000015 -:106150000F0F000000FF00000F0F000000FF000005 -:106160000F0F0000000000FF00000F0F000000FFF5 -:10617000FFFFF0F000000000000000000000000041 +:106120000000000000000000000000FF0000000070 +:10613000000000000000000000000000000000005F +:10614000000000000000000000000000000000004F +:10615000000000000000000000000000000000003F +:10616000000000000000000000000000000000002F +:10617000000000000000000000000000000000001F :10618000000000000000000000000000000000000F :1061900000000000000000000000000000000000FF -:1061A00000000000000000000000000000000000EF -:1061B00000000000030203380C0092C00382033881 -:1061C0000C0092C0038203380C0092C00382033893 -:1061D0000C0092C0038203380C0092C00382033883 -:1061E0000C0092C00000038203380C0092C00382AE -:1061F00003380C0082C00000000000000000000016 +:1061A00000000000000000000000000015002A00B0 +:1061B000054000A8000000000000000000000000F2 +:1061C00000000000000000000000000000000000CF +:1061D00000000000000000000000000000000000BF +:1061E00000000000000000000000000000000000AF +:1061F000000000000000000000000000000000009F :10620000000000000000000000000000000000008E :10621000000000000000000000000000000000007E :10622000000000000000000000000000000000006E @@ -185967,101 +185967,101 @@ :10640000000000000000000000000000000000008C :10641000000000000000000000000000000000007C :10642000000000000000000000000000000000006C -:1064300010001000400200000000000000000000FA -:1064400088000000000000000000000000000000C4 -:1064500020002000200000000000000000040000D8 -:10646000000000000000000000000000000000002C -:1064700000002000200020000000000000000000BC -:106480000004000000000000000000000000000008 -:10649000000020002000200000000000000000009C +:10643000000000000000000000000000000000005C +:10644000000000000000000000000000000000004C +:10645000000000000000000000000000000000003C +:10646000000000000000000000000000000200002A +:10647000000000000000000200000000000000001A +:106480000000000400000000000000040000000004 +:1064900000000000000400000000000000000000F8 :1064A00000000000000000000000000000000000EC :1064B00000000000000000000000000000000000DC :1064C00000000000000000000000000000000000CC -:1064D00000000000100000000000000000000000AC -:1064E000000020000000000000000000000000008C +:1064D000000000000000000000001000100010008C +:1064E000100000000000000000000000000000009C :1064F000000000000000000000000000000000009C -:10650000000000000000000000000000000000008B +:106500000000000000000000000000040800080077 :10651000000000000000000000000000000000007B :10652000000000000000000000000000000000006B -:106530000000000000000000000000000200020057 -:106540000200000000000000000000000000000049 +:10653000000000000000000000000000000000005B +:10654000000000000000000000000000000000004B :10655000000000000000000000000000000000003B :10656000000000000000000000000000000000002B :10657000000000000000000000000000000000001B -:1065800000000000000000000000001100000000FA +:10658000000000000000000000000000000000000B :1065900000000000000000000000000000000000FB :1065A00000000000000000000000000000000000EB -:1065B00000000000000000000000000002000000D9 +:1065B00000000000000000000000000000000000DB :1065C00000000000000000000000000000000000CB :1065D00000000000000000000000000000000000BB -:1065E00000000000000000000000000000000000AB +:1065E00000000000000000000000000800000000A3 :1065F000000000000000000000000000000000009B -:10660000000000000000000000000000000000008A +:106600000000000000000000000000000004000086 :10661000000000000000000000000000000000007A :10662000000000000000000000000000000000006A :10663000000000000000000000000000000000005A :10664000000000000000000000000000000000004A :10665000000000000000000000000000000000003A -:10666000000000000000000000000000000000002A +:10666000000090000000000000000000000000009A :10667000000000000000000000000000000000001A -:10668000000000000000000000000000000000000A -:1066900000000000000000000000000000000000FA +:1066800000000000040000000000000004000400FE +:1066900088009000000000000000000000000000E2 :1066A00000000000000000000000000000000000EA :1066B00000000000000000000000000000000000DA -:1066C0000000000000000000000000004100000089 -:1066D0000000000021000000000000000000000099 +:1066C00000000000000000000000000000000408BE +:1066D00000000000000000000000000000000000BA :1066E00000000000000000000000000000000000AA :1066F000000000000000000000000000000000009A -:106700000000000000000000000000000000000089 +:106700000000000000000000040000000000000085 :106710000000000000000000000000000000000079 :106720000000000000000000000000000000000069 -:106730000000000000000000000008000800000049 +:106730000000000000000000000000000000000059 :106740000000000000000000000000000000000049 -:106750000004000000040000000000000004000429 -:106760000011000000000000000400000000000410 -:106770000004000000000000000400000000000011 -:1067800000110000000000000020000000000000D8 +:106750000000000000000000000000000000000039 +:106760000000000000000000000000000000000029 +:106770000000000000000000000000000000000019 +:106780000000000000000000000000000000000009 :1067900000000000000000000000000000000000F9 :1067A00000000000000000000000000000000000E9 :1067B00000000000000000000000000000000000D9 :1067C00000000000000000000000000000000000C9 :1067D00000000000000000000000000000000000B9 -:1067E0000000000000200000000000000000000089 +:1067E00000000000000000000000000000000000A9 :1067F0000000000000000000000000000000000099 -:106800000000000000000000002000002000000048 +:106800000000000000000000000000000000000088 :106810000000000000000000000000000000000078 :106820000000000000000000000000000000000068 -:106830000000000000000000000000000000080050 -:10684000000000000000000000000000C000000088 -:106850000000000000000000000000000000000038 +:106830000000000000000000000000000000000058 +:106840000000000000000000000000000000000048 +:106850000000000000000020000000000000000018 :106860000000000000000000000000000000000028 :106870000000000000000000000000000000000018 :106880000000000000000000000000000000000008 :1068900000000000000000000000000000000000F8 :1068A00000000000000000000000000000000000E8 :1068B00000000000000000000000000000000000D8 -:1068C00000000000000000000000000000000000C8 -:1068D00003000000000000000000000000000000B5 -:1068E0000000000000000000000000000000210087 -:1068F0000000000000000000000000000000000098 -:1069000000000000000000000000000000000090F7 -:106910002100000000000000210000000000000035 -:106920000000000000000000000000000000000067 -:106930000000000000000000000000000000000057 +:1068C0000000000000000000000020840900008497 +:1068D00000000000000000000000000000000000B8 +:1068E00000000000000000000000000000000004A4 +:1068F0000000000000000000000000000400000094 +:106900000000000400000000000000000000000083 +:106910000000002000000000000000200002000035 +:106920000004000000000000000000000000000063 +:106930000000040000000000000010000000000043 :106940000000000000000000000000000000000047 -:10695000000000000000C000000000000000000077 -:106960000000000000000000900000000000000097 +:106950000000000000030000000200000000000032 +:106960000000000000000000000000000000000027 :106970000000000000000000000000000000000017 -:106980000000000000000000000090000000000077 -:106990000000900000000000000000000000000067 +:106980000000000000000000000000000000000007 +:1069900000000000000000000000000000000000F7 :1069A00000000000000000000000000000000000E7 :1069B00000000000000000000000000000000000D7 :1069C00000000000000000000000000000000000C7 -:1069D000000000000004000420000000000000008F -:1069E0000004200020000000000000000000000063 -:1069F0000000000000000004000000002000000073 -:106A00000000000000002000400400000000000022 -:106A10000004000000000000000000000000000072 +:1069D00000000000000000000000000000000000B7 +:1069E00000000000000000000000000000000000A7 +:1069F0000000000000000000000000000000000097 +:106A00000000000000000000000000000000000086 +:106A10000000000000000000000000000000000076 :106A20000000000000000000000000000000000066 :106A30000000000000000000000000000000000056 :106A40000000000000000000000000000000000046 @@ -186162,165 +186162,165 @@ :107030000000000000000000000000000000000050 :107040000000000000000000000000000000000040 :107050000000000000000000000000000000000030 -:1070600004000000000000000000C000000000005C -:107070000000000000000000000000000000000010 -:1070800000000000000000000020000000000000E0 +:107060000000000000000000000000000000000020 +:107070000000000000000000000000100000000000 +:107080000000000000000000000000000000000000 :1070900000000000000000000000000000000000F0 :1070A00000000000000000000000000000000000E0 -:1070B00000000000000000040000000000000000CC -:1070C00000000000000000000000000000040000BC -:1070D0000000000040000000000000000000000070 -:1070E00000000000000000000000000000000000A0 +:1070B00000000000000000000000000000000000D0 +:1070C00000000000000000000000000000000000C0 +:1070D00000000000000000000000000000000000B0 +:1070E000000000000000000000000000000400009C :1070F0000000000000000000000000000000000090 -:10710000000000000000000000000000000000007F -:10711000000000000000000000000000000000006F +:10710000000000000004004000000000000000003B +:10711000000000000000000000000000000400C0AB :10712000000000000000000000000000000000005F -:10713000000000000000000000000000000000004F -:10714000000000000000000000000000000000003F +:10713000000000000000000000000000000000400F +:10714000000000020000000000000000000000003D :10715000000000000000000000000000000000002F :10716000000000000000000000000000000000001F -:10717000000040000000000000004000000000008F -:1071800000004000000000000200000000000000BD -:1071900001004000000500000000000000000000A9 -:1071A000010000000000000000004100000000009D -:1071B000000040000000000000000100000010007E -:1071C00000000000000000000000000000000000BF +:10717000000000000000000000000000000000000F +:1071800000000000000000000000000000000000FF +:1071900000000000000000000000080008000010CF +:1071A00000100000000000000000000000000000CF +:1071B00000000000000000000000000002000200CB +:1071C000004000400000000000000000000000003F :1071D00000000000000000000000000000000000AF -:1071E000000000000000000000000000000000009F -:1071F0000008000080000000000041008000000046 -:10720000000000008000000000008000000000007E -:1072100000080200800000000000000000000000E4 -:107220000000400000000000000000008800000096 -:10723000000000048000000000000000400000008A -:107240000008000000000000000000000000000036 -:107250000000000000000000000000000000000826 -:107260000008000000000000000000000000000016 -:10727000000084000000000000000000000000008A -:1072800000000000000000000021000000000000DD -:1072900000030800000000210021000000000000A1 -:1072A0000005820000000000002100210000000015 -:1072B0000021000000000003000500210000000084 -:1072C00000080000000000000000000800000000AE +:1071E000000000400000000000000000000000005F +:1071F000000000000000000000000000000000008F +:10720000000000000000000000000000000000007E +:10721000000000000000000000000000000000006E +:10722000000000000000000000000000000000005E +:10723000000000000000000000000000000000004E +:10724000000000000000000000000000000000003E +:10725000000000000000000000000000000000002E +:10726000000000000000000000000400000000001A +:1072700004000400080000000000000000000000FE +:1072800000000400000000000000000000000000FA +:1072900004000000000000000000040000000400E2 +:1072A00000000000000000000000040000000000DA +:1072B00000000400040000000400040004000000BA +:1072C00000000000000000000000000000000000BE :1072D00000000000000000000000000000000000AE :1072E000000000000000000000000000000000009E -:1072F000000000000000000000000000000000008E +:1072F000000000000000000000040000000000008A :10730000000000000000000000000000000000007D :10731000000000000000000000000000000000006D :10732000000000000000000000000000000000005D :10733000000000000000000000000000000000004D -:10734000000000000000000000000000000000003D +:10734000000000000000000000000000002000001D :10735000000000000000000000000000000000002D :10736000000000000000000000000000000000001D :10737000000000000000000000000000000000000D -:1073800000000000000000000000000000050000F8 -:1073900000000000000008000000002100050000BF -:1073A000000000000000820000000000000000005B +:1073800000000000000000000000000000000000FD +:1073900000000000000000000000000000000000ED +:1073A00000000000000000000000000000000000DD :1073B00000000000000000000000000000000000CD :1073C00000000000000000000000000000000000BD :1073D00000000000000000000000000000000000AD :1073E000000000000000000000000000000000009D :1073F000000000000000000000000000000000008D -:1074000000000000000000A00000000000000000DC -:107410000000000000000082000000000004008462 +:10740000000000000000000000000000000000007C +:10741000000000000000000000000000000000006C :10742000000000000000000000000000000000005C -:1074300000A00000000000A000000000000000000C -:1074400000A000000000000000000000000000009C -:107450000008000000000000000000000000000024 +:10743000000000000000000000000000000000004C +:10744000000000000000000000000000000000003C +:10745000000000000000000000000000000000002C :10746000000000000000000000000000000000001C :10747000000000000000000000000000000000000C -:1074800000000000000000000021080000000000D3 -:10749000080000000000000200030000000084213A -:1074A00000000000000900000000000000000000D3 +:1074800000000000000000000000000000000000FC +:1074900000000000000000000000000000000000EC +:1074A00000000000000000000000000000000000DC :1074B00000000000000000000000000000000000CC -:1074C0000000002100020000000000000000000099 +:1074C00000000000000000000000000000000000BC :1074D00000000000000000000000000000000000AC :1074E000000000000000000000000000000000009C -:1074F000000000000000000000000000000000008C +:1074F0000000000000000000000009000000000083 :10750000000000000000000000000000000000007B -:10751000000000000000000000000000000000006B +:107510000000000000000000000000000004000067 :10752000000000000000000000000000000000005B -:107530000000000000000000000000000000030048 -:10754000000000000000000000000000000000003B -:10755000000000000000000000000000000000002B +:10753000000000000000000000000000000000004B +:10754000000000000000000000000000002000001B +:107550000900000000000000000000000000000022 :10756000000000000000000000000000000000001B :10757000000000000000000000000000000000000B -:1075800000000000000000000000200008000000D3 -:1075900000000000C02104000000000000050800F9 -:1075A000000000000005000000000000000884004A -:1075B0000000000000008421000000000000000026 -:1075C0000000200000000000000000000008000093 +:1075800000000000000000000000000000000000FB +:1075900000000000000000000000000000000000EB +:1075A00000000000000000000000000000000000DB +:1075B00000000000000000000000000000000000CB +:1075C00000000000000000000000000000000000BB :1075D00000000000000000000000000000000000AB :1075E000000000000000000000000000000000009B :1075F000000000000000000000000000000000008B -:10760000000000000004209009002000000020007D -:10761000110020000404000400001100000000001C -:10762000080000040000000021040004000000081D -:1076300003002000000011A000C00090000000A086 -:107640000000002000000000000000000000000812 -:10765000000000200000000000000000000000000A +:10760000000000000000000000000000000000007A +:10761000000000000000000000000000000000006A +:10762000000000000000000000000000000000005A +:10763000000000000000000000000000000000004A +:10764000000000000000000000000000000000003A +:10765000000000000000000000000000000000002A :10766000000000000000000000000000000000001A :10767000000000000000000000000000000000000A :1076800000000000000000000000000000000000FA -:10769000000000000001000200020000008800005D -:1076A00000020010001000000000000100000100B6 -:1076B0000000400000000000000001008800000001 -:1076C00000000100C00000000000010020000000D8 +:1076900000000000000000000000000000000000EA +:1076A00000000000000000000000000000000000DA +:1076B00000000000000000000000000000000000CA +:1076C00000000000000000000000000000000000BA :1076D00000000000000000000000000000000000AA :1076E000000000000000000000000000000000009A :1076F000000000000000000000000000000000008A -:107700000000000000000000001000020020001136 -:107710000010000900200040200500020041001177 -:107720000000000000800000000200020040001085 -:1077300004001000800000000000000010000000A5 -:107740000000000004000000000000000300000032 +:107700000000000000000000000000000000000079 +:107710000000000000000000000000000000000069 +:107720000000000000000000000000000000000059 +:107730000000000000000000000000000000000049 +:107740000000000000000000000000000000000039 :107750000000000000000000000000000000000029 :107760000000000000000000000000000000000019 :107770000000000000000000000000000000000009 :1077800000000000000000000000000000000000F9 -:107790000000000000000000000000000085000064 -:1077A00000000000008500800000000000000000D4 +:1077900000000000000000000000000000000000E9 +:1077A00000000000000000000000000000000000D9 :1077B00000000000000000000000000000000000C9 -:1077C0008000000000000000000000000000000039 +:1077C00000000000000000000000000000000000B9 :1077D00000000000000000000000000000000000A9 :1077E0000000000000000000000000000000000099 :1077F0000000000000000000000000000000000089 :107800000000000000000000000000000000000078 -:107810000000000000000000000000000000000860 -:10782000000200000000000800100000000000003E -:107830000000000000000000000000000000020046 -:1078400002000400840000000000000000000000AE -:1078500000000000008200000000000000000000A6 +:107810000000000000000000000000000000000068 +:107820000000000000000000000000000000000058 +:107830000000000000000000000000000000000048 +:107840000000000000000000000000000000000038 +:107850000000000000000000000000000000000028 :107860000000000000000000000000000000000018 :107870000000000000000000000000000000000008 :1078800000000000000000000000000000000000F8 -:1078900001000100000000000000010000000000E5 -:1078A0000000000002004000000004000000000092 -:1078B00001000100000000000000000000010000C5 -:1078C00000000000000000010000000000000000B7 -:1078D00000000000000100000000000000000000A7 +:1078900000000000000000000000000000000000E8 +:1078A00000000000000000000000000000000000D8 +:1078B00000000000000000000000000000000000C8 +:1078C00000000000000000000000000000000000B8 +:1078D00000000000000000000000000000000000A8 :1078E0000000000000000000000000000000000098 :1078F0000000000000000000000000000000000088 :107900000000000000000000000000000000000077 -:10791000000020000400000000000200040000003D -:107920000000110041008000800000008000000085 -:107930000000040010000000000200090003002005 -:1079400000000002000200410020000200050011BA -:1079500000100009000200080005000000000000FF +:107910000000000000000000000000000000000067 +:107920000000000000000000000000000000000057 +:107930000000000000000000000000000000000047 +:107940000000000000000000000000000000000037 +:107950000000000000000000000000000000000027 :107960000000000000000000000000000000000017 :107970000000000000000000000000000000000007 :1079800000000000000000000000000000000000F7 :1079900000000000000000000000000000000000E7 -:1079A0000000000400000000000080000000000053 +:1079A00000000000000000000000000000000000D7 :1079B00000000000000000000000000000000000C7 -:1079C00000000000000400000000000000000000B3 +:1079C00000000000000000000000000000000000B7 :1079D00000000000000000000000000000000000A7 :1079E0000000000000000000000000000000000097 :1079F0000000000000000000000000000000000087 :107A00000000000000000000000000000000000076 :107A10000000000000000000000000000000000066 -:107A200000000000020090000800080010000200A2 -:107A3000200088000000000000000000000000009E -:107A400000000000000000010002008400000000AF +:107A20000000000000000000000000000000000056 +:107A30000000000000000000000000000000000046 +:107A40000000000000000000000000000000000036 :107A50000000000000000000000000000000000026 :107A60000000000000000000000000000000000016 :107A70000000000000000000000000000000000006 @@ -186334,263 +186334,263 @@ :107AF0000000000000000000000000000000000086 :107B00000000000000000000000000000000000075 :107B10000000000000000000000000000000000065 -:107B200000000000000000000A0AEB410000000015 -:107B3000AA8700870000000000000000000000008D +:107B20000000000000000000000000000000000055 +:107B30000000000000000000000000000000000045 :107B40000000000000000000000000000000000035 :107B50000000000000000000000000000000000025 :107B60000000000000000000000000000000000015 :107B70000000000000000000000000000000000005 :107B800000000000000000000000000000000000F5 :107B900000000000000000000000000000000000E5 -:107BA000000000000000000000005F5FEB410000EB -:107BB0000000FF8755870000000000000000000063 +:107BA00000000000000000000000000000000000D5 +:107BB00000000000000000000000000000000000C5 :107BC00000000000000000000000000000000000B5 :107BD00000000000000000000000000000000000A5 :107BE0000000000000000000000000000000000095 :107BF0000000000000000000000000000000000085 :107C00000000000000000000000000000000000074 :107C10000000000000000000000000000000000064 -:107C2000000000000000000000000000FFFFAAC3E9 -:107C3000000000000FCF0FCF000000000000000088 +:107C20000000000000000000000000000000000054 +:107C30000000000000000000000000000000000044 :107C40000000000000000000000000000000000034 -:107C50000000FEF4AEA400000000000000000000E0 +:107C50000000000000000000000000000000000024 :107C60000000000000000000000000000000000014 :107C70000000000000000000000000000000000004 :107C800000000000000000000000000000000000F4 :107C900000000000000000000000000000000000E4 -:107CA0000000000000000000000000000000FFFFD6 -:107CB000AAC300000000FFCFFFCF000000000000BB +:107CA00000000000000000000000000000000000D4 +:107CB00000000000000000000000000000000000C4 :107CC00000000000000000000000000000000000B4 -:107CD000000000005E540E040000000000000000E0 +:107CD00000000000000000000000000000000000A4 :107CE0000000000000000000000000000000000094 :107CF0000000000000000000000000000000000084 :107D00000000000000000000000000000000000073 :107D10000000000000000000000000000000000063 -:107D200000610006000D000000610006000D00006B -:107D300000613006000D000000003000000000006F -:107D400000610006000D000000610006000D00004B -:107D5000000000610006000D000000610006000D3B -:107D6000000000610006000D00000000000000009F +:107D20000000000000000000000000000000000053 +:107D30000000000000000000000000000000000043 +:107D40000000000000000000000000000000000033 +:107D50000000000000000000000000000000000023 +:107D60000000000000000000000000000000000013 :107D70000000000000000000000000000000000003 :107D800000000000000000000000000000000000F3 :107D900000000000000000000000000000000000E3 :107DA00000000000000000000000000000000000D3 :107DB00000000000000000000000000000000000C3 -:107DC0000000000000000000000000000000323E43 -:107DD000F2FE0000000000002C2FECEF000000007D -:107DE000F382F3BE00000000C8F8CBFB00000000E7 +:107DC00000000000000000000000000000000000B3 +:107DD00000000000000000000000000000000000A3 +:107DE0000000000000000000000000000000000093 :107DF0000000000000000000000000000000000083 :107E00000000000000000000000000000000000072 :107E10000000000000000000000000000000000062 :107E20000000000000000000000000000000000052 :107E30000000000000000000000000000000000042 :107E40000000000000000000000000000000000032 -:107E5000020EC2CE0000000000002023E0E300007C -:107E60000000308230BE0000000008380B3B0000EC +:107E50000000000000000000000000000000000022 +:107E60000000000000000000000000000000000012 :107E70000000000000000000000000000000000002 :107E800000000000000000000000000000000000F2 :107E900000000000000000000000000000000000E2 -:107EA0000000000000007DCF41CF000000007DAF4A -:107EB00028AF00000000D7CFD70C00000000000062 -:107EC0000000000000003CFF0F5500000000000013 +:107EA00000000000000000000000000000000000D2 +:107EB00000000000000000000000000000000000C2 +:107EC00000000000000000000000000000000000B2 :107ED00000000000000000000000000000000000A2 :107EE0000000000000000000000000000000000092 :107EF0000000000000000000000000000000000082 :107F00000000000000000000000000000000000071 :107F10000000000000000000000000000000000061 -:107F200000000000000000007D0C410C000000007B -:107F30007D0528050000000014CF140C000000008F -:107F400000000000000000003C000F550000000091 +:107F20000000000000000000000000000000000051 +:107F30000000000000000000000000000000000041 +:107F40000000000000000000000000000000000031 :107F50000000000000000000000000000000000021 :107F60000000000000000000000000000000000011 :107F70000000000000000000000000000000000001 :107F800000000000000000000000000000000000F1 -:107F900000000000000000000000040004000000D9 -:107FA0000400040004000400400004000400040075 -:107FB0000000040004000400040088000000000029 -:107FC00000008800000040004000000000000000A9 -:107FD00000000000000000008804000020004000B5 -:107FE0000000000020000000200020000000000031 -:107FF000000000000000000000002000200220001F -:108000000000000020000000200020000000000010 -:108010000000000000000000000020008000800040 -:108020000000800080008000800000008000800050 -:1080300080000000800080008000800000000000C0 +:107F900000000000000000000000000000000000E1 +:107FA00000000000000000000000000000000000D1 +:107FB00000000000000000000000000000000000C1 +:107FC00000000000000000000000000000000000B1 +:107FD00000000000000000000000000000000000A1 +:107FE0000000000000000000000000000000000091 +:107FF000000000000000000000000000000000027F +:108000000000000400020002000000000000000068 +:10801000000400000000000000000000000000005C +:10802000000000000002000200000000000000004C +:108030000000000000000000000000000000000040 :108040000000000000000000000000000000000030 -:108050000000000000000000000000000000000020 -:108060000000000000000000000000000000000010 -:108070000000000000000000000000000000000000 -:1080800000000000000000000000000000000000F0 -:1080900000020000000000000000000000000000DE -:1080A000000001000000000000000000000040008F -:1080B00000004000410040000005000001004000B9 -:1080C00000000000090240404000020000004000A3 -:1080D000000000000002000000000000012000007D -:1080E0000120040000200300000000000000010047 -:1080F00000000000000001000000900000002120AE -:10810000200000000000000020000000000000002F +:10805000000000040000000000000000000000001C +:10806000000000000000000200000002000000020A +:1080700000000002000000000000000000000000FE +:1080800000000000000040000000000000000000B0 +:1080900000000000000000000000000000000000E0 +:1080A00000000000000000000000000000000000D0 +:1080B00000000000000000000000000000000000C0 +:1080C00000000000000000000000000000000000B0 +:1080D00000000000000000000000000000000000A0 +:1080E0000000000000000000000000000000000090 +:1080F0000000000000400000000000000000000040 +:10810000000000000000000000000000000000006F :10811000000000000000000000000000000000005F -:10812000000800000400000800080000000800002B -:1081300080000000800084008008000000004000F3 -:1081400080080000000082098008C00000080000CC -:108150008000000000000001000800000000400155 -:1081600000004009800000014008000800000004F1 -:108170004000000000000000400000080000000077 -:10818000400100080000000000080084000000001A -:1081900000000000000000000000000800000000D7 +:10812000000000000000000002000000000000004D +:10813000000000000000000000000000000000003F +:10814000000000000000000000000000000000002F +:10815000000000000000000000000000000000001F +:10816000000000000000000000000000000000000F +:1081700000000000000000000000000000000000FF +:1081800000000000000000000000000000000000EF +:1081900000000000000000000000000000000000DF :1081A00000000000000000000000000000000000CF :1081B00000000000000000000000000000000000BF -:1081C000000000000000000000030020004100004B -:1081D000002000800020002000210000004100005D -:1081E000000000000000000000000020002000004F -:1081F00000200020002000000000002004000000FB -:1082000000800000002000000000002000000000AE -:10821000000000000000000000000000004000001E -:10822000000000000000000011000000000000003D -:108230002100030000000000210000A00300000056 -:10824000000000820000000000000500080100009E -:10825000000000010020000108910000000008005B -:1082600000840000000000A00000000000010001E8 -:1082700000004101000100010000000000838000B7 -:1082800000000020000000010000000000010000CC +:1081C00000000000000000000000000000000000AF +:1081D000000004000000000000000000000000009B +:1081E000000000000000040000000000000000008B +:1081F000000000000000000000000000000000007F +:1082000000000000C00000000000000000000000AE +:10821000000000000000000000000000000000005E +:10822000000000000000000000000000000000004E +:10823000000000000000000000000000000000003E +:10824000000000000000000000000000000000002E +:1082500000000000000000000000000040000000DE +:10826000000000000000000000000000000000000E +:1082700000000000000000000000000000000000FE +:1082800000000000000000000000000000000000EE :1082900000000000000000000000000000000000DE -:1082A00000000000000000000800000000000800BE -:1082B000000000000800100008000800000009206D -:1082C0000021C000080000000805A00000400000D8 -:1082D0000040820008000800080082000080008042 -:1082E00000C1820000000000004100008200C000C8 -:1082F00000000000820000000000008082000000FA -:1083000000000091000000000000000000000000DC +:1082A00000000000000000000000000000000000CE +:1082B00000000000000000000000000000000000BE +:1082C00000000000000000000000000000000000AE +:1082D000000000000000000000000000000000009E +:1082E000000000000000000000000000000000008E +:1082F000000000000000000000000000000000007E +:10830000000000000000000000000000000000006D :10831000000000000000000000000000000000005D :10832000000000000000000000000000000000004D -:10833000000000000000000000000000000021001C -:108340000400000000000000000000000000000029 -:10835000000000A00800000000000084008200204F -:1083600000200020080000000000000000000000C5 -:1083700000000000000000000000000000200000DD -:1083800000000000002000000000000000000000CD +:10833000000000000000000000000000000000003D +:10834000000000000000000000000000000000002D +:10835000000000000000000000000000000000001D +:10836000000000000000000000000000000000000D +:1083700000000000000000000000000000000000FD +:1083800000000000000000000000000000000000ED :1083900000000000000000000000000000000000DD -:1083A0000000000000000000000008000000900035 -:1083B000080000000000C000C0000800000000002D -:1083C0000800000000020005C02108000041002153 -:1083D000080000000020002000000005000500004B -:1083E00000030800004100200021000000410000BF -:1083F0000000A0210000002000000000000000009C -:10840000A000000000020041000300000000002066 +:1083A00000000000000000000000000000000000CD +:1083B00000000000000000000000000000000000BD +:1083C00000000000000000000000000000000000AD +:1083D000000000000000000000000000000000009D +:1083E000000000000000000000000000000000008D +:1083F000000000000000000000000000000000007D +:108400000000000000000400000000000000000068 :10841000000000000000000000000000000000005C :10842000000000000000000000000000000000004C -:10843000000000000000000000000000000000003C -:1084400000000000000000000000000000402000CC -:10845000000000000088000100010000000403008B -:108460000000000000000000000100000000030008 -:1084700000000000001000000001000000000000EB -:108480000000000000A0000000000000000000004C -:1084900000010000000000000000000000000000DB +:10843000000000000200000000000000000000003A +:10844000000000000000000000000000000000002C +:10845000000000000000000000000000000000001C +:10846000000000000000000000000000000000000C +:1084700000000000000000000000000000000000FC +:1084800000000000000000000000040000000000E8 +:1084900000000000000000000000000000000000DC :1084A00000000000000000000000000000000000CC -:1084B000A0000800000000000800080004000100FF -:1084C000A0000000000000210000C0030000000028 -:1084D00000210003000000030041C0030000004031 -:1084E000000000000000002100030021080000003F -:1084F0000000000000030000020000410200000034 -:108500000000000300200000010000110000000036 -:10851000010000000020000000000000000000003A +:1084B00000000000000000000000000000000000BC +:1084C00000000000000000000000000000000000AC +:1084D000000000000000000000000000000000009C +:1084E000000000000000000000000000000000008C +:1084F000000000000000000000000000000000007C +:10850000000000000000000000000000000000006B +:10851000000000000000000000000000000000005B :10852000000000000000000000000000000000004B -:1085300000000000000000000000000000008000BB -:108540000400000000000000000000000000000027 -:108550000000000000000000000008000000000013 -:1085600000000500108200000000000000900000E4 +:10853000000000000000000000000000000000003B +:10854000000000000000000000000000000000002B +:10855000000000000000000000000000000000001B +:10856000000000000000000000000000000000000B :1085700000000000000000000000000000000000FB -:1085800000000000000000010000040000000000E6 -:1085900000000400000000010000000000000000D6 +:1085800000000000000000000000000000000000EB +:1085900000000000000000000000000000000000DB :1085A00000000000000000000000000000000000CB -:1085B000000000C000900000000000C0009000001B -:1085C000000000C00091A000000000C10191A000C7 -:1085D000000000890104020000A000C0009000001B -:1085E000000000C100900800000000C000901000D2 -:1085F0000000000300C000901001000100C00190C5 -:108600000800000000C001904000000000C0019080 -:108610002000000000C000900000000000000000EA +:1085B00000000000000000000000000000000000BB +:1085C00000000000000000000000000000000000AB +:1085D000000000000000000000000000000000009B +:1085E000000000000000000000000000000000008B +:1085F000000000000000000000000000000000007B +:10860000000000000000000000000000000000006A +:10861000000000000000000000000000000000005A :10862000000000000000000000000000000000004A -:10863000000000000080008000000000008000803A -:1086400000000000008911C00009001100A0208472 -:1086500000100011080840408009001000890082C5 -:108660000011001100C009918005001100801180E7 -:10867000800000000000088409C000040040008061 -:108680004080800000000580108080000000008095 -:10869000408000000000008000800000000000001A +:10863000000000000000000000000000000000003A +:10864000000000000000000000000000000000002A +:10865000000000000000000000000000000000001A +:10866000000000000000000000000000000000000A +:1086700000000000000000000000000000000000FA +:1086800000000000000000000000000000000000EA +:1086900000000000000000000000000000000000DA :1086A00000000000000000000000000000000000CA -:1086B000000000000000000080000000808000003A -:1086C0008000000080802000C00004009180000035 -:1086D000800000008080800000900080000000008A -:1086E0008000000080C0000080000000808000004A -:1086F000800000008080000000008000000080807A -:108700000000800000008080000080000011808058 -:108710000000800000008080000080000000808059 +:1086B00000000000000000000000000000000000BA +:1086C00000000000000000000000000000000000AA +:1086D000000000000000000000000000000000009A +:1086E000000000000000000000000000000000008A +:1086F000000000000000000000000000000000007A +:108700000000000000000000000000000000000069 +:108710000000000000000000000000000000000059 :108720000000000000000000000000000000000049 -:108730000000000000000000000082000000C09067 -:10874000000082000000C090010082000000C09084 -:10875000000082000000C0900800880940408400AA -:10876000000282000000C090000082000000C09063 -:10877000000082000000C0900000000082000000A5 -:10878000C090000082000000C09000008200000045 -:10879000C090000082000000C09000008200000035 -:1087A000C090000000000000000000000000000079 -:1087B0000000000000000000000000000000009029 -:1087C00000C000000000009000C000000000019008 -:1087D00000C100000000019000C0C00101000101C3 -:1087E000000100000000009000C000000000859023 -:1087F00001C100010000009100C100000000000163 -:10880000009100C100000000849000C10000000041 -:10881000009000C000000000009000C100000000B7 -:10882000909000C000000000000000000000000068 +:108730000000000000000000000000000000000039 +:108740000000000000000000000000000000000029 +:108750000000000000000000000000000000000019 +:108760000000000000000000000000000000000009 +:1087700000000000000000000000000000000000F9 +:1087800000000000000000000000000000000000E9 +:1087900000000000000000000000000000000000D9 +:1087A00000000000000000000000000000000000C9 +:1087B00000000000000000000000000000000000B9 +:1087C00000000000000000000000000000000000A9 +:1087D0000000000000000000000000000000000099 +:1087E0000000000000000000000000000000000089 +:1087F0000000000000000000000000000000000079 +:108800000000000000000000000000000000000068 +:108810000000000000000000000000000000000058 +:108820000000000000000000000000000000000048 :108830000000000000000000000000000000000038 -:10884000008000800000000000800080000303041E -:108850004091008400100910109100C080080404A9 -:10886000402000080000210003800080004109082A -:10887000059104C00010000400A000840000002046 -:10888000094010C000A00041000400A000C0000288 -:108890000009009100C000030004008900C000002E -:1088A00000000080008000000000000000000000C8 -:1088B0000000000000000000000000000000801127 -:1088C0008005000000008011800500000000800885 -:1088D00000050000001180080005000000000000F5 -:1088E000000000000000C0040240110004008011DC -:1088F0008040000000008011804000000000000067 -:1089000080118040000000008011804000000000C5 -:108910008011804000000000801000400000000036 -:108920008000004000000000000000000000000087 +:108840000000000000000000000000000000000028 +:108850000000000000000000000000000000000018 +:108860000000000000000000000000000000000008 +:1088700000000000000000000000000000000000F8 +:1088800000000000000000000000000000000000E8 +:1088900000000000000000000000000000000000D8 +:1088A00000000000000000000000000000000000C8 +:1088B00000000000000000000000000000000000B8 +:1088C00000000000000000000000000000000000A8 +:1088D0000000000000000000000000000000000098 +:1088E0000000000000000000000000000000000088 +:1088F0000000000000000000000000000000000078 +:108900000000000000000000000000000000000067 +:108910000000000000000000000000000000000057 +:108920000000000000000000000000000000000047 :108930000000000000000000000000000000000037 -:10894000C001200000000000C00120000000000065 -:10895000C0A0000000009000C000000000008800DF -:108960008800040490849000910000000000010041 -:10897000C001200000000000C00120000000000035 -:108980000000C001200000000000C0012000000025 -:108990000000C001200000000000C0000000000036 -:1089A0009000C000000000009000000000000000E7 +:108940000000000000000000000000000000000027 +:108950000000000000000000000000000000000017 +:108960000000000000000000000000000000000007 +:1089700000000000000000000000000000000000F7 +:1089800000000000000000000000000000000000E7 +:1089900000000000000000000000000000000000D7 +:1089A00000000000000000000000000000000000C7 :1089B00000000000000000000000000000000000B7 -:1089C0000000008200000600000000060000060013 -:1089D0000000008100000600000000810000060089 -:1089E00000000000000000004100000A0000060036 -:1089F0000000000A000006000000000A0000060057 -:108A000000000000004100000600000000420000DD -:108A100006000000001100000600000000810000B8 -:108A20000600000000210000060000000000000019 +:1089C00000000000000000000000000000000000A7 +:1089D0000000000000000000000000000000000097 +:1089E0000000000000000000000000000000000087 +:1089F0000000000000000000000000000000000077 +:108A00000000000000000000000000000000000066 +:108A10000000000000000000000000000000000056 +:108A20000000000000000000000000000000000046 :108A30000000000000000000000000000000000036 -:108A400000000000FF000000FF000000FF00000029 -:108A5000FF0000003C3C0000FF0000003C3C000028 -:108A6000FF000000C3990F0000000000FFFF00009E -:108A7000FF000000FF000000FF000000FF000000FA -:108A8000FF0000000000FF000000FF000000FF00EA -:108A90000000FF000000FF000000FF0000003C3C61 -:108AA0000000FF0000003C3C0000FF000000000050 +:108A40000000000000000000000000000000000026 +:108A50000000000000000000000000000000000016 +:108A60000000000000000000000000000000000006 +:108A700000000000000000000000000000000000F6 +:108A800000000000000000000000000000000000E6 +:108A900000000000000000000000000000000000D6 +:108AA00000000000000000000000000000000000C6 :108AB00000000000000000000000000000000000B6 -:108AC000000000000000FF000000FF000000FF00A9 -:108AD0000000FF0000003C3C0000FF0000003C3CA8 -:108AE0000000FF000000C3990FFF00000000FFFF1F -:108AF0000000FF000000FF000000FF000000FF007A -:108B00000000FF0000000000FF000000FF00000068 -:108B1000FF000000FF000000FF000000FF00000059 -:108B20003C3C0000FF0000003C3C0000FF00000057 +:108AC00000000000000000000000000000000000A6 +:108AD0000000000000000000000000000000000096 +:108AE0000000000000000000000000000000000086 +:108AF0000000000000000000000000000000000076 +:108B00000000000000000000000000000000000065 +:108B10000000000000000000000000000000000055 +:108B20000000000000000000000000000000000045 :108B30000000000000000000000000000000000035 :108B40000000000000000000000000000000000025 :108B50000000000000000000000000000000000015 @@ -186600,270 +186600,270 @@ :108B900000000000000000000000000000000000D5 :108BA00000000000000000000000000000000000C5 :108BB00000000000000000000000000000000000B5 -:108BC00000000000000000000000000000FF0000A6 -:108BD0000F0F000000FF00000F0F000000FF00005B -:108BE0000F0F000000FFFFFFF0F000FFC3FF0D6D4F -:108BF0009DFD000000FF00000F0F000000FF0000BF -:108C00000F0F000000FF00000F0F0000000000FF2A -:108C100000000F0F000000FF00000F0F000000FF1A -:108C200000000F0F000000FF00000F0F000000FF0A -:108C3000FFFFF0F000000000000000000000000056 -:108C4000000000000000000000000000000000FF25 -:108C500000000F0F000000FF00000F0F000000FFDA -:108C600000000F0F000000FFFFFFF0F0FFFFC3FF49 -:108C7000046494F4000000FF00000F0F000000FFE8 -:108C800000000F0F000000FF00000F0F00000000A9 -:108C900000FF00000F0F000000FF00000F0F00009A -:108CA00000FF00000F0F000000FF00000F0F00008A -:108CB00000FFFFFFF0F000000000000000000000D7 -:108CC000000000000000000000000000000003821F -:108CD00003380C0092C0038203380C0092C003E3F7 -:108CE000033E0C0D92C003E3033E0C0D82C00061F5 -:108CF0003006000D00000363033E0C0D92C003E339 -:108D0000033E0C0D92C003E3033E0C0D92C0000025 -:108D100003E3033E0C0D92C003E3033E0C0D92C02F -:108D200003E3033E0C0D92C003E3033E0C0D92C01F -:108D3000038203380C0082C0000000000000000025 +:108BC00000000000000000000000000000000000A5 +:108BD0000000000000000000000000000000000095 +:108BE0000000000000000000000000000000000085 +:108BF0000000000000000000000000000000000075 +:108C00000000000000000000000000000000000064 +:108C10000000000000000000000000000000000054 +:108C20000000000000000000000000000000000044 +:108C30000000000000000000000000000000000034 +:108C40000000000000000000000000000000000024 +:108C50000000000000000000000000000000000014 +:108C60000000000000000000000000000000000004 +:108C700000000000000000000000000000000000F4 +:108C800000000000000000000000000000000000E4 +:108C900000000000000000000000000000000000D4 +:108CA00000000000000000000000000000000000C4 +:108CB00000000000000000000000000000000000B4 +:108CC00000000000000000000000000000000000A4 +:108CD0000000000000000000000000000000000094 +:108CE0000000000000000000000000000000000084 +:108CF0000000000000000000000000000000000074 +:108D00000000000000000000000000000000000063 +:108D10000000000000000000000000000000000053 +:108D20000000000000000000000000000000000043 +:108D30000000000000000000000000000000000033 :108D40000000000000000000000000000000000023 :108D50000000000000000000000000000000000013 -:108D6000000000003AF03AFF00000000FA30FA3F3D -:108D700000000000838FB3BF35FF350F00000000F7 -:108D800000000000F0AAF0AA00000000A8ADF8FD65 -:108D9000000000000000A0AFA0AF00000000A0AFE6 -:108DA000A0AF000000000F3AFF3A000000000AFAEE -:108DB0000AFA0000000000000000000000000000AF +:108D60000000000000000000000000000000000003 +:108D700000000000000000000000000000000000F3 +:108D800000000000000000000000000000000000E3 +:108D900000000000000000000000000000000000D3 +:108DA00000000000000000000000000000000000C3 +:108DB00000000000000000000000000000000000B3 :108DC00000000000000000000000000000000000A3 :108DD0000000000000000000000000000000000093 -:108DE0000000000000003A003A0F000000000A30C6 -:108DF0000A3F00000000808CB0BC35F03500000058 -:108E0000000000000000003CFF3C00000000080DD6 -:108E1000585D00000000000030303F3F00000000BF -:108E200030303F3F00000000003AF03A0000000000 -:108E300030303F3F00000000000000000000000054 +:108DE0000000000000000000000000000000000083 +:108DF0000000000000000000000000000000000073 +:108E00000000000000000000000000000000000062 +:108E10000000000000000000000000000000000052 +:108E20000000000000000000000000000000000042 +:108E30000000000000000000000000000000000032 :108E40000000000000000000000000000000000022 :108E50000000000000000000000000000000000012 -:108E600000000000FD3DF1313CF0FFAAF7F437347B -:108E7000000000005C5CFFF000000000CF7D0C7D76 -:108E800000000000BFAB3D29000000000000000012 -:108E9000000000000000FF551E1E00000000000042 +:108E60000000000000000000000000000000000002 +:108E700000000000000000000000000000000000F2 +:108E800000000000000000000000000000000000E2 +:108E900000000000000000000000000000000000D2 :108EA00000000000000000000000000000000000C2 :108EB00000000000000000000000000000000000B2 :108EC00000000000000000000000000000000000A2 :108ED0000000000000000000000000000000000092 -:108EE000000000000000CD0DC1013CF000AAC7C485 -:108EF0000704000000005C5C0F0000000000CF4190 -:108F00000C410000000097831501000000000000E4 -:108F10000000000000000000AA001E1E000000006B +:108EE0000000000000000000000000000000000082 +:108EF0000000000000000000000000000000000072 +:108F00000000000000000000000000000000000061 +:108F10000000000000000000000000000000000051 :108F20000000000000000000000000000000000041 :108F30000000000000000000000000000000000031 :108F40000000000000000000000000000000000021 -:108F500000000000000000000000200020000000D1 -:108F600000002000000002000000000000002000BF -:108F7000000000000000840000000000000000006D -:108F800000000000000000000000000000000000E1 +:108F50000000000000000000000000000000000011 +:108F60000000000000000000000000000000000001 +:108F700001000080004000800000000000000000B0 +:108F800000000000000000000000000000020000DF :108F900000000000000000000001000000000000D0 -:108FA00000000000000000000000000000000000C1 -:108FB00000000000000000080000000000000000A9 -:108FC000000400000000000000000000000000009D -:108FD000000000000000000200000000000000008F -:108FE00000000090000200000000000000000000EF -:108FF0000000000000000000000000000000000071 -:109000000000000000000000000000000000000060 -:109010000000000000000000000000000000000050 -:109020000000000000000000000000000000000040 -:109030000000000000000000000000000000000030 -:1090400040000000000000000000000000000000E0 -:109050000000000000000000000000000000000010 -:1090600000000000020000000200010000000000FB -:1090700000000000000000002000020000000000CE -:1090800000000200020002000300010000000000D6 -:1090900000110200000000000000000000000000BD -:1090A00000000000020000000000000004000000BA -:1090B00000000000040000000000000000000000AC -:1090C000000000000400000000000000000000009C +:108FA00000000000000000040000000000000000BD +:108FB00000000000000000000000000000000000B1 +:108FC00000000000000000000000000000000000A1 +:108FD000000000000000000000000002000200008D +:108FE0000000000000000000000000000000000081 +:108FF00000000200004000010040000000000000EE +:109000000000000000000004000400040000000450 +:10901000000000000000000000040000000000004C +:10902000000200000002000000901002009000000A +:109030000000000000000002000200000002000228 +:10904000000000000000000200000000000000021C +:10905000000000000000000200000000000000000E +:109060000000000000000000000000000000000000 +:1090700000000000000000000000000000000000F0 +:1090800000000000000000000010001000000000C0 +:1090900000000000000000000000000000000000D0 +:1090A00000000000000000000000001000100000A0 +:1090B00000000000000000000000000000000000B0 +:1090C000000000000000000000000000020000009E :1090D0000000000000000000000000000000000090 -:1090E00000000008000000900202000020000008BC -:1090F00000080000020002000200020080000000E0 -:1091000000000008800000000000200002000008AD -:1091100000080000800000000000000004000000C3 -:109120000000000000080000000000000000000037 -:10913000000800080000000000000000000000001F -:109140000000000000080000000000000000000017 -:1091500000080004000000000000000000040000FF -:1091600000000000001100000000000000000000EE -:1091700000000000000000000000000000000000EF -:109180000000000000008800908501000008000039 -:10919000004100000011000000000000000000007D +:1090E0000000000000000000000000000000000080 +:1090F0000000000000000000000000000000000070 +:10910000000000000000000000000000000000005F +:10911000000000000000000000000000000000004F +:10912000000000000000000000000000000000003F +:10913000000000000000000000000000000000002F +:10914000000000000000000000000000000000001F +:10915000000000000000000000000000000000000F +:1091600000000000000000000000000000000000FF +:1091700000000400000000000000000000000000EB +:1091800000000000000000000000000000000400DB +:1091900000000000000000000000000000000000CF :1091A00000000000000000000000000000000000BF :1091B00000000000000000000000000000000000AF :1091C000000000000000000000000000000000009F :1091D000000000000000000000000000000000008F :1091E000000000000000000000000000000000007F :1091F000000000000000000000000000000000006F -:109200002000008200100000000000081000008311 -:10921000000000000000000000000300000000004B -:10922000000000000000000003000000000000C07B -:1092300000820000000000000300000000000000A9 -:1092400000000000002000000000000000000000FE +:10920000000000000000000000000000000000005E +:10921000000000000000000000000000000000004E +:10922000000000000000000000000000000000003E +:10923000000000000000000000000000000000002E +:10924000000000000000000000000000000000001E :10925000000000000000000000000000000000000E -:10926000000000000000000000008200000000007C -:1092700000000800A00002000000000000008405BB -:109280000000000000000000000000409100010507 -:109290000000018000000004400000000000000009 -:1092A000000000000000000000004000000000007E +:1092600000000000000000000000000000000000FE +:1092700000000000000000000000000000000000EE +:1092800000000000000000000000000000000000DE +:1092900000000000000000000000000000000000CE +:1092A00000000000000000000000000000000000BE :1092B00000000000000000000000000000000000AE :1092C000000000000000000000000000000000009E -:1092D000000000000000000000000000000000008E +:1092D000000000000010000000000000000000007E :1092E000000000000000000000000000000000007E :1092F000000000000000000000000000000000006E -:10930000410000820800410020000000000010849D -:1093100010C00000200805884100000008900000EF +:10930000000000000000000000000000000000005D +:10931000000000000000000000000000000000004D :10932000000000000000000000000000000000003D :10933000000000000000000000000000000000002D :10934000000000000000000000000000000000001D :10935000000000000000000000000000000000000D :1093600000000000000000000000000000000000FD -:109370000000000000000000000000000800820063 -:109380000000020000000000000082100021000028 -:10939000000008C1881100410000004100000000E9 +:1093700000000000000000000000000000000000ED +:1093800000000000000000000000000000000000DD +:1093900000000000000000000000000000000000CD :1093A00000000000000000000000000000000000BD -:1093B000000000000000000000000000004100006C +:1093B00000000000000000000000000000000000AD :1093C000000000000000000000000000000000009D :1093D000000000000000000000000000000000008D -:1093E00000000000000000000000000000000090ED +:1093E000000000000000000000000000000000007D :1093F000000000000000000000000000000000006D -:109400000000008421000000210003A000100900DA -:10941000009000000004000011000000000009009E -:109420000000000000000000080000000000000034 -:10943000000000000000000000000000210000000B -:109440000000000000000000000000000000040018 -:1094500000002100000000000000210000000000CA +:10940000000000000000000000000000000000005C +:10941000000000000000000000000000000000004C +:10942000000000000000000000000000000000003C +:10943000000000000000000000000000000000002C +:10944000000000000000000000000000000000001C +:10945000000000000000000000000000000000000C :1094600000000000000000000000000000000000FC -:1094700000000000080000000000000000000800DC -:109480000000900000000000C00002000002000583 -:10949000840000000005000511000900000400041C +:1094700000000000000000000000000000000000EC +:10948000000000000000000000000080000000005C +:1094900000000000000000000000000000000000CC :1094A00000000000000000000000000000000000BC -:1094B00000000000000002000000000000000000AA -:1094C000000000000000000000000000900000000C -:1094D00000000000900000000000000000000000FC +:1094B00000000000000000000000000000000000AC +:1094C000000000000000000000000000000000009C +:1094D000000000000000000000000000000000008C :1094E000000000000000000000000000000000007C -:1094F0000000000000000000000000000000080064 -:1095000000000000000000A0000000820000000039 -:10951000081008000020008400C0100010000000A7 -:109520001100050000000000000000000590000090 +:1094F000000000000000000000000000000000006C +:10950000000000000000000000000000002000003B +:109510000000000000000000000000000000050046 +:109520000000000005000000000000000000000036 :10953000000000000000000000000000000000002B :10954000000000000000000000000000000000001B :10955000000000000000000000000000000000000B :1095600000000000000000000000000000000000FB :1095700000000000000000000000000000000000EB -:109580000000000000000000000000880000001043 -:109590000010000400000000010200000004008927 -:1095A00000880000000000C0000000000000000073 -:1095B00000010000000000000000000000000000AA +:10958000000000000000000000000090000000004B +:1095900000000000000000000000000000000000CB +:1095A00000000000000000000000000000000000BB +:1095B00000000000000000000000000000000000AB :1095C000000000000000000000000000000000009B :1095D000000000000000000000000000000000008B :1095E000000000000000000000000000000000007B :1095F000000000000000000000000000000000006B -:10960000000000000000000000000000000000005A -:109610000080000000000000000011800000050034 -:109620000010080000000000000000000000000022 +:1096000000000000000000000000000000800000DA +:10961000000000000000000000000000000000004A +:10962000000000000000000000000000000000003A :10963000000000000000000000000000000000002A :10964000000000000000000000000000000000001A :10965000000000000000000000000000000000000A :1096600000000000000000000000000000000000FA :1096700000000000000000000000000000000000EA -:109680000000000000000000000000000000008357 -:10969000000000000000008300800000110800901E -:1096A0000090000000000021008000000000000089 +:1096800000000000000000000000000000000000DA +:1096900000000000000000000000000000000000CA +:1096A00000000000000000000000000000000000BA :1096B00000000000000000000000000000000000AA :1096C000000000000000000000000000000000009A :1096D000000000000000000000000000000000008A :1096E000000000000000000000000000000000007A :1096F000000000000000000000000000000000006A -:109700000000000000000000000000000000000059 -:1097100000090020000200000009000400200101EF -:109720000008004100000000008400040000000068 +:1097000000000000000000000000000000008800D1 +:1097100000100000008800000000000000000000B1 +:109720000000000000000000000000000000000039 :109730000000000000000000000000000000000029 :109740000000000000000000000000000000000019 :109750000000000000000000000000000000000009 :1097600000000000000000000000000000000000F9 :1097700000000000000000000000000000000000E9 :1097800000000000000000000000000000000000D9 -:10979000020000000000400008000000000004007B -:1097A0000800100100000000840000000000040018 +:1097900000000000909000000000000000000000A9 +:1097A00000000000000000000000000000000000B9 :1097B00000000000000000000000000000000000A9 :1097C0000000000000000000000000000000000099 :1097D0000000000000000000000000000000000089 :1097E0000000000000000000000000000000000079 :1097F0000000000000000000000000000000000069 -:109800000000000000000000400000000000000018 -:1098100000000000000000000000800000000000C8 -:10982000800080000011000008000000000000001F -:1098300080000000000000000000000000000000A8 +:109800000000000000000000000000000000000058 +:1098100000000800000000800000000000000000C0 +:109820000000000000000000000000000000000038 +:109830000000000000000000000000000000000028 :109840000000000000000000000000000000000018 :109850000000000000000000000000000000000008 :1098600000000000000000000000000000000000F8 :1098700000000000000000000000000000000000E8 -:1098800000000000000800000000000000000000D0 -:109890000000000000108000800080000000000038 -:1098A000800080000040000008008000000480006C +:1098800000000000000000000000000000000000D8 +:109890000000000000118000000000000000000037 +:1098A00000000000000000000000000000000000B8 :1098B00000000000000000000000000000000000A8 :1098C0000000000000000000000000000000000098 :1098D0000000000000000000000000000000000088 :1098E0000000000000000000000000000000000078 :1098F0000000000000000000000000000000000068 :109900000000000000000000000000000000000057 -:109910000000000000000200200010001000900075 -:1099200004001000100020000400050002000801DF -:1099300020002000C0000000000000000000000027 +:109910000000000000000001200000000000000026 +:109920000000000000000000000000000000000037 +:109930000000000000000000000000000000000027 :109940000000000000000000000000000000000017 :109950000000000000000000000000000000000007 :1099600000000000000000000000000000000000F7 :1099700000000000000000000000000000000000E7 -:109980000000000000000000810000E00000000076 -:1099900000000000000000000000000000000000C7 -:1099A00000000000000000008100006000000000D6 +:1099800000000000000000000000000000000000D7 +:1099900000000000000000000000000007000000C0 +:1099A00000000000000000000000000000000000B7 :1099B00000000000000000000000000000000000A7 :1099C0000000000000000000000000000000000097 :1099D0000000000000000000000000000000000087 :1099E0000000000000000000000000000000000077 :1099F0000000000000000000000000000000000067 :109A00000000000000000000000000000000000056 -:109A100000000000000000000000F5050303000046 -:109A20000000F5C005C000000000F3500350000026 -:109A300000004D3C4D000000000000000000000050 +:109A10000000000000000000000000FF000000FF48 +:109A20000000000000000000000000000000000036 +:109A30000000000000000000000000000000000026 :109A40000000000000000000000000000000000016 :109A50000000000000000000000000000000000006 :109A600000000000000000000000000000000000F6 :109A700000000000000000000000000000000000E6 :109A800000000000000000000000000000000000D6 -:109A9000000000000000000000000000F505F3F3E6 -:109AA00000000000F5CF05CF00000000F35F035F6A -:109AB000000000004DFF4DC300000000000000004A +:109A900000000000000000000000000000FF0000C7 +:109AA00000FF0000000000000000000000000000B7 +:109AB00000000000000000000000000000000000A6 :109AC0000000000000000000000000000000000096 :109AD0000000000000000000000000000000000086 :109AE0000000000000000000000000000000000076 :109AF0000000000000000000000000000000000066 :109B00000000000000000000000000000000000055 -:109B10000000000000000000000000000000FFFF47 -:109B2000FFFF0000000000FF00FF00000000F0F059 -:109B3000F0F000000000C3C3C3C300000000000039 +:109B10000000000000000000000000000000000045 +:109B2000FF0000003C3C00000000000000000000BE +:109B30000000000000000000000000000000000025 :109B40000000000000000000000000000000000015 :109B50000000000000000000000000000000000005 :109B600000000000000000000000000000000000F5 :109B700000000000000000000000000000000000E5 :109B800000000000000000000000000000000000D5 :109B900000000000000000000000000000000000C5 -:109BA00028EB28EB00000000AA00AAFF000000003C -:109BB000C0C0CFCF000000002828EBEB0000000061 +:109BA0000000FF0000003C3C00000000000000003E +:109BB00000000000000000000000000000000000A5 :109BC0000000000000000000000000000000000095 :109BD0000000000000000000000000000000000085 :109BE0000000000000000000000000000000000075 :109BF0000000000000000000000000000000000065 :109C00000000000000000000000000000000000054 -:109C1000000000610006800D000000000000000050 -:109C200000000000300000000000000030000000D4 -:109C3000000000003007C00C0000000030000000F1 +:109C10000000000000000000000000000000000044 +:109C2000000015002A00054000A800000000000008 +:109C30000000000000000000000000000000000024 :109C40000000000000000000000000000000000014 :109C50000000000000000000000000000000000004 :109C600000000000000000000000000000000000F4 @@ -186871,7 +186871,7 @@ :109C800000000000000000000000000000000000D4 :109C900000000000000000000000000000000000C4 :109CA00000000000000000000000000000000000B4 -:109CB0000000000000000F0FF0F0000000000000A6 +:109CB00000000000000000000000000000000000A4 :109CC0000000000000000000000000000000000094 :109CD0000000000000000000000000000000000084 :109CE0000000000000000000000000000000000074 @@ -186879,7 +186879,7 @@ :109D00000000000000000000000000000000000053 :109D10000000000000000000000000000000000043 :109D20000000000000000000000000000000000033 -:109D300000000000000000000F0FF0F00000000025 +:109D30000000000000000000000000000000000023 :109D40000000000000000000000000000000000013 :109D50000000000000000000000000000000000003 :109D600000000000000000000000000000000000F3 @@ -186887,7 +186887,7 @@ :109D800000000000000000000000000000000000D3 :109D900000000000000000000000000000000000C3 :109DA00000000000000000000000000000000000B3 -:109DB000000000000000000000003C3C3C3C0000B3 +:109DB00000000000000000000000000000000000A3 :109DC0000000000000000000000000000000000093 :109DD0000000000000000000000000000000000083 :109DE0000000000000000000000000000000000073 @@ -186895,195 +186895,195 @@ :109E00000000000000000000000000000000000052 :109E10000000000000000000000000000000000042 :109E20000000000000000000000000000000000032 -:109E30000000000000000000000000003C3C3C3C32 +:109E30000000000000000000000000000000000022 :109E40000000000000000000000000000000000012 :109E50000000000000000000000000000000000002 :109E600000000000000000000000000000000000F2 :109E700000000000000000000000000000000000E2 :109E800000000000000000000000000000000000D2 -:109E900000000000000000022000000000000000A0 -:109EA000000000000000000004002000000000008E -:109EB0000000000088000000010004000000000015 -:109EC000000000000008000000000000000000008A -:109ED0000000000000000000000000000000000082 -:109EE000000000000004000000000000000000006E -:109EF00000000004C000000000000000000000009E -:109F00000000000000000000000000000000000051 -:109F1000000000002000404000400000000400005D -:109F20000000000000000000000000000000000031 -:109F30000900400010000000002020000000000088 -:109F400000000000000000014000000000000000D0 -:109F50000000000000000000000000000000000001 -:109F600000000000000000000000000000000000F1 -:109F700000000000000000000000000000000000E1 -:109F800000000000000000000000000000000000D1 -:109F9000000000004000000001000000000004007C -:109FA0002000000000001000000000000000080079 -:109FB0000000000000040200000090008804094135 -:109FC000A005820000080210001000000820000018 -:109FD0000000000000000040000000000000000839 -:109FE0000000000000000004100404000000000055 -:109FF00000000000820000000400000000000000DB -:10A000000400000000000008040000000000000040 -:10A010000000000000000000000008080000000828 -:10A020000000040004000400020000080000000812 -:10A03000000000000000000080040008000000088C -:10A040000200000000080000840800080000000969 -:10A0500004001000000000000001000000080000E3 -:10A060000084200800000008000804080008000020 -:10A0700000080400000800000000000000040000C8 -:10A0800000820008000000080082000800020000B2 -:10A0900000040000000800000000000000000000B4 -:10A0A0000000004000000000000000000000A000D0 -:10A0B000004100030000820000000100048501044B -:10A0C00000800020000000000009000000C00480A3 -:10A0D0000808010900080000000000000000080056 -:10A0E0000000000000000000000000000000000070 -:10A0F000000000210000000000000000000000003F -:10A100000000000800000000000000000000000047 +:109E900000000000000000000000000000000000C2 +:109EA00000000000000000000000001100000000A1 +:109EB00000000000000000000000000000800080A2 +:109EC0000080008000000000000000000000000092 +:109ED000000000000001000000000000000400007D +:109EE0000000000000000000000000000000000072 +:109EF0000000000000000000000000000000000062 +:109F0000000000000000000000000000000400004D +:109F10000000000000000000000000000000000041 +:109F2000000000000000000000000002000000022D +:109F30000000000000000000000000000000000819 +:109F400000080008000800000000000000000000F9 +:109F500000020000000200000000000000000002FB +:109F600000000002000200000002000200020000E7 +:109F70004090000000000000000000000000000011 +:109F80000000000000000040000000000000000091 +:109F900000000000000000000000000000000000C1 +:109FA00000000000000000000000000000000000B1 +:109FB00000000000000000000000000000000000A1 +:109FC0000000000000000000000000000000000091 +:109FD0000000000000000000000000000000001071 +:109FE0000000000000000000000000000000000071 +:109FF0000000000000000000000000000000000061 +:10A000000000000000000000000000000000000050 +:10A010000000000000000000000000000000000040 +:10A020000000000000000000000000000000000030 +:10A03000000004000000000000000000000000001C +:10A040000000000000000000000000000000000010 +:10A050000000000000000000000000000000000000 +:10A0600000000000000000000000000000000000F0 +:10A0700000000000000000000000000000000000E0 +:10A0800000000000000000000000000000020000CE +:10A0900000000000000000000000000000000000C0 +:10A0A00000000000000000000000000000000000B0 +:10A0B00000000000000000000000000000000000A0 +:10A0C000000000000100000000000100000000008E +:10A0D000000000000400000000000000000000215B +:10A0E0000000000000000000000000000000000868 +:10A0F0000000000000000000000000000000000060 +:10A10000000000000000000000000000000000004F :10A11000000000000000000000000000000000003F -:10A1200000000000004000000000000000000000EF -:10A130002100410000000000000009002000800410 -:10A1400004010020008303000000410041000021C1 -:10A15000804000012000000000000000000000001E +:10A12000000000000000000000000000000000002F +:10A1300000000000000000000000000000000020FF +:10A1400000000000000020000000000020000000CF +:10A1500000000000000000000000000000000000FF :10A1600000000000000000000000000000000000EF :10A1700000000000000000000000000000000000DF :10A1800000000000000000000000000000000000CF :10A1900000000000000000000000000000000000BF -:10A1A00000000000000000000000C01002000000DD -:10A1B000C0000000A041004020108200000000000C -:10A1C0000000108401080000A1040100000000004C -:10A1D00000000000000000A00000000000000000DF -:10A1E0000000000000000000000000000000000867 -:10A1F0000010000000000000000000080000000047 +:10A1A00000000000000000000000000000000000AF +:10A1B000000000000000000000000000000000009F +:10A1C000000000000000000000000100008001808D +:10A1D000000000000000010000000000000000007E +:10A1E000000000000000000000000000000000006F +:10A1F000000000000000000000000000000000005F :10A20000000000000000000000000000000000004E :10A21000000000000000000000000000000000003E -:10A220000000000000000000000008000208080014 -:10A23000000000000000000000018000200003007A -:10A240002100030080201091000804010400000098 -:10A250000000000000000000004100840004000035 -:10A2600000000000000400000000000000000000EA +:10A22000000000000000000000000000000000002E +:10A23000000000000000000000000000000000001E +:10A2400000000000000000000000000004000020EA +:10A2500002200000000000000400000000000000D8 +:10A2600000000000000000000000000000000000EE :10A2700000000000000000000000000000000000DE :10A2800000000000000000000000000000000000CE :10A2900000000000000000000000000000000000BE -:10A2A0000000000000000000040000000840C000A2 -:10A2B000000008000000000008000000000020006E -:10A2C00020032005C1020141010020218200000479 -:10A2D00001042180000001002100000800000000AE +:10A2A00000000000000000000000000000000000AE +:10A2B000000000000000000000000000000000009E +:10A2C00000000000200020009000000000000000BE +:10A2D000000000000040000000200000000000001E :10A2E000000000000000000000000000000000006E :10A2F000000000000000000000000000000000005E :10A30000000000000000000000000000000000004D :10A31000000000000000000000000000000000003D -:10A320000000000000000000000004000000000029 -:10A33000000000000000000000000000000000001D -:10A3400080008084800010A0100020008000008425 -:10A3500009010401A0200000200282000001000089 +:10A32000000000000000000000000000000000002D +:10A330000000000000000084000000000000000099 +:10A340000500000000040000000000000000000004 +:10A3500000000000000000010000000100000000FB :10A3600000000000000000000000000000000000ED :10A3700000000000000000000000000000000000DD :10A3800000000000000000000000000000000000CD :10A3900000000000000000000000000000000000BD :10A3A00000000000000000000000000000000000AD -:10A3B0000000C01008000000000000000000C00005 -:10A3C0000000000401210800100040090021114193 -:10A3D000008300002000C0000004014000C00820ED -:10A3E0000000002000000000000000040000000049 +:10A3B000000000000000000000000000000000009D +:10A3C000001100000000000000000000000000007C +:10A3D000000000000000000000000000000900096B +:10A3E000000000000000000000000000000000006D :10A3F000000000000000000000000000000000005D :10A40000000000000000000000000000000000004C :10A41000000000000000000000000000000000003C :10A42000000000000000000000000000000000002C :10A43000000000000000000000000000000000001C -:10A440000000200000002000080091004100008270 -:10A450008400000400008000218400011001000538 -:10A460004001000041001100000000000000000059 +:10A440000500000000000000000000000000000007 +:10A4500000000000000000000000000000000000FC +:10A4600000000000000000000000000000000000EC :10A4700000000000000000000000000000000000DC :10A4800000000000000000000000000000000000CC :10A4900000000000000000000000000000000000BC -:10A4A00000000000000000000000000000000008A4 -:10A4B000000200900000000000000000000000000A -:10A4C000000400A001100008010000C000C09005B9 -:10A4D00001C0002000C0A00401C0000401009040A1 -:10A4E00000000000000800840084008800010000D3 +:10A4A00000000000000000000000000000000000AC +:10A4B000000000000000000000000000000000009C +:10A4C000000000000000000000000000000000008C +:10A4D0000000000001002000000000880000900043 +:10A4E000000000000000000000000000000000006C :10A4F000000000000000000000000000000000005C :10A50000000000000000000000000000000000004B :10A51000000000000000000000000000000000003B :10A52000000000000000000000000000000000002B -:10A53000008000000000000000000000000000009B -:10A540000000000000000880008010000000408033 -:10A55000800810000000008000801000000008004B -:10A560000000410500002080000000800000000085 +:10A53000000000000000000000000000000000001B +:10A54000000000000000000000000000000000000B +:10A550000000000000000900800000000009110058 +:10A56000800000000000000000000000000000006B :10A5700000000000000000000000000000000000DB :10A5800000000000000000000000000000000000CB :10A5900000000000000000000000000000000000BB :10A5A00000000000000000000000000000000000AB -:10A5B0000000000900800000000000000000000012 -:10A5C00000000090008000000002000300C10000B5 -:10A5D0001141002000830080000200090083000078 -:10A5E00011028000000300800000000200800000D3 +:10A5B000000000000000000000000000000000009B +:10A5C000000000000000000000000000000000008B +:10A5D00000000000000000000003008011080000DF +:10A5E000000000800000008000000000000000006B :10A5F000000000000000000000000000000000005B :10A60000000000000000000000000000000000004A :10A61000000000000000000000000000000000003A :10A62000000000000000000000000000000000002A -:10A63000000000000000001000000000000000000A -:10A640000000000000090008000000000084001065 -:10A6500000000101008400C100040000008200032A -:10A660000088010190A000010004000000C100402A -:10A670000082000000000000000000000000000058 +:10A63000000000000000000000000000000000001A +:10A64000000000000000000000000000000000000A +:10A6500000000000000000000000000000020101F6 +:10A66000008800000020000000C000000000000082 +:10A6700000000000000000000000000000000000DA :10A6800000000000000000000000000000000000CA :10A6900000000000000000000000000000000000BA :10A6A00000000000000000000000000000000000AA -:10A6B0000000000040000000400002000000000018 -:10A6C0000000000002000000000010000000080070 -:10A6D00000001000C000200140001100110088009F -:10A6E00008008900019082010200000000002000A3 +:10A6B000000000000000000000000000000000009A +:10A6C000000000000000000000000000000000008A +:10A6D0000000000000000000000000000100C08831 +:10A6E0000200010003000088880001000000000053 :10A6F000000000000000000000000000000000005A :10A700000000000000000000000000000000000049 :10A710000000000000000000000000000000000039 :10A720000000000000000000000000000000000029 -:10A730000000000000008000000000000000000099 -:10A740000000000000000000000000008000000089 -:10A75000000000000500200080110000050002003C -:10A7600000008000410020800011800041000000B6 +:10A730000000000000000000000000000000000019 +:10A740000000000000000000000000000000000009 +:10A7500000000000000000000000000000000800F1 +:10A760008080800903004100008000000900000093 :10A7700000000000000000000000000000000000D9 :10A7800000000000000000000000000000000000C9 :10A7900000000000000000000000000000000000B9 :10A7A00000000000000000000000000000000000A9 -:10A7B0000000000000000000000080000000000019 -:10A7C0000000000000000000800000000000800089 -:10A7D000804000000000000000110010081100007F -:10A7E00000400010000000000008032100000000ED -:10A7F0000009000080008000000000000000000050 +:10A7B0000000000000000000000000000000000099 +:10A7C0000000000000000000000000000000000089 +:10A7D0000000000000000000000000000000000079 +:10A7E0000011111100800000001100000080000025 +:10A7F0000000000000000000000000000000000059 :10A800000000000000000000000000000000000048 :10A810000000000000000000000000000000000038 :10A820000000000000000000000000000000000028 -:10A83000000000000000000000008800A0000200EE -:10A8400002000000000000000000100002000400F0 -:10A8500010001000C0001000C00004011001C10170 -:10A8600082000400C001900004000001000000000C -:10A87000400082008400400004000000000000004E +:10A830000000000000000000000000000000000018 +:10A840000000000000000000000000000000000008 +:10A8500000000000000000000000000000000000F8 +:10A860000000000101000040000000010000004065 +:10A8700000000000000000000000000000000000D8 :10A8800000000000000000000000000000000000C8 :10A8900000000000000000000000000000000000B8 :10A8A00000000000000000000000000000000000A8 :10A8B0000000000000000000000000000000000098 :10A8C0000000000000000000000000000000000088 -:10A8D000000000008100006000000000884100606E -:10A8E00006006082818100600600000A4842006024 -:10A8F0000600000000000000000000000000000052 +:10A8D0000000000000000000000000000000000078 +:10A8E00000000000000000E00700820000000000FF +:10A8F00007008221000000000000000000000000AE :10A900000000000000000000000000000000000047 :10A910000000000000000000000000000000000037 :10A920000000000000000000000000000000000027 -:10A930000000000000000000000000000000FF66B2 -:10A94000FF6600000000000000000000000008C8D2 -:10A9500038F800000000810CBD0C00000000000F62 -:10A96000939300000000001B3C1B0000000000004F -:10A970003C3C00003C3C90039F03000000000000B2 +:10A930000000000000000000000000000000000017 +:10A940000000000000000000000000000000000007 +:10A9500000000000000000000000000000000000F7 +:10A96000000000000000000000000000F0F0000007 +:10A9700000000000F0F000000000000000000000F7 :10A9800000000000000000000000000000000000C7 :10A9900000000000000000000000000000000000B7 :10A9A00000000000000000000000000000000000A7 :10A9B0000000000000000000000000000000000097 -:10A9C000BF26FF660000000000000000000000003D -:10A9D0000BCB3BFB0000000081CFBDCF000000008F -:10A9E000F0FF939300000000C31BFF1B000000005A -:10A9F00000003C3C00003C3C90F39FF30000000052 +:10A9C0000000000000000000000000000000000087 +:10A9D0000000000000000000000000000000000077 +:10A9E0000000000000000000000000000000F0F087 +:10A9F000000000000000F0F0000000000000000077 :10AA00000000000000000000000000000000000046 :10AA10000000000000000000000000000000000036 :10AA20000000000000000000000000000000000026 @@ -187096,489 +187096,489 @@ :10AA900000000000000000000000000000000000B6 :10AAA00000000000000000000000000000000000A6 :10AAB0000000000000000000000000000000000096 -:10AAC00000000000EFF0EFF00000000000000000C8 -:10AAD000000000006161616100000000BD81C3C32E -:10AAE000000000003C3C90F000000000FFFFBF8F22 -:10AAF0000000000000FF00000F0F0000C3F0FF0087 +:10AAC0000000000000000000000000000000000086 +:10AAD0000000000000000000000000000000000076 +:10AAE0000000000000000000000000003C3C0000EE +:10AAF000FFFF0000FFFF0000FFFF0000000000005C :10AB00000000000000000000000000000000000045 :10AB10000000000000000000000000000000000035 :10AB20000000000000000000000000000000000025 :10AB30000000000000000000000000000000000015 -:10AB4000000000000000EFF9EFF900000000000035 -:10AB5000000000000000F1F1F1F100000000BD81F3 -:10AB6000C3C3000000003C3C9FF000000000000058 -:10AB7000BF8F0000000000FF00000F0F0000C3F0B7 -:10AB8000FF000000000000000000000000000000C6 +:10AB40000000000000000000000000000000000005 +:10AB500000000000000000000000000000000000F5 +:10AB600000000000000000000000000000003C3C6D +:10AB700000000000000000000000000000000000D5 +:10AB800000000000000000000000000000000000C5 :10AB900000000000000000000000000000000000B5 :10ABA00000000000000000000000000000000000A5 :10ABB0000000000000000000000000000000000095 :10ABC0000000000000000000000000000000000085 -:10ABD0000000000000000000000030000000000045 -:10ABE00000613007C00D00000500343FC50C00A017 -:10ABF0000561343FC50D00A015002A3FC54C00A8D3 -:10AC00000000300000000000000000000000000014 +:10ABD0000000000000000000000000000000000075 +:10ABE0000000000000000000000000000000000065 +:10ABF00005002A06054C00A805002A00054000A80B +:10AC00000000000000000000000000000000000044 :10AC10000000000000000000000000000000000034 :10AC20000000000000000000000000000000000024 :10AC30000000000000000000000000000000000014 :10AC40000000000000000000000000000000000004 :10AC500000000000000000000000000000000000F4 -:10AC60000000000000000000000000000F0FF0F0E6 -:10AC7000000000000000000000000000FF00F0F0F5 +:10AC600000000000000000000000000000000000E4 +:10AC700000000000FF0000FF0000000000000000D6 :10AC800000000000000000000000000000000000C4 :10AC900000000000000000000000000000000000B4 :10ACA00000000000000000000000000000000000A4 :10ACB0000000000000000000000000000000000094 :10ACC0000000000000000000000000000000000084 :10ACD0000000000000000000000000000000000074 -:10ACE00000000000000000000000000000000F0F46 -:10ACF000F0F0000000000000000000000000FF0075 -:10AD0000F0F0000000000000000000000000000063 +:10ACE0000000000000000000000000000000000064 +:10ACF000000000000000FF0000FF00000000000056 +:10AD00000000000000000000000000000000000043 :10AD10000000000000000000000000000000000033 :10AD20000000000000000000000000000000000023 :10AD30000000000000000000000000000000000013 :10AD40000000000000000000000000000000000003 :10AD500000000000000000000000000000000000F3 :10AD600000000000000000000000000000000000E3 -:10AD7000FF003C3C0000000000000000000000005C -:10AD80000F0F3C3C0000000000000000000000002D +:10AD700000000000000000003C3C00FF000000005C +:10AD800000000000000000000000000000000000C3 :10AD900000000000000000000000000000000000B3 :10ADA00000000000000000000000000000000000A3 :10ADB0000000000000000000000000000000000093 :10ADC0000000000000000000000000000000000083 :10ADD0000000000000000000000000000000000073 :10ADE0000000000000000000000000000000000063 -:10ADF0000000FF003C3C00000000000000000000DC -:10AE000000000F0F3C3C00000000000000000000AC +:10ADF000000000000000000000003C3C00FF0000DC +:10AE00000000000000000000000000000000000042 :10AE10000000000000000000000000000000000032 :10AE20000000000000000000000000000000000022 :10AE30000000000000000000000000000000000012 :10AE40000000000000000000000000000000000002 -:10AE50000000000000000000400000000000200092 -:10AE600000000000000000002000000000000000C2 -:10AE700020000000000000008400004000000000EE -:10AE800000000000000000002000000000000000A2 -:10AE90002000000000000000000020000000000072 -:10AEA000000000000000000000008800000000001A -:10AEB0000000200000000000000020000000000052 -:10AEC000000000000000000000002004000000005E -:10AED0000000200000000000000000000000000052 -:10AEE0000000000000000000000000000000000062 -:10AEF0000900000000000000000000000001000048 -:10AF00000000000000000000000000000000000041 -:10AF10000000000000000000000000000000000031 -:10AF200000000000000000000000400000000000E1 -:10AF30000000000000000000000000000000000011 +:10AE50000000000000000000000000800000000072 +:10AE600000000000000000000000000000000000E2 +:10AE700000000000000000000000000000000000D2 +:10AE800000000000000000000000000000000004BE +:10AE900000040001000400000004000000000000A5 +:10AEA000000000040000000000000000000000009E +:10AEB000000400000000000000000000000000008E +:10AEC0000000000000000000000000000000000082 +:10AED00000000000000000400000000000080040EA +:10AEE0000000000000000000000000000000004022 +:10AEF0000000000000000000000000000040000012 +:10AF000000000000000000040000004000000000FD +:10AF1000000000000000000200000000000000022D +:10AF20000002000000020002000200000000000019 +:10AF3000000200000000000200020000000000000B :10AF40000000000000000000000000000000000001 -:10AF50000000000000000000A00000000000000051 -:10AF600000000008000002000000100011000200B4 -:10AF700000000000010002000021000002000000AB -:10AF80000000000400000221000000000104000095 -:10AF9000000000002080000000040000000000000D -:10AFA000000000001000020400000000000520085E -:10AFB0000000000010000000000800000000000079 -:10AFC0000000000000040004000000001000000069 -:10AFD0000000000000000000000800080008000059 -:10AFE0000008000800000008000000000008020837 -:10AFF0000084040800080200000800080008A000FF -:10B0000004080408040800080008000800080208F2 -:10B010000008000400080004000000080084008408 -:10B0200002840004000800080408000800820008E8 -:10B0300000040008000000080004000400080000EC -:10B040000008000800040082000800080004000452 -:10B0500000840008000400840000000000000000DC -:10B0600000000000020000000000000000080000D6 -:10B0700000000000000000000041002100000090DE -:10B08000000800A10080002000A0C141214100046F -:10B0900020030021008000000008000000000000E4 -:10B0A0000000000000080000000000000000000890 -:10B0B000000300210000000000000000000000006C -:10B0C0000008002100000000000000000000000057 -:10B0D0000000000800000000000000000000000068 -:10B0E0000000000000000000000000000000000060 -:10B0F0000000000003001100000003000000000039 -:10B100000020008200400040000100052090A000C7 -:10B1100000018000000000040000000000000000AA +:10AF500000000000000000000000000000000000F1 +:10AF600000000000000000000000000000000000E1 +:10AF700000000800080000000000000000000000C1 +:10AF800000000000000000000000000000000200BF +:10AF9000020000100010000000000000000000008F +:10AFA00000000000000000000000000000000000A1 +:10AFB000020002000000000000000000000000008D +:10AFC00000000000000082000000000000000000FF +:10AFD0000000000000000000000000000000000071 +:10AFE0000000000000000000000000000000000061 +:10AFF0000000000000000000000000000000000051 +:10B000000000000000000000000000000000000040 +:10B010000000000000000000000000000000000030 +:10B020000000000800000000000000000000000018 +:10B030000000000000000000000000000000000010 +:10B0400000000004000000000000000000000000FC +:10B0500000000000000000000000000000000000F0 +:10B0600000000000000000000100000000000000DF +:10B07000000000008400000000000000000000004C +:10B0800000000000000000000000000000000000C0 +:10B0900000000000000000000000000000000000B0 +:10B0A000000000000000000000000400000040005C +:10B0B0000000000000000000000000000000000090 +:10B0C0000000000000000000000000000000000080 +:10B0D0000000000000000000000000000000000070 +:10B0E0000000000000000000000004000000040058 +:10B0F0000000000000000000000000000000000050 +:10B10000000000C00020000000000000000000005F +:10B11000000000000000000000000000000000002F :10B12000000000000000000000000000000000001F -:10B130000000000008000000000000000000000007 -:10B1400000000000000000000000000800000000F7 -:10B150000000000800000000000000000000A00047 -:10B16000000000000000C0000000C0000821000036 -:10B1700000000000002100000000844100000100E8 -:10B1800000009000044000000004000900000000DE -:10B19000008000000000000000000000000000002F -:10B1A000000000000000100000000000000000008F -:10B1B000000000000000000000000040000000004F +:10B13000000000000000000000000000000000000F +:10B1400000000000000000000000000000000000FF +:10B1500000000000000000000000000000000000EF +:10B1600000000000000001000000018000800000DD +:10B1700000000000000000000000000000000000CF +:10B1800000000000000000000000000000000000BF +:10B1900000000000000000000000000000000000AF +:10B1A000000000000000000000000000000000009F +:10B1B000000000000000000000000000000000008F :10B1C000000000000000000000000000000000007F -:10B1D0000000000000080000000000000000000067 -:10B1E0000000000000000000000000000000080057 -:10B1F0000000000000000000000800C000880400FB -:10B20000040040000000000400002000000000A036 -:10B21000008400080000000000C000880000040056 -:10B220000000000000080000000000000000000016 +:10B1D000000000000000000000000000000000006F +:10B1E0000000000000000000020000002020000419 +:10B1F000000000000000000000000000000000004F +:10B20000000000000000000000000000000000003E +:10B21000000000000000000000000000000000002E +:10B22000000000000000000000000000000000001E :10B23000000000000000000000000000000000000E :10B2400000000000000000000000000000000000FE :10B2500000000000000000000000000000000000EE -:10B2600000000000C0000000080000000000000016 -:10B270000000000000000000000000000800844101 -:10B2800000080421A00090A10080010004048204B1 -:10B290000000018300080005000800800000000491 -:10B2A0000004000000000000000000080000000092 -:10B2B0000000000000000000000000000000000886 +:10B2600000000000000090009000000000000000BE +:10B2700010090000000000000000000000000000B5 +:10B2800000000000000000000000000000000000BE +:10B2900000000000000000000000000000000000AE +:10B2A000000000000000000000000000000000009E +:10B2B000000000000000000000000000000000008E :10B2C000000000000000000000000000000000007E :10B2D000000000000000000000000000000000006E -:10B2E00000000000000000C003000000000000009B -:10B2F0000000000003000000000000000000052026 -:10B300000000000080002100002000200484A10132 -:10B31000088300C020080091000000010004000024 -:10B32000000100010000000000000000000000001B +:10B2E000000000000000000000000000000000005E +:10B2F00000008000000000000000000000000000CE +:10B30000000000000000000000C0000000080084F1 +:10B31000008800840000000000000084000000009D +:10B32000000000000000000000000000000000001D :10B33000000000000000000000000000000000000D :10B3400000000000000000000000000000000000FD :10B3500000000000000000000000000000000000ED -:10B3600000000000000000000000000000000800D5 -:10B37000080000000000A000000000000000000025 -:10B380008404000000210021A08000008821010326 -:10B39000C1000300024000090000108010000003FB -:10B3A000010000200000000000000000000000007C +:10B3600000000000000000000000000000000000DD +:10B3700001000000000000000000000900000000C3 +:10B3800000000000000000000000000000000000BD +:10B3900000000000000000000002000000020000A9 +:10B3A000000000000002000000000000000000009B :10B3B000000000000000000000000000000000008D :10B3C000000000000000000000000000000000007D :10B3D000000000000000000000000000000000006D -:10B3E000000000000000000000000000000000005D -:10B3F0000000000000000000400800000002000003 -:10B400000084000000000000000000200002000096 -:10B41000200002008200A101000040C091088000CD -:10B4200000002000000000000000000000000000FC +:10B3E00000000000000000000082000000000000DB +:10B3F0000000200000000000000000000500000028 +:10B40000000000000000000000000000000000003C +:10B41000000000000000000000000000000000002C +:10B42000000000000000000000000000000000001C :10B43000000000000000000000000000000000000C :10B4400000000000000000000000000000000000FC :10B4500000000000000000000000000000000000EC :10B4600000000000000000000000000000000000DC -:10B4700000000000000000000000000282000082C6 -:10B48000000000080000000400A000C000020090BE -:10B490000010000000000000009000040004010102 -:10B4A00000C00000000001000000000100000000DA +:10B47000000001009000000000000000000000003B +:10B4800000000000000000000000000000000000BC +:10B4900000000000000000000000000000000000AC +:10B4A000000000000000000000000000000000009C :10B4B000000000000000000000000000000000008C :10B4C000000000000000000000000000000000007C :10B4D000000000000000000000000000000000006C :10B4E000000000000000000000000000000000005C -:10B4F000000000000000000000000000000000004C -:10B5000000800000008000000000000003800000B8 -:10B5100000000080030000004100008000000000E7 -:10B5200010110000000000001000000000000000EA +:10B4F000000000001100A10000000000000000009A +:10B50000000000000000000000000000000000003B +:10B51000000000000000000000000000000000002B +:10B52000000000000000000000000000000000001B :10B53000000000000000000000000000000000000B :10B5400000000000000000000000000000000000FB :10B5500000000000000000000000000000000000EB :10B5600000000000000000000000000000000000DB -:10B5700000000000000000000000000000000000CB -:10B580000085000000000000002000800000000096 -:10B5900000110080000000020000004000000211C5 -:10B5A000000500050000002000000005000000006C +:10B570000000000000000008098000030000000037 +:10B5800000000000000000000000000000000000BB +:10B5900000000000000000000000000000000000AB +:10B5A000000000000000000000000000000000009B :10B5B000000000000000000000000000000000008B :10B5C000000000000000000000000000000000007B :10B5D000000000000000000000000000000000006B :10B5E000000000000000000000000000000000005B -:10B5F000000000000000000000000000000000004B -:10B600000000000800900000000000850084000297 -:10B610000000008300400020000000C000010090F6 -:10B620000100008400400000000100000000000054 +:10B5F000000000000000000000010102000000083F +:10B60000000000000000000000000000000000003A +:10B61000000000000000000000000000000000002A +:10B62000000000000000000000000000000000001A :10B63000000000000000000000000000000000000A :10B6400000000000000000000000000000000000FA :10B6500000000000000000000000000000000000EA :10B6600000000000000000000000000000000000DA -:10B6700000000000000000000000000000000000CA -:10B68000000010000000000010000000000000009A -:10B690000800030000002000A0000000100002824B -:10B6A00000000000C001000040000000A0002000D9 +:10B6700000000000000000000000010088880800B1 +:10B6800000000000020000000000000000000000B8 +:10B6900000000000000000000000000000000000AA +:10B6A000000000000000000000000000000000009A :10B6B000000000000000000000000000000000008A :10B6C000000000000000000000000000000000007A :10B6D000000000000000000000000000000000006A :10B6E000000000000000000000000000000000005A -:10B6F000000000000000000000000000000000004A -:10B700000000000080000000000089000000000030 -:10B710000000800020000000000000000300800006 -:10B72000800005000000800200000500000000000D -:10B730000000050000000000000000000000000004 +:10B6F0000000000000000000000000004100008089 +:10B7000080004100000080000000000000000000F8 +:10B710000000000000000000000000000000000029 +:10B720000000000000000000000000000000000019 +:10B730000000000000000000000000000000000009 :10B7400000000000000000000000000000000000F9 :10B7500000000000000000000000000000000000E9 :10B7600000000000000000000000000000000000D9 -:10B7700000000000000000000000000000000000C9 -:10B780000000000000000000800000008000800039 -:10B790008000000080000009000580008000000299 -:10B7A0000005800000000000000080001100000083 +:10B7700000000000000000000000000000000011B8 +:10B780000000108000000000000000000000000029 +:10B7900000000000000000000000000000000000A9 +:10B7A0000000000000000000000000000000000099 :10B7B0000000000000000000000000000000000089 :10B7C0000000000000000000000000000000000079 :10B7D0000000000000000000000000000000000069 :10B7E0000000000000000000000000000000000059 :10B7F0000000000000000000000000000000000049 -:10B8000000000000000000000200820002001000A2 -:10B8100004001000040010000200020040000800B4 -:10B82000000100A090000000040004000800910046 +:10B8000000010000014000000000000000000000F6 +:10B810000000000000000000000000000000000028 +:10B820000000000000000000000000000000000018 :10B830000000000000000000000000000000000008 :10B8400000000000000000000000000000000000F8 :10B8500000000000000000000000000000000000E8 :10B8600000000000000000000000000000000000D8 :10B8700000000000000000000000000000000000C8 -:10B8800000000000000000000000000000000000B8 -:10B89000000000000000000000000006000006009C -:10B8A0000000818100600600000060000060000070 -:10B8B0005000840000600000000000000000000054 +:10B880000000000000E0070082000000000000004F +:10B8900000000000000000000000000000000000A8 +:10B8A0000000000000000000000000000000000098 +:10B8B0000000000000000000000000000000000088 :10B8C0000000000000000000000000000000000078 :10B8D0000000000000000000000000000000000068 :10B8E0000000000000000000000000000000000058 :10B8F0000000000000000000000000000000000048 -:10B900000000000000000000000000001414CF0C34 -:10B91000000000000FC500C5000000005500C30F67 -:10B9200000000000F0F0000000FF0000C355000F11 +:10B900000000000000000000F0F000000000000057 +:10B910000000000000000000000000000000000027 +:10B920000000000000000000000000000000000017 :10B930000000000000000000000000000000000007 :10B9400000000000000000000000000000000000F7 :10B9500000000000000000000000000000000000E7 :10B9600000000000000000000000000000000000D7 :10B9700000000000000000000000000000000000C7 -:10B980000000000000000000000000000000D7D709 -:10B99000CF0C00000000FFC5F0C50000000055FFFF -:10B9A000C30F00000000F0F0000000FF0000C355CE -:10B9B000FF0F000000000000000000000000000079 +:10B9800000000000000000000000F0F000000000D7 +:10B9900000000000000000000000000000000000A7 +:10B9A0000000000000000000000000000000000097 +:10B9B0000000000000000000000000000000000087 :10B9C0000000000000000000000000000000000077 :10B9D0000000000000000000000000000000000067 :10B9E0000000000000000000000000000000000057 :10B9F0000000000000000000000000000000000047 -:10BA00000000000000000000000000000000000036 -:10BA1000AAAA505000000000F0F0A3A3000000000C -:10BA2000FFFF0F0F0000000000003C3C00005555D8 -:10BA300000FFAAC30000000000000000000000009A +:10BA00000000000000000000000000000000FFFF38 +:10BA10000000000000000000000000000000000026 +:10BA20000000000000000000000000000000000016 +:10BA30000000000000000000000000000000000006 :10BA400000000000000000000000000000000000F6 :10BA500000000000000000000000000000000000E6 :10BA600000000000000000000000000000000000D6 :10BA700000000000000000000000000000000000C6 :10BA800000000000000000000000000000000000B6 -:10BA90000000AAAAFAFA00000000F0F0A3A3000038 -:10BAA0000000AAC30F0F0000000000003C3C000093 -:10BAB000555500FFAAC30000000000000000000070 +:10BA900000000000000000000000000000000000A6 +:10BAA0000000000000000000000000000000000096 +:10BAB0000000000000000000000000000000000086 :10BAC0000000000000000000000000000000000076 :10BAD0000000000000000000000000000000000066 :10BAE0000000000000000000000000000000000056 :10BAF0000000000000000000000000000000000046 -:10BB00000000000000000000000000000000000035 -:10BB100000000000000030000000000000003000C5 -:10BB20000000000005003438050000A015612A3F20 -:10BB3000C54D00A800003007C00C000000610007E0 -:10BB4000C00D000000000000000000000000000028 +:10BB000000000000000000000000000005400A06E0 +:10BB1000054C00A80000000000000000000000002C +:10BB20000000000000000000000000000000000015 +:10BB30000000000000000000000000000000000005 +:10BB400000000000000000000000000000000000F5 :10BB500000000000000000000000000000000000E5 :10BB600000000000000000000000000000000000D5 :10BB700000000000000000000000000000000000C5 :10BB800000000000000000000000000000000000B5 -:10BB900000000000000000000000000000000000A5 +:10BB90000F0FFFFF00000000000000000000000089 :10BBA0000000000000000000000000000000000095 -:10BBB00000000000000000003C3CF0F0000000002D +:10BBB0000000000000000000000000000000000085 :10BBC0000000000000000000000000000000000075 :10BBD0000000000000000000000000000000000065 :10BBE0000000000000000000000000000000000055 :10BBF0000000000000000000000000000000000045 :10BC00000000000000000000000000000000000034 -:10BC10000000000000000000000000000000000024 +:10BC100000000F0F00000000000000000000000006 :10BC20000000000000000000000000000000000014 -:10BC3000000000000000000000003C3CF0F00000AC +:10BC30000000000000000000000000000000000004 :10BC400000000000000000000000000000000000F4 :10BC500000000000000000000000000000000000E4 :10BC600000000000000000000000000000000000D4 :10BC700000000000000000000000000000000000C4 :10BC800000000000000000000000000000000000B4 -:10BC900000000000000000000000000000000000A4 +:10BC9000000000000000F0F00000000000000000C4 :10BCA0000000000000000000000000000000000094 -:10BCB0000000000000000000000000000F0F3C3CEE +:10BCB0000000000000000000000000000000000084 :10BCC0000000000000000000000000000000000074 :10BCD0000000000000000000000000000000000064 :10BCE0000000000000000000000000000000000054 :10BCF0000000000000000000000000000000000044 :10BD00000000000000000000000000000000000033 -:10BD10000000000000000000000000000000000023 +:10BD10000000000000000000F0F000000000000043 :10BD20000000000000000000000000000000000013 -:10BD300000000000000000000000000000000F0FE5 -:10BD40003C3C00000000000000000000000000007B +:10BD30000000000000000000000000000000000003 +:10BD400000000000000000000000000000000000F3 :10BD500000000000000000000000000000000000E3 :10BD600000000000000000000000000000000000D3 :10BD700000000000000000000000000000000000C3 :10BD800000000000000000000000000000000000B3 -:10BD90000000000000000000000000000000200083 -:10BDA00008004000200400100000200000000000F7 -:10BDB00000000000840000000000000800042000D3 -:10BDC00000000010000000000000200088000002B9 -:10BDD0000000000000002000000000000000000043 -:10BDE00020000000000000000000000020102002E1 -:10BDF00000800000000000000000000000020000C1 -:10BE000020050000000000000000000020002000CD -:10BE100000000000000000000000000040000000E2 -:10BE20000000800000000000000000000000000092 -:10BE300000004000000000000000000000000000C2 +:10BD90000000000000000080008000000040000063 +:10BDA0000000000000000000000000000000000093 +:10BDB0000000000000000000000000000000000083 +:10BDC0000000000000000000000000000000000172 +:10BDD0000000000000000000000000000000000063 +:10BDE000000000000000000400000000000000004F +:10BDF0000000000000000000000000000000000043 +:10BE00000000000000000000000000000000000032 +:10BE100000000000000000000040004000000001A1 +:10BE20000000000000000000000000000000000012 +:10BE30000000000000000000000000000000000200 :10BE400000000000000000000000000000000000F2 -:10BE500000000000000000000000000000000000E2 -:10BE600000000000000000000000000000000000D2 -:10BE70000000002000000000000000000000400062 -:10BE80000000000000C000000000000000000000F2 -:10BE9000000000000403000500001011000810104D -:10BEA000000400000004A0100204020800000008C2 -:10BEB0000000000400000000014002080200000031 -:10BEC0000805020000040008004000000004001003 -:10BED00004050000000000080000840000040000C9 -:10BEE000A00400032000000000040004000000047F -:10BEF00000050440020000080000040002050005DF -:10BF0000C008000400000000000400040004000851 -:10BF100000002005000000000008000400000000F0 -:10BF2000000000000400000800080508008400006C -:10BF300004840008000000000084028800880008D3 -:10BF40000004400800080008000404850008000000 -:10BF50000004000400000008004000080408000875 -:10BF60000008000800080008008400080008000815 -:10BF70000000000400084108000400080004000458 -:10BF8000000800040082000800840084008200820F -:10BF9000008400828004000000020000000800000D -:10BFA00000000000000000410100004000000010FF -:10BFB0000000821000000021000000080000004086 -:10BFC00000410021000000410000002100080000A5 -:10BFD000000000080008000000000000000500212B -:10BFE000000000000000002100000000000000210F -:10BFF000000000000008002100000003000000080D -:10C000000000000000210008000000000000000007 -:10C0100000080040000800000000000000000000D0 -:10C0200000000000000000000000080010000000F8 -:10C0300000000000210003000000000000000000DC -:10C0400000000000000000000000000008000000E8 +:10BE5000000000020000000000004002000000029C +:10BE600000000002000000020000008200820000CA +:10BE7000000040000002000000000002000200007C +:10BE800000000000000000000000000000000000B2 +:10BE90000000000000000000000000000000004062 +:10BEA0000000000000000000000000000000000092 +:10BEB0000000000000000000000000000000000082 +:10BEC000000000000000080000000000000000006A +:10BED0000000000000000000000000000000000062 +:10BEE0000000000000000000000000000000000052 +:10BEF0000000000000000000000000000000000042 +:10BF00000000000000000000000000000000000031 +:10BF10000000000000000000000000000000000021 +:10BF20000001000000000000000000000000000010 +:10BF300000000000000000000000000004000000FD +:10BF400000000000000000000000000000000000F1 +:10BF500000000000000000000000000000000000E1 +:10BF600000000000000000000000000000000000D1 +:10BF700000000000000000000000000000000000C1 +:10BF800000000000000000000000000000000000B1 +:10BF900000000000000000000000000000000000A1 +:10BFA000000001000000000000000000000002008E +:10BFB000000000000000C0000000000000000000C1 +:10BFC0000000000000000000000000000000000071 +:10BFD0000000000000000000000000000000000061 +:10BFE0000000000000000000000000000000000051 +:10BFF000000004000000000000000000000000003D +:10C000000000000000000000000000000000000030 +:10C010000000000000000000000000000000000020 +:10C0200000000000200000000000200000000000D0 +:10C030008000000000000000000000000000000080 +:10C0400000000000000000000000000000000000F0 :10C0500000000000000000000000000000000000E0 :10C0600000000000000000000000000000000000D0 -:10C0700000000000000800000000000000000000B8 -:10C0800000000000000000000000000000000008A8 -:10C09000000000000000000000000021000000007F -:10C0A0008200000500050821A008004008000841A2 -:10C0B00000040020001100100041004000080000B2 -:10C0C000000000000000004010400041000000009F -:10C0D000000500000000000000000000000000005B -:10C0E0000000000000200000000400040000000028 +:10C0700000000000000000000000000000000000C0 +:10C0800000000000000000000000000000000000B0 +:10C0900000000000000000000000000000000000A0 +:10C0A000000000000000000001800000000000000F +:10C0B000000000000000000001000000000000007F +:10C0C0000000000000000000000000000000000070 +:10C0D0000000000000000000000000000000000060 +:10C0E0000000000000000000000000000000000050 :10C0F0000000000000000000000000000000000040 -:10C1000000000000000000000000A000000000008F +:10C10000000000000000000000000000000000002F :10C11000000000000000000000000000000000001F -:10C1200000000000000000000000000000A041002E -:10C130000004000000000482000004000010000061 -:10C14000000000A000000000000000830088000044 -:10C1500000900084000000000000000000000000CB -:10C160000000000002000000008400080000000041 +:10C120000000000000000000000004040000000007 +:10C1300000000000000000000000040000000000FB +:10C1400000000000000000000000000000000000EF +:10C1500000000000000000000000000000000000DF +:10C1600000000000000000000000000000000000CF :10C1700000000000000000000000000000000000BF :10C1800000000000000000000000000000000000AF -:10C190000000000000000000000000000008000097 -:10C1A00000000000080000000000C00008000000BF -:10C1B0000000000000000040000000100000000827 -:10C1C0000000000000080000000000000000004126 -:10C1D0000800000300000000004100000000000013 +:10C19000000000000000000000000000000090000F +:10C1A000000000009000008000000000000000007F +:10C1B000000000000000000004000020000000005B +:10C1C000000000000000000000000000000000006F +:10C1D000000000000000000000000000000000005F :10C1E000000000000000000000000000000000004F :10C1F000000000000000000000000000000000003F -:10C200000000000000000000000800000000000026 -:10C21000000000008400000000000000000000009A -:10C22000000000000000000000000000000000000E -:10C230000000080000000000000000A00000000056 -:10C2400000000300001000000000000021000000BA -:10C250002100080000000000000021000000210073 +:10C20000000000000000000000000000000000002E +:10C21000000000000000000000000000000000001E +:10C220000084000000C000C000080000048400007A +:10C2300000000000000000000000000000010000FD +:10C240000000000000000000000000000000008866 +:10C2500000000000000000000000000000000000DE :10C2600000000000000000000000000000000000CE :10C2700000000000000000000000000000000000BE :10C2800000000000000000000000000000000000AE :10C29000000000000000000000000000000000009E -:10C2A0000000000000000000080000000000000086 -:10C2B0000000000800110800000300030000000057 -:10C2C00000008400000088000000900400000005C9 -:10C2D0008400004108000011081100040000000063 -:10C2E000001000000000000000000000000000003E -:10C2F0000021000000000008000000000000000015 -:10C300000000000000000000000008000000000025 +:10C2A00000000000880000000000000901000000FC +:10C2B0000000000200090002000000000000000071 +:10C2C000000000000000000000000000000000006E +:10C2D000000000000000000000000000000000005E +:10C2E000000000000000000000000000000000004E +:10C2F000000000000000000000000000000000003E +:10C30000000000000000000000000000000000002D :10C31000000000000000000000000000000000001D -:10C3200000000000000000000000000000A0000469 -:10C3300000000084008400000200001000040000DF -:10C3400000000010000020000000000000840082B7 -:10C350000088000000000000000000000001000054 +:10C3200000000000000000000000000000002000ED +:10C3300000000000000000000000050000000000F8 +:10C3400000000000000000000000000000000000ED +:10C3500000000000000000000000000000000000DD :10C3600000000000000000000000000000000000CD -:10C370000000200000000000000000000400200079 -:10C3800002000000000000000000000000000000AB +:10C3700000000000000000000000000000000000BD +:10C3800000000000000000000000000000000000AD :10C39000000000000000000000000000000000009D -:10C3A000000000000000000000000000000000008D -:10C3B00000000000000000A0008800040040000011 -:10C3C00000000000000000080000000800C0000895 -:10C3D0000000000800A00008000000C000200000CD -:10C3E000000000000000000300000000000000004A +:10C3A000000000000000000000000000000001008C +:10C3B000909000000000000000000000000000005D +:10C3C000909000000000000000000000000000004D +:10C3D000000000000000000000000000000000005D +:10C3E000000000000000000000000000000000004D :10C3F000000000000000000000000000000000003D :10C40000000000000000000000000000000000002C :10C41000000000000000000000000000000000001C :10C42000000000000000000000000000000000000C -:10C43000000000000000000000800000000000007C -:10C4400000000000000000000080000000800000EC -:10C450000580000000800000008000000000000057 -:10C460000300000041000000000000000000000088 +:10C43000110021800000000000000000000000004A +:10C44000110080000000000000000000000000005B +:10C4500000000000000000000000000000000000DC +:10C4600000000000000000000000000000000000CC :10C4700000000000000000000000000000000000BC -:10C48000000000000000000000002000000000008C +:10C4800000000000000000000000000000000000AC :10C49000000000000000000000000000000000009C :10C4A000000000000000000000000000000000008C -:10C4B000000000000000000000000000004100112A -:10C4C00000000000000000000000000000410084A7 -:10C4D000000000000020008000000000002000801C -:10C4E000000000200000000000000000000000002C +:10C4B0000000000809800003008000000000000068 +:10C4C000000000000080000000800000000000006C +:10C4D000000000000000000000000000000000005C +:10C4E000000000000000000000000000000000004C :10C4F000000000000000000000000000000000003C :10C50000000000000000000000000000000000002B :10C51000000000000000000000000000000000001B :10C52000000000000000000000000000000000000B -:10C5300000000000000000000000000000000000FB -:10C540000004000000000000000000000000008463 -:10C55000000900000000008300400000000000838C -:10C5600000840084000100000000000000000000C2 +:10C5300000000000000101040000000200000000F3 +:10C540000000000000000020000000C0000000000B +:10C5500000000000000000000000000000000000DB +:10C5600000000000000000000000000000000000CB :10C5700000000000000000000000000000000000BB :10C5800000000000000000000000000000000000AB :10C59000000000000000000000000000000000009B :10C5A000000000000000000000000000000000008B -:10C5B00000000000000000000000000000008800F3 -:10C5C00000000000C00000000000000000000200A9 -:10C5D0000000000000002000000000000000040037 +:10C5B00000000000000000000800C0900100000022 +:10C5C0000000000000000100008888000100000059 +:10C5D000000000000000000000000000000000005B :10C5E000000000000000000000000000000000004B :10C5F000000000000000000000000000000000003B :10C60000000000000000000000000000000000002A :10C61000000000000000000000000000000000001A :10C62000000000000000000000000000000000000A -:10C6300000000000000000000000000000000000FA -:10C6400000000000000000000000000000000000EA +:10C630000000000000000000090080008080100061 +:10C640000000000000000000410000800000090020 :10C6500000000000000000000000000000000000DA :10C6600000000000000000000000000000000000CA :10C6700000000000000000000000000000000000BA :10C6800000000000000000000000000000000000AA -:10C69000000010000000000000000000000000008A +:10C69000000000000000000000000000000000009A :10C6A000000000000000000000000000000000008A -:10C6B000400000000000000000000000000000003A -:10C6C000000080008000000000000000000000006A -:10C6D000000000000000000000000000800080005A -:10C6E0008000000000000000800000080000000042 +:10C6B00000000000000000000000001180000000E9 +:10C6C00000000000000000000000001100000080D9 +:10C6D000000000000000000000000000000000005A +:10C6E000000000000000000000000000000000004A :10C6F000000000000000000000000000000000003A :10C700000000000000000000000000000000000029 :10C710000000000000000000000000000000000019 :10C720000000000000000000000000000000000009 -:10C7300000000000000000000000000000000000F9 -:10C740000000000002000200A000820000000000C3 -:10C7500000000000020040009000880082001000ED -:10C760000800080004000400C000040000000000ED +:10C7300000000000000000000000000000012000D8 +:10C740000088000000000000000000000001000060 +:10C750000040000000000000000000000000000099 +:10C7600000000000000000000000000000000000C9 :10C7700000000000000000000000000000000000B9 :10C7800000000000000000000000000000000000A9 :10C790000000000000000000000000000000000099 :10C7A0000000000000000000000000000000000089 :10C7B0000000000000000000000000000000000079 -:10C7C0000000000000000000000000000000000069 -:10C7D0000000000000000000000000000000000059 -:10C7E00000000000000000000000000000008100C8 -:10C7F00000600000000000000000000000000000D9 +:10C7C00000E0070000110000000000000000000071 +:10C7D00000000700822100000000000000000000AF +:10C7E0000000000000000000000000000000000049 +:10C7F0000000000000000000000000000000000039 :10C800000000000000000000000000000000000028 -:10C8100000000000000000000041000006000000D1 +:10C810000000000000000000000000000000000018 :10C820000000000000000000000000000000000008 -:10C83000600000E0000000000000000000000000B8 -:10C840000000000000000000A00000A000000000A8 -:10C8500000000000000000004242096F00000000DC -:10C86000C009C0F90000000000F093930000000030 +:10C8300000000000000000000000000000000000F8 +:10C840000000FF000000FF000000000000000000EA +:10C85000000000000000F0F00000000000000000F8 +:10C8600000000000000000000000000000000000C8 :10C8700000000000000000000000000000000000B8 :10C8800000000000000000000000000000000000A8 :10C890000000000000000000000000000000000098 :10C8A0000000000000000000000000000000000088 :10C8B0000000000000000000000000000000000078 -:10C8C000000000000000000000000500000500005E -:10C8D00000000000000000000000DBDB096F00002A -:10C8E0000000CF09CFF9000000000FFF9393000074 +:10C8C00000000000FF000000FF000000000000006A +:10C8D0000000000000000000F0F000000000000078 +:10C8E0000000000000000000000000000000000048 :10C8F0000000000000000000000000000000000038 :10C900000000000000000000000000000000000027 :10C910000000000000000000000000000000000017 @@ -187592,32 +187592,32 @@ :10C990000000000000000000000000000000000097 :10C9A0000000000000000000000000000000000087 :10C9B0000000000000000000000000000000000077 -:10C9C0000000000000000000000000000000FFFF69 -:10C9D000DFFB000000000000000000000000FFFF7F -:10C9E000FFFF00000000C0C0FFFF00000000F0F0EB -:10C9F000F0F0000000000000000000000000000057 +:10C9C00000000000000000FF0000FFFF000000006A +:10C9D00000000000000000FF0000FFFF000000005A +:10C9E0000000000000000000000000000000000047 +:10C9F0000000000000000000000000000000000037 :10CA00000000000000000000000000000000000026 :10CA10000000000000000000000000000000000016 :10CA20000000000000000000000000000000000006 :10CA300000000000000000000000000000000000F6 -:10CA400000000000000000000000000000000000E6 -:10CA5000FFFFEFF7000000000000000000000000F2 -:10CA6000F3F3030300000000CFCFFFFF000000003E -:10CA7000F3F30303000000000000000000000000CA +:10CA4000000000000000000000FF000000000000E7 +:10CA5000000000000000000000FF000000000000D7 +:10CA600000000000000000000000000000000000C6 +:10CA700000000000000000000000000000000000B6 :10CA800000000000000000000000000000000000A6 :10CA90000000000000000000000000000000000096 :10CAA0000000000000000000000000000000000086 :10CAB0000000000000000000000000000000000076 -:10CAC0000000000000000000000000000000000066 -:10CAD0000000000000000000000000000000000056 -:10CAE00000000000300000000000000030000000E6 -:10CAF0000000000030000000000000610007C00DD1 +:10CAC0000000000000000000000015602A06054C70 +:10CAD00000A8000000000000000005002A0005403A +:10CAE00000A800000000000000000000000000009E +:10CAF0000000000000000000000000000000000036 :10CB00000000000000000000000000000000000025 :10CB10000000000000000000000000000000000015 -:10CB200000000000050000200000000000000000E0 -:10CB3000000000000000000000000000006100068E -:10CB4000800D000000000000000000000000000058 -:10CB500000000000000000000000000000000000D5 +:10CB20000000000000000000000000000000000005 +:10CB300000000000000000000000000000000000F5 +:10CB400000000000000000000000000000000000E5 +:10CB5000FFFF0000000000000000000000000000D7 :10CB600000000000000000000000000000000000C5 :10CB700000000000000000000000000000000000B5 :10CB800000000000000000000000000000000000A5 @@ -187633,7 +187633,7 @@ :10CC20000000000000000000000000000000000004 :10CC300000000000000000000000000000000000F4 :10CC400000000000000000000000000000000000E4 -:10CC500000000000000000000000000000000000D4 +:10CC500000000000F0F000000000000000000000F4 :10CC600000000000000000000000000000000000C4 :10CC700000000000000000000000000000000000B4 :10CC800000000000000000000000000000000000A4 @@ -187641,442 +187641,442 @@ :10CCA0000000000000000000000000000000000084 :10CCB0000000000000000000000000000000000074 :10CCC0000000000000000000000000000000000064 -:10CCD0000000000000000000000000000000000054 +:10CCD000000000000000F0F0000000000000000074 :10CCE0000000000000000000000000000000000044 :10CCF0000000000000000000000000000000000034 :10CD00000000000000000000000000000000000023 :10CD10000000000000000000000000000000000013 :10CD20000000000000000000000000000000000003 :10CD300000000000000000000000000000000000F3 -:10CD400000000000000000000000000004002000BF -:10CD50002000000000000000000002002000000091 -:10CD6000200000000004000088008800000020006F -:10CD70002000020000000000000020002000000051 -:10CD8000200000004000040020040000000100001A -:10CD900000000000001000000008000088002010C3 -:10CDA0000000000000000004000000000008000077 -:10CDB0000000000000050000000000000002200844 -:10CDC0000000000000000000000200080002000057 -:10CDD00000000000000000000002000080000000D1 -:10CDE0000000000000000000000000000000000043 -:10CDF0000000000000000000000000000000000033 -:10CE0000000000000400000000000000000000001E -:10CE100000000000400000000000000000000000D2 -:10CE20000000000000000000000000000000000002 -:10CE300000C0000000000000000000000000000032 -:10CE400000000000000000000000000000020000E0 -:10CE5000100000000005000802000011020000049C -:10CE6000000000000004000500080008000800049D -:10CE70000004A008000404000008040500000509DF -:10CE80000010000400040200000000000008000878 -:10CE900000000004000490080004000400030000E7 -:10CEA00002080005000488080004000000052010A6 -:10CEB0000404000200040000040400050004000053 -:10CEC0002000000000050000900400080005000993 -:10CED0000005008200080008008200822000008215 -:10CEE0000008000800080084000800840000028494 -:10CEF000008400840084000800080000000000088E -:10CF0000020400080008000800080004000404846B -:10CF10000004000000020088200404080008000447 -:10CF20000082200400080008200400820008000895 -:10CF30000084008400840084009082820004000841 -:10CF40000004000800040008000400880004000435 -:10CF50000004008200000002000000000000000049 -:10CF60000008004000000000000800000040000031 -:10CF70000010000800000000002100210021000036 -:10CF800000210021002100050021002100210008CE -:10CF90000005001000000008000800210021002109 -:10CFA00000210008000000000021002100080021ED -:10CFB0000040000000000008000801080008000808 -:10CFC0000021000900400021004000000002002173 -:10CFD0000008000000400084000000000000000085 -:10CFE0000020000000000000000000000000080019 -:10CFF0000000000000000800000000000300000026 -:10D00000000000000300000000000000000000001D +:10CD400000000000000000000000000000000000E3 +:10CD50000000000000000000000000000080000053 +:10CD600000000000000000000000000000000000C3 +:10CD700000000000000000000000000000000000B3 +:10CD800000000000000000000000000000010000A2 +:10CD90000004000000000000000000040004000483 +:10CDA000000000040000000000000000000400007B +:10CDB0000000000000000000000000020000000071 +:10CDC000000000000000000200000000000000025F +:10CDD0000002000000000000000010000000004001 +:10CDE0000000000000000000100000000000000033 +:10CDF000000000000000100000000004000000001F +:10CE0000000000040000000000000000000000001E +:10CE1000000000000002000000020000000200020A +:10CE200000000000000000000000000200020000FE +:10CE300000020040000000000000000200000000AE +:10CE400000000002000000000000000200000000DE +:10CE500000000000000000000000000000000000D2 +:10CE600000000000000000000000000000000000C2 +:10CE7000000000000000000000000000080000109A +:10CE800000000000000000000000000000000000A2 +:10CE90000000000000000000000000000000000092 +:10CEA0000000000000000000000000000000000082 +:10CEB0000000000000000000000000000000000072 +:10CEC0000200000000000000000000000000000060 +:10CED0000000000000000000000000000000000052 +:10CEE0000000000000000000000000000000000042 +:10CEF0000000000000000000000000000000000032 +:10CF00000000000000000000000000000000000021 +:10CF10000000000000000000000000000000000011 +:10CF20000000000000000000000000000000000001 +:10CF300000000000000000000000000000000000F1 +:10CF400000000000000000000000000000000000E1 +:10CF500000000000000000000000000000080000C9 +:10CF600000008900000000000000000000800000B8 +:10CF700000000000000000000000000000000000B1 +:10CF800000000000000000000000000000000000A1 +:10CF90000000000000000000000000000000000091 +:10CFA000000000000000000004000000000000007D +:10CFB0000000000000000000000000000000000071 +:10CFC0000000000000000000000000000000000061 +:10CFD0000000000000000000000000000000000150 +:10CFE00000000000200000000000000000000040E1 +:10CFF0000000000000000000000000000000000031 +:10D000000000000000000000000000000000000020 :10D010000000000000000000000000000000000010 -:10D02000000000000000000000000000000000A060 -:10D0300008000000000000000000000004000000E4 -:10D0400000020000040000000000000000000008D2 -:10D0500000000000000000080000000000000000C8 -:10D0600000200000C00020000000001100000800A7 -:10D070000005400000000800000900020000000454 -:10D08000000000040011000000000000000000008B -:10D090000000000000000800000000000000100078 +:10D020000000000000000000000000000000000000 +:10D0300000000000000000000004002000000000CC +:10D0400000000000000000000000000000000000E0 +:10D0500000000000000000000000000000000000D0 +:10D0600000000000018001800000000000000100BD +:10D0700000000000000001000000000000000000AF +:10D08000000000000100008000000000000000001F +:10D090000000000000000000000000000000000090 :10D0A0000000000000000000000000000000000080 -:10D0B0000000000000040000000900000000000063 +:10D0B0000000000000000000000000000000000070 :10D0C0000000000000000000000000000000000060 :10D0D0000000000000000000000000000000000050 -:10D0E00000000000098200A08000098400C0000048 -:10D0F000000000C0009000A000840088000000A094 -:10D1000000100040000800000008000000A000001F -:10D11000000004080000000000000000000008A05B -:10D120000000080000001100000000000082000064 -:10D1300000880282008820040008008800000000A7 -:10D140000000000000000000000000A0000000003F -:10D150000008000000000000000000000000820045 -:10D160000000080000000000000000000040001067 -:10D17000000000000000000000000041000000006E -:10D18000000000000000000000000000000000009F +:10D0E00000000000000020200220000000000000DE +:10D0F0000400000000000000040000000000000028 +:10D1000000000000000020000004000000000000FB +:10D11000000000000000000000000000000000000F +:10D1200000000000000000000000000000000000FF +:10D1300000000000000000000000000000000000EF +:10D1400000000000000000000000000000000000DF +:10D1500000000000000000000000000020000000AF +:10D16000900000000100000000001000000000001E +:10D17000002000000000000000200000000000006F +:10D18000000090000080000000000000000000008F :10D19000000000000000000000000000000000008F :10D1A000000000000000000000000000000000007F -:10D1B000000000000000000000000040001000001F -:10D1C00084000000040000000002000000200000B5 -:10D1D000000000000000000000000000000000004F -:10D1E000000000000000000000000000000000003F -:10D1F0000088000400000000000000000000001093 -:10D2000000002100000000000000000000000000FD +:10D1B000000000000000000000000000000000006F +:10D1C000000000000000000000000000000000005F +:10D1D00000000000000000000000000000000084CB +:10D1E0000000000000C00200000040008084000039 +:10D1F00000000001000004000000000100840000A5 +:10D200000000000000000008000000000000000016 :10D21000000000000000000000000000000000000E :10D2200000000000000000000000000000000000FE :10D2300000000000000000000000000000000000EE -:10D24000000000000000800000000000000000015D +:10D2400000000000000000000000000000000000DE :10D2500000000000000000000000000000000000CE -:10D26000000000000000000000210000000000009D -:10D270000000000900000000000500000800000098 -:10D280000008000000004041000000000000000015 -:10D29000000000000000000000000021000000006D -:10D2A000000000000000001000000000000000006E +:10D2600000000000000000000009010000000000B4 +:10D2700000000000000900020000000000000000A3 +:10D28000000000000000000200000000000000009C +:10D29000000000000000000000000000000000008E +:10D2A000000000000000000000000000000000007E :10D2B000000000000000000000000000000000006E -:10D2C0000000000000000000000000000000000856 +:10D2C000000000000000000000000000000000005E :10D2D000000000000000000000000000000000004E -:10D2E0000000000000000000000009C0090000006C -:10D2F000200000820910000020000900000020002A -:10D30000004000000000000000000000004002009B -:10D31000000000000000000000000000000000000D -:10D3200000000000000000000000020000000000FB -:10D3300000000002000000000000002000000804BF +:10D2E000000000000000000000000000200000001E +:10D2F000000000000000000000000000000000002E +:10D300000000000000000000050000000000000018 +:10D310000500000000000000000000000000000008 +:10D3200000000000000000000000000000000000FD +:10D3300000000000000000000000000000000000ED :10D3400000000000000000000000000000000000DD -:10D3500000000000000000002000000000000000AD -:10D36000000000000000000000000000028840C033 -:10D370000004821000000000000000000000000017 -:10D38000000000000000000000000000000000C0DD -:10D39000000400C0000000000000000000000000C9 -:10D3A000000000000002000000000000000000007B +:10D3500000000000000000000000000000000000CD +:10D36000000000000000000000000000010090002C +:10D370000000000800009000000000100000900075 +:10D38000000000000000000000000000010000009C +:10D39000000000000000000000000000000000008D +:10D3A000000000000000000000000000000000007D :10D3B000000000000000000000000000000000006D -:10D3C00000000000000000000000000090000000CD +:10D3C000000000000000000000000000000000005D :10D3D000000000000000000000000000000000004D -:10D3E000000000000000000000000000000080803D -:10D3F000000000008080000000000000000000002D -:10D40000000000000000000000000000000000001C -:10D41000000000000000000000000000000000000C +:10D3E000000000000000000000000000000011002C +:10D3F000A1000000000011008000000000001100EA +:10D40000800000000000000000000000000011008B +:10D4100021000000000000000000000000000000EB :10D4200000000000000000000000000000000000FC :10D4300000000000000000000000000000000000EC -:10D44000000000000000000000000000000080005C -:10D4500003000000000000000000000000000000C9 +:10D4400000000000000000000000000000000000DC +:10D4500000000000000000000000000000000000CC :10D4600000000000000000000000000000000000BC -:10D47000000000410040000000000000000000002B -:10D48000000000000000000000000000000000009C -:10D490000000000400000000000000000000000088 +:10D470000008098000090000000000800000008012 +:10D48000000000800000000000000000000000001C +:10D4900000410900000300800000000000000000BF :10D4A000000000000000000000000000000000007C :10D4B000000000000000000000000000000000006C -:10D4C000000000000000000000000000800080005C -:10D4D000800000000000000080000000000000004C +:10D4C000000000000000000000000000000000005C +:10D4D000000000000000000000000000000000004C :10D4E000000000000000000000000000000000003C -:10D4F0000000000004C00011040000000000000053 -:10D50000000000000000000000000000000000001B -:10D510000000000000840084000000000000000003 +:10D4F0000000000101020000008800000020000080 +:10D5000000C0000000200000000800000000000033 +:10D510000000000101000000008800000000000081 :10D5200000000000000000000000000000000000FB :10D5300000000000000000000000000000000000EB -:10D5400000000000000000000000000000001000CB -:10D550000800900000000000100090000000000093 +:10D5400000000000000000000000000000000000DB +:10D5500000000000000000000000000000000000CB :10D5600000000000000000000000000000000000BB -:10D57000000000000404888800C082000000000051 -:10D58000000000000000000000000000000000009B -:10D590000000000000000000000004000000000087 +:10D57000000000000100888802000000010002880D +:10D580008800010001000088880000000000000001 +:10D590000000000000008800000001000000000002 :10D5A000000000000000000000000000000000007B :10D5B000000000000000000000000000000000006B -:10D5C000000000000000000000000000000000104B -:10D5D0000000000800000000000000000000000043 +:10D5C000000000000000000000000000000000005B +:10D5D000000000000000000000000000000000004B :10D5E000000000000000000000000000000000003B -:10D5F000000000000000000080000000C0000000EB -:10D60000000000000000000000000000000000001A -:10D61000000000000000000000000000800000008A +:10D5F0000000000000004100008080004100410068 +:10D600008080000009004100008000000000000050 +:10D6100000000000000000000000000041000000C9 :10D6200000000000000000000000000000000000FA :10D6300000000000000000000000000000000000EA :10D6400000000000000000000000000000000000DA -:10D6500000800000008000000000000000000000CA +:10D6500000000000000000000000000000000000CA :10D6600000000000000000000000000000000000BA -:10D670000000000000000000800280880000000020 -:10D68000000000000000000000000000000000009A -:10D69000000000000000000000000000000000008A +:10D670000000000000000000001100000080080011 +:10D680000011000000800000001100000080000078 +:10D690000000000000000000000010110000000069 :10D6A000000000000000000000000000000000007A :10D6B000000000000000000000000000000000006A :10D6C000000000000000000000000000000000005A -:10D6D000000000200000008000000000008000002A +:10D6D000000000000000000000000000000000004A :10D6E000000000000000000000000000000000003A -:10D6F0000000000000000000000020000810C00230 -:10D700000200000000000000000000000000000017 -:10D71000000000000000000000004000C000040005 -:10D720009000000000000000000000000000000069 +:10D6F00000000000000000000000000100000040E9 +:10D700000000000100000040000000010000004097 +:10D710000000000000000000000000000001000008 +:10D7200000000000000000000000000000000000F9 :10D7300000000000000000000000000000000000E9 :10D7400000000000000000000000000000000000D9 -:10D7500000000000000000000010000000000002B7 +:10D7500000000000000000000000000000000000C9 :10D7600000000000000000000000000000000000B9 -:10D77000000000000000000000000000810000E048 -:10D780000000000000000000000000000000000099 -:10D790000000000000000000000000000000000089 -:10D7A0000000000000000000000000000000000079 +:10D77000000000000000000000000000000000E0C9 +:10D780000700820000000000070082210000000066 +:10D79000070082000000000000000000000000E020 +:10D7A00000008141000000000000000000000000B7 :10D7B0000000000000000000000000000000000069 :10D7C0000000000000000000000000000000000059 -:10D7D0000000000000000081000006000000004181 -:10D7E0000000060000000000000000000000000033 -:10D7F0000000000000000000000000000000FA0A25 -:10D80000FA0AFD0FFD0F00000000000000000000FC -:10D810000000000000000000000000000000F30510 -:10D8200003050000000000000000000000000000F0 +:10D7D0000000000000000000000000000000000049 +:10D7E0000000000000000000000000000000000039 +:10D7F0000000000000000000000000000000000029 +:10D800000000F0F0000000000000F0F00000000058 +:10D810000000F0F000000000000000000000000028 +:10D8200000000000000000000000000000000000F8 :10D8300000000000000000000000000000000000E8 :10D8400000000000000000000000000000000000D8 -:10D85000000000000000000000000000FF00FF00CA +:10D8500000000000000000000000000000000000C8 :10D8600000000000000000000000000000000000B8 :10D8700000000000000000000000000000000000A8 -:10D88000C0C0CFCFFDCFFDCF0000000000000000E2 -:10D890000000000000000000000000000000000088 -:10D8A000F3F503F500000000000000000000000098 +:10D8800000000000F0F0000000000000F0F00000D8 +:10D8900000000000F0F000000000000000000000A8 +:10D8A0000000000000000000000000000000000078 :10D8B0000000000000000000000000000000000068 :10D8C0000000000000000000000000000000000058 -:10D8D00000000000000000000000000000003C3CD0 -:10D8E0003C3C0000000000000000000000000000C0 +:10D8D0000000000000000000000000000000000048 +:10D8E0000000000000000000000000000000000038 :10D8F0000000000000000000000000000000000028 -:10D900000000FFFFFF00AFAF0F0F0000000000009E -:10D910000000000000000000000000000000000007 -:10D920000000F0CAF0CA0000000000000000000083 +:10D90000000000003C3C0000FFFF00003C3C000029 +:10D91000FFFF000000000000FFFF0000000000000B +:10D9200000000000000000000000000000000000F7 :10D9300000000000000000000000000000000000E7 :10D9400000000000000000000000000000000000D7 :10D9500000000000000000000000000000000000C7 -:10D960000FF0000000000000FF5500AA00000000BA +:10D9600000000000000000000000000000000000B7 :10D9700000000000000000000000000000000000A7 -:10D9800000000000FEFFFE00AFAFFFFF0000000040 +:10D980000000000000003C3C0000000000003C3CA7 :10D990000000000000000000000000000000000087 -:10D9A00000000000F0CAF0CA000000000000000003 +:10D9A0000000000000000000000000000000000077 :10D9B0000000000000000000000000000000000067 :10D9C0000000000000000000000000000000000057 :10D9D0000000000000000000000000000000000047 -:10D9E00000000FF0FFFF00000000FF5500AA00003C +:10D9E0000000000000000000000000000000000037 :10D9F0000000000000000000000000000000000027 -:10DA000000000000000000613006801D00010000E1 -:10DA10000000000000000000000000000000000006 -:10DA200000000000000000003000000000000000C6 +:10DA000000000000000005402A06054C00A80500A3 +:10DA10002A00054000A805000A00054000A80000F3 +:10DA200000000000000000400006000C00000000A4 :10DA300000000000000000000000000000000000E6 :10DA400000000000000000000000000000000000D6 :10DA500000000000000000000000000000000000C6 -:10DA60000000003000000500000000300000000051 +:10DA600000000000000000000000000000000000B6 :10DA700000000000000000000000000000000000A6 -:10DA80000000000000000000000000000000000096 +:10DA8000000000000000000000003C3CFFFF000020 :10DA90000000000000000000000000000000000086 -:10DAA0000000000000000000000000000000000076 +:10DAA00000000000000000000000FF00FFFF000079 :10DAB0000000000000000000000000000000000066 :10DAC0000000000000000000000000000000000056 :10DAD0000000000000000000000000000000000046 :10DAE0000000000000000000000000000000000036 :10DAF0000000000000000000000000000000000026 -:10DB00000000000000000000000000000000000015 +:10DB00000000000000000000000000003C3C00009D :10DB10000000000000000000000000000000000005 -:10DB200000000000000000000000000000000000F5 +:10DB2000000000000000000000000000FF000000F6 :10DB300000000000000000000000000000000000E5 :10DB400000000000000000000000000000000000D5 :10DB500000000000000000000000000000000000C5 :10DB600000000000000000000000000000000000B5 :10DB700000000000000000000000000000000000A5 :10DB80000000000000000000000000000000000095 -:10DB90000000000000000000000000000000000085 +:10DB9000F0F00000000000000000000000000000A5 :10DBA0000000000000000000000000000000000075 -:10DBB0000000000000000000000000000000000065 +:10DBB000F0F0000000000000000000000000000085 :10DBC0000000000000000000000000000000000055 :10DBD0000000000000000000000000000000000045 :10DBE0000000000000000000000000000000000035 :10DBF0000000000000000000000000000000000025 :10DC00000000000000000000000000000000000014 -:10DC10000000000000000000000000000000000004 +:10DC10000000F0F000000000000000000000000024 :10DC200000000000000000000000000000000000F4 -:10DC300000000000000000000000000000000000E4 +:10DC30000000F0F000000000000000000000000004 :10DC400000000000000000000000000000000000D4 :10DC500000000000000000000000000000000000C4 :10DC600000000000000000000000000000000000B4 :10DC700000000000000000000000000000000000A4 -:10DC8000000000000000000020000000200084418F -:10DC9000200020002010200000002000820000044E -:10DCA000200000008800A0042000000520100004CF -:10DCB00020022000200020000005000000000000DD -:10DCC0002004C000200520110000000000054008CD -:10DCD00000002000001020100204000000000000DE -:10DCE00002000005000020102000000000000010CD -:10DCF00000052000001000082000040000100000B3 -:10DD0000200800080000000500030000009021002A -:10DD100000000000000000000000000040000000C3 -:10DD200000010000000000A0200000000000000032 +:10DC80000000000000000000000000000000000094 +:10DC90000000000000000000000000000000000084 +:10DCA0000080000000000000008000000000000074 +:10DCB0000000000000000000000000000000000064 +:10DCC0000000000000000000000100000000000053 +:10DCD0000000000000000000000000000000000044 +:10DCE0000000000000000000000000000000000034 +:10DCF0000004000000000000000000000000000020 +:10DD00000000000000000000000000000000000013 +:10DD10000000000000000000000000000000000201 +:10DD200000000040000000000000000800000000AB :10DD300000000000000000000000000000000000E3 -:10DD400000000000000000000000000000000000D3 -:10DD50000000000000000000000080000000000043 -:10DD60000000800000000000210000000000000012 +:10DD4000000240000002000000020000000000008D +:10DD500000000090000000900090000040900090B3 +:10DD60000090000000000000000000000000000023 :10DD700000000000000000000000000000020000A1 -:10DD80000000000000000000000000000008000883 -:10DD900000000004004090410005008800050004D8 -:10DDA000000409020005000800040202000000044B -:10DDB0000004020500080010000500030008001020 -:10DDC0002004040400030000001004040000000507 -:10DDD0000004000404050004000400080805000411 -:10DDE00000050009A003000800080005020000006B -:10DDF00000000000001000050000000902040011EE -:10DE0000000400000003000500020000000200847E -:10DE10000000000800080288400800080010000800 -:10DE200000852008020800100002208489090408E7 -:10DE30000008020804080004000800040004008828 -:10DE40002008000800840008008800044008000042 -:10DE5000200800082084000400082002008420829A -:10DE600000080002000400082004208400040004CC -:10DE700000040004208400040008000420040002C0 -:10DE800000040082000800040004000420042004B0 -:10DE900000200021001000210080200000040085E7 -:10DEA00000900008008200400008002100080021C6 -:10DEB00000400010002100040003002100080008B9 -:10DEC000000300400021000500108440000800000D -:10DED00000000003000000100008000000080040DF -:10DEE0000041000900400005000500040040000852 -:10DEF00000100008000200040008000300210021B7 -:10DF000000080000000000210020000200080008B6 -:10DF10000041000000080000000000048020000113 -:10DF20000004000400900004000000000000000055 -:10DF300000000000000000000000000000000000E1 -:10DF400000000000000000000000000000000000D1 +:10DD80000000000000000000000000000000000093 +:10DD90000000000000000000000000000000000083 +:10DDA0000000000000000000000000000000000073 +:10DDB0000000000000000000000000000000000063 +:10DDC000000000000400000000000000000000004F +:10DDD0000000000000000000000000000000000043 +:10DDE0000000000000000000000000000000000033 +:10DDF000000000000004000000000000000000001F +:10DE00000000000000000000000000000000000012 +:10DE10000000000000000000000000000000000002 +:10DE200000000000000000000000000000000000F2 +:10DE300000000000000000000000000000000000E2 +:10DE400000000000000000000000000000000000D2 +:10DE500000000000000000000000000000000000C2 +:10DE600000000000000000000000000000000000B2 +:10DE7000000000080000000000000000000000009A +:10DE80000000000000000000000000000000000092 +:10DE90000000000000000000000000000000000082 +:10DEA0000000000000000000000000000000010071 +:10DEB0000000000000000100000000000000000061 +:10DEC0000000000000000000000000000000000052 +:10DED000000000000008000000000000000000003A +:10DEE0000000000000000000000000000000000032 +:10DEF0000000000000000000000000000000000022 +:10DF00000000000000000000000000000000000011 +:10DF1000000000000000000000C000000000000041 +:10DF200000000000000000000000000000000020D1 +:10DF300004000000000000002000000000000000BD +:10DF40000000000000A00000000000000000000031 :10DF500000000000000000000000000000000000C1 -:10DF60000000000000000008000800000000080099 -:10DF70000000000800000000000000000000000099 -:10DF8000000000A000080084000000000000000065 -:10DF9000000000A000050010001002100021000089 -:10DFA000C0098204000400110009004100000000C3 -:10DFB000000300400000000000000800000000090D -:10DFC0000004000000040000004000000000000009 -:10DFD00000000000000040000000000000000004FD -:10DFE000000000000000002100020000040000000A +:10DF600000000000000000000000000000000000B1 +:10DF700000000000000000000000000000000000A1 +:10DF80000000000000000000000000000000000091 +:10DF90000000000000000000000000000000000081 +:10DFA0000000000000000000000000000000000071 +:10DFB0000000000000000000010000000000000060 +:10DFC0000000000000000000000000000000000051 +:10DFD0000000000000000000000000000000000041 +:10DFE0000000000000000000000000000000000031 :10DFF0000000000000000000000000000000000021 -:10E000000000000000000000000900000000000007 -:10E010000000000000000082000000A100000008D5 -:10E0200009A000821000008200000990000000009A -:10E03000008400000000000400C00084001000A064 -:10E040000040009000100004008400000000000068 -:10E0500000A0000000000000000000000000001010 -:10E06000000000A0000000000084001000000082FA -:10E070000088108400900084000040000008030025 -:10E08000001000080000000000A000A00000000038 -:10E090000082000000000000000084004000080032 -:10E0A0000000C000000000210000A040002182000C -:10E0B0000040000300000010004100050000004186 -:10E0C0000000000000000000000000000000000848 -:10E0D000000000000000002100000000000000001F -:10E0E00000000000000000030008004100050000DF -:10E0F00000210020001000050000000000200000AA -:10E1000000000000002000000000000000000000EF -:10E1100000210000000000000000000000000000DE -:10E12000000000000000004000000000000000208F -:10E1300000000000000000000000000000000000DF -:10E1400000000000000000000000000000000000CF -:10E1500003000000000000000000000000000000BC +:10E000000000000000000000000000000000000010 +:10E010000000000000000000000000000000000000 +:10E0200000000000000000000000000000000000F0 +:10E0300000000000000000000000200000000000C0 +:10E0400000000000000000000000000000000000D0 +:10E0500000000000000000000000000000000000C0 +:10E0600000000000000000000000000000000000B0 +:10E0700000000000000000000000000000000000A0 +:10E080000000000000000000000000000000000090 +:10E090000000000000000000000000000000000080 +:10E0A0000000000000000000000000000000000070 +:10E0B0000000000000200000000000000000000040 +:10E0C0000000000000000000000000000000000050 +:10E0D0000000000000000000000000000000000040 +:10E0E0000000000000000000000000000000000030 +:10E0F0000000000000000000000000000000000020 +:10E10000000000000000000000000000000000000F +:10E11000000000000000000000000084000000C0BB +:10E1200000000000000009840084000000000000DE +:10E1300000840000000000010084000000000000D6 +:10E1400000C000000000008400000000000000008B +:10E1500000000000000000000000000000000000BF :10E1600000000000000000000000000000000000AF :10E17000000000000000000000000000000000009F -:10E18000000000000000000000000010000000007F -:10E190000000000000000000000000001000084126 -:10E1A00000410010001088008200000008030000F9 -:10E1B00000000005000400090004004100210040A7 -:10E1C00000000000004000410010000000000000BE -:10E1D0000000000000000008000000100000000027 -:10E1E000000090000000000040000000000000005F -:10E1F0000041002100410010004000030021000008 -:10E2000000080003004100000000000000000000C2 -:10E2100000000000000000000021000000002000BD -:10E220000500000003001100000020001140100054 -:10E230004000000400404100080420000000008469 -:10E240002040000000000200000004002040000008 -:10E2500000000000000400000000000000000000BA -:10E26000000000000000000000000000008202002A -:10E2700002002182000000C0000002400090000265 -:10E28000000000000000004000000000000000004E -:10E290000000000000000000000000000000000876 -:10E2A000000000000000000020020040001000906C -:10E2B0002088820800820084000200A084040410E8 -:10E2C000000000000000000000000000000000004E +:10E18000000000000000000000000000000000008F +:10E19000000000000000000000000000000000007F +:10E1A0000000000000090000000000000000000066 +:10E1B0000002000200000000000000020000000059 +:10E1C000000900020000000000090000000000003B +:10E1D000000200000000000000000000000000003D +:10E1E000000000000000000000000000000000002F +:10E1F000000000000000000000000000000000001F +:10E20000000000000000000000000000000000000E +:10E2100000000000000000000000000000000000FE +:10E2200000000000000000000000000000000000EE +:10E2300000000000000000000000000000000000DE +:10E2400000000000000000000000000000000000CE +:10E2500000000000050000000000000000000000B9 +:10E2600000000000000000000000000000000000AE +:10E27000000000000000000000000000000000009E +:10E28000000000000000000000000000000000008E +:10E29000000000000000000000000000000000007E +:10E2A000000000000000000000000000000000006E +:10E2B0000000000000000000000090000088000046 +:10E2C000010000000000000000000000000000004D :10E2D000000000000000000000000000000000003E -:10E2E0000001000000000000000000100008001005 -:10E2F00010084004080800A082040000000000008C +:10E2E000000000000000000000000000000000002E +:10E2F000000000000000000000000000000000001E :10E30000000000000000000000000000000000000D :10E3100000000000000000000000000000000000FD -:10E32000000000000000000000000080000040002D -:10E3300000000300008005800000008011008000C4 -:10E3400000000000000000000000000000000000CD +:10E3200000000000000000000000000000000000ED +:10E33000000000000000000000001100800000004C +:10E34000000011002100000000000000000000009B :10E3500000000000000000000000000000000000BD -:10E3600000000000000000000000000000800080AD -:10E37000008080800000808000808000000000001D +:10E3600000000000000000000000000000000000AD +:10E37000000000000000000000000000000000009D :10E38000000000000000000000000000000000008D :10E39000000000000000000000000000000000007D -:10E3A00000000000000000000000000080090000E4 -:10E3B000002000008020808200A0800000000084F7 -:10E3C0008084000000000000000000000000000049 +:10E3A000000000000000000000000000000000006D +:10E3B00000000000000000000000000000000080DD +:10E3C00000000080004109000009008000000000FA :10E3D000000000000000000000000000000000003D -:10E3E00000000000000000000000000000008000AD -:10E3F0000082808400000000001080000000000007 +:10E3E000000000000000000000000000000000002D +:10E3F000000000000000000000000000000000001D :10E40000000000000000000000000000000000000C :10E4100000000000000000000000000000000000FC -:10E420000000000000000000000000000000880064 -:10E43000080090018800080108C104A110008200B2 -:10E44000A04002A184400000000000000000000085 +:10E4200000000000000000000000000000000000EC +:10E4300000000000000000000000000000000000DC +:10E440000020000000C00001010000000088000062 :10E4500000000000000000000000000000000000BC :10E4600000000000000000000000000000000000AC -:10E470001000C04004A18400000004831004880040 +:10E47000000000000000000000000000000000009C :10E48000000000000000000000000000000000008C :10E49000000000000000000000000000000000007C :10E4A000000000000000000000000000000000006C -:10E4B00004840404002011004000C008C0040802C5 -:10E4C000C00000A000111082000000000000000049 +:10E4B000000000000000000000000000000000005C +:10E4C0000100008808000100000088000000010031 :10E4D000000000000000000000000000000000003C :10E4E000000000000000000000000000000000002C -:10E4F000000010040010000882080204000400005C -:10E5000010200000000000000000000000000000DB +:10E4F000000000000000000000000000000000001C +:10E50000000000000000000000000000000000000B :10E5100000000000000000000000000000000000FB :10E5200000000000000000000000000000000000EB -:10E530000000800000800000840080000080000057 -:10E54000048000050020008800A0000000000000FA -:10E5500000000000000000000000000000000000BB +:10E5300000000000000000000000000000000000DB +:10E540000000410000808000090000000000000081 +:10E55000410000000000000000000000000000007A :10E5600000000000000000000000000000000000AB -:10E57000000000008000008000800000000000001B -:10E580000000040000000000000000000000000087 +:10E57000000000000000000000000000000000009B +:10E58000000000000000000000000000000000008B :10E59000000000000000000000000000000000007B :10E5A000000000000000000000000000000000006B -:10E5B000000000000000008000000000800480894E -:10E5C000808000008008808480000000000000003F -:10E5D000000000000000000000000000000000003B +:10E5B000000000000000000000000000000000005B +:10E5C00000000000001100000080000000000011A9 +:10E5D000100000000000000000000000000000002B :10E5E000000000000000000000000000000000002B -:10E5F000000000000000000080800000800000009B -:10E60000808000808000000000000000000000000A +:10E5F000000000000000000000000000000000001B +:10E60000000000000000000000000000000000000A :10E6100000000000000000000000000000000000FA :10E6200000000000000000000000000000000000EA -:10E63000000000000000000000A0002000004000DA -:10E640001005824002000800880940A01000000068 -:10E6500000000000000000000000000000000000BA +:10E6300000000000000000000000000000000000DA +:10E640000000000000000001000000400000000089 +:10E6500000010100000000000000000000000000B8 :10E6600000000000000000000000000000000000AA -:10E670000000000000000000840008108804A000D2 -:10E68000C00082081010A000000000000000000080 +:10E67000000000000000000000000000000000009A +:10E68000000000000000000000000000000000008A :10E69000000000000000000000000000000000007A :10E6A000000000000000000000000000000000006A -:10E6B000000000000000000060000060000000009A -:10E6C0008800006000004200000000000000000020 -:10E6D000000000000000000000000000000000003A +:10E6B000000000000000000000000000000000005A +:10E6C00000000000000000000000000007008221A0 +:10E6D000000000E000008141000000000000000098 :10E6E000000000000000000000000000000000002A :10E6F000000000000000000000000000000000001A :10E700000000000000000000000000000000000009 :10E7100000000000000000000000000000000000F9 :10E7200000000000000000000000000000000000E9 -:10E730000000000000000000000000000000F424C1 -:10E74000F4240F0FC3C3FFFF909F033F033FFFFF5E -:10E7500000F00000000000000000000000000000C9 +:10E7300000000000000000000000000000000000D9 +:10E7400000000000000000000000000000000000C9 +:10E75000F0F00000000000000000000000000000D9 :10E7600000000000000000000000000000000000A9 -:10E77000000000000000000000000000C3000F992E -:10E780003030303009816F81CFCFCFCF0000000013 +:10E770000000000000000000000000000000000099 +:10E780000000000000000000000000000000000089 :10E790000000000000000000000000000000000079 :10E7A0000000000000000000000000000000000069 :10E7B0000000000000000000000000000000000059 -:10E7C000F424F42400FF6666FFFF909F7E7E4242A1 -:10E7D000FFFF0FFF0000000000000000000000002D +:10E7C0000000000000000000000000000000000049 +:10E7D0000000F0F000000000000000000000000059 :10E7E0000000000000000000000000000000000029 -:10E7F0000000000000000000000000000000C3FF57 -:10E800000F99FFF00F0009E76FE7DCDCDFDF0000A6 +:10E7F0000000000000000000000000000000000019 +:10E800000000000000000000000000000000000008 :10E8100000000000000000000000000000000000F8 :10E8200000000000000000000000000000000000E8 :10E8300000000000000000000000000000000000D8 @@ -188088,41 +188088,41 @@ :10E890000000000000000000000000000000000078 :10E8A0000000000000000000000000000000000068 :10E8B0000000000000000000000000000000000058 -:10E8C000000C0024818000003F3F3F3F262FB6BF51 -:10E8D000FFFDFFFF0E6E9EFE000000000000000026 +:10E8C0000000000000000000000000000000000048 +:10E8D0000F0F0000FFFF000000000000000000001C :10E8E0000000000000000000000000000000000028 :10E8F0000000000000000000000000000000000018 -:10E900000000427E7E7E1A9B3EBF273F273F060FB8 -:10E91000969F0000000000000000000000000000C2 +:10E900000000000000000000000000000000000007 +:10E9100000000000000000000000000000000000F7 :10E9200000000000000000000000000000000000E7 :10E9300000000000000000000000000000000000D7 -:10E940000000000C2424818081803F393F3F202932 -:10E95000B0B966646666086898F8000000000000B8 +:10E9400000000000000000000000000000000000C7 +:10E9500000000F0F00000000000000000000000099 :10E9600000000000000000000000000000000000A7 :10E970000000000000000000000000000000000097 -:10E98000000000004E7E7E7E028326A7273F3F3F89 -:10E990000009909900000000000000000000000045 +:10E980000000000000000000000000000000000087 +:10E990000000000000000000000000000000000077 :10E9A0000000000000000000000000000000000067 :10E9B0000000000000000000000000000000000057 -:10E9C0000000000000610007C01D0000006130076A -:10E9D000C00D000100613006000D000100000000C4 -:10E9E0000000000000000000000000000000000027 +:10E9C0000000000000000000000000000000000047 +:10E9D0000000000005002A00054000A800400006D5 +:10E9E000000C00000000000000000000000000001B :10E9F0000000000000000000000000000000000017 -:10EA000000000000000000003000000000000000D6 -:10EA100030000000000000000000000000000000C6 +:10EA00000000000000000000000000000000000006 +:10EA100000000000000000000000000000000000F6 :10EA200000000000000000000000000000000000E6 :10EA300000000000000000000000000000000000D6 :10EA400000000000000000000000000000000000C6 -:10EA50000000000000000000000030B000000000D6 -:10EA600000000000000000000000000000000000A6 +:10EA500000000000000000000000000000000000B6 +:10EA60000F0FFFFF0000000000000000000000008A :10EA70000000000000000000000000000000000096 :10EA80000000000000000000000000000000000086 :10EA90000000000000000000000000000000000076 :10EAA0000000000000000000000000000000000066 :10EAB0000000000000000000000000000000000056 :10EAC0000000000000000000000000000000000046 -:10EAD00000000000000000000000000000800000B6 -:10EAE0000000000000000000000000000000000026 +:10EAD0000000000000000000000000000000000036 +:10EAE00000000F0F00000000000000000000000008 :10EAF0000000000000000000000000000000000016 :10EB00000000000000000000000000000000000005 :10EB100000000000000000000000000000000000F5 @@ -188130,7 +188130,7 @@ :10EB300000000000000000000000000000000000D5 :10EB400000000000000000000000000000000000C5 :10EB500000000000000000000000000000000000B5 -:10EB600000000000000000000000000000000000A5 +:10EB6000000000000000F0F00000000000000000C5 :10EB70000000000000000000000000000000000095 :10EB80000000000000000000000000000000000085 :10EB90000000000000000000000000000000000075 @@ -188138,445 +188138,445 @@ :10EBB0000000000000000000000000000000000055 :10EBC0000000000000000000000000000000000045 :10EBD0000000000000000000000000000000000035 -:10EBE0000000000000000000000000000000000025 +:10EBE0000000000000000000F0F000000000000045 :10EBF0000000000000000000000000000000000015 :10EC00000000000000000000000000000000000004 :10EC100000000000000000000000000000000000F4 :10EC200000000000000000000000000000000000E4 :10EC300000000000000000000000000000000000D4 -:10EC400000000000000088022000000220000000F8 -:10EC50002000C00020000000880020008400200068 -:10EC6000040088002010201020000004C000890249 -:10EC700020000400200800080000211020002000CF -:10EC800020002000201000018800001040104000EB -:10EC90004005200800080008000800100408401083 -:10ECA00010108805A0000403000000112005400892 -:10ECB000200500020004021000000005000000080A -:10ECC00000082008200800080000000000010000E3 -:10ECD0000000000000000000000000000000000034 -:10ECE0000000002000000000000000000000000004 -:10ECF00040010000000000000000000020000000B3 -:10ED00000000000000000000000000000000000003 -:10ED100000000000000000000000000000000000F3 -:10ED200000000000000000000000000000000000E3 -:10ED30000000000000000000800000000000000053 -:10ED400000000000000000000000000000030509B2 -:10ED50000088901020100004200402048204028520 -:10ED600002040004000500080108900500100010CE -:10ED70002104010201400004010400050004000315 -:10ED800000050004A00800040405000000041009A8 -:10ED900000040002000490100204000300100009A7 -:10EDA00000030204880500100205020500040009A2 -:10EDB0000083000520080009001100020003000282 -:10EDC0000005000220000004000320000088040861 -:10EDD0004008001000088008000080080084210816 -:10EDE00000100084008400040088028400080008E9 -:10EDF0000008028440910209008402840004008813 -:10EE00000008000400100000000802080000008450 -:10EE100020080008000400820004208420880004E8 -:10EE2000000400048482200420822004A00420081E -:10EE30000010041020100088200800100004008832 -:10EE4000000800042084000400884002000400112F -:10EE50000002000000210000002002100020000835 -:10EE600000000000201100100041002000000003FD -:10EE70000011002100020008002100080002000526 -:10EE800000030021001000080040000500410000C0 -:10EE90000008002100210021004100410005004040 -:10EEA00000210008002100030008004000080008BD -:10EEB0000009004000080440001000400021000844 -:10EEC0000021004000030005002100030040000570 -:10EED00011000001050005002100000100000001F3 -:10EEE00000000310000088000000000000A00000E7 -:10EEF0000000000000880084000000000000000006 -:10EF000000004100000000080000000000000000B8 -:10EF100000000010000000000000000000000000E1 -:10EF200041000000000000000020000000000090F0 -:10EF3000008200000000000000000000001000003F -:10EF4000000000000000000000002000008400001D -:10EF500000A00003820501800000001100050800E8 -:10EF600000200003842100000000C0009000080081 -:10EF70000000000000000000080000210000000068 -:10EF80000009A040000000008200C0000000000056 -:10EF900000000000000000000000080082081000CF -:10EFA0000400A000A00000000000824084090000CE -:10EFB0008800200000000000000000000000002188 -:10EFC0000005000000030000080000000000000031 -:10EFD00000000000100010004002051009A011827E -:10EFE00000840411009000840010000800821100C9 -:10EFF00000820084200421820000000800C000007C -:10F0000000820082001000A00084000000000010B8 -:10F0100000A00084000010820000000003080082AD -:10F0200000A0110002840000008400000800008895 -:10F0300000040082000000824008418400000000BB -:10F04000000000840000000800820008000000901A -:10F05000008200A01000040800400400020000002C -:10F060000021880800040010092190000000000021 -:10F07000080000050020100082400000000300414D -:10F0800000410810A0100000080800400000002106 -:10F090000000000000000000080000000000001058 -:10F0A000000000000000002100000000080000082F -:10F0B00082000005004182050000042100030003D6 -:10F0C00000000202000582210000000090000040C4 -:10F0D0000004000200000004000000000000000026 -:10F0E0000000030021000091000002C000000000A9 -:10F0F0000000000000000010000000000000000000 -:10F1000000000000000000000000000000000000FF +:10EC400000000000000000000000000000000000C4 +:10EC500000000000000000000000000000000000B4 +:10EC60000000000000000000000000000000008024 +:10EC70000000000000000000000000000000000094 +:10EC8000000000040000000100000000000400007B +:10EC90000000000000000000000000040000000070 +:10ECA0000000000000040004000400000004000054 +:10ECB0000000000000000003000000000000000051 +:10ECC0000000000000000000000000000000000044 +:10ECD00000000000000000000082000000000000B2 +:10ECE0000000000000000000000000000000000024 +:10ECF00000400000000000000000000000000000D4 +:10ED00000000000000000000000000900000000073 +:10ED10000000009000900090009000900090400053 +:10ED2000000000000040000000000002000200009F +:10ED300000000000000000000000000000000000D3 +:10ED400000000000000000000000000000000000C3 +:10ED500000000000000000000000000000000000B3 +:10ED6000000000000000020002000000000000009F +:10ED70000000000000000000000000000000000093 +:10ED8000000002000200000000000000000000007F +:10ED90000000000000000000000000000000000073 +:10EDA000000000000200020000040000000000005B +:10EDB0000000000000000000000002000000000051 +:10EDC000000000000000000000000800000000003B +:10EDD000000000000000000000000000000000082B +:10EDE000000000000000000000080000000000001B +:10EDF000000000000000000000000000000000080B +:10EE000000000000000000000004000000000000FE +:10EE100000000000000000000000000000000000F2 +:10EE200000040000000000000000000000000000DE +:10EE300000000000000000000000000000000000D2 +:10EE400000000000000000000000000000000000C2 +:10EE5000000000000000000000000400400040002E +:10EE6000000000000000000000000000880000001A +:10EE70000000000000000000000000000100000091 +:10EE80000000000000000000000000000000000082 +:10EE90000000000000000000000000000000000072 +:10EEA0000000000000000000000000000000000062 +:10EEB0000000400000000000000000000000000012 +:10EEC0000000000000000000000000000000000042 +:10EED0000000000000000000000000000000000032 +:10EEE0000000000000000000000000000000000022 +:10EEF000000000000000000000000000000004000E +:10EF00000000000000000000000000000000000001 +:10EF100000000000000000000000000000000000F1 +:10EF200000000000000000000000000000000000E1 +:10EF300000000000000000000000000000000000D1 +:10EF400000000000000000000000000000000000C1 +:10EF500000000000000000000000000000000000B1 +:10EF600000000000000000000000000000000000A1 +:10EF70000000000000000000000000000000000091 +:10EF80000000000000000000000000000000000081 +:10EF90000000000000000000000000000000000071 +:10EFA0000000000000000000000000000000000061 +:10EFB0000000000000000000000000000000000051 +:10EFC0000000000000000000000000000000000041 +:10EFD0000000000000000000000000000000000031 +:10EFE0000000000000000000000000000000000021 +:10EFF0000000001000000000000000000000000001 +:10F000000000000000000000000000000000000000 +:10F0100000000000000000000000000000000000F0 +:10F0200000000000000000000000000000000000E0 +:10F0300000000000000000000000000000000000D0 +:10F0400000000000000000000000000000000000C0 +:10F0500000000000000000000000000000000000B0 +:10F0600000000000000000000000000000000000A0 +:10F070000000000000000000000000000000000090 +:10F080000000002000000000000000000000000060 +:10F090000000000000000000000000000000000070 +:10F0A0000000000000000000000000000000000060 +:10F0B0000000000000000000000000000000000050 +:10F0C0000000000000000000000000000000000040 +:10F0D0000000000000000000000000000000000030 +:10F0E000000004000000000000000000000000001C +:10F0F0000000000000000004000000000484000084 +:10F1000000000000000100000000000000000000FE :10F1100000000000000000000000000000000000EF -:10F1200000000000000000000020400000A00000DF -:10F1300000C000000000000000000000000000000F +:10F1200000000000000000000000000000000000DF +:10F1300000000000000000000000000000000000CF :10F1400000000000000000000000000000000000BF -:10F150000000000000000000000008210100400243 -:10F160000000000000840000010090000021000861 -:10F1700000000000901000000000020500110003D4 -:10F1800008418421000082000109000000100000F5 -:10F19000000000030000002100000000000000004B -:10F1A0000005820508000000001088100000000023 -:10F1B000000300210009000800110000884100053B -:10F1C00000000003000300210008000000210000EF -:10F1D000004000000000000000000010008808400F -:10F1E000C01111002000032111C02088100003006D -:10F1F0000000008802084188009000C02000000044 -:10F2000000000200009011002000088800000000AB -:10F2100000000000410000000000000000000000AD -:10F220000000000000000300000011002100210088 -:10F230000000009000C011000084000000000000E9 -:10F2400000000000100000000000000000000000AE -:10F250000000410004000000410000000000000028 -:10F260009000400000010010028988889010C000C2 -:10F27000000000000000A084008800A088A0008496 -:10F2800000C000C010100204009000A00010000197 -:10F29000000000000001000000000000000000016C +:10F1500000000000000000000000000000000000AF +:10F16000000000000000000000000000000000009F +:10F17000000000000000000000000000000000008F +:10F180000000000000000002000000000000000974 +:10F19000000000000000000000000000000000006F +:10F1A000000000000000000000000000000000005F +:10F1B000000000000000000000000000000000004F +:10F1C000000000000000000000000000000000003F +:10F1D000000000000000000000000000000000002F +:10F1E000000000000000000000000000000000001F +:10F1F000000000000000000000000000000000000F +:10F2000000000500000000000000000000000000F9 +:10F2100000000000000000000000000000000000EE +:10F2200000000000000000000000000000000000DE +:10F2300000000000000000000000000000000000CE +:10F2400000000000000000000000000000000000BE +:10F2500000000000000000000000000000000000AE +:10F26000000000000000000000000000000000009E +:10F27000000000000000000000000000000000008E +:10F280000000000000000000900000880000000066 +:10F29000000000000000000000000000000000006E :10F2A000000000000000000000000000000000005E -:10F2B000A008008200A01010A088900800C0008460 -:10F2C00000400082001040200040000200108882B0 +:10F2B000000000000000000000000000000000004E +:10F2C000000000000000000000000000000000003E :10F2D000000000000000000000000000000000002E -:10F2E0000003040800200021080090100080800026 -:10F2F000800000000000000000000000008000000E -:10F30000000000000000000080000908000000006C -:10F310000040004100030010000000000000000059 +:10F2E000000000000000000000000000000000001E +:10F2F000000000000000000000000000000000000E +:10F30000000000000000000011008000000000006C +:10F3100000000000000000000000000000000000ED :10F3200000000000000000000000000000000000DD -:10F33000000000800080008080800080008000004D -:10F34000000000000000000000000080000000003D +:10F3300000000000000000000000000000000000CD +:10F3400000000000000000000000000000000000BD :10F3500000000000000000000000000000000000AD -:10F360000000000003008000801008009011802140 -:10F370008003000000000000000080000004000086 -:10F380000000000000888080000000000003008072 -:10F3900000800000210011050010000000000000A6 +:10F36000000000000000000000000000000000009D +:10F37000000000000000000000000000000000008D +:10F3800000000000000000000000000000800000FD +:10F3900000800000000000000000000000000000ED :10F3A000000000000000000000000000000000005D -:10F3B00000000000000000C1808080008000008408 -:10F3C00000800000000080028080008080000083B8 -:10F3D00000850000000000000000000000000000A8 -:10F3E0000000000008881000820010001110410188 -:10F3F000400110010000100090000000080000A073 -:10F400000008C000A000840510A010000000084102 -:10F4100000A000A0000001000100000100000000A9 +:10F3B000000000000000000000000000000000004D +:10F3C000000000000000000000000000000000003D +:10F3D000000000000000000000000000000000002D +:10F3E000000000000000000000000000000000001D +:10F3F000000000000000000000000000000000000D +:10F4000000000000000000000000000000000020DC +:10F41000000000C00000000000000000000000002C :10F4200000000000000000000000000000000000DC -:10F43000000000000000880010110884100408007B -:10F4400000110882C0002000820088C090020200E3 -:10F4500010C102A1004000000000000000000000F8 -:10F460000000000000000000000001010000020098 -:10F470000190A008830000020008000800110400A9 -:10F48000008800C088022008008800C08500C004F1 -:10F4900000040210A00000000100010000000000B4 +:10F4300000000000000000000000000000000000CC +:10F4400000000000000000000000000000000000BC +:10F4500000000000000000000000000000000000AC +:10F46000000000000000000000000000000000009C +:10F47000000000000000000000000000000000008C +:10F48000000000000000000000000000000001007B +:10F4900000880800010000000000000000000000DB :10F4A000000000000000000000000000000000005C -:10F4B0000000000000000000C004000000048304FD -:10F4C000400200080440C11010900002000200A099 -:10F4D0000888000200402002000000000000000038 -:10F4E00000000000000000000020000520210011A5 -:10F4F000800311418211880800880000000003C0C9 -:10F5000080000000000000800000000000002100DA -:10F51000800400418010000000001000050003007E +:10F4B000000000000000000000000000000000004C +:10F4C000000000000000000000000000000000003C +:10F4D000000000000000000000000000000000002C +:10F4E000000000000000000000000000000000001C +:10F4F000000000000000000000000000000000000C +:10F5000000000000000000000000000000000000FB +:10F5100041000080800009000000000000000000A1 :10F5200000000000000000000000000000000000DB :10F5300000000000000000000000000000000000CB -:10F5400088808080008000000480000000800080AF -:10F550000380800000000000008000000000000028 -:10F560000000000000000000000021000900200051 -:10F5700000002140030991801011000000000000EC -:10F5800000000000800000008000000000008000FB -:10F59000800080000004000080001080030005004F -:10F5A0000300000000000000000000000000000058 -:10F5B0000000000000000000000000000000000942 -:10F5C0000080800000008080800000000009008032 -:10F5D0008080000080088002800080000000000021 -:10F5E0000000000000000000000000000140008852 -:10F5F0000008000091010008028400010000008260 -:10F6000000100000100008888288A0008400020416 -:10F610008404080004001001A000820001A0000082 +:10F5400000000000000000000000000000000000BB +:10F5500000000000000000000000000000000000AB +:10F56000000000000000000000000000000000009B +:10F57000000000000000000000000000000000008B +:10F58000000000000000000000000000000000007B +:10F5900000000011000000800000000000000000DA +:10F5A000000000000000000000000000000000005B +:10F5B000000000000000000000000000000000004B +:10F5C000000000000000000000000000000000003B +:10F5D000000000000000000000000000000000002B +:10F5E000000000000000000000000000000000001B +:10F5F000000000000000000000000000000000000B +:10F6000000000000000000000000000000000000FA +:10F6100000000000000100000040000000000000A9 :10F6200000000000000000000000000000000000DA -:10F630000000000000000000000000000000C0000A -:10F640008820A084A000C0008808840888000800E2 -:10F6500020A0844040000400884140008200000057 +:10F6300000000000000000000000000000000000CA +:10F6400000000000000000000000000000000000BA +:10F6500000000000000000000000000000000000AA :10F66000000000000000000000000000000000009A -:10F67000000000000000818100E0070000000000A1 -:10F680000060000084000000000000000000000096 -:10F690000000000000000000000000008100600089 -:10F6A00000600000000000000000000000000000FA +:10F67000000000000000000000000000000000008A +:10F68000000000000000000000000000000000007A +:10F6900000000000000000000000070082210000C0 +:10F6A000000000000000000000000000000000005A :10F6B000000000000000000000000000000000004A -:10F6C00000000000000041000000000000000000F9 -:10F6D0000000000000000082000000000000420066 +:10F6C000000000000000000000000000000000003A +:10F6D000000000000000000000000000000000002A :10F6E000000000000000000000000000000000001A -:10F6F0000000000000000000F0F0FFFFF0FFF0FF4E -:10F7000000000000202020F05C0F5C000000F000F2 -:10F710008282CF0CC3FFC3FFFEF2CEC23F7D3F7D8E +:10F6F000000000000000000000000000000000000A +:10F7000000000000000000000000000000000000F9 +:10F71000000000000000000000000000F0F0000009 :10F7200000000000000000000000000000000000D9 :10F7300000000000000000000000000000000000C9 -:10F740000000D7820A0AFFC3FF00F5F5050504048F -:10F750000050D70700000C0F3CFF3CFF00C3FC002B -:10F76000FCF00000000000000000000000000000AD -:10F7700000000000000000000000F0F00000000F9A -:10F78000000F00000000202020F05CFF5CF00A0069 -:10F790000A00BEBECF0C0FFF0FFF3E320E023F7DB0 -:10F7A0003F7D00000000000000000000000000009D +:10F7400000000000000000000000000000000000B9 +:10F7500000000000000000000000000000000000A9 +:10F760000000000000000000000000000000000099 +:10F770000000000000000000000000000000000089 +:10F780000000000000000000000000000000000079 +:10F790000000000000000000000000000000F0F089 +:10F7A0000000000000000000000000000000000059 :10F7B0000000000000000000000000000000000049 -:10F7C00000000000D7825F5F55FFFFFFCFC0CFC0B2 -:10F7D00004040050D707D707000030F04D4D4D4DC1 -:10F7E0000C000CF000000000000000000000000011 -:10F7F000000000000000000000E0E0E07D280F0FA6 -:10F800003F031F1F00000000FFFFFFFF7DFFFFFF02 -:10F81000FFFF4141FF55CF553C550FFF5F5F5F5FD5 -:10F82000F0F0F0F000000000000000000000000018 +:10F7C0000000000000000000000000000000000039 +:10F7D0000000000000000000000000000000000029 +:10F7E0000000000000000000000000000000000019 +:10F7F0000000000000000000000000000000000009 +:10F8000000000000000000000000000000000000F8 +:10F8100000000000000000000000000000000F0FCA +:10F820000000FFFF000000000000000000000000DA :10F8300000000000000000000000000000000000C8 -:10F84000000000000000FFFFFFEBFF3C550F1C1CF9 -:10F85000DFDF1414FF553C3C0C00F0F0ECCC5F5F94 -:10F860003C3CFFD2FFD2000000000000000000007E -:10F870000000000000000000000000EBEBEB5F0A5E -:10F880000F0F3F030B0B0000000050FA50FAF0F08E -:10F89000F0F0FFFFEBEBFF55FF553C550F005F5FAE -:10F8A0004B5FF0F0F0F000000000000000000000EE +:10F8400000000000000000000000000000000000B8 +:10F8500000000000000000000000000000000000A8 +:10F860000000000000000000000000000000000098 +:10F870000000000000000000000000000000000088 +:10F880000000000000000000000000000000000078 +:10F890000000000000000000000000000000000068 +:10F8A0000F0F00000000000000000000000000003A :10F8B0000000000000000000000000000000000048 -:10F8C00000000000000000000F0F0F0F003C550F5C -:10F8D0003C1CFFDF1414AA000C000C00FFFFEFCF4C -:10F8E000FF5F3C3CFFD2FFD20000000000000000A0 -:10F8F000000000000000000000610006000D000094 -:10F9000080610024800900000061000600090001F8 -:10F910000000300000000000000030000000000087 -:10F9200000613006000D000100610006C007000004 +:10F8C0000000000000000000000000000000000038 +:10F8D0000000000000000000000000000000000028 +:10F8E0000000000000000000000000000000000018 +:10F8F0000000000000000000000000000000000008 +:10F9000000000000000000000000000000000000F7 +:10F9100000000000000000000000000000000000E7 +:10F9200005002A00054000A80000000000000000BB :10F9300000000000000000000000000000000000C7 -:10F940000000000000000000000000003000000087 -:10F9500000000000300000100001800000000000E6 -:10F960000000000030000000000100000000000066 -:10F97000000000000000000000005F55FFFF00E0F5 -:10F9800000EABFBA1510F850F8FA00000000C3C32F -:10F99000FFFF000000000000000000000000000069 -:10F9A00000000000000003FF03FF030000C0000090 +:10F9400000000000000000000000000000000000B7 +:10F9500000000000000000000000000000000000A7 +:10F960000000000000000000000000000000000097 +:10F970000000000000000000000000000000000087 +:10F980000000000000000000000000000000000077 +:10F990000000000000000000000000000000000067 +:10F9A0000000000000000000000000000000000057 :10F9B0000000000000000000000000000000000047 :10F9C0000000000000000000000000000000000037 :10F9D0000000000000000000000000000000000027 :10F9E0000000000000000000000000000000000017 -:10F9F0000000000000000000000000000F00FFFFFA -:10FA00000000000AFFFA0500D050D0FA0000000004 -:10FA1000C3C3FFFF00000000000000000000000062 -:10FA200000000000000000003FFF3FFF03F303C39E +:10F9F0000000000000000000000000000000000007 +:10FA000000000000000000000000000000000000F6 +:10FA100000000000000000000000000000000000E6 +:10FA200000000000000000000000000000000000D6 :10FA300000000000000000000000000000000000C6 :10FA400000000000000000000000000000000000B6 :10FA500000000000000000000000000000000000A6 :10FA60000000000000000000000000000000000096 -:10FA7000000000000000000000000000000000C0C6 -:10FA8000C0C00F0F0F0F55FF55FFACACACAC000062 +:10FA70000000000000000000000000000000000086 +:10FA80000000000000000000000000000000000076 :10FA90000000000000000000000000000000000066 -:10FAA00000000000000000FF00FF0000000000FF59 -:10FAB000003400FF00FF0000000000000000000014 +:10FAA0000000000000000000000000000000000056 +:10FAB0000000000000000000000000000000000046 :10FAC0000000000000000000000000000000000036 :10FAD0000000000000000000000000000000000026 :10FAE0000000000000000000000000000000000016 :10FAF0000000000000000000000000000000000006 -:10FB000000C3C3C30000000055005500ACACACAC52 +:10FB000000000000000000000000000000000000F5 :10FB100000000000000000000000000000000000E5 -:10FB2000000000000000000000FF00FF00000000D7 -:10FB3000C7E982450F0F0F0F000000000000000012 +:10FB200000000000000000000000000000000000D5 +:10FB300000000000000000000000000000000000C5 :10FB400000000000000000000000000000000000B5 :10FB500000000000000000000000000000000000A5 :10FB60000000000000000000000000000000000095 :10FB70000000000000000000000000000000000085 -:10FB8000000088008808C008C010100084112002FE -:10FB900002108800000088008810000020008805FE -:10FBA00002004000201020102004200888002008B7 -:10FBB00020022008401004052002400920002004F3 -:10FBC0002010000320000408881020048410201056 -:10FBD000200520020400C003040488022008040554 -:10FBE000A004840588040011400240000009201090 -:10FBF0002004201000080003040020080000000278 -:10FC0000000420102000050000000000000000009B -:10FC10000001800000000000000000000000000063 -:10FC20000000800000000000000000000000000054 -:10FC30000000400000000000400000000000000044 -:10FC400000000000000100000000000000000000B3 -:10FC50002100000000000000000000000001000082 -:10FC6000000000000008000000000000000000008C -:10FC70000000000200010000000000000000000081 -:10FC80000000000000000203840283001104001041 -:10FC9000001082040003A00482108210C10400102E -:10FCA00000040041000300100004000900030204E6 -:10FCB0000000000401050200000400040004000527 -:10FCC0000004000500040000000500030003000913 -:10FCD00000008804200400880204000400000104DD -:10FCE0000004000300208403020300040005001048 -:10FCF000020288020205000000030004000802045A -:10FD0000201100080405020880840011040404C0C6 -:10FD100000080008000200080000000800084084F5 -:10FD20000408008400080084008400080408048893 -:10FD30000088008804840208098400082008040858 -:10FD40000082001000080008000008082088000455 -:10FD50000008200220080002090200822008200872 -:10FD600002080084008800892010208420080004F4 -:10FD7000000204040488090809042088208420045F -:10FD8000808200042004008809900002002088215D -:10FD90000000000584000010004000410005004103 -:10FDA0000005082088000021101000410003000019 -:10FDB0000010C00300080041000900050002001007 -:10FDC00000050009000800030003000020410003B3 -:10FDD00000090010002100210008000202080000B4 -:10FDE0000005000900100840900800050008000503 -:10FDF0000008200800100040000000200020024100 -:10FE00000010002100200021000800030001000074 -:10FE100009000000002009C000C00004002000000C -:10FE2000008800204182000000A0080009020000B4 -:10FE3000000000000000000000C00040000000C002 -:10FE400000C0001000000000001000000000800052 -:10FE5000000000000000000000000400000005A0F9 -:10FE60000000000000822184800041100590000005 -:10FE700000100000219000020084000200000084B5 -:10FE800000820000000000820000000000208500C9 -:10FE900005090903084000000000C0110004000229 -:10FEA000C08000050240020004000800C0110805DF -:10FEB000000200008300001008219003004083200E -:10FEC00000000841822100008200000010090000AB -:10FED0008200000000008203000000000040008556 -:10FEE000080000210002082100000803080004C0E7 -:10FEF000000000219041A040000000000003A0216C -:10FF000000000041000000000000000000001000A0 -:10FF1000400882000210008321820000008800A0B7 -:10FF2000000800020040808200000010000000C0B5 -:10FF3000000800A0000002080082008400100410E5 -:10FF400008100082008200C000820082038402A0A8 -:10FF50000000008400000882008240040088110034 -:10FF60000404000000000000000000C000080000C1 -:10FF700011200010000000000082080800080000A6 -:10FF80000000001000840000000000080000008253 -:10FF900000000110C0400000A0021000A0050408ED -:10FFA00082000805A021008800080041000300101D -:10FFB0000040000504000000002100050000004191 -:10FFC0000000000300090021002100080021820434 -:10FFD000000900008203001082080021000340098C -:10FFE0004010A011000404050000841000830005E7 -:10FFF00001200008821100030000084000210000D9 +:10FB80000000000000000000000000000000000075 +:10FB900000000000000000000000008000000000E5 +:10FBA0000000000000000000000000000000000055 +:10FBB0000000000000000000000000000000000045 +:10FBC0000000000100000000000000000000000034 +:10FBD0000000000000000000000000000000000025 +:10FBE0000000000000000000000000000000000015 +:10FBF00000000000000000000000004100000000C4 +:10FC00000000000000000000000000000000008272 +:10FC100000000000000000000000000000400000A4 +:10FC200000000000000000000000000010000000C4 +:10FC300000000008000000000000000000000000BC +:10FC40000000000000004082000000000000008270 +:10FC50000000008200000082000000C0000000C020 +:10FC60000000000000000000008200000000008290 +:10FC70000082000000000000000000000000000002 +:10FC80000000000000000000000000000000000074 +:10FC900000000000000000000000000090000000D4 +:10FCA0000000000000000000000000000003000051 +:10FCB0000000000000000000000002000000000042 +:10FCC000000000000000000000080000000000002C +:10FCD0000000000000000000000000000000000024 +:10FCE0000000000000000000000000000000000014 +:10FCF0000000000000000000000000000000000004 +:10FD0000000000000000000000000004000000905F +:10FD100000080008000000080000000000000008C3 +:10FD20000084000000000000000000080000000047 +:10FD300000080008000000080000000000000008A3 +:10FD400000000000000000000000000000080000AB +:10FD5000000000080008000000040000000000008F +:10FD600000100000000000000000000800820000F9 +:10FD7000000000820082000000000000000000007F +:10FD8000000000000000000000000000000800006B +:10FD90000002000000000000000000000000000061 +:10FDA00000000080000000000100000000000000D2 +:10FDB0000000000200000000000000000000000041 +:10FDC00000000000000000000040000000000000F3 +:10FDD00000000000880000009000900000008800F3 +:10FDE0008800880000000000000000000000000003 +:10FDF0000000000000000000000000000000000003 +:10FE000000000000000000000000000000000000F2 +:10FE100000000000000000000000000000000000E2 +:10FE200000000000000800000000040000000000C6 +:10FE300000000000000000000000000000000000C2 +:10FE400000000000000000000000000000000000B2 +:10FE500000000000000000000000000000000000A2 +:10FE60000000000000000000000000000000000092 +:10FE70000000000000000000000000000000000082 +:10FE800000000000008200000000000000000000F0 +:10FE90000000000000000000000000000000000062 +:10FEA0000000000000000000000001800180000050 +:10FEB0000000000000000000000000000000000042 +:10FEC0000000000000000000000000000000000032 +:10FED0000000000000000000000000000000000022 +:10FEE0000000000000000000000000000000000012 +:10FEF0000000000000000000000000000000000002 +:10FF000000000000000000000000000000000000F1 +:10FF100000000000000000000000000000000000E1 +:10FF2000000000000000000000A0000020200204EB +:10FF300000000000000000001000000000000000B1 +:10FF400000000000000000000000000000000000B1 +:10FF500000000000000000000000000000000000A1 +:10FF60000000000000000000000000000000000091 +:10FF70000000000000000000000000000000000081 +:10FF80000000000000000000008205000082000068 +:10FF90000000000000000000000000000000000061 +:10FFA0000000000000009000900000000000000031 +:10FFB0001000000000000000000000000000000031 +:10FFC0000000000000000000000000000000000031 +:10FFD0000000000000000000000000000000000021 +:10FFE0000000000000000000000000000000000011 +:10FFF0000000000000000000000000000000000001 :02000004002ECC -:100000000041841000000008008200050008000084 -:1000100000000040400400000004000111A009009D -:1000200000040004000008000010090000C00000E7 -:1000300000A0020200000220001000841000000056 -:1000400000000000030000000800000000000000A5 -:100050000000000000000000000000000000004060 -:10006000000000000000000400000088008404106C -:100070000000080000000000000208000304000265 -:1000800000840000000000000000001000000000DC -:10009000000000000000044102000000C000004019 -:1000A00008000040000000030021000000080021BB -:1000B00000080021000800050000000010000011E9 -:1000C00000000003000500040021000400210010CE -:1000D00000000000004100000000000010210200AC -:1000E0002008C0000000900082030000000000090A -:1000F0000020002000039010820300210800082146 -:10010000000000210000000000030010004100007A -:1001100000210010080000218000000020000000E5 -:1001200000000000040000000000000002002000A9 -:10013000009000000090000000C0000000A000003F -:1001400000A002000000000000000000000000828B -:10015000000000000000000000000000000003009C -:100160000000000000A011000000000000000000DE -:1001700011820001000100000001000000000000E9 -:100180001000000000000000100800000000030044 -:100190000000000000000000000001C004400484D2 -:1001A000C04082C000400002A010100900020008F8 -:1001B000101100040488000282820408004000A09C -:1001C00000A001C000C000040040000000000000CA -:1001D000000000000000000000000002000000001D -:1001E0000000000000000200820100018940A0041C -:1001F000100210100000000000C00090000000007D -:100200000000000000400040008400021090000444 -:100210000210C008000000000000000004A00285D9 -:1002200080208020000000800000008080A000006E -:1002300000C080820000000000008080008000007C -:1002400000000000020000000000000000000000AC +:1000000000000000000000000000000000000000F0 +:1000100000020000000000000000000000000000DE +:1000200000000000000000000000000000000000D0 +:100030004000800000000000000000000000000000 +:10004000000000A000000000000000000000000010 +:1000500000000000000000000000000000000000A0 +:100060000000000000000000000000000000000090 +:100070000000000000000000000000000000000080 +:100080000000000000000000000000000000000070 +:10009000000000000000000000000100000000005F +:1000A0000000000000000000000000000000000050 +:1000B0000100000000000000000001090000000035 +:1000C0000000000000000000000000000000000030 +:1000D0000000000000000000000000000000000020 +:1000E0000000000000000000000000000000000010 +:1000F0000000000000000000000000000000000000 +:1001000000000000000000000000000000000000EF +:1001100000000000000000000000000008000000D7 +:1001200000000000000000000000000000000000CF +:100130000000200000000000000000000800000097 +:1001400000000000000005000000000000000000AA +:10015000000000000000000000000000000000009F +:10016000000000000000000000000000000000008F +:10017000000000000000000000000000000000007F +:10018000000000000000000000000000000000006F +:10019000000000000000000000000000000000005F +:1001A000000000000000000000000000000000004F +:1001B000000001009090000000000000000000001E +:1001C000000000000000000000000000000000002F +:1001D000000000000000000000000000000000001F +:1001E000000000000000000000000000000000000F +:1001F00000000000000000000000000000000000FF +:1002000000000000000000000000000000000000EE +:1002100000000000000000000000000000000000DE +:1002200000000000000000000000000000000000CE +:10023000000000001100A10000000000000000000C +:1002400000000000000000000000000000000000AE :10025000000000000000000000000000000000009E -:1002600000000000000020099003802000080980A1 -:100270008500808080800000000000000080000079 -:10028000000000000000008000000080008080006E -:1002900000008080800000000000000000008580D9 -:1002A0008241004190082080210405A190808000B7 -:1002B0000002808000000000008400800000000038 -:1002C0000008008000000000002180800000000085 -:1002D000001000000000000000000000000000000E -:1002E0000010000000000000410021001008201153 -:1002F0000300032103022020000080000000000012 -:100300000000000000000000000000C080C00000ED -:10031000000000030000008000000000000000005A -:1003200040C041848401C1C0010201A0051108A0A0 -:10033000022002821010A0009000108200A000C0D5 -:100340000000008200A00000A000A08208A004001D -:10035000000000010000000000000000000000009C -:1003600000000000000000000000009001000000FC -:100370000000002000840104010000009010000033 -:10038000C0900000000000000000200090C004A009 -:1003900008200000008500A000A000000000000070 -:1003A0000000A0A00083A08501C088000008000212 -:1003B000C1C010C00100C008A00208000002000275 -:1003C00084900420000000081010084000A04004A1 -:1003D0000910000000000000000000000000000004 -:1003E000000000010000000000000000000100000B -:1003F000A000000104040000A00290020090008808 -:100400000800A000000000000000000010080082AA -:1004100000089190C010000400044040000000005B -:1004200000000000094003C000A14184004000A179 -:1004300000402105801003409080A0008000000053 -:10044000000000000000000000808080808000002C -:100450000000A1800000000000000000000000007B -:10046000000000000001000000000000000000216A -:1004700040418303020200400041800410050880CF -:10048000000000000000000000000000000080806C -:100490000000008009008082000400000940000084 -:1004A000000000000000A100880884824000108441 -:1004B000208082000402A104830083800400800065 -:1004C000000000008000800000000000000000002C -:1004D000800080008000000000000000000000009C -:1004E000000000000000000100000000000000000B -:1004F0001000110405000309890490004100034025 -:100500000000000880000000000000000000000063 -:1005100080000080000080000000800000000000DB -:100520000000000000000000C100830084C18302BD -:10053000C0C1900885028801410120001008A00078 -:100540000800C004A002A00008008800A00040002D -:10055000C00010848484040010000000000000002B -:10056000000000000000000000010000000000008A -:100570000000010800000000010004C18300100019 -:1005800082010000880090A0000000000000000030 -:1005900000000400408290821000A0001000900033 -:1005A000A0000000000000000000000000000700A4 -:1005B0004242000000000000500000000000000067 -:1005C000000B000000000000000000000000000020 +:10026000000000000000000000000000000000008E +:10027000000000000000000000000000000000007E +:10028000000000000000000000000000000000006E +:10029000000000000000000000000000000000005E +:1002A000000000000000000000000000000000004E +:1002B00000000000000000080980000300000000AA +:1002C000000000000000000000000000000000002E +:1002D000000000000000000000000000000000001E +:1002E000000000000000000000000000000000000E +:1002F00000000000000000000000000000000000FE +:1003000000000000000000000000000000000000ED +:1003100000000000000000000000000000000000DD +:1003200000000000000000000000000000000000CD +:100330000000000000000000000101020000008831 +:1003400000000000000000000000000000000000AD +:10035000000000000000000000000000000000009D +:10036000000000000000000000000000000000008D +:10037000000000000000000000000000000000007D +:10038000000000000000000000000000000000006D +:10039000000000000000000000000000000000005D +:1003A000000000000000000000000000000000004D +:1003B0000000000000000000000001008888080024 +:1003C000000000000200000000000000000000002B +:1003D000000000000000000000000000000000001D +:1003E000000000000000000000000000000000000D +:1003F00000000000000000000000000000000000FD +:1004000000000000000000000000000000000000EC +:1004100000000000000000000000000000000000DC +:1004200000000000000000000000000000000000CC +:1004300000000000000000000000000041000080FB +:10044000800041000000800000000000000000006B +:10045000000000000000000000000000000000009C +:10046000000000000000000000000000000000008C +:10047000000000000000000000000000000000007C +:10048000000000000000000000000000000000006C +:10049000000000000000000000000000000000005C +:1004A000000000000000000000000000000000004C +:1004B000000000000000000000000000000000112B +:1004C000000020800000000000000000000000008C +:1004D000000000000000000000000000000000001C +:1004E000000000000000000000000000000000000C +:1004F00000000000000000000000000000000000FC +:1005000000000000000000000000000000000000EB +:1005100000000000000000000000000000000000DB +:1005200000000000000000000000000000000000CB +:1005300000000000000000000000000000000000BB +:10054000000100000040000000000000000000006A +:10055000000000000000000000000000000000009B +:10056000000000000000000000000000000000008B +:10057000000000000000000000000000000000007B +:10058000000000000000000000000000000000006B +:10059000000000000000000000000000000000005B +:1005A000000000000000000000000000000000004B +:1005B000000000000000000000000000000000003B +:1005C0000000000000E007008200000000000000C2 :1005D000000000000000000000000000000000001B -:1005E000000000000000000000000000600000604B -:1005F00000000000880000E0000000000000000093 -:1006000000000000000000000700000000000000E3 -:10061000000000000000000000006000000000007A -:1006200000008482000000000000000000000000C4 -:1006300000000000818190F60F00000699F99FFFED -:10064000003C003C0F0F00FFFFFFFFFFC0C006F69D -:10065000E7E766FF0F0F00FFF3F0F3FF0000000075 +:1005E000000000000000000000000000000000000B +:1005F00000000000000000000000000000000000FB +:1006000000000000000000000000000000000000EA +:1006100000000000000000000000000000000000DA +:1006200000000000000000000000000000000000CA +:1006300000000000000000000000000000000000BA +:1006400000000000000000000000F0F000000000CA +:10065000000000000000000000000000000000009A :10066000000000000000000000000000000000008A -:100670000000000000000000000000000000DB425D -:1006800006067E427E42F000F0003030303000003E -:1006900000000000000000000000F0003030990071 -:1006A0000FC3FFF06C6C00000000000000000000B1 -:1006B000000000000000E7E790F60000000681E17E -:1006C00087E766FF66003C3C6666000FFF0FCFCFF2 -:1006D00006F6E7E766FFC3C36666F3F0F3FF0000C4 -:1006E000FFFF00000000000000000000000000000C +:10067000000000000000000000000000000000007A +:10068000000000000000000000000000000000006A +:10069000000000000000000000000000000000005A +:1006A000000000000000000000000000000000004A +:1006B000000000000000000000000000000000003A +:1006C000000000000000000000000000F0F000004A +:1006D000000000000000000000000000000000001A +:1006E000000000000000000000000000000000000A :1006F00000000000000000000000000000000000FA -:10070000DB429F9FC3C30000F000F0003030303068 -:10071000000000000000000000006E66F0003030B5 -:1007200099FF0FC30F006C6C000000000000000078 -:100730004308400000842186000000000000000003 +:1007000000000000000000000000000000000000E9 +:1007100000000000000000000000000000000000D9 +:1007200000000000000000000000000000000000C9 +:1007300000000000000000000000000000000000B9 :1007400000000000000000000000000000000000A9 :100750000000000000000000000000000000000099 :100760000000000000000000000000000000000089 @@ -188584,234 +188584,234 @@ :100780000000000000000000000000000000000069 :100790000000000000000000000000000000000059 :1007A0000000000000000000000000000000000049 -:1007B00000000000000000000000FF00FEFEFF66D9 -:1007C000FF66B1BDBDBD00300030FFFCFFFFFFFF85 -:1007D000FFFF0F0FFFFF0000000000FFFFFF6C6C2A -:1007E000F0FF00000000000000000000000000001A +:1007B0000000000000000000000000000000000039 +:1007C0000000000000000000000000FF0000FFFF2C +:1007D0000000000000000000000000000000000019 +:1007E0000000000000000000000000000000000009 :1007F00000000000000000000000000000000000F9 -:10080000000000006F6F6F6F0000000016161616D4 -:1008100000000000000000000000000001001800BF -:10082000420F7E0F2C2CEFEF0000000000000000B4 -:10083000000000000000000000000000FF00FFFFBB -:10084000FFFF6666BDBDBDBD0000F0006666666662 -:10085000E1E1E1E10F0FFFBD0000000000FFF7F74D -:100860006C6C000F000000000000000000000000A1 +:1008000000000000000000000000000000000000E8 +:1008100000000000000000000000000000000000D8 +:1008200000000000000000000000000000000000C8 +:1008300000000000000000000000000000000000B8 +:1008400000000000000000000000000000FF0000A9 +:100850000000000000000000000000000000000098 +:100860000000000000000000000000000000000088 :100870000000000000000000000000000000000078 -:100880000000000000006F6F4B6F000000001616A4 -:1008900016160F0F0000000000000000000001000D -:1008A0000000000000002C3CEFFF000000000000F2 -:1008B0000000000000001061200E004D00080061E3 -:1008C0003006000D000000613006000D0000000041 -:1008D00030000000000000003000000000000000B8 -:1008E00030000000000000000000000000000000D8 -:1008F000000000000000000000610006800D000004 -:1009000000610006800D000000613006001D00003F -:1009100005000A08050000A000000000000000001B -:10092000000030000000000000613006000D0000F3 -:1009300000000000000000008082C0C31B1FFBFFFE -:100940003D053C00CFCFCF00F755F7FF030303036E -:100950000000000000000000000000000000000097 +:100880000000000000000000000000000000000068 +:100890000000000000000000000000000000000058 +:1008A0000000000000000000000000000000000048 +:1008B0000000000000000000000000000000000038 +:1008C00000000000000000000000000000000540E3 +:1008D0002A06054C00A800000000000000000000EF +:1008E0000000000000000000000000000000000008 +:1008F00000000000000000000000000000000000F8 +:1009000000000000000000000000000000000000E7 +:1009100000000000000000000000000000000000D7 +:1009200000000000000000000000000000000000C7 +:1009300000000000000000000000000000000000B7 +:1009400000000000000000000000000000000000A7 +:1009500000000F0FFFFF000000000000000000007B :100960000000000000000000000000000000000087 :100970000000000000000000000000000000000077 -:10098000000000A2A2A2C341C3400000E0EB003C73 -:10099000AAAA000000000000000000000000000003 -:1009A00000000000000000000000000000000A0A33 -:1009B000FCFC0000000000000000A0AAF0FF1115E0 -:1009C000F1F53D053C00CFCFCF00F755F7FF03030E -:1009D0000303000000000000000000000000000011 +:100980000000000000000000000000000000000067 +:100990000000000000000000000000000000000057 +:1009A0000000000000000000000000000000000047 +:1009B0000000000000000000000000000000000037 +:1009C0000000000000000000000000000000000027 +:1009D000000000000F0F00000000000000000000F9 :1009E0000000000000000000000000000000000007 :1009F00000000000000000000000000000000000F7 -:100A00000000000000F3F3F3C3C3C3C2E0EBE0EB6C -:100A10000C0C8282000000000000000000000000BA +:100A000000000000000000000000000000000000E6 +:100A100000000000000000000000000000000000D6 :100A200000000000000000000000000000000000C6 -:100A30000A0AFCFC000000000000000000000100A9 -:100A40003030F3F300000000000500011F1F1010FC -:100A50000000000000000000000000000000000096 +:100A300000000000000000000000000000000000B6 +:100A400000000000000000000000000000000000A6 +:100A50000000000000000000F0F0000000000000B6 :100A60000000000000000000000000000000000086 :100A70000000000000000000000000000000000076 -:100A8000000000000000F050F0F0F0D0C0C0000006 -:100A9000000000CF004F0000000000000000000038 +:100A80000000000000000000000000000000000066 +:100A90000000000000000000000000000000000056 :100AA0000000000000000000000000000000000046 :100AB0000000000000000000000000000000000036 -:100AC00001003030F3F300000000000F00031010AD -:100AD00010100000000000000000000000000000F6 +:100AC0000000000000000000000000000000000026 +:100AD00000000000000000000000F0F00000000036 :100AE0000000000000000000000000000000000006 :100AF00000000000000000000000000000000000F6 -:100B00000000000000000000FC5CFCFCF0D0F0D015 -:100B10000000000000FF005F000000000000000077 +:100B000000000000000000000000000000000000E5 +:100B100000000000000000000000000000000000D5 :100B200000000000000000000000000000000000C5 :100B300000000000000000000000000000000000B5 -:100B400020008400400240008400840084040410DB -:100B50008400C010044088002000200520104009B7 -:100B60002003C01010002010200920100000840075 -:100B70000000200420102008840040002004040904 -:100B8000000020102005200340102004A010840342 -:100B90002000001004001004840820052005041023 -:100BA0002008A01040032004400288090405040521 -:100BB0002002C0058804200020022009040500044A -:100BC00020040900000000000000000000020000F6 -:100BD000000009000000000000000000000000000C -:100BE0000000000000000000000000000000000005 -:100BF000000021000000090010002000200000007B -:100C0000000000000004000000004100000000009F -:100C10000000000000000000000040000000000094 -:100C2000000000000084000000000000000000A0A0 -:100C300040000982000000000000400000000004A5 -:100C40000902009000090010000384000209000559 -:100C5000021000000004200300040000111011091C -:100C6000040204100005000800040204000300113F -:100C7000000402000010000000040204080402083E -:100C80000402082000000003000402040004000520 -:100C900000040000021100040004020582020008A2 -:100CA000104020020410A0040004000302042004E9 -:100CB00000020008A0040002200200080003101037 -:100CC000200888200020000800840010008200080E -:100CD00000040488030400080008001000088804C9 -:100CE000820880098011000800840084008800C008 -:100CF0000008200804840008000800020588C18458 -:100D000080118085A0090000000800080008200864 -:100D100000C000080084001000082084400820045F -:100D2000000980058205848920822084410820846E -:100D300004080082200202080404008209040484DA -:100D4000C01140092009008984100203000888416D -:100D500040090041400040081000C005082108106B -:100D60000041000588020021001108000020000059 -:100D70000021404000000020004000100041000918 -:100D800000410021000300400000000900030005AD -:100D900000030008000400100040200400100010B0 -:100DA000002100100010400888030008820304039B -:100DB00000080005904000091003000800080041E9 -:100DC00000050003041000210010000004020900C7 -:100DD00000080510000000000300001000000002E1 -:100DE00000024108000000840000008200000000B2 -:100DF0000008008200000000000800000000000061 -:100E0000000000A00002000000000000218400009B -:100E1000000011C0080008020004050000A0000244 -:100E20000000091000C00082000200020320000838 -:100E30000000409000820008004000000010000008 -:100E40000020000000A000840088008584040000C9 -:100E5000004108000000000010080004000000002D -:100E60000009000000000000000400000000004035 -:100E70000800001100000011001008000000000030 -:100E80000003000000080005008800000000004189 -:100E900000000000002100000000A0000020A000D1 -:100EA000840008000000108000008220C0050000BF -:100EB000C000820004000000080082001000000052 -:100EC00010000400A04000008240828482000000E4 -:100ED00000840884001040022088000000C00084C4 -:100EE0000404000000C000A000820083000800C0CD -:100EF000092000080000008800C000000004000471 -:100F00000000000000000021008200040300000037 -:100F10000000110000820084000000A00000000812 -:100F200000C01008008200C000100084008302008E -:100F30000000008410A00000000000C000100400A9 -:100F400040C0008400000082000000010003000097 -:100F500000002009000002400040000004200000C2 -:100F60000000A041000800000002400200400040D4 -:100F7000001000410004900200080003000000106F -:100F800000210009000500210003000900000010F5 -:100F90000000002100100010401100020005A040D8 -:100FA0000000900000040020900084020208081055 -:100FB0000010404100410010100090210803820001 -:100FC000C00000030000000300110008002090038F -:100FD0000021000411000390000010A00484000010 -:100FE0000000000000000500000404000000039061 -:100FF00008000000000000C0040000100000000015 -:101000000000080000000008000000080088000040 -:101010000000000000000000000000020840000086 -:10102000000805000082058409000490000000000B -:101030001104000002000000000020002000000059 -:101040000800200000000000050003080000000068 -:1010500000000000000000080000840000001008EC -:10106000000300030000000900030000000300105B -:10107000000000000000000300100000000000035A -:1010800000000000000000210021001004100020DA -:101090000010000000000000004140210000081086 -:1010A0000000C003002100000041000000030021F7 -:1010B000000500008400000000109000C010000037 -:1010C00000059000A000000500031021C0000005ED -:1010D00000411000000802020304000241A0410484 -:1010E00020100000000000001004000000000000BC -:1010F00000900000009000000920000000000000A7 -:1011000002C041A020C00000000005000020000037 -:10111000000800000082000000C000000000000283 -:101120000800008800000000000005001102000017 -:101130000004000000000000000000000000400269 -:1011400000902010000400000000000000000000DB -:1011500000000000030000820000C1000001C18205 -:101160000000C0000182C089C001C1010002C0822C -:101170000000C000004188000000C1000001C182E1 -:101180000100C0000140C009C000C0010040C08291 -:101190000000C0000105020000030000C1000001C2 -:1011A000C1830100C0000140C189C000C00100042A -:1011B000C0820101C000008902000000C1000001DE -:1011C000C1820100C0000140C041C000C001000454 -:1011D000C0820000C000009188000041C141004170 -:1011E000C189114180414189820380048803000044 -:1011F000808011418041088300000041C1410041CD -:10120000C1824141804141909183820984030080E1 -:101210008080004180410803000000000041C1417E -:101220000041C18841418041419090039109A1034F -:101230000080808041088021020300000041C141FC -:101240000041C18541418041418388038009820377 -:10125000008080800041804108030000410003417C -:1012600000C100004141884100C1084110C1A041B6 -:10127000008883804100C14100C1800841000941CC -:1012800000C10000414189410041084110C11141A4 -:10129000008083804100C14100C1801000004100F6 -:1012A000084100C10000414190410041084108C18E -:1012B0004041008083804100A14100C18041410044 -:1012C000034100C10000414191410041054110C16D -:1012D0000841008083804100C14100C1802000009E -:1012E000010100C10002000140010041010120C1D3 -:1012F000400300C083C08800400100C1820000009C -:10130000000100C10000000140010003010108C10B -:10131000C08900C083C01000400100C182000000ED -:101320000000010100C100000001400100090101AD -:1013300082C1890900C083C00800200100408201E9 -:101340000000010100C10020000140010021000156 -:1013500083C1A12100C083C02000400100C18200E0 -:101360000020C0000340000000000000C182048390 -:1013700000100000C183000000000000C100000058 -:1013800000400000C183000000000000C182108303 -:1013900000040000C140000000000000C000000088 -:1013A000000000401000C183000000000000C18266 -:1013B000088300100000C140000000000000010090 -:1013C000000000400000C140000000000000C18299 -:1013D000208300840000C140000000000000C00025 -:1013E00000000080802141C1000000000041C18256 -:1013F000808300C10041C1830000000000218841BA -:10140000000000800041C183000000000041C1894C -:10141000808300410041C1C10000000000218941DA +:100B40000000000000000000400000000000000065 +:100B50000000000000000000000000000000000095 +:100B60000000000000000000000000000000000085 +:100B70000000000000000000000000000000000075 +:100B8000000200000000000000000000000000085B +:100B9000000000000000000800000000000000004D +:100BA000000000000005000000000000000000112F +:100BB0000005000500000005000000000000000026 +:100BC000C00000080008000000000000000800004D +:100BD000000000000000000000020008000000000B +:100BE00000000000000000000008000000000000FD +:100BF00000000000000000000000000000000000F5 +:100C000000000000000000001090000000820000C2 +:100C1000108400820082000000000000000000023A +:100C2000000200000084000200000000000000023A +:100C300000840000000000880000000000020002A4 +:100C400000000000000000000000000000000000A4 +:100C5000000000000000000500000000101011005E +:100C6000200208200000000000000000000000003A +:100C70000200000000000000000000000808104012 +:100C800040040820000000000000000000000000F8 +:100C90000000000000000000000000000000101034 +:100CA00002082002082000000000000000000000F0 +:100CB0000000000002000000000000000000000032 +:100CC000000000002000000800080008008200006A +:100CD0000008000800080008000800000000800963 +:100CE00082088009800100080008009000080000C8 +:100CF00000080008000800080008000000008083C9 +:100D00008009800980010000000800080000000838 +:100D100000000008001000080084008400000000AB +:100D2000800180858085800100820082000000842F +:100D3000000000840082008400840000000800009D +:100D400000000000000080020021000900210000D6 +:100D50000021000200000421040200000021000024 +:100D6000002100210000002104210020002000219A +:100D70000009000400020011000900000000000446 +:100D80000000000000200020000000009000000093 +:100D9000000000009003900084009000C0008800D4 +:100DA0000000000000000011000000210409000004 +:100DB0000000000000110003000000050005000015 +:100DC0000011000000110021000300A0000000003D +:100DD0000008000000000000008400000020000067 +:100DE0000200000000000000000000000000000001 +:100DF000040000000000000000A00002000000004D +:100E000000000000000000000000000000000000E2 +:100E1000000000000090000000002000008211008F +:100E200000820000008200000000000000000000BE +:100E30000000000000000088000000000988009009 +:100E400000000000000000000000000000000000A2 +:100E50000000000000000000000000000000000092 +:100E60000000000000000000002000000000000062 +:100E70000000000000000000000000000000000072 +:100E800000000000000000000080000000000000E2 +:100E90000000000000000000000000000000000052 +:100EA0000000000000000000000000200000000022 +:100EB0000000000000000000000000000000000032 +:100EC0000000000000000000C0000000000800005A +:100ED000000000080000000000A00000000000006A +:100EE0000000000000000000000000010000000001 +:100EF0000000000000000000000000A00000000052 +:100F0000000000000000000000A000200000000021 +:100F100000000000000000000000000000000000D1 +:100F200000080000000000000000000000010008B0 +:100F300000000000000000000000000000000000B1 +:100F400000000000000000000000000000000001A0 +:100F500000040003900000000020000020000000BA +:100F6000000000210000000000000400002100003B +:100F700040200000042000000000040000004000A9 +:100F8000C00004000000000000000000000000009D +:100F90000000000000000000000000008800400089 +:100FA00000000005002000000400000004040020F0 +:100FB0000020000000040000000800000004000001 +:100FC00000000000002004000000000020020000DB +:100FD00000200000000000000000000000000000F1 +:100FE00000000084000000C000C002000000008477 +:100FF000008400000000000000000000000000006D +:1010000000000000000000000000000000000000E0 +:1010100000000000000000000000000000000000D0 +:10102000008209904000090011000000000000004B +:1010300000000000000000000000000000000000B0 +:1010400000000000000000000000000000000000A0 +:10105000000000000000C000000000001000C00000 +:101060000000000000000000000000030009000074 +:101070000000000000000000000200020800000064 +:1010800090000000000000000000000000000021AF +:101090000000000000000000000000000000000050 +:1010A00000008400000000000000000300000003B6 +:1010B00000000000000000000000000300008400A9 +:1010C0000000000000000000000000080000000315 +:1010D0000005000384000000000000000000000084 +:1010E00000000000000000000000000005000000FB +:1010F00000000000000000000000000000000000F0 +:1011000000000000000000000000000000000000DF +:1011100000000000000000000000000000000000CF +:1011200000000000000000000000000000000000BF +:1011300000000000000000000000000000000000AF +:10114000000000000000000000000000000000009F +:1011500000000000000000000000C1000001C1828A +:101160000100C0000140C089C000C0010002C0826F +:101170000000C0000041200000002101000191900A +:101180000100C0000140C089C000C1010004C0824C +:101190000000C0000141200000030000C100000168 +:1011A000C1820100C0000140C189C000C10100042A +:1011B000C0820000C0000021100000018801000171 +:1011C00000C10001000100C100890101000100020D +:1011D00000100001400100C100000041C141004178 +:1011E000C1A04141804141A08903800885030000DE +:1011F000808008418041118300001141C1080041F5 +:1012000010084141804141A0900380108803008074 +:101210008080034180411083000000000041C141F3 +:101220000041C18841418041418290038910880377 +:101230000080808000418041030380000041004124 +:10124000004100830041004100850841081004412D +:1012500000000080004180410090000041000341F7 +:1012600000C10000414182410041084120C10441C8 +:10127000008083804100C14100C1801041002141B4 +:1012800000080000414188410041204102C1104155 +:10129000008083804100C14100C1800800024100FC +:1012A000084100C10000414188410041204108C17E +:1012B000904100808380C100C14100C1800841008D +:1012C00003000000008041008800000002808500CB +:1012D0009080008088004100C10000108000000064 +:1012E000010100C10002000140010003010102C12F +:1012F000900300C083C00200400100C182010000D1 +:10130000000100890000000141010009000191C1B4 +:10131000908900C083C00800400100C18201000024 +:101320000000010100C1000000014101008900012D +:1013300090C1038900C083C01000400100C1820138 +:1013400001000100000000C00100C1000000001009 +:10135000080008100040C1009100C1000091820007 +:10136000002000000340000000000000C182108344 +:1013700000100000C140000000000000C10000009B +:10138000004000004040010000000000C1820283D4 +:1013900000200000C140000000000000C00000006C +:1013A000000000400000C183000000000000C18276 +:1013B000028300100000C140000000000000C000D7 +:1013C000000000C00001C0C100000000000100C119 +:1013D000C0020003000100C1000000000001000184 +:1013E00000000000002141C1000000000041C19048 +:1013F000008300410041C1C1000000000021904174 +:10140000000000800021C1C1410000000041C182F4 +:10141000008300410041C1C1000000000021834160 :101420000000000000800041C18300000000004176 -:10143000C191808300C10041C1C1000000000021B2 -:101440001041000000800041C1C1200000000041A7 -:10145000C189038300410041C1C100000000002197 -:101460008841000020C180008002000041008041CE -:1014700020C103C1C10080C180C1000041410008FA -:1014800000800383C18080418091000041000041C1 -:1014900004C103C1C141808080C1000041410010EE -:1014A000808010410000C188804180C10000410857 -:1014B000804140C103C1C141808080C1000008411A -:1014C000002080800310C1C1800080200000410006 -:1014D000804190C103C1C141808080C10000414171 -:1014E000002080801083A1C1400040020000000065 -:1014F000020110C101C1408810C182C10000000179 -:10150000000120C0001140C008018210000000004E -:10151000880110C101C1401110C040C1000000018C -:10152000000182C00008000040C12001824000008C -:101530000000200109C101C1409110C040C100005C -:10154000010100008240008940C18200402000006B -:101550000000820105C101C1409102C040C10000EC -:101560000001000004C00005000000000000484227 -:101570000000000000004842484200600600484267 -:101580000000000000004842000000000000484247 +:10143000C190808300C10041C1C1000000000021B3 +:10144000894100000080004180C10000000000418F +:10145000009080040041004100C1000000000041F4 +:101460000010000020C18000800200004100804187 +:1014700011C103C1C1C1008080C100004141000809 +:101480008080080320C1800080C10000410300412A +:10149000C1C103C1C1C1808080C1000041410000C1 +:1014A000008008200000C188804180C100004110F8 +:1014B000804191C103C1C141008080C10000414110 +:1014C000000000802088C100800080C10000412011 +:1014D000000041004100C1410000800900004100BE +:1014E000000080004100A1C1400040020000000057 +:1014F000040120C101C1400510C040C1000000012D +:10150000000082C00110A1C1820040C100000000A3 +:10151000900102C101C1400502C040C100000001AC +:10152000000090C00108000040C12001824000007E +:101530000000200108C101C1401190C040C100005D +:101540000001000020C00003C1004000C0C1000035 +:101550000100880010000100C1919000C00000004F +:1015600001000000C000010000000000000048422F +:10157000000000000000484260060060060048428B +:101580000000000000004842000000000000481178 :101590000000000000004842484200600600484247 :1015A00000000000000048420000000000000000B1 -:1015B000484200000000000048426006006006004B -:1015C0004842000000000000480600000000000043 -:1015D000484200000000000048426006006006002B -:1015E00048420000000000004842000000000000E7 +:1015B00048420000000000004842884100600600E8 +:1015C0004842000000000000484200000000000007 +:1015D00000420000000000000012811200480700D5 +:1015E00048000000000000000000000000000000B3 :1015F00000000000000000000000000000000000EB :1016000000000000000000000000000000000000DA :1016100000000000000000000000000000000000CA @@ -188842,438 +188842,438 @@ :1017A000000000000C4000000000000002C267E6DC :1017B000000067E643400000000000000231E00046 :1017C0000000000000000C4000000000000002C209 -:1017D00067E667E643400000000000000231E000D9 -:1017E0000000000000000C4000000000000002C2E9 -:1017F00067E62080200020028204C0082084400088 -:10180000880088000020880288828800888020095B -:10181000210420052000200002100000400240109A -:1018200002054002A00302000204880840000409E7 -:1018300020020003200040042005040288002090BC -:101840002004201120000480C00440104090200992 -:10185000201088204010040504090403880488111E -:10186000880420002008040840104003C01004052C -:10187000A020001000100000000100010000002066 -:1018800000002000200000010003082040000004A8 -:101890000000020100004000100080004002000033 -:1018A0000000A00000000000200000010000000077 -:1018B0000000000100000000000000000001000026 -:1018C0000010000000000000001040004100002057 -:1018D000000000000901000000900000000000006E -:1018E00000080001049000900000090000020000C0 -:1018F00040080001000400040010000840401010DF -:101900000004000482040008901010410000001040 -:10191000000400080200820082080010020000009B -:10192000001000410000000800050008200400002D -:1019300010040010040800010005001100038410C9 -:1019400000090804000802100004000482090005D0 -:101950000004040320202000000300080005000804 -:10196000000900040010A00900040003000900059C -:101970000005000420080003000800080084040992 -:101980002004000900080008000420A04110049071 -:10199000000800000004000800080004090800080E -:1019A00004C0200800080008030400040488001094 -:1019B00000840010208400900000410820020404EC -:1019C00020820010408841880008090840822010C9 -:1019D00000080008058400094004200820040004D1 -:1019E000200020082084200809020482200420828C -:1019F000050404822082040440020091900984823C -:101A00008210000300100404900520050008004126 -:101A100000080040000500200004004002410009C9 -:101A200000080009002100200040000300050040DC -:101A30000021000900050008200900000003002122 -:101A4000000300210008C00882210021004140035A -:101A50000002004000214083C04140110009000500 -:101A600088080084200300110109200800100005E7 -:101A700000089011000902410021000941200000E6 -:101A80000010022002024090201000100000000010 -:101A90000084094000000808002000A00090808811 -:101AA000004000000010000020000090091000100D -:101AB0000010000200900000000041400000000003 -:101AC00000840020038200020320008200024010F4 -:101AD000008804A0092000000020100003000090EE -:101AE000000005880510C1A0031040408040100090 -:101AF0000088404041041000004000000808C00079 -:101B0000001182038208820082840811118401007E -:101B100001001000004000414100000001100000E1 -:101B2000000000000800080000000800A000880075 -:101B30001000004008000800C000820020400000A3 -:101B4000820082101000820000000000000084006B -:101B5000000008000003000504108400C000040019 -:101B6000000082008400100000001000400000858A -:101B7000100082008400820040000000100000007D -:101B8000030041820010000800A0002120A00405ED -:101B900040100400048205C0000020000310200152 -:101BA00041040008090000A00082000000820082B9 -:101BB000000000820004200000900008008241C064 -:101BC000000004104190410840C0008241A0031071 -:101BD000000011201100008421000882001041A0A3 -:101BE0002108008420820884408200100084109024 -:101BF0000002008200820082088208080082001031 -:101C0000048240100402022021000005C0050005E6 -:101C10000041040000000004001090112021000881 -:101C2000002000020000000200410002004000000D -:101C3000000508100008080582080040C002C00422 -:101C400082100000000090418400824000400009A2 -:101C50000002A0030003000800119002000500C06C -:101C6000010001208421844100000010840200C191 -:101C7000002100100008000900000005000300100A -:101C8000000408210000A1900303080000C000A088 -:101C9000000000A00082000400A000000088850071 -:101CA00010900090200100000000004000000000A3 -:101CB0000084001000A000C000A000000000200070 -:101CC000004000A000000082008800000002009098 -:101CD0000000110011040200209021000088000281 -:101CE0000410042008890020000000000900000002 -:101CF00000024000409005000090000040000004F9 -:101D00000300009009908400000000040008000017 -:101D10000480820200A0002140A108112185002139 -:101D20000000A0218290000920210000040000088A -:101D3000000200030004000800000003000400008B -:101D40000021001100000001C020000810008400E4 -:101D50000000000582009004000000100008084008 -:101D60000000000800050021880320040010002165 -:101D700000410004010500000005002100210008C9 -:101D80000011000582000005000000000390030020 -:101D900011008220000400050000052000900420AE -:101DA000000021C0000000040000001010004108E5 -:101DB00009000088000000900000058800000482EF -:101DC00000000800000000000000009000820020D9 -:101DD0000204410000000004030000000000200095 -:101DE000030000000984000020400084201020042B -:101DF000000411C02183208202900008000400002A -:101E000000000000000000000000041120C00008D5 -:101E100082C000A021048402908200A090820088E9 -:101E200090201104001140C00084A085001000041F -:101E3000C010A088018800A0000800000000000079 -:101E4000000000000000840000000001000000000D -:101E50002000000004A0008200C00804A0A0000828 -:101E6000000240C0000090000000000000000000E0 -:101E700000000000010020009000000000000000B1 -:101E800000000000000000000000000080A0001121 -:101E90000083800300801000808080C000030085E4 -:101EA00000908002901004908000000000200080CC -:101EB000008280100080020000000080000000000E -:101EC0000000000000001100800000000000000081 -:101ED0000000000000008080000000008080008082 -:101EE0000080008000000000800000000000000072 -:101EF0000000000000001100880040000000000009 -:101F00000000000000000000000000000000C00011 -:101F10002104021089058080801180400310820016 -:101F2000041185004000008010110090000880001E -:101F3000801100808000000000830000008000000D +:1017D00067E660C603000000000000000031E00082 +:1017E0000000000000000C0000000000000000C02D +:1017F000630600000002100000000008000800005E +:1018000000000000000800000000000000000000D0 +:1018100000000000000000000000000000000000C8 +:1018200000000000000000000000000000000000B8 +:1018300000000001000000000000000000000000A7 +:101840000000000400000000000000000000000094 +:1018500000000004000000000000000000009000F4 +:101860000000000000009000080000000000900050 +:101870000000000000000000000000000000000167 +:101880000000000000000000000400001100000043 +:101890000002000000000000000000000000000046 +:1018A00000000000400000000000000800000008E8 +:1018B0000000000800000000000000000000000020 +:1018C0000000000000000000000000000000000018 +:1018D0000000000000000000000000000000000008 +:1018E00000000000000000020000000000000000F6 +:1018F00000000000000000000000000000000000E8 +:1019000000001000000000000000000000000000C7 +:1019100000000000000000000000000000000000C7 +:101920000000000000110000000090000000020014 +:1019300000000000000000000000000000000000A7 +:101940000000000000000000000000000000000097 +:101950000000000000000000000000000000000087 +:101960000000000000000000000000000000000077 +:1019700000000000000000000002000800080084D1 +:1019800000840000800000000008000000840010B7 +:10199000000000080000000800000084008400002F +:1019A000000800000000000000100088000000088F +:1019B0000000000800000008000000000000000017 +:1019C000000000880000000000000000000000008F +:1019D0000088000000840000008400040000000073 +:1019E00000000000000000000000000000000000F7 +:1019F00000000000000000000000000000410000A6 +:101A0000000010090000000001800000000000003C +:101A10000008002100000400000000000000004158 +:101A20000000001100000000000000000009000993 +:101A300000000000000000000000000000000000A6 +:101A40000000000000000000000000000000000096 +:101A50000000000000000000000000000000000086 +:101A6000000000000000000800000040000000002E +:101A700000000000000000000000000000880020BE +:101A800041044000A0000000000020080000000801 +:101A900000A0111000820082000000000000000081 +:101AA000410011882000000000000000000000003C +:101AB000000409041190000000000000000000086C +:101AC000000011001100000000000000000000886C +:101AD0000000090209041188000000000000020053 +:101AE00002000000000000840084000000000000EC +:101AF000000000A0400000C0020000000000000044 +:101B000000000000000000000000008001800000D4 +:101B100000000000000000000000000000000000C5 +:101B200000000000000000000000000000000000B5 +:101B300000000000000000000000000000000000A5 +:101B40000000000000000000000000000000000095 +:101B50000000000000000000000000000000000085 +:101B60000000000000000000000000000000000075 +:101B700000000000000084000000000000000000E1 +:101B80000000000000000000000000000020022013 +:101B90000000000000000000000000000000000045 +:101BA0000000000000000000000000000000000035 +:101BB0000000000000000000000000000000000025 +:101BC0000000000000000000000000000000000015 +:101BD0000000000000000000000000000000000005 +:101BE00000000000000000000000000000000000F5 +:101BF00000000000000000000000000000000000E5 +:101C00000000200000009000000000000000000024 +:101C10000040000000000000000000000000000084 +:101C20000800001100000980000200000000000010 +:101C300000000000000000000000000000000000A4 +:101C40000000000000000000000000000000000094 +:101C50000000000000000000000000000000000084 +:101C60000000000000000000000000000000000074 +:101C70000000000000000000000000000040000024 +:101C800000000000000000000008200000A000008C +:101C90000000000202000000000000000088200098 +:101CA00005000000000000000810000000904188BE +:101CB00000000000400000880088050000040400C7 +:101CC000050000880000000000880000000020904F +:101CD0000004119000000900098800880400000435 +:101CE0000000200000880000000000400000008488 +:101CF0002084000800000200204000000490000042 +:101D00002000000011000003000800000000000097 +:101D100000000000000000000000000900000000BA +:101D200000000000000000000000000000000000B3 +:101D300000000000000000000000000000000000A3 +:101D40000000000000000000000000000000000093 +:101D50000000000000000000000000000000000083 +:101D60000000000000000000000000000000000073 +:101D7000000000000000000000210003000000003F +:101D80000000000000000000000000000000000053 +:101D90000000000000000000000000000000000043 +:101DA0000000000000000000000000000000000033 +:101DB0000000000000000000000000000000000023 +:101DC0000000000000000000000000000000000013 +:101DD0000000000000000000000000000000000003 +:101DE00000000000000000000000000000000000F3 +:101DF00000000000000000000000000000000000E3 +:101E000000000000000000000000000000000000D2 +:101E100000000100900000900000000000000000A1 +:101E200000000000000000000000000000000000B2 +:101E300000000000000000000000000000000000A2 +:101E40000000000000000000000000000000000092 +:101E50000000000000000000000000000000000082 +:101E60000000000000000000000000000000000072 +:101E70000000000000000000000000000000000062 +:101E80000000000000000000000000000000000052 +:101E90000000000011008021000000000000000090 +:101EA0000000000000000000000000000000000032 +:101EB0000000000000000000000000000000000022 +:101EC0000000000000000000000000000000000012 +:101ED0000000000000000000000000000000000002 +:101EE00000000000000000000000000000000000F2 +:101EF00000000000000000000000000000000000E2 +:101F000000000000000000000000000000000000D1 +:101F1000000000000000000900801108000000001F +:101F200000000000000000000000000000000000B1 +:101F300000000000000000000000000000000000A1 :101F40000000000000000000000000000000000091 -:101F50000000000000000000800080000000000081 -:101F600080000000000000000000000000008080F1 -:101F700000000000000080000509050010040803AF +:101F50000000000000000000000000000000000081 +:101F60000000000000000000000000000000000071 +:101F70000000000000000000000000000000000061 :101F80000000000000000000000000000000000051 -:101F900005000182054190A0881082010201901085 -:101FA00089001001820020C0004001C000A1000093 -:101FB0000800088400A010000000840588A0C0A0CC -:101FC00000000000000000000000000000000020F1 -:101FD0000000000000000000000088000200400037 -:101FE00084008800A0000400840020000084C00059 -:101FF00082080000840000001000000800000001BA -:1020000000010000000000000000000000000000CF -:102010000000A1A0C0C002A0900288000100A002A0 -:10202000A188900000000090C08820080108A0004E -:102030001011A000000000100804080200410082F6 -:102040008208000000000000010000000000000005 -:1020500000010000000000000000000002900002EB -:102060000084A0A0900200020082A00401000000F1 -:102070008800000000000000000000000000C00018 -:10208000000101010000000000000000000000004D -:10209000100000004000820005000480024111038E -:1020A000838911110000000000008000009011C120 -:1020B00080088088000000002000888080000008E0 -:1020C000009080800000000000000800000900006F -:1020D00000030004000000100010000000090000D0 -:1020E00000800080840000000000008080800800E4 -:1020F00000000000000000000000000000000005DB -:1021000000050003040800000000000000000000BB -:10211000000000000000039005040000821085A16B -:1021200021002080100800048040000000032100EE -:102130008804880083110020808080000000000057 -:102140008082008080000004000000000000000089 +:101F900000000000000000000001000201000088B5 +:101FA0000000000000000000000000000000000031 +:101FB0000000000000000000000000000000000021 +:101FC0000000000000000000000000000000000011 +:101FD0000000000000000000000000000000000001 +:101FE00000000000000000000000000000000000F1 +:101FF00000000000000000000000000000000000E1 +:1020000000000000000000000000000000000000D0 +:1020100000000000000000000000010090880200A5 +:1020200001000000000000000000000000000000AF +:1020300000000000000000000000000000000000A0 +:102040000000000000000000000000000000000090 +:102050000000000000000000000000000000000080 +:102060000000000000000000000000000000000070 +:102070000000000000000000000000000000000060 +:102080000000000000000000000000000000000050 +:10209000000000000000000000000000410000807F +:1020A000800908000000000000000000000000009F +:1020B0000000000000000000000000000000000020 +:1020C0000000000000000000000000000000000010 +:1020D0000000000000000000000000000000000000 +:1020E00000000000000000000000000000000000F0 +:1020F00000000000000000000000000000000000E0 +:1021000000000000000000000000000000000000CF +:1021100000000000000000000000000000000011AE +:10212000110000800000000000000000000000001E +:10213000000000000000000000000000000000009F +:10214000000000000000000000000000000000008F :10215000000000000000000000000000000000007F -:10216000000000808080000000000004008000006B -:1021700000000083008000000008000000800000D4 -:102180000580051103001011000000000000000090 -:10219000000000000000000002A008C14020200054 -:1021A00002C12088000800000009108810C000014A -:1021B000050811000300050104001020841004002C -:1021C00004008811028208000000000000000000E6 +:10216000000000000000000000000000000000006F +:10217000000000000000000000000000000000005F +:10218000000000000000000000000000000000004F +:10219000000000000000000000000000000000003F +:1021A00000010100004000000000000000000000ED +:1021B000000000000000000000000000000000001F +:1021C000000000000000000000000000000000000F :1021D00000000000000000000000000000000000FF -:1021E0000000200000100408000040004009000426 -:1021F00000000000000800100000000100A00040E6 -:10220000000000C00001000000010000000000000C -:1022100000000000000000000000811100600600C6 -:10222000C200821100E00700840000810000070066 -:102230000082C80000E00000000000000000000074 -:1022400000120000000000000000810000E000001B +:1021E00000000000000000000000000000000000EF +:1021F00000000000000000000000000000000000DF +:1022000000000000000000000000000000000000CE +:1022100000000000000000000000000000000000BE +:102220000000000000E00700820000000000000045 +:10223000000000000000000000000000000000009E +:10224000000000000000000000000000000000008E :10225000000000000000000000000000000000007E :10226000000000000000000000000000000000006E -:102270000000000000000000070000000000000057 -:1022800000000000000000E000004100000000002D -:1022900000000000000A000007000000D70700004F -:1022A0008604820000FFFFFF00FFFFFFF0FFF0FF4A -:1022B00000FFFFFF00FFC3C37D7D3F3FFF3CC30026 -:1022C000AAFFAAAA6D2C4504C00028000000000047 +:10227000000000000000000000000000000000005E +:10228000000000000000000000000000000000004E +:10229000000000000000000000000000000000003E +:1022A0000000000000000000F0F00000000000004E +:1022B000000000000000000000000000000000001E +:1022C000000000000000000000000000000000000E :1022D00000000000000000000000000000000000FE -:1022E0000000000000000000F0F055054101000072 -:1022F00000FFC341030100000000000000000000D7 +:1022E00000000000000000000000000000000000EE +:1022F00000000000000000000000000000000000DE :1023000000000000000000000000000000000000CD -:102310000000000000000000000000000000D707DF -:10232000D707FF7DFB790000FF000000FF00F000F1 -:10233000F0000000FF00AAAA0F0F7D7D3F3F8E8EA8 -:102340008E8EFFFFFFAAEFAEC786C00028000000F8 +:1023100000000000000000000000000000000000BD +:1023200000000000000000000000F0F000000000CD +:10233000000000000000000000000000000000009D +:10234000000000000000000000000000000000008D :10235000000000000000000000000000000000007D -:1023600000000000000000000000F0F0FF0FC303B9 -:10237000000000FFFF550F050000000000000000F6 +:10236000000000000000000000000000000000006D +:10237000000000000000000000000000000000005D :10238000000000000000000000000000000000004D :10239000000000000000000000000000000000003D -:1023A000F03CF0FF002882AAFCF50C05553C553C9A -:1023B000173F1703FF003C3CFF0FBE0F000000005B -:1023C000FFFF5555303030300D0FFDFF0F000F006F +:1023A000000000000000000000000F0F0000FFFF11 +:1023B000000000000000000000000000000000001D +:1023C000000000000000000000000000000000000D :1023D00000000000000000000000000000000000FD -:1023E000000000000000000000003C3C0C08203C05 -:1023F000303C0F0F0C002028303C00000000557DC1 -:102400005528000000000F0F5F5F00000000000073 +:1023E00000000000000000000000000000000000ED +:1023F00000000000000000000000000000000000DD +:1024000000000000000000000000000000000000CC :1024100000000000000000000000000000000000BC -:102420000000E8EBE8EB557DD7FFFCFF0C003F3CDC -:10243000303C170F170F2D2D3C3CFF0FFF0F0000F6 -:102440000000FF3055555F5F50500F0FFFFFFF55E5 -:102450000055000000000000000000000000000027 -:102460000000000000000000000000003C3C0008EC -:10247000283C3C3C0F0F08083C3C3C3C0000000062 -:10248000007D002800000000AFAFFFFF000000004B +:102420000000000000000000000000000F0F00008E +:10243000000000000000000000000000000000009C +:10244000000000000000000000000000000000008C +:10245000000000000000000000000000000000007C +:10246000000000000000000000000000000000006C +:10247000000000000000000000000000000000005C +:10248000000000000000000000000000000000004C :10249000000000000000000000000000000000003C -:1024A0000000000005614A3E850D00A00061002487 -:1024B0008019000080610026001D000000613004CA -:1024C0008009000000613006000D00010061300647 -:1024D000001D000100610006800D00000061000683 -:1024E000000D0000000000610006000D000000006B -:1024F00000000010000000000000001000000500B7 -:102500000A08050000A000000000000000000061B3 -:102510000007000D000000000000000000000000A7 -:10252000002005000000FFFF3C0000000000EF2C31 -:10253000C7041CFCBCFC00000000000000004DFFB4 -:102540004D005050FAFA00000000000000000000AA +:1024A00000000000000000000000000005002A06F7 +:1024B000054C00A800000000000000000000000023 +:1024C000000000000000000000000000000000000C +:1024D00000000000000000000000000000000000FC +:1024E00000000000000000000000000000000000EC +:1024F00000000000000000000000000000000000DC +:1025000000000000000000000000000000000000CB +:1025100000000000000000000000000000000000BB +:1025200000000000000000000000000000000000AB +:10253000FF0000FF0000000000000000000000009D +:10254000000000000000000000000000000000008B :10255000000000000000000000000000000000007B -:102560000000FF7D00FF000000000000A0A0BCBC38 +:10256000000000000000000000000000000000006B :10257000000000000000000000000000000000005B :10258000000000000000000000000000000000004B -:10259000FF550F3C8CBC8FBF000000000000000006 -:1025A00000000000000000003C003C0000000000B3 -:1025B000EF04EF041C0CBC0C000000000000000045 -:1025C000CFFF0C00F078F078000000000000000061 -:1025D00000000000000F000F0000000000000000DD -:1025E00000000000FF7DFFFF000000000000A0A031 -:1025F000BCBC000000000000000000000000000063 +:10259000000000000000000000000000000000003B +:1025A000000000000000000000000000000000002B +:1025B0000000FF0000FF000000000000000000001D +:1025C000000000000000000000000000000000000B +:1025D00000000000000000000000000000000000FB +:1025E00000000000000000000000000000000000EB +:1025F00000000000000000000000000000000000DB :1026000000000000000000000000000000000000CA -:10261000000000550F3C80B083B3000000000000B4 -:10262000000000000000000000001C101F1000004F -:10263000000055555555AAAAFFFFFF0CF300CF45E2 -:10264000000055FF5500AFAFAFAFFCFC3C3C0000B5 +:1026100000000000000000000000000000000000BA +:1026200000000000000000000000000000000000AA +:1026300000000000FF0000FF00000000000000009C +:10264000000000000000000000000000000000008A :10265000000000000000000000000000000000007A :10266000000000000000000000000000000000006A :10267000000000000000000000000000000000005A :10268000000000000000000000000000000000004A -:102690000000000000000000E0E3ECEF000000009C +:10269000000000000000000000000000000000003A :1026A000000000000000000000000000000000002A -:1026B000070707003C3C3C3CAAAA0000FF0CF300C3 -:1026C000CF45CF4555FF5500A0A0A0A0FCFCFFFFC3 +:1026B000000000000000FF0000FF0000000000001C +:1026C000000000000000000000000000000000000A :1026D00000000000000000000000000000000000FA :1026E00000000000000000000000000000000000EA :1026F00000000000000000000000000000000000DA :1027000000000000000000000000000000000000C9 -:102710000000000000000000000020232C2F00001B -:10272000000000000000000000000000000089021E -:102730002004200401118409200800040000101066 -:1027400020002002200400088804201020044009F2 -:10275000C0002009020020102000400200042000D8 -:102760004000201021104000082004040400000351 -:10277000C0102010200420040404100084034082B0 -:1027800020034009200304892003200320100203B2 -:1027900020840410040421102011C00484082004A3 -:1027A00020054010400988094009200388040204DC -:1027B00002900885000002000000000000001000E8 -:1027C00000000000000000010000000100C0000542 -:1027D00000000000000000000000400000000000B9 -:1027E0000000000000002000000080010000000048 -:1027F00000000000A00040019083400000000000A5 -:102800000011000020001000212000000000400006 -:1028100010000004090040030200100040084100BD -:1028200000404000008400001084090040000008BF -:102830000000000300040010000902040000080565 -:1028400008040040020882100210000900048200FF -:10285000000900000041000400050500040408040C -:102860000010000004080009000482040004002095 -:1028700000210002018490040109040400050805F8 -:1028800000088210880400000020001000040009E5 -:10289000004101100010200000050005A1042010D7 -:1028A0000004021000090003200320022008004158 -:1028B00090418408040804090988200200040510D6 -:1028C00003C0000900080000020800080004000816 -:1028D0004108400020040008000800882008000883 -:1028E00010C100080008891000080008001000400E -:1028F00000090084000020040005200820082008AA -:10290000058200040408400809084109200802085B -:102910004004090802C00508000820040404200936 -:10292000A0A00488840204084104050404040202EF -:102930000004040204880002892000020004020846 -:102940004004880884410005008388410003881002 -:1029500090414040A00800080040002110000009FC -:102960000502044000114041002100210121000026 -:102970000011000900040000200800080040401178 -:102980000002C008020540030409880290100003F9 -:10299000842100088421200310020005000520087E -:1029A000000500090002400400400008000800057E -:1029B0000010000588034021081002100920210999 -:1029C0008010032008A011821088040400040082F3 -:1029D0000082084003020084000200000000004062 -:1029E0000000020100C000000040000800A020001C -:1029F00005000010080008100000002041200320FE -:102A0000400000820082038240022082090000828E -:102A100000401184418440840408412000400000AB -:102A2000800010A0000010000002050200C000009D -:102A3000000200A000C0414000020041000200402E -:102A40000000C009840084008500880000000002A6 -:102A5000200000000300400001000040084040004A -:102A60000040210000108340840000000880900096 -:102A70000100000008088200020000000800820334 -:102A80000000890000410008084082008210A00870 -:102A9000902102000005000000C0082182091011E9 -:102AA000400382111010000208118205820082008A -:102AB00082050000040000000800080000840000F7 -:102AC0002008000000A00200000020A0001000105C -:102AD00009A0C0820902A0000000200003114001EB -:102AE0000090400982820000200100000082002046 -:102AF00000040800030800A008040008000000C04B -:102B0000028200100200001008000010409000C077 -:102B100040A040001000401040822102000209A0A5 -:102B2000118800081000004000A0001010A0001044 -:102B3000088204840008008400100000038400213F -:102B4000880202029041C0200102028400840140F8 -:102B5000A002004040912084000200400084001147 -:102B600000400210A0110000020020020202000238 -:102B700000408202201120800011842010200000DB -:102B8000000800030404041000418200C041002139 -:102B90000003000510200011000004200041001176 -:102BA00000030082204100000003210484200088EB -:102BB000000900050005101000030003400000118B -:102BC00009000482A1A1000003902090114000415F -:102BD00002A00900100440400340201010400240B1 -:102BE00004000000802020200000004000C0800180 -:102BF0000010000000008400042000A0000100017B -:102C000000000000008800050000200000000020F7 -:102C100011040020410004040320000400A000006F -:102C2000004010004004890040C00040A0010000A6 -:102C300000040000410000A00910000200A01000E4 -:102C400011000000000400004021001003A1002139 -:102C500090090003028400001002000541040000F6 -:102C60002000014000000010009000800041C004DE -:102C700000000010000801020041002100040000D3 -:102C80004083000100210021001141040005820061 -:102C900000050005002100009005002188000010BB -:102CA0000011001000050021001000050003C00302 -:102CB000000400410003004000410004000000083F -:102CC000C021100300000389110000000090A0043F -:102CD00009C0214000008005000200020000200120 -:102CE00004828320409040000000030240040084DE -:102CF00000010000000105080801000000000000BC -:102D000000000002000000000000000020000000A1 -:102D1000020000A000000000001011C000004000F0 -:102D2000400000000003008400820300000011C086 -:102D3000099009830000000000210000000000004D -:102D400000000000001040100020089090020808C9 -:102D50000820020284C04010009088C01120100892 -:102D6000001088889088001108A0001020214011D0 -:102D70004089C009080800A0004002880810A00887 -:102D800000080288104000004141002001080004B2 -:102D900000000000900000000200000000000000A1 -:102DA00090A0002000C01040A1A000C0011010821F -:102DB000084100C001C0C083000000000000000006 -:102DC0000000000000000000880020808003000058 -:102DD0008983A10002080000800011038000418364 -:102DE000C000082180000011404085000041001013 -:102DF0008008092100838008000003808080808093 -:102E000000800080808080000000849100804191DB -:102E100000890000080000000000800000000000A1 -:102E20000900080000800000800009000000028006 -:102E30000000809100004100000800000000000038 -:102E40000000000000000000000080809091000958 -:102E50008090038000A1808088828080009108118A -:102E60008385809000884180214000110089000204 -:102E70000000918003401010210209000811101079 -:102E80004000800080008021808000000000C1217F -:102E90009191800000000000800000008000800010 -:102EA00000000080020021050580080000040021C8 -:102EB00000840000000000099189400000008000AB -:102EC0000000800000000000000000004040098277 -:102ED0009002104190082082820210C082409082AD -:102EE000020810C010C002840210020300008840D3 -:102EF00088008484089000850200A1A000000201DF -:102F0000098891001000401008891008000088000E -:102F1000400209A00200020010000800A000020008 -:102F20008200000004900100008900A00800000059 -:102F300000A000100000A000A0C091A003000000AD -:102F400004000000100000000000000000000484E5 -:102F500001112190C08810200120C00308891003AE -:102F60000191C0A1108908C11041C191080321033A -:102F700002104108008901010010850982028801C0 -:102F8000000884052190100200028408A0000000BF -:102F9000C0C0000200092100000100000001000083 -:102FA000000000400290000008A0000000C0880857 -:102FB00020044008C000202010A00004C0C1A110BF +:1027100000000000000000000000000000000000B9 +:1027200000000000000000000000000000000000A9 +:102730000010000400000000000000000000000085 +:102740000000400000000000000000000000000049 +:102750000000000200021000000000000000000065 +:102760000000000000000000000000000000000168 +:102770000000000000000000000000000000000059 +:102780000000000000000000000000000000000049 +:102790000000000000000000000000000000000039 +:1027A0000000000000000000000000000000000029 +:1027B00000000000000000000090009000000000F9 +:1027C0000000000000000000000000000000000009 +:1027D00000000002000000000000000000000000F7 +:1027E00000000000000000000000000000000000E9 +:1027F00000000000000000000000000000000000D9 +:1028000000000000000000000000000000000000C8 +:1028100000000002000400000000000000000000B2 +:1028200000000000000000000000000008000000A0 +:102830000000000000000000000004000400080088 +:102840000400000000000000000000000000020082 +:10285000020000000000000000000800040000006A +:10286000080000000000000000000200020000005C +:102870000000000000000000000000000800080048 +:102880000800080000000000000000000200020034 +:1028900082000000000000000000000000000000B6 +:1028A0000000020000000000000000000000000026 +:1028B0000000020000000000000000000000000016 +:1028C000040400840000000000000000000000007C +:1028D00003020002000000040004000000000004E5 +:1028E00000000000000000000000000000000000E8 +:1028F00000000000000000000000000000002000B8 +:1029000000000000000000000000000000000000C7 +:1029100000000000000000000000000000000000B7 +:1029200000000000000000000000000000000000A7 +:102930000000000000000000040000000000000093 +:1029400000080000000020000000000000009000CF +:102950000000880000408800000000000211000014 +:1029600000000400C000000000000000000084001F +:102970000000000000000000C00000000000020095 +:10298000000000009000000088000000000000002F +:102990000000000004000000000000001000000023 +:1029A0000000000004009000000000000000000093 +:1029B000000000000000000000000008000800C047 +:1029C00000000000008200A000000000400000A005 +:1029D00000000000000000400004000000000000B3 +:1029E00000000000000004200000000021000000A2 +:1029F00000000000000000000000000000000000D7 +:102A000000000000000000000020000000000000A6 +:102A10000000000000000004000000000020000092 +:102A20000000000000000000110000A000000000F5 +:102A30000000004000000000000000000000000056 +:102A40000000001000000000011000000000000065 +:102A50000000000000000000000000000000000076 +:102A60000000000000100010000000000000000046 +:102A70000000000000000000000000000000000056 +:102A80000000000000000000000000000000000046 +:102A90000000000000000000000000000000000036 +:102AA0000000000000000000000000000000000026 +:102AB0000000000000008400000000000000000092 +:102AC0000000000000000000000004000000000002 +:102AD00000000000000000000000000000000000F6 +:102AE00000000000000000000000000000000000E6 +:102AF00000000000000000000000000000000000D6 +:102B000000000000000000000000000000000000C5 +:102B100000000000000000000000000000000000B5 +:102B200000000000000000000000000000000000A5 +:102B30000000000000000000000000000000000095 +:102B400000000000000000800000002000000000E5 +:102B50000040000000000000000000000000040031 +:102B60000011000020000000001100000000000023 +:102B70000000000000000000040000000000000051 +:102B80000000000000000000000000000000000045 +:102B90000000000000000000000000000000000035 +:102BA0000000000000000000000000000000000025 +:102BB0000000000000000000000000000000000015 +:102BC0000000002000C009004040042000010084F3 +:102BD0000000000000000090000000200000000045 +:102BE00004200000000000904000000000040000ED +:102BF0000020000008200004100400000000000075 +:102C00000000000000000004000404000000042094 +:102C10000000404004200920020400200088000039 +:102C200000000000000000000000000000000000A4 +:102C30000000000000000000000000000000000094 +:102C40004004000000000000000000000000000040 +:102C50000000000000000000000200000000000072 +:102C60000000000000000000000000000000100054 +:102C70000000000000000000000000000000000054 +:102C80000000000000000000000000000000000044 +:102C90000000000000000000000000000000000034 +:102CA0000000000000000000000000000000000024 +:102CB0000000000000000000000000000000000014 +:102CC0000000000000000000000000000000000004 +:102CD00000000000000000000000000000000000F4 +:102CE00000820000000000000082000000000000E0 +:102CF0004100050000000000050005000000000084 +:102D000000000000000000000000000000000000C3 +:102D100000000000000000000000000000000000B3 +:102D200000000000000000000000000000000000A3 +:102D30000000000000000000000000000000000093 +:102D40000000000020000000000000000000000063 +:102D500090000000000800000000000000000000DB +:102D60000000000000000000000000000000000063 +:102D70000000000000000000000000000000000053 +:102D80000000000000000000000000000000000043 +:102D90000000000000000000000000000000000033 +:102DA0000000000000000000000000000000000023 +:102DB0000000000000000000000000000000000013 +:102DC0000000000000000000000000000000000003 +:102DD0001100800000000000000000000000000062 +:102DE00000000000000000000000000000000000E3 +:102DF00000000000000000000000000000000000D3 +:102E000000000000000000000000000000000000C2 +:102E100000000000000000000000000000000000B2 +:102E200000000000000000000000000000000000A2 +:102E30000000000000000000000000000000000092 +:102E40000000000000000000000000000000000082 +:102E50000000000000800000008000000000000072 +:102E60000000000000000000000000000000000062 +:102E70000000000000000000000000000000000052 +:102E80000000000000000000000000000000000042 +:102E90000000000000000000000000000000000032 +:102EA0000000000000000000000000000000000022 +:102EB0000000000000000000000000000000000012 +:102EC0000000000000000000000000000000000002 +:102ED0000000000000000020000000C00000000012 +:102EE00000000000000000000000000000000000E2 +:102EF00000000000000000000000000000000000D2 +:102F000000000000000000000000000000000000C1 +:102F100000000000000000000000000000000000B1 +:102F200000000000000000000000000000000000A1 +:102F30000000000000000000000000000000000091 +:102F40000000000000000000000000000000000081 +:102F5000000000000000010000888800010000005F +:102F60000000000000000000000000000000000061 +:102F70000000000000000000000000000000000051 +:102F80000000000000000000000000000000000041 +:102F90000000000000000000000000000000000031 +:102FA0000000000000000000000000000000000021 +:102FB0000000000000000000000000000000000011 :102FC0000000000000000000000000000000000001 -:102FD000C120118590034009C103111180210020F7 -:102FE000C1101103802191404120000883218002FB -:102FF000C1400000A003001040031088820889101F -:103000000040001080A11120848000118080840085 -:1030100000008000009100851111000200000020D6 -:10302000000500000080008000008000000000001B -:1030300000800000800000009080C1004141000538 -:10304000111100000000000000000000000000005E -:10305000000021000300A0008911082121002000A8 -:10306000A011210010898580831121210511C10043 -:103070008211800200000009800010000910110078 -:103080008803008900840080800800000008000098 -:10309000000000008900111100008300000400807E -:1030A0000000000000000000000000000009000017 -:1030B000800000028010000080008000C10000A09D -:1030C00091008300000000000000000000000000EC -:1030D00000000000911089040890100121018890DF -:1030E0000302090191008810858290014001880146 -:1030F0000890910110001010202010002090101056 -:103100000808110008409082C040820000001004AE -:103110000402000000001010C021C002A100000045 -:103120000020008800000000000000000000049063 -:10313000A000401008010401C0004000100010046D -:10314000C0418290A000000000C000C0000000004C -:10315000000000000000C80000E000000000C800FF -:1031600000E000000042C80000E000000042C8008B -:1031700000E0000060420000000000008200C80083 -:1031800000E000000000484200E0070000000000EE -:103190000000070000000000000000E000005013E5 -:1031A0000000000000000000000A0000070000000E -:1031B0000000000000000000000000E0000000002F -:1031C000000000E00000001300000000000000000C -:1031D0000000000000000000FF9F7C1C7EF618909D -:1031E000FC0CF606FEFC98FCFC0CF606FE6E98083D -:1031F0007E18F6907F761910C000CFFFC3CC333C09 -:10320000C000CFFF06009FFF3FFF7F7FFFF0FF0062 -:1032100060FF60FF00000000000000F00FFF6FE79C -:103220006FE7000000000000000000000000F690C2 -:10323000F69003F309097EC342C38106E7062424FE -:10324000F9F90FFFC399F37E307E00000000000003 -:103250000000000000000000000060007C1C3CF04A -:103260003CF03C3C66666E0C080C3C3C6666FC0C14 -:10327000FC0C3C3CF0F03F303F303FFF3000C33CA3 -:10328000C33C3FFF3000F9FF6000300010100F001A -:10329000FF0060FF60FF600C600C0000C6C6C6C681 -:1032A0006FE76FE700000000000000000000000072 -:1032B000F690F69003F3F9F97E004200819FE79FB4 -:1032C000242460600F00C399F342304200000000E4 +:102FD0000000000000000000410000800000090027 +:102FE00000000000000000000000000000000000E1 +:102FF00000000000000000000000000000000000D1 +:1030000000000000000000000000000000000000C0 +:1030100000000000000000000000000000000000B0 +:1030200000000000000000000000000000000000A0 +:103030000000000000000000000000000000000090 +:103040000000000000000000000000000000000080 +:1030500000000000000000000000001100000080DF +:103060000000000000000000000000000000000060 +:103070000000000000000000000000000000000050 +:103080000000000000000000000000000000000040 +:103090000000000000000000000000000000000030 +:1030A0000000000000000000000000000000000020 +:1030B0000000000000000000000000000000000010 +:1030C0000000000000000000000000000000000000 +:1030D00000000000000000000000000000010000EF +:1030E00000400000000000000000000000000000A0 +:1030F00000000000000000000000000000000000D0 +:1031000000000000000000000000000000000000BF +:1031100000000000000000000000000000000000AF +:10312000000000000000000000000000000000009F +:10313000000000000000000000000000000000008F +:10314000000000000000000000000000000000007F +:10315000000000000000000000000000000000006F +:1031600000000700822100000000000000000000B5 +:10317000000000000000000000000000000000004F +:10318000000000000000000000000000000000003F +:10319000000000000000000000000000000000002F +:1031A000000000000000000000000000000000001F +:1031B000000000000000000000000000000000000F +:1031C00000000000000000000000000000000000FF +:1031D00000000000000000000000000000000000EF +:1031E000000000000000F0F00000000000000000FF +:1031F00000000000000000000000000000000000CF +:1032000000000000000000000000000000000000BE +:1032100000000000000000000000000000000000AE +:10322000000000000000000000000000000000009E +:10323000000000000000000000000000000000008E +:10324000000000000000000000000000000000007E +:10325000000000000000000000000000000000006E +:103260000000000000000000F0F00000000000007E +:10327000000000000000000000000000000000004E +:10328000000000000000000000000000000000003E +:10329000000000000000000000000000000000002E +:1032A000000000000000000000000000000000001E +:1032B000000000000000000000000000000000000E +:1032C00000000000000000000000000000000000FE :1032D00000000000000000000000000000000000EE :1032E00000000000000000000000000000000000DE :1032F00000000000000000000000000000000000CE @@ -189282,405 +189282,405 @@ :10332000000000000000000000000000000000009D :10333000000000000000000000000000000000008D :10334000000000000000000000000000000000007D -:10335000000000000000000000000000000002C2A9 -:103360003EFE03423F7E663C6F3F1019767F180990 -:103370007E6F0BDB2FFF606F303F0CCFF330FF0C05 -:10338000F300069FF9600BF42FD0187EE7812D091A -:103390002D6F9696960F3C306660D2F6F6F60000DA -:1033A000FFFDFFFF306F3F6F00000000186F7E6F62 -:1033B000000000000C0CCFCFFFF6FFFF0000FFFF66 -:1033C0003F3F363F000000006FFF0FFF465EC7DF44 -:1033D00000000000FFFFFFFF0000000000000000F1 -:1033E00006F606F60F660F66663C6030303F303FEB -:1033F0003C0F3C0F00D024F466663C3C00FFFF000D -:1034000000F30CFF00FFFF000BF42FD03C3CC3C3C4 -:103410000F090F6F969696F0FFF0FFF0F6F6F6F6AE -:10342000000000FD00FF30603F6000000000180950 -:103430007E09000000000C0CCFCF3C3C3C3C00005F -:1034400000003F3F3F3F000000003C3C3C3C041C70 -:10345000859D00000000F6F690900000000000003E -:1034600000004061800480291002406180048029AE -:10347000100240618004802910024061800480298C -:10348000100240618006002D1002406180028025FC -:103490000002806100268009000085610A0E050D8A -:1034A00000A0000000613001000100000061000682 -:1034B000000D000000000020000000000061300648 -:1034C000000D000000613007001D000000613001A8 -:1034D00000010000000000000000000100000000EA -:1034E00000000000BFAB1501787850FAFC5CAC0C12 -:1034F000A0F5287DFCFC0C0C303FA0AF3F033F0340 -:1035000000FFE8E800000000FFFFC3FFCFD7D7D7D8 -:103510003A0A3AFA0000000000FFACAC00000000DC -:10352000A5A5A5A500003CFF3C0000F00FFF000092 -:103530000000FF007DFF0000000000000000000010 -:1035400000000000000000000000000000003C3C03 -:103550000F0F00F00FFF000000000000000000004F -:10356000000000000000FFEB1400F0F050FAFF0034 -:10357000FF0000FF287DFFFA050000FFA0AF1F1F1E -:103580000B0B00FF28EB000000000000003C0C14B7 -:1035900014143A3A3A3A0000000000FFA0AF0000CD -:1035A0000000A5A5A5A500003CFF3C0000F00FFF12 -:1035B00000000000FFFF7DFF000000000000000091 +:10335000000000000000000000000000000000006D +:103360000000000000003C3C0000FFFF00000000E7 +:10337000000000000000000000000000000000004D +:10338000000000000000000000000000000000003D +:10339000000000000000000000000000000000002D +:1033A000000000000000000000000000000000001D +:1033B000000000000000000000000000000000000D +:1033C00000000000000000000000000000000000FD +:1033D00000000000000000000000000000000000ED +:1033E00000000000000000003C3C00000000000065 +:1033F00000000000000000000000000000000000CD +:1034000000000000000000000000000000000000BC +:1034100000000000000000000000000000000000AC +:10342000000000000000000000000000000000009C +:10343000000000000000000000000000000000008C +:10344000000000000000000000000000000000007C +:10345000000000000000000000000000000000006C +:103460000000000000000000000005002A000540E8 +:1034700000A80000000000000000000000000000A4 +:10348000000000000000000000000000000000003C +:10349000000000000000000000000000000000002C +:1034A000000000000000000000000000000000001C +:1034B000000000000000000000000000000000000C +:1034C00000000000000000000000000000000000FC +:1034D00000000000000000000000000000000000EC +:1034E00000000000000000000000000000000000DC +:1034F00000000000000000000000000000000000CC +:1035000000000000000000000000000000000000BB +:1035100000000000000000000000000000000000AB +:10352000000000000000000000000000000000009B +:10353000000000000000000000000000000000008B +:10354000000000000000000000000000000000007B +:10355000000000000000000000000000000000006B +:10356000000000000000000000000000000000005B +:10357000000000000000000000000000000000004B +:10358000000000000000000000000000000000003B +:10359000000000000000000000000000000000002B +:1035A000000000000000000000000000000000001B +:1035B000000000000000000000000000000000000B :1035C00000000000000000000000000000000000FB -:1035D0003C3C0F0F00F00FFF000000000000000057 -:1035E000000000000000000055555555AFAFAFAFCB -:1035F00055550F0F2828EBEBD714D71400FFAAAAB4 -:10360000FF3CFF3C00AAFFAA3F3F0F0F0000000055 -:10361000CF0CCF0CA0B4F5B400000000FFFFFE3EBD -:10362000000000000000000000003F3F30300FFFAE -:103630000FFF00000000000000000000000000007C -:1036400000000000000045454500000000000000AB -:1036500000007D7D2828FFFF00FF00000000000023 -:10366000000000000000000000000F0F0F0FA0A0DE -:10367000A0A055550F0F2828EBEBD714D71400FF47 -:10368000AAAA003C003C00AAFFAA03030F0F0000F7 -:103690000000FF14EB000000FFFF0000000000002E -:1036A0000434000000000000000000003F3F303004 -:1036B00000F000F00000000000000000000000002A -:1036C0000000000000000000CFCFCF00000000008D -:1036D000000000007D7D2828000000FF00000000A1 -:1036E0000000000000000000000000000200208038 -:1036F000020220840590048821888808A088881008 -:1037000020022082048910082010200920092000AE -:1037100020022041200920102010C0002004200594 -:1037200020031002040004102000201000034005B4 -:10373000200504102003C0052009040420118880FE -:103740008410C0098410201000100402844120104D -:103750002010888420042010040420004009200048 -:1037600004052008880088088803880388048000EE -:1037700000408401004020040004200400000040B8 -:10378000100008000040204040000900000009022D -:1037900004020000000000004000000000040000DF -:1037A0004000040000850000200000000000000030 -:1037B0000000400020004000400800841010050474 -:1037C00004200000000020400000410020410000D3 -:1037D0004000000004100910C1901002C0820902CC -:1037E0000084000000000400100400840500009024 -:1037F0000008001000080040000820090210000422 -:103800000040000500100008000800100009000535 -:103810000000001100000010000001090004000871 -:1038200000100009001000100000000300108203C7 -:10383000000290108200900090110009020400051F -:103840000005020300030004820800C120050010E7 -:103850000011001100030009000900002009000503 -:103860000041900308000003000840098402020997 -:103870000010020202080082008800040010000804 -:1038800000050904000840040200000400040008C8 -:103890000008000841080408040400082008000883 -:1038A000201040080004000840882010400800084C -:1038B00000080000000900080008411020104184A1 -:1038C000200840082010040800080004091004041F -:1038D0000004200809040904200800082004020448 -:1038E00020080408040420044004408204840004E6 -:1038F000041004024040004008400040004088801E -:1039000000400240404088828840C040884020C03B -:10391000004084404040009000400040049101037A -:10392000004000030040A0400085004000800005EA -:103930000080024000030204000902400011001050 -:10394000000800030010842104038280002100404D -:103950000409000804200002000840210020200380 -:10396000210410092040880840038805C00088030E -:103970004011C020020520210402080811A1000303 -:1039800000400003000100010040040140A10001CB -:1039900008400041208200830240000303A1004050 -:1039A0002088002120A0100500850340000303406B -:1039B0000082034083090000001000100000008214 -:1039C000008300001000002140888040112000A0EA -:1039D000090800820002000000821088C1040090E3 -:1039E00091C0A089008280100000000000100082B9 -:1039F0000002000800A00008081082020210000463 -:103A0000080000808211200008000040C000102043 -:103A100082049005100082001021002182A1000381 -:103A200040024000C000820082400000404100800F -:103A300001000003A021000000000400000040007D -:103A40000000A009C0038240000010200800100000 -:103A50001011842100058200840504400405100330 -:103A600010008200100982C0020382008200C000A0 -:103A7000A0400800100010000840001000000000E6 -:103A8000000400820004000080820000080000089A -:103A900000040082008800000000001000000040C8 -:103AA0000008804100A00000000000C000100900D4 -:103AB0000840020000C000000000000003820084F3 -:103AC000000000080000401000000090000100C04D -:103AD00008A004000084000800C000A000C000A0EE -:103AE000001000000284009000048084008400C064 -:103AF00009A040C0000004842184008202404040AC -:103B000002100008020090A10002080000000080DE -:103B100040050009000940400203010202002002A2 -:103B200000021040020040830202004002044008EC -:103B300000400021001111110021000300000020AD -:103B4000002082030020000400020020000300087F -:103B500000210010000388024000A0051000910819 -:103B6000400800004000840200030100200400031C -:103B7000000200090804021000030003002140A015 -:103B8000840002A0049089A0414000A109C004A0C3 -:103B9000204080A020000084A08820A00202A0A0D5 -:103BA00000A0200400018904004000C0410300007F -:103BB0004084048241000040020000402084000054 -:103BC0000000000000080000000005000000208444 -:103BD0002002008400020000201000C0000040000D -:103BE000400084000000200000A00000208480002D -:103BF00000000008400000000000090000000090E4 -:103C000040050000A10300008841902140410000D0 -:103C100088030005890388000000000540050004B2 -:103C2000400900110010400200028203000000025F -:103C300000000009100400080008820500C10021EE -:103C40000000080500050000001000050005000543 -:103C500000000010902105050020884140414003EC -:103C60000010C00588038805000500080008001042 -:103C70000821001000008203001002110000080853 -:103C80000000110020000200000800840000000075 -:103C900000000000001002400000000400000000CE -:103CA00000008000009000000001000000000900FA -:103CB00000010002000000000000002000000040A1 -:103CC0000000000000000000000000A10000000053 -:103CD00000000000000100000400000100000000DE -:103CE00000000200000000C00000000000001110F1 -:103CF0000000009000000000000000A00000000094 -:103D000000000000832182108408051110840084C3 -:103D10000008C0A0884082880488A0828802C0026F -:103D20000020101009C18909000410830402000258 -:103D30000110C0851002C0088808900808C09020B3 -:103D40000082824000010000C0000000000000006E +:1035D00000000000000000000000000000000000EB +:1035E00000000000000000000000000000000000DB +:1035F00000000000000000000000000000000000CB +:1036000000000000000000000000000000000000BA +:1036100000000000000000000000000000000000AA +:10362000000000000000000000000000000000009A +:10363000000000000000000000000000000000008A +:10364000000000000000000000000000000000007A +:10365000000000000000000000000000000000006A +:10366000000000000000000000000000000000005A +:10367000000000000000000000000000000000004A +:10368000000000000000000000000000000000003A +:10369000000000000000000000000000000000002A +:1036A000000000000000000000000000000000001A +:1036B000000000000000000000000000000000000A +:1036C00000000000000000000000000000000000FA +:1036D00000000000000000000000000000000000EA +:1036E00000000000000000000000000000000000DA +:1036F00000040000000000000004000000000000C2 +:1037000000000000000000000000001001000000A8 +:1037100000400080000000000000000000000000E9 +:103720000000000000000000000000000001000098 +:103730000000000000000000000000000000000089 +:103740000000000000000000000000000004000075 +:103750000000000000000000000000000004000461 +:103760000000000400000000000000000002000053 +:103770000000000000000000000000000000000049 +:103780000000000000000000000000000000020037 +:1037900000000001004000000000000000000000E8 +:1037A0000000000000000000000000000000000019 +:1037B0000000000000000000000000000000000009 +:1037C00000000000000000000000000000000000F9 +:1037D00000000000000000000000000000000000E9 +:1037E00000000000000000000000000000000000D9 +:1037F00000000000000000000000000000000000C9 +:1038000000000000000002000000000000000000B6 +:1038100000000200000000000000000000000000A6 +:103820000000000000000000000000000000000098 +:103830000000000000000000000000000000000088 +:103840000000000000000000000000000000000078 +:103850000000000000000000000000000000000068 +:103860000000000000000000000000000000000058 +:103870000000000000000000000000000000000048 +:103880000004000000000000000400000000000030 +:1038900000000000800000000000000000000000A8 +:1038A0000000000000000000000000000000000018 +:1038B0000000000000000000000000000000000008 +:1038C00000000000000000000000000000080000F0 +:1038D00000040000000000000000000800000000DC +:1038E00000000000000000000000000000040000D4 +:1038F00000000000000000000000020000000000C6 +:10390000880000000000000000000000000000002F +:1039100000000000000000000000010000000000A6 +:10392000018001008800000000000400100804006D +:103930000008000000000000000000000008000077 +:1039400000009000000000000000000000000400E3 +:103950000400000000000000000000000000000063 +:103960000000000000000000000000000200000055 +:103970000000000000000000000000000000000047 +:1039800000000000000000000000000000400000F7 +:103990000000000000000000000000002000000007 +:1039A0000000040404000400000000000000000007 +:1039B0000000000000000000000000000000000007 +:1039C00000000000000000000000000000000000F7 +:1039D00000000000000000000000000000000000E7 +:1039E00000000000000000000000020000000000D5 +:1039F00000000000000000000000000000000000C7 +:103A000000000000000000000000000000000000B6 +:103A10000000000000000000000000000100008025 +:103A20000000000000000100000000000040000055 +:103A30000000000000000000000000000000000086 +:103A40000000000000000000000000000000000076 +:103A50000000000000000000000000000000000066 +:103A60000000000000000000000000000000000056 +:103A7000000000000000000900000000000000003D +:103A80000000000000000000000000000000000036 +:103A90000000000000000000000000000000200006 +:103AA000000800000000000002000000000000000C +:103AB0000000000000000000000000000000000006 +:103AC00000000000000000000000000000000000F6 +:103AD00000000000000000000000000000000000E6 +:103AE00000000000000000000000000000000000D6 +:103AF00000000000000000000000000000000000C6 +:103B000000000000000000000000000000000000B5 +:103B10000000000000000000000090000000010014 +:103B20000000000000080100000010040000000078 +:103B30000000000000000000000000000000000085 +:103B40000000000000000000000000000000000075 +:103B50000000000000000000000000000000000065 +:103B60000000000000000000000000000000000055 +:103B70000000000000000000000000000000000045 +:103B80000000200000000000000000000084002071 +:103B90000000000000000000040000000900000018 +:103BA000200000000400000120000000840100004B +:103BB0000000000000000000000000000000000005 +:103BC00000000000000000000000000000200000D5 +:103BD00000000400000004000000000000200000BD +:103BE00000000000000000000000000000000002D3 +:103BF00000000000000000000000000000000000C5 +:103C000000000000000000000000000000000000B4 +:103C100000000000000000020000000000000000A2 +:103C2000000000000000008000A100000009000565 +:103C30000000000900090021000000000000000051 +:103C40000000000000000000000000000000000074 +:103C50000000000000000000000000000000000064 +:103C60000000000000000000000000000000000054 +:103C70000000000000000000000000000000000044 +:103C80000000000000000000000000000000000034 +:103C90000000000000000000000000000000000024 +:103CA0000000008200000000002000400000000032 +:103CB0000000000000000000000000000000000004 +:103CC00000000000000000000000000000000000F4 +:103CD00000000000000000000000000000000000E4 +:103CE00000000000000000000000000000000000D4 +:103CF00000000000000000000000000000000000C4 +:103D000000000000000000000000000000000000B3 +:103D100000000000000000000000000000000000A3 +:103D20000000000001000090000000000100901061 +:103D30000000000000000000000000000000000083 +:103D40000000000000000000000000000000000073 :103D50000000000000000000000000000000000063 -:103D6000A00000000000890482A0882000020189D0 -:103D700002A1050482A00000000000000000000075 -:103D8000000000000000C105200000109084808029 -:103D90000900088080800083000980008080000581 -:103DA000800900000902C10240C00090898880C0DB -:103DB0000011418080880080C18000000000A000C8 -:103DC00000020080808000000000800000000000F1 +:103D60000000000000000000000000000000000053 +:103D70000000000000000000000000000000000043 +:103D80000000000000000000000000000000000033 +:103D90000000000000000000000000000000000023 +:103DA0000000000000001100218000000000110050 +:103DB000A100000000000000000000000000000062 +:103DC00000000000000000000000000000000000F3 :103DD00000000000000000000000000000000000E3 -:103DE0000000880000000000028021000020008800 -:103DF0000911002041808000000000000000000048 -:103E00000000000000000000030000858300A140C6 -:103E10000010898310848400000009A120C1C082A1 -:103E20008000898820059111800080050080800035 -:103E300080000009808080900000808900A08000C0 -:103E400000008010800080000000000000858000DD -:103E50008000000080200000000000000010000032 -:103E6000008000000300050003900000030005002F -:103E7000210300004121401100000000000000006B -:103E8000000000000000000000009040888341080E -:103E90001109A000028221C1030810900483881137 -:103EA000110940A00283031082840200200988C007 -:103EB00010908400082010C0081110000802901013 -:103EC000820208001005408810080000820088085F -:103ED00008A08200020002001000000000000004A0 -:103EE0000084000800040100000001A1000082001D -:103EF000000091010000008201910000000000001C -:103F0000000000000000000000000000C088C108A0 -:103F100008109082020240C10820C102A004018260 -:103F200040109140C0C0100220A00582020200880B -:103F30009085C182080802030884A082C084C00959 -:103F400084910382C1A00208408282020000000026 +:103DE00000000000000000000000000000000000D3 +:103DF00000000000000000000000000000000000C3 +:103E000000000000000000000000000000000000B2 +:103E100000000000000000000000000000000000A2 +:103E2000000000000000000000C009000009008040 +:103E300000400980001000000000000000000000A9 +:103E40000000000000000000000000000000000072 +:103E50000000000000000000000000000000000062 +:103E60000000000000000000000000000000000052 +:103E70000000000000000000000000000000000042 +:103E80000000000000000000000000000000000032 +:103E90000000000000000000000000000000000022 +:103EA00000000000000000000000880901880000F8 +:103EB0000008000101080001008800000000000067 +:103EC00000000000000000000000000000000000F2 +:103ED00000000000000000000000000000000000E2 +:103EE00000000000000000000000000000000000D2 +:103EF00000000000000000000000000000000000C2 +:103F000000000000000000000000000000000000B1 +:103F100000000000000000000000000000000000A1 +:103F20000000000000000000000000000100880008 +:103F3000829001000100A08808000000000002003B +:103F40000000000000000000000000000000000071 :103F50000000000000000000000000000000000061 -:103F60000000C00000000001000182000000820289 -:103F7000004004852189A00400A1108882A10000CE -:103F80000000000000000000000000000000C1046C -:103F9000880000C00080C18500040000C003C18803 -:103FA000028908804191C10000009180C080888012 -:103FB000001000A0A0A0410040400991100091A174 -:103FC000808880028891908000808380008000003B -:103FD00000000000000002000000000000000000DF -:103FE00009000000000000000020000200020000A4 -:103FF000008500A08082218341800020C100001143 +:103F60000000000000000000000000000000000051 +:103F70000000000000000000000000000000000041 +:103F80000000000000000000000000000000000031 +:103F90000000000000000000000000000000000021 +:103FA0000000000000000000000000000000090008 +:103FB000000080804100410000808000410000003E +:103FC0008000000000000000000000000000000071 +:103FD00000000000000000000000000000000000E1 +:103FE00000000000000000000000000000000000D1 +:103FF00000000000000000000000000000000000C1 :1040000000000000000000000000000000000000B0 -:1040100020A1824189108803800000008080000078 -:104020000000098080801111800009418500000096 -:104030008003004180808000210040008080A0003B -:10404000800200C18000800000218041800080004B -:104050000000000080800080000000080080000058 -:104060000000000000100000000008800500200093 -:10407000081010000590008010032002918000803D -:10408000C000000000000000000000000000000070 -:10409000000089050809402183008288A00204C02D -:1040A00002008800880484C08200A0C0022183101E -:1040B00082000200A083104040000900020284C078 -:1040C000050808009021822008000200082182884B -:1040D0000200000000001010008402000000002018 -:1040E00020880000000088012000020041401000EC -:1040F00001000100010200050020000083A005026C -:10410000C002A1000000000000000000000000004C -:1041100000000000000000000000C800000000E0F7 -:104120000000004300000000000000430000000009 -:104130000000C800000000000000C843000000604C -:1041400000000043000000000000C8000000000064 -:104150000000C8000000000000000000C8000000CF -:104160000000000000000000000007000000000048 +:1040100000000000000000000000000000000000A0 +:104020000000000000000000000000000000000090 +:10403000001180110000000000110000028000004B +:104040000000000000000000000000000000000070 +:104050000000000000000000000000000000000060 +:104060000000000000000000000000000000000050 +:104070000000000000000000000000000000000040 +:104080000000000000000000000000000000000030 +:104090000000000000000000000000000000000020 +:1040A0000000000000000000000000000000000010 +:1040B000000000012000000000000001000000409E +:1040C00000000000000000000000000000000000F0 +:1040D00000000000000000000000000000000000E0 +:1040E00000000000000000000000000000000000D0 +:1040F00000000000000000000000000000000000C0 +:1041000000000000000000000000000000000000AF +:10411000000000000000000000000000000000009F +:10412000000000000000000000000000000000008F +:1041300000000000000000E007000006000000E0B2 +:1041400007008200000000000000000000000000E6 +:10415000000000000000000000000000000000005F +:10416000000000000000000000000000000000004F :10417000000000000000000000000000000000003F -:1041800000E000000013000000000000000000003C -:10419000000000000000FEFFFEF0FAEBFFEBF0F085 -:1041A000C0FCF0F0F0AA3D3CBFBE3FBE3CBE3C00B0 -:1041B0003CFF1CBC1CBC41FFF0FF80BF82BE7D3CAD -:1041C000FCFC0028FFEBFFD7008203820082D5D7DA -:1041D0001514C5C355550000FFEBFFEB00000000B0 -:1041E000F0F0F0F000000000A5A9A5A90000000073 -:1041F000FF0000FF00000000000000001414D717AB -:1042000050F35003000FFCFC000000000000000011 -:104210000000000000000000400040F00A280028D4 -:10422000B0F180FDB2B2F0AA383C101430143C1446 -:1042300038383D3D08FD1CBC00BE000FA8ABAAAA43 -:10424000283C0C0C022AFEEAF3D70382F3D7FFD7EF -:10425000FDFF0100C5C3C3C3000000280028000003 -:1042600000000F0F0F0F00000000A595A59500009E -:104270000000FF0000FF0000000000000000141418 -:10428000D7175FF35F03000F0C0C00000000000065 -:1042900000000000000000000000FF14EB00FCFC28 -:1042A000FF7DFC0CFF007D3C283C3D3D3DBF4D4D5E -:1042B00055555F5550552D3C2D3CFF0F000F3C3C94 -:1042C00055555F5F5050C0C3CFC3E1E1F0F0280007 -:1042D00028A00A00FAFFF041F0EB00000000000007 -:1042E0003C3C3C2D000000001FE01FE000000000EF -:1042F0000000000000000000000000008082C0C339 -:104300005F5F55555F5F5F5F555555550000000075 -:10431000000000000000000000000000FFD42B009F -:104320000C0C00287C2C7F20FDBC081C3838381071 -:104330004D4D550FDFD510152D3C0F1E8F8F0D0DD8 -:104340005535553555D755144043EFE3E1E1F0C3FA -:10435000EBFFEBAF0A82FABE4141EBEB000000003D -:1043600000003C3C3C3C000000000BF40BF400005F -:104370000000000000000000000000000000A0AAF3 -:10438000F0FF0F0F00005F505F5C000000000000B6 -:10439000000000000000000000000000000040617C -:1043A0008006002D100240618007002D1002406140 -:1043B0008006002D100240618006002D1002406131 -:1043C0008006002D100240618004002D1002406123 -:1043D0008006002D100240618006002D00020000C2 +:10418000000000000000000000000000000000002F +:10419000000000000000000000000000000000001F +:1041A000000000000000000000000000000000000F +:1041B00000000000000000FF000000FF0000000001 +:1041C0000000F0F00000000000000000000000000F +:1041D00000000000000000000000000000000000DF +:1041E00000000000000000000000000000000000CF +:1041F00000000000000000000000000000000000BF +:1042000000000000000000000000000000000000AE +:10421000000000000000000000000000000000009E +:10422000000000000000000000000000000000008E +:10423000000000000000000000FF000000FF000080 +:1042400000000000F0F0000000000000000000008E +:10425000000000000000000000000000000000005E +:10426000000000000000000000000000000000004E +:10427000000000000000000000000000000000003E +:10428000000000000000000000000000000000002E +:10429000000000000000000000000000000000001E +:1042A000000000000000000000000000000000000E +:1042B000000000000000000000000000FF000000FF +:1042C0003C3C0000FF000000FFFF00000000000079 +:1042D00000000000000000000000000000000000DE +:1042E00000000000000000000000000000000000CE +:1042F00000000000000000000000000000000000BE +:1043000000000000000000000000000000000000AD +:10431000000000000000000000000000000000009D +:10432000000000000000000000000000000000008D +:104330000000000000000000000000000000FF007E +:1043400000003C3C0000FF000000000000000000F6 +:10435000000000000000000000000000000000005D +:10436000000000000000000000000000000000004D +:10437000000000000000000000000000000000003D +:10438000000000000000000000000000000000002D +:10439000000000000000000000000000000000001D +:1043A000000000000000000000000000000000000D +:1043B00000000000000000000000000000001540A8 +:1043C0002A06054C00A805402A06054C00A8000056 +:1043D00000000000000000000000000000000000DD :1043E00000000000000000000000000000000000CD -:1043F00005000A08050000A000610006000D00008D -:1044000000614006000D0000006130010011000055 +:1043F00000000000000000000000000000000000BD +:1044000000000000000000000000000000000000AC :10441000000000000000000000000000000000009C -:1044200080C082C33CBE3CBE00000000F0F03C3CBB -:10443000D7FFD7FFAAAA3A3A0F550F550000000040 -:1044400000000000000FF0FF00FF003C0FF00FF035 -:104450000000000080FD00FF0000000000000000E0 +:10442000000000000000000000000000000000008C +:10443000000000000000000000000000000000007C +:1044400000005555FFFF000000000F0FFFFF0000A8 +:10445000000000000000000000000000000000005C :10446000000000000000000000000000000000004C -:104470000000000000000000000080A0C0F03CFC34 -:104480003CFCFFFF3C00070707003C3CFF00A0A0EE -:10449000AFAF0000000000000000000000000000BE -:1044A0000000A0F0AAFF00AA00AA00000000F0F09F -:1044B000F0F014001400AAAA3A3A555555550000D8 -:1044C00000000000000000FF00FFFFFF3C3C0FF079 -:1044D0000FF00000000000FF00FF000000000000DF +:10447000000000000000000000000000000000003C +:10448000000000000000000000000000000000002C +:10449000000000000000000000000000000000001C +:1044A000000000000000000000000000000000000C +:1044B00000000000000000000000000000000000FC +:1044C0000000000055550000000000000F0F000024 +:1044D00000000000000000000000000000000000DC :1044E00000000000000000000000000000000000CC -:1044F00000000000000000000000000082AAC3FFCE -:1045000000F000F03C003C00D7D7D7003C3CFF0057 -:10451000A0A0AFAF000000000000000000000000FD -:1045200000000000F7F70404AAC300C30000000065 -:1045300000F00FFFFF55555500A05FFF3CFF3C000A -:10454000FFFF0FFFFCFF0C00000000000041000017 -:10455000000000000000000000000000FF00FF005D +:1044F00000000000000000000000000000000000BC +:1045000000000000000000000000000000000000AB +:10451000000000000000000000000000000000009B +:10452000000000000000000000000000000000008B +:10453000000000000000000000000000000000007B +:104540000000000000000000F0F00000000000008B +:10455000F0F000000000000000000000000000007B :10456000000000000000000000000000000000004B :10457000000000000000000000000000000000003B -:10458000000000550F550C0C0C0C00000F05FFFF30 -:10459000FF0000FF00FF000000000000000000001E -:1045A000000000000000F7F70404AAC3AAC300003B -:1045B00000000000FFFF0055555500A05FFFFFFF02 -:1045C0000000000000F0FCFF0C0000000000008272 -:1045D000000000000000000000000000000000FFDC -:1045E00000FF0000000000000000000000000000CC +:10458000000000000000000000000000000000002B +:10459000000000000000000000000000000000001B +:1045A000000000000000000000000000000000000B +:1045B00000000000000000000000000000000000FB +:1045C00000000000000000000000F0F0000000000B +:1045D0000000F0F0000000000000000000000000FB +:1045E00000000000000000000000000000000000CB :1045F00000000000000000000000000000000000BB -:10460000000000000055FF550C0C0C0CF0F0FFF5FD -:1046100000FF0000F0F0F0F00000000000000000DB -:1046200000000000000000000400840504000411E4 -:1046300020082040200820112009020020048800C2 -:104640000008200410102000402120002008C00095 -:104650002004880404030203100820108803C00209 -:10466000044120102010200200002005200320001B -:10467000201084102009C003C000A0052004880574 -:104680000405C00504418405C00020092000200065 -:1046900020102010040420002011C004020588030B -:1046A0004009400910080208C003030800001090E8 -:1046B00010000090004021020400040000000000EF -:1046C0001090000040004100000000004002000285 -:1046D00000001000000000000402000000001002B2 -:1046E0000000100000000000210000001000090080 -:1046F00010004000000040001000000010001002F8 -:1047000021900982400010001000050010C0408276 -:104710001000400204001082408440024082008267 -:1047200041020002008404020084400000000009ED -:104730000005000000000000000000000000000074 -:1047400004002000000300000000004000090010E9 -:104750000020200400028210000400050000000474 -:104760000008000490040203004000000000001054 -:1047700000050003000300040004001000040041D1 -:1047800000090204020900030003004000100205B2 -:1047900000000003020888090010001000400021FA -:1047A000000904040410001000032003000800089E -:1047B000008220080210000800100904000800848C -:1047C00020080008040802040408108400080008F7 -:1047D0000008000800900008200840082008401049 -:1047E0004008000400080008000840040008000019 -:1047F00000080408000800882008090820080908A3 -:1048000004080008040820082008200820082008C0 -:10481000090404040408040400084008000804080B -:1048200020082004200820042004090402040404B1 -:1048300020419000000900212040900820212005FF -:104840004005002190109021840088089005000206 -:1048500084400005002190210021000388032000EE -:104860000203840390100010C0210041880200213F -:10487000000090030005002104110021200200091E -:10488000041004410005001104408840840384039F -:1048900040212008400884110421002190050002D5 -:1048A000101020100010004100210008000410200A -:1048B000901000840008021000080040001002C0A0 -:1048C00000100082000002A01188008204A000C035 -:1048D0000200408211C000824082000200400204B7 -:1048E0001100110005000584008800000000002070 -:1048F00010820000030005C0008211A00400000027 -:1049000003002102100041A00082102010100910A5 -:10491000402002401002000800C00082000200A0F7 -:10492000004000840020000000A0000000840082FD -:1049300000840084000900050004820000000021BA -:1049400004030041000090000004001100004040FA -:104950008220000008000000101102000041000049 -:10496000000000000800C04108008203A0401021A0 -:10497000C0204000000000001000820082080000FB -:10498000000000410200080082000804A000044169 -:104990001000A0091000040082418200820410115E -:1049A00082048204840404118203000082038200D2 -:1049B000C0008202080003901100008200880210EB -:1049C00000900082000000A004C00900001000A0B8 -:1049D00000000082008200A000C0008400100010CF -:1049E00011A008A000C0030009C0008400820000DC -:1049F000009000080010000000000000008400008B -:104A00002082008200840882008220880084418203 -:104A10002084004010C0034000000010208421C00A -:104A20000204088204C003A00382108400840008EA -:104A300004400284040003A0000200400000004182 -:104A40000010000900000000000000050000000048 -:104A500000000005000000410000002100020020CD -:104A60000000002104020003004020210003080090 -:104A70000010000300210041000000400000002160 -:104A80000000820000214008002100400000004199 -:104A90000010000300410005000300050021002173 -:104AA0000002004000410009000900210000100937 -:104AB0000011000300000003002000A000400210CD -:104AC0002108020020100200110020080990028233 -:104AD00009880000000200202000008211004082AE -:104AE000000010900000030220000088050009A0CB -:104AF00000A011000900008805400000000000022D -:104B00000010000000000000000002900000208261 -:104B10000002000000040040090209000920098287 -:104B200005400004000040900040044000000500E3 -:104B300000004084112011000000400000002010FF -:104B400000000005000800050000002100000040F2 -:104B50000000000500410011000000050000204198 -:104B600000100008000000410010000004000000D8 -:104B70000000000000000004000800110000000018 -:104B80000000000084000000001000211000000060 -:104B90000000841000000000002100100404001038 -:104BA0000000000300059003000000050003000062 -:104BB0000008001000080000082100104003001049 -:104BC00000820000400000042110004000000000AE -:104BD000001000000000000000100200001000049F -:104BE000001000900004000021A00004001000A0AC -:104BF00000840084028400000000400000400000A7 -:104C000009022000020000820004000420000000CD -:104C10000010000200000084200000000004008456 -:104C2000208220000910000411820000009000C0C2 -:104C300021000000200000000082000000C00000F1 +:1046000000000000000000000000000000000000AA +:10461000000000000000000000000000000000009A +:104620000000000000000000000000000002000484 +:10463000000000080002A0000000000000040000CC +:104640000000000000040000000000024000000024 +:1046500000000000400020020000000200020000F4 +:104660000000000200000000000000000000200028 +:1046700000000000000020002000000000000002F8 +:1046800000000000000000000000001100002002F7 +:1046900000000000000020000000000000020000F8 +:1046A00000000000000000000000000000001000FA +:1046B000000000900000000400040000000400005E +:1046C0000004009000001000009000040090000220 +:1046D0000000100200000000000000400000000088 +:1046E00000000000000000020002000000000002C4 +:1046F00000000000000000020000000000000002B6 +:10470000088200000090000200C000020040000289 +:104710000000000000000002000000000000000493 +:104720000000000000040002000000020000000081 +:1047300000000000000000000000820000000000F7 +:104740000000000000000000040000000000000065 +:1047500000000000000082000200000000000000D5 +:104760000000000000000000000000400000000009 +:104770000000000000000000000000000000000039 +:104780000000000010000040004000400040000019 +:104790000000000000000000000000000000000019 +:1047A0000000000000000000000000000000000009 +:1047B00000000004000200000000000000000000F3 +:1047C00000000002000000000200000200000000E3 +:1047D00000000000000000000002000000000000D7 +:1047E00000000000000000000000000000000000C9 +:1047F00000000000000000000000000000000000B9 +:1048000000000000000000000400000000000000A4 +:104810000000000000000000000000000000200474 +:104820000000000000000082000000000000000006 +:1048300000000000000000004000020002004000F4 +:104840000000000004000000000000000000000064 +:104850000000040000000000400000000000040010 +:104860000000000000000000040010000000000034 +:10487000000000030000000004000400000000002D +:104880000000040000000000000004000000000020 +:104890000400000000000000000000000000000014 +:1048A0000000000000000000000000000000000008 +:1048B00002000000000000000000000000200000D6 +:1048C00000000000000000000000000000000000E8 +:1048D00000000000000000000000000000000000D8 +:1048E000000000A000000000000000000000000028 +:1048F00000000000000000000000000000000000B8 +:1049000000000000000000000000000000000000A7 +:104910000000000000000000000000000000000097 +:104920000000000000000000000000400000000047 +:104930000000000000000000000000000004000073 +:104940000020000000000000000000000040000007 +:104950000000004000000000000000000000000017 +:1049600000200000000000000000000000400040A7 +:1049700000400000000000000000000000000000F7 +:104980000000000000000000000000000000000027 +:104990000000000000000000000000000000000017 +:1049A0000000000000000000000000000000000007 +:1049B00000000000000000000000000000000000F7 +:1049C00000000000000000000000000000000000E7 +:1049D00000000200000000000000000000000000D5 +:1049E00000000000000000000000000000000000C7 +:1049F00000000000000000000000000000000000B7 +:104A000000000000000000000000000000000000A6 +:104A10000000000000000000000000000000000096 +:104A20000000000000000200000000000000000084 +:104A30000000000000000200000000000000000074 +:104A40000000000000000000000000000000000066 +:104A50000000000000000000000000000000000056 +:104A60000000000000000000000000000000000046 +:104A70000000000000000000000000000000000036 +:104A8000000000000000000000080000000000001E +:104A90000000000000000000000000000000000016 +:104AA0000000000000000000000000000000000006 +:104AB00000000000000000000000000000000000F6 +:104AC00000000000090000000000000000000000DD +:104AD000000000840000020000C000000084008488 +:104AE0000000000021000000008400000000000021 +:104AF00010000000000000000000000000000000A6 +:104B00000000000000000000002000000000000085 +:104B10000000000000000000000000000000000095 +:104B20000000000000000000000000000000000085 +:104B30000000000000000000000000000000000075 +:104B40000000000000000000000000000000000065 +:104B500000000000000000000000000000118800BC +:104B60000000000000000011000200000000000032 +:104B70000000000200000000000000000000000033 +:104B80000000000000000000000000000000000025 +:104B90000000000000000000000000000000000015 +:104BA0000000000000000000000000000000000005 +:104BB00000000000000000000000000000000000F5 +:104BC00000000000000000000000000000000000E5 +:104BD00000000500000000000000000000000000D0 +:104BE00000000000000000000000000400000000C1 +:104BF00000000000000000000000000000000000B5 +:104C000000000000000000000000000000000000A4 +:104C10000000000000000000000000000000000094 +:104C20000000000000000000000000000000000084 +:104C30000000000000000000000000000000000074 :104C40000000000000000000000000000000000064 :104C50000000000000000000000000000000000054 :104C60000000000000000000000000000000000044 @@ -189778,437 +189778,437 @@ :10522000000000000000000000000000000000007E :10523000000000000000000000000000000000006E :10524000000000000000000000000000000000005E -:105250000000000000000000040020058408214038 -:1052600010052090041020822008040820890510D1 -:10527000200584002003C008200820022008200008 -:105280002088211020092040201020002000020842 -:10529000000040042010202000031104208988040D -:1052A00020002109C00020102004880020104004A4 -:1052B0002080040020100404841120002008200411 -:1052C00020042109880405080400880440042008FB -:1052D000C0030404400388004009000000000400EB -:1052E000088200000904410000110400800000044D -:1052F00084840000400000100004040041410400C8 -:1053000004000004081100900001400504000000A2 -:1053100009004000000040000401000020000004DB -:10532000209104000800009000002100210021903D -:105330000900400200C040004090090000C0000089 -:105340000900400004000400840000080000000080 -:105350004100009000002000000041820010000089 -:105360000004000000000080004100000000000078 -:1053700000000000000001020000001000100010FA -:105380000000000400050000000500050005000401 -:1053900000410009000500100000000300030004A4 -:1053A0000104010320040404004100040009000377 -:1053B0000005200300090141000900030203000465 -:1053C0000003000900090011011000092041000933 -:1053D0008409000300080009000900090808000802 -:1053E0000010001009100008040220080008000442 -:1053F000208200080008090440110008028200040D -:1054000000040004008400C04008090800080008E7 -:10541000000405082010051020844108020800003F -:105420000409200820088005000820080008090851 -:105430000008400800080408400804082008040880 -:105440000408400441080008040804080504050491 -:1054500020082008050420042084040402042004F9 -:105460004002000802210208000000008803020038 -:1054700004A084C00183042000080021004100042E -:1054800088A1080304090810001009410005200341 -:1054900040039008C00240210288004000412104DE -:1054A00000010021020500210010200590100002DB -:1054B0000003401000400040004000212040012136 -:1054C000200502109021000989000020040200201C -:1054D000009040112010880900058810400900083C -:1054E000001000A0009000A080A0001000080000A4 -:1054F00080A09021002004208041110000000000C5 -:1055000010000004808480C0808400018800201086 -:1055100040008010020000C01190000221000040F5 -:105520000400000000008010414010000000000254 -:105530002184008408400582050441900090C00049 -:10554000209080A000A000C000A00202031190885B -:105550000511002000880084008221A000080004BA -:105560000082000000000000080000008209001115 -:105570008200884000000000000000000000400998 -:10558000C00002210004001004001003200000806D -:1055900010000200000000210405100000110403A7 -:1055A0008200A010000020008409840082400000D6 -:1055B000820082008440C003C005C0054004100082 -:1055C0008240820008008204820000000000000087 -:1055D000C0211021C04004028420042120001000BA -:1055E00082001000C00400004000090021000800F3 -:1055F0000002000000C000020440030000C0009050 -:1056000080A0000280000241024080040490000457 -:1056100000102182830041040090008800840882E9 -:105620000000000000840000898400A000100082B7 -:1056300000A0028241C000A000C0039002A00000B0 -:10564000000000A04110001000000490401011A0C4 -:10565000009000002084108800104188418440821E -:10566000410040A004A0038400000000000000806E -:1056700000410003840000000041041001210800E3 -:10568000900200089000004120410080202100C0CD -:105690000140C10000400841000091038240000029 -:1056A0008382C008000010830000204100000041F8 -:1056B000C021A002104010211000002100000010A5 -:1056C0008200214001000100010910410005100085 -:1056D00000110002084182008205C0038202A0007E -:1056E00000100002C010000500210000008800002A -:1056F00000040000008800A00010028891000488C7 -:1057000000881100000000040000800000108000EC -:10571000000240A008000000808400880284008409 -:10572000000040400900000000020000800000006E -:1057300000000008000000000000209000000000B1 -:1057400011000900840004000400040005000000AA -:105750000900410000A0219000000090000400001A -:10576000000000C0000000080000208820000000A9 -:1057700088002000004000210000000300030020FA -:10578000000500004000002100110000004000085A -:105790000404014000090810004188100000044181 -:1057A000001104020002000800210021000108107D -:1057B00000111000000800100405880000100011FE -:1057C000A0410041001004210403004090000005A6 -:1057D000A0030003001000030005080304410005B6 -:1057E0000021001000090005000300100411000052 -:1057F000000400040220408400A0210000100000EA -:10580000000502900000808205A0000000820000D8 -:10581000021000114008009080010000000000000C -:1058200080000000000100010200000000000000F4 -:1058300000000000000041000000110000044100D1 -:10584000400200000090000080008000000009007D -:105850001102208820000090000009820000898841 -:10586000000000820000000000020090080000001C -:1058700040000000C000100000000000C000000058 -:1058800000000802008200008484022000A18289B6 -:10589000080108019001840100100040001000027E -:1058A00000C004104088000402002000880190001D -:1058B00000010001000101000000000000000000E4 -:1058C0000000010000000400000000019000010041 -:1058D0000001C1A000100084080400088490008228 -:1058E0008200000000000000000000000000000036 -:1058F000000080000400800080000000090000001B -:1059000000000000800000800000004100040088CA -:1059100080108040892180080004000000090020D8 -:105920000000000380090091008080410000000415 -:10593000800000000920000841000009000000006C -:10594000000000000200210080000000204000054F -:1059500003410004A000008000808080008000805F -:105960000080800000000000000000000000000037 -:105970000000000088000000051100008000800089 -:1059800080020000000003090000840000000010F5 -:1059900000C10080848041100940080300000041DC -:1059A0000000000080000011008080000000000066 -:1059B000804180000000A000800011001100000064 -:1059C00000030000000000000000000000000009CB -:1059D0000000000900000000004100A100000000DC -:1059E0000000808000800000000000000000000037 -:1059F00000000000000088000400C0001000040047 -:105A0000400008002000000002000000910090000B -:105A1000208902850008A19010001005C101000036 -:105A20000001020000000200000100821000C0001E -:105A30008200A0018200000003A0200001000200FB -:105A4000000000010004000200000000000000004F -:105A50000000008400000004200000C0004100A0FD -:105A60000000000084821090000000000000000090 -:105A7000000000000000000000080008008500820F -:105A8000000000000001000000400008901002002B -:105A9000044001204000824000880385208900A145 -:105AA0000200000000001000400000000400880018 -:105AB000000900A0004000400000000100000001BB -:105AC00001000000000000000000000100000000D4 -:105AD0000001000009001000000004000082000224 -:105AE00040A0000084409000000200000000000080 -:105AF000000000000000000000000085008300217D -:105B000008090000000000040005008000808000FB -:105B100080000080040009008000000503080340A5 -:105B20000483000000000000000080001000090253 -:105B3000000000880005008200090000002000002D -:105B40000005110400000000000000000004001027 -:105B50000041000811008200A000040080000080C5 -:105B60000080410000000080800000000000000074 +:1052500000000000000000000000840000000000CA +:10526000000000000000000000000000000400003A +:105270000000000000040004000000000000C00462 +:1052800000000000C000C00000000000C0000000DE +:10529000000000000000000000010000000000000D +:1052A0002000000000002000C000000000004000BE +:1052B000C0000000C000C000000000000000880026 +:1052C0002000000000000004200400000000200076 +:1052D000200000002000200000030090009000004B +:1052E00000000000000000000000000000000000BE +:1052F00000000000008200820000000000000000AA +:105300000000080000000000000000000000000095 +:1053100000000090000000000000000000000000FD +:10532000000000000000000000000000000000007D +:105330000004000000000000000000000000000069 +:105340000000000000000000000000000004000059 +:105350000004000000000000000000000000000049 +:10536000000000000000000000000000000000003D +:10537000000000000000000000000000000000002D +:105380000000000000000000000000000004000019 +:1053900000410000000000000000000000000000CC +:1053A00000000000000000000000000000000000FD +:1053B00000000000000400000000000800000000E1 +:1053C00000000000000000000000000000000000DD +:1053D00000000000000800000000000000002000A5 +:1053E000200020000000000000000000000000007D +:1053F00000000000000000000000000000000000AD +:10540000200000000000000000000000000000007C +:105410000000400000000200000000000008000042 +:10542000000000000000000000000000000000007C +:105430000000000000000004000000000000000860 +:105440000000000000000004000000002000000830 +:1054500000000000400005000004000400080904EA +:10546000000000000000000000000000010000003B +:10547000000000000000000000000000000000002C +:10548000000000000000000000000000000000001C +:10549000000000000000000000000000000000000C +:1054A00000000000000000000000000000000000FC +:1054B00000000000000000000000000000000000EC +:1054C00000000000000000000000000000000000DC +:1054D00000000000000000000000000000000000CC +:1054E000000000000000000000000000000020009C +:1054F00000000000000000000000000000000000AC +:10550000000000000000000000000000000000009B +:10551000000000000000000000000000000000008B +:10552000000000000000000000000000000000007B +:10553000000000000000000000004000000000002B +:1055400000900000000000000000000000000000CB +:10555000000000000000000000000000000000004B +:105560000000000400000000000200000000000035 +:1055700000000080000000000000000000000000AB +:105580000000000000000000000200000000000019 +:1055900000000011000000000040000000000000BA +:1055A00000000008000000000000000000080000EB +:1055B00000000000080800000000080000000008CB +:1055C0000000000082000000000000000000000059 +:1055D0000000000082000000000000000000000049 +:1055E00000000000000000000000000008000000B3 +:1055F00000000200000400000000000000000000A5 +:10560000000000000000000000000000000000009A +:10561000000000000000000000000000000000008A +:10562000000000000000000000000000000000007A +:10563000000000000000000000000000000000006A +:10564000000000080000000000000000000000084A +:105650000000000000000000000000080000000042 +:10566000000000002000000000000000000090008A +:105670000100000000000000000000000000000029 +:10568000000000000000000000000000000000001A +:105690000000000000000000000000000000000802 +:1056A00000000000000000000000000000000000FA +:1056B00000000000000000000000000000000000EA +:1056C00000000000000000000000000000000000DA +:1056D00000000000000000000000000000000000CA +:1056E00000000000000000000000000000000000BA +:1056F000000010000000000000000000000000009A +:105700000000000000000000000000000000000099 +:105710000000000000000000000000000000000089 +:105720000000000000000000000000000000000079 +:105730000000000000000000000000000000000069 +:105740000000000000000000000000000000000059 +:105750000000000000000000000000000000000049 +:105760000000000000000000000000000000000039 +:105770000000000000000000000000000000000920 +:105780000000000000000000000000000000000019 +:105790000000000000030000000000000000000006 +:1057A00000000000000000000000000000000000F9 +:1057B00000000000000000000000000000000000E9 +:1057C00000000000000000000000000000000000D9 +:1057D00000000000000000000000000000000000C9 +:1057E00000000000000000000000000000000000B9 +:1057F00000000000000000000000000000000000A9 +:105800000000000005000000000000000008008407 +:105810000000000000000000000000000000000088 +:105820000000000000000000000000000000000078 +:105830000000000000000000000000000000000068 +:105840000000000000000000000000000000000058 +:105850000000000000000000000000000000000048 +:105860000000000000000000000000000000000038 +:105870000000000000000000010000000000000027 +:105880000000000000000000000000000000000018 +:105890000000000000000000000000000000000008 +:1058A00000000000000000000000000000000000F8 +:1058B00000000000000000000000000000000000E8 +:1058C00000000000000000000000000000000000D8 +:1058D00000000000000000000000000000000000C8 +:1058E00000000000000000000000000000000000B8 +:1058F0000000000000000000000011002100000076 +:105900000000000000000000000000000000000097 +:105910000000000000000000000000000000000087 +:105920000000000000000000000000000000000077 +:105930000000000000000000000000000000000067 +:105940000000000000000000000000000000000057 +:105950000000000000000000000000000000000047 +:105960000000000000000000000000000000000037 +:1059700000000000000000000000000000410900DD +:105980000003008000000000000000000000000094 +:105990000000000000000000000000000000000007 +:1059A00000000000000000000000000000000000F7 +:1059B00000000000000000000000000000000000E7 +:1059C00000000000000000000000000000000000D7 +:1059D00000000000000000000000000000000000C7 +:1059E00000000000000000000000000000000000B7 +:1059F00000000000000000000000000000000001A6 +:105A0000010000000088000000000000000000000D +:105A10000000000000000000000000000000000086 +:105A20000000000000000000000000000000000076 +:105A30000000000000000000000000000000000066 +:105A40000000000000000000000000000000000056 +:105A50000000000000000000000000000000000046 +:105A60000000000000000000000000000000000036 +:105A70000000000000000000000000000000000026 +:105A8000000008000000010000000000000000000D +:105A90000000000000000000000000000000000006 +:105AA00000000000000000000000000000000000F6 +:105AB00000000000000000000000000000000000E6 +:105AC00000000000000000000000000000000000D6 +:105AD00000000000000000000000000000000000C6 +:105AE00000000000000000000000000000000000B6 +:105AF00000000000000000000000000000000000A6 +:105B000000000000800000004100000000000000D4 +:105B10000000000000000000000000000000000085 +:105B20000000000000000000000000000000000075 +:105B30000000000000000000000000000000000065 +:105B40000000000000000000000000000000000055 +:105B50000000000000000000000000000000000045 +:105B60000000000000000000000000000000000035 :105B70000000000000000000000000000000000025 -:105B800000000011001004A003000000800080C18C -:105B900000000000100909829000C10091C18890A6 -:105BA000C08003080000800000800000800000002A -:105BB00000000000002100840080000000000000C0 -:105BC00011110000030000000040000080000009E7 -:105BD0000000000000000010002100000000000094 -:105BE0008000000000008000004100000000000074 +:105B800000000000000008110000000000000000FC +:105B90000000000000000000000000000000000005 +:105BA00000000000000000000000000000000000F5 +:105BB00000000000000000000000000000000000E5 +:105BC00000000000000000000000000000000000D5 +:105BD00000000000000000000000000000000000C5 +:105BE00000000000000000000000000000000000B5 :105BF00000000000000000000000000000000000A5 -:105C000000A00004000100000020014000009000FE -:105C1000100900000000840010104002A0004003A2 -:105C200020089190C1008800A000C0020000080078 -:105C300082009000100000010009008200000000B6 -:105C40000000001100A0010084000201C0008200D9 -:105C50000000000000000000000100000000000043 -:105C600082008800109082009000008500001000E3 +:105C00000000000000000000010100000000000092 +:105C10000000000000000000000000000000000084 +:105C20000000000000000000000000000000000074 +:105C30000000000000000000000000000000000064 +:105C40000000000000000000000000000000000054 +:105C50000000000000000000000000000000000044 +:105C60000000000000000000000000000000000034 :105C70000000000000000000000000000000000024 -:105C8000C80000E0000000210000006000000000EB -:105C9000000000600700C200000000000000004398 -:105CA000C84300E00700C800000000600000C80012 -:105CB000004300000700000000430000070000430D -:105CC0000000000000E000000013000000000000E1 -:105CD00000000000000000000000000000E00700DD -:105CE000000000000000000042000000000007006B -:105CF000C2000000000000000000000000000000E2 -:105D0000000000000000AF30AF3F000000000000C6 -:105D100000000000FFFF303F303F03035F505F5F34 -:105D20005F5FF0F0F4F030AAF3AA000000FF00007B -:105D30000000FF3EFF7F00000000000000003FFF6A -:105D40007F7F00000000000000000000E0E3ECEFB7 +:105C80000000000000000000000000E00000814172 +:105C90000000000000000000000000000000000004 +:105CA00000000000000000000000000000000000F4 +:105CB00000000000000000000000000000000000E4 +:105CC00000000000000000000000000000000000D4 +:105CD00000000000000000000000000000000000C4 +:105CE00000000000000000000000000000000000B4 +:105CF00000000000000000000000000000000000A4 +:105D00000000000000000000000000000000000093 +:105D10000000000000000000000000000000000083 +:105D20000000000000000000000000000000000073 +:105D30000000000000000000000000000000000063 +:105D40000000000000000000000000000000000053 :105D50000000000000000000000000000000000043 -:105D6000000000000A0AD7820F0FA0AF1414BEBEB5 -:105D7000F0F0F0F000000000000000000000000063 -:105D80000000000000000000A030A03F0000000064 -:105D90000000000000FF00FF303F303FF3F35F5092 -:105DA000FBFB5B5BF0F0E0F00000FFFF0F000FFF7C -:105DB000000000000034002000000000000000008F -:105DC0003000202000000000000000000000202320 -:105DD0002C2F000000000000000000000000000068 -:105DE0000000000000005F5FD7820000A0AF141425 -:105DF000BEBE0000FFFF0000000000000000000029 -:105E000000000000000000000000C0CFC0CF000074 -:105E10000000FDF85D58F505F5055F5F0A0A3F3F94 -:105E2000173F0C5F0C5F000000002D7D7D7DFFAAF9 -:105E3000CFCFFF00FF003C5F3C0A3C3CC3C30000E7 -:105E40000000CF0CCF0C0000000000002D2DD2D29E +:105D60000000000000000000000000000000000033 +:105D70000000000000000000000000000000000023 +:105D80000000000000000000000000000000000013 +:105D90000000000000000000000000000000000003 +:105DA00000000000000000000000000000000000F3 +:105DB00000000000000000000000000000000000E3 +:105DC00000000000000000000000000000000000D3 +:105DD00000000000000000000000000000000000C3 +:105DE00000000000000000000000000000000000B3 +:105DF00000000000000000000000000000000000A3 +:105E00000000000000000000000000000000000092 +:105E10000000000000000000000000000000000082 +:105E20000000000000000000000000000000000072 +:105E30000000000000000000000000000000000062 +:105E40000000000000000000000000000000000052 :105E50000000000000000000000000000000000042 -:105E600000000000000000007D7D7D713C3C3C3C5A -:105E7000FFF00F00FFAA5500000000000000000026 -:105E80000000000000000000000000005F5F5050B4 -:105E900000000000ADA80D08F505F5055F5F0A0AD2 -:105EA0003F3F3F3F0C500C50000000002D28282899 -:105EB000CFCFCFCF00FF00FF0F0F0F0F3C3CC3C36E -:105EC00000000000D714FF000000000000003C3C70 -:105ED000C3C300000000000000000000000000003C -:105EE000000000000000000000007D7D7D7D0000BE -:105EF0000000FFF00F00FFAA5500000000000000A6 -:105F00000000000000000000000000614006801951 -:105F1000000000614004000D00000061000E00055B -:105F2000000000613006000D0000006100228005C5 -:105F3000000000614002000D000080610026000D9D -:105F4000000100610026001D00000000006100014A -:105F500000010001000000000000000000610006D8 -:105F6000000D000005610A0F050D00A000003000C3 -:105F70000000000100000008000000000000000018 +:105E60000000000000000000000000000000000032 +:105E70000000000000000000000000000000000022 +:105E80000000000000000000000000000000000012 +:105E90000000000000000000000000000000000002 +:105EA00000000000000000000000000000000000F2 +:105EB00000000000000000000000000000000000E2 +:105EC00000000000000000000000000000000000D2 +:105ED00000000000000000000000000000000000C2 +:105EE00000000000000000000000000000000000B2 +:105EF00000000000000000000000000000000000A2 +:105F00000000000000000000000000000000000091 +:105F1000000000400006000C00000000000000002F +:105F20000000000000000000000000000000000071 +:105F30000000000000000000000000000000000061 +:105F40000000000000000000000000000000000051 +:105F50000000000000000000000000000000000041 +:105F60000000000000000000000000000000000031 +:105F70000000000000000000000000000000000021 :105F80000000000000000000000000000000000011 -:105F9000A0F53C3CFFF0FFF000FFAAFF000000006E -:105FA00000000000FFFFFFCF000000005D5D5151C9 -:105FB000AAAAAAF0000000000000000000000000F3 -:105FC00055AA55AA000000000F17F0E80000BE1403 -:105FD000BE14003CC3FF00000000000000000000F1 -:105FE00000007878787800000000000000000000D1 +:105F9000000000000000FF00FFFF00000000000004 +:105FA00000000000000000000000000000000000F1 +:105FB00000000000000000000000000000000000E1 +:105FC00000000000000000000000000000000000D1 +:105FD00000000000000000000000000000000000C1 +:105FE00000000000000000000000000000000000B1 :105FF00000000000000000000000000000000000A1 :106000000000000000000000000000000000000090 -:10601000000000FF00FFFFF0FFF000FF0055000050 -:10602000000000000000FFFFFFCF00000000FF00A5 -:10603000FF003C3C3C3C0000000000000000000071 -:10604000000055AA55AA000000000F17F0E8000054 -:10605000BE14BE14003CC3FF00000000000000009E -:106060000000000000AA55FF000000000000000032 +:106010000000000000000000FF0000000000000081 +:106020000000000000000000000000000000000070 +:106030000000000000000000000000000000000060 +:106040000000000000000000000000000000000050 +:106050000000000000000000000000000000000040 +:106060000000000000000000000000000000000030 :106070000000000000000000000000000000000020 :106080000000000000000000000000000000000010 -:106090000000000028EB28EB0000000000000000DA -:1060A000000000000F0FFFFFFFFFFFEF00000000E8 -:1060B000DF1CD310FF7DFFF0FFF0FFF000000000B9 -:1060C000AF5005FA00000000FFFF0F0F00000000B6 -:1060D0000000FF003C3C003CC3FF0000000000004B -:1060E0000000000000000000000003030F0F00008C +:10609000000000000000000000000000F0F0000020 +:1060A00000000000000000000000000000000000F0 +:1060B00000000000000000000000000000000000E0 +:1060C00000000000000000000000000000000000D0 +:1060D00000000000000000000000000000000000C0 +:1060E00000000000000000000000000000000000B0 :1060F00000000000000000000000000000000000A0 :10610000000000000000000000000000000000008F -:1061100000000000000028EB28EB00000000000059 -:106120000000000000000F0FFFFF0000000400004F -:106130000000FF0CF300002800F0FFF0FFF000006B -:106140000000FF0000FF00000000FFFF0F0F000035 -:1061500000000000FF003C3C003CC3FF00000000CA -:106160000000000000000000000000005F0F5F0F53 +:106110000000000000000000000000000000F0F09F +:10612000000000000000000000000000000000006F +:10613000000000000000000000000000000000005F +:10614000000000000000000000000000000000004F +:10615000000000000000000000000000000000003F +:10616000000000000000000000000000000000002F :10617000000000000000000000000000000000001F :10618000000000000000000000000000000000000F -:1061900000000000048000004002000008000480AD -:1061A00000808480C080880804004004890840057D -:1061B000400840002000040940100400200820048A -:1061C000C00420002008200020002005200804082A -:1061D0008803040400032005200920082009200961 -:1061E00020002010200420042000200020000410A3 -:1061F00020082005200521032004201040902004C1 -:10620000042084A02020880488040210880302103F -:1062100004098203881000400088800900C00082C1 -:1062200021040004000208102100400400000800BE -:1062300000000400008208004000000400040090F8 -:10624000C0914005C000000041000090098200009C -:1062500040000000210000004090009000904000AD -:1062600041A04100049040C0C19109908084A120C8 -:1062700009400590409040000890410005900910A9 -:106280004000000140114005040040000004058466 -:106290000004400000040082000000000000000034 -:1062A00020000000000000000000000000000000CE -:1062B00000040000000500100005000000000000C0 -:1062C00001100004000001040004000500050004A2 -:1062D0000010000500050003000300040003001087 -:1062E000000400080009000400080008000000087D -:1062F00000040004001000410003004000050005F8 -:10630000000500100004000400100005000800084B -:106310000008000900100008001100000000000043 -:1063200000008000000000000000050040000000A8 -:1063300000000000050005000000000400002084AB -:1063400009002090200800080208000400820008CC -:1063500005080508091000080908000000080008E1 -:106360004004000800844008090800042084040850 -:1063700020824008410800040408090804090008B4 -:1063800004080408040820080009040820082082E2 -:1063900020040404200820042084200800000000B9 -:1063A000010002002000400040000080200000109A -:1063B0000008000040050008004000210200000322 -:1063C000080040032000000400052002000500032F -:1063D0000089000900410003000988210000000530 -:1063E00000050021000200050040844100058840AE -:1063F00000C18810404101210440044004000021F4 -:106400008800018200820421080900C000A18810D0 -:106410000021002140050002000020414011000041 -:1064200000004000A0008010A000000800040088C8 -:106430001100000009008000054020C00000000895 -:1064400000088308000880A0000300008008000006 -:106450000208031000080002080810C000C0000075 -:1064600000C00300008803A0000040A04002008894 -:1064700020021004028800000484C082851080007D -:106480000000000008200020800090100840051047 -:106490000002008400824182059000840384004051 -:1064A0000008400040050000C00040080000200037 -:1064B0000000000982000440001082100000000863 -:1064C00000110000840010000020824020004000E5 -:1064D000C010100000031000000482040800000037 -:1064E0000000040004000000A0401000A000C00054 -:1064F000C011834020002000080010040500830024 -:10650000A0008300824004000900A08082000400F3 -:10651000A0001000040082021000100040000000E3 -:1065200002200000800080000000020000000082C5 -:10653000800800C000C0001021080000008209008F -:106540000000000000A00000001000840000804057 -:10655000088421C000004084008211A0410800048A -:1065600000100000401000A011002010408200A088 -:10657000100400002000800880C0031000002000EC -:10658000208204100410218890000484000400403C -:1065900000820200000405C0109008044182110826 -:1065A0004082408400004100000000000000000024 -:1065B000000400000005000800052002820200001F -:1065C0002000000000410000404100000040C000E9 -:1065D0000004000000000005824000100840004058 -:1065E000001000000000820200000000C000000057 -:1065F00000000021001020000000118001089080A0 -:10660000C0050000C0400005838283400040820036 -:10661000C003000200030005A01000050041002196 -:106620008203841000030000C00000A000000000EE -:10663000210000A1000000080008000000A011C017 -:1066400000C0208420820000000200C040A00000A2 -:1066500000020001000000400002200000C008000D -:106660000008000040C0000000000000008400009E -:10667000000000A0000000008010000020042000A6 -:106680000804000002002000000004100800009030 -:106690000000400000050900200040820000208822 -:1066A000000400000090110000004000000088007D -:1066B000000820000040022000100003200000100D -:1066C000001100000010008000090005880900008A -:1066D000020000210000000000210204001000045C -:1066E0000005A0050005080500000003104000415A -:1066F000000390100010000900400003000041005A -:1067000021050800820000000103C0092010C041DB -:10671000C00000404084001100410003000400411B -:1067200000108205882110401021009080A00000F8 -:1067300000000000800000008210000002000940FC -:106740002000000000040290000200004110200020 -:10675000419020000410041000C000000010000050 -:106760002084004000C00020000000000000211034 -:106770000000008400000200000000002100000270 -:106780002004A000000000A0400020000000000045 -:1067900000000000000000040010000000000000E5 -:1067A0000400004000000000090000000088008490 -:1067B00000C00008048985A082A004040000000035 -:1067C00000000000000100010000000000000000C7 -:1067D00000000000884100C0010410880000000093 -:1067E00000000000000000000000000000020000A7 -:1067F0000000000000000000000000000000010098 -:106800000000010000000000000000000000000087 -:10681000000000A00000C0020090008482820000FE -:1068200000000000000000000000000000000080E8 -:106830000000000000800308030041808085000004 -:1068400000000000000000200903000300400000D9 -:1068500000000000000000910004410080000000E2 +:1061900000000000000000000000A00002800000DD +:1061A00000000000000040004004400400084008D7 +:1061B00040044004880004A0408420A000000004A3 +:1061C0000004400088112000400020000000200052 +:1061D0002000200000032000200020002000C0003C +:1061E00000008800880020002000880020000000B7 +:1061F000200020002000200020042000200020009B +:106200008800200020000000200020002000000066 +:106210002000200020110090000400000000000475 +:106220000004000000000000000021000000000148 +:106230000005210500050090C005000421050000AF +:1062400040900090000400400000009000000040DA +:10625000000000000000000000000000000000043A +:1062600000000090009000040040214000900000D9 +:10627000004000400000000000400040000000001E +:1062800000000004000000000000400000000000CA +:1062900000000000000000000000000000000000FE +:1062A00000000000000002000000000000000000EC +:1062B0000141000000000000010000000000000893 +:1062C00000000000000000000000000000000000CE +:1062D00000000008000800000000000800000000A6 +:1062E0000000004000100000004000000008000412 +:1062F0000004004000400005000900040005000003 +:106300000000000800080004000800040000000469 +:106310000008000400040000000400000000000069 +:1063200000000400040000008000000000000500E0 +:10633000000020000000000000002000000000001D +:1063400000000004040009080008000000000084A8 +:10635000000800400004000000000000000000826F +:106360000084000800080040004000100004000005 +:10637000000800820004000840084004000800846F +:1063800040040908040440004084408420080004BC +:106390000982400440084008400440840000000096 +:1063A000000000000200400000002100000000008A +:1063B0000000000000004008000000000400008011 +:1063C000418000000200000000000000000000000A +:1063D0000005000000000000000000000000004078 +:1063E0000000000800030000000000210000000081 +:1063F000000000050008000040000021000000002F +:1064000040050000000000000000000800400000FF +:106410000008000000000000000000080008000064 +:106420000000000000008000000000008400000068 +:10643000000000000000000000000000400080009C +:106440000008042010000000000010000000000000 +:10645000000000000000000000000000000000003C +:106460000000000000001000000000000000080014 +:1064700000004100080000000000000000000000D3 +:10648000000000000000000000000000000000000C +:1064900000000000000000000000000000000000FC +:1064A00000050002000000000104010020080002B5 +:1064B000C0000000000800000000010020000104EE +:1064C00004000004000800000008000000000000B4 +:1064D0000000000008000000000800041004100084 +:1064E000000000000000820000210000C000000544 +:1064F00000000008000410001000000082000000EE +:1065000000000000000082001000000000000000F9 +:106510000000000000000000A00000000000A0003B +:1065200000000000000000000000200004008200C5 +:1065300004000000000000000000000820008300AC +:1065400020008000000100000000000002000000A8 +:1065500000400000000000000000000000000000FB +:10656000000800000000000800000000001000000B +:106570000010000800000001000000000000000002 +:10658000000000A00000000000000000000000006B +:106590000000000000000000000003A00000000058 +:1065A00000000400000000000000000000002000C7 +:1065B00000A0000000050000000000000000000036 +:1065C0000000000000400000000300000003000382 +:1065D0000000000300080000000800210000000087 +:1065E000000000000000000000001000000000009B +:1065F000000010080000000000000000000000087B +:10660000000000000000000000000000000000008A +:10661000000000000000000000000000000000007A +:1066200000000000000000000000000000C00000AA +:1066300080000005000000000000000000000000D5 +:10664000000000000000000000000000000000004A +:10665000000000000000000000000000000000003A +:10666000000000000000000000000000000000002A +:10667000000000000000000000000000000000001A +:106680000000000002000000000000000000000008 +:1066900000000000000000000000000000000000FA +:1066A00000000000000000000000000000000000EA +:1066B00000080000000000000000000000090008C1 +:1066C0000011000000000000000000080100008030 +:1066D0000005000000000000002100000000000094 +:1066E0000000000000210000000000000000000089 +:1066F0000000000000000000000000000000010891 +:1067000000800000000500400008000000080000B4 +:106710000000000000410000020000000000100026 +:106720000000000000000000000000000000000069 +:106730000000000000400404020800000000000007 +:1067400000000000000002000040000000002000E7 +:106750000020084000082000001000000000000099 +:106760000000000402000000000000000000000023 +:106770000000000000000000000800000000000011 +:1067800020000004000000000000000000000000E5 +:1067900000000000000000000000000000000000F9 +:1067A00000000000000000000000004000000000A9 +:1067B00000000000000000000000000000000000D9 +:1067C00000000000000000000000000001000000C8 +:1067D00000000000000000000000000000000000B9 +:1067E00000000000000000000000000000000000A9 +:1067F0000000000000000000000000000000000099 +:106800000000000000000000000000000000000088 +:106810000000000000000000000000000000000078 +:106820000000000000000000000000000000000068 +:106830000000000000001100000000000000000047 +:106840000000000000000000000000000000110037 +:106850002100000000000000000000000000000017 :106860000000000000000000000000000000000028 :106870000000000000000000000000000000000018 -:106880001100002141100000000000000500000080 -:106890000000000000800000118000804100000026 +:1068800000000000110000000000000000000000F7 +:1068900000000000000000000000000000000000F8 :1068A00000000000000000000000000000000000E8 -:1068B00000802141002102001110080903408505D4 -:1068C00000000005000000000000000000000000C3 -:1068D000000000000000000000000904118508000D +:1068B000000000000000000000080080001100003F +:1068C000000000000000000011080000001100009E +:1068D00000090080004000000000000000000000EF :1068E00000000000000000000000000000000000A8 :1068F0000000000000000000000000000000000098 -:1069000000000000000011002011004000000020E5 -:106910000000800000400000000000041104088412 -:1069200080000000000000000000000000000000E7 -:1069300000000008018200850000C005910201836B -:1069400008840000000000020000000000000010A9 -:1069500000C000000000000000000000008201A054 -:106960000100000000000000000000000000000026 +:106900000000000000000002000000000000000085 +:106910000000000000000000000000000000000077 +:106920000000000000000000000000000000000067 +:106930000000000000000000000000010020000036 +:1069400000880000000000000000010100000000BD +:106950000000000000100001001000000000000016 +:106960000000000000000000000000000000000027 :106970000000000000000000000000000000000017 -:1069800000000000000000000100010000010010F4 -:106990000001000488000489C0888488A00184055F -:1069A00084049004000000000000000000000000CB -:1069B000000000008200000000A0000040880400E9 -:1069C000848502A100000000000000000000010119 -:1069D000010000000000000000000000821000081C -:1069E00000044001000084000000000000000000DE +:106980000000000000000000000000000000000007 +:1069900000000000000000000000000000000000F7 +:1069A00000000000000000000000000000000000E7 +:1069B000000000000000000000000000010002884C +:1069C00008000200000000000000000000000801B4 +:1069D00000000000010010000200010000000000A3 +:1069E00000000000000000000000000000000000A7 :1069F0000000000000000000000000000000000097 -:106A00000000000000000000010100010100000082 -:106A10000400080000009100000810000004108825 -:106A20000410089084020000000000000000000034 -:106A30000000000000000000000000800000801145 -:106A400010411021040300000000000000000000BD -:106A500040080400000000000000000000000011D9 -:106A60000989008082110000000000000000000081 +:106A00000000000000000000040000000000000082 +:106A10000000000000000000000000000000000076 +:106A20000000000000000000000000000000000066 +:106A3000000000000000000000000000000008004E +:106A400000808000890000000000000000000000BD +:106A50008011000011000800800000000800000004 +:106A60000000000000000000000000000000000026 :106A70000000000000000000000000000000000016 -:106A8000000000000000000000004040000511026E -:106A90001100000080000400C100008080000000A0 -:106AA000090080008080408000000000000000009D -:106AB000000000000000000008020000800000004C -:106AC000902110A14000910800000000000000008B -:106AD0000000000080000000000000000000000036 -:106AE0000000091183009100000000000000000078 +:106A800000000000000000000000000000000900FD +:106A900000000000000000000000000000000000F6 +:106AA00000000000000000000000000000000000E6 +:106AB00000000000000000000000000000000000D6 +:106AC0000011000000800000000000000000000035 +:106AD00000000000000000000000000000000000B6 +:106AE00000000000000000000000000000000000A6 :106AF0000000000000000000000000000000000096 -:106B00000000000000000000000000001100200054 -:106B100000100000004000000000800580210000FF -:106B20008000800000C00000800000000000000025 -:106B3000000000000000000000008501A0004000EF -:106B4000820008C1031085C0A00188000400040071 -:106B5000C0000000C00004000400000000000000AD -:106B600000008200C0038502A000000000000000B9 +:106B00000000000000000000000000000000000085 +:106B10000000000000000000000000000000000075 +:106B20000000000000000000000000000000000065 +:106B30000000000000000000000000000000000055 +:106B40000000000100000040000000000000000004 +:106B50000000000000000000000000000000000035 +:106B60000000000000000000000000000000000025 :106B70000000000000000000000000000000000015 -:106B80000000000000000000000000000000010004 -:106B900001000000000000000000000010000800DC -:106BA000C0A0A0009000A0828402080000000000A5 +:106B80000000000000000000000000000000000005 +:106B900000000000000000000000000000000000F5 +:106BA00000000000000000000000000000000000E5 :106BB00000000000000000000000000000000000D5 -:106BC00000000000000000E00000000000000000E5 -:106BD00000000000000000000000000000000000B5 -:106BE00000000000000000E00000001300000000B2 +:106BC00000000000000002E00700000000000000DC +:106BD00000000000000002E000000000000002E0F1 +:106BE000070400000000000000000000000000009A :106BF0000000000000000000000000000000000095 -:106C00000000000000000000000000000000000084 -:106C100000E000000013000000600700000000001A -:106C2000000007004200480000E0070000000000EC +:106C0000000000000000000000000000000048003C +:106C100000E0000000000000000000000000000094 +:106C20000000000000000000000000000000000064 :106C30000000000000000000000000000000000054 -:106C4000000000FF00FF019161F181FF81FFFFF073 -:106C50003C6600000000F4D0F4D00000000000000A -:106C600000000000000000C30F99FC06FC060000B5 +:106C4000000000000000000000000000F0F0000064 +:106C50000000000000000000000000000000000034 +:106C60000000000000000000000000000000000024 :106C70000000000000000000000000000000000014 :106C80000000000000000000000000000000000004 :106C900000000000000000000000000000000000F4 -:106CA000898989CF00000F0FF6F60606FF99660066 +:106CA00000000000000000000000000000000000E4 :106CB00000000000000000000000000000000000D4 -:106CC000F000F80000FF00FF079767F7FF3CFFFFA9 -:106CD00000F03C6600000000F4D0F4D0000000009A -:106CE0000000000000000000FFC30F990C060C0616 +:106CC0000000000000000000000000000000F0F0E4 +:106CD00000000000000000000000000000000000B4 +:106CE00000000000000000000000000000000000A4 :106CF0000000000000000000000000000000000094 :106D00000000000000000000000000000000000083 :106D10000000000000000000000000000000000073 -:106D20000000CF89CFCF00000F0FFC0CFC0CB4B4D7 -:106D3000B4B40000000000000000000000000000EB +:106D20000000000000000000000000000000000063 +:106D30000000000000000000000000000000000053 :106D40000000000000000000000000000000000043 :106D50000000000000000000000000000000000033 :106D60000000000000000000000000000000000023 @@ -190217,475 +190217,475 @@ :106D900000000000000000000000000000000000F3 :106DA00000000000000000000000000000000000E3 :106DB00000000000000000000000000000000000D3 -:106DC00000000000FFFF0000000000000FFF0FFFA9 -:106DD00000003C3C0000000000000000000000003B -:106DE00000000000000000000000000066FFE7FF58 -:106DF00066666666000000000000000000000000FB +:106DC00000000000000000000000000066660000F7 +:106DD000FFFF0000000000000000000000000000B5 +:106DE00000000000000000000000000000000000A3 +:106DF0000000000000000000000000000000000093 :106E00000000000000000000000000000000000082 :106E10000000000000000000000000000000000072 -:106E20000000000000000F0F0F0F00000000C2CE96 -:106E3000F2FEF630F63F0000000000000000000007 -:106E4000000000000000C0000000000000000FDB98 -:106E50000FFF272727270000000000000000000088 -:106E600000000000000000000000000000000F0F04 -:106E70000F0F0000000000000000000000000000F4 +:106E20000000000000000000000000000000000062 +:106E30000000000000000000000000000000000052 +:106E40000000000000000000000000000000666676 +:106E50000000000000000000000000000000000032 +:106E60000000000000000000000000000000000022 +:106E70000000000000000000000000000000000012 :106E80000000000000000000000000000000000002 :106E900000000000000000000000000000000000F2 -:106EA00000000000000000000000000000003000B2 -:106EB000020E323E0630063F0000000000000000D7 -:106EC000000000000000000000613006001D00000E -:106ED00000613007000D000000000000000000000D -:106EE00000610006000D000000000000000000002E -:106EF00000613001000100000000000000000000FF +:106EA00000000000000000000000000000000000E2 +:106EB00000000000000000000000000000000000D2 +:106EC00000000000000000000000000000000000C2 +:106ED00005652A06054F20A80000000000000000FC +:106EE00000640006000E2000057D0A06050E24A0A1 +:106EF0000000000000000000000000000000000092 :106F00000000000000000000000000000000000081 -:106F1000000000000000000000000061000100010E -:106F2000000005610A0F050D00A005000A08051004 -:106F300000A085610A0F850D00A000000000000080 -:106F40000000000000000000000055550000000097 -:106F50000000FFF00F0054045E0E0000000000006F -:106F6000000000000000F0F0F0F000000000000061 -:106F700000000F3C0F3C0C0CFCFC0000000000006B +:106F10000000000000000000000000610007800D7C +:106F20000000000000000000000000000000000061 +:106F30000000000000000000000000000000000051 +:106F40000000000000000000000000000000000041 +:106F50000000000000000000000000000000000031 +:106F6000000000000000F0F0000000000000FFFF43 +:106F70000000000000000000000000000000000011 :106F80000000000000000000000000000000000001 -:106F9000000000000000000000000000FFF0FFF013 -:106FA00000F00FFF000000000000000000000000E3 +:106F900000000000000000000000000000000000F1 +:106FA00000000000000000000000000000000000E1 :106FB00000000000000000000000000000000000D1 -:106FC0000000000000000000000000005555000017 -:106FD000000000005C5C5C5CF4A4FEAE00000000FD -:106FE00000000000000000000000000000000000A1 -:106FF000000000000F3C0F3C0C0CFCFC00000000EB +:106FC00000000000000000000000000000000000C1 +:106FD00000000000000000000000000000000000B1 +:106FE0000000000000000000F0F0000000000000C1 +:106FF0000000000000000000000000000000000091 :107000000000000000000000000000000000000080 -:1070100000000000000000000000000000000F0061 -:107020000F0000F00FFF0000000000000000000053 +:107010000000000000000000000000000000000070 +:107020000000000000000000000000000000000060 :107030000000000000000000000000000000000050 :107040000000000000000000000000000000000040 -:107050000000F0F000003C3CBEBE0AFA3F3F0000DA -:107060000000000000003C55FF0F00000000000081 -:10707000000000000000FF55AA0000F00FFF000014 +:107050000000000000000000000000000000000030 +:10706000000000000000000000003C3C00000000A8 +:107070000000000000000000000000000000000010 :107080000000000000000000000000000000000000 :1070900000000000000000000000000000000000F0 -:1070A0005F0A5F0AAAAA00FF0000000000000000BB -:1070B00000000000000000000000000000F000F0F0 +:1070A00000000000000000000000000000000000E0 +:1070B00000000000000000000000000000000000D0 :1070C00000000000000000000000000000000000C0 -:1070D00000000000F0F00000FFFFBEBE0AFA3030F2 -:1070E00000000000000000003C55000F0000000000 -:1070F0000000000000000000FF55AA0000F00FFF94 +:1070D00000000000000000000000000000000000B0 +:1070E0000000000000000000000000003C3C000028 +:1070F0000000000000000000000000000000000090 :10710000000000000000000000000000000000007F :10711000000000000000000000000000000000006F -:1071200000005F0A5F0AAAAA00FF0000000000003A -:10713000000000000000000000000000000000F05F -:1071400000F000000000000000000000000000004F -:10715000000005820000000004000400030000009D -:1071600004000400048541080500000004004000FC -:1071700084032088048400800884400820004000A4 -:1071800008030808200520084010080920002005F1 -:1071900040000003200320900410208240002008BB -:1071A00020092000212009102120401020850405FD -:1071B00020902005200420032004880520052009B4 -:1071C0002010401020108805200388048800040542 -:1071D00020084040400300000008000000000400B8 -:1071E0000000C1A080C080042082208400C009006B -:1071F00041000000090200030002890391004000E1 -:107200004182A0008000008841C089008000040005 -:1072100004008900000000820902400009410900C1 -:1072200009A0418200824001C0002001C100000489 -:1072300041000904051000C004000000000841C01E -:1072400005840500040400004000090005C0020098 -:107250004010408400820000000000000000000098 +:10712000000000000000000000000000000000005F +:10713000000000000000000000000000000000004F +:10714000000000000000000000000000000000003F +:107150000000000000000000000000000000C0006F +:10716000000004000000C00000000000000000005B +:1071700000008800840084038400000000002003D5 +:107180000003880088002000000300008800000041 +:107190000000000020082000200020000400C000A3 +:1071A0002000C000200020002000C000C0004000DF +:1071B000C000C000200020002041C010200020009E +:1071C0002000C000C000C00020008808200020006F +:1071D000880384110000000000000000000000008F +:1071E0000000000000C000000000000000C000001F +:1071F00000000000000000004182000000000000CC +:1072000000C000820000000000C0000000C00000BC +:10721000000000000000000000000400000000006A +:10722000000000C0000000C0000000C0008200C0DC +:10723000000000C00000000000004100000000004D +:10724000000000000000000000000000000000003E +:1072500000000000008200000000000000000000AC :10726000000000000000000000000000000000001E -:10727000000000000000000000000080000000008E -:1072800000100000000000000000000000050000E9 -:107290000009000000000000004000000040000065 -:1072A0000000000000050000000000000000004099 -:1072B0000000001000030000001000090000001092 -:1072C000000800040041000000030003000900055D -:1072D0000005001100000010000000000000000088 +:10727000000000000000000000000000000000000E +:1072800000000000000000000000000000000000FE +:1072900000000000000000000000000000000000EE +:1072A00000000000000000000000000000000000DE +:1072B00000000000000000000000000000000000CE +:1072C00000000000000000000000000000000000BE +:1072D00000000000000000000000000000000000AE :1072E000000000000000000000000000000000009E -:1072F000000000000000000000000008000400047E -:1073000000840008000800000010000800040004C9 -:1073100000C0000400080008000000080008000881 -:10732000009020080088000800A000040008040461 -:107330000004001000080004008800840084000895 -:1073400000040904040809082008030820884008EC -:1073500020084008208202822090410000000000A6 -:10736000000091000000000000000000000000008C -:107370000000001000000000201020000010084154 -:107380000002900000210009881100410041002105 -:1073900008090005001000400040000140020010F4 -:1073A00000028808004000089040841088030840CC -:1073B0008908042100082008002120088808000806 -:1073C00000050008001090050003002188218408B2 -:1073D000000500028840840302030040C000000052 -:1073E0000000000004000000000800000008410246 -:1073F000008200100000000003100008801000A0B0 -:1074000090100090000005840000000000840084BB -:1074100000008008000000080000009000018902C0 -:1074200005000982008209020084000000C02100DA -:10743000000040108008004083840008808200849F -:1074400000000088418200824182000200C021C009 -:1074500000100500001000C00308038800A04000D1 -:107460000000000000080000840004090000200063 -:1074700000000000040000000008040000002000DC -:107480000000000008000400010082000400A000C9 -:10749000840000004000A0008400821184030001E9 -:1074A00000002000000004000000840004008204AA -:1074B000000004004000820004000300C1000480BA -:1074C0000004820082000800040002000400400062 -:1074D000880020000408C005080000000400200007 -:1074E000800000000000040000C000000000001048 -:1074F0008010000800A08008000800C009080000F3 -:1075000000000000000800000890088800C000C0CB -:10751000008200820084088400100090040008C0EB -:1075200000000384404021C021100488028241846D -:1075300000000282008400A0080080820400049001 -:10754000031000C0000241C00400000003040090CA -:107550002104008211820010108204820200008443 -:1075600040000000000000000000000000100400C7 -:1075700000410000000001000000000000210000A8 -:1075800000000000200000000010000500000003C3 -:1075900000210000A0100010004182030021001013 -:1075A00000090000000000000040C00200030010BD -:1075B0000010A008009020000000A108C0050840AD -:1075C000002004090002000584100005A04100000D -:1075D0000005820500050040C0210821A102C0006D -:1075E000004084410000000800000000200804C0A2 -:1075F0008000110000840010040000000000000062 -:1076000000A000000000800000000000001000400A -:107610000000001000A0000000000090000000002A -:10762000090000A00000000000000000008400101D -:1076300000000000000000048500000020A0000001 -:107640000000000180002000008200A00002000075 -:10765000000211A011000040000000001100040011 -:1076600000000900009000008800000000000021D8 -:10767000200802002021000000410000000000114D -:107680000009000000210000000000000000900040 -:107690000400000500080811002100110021C008A5 -:1076A0000008400588040002001000800111020853 -:1076B000402100214008042121080004004101412B -:1076C0000102004100030000C0030010000240005E -:1076D0004005001000410003044000400004004148 -:1076E00000104000401004080000000000000000EE -:1076F00000900000000004000000008400000084EE -:1077000000820004000000040000000000000008E7 -:10771000000000000900009000002000000000822E -:107720000002000400000210000000900040400031 -:107730000304400000200300008404200000000433 -:10774000400004C000040000000000000000000031 -:107750000000000000000000009000000400000095 -:107760000000000000000000030000000001000114 -:107770000001000000000000000000000000010007 -:107780000000000000000000000085000000110162 -:1077900004000000000000100008000000000000CD -:1077A0000000000000000000010000030002840847 -:1077B00010080082000000000000000000890003A3 -:1077C000008900A1000090000000000000000000FF +:1072F000000000000000000000080000000000087E +:107300000008000000000000008400000008008465 +:107310000000000000080000000000840000008859 +:107320000008000800080008000800080082008427 +:10733000008400C000840082000800080084000867 +:107340000008000800080008000820842008410800 +:10735000208441084184040020080000900090002F +:10736000000000000000000000000000000000001D +:1073700000000000000900080000001000090000E3 +:1073800000000000000300000000000000000000FA +:1073900000410008904100000000000000090008C2 +:1073A0000000004100000000000000000009000093 +:1073B000000090000008000000090021000000000B +:1073C00000210021000000210000004100000021F8 +:1073D0000010000200000003000000210000000077 +:1073E000000000000000000000000000000000009D +:1073F000000000000000000000000000000000008D +:1074000000000000000000000084000000000000F8 +:107410000000000000000000000000000000090063 +:1074200000000000000000000088000000000000D4 +:1074300000000000000000000000000000880000C4 +:10744000000000000000000000000000000000003C +:107450000000000000000000000000080000000024 +:1074600000000000000000080000000000004000D4 +:107470000400000000000000000000000000880080 +:107480009000000000000000A000000000000008C4 +:1074900000000000000000000000C000000000002C +:1074A0000000000000000000002100008400000433 +:1074B00000000000840000000000080082000000BE +:1074C00000000000820008050000000082000800A3 +:1074D000000000000000840000000000080082009E +:1074E00000000000200000000900118209A0000037 +:1074F00000C0000004080040000000880084000074 +:10750000000003820008008400900084000800004E +:10751000000040A0000000000000009000002000DB +:10752000000000C00000000000000082000003A076 +:1075300000A000900088000800C0000000080000C3 +:1075400000000000000800820000000003000000AE +:1075500000A00000000000A0000009004108000099 +:1075600040000000000000000000000000000000DB +:1075700000000021000000000008000000000000E2 +:1075800000000000000000000000000300080000F0 +:1075900000000003000000000208000000080000D6 +:1075A00000080000000000000008000000000000CB +:1075B00000000000000000000000000800000000C3 +:1075C00000000000000000000000000000000003B8 +:1075D0000000000000080000820000000000900091 +:1075E000000000000008000000000000000000840F +:1075F0000000002000080000000000000000000063 +:107600000000000000840084000000000000000072 +:10761000000000000000000000000000000000006A +:10762000000000000000000000000000000000005A +:10763000000000000000000000000000000000004A +:10764000000000000000000000000000000000003A +:10765000000000000000000000000000000000002A +:10766000000000000000000000000000000000001A +:107670000000000000000000000200000000000008 +:107680000000000000000000020000030041002193 +:1076900000210000000800000008000300000000B6 +:1076A00000000000000000000000000000000000DA +:1076B00000000000000000000000000000000000CA +:1076C00000000000000000000000000000000000BA +:1076D00000000000000000050000000000000005A0 +:1076E0000000000000008403000000000400040803 +:1076F000008200A011000090000000A040004000A7 +:10770000009000A00000008400000000201000A0F5 +:107710000000119009001104080000202000000062 +:10772000008800000000008200000000000000004F +:1077300020100000000000100900000000080000F8 +:107740000000200000A00000000000000000000079 +:107750000000000000000000000000000000000029 +:107760000000000000000000000000000000000019 +:107770000000000000000000000000000000000009 +:1077800000000000000000000000000000000000F9 +:1077900000000000000000000000000000000000E9 +:1077A00000000000000000000000000000000000D9 +:1077B00000000000000000000000000000000000C9 +:1077C00000000000000000000000000000000000B9 :1077D00000000000000000000000000000000000A9 -:1077E000000000000008000800200088004100217F -:1077F0000040000800000000000000000000000041 -:1078000041000000000000000000000011001121F4 -:10781000A002000200040011000000890000000026 -:107820000000000000000000000041000000000017 -:107830008891802100C100000000000000000008C5 -:107840000020054000A11100800011000000000090 +:1077E0000000000000000000000000000000000099 +:1077F0000000000000000000000000000000000089 +:107800000000000000000000000000000000000078 +:107810000000000000000000000000000000000068 +:107820000000000000000000000000000000000058 +:107830000000000000000000000000000000000048 +:107840000000000000000000000000000000000038 :107850000000000000000000000000000000000028 -:107860000000000000000080008000000000008098 -:10787000000000410009000000800000000000201E -:107880000080002000800000000000000000400494 -:1078900004009109098000000000000000000000C1 -:1078A0000000000080000000000000000000000058 -:1078B0002080000804808903000900000000000007 -:1078C00009820800888308880010000000410080B9 +:107860000000000000000000000000000000000018 +:107870000000000000000000000000000000000008 +:1078800000000000000000000000000000000000F8 +:1078900000000000000000000000000000000000E8 +:1078A00000000000000000000000000000000000D8 +:1078B00000000000000000000000000000000000C8 +:1078C00000000000000000000000000000000000B8 :1078D00000000000000000000000000000000000A8 -:1078E0000000000000000000000000000080000018 -:1078F0000008000000010000000000040000000477 -:10790000000100040001000400000000000000006D -:1079100001C00100850010C0000000000000A000B0 -:107920004000000004001000000000000000000003 -:107930000000A1C0000400100801000000020000C7 -:10794000000000C101008410859100010088000042 -:1079500000C0000000000000000000000000000067 -:107960000000000000000000000000000000000215 -:1079700000000000000000000000010000001000F6 -:1079800000000100A0000400010000000000000051 -:10799000000000A011A101410189000000000000C9 -:1079A000100000000001C000000000000000000105 -:1079B000000000000400000000008501000000003D -:1079C0000000000090004040910891C00000C000FD -:1079D000080000000000020000000000000000009D -:1079E0000000000000000000000000009000000007 -:1079F000000010000000000004000000040000006F -:107A000000000000020000008000400000000000B4 -:107A10000000000000040404408204110000000083 -:107A2000000089000000000880040002000000102F -:107A3000000800090000801000020902A1210000D6 -:107A400000000000000080000280889120020500F4 -:107A50008000800041000000800000000000000065 -:107A60000000000000000000000000000000800096 -:107A70000000000080001100090011000400000057 -:107A800000090000000000000004000000000000E9 -:107A9000000000000000404104000200031100004B -:107AA00000800000000080000000000000000002D4 -:107AB00080000000800000000221092121218302B2 -:107AC000000000000000000008000802038090038E -:107AD0000000001000000000000000000000000096 +:1078E0000000000000000000000000000000000098 +:1078F0000000000000000000000000000000000088 +:107900000000000000000000000000000000000077 +:107910000000000000000000000000000000000067 +:107920000000000000000000000000000000000057 +:107930000000000000000000000000000000000047 +:107940000000000000000000000000000000000037 +:107950000000000000000000000000000000000027 +:107960000000000000000000000000000000000017 +:107970000000000000000000000000000000000007 +:1079800000000000000000000000000000000000F7 +:1079900000000000000000000000000000000000E7 +:1079A00000000000000000000000000000000000D7 +:1079B00000000000000000000000000000000000C7 +:1079C00000000000000000000000000000000000B7 +:1079D00000000000000000000000000000000000A7 +:1079E0000000000000000000000000000000000097 +:1079F0000000000000000000000000000000000087 +:107A00000000000000000000000000000000000076 +:107A10000000000000000000000000000000000066 +:107A20000000000000000000000000000000000056 +:107A30000000000000000000000000000000000046 +:107A40000000000000000000000000000000000036 +:107A50000000000000000000000000000000000026 +:107A60000000000000000000000000000000000016 +:107A70000000000000000000000000000000000006 +:107A800000000000000000000000000000000000F6 +:107A900000000000000000000000000000000000E6 +:107AA00000000000000000000000000000000000D6 +:107AB00000000000000000000000000000000000C6 +:107AC00000000000000000000000000000000000B6 +:107AD00000000000000000000000000000000000A6 :107AE0000000000000000000000000000000000096 -:107AF0000000000000008000000000000000000006 +:107AF0000000000000000000000000000000000086 :107B00000000000000000000000000000000000075 -:107B100000000000000000000103010000880000D8 -:107B20000000008200020000400010A0008402005B -:107B30001000200000000800000010830200030174 -:107B4000A100000000000000000003101000110858 -:107B5000880100000000000000000000000000009C +:107B10000000000000000000000000000000000065 +:107B20000000000000000000000000000000000055 +:107B30000000000000000000000000000000000045 +:107B40000000000000000000000000000000000035 +:107B50000000000000000000000000000000000025 :107B60000000000000000000000000000000000015 -:107B700000008800100004008800000000000000E1 -:107B80000043000000000600000000000060060046 -:107B900000810000000000000000000000E0000084 -:107BA000C805000000000000000000000000000008 -:107BB000002300000000000000430000000000005F -:107BC000000084000000000000000000004300608E -:107BD00007005000500A00E00700820A0000000081 +:107B70000000000000000000000000000000000005 +:107B800000000000000000000000000000000000F5 +:107B900000000000000000000000000000000000E5 +:107BA00000000000000000000000000000000000D5 +:107BB00000000000000000000000000000000000C5 +:107BC00000000000000000000000000000000000B5 +:107BD00000000000000000000000000000000000A5 :107BE0000000000000000000000000000000000095 -:107BF00000000000000A0000070000000000000074 +:107BF0000000000000000000000000000000000085 :107C00000000000000000000000000000000000074 :107C10000000000000000000000000000000000064 -:107C2000BAAAAAAA0000000000000000FFC33C009E -:107C300000000000FFC33C000000000000003D3CCD -:107C40003C3C000000000000000000000000145058 -:107C5000BEFAF000F0FF000000000000000000008D +:107C20000000000000000000000000000000000054 +:107C30000000000000000000000000000000000044 +:107C40000000000000000000000000000000000034 +:107C50000000000000000000000000000000000024 :107C60000000000000000000000000000000000014 -:107C7000000000000000C300C3A0000000000000DE +:107C70000000000000000000000000000000000004 :107C800000000000000000000000000000000000F4 :107C900000000000000000000000000000000000E4 -:107CA00000008AAAAAAA0000000000000000FFC38A -:107CB0003C0000000000FFC33C000000000000008A -:107CC000383C3C3C000000000000000000000000C8 -:107CD0001450BEFAF000F0FF0000000000000000A9 +:107CA00000000000000000000000000000000000D4 +:107CB00000000000000000000000000000000000C4 +:107CC00000000000000000000000000000000000B4 +:107CD00000000000000000000000000000000000A4 :107CE0000000000000000000000000000000000094 -:107CF0000000000000000000C300C3A0000000005E +:107CF0000000000000000000000000000000000084 :107D00000000000000000000000000000000000073 :107D10000000000000000000000000000000000063 -:107D2000000000000000FFFFB2B2B2B200005555E3 -:107D300000000000553CAAC3000000000000000045 -:107D40000000550F550F3C3CC3C30000000000006D -:107D50000000D7FFF7FFFFFF000000000000000059 +:107D20000000000000000000000000000000000053 +:107D30000000000000000000000000000000000043 +:107D40000000000000000000000000000000000033 +:107D50000000000000000000000000000000000023 :107D60000000000000000000000000000000000013 :107D70000000000000000000000000000000000003 :107D800000000000000000000000000000000000F3 :107D900000000000000000000000000000000000E3 -:107DA00000000000000000FF00FFB2B2B2B2AAAAB9 -:107DB000FFFF000000003C3CC3C3000000000000C7 -:107DC000000000000F0F4D4D3C3CC3C300000000FD -:107DD0000000000014000400FF00FF00000000008D +:107DA00000000000000000000000000000000000D3 +:107DB00000000000000000000000000000000000C3 +:107DC00000000000000000000000000000000000B3 +:107DD00000000000000000000000000000000000A3 :107DE0000000000000000000000000000000000093 -:107DF000000000000000000000000000FF7FFFFF07 -:107E00000000000000610006000D000005000A08E7 -:107E1000050000A005610A0F050D00A0000000008C -:107E20000000000000610007000D00000061000676 -:107E3000000D000000610006000D0000006100065A -:107E4000000D0000000000613006000D0001000080 -:107E500000000000000000614027000D00000561E7 -:107E60000A2F850D00A000000000000000000000A7 +:107DF0000000000000000000000000000000000083 +:107E00000000000000000000000000000000000072 +:107E10000000000000000000000000000000000062 +:107E20000000000000000000000000000000000052 +:107E30000000000000000000000000000000000042 +:107E40000000000000000000000000000000000032 +:107E50000000000000000000000000000000000022 +:107E60000000000000000000000000000000000012 :107E70000000000000000000000000000000000002 -:107E8000402000000000EF04FF140000000000008C +:107E800000000000000000000000000000000000F2 :107E900000000000000000000000000000000000E2 -:107EA000000000000000AA2D002DF0ACFFAC000087 -:107EB00000000000000000000000FF000F0F0000A5 -:107EC00000000F0FFF000000175517550100FFFFBE -:107ED0000000000000000000353C353C00FF0000C1 +:107EA00000000000000000000000000000000000D2 +:107EB00000000000000000000000000000000000C2 +:107EC00000000000000000000000000000000000B2 +:107ED00000000000000000000000000000000000A2 :107EE0000000000000000000000000000000000092 :107EF0000000000000000000000000000000000082 -:107F00000000000000000000EFEFFFFF0000000095 +:107F00000000000000000000000000000000000071 :107F10000000000000000000000000000000000061 -:107F20000000000000000000AA2D002D00AC0FACE6 -:107F3000000000000000000000000000FF000F0F24 -:107F4000000000000F0FFF00000017550F4D00004C -:107F5000FEFF0000000000000000353C3C3C00FF3C +:107F20000000000000000000000000000000000051 +:107F30000000000000000000000000000000000041 +:107F40000000000000000000000000000000000031 +:107F50000000000000000000000000000000000021 :107F60000000000000000000000000000000000011 :107F70000000000000000000000000000000000001 -:107F800000000000000000000000F0FFF0FC000016 +:107F800000000000000000000000000000000000F1 :107F900000000000000000000000000000000000E1 -:107FA00000000000000000000000AE0EAE0EB0B3F6 -:107FB000BCBF003CC3FF0000000000000000000048 +:107FA00000000000000000000000000000000000D1 +:107FB00000000000000000000000000000000000C1 :107FC00000000000000000000000000000000000B1 -:107FD000C3413CBE00000000000000001F0B1F0B4F -:107FE000FF7FFF7D00000000000000000000000097 +:107FD00000000000000000000000000000000000A1 +:107FE0000000000000000000000000000000000091 :107FF0000000000000000000000000000000000081 -:10800000000000000000000000000000FFFFFFFC77 +:108000000000000000000000000000000000000070 :108010000000000000000000000000000000000060 -:10802000000000000000000000000000A404A40400 -:1080300080838C8F003CC3FF000000000000000024 -:10804000000000000000000000000000000000C070 -:1080500000C0C3EB3C1400000000000000001F0B38 -:108060000F0F0020002800000000000000000000AA +:108020000000000000000000000000000000000050 +:108030000000000000000000000000000000000040 +:108040000000000000000000000000000000000030 +:108050000000000000000000000000000000000020 +:108060000000000000000000000000000000000010 :108070000000000000000000000000000000000000 :1080800000000000000000000000000000000000F0 -:10809000018001800100000001002100410000007A -:1080A0000500418003028880218011804110040076 -:1080B000008088A0038288090588212020A08404EC -:1080C0008480048221822009050920C0858900005E -:1080D00020030180208920841010119021802184A8 -:1080E00084892080208810844080208521852188F3 -:1080F000119083832080208520892105208520847C -:108100001000210804912090C110058920850411D8 -:10811000000040082040080000004000C008A00007 -:1081200000008800A040200100102020C040A001D5 -:108130000000042000052021001004040401004177 -:10814000090020040921402109000400090302203C -:108150000000000020100904054004001010040273 -:108160000203000800100402202009080404400251 -:108170004020100810040540054004082000044079 -:108180000520091020000040040410A020204040D9 -:1081900003C000000080010040000000000001005A -:1081A00000000000000000000000000000000100CE -:1081B000000000000000000000000000000000803F -:1081C000000000000000000000100000001000008F -:1081D000200000000000000000100010000000045B -:1081E0000009001000000000004000000004000032 -:1081F00000090000000500030008000900100085C8 -:108200000010000000040000000500040008000346 -:1082100000000020000000040400800000000000B6 -:108220000400000000000000090000000000090038 -:108230002000000000100000000000000008000402 -:1082400000040084000800102008008404100008C6 -:1082500000080008000000100008000800080008DE -:10826000000800080008000800840084000800845A -:10827000000800080584000809084084041002086A -:108280000910090809842084058402040208048472 -:108290000908410840090000010000000100000039 -:1082A0000900020000000008A10801080000000801 -:1082B000000800080008000801080588028800007E -:1082C00009000308018800030008008003880021DA -:1082D0000103004040210000000010410503050398 -:1082E0000002210520400211004005020490409048 -:1082F000000811100203021100050510001040884B -:10830000002105410203200801080505000840215D -:1083100000031021000220210000080000002000BE -:1083200000008400800000080000100004880000A5 -:10833000000000100084000000001000C040800415 -:1083400000009010A0A04004000021A00040A00464 -:10835000000020A000008000000000088384C0000E -:10836000C00000A0840080828382001090008040C2 -:1083700080400084840283408084410088C00040A3 -:10838000802000849082210080C0100090104084E2 -:1083900083001002A184211083C00000000040006F -:1083A0000000C0001000900040000000000002002B -:1083B0000000C000080082008200C0000000A00091 -:1083C0000000C00000008200820000001000A00039 -:1083D00004000000C000400004000000C000A0092C -:1083E0000011040008118200820090008200400009 -:1083F00040098200C000C0000400A0000400040086 -:1084000004008200820008000000040004008200D2 -:1084100082004000C0001000000540000000000085 -:1084200080000000000880900000000000000000B4 -:108430000000000000008000000000A0000000100C -:10844000000000000000004000000000000080006C -:10845000000000000082000091000000000000A069 -:1084600000000300000000C0040000A0000000A005 -:108470000000000002000000008200000000000078 -:1084800000A00000000000008008000000001100B3 -:1084900000000800000008000800020008000000BA -:1084A0000400000000000000000000100041004136 -:1084B000200000000008001010400000000500052A -:1084C0002000001000030021000001100103004102 -:1084D0000000402100410000A105821001100000B1 -:1084E0000005010001020121000300410085A100F7 -:1084F00000038310C003A103084182400010000361 -:10850000824000400041C14090400000C041000056 -:10851000A041C0030410A1008241C000C041A100DD -:1085200000088000000000000000000000000010B3 -:10853000000080000000000000008000000000003B -:1085400000108000000000400000000040004010CB -:1085500000100000801002000008100000000282DD -:1085600000000000040002002000000000000040A5 -:10857000040000002008020020A0008200C00000CB -:108580001100000000000000209000000010008496 -:108590000082000000000000048200A002400000F1 -:1085A0004082000000000000000000102008004190 -:1085B0000000001000030003000000050004040098 -:1085C00000100011000000020010201182000400C1 -:1085D00000410011040500000000004008400011A7 -:1085E00082000000004100210021820500050821D1 -:1085F0008810042100058805004190110010000535 -:108600000011001000404003820002051011A0007C -:108610004000C0901005A000A041C000A00540107F -:108620009003C00000000000000000000000800077 -:108630000000000000000000000020840000000096 -:1086400080000000000000000001000000000000A9 -:10865000000000000000800000000000000000009A +:1080900021802180410000000980418021000000F2 +:1080A000018841802100080001881180090000003A +:1080B000838004C02084040001A000C00082040565 +:1080C000008000C000C0201088A004C020A00000D4 +:1080D00000002180218041802000018521800380D3 +:1080E00020058900898041C020008880898021C0C6 +:1080F0009005218021112110200509888800201079 +:108100001005208889050400890588880409201144 +:108110000000C010C04088080000C008A040C00097 +:1081200000000821A040C00080002011C040C00015 +:108130000020200820050003002020092021202104 +:108140000000000820212003000000092003004156 +:108150000000000004040404824000001004C02059 +:10816000C002000020A04020820300002020020264 +:108170000221000008200220C0000900A021040004 +:10818000A0008000002102008400100004210000F3 +:1081900004C000000000000000000000000000001B +:1081A00000000000000000000000000000000000CF +:1081B00000000000000000800080000000000000BF +:1081C00000000000000000000000000000000000AF +:1081D000000000000000000000100000000001008E +:1081E000000000000000000000000000000000008F +:1081F000000000000000000000000000000000007F +:10820000000000000000000000000000000000006E +:10821000000000000000000000000000000000005E +:10822000000000000000000000000000000000004E +:1082300000000000000000000020004000080000D6 +:108240000000000000080008008400000084008492 +:1082500000080008000000080008000800080008E6 +:1082600008000008000800080008000800080008CE +:1082700000000008000800080008001000080008BE +:10828000000800080008200809082008090820083C +:108290002008000809080000040001002000000078 +:1082A00005000100000000000105040300100008A3 +:1082B00004000503200000210400402105080005FA +:1082C00000002088210800030500008804800008C1 +:1082D0000000000000800000000301050103010010 +:1082E0000010010321000300010305050100040043 +:1082F0000000102101210080001010210000002149 +:10830000011000100041010500030141000301219B +:108310000003000301000000000080000400800052 +:108320000000A00004000000000020008000000009 +:1083300000008000A000800000008000800082001B +:1083400000000000800282000000A0000002800403 +:108350000000000000000002000000001000020009 +:10836000040000000400820084001000900002005D +:108370008300000080084000030200008000000825 +:108380000800100041000800400003002000000029 +:10839000400000000000020000900000000000000B +:1083A000000000000000400000000000000000008D +:1083B000000004000000A000000000000000000019 +:1083C0000000820008009000000000000000000093 +:1083D0000000000000000000000000000000080095 +:1083E000400020000000C000040020002000080021 +:1083F0000400200010002000080004001000C0004D +:10840000C0000280C0008200C0000400C000400024 +:1084100004002000C000C100C000A1000000000056 +:10842000000000000010000000000000000000003C +:10843000000000000000000000000000000000003C +:10844000000000000082801000000000000000001A +:10845000000000000000000000000000000000001C +:10846000800080008000000000008000800000008C +:10847000800080008200800080000000800080007A +:1084800000000000802000000000000080000000CC +:1084900000000000800004002000030040000000F5 +:1084A0000080000000000008000300000005000834 +:1084B0000008004100000000000300050000000863 +:1084C0000008000000000000000000100000000094 +:1084D00000000000000800030090000000100000F1 +:1084E0000000000020000010004100080000001003 +:1084F000001000000005048000000041C00040039F +:1085000000212000822182000000A00002008200E1 +:108510000000C000C000A0000000002100212021B8 +:10852000000000080008000000000000000000003B +:108530000000000000000000000000000008000033 +:108540000000000000080000000000000000000023 +:108550000000000000000000000000040000000017 +:108560000000000000A0800008000000000000A043 +:108570000000000000A000008004001000000000C7 +:10858000801000008000000000000000000080005B +:108590000000000000000000000000000084000057 +:1085A00080000000000000000000002100000041E9 +:1085B0000200002100004008002100000408022100 +:1085C0000008000000410041000000210040004080 +:1085D000000000100000000000000011002000005A +:1085E0000000000000210010004100000000001009 +:1085F00000100041000000000000002100000010F9 +:108600000010002100008205000000410000002150 +:10861000000004000000000000000803000000004B +:10862000080004000000000000000000000000003E +:10863000000000000000000000000000000000003A +:10864000000000000000000000000000000000002A +:10865000000000000000000000000000000000001A :108660000000000000010000000000000000000009 -:10867000000000000000080000000000008400006E -:1086800000000000110008000000000000828000CF -:108690000000000000028000000000000000000058 -:1086A0000000000000000001840100000000000044 -:1086B00002000100000000010000010100000001B3 -:1086C00000000001000000010000000100000000A7 -:1086D0008400000100000000000000000000000114 -:1086E000C000000100000001010084000021000121 -:1086F0000100C1010040000101000001000500006F -:1087000001000401008200000000C00100210001FE -:108710000000C00000C100010000C00001C1000154 -:108720000000C00000C100012104800341100000CE -:108730000004004103080000004000000540000064 -:10874000100400004140000000040000040200008A -:1087500000090000110300000509000009410000A4 -:10876000004000000903080000004041A10300028E -:1087700000410241A00200A0000304412102008246 -:1087800000040241834000C1000000418041008399 -:108790000003004180000083000300418000048347 -:1087A000000300418000008300034180910000022B -:1087B00080801100918000A1800010028980000259 -:1087C00000804100888000408000411183800004C7 -:1087D000008004419100000200002004900000008D -:1087E00000800941840000000000000041000000FA -:1087F000004103004100000000410800410000006A -:108800000041410041000000004120004100000003 +:10867000000000000000000000100090000000104A +:1086800000000000000000000000000000000000EA +:1086900000000000000000000000000000000000DA +:1086A0000000000080000100A001000100000100A6 +:1086B000A001000100000000820001010000000094 +:1086C00000000101000000010400000100000100A1 +:1086D0008200000100000000000001010000000015 +:1086E000000000000000000101000001000800017E +:1086F0000000C100008500010000C00001900001E1 +:1087000001000100001100000100C0010021000172 +:108710000100C00000C100010100C00000C1000153 +:108720000100C00000C10101400900030220020055 +:1087300004040005020500000041000040030000A1 +:10874000000200004002000000408000050300001D +:108750002011000040030000000900004005000057 +:10876000400900004041000000004041110300C1E9 +:1087700000410041830200200003024189020241BE +:1087800000030341100941C00000034180414183BF +:1087900000030341800041830003034180004183C3 +:1087A000000303418000418305030480040000C1ED +:1087B00080004100C0000084800004000300000429 +:1087C00000804100030000408000410920000009B2 +:1087D00000004004210000000000410809000002E0 +:1087E0000000414102000040000000004100000084 +:1087F0000041090041000000004108004100000064 +:10880000004141004100000000410900410000001A :1088100000410300412100800041038041000080AD -:1088200000410380410000000041030000080810DF -:1088300000848240000008820008400201001040CD -:10884000000402400000108200114002000011C02C -:108850000000000800008200000000040101820006 -:108860000000001000018300000000020000010071 -:1088700000000001010000000000000100000000F5 +:1088200000410380410000800041038001401100AD +:108830000082100400002100008310840000A100C9 +:1088400000A002040000C1000041408400000510A7 +:10885000000000000101C000000000000000A000B6 +:10886000000000A0000185000001000000000100E0 +:108870000000000100820000000000010002000072 :1088800000000001010000000000000100000000E5 :108890000000000101000000008200010140000012 -:1088A00000820001018400000000000101000000BE -:1088B00000010800000000000000000000000000AF -:1088C000820004000000000000000400010000001D -:1088D0000200000000000000000000000000000096 -:1088E00000008400000000000000000000080000FC -:1088F0000000000100010000000000000101010172 -:108900000000000000000001000000000100000065 -:1089100000000000C101000100000000C1010001D1 -:1089200000000000C100000000000000C1000000C5 -:10893000020000030000040002000000000000002C -:108940000000800000000200410000000000040060 -:108950000200000000000200000000000000000013 -:108960000000000000411100000000000000008035 -:108970000000000000400920000500000021050261 -:108980000402000000000941000800000000054149 -:10899000400800410000C141000300410000C10542 -:1089A000050300410000C100000000410000C100BB -:1089B0000000418480000082050000808004008067 -:1089C0004100008200A10080030000008080008040 -:1089D0004100000000800000000000008000000056 -:1089E000000000C1008000000000000480000004BE -:1089F0000000000000008000000000040041800032 -:108A000000000009002080050000000300040003AE -:108A1000000000034100004100000000410000414F -:108A200000000000410000000000000041000000C4 -:108A30000000000000C02000002001000008100518 -:108A400000820000000884400020010000C0108265 -:108A500000200000000410100000000000A0080426 -:108A60000000000000410482000000000011200806 -:108A700000000000000000001000000000010001E4 -:108A800010000000000000001000000000010001C4 -:108A900000000000000100000001000000000000D4 -:108AA00000010000000000000000000000000000C5 -:108AB0000000000000000000000000004200000074 +:1088A0000082000101400000008200010140000040 +:1088B00000000000000000000000C00000000000F8 +:1088C0000000840000000000000004000000000020 +:1088D00000008400000000000000C0000000000054 +:1088E0000000100000000000000084000082000072 +:1088F0000000000001010100000000000100010073 +:108900000000000001000001000000000100010162 +:1089100000000000C101000100000000C1000001D2 +:1089200000008200C100000000008200C1000000C1 +:108930000000000400000000000000000000000033 +:10894000000000000000090000000000000002001C +:108950000000000000000000000000000000000017 +:1089600000000000804100000000000000000080C6 +:10897000000000000021052004080000002105047B +:108980004011000000000311001000000000050469 +:10899000200300410000C141000300410000C1214B +:1089A000000321418000C100410000418000C1005E +:1089B00021001180001100800800008000800080EC +:1089C0001100000080800080110000800080008085 +:1089D0000400008000800000000000000080000013 +:1089E000000000C180000000000000048089000930 +:1089F00000000000000480000000000400410000AE +:108A0000000000090000000400000009000200212D +:108A100000200040410300410041000041030041AB +:108A20000041008041000005000000804100000579 +:108A30000000008000C00200008200000008C0406A +:108A40000008000000824082000800000040040886 +:108A500000840000004010080000000000A0044056 +:108A6000000000000041100400000000000520404C +:108A700000000000000000001000000000000001E5 +:108A8000040000000000000084000000000000005E +:108A900000000000000000010001000000000001D3 +:108AA00000010000008400000001000000820000BE +:108AB00000010000008200000000000042000000F1 :108AC0000000000000000000008400000000000022 -:108AD0000000000000000000000000008400000012 +:108AD0000000000000000000000000000000000096 :108AE00000600000000000000000000048000000DE :108AF00000000000480000000000000000000042EC -:108B00000000000000004842000000000000004299 +:108B00000000000000004842000000000000484251 :108B10000000000000000042000000000000484289 :108B20000000000000004842000000000000484231 :108B300000000000000048420000000000000000AB @@ -191468,117 +191468,117 @@ :10BBC0000000000000000000000000000000000075 :10BBD0000000000000000000000000000000000065 :10BBE0000000000000000000000000000000000055 -:10BBF000000000000000000004000480020040007B -:10BC000020004000040000000400108088000400B0 -:10BC10000400C000020088002000400088004000AE -:10BC200088002000200004002000020020002000E6 -:10BC300040002000400020000000200020004000C4 -:10BC40002000100020002000200010002000200014 -:10BC50002000200020002000200004002000A00080 -:10BC6000200020002000200020000400020002002C -:10BC700040004000C00004002000800080208000C0 -:10BC80000000800000000000000080008020000014 -:10BC900000008000000080000000000000000000A4 -:10BCA0008000000000000000800000000000000094 +:10BBF0000000000000000000000020000000000025 +:10BC00001080200000000000000004000000000080 +:10BC10000000040000000000000000000000000020 +:10BC200000000000000040000000000000000000D4 +:10BC300000000000000040000000000000000000C4 +:10BC40001000000000000000000090000000000054 +:10BC50000000C000C00000002000A00000000000A4 +:10BC600000000000C0002000C0000000080002002A +:10BC7000880000000800020088000000800000002A +:10BC80000000802080000000000000008000000014 +:10BC90000000000080000000000000000000000024 +:10BCA0000000000000000000800000000000000014 :10BCB0000000000000000000000000000000000084 -:10BCC0000000000000000000000000002000000054 +:10BCC0000000000000000000000000000000000074 :10BCD0000000000000000000000000000000000064 -:10BCE0000000000009000000000000002000040027 -:10BCF0002000200020000400A00804002100000013 -:10BD00000200000005000900030000000508090802 -:10BD10000040000821201108000800080008000861 -:10BD200000080008000800080000050400040008DE -:10BD300000000000000000000008000500000000F6 -:10BD400000050000000000040005000800040000D9 -:10BD500000081000000000040004000000050005B9 -:10BD600000100100000501050103000500050008A1 -:10BD7000000504050005A00800054103A00390008C -:10BD80000000800000009000880082000000900009 -:10BD90008401000100009001A000000000000000EC -:10BDA000090000000000200409000008C00020086D -:10BDB0002000008400080908000820080908000085 -:10BDC000098400082008000809080008000400840D -:10BDD000000809080984090800840984000840084B -:10BDE0002008000802080908040820084108110872 -:10BDF0004110410889084108050940082008400809 +:10BCE0000000000000000000800000002000C100F3 +:10BCF000C10000004000A000C0002000210005009D +:10BD000001000000010005000200000011002100F8 +:10BD100001000000012021000200000000000000DE +:10BD200000000100000020000000410000000000B1 +:10BD30000000000000000000000000000000000003 +:10BD400000000000000000000000000000000000F3 +:10BD500000000000000000000000000000000000E3 +:10BD60000000030000000500090041000000010080 +:10BD700021004100000005001100050001008400C1 +:10BD80009000020000002000900080000000A00051 +:10BD900090000200000020019000800000000000E0 +:10BDA000200000004000200000000000840000008F +:10BDB00020000000000000002000008200000000C1 +:10BDC0000000000000000000000000000000200053 +:10BDD0000000000000000000000000000000000063 +:10BDE000000800008400000090009000840000849F +:10BDF00004849000840000009000A000A0002000B7 :10BE00000000000000000000000000000000000032 -:10BE10000000000000080000000000000040880052 +:10BE1000000000000000000000000000000800001A :10BE20000000000000000000000000000000000012 :10BE30000000000000000000000000000000000002 -:10BE400000000000000000210000000000000000D1 -:10BE5000000800400021000500200000000800004C -:10BE60000040000000400003000000080003000044 -:10BE700000050021000000400010000310020041F6 -:10BE800000050000000000000000000000000000AD -:10BE900000000000000000000000000000000001A1 +:10BE400000000008000000000000000000000000EA +:10BE500000000000000000000000000000000000E2 +:10BE600000000000000000000000000000000000D2 +:10BE700000000000000000000000000000000000C2 +:10BE800000090000000000000000000000000000A9 +:10BE900000000000000000000000000000000000A2 :10BEA0000000000000000000000000000000000092 :10BEB0000000000000000000000000000000000082 :10BEC0000000000000000000000000000000000072 -:10BED0000000000000000000004000000000000022 -:10BEE0000000000000000000000000000001000051 -:10BEF0000000000003000000000000880900A1000D -:10BF0000030021000100010802210000008401A0BB -:10BF1000000804002004A18002000000C10808807D -:10BF2000000000008200080008000800C0030000B4 -:10BF30000000C00082008200820082000800000031 -:10BF4000000000000000000082008200822100004A -:10BF5000100000001000000010000000C0001008D9 -:10BF60001003100082001000820008211000100051 -:10BF70008220832084001000C0841105820082008A -:10BF800009411100200004002001000000004121AF -:10BF9000040900A0000080012004800000002009A6 -:10BFA0008020000000000008000000000000008267 -:10BFB0000000000000000000000000080000000079 -:10BFC0000000000000000000000800000000000069 -:10BFD0000000000000C0000000000500000000009C -:10BFE00005000000000000000500008200000000C5 -:10BFF0000000050102830300008400090282410061 -:10C000002184840002848382000008000000000074 -:10C010000000000000000000000008000000000018 -:10C020000000100000000000C000A00000000000A0 -:10C0300000000000000000000000000000000040C0 +:10BED0000000000000000000000000000000000062 +:10BEE0000000000000000000000000000000000052 +:10BEF0000000000000000000000000000800050035 +:10BF00000000000000080100000000000000010027 +:10BF100000210000002000100000000001000010BF +:10BF20000000000000000000000000000000000011 +:10BF30000000000000000000000000000000000001 +:10BF400000000000000000000000000000000005EC +:10BF500000000000000800000000000000000000D9 +:10BF600000000000000000000000000408000000C5 +:10BF70000104C100100800000100000400000000DE +:10BF8000010082000008000108000000000000001D +:10BF90000800000000000001000100000000100087 +:10BFA000000100000000000000000000000000840C +:10BFB0000000000000000000000000000000000081 +:10BFC0000000000000000000000000000000000071 +:10BFD0000000000000000000000000000000000061 +:10BFE0000000000000000000000000000001000050 +:10BFF0000000040102000000000004000001000035 +:10C00000000004000000000000000000000000002C +:10C010000000000000000000000000000000000020 +:10C020000000000000000000000000000000000010 +:10C030000000000000000000000000000000000000 :10C0400000000000000000000000000000000000F0 -:10C0500000000800000000000000000000000000D8 -:10C060000000000000000000000000400000000090 -:10C070000000904008211004A000882082030000E6 -:10C08000000084028905A021844100008000000096 -:10C090000000000000000000000000008000000020 -:10C0A0000000000080000000000000000000000010 +:10C0500000000000000000000000000000000000E0 +:10C0600000000000000000000000000000000000D0 +:10C0700010000000000000000000000000000000B0 +:10C0800000000000000000000000000000000000B0 +:10C0900000000000000000000000000000000000A0 +:10C0A0000000000000000000000000000000000090 :10C0B0000000000000000000000000000000000080 :10C0C0000000000000000000000000000000000070 :10C0D0000000000000000000000000000000000060 :10C0E0000000000000000000000000000000000050 -:10C0F00000000000000080000001000000010000BE -:10C10000000000000000200000040000000001808A -:10C11000008000000000108000000000008000008F -:10C120000000000000000580000800000000000082 -:10C1300000000000000000000000000000000000FF +:10C0F00000008000000000000000000000000000C0 +:10C10000000000000000000000000000000000002F +:10C11000000000000000000000000000000000001F +:10C12000000000000000000000000000000000000F +:10C1300000000000000000000000000000210000DE :10C1400000000000000000000000000000000000EF -:10C1500000000000000000000000000000000000DF -:10C1600000000000000000000000000500000000CA -:10C170000000010410000000010000801000C00059 -:10C1800009802080A003C0C182008803C000000095 -:10C19000040800400000410880040000000000087E -:10C1A0000000008400000000A0100000000000005B -:10C1B0000000000000000000000000000008000077 +:10C1500000000000000000000000000000000008D7 +:10C1600000000000000000000000000000000000CF +:10C1700000000000000000000000000000000000BF +:10C1800000000000000000000000000000000000AF +:10C19000000000000000000000000000000000009F +:10C1A000000000000000000000000000000000008F +:10C1B000000000000000000000000000000000007F :10C1C000000000000000000000000000000000006F :10C1D000000000000000000000000000000000005F :10C1E000000000000000000000000000000000004F -:10C1F0000000000004018082000010000002000026 -:10C2000000820410C102040000200888000000829F +:10C1F000000000000000000000000000000000003F +:10C20000000000000000000000000000000000002E :10C210000100C000014000000100C000014000001A :10C220000100C000014000000100C0000141000009 :10C23000010000000040000001000000004000007C :10C24000010000000040000001000000004000006C -:10C2500000000000C000010000010101C000010059 -:10C2600000010000C000010000010000C00001004A +:10C2500000000000C000010000010000C00001005B +:10C2600000010001C000010000010000C000010049 :10C2700000010000C000010000010001C000010039 :10C2800000010000C000010000010000C00001002A :10C2900000014100802141C100004100802141C1D5 :10C2A00000004100800041C1000041008000418346 :10C2B00000004100000000C100004100000000C17A :10C2C00000004100000000C100004100000000C16A -:10C2D0000000000000418000410000034141800057 +:10C2D0000000000000418000410000030041800098 :10C2E0004100000300418000410000030041800044 :10C2F0004100000300418000410000030041800034 :10C300004100000300418000410000030041800023 @@ -191587,7 +191587,7 @@ :10C33000000080000000A100000000000000A1003B :10C34000000000000000A100000000000000A100AB :10C3500000000000000041004100004103004100D6 -:10C3600021000000030041004100004103004100A2 +:10C360004100004103004100410000410300410041 :10C370004100004103004100410000410300410031 :10C380004100004103004100410000410300410021 :10C3900041000041030000C02000000082000000B6 @@ -191595,7 +191595,7 @@ :10C3B00020000000820000002000000000000000BB :10C3C000200000000000000020000000000000002D :10C3D000200000000000000000000000000101003B -:10C3E0000100000000000100000000000001010049 +:10C3E0000100000000010100000000000001010048 :10C3F0000100000000010100000000000001010038 :10C400000000000000010100000000000001010028 :10C41000000000000001010000C00000C00000009A @@ -191712,178 +191712,178 @@ :10CB00000000000000000000000000000000000025 :10CB10000000000000000000000000000000000015 :10CB20000000000000000000000000000000000005 -:10CB300000000000000008000000C1008400840024 -:10CB40002000400020008400200020002000200061 -:10CB50004000200084002000400020008800C00029 -:10CB600020002000200020001000200040002000B5 -:10CB7000400000000003400020002000200088004A -:10CB80002000200008002000C000900020002000AD -:10CB90002000200040002000200020002000200075 -:10CBA000400020008800200084038800400020000E -:10CBB000C0008800840000008000000040000008E1 -:10CBC0000000000080000000000000000000800065 +:10CB300000000000000000000000000000000000F5 +:10CB400000000000000000000000000000000000E5 +:10CB500000000000000000000000100010000000B5 +:10CB600000000000400040004000400000000000C5 +:10CB700000000000000340004000000020002000F2 +:10CB80000000000010002000200020002000000015 +:10CB900000000000000020001000880010002000AD +:10CBA00000000000200020004000200020000000C5 +:10CBB0000000000000000000000000000000000075 +:10CBC0000000000000000000000000000000000065 :10CBD0000000000000000000000000000000000055 :10CBE0000000000000000000000000000000000045 :10CBF0000000000000000000000000000000000035 -:10CC00000000000000008000400000000000000064 -:10CC100000000000000000000400100000000900F7 -:10CC20000000200000002000400020004000200004 -:10CC30000400200020001000000090009000000080 -:10CC400085000009000000040000910000000000C1 -:10CC500000000104010000050000000000000000C9 -:10CC600004000105000000000004000800000000AE -:10CC7000000000050000000000000008000000089F -:10CC8000000400030003000408050004010401047B -:10CC9000000401040108010001050100010400096C -:10CCA0000000910800050108000090000104010542 -:10CCB0000100000910050008000400000008000041 -:10CCC000000840080008008400000508080000086B -:10CCD00000080008200840080008000800080008B4 -:10CCE0000008A008040800080008008400040004EC -:10CCF000008420880008200820080000000409089B -:10CD0000098800080008400800848008000804081A -:10CD100004080008040820820408200820082008CD -:10CD20004008000820840908208840040084200866 -:10CD300020042004410803880588098800000000B9 -:10CD40000008002100000000000800000041000071 -:10CD5000000000210041000000050000000000006C -:10CD6000000000210021000000000003000000007E -:10CD7000002100080002000500000004000000215E -:10CD80000000000300030000002100000003010276 -:10CD9000002100000000000000210040000500020A -:10CDA00000030103014000400141000200080008A7 -:10CDB0000021000800080021000500030002000017 +:10CC00000000000000000000000000000000000024 +:10CC10000000000000000000000000000000000014 +:10CC200000000000000000000000210010001000C3 +:10CC30002100400000000000000000000000000093 +:10CC400000000000000000000000000000000000E4 +:10CC500000000000000000000400040004000400C4 +:10CC600000000000000000000400040004000400B4 +:10CC700000000000000000000000000000000000B4 +:10CC800000000000000000000000000000000000A4 +:10CC90000000000000000000000000000000000094 +:10CCA0000000000000000000000000000000000084 +:10CCB0000000000000000000000000000000000074 +:10CCC000000000000500000000000000000000005F +:10CCD00000000000000000000000850080008000CF +:10CCE0008000000000000000000080008000800044 +:10CCF00080000000000000000000000000000000B4 +:10CD00000000000000000000000000000000000023 +:10CD1000000000000000000000000000000800000B +:10CD200000080000000000000000000000000500F6 +:10CD300005000000000005000008000800000000D9 +:10CD400000000000000000000000000000000000E3 +:10CD500000000000000000000000000000000000D3 +:10CD600000000000000000000000000000000000C3 +:10CD7000000300000000000000000000000000218F +:10CD80000000002100000000000000000000012061 +:10CD90000120002000A000000000000000000000B2 +:10CDA0000000000300000000000000080000000078 +:10CDB0000000000000000000000000000000000073 :10CDC0000000000000000000000000000000000063 -:10CDD000080000000000000000000000000000004B +:10CDD0000000000000000000000000000000000053 :10CDE0000000000000000000000000000000000043 :10CDF0000000000000000000000000000000000033 -:10CE00000000000000000000000010000000000012 -:10CE100004000000000000002100000000000000ED -:10CE20000000100020002000400020000000210031 -:10CE300004001084000041004000000004000800CD -:10CE40001021000000000003002100020021000961 -:10CE500000000011A0000000084141000105010090 -:10CE600000000000820000001000820004000400A6 -:10CE7000A000A0008200000082008200820000006A -:10CE800000008200C0000000A000080082008200B4 -:10CE90000800A005820008000400200010008204A1 -:10CEA0008302880082008200C000A000C000100041 -:10CEB00085008400900008028200C0051000C005B3 -:10CEC000C008000800000000000000000000009002 -:10CED00005080000000000820000008840822090C9 -:10CEE0004000000000000000000000000000800082 -:10CEF00080000000000000000000000800000000AA -:10CF00000000000000000000000000002100000000 -:10CF100000000084000008820000800080A0030060 -:10CF200000A1040100A011A000A000A00084050041 -:10CF3000008420001088039011C009A021820008FD -:10CF400021A000840000900000000000000000000C -:10CF5000000800000020200000020000000000087F -:10CF60000108000000410000000200200000000055 -:10CF7000000000000000000900080005000000009B -:10CF8000A0000200000000000002000000000000FD -:10CF900000400008000000000000000300008202C2 -:10CFA0000040000200020003000990050002100387 -:10CFB00084409021002182808403840090410002FB -:10CFC00082400000A00300000000000000000000FC +:10CE0000000000000008000000000000000000001A +:10CE100004010401000100210000000000000000E6 +:10CE200000000800000008000000040004000000EA +:10CE300000000800000000000000400000000000AA +:10CE400000000000000000000000000000000000E2 +:10CE500000000000000000000000000000000000D2 +:10CE600000000000000000000000000000000000C2 +:10CE700000000000000000000000000000000000B2 +:10CE800000000000000000000000000000000000A2 +:10CE9000000000000000040000000000000000008E +:10CEA0000000000010000000000000000000000072 +:10CEB000000010008200010000800000000000005F +:10CEC0000000000000000000000000000000000062 +:10CED0000000000000000000000000000000000052 +:10CEE0000000000000000000000000000000000042 +:10CEF0000000000000000000000000000000000032 +:10CF00000000000000000000000000000000000021 +:10CF10000000000000000000800000000000000091 +:10CF20000000000000000000000000000000000001 +:10CF3000000000008000000020840004000000A029 +:10CF400000000000000000000000000000000000E1 +:10CF500000000000000000000000000000000000D1 +:10CF600000000000000000000000000000000000C1 +:10CF700000000000000000000000000000000003AE +:10CF80000000000000000008000000000000000099 +:10CF90000000000000000000000000000000000091 +:10CFA0000000000000080000000000000000000079 +:10CFB00000030000900000080000000000000000D6 +:10CFC0000000000000000000000000000000000061 :10CFD0000000000000000000000000000000000051 -:10CFE0000000200000000000000000000000000021 +:10CFE0000000000000000000000000000000000041 :10CFF0000000000000000000000000000000000031 :10D000000000000000000000000000000000000020 :10D010000000000000000000000000000000000010 -:10D02000000000000000000000840000000000007C -:10D0300000000000000000000004000000002100CB -:10D0400003000000000010000000000000000000CD -:10D05000000000008800000300000008000000003D -:10D060000000000000000100000000000021000599 -:10D07000040008000000002100000000080000007B -:10D0800000000000000082210000080000210000D4 -:10D090000000100000000000000082800400040076 -:10D0A00082210002A100A100A00382000000000074 -:10D0B000A0038209000000038800A0030000880389 -:10D0C00040009000C01184008400000000000000B7 -:10D0D00000000000009000000000000000000000C0 -:10D0E000008200820000000020000000000000001C -:10D0F00000008000000000000000000800000000A8 -:10D10000000000000000008200000000000000009D -:10D11000410000000000000000000000002080002E -:10D120008500000000010482408200000000000031 -:10D1300000000000000000000300000000000000EC -:10D14000000000C0009000000090000001A000045A -:10D1500000C000000000000010000000001000905F -:10D16000009000C00100000010000000000000005E +:10D020000000000000000000000000000000000000 +:10D0300000000000000000000000000000000000F0 +:10D0400000080000000000000000000000000000D8 +:10D0500000000000000000000000000000000000D0 +:10D0600000000000000000000000000000000000C0 +:10D0700000000000000000000000000000000000B0 +:10D080000000000500000005000000000021000075 +:10D09000002100000000000000000000000000006F +:10D0A000000000000000002100000000000000005F +:10D0B0000000000000000000000000000000000070 +:10D0C0000008000000000041000000000000000017 +:10D0D000000000000000000000000000000200004E +:10D0E0000000000000000000000000000000000040 +:10D0F0000000000000000000000000000000000030 +:10D10000000000000000000000000000000000001F +:10D11000000000000000000000000000000000000F +:10D1200000000000000000000008000000000000F7 +:10D130000000000000080000000000840000000063 +:10D1400000000000000000000000000000000000DF +:10D1500000000000000000000000000000000000CF +:10D1600000000000000000000000000000000000BF :10D1700000000000000000000000000000000000AF :10D18000000000000000000000000000000000009F :10D19000000000000000000000000000000000008F -:10D1A000000000000000000000000100000000007E -:10D1B000000001000000000000000100000000006D -:10D1C00000000100000000000000000000001080CE -:10D1D00021000000000000000009800000000000A5 -:10D1E0000000000000001100100009000000000015 +:10D1A000000000000000000000000000000000007F +:10D1B000000000000000000000000000000001006E +:10D1C000000000000000000000000000000000005F +:10D1D000000000000000000000000000000000004F +:10D1E000000000000000000000000000000000003F :10D1F000000000000000000000000000000000002F :10D20000000000000000000000000000000000001E :10D21000000000000000000000000000000000000E -:10D2200000000000000000000005000408000008E5 -:10D2300000000000080000000000000008000000DE -:10D2400000000000050000000000000000000000D9 +:10D2200000000000000000000000000000000000FE +:10D2300000000000000000000000000000000000EE +:10D2400011002100000000000000000000000000AC :10D2500000000000000000000000000000000000CE -:10D260000000000000000000400304004108090421 -:10D27000000000000000000000000080000000002E -:10D28000000000000000000000000000000000009E +:10D2600000000000000000000000000000000000BE +:10D2700000000000000000000000000000000000AE +:10D28000000000800000008000000000000000009E :10D29000000000000000000000000000000000008E -:10D2A00000000000000000000080110000000000ED -:10D2B000088000020000000500000002000000409D -:10D2C0000000000300000008000000000000000053 +:10D2A00000000000008000000000000000000000FE +:10D2B000000000000000000000000000000000006E +:10D2C0000000004109000003008000000000000091 :10D2D000000000000000000000000000000000004E -:10D2E00000000000000000000000018800000001B4 -:10D2F000000100000000000000000000001000001D -:10D300000004000000000000000000000000000019 -:10D31000000000000000000000000000000090007D -:10D3200000009000000000020000000800000082E1 -:10D3300000000004000100000000000000010000E7 -:10D3400000000000000000000000001000000000CD -:10D3500000000000A0000000000002000000010129 -:10D3600000010100400000000000880000002000D3 -:10D3700000010100000000000000000001000000AA -:10D38000100000000000000000000000000000008D +:10D2E000000000000000000000000000000000003E +:10D2F00000000000008800000002000000000000A4 +:10D30000000000000008000000080000000000000D +:10D31000000000000000000000000000000000000D +:10D3200000000000000000C000000002000000003B +:10D3300000000000000000000000000000000000ED +:10D340000000000000010100000000880000000053 +:10D3500000000000000000000000000000000000CD +:10D3600000000000000000000000000000000000BD +:10D37000000000000000000010000000000000009D +:10D38000000000000000000002000000000000009B :10D39000000000000000000000000000000000008D -:10D3A000000000000000000000000200000000007B -:10D3B0000800400000000000040010000000000011 -:10D3C000200000000000000020000000010000001C -:10D3D00000000000000000100008000080090000AC -:10D3E00040030010081100000000000000000004CD -:10D3F0008008000310110000000000000000400041 -:10D40000000080000000000000000000000000009C +:10D3A000000000000000010000004000000000003C +:10D3B000000000000000000000000000000000006D +:10D3C00000000000000000008800000001000000D4 +:10D3D000000000000000000000000000000000004D +:10D3E000000000000000000000000000000000003D +:10D3F0000000000000000400000000000000000029 +:10D40000000000000000020000000000000000001A :10D41000000000000000000000000000000000000C -:10D4200000000000000000001100000000000000EB -:10D43000051000000008000500008000000040000A -:10D440000000800000000500000080000000410096 +:10D420000000000000000000080000008000000074 +:10D4300000000000000000000000000000000000EC +:10D44000000000000000000000000000000041009B :10D4500000000000000000000000000000000000CC :10D4600000000000000000000000000000000000BC -:10D4700002882011080011200000000000000000B8 -:10D480000008000200000000000000000000000092 +:10D4700000000000000000000000000000000000AC +:10D48000000000000000000000000000000000009C :10D49000000000000000000000000000000000008C -:10D4A000000000000000000000000000000200007A -:10D4B00000000091002100000000000000000000BA -:10D4C000000000080000000000000008000000004C -:10D4D00000000000000000000000040088000400BC -:10D4E000C00000000000000000000000000000007C -:10D4F0000000001100010100000000000000000019 -:10D50000000000010000000000000000000000001A +:10D4A000000000000000000000000011000000006B +:10D4B000000000000000000000000000000000006C +:10D4C000000000000000000000000000001110003B +:10D4D000000000000000000000000000000000004C +:10D4E000000000000000000000000000000000003C +:10D4F000000000000000000000000000000000002C +:10D50000000000000000000000000000000000001B :10D51000000000000000000000000000000000000B :10D5200000000000000000000000000000000000FB -:10D5300000000000004000000000000000000000AB -:10D5400000000000000000000000000000000000DB -:10D5500000000000000000000000000000000000CB +:10D5300000000000000000000000000000000000EB +:10D5400000000000000000000000000000000001DA +:10D5500001000000000000000000000000000000CA :10D5600000000000000000000000000000000000BB -:10D5700000000000000000E00000000000000000CB -:10D580000000000000810000070000000000000013 -:10D59000000000000000000000000000000000008B -:10D5A00000000000000000000000000000000082F9 -:10D5B000000007000000418200E007000000840036 -:10D5C00000E000000000410000E0000000006000FA -:10D5D00000E00000000A0000000000000000000061 -:10D5E000000C00000000000000000000000000002F +:10D570000000000000000000000000000082000029 +:10D58000070400000000000000000000008200000E +:10D590000704000000000000000000000000000080 +:10D5A000000000000000000000000000000000007B +:10D5B000000007044200000000000000000000001E +:10D5C000000000000000000000000000000000005B +:10D5D00000E00000814100000000000000000000A9 +:10D5E000000000000000000000000000000000003B :10D5F000000000000000000000000000000000002B :10D60000000000000000000000000000000000001A :10D61000000000000000000000000000000000000A @@ -191891,7 +191891,7 @@ :10D6300000000000000000000000000000000000EA :10D6400000000000000000000000000000000000DA :10D6500000000000000000000000000000000000CA -:10D660000000000C000000000000000000000000AE +:10D6600000000000000000000000000000000000BA :10D6700000000000000000000000000000000000AA :10D68000000000000000000000000000000000009A :10D69000000000000000000000000000000000008A @@ -191908,988 +191908,988 @@ :10D7400000000000000000000000000000000000D9 :10D7500000000000000000000000000000000000C9 :10D7600000000000000000000000000000000000B9 -:10D77000000000001A3E9BBF0000000000000000F7 +:10D7700000000000000000000000000000000000A9 :10D780000000000000000000000000000000000099 :10D790000000000000000000000000000000000089 :10D7A0000000000000000000000000000000000079 -:10D7B000000000000F0F000000000000000000004B +:10D7B0000000000000000000000000000000000069 :10D7C0000000000000000000000000000000000059 :10D7D0000000000000000000000000000000000049 -:10D7E00000000000000000009000000000000000A9 -:10D7F000000000000000022683A7000000000000D7 +:10D7E0000000000000000000000000000000000039 +:10D7F0000000000000000000000000000000000029 :10D800000000000000000000000000000000000018 :10D810000000000000000000000000000000000008 :10D8200000000000000000000000000000000000F8 -:10D830000000000000000F0F0000000000000000CA +:10D8300000000000000000000000000000000000E8 :10D8400000000000000000000000000000000000D8 :10D8500000000000000000000000000000000000C8 -:10D86000000000000000000000610006000D000044 -:10D8700000610006000D0000000000000000000034 -:10D8800000610007000D0000000000000000000023 -:10D8900005000A28050000A00000000000000000AC +:10D8600000000000000000000000000000000000B8 +:10D8700000000000000000000000000000000000A8 +:10D88000000000000000000005180A20050004A0A8 +:10D89000000000000000000005180A20050004A098 :10D8A0000000000000000000000000000000000078 -:10D8B0000000000000000000000005000A2805002C -:10D8C00000A005610A2B850100A000610007800D02 -:10D8D000000000610007800D000000610007800D5E -:10D8E0000000000000000000000000000000F0F058 -:10D8F000FCFC0000000000FFA0AF000000000000E2 -:10D900000000BF973D15BEBEC0FC00000000000037 +:10D8B0000000000000000000000005180A0005003C +:10D8C00004A00000000000000000000000000000B4 +:10D8D0000000000000000000000000400006000CF6 +:10D8E0000000000000000000000000000000000038 +:10D8F0000000000000000000000000000000000028 +:10D900000000000000000000000000000000000017 :10D910000000000000000000000000000000000007 :10D9200000000000000000000000000000000000F7 :10D9300000000000000000000000000000000000E7 -:10D940000000000000000000003CFF3C0000000060 -:10D9500000000000000000000000000000000000C7 -:10D9600000000000000000000000000000000000B7 -:10D97000F0F0C0C00000000000FFA0AF00000000F9 -:10D9800000000000AB8329018282C0FC000000007F +:10D9400000000000000000000000000000000000D7 +:10D9500000000000000000000000000000000F0FA9 +:10D96000FFFF0000000000000000000000000000B9 +:10D9700000000000000000000000000000000000A7 +:10D980000000000000000000000000000000000097 :10D990000000000000000000000000000000000087 :10D9A0000000000000000000000000000000000077 :10D9B0000000000000000000000000000000000067 -:10D9C00000000000000000000000003CFF3C0000E0 +:10D9C0000000000000000000000000000000000057 :10D9D0000000000000000000000000000000000047 -:10D9E0000000000000000000000000000000000037 -:10D9F00000000000000000AA00AA000000000000D3 -:10DA000000000000000000000000C8F8CBFB000090 +:10D9E0000F0F000000000000000000000000000019 +:10D9F0000000000000000000000000000000000027 +:10DA00000000000000000000000000000000000016 :10DA10000000000000000000000000000000000006 :10DA200000000000000000000000000000000000F6 :10DA300000000000000000000000000000000000E6 -:10DA40000000000000000000FFC33C00FFFF3C3C62 +:10DA400000000000000000000000000000000000D6 :10DA500000000000000000000000000000000000C6 -:10DA600000000000000000000000000000000000B6 -:10DA7000000000000000000000AA00AA0000000052 -:10DA800000000000000000000000000008380B3B10 +:10DA600000000000F0F000000000000000000000D6 +:10DA700000000000000000000000000000000000A6 +:10DA80000000000000000000000000000000000096 :10DA90000000000000000000000000000000000086 :10DAA0000000000000000000000000000000000076 :10DAB0000000000000000000000000000000000066 -:10DAC00000000000000000000000FFC33C00000058 -:10DAD0003C3C0000000000000000000000000000CE -:10DAE0000000000000000000000000000000000036 -:10DAF00000002000200088002000200020002000DE -:10DB00002008400021000000200000002000040048 -:10DB1000200020004000200020002000200088007D -:10DB200020002000200020002000040520004000EC -:10DB300020050003204040002000200421000100B7 -:10DB4000200020004000200008002000401020009D -:10DB5000201020042004100020042000C0094005EB -:10DB6000820040100404400940002000200404000A -:10DB70001000200000000000000000000000000075 -:10DB80000000000000002000000000000000000075 -:10DB9000000000000000000000000000090000007C -:10DBA0004100000080000000C100000000000400EF -:10DBB000000004000000000120000000000120001F -:10DBC000400089000400050000008000400084003F -:10DBD000000009004000400000004100400020001B -:10DBE0000300200004004100200020004100040048 -:10DBF0002000040004000000820508000100000469 -:10DC000000410109000404090004900301004004DC -:10DC100001044004010000000000000000000005B5 -:10DC200000020005000000040008000000000004DD -:10DC3000080408080800000000400000080409006B -:10DC4000208000022000000040000010400000047E -:10DC5000914121100009200500000000A1410008A9 -:10DC6000001000090009000800090841A008001080 -:10DC70009008014100080005090800040084408460 -:10DC80000808000802080010040800102010041002 -:10DC90008408201080082084040804000508000877 -:10DCA0000008040800080008000809100008000423 -:10DCB00009080908208400080000040909088008F0 -:10DCC000A00884040009A00800048410090884083E -:10DCD000001004088408400880080008050840086F -:10DCE000008440820408000820044010000800104E -:10DCF0000504091020100010001000100021000879 -:10DD0000001000080040000000030002004100086D -:10DD100000030010000000000000000500080000E3 -:10DD2000000000000004004000100000002100007E -:10DD300000080010001000100000000000000005A6 -:10DD40000000000000080040000400100011002145 -:10DD500000400008004000C00021001000410021E8 -:10DD6000C01000030008001000040041000800215A -:10DD700000410008004000210040040300000000B2 -:10DD8000000004080008000000000000000000007F -:10DD9000040000082120000000080000008808821C -:10DDA0000000000000000000001000000000000063 -:10DDB00000000000000000000000000000000088DB -:10DDC000000000000000000008A00201000000C0E8 -:10DDD00000400000000000A000040000000100A0BE -:10DDE00003400084034003822100050400840300F3 -:10DDF000410040402100100010080804800082000B -:10DE000000000000000000040008001100000004F1 -:10DE10000000000000000800050090000000000065 -:10DE200040000000400004008200080000000004E0 -:10DE30000402000482820000002182000000000031 -:10DE400040020410000383C02010001005042000CD -:10DE500000108800080082001003104184008341F4 -:10DE6000A0000400A0000402C00000001000820016 -:10DE7000C000820282008302402008A08220842009 -:10DE80000084001000C0008400A0001000100008F2 -:10DE90000090000021004000000020000000000071 -:10DEA0000084001000000082000000A000100008A4 -:10DEB00008010001000100030000000000000090C4 -:10DEC0000000800100100000204180A000C020015F -:10DED00080000801008800A00000118400840082F6 -:10DEE0000410000008000482000000A0110021A01E -:10DEF00000A000A0210000042001C0858011008343 -:10DF0000400900400021000500050000000002005B -:10DF100004000003000000020011000000080021BE -:10DF2000001000000011000000210040000040101F -:10DF30009000000000000000040004000010000039 -:10DF400090000000000000000000000001004040C0 -:10DF500021009021A0418400044100000000200223 -:10DF6000080920000800A010000000100000821026 -:10DF70008210400000000000C00020859020042096 -:10DF80000220A0200000001000100400000809007A -:10DF9000000000000310200000000000000000202E -:10DFA00011200040000000000000000000000004FC -:10DFB0000000000000000000004000000000000021 -:10DFC0000000000000000000000000000000200031 -:10DFD0008000A0000000000000000084000000009D -:10DFE000800080A0800280000000002000840000EB -:10DFF0000000000400020000000000008002000198 -:10E000000001800100010021000500000041000521 -:10E0100000051010000308100008000000000000B8 -:10E0200000000000000800100021000000000004B3 -:10E0300000000000000000000000000000000000E0 -:10E040000000C00000000000010000000000C1004E -:10E05000210000101000A0080021C00000030021D2 -:10E0600008404010042100000010C00582210083F8 -:10E07000000040050021C005080000100000040257 -:10E08000A00040414020824100000000000000004C -:10E0900002820504200000080000000000000000CB -:10E0A0000404000000000000000000000000000068 -:10E0B0000000000000100000000000A000000000B0 -:10E0C00000000010001000000000400000000000F0 -:10E0D0000800A0000000000000000008110000007F -:10E0E0000082030111018000001000000000000008 -:10E0F000001000000000000000000000000004000C -:10E1000000A1000000C00001000000000100840028 -:10E1100000000000000000000000C00040010000FE -:10E1200090000000000188000000000000000000D6 -:10E13000000000000000000000000001A1019001AB -:10E1400000010000000000000000000002110002B9 -:10E15000008820900001010110000000008840218B -:10E1600000040004000800049004000200000800FD -:10E17000000000000000000000000000010000009E -:10E180000800000000A00401008200010000080057 -:10E190000000000000000000000000008000800877 -:10E1A000002080000009094000000000000000007D -:10E1B000000000000000000000000000001083408C -:10E1C00080100003000000000000000000000008B4 -:10E1D0000010000200090011212100110000088533 -:10E1E0008088008300800082000900210003000075 -:10E1F00000000000000000000000000000004000DF -:10E200000900C1000000009100110003001100008E -:10E21000000000000000000000100080000080806E -:10E2200080000005800309000000100200110000BA -:10E23000000000000000000000000000000041801D -:10E2400004000302000800000000000000000000BD -:10E2500000000080000000000000410002112000CA -:10E26000A10008A18021A01110008800800010A04A -:10E27000C103100888081000000000000000000022 -:10E280000000000000030000000000910080000377 -:10E29000000000000000000000000001001000006D -:10E2A00088104000900008010010000000000000ED -:10E2B000000000000000000000000000000000005E -:10E2C00000C000000000002000000000000000006E -:10E2D00000008800A0101008840000000000000169 -:10E2E0000000081021A08801820084901184A00001 -:10E2F0001108400091008289040000000000000025 -:10E3000000000000000000000000000400090002FE -:10E3100000110000000000010001000000000000EA -:10E320000000000001880000000000010100A000C2 -:10E3300000000000000000000000000000000000DD -:10E3400000000000000010010001000000000000BB -:10E35000000000002090018804100210000000005E -:10E3600002010100402001400888029000050003DE -:10E37000C0110500000000001000000000000000B7 -:10E38000000000000000000000000101000000008B -:10E39000020000000000001000080008000000005B -:10E3A0000000000000001100000000000008114102 -:10E3B00080200000000000000000000000000000BD -:10E3C0000000000000410208800800030000000077 -:10E3D0000000000000000000108090800400000297 -:10E3E000000000051109000020804100800010108D -:10E3F000050300A111200000000000000000000043 -:10E400000000000000000011001100114111110076 -:10E4100000004100000000000000000000000010AB -:10E4200080000000000002210221110003001121E0 -:10E43000210903000011000000000000000000009E -:10E440000000000000001000081008000308000091 -:10E4500000000000000000000000000080800000BC -:10E46000090008000900110302832109048021200A -:10E470001088108808800340000080800000004160 -:10E48000000000000000000000000000000000008C -:10E49000A1111140890000000000000000000000F0 -:10E4A000880020000400900000010004001001001A -:10E4B0000001000001000001000000000000000059 -:10E4C00000000000000000000088000001000100C2 -:10E4D000000000000000000000000800028802C0E8 -:10E4E0000200008801000000000000A0211000824E -:10E4F0000100010201A10008000190084040888845 -:10E50000900100000000000000000000000000007A -:10E510000000910105019000C00000000000000013 -:10E5200000000000000000000000600600E007009E -:10E530006000820000E00000000000000000000019 -:10E5400000000000000000000000600000E000008B -:10E55000880000000000000000000000840000E0CF -:10E5600000000006840000E0000000000000000041 -:10E5700000000000818100E00700000000000000B2 -:10E58000000000820000000000000000820000E0A7 -:10E5900000000082600600E00700000000000000AC -:10E5A000000000007343F4F40000000000000000CD -:10E5B0000505050500000000000000000000000047 -:10E5C000000000000000000000000000000000004B -:10E5D0000000000000000000000000000000000437 -:10E5E000000014003C2800000000000000000000B3 -:10E5F000000003000000000000000C000C003C3C88 -:10E600003E3C000000000000000000000000000090 -:10E6100000000000000000000000000000000000FA -:10E620000000000000007343F7F700000000000046 -:10E630000000F5F5F5F50000000000000000000006 -:10E6400000000000000000000000000000000000CA +:10DAC0000000000000000000000000000000000056 +:10DAD0000000000000000000000000000000000046 +:10DAE000000000000000F0F0000000000000000056 +:10DAF0000000000000000000000000000000000026 +:10DB0000000088000000000000000000820000000B +:10DB10000000020004008800000000000000000077 +:10DB20000000200040000000000000002000000075 +:10DB3000000000032000400020000000000004005E +:10DB40000000000020002000000000000000200075 +:10DB50000000040000002000100000000000100081 +:10DB60000000A0000100000088000000000020006C +:10DB70000000200000000000000000000000000085 +:10DB80000000000000000000000000000000000095 +:10DB90000000000080000000000000000000000005 +:10DBA0000000100000000000000000000000000065 +:10DBB0000000000000000000000000000000000065 +:10DBC0000000000000000000000000000000000055 +:10DBD0000000000010000000000000000000100025 +:10DBE00000004100000002000000000010001000D2 +:10DBF0000000000000000000000000000000010024 +:10DC000020000100010004000000040004000000E6 +:10DC10000000000000000000000000000000000004 +:10DC200000000000000000000000000000000000F4 +:10DC300000000000040000000000000000000000E0 +:10DC400000000000000000000000000000000000D4 +:10DC500000000000000000000000000000000000C4 +:10DC60000200000000000000000000008210000020 +:10DC700000000800001090000000000000000000FC +:10DC800020008000200020008400040000008000AC +:10DC9000040004000000000004000900040000006B +:10DCA0000400040000000000000800000000000064 +:10DCB000000000000000000000000000000800005C +:10DCC000000000000000000000000008000000004C +:10DCD0000000000000000000000000000008030831 +:10DCE00000008000030000000000201020880400D5 +:10DCF0000000040004000400000000000000000018 +:10DD00000000000000000000000000000000000013 +:10DD10000000000000000000000000000000000003 +:10DD200000000000000000000000000000000011E2 +:10DD300000000000000000000000000000000000E3 +:10DD400000080000000000000000000000000000CB +:10DD500000000000000000000000000008000000BB +:10DD600000000000000000000000000000000000B3 +:10DD7000000000100003000300000021000000006C +:10DD80000000000000000000000000000000000093 +:10DD90000000000000000000000000000000000083 +:10DDA00000000000000000000084000000000000EF +:10DDB0000000000000000000000000000000000063 +:10DDC0000000000000000000000000000000000053 +:10DDD0000000000000000000000000000000000043 +:10DDE0000000000000000000000000000000000033 +:10DDF00000000000000000000400000000002000FF +:10DE00000000000000000010000000000000000002 +:10DE1000202088200000000000000000000000001A +:10DE200000000000010000000000000000000000F1 +:10DE300004000000000000000000000000000000DE +:10DE400000000000000000000000002000000000B2 +:10DE500000000000000000000000000000000000C2 +:10DE600000000000080000000000000000000000AA +:10DE70000000A0000000A10002000000000001005E +:10DE80000000000000000000000000000000000092 +:10DE90000000000100010000000000000000000080 +:10DEA000000000000000040000000000000000006E +:10DEB000000000000000040000000000000000005E +:10DEC000000000000800000000000000000000004A +:10DED0000000000000000000000000000000000042 +:10DEE000000000000000000000000000080000002A +:10DEF000000000000000000004008000000000009E +:10DF0000040000000000000000000000000000000D +:10DF100000000008000000000000000020000000D9 +:10DF200000000000000000200000000000000000D1 +:10DF300000000000000000000000000000000000E1 +:10DF400000000000000000000000000000000000D1 +:10DF500000000000000000000000000000000000C1 +:10DF600000000000020000000000000000000000AF +:10DF7000000000000000000000200005000000007C +:10DF80000020000000000000000000000000000071 +:10DF90000000000000000000000000000000000081 +:10DFA000000000000000000800A1000000000000C8 +:10DFB00000000000000000000090000000000000D1 +:10DFC0000000000000000000000000000000000051 +:10DFD0000000000000000000000800000000000039 +:10DFE0000000000000000000000000000000000031 +:10DFF0000000000000C000000000048500000000D8 +:10E00000000000010000000000000000000000000F +:10E010000000000000000000000000000000000000 +:10E0200000040000000000000000000000000000EC +:10E0300000000000000000000000002100000000BF +:10E0400000000000000000000000000000000000D0 +:10E0500000000000000000000000000000000000C0 +:10E06000000000000000001100000000000000009F +:10E0700000001000000084000008002100000008DB +:10E08000000000000002000400000000000000008A +:10E09000000000000000000000040000000000007C +:10E0A000000000000000000041000000000000002F +:10E0B000000000000500000000000000000000005B +:10E0C0000400000000000500000000000320000024 +:10E0D00000002000000005002000000008000000F3 +:10E0E00000840000000000000000000000000000AC +:10E0F0000000000000000000000000000000000020 +:10E10000000000000000000000000000000000000F +:10E1100000000000000000000000000000000000FF +:10E12000000000000000000000000000900000005F +:10E1300000000000000000000000000000000000DF +:10E1400000000000000000000000000000000000CF +:10E1500000000000000000000000000000000000BF +:10E1600000000000000000000000000000000000AF +:10E1700000000000C0020008002008840000908811 +:10E1800000000000000090000000000000000000FF +:10E19000000000000000000000000000000000007F +:10E1A00000000000000000000000000011008000DE +:10E1B000000000000000000000000000000000005F +:10E1C000000000000000000000000000000000004F +:10E1D000000000000000000000000000000000003F +:10E1E000000000000000000000000000000000002F +:10E1F000000000000000000000800000800011000E +:10E2000080000000000011008000000000000000FD +:10E2100000000000000000080000000400000000F2 +:10E22000008000000000000000000000000000006E +:10E2300000800000008000000000000000000000DE +:10E2400000000000000000000000000000000000CE +:10E2500000000000000000000000000000000000BE +:10E2600000000000000000000000000000000000AE +:10E27000000000000000000000000090000000808E +:10E28000000000800000008000000080000000808E +:10E29000000000000000000000010000000100007C +:10E2A00000000008000000C00000000000000000A6 +:10E2B00000000020000000C000000000000000007E +:10E2C000000000000000000000000000000000004E +:10E2D000000000000000000000000000000000003E +:10E2E000000000000000000000000000000000002E +:10E2F000000000000000000000000200908220905A +:10E30000040200000020000000C000000020000007 +:10E3100000C000000000000000000000100000002D +:10E32000000000000000820000000000000000006B +:10E3300000000100008888001100000000000000BB +:10E3400000000000000000000000000000000000CD +:10E3500000000000000000000000000000000000BD +:10E3600000000000000000000000000000000000AD +:10E37000000000000000000000000000901000C03D +:10E380000820202001000088880001008900008802 +:10E390008800010000000000000000000000800074 +:10E3A000000010004000000080000000000000009D +:10E3B0000000000041000080000009000000000093 +:10E3C000000000000000000000000000000000004D +:10E3D000000000000000000000000000000000003D +:10E3E000000000000000000000000000000000002D +:10E3F000000000000000000000000000000000809D +:10E400000000000000004100008000000900410001 +:10E410000080000009000000000000000000000073 +:10E4200000000000000000000004000000000000E8 +:10E43000000000000000001100000080000000004B +:10E4400000000000000000000000000000000000CC +:10E4500000000000000000000000000000000000BC +:10E4600000000000000000000000000000000000AC +:10E47000000000000000000000000000000000009C +:10E48000800000000000000000110000008000007B +:10E4900000110000008000000000000000000000EB +:10E4A000000000000000000000000001000000006B +:10E4B000000000000000000000010000004000001B +:10E4C000000000000000000000000000000000004C +:10E4D000000000000000000000000000000000003C +:10E4E000000000000000000000000000000000002C +:10E4F000000000000000000000000000000000001C +:10E50000000008002002202002000001000000405E +:10E5100000000001000000400000000000000000BA +:10E520000000410002E000000000000000000700C1 +:10E5300000000000000000000000000000000700D4 +:10E540008221000000000000000000000000000028 +:10E5500000000000000000000000000000000000BB +:10E5600000000000000000000000000000000000AB +:10E57000000000000000000000000000000000009B +:10E58000000000000000000000000000000000008B +:10E590000700822100000000070082210000000027 +:10E5A000000000000000000000000000000000006B +:10E5B000000000000000000000000000000000005B +:10E5C000F0F000000000000000000000000000006B +:10E5D000000000000000000000000000000000003B +:10E5E000000000000000000000000000000000002B +:10E5F000000000000000000000000000000000001B +:10E6000000000000000003F50305C3550F000000E3 +:10E610000000F0F0000000000000F0F0000000003A +:10E6200000000000000000000000000000000000EA +:10E6300000000000000000000000000000000000DA +:10E640000000F0F0000000000000000000000000EA :10E6500000000000000000000000000000000000BA -:10E660000004000010003020000000000000000046 -:10E67000FF00FF0003000000000000000C000C0081 -:10E680003C3C3C3C0000000000000000000000009A -:10E690000000000000000000000100000000000079 +:10E6600000000000000000000000000000000000AA +:10E67000000000000000000000000000000000009A +:10E680000000000000000000F3F5F305C3550FFF84 +:10E6900000000000F0F0000000000000F0F00000BA :10E6A000000000000000000000000000000000006A -:10E6B00000000000D7D782820000000000000000A8 -:10E6C000000000000000000000000000000000004A +:10E6B000000000000000000000000000000000005A +:10E6C000000055550000FFFF0000000000000000A2 :10E6D000000000000000000000000000000000003A -:10E6E0000000000000000001000000000000000029 -:10E6F00000000F0DFFFD0414EFFF00008000FFFF7E -:10E70000FFFF00000000FFFF00000000000000000D -:10E7100000000000000000000000F0F00000000019 -:10E7200000000000000000000000000000000000E9 -:10E73000000000000000C7C2C7C2000000000000C7 -:10E7400000000000000000000000000000000000C9 +:10E6E000000000000000000000000000000000002A +:10E6F000000000000000000000000000000000001A +:10E700000000000000000000000001510B5B00AAA7 +:10E71000FFAA0000FF000000FFFF0000FFFF000055 +:10E72000FFFF0000000000000000000000000000EB +:10E7300000000000000000000000000000000000D9 +:10E74000000000005555000000000000000000001F :10E7500000000000000000000000000000000000B9 -:10E760000000000000004000000000000000000069 -:10E77000000000000000FFFF0000FFFF000080001D -:10E78000FFFFBFFF00000000FFFF200000000000AF -:10E79000000000000000000000000000F0F0000099 -:10E7A0000000000000610006000D00008000000075 -:10E7B0000000000000610024801D000000610004D2 -:10E7C00080090000000000000000000000000000C0 -:10E7D0000000000000610002800500000000000051 -:10E7E00000000000000000613006801D0001006193 -:10E7F00000028001000080610006001D000005612C -:10E800000A2C851900A000610006000D0000000020 -:10E8100000000000000000610007800D000085611D -:10E820000A2C850D00A000000000F000F0000000A0 -:10E83000000000000000AF05C3C300000000050594 -:10E84000F5F500FF00FF00000000000000000000E0 -:10E85000000000000000FFFF0D00AA3AAA3A0000E5 +:10E7600000000000000000000000000000000000A9 +:10E770000000000000000000000000000000000099 +:10E78000000000000000000000000000A1F1ABFB51 +:10E79000C3F0C3F00000FF00000000000000000014 +:10E7A00000000000000000000000000000650006FE +:10E7B000800F200005180A00050005A000000000D9 +:10E7C0000000000005002A00054000A8000000002D +:10E7D0000000000000000000000000000000000039 +:10E7E0000000000000000000000000000000000029 +:10E7F0000000000000000000000000000000000019 +:10E800000000000000000000000000000000000008 +:10E81000000000C0000005002A00054000A8050017 +:10E820002A00054000A800000000000000000000D1 +:10E8300000000000000000000000000000000000D8 +:10E8400000000000000000000000000000000000C8 +:10E8500000000000000000000000000000000000B8 :10E8600000000000000000000000000000000000A8 -:10E87000300000003C3CBEBEFE04FF000000000073 -:10E8800030103010B0A4B0B0000000000000000054 -:10E890000000000000000000000000004000000038 -:10E8A000FF55FF55000000000000000000AAFFAA6D -:10E8B00000000000000000008787C3C300000000C4 -:10E8C000F505F505D4D4D4D4000000000000000004 -:10E8D0000000000000000000F2FF0000AAAAAA3A0F +:10E870000000000000000000000000000000000098 +:10E880000000000000000000000000000000000088 +:10E890000000000000000000000000000000000078 +:10E8A0000000000000000000000000000000000068 +:10E8B0000000000000000000000000000000000058 +:10E8C0000000000000000000000000000000000048 +:10E8D0000000000000000000000000000000000038 :10E8E0000000000000000000000000000000000028 -:10E8F0000000300000000055AAFFFF00FF000000EC -:10E90000000030413014B0A4B0B00000000000009E +:10E8F0000000000000000000000000000000000018 +:10E900000000000000000000000000000000000007 :10E9100000000000000000000000000000000000F7 -:10E920000000F050FF550000000000000000000053 -:10E9300000000000000000000000AAF0AAF00000A3 -:10E940000000FF00555582BE82BE0000000000009E -:10E950000000000000000000000005AF2D2D3E7FEC -:10E960003E7F0000000000000000000000000000EA -:10E97000000000000FFF0F0050FA000000000FAA77 -:10E98000151501010F1BE4F000002020000000001D -:10E9900000FF04FF00000000000000000000000075 -:10E9A000000000000000000C00000000000000005B -:10E9B000000000000000000000000000AAF0AAF023 -:10E9C00000000000FF00555582BE82BE000000001E -:10E9D00000000000000000000000000005AF2D2D29 -:10E9E000024302430000000000000000000000009D -:10E9F0000080000000000FFF0F000000000000007A -:10EA00000000555500000F1BE4F00000000000005E -:10EA1000000000FF00FF00000000000000000000F8 -:10EA2000000000000000000000000000000084045E -:10EA30002005200888002002400009002000400036 -:10EA400020002000200021002000400020042000A1 -:10EA500020008800200040002010400020004000DE -:10EA600020008800200084002000200020000001F9 -:10EA700088058810401020002000880040082000F1 -:10EA800020042000200020034000200388032000F1 -:10EA900020054010C00320052004401088052000F8 -:10EAA000880084091000400520058405A0000405A5 -:10EAB000000080000020000000018000C000000075 -:10EAC0000000000040000000400000008000000046 -:10EAD00000000000000000002000000020000000F6 -:10EAE00020000020000000002000040000000000C2 -:10EAF00000002000000000000000000020000000D6 -:10EB000004000000090004000000050009001000D6 -:10EB1000100010000900200021000000200000006B -:10EB200040002000202040022000090020000900B1 -:10EB3000200001000004200010000100000001007E -:10EB400083000000004000080000000401000008ED -:10EB50000004000504000000000000050008000596 -:10EB600000000004108409040100000400050004F2 -:10EB70000410000000040000000400100000000069 -:10EB800000000008900000020009000800050005D0 -:10EB90009008000000000005A0090000080800001F -:10EBA000000400080000A0100005001082091000F9 -:10EBB0009041900020880008808400842004000890 -:10EBC000200840080008000800000008040840046D -:10EBD000000400090008000800840004000804087C -:10EBE000040800080909090520092010040800107C -:10EBF0000084800800000008410820080008041074 -:10EC000000102088001040080409000800080010C7 -:10EC10000008030400840508000800080088048434 -:10EC2000040800080084000804080410001004040C -:10EC300004100410000800080003C00400000020B5 -:10EC40000040000500000021000500210021000413 -:10EC500000088202002100100041000800080003A3 -:10EC600000210003000800210000002100210021F4 -:10EC7000000800080000000002100000000300026D -:10EC800000400002000500000021000000000040DC -:10EC9000004000008800900000020040004000009A -:10ECA00082418221001000030002820382080005D5 -:10ECB000101000030021001000A0040000C1008417 -:10ECC000000000A00300000000400000020000005F -:10ECD0000021000000900020000000204100000002 -:10ECE000000000000300020000000000000000001F -:10ECF0000290000200000900000000000000000077 -:10ED0000044002A005084140408405000010410075 -:10ED1000218300000010080000880582000210A076 -:10ED20000004100000000020030000C000000000EC -:10ED3000210221004100080005000003400040417D -:10ED40004004000001048211200000008240820083 -:10ED5000820000212010088001000400A0020800A9 -:10ED600082000000820000000000C00020080000B7 -:10ED7000820800008200001100000000100008005E -:10ED800000000000001010000400000982051102BC -:10ED90000000018808020400840010098241040078 -:10EDA00004004000A00082004000040004001000A5 -:10EDB00082008200C0000000C000100000828000BD -:10EDC0008000800900A020000000800000000004F6 -:10EDD0000000000000008090000420880000000077 -:10EDE000000000000082008200000900001080087E -:10EDF00000900000210000000000090000000082D7 -:10EE000000C0008803A000090008050800002000D9 -:10EE10000211000002400091050000000000000007 -:10EE20000000001000080000000000840084009032 -:10EE30001100200000C0008403C000004100080051 -:10EE4000000000004000000820000020000800082A -:10EE50000002904020050000000000004011000268 -:10EE60000010004100210000A0000000000000038D -:10EE7000004000000004001000000000001100002D -:10EE80000000000000004000000000110003100519 -:10EE90000000004000000240000900400009000599 -:10EEA00000000003000000000003A040004100102B -:10EEB00010008200A041840284080000A04082006B -:10EEC0000088000000C000C00800800800000000AA -:10EED000000020000002110000000082008883046E -:10EEE000000020200000000000000000000000C022 -:10EEF000000040040000110900020000000000C0F2 -:10EF00000000020000400402108200000088008817 -:10EF10000084200000C002888041090004040482AB -:10EF20000484400000000082000200000000000095 -:10EF300020000020000000000040009000000000C1 -:10EF40000000000000000000200000040010000489 -:10EF500000100003102100080008000004200080B9 -:10EF6000000300008200004100410000000000009A -:10EF700088002000000000000000000500000010D4 -:10EF8000000000000041000000090009000000002E -:10EF90000000400000000041401001C000080000D7 -:10EFA0000021000888000800000000030000400065 -:10EFB00008008400C000A000400500080000A00078 -:10EFC0000008000400000200000000000000000033 -:10EFD00000000000000000000000000000008001B0 -:10EFE000000403000000000000000000000000001A -:10EFF000000000008000000000902100000000C020 -:10F0000000840084000000000000000010A0000048 -:10F0100000000000000000000082000002410088A3 -:10F020000400001020840000000000000000000028 -:10F03000000000200000000000000000008200002E -:10F040000000094040000100040010000000040915 -:10F0500000A003110208000000000000000001A150 -:10F0600001024182001000000000000000000000CA -:10F07000000000000000000100000100000000008E +:10E9200000000000000000000000000000000000E7 +:10E9300000000000000000000000000000000000D7 +:10E9400000000000000000000000000000000000C7 +:10E9500000000000000000000000000000000000B7 +:10E9600000000000000000000000000000000000A7 +:10E970000000000000000000000000000000000097 +:10E980000000000000000000000000000000000087 +:10E990000000000000000000000000000000000077 +:10E9A0000000000000000000000000000000000067 +:10E9B0000000000000000000000000000000000057 +:10E9C0000000000000000000000000000000000047 +:10E9D0000000000000000000000000000000000037 +:10E9E0000000000000000000000000000000000027 +:10E9F0000000000000000000000000000000000017 +:10EA00000000000000000000000000000000000006 +:10EA100000000000000000000000000000000000F6 +:10EA200000000000000000000000000000000000E6 +:10EA300000000000000000000000000000000000D6 +:10EA400000000000000000000400000000000100C1 +:10EA500001000100010000000000000000000000B3 +:10EA6000C0000000000000002000000000000003C3 +:10EA700000000000000000000000C00000000000D6 +:10EA8000040004000400000000002000000000005A +:10EA900088008800880000000000200000000000BE +:10EAA00000008400000000000000200000000000C2 +:10EAB0000000000000000000000000000000000056 +:10EAC0000000000000000000000000000000000046 +:10EAD000020002000200020000000000000000002E +:10EAE00040004000000000000000000000000000A6 +:10EAF0000000000000000000000000000000000016 +:10EB000000008000C0008000000000000000000045 +:10EB100000000000400000000000000010000000A5 +:10EB20000000200020002000100000000000000075 +:10EB300000000000000000000000000000000000D5 +:10EB400000000000000000000000000004000000C1 +:10EB50000000000000000000000020002000200055 +:10EB6000200000000000000000000000A0000000E5 +:10EB70000000000010040008000000080000000071 +:10EB80000080208000842080008400840000000039 +:10EB90000000000000000000000000000000000075 +:10EBA0000000000000000000000000100000000055 +:10EBB0000000000000000000000000000000000055 +:10EBC0000000000000000000000000000000000045 +:10EBD000000000000008000000000000800080002D +:10EBE0008000800000000002000000000000000023 +:10EBF0000000000000008009000100000009000082 +:10EC0000050000048904002180200021002100006B +:10EC100000000000000000080000000000080008DC +:10EC2000000000000008000000080000000000884C +:10EC300000000000000000000000000000000000D4 +:10EC400000000000000000000000000000000000C4 +:10EC5000000000000000008000000100000800002B +:10EC60000000000000080008000000000100002172 +:10EC70000000000000000000000000000100000093 +:10EC80000004000400000008000000000000000074 +:10EC90000000000000000000000000030008000069 +:10ECA0000000000000000000000004000008000058 +:10ECB000040004000000000000000000000000004C +:10ECC000000000000000000000000000000000A0A4 +:10ECD000000000000000000000080000200000000C +:10ECE000000000000000008400010000000020007F +:10ECF00000000000000000000000000000002000F4 +:10ED00000000000100010000000000000000000001 +:10ED100000000000000000000000000000004000B3 +:10ED200005000000000000000000000800000000D6 +:10ED300000000000000000000000000000000000D3 +:10ED400000000000000000000000000000000000C3 +:10ED500000000000000000000000000000000000B3 +:10ED60000188002100000000018000000000010077 +:10ED700000000000000000004000000090000000C3 +:10ED800088000080000000000000000082000800F1 +:10ED900082000000000000000000000000000000F1 +:10EDA0000000000000000000000000000000000063 +:10EDB0000000000000000000000000000000000053 +:10EDC00000000000000000000000000000000990AA +:10EDD0000000000000000000000000000000000033 +:10EDE00000000405000000000008022000000000F0 +:10EDF00020000000000000000000110000001100D1 +:10EE000000000900000400000000000000001100E4 +:10EE100000000000000000000000000000000000F2 +:10EE200000000000000000000000000000000000E2 +:10EE300000000000000000000000000000080000CA +:10EE400000000000000000000000000000000000C2 +:10EE5000000800000000900000000000900020006A +:10EE60000000400000000000000000200000000042 +:10EE70000000000000000000000000009000000002 +:10EE8000000000000000000000000000000300007F +:10EE90000000000800000000000000000000000367 +:10EEA0000000000000030000000300080000000054 +:10EEB000000000000000000800000000000000004A +:10EEC00000080000000000000000000000820000B8 +:10EED0000000000000000000000000000000000032 +:10EEE000000000000000008400000000000100009D +:10EEF000000000000400000000000000000000000E +:10EF00000000000000000000000000000000000001 +:10EF100000000000000000000000000000000000F1 +:10EF200000000000000000000000200020000000A1 +:10EF30001100000000000004008400000020000018 +:10EF4000008400000000000000000000000000003D +:10EF500000000000000000000000000000000000B1 +:10EF60000000000001000000000000400009000057 +:10EF70000002000800080008000800000021000945 +:10EF8000000000000000010000000000000800096F +:10EF900000009000000000000021000000080000B8 +:10EFA000000500000000000000210000000000003B +:10EFB0000000000000000000000000000000000051 +:10EFC000000000020000000000000000020000003D +:10EFD0000000000000000000000000000000000031 +:10EFE0000000000000002000000000000001000000 +:10EFF00000000500002000000000000000000000EC +:10F0000000000000000000002000000000000000E0 +:10F0100000020000000000000000000000000000EE +:10F0200000000000000000000000000000000000E0 +:10F0300000000000000000000000000000000000D0 +:10F0400000000000000000000000000000000000C0 +:10F0500000000000000000000000000000000000B0 +:10F06000000000000000010000900000000000000F +:10F0700090000000000001000000000000000000FF :10F080000000000000000000000000000000000080 -:10F0900000000000000000000888000200101010AE -:10F0A000000100010000000100000000000000005D +:10F090000000000000000000000000000000000070 +:10F0A0000000000000000000000000000000000060 :10F0B0000000000000000000000000000000000050 -:10F0C0000000000000000000110021000900000005 -:10F0D00000911011849000830000000000000000E7 -:10F0E000118403048402008400000000000000007A -:10F0F00000000000000000000011000010090005E1 +:10F0C0000000000000000000000000000000000040 +:10F0D0000000000000000000000000000000000030 +:10F0E000000000000000000011002180000000006E +:10F0F000110080000000000011002100000000004D :10F1000000000000000000000000000000000000FF -:10F11000000000000000000000008000000000006F -:10F120008000000800100005002000000000000022 +:10F1100000000000000000000000000000000000EF +:10F1200000000000000000000000000000000000DF :10F1300000000000000000000000000000000000CF -:10F140000000000000000000000009200900000588 -:10F15000040304081100912090200000000000002A -:10F1600000001008031109880208000000000000D8 -:10F17000000000000000000000004000000011003E -:10F1800000008000800080418080000000000000BE -:10F19000000000000000000900000000000080C026 -:10F1A000802100800000000000000000000000003E +:10F1400000000000000000000000000000000000BF +:10F1500000000000000000000000000000000000AF +:10F16000000000000000000000000008090000038B +:10F1700000000009008000090000004109000009AA +:10F1800000800000000000000000000002080000F5 +:10F190000003000000110000002000000009000032 +:10F1A000000200000000000000000000000000005D :10F1B000000000000000000000000000000000004F -:10F1C00000000000000000000000000000880000B7 -:10F1D000000000010185000009000400000000009B -:10F1E00000000000011000010003012000000000E9 -:10F1F00000000000000000000000000001C000004E -:10F20000010000004000C0008401C0C000000000F8 -:10F210000000000000000000000000040000A0A0AA -:10F220008241080388080000000000000000000080 +:10F1C000000000000000000000000000000000003F +:10F1D000000000000000000000000000000000002F +:10F1E0000000000000000000000000000003010219 +:10F1F000000000A0000000200000008800010100C5 +:10F200000000008800000000000000000000000175 +:10F2100000000000000000000000000100000000ED +:10F2200000C000000010000000000000000000000E :10F2300000000000000000000000000000000000CE :10F2400000000000000000000000000000000000BE -:10F2500008000000000040A090010082A0A0000073 -:10F2600000000000000004000801010091000000FF -:10F27000000000000000000000000000000000008E -:10F28000000000010100000000000000000000017B -:10F29000000000000000000000000000000000006E -:10F2A0001010008800020588000000000000000027 +:10F2500000000000000000000000000000000000AE +:10F26000000000000000000000000000000000009E +:10F27000080002900000030008880200000000005F +:10F2800088000000010000000000000000000000F5 +:10F2900000000800880001000000C000000000001D +:10F2A0000000C00088000000000000000000000016 :10F2B000000000000000000000000000000000004E :10F2C000000000000000000000000000000000003E -:10F2D00000000021000411040011214002C1089126 -:10F2E00000000000000000000010201003090809C1 -:10F2F000000000000000000000000000000000000E -:10F3000000090000000511050000000000000000D9 -:10F3100000010800000000000000000000000000E4 -:10F320000000800000000000090000000300000051 +:10F2D000000000000000000000000000000000002E +:10F2E000000000000000000000000000000000001E +:10F2F000090080008080200041008080800009009B +:10F3000000000000000041000000000000000000BC +:10F31000000000098000C100030000008000000020 +:10F320004000110080000000050000000000000007 :10F3300000000000000000000000000000000000CD :10F3400000000000000000000000000000000000BD -:10F350000000090411000400001111400921088077 -:10F3600003100000000000000000110890110900C7 -:10F370000910000000000000000000000000000074 -:10F3800000000000111100000304000000000080D4 -:10F39000008000010000000000000000800000006C -:10F3A000000000001000408008000900000000007C +:10F3500000000000000000000000000000000000AD +:10F36000000000000000000000000000000000009D +:10F37000000000118000000000000011000000806B +:10F380000000000009110000000000000000000063 +:10F39000000000000009004108000000000000001B +:10F3A000000000000000000000000000000000005D :10F3B000000000000000000000000000000000004D :10F3C000000000000000000000000000000000003D -:10F3D0000000000000010100000000010009000918 -:10F3E0000110000100000000000000000085040181 -:10F3F000000000000000000000000000000000000D -:10F4000000000000000000010000010000000000FA -:10F4100000C00020000100000000000000001000FB -:10F420000000080010008900118211820500000010 +:10F3D000000000000000000000000000000000002D +:10F3E000000000000000000000000000000000001D +:10F3F0000000000000012000008800000001000063 +:10F4000000400000000000010000000000000000BB +:10F4100000000000000000010000010000000000EA +:10F4200000000000000000000000000000000000DC :10F4300000000000000000000000000000000000CC :10F4400000000000000000000000000000000000BC -:10F45000000000000000000000E0000000000000CC -:10F4600000E000000000000000000000000000813B -:10F4700000E00700000000000000000000000000A5 -:10F48000000000000000000000E00000000000009C -:10F490000000070000420000000000000000000023 -:10F4A000000000000000000000000000000000005C +:10F4500000000000000000000000000000000000AC +:10F46000000000000000000000000000000000009C +:10F47000000000000000000000E007000000600045 +:10F4800002E007008200000000E00000814100006F +:10F490000000000000000000000001E00022000069 +:10F4A000000002E000004200000002E00704420009 :10F4B000000000000000000000000000000000004C :10F4C000000000000000000000000000000000003C :10F4D000000000000000000000000000000000002C -:10F4E00000000000C3C3C3C3000000000000000010 -:10F4F00000990099000000000000000000000000DA -:10F5000000000000000000000000000000000000FB +:10F4E000000000000000000000000000000000001C +:10F4F00000000000000000000000FF000000FF000E +:10F50000000000000000F0F000000000000000001B :10F5100000000000000000000000000000000000EB -:10F52000000002020E0E00000000046EFFFF6606DF -:10F53000FF6F00000000000000000000000000005D +:10F5200000000000000000000000000000000000DB +:10F5300000000000000000000000000000000000CB :10F5400000000000000000000000000000000000BB :10F5500000000000000000000000000000000000AB -:10F560000000000000009900FF0000000000000003 -:10F57000000066FF66FF00000000000000000000C1 -:10F58000000000000000000000000000000000007B +:10F56000000000000000000000000000000000009B +:10F57000000000000000000000000000FF0000008C +:10F58000FF00000000000000F0F00000000000009C :10F59000000000000000000000000000000000006B -:10F5A00000000000BFBF8F8F000000000000046E4D -:10F5B0004602EF67000000000000000000000000AD +:10F5A000000000000000000000000000000000005B +:10F5B000000000000000000000000000000000004B :10F5C000000000000000000000000000000000003B :10F5D000000000000000000000000000000000002B :10F5E000000000000000000000000000000000001B :10F5F000000000000000000000000000000000000B :10F6000000000000000000000000000000000000FA -:10F610000000000000000000008020020000000048 +:10F6100000000000000000000000000000000000EA :10F6200000000000000000000000000000000000DA :10F6300000000000000000000000000000000000CA :10F6400000000000000000000000000000000000BA :10F6500000000000000000000000000000000000AA -:10F66000000000000000998190800066FFFF00000C -:10F6700000000000000098FE086E0000000000007E -:10F68000000000000000000000000000000000007A +:10F66000000000000000000000000000000000009A +:10F67000000000000000000000000000000000FF8B +:10F680000000FFFF0000FFFF0000FFFF0000000080 :10F69000000000000000000000000000000000006A :10F6A000000000000000000000000000000000005A -:10F6B000FFFFE0F70CCF096F000000000000000022 +:10F6B000000000000000000000000000000000004A :10F6C000000000000000000000000000000000003A :10F6D000000000000000000000000000000000002A -:10F6E0000000000000000000FFC3F0C000660066DC -:10F6F0000000000000000000FFFF0000000000000C -:10F7000000000000000000000000000000000000F9 +:10F6E000000000000000000000000000000000001A +:10F6F000000000000000000000000000000000000A +:10F7000000FF0000000000000000000000000000FA :10F7100000000000000000000000000000000000E9 :10F7200000000000000000000000000000000000D9 -:10F730000000E0F700000F0F0F0F000000000000B6 +:10F7300000000000000000000000000000000000C9 :10F7400000000000000000000000000000000000B9 :10F7500000000000000000000000000000000000A9 -:10F76000000000610007000D000000610007000DAF -:10F770000000000000000000000000610027000DF4 -:10F780000000000000000000000000000000000079 -:10F790000000006100010001000000000000000006 -:10F7A0000000000000000000000000000000000059 -:10F7B0000000000000613006000D0001006100063D -:10F7C000000D00000000000000000000000000002C +:10F760000000000000000000000000000000000099 +:10F770000000000000000000000000000000000089 +:10F78000000015402A06054C00A805652A06854F8D +:10F7900020A800400006000C00000000000000004F +:10F7A0000000000000000006000C000000650006DC +:10F7B000000F2000057D0A06050F24A000000000B0 +:10F7C0000000000000000000000000000000000039 :10F7D0000000000000000000000000000000000029 -:10F7E000000000000505FF0FFFAA00F0BEBE5F0A83 -:10F7F00028F3EBF30000000000000000F737C70714 -:10F80000FFF03CAA00000000000000000000000023 -:10F81000000000007D287D2800FF3C3C0000000027 -:10F8200000000000000000000000000000000000D8 -:10F83000000000000000FF53AC00000000000000CA +:10F7E0000000000000000000000000000000000019 +:10F7F0000000000000000000000000000000000009 +:10F800000000000000005555FFFF00000000000050 +:10F81000000000000000FF00FFFF000000000000EB +:10F8200000000000000000000F0F3C3C0000000042 +:10F8300000000000000000000000000000000000C8 :10F8400000000000000000000000000000000000B8 :10F8500000000000000000000000000000000000A8 -:10F860000000000000000505F00000AA00F01414DC -:10F870005F0A2830EB300000000000000000F43484 -:10F88000C40400F03CAA00000000000000000000DA -:10F890000000000000007D287D2800FF3C3C0000A7 -:10F8A0000000000000000000000000000000000058 -:10F8B0000000000000000000FF53AC00000000004A +:10F860000000000000000000000000000000000098 +:10F870000000000000000000000000000000000088 +:10F8800000000000000000005555000000000000CE +:10F890000000000000000000FF0000000000000069 +:10F8A000000000000000000000000F0F3C3C0000C2 +:10F8B0000000000000000000000000000000000048 :10F8C0000000000000000000000000000000000038 :10F8D0000000000000000000000000000000000028 -:10F8E0000000000000000000000000007D7D3F3FA0 -:10F8F0007D5F285FC2F2CEFE000000000000000025 -:10F90000FF3C1717AAF0AAF000000000000000005A -:10F910000000000000000000CFCF0C0C28EB28EB0B -:10F9200000000000000000000000000000000000D7 +:10F8E0000000000000000000000000000000000018 +:10F8F0000000000000000000000000000000000008 +:10F90000000000000000000000000000F0F0000017 +:10F91000000000000000000000000000F0F0000007 +:10F92000000000000000000000000000FFFF3C3C61 :10F9300000000000000000000000000000000000C7 -:10F940000000FEFFFEFC00000000000000000000C0 +:10F9400000000000000000000000000000000000B7 :10F9500000000000000000000000000000000000A7 -:10F9600000000000000000000000000000007D7D9D -:10F970003F3F7D0A280A02320E3E000000000000D0 -:10F980000000C30017173C003CFF0000000000000F -:10F9900000000000000000000000CFCF0C0C28EB9E -:10F9A00028EB000000000000000000000000000044 -:10F9B0000000000000000000000000000000000047 -:10F9C00000000000FEFFFEFC000000000000000040 +:10F960000000000000000000000000000000000097 +:10F970000000000000000000000000000000000087 +:10F980000000000000000000000000000000F0F097 +:10F990000000000000000000000000000000F0F087 +:10F9A0000000000000000000000000000000000057 +:10F9B0003C3C0000000000000000000000000000CF +:10F9C0000000000000000000000000000000000037 :10F9D0000000000000000000000000000000000027 -:10F9E00000000000000000000000000020002008CF -:10F9F0002010200320102000001020002005840586 -:10FA000020002000201020052000200820002008D1 -:10FA10002000200020082010C00800032000400023 -:10FA200020002000200520002108200000032004E1 -:10FA300020000803208820058810210000002000F5 -:10FA400040008410A0002000880540002004200011 -:10FA5000881020082009200588050400C005C0087A -:10FA600088082003101040002000A0008803020036 +:10F9E0000000000000000000000000000000020015 +:10F9F000000000008200020002000000020000007F +:10FA0000000000008800840002008800000004005C +:10FA1000000000002000040020000000040040005E +:10FA200004000000200020002000200000038800C7 +:10FA30002000000084008800880020004000200092 +:10FA4000880020000000200020004000200020004E +:10FA500020008800200020002000880020020000F4 +:10FA60004000000000000000000000000000000056 :10FA70000000000000000000000000000000000086 -:10FA80002000000000000000000000000000000056 -:10FA9000000000000000000000000900000000005D -:10FAA0000400000000000000000002000000000050 -:10FAB0000500000080000940040004000400050265 -:10FAC0004000000000002008090040000400410040 -:10FAD00004002000090000000900200000000000D0 -:10FAE0002000210041000000090009000500042059 -:10FAF0000210000000001000024190000040400091 -:10FB00000241900000049000022002000004000066 -:10FB10000009000500000000080001050909014076 -:10FB200000208200010482200104400020004000E7 -:10FB300000000840001000100100082082090800A1 -:10FB40000210080008400800081082008200080027 -:10FB50000009000800000004001000100000001060 -:10FB600000080010000400050003020800099008C6 -:10FB70004040008804100082008400000208000851 -:10FB800080040408000800080008000000000008C5 -:10FB90000084001000840408040889000408401050 -:10FBA00020080409208404080005200884088084B3 -:10FBB000C0040000808304090909081040C100083E -:10FBC0000008800484088409800884110408001057 -:10FBD0000988050800080508048800820404040850 -:10FBE0002082001040882010041041080088410441 -:10FBF0000210801100090020000000000021000414 -:10FC000000000005000000000004000900210008B9 -:10FC100000000009000200100000000000100009B0 -:10FC2000904000030040002002022021200000102C -:10FC30000000000800000000109010000003000801 -:10FC400000000003000004210000000988080010E3 -:10FC500040400008880000032021841000080003B1 -:10FC600000100021041000400041A0080000000521 -:10FC70000002004041A100080000410840000000CF -:10FC800000100000000000021000008411000008B5 -:10FC900000100008008400A000C000A000A00082A6 -:10FCA0000000000000000000000100000000000053 -:10FCB000210100000000000000A004100800000066 -:10FCC0000500000000A00084000009A0080000401A -:10FCD00041400020414000100000004000A0100002 -:10FCE0000008008400081040410000000082080065 -:10FCF0000810210003008202000000000040000004 -:10FD000002000005000000000000000000000400E8 -:10FD100082000000042100000400000000038200B3 -:10FD20000402C12000800020820400000420A10001 -:10FD300082048200C110C010000083000990099065 -:10FD4000038083800840052082028204C0001000E6 -:10FD500010A0A0000800202111000000A000C00099 -:10FD600082001000100082008800A008100010001F -:10FD70000000C000C000A000A0000088000000003B -:10FD8000000800000004000000080000000000005F -:10FD90000008000000000000000000080000000053 -:10FDA00000000001200100100001200000000001FF -:10FDB00004080801001020010085000008008811D7 -:10FDC0008811880240022005400500010000030060 -:10FDD0000390001000A000088800200400A000820A -:10FDE000000020000000008400004100009004009A -:10FDF000030000040000401000A00040004000404C -:10FE00000040002000000000004000000000000052 +:10FA80000000000000000000000000000000000076 +:10FA90002000000000000000000000000000000046 +:10FAA0000400000000000000000000000000000052 +:10FAB0000000000000020000000000000000000044 +:10FAC0000000000000000000000010000000000026 +:10FAD0000000000000000000000000000000000026 +:10FAE0000000000000000000000000000000000016 +:10FAF0000000000000000000200020002000200086 +:10FB000000008200820000000400020004000400E3 +:10FB10000000000090000000000000000000020053 +:10FB200004000000000000000400000000000000CD +:10FB300000001000100020002008200020002000FD +:10FB40002000200020002000200000000000000015 +:10FB50000000000000000210000000000000021081 +:10FB60000000080000000410000000000400000075 +:10FB70000000000000000000000080008000800005 +:10FB800080000000020000000000000000000000F3 +:10FB90000000000000000000000004002000000041 +:10FBA0000000000000000000000000000000000055 +:10FBB0000000000080008000800080018000800044 +:10FBC000800080008000A000800080000000000015 +:10FBD0000000000000000000000000080200020019 +:10FBE0000000000000000200020000880200020085 +:10FBF0000200000000000000000000000000000003 +:10FC000000000000000000000000000000000000F4 +:10FC100000000000000800000000010000000000DB +:10FC200000000000000000000000000000000000D4 +:10FC300000000000000000000000000000000000C4 +:10FC400000000000000000000000000000000000B4 +:10FC500000000000000000000000000000000000A4 +:10FC600000000000A00000000000000000000000F4 +:10FC7000000000000008000000000000000000007C +:10FC80000000000000000000000000000000000074 +:10FC900000000000110000010000000020C0000072 +:10FCA000080000000000000000000000000000004C +:10FCB0000000000000000000000003000000000041 +:10FCC0000000000000000000000000000000000034 +:10FCD0000000000000821000000000000000000092 +:10FCE00000000000000000A000080000000000006C +:10FCF0000000000000000000000000000000000004 +:10FD0000A0000000000090000000000000000000C3 +:10FD100000000000000000000400000001000000DE +:10FD20000000004000000000820088000000000089 +:10FD3000040010000000000000000100A100C0004D +:10FD40000100000000000000000000000000820030 +:10FD5000000000000000080000000000000000009B +:10FD6000000000000000000000000800080008007B +:10FD70000000080008000800080000000000000063 +:10FD80000000000000000000000000000000000073 +:10FD90000000000002000000000000000000200041 +:10FDA0000000000000000000000000000000000053 +:10FDB0000000000000000000000000002000200003 +:10FDC000000020000800000000000000000000000B +:10FDD00000000000410000000000000000000000E2 +:10FDE000000000000000000008000000000000000B +:10FDF0000000000000000000000000000000000003 +:10FE000000000000000000000000000000000000F2 :10FE100000000000000000000000000000000000E2 -:10FE2000A000000000000404000200000410040808 -:10FE300088108202080000002140000000000041FC -:10FE4000081008410008C009C00282050002000035 -:10FE50000840900008402009014000008200100086 -:10FE600000000000C0050041A00000008241000029 -:10FE70000400C000002100000008080000000090FD -:10FE800000840000000011002000000000A000001D -:10FE9000000000C02008218800A020040904000000 -:10FEA000000000002100000080010001000080002F -:10FEB000850000000002A100000088000000000092 -:10FEC00000008001800002000000020000820008A3 -:10FED0001140002000408040829040A0000004A01B -:10FEE0000000000000000000000000000000000012 -:10FEF00000000000000000000400000000000000FE -:10FF000000000000002100030000002100000000AC -:10FF100084000040000000080000000090108800ED -:10FF200000000000000000020000000000000800C7 -:10FF300020100400000000000080004100000000CC -:10FF4000000000080183019001050480C005002124 -:10FF500001088500824000C002A10091202100809C -:10FF600000008200040000000000A0000000C000AB -:10FF7000001000002005020082000400042110008F -:10FF80000800110000000000000000000000000058 +:10FE200000000000000000000000000008000000CA +:10FE300000000000000000000000C0000000000002 +:10FE400000000000000000001000000000000000A2 +:10FE5000A000000000000000000000000000000002 +:10FE60000003000000000008000000000000000087 +:10FE70000000000000000000000000000000000082 +:10FE8000000000000000000000000000000000A0D2 +:10FE900000000000000000840000000000C000001E +:10FEA000000000000084000000000000008400004A +:10FEB00000000084000000840000000000C000007A +:10FEC000000000000000000800000000000000002A +:10FED000000000000000000800000000000000001A +:10FEE000000000000000000000000000000000080A +:10FEF0000000000000000000000000000000000002 +:10FF000002000000000000000000000000000000EF +:10FF100000000000000000000000000000000000E1 +:10FF200000090000000000000000000000090002BD +:10FF300000000000000000020000040000020000B9 +:10FF40000000000900000000000000000800880018 +:10FF5000000000000000000000000002000000009F +:10FF6000000000000000000084000000000000000D +:10FF70000000000000000000000000000000000081 +:10FF80000000000000000000000000000000000071 :10FF90000000000000000000000000000000000061 -:10FFA000000000000000000000000000040000004D -:10FFB0000420410080002000009000042004000084 -:10FFC00000C000000000081008114002802000005E -:10FFD000200040C008000301030283020510A102B3 -:10FFE00000102100001000000000000000000000D0 +:10FFA000000000000000000000000000000005004C +:10FFB0000000000000000000000000000000000041 +:10FFC0000000000000000000000000000000000031 +:10FFD0000000000000000000000000000000000021 +:10FFE0000000000000000000000000000000000011 :10FFF0000000000000000000000000000000000001 :02000004002FCB :1000000000000000000000000000000000000000F0 -:10001000840000000000000000000000000000005C -:10002000000000000000000000000000000400408C -:10003000040490000000000000880082A0041085E5 -:10004000C0A108C00000854100048405020390108F -:10005000110800880090024000100040100290003B +:1000100000000000000000000000000000000000E0 +:1000200000000000010000000000000000000000CF +:1000300000000000000000000000000000000000C0 +:1000400000000000000000000000000000000000B0 +:1000500000000000000000000000000000000000A0 :100060000000000000000000000000000000000090 -:100070000000000000000000000000000000000878 -:1000800001028400001000000000000000000000D9 +:100070000000000000000000000000000000000080 +:100080000000000000000000000000000000000070 :100090000000000000000000000000000000000060 -:1000A000000000000000000000000000000011003F -:1000B0002180001180000000000000000000900876 -:1000C000C1210090800800000988031100088010F9 -:1000D00020C18891000900048980210000008080EF -:1000E000000000000200000000000000000000000E +:1000A000000000000000110021000000000000001E +:1000B0000000000000000000000000000000000040 +:1000C0000000000000000000000000000000000030 +:1000D0000000000000000000000000000000000020 +:1000E0000000000000000000000000000000000010 :1000F0000000000000000000000000000000000000 -:1001000000000400000000000000000000000000EB -:1001100000000000000000000000000000000000DF -:1001200000000000000000000000000000000000CF -:100130000000901191099000000000100000800064 -:1001400040802108859110A00000000080218009D6 -:1001500080008800C121020883008800090500088A -:100160000200000200030040000000000000000048 +:1001000000000000000000000000000000000000EF +:1001100000050000000400000000000000000000D6 +:1001200000000000000000000041090000090080FC +:1001300000000000000000000000000000000000BF +:100140000000000000000000000000C000000003EC +:10015000000000020000000200000009000000058D +:10016000000000000000000000000000000000008F :10017000000000000000000000000000000000007F -:1001800000000000008400110000000000000000DA +:10018000000000000000000000000000000000006F :10019000000000000000000000000000000000005F -:1001A000000000000000000000000000000000004F -:1001B000000000908301A001109000000000A0004A -:1001C000900091900401A18305A000001000200080 -:1001D0008410100202000200209109000800C000F3 -:1001E0001091000000A10001000300820000000047 +:1001A000000000000000000000000001010000004D +:1001B00000880000000000000000000000000000B7 +:1001C000000000000000000000000000009000009F +:1001D000000000000001000000010000000000001D +:1001E000000000000000000000000000000000000F :1001F00000000000000000000000000000000000FF -:100200000000000000000041008400000000000029 -:1002100000000000000000000000000000000000DE -:1002200000000000000000000000000000000000CE -:1002300000000000100801040101820000000040DD -:1002400090A00210C0C00010002010100000030594 -:1002500090210004840802200084900920A08810C6 -:1002600000901003A0A0000200020088018200009C +:1002000000000000000000000000000000000000EE +:1002100000000000000020000000010000000000BD +:100220000000000000000000000000000000880046 +:1002300000000100000000000000000000000000BD +:1002400000000000000000000000000000000000AE +:1002500040000001010000008400000000000000D8 +:10026000400000000000000000000000000000004E :10027000000000000000000000000000000000007E -:10028000000000000000100100010001C00100009A -:100290000000000000000000000000080000000056 +:10028000000000000000000000000000000000006E +:1002900000000000000000008000000020000000BE :1002A000000000000000000000000000000000004E -:1002B000000000000000809111000508900200007D -:1002C000008080008080801010A0008900900000D5 -:1002D000214000840000039080110041A105848921 -:1002E0000504001100A08090008000000000410083 +:1002B00000000000410000000000000000000000FD +:1002C000000000000000000000000000000000002E +:1002D0000000000000080200000000000000030011 +:1002E000000000000000030000000000000000000B :1002F00000000000000000000000000000000000FE -:1003000000000000000000000004002000200004A5 -:1003100000000000000000000000000000000000DD +:1003000000000000000000000000000000000000ED +:1003100000000000000000000004000000000000D9 :1003200000000000000000000000000000000000CD -:1003300000000000000000002111A1900400100046 -:10034000802000A100000000090088001100104179 -:1003500000000021008880808000001000800000E4 -:10036000800400048080808080101108000000005C -:100370000800000000000000000000000000000075 -:1003800000000000000000000000000400008000E9 -:10039000000000000000000000000000000000005D +:1003300000000011040000000000000000000000A8 +:1003400000000000000000000000000000000000AD +:100350000000000000110000000300000000000089 +:10036000000000000000000000000000000000008D +:10037000000000000000000000000000000000007D +:10038000000000000000000000000000000000006D +:10039000000000000000000000000001000000005C :1003A000000000000000000000000000000000004D -:1003B00000000000000000000000010010210804FF -:1003C00001009000000800008200020009841088EB -:1003D000880000002001A0098284880000008408B1 -:1003E0002088880010C040100240A00020000000BB -:1003F0008800C000000000000000000000000000B5 -:10040000000000000000000000000000A001A000AB -:100410004000840000000000000000000000000018 +:1003B000000000000001000000000000000000003C +:1003C000000000000000000000000000000000002D +:1003D000000000000000000100000001000000001B +:1003E000000000000000000000000000000000000D +:1003F00000000000000000000000000000000000FD +:1004000000000000000000000000000000000000EC +:10041000000000000000000000000000000002E0FA :1004200000000000000000000000000000000000CC -:10043000000000000000000000000000418200E019 -:10044000070000000000000007000000600000E05E -:1004500000004100000000000000000000000081DA -:100460000000070000000000000000000000810004 -:1004700000E00000000A0000000000000000000092 +:1004300000000000000000E000008141000000001A +:1004400000000000000000000000000000000000AC +:10045000000000000000000002E0000000000000BA +:1004600002E000000000000002E0000000000000C8 +:10047000000000000000000000000000000000007C :10048000000000000000000000000000000000006C :10049000000000000000000000000000000000005C :1004A000000000000000000000000000000000004C -:1004B0000000000000000000000000000000FFF04D -:1004C000FFF0F3F3F3F33C3CFFFFF000F0FF00001C -:1004D000000020F700000000AAAAAAF078787800AF -:1004E00055F055F0ACA0AFA3AAAA82BEF0F0F8FC7C -:1004F000CBCBC1C1C5C3C555000000000000000042 +:1004B000000000000000000000000000000000003C +:1004C000000000000000000000000000000000002C +:1004D000000000000000000000000000000000001C +:1004E000000000000000000000000000000000000C +:1004F00000000000000000000000000000000000FC :1005000000000000000000000000000000000000EB :1005100000000000000000000000000000000000DB :1005200000000000000000000000000000000000CB :1005300000000000000000000000000000000000BB -:1005400000F000F0303030300000C3C3F000F0FFA6 -:100550000800000020F720F70000AAAAAAB2F0F0D5 -:10056000F0003CF03CF0ACA0AFA3AAAA8ABAF0F02D -:10057000D0C0FBFB0101C5C3C55500000000000051 +:1005400000000000000000000000000000000000AB +:10055000000000000000000000000000000000009B +:10056000000000000000000000000000000000008B +:10057000000000000000000000000000000000007B :10058000000000000000000000000000000000006B -:100590000000000004000000000000000000000057 +:10059000000000000000000000000000000000005B :1005A000000000000000000000000000000000004B :1005B000000000000000000000000000000000003B -:1005C00000000505F5F50F0F0F0F4D4D4D4D55FF73 -:1005D0005500151500000C0C0C0000000000000078 -:1005E000FF14EB005F555055FF15EA00FFFF1500A3 -:1005F0000FFF0FFF000000000000000000000000DF +:1005C000000000000000000000000000000000002B +:1005D000000000000000000000000000000000001B +:1005E000000000000000000000000000000000000B +:1005F00000000000000000000000000000000000FB :1006000000000000000000000000000000000000EA :1006100000000000000000000000000000000000DA :1006200000000000000000000000000000000000CA :1006300000000000000000000000000000000000BA -:1006400000000000F505F505AA00FF554D4D4D4D84 -:1006500055FF55000015001528282800000000044B -:100660000000FF04FB005D555155FF00FF00EAFF4D -:1006700000000F7D0F7D0000000000000000000062 +:1006400000000000000000000000000000000000AA +:10065000000000000000000000000000000000009A +:10066000000000000000000000000000000000008A +:10067000000000000000000000000000000000007A :10068000000000000000000000000000000000006A -:1006900000000000000000820000000000000000D8 -:1006A00000000000000000610006000D00000000D6 -:1006B000000000000000000000000000000000003A -:1006C000000000000000806100248009000000009C -:1006D00000080000000080610002800500000000AA -:1006E00000614006001D000000614026000D000171 -:1006F00000614006000D000100610005800D000052 +:10069000000000000000000000000000000000005A +:1006A00000000000000000650006000F20000000B0 +:1006B00000000000000000000000000000000040FA +:1006C0000006000C00000000000000000000000018 +:1006D000000000000000000000000000000000001A +:1006E00000440006000E200000650006000F2000F8 +:1006F00000650006000F2000000000000000000060 :1007000000000000000000000000000000000000E9 -:10071000000000000000000000613006000D000035 -:10072000000000000000000000000000550055001F +:1007100000000000000000000000000000000000D9 +:1007200000000000000000000000000000000000C9 :1007300000000000000000000000000000000000B9 -:100740000000000000000000C5F5C50555FF41EBA5 -:1007500000000000000000007D5D4151FFFFEFEB55 -:10076000000000000000FAFAF3F300000000F0C0FF -:10077000F0FC00000000FFFF00FF3C3C555500006E +:1007400000000F0FFFFF000000000000000000008D +:100750000000000000000000000000000000000099 +:1007600000000000555500FF0000000000000000E0 +:100770000000000000000000000000000000000079 :100780000000000000000000000000000000000069 :100790000000000000000000000000000000000059 -:1007A0008000000000000000000000000000550074 -:1007B00055000000000000000000000000000000E4 -:1007C00000000000000000000000C5F5C50514BED3 -:1007D00000AA00000000000000005555555500001B -:1007E00020280000000000005050303000000000C1 -:1007F0003000F3FF00000000FCFC00FF3C3C5555BE +:1007A0000000000000000000000000000000000049 +:1007B0000000000000000000000000000000000039 +:1007C000000000000F0F000000000000000000000B +:1007D0000000000000000000000000000000000019 +:1007E000000000000000555500FF00000000000060 +:1007F00000000000000000000000000000000000F9 :1008000000000000000000000000000000000000E8 :1008100000000000000000000000000000000000D8 :1008200000000000000000000000000000000000C8 :1008300000000000000000000000000000000000B8 -:100840000000000000000000000000005F5F5F5F2C -:1008500000F0FFF000000000000000008705AF2D51 -:1008600040437C7F0000000000C000000000CFFF7C -:10087000CF0FCFC0EB4100000000EFEF4040000081 +:100840000000000000000000F0F0000000000000C8 +:100850000000000000000000000000000000000098 +:1008600000000000000000000000AAAA0000000034 +:100870000000000000000000000000000000000078 :100880000000000000000000000000000000000068 :100890000000000000000000000000000000000058 :1008A0000000000000000000000000000000000048 :1008B0000000000000000000000000000000000038 -:1008C0000000000000000000000000000000505088 -:1008D000505000F0FFF0000000000000000087050D -:1008E000AF2D40437C7F0000000000C000000000EE -:1008F0000C000C0FCFC0EB4100000000C7C7C2C204 +:1008C00000000000000000000000F0F00000000048 +:1008D0000000000000000000000000000000000018 +:1008E000000000000000000000000000AAAA0000B4 +:1008F00000000000000000000000000000000000F8 :1009000000000000000000000000000000000000E7 :1009100000000000000000000000000000000000D7 -:1009200000000000000000000020200001088200FC -:100930002003C000200020102003400420002000DD -:100940000410C003040020008802200200052000DB -:100950002008041020102004020020802000021033 -:100960000200020002090200000388004005400066 -:1009700004044004200020058808400420082105C4 -:10098000C008880502002008880020088808100098 -:10099000A00840088805C010840010004009200904 -:1009A0008400881084041004880040002000400067 -:1009B00000000000000000000000008400000000B3 -:1009C0000000410000002000000040000000000086 -:1009D000009000000000000000008900004040007E -:1009E00083008000C000A0008900000004002000F7 -:1009F0000000000020000000000040000001A000F6 -:100A0000200000002000A00000002000092040007D -:100A100041002000090000000000202040000900E3 -:100A200040004000410010C00502200002000240CA -:100A30000200020402000241820402000005820456 -:100A40000200000008000241000400000200000053 -:100A500090000000020002100010020902000200D3 -:100A6000020000090200004002000200000002052E -:100A7000000000100208000500000203020003410C -:100A80000000020403090200020000000008000543 -:100A90009010000000100800A000000500090200EE -:100AA0000000900008009000080500100000800879 -:100AB0009008001080010010A00800118084001030 -:100AC0000009800800000088800800100000808471 -:100AD0000084001000048410800800088010800842 -:100AE000808280100000A0000485890885A0000095 -:100AF000850404080404A08200080984801000888A -:100B0000A08804888908A084800880080410031045 -:100B100000C0040805080084008800080408008458 -:100B200004100008000820080008000800080088D9 -:100B300000000010880084080008C00008000000C1 -:100B4000A00000040004000040000010840082089F -:100B500040100010000800210000002100210000CA -:100B6000001004080440002100080041004100007A -:100B70000000000904000021101000020010000015 -:100B80008421000801100008002100100003400526 -:100B900000020200000000101010202100050005D6 -:100BA0000000000800400021002100210041100544 -:100BB0000008000000A000A00000110000000008D4 -:100BC000000800080000000000000082000000088B -:100BD0000000800000080500000000A008000000E0 -:100BE0000000000011000088409000841100008285 -:100BF00000040000408800C0110804104110008269 -:100C0000000800A004022082000008080082000200 -:100C10000282000200000000000041000504000004 -:100C200010001008000008000084000041000000CF -:100C300008C0101000000000004000090000000083 -:100C400000408440048000A100000040008000407B -:100C500000400400A00000040040008000000000EC -:100C600090A1820809044009000800880002C041E0 -:100C700004410841000008C18290409100110480A5 -:100C80000040820308008203820004000000040088 -:100C90001000118010000400C0000800400008008F -:100CA0000800080082008200840082000000040026 -:100CB00004008200A000000000000001000000000D -:100CC0000000000100010040004000000001004061 -:100CD00000010001000000000000000100400200CF -:100CE000000000400000200100C000000840008516 -:100CF00008004100000000000040004000400000EB -:100D00000040000100000000009000000010000002 -:100D100000000000024000080000009000000000F9 -:100D2000000000000000050000004110001000C09D -:100D300000000840000000000000004084000000A7 -:100D4000000000000005024100090000C00400008E -:100D5000000000214000000000000000900090080A -:100D60000211004000040040000000052005C00002 -:100D70000011004100009010000001094003904163 -:100D8000401000210040040040000004014020A069 -:100D90000080A041A00082000040000500218200E8 -:100DA000001000000000820000000000A000000011 -:100DB00000001000001000008400042000880000E3 -:100DC0000000000000000000000000200000000003 -:100DD00000200084008804000000000000000000E3 -:100DE0000000A00004010488042000000900800025 -:100DF00021020008040804C021A0000040000008EF -:100E0000028280400004090821C0C084040120033C -:100E100082040004400000A009000203000000005A +:1009200000000000000000000000000000000000C7 +:1009300000000000000000000000000000000000B7 +:100940000000000000000000010085000080008021 +:100950000000000000000000000000000000000097 +:100960000000000000000000000100002000000066 +:1009700000000000000000000000840000000000F3 +:1009800000000000040000000400840020000000BB +:1009900000000000000000000000200000008400B3 +:1009A0000000000000000000000000000000000047 +:1009B0000000000000000000000000000000000037 +:1009C00000000000000000000000020002000040E3 +:1009D00000400000000000000000000000000000D7 +:1009E00000000000000000000000000000004000C7 +:1009F00000000000000000000002000000004000B5 +:100A000000000000000000000000000000020000E4 +:100A100000020000000200020000000000001002BE +:100A20000002000000000000000000400000000084 +:100A300000000000000000000000000000000000B6 +:100A400000000000000000000000000002000200A2 +:100A5000020002000000000000000000021002106E +:100A60000200021000000000000000000000000072 +:100A7000000000000000840084000000000000006E +:100A80000000000000000000000000000000000066 +:100A90000000000000100000000000000000000046 +:100AA000080008000800000000000000000000002E +:100AB0000000000000000000000000000000000036 +:100AC0000000000000000000000000000000000026 +:100AD0000000000000000000000000000000000016 +:100AE0000000000000000000000000000000000006 +:100AF00000000000001000100000000000000000D6 +:100B000000000000000000000000000000000000E5 +:100B100000000000000000000000000000000000D5 +:100B200000000000000000000000000000000000C5 +:100B300000000000000000000000000000000000B5 +:100B400000000000000000000000000000000000A5 +:100B50000000000003000000000000000000000092 +:100B60000021000000000000000000000000000064 +:100B70000000001000000000000000000000000065 +:100B80000000000000000000000000000000000065 +:100B90000000000000000400000000000000000051 +:100BA0000000000000000000400000000000000005 +:100BB0000000000000000000000000000000000035 +:100BC0000000000000000000000000000000000025 +:100BD00000000000000020000000000000000000F5 +:100BE0000000000000000000000000000000000005 +:100BF00000000000000000000000000000000000F5 +:100C000000000000000000000000000000000000E4 +:100C100000000400000000000000000000000000D0 +:100C200000000000000000000000000000000000C4 +:100C300000000000000000000000000000000000B4 +:100C400000000000000000000000000000000000A4 +:100C50000000010000000000000001000000000092 +:100C60000000000000000000000000000000000084 +:100C70000000000000000000000000000000000074 +:100C80000000000000000000000000000000000064 +:100C90000000000000000000000000000000000054 +:100CA0000000000000000000000000000000000044 +:100CB0000800000008000000000000000000000024 +:100CC0000000000000000000000000000000000024 +:100CD00000000000040000A000000008040820003C +:100CE0000000000000000000000000000000000004 +:100CF00000000000000000000000000000000000F4 +:100D000000000000000000000000000000000000E3 +:100D100000000000000000000000000000000000D3 +:100D200000000000000000000000000000000000C3 +:100D300000000000000000000000000000000000B3 +:100D400000000000000000000000000000000000A3 +:100D5000020000000020000000000000000010045D +:100D60000000000000000000000000000000000083 +:100D70000000000000000000000000000000000073 +:100D80000000000000000000000000000000000063 +:100D90000000000000000000000000000000000053 +:100DA0000000000000000000000000000000000043 +:100DB0000000000000000000000000000000000033 +:100DC0000000000000000000000000000000000023 +:100DD000000080000000000100840000000000848A +:100DE0008001000000000000000000000000000082 +:100DF00000000000000000000000000000000000F3 +:100E0000000000840000000000000000000000005E +:100E100000000000000000000000000000000000D2 :100E200000000000000000000000000000000000C2 :100E300000000000000000000000000000000000B2 -:100E400000000000850000A1000800000000000074 -:100E50000021000008000021002101080008008096 -:100E6000001000210000002100214005200090809A -:100E7000014020A140008841004100080000000816 -:100E800000098821001040114003C141412108029E -:100E9000200000002021004000000009000900009F -:100EA0000000002100000040C00000000000000021 -:100EB00000410003820008008200002100000000C1 -:100EC000000020000000020000400000000000A020 -:100ED0000200000000000000000400840200008204 -:100EE00000400000000000000000110080008000B1 -:100EF00000022001000291900000000000000000AC -:100F000000000000000000000000000002000200DD -:100F100000008000000080000001000000000000D0 +:100E400000000000000000000000000000000000A2 +:100E50000000000000000000000000000000000092 +:100E6000000800040000000900020000000000006B +:100E70000000000000000000000000000000000072 +:100E80000000000000000000000000000002000060 +:100E90000000000000000000000000000000000052 +:100EA0000000000000000000000000000000000042 +:100EB0000000000000000000000000000000000032 +:100EC0000000000000000000000000000000000022 +:100ED0000000000000000082000000000000000090 +:100EE00000000000000800000000000005000000F5 +:100EF00000000000000000000000000000000000F2 +:100F000000000000000000000000000000000000E1 +:100F100000000000000000000000000000000000D1 :100F200000000000000000000000000000000000C1 :100F300000000000000000000000000000000000B1 -:100F400001C001004008880200C000000090082095 -:100F5000C0C00090002010084184000200881008E2 -:100F60000810001000088802081000020002100893 -:100F70002089A0880888A0038203000400041008C8 -:100F8000000110A000A0088988028240A08204828B -:100F9000848240A002A10803080304A0001000827C -:100FA00008C0000000000000000000000000000079 +:100F400000000000000000000000000000000000A1 +:100F500000000000000000000000900000080000F9 +:100F600001000090000000000000000000000000F0 +:100F70000000000000000000000000000000000071 +:100F80000000000000000000000000000000000061 +:100F90000000000000000000000000000000000051 +:100FA0000000000000000000000000000000000041 :100FB0000000000000000000000000000000000031 -:100FC00000000480210090000080008000001100DB -:100FD00000008080000010000080900000000000F1 -:100FE0000080100000880090001100800000008048 -:100FF00080800040C11180080003054000100010EF -:1010000080800000800000108410000080800000BC -:10101000000000808005A00200838008000000809E +:100FC0000000000000000000000000000000000021 +:100FD0000000000000000000000011008000008000 +:100FE000000011002180000000000000000000004F +:100FF00000000000000000000000000000000000F1 +:1010000000000000000000000000000000000000E0 +:1010100000000000000000000000000000000000D0 :1010200000000000000000000000000000000000C0 :1010300000000000000000000000000000000000B0 -:1010400000000000040009030400A11000000000DB -:1010500000048000800080108000008000008088F4 -:10106000000200800000809000808080000000A0CE -:10107000808000800880C08211910982000080A1D8 -:10108000008000800000800000C000800080000020 -:1010900000A00020800088800210092008200000A5 -:1010A0000008000000000000000000000000000038 +:1010400000000000000000000000000000000000A0 +:101050000000000000000000000000000000008010 +:10106000000000800041090000100080000800001E +:101070000000000000000000000000000000000070 +:101080000000000000000000000000000000000060 +:101090000000000000000000000000000000000050 +:1010A0000000000000000000000000000000000040 :1010B0000000000000000000000000000000000030 -:1010C00000000000000001C090000008C100000006 -:1010D00000009001C00010000801089010C002003C -:1010E00020C1109088C0100002C1084008C0020052 -:1010F000C0C0020290C0909009C1880984C002005B -:1011000004C0041004C000001000A0C18202C0C0CE -:10111000080082C182C108909110A189A0888489A9 -:101120002000821082C002020000000000000000C7 +:1010C0000000000000000000000000000000000020 +:1010D0000000000000000000000000000000000010 +:1010E0000020000000C000890190000100200001E4 +:1010F00000000000000000000000000000000000F0 +:1011000000000000000000000000000000000000DF +:1011100000000000000000000000000000000000CF +:1011200000000000000000000000000000000000BF :1011300000000000000000000000000000000000AF -:10114000000000000000000000900008000021C026 -:1011500090000090004000C000028420C0100002F7 -:1011600011020020C088200889880088C0882002D9 -:1011700009A10002C002100803020008C00888028A -:1011800003880104C1048808000009040104C0C0E8 -:1011900011C003090082C083844089A084A12183F7 -:1011A000910202840082088288040000000000008E +:10114000000000000000000000000000000000009F +:10115000000000000000000000000000000000008F +:1011600001000088880001000100080002900000D2 +:10117000000002000000000000000000000000006D +:10118000000000000000000000000000000000005F +:10119000000000000000000000000000000000004F +:1011A000000000000000000000000000000000003F :1011B000000000000000000000000000000000002F -:1011C00000000000000000000000001100200009E5 -:1011D000208400000000008000800000000080806B -:1011E000020041800000800000804100000080007B -:1011F00000004108008880098080411000A0909183 -:101200000202C1004000C00000800000418909893D -:1012100080110809C14000088005029010092002D1 -:10122000031040058800000000000080000000005E +:1011C000000000000000000000000000000000001F +:1011D000000000000000000000000000000000000F +:1011E00000004100008000000900090080008080AC +:1011F000410000008000000000000000000000002E +:1012000000000000000000000000000000000000DE +:1012100000000000000000000000000000000000CE +:1012200000000000000000000000000000000000BE :1012300000000000000000000000000000000000AE -:10124000000000000000000000000000808809008D -:1012500000800811801000000000000080000000E5 -:1012600000800000000000008000800000008080FE -:1012700080800000800000000000800010108900C5 -:10128000090002008000808080000000000000084B -:10129000800000800000800400800000000020909A -:1012A0008289908008088000000000008000000013 +:10124000000000000000000000000000000000009E +:10125000000000000000000000000000000000008E +:10126000000000000011000000800000001180114B +:10127000000000000000000000000000000000006E +:10128000000000000000000000000000000000005E +:10129000000000000000000000000000000000004E +:1012A000000000000000000000000000000000003E :1012B000000000000000000000000000000000002E -:1012C0000000000000000000000000000000C0114D -:1012D000200800400000C000201008902000C0003E -:1012E0008802008400001000020208020800880042 -:1012F0001008080802000200020210020800880913 -:10130000828408089000100008100884A0000000E3 -:10131000A00120A0C0840200080182208220840055 -:10132000A01005C1840403011000820482C00200E1 +:1012C000000000000000000000000000000000001E +:1012D000000000000000000000000000000000000E +:1012E00000000000000000010000004000000001BC +:1012F0002001008800000000000000000000000045 +:1013000000000000000000000000000000000000DD +:1013100000000000000000000000000000000000CD +:1013200000000000000000000000000000000000BD :1013300000000000000000000000000000000000AD :10134000000000000000000000000000000000009D -:1013500000000060000000000000006000000000CD -:10136000000000600000424200000000000048420F -:101370000000000000004842000000000000484259 -:10138000810000E0000048420000000000004842E8 -:1013900000000000000000004842000000000000C3 -:1013A0004842810000E00000410000000000000011 +:10135000000000000000000000000000000000008D +:1013600000000000000000000000000007008221D3 +:10137000000000E007008100000000000000000005 +:10138000000000000000000000000000000000005D +:10139000000000000000000000000000000000004D +:1013A000000000000000000000000000000000003D :1013B000000000000000000000000000000000002D :1013C000000000000000000000000000000000001D -:1013D0000000FF990000FCFC0000FC0C0000FF0076 -:1013E0000000FF0000003CB4F0F0727272663CF046 -:1013F000F0F0FFDBFFDFFE666666FBFBFBFF6C6C5D -:101400003C3C3FFFBFFFE7EFFFFFF9FBFFFF7E76AE -:10141000666600007E667666F0F0F0F0E7E6242669 -:101420003C3C3C3CA9A9A999659999996663C3C3B9 -:101430008180BDBF0000000000000000000000002F +:1013D000000000000000000000000000000000000D +:1013E00000000000000000000000000000000000FD +:1013F000F0F00000FF000000FF000000000000000F +:1014000000000000000000000000000000000000DC +:1014100000000000000000000000000000000000CC +:1014200000000000000000000000000000000000BC +:1014300000000000000000000000000000000000AC :10144000000000000000000000000000000000009C -:1014500000000000660000000C0C0000FC0C000006 -:10146000F0F0000066660000F0F0F0F06666666678 -:10147000B4F0F0F024002000026666662020200010 -:101480006C3C3C3C30002000242000006020000028 -:1014900042466666000042664666B4B4B4F06666CC -:1014A00066667E7C181C6A6A6A66669A6666999C9D -:1014B0003C3C7E7F42400000000000000000000035 +:10145000000000000000000000000000000000008C +:10146000000000000000000000000000000000007C +:101470000000F0F00000FF000000FF00000000008E +:10148000000000000000000000000000000000005C +:10149000000000000000000000000000000000004C +:1014A000000000000000000000000000000000003C +:1014B000000000000000000000000000000000002C :1014C000000000000000000000000000000000001C :1014D000000000000000000000000000000000000C :1014E00000000000000000000000000000000000FC @@ -192899,4155 +192899,58 @@ :1015200000000000000000000000000000000000BB :1015300000000000000000000000000000000000AB :10154000000000000000000000000000000000009B -:1015500000000000000000000000363600006F6F41 -:101560000000FCFC0000FF6600000F3C3C3C3666BF -:1015700062626E6E0F0F033F6666427E00FF0CCF05 -:10158000040CFFFF0F030F3F0F2727273C3C366655 -:10159000FBDBFFFF0F2F2F2F0000FFF7F7F700FFF8 -:1015A00000FFF7E7FFFFC3C3C5A5998D8D8D5A5A7C -:1015B0005666999599A567E7981800000000000005 -:1015C000000000000000000000000000000000001B -:1015D000000000000000000000000000363600009F -:1015E000090900000C0C0000006600000F3C3C3CA8 -:1015F0003C3C6662666E0F0F0B2F6666626E00FFE4 -:1016000004DF0000FBF30F0B0F2F0F0F0F0F3C3CFD -:101610003C3C000004240F0B0B0B000000040404EE -:1016200004F724E7000008183C3C35A56672727286 -:101630005A5A5999666566A564249BDB0000000030 -:10164000000000000000000000000000000000009A -:1016500000000000000000000000000040E38007E0 -:10166000002D920240E38007002D920240E38007A4 -:10167000002D100240008000002010024061800612 -:10168000002D100240618006002D10024061800292 -:101690008025100240618006002D1002000040618C -:1016A0008006002D100240618006002D100240616E -:1016B0008000802110024000800000200002000015 -:1016C000000000000000000000000000000000001A -:1016D0000000000000000000000000000000554174 -:1016E0005541FE0054000000000000000000000012 -:1016F00000000000000000000000000000000000EA -:10170000000000000000000000003F033F037D5D7B -:101710005555FFFFF7F30000000000000000000037 -:10172000000000005F0A3F03000000005F3F0A0363 -:1017300055CF55FF08F80DFD000000000000000027 -:101740000000000000000000000000000000000099 -:101750000000000000000000000000000000000089 -:10176000FFC3FFC3FE007C0000000000000000007B -:101770000000000000000000000000000000000069 -:101780000000000000000000000000003F033F03D5 -:1017900041515555000020300000000000000000BD -:1017A0000000000000005F0A3F03000000005F3FF0 -:1017B0000A03550C550000F00FFF00000000000068 -:1017C0000000000000000000000000000000000019 -:1017D0000000000000000000000000000000000009 -:1017E0000000000000000000FCFC00000000000001 -:1017F00000000000000000000000000000000000E9 -:10180000000003F303F300000000000000000000EC -:1018100000000F0F00FFFCFFF0F35F505555000074 -:1018200000000000AAF0AAF0000000000000000084 -:10183000000000000FFF0F14080FF8FF0000000069 -:101840000000000000000000000000000000000098 -:101850000000000000000000000000000000000088 -:1018600000000000000000000002FCFE000000007C -:101870000000000000000000000000000000000068 -:101880000000000003F303F300000000000000006C -:10189000000000000F0F3C3C0C0F0003FF00F5059B -:1018A000000000000000AAF0AAF000000000000004 -:1018B0000000000000000FEB0F000007F0F7000031 -:1018C0000000000000000000000000000000000018 -:1018D0000000000000000000000000000000000008 -:1018E00000000000000020000320048520200008E4 -:1018F00000000400C00020410404201188002000E2 -:101900008800201120102000400020088800880056 -:1019100020802005820020002000200020001000F0 -:1019200004002008040000032005201020052008E2 -:101930008808200040090408C00520002005400058 -:101940000410400040008910200804102008C0083E -:10195000400810092008C00540000410880340001A -:10196000040884008800880400000401802000012D -:101970000000000000200000000000210000000026 -:101980000002000200020000000020000000000031 -:10199000000080040000200000001000100400027D -:1019A0000400000000000000000010000500050019 -:1019B0000900000009002000400020000082000013 -:1019C0002000200020000000200040C0400009C08E -:1019D0000000040000000400000009004100410074 -:1019E0000500402009200400200204100400020029 -:1019F00000000800000000000000010500100000C9 -:101A000000000004000400100800000000000000B6 -:101A10000010000090000108010000000000000814 -:101A2000000000000000002008410000000010003D -:101A3000004000000000000500000000020000005F -:101A400000000000000003008210020400000005F6 -:101A500002000400000000000010901000000009C7 -:101A600000040805020000100009000080848000C6 -:101A700000100008008400040008008440080008EA -:101A800000840008020941110284000400080000DB -:101A90000000000400840908200420040008000855 -:101AA00000C004080510008400000540000009087B -:101AB0000000040800100488040800080010000852 -:101AC00004840010000800082088000800080010A6 -:101AD00000080010001000100008098804080084A5 -:101AE000004000400008001004000010001004082E -:101AF00000040103C1000000000090000208002063 -:101B000001000040200000210008000088080410A7 -:101B100000000010000000100040000490000010C1 -:101B20000010001000004009000200219000000099 -:101B3000000300000000001088410003002108009D -:101B4000901000000002C000000090210021000859 -:101B5000020200050021000000000010002100002A -:101B60000003080800080000A0000000880500210C -:101B70008400090004880400400040A01110000007 -:101B800004A120102000C000008200084182400013 -:101B900000A0110200A00008200020A00001000801 -:101BA000000000000002000080A000080088004043 -:101BB000000000A0000800004000009009000200A2 -:101BC00083A0218400000008001000880088088499 -:101BD0000000038200081000080800000300000055 -:101BE0000010050000004100080000002100410035 -:101BF0000000008000C0000004000041A04100007F -:101C00000000004100000002A000C00420102010CD -:101C10002141040000000041080001040005820089 -:101C200082418211000004118200080008418241B3 -:101C300008000000044104008200A0000000100021 -:101C40008209080082040000044100202040A00016 -:101C5000A0000800040000008400100082001000B2 -:101C600010000800C0000000040082008200100084 -:101C7000A0000000002000202000800000002000C4 -:101C8000009000880088009000090000000180207A -:101C90008088A09000000090209000082008008814 -:101CA000008400002010001000100084000809408B -:101CB0002000110000000084000400040010004017 -:101CC0000004000400040000000800402000800020 -:101CD00000000010000000A000000000000800004C -:101CE0000800000000000800000000A00000000044 -:101CF0000000000000000080048000000000900050 -:101D0000000800000000000084000000200000091E -:101D100000100010200000000003C0000020000898 -:101D20002000000000000041000000000000000052 -:101D30000000000000000000000000000000001093 -:101D4000090000000000001000400000000000003A -:101D50000000000000000000000000000000000083 -:101D60000800A00000008240000800000000C00041 -:101D700008000000000000081120C02000400500FD -:101D80000500090005000500050005840008800025 -:101D9000000005840088A184110400A000A00008B0 -:101DA000040080A02000002004A000100010218466 -:101DB000218200840000029000000084051000844D -:101DC0000010409000000900000011040904059073 -:101DD00009C00084040000000000000000000000B2 -:101DE00000000000000000000000000000000000F3 -:101DF00000000000000000000000008004000080DF -:101E00000100000000000000080000000100004088 -:101E10002080000000080100000000000003000016 -:101E200000080000000000002000880200050010EB -:101E300000000000001000008220000000000010E0 -:101E400000000000024000000004000000008200CA -:101E500082008200000800000080000000030800EB -:101E6000000200000000000300000000200010003D -:101E70000800000000000000100000000020910099 -:101E80000020040000000000008400080210200070 -:101E9000000880040082000020000000000000A074 -:101EA00000A0000800002000000020080010111011 -:101EB000001000A020100000020000080000000038 -:101EC000200020040210004000000040000000003C -:101ED00000000000000000000000000400000000FE -:101EE00000000000000000000000000000000000F2 -:101EF00000000000000000000000000000000000E2 -:101F000020A00010100000000000000000000000F1 -:101F10000000880000000000000001000000000038 -:101F2000000000000000000104001001000000009B -:101F3000000000000000000000000000000100019F -:101F40000000000000000000000000010000000090 -:101F50000000000000000000000000000100000080 -:101F60000000000000000000000000000000000071 -:101F70000000000000000000000000000000000061 -:101F80000000000000000000000000000000000051 -:101F900000000000000000110000000040000000F0 -:101FA000000000000000000000110909800300107B -:101FB0000000000000000000000400000010000805 -:101FC00000000000000000000000000000100020E1 -:101FD00000000000000000000000000000000800F9 -:101FE00000000000000000000000000000000000F1 -:101FF00000000000000000000000000000000000E1 -:1020000000000000002000808000000000000000B0 -:102010000000000000001100110000080000000492 -:102020000000000000000000000000000900110096 -:10203000030300000000000000000000000000009A -:102040000000000000000000000000000000000090 -:102050000000000000000000000000000008000078 -:102060000040000000000000000000000000000030 -:102070000000000000000000000000000000000060 -:10208000000000000200A00100829000000000009B -:1020900000000000108804000000000000000000A4 -:1020A000000100000000000000000000009000009F -:1020B000010001010000000000000000000000001D -:1020C0000000000000000000000000000000000010 -:1020D0009000000000000000000000000000000070 -:1020E00000000000000000000000000000000000F0 -:1020F00000000000000000000000000000000000E0 -:10210000000000000000004000A09000020000005D -:10211000000000000000010001009001000000002C -:1021200002000000000000000000000000000000AD -:10213000000040000001000000000000000000005E -:10214000000000000000000000000000000000008F -:10215000000001000000000000000000000000007E -:10216000000040000000000000000000000000002F -:10217000000000000000000000000000000000005F -:1021800000000000000000000080000080008000CF -:102190000000000000000000200811411021001183 -:1021A000000000000000100000000000000000001F -:1021B00000094004000000110000000000000000C1 -:1021C000000000000000000000000000000000000F -:1021D00000000000200000000000000000000000DF -:1021E00000000000000000000500000000000000EA -:1021F00000000000000000000000000000000000DF -:10220000000000000000000000008010002100001D -:102210000000000000000000000041210909418089 -:10222000111100000000000000000000000000008C -:1022300000004180090000000310000000000000C1 -:10224000000000000000000000000000000000008E -:10225000000000000000000000000000000000007E -:102260000000000000080000000000000000000066 -:10227000000000000000000000000000000000005E -:1022800000000000000000000000000090010000BD -:10229000000000000000000000000000000101003C -:1022A000000200010000000000000000000000002B -:1022B000000000000002000000000000000000001C -:1022C000000000000000000000000000000000000E -:1022D000000000000000000000A00020000000003E -:1022E00000000000000000010000000000000000ED -:1022F00000000000000000000000000000000000DE -:1023000000000000000000000000000000000000CD -:102310000000070000000000000000000000410075 -:1023200000E006000000410000E0000000000000A6 -:10233000000000000000410000E00000000000007C -:10234000000000000000000000000000000000008D -:10235000000000000000000000000000000000007D -:102360000000000000000000810000E0000000000C -:10237000000000000000000000000000000000005D -:10238000000000000000000000000000000000004D -:10239000AAAAAAAAFCFCFCFC0000000000000000A5 -:1023A000000000000000000000000000000000002D -:1023B000000000000000000000000000000000001D -:1023C000000000000000000000000000000000000D -:1023D00000000000000000000000000000000000FD -:1023E00000000000000000000000000000000000ED -:1023F00000000000000000000000000000000000DD -:1024000000000000000000000000000000000000CC -:1024100000000000FFFF0C0C0C0C0000000000008E -:1024200000000000000000000000000000000000AC -:10243000000000000000000000000000000000009C -:10244000000000000000000000000000000000008C -:10245000000000000000000000000000000000007C -:10246000000000000000000000000000000000006C -:10247000000000000000000000000000000000005C -:10248000000000000000000000000000000000004C -:10249000000000000F550F55FCFC0C0C0000000064 -:1024A000000000000000000030303030000000006C -:1024B000000000000000000000000000000000001C -:1024C000000000000000000000000000000000000C -:1024D00000000000000000000000000000000000FC -:1024E00000000A0A0A0A00000000000000000000C4 -:1024F00000000000000000000000000000000000DC -:1025000000000000000000000000000000000000CB -:102510000000000000000F550F55FCFC0C0C0000E3 -:1025200000000000000000000000F3F3F3F30000DF -:10253000000000000000000000000000000000009B -:10254000000000000000000000000000000000008B -:10255000000000000000000000000000000000007B -:1025600000000000FAFAFAFA000000000000000083 -:10257000000000000000000000000000000000005B -:10258000000000000000000000000000000000004B -:102590000000000000000000000000080000000033 -:1025A00000000000000000000561000C800900012F -:1025B00000610007800D0000000000000000000026 -:1025C0000061000080010000000000000000000029 -:1025D00000610006000D0000000000000000000087 -:1025E000000000610006000D000000000000000077 -:1025F000000000610007800D0000000000000000E6 -:1026000000000000000000000000000000000000CA -:1026100000000000000000000000000000000000BA -:102620000000000000000000000014D71717505FE2 -:102630003C3C000000000000000000000000000022 -:102640000000FF555555BCBCBCBC0000000000009C -:10265000000000000000000000000000000000007A -:10266000000000000000000000000000000000006A -:10267000000000000000000000000000000000005A -:10268000000000000000000000000000000000004A -:10269000000000000000000000000000000000003A -:1026A00000000000000000000000000014D7171711 -:1026B000505F3C3C000000000000000000000000F3 -:1026C00000000000FF3C003CA0A0AFAF00000000F5 -:1026D00000000000000000000000000000000000FA -:1026E00000000000000000000000000000000000EA -:1026F00000000000000000000000000000000000DA -:1027000000000000000000000000000000000000C9 -:1027100000000000000000000000000000000000B9 -:1027200000000000000000000000000000007D7DAF -:102730007D7DAAAA00FF000000000000000000004C -:102740000000000000005DFC5D0CF0FFFAFA0000E4 -:10275000000000000000C0C0CFCF0000000000005B -:102760000000000000000000AAF0AAF00000000035 -:102770000000000000000000000000000000000059 -:102780000000000000000000000000000000000049 -:102790000000000000000000000000000000000039 -:1027A0000000000000000000000000000000000029 -:1027B00041414141AAAA00FF0000000000000000C2 -:1027C00000000000000000005DFC5D0C000FAAAAE4 -:1027D0000000000000000000C0C0CFCF00000000DB -:1027E00000000000000000000000AAF0AAF00000B5 -:1027F00000000000000000000000000000000000D9 -:1028000000000000000000000000000000000000C8 -:1028100000000000000000000000000000000000B8 -:102820000000040000000200200020002000200919 -:102830002000200088048800C0002000040020043C -:1028400020002000820820002000200040002003FB -:10285000C00088002100020020102000200020007D -:102860002004000340002000209020002000880069 -:10287000A000040004100405A005C0082109208858 -:10288000210084804000040820082000100020045B -:1028900020030404400084008800400010008800E9 -:1028A00004002000000420000000000000040000DC -:1028B00000C0000041000000000000000090000087 -:1028C0000000009000000084410000000000200093 -:1028D0000000000000000200A0002100A000000095 -:1028E000000009000000890000080002000000004C -:1028F000410004004000000020000000200004848B -:102900000004840220202000200004000900200090 -:1029100000004004200010C004200002200000003D -:102920000000200000000003001000008200900062 -:102930000008840400002004040020002100000896 -:10294000000008000000010000000008000800006E -:10295000000000000100000000000800000000006E -:1029600000000010000000000000000301850021AD -:102970000000000000000000004000000000000017 -:102980000400000000408500000500000000000079 -:1029900002000010080000000800001008080805E8 -:1029A0000000001002090208000000840004110069 -:1029B0000008008800000008800800028008828863 -:1029C000000820040008001002000282000000A09D -:1029D0000008000809080208051000000040000077 -:1029E0000408000000040000000000000084400211 -:1029F0000010000800040008200809840010048862 -:102A0000001080080484001020080008000800401E -:102A10000400000800840088000800000040400016 -:102A2000000800100040001000888400000890009A -:102A300000024000000500089021004000218800AD -:102A4000C0002021008020210021C0410240C0059B -:102A50000003C003200902218421400888084005A2 -:102A60009008000001000005000800004008C000B8 -:102A70000100010088218408400084000000000853 -:102A80008840401004039100200003410021000809 -:102A900000051000002002030002000000050000F5 -:102AA0000000000000080008000000004100008451 -:102AB00041001101200040880010000000011100B9 -:102AC00000000002800000040040000000008000C0 -:102AD00000000040000000888000008800C000085E -:102AE00000020002000002000008000000000000D8 -:102AF00000900200020003000000400000000000FF -:102B0000000000000000800004048808200000008D -:102B100000000000410041A004002100000000006E -:102B20000000000000000800000000080000004055 -:102B30008840C0040040C000C04000400040004049 -:102B400000400141000400800040C04100C0C0407E -:102B500001000000004002400240004008400940DF -:102B600000400040004082408200014000400000E0 -:102B7000081000410040008000000400080400101C -:102B80000004000084000400000082208220002055 -:102B9000040010001000000000008200820000000D -:102BA0000800820004008400C000C0008200100001 -:102BB00000890001000000410090000100050001B3 -:102BC00000010005020011000002001100000003D6 -:102BD00000010200000400118001800100010001D9 -:102BE000020100850001008300A100002001020114 -:102BF000000000000000000900020000080400C0FE -:102C0000009000000000080000000000000100012A -:102C10000911000000000000000000000000040096 -:102C20000000030000A000000000000000100000F1 -:102C3000001000002040200000008811000000006B -:102C40000000002100000205908000058421014061 -:102C5000848000000200002100210000000000210B -:102C6000000500000000000000082090020020087D -:102C7000004100000000A000000000210000004111 -:102C8000004100210000000000000010A000000032 -:102C9000002000000000A003000000080020000049 -:102CA0000000100000080800C0000000000008003C -:102CB0000000000011A0000000000502200200003A -:102CC000000400000000200080020002008800A034 -:102CD00020900004000000900000000000000000B0 -:102CE000000420880000000000000000804000A0D8 -:102CF00080000004000000000000000041004004CB -:102D00000900000040004000000002000000000038 -:102D1000008800A00010000000000000000000007B -:102D200000000000000000000000000000000000A3 -:102D30001000000000000000000201000000008000 -:102D40000110000003000000010400A1001100A117 -:102D5000000400A100C100110005010501020000EE -:102D600000410004000000210040000800080002AB -:102D70008988010501800000010001800004010034 -:102D80000003001100000000080000000000000027 -:102D900000001080008000000000000082000000A1 -:102DA000000000000008000000000000000000001B -:102DB0004040000000000000001000850288090863 -:102DC0000040020000C0020400002090000200C089 -:102DD000004011C02040004000000000020002003E -:102DE0000000001000000000000000000000008251 -:102DF0000000020202000202000002000240000085 -:102E0000028200200000000000900000000000008E -:102E100000000000000400040000000000000000AA -:102E200000000000000000000000000000000000A2 -:102E30000000000000000000000003C0008800A0A7 -:102E4000880088C0040000888208A00800C0000232 -:102E500002080208A008010804084090840800083D -:102E60000202A0400010000408840904001000C001 -:102E700084C005C000859084A004000110A100A1B9 -:102E800000054005000000000000000000000000F8 -:102E900000000000101000900884908300000000E3 -:102EA0000000000000000000000000000000000022 -:102EB00000000000000000000000000089802100E8 -:102EC0000000000000800000000080000080000082 -:102ED00008000080008003900884000080000080CB -:102EE00000800000008000800000800084000080DE -:102EF00000000000110011218008001000001008DF -:102F00000021001080100000000000000000000000 -:102F100000000000000091822180008880020000F3 -:102F200000000000000000000000000000000000A1 -:102F30000000000000000000000000000000000091 -:102F40000000000080000000000880000080804039 -:102F50002082808484808040809100030080000073 -:102F600080C0000300800000809100040080000009 -:102F700000A100000080108010A0108008840000D4 -:102F8000C180028902A002020000000000000000CF -:102F9000000000000000000091800202918000808B -:102FA0000000000000000000000000000000000021 -:102FB0000000000000000000000000000000000011 -:102FC000000088008800C00090000200100002C0CD -:102FD0000801C0C0080810C0080010C0109102C04D -:102FE000040010C1029104C0020008C0048284C021 -:102FF000100084C0048484C0C19004C1044084C013 -:1030000000000802C1C085418500000000200000CA -:1030100000000000000000000000101002008540C9 -:10302000829000000000000000000000000000008E -:103030000000000000000000000000000000000090 -:103040000000000000880001C0C000020010C0089D -:10305000101091088210C003021011084120C0090D -:103060008210C1020020C0C088C0C1080004C00492 -:103070000410A1C00010C0C084C011850004C104A8 -:103080009010000005040184C08588C00000000085 -:10309000000000000000000000000000020300012A -:1030A00091908383000000000000000000000000F9 -:1030B0000000000000000000000000000000000010 -:1030C000000000000000000000108084000000806C -:1030D000808000804180008980030590C110090034 -:1030E00080848980410000808000000041800000D1 -:1030F000800000004100008080000000C1401004FA -:1031000088041004000041400820802100000000D5 -:10311000000000000000000000000000000000119E -:1031200021038591910200000000000000000000D2 -:10313000000000000000000000000000000000008F -:1031400000000000000080009089840003008000DF -:10315000008000808000800000890000000980005D -:10316000008480808000004080008000000000001B -:10317000000080000000000000000000000091201E -:1031800021000980040000001084908021809002BA -:10319000000000000000000000000000000000002F -:1031A000A19111411100100000000000000000007A -:1031B000000000000000000000000000000000000F -:1031C0000000000000000000C00011030400C10066 -:1031D000C0000008880808000800901102020401DD -:1031E0000800C002080810001001080408C002000E -:1031F000040004A008041000C000C0C0C0C08400C7 -:1032000010910420848404900000A0112084851073 -:1032100002000000000000000000000000000000AC -:10322000000091A1090000008300000000000000E0 -:10323000000000000000000000000000000000008E -:10324000000000000000000000000000000000007E -:10325000008200000000000000420000006000004A -:103260004842410000E00000484200000000000029 -:10327000484200000000000048420000000000003A -:103280004842410000E00000484200000000000009 -:1032900000004842000000000000000000000000A4 -:1032A00000000000418200E0070000000000000074 -:1032B000000000000000000000000000000000000E -:1032C0000000000000000000000000003F3000008F -:1032D000F6F600003F3F0000767676663D34FF004C -:1032E00076764646FE026666B4B4B4F07E76424612 -:1032F00036363666727272663C366666E7EFFFFFF8 -:10330000727272667E7666667E7FFFFF00003C3CCE -:103310003C3CFDFDFDFF000000000000000000003F -:10332000000000000000FFFF00007E003C420000A3 -:10333000000000000000000000000000000000008D -:1033400000000000000000000000000000003F300E -:103350000000060600003030000046464666FF00CA -:10336000FF007666466666666666F0F0F0F06666B2 -:103370006666666666666666666666666666242075 -:103380000000666666664246666618100000000029 -:103390007E187C1C4040400000000000000000003F -:1033A0000000000000000000246642007E007E0055 -:1033B000000000000000000000000000000000000D -:1033C00000000000000000000000000000000000FD -:1033D00000000000000000000000000000000000ED -:1033E00000000000000000000000000000000000DD -:1033F00000000000000000000000000000000000CD -:1034000000000000000000000000000000000000BC -:1034100000000000000000000000000000000000AC -:10342000000000000000000000000000000000009C -:10343000000000000000000000000000000000008C -:10344000000000000000000000000000000000007C -:1034500000000000660F0000660F000036363C36A4 -:103460003C36FFFFD3FF0B0B2F2F3C3C3666626EC2 -:10347000626E0424F7E7626E626E666E667E666652 -:103480004E4EFFD9FFFF0F0F033F62426E7E46068E -:1034900076F600000F0F0F0F999191910000000038 -:1034A00000000000000000000000000000FF00FF1E -:1034B000300F003F0000000000000000000000008E -:1034C00000000000000000000000000000000000FC -:1034D000000000000000660F0000660F0000363696 -:1034E0003C3C3C360000002C0F0B0F2F3C3C3C3C7E -:1034F0006666626E0000FFFF6666626E6662664226 -:103500006666664E000000260F0F0B2F6666666625 -:103510006666666600000F2D2D2D999D9D9D00000D -:10352000000000000000000000000000000000009B -:1035300002FD300F003F000000000000000000000E -:10354000000000000000000000000000000000007B -:1035500000000000000040E38006002D920240823F -:1035600080000020100240618007002D10024061A1 -:103570008007802D100240008000002010024000D3 -:1035800080000020100240008000002010024061F6 -:10359000800280251002000040618006002D00029C -:1035A000000000000000000000000000000000001B -:1035B0000061002480010000000000000000000005 -:1035C00000000000000000000000000000000000FB -:1035D0000000000000000000F0C3F0C300FF000086 -:1035E000000000000000000000000000FF000F0FBE -:1035F000000000003C003C00000000000000000053 -:1036000000000000000000000000000000000000BA -:103610007D415555AAAA3A3C0000AFAFAFAFF03C90 -:10362000F03C00000000000000000000000000006E -:103630000000431C5F00D8F0F0F000000000000024 -:10364000000000000000000000000000000000007A -:1036500000000000000000000000F0C3F0C3FFFF06 -:10366000FF00000000000000000000000000FF005C -:103670000F0F00000000FFC3FFC3000000000000A8 -:10368000000000000000000000000000000000003A -:1036900000005D515555AAAAAAAA0000AFA3AFAF7A -:1036A000F03CF03C000000000000000000000000C2 -:1036B00000000000431C5F0000F000F0000000006C -:1036C00000000000000000000000000000000000FA -:1036D00000000000000000000000000000000000EA -:1036E00000000000000000000000000000000000DA -:1036F000F5F50505F0AAF0AA0000000000000000A2 -:1037000000000000000000000000000000000000B9 -:103710000000000087058705CF00CFFF00000000F4 -:1037200004FE20A020A00000000000000000000017 -:1037300000000000000000000101FC00FC0000008F -:103740000000000000000000000000000000000079 -:103750000000000000000000000000000000000069 -:103760000000000000000000000000000000000059 -:103770000000F5F50505F0AAF0AA00000000000021 -:103780000000000000000000000000000000000039 -:10379000000000000000AF2DAF2DC000C0FF0000F2 -:1037A000000004FE28AA0000000000000000000045 -:1037B00000000000000000000000000000FC00FC11 -:1037C00000000000000000000000000000000000F9 -:1037D00000000000000000000000000000000000E9 -:1037E00020002084200088842004042088002000F9 -:1037F00020002000200588008200202000102000EA -:1038000020002000201020002000040020002010B4 -:103810002000200020002005200020104008040582 -:103820000003C000200020034000200020002010E2 -:103830000410C000200020002000400020054000AF -:10384000200020084000200020002000A000880068 -:10385000400820008800200040008800C0000400CC -:10386000040500000021000000218000800100000C -:10387000000000000900000000000000000100003E -:103880000000000000000000000000000000000038 -:103890000000000000000000000000000400040020 -:1038A00020000000004000000000040000000900AB -:1038B000400000A0040005084100090004000408BD -:1038C0002090000040002000000009004000090096 -:1038D0004090000009C0000005A000C0400020008A -:1038E0000900092002000041000002000100000060 -:1038F0000000020000009000000001000200010032 -:103900000000010500200000000000000000004150 -:1039100002000000000000000005000000000000A0 -:10392000000000000000000800000003000002008A -:10393000000000400000000000000000000802003D -:103940001000020500000008000500030010000040 -:1039500008080010000000000000000090100200A5 -:1039600000000808A010000000000008000020006F -:1039700000082000000800080008000020082008B7 -:103980000484000804080000008200040000000015 -:1039900000880984008400880008001000040008E2 -:1039A000000800880088000020840008008440008F -:1039B00004000008000820840000001000000040FF -:1039C00000C0004000100010008400100008000833 -:1039D000000800880008208400000008001000088B -:1039E00000100908004000402000100020050003DE -:1039F000C0000421000001210000910500082110F1 -:103A000002030008000004410000840800080100CF -:103A1000000000400000000800210000001000002D -:103A20000021000000210008000000210100000822 -:103A3000040800080000002100080005840090210F -:103A40000000080000000008000800210008001025 -:103A50000000000000080004000000080041000011 -:103A6000000000000000000000088010001080042A -:103A700010820810A01000000482009004000000D2 -:103A80008410008200000802808800020008000004 -:103A90002000008400080000000000A0000011A029 -:103AA00000080000080000A000A0000000900484AE -:103AB000000491C000840084040003820000000020 -:103AC00000000000000000000000000000000000F6 -:103AD00000000000000008000000040000000000DA -:103AE00000080000000000000000000000020400C8 -:103AF000001108000005000000000021000900007E -:103B00000100000000000000C000012100000000D2 -:103B1000000000000000A000000000000000000005 -:103B200000000000000282000000C0000000100041 -:103B3000000000000802000088000000A000080447 -:103B40000000040084000000820040118211820005 -:103B5000040082004000040004000800820000000D -:103B60000800820008004000000008000800000172 -:103B700080000000000002900210110800A0000068 -:103B8000008408840000008800880002040200000D -:103B900000000000000000200002092000000000DA -:103BA0000000000000000090000000400000000045 -:103BB00000000000000200000000020000040040BD -:103BC00000000000004000C0000000840000000071 -:103BD0000000000000000000800000000000000065 -:103BE00000000000000000000008000000000000CD -:103BF000000004080000008000100080021001088E -:103C0000000001850008098000000180000000001C -:103C10000002010000210102000008000000000075 -:103C2000C000000000000000000000000000018053 -:103C30000000000200000000010000000000000081 -:103C4000000000000000000800000000000000026A -:103C50000000000000000000000000000000000064 -:103C6000000000000000000000000800000000004C -:103C700000000010A01000A000204100002000085B -:103C80000482000020040000202000000420110213 -:103C900000A0000820000000200000A00000000894 -:103CA00000000900000000000008110000001140A1 -:103CB0004010000000842084400404000200000042 -:103CC0000000050000000500000000000000008466 -:103CD00000A0000000000000000021000000000023 -:103CE00000000000000000000000000000000000D4 -:103CF000000000000080880001000100008000003A -:103D00000110002100020041028000000183200414 -:103D100020040000008020000100000000000000DE -:103D20000000004100110000000000000000000041 -:103D3000000000000000020000000000040000116C -:103D400000400000000000210021000000030008E6 -:103D500000000000880000000021000000000000BA -:103D60000000000000000000000000000000000053 -:103D70000000000000004040008802C040A0201069 -:103D800009040810009020410200A0020200021065 -:103D9000029021C0209000028088400400000204AC -:103DA00000000010000400040040000400401190D6 -:103DB0002040090402000000209000C00988910002 -:103DC0002100004000000084004000400004000486 -:103DD00000000000000000000000000000000000E3 -:103DE00000000000000000000000000000000000D3 -:103DF000000000000000000001A010820108909067 -:103E0000001100820088908800A10010080890002E -:103E100000A10082008490910000000004000000D6 -:103E20000000000000000000000000000000000092 -:103E300000000000A00000000000A0A0000800207A -:103E40000808000000000000000000000000000062 -:103E50000000000000000000000000000000000062 -:103E60000000000000000000000000000000000052 -:103E7000000000000000000000004080A1850391C8 -:103E8000800900A010900080800000C000098080A0 -:103E9000800000C000800000800810004105800004 -:103EA0000009000000000000000000000000000009 -:103EB0000000000000000000000000000080008002 -:103EC00000000000000000000000000000000000F2 -:103ED00000000000000000000000000000000000E2 -:103EE00000000000000000000000000000000000D2 -:103EF0000000000000000000000000008000101121 -:103F0000800304008040001180000080808009113F -:103F1000800040108000801100000080000005211A -:103F20000009001000000000000000000000000078 -:103F30000000000000000000000000000000000081 -:103F40008010800000000000000000000000000061 -:103F50000000000000000000000000000000000061 -:103F60000000000000000000000000000000000051 -:103F700000000000000000000000000000008800B9 -:103F800000010802080810000201A00000A00808B3 -:103F90000401A000010188001001840000A0880035 -:103FA000A00000010001000000000000000000006F -:103FB0000000000000000000A00000000000000061 -:103FC00000000800A0000000000000000000000049 -:103FD00000000000000000000000000000000000E1 -:103FE00000000000000000000000000000000000D1 -:103FF00000000000000000000000000000000000C1 -:1040000040002002A00000C0900101050010000047 -:1040100008000102A00110831000000001C001117E -:1040200000000100A00100000000000000000000EE -:10403000000000000000000000000000000100007F -:1040400000000010000400048800000000000000D0 -:104050000000000000000000000000000000000060 -:104060000000000000000000000000000000000050 -:104070000000000000000000000000000000000040 -:1040800000008004800080000009000404400080DB -:10409000000080091141800800C080000011050463 -:1040A00004C0004111008008001000000000000062 -:1040B00000000000000000000000001000000008E8 -:1040C00000000000000000000000000000000000F0 -:1040D00000000000000000000000000000000000E0 -:1040E00000000000000000000000000008000000C8 -:1040F00000000000000000000000000000000000C0 -:104100000000000000080080000000000021800086 -:1041100000808000A1008009098004110021008036 -:10412000000000002100090005001011000000003F -:1041300000000000000000000000000000000080FF -:10414000000000000000000000000000000000006F -:10415000000000000000000000000000000000005F -:10416000000000000000000000000000000000004F -:10417000000000000000000000000000000000003F -:1041800000000000000000A1A084008800000001E1 -:104190000490004010000300081000080001900186 -:1041A0008420008800001102A100008400010000AA -:1041B00000000000000000000000000000000000FF -:1041C000001000840000000084000090A0000000A7 -:1041D00000000000000000000000000000000000DF -:1041E00000000000000000000000000000000000CF -:1041F00000000000000000000000000000000000BF -:104200000000000000000000418200E00700000004 -:10421000488200E007000000418200E00700000043 -:104220000082000007000000410000E000000000E4 -:10423000000000000000000000000000000000007E -:1042400000000000000000000000008200000700E5 -:10425000000000000000000000000000000000005E -:10426000000000000000000000000000000000004E -:1042700000000082000007000000000000000000B5 -:104280000000000000000000000055FF55FF0F0F68 -:10429000FFFFC3FFC3FFFFF0FFF0FF00FFFFFFFFC3 -:1042A000F0F0FF00FFFFFFFF00FFFF000000000035 -:1042B00000000000000000000000000000000000FE -:1042C000000000000000000000000000FFFF0000F0 -:1042D000B200B2000000000000000000000000007A -:1042E00000000000000000000000000000000000CE -:1042F00000000000000000000000000000000000BE -:1043000000000000000000000000000000AA00AA59 -:104310000000F0F0003C003C00F000F0000000FF66 -:104320000000F0F0000000FF000000FFFF00FFFFB2 -:10433000000000000000000000000000000000007D -:1043400000000000000000000000000000000F0F4F -:104350000F0FFF00FF000000000000000000000041 -:10436000000000000000000000000000000000004D -:10437000000000000000000000000000000000003D -:1043800000000000000000000000000000000CFC25 -:104390000C0CFFAAFF3C3C3C00FFD414D414AFA08B -:1043A000AFA0555555550CFC0CFCFF3AFF3A0000E8 -:1043B0000000C0C0C0C000000000000000000000FD -:1043C00000000000000000000000A0A0A0A000006D -:1043D0005503553FF505F5050000000000000000FD -:1043E00000000000000000000000000000000000CD -:1043F00000000000000000000000000000000000BD -:1044000000000000000000000000000000000000AC -:10441000FCFCFC0C00AA003C3C3C0F0FD717D71744 -:10442000FFF00F00F330F330FCFC0C0C003A003AC4 -:1044300000000000FCFCFCFC00000000000000008C -:10444000000000000000000000000000F5F5F5F598 -:1044500000005503553FF505F5050000000000007C -:10446000000000000000000000000000000000004C -:10447000000000000000000000000000000000003C -:10448000000000000000000000000000000000002C -:104490000000806100238019000080610026800DEB -:1044A0000000806100248009000000610026001DDA -:1044B000000080610004800900010000000000008D -:1044C0000000000000000000000000610006000D78 -:1044D00000000000000000200000000000000000BC -:1044E00000000000000000000000000000000000CC -:1044F0000000000000000000000000000500002097 -:1045000000000000000000000000000000000000AB -:104510000000000000000000FFFF3C3C0000000025 -:10452000C3C3C3C3EFEF4F4F54FE40EA0000000087 -:10453000FF0FF000CFFF0F3F14BE00AA00000000E5 -:10454000000000000000000000000000000000006B -:104550007D417D41000000000000000000000000DF -:10456000000000000000000000000000000000004B -:10457000000000000000000000000000000000003B -:10458000000000000000000000000000000000002B -:104590000000000000000000000000003C3C0000A3 -:1045A00000000F0F0F0FE0E0404054FE40EA000013 -:1045B0000000FF0FF000C0F0003014BE55FF0000F7 -:1045C00000000000000000000000000000000000EB -:1045D00000007D417D41000000000000000000005F -:1045E00000000000000000000000000000000000CB -:1045F00000000000000000000000000000000000BB -:1046000000000000000000000000000000000000AA -:1046100000000000000000003F033F03F0F0000036 -:10462000AA00AAFF00000000FF5500550A0AFAFA86 -:104630000000C3C3000000003C553C55FAFAFAFAEA -:10464000000000000000000000000000000000006A -:10465000000000000000000000000000000000005A -:10466000000000000000000000000000000000004A -:10467000000000000000000000000000000000003A -:10468000000000000000000000000000000000002A -:10469000000000000000000000003F033F03FFFF98 -:1046A0000F0FAA00AAFF00000000FF5500550A0ADC -:1046B000FAFA3C3CFFFF000000003C553C550A0A5A -:1046C0000A0A0000000000000000000000000000D6 -:1046D00000000000000000000000000000000000DA -:1046E00000000000000000000000000000000000CA -:1046F00000000000000000000000000000000000BA -:1047000000000000000000000000000000000000A9 -:10471000000000000000000000000000000484040D -:104720002004200420102000200000002004C008E5 -:1047300088100000200820002008200000082082A7 -:10474000200020002080208220904080208820822D -:104750002000820820802080200004000003040044 -:104760002000208020004003408088040288100040 -:104770000200048040002000401010008800040067 -:1047800088080008400020002000C0102000100011 -:10479000880040000400880440044004880400C1EC -:1047A0000001000100010000000000000000000204 -:1047B00000000000000800000908000000000002DE -:1047C0000040000000000040004000400040004069 -:1047D00000400000000000400040000020000000F9 -:1047E000000800000040000080002040000100049C -:1047F0002000A00020402000000000002000200039 -:10480000200000200400200000000900000010200B -:104810000000200041002000202041201040000026 -:104820000000000000000000000000000000000088 -:1048300020002000200020000040000000000000B8 -:104840000000000000000000000000000000000068 -:104850000000000000000000000000000000000058 -:104860000000001000000003000000000000000035 -:1048700082000000000000000000000000000000B6 -:104880000000000000000010000000400040080090 -:1048900004000210000000000000021000400000B0 -:1048A0000000001000000000008800000008000860 -:1048B0000000800080848000801000000000000064 -:1048C0000000008400000000000000000008000854 -:1048D000000800000008000000840008000800082C -:1048E0000000000000840000000000000400000838 -:1048F00000100088001000080000000800082008D0 -:104900000008000000080040200000100008000817 -:10491000008400100088001000400040000800885B -:1049200000080000020800A1000500210421200366 -:1049300000002008004100038821002100A1908090 -:10494000002190A1022100210003000200210003A8 -:104950000009900588020021020090000021000556 -:1049600002000200000088000003004000084082AE -:10497000200020002000020800008408020000003F -:1049800000004000002100000010001000000000A6 -:1049900000000010000800000000000000000000FF -:1049A000000000030000800000400084000000A020 -:1049B0008000000080000084000000000000004033 -:1049C000114000000002800000000088008400A068 -:1049D00000A0000000900001000080000000110015 -:1049E0000000A00080000000008400000000110012 -:1049F000880385008908880080000000000080008E -:104A00000000000000000000000000000010000096 -:104A1000000010000008000010004100000000002D -:104A2000110000000000000000000000C040004134 -:104A300000400400004000000000000000000000F2 -:104A40000000000000000000000000000000000066 -:104A500000000000000000004080A0100010408016 -:104A6000A00000000403000000000080820000009D -:104A70000000008020000000844010008200000040 -:104A80000000C0008204000404048200080000004A -:104A90000000820004000000820082000000080084 -:104AA00084000000000000000800008400000000F6 -:104AB000000000000000000000000084009000845E -:104AC000002000880000000000000000000000003E -:104AD000000200400000000000008402040000000A -:104AE0008002000000000000004000000002000002 -:104AF00000000000000280000000000000400000F4 -:104B0000000000000040000000000000000000085D -:104B10000000000000000010000000000000000085 -:104B2000000000000000000000000008000800A1D4 -:104B3000010201A100850100000200210121008382 -:104B40000121008200030000010000A1000000001C -:104B50000100008220212003000000004002000329 -:104B60000000C10200210000C000C0000000008061 -:104B7000C104C00010804008C040080500000002C9 -:104B8000C0000021000000000040002100000000E3 -:104B9000000000000000000000000800000000000D -:104BA0000000000000000000000000000000000005 -:104BB0000002028540400040020000A10500020002 -:104BC00000400284004120A0000002A0004000003C -:104BD000000002880040000000000000000080C1CA -:104BE000000000C002010000000000C000840000BE -:104BF00009400200000200408000000000000000A8 -:104C00000000000000A00000000000000000000004 -:104C100000000000000000000000000000A00000F4 -:104C20000000000000000000000000000000000084 -:104C30008840004000040040002100400021004066 -:104C40000021000000400004002100400021000578 -:104C5000004000000200002000030440000000406B -:104C60004040004000404002004000000040000082 -:104C700000000040C008C0008240C002C0000040E8 -:104C80000000004000020040004000000040000022 -:104C90000000000000000000000000000000000014 -:104CA0000000000000000000000000008200000082 -:104CB0000000000000000000000000000000208450 -:104CC0000000400000400000000000000000000064 -:104CD00000000000000000000000000000000000D4 -:104CE0000000C100000000A08011000000000000D2 -:104CF00000000000000000000000000000010000B3 -:104D000000000000000000000000000000000000A3 -:104D10000000000000000000000000000000000093 -:104D20000000000000000000000000000000001073 -:104D300000000000080800C00102A084A003A01029 -:104D40000410A084840800100184A0080802020254 -:104D500000A082A0040800A00010888408020010AF -:104D600000101084081100C00011A0A1080200C0AA -:104D7000000202080001400900840004A0C00941AB -:104D80004005C01004080404000400C088020000AC -:104D90000000000000000000000000000000000013 -:104DA0000000000000000000000000000000000003 -:104DB0000000000000008980210008000000004081 -:104DC000000400800000008000801000008082004D -:104DD00021000000800009800000008000008000A9 -:104DE00000800080800080080000008880888000AB -:104DF000000000808080000000840041000200204C -:104E00008910A190008380A0838000800000008032 -:104E10000000000000000000000000000000000092 -:104E20000000000000000000000000000000000082 -:104E30000000000000000000800880A008800080C2 -:104E400085800090840980888020808280A00080F6 -:104E5000000000C000008080800080A100008080F1 -:104E60000000009180008080000000C1808480806C -:104E7000000000A000000080000080000083000807 -:104E800000000880891011890903800080A10000BA -:104E90008080000000000000000000000000000012 -:104EA0000000000000000000000000000000000002 -:104EB00000000000000000000000080108C103100D -:104EC00082C0084002C0828510C1080108C01011CC -:104ED00002C0020002C1820282C0080008C004C0F1 -:104EE00010C0100084C0108410C08800C0C0100919 -:104EF000A0C0A00002C1A084A0C000000800A0C003 -:104F000020848888411082C08405A085040008C0E0 -:104F1000020410100000000000000000000000006B -:104F20000000000000000000000000000000000081 -:104F300000000000000000000000000011840002DA -:104F4000C0020911850201C1C011081103088210B5 -:104F5000C003C089110200A0C0C1840203840010F4 -:104F6000C0100810C1840010C040C0A0A18400116E -:104F7000C0C0848205020020C0C084040000410833 -:104F80000120C0844082A0A101101004100385C03C -:104F90000004840210100000000000000000000067 -:104FA0000000000000000000000000000000000001 -:104FB0000000000000000000000000000000C1042C -:104FC000000080008304C111110380A1A0894189E0 -:104FD000008080020404C1090000804000004100FC -:104FE0000080808080004100008080800000C1003F -:104FF000008880020080C1000080800000800000E6 -:10500000418010809180408090A1412020048588BB -:105010000800008080801180000000000000000077 -:105020000000000000000000000000000000000080 -:105030000000000000000000000000000000000070 -:105040008010042004000484212183008000C0110A -:10505000802000000080000000110000800000009F -:10506000000080800000000000110091808080001E -:10507000802180218000000000048080808000006A -:1050800000008008802080000000A021A190C08046 -:105090000209800000808080000000000000000005 -:1050A0000000000000000000000000000000000000 -:1050B00000000000000000000000000000000000F0 -:1050C000000008020285C002C0100301218408C04C -:1050D000110108010484044020000200C0844084BF -:1050E000C00002001010C004C0000200C008080484 -:1050F0008200A00110840282C000020102020202AA -:10510000C0000000080102C108C00400A0210483FF -:10511000094002010400C0040202C00000000000B7 -:10512000000000000000000000000000000000007F -:10513000000000000000000000000000000000006F -:1051400000000000810000E000004842410000E053 -:1051500000004842000000600000484200000000DB -:10516000000048420000000000004842000000002B -:10517000000048420000000000004842000000001B -:1051800000004842000000000000000048424100CA -:1051900000E000008100000000000000410000006D -:1051A00000000000000000000000000000000000FF -:1051B00000000000000000000000000000000000EF -:1051C000000000000000BDFFF9FF7FFF1FFFF3306C -:1051D000E7247EF0F0F07E1878787FFF7000BF2023 -:1051E000FF60E724F0F03CF06666FC666666F3302C -:1051F000E7246FFF60006CFC3C3C6C6CFF003FFFE1 -:105200006FFFE4E4FF000000F03C663CF6F0B4F011 -:1052100087C3C3C317D40FF05956996683C37C3C28 -:10522000000000000000000000000000000000007E -:10523000000000000000000000000000000000006E -:10524000000000000000000024006000700010005A -:10525000FF00FF0042F0F0F03C3C3C3C4FFF4000C0 -:10526000BF209F00F0F0F0F0666666660C6666662A -:10527000FF00FF003FFF30006C0C3C3CFF00FF00D4 -:1052800030006000FF00FF0000003C3C3C3CD2F0DE -:1052900090F0783C3C3C0FF00FF099669966E3C3C0 -:1052A0001C3C0000000000000000000000000000A6 -:1052B00000000000000000000000000000000000EE -:1052C00000000000000000000000000000000000DE -:1052D00000000000000000000000000000000000CE -:1052E00000000000000000000000000000000000BE -:1052F00000000000000000000000000000000000AE -:10530000000000000000000000000000000000009D -:10531000000000000000000000000000000000008D -:10532000000000000000000000000000000000007D -:10533000000000000000000000000000000000006D -:105340000000000000000000000000000CFC06F659 -:10535000004EFF4EFFFCFFF600FF2CEF663C660F91 -:10536000FFFFFF4E3C663C0F00FF2CEF00FF363680 -:10537000FFFFC7DF666C666FFFCFFFE720E32CEF10 -:105380000F0F273F06F60CFC049D64FD000024BDB2 -:10539000069F991966E66969695A0F2BD4F0696905 -:1053A000695904DFFB20000000000000000000003D -:1053B00000000000000000000000000000000000ED -:1053C000000000000000000000000000000000FFDE -:1053D00000FF0000FFFF000C000600FF20E36666F0 -:1053E00066660000004E3C3C3C3C00FF20E300FFB2 -:1053F00000FF0000041C666C6660000C002400FFC7 -:1054000000FF0F0F270300FF00FF00FF00FF000059 -:1054100000FF00FF990166FE696969690F0FF0F0EE -:105420006969696500FFFF000000000000000000DE -:10543000000000000000000000000000000000006C -:10544000000000000000000000000000000000005C -:10545000406180058025100240618004802910028F -:1054600040618007002D100240618006002D10026F -:105470004000800000201002400080000020100248 -:1054800040618006002D10024000800000201002C4 -:10549000000040618006002D1002406180048021E0 -:1054A0001002400080000020000200000000000008 -:1054B00000000000000000000000000000000000EC -:1054C00000000000000000000000000000000000DC -:1054D0000000CF0CCF0CC3C3C3C314D71414404572 -:1054E000EAEF00000000FF3CC30000000000C3C35F -:1054F000C3C3000000000000000000000000000026 -:1055000000000000000000F000F0000000000000BB -:105510000000000000000000000000005F3F3F3F6F -:10552000AAEFBAFF00000000000000000000000029 -:10553000000000000000000000000000000000006B -:10554000000000000000000000000000000000005B -:1055500000000000CF0CCF0CFFFF0000D7D7D714FE -:105560004045EAEF00000000FF3CC30000000000DF -:10557000FF00FF000000000000000000000000002D -:10558000000000000000000000F000F0000000003B -:10559000000000000000000000000000000050308B -:1055A00030300045105500000000000000000000F1 -:1055B00000000000000000000000000000000000EB -:1055C00000000000000000000000000000000000DB -:1055D0000000000000000000000055FF55FFFF55CF -:1055E0000055AA3CAA3C000000000000000000009A -:1055F00000000000000000000000000000000000AB -:105600000000000000000000030300000000000094 -:10561000000000000000000010107C7C0000000072 -:1056200000000000A0A3ACAF0000000000000000DC -:10563000000000000000000000000000000000006A -:10564000000000000000000000000000000000005A -:1056500000000000000000000000000000AA00AAF6 -:10566000FF550055AA3CAA3C0000000000000000C5 -:10567000000000000000000000000000000000002A -:105680000000000000000000000003030000000014 -:10569000000000000000000000003410FD7C00004D -:1056A0000000A0A0E0A0A0AFA0AF0000000000009C -:1056B00000000000000000000000000000000000EA -:1056C00000000000000000000000000000000000DA -:1056D00000000000000000000000200088042041BD -:1056E0002000200020000400008020002000000096 -:1056F0002000208420882080208020002000880036 -:105700002005200004008800040001800580881026 -:105710002180200040030400C0000003000020009E -:1057200020008810200020002010200040002000D1 -:105730002000880804008800C00020008800400085 -:10574000C00002002000400020000800C00040000F -:1057500088002000200040008800040000000001B4 -:105760000000000000000000800000200000000099 -:105770000000000000040004000400040000000019 -:105780000000000800000000200000080420842021 -:105790000000042000000000200000A00000000025 -:1057A00000000000000009000000410000000400AB -:1057B00009000000000040400000400040000000E0 -:1057C00000000000200009A0000000008000200070 -:1057D00000002000400040002000000040200004A5 -:1057E0000000000000000003000000000000820034 -:1057F00000000005000000000000000000000000A4 -:105800000000000000000000000000000000000098 -:105810001000000000000000000000000000000078 -:105820000000001100000000000000000000000067 -:10583000000000000000000000000009000010054A -:10584000000000090000001000000040001000C02F -:105850000000000000000040004040000000000088 -:105860000001000000C000000000000800880008DF -:105870000088000000000000000000100008000880 -:10588000000000000010000000000040008400083C -:10589000000800000008000000840008001000401C -:1058A00000002000000000080008000000080000C0 -:1058B0000008001000040010001000000008004064 -:1058C00004000000000800400008000800850000F7 -:1058D0000010000800000000000800108010000008 -:1058E00000102021000000008400002101000008B9 -:1058F000002100080003000800000005000000006F -:10590000000300000000000800000000000000008C -:1059100000410080000000000008000000000008B6 -:1059200000000000000000004000840000030000B0 -:105930000000000800000000000000080000000057 -:105940000000900000000000000000000000900037 -:105950000000081000000000000000000000000827 -:10596000000000008082000000A0050000A00400EC -:10597000000000C0218200000000000000000000C4 -:105980000000008400000000000000000000000093 -:10599000000000C000200000000000C00000000067 -:1059A000110040000000000041081000400000000D -:1059B00000000910000000080084008200000008B8 -:1059C00000000000000800000000080000000000C7 -:1059D000000009008800000003000000000009002A -:1059E000000000000000200000800080000000C0D7 -:1059F000A041A080A00000000000080000000400FA -:105A0000000004000000000300000800040004007F -:105A100000000000000008A0090000008200A000B3 -:105A200008000000000300000000820000000800E1 -:105A300000008200000000000208001000000008C2 -:105A4000080008000800000000000800C000000076 -:105A500000000800820000000000080000000000B4 -:105A60000000820008000800808400040004000098 -:105A70000010000000100000000000000000000006 -:105A800000000000000000400000000000000000D6 -:105A900000000000000000000003040000004100BE -:105AA00000000000000008000000000000000000EE -:105AB000000000080000000000000000000000825C -:105AC00000000000000000000000000000000000D6 -:105AD00000000000000000000000000000000000C6 -:105AE000000000C000000090000020030000200023 -:105AF000000000000000000800900000000000000E -:105B00000000000800000000002100000000000369 -:105B100000008200080800000008008004800002E5 -:105B2000008000410005900000000000000000001F -:105B30000004000000000000000000000000000061 -:105B400000100003000000100010A0000000000082 -:105B50000000000000000000000000000000001035 -:105B600000000000000000000000000080000000B5 -:105B7000800800820000000000C000020010090040 -:105B80000000000000000008000000C000C000008D -:105B90000000008400C000000000000800208020F9 -:105BA000008820200000000000000000000040C02D -:105BB0000008000005A005C010000010050000C08E -:105BC0000010000100840000000000000000000040 -:105BD000000000000000000000000000000000883D -:105BE00000000000000000000000000000000004B1 -:105BF00020002004200420A10000000000008200FA -:105C00000000002100000000000000000000000370 -:105C10000000000000080000000000000008C000B4 -:105C20000000000001000000000000000000000073 -:105C30000000004000000000000000000000000321 -:105C40000000000000000800000000100000000834 -:105C500000000000000000000000000000000080C4 -:105C60000000000000000000000000000000000034 -:105C700000408040804080010020000000000000C3 -:105C80000000000000901100000000000000000073 -:105C900000000000000000000000000000000008FC -:105CA00009100008000004000000000000080000C7 -:105CB00000000000000000000000000000000000E4 -:105CC0000008020405000000002000000040200041 -:105CD00002040000000000000000000000000000BE -:105CE00000100000000000000000000000000000A4 -:105CF00000000000000001000000000000000000A3 -:105D00000000000000000000000000000000010092 -:105D10000000000000000000000000000000000083 -:105D20000000C010000900A10811000000000000E0 -:105D300000000000000000000000008400000000DF -:105D40000000000000000000000000000000000053 -:105D50000000000000000000000000000000000043 -:105D60000000000000000000000000000000000033 -:105D7000000000000000000004000000000000001F -:105D80000000000000000000000000000000000013 -:105D900005000000000000000000000000000000FE -:105DA0000000000000800003008800C040000021C7 -:105DB00000000000000200000000000000090000D8 -:105DC00000000000000000000000000000000000D3 -:105DD00000000000000000000000000000000000C3 -:105DE00000000000000000000000000000000000B3 -:105DF0000000000000000002000000400000000061 -:105E0000000000000000000000000000000000058D -:105E10000000004000000000000000000000000042 -:105E200000000000000000000011808000800000E1 -:105E30008002000000800000000200000000000856 -:105E40000000000000000000000000000000000052 -:105E50000000000000000000000000000000000042 -:105E600000000000000080000000000000000000B2 -:105E7000000000000000000400000000000000001E -:105E800000000020000000200000000000000000D2 -:105E9000000000000000008400000000000000007E -:105EA000000000000000000088001001A0840090A5 -:105EB000000082010000002000000000000000003F -:105EC00000010000000000000000000000000000D1 -:105ED00000000000000000000000000000000000C2 -:105EE00000000000000000001000000000000000A2 -:105EF000000000040000000000000000020000009C -:105F00000000000200010008008500000000000001 -:105F10000000000040000000000000000000000041 -:105F200000000000000000000000109001100002BE -:105F300002900100000100200000000000000000AD -:105F400084000000000000000000000000000000CD -:105F50000000000000000000000000000000000041 -:105F60000000000000000000000000000000000031 -:105F70000000000000000000000000000000000021 -:105F8000000010000084002000800040000000009D -:105F900000000000000000000000400000000000C1 -:105FA00000000000000000000000000000800380EE -:105FB0000380830004000005008000000000410011 -:105FC0000000800010000000000000000000000041 -:105FD00000000000000000000000000000000000C1 -:105FE00000000000000000000000000000000000B1 -:105FF0000000000000000000000000000000000998 -:106000000000000000800002000580000000000089 -:106010000000000000000009000000000000000077 -:1060200000000000000000000000000000008000F0 -:1060300000008000008000028000000000000000DE -:106040000000000000000000000000000000000050 -:106050000000000000000000000000000000000040 -:106060000000000000000000000000000000000030 -:1060700000000000000000000400100240000300C7 -:106080000000000000000010100000010200840069 -:106090000000000000000000000000000000000000 -:1060A00000000000000000000000000000000000F0 -:1060B0009000200002A0C02000012000000000008D -:1060C00000000000000000000000000000000000D0 -:1060D00000000000000000000000000000000000C0 -:1060E00000000000000000000000000000000000B0 -:1060F000000000000000000000000000010001009E -:106100000100810000E000000000008100000700A5 -:1061100000000000000000000000810000E000001E -:10612000000000000000000000000000000000006F -:1061300000000082000007000000000000000000D6 -:1061400000000000000000500700480000000000B0 -:10615000000000000000000000000000000000003F -:10616000000000000000000000000000000000002F -:10617000000000000000000000000000000000001F -:10618000000000000000000000000000C0C0FCFC97 -:106190003C3C00FF00000000000000000000000088 -:1061A00000000000000000000000000000000000EF -:1061B000000000000020F0F01C00140000000000AF -:1061C00000000000000000000000000000000000CF -:1061D00000000000000000000000000000000000BF -:1061E00000000000000000000000000000000000AF -:1061F000000000000000000000000000000000009F -:106200000000000000000000000000000000C0C00E -:10621000FCFC3C3C00FF000000000000000000000F -:10622000000000000000000000000000000000006E -:106230000000000000000000F0F014001400000056 -:10624000000000000000000000000000000000004E -:10625000000000000000000000000000000000003E -:10626000000000000000000000000000000000002E -:10627000000000000000000000000000000000001E -:10628000000000000000000000000000000000000E -:1062900000000000000000000000000000000000FE -:1062A00000000000000000000000000000000000EE -:1062B0000000000000000000FFFF7F3FFF0FFF0F06 -:1062C00000000000000000000000000000000000CE -:1062D00000000000000000000000000000000000BE -:1062E00000000000000000000000000000000000AE -:1062F0000000000000000000FFFF000000000000A0 -:10630000000000000000000000000000000000008D -:10631000000000000000000000000000000000007D -:10632000000000000000000000000000000000006D -:1063300000000000000000000000FFFF5F0FFFCF23 -:10634000FFCF00000000000000000000000000007F -:10635000000000000000000000000000000000003D -:10636000000000000000000000000000000000002D -:1063700000000000000000000000FFFF000000001F -:1063800000000000000000000000000000610007A5 -:10639000800D000000610A2E000D00A0000000002A -:1063A0000000000000610007800D000000000000F8 -:1063B0000000000000000000000000000061002656 -:1063C000000D0000000000000000000000000000C0 -:1063D00000000000000000000000000000000000BD -:1063E00000000000000000000000000000000000AD -:1063F000000000000000000000000000000100009C -:1064000000000000000000610006000D0000000018 -:10641000000000000000000000003F3F03030000F8 -:10642000000000000000000000000000000000006C -:10643000000000000000000000000000000000005C -:10644000000000000000000000000000000000004C -:10645000000000000000000000000000000000003C -:10646000000000000000000000000000000000002C -:10647000000000000000000000000000000000001C -:10648000000000000000000000000000000000000C -:106490000000000000000000000000003F3F030378 -:1064A00000000000000000000000000000000000EC -:1064B00000000000000000000000000000000000DC -:1064C00000000000000000000000000000000000CC -:1064D00000000000000000000000000000000000BC -:1064E00000000000000000000000000000000000AC -:1064F000000000000000000000000000000000009C -:10650000000000000000000000000000400000004B -:10651000000000000000000000000000000000007B -:10652000000000000000000000000000000000006B -:10653000000000000000000000000000000000005B -:1065400000001CAF1CAF00000000000000000000B5 -:10655000000000000000000000000000000000003B -:10656000000000000000000000000000000000002B -:10657000000000000000000000000000000000001B -:10658000000000000000000000000000000000000B -:1065900000000000000000000000000000000000FB -:1065A00000000000000000000000000000000000EB -:1065B00000000000000000000000000000000000DB -:1065C0000000000008AF08AF00000000000000005D -:1065D00000000000000000000000000000000000BB -:1065E00000000000000000000000000000000000AB -:1065F000000000000000000000000000000000009B -:10660000000000000000000000000000000000008A -:10661000000000000000000000000000000000007A -:10662000000000000000000000000000000000006A -:106630000000000001430000000000000000000016 -:10664000000000000000000000000000000000004A -:10665000000000000000000000000000000000003A -:10666000CC84010105000986021A13A45E00100003 -:1066700010144400C040888002000004040000148C -:1066800008000000000000000400400000000000BE -:10669000000000000000000020002000200000009A -:1066A000200020002000200000002000200020000A -:1066B00000002000000010002002200020008800C0 -:1066C0008800880088000000000020002000C10031 -:1066D000040000000400200000032000200020002F -:1066E00084001000C00020002000100020002020A6 -:1066F0002000880008100000400088002000C00032 -:106700002000400000104000400000000000040095 -:10671000C00010002000A0004000000000000000A9 -:106720000000000000000000000000000002000067 -:106730000000000000000000200000000000000039 -:106740000000000000000000000000000000000049 -:1067500040008000200080000000000009000000D0 -:106760000000200000002000000080000000000069 -:10677000000141000000900000A000002000000087 -:106780002000002000A004002000202000002000A5 -:106790002020212040001000100010000000000008 -:1067A00000000000000000000000000002000000E7 -:1067B00002000200000000000000000000000000D5 -:1067C00000000000000000000000000010000000B9 -:1067D0000000000000004008000001000000A000D0 -:1067E00000030005000500000004000088050010FB -:1067F00000000910000000100080000000000800E8 -:1068000000000000000008400800004000000200F6 -:106810000000001010000000901000400040000830 -:106820000000000000000000000000000000000860 -:106830000000000800000000000000000000000848 -:106840000000000000000000000000000000001038 -:10685000000000400008000080000000040000006C -:10686000008800000000008400000000000000001C -:1068700000090000040000080408101000002008AF -:106880000000000000840000000000100000000074 -:10689000008800100088004000080082000000040A -:1068A000A000000000000000000000000005000043 -:1068B00000000000000000000000000000000000D8 -:1068C00000000000000000000000000000000000C8 -:1068D00000000000000000000000000000000000B8 -:1068E00000000105000090020000000001200000EF -:1068F0000080002100000108000500100040081180 -:10690000000500080008000000210004000000004D -:106910000005000000000021000800000021000028 -:10692000000800002100000021000000000000001D -:1069300000840008000000000000000000000000CB -:106940000000000000000000000000000000020045 -:1069500000000000000000000800000200000088A5 -:106960001100000008000084090009000000040173 -:10697000000000040000000004000000000100010D -:10698000880000000000000000000000030000007C -:1069900000000000000000000000000000000000F7 -:1069A000100000000000000000000000000088004F -:1069B00000000000080000000000A00008008200A5 -:1069C000080000008200000000000000081108001C -:1069D00008000800822101020004010000004008B4 -:1069E000000040030000C000000000000002090099 -:1069F000208500002104821000000005000008002E -:106A00008204881102000000000000000000000065 -:106A100008000005820000000000000008000000DF -:106A200082000000820000000000209002000200AE -:106A300000002000000000000040008800C00000AE -:106A400000000000000000000000000000000084C2 -:106A50000000000000000000049111040400000088 -:106A6000400020000000000000000000000000A125 -:106A70000400802000C0A083008900080000008876 -:106A80000940030411042000000000002100000060 -:106A9000009000080000000000000000004000001E -:106AA00000000000000000000000000000000000E6 -:106AB00000000000000000000000000000000000D6 -:106AC00000000000000000000000000000000000C6 -:106AD000000000000000000020000400000004008E -:106AE00000020402000200080000002190002008BB -:106AF00000800002820000008204000800000020E4 -:106B0000000508002000000000A1000000000000B7 -:106B1000C0000000828000000000000000000000B3 -:106B20000000000000000000000000000000000065 -:106B30000000000000000000000005000000000050 -:106B40000000000000000000000000000000000045 -:106B5000000000C0000000000000000080000510E0 -:106B6000809000008000008800000000000000000D -:106B700000000010000104000000000100000000FF -:106B80000001000080000000000000100000000074 -:106B900000000000000010200000000000000020A5 -:106BA0000000000000000300000008000041001188 -:106BB000004100040000000000008200000000000E -:106BC00000080008000000000000000000000000B5 -:106BD0000000000000000000000000000103008031 -:106BE0000100010000000000000500030000000596 -:106BF00000008421000001110104010001000021B6 -:106C0000008500050005000000082011004000007C -:106C1000000000000008000000000000000000006C -:106C2000000000080021000000000000000000003B -:106C30000000000000902010000000400000000054 -:106C400000000000009000000000020000000000B2 -:106C50000000000000080090000000000000040098 -:106C600020200488048800080002000000000000C2 -:106C700000000000000005A004A02009040004009A -:106C800000000010008400840200110000002000B9 -:106C900041000000000000000900030000000000A7 -:106CA00000000000000000000000000000000000E4 -:106CB00000000000000000000000000000000000D4 -:106CC00000000000000000000000000000000000C4 -:106CD00000000000000000000000000000000000B4 -:106CE0001010114082C00088000000000000000168 -:106CF0000000000000001000000000089020900438 -:106D00008882002001201088A0080002004000882E -:106D10000040000000000000000000A00002000889 -:106D20000040000000000000000000000000000023 -:106D30000000000000000000000000000000000053 -:106D40000000000000000000000000000000000043 -:106D50000000000000000000000000000000000033 -:106D600000001000108080000000090000100010DA -:106D70000010000000000000800000000080910270 -:106D80000089008003000380008080000000000074 -:106D900000800000000000000000000000800000F3 -:106DA0000080000000000000000000000000000063 -:106DB00000000000000000000000000000000000D3 -:106DC00000000000000000000000000000000000C3 -:106DD00000000000000000000000000000000000B3 -:106DE00000000000000080210091808200800000EF -:106DF00000020003000000000010000000000080FE -:106E000089008000048980008000000000000000EC -:106E100000408000000000000000000000000000B2 -:106E200000000080000000000000000000000000E2 -:106E30000000000000000000000000000000000052 -:106E40000000000000000000000000000000000042 -:106E50000000000000000000000000000000000032 -:106E60000000000000001088820000081090004020 -:106E70000040000000400000000000010010000081 -:106E800088020200848803900200080002000020AB -:106E90008800C001A0A088000000000000000000E1 -:106EA00000000000000200000000000000000000E0 -:106EB00000000000000000000000000000000000D2 -:106EC00000000000000000000000000000000000C2 -:106ED00000000000000000000000000000000000B2 -:106EE0000000000000000000004100119091020825 -:106EF0000000000040000100000000000000000051 -:106F000000009041002190050003C0100020008582 -:106F100000A040000084C084A084000000000000A5 -:106F200000008800000000000200000000000000D7 -:106F30000000000000000000000000000000000051 -:106F40000000000000000000000000000000000041 -:106F50000000000000000000000000000000000031 -:106F60000000000000000000000000900088801079 -:106F70008090400003000300400000000011000961 -:106F80000000000200A10011A0A1001100110003E7 -:106F900000850290800000000000800000000000DA -:106FA0000000000000000000000080000000000061 -:106FB00000000000000000000000000000000000D1 -:106FC00000000000000000000000000000000000C1 -:106FD00000000000000000000000000000000000B1 -:106FE0000000000000000000000000008802908007 -:106FF00008001100102111034100080000000000EA -:10700000000000000000214091009080110000006D -:1070100080008000000000200000008000000000D0 -:107020000000000000000040000000000000000020 -:107030000000000000000000000000000000000050 -:107040000000000000000000000000000000000040 -:107050000000000000000000000000000000000030 -:10706000000000000000000000000000000091008F -:107070001110891000000001000100000100000053 -:1070800010009000100090002101110005049100F3 -:10709000000002C090A00000A00184A088409000E1 -:1070A0000000000000000000080140002000020075 -:1070B00000000000000000000000000000000000D0 -:1070C00000000000000000000000000000000000C0 -:1070D00000000000000000000000000000000000B0 -:1070E00000000000000000000000000000000000A0 -:1070F00000810000070000000041000007000000C0 -:1071000000000000000000000000818100E0070096 -:1071100000000082000007000000000000000000E6 -:1071200000000000000000000000008100000700D7 -:10713000000000000000000000000000000000004F -:10714000000000000000000000000000000000003F -:10715000000000000000000000000000000000002F -:10716000000000000000000000000000000000001F -:10717000000066FF6600FD649D0400000000000042 -:10718000000000000000000000000000F606363697 -:10719000FCFF0CFFF000F000C300F3F00000000063 -:1071A000F0000000000000000000000003030343A3 -:1071B00000000000000000000000000000000000CF -:1071C00000000000000000000000000000000000BF -:1071D00000000000000000000000000000000000AF -:1071E000000000000000000000000000000000009F -:1071F00000000000F0F0F0F0FD649D0400000000CD -:107200000000000000000000000100000000F60681 -:107210003636FC000C00F000F0000000000000001A -:107220000001F00000000000000000000000030367 -:107230000343000000000000000000000000000008 -:10724000000000000000000000000000000000003E -:10725000000000000000000000000000000000002E -:10726000000000000000000000000000000000001E -:10727000000000000000000000000000000000000E -:1072800000000000000000000000000000000000FE -:1072900000000000000000000000000000000000EE -:1072A00000000000000000000000000000000000DE -:1072B00000000000000000000000000000000000CE -:1072C00000000000000000000000000000000000BE -:1072D00000000000000000000000000000000000AE -:1072E000000000000000000000000000000000009E -:1072F00000000000000000003C3C660FCBCBEFEF2D -:10730000000000000000000000000000000000007D -:107310000000FCF0FCFF00C33CFF000C0000260056 -:1073200026003C003C0000000004000000000000BB -:107330000000CFC34F430000000000000000000029 -:10734000000000000000000000000000000000003D -:10735000000000000000000000000000000000002D -:10736000000000000000000000000000000000001D -:10737000000000000000000000003C3C660F080810 -:107380002C2C0000000000000000000000000000A5 -:10739000000000000C000C0F0F0F0F0F000000008A -:1073A0006666666610003C000000000000000000F9 -:1073B00000000000EFE36F63000000000000000029 -:1073C00000000000000000000000000000000000BD -:1073D00000000000000000000000000000000000AD -:1073E000000000000000000000000000000000009D -:1073F0000000000000000000000000000061002606 -:10740000000D000005610A2E050D00A000000061BE -:107410000006000D0000006100248009000080616A -:107420000026000D000080000000000000010000A8 -:10743000000000000000000000200000000000002C -:10744000000000000000000000000000000000003C -:10745000000000000000000000000000000000002C -:10746000000000000000000000000000000000001C -:10747000000000000000000000000000000000000C -:107480000000FFFFFFFF000F0A0A000000000000DD -:107490000000000007070303A000A000AAAFAFAFE1 -:1074A00000000000FF0A78FF00000000000000005C -:1074B00000000000000000000000000000000000CC -:1074C00000000000000000000000000000000000BC -:1074D00000000000000000000000000000000000AC -:1074E000000000000000000000000000000000009C -:1074F000000000000000000000000000000000008C -:1075000000000080FEFFFFFF0303030300000000F4 -:1075100000000000000007070303FF00FF3CAAAFC4 -:10752000AEAE00000000FF5F78FF0000000000002A -:10753000000000000000000000000000000000004B -:10754000000000000000000000000000000000003B -:10755000000000000000000000000000000000002B -:10756000000000000000000000000000000000001B -:10757000000000000000000000000000000000000B -:1075800000000000000000000000F0AAF0AA0000C7 -:1075900000000000000000000000000000000000EB -:1075A00000000F0F000000000000000000000000BD -:1075B00000000000000000000000000000000000CB -:1075C00000000000000000000000000000000000BB -:1075D00000000000000000000000000000000000AB -:1075E000000000000000000000000000000000009B -:1075F000000000000000000000000000000000008B -:10760000000000000000000000000000C3C3C3C36E -:1076100000000000000000000000000000000FFF5C -:107620000FFF00000F0F000000000000000000002E -:10763000000000000000000000000000000000004A -:10764000000000000000000000000000000000003A -:1076500000000000000020000000000020000002E8 -:10766000200020002000000020002000000000007A -:1076700000000000000020000400000020000003C3 -:107680002000200020004000C0002100C000400079 -:10769000C1004000000000032100200000000000A5 -:1076A000C10021802100210004008800200020006A -:1076B0000000000020000000200084080000880076 -:1076C0002000000088004000200020000000100082 -:1076D00000000000400088000000000000000000E2 -:1076E0000001000000000000000000000000000099 -:1076F000000000000000000000008000000000000A -:107700000000A000000080008000000002000000D7 -:107710008000020080000000000002000000000065 -:1077200000000200404002000200000020000000B3 -:107730000000000020000000000000002000000009 -:107740004100400020000002200000000000200056 -:107750002000000000000900402004400400040054 -:10776000040041000500040004000400040000209F -:107770000400020000000000000000000000000003 -:107780000000000090000000000010000000000059 -:10779000000000000000000001880000000000025E -:1077A00010000000000001000000900000890004AB -:1077B00020090004000000000840000084040000CC -:1077C00010A1A01000001000000010001010100008 -:1077D000100400400210A010021000008000800081 -:1077E000800080408408A08880848200800080001F -:1077F00000018000000800000000000800000000F8 -:107800000000000000080000004000000000000030 -:10781000000000000008000000004002000000001E -:1078200000011100000000404000000800000004BA -:107830000001800400010040004000000010000131 -:107840000000000400080010004000880000000054 -:1078500000100084008400000000000000400000D0 -:107860000000001000000100000000000000000007 -:1078700000000000000000000000002100000000E7 -:1078800000000000000000000000010800000000EF -:1078900040000000401100C00008018282C00000CA -:1078A00020040000028402040088008000800000A0 -:1078B000002100080008001000000000000000087F -:1078C00000C100410009002100000008000000087C -:1078D000000000080008000800000021000000006F -:1078E0000000000000000000400000000000000058 -:1078F0000000000000000000000000000000000088 -:10790000000000000000000000000000040008006B -:1079100000008000000080820041000040412041C2 -:107920000000808911A08241800103402140004075 -:1079300003000000000000000000008400A0100010 -:1079400000A0002000000000030000000000000074 -:107950002100000000000000000000000000000006 -:107960000000000000000000000000000000000017 -:10797000000000000000000000000000A000000067 -:107980000000000000000000000004208220002011 -:1079900004210209080900400009A000000000803D -:1079A0002000000088218221002100000040000208 -:1079B000C005000088000000000040000809000029 -:1079C00082000000000000040000000482000000AB -:1079D0000802040000000000000000000000000099 -:1079E0000000000000000000000000000000000097 -:1079F0000000000000000000000000000000000087 -:107A0000000000000004000000000082800100016E -:107A100000018000808200000001000021A0000021 -:107A2000400280C0000000A00000000000080085A7 -:107A30000089000003C00804000409C02008118860 -:107A400000000000110040000001000040010000A3 -:107A50000000000005000000000000000000000021 -:107A60000000000000000000000000000000000214 -:107A700020000008000000000000000000000000DE -:107A800000000000000000000400000000000000F2 -:107A90000400040200000180A105000041910002E1 -:107AA0009000410283890000014021400184084187 -:107AB000008201080080014000000000000000007A -:107AC000000000100000000000000000000800009E -:107AD000000000210000000800000000000000007D -:107AE000000000000800000000000000000000008E -:107AF0000001800000000000000000000000000005 -:107B000000000000000000000000800000000000F5 -:107B100000A0800080000000024002840084024037 -:107B20000084000082012002000002890283020515 -:107B30000000004140000940020100C00000008236 -:107B40002100000000000200000200000000000010 -:107B50002100000000900000000000000000000074 -:107B60000000000000000000000000000000000015 -:107B70000200400000000002401100000205000069 -:107B8000000000000009000000000000008000006C -:107B9000000000000480000001002009C01000085F -:107BA0000003000040404040200400000003C002E9 -:107BB000000000A1900001100009901000020010C8 -:107BC0000005001190000010000990000003000063 -:107BD0000000100000000000000000000000000095 -:107BE0000000000082000000000000000000000013 -:107BF0000000000080000000000000000000000005 -:107C00000000000000000000000000000000002054 -:107C1000000000000084800400002000000000003C -:107C20000000000000008009800100C10000000089 -:107C300040C041840004000040000000000000003B -:107C4000000000000000000000100800000040C01C -:107C500000000002000000000000400211000000CF -:107C60000000000000000000000000000000000014 -:107C700000000000000000000801000100000000FA -:107C8000000000000000000000000000000000A054 -:107C9000000000100002010320030011100900C1C0 -:107CA0000100C00000A102C00400C00000000001EB -:107CB0004101408800400000000000010000000277 -:107CC0000404910402000082000000000000000093 -:107CD0008240918388010041000000000000000004 -:107CE0000000000000000000000000000000000094 -:107CF00000000000000000000011801000030004DC -:107D00000000000000000000000000000000000073 -:107D100000800000000000000808A108000880881A -:107D200000C020030002002180809100001100119A -:107D300000009108830300C1000500000040000915 -:107D40000009848583020002000200000000000098 -:107D50000000400083020008002000000000000036 -:107D60000000000000000000000000000000000013 -:107D70000000000000000000008000808000000083 -:107D800080000000000000000080000000000000F3 -:107D900000000000000400000000100088000940FE -:107DA0009003000000002000800905000900020087 -:107DB000A1C10000090008C1101183880000000063 -:107DC00000000080858000400280028300000000E7 -:107DD00000000000118002218402088300000000DE -:107DE0000000000000000000000000000000000093 -:107DF00000000000000000C000000008001008841F -:107E0000040004A0000000C0000000040000000006 -:107E10000000000000000000000000000002090057 -:107E2000041190010084A0000100C00000020000C5 -:107E300001000983000001400121000109C100A0E7 -:107E400000040000C0C00404C00100408291000092 -:107E5000000000000000104001004082019100007D -:107E60000000000000000000000000000000000012 -:107E700000000000000001000000040000000100FC -:107E80000100040001000100000082000000000069 -:107E9000000000000000C0000000000002000040E0 -:107EA0000011900503080000000009C100C1400056 -:107EB0000000010101C10000010100018310010166 -:107EC0000000010440409000C0C000009005008206 -:107ED000000000000000000004400082900000410B -:107EE0000000000000000000000000000000000092 -:107EF00000000000000000004100000080000000C1 -:107F00000400400002002100020000000000000008 -:107F100000000000000000000000000000008000E1 -:107F2000009100039021919000412105082100A0BB -:107F30000005000021020391000041080009208291 -:107F40001111090008008080000000050002C1082E -:107F50000000000000000000000080000404910206 -:107F6000000300000000000000000000000000000E -:107F700000000000000000000000000000110000F0 -:107F80000000212100210500030000050021000060 -:107F900000000000000000000000000400000000DD -:107FA0008000A111910000001008210211000000C2 -:107FB0004040A14002C021001103000021828580C1 -:107FC0000500030021209000000040008891020875 -:107FD0000280000300000000000000000084040292 -:107FE0000800200000000000000000000000000069 -:107FF0000000000000000000000000000000000081 -:1080000000000000010100C001400000000000006D -:10801000000000000000000000000000100110003F -:1080200010001000090121100202020101000000ED -:1080300008000100C11001050100820000000102DA -:10804000088200000000010109A0A0000000054115 -:108050000001000882010000000000000000004054 -:108060008283414001000000000000000000000089 -:108070000000000000000000000000000000000000 -:108080000000060042000000006006000000000042 -:108090000000060000000000000000000000008159 -:1080A000000007000000821100E00700000000004F -:1080B000000000000000810000E000000006000059 -:1080C000810000E000006021000000000000000AC4 -:1080D000484200E00700000000000000000000002F -:1080E000818100E0070000000000000000000000A7 -:1080F0000000000000000000000000000000000080 -:10810000000000000000000000000000000000006F -:10811000000000000000000000000000000000005F -:10812000FFFFFFF0000000000C5CACFCFFFF0CFC4C -:108130000F0F0F0FFFFFFF00FFFFC3C3FFFF5555DA -:10814000000000FF00FF55AA55AA0FF00FF00FF036 -:108150000FF00000000000000041000000000000DF -:10816000000000000000000002020000000000000B -:1081700000000000000000000000000000000000FF -:1081800000000000000000000000000000000000EF -:1081900000000000000000000000000000000000DF -:1081A0000000C3C3C3C0000000000C5CACFC0000B6 -:1081B0000CFC0F0F0F0FFFFFFF00FFFFC3C3FFFFFC -:1081C00055550000FF00FF0055AA55AA0FF00FF00B -:1081D0000FF00FF028280000000000410000000010 -:1081E00000000000A000A00000000202000000004B -:1081F000000000000000000000000000000000007F -:10820000000000000000000000000000000000006E -:108210000050050000000000000000000000000009 -:10822000000000005555555500000000DFD31C101C -:10823000FFAA5500C3C3FFFFF0F0FFFF0000FFFFE0 -:108240005555AAAA00000FF00FF05555AAAA969608 -:1082500096965555AAAA00000000C0C00000000074 -:108260000000000000000000003C00280028000082 -:1082700000000000000000000000000000000000FE -:1082800000000000000000000000000000000000EE -:10829000000000500000000000000000000000008E -:1082A0000000000000007F7F000000000000DFD31E -:1082B0001C100F0F0F0FC3C3FFFFF0F0FFFFFFFFF6 -:1082C000FFFF5555AAAA00000FF00FF05555AAAAB6 -:1082D000969696965555AAAA00003C00000000000C -:1082E000000000000000000000000000000000008E -:1082F000000000000000000000000000000000007E -:10830000000000000000000005000A08050000A0B1 -:1083100005610A0C050D00A005000A08050000A073 -:10832000000000000000000000000020000000002D -:10833000006100248009000040638006002D920245 -:1083400040E38006802D9002000040618002802181 -:10835000100240618006002D0802006100208001AB -:10836000000000000000000000000061002080010B -:1083700000000000000000000000000000000000FD -:1083800000000000000000000000000000000000ED -:108390000000FFFF3838000000000000000000006F -:1083A00000000000000000000000000000000000CD -:1083B00000003C00FFC3FF00F0F082AA82AA000088 -:1083C0000000F0F0000000000041000000002C0060 -:1083D000003CC3FF0014000000000000FF5FF050ED -:1083E00054FE54FE0000000000000000F535F53595 -:1083F00050FA55FF000000000000000000000000DF -:10840000000000000000000000000000000000006C -:1084100000000000FFFF38380000000000000000EE -:10842000000000000000000000000000000000004C -:1084300000000000BE00FFC3FFC0F0F0002882AAC9 -:1084400000010000F0FF000200000000000000003A -:10845000AF83F0F0F0F000140000000000000F0FF8 -:10846000000000AA00AA00000000000000000505AE -:10847000050500AA00AA000000000000000000009E -:1084800000000000000000000000000000000000EC -:10849000000000000000004000000000000000009C -:1084A00000000000000000000000000000000000CC -:1084B000000000000000C0F0F0F0DFDFDF0000008F -:1084C000DFC35500550000000000FFBF00000000A2 -:1084D000FF3C0F3C00F00FFF2000200000000000D8 -:1084E000FCFCFC0C3CFFAAAA0000000000000000FD -:1084F0003F1F3F1FF0FF3C3C000000000000000059 -:10850000000000000000000000000000000000006B -:10851000000000000000000000000000000000005B -:10852000000000000000000000000000000000004B -:108530000000000000000000C3FFFFFFDFDFDF00DE -:108540000000FFC355005500C0C0C0C0FFFF0000C1 -:108550000000003C0F3C3C3C3C3C20002000000064 -:1085600000000C0C0C0C0000AAAA00000000000087 -:1085700000003010301000003C3C00000000000003 -:1085800000000000000000000000000000000000EB -:1085900000000000000000000000000000000000DB -:1085A000000000002000000000002000200000006B -:1085B0000000020002000200020000004000000073 -:1085C0002000100020000000000020000410100017 -:1085D0000400000384002000200020000000880028 -:1085E000000020001000200000000000400088046F -:1085F000100000004000200020002000000040008B -:10860000400000000000200010000000200040009A -:108610000000000000000000000000020000000058 -:108620000000000000020000000000000000000048 -:108630000000000080028002800080000000000234 -:108640000000800000000002000000000000800028 -:10865000000080000000000000000000000000009A -:1086600000000000042000000000000000002000C6 -:108670002021400040000000000000000000100029 -:108680000000102004200000100000000000400046 -:1086900010200000000000000000000000000000AA -:1086A00000000000000002000200020002000000C2 -:1086B00000000000000000000000000000000000BA -:1086C00000000000000000040000000000000000A6 -:1086D0000000000000000000000001100040000049 -:1086E0000000000000000000004000000041000009 -:1086F000084000000010200088000000100000006A -:1087000004400840824008400200100000001010A1 -:10871000020008000000000000000000000000004F -:108720000000000000000000000800000000000041 -:108730000000000000080000000000000000000031 -:1087400000000000000000000089000000000000A0 -:1087500000002000000800000000000008010001E7 -:1087600000001108110000080284008900000000C8 -:1087700000000001000000848000000800000010DC -:108780000000000900090085000900000008001031 -:108790000008008400880084000800000000000039 -:1087A00000000000000000000000000000000000C9 -:1087B00000000000000000000000000000000000B9 -:1087C00000000082001000210000000000000000F6 -:1087D0000010000000040002004100000000001032 -:1087E0000000000200000008002100080000000056 -:1087F0000008200000000008000800080000000039 -:1088000000080100000084000010000000210000AA -:108810000008A00000110000100800000000000087 -:108820000000000000000000000000000000000048 -:108830000000000000000000000000000000000038 -:10884000000000000003031000880302008221A042 -:108850000082001000000001000000000000101065 -:10886000000100080001001000A00000000000004E -:108870000000000080000000000000000800000070 -:108880000000000020840000000000000000000044 -:1088900000000000000000000000000000000000D8 -:1088A00000000000000000000000000000000000C8 -:1088B00000000000000000000400000004000000B0 -:1088C0000000000000004004020002000000A008B8 -:1088D0000010004100C00000108000800010000067 -:1088E0009000000040080000000008210000000087 -:1088F000820000800080008000002009009100823A -:108900000180018000800085000000000040000020 -:1089100000000000000000000000840000000000D3 -:108920000000000000000000000000000000000047 -:108930000000000000000000000080000000800037 -:108940000000000000000000A0088000800000007F -:10895000000000A000C0000500000020000400820C -:10896000000008840000000000000000000000007B -:108970002000030000400040004000084104004087 -:1089800021402040204021400940000000200000FC -:1089900000000000000000000002000000080000CD -:1089A00000100000000000000000000000000000B7 -:1089B00000000000000000000000000004000000B3 -:1089C0000000004000400000002120800000000066 -:1089D000200000000003204000100084042100005B -:1089E00000200000000500800002000900000000D7 -:1089F00000000000000000008200000000000000F5 -:108A0000000000000004000400040000000000401A -:108A1000000000110000000000000000000008003D -:108A20000000000000000000000000000300000043 -:108A300000000000000000000000000000008000B6 -:108A40000000000000000000000000000002001014 -:108A5000004080A000000000800000A00005801001 -:108A60000000200100000000001000100084000041 -:108A7000030021C000000000000800A00008000062 -:108A800000000000000000010001000100080000DB -:108A900008000000000000000000000000000000CE -:108AA00000000000000000000000000000000000C6 -:108AB00000000000000000000000000000000000B6 -:108AC00000000000000000000000000000000200A4 -:108AD000200000080208000000050003A0050000B7 -:108AE00000040000000400000008000088210000CD -:108AF00000090004000000412000000000004000C8 -:108B00000000110520000000000000110084400456 -:108B10000000000090001040000000000000000075 -:108B20000000000000000000000000000000000045 -:108B30000000000000000000000000000000000035 -:108B40000000000000000000000000000000000025 -:108B5000800089000000800000002000201000003C -:108B600000820000009020010000000000000000D2 -:108B700020000000000000002000000000000000B5 -:108B800000000000020009000000080000000405C9 -:108B9000400140A00388110840400000000021006F -:108BA00000000000000000000000000000000000C5 -:108BB00000000000000000000000000000000000B5 -:108BC000000088A000020002100000C000000000A9 -:108BD00000000041000002001040000011001002DF -:108BE000000000A1858510008210000000820108AD -:108BF000C0820004000000000000000000C000006F -:108C00000000000000C00100880000100089100171 -:108C100090010001008800400000000000000000FA -:108C20000000000000000000000000000000000044 -:108C30000000000000000000000000000000000034 -:108C400000000000008000000000800000800000A4 -:108C50000000000000880010000200002020834176 -:108C6000008000104091080880098000000000008A -:108C700020800000000000000000000000000080D4 -:108C800000000000000000801000000000800011C3 -:108C90008508001000100000000000000000000027 -:108CA00000000000000000000000000000000000C4 -:108CB00000000000000000000000000000000000B4 -:108CC00000000000000000008002808080000000A2 -:108CD000800000000080100089C009020090090097 -:108CE00010A1100980884100902191910880000016 -:108CF0000000000400000000000000000000000070 -:108D000000000000000080001080A000020002852A -:108D10001100A000084080A000000000000000003A -:108D20000000000000000000000000000000000043 -:108D30000000000000000000000000000000000033 -:108D4000000000000000000000001000A0109000D3 -:108D50000000820000000008018882400000000935 -:108D6000019001C00001820304908200A083119051 -:108D700000000000000000200000000000000000D3 -:108D80000000000000000000C0000104830001009A -:108D9000010800001088010108820000008800001E -:108DA00082880000000000000000000000000000B9 -:108DB00000000000000000000000000000000000B3 -:108DC000000000000000000000001002000200008F -:108DD000020488000000000800C00000000011C16B -:108DE00000010088004121008200C040000200080C -:108DF00002030000A00100000000000100000000CC -:108E00000000000088010088000000C1000000018F -:108E1000000901C082000001848400A100000088D4 -:108E2000820000C000000000000000000000000000 -:108E30000000000000000000000000000000000032 -:108E400000000000000000000000000080000000A2 -:108E50000000800000000000008000800411100964 -:108E6000082100112010108985009010030911407D -:108E7000400080110000004000040041004000005C -:108E80000000000000000010000000000091000839 -:108E9000000300A11190100000088291101102003F -:108EA0000000800000000000000000000000000042 -:108EB00000000000000000000000000000000000B2 -:108EC000000000000000000000000000000000049E -:108ED00000000000000000000000000000002184ED -:108EE00011008900081100849011038010100804FB -:108EF0001108080085400000000480048000000084 -:108F00000000000000000000000000000000000061 -:108F10008203911141004003200008110800032042 -:108F200000000008000080000000000000000000B9 -:108F30000000000000000000000000000000000031 -:108F40000000000000000000000000000000000021 -:108F500010000202000204000000000088C00000AF -:108F600001A101A010000100004104010102000064 -:108F700001000384030082000000A000A000820022 -:108F8000C000000000000000000000000000008899 -:108F90008800C18811010084000110020101010054 -:108FA000C100020000010088040000000000000071 -:108FB00000000000000000000000000000000000B1 -:108FC00000000000000000000000000000000000A1 -:108FD0000000008100000700000000000000000009 -:108FE0000000810000E000000000810000E00000BF -:108FF0008100818100E00700000000000000000007 -:10900000000000000000000000000000480000E038 -:1090100000000000480000E000000000820000E0C6 -:109020000000000000000000000000000000000040 -:109030000000000000000000000000000000000030 -:109040000000000000000000000000000000000020 -:109050000000000081C399FF8989CFCFF0F0F0F0C4 -:10906000FF0000000F0F0F0F00FF00FF00FF00FFC9 -:10907000CCCCCCCC0BDB0BDB030FC3FF0000000020 -:109080000000000000000000000000000000C3C35A -:10909000C3C30F0FFFFF00FFFFFF00FFFFFF3C3CBC -:1090A000C3C3FF0000FF3C3CC3C3F0F00F0F000040 -:1090B00000000000000000000000000000000000B0 -:1090C00000000000000000000000000000000000A0 -:1090D000000000000000C3C3FFFF9999FFFFF0F0FC -:1090E000F0F0FF000000F0F0F0F0FF00FF00FF00E4 -:1090F000FF00CCCCCCCC0FFF0FFF0F0FFFFF000009 -:10910000000000020000000000000000000000005D -:10911000C3C3C3C30F0FFFFF00FFFFFF00FFFFFF2D -:109120003C3CC3C3FF0000FF3C3CC3C3F0F00F0F47 -:10913000000000000000000000000000000000002F -:10914000000000000000000000000000000000001F -:10915000000000000000000000000000000000000F -:1091600000000000000000000000000000000000FF -:1091700000000000000000000000000000000000EF -:1091800000000000000000000000000000000000DF -:1091900000000000000000000000000000000000CF -:1091A00000000000000000000000000000000000BF -:1091B00000000000000000000000000000000000AF -:1091C000000000000000000000000000000000009F -:1091D0000000000000000000000066666666F00007 -:1091E000FF0F0000FFFFF0F0F0F03C3CC3C36969E3 -:1091F000696969696969FFFF000066666666CF0D87 -:10920000CF0C000000000000000000000000000083 -:1092100000000000FFFF0000FFFF0000FFFFC3C3CE -:109220000F0F0F0F0000FFFFF0F00F0FFF0000FF08 -:109230000000FFFF00000000000000000000000030 -:10924000000000000000000000000000000000001E -:10925000000000000000000000000000FFFF6000B0 -:10926000F000FF9F000000000F0F0F0F3C3CC3C336 -:1092700069696969696969690000FFFFFFFF420068 -:10928000CF0DCF0C000030000000000000000000F7 -:10929000000000000000FFFFFFFFFFFFFFFFFFFFD8 -:1092A000C3C3F0F0F0F0FFFF0000F0F00F0FFF007D -:1092B00000FFFFFF000000000000000000000000B1 -:1092C000000000000000000000000000000000009E -:1092D000000000000000000000000000000000008E -:1092E0000020000000004002800000209002406149 -:1092F000800480291002406180008021000200610A -:10930000002080010000000080610006000D0000C8 -:1093100000000000000000004063800680299202E7 -:1093200040E3800480299002406180008021100287 -:109330004000800000200802000000000000000043 -:10934000000000000000000000000000000000001D -:10935000000000000000000000000000000000000D -:1093600000000000000000000000000000000000FD -:10937000FF55AE04C300FF3DFF17FF17F5F5B4B46A -:109380003C3CF505B4B4B4B400000000000000009B -:1093900000000000000000000000000000003C3C55 -:1093A000FFFFFB00FB00F0F00000FFFF0F3CAAFAFC -:1093B000AFFF0000000000000000000000000000FF -:1093C000000000000000000000000000000000009D -:1093D000000000000000000000000000000000008D -:1093E000000000000000000000000000000000007D -:1093F0000000AE04AE04C300FF3D00170017A0A09C -:10940000B4B43C3CF505A0A0F5F500000000000058 -:10941000010000000000000000000000000000004B -:109420003C3CFFFFFB00FB30F1F0410000000F3C33 -:109430000050055500000000000000000000000082 -:10944000000000000000000000000000000000001C -:10945000000000000000000000000000000000000C -:1094600000000000000000000000000000000000FC -:109470000000000050505050CF45CF457D287D283A -:10948000F53CF53C5FFF5F553CAAF0AA00000000E8 -:1094900000000000000000000000000000000000CC -:1094A00000000000000000000000C341C040FCFCC0 -:1094B000FC0CACAFACAF00000000000000000000EE -:1094C000000000000000000000000000000000009C -:1094D000000000000000000000000000000000008C -:1094E000000000000000000000000000000000007C -:1094F0000000000000005050F050FF55FF55FFAA3B -:109500005500A03CA03C0AAA0A003CAAF0AA000010 -:10951000000000000000000000000000000000004B -:10952000000000000000000000000000FF7DFC7C47 -:109530000CFC0C0CACA0ACA0000000000000000073 -:10954000000000000000000000000000000000001B -:1095500000000000000000000000000004000008FF -:1095600000000000000000000000000000000000FB -:1095700000000000000000000000000020000000CB -:1095800000000000000000000000000000000000DB -:1095900000030000400000000000840000002000E4 -:1095A00000000000C00500000000000000000000F6 -:1095B0000100000020000010C00020000003100087 -:1095C00010001000C00000000000000000000000BB -:1095D000000000000000000000000000000000008B -:1095E000000000000000000000000000000000007B -:1095F000000000000000000000000000000000006B -:10960000000000000000000000000000000000005A -:10961000000000000000000000000000000000004A -:1096200040000000000000000000400010000000AA -:109630000000040000000000000000000000000026 -:1096400020004000000000000000100000000000AA -:109650000000000000000000080000000000000002 -:1096600000000000020000000000000004000400F0 -:1096700000000000000000000000000000000000EA -:1096800000000000000000000000000000000000DA -:109690000004000000000000001000101010004145 -:1096A000000000100000080000090400001008007D -:1096B00000200005032008004000000040100800C2 -:1096C0000803000000000800000000000000000087 -:1096D0000840000000100000000000000000000032 -:1096E000000000000000000000000000000000007A -:1096F0000000000004000000000000000000000066 -:109700000000000000100000000000000000000049 -:1097100000000001000000000008000800000084B4 -:109720000000000000C00000000800080010050054 -:1097300080000021000004010008C108000880C06A -:10974000000800000308050000840088000000886D -:109750000000000000000000000000000000000009 -:1097600000000000000000000000000000000000F9 -:1097700000000000000000000000000000000000E9 -:109780000000000000000000000000080000400091 -:10979000000000040000002100000005002100215D -:1097A000001100080004008800040041002100218D -:1097B000000800000000000000000000014000213F -:1097C00000800000000000100000000000000021E8 -:1097D0000010000500000000000000000000000074 -:1097E0000000000000000000000000000000000079 -:1097F0000000000000000000000000080000000061 -:10980000000011000000000000C0008200A000C0A5 -:1098100000A000A0000941A00082000000A00000FC -:10982000000800000000000100040001000000002A -:1098300000000000000003000000210005000201FC -:109840000000000200840000000000820000080008 -:109850000000000000000000000000000000000008 -:1098600000000000000000000000000000000000F8 -:1098700000000000000000000000000000000000E8 -:1098800000000000000000000000010000000000D7 -:109890000004010000000000000000800000000043 -:1098A00000009100000000002000000000002000E7 -:1098B000A080000020002000A000A00000200000E8 -:1098C0000041000000092000000000090000C00065 -:1098D0000000000000000000000000000000000088 -:1098E0000000000000000000000000000000000078 -:1098F0000000000000000000000000000000000068 -:109900000000000000000000000000004000408453 -:1099100000000000040000C00082000000040000FD -:109920002000000404A0000000000004000000006B -:109930008000002000A080000088000000000001DE -:1099400000000004000000A09100000021000000C1 -:109950000000000000000000000000000000000007 -:1099600000000000000000000000000000000000F7 -:1099700000000000000000000000000000000000E7 -:1099800000000000000000000000000000000000D7 -:10999000040004000400400000410000000000102A -:1099A00000000090002000210000000000000041A5 -:1099B0000000008020A10080008000000041000025 -:1099C000848000000000000082000000A08000846D -:1099D00000800000000000200120000000000000C6 -:1099E0000000000000000000000000000000000077 -:1099F00000000000000000000000000000840000E3 -:109A0000000000C000A000000008008400842000C6 -:109A10002084910080C08000A09000000008008495 -:109A20000283000000200001000000000000000090 -:109A30000000000000048004000421040900000468 -:109A4000000040200000038405A00008000000047E -:109A500000050004000000000001040103040000F0 -:109A600000000000000000000000000000000000F6 -:109A700000000000000000000000000000000000E6 -:109A800000000000000000080000000000002000AE -:109A90002000000040880320010000200004002175 -:109AA0000000001100000100008090A101200104CD -:109AB00020C1008905410180208520C185414041A8 -:109AC000000900410441000083419000880000002B -:109AD0000005000000000020002000210000000020 -:109AE000000000080000000000000000000000006E -:109AF0000000000000000000000000000000000066 -:109B00000000000000000000000000000000000055 -:109B100000A00008000011200411040800A100C1E9 -:109B200000000000000000000400002020200401CC -:109B30002001200400042000042080208320040051 -:109B40000000000000008000000002020000000091 -:109B50000000000000000000000100010000000003 -:109B600000000000000000000000000000000000F5 -:109B700000000000000000000000000000000000E5 -:109B800000000000000000000000000000000000D5 -:109B900000000000040000000084010800020488A6 -:109BA00000010001080100000000000000020008A0 -:109BB000000800000000A001000000010002900069 -:109BC00000839091419000918291000001008400F7 -:109BD0000000C14100082082A0050202009000029E -:109BE0000020000000000000000000000000000055 -:109BF0000000000000000000000000000000000065 -:109C00000000000000000000000000000000000054 -:109C100000000000000000000000000004800000C0 -:109C2000000000110040800800000000000000005B -:109C300000800080000000000520001100110005D8 -:109C4000000200108011838000118091000021002B -:109C500080000000201105850009004083800080FD -:109C600000000000000000000000000000000000F4 -:109C700000000000000000000000000000000000E4 -:109C800000000000000000000000000000000000D4 -:109C900000000000000000000000000000000002C2 -:109CA00080800080C10085008911901100000000B3 -:109CB00080000000000000000000200011000000F3 -:109CC00005001100020800808009919191910580A2 -:109CD00002000300A08091008582090000888000B6 -:109CE0000021008080000000000000000000000053 -:109CF0000000000000000000000000000000000064 -:109D00000000000000000000000000000000000053 -:109D10000000000000000000000000000000020041 -:109D2000A0008410009090C002009001020000008A -:109D3000000008000000000000000000010000001A -:109D4000009000000100820190409000A185919157 -:109D500040C001000000C104109020C1A040C0C15B -:109D600002000000900890000000000000000000C9 -:109D700000000000000000000000000000000000E3 -:109D800000000000000000000000000000000000D3 -:109D900000000000000000000001000000000001C1 -:109DA00000400010900202090000000100010100C3 -:109DB0000000000000020008008800000000000011 -:109DC000000000090102000008830000019001006A -:109DD000019100000000A0010000091000C0C004B3 -:109DE00083111040009090020088000000000000E5 -:109DF0000000000000000000000000000000000063 -:109E00000000000000000000000000000000000052 -:109E100000000000000000000000002000040041DD -:109E20000004008000858005808400041003092060 -:109E30001109000000000000008000000010000078 -:109E4000091100000088080500028011000011803F -:109E5000050011910041002080100020C1802010D9 -:109E60008089119100800000800000000000000047 -:109E700000000000000000000000000000000000E2 -:109E800000000000000000000000000000000000D2 -:109E900000000000000000000000000000040000BE -:109EA0000000000080020080000000000405119105 -:109EB0000980000000000004002080808000000075 -:109EC00020001100090800000540828003080000FE -:109ED0001100000011110000040000000002000247 -:109EE0008591898083208000000000000000000030 -:109EF0000000000000000000000000000000000062 -:109F00000000000000000000000000000000000051 -:109F10000000000000000000000000000000000140 -:109F20000000000000009001101002020000000478 -:109F300001830082000000000001020308081000F5 -:109F400000000100000000010090020208108201E0 -:109F5000100089902000890100A00000000000018D -:109F6000400302914084050090002010020200008E -:109F700000000000000000000000000000000000E1 -:109F800000000000000000000000000000000000D1 -:109F900000000000000000000000000000000000C1 -:109FA0000000000000000000008100000700000029 -:109FB000810000E0000000000000008100000700B8 -:109FC0000000480000E000000000484200E00700F8 -:109FD0000000500A00E00700000000000000000040 -:109FE0006000500000E000004842000A0000070046 -:109FF0000000000000000000000000000000000061 -:10A000000000000000000000000000000000000050 -:10A010000000000000000000000000000000000040 -:10A0200000000000000000000000AAFAAFFFFCF0F2 -:10A03000FCFF0000000000000000000030003000C5 -:10A040000000000F000000000000000030003000A1 -:10A0500000000C0C550114010000A0A0000000003D -:10A0600000000000000000000000096000FF00FF89 -:10A07000B4A0B4F5000000000000000000000000E3 -:10A0800000000000000000000000000000000000D0 -:10A0900000000000000000000000000000000000C0 -:10A0A0000000000000000000000000000050055506 -:10A0B0000C000C0F00000000000000000000300049 -:10A0C00030000000000F0000000000000000300021 -:10A0D000300000000C0C150114010000000000000D -:10A0E0000000000000000100000009600000A0A0C6 -:10A0F000AFAFB4A0B4F50000000000000000000005 -:10A10000000000000000000000000000000000004F -:10A11000000000000000000000000000000000003F -:10A1200000000000000000000000000000007F436D -:10A130007C401E1E1E1E00000000000000000000EB -:10A14000000C000C0A0A0A0A0000000000000000CF -:10A1500000140014AAAA00000003000000FF040479 -:10A1600000000000C3C3000044000044240081003C -:10A170003C3CFF0F7D417D410000000000000000DD -:10A1800000000000000000000000000000000000CF -:10A1900000000000000000000000000000000000BF -:10A1A00000000000000000000000000000000000AF -:10A1B0007F437C40BE14BE140000000000000080FD -:10A1C0000000000C000C0000000000000000000077 -:10A1D000000000140014000000000003000000FF55 -:10A1E000040400000000C3C30000880000880024AD -:10A1F00000813C3CF000FFC33C0000000000000078 -:10A20000000000000000000000000000000000004E -:10A21000000000000000000000000000000000003E -:10A220000000000000000000000000610006000DBA -:10A23000000000610026000D0000006100008001A8 -:10A240000000000000000028000000000061000184 -:10A2500080010000006100288001000000610020F2 -:10A260008001000000610006000D12060061000080 -:10A270008001080000000020000000000000000035 -:10A2800000000000000000000000000000000000CE -:10A2900000000000000000000000000000000000BE -:10A2A00000000000000000000000000000000000AE -:10A2B000DFD58A800000000000000000FFFFF505E8 -:10A2C00040C27CFE000000000000000000003000E2 -:10A2D000300028002800553F553FA0ACAFACEB1430 -:10A2E000EB14FFFF00000055005504040000553F2B -:10A2F000553F555555550000000000000000000076 -:10A30000000000000000000000000000000000004D -:10A31000000000000000000000000000000000003D -:10A32000000000000000000000000000000000002D -:10A330000000DFD58A80000000000F000000000050 -:10A34000F50540C27CFE0000000000000000000097 -:10A35000300030002800280055305530A0ACAFAC9C -:10A36000000000000000000000550055050400003A -:10A3700055305530000FFF0F0000000000000000B6 -:10A3800000000000000000000000000000000000CD -:10A3900000000000000000000000000000000000BD -:10A3A00000000000000000000000000000000000AD -:10A3B000000000000000000000000000000000009D -:10A3C0005F0A5F0A0000FFFF0000000000000000BD -:10A3D00000000303030300AA00003CF53C05F0FF66 -:10A3E000FAFA383804040000AA550000000080B0D2 -:10A3F000000055FC550CACAFACAF000000000000F5 -:10A40000000000000000000000000000000000004C -:10A41000000000000000000000000000000000003C -:10A42000000000000000000000000000000000002C -:10A43000000000000000000000000000000000001C -:10A440000000FFAA55003CF03CF0000000000000B6 -:10A45000000000000000000000AA00003CF53C05E0 -:10A46000000F0A0A3C3C00000000AA550000000052 -:10A470000000000055FC550CACA0ACA00000000092 -:10A4800000000000000000000000000000000000CC -:10A4900000000000000000000000000000000000BC -:10A4A00000000000000000000000000000000000AC -:10A4B00000000000100041004000000010050005F1 -:10A4C0000000000000004000000500000003000044 -:10A4D0000000000500000000050020000000020050 -:10A4E00002001000000010004000100010000000EA -:10A4F000400040001000000010002000400040001C -:10A5000000001000C0001000100810000000000043 -:10A51000000000000000000000000000000000003B -:10A5200000020000000000004000000200000002E5 -:10A5300000000000000000000200000000004000D9 -:10A54000000000000000000000000000000000000B -:10A5500000000000000000204040020040004020B9 -:10A56000C0008000000000000020100040004000FB -:10A57000000000000000000010004000100000007B -:10A58000000000200000402040200020402000006B -:10A5900000000000000000000000000000000000BB -:10A5A00002000000020002000000000000000000A5 -:10A5B000000000000000000000000000000000009B -:10A5C0000000000000000000840000000000000007 -:10A5D000000000000000000000000000000000106B -:10A5E00000000000000002000000000082090000DE -:10A5F0000400020000000000001002000200000041 -:10A600000000020000000010001000000200000026 -:10A61000001000000000000000000000000000002A -:10A62000000000000000000000000000000000002A -:10A63000000000000000000000000000000000001A -:10A64000000000000000000000000000000000000A -:10A6500000000000000000000000000000000000FA -:10A6600000000000000004000000000000080400DA -:10A670000308008800000000000003C00000000084 -:10A680000000000005100000050802080008001086 -:10A6900000080000000000000000000000000000B2 -:10A6A00000000000000000000000000000000000AA -:10A6B000000000000000000000000000000000009A -:10A6C0000000000000000000000000000008000082 -:10A6D000040004000000000500050010000800212F -:10A6E0000000000401000000000000030000000959 -:10A6F0004000000000000000000800000000000012 -:10A700000000000000000000000000000000000049 -:10A710000000000000000000000000000000000039 -:10A720000000000000000000000000000000000029 -:10A730000000000000000000000000000000000019 -:10A740000000000000000000008200820000000005 -:10A7500000C0800880000000000000C000840000ED -:10A76000000008000001020000C0000000002100FD -:10A7700003004000030040000020410041000000B1 -:10A780000300080021002100000000080000000074 -:10A7900000820084000000000000000000000000B3 -:10A7A00000000000000000000000000000000000A9 -:10A7B0000000000000000000000000000000000099 -:10A7C0000000000000000000020000000000000087 -:10A7D0000000000000000000000002000200020073 -:10A7E0000200020000000200000000000000020061 -:10A7F00002000220000000040220000000000011FE -:10A800000000000000000004000000000000000044 -:10A810000000000000000000000000000000000038 -:10A820000000000000000000000000000000000028 -:10A830000000000000000000000000000000000018 -:10A8400000002000000000000000000000000000E8 -:10A8500000000000000000000000000080008000F8 -:10A8600080008000800000008000000000001100D7 -:10A870008000800080000000000080000088000050 -:10A8800000000000000000000000000000000000C8 -:10A8900000000000000000000000000000000000B8 -:10A8A00000000000000000000000000000000000A8 -:10A8B0000000000000000000000000000000000098 -:10A8C00000000000000000009000200000000000D8 -:10A8D00000100000002000200021002000000000E7 -:10A8E0000041000000000000000000000100000026 -:10A8F00000000000000000000008020090000000BE -:10A900000000000000000000000000000000000047 -:10A910000000000000000000000000000000000037 -:10A920000000000000000000000000000000000027 -:10A930000000000000000000000000000000001007 -:10A9400000000000000000A000000000000000C0A7 -:10A9500000000000000000010001000021090000CB -:10A9600000100000000000000010000000002000A7 -:10A97000030803A00308030800044000800440000B -:10A9800000000400000000000000000000000308B8 -:10A9900008A0080000000000000000000000000007 -:10A9A00000000000000000000000000000000000A7 -:10A9B0000000000000000000000000000000000097 -:10A9C00000000000000000002000000088000000DF -:10A9D0000000010000802100002000400020000253 -:10A9E000000000409000200000000004000400026D -:10A9F000020000000011000900110000000000002A -:10AA00000000000000008200820000000000000042 -:10AA10000000000000000000000000000000000036 -:10AA20000000000000000000000000000000000026 -:10AA30000000000000000000000000000000000016 -:10AA40000000000000000000000000000000000006 -:10AA50000000000020102004200000010000000180 -:10AA600000080000000000000000000000010001DC -:10AA700000000200000000000000000000100010B4 -:10AA80002010201000000000000000000000000066 -:10AA900000000000000000000000000000000000B6 -:10AAA00000000000000000000000000000000000A6 -:10AAB0000000000000000000000000000000000096 -:10AAC0000000000000000000000000000000000086 -:10AAD0000000000009020102210202C101020090EF -:10AAE00000041010000000C0000000C0C00001C140 -:10AAF000000004C0C00000C0000000C0C00000C0D2 -:10AB00000000000000000000000000000000000045 -:10AB10000000000000000000000000000000000035 -:10AB20000000000000000000000000000000000025 -:10AB30000000000000000000000000000000000015 -:10AB40000000000000000000000000000000000005 -:10AB5000000000000000A0111010081000200200EA -:10AB600000800000808000000080000000000000E5 -:10AB700011A000210004000000800000000000007F -:10AB80000080000000000000000000000000000045 -:10AB900000000000000000000000000000000000B5 -:10ABA00000000000000000000000000000000000A5 -:10ABB0000000000000000000000000000000000095 -:10ABC0000000000000000000000000000000000085 -:10ABD0000000000000008000080089A08380C09071 -:10ABE0000000001000808000000000000000000055 -:10ABF0008000200004001100840400000000000018 -:10AC00008000000000000000800000000000000044 -:10AC10000000000000000000000000000000000034 -:10AC20000000000000000000000000000000000024 -:10AC30000000000000000000000000000000000014 -:10AC40000000000000000000000000000000000004 -:10AC50000000000004000000C000C19010C10840C6 -:10AC600011C1100088000084900400000000000062 -:10AC70000000C00001A001000100C00000000000B1 -:10AC80000000C000000000000000C0000000000044 -:10AC900000000000000000000000000000000000B4 -:10ACA00000000000000000000000000000000000A4 -:10ACB0000000000000000000000000000000000094 -:10ACC0000000000000000000000000000000000084 -:10ACD00000000000000000000000000085C1010429 -:10ACE000C1850889084000889004008400000000A5 -:10ACF0000000000000C000010000010000C10000D1 -:10AD00000000000000C088000088000000C00000B3 -:10AD10000000000000000000000000000000000033 -:10AD20000000000000000000000000000000000023 -:10AD30000000000000000000000000000000000013 -:10AD40000000000000000000000000000000000003 -:10AD50000000000000000000000000000000412191 -:10AD6000040984C09102808000008000000000007F -:10AD7000000000000000008000200905100900917B -:10AD800000000000000000800000000000000080C3 -:10AD900000000000000000000000000000000000B3 -:10ADA00000000000000000000000000000000000A3 -:10ADB0000000000000000000000000000000000093 -:10ADC0000000000000000000000000000000000083 -:10ADD0000000000000000000000000000000000073 -:10ADE000A1850900C0000202800000008000000070 -:10ADF00000000000000000000000800204110500B7 -:10AE00000309800000000000000080000000000036 -:10AE10000000000000000000000000000000000032 -:10AE20000000000000000000000000000000000022 -:10AE30000000000000000000000000000000000012 -:10AE40000000000000000000000000000000000002 -:10AE500000000000000000000000000000000000F2 -:10AE6000000003A0C08805100501900000C0100478 -:10AE700040000000000000A0A0000000C00100A1F0 -:10AE8000A0000100C00000A0A0000000C000000061 -:10AE900000888800000000000000000000000000A2 -:10AEA00000000000000000000000000000000000A2 -:10AEB0000000000000000000000000000000000092 -:10AEC0000000000000000000000000000000000082 -:10AED0000000000000000000000000000000000072 -:10AEE00000000000810000E0000048420041000036 -:10AEF00007000000000000000000000000008100CA -:10AF000000E0000000000000000000000000000061 -:10AF10000000000000000000000000000000000031 -:10AF20000000000000000000000000000000000021 -:10AF30000000000000000000000000000000000011 -:10AF40000000000000000000000000000000000001 -:10AF500000000000000000000000000000000000F1 -:10AF60000000000000000000000028000028FDFD97 -:10AF7000F4F4F0F0F0F000000F0F0F0F0000FFFFEF -:10AF80000F0FFFFF0000FFFF0F0FFFFF0000FFFF8D -:10AF9000C3C3FFFF0F0FFFFF000000000000000011 -:10AFA00000000000000000000000000000000000A1 -:10AFB0000000000000000000000000000000000091 -:10AFC0000000000000000000000000000000000081 -:10AFD0000000000000000000000000000000000071 -:10AFE00000000000000000000000000141000041DE -:10AFF0000D0D0404FF3C003C00000F0F0F0FFFFF7E -:10B00000FFFF0F0FFFFFFFFFFFFF0F0FFFFFFFFF10 -:10B01000FFFFC3C3FFFF0F0FFFFF00000000000092 -:10B020000000000000000000000000000000000020 -:10B030000000000000000000000000000000000010 -:10B040000000000000000000000000000000000000 -:10B0500000000000000000000000000000000000F0 -:10B0600000000000000000000000000000000000E0 -:10B0700000000000000000000000000000000000D0 -:10B0800000000000000000000000000000000000C0 -:10B0900000000000000000000000000000000000B0 -:10B0A00000000000000000000000000000000000A0 -:10B0B0000000000000000000000000000000000090 -:10B0C0000000000000000000000000000000000080 -:10B0D0000000000000000000000000000000000070 -:10B0E00000000000000000000000F0F000820014EA -:10B0F0000000884403C33FFF2D2D2D2D0000FFFFCE -:10B10000F0F0FFFF9999FFFFF0F0FFFF9999FFFF23 -:10B11000F0F0FFFF9999FFFF00000000FFFF000023 -:10B12000000000000000000000000000000000001F -:10B13000000000000000000000000000000000000F -:10B1400000000000000000000000000000000000FF -:10B1500000000000000000000000000000000000EF -:10B16000000000000000000000000000F0F082007D -:10B1700014008844000000C03CFC2424BDBD000035 -:10B18000FFFFF0F0FFFF9999FFFFF0F0FFFF9999A3 -:10B19000FFFFF0F0FFFF9999FFFFFFFF00000000A5 -:10B1A000000000000000000000000000000000009F -:10B1B000000000000000000000000000000000008F -:10B1C000000000000000000000000000000000007F -:10B1D000000000000000000000000000000000006F -:10B1E0000000000000000000000000000000120647 -:10B1F0000061000580010800000000200000000040 -:10B200000000400280000020920240E38000802184 -:10B210009202408280000020920240828000002042 -:10B220008A00000000000000000000000000000094 -:10B23000000000000000000000000000000000000E -:10B2400000000000000000000000000000000000FE -:10B2500000000000000000000000000000000000EE -:10B2600000000000000000000000000000000000DE -:10B270000000AAAAAAAA55555555000000000000D2 -:10B280000000000000000000000000005F0A5F0AEC -:10B2900080BCC1FD000000000000000000000000B4 -:10B2A000000000000000000000000000000000009E -:10B2B000000000000000000000000000000000008E -:10B2C000000000000000000000000000000000007E -:10B2D000000000000000000000000000000000006E -:10B2E000000000000000000000000000000000005E -:10B2F00000000000AAAAA2AA55555515000000009A -:10B3000000000000000000000000000000007D2898 -:10B310007D2880BCC1FD000000000000000000008E -:10B32000000000000000000000000000000000001D -:10B33000000000000000000000000000000000000D -:10B3400000000000000000000000000000000000FD -:10B3500000000000000000000000000000000000ED -:10B3600000000000000000000000000000000000DD -:10B370000000000000000000F0F000FF00FF0000EF -:10B3800000000000000000000000000000000000BD -:10B390005555FF0F28EBE8E8000000000000000012 -:10B3A000000000000000000000000000000000009D -:10B3B000000000000000000000000000000000008D -:10B3C000000000000000000000000000000000007D -:10B3D000000000000000000000000000000000006D -:10B3E000000000000000000000000000000000005D -:10B3F0000000000000000000FFD7FFD700FF007F23 -:10B40000000000000000000000000000000000003C -:10B4100000005555F00028EBE8E8000000000000AF -:10B42000000000000000000000000000000000001C -:10B43000000000000000000000000000000000000C -:10B4400000000000000000000000000000000000FC -:10B4500000000000000000000000000000000000EC -:10B4600000000000000000000000000000000000DC -:10B4700000000000020000000000000000000000CA -:10B48000000000000000000000000003C0000000F9 -:10B49000000041000000000000100000000040001B -:10B4A000000040000000000000000000200000003C -:10B4B0000000200000000000000004000000040064 -:10B4C000000000000000000000000000000000007C -:10B4D000000000000000000000000000000000006C -:10B4E000000000000000000000000000000000005C -:10B4F000000000000000000000000000000040000C -:10B5000000000000000000004000000000000000FB -:10B5100000000000880000000000000000000000A3 -:10B5200000000000000000000000000040000000DB -:10B53000000000000000000000000090000000007B -:10B5400010000020000000000000000000000000CB -:10B55000840002000200000002000000020000005F -:10B5600002000000000000000000000000000000D9 -:10B5700000000000000000000000000004000000C7 -:10B58000080000000800000000000010000000009B -:10B59000000000000000001000000000000000009B -:10B5A00000000000004000100000000000C000800B -:10B5B000000000000000000000000000000000107B -:10B5C00002000000004000000200004000400000B7 -:10B5D000000000000000000000000000000000006B -:10B5E000000000000000000000400000000000001B -:10B5F000000000000000000000000000000000004B -:10B60000000000000000000000000000000000003A -:10B610000000000000000000000000000800000022 -:10B6200002000000000000000000000000100020E8 -:10B630000020024000000000000000000010030095 -:10B6400000000000000000000000000000000400F6 -:10B6500004000000000000000000000000000000E6 -:10B6600000000000000000000000000000000000DA -:10B6700000000000000000000000000000000000CA -:10B680000000000000000080040000000000000036 -:10B69000000000000008000000000010000000088A -:10B6A000000000100000000000000000002000006A -:10B6B0008800900000000000000000000000000072 -:10B6C0000000000000000000000000000000A000DA -:10B6D000000000000000000000000000000000006A -:10B6E000000000000000000000000000000000005A -:10B6F000000000000000000000000000000000004A -:10B70000110000000000000000028000001000A0F6 -:10B71000008200080000008400000000000100001A -:10B720000000000000000000000000000000000118 -:10B730000000000000000000000000000000000009 -:10B7400000000000040000000000000000000000F5 -:10B7500000000000000000000000000000000000E9 -:10B760000000004000000040000000000040000019 -:10B7700000000000000000000000000000000000C9 -:10B780000000000000009000000090008800000011 -:10B790000000000000000000000000000040000069 -:10B7A0000000000000000000000000000000000099 -:10B7B0000000000000000000000000040000000481 -:10B7C0000000004000000040000000400040000079 -:10B7D0000000004000000000020000000000000027 -:10B7E0000040000000000000000000000000000019 -:10B7F0000000000000000000000000000000000049 -:10B800000000000000000000004000000088000070 -:10B810000000000000000000000000000000000028 -:10B820000000000000001100000000000000000007 -:10B830000000000000000000000000000004000004 -:10B8400002000000000021000000000000000000D5 -:10B8500000000000000000000000000000000000E8 -:10B8600000000000000000000000000000000000D8 -:10B8700000000000000000000000000000000000C8 -:10B8800000000000000000000000010000000100B6 -:10B890000100000000000000000000000000001097 -:10B8A0000000000000000000000000000000000098 -:10B8B0000000000000800080008000800000000088 -:10B8C0000000000000000000000000000000000078 -:10B8D0000000000000000000000000000000000068 -:10B8E0000000000000000000000000000000000058 -:10B8F0000000000000000000000000000000000048 -:10B9000000000000008400000010000002A0000001 -:10B91000081040A00000000800080000000000001F -:10B92000000000000000000008000000000000000F -:10B930000000000000000020002000200020000087 -:10B9400000000000000000000000000000000000F7 -:10B9500000000000000000000000000000000000E7 -:10B9600000000000000000000000000000000000D7 -:10B9700000000000000000000000000000000000C7 -:10B980000000000000000000000000000000004077 -:10B990000000000000000011000000000000000096 -:10B9A000000000000000000000210010000900104D -:10B9B0000000000000000000000000000000000087 -:10B9C0000000000002000020000000000000000055 -:10B9D000000008000000000000000000000000005F -:10B9E0000000020000000000000000000000000055 -:10B9F0000000000000000000000000000000000047 -:10BA00000000000000000000000000000000000036 -:10BA10000001000000000000000000000000000025 -:10BA20000000000000000000000000000000000016 -:10BA3000000000000000000000000000000000887E -:10BA400000040000000000000000000000000000F2 -:10BA500000000000020000000000000000000000E4 -:10BA600000000000000000000000000000000000D6 -:10BA700000000000000000000000000000000000C6 -:10BA800000000000000000000000000000000000B6 -:10BA900000000000000000000000000000000000A6 -:10BAA0000000000000000100000000000000000095 -:10BAB0000000000000000000000000000004000082 -:10BAC000000000080000000000000000000000006E -:10BAD0000000000000000000000000000000000066 -:10BAE0000000000000000000000000000000000056 -:10BAF0000000000000000000000000000000000046 -:10BB00000000000000000000000000000000000035 -:10BB10000000000000000000000000000000000025 -:10BB20000000000000000000030000000000000012 -:10BB30000000000000000000000000000000000005 -:10BB40000000000000800000000000000000000075 -:10BB500000000000000000000000000000000000E5 -:10BB600000000000000000000000000000000000D5 -:10BB700000000000000000000000000000000000C5 -:10BB800000000000000000000000000000000000B5 -:10BB900000000000000080000000A0008000000005 -:10BBA00000000000000000004000000040004000D5 -:10BBB0000000000000000000000000000000000085 -:10BBC0000000000300008080000000000000000072 -:10BBD0000000000000000000000000000000000065 -:10BBE0000000000000000000000000000000000055 -:10BBF0000000000000000000000000000000000045 -:10BC00000000000000000000000000000000000034 -:10BC100000000000000000000800A000A10090004B -:10BC20000000000000000000000002001000000002 -:10BC300010100000000000000000000000000000E4 -:10BC400000000000040100000808000000000000DF -:10BC500000000000000000000000000000000000E4 -:10BC600000000000000000000000000000000000D4 -:10BC700000000000000000000000000000000000C4 -:10BC800000000000000000000000000000000000B4 -:10BC900000000000000000000000000100A000857E -:10BCA0000001000000000000000000000000000093 -:10BCB0000001000000000000000000000000000083 -:10BCC00000000000C00400C00000000800000000E8 -:10BCD0000000000000000000000000000000000064 -:10BCE0000000000000000000000000000000000054 -:10BCF0000000000000000000000000000000000044 -:10BD00000000000000000000000000000000000033 -:10BD10000000000000000000000000000020000003 -:10BD200000200040000000000000000000000010A3 -:10BD300000090021000900000000000000000000D0 -:10BD40000000000000000000000000000080000073 -:10BD500000000000000000000000000000000000E3 -:10BD600000000000000000000000000000000000D3 -:10BD700000000000000000000000000000000000C3 -:10BD800000000000000000000000000000000000B3 -:10BD900000000000000000000000000000000002A1 -:10BDA0000000000000400000000000000000000053 -:10BDB00000000000008000210000000000000000E2 -:10BDC0000000000000000000000000020000000071 -:10BDD0000000000000000000000000000000000063 -:10BDE0000000000000000000000000000000000053 -:10BDF0000000000000000000000000000000000043 -:10BE00000000000000000000000000000000000032 -:10BE10000000000000000000000000000000000022 -:10BE20000001000000C00001000000000000000050 -:10BE300000000000001000080001000000000000E9 -:10BE4000000000000000000000000400000100C02D -:10BE5000C000000000000000000000000000000022 -:10BE600000000000000000000000000000000000D2 -:10BE700000000000000000000000000000000000C2 -:10BE800000000000000000000000000000000000B2 -:10BE900000000000000000000000000000000000A2 -:10BEA000000000810000070000000000000000000A -:10BEB0000000000000000000000000000000000082 -:10BEC000000000000000000000000000000A000068 -:10BED000070000000000000000000000000000005B -:10BEE0000000000000000000000000000000000052 -:10BEF0000000000000000000000000000000000042 -:10BF00000000000000000000000000000000000031 -:10BF10000000000000000000000000000000000021 -:10BF20000000000000000000000F000F00000000F3 -:10BF30000000000000000000000000000000000001 -:10BF400000000000000000000000000000003C3C79 -:10BF500000000000C0C00000000000000000000061 -:10BF600000000000000000000000000000000000D1 -:10BF700000000000000000000000000000000000C1 -:10BF800000000000000000000000000000000000B1 -:10BF900000000000000000000000000000000000A1 -:10BFA00000000000000000000000000F000F000073 -:10BFB0000000000000000000000000000000000081 -:10BFC0000000000000000000000000000000000071 -:10BFD000000000000000C0C00000000000000000E1 -:10BFE0000000000000000000000000000000000051 -:10BFF0000000000000000000000000000000000041 -:10C000000000000000000000000000000000000030 -:10C010000000000000000000000000000000000020 -:10C02000000000000000000000000000FF0CFF0CFA -:10C030000000000000000000000000000000000000 -:10C0400080800000000000000000000000000000F0 -:10C05000000000003C3CF0F0000000000000000088 -:10C0600000000000000000000000000000000000D0 -:10C0700000000000000000000000000000000000C0 -:10C0800000000000000000000000000000000000B0 -:10C0900000000000000000000000000000000000A0 -:10C0A0000000000000000000000000000000FF0F82 -:10C0B000FF00000000000000000000000000000081 -:10C0C0000000000000000000000000000000000070 -:10C0D0000000000000000000000000000000000060 -:10C0E0000000000000000000000000000000000050 -:10C0F0000000000000000000000000000000000040 -:10C10000000000000000000000000000000000002F -:10C11000000000000000000000000000000000001F -:10C120000000000000000000000000000061002688 -:10C13000001D000000000000000000000000006181 -:10C140000006000D000000000000000000000000DC -:10C1500000000000000000000028000000000000B7 -:10C1600000000000000000000000000000000000CF -:10C1700000000000000000000000000000000000BF -:10C1800000000000000000000000000000000000AF -:10C19000000000000000000000000000000000009F -:10C1A000000000000000000000000000000000008F -:10C1B0000000C3C3C33C00000000000000000000FA -:10C1C0000000000030FF00FF000000000000000041 -:10C1D000000000000000000000000000000000005F -:10C1E000000000000000000000000000000000004F -:10C1F000000000000000000000000000000000003F -:10C20000000000000000000000000000000000002E -:10C21000000000000000000000000000000000001E -:10C22000000000000000000000000000000000000E -:10C2300000000000C3C3C33C000000000000000079 -:10C2400000000000000000FF00FF000000000000F0 -:10C2500000000000000000000000000000000000DE -:10C2600000000000000000000000000000000000CE -:10C2700000000000000000000000000000000000BE -:10C2800000000000000000000000000000000000AE -:10C29000000000000000000000000000000000009E -:10C2A000000000000000000000000000000000008E -:10C2B000000000000000AA55AA5500000000000080 -:10C2C00000000000000000008200000000000000EC -:10C2D000000000000000000000000000000000005E -:10C2E000000000000000000000000000000000004E -:10C2F000000000000000000000000000000000003E -:10C30000000000000000000000000000000000002D -:10C31000000000000000000000000000000000001D -:10C32000000000000000000000000000000000000D -:10C330000000000000000000AA55AA5500000000FF -:10C34000000000000000000000008200000000006B -:10C3500000000000000000000000000000000000DD -:10C3600000000000000000000000000000000000CD -:10C3700000000000000000000000000000000000BD -:10C3800000000000000000000000000000000000AD -:10C390000000000400000000000000001000100079 -:10C3A000000000000000000000000000100000007D -:10C3B00000000000000040001000400020002000AD -:10C3C00040000000000000021000000040002000BB -:10C3D00040000000000000000000200020002000BD -:10C3E00020004000000000000000040000000000E9 -:10C3F00000000000A000000040000000200020001D -:10C400004000400040000000000000000000000468 -:10C41000000010000000000000020000000000000A -:10C4200000004000100000001002000200000000A8 -:10C4300000004002000000020000000200000000B6 -:10C44000400010904000100000004000000000007C -:10C4500000000000100010004020000040004000DC -:10C46000000000002040000002002000000000004A -:10C4700020204100004010000000002000A000002B -:10C48000000000200000100040000000000000003C -:10C4900020008400200004000000000000000000D4 -:10C4A000000000000000000000000000000000008C -:10C4B00000009000000000000000000000000000EC -:10C4C000000000000000001000000000000000005C -:10C4D0000000000000000800000000000000000054 -:10C4E0000000001002000100000002000000000037 -:10C4F00000100010020002000000084002000000CE -:10C500000000000002000200000000000000000027 -:10C51000000000000000000000000000000000001B -:10C5200000000000000020000000000000000000EB -:10C5300000000000000000000000000000000000FB -:10C5400000000000000000000000000000000000EB -:10C5500000000000000000000000000000000000DB -:10C5600000000000000000002000000000000000AB -:10C5700000000000000000000000000000000000BB -:10C580000000000004000000000000000000004166 -:10C59000000000000000000000000000000000009B -:10C5A000000000000000000000000000000000008B -:10C5B000000000000000000000000000000000007B -:10C5C000000000000000000000000000000000006B -:10C5D000000000000000000000000000000000005B -:10C5E0000000000000000000000440410004400082 -:10C5F000000000000000000000000000000000003B -:10C60000000000000000000000000000000000002A -:10C61000000000000000000000000000000000001A -:10C62000000000000000000000000000000000000A -:10C6300000000000000000000000000000000000FA -:10C6400000000000000000000400000000000000E6 -:10C650000000000000000000000000A000A000A0FA -:10C6600000000000000000000000000000000000CA -:10C6700000000000000000000000000000000000BA -:10C6800000000000000000000000000000000000AA -:10C690000000000900000000000000000000000091 -:10C6A00000000000004000400040000000000000CA -:10C6B000000000000000000000000000000000007A -:10C6C000000000000000000000000000000000006A -:10C6D000000000000000000000000000000000005A -:10C6E0000000000000000000000000000004000046 -:10C6F0000004000200000020080400000000000008 -:10C7000000200000000000001000000008000000F1 -:10C710000000000000000000000000000000000019 -:10C7200000000000004000000000000000000000C9 -:10C7300000000000000000000000000000000000F9 -:10C7400000000000000000000000000000000000E9 -:10C7500000000000000000000000000000000000D9 -:10C7600000000000000000000000000000000900C0 -:10C77000000021000001020000000200000000840F -:10C780000000024000000000000000000040000027 -:10C790000000000000000000000000000000000099 -:10C7A0000000000000000000000000000000000089 -:10C7B0000000000000000000000000000000000079 -:10C7C0000000000000000000000000000000000069 -:10C7D0000000000000000000000000000000000059 -:10C7E0000000000000000000000000000000000049 -:10C7F00000000100000200800000000000000000B6 -:10C800000000000000000000000000000000000028 -:10C810000000000000000000000000000000000018 -:10C820000000000000000000000000000000000008 -:10C8300000000000000000000000000000000000F8 -:10C840000000000000C00000000000000000000028 -:10C8500000000000000000000000000000000000D8 -:10C8600000000000000000000000000000000000C8 -:10C870000000000020000001000200000000000095 -:10C8800000000000000000000000000000000000A8 -:10C890000000000000000000000000000000000098 -:10C8A0000000000000000000000000000000000088 -:10C8B0000000000000000000000000000000000078 -:10C8C0000000000000000000000000000000000068 -:10C8D0000000000000000000000000000000000058 -:10C8E0000000000000000000000000000000000048 -:10C8F0004000000000000000008000000000000078 -:10C90000000000000000000000000000000900001E -:10C910000000020000000000000000000000000015 -:10C920000000000000000000000000000000000007 -:10C9300000000000000000000000000000000000F7 -:10C9400000000000000000000000000000000000E7 -:10C9500000000000000000000000000000000000D7 -:10C9600000000000000000000000000000000000C7 -:10C9700000000000000000000000000200040000B1 -:10C98000000000000000000004000404400000005B -:10C99000020000020000000000000008210000006A -:10C9A0000000000000000000000000000000000087 -:10C9B0000000000000000000000000000000000077 -:10C9C0000000000000000000000000000000000067 -:10C9D0000000000000000000000000000000000057 -:10C9E0000000000000000000000000000000000047 -:10C9F0000000000000000000000000000000000037 -:10CA00000000000000000000000000000000000026 -:10CA10000000000000000000000000000000000016 -:10CA20000000000000000000000000000000000006 -:10CA300000000000000000000000000000000000F6 -:10CA400000000000000000000000000000000000E6 -:10CA500000000000000000000000000000000000D6 -:10CA600000000000000000000000000000000000C6 -:10CA70000000000000000000000011000000410064 -:10CA800000000000000000000000000000000000A6 -:10CA90000000000000000000000000000000000096 -:10CAA0000000000000000000000000000000000086 -:10CAB0000000000000000000000000000000000076 -:10CAC0000000000000000000000000000000000066 -:10CAD0000000000000000000000000000000000056 -:10CAE0000000000000000000000000000000000046 -:10CAF000000000000000000000000000100008001E -:10CB000005002100000000000000000000000000FF -:10CB10000000000000000000000000000000000015 -:10CB20000000000000000000000000000000000005 -:10CB300000000000000000000000000000000000F5 -:10CB400000000000000000000000000000000000E5 -:10CB500000000000000000000000000000000000D5 -:10CB600000000000000000000000000000000000C5 -:10CB700000000000000000000000000000000100B4 -:10CB800000000000010000000000000000000000A4 -:10CB90000000000000000000000000000000000095 -:10CBA0000000000000000000000000000000000085 -:10CBB0000000000000000000000000000000000075 -:10CBC0000000000000000000000000000000000065 -:10CBD0000000000000000000000000000000000055 -:10CBE0000000000000000000000000000000000045 -:10CBF0000000000000000000000000000000000035 -:10CC000000000000840000000000000000000000A0 -:10CC10000000000000000000000000000000000014 -:10CC20000000000000000000000000000000000004 -:10CC300000000000000000000000000000000000F4 -:10CC400000000000000000000000000000000000E4 -:10CC500000000000000000000000000000000000D4 -:10CC600000000000000000000000000000000000C4 -:10CC700000000000000000000000000000000000B4 -:10CC80000000000000040005000800000000000093 -:10CC90000000000000000000000000000000000094 -:10CCA0000000000000000000000000000000000084 -:10CCB0000000000000000000000000000000000074 -:10CCC0000000000000000000000000000000000064 -:10CCD0000000000000000000000000000000000054 -:10CCE0000000000000000000000000000000000044 -:10CCF0000000000000000000000000000000000034 -:10CD000000000000080000000000400000000000DB -:10CD10000000000000000000000000000000000013 -:10CD20000000000000000000000000000000000003 -:10CD300000000000000000000000000000000000F3 -:10CD400000000000000000000000000000000000E3 -:10CD500000000000000000000000000000000000D3 -:10CD600000000000000000000000000000000000C3 -:10CD700000000000000000000000000000000000B3 -:10CD800000000000000000C00000000001000000E2 -:10CD90000000000000000000000000000000000093 -:10CDA0000000000000000000000000000000000083 -:10CDB0000000000000000000000000000000000073 -:10CDC0000000000000000000000000000000000063 -:10CDD0000000000000000000000000000000000053 -:10CDE0000000000000000000000000000000000043 -:10CDF0000000000000000000000000000000000033 -:10CE00000000000000000000840000E000000000BE -:10CE10000000000000000000000000000000000012 -:10CE20000000000000000000000000000000000002 -:10CE300000000000000000000000000000000000F2 -:10CE400000000000000000000000000000000000E2 -:10CE500000000000000000000000000000000000D2 -:10CE600000000000000000000000000000000000C2 -:10CE700000000000000000000000000000000000B2 -:10CE800000000000000000000000000000000000A2 -:10CE90000000000000000000000000000000000092 -:10CEA0000000000000000000000000000000000082 -:10CEB0000000000000000000000000000000000072 -:10CEC0000000000000000000000000000000000062 -:10CED0000000000000000000000000000000000052 -:10CEE0000000000000000000000000000000000042 -:10CEF0000000000000000000000000000000000032 -:10CF00000000000000000000000000000000000021 -:10CF10000000000000000000000000000000000011 -:10CF20000000000000000000000000000000000001 -:10CF300000000000000000000000000000000000F1 -:10CF400000000000000000000000000000000000E1 -:10CF500000000000000000000000000000000000D1 -:10CF600000000000000000000000000000000000C1 -:10CF700000000000000000000000000000000000B1 -:10CF800000000000000000000000000000000000A1 -:10CF90000000000000000000000000000000000091 -:10CFA0000000000000000000000000000000000081 -:10CFB0000000000000000000000000000000000071 -:10CFC0000000000000000000000000000000000061 -:10CFD0000000000000000000000000000000000051 -:10CFE0000000000000000000000000000000000041 -:10CFF0000000000000000000000000000000000031 -:10D000000000000000000000000000000000000020 -:10D010000000000000000000000000000000000010 -:10D020000000000000000000000000000000000000 -:10D0300000000000000000000000000000000000F0 -:10D0400000000000000000000000000000000000E0 -:10D0500000000000000000000000000000000000D0 -:10D0600000000000000000000000000000000000C0 -:10D0700000000000000000000000000000000000B0 -:10D0800000000000000000000000000000000000A0 -:10D090000000000000000000000000000000000090 -:10D0A0000000000000000000000000000000000080 -:10D0B0000000000000000000000000000000000070 -:10D0C0000000000000000000000000000000000060 -:10D0D0000000000000000000000000000000000050 -:10D0E0000000000000000000000000000000000040 -:10D0F0000000000000000000000000000000000030 -:10D10000000000000000000000000000000000001F -:10D110000000000000610005800D0000000000001C -:10D1200000000000000000000000000000000000FF -:10D1300000000000000000000000000000000000EF -:10D1400000000000000000000000000000000000DF -:10D1500000000000000000000000000000000000CF -:10D1600000000000000000000000000000000000BF -:10D1700000000000000000000000000000000000AF -:10D18000000000000000000000000000000000009F -:10D190000000000000003C3C0000FFF00000000028 -:10D1A000000000000000000000000000000000007F -:10D1B000000000000000000000000000000000006F -:10D1C000000000000000000000000000000000005F -:10D1D000000000000000000000000000000000004F -:10D1E000000000000000000000000000000000003F -:10D1F000000000000000000000000000000000002F -:10D20000000000000000000000000000000000001E -:10D2100000000000000000003C3C0000FFF00000A7 -:10D2200000000000000000000000000000000000FE -:10D2300000000000000000000000000000000000EE -:10D2400000000000000000000000000000000000DE -:10D2500000000000000000000000000000000000CE -:10D2600000000000000000000000000000000000BE -:10D2700000000000000000000000000000000000AE -:10D28000000000000000000000000000000000009E -:10D29000000000000000000000000000000000008E -:10D2A000000000000000000000000000000000007E -:10D2B000000000000000000000000000000000006E -:10D2C000000000000000000000000000000000005E -:10D2D000000000000000000000000000000000004E -:10D2E000000000000000000000000000000000003E -:10D2F000000000000000000000000000000000002E -:10D30000000000000000000000000000000000001D -:10D31000000000000000000000000000000000000D -:10D3200000C003C300000000000000000000000077 -:10D3300000000000000000000000000000000000ED -:10D3400000000000000000000000000000000000DD -:10D3500000002000000000000000000000000000AD -:10D3600000000000000000000000000000000000BD -:10D3700000000000000000000000000000000000AD -:10D38000000000000002000000000000000040005B -:10D390000000400000000000000000000000C0008D -:10D3A000000000000000000010000000000020004D -:10D3B00000000080008000004000408040008800A5 -:10D3C000000000000000000000000000000000005D -:10D3D000000000000000000000000000000000004D -:10D3E00000000000000000004000000000000000FD -:10D3F000000010000000000000000000000000001D -:10D4000000000000000000000000400000001000CC -:10D41000000000000000400000000000000000408C -:10D4200000000000000000000000000000000000FC -:10D43000000000200010001000000000001000009C -:10D44000400000000000000000000000000000009C -:10D45000000000000000000020410000000000006B -:10D4600000000000000000000000000000000000BC -:10D47000000000000800000000000000000008009C -:10D48000000000000000000000000000000000009C -:10D490000010000000000800000000400000000034 -:10D4A000000000000000000008000204202000002E -:10D4B0000004020402040904000402000000000049 -:10D4C00000100000004004000800040004002000D8 -:10D4D000200000000000000000000000000000002C -:10D4E000000000000000000020000000000000001C -:10D4F000000000000000000000000000000000002C -:10D50000000000000000000000000000000000001B -:10D51000000000000000000000000000000000000B -:10D520000000000000000000000000000001800179 -:10D5300000000001000100010801000104000000DA -:10D5400000000000000000000000000000000000DB -:10D5500000000000000000000000000000000000CB -:10D5600000000000000000000000000000000000BB -:10D5700000000000000000000000000000000000AB -:10D58000000000000000000000000000000000009B -:10D59000000000000000000000000000000000008B -:10D5A000000000000000000000000000000000007B -:10D5B00000000000000000000000000088000003E0 -:10D5C00000210040001000100000000000000000DA -:10D5D000000000000000000000000000000000004B -:10D5E000000000000000000000000000000000003B -:10D5F000000000000000000000000000000000002B -:10D60000000000000000000000000000000000001A -:10D61000000000000000000000000000000000000A -:10D6200000000000000000000000000000000000FA -:10D6300009000000000000000000000000000000E1 -:10D6400000000000000100010001000000000000D7 -:10D650000000000000000000004100000000000584 -:10D66000000000000000000000000040000000007A -:10D6700000000000000000000000000000000000AA -:10D68000000000000000000000000000000000009A -:10D69000000000000000000000000000000000008A -:10D6A0000000000000000200000002000000000076 -:10D6B0000200000000000010011010000000000037 -:10D6C0000011000000000000000000000000000049 -:10D6D000000000000000000000000000000000004A -:10D6E00000000040000000000000000000000800F2 -:10D6F000000000000000000000000000000000002A -:10D700000000000000000000000000000000000019 -:10D7100000000000000000000000004000000000C9 -:10D7200000000000000000000200000002000000F5 -:10D730000000040040020200030308010002000090 -:10D7400000000000000000000000000008000000D1 -:10D7500000000000000000000000000000000000C9 -:10D7600000000000000000000000000000000000B9 -:10D7700000000000000000000000000000000000A9 -:10D780000000000000000000000000000000000099 -:10D790000000000000000000000000000000000089 -:10D7A0000000000000000000000000000000000079 -:10D7B0000000000000004000400040104000000356 -:10D7C000001000030005000300020800000500002F -:10D7D0000000000000410000000000000000000008 -:10D7E0000000000000000000000000000000000039 -:10D7F0000000000000000000000000000000000029 -:10D800000000000000000000000000000000000018 -:10D810000000000000000000000000000000000008 -:10D8200000000000000000000000000000000000F8 -:10D830000000000000001100000000008000000057 -:10D840000000000000000000000000008000000058 -:10D8500000000000000000000000000000000000C8 -:10D8600000000000000000000000000000000004B4 -:10D8700000000000000000000000000000000000A8 -:10D880000000000000000000000000000000000098 -:10D890000000000000000000000000000000000088 -:10D8A0000000000000000000000000000000000078 -:10D8B0000000000000000000000000000000400028 -:10D8C00000000040000900000010000900100002E4 -:10D8D00000020000000400000011000000000040F1 -:10D8E0000300000000000004000000000000000031 -:10D8F0000000020000000000000000000000000026 -:10D90000000000000000000008000000000000000F -:10D910000000000000000000000000000000000007 -:10D9200020100000000000000000000000000000C7 -:10D930000000000009000420000009004000204011 -:10D940000000204011010000050003010500000156 -:10D9500000000001000000000000000000000000C6 -:10D9600000000000000000000000000000000000B7 -:10D9700000000000000000000000000000000000A7 -:10D980000000000000000000000000000000000097 -:10D990000000000000000000000000000000000087 -:10D9A0000000000000000000000000000000000077 -:10D9B000000000000000000000000000000008A0BF -:10D9C0000082A08900880009000800000005008886 -:10D9D0000008101000080000000000000000000017 -:10D9E0000000000000000000000000000000000037 -:10D9F0000000000000000000000000000000000027 -:10DA00000000000000000000000000000000000016 -:10DA10000000000000000000000000000000000006 -:10DA200000000000000000000000000000000000F6 -:10DA300000000000000000000000000000000000E6 -:10DA4000118021918010000903A109830041001079 -:10DA50000080028000000080000000000000000044 -:10DA600000000000000000000000000000000000B6 -:10DA700000000000000000000000000000000000A6 -:10DA80000000000000000000000000000000000096 -:10DA90000000000000000000000000000000000086 -:10DAA0000000000000000000000000000000000076 -:10DAB0000000000000000000000000000000000066 -:10DAC00000000980000482800482C180030982036F -:10DAD000104180008000000080000000000800006D -:10DAE0000000000000000000000000000000000036 -:10DAF0000000000000000000000000000000000026 -:10DB00000000000000000000000000000000000015 -:10DB10000000000000000000000000000000000005 -:10DB200000000000000000000000000000000000F5 -:10DB300000000000000000000000000000000000E5 -:10DB40000000000090880000A1100008880200007A -:10DB500009A00101880010001084080000000001E5 -:10DB600000A0000000000000000000000000000015 -:10DB700000000000000000000000000000000000A5 -:10DB80000000000000000000000000000000000095 -:10DB90000000000000000000000000000000000085 -:10DBA0000000000000000000000000000000000075 -:10DBB0000000000000000000000000000000000065 -:10DBC00000000000000040090189A109A0004000F8 -:10DBD00000848201A0851000000200010082000084 -:10DBE0000000000001000000000000000000000034 -:10DBF0000000000000000000000000000000000025 -:10DC00000000000000000000000000000000000014 -:10DC10000000000000000000000000000000000004 -:10DC200000000000000000000000000000000000F4 -:10DC300000000000000000000000000000000000E4 -:10DC4000000000000000000080100903A1218902EB -:10DC50008003030303058421801100090003008968 -:10DC60000000000000004000000000000000000074 -:10DC700000000000000000000000000000000000A4 -:10DC80000000000000000000000000000000000094 -:10DC90000000000000000000000000000000000084 -:10DCA0000000000000000000000000000000000074 -:10DCB0000000000000000000000000000000000064 -:10DCC0000000000000000000000010000800A1009B -:10DCD00089408300A1801080002100008084000022 -:10DCE0000000800000008000000000000000000034 -:10DCF0000000000000000000000000000000000024 -:10DD00000000000000000000000000000000000013 -:10DD10000000000000000000000000000000000003 -:10DD200000000000000000000000000000000000F3 -:10DD300000000000000000000000000000000000E3 -:10DD400000000000000000000000000003020208C4 -:10DD50001100100008028910830404010000A009CA -:10DD60008888C000020084008400040000000000D5 -:10DD700000000000000000000000000000000000A3 -:10DD80000000000000000000000000000000000093 -:10DD90000000000000000000000000000000000083 -:10DDA0000000000000000000000000000000000073 -:10DDB0000000000000000000000000000000000063 -:10DDC00000000000000000000000000000004842C9 -:10DDD00000E007000000500000E000000006000026 -:10DDE0000000000000000000000000000000000033 -:10DDF0000000000000000000000000000000000023 -:10DE00000000000000000000000000000000000012 -:10DE10000000000000000000000000000000000002 -:10DE200000000000000000000000000000000000F2 -:10DE300000000000000000000000000000000000E2 -:10DE400000000000000000000000000000000000D2 -:10DE50000FF00F8C0020002000AA00AA00000F0F76 -:10DE600063C363C30000F0F082828282000000007E -:10DE700000000000000000000000000000000000A2 -:10DE80000000000000000000000000000000000092 -:10DE90000000000000000000000000000000000082 -:10DEA0000000000000000000000000000000000072 -:10DEB0000000000000000000000000000000000062 -:10DEC0000000000000000000000000000000000052 -:10DED00000000F0F0F0F0020002000AA009A000082 -:10DEE0000F0F63C363C30000F0F0AAAAAAA2000048 -:10DEF0000000000000000000000000000000000022 -:10DF00000000000000000000000000000000000011 -:10DF10000000000000000000000000000000000001 -:10DF200000000000000000000000000000000000F1 -:10DF300000000000000000000000000000000000E1 -:10DF400000000000000000000000000000000000D1 -:10DF5000000000001B1BFF1B14001400554100149F -:10DF600000140014CF0F0F0FF0FFF0FB00000000B3 -:10DF700000000000000000000000000000000000A1 -:10DF80000000000000000000000000000000000091 -:10DF90000000000000000000000000000000000081 -:10DFA0000000000000000000000000000000000071 -:10DFB0000000000000000000000000000000000061 -:10DFC0000000000000000000000000000000000051 -:10DFD0000000000000000000FF0014001400555570 -:10DFE0000000003C003C00000000000000000000B9 -:10DFF0000000000000000000000000000000000021 -:10E000000000000000000000000000000000000010 -:10E010000000000000000000000000000000000000 -:10E0200000000000000000000000000000000000F0 -:10E0300000000000000000000000000000000000E0 -:10E0400000000000000000000000000000000000D0 -:10E0500000000000000000000061002080190001A5 -:10E06000006100008011000180610006001D0000B9 -:10E0700000000000000000000000000000000000A0 -:10E080000000000000000000000000000000000090 -:10E090000000000000000000000000000000000080 -:10E0A0000000000000000000000000000000000070 -:10E0B0000000000000000000000000000000000060 -:10E0C0000000000000000000000000000000000050 -:10E0D000000000000000000000000A050F00F0F63C -:10E0E0000096FF5AFF000C0C0CFF0000000028C730 -:10E0F00028D7000000000000000000000000000021 -:10E10000000000000000000000000000000000000F -:10E1100000000000000000000000000000000000FF -:10E1200000000000000000000000000000000000EF -:10E1300000000000000000000000000000000000DF -:10E1400000000000000000000000000000000000CF -:10E150000000000000000000000000003E3D3F3CC9 -:10E160000096F0F6FF55FF000C0CFF0C00000000BD -:10E17000FF00FF00000000000000000000000000A1 -:10E18000000000000000000000000000000000008F -:10E19000000000000000000000000000000000007F -:10E1A000000000000000000000000000000000006F -:10E1B000000000000000000000000000000000005F -:10E1C000000000000000000000000000000000004F -:10E1D00000000000000000000000000000005A7E67 -:10E1E0005A7E8282AAAAFFFFFB00BA30EAC0000072 -:10E1F000000000000000000000000000000000001F -:10E20000000000000000000000000000000000000E -:10E2100000000000000000000000000000000000FE -:10E2200000000000000000000000000000000000EE -:10E2300000000000000000000000000000000000DE -:10E2400000000000000000000000000000000000CE -:10E2500000000000000000000000000000000000BE -:10E26000003C003C82AAAAAAFFFF040030BAC0EA20 -:10E27000000000000000000000000000000000009E -:10E28000000000000000000000000000000000008E -:10E290004000000000000004000000000004000036 -:10E2A000000000000000000000000000000000006E -:10E2B00020000000400000001000000010000000DE -:10E2C00000030000000000000000400000001000FB -:10E2D000400000000000400000004000100010005E -:10E2E000A00011800000A08000000180000041001B -:10E2F00040000000000000000000200000000000BE -:10E3000020000000000000000000000021000000CC -:10E310000000000000040000000000004000009029 -:10E320000000400400004000009040004000400019 -:10E3300000404100000021000000400000000000FB -:10E3400040000000000040004000000000004000CD -:10E35000400000000000002000000020804000205D -:10E3600040400000201000004004002020204020F9 -:10E3700004002000000000200000004000200020D9 -:10E38000000000200000000000000000000000006D -:10E39000000000000000000000000000000000007D -:10E3A000000000000000000000000000000000006D -:10E3B0000800000000000000000000200000000035 -:10E3C0000000000000000000000000000800000045 -:10E3D0000000000000000000000008040800000029 -:10E3E000000000000800020001000100000003001E -:10E3F00000002000000802080000080008000000DB -:10E40000020000000080000000000000000000008A -:10E4100004000000040000000000000000000000F4 -:10E4200000000000000000004000000000000000AC -:10E4300000000000000000000000000000010000DB -:10E44000000000000000000040000000000000008C -:10E4500000080000000000000000000000000000B4 -:10E460000000000000080000000008000400000098 -:10E47000040800008000008400000000000000008C -:10E480000000000000080010000000000000000074 -:10E49000000000000000000000000000000000007C -:10E4A000000000000000000000000000000000006C -:10E4B000000000000000000000000000000000005C -:10E4C000000000001000000000000000000000003C -:10E4D000000000000000000000000000000000003C -:10E4E00000000000200000002000080000000000E4 -:10E4F00000000100000020000000000000000000FB -:10E5000000000000000000000040000000000000CB -:10E5100000000000000000000000000000000000FB -:10E5200000000000000000000000000000000000EB -:10E5300000000000000000000000000000000000DB -:10E5400000000000000000000000000000000000CB -:10E5500000000000000000000000000008000000B3 -:10E56000000000000000800000008000800000002B -:10E5700021000000040000008000000000000000F6 -:10E58000000000000000000800000000000400205F -:10E5900000090011004100000000001100400000CF -:10E5A000000000400000000000000000000000002B -:10E5B000000000000008000000090000000000004A -:10E5C000000000200000000000000000000000002B -:10E5D0000000000000000000000000000008000033 -:10E5E00000000200000020002100000002080804D2 -:10E5F00000000004000800040000002000210000CA -:10E6000000000000000000000000000000210000E9 -:10E6100040000400000000000000000000000000B6 -:10E6200000000000000000000000000000000000EA -:10E6300000000000000000000000000000000000DA -:10E6400000000000000100000000000800C0000001 -:10E6500000000000000000000000000000000000BA -:10E6600000000000000000000000A00011000000F9 -:10E67000890921004101110000010000000500028C -:10E68000000000000000000000000000000000008A -:10E69000000000000000000000000000000000007A -:10E6A000000000000000000000000000000000006A -:10E6B000000000000000000000000000000000005A -:10E6C000000000000000000000000000000000004A -:10E6D000000000000000000000000000000000003A -:10E6E00000000000000000000000040040004000A6 -:10E6F00020800800A000C000A00000000000000072 -:10E700000000000000000000000000000000000009 -:10E7100000000000000000000000000000000000F9 -:10E7200000000000000000000000000000000000E9 -:10E7300000000000000000000000000000000000D9 -:10E7400000000000000000000000000000000000C9 -:10E7500000000000000000000000000000000000B9 -:10E760000000000000000000000000008000000029 -:10E77000800080048988110000901188000000004A -:10E780000500000000000000000000080000000874 -:10E790000000000000000000000000000000000079 -:10E7A0000000000000000000000000000000000069 -:10E7B0000000000000000000000000000000000059 -:10E7C0000000000000000000000000000040000009 -:10E7D0000000000000000000000000000000000039 -:10E7E0000000000000000000000002000000010026 -:10E7F0000300040005008800A100020091890002C6 -:10E8000000200000000000000000000000090000DF -:10E810000000000000004020000000020400000092 -:10E820000000040000000000200020402000000044 -:10E8300000000000110000000000000200000000C5 -:10E8400004000000000000000000000000000000C4 -:10E850000000000000000000000011000000009017 -:10E8600000000000000000000000000000000000A8 -:10E8700004000400800084004002080480000810A6 -:10E880002100404020884188000000000000000076 -:10E890000000000000000000000000000000000078 -:10E8A0000000000000000000000000000000000068 -:10E8B0000000000000000000000000000000000058 -:10E8C0000000000000000000000000000000000048 -:10E8D0000000000000000000000000000000000038 -:10E8E0000000000000000000000000000000000028 -:10E8F000000000000100C004000011030003C088F4 -:10E9000088A105020383020404A1000000000000A6 -:10E9100000000000000000000000000000000000F7 -:10E9200000000000000000000000000000000000E7 -:10E9300000000000000000000000000000000000D7 -:10E9400000000000000000000000000000000000C7 -:10E9500000000000000000000000000000000000B7 -:10E9600000000000000000000000000000000000A7 -:10E9700000000000000041000084000011C041A11F -:10E9800000C100209185822180C180030000000029 -:10E990000000000000000000000000000000000077 -:10E9A0000000000000000000000000000000000067 -:10E9B0000000000000000000000000000000000057 -:10E9C0000000000000000000000000000000000047 -:10E9D0000000000000000000000000000000000037 -:10E9E0000000000000000000000000000000000027 -:10E9F000000000000000000008000000040409807E -:10EA00004010110921030580C0401180A1000000C1 -:10EA10000000000000008000000080008000000076 -:10EA200000000000000000000000000000000000E6 -:10EA300000000000000000000000000000000000D6 -:10EA400000000000000000000000000000000000C6 -:10EA500000000000000000000000000000000000B6 -:10EA600000000000000000000000000000000000A6 -:10EA7000000000000000000000A0010000000001F4 -:10EA8000A0A005008511830000020400A1820300FC -:10EA9000000000000000000008000200080008005C -:10EAA0000000000000000000000000000000000066 -:10EAB0000000000000000000000000000000000056 -:10EAC0000000000000000000000000000000000046 -:10EAD0000000000000000000000000000000000036 -:10EAE0000000000000000000000000000000000026 -:10EAF00000000000000000000000880001918583F4 -:10EB00000100C08800A1019040A000024040849014 -:10EB100088A00000000000000000000000000000CD -:10EB200000000000000000000000000000000000E5 -:10EB300000000000000000000000000000000000D5 -:10EB400000000000000000000000000000000000C5 -:10EB500000000000000000000000000000000000B5 -:10EB600000000000000000000000000000000000A5 -:10EB700000000000000000000000000000081191EB -:10EB8000052111098000039005C0C1830080400564 -:10EB9000418500C0000000000000000000000000EF -:10EBA0000000100000000000000000000000000055 -:10EBB0000000000000000000000000000000000055 -:10EBC0000000000000000000000000000000000045 -:10EBD000000000000009000000000000000000002C -:10EBE0000000000000000000000000000000000025 -:10EBF0000000000000000000000000000000048091 -:10EC000091A00400112000828500C0804041A082B4 -:10EC100082108280C005000000000000000000009B -:10EC20000080000000000000000000000000000064 -:10EC300000000000000000000000000000000000D4 -:10EC400000000000000000000000000000000000C4 -:10EC500000000000000000000000000000000000B4 -:10EC600000000000000000000000000000000000A4 -:10EC70000000000000000000000000000000000094 -:10EC800084C0919100A0010190C108A005409000AE -:10EC90000503A1834182080000000000000000007D -:10ECA00000000082000200000000000000000000E0 -:10ECB0000000000000000000000000000000000054 -:10ECC0000000000000000000000000000000000044 -:10ECD00000000000000000000081000007000000AC -:10ECE0000000000000000000000000000000000024 -:10ECF0000000000000000000000000000000000014 -:10ED00000000842100E007008400418200E0070049 -:10ED10006000842100E00700000000000000000007 -:10ED200000000000000000000000000000000000E3 -:10ED300000000000000000000000000000000000D3 -:10ED400000000000000000000000000000000000C3 -:10ED500000000000000000000000000000000000B3 -:10ED600000000000000000000000000000000000A3 -:10ED70000000000000000000000000000000000093 -:10ED800000000000FF000000F000F00000000000A4 -:10ED9000FF20D02000003C3C9900990000000000BA -:10EDA0000000000000000000000000000000000063 -:10EDB0000000000000000000000000000000000053 -:10EDC0000000000000000000000000000000000043 -:10EDD0000000000000000000000000000000000033 -:10EDE0000000000000000000000000000000000023 -:10EDF0000000000000000000000000000000000013 -:10EE0000000000000000FF000000F000F000000023 -:10EE10000008FF00F00000093C3D99009B03000042 -:10EE200000000000000000000000000000000000E2 -:10EE300000000000000000000000000000000000D2 -:10EE400000000000000000000000000000000000C2 -:10EE500000000000000000000000000000000000B2 -:10EE600000000000000000000000000000000000A2 -:10EE70000000000000000000000000000000000092 -:10EE80000000000000000000000000000000000082 -:10EE90000000000000000000000000000000000072 -:10EEA0000000000000000000000000000000000062 -:10EEB0000000000000000000000000000000000052 -:10EEC0000000000000000000000000000000000042 -:10EED0000000000000000000000000000000000032 -:10EEE0000000000000000000000000000000000022 -:10EEF0000000000000000000000000000000000012 -:10EF0000000000000000000000000F0F0F0F6666F9 -:10EF10006666C300C3000000000093C39FFF66063F -:10EF2000FF0F0000000000000000000000000C6E59 -:10EF30000C0C0000000000000000000000000000B9 -:10EF400000000000000000000000000000000000C1 -:10EF500000000000000000000000000000000000B1 -:10EF600000000000000000000000000000000000A1 -:10EF70000000000000000000000000000000000091 -:10EF80000000000000000000000000000000000081 -:10EF900000000000C242C000FFFF7FFF93C39FFF3D -:10EFA000FF9FFF0F000000000000000000000000B5 -:10EFB0000C0C0C0C00000000000000000000000021 -:10EFC0000000000000000000000000000000000041 -:10EFD0000000000000000000000000000000000031 -:10EFE0000000000000000020000000A00000000061 -:10EFF0000000000000000000000000000000000011 -:10F00000000000000000000000000000000000619F -:10F01000002C800900008061002280050000006152 -:10F020000022800500000000000000000000000039 -:10F0300000000000000000000000000000000000D0 -:10F0400000000000000000000000000000000000C0 -:10F0500000000000000000000000000000000000B0 -:10F0600000000000000000000000000000000000A0 -:10F070000000000000000000000000000000000090 -:10F080000000000000000000000000000000000080 -:10F090000000EBF3005F00005F435F43FF00FFFFF2 -:10F0A000F534F5F7FFFFF0F000000000000000006D -:10F0B0000000000000000000000000000000000050 -:10F0C0000000000000000000000000000000000040 -:10F0D0000000000000000000000000000000000030 -:10F0E0000000000000000000000000000000000020 -:10F0F0000000000000000000000000000000000010 -:10F1000000000000000000000000000000000000FF -:10F1100000000000EB30003F0000FFE3FFE3AF051D -:10F12000AFAFF534F5F755FF55F0000000000000D3 -:10F1300000000000000000000000000000000000CF -:10F1400000000000000000000000000000000000BF -:10F1500000000000000000000000000000000000AF -:10F16000000000000000000000000000000000009F -:10F17000000000000000000000000000000000008F -:10F18000000000000000000000000000000000007F -:10F19000000000000A0A0A0AF0F0FFFF00000F0F4B -:10F1A000000F000F00000F0F00C300C3000000009D -:10F1B000000000000000000000000000000000004F -:10F1C000000000000000000000000000000000003F -:10F1D000000000000000000000000000000000002F -:10F1E000000000000000000000000000000000001F -:10F1F000000000000000000000000000000000000F -:10F2000000000000000000000000000000000000FE -:10F21000000000000000AAAAAAAAF0F0F5F50082FA -:10F220000F8F414F000F00820F8F05C700C30000F2 -:10F2300000000000000000000000000000000000CE -:10F24000000000000000C0000000000000000000FE -:10F2500000000000000000000000000000000000AE -:10F26000000090000000000000000000000000000E -:10F27000000000000000C000C0000000000000020C -:10F280000000C00020000000000088000000000016 -:10F29000000010000000C00020002000000000005E -:10F2A00000000000000000000100200000800000BD -:10F2B000000000000000200000000000000000002E -:10F2C000000000000000000000000000000000003E -:10F2D00000004100000000000000000000000000ED -:10F2E000000000000000000000000000000000001E -:10F2F000000041000000000040000000100040003D -:10F3000000000000000000000000400000000000BD -:10F3100000000000000000000000400000000000AD -:10F320000000000020002000410004000000002038 -:10F3300000000020000000000000000000000000AD -:10F3400010000000000000000000000000000000AD -:10F3500000000000000000000000000000000000AD -:10F36000000000000000000000000000000000009D -:10F37000020000000000000000100000000000007B -:10F38000000000000010000000000000000000006D -:10F390000000000000000000000000000010000558 -:10F3A000000000000000000000000010000000004D -:10F3B0000000000002000000000000000200000049 -:10F3C0000000000900000000000000000000000034 -:10F3D000000000000000000000000000000000002D -:10F3E00000000000000000000000000020000000FD -:10F3F000000000000000000000000000000000000D -:10F4000000000000000000000000000000000008F4 -:10F410000000008400000010001000000010000830 -:10F4200000080008001000000000000000080008AC -:10F430000004008400040000000000000008000830 -:10F4400000080004000800000000000000000000A8 -:10F4500000000000000000000000000000000000AC -:10F46000000000000000000000000000000000009C -:10F47000000000000000000000000000000000008C -:10F48000000000000000000000000000000000007C -:10F490000000000000080000000000000000000064 -:10F4A00000000000001000002000200005002000E7 -:10F4B0000080009000040000000000080000000030 -:10F4C0000000000000080000000000000000000034 -:10F4D000000000000000000000000000000000002C -:10F4E000000000000000000000000000000000001C -:10F4F0000900000000000000000000000000000003 -:10F5000000000000000000000000000000000000FB -:10F5100000000000000000000000000000000000EB -:10F520000000000000000000000080008000A0003B -:10F5300080C0000400040001000000000000000082 -:10F5400000000000000000000000000000000000BB -:10F5500000000000000000000000000000000000AB -:10F56000000000000000000000000000000000009B -:10F57000000000000000000000000000000000008B -:10F58000000000001000000000000000000000006B -:10F59000000000000000000000000000000000006B -:10F5A00000000000000000000000400000200020DB -:10F5B00000200004002000000020000000000000E7 -:10F5C000000000000000000000000000040009002E -:10F5D00011000900202002884000040400200020BF -:10F5E00000202120008200000088000000000000B0 -:10F5F00000000900000000000000000000080008F2 -:10F6000000000008008400000008000800000088D6 -:10F6100000000000000000000000000000080000E2 -:10F6200000000000000000C0001000008000000981 -:10F6300000A1000100010001000000010000000025 -:10F6400000000000000000A0008200000000000098 -:10F6500000000000000000000000000000000000AA -:10F66000000000000000000000000000000000009A -:10F67000000000000003000000000008000000007F -:10F680000000000000000000000002000000000078 -:10F69000000000000000000000000000000000006A -:10F6A000000000000000000000000000000000005A -:10F6B000008000800104018500800100000000003E -:10F6C0000000000000000000080000000000000032 -:10F6D000000000000000000000000000000000002A -:10F6E000000000000000000000000000000000001A -:10F6F000000000000000000000000000000000000A -:10F7000000000000000000000000000000000000F9 -:10F7100000000000000000000000000000000000E9 -:10F720000000000000000000000000000084000055 -:10F7300000002120002020C104200004200000003F -:10F7400003000000000000000000000000000000B6 -:10F7500000000000000000000000000000000000A9 -:10F760000200000000000000000000000000000097 -:10F770000000000000000000000000000000000089 -:10F780000000000000000041000000000000000038 -:10F790000000000000110000000000080000000050 -:10F7A00000000000000000000000000090000000C9 -:10F7B00000000000010040824100008000000009BC -:10F7C000000000040000000000000000000008002D -:10F7D0000400000000100040020002880000000247 -:10F7E0000400000000881140110000900000000497 -:10F7F00000000000000000000000000011080000F0 -:10F800000084002000000200000002C00008000880 -:10F8100000A0008400000000410000000000000083 -:10F8200000080000000000000000000000080000C8 -:10F83000000000000008200000042000002000005C -:10F84000000000000001000800080000000800009F -:10F8500000000000000800000000000000000000A0 -:10F860000000000000000000000000000000000098 -:10F870000000000000000000000000000000000088 -:10F880000000000000000000000000000000000078 -:10F890000000000000000000000000000000000068 -:10F8A0000000000000000000000000000000000058 -:10F8B00000000000A000000041A1C09000859091D0 -:10F8C0008201004000A082840000000000000000CF -:10F8D0000000000000000000000000000000000028 -:10F8E0000000000000000000000000000000000018 -:10F8F0000000000000000000000000000000000008 -:10F9000000000000000000000000000000000000F7 -:10F9100000000000000000000000000000000000E7 -:10F9200000000000000000000000000000000000D7 -:10F9300000000000000000000000912080A10011E4 -:10F9400080830040008505000000000000000000EA -:10F9500000000000000000000000000000000000A7 -:10F960000000000000000000000000000000000097 -:10F970000000000000000000000000000000000087 -:10F980000000000000000000000000000000000077 -:10F990000000000000000000000000000000000067 -:10F9A0000000000000000000000000000000000057 -:10F9B0000000000000000000000000002000801196 -:10F9C000400440A0000005050011040000000000F4 -:10F9D0000000000000000000000000000000000027 -:10F9E0000000000000000000000000000000000017 -:10F9F0000000000000000000000000000000000007 -:10FA000000000000000000000000000000000000F6 -:10FA100000000000000000000000000000000000E6 -:10FA200000000000000000000000000000000000D6 -:10FA30000000000000000000000000000000A1A085 -:10FA4000820185C1A191A0000000A083C100000037 -:10FA500000000000000000000000000000000000A6 -:10FA60000000000000000000000000000000000096 -:10FA70000000000000000000000000000000000086 -:10FA80000000000000000000000000000000000076 -:10FA90000000000000000000000000000000000066 -:10FAA0000000000000000000000000000000000056 -:10FAB0000000000000000000000000000000000145 -:10FAC000C0A1014191C183A1A0400004908383A003 -:10FAD0000000000000000000000000000000000026 -:10FAE0000000000000000000000000000000000016 -:10FAF0000000000000000000000000000000000006 -:10FB000000000000000000000000000000000000F5 -:10FB100000000000000000000000000000000000E5 -:10FB200000000000000000000000000000000000D5 -:10FB300000000000000000000000001100000002B2 -:10FB400000200020118385409120008000858040A6 -:10FB50009180000000000000000000000000000094 -:10FB60000000000000000000000000000000000095 -:10FB70000000000000000000000000000000000085 -:10FB80000000000000000000000000000000000075 -:10FB90000000000000000000000000000000000065 -:10FBA0000000000000000000000000000000000055 -:10FBB0000000000000000000000000000000000045 -:10FBC00000000080858011414000111180008502F5 -:10FBD0000080400000000000000000000000000065 -:10FBE0000000000000000000000000000000000015 -:10FBF0000000000000000000000000000000000005 -:10FC000000000000000000000000000000000000F4 -:10FC100000000000000000000000000000000000E4 -:10FC200000000000000000000000000000000000D4 -:10FC300000000000000000000000000000000000C4 -:10FC400000000000001091841100C1C085019000E7 -:10FC5000A083A084830000000000000000000000DA -:10FC60000000000000000000000000000000000094 -:10FC70000000000000000000000000000000000084 -:10FC80000000000000000000000000000000000074 -:10FC90000000000000000000000000000000000064 -:10FCA0000000000000000000000000000000000054 -:10FCB0000000000000000000000000000000000044 -:10FCC0000000000000000000484200E00700500073 -:10FCD000500A00E0070000000000000000000000E3 -:10FCE0000000000000000000000000000000000014 -:10FCF0000000000000000000000000000000000004 -:10FD000000000000000000000000000000000000F3 -:10FD100000000000000000000000000000000000E3 -:10FD200000000000000000000000000000000000D3 -:10FD300000000000000000000000000000000000C3 -:10FD400000000000000000000000003C05C7F8189B -:10FD5000181800000F0F1414141400000000000005 -:10FD60000000000000000000000000000000000093 -:10FD70000000000000000000000000000000000083 -:10FD80000000000000000000000000000000000073 -:10FD90000000000000000000000000000000000063 -:10FDA0000000000000000000000000000000000053 -:10FDB0000000000000000000000000000000000043 -:10FDC000000000000000000000000000000005FF2F -:10FDD000F030303041004F0F1F14141400000000A9 -:10FDE0000000000000000000000000000000000013 -:10FDF0000000000000000000000000000000000003 -:10FE000000000000000000000000000000000000F2 -:10FE100000000000000000000000000000000000E2 -:10FE200000000000000000000000000000000000D2 -:10FE300000000000000000000000000000000000C2 -:10FE40000000000000000000000000000000FF04AF -:10FE5000FF00300C300CD7D7D7D75514FF3C00002B -:10FE60000000000000000000000000000000000092 -:10FE70000000000000000000000000000000000082 -:10FE80000000000000000000000000000000000072 -:10FE90000000000000000000000000000000000062 -:10FEA0000000000000000000000000000000000052 -:10FEB0000000000000000000000000000000000042 -:10FEC0000000000000000000000000000000000032 -:10FED000FB040000300C3F0F07F707F755D7FFFF73 -:10FEE0000000000000000000000000000000000012 -:10FEF0000000000000000000000000000000000002 -:10FF000000000000000000000000000000000000F1 -:10FF100000000000000000000000000000000000E1 -:10FF200000000000000000000000000000000000D1 -:10FF300000000000000000000000000000000000C1 -:10FF40000000000000000000000000610006000D3D -:10FF5000000000610020800100000061002180019C -:10FF60000000000000000000000000000000000091 -:10FF70000000000000000000000000000000000081 -:10FF80000000000000000000000000000000000071 -:10FF90000000000000000000000000000000000061 -:10FFA0000000000000000000000000000000000051 -:10FFB0000000000000000000000000000000000041 -:10FFC0000000000000000000000000000000000031 -:10FFD0004100000041145500FC0C0C0C3C003C009E -:10FFE00000F000F000000000000000000000000031 -:10FFF0000000000000000000000000000000000001 -:020000040030CA -:1000000000000000000000000000000000000000F0 -:1000100000000000000000000000000000000000E0 -:1000200000000000000000000000000000000000D0 -:1000300000000000000000000000000000000000C0 -:1000400000000000000000000000000000000000B0 -:10005000000041000000F114F500FC0C0C0C3C0009 -:100060003C0000F000F00000000000000000000074 -:100070000000000000000000000000000000000080 -:100080000000000000000000000000000000000070 -:100090000000000000000000000000000000000060 -:1000A0000000000000000000000000000000000050 -:1000B0000000000000000000000000000000000040 -:1000C0000000000000000000000000000000000030 -:1000D0000000000000000000FE053C00FF141414A6 -:1000E000FF0000000000F0F0000000000000000031 -:1000F0000000000000000000000000000000000000 -:1001000000000000000000000000000000000000EF -:1001100000000000000000000000000000000000DF -:1001200000000000000000000000000000000000CF -:1001300000000000000000000000000000000000BF -:1001400000000000000000000000000000000000AF -:1001500000000000000000000000FF003C00282814 -:100160002828FF0000000000F0F000000000000060 -:100170000000000000000000000011000800000066 -:1001800002000080200000001000200005002180F7 -:1001900000800100418001004080218020A0038078 -:1001A0000010880010800404208000880580210051 -:1001B0000080018021000500418000032000200014 -:1001C000000000002000000040002000040020008B -:1001D00000000000000000002100110020002000AD -:1001E000000400000000100040002000200000007B -:1001F00000000000000000001000010082008000EC -:100200000000000000089000000000009008C000FE -:10021000840200100200A0101000800808020003F1 -:100220009002000110008020C001101040112040F9 -:100230001000000208081000A020041000000000B8 -:1002400000002000000000204020100040000000BE -:10025000000020000000000020001000C00000008E -:10026000000000000000100000200000000000005E -:10027000000000000000000000208000400000009E -:100280000000090010000000000010000500000040 -:10029000000000000000000000000000000000005E -:1002A00000000000000000000000000000000080CE -:1002B000000000000000000000000000000000003E -:1002C000000000000000000000000000000000002E -:1002D00000000000000000000040000000000000DE -:1002E000001000000000000002000040000000407C -:1002F0000040000000200000084002100000010043 -:100300000000000084008000000000008000C000A9 -:1003100000000000000000000000000000000000DD -:1003200000000000000000000000000000000000CD -:1003300000020000000000000000000000000000BB -:1003400000000000000000000000000000000008A5 -:100350000000000000880000000400000000000011 -:100360000010000000040008000800080008000851 -:1003700000040008000000080008000000820000DF -:10038000200801000000000000000000090000003B -:10039000000000000000000000000000000000005D -:1003A0002003000300000000000002410080000064 -:1003B00000000000000802000041000001000003EE -:1003C0000000000000020000000300000000000028 -:1003D00000000008000800000000000800214000A4 -:1003E0000021202100030021C02100000021002164 -:1003F0000021002100000021002100000021000850 -:100400000021012120000000000000000000820007 -:1004100000000000000000000000000000000000DC -:1004200000008000000000000000000080000802C2 -:10043000000000000800080080000000000002002A -:1004400000000000000000000000000000000000AC -:100450000000000004000000000000000000000098 -:100460000000000088000000000000000000000004 -:1004700000840000000000000000000000000000F8 -:1004800021004100100000002000000400000000D6 -:100490000000000000040000000000004000A00078 -:1004A0000400000004000000000000000000000044 -:1004B000000000000000000000000000000000003C -:1004C000000000000000000000000000000000002C -:1004D000000000000000000000000000000000001C -:1004E00000000000000000000011000900110009D8 -:1004F00000000000000010000000000000000000EC -:100500000000000000008200000000000001000068 -:10051000000000400000000100000000009000000A -:1005200000000000000000000000000000000000CB -:1005300000000000000000000000000000000000BB -:1005400000000000000000000000000000000000AB -:10055000000000000040000000000000000000005B -:10056000000000000000000000000000000000008B -:100570000000000400000000000000000000000077 -:10058000000000200000000000000000000000004B -:10059000000000000000000000000000000000005B -:1005A00000000003000000000005020000009003AE -:1005B0000810000020410008014100030000002154 -:1005C00000050000000000020008000000210008F3 -:1005D0000008000800000008000000000000000300 -:1005E00000000000004100080000100800000005A5 -:1005F000000000000800000000000008001000419A -:100600000000C0000000000000000808000000001A -:1006100000000000000000000000000000000000DA -:1006200000000000000000000000000000000000CA -:1006300000000000000000000000020000000000B8 -:1006400000000000000000000000000000000000AA -:10065000000000000000000000000000000000009A -:10066000000000000000000000000000000000008A -:10067000000000000000000000000000000000007A -:1006800000000000000000900000000000000000DA -:100690000000000000002040400040402000020018 -:1006A0000000000000000021000500000002000022 -:1006B0000021000082210200000000000000002153 -:1006C000000000410008004100000000002100007F -:1006D00000000000001000410008000000000000C1 -:1006E00000000000000800000011004100000000B0 -:1006F00000000000000000040008000300000005E6 -:10070000000008200008000800110000000000039D -:1007100000000000000000000000000000000000D9 -:100720008000000000000000000000000000000049 -:1007300000000000000000000000000000000000B9 -:1007400000000000000000000000000000000000A9 -:100750000000000000000000000000000000000099 -:100760000000000000000000000000000000000089 -:10077000020020000000000400000000000000044F -:100780000000000000000000000000000000000069 -:1007900000000000C101000010850100A00001411F -:1007A000C0048200820000108204010000000141A8 -:1007B000C0000000C1000000C18301000000004033 -:1007C000C004410001000084C0900000C00001117D -:1007D000C000000100000000000000000000000058 -:1007E00000000110000000000002101000000000D6 -:1007F00000010000000000000000000000000000F8 -:100800000000011000000000000288080000000045 -:10081000000100000009A003000004034141004161 -:100820004183800000041105008080804141004127 -:1008300041C080000041C1410000C183041100118A -:1008400011830080A00441410080800000118011CC -:100850000883000000000900000000000002000002 -:1008600000000010048000021100000080800000E1 -:100870000000004100000900000000000009000025 -:100880000000001004800002110000000080000041 -:10089000000000410000410003400004008041418D -:1008A0000441004100410885804000400900C1002A -:1008B000A14100C100414100084100C100000910F0 -:1008C00040410000000385C18041004110008800C4 -:1008D000084100C180090000000021000000000064 -:1008E0000000080000000200090084000000110060 -:1008F00080000000000280110000210000000000C4 -:100900000000080000000200090084000000100040 -:10091000800000000002800400000101008400C08B -:100920000001000100010001034008020001000075 -:10093000400020010085C0C10000010100C100008D -:100940000000010100000000024020C000010184FD -:100950004100110100C18200000000000000000001 -:10096000000000000100000000000200081000006C -:100970000000400000000000C00000000000000077 -:1009800000000000010000000000020082100000D2 -:1009900000C0400000000000C00000880000A185E9 -:1009A000010000000000C182820000890001C02116 -:1009B000010000000000C101000000400000C183F0 -:1009C0000000000000010103820000080000C14097 -:1009D0000000000000010100000000000000000015 -:1009E00000000000000000000000C00000880000BF -:1009F00000000000000000000001000000000000F6 -:100A000000000000000000000000C000008800009E -:100A10000100000000000000000100000000004193 -:100A200003C0410000000041C18400000020000319 -:100A30008402040000000021C14000000080004149 -:100A4000C1830000000000401005400000C10041CB -:100A5000C1C1000000000010404100000000000083 -:100A600000000000000000000000004180100000B5 -:100A70000000110000000000000000410000000024 -:100A80000000000000000000000000418010000095 -:100A9000000003000000000000000041000004000E -:100AA000804080C1000041020041C0C103C14084B8 -:100AB00000808080000041410041808003C1C188E6 -:100AC000804180C100000340800020C10889C141ED -:100AD0000080008000004041004080800311000041 -:100AE0000009800000C100000002000009000000B1 -:100AF0000041000000080000000000000000100994 -:100B00000009800000C10000000200000900000090 -:100B100000410040000800000000000000000484C4 -:100B20000510820108C100000001040141C101C19A -:100B3000A109002004C000000001000140C001C163 -:100B400040C1200182400000000020008509011002 -:100B50004088004090C0000001010001400801A051 -:100B60000000000020000040000000008800C000DD -:100B7000000000C1020000010000000000000000B1 -:100B800000840000200000400000000088001000E9 -:100B9000000000C102010001000000000000000090 -:100BA00000090000000000004842000000000000B2 -:100BB0004842841200E006000042000000000000ED -:100BC0004842000000000000484200000000000011 -:100BD0004842841200E0060050420000000000007D -:100BE000484200000000000000000000000000007B -:100BF00000000082811200E00700480000000000B1 -:100C000000000000000000000000000000000000E4 -:100C100000000082811200E0070048000000000090 -:100C200000000000000000000000000000000000C4 -:100C300000000000000000000000000000000000B4 -:100C400000000000000000000000000000000000A4 -:100C50000000000000000000000000000000000094 -:100C60000000000000000000000000000000000084 -:100C70000000000000000000000000000000000074 -:100C80000000000000000000000000000000000064 -:100C90000000000000000000000000000000000054 -:100CA0000000000000000000000000000000000044 -:100CB0000000000000000000000000000000000034 -:100CC0000000000000000000000000000000000024 -:100CD0000000000000000000000000000000000014 -:100CE0000000000000000000000000000000000004 -:100CF00000000000000000000000000000000000F4 -:100D000000000000000000000000000000000000E3 -:100D100000000000000000000000000000000000D3 -:100D20000000000000000000757B000000000000D3 -:100D300000000000000000000000000000000000B3 -:100D4000000000000000DEAE757B00000000000027 -:100D50000000000000000000000000000000000093 -:100D6000000000000000DEAE0000257B0000000057 -:100D70000000000000000000000000000000000073 -:100D80000000000000000000DEA4257B0000000041 -:100D90000000000000000000000000000000000053 -:100DA0000000000000000000DEA460DE0340000040 -:100DB000000000000231E0000000000000000C40D4 -:100DC00000000000000002C07B0660DE034000005F -:100DD000000000000231E0000000000000000C40B4 -:100DE00000000000000002C07B06000061260340F6 -:100DF0000000000000000230A00000000000000021 -:100E00000C4000000000000002C064866126034020 -:100E10000000000000000230A00000000000000000 -:100E20000C4000000000000002C0648600000000CA -:100E300000000000000000000000000000000000B2 -:100E400000000000000000000000000000000000A2 -:100E50000000000000000000000000000000000092 -:100E6000000000000400000000000000000000007E -:100E7000100000000000000000080000000000005A -:100E80000000000000002000000000000000000042 -:100E90000000000000000000000000000000000052 -:100EA0000000000010000000000500000008000025 -:100EB0000000000000000000000000000000000032 -:100EC0000000000000000000000000000000000022 -:100ED0000000000000004000404000004000000012 -:100EE00000000000000010000000000000000000F2 -:100EF0000000000000C000004000000000000000F2 -:100F000000000000000000000000000000000000E1 -:100F100000200000000000000000000000000000B1 -:100F200000000000000000000000000000000000C1 -:100F300000000000000000000000000000000000B1 -:100F400000000000000000000000000000000000A1 -:100F50000000000000000010000000000040000041 -:100F60000000000000000040000000000000000041 -:100F70000000000000000000000000000000104021 -:100F80000008000000000000101000000000000039 -:100F900000400200000000000000020002000040CB -:100FA00000000840000000000000000000000000F9 -:100FB00000400000000000000000000000000000F1 -:100FC0000000000000000000000000000000000021 -:100FD0000000000000000000000000080000000009 -:100FE0000000000000000000000000000000000001 -:100FF00000000000000000080008000000100010C1 -:1010000000000000000800000000000000000000D8 -:101010000008000000080040030803000008000862 -:101020000008000800080008000800080008001078 -:1010300002080000000000000000000000000000A6 -:10104000010000000000000000000000000000009F -:101050000000000000000008000000000000000088 -:101060000000000000000000000000000000000080 -:101070000000000000000008004100000000000027 -:101080000000000000000000000000080000000058 -:101090000008000000000000000800000008000038 -:1010A0000000000000000000000000000000000040 -:1010B000001000000000000000000000000000849C -:1010C000000008C000000000000000000000000058 -:1010D0000000000000000000000000000000000010 -:1010E000000000000084001000000000000000006C -:1010F00000000000000000000088000000A00000C8 -:10110000000800000000000000000008000000A02F -:101110000008000000000000000000000000008443 -:10112000000000000000000000000008008200A095 -:10113000000800000088000000000000000000001F -:10114000000000000000000000000000000000009F -:10115000000000000000000000000000000000008F -:10116000000000000000000000000000000000007F -:10117000000000000000000000000000000000006F -:10118000000000000100000000000100010001005B -:10119000000001000100010000000000000000004C -:1011A00000000000008000800080000000000000BF -:1011B000000000000000000000000000000000002F -:1011C000000000000000000000000000000000001F -:1011D000000000000000000000000000000000000F -:1011E00000000000000000000000000000000000FF -:1011F00000000000000000000000000000000000EF -:1012000000000000000002000000000002000200D8 -:1012100002000000020002000200000000000000C6 -:1012200000000004000000400040004000000000FA -:1012300000000000000000000000000000000000AE -:10124000000000000000000000000000000000009E -:10125000000000000000000000000000000000008E -:10126000000000000000000000000000000000007E -:101270000100000000000000000800000000000065 -:10128000000000000000000000000000000000005E -:10129000000000000000000000000000000000004E -:1012A00000000000000000000000000000000041FD -:1012B000000000000000000000210000000000000D -:1012C00000C0000000000008000000000000000056 -:1012D00000A000000000000000000000000000006E -:1012E00000840008000000841100000000000008D5 -:1012F00000A0080000001100000200000002000031 -:101300000000000000000000000000A0000800082D -:10131000000000A000000008000000000000000025 -:101320000000000000000000000000A0000800080D -:10133000000200A0000000080800000000000000FB -:10134000000000000000000000000000000000009D -:10135000004000000000000000000000000000004D -:101360000000000000000000000000080000000075 -:101370000021000000000003000000000000000049 -:10138000000000000000000000000000000000005D -:10139000000000000000000001000000000000004C -:1013A0000100008001000100008001000000000039 -:1013B000001000000000000000000000000000001D -:1013C000000000000000000000000000000000001D -:1013D000000000000000000000000000000000000D -:1013E00000000000000000000000000000000000FD -:1013F00000000000000000000000000000000000ED -:1014000000000000000000000000000000000000DC -:1014100000000000000000000000020000000000CA -:10142000000002002040020402040040020000000C -:1014300000000000000000000000000000000000AC -:10144000000000000000000000000000000000009C -:10145000000000000000000000000000000000008C -:10146000000000000000000000000000000000007C -:10147000000000000000000000000000000000006C -:10148000000000000000000000000000000000005C -:10149000000000000000000000000000000000004C -:1014A00000000000000000C00000000000C000C0FC -:1014B0000000000000C0000000000000000000006C -:1014C000000000000000000000000000000000001C -:1014D000000000000000000000000000000000000C -:1014E00000000000000000000000000000000000FC -:1014F00000000000000000000000000000000000EC -:1015000000000000000000000000000000000000DB -:1015100000000000000000000000000000000000CB -:10152000000000000000000000800000000000003B -:10153000008000000000000000000000000000002B -:10154000000000000000000000000000000000009B :10155000000000000000000000000000000000008B :10156000000000000000000000000000000000007B -:10157000000000000000000000000000000000006B +:101570000F0F0000FFFF000000FF0000FFFF000052 :10158000000000000000000000000000000000005B :10159000000000000000000000000000000000004B -:1015A00000000000000000008000000000000000BB -:1015B000800000000000000080000000000000002B +:1015A000000000000000000000000000000000003B +:1015B000000000000000000000000000000000002B :1015C000000000000000000000000000000000001B :1015D000000000000000000000000000000000000B :1015E00000000000000000000000000000000000FB -:1015F00000000000000000000000000000000000EB +:1015F00000000F0F00000000000000FF00000000CE :1016000000000000000000000000000000000000DA :1016100000000000000000000000000000000000CA -:1016200000000000000000000000C00000000000FA -:101630000000C000000000000000C000000000002A +:1016200000000000000000000000000000000000BA +:1016300000000000000000000000000000000000AA :10164000000000000000000000000000000000009A :10165000000000000000000000000000000000008A :10166000000000000000000000000000000000007A -:10167000000000000000000000000000000000006A -:10168000000000000000000000000000000000005A +:101670000000000005002A00054000A815402A06C9 +:10168000054C00A800000000000000000000000061 :10169000000000000000000000000000000000004A -:1016A0000000000000000000000000000000000436 -:1016B0000000000000C000840000000000C0000026 +:1016A000000000000000000000000000000000003A +:1016B000000000000000000000000000000000002A :1016C000000000000000000000000000000000001A :1016D000000000000000000000000000000000000A :1016E00000000000000000000000000000000000FA :1016F00000000000000000000000000000000000EA -:1017000000000000000000000000000000000000D9 +:101700005555FFFF00000000000000000000000031 :1017100000000000000000000000000000000000C9 :1017200000000000000000000000000000000000B9 -:1017300000000000000000800000000000000080A9 +:1017300000000000000000000000000000000000A9 :101740000000000000000000000000000000000099 :101750000000000000000000000000000000000089 :101760000000000000000000000000000000000079 :101770000000000000000000000000000000000069 -:101780000000000000000000000000000000000059 +:1017800000005555000000000000000000000000AF :101790000000000000000000000000000000000049 :1017A0000000000000000000000000000000000039 -:1017B00000008000000000000000800080000000A9 +:1017B0000000000000000000000000000000000029 :1017C0000000000000000000000000000000000019 :1017D0000000000000000000000000000000000009 :1017E00000000000000000000000000000000000F9 :1017F00000000000000000000000000000000000E9 -:1018000000000000000000000000000000000000D8 +:10180000000000000000F0F00000000000000000F8 :1018100000000000000000000000000000000000C8 -:10182000000000000000000000000000000000A018 -:1018300000000000C0000088A0000000C0001000F0 -:101840000084000000000000000000000000000014 +:1018200000000000000000000000000000000000B8 +:1018300000000000000000000000000000000000A8 +:101840000000000000000000000000000000000098 :101850000000000000000000000000000000000088 :101860000000000000000000000000000000000078 :101870000000000000000000000000000000000068 -:101880000000000000000000000000000000000058 +:101880000000000000000000F0F000000000000078 :101890000000000000000000000000000000000048 :1018A0000000000000000000000000000000000038 :1018B0000000000000000000000000000000000028 @@ -197056,47 +192959,47 @@ :1018E00000000000000000000000000000000000F8 :1018F00000000000000000000000000000000000E8 :1019000000000000000000000000000000000000D7 -:1019100000000000000000000000000000000000C7 -:101920000000000000000000FFFFFFFFFFFFFFFFBF -:10193000FFFFFFFFFFFFFFFFFFFF0F0FFFFFC3C30F -:10194000FFFFFF00FFFFC3C3000000000000000016 +:1019100000000000000000000000000000000400C3 +:1019200000000000000000010000000000000000B6 +:1019300000000000000000000000000000000000A7 +:101940002000000000000000000000000000000077 :101950000000000000000000000000000000000087 -:101960000000000000000000000000000000000077 +:101960002000000000000000000000000000000057 :101970000000000000000000000000000000000067 -:101980000000000000000000000000000000000057 -:101990000000000000000000000000000000000047 -:1019A00000000000000000000000FFFFFFFFFFFF3D -:1019B000FFFFFFFFFFFFFFFFFFFFFFFF0F0FFFFF17 -:1019C000C3C3FFFFFF00FFFFC3C300000000000010 -:1019D0000000000000000000000000000000000007 -:1019E00000000000000000000000000000000000F7 -:1019F00000000000000000000000000000000000E7 -:101A000000000000000000000000000000000000D6 +:101980000000000000000000000004000000000053 +:101990000000030000020000000000000000000042 +:1019A0000000040000000200000000000000000031 +:1019B00000000000000021001000000000000000F6 +:1019C000000000000000000200000000040200000F +:1019D000000200020000000000000000000200C041 +:1019E0000002000240004000000000000000000073 +:1019F00000000000020000000000020000000000E3 +:101A00000200900000009000900000000000000024 :101A100000000000000000000000000000000000C6 -:101A20000000000000000000FFFFFFFFFFFFFFFFBE -:101A3000FFFFFFFFFFFFFFFFAAAAFFFFC3C3FFFFD8 -:101A4000AAAAFFFFC3C3FFFFFFFF000000000000C2 -:101A50000000000000000000000000000000000086 -:101A60000000000000000000000000000000000076 +:101A200000100400000000000200000000000000A0 +:101A300000000000000000000000000000000000A6 +:101A40000010000000000000001000000000000076 +:101A5000001000000200000000000000000008006C +:101A60000000000000000200000002100000000062 :101A70000000000000000000000000000000000066 -:101A80000000000000000000000000000000000056 +:101A80000200000000000000000000000000000054 :101A90000000000000000000000000000000000046 -:101AA00000000000000000000000FFFFFFFFFFFF3C -:101AB000FFFFFFFFFFFFFFFFFFFFAAAAFFFFC3C358 -:101AC000FFFFAAAAFFFFC3C3FFFF00000000000042 +:101AA0000000000000000000000000000000000036 +:101AB0000000000000000000000000000000000026 +:101AC0000000000000000000000000000000000016 :101AD0000000000000000000000000000000000006 -:101AE00000000000000000000000000000000000F6 +:101AE00000000000000004000400000000000000EE :101AF00000000000000000000000000000000000E6 :101B000000000000000000000000000000000000D5 -:101B100000000000000000000000000000000000C5 -:101B200000000000000000000000000000001002A3 -:101B300040008000002010024000800000201202BF -:101B400040828000002092024082800000208A02B1 +:101B100000000000010000000000000000000000C4 +:101B200000000000000000000000000000000000B5 +:101B300000000000000000000000000000000000A5 +:101B40000000000000000000000000000000000095 :101B50000000000000000000000000000000000085 :101B60000000000000000000000000000000000075 :101B70000000000000000000000000000000000065 :101B80000000000000000000000000000000000055 -:101B90000000000000000000000000000000000045 +:101B90000000000000002000000000000000000025 :101BA0000000000000000000000000000000000035 :101BB0000000000000000000000000000000000025 :101BC0000000000000000000000000000000000015 @@ -197104,148 +193007,148 @@ :101BE00000000000000000000000000000000000F5 :101BF00000000000000000000000000000000000E5 :101C000000000000000000000000000000000000D4 -:101C100000000000000000000000000000000000C4 -:101C200000000000000000000000000000000000B4 +:101C100000000000000001800180000000000000C2 +:101C200000000002000000000000000000000000B2 :101C300000000000000000000000000000000000A4 :101C40000000000000000000000000000000000094 :101C50000000000000000000000000000000000084 -:101C60000000000000000000000000000000000074 +:101C60000000000000000000004000000000000034 :101C70000000000000000000000000000000000064 :101C80000000000000000000000000000000000054 -:101C90000000000000000000000000000000000044 +:101C900000000000000000002020022000000000E2 :101CA0000000000000000000000000000000000034 :101CB0000000000000000000000000000000000024 :101CC0000000000000000000000000000000000014 :101CD0000000000000000000000000000000000004 :101CE00000000000000000000000000000000000F4 :101CF00000000000000000000000000000000000E4 -:101D000000000000000000000000000000000000D3 -:101D100000000000000000000000000000000000C3 +:101D000000000000000000000000000000002000B3 +:101D100000009000000001800000000010000000A2 :101D200000000000000000000000000000000000B3 :101D300000000000000000000000000000000000A3 :101D40000000000000000000000000000000000093 :101D50000000000000000000000000000000000083 :101D60000000000000000000000000000000000073 :101D70000000000000000000000000000000000063 -:101D80000000000010001000000000000000000033 -:101D9000000000001000000800000000000000002B -:101DA0000000400040002000000010000000000083 +:101D80000000000000000000000000000000000053 +:101D900000C000000000008410402100000080848A +:101DA0000000000000000000000000000000000033 :101DB0000000000000000000000000000000000023 -:101DC000000000000000000040004000820082008F -:101DD00082080000000000008800880000108808C9 -:101DE0008800000000000000200800000000000043 +:101DC0000000000000000000000000000000000013 +:101DD0000000000000000000000000000000000003 +:101DE00000000000000000000000000000000000F3 :101DF00000000000000000000000000000000000E3 -:101E00000000000000004000000040000000000052 -:101E10000000000000000000400000000000000082 -:101E200000400000102010004000000000000000F2 -:101E30000000000000000020000010000000000072 -:101E400000000000002000204000102000000000E2 +:101E000000000000000000000000000000000000D2 +:101E10000000000088000000000000000100000039 +:101E200000020000000000090002000000000000A5 +:101E300000000000000000000000000000000000A2 +:101E40000000000000000000000000000000000092 :101E50000000000000000000000000000000000082 -:101E60000000000000000000000000200000000052 +:101E60000000000000000000000000000000000072 :101E70000000000000000000000000000000000062 :101E80000000000000000000000000000000000052 -:101E90000000000000000000004000000000000002 -:101EA0000000000000000000000000000000000032 -:101EB00000000000004008000000000000000010CA -:101EC00000000040004000000800000008400840FA -:101ED00000000000000008400010000000000200A8 -:101EE0000000004000400000020000000000000070 -:101EF00000000300000000000000000003000000DC -:101F000000000400000000000000000004000000C9 -:101F100000000000000000000000000000000000C1 -:101F200000000000000000000000000000000000B1 -:101F30000000000000000000000000000000000899 -:101F40000008000000000000000000080000000081 -:101F50000000000000000000000000080000000871 -:101F60000008000800000008000000080000000051 +:101E90000000000000000000000000000000202002 +:101EA0000000000000002000000000000000000012 +:101EB0000000000000000000000000000000000022 +:101EC0000000000000000000000000000000000012 +:101ED0000000000000000000000000000000000002 +:101EE00000000000000000000000000000000000F2 +:101EF00000000000000000000000000000000000E2 +:101F000000000000000000000000000000000000D1 +:101F100000000000000000000000000000000100C0 +:101F20009000000000000000000000000000000021 +:101F300000000000000000000000000000000000A1 +:101F40000000000000000000000000000000000091 +:101F50000000000000000000000000000000000081 +:101F60000000000000000000000000000000000071 :101F70000000000000000000000000000000000061 :101F80000000000000000000000000000000000051 :101F90000000000000000000000000000000000041 -:101FA0000000000000000000000000080000000029 +:101FA0001100A1000000000000000000000000007F :101FB0000000000000000000000000000000000021 -:101FC00000000000000800000008000002000000FF +:101FC0000000000000000000000000000000000011 :101FD0000000000000000000000000000000000001 :101FE00000000000000000000000000000000000F1 :101FF00000000000000000000000000000000000E1 :1020000000000000000000000000000000000000D0 :1020100000000000000000000000000000000000C0 -:1020200000000000000000000000000000000000B0 -:1020300004000000000000A0000000A0000000005C -:102040000000000000000000000000000000800010 +:102020000000000809800009000000000000000016 +:1020300000000000000000000000000000000000A0 +:102040000000000000000000000000000000000090 :102050000000000000000000000000000000000080 -:1020600000000000000000000000000000840000EC +:102060000000000000000000000000000000000070 :102070000000000000000000000000000000000060 :102080000000000000000000000000000000000050 :102090000000000000000000000000000000000040 -:1020A0000000000000000000000000000000000030 +:1020A00000000000000101020000008800000000A4 :1020B0000000000000000000000000000000000020 -:1020C0000000000000000000000090000000400040 -:1020D00000000000080020000000880090000000C0 +:1020C0000000000000000000000000000000000010 +:1020D0000000000000000000000000000000000000 :1020E00000000000000000000000000000000000F0 :1020F00000000000000000000000000000000000E0 :1021000000000000000000000000000000000000CF :1021100000000000000000000000000000000000BF -:1021200000000000000000000000000000000000AF -:10213000000000000000000000000000000000009F +:10212000000000000000C1008888020000000000DC +:10213000020000000000000000000000000000009D :10214000000000000000000000000000000000008F :10215000000000000000000000000000000000007F :10216000000000000000000000000000000000006F :10217000000000000000000000000000000000005F :10218000000000000000000000000000000000004F :10219000000000000000000000000000000000003F -:1021A000000000000000000000000000000000002F -:1021B000000000000000000000000000000000001F +:1021A00000000000000000004100008080004100AD +:1021B000000080000000000000000000000000009F :1021C000000000000000000000000000000000000F -:1021D00000000000000000000000000000000010EF +:1021D00000000000000000000000000000000000FF :1021E00000000000000000000000000000000000EF :1021F00000000000000000000000000000000000DF :1022000000000000000000000000000000000000CE :1022100000000000000000000000000000000000BE -:102220000000000000A00000000000080000000006 -:10223000000000000000000000000000000000841A +:10222000000000000000000000000011100000800D +:10223000000000000000000000000000000000009E :10224000000000000000000000000000000000008E :10225000000000000000000000000000000000007E -:1022600000840000000000000000000000000000EA -:102270000000000000000000000000C0000000009E +:10226000000000000000000000000000000000006E +:10227000000000000000000000000000000000005E :10228000000000000000000000000000000000004E :10229000000000000000000000000000000000003E -:1022A000000000000000000000000000000000002E -:1022B000000000000000000000000000000000001E -:1022C0000000000000000000000800000000000006 -:1022D00040000000000000004000900000000000EE -:1022E00000000000000000000000004000090000A5 +:1022A000000000000000000000000000000100002D +:1022B00000400000000000000000000000000000DE +:1022C000000000000000000000000000000000000E +:1022D00000000000000000000000000000000000FE +:1022E00000000000000000000000000000000000EE :1022F00000000000000000000000000000000000DE :1023000000000000000000000000000000000000CD :1023100000000000000000000000000000000000BD :1023200000000000000000000000000000000000AD -:10233000000000000000000000000000000000009D +:1023300000E0070082000000000000000000000034 :10234000000000000000000000000000000000008D :10235000000000000000000000000000000000007D :10236000000000000000000000000000000000006D -:1023700000000000000000000000000000840000D9 +:10237000000000000000000000000000000000005D :10238000000000000000000000000000000000004D :10239000000000000000000000000000000000003D :1023A000000000000000000000000000000000002D -:1023B000000000000000000000000000000000001D +:1023B00000000000F0F0000000000000000000003D :1023C000000000000000000000000000000000000D :1023D00000000000000000000000000000000000FD -:1023E0000000A01000A000C0C0A00000000000007D +:1023E00000000000000000000000000000000000ED :1023F00000000000000000000000000000000000DD :1024000000000000000000000000000000000000CC :1024100000000000000000000000000000000000BC :1024200000000000000000000000000000000000AC -:10243000000000000000000000000000000000009C +:10243000000000000000F0F00000000000000000BC :10244000000000000000000000000000000000008C :10245000000000000000000000000000000000007C -:1024600000000000008000000000000000000000EC +:10246000000000000000000000000000000000006C :10247000000000000000000000000000000000005C :10248000000000000000000000000000000000004C :10249000000000000000000000000000000000003C :1024A000000000000000000000000000000000002C -:1024B000000000000000000000000000000000001C +:1024B000000000000000FFFF0000FFFF0000000020 :1024C000000000000000000000000000000000000C :1024D00000000000000000000000000000000000FC -:1024E00080000000800000000085008080800000E7 +:1024E00000000000000000000000000000000000EC :1024F00000000000000000000000000000000000DC :1025000000000000000000000000000000000000CB :1025100000000000000000000000000000000000BB @@ -197253,113 +193156,113 @@ :10253000000000000000000000000000000000009B :10254000000000000000000000000000000000008B :10255000000000000000000000000000000000007B -:10256000000004000000C000040084C0840408C00F +:10256000000000000000000000000000000000006B :10257000000000000000000000000000000000005B :10258000000000000000000000000000000000004B :10259000000000000000000000000000000000003B :1025A000000000000000000000000000000000002B -:1025B000000000000000000000000000000000001B +:1025B000000000000000000005402A06054C00A8AD :1025C000000000000000000000000000000000000B :1025D00000000000000000000000000000000000FB -:1025E00000000000000000000000C18400C0C00422 -:1025F00082840000000000000000000000000000D5 +:1025E00000000000000000000000000000000000EB +:1025F00000000000000000000000000000000000DB :1026000000000000000000000000000000000000CA :1026100000000000000000000000000000000000BA :1026200000000000000000000000000000000000AA -:10263000000000000000000000000000000000009A +:10263000000000000000000000000000FF00FFFF9D :10264000000000000000000000000000000000008A :10265000000000000000000000000000000000007A -:102660000000000000000000000000004100000029 -:102670008000840000000000000000000000000056 +:10266000000000000000000000000000000000006A +:10267000000000000000000000000000000000005A :10268000000000000000000000000000000000004A :10269000000000000000000000000000000000003A :1026A000000000000000000000000000000000002A -:1026B000000000000000000000000000000000001A +:1026B0000000000000000000000000000000FF001B :1026C000000000000000000000000000000000000A :1026D00000000000000000000000000000000000FA :1026E00000000000000000000000000000000000EA -:1026F0000002008000000000000000000000000058 +:1026F00000000000000000000000000000000000DA :1027000000000000000000000000000000000000C9 :1027100000000000000000000000000000000000B9 :1027200000000000000000000000000000000000A9 :102730000000000000000000000000000000000099 -:102740000000000000000000000000000000000089 +:102740000000F0F0000000000000000000000000A9 :102750000000000000000000000000000000000079 -:1027600000000000000000000000000000820000E7 -:10277000820040058284400000000000000000004C +:102760000000000000000000000000000000000069 +:102770000000000000000000000000000000000059 :102780000000000000000000000000000000000049 :102790000000000000000000000000000000000039 :1027A0000000000000000000000000000000000029 :1027B0000000000000000000000000000000000019 -:1027C0000000000000000000000000000000000009 +:1027C00000000000F0F00000000000000000000029 :1027D00000000000000000000000000000000000F9 :1027E00000000000000000000000000000000000E9 -:1027F000000000000000000048420000000000004F +:1027F00000000000000000000000000000000000D9 :1028000000000000000000000000000000000000C8 :1028100000000000000000000000000000000000B8 :1028200000000000000000000000000000000000A8 :102830000000000000000000000000000000000098 :102840000000000000000000000000000000000088 -:102850000000000000000000000000000000000078 -:102860000000000000000000000000000000000068 -:102870000000000000000000A00000A00000000018 -:102880000000000000000000000000000000000048 +:102850000000000000020000000000000000000076 +:102860004000000000000000000000000000000028 +:102870000000000000000000000000000000000058 +:102880000000200000000000000000000000000028 :102890000000000000000000000000000000000038 -:1028A0000000000000000000000000000000000028 +:1028A0000000200000000000000000000000000008 :1028B0000000000000000000000000000000000018 :1028C0000000000000000000000000000000000008 -:1028D00000000000000000000000000000000000F8 -:1028E00000000000000000000000000000000000E8 -:1028F00000000000000000000001050000050000CD -:1029000000000000000000000000000000000000C7 -:1029100000000000000000000000000000000000B7 -:1029200000000000000000000000000000000000A7 +:1028D00000000000000010020000000000000000E6 +:1028E00000000000000000004000000000000000A8 +:1028F00000000000000000000000000000000000D8 +:1029000000000000000000000000000000000002C5 +:10291000000000000000100200000002000200029F +:102920000090000000000000000000000000000017 :102930000000000000000000000000000000000097 -:102940000000000000000000000000000000000087 +:10294000000000000000080008000000080000006F :102950000000000000000000000000000000000077 -:102960000000000000000000000000000000000067 -:102970000000000000000000000000000000000057 +:102960000000000000000000020000000000000065 +:102970000000000000000000000000000000001047 :102980000000000000000000000000000000000047 -:102990000000000000000000000000000000000037 +:10299000000000000000000000000000080000002F :1029A0000000000000000000000000000000000027 :1029B0000000000000000000000000000000000017 :1029C0000000000000000000000000000000000007 :1029D00000000000000000000000000000000000F7 :1029E00000000000000000000000000000000000E7 -:1029F000000000000000000000000108020400A028 -:102A000000050000000000000000000000000000C1 +:1029F0000000000000000000000000000040000097 +:102A000000000000000000000000000000000000C6 :102A100000000000000000000000000000000000B6 :102A200000000000000000000000000000000000A6 :102A30000000000000000000000000000000000096 :102A40000000000000000000000000000000000086 :102A50000000000000000000000000000000000076 :102A60000000000000000000000000000000000066 -:102A700000000000000000000000F0F08010402086 -:102A8000A0000500000000000000000000000000A1 +:102A70000000000000000000000000000000000056 +:102A80000000000000000000000000000000000046 :102A90000000000000000000000000000000000036 -:102AA0000000000000000000000000000000000026 +:102AA00000004000000000000000000000000000E6 :102AB0000000000000000000000000000000000016 -:102AC0000000000000000000000000000000000006 -:102AD00000000000000000000000000000000000F6 +:102AC0000000000000000000000000C00000000046 +:102AD0000000000000000084000000000000000072 :102AE00000000000000000000000000000000000E6 -:102AF00000000000000000000000000012060000BE -:102B000000000000080000000000000000000000BD -:102B100000000000000000000000000000000000B5 +:102AF00000000000000000000000000000000000D6 +:102B000000000000000000000000000000000000C5 +:102B100000000000000000000000000004000000B1 :102B200000000000000000000000000000000000A5 :102B30000000000000000000000000000000000095 :102B40000000000000000000000000000000000085 -:102B50000000000000000000000000000000000075 +:102B500000000000000000400040004000000000B5 :102B60000000000000000000000000000000000065 :102B70000000000000000000000000000000000055 :102B80000000000000000000000000000000000045 :102B90000000000000000000000000000000000035 -:102BA0000000000000000000000000000000000025 +:102BA0000000000000000010000000000000000015 :102BB0000000000000000000000000000000000015 :102BC0000000000000000000000000000000000005 -:102BD00000000000000000000000000000000000F5 -:102BE00000000000000000000000000000000000E5 +:102BD0000000000009000000000000840000004028 +:102BE00000000000000000000000004000000000A5 :102BF00000000000000000000000000000000000D5 -:102C000000000000000000000000000000000000C4 +:102C00000040000000000000000000000000000084 :102C100000000000000000000000000000000000B4 :102C200000000000000000000000000000000000A4 :102C30000000000000000000000000000000000094 @@ -197371,8 +193274,8 @@ :102C90000000000000000000000000000000000034 :102CA0000000000000000000000000000000000024 :102CB0000000000000000000000000000000000014 -:102CC0000000000000000000000000000000000004 -:102CD00000000000000000000000000000000000F4 +:102CC0000000000000000000000000000084000080 +:102CD00000C000000000000000840084000000002C :102CE00000000000000000000000000000000000E4 :102CF00000000000000000000000000000000000D4 :102D000000000000000000000000000000000000C3 @@ -197380,28 +193283,28 @@ :102D200000000000000000000000000000000000A3 :102D30000000000000000000000000000000000093 :102D40000000000000000000000000000000000083 -:102D50000000000000000000100000000000000063 -:102D60000000000000000000000000000000000063 +:102D5000000000000000000900000000000000006A +:102D60000000000200020000000800000000000057 :102D70000000000000000000000000000000000053 :102D80000000000000000000000000000000000043 -:102D9000000000000000000000000000040004002B +:102D90000000000000000000000000000000000033 :102DA0000000000000000000000000000000000023 :102DB0000000000000000000000000000000000013 -:102DC0004000400040001000000000000000000033 -:102DD00000000000000000000000000000000000F3 -:102DE0004000004000000000000000000000000063 -:102DF00000000000000000000000002000000000B3 +:102DC0000000000000000000000000000000000003 +:102DD00000000200000000000000000000000000F1 +:102DE00011000000000000000000000000000000D2 +:102DF00000000000000000000000000000000000D3 :102E000000000000000000000000000000000000C2 :102E100000000000000000000000000000000000B2 -:102E200000000000000000020000000000000000A0 +:102E200000000000000000000000000000000000A2 :102E30000000000000000000000000000000000092 -:102E40000800000000000800000000000000000072 -:102E50000800000000000000020000000000000068 -:102E60000000000000000800080000000000000052 -:102E70000000001000000000000000100000000032 -:102E80000000000000000000080000000800000032 -:102E90000000000000000000000008000200000028 -:102EA0000000080002100000000000000000000008 +:102E40000000000000000000000000000000000082 +:102E50000000000000000000000000000000000072 +:102E60000000000000000000000000000000000062 +:102E70000000000000000000000000000000000052 +:102E80000000000000000000000000000000000042 +:102E90000000000000000000000000000000000032 +:102EA0000000000000000000000000000000000022 :102EB0000000000000000000000000000000000012 :102EC0000000000000000000000000000000000002 :102ED00000000000000000000000000000000000F2 @@ -197428,7 +193331,7 @@ :1030200000000000000000000000000000000000A0 :103030000000000000000000000000000000000090 :103040000000000000000000000000000000000080 -:1030500000000010009000000000000000000000D0 +:103050000000000000000000000000000000000070 :103060000000000000000000000000000000000060 :103070000000000000000000000000000000000050 :103080000000000000000000000000000000000040 @@ -197436,7 +193339,7 @@ :1030A0000000000000000000000000000000000020 :1030B0000000000000000000000000000000000010 :1030C0000000000000000000000000000000000000 -:1030D00000000000000100110000000000000000DE +:1030D00000000000000000000000000000000000F0 :1030E00000000000000000000000000000000000E0 :1030F00000000000000000000000000000000000D0 :1031000000000000000000000000000000000000BF @@ -197444,7 +193347,7 @@ :10312000000000000000000000000000000000009F :10313000000000000000000000000000000000008F :10314000000000000000000000000000000000007F -:10315000200000000000000000000000000000004F +:10315000000000000000000000000000000000006F :10316000000000000000000000000000000000005F :10317000000000000000000000000000000000004F :10318000000000000000000000000000000000003F @@ -197460,7 +193363,7 @@ :10322000000000000000000000000000000000009E :10323000000000000000000000000000000000008E :10324000000000000000000000000000000000007E -:10325000000000000000000000000000008001806D +:10325000000000000000000000000000000000006E :10326000000000000000000000000000000000005E :10327000000000000000000000000000000000004E :10328000000000000000000000000000000000003E @@ -197468,16 +193371,16 @@ :1032A000000000000000000000000000000000001E :1032B000000000000000000000000000000000000E :1032C00000000000000000000000000000000000FE -:1032D000000000000000000000000000410000109D -:1032E00002100000000000000000000000000000CC +:1032D00000000000000000000000000000000000EE +:1032E00000000000000000000000000000000000DE :1032F00000000000000000000000000000000000CE :1033000000000000000000000000000000000000BD :1033100000000000000000000000000000000000AD :10332000000000000000000000000000000000009D :10333000000000000000000000000000000000008D :10334000000000000000000000000000000000007D -:1033500000000000000000000000000000000088E5 -:1033600000880000001000000000000000000000C5 +:10335000000000000000000000000000000000006D +:10336000000000000000000000000000000000005D :10337000000000000000000000000000000000004D :10338000000000000000000000000000000000003D :10339000000000000000000000000000000000002D @@ -197493,7 +193396,7 @@ :10343000000000000000000000000000000000008C :10344000000000000000000000000000000000007C :10345000000000000000000000000000000000006C -:1034600000000000000000800000000000000000DC +:10346000000000000000000000000000000000005C :10347000000000000000000000000000000000004C :10348000000000000000000000000000000000003C :10349000000000000000000000000000000000002C @@ -197501,7 +193404,7 @@ :1034B000000000000000000000000000000000000C :1034C00000000000000000000000000000000000FC :1034D00000000000000000000000000000000000EC -:1034E000000000000000000000A00000000000003C +:1034E00000000000000000000000000000000000DC :1034F00000000000000000000000000000000000CC :1035000000000000000000000000000000000000BB :1035100000000000000000000000000000000000AB @@ -197509,7 +193412,7 @@ :10353000000000000000000000000000000000008B :10354000000000000000000000000000000000007B :10355000000000000000000000000000000000006B -:1035600000000000000000000010000010880000B3 +:10356000000000000000000000000000000000005B :10357000000000000000000000000000000000004B :10358000000000000000000000000000000000003B :10359000000000000000000000000000000000002B @@ -197517,7 +193420,7 @@ :1035B000000000000000000000000000000000000B :1035C00000000000000000000000000000000000FB :1035D00000000000000000000000000000000000EB -:1035E000000000000000000000000000000000805B +:1035E00000000000000000000000000000000000DB :1035F00000000000000000000000000000000000CB :1036000000000000000000000000000000000000BA :1036100000000000000000000000000000000000AA @@ -197526,15 +193429,15 @@ :10364000000000000000000000000000000000007A :10365000000000000000000000000000000000006A :10366000000000000000000000000000000000005A -:1036700080000000000000000000000000000000CA +:10367000000000000000000000000000000000004A :10368000000000000000000000000000000000003A :10369000000000000000000000000000000000002A :1036A000000000000000000000000000000000001A :1036B000000000000000000000000000000000000A :1036C00000000000000000000000000000000000FA :1036D00000000000000000000000000000000000EA -:1036E00000000000000000000000000000001000CA -:1036F00090008800000000000000000000000000B2 +:1036E00000000000000000000000000000000000DA +:1036F00000000000000000000000000000000000CA :1037000000000000000000000000000000000000B9 :1037100000000000000000000000000000000000A9 :103720000000000000000000000000000000000099 @@ -197550,43 +193453,43 @@ :1037C00000000000000000000000000000000000F9 :1037D00000000000000000000000000000000000E9 :1037E00000000000000000000000000000000000D9 -:1037F000CAFACAFA00000F0F000000000000000023 -:1038000000000000000000000000000000000000B8 +:1037F00000000000000000000000000000000000C9 +:1038000000000000040000000000000000000000B4 :1038100000000000000000000000000000000000A8 -:103820000000000000000000000000000000000098 +:103820000001000000000000000000000000000097 :103830000000000000000000000000000000000088 -:103840000000000000000000000000000000000078 -:103850000000000000000000000000000000000068 +:103840000000000000000200000000000000020074 +:1038500000001000000082000000000002000000D4 :103860000000000000000000000000000000000058 -:103870000000CAFACAFA00000F0F000000000000A2 +:103870000000000000000000000000000000000048 :103880000000000000000000000000000000000038 :103890000000000000000000000000000000000028 -:1038A0000000000000000000000000000000000018 -:1038B0000000000000000000000000000000000008 -:1038C00000000000000000000000000000000000F8 -:1038D00000000000000000000000000000000000E8 -:1038E00000000000000000000000000000000000D8 -:1038F0000000000000000082000000000000000046 -:1039000000000000000000000000000000000000B7 -:1039100000000000000000000000000000000000A7 -:103920000000000000000000000000000000000097 -:103930000000000000000000000000000000000087 +:1038A00000000000000000000040000000000000D8 +:1038B00000000000000000000000000000400000C8 +:1038C00000000000000000000000000000004000B8 +:1038D0004000000240000000000000000000000066 +:1038E00000000000000000000000000002000200D4 +:1038F00002000200000000000000000000000000C4 +:1039000000000000000000000000901020002000D7 +:103910002000200002000100000000000000000064 +:103920000000000000000200020008000000020089 +:10393000000000000000020000000800000000007D :103940000000000000000000000000000000000077 -:103950000000000000000000000000000000000067 +:10395000000000000800020000000000000000005D :103960000000000000000000000000000000000057 -:1039700000000000000000000082000000000000C5 -:103980000000000000000000000000000000000037 -:103990000000000000000000000000000000000027 +:103970000000000000000000000000000000000047 +:1039800000000000000000000000000000008000B7 +:103990008000800080000000200000000000000087 :1039A0000000000000000000000000000000000017 -:1039B0000000000000000000000000000000000007 +:1039B00000000000001000000000000000000000F7 :1039C00000000000000000000000000000000000F7 :1039D00000000000000000000000000000000000E7 :1039E00000000000000000000000000000000000D7 -:1039F0000000000000000000800040000000000007 +:1039F00000000000000000000000000000000000C7 :103A000000000000000000000000000000000000B6 :103A100000000000000000000000000000000000A6 :103A20000000000000000000000000000000000096 -:103A30000000000000000000000000000000000086 +:103A3000004100000000A0000000000000000000A5 :103A40000000000000000000000000000000000076 :103A50000000000000000000000000000000000066 :103A60000000000000000000000000000000000056 @@ -197599,21 +193502,21 @@ :103AD00000000000000000000000000000000000E6 :103AE00000000000000000000000000000000000D6 :103AF00000000000000000000000000000000000C6 -:103B000000000000000000000000000000000000B5 -:103B100000000000000000000000000000000000A5 -:103B20000000000000000000000000000000000095 +:103B00000000000090400200004000400000004122 +:103B1000020000000000000000000040000400005F +:103B20000004000400400000000000050000000048 :103B30000000000000000000000000000000000085 :103B40000000000000000000000000000000000075 :103B50000000000000000000000000000000000065 :103B60000000000000000000000000000000000055 :103B70000000000000000000000000000000000045 :103B80000000000000000000000000000000000035 -:103B90000000000000000000000000000000000025 -:103BA0000000000000000000000000000000000015 -:103BB0000000000000000000000000000000000005 -:103BC00000000000000000000000000000000000F5 +:103B9000000000000000000000000008000000011C +:103BA0000000000100010000000000000000000013 +:103BB00000000000000000000000000021000040A4 +:103BC00000000000000000400000000000000000B5 :103BD00000000000000000000000000000000000E5 -:103BE00000000000000000000000000000000000D5 +:103BE00000000000020000000000000000000000D3 :103BF00000000000000000000000000000000000C5 :103C000000000000000000000000000000000000B4 :103C100000000000000000000000000000000000A4 @@ -197621,131 +193524,131 @@ :103C30000000000000000000000000000000000084 :103C40000000000000000000000000000000000074 :103C50000000000000000000000000000000000064 -:103C6000000000000000020002004000000002000E -:103C7000020000000000040000000000000000003E -:103C8000040000004000040040000000000020008C -:103C900020004000000088008800000000000000B4 -:103CA00088000000000000004000000010004000FC -:103CB0002000200000000000200020000000000084 -:103CC00000002000000000002000000000001000A4 -:103CD0002000200000000000200020000000000064 -:103CE0000000200000000000000000000040000074 -:103CF0004040000240000000000000000000000002 -:103D000000004000000080008000802010001000B3 -:103D10004040100000000000000000000000000013 +:103C60000000000000000000000000000000000054 +:103C70000000000000000000000000000000000044 +:103C80000000000000000000000000000000000034 +:103C90000000000000000000000000000000000024 +:103CA0000000000000000000000000000000000014 +:103CB0000000000000000000000000000000000004 +:103CC00000000000000000000000000000000000F4 +:103CD00000000000000000000000000000000000E4 +:103CE00000000000000000000000000000000000D4 +:103CF00000000000000000000000000000000000C4 +:103D000000000000000000000000000000000000B3 +:103D100000000000000000000000000000000000A3 :103D20000000000000000000000000000000000093 -:103D300000401002400020000000000000000000D1 -:103D40000000000000000000000000000020002033 -:103D50000000000000004000000000000000000023 +:103D3000000000000000000000000800004000003B +:103D40000000000000000000000000000000000073 +:103D50000000000000000000000000000000000063 :103D60000000000000000000000000000000000053 :103D70000000000000000000000000000000000043 -:103D80000000080001000000200000000100010008 -:103D9000010000000000000000000000080000001A -:103DA00000000000000000010800000008000800FA -:103DB00000000000000008000800000000000000F3 -:103DC00008000800000000001000000008000800C3 -:103DD00002000000000000000000080000000000D9 -:103DE0000200084000000000000000000000000089 +:103D8000000000000000000002000200000000002F +:103D90000000020000000000000000000000000021 +:103DA0000000000000000000000000000000000013 +:103DB0000000000000000000000000000200000001 +:103DC00000000200020000000000020002000000EB +:103DD00000000000000000000000000000000000E3 +:103DE00000000000000000000000000000000000D3 :103DF00000000000000000000000000000000000C3 -:103E0000000000000000040000008000200004000A -:103E1000040004000000000000000000000000009A +:103E000000000000000000000000000000000000B2 +:103E100000000000000000000000000000000000A2 :103E20000000000000000000000000000000000092 :103E30000000000000000000000000000000000082 :103E40000000000000000000000000000000000072 :103E50000000000000000000000000000000000062 :103E60000000000000000000000000000000000052 :103E70000000000000000000000000000000000042 -:103E800000000000000000000000008000000000B2 -:103E900000000009002100000000000000210003D4 -:103EA00000000000001100030011000000000009E4 +:103E80000000000000000000000000000000000032 +:103E90000000000000000000000000000000000022 +:103EA0000000000000000000000000000000000012 :103EB0000000000000000000000000000000000002 :103EC00000000000000000000000000000000000F2 :103ED00000000000000000000000000000000000E2 :103EE00000000000000000000000000000000000D2 :103EF00000000000000000000000000000000000C2 -:103F000000000000000000000000000000020000AF -:103F10000000000000000002008800A00000000077 -:103F20000000000000000000000000000000000091 -:103F30000000000000000000000000000000000081 +:103F000000000000000000000000000000000000B1 +:103F100000000000000000000000000000000000A1 +:103F2000000000000040000000020000000400004B +:103F30000040000000000000000000000000000041 :103F40000000000000000000000000000000000071 :103F50000000000000000000000000000000000061 -:103F60000000000000000000000000001000000041 +:103F60000000000000000000000000000000000051 :103F70000000000000000000000000000000000041 :103F80000000000000000000000000000000000031 -:103F9000010004000900000000000000040000000F -:103FA0000000000000000000000000000000000011 +:103F90000000000000000000000000000000000021 +:103FA000000000000000000000000001000000010F :103FB0000000000000000000000000000000000001 :103FC00000000000000000000000000000000000F1 :103FD00000000000000000000000000000000000E1 :103FE00000000000000000000000000000000000D1 :103FF00000000000000000000000000000000000C1 :1040000000000000000000000000000000000000B0 -:1040100000002000000020000000008400A000003C -:104020000000000008000000000000000000080080 -:104030000000000000000000000000000000000080 +:1040100000000000000000000000000000000000A0 +:10402000000000000000000000004000000001004F +:10403000000004000000000000000000000000007C :104040000000000000000000000000000000000070 :104050000000000000000000000000000000000060 -:104060000000000000000000000000000000100040 +:104060000000000000000000000000000000000050 :104070000000000000000000000000000000000040 :104080000000000000000000000000000000000030 -:10409000000000000400000200000000000000001A -:1040A00000000000000000000000000000110000FF -:1040B00000000000000000040000000000000000FC +:104090000000000000000000000000000000000020 +:1040A0000000000000000000000000000000000010 +:1040B00020000000000000000200000000000000DE :1040C00000000000000000000000000000000000F0 :1040D00000000000000000000000000000000000E0 :1040E00000000000000000000000000000000000D0 :1040F00000000000000000000000000000000000C0 :1041000000000000000000000000000000000000AF -:1041100000000000000080A02085000000000000DA +:10411000000000000000000000000000000000009F :10412000000000000000000000000000000000008F -:10413000000000000000000000000000000000007F +:10413000000000000010000000000000000000006F :10414000000000000000000000000000000000006F :10415000000000000000000000000000000000005F :10416000000000000000000000000000000000004F :10417000000000000000000000000000000000003F :10418000000000000000000000000000000000002F -:10419000000000000000018200000082000000001A -:1041A000002100210021000000210000000000008B -:1041B000000000000000000000800000000000007F +:10419000000000000000000000000000000000001F +:1041A000000000000000000000000000000000000F +:1041B00000000000000000000000000000000000FF :1041C00000000000000000000000000000000000EF :1041D00000000000000000000000000000000000DF :1041E00000000000000000000000000000000000CF :1041F00000000000000000000000000000000000BF :1042000000000000000000000000000000000000AE -:104210000084000000000000402100A00003008492 -:10422000410000000000000000000000000000004D -:10423000000000000000000000000002080008006C -:104240000800000000000000000000000000000066 +:10421000000000000000000000000000000000009E +:10422000000000000000000000000000000000008E +:10423000000002E000000000810002E00000000039 +:10424000000000000000000000000000000000006E :10425000000000000000000000000000000000005E :10426000000000000000000000000000000000004E :10427000000000000000000000000000000000003E :10428000000000000000000000000000000000002E -:1042900000000000000000000000001100A0C000AD -:1042A000A09000C00008008800020000000000008C -:1042B00000000000000000000000000000010001FC -:1042C00000010001000000000000000000000000EC +:10429000000000000000000000000000000000001E +:1042A000000000000000000000000000000000000E +:1042B00000000000000000000000000000000000FE +:1042C00000000000000000000000000000000000EE :1042D00000000000000000000000000000000000DE :1042E00000000000000000000000000000000000CE :1042F00000000000000000000000000000000000BE :1043000000000000000000000000000000000000AD -:1043100000000000000000000000000011882102E1 -:1043200002108009008000800000000000000000F2 -:104330000000000000000000000000000000000875 -:104340000008000800080000000000000000000055 +:10431000000000000000000000000000000000009D +:10432000000000000000000000000000000000008D +:10433000000000000000000000000000000000007D +:10434000000000000000000000000000000000006D :10435000000000000000000000000000000000005D :10436000000000000000000000000000000000004D :10437000000000000000000000000000000000003D :10438000000000000000000000000000000000002D -:10439000000000000000800000000000000080001D -:1043A00008839010C0100000800900008000000009 +:10439000000000000000000000000000000000001D +:1043A000000000000000000000000000000000000D :1043B00000000000000000000000000000000000FD :1043C00000000000000000000000000000000000ED :1043D00000000000000000000000000000000000DD :1043E00000000000000000000000000000000000CD :1043F00000000000000000000000000000000000BD :1044000000000000000000000000000000000000AC -:104410000000000000000000080010000400000080 -:104420004000892108900991000008000000C000A8 +:10441000000000000000000000000000000000009C +:10442000000000000000000000000000000000008C :10443000000000000000000000000000000000007C :10444000000000000000000000000000000000006C :10445000000000000000000000000000000000005C @@ -197753,59 +193656,4156 @@ :10447000000000000000000000000000000000003C :10448000000000000000000000000000000000002C :10449000000000000000000000000000000000001C -:1044A0000000A089011040C189C140400008028875 -:1044B00000C000000000000000000000000000003C -:1044C00000000000000000000000000000000000EC +:1044A000000000000000000000000000000000000C +:1044B0000000000000000000000000650006000F82 +:1044C000200000650006800F2000000000000000B2 :1044D00000000000000000000000000000000000DC :1044E00000000000000000000000000000000000CC :1044F00000000000000000000000000000000000BC :1045000000000000000000000000000000000000AB :10451000000000000000000000000000000000009B -:10452000000000008008411089050820A08000805C -:1045300000000080000000000000000000000000FB -:104540000000000000000000080041000000000022 +:10452000000000000000000000000000000000008B +:10453000000000000000000000000000000000007B +:10454000000000000000000000000000000000006B :10455000000000000000000000000000000000005B :10456000000000000000000000000000000000004B :10457000000000000000000000000000000000003B :10458000000000000000000000000000000000002B -:104590000000000000000000000000000000000219 -:1045A000000200800000A120A109A10008408008AD -:1045B00000020000000000000000000000000000F9 -:1045C00000000000000000000010000000000000DB +:10459000000000000000000000000000000000001B +:1045A000000000000000000000000000000000000B +:1045B00000000000000000000000000000000000FB +:1045C00000000000000000000000000000000000EB :1045D00000000000000000000000000000000000DB :1045E00000000000000000000000000000000000CB :1045F00000000000000000000000000000000000BB :1046000000000000000000000000000000000000AA :10461000000000000000000000000000000000009A -:104620000000001000080000C1912002A18889014B -:10463000400110008802020000000000000000009D -:104640000000000000000000000000010000000069 +:10462000000000000000000000000000000000008A +:10463000000000000000000000000000000000007A +:10464000000000000000000000000000000000006A :10465000000000000000000000000000000000005A :10466000000000000000000000000000000000004A :10467000000000000000000000000000000000003A :10468000000000000000000000000000000000002A :10469000000000000000000000000000000000001A -:1046A00000000081000043000000418200C8430078 -:1046B00041000081000043000000000000000000F5 +:1046A000000000000000000000000000000000000A +:1046B00000000000000000000000000000000000FA :1046C00000000000000000000000000000000000EA :1046D00000000000000000000000000000000000DA :1046E00000000000000000000000000000000000CA :1046F00000000000000000000000000000000000BA :1047000000000000000000000000000000000000A9 :104710000000000000000000000000000000000099 -:10472000000000000000000000000000FF0000008A -:10473000C000CF0FC33C3FC0F00F33330000000078 +:104720000000000000000000000000000000000089 +:104730000000000000000000000000000000000079 :104740000000000000000000000000000000000069 -:104750000000000000000000000000000000000059 +:104750000000000000000000000000000001000058 :104760000000000000000000000000000000000049 :104770000000000000000000000000000000000039 +:104780000000100000000000000000000000000019 +:104790000000000000000000000084000000000095 +:1047A0000000000000000000000000000000000009 +:1047B00000000000000000000000000000000000F9 +:1047C00000000000000000000000000010000000D9 +:1047D00010000000000000000000000000000000C9 +:1047E00000000000000000000000000000020000C7 +:1047F00000000000000000000000000000020000B7 +:10480000000200020002000000020002000000009E +:104810000002000200020000000000000000000092 +:104820000000000000000000000000000000000088 +:104830000000000000000000000000000000000078 +:1048400000000000000000008200000000000000E6 +:104850000000000000000000000000000000000058 +:104860000000000000000000000000000000000048 +:104870000000000000000000000000000000000038 +:104880000000000000000000000000000000000028 +:1048900000000000004000000000000000000000D8 +:1048A0000000000000000000000000000008000000 +:1048B00000000000000200000000000000000000F6 +:1048C00000000000000000000000000000020000E6 +:1048D00000000000000000000000000000000000D8 +:1048E00000000000000000000000001000000000B8 +:1048F00000000000000000000000000000000000B8 +:1049000000000000000000000000000000000000A7 +:10491000000000000000000000000000000800008F +:104920000000000000000000000000000000000087 +:104930000000000000000000000000000000000077 +:104940000000000000000000000000000000000067 +:104950000000000000000000000000000000000057 +:104960000000000000000000000000000000002126 +:10497000000000000000000000000000000000082F +:104980000000000000000000000000000000000027 +:104990000000000000000000000000009000000087 +:1049A0000000900000000000000000000000000077 +:1049B00000000000000000000000000000000000F7 +:1049C00000000000000000000000000000000000E7 +:1049D00000000000000000000000000000000004D3 +:1049E00000000000000000000000000000000000C7 +:1049F00000000000000000000000000000000000B7 +:104A000000000000000000000000000000000000A6 +:104A10000000000000000000000000000000000096 +:104A20000000000000000000000000000000000086 +:104A3000000000000000000000090000000000006D +:104A400000000009000500050000004000400000D3 +:104A5000000000040004000000400040004000404E +:104A6000000000000000010000000005000500003B +:104A700000410009000000000041000900000000A2 +:104A80000000000000000000000000000000000026 +:104A90000000000500050000000500000000000007 +:104AA0000000000000050000000000000000000001 +:104AB00000000000000000000000000000000000F6 +:104AC00000000000000000000000004000000000A6 +:104AD00002000000000000000000000000000000D4 +:104AE00000000000000000000800000000000000BE +:104AF00000000000000000000000000000000000B6 +:104B000000000000000000000000000000000000A5 +:104B10000000000000000000000000000000000095 +:104B20000000000400000000000000000000000081 +:104B30000000000000000000000000000000000075 +:104B40000000000000000000000000000000000065 +:104B50000000000000000000000000000000000055 +:104B60000000000000000000000000000000000045 +:104B70000000000000000000000000000000000035 +:104B80000000000000000000000000000000000025 +:104B900000000000200000000000000000000000F5 +:104BA0000000000000000000000000000000000005 +:104BB00000000000000000000000000000000000F5 +:104BC00000000000000000000000000000000000E5 +:104BD00000000000000000000000000000000000D5 +:104BE00000000000000000000000000000000000C5 +:104BF00000000000000000000000000000000000B5 +:104C000000000000000000000000000000000000A4 +:104C10000000000000000000000000000000000094 +:104C20000000000000000000000000000000000084 +:104C30000000000000000000000000000000000074 +:104C40000000000000000000000000000000000064 +:104C5000000000000041000800000000000000000B +:104C60000000000000000000040000000000000040 +:104C700000000000000000000000004000400000B4 +:104C80000000000000000000000000000000000024 +:104C90000000000000000000000000000000000014 +:104CA00000000008000800000040000000000000B4 +:104CB00000000000000000000000000000000000F4 +:104CC00000000000110000000000000000000000D3 +:104CD0000000004000000000000000040000000090 +:104CE0000000000000000000000080000000000044 +:104CF0000000000021001100000000000000110071 +:104D00000000000000001100000200000000000090 +:104D10000000000000000000000000000000000093 +:104D20004100000000000000020805000000000033 +:104D30000000000000000000000000000000000073 +:104D40000000000000000000000000000000000063 +:104D50000000000000000000000000000000000053 +:104D60000000000000000000000000000000000043 +:104D70000000000000000000000000000000000033 +:104D80000000000000000000000000000000000023 +:104D90000000000000000000000000000000000013 +:104DA0000000000000000000000000000000000003 +:104DB00000000000000000000000000000000000F3 +:104DC00000000000000000000000000000000000E3 +:104DD00000000000000000000000000000000000D3 +:104DE00000000000000000000000000000000200C1 +:104DF00000000000000000000000000000000000B3 +:104E000000000000000000000000000000000000A2 +:104E10000000000000000000000000000000000092 +:104E20000000000000000000000000000000000082 +:104E30000000000000000000000000000000000072 +:104E40000000000000000000000000000000000062 +:104E50000000000000000000000000000000000052 +:104E60000000000000000000000000000000000042 +:104E700000000041000000000000000000000000F1 +:104E80000000000000000000000000000000000022 +:104E90000000000000000000000000000000000012 +:104EA0000000000000000000000000000000000002 +:104EB00000000000000000000000000000000000F2 +:104EC00000000000000000000000000000000000E2 +:104ED00000000000000000000000000000000000D2 +:104EE00000000000000000000000000000000000C2 +:104EF00000000000000100000000000000000000B1 +:104F000000000000000000000000000000000000A1 +:104F10000000000000000000000000000000000091 +:104F20000000000000000000000000000000000081 +:104F30000000000000000000000000000000000071 +:104F40000000000000000000000000000000000061 +:104F50000000000000000000000000000000000051 +:104F60000000000000000000000000000000000041 +:104F70000000000000000000000000000001000030 +:104F80000000000000000000000000000000000021 +:104F90000000000000000000000000000000000011 +:104FA0000000000000000000000000000000000001 +:104FB00000000000000000000000000000000000F1 +:104FC00000000000000000000000000000000000E1 +:104FD00000000000000000000000000000000000D1 +:104FE00000000000000000000000000000000000C1 +:104FF00000000000000000000000000000000001B0 +:1050000000000000000000000000000000000000A0 +:105010000000000000000000000000000000000090 +:105020000000000000000000000000000000000080 +:105030000000000000000000000000000000000070 +:105040000000000000000000000000000000000060 +:105050000000000000000000000000000000000050 +:105060000000000000000000000000000000000040 +:1050700000000000000000008041800080008000EF +:10508000000100000000000000000000000000001F +:105090000000000000000000000000000000000010 +:1050A0000000000000000000000000000000000000 +:1050B00000000000000000000000000000000000F0 +:1050C00000000000000000000000000000000000E0 +:1050D00000000000000000000000000000000000D0 +:1050E00000000000000000000000000000000000C0 +:1050F00000000000000000000000C0012000C0000F +:10510000A0000001000000000000000000000000FE +:10511000000000000000000000000000000000008F +:10512000000000000000000000000000000000007F +:10513000000000000000000000000000000000006F +:10514000000000000000000000000000000000005F +:10515000000000000000000000000000000000004F +:10516000000000000000000000000000000000003F +:10517000000000000000000000000000000000002F +:1051800007004800000000000000000000000000D0 +:10519000000000000000000000000000000000000F +:1051A00000000000000000000000000000000000FF +:1051B00000000000000000000000000000000000EF +:1051C00000000000000000000000000000000000DF +:1051D00000000000000000000000000000000000CF +:1051E00000000000000000000000000000000000BF +:1051F00000000000000000000000000000000000AF +:10520000000000000000000000000000000000009E +:10521000000000000000000000000000000000008E +:10522000000000000000000000000000000000007E +:10523000000000000000000000000000000000006E +:10524000000000000000000000000000000000005E +:10525000000000000000000000000000000000004E +:10526000000000000000000000000000000000003E +:10527000000000000000000000000000000000002E +:10528000000000000000000000000000000000001E +:10529000000000000000000000000000000000000E +:1052A00000000000000000000000000000000000FE +:1052B00000000000000000000000000000000000EE +:1052C00000000000000000000000000000000000DE +:1052D00000000000000000000000000000000000CE +:1052E00000000000000000000000000000000000BE +:1052F00000000000000000000000000000000000AE +:10530000000040004000008000000000000000009D +:10531000000000000000000000000000000000008D +:10532000000000000000000000000000000000007D +:10533000000000000000000000000000000000006D +:10534000000000000000000000000000000000005D +:10535000000000000000000000000000000000004D +:10536000000000000000000000000000000000003D +:10537000000000000000000000000000000000002D +:10538000000000000000000000000000000000001D +:10539000000000000000000000000000000000000D +:1053A00000000000000000000000000000000000FD +:1053B00000000000000000000000000000000000ED +:1053C00000000000000000000000000000000000DD +:1053D00000000000000000000000000000000000CD +:1053E00000000000000000000000000000000000BD +:1053F00000000000000000000000000000000000AD +:10540000000000000000000000000000000000009C +:10541000000000000000000000000000000000008C +:10542000000000000000000000000000000000007C +:10543000000000000000000000000000000000006C +:10544000000000000000000000000000000000005C +:10545000000000000000000000000000000000004C +:10546000000000000000000000000000000000003C +:10547000000000000000000000000000000000002C +:10548000000000000000000000000000000000001C +:10549000000000000000000000000000000000000C +:1054A00000000000000000000000000000000000FC +:1054B00000000000000000000000000000000000EC +:1054C00000000000000000000000000000000000DC +:1054D00000000000000000000000000000000000CC +:1054E00000000000000000000000000000000000BC +:1054F00000000000000000000000000000000000AC +:10550000000000000000000000000000000000009B +:10551000000000000000000000000000000000008B +:10552000000000000000000000000000000000007B +:10553000000000000000000000000000000000006B +:10554000000000000000000000000000000000005B +:10555000000000000000000000000000000000004B +:10556000000000000000000000000000000000003B +:10557000000000000000000000000000000000002B +:10558000000000000000000000000000000000001B +:10559000000000000000000000000000000000000B +:1055A00000000000000000000000000000000000FB +:1055B00000000000000000000000000000000000EB +:1055C00000000000000000000000000000000000DB +:1055D00000000000000000000000000000000000CB +:1055E00000000000000000000000000000000000BB +:1055F00000000000000000000000000000000000AB +:10560000000000000000000000000000000000009A +:10561000000000000000000000000000000000008A +:10562000000000000000000000000000000000007A +:10563000000000000000000000000000000000006A +:10564000000000000000000000000000000000005A +:10565000000000000000000000000000000000004A +:10566000000000000000000000000000000000003A +:10567000000000000000000000000000000000002A +:10568000000000000000000000000000000000001A +:10569000000000000000000000000000000000000A +:1056A00000000000000000000000000000000000FA +:1056B00000000000000000000000000000000000EA +:1056C00000000000000000000000000000000000DA +:1056D00000000000000000000000000000000000CA +:1056E00000000000000000000000000000000000BA +:1056F00000000000000000000000000000000000AA +:105700000000000000000000000000000000000099 +:105710000000000000000000000000030000000086 +:105720000000000000000000000000000000000079 +:105730000000000000000000000000000000000069 +:105740000000000000000000000000000000000059 +:105750000000000000000000000040000000000009 +:105760000000000000000000000000000000000039 +:105770000000000000000000000000000000000029 +:1057800000000000000000000040000000000000D9 +:1057900000004000000000000000000000000000C9 +:1057A00000000000000000001000000200000000E7 +:1057B00000000000000000001000100200001000B7 +:1057C0000090000000020002000000000000000045 +:1057D0004184000000400040000000000000000084 +:1057E00000000000000000000000000000000000B9 +:1057F00000000000080000000000000000000000A1 +:105800000000000000000000000000000000000098 +:105810000000000000000000000000000000000088 +:105820000000000000000000000000000000000078 +:105830000000000000000000000001000000000067 +:105840000000000000000000004000000000000018 +:105850000000000000000000000000400000000008 +:105860000000000000000000000000000000000038 +:105870000000000000000000000000000000000028 +:105880000000000000000000000000000000000018 +:105890000000000000000000000000000000000008 +:1058A00000000000000000000000000000000000F8 +:1058B00000000000000800000000000020000000C0 +:1058C00000000000000000000000000000000000D8 +:1058D0000000000000400000000000000000000088 +:1058E00000000000000000000000000000000000B8 +:1058F00000000000000000000000000000000000A8 +:105900000000000000000000000000000000000097 +:105910000000000000000000000000000000000087 +:105920000000000000000000000000000000000077 +:105930000000000000000000000000000000000067 +:105940000000000000000000000000000000002136 +:105950000080012100000000000000000000001095 +:10596000000000080000000000000000000000002F +:105970000000000000000000000000000000000027 +:105980000000000000000000000000000000000017 +:105990000000000000000000000000000000000007 +:1059A00000000000000000000000000000000000F7 +:1059B00000000000000000000000000000000000E7 +:1059C00000000000000000000000000000000000D7 +:1059D00000000004200000000000000000000000A3 +:1059E0002000000000000000000000000000000097 +:1059F0000200000000000000000000000000004164 +:105A0000000000000100000001000000000500008F +:105A10000000010000000000000000000000000085 +:105A20000000000000000000000000000000000076 +:105A300000000000C00000000000000000000000A6 +:105A40000100200001000100000000000000000033 +:105A50000000000000000000000000000100010044 +:105A60000000000000000000000000000000000036 +:105A70000000000000000000020021000000020001 +:105A800000000000000020000000200000000000D6 +:105A900005004184080000040000410000000000EF +:105AA00000040000000020000000000000200000B2 +:105AB00010000000000000000000000000000000D6 +:105AC00000002000800020002000000000000000F6 +:105AD000000000000000000000000000008810002E +:105AE0002000000000000000020000000000000094 +:105AF00000000000000000000000000000000000A6 +:105B00000000000000000000000000110011200053 +:105B10000000000000000400000000000000000081 +:105B20000000000020000000000000020000000053 +:105B30000009A0000000900000000000000020000C +:105B40000009000000000000000920000000000023 +:105B500000002000001120110000000000080004D7 +:105B60000000200000000000000000000000000015 +:105B70000000000000000000000000000000000025 +:105B80000000000000000000000000000000000015 +:105B90008000000000000000000000000000000085 +:105BA00000000000000000000000000000000000F5 +:105BB00000000000000000000000000000000000E5 +:105BC00000000000000000000000000000000000D5 +:105BD00000000000000000000000000000000001C4 +:105BE0000001000000A00000000000840000000090 +:105BF00000000000000000000200000000000000A3 +:105C0000000000000000028020000300020000806D +:105C10000000000001000000000000000002000081 +:105C2000000800000000000000000000020000006A +:105C30000000000000000000000000000000000064 +:105C40000000000000000000000000000000010053 +:105C500000000000000000000080000000000000C4 +:105C6000008001000109008000050000000500001F +:105C70000000000000000000000000000000000024 +:105C800000880000000000002004808220820004C0 +:105C90000004219000002084000000900500050011 +:105CA0000004000020002000020005000500008222 +:105CB0000000418800000500000000880000050089 +:105CC00000824188000005000082410000000500BC +:105CD0002000000000824182000000080082418212 +:105CE00000C041041000200009080000000041002D +:105CF00000000000000000000000000000000000A4 +:105D00000000000000000000000000000000000093 +:105D10000000000000000000000000000000000083 +:105D20000000000000000000000000000000000073 +:105D30000000000000000000000000A100000000C2 +:105D40000000000000000000000000000000000053 +:105D50000000000000000000000000000100000042 +:105D60000000000001000000000000000000000032 +:105D70000000000000000000000000000000000023 +:105D80000000000000000000000000000000000013 +:105D90000000000000000000000000000000000003 +:105DA00000000000000000000000000000000000F3 +:105DB00000000000000000000000000000020000E1 +:105DC00000000000000000000000000000000000D3 +:105DD00000000000000000000000000000001100B2 +:105DE0002100000000001100002100000000000060 +:105DF00000000000000000000000000000000000A3 +:105E0000000000000000000000000000000000048E +:105E10000000000400000005000000050000000074 +:105E20000000000000000000000000000000000072 +:105E30000000000000000000000000000000000260 +:105E40000000000000000000000000000000000052 +:105E500000400000004000000000000000000000C2 +:105E6000004109000009008000090000110900003C +:105E70000000000000000000000000000000000022 +:105E80000000000000000000000000000000000012 +:105E90000001000000010000000000000000000000 +:105EA00000000000000000000000000000000000F2 +:105EB00000000000000000000000000000000000E2 +:105EC00000010000000000000000000000000000D1 +:105ED00000000001000000000000000000000000C1 +:105EE0000000000101000000008800000000010027 +:105EF00000000000000000000000000000000000A2 +:105F00000000000000000000000000000000000091 +:105F100000000000400000000100000084000000BC +:105F20000000000000000000000000000000000071 +:105F30000000000000000000000000000000000061 +:105F40000000000000000000000000000000000051 +:105F5000000000000000020000000000000000003F +:105F6000000000000000A00000000100000002008E +:105F70000001000000000000000000000000000020 +:105F80000000000000000000000000000000000011 +:105F900000000000000000000000040000000000FD +:105FA00000000500000000000000000000000000EC +:105FB00000000000000000000000000000000000E1 +:105FC00000000000000000000000000000000000D1 +:105FD00000000000000000000000000002000000BF +:105FE0000000000000000000000000004100000070 +:105FF0000000000802000000000000000000000097 +:106000000000000000000000000000000000000090 +:106010000000000000000008000000000000000870 +:106020000000000000000000000000000000000070 +:106030000000000000000000000000000000000060 +:106040000000000000000000000000000000000050 +:106050000000000000000000000000000000000040 +:1060600000000000000000000040211100000000BE +:1060700000201100000000000000000000000000EF +:106080000000000000000000000000000000000010 +:1060900000000000000000000001000000000000FF +:1060A00000010000000000000000000000000000EF +:1060B00000000000000000000000000000000000E0 +:1060C00000000000000000000000000000000000D0 +:1060D00000000000000000000000000000000000C0 +:1060E00000000000000000000000000000010000AF +:1060F000000000000100000000000000000000009F +:10610000000000000000000000000000000000008F +:1061100000000000000000000000810002E000001C +:106120000000810002E0000000000000000000000C +:10613000000000000000000000000000000000005F +:106140000000000000000088070048000000000078 +:10615000000000000000000000000000000002E05D +:10616000000000000000000000000000000000E04F +:1061700000008141810043E0002200000000000097 +:10618000000000000000000000000000000000000F +:1061900000000000000000000000000000000000FF +:1061A00000000000000000000000000000000000EF +:1061B00000000000000000000000000000000000DF +:1061C00000000000000000000000000000000000CF +:1061D00000000000000000000000000000000000BF +:1061E00000000000000000000000000000000000AF +:1061F000000000000000000000000000000000009F +:10620000000000000000000000000000000000008E +:10621000000000000000000000000000000000007E +:10622000000000000000000000000000000000006E +:10623000000000000000000000000000000000005E +:10624000000000000000000000000000000000004E +:10625000000000000000000000000000000000003E +:10626000000000000000000000000000000000002E +:10627000000000000000000000000000000000001E +:10628000000000000000000000000000000000000E +:1062900000000000000000000000000000000000FE +:1062A00000000000000000000000000000000000EE +:1062B00000000000000000000000000000000000DE +:1062C00000000000000000000000000000000000CE +:1062D00000000000000000000000000000000000BE +:1062E00000000000000000000000000000000000AE +:1062F000000000000000000000000000000000009E +:10630000000000000000000000000000000000008D +:10631000000000000000000000000000000000007D +:10632000000000000000000000000000000000006D +:10633000000000000000000000000000000000005D +:10634000000000000000000000000000000000004D +:10635000000000000000000000000000000000003D +:10636000000000000000000000000000000000002D +:10637000000000000000000000000000000000001D +:10638000000000000000000000000000000000000D +:1063900000000000000000000000000000000000FD +:1063A0000000000000650006800F20000065000668 +:1063B000800F20000000000000000000000000002E +:1063C00000000000000000000000000000000000CD +:1063D00000000000000000000000000000000000BD +:1063E00000000000000000650006000F2000000013 +:1063F00000000000000000400006000C0000000447 +:106400000006800E200000000000000000000000D8 +:10641000000000000000000000000000000000007C +:10642000000000000000000000000000000000006C +:10643000000000000000000000000000000000005C +:10644000000000000000000000000000000000004C +:10645000000000000000000000000000000000003C +:10646000000000000000000000000000000000002C +:1064700000000000000000000000FF00FFFF00001F +:106480000000FF0000FF000000000000000000000E +:1064900000000000000000000000000000000000FC +:1064A00000000000000000000000000000000000EC +:1064B00000000000000000000000000000000000DC +:1064C00000000000000000000000000000000000CC +:1064D00000000000000000000000000000000000BC +:1064E00000000000000000000000000000000000AC +:1064F000000000000000000000000000FF0000009D +:1065000000000000FF0000FF00000000000000008D +:10651000000000000000000000000000000000007B +:10652000000000000000000000000000000000006B +:10653000000000000000000000000000000000005B +:10654000000000000000000000000000000000004B +:10655000000000000000000000000000000000003B +:10656000000000000000000000000000000000002B +:10657000000000000000000000000000000000001B +:10658000F0F000000000FF0000FF0000000000002D +:1065900000000000000000000000000000000000FB +:1065A00000000000000000000000000000000000EB +:1065B00000000000000000000000000000000000DB +:1065C00000000000000000000000000000000000CB +:1065D00000000000000000000000000000000000BB +:1065E00000000000000000000000000000000000AB +:1065F000000000000000000000000000000000009B +:106600000000F0F000000000FF0000FF00000000AC +:10661000000000000000000000000000000000007A +:10662000000000000000000000000000000000006A +:106630000000000001430000000000000000000016 +:10664000000000000000000000000000000000004A +:10665000000000000000000000000000000000003A +:10666000CC84010105000986021A13A45E00100003 +:1066700010144400C040888002000004040000148C +:1066800008000000000000000400400000000000BE +:1066900000000000000000000000000000000000FA +:1066A00000000000000000002000000000000000CA +:1066B00000000000000000000000000000000000DA +:1066C00000000000000000000000000000000000CA +:1066D00000000000000000000003000000000000B7 +:1066E00000000000000000000000000000000000AA +:1066F000000000000000000000000000000000009A +:106700000000000000000000000000000000000089 +:106710000000000000000000000000000000000079 +:1067200000000000000000000000800000000000E9 +:106730000000000000000000000000000000000059 +:1067400000000000000000000000000200820000C5 +:106750000000000000000000000000000000000039 +:106760000000000000000000000000000000000029 +:106770000000000000000000000000000000000019 +:1067800000000000000200000090009000020000E5 +:1067900000020002000240000000000000000000B3 +:1067A00000000000000000000000040000000100E4 +:1067B00000000000000000000000000000000000D9 +:1067C00000000000000000000000000000000000C9 +:1067D00000000000000001000000000000000000B8 +:1067E0000000000000008200000000000041820064 +:1067F0000000000000000000000000000000000099 +:106800000000000000000000000000000000000880 +:106810000000000000000000000000000000000078 +:1068200000000000000000000000000080000002E6 +:106830002000000000000000000000000000000038 +:106840000000000000000000000000000000000048 +:106850000000000000000000200000000000000018 +:10686000008200080000000000820000000000001C +:106870000000000000000000000000000000000018 +:1068800000000010000000000000000000000000F8 +:1068900000100000000000000000000000000000E8 +:1068A00000000000000000000000000000000000E8 +:1068B00000000000000000000000000000000008D0 +:1068C00001000002010001000000001100000000B2 +:1068D0000004014001000000000840000100000029 +:1068E0000000008000110100000000000000010015 +:1068F0000000000000000100000400800000000013 +:10690000000000080000008000000021000000A13D +:10691000000800850000000000000008000000885A +:10692000000800000000000000000000000000005F +:106930000000000000000000000000000000000057 +:1069400000012000000020002000000000000000E6 +:1069500000000001100020000000000100001000F5 +:106960000000000000040000100000000000000013 +:1069700020000000000000001000000100040000E2 +:1069800000000000000100000004000000004100C1 +:1069900000040001000400000000000000000000EE +:1069A00000040000000000000000000000000000E3 +:1069B000000000000005001100000000A000A08001 +:1069C000A000A100004000000000000800000080BE +:1069D0008200010000000000A000A0048800100058 +:1069E000100000000000000800008400000088047F +:1069F000009100000100880800040005000000006C +:106A00000004A000000000040080A00001000000BD +:106A10000011000000800008000083400100000019 +:106A20000000000000000000000000000000000066 +:106A300000000000000000040000000000840000CE +:106A4000000800002000000020400000004100007D +:106A500020082000200000C000000000000100000D +:106A600000000000008800000041009000002100AC +:106A70000001000800002000000900910000000053 +:106A8000000000010000000000030008400020009A +:106A90000000000000000004008300081000200037 +:106AA00000000000000000020000000000000000E4 +:106AB0000000900000200000000090000000200076 +:106AC0002000001120040000010091082000900027 +:106AD0002005900000000000080020002000C000F9 +:106AE000000400418200C000000000009004840007 +:106AF000008020009080A0000000000400008200C0 +:106B0000008010119011A000028020210005A00833 +:106B10000005010091008200002190009004820293 +:106B2000000020002000A000200400000000000061 +:106B30000000000000000000000000000000000055 +:106B4000000080000002000100001000200300008F +:106B50000000800000000000000000008000000035 +:106B60000000000100000000000000000000000123 +:106B70000000000800000004000000000001000008 +:106B80000000000880000000000000080000000075 +:106B900000000000100020000000000000000001C4 +:106BA0000000008480008000000000010000000060 +:106BB0000000000000000000000000002000200095 +:106BC0002000200000820004880088020008880855 +:106BD0009000000201080109200982080082840255 +:106BE000000000080009C009C000100400000000F7 +:106BF000A00984002004000800090000200800000B +:106C0000C009820000090000C009A00800040002B9 +:106C10008404880288080088010888088808000819 +:106C2000C0088240000800210000A002000200000D +:106C300000000000000000000000000000A0800034 +:106C4000808480008582000800014100000000A0CF +:106C50000000200041C010A02000800000010008BA +:106C60000082000000010000000000008001000020 +:106C700000840000000000A100010082000021014A +:106C800000A000000300000000000084000100A13B +:106C9000000000010000410309041000030000840B +:106CA00000A00000000000A10000058421000000F9 +:106CB00000000000000000000000000000000000D4 +:106CC00000C090C001C010C001C084A10182900822 +:106CD00001C000880184042001C0828801848220D0 +:106CE00001C00009C184102001C088200190888360 +:106CF000000001C088900190908301C000210140F4 +:106D0000089001C088100190108301C0888801900C +:106D1000108301C000110108901001C00088010813 +:106D2000042001C088900190048301C000A00108E4 +:106D30001002000000000000000011000000000030 +:106D4000100008800080098080800380000809808E +:106D500011800380000009118000038000050900F4 +:106D60008000038000C089008000038080000980CB +:106D70001190000003808000098000A003800010B3 +:106D800009009000038080000980809003808000CB +:106D9000098080A00380001009800000038000208B +:106DA0000980910003808000098080A0038000009A +:106DB000098080800000000000000000000000004A +:106DC000000000008009808080408080800900826F +:106DD00011048080800980849102808080408984B1 +:106DE0008040808380042084000480000020009084 +:106DF000112080800003000480851140808080087D +:106E000080C011408080800880A09140808000096F +:106E100000A0910980008011008811088080000482 +:106E20000089910480800011008591208080800974 +:106E30008084000980800000000000000000000045 +:106E4000000000000000020084828201C0C0020035 +:106E500090830301C0C0840008C10500C0C00200C7 +:106E600008C10200C0C10801A1830201C0909000C6 +:106E700082C08900C0C00000900102834101C0C0EF +:106E8000020108C09101C0C0020184C01101C0C04C +:106E9000900010C01100C0900200A0C19100C0C0BD +:106EA0008801A0C00500C0C0A000A0C10501C0C0ED +:106EB000020010831000C0C00000000000000000AD +:106EC0000000000000000000009020C0C0C000C012 +:106ED000C0200888C08901C0C1200410C08801C03A +:106EE00091844004C08800C0C08484C0828801C0EE +:106EF00085880491C08800C0000184208403C004F8 +:106F000001C091842090C08900C021902090C002CF +:106F100000C085101021201001C011848890C08904 +:106F200000C0C1208420C08801C091C110C0C00829 +:106F300000C0C0908490C02000C00000000000008D +:106F40000000000000000000000041008080808000 +:106F50000980410080008088048041000080808991 +:106F600008804180008080854080C18000000080D2 +:106F70000480C1008005800020800001C1000085E0 +:106F800080800280418080008088058041208000D0 +:106F900080800580C180008500004180C1800000A4 +:106FA0008088108041000000808304804110000030 +:106FB00080801080C1000000800009800000000077 +:106FC00000000000000000000000000080048002BB +:106FD000800080008041001010000000801091109F +:106FE000008000808010802000808080800400105D +:106FF0009180808080089121000000800001804104 +:107000009120000000808004110500000000800431 +:10701000914000000080800211050000008080097E +:1070200080059000000080099140808080008000F1 +:107030001140000000008009000580008000000071 +:107040000000000000000000000000000000C0017F +:10705000C000C088C000C001C000A188A000C0015D +:107060002100C0080808C0012000C0040208C001B7 +:10707000900040C00208C0000900900810080001FC +:10708000C0010900A0404008C0010900208882001A +:10709000C001090090884008C0000900A002400813 +:1070A000C000020041889000C000050040020200BC +:1070B000C0008900A0882000C0008800408802002D +:1070C0000000000000000000004100000704000074 +:1070D000410002E042000042810043E0422281423E +:1070E000600043E042224842600043E042224842BE +:1070F000410043E04222840A810043E042224842A8 +:107100000000810043E042228142600043E04222CD +:107110004842600043E042224842600043E042228D +:10712000480A600043E042224842600043E04222B5 +:107130004842600043E042224842600002E04200D0 +:107140008442000000000000000000000000000079 +:10715000000000000000000000000000000000002F +:10716000000000000000000000000000000000001F +:10717000000000000000000000000000000000000F +:1071800000000000000000000000000000000000FF +:1071900000000000000000000000000000000000EF +:1071A00000000000000000000000000000000000DF +:1071B00000000000000000000000000000000000CF +:1071C00000000000000000000000000000000000BF +:1071D00000000000000000000000000000000000AF +:1071E000000000000000000000000000000000009F +:1071F000000000000000000000000000000000008F +:10720000000000000000000000000000000000007E +:10721000000000000000000000000000000000006E +:10722000000000000000000000000000000000005E +:10723000000000000000000000000000000000004E +:10724000000000000000000000000000000000003E +:1072500000000000000040084000008420004008BA +:1072600040000084200040084000008420004008C6 +:1072700040000084200040084000008420004008B6 +:1072800040000084200000004008400000842000EE +:107290004008400000842000400840000084200096 +:1072A0004008400000842000400840000084200086 +:1072B0004008400000842000400840000084200076 +:1072C0004008400000842000000000000000000092 +:1072D00000000000FFFFFFFF0000000000000000B2 +:1072E000000000000000000000000000000000009E +:1072F000000000000000000000000000000000008E +:10730000000000000000000000000000000000007D +:10731000000000000000000000000000000000006D +:10732000000000000000000000000000000000005D +:10733000000000000000000000000000000000004D +:10734000000000000000000000000000000000003D +:10735000000000000000FFFFFFFF00000000000031 +:10736000000000000000000000000000000000001D +:10737000000000000000000000000000000000000D +:1073800000000000000000000000000000000000FD +:1073900000000000000000000000000000000000ED +:1073A00000000000000000000000000000000000DD +:1073B00000000000000000000000000000000000CD +:1073C00000000000000000000000000000000000BD +:1073D0000000000000000030000010D03065000602 +:1073E000800F300030040006800E300030040006AC +:1073F000800E300030040006800E3000300400069D +:10740000800E300030040006800E30000000300492 +:107410000006800E300030040006800E300030047C +:107420000006800E300030040006800E300030046C +:107430000006800E300030040006800E300030045C +:107440000006800E300030650006800F300000001E +:10745000000000000000000000000000000000002C +:1074600000000000000000000F0F00FF00000000FF +:10747000FF0000FF00000000FFFF00FF0000000011 +:107480000F0FAAAA00000000FF00F0F000000000AB +:107490000000FF00F0F000000000FF0000FF00000F +:1074A0000000FF003C3C00000000FF00F0F0000086 +:1074B00000000F0F00FF00000000FF0000FF0000B1 +:1074C0000000FF003C3C0000000000000000000045 +:1074D00000000000000000000000000000000000AC +:1074E000000000000000000000000F0F00FF00007F +:1074F0000000FF0000FF00000000000000FF00008F +:1075000000000F0FAAAA00000000FF00F0F000002A +:1075100000000000FF00F0F000000000FF0000FF8E +:1075200000000000FF003C3C00000000FF00F0F005 +:10753000000000000F0F00FF00000000FF0000FF30 +:1075400000000000FF003C3C0000000000000000C4 +:10755000000000000000000000000000000000002B +:10756000000000000000000000000000FF0000FF1D +:10757000000000000F0F00FF00000000FF00F0F00F +:1075800000000000FF00F0F0000000003C3C00FFA5 +:107590000000000000003C3C00FF00000000FF0075 +:1075A00000FF000000003C3C00FF000000003C3CED +:1075B00000FF00000000FF0000FF00000000FF00CF +:1075C00000FF000000003C3C00FF00000000000045 +:1075D00000000000000000000000000000000000AB +:1075E0000000000000000000000000000000FF009C +:1075F00000FF000000000F0F00FF00000000FF0070 +:10760000F0F000000000FF00F0F0000000003C3C43 +:1076100000FF0000000000003C3C00FF00000000F4 +:10762000FF0000FF000000003C3C00FF00000000E5 +:107630003C3C00FF00000000FF0000FF00000000D5 +:10764000FF0000FF000000003C3C00FF00000000C5 +:10765000000000000000000000000000000000002A +:10766000000000000000000000000000000000001A +:10767000000000000000000090000000000000007A +:1076800000000000000000000000000000000000FA +:1076900000000000000000030000000000000000E7 +:1076A00000000000000000000000000000000000DA +:1076B00000000000000000000000000000000000CA +:1076C00000000000000000000000000000000000BA +:1076D0000000080040000000000000000000000062 +:1076E000000000000000000000000000000000009A +:1076F000000000000000100000000000000010006A +:107700000000000000000000000000000000410038 +:107710000000000000000000000000000000000069 +:107720000000000000000000000000000000000059 +:107730000000000000000000000000000000000049 +:1077400000001000100000001040000000000000C9 +:107750000000000000000000000000000000000029 +:107760000000020000000000000000000000000017 +:107770000000000000000000000000000000000009 +:1077800000000000000000000400000000000000F5 +:107790000000000090000000000000000000020057 +:1077A0000040000000009000000000000000000009 +:1077B0000040000008000000000000000000000081 +:1077C00000000000000000000000020002030000B2 +:1077D00000000000000000000000000000000000A9 +:1077E0000000000080000000000000000000000019 +:1077F0000000000000000000000000000000000089 +:1078000000000000000000000000800000000000F8 +:10781000008200000088000000000000000000005E +:1078200000000000000000880000000000000000D0 +:107830000000000000000000000000000000000048 +:107840000000000000000008001000000000001010 +:1078500000000000000000000010001000100000F8 +:107860000000000000000000000000000100000017 +:107870000000008000000000000000800000000008 +:1078800000000000000000000100000000000000F7 +:1078900000000000000000000000000000000000E8 +:1078A00000000000000000000000000000000000D8 +:1078B0000000000001800000000000000000000047 +:1078C0000000000004000000002100000000000093 +:1078D000000300000000000000100000000800008D +:1078E0000000000000000000000000000000200078 +:1078F00021000000002000002000000000201100F6 +:107900000000008811001100000004880000110030 +:107910002100210021002100030000881100000047 +:1079200000000088080000002184210811000000E8 +:1079300000820008110008040000009020000000F0 +:10794000000021A01184000811C00084000000087C +:1079500000842100200011000000210021A00082ED +:1079600000A000000000000000000040004001C036 +:1079700001C00000000000000100000088000100BC +:1079800000800000880000000080900000000000DF +:1079900000C000008800000040000000000000005F +:1079A00000000000000000000000000000050000D2 +:1079B000000900000005880500000100010000002A +:1079C00001000000000000000000008000800000B6 +:1079D000000000C0000000000000000000000000E7 +:1079E0000480000000000000000000000000000013 +:1079F0002020022000000000000004000000000021 +:107A000020000040000000000000002002000200F2 +:107A1000020000050000000000000000000000005F +:107A200000000000000000840000000000000000D2 +:107A30000008000000000000000000842084100006 +:107A400000002000000000000000000000200004F2 +:107A50000090000000050000000000000000000091 +:107A600000008040000220000000900000000000A4 +:107A70000000000010002100000000000180000054 +:107A800000410000104101110000008000000100D1 +:107A9000008000A000009000000001000000000035 +:107AA00000800080010000000000000000000000D5 +:107AB000000000000000000001000000000801803C +:107AC0002000000001000004000000000020000071 +:107AD0000000008000A00020000000000000000066 +:107AE0000100000000000183000000000000000011 +:107AF0000000008400008000020000C00008022096 +:107B00002100210021848084048400C0002000849E +:107B1000200003040005210000000300080200000B +:107B200040900004210420900000118403C009004B +:107B30000300118421840900218420000000210118 +:107B40001004210021C0088420011184030821852C +:107B5000008400C0000400051101110000840084AD +:107B600011C004A0000000840220000000000000FA +:107B7000000089000100000000008800044088091E +:107B80000000218801000000018088000100000938 +:107B9000020205088902040004090040000288026C +:107BA0000041010000000000C000000088008800C3 +:107BB0000000100000400000880000021040200873 +:107BC0000000000288210008880800080100000069 +:107BD0000009000088890020002100028808880030 +:107BE00000000008008004408802008000000000BF +:107BF00000000000100020000000000000008001D4 +:107C000000000000104020000000040400000400F8 +:107C100000000000820002008000820000000000DE +:107C20000000000020000000000000000000020032 +:107C30000000000000000000000000000000808242 +:107C4000800100000000000000000000000002822F +:107C500000000000000000400000000000000000E4 +:107C60000000000000000040800100000020000033 +:107C70000000000000000100900000000000000073 +:107C800000900000000001009000000000040000CF +:107C900000000000000000000020000000000000C4 +:107CA00000000000000000000000000000000000D4 +:107CB00000000000000000000000000000000000C4 +:107CC00001000000000000000100000000000000B2 +:107CD0000000900000000000000090000082000002 +:107CE0000000000000000000000000900000000004 +:107CF00000000000000000001100A10000000000D2 +:107D000000000080000000001100A1000000000041 +:107D100000000000000000001100008000000000D2 +:107D20000000000000000000000000000000000053 +:107D30000000000000000000000000000000000043 +:107D400000001100002100000000110021000000CF +:107D50000000110080000000000011008000000001 +:107D60000000000000000000000000000080000093 +:107D70000000000000000000000000080980000969 +:107D800000000000008000000080000809000011D1 +:107D90000080000000800000000000088000000952 +:107DA0000080000000000000000000080000000843 +:107DB00000000000000000000000000000000000C3 +:107DC0000000000000090000110900000041090046 +:107DD000001000800000008000000080000800808B +:107DE000000800000000000000000000000000008B +:107DF000000000000000000000000000000101027F +:107E0000000000880000001000000010000101A028 +:107E1000000000020000000800000084000190043F +:107E2000000000080000000000000000000000004A +:107E30000000000000000000000000000000000042 +:107E40000000000000000000000001000000000130 +:107E500001000001008800000020000000C00001B7 +:107E60000020000100200000000000000000880049 +:107E700000880000008800000000000000000500ED +:107E8000888802000000000002004090000001000D +:107E900088882000000000000200400000000090E0 +:107EA000080040000000000000000000000000008A +:107EB00020000000000000000000000000000000A2 +:107EC00000000000000000000000080000010000A9 +:107ED0000000880000000100C100008802000100CD +:107EE0000100048890000100000000000000000074 +:107EF000010000008290000000000000000000006F +:107F0000410000808000410000008000808000006F +:107F1000410000800000410005008000800000005A +:107F200005808000800005000000000000000000C7 +:107F30000000000000002000000000000000000021 +:107F400000000000000000000000000080000008A9 +:107F50000900000000000000410041000080800096 +:107F60000900410000800000200000000000000027 +:107F700000002000000080800000000000000000E1 +:107F80000000001100000080040000090000000053 +:107F9000000000110400008000000020000000002C +:107FA00000000009000000000000000000000000C8 +:107FB00000000000000000000000000000000000C1 +:107FC00000000000000000000000000000001100A0 +:107FD000000000000004211100000000001100005A +:107FE0000080000000110000008000000000000080 +:107FF00000000000001180080000000000000000E8 +:10800000000000000001000000400000000000002F +:108010000088000000010000004000000001000096 +:108020000000000000000000000000000000000050 +:108030000000000000000000000000000000000040 +:108040000000000000000000000000000000000030 +:10805000010000000000000000010000000000011D +:10806000000000400000000100000040000000008F +:1080700000000000000000012001000000000000DE +:10808000000000000000000000E007008200008205 +:10809000040007810000000000E007008200008269 +:1080A000000007000000410002E00700000000009F +:1080B000000000000000410002E00000000000009D +:1080C00000000000000000000000000000000000B0 +:1080D000500043E000220000000000E00000814169 +:1080E0000000000007008221500002E0070082002B +:1080F0000000000000000000000A8400078100006A +:10810000000000000000000000000000F0F000008F +:108110000000000000FF000000000000F0F0000080 +:108120000000000000000000000000003C3C0000D7 +:10813000000000000000000000000000000000003F +:10814000000000000000000000000000000000002F +:10815000000000000000000000000000000000001F +:10816000000000000000F0F0000000000000F0F04F +:108170000000000000000000000000FF000000FF01 +:108180000000000000000000000000000000F0F00F +:1081900000000000000000FF000000000000F0F000 +:1081A00000000000000000000000000000003C3C57 +:1081B00000000000000000000000000000000000BF +:1081C00000000000000000000000000000000000AF +:1081D000000000000000000000000000000000009F +:1081E0000000000000000000F0F0000000000000AF +:1081F000F0F00000000000000000000000FF0000A0 +:1082000000FF000000000000000000000000FFFF71 +:108210000000FFFF0000FF000000FFFF00003C3CEB +:108220000000FFFF00000000000000000000FF0051 +:1082300000000F0F00000000000000000000000020 +:10824000000000000000000000000000000000002E +:10825000000000000000000000000000000000001E +:108260000000000000000000FFFF0000FFFF000012 +:108270000F0F0000FFFF00000000000000000000E2 +:10828000FF0000003C3C0000000000000000000077 +:108290000000000000000000FF00000000000000DF +:1082A0003C3C000000000000000000000000000056 +:1082B000FF0000000F0F00000000000000000000A1 +:1082C00000000000000000000000000000000000AE +:1082D000000000000000000000000000000000009E +:1082E000000000000000000000000000000000008E +:1082F00000000F0F00000000000000000000000060 +:108300000000FF0000003C3C0000000000000000F6 +:1083100005402A06054C00A800082A20054005A8AB +:1083200005402A06054C00A805180A20050005A0EE +:10833000057D2A06854F25A80000000000000000EA +:1083400000650006800F2000000000000000000013 +:108350000000000000000000000000040006800E85 +:10836000200000400006000C000005002A00054027 +:1083700000A805652A06854F20A80000000000001F +:10838000000015182A20054005A800000000000084 +:10839000000000003C3CFFFF000000000000000067 +:1083A00000000000FF00FFFF0000000000000000D0 +:1083B00000000000000000000000000000000000BD +:1083C00000000000000000000000000000000000AD +:1083D0000000000000000000000000000000FF009E +:1083E00000FF00000000FF00FFFF00000000000091 +:1083F000000000000000000000000000000000007D +:10840000000000000000000000000000000000006C +:108410000000000000003C3C0000000000000000E4 +:10842000000000000000FF0000000000000000004D +:10843000000000000000000000000000000000003C +:10844000000000000000000000000000000000002C +:10845000000000000000000000000000000000001C +:10846000FF0000FF00000000FF000000000000000F +:1084700000000000000000000000000000000000FC +:1084800000000000000000000000000000000000EC +:1084900000000000000000000000F0F000000000FC +:1084A00000000000000000000000F0F000000000EC +:1084B00000000000000000000000000000000000BC +:1084C00000000000000000000000000000000000AC +:1084D000000000000000000000000000000000009C +:1084E0000000FF0000FF000000000000F0F00000AE +:1084F000000000000000000000000000000000007C +:10850000000000000000000000000000000000006B +:10851000000000000000000000000000F0F000007B +:10852000000000000000000000000000F0F000006B +:10853000000000000000000000000000000000003B +:10854000000000000000000000000000000000002B +:10855000000000000000000000000000000000001B +:1085600000000000FF0000FF000000000000F0F02D +:1085700000000000000000000000000000000000FB +:1085800000000000000000000000000000000000EB +:1085900000000000000000000000000000000000DB +:1085A00000000000000000000000000000000000CB +:1085B0000000000004000000000000001100110095 +:1085C00000000000000000000000000000000000AB +:1085D000000000030000000900000000000000008F +:1085E000000000000000000000000000000000008B +:1085F000000000000000000000000000000001007A +:108600000008000000000000000000000000000062 +:10861000000000000000000000000000000000005A +:108620000000000000000002000000000000000048 +:108630000000000000000000000000000000A00298 +:10864000A002000000020000000000000000000086 +:10865000000000000000000000000000000000001A +:108660000000000200000000000000000000000008 +:1086700000000002000000020002000200000002F0 +:1086800002020000000000020002000200000000E0 +:1086900000000000000000000000000000000000DA +:1086A00000000000000000000000000000000000CA +:1086B000200020002000100000000000000000004A +:1086C0000000000500000000000000000000900015 +:1086D0000000000008000000000000000000000092 +:1086E00000000041000990000000000000000000B0 +:1086F000000000000000000000000000000000007A +:108700000200000000400200000000000000000025 +:10871000000000080000000400000000000000004D +:108720000000000000000000000000000000000049 +:108730000000800080008000800000000000000039 +:108740000000000000000000000000000000000029 +:108750000000000000000000000000000000000019 +:108760000000000000000000000000000000000009 +:1087700000000000000000000000000000000000F9 +:1087800000008000000000018000000000000000E8 +:1087900000000000000100000001000000000000D7 +:1087A0000000000000000000000088000000000041 +:1087B00000000000000000000000000000000005B4 +:1087C0000000A08000000000010000000000000088 +:1087D0000000000990000011A0000000000000004F +:1087E0000000000000000000080000000000000081 +:1087F0000000000000000000A000000000000000D9 +:108800009000000000000021000040004000000037 +:1088100000030000008000040000000000000000D1 +:10882000000000C000000000000000000000000088 +:10883000110000C0000000000000008400000000E3 +:10884000000000000008000000001000000005000B +:108850000000050000000000009000000000000083 +:108860000000000000000000000000000000000008 +:1088700000000000000000000000000000C000C078 +:10888000000000A011000000000000000000000037 +:1088900000000000000000040001000000000000D3 +:1088A00000000000000000000000000000090004BB +:1088B00000040000000000000000000000000000B4 +:1088C0000000010000800005000500090100000013 +:1088D0000000000000000000000000000000000098 +:1088E0000000000000000000000000000000000088 +:1088F00000000000000000000000000001000080F7 +:108900000000000000000000000000000000010066 +:108910000000000000000000000000000000000057 +:108920000000000000000000000000000000000047 +:1089300000000000000000000000000000880000AF +:10894000000000002000000400000000008420005F +:108950000000000000000000000000000000000017 +:10896000000000000000000000880000000000007F +:1089700000000000000000000000000000002000D7 +:1089800000040000000000000000000000000000E3 +:1089900004000000000000000000000000000000D3 +:1089A00000000000000000000000000000000000C7 +:1089B00000000000000000000000000000000000B7 +:1089C0009000000000000000000000800000000097 +:1089D0000000000084000000000000000000000013 +:1089E0000000000000000000000000000000000087 +:1089F00000000000000000000000900000000000E7 +:108A00000000000000000000000000000000000066 +:108A100000000000000000000000000000000088CE +:108A2000008000800084000000C000000000000002 +:108A3000008400840084000000A000840000000086 +:108A4000008400C021840000008400C000040000F5 +:108A500000A000840000000000000000418400002D +:108A60000090000000000084088400002100000045 +:108A700008840000000000000084000000842184BD +:108A8000210000840000001000C0000000C000842D +:108A90002100008400080084000000C000C000A085 +:108AA00000040004000400000000000000000009B1 +:108AB0000000000000000000000000020002880921 +:108AC00000000000000290040000000200040040CA +:108AD00000000021000900020002000284040000DE +:108AE00000000000900000000004000000000000F2 +:108AF0000004002000000000200088042000000086 +:108B000000080004000000024004880000029000F9 +:108B1000000000000000000000040000000400004D +:108B200000118800000000000000000000000000AC +:108B30000000000000000000000000000000000035 +:108B40000000000000000000000000000000000025 +:108B50001100000000000000000000000000000004 +:108B60000000000000000000000000000000000005 +:108B70000000000000000000000000840000000071 +:108B800000000001000000000000000000000000E4 +:108B900000000000000000000000000000000000D5 +:108BA00000000000000000000000000000000000C5 +:108BB00000000000000000000000000000000000B5 +:108BC00000000000000000000000010000000000A4 +:108BD0000000010000000000000000000000000094 +:108BE0000000000000000000000000000000000085 +:108BF0000000000000000000000000000000000075 +:108C00000000000001000000000000000000000063 +:108C100000000000000000900000000000000000C4 +:108C200000000000000000009000000000000000B4 +:108C30000000000000000000000000000000000034 +:108C400000000000000000000000000011002100F2 +:108C500000000000110000210000000000000000E2 +:108C60000000000000000000000000000000000004 +:108C700000000000000000000000000000000000F4 +:108C800000000000000011002100000000000000B2 +:108C90000000000000000000008000000000000054 +:108CA0000000000000000000000080000000000044 +:108CB00000000000000000000000000000000000B4 +:108CC0000000000000000000090000410000004119 +:108CD0000900000300000009000011090000000065 +:108CE0000000000000000000000000000000000084 +:108CF0000000000000000000000000000000000074 +:108D00000000000000000000004109000003008096 +:108D100000000000000000000000000000000080D3 +:108D20000000000000000000000200000041000000 +:108D30000000000000000000000000000000000033 +:108D40000000000000000000000001000001000021 +:108D50000001010000000000000000000100000010 +:108D60000000000000000000000000000000000003 +:108D700000000000000000000000000000000000F3 +:108D800000000000000000000000000101000000E1 +:108D900000880000000000000000000000840000C7 +:108DA00000040000000000000000000000000001BE +:108DB00000000000000000000000000000000000B3 +:108DC000000000000000000000000000C0000000E3 +:108DD0000100000088000000000000000800000101 +:108DE0000100000000000000000000000000000082 +:108DF0000000000000000000000000000000000073 +:108E000000000000000000000000000000008800DA +:108E10000000010000000000000000000000000051 +:108E2000829000000000000000000000000002002E +:108E30000000010000000000000000000000000031 +:108E40000000000000000000000000000009000019 +:108E50000000200000000000000009000000800069 +:108E600000084100000000000000000000000000B9 +:108E700000000000000000000000000000000000F2 +:108E800000000000000000000000000000000000E2 +:108E9000000000004100000000000000000005008C +:108EA00000008080000000000000000000000000C2 +:108EB0000000000041000000000000000000000071 +:108EC0000000000000000000000000000000000999 +:108ED000002100000000000000110000000000025E +:108EE0001100000000000000000000000000000071 +:108EF0000000000000000000000000000000000072 +:108F00000000000000000000000000000000000061 +:108F1000000002110000000000000000000000003E +:108F20000011804000000000000000000000000070 +:108F30000000000000000000000000000000000031 +:108F40000000000000000000000000000000000021 +:108F5000000100000000000000000001000000000F +:108F60000000010000000000000000000000000000 +:108F700000000000000000000000000000000000F1 +:108F800000000000000000000000000000000000E1 +:108F900000000000000100000000000000000000D0 +:108FA0000000000120010088000000000000000017 +:108FB00000000000000000000000000000000000B1 +:108FC00000000000000000000000000000000000A1 +:108FD0000000000000E000000081000000E0000050 +:108FE0008100810043E00022000A00000000000030 +:108FF0000000000000000000000000000000000071 +:109000000000000000000000000000000000000060 +:1090100000000000000000E00000814100000000AE +:109020000000000000000000070000000000000039 +:1090300000000000000002E000000042000000000C +:109040000000000000000000000000000000000020 +:109050000000000000000000000000000000000010 +:109060000000000000000000000000000000000000 +:1090700000000000000000000000000000000000F0 +:1090800000000000000000000000000000000000E0 +:1090900000000000000000000000000000000000D0 +:1090A0000000000000000000FF000000FF000000C2 +:1090B00000000000000000000000000000000000B0 +:1090C00000000000000000000000000000000000A0 +:1090D0000000000000000000000000000000000090 +:1090E0000000000000000000000000000000000080 +:1090F0000000000000000000000000000000000070 +:10910000000000000000000000000000000000005F +:10911000000000000000000000000000000000004F +:1091200000000000000000000000FF000000FF0041 +:10913000000000000000000000000000000000002F +:10914000000000000000000000000000000000001F +:10915000000000000000000000000000000000000F +:1091600000000000000000000000000000000000FF +:1091700000000000000000000000000000000000EF +:1091800000000000000000000000000000000000DF +:1091900000000000000000000000000000000000CF +:1091A00000000000000000000000000000000000BF +:1091B00000000000000000000000000000000000AF +:1091C000000000000000000000000000000000009F +:1091D000000000000000000000000000000000008F +:1091E000000000000000000000000000000000007F +:1091F000000000000000000000000000000000006F +:10920000000000000000000000000000000000005E +:10921000000000000000000000000000000000004E +:1092200000000000000000000000000000FF00003F +:10923000FFFF000000000000000000000000000030 +:10924000000000000000000000000000000000001E +:10925000000000000000000000000000000000000E +:1092600000000000000000000000000000000000FE +:1092700000000000000000000000000000000000EE +:1092800000000000000000000000000000000000DE +:1092900000000000000000000000000000000000CE +:1092A000000000000000000000000000000000FFBF +:1092B00000000000000000000000000000000000AE +:1092C000000000000000000000000000000000009E +:1092D000000000000000000000000000000000602E +:1092E0000006000C000000600006000C00000004F6 +:1092F0000006800E200000000000000000000000BA +:10930000000000000000000000000000000000005D +:10931000000000000000000000000000000000004D +:1093200000400006000C00000000000000000000EB +:1093300015002A00054000A8000000000000000001 +:1093400000650006000E2000000000000000000084 +:10935000000000000000000000000000000000000D +:10936000000000003C3C000000000000FFFF000087 +:109370000000FF0000FF00000000000000000000EF +:1093800000000000000000000000000000000000DD +:1093900000000000000000000000000000000000CD +:1093A00000000000FF00FFFF0000000000000000C0 +:1093B00000000000000000000000000000000000AD +:1093C000000000000000AAAA000000000000000049 +:1093D000000000000000000000000000000000008D +:1093E0000000000000003C3C000000000000000005 +:1093F00000000000FF0000FF00000000000000006F +:10940000000000000000000000000000000000005C +:10941000000000000000000000000000000000004C +:10942000000000000000FF0000000000000000003D +:10943000000000000000000000000000000000002C +:109440000000000000000000AAAA000000000000C8 +:10945000000000000000000000000000000000000C +:109460000000000000000000F0F00000000000001C +:10947000F0F000000000FF0000FF0000000000000E +:1094800000000000000000000000000000000000DC +:1094900000000000000000000000000000000000CC +:1094A00000000000000000000000F0F000000000DC +:1094B00000000000000000000000000000000000AC +:1094C000000000000000000000000000000000009C +:1094D000000000000000000000000000000000008C +:1094E00000000000000000000000F0F0000000009C +:1094F0000000F0F000000000FF0000FF000000008E +:10950000000000000000000000000000000000005B +:10951000000000000000000000000000000000004B +:10952000000000000000000000000000F0F000005B +:10953000000000000000000000000000000000002B +:10954000000000000000000000000000000000001B +:10955000000000000000000020002000200020008B +:1095600000000000000000000000000000000000FB +:1095700000000000000000000000000000000000EB +:1095800000000000000000000000000000000000DB +:1095900000030000000000000000000000000000C8 +:1095A000000000000000000000000080008000803B +:1095B000008000000000000000000000000000002B +:1095C000400000000000000000000000000000005B +:1095D000000000000000000000008000800080000B +:1095E00080000000000000000000000000000000FB +:1095F000000000000000000000000000002000004B +:109600000000000000000000050000000000000055 +:10961000000000000000000000000000004000000A +:1096200000020000000000000000000000400040B8 +:109630000040004010000000000000020002000096 +:1096400040000000000000000000000000000000DA +:109650000000000000000000000000008200820006 +:1096600082008200000000000000000000000000F6 +:1096700000000000100000000009000000000000D1 +:1096800000000000000000000010000000000000CA +:109690000000000000000000000000100000820038 +:1096A0000000820000008200820000000000000034 +:1096B00000000000000000000000000000000000AA +:1096C000000000000000000000000000000000009A +:1096D000000000000000000000000000000000008A +:1096E000000000000000000000000000000000007A +:1096F00000000000000080000000000000000000EA +:109700000000000000000000000000000000000059 +:1097100000000000008800000000000000000000C1 +:109720000000000000000000000000000000000039 +:109730000000000000000000000000000000000029 +:109740000000000000000000000000000000000019 +:109750000000000000000000000000000000000009 +:1097600000000000000000000000000000000000F9 +:1097700000000000000000000000000000000000E9 +:1097800000000000000000000000000000000000D9 +:1097900082000000820000000000000000000000C5 +:1097A00000000000000000000000000000000000B9 +:1097B00000000000000000000000000000000000A9 +:1097C0000000000000000000000000000000000099 +:1097D0000000000000000000000000000000000089 +:1097E0000000000000000000000000000000000079 +:1097F0000000000000000000000000000000000069 +:109800000000000008000000080000000000000048 +:109810000000000000000000000000000000000048 +:109820000000000000000000000000000000000038 +:109830000000000000000000000000000000000028 +:109840000000000000000000000000000000000018 +:109850000000000000000000000000000000000008 +:1098600000000000000000000000000000000000F8 +:1098700000000040000000000000000800000000A0 +:109880000100008008000000080000040000000043 +:1098900000000000000000000000000000000000C8 +:1098A00000000000000000000000000000000000B8 +:1098B0000000000000000000000001000180000026 +:1098C0000000000000000000000000000000000098 +:1098D0000000000000000000000000000000000088 +:1098E0000000000000000000000000001000000068 +:1098F0000000000000000000000000000000000068 +:109900000000200000040000000000000000000033 +:109910000000000000000000000000000000000047 +:109920000000000000000000000000000000000037 +:1099300000000000000000000000000020000404FF +:109940000000000000000000000000000000000017 +:109950000000000000000000000000000000000007 +:1099600000000000000000000000000000000000F7 +:109970000000000000000000000000000000900057 +:1099800000000000000000000000000000000000D7 +:1099900000000000000000000000000000000000C7 +:1099A00000000000000000000000000000000000B7 +:1099B0000000900000000000900000000000000087 +:1099C0001000000000000000000000000000000087 +:1099D0000000000000000000000000000000000087 +:1099E0000000000000000000000000000000000077 +:1099F00000000000000000C0110000000000000096 +:109A000000C0000000000084000000000000000012 +:109A1000008400000000000000000000002004009E +:109A20000000000000000000000000000000000036 +:109A30000000000000000000000000C00000000066 +:109A40000084800000000000000800840000000086 +:109A50000000008400000000000000000000000082 +:109A600000000000000000000000000000000000F6 +:109A700000000000000000000000000000000000E6 +:109A800000000000000000000000000000000000D6 +:109A900000020009000000000000000200000000B9 +:109AA00000000000000000000000000000000000B6 +:109AB000000000000000000088000000000000001E +:109AC0000000000000000010000000020000000084 +:109AD0000000000000040000000000000002000080 +:109AE0000000000000000000000000000000000076 +:109AF0000000000000000000000000000000000066 +:109B00000000000000000000000000000000000055 +:109B10000000000000000000000000000000000045 +:109B20000000000000000000000000000000000035 +:109B30000000000000000000000000000000000025 +:109B40000000000000000000000000000000000015 +:109B50000000000000000000000000000000000005 +:109B600000000000000000000000000000000000F5 +:109B700000000000000000000000000000000000E5 +:109B800000000000000000000100000000000000D4 +:109B900000000000000000000000000000000000C5 +:109BA00000000000000000000000000000000000B5 +:109BB00000000000000000000000000000000000A5 +:109BC0000000010090900000000000000000000074 +:109BD0000000000000000000000000000000000085 +:109BE0000000000000000000000000000000000075 +:109BF0000000000000000000000000000000000065 +:109C00000000000000000000000011002100000022 +:109C10000000000000000000000000000000000044 +:109C20000000000000000000000000000000000034 +:109C30000000000000000000000000000000000024 +:109C40000000000011002180000000000000000062 +:109C50000000000000000000000000000000000004 +:109C600000000000000000000000000000000000F4 +:109C700000000000000400000004000000000000DC +:109C8000000000000000000000000000004109008A +:109C900000030000000000000000000000000000C1 +:109CA00000000000000000000000000000000000B4 +:109CB00000000000000000000000000000000000A4 +:109CC00000000000000000C10980000300800000C7 +:109CD0000000000000000000000000000000000084 +:109CE0000000000000000000000000000000000074 +:109CF0000000000000000001000000010000000062 +:109D00000000000000000000000000000000000152 +:109D10000100000000000000000000000000000042 +:109D20000000000000000000000000000000000033 +:109D30000000000000000000000000000000000023 +:109D40000000000000000000000901040000000203 +:109D50000000000000000000000000000000000003 +:109D600000000000000000000000000000000000F3 +:109D7000000000000000000000008400000001005E +:109D800000000000000000000000000000000000D3 +:109D9000000088000000000000000000000000003B +:109DA00000000000000000000000000000000000B3 +:109DB00000000000000000000000000000000000A3 +:109DC0000000000000000000000001008800C090BA +:109DD0000000000002000000000000000000000081 +:109DE0000000000000000000000000000000000073 +:109DF0000000000000000000000000000000000063 +:109E0000040000000000000000000000000000004E +:109E10000000000000000000090000000000000039 +:109E20000000000000000000000000000000000032 +:109E30000000000000000000000000000000000022 +:109E40000000000000000000000000000900000009 +:109E50008080410000008000000000000000000041 +:109E600000000000000000000000000000000000F2 +:109E700000000000000000000000000000000000E2 +:109E800000000000000000000000000000000000D2 +:109E900000000000000000110000000000000000B1 +:109EA00000000000000000000000000000000000B2 +:109EB00000000000000000000000000000000000A2 +:109EC0000000000000000000000000000000001181 +:109ED00080110000000000000000000000000000F1 +:109EE0000000000000000000000000000000000072 +:109EF0000000000000000000000000000000000062 +:109F00000000000000000000000000000000000051 +:109F10000000000000000000000100000000000040 +:109F20000000000000000000000000000000000031 +:109F30000000000000000000000000000000000021 +:109F40000000000000000000000000000000000011 +:109F50000001200100880000000000000000000057 +:109F600000000000000000000000000000000000F1 +:109F700000000000000000000000000000000000E1 +:109F8000410002E0000000000000000000000000AE +:109F90000000000000000000000000E00000810060 +:109FA00000000000000000000000000000000000B1 +:109FB00000000000000000000000000000000000A1 +:109FC0000000000000000000000000000000000091 +:109FD0000000000000E00700811100000000000008 +:109FE0000000000000000000000000000000000071 +:109FF0000000000000000000000000000000000061 +:10A000000000000000000000000000000000000050 +:10A010000000000000000000000000000000000040 +:10A020000000000000000000000000000000000030 +:10A030000000000000000000000000000000000020 +:10A040000000000000000000000000000000000010 +:10A050000000000000FF000000FF00000000000002 +:10A0600000000000000000000000000000000000F0 +:10A0700000000000000000000000000000000000E0 +:10A0800000000000000000000000000000000000D0 +:10A0900000000000000000000000000000000000C0 +:10A0A00000000000000000000000000000000000B0 +:10A0B00000000000000000000000000000000000A0 +:10A0C0000000000000000000000000000000000090 +:10A0D00000000000000000FF000000FF0000000082 +:10A0E0000000000000000000000000000000000070 +:10A0F0000000000000000000000000000000000060 +:10A10000000000000000000000000000000000004F +:10A11000000000000000000000000000000000003F +:10A12000000000000000000000000000000000002F +:10A13000000000000000000000000000000000001F +:10A14000000000000000000000000000000000000F +:10A1500000000000000000000000FF000000FFFF02 +:10A1600000000000000000000000000000000000EF +:10A1700000000000000000000000000000000000DF +:10A1800000000000000000000000000000000000CF +:10A1900000000000000000000000000000000000BF +:10A1A00000000000000000000000000000000000AF +:10A1B000000000000000000000000000000000009F +:10A1C000000000000000000000000000000000008F +:10A1D000000000000000000000000000FF00000080 +:10A1E000000000000000000000000000000000006F +:10A1F000000000000000000000000000000000005F +:10A200000000000000000000000000650006800F54 +:10A21000200000000000000000000000000000001E +:10A22000000000600006000C0000000000000000BC +:10A23000000000000000000000000000000000001E +:10A24000000000000000000000000000000000000E +:10A2500000000000000000000000000015402A0679 +:10A26000054C00A8000000000000000000000000F5 +:10A2700000000000000000000000000000000000DE +:10A2800000000000000000000000000000000000CE +:10A2900000000000000000000000000000000000BE +:10A2A0000000000000000000FFFF000000000000B0 +:10A2B000000000000000000000000000000000009E +:10A2C000000000000000000000000000000000008E +:10A2D000000000000000000000000000000000007E +:10A2E0005555FFFF000000000000000000000000C6 +:10A2F000000000000000000000000000000000005E +:10A30000000000000000000000000000000000004D +:10A31000000000000000000000000000000000003D +:10A32000000000000000000000000000000000002D +:10A33000000000000000000000000000000000001D +:10A34000000000000000000000000000000000000D +:10A3500000000000000000000000000000000000FD +:10A360000000555500000000000000000000000043 +:10A3700000000000000000000000000000000000DD +:10A3800000000000000000000000000000000000CD +:10A3900000000000000000000000000000000000BD +:10A3A000000000000000000000000000F0F00000CD +:10A3B000000000000000000000000000000000009D +:10A3C000000000000000000000000000000000008D +:10A3D000000000000000000000000000000000007D +:10A3E000000000000000F0F000000000000000008D +:10A3F000000000000000000000000000000000005D +:10A40000000000000000000000000000000000004C +:10A41000000000000000000000000000000000003C +:10A420000000000000000000000000000000F0F04C +:10A43000000000000000000000000000000000001C +:10A44000000000000000000000000000000000000C +:10A4500000000000000000000000000000000000FC +:10A460000000000000000000F0F00000000000000C +:10A4700000000000000000000000000000000000DC +:10A4800000000000000000000000000000000000CC +:10A4900000000000000000000000000000000000BC +:10A4A00000000000000000000000000000000000AC +:10A4B000000000000000000000000000000000009C +:10A4C0000000000000000000000000000003000089 +:10A4D000000000000000000000000000000000007C +:10A4E000000000000000000000000000000000006C +:10A4F000000000000000000000000000000000005C +:10A50000000000000000000000000000000000004B +:10A510000000000000000000000000020000000237 +:10A52000000000000000000000000000000000002B +:10A530000000000000000000000000000000000219 +:10A54000000000000000000000000000000000000B +:10A5500000000000000000000000000000000000FB +:10A5600000000000000000000000000000000000EB +:10A5700000000000000000000002000000000000D9 +:10A580000002000000901002000200000000000025 +:10A5900000000000000000000000020000000200B7 +:10A5A000100000000100000000000000000000009A +:10A5B0000000000000000000820082000041000056 +:10A5C000000000000000000000000800080000007B +:10A5D000000000000000000000000040000000003B +:10A5E000000000400000000000000000000000101B +:10A5F000000000000000000000000000000000005B +:10A60000000000000000000000000000000000004A +:10A6100000000000000000000000000080000000BA +:10A6200000008000000002000000000000000000A8 +:10A63000000000000000000000000000000000001A +:10A64000000000000000000000000000000000000A +:10A6500000000000000000000000000000000000FA +:10A6600000000000000000000000000000000000EA +:10A6700000000000000000000000000000000000DA +:10A6800000000000000000000000000000000000CA +:10A6900000000000000000000000000000000000BA +:10A6A00000000000000000000000000000000000AA +:10A6B0000010000000000000000400000000000086 +:10A6C000000000000000000000000000000000008A +:10A6D000000000000000000000000000000000007A +:10A6E0000000000000000000000000000000000862 +:10A6F000000000000000000000000000000000005A +:10A7000000000000401040000000000000000000B9 +:10A710000000000000000000000000000000000039 +:10A720000000000000000000000000000000000029 +:10A730000000000000000000000000000000000019 +:10A740000000000000000000000000000000000009 +:10A7500000000000000000000000000000000000F9 +:10A7600000000000000000000000000000000000E9 +:10A7700000010000000000000000000000000000D8 +:10A7800000000000000000000000000000000000C9 +:10A7900000000000000000000000000000000000B9 +:10A7A000010001000100010400000000010001801F +:10A7B0000000000000000000000000000000000099 +:10A7C0000000000000000000000000000000000089 +:10A7D0000000000000000000000000000000000079 +:10A7E0000000000000000000000000000000000069 +:10A7F0000000000000000180018000000000000057 +:10A800000000000000000000000000000000000048 +:10A810000000000000000000000000000000000038 +:10A820000000200020002000200000000004200084 +:10A8300040040000000000000000000000000000D4 +:10A840000000000000000000000000000000000008 +:10A8500000000000000000000000000000000000F8 +:10A8600000000000000000000000000000000000E8 +:10A870000000000000000000202004040000000090 +:10A8800000000000000000000000000000000000C8 +:10A8900000000000000000000000000000000000B8 +:10A8A00000002000000000000003900000400004B1 +:10A8B0000040100000000000000000000000000048 +:10A8C0000000000000000000000000000000000088 +:10A8D0000000000000000000000000000000000078 +:10A8E0000000000000000000000000000000000068 +:10A8F0000000900090000100000000001000000027 +:10A900000005000000000000000000000000000042 +:10A910000000000000000000000000000000000037 +:10A920000000000000000000000000A00000000087 +:10A9300000000000800400000000000000C00000D3 +:10A940000000008400000000000000000000000083 +:10A9500000000000000000000000000000000000F7 +:10A96000000000000000000000A000000000000047 +:10A9700000000000000000C002000000008480848D +:10A9800000000000000000000000000000000000C7 +:10A9900000000000000000000000000000000000B7 +:10A9A00000000000000000000000000000000000A7 +:10A9B0002000010000000000000000000000000076 +:10A9C0000000000000000000000000000002000085 +:10A9D0000000000000000000000000000000000077 +:10A9E0000000000000000000000000000000000067 +:10A9F0000000000000000000000000000100000056 +:10AA00000000000000000002000200000010000032 +:10AA10000000000000000000000000000000000036 +:10AA200000000000000000000000000000004100E5 +:10AA30000000800020000000000000000000000076 +:10AA40000000000000000000000000000000000006 +:10AA500005000000000000000000000000000000F1 +:10AA600000000000000000000000000000000000E6 +:10AA700000000000000000000000000000002000B6 +:10AA800000000000000000000000000000000000C6 +:10AA900000000000000000000000000000000000B6 +:10AAA00000000000000000000000000000000000A6 +:10AAB0000000000000C000C00220908800000000DC +:10AAC0000000000000000000000000000000000086 +:10AAD0000000000000000000000000000000000076 +:10AAE0000000000000000000000000000000000066 +:10AAF0000000000000000000000000000000010055 +:10AB000090000000000000000000000000000000B5 +:10AB10000000000000000000000000000000000035 +:10AB20000000000000000000000000000000000025 +:10AB300000001000000010800080000000000000F5 +:10AB40000000000000000000000000000000000005 +:10AB500000000000000000000000000000000000F5 +:10AB600000000000000000000000000000000000E5 +:10AB700000000000000000000000000000000000D5 +:10AB80001100A10000000000000000000000000013 +:10AB900000000000000000000000000000000000B5 +:10ABA00000000000000000000000000000000000A5 +:10ABB0000011000000080000000809800003008068 +:10ABC0000000000000000000000000000000000085 +:10ABD0000000000000000000000000000000000075 +:10ABE0000000000000000000000100000000000064 +:10ABF0000000000000000000000000000000000055 +:10AC00000000000809800003008000000000000030 +:10AC10000000000000000000000000000000000034 +:10AC20000000000000000000000000000000000024 +:10AC300000000000000000010000208521C0080085 +:10AC400088C00000000000000000000000000000BC +:10AC500000000000000000000000000000000000F4 +:10AC600000000000000000000000000000000000E4 +:10AC700000000000000000000000000000000000D4 +:10AC800000000000000101020000001000000000B0 +:10AC900000000000000000000000000000000000B4 +:10ACA00000000000000000000000000000000000A4 +:10ACB00000000000000010000000000009888890DB +:10ACC000C008008300000200000000000000000037 +:10ACD0000000000000000000000000000000000074 +:10ACE0000000000000000000000000000001000063 +:10ACF0000000000000000000000000000000000054 +:10AD000000000000000001008888880000000000AA +:10AD10000200000000000000000000000000000031 +:10AD20000000000000000000000000000000000023 +:10AD30000000000000000000800000001100410041 +:10AD4000001080214141050080000000000000004B +:10AD500000000000000000000000000000000000F3 +:10AD600000000000000000000000000000000001E2 +:10AD700000000000000000000000000000000000D3 +:10AD800000000000000000004100008000004100C1 +:10AD90000000800000000000000000000000000033 +:10ADA00000000000000000000000000000000000A3 +:10ADB0000000000000000000001000000000000083 +:10ADC0008000801080008000000000000000000073 +:10ADD0000000000000000000000000000000000073 +:10ADE0000000000000000000000000000000000063 +:10ADF0000001000000000000000000000000000052 +:10AE000000000000000000000000001100000080B1 +:10AE10000200000000000000000000000000000030 +:10AE20000000000000000000000000000000000022 +:10AE30000000000000000000000000000000000012 +:10AE40000000C000C000C020C000000000000000E2 +:10AE500000000000000000000000000000000000F2 +:10AE600000000000000000000000000000000000E2 +:10AE700000000001000000000000000000000000D1 +:10AE800000000000000000000000000000010000C1 +:10AE90000040000000000000000000000000000072 +:10AEA00000000000000000000000000000000000A2 +:10AEB000000000000000000000000000810000E031 +:10AEC00000000000000000E04200484200000000D6 +:10AED0000000000000000000000000000000000072 +:10AEE0000000000000000000000000000000000062 +:10AEF0000000000000000000000000000000000052 +:10AF00000000000000000000000000000000000041 +:10AF100000E00700820000000000000000000000C8 +:10AF20000000000000000000000000000000000021 +:10AF30000000000000000000000000000000000011 +:10AF40000000000000000000000000000000000001 +:10AF500000000000000000000000000000000000F1 +:10AF600000000000000000000000000000000000E1 +:10AF700000000000000000000000000000000000D1 +:10AF800000000000000000000000000000000000C1 +:10AF9000000000000000F0F00000000000000000D1 +:10AFA00000000000000000000000000000000000A1 +:10AFB0000000000000000000000000000000000091 +:10AFC0000000000000000000000000000000000081 +:10AFD0000000000000000000000000000000000071 +:10AFE0000000000000000000000000000000000061 +:10AFF0000000000000000000000000000000000051 +:10B000000000000000000000000000000000000040 +:10B010000000000000000000F0F000000000000050 +:10B020000000000000000000000000000000000020 +:10B030000000000000000000000000000000000010 +:10B0400000000000000000000000400840000084F4 +:10B0500020000000000000000000000000000000D0 +:10B0600000000000000000000000000000000000E0 +:10B0700000000000000000000000000000000000D0 +:10B0800000000000000000000000000000000000C0 +:10B0900000000000000000000000000000000000B0 +:10B0A00000000000000000000000000000000000A0 +:10B0B0000000000000000000000000000000000090 +:10B0C0000000000000000000FFFFFFFF0000000084 +:10B0D0000000000000000000000000000000000070 +:10B0E0000000000000000000000000000000000060 +:10B0F0000000000000000000000000000000000050 +:10B10000000000000000000000000000000000003F +:10B1100000000000000000000000FFFF0000000031 +:10B12000000000000000000000000000000000001F +:10B13000000000000000000000000000000000000F +:10B1400000000000000000000000FFFFFFFF000003 +:10B1500000000000000000000000000000000000EF +:10B1600000000000000000000000000000000000DF +:10B1700000000000000000000000000000000000CF +:10B1800000000000000000000000000000000000BF +:10B1900000000000000000000000000000000000AF +:10B1A000000000000000000000000000000000009F +:10B1B000000000000000000000000000000000008F +:10B1C000000000000000000000610007C00D100634 +:10B1D00030400006000C08000000000000000000E5 +:10B1E000000000000000000000000000000000005F +:10B1F000000000000000000000000000000000004F +:10B20000000000000000000000000000000000003E +:10B210000000000000000000000005400A06054C88 +:10B2200000A8000000000000000000000000000076 +:10B23000000000000000000000000000000000000E +:10B2400000000000000000000000000000000000FE +:10B2500000000000555500FFA0A000000000000005 +:10B2600000000000000000000000000000000000DE +:10B2700000000000000000000000000000000000CE +:10B2800000000000000000000000000000000000BE +:10B2900000000000000000000000000000003C3C36 +:10B2A000FFFF0000000000000000000000000000A0 +:10B2B000000000000000000000000000000000008E +:10B2C000000000000000000000000000000000007E +:10B2D000000000000000555500FFA0A00000000085 +:10B2E000000000000000000000000000000000005E +:10B2F000000000000000000000000000000000004E +:10B30000000000000000000000000000000000003D +:10B31000000000000000000000000000000000002D +:10B320003C3C0000000000000000000000000000A5 +:10B33000000000000000000000000000000000000D +:10B3400000000000000000000000000000000000FD +:10B3500000000000000000000000F0F0000000000D +:10B3600000000000000000000000000000000000DD +:10B3700000000000000000000000000000000000CD +:10B3800000000000000000000000000000000000BD +:10B3900000000000000000000000000000000000AD +:10B3A00000000000F0F000000000000000000000BD +:10B3B000000000000000000000000000000000008D +:10B3C000000000000000000000000000000000007D +:10B3D000000000000000000000000000F0F000008D +:10B3E000000000000000000000000000000000005D +:10B3F000000000000000000000000000000000004D +:10B40000000000000000000000000000000000003C +:10B41000000000000000000000000000000000002C +:10B42000000000000000F0F000000000000000003C +:10B43000000000000000000000000000000000000C +:10B4400000000000000000000000000000000000FC +:10B4500000000000000000000000000000000000EC +:10B4600000000000000000000000000000000000DC +:10B4700000000000000000000000000000000000CC +:10B4800000000000000000000000000100000000BB +:10B4900000000000000000000000000000000000AC +:10B4A000000000000000000000000000000000009C +:10B4B000000000000000000000000000000000008C +:10B4C000000000000000000000000000000000007C +:10B4D000000000000000000000000000000000006C +:10B4E000000000000000000000020000000000005A +:10B4F000000200000000000000000000000000004A +:10B5000000000000000040000000000000000000FB +:10B51000000000000000000000000000000000002B +:10B5200000000000000000000000400010000000CB +:10B530000002000000020002000000020000000003 +:10B54000000000000000400040000000000000007B +:10B5500000000000000002000000000000000000E9 +:10B5600000000800010002000000000000000000D0 +:10B5700000000010000000000000000000000000BB +:10B580000000080000000000004000000000000073 +:10B5900000000000000000000000000000000000AB +:10B5A0000000000000000000020000000000000099 +:10B5B000000000000000000000000000000000008B +:10B5C0000200000000000000000000000000000079 +:10B5D000000000000000000000000000000000006B +:10B5E00000000000000002008000000000000000D9 +:10B5F000000000000000000000000000000000004B +:10B60000000000000000000000000000000000003A +:10B6100000000000004000000000000000000000EA +:10B62000000000000000000000000000000000001A +:10B63000000000000000000000000000000000000A +:10B6400000000000000000000000000000000000FA +:10B65000000000000000000000000000000000806A +:10B6600000000000000000000000000000000000DA +:10B6700000000011000000000100000000000000B8 +:10B6800000000000000000000000000000000000BA +:10B6900000000000000000000000000000000000AA +:10B6A000000000000000000000000000000000009A +:10B6B000000000000000000000000000000000008A +:10B6C000000000000000000000000000000000007A +:10B6D000000000000000000000000000200020002A +:10B6E0001104200000880082000000840000000493 +:10B6F000000000000000000000002000000000002A +:10B700000000000000000000000000000000000039 +:10B710000000000000000000000000000000000029 +:10B720000000000000000000000000000000000019 +:10B730000000000000000000000000000000000009 +:10B7400000000000000000000000000000000000F9 +:10B7500000000000000000000000000000000000E9 +:10B760000000000000800000000000000000000059 +:10B7700000000000010000080000010000000000BF +:10B7800000000000000000000000000000000000B9 +:10B7900000000000000000000000000000000000A9 +:10B7A0000000004000000000000000000000000059 +:10B7B0000000000000000000000000000000000089 +:10B7C0000000000000000040000000000000000039 +:10B7D0000000000000000000000000000000000069 +:10B7E0000000000000000004000000000000000451 +:10B7F0000000000000000400000100002000000024 +:10B8000000000000000000400000000000000000F8 +:10B810000000000000000000000000000000000028 +:10B820000000000000000000000000000000000018 +:10B830000000000000000000000000000000000008 +:10B8400000000000000000000000000000000000F8 +:10B8500000000000000000000000000000000000E8 +:10B860009000000000000000000000000000000444 +:10B870000000002000000020000000000008000080 +:10B8800000000000000000000000000000000000B8 +:10B8900000000000000000000000000000000000A8 +:10B8A0000000000000000000000000000000000098 +:10B8B0000000000000000000000000000000000088 +:10B8C0000000000000000000000000000000000078 +:10B8D0000000000000000000000000000000000068 +:10B8E0000000000000840000008800C01104000473 +:10B8F00011850004000000000001000000000000AD +:10B900000000000000000000000000000000000037 +:10B910000000000000000000000000000000000027 +:10B920000000000000000000000000000000008493 +:10B93000000000C000C0000000000084008400007F +:10B9400000000000000000000000000000000000F7 +:10B9500000000000000000000000000000000000E7 +:10B9600000000000000001000000000000000009CD +:10B9700000000000000000000000000200020000C3 +:10B9800000000000000000000000000900040000AA +:10B9900000000000000000000000000000000000A7 +:10B9A0000000000000000000000000000000000097 +:10B9B000000000000000000000090000000000007E +:10B9C0000000000000020002000000000000000073 +:10B9D0000000000000000000000000000000000067 +:10B9E0000000000000000000100000000000000047 +:10B9F00000000000000000000000000000820500C0 +:10BA00000000000000000000000000000000000036 +:10BA10000000000000000000000000000000000026 +:10BA20000000000000000000000000000000000016 +:10BA30000000000000000000000000000000000006 +:10BA400000000000000000000000000000000000F6 +:10BA500000000000000000000000000000000000E6 +:10BA600000000000000000000000010000000000D5 +:10BA70000000009000200010001000009000000066 +:10BA800000000100000000000000000000000000B5 +:10BA900000000000000000000000000000000000A6 +:10BAA0000000000000000000000000000000000096 +:10BAB0000000000000000000000000000000000086 +:10BAC0000000000000000000000000000000000076 +:10BAD0000000000000000000000000000000000066 +:10BAE0000000000000000000000000001100210024 +:10BAF0000000000011800080110000001100800093 +:10BB00000000000011002100000000000000000003 +:10BB10000000000000000000000000000000000025 +:10BB20000000000000000000000000000000000015 +:10BB30000000000000000000000000000000000005 +:10BB400000000000000000000000000000000000F5 +:10BB500000000000000000000000000000000000E5 +:10BB60000000000000000000000000000000004194 +:10BB70000900000300800008000200080000000027 +:10BB800000800000000000410900000900000000E2 +:10BB900000000000000000000000000000000000A5 +:10BBA0000000000000000000000000000000000095 +:10BBB0000000000000000000000000000000000085 +:10BBC0000000000000000000000000000000000075 +:10BBD0000000000000000000000000000000000065 +:10BBE0000000000000000000000000000000000055 +:10BBF0000001010000000088000100030083000034 +:10BC0000000000200000008400010100000000008E +:10BC10000000000000000000000000000000000024 +:10BC20000000000000000000000000000000000014 +:10BC30000000000000000000000000000000000004 +:10BC400000000000000000000000000000000000F4 +:10BC500000000000000000000000000000000000E4 +:10BC600000000000000000000000000000000000D4 +:10BC700000000000A00000000100C000080000005B +:10BC8000900001000088880000000000880000008B +:10BC900000000000000000000000000000000000A4 +:10BCA0000000000000000000000000000000000094 +:10BCB0000000000000000000000000000000000084 +:10BCC0000000000000000000000000000000000074 +:10BCD0000000000000000000000000000000000064 +:10BCE0000000000000000000000000000000000054 +:10BCF0000000000000000000000041008000000083 +:10BD000000008800410000800000000000000000EA +:10BD1000000009000000000000000000000000001A +:10BD20000000000000000000000000000000000013 +:10BD30000000000000000000000000000000000003 +:10BD400000000000000000000000000000000000F3 +:10BD500000000000000000000000000000000000E3 +:10BD600000000000000000000000000000000000D3 +:10BD700000000000000000000411000000000008A6 +:10BD80000011000000000011000000800000000011 +:10BD90000011000000000000000000000000000092 +:10BDA0000000000000000000000000000000000093 +:10BDB0000000000000000000000000000000000083 +:10BDC0000000000000000000000000000000000073 +:10BDD0000000000000000000000000000000000063 +:10BDE0000000000000000000000000000000000053 +:10BDF0000000000000000000000000010000000042 +:10BE000082011001100082000001000000400000CB +:10BE10000000000100000000000000000000000021 +:10BE20000000000000000000000000000000000012 +:10BE30000000000000000000000000000000000002 +:10BE400000000000000000000000000000000000F2 +:10BE500000000000000000000000000000000000E2 +:10BE600000000000000000000000000000000000D2 +:10BE700000000000000000000000000000E00000E2 +:10BE80008141810000E00000810000000000070007 +:10BE90008200000000E000008100000000000000BF +:10BEA0000000000000000000000000000000000092 +:10BEB0000000000000000000000000000000000082 +:10BEC0000000000000000000000000000000000072 +:10BED0000000000000000000000000000000000062 +:10BEE0000000000000000000000000000000000052 +:10BEF0000000000000000000000000000000000042 +:10BF000000000000FC0AFCFA000000000000000035 +:10BF1000F0F0000000000000000000000000000041 +:10BF20000000000000000000000000000000000011 +:10BF30000000000000000000000000000000000001 +:10BF400000000000000000000000000000000000F1 +:10BF500000000000000000000000000000000000E1 +:10BF600000000000000000000000000000000000D1 +:10BF700000000000000000000000000000000000C1 +:10BF80000000000000000C0A0CFA00000000000095 +:10BF90000000F0F0000000000000000000000000C1 +:10BFA0000000000000000000000000000000000091 +:10BFB0000000000000000000000000000000000081 +:10BFC0000000000000000000000000000000000071 +:10BFD0000000000000000000000000000000000061 +:10BFE0000000000000000000000000000000000051 +:10BFF0000000000000000000000000000000000041 +:10C0000000000000000000007F7C73700000000052 +:10C01000000000000000FFFF000000000000000022 +:10C020000000000000000000000000000000000010 +:10C030000000000000000000000000000000000000 +:10C0400000000000000000000000000000000000F0 +:10C0500000000000000000000000000000000000E0 +:10C0600000000000000000000000000000000000D0 +:10C0700000000000000000000000000000000000C0 +:10C08000000000000000000000004F4C4340000092 +:10C0900000000000000000000000000000000000A0 +:10C0A0000000000000000000000000000000000090 +:10C0B0000000000000000000000000000000000080 +:10C0C0000000000000000000000000000000000070 +:10C0D0000000000000000000000000000000000060 +:10C0E0000000000000000000000000000000000050 +:10C0F0000000000000000000000000000000000040 +:10C100000000000000400006000C00000061300745 +:10C11000C00D000005000A00054000A800600006F0 +:10C12000000C000000000000000000000000000003 +:10C1300000000000000000000000000000000000FF +:10C1400000000000000000000000000000000000EF +:10C1500000000000000000000000000000000000DF +:10C1600000000000000000000000000000000000CF +:10C1700000000000000000000000000000000000BF +:10C180000000000000000000FF00FFFF00000000B2 +:10C19000000000000000000000000000000000009F +:10C1A0000000FFFF00000000000000000000000091 +:10C1B000000000000000000000000000000000007F +:10C1C000000000000000000000000000000000006F +:10C1D000000000000000000000000000000000005F +:10C1E000000000000000000000000000000000004F +:10C1F000000000000000000000000000000000003F +:10C2000000000000000000000000FF00000000002F +:10C21000000000000000000000000000000000001E +:10C22000000000000000000000000000000000000E +:10C2300000000000000000000000000000000000FE +:10C2400000000000000000000000000000000000EE +:10C2500000000000000000000000000000000000DE +:10C2600000000000000000000000000000000000CE +:10C2700000000000000000000000000000000000BE +:10C280000000000000000000000000000000F0F0CE +:10C29000000000000000000000000000000000009E +:10C2A000000000000000F0F00000000000000000AE +:10C2B000000000000000000000000000000000007E +:10C2C000000000000000000000000000000000006E +:10C2D000000000000000000000000000000000005E +:10C2E000000000000000000000000000000000004E +:10C2F000000000000000000000000000000000003E +:10C30000000000000000000000000000000000002D +:10C31000F0F000000000000000000000000000003D +:10C320000000000000000000F0F00000000000002D +:10C3300000000000000000000000000000000000FD +:10C3400000000000000000000000000000000000ED +:10C3500000000000000000000000000000000000DD +:10C3600000000000000000000000000000000000CD +:10C3700000000000000000000000000000000000BD +:10C3800000000000000000000000000000000000AD +:10C390000000000200020000000000000000000099 +:10C3A000000000000000001100000011000000006B +:10C3B000000000000000000000000000000000007D +:10C3C000000000000000000100000000000000006C +:10C3D000000000000000000000000000000000005D +:10C3E000000000000000000000000000000000004D +:10C3F000000000000000000000000000000000003D +:10C40000000000000000000000000000000000002C +:10C41000000000000000000000000002000000001A +:10C42000000000000000000000000000000000000C +:10C4300000000002000200000002000000000000F6 +:10C4400000000000000000000000000000000000EC +:10C4500000000000000000020000000000000000DA +:10C460000000000000000002000000020040000286 +:10C4700000000002000200000000000200020002B2 +:10C4800000000000000000000000000000000000AC +:10C4900000001000020000008200100400000200F2 +:10C4A000C0000000000008000000020000000000C2 +:10C4B000000000000000000000000000000000007C +:10C4C000000002000000000000000000000000006A +:10C4D000000000000000000000100200000000004A +:10C4E000000000000000000000000000000000004C +:10C4F000000000000000000000000200000000003A +:10C50000000000000000000000000000000000002B +:10C51000000000008000800000000000800100009A +:10C52000800000000000000000000000000000008B +:10C5300004000000000000000000000000000000F7 +:10C5400000000000000000000000000000000000EB +:10C5500000000000000000000000000000000000DB +:10C5600000000000000000000000000000000000CB +:10C57000000040000000000000000000000000007B +:10C5800000000000000000000000000000000000AB +:10C59000000000000000000000000000000000009B +:10C5A00040002000410004000000000000000004E2 +:10C5B0000000000410000000000000000000000067 +:10C5C000000000000000000000000000000000006B +:10C5D000000000000000000000000000000000005B +:10C5E000000000000000000000000000000000004B +:10C5F0000000000000000000000000000000040037 +:10C6000004000000000040000000000000000000E6 +:10C610000000000000000000000000000000008298 +:10C6200000A0000000A0200000000090009000008A +:10C6300000000000000000000000000000000000FA +:10C6400000000000000000000000000000000000EA +:10C6500000000000000000000000000000000000DA +:10C6600000000000000000000000000000000000CA +:10C6700000000000000000000000000000000000BA +:10C6800000000000000000000000000000000000AA +:10C690000000000000000000000000000000010099 +:10C6A0000089000000000100000000000000000000 +:10C6B00000400040000000000100000000000000F9 +:10C6C000000000000000000000000010000000005A +:10C6D000004000000000000000000000000000001A +:10C6E000000000000000000000000000000000004A +:10C6F00000000000000000000000000000400000FA +:10C700000000000000000000000000000000000029 +:10C710000000000000000000000000000000000019 +:10C7200020000004000000002000000000000000C5 +:10C7300000000000000100000000040000000000F4 +:10C7400000000000000000000000000000000000E9 +:10C7500000000000000000100000000000000000C9 +:10C7600000000000000000000000000000000000C9 +:10C7700000000000000000000000000000000000B9 +:10C7800000000000000000000000000000000000A9 +:10C790000000000000000000000000009000000009 +:10C7A0000000000040000000000088400000000978 +:10C7B0000000000000000000000000200000000059 +:10C7C0000000000000000000000000000000000069 +:10C7D0000000000000000000000000000000000059 +:10C7E0000000000000000000000000000000000049 +:10C7F0000000000000000000000000000000000039 +:10C800000000000000000000000000000000000028 +:10C81000000000000000000000000000000000C058 +:10C820000040000000040082000000900090000022 +:10C8300000000000000000841100000000850000DE +:10C8400000000000000000000000000000000000E8 +:10C8500000000000000000000000000000000000D8 +:10C8600000000000000000000000000000000000C8 +:10C8700000000000000000000000000000000000B8 +:10C8800000000000000000000000000000000000A8 +:10C890000000000000000000000000000000000098 +:10C8A0000000000000000000000000000100000087 +:10C8B000000000000000000901110000000000005D +:10C8C0000002000000000002000000000000000064 +:10C8D0000000000000000000000000000000000058 +:10C8E0000000000000000000000000000000000048 +:10C8F0000000000000000000000000000000000038 +:10C900000000000000000000000000000000000027 +:10C910000000000000000000000000000000000017 +:10C9200000000000000000000000000000002000E7 +:10C9300000000000000002000200040000000000EF +:10C9400000000000000000000000000000000000E7 +:10C9500000000000000000000000000000000000D7 +:10C9600000000000000000000000000000000000C7 +:10C9700000000000000000000000000000000000B7 +:10C9800000000000000000000000000000000000A7 +:10C990000000000000000000000000000000000097 +:10C9A000000000000000010000000000000000C0C6 +:10C9B00000C000029088000000000000000000009D +:10C9C00090000000000400000000000000000000D3 +:10C9D0000000000000000000000000000000000057 +:10C9E0000000000000000000000000000000000047 +:10C9F0000000000000000000000000000000000037 +:10CA00000000000000000000000000000000000026 +:10CA10000000000000000000000000000000000016 +:10CA200000000000000000001100210000000000D4 +:10CA30001080008000800000000000000000000066 +:10CA40001100800000000000000000000000000055 +:10CA500000000000000000000000000000000000D6 +:10CA600000000000000000000000000000000000C6 +:10CA700000000000000000000000000000000000B6 +:10CA800000000000000000000000000000000000A6 +:10CA90000000000000000000000000000000000096 +:10CAA0000000000000000000000000410900000339 +:10CAB00000008008098000090080000000000000DC +:10CAC0000000000000800000008000000000000066 +:10CAD0000000000000000000000000000000000056 +:10CAE0000000000100000000000000000000000045 +:10CAF0000000000000000000000000000000000036 +:10CB00000000000000000000000000000000000025 +:10CB10000000000000000000000000000000000015 +:10CB20000000000000000000000000000001010003 +:10CB300000000000100103C0100088C000000000C9 +:10CB40000000000800000020000000C000000000FD +:10CB500000000000000000000000000000000000D5 +:10CB600000000000000000000000000000000000C5 +:10CB700000000000000000000000000000000000B5 +:10CB800000000000000000000000000000000000A5 +:10CB90000000000000000000000000000000000095 +:10CBA0000000000000000000000000000000000085 +:10CBB00088000000000009888820C00800200000CC +:10CBC0000000000000000100008888000100000053 +:10CBD0000000000000000000000000000000000055 +:10CBE0000000000000000001000000000000000044 +:10CBF0000000000000000000000000000000000035 +:10CC00000000000000000000000000000000000024 +:10CC10000000000000000000000000000000000014 +:10CC20000000000000000000000000000000000004 +:10CC30000000000000000400412000808000090086 +:10CC4000000000000000000041000080000009001A +:10CC500000000000000000000000000000000000D4 +:10CC600000000000000000000001000000000000C3 +:10CC700000000000000000000000000000000000B4 +:10CC800000000000000000000000000000000000A4 +:10CC90000000000000000000000000000000000094 +:10CCA0000000000000000000000000000000000084 +:10CCB00000000000001100000000801080118000C2 +:10CCC000800000080021000000000011000000802A +:10CCD0000000000000000000000000000000000054 +:10CCE0000000000000000000000000010000000043 +:10CCF0000000000000000000000000000000000034 +:10CD00000000000000000000000000000000000023 +:10CD10000000000000000000000000000000000013 +:10CD20000000000000000000000000000000000003 +:10CD3000000000000000000100000000C000C00072 +:10CD4000C002C00000000000000000000001000060 +:10CD50000040000000000000000000000000000093 +:10CD600000000000000000000000000000010000C2 +:10CD700000000000000000000000000000000000B3 +:10CD800000000000000000000000000000000000A3 +:10CD90000000000000000000000000000000000093 +:10CDA0000000000000000000000000000000000083 +:10CDB000000000000000000000E000008100000012 +:10CDC00000E04200484200060000070000000000AA +:10CDD00000000700822100000000000000000000A9 +:10CDE0000000000000000000000000000000000043 +:10CDF0000000000000000000000000000000000033 +:10CE00000000000000000000000000000000000022 +:10CE10000000000000000000000000000000000012 +:10CE20000000000000000000000000000000000002 +:10CE300000000000000000000000000000000000F2 +:10CE400000000000000000000000000000000000E2 +:10CE5000000000000000F0F00000000000000000F2 +:10CE600000000000000000000000000000000000C2 +:10CE700000000000000000000000000000000000B2 +:10CE800000000000000000000000000000000000A2 +:10CE90000000000000000000000000000000000092 +:10CEA0000000000000000000000000000000000082 +:10CEB0000000000000000000000000000000000072 +:10CEC0000000000000000000000000000000000062 +:10CED0000000000000000000F0F000000000000072 +:10CEE0000000000000000000000000000000000042 +:10CEF0000000000000000000000000000000000032 +:10CF00000000000000000000000000000000000021 +:10CF10000000000000000000000000000000000011 +:10CF20000000000000000000000000000000000001 +:10CF300000000000000000000000000000000000F1 +:10CF400000000000400840000084200000000000B5 +:10CF500000000000000000000000000000000000D1 +:10CF600000000000000000000000000000000000C1 +:10CF700000000000000000000000000000000000B1 +:10CF800000000000000000000000000000000000A1 +:10CF90000000000000000000000000000000000091 +:10CFA0000000000000000000000000000000000081 +:10CFB0000000000000000000000000000000000071 +:10CFC0000000FFFFFFFF0000000000000000000065 +:10CFD0000000000000003C3C0000FFFF00000000DB +:10CFE0000000000000000000000000000000000041 +:10CFF0000000000000000000000000000000000031 +:10D000000000000000000000000000000000000020 +:10D010000000000000000000000000000000000010 +:10D020000000000000000000000000000000000000 +:10D0300000000000000000000000000000000000F0 +:10D0400000000000FFFFFFFF0000000000000000E4 +:10D0500000000000000000003C3C00000000000058 +:10D0600000000000000000000000000000000000C0 +:10D0700000000000000000000000000000000000B0 +:10D0800000000000000000000000000000000000A0 +:10D090000000000000000000000000000000000090 +:10D0A0000000000000000000000000000000000080 +:10D0B0000000000000000000000000000000000070 +:10D0C000000000600006000C100630600006000C36 +:10D0D000080000000038000000A005002A000540FC +:10D0E00000A8000000000000000000000000000098 +:10D0F0000000000000000000000000000000000030 +:10D10000000000000000000000000000000000001F +:10D11000000000000000000000000000000000000F +:10D1200000000000000000000000000000000000FF +:10D1300000000000000000000000000000000000EF +:10D140000000000000000000FFFF000000000000E1 +:10D150003C3C000000000000000000000000000057 +:10D1600000000000000000000000000000000000BF +:10D1700000000000000000000000000000000000AF +:10D18000000000000000000000000000000000009F +:10D19000000000000000000000000000000000008F +:10D1A000000000000000000000000000000000007F +:10D1B000000000000000000000000000000000006F +:10D1C000000000000000000000000000000000005F +:10D1D00000003C3C000000000000000000000000D7 +:10D1E000000000000000000000000000000000003F +:10D1F000000000000000000000000000000000002F +:10D20000000000000000000000000000000000001E +:10D21000000000000000000000000000000000000E +:10D2200000000000000000000000000000000000FE +:10D2300000000000000000000000000000000000EE +:10D24000000000000000000000000000F0F00000FE +:10D2500000000000F0F000000000000000000000EE +:10D2600000000000000000000000000000000000BE +:10D2700000000000000000000000000000000000AE +:10D28000000000000000000000000000000000009E +:10D29000000000000000000000000000000000008E +:10D2A000000000000000000000000000000000007E +:10D2B000000000000000000000000000000000006E +:10D2C0000000000000000000000000000000F0F07E +:10D2D000000000000000F0F000000000000000006E +:10D2E000000000000000000000000000000000003E +:10D2F000000000000000000000000000000000002E +:10D30000000000000000000000000000000000001D +:10D31000000000000000000000000000000000000D +:10D3200000000000000000000000000000000000FD +:10D3300000000000000000000000000000000000ED +:10D3400000000000000000000000000000000000DD +:10D3500000030000000000000000000000000000CA +:10D3600000000000000000000000000000000000BD +:10D3700000000000000000000000000000000000AD +:10D38000000000000001000000000000000000009C +:10D39000000000000000000000000000000000008D +:10D3A000000000000000000000000000000000007D +:10D3B000000000000000000000000000000000006D +:10D3C000000000000000000000000000000000005D +:10D3D000000000000000000000000000000000004D +:10D3E000000000000000000000000000000000003D +:10D3F00040000000000000000000000000000000ED +:10D40000000200000000000000000000000000001A +:10D4100000000000400200000000000000000000CA +:10D42000000000000000004000000000000000902C +:10D4300040904000000000000000000000000000DC +:10D4400000000000000000000000000000000000DC +:10D4500002000200020002000200000008000000BA +:10D4600001000000000000000000000000000400B7 +:10D4700000000000000000000000000000000000AC +:10D48000000000000000000000000000000000009C +:10D490000000020000000200000002000200000084 +:10D4A000000000000000000000000000000000007C +:10D4B000000000000000000000000000000000006C +:10D4C000000000000000000000000000000000005C +:10D4D00000000000000000000000800000000000CC +:10D4E00000004000000000000000000000000000FC +:10D4F000000000000000000000000000000000002C +:10D50000000000000000000000000000000000001B +:10D51000000000000000000000000000000000000B +:10D5200000000000000000000000000000000000FB +:10D5300000000000000000000000000000000000EB +:10D5400000000000000000000000000000000000DB +:10D550000000000000000000000000000000880043 +:10D56000200000009000000090000000000000007B +:10D57000000000000000001000000000000000009B +:10D58000000000000000000000000000000000009B +:10D59000000000000000000000000000000000008B +:10D5A000000000000000000000000000000000007B +:10D5B000000000000000000000000000000000006B +:10D5C000000000000000000000000000000000005B +:10D5D000000000000000110000000000200000001A +:10D5E0000000000000900090008200000000000099 +:10D5F000000000000000000000000000000000002B +:10D60000000000000000000000000000000000001A +:10D61000000000000000000000000000000000000A +:10D6200000000000000000000000000000000000FA +:10D6300000000000000000000000000000000000EA +:10D6400000000000000000000000000000000000DA +:10D6500000000000000000000000000000000000CA +:10D6600000000000000001000009000000000000B0 +:10D67000004000000000000000000000000000006A +:10D68000000000000000000000000000000000009A +:10D69000000000000000000000000000000000008A +:10D6A000000000000000000000000000000000007A +:10D6B000000000000000000000000000000000006A +:10D6C0000004000000000000000000000000000056 +:10D6D000000000000000000000000000000000004A +:10D6E0000000000000000000040000000000000036 +:10D6F000000000000000000000000000000000002A +:10D700000000000000000000000000C00000000059 +:10D710000000000000000000000000000000000405 +:10D7200000000000000000000000000000000000F9 +:10D7300000000000000000000000000000000000E9 +:10D7400000000000000000000000000000000000D9 +:10D7500000000000000000000000000000000000C9 +:10D76000000000000000000004200400001100116F +:10D770000000000000110000000000000000000098 +:10D780000000000000000000000000000000000099 +:10D790000000000000000000000000000000000089 +:10D7A0000000000000000000000000000000000079 +:10D7B0000000000000000000000000000000000069 +:10D7C0000000000000000000000000000000000059 +:10D7D00000000000000000000000000000C0008405 +:10D7E0000000008400000090040211850088008879 +:10D7F000418841000000000000000000008400009B +:10D800000000000000000000000000000000000018 +:10D810000000000000000000000000000000000008 +:10D8200000000000000000000000000000000000F8 +:10D8300000000000000000000000000000000000E8 +:10D8400000000000000000000000000000000000D8 +:10D8500000000000000000000000000000000000C8 +:10D8600000000000000000000009000000020000AD +:10D870000000002100020000000000000000000085 +:10D880000000000000000002000000000000000096 +:10D890000000000000000000000000000000000088 +:10D8A0000000000000000000000000000000000078 +:10D8B0000000000000000000000000000000000068 +:10D8C0000000000000000000000000000000000058 +:10D8D0000000000000000000000000000000000048 +:10D8E0000000000000000000000000000082008234 +:10D8F00000000000110000000000200000000000F7 +:10D900000000000000000000000000000000000017 +:10D910000000000000000000000000000000000007 +:10D9200005000000000000000000000000000000F2 +:10D9300000000000000000000000000000000000E7 +:10D9400000000000000000000000000000000000D7 +:10D9500000000000000000000000000000000000C7 +:10D96000000000000000000000000000000090081F +:10D9700000000000000100000000000000000000A6 +:10D980000000000000000000000000000000000097 +:10D990000000000000000000000000000000000087 +:10D9A0000000000000000000000000000000000077 +:10D9B0000000000000000000000000000000000067 +:10D9C0000000000000000000000000000000000057 +:10D9D0000000000000000000000000000000000047 +:10D9E0000000000000000000000000000000110026 +:10D9F0008080000000000008000300030000000019 +:10DA00000000000000000000000000000000000016 +:10DA10000000000000000000000000000000000006 +:10DA200000000000000000000000000000000000F6 +:10DA300000000000000000000000000000000000E6 +:10DA400000000000000000000000000000000000D6 +:10DA500000000000000000000000000000000000C6 +:10DA600000000000000000000000000000000000B6 +:10DA700000000080000000800000000000000000A6 +:10DA80000000000000000000000000000000000096 +:10DA90000000000000000000000000000000000086 +:10DAA0000000000000000000000000000000000076 +:10DAB0000000000000000000000000000000000066 +:10DAC0000000000000000000000000000000000056 +:10DAD0000000000000000000000000000000000046 +:10DAE0000000000000000000000000000000000036 +:10DAF000000000000020000000C000000000000046 +:10DB00000000000000000000000000000000000015 +:10DB10000000000000000000000000000000000005 +:10DB200000000000000000000000000000000000F5 +:10DB300000000000000000000000000000000000E5 +:10DB400000000000000000000000000000000000D5 +:10DB500000000000000000000000000000000000C5 +:10DB600000000000000000000000000000000000B5 +:10DB70000000000001000088880001000000000093 +:10DB80000100000000000000000000000000000094 +:10DB90000000000000000000000000000000000085 +:10DBA0000000000000000000000000000000000075 +:10DBB0000000000000000000000000000000000065 +:10DBC0000000000000000000000000000000000055 +:10DBD0000000000000000000000000000000000045 +:10DBE0000000000000000000000000000000000035 +:10DBF000000000000000410000800000090000005B +:10DC000000002000000000000000000000000000F4 +:10DC10000000000000000000000000000000000004 +:10DC200000000000000000000000000000000000F4 +:10DC300000000000000000000000000000000000E4 +:10DC400000000000000000000000000000000000D4 +:10DC500000000000000000000000000000000000C4 +:10DC600000000000000000000000000000000000B4 +:10DC70000000000000000000001100000080000013 +:10DC80000000000000000000000000000000000094 +:10DC90000000000000000000000000000000000084 +:10DCA0000000000000000000000000000000000074 +:10DCB0000000000000000000000000000000000064 +:10DCC0000000000000000000000000000000000054 +:10DCD0000000000000000000000000000000000044 +:10DCE0000000000000000000000000000000000034 +:10DCF00000000000000000000000000100000040E3 +:10DD00000000000000000000000000000000000013 +:10DD10000000000000000000000000000000000003 +:10DD200000000000000000000000000000000000F3 +:10DD300000000000000000000000000000000000E3 +:10DD400000000000000000000000000000000000D3 +:10DD500000000000000000000000000000000000C3 +:10DD600000000000000000000000000000000000B3 +:10DD700000000000000000000000000000000000A3 +:10DD800007008221000000000000000000000000E9 +:10DD90000000000000000000000000000000000083 +:10DDA0000000000000000000000000000000000073 +:10DDB0000000000000000000000000000000000063 +:10DDC0000000000000000000000000000000000053 +:10DDD0000000000000000000000000000000000043 +:10DDE0000000000000000000000000000000000033 +:10DDF0000000000000000000000000000000000023 +:10DE00000000F0F000000000000000000000000032 +:10DE10000000000000000000000000000000000002 +:10DE200000000000000000000000000000000000F2 +:10DE300000000000000000000000000000000000E2 +:10DE400000000000000000000000000000000000D2 +:10DE500000000000000000000000000000000000C2 +:10DE600000000000000000000000000000000000B2 +:10DE700000000000000000000000000000000000A2 +:10DE800000000000F0F000000000000000000000B2 +:10DE90000000000000000000000000000000000082 +:10DEA0000000000000000000000000000000000072 +:10DEB0000000000000000000000000000000000062 +:10DEC0000000000000000000000000000000000052 +:10DED0000000000000000000000000000000000042 +:10DEE0000000000000000000000000000000000032 +:10DEF0000000000000000000000000000000000022 +:10DF000000000000FF000000FFFF00000000000014 +:10DF10000000000000000000000000000000000001 +:10DF200000000000000000000000000000000000F1 +:10DF300000000000000000000000000000000000E1 +:10DF400000000000000000000000000000000000D1 +:10DF500000000000000000000000000000000000C1 +:10DF600000000000000000000000000000000000B1 +:10DF700000000000000000000000000000000000A1 +:10DF8000000000000000FF00000000000000000092 +:10DF90000000000000000000000000000000000081 +:10DFA0000000000000000000000000000000000071 +:10DFB0000000000000000000000000000000000061 +:10DFC0000000000000000000000000000000000051 +:10DFD0000000000000000000000000000000000041 +:10DFE0000000000000000000000000000000000031 +:10DFF0000000000000000000000000000000000021 +:10E0000000000000000005002A00054000A8006193 +:10E010000006000D000000000000000000000000ED +:10E0200000000000000000000000000000000000F0 +:10E0300000000000000000000000000000000000E0 +:10E0400000000000000000000000000000000000D0 +:10E0500000000000000000000000000000000000C0 +:10E0600000000000000000000000000000000000B0 +:10E0700000000000000000000000000000000000A0 +:10E080000000000000000000000000000000000090 +:10E090000000000000000000000000000000000080 +:10E0A0000000000000000000000000000000000070 +:10E0B0000000000000000000000000000000000060 +:10E0C0000000000000000000000000000000000050 +:10E0D0000000000000000000000000000000000040 +:10E0E0000000000000000000000000000000000030 +:10E0F0000000000000000000000000000000000020 +:10E10000000000000000000000000000000000000F +:10E1100000000000000000000000000000000000FF +:10E1200000000000000000000000000000000000EF +:10E1300000000000000000000000000000000000DF +:10E1400000000000000000000000000000000000CF +:10E1500000000000000000000000000000000000BF +:10E1600000000000000000000000000000000000AF +:10E17000000000000000000000000000000000009F +:10E18000000000000000000000000000000000008F +:10E190000000000000F0000000000000000000008F +:10E1A000000000000000000000000000000000006F +:10E1B000000000000000000000000000000000005F +:10E1C000000000000000000000000000000000004F +:10E1D000000000000000000000000000000000003F +:10E1E000000000000000000000000000000000002F +:10E1F000000000000000000000000000000000001F +:10E20000000000000000000000000000000000000E +:10E2100000000000000000000000000000000000FE +:10E2200000000000000000000000000000000000EE +:10E2300000000000000000000000000000000000DE +:10E2400000000000000000000000000000000000CE +:10E2500000000000000000000000000000000000BE +:10E2600000000000000000000000000000000000AE +:10E27000000000000000000000000000000000009E +:10E28000000000000000000000000000000000008E +:10E2900000800000000000000020000000000000DE +:10E2A000000000000020000000000000000000004E +:10E2B000000000000000000000000000000000005E +:10E2C000000300000000000000000000000000004B +:10E2D000000000000000000000000000000000003E +:10E2E000000000000000000000000000000000002E +:10E2F000000000000000040000000000000000001A +:10E30000000000000000000000000000000000828B +:10E3100000000008000000001000000100000000E4 +:10E3200000000000000000010000000000000000EC +:10E33000000000900000000000000000000000004D +:10E3400000000000000000000000000000000000CD +:10E35000000000000000000040000000000000007D +:10E36000000000000000000000000000009000001D +:10E3700000000000009000000040009000900000AD +:10E38000000000000000000000000000000002008B +:10E390000000040002000100050000000000000071 +:10E3A0000000000000000000000000000200020069 +:10E3B00000000000020000000000000082000200D7 +:10E3C000000000000000020000000000000000004B +:10E3D000000000000000000000000000000000003D +:10E3E000000000000000000000000000000000002D +:10E3F000000000000000000000000000000000001D +:10E40000000000000000000000000000000000000C +:10E4100000000000800000001000900000000000DC +:10E4200000000000000000000000000000000000EC +:10E43000000000000000800000000000000000005C +:10E440000004000000000000800000000000000048 +:10E4500000000000000000000000000000000000BC +:10E4600000000000000000000000000000000000AC +:10E47000000000000000000000000000000000009C +:10E48000000000000000000000000000000000008C +:10E4900000000000000004000000040000800400F0 +:10E4A00000008880000082000011040000000400C9 +:10E4B0000011000000000000000000000002000049 +:10E4C000000000000100000000000000000000004B +:10E4D000000000000000000000000000000000003C +:10E4E000000000000000000000000000000000002C +:10E4F000000000000000000000000000000000001C +:10E5000040000000000000000000000000000000CB +:10E5100000000000000000008000000080000020DB +:10E5200080000000002000000000000080000000CB +:10E53000800000000000000000000000000000005B +:10E5400000000000000004000000000000000000C7 +:10E5500000000000000000000000000000000000BB +:10E5600000000000000000000000000000000000AB +:10E57000000000000000000000000000000000009B +:10E58000000000000000000000000000000000008B +:10E5900000000000000000000000040400800000F3 +:10E5A00000080000008000000105000000200000BD +:10E5B000002000200000000000000000000000001B +:10E5C0000000010300400000000001000000000006 +:10E5D000000000000100000000000000000000003A +:10E5E000000000000000000000000000000000002B +:10E5F000000000000000000000000000000000001B +:10E60000000000000000000000000000000000000A +:10E610000000000000000000000000008200002058 +:10E6200000000001000000040000200000000001C4 +:10E6300000000001000100000000000000000000D8 +:10E64000000004000400000100000040040000007D +:10E6500000000000000004000000000000000000B6 +:10E6600000000000000000000000000000000000AA +:10E67000000000000000000000000000000000009A +:10E68000000000000000000000000000000000008A +:10E69000000000000000000000000000000000007A +:10E6A00001000040020000000121012000040020C0 +:10E6B0000111000000000000001100000000000037 +:10E6C000000000000020000000000000001000001A +:10E6D000000000000000002000000000000000001A +:10E6E000000000000000000000000000000000002A +:10E6F000000000000000000000000000000000001A +:10E700000000000000000000000000000000000009 +:10E7100000000010000000000000000000000000E9 +:10E7200000000482000000840084040020090085A9 +:10E7300011010400000000000000000000000000C3 +:10E7400000000000000000010000000000000000C8 +:10E7500000000000000000000001000000000000B8 +:10E7600000000000000000000000000000000000A9 +:10E770000000000000000000000000000000000099 +:10E780000000000000000000000000000000000089 +:10E790000000000000000000000000000000000079 +:10E7A0000000000001000183000001800000000063 +:10E7B0000020008200000083002100000000000013 +:10E7C0000000000000000000000000000000000049 +:10E7D0000000000000000000000900000000000030 +:10E7E0000000000000000000000000000000000029 +:10E7F0000000000000000000000000000000000019 +:10E800000000000000000000000000000000000008 +:10E8100000000000000000000000000000000000F8 +:10E8200000000000000010001020000010200088F0 +:10E830000000000120042000002000001100000062 +:10E8400000000000050000000000000000000000C3 +:10E8500000000000000000000000000000000000B8 +:10E8600000000000000000000000000000000000A8 +:10E870000000000000000000000000000000000098 +:10E88000200000000500000000000000000005005E +:10E890000000000000000000000000000000000078 +:10E8A000000000000000000001C100900000000115 +:10E8B00000C000900000000000C0009000000000B8 +:10E8C00000000000000000000000900000000000B8 +:10E8D0000000900000000084000000009004000090 +:10E8E0000000000000000000000000000000000028 +:10E8F0000000000000000000000000000000000018 +:10E900000000000000000000000000000000000007 +:10E9100000000000000000000000000000000000F7 +:10E920000000000000000000000011C11180004143 +:10E9300000080080008009000000008000800000C6 +:10E940000000000000000000000011008000000036 +:10E9500000000000800000000000000011008000A6 +:10E9600000000000000000000000000000000000A7 +:10E970000000000000000000000000000000000097 +:10E980000000000000000000000000000000000087 +:10E990000000000000000000000000000000000077 +:10E9A0000000000000000000000080001000C10016 +:10E9B0000911C1910040800000118080000080009A +:10E9C00000008080000000000000000000000080C7 +:10E9D00000000080000000800000008000010000B6 +:10E9E0000080000000800000000000000000000027 +:10E9F0000000000000000000000000000000000017 +:10EA00000000000000000000000000000000000006 +:10EA100000000000000000000000000000000000F6 +:10EA20000000000000000000000000009000010055 +:10EA300082000001C190000182000000C09000002F +:10EA400082000000C09000000000000000000000F4 +:10EA50000020000000C000000008000000C000000E +:10EA600000000020000000C00000000000000000C6 +:10EA70000000000000000000000000000000000096 +:10EA80000000000000000000000000000000000086 +:10EA90000000000000000000000000000000000076 +:10EAA0000000000000000000000000001000000056 +:10EAB00000000001019001C100008800009000C02A +:10EAC00000000000009000C00000000000000000F6 +:10EAD000050000888800010001000088880001000E +:10EAE0000000010000888800010000000000000014 +:10EAF0000000000000000000000000000000000016 +:10EB00000000000000000000000000000000000005 +:10EB100000000000000000000000000000000000F5 +:10EB20000000000000000000000000000000800065 +:10EB3000000000020803408811C1000000000080AE +:10EB4000088000000000008000800000000000003D +:10EB5000000041000080000009004100008000002A +:10EB600009000000410000800000090000000000D2 +:10EB70000000000000000000000000000000000095 +:10EB80000000000000000000000000000000000085 +:10EB90000000000000000000000000000000000075 +:10EBA000000000000000000000000000000000095C +:10EBB00000000000C111911108004011801180096E +:10EBC00000000000801180410000000000000000F3 +:10EBD0000000000000110000008000000011000093 +:10EBE0000080000000000011000000800000000014 +:10EBF0000000000000000000000000000000000015 +:10EC00000000000000000000000000000000000004 +:10EC100000000000000000000000000000000000F4 +:10EC200000000000000000000000000000000000E4 +:10EC3000000000000000C101210001000100C0012E +:10EC4000200000000000C0012001000000000000C2 +:10EC50000000000000000001000000400000000172 +:10EC60000000004000000000000100000040000023 +:10EC70000000000000000000000000000000000094 +:10EC80000000000000000000000000000000000084 +:10EC90000000000000000000000000000000000074 +:10ECA0000000000000000000000000000000000064 +:10ECB0000021000007000000418200E00700000082 +:10ECC0000006004807000000008200000700410025 +:10ECD000000000000000000000000000070082218A +:10ECE0000000000007008221000000000000070073 +:10ECF0008221000000000000000000000000000071 +:10ED00000000000000000000000000000000000003 +:10ED100000000000000000000000000000000000F3 +:10ED200000000000000000000000000000000000E3 +:10ED300000000000000000000000FF000000FF00D5 +:10ED40000000FF000000FF000000FF000000FF00C7 +:10ED500000000000000000000000000000000000B3 +:10ED6000F0F0000000000000F0F0000000000000E3 +:10ED70000000F0F0000000000000000000000000B3 +:10ED80000000000000000000000000000000000083 +:10ED90000000000000000000000000000000000073 +:10EDA0000000000000000000000000000000000063 +:10EDB000000000000000000000000000FF00000054 +:10EDC000FF000000FF000000FF000000FF00000047 +:10EDD000FF00000000000000000000000000000034 +:10EDE0000000F0F0000000000000F0F00000000063 +:10EDF00000000000F0F00000000000000000000033 +:10EE00000000000000000000000000000000000002 +:10EE100000000000000000000000000000000000F2 +:10EE200000000000000000000000000000000000E2 +:10EE300000000000000000000000000000000000D2 +:10EE400000000000000000000000000000000000C2 +:10EE500000000000000000000000000000000000B2 +:10EE600000000000000000000000000000000000A2 +:10EE70000000000000000000000000000000000092 +:10EE80000000000000000000000000000000000082 +:10EE90000000000000000000000000000000000072 +:10EEA0000000000000000000000000000000000062 +:10EEB0000000000000000000000000000000FFFF54 +:10EEC000000000FF00000F0F000000FF00000F0F08 +:10EED000000000FF00000F0F000000000000000015 +:10EEE000FFFF0000FFFF00003C3C0000FFFF0000B0 +:10EEF000000000FF0000FFFF000000000000000015 +:10EF00000000000000000000000000000000000001 +:10EF100000000000000000000000000000000000F1 +:10EF200000000000000000000000000000000000E1 +:10EF300000000000000000000000000000000000D1 +:10EF4000FFFF000000FF00000F0F000000FF0000A7 +:10EF50000F0F000000FF00000F0F00000000000076 +:10EF6000000000000000000000003C3C0000000029 +:10EF70000000000000FF0000000000000000000092 +:10EF80000000000000000000000000000000000081 +:10EF90000000000000000000000000000000000071 +:10EFA0000000000000000000000000000000000061 +:10EFB0000000000000000000000000000000003819 +:10EFC000000010C003820338CC0092C003E3033F6B +:10EFD0000C0D92C0038203380C008AC000000000B0 +:10EFE0000000000005002A00054000A805002A00D6 +:10EFF000054000A8000005002A00054000A8000008 +:10F000000000000000000000000000000000000000 +:10F0100000000000000000000000000000000000F0 +:10F0200000000000000000000000000000000000E0 +:10F0300000000000000000000000000000000000D0 +:10F04000000000000000CFCFFF00F0F0C3FF000081 +:10F0500000000000000000000000000000000000B0 +:10F0600000000000000000000000000000000000A0 +:10F070000000000000000000000000000000000090 +:10F080000000000000000000000000000000000080 +:10F090000000000000000000000000000000000070 +:10F0A0000000000000000000000000000000000060 +:10F0B0000000000000000000000000000000000050 +:10F0C00000000000000000000C0CFF00F0F0003C0D +:10F0D0000000000000000000000000000000000030 +:10F0E0000000000000000000000000000000000020 +:10F0F0000000000000000000000000000000000010 +:10F1000000000000000000000000000000000000FF +:10F1100000000000000000000000000000000000EF +:10F1200000000000000000000000000000000000DF +:10F1300000000000000000000000000000000000CF +:10F1400000000000000000000000D7D70F0FF0F013 +:10F15000287D00000000000000000000000000000A +:10F16000000000000000000000000000000000009F +:10F17000000000000000000000000000000000008F +:10F18000000000000000000000000000000000007F +:10F19000000000000000000000000000000000006F +:10F1A000000000000000000000000000000000005F +:10F1B000000000000000000000000000000000004F +:10F1C00000000000000000000000000014140F0FF9 +:10F1D000F0F0287D000000000000000000000000AA +:10F1E000000000000000000000000000000000001F +:10F1F000000000000000000000000000000000000F +:10F2000000000000000000000000000000000000FE +:10F2100000000000000000000000000000000000EE +:10F2200000000000000000000000000000000000DE +:10F2300000000000000000000000000000000000CE +:10F2400000000000000000000000000000000000BE +:10F2500000000000000000800100008000000000AD +:10F26000000088808800000000000000000000000E +:10F2700000000000000090000000000000000003FB +:10F2800000000000200020004000000000000000FE +:10F29000000000000000000001000100C08000002C +:10F2A000000000002000200000009000008000000E +:10F2B000000000000000000000000000000000004E +:10F2C000000000000000000000000000000000003E +:10F2D0000000000000000000000220000004000008 +:10F2E0000000000000080000000000000000000016 +:10F2F00000000000000000000000000040000000CE +:10F3000000000000000000000000000000000000FD +:10F310000000400000000000000020002000000469 +:10F32000000000000020000000200082000000100B +:10F3300000000000000000000000000000000000CD +:10F3400000000000000000000000020000000000BB +:10F350000000900000000200840002000000000095 +:10F360000004100010000000100000000000000069 +:10F37000000010000000000000001000000000026B +:10F3800000800000000000000000000000000000FD +:10F390000000000008000000000000001040100005 +:10F3A00000080008000000000000000000800000CD +:10F3B0000100010002000000000000000008000041 +:10F3C000000000000000000000000000000000003D +:10F3D000000000000000000000000000000000002D +:10F3E0000000000180008000000080000400000098 +:10F3F000000000008000000000000000800000000D +:10F4000000010002000000000000000000000000F9 +:10F410000000000000008000008400000000800068 +:10F42000800000010001000000000000000000401A +:10F4300000000400040000000000000000000000C4 +:10F4400000000000000000000000000000000000BC +:10F4500000000000000000000000000000000000AC +:10F46000000000000000000000000011010000008A +:10F470000000000000000000000800000000000084 +:10F4800000000080000000000000000000000000FC +:10F490000008000000000000000000000000000064 +:10F4A0000000000000000000000000050100000056 +:10F4B000880082000000010000000000000400003D +:10F4C000000000000000000000000000000000003C +:10F4D00000000000000000000000000000880000A4 +:10F4E00000000000000000000000000000002000FC +:10F4F000000000000000000000000000000000000C +:10F5000000000000000200000000000000000000F9 +:10F5100000000000000000000000000000000000EB +:10F5200000000000000000000000000000002000BB +:10F5300000000000000000000800000000000001C2 +:10F5400000000000000000000000000000000000BB +:10F5500000000041000000000000000000009000DA +:10F5600090000000000000000000000000000011FA +:10F57000000000000000000000000000000001404A +:10F5800000800000000000000000000000000000FB +:10F5900000000000000000000000C00000000000AB +:10F5A0000000000008008400C0008300000000800C +:10F5B00000002000000000400000080001000000E2 +:10F5C000000000800000000000800000000000003B +:10F5D000000000000000000000000000000000002B +:10F5E000008800880000000000000000000000000B +:10F5F0000300030000000000000000000000000005 +:10F6000020000004000000000000000000000000D6 +:10F6100000000800080010001000000000000000BA +:10F6200000000000000000000000050020000000B5 +:10F630000004080088000800030100009100040095 +:10F6400000000000000400000000080200000000AC +:10F6500000000000000000000000000000000000AA +:10F660000000000090000100000000000000000009 +:10F6700000000000000000000000000090000000FA +:10F68000000000000000000000000000000000007A +:10F6900090000000000000000000000000000000DA +:10F6A0000000000000001000000002000004000044 +:10F6B00000000000000000000000000000009000BA +:10F6C0000000000000008200000000000020000098 +:10F6D000000000000000000000000000000000002A +:10F6E00000C0000000A0098840000000008400085D +:10F6F0002100000000900004400000000000000015 +:10F7000000000000000000840000000000000084F1 +:10F710000000000000000000008400000000000065 +:10F7200000000000000000000000000000000001D8 +:10F7300000000000000000000000000000000000C9 +:10F7400000000000000000000000000000000001B8 +:10F7500000000000000000000000000000000000A9 +:10F760000000000000000000000088800000000091 +:10F77000000000000021000200000000000000095D +:10F780000000000000000000000000000000000079 +:10F790000002000000000000000000020000000065 +:10F7A0000000000200000000000000000000000057 +:10F7B0000000000000000000000000000000000940 +:10F7C0000000010000000000000000000000000038 +:10F7D0000000000000000000000000000000000029 +:10F7E00000000000119000000090000000020000E6 +:10F7F0000000000000000000000000000000000009 +:10F8000000000000000000000000000000000000F8 +:10F8100000000000000000000000000000000000E8 +:10F8200000000000000000000000000000000000D8 +:10F8300000000000000000000000000000000000C8 +:10F840000000000040000000000000000000000078 +:10F8500000000000000000000000000000000000A8 +:10F860000000000000000000000000000000010196 +:10F870000000000000000100000000000000000087 +:10F880000000000000000100000000000000000077 +:10F8900000008200000000000000000000000000E6 +:10F8A0000000000000000000000000000000000058 +:10F8B0000100000000010000000000000000000046 +:10F8C00001000000000084000000000000000000B3 +:10F8D0000000000000000000000000000000000028 +:10F8E0000000000000000000000000000000000018 +:10F8F0001108000900410000110000210000000073 +:10F9000000000000000000001100210000000000C5 +:10F9100000000000000000000000000000000000E7 +:10F9200000000000000000000000000000000000D7 +:10F93000000011002100000800000000000000008D +:10F9400000000900000000000000000000000000AE +:10F9500000000000000000000000000000000000A7 +:10F960000000000000000000000000000000000097 +:10F9700000000041000000400000000800001120CD +:10F98000000000000000000000000041090000032A +:10F990000080100002000000410000020000000092 +:10F9A0000000000000000000000000000000000057 +:10F9B0000000000000C10000004100000000000045 +:10F9C0000041000000000000800080800000000076 +:10F9D00000030000111100000000400000000000C2 +:10F9E0000000000000000000000000000000000017 +:10F9F0000000000000010000000100000001000004 +:10FA000001010000000000000000000000010100F2 +:10FA1000000000880000000000000100000000005D +:10FA200000000000000000000000000000000000D6 +:10FA300000000010000000110000000100000000A4 +:10FA4000000000010000400000004000C0900000E5 +:10FA500000000000000001000000000000000000A5 +:10FA60000000000000000000000000000000000096 +:10FA70000000000000000000210000000100000064 +:10FA80002000000001000000000000000000000055 +:10FA900088000000010000000000000100000000DC +:10FAA0000000000000000000000000000000000056 +:10FAB00000000000000000000000C0000000000086 +:10FAC000000008000000010000880021C04000C1C3 +:10FAD000010000000000010000000002A0900000F2 +:10FAE0000000000000000000000000000000000016 +:10FAF00000000000000000000000C1000000410004 +:10FB0000000080000009200000000000000000004C +:10FB10000000000000004100000000000021000083 +:10FB200000000000000000000000000000000000D5 +:10FB30000000000000000000000000008000000045 +:10FB40000300000080000002111000000009800086 +:10FB500000A141000000000008000000008080803B +:10FB60000000000000000000000000000000000095 +:10FB70000000000000000000000000040000000081 +:10FB80000000000411000000000000000000000060 +:10FB90000000000000110400000000000000000050 +:10FBA000000800000000000000000000000000004D +:10FBB0000000000000000000000000000000001134 +:10FBC0000000000300000000000000000000000032 +:10FBD0000000000000000020000000000000000005 +:10FBE0000000000000000000000000000000000015 +:10FBF0000000000000000000000000000001000004 +:10FC000000000000000101000000000000000000F2 +:10FC100000000000000000010000000000000000E3 +:10FC200000000001000000000000000000000000D3 +:10FC300000000000000000000200000000000000C2 +:10FC400000010000000100000000000000000000B2 +:10FC50000000004000000000000100000000000063 +:10FC60000000000000000000000000000000000094 +:10FC70000000000000000000000000000000000084 +:10FC800000E00000600A000000E00000000000004A +:10FC9000000000000000000000E0000081410000C2 +:10FCA0000000000000000000000000000000000054 +:10FCB0000000000000000000000000000000000044 +:10FCC000000002E000004842000000E000000021C7 +:10FCD0000000000042000041418200E0420050006C +:10FCE000002100E00700000000000000000000000C +:10FCF0000000000000000000000000000000000004 +:10FD000000000000000000000000000000000000F3 +:10FD100000000000000000000000000000000000E3 +:10FD200000000000000000000000000000000000D3 +:10FD30000000000000000000000000550055000019 +:10FD400000000000000000000000000000000000B3 +:10FD5000000000000000F0003C3C0000000000003B +:10FD6000000000000000F0FFF0FF000000000000B5 +:10FD70000000000000000000000000000000000083 +:10FD80000000000000000000000000000000000073 +:10FD90000000000000000000000000000000000063 +:10FDA0000000000000000000000000000000000053 +:10FDB0000000000000000000000000000055005599 +:10FDC0000000000000000000000000000000000033 +:10FDD0000000000000000000F00000000000000033 +:10FDE0000000000000000000F0FFF0FF0000000035 +:10FDF0000000000000000000000000000000000003 +:10FE000000000000000000000000000000000000F2 +:10FE100000000000000000000000000000000000E2 +:10FE200000000000000000000000000000000000D2 +:10FE300000000000000000000000000000000000C2 +:10FE400000000000000000000000000000000000B2 +:10FE500000000000000000000000000000000000A2 +:10FE60000000000000000000000000000000000092 +:10FE70000000000000000000000000000000000082 +:10FE80000000000000000000000000000000000072 +:10FE90000000000000000000000000000000000062 +:10FEA0000000000000000000000000000000000052 +:10FEB0000000000000000000000000000000000042 +:10FEC0000000000000000000000000000000000032 +:10FED0000000000000000000000000003C00C30023 +:10FEE0000000000000000000000000000000000012 +:10FEF0000000000000000000000000000000000002 +:10FF0000000000000000000000610006000D00007D +:10FF100000000006000C00000000000000000000CF +:10FF200000400006000C000000610006000D00000B +:10FF300000000000000000000000000000000000C1 +:10FF40000000000000000000000000040006000E99 +:10FF50002000006100060009000000610006059D08 +:10FF600000050561002E800D000000610026000DD7 +:10FF70000000000000000000000000000000000081 +:10FF80000000000000000000000000000000000071 +:10FF900000000000FF0000FF000000000000000063 +:10FFA000000000000F0FFFFF00000000000000AA8B +:10FFB00000AA000000000000000000000000000097 +:10FFC0000000000000000000000000000000555587 +:10FFD000FFFF0000000000000000FF000000000024 +:10FFE0000F0F0000000000000000000000000000F3 +:10FFF0000000000000000000000000000000000001 +:020000040030CA +:1000000000000000000000000000000000000000F0 +:10001000000000000000FF0000FF000000000000E2 +:100020000000000000000F0F0000000000000000B2 +:1000300000AA00AA0000000000000000000000006C +:1000400000000000000000000000000000000000B0 +:10005000555500000000000000000000FF000000F7 +:1000600000000F0F00000000000000000000000072 +:100070000000000000000000000000000000000080 +:10008000000000000000000000000000000050FA26 +:100090005050000000000000FF0000FF00000000C2 +:1000A00000000000000000000000F0F00000000070 +:1000B0000000808020200000000000000000000000 +:1000C0000000000000000000000000000000000030 +:1000D00000000F0FAAAA00000000000000000000AE +:1000E0000000000000000000000000000000000010 +:1000F000000000003C3C0000000000000000000088 +:1001000000000000000000000000000000000000EF +:1001100050FA5050000000000000FF0000FF0000F7 +:10012000000000000000000000000000F0F00000EF +:10013000000000008080202000000000000000007F +:1001400000000000000000000000000000000000AF +:10015000000000000F0FAAAA00000000000000002D +:10016000000000000000000000000000000000008F +:100170000000000000003C3C000000000000000007 +:10018000000000000000000000000000000000006F +:100190000000000000000000000040000402C00059 +:1001A00000000000000000000000000000008800C7 +:1001B0000000000000000000880000032000200074 +:1001C0002000000000000003000000000000840088 +:1001D0008800000000000000000020002000200037 +:1001E000200000000000000040000000000084002B +:1001F00000000000000000000000210000000000DE +:100200000000000000000000008400840000008462 +:1002100000000004000000000000000000000000DA +:10022000000000000000008200400000008200008A +:1002300000000000000000000000000000000000BE +:100240000000400000000000000000A000000000CE +:10025000000000000000000000000040000000203E +:10026000000000A0050000A000A000A000C000A0A9 +:1002700000A000900000000000000000100000003E +:100280000000000000000200020090009000020048 +:10029000000002000000000000000200100000004A +:1002A000000000000000000000000000000000004E +:1002B000000000000000824000000000100000006C +:1002C000000000000000000000000000000000002E +:1002D000000000000000000000000000000010000E +:1002E000000000000000000000000000000000000E +:1002F00000000000000000000000000000000000FE +:1003000000000000000000000000000000000000ED +:10031000000000000000000000000000000080005D +:1003200000000000000000000000000000000000CD +:1003300000000000009000000000000800008000A5 +:100340000000000000840000000000000000000029 +:100350000000000000000000000000000088000015 +:10036000800000000000000000000000000000000D +:10037000000000002000000000000000000000005D +:10038000000000000000000000000000000000006D +:100390000000000000008400400000000000000297 +:1003A0000004900000080003002100040003000086 +:1003B000000000009000000000110000000000009C +:1003C000000000000000000000000000000000002D +:1003D000000000000000001100000000000000000C +:1003E0000000000000000000000000000000C0004D +:1003F0000000000000008800000088008800C000A5 +:1004000000000100000000000000000000000000EB +:1004100000000000000000000000000000000000DC +:1004200000000000000000000000000000000000CC +:1004300000000000000000000000000000000000BC +:1004400000000004000000000000000000000000A8 +:10045000000000000000000009000800000000008B +:1004600000C00000000000000500000000000000C7 +:100470000000000000C0008200000000000000003A +:100480000000000020000000000000000005000047 +:10049000000084050005000000000000C00000000E +:1004A00010008200A004000000000404820000008C +:1004B000820082008400C0000000820082030000ED +:1004C00082008200C004000082000000C0008200A0 +:1004D0000000820082000000A000840084008200EE +:1004E000000082008200C00482008200820082003C +:1004F00000008200000084008200840082008200EC +:10050000C0008200A0008200000000000000000087 +:1005100000000000000000000000000000000000DB +:10052000000000900000000100000000000000003A +:1005300000000000000000000000000000000000BB +:1005400000000000000000010000000000000000AA +:100550000000000000000000034003000000000055 +:10056000000000000000000000010000000000008A +:1005700000000000000003880300400008000000A5 +:10058000000000000000000000000000000000006B +:1005900000009000000000000000000000000008C3 +:1005A000000000000000000000111000000000002A +:1005B0000000000040020000200040030000000492 +:1005C00000000000000000094011000008000000C9 +:1005D0000800000000000000000000009000000083 +:1005E000820400000000000000000011080000006C +:1005F0000800000000000000100000000008820059 +:1006000008040000000000000000001100000000CD +:1006100000000000000000000000000000040000D6 +:1006200040000020008400080000000000000000DE +:100630000400000000000000000000C000000000F6 +:100640000084000000040000000000000000000022 +:10065000000000000000000000000000000000009A +:100660000000000000000000000000000084000006 +:1006700000000000000000000082000009C00084AB +:10068000000000C0000000000000000000000000AA +:10069000000000000000000000000000004000001A +:1006A000000000049009002100210000000000402B +:1006B0000000040000000000000000000000000036 +:1006C00000000000000000000005000282000000A1 +:1006D000000008218200A00010000000840000003B +:1006E0000000000082000000000000000000080080 +:1006F000000008004000A00200000000000002000E +:1007000000000000080000000002000000000800D7 +:1007100000000000000000000000000000002000B9 +:100720000000009000000290000000002000000087 +:100730002000000000000004000000000000000095 +:100740000000000041000000000000000000050063 +:100750000000000000000000000000000000000099 +:100760000000000000000000000000000000000089 +:100770000000000000000000000000000000110068 +:100780000000000000000000000000000000000069 +:10079000000000010001000100C10001000100C0D3 +:1007A000000900000101000200900001000100C1E9 +:1007B000000000010001000100C00001000100C0B4 +:1007C000014100000101002000880001000100C17A +:1007D0000000000000010001000100C00001040150 +:1007E00000C00183000001010040009000010201EF +:1007F00000C0000000010001000100C00001040170 +:1008000000C001830000010100400004000102015A +:1008100000C000000041004100410088004100414B +:1008200000A010C100111041000000000041004173 +:100830000085000000410041004100C0004100412E +:1008400000C01041001110410000000000410041B3 +:1008500000850000000000410041004100C000414F +:10086000804100C010C10511084100800000004116 +:1008700080410085000000410041004100C000416E +:10088000804100C010C14011104100800080004133 +:10089000804100850000410003000000008041000D +:1008A000900000000200900041800002A000410082 +:1008B000C1000080000041000300000000804100F2 +:1008C000A00000002000900009800000840041008A +:1008D000C100008000000003410003000000008010 +:1008E00041008300000005000200418000108800E4 +:1008F0004100C10000808000410003000000008032 +:1009000041008300000005000200208000008200FA +:100910004100C1000080800001000100000000C013 +:100920000100C00000000000080010080088C0009E +:100930000300C1000084080801000100000000C09D +:100940000100C00000000000020010100088C1007B +:100950009100C100008408080000010001000000AF +:1009600000C00100C0000000000041008210002112 +:10097000C1009100C10000048200010001000000DC +:1009800000C00100C00000000000210088100040ED +:10099000C1009100C1000004820000C00001C0C17C +:1009A00000000000000100C004900011000100C11F +:1009B0000100000000010000000000C00001C0C1F3 +:1009C00000000000000102C082880089000100C10F +:1009D00000000000000100000000000000C0000155 +:1009E000C0C100000000000102C08288008900012F +:1009F000C0C10000000000010000000000C00001B4 +:100A0000C0C100000000000102C0824000030001DC +:100A100000C1000000000001000000000080004153 +:100A200080C100000000004100C1000200C100417F +:100A300000C10800000000410008000000800041E3 +:100A400080C100000000004180C100080041004159 +:100A500000C100000000004100080000000000800C +:100A6000004180C100000000004180C10040004101 +:100A7000004180C10000000000410005000000802E +:100A8000004180C100000000004180C1002000C181 +:100A9000004100C100000000004100050000C1004D +:100AA000800080C100004108000084004100C14175 +:100AB0008000800800004100000080004100C1006B +:100AC000800080C100004140800082004100C1419F +:100AD0000000801000004100000080004100000084 +:100AE000C100800080C100004140800082004100C0 +:100AF000C11080008005000041000000800041001E +:100B0000C100800080C1000041408000820041009F +:100B1000C141000080100000410000008000410041 +:100B2000C1004000C0C100000100880008000100B1 +:100B3000C1898200C001000001000000C000010066 +:100B4000C1004000C0C100000100400005000100DC +:100B5000C1099000C000000001000000C0000100B9 +:100B60000000C1004000C0C10000010040000500BD +:100B70000100C1212000C000000001000000C000F1 +:100B80000100C1004000C0C100000100400005009C +:100B90000100C1418200C001000001000000C0004E +:100BA0000100000000000000004200000000000002 +:100BB000000081120048070048000000000000000B +:100BC00000000000000000000042000000000000E3 +:100BD00000008112004807004800000000000000EB +:100BE00000000000000000000000004200000000C3 +:100BF00000000000841200480700004200000000CE +:100C000000000000000000000000004200000000A2 +:100C100000000000811200480700480000000000AA +:100C200000000000000000000000000000000000C4 +:100C300000000000000000000000000000000000B4 +:100C400000000000000000000000000000000000A4 +:100C50000000000000000000000000000000000094 +:100C60000000000000000000000000000000000084 +:100C70000000000000000000000000000000000074 +:100C80000000000000000000000000000000000064 +:100C90000000000000000000000000000000000054 +:100CA0000000000000000000000000000000000044 +:100CB0000000000000000000000000000000000034 +:100CC0000000000000000000000000000000000024 +:100CD0000000000000000000000000000000000014 +:100CE0000000000000000000000000000000000004 +:100CF00000000000000000000000000000000000F4 +:100D000000000000000000000000000000000000E3 +:100D100000000000000000000000000000000000D3 +:100D20000000000000000000757B000000000000D3 +:100D300000000000000000000000000000000000B3 +:100D4000000000000000DEAE757B00000000000027 +:100D50000000000000000000000000000000000093 +:100D6000000000000000DEAE0000757B0000000007 +:100D70000000000000000000000000000000000073 +:100D80000000000000000000DEAE757B00000000E7 +:100D90000000000000000000000000000000000053 +:100DA0000000000000000000DEAE60C6030000008E +:100DB000000000000031E0000000000000000C0016 +:100DC00000000000000000C0630660C603000000D1 +:100DD000000000000031E0000000000000000C00F6 +:100DE00000000000000000C06306000060C60300B1 +:100DF0000000000000000031E000000000000000E2 +:100E00000C0000000000000000C0630660C6030084 +:100E10000000000000000031E000000000000000C1 +:100E20000C0000000000000000C06306000000008D +:100E300000000000000000000000000000000000B2 +:100E4000000008000000000000000000000000009A +:100E50000000020000000000C000000008000000C8 +:100E6000A00000000000000000004000000300009F +:100E700000000000400000000000200000002000F2 +:100E80000000400000000000000000002000000002 +:100E9000000000002000881000002000000020005A +:100EA0000000200000000000000000002000000002 +:100EB00000000000000000000000000000000090A2 +:100EC000008200828000000000000000000000009E +:100ED00000000000000000000000400000000000D2 +:100EE00000000000000021002102000000000000BE +:100EF0004100000000001000000000000040000061 +:100F000000000000000000000000000000000000E1 +:100F100000000000000000000000000000000000D1 +:100F200000000000000000000500000000000000BC +:100F300000000000000000000200020002000200A9 +:100F4000020000000040000000000000000000005F +:100F5000000000000000000000000000000000048D +:100F60001000000000000000000000000000000071 +:100F70000000100000000000000000000000001051 +:100F8000001002000000000000000000000000004F +:100F9000000000000000000000200400000000002D +:100FA000000400000000001000100000000000001D +:100FB0000000000000000000000000000000000031 +:100FC0000000000000000000000000000000000021 +:100FD0000000000000000000000000000000000011 +:100FE00000008004000000840090009000000000D9 +:100FF0000000000080000000000000000000000071 +:1010000000000000000000000000000000000000E0 +:10101000000000000000000000000001800000004F +:1010200000000001000000000000000000000000BF +:1010300000000000000000000000000000000000B0 +:1010400000000000000000000000000000000000A0 +:10105000000000000000000000110000040000007B +:1010600000000000000000000080010000000002FD +:101070000000000000000005000000040000000067 +:101080000000000000000000000000000000000060 +:1010900000000000000000000005002000200020EB +:1010A0000020000000000000000000000000000020 +:1010B000000000000000000000000200000000002E +:1010C0000000200009000088000000A000080008BF +:1010D0000000050000000000410000881100000031 +:1010E000000020000000000000820004040400044E +:1010F000000100820000000000000000400000002D +:101100000000030041000000000000840000000017 +:1011100000001000000000000000000000010301BA +:101120000301210100000000000000000000000099 +:1011300000000000000000000000000000000000AF +:1011400000000000000900000091000000110000F4 +:10115000000000000000000000000000000000008F +:1011600000000021000000000500010501000180D1 +:10117000008085000080A0000000A00000000100A9 +:10118000088000000000004000000000100008007F +:1011900040004000000004000400010001000100C4 +:1011A00001000000002000000000000000004000DE +:1011B00040000000000000000000000000000000EF +:1011C00000002000000000000010002000000000CF +:1011D0000000000000880000000000000000000087 +:1011E0000000000000000010000084000400040063 +:1011F000040400200400002000820000000000829F +:10120000200000040000000000000000000000407A +:10121000880000000000000080008000040004003E +:1012200004C00400000000010000000000000000F5 +:1012300000000000000000000000000000000000AE +:10124000000000000000000000000000000000009E +:1012500000000000000000008400200000000000EA +:1012600000000000000000000000900000000400EA +:101270000400000000110000000090800000000049 +:1012800000040020400000100000000000000000EA +:10129000000000000000000000000000000000004E +:1012A00004008200040000000000000000000000B4 +:1012B00000000000000000000000000000000088A6 +:1012C000000000000000000000000288000002088A +:1012D000004009080090000200000000000000002B +:1012E00000000000020000900000050000000288DD +:1012F000820480A000000000000000001020000018 +:101300000000000000001000009000000800000035 +:101310001000100409880090000000000000080080 +:1013200000008000000088000000000008000000AD +:101330000800008408000000000000000000080011 +:10134000000000000000000020000000000000007D +:10135000000000800000000000000000000000000D +:10136000000000000000000000000000000000007D +:101370000000010000000800040001020009000054 +:10138000000000000000000000000040000000001D +:101390008200000000000000000000210021000089 +:1013A00000000400820004000000018001040080AD +:1013B0000100000000000000010000000002002009 +:1013C00000200000000000000000000000000000FD +:1013D00000000000001000000000000000000000FD +:1013E0000000009000004104110000000000000017 +:1013F000000000002000200000000000400100006C +:1014000000000000000000000000000000000000DC +:101410000000000000840000000000000000000048 +:101420000000000080000000800000000420040094 +:101430004120040000000000000004000000000043 +:10144000000000000000000000000000000000009C +:10145000000000000000000000000000000000008C +:10146000000000000000000000000000000000007C +:101470000000000001C000900000000001C10090C9 +:101480000001000100000100000000000000000059 +:1014900000000000000010400008000202400000B0 +:1014A00000000000000000C000900000000000C02C +:1014B000019040000000000000000000000000005B +:1014C000000000000000000000000000000000001C +:1014D000000000000000000000000000000000000C +:1014E00000000000000000000000000000000000FC +:1014F0000000000000001180218000000000108822 +:1015000000830020001100001100210000000000F5 +:10151000000000000000000000000080000000004B +:1015200000000000000000000080008000000000BB +:10153000038521A10005004000000000000000001C +:10154000000000000000000000000000000000009B +:10155000000000000000000000008000000080008B +:10156000000000000000000000000000000000007B +:101570000000000000000000000809000003808057 +:10158000008000008000808000030041090000030B +:1015900000800000000000000000000000000000CB +:1015A000000000000000800080800000000080003B +:1015B0008080030004008300888000000000000099 +:1015C000800000000000000000000000000000009B +:1015D00000000000000000000000880090C08800AB +:1015E00090C00000000000000000000000000000AB +:1015F00000000000000000000000000101000000E9 +:10160000C088000200008400C090000000010100BA +:101610000000008800000000000000000000000042 +:1016200000000000000000008400C09000000000E6 +:101630008400C090000001008400C1900000000000 +:101640000000080000000000000000000000000092 +:10165000000000000000000000000000000000008A +:10166000A0000000000000000000000000000000DA +:101670000000000000000000000000000000A000CA +:10168000889001C000000000019001C0000000002F +:101690008800000001000000000000000000089029 +:1016A000000200020488000000000090000000001A +:1016B0000000049000C000000001009100C0000084 +:1016C000000000000000000000000000000000001A +:1016D0000000000000000000000000000000050005 +:1016E00000000000000000000000000000000000FA +:1016F00000000000000000000000000000000000EA +:10170000000000804180000021001180088000005E +:101710000000000000004100000000000000000088 +:1017200080000000000080800000000000800000B9 +:1017300000000000008000800003030840A100C0FA +:101740000000000000000000000000000000000099 +:101750000000000000000000000000000000000089 +:1017600000080004008000000000000000000000ED +:101770000000000000000000000000000000000069 +:101780008002211100800000A111800300004000B0 +:101790000000000000110000040000000000000034 +:1017A0000000000000000000000000000000000039 +:1017B00000008011800000000000A11184000000E2 +:1017C0000010000000000080000000000000000089 +:1017D0000000000000000000000000000000000009 +:1017E0000000000000100090000000000000000059 +:1017F00000000000000000000000000000000000E9 +:1018000000009000000000080000C101200100005D +:1018100000000000000000010000000000000000C7 +:1018200000000000000000000000000000000000B8 +:1018300000000000C001200000000000C191210054 +:10184000000000010000000000080000000000008F +:101850000000000000000000000000000000000088 +:1018600000000000008100000700000000000000F0 +:101870000000000000000000000000000000000068 +:1018800000000000002100E0420000410041000093 +:10189000420000000000000000E000008141000064 +:1018A00000000000000000000000000000000082B6 +:1018B0000000420000000021000042000000000A79 +:1018C000004842000000000000004200000000004C +:1018D0000000000000000000000000000000000008 +:1018E00000000000000000000000000000000000F8 +:1018F00000000000000000000000000000000000E8 +:101900000000000000000000FFFF000000FF0000DA +:1019100000FF000000FF00000000000000000000C9 +:101920000000000000000000000000000E000E009B +:101930000000000000FF00FF000000FF000000FFAB +:10194000000000FF000000FF000000000000000099 +:101950000000000000000000000000000000000087 +:101960000000000000000000000000000000000077 +:101970000000000000000000000000000000000067 +:1019800000000000000000000000FFFF000000FF5A +:10199000000000FF000000FF000000000000000049 +:1019A00000000000000000000000000000000E0029 +:1019B0000F0F0000000000FF00FF000000FF00000C +:1019C00000FF000000FF000000FF0000000000001A +:1019D0000000000000000000000000000000000007 +:1019E00000000000000000000000000000001EFFDA +:1019F0001E55000000000000000000000000000074 +:101A000000000000000000000000FF000000FFFFD9 +:101A10000000FF000000FF000000000000000000C8 +:101A2000000000000000000000000000FFFF0005B3 +:101A30000000000000000000FF000000FF000000A8 +:101A4000FF000000FF000000FF0000000000000099 +:101A50000000FFFF00000000000000000000000088 +:101A60000000000000000000000000000000000076 +:101A70001EAA1E0000000000000000000000000080 +:101A8000000000000000000000000000FF00000057 +:101A900000000000FF000000FF0000000000000048 +:101AA00000000000000000000000000000000C0C1E +:101AB0000C0C0000000000000000FF000000FF0010 +:101AC0000000FF000000FF000000FF000000000019 +:101AD0000000000000000000000000000000000006 +:101AE00000000000000000000000000000000500F1 +:101AF0000A38050000A000000000000000000000FF +:101B00000000000000000000000000000000034290 +:101B1000033E0C0C92C003E3033E0C0D8AC0000090 +:101B200000400006000C0000000000000000000063 +:101B30000000400000000000000000300C0012C057 +:101B4000038203300C0092C003E303360C098AC001 +:101B50000000000000000000000000000000000085 +:101B60000000000000000000000000000000000075 +:101B70000000000000000000000000000000000065 +:101B80000000000000000000000000000000000055 +:101B90000000FF00FFFF00002828000000000000F8 +:101BA000000000003C3CFFFF0000000000000000BF +:101BB0000000000000000000000000000000000025 +:101BC00000000000000000000000FF000000FFFF18 +:101BD000FFFF000000000000000000000000000007 +:101BE00000000000000000000000000000000000F5 +:101BF00000000000000000000000000000000000E5 +:101C000000000000000000000000000000000000D4 +:101C100000000000FF000000000028280000000075 +:101C20000000000000003C3C00000000000000003C +:101C300000000000000000000000000000000000A4 +:101C4000000000000000000000000000FF00000095 +:101C50007C7D3C3C00000000000000000000000013 +:101C60000000000000000000000000000000000074 +:101C70000000000000000000000000000000000064 +:101C80000000000000000000000000000000000054 +:101C90000000000000000000F0F00000000000085C +:101CA00000000000000000000000F0F00000000054 +:101CB0000000000000000000000000000000000024 +:101CC0000000000000000000000000000000FFFF16 +:101CD000FFFFE000F0F00000000000000000000046 +:101CE00000000000000000000000000000000000F4 +:101CF00000000000000000000000000000000000E4 +:101D000000000000000000000000000000000000D3 +:101D100000000000000000000000F0F000000000E3 +:101D2000000000000000000000000000F0F00000D3 +:101D300000000000000000000000000000000000A3 +:101D40000000000000000000000000000000000093 +:101D5000FF3D3C3CA000F0F000000000000000004F +:101D60000000000000000000000000000000000073 +:101D700000000000000000000000000000800000E3 +:101D8000000000000000A0000000020000000011A0 +:101D900000000000000000000000000001009000B2 +:101DA0000100000000000000000100000000000031 +:101DB0000000000000000000000000000000000023 +:101DC00020000000000000004000000000000000B3 +:101DD0000000000000000000000000000000000003 +:101DE00020000000000000002000000000000000B3 +:101DF0000000000011000000000011000000004081 +:101E00000000000000000000100000008000000042 +:101E100000000000000000000000000000000400BE +:101E200000001000000000000000000000000000A2 +:101E30000000000000000000000009000000000099 +:101E4000000000000000000005000000000000008D +:101E50000000000000000000000000000000000082 +:101E60000000000000000000000000000000000072 +:101E700000009000000003008200820084009000B7 +:101E800002000000000000000000820000000200CC +:101E900002000200020002000000000088000400AE +:101EA0000400000000400300000082000000020067 +:101EB0000000000000000000000000000000000022 +:101EC0000000000000000000000000000000000012 +:101ED0000000000000000000000000000000000002 +:101EE00000000000000000000000000000000000F2 +:101EF00000000000000000000200000000000000E0 +:101F000000000000000000000000000000000000D1 +:101F10008000800080000000000000000000000041 +:101F20008000800000000001400000000000000070 +:101F30000000000400040000000000000000000099 +:101F4000000000000000000000000000000003008E +:101F50000000000000000000000800000000000079 +:101F60000008000000000000000800000000000061 +:101F70000000000000000000000020000000000041 +:101F800000009000C000200000000000000040039E +:101F90000280000401880000000020000000000012 +:101FA00082009000000020000000400000000800B7 +:101FB0000000840000000000000000080000000095 +:101FC00000000008000300000800000000000000FE +:101FD0000000000000000000000000000000000001 +:101FE00000000000000000000800000000000000E9 +:101FF00000000000000000000000000000000000E1 +:1020000000000000000211000000000000840084B5 +:102010000000800400000204000000000000000036 +:1020200000000000118200000000410000000000DC +:1020300000000000000000000000000000000000A0 +:10204000000000000000000000000002000000008E +:102050000000000000000000000000000000000080 +:102060000000000000000000000000000000000070 +:10207000000000000000000000000004000000005C +:1020800000000040000000000000C0000000000050 +:10209000000000000200008000000080001000002E +:1020A00000000000004000030000010000400000AC +:1020B0000080C000000000000000000000000000E0 +:1020C00000000000000000000011000000000000FF +:1020D0000000000000000000000000000000000000 +:1020E00000000000000000000000000000000000F0 +:1020F00000000000000000000000000000000000E0 +:10210000000000000000004000000000000000008F +:1021100000000000000080000040000000040000FB +:1021200000000000000000000000000004000000AB +:10213000000000020000000000000000000000009D +:10214000000000C0000000000000000000000000CF +:10215000000000000000000000000000000000007F +:10216000000000000000000000000000000000006F +:10217000000000000000000000000000000000005F +:10218000400000000000040000000000000000000B +:102190000000000000009000000402000104008024 +:1021A0000000000000004000040004009000000057 +:1021B0000188000000040100000000000821000068 +:1021C000000400000000000000000000000000000B +:1021D00000000008000000000000000000000000F7 +:1021E000000001000000000000800000000000006E +:1021F00000000000000000000000000000020000DD +:10220000000000C00000090000020000098800A0D2 +:10221000000000000000000020000000800002001C +:10222000004041840000000000C0800080040000E5 +:10223000008410090084000140C00000000000007C +:102240000084000041000000000000000000400089 +:10225000000040900000000000C0050000000000E9 +:102260000000000040000000008800100000000096 +:10227000000021000000000000000000000000003D +:10228000000000000000000000000000000000004E +:102290000000000000000003000000000000000833 +:1022A0000008000000000000000000000009040019 +:1022B0000000400020002005410000020000002135 +:1022C000000200000000000000000002000000000A +:1022D00000000000000000000000000000000000FE +:1022E00000000000000000000000000040000000AE +:1022F00000000000000000000000000000000000DE +:1023000000000000000000000000000000000000CD +:1023100000000000000000000000000000000000BD +:1023200000000000000000000000000000000000AD +:1023300080000000800080888000C0004101000013 +:10234000000000002100000000000000000000006C +:10235000000000000000000000000000000000007D +:102360000000000000000000000211021102898834 +:10237000000000001100000000000000000000004C +:10238000000000000000000000000000000000004D +:1023900000C008C00090C00800000000000000005D +:1023A00001C00090000808C000000000000000000C +:1023B00000000100880000001010000401900410CB +:1023C000000000000000000000000000000000000D +:1023D00000000000000000000000000000000000FD +:1023E0000000000000000000000000A1000182A128 +:1023F000A0C100000000000000000000000000007C +:1024000000000000000000000000000000000000CC +:1024100000000880808000008000000000000000B4 +:102420000000118000800400000000000000000097 +:10243000000000002000000000008080000041003B +:10244000808000000000000000000000000000008C +:10245000000000000000000000000000000000007C +:10246000000000000000000000000000002000400C +:1024700000200040000000000000000000000000FC +:10248000000000000000000000000000000000004C +:1024900000000000000080808002000000000000BA +:1024A0000000000080418008008380800000000060 +:1024B00000000000000000800000000004022190E5 +:1024C0000882419000010000008000000000000030 +:1024D00000000000000000000000000000000000FC +:1024E00000000000000000000000000000002000CC +:1024F0000000A0002000000000000000000000001C +:1025000000000000000000000000000000000000CB +:10251000000000000000020040C0820010C0000067 +:10252000000000000000400182000040C090000058 +:1025300000000000000000000008000000840021EE +:102540000182009101410000000000040000000031 +:10255000000000000000000000000000000000007B +:10256000000000000000000000000000000000006B +:1025700083008200A1008300000000000000000032 +:10258000000000000000000000000000000000004B +:10259000000000000000000009880010C0840090C6 +:1025A00000000000000000000040A0A0908482C055 +:1025B0000000000000000000000000000401000115 +:1025C000100382042003919000010000000000002D +:1025D00000000000000000000000000000000000FB +:1025E00000000000000000000000000000000000EB +:1025F000000000A1000101A1A0C000000000000037 +:1026000000000000000000000000000000000000CA +:1026100000000000000000000000410000000080F9 +:1026200008000000000000000000008000008000A2 +:10263000888000000000000000000420000300115A +:1026400000088020008080A1828000010500000039 +:10265000000000000000000000000000000000007A +:10266000000000000000000000000000000000006A +:102670000000000000022102022100000000000012 +:10268000000000000000000000000000000000004A +:102690000000000000000000000000008000800436 +:1026A0008080800000000000000000008011001108 +:1026B0008000000000000000000000000000001189 +:1026C0000000000090090821080088200001000097 +:1026D00000000000000000000000000000000000FA +:1026E00000000000000000000000000000000000EA +:1026F0000000000000000002008000000040000018 +:1027000000000000000000000000000000000000C9 +:102710000000000000000000000000000000C000F9 +:10272000C000C002C0000000000000000000C001A6 +:10273000A0C14040000000000000000000000000B8 +:1027400000000000000009091100110091000001C3 +:102750000000000000000000000000000000000079 +:102760000000000000000000000000000000000069 +:102770000000000000000000000100A00082000135 +:102780000000000000000000000000000000000049 +:102790000000000000000000000000000000000039 +:1027A0000000000042004806000000000000000099 +:1027B00000820048070081000000000000000000C7 +:1027C000008200004200000060000048000000811C +:1027D00000000000000000000000000000000000F9 +:1027E00000000000000000000000000000000000E9 +:1027F00000000000000000000000000000000000D9 +:1028000000000000000000000000000000000000C8 +:1028100000000000000000000000000000000000B8 +:1028200000000000000000000000000000000000A8 +:102830000000FF66F0F0FFF03C3C000000000000EC +:1028400000000000000000000000FEBCDA98FFF667 +:102850007E7E00000000000000000000000000007C +:102860000000000000000000000000000000000068 +:102870000000000000000000000000000000000058 +:102880000000000000000000000000000000000048 +:102890000000000000000000000000000000000038 +:1028A0000000000000000000000000000000000028 +:1028B000000000009900F0F00F003C3C0000000018 +:1028C000000000000000000000000000E6A4C2803C +:1028D000FFFF7E7E000000000000000000000000FE +:1028E00000000000000000000000000000000000E8 +:1028F00000000000000000000000000000000000D8 +:10290000000000C300000000000000000000000004 +:1029100000000000000000000000000000000000B7 +:10292000000000000000400840000084200000007B +:102930000000000000000000000000000000000097 +:102940000000000000000000000000000000000087 +:102950000000000000000000000000000000000077 +:102960000000000000000000000000000000000067 +:102970000000000000000000000000000000000057 +:102980000000000000000000000000000000000047 +:102990000000000000000000000000000000000037 +:1029A00000000000FFFFFFFF00000000000000002B +:1029B000000000000000000000FF1E1E0F0F7E7EC2 +:1029C0000000000000000000000000000000000007 +:1029D0001E1E99FFFFFFFFFF000000000000000027 +:1029E00000000000000000000000000000000000E7 +:1029F00000000000000000000000000000000000D7 +:102A000000002222828200004043000000000000FB +:102A100000000000000000000000000000000000B6 +:102A2000000000000000FFFFFFFF000000000000AA +:102A30000000000000000000000000FF1E1E0F0F3D +:102A40004242000000000000000000000000000002 +:102A500000001E1E0066FFFFFFFF000000000000D8 +:102A60000000000000000000000000000000000066 +:102A70000000000000000000000000000000000056 +:102A800000000000222282820000000000000000FE +:102A90000000000000000000000000000000000036 +:102AA00000000000000000000000100630000000E0 +:102AB0000000080000000000000000001061203746 +:102AC000004D0008000000000000000005610A3E03 +:102AD000050D00A000610007C0CD0000000000004F +:102AE00000000000000000000000000000000000E6 +:102AF00000000000000000000000000000000000D6 +:102B000000000000000000610006000D0000000051 +:102B100000000000000000000000000000000000B5 +:102B200000000000000000000000000000000000A5 +:102B30000000000000000000000000000000000095 +:102B40000000000000000000000000000000000085 +:102B50000000B4AAB4FF000000003CFF3CFF0000EE +:102B60000000000000000000000000000000000065 +:102B70000000000000000000000000000000000055 +:102B800000000000000000000000000000400040C5 +:102B90000000000000000000000000000000000035 +:102BA0000000000000000000000000000000000025 +:102BB0000000000000000000000000000000000015 +:102BC0000000000000000000000000000000000005 +:102BD00000000000B400B455080000003CFF3CFFBA +:102BE00000000000000000000000000000000000E5 +:102BF00000000000000000000000000000000000D5 +:102C00000000000000000000000000000000004084 +:102C10000040000000000000000000000000000074 +:102C200000000000000000000000000000000000A4 +:102C30000000000000000000000000000000000094 +:102C40000000000000000000000000000000000084 +:102C50000000000000000000000000000000000074 +:102C60000000000000000000000000000000000064 +:102C70000000000000000000000000000000000054 +:102C80000000000000000000000000002001C4005F +:102C900041823C3C000000000000000000000000F9 +:102CA0000000000000000000000000000000000024 +:102CB0000000000000000000000000000000000014 +:102CC0000000000000000000000000000000000004 +:102CD00000000000000000000000000000000000F4 +:102CE00000141010000000000000000000000000B0 +:102CF00000000000000000000000000000000000D4 +:102D00000000000000000000000000000000555519 +:102D1000D58041823C3C0000000000000000000023 +:102D200000000000000000000000000000000000A3 +:102D30000000000000000000000200000000000091 +:102D40000009000000100000000500000000000065 +:102D5000000000000100000000000420010000004D +:102D6000000000000420000201200100010000001A +:102D70000000000000000000000000000000000053 +:102D80000000000000000000000000000000000043 +:102D90000000000000000000000000000000000033 +:102DA0000000000000000000000000000000000023 +:102DB0000000000000000000000000000000000013 +:102DC00000000000400000000000000000000000C3 +:102DD000000000000000040000000000800104006A +:102DE0000000000000008501000004010400040050 +:102DF0000000000040000000000000000000000093 +:102E000000000000000000000000000000000000C2 +:102E100000000000000000000000000000000000B2 +:102E2000000000000000000000000000000008009A +:102E30000000000000000000000000000000020090 +:102E4000020002000000000000000000020000007C +:102E50000200000000000000040002000400040062 +:102E600004000440040008000800000011000100F4 +:102E700004800400020000000000000000000000C8 +:102E80000000000002000200000008000000000036 +:102E900008000800000000410000000004000000DD +:102EA0000000000000000000000000000000000022 +:102EB0000000000000000000000000000000000012 +:102EC0000000000000000000000000000200000000 +:102ED00000000000000000000000800000008000F2 +:102EE000800080008000800000000000000084005E +:102EF0000400802080008000000000000000000826 +:102F000000000000000000000000000000000008B9 +:102F100000000000000000080000000000008040E9 +:102F200000000000000000000000000000000000A1 +:102F30000000000000000000000000000000000091 +:102F40002000000000000000000000000000000061 +:102F500000000000000000000000000000000080F1 +:102F600000200400000004000400008000000000B5 +:102F70000000000004000400000000000000000049 +:102F80000000000008000000000000000000000039 +:102F90000000000000000000000000000000000031 +:102FA0000000000000000000000000000000000021 +:102FB00000000000000000000000002000000000F1 +:102FC00000200000000000200000009000880000A9 +:102FD00000000000000800000900000000000000E0 +:102FE000022000018000000082008000002000001C +:102FF00000000008008280828000000000000000C5 +:1030000000000000000000000400000000000000BC +:103010000020000000000000000000000000000090 +:1030200000000000000000000000000000000000A0 +:10303000000000000000000000000040000000044C +:103040000000000400000004000000000000000078 +:103050000000000000000000000000000000000070 +:1030600000000020000000000000000000000089B7 +:10307000008200000000000001000080000000004D +:1030800000000100004000000000000000000000FF +:103090000000000000000000000000000000000030 +:1030A0000000000000000000000000000000000020 +:1030B0000000000000000000000000000000000010 +:1030C00000000000004000000000000000000000C0 +:1030D00000000000000000000000000000000000F0 +:1030E00000000000000100000000000000000000DF +:1030F000002000200000000000002000000400006C +:1031000000000000040000000000000000000000BB +:1031100000000000000000000000000000000000AF +:10312000008800880000000000000000000000008F +:10313000000000000000000000000000000000008F +:10314000000000000000000000000000000000007F +:10315000000000000000000000000000000000006F +:1031600000000000000000000080000000000000DF +:1031700000000000900000000000000000001000AF +:103180000008001100200000000000000000000006 +:10319000000000000000000000000000000000002F +:1031A000000000000000008000000000000000009F +:1031B000000000000000000000000000000000000F +:1031C000000004000000000004000902402000008C +:1031D00000000000000000C000000000009000009F +:1031E00000000000000000000008002000C0008473 +:1031F000400404004004000400000000000000003F +:10320000800000000000000100000000000000003D +:1032100000000000000000000800000000000000A6 +:10322000000000000000000000020000000000009C +:10323000000000000000000000000000000000008E +:10324000000000000000000000000000000000007E +:10325000000000000000000000000000000000006E +:103260000000000000000000000000000005000059 +:1032700000000000880900000002000000000100BA +:10328000000000000000000000000000000000003E +:10329000000000000000000000000000000000002E +:1032A000000000000000000000000000000000001E +:1032B000000000000000000000000000000000000E +:1032C0000000000000C0000000000000000000003E +:1032D00000000000000000000000000000000000EE +:1032E00000000000000000000000000000000000DE +:1032F00000000000000000000000000000000000CE +:10330000200000000000000000000000000000009D +:10331000000000000010000000000000000000009D +:10332000000000000000000000000000000000009D +:10333000000000000000000000000000000000008D +:10334000000000000000000000000000000000007D +:10335000000000000000000000000000000000006D +:10336000000000000000000000000000000000C09D +:1033700000900000000000C000900000000000006D +:1033800001C00090000000000000900000840000D8 +:10339000000000000000000000000000000000002D +:1033A000000000000000000000018501C0010000D5 +:1033B000000000000000000000000000000000000D +:1033C00000000000000000000000000000000000FD +:1033D00000000000000000000000000000000000ED +:1033E00000000000000000000000000000000000DD +:1033F00000800080000000000080008000000000CD +:1034000000001180218000000000110080000000F9 +:1034100000000000000000000000000000000000AC +:1034200000000000000000000000004021200020FB +:10343000000000000000000000000000000000008C +:10344000000000000000000000000000000000007C +:10345000000000000000000000000000000000006C +:10346000000000000000000000000000000000005C +:1034700080000000000080008080000000008000CC +:103480008080000300080900800380800000008025 +:1034900000000080000000000000000000000000AC +:1034A00000000000000000000000000000004000DC +:1034B00020000300000000000000000000000000E9 +:1034C00000000000000000000000000000000000FC +:1034D00000000000000000000000000000000000EC +:1034E00000000000000000000000000000000000DC +:1034F00000009000000000008400C0900000000068 +:103500008400C0900000000101008400C090000011 +:103510000020000000C000000000000000000000CB +:10352000000000000000000000000000000000A0FB +:10353000A100A10001000000000000000000000048 +:10354000000000000000000000000000000000007B +:10355000000000000000000000000000000000006B +:10356000000000000000000000000000000000005B +:1035700000000000000000000000009000C00000FB +:103580000000009000C0000000008800009000C013 +:103590000100028888000100000000000000000017 +:1035A000000000000000000000000000000000001B +:1035B0000001010100010001000000000000000006 +:1035C00000000000000000000000000000000000FB +:1035D00000000000000000000000000000000000EB +:1035E00000000000000000000000000000000000DB +:1035F00000000000000000000000000000800080CB +:10360000000000000080008000000000000000803A +:10361000418041008080000009000000000000009F +:10362000000000000000000000000000000000009A +:1036300000000021044000210021000000000000E3 +:10364000000000000000000000000000000000007A +:10365000000000000000000000000000000000006A +:10366000000000000000000000000000000000005A +:103670000000000000040000000080118004000031 +:1036800000008011804000000000000080118405CF +:103690000000000000110000008000000000000099 +:1036A000000000000000000000000000000000001A +:1036B000000000000040000000804000000000000A +:1036C00000000000000000000000000000000000FA +:1036D00000000000000000000000000000000000EA +:1036E00000000000000000000000000000000000DA +:1036F000000000000000000100000000C0012001E7 +:1037000000000000C0012001000000000000C00116 +:103710002000000000000001000000400000000048 +:103720000000000000000000000000000000000099 +:1037300000000000000000A1008400400100000023 +:103740000000000000000000000000000000000079 +:103750000000000000000000000000000000000069 +:103760000000000000000000000000000000000059 +:103770000000000000000042000042000000004283 +:10378000000042000000000A0000420000000000AB +:10379000000A00E042000000000000000700822153 +:1037A0000000000000000000000000000000000019 +:1037B0000000000000000000000000000000000009 +:1037C000000A0000070000000000000000000000E8 +:1037D00000000000000000000000000000000000E9 +:1037E00000000000000000000000000000000000D9 +:1037F00000000000000000000000000000000000C9 +:10380000000000FF000000FF000000FF000000FFBC +:103810000000000000FF000000FF00000000F0F0CA +:103820000000000000000000000000000000000098 +:103830000000000000000000000000000000000088 +:103840000000000000000000000000000000000078 +:103850000000000000000000000000000000000068 +:103860000000000000000000000000000000000058 +:103870000000000000000000000000000000000048 +:103880000000000000FF000000FF000000FF00003B +:1038900000FF0000000000FF000000FF000000002B +:1038A000F0F0000000000000000000000000000038 +:1038B0000000000000000000000000000000000008 +:1038C00000000000000000000000000000000000F8 +:1038D00000000000000000000000000000000000E8 +:1038E00000000000000000000000000000000000D8 +:1038F00000000000000000000000000000000000C8 +:10390000FFFF0000FF000000FF000000FF000000BC +:10391000FF0000000000FF000000FF0000000000AA +:103920000F0F0000FFFF000000000000000000007B +:103930000000000000000000000000000000000087 +:10394000000000F000F00000000000000000000097 +:103950000000000000000000000000000000000067 +:103960000000000000000000000000000000000057 +:103970000000000000000000000000000000000047 +:103980000000FFFF0000FF000000FF000000FF003C +:103990000000FF0000000000FF000000FF0000002A +:1039A00000000F0F000000000000000000000000F9 +:1039B0000000000000000000000000000000000007 +:1039C00000000000AAAAAAAA00000000000000004F +:1039D00000000000000000000000000000000000E7 +:1039E00000000000000000000000000000000000D7 +:1039F00000000000000000000000000000000000C7 +:103A000000000038000010C0038203380C0092C090 +:103A1000038203380C0092C0000003C2033E0C0C6A +:103A20008AC005002A00054000A800000000000030 +:103A30000000000000000000000000000000000086 +:103A4000000000610006000D0000050000200000DD +:103A50000000000000000000000000000000000066 +:103A60000000000000000000000000000000000056 +:103A70000000000000000000000000000000000046 +:103A80000000000000000000000000000000000036 +:103A90000000000000000000000000000000FF0027 +:103AA000FFFF000000000000000000000000000018 +:103AB0000000000000000000000000000000000006 +:103AC0000000000041414141040E545E000000002E +:103AD00000000000000000000000000000000000E6 +:103AE00000000000000000000000000000000000D6 +:103AF00000000000000000000000000000000000C6 +:103B000000000000000000000000000000000000B5 +:103B100000000000000000000000000000000000A5 +:103B2000FF00000000000000000000000000000096 +:103B30000000000000000000000000000000000085 +:103B40000000000000004141414100000000000071 +:103B50000000000000000000000000000000000065 +:103B60000000000000000000000000000000000055 +:103B70000000000000000000000000000000000045 +:103B80000000000000000000000000000000000035 +:103B90000000000000000000000000000000000025 +:103BA00000000000F0F00000000000000000000035 +:103BB0000000000000000000000000000000000005 +:103BC0000000000000000000A5F5A0000F0F0F0F7F +:103BD00000000000000000000000000000000000E5 +:103BE00000000000000000000000000000000000D5 +:103BF00000000000000000000000000000000000C5 +:103C000000000000000000000000000000000000B4 +:103C100000000000000000000000000000000000A4 +:103C2000000000000000F0F00000000000000000B4 +:103C30000000000000000000000000000000000084 +:103C400000000000000000000000A5F5A000FF0F2C +:103C50000F0F000000000000000000000000000046 +:103C60000000000000000000000000000000000054 +:103C70004000000000000000000000000000000004 +:103C80000400000000000000000000000000000030 +:103C90000000000000000000000000000000000024 +:103CA0000000000300000000000000000000000011 +:103CB00000000000000000050005000000000000FA +:103CC00000000000000000000000000000000000F4 +:103CD00000000000000000000000000000000000E4 +:103CE00000000000000000000000000000000000D4 +:103CF0000000000000000000000000900000000034 +:103D000000008000000000400000000000000000F3 +:103D100000000000000000000000000000000000A3 +:103D20000000000000000000000000000000000093 +:103D30000000000040000000000000000000000043 +:103D40000000000000000000000000000000000073 +:103D50000000000000000000000000000000000063 +:103D60000000000000000000000000000000020051 +:103D70000200020002000200000002000000000039 +:103D80000400000002000000000000000000080025 +:103D90000000000000000000820090009000004041 +:103DA0000000000000000000000000000000000013 +:103DB00000000400000000000000000000000000FF +:103DC00000000000000002000000000000000000F1 +:103DD00000000000000004000000000000000000DF +:103DE00000000000000000000000000000000000D3 +:103DF00000000000000000000000000000000000C3 +:103E000000000000000000000000000000000000B2 +:103E100000000000000000000000000000000000A2 +:103E20000001000000000000000000000000000091 +:103E30000000000000000000000000000000000082 +:103E40000000000000000000000000000000000072 +:103E50000000000000000000000000000000000062 +:103E60000000000000000000000000000000000052 +:103E70000000020000000000000090004000000070 +:103E800040000400000000000400000004000400E2 +:103E9000040084000000000008000000000004008E +:103EA00000000000900088000000000000000000FA +:103EB00000000000100000000000000000001000E2 +:103EC00000000200000000000000000000000041AF +:103ED00000410000000000000000000000000000A1 +:103EE00000000000000000000000000000000000D2 +:103EF00000000000000000000000000000000000C2 +:103F00000000000000880020000000000000000009 +:103F100000000000000000000000000000000000A1 +:103F20000000000000000000000000000000000091 +:103F30000000000000000000000000000000000081 +:103F400000000000800000000000000000000000F1 +:103F50000000000000000000000000000000000061 +:103F60000000000000000000000000000000000051 +:103F700000000000000000410000000000040000FC +:103F800000000000000000000000004000000000F1 +:103F9000000000000000000000000000000000041D +:103FA00000000000010000400000000009000000C7 +:103FB0000000000000000000000000000000000001 +:103FC00000000021000000000000000000000000D0 +:103FD00000000000000000000000000000000000E1 +:103FE00000000000000000000000000000000000D1 +:103FF00000000000000020000000000000000000A1 +:1040000000000000000000000000000000000000B0 +:1040100000000000000000000000000000000000A0 +:104020000000000000000400000000000000040088 +:104030000000000000000000000000000000000080 +:104040000000000000000000000000000000000070 +:1040500000000000000000C00000000000000000A0 +:104060000000000000000000000000000000000050 +:104070000000000000000000000000000000000040 +:104080000000000000000000000000000000000030 +:104090000000000000000000000000000000000020 +:1040A00000000000000000200000000000000020D0 +:1040B0000000000000000000000000000000000000 +:1040C000000082000000000000000000000000006E +:1040D00000000000000000000000000000000000E0 +:1040E00000000000000000000000000000000000D0 +:1040F00000000000000000000000000000000000C0 +:1041000000000000040000000000000000000400A7 +:10411000000000200000000010000000000000006F +:1041200000001000000000000001000000840000FA +:10413000000100C00000000000000084000000003A +:1041400002000000008400000000000000000000E9 +:10415000000000000000000000000000000000005F +:10416000000000000000000000000000000000004F +:10417000000000000000000000000000000000003F +:10418000000000000000000000000000000000002F +:10419000000000000000000000000000000000001F +:1041A000000000000000010000000000000000000E +:1041B00000000000000000000009000000000000F6 +:1041C00000000000000200000000000000000002EB +:1041D00000000000000000000000000000000000DF +:1041E00000000000000000000000000000000000CF +:1041F00000000000000000000000000000000000BF +:1042000000000900000000000000000000000000A5 +:10421000000000000000000000000000000000009E +:10422000200000000000000002000000000000006C +:10423000000000000000004000000000000000003E +:10424000000000000000000000000000000000006E +:10425000000000000000000000000000000000005E +:10426000000000000000000000000000000000004E +:10427000000000000000000000000000000000003E +:10428000000000000000000000000000000000002E +:10429000000000000000000000000000000000001E +:1042A000000000000000000000000000900000007E +:1042B00000880000900000000000000000000000E6 +:1042C000000000000000000000000000009000025C +:1042D00000020000000000000000000000000000DC +:1042E00000000000000000000000000000000000CE +:1042F00000000000000000000000000000000000BE +:1043000000000000000000000000000000000000AD +:104310000000000008000000000000000000000095 +:1043200000000000000000000000000011008000FC +:1043300000000000110080000000000000000000EC +:1043400000000000000000000000000000000080ED +:10435000000000000000000000000000000000005D +:10436000000000000000000000000000000000004D +:10437000000000000000000000000000000000003D +:10438000000000000000000000000000000000002D +:10439000000000000000000000000000800000009D +:1043A000000000000000000000000000000000000D +:1043B00000800000008000000080000000800000FD +:1043C00000000000000000000000000000000000ED +:1043D000000000410000000000000000000000009C +:1043E00000000000000000000000000000000000CD +:1043F00000000000000000000000000000000000BD +:1044000000000000000000000000000000000000AC +:104410000000000000000000000088000000900084 +:10442000000000000000000000000000000000008C +:1044300000000020000000C000000020000000C0BC +:10444000000000000000000000000000000000006C +:1044500000000000008500020000000000000000D5 +:10446000000000000000000000000000000000004C +:10447000000000000000000000000000000000003C +:10448000000000000000000000000000000000002C +:10449000000000000000000000000000000000001C +:1044A000000000000000000000000000000000000C +:1044B0000000010000888800010085000088880055 +:1044C00001000000000000000000000000000000EB +:1044D00000000000C000000000008200000000009A +:1044E00000000000000000000000000000000000CC +:1044F00000000000000000000000000000000000BC +:1045000000000000000000000000000000000000AB +:10451000000000000000000000000000000000009B +:10452000000000000000000000000000000000008B +:1045300000000000410000800000090041000080F0 +:104540000000090000000000000000000000000062 +:1045500000000000000000000000000080000000DB +:10456000000000000000000000000000000000004B +:10457000000000000000000000000000000000003B +:10458000000000000000000000000000000000002B +:10459000000000000000000000000000000000001B +:1045A000000000000000000000000000000000000B +:1045B0000000000000000011000000800000001159 +:1045C000000000800000000000000000000000006B +:1045D000000000000000000000000010000080004B +:1045E00000000000000000000000000000000000CB +:1045F00000000000000000000000000000000000BB +:1046000000000000000000000000000000000000AA +:10461000000000000000000000000000000000009A +:10462000000000000000000000000000000000008A +:104630000000000000000000000100000040000039 +:104640000001000000400000000000000000000029 +:1046500000000000000000000000C0000800020090 +:1046600082000000000000000000000000000000C8 +:10467000000000000000000000000000000000003A +:10468000000000000000000000000000000000002A +:10469000000000000000000000000000000000001A +:1046A00000000041000007000000000000000000C2 +:1046B00000000000000000000000000000000700F3 +:1046C000822100000000070082210000000000009D +:1046D000000000000000000000000000410000E0B9 +:1046E000000060000000000000000000000000006A +:1046F00000000000000000000000000000000000BA +:1047000000000000000000000000000000000000A9 +:104710000000000000000000000000000000000099 +:104720000000000000000000000000000000000089 +:104730000000000000000000000000000000000079 +:104740000000F0F0000000000000F0F000000000A9 +:104750000000000000000000000000000000FFFF5B +:10476000898100000000000000000000000000003F +:104770000000000000000000000000000000000039 :104780000000000000000000000000000000000029 :104790000000000000000000000000000000000019 -:1047A00000000000000000000000000000001D608C -:1047B00000003FFF30F0FF0003FCF00F3333000038 -:1047C00000000000000000000000000000000000E9 +:1047A0000000000000000000000000000000000009 +:1047B00000000000000000000000000000000000F9 +:1047C00000000000F0F0000000000000F0F0000029 :1047D00000000000000000000000000000000000D9 -:1047E00000000000000000000000000000000000C9 +:1047E000FFFF0901000000000000000000000000C1 :1047F00000000000000000000000000000000000B9 :1048000000000000000000000000000000000000A8 :104810000000000000000000000000000000000098 @@ -197817,32 +197817,32 @@ :104870000000000000000000000000000000000038 :104880000000000000000000000000000000000028 :104890000000000000000000000000000000000018 -:1048A0000000000000000000000000000000EFDF3A -:1048B000EFDF24813C3C33C33A530F0F33CCF0F08D -:1048C0000F0F0000000000000000000000000000CA +:1048A00000000000000000000000000000000F0FEA +:1048B000FFFF0000000000000000000000000000FA +:1048C00000003C3C0000FFFF0000FFFF0000FFFF76 :1048D00000000000000000000000000000000000D8 -:1048E00000000000000000000000000000000000C8 +:1048E00000000000FFFFFFFF0000000000000000CC :1048F00000000000000000000000000000000000B8 :1049000000000000000000000000000000000000A7 :104910000000000000000000000000000000000097 :104920000000000000000000000000000000000087 -:10493000000000003C3CDB7E353CCCACF00F3C3C46 -:10494000F0F0F0F0000000000000000000000000A7 +:104930000F0FFFFF0000000000000000000000005B +:10494000000000003C3C00000000000000000000EF :104950000000000000000000000000000000000057 -:104960000000000000000000000000000000000047 +:10496000000000000000666666F60000000000001F :104970000000000000000000000000000000000037 :104980000000000000000000000000000000000027 :104990000000000000000000000000000000000017 :1049A0000000000000000000000000000000000007 -:1049B0000038000010C003E1033DCC0910C0030221 -:1049C000033800008200000000000000000000002A -:1049D000000000000000000000610006000D000063 -:1049E00000000000000000000000000000000000C7 +:1049B00000300000000000000000000000000000C7 +:1049C00000000000000005002A00054000A80500C6 +:1049D0002A00054000A800000000000000000000C0 +:1049E000000000000000000000613006C00D000063 :1049F00000000000000000000000000000000000B7 :104A000000000000000000000000000000000000A6 :104A10000000000000000000000000000000000096 :104A20000000000000000000000000000000000086 -:104A300000000000000000000030F0FCF61209ED5C +:104A30000000000000000000000000000000000076 :104A40000000000000000000000000000000000066 :104A50000000000000000000000000000000000056 :104A60000000000000000000000000000000000046 @@ -197850,370 +197850,370 @@ :104A80000000000000000000000000000000000026 :104A90000000000000000000000000000000000016 :104AA0000000000000000000000000000000000006 -:104AB00000000000000000000000CF0F030009ED1F -:104AC000F6120000000000000000000000000000DE +:104AB00000000000000000000000000000000000F6 +:104AC00000000000000000000000000000000000E6 :104AD00000000000000000000000000000000000D6 :104AE00000000000000000000000000000000000C6 :104AF00000000000000000000000000000000000B6 :104B000000000000000000000000000000000000A5 :104B10000000000000000000000000000000000095 :104B20000000000000000000000000000000000085 -:104B3000000000000000000000000000A3A3CAEE77 -:104B4000FFFFF0FF00000000000000000000000078 -:104B50000000000000000000000000000000393CE0 -:104B60003C3C0000000000000000000000000000CD +:104B30000000000000000000000000000000000075 +:104B40000000000000000000000000000000000065 +:104B50000000000000000000000000000000000055 +:104B60000000000000000000000000000000000045 :104B70000000000000000000000000000000000035 :104B80000000000000000000000000000000000025 :104B90000000000000000000000000000000000015 :104BA0000000000000000000000000000000000005 -:104BB0000000000000000000000000000000A31141 -:104BC000EF65AA00AA00000000000000000000003D +:104BB00000000000000000000000000000000000F5 +:104BC00000000000000000000000000000000000E5 :104BD00000000000000000000000000000000000D5 -:104BE0003C3C3C3C000000000000000000000000D5 +:104BE00000000000000000000000000000000000C5 :104BF00000000000000000000000000000000000B5 :104C000000000000000000000000000000000000A4 :104C10000000000000000000000000000000000094 -:104C20000000C000000000000000000000000000C4 -:104C30000000000000000000100000000000000064 -:104C40000000200000000000000000000000000044 -:104C500000000000000000000000000084000000D0 -:104C600000000000A000A000840000000000000080 -:104C700000000000000000001000C0000000200044 -:104C80000000000000000000200000000000000004 -:104C900000000000000000000000000000002000F4 -:104CA0000000000000000000000040004000400044 +:104C20000000000000000000000000000000000084 +:104C30000000000000000000000000000000000074 +:104C40000000000000000000000000000000000064 +:104C500000000000000000000000018000000004CF +:104C600000010000000000800004000000000000BF +:104C70000000000000000000000000000000000034 +:104C80000000000000000000000000000000000024 +:104C90000000000000000000000000000000000014 +:104CA00000000000000000000000000000004000C4 :104CB00000000000000000000000000000000000F4 -:104CC0000000000000000000000040000000400064 -:104CD00000000000000000000020000000000000B4 -:104CE00000000000002000000000000000000000A4 +:104CC00000000000000000000002000000000000E2 +:104CD00000000000000000000000000008020000CA +:104CE00000010000000000000004000100000000BE :104CF00000000000000000000000000000000000B4 :104D000000000000000000000000000000000000A3 -:104D10000000000000000000002000004000000033 -:104D20000000000000000000000000000000000083 -:104D30000000000000000000000000000000000073 -:104D40000000000000000100000000000000000062 -:104D50000000000000000000000000100000000043 -:104D6000000000100003010000000000000000002F -:104D700040000200000000000002000000000000EF -:104D800000000000000000C000800000000008409B -:104D9000010400000100020000000000000000000B -:104DA00020800000008000000000000000000000E3 -:104DB00000000000000000000000000000000000F3 -:104DC00000000000000000004000000000000000A3 -:104DD00000000000000010000000000000000000C3 -:104DE00000000000000000002000000000000000A3 -:104DF0000000800000000000008400850084008422 -:104E00000000000000000000002000200000000062 -:104E10000000200100002000000000000000000051 -:104E200000008004000000040000000000000000FA -:104E30000000000000000000000000000000000072 -:104E40000000000000000000010000000000000061 -:104E50000000000000000000002100210000000010 -:104E600000400000000000040000000400040000F6 -:104E700000210000000000000000002000000000F1 -:104E800000050000004000000005000300050021AF -:104E900000050020000900000000000000000003E1 -:104EA00000000000000400000005000000000000F9 +:104D10000000000000000000000000000000000093 +:104D20000000000000000000000000001000020071 +:104D30000208100002000000000000000000000057 +:104D4000000000000000000000000000080000005B +:104D5000000000000400000000000000000000004F +:104D600000400000000000002000100020000000B3 +:104D7000000000000000040004000000000000002B +:104D80000000000000000000000000000000000023 +:104D90000000000000000000000000000000000013 +:104DA0000000000000000000000000000000800083 +:104DB0000000000180000000000000000000000072 +:104DC00000000000000000000000000000000000E3 +:104DD00000000000000000000000000000000000D3 +:104DE00000000001000000000000800000008000C2 +:104DF0000000000000000000004000000000000073 +:104E0000000000000000000000000000000800009A +:104E10000000000000000000000000000000000092 +:104E20000000000000000000000000000000000082 +:104E30000000000000000000000000004000000032 +:104E40000000000000000000000000000000000062 +:104E50000000004000000000000000000000000012 +:104E60000800400020008200000020000000000038 +:104E70000000000000000000000000000000000032 +:104E80000000000000000000000000000000000022 +:104E90000000000000000000000000000000000012 +:104EA0000000000000000000000000000000000002 :104EB00000000000000000000000000000000000F2 -:104EC0000000000000000000000040A000A0000062 -:104ED00000000000008200000000000000A00000B0 -:104EE00000000000000000000000000000010001C0 -:104EF00000000000000000000000000000010000B1 -:104F000000000000000000000000000000000000A1 -:104F10000000000000010000000000000000000090 -:104F20000000000000000001000000000000000080 -:104F30000000000000000000000000000000000071 -:104F4000000000000000000000000000001000044D -:104F500000004004000300100000400200000000B8 -:104F600000008200000000000000000000000000BF -:104F70000004000000040000001000000000000019 -:104F800000000000004000000000000000000200DF -:104F90000200028002000000A0C000002180C000CA -:104FA0000000820082000000018000000004000078 -:104FB00000000000000000000000000000000000F1 -:104FC00000000000000000000000000000000001E0 -:104FD000000100008001000000010000000100004D -:104FE00000000000000000000000000003000000BE -:104FF00000000009050000010000000100000000A1 -:10500000000000000082008400000000000000009A -:1050100080008800802080000000002000008204C2 -:105020000000000000000000000020040000030158 +:104EC00000000000000000000000400000000000A2 +:104ED00000000000000000000000000000000000D2 +:104EE0000000800000008000000000008000000042 +:104EF00000000000000000000000000000000000B2 +:104F00000000000000000010000000000000000091 +:104F10000000000000000000000000000000000091 +:104F20000000000000000000000000000000000081 +:104F300000000000004000080000014000040000E4 +:104F4000000400000000000000000000000000005D +:104F500000000000004000000000C1000040000010 +:104F60000000000000110000000400040000000028 +:104F70000000000400000000000000000000000429 +:104F800000000000000000000010004100000000D0 +:104F90000000000000000000000000000000000011 +:104FA0000000000000000000000000000000000001 +:104FB00000000000000000000001000020000000D0 +:104FC00000000000000000000000000000000000E1 +:104FD00000000000000000010000000004002000AC +:104FE00000000000000000000000000000000000C1 +:104FF00000000000000100000000000000000000B0 +:1050000000000000000000000000000000000000A0 +:105010000000000000000000004000000000000050 +:105020000000000000000000000000000000000080 :105030000000000000000000000000000000000070 :105040000000000000000000000000000000000060 -:1050500000800000914100000021000400000000D9 -:1050600000210021000300080000000300000000F0 -:10507000000040880080400041800000C0008400A3 -:1050800000000000000000000000002100080200F5 -:105090000008200008000800000000002021000097 -:1050A0000004C021A0000000000508000005400029 -:1050B00020000000000000000000000000000000D0 -:1050C00000000000000000000000000000000000E0 -:1050D0000000020221A040820084000000040000C1 -:1050E00000A000000000000000000000020000001E -:1050F0000000000040040004000420040000000040 -:10510000000000000000000000000000000000009F -:10511000000000000000000000000000000080000F -:10512000000000010000000000000000000000007E -:1051300000008000000000000000000000000000EF -:1051400000000000000000000000000000008800D7 -:1051500000000000000088000000000000000000C7 -:1051600000200021000800080008002100000000C5 -:10517000000082000000000000800000000000002D -:1051800000210000000000000020000000200000BE -:1051900000210000000800000800000000200003BB -:1051A0002004000000218200820000000005C000F1 -:1051B0002000000082040000000000000000000049 +:10505000040000000000000000000000002000002C +:10506000000000000000000000000100200000001F +:1050700000000000002020040004000000000000E8 +:105080000000000000000000000000000000000020 +:105090000000000000000000000000000000000010 +:1050A0000000000000000000000000000000000000 +:1050B0000000000000000000000000880000000068 +:1050C00000000000000000000000000000A0000040 +:1050D00000000000000000000000000000000001CF +:1050E0000000000800000000008400000884800028 +:1050F00000840000000000008001000100000000AA +:10510000000000000000000000900000000000000F +:10511000000000000000000000000000000000008F +:10512000000000000000000000000000000000007F +:10513000000000000000000000000000000000006F +:10514000000000000000000000000000000000005F +:10515000000000000000000000000000000000004F +:10516000000000000000000000000000000000003F +:105170000000000200000004000400000002000023 +:10518000000000000000000000000000000000001F +:10519000000000000000000000000000000000000F +:1051A00000000000000000000000000000000000FF +:1051B00000000000000000000000000000000000EF :1051C00000000000000000000000000000000000DF :1051D00000000000000000000000000000000000CF -:1051E00000000001000000000000000000000000BE -:1051F000000000000000000000000010000000009F -:10520000000000000000000000000001000000019C -:10521000000000000000000000000000000000018D -:1052200000008001000000000000000000000000FD -:1052300000008000000000010000000000000000ED -:10524000000000000000000000000000000000005E -:1052500000000000000000000001030082000000C8 -:10526000080888904088829000000000000000003C -:105270000000000000000000000000A000A00108E5 -:10528000001000A0080200820002000200020002DA -:1052900002090000000000000000100800080002E1 -:1052A000101000894010880000020000000000007B -:1052B0000000010240080085000800000000000016 -:1052C00000000000000000000000000000000000DE -:1052D00000000000000000000000004003049104F2 -:1052E0000009880005008080808000000000000028 -:1052F0000000000000000000000000000080000826 -:105300001008004000808080008300080000000337 -:1053100000200090000000000000000000800080DD -:1053200000008080000880881100008900000000D3 -:1053300000000000419005A11185008300000000DD -:10534000000000000000000000000000000000005D -:1053500000000000000000000000000011004010EC -:1053600002804003800080000008800000000000F0 -:105370000000000000000000000000000000080025 -:10538000080000000800000000000000001000807D -:1053900000110000802000000000000000008000DC -:1053A0008091000080800080118800090383000044 -:1053B0000000000000000380080005080903000049 -:1053C00000000000000000000000000000000000DD +:1051E0000000000000000000000000000088000037 +:1051F00000000000000000000201000100000000AB +:10520000000000000000000000000000000000009E +:10521000000000000000000000000000000000008E +:10522000000000000000000000000000000000007E +:10523000000000000000000000000000000000006E +:10524000010000000000000000000000000000005D +:10525000000000000000000000000000000000004E +:1052600000009000000000A000000000000000000E +:1052700000A0100800900040000001002000000085 +:10528000000000000000000000000000000000001E +:10529000000000000000000000000000000000000E +:1052A00000000000000000000000000000000000FE +:1052B00000000000000000000000000000000000EE +:1052C00000001100002100000000000000000000AC +:1052D00000000000000000000000000000000000CE +:1052E000000011008000000000000000000000002D +:1052F0000000008080000880000000001100800095 +:105300000800000000000000000000000000000095 +:10531000000000000000000000000000000000008D +:10532000000000000000000000000000000000007D +:10533000000000000000000000000000000000006D +:105340000000000000200000110400000000000028 +:10535000000000000000000000000000000000004D +:10536000000000000000008000000080000000003D +:105370000000000009800910118303C00003001021 +:1053800000000041000000000000000000000000DC +:10539000000000000000000000000000000000000D +:1053A00000000000000000000000000000000000FD +:1053B00000000000000000000000000000000000ED +:1053C00000000000000000010000010100000000DA :1053D00000000000000000000000000000000000CD -:1053E0000100000801A1080010008800080000006A -:1053F00000000000000000000000000000000000AD -:1054000008A0890000000800001000000000000053 -:10541000000202000002080000000000000000007E -:10542000080010C01010080800020011000100035D -:10543000000000000000000000040008010000411E -:10544000000000000000000000000000000000005C +:1053E00000000000000000000020000000C00000DD +:1053F00000000000000000A00001018501880000FD +:10540000000100000001000000000000000000009A +:10541000000000000000000000000000000000008C +:10542000000000000000000000000000000000007C +:10543000000000000000000000000000000000006C +:10544000000000000000000000002000000101003A :10545000000000000000000000000000000000004C -:105460000001000010010101881000090008A008D7 -:10547000000000000000000000000000000000002C -:10548000000002000100A00111010800000000005E -:10549000200040020002101002080000000000007E -:1054A00000001008000802020808011001908401A1 -:1054B00002910000000000000000C0010100000196 -:1054C000910000000000000000000000000000004B -:1054D00000000000000000000000000000000000CC -:1054E0000000000400218021114000830090008909 -:1054F000009100000000000000000000000000001B -:105500000000000000414008A02011080000000039 -:10551000200000008000000080800080000000006B -:1055200000000000808000800000808008831185DA -:1055300083218390000000000000000080080340E9 -:105540001121890800000000000000000000000098 +:10546000000000000000000001000088880001002A +:105470000000000000000000080000009000900004 +:1054800000000000C000000000000000000000005C +:10549000000000000000000000000000000000000C +:1054A00000000000000000000000000000000000FC +:1054B00000000000000000000000000000000000EC +:1054C0000000000000000000000000008000000854 +:1054D00002000000000000000000000000000000CA +:1054E00000000000000000000000410000800000FB +:1054F0000900000000000000000080000000000023 +:10550000A100000003008000000021000300000053 +:10551000000000000000000000000000000000008B +:10552000000000000000000000000000000000007B +:10553000000000000000000000000000000000006B +:105540000000000000000000000000000004110046 :10555000000000000000000000000000000000004B -:105560000000000002210400A0004009000200A188 -:10557000808000000000000000000000000000002B -:10558000000000000000080088A00380A111032192 -:105590001000C1000900A102910811802000000044 -:1055A000000000000000800080880000800083214F -:1055B000A18890000003000000000000000008A186 -:1055C0002111000008110000000000000000000090 -:1055D00000000000000000000000000000000000CB -:1055E00000000000000002018900850009000000A1 -:1055F0008208100888000000000000000000000081 -:1056000000000000000000000800829001840501F5 -:105610008801210002000000410020020310020066 -:105620000000000000000000080008080202080056 -:10563000100990900300020000000000000000002C -:1056400001C1000100000001000000000000000096 -:10565000000000000000000000000000000000004A -:105660000000000000000000840000C800000000EE -:1056700000110000430000000000000000000000D6 -:1056800000000000000000000000480000C800000A -:105690000000000000000000000000420000430085 -:1056A00000000000000000000000000600004300B1 -:1056B0004800418200C843000000000000000000D4 -:1056C0000000820000C8000081000000000000000F +:10556000000000000000000000000000001100002A +:10557000008000000000000000000000C1082100C1 +:10558000A100111100000020001100000000000027 +:10559000000000000000000000000000000000000B +:1055A00000000000000000000000000000000000FB +:1055B00000000000000000000000000000000000EB +:1055C00000000000000000000000000000000001DA +:1055D00001000000000000000000000000000000CA +:1055E00000000000000000000000000000000001BA +:1055F0000000004000000000000000000000C100AA +:1056000020001100910000000000000100000000D7 +:10561000000000000000000000000000000000008A +:10562000000000000000000000000000000000007A +:10563000000000000000000000000000000000006A +:10564000000000000000000000000000000000005A +:10565000000000E00000000000000000000000006A +:10566000000000000000000000000000000000003A +:105670000000000007008221000000000000000080 +:105680008400004800000000000081000048000085 +:105690008281000000000000000000000000000007 +:1056A00000000000000000000000000000000000FA +:1056B00000000000000000000000000000000000EA +:1056C00000000000000000000000000000000000DA :1056D00000000000000000000000000000000000CA -:1056E00000000000000000000000FF17001700008D -:1056F0000000C0FCC0FC00FF00FF00000000000034 -:1057000000000000000000000000000000FF3C3C22 -:1057100000000000F000F0FF0000000070108F8F0C -:10572000CFF0CCF00000000000000000B0B0F0F0BE -:10573000FCCF3CFF3CC33CC33C3C33330000000087 +:1056E00000000000000000000000000000000000BA +:1056F000000000000000F0F00000000000000000CA +:105700000000FFDF000000000000000000000000BB +:105710000000000000000000000000000000000089 +:105720000000000000000000000000000000000079 +:105730000000000000000000000000000000000069 :105740000000000000000000000000000000000059 :105750000000000000000000000000000000000049 -:10576000000000000000000000000000FFD73C1413 -:1057700000000000C0FCC0FC003C00FE0000000077 -:10578000000000000000000000000000000000FF1A -:105790003C3C00000000F000F0FF00000000FCF4C2 -:1057A0000202300F330F0000000000000000B0B014 -:1057B000B0F0003843203CCC33CC3C3C33330000C9 +:105760000000000000000000000000000000000039 +:105770000000000000000000F0F000000000000049 +:1057800000000000FFFF0300000000000000000018 +:105790000000000000000000000000000000000009 +:1057A00000000000000000000000000000000000F9 +:1057B00000000000000000000000000000000000E9 :1057C00000000000000000000000000000000000D9 :1057D00000000000000000000000000000000000C9 :1057E00000000000000000000000000000000000B9 -:1057F00000000000000000C3AAF00F840FF00000BA +:1057F00000000000000000003C3C0000FFFF000033 :105800000000000000000000000000000000000098 -:10581000010BA1ABA6A6AAAAC3F0C3F0000000002A -:1058200066CC66CC0F0FAFAF000000000000000098 -:1058300055545616C3C669E3C3BE3C41555555552C -:10584000000000000000000014294588000000004E +:105810000000000000000000000000000000000088 +:105820000000000000000000000000000000000078 +:105830000000000000000000000000000000000068 +:105840000000000000000000000000000000000058 :105850000000000000000000000000000000000048 :105860000000000000000000000000000000000038 -:105870000000000000000000FFC3AAF00F0F0F049B -:105880000000000000000000000000000000000018 -:105890000000515BF1FBAAAAAAAAAA00AAFF000075 -:1058A00000003366664EF0F050500000000000002B -:1058B0000000545616163C39961CC3BE3C41555543 -:1058C00055550000000000000000966957A8000030 -:1058D00000000000000000000000000000000000C8 +:10587000000000000000000000003C3C00000000B0 +:1058800000000000000000002000000000000000F8 +:105890000000000000000000000000000000000008 +:1058A00000000000000000000000000000000000F8 +:1058B00000000000000000000000000000000000E8 +:1058C00000000000000000000000000000000000D8 +:1058D0000000000000000000000000000006000CB6 :1058E00000000000000000000000000000000000B8 -:1058F000000000610005C00900008061003E000D4D -:105900000000000000000000000000000000000097 -:105910000000000000610001C009000000610006F5 -:10592000000D00000061003E000D000000000000BE -:1059300000000000430083380C2010C24361833D07 -:10594000C0090000000000000000000000613005F8 -:10595000C00900000000000000000000000000007E -:105960000000000000000000000000000000000037 -:10597000000000003C3C303C303C417D0000000019 -:1059800010D330F300000000000000000000000011 -:1059900000000000000050C0000000000CFC00AA45 -:1059A0004B4B000000005D49DFCB00000000000011 -:1059B000000000000000000000000000000050F0A7 -:1059C0005050ACA0000000000000000000000000EB -:1059D0005555C0C0C3C0000000000000000000001A -:1059E00000000000000000000000000000000000B7 -:1059F0000000000000003C3C3C303C3C303C0000DF -:105A0000000000C320E300000000000000000000D0 -:105A1000000000000000000050C0000000000CFC6E -:105A200055FF4B4B000000001C089E8A0000000040 +:1058F0000000000000000000000005002A00054034 +:1059000000A80000000000000000A0610007800D5A +:105910000000000000610007800D00000000000092 +:105920000000000000000000000000000000000077 +:105930000000000000000000000000000000000067 +:105940000000000000000000000000000000000057 +:105950000000000000000000000000000000FF0048 +:1059600000FF000000000000000000000000000038 +:105970000000000000000000000000000000000027 +:105980000000000000000000000000000400030010 +:105990000000000000000000000000000000000007 +:1059A00000000000000000000000000000000000F7 +:1059B00000000000000000000000000000000000E7 +:1059C00000000000000000000000000000000000D7 +:1059D00000000000000000000000000000000000C7 +:1059E000FF0000FF000000000000000000000000B9 +:1059F00000000000000000000000000000000000A7 +:105A00000000000000000000000000000000000096 +:105A10000000000000000000000000000000000086 +:105A20000000000000000000000000000000000076 :105A30000000000000000000000000000000000066 -:105A400000A00000ACA0000000000000000000006A -:105A50000000003C00000300000000000000000007 -:105A60000000000000000000000000000000000036 -:105A70000000000000000000FF3F00C001FE00FF2A +:105A40000000000000000000000000000000000056 +:105A50000000000000000000000000000000000046 +:105A60000000FF0000FF0000000000000000000038 +:105A70000000000000000000000000000000000026 :105A80000000000000000000000000000000000016 -:105A90000000000000000000000000000000AAAAB2 -:105AA0009A9AC3C3C3C300000000C3F0C3F0000050 +:105A90000000000001000000000000000000000005 +:105AA00000000000000000000000000000000000F6 :105AB00000000000000000000000000000000000E6 -:105AC00000007D558255A5A5A5A500000000000099 -:105AD0000000AAAAAAAA853975C900000000000022 -:105AE00000000000000000000000000000000000B6 -:105AF00000000000000000000000FF3F00C001FEA9 -:105B000000FF000000000000000000000000000096 -:105B10000000000000000000000000005C005C00CD -:105B2000AAAA9A9AF0F0F0F000000000C3F0C3F0C7 +:105AC00000000000000000000000000000000000D6 +:105AD00000000000000000000000000000000000C6 +:105AE00000000000FF0000FF0000000000000000B8 +:105AF00000000000000000000000000000000000A6 +:105B00000000000000000000000000000000000095 +:105B10000000000000000100000000000000000084 +:105B20000000000000000000000000000000000075 :105B30000000000000000000000000000000000065 -:105B40000000000082AA7DAA0000FFFF0000000004 -:105B50000000000008A200AA3579C58920000000D5 +:105B40000000000000000000000000000000000055 +:105B50000000000000000000000000001000000035 :105B60000000000000000000000000000000000035 -:105B70000000000000001000200040002000000095 +:105B70000000000400000000000000000000000021 :105B80000000000000000000000000000000000015 -:105B900000000000000000000000000000001000F5 -:105BA0000000000000000000000084000000000071 -:105BB000000000000000C0000000000040001000D5 -:105BC000000000000000000000000000000088004D -:105BD0000000000000000000000000002000100095 -:105BE00000000000000000000000000010000000A5 -:105BF0000000000000000000004010201000100015 -:105C00000000000000000000004000000000000054 -:105C100000000400000000201020402010200000A0 -:105C20000000000000000000000000000040000034 -:105C30000000000000000000000000000002000062 -:105C400040000000000000000000000020004000B4 -:105C500000000000000000004000000000004000C4 -:105C60000000000000000000000000000000000034 -:105C70000000000000000000000000000000000024 -:105C80000000000000000000000000000000000014 -:105C90000000000000000000000000000000000004 -:105CA00000000000000000000000004000000000B4 -:105CB00000000000000000000000000000400000A4 -:105CC0000040004000000000000000400010000004 -:105CD000000008400000000000000000004000003C +:105B90000000000000000000000000000000000005 +:105BA00000000000000000000000000000000000F5 +:105BB00000000000000000080000000000000000DD +:105BC00000000000000000000000000000000000D5 +:105BD00000000000000000000000000000000000C5 +:105BE00000000000000000000000000400000000B1 +:105BF0000000410000000000000000022000000042 +:105C00000000000000000000000000000000000094 +:105C10000000000000001000000000004000000034 +:105C20000000100000000000000000000000000064 +:105C30000000000000000000000000000000000064 +:105C40000000000000000000000000000000000054 +:105C50000000000000000000000000000000000044 +:105C600000000000000000400000020000000000F2 +:105C70000000000000000000000000000000020022 +:105C800000000200000002000040000000000000D0 +:105C9000020000000000000084000000000000007E +:105CA00000000000000000000000000000000000F4 +:105CB00000000000000000000000000000000000E4 +:105CC00000000000000000000000000000000000D4 +:105CD00000000000000000000000000000000000C4 :105CE00000000000000000000000000000000000B4 :105CF00000000000000000000000000000000000A4 :105D00000000000000000000000000000000000093 :105D10000000000000000000000000000000000083 :105D20000000000000000000000000000000000073 -:105D300000880000000000000000000000000000DB +:105D30000000000000000000000000000000000063 :105D40000000000000000000000000000000000053 -:105D50000000000000000000000000000000000043 +:105D50000000000000000000000000000002000041 :105D60000000000000000000000000000000000033 -:105D70000000000000000000000000000000000023 +:105D7000000000000000900000009000840000007F :105D80000000000000000000000000000000000013 -:105D900000000000000000000000000000000041C2 -:105DA0000000000000000000000090000000000063 -:105DB00000000000000000000000000000000000E3 -:105DC0000000004100000000000000000000000092 +:105D90000000000000000000000000000000000003 +:105DA00000000000000000000000000000000000F3 +:105DB0000000000000000000000082000000000061 +:105DC00000000000000000000000000000000000D3 :105DD00000000000000000000000000000000000C3 :105DE00000000000000000000000000000000000B3 :105DF00000000000000000000000000000000000A3 -:105E00000000000000000000000000000000009002 -:105E10000000000000000000000000000000000082 -:105E20000000400000000000000000000900030026 -:105E30000000000005A0418811000000008400005F -:105E4000000000000000000000000000000000C092 -:105E500000000084000000000000000000000000BE -:105E6000000003001100009000000000000000008E -:105E70000000000000000000000000000000000022 -:105E80000000000000000000000000000000000012 -:105E900000000000000000000000000000000400FE -:105EA00000000400000000000000000000000011DD -:105EB000000200000000004100000000000000009F -:105EC00000000000000000000000080000000000CA -:105ED0000000000040000000000000000000000082 +:105E00000000000000000000000000000000000092 +:105E10000000000000000000000009000000000079 +:105E20001000000000000000000000000000000062 +:105E30000000000000000000000000000000000062 +:105E40000000000000000000000000000000000052 +:105E50000000000000000000000000000000000042 +:105E60000000000000000000000000000000000032 +:105E700000000000004000400000000000000000A2 +:105E800000000000000000000800000000400000CA +:105E900000000040000000000011000000000000B1 +:105EA00000000000000000000000000000001000E2 +:105EB00000000000000000000000000000000000E2 +:105EC00000000000000000000000000000000000D2 +:105ED00000000000000000000000000000000000C2 :105EE00000000000000000000000000000000000B2 -:105EF00000000000000000000000000000000000A2 +:105EF0000000000000000000000000000040000062 :105F00000000000000000000000000000000000091 -:105F10000000000000000000000000000000000081 -:105F20000000000000000000000000000000000071 -:105F30000000000000000000000000000000000061 -:105F40000000000000000000000000000000000051 +:105F1000000000000000000000000300020002007A +:105F200000000000004000000000000000400000F1 +:105F300000000088000000000000000000002000B9 +:105F400000000000000000000000000000C0000091 :105F50000000000000000000000000000000000041 -:105F6000000000000500000000000000000000002C +:105F60000000000000000000000000000000000031 :105F70000000000000000000000000000000000021 :105F80000000000000000000000000000000000011 :105F90000000000000000000000000000000000001 -:105FA0000000000000000000000000000000A00051 +:105FA00000000000000000000000000000000000F1 :105FB00000000000000000000000000000000000E1 :105FC00000000000000000000000000000000000D1 -:105FD0000041000000000000000000000000000080 +:105FD00000000000000000000000000000000000C1 :105FE00000000000000000000000000000000000B1 -:105FF00000000000000000000000000000000000A1 +:105FF000000000000000000000020000008400001B :106000000000000000000000000000000000000090 -:10601000000000880000059000A0000800000000BB -:106020000000000000000000000000000000000070 -:106030000002118800000000000003900000000032 -:10604000000000000500000000000000000000004B -:1060500000000000000000000000008408900084A0 -:1060600000000000000000000000009000000000A0 +:1060100000000000000000000000000000840000FC +:10602000000000000000050010000000000000005B +:10603000000000000000050000000000000000005B +:106040000000000009000000000000000000000047 +:106050000000000000000000000000000000000040 +:106060000000000000000000000000000000000030 :106070000000000000000000000000000000000020 -:106080000000000000000000000000000000000010 +:10608000000000000000000200000000000000000E :106090000000000000000000000000000000000000 -:1060A00000000000000000000400000000000000EC +:1060A00000000000000000020000000000000000EE :1060B00000000000000000000000000000000000E0 -:1060C00000000000000000000000000000000003CD +:1060C00000000000000000000000000000000000D0 :1060D00000000000000000000000000000000000C0 -:1060E0000000000000410000000208000000000065 -:1060F00000000000000000000000000000000000A0 -:10610000000000000000000000000000000000008F -:10611000000000000000000000000000000000007F -:10612000002000000000000000000000000000004F -:10613000000000000000000000000000000000005F -:10614000000000C00000000000000000000000008F -:1061500000000000000000000000000000004000FF -:106160000000000000000000000000000800000027 +:1060E00000000000000000000000000000000000B0 +:1060F0000000000000000000000020000000000080 +:106100002000004000000200050000000000000424 +:10611000000000000000000000000010000000006F +:10612000000000040000000000002000000000004B +:10613000054000000000000000000000000000001A +:10614000000000000000000000000000000000004F +:10615000000000000000000000000000000000003F +:10616000000000000000000000000000000000002F :10617000000000000000000000000000000000001F :10618000000000000000000000000000000000000F :1061900000000000000000000000000000000000FF @@ -198369,436 +198369,436 @@ :106AF0000000000000000000000000000000000096 :106B00000000000000000000000000000000000085 :106B10000000000000000000000000000000000075 -:106B20000000000000000000000000004000000025 -:106B30000000000000000000000000001000000045 -:106B4000000000000000000000050000040000003C -:106B500000000000000000000000000104008200AE -:106B6000040004000010A000020000000400200047 -:106B70000000000000000000000000000000000015 -:106B80000000000000000003000000000000000002 -:106B900000000000000000000000000000000000F5 -:106BA00000000000000000000000000000000000E5 -:106BB0000000000040000000202000000000000055 -:106BC00000000000000000000000000000200000A5 -:106BD0000000000000000000000000000000800035 -:106BE0000000800080000001000080000000000024 -:106BF0000000000000000000000000000000000095 -:106C00000000000000004000000000000000000044 -:106C100000000000000000000000009000000000E4 -:106C200000000000000020002000200021000000E3 -:106C3000000000050200000000000040000000000D -:106C40000400000000000000000000000010000030 -:106C5000000000000000000000000200000000032F -:106C600000000041100000000000000000000000D3 -:106C70000000000010000041000000000040000083 -:106C80000040000000000000000000000000004084 -:106C90000040001000000040004000800000008024 -:106CA0000000000000000000800080008000A000C4 -:106CB00000000000000000000000000000000000D4 -:106CC0000000800000000000000000000000020042 -:106CD00000080000000000000000000000000000AC -:106CE0000000000800000008000000040008000088 -:106CF00000000010000000080000001000820000EA -:106D000000080008000000080000000000C00000AB -:106D100000080004000000080000108200020000CB -:106D2000000400000000000000000000000000005F -:106D3000000000000000000000000021000000052D -:106D40000000000800000008000020080000840087 -:106D5000000000000000000800000000000000002B -:106D60000008000004000800C10004000005400005 -:106D70000100040000000000A0000000000800085E -:106D80000000000000000000820000000000080277 -:106D90000800000000000000000000000000820069 -:106DA000840000000000000000000000000000005F -:106DB00000000000000000000000000000000000D3 -:106DC00000000000090000000000000000000000BA -:106DD00000000000000000000000000000000000B3 -:106DE000000000000000800000000400800000A0FF -:106DF000000004008000030000000000000000000C +:106B20000000000000800000000000800080008065 +:106B300004800000000000000000000000000000D1 +:106B40000000000000000000000000000000000045 +:106B500020000080844182008200000300000000C9 +:106B60000000000000000000000000000000000025 +:106B70000000000000002000000020800000000055 +:106B8000000000000000000088000000000000007D +:106B900000000000000020000000200000000000B5 +:106BA00000000000000200080000000200080008C9 +:106BB0000008800800000000000000000000000045 +:106BC00000000000000000000000000000000000C5 +:106BD0000000000000400000000000000000000075 +:106BE00000000000000000000000000000000000A5 +:106BF0000000000200000000000000000040000053 +:106C00000000000000000000000000000000000084 +:106C10000000000000000000000000000000000074 +:106C200000000440000082000041020082000100D8 +:106C30000000000001000040000010000000000003 +:106C4000020000000200000801000808000800001F +:106C5000100010000000000084000221024100002A +:106C600000000000000000000040000000000000E4 +:106C7000000000000000000002000200000002000E +:106C80000000000002000200000000000000000000 +:106C900000000000000000000000000000000000F4 +:106CA0000000000000000000000011008000000053 +:106CB00010000000000010000001000000000000B3 +:106CC00000000000000000000001100000010201AF +:106CD00000008000800000000000000000C00000F4 +:106CE00000000000000000000200000000000000A2 +:106CF0000000000000000000000000000000000094 +:106D00000000000000000000400000000000000043 +:106D10000000000000000000000000000000000073 +:106D20000000000000000000000000000000000063 +:106D300001000000000090000000000000000000C2 +:106D40000000400000000000000000000000000003 +:106D50000000000000000000010000008800A0000A +:106D60000000000000000000A00000000000000083 +:106D70000000000000000000000000000000000013 +:106D800000000000000000000000000000050000FE +:106D900000000000000000000000000000000000F3 +:106DA00000000000000000000000000000000000E3 +:106DB000110004002000002000000000000000007E +:106DC00000000000000000000000000000000000C3 +:106DD0000000000010000000000020000000000083 +:106DE0000000210000000000000000000000000082 +:106DF0000000000000000000000000000000000093 :106E00000000000000000000000000000000000082 -:106E1000000000000000030000000000000000006F -:106E2000030000000000000000000000000000005F -:106E3000000000000000000800000000000000004A -:106E4000000000000000000000050000001000002D -:106E50000000000000000000000000000000000032 -:106E60000000000000000000A00000000000010081 -:106E7000000000000180008000080000A000000069 -:106E800000000000000000000800000000000800F2 -:106E90000000080000000000820000000000000068 -:106EA0000008002000000084000000000000000036 -:106EB00000000000000000000000000000000000D2 -:106EC0000000000000000000200000000000200082 -:106ED0004100000000000000000000000000000071 -:106EE0001008000800000040000000000000000042 -:106EF00004840090000402200020000000840000B0 -:106F00000000000000100000000000000000080069 -:106F10000008000000000000000008000000000061 -:106F2000030000000000000000040000000000005A -:106F30000000000020000000000000000000000031 -:106F4000000000000000000000000000040000003D -:106F50000000000000000000002100000000000010 -:106F60000000000000000000840000000420080071 -:106F7000C0A004200021010000000010000000005B -:106F800000000000000000000000000000000800F9 -:106F9000000000000000000000000000A000000051 -:106FA00000000000000000000020000000000000C1 -:106FB00000000000000000000000000000000000D1 -:106FC00000000000000000000000000000000000C1 -:106FD000000000044100000000000000000000006C -:106FE0000000000000000000000000000000800120 -:106FF000088400218001000404000000000100005A -:107000000000000000000000000000000000000080 -:107010000000000000000000000020000000000050 -:10702000000000000000000005000020000000003B -:10703000000000000000000000000000000000212F -:10704000000000210000000000000000000000001F -:1070500000000021000000110008000000210000D5 -:10706000000000000000100000000000020000000E -:107070000120200404A020040000012102000008D7 -:1070800000200005000000000000002100000000BA -:107090000000000000000000900000000000000060 -:1070A00000000800000000000000040001002000B3 -:1070B00000000000000000000000000000000000D0 -:1070C00000000000000000000000000000000000C0 -:1070D0000000000000000200200000040000000486 -:1070E000050000000000000010000000000080000B -:1070F000000004210810802100040000040080002A -:10710000000000000000000020000000000000005F -:10711000000000000000000000004100000000002E -:10712000000000000000000000000000000040001F -:107130000400000000000000000001002000020028 -:10714000000100000000000000000000000000003E -:107150000000099084880088088200000000000078 -:10716000000000000000000000000002000800080D -:10717000000800000010008400840084C00800049F -:1071800000040002000000000000000000000000F9 -:1071900000000000000000000000000000000000EF -:1071A0000000000000000000000000000000A0003F -:1071B0000100000000000000000000001109901014 -:1071C00000090003000000000000000000000000B3 -:1071D000000000009000000000008080000000001F -:1071E000000000000000000000000000000000801F -:1071F000008000800000008000000080000083808C -:1072000000800080008000000000000000000000FE -:10721000000000000000000000000000000000006E +:106E10000000000000000000000000000000000072 +:106E20000000000000000000000000000000000062 +:106E3000000000800000000800080008004000403A +:106E400000000000010000000000000000008400BD +:106E500000008400010000080000008001C0000064 +:106E6000000084000000000000000000000400009A +:106E70000000000082000000000000000000000090 +:106E800000000000080000000000000000000000FA +:106E900000000000000000000000000000000000F2 +:106EA00000000000000000000000000000000000E2 +:106EB00000000000002000000001000100010000AF +:106EC00000000000000004000000000000000000BE +:106ED0000000000000002000000100000020020867 +:106EE00000400040000000C0000000400000020020 +:106EF0000000000000000000000000000000000092 +:106F00000000000000000000000000000000000081 +:106F10000000000000000000000000000000000071 +:106F200000000000000000000000000000009000D1 +:106F300000000400040090000400000000000000B5 +:106F40000000000000000020200000000000000001 +:106F5000000000000200900000000040000000005F +:106F6000842000410000000000000000000000003C +:106F700000000000900000008200000000000000FF +:106F800004000800000000000000000000000000F5 +:106F900000000000000000000000000000000000F1 +:106FA00000000000000000000000000000000000E1 +:106FB00000000000800080000000800000000090C1 +:106FC0000000008800000000000100000000000038 +:106FD00000000000000000000000000000011000A0 +:106FE00000000001000000000000000000000000A0 +:106FF0000000000000000000000000000000000091 +:1070000041008000000000000000000000000000BF +:107010000000000000000000000000000000000070 +:107020000000000000000000000000000000000060 +:107030000000000000000000C08000000000000010 +:1070400000000009008000000000000000000000B7 +:107050000000000000000000000000000000000030 +:1070600000001000100000000000A009000900004E +:107070000000000000000000000000000000000010 +:1070800000000000000004000000000000000000FC +:1070900000000000000000000000000000000000F0 +:1070A00000400000000000000000000000000000A0 +:1070B00000000000000000000000000800000000C8 +:1070C00000000000020005080000000000000000B1 +:1070D00000000000410000000082000000000000ED +:1070E000004002000200000000000000000000005C +:1070F0000000000000000000000000000000000090 +:1071000000000000000000008000000000000300FC +:10711000000000000000000000000000000000006F +:10712000000000000000000000000000000000005F +:107130000000000000000000000001009020A000FE +:107140000000010100008400000100009000000028 +:1071500000C000000000000000000100000000006E +:1071600000000100900400000000411082880082AD +:10717000C008000000000000000000000000000047 +:1071800000000000000000000000000090048402E5 +:1071900000840082000000000000000000000000E9 +:1071A00000000000000000000000000000000000DF +:1071B00000000000000000000000000009008080C6 +:1071C00000000000114100210000000811008000B3 +:1071D000000000000000000000000000110000217D +:1071E00000000000110080210000000002000000EB +:1071F000000080000000000000000000000000000F +:1072000000000000000000000000000000008000FE +:10721000008000000080000000000000000000006E :10722000000000000000000000000000000000005E -:10723000850003000000000000000000000008803E -:107240000200110002020000000000000000000027 -:10725000000000000000000000A100880000000005 -:10726000000000000000000000000000000000001E -:107270000089008000000000000080000000808085 -:10728000000000208080800000000000000000005E -:1072900000000000000000000000000000000000EE +:10723000000000000000000000000000000000004E +:10724000008000000000418005000811C10000001E +:10725000008000000080000000000000000000042A +:107260000000111100000004008011110000000056 +:1072700080400000008000030000000000000000CB +:10728000000000000000000000000000000000807E +:107290000009000000800000000000000000000065 :1072A00000000000000000000000000000000000DE -:1072B0000080080010000003000000000000000033 -:1072C00001080000010000000000000000000000B4 -:1072D00000000000000000000000004000A00000CE -:1072E000000000000000000000000000000000009E -:1072F00000000010000800000000000010009000D6 -:107300009090000000000440040000000000000015 -:10731000000000000000000000000000000000006D +:1072B00000000000000000000000000000000000CE +:1072C00000000002000000A0000200000101910087 +:1072D00000000020000000C00000000000000000CE +:1072E0000001000001000000000100020100008810 +:1072F00020002083829084820000000000000000B3 +:10730000000000000000000000000000000000007D +:1073100000020001008200A0000000000000000048 :10732000000000000000000000000000000000005D -:10733000000000100100010000000000000000003B -:10734000000000000001000001000000000000003B -:1073500000000000000000000000C09000840084D5 -:1073600010100000000000000000000000000000FD -:107370000000080000000000200000009000001045 -:107380000000C088C04000040402040400000000A3 -:1073900000000000000000000000000000000000ED +:10733000000000000000000000000000000000004D +:10734000000001010089080101010001010088011C +:107350000101010000888800010000000000000019 +:1073600000000000C000000100000100C088900083 +:10737000000090100002848284840000000000005D +:1073800000000000000000000000000000000000FD +:1073900008000000029000004090C00000000000C3 :1073A00000000000000000000000000000000000DD -:1073B00000000000000000012001010000000000AA -:1073C000000000000009210302411110000000002C -:1073D000000000000000000000000000800000002D -:1073E000008003000000000000000000000000001A -:1073F000000000008000000000000000000080008D -:107400000080000083808080008080808080000079 -:10741000000000000000000000000000000000006C +:1073B00000000000000000000000000000000000CD +:1073C00000000000411000898005114100104003B9 +:1073D0000305114141000080000009000000000089 +:1073E00000000000000000000008030041000080D1 +:1073F00000090900000000800000000000000000FB +:10740000000000000000000000000000000000007C +:10741000000000000000000000000080800000006C :10742000000000000000000000000000000000005C -:10743000000000000000001000100005110800000E -:10744000000000000000108208114100030300004A -:1074500000000000000000000000000000008008A4 -:10746000001080000000000000000000000000008C -:10747000000000000000000080000000800000000C -:1074800000008089008080008008808800800000E3 -:1074900000000000000000000000000000000000EC +:10743000000000000000000000000000000000004C +:1074400000000000000000110004008080004104E2 +:107450001011410003000011000000800000000036 +:1074600000000000000000001100000000000011FA +:10747000110000800000000000000000000000007B +:1074800000000000000000000000000000000000FC +:107490000004002100000000001000000000800037 :1074A00000000000000000000000000000000000DC -:1074B000000000000000000020C021002000084063 -:1074C00000000000000000000008010100000100B1 -:1074D00000000000000000000000000000000000AC -:1074E000100188008400100000000000000000006F -:1074F0000000000000000000020010002000080052 -:1075000000000000100200840400020020030802B2 -:10751000400000000000000000000000000000002B -:10752000000000000000000000000000000000005B -:107530000000000000000000000000C0000001008A -:1075400000000000000000000000000000E000005B -:10755000000000000000000000000000000000002B -:1075600000000081000043008400000000000000D3 -:10757000000000000000000000000000000000000B -:1075800000000000008200004300000600420000EE -:107590004300600000000000000000000000000048 -:1075A00000000000000000000000000000000000DB -:1075B000000000000000000000000000840000C87F -:1075C0000000840000000000000000000000000037 -:1075D00000000000000000000000000000000000AB -:1075E0000000000000AA00AAEBE800000000000074 -:1075F000000000000000000000000000F01F00EF8D -:10760000000000000000003C003C0000F0F0000022 -:107610000000B133276600000000000000000000F9 -:10762000000000000000000000000000000000005A +:1074B00000000000000000000000000000000000CC +:1074C00000000000000000000001000000408800F3 +:1074D00001A10101000801000001000000400000BE +:1074E000000000000000000000000100000000009B +:1074F0000001010000400000840040088220840058 +:10750000000000000000000000000000000000007B +:10751000000000010000000000000401840084005D +:107520000400000000000000000000000000000057 +:10753000000000000000000000000000000000004B +:1075400000000000000000000000410000E04200D8 +:107550008200602100E0070000000000000007003A +:1075600082210000000000000000000000E0000098 +:107570000000000000E007008200000000000000A2 +:107580000082000000000000000000000000000079 +:1075900000000000000600000700000081210048F4 +:1075A0004200000600000000000000000000000093 +:1075B00000000000000000000000000000000000CB +:1075C0000000000000000000000000003C3C000043 +:1075D000F0F00000000000000000000000000000CB +:1075E000F0F00000000000000000000000000000BB +:1075F0000000000000000000F0F00000DC1CD010D3 +:10760000C355000F00000000000000000000000053 +:10761000000000000000000000000000000000303A +:10762000A0B028EB28EB00000000000000000000E4 :10763000000000000000000000000000000000004A -:10764000000000000000000000000000000000003A -:10765000000000000000000000000000000000002A -:1076600000000000000000AAF3AA28E800000000C3 -:107670000000000000000000000000000000708F0B -:10768000807F000000000000003C003C0000F0F0A3 -:1076900000000200B1332766000000000000000077 -:1076A00000000000000000000000000000000000DA +:1076400000000000000000000000000000003C3CC2 +:107650000000F0F00000000000000000000000004A +:107660000000F0F00000000000000000000000003A +:1076700000000000000000000000F0F00000DF1F2C +:10768000D313C355FF0F00000000000000000000EE +:1076900000000000000000000000000000000000EA +:1076A0000030A0B028EB28EB000000000000000034 :1076B00000000000000000000000000000000000CA :1076C00000000000000000000000000000000000BA -:1076D00000000000000000000000000000000000AA -:1076E0000000000000000000000F000F000000007C -:1076F000000000000000000000000000000000008A -:10770000F5F0A0A5000000000000E5B01A4F00054C -:1077100000AF3CB3C34CAAAA5555000000000000BE -:107720000000000000000000000000000000000059 +:1076D0000000FF000000FFFF00000000FFFFFFFFB1 +:1076E00000003C3C0000FFFF000000000000000024 +:1076F00000000000000000000000FF000000FFFF8D +:10770000010B515B00F0C3AA000000000000000064 +:107710000000000000000000000000000000000069 +:1077200000000F0F0D01000000000000000000002D :107730000000000000000000000000000000000049 :107740000000000000000000000000000000000039 -:107750000000000000000000000000000000000029 -:1077600000000000000000000000000000280000F1 -:107770000000000000000000000000000000000009 -:1077800000000A4F5F1A000000000000E5B00B5E29 -:10779000000000002C36D3C9AA5555AA00000000ED -:1077A00000000000000000000000000000000000D9 +:1077500000000000FF000000000000000000FFFF2C +:10776000000000003C3C00000000000000000000A1 +:10777000000000000000000000000000FF0000000A +:107780000000A1ABF1FBFFF0C3AA00000000000065 +:1077900000000000000000000000000000000000E9 +:1077A000000000000C000D010000000000000000BF :1077B00000000000000000000000000000000000C9 :1077C00000000000000000000000000000000000B9 -:1077D0000000000000610000000100000000000047 -:1077E00000000000000000000000000000000E3853 -:1077F0000000000000000000000000000000000089 -:107800000000000000003000000000000000000048 -:107810004038000000008000003800000000000038 -:107820000000000000000000000000000000000058 +:1077D0000000000015612A0EC54800A80000003016 +:1077E000C000000005002A00054000A800000000BD +:1077F0000000000000000006000C000005002A0642 +:10780000054C00A80000000000C0000000000000BF +:107810000000000000000000000000000000000068 +:107820000038050000A000653026801D0000000023 :107830000000000000000000000000000000000048 -:1078400000000000000000610007C0090000000007 -:107850000000000000003C3C3F30F0F0F0F0000081 -:107860000000000000000000000000000000000018 -:107870000000000000000000000000000000000008 -:1078800000000000000000000000000000000000F8 +:107840000000000000000000000000000000000038 +:107850000000000000000000000000FF3A3A5F0A4C +:107860003C3C00FF3A3A000000000000000000002D +:107870000000000000000000FF0000FF000000000A +:10788000FF0000FF000000000000000000000000FA :1078900000000000000000000000000000000000E8 :1078A00000000000000000000000000000000000D8 :1078B00000000000000000000000000000000000C8 -:1078C00000000000000000000D0C4020300C3C3C8B -:1078D00000000000000000003C3CBE14F1FBB010B2 -:1078E0000000000000000000000000000000000098 -:1078F0000000000000000000000000000000000088 -:107900000000000000000000000000000000000077 +:1078C00000000000000000000000000000000000B8 +:1078D00000000000000000000000000000FF3A3A35 +:1078E0005F0A3C3C00FF3A3A000000000000000044 +:1078F00000000000000000000000FF0000FF00008A +:107900000000FF0000FF0000000000000000000079 :107910000000000000000000000000000000000067 :107920000000000000000000000000000000000057 :107930000000000000000000000000000000000047 -:107940000000000000000000000080000080300CFB -:10795000000000000000000000003C2D3C2D00FF56 -:1079600010BF000000000000000000000000000048 -:107970000000000000000000000000000000000007 -:1079800000000000000000000000000000000000F7 +:107940000000000000000000000000000000000037 +:107950000000000000000000000000000000000027 +:1079600000003C3CFF003C3C0FFF0000000000001A +:10797000000000000000000000000000FF0000FF09 +:1079800000000000FF0000FF0000000000000000F9 :1079900000000000000000000000000000000000E7 :1079A00000000000000000000000000000000000D7 :1079B00000000000000000000000000000000000C7 :1079C00000000000000000000000000000000000B7 -:1079D00050A050A000000000000000003C3C3C0F04 -:1079E00014BE10BF000000000000000000000000F6 -:1079F0000000000000000000000000000000000087 -:107A00000000000000000000000000000000000076 +:1079D00000000000000000000000000000000000A7 +:1079E000000000005555FF003C3C00F00000000086 +:1079F0000000000000000000000000000000FF0088 +:107A000000FF00000000FF0000FF00000000000079 :107A10000000000000000000000000000000000066 :107A20000000000000000000000000000000000056 :107A30000000000000000000000000000000000046 :107A40000000000000000000000000000000000036 -:107A50000000050A050A00000000000000002000E8 -:107A600040000000000000000000000000000000D6 -:107A700000000000000000000000000000002000E6 -:107A800020001000000000000000000000000000C6 -:107A900000000000000000000000000000000000E6 -:107AA00000002000000000008800880000000000A6 +:107A50000000000000000000000000000000000026 +:107A600000008200408000000000000000800080D4 +:107A700000800020008000800080828000200000C4 +:107A80000000200000000000028001000200000051 +:107A900000000000000000010000000000000000E5 +:107AA00000000000200000000000000000000000B6 :107AB00000000000000000000000000000000000C6 -:107AC00000000000000000000000000000000000B6 -:107AD00000000000000000000000000000000000A6 -:107AE0000000000040002002000000000000000034 -:107AF0000000000021000000000000000000004025 -:107B000000020000404000000000000000000000F3 -:107B10000000000000002100000000000000000044 -:107B20000020000000200002400040000000000093 -:107B30000000000000000000210000000000000024 -:107B40000000402000000000400040000000000055 -:107B500000004000000021002100000000000000A3 -:107B60000000000000000005000000000000000010 -:107B70000000000000000200000000000000000003 -:107B800000000000040000000400000900000000E4 -:107B90000040001000000000000000031000000082 -:107BA0000040004000000000000002100010000033 -:107BB0000000000000100040000000000040000035 -:107BC000000000400000000000000000080000402D -:107BD00000000000004002004000400000000000E3 -:107BE000000000000008000000000000000000008D -:107BF0000000000000000008000000000008000075 -:107C00000000000000088000000080000008000064 -:107C100000000000000800840008000000000008C8 -:107C200000000000000800840010000000000008B0 -:107C30000008000000000008001000080000000814 -:107C400000000040000800000010000000000008D4 -:107C50000082000000000008000080088000000092 -:107C60000000000000000000000000000000000014 -:107C700000000000000000000000000800000000FC -:107C800000000000000801000000000300000000E8 -:107C90000000000000000000000082000000000062 -:107CA00000000004000000000000000800000000C8 -:107CB000000000410000000000050000000000007E -:107CC0000000002100000000000000000000000093 -:107CD000000000080000000000000000000000009C -:107CE0000000000000000000000000000000000094 -:107CF00000080000000000A00000000000000000DC -:107D0000000000004000000008000084000000881F -:107D10000000000000000300000000000000000060 -:107D20000000000041000000000000000000000012 +:107AC0000000000020000000000000000000000096 +:107AD000000000008800000000000000000000001E +:107AE0000000000000000020000000000000002056 +:107AF0000020002000910020002000200020000134 +:107B000000004100000040000000000804000000E8 +:107B10000000000000000000000000000000000065 +:107B20000000000000000000000000000000000055 +:107B30000000000000000000000000000000000045 +:107B40000000000000000000000000000000000035 +:107B50000000000000000000000000000000000025 +:107B600000001000020800C1100000000000020028 +:107B700000000010020000000200000000000000F1 +:107B800000000200000000000000000000001000E3 +:107B900000080000000000000000000000000000DD +:107BA00000000000000000000000000000000000D5 +:107BB00000000000000000000000020000000000C3 +:107BC00000000000000000000000020000000000B3 +:107BD00000000000000000000000000000000000A5 +:107BE0000000000080000001000883400000000841 +:107BF0000000000000000000000000000000000085 +:107C000000000000000000000000000000001188DB +:107C100080000001000000000000000000000000E3 +:107C20000000000000004000000000000000000014 +:107C30000000000000000000000000000000000044 +:107C40000000000000000000000000000004000030 +:107C50000000000000000000000000000000000024 +:107C60000000000000000000000000000100000013 +:107C700000000000000000000009000000000008F3 +:107C80000000008000000000000000000000000074 +:107C900000000000000000000000000000000000E4 +:107CA0000000000000000000000000000000004094 +:107CB00000000000000000000000000000000000C4 +:107CC00000000000000000000000000000000000B4 +:107CD00000000000000000000000000000000000A4 +:107CE0000000000000000000000000000000200074 +:107CF0000000000000000020000000000000000064 +:107D00000901000040040000000000000000030022 +:107D1000100000001100210000000000000000041D +:107D200000000082000000000000000000000000D1 :107D30000000000000000000000000000000000043 -:107D40000000000000A00000000000000000000093 -:107D50000000000008900900000000000000000082 -:107D6000000000000000000000000008000000000B -:107D700000000000000000000000000000000021E2 -:107D8000000000000000000010000000000084005F -:107D90004000C000004100000041A00000000000C1 -:107DA000004100008800C0840000000400000000C2 -:107DB0000000000000000021000900000000000099 -:107DC0000000004100000000000000000000000072 -:107DD0004000900800210021000000000080000207 -:107DE0000009000000080000000000000000000082 -:107DF0000000000000000000000000000000000083 -:107E00000000000000000000000000000000000072 -:107E1000000080000000008400000000000000005E -:107E200000000000000000400021000800010000E8 -:107E300000000000000000400000000000000040C2 -:107E4000000000000000000000000008000000002A -:107E50000000000000000000001000000000000210 -:107E60000001000000000000000000000000000011 -:107E70000000000000000000000000000000000002 -:107E800000000000000000000000400010000000A2 -:107E90008800000000000000000800000000000052 -:107EA00000008200820000000000000000000000CE -:107EB0000000004100000000000000000000000081 -:107EC00000000000000000000000000000000000B2 -:107ED0000000000000000000080000008800000012 -:107EE0000100018000000000000800000000000008 -:107EF0000000000000A000000000000000000000E2 -:107F00000000000000000000000000040088109045 -:107F10000000000000000000000000000000000061 -:107F2000000000000000000000000000410000828E -:107F300000000000000000840000000000000000BD -:107F40000000000000000000000000000000000031 +:107D40000000000000000000000000000000000033 +:107D50000000000000000000000000000000000023 +:107D600000000000000000000000000000000040D3 +:107D700008040040000800000000000000000000AF +:107D800082000000000000000080000000000000F1 +:107D900000410041004000000140000000000000E0 +:107DA0000000000000000000000000000000004093 +:107DB00000020000000000000000000000000000C1 +:107DC00000000000000000000000000000000000B3 +:107DD0001000000000000000000000000000000093 +:107DE0000000000000000000000000000040000053 +:107DF0000004000000900088000000000000000067 +:107E000000000000000000002000000400000082CC +:107E100000000000118800000000200000000000A9 +:107E2000000000000000100000000800000000003A +:107E30000000000000000000000000000000000042 +:107E40000000000000000000000000000000000032 +:107E50000000000000000000000000000000000022 +:107E60000000000000000000000000000000000012 +:107E700000110000010000A10102208001000000AB +:107E80000009000090000000000000001000000049 +:107E90000000000000000008000000000000004199 +:107EA00000000000000000000000000000000000D2 +:107EB000000000000000000800000000000040007A +:107EC00000000000000001000000000000000000B1 +:107ED00000000000000000000000000000000000A2 +:107EE00000000000000000000000000000C00000D2 +:107EF000000000000088040000200400002004208E +:107F0000000000000000008400000000000080006D +:107F10000000000000C00084000121000000008477 +:107F200010000900000404A0000000880000000008 +:107F30000000000000000000000000000000000041 +:107F40000000100000000000200000000000000001 :107F50000000000000000000000000000000000021 -:107F600000004000040400000000000000000000C9 -:107F70000000000000000000000000000000000001 -:107F800000000000000000000000000002000000EF -:107F900000000000000000000000C00200210000FE -:107FA00000090000000882009000000000000000AE -:107FB0000000010000090041000400020000000070 -:107FC000000200000000000000000000001000009F -:107FD0000000000000000000000000000800000099 +:107F60000000000000000000000000000000000011 +:107F700000000000000000000000000000000009F8 +:107F800000000000000000000000000001000000F0 +:107F9000000200008804000008000000000000004B +:107FA00000020000000000000002000000000000CD +:107FB00000000000000000000000000000000000C1 +:107FC00000000000000000000000000000000000B1 +:107FD00000000000000000000000000000000000A1 :107FE0000000000000000000000000000000000091 -:107FF0000000000000000000000000000000000081 -:108000000000000000080000000000000000000068 -:108010001100000000000008000000000000000047 -:108020000000000000000000000000000000000050 -:10803000000000000400000000000000000000003C -:108040000000000000000000000000000000000030 -:10805000000000000000020000000000000000001E +:107FF000008200000000000020900040000000000F +:108000000500050000000000000005000000200041 +:10801000000000000000000008000000000011C087 +:10802000020000000000000000000000000000004E +:108030000000000000000000000008000000000038 +:108040000800000008000000000000000000000020 +:108050000000000000000000000008000000000018 :108060000000000000000000000000000000000010 -:108070000000000000000000000000000000000000 -:1080800000000000000000000000000000000000F0 -:10809000000000000000408200400002A0A000009C +:10807000000000000000010090000000000000C0AF +:1080800000900000000000C000900000000001C04F +:10809000009000000000000000000000000001004F :1080A00000000000000000000000000000000000D0 -:1080B00083A100082041C00900000000000000006A +:1080B00000000000000000000000000000000000C0 :1080C00000000000000000000000000000000000B0 :1080D00000000000000000000000000000000000A0 -:1080E000000000000000000001000000010100008D -:1080F0000000000000000000000000000000000080 -:10810000000000000000000000000000000000006F -:1081100000000000000000008000008000808080DF -:10812000000000000000000000000000000000004F -:1081300000002082210308C08040000000000000F1 +:1080E0000000000000000000000000000000000090 +:1080F000000000000000000011000021000000004E +:10810000008000800000000000800080000000006F +:10811000118021800000000000000000000000002D +:10812000110000210000000000000000000000001D +:10813000000000000000000000000000000000003F :10814000000000000000000000000000000000002F :10815000000000000000000000000000000000001F -:1081600000000000000000000000020400210805DB -:1081700000030000000000000000000000000000FC -:1081800000000000000000000000000000000000EF -:1081900000000000000000000000800000088020B7 -:1081A00000000000000000000000000000000000CF -:1081B0000000000002008303C0000904000000006A +:10816000000000000000000000000000000000000F +:1081700000000000000000000000000800001103E3 +:10818000800000008000001080800000800000005F +:10819000808000088900000380800000000000004B +:1081A000000000040000114000000000000000007A +:1081B00000000000000000000000000000000000BF :1081C00000000000000000000000000000000000AF :1081D000000000000000000000000000000000009F -:1081E000000000000000000000000000210020212D -:1081F00005C11100000000000000000000000000A8 -:10820000000000000000000000000000000000006E -:1082100000000000000000000000000008009000C6 -:10822000A00808000000000000000000000000009E -:1082300000000000000041A02000A1840800000010 +:1081E000000000000000000000000000000000008F +:1081F000000000000000000000000000000100007E +:1082000001019000000082000000C0900000820088 +:108210000000C090000183000000C090000000003A +:10822000000000000001000001010000000000004B +:10823000000000000000000000000000000000003E :10824000000000000000000000000000000000002E :10825000000000000000000000000000000000001E -:108260000000000000000000000000000000018885 -:1082700001040190018200000000000000000000E5 -:1082800000000000000000000000000000000000EE -:108290000000000000000000000000000000C00816 -:1082A000001000C008A10000000000000000000055 -:1082B000000000000000000040040004090585A043 +:10826000000000000000000000000000000000000E +:1082700000000000000000000000000000000000FE +:1082800010001000010000000000109000C000006D +:108290000000009000C00000A000209000C000007E +:1082A000020000000000000010200091000000000B +:1082B00000000000000000000000000000000000BE :1082C00000000000000000000000000000000000AE :1082D000000000000000000000000000000000009E :1082E000000000000000000000000000000000008E -:1082F00000008401410100010000000000000000B6 -:10830000000000000000000000000000000000006D -:10831000000000000000000000000000000000005D -:1083200000090003000080080000000000000000B9 -:10833000000000000000000000000040024141A1D8 -:108340001004000000000000000000000000000019 +:1082F000000000000000000000000000000000007E +:1083000000008000800908000000000080800080DC +:10831000000000000080008000000000008041801C +:1083200000008000000000000000800000880400C1 +:10833000000000000000000000000000000000003D +:10834000000000000000000000000000000000002D :10835000000000000000000000000000000000001D :10836000000000000000000000000000000000000D -:1083700000000508C11005214010000000000000A9 -:1083800000000000000000000000000000000000ED -:1083900000000000000000000000000000000000DD -:1083A00000008000008900000000000000000000C4 -:1083B0000000000000000000000000002109830808 -:1083C0008880C041000000000000000000000000A4 +:1083700000000000000000000000000000000000FD +:108380000000000011020000000080118041000088 +:1083900000008011800800000000801189080000A2 +:1083A00000000000000000000000000011000000BC +:1083B00000000000000000000000000000000000BD +:1083C00000000000000000000000000000000000AD :1083D000000000000000000000000000000000009D :1083E000000000000000000000000000000000008D -:1083F0000000000088918541801182050000000086 -:10840000000000000000000000000000000000006C -:10841000000000000000000000000000000000005C -:1084200000000000080000048888820000000000AE -:108430000000000000000000000000000000C188F3 -:10844000039008400401000000000000000000004C +:1083F000000000000000000000000000000000007D +:10840000000000000000010000000000C00120008A +:1084100000000000C001200100000000C001200198 +:10842000000000000000000000000000000001004B +:10843000000000000000000000000000000000003C +:10844000000000000000000000000000000000002C :10845000000000000000000000000000000000001C :10846000000000000000000000000000000000000C -:10847000000000000004054183014001900100005C -:1084800000000000000000000000000000000000EC -:1084900000000000000000000000000000000000DC -:1084A0000000000000000006000043000000000083 -:1084B00000000000000000000000000000000000BC -:1084C000484200C843000006000000000000000011 -:1084D000000000000000000000000000000000009C +:1084700000000000000000000000000000000000FC +:10848000000000000000002100E0070000000011D3 +:1084900000000700000000060000070000000021A7 +:1084A00000E0070000000000000000000000008263 +:1084B00000E00700000000000000000000000000D5 +:1084C00000000000000000000000000000000000AC +:1084D0000000000000000000500000080000000044 :1084E000000000000000000000000000000000008C -:1084F0000000000000000000600600C843004100CA +:1084F000000000000000000000000000000000007C :10850000000000000000000000000000000000006B -:10851000000000000000000000000000000000005B -:108520000000000000000000FFFF0000809880981D -:10853000000000000000000000000000000000003B -:10854000000000000000009F000600000000000086 +:10851000FF000000FF000000FF000000FF0000005F +:10852000FF000000FF00000000000000000000004D +:1085300000000000FFF0FFF000000000000000005D +:10854000000000000000000000000000000000002B :10855000000000000000000000000000000000001B :10856000000000000000000000000000000000000B -:108570000000000000000000000020400402000095 +:1085700000000000000000000000000000000000FB :1085800000000000000000000000000000000000EB -:1085900000000000000000000000000000000000DB -:1085A000000000000000000000009999CFCF8199E1 -:1085B00000180000000000000000000000000000A3 -:1085C00000000000DBD818D8001E001E00000000CC +:108590000000FF000000FF000000FF000000FF00DF +:1085A0000000FF000000FF000000000000000000CD +:1085B000000000000000FFF0FFF0000000000000DD +:1085C00000000000000000000000000000000000AB :1085D000000000000000000000000000000000009B :1085E000000000000000000000000000000000008B -:1085F00000000000000000000000000010800801E2 +:1085F000000000000000000000000000000000007B :10860000000000000000000000000000000000006A :10861000000000000000000000000000000000005A :10862000000000000000000000000000000000004A @@ -198808,166 +198808,4263 @@ :10866000000000000000000000000000000000000A :1086700000000000000000000000000000000000FA :1086800000000000000000000000000000000000EA -:1086900000000000000000000000000000000000DA -:1086A0000000000000000000000000000000F3993E -:1086B000C39902FF0EFF0000000000000000000050 -:1086C0000000000000000000202FFFFF04FF34FF27 +:1086900000000000FFFF000000FF00000F0F0000BF +:1086A00000FF00000F0F000000FF00000F0F000090 +:1086B00000000000000000000000000000000000BA +:1086C00000000000000000000000000000000000AA :1086D000000000000000000000000000000000009A :1086E000000000000000000000000000000000008A :1086F000000000000000000000000000000000007A :108700000000000000000000000000000000000069 +:10871000000000000000FFFF000000FF00000F0F3E +:10872000000000FF00000F0F000000FF00000F0F0F +:108730000000000000000000000000000000000039 +:108740000000000000000000000000000000000029 +:108750000000000000000000000000000000000019 +:108760000000000000000000000000000000000009 +:1087700000000000000000000000000000000000F9 +:1087800000000000000000000000000000000000E9 +:1087900000000000003E000C10C0038203380C00F3 +:1087A00092C0038203380C0092C003C2033E0C0C3B +:1087B0008AC0000000000000000000000036000C2D +:1087C00000000000000000000000000000000000A9 +:1087D0000000000000000000000000000000000099 +:1087E0000000000000610086A00D000000000000F5 +:1087F0000000000000000000000000000000000079 +:108800000000000000000000000000000000000068 +:10881000000000000000FF0000FF0000000000005A +:108820000000000000000000000000000000FF0049 +:10883000FFFF000000000000000000000000FF003B +:1088400000FF000000000000000000000000000029 +:108850000000000000000000000000000000000018 +:108860000000000000000000000000000000000008 +:1088700000000000000000000000000000000000F8 +:1088800000000000000000000000000000000000E8 +:108890000000000000000000FF0000FF00000000DA +:1088A00000000000000000000000000000000000C8 +:1088B000FF000000000000000000000000000000B9 +:1088C000FF0000FF000000000000000000000000AA +:1088D0000000000000000000000000000000000098 +:1088E0000000000000000000000000000000000088 +:1088F0000000000000000000000000000000000078 +:108900000000000000000000000000000000000067 +:1089100000000000000000000000FF0000FF000059 +:108920000000000000000000000000000000000047 +:1089300000000000F0F00000000000000000000057 +:108940000000FF0000FF0000000000000000000029 +:108950000000000000000000000000000000000017 +:108960000000000000000000000000000000000007 +:1089700000000000000000000000000000000000F7 +:1089800000000000000000000000000000000000E7 +:10899000000000000000000000000000FF0000FFD9 +:1089A00000000000000000000000000000000000C7 +:1089B000000000000000F0F00000000000000000D7 +:1089C00000000000FF0000FF0000000000000000A9 +:1089D0000000000000000000000000000000000097 +:1089E0000000000000000000000000000000000087 +:1089F0000000000000000000000000000000000077 +:108A00000000000000000000000000000000000066 +:108A10000000000000000000000000002000000036 +:108A200000000000000000000000000090000000B6 +:108A30000000008001000100200041002000000033 +:108A40000000000000000000000082008410000010 +:108A500000000400000100000000000040000000D1 +:108A6000000000000000020002000000000088007A +:108A700000000000200000000000C000000088008E +:108A80000000000000002000200000000000200086 +:108A900000000000200000000000000000000000B6 +:108AA00000000000000000000000000000000000C6 +:108AB00000000000000420002000A10020020000AF +:108AC00000000000000000000000000000000000A6 +:108AD0000000000000000000000000200000000076 +:108AE0000000000000000000000000000000200066 +:108AF0000000000000000000000000000000000076 +:108B00000000000000000000000000000000040061 +:108B10000000000000000000000000000000000055 +:108B2000020002000000020000000000000000003F +:108B30000000040000000000000000000000000031 +:108B400000090000001000100000000000000000FC +:108B500000000000000000000000000000000040D5 +:108B60000000000000000000000000000000000005 +:108B700000000000000000000000000000000000F5 +:108B800000000000000000000000000000000000E5 +:108B900000000000000000000000000000000000D5 +:108BA0000000008800000008000000C000C000C0F5 +:108BB000000800100000001000100000000000007D +:108BC00000000000000000A0000002000000000003 +:108BD00000C00000040000000020000000000000B1 +:108BE0000000200000000000050000000000000060 +:108BF0000000000000000000000000000000000075 +:108C00000000200000000000000000000000000044 +:108C10000000002000000000000000000000000034 +:108C20000041000000000000010001000000000001 +:108C3000000041000000000000000000880000006B +:108C40000000000000000000000000000000000024 +:108C50000000000000000000C000900000000000C4 +:108C60000000000000000000000000000000000004 +:108C700000000000C0000000000000000000000034 +:108C800000000000000000000000000000000000E4 +:108C900000000000000000000000000000000000D4 +:108CA00000000000000000000000200004000000A0 +:108CB000000000000400000000200400000000008C +:108CC000090000000000000010000000000000008B +:108CD0000000000000000000000000000000000094 +:108CE0000000000000000000000000000000000084 +:108CF0000000000000000000000000000000000074 +:108D00000000000000000000000000000000000063 +:108D10000000000000000000000000000000000053 +:108D200000410000000000008811000000C08840E1 +:108D300000000000000000048200000000000000AD +:108D400000040000000400040040000000000000D7 +:108D500000090009000000004000000000000000C1 +:108D60000000000000400004004008000000000077 +:108D7000000000000000900000000800000000005B +:108D8000000000000000000000008400000000005F +:108D900000000000000000000000000000000000D3 +:108DA00000000000000000000000000000000020A3 +:108DB0000091000400000000000100040000008297 +:108DC000030804010000000104010000000000008D +:108DD00000001188000000000000000200000000F8 +:108DE000002000000000000005001000030000004B +:108DF0000000000000000000000000000000000073 +:108E00000000000000000000050008000300410011 +:108E10000000000000000000000000000000000052 +:108E200000000000000000009000000001000100B0 +:108E30000000040400000000C01100000000000059 +:108E400004000000000000412000000000000000BD +:108E5000000000000000000000008400000000008E +:108E600000000000000000000000000000001000F2 +:108E700000000000000000000000000000000000F2 +:108E80000000000000000000000082000000000060 +:108E90000000000000000000000000000000820050 +:108EA000000000000000008400000000000010101E +:108EB000200000000091000000000000000000847D +:108EC0000000800400C000000000800405000000D5 +:108ED0000000000000000000000000020084080004 +:108EE000000000000000000000000004000000007E +:108EF0000000000000000000000000000000000072 +:108F00000000000000000000000000000000000061 +:108F10000000000000000000000000000000000051 +:108F20000000000000000000000000000000000041 +:108F300000400000000001000000000900090000DE +:108F4000000000000009000000090100000000000E +:108F50000000000000000000000000000000000011 +:108F600000000000000000020000000000000000FF +:108F700000000000000000000000000000000000F1 +:108F800000000000000000000000000000000000E1 +:108F900000000000000000000000000000000000D1 +:108FA000000000000000000000000082000000003F +:108FB000000009C100880008100002000004200021 +:108FC0000008000000000000000000002000000079 +:108FD00000000300008800020000200011000900CA +:108FE000000400000000000000000000000000007D +:108FF0000000000040000088000200001140020054 +:10900000110004080000000000000800000000003B +:1090100000000000050000880000000008000800B3 +:109020000000002000000000000008000000000018 +:109030000000000001009000000000880000000017 +:1090400000000000010090008400000001002000EA +:109050000000000000000000000000000000000010 +:109060000000000000000000000000000000000000 +:1090700000000000000000000000000000000000F0 +:1090800000000000000000000000000000000000E0 +:1090900000000000000000000000000000000000D0 +:1090A00000000000000000000000000000000000C0 +:1090B0000000000000001100A100000000000000FE +:1090C0000000000000000900A10080000000110065 +:1090D0008000080000000000000000000000000008 +:1090E0000000000000000000000000000000000080 +:1090F0000000000000000000000000000000000070 +:10910000000000000000000000000000000000005F +:10911000000000000000000000000000000000004F +:10912000000000000000000000000000000000003F +:109130000000000000000000004009800010000056 +:10914000000000000000000080001180000011807D +:10915000001000800041000000000000000000003E +:1091600000000000000000000000000000000000FF +:1091700000010000000000000000000000000000EE +:1091800000000000000000000000000000000000DF +:1091900000000000000000000000000000000000CF +:1091A00000000000000000000000000000000000BF +:1091B00000000000000000000000000101020001AA +:1091C00000880000000000000084880001C000004A +:1091D000014000010002000100000000000000004A +:1091E000000000000000000000000000000000007F +:1091F000000000000000000000000000000000006F +:10920000000000000000000000000000000000005E +:10921000000000000000000000000000000000004E +:10922000000000000000000000000000000000003E +:10923000000000000000000000000000010008889D +:1092400008000000000000000000000190018801FB +:10925000C08501010000C000000000000000000007 +:1092600000000000000000000000000000000000FE +:1092700000000000000000000000000000000000EE +:1092800000000000000000000000000000000000DE +:1092900000000000000000000000000000000000CE +:1092A00000000000000000000000000000000000BE +:1092B000000000000000000000000000000041006D +:1092C00080808000110000000000000900082110CB +:1092D000800380A10911000080000000210003002C +:1092E000000000000000000000000000000000007E +:1092F000000000000000000000000000000000006E +:10930000000000000000000000000000000000005D +:10931000000000000000000000000000000000004D +:10932000000000000000000000000000000000003D +:10933000000000000000000000000000000000002D +:109340000011040000800000000800000000000080 +:109350000091002100000003001000110000000037 +:1093600000000000000000000000000000000000FD +:1093700000000000000000000000000000000000ED +:1093800000000000000000000000000000000000DD +:1093900000000000000000000000000000000000CD +:1093A00000000000000000000000000000000000BD +:1093B00000000000000000000000000000000000AD +:1093C000000000010000004000000001000000005B +:1093D0000000002100000000000100010001000069 +:1093E000000000000000000000000000000000007D +:1093F000000000000000000000000000000000006D +:10940000000000000000000000000000000000005C +:10941000000000000000000000000000000000004C +:10942000000000000000000000000000000000003C +:10943000000000000000000000000000000000002C +:1094400000000000000000E007008200008100E052 +:1094500007000000600600484200811181000048BA +:1094600000008281000000000000000000000000F9 +:1094700000000000000000000000000000000000EC +:1094800000000000000000000000000000000000DC +:1094900000000000000000000000000000000000CC +:1094A00000000000000000000000000000000000BC +:1094B00000000000000000000000000000000000AC +:1094C00000000000000000000000F0F000000000BC +:1094D0000000000000000000000000FF000000008D +:1094E000000000000000000000000000000000007C +:1094F000000000000000000000000000000000006C +:10950000000000000000000000000000000000005B +:10951000000000000000000000000000000000004B +:10952000000000000000000000000000000000003B +:10953000000000000000000000000000000000002B +:10954000000000000000000000000000F0F000003B +:1095500000000000000000000000000000FF00000C +:1095600000000000000000000000000000000000FB +:1095700000000000000000000000000000000000EB +:1095800000000000000000000000000000000000DB +:1095900000000000000000000000000000000000CB +:1095A00000000000000000000000000000000000BB +:1095B00000000000000000000000000000000000AB +:1095C0000000000000000000000000003C3C000023 +:1095D000FFFF00000000000000000000FFFF00008F +:1095E0003C3C000000000000000000000000000003 +:1095F000000000000000000000000000000000006B +:10960000000000000000000000000000000000005A +:10961000000000000000000000000000000000004A +:10962000000000000000000000000000000000003A +:10963000000000000000000000000000000000002A +:1096400000000000000000000000000000003C3CA2 +:10965000000000000000000000000000000000000A +:1096600000003C3C00000000000000000000000082 +:1096700000000000000000000000000000000000EA +:1096800000000000000000000000000000000000DA +:1096900000000000000000000000000000000000CA +:1096A00000000000000000000000000000000000BA +:1096B00000000000000000000000000000000000AA +:1096C0000000000000000000000000000000054055 +:1096D0002A06054C00A800610026000921A00561AA +:1096E0002A36C54900A800610007800D000000006F +:1096F000000000000000000000000000000000006A +:109700000000000000000000000000000000000059 +:109710000000000000000000000000000000000049 +:109720000000000000000000000000000000000039 +:109730000000000000000000000000000000000029 +:109740000000000000000000000000000000000019 +:109750000000FF00FFFF00000000000000FFFFFF0F +:10976000000000000004FFFF0000000000000000F7 +:1097700000000000000000000000000000000000E9 +:1097800000000000000000000000000000000000D9 +:1097900000000000000000000000000000000000C9 +:1097A00000000000000000000000000000000000B9 +:1097B00000000000000000000000000000000000A9 +:1097C0000000000000000000000000000000000099 +:1097D00000000000FF00000000000000000000FF8B +:1097E000FFFF000000000000FFFF0000000000007D +:1097F0000000000000000000000000000000000069 +:109800000000000000000000000000000000000058 +:109810000000000000000000000000000000000048 +:109820000000000000000000000000000000000038 +:109830000000000000000000000000000000000028 +:109840000000000000000000000000000000000018 +:109850000000000000000000F0F000000000000028 +:1098600000000000000000000000000000000000F8 +:1098700000000000000000000000000000000000E8 +:1098800000000000000000000000000000000000D8 +:1098900000000000000000000000000000000000C8 +:1098A00000000000000000000000000000000000B8 +:1098B00000000000000000000000000000000000A8 +:1098C0000000000000000000000000000000000098 +:1098D00000000000000000000000F0F000000000A8 +:1098E0000000000000000000000000000A0A000064 +:1098F0000000000000000000000000000000000068 +:109900000000000000000000000000000000000057 +:109910000000000000000000000000000000000047 +:109920000000000000000000000000000000000037 +:109930000000000000000000000000000000000027 +:109940000000000000000000000000000000000017 +:10995000000000000000000000000000000088007F +:1099600000000000000000000000000000000000F7 +:1099700000008800880002000000000000000000D5 +:109980000200820000000000020000008800880041 +:109990000003880004002000200088008800820066 +:1099A0000000C000000000000000000000000000F7 +:1099B00020022000200020002000000020002000C5 +:1099C0000000200000000000000000000000000077 +:1099D0002002000000000000000000000000000065 +:1099E0000000000000000000000000000000004037 +:1099F00010004000000000000000400000000000D7 +:109A00000000020000000000000202000000000050 +:109A10000000000000020000000000004100000003 +:109A20000000000000000000000000000000000036 +:109A30001000000000000000000000000000000016 +:109A400000000000000000000000000040020000D4 +:109A500000000000000000000000900090000200E4 +:109A600000008200000082000000000000000000F2 +:109A700000000205000000000000000000000000DF +:109A80000000000000000000000090000000000046 +:109A900000000000000000000000000000000000C6 +:109AA00000000000000000000000000000000000B6 +:109AB0000000000010000000000000000000000096 +:109AC0000000000000000000000000000000000096 +:109AD0000000000010000000000000000000000076 +:109AE000000000000000000000000000000000086E +:109AF00000000008002000840000008400000088AE +:109B0000000000000000000000C0000000880040CD +:109B100000000084000000000000000000000000C1 +:109B20000000000000000000000000000000000035 +:109B300000000000000080000000000000000000A5 +:109B40000000000000000000000000000000000015 +:109B500000000000000080000008002100210041FA +:109B600000080000000000090000002100030000C0 +:109B7000000000000000908900210021C0030010B7 +:109B80000041000000000005002100050021000048 +:109B90000000000000002000000004050000000597 +:109BA00000000000000500050000000000000000AB +:109BB000C0000000000000000000000000000000E5 +:109BC0000000000000000000000000000000000095 +:109BD0000000000000000000000000000000000085 +:109BE0000000000000000000000000000000000075 +:109BF0000000000000000000080800000000000055 +:109C0000000000000000000008000000000000004C +:109C100000000000000003028000000000000000BF +:109C20000000000000000000000000000000000034 +:109C30000000000000000000080000000300000019 +:109C40000000000000000000000000000000000014 +:109C50000000000000000000000000000000000004 +:109C60000000000000000011200500000000900925 +:109C700088000000000000008200040000090000CD +:109C8000000340000000A00082004011A005000079 +:109C90000000820440008200840084000000000074 +:109CA0000400000082000000A00082058200080974 +:109CB0000811900082000000820082008204A0004F +:109CC0008200820082000000820082008200A000E8 +:109CD0008200820082000000820082008204000074 +:109CE000000000080000000000000004000000C0A8 +:109CF00000080000008400000000000000000000D8 +:109D0000000000A000000000000000000300204050 +:109D10000000000000000000000000000000000043 +:109D2000000000000000000005000004000000002A +:109D30000000000000000000000000000000000122 +:109D40000000000000000000000000000000000013 +:109D500003004000000000000000000000000001BF +:109D600000000000000000000000000000000000F3 +:109D7000000000000003000800080005000020218A +:109D800000008200000000000000A00500000000AC +:109D90000000000000000000000000000000008043 +:109DA0000000820000000000A0008400820000008B +:109DB00000000000000000000000000000000000A3 +:109DC0000000080000000000A000000008000000E3 +:109DD000000000000000000000000000000800007B +:109DE00000000000000000C0000000102100000082 +:109DF0000090000400042100110000000000000099 +:109E0000850040000000000021000000000000006C +:109E10000000000000000000000000000000000042 +:109E2000000800000000000000000000000000002A +:109E30000000000000000000000000000000000022 +:109E40000000000000000000000000000000000012 +:109E50000000000000000000000000000000000002 +:109E60000000000000058800000000000003000062 +:109E70009000000000000009001100050021000012 +:109E800000088405000002408200024040000000FB +:109E90000000200000000004000000040040002139 +:109EA0000021820000000000080008000800820570 +:109EB0000000200400000009001100090000082033 +:109EC000000000000800000008000800080008006A +:109ED000A0000800000000000000000000000000DA +:109EE000000000000800000000000000000000006A +:109EF0000000000000002000000000001100000031 +:109F00000000000000000000000000000000000051 +:109F1000210000002100119000000000000000025C +:109F20000000000000000000000000000000000031 +:109F30000000000000000000000000002100000000 +:109F40000000000000000000000000000000000011 +:109F50000000000000000000000000000000000001 +:109F6000000000000000000000010001000100C02E +:109F70000001000100C00185000100010002000293 +:109F80000001000100C1000000010001000100C14A +:109F90000001000100C001410001850100820004B0 +:109FA0000001000100C000000000000100010001EC +:109FB00000C00001000100C0018301000101008414 +:109FC00000080001000100C00000000100010001C4 +:109FD00000C00001000100C00183010041010082B6 +:109FE00000100001000100C00000004100410041DC +:109FF00000840041004100894041000811410000F7 +:10A000000000004100410088000000410041004183 +:10A01000008203410041008540410020034100804F +:10A0200000800041004100A000000000004100410C +:10A03000004100C0004100410085404120412041D5 +:10A04000008000000041004100C0000000410041CC +:10A05000004100C000410041008510412041024103 +:10A06000008000800041004100C00000410003006A +:10A070000000008041008900000009008200020009 +:10A08000009184004100C1000080000041000300F5 +:10A09000000000804100A1000000050084000200D3 +:10A0A0000080A0004100C10000000000000341004A +:10A0B0000300000000804100850000000500A000B2 +:10A0C000210000108800C100C100002000004100F4 +:10A0D0000300000000804100C000000005001000E7 +:10A0E000A1000010A000C100C1000020000001007C +:10A0F0000100000000C00100C0000000000040009E +:10A1000084C00008C0000500C10000C08800010034 +:10A110000100000000C00100C000000000000900B4 +:10A12000A0C00008C1840500C1000020200000007C +:10A1300001000100000000C00100C000000000009C +:10A14000080040C000A1C1A04100C1000041400082 +:10A1500001000100000000C00100C000000000007C +:10A16000410004C00041C0004100C1000041400066 +:10A1700000C00001C0C100000000000100C0A0112B +:10A180000009000100C10000000000010001000002 +:10A1900000C00001C0C100000000000100C0A10318 +:10A1A0000089000100C10000000000010000000063 +:10A1B000000000C00001C0C100000000000100C09C +:10A1C00020030005000100C10000000000010000A4 +:10A1D000000000C00001C0C100000000000100C07C +:10A1E00020030005000100C1010000000001000083 +:10A1F00000000080004180C100000000004100C15B +:10A20000008800C1004100C10000000000410008BA +:10A2100000000080004180C100000000004100C13A +:10A2200002880041004100C1000000000041002000 +:10A23000000000000080004180C1000000000041DB +:10A24000008300A000C1004100C1000000000041E7 +:10A25000004000000080004180C10000000000417B +:10A26000008300A000C1004100C1200000000041A7 +:10A2700000400000C100800080C1000041040000D7 +:10A2800004004100C14100008010000041000000B6 +:10A2900080004100C100800080C100004102804078 +:10A2A00003004100C1418000800200004100000025 +:10A2B000800041000000C100800080C1000041001A +:10A2C000800002004100C141000080050000410003 +:10A2D000000080004100C100800080C100004100FA +:10A2E000800002004100C141800080050000410063 +:10A2F000000080004100C1004000C0C1000001001A +:10A30000C000C1000100C1110200C0000000010036 +:10A310000000C0000100C1004000C0C100000101F8 +:10A320008200C1000100C1050800C000000001005A +:10A330000000C00001000000C1004000C0C10000DA +:10A3400001000200C1000100C183C000C000000084 +:10A3500001000000C0000100C1004000C0C10000B9 +:10A3600001000200C1000100C1838200C0000000A2 +:10A3700001000000C00001000000000000000042D9 +:10A3800000000000000000008112004807004800A3 +:10A3900000000000000000820000000000000042F9 +:10A3A0000000000000000000811200480700480083 +:10A3B000000000000000000000000000000000009D +:10A3C0000042000000000000000081120048070069 +:10A3D0004800000000000000000000000000000035 +:10A3E0000042000000000000000081120048070049 +:10A3F0004800000000000000000000000000000015 +:10A40000000000000000000000000000000000004C +:10A41000000000000000000000000000000000003C +:10A42000000000000000000000000000000000002C +:10A43000000000000000000000000000000000001C +:10A44000000000000000000000000000000000000C +:10A4500000000000000000000000000000000000FC +:10A4600000000000000000000000000000000000EC +:10A4700000000000000000000000000000000000DC +:10A4800000000000000000000000000000000000CC +:10A4900000000000000000000000000000000000BC +:10A4A00000000000000000000000000000000000AC +:10A4B000000000000000000000000000000000009C +:10A4C000000000000000000000000000000000008C +:10A4D000000000000000000000000000000000007C +:10A4E000000000000000000000000000000000006C +:10A4F0000000000000000000000000000000757B6C +:10A50000000000000000000000000000000000004B +:10A51000000000000000000000000000DEAE757BBF +:10A52000000000000000000000000000000000002B +:10A53000000000000000000000000000DEAE00008F +:10A54000757B00000000000000000000000000001B +:10A550000000000000000000000000000000DEAE6F +:10A56000757B0000000000000000000000000000FB +:10A570000000000000000000000000000000DEAE4F +:10A5800060C603000000000000000031E000000091 +:10A59000000000000C0000000000000000C0630686 +:10A5A00060C603000000000000000031E000000071 +:10A5B000000000000C0000000000000000C0630666 +:10A5C000000060C603000000000000000031E00051 +:10A5D0000000000000000C0000000000000000C0AF +:10A5E000630660C603000000000000000031E000C8 +:10A5F0000000000000000C0000000000000000C08F +:10A60000630600000000000000008200000000005F +:10A610000000000000000000210000000000000019 +:10A62000000000000000A00000002000000000006A +:10A630000000000082000000200000000000000078 +:10A64000000000030000000000000000880000007F +:10A650000000000000002000000020008800000032 +:10A6600000000000000000000000000000000000EA +:10A670008800000000002000000020000000000012 +:10A6800000000000000000000000000000020000C8 +:10A690000000000200000002000020000000410055 +:10A6A00000000000000000000000000000000000AA +:10A6B0000000000000000000000005004000000055 +:10A6C000000000000000000000000000000000008A +:10A6D0000000000000000000000000020000000078 +:10A6E000000000000000000000000000000000006A +:10A6F000000000000000000000000000000020003A +:10A700000500000000000000000090400000020072 +:10A71000020000400040000000001000000008009F +:10A7200000000800208000000200000000009041AE +:10A730000000000000008200020000000000840011 +:10A740000200000002000000000000000000000005 +:10A7500000000000000000000000000000000000F9 +:10A760000000020000000040000000000040020065 +:10A7700000000000000000000000000000000000D9 +:10A7800000000000000000000000000000000000C9 +:10A79000808480880001008900000008000000001B +:10A7A0000010000000008004000000000000020013 +:10A7B0000088000000000000000000C0021000003F +:10A7C00000A00000000000000000040000000000E5 +:10A7D0000000000004000000000000000000000075 +:10A7E0000000004000000000000000000000000029 +:10A7F0000000000000000000000000000000000059 +:10A800000000000000000000000000000000004107 +:10A8100000000000004100000000000000000000F7 +:10A820002100000800000000C00000000000A0009F +:10A83000A000000000000000000000000000000078 +:10A840000000000000000000000000000100000007 +:10A8500008000000000000000000000000000000F0 +:10A8600000000000000000000000000000000000E8 +:10A8700000000000000000000000000000000000D8 +:10A8800000000000000000000000000000000000C8 +:10A8900000000000000000000000000000000000B8 +:10A8A000000084000010000000C000000000000054 +:10A8B0000000000000000000000000000000000098 +:10A8C000410021000000000000000000000008001E +:10A8D00000000088410003000000000000000000AC +:10A8E0000000000000000000000000000000000068 +:10A8F00000000000410000000000000021000000F6 +:10A900000000000000000000000000000000000047 +:10A91000000000000000000400000004010000002E +:10A920000000000000200000000000402010000097 +:10A9300000000000000008090000000900000000FD +:10A940000011000000094008000000400003000062 +:10A95000004001000100008008000000000000002D +:10A9600000000009000004000000000004000000D6 +:10A9700000000000000000000000000000000000D7 +:10A980000000000000000400400000000000000083 +:10A9900000000000000000000000000000000400B3 +:10A9A0000000000000000001000000000000800026 +:10A9B0000000000000000000000000000000000097 +:10A9C0000000000000000000000000000000000087 +:10A9D0000000000108000800000400000000000062 +:10A9E0000000000000000000000000000000000067 +:10A9F000000000000000000000000800000000004F +:10AA00000000000000000000000000000000000046 +:10AA10000000000000000000000000000000000036 +:10AA20000000020000009000000000000000000094 +:10AA30000480000000000000000000000000000092 +:10AA40008200000000000000000082000000000002 +:10AA50009000000000000000004000000005000021 +:10AA60000000000000000000000000008200000064 +:10AA700000000000000000000000000008000000CE +:10AA800000000000000000000000000000000000C6 +:10AA900000000000000000000000000000080000AE +:10AAA00000000000000000080000219000080000E5 +:10AAB00000008004000000000000000000C0000052 +:10AAC0000000000000000084000000000000000002 +:10AAD0000000000000000000000000010000000075 +:10AAE00000000000000000000800000000880000D6 +:10AAF0000000000000000000000000000000000056 +:10AB000000000300000000000800000041000000F9 +:10AB10000000000000002000000000000000000015 +:10AB200000000000200000000000000900090000F3 +:10AB300000001000C0000000000000000000000045 +:10AB40000000000082000000000000000000000083 +:10AB50000011000000000000010000000080000063 +:10AB600000000000000000000002000000000000E3 +:10AB70000000000000000000000000000000820053 +:10AB800000000000000000000000000000000000C5 +:10AB900000000000000000000000000000000000B5 +:10ABA0000200000002000200000000000000050496 +:10ABB0000000000000000000200000000004200051 +:10ABC0000000000002000000000000000000000083 +:10ABD000000000000000000000000400000000046D +:10ABE0000000000000000000000000000000000065 +:10ABF0000000000000000000000000000000000055 +:10AC00000000000000000000000000000000000044 +:10AC10000000000000000000000000000000000034 +:10AC20000000000000900000000000000000000094 +:10AC30000000010000000000000000000000000013 +:10AC40000000000000000000000000000000000004 +:10AC50000000000000000000000000001190002033 +:10AC600000000000000000000000000000000000E4 +:10AC700000000000000000000000000000000000D4 +:10AC800000000000000000000000000000000000C4 +:10AC900000000000000000000000000000000000B4 +:10ACA0000000000000000080000000000000000024 +:10ACB0000000000010000000000000000000000084 +:10ACC0000000000000000000000000000000000084 +:10ACD0000000000000000000000000000000A100D3 +:10ACE00000800000000000000000000000000000E4 +:10ACF0000000000000000000000000000000000054 +:10AD00000000000000000000000000000000000043 +:10AD10000000000000000000000000000000000033 +:10AD200000000000000000000000000000800000A3 +:10AD30000000000000000000000000000080000093 +:10AD40000000000000000000000000000000000003 +:10AD500000000000000000000000000000000003F0 +:10AD600000000000000300000000000000000000E0 +:10AD700000000000000000000000000000000000D3 +:10AD800000000000000000000000000000000000C3 +:10AD900000000000000000000000000000000000B3 +:10ADA0000000000000000000000000040000000897 +:10ADB0000000000000000090000000000000000201 +:10ADC0000000000000000000000000000000000083 +:10ADD0000000000000000000000000000000000073 +:10ADE000000000000000000400000000000000005F +:10ADF0000000000000000000000000000000000053 +:10AE00000000000000000000000000000000000042 +:10AE10000000000000000000000000000000000032 +:10AE2000000000000000000000000000000008908A +:10AE30000000000000000000010000000000000011 +:10AE40000000000002000000000000000000000000 +:10AE500000000000000000000000000000000000F2 +:10AE6000000000000000C090000000000000000092 +:10AE700000000000000000000000000000000000D2 +:10AE800000000000000000000000000000000000C2 +:10AE900000000000000000000000000000000000B2 +:10AEA000000000000000000000000000050000009D +:10AEB0008080000000000000000041000000000051 +:10AEC00000004100000080000000000000000000C1 +:10AED0000000000000000000000000000000000072 +:10AEE000000000000000000080800000080000005A +:10AEF0000000000000000000000000000000000052 +:10AF00000000000000000000000000000000000041 +:10AF10000000000000000000000000000000000031 +:10AF20000000000000000000000000000000001110 +:10AF30008000000000000000000000000000000091 +:10AF40000000000000000000000000000000000001 +:10AF500000000000000000000000000000000000F1 +:10AF60000000000000000000800800110000000048 +:10AF700000000000000000000000000000000000D1 +:10AF800000000000000000000000000000000000C1 +:10AF900000000000000000000000000000000000B1 +:10AFA00000000000000000000000000000000000A1 +:10AFB00000012000008800000000000000000000E8 +:10AFC0000000000000000000000000000000000081 +:10AFD0000000000000000000000000000000000071 +:10AFE00000000000000000000000C0018400840098 +:10AFF00084000000000000000000000000000000CD +:10B000000000000000000000000000000000000040 +:10B010000000000000000000000000000000000030 +:10B020000000000000000000000000000000000020 +:10B0300000000000000007000000410000E04200A6 +:10B040000082604100E007000000000000000000F6 +:10B0500000000000000000000000000000000000F0 +:10B06000000000000000000000000000008100E07F +:10B07000420041000000000000000000000000004D +:10B0800000000000000000000000000000000000C0 +:10B0900000000000000000000000000000000000B0 +:10B0A00000000000000000000000000000000000A0 +:10B0B000000000000000FF000000FF000000000092 +:10B0C0000000000000000000000000000000000080 +:10B0D0000000000000000000000000000000000070 +:10B0E000000000000000000000000000000000045C +:10B0F000000290909090000000000000000000000E +:10B10000000000000000000000000000000000003F +:10B11000000000000000000000000000000000002F +:10B12000000000000000000000000000000000001F +:10B130000000000000000000FF000000FF00000011 +:10B1400000000000000000000000000000000000FF +:10B1500000000000000000000000000000000000EF +:10B1600000000000000000000000000000000000DF +:10B170000004000290909090000000000000000089 +:10B1800000000000000000000000000000000000BF +:10B1900000000000000000000000000000000000AF +:10B1A000000000000000000000000000000000009F +:10B1B000000000000000000000000000000000008F +:10B1C000000000000000000000000000000000007F +:10B1D000000000000000000000000000000000006F +:10B1E000000000000000000000000000000000005F +:10B1F000000000000000000000000000000000004F +:10B20000000000000000000000000000000000003E +:10B21000000000000000000000000000000000002E +:10B22000000000000000000000000000000000001E +:10B230000000000000000000000000FF0000FFFF11 +:10B2400000000000000000000000000000000000FE +:10B2500000000000000000000000000000000000EE +:10B2600000000000000000000000000000000000DE +:10B27000000000000000FF000000000000000000CF +:10B2800000000000000000000000000000000000BE +:10B2900000000000000000000000000000000000AE +:10B2A000000000000000000000000000000000009E +:10B2B00000000000000000000000000000FF00008F +:10B2C000000000000000000000000000000000007E +:10B2D000000000000000000000000000000000006E +:10B2E000000000000000000000000000000000005E +:10B2F0000000000000000000FF000000000000004F +:10B30000000000000000000000000000000000003D +:10B31000000000000000000000000000000000002D +:10B32000000000000000000000000000000000001D +:10B3300000000000000000000000000000001500F8 +:10B340002A00054000A800610006C00D00A00061B1 +:10B350000036C00D00A0000000000000000000004A +:10B3600000000000000000000000000000000000DD +:10B370000000000000000000A061002E001D000081 +:10B3800000000000000000000000000000000000BD +:10B3900000000000000000000000000000000000AD +:10B3A000000000000000000000000000000000009D +:10B3B000000000000000000000000000000000008D +:10B3C000000000000000000000000000000000007D +:10B3D000000000000000000000000000000000006D +:10B3E000000000000000000000000000000000005D +:10B3F000000000000000000000000000000000004D +:10B40000000000000000000000000000000000003C +:10B41000000000000000000000000000000000002C +:10B42000000000000000000000000000000000001C +:10B43000000000000000000000000000000000000C +:10B4400000000000000000000000000000000000FC +:10B4500000000000000000000000000000000000EC +:10B4600000000000000000000000000000000000DC +:10B4700000000000000000000000000000000000CC +:10B4800000000000000000000000000000000000BC +:10B4900000000000000000000000000000000000AC +:10B4A000000000000000000000000000000000009C +:10B4B000000000000000000000000000000000008C +:10B4C000000000000000000000000000000000007C +:10B4D000000000000000000000000000000000006C +:10B4E000000000000000000000000000000000005C +:10B4F000000000000000000000000000000000004C +:10B50000000000000000000000000000000000003B +:10B51000000000000000000000000000000000002B +:10B52000000000000000000000000000000000001B +:10B53000000000000000000000000000000000000B +:10B5400000000000000000000000000000000000FB +:10B5500000000000000000000000000000000000EB +:10B5600000000000000000000000000000000000DB +:10B5700000000000000000000000000000000000CB +:10B5800000000000000000000000000000000000BB +:10B5900000000000000000000000000000000000AB +:10B5A000000000000000000000000000000000009B +:10B5B000000000000000000000000000000000008B +:10B5C000000000000000000000000000000000106B +:10B5D00000000000000000800000000000000000EB +:10B5E000000000000000000000000000000000005B +:10B5F000000000000000000000000000000000004B +:10B600000003000000000000000000000000000037 +:10B61000000000000000000000000000000000002A +:10B62000000000000000000000000000000000001A +:10B630000000840000000000000000000000000086 +:10B6400000000000000000000000000000000000FA +:10B650001000400000000000000441000000000055 +:10B6600000000000000000000000000000000000DA +:10B6700000000000000000000000000000000002C8 +:10B6800000000000000000000000000000000000BA +:10B6900000000000000000000000000000000000AA +:10B6A000000000000000000000000000400000005A +:10B6B000000000000000000000000000000000008A +:10B6C00000000000000000000000000002008200F6 +:10B6D0008200004000008200000000000000020024 +:10B6E00000000200000000008204000000000000D2 +:10B6F00000008200820000000200820000000000C2 +:10B7000000000000000000000000000000800000B9 +:10B7100000008200000082008200000000000000A3 +:10B720000000000002000000000000000000000017 +:10B730000000000002000000000000000000000007 +:10B740000000000082000000000000000000000077 +:10B7500000000000000000000000000000000000E9 +:10B7600000000000000000000000000100000000D8 +:10B7700000000000000000000000000000000000C9 +:10B7800000000000000000000000000000000004B5 +:10B7900000000000000000000000000000000000A9 +:10B7A0000000000000000300000000000000000096 +:10B7B0000000000000000000000000000000000089 +:10B7C0000000000000000000000000000000000079 +:10B7D00000000000000001000000200090000000B8 +:10B7E0000000000000000000100000000000002128 +:10B7F0000000000000000000000000000000002029 +:10B800000000000000000000000000000000000038 +:10B810000000000000000000000000000000000028 +:10B8200040000000000000000000000000000000D8 +:10B830000000000000000000000000000000000008 +:10B8400000000000000000000000000000000000F8 +:10B85000000000000000000004000000890000005B +:10B8600000000000000000000000000000000000D8 +:10B8700000000000000000000000000000000000C8 +:10B8800000010000000000000000000000000000B7 +:10B8900000000000000000000000000000000000A8 +:10B8A0000000000000000000000000000000000098 +:10B8B0000000000000000000000000000000000088 +:10B8C0000000000000000000000000000000000078 +:10B8D000000000000088004001800180000400009A +:10B8E000010000080000000000000000000000004F +:10B8F0000000000000000000000000000000000048 +:10B900000000200000000000000000000000000017 +:10B910000000000000000000000000000100000026 +:10B920000000000000000000000000000000000017 +:10B930000000000000000000000000000000000007 +:10B9400000000000000000000000000000000000F7 +:10B95000000000000000004111002020020800014A +:10B9600000002000000100000000000000000000B6 +:10B9700000000000000000000000000000000000C7 +:10B980000000000080000000000000000000000037 +:10B9900000000000000000000000000000000400A3 +:10B9A0000000000000000000000000000000000097 +:10B9B0000000000000000000000000000000000087 +:10B9C0000000000000000000000000000000000077 +:10B9D0000000000090009000000000000000000443 +:10B9E00000000000008000000000001000000405BE +:10B9F0000000000000200000000000000000000027 +:10BA00000000000000000400000000000000000032 +:10BA10000000000000000000008000000000002086 +:10BA20000000000000000000000000000000000016 +:10BA30000000000000000000000000000000000006 +:10BA400000000000000000000000000000000000F6 +:10BA500000000000000000000000000000000000E6 +:10BA6000008500000000090800200000000100001F +:10BA7000A100000000000001000000000000000024 +:10BA80000000000000000000800000000000000036 +:10BA900000C000000000008400000304000000005B +:10BAA0000001000000040000000000000000000091 +:10BAB0000000000000000000000000000000000086 +:10BAC0000000000000000000000000000000000076 +:10BAD0000000000000000000000000000000010065 +:10BAE00000000000008000800009108200000000BB +:10BAF00004000000000000050000000800400009EC +:10BB00000000000000000000000000000000000035 +:10BB10000000000500000000000000009020000070 +:10BB2000000200040000000000000000000000000F +:10BB30000000000000000000000000000000000005 +:10BB400000000000000000000000000000000000F5 +:10BB50000000000000000082000000000000000063 +:10BB600020000000000009080008020080200000FA +:10BB70000000800000000000000000000500000040 +:10BB800000000000000000000000000000000000B5 +:10BB900000000000000000000000000000000001A4 +:10BBA0000000000040010000000000000000000054 +:10BBB0000000000000000000000000000000000085 +:10BBC0000000000000000000000000000000000075 +:10BBD0000000000000000000000000000000000065 +:10BBE00001009000000000A00100000040000001E2 +:10BBF000000000000000000000C0009100000001F3 +:10BC00000000000000000000000000000000000034 +:10BC10000000000000000000000000000000000024 +:10BC20000000000082000000000000000000000092 +:10BC30000000000000000000000000000000000004 +:10BC400000000000000000000000000000000000F4 +:10BC500000000000000000000000000000000000E4 +:10BC600000001100A1000000000011004100800050 +:10BC70000009000000000000000000910091000594 +:10BC800000110000000000000000000000000000A3 +:10BC900000000000000000000000000000000000A4 +:10BCA0000000000000000000000000000000000094 +:10BCB0000000000000000000000000000000000084 +:10BCC0000000000000000000000000000000000074 +:10BCD0000000000000000000000000000000000064 +:10BCE0000000000000080980001000000841090061 +:10BCF0000041418000000000800080801100210090 +:10BD0000A000A08000000000000000000000000073 +:10BD100000000080000000000000000000010000A2 +:10BD200000000000800011000000000308800000F7 +:10BD30000000000000000000000000000000000003 +:10BD400000000000000000000000000000000000F3 +:10BD500000000000000000000000000000000000E3 +:10BD60000000000000000001010200010088010144 +:10BD7000010000010110000000008400C0900100DB +:10BD800001008500C19000000000000000000000DC +:10BD9000000000000008000000000000000000009B +:10BDA00000000000000090000000000000010104FD +:10BDB0000000000000000000000000000000000083 +:10BDC0000000000000000000000000000000000073 +:10BDD0000000000000000000000000000000000063 +:10BDE0000000000000000000010088880800010039 +:10BDF00000008800A0000101000000000090000089 +:10BE000000000000009000C00000000000000000E2 +:10BE10000000000000000000000002000000000020 +:10BE20000000000000000000010000000000880089 +:10BE30000000000000000000000000000000000002 +:10BE400000000000000000000000000000000000F2 +:10BE500000000000000000000000000000000000E2 +:10BE60000000000000000000000041000080800091 +:10BE7000410000110000800011410000000000801E +:10BE8000000000000300418000800000000000006E +:10BE900000000000000000004100000080000000E1 +:10BEA0000000000000000000000040000000000052 +:10BEB0000000000000000000000000000000000082 +:10BEC0000000000000000000000000000000000072 +:10BED0000000000000000000000000000000000062 +:10BEE0000000000000000000000000000011200021 +:10BEF0000080000000092111000000020000000085 +:10BF000000000000891180000400104000000000C3 +:10BF10000000000000000000000000000000000021 +:10BF20000000000000000000000000800000000091 +:10BF30000000000000000000000000000000000001 +:10BF400000000000000000000000000000000000F1 +:10BF500000000000000000000000000000000000E1 +:10BF600000000000000000000000000000000001D0 +:10BF700001000040000000910001000000000000EE +:10BF8000000000000000C08520000100000100004A +:10BF900000000000000000000000000000000000A1 +:10BFA0000000000000000000000000000008000089 +:10BFB0000000000000000000000000000000000081 +:10BFC0000000000000000000000000000000000071 +:10BFD0000000000000000000000000000000000061 +:10BFE0000000000000000000000000000000000051 +:10BFF000000000E007008206840043E00722812160 +:10C0000000420000420000000042004842000000E0 +:10C010000000000000000000000000E00700000039 +:10C0200000000000000000000000004200E00700E7 +:10C030000000001100E00700000000000000000008 +:10C0400000000000000000000000000000000000F0 +:10C0500000000000000000000000000000000000E0 +:10C0600000000000000000000000000000000000D0 +:10C07000000000000000F0F00000000000000000E0 +:10C0800000000000000000FF00FF000000FF0000B3 +:10C0900000FF0000000000000000000000000000A1 +:10C0A0000000000000000000000000000000000090 +:10C0B0000000000000000000000000000000000080 +:10C0C0000000000000000000000000000000000070 +:10C0D0000000000000000000000000000000000060 +:10C0E0000000000000000000000000000000000050 +:10C0F0000000000000000000F0F000000000000060 +:10C10000000000000000000000FF00FF000000FF32 +:10C11000000000FF00000000000000000000000020 +:10C12000000000000000000000000000000000000F +:10C1300000000000000000000000000000000000FF +:10C1400000000000000000000000000000000000EF +:10C1500000000000000000000000000000000000DF +:10C1600000000000000000000000000000000000CF +:10C1700000000000000000003C3C0000FFFF000049 +:10C1800000000000000000000000FF000000FF00B1 +:10C190000000FF00000000000000000000000000A0 +:10C1A000000000000000000000000000000000008F +:10C1B00000000000FFFFFFFF000000000000000083 +:10C1C000000000000000000000000000000000006F +:10C1D000000000000000000000000000000000005F +:10C1E000000000000000000000000000000000004F +:10C1F000000000000000000000003C3C00000000C7 +:10C20000000000000000000000000000FF0000002F +:10C21000FF000000FF000000000000000000000020 +:10C22000000000000000000000000000000000000E +:10C23000000000000000FFFF000000000000000000 +:10C2400000000000000000000000000000000000EE +:10C2500000000000000000000000000000000000DE +:10C2600000000000000000000000000000000000CE +:10C270000000000000000000000005402A06054CF8 +:10C2800000A800040006C00A21A0000000300C0035 +:10C2900012C003E303320C058AC000000000000056 +:10C2A000000000610006000D00A00000000000007A +:10C2B0000000000000610026000D00000061002663 +:10C2C000050500A0000000000000000000000000C4 +:10C2D000000000000000000000000000000000005E +:10C2E000000000000000000000000000000000004E +:10C2F0000000000000000000000000000000FF003F +:10C30000FFFF00000000FF00AAAAC3C30000000056 +:10C310000000000030303F3F00000000000000003F +:10C32000000000000000000000000000000000000D +:10C3300000000000000000000000000000000000FD +:10C3400000000000000000000000000000000000ED +:10C3500000000000000000000000000000000000DD +:10C3600000000000000000000000000000000000CD +:10C3700000000000000000000000000000000000BD +:10C38000FF00000000000000FF00AAAA000000005B +:10C3900000000000000030303F3F000000000000BF +:10C3A000000000000000000000000000000000008D +:10C3B000000000000000000000000000000000007D +:10C3C000000000000000000000000000000000006D +:10C3D000000000000000000000000000000000005D +:10C3E000000000000000000000000000000000004D +:10C3F000000000000000000000000000000000003D +:10C4000000000000F0F0000000003C3CF0F0FFFFF6 +:10C410000000000000000000500149D60000002884 +:10C42000000000000000000000000000000000000C +:10C4300000000000000000000000000000000000FC +:10C440000000000000000000C3C300000000000066 +:10C4500000000000000000000000000000000000DC +:10C4600000000000000000000000000000000000CC +:10C4700000000000000000000000000000000000BC +:10C48000000000000000F0F0000000003C3CF0F074 +:10C49000BEBE0000000000000000000001C050000F +:10C4A000000000000000000000000000000000008C +:10C4B000000000000000000000000000000000007C +:10C4C00000000000000000000000C3C300000000E6 +:10C4D000000000000000000000000000000000005C +:10C4E000000000000000000000000000000000004C +:10C4F000000000000000000000000000000000003C +:10C5000000000000000000000180000000000000AA +:10C510000000000000000080000000020000000099 +:10C52000000000800000000000000000000000008B +:10C5300000000000000000000000000000030000F8 +:10C5400000000000000000000000000000000000EB +:10C5500000000000000000000000000000000000DB +:10C5600000000000000000000000000000000000CB +:10C5700000000000000000000000000000000000BB +:10C580000000000000000000000002100000000099 +:10C59000000000000000000000400000000000005B +:10C5A000000000000010210000000000000000005A +:10C5B000000000000000000000000000000000007B +:10C5C000000000000000000000000000000000006B +:10C5D000000000000000000000000000000000005B +:10C5E000000000000000000000000000000000004B +:10C5F000000000000000000000000000000000003B +:10C6000000000000000000008200000000000000A8 +:10C610000000000000000000000000000000820098 +:10C620000000000000000000820000008200000006 +:10C6300000008200000082000000000000000000F6 +:10C6400000000000000000000000000000000000EA +:10C650000000000082000000000000000000000058 +:10C6600000000000000000000000000000000000CA +:10C6700000000000000000000000000000000000BA +:10C68000000900000000000000000200000000009F +:10C690000200000000000000000000000000000098 +:10C6A000000000000000000000000000000000008A +:10C6B0000000000000000000040000000000000076 +:10C6C0000000000000000000040000000000000066 +:10C6D0000000001004000000000000000000040042 +:10C6E000000000000000000000000000000000004A +:10C6F000000000000000000000000000000000003A +:10C700000000000000000000000000000000000029 +:10C710000000000000000000000000000000000019 +:10C720000000010000000000A00000040000000064 +:10C7300000000000000000000000000000000000F9 +:10C7400000000000000000000000000000002000C9 +:10C7500000000000000000000000000000000000D9 +:10C7600000000000000000000000000000000000C9 +:10C7700000000000000000000000000000000000B9 +:10C7800000000000000000000000000000000000A9 +:10C790000000000000001100000000000000000088 +:10C7A0000000000020000000000000000000000069 +:10C7B0000000000000080000000000000000000071 +:10C7C0000000000000000000000000000000000069 +:10C7D00080000000000000000000000000000000D9 +:10C7E0000000000000000000000000000000000049 +:10C7F0000000000000000000000000000000000039 +:10C8000000000000000000000041000000000000E7 +:10C810000000004001000080000000000000000453 +:10C820000000004001000000000000000040000087 +:10C8300000000000000000000000000000000000F8 +:10C8400000000000000000000000000000000000E8 +:10C850000000000000000000008000000000000058 +:10C8600000000000000000000000000000000000C8 +:10C8700000000000000000000000000000000000B8 +:10C8800000000000000000000000000000000000A8 +:10C890000000000000002000000400000000000074 +:10C8A0000001000000002004000000002100000141 +:10C8B0000000000000000000000000000000000078 +:10C8C0000000000000000004000000000000000064 +:10C8D0000000000000000000000000040000000054 +:10C8E0000000000000000000000000000000000048 +:10C8F0000000000000000000000000000000000038 +:10C900000000000000000000000000000000000027 +:10C910000000900000000000000000000400004043 +:10C920000000400000101000020040000000C000A5 +:10C9300000000004000000000000000000000000F3 +:10C9400000000000000000000000000000000000E7 +:10C950000000000090000000000000000000000047 +:10C9600000000000000000000000000000000000C7 +:10C9700000000000000000000000000000000000B7 +:10C980000000000000000000000000000000008423 +:10C99000000000C000C0008421000084008440002A +:10C9A00021010084000000008000800000000000E1 +:10C9B0000000000000000000000000000000000077 +:10C9C0000000000000000000000000000000000067 +:10C9D00000000000000000000000000000000084D3 +:10C9E0000000000000000000000000000000000047 +:10C9F0000000000000000000000000000000000037 +:10CA00000000000000000000000000000000000026 +:10CA1000000088000000000001090800000000007C +:10CA2000001140000002018201000300C00200006A +:10CA300000000000000900000000000000000000ED +:10CA400000000000000000000000000000002000C6 +:10CA500000000000000000002000000000000000B6 +:10CA600000000000000000000002000000000000C4 +:10CA700000000000000000000000000000000000B6 +:10CA800000000000000000000000000000000000A6 +:10CA90000000000000000000000010000000008204 +:10CAA00000000000110009000804200020400000E0 +:10CAB0000000000000000000000000000000000076 +:10CAC0000000000000000000000020000000000046 +:10CAD00000000000000000000000800000000000D6 +:10CAE0000000000000000000001000000000000036 +:10CAF0000000000000000000000000000000000036 +:10CB00000000000000000000000000000000000025 +:10CB1000000000000000000000000000010008000C +:10CB200000000000000040000000000000000000C5 +:10CB30000000C00000000000000000000000000035 +:10CB400000000000000000000000000000000000E5 +:10CB500000000000000000000000010000000001D3 +:10CB600000000000000000000000000000000000C5 +:10CB700000000000000000000000000000000000B5 +:10CB800000000000000000000000000000000000A5 +:10CB90000000000000000000000000000000110084 +:10CBA00021000000000000008000000000000000E4 +:10CBB00000001000800000000000000000000000E5 +:10CBC0000000000000000000000000000000000065 +:10CBD0000000000000000000000000004100000014 +:10CBE0000011000000000000000000000000000034 +:10CBF0000000000000000000000000000000000035 +:10CC00000000000000000000000000000000000024 +:10CC10000000000000000000000000000000000014 +:10CC200000410900000300808000800080098080AE +:10CC30000008000000090080000000008000800063 +:10CC400000000000000000000000000000000000E4 +:10CC500000000000000000000003000000000000D1 +:10CC60000000000000000083000000000000000041 +:10CC700000000000000000000000000000000000B4 +:10CC800000000000000000000000000000000000A4 +:10CC90000000000000000000000000000000000094 +:10CCA00000000001010000000088C000C000C001B9 +:10CCB000C0820201900008002002080090000200DB +:10CCC000C0000000000000000000000000000000A4 +:10CCD0000000000000000000000000000000000054 +:10CCE00000000000000000000090000000000000B4 +:10CCF0000000000000000000000000000000000034 +:10CD00000000000000000000000000000000000023 +:10CD10000000000000000000000000000000000013 +:10CD20000000000000008800889001000000000161 +:10CD30000000000000108890400800200000000063 +:10CD400000000000000000000000000000000000E3 +:10CD500000000000000000000000000000010000D2 +:10CD600000000000000000000000000000000000C3 +:10CD700000000000000000000000000000000000B3 +:10CD800000000000000000000000000000000000A3 +:10CD90000000000000000000000000000000000093 +:10CDA00000000000000000000000008041000000C2 +:10CDB000004000000020008000058000030000000B +:10CDC0000000000000000000000000000000000063 +:10CDD0000000000000000000000000000000000152 +:10CDE00000000000000005000000000041000500F8 +:10CDF0000000000000000000000000000000000033 +:10CE00000000000000000000000000000000000022 +:10CE10000000000000000000000000000000000012 +:10CE2000000000000000000000000011840000006D +:10CE30000000001100000000000800100080000049 +:10CE400000000005008000800000000000000000DD +:10CE500000000000000000000000000000000000D2 +:10CE600000010004000000000000001100000000AC +:10CE70008000000000000000000000000000000032 +:10CE800000000000000000000000000000000000A2 +:10CE90000000000000000000000000000000000092 +:10CEA00000000000000000000000000000019100F0 +:10CEB00088000000000000A000840001000000C005 +:10CEC000000000000000000400020000000000005C +:10CED0000000000000000000000000000000000052 +:10CEE000000000010001000000000000000100003F +:10CEF00000009000000000000000000000000000A2 +:10CF00000000000000000000000000000000000021 +:10CF10000000000000000000000000000000000011 +:10CF2000000000000000000000000000002100E000 +:10CF300012008141000000E04200000000000048B3 +:10CF40004200000600000000420000000000000057 +:10CF500000000000000000000000000000000000D1 +:10CF60000000000000008100004800000021500087 +:10CF700000E00700000000000000000000000000CA +:10CF800000000000000000000000000000000000A1 +:10CF90000000000000000000000000000000000091 +:10CFA00000000000000000000000000000000C0C69 +:10CFB0000C0C00FF00FF000000000000000000005B +:10CFC0000000000000000000000000000000000061 +:10CFD0000000000000000000000000000000000051 +:10CFE0000000000000000000000000000000000041 +:10CFF00018181818000000000000000000000000D1 +:10D000000000000000000000000000000000000020 +:10D010000000000000000000000000000000000010 +:10D020000000000000000000000000000000000000 +:10D030000C0C0C0C00FF00FF0000000000000000C2 +:10D0400000000000000000000000000000000000E0 +:10D0500000000000000000000000000000000000D0 +:10D0600000000000000000000000000000000000C0 +:10D070000000181818180000000000000000000050 +:10D0800000000000000000000000000000000000A0 +:10D090000000000000000000000000000000000090 +:10D0A0000000000000000000000000000000000080 +:10D0B00000000000000000000000000000000080F0 +:10D0C0002006000000000084208000000000008096 +:10D0D000200200000000000000000000000000002E +:10D0E0000000000000000000000000000000000040 +:10D0F0000000000000000000000000000000000030 +:10D10000000000000000000000000000000000001F +:10D11000000000000000000000000000000000000F +:10D1200000000000000000000000000000000000FF +:10D1300000000000000000000000000000000000EF +:10D1400000000000000000000000000000000000DF +:10D1500000000000000000000000000000000000CF +:10D1600000000000000000000000000000000000BF +:10D1700000000000000000000000000000000000AF +:10D18000000000000000000000000000000000009F +:10D19000000000000000000000000000000000008F +:10D1A000000000000000000000000000000000007F +:10D1B000000000000000000000000000000000006F +:10D1C000000000000000000000000000000000005F +:10D1D000000000000000000000000000000000004F +:10D1E000000000000000000000000000000000003F +:10D1F000000000000000000000000000000000002F +:10D20000000000000000000000000000000000001E +:10D21000000000000000000000000000000000000E +:10D2200000000000000000000000000000000000FE +:10D23000000000000000000080400026000C0000FC +:10D24000306100060009000530610007000C000C89 +:10D25000300000000000000000000000000000009E +:10D2600000000000000000000000000000000000BE +:10D27000000000610007800D000000610002800DC9 +:10D28000000000000000000000000000000000009E +:10D29000000000000000000000000000000000008E +:10D2A000000000000000000000000000000000007E +:10D2B0000000000000000000000000000F0FFFFF52 +:10D2C00000000000000000000F0F00000000F0F060 +:10D2D000000000000000000000000000000000004E +:10D2E000000000000000000000000000000000003E +:10D2F000000000000000000000000000000000002E +:10D30000000000000000000000000000000000001D +:10D31000000000000000000000000000000000000D +:10D3200000000000000000000000000000000000FD +:10D3300000000000000000000000000000000F0FCF +:10D34000000000000000000000000F0F00000000BF +:10D35000F0F00000000000000000000000000000ED +:10D3600000000000000000000000000000000000BD +:10D3700000000000000000000000000000000000AD +:10D38000000000000000000000000000000000009D +:10D39000000000000000000000000000000000008D +:10D3A000000000000000000000000000000000007D +:10D3B000000000000000000000000000000000006D +:10D3C0000000F0F00000000000000000000000007D +:10D3D000000000000000000000000000000000004D +:10D3E000000000000000000000000000000000003D +:10D3F000000000000000000000000000000000002D +:10D40000FFFFFFFF00000000000000000000000020 +:10D41000000000000000000000000000000000000C +:10D4200000000000000000000000000000000000FC +:10D4300000000000000000000000000000000000EC +:10D4400000000000F0F000000000000000000000FC +:10D4500000000000000000000000000000000000CC +:10D4600000000000000000000000000000000000BC +:10D4700000000000000000000000000000000000AC +:10D480000000FFFF0000000000000000000000009E +:10D49000000000000000000000000000000000008C +:10D4A000000000000000000000000000000000007C +:10D4B000000000000000000000000000000000006C +:10D4C000000000000000000000000000000000005C +:10D4D000000000000000000000000000000000004C +:10D4E000000000000000000000000000000000003C +:10D4F0000000000000000000000000030000000029 +:10D50000000000000000000000000000000000001B +:10D51000000000000000000000000000000000000B +:10D5200000000000000000000000000000000000FB +:10D5300000000000000000000000000040000000AB +:10D5400000000000000000000000000021000000BA +:10D5500000000000000000000002000000000000C9 +:10D5600000000000000000000000000000000000BB +:10D570000000004000000000000000020000004029 +:10D58000000000000000000000000000000000009B +:10D590000000000000004000004000000004000007 +:10D5A000000000000000000000000000000000007B +:10D5B0000000000000000002000000000004000065 +:10D5C0000000000002000200000000000200000055 +:10D5D0000200901082000000000000000000000027 +:10D5E000000000000000000000000000000000003B +:10D5F0000000000002000000000000000000000029 +:10D60000000000000000000000000000000000001A +:10D610000000000000000000040000000200000004 +:10D6200000000000000000000000000000000000FA +:10D6300000000000000000000000100000000004D6 +:10D6400000000000000000000000000000000000DA +:10D6500000000000000000000000000000000000CA +:10D6600000000000000000000000000000000000BA +:10D6700000000000000000000000000000000000AA +:10D68000000000000000000000000000000000009A +:10D69000000000000000000000008000000080008A +:10D6A0000200000000000000000000000000000078 +:10D6B00004000000000000000000000080000000E6 +:10D6C0000001000000000000000000000000000059 +:10D6D0000100000000000000000000000000000049 +:10D6E000000000000000000000000000000000003A +:10D6F000000000000000000000000000000000002A +:10D700000000000000000000000000000000000019 +:10D7100000000000000088000000900000000000F1 +:10D7200000000000000000000000000000000000F9 +:10D7300000210000000000000000000000000000C8 +:10D7400000210000000000000000000000000000B8 +:10D750000000200000000000000040000000000069 +:10D760000000000000000084000000000000000035 +:10D7700000000000000000000000000000000000A9 +:10D780000000000000000000000000000000000099 +:10D790000000000000000000000000000000000089 +:10D7A0000000000000000000000000000000000079 +:10D7B0000000000000000000000000000000000069 +:10D7C0000000000000000000000000000000000059 +:10D7D00000400000000000040000000001200000E4 +:10D7E00000000000004000000000000000000000F9 +:10D7F0000000000000000000000001800180000027 +:10D800000000000000000000000000000000000018 +:10D810000000000000000000000000000100008087 +:10D8200000000000000000000000000000000000F8 +:10D8300000000000000000000000000000000000E8 +:10D840000000000000000040000000000000000098 +:10D850000000000000000000110000000000200196 +:10D860000000000000901100000000000000000017 +:10D870000000400000000000000000002020040420 +:10D880000000000000000000000000000000000098 +:10D890000000000000000000000000000000200068 +:10D8A0000004000000000000000000000000000074 +:10D8B0000000000000000000000000000000000068 +:10D8C0000000000000000000000000000000000058 +:10D8D0000000000000000000000000000000000048 +:10D8E0000000000000000000000000000000000038 +:10D8F0000000000000009000900000000000000008 +:10D900000000000000000000000000000000000017 +:10D910000000000000000000000090000000000077 +:10D9200000000000001100000000000000000000E6 +:10D9300000000000000000000000000000000000E7 +:10D9400000000000000000000000000000000000D7 +:10D95000000000C00090000000840004008400006B +:10D9600000000000210000200084000021000000D1 +:10D9700000000000000000000000000000000000A7 +:10D980000000000000000000000000000000000097 +:10D990000000000000C000000000000000000000C7 +:10D9A0000000000000000000000000000000000077 +:10D9B0000000000000000000000000000000000067 +:10D9C0000000000000000000000000000000000057 +:10D9D0000000000000000000000000008800880037 +:10D9E000010900020000A009000000000000000082 +:10D9F00000000002000000000002000000000180A2 +:10DA0000010000000000000000000000000900000C +:10DA10000000000000000000000000000000000006 +:10DA200001000000000000000000000000000000F5 +:10DA300000000000000000000000000000000000E6 +:10DA400000000000000000000000000000000000D6 +:10DA50000000000000000000200020000000110075 +:10DA600000901000000020000000000000000500F1 +:10DA700000000000000005000000000000000000A1 +:10DA80001040200000000000000000000000000026 +:10DA90000000000000000000000000000000000086 +:10DAA00000001000008200000000000000000000E4 +:10DAB0000000000000000500000000000000000061 +:10DAC0000000000000000000000000000000000056 +:10DAD0000000000000000000000000000000000046 +:10DAE0000000000000000000000000000000000036 +:10DAF0000000000000000000000000000000000026 +:10DB00000000010090000000000000000000000084 +:10DB10000000000000000000000000000000000005 +:10DB200000000000010000000000000000000000F4 +:10DB300000000000000000000000000000000000E5 +:10DB400000000000000000000000000000000100D4 +:10DB5000880000000000000000000000000000003D +:10DB600000000000000000000000000000000000B5 +:10DB700000000000000000000000000000000000A5 +:10DB8000000000001100A1000000000000000000E3 +:10DB90000000000000000000000000000000000085 +:10DBA0000000000000001100210000000000000043 +:10DBB0000000000000000000000000000000000065 +:10DBC0000000000000000000000000000000000055 +:10DBD000090000000000000000000000000000003C +:10DBE0000000000000000000000000000000000035 +:10DBF0000000000000000000000000000000000025 +:10DC00000000000000000008098000030000000080 +:10DC10000000000000000000000000000000000004 +:10DC200000000000000000000041090000030000A7 +:10DC30000000001000800000000000000000000054 +:10DC400000000000000000000000000000000000D4 +:10DC500000000000000000000000000000000000C4 +:10DC6000000000000000000000000000000000882C +:10DC700000000000000000000000000000000000A4 +:10DC8000000000000000000000010102000000048C +:10DC90000000000000000000000000000000000084 +:10DCA0000000000000000000000000010100000072 +:10DCB00000000000000000880000000000000000DC +:10DCC0000000000000000000000000000000000054 +:10DCD0000000000000000000000000000000000044 +:10DCE0000000000000000000010000000000000132 +:10DCF0000000000000000000000000000000000024 +:10DD0000000000000000000000000100888888007A +:10DD10000000000000000000000000000000000003 +:10DD2000000000000000000000000000000088006B +:10DD300000000100000000000000000000000000E2 +:10DD400000000000000000000000000000000000D3 +:10DD500000000000000000010000010100000000C0 +:10DD600000000000000000000000080000000000AB +:10DD7000002005000000000000000000000000007E +:10DD800000000000000000000000000041000080D2 +:10DD9000000009000000000000000000000000007A +:10DDA0000000000000000000000000000000000073 +:10DDB0000000000040000000000000000000000023 +:10DDC0000000000000000000000000000000000053 +:10DDD00000000000000000100003000211410000DC +:10DDE000000000000000000000000000000000042F +:10DDF0000000000000000000000000000000000023 +:10DE00000000000000000000000000000000001101 +:10DE10000000008000000000000000000000000082 +:10DE200000000000000000000000000000000000F2 +:10DE300000000011000000008011800000000000C0 +:10DE400000000000000000000000000000000000D2 +:10DE500000000000000000000000000000000000C2 +:10DE600000000000000000000000000000000000B2 +:10DE700000010000000000000000000000000000A1 +:10DE80000000000000000000000000000000000092 +:10DE90000001000000400000000000000000000041 +:10DEA0000000000000000000000000000000000072 +:10DEB00000000000000100000000C001200002007E +:10DEC0001000000000000000000000000000000042 +:10DED0000000000000000000000000000000000042 +:10DEE00000000000000000000000480000E000000A +:10DEF0000000810A00E007000000000000000000B0 +:10DF00000000000000000000000000000000000011 +:10DF10000000000000E00700820000000000000098 +:10DF200000000000000000000000000000000000F1 +:10DF300000000000000000E0000081000000000080 +:10DF400007000000000000000000000000000000CA +:10DF5000000000000000000000000000000000E0E1 +:10DF600000000000000000000000000000000000B1 +:10DF700000000000000000000000000000000000A1 +:10DF80000000000000000000000000000000000091 +:10DF90000000000000000000F0F0000000000000A1 +:10DFA0000000000000000000000000000000000071 +:10DFB00000000000000000000000000000003A3AED +:10DFC000000F000000000000000000000000000042 +:10DFD0000000000000000000000000000000000041 +:10DFE0000000000000000000000000000000000031 +:10DFF0000000000000000000000000000000000021 +:10E000000000000000000000000000000000000010 +:10E0100000000000000000000000F0F00000000020 +:10E0200000000000000000000000000000000000F0 +:10E0300000000000000000000000000000000000E0 +:10E040003A3AF0FF0000000000000000000000006D +:10E0500000000000000000000000000000000000C0 +:10E0600000000000000000000000000000000000B0 +:10E0700000000000000000000000000000000000A0 +:10E080000000000000000000000000000000000090 +:10E090000000000000000000000000000000FFFF82 +:10E0A0000000000000000000000000000000000070 +:10E0B0000000000000000000000000000000000060 +:10E0C0000000000000000000000000000000000050 +:10E0D0000000000000000000000000000000000040 +:10E0E0000000000000000000000000000000000030 +:10E0F0000000000000000000000000000000000020 +:10E10000000000000000000000000000000000000F +:10E1100000000000000000000000000000000000FF +:10E1200000000000000000000000000000000000EF +:10E1300000000000000000000000000000000000DF +:10E1400000000000000000000000000000000000CF +:10E1500000000000000000000000000000000000BF +:10E1600000000000000000000000000000000000AF +:10E170000000000000610006C00D000000610036D4 +:10E18000C00C00A000000000000000000000000023 +:10E1900000000000000000000000000005600A060A +:10E1A000054C00A800000000000000000000000076 +:10E1B00000000000000000000000000000000060FF +:10E1C0000006000C0000100000000000000000002D +:10E1D000000000000000000000000000000000003F +:10E1E00000000000000000610006000800000000C0 +:10E1F000000000000000000000000000000000001F +:10E20000000000FF0000000000000000000000000F +:10E2100000000000000000000000000000000000FE +:10E220000000FFFF000000000000000000000000F0 +:10E2300000000000000000000000000000000000DE +:10E2400000000000FFFF00000000000000000000D0 +:10E2500000000000000000000000000000000000BE +:10E26000000000000000000000000000FFC3F055A7 +:10E27000000000000000000000000000000000009E +:10E280000000000000FF000000000000000000008F +:10E29000000000000000000000000000000000007E +:10E2A000000000000000000000000000000000006E +:10E2B000000000000000000000000000000000005E +:10E2C000000000000000000000000000000000004E +:10E2D000000000000000000000000000000000003E +:10E2E000000000000000000000000000000000C36B +:10E2F000F0550000000000000000000000000000D9 +:10E30000000000000000000000000000000000000D +:10E3100000000000000000000000000000000000FD +:10E32000000000000000F0F000000000000000000D +:10E3300000000000000000000000000000000000DD +:10E340000000000000000000F0F0000000000000ED +:10E3500000000000000000000000000000000000BD +:10E3600000000000000000000000000000000000AD +:10E37000000000000000000000000000000000009D +:10E38000000000000000000000000000000000008D +:10E39000000000000000000000000000000000007D +:10E3A0000000000000000000F0F00000000000008D +:10E3B000000000000000000000000000000000005D +:10E3C00000000000000000000000F0F0000000006D +:10E3D000000000000000000000000000000000003D +:10E3E000000000000000000000000000000000002D +:10E3F000000000000000000000000000000000809D +:10E40000000000000080000000800000000000000C +:10E4100000000000000000000000000000000000FC +:10E42000000000000000400000000000000040006C +:10E4300002000000000000030000000000000000D7 +:10E44000000000000000000020000000008000002C +:10E45000200020000000000000000000000000007C +:10E46000000000000000000020000000000000008C +:10E47000200000000000000000000000000000007C +:10E480000008000000000008000000080000000074 +:10E49000000000000000000000000000000000007C +:10E4A000000000000000000000000000000000006C +:10E4B000000000000000000000000000000000005C +:10E4C000000000000000000000000000000000400C +:10E4D000000000000000000000000000000000003C +:10E4E000000000000000000000000000000000002C +:10E4F000000000000000000000000000000002001A +:10E5000000000200020810000000000000000200ED +:10E5100000000200000000000200000002000000F5 +:10E5200000000200000002000000020002000000E3 +:10E530000000020000400000000000000000000099 +:10E5400000000000000000000000000000000100CA +:10E5500004000000000000000000000000000000B7 +:10E5600000000000000000000000000000000000AB +:10E57000000000000000000000000000000000009B +:10E58000000000000000000180000000000000000A +:10E590000000000004000000000004000000000073 +:10E5A00000000000000000008000000000000000EB +:10E5B000000000000000000000000000000000005B +:10E5C0000000000004000000000000000000000047 +:10E5D00002000000000000000040000000000400F5 +:10E5E0000000000000000000040000000000000027 +:10E5F000000000000000000000000000000000001B +:10E600000000000000000000820000000000040084 +:10E61000000000008900000000004000C10004006C +:10E62000000000000000A00000000000000000004A +:10E6300000000000000000000000000000000000DA +:10E6400000000000000000000000000000000000CA +:10E6500000000000000000000000000001000000B9 +:10E66000004000000000000000000000000000006A +:10E67000000000000000000000000000000000009A +:10E68000000000000000000000000000000000008A +:10E6900080000000000020000000000000002000BA +:10E6A00080000000000000000000000000000000EA +:10E6B000000000000000000000000000000000005A +:10E6C000000000000000000000000000000000004A +:10E6D0000000000000000000000000000000040036 +:10E6E0000000008300000000008200000000000025 +:10E6F000000000000000000000000000000000001A +:10E700000000000000000000000001000100008087 +:10E71000018000000005000020004005A0840140A9 +:10E720008400040000000000000000000000000061 +:10E730000000010000000100008000000000000057 +:10E7400000000000000000000000000000000000C9 +:10E750000000000000000000010001800000000037 +:10E7600000000100000000000000010000000000A7 +:10E770000000000000000000000000000000000099 +:10E780000000000000000000000000002000040065 +:10E79000002002040000000000000000008400408F +:10E7A00020000000800000000000000000000000C9 +:10E7B0000000000010000000200000040000000025 +:10E7C0000000004000000000000000000000000009 +:10E7D0000000000000000000000020000404000011 +:10E7E0000000000004000000000000000400000021 +:10E7F0000000000000000000000000000000000019 +:10E8000000000000000000000000900090000000E8 +:10E8100000000000002088000000000088000000C8 +:10E820000000A008000004000000A000820000001A +:10E830000000000090000000000000000000000048 +:10E8400000000000000000000000000000000000C8 +:10E8500000000000000090000100000000000080A7 +:10E86000010000000003000000000008002000007C +:10E87000000000000005000800000000000000008B +:10E880000000000000000000000000000000000088 +:10E89000038400000000000100000000000000846C +:10E8A00000000000000100008000000000000000E7 +:10E8B0000084000000C000C000000000008400844C +:10E8C0000000000000000000000000000000000048 +:10E8D000000000000000000000C0020000000084F2 +:10E8E00000400200000000000000000000000001E5 +:10E8F0000000000000000000000000000000000018 +:10E9000000000000000000000008200000000000DF +:10E9100000000000000000000000000988009000D6 +:10E92000000000000104C089000205200000A009C9 +:10E930000002004000000000000000090102000089 +:10E9400000000000000800020002000000000000BB +:10E9500000000000000000000000000000000000B7 +:10E96000000000000000000000020000000000099C +:10E970000000004000000000000000100000000047 +:10E9800000080000000000000000000000820000FD +:10E99000000000000088000000000000000000905F +:10E9A0001100000000002000004000008401000071 +:10E9B0002000000000010000000000000000209086 +:10E9C00000000088000000000000000000000000BF +:10E9D0000000000000000000000000000000000037 +:10E9E0000000000000000000000000000000000027 +:10E9F0000000000000000000000000000000000017 +:10EA000000000000000000000800000000000000FE +:10EA10000000000000000100208400000001000050 +:10EA2000000090000000010084000100C00100000F +:10EA3000000000000000009002400002820201007D +:10EA400000000000000000000000000000000000C6 +:10EA500000000000000000000000000000000000B6 +:10EA60000100009000000000000090000000000085 +:10EA70000000900000000000000000000000000006 +:10EA80000000000000000000000000000000000086 +:10EA900000000000000000000900800000000008E5 +:10EAA0000000000084000000110021000300800924 +:10EAB00000000000000000000000808000808080D6 +:10EAC0001100210000000000000000000000000014 +:10EAD0000000000000000000000000000000000036 +:10EAE00000001100218000000000000080000000F4 +:10EAF0000000110080000000000000000000000085 +:10EB00000000000000000000000000000000000005 +:10EB1000000000000000000000000005008011203F +:10EB200000000000000000090000800889000009C2 +:10EB300000000000000000000000800000830020B2 +:10EB400000000008090000030000000000000000B1 +:10EB500000000001000000000000000000000000B4 +:10EB600000000000004109000003000000000080D8 +:10EB70000000008000000080000000800000000015 +:10EB80000000000000000000000000000000000085 +:10EB90000000000000000000000000000000000273 +:10EBA00001010088000000000000000008010500CD +:10EBB000080020080000000000000000040040825F +:10EBC00020002040000101000000000000000000C3 +:10EBD0000000000000000000000000000000000035 +:10EBE00000000000000000010102000000A0000081 +:10EBF00000080000000800000020000000080000DD +:10EC00000000000000000000000000000000000004 +:10EC100000000000000000000000000000000100F3 +:10EC2000C088900001000100000000000000000802 +:10EC30008804100200200000000000000000020410 +:10EC400000400820002000008800000001000000B3 +:10EC500000000000000000010000000000000000B3 +:10EC6000000000000000000001008800C0900000CB +:10EC70000100008888000000010000888800000072 +:10EC80000000000000000000000000000000000084 +:10EC90000000000000000000000000000000000074 +:10ECA0000800808300002000080000000000110020 +:10ECB00000800080008009000900000000000000C2 +:10ECC000C080000000000000000000000000030001 +:10ECD0000000000000000000000100000000000033 +:10ECE000000000000000000000000900000000809B +:10ECF0001100410000800000000041000080000081 +:10ED00000000000000000000000000000000000003 +:10ED100000000000000000000000000000000000F3 +:10ED20000000001111000080000000000000000041 +:10ED30000000000921040080000000000000000025 +:10ED400000008040000980800000000000090000F1 +:10ED500000000000000000000000000100000000B2 +:10ED60000000000000000000000000000011801101 +:10ED700000000000001100000080000000110000F1 +:10ED80000080000000000000000000000000000003 +:10ED90000000000000000000000000000000000073 +:10EDA0000000000000010100004000000000000021 +:10EDB000000000000001000100C000000000000091 +:10EDC000000000908400200040044000000000008B +:10EDD0000000000000000000000000000001000032 +:10EDE0000000000000000000000000000000000122 +:10EDF0002001008800000001000000400000000128 +:10EE000000000040000000000000000000000000C2 +:10EE100000000000000000000000000000000000F2 +:10EE2000000000000000000000E007008200000079 +:10EE300000480700000000000048420000060006ED +:10EE40000000070000000000000042000000000079 +:10EE500000E00000000000000000000000000000D2 +:10EE600000000000000000000000000000000000A2 +:10EE7000000000E0070081000000000007008200A1 +:10EE800000000000070082000000000000000000F9 +:10EE90000000000000000000000000000000000072 +:10EEA0000000000000000000000000000000F0F082 +:10EEB0000000000000000000000000000000000052 +:10EEC0000000000000000000000000000000000042 +:10EED0000000000000000000000000000000000032 +:10EEE0000000000000000000000000000000000022 +:10EEF00000000000FF000000FF0000000000000014 +:10EF0000F0F0000000000000F0F000000000000041 +:10EF100000000000000000000000000000000000F1 +:10EF200000000000000000000000000000000000E1 +:10EF3000F0F00000000000000000000000000000F1 +:10EF400000000000000000000000000000000000C1 +:10EF500000000000000000000000000000000000B1 +:10EF600000000000000000000000000000000000A1 +:10EF7000000000000000FF000000FF000000000093 +:10EF80000000F0F0000000000000F0F000000000C1 +:10EF90000000000000000000000000000000000071 +:10EFA0000000000000000000000000000000000061 +:10EFB0000000000000000000000000000000000051 +:10EFC00000842080000000000000000000084000D5 +:10EFD000008420000000000000000000000000008D +:10EFE0000000000000000000000000000000000021 +:10EFF0000000000000000000000000000000000011 +:10F000000000000000000000000000000000000000 +:10F0100000000000000000000000000000000000F0 +:10F02000000000000000000000000000000000FFE1 +:10F030000000FFFF000000000000000000000000D2 +:10F0400000000000000000000000000000000000C0 +:10F0500000000000000000000000000000000000B0 +:10F0600000000000000000000000000000000000A0 +:10F07000000000000000000000FF0000FFFF000093 +:10F0800000000000FFFF000000000000FFFF000084 +:10F090000000000000000000000000000000000070 +:10F0A0000000000000000000000000000000000060 +:10F0B00000FF000000000000000000000000000051 +:10F0C0000000000000000000000000000000000040 +:10F0D0000000000000000000000000000000000030 +:10F0E0000000000000000000000000000000000020 +:10F0F0000000000000000000000000FF0000000011 +:10F1000000000000000000000000000000000000FF +:10F1100000000000000000000000000000000000EF +:10F1200000000000000000000000000000000000DF +:10F13000000005002A06054C00A805610017000C18 +:10F14000000030000007000C000C0500003000003B +:10F1500000003000000000C0000000600006000C4D +:10F16000000000000000000000000000000000009F +:10F1700000000000000000000000000015602A06EA +:10F18000054C00A805000A00054000A805000A007B +:10F19000054000A800000000000000000000000082 +:10F1A000000000000000000000000000000000005F +:10F1B000000000000000FF00F0F000000000000070 +:10F1C000AAAA00000000FF00FFFF000000000000EE +:10F1D000000000000000000000000000000000002F +:10F1E000FFFF000000000000000000000000000021 +:10F1F000000000000000000000000000000000000F +:10F200000000FFFF00000000000000000000000000 +:10F2100000000000000000000000000000000000EE +:10F2200000000000000000000000000000000000DE +:10F230000000000000000000FF00F0F000000000EF +:10F240000000AAAA00000000FF000000000000006B +:10F2500000000000000000000000000000000000AE +:10F26000000000000000000000000000000000009E +:10F27000000000000000000000000000000000008E +:10F28000000000000000000000000000000000007E +:10F29000000000000000000000000000000000006E +:10F2A000000000000000000000000000000000005E +:10F2B000000000000000000000003C3C00FF0000D7 +:10F2C000000000000000000000003C3CF0F00000E6 +:10F2D000000000000000000000000000000000002E +:10F2E00000000000F0F0000000000000000000003E +:10F2F000000000000000000000000000000000000E +:10F30000000000000000F0F000000000000000001D +:10F3100000000000000000000000000000000000ED +:10F3200000000000000000000000000000000000DD +:10F330000000000000000000000000003C3C00FF56 +:10F340000000000000000000000000003C3CF0F065 +:10F3500000000000000000000000000000000000AD +:10F36000000000000000F0F00000000000000000BD +:10F37000000000000000000000000000000000008D +:10F380000000000000000000F0F00000000000009D +:10F39000000000000000000000000000000000006D +:10F3A000000000000000000000000000000000005D +:10F3B000000000000000000000000000000000004D +:10F3C00000000000000000000000008000000000BD +:10F3D000000000000000000000000000000000002D +:10F3E000000000000000010000000000000000001C +:10F3F000000000000001000000000000000000000C +:10F4000000000000000000000000000000000000FC +:10F4100000000000000000000000000000000000EC +:10F4200000000000000400000000000000000000D8 +:10F4300000000000000000000000000000000000CC +:10F44000000000020000000000000000002000009A +:10F45000000000000000000000000000000040006C +:10F46000000000000000000002000000000000009A +:10F47000000000020000000000000000000000008A +:10F4800040000000400000000000000000000000FC +:10F49000000000000000000000000000000000006C +:10F4A000000000000000000000000000000000005C +:10F4B0000000000000000000000000000800000044 +:10F4C0000200020002000000000002000000000034 +:10F4D000000000000000000000000000020000002A +:10F4E0000000000000000200030000000200030012 +:10F4F000000000000000000000000000000000000C +:10F5000000000000000002000000020002000000F5 +:10F5100000000000000000000000000000000000EB +:10F5200000000000000000000800000000000000D3 +:10F5300000000000000000000800000000000000C3 +:10F5400000000000000000000000000000000000BB +:10F5500000000000000000000000000000000000AB +:10F560000000000000000000000002000000800019 +:10F570000200000000000000000000000000000089 +:10F58000000000000000000000000000000000007B +:10F590000000000000000000000002000000000069 +:10F5A000000000000000000000000000000000005B +:10F5B000000000000000000000000000000000004B +:10F5C0000000000000000000000000000400000037 +:10F5D0000000A0000000000000000000000000008B +:10F5E000000000000000000000000000000000001B +:10F5F000000000000000000000000000000000000B +:10F6000000000000000000000000000000000000FA +:10F6100000000000000000000000000000000000EA +:10F6200000000000000000000000000000000000DA +:10F6300000000000000000000000000000000000CA +:10F6400000000000000000000000000000000000BA +:10F650000000000021000000000000000000000089 +:10F660000000059005000000000000000000000000 +:10F67000000000000000000000000000000000008A +:10F68000000000000000000000000000000000007A +:10F69000000000000000000000000000000000006A +:10F6A000000000000000000000000000000000005A +:10F6B000000000000000000000000000000000004A +:10F6C0000000000000000000000000000020010019 +:10F6D0000000000000000004000000000000000422 +:10F6E000000000000000000000000000000000001A +:10F6F0000000000001400180000000000000000048 +:10F7000000000000000000000000000000000000F9 +:10F7100000000000000000000000000000000000E9 +:10F7200000000000000000000000000000000000D9 +:10F7300000000000000000000000000000000000C9 +:10F740000020000000000000000000000000000099 +:10F75000200000000000090000010000004000003F +:10F760000084000000880000008800000000000005 +:10F770000000000000002000040400000000000061 +:10F780000000000000000000000000000000000079 +:10F790000000000000000000000000000000000069 +:10F7A0000000000000000000000000000000000059 +:10F7B0000000020000000000000021000000000026 +:10F7C0000000000000000000000000000000000039 +:10F7D0000000000000000000000001000000000028 +:10F7E0000000000000000000000000000000000019 +:10F7F0000000900000000000000000000000000079 +:10F8000000000000000000000000000000000000F8 +:10F8100000000000000000000000000000000000E8 +:10F8200000000000000000000000000000000000D8 +:10F8300000000000000000000000000000000000C8 +:10F840000000000000000000000000C000C00084B4 +:10F85000218400000084008400C01100200000000A +:10F860000000008400000000000000000000008490 +:10F870000000000021C00000000000840000000023 +:10F880000000000000000000000000000000000078 +:10F8900000000000000000C00000000000840084A0 +:10F8A0000000000000000084000000000000008450 +:10F8B0000000000000000000000000000000000048 +:10F8C00000000000000000000000880000000000B0 +:10F8D0000000000000002000000200020000010201 +:10F8E000000900000000001100000000000284096F +:10F8F00000000000000000001009000000000000EF +:10F9000000020000000200000000000000000000F3 +:10F9100000000000000000000000000000000000E7 +:10F9200000000000000000020002000000000000D3 +:10F9300000020000000000000402000000000000BF +:10F9400000000000000000000000000000000000B7 +:10F950000000000000040000880000000000090012 +:10F9600020840000000000000040000000000000B3 +:10F970000000000000000000000080000000000007 +:10F980000000000000000000000000000000000077 +:10F990000000000000000000000000000000000067 +:10F9A0000000000000000000000000000000000057 +:10F9B0000000000000000000000000000000000047 +:10F9C00000000000008800000000020400000000A9 +:10F9D0000000000000000000000000000000000027 +:10F9E0000000000000000000000000000000000017 +:10F9F0000000000000000000000000000100009076 +:10FA000000000000000000000000000000000000F6 +:10FA100000000000000000000000000000000000E6 +:10FA200000000000000000000000000000000000D6 +:10FA300000000000000000000000000000000000C6 +:10FA400000000000000000000000000000000000B6 +:10FA500000000000000000000000000000000000A6 +:10FA60000000000000000000000000000000000096 +:10FA70000000000000000000000000000000110075 +:10FA800021800000000000000000000000000000D5 +:10FA90000000000000000000000000000000000066 +:10FAA0000000000000000000000000000000000056 +:10FAB0000000000000000000000000000000000046 +:10FAC0000000000000000000000000000000000036 +:10FAD0000000000000000000000000000000000026 +:10FAE0000000000000000000000000000000000016 +:10FAF0000000000000000000000000000000000006 +:10FB000000410900000300000000000000000000A8 +:10FB100000000000000000000000000000000000E5 +:10FB200000000000000000000000000000000000D5 +:10FB300000000000000000000000000000000000C5 +:10FB400000000000000000000000000000000000B5 +:10FB500000000000000000000000000000000000A5 +:10FB60000000000004000000000000000000000091 +:10FB70000000000000000000000000000000000085 +:10FB80000000000101C0000000C0000000000000F3 +:10FB90000000000000000000000000000000000065 +:10FBA0000000000000000000000000000000000055 +:10FBB0000000000000000000000000000000000045 +:10FBC0000000000000000000000000000000000035 +:10FBD0000000000000000000000000000000000124 +:10FBE0000000000100000000000001000000000013 +:10FBF0000000000000000000000000000000000005 +:10FC000000000000000088002090000000000000BC +:10FC100000000000000000000000000000000000E4 +:10FC200000000000000000000000000000000000D4 +:10FC300000000000000000000000000000000000C4 +:10FC400000000000000000000000000000000000B4 +:10FC500000000000000000000000000000000000A4 +:10FC6000004000100011000000000000040000002F +:10FC70000000000000000000000000000000000084 +:10FC80000000000000000900000080800400050062 +:10FC90000000000000000000000000000000000064 +:10FCA0000000000000000000000000000000000054 +:10FCB0000000000000000000000000000000000044 +:10FCC0000000000000000000000000000000000034 +:10FCD0000000000000000000000000000000000024 +:10FCE0000008000000000000000400000000000008 +:10FCF0000000000000000000000000000000000004 +:10FD00000000000000000000001180110000000051 +:10FD100000000000000000000000000000000000E3 +:10FD200000000000000000000000000000000000D3 +:10FD300000000000000000000000000000000000C3 +:10FD400000000000000000000000000000000000B3 +:10FD500000000000000000000000000000000000A3 +:10FD6000000000010000000000000001008800C049 +:10FD70000000000000000000000000000000000083 +:10FD800000000000000000000000000120010088C9 +:10FD90000000000000000000000000000000000063 +:10FDA0000000000000000000000000000000000053 +:10FDB0000000000000000000000000000000000043 +:10FDC0000000000000000000000000000000000033 +:10FDD0000000000000000000000000000000000023 +:10FDE00000000000810000E000000000810A00E047 +:10FDF00007000000000000000000000000000000FC +:10FE0000000000000000000000000000000000E012 +:10FE1000070081000000000000000000000000005A +:10FE200000000000000000000000000000000000D2 +:10FE300000000000000000000000000000000000C2 +:10FE400000000000000000000000000000000000B2 +:10FE500000000000000000000000000000000000A2 +:10FE60000000000000000000000000000000000092 +:10FE70000000000000000000000000000000000082 +:10FE8000000000000000000000000000000000FF73 +:10FE9000000000FF00000000000000000000000063 +:10FEA0000000000000000000000000000000000052 +:10FEB0000000000000000000000000000000000042 +:10FEC0000000000000000000000000000000000032 +:10FED0000000000000000000000000000000000022 +:10FEE0000000000000000000000000000000000012 +:10FEF0000000000000000000000000000000000002 +:10FF000000000000000000000000000000000000F1 +:10FF100000FF000000FF00000000000000000000E3 +:10FF200000000000000000000000000000000000D1 +:10FF300000000000000000000000000000000000C1 +:10FF400000000000000000000000000000000000B1 +:10FF500000000000000000000000000000000000A1 +:10FF60000000000000000000000000000000000091 +:10FF70000000000000000A0A0A0A00000000000059 +:10FF80000000000000000000000000000000000071 +:10FF900000000000FF000000FFFF00000000000064 +:10FFA0000000000000000000000000000000000051 +:10FFB0000000000000000000000000000000000041 +:10FFC0000000000000000000000000000000000031 +:10FFD0000000000000000000000000000000000021 +:10FFE0000000000000000000000000000000000011 +:10FFF0000000000000000000000000000000000001 +:020000040031C9 +:1000000000000000000000000000000000000000F0 +:10001000000000000000FF000000000000000000E1 +:1000200000000000000000000000000000000000D0 +:1000300000000000000000000000000000000000C0 +:1000400000000000000000000000000000000000B0 +:1000500000000000000000000000000000000000A0 +:10006000000000000000000000000000000000612F +:100070000006C009000000610036C00D000000004D +:100080000000000000000000000000000000000070 +:1000900000000000000015602A06054C00A80000C2 +:1000A0000000000000000000000000000000000050 +:1000B0000000000000000000000000000000000040 +:1000C0000000000000000000000000000000000030 +:1000D0000000000000000000000000000000000020 +:1000E0000000000000000000000000000000000010 +:1000F0000000000000F0FFF0000000000000000021 +:1001000000000000000000000000000000000000EF +:10011000000000000000000000000000FFFF0000E1 +:1001200000000000000000000000000000000000CF +:1001300000000000000000000000000000000000BF +:1001400000000000000000000000000000000000AF +:10015000000000000000000000000000000000009F +:10016000000000000000000000000000000000008F +:1001700000000000000000F0FFF0000000000000A0 +:10018000000000000000000000000000000000006F +:10019000000000000000000000000000000000005F +:1001A000000000000000000000000000000000004F +:1001B000000000000000000000000000000000003F +:1001C000000000000000000000000000000000002F +:1001D000000000000000000000000000000000001F +:1001E000000000000000000000000000000000000F +:1001F00000000000000000000000000000000000FF +:1002000000000000000000000000000000000000EE +:1002100000000000000000000000000000000000DE +:10022000F0F00000000000000000000000000000EE +:1002300000000000000000000000000000000000BE +:1002400000000000000000000000000000000000AE +:10025000000000000000000000000000000000009E +:10026000000000000000000000000000000000008E +:10027000000000000000000000000000000000007E +:10028000000000000000000000000000000000006E +:10029000000000000000000000000000000000005E +:1002A0000000F0F00000000000000000000000006E +:1002B000000000000000000000000000000000003E +:1002C000000000000000000000000000000000002E +:1002D000000000000000000000000000000000001E +:1002E000000000000000000000000000000000000E +:1002F000000020002000000000000000000020009E +:10030000000000000000000000000000000000806D +:10031000000020002000000000000000000020007D +:1003200000000000000000000000000000000000CD +:10033000000100002000200000000000000000007C +:10034000200000000000000000000000000000008D +:10035000000000002000200000000000000000005D +:10036000200000000000000000000000000000006D +:10037000000000000000000000000000000000007D +:1003800000820000000000000000000000000000EB +:10039000004040000000000000004000000000009D +:1003A000000000000000000000000000000000004D +:1003B000000000000000000000000000000000003D +:1003C000000000000000000000000000000000002D +:1003D000000000000000000000000000000000001D +:1003E000000000000000000000000000000000000D +:1003F00000000000000000000000000002001000EB +:1004000020002000000000000000000000000000AC +:1004100000000000000000000000000002000000DA +:1004200002000400000002000000020000000000C2 +:1004300000000000000100000000000000000000BB +:1004400000000000000000000200000004000000A6 +:100450000000000000000000040000000000000098 +:100460000000000000000400000000000000000088 +:100470000400000000000000000000000000000078 +:1004800080008000800000000000000000000000EC +:100490000000000000000000000000000000040058 +:1004A00000000000000000820000000800000000C2 +:1004B000000800080000000000000000000000002C +:1004C000000000000000000000080000000800001C +:1004D000000000080008000000000000000000000C +:1004E00000000000000000000008000000080000FC +:1004F00000000008000800000000000000000000EC +:10050000000000000000000000000000008000105B +:1005100000000008A0088241002100000000000047 +:100520000000000000008200000800000000000041 +:1005300000000000000000000000000000000000BB +:1005400000000000000000000000000000000000AB +:10055000000000000000000000000000000000009B +:10056000000000000000000000000000000000008B +:10057000000000000000000000000000000000007B +:10058000000000000000000000000000000000105B +:1005900000010000000021004100000000000000F8 +:1005A000000000000000000000000000000000004B +:1005B000000000000000000000000000000000003B +:1005C000000000000000000000000000000000002B +:1005D000000000000000000000000000000000001B +:1005E000000000000000000000000000000000000B +:1005F00000000000000000000000000000000000FB +:1006000000000000000000000000040000000004E2 +:100610000009010200000000000282410000000009 +:1006200000000000000000000000000000000000CA +:1006300000000000000000000000000000000000BA +:1006400000000000000000000000000000000000AA +:10065000000000000000000000000000000000009A +:10066000000000000000000000000000000000008A +:10067000000000000000000000000000000000007A +:1006800000000000000000000000000080000000EA +:100690000000210020000000000000000000000019 +:1006A000000000000000000000100000000000003A +:1006B000000000000000000000000000000000003A +:1006C000000000000000000000000000000000002A +:1006D000000000000000000000000000000000001A +:1006E000000000000000000000000000000000000A +:1006F00000000000000040000000000000000000BA +:1007000000000000000000000000000000000000E9 +:1007100020210000000090000000000000000041C7 +:1007200000000000000000000000000000000000C9 +:1007300000000000000000000000000000000000B9 +:1007400000000000000000000000000000000000A9 +:100750000000000000000000000000000000000099 +:100760000000000000000000000000000000000089 +:100770000000000000000000000000000000000079 +:1007800000000000000000000000000000840000E5 +:1007900000000000000000880000000000000000D1 +:1007A0000000000000002100000000000000000028 +:1007B00000C0000000000084008400000000000071 +:1007C0000000000000000000000000000000000029 +:1007D0000000000000000000000000000000000019 +:1007E0000000000000000000000000000000000009 +:1007F00000000000000000000000000000000000F9 +:1008000000000000000000000000000000000000E8 +:10081000900004000008900590084000000000408F +:1008200002000000000000000000000000000000C6 +:1008300000000000000000000000000000000000B8 +:1008400000020002000000000000000000000000A4 +:100850000000000000000000000000000000000098 +:100860000000000000000000000000000000000088 +:100870000000000000000000000000000000000078 +:100880000000000000000000000000000000000068 +:1008900000000000800000000000000000000900CF +:1008A0000001A00003400000000000000000000064 +:1008B0000000000000000000000000000000000038 +:1008C0000000000000000000000000000000000028 +:1008D0000000000000000000000000000000000018 +:1008E0000000000000000000000000000000000008 +:1008F00000000000000000000000000000000000F8 +:1009000009000090110040000000000000000000FD +:1009100000000000100000000010A0400082C00491 +:1009200000C004400082C00400000000000000007D +:1009300000000000000000000000000000000000B7 +:1009400000000000000000000000000000000000A7 +:100950000000000000000000000000000000000097 +:100960000000000000000000000000000000000087 +:100970000000000000000000000000000000000077 +:100980000000000000000000000000000000000067 +:1009900000000000000089000000000004800080CA +:1009A0008000008000800000800000000000000047 +:1009B0000000000000000000000000000000000037 +:1009C0000000000000000000000000000000000027 +:1009D0000000000000000000000000000000000017 +:1009E0000000000000000000000000000000000007 +:1009F00000000000000000000000000000000000F7 +:100A000000000000000000000000000000000000E6 +:100A10000000000000000000000080000000000056 +:100A20000020800000008000800580800000000021 +:100A300000000000000000000000000000000000B6 +:100A400000000000000000000000000000010000A5 +:100A50000000000000000000000000000000000096 +:100A60000000000000000000000000000000000086 +:100A70000000000000000000000000000000000076 +:100A80000000000000000000000000000000000066 +:100A900000000000000002000000000090000200C2 +:100AA000A0C0A001040084000400040004020000AF +:100AB0000000000000000000000000000000000036 +:100AC0000000000000000000000000000000000026 +:100AD0000000000000000000000000000000000016 +:100AE0000000000000000000000000000000000006 +:100AF00000000000000000000000000000000000F6 +:100B000000000000000000000000000000000000E5 +:100B100000000000000000000000000000000001D4 +:100B2000C01000A100A00083C084000400040004E1 +:100B300000000000000000000000000000000000B5 +:100B400000000000000000000000000000000000A5 +:100B50000001000000000000000000000000000094 +:100B60000000000000000000000000000000000085 +:100B70000000000000000000000000000000000075 +:100B80000000000000000000000000000000000065 +:100B90000000000000000000000000100002000241 +:100BA0000041808000210000001180000080008052 +:100BB00000800000000000000000000000000000B5 +:100BC0000000000000000000000000000000000025 +:100BD0000000000100000000000000000000000014 +:100BE0000000000000000000000000000000000005 +:100BF00000000000000000000000000000000000F5 +:100C000000000000000000000000000000000000E4 +:100C100000000000000000000000000000090000CB +:100C200000000000000000040000000000000004BC +:100C30000080000000000000000000000000000034 +:100C400000000000000000000000000000000000A4 +:100C50000000000000010000000000000000000093 +:100C60000000000000000000000000000000000084 +:100C70000000000000000000000000000000000074 +:100C80000000000000000000000000000000000064 +:100C90000000000000000000000000000000000054 +:100CA000000000C0000000000001008800000000FB +:100CB000000100C000000000000000000000000073 +:100CC0000000000000000000000000000000000024 +:100CD0000000000000000001000000000000000013 +:100CE0000000000000000000000000000000000004 +:100CF00000000000000000000000000000000000F4 +:100D000000000000000000000000000000000000E3 +:100D100000000000000000000000000000000000D3 +:100D2000814200C807000000480000E04200418204 +:100D3000000000004200600600000000000000000B +:100D400000000000000000000000000000000000A3 +:100D50000000000000000000000000000000000093 +:100D60000000000000000000000000000000000083 +:100D70000000000000000000000000000000000073 +:100D80000000000000000000000000000000000063 +:100D90000000000000000000000000000000000053 +:100DA0000000000000000000000000000000000043 +:100DB0000000000000000000000000000000000033 +:100DC0000000000000000000000000000000000023 +:100DD0000000000000000000000000000000000013 +:100DE0000000000000000000000000000000000003 +:100DF00000000000000000000000000000000000F3 +:100E000000000000000000000000000000000000E2 +:100E100000000000000000000000000000000000D2 +:100E200000000000000000000000000000000000C2 +:100E300000000000000000000000000000000000B2 +:100E400000000000000000000000000000000000A2 +:100E50000000000000000000000000000000000092 +:100E60000000000000000000000000000000000082 +:100E70000000000000000000000000000000000072 +:100E80000000000000000000000000000000000062 +:100E90000000000000000000000000000000000052 +:100EA0000000000000000000000000000000020838 +:100EB00000000084200001080000008420000000E1 +:100EC0000000000000000000000000000000000022 +:100ED0000000000000000000000000000000000012 +:100EE0000000000000000000000000000000000002 +:100EF00000000000000000000000000000000000F2 +:100F000000000000000000000000000000000000E1 +:100F100000000000000000000000000000000000D1 +:100F20000000000000000000000000003C3CFFFF4B +:100F300000000000000000000000000000000000B1 +:100F400000000000000000000000000000000000A1 +:100F50000000000000000000000000000000000091 +:100F60000000000000000000000000000000000081 +:100F70000000000000000000000000000000000071 +:100F80000000000000000000000000000000000061 +:100F90000000000000000000000000000000000051 +:100FA0000000000000000000000000000000000041 +:100FB000C3C30000000000000000000000000000AB +:100FC0000000000000000000000000000000000021 +:100FD0000000000000000000000000000000000011 +:100FE0000000000000000000000000000000000001 +:100FF00000000000000000000000000000000000F1 +:1010000000000000000000000000000000000000E0 +:1010100000000000000000000000000000000000D0 +:101020000000000000000000000000000061003728 +:10103000C008000000610006C00900003000400048 +:101040000000000C00000000000000000000000094 +:101050000000000000000000000000000000000090 +:101060000000000000000000000000000000000080 +:101070000000000000000000000000000000000070 +:101080000000000000000000000000000000000060 +:101090000000000000000000000000000000000050 +:1010A0000000000000000000000000000000000040 +:1010B0000000CDAA578200000000F0F0FFFF000002 +:1010C0000000000000000000000000000000000020 +:1010D0000000000000000000000000000000000010 +:1010E0000000000000000000000000000000000000 +:1010F00000000000000000000000000000000000F0 +:1011000000000000000000000000000000000000DF +:1011100000000000000000000000000000000000CF +:1011200000000000000000000000000000000000BF +:1011300000000000CDAA57820000000000000F0F41 +:10114000000000000000000000000000000000009F +:10115000000000000000000000000000000000008F +:10116000000000000000000000000000000000007F +:10117000000000000000000000000000000000006F +:10118000000000000000000000000000000000005F +:10119000000000000000000000000000000000004F +:1011A000000000000000000000000000000000003F +:1011B000000000000000000000000000000000002F +:1011C000000000000000000000000000000000001F +:1011D000000000000000000000000000000000000F +:1011E00000000000000000000000000000000000FF +:1011F00000000000000000000000000000000000EF +:1012000000000000000000000000000000000000DE +:1012100000000000000000000000000000000000CE +:1012200000000000000000000000000000000000BE +:1012300000000000000000000000000000000000AE +:10124000000000000000000000000000000000009E +:10125000000000000000000000000000000000008E +:10126000000000000000000000000000000000007E +:10127000000000000000000000000000000000006E +:10128000000000000000000000000000000000005E +:10129000000000000000000000000000000000004E +:1012A000000000000000000000000000000000003E +:1012B000000000000000000000000000100000001E +:1012C000000000000000010000000000000000001D +:1012D0000000000000000000000088002000000066 +:1012E00000000000000000000000000000000000FE +:1012F00000000000000000000000000020002000AE +:1013000000000000000000000000000000000000DD +:1013100000000000000000000000000000002000AD +:101320000000000000000000008000000000000439 +:1013300000000000000000000000000000000000AD +:101340000000000000000000020000900002000009 +:10135000000000000000000000000000000000008D +:1013600000000000000000004000000040000002FB +:10137000000000000000000000000000000000006D +:10138000000000000000000000000000000000005D +:10139000000000000000000000000000000000004D +:1013A00000000000000000000000004000000000FD +:1013B000000000000000000000000000000000002D +:1013C000000000000000000000000000000000001D +:1013D000000000000000000000000000000000000D +:1013E00000000000000000000000000000000000FD +:1013F00000000000000000000000000000000000ED +:1014000000000000000000000000000002000000DA +:10141000004000000000000000000000000000008C +:1014200000000000000000000000000000000200BA +:1014300000000000000000000000000000000000AC +:10144000000000000000000000000000000000009C +:10145000000000000000000000000000000000008C +:101460000000000000080000000000000000000074 +:101470000000000000000000000000000400000068 +:10148000000000000008000800000000000000004C +:10149000000000000008000000000000000800003C +:1014A000000000000008000800000000000000002C +:1014B0000000000000080000000000000000000024 +:1014C000000000000000000000000000000000001C +:1014D000000000000000000000000000000000000C +:1014E00000000000000800030000000000000000F1 +:1014F00000000000000800000000000000000000E4 +:1015000000000000000000000000000000000000DB +:1015100000000000000000000000000000000000CB +:1015200000000000000000000000000000000000BB +:1015300000000000000000000000000000000000AB +:10154000000000000000000000080000000000840F +:10155000000000000000000000000000000000008B +:10156000000000000000000000000000000000007B +:1015700000820000000000000000000000000000E9 +:10158000000000000000000000000000000000005B +:10159000000000000000000000000000000000004B +:1015A000000000000000000000000000000000003B +:1015B0000000000000000000000008000000000023 +:1015C0000040004000000004824000000040000095 +:1015D000000000000000A009000200000000000060 +:1015E00000000000000000000000000000000004F7 +:1015F00000400000000000000000000000000000AB +:1016000000000000000000000000000000000000DA +:1016100000000000000000000000000000000000CA +:1016200000000000000000000800040000000000AE +:1016300000000000000000000000000000000000AA +:10164000000000000000000000000000000000009A +:101650000000200009001100000000000000000050 +:10166000000000000000000000000000000000007A +:101670000000000000000000000000000000040066 +:10168000000000000000000000000000000000005A +:10169000000000000000000000000000000000004A +:1016A000000000000000000000000000000000003A +:1016B0000000000000000000000000000000040026 +:1016C000000000000000000000000000C000080052 +:1016D0000000C000A0000000000000000000002189 +:1016E00000410000000500000000000000000000B4 +:1016F00000000000000000000000000000400000AA +:1017000000000000000000080000000000000000D1 +:1017100000000000000000000000000000000000C9 +:101720000400000000000000000000000000C000F5 +:1017300000000000C00000000000000000000000E9 +:101740000000000000000000000000000000000099 +:101750000000000000000004000000000000000085 +:101760000000000000000000000000000000000079 +:101770000000000000000000000000000000000069 +:101780000000000000000000000000000000000059 +:101790000000000000000000000000000000000049 +:1017A0000000000000000000000000000000000039 +:1017B0000000000000000000000000000000000029 +:1017C0000000000000000000000000000000000019 +:1017D000080082000000020000000000000000007D +:1017E00000020000000000000000000000000000F7 +:1017F00000210000000000000000000000000000C8 +:1018000000000000000000000000000000000000D8 +:1018100000000000000000000000000000000000C8 +:1018200000000000000000000000000000000000B8 +:1018300000000000000000000000000000000000A8 +:101840000000000000000000000000000000000098 +:101850000000000000000000000002840000000002 +:101860000000000000000000000000000000000078 +:101870000000000000000000000000000000000068 +:101880000000000000000000000000000000000058 +:101890000000000000000000000000000000000048 +:1018A0000000000000000000000000000000000038 +:1018B0000000000000000000000000000000000028 +:1018C0000000000000000000000000000000000018 +:1018D0000000000000000000000000000000C0C088 +:1018E00000A00002840200000000000000000000D0 +:1018F00000000000000000000000000000000000E8 +:1019000000000000000000000000000000000000D7 +:1019100000000000000000000000000000000000C7 +:1019200000000000000000000000000000000000B7 +:1019300000000000000000000000000000000000A7 +:101940002020002000A08284000000000000000091 +:101950000000000000000000000000000000000087 +:101960000000000000800080000000000000000077 +:101970000000000000000000000000000000000067 +:101980000000000000000000000000000000000057 +:101990000000000000000000000000000000000047 +:1019A0000000000000000000000000000000000037 +:1019B0000000000000000000000000000000000027 +:1019C00000002000000000000000000000000000F7 +:1019D0000000000000000000000000000000000007 +:1019E0000000000000C08000008000000000000037 +:1019F00000000000000000000000000000000000E7 +:101A000000000000000000000000000000000000D6 +:101A100000000000000000000000000000000000C6 +:101A200000000000000000000000000000000000B6 +:101A300000000000000000000000000000000000A6 +:101A400000000000000000A00080800000000000F6 +:101A50000000000000000000000000000000000086 +:101A6000000000009000C083108290100000000071 +:101A70000000000000000000000000000000000066 +:101A80000000000000000000000000000000000056 +:101A90000000000000000000000000000000000046 +:101AA0000000000000000000000000000000000036 +:101AB0000000000000000000000000000000000026 +:101AC00000000000000020002082104008C000003C +:101AD0000000000000000000000000000000000006 +:101AE000000000000000040200A0040820A0000084 +:101AF00000000000000000000000000000000000E6 +:101B000000000000000000000000000000000000D5 +:101B100000000000000000000000000000000000C5 +:101B200000000000000000000000000000000000B5 +:101B300000000000000000000000000000000000A5 +:101B400000000000000000001002002040081040CB +:101B50000000000000000000000000000000000085 +:101B600000000000000000008080000080000000F5 +:101B70000000000000000000000000000000000065 +:101B80000000000000000000000000000000000055 +:101B90000000000000000000000000000000000045 +:101BA0000000000000000000000000000000000035 +:101BB0000000000000000000000000000000000025 +:101BC0000000000000000000000000800000000095 +:101BD0000000000000000000000000000000000005 +:101BE0000000000000000000000080208000008055 +:101BF00000000000000000000000000000000000E5 +:101C000000000000000000000000000000000000D4 +:101C100000000000000000000000000000000000C4 +:101C200000000000000000000000000000000000B4 +:101C300000000000000000000000000000000000A4 +:101C40000000000000000000000000000000008014 +:101C50000000000000000000000000000000000084 +:101C600000000000000000000000000010012088BB +:101C700040400200000000000000000000000000E2 +:101C80000000000000000000000000000000000054 +:101C90000000000000000000000000000000000044 +:101CA0000000000000000000000000000000000034 +:101CB0000000000000000000000000000000000024 +:101CC0000000000000000000000000000000A00074 +:101CD0008810A08802000000000000000000000042 +:101CE00000000000000000000000000000000000F4 +:101CF00000000000000000000000000000000000E4 +:101D000000000000000000000000000000000000D3 +:101D100000000000000000000000000000000000C3 +:101D200000000000000000000000000000000000B3 +:101D300000000000000000000000000000000000A3 +:101D40000000000000000000000000000000000093 +:101D50000000000000000000000000000000000083 +:101D60000000000000000000000000000000000073 +:101D70000FFF0F00ABA10B010000000000000000EE +:101D80000000000000000000000000000000000053 +:101D90000000000000000000000000000000000043 +:101DA0000000000000000000000000000000000033 +:101DB0000000000000000000000000000000000023 +:101DC0000000000000000000000000000000000013 +:101DD0000000D782D782EA4AE040000000000000FD +:101DE00000000000000000000000000000000000F3 +:101DF000000055C355C3FBF15B510000000000001B +:101E000000000000000000000000000000000000D2 +:101E100000000000000000000000000000000000C2 +:101E200000000000000000000000000000000000B2 +:101E300000000000000000000000000000000000A2 +:101E40000000000000000000000000000000000092 +:101E5000000000005F5F0A0AEF4FE5450000000048 +:101E60000000000000000000000000000000000072 +:101E700000000000F000C3AA0AFA0AFA00000000FD +:101E80000000000000000000000000000000000052 +:101E90000000000000000000000000000000000042 +:101EA0000000000000000000000000000000000032 +:101EB0000000000000000000000000000000000022 +:101EC0000000000000000000000000000000000012 +:101ED000000000000000F000C3AA202C232F000007 +:101EE00000000000000000000000000000000000F2 +:101EF000000000000000F0FFC3AAC0C0CFCF000068 +:101F000000000000000000000000000000000000D1 +:101F100000000000000000000000000000000000C1 +:101F200000000000000000000000000000000000B1 +:101F300000000000000000000000000000000000A1 +:101F40000000000000000000000000000000000091 +:101F50000000000000000000F0FFC3AAE0ECE3EF87 +:101F60000000000000000000000000000000000071 +:101F700000000000000000000000000000C00000A1 +:101F80000000000000000000000000000000000051 +:101F90000000000000000000000000000000000041 +:101FA0000000000000000000000000000000000031 +:101FB0000000000000000000000000000000000021 +:101FC0000000000000000000000000000000000011 +:101FD000000000000000000000000000000000C041 +:101FE00000000000000000000000000000000000F1 +:101FF00000000000000000000000000000000000E1 +:1020000000000000000000000000000000000000D0 +:1020100000000000000000000000000000000000C0 +:1020200000000000000000000000000000000000B0 +:1020300000000000000000000000000000000000A0 +:102040000000000000000000000000000000000090 +:102050000000000000000000000000000000000080 +:102060000000000000000000000000000000000070 +:102070000000000000000000000000000000000060 +:102080000000000000000000000000000000000050 +:102090000000000000000000000000000000000040 +:1020A0000000000000000000000000000000000030 +:1020B0000000000000000000000000000000000020 +:1020C0000000000000000000000000000000000010 +:1020D0000000000000000000000000000000000000 +:1020E00000000000000000000000000000000000F0 +:1020F00000000000000000000000000000000000E0 +:1021000000000000000000000000000000000000CF +:1021100000000000000000000000000000000000BF +:1021200000000000000000000000000000000000AF +:10213000000000000000000000000000000000009F +:10214000000000000000000000000000000000008F +:10215000000000000000000000000000000000007F +:10216000000000000000000000000000000000006F +:10217000000000000000000000000000000000005F +:10218000000000000000000000000000000000004F +:10219000000000000000000000000000000000003F +:1021A000000000000000000000000000000000002F +:1021B000000000000000000000000000000000001F +:1021C000000000000000000000000000000000000F +:1021D00000000000000000000000000000000000FF +:1021E00000000000000000000000000000000000EF +:1021F00000000000000000000000000000000000DF +:1022000000000000000000000000840084000000C6 +:1022100000000000000000000000000000000000BE +:10222000000000000000000000000000200020006E +:10223000000000000000000000000000000000009E +:10224000000000000000000000000000000000008E +:10225000000000000000000000000000000000007E +:10226000000000000000000000000000000000006E +:10227000000000000000000000000000400000001E +:10228000000000004000000000000000000000000E +:10229000000000000000000000000000000000003E +:1022A000000000000000000000000000000000002E +:1022B000000000000000000000000000000000001E +:1022C000000000000000000000000000000000000E +:1022D00000000000000000000000000000000000FE +:1022E00000000000000000000000000000000000EE +:1022F000000000000000004000400000000000005E +:1023000000000000000000000000000000000000CD +:10231000000000000000000000000000000000407D +:1023200000000000000004000000000000000000A9 +:10233000000000000000000000000000000000009D +:10234000000000000200000000000000000000008B +:10235000000000000000000000000000000000007D +:10236000000000000000000000000000000000006D +:10237000000000000000000000000000020000005B +:10238000000000000000000000000000000000004D +:10239000000000000000000000000000000000003D +:1023A000000002000000000000000000000000002B +:1023B000000000000000000000000000000000001D +:1023C000000000000000000000000000000000000D +:1023D00000000000400000000000000000000000BD +:1023E00000000000000000000000000000000000ED +:1023F00000000000000000000000000000000000DD +:1024000000000000000000000000000000000000CC +:1024100000000000000000000000000000000000BC +:1024200000000000000000000000000000000000AC +:10243000000000000000000000000000000000009C +:10244000000000000000000000000000000000008C +:10245000000000000000000000000000000000007C +:10246000000000000000000000000000000000006C +:10247000000000000000000000000000000000005C +:102480000000000000000000000003000000000049 +:10249000000000000000000000000000000000003C +:1024A000000000000000000000000000000000002C +:1024B000000000000000000000000000000000001C +:1024C000000000000000000000000000000000000C +:1024D00000000000000000000000000000000000FC +:1024E00000000000000003000300000000000000E6 +:1024F0000000000000000000000000400800000094 +:10250000000000000000000000000000000000408B +:1025100000000000004000000040000000000040FB +:10252000000000000000000000000000000000406B +:10253000000000000000000000000000000000009B +:10254000000000000000000000000000000000008B +:10255000000000000000000008000800000000006B +:10256000000000000000000000000000000000006B +:10257000000000000000000000000000000000005B +:1025800000000000000000000900200020402000A2 +:102590000000000000002004000000000000000017 +:1025A00000000000004000000200000000000000E9 +:1025B000000000000000000000000000000000001B +:1025C000000000000000000000000000000000000B +:1025D00000000000000000000000000000000000FB +:1025E00000000000000000000000000000000000EB +:1025F00000000000000000000000000000000000DB +:1026000000000000000000000000000000000000CA +:1026100000000000000000000000000000000000BA +:1026200000000000000000000000000000000000AA +:10263000000000000000000000000000000000009A +:10264000000000000000000000000000000000008A +:10265000000000000000000000000000000000007A +:10266000000000000000000000000000000000006A +:10267000000000000000000000000000000000005A +:10268000000000000000000000000000000000004A +:102690000000000000000000118840000000000061 +:1026A000000000000000000000000000000000002A +:1026B000000000000000000000000000000000001A +:1026C000000000000000000000000000000000000A +:1026D00000000000000000000000000000000000FA +:1026E00000000000000000000000000000000000EA +:1026F00000000000000000000000000400020000D4 +:1027000000000000000000000000000000000000C9 +:1027100000000000000000000000000000000000B9 +:1027200000000000000000000000000000000000A9 +:102730000000000000000000000000000000000099 +:102740000000000000000000000000000000000089 +:102750000000000000000000000000000000000079 +:102760000000000000000000000000000000000069 +:102770000000000000000000000000000000000059 +:102780000000000000000000000000000000000049 +:1027900000000000110000000000000020004004C4 +:1027A0000000000000000000000000000000000029 +:1027B0000000000000000000000000000000000019 +:1027C00000000000000000000000400000000000C9 +:1027D00000000000000000000000000000000000F9 +:1027E00000000000000000000000000000000000E9 +:1027F00000000000000000000000000000000000D9 +:1028000000000000000000000000000000000000C8 +:1028100000000000000000000000000000000000B8 +:1028200000000000000000000000000000000000A8 +:102830000000000000000000000000000000000098 +:102840000000000000000000000000000000000088 +:102850000000000000000000000000000000000078 +:102860000000000000000000000000000000000068 +:102870000000000000000000000000000000000058 +:102880000000000000000000000000000000000048 +:102890000000000000000000000000000000000038 +:1028A0000000000000000000000000000000000028 +:1028B0000000000000000000000000000000000018 +:1028C0000000000000000000000000000000000008 +:1028D00000000000000000000000000000000000F8 +:1028E00000000000000000000000000000000000E8 +:1028F00000000000000000000000000000000000D8 +:1029000000000000000000000000000000000000C7 +:1029100000000000000000000000000000000000B7 +:1029200000000000000000000000000000000000A7 +:102930000000000000000000000000000000000097 +:102940000000000000000000000000000000000087 +:102950000000000000000000000000000000000077 +:102960000000000000000000000000000000000067 +:102970000000000000000000000000000000000057 +:102980000000000000000000000000000000000047 +:102990000000000000000000000000000000000037 +:1029A0000000000000000000000000000000000027 +:1029B0000000000000000000000000000000000017 +:1029C0000000000000000000000000000000000007 +:1029D00000000000000000000000000000000000F7 +:1029E00000000000000000000000000000000000E7 +:1029F00000000000000000000000000000000000D7 +:102A000000000000000000000000000000000000C6 +:102A100000000000000000000000000000000000B6 +:102A200000000000000000000000000000000000A6 +:102A30000000000000000000000000000000000096 +:102A40000000000000000000000000000000000086 +:102A50000000000000000000000000000000000076 +:102A60000000000000000000000000000000000066 +:102A70000000000000000000000000000000000056 +:102A80000000000000000000000000000000000046 +:102A90000000000000000000000000000000000036 +:102AA0000000000000000000000000000000000026 +:102AB0000000000000000000000000000000000016 +:102AC0000000000000000000000000000000000006 +:102AD00000000000000000000000000000000000F6 +:102AE00000000000000000000000000000000000E6 +:102AF00000000000000000000000000000000000D6 +:102B000000000000000000000000000000000000C5 +:102B100000000000000000000000000000000000B5 +:102B200000000000000000000000000000000000A5 +:102B30000000000000000000000000000000000095 +:102B40000000000000000000000000000000000085 +:102B50000000000000000000000000000000000075 +:102B60000000000000000000000000000000000065 +:102B70000000000000000000000000000000000055 +:102B80000000000000000000000000000000000045 +:102B90000000000000000000000000000000000035 +:102BA0000000000000000000000000000000000025 +:102BB0000000000000000000000000000000000015 +:102BC0000000000000000000000000000000000005 +:102BD00000000000000000000000000000000000F5 +:102BE00000000000000000000000000000000000E5 +:102BF00000000000000000000000000000000000D5 +:102C000000000000000000000000000000000000C4 +:102C100000000000000000000000000000000000B4 +:102C200000000000000000000000000000000000A4 +:102C30000000000000000000000000000000000094 +:102C40000000000000000000000000000000000084 +:102C50000000000000000000000000000000000074 +:102C60000000000000000000000000000000000064 +:102C70000000000000000000000000000000000054 +:102C80000000000000000000000000000000000044 +:102C90000000000000000000000000000000000034 +:102CA0000000000000000000000000000000000024 +:102CB0000000000000000000000000000000000014 +:102CC0000000000000000000000000000000000004 +:102CD00000000000000000000000000000000000F4 +:102CE00000000000000000000000000000000000E4 +:102CF00000000000000000000000000000000000D4 +:102D000000000000000000000000000000000000C3 +:102D100000000000000000000000000000000000B3 +:102D200000000000000000000000000000000000A3 +:102D30000000000000000000000000000000000093 +:102D40000000000000000000000000000000000083 +:102D50000000000000000000000000000000000073 +:102D60000000000000000000000000000000000063 +:102D70000000000000000000000000000000000053 +:102D80000000000000000000000000000000000043 +:102D90000000000000000000000000000000000033 +:102DA0000000000000000000000000000000000023 +:102DB0000000000000000000000000000000000013 +:102DC0000000000000000000000000000000000003 +:102DD00000000000000000000000000000000000F3 +:102DE00000000000000000000000000000000000E3 +:102DF00000000000000000000000000000000000D3 +:102E000000000000000000000000000000000000C2 +:102E100000000000000000000000000000000000B2 +:102E20000000820000000000000000000000000020 +:102E30000000000000000000000000000000000092 +:102E40000000000000000000020000000000000080 +:102E5000020000000000000000000001000000006F +:102E6000000000000000000000002004000000003E +:102E70000000000000000000000000000000400012 +:102E80000000000000000000000000000000000042 +:102E90000000000000000000000000000000000032 +:102EA000000000000000000000020002000000001E +:102EB0000000000000000000000000000000000012 +:102EC0000000000040000000400000000000000082 +:102ED0000000000000000000009000000000000062 +:102EE00000000000000000000000000000000000E2 +:102EF00000000000000000000000000000000000D2 +:102F000000000000000000000000000000000000C1 +:102F100000000000000000000000000000000000B1 +:102F2000000002000041044100200080020008006F +:102F30000000004000000000000000000000000051 +:102F40000000000000000000000000000000000081 +:102F50000000000000410000000000000000000030 +:102F60000000000000000000000000000010000051 +:102F70000000000000000000000000000000000051 +:102F8000000000000000000000000000000002003F +:102F9000000000000000000000000000000002002F +:102FA0000000000000000000804000010340830892 +:102FB000800800C0000100000000000000000000C8 +:102FC00000000000000000000000000000000040C1 +:102FD00000400000020000000000000000000008A7 +:102FE00000000008000000000008000000000200CF +:102FF00000080000000000000000000000000000C9 +:1030000000080008000000000008000000000000A8 +:10301000200400000000000000000000000000008C +:103020000008000000000000000000000000000098 +:1030300000000000000000000000A00000000200EE +:1030400082020008000000000008000000000000EC +:103050000008000000000000000000000000000068 +:103060000000000000000000000000000000000060 +:103070000000000000000000000000000000000050 +:103080000000000000000000000000000000000040 +:103090000000000000000000000000000000000030 +:1030A000000082000000000000000000000000009E +:1030B0000000000000000000000000000000000010 +:1030C0008000000000000000000000000000000080 +:1030D00000000000000000000000000000000000F0 +:1030E00000000000000000000000000000000000E0 +:1030F00000000000000000000000000000000000D0 +:1031000000000000000000000000000000000000BF +:1031100000000000000000000000000000000000AF +:103120000000000000000000000000000004000497 +:1031300000400040100400080040000000000000B3 +:10314000000000000000000000000000000000007F +:1031500000000000004000000000000000400002ED +:10316000000000000000000000000000000000005F +:1031700000000000000000090000004000000020E6 +:10318000000000000000000000000000000000003F +:10319000000000000000100000000000000000001F +:1031A000000000000000000000000000000000001F +:1031B000000000000004000000000000000000000B +:1031C00000000000000000000000000002000000FD +:1031D00000000000000000000000000020000000CF +:1031E00000000000000000000000000000000000DF +:1031F00000000000000000000000000000000000CF +:1032000000000000000000000000000010000000AE +:1032100000000000000000000000000000000000AE +:10322000000000000000000000000000000000009E +:10323000000000000000000000000400000000008A +:103240000005000000000000000000000000000079 +:10325000000000000000000000000000000000006E +:10326000000000000000000000000000000000005E +:10327000000000000000000000000000000000004E +:10328000000000000000000000000000000000003E +:10329000000000000000000000000000000000002E +:1032A000000000000000000000000000000000001E +:1032B000000000000000000000000000800000008E +:1032C0000000000000000000000400A0000000005A +:1032D00000000000000000000000000000000000EE +:1032E00000000000000000000000000000000000DE +:1032F00000000000000000000000000000000000CE +:1033000000000000000000000000000000000000BD +:1033100000000000000000000000000000000000AD +:10332000000000000000000000000000000000009D +:103330000000000000000000000000000000042168 +:103340000000000000210040000000000008000014 +:10335000000000410002000000000000000000002A +:10336000000000000000000000000000000000005D +:10337000000000000000000000000000000000004D +:10338000000000000000000000000000000000003D +:10339000000000000000000000000000000000002D +:1033A000000000000000000000000000000000001D +:1033B00000000000000000000000000020000000ED +:1033C0008000000400000000000100000000000078 +:1033D00000000000000000000800000000000000E5 +:1033E0000040000000000004000000000000000099 +:1033F00000000000000000000000000000000000CD +:1034000008000200000000000800000000000000AA +:1034100000000000000000000000000000000000AC +:103420000800000000000000000000000000000094 +:103430000000000000000000000000C00090000438 +:10344000000200000000000000000082A040008296 +:103450000208000000000000000000000000000062 +:10346000000000000000000000000000000000005C +:10347000000000000000000000000000000000004C +:10348000000000000000000000000000000000003C +:10349000000000000000000000000000000000002C +:1034A000000000000000000000000000000000001C +:1034B000000000000000000000000000008000800C +:1034C0000000000000000000000000000500008077 +:1034D000008080800000000000000000000000006C +:1034E00000000000000000000000000000000000DC +:1034F00000000000000000000000000000000000CC +:1035000000000000000000000000000000000000BB +:1035100000000000000000000000000000000000AB +:10352000000000000000000000000000000000009B +:10353000000000000000000000000000000000008B +:1035400000110080000000000010000000000000DA +:1035500000A10002000000000000000000000000C8 +:10356000000000000000000000000000000000005B +:10357000000000000000000100000000000000004A +:10358000000000000000000000000000000000003B +:10359000000000000000000000000000000000002B +:1035A000000000000000000000000000000000001B +:1035B000000000000000000000000000000000000B +:1035C0000000000000880000000000000000000073 +:1035D0000400A0828201848200000000000000003C +:1035E00000000000000000000000000000000000DB +:1035F00000000000000000000000000000000000CB +:1036000000000000000000000000000000000000BA +:1036100000000000000000000000000000000000AA +:10362000000000000000000000000000000000009A +:10363000000000000000000000000000000000008A +:1036400000000800000000008800000000000000EA +:10365000000005C000A0848200840000000000007B +:10366000000000000000000000000000000000005A +:103670000000000000000000000000010000000049 +:10368000000000000000000000000000000000003A +:10369000000000000000000000000000000000002A +:1036A000000000000000000000000000000000001A +:1036B000000000000000000000000000000000000A +:1036C00000000000800000000000800009000000F1 +:1036D00000000000C1000000000000000000000029 +:1036E00000000000000000000000000000000000DA +:1036F00000000000000000000000000000010000C9 +:1037000000000000000000000000000000000000B9 +:1037100000000000000000000000000000000000A9 +:103720000000000000000000000000000000000099 +:103730000000000000000000000000000000000089 +:103740000000000000008011800000008000800068 +:1037500000000000000000200002808080000000C7 +:103760000000000000000000000000000000000059 +:103770000000000000000000000000000000000148 +:103780000000000000000000000000000000000039 +:103790000000000000000000000000000000000029 +:1037A0000000000000000000000000000000000019 +:1037B0000000000000000000000000000000000009 +:1037C0000000000000000000C0012000040008000C +:1037D000C0008800880010008201A001400208009B +:1037E00000000000000000000000000000000000D9 +:1037F00000000000000000000000000000000000C9 +:1038000000010000000000000000000000000000B7 +:1038100000000000000000000000000000000000A8 +:103820000000000000000000000000000000000098 +:103830000000000000000000000000000000000088 +:103840000000000000000000000000000000070071 +:103850000000000A00000700000000000000420015 +:103860004200000000000000000000000000000016 +:103870000000000000000000000000000000000048 +:103880000000000000000000000000000000000038 +:103890000000000000000000000000000000000028 +:1038A0000000000000000000000000000000000018 +:1038B0000000000000000000000000000000000008 +:1038C0000000000000000000000000003F30F6F69D +:1038D000000000000C0C0FFF0000000000000000C2 +:1038E00000000000000000000000000000000000D8 +:1038F00000000000000000000000000000000000C8 +:1039000000000000000000000000000000000000B7 +:1039100000000000000000000000000000000000A7 +:103920000000000000000000000000000000000097 +:103930000000000000000000000000000000000087 +:1039400000000000000000000000000000003F3008 +:103950000606000000000C0C00F000000000000053 +:103960000000000000000000000000000000000057 +:103970000000000000000000000000000000000047 +:103980000000000000000000000000000000000037 +:103990000000000000000000000000000000000027 +:1039A0000000000000000000000000000000000017 +:1039B0000000000000000000000000000000000007 +:1039C00000000000000000000000000000000000F7 +:1039D00000000000000000000000000000000000E7 +:1039E00000084000008420000000000000000000EB +:1039F00000000000000000000000000000000000C7 +:103A000000000000000000000000000000000000B6 +:103A100000000000000000000000000000000000A6 +:103A20000000000000000000000000000000000096 +:103A30000000000000000000000000000000000086 +:103A40000000000000000000000000000000000076 +:103A500000006C6C0FFF0000000000000000000080 +:103A60000000000000000000000000000000000056 +:103A70000000000000000000000000000000000046 +:103A80000000000000000000000000000000000036 +:103A90000000000000000000000000000000000026 +:103AA0000000000000000000000000000000000016 +:103AB0000000000000000000000000000000000006 +:103AC00000000000000000000000000000000000F6 +:103AD000000000006C6C00F000000000000000001E +:103AE00000000000000000000000000000000000D6 +:103AF00000000000000000000000000000000000C6 +:103B000000000000000000000000000000000000B5 +:103B100000000000000000000000000000000000A5 +:103B20000000000000000000000000000000000095 +:103B30000000000000000000000000000000000085 +:103B40000000000000000000000000000000000075 +:103B50000000000000001000200000000000A50090 +:103B60000030000000003000000000C00000000035 +:103B70000000000000000000000000000000000045 +:103B80000000000000000000000000000000000035 +:103B90000000000000000000000000000000000025 +:103BA0000000000000000000000000000000000015 +:103BB0000000000000000000000000000000000005 +:103BC00000000000000000000000000000000000F5 +:103BD00000000000000000000000000000000000E5 +:103BE00000000000000000000000000000000000D5 +:103BF00000000000000000000000000000000000C5 +:103C000000000000000000000000000000000000B4 +:103C100000000000000000000000000000000000A4 +:103C20000000000000000000000000000000000094 +:103C30000000000000000000000000000000000084 +:103C40000000000000000000000000000000000074 +:103C50000000000000000000000000000000000064 +:103C60000000000000000000000000000000000054 +:103C70000000000000000000000000000000000044 +:103C80000000000000000000000000000000000034 +:103C90000000000000000000000000000000000024 +:103CA0000000000000000000000000000000000014 +:103CB0000000000000000000000000000000000004 +:103CC00000000000000000000000000000000000F4 +:103CD00000000000000000000000000000000000E4 +:103CE00000000000000000000000000000000000D4 +:103CF00000000000000000000000000000000000C4 +:103D000000000000000000000000000000000000B3 +:103D100000000000000000000000000000000000A3 +:103D20000000000000000000000000000000000093 +:103D30000000000000000000000000000000000083 +:103D40000000000000000000000000000000000073 +:103D50000000000000000000000000000000000063 +:103D60000000000000000000000000000000000053 +:103D70000000000000000000000000000000000043 +:103D80000000000000000000000000000000000033 +:103D90000000000000000000000000000000000023 +:103DA0000000000000000000000000000000000013 +:103DB0000000000000000000000000000000000003 +:103DC00000000000000000000000000000000000F3 +:103DD0000000000000000000000000008200000061 +:103DE00000000000000000000000000000000000D3 +:103DF0004000000000008200000000008800000079 +:103E000002000000020000000000000000000200AC +:103E10002000000000000000000000000000200062 +:103E20004000200000002000880000008800000002 +:103E30002000200000000000000000000200C00080 +:103E400020002000880020002000000020008800C2 +:103E50002000200000000000000010000000000012 +:103E60000000400000000000000000000000000012 +:103E70000000000000000000000000000000000042 +:103E80000000000000000000000000000000000032 +:103E90000000000000000000000000000000000022 +:103EA0000000000000000000000000000000020010 +:103EB0000000000000000000000000000000000002 +:103EC00000000000000000000000000000000000F2 +:103ED00000000000000000000000000000000000E2 +:103EE00000410000000000400040004000000000D1 +:103EF00000080000000000000000000000000000BA +:103F00000000000000400000004000000000000031 +:103F10000000000000410000000000000000000060 +:103F20000000000000000000000000000000000091 +:103F30000000000000000000000000000000000081 +:103F40000000000000000000000000000000000071 +:103F50000000000000000000000000000000000061 +:103F60000000000000000008000000000000000049 +:103F700000080000008400C00000000000C008002D +:103F800000000000000000C000000000020000006F +:103F90000008008400000000000000000000000095 +:103FA00000000000000000080000000000080008F9 +:103FB00000000040000002080000000000000000B7 +:103FC00000000000000800080000000000080008D1 +:103FD00000000000000000080000000000000000D9 +:103FE0000000000000410000000000000000000090 +:103FF0000000000000000000000000000000900031 +:1040000000000000000000080003000000000000A5 +:1040100000000000000000000000000000000000A0 +:104020000000000000000008000000000000000088 +:104030000000000000000000000000000000000080 +:104040000000000000000000000000000000000070 +:104050000000000000000000000000000000000060 +:1040600090000000000000000000000000000000C0 +:104070000000000000000000000000A000000000A0 +:104080000084000000000000008400000000000028 +:104090000000000000000000000000000000000020 +:1040A0000000000000000000000000000000000010 +:1040B0000000000000000000000000000000000000 +:1040C00000000000000000000000000000000000F0 +:1040D00000000000000000000000000000000000E0 +:1040E00000000000000000000000000000000000D0 +:1040F0000000000000000000880000000000000038 +:10410000000000000000000082000000000000002D +:104110000000900000008800000000402000000027 +:104120000000820000000000820000000000820009 +:1041300000000000000000000000000000008200FD +:10414000A0000000000000000000080000000000C7 +:10415000000000000000000000000000000000005F +:10416000000000000000000000002000000000002F +:10417000110000000000000000000000000020040A +:1041800000000020200000100004080000000000D3 +:1041900000004002000009000200000000000000D2 +:1041A00000000002080000000000002005001000D0 +:1041B0000300410000000000000000000000008833 +:1041C00000000000000000000000000005000800E2 +:1041D00003000500000000000000000000000000D7 +:1041E00000000000000000000000000000000000CF +:1041F00000000000000000000000000000000000BF +:1042000000000000000000000000000000000000AE +:10421000000000000008000000000000000000088E +:104220000000000000000000000000000000080086 +:10423000000000000000000000000000000000007E +:10424000000000000000000000000000000000006E +:10425000000000000000000000000000000000005E +:10426000000000000000000000000000000000004E +:104270000000000000000000000000000000000836 +:1042800000A000000000000000000000000000008E +:10429000000000000000000000000000000000001E +:1042A000000000000000000000000000000000000E +:1042B00000000000000000000000000000000000FE +:1042C00000000000000000000000000000000000EE +:1042D00000000000000000000000000000000000DE +:1042E00000000000000000000000000000000000CE +:1042F00000000000000000000000000000000000BE +:1043000000000000000000000000000000000000AD +:104310000000000300000000000000080000000092 +:10432000000000000000000000000000000000008D +:10433000000000000000000000000000000000007D +:10434000020000000000000000000000000000006B +:10435000000000000000000000000000000000005D +:10436000000000000000000000000000000000004D +:1043700000000000000002080088000000000000AB +:1043800000080900000000000000000020000000FC +:1043900000000000000020400000020011000000AA +:1043A00009080300004000000000000008000000B1 +:1043B0000000000000000000080000000888030062 +:1043C0000000034011000888000000000000000009 +:1043D000000000000000000008000002088808003B +:1043E0000200082003000800000002000000000096 +:1043F00000000000000000000000000000000000BD +:1044000000000000000000000000000000000000AC +:10441000000000000000000000000000000000009C +:10442000000000000000000000000000000000008C +:10443000000000000000000000000000000000007C +:10444000000000000000000000000000000000006C +:10445000000000000000000000000000000000005C +:10446000000000000000000000000000000000004C +:10447000000000000000000000000000000000003C +:10448000000000000000000000000000000000002C +:10449000000000000000000000000000000000001C +:1044A000000000000000000000000000000000000C +:1044B00000000000000000000000000000000000FC +:1044C00000000000000000000000000000000000EC +:1044D00000000000000000000000000000000000DC +:1044E00000000000000000000000000000000000CC +:1044F00000000000000000000000000000000000BC +:1045000000000000000000000000000000000000AB +:10451000000000000000000000000000000000009B +:10452000000000000000000000000000000000008B +:10453000000000000000000000000000000000007B +:10454000000000000000000000000000000000006B +:10455000000000000000000000000000000000005B +:10456000000000000000000000000000000000004B +:10457000000000000000000000000000000000003B +:10458000000000000000000000000000000000002B +:10459000000000000000000000000000000000001B +:1045A000000000000000000000000000000000000B +:1045B00000000000000000000000000000000000FB +:1045C00000000000000000000000000000000000EB +:1045D00000000000000000000000000000000000DB +:1045E00000000000000000000000000000000000CB +:1045F00000000000000000000000000000000000BB +:1046000000000000000000000000000000000000AA +:10461000000000000000000000000000000000009A +:10462000000000000000000000000000000000008A +:10463000000000000000000000000000000000007A +:10464000000000000000000000000000000000006A +:10465000000000000000000000000000000000005A +:10466000000000000000000000000000000000004A +:10467000000000000000000000000000000000003A +:10468000000000000000000000000000000000002A +:10469000000000000000000000000000000000001A +:1046A000000000000000000000000000000000000A +:1046B00000000000000000000000000000000000FA +:1046C00000000000000000000000000000000000EA +:1046D00000000000000000000000000000000000DA +:1046E00000000000000000000000000000000000CA +:1046F00000000000000000000000000000000000BA +:1047000000000000000000000000000000000000A9 +:104710000000000000000000000000000000000099 +:104720000000000000000000000000000000000089 +:104730000000000000000000000000000000000079 +:104740000000000000000000000000000000000069 +:104750000000000000000000000000000000000059 +:104760000000000000000000000000000000000049 +:104770000000000000000000000000000000000039 +:104780000000000000000000000000000000000029 +:104790000000000000000000000000000000000019 +:1047A0000000000000000000000000000000000009 +:1047B00000000000000000000000000000000000F9 +:1047C00000000000000000000000000000000000E9 +:1047D00000000000000000000000000000000000D9 +:1047E00000000000000000000000000000000000C9 +:1047F00000000000000000000000000000000000B9 +:1048000000000000000000000000000000000000A8 +:104810000000000000000000000000000000000098 +:104820000000000000000000000000000000000088 +:104830000000000000000000000000000000000078 +:104840000000000000000000000000000000000068 +:104850000000000000000000000000000000000058 +:104860000000000000000000000000000000000048 +:104870000000000000000000000000000000000038 +:104880000000000000000000000000000000000028 +:104890000000000000000000000000000000000018 +:1048A0000000000000000000000000000000000008 +:1048B00000000000000000000000000000000000F8 +:1048C00000000000000000000000000000000000E8 +:1048D00000000000000000000000000000000000D8 +:1048E00000000000000000000000000000000000C8 +:1048F00000000000000000000000000000000000B8 +:1049000000000000000000000000000000000000A7 +:104910000000000000000000000000000000000097 +:104920000000000000000000000000000000000087 +:104930000000000000000000000000000000000077 +:104940000000000000000000000000000000000067 +:104950000000000000000000000000000000000057 +:104960000000000000000000000000000000000047 +:104970000000000000000000000000000000000037 +:104980000000000000000000000000000000000027 +:104990000000000000000000000000000000000017 +:1049A0000000000000000000000000000000000007 +:1049B00000000000000000000000000000000000F7 +:1049C00000000000000000000000000000000000E7 +:1049D00000000000000000000000000000000000D7 +:1049E00000000000000000000000000000000000C7 +:1049F00000000000000000000000000000000000B7 +:104A000000000000000000000000000000000000A6 +:104A10000000000000000000000000000000000096 +:104A20000000000000000000000000000000000086 +:104A30000000000000000000000000000000000076 +:104A40000000000000000000000000000000000066 +:104A50000000000000000000000000000000000056 +:104A60000000000000000000000000000000000046 +:104A70000000000000000000000000000000000036 +:104A80000000000000000000000000000000000026 +:104A90000000000000000000000000000000000016 +:104AA0000000000000000000000000000000000006 +:104AB00000000000000000000000000000000000F6 +:104AC00000000000000000000000000000000000E6 +:104AD00000000000000000000000000000000000D6 +:104AE00000000000000000000000000000000000C6 +:104AF00000000000000000000000000000000000B6 +:104B000000000000000000000000000000000000A5 +:104B10000000000000000000000000000000000095 +:104B20000000000000000000000000000000000085 +:104B30000000000000000000000000000000000075 +:104B40000000000000000000000000000000000065 +:104B50000000000000000000000000000000000055 +:104B60000000000000000000000000000000000045 +:104B70000000000000000000000000000000000035 +:104B80000000000000000000000000000000000025 +:104B90000000000000000000000000000000000015 +:104BA0000000000000000000000000000000000005 +:104BB00000000000000000000000000000000000F5 +:104BC00000000000000000000000000000000000E5 +:104BD00000000000000000000000000000000000D5 +:104BE00000000000000000000000000000000000C5 +:104BF00000000000000000000000000000000000B5 +:104C000000000000000000000000000000000000A4 +:104C10000000000000000000000000000000000094 +:104C20000000000000000000000000000000000084 +:104C30000000000000000000000000000000000074 +:104C40000000000000000000000000000000000064 +:104C50000000000000000000000000000000000054 +:104C60000000000000000000000000000000000044 +:104C70000000000000000000000000000000000034 +:104C80000000000000000000000000000000000024 +:104C90000000000000000000000000000000000014 +:104CA0000000000000000000000000000000000004 +:104CB00000000000000000000000000000000000F4 +:104CC00000000000000000000000000000000000E4 +:104CD00000000000000000000000000000000000D4 +:104CE00000000000000000000000000000000000C4 +:104CF00000000000000000000000000000000000B4 +:104D000000000000000000000000000000000000A3 +:104D10000000000000000000000000000000000093 +:104D200000000000000084000000000000000000FF +:104D30008800880084008800000000000000000057 +:104D400088000000000020000000820000008800B1 +:104D500088008880000320000000000000000000A0 +:104D60000000200000008400820088002000000075 +:104D70000000040021880000880000000000880076 +:104D800000000000000020000000200000000000E3 +:104D900000000000200800000000000000000000EB +:104DA0000000009000000000000000000000400033 +:104DB0000000404000000000000000000000000073 +:104DC00000000000000000000000000000000000E3 +:104DD00000000000000800000000000000000000CB +:104DE00000000000000000000000200000000000A3 +:104DF000000000000000100400000000000000009F +:104E000000000000000000000000000000000000A2 +:104E10000000000000002001000000000000000071 +:104E20000000000000000000000000000000000082 +:104E3000000000000000000500000000000000006D +:104E40000000000000000000000000000000000062 +:104E50000000000000000000000000000000000052 +:104E60000000000000000000000000000000000042 +:104E700000000040000000000000000000000000F2 +:104E80000000000000000000000000000000000022 +:104E90000000000000400000008000000000001042 +:104EA00000000000000000000000000000C0000042 +:104EB0000000008800080000002000840000008836 +:104EC00000000000000000000000000000000000E2 +:104ED0000000000000A0000800000000000000002A +:104EE00000000000000000000000000000000000C2 +:104EF0000000000000000000002000000000000092 +:104F000000000000000000000000000000000000A1 +:104F10000000000000000000000000040008002164 +:104F20000005002100000000000200000000002138 +:104F300000000021000000000000100900210021F5 +:104F400000410010000000000000000500030021E7 +:104F50000000000000000000000020000000000031 +:104F600000050000000000000000000000410000FB +:104F70000000000000000000000000000000000031 +:104F80000000000000000000000000000000000021 +:104F90000000000000000000000000000000000011 +:104FA0000000000000000000000000000000000001 +:104FB0000000000000000000000000008000000071 +:104FC00000000000000000000000000000000000E1 +:104FD000000000000000000000000300800000004E +:104FE00000000000000000000000000000000000C1 +:104FF00000000000000000000000000008000000A9 +:10500000000003000000000000000000000000009D +:105010000000000000000000000000000000000090 +:105020000000000000002000000020002000900090 +:1050300000002000000082000000820082000400C6 +:10504000000000000000820000008200400090008C +:105050000000000000008200400082009000080074 +:1050600000000000A000040082008200A000820076 +:10507000A000000082000000820082008200820006 +:1050800082000000A000A000820082008200820056 +:1050900082000000820000008200900082008200F6 +:1050A000820000000000000000000000000000007E +:1050B0000088000000000000000000000000000860 +:1050C00000000000000000000000000000000000E0 +:1050D0000300000000004000000000000000081075 +:1050E00008000000000000000000000000000000B8 +:1050F000000000000000000000000000210000008F +:105100000000000008000000000000000000000097 +:10511000080000000800000000000000000000007F +:10512000000004000000000000000000000000007B +:10513000000000000000000000000000000000412E +:10514000000000A1000000000000000000000000BE +:105150000000000000000000000000000000A0416E +:10516000000082210000C0000000C000000000001C +:10517000C00000000000000000000000000000006F +:10518000000000000000000000000000000000001F +:105190000000000000000000080000000000000007 +:1051A00000000000A000000000000000000000005F +:1051B00000000000000000000000000000000000EF +:1051C00000000000000400000000000000000000DB +:1051D00000000000000000000000000000000000CF +:1051E00000000000000000000000000000000000BF +:1051F00000000000000000000000000000000000AF +:10520000000000000000000000000000000000009E +:10521000000000000000000000000000000000008E +:105220000000000000000008000000050008000069 +:105230000000000400040000000000040000000062 +:10524000004100080408820040008200A000A00283 +:10525000A0000000000000000000080000000004A2 +:105260000004400208080000000008000800A00038 +:105270004002A0000005000020008800000400009B +:10528000000000000800042008000800A000000042 +:10529000A000A000000000000000000000000000CE +:1052A0000800C0000000080004000000000000002A +:1052B00000000000000000000000000000000000EE +:1052C00000000000000000000000000000000000DE +:1052D00000000000000000000000000000000000CE +:1052E00000000000000000000000000000000000BE +:1052F00000000000000000000000000000000000AE +:10530000000000000000000000000000000000009D +:10531000000000000000000000000000000000008D +:10532000000000000000000000002100000100015A +:10533000000100C10001000100C100850000000162 +:10534000000200100001000100C100000001000186 +:10535000000100C00001A00100C0014100010101E5 +:10536000008200100001000100C1000000000001E7 +:105370000001000100C00001A00100C00183000085 +:105380000101002000840001000100C000000001B4 +:105390000001000100C00001A00100C00183000065 +:1053A0000101002000200001000100C000000041B8 +:1053B0000041004100840041004100844041001050 +:1053C0001141000000800041004100A000000041A8 +:1053D0000041004100C00041004100C004410040C4 +:1053E0000341000000800041004100A000000000D7 +:1053F00000410041004100C00041004100854041A2 +:1054000000412041000000000041004100C00000B8 +:1054100000410041004100C00041004100A0404166 +:1054200000410841000000000041004100C00000B0 +:1054300041000300000000804100890000001000CE +:1054400002000280008084004100C1000000800052 +:1054500041000300000000804100850000000300BF +:1054600008001180008084004100C100000080001D +:10547000000341000300000000804100850000009F +:1054800003000200400000A085004100C1000000B0 +:10549000000041000300000000804100C000000047 +:1054A0000300020010000020A0004100C100000025 +:1054B000000001000100000000C00100C000000069 +:1054C00000008400A0080008C0000300C10000A084 +:1054D000080001000100000000C00100C000000041 +:1054E0000100A100A0080008C0848300C10000A042 +:1054F0000800000001000100000000C00100C00021 +:1055000000000100A10083400009C0004100C1006B +:105510000040400001000100000000C00100C00088 +:1055200000000100A100A1820041C1004100C100B2 +:105530000040400000C00001C0C1000000000001A8 +:1055400000C0A0890009000100C1000000000001A6 +:105550000001000000C00001C0C100000000000107 +:1055600000C104830009000100C100000000000127 +:1055700000010000000000C00001C0C100000000E8 +:10558000000100C140A00021000100C10000000096 +:1055900000010000000000C00001C0C100000000C8 +:1055A000000100C120A00003000100C100000000B4 +:1055B0000001000000000080004180C100000000E8 +:1055C000004100C1000300C1004100C10000000013 +:1055D0000041002000000080004180C10000000068 +:1055E000004100A080A000C1004100C100000000F7 +:1055F00000410020000000000080004180C1000048 +:105600000000004100A000030041004100C1000073 +:1056100000000041004000000080004180C1000007 +:105620000000004100A000050041004100C103004E +:105630000000004100400000C100800080C1000067 +:105640004104004002004100C141000080400000D0 +:105650004100000080004100C100800080C10000C6 +:105660004140804082004100C1C1000080400000F4 +:1056700041000000800041000000C100800080C1A6 +:1056800000004140800082004100C1C10000804014 +:1056900000004100000080004100C100800080C186 +:1056A00000004100800002004100C1C18000804034 +:1056B00000004100000080004100C1004000C0C166 +:1056C000000001018401C1000100C1050200C00108 +:1056D000000001000000C0000100C1004000C0C186 +:1056E00000000100200105000100C1050200C00109 +:1056F000000001000000C00001000000C1004000E7 +:10570000C0C100000100200003000100C1058400A9 +:10571000C001000001000000C0000100C100400005 +:10572000C0C1000001000400C1000100C1058200E9 +:10573000C001000001000000C000010000000000E6 +:10574000000000420000000000000000811200483C +:1057500007004800000000000000000000000000FA +:10576000000000420000000000000000811200481C +:1057700007004800000000000000000000000000DA +:105780000000000000420000000000000000811244 +:105790000048070048000000000000000000000072 +:1057A0000000000000420000000000000000811224 +:1057B0000048070048000000000000000000000052 +:1057C00000000000000000000000000000000000D9 +:1057D00000000000000000000000000000000000C9 +:1057E00000000000000000000000000000000000B9 +:1057F00000000000000000000000000000000000A9 +:105800000000000000000000000000000000000098 +:105810000000000000000000000000000000000088 +:105820000000000000000000000000000000000078 +:105830000000000000000000000000000000000068 +:105840000000000000000000000000000000000058 +:105850000000000000000000000000000000000048 +:105860000000000000000000000000000000000038 +:105870000000000000000000000000000000000028 +:105880000000000000000000000000000000000018 +:105890000000000000000000000000000000000008 +:1058A00000000000000000000000000000000000F8 +:1058B00000000000000000000000000000000000E8 +:1058C0000000757B000000000000000000000000E8 +:1058D00000000000000000000000000000000000C8 +:1058E000DEAE757B0000000000000000000000003C +:1058F00000000000000000000000000000000000A8 +:10590000DEAE0000757B000000000000000000001B +:105910000000000000000000000000000000000087 +:105920000000DEAE757B00000000000000000000FB +:105930000000000000000000000000000000000067 +:105940000000DEAE60C60300000000000000003171 +:10595000E0000000000000000C000000000000005B +:1059600000C0630660C603000000000000000031B4 +:10597000E0000000000000000C000000000000003B +:1059800000C06306000060C60300000000000000C5 +:105990000031E0000000000000000C0000000000EA +:1059A000000000C0630660C60300000000000000A5 +:1059B0000031E0000000000000000C0000000000CA +:1059C000000000C0630600000000000000000000AE +:1059D00000000000000000000000000000000000C7 +:1059E00000000000000000000000000000000000B7 +:1059F00000000000000004000000000000000200A1 +:105A0000000000000400000000000000840084008A +:105A100000000000880000002000000002000000DC +:105A20002000000000002000000000000000200016 +:105A3000840000002000000088000000200000001A +:105A40002000000000002000000000000000000016 +:105A50004000000000000000000000000000000006 +:105A60000000000000000000000000000000000036 +:105A70000000000000000000000000000000050021 +:105A80000000000000000000000000000000000016 +:105A90000000000000000000000000000000000006 +:105AA00000000000000000000000000000000000F6 +:105AB00000000000000000000000000000000000E6 +:105AC00000000900000000000000000000000000CD +:105AD00000000000000000000000000800000004BA +:105AE00000000000000000000000000000000000B6 +:105AF00000000000000000000000000000000000A6 +:105B00000000000000000000000000000000000095 +:105B10000000000000000000000000000000000085 +:105B2000000000000000000000000000000000086D +:105B30000000000000000000000000000000000065 +:105B40000000000000000000000000000000000055 +:105B500000820082008200080000000800000000AF +:105B60000088000800840004000000000008000015 +:105B70000000000000080008000000080008000005 +:105B8000008800C0000000000000000000000008C5 +:105B900000000000000000080008000000080008E5 +:105BA00000000000000000000000000000000008ED +:105BB00000000000000000080008000000080008C5 +:105BC00000000000000000000000000000000008CD +:105BD0000000000000410021000000000003000060 +:105BE00000000000000000100000000000000000A5 +:105BF0000000000000000010000000000000000095 +:105C00000000000000000000000000000000000094 +:105C10000000000000000000000000000000000084 +:105C20000000000000000000000000000000000074 +:105C30000000000000000000000000000000000064 +:105C40000000000000000000000000000000000054 +:105C50000000000000000000000000000000000044 +:105C600000000000008400080000000000000000A8 +:105C70000000000000000000000000000000000024 +:105C80000000000000000000000000000000000014 +:105C900000000000000000000000210000000300E0 +:105CA00000000000000000000000000000000000F4 +:105CB00000000000000008000800000000000800CC +:105CC00021000000000000000000000000000000B3 +:105CD00000000000000000000000000000000000C4 +:105CE00000000000000000000000000000000000B4 +:105CF00000000000000000000000000000000000A4 +:105D0000000004000000000000000000000040004F +:105D10000000000000000000000000000000000083 +:105D20000000000000000000000000000000000073 +:105D300000000000400000000000000040000000E3 +:105D400000000000080000004000000040000000CB +:105D500000000000000010820010000000000000A1 +:105D60000000000000000000000000000000000033 +:105D70000000000000000000000000000000000023 +:105D80000000000000000000000000000000000013 +:105D90000000000000000000000000000000000003 +:105DA00000000000000000000000000000000000F3 +:105DB00000000000000000000000000000000000E3 +:105DC00000000000000000000000000000000000D3 +:105DD00000000000000000000000000000000008BB +:105DE00000000000000000000000000800000000AB +:105DF00000000000000000000000000000000000A3 +:105E00000000000000000000000000000000000092 +:105E10000000000000000000000000000000000082 +:105E20000000000000000000000000000000000072 +:105E30000000000000000000000000000000000062 +:105E40000000000000000000000000000000000052 +:105E50000000000000000000000000000000000042 +:105E600000A0000000000000000000000000000092 +:105E700000A0000000000000000000000000000082 +:105E80000010000000000000000000000000000002 +:105E90000000000000000000000000000000000002 +:105EA00000000000000000000000000000000000F2 +:105EB00000000000000000000000000000000000E2 +:105EC000000000000000000000000300000000844B +:105ED00000000000000000000000000000000000C2 +:105EE00000000000000000000000000000000000B2 +:105EF0000000000000000010000000000000000092 +:105F00000000000000000000000000000000000091 +:105F100000000000000000000000000082000000FF +:105F20000000000000000000000000000000000071 +:105F30000000000000000000000000000000000061 +:105F4000000004000000000000000000000000004D +:105F50000000000000000000000900000000000038 +:105F60000000000000000000000000000000000031 +:105F70000000000000000000000000000000000021 +:105F80000000000000000000000000000000000011 +:105F90000000000000000000000000000000000001 +:105FA00000000000000000000000000000000000F1 +:105FB00000000000000000000000000000000000E1 +:105FC00000000000000000000000000000000000D1 +:105FD00000000000000000000000000000000000C1 +:105FE00000000000000000000000000000000000B1 +:105FF00000000000000000000000000000000000A1 +:106000000000000000000000000000000000000090 +:106010000000000000000000000000000000000080 +:106020000000000000000000000000000000000070 +:106030000000000000000000000000000000000060 +:106040000000000000000000000000000000000050 +:106050000000000000000000000000000000000040 +:106060000000000000000000000000000000000030 +:106070000000000000000000000000000000000020 +:106080000000000000000000000000000000000010 +:106090000000000000000000000000000000000000 +:1060A00000000000000000000000000000000000F0 +:1060B00000000000000000000000000000000000E0 +:1060C00000000000000000000000000000000000D0 +:1060D00000000000000000000000000000000000C0 +:1060E00000000000000000000000000000000000B0 +:1060F00000000000000000000000000000000000A0 +:10610000000000000000000000000000000000008F +:10611000000000000000000000000000000000007F +:10612000000000000000000000000000000000006F +:10613000000000000000000000000000000000005F +:10614000000000000000000000000000000000004F +:10615000000000000000000000000000000000003F +:10616000000000000000000000000000000000002F +:10617000000000000000000000000000000000001F +:10618000000000000000000000000000000000000F +:1061900000000000000000000000000000000000FF +:1061A00000000000000000000000000000000000EF +:1061B00000000000000000000000000000000000DF +:1061C00000000000000000000000000000000000CF +:1061D00000000000000000000000000000000000BF +:1061E00000000000000000000000000000000000AF +:1061F000000000000000000000000000000000009F +:10620000000000000000000000000000000000008E +:10621000000000000000000000000000000000007E +:10622000000000000000000000000000000000006E +:10623000000000000000000000000000000000005E +:10624000000000000000000000000000000000004E +:10625000000000000000000000000000000000003E +:10626000000000000000000000000000000000002E +:10627000000000000000000000000000000000001E +:10628000000000000000000000000000000000000E +:1062900000000000000000000000000000000000FE +:1062A00000000000000000000000000000000000EE +:1062B00000000000000000000000000000000000DE +:1062C00000000000000000000000000000000000CE +:1062D00000000000000000000000000000000000BE +:1062E00000000000000000000000000000000000AE +:1062F000000000000000000000000000000000009E +:10630000000000000000000000000000000000008D +:10631000000000000000000000000000000000007D +:10632000000000000000000000000000000000006D +:10633000000000000000000000000000000000005D +:10634000000000000000000000000000000000004D +:10635000000000000000000000000000000000003D +:10636000000000000000000000000000000000002D +:10637000000000000000000000000000000000001D +:10638000000000000000000000000000000000000D +:1063900000000000000000000000000000000000FD +:1063A00000000000000000000000000000000000ED +:1063B00000000000000000000000000000000000DD +:1063C00000000000000000000000000000000000CD +:1063D00000000000000000000000000000000000BD +:1063E00000000000000000000000000000000000AD +:1063F000000000000000000000000000000000009D +:10640000000000000000000000000000000000008C +:10641000000000000000000000000000000000007C +:10642000000000000000000000000000000000006C +:10643000000000000000000000000000000000005C +:10644000000000000000000000000000000000004C +:10645000000000000000000000000000000000003C +:10646000000000000000000000000000000000002C +:10647000000000000000000000000000000000001C +:10648000000000000000000000000000000000000C +:1064900000000000000000000000000000000000FC +:1064A00000000000000000000000000000000000EC +:1064B00000000000000000000000000000000000DC +:1064C00000000000000000000000000000000000CC +:1064D00000000000000000000000000000000000BC +:1064E00000000000000000000000000000000000AC +:1064F000000000000000000000000000000000009C +:10650000000000000000000000000000000000008B +:10651000000000000000000000000000000000007B +:10652000000000000000000000000000000000006B +:10653000000000000000000000000000000000005B +:10654000000000000000000000000000000000004B +:10655000000000000000000000000000000000003B +:10656000000000000000000000000000000000002B +:10657000000000000000000000000000000000001B +:10658000000000000000000000000000000000000B +:1065900000000000000000000000000000000000FB +:1065A00000000000000000000000000000000000EB +:1065B00000000000000000000000000000000000DB +:1065C00000000000000000000000000000000000CB +:1065D00000000000000000000000000000000000BB +:1065E00000000000000000000000000000000000AB +:1065F000000000000000000000000000000000009B +:10660000000000000000000000000000000000008A +:10661000000000000000000000000000000000007A +:10662000000000000000000000000000000000006A +:10663000000000000000000000000000000000005A +:10664000000000000000000000000000000000004A +:10665000000000000000000000000000000000003A +:10666000000000000000000000000000000000002A +:10667000000000000000000000000000000000001A +:10668000000000000000000000000000000000000A +:1066900000000000000000000000000000000000FA +:1066A00000000000000000000000000000000000EA +:1066B00000000000000000000000000000000000DA +:1066C00000000000000000000000000000000000CA +:1066D00000000000000000000000000000000000BA +:1066E00000000000000000000000000000000000AA +:1066F000000000000000000000000000000000009A +:106700000000000000000000000000000000000089 +:106710000000000000000000000000000000000079 +:106720000000000000000000000000000000000069 +:106730000000000000000000000000000000000059 +:106740000000000000000000000000000000000049 +:106750000000000000000000000000000000000039 +:106760000000000000000000000000000000000029 +:106770000000000000000000000000000000000019 +:106780000000000000000000000000000000000009 +:1067900000000000000000000000000000000000F9 +:1067A00000000000000000000000000000000000E9 +:1067B00000000000000000000000000000000000D9 +:1067C00000000000000000000000000000000000C9 +:1067D00000000000000000000000000000000000B9 +:1067E00000000000000000000000000000000000A9 +:1067F0000000000000000000000000000000000099 +:106800000000000000000000000000000000000088 +:106810000000000000000000000000000000000078 +:106820000000000000000000000000000000000068 +:106830000000000000000000000000000000000058 +:106840000000000000000000000000000000000048 +:106850000000000000000000000000000000000038 +:106860000000000000000000000000000000000028 +:106870000000000000000000000000000000000018 +:106880000000000000000000000000000000000008 +:1068900000000000000000000000000000000000F8 +:1068A00000000000000000000000000000000000E8 +:1068B00000000000000000000000000000000000D8 +:1068C00000000000000000000000000000000000C8 +:1068D00000000000000000000000000000000000B8 +:1068E00000000000000000000000000000000000A8 +:1068F0000000000000000000000000000000000098 +:106900000000000000000000000000000000000087 +:106910000000000000000000000000000000000077 +:106920000000000000000000000000000000000067 +:106930000000000000000000000000000000000057 +:106940000000000000000000000000000000000047 +:106950000000000000000000000000000000000037 +:106960000000000000000000000000000000000027 +:106970000000000000000000000000000000000017 +:106980000000000000000000000000000100000006 +:1069900001800190000000000000000000000000E5 +:1069A00000000000000000000000000000000000E7 +:1069B00000000000000000000000000000000000D7 +:1069C00000000000000100000000000000000000C6 +:1069D00000000000000000000000000000000000B7 +:1069E00000000000000000000000000000000000A7 +:1069F0000000000000000000000000000000000097 +:106A00000000000000000000000000000000040082 +:106A10000000104004100000000000000000000012 +:106A20000000000000000000000000000000000066 +:106A30000000000000000000000000000000000056 +:106A40000000000000000000000000000000000046 +:106A50000000000000000000000000000000000036 +:106A60000000000000000000000000000000000026 +:106A70000000000000000000000000000000000016 +:106A80000000000000000000000000000000000006 +:106A900000000000000000000000000000000000F6 +:106AA00000000000000000000000000000000000E6 +:106AB00000000000000000000000000000000000D6 +:106AC00000000000000000000000000000000000C6 +:106AD00000000000000000000000000000000000B6 +:106AE00000000000000000000000000000000000A6 +:106AF0000000000000000000000000000000000096 +:106B0000000000000000000000000008000000403D +:106B100000080040000800080000004000080000D5 +:106B20000008000800080000000800080008000035 +:106B300000840008008200080008000800840008A3 +:106B4000008200840008000800080000000800849B +:106B50000000000800080000000800080008000805 +:106B60000008008400080008000800080008000869 +:106B700000000008000800000008004000080008AD +:106B8000000800000008000800080040000000089D +:106B900000000000000000000000C0030000000032 +:106BA00000000000000300000008000000000000DA +:106BB00000000000000000000000000000000000D5 +:106BC00000000008000000000000000000000000BD +:106BD000000800000000001000000000000000009D +:106BE00000050000000000000000000000000000A0 +:106BF0000000000000050000001000000000000080 +:106C00000000000000000000000000000000000084 +:106C10000000000000000000000000A000080008C4 +:106C20000000000000000000000000000000000064 +:106C30000000000000000000000000000000000054 +:106C40000000000000000000000000000000000044 +:106C50000000000000000000000000000000000034 +:106C60000000000000000000000000000000000024 +:106C70000000000000000000000000000000000014 +:106C80000000000000000000000000000000000004 +:106C900000000000000000000000000000000000F4 +:106CA00000000000000000000000000000000000E4 +:106CB00000000000000000000000000000000000D4 +:106CC0000080000000000000000000000000000044 +:106CD00000000000000000000000000000000000B4 +:106CE00000000000000001000000000000000000A3 +:106CF0000000000000000000000000000000000094 +:106D00000000000000000000000000000000010082 +:106D100000000000008200000000000800000000E9 +:106D20000040000000000000000000000000000023 +:106D30000000000000000000000000000000000053 +:106D400000000040000800000000000800000000F3 +:106D50000000000000000000000000000000000033 +:106D6000000000000000000008000000000000001B +:106D70000000000000000000000000000000000013 +:106D80000000000000000000000000000000000003 +:106D90000800000082000000000000000021000048 +:106DA00000000000000000000008000000000000DB +:106DB00000000000000000000000000800000000CB +:106DC00000000000000000000000000000000000C3 +:106DD00000000000000000000000000000000000B3 +:106DE00000000000000000000000000000000000A3 +:106DF0000000000000000000000000000000000093 +:106E00000000000000000000000000000000000082 +:106E10000000000000000000000000000000000072 +:106E20000000000000000000000000000000000062 +:106E30000000000000000000000000000000000052 +:106E40000000000000000000000000000000000042 +:106E50000000000000000000000000000000000032 +:106E60000000000000000000000000000000000022 +:106E70000000000000000000000000000000000012 +:106E80000000000000000000000000000000000002 +:106E9000000000000000000000000000840000006E +:106EA00000000000000000000000000000000000E2 +:106EB00000000000000000000000000000000000D2 +:106EC00000000000000000000000000000000000C2 +:106ED00000000000000000000000000000000000B2 +:106EE0000000000000000080000000000000000022 +:106EF00000000000002100800000000000000000F1 +:106F00000000000000000000000800000000000079 +:106F10000000000000000000000000000000000071 +:106F20000000000000000000000000000000000061 +:106F30000000000000000000000000000000000051 +:106F40000008000000000000000000000000000039 +:106F50000000000000000000000000000000000031 +:106F60000000000000000000001000000000000011 +:106F70000000000000000000001000000000000001 +:106F80000000000000000000000000000000000001 +:106F900000000000000000000000000000000000F1 +:106FA00000000000010120010000000000000000BE +:106FB00000000000000000000000000000000000D1 +:106FC00000000000000000000000000000000000C1 +:106FD00000000000000000000000000000000000B1 +:106FE00000000000000000000000000000000000A1 +:106FF0000000000000000000000000000000000091 +:107000000000000000000000000000000000000080 +:107010000000000000000000000000000000000070 +:10702000000000000000114180020020004000002C +:107030000000000000000000000000000000000050 +:107040000000000000000000000000000000000040 +:107050000000000000000000000000000000000030 +:107060000000000000000000000000000000000020 +:107070000000000000000000000000000000000010 +:107080000000000000000000000000000000000000 +:1070900000000000000000000000000000000000F0 +:1070A00000000000000000000000002000800080C0 +:1070B00000000000000000000000000000000000D0 +:1070C00000000000000000000000000000000000C0 +:1070D00000000000000000000000000000000000B0 +:1070E00000000000000000000000000000000000A0 +:1070F0000000000000000000000000000000000090 +:10710000000000000000000000000000000000007F +:10711000000000000000000000000000000000006F +:10712000000000000000000000002000000000043B +:1071300000820000000000000000000000000000CD +:10714000000000000000000000000000000000003F +:10715000000000000000000000000000000000002F +:10716000000000000000000000000000000000001F +:10717000000000000000000000000000000000000F +:1071800000000000000000000000000000000000FF +:1071900000000000000000000000000000000000EF +:1071A00000000000000000000000000000000100DE +:1071B00002000000000000000000000000000000CD +:1071C00000000000000000000000000000000000BF +:1071D00000000000000000000000000000000000AF +:1071E000000000000000000000000000000000009F +:1071F000000000000000000000000000000000008F +:10720000000000000000000000000000000000007E +:10721000000000000000000000000000000000006E +:10722000000000000000000000000000000000005E +:1072300010008300000000000000000000000000BB +:10724000000000000000000000000000000000003E +:10725000000000000000000000000000000000002E +:10726000000000000000000000000000000000001E +:10727000000000000000000000000000000000000E +:1072800000000000000000000000000000000000FE +:1072900000000000000000000000000000000000EE +:1072A00000000000000000000000000000000000DE +:1072B00080008000000000000000000000000000CE +:1072C00000000000000000000000000000000000BE +:1072D00000000000000000000000000000000000AE +:1072E000000000000000000000000000000000009E +:1072F000000000000000000000000000000000008E +:10730000000000000000000000000000000000007D +:10731000000000000000000000000000000000006D +:10732000000000000000000000000000000000005D +:107330000000C0004000200020000000000000000D +:10734000000000000000000000000000000000003D +:10735000000000000000000000000000000000002D +:10736000000000000000000000000000000000001D +:10737000000000000000000000000000000000000D +:1073800000000000000000000000000000000000FD +:1073900000000000000000000000000000000000ED +:1073A00000000000000000000000000000000000DD +:1073B00000000000000000E00700000000000000E6 +:1073C00000000000000000000000000000000000BD +:1073D00000000000000000000000000000000000AD +:1073E000000000000000000000000000000000009D +:1073F000000000000000000000000000000000008D +:10740000000000000000000000000000000000007C +:10741000000000000000000000000000000000006C +:10742000000000000000000000000000000000005C +:10743000000000000000AAF03CFF00000000000077 +:10744000000000000000000000000000000000003C +:10745000000000000000000000000000000000002C +:10746000000000000000000000000000000000001C +:10747000000000000000000000000000000000000C +:1074800000000000000000000000000000000000FC +:1074900000000000000000000000000000000000EC +:1074A00000000000000000000000000000000000DC +:1074B0000000000000000000AAF03C0000000000F6 +:1074C00000000000000000000000000000000000BC +:1074D00000000000000000000000000000000000AC +:1074E000000000000000000000000000000000009C +:1074F000000000000000000000000000000000008C +:10750000000000000000000000000000000000007B +:10751000000000000000000000000000000000006B +:10752000000000000000000000000000000000005B +:107530000000000000000000000000000000C3C3C5 +:10754000C3C30000000000000000000000000000B5 +:10755000000000000000000000000000000000002B +:10756000000000000000000000000000000000001B +:10757000000000000000000000000000000000000B +:1075800000000000000000000000000000000000FB +:1075900000000000000000000000000000000000EB +:1075A00000000000000000000000000000000000DB +:1075B00000000000000000000000000000000000CB +:1075C000C3C3C3C3000000000000000000000000AF +:1075D00000000000000000000000000000000000AB +:1075E000000000000000000000000000000000009B +:1075F000000000000000000000000000000000008B +:10760000000000000000000000000000000000007A +:10761000000000000000000000000000000000006A +:10762000000000000000000000000000000000005A +:107630000000000000000000000000000000102119 +:107640000002000D00A0000000000000000000008B +:10765000000000000000000000000000000000002A +:10766000000000000000000000000010000000000A +:10767000000000000000000000000000000000000A +:1076800000000000000000000000000000000000FA +:1076900000000000000000000000000000000000EA +:1076A00000000000000000000000000000000000DA +:1076B00000000000000000000000000000000000CA +:1076C00000000000000000000000000000000000BA +:1076D00000000000000000000000000000000000AA +:1076E000000000000000000000000000000000009A +:1076F000000000000000000000000000000000008A +:107700000000000000000000000000000000000079 +:107710000000000000000000000000000000000069 +:107720000000000000000000000000000000000059 +:107730000000000000000000000000000000000049 +:107740000000000000000000000000000000000039 +:107750000000000000000000000000000000000029 +:107760000000000000000000000000000000000019 +:107770000000000000000000000000000000000009 +:1077800000000000000000000000000000000000F9 +:1077900000000000000000000000000000000000E9 +:1077A00000000000000000000000000000000000D9 +:1077B00000000000000000000000000000000000C9 +:1077C000000000000F0FFF0000000000000000009C +:1077D00000000000000000000000000000000000A9 +:1077E0000000000000000000000000000000000099 +:1077F0000000000000000000000000000000000089 +:107800000000000000000000000000000000000078 +:107810000000000000000000000000000000000068 +:107820000000000000000000000000000000000058 +:107830000000000000000000000000000000000048 +:107840000000000000003C3C555500000000000016 +:107850000000000000000000000000000000000028 +:107860000000000000000000000000000000000018 +:107870000000000000000000000000000000000008 +:1078800000000000000000000000000000000000F8 +:1078900000000000000000000000000000000000E8 +:1078A00000000000000000000000000000000000D8 +:1078B00000000000000000000000000000000000C8 +:1078C00000000000000000000000000000000000B8 +:1078D00000000000000000000000000000000000A8 +:1078E0000000000000080000000000090000000087 +:1078F0000000000000000000000000000000000088 +:107900000000000000000000000000000000000077 +:107910000000000000000000000000000000000067 +:107920000000000000000000000000000000000057 +:107930000000000000000000000000000000000047 +:107940000000000000000000000000000000000037 +:107950000000000000000000000000000000000027 +:107960000000000000000000000000000000000017 +:107970000000000000000000000000000000000007 +:1079800000000000000000000000000000000000F7 +:1079900000000000000000000000000000000000E7 +:1079A00000000000000000000000000000000000D7 +:1079B00000000000000000000000000000000000C7 +:1079C00000000000000000000000000000000000B7 +:1079D00000000000000000000000000000000000A7 +:1079E0000000000000000000000000000000000097 +:1079F0000000000000000000000000000000000087 +:107A00000000000000000000000000000000000076 +:107A10000000000000000000000000000000000066 +:107A20000000000000000000000000000000000056 +:107A30000000000000000000000000000000000046 +:107A400000000000000000840000000000000008AA +:107A50000084000800000008000800080008000872 +:107A6000000800080084000800000000000800086A +:107A700000080084000000080084000800080008D6 +:107A800000080008000000000008000000080008CE +:107A900000080008000000080008000800080008AE +:107AA000000800080008000800080000000800089E +:107AB0000008000800080008000800080008000886 +:107AC00000080084000800080041000000100008C1 +:107AD000000000080000000000210000000000007D +:107AE0000000002100000000002100000000000054 +:107AF000000000210000000800410000000000001C +:107B00000000002100210000000000000021000012 +:107B10000000000000050008000000000010000048 +:107B20000000000000000000000000000005000050 +:107B30000000000000000000000000000000000045 +:107B400000000000000000000000030008004100E9 +:107B500008002100000000000000000000000000FC +:107B60000000000000000000000000000000000015 +:107B700000000000000000000000000000080000FD +:107B800000000000000000000008000000000000ED +:107B900000000000000000000000000000000000E5 +:107BA00000000000000000000000000000000000D5 +:107BB00000000000000000000000000000000000C5 +:107BC00000000000000000000000000000000000B5 +:107BD00000000000000000000000000000000000A5 +:107BE0000000000000000000000000000000000095 +:107BF0000000000000000000000000000000000085 +:107C00000000000000000000000000000000000074 +:107C10000000000000000000000000000000000064 +:107C200000000000000000000000000088000000CC +:107C30000000000000000000000000000000000044 +:107C40000000000000000000000000000000000034 +:107C50000000000000000000000000000000000024 +:107C60000000000000000000000000000000000014 +:107C70000000000000000000000000000000000004 +:107C800000000000000000000000000000000000F4 +:107C900000000000000000000000000000000000E4 +:107CA00000000000000000000000000000000000D4 +:107CB00000000000000000000000000000000000C4 +:107CC00000000000000000000000000000000000B4 +:107CD000000800000000000000000000000000009C +:107CE0000000000000000000000000000000000094 +:107CF0000000000000000000000000000000000084 +:107D00000000000000000000000000000000000073 +:107D1000000000000000000000000000000000055E +:107D2000000000000000000500000000000000004E +:107D3000000800000000000000000000000000003B +:107D40000000000000000000000000000000000033 +:107D50000000000000000000000003000000000020 +:107D60000000000000000000000000000000000013 +:107D70000000000000000000000000000000000003 +:107D800000000000000000000000000000000000F3 +:107D900000000000000000000000000000000000E3 +:107DA00000000000000000000000000000000000D3 +:107DB00000000000000000000000000000000000C3 +:107DC00000000000000000000000000000000000B3 +:107DD000000000000810000000000041000000004A +:107DE0000000000000000000000000000000000093 +:107DF00000000000880000000000000000000000FB +:107E00000000000000000000000000000000000072 +:107E10000000000000000000000000000000000062 +:107E20000005000500050000002100050005000018 +:107E30000000400288110000000500000000000062 +:107E40000005000000000000000500000000000028 +:107E5000000800000000000000000000000000001A +:107E60000000000000000000000000000000000012 +:107E70000000000000000000000000000000000002 +:107E800000000000000000000000000000000000F2 +:107E900000000000000000000000000000000000E2 +:107EA00000000000000000000000000000000000D2 +:107EB00000000000000000000000000000000000C2 +:107EC00000000000000000000000000000000000B2 +:107ED0000000000000000000C000C100000100829E +:107EE0000100C00001000083C000C1000001008249 +:107EF0000100C00001000083C000C1000001008239 +:107F00000100C00001000083C000C1000001008228 +:107F10000100C00001000083000000000001008596 +:107F20000000000000010085000000000001008545 +:107F300000000000400000830001000000010085F7 +:107F400000000000000100850000000000000000AB +:107F5000000000000000000000008041C14100035B +:107F6000008041008021410000838041C141000325 +:107F7000008041008021410000838041C141000315 +:107F8000008041048021410000838041C141000301 +:107F90000080410080214100008300000041000377 +:107FA000008500090011000300850009001100038D +:107FB000008500090041804100820040004100032B +:107FC000008500050041000300850040000000001E +:107FD00000000000000000000000000080C1C1415E +:107FE00000410300000000410000804180C1C14108 +:107FF00000410300000000410000804180C1C141F8 +:1080000000410300008080410004804180C1C141E3 +:1080100000410300000000410000804100004100D9 +:1080200000000085898041000000008089804100B7 +:1080300080000080898941000000008283004100A7 +:1080400000000085858041000000008540000000A0 +:10805000000000000000000000000000000040C11F +:10806000400100010100000000010000820140C148 +:10807000400100010100000000010000820140C138 +:10808000400100010100000440010000820140C1E4 +:108090004001000101000000000100008201000019 +:1080A00001000000008508080100000000840808A5 +:1080B000C100C000008408080100000000838300A4 +:1080C000010000000084040401000000008540401D +:1080D00000000000000000000000000000000000A0 +:1080E00000000000C100C00000000000000000000F +:1080F00000000000C100C0000000000000000000FF +:1081000000000000C100C0000000000000400000AE +:1081100000000000C100C0000000000000000000DE +:10812000000000000000010008080000000001003D +:10813000080800100000010008080000000001000D +:10814000C0C00000000001000404000000000100A5 +:10815000404000000000000000000000000000009F +:10816000000000410041C1418000000000000041CA +:10817000000000410041C1418000000000000041BA +:10818000000000410041C14180000000002100C109 +:10819000000000410041C14180000000000000419A +:1081A000000000000000000041008080000000008E +:1081B00041008080008000004100808000000000BD +:1081C000410000000000000041008080000000002D +:1081D000410000000000000000000000000000005E +:1081E0000000000080410080C1C100C10041004189 +:1081F000C1C103C180410080C1C100C10041004133 +:10820000C1C103C180410080C1C100C10041004122 +:10821000C1C103C180410080C1C100C10041004112 +:10822000C1C103C1000200000000090900000000F4 +:108230000000090900000011000009894100000048 +:108240000000020200000000000005050000000020 +:10825000000040400000000000000000000000009E +:10826000000000000000400100C040C100C100014A +:10827000000140C101C1400100C040C100C1000176 +:10828000000140C101C1400100C040C100C1000166 +:10829000000140C101C1400100C040C100C1000156 +:1082A000000140C101C1000000000000000000000A +:1082B000000000000000000000000000004001007D +:1082C00000000000010100000000000000000000AC +:1082D000000000000000000000000000000000009E +:1082E00000000000000000000000000022004842E2 +:1082F0000000000000004842000000002200484248 +:108300000000000000004842000000002200484237 +:108310000000000000004842000000002200484227 +:108320000000000000004842000048420000000039 +:1083300000004842000000000000000000000000B3 +:108340000000484200000000000048420000000019 +:108350000000484200000000000000000000000093 +:10836000000000000000000000000000000000000D +:1083700000000000000000000000000000000000FD +:1083800000000000000000000000000000000000ED +:1083900000000000000000000000000000000000DD +:1083A00000000000000000000000000000000000CD +:1083B00000000000000000000000000000000000BD +:1083C00000000000000000000000000000000000AD +:1083D000000000000000000000000000000000009D +:1083E000000000000000000000000000000000018C +:1083F00008800000000000000010000000000001E4 +:10840000010000000000000000000000000000006B +:1084100000800000000000000000000000000000DC +:1084200040000000000000000060000000000000AC +:10843000000014A894AA0000000014A894AA000048 +:10844000000014A814A80000000014A894AA0000BA +:10845000000014A894AA0000000014A894AA000028 +:10846000000000000000000000000000000000000C +:1084700000000000000000000000000000000000FC +:1084800000000000000000000000000000000000EC +:1084900000000000000000000000000000000000DC +:1084A00000000000000000000000000000000000CC +:1084B0000020000000000400002000000000040074 +:1084C0000020000000000400002000000000040064 +:1084D0000020000000000400002000000000040054 +:1084E000000000000000000000000000000000008C +:1084F000000000000000000000000000000000007C +:10850000000000000000000000000000000000006B +:10851000000000000000000000000000000000005B +:10852000000000000000000000000000000000004B +:1085300000001004008001002008100400800100E9 +:1085400020081004008001002008100400800100B1 +:1085500020081004008001002008100400800100A1 +:1085600020080000000000000000000000000000E3 +:1085700000000000000000000000000000000000FB +:1085800000000000000000000000000000000000EB +:1085900000000000000000000000000000000000DB +:1085A00000000000000000000000000000000000CB +:1085B00000000000000000000000000000000000BB +:1085C00000000000000000000000000000000000AB +:1085D000000000000000000000000000000000009B +:1085E000000000000000000000000000000000008B +:1085F000000000000000000000000000000000007B +:10860000000000000000000000000000000000006A +:10861000000000000000000000000000000000005A +:10862000000000000000000000000000000000004A +:1086300000000000000003008000040000000300B0 +:10864000800004000000030080000400000003001C +:10865000800004000000030080000400000003000C +:108660008000040000000000000000000000000086 +:1086700000000000000000000000000000000000FA +:1086800000000000000000000000000000000000EA +:1086900000000000000000000000000000000000DA +:1086A00000000000000000000000000000000000CA +:1086B00000000000000000000000000C1DB89DB686 +:1086C0000000000C1DB89DB6000000040DB88DB36D +:1086D0000000000C1DB89DB60000000C1DB89DB632 +:1086E0000000000C1DB89DB6000000000000000056 +:1086F000000000000000000000000000000000007A +:108700000000000000000000000000000000000069 :108710000000000000000000000000000000000059 :108720000000000000000000000000000000000049 -:10873000F099009900FF0CFF00000000000000000D -:10874000000000000000000000000000FFFF04FF28 -:1087500004FF000000000000000000000000000016 +:108730000000000000000000000000000000000039 +:108740000000000000000000000000000000000029 +:108750000000000000000000000000000000000019 :108760000000000000000000000000000000000009 :1087700000000000000000000000000000000000F9 :1087800000000000000000000000000000000000E9 :1087900000000000000000000000000000000000D9 :1087A00000000000000000000000000000000000C9 -:1087B00000000061003E000D00000000000000000D -:1087C0000000000000000000000000000061003D0B -:1087D000C0090000000000000000000000000000D0 -:1087E0000000000000000000000000000000000089 -:1087F0000000000000000000000000000000000079 -:108800000000000005610A3FC50D00A00000000047 -:108810000000000000000000000000000000000058 -:108820000000000000000000000000000000000048 -:1088300000000000000000000F0F0C0C0000000002 -:108840000000000000000000000000000000FFFF2A -:108850001C0828FF28FF00000000000000000000A6 -:108860000000000000000000000000000000000008 -:1088700000000000000000000000000000000000F8 -:10888000000000000000D7C300000000F3C3000098 -:1088900000000000000000000000000000000000D8 -:1088A00000000000000000000000000000000000C8 -:1088B000000000000000000000000F0F0C0C000082 -:1088C00000000000000000000000000000000000A8 -:1088D000FFFF140000FF30FF000000000000000058 -:1088E0000000000000000000000000000000000088 -:1088F0000000000000000000000000000000000078 -:108900000000000000000000D7C300000000F3C317 +:1087B0000000000000000000000000000000009029 +:1087C0009A000000000000909A0000000000009055 +:1087D0009A000000000000909A0000000000009045 +:1087E0009A000000000000909A00000000000000C5 +:1087F000000000000000000000000000FFFFFFFF7D +:10880000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF78 +:10881000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF68 +:10882000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF58 +:10883000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF48 +:10884000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF38 +:10885000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF28 +:10886000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF18 +:10887000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF08 +:10888000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8 +:10889000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8 +:1088A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD8 +:1088B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC8 +:1088C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB8 +:1088D000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA8 +:1088E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF98 +:1088F000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF88 +:108900000000000000000000000000000000000067 :108910000000000000000000000000000000000057 :108920000000000000000000000000000000000047 :108930000000000000000000000000000000000037 -:108940000000000000000000000000000000000027 -:108950000000000F003C00010203000000000000C6 +:10894000000010010008000100000000000000000D +:108950000000000000000000000000000000000017 :108960000000000000000000000000000000000007 :1089700000000000000000000000000000000000F7 -:1089800000000000000000000000040000002000C3 -:1089900000200000000000000000000000000000B7 +:1089800000000000000000000000000000000000E7 +:1089900000000000000000000000000000000000D7 :1089A00000000000000000000000000000000000C7 :1089B00000000000000000000000000000000000B7 -:1089C00000000000000000000000000000000000A7 -:1089D00000000000000F00550C0D0E0F00000000FD +:1089C0000000000000000012000000000000000095 +:1089D0000000000000000000000000000000000097 :1089E0000000000000000000000000000000000087 :1089F0000000000000000000000000000000000077 :108A00000000000000000000000000000000000066 -:108A100010000010000000000000200000004000D6 +:108A10000000000000000000000000000000000056 :108A20000000000000000000000000000000000046 -:108A300000000400000000000000200000002000F2 -:108A40000000000000000000000000000000000026 -:108A500000000400000000000000000020000000F2 -:108A6000200000008800000000000000000000025C -:108A700000000000200000000000000020000000B6 -:108A800020000000200000000000000000000000A6 -:108A90000000000020000000410000000000400035 -:108AA00000000000000000000000000000200000A6 -:108AB0000000000000000000000000000000210095 -:108AC00000000000000000000000000000000000A6 -:108AD0000000000000000000000000000000000096 -:108AE0000000000000000000000000000040000046 -:108AF0004000000000000000000000000000000036 +:108A30000000000000000000000000000000000036 +:108A4000000000000000400000244004000000007E +:108A50000000000000000000000000000000000016 +:108A60000000000000000000000000000000000006 +:108A700000000000000000000000000000000000F6 +:108A800000000000000000000000000000000000E6 +:108A900000000000000000000000000000000000D6 +:108AA00000000000000000000000000000000000C6 +:108AB00000000000000000000000000000000000B6 +:108AC0000000000000000000000000000000008125 +:108AD0008181818100000000000000000000000092 +:108AE0000000000000000000000000000000000086 +:108AF0000000000000000000000000000000000076 :108B00000000000000000000000000000000000065 -:108B10000000000000000000000000000010000045 -:108B20000004000000000000000000000000000041 -:108B30000000000000000010000000000000000025 -:108B40000000000000000000000000000000000025 -:108B50009004000000000000000000000000000081 -:108B600000100004000000400000000010000000A1 +:108B10000000000000000000000000000000000055 +:108B20000000000000000000000000000000000045 +:108B30000000000000000000000000000000000035 +:108B40000000000000000000000100000000000024 +:108B50000000000000000000000000000000000015 +:108B60000000000000000000000000000000000005 :108B700000000000000000000000000000000000F5 -:108B800000000008000800000000001000000000C5 -:108B90000000000300000000000000000008008248 -:108BA000000000820008000800000000000800002B -:108BB0000008000000000000000000080084000021 -:108BC0000000000000880008000000080008000005 -:108BD0000008000800000088000000000084000079 -:108BE00000000000009000000010000000080008D5 -:108BF0000008008400840000000800100010000835 -:108C00000008000800000088000800080040000874 -:108C100000080000001000000084000000000000B8 +:108B800000000000000000000000000000000000E5 +:108B900000000000000000000000000000000000D5 +:108BA00000000000000000000000000000000000C5 +:108BB00000000000000000000000000000000000B5 +:108BC00000000000000000000000000000000000A5 +:108BD0000000000000000000000000000000000095 +:108BE0000000000000000000000000000000000085 +:108BF0000000000000000000000000000000000075 +:108C00000000000000000000000000000000000064 +:108C10000000000000000000000000000000000054 :108C20000000000000000000000000000000000044 :108C30000000000000000000000000000000000034 -:108C40004000000040000000000000000000002183 -:108C5000000000000000000000000008000000000C -:108C60000003000000000021400000084000002137 -:108C700000000000000000080000000000000008E4 -:108C800000000000001000100000000000000000C4 -:108C90000000000000100000000000009000000034 +:108C40000000000000000000000000000000000024 +:108C50000000000000000000000000000000000014 +:108C60000000000000000000000000000000000004 +:108C700000000000000000000000000000000000F4 +:108C800000000000000000000000000000000000E4 +:108C900000000000000000000000000000000000D4 :108CA00000000000000000000000000000000000C4 :108CB00000000000000000000000000000000000B4 -:108CC0000000400000000000000000000000000064 -:108CD0000010000000000000000041000000000043 +:108CC00000000000000000000000000000000000A4 +:108CD000000800000000000000000000000000008C :108CE0000000000000000000000000000000000084 -:108CF0000000000000000000000000000000000074 -:108D00000000000000000000000000000000000063 -:108D1000000000000000000000000008000000004B -:108D2000000800000000000000000000000000003B +:108CF0000008000000000008000000000000000064 +:108D000000000000000000080000000800840000CF +:108D10000000000000000000000000000000000053 +:108D20000000000000000000000000000000000043 :108D30000000000000000000000000000000000033 -:108D40000000000000000000000000000000000023 -:108D500000001000100000000000004100000800AA -:108D60000000000000000000000000000000000003 -:108D700000000000000000000000000000000000F3 +:108D40000000000000000021000000000000000002 +:108D5000000000000000000000080000000000000B +:108D600000000000000000050008000000000000F6 +:108D700000000000000800000000000000000000EB :108D800000000000000000000000000000000000E3 -:108D900000000000000000000000000000040000CF -:108DA000000000000000000000000084000000003F -:108DB00000000000000000000000000800000008A3 -:108DC0000000000000880084000400000000000093 -:108DD00000A0000000000008000000A00000000843 -:108DE00000820000000800000082000000C0008235 -:108DF0000000000800000000000800000000000063 -:108E00000000000000000010000000A002000000B0 -:108E1000000000000008000000000008000400003E -:108E2000000820000000000000100000000000000A +:108D900000000000000000000000000000000000D3 +:108DA00000000000000000000000000000000000C3 +:108DB00000000000000000000000000000000000B3 +:108DC00000000000000000000000000000000000A3 +:108DD0000000000000000000000000000000000093 +:108DE0000000000000000000000000000000000083 +:108DF0000000000000000000000000000000000073 +:108E00000000000000000000000000000000000062 +:108E10000000000000000000000000000000000052 +:108E20000000000000000000000000000000000042 :108E30000000000000000000000000000000000032 :108E40000000000000000000000000000000000022 -:108E500000000000000000000000100000030000FF -:108E600000000000000000000008000800080005E5 -:108E700000080000000000410000000000000000A9 +:108E50000000000000000000000000000000000012 +:108E60000000000000000000000000000000000002 +:108E700000000000000000000000000000000000F2 :108E800000000000000000000000000000000000E2 :108E900000000000000000000000000000000000D2 -:108EA00000000000000800000000000000000000BA +:108EA00000000000000000000000000000000000C2 :108EB00000000000000000000000000000000000B2 -:108EC0000000000000000000000000000004100886 -:108ED00000000000109000000000000000000000F2 -:108EE00000000000000000000000038403000000F8 +:108EC00000000000000000000000000000000000A2 +:108ED0000000000000000000000000000000000092 +:108EE0000000000000000000000000000000000082 :108EF0000000000000000000000000000000000072 :108F00000000000000000000000000000000000061 -:108F1000000000000000000000C00200000000008F -:108F200010000004100000200000000000000000FD -:108F30000000000000000000000800000000000029 +:108F10000000000000000000000000000000000051 +:108F20000000000000000000000000000000000041 +:108F30000000000000000000000000000000000031 :108F40000000000000000000000000000000000021 -:108F50000000000000110000000000000000000000 -:108F600000000000000300000000000000000000FE -:108F700000000000004000000000001000000000A1 -:108F800000000000000000000000000000000000E1 +:108F50000000000000000000000000000000000011 +:108F60000000000000000000000000000000000001 +:108F700000000000000500000000000000050000E7 +:108F800000000008000000000000000800000000D1 :108F900000000000000000000000000000000000D1 :108FA00000000000000000000000000000000000C1 -:108FB00000000084000800100000200000000000F5 -:108FC00000080000009000000000000020000000E9 -:108FD0000000000000000000000000000582008486 -:108FE00000000000000000A00000000000000000E1 -:108FF000110000000000000002000000200000003E -:10900000000000000000000000C0000000000000A0 -:1090100000000000000000000000110000820000BD -:109020000000000000080204000000000000000032 -:109030000000000000000000000000000000000030 +:108FB00000000000000000000000000000000000B1 +:108FC00000000000000000000000000000000000A1 +:108FD0000000000000000000000000000000000091 +:108FE0000000000000000000000000000000000081 +:108FF0000000000000000008000000000000000069 +:109000000000000000000000000000000000000060 +:109010000000000000000000000000000000000050 +:109020000000000000000000000000000000000040 +:109030000000000000000000000000000008000028 :109040000000000000000000000000000000000020 :109050000000000000000000000000000000000010 :109060000000000000000000000000000000000000 -:1090700000000000000000000000000000000000F0 -:1090800000000000000000000000000000000000E0 +:1090700000000000000000000000000800000000E8 +:1090800000030000000000000003000000000000DA :1090900000000000000000000000000000000000D0 :1090A00000000000000000000000000000000000C0 :1090B00000000000000000000000000000000000B0 @@ -198994,20 +203091,20 @@ :10920000000000000000000000000000000000005E :10921000000000000000000000000000000000004E :10922000000000000000000000000000000000003E -:10923000000000000000000000000000000000002E +:1092300000000000000000000000000080000000AE :10924000000000000000000000000000000000001E :10925000000000000000000000000000000000000E -:1092600000000000000000000000000000000000FE -:1092700000000000000000000000000000000000EE -:1092800000000000000000000000000000000000DE +:1092600000000000000000000000000000020000FC +:10927000000000000000800000000002001100005B +:1092800000000000001100000000000000000000CD :1092900000000000000000000000000000000000CE :1092A00000000000000000000000000000000000BE -:1092B00000000000000000000000000000000000AE -:1092C000000000000000000000000000000000009E +:1092B00000000000000000000000000000000800A6 +:1092C000000000000000000000000000000002009C :1092D000000000000000000000000000000000008E :1092E000000000000000000000000000000000007E -:1092F000000000000000000000000000000000006E -:10930000000000000000000000000000000000005D +:1092F000020000000000000040000000000000002C +:10930000A0000000000000000000000000000000BD :10931000000000000000000000000000000000004D :10932000000000000000000000000000000000003D :10933000000000000000000000000000000000002D @@ -199029,7 +203126,7 @@ :10943000000000000000000000000000000000002C :10944000000000000000000000000000000000001C :10945000000000000000000000000000000000000C -:1094600000000000000000000000000000000000FC +:1094600000000000000000000000000000020000FA :1094700000000000000000000000000000000000EC :1094800000000000000000000000000000000000DC :1094900000000000000000000000000000000000CC @@ -199043,8 +203140,8 @@ :10951000000000000000000000000000000000004B :10952000000000000000000000000000000000003B :10953000000000000000000000000000000000002B -:10954000000000000000000000000000000000001B -:10955000000000000000000000000000000000000B +:109540000000000000000000000000000000000714 +:109550000000000000000000000000000000000704 :1095600000000000000000000000000000000000FB :1095700000000000000000000000000000000000EB :1095800000000000000000000000000000000000DB @@ -199058,10 +203155,10 @@ :10960000000000000000000000000000000000005A :10961000000000000000000000000000000000004A :10962000000000000000000000000000000000003A -:10963000000000000000000000000000000000002A +:10963000000000000000000C00000000000000001E :10964000000000000000000000000000000000001A -:10965000000000000000000000000000000000000A -:1096600000000000000000000000000000000000FA +:109650000001000000000000000000000000000009 +:1096600000010000000000000000000000000000F9 :1096700000000000000000000000000000000000EA :1096800000000000000000000000000000000000DA :1096900000000000000000000000000000000000CA @@ -199076,8 +203173,8 @@ :109720000000000000000000000000000000000039 :109730000000000000000000000000000000000029 :109740000000000000000000000000000000000019 -:109750000000000000000000000000000000000009 -:1097600000000000000000000000000000000000F9 +:1097500000000000100400000000000000000000F5 +:1097600000000000100400000000000000000000E5 :1097700000000000000000000000000000000000E9 :1097800000000000000000000000000000000000D9 :1097900000000000000000000000000000000000C9 @@ -199100,185 +203197,185 @@ :1098A00000000000000000000000000000000000B8 :1098B00000000000000000000000000000000000A8 :1098C0000000000000000000000000000000000098 -:1098D0000000000000000000000000000000000088 -:1098E0000000000000000000000000000000000078 +:1098D0000000000000000000000400000000000084 +:1098E0000000000000000000000400000000000074 :1098F0000000000000000000000000000000000068 -:109900000000000000000000000000000000000057 -:109910000000000000000000000000000000000047 +:1099000000000000000080000000000400000000D3 +:10991000000000040000800000000004000080003F :109920000000000000000000000000000000000037 :109930000000000000000000000000000000000027 :109940000000000000000000000000000000000017 :109950000000000000000000000000000000000007 -:1099600000000000000000004180028001801180A2 +:1099600000000000000000000000000000000000F7 :1099700000000000000000000000000000000000E7 -:109980000000000000000000200000000080218096 -:1099900000030000000000000000000000000000C4 -:1099A0000000000000000000000020000000008017 -:1099B0002180000000000000000000000000000006 -:1099C0000000000000000000000000000000110086 -:1099D000090000000000000000000000000000027C -:1099E0000000000000000000410010108008040288 -:1099F0000410000000000000000000000000000053 -:109A0000000000000000000000000020000000082E -:109A100020080000400000000000000000000000DE -:109A200000000000000000000000000040000000F6 -:109A3000000810044000000000000000400000008A +:1099800000000002000000000000000000000000D5 +:109990004000000200000000400000020000000043 +:1099A0004000000000000000000000000000000077 +:1099B00000000000000000000000000000000000A7 +:1099C0000000000000000000000000000000000097 +:1099D0000000000000000000000000000080800087 +:1099E0000000000000000000000000000080800077 +:1099F0000000000000000000000000000000000067 +:109A00000000000000000000100000000000000046 +:109A10008000000000000000900000000000000036 +:109A200090000000000000000000000000000000A6 +:109A30000000000000000000000000000000000026 :109A40000000000000000000000000000000000016 -:109A50008400A000000800000000000000000000DA -:109A600000000000000500000008000000000000E9 +:109A50000000000000000000000000000000000006 +:109A600000000000000000000000000000000000F6 :109A700000000000000000000000000000000000E6 :109A800000000000000000000000000000000000D6 -:109A900000000000000000000000000010000008AE -:109AA00000100000A00000001000000000000000F6 +:109A900000000000000000000000000000000000C6 +:109AA00000000000000000000000000000000000B6 :109AB00000000000000000000000000000000000A6 -:109AC0000000000000000040000000000000000056 -:109AD00000000000000000880000008400840008EE -:109AE0000004000000840004008400840008008456 -:109AF000008800080000008400000000000800103A -:109B000000000000000800880084001000080088A1 -:109B1000000800880010000000880088000000088D -:109B20000010008400840084000800080008001071 -:109B3000000000880008008400840010000800086D -:109B4000008800820000000000A00008000800005B -:109B50000000008400080008000000000000000869 -:109B600000050000000500080000000000030021BF -:109B7000000000002000000800100008840500100C -:109B800000038821840084000008000000410002D6 -:109B90000000000300214040000000088808200861 -:109BA0008200002100080002000000000000000008 -:109BB0000000000500080003400800210000000824 -:109BC0000000000000020000000800080000000083 -:109BD0000000000504002002042100000000000035 -:109BE0000000000000000082000000C00000000033 -:109BF00000000000000080000000000000000000E5 -:109C00000000000002000000000000000000000052 -:109C100000000000000000008000000000000000C4 +:109AC0000000000000000000000000000000000096 +:109AD0000000000000000000000000000000000086 +:109AE0000000000000000000000000000000000076 +:109AF0000000000000000000000000000000000066 +:109B00000000000000000000000000000000000055 +:109B10000000000000000000000000000000000045 +:109B20000000000000000000000000000000000035 +:109B30000000000000000000000000000000000025 +:109B40000000000000000000000000000000000015 +:109B50000000000000000000000000000000000005 +:109B600000000000000000000000000000000000F5 +:109B700000000000000000000000000000000000E5 +:109B800000000000000000000000000000000000D5 +:109B900000000000000000000000000000000000C5 +:109BA00000000000000000000000000000000000B5 +:109BB00000000000000000000000000000000000A5 +:109BC0000000000000000000000000000000000095 +:109BD0000000000000000000000000000000000085 +:109BE0000000000000000000000000000000000075 +:109BF00000000000000000000000008400080000D9 +:109C00000000000000000000000000000000000054 +:109C100000000000000000000000000000000084C0 :109C20000000000000000000000000000000000034 -:109C300000000000000000000000800000000000A4 +:109C30000000000000000000000000000000000024 :109C40000000000000000000000000000000000014 -:109C500000000000000000008000880000000000FC +:109C50000000000000000000000000000000000004 :109C600000000000000000000000000000000000F4 :109C700000000000000000000000000000000000E4 -:109C800000000000000000000000000000000000D4 -:109C900000001000000000000000A0000000000014 -:109CA00000090000000400000000000000000000A7 -:109CB00000000000000000000000000000000000A4 -:109CC000000000000000000000000009000000008B -:109CD0000000A000000000000000000040000000A4 -:109CE00000000000000000000000000000840000F0 -:109CF0000008000000000084000000000000008454 -:109D0000000000000000000000000008000000004B +:109C80000000000000000000000000000000004094 +:109C900000000000000000000000000000000000C4 +:109CA00000000000000000000000000000000000B4 +:109CB000000800000000000000000000000000009C +:109CC0000000000000000000000000000000000094 +:109CD0000000000000000000000000000000000084 +:109CE0000000000000000000000000000000000074 +:109CF0000000000000000000000000000000000064 +:109D00000000000000000000000000000000000053 :109D10000000000000000000000000000000000043 :109D20000000000000000000000000000000000033 -:109D30000010000000000000000000000000000013 +:109D30000000000000000000000000000000000023 :109D40000000000000000000000000000000000013 -:109D50000000000000000000110000000900800069 -:109D600000000000000000000000000502000000EC -:109D70000040000300080008000800080000000878 -:109D800000000008000000000000000800000000C3 -:109D9000000002080000001020000200000000087F -:109DA0000000C010000000000000000000210000C2 -:109DB00000000000020000000000000000000000A1 -:109DC0000021000000030000000000100008000057 -:109DD000000000410003000000000810000800001F -:109DE00004800000000000000000000000000000EF +:109D50000000000000000000000000000000000003 +:109D600000080008000000000000000000000000E3 +:109D700000000000000000000000000000000000E3 +:109D800000210008000000000000000000000000AA +:109D900000000000000000000000000000000000C3 +:109DA0000000000000210000000000000000000092 +:109DB00000000000000000000000000000000000A3 +:109DC0000000000000210000000000000000000072 +:109DD0000000000000000000000000000000000083 +:109DE0000000000000000000000000000000000073 :109DF0000000000000000000000000000000000063 :109E00000000000000000000000000000000000052 -:109E10000000000000000000100000000000000032 +:109E10000000000000000000000000000000000042 :109E20000000000000000000000000000000000032 :109E30000000000000000000000000000000000022 :109E40000000000000000000000000000000000012 :109E50000000000000000000000000000000000002 -:109E600000000008000000000000000520000005C0 -:109E700000000011000800210041000900210041FC -:109E80000003000000080000002100410008000855 -:109E90000003000000000000000820040021002151 -:109EA0000008000000000000000000000041000069 -:109EB0000021000000000000000000080000000574 -:109EC0000021000800000008000000000000000061 -:109ED00000089000000000000000002100000008C1 +:109E600000000000000000000000000000000000F2 +:109E700000000000000000000000000000000000E2 +:109E800000000000000000000000000000000000D2 +:109E900000000000000000000000000000000000C2 +:109EA00000000000000000000000000000000000B2 +:109EB00000000000000000000000000000000000A2 +:109EC0000000000000000000000000000000000092 +:109ED0000000000000000000000000000000000082 :109EE0000000000000000000000000000000000072 :109EF0000000000000000000000000000000000062 :109F00000000000000000000000000000000000051 :109F10000000000000000000000000000000000041 -:109F2000000000000000000000000004000000002D +:109F20000000000000000000000000000000000031 :109F30000000000000000000000000000000000021 :109F40000000000000000000000000000000000011 :109F50000000000000000000000000000000000001 -:109F600011002000200400000000C1000001C18297 -:109F70000100C0000140C089C001C0010008C082CA -:109F80000000C00001090400000000000000000003 -:109F90000000000000010110000000000010C004DB -:109FA00000000000000100000001000000000000AF -:109FB000000000000000000001020000000000108E -:109FC000A0A0000000000001000000000000000050 -:109FD000000100000000000001100000C1000004AA -:109FE000C0820000C000000100000041C1410041EA -:109FF000C1894141804141909103804089030080A3 -:10A0000080800041804104830000000000000000C7 -:10A010000002000000000010080000021100000013 -:10A0200000000000000000410000000000000000EF -:10A030000000000300000000001008800002110072 -:10A0400000000000000000000041000000000000CF -:10A050000000000800000000001104800009C0009A -:10A060000080808000008000000300004100094162 -:10A0700000C10000414191410041084189C11041A6 -:10A0800000808380C100C14100C180100000090030 -:10A090000000000000001000000004000900C100E2 -:10A0A000000940008000000000008009000000005E -:10A0B000090000000000000010000000040009007A -:10A0C000C1000009200080000000000080040000A2 -:10A0D0000900000000000000020000000200020071 -:10A0E0008400000003800000000000808008000061 -:10A0F000000100C100000001400100C1010110C1C8 -:10A10000040300C083C00800400100C182000000B9 -:10A11000000000000000000000000000000002003D -:10A12000828400000102020000000000C000000064 +:109F600000000000000000000000000000000000F1 +:109F700000000000000000000000000000000000E1 +:109F800000000000000000000000000000000000D1 +:109F900000000000000000000000000000000000C1 +:109FA00000000000000000000000000000000000B1 +:109FB00000000000000000000000000000000000A1 +:109FC0000000000000000000000000000000000091 +:109FD0000000000000000000000000000000000081 +:109FE0000000000000000000000000000000000071 +:109FF0000000000000000000000000000000000061 +:10A000000000000000000000000000000000000050 +:10A010000000000000000000000000000000000040 +:10A020000000000000000000000000000000000030 +:10A030000000000000000000000000000000000020 +:10A040000000000000000000000000000000000010 +:10A050000000000000000000000000000000000000 +:10A0600000000000000000000000000000000000F0 +:10A0700000000000000000000000000000000000E0 +:10A0800000000000000000000000000000000000D0 +:10A0900000000000000000000000000000000000C0 +:10A0A00000000000000000000000000000000000B0 +:10A0B00000000000000000000000000000000000A0 +:10A0C0000000000000000000000000000000000090 +:10A0D0000000000000000000000000000000000080 +:10A0E0000000000000000000000000000000000070 +:10A0F0000000000000000000000000000000000060 +:10A10000000000000000000000000000000000004F +:10A11000000000000000000000000000000000003F +:10A12000000000000000000000000000000000002F :10A13000000000000000000000000000000000001F -:10A140002000828400000102020000000000C00123 +:10A14000000000000000000000000000000000000F :10A1500000000000000000000000000000000000FF -:10A1600084008302000001100200000000C0820190 -:10A1700000400000C183000000000000C18208838D -:10A1800000040000C140000000000000C100000009 -:10A1900000000000000000000000000000000800B7 -:10A1A00000A000000100000000000000000100000D +:10A1600000000000000000000000000000000000EF +:10A1700000000000000000000000000000000000DF +:10A1800000000000000000000000000000000000CF +:10A1900000000000000000000000000000000000BF +:10A1A00000000000000000000000000000000000AF :10A1B000000000000000000000000000000000009F -:10A1C000400000400000910001000000000000017C -:10A1D000000000000000000000000000000000017E -:10A1E00010000088000001000000000000000000D6 -:10A1F000000000800041C183000000000041C1C197 -:10A20000808300C10041C1C1020000000021C041A3 -:10A21000000000000000000000000000000000023C -:10A22000801000000000100000000000000000414D +:10A1C000000000000000000000000000000000008F +:10A1D000000000000000000000000000000000007F +:10A1E000000000000000000000000000000000006F +:10A1F000000000000000000000000000000000005F +:10A20000000000000000000000000000000000004E +:10A21000000000000000000000000000000000003E +:10A22000000000000000000000000000000000002E :10A23000000000000000000000000000000000001E -:10A240000010001000800000050020000000000049 -:10A2500000410000000000000000000000000000BD -:10A2600000080004000000004100000000000000A1 -:10A2700000410000C180804180910000410980417F -:10A28000C0C103C1C1C1808080C100004141000242 -:10A290000080090300008000009100000000000021 -:10A2A00009000000004180000008000000000000DC -:10A2B0000000400800000000800000910000002025 -:10A2C0008000090000000041800000040000000040 -:10A2D0000000000008400000800000910000000025 -:10A2E00000000900000000410000000400000041DF -:10A2F00000400000030440C008018210000000007C -:10A30000100109C101C1401182C040C1000000011B -:10A31000000004C000A100000800001000000000C0 -:10A3200088009000000000110800000100000000FB -:10A33000000000000185000000000800001000007F -:10A340000001200090000000001108000001000042 -:10A3500000000000000001050000080000100000DF -:10A360000000880010000000001102000000000042 -:10A3700000010001000001880000000000004842C8 -:10A3800000000000000048426006006006004842ED -:10A390000000000000004842000000000000000033 -:10A3A0000000000000000000811200E007004800EB +:10A24000000000000000000000000000000000000E +:10A2500000000000000000000000000000000000FE +:10A2600000000000000000000000000000000000EE +:10A2700000000000000000000000000000000000DE +:10A2800000000000000000000000000000000000CE +:10A2900000000000000000000000000000000000BE +:10A2A00000000000000000000000000000000000AE +:10A2B000000000000000000000000000000000009E +:10A2C000000000000000000000000000000000008E +:10A2D000000000000000000000000000000000007E +:10A2E000000000000000000000000000000000006E +:10A2F000000000000000000000000000000000005E +:10A30000000000000000000000000000000000004D +:10A31000000000000000000000000000000000003D +:10A32000000000000000000000000000000000002D +:10A33000000000000000000000000000000000001D +:10A34000000000000000000000000000000000000D +:10A3500000000000000000000000000000000000FD +:10A3600000000000000000000000000000000000ED +:10A3700000000000000000000000000000000000DD +:10A3800000000000000000000000000000000000CD +:10A3900000000000000000000000000000000000BD +:10A3A00000000000000000000000000000000000AD :10A3B000000000000000000000000000000000009D -:10A3C00000000000000000000000811200E0070013 -:10A3D0004800000000000000000000000000000035 -:10A3E00000000000000000000000811200E00700F3 -:10A3F0004842000000000000484200000000000049 +:10A3C000000000000000000000000000000000008D +:10A3D000000000000000000000000000000000007D +:10A3E000000000000000000000000000000000006D +:10A3F000000000000000000000000000000000005D :10A40000000000000000000000000000000000004C :10A41000000000000000000000000000000000003C :10A42000000000000000000000000000000000002C @@ -199294,195 +203391,195 @@ :10A4C000000000000000000000000000000000008C :10A4D000000000000000000000000000000000007C :10A4E000000000000000000000000000000000006C -:10A4F0000000000000000000000000000000757B6C +:10A4F000000000000000000000000000000000005C :10A50000000000000000000000000000000000004B -:10A51000000000000000000000000000DEAE257B0F +:10A51000000000000000000000000000000000003B :10A52000000000000000000000000000000000002B -:10A53000000000000000000000000000DEA4000099 -:10A54000257B00000000000000000000000000006B -:10A550000000000000000000000000000000DEA479 -:10A56000757B0000000000000000000000000000FB -:10A570000000000000000000000000000000DEAE4F -:10A5800067E643400000000000000231E0000000E8 -:10A59000000000000C4000000000000002C267E65E -:10A5A000612603400000000000000230A00000000F -:10A5B000000000000C4000000000000002C06486A3 -:10A5C0000000612603400000000000000230A000EF -:10A5D0000000000000000C4000000000000002C06D -:10A5E0006486612603400000000000000230A000E5 -:10A5F0000000000000000C4000000000000002C04D -:10A600006486000000000000000000000000000060 -:10A610000000000000000000000001050000000034 -:10A620000100C00000000800000000000000000061 +:10A53000000000000000000000000000000000001B +:10A54000000000000000000000000000000000000B +:10A5500000000000000000000000000000000000FB +:10A5600000000000000000000000000000000000EB +:10A5700000000000000000000000000000000000DB +:10A5800000000000000000000000000000000000CB +:10A5900000000000000000000000000000000000BB +:10A5A00000000000000000000000000000000000AB +:10A5B000000000000000000000000000000000009B +:10A5C000000000000000000000000000000000008B +:10A5D000000000000000000000000000000000007B +:10A5E000000000000000000000000000000000006B +:10A5F000000000000000000000000000000000005B +:10A60000000000000000000000000000000000004A +:10A61000000000000000000000000000000000003A +:10A62000000000000000000000000000000000002A :10A63000000000000000000000000000000000001A -:10A640000000000000000000000000000108000001 -:10A6500000000000000000000000000000050000F5 +:10A64000000000000000000000000000000000000A +:10A6500000000000000000000000000000000000FA :10A6600000000000000000000000000000000000EA :10A6700000000000000000000000000000000000DA -:10A6800001000000000000000000000000000000C9 -:10A69000000000000000000000000000400000007A -:10A6A0000000200000024100C10041000000000045 +:10A6800000000000000000000000000000000000CA +:10A6900000000000000000000000000000000000BA +:10A6A00000000000000000000000000000000000AA :10A6B000000000000000000000000000000000009A -:10A6C000000000000000000000000000400020002A +:10A6C000000000000000000000000000000000008A :10A6D000000000000000000000000000000000007A -:10A6E000000000000000000000000000000040002A -:10A6F000000040000000000000000000000000001A -:10A700000000409000000000000000000000020077 -:10A710000200020402000000000010040202000017 +:10A6E000000000000000000000000000000000006A +:10A6F000000000000000000000000000000000005A +:10A700000000000000000000000000000000000049 +:10A710000000000000000000000000000000000039 :10A720000000000000000000000000000000000029 :10A730000000000000000000000000000000000019 -:10A7400000000040000000030000000002000000C4 -:10A7500000001000000000001000100010000000B9 -:10A7600010080000000000000000000000000000D1 +:10A740000000000000000000000000000000000009 +:10A7500000000000000000000000000000000000F9 +:10A7600000000000000000000000000000000000E9 :10A7700000000000000000000000000000000000D9 -:10A78000000040000800000200C0008400000088B3 -:10A79000000800880001001000880008000900017E +:10A7800000000000000000000000000000000000C9 +:10A7900000000000000000000000000000000000B9 :10A7A00000000000000000000000000000000000A9 -:10A7B0000010000800000000000800080008000069 -:10A7C0000000000000000000000000080008000475 -:10A7D00000040088000800000000000800080008CD -:10A7E0000008000000100008000800040004000039 -:10A7F0000000001000080000000000080008000829 -:10A8000000080008800000080009000000000000A7 -:10A810000000000000080004002000080003000001 -:10A82000000000000004000000020000000004001E -:10A830000008040800000000000000000000000004 -:10A8400000000000000000100000000000000000F8 -:10A850000000000000219000000040000000000007 -:10A8600000000000001000000000000000000008D0 -:10A8700000000000000800000000000000210000AF -:10A880000000000000000000400000000000000088 -:10A890000000000000000000000111010000008223 -:10A8A0000000000000A000004000000100000000C7 -:10A8B00003C003000000000000000000008800004A -:10A8C00000820008001000080000000800000000DE -:10A8D00000000000000020000020000000000088B0 -:10A8E00000A00082000800A000100000000000008E +:10A7B0000000000000000000000000000000000099 +:10A7C0000000000000000000000000000000000089 +:10A7D0000000000000000000000000000000000079 +:10A7E0000000000000000000000000000000000069 +:10A7F0000000000000000000000000000000000059 +:10A800000000000000000000000000000000000048 +:10A810000000000000000000000000000000000038 +:10A820000000000000000000000000000000000028 +:10A830000000000000000000000000000000000018 +:10A840000000000000000000000000000000000008 +:10A8500000000000000000000000000000000000F8 +:10A8600000000000000000000000000000000000E8 +:10A8700000000000000000000000000000000000D8 +:10A8800000000000000000000000000000000000C8 +:10A8900000000000000000000000000000000000B8 +:10A8A00000000000000000000000000000000000A8 +:10A8B0000000000000000000000000000000000098 +:10A8C0000000000000000000000000000000000088 +:10A8D0000000000000000000000000000000000078 +:10A8E0000000000000000000000000000000000068 :10A8F0000000000000000000000000000000000058 -:10A90000001000A0000200A00000000000000000F5 -:10A910000000000000000080008000800080000037 -:10A920000000200020800000000000800080000067 -:10A9300000400000000000000000000000000000D7 +:10A900000000000000000000000000000000000047 +:10A910000000000000000000000000000000000037 +:10A920000000000000000000000000000000000027 +:10A930000000000000000000000000000000000017 :10A940000000000000000000000000000000000007 :10A9500000000000000000000000000000000000F7 -:10A9600000000000004000000000000000000000A7 +:10A9600000000000000000000000000000000000E7 :10A9700000000000000000000000000000000000D7 -:10A9800000000000000000000000000000000010B7 -:10A99000000000000000000000040004002000048B -:10A9A000000000848084800400840084000200048D -:10A9B000000000080000000000000000000000008F +:10A9800000000000000000000000000000000000C7 +:10A9900000000000000000000000000000000000B7 +:10A9A00000000000000000000000000000000000A7 +:10A9B0000000000000000000000000000000000097 :10A9C0000000000000000000000000000000000087 :10A9D0000000000000000000000000000000000077 -:10A9E0000000000000A000000000000000000000C7 +:10A9E0000000000000000000000000000000000067 :10A9F0000000000000000000000000000000000057 -:10AA000000000000000000000000008800000000BE -:10AA100000000000000000009000000000000200A4 -:10AA20000000000040000004000400410002000299 -:10AA300020020000002000000020000000000000B4 -:10AA400000000000000000000003000000020008F9 -:10AA500000000000040000000800000000000000EA -:10AA600000000000000000000000000300000003E0 -:10AA700000080000000800000000000000000000C6 -:10AA800000000000000000000000000020000000A6 -:10AA900000000000000000000000000000080000AE -:10AAA0000000001000008000000100010000000113 -:10AAB000000080000000000000000000048211007F -:10AAC00011A00000000020000000001000A0000005 -:10AAD00000000000000008000000000000000082EC -:10AAE00000001100000000002000000000000084B1 -:10AAF00000000000000000A00000000000000000B6 -:10AB0000000000080084000000A000000000001009 -:10AB10000000000000A00121000000000000000073 -:10AB200001000000000000000100000200210005FB -:10AB300000020005000000080008000800080000EE -:10AB40000000000000000000000000000000000005 -:10AB500000000000000000000000000000000000F5 -:10AB600000000000000000000000000000000000E5 -:10AB700000000000000000000010000000000000C5 -:10AB800000000000000000000000000000000021A4 -:10AB900000000000000088004000000000000000ED -:10ABA00000000400000000840000400000010000DC -:10ABB0000000000100000000000000000000000094 +:10AA00000000000000000000000000000000000046 +:10AA10000000000000000000000000000000000036 +:10AA20000000000000000000000000000000000026 +:10AA30000000000000000000000000000000000016 +:10AA40000000000000000000000000000000000006 +:10AA500000000000000000000000000000000000F6 +:10AA600000000000000000000000000000000000E6 +:10AA700000000000000000000000000000000000D6 +:10AA800000000000000000000000000000000000C6 +:10AA900000000000000000000000000000000000B6 +:10AAA00000000000000000000000000000000000A6 +:10AAB0000000000000000000000000000000000096 +:10AAC0000000000000000000000000000000000086 +:10AAD0000003000000000000000000000000000073 +:10AAE0000000000000000000000000000000000066 +:10AAF0000000000000000000000000000000000056 +:10AB00000000000000000000000000000000000045 +:10AB10000000000000000000000000000000000035 +:10AB20000000000000000000000000000000000025 +:10AB300000000000000000080000000000080008FD +:10AB40000000000000040000000000000000000001 +:10AB50000000000000000000000800000000008469 +:10AB600000080000000000000000000000000000DD +:10AB700000000000000000000008000000000000CD +:10AB800000040000000000000000000000000000C1 +:10AB900000000000000000000000000000000000B5 +:10ABA00000000000000000000000000000000000A5 +:10ABB0000000000000000000000000000000000095 :10ABC0000000000000000000000000000000000085 -:10ABD000000020000000000000000000000009004C -:10ABE0000000000000000000000000000000004025 -:10ABF0000000000000000000000000000000000055 +:10ABD0000000000000000000000000000000000075 +:10ABE0000000000000000000000000000000000065 +:10ABF0000002000000000000000000000000000053 :10AC00000000000000000000000000000000000044 :10AC10000000000000000000000000000000000034 -:10AC2000000010100001000100030000A0008300DC -:10AC300000000000A00021000000002000200040D3 -:10AC400020000000000000000000000000000000E4 +:10AC20000000000000000000000000000000000024 +:10AC30000000000000000000000000000000000014 +:10AC40000000000000000000000000000000000004 :10AC500000000000000000000000000000000000F4 -:10AC600000000000000000010000000000000000E3 +:10AC600000000000000000000000000000000000E4 :10AC700000000000000000000000000000000000D4 :10AC800000000000000000000000000000000000C4 -:10AC900000000000000100010001000100000010A0 -:10ACA00000000008000000101008000800009100DB -:10ACB000850000000000801103000011000000006A +:10AC900000000000000000000000000000000000B4 +:10ACA00000000000000000000000000000000000A4 +:10ACB0000000000000000000000000000000000094 :10ACC0000000000000000000000000000000000084 :10ACD0000000000000000000000000000000000074 -:10ACE0000000000000000000002100000003000040 +:10ACE0000000000000000000000000000000000064 :10ACF0000000000000000000000000000000000054 :10AD00000000000000000000000000000000000043 -:10AD100000000000000000200008000500080000FE -:10AD2000000000000000000083000802080020006E -:10AD3000110008001080090009000908090000003E -:10AD40000000000000000000000000000000000003 +:10AD10000000000000000000000000000000000033 +:10AD2000000000000008000800000000000800000B +:10AD30000000000000000000000000000000000013 +:10AD400000000000000800080000000000000000F3 :10AD500000000000000000000000000000000000F3 -:10AD600000000000000000000000000000000008DB +:10AD600000000000000000A000080000000000003B :10AD700000000000000000000000000000000000D3 :10AD800000000000000000000000000000000000C3 -:10AD900000000000000000000900040000002088FE -:10ADA00000000000000000001000110001000190F0 -:10ADB0000000000001000110000800000000000079 +:10AD900000000000000000000000000000000000B3 +:10ADA00000000000000000000000000000000000A3 +:10ADB0000000000000000000000000000000000093 :10ADC0000000000000000000000000000000000083 :10ADD0000000000000000000000000000000000073 -:10ADE000000000000000000000000008000000005B -:10ADF0000001000000000000000000000000000052 +:10ADE0000000000000000000000000000000000063 +:10ADF0000000000000000000000000000000000053 :10AE00000000000000000000000000000000000042 -:10AE100000000000000000000000009001000000A1 -:10AE200001A0000000000000000000010000000977 -:10AE30001010000100010000000000000000A00050 -:10AE400000000040000220820040000000000000DE +:10AE10000000000000000000000000000000000032 +:10AE20000000000000000000000000000000000022 +:10AE30000000000000000000000000000000000012 +:10AE40000000000000000000000000000000000002 :10AE500000000000000000000000000000000000F2 :10AE600000000000000000000000000000000000E2 :10AE700000000000000000000000000000000000D2 :10AE800000000000000000000000000000000000C2 :10AE900000000000000000000000000000000000B2 -:10AEA000010100000000000000000000001000038D -:10AEB00000880080000800080041001100200041C7 -:10AEC0008010000000800080008000000000000072 +:10AEA00000000000000000000000000000000000A2 +:10AEB0000000000000000000000000000000000092 +:10AEC0000000000000000000000000000000000082 :10AED0000000000000000000000000000000000072 :10AEE0000000000000000000000000000000000062 :10AEF0000000000000000000000000000000000052 :10AF00000000000000000000000000000000000041 -:10AF1000000000000000000000000000000000042D -:10AF200000000521081000000000000000000800DB -:10AF30001010080000000910100009000003210093 -:10AF400008000000001000000021000000000000C8 +:10AF10000000000000000000000000000000000031 +:10AF20000000000000000008000000000000000019 +:10AF30000000000000000000000000000000000011 +:10AF400000000000000000080000000000000000F9 :10AF500000000000000000000000000000000000F1 -:10AF600000000000000000000000000000000000E1 -:10AF70000308210008000800000000000000000095 -:10AF800000000000000000000000000000000000C1 +:10AF600000000000000000000008000000000000D9 +:10AF700000000000000000000000000000000000D1 +:10AF800000000000000000000008000000000008B1 :10AF900000000000000000000000000000000000B1 -:10AFA0002100080005000809000000000000000062 -:10AFB00001000100012000000091000000000000DD -:10AFC000010001000000000000000001000000007E +:10AFA00000000000000000000000000000000000A1 +:10AFB0000000000000000000000000000000000091 +:10AFC0000000000000000000000000000000000081 :10AFD0000000000000000000000000000000000071 :10AFE0000000000000000000000000000000000061 -:10AFF000000000010000000001000000000000004F +:10AFF0000000000000000000000000000000000051 :10B000000000000000000000000000000000000040 :10B010000000000000000000000000000000000030 -:10B02000000001A00000010001000000000000007D -:10B030000000821100C843000000600000C800004A -:10B040000000820000C800000000000000000000B6 +:10B020000000000000000000000000000000000020 +:10B030000000000000000000000000000000000010 +:10B040000000000000000000000000000000000000 :10B0500000000000000000000000000000000000F0 :10B0600000000000000000000000000000000000E0 -:10B0700000000000000000C8000000000000000008 +:10B0700000000000000000000000000000000000D0 :10B0800000000000000000000000000000000000C0 :10B0900000000000000000000000000000000000B0 :10B0A00000000000000000000000000000000000A0 -:10B0B0000000000000000000FF9966000000000092 +:10B0B0000000000000000000000000000000000090 :10B0C0000000000000000000000000000000000080 :10B0D0000000000000000000000000000000000070 :10B0E0000000000000000000000000000000000060 @@ -199490,9 +203587,9 @@ :10B10000000000000000000000000000000000003F :10B11000000000000000000000000000000000002F :10B12000000000000000000000000000000000001F -:10B1300000000000000000000000FF996600000011 +:10B13000000000000000000000000000000000000F :10B1400000000000000000000000000000000000FF -:10B1500000000000030000000000000000000000EC +:10B1500000000000000000000000000000000000EF :10B1600000000000000000000000000000000000DF :10B1700000000000000000000000000000000000CF :10B1800000000000000000000000000000000000BF @@ -199506,290 +203603,290 @@ :10B20000000000000000000000000000000000003E :10B21000000000000000000000000000000000002E :10B22000000000000000000000000000000000001E -:10B230000000000000000000000066663C3C3F3F4C -:10B240003F3F000000000000000000000000000080 -:10B250000000F000000000000000000000000000FE +:10B23000000000000000000000000000000000000E +:10B2400000000000000000000000000000000000FE +:10B2500000000000000000000000000000000000EE :10B2600000000000000000000000000000000000DE :10B2700000000000000000000000000000000000CE :10B2800000000000000000000000000000000000BE :10B2900000000000000000000000000000000000AE :10B2A000000000000000000000000000000000009E -:10B2B00000000000000000000000000066663C3C4A -:10B2C0000303030300000000000000000000000072 -:10B2D00000000000F000000000000000000000007E +:10B2B000000000000000000000000000000000008E +:10B2C000000000000000000000000000000000007E +:10B2D000000000000000000000000000000000006E :10B2E000000000000000000000000000000000005E :10B2F000000000000000000000000000000000004E :10B30000000000000000000000000000000000003D :10B31000000000000000000000000000000000002D :10B32000000000000000000000000000000000001D -:10B3300000000000000000610006000D0000006138 -:10B340000039C001000000610007C0010000006179 -:10B350000007C0090000000000000000000000001D +:10B33000000000000000000000000000000000000D +:10B3400000000000000000000000000000000000FD +:10B3500000000000000000000000000000000000ED :10B3600000000000000000000000000000000000DD :10B3700000000000000000000000000000000000CD -:10B3800000610002000D000000000000000000004D +:10B3800000000000000000000000000000000000BD :10B3900000000000000000000000000000000000AD :10B3A000000000000000000000000000000000009D -:10B3B00000610006000D0000000000000000000019 -:10B3C000FF0FF000F03CF03C0000F0FF28D703FC3A -:10B3D00055000000282C282C000000000000000070 +:10B3B000000000000000000000000000000000008D +:10B3C000000000000000000000000000000000007D +:10B3D000000000000000000000000000000000006D :10B3E000000000000000000000000000000000005D :10B3F000000000000000000000000000000000004D -:10B400000000DFFF0000000000000000000000005E +:10B40000000000000000000000000000000000003C :10B41000000000000000000000000000000000002C :10B42000000000000000000000000000000000001C -:10B43000000008D2DAD2FFC30000000000000000C4 -:10B440000000FF0FF000F03CF03C0000F0FF3CC3B8 -:10B4500003FC55000000282C282C000000000000F0 +:10B43000000000000000000000000000000000000C +:10B4400000000000000000000000000000000000FC +:10B4500000000000000000000000000000000000EC :10B4600000000000000000000000000000000000DC :10B4700000000000000000000000000000000000CC -:10B4800000000000FFFF00000000000000000000BE +:10B4800000000000000000000000000000000000BC :10B4900000000000000000000000000000000000AC :10B4A000000000000000000000000000000000009C -:10B4B0000000000000E3E3E3FFC300003C003C00A9 -:10B4C00000000000FC0CFC0CF0F000FF000000008D -:10B4D000C3FF0000003C003C454545410000000022 +:10B4B000000000000000000000000000000000008C +:10B4C000000000000000000000000000000000007C +:10B4D000000000000000000000000000000000006C :10B4E000000000000000000000000000000000005C :10B4F000000000000000000000000000000000004C -:10B50000000000000000003C003C000000000000C3 +:10B50000000000000000000000000000000000003B :10B51000000000000000000000000000000000002B :10B52000000000000000000000000000000000001B -:10B5300000000000000000CFFFCF000020203C00F2 -:10B540003C0000000000FC0CFC0CF0F000FF0000D0 -:10B55000000000007C7C003C003C4545454100006B +:10B53000000000000000000000000000000000000B +:10B5400000000000000000000000000000000000FB +:10B5500000000000000000000000000000000000EB :10B5600000000000000000000000000000000000DB :10B5700000000000000000000000000000000000CB -:10B580000000000000000000003C003C0000000043 +:10B5800000000000000000000000000000000000BB :10B5900000000000000000000000000000000000AB :10B5A000000000000000000000000000000000009B -:10B5B0000000000000000000FFCFFFCF00000000EF -:10B5C000000000000010000000000000000000006B -:10B5D0000000000000000000000000080000000063 -:10B5E0000008000000000000000000000000020051 -:10B5F0000000000000000000000800000000000043 -:10B600000000000582000000820000080000000029 -:10B610000008000000000000000000000000000022 -:10B620000000000500000000000000000000000015 +:10B5B000000000000000000000000000000000008B +:10B5C000000000000000000000000000000000007B +:10B5D000000000000000000000000000000000006B +:10B5E000000000000000000000000000000000005B +:10B5F000000000000000000000000000000000004B +:10B60000000000000000000000000000000000003A +:10B61000000000000000000000000000000000002A +:10B62000000000000000000000000000000000001A :10B63000000000000000000000000000000000000A -:10B6400000000000000000000000400000000000BA -:10B6500000400000000000000000000000000000AA -:10B660000000000000000000100000400002000088 -:10B67000000040000000000000000000000000008A -:10B68000000000000000000000000000400000007A -:10B690000002000040000000000000004000000028 +:10B6400000000000000000000000000000000000FA +:10B6500000000000000000000000000000000000EA +:10B6600000000000000000000000000000000000DA +:10B6700000000000000000000000000000000000CA +:10B6800000000000000000000000000000000000BA +:10B6900000000000000000000000000000000000AA :10B6A000000000000000000000000000000000009A -:10B6B000000000004000000000000000000000004A -:10B6C000000010000000000000000000000000006A -:10B6D0000000000000000000000000090000000061 -:10B6E0000040000000000000000300030000000014 +:10B6B000000000000000000000000000000000008A +:10B6C000000000000000000000000000000000007A +:10B6D000000000000000000000000000000000006A +:10B6E000000000000000000000000000000000005A :10B6F000000000000000000000000000000000004A -:10B7000000000000000300200020002000200000B6 -:10B7100000000000004000000000000000000000E9 -:10B720000000000000000000000000000000010018 -:10B730000100830001000200000000000010000072 -:10B7400002000000000000100000000000000000E7 +:10B700000000000000000000000000000000000039 +:10B710000000000000000000000000000000000029 +:10B720000000000000000000000000000000000019 +:10B730000000000000000000000000000000000009 +:10B7400000000000000000000000000000000000F9 :10B7500000000000000000000000000000000000E9 :10B7600000000000000000000000000000000000D9 :10B7700000000000000000000000000000000000C9 -:10B78000001000000000000002090001000100019B -:10B790000000008800000000000000000000000021 -:10B7A0000008000800080000001000000000000071 -:10B7B0000408040004000408000800000000000061 -:10B7C000000800080008000000020000000000005F -:10B7D0000000000000110000000000000000000058 +:10B7800000000000000000000000000000000000B9 +:10B7900000000000000000000000000000000000A9 +:10B7A0000000000000000000000000000000000099 +:10B7B0000000000000000000000000000000000089 +:10B7C0000000000000000000000000000000000079 +:10B7D0000000000000000000000000000000000069 :10B7E0000000000000000000000000000000000059 :10B7F0000000000000000000000000000000000049 -:10B800000000000000080000000000000000000030 -:10B810000000000000000000000000080000000020 -:10B820000000000000000008000000000000000010 -:10B830000000000000000000000000080000000000 +:10B800000000000000000000000000000000000038 +:10B810000000000000000000000000000000000028 +:10B820000000000000000000000000000000000018 +:10B830000000000000000000000000000000000008 :10B8400000000000000000000000000000000000F8 -:10B8500011000902000000000020400000820400E6 -:10B8600000C0030003C0030003000000000000024A -:10B8700000020000000000000000000000000000C6 -:10B880000000001000000000000000000000008226 -:10B8900000000000000000000000000800000000A0 -:10B8A0000000000000080000000000000000000090 +:10B8500000000000000000000000000000000000E8 +:10B8600000000000000000000000000000000000D8 +:10B8700000000000000000000000000000000000C8 +:10B8800000000000000000000000000000000000B8 +:10B8900000000000000000000000000000000000A8 +:10B8A0000000000000000000000000000000000098 :10B8B0000000000000000000000000000000000088 -:10B8C000000000001100000000000008000000005F -:10B8D0000000000004000400040004000000000058 +:10B8C0000000000000000000000000000000000078 +:10B8D0000000000000000000000000000000000068 :10B8E0000000000000000000000000000000000058 :10B8F0000000000000000000000000000000000048 :10B900000000000000000000000000000000000037 -:10B91000000000000000A000000000000000000087 -:10B920000000000000008200000000000000000095 +:10B910000000000000000000000000000000000027 +:10B920000000000000000000000000000000000017 :10B930000000000000000000000000000000000007 -:10B94000000000000000000000000000000000C037 -:10B9500000C000C011C0808880828000800000C0CC -:10B9600000C0000000000000000000000000000017 -:10B9700000000000000000000000000000000000C7 +:10B9400000000000000000000000000000000000F7 +:10B9500000000000000000000000000000000000E7 +:10B9600000000000000000000000000000000000D7 +:10B9700000000000000000000000000000000003C4 :10B9800000000000000000000000000000000000B7 -:10B99000000011000000000000000000000008008E -:10B9A000000041000000090000000000000000004D -:10B9B000000800000000000000000000000000007F -:10B9C00000C00000000000000000000000000000B7 -:10B9D00000000041000000410180018001C10141DF -:10B9E00000410041000000000011000000000000C4 +:10B990000005000000000000000000000000100092 +:10B9A0000000000000000000000000000000000097 +:10B9B0000000000000000000000000000000000087 +:10B9C0000000000000000000000000000000000077 +:10B9D0000000000000000000000000000000000067 +:10B9E0000000000000000000000000000000000057 :10B9F0000000000000000000000000000000000047 :10BA00000000000000000000000000000000000036 -:10BA1000000000000000000000000008000004001A -:10BA20000000000000000000000000000000000016 +:10BA10000000000000000000000000000000000026 +:10BA20008000000000000000000000000000000096 :10BA30000000000000000000000000000000000006 :10BA400000000000000000000000000000000000F6 -:10BA50000000000000000000008404100410041026 -:10BA600008204000002004C000000000000000206A -:10BA7000000000000000000000000000000800A01E -:10BA80000000000000840000000000000000000032 -:10BA90000000000000000000000000000020002066 -:10BAA00000A00090000000840000000000000000E2 -:10BAB0000000000000000000000000000000000086 -:10BAC0000000000000000000000000000004000072 -:10BAD00000900900000000000000000001000100CB -:10BAE00000800120004100410041000000000000F2 -:10BAF0000000000000000000000000000000000046 -:10BB0000000000000000000000000000900000089D -:10BB1000000000000000A000000000000000000085 -:10BB20000000000000000000000000000000000015 -:10BB300000080000000000000800000008000000ED -:10BB400000000000000000000000000000000000F5 -:10BB500000000000000000820000000000820400DD -:10BB600004000020040100000000000000000000AC -:10BB700000000000000000000000000000000000C5 -:10BB80000040000002000000000000000000000073 -:10BB900000000000000000000000000000000000A5 -:10BBA0000000000000000000000000000000000095 -:10BBB0000000000000000000000000000000000085 -:10BBC0000000000000000000000000000000000075 -:10BBD0000000000000400200000000000000000023 -:10BBE000C00800880004C010000000000000000031 +:10BA500000000000000000000000000000000000E6 +:10BA600001000000000000000000000000000000D5 +:10BA700000000000000000000000000000000000C6 +:10BA800001000003000000000000000000000000B2 +:10BA900000000000000000000000000000000000A6 +:10BAA0000000000000000000000000000000000096 +:10BAB000000000000000000000000000000800007E +:10BAC0000000000000000000000000000000000076 +:10BAD0000000000000000000000000000000000066 +:10BAE0000000100000000000000000000000000046 +:10BAF000000000000000000800080000000800002E +:10BB000000082000000300080084000000000084FA +:10BB1000000000000000000000080008000000080D +:10BB20000004000800000082000400000000000083 +:10BB30000000000800000000008400840000008471 +:10BB40000084000800080000000000000000000061 +:10BB500000000000000000000000000000210000C4 +:10BB6000002100030021000000210000002100004E +:10BB7000002100210021000000050000002100003C +:10BB80000021002100210003000000210005002108 +:10BB9000000000210021002100000005000000211C +:10BBA00000050021002100080008004000000021DD +:10BBB000000000080021000000000000000000213B +:10BBC0000000000800020008000000000000000063 +:10BBD0000000000000000000000000000000000065 +:10BBE0000000000000000000000000000000000055 :10BBF0000000000000000000000000000000000045 -:10BC00000000000000000000000000000000000034 -:10BC10000000000000000000000000000000000024 +:10BC00000000000000000000000300000000000031 +:10BC10000000000000000000000000000002000022 :10BC20000000000000000000000000000000000014 -:10BC30000000000000000000000000000000000004 +:10BC300000000000000000000008000000000000FC :10BC400000000000000000000000000000000000F4 :10BC500000000000000000000000000000000000E4 -:10BC60000000008000000000808000000000000054 +:10BC600000000000000000000100000000000000D3 :10BC700000000000000000000000000000000000C4 -:10BC800000000000000000000000000000000000B4 +:10BC800000000000000000000100000000000000B3 :10BC900000000000000000000000000000000000A4 -:10BCA0000000000000000000000000000000000094 +:10BCA0000000000000000000000001000000000093 :10BCB0000000000000000000000000000000000084 :10BCC0000000000000000000000000000000000074 :10BCD0000000000000000000000000000000000064 -:10BCE0000000000080000000008000000000000054 +:10BCE0000000000000000000000020000000000034 :10BCF0000000000000000000000000000000000044 -:10BD00000000000000000000000000000000000033 +:10BD00000000000000000000000010000000000023 :10BD10000000000000000000000000000000000023 -:10BD20000000000000000000000000000000000013 +:10BD200000000000000000000000000020000000F3 :10BD30000000000000000000000000000000000003 -:10BD400000000000000000000080000000800000F3 +:10BD400000000000000000000000000000000000F3 :10BD500000000000000000000000000000000000E3 -:10BD60000000000000000800C00000080000000003 -:10BD700000000000000000000000000000000000C3 -:10BD800000000000000000000000000000000000B3 +:10BD600000000000000000000003000000000008C8 +:10BD700000080000000000000000000000000000BB +:10BD8000002100000000000000080000000000008A :10BD900000000000000000000000000000000000A3 -:10BDA000000000840000008400000000000000008B -:10BDB0000000000000000000000000000000000083 -:10BDC000000000000000000000000004000000046B +:10BDA0000000000500000000000000050000000089 +:10BDB000000000000200000000000200000000007F +:10BDC0000000000500000008000000000000204006 :10BDD0000000000000000000000000000000000063 -:10BDE0000000000000000000C00800080004C000BF +:10BDE0000000000000000000000000000000000053 :10BDF0000000000000000000000000000000000043 :10BE00000000000000000000000000000000000032 :10BE10000000000000000000000000000000000022 -:10BE200000000000000040000000000000000000D2 +:10BE20000000000000000000000000000000000012 :10BE30000000000000000000000000000000000002 -:10BE40000000000000000000000000000000900062 -:10BE500000000000000000000000000000000000E2 -:10BE600000000000000000000000008000800000D2 -:10BE70008000000000000000000000000000000042 -:10BE800000000000000000000000000000000000B2 -:10BE900000000000000000000000000000000000A2 -:10BEA000000000000500000080000000000000000D -:10BEB0000000000000000000000000000000000082 -:10BEC0000000000000000000000000004000000032 -:10BED0000000000000000000000000000000000062 -:10BEE00000000000000000000000000000080084C6 +:10BE400000000000000000000000000000000000F2 +:10BE50008000000000000000000000000000000062 +:10BE600000000000000800080000000800000008B2 +:10BE700000000005000000000000000800000000B5 +:10BE8000000000000008000800000008000500088D +:10BE90000000000000050008000000000021000074 +:10BEA000000800000000000800080000000800086A +:10BEB0000008000000050008000000000003C000AA +:10BEC00000000000000000210021000000210021EE +:10BED00000080080000000000000000000000000DA +:10BEE0000000000000000000000000000000000052 :10BEF0000000000000000000000000000000000042 :10BF00000000000000000000000000000000000031 :10BF10000000000000000000000000000000000021 -:10BF200000000000000000200008000000000000E9 +:10BF20000000000000000000000000000000000011 :10BF30000000000000000000000000000000000001 :10BF400000000000000000000000000000000000F1 -:10BF500000100000000000000000000000000000D1 -:10BF600000000000000000000000000000002001B0 -:10BF700088088804A0000000000000000000000005 -:10BF800000000000000000000000000000000000B1 -:10BF900000000000000000000000000000000000A1 -:10BFA0000000000000000000000100000000000090 -:10BFB0000000000000000000000000000000000081 -:10BFC0000000000000000000000000000000000071 -:10BFD0000000000000000000000000000000000061 -:10BFE0000000000000000000000000000000000051 -:10BFF00000810000430000820000000000000000FB -:10C000000000000000000000000000000000000030 -:10C010000000000000000000000000000000000020 -:10C0200000000000000000000000000000004300CD -:10C030000000000000000000000000000000000000 -:10C0400000000000000000000000000000000000F0 -:10C05000000000000000430000000000000000009D -:10C0600000000000000000000000000000000000D0 -:10C070000000C0AA3F55F33BF33B00000000000066 -:10C0800000000000000000000000000000000000B0 -:10C0900000000000000000000000000000000000A0 -:10C0A0000000000000000000000000000000000090 -:10C0B0000000000000000000000000000000000080 -:10C0C0000000000000000000000000000000000070 -:10C0D0000000000000000000000000000000000060 -:10C0E0000000000000000000000000000000000050 -:10C0F00000000000C0AA3F550CC40CC400000000A2 -:10C10000000000000000000000000000000000002F -:10C11000000000000000000000000000000000001F -:10C12000000000000000000000000000000000000F -:10C1300000000000000000000000000000000000FF -:10C1400000000000000000000000000000000000EF -:10C1500000000000000000000000000000000000DF -:10C1600000000000000000000000000000000000CF -:10C17000000000000000D52AAE51363636360000E9 -:10C1800000000000000000000000000000000000AF -:10C19000000000000000000000000000000000009F -:10C1A000000000000000000000000000000000008F -:10C1B000000000000000000000000000000000007F -:10C1C000000000000000000000000000000000006F -:10C1D000000000000000000000000000000000005F -:10C1E000000000000000000000000000000000004F -:10C1F0000000000000000000D728AE51696969699D -:10C20000000000000000000000000000000000002E -:10C21000000000000000000000000000000000001E -:10C22000000000000000000000000000000000000E -:10C2300000000000000000000000000000000000FE -:10C2400000000000000000000000000000000000EE -:10C2500000000000000000000000000000000000DE -:10C2600000000000000000000000000000000000CE -:10C270000000000000000000000000000038000086 -:10C2800000000000000000000000000000000000AE -:10C29000000000000000000000000000000000009E -:10C2A000000000000000000000000000000000008E -:10C2B0000000000005000A08050000A000000000C2 -:10C2C000000000000000000000000000000000006E -:10C2D00000000000000000000000000005000A0847 -:10C2E000050000A0000000000000000000000000A9 -:10C2F000000000000000000000000000000000003E -:10C30000000000000000000000000000000000002D -:10C31000000000000000000000000000000000001D -:10C32000000000000000000000000000000000000D -:10C3300000000000000000000000000000000000FD -:10C3400000000000000000000000000000000000ED -:10C3500000000000000000000000000000000000DD -:10C3600000000000000000000000000000000000CD -:10C3700000000000000000000000000000000000BD -:10C3800000000000000000000000000000000000AD -:10C39000000000000000000000000000000000009D -:10C3A000000000000000000000000000000000008D -:10C3B000000000000000000000000000000000007D -:10C3C000000000000000000000000000000000006D -:10C3D000000000000000000000000000000000005D -:10C3E000000000000000000000000000000000004D +:10BF500000000000080800010001000100C000010D +:10BF6000C00100C00189010000010084000400013B +:10BF7000000100C0000000010001000100C000013C +:10BF8000C00100C001890100000100200010000173 +:10BF9000000100C00000000000010001000100C01D +:10BFA0000001C00100C001890100000100840010EF +:10BFB0000001000100C0000000010001000100C0FC +:10BFC0000101C00100C0018901001001008400824C +:10BFD0000001000100C10000004100410041008259 +:10BFE0000041804100901041410902410080000061 +:10BFF00000410041008200000041004100410082F8 +:10C0000000418041009010414109094100800080B9 +:10C010000041004100820000000000410041004159 +:10C02000008200418041009010414109024100809E +:10C0300000800041004100820000004100410041B9 +:10C0400000820841804100C11041410985410080C2 +:10C050000080004100410085000041000300000015 +:10C060000080410089000000030041002100000918 +:10C070009180C100C1000080000041000300000069 +:10C0800000804100890000000300410021000009F8 +:10C090008200C141C10000A1000000034141030032 +:10C0A00000000080410089000000030041002100E1 +:10C0B00000099080C100C100008000004100030021 +:10C0C000000000804100890000000300C100210041 +:10C0D00000099080C100C100008000000100010043 +:10C0E000000000C00100C000000001000400840442 +:10C0F00000C0C0C00900C1000084020201000100AC +:10C10000000000C00100C000000001000400840421 +:10C1100000C0C0000900C10000840202000001014B +:10C120000100000000C00100C00000000100040088 +:10C13000840400C0C0C00900C100008402020100E4 +:10C140000100000000C00100C0000000010002006A +:10C1500084C000C0C1C00900C1000084101000C02C +:10C160000001C0C100000000000100C0C010008537 +:10C17000000100C10000000000010000000000C03C +:10C180000001C0C100000000000100C0C010008517 +:10C19000000100C1000000000001000000000000DC +:10C1A00000C00001C0C100000000000100C0C010BC +:10C1B0000003000100C100000000000100000000B9 +:10C1C00000C00001C0C100000000000100C0C0109C +:10C1D0000003000100C10000000000010000000099 +:10C1E0000080004180C10000000000410082800208 +:10C1F0000041004100C100000000004100020000B9 +:10C200000080004180C100000000004100918002D8 +:10C210000041004100C10000000000410002000098 +:10C2200000000080004180C100000000004100913A +:10C2300080020041004100C10000000000410002F6 +:10C2400000000080004180C100000000004100911A +:10C2500080020041004100C10000000000410010C8 +:10C260000000C100800080C1000041000000880083 +:10C270004100C10000008008000041000000800073 +:10C280004100C100800080C1000041000000880022 +:10C290004100C10000008008000041000000800053 +:10C2A00041000000C100800080C10000410000008A +:10C2B00088004100C100000080080000410000002B +:10C2C00080004100C100800080C1000041000000EA +:10C2D00088004100C100000080080000410000000B +:10C2E00080414100C1004000C0C1000001000200C7 +:10C2F00009000100C1101000C00100000100000091 +:10C30000C0000100C1004000C0C1000001000200E7 +:10C3100009000100C1101000C00100000100000070 +:10C32000C00001000000C1004000C0C100000100C9 +:10C33000020009000100C1101000C001000001004E +:10C340000000C0000100C1004000C0C100000100A9 +:10C35000020009000100C1101000C001000001002E +:10C360000000C001010000000000000000420000C9 +:10C3700000000000C813411200480700C4830000F9 +:10C38000000000000000000000000000004200006B +:10C3900000000000C813411200480700C40000005C +:10C3A0000000000000000000000000000000C1428A +:10C3B000000000000000C813411200480700C483B9 +:10C3C000000000000000000000000000000000422B +:10C3D000000000000000C813411200480700C48399 +:10C3E000000000000000001300000000000000003A :10C3F000000000000000000000000000000000003D :10C40000000000000000000000000000000000002C :10C41000000000000000000000000000000000001C @@ -199805,195 +203902,195 @@ :10C4B000000000000000000000000000000000007C :10C4C000000000000000000000000000000000006C :10C4D000000000000000000000000000000000005C -:10C4E000000000000000000000000000000000004C +:10C4E000000000000000000000000000757B00005C :10C4F000000000000000000000000000000000003C -:10C50000000000000000000000000000000000002B -:10C510000000000000000002000000000000000019 -:10C52000000000000000000000000000000000000B -:10C5300000000000000088008800000000020000E9 -:10C540000000000000000000840000000000000067 -:10C5500000000004000400000000000000000000D3 -:10C5600000000000000000000000000000000002C9 -:10C570000002000000000000000000000180000038 -:10C5800000000000000000000000000000000000AB -:10C59000000000000000000000000000000000009B -:10C5A000000000000000000000000000000000008B -:10C5B000000000001000000000000000000000006B -:10C5C000000000000000000000000000000000006B -:10C5D0000000000000000000408800004100000052 -:10C5E000000000000000000000000000000000004B -:10C5F00000000000000000000000000000002040DB -:10C600000000010004000000010000000000000024 -:10C61000000000000000000000000000000000001A -:10C6200000000000000000000000000000100000FA -:10C6300000000000000000000208000000000000F0 -:10C6400000030000000000000000000000000000E7 -:10C650000000000002000041000090832000000262 -:10C6600000000000010001000100000000000000C7 -:10C67000001000000000000000100000000000108A -:10C680008200000040008000000040000000000028 +:10C5000000000000000000000000DEAE757B0000AF +:10C51000000000000000000000000000000000001B +:10C5200000000000000000000000DEAE0000757B8F +:10C5300000000000000000000000000000000000FB +:10C54000000000000000000000000000DEAE757B6F +:10C5500000000000000000000000000000000000DB +:10C56000000000000000000000000000DEAE60C619 +:10C5700003000000000000000031E00000000000A7 +:10C5800000000C0000000000000000C0630660C650 +:10C5900003000000000000000031E0000000000087 +:10C5A00000000C0000000000000000C06306000056 +:10C5B00060C603000000000000000031E000000041 +:10C5C000000000000C0000000000000000C0630636 +:10C5D00060C603000000000000000031E000000021 +:10C5E000000000000C0000000000000000C0630616 +:10C5F000000000000000000000000000000000003B +:10C60000000000000000000000000000000000002A +:10C610000000000000008400000000000000000096 +:10C62000000000000000000000000000000000000A +:10C6300000000000000000002000000000000000DA +:10C64000000800000000000088000000000000005A +:10C6500000000000000000002000000000000000BA +:10C6600000000000000000000000000000000000CA +:10C6700000000000000000000000000000000000BA +:10C6800000000000000000000000000000000000AA :10C69000000000000000000000000000000000009A -:10C6A0000000000000000000000000080000000082 +:10C6A000000000000000000000000000000000008A :10C6B000000000000000000000000000000000007A -:10C6C000000000000000000000000000001000005A -:10C6D00000040004000000000000000000108000C2 -:10C6E000000100000000040004000400000000003D +:10C6C000000000000000000000000000000000006A +:10C6D000000000000000000000000000000000005A +:10C6E000000000000000000000000000000000004A :10C6F000000000000000000000000000000000003A -:10C7000000010000000000000000200500200020C3 -:10C71000002000020040000000000000C0000020D7 -:10C720000400000000000000000000000000000005 +:10C700000000000000000000000000000000000029 +:10C710000000000000000000000000000000000019 +:10C720000000000000000000000000000000000009 :10C7300000000000000000000000000000000000F9 -:10C7400000000000000000000000000000004000A9 -:10C750000000000040000000000000000000000099 -:10C760000000000000000000000000000000004188 -:10C7700000000000000000080002000000000000AF -:10C780000000400088000000110000000084000943 -:10C790000001000100010040000000000000000056 -:10C7A0000000000000000000000000000000000089 -:10C7B0000000000800080000000000000000000069 -:10C7C0000000000000000000000000000000000069 -:10C7D0000000000000000000000000000000000059 -:10C7E0000000000000000000000000000000000049 -:10C7F0000000000000000000000000020000000037 +:10C7400000000000000000000000000000000000E9 +:10C7500000000000000000000000000000000000D9 +:10C7600000000000000000000000000000000000C9 +:10C7700000000000000000000000000000000000B9 +:10C7800000000000000000000000000000000000A9 +:10C790000000000000000000000000000000000891 +:10C7A0000000000000840000000000000008008479 +:10C7B0000010000000000000000000000000000069 +:10C7C0000008000000000000000000000000000859 +:10C7D00000000084000000000000000000000000D5 +:10C7E00000820000000000040000000000000008BB +:10C7F0000000001000000000000000000000000029 :10C800000000000000000000000000000000000028 -:10C810000000000000000000000000000000000018 -:10C820000000000000000000000000000000000008 -:10C830000000A02088200000000000000000000090 -:10C8400000000000000000000000000000000000E8 -:10C8500000000000000000000000000000000000D8 -:10C860004000002100000000000000000000000067 -:10C870000000000000000000C000000000000000F8 -:10C88000000008000005000000100000000000008B -:10C890000000000000000000000000000000000098 -:10C8A0000000000000000000000000000000000088 -:10C8B0000000000000010001000000000000000076 -:10C8C0000000000000000000000000000000000068 -:10C8D0000000000000000000000000000000000058 -:10C8E00000000000008400000000000000000000C4 -:10C8F0000000000000000000000000000000000038 -:10C90000000000008000000000880090000000206F -:10C91000041000110020042001000000004002402B +:10C8100000000000000000000000002100000021D6 +:10C8200000000000000000000000000500000021E2 +:10C8300000000000000000210000000000000000D7 +:10C84000002100210000000000090000000000009D +:10C8500000210005000000000000000000000000B2 +:10C86000000800000021000000000000000000009F +:10C8700000000000000900000000000000000000AF +:10C8800000000000000000000000000000A0000008 +:10C890000008000800080000000000000000000080 +:10C8A0000000000000000000000000000084000004 +:10C8B000000800A0001000000000000000000000C0 +:10C8C00000000000000000000000000000000084E4 +:10C8D0000000000800840008008400000000000040 +:10C8E0000000000000080000000000000000000040 +:10C8F000000000080084001011000000000000008B +:10C900000000000000000000000000000000000027 +:10C910000000000000000000000000000000000017 :10C920000000000000000000000000000000000007 :10C9300000000000000000000000000000000000F7 -:10C9400000000000000000000000000000000000E7 +:10C9400000000000400000000000000000000000A7 :10C9500000000000000000000000000000000000D7 -:10C9600000000000000000001000000000001000A7 -:10C9700000000000000000000000000000000000B7 -:10C98000000000000000400000008400880000005B -:10C99000000080000010000180A1040220020000BD -:10C9A0000000000000000200000000000000000085 +:10C96000000000000000000000000000A000000027 +:10C9700000000000080088000000000082000000A5 +:10C9800000000000000000000000000000000000A7 +:10C990000000000000000000000000000000000097 +:10C9A0000000000000000000000000000000000087 :10C9B0000000000000000000000000000000000077 :10C9C0000000000000000000000000000000000067 :10C9D0000000000000000000000000000000000057 -:10C9E0000000000000000400000000000000000043 -:10C9F000000000000000000000000800000000002F -:10CA00000010000000000000000000000500000011 -:10CA100000410420002004200100004100200020EB +:10C9E0000000000000000000000000000000000047 +:10C9F0000000000000000000000000000000000037 +:10CA00000000000000000000000000000000000026 +:10CA10000000000000800000000000000000000096 :10CA20000000000000000000000000000000000006 -:10CA30000000200000000000000000000000008056 +:10CA30000000000000800000000000000000000076 :10CA400000000000000000000000000000000000E6 -:10CA500000000000000000000000000000000000D6 -:10CA600000000000000000000000000008000800B6 -:10CA70000000002100210000000000000000000074 -:10CA800000000000000000000000000000000000A6 -:10CA9000000000008001000180010400210000016D -:10CAA0000001000000000000000000000000000085 -:10CAB0000000000000000000000000000000000076 -:10CAC0000020000000000000000000000000000046 -:10CAD0000000000000000000000000000000000056 -:10CAE0000000000000000000000000000000000046 -:10CAF0000000000000000000000000000000000036 +:10CA50000000000000000080000000000000000056 +:10CA600000000000000000000000000000000000C6 +:10CA7000000800000000008000000000000000002E +:10CA8000000000000000000000000008000011008D +:10CA9000000800000000001000A0000000000000DE +:10CAA000000000000000000000000008000011006D +:10CAB00000A000000000001000A000000000000026 +:10CAC000000000000000000000000000000800005E +:10CAD0001100008800000000001000A0000000000D +:10CAE000000000000000000000000000000200A0A4 +:10CAF0001100008800000000201000A000000000CD :10CB00000000000000000000000000000000000025 -:10CB100000000000100300900088001001C10021F7 -:10CB20008811C001000000000000000000000000AB -:10CB300000000000000000000000000000000000F5 +:10CB10000000000000000000000000000000000015 +:10CB20000000000000000000000000000000000005 +:10CB300000000000000000000000000000000008ED :10CB400000000000000000000000000000000000E5 :10CB500000000000000000000000000000000000D5 -:10CB600000000000000000000000000000000000C5 -:10CB700000000800000000000000000000000000AD -:10CB8000000000000000000000000000000000A005 -:10CB9000004000A0000080400089000909091090B1 -:10CBA0000588009000210000000000000000000047 +:10CB60000021000000000003000000084000000059 +:10CB700000000000000000000000000000000000B5 +:10CB80000000900000000000000000000000000015 +:10CB90000000000000000000000000000000000095 +:10CBA0000000000000000000000000000000000085 :10CBB0000000000000000000000000000000000075 :10CBC0000000000000000000000000000000000065 :10CBD0000000000000000000000000000000000055 :10CBE0000000000000000000000000000000000045 -:10CBF00020002100000000000000000000000000F4 +:10CBF0000000000000000000000000000000000035 :10CC00000000000000000000000000000000000024 -:10CC100000800080000000000080800000118091F2 -:10CC20001000A1210082901100000000000000000F +:10CC10000000000000000000000000000000000014 +:10CC20000000000000000000000000000000000004 :10CC300000000000000000000000000000000000F4 -:10CC400000000080000000800000000000000000E4 +:10CC400000000000000000000000000000000000E4 :10CC500000000000000000000000000000000000D4 :10CC600000000000000000000000000000000000C4 -:10CC700000002080410205081082000000800000B2 +:10CC700000000000000000000000000000000000B4 :10CC800000000000000000000000000000000000A4 -:10CC90000000000000000021000000408200C000F1 -:10CCA000C09190008500A010C0830000000000002B +:10CC90000000000000000000000000000000000094 +:10CCA0000000000000000000000000000000000084 :10CCB0000000000000000000000000000000000074 -:10CCC000000000000004000000C0000000000000A0 +:10CCC0000000000000000000000000000000000064 :10CCD0000000000000000000000000000000000054 :10CCE0000000000000000000000000000000000044 -:10CCF0000000000000080001012000A10000000465 -:10CD000000000040000000000000000000000000E3 -:10CD100000000000000000000001000000020040D0 -:10CD2000901000C0A0900010009102C00000000010 +:10CCF0000000000000000000000000000000000034 +:10CD00000000000000000000000000000000000023 +:10CD10000000000000000000000000000000000013 +:10CD20000000000000000000000000000000000003 :10CD300000000000000000000000000000000000F3 -:10CD40000000000000000000C00000000000000023 +:10CD400000000000000000000000000000000000E3 :10CD500000000000000000000000000000000000D3 :10CD600000000000000000000000000000000000C3 -:10CD700000000000000000000000000000010000B2 -:10CD8000000004000000000000000000000000009F -:10CD900000000000000040880008202010C00000B3 -:10CDA0000480910000800003408811A1808500006C +:10CD700000000000000000000000000000000000B3 +:10CD800000000000000000000000000000000000A3 +:10CD90000000000000000000000000000000000093 +:10CDA0000000000000000000000000000000000083 :10CDB0000000000000000000000000000000000073 :10CDC0000000000000000000000000000000000063 :10CDD0000000000000000000000000000000000053 :10CDE0000000000000000000000000000000000043 -:10CDF00000000000000000000002002000200010E1 -:10CE000000000000800000000000000000000000A2 -:10CE10000000000000000000800000800000C00052 -:10CE2000210208900000100084A004A1110000035A +:10CDF0000000000000000000000000000000000033 +:10CE00000000000000000000000000000000000022 +:10CE10000000000000000000000000000000000012 +:10CE20000000000000000000000000000000000002 :10CE300000000000000000000000000000000000F2 -:10CE400000000000000000000000000800000000DA +:10CE400000000000000000000000000000000000E2 :10CE500000000000000000000000000000000000D2 :10CE600000000000000000000000000000000000C2 -:10CE7000000000000000000000001004A1110300E9 -:10CE80008803000000020000000000000000000015 +:10CE700000000000000000000000000000000000B2 +:10CE800000000000000000000000000000000000A2 :10CE90000000000000000000000000000000000092 -:10CEA00000000100012100100000C0900010A1004E -:10CEB00090000000000000000000000000000000E2 +:10CEA0000000000000000000000000000000000082 +:10CEB0000000000000000000000000000000000072 :10CEC0000000000000000000000000000000000062 :10CED0000000000000000000000000000000000052 :10CEE0000000000000000000000000000000000042 -:10CEF0000000000000000000000000002088080181 -:10CF0000110003000000000000000000000000000D -:10CF10000000000000000000000000000000880089 -:10CF20009000000000060000430000000011000017 -:10CF300043000000000000000000000000000000AE +:10CEF0000000000000000000000000000000000032 +:10CF00000000000000000000000000000000000021 +:10CF10000000000000000000000000000000000011 +:10CF20000000000000000000000000000000000001 +:10CF300000000000000000000000000000000000F1 :10CF400000000000000000000000000000000000E1 -:10CF50004300000A00000000000000000000000084 +:10CF500000000000000000000000000000000000D1 :10CF600000000000000000000000000000000000C1 :10CF700000000000000000000000000000000000B1 -:10CF800000E000000000000000004300000000007E +:10CF800000000000000000000000000000000000A1 :10CF90000000000000000000000000000000000091 -:10CFA00000E000000000000000004E723030D2D2DD -:10CFB0002424CF3FF000000000000000000000002B +:10CFA0000000000000000000000000000000000081 +:10CFB0000000000000000000000000000000000071 :10CFC0000000000000000000000000000000000061 :10CFD0000000000000000000000000000000000051 :10CFE0000000000000000000000000000000000041 :10CFF0000000000000000000000000000000000031 -:10D000001818303000000000000000000000000090 +:10D000000000000000000000000000000000000020 :10D010000000000000000000000000000000000010 -:10D0200000F000F000000030000000004E723030D0 -:10D03000B4B42424C030F000000000000000000060 +:10D020000000000000000000000000000000000000 +:10D0300000000000000000000000000000000000F0 :10D0400000000000000000000000000000000000E0 :10D0500000000000000000000000000000000000D0 :10D0600000000000000000000000000000000000C0 :10D0700000000000000000000000000000000000B0 -:10D080000000C300000000000000000000000000DD +:10D0800000000000000000000000000000000000A0 :10D090000000000000000000000000000000000090 -:10D0A000000000F000F00000003000000000000070 +:10D0A0000000000000000000000000000000000080 :10D0B0000000000000000000000000000000000070 :10D0C0000000000000000000000000000000000060 :10D0D0000000000000000000000000000000000050 @@ -200001,62 +204098,62 @@ :10D0F0000000000000000000000000000000000030 :10D10000000000000000000000000000000000001F :10D11000000000000000000000000000000000000F -:10D120000000000000000000000000000F0F3CC3E2 -:10D13000060660F90606F6F9060644DD0000000062 +:10D1200000000000000000000000000000000000FF +:10D1300000000000000000000000000000000000EF :10D1400000000000000000000000000000000000DF :10D1500000000000000000000000000000000000CF :10D1600000000000000000000000000000000000BF :10D1700000000000000000000000000000000000AF :10D18000000000000000000000000000000000009F :10D19000000000000000000000000000000000008F -:10D1A00000000000000000000666000000000F0FF5 -:10D1B0003CC30606069F06060609060644DD000077 +:10D1A000000000000000000000000000000000007F +:10D1B000000000000000000000000000000000006F :10D1C000000000000000000000000000000000005F :10D1D000000000000000000000000000000000004F :10D1E000000000000000000000000000000000003F :10D1F000000000000000000000000000000000002F :10D20000000000000000000000000000000000001E :10D21000000000000000000000000000000000000E -:10D220000000000000000000000000660000000098 -:10D230000061033E0C0D92C003E3033E0C0DC2C01F +:10D2200000000000000000000000000000000000FE +:10D2300000000000000000000000000000000000EE :10D2400000000000000000000000000000000000DE -:10D25000000000000000000000000A08050000A017 +:10D2500000000000000000000000000000000000CE :10D2600000000000000000000000000000000000BE :10D2700000000000000000000000000000000000AE -:10D280000000000000000000000000610004000D2C -:10D29000000000000A08050000A0000000000000D7 -:10D2A0000000000000000000000000614006000DCA -:10D2B000000041FFD7FF00000000000F0FFF00003B +:10D28000000000000000000000000000000000009E +:10D29000000000000000000000000000000000008E +:10D2A000000000000000000000000000000000007E +:10D2B000000000000000000000000000000000006E :10D2C000000000000000000000000000000000005E :10D2D000000000000000000000000000000000004E :10D2E000000000000000000000000000000000003E :10D2F000000000000000000000000000000000002E -:10D300000000000000000000000000000F0FC30F2D -:10D310000000050F000000000000000000000000F9 +:10D30000000000000000000000000000000000001D +:10D31000000000000000000000000000000000000D :10D3200000000000000000000000000000000000FD -:10D3300000000000004100D70000000000000F0FB7 -:10D34000E2EB82E2000000000000000000000000AC +:10D3300000000000000000000000000000000000ED +:10D3400000000000000000000000000000000000DD :10D3500000000000000000000000000000000000CD :10D3600000000000000000000000000000000000BD :10D3700000000000000000000000000000000000AD -:10D3800000000000000000000000000000000F0F7F -:10D3900087870404050F0000000000000000000063 +:10D38000000000000000000000000000000000009D +:10D39000000000000000000000000000000000008D :10D3A000000000000000000000000000000000007D -:10D3B000000000000000514050000000000000008C -:10D3C000FFFF00001D1D0000000000000000000025 +:10D3B000000000000000000000000000000000006D +:10D3C000000000000000000000000000000000005D :10D3D000000000000000000000000000000000004D :10D3E000000000000000000000000000000000003D :10D3F000000000000000000000000000000000002D :10D40000000000000000000000000000000000001C -:10D410000000000000F200FA000000000000000020 +:10D41000000000000000000000000000000000000C :10D4200000000000000000000000000000000000FC -:10D430000000000000000000F7D5F55500000000D6 -:10D440008A8AFF001D1DFFFF000000000000000091 +:10D4300000000000000000000000000000000000EC +:10D4400000000000000000000000000000000000DC :10D4500000000000000000000000000000000000CC :10D4600000000000000000000000000000000000BC :10D4700000000000000000000000000000000000AC :10D48000000000000000000000000000000000009C -:10D4900000000000000000F700FF00000000000096 +:10D49000000000000000000000000000000000008C :10D4A000000000000000000000000000000000007C :10D4B000000000000000000000000000000000006C :10D4C000000000000000000000000000000000005C @@ -200064,25 +204161,25 @@ :10D4E000000000000000000000000000000000003C :10D4F000000000000000000000000000000000002C :10D50000000000000000000000000000000000001B -:10D5100000000000000000004000000000000000CB +:10D51000000000000000000000000000000000000B :10D5200000000000000000000000000000000000FB -:10D5300000000000000000000000000040000000AB -:10D5400000000000000000000002000000000000D9 -:10D550000000000000004000000200004000000049 -:10D5600000000000000000000000000000000000BB -:10D57000000000004000000000000000000040002B -:10D58000000000000000400000000000000000005B -:10D59000000000000000000000000000000040004B -:10D5A000000000000000000000000000000000007B -:10D5B0000000110000000040000000020000000018 -:10D5C000000000000000000000000804000000004F +:10D5300000000000000000000000000000000000EB +:10D5400000000000000000000000000000000000DB +:10D5500000000000000000000000040000000000C7 +:10D56000000000000000000000004000000000007B +:10D57000000000000000000000000000200000008B +:10D58000000000000000000000000000200040003B +:10D5900000000000000000000008000088000000FB +:10D5A000001000000000001000000000000000005B +:10D5B000000000000000000000000000000000006B +:10D5C000000000000000000000000000000000005B :10D5D000000000000000000000000000000000004B :10D5E000000000000000000000000000000000003B -:10D5F000000000000000000000000000001000001B -:10D600000000000000000200000000000000020016 -:10D610009000020000000000000000000000000078 -:10D6200000000000000000100000000000000000EA -:10D6300000000800000000000000000000000000E2 +:10D5F000000000000000000000000000000000002B +:10D60000000000000000000000000000000000001A +:10D61000000000000000000000000000000000000A +:10D6200000000000000000000000000000000000FA +:10D6300000000000000000000000000000000000EA :10D6400000000000000000000000000000000000DA :10D6500000000000000000000000000000000000CA :10D6600000000000000000000000000000000000BA @@ -200090,73 +204187,73 @@ :10D68000000000000000000000000000000000009A :10D69000000000000000000000000000000000008A :10D6A000000000000000000000000000000000007A -:10D6B0000000000000000000008800000090000052 +:10D6B000000000000000000000000000000000006A :10D6C000000000000000000000000000000000005A -:10D6D00000004000000000100000000000000000FA +:10D6D0000000000000000000000000000000000842 :10D6E000000000000000000000000000000000003A :10D6F000000000000000000000000000000000002A -:10D7000000000000000000004000000000000000D9 -:10D710000000000000000000000000000000000009 -:10D7200000000000000000000000000000000000F9 -:10D73000000000000008000000410000000084001C -:10D740000000000000001082000000000000000047 -:10D7500000400084000000000010001000000000E5 +:10D700000008000000000000000000000000000011 +:10D7100000000000000000000000000000100000F9 +:10D7200000080000000000000000000000000000F1 +:10D7300000000000000000000000000000000000E9 +:10D7400000000000000000000000000000000000D9 +:10D7500000000000000000000000000000000000C9 :10D7600000000000000000000000000000000000B9 :10D7700000000000000000000000000000000000A9 :10D780000000000000000000000000000000000099 -:10D79000000000000000050005000500000000007A -:10D7A0000000000000000008000000A000000000D1 -:10D7B000000000000000000000000500000005005F -:10D7C0000504400000000000000000000000000907 +:10D790000000000000000000000000000000000089 +:10D7A0000000000000000000000000000000000079 +:10D7B0000000000000000000000000000000000069 +:10D7C0000000000000000000000000000000000059 :10D7D0000000000000000000000000000000000049 -:10D7E0000000000000000000000000000000001128 -:10D7F0000000000000000000001000000010000009 +:10D7E0000000000000000000000000000000000039 +:10D7F0000000000000000000000000000000000029 :10D800000000000000000000000000000000000018 -:10D8100000000000000000000020000000000000E8 -:10D8200000000000000000000000000000000000F8 -:10D8300000000000000000000000000000000000E8 +:10D810000000000000000000000000000000000008 +:10D82000000000000000000000A000000000000058 +:10D830000000008400000000000000000000000064 :10D8400000000000000000000000000000000000D8 :10D8500000000000000000000000000000000000C8 :10D8600000000000000000000000000000000000B8 :10D8700000000000000000000000000000000000A8 -:10D880000000000000000000000000000000000098 -:10D890000000000000000000000000000000000088 -:10D8A0000008000000000000000000000000000070 +:10D880000000000000000000040000000000000094 +:10D890000000000000000000820000000000000006 +:10D8A0000000000000000000000000000000C000B8 :10D8B0000000000000000000000000000000000068 :10D8C0000000000000000000000000000000000058 -:10D8D0000000000400000000000000000000000044 +:10D8D0000000000000000000000000000000000048 :10D8E0000000000000000000000000000000000038 :10D8F0000000000000000000000000000000000028 :10D900000000000000000000000000000000000017 :10D910000000000000000000000000000000000007 :10D9200000000000000000000000000000000000F7 :10D9300000000000000000000000000000000000E7 -:10D940000000000000000000000000000000104087 -:10D9500000A00010000040000004020400000000CD -:10D960000000210000000000000000000000000096 +:10D9400000000000000000000000000000000000D7 +:10D9500000000000000000000000000000000000C7 +:10D9600000000000000000000000000000000000B7 :10D9700000000000000000000000000000000000A7 :10D980000000000000000000000000000000000097 :10D990000000000000000000000000000000000087 -:10D9A00000000000000000840008100000000000DB +:10D9A000000000000000000000000000080000006F :10D9B0000000000000000000000000000000000067 -:10D9C00000000000000000000004089000000000BB -:10D9D00000000000000000000000000090000000B7 -:10D9E0000000000000100000000000000000000027 +:10D9C000000000000000000000000008000000004F +:10D9D0000000000000000000000000000000000047 +:10D9E000000000000000000000000008000000002F :10D9F0000000000000000000000000000000000027 -:10DA00000000000000000000000000000000000016 +:10DA00000000000000000000000800000008000006 :10DA10000000000000000000000000000000000006 -:10DA200000000000000000000000000000000000F6 -:10DA300000210000000000000000000000000000C5 +:10DA200000000000000000000010000000080000DE +:10DA300000000000000000000000000000200000C6 :10DA400000000000000000000000000000000000D6 :10DA500000000000000000000000000000000000C6 :10DA600000000000000000000000000000000000B6 :10DA700000000000000000000000000000000000A6 -:10DA80000010000000100000000000000000000076 +:10DA80000000000000000000000000000000000096 :10DA90000000000000000000000000000000000086 :10DAA0000000000000000000000000000000000076 -:10DAB0000000000000000000000000000000000066 -:10DAC0000000000000000000000000200400002012 -:10DAD0000020000000000000000000000000000026 +:10DAB00000000000000000000000000084000000E2 +:10DAC000080000000000000000000000000000004E +:10DAD0000000000000000000000000000000000046 :10DAE0000000000000000000000000000000000036 :10DAF0000000000000000000000000000000000026 :10DB00000000000000000000000000000000000015 @@ -200304,192 +204401,192 @@ :10E3E000000000000000000000000000000000002D :10E3F000000000000000000000000000000000001D :10E40000000000000000000000000000000000000C -:10E41000000000000000C011048300000488000018 +:10E4100000000000000000000000000000000000FC :10E4200000000000000000000000000000000000EC -:10E4300000000000000000010000000000000000DB -:10E440000000A080000004000000000000000000A8 -:10E450000000000088040004000000000004000424 +:10E4300000000000000000000000000000000000DC +:10E4400000000000000000000000000000000000CC +:10E4500000000000000000000000000000000000BC :10E4600000000000000000000000000000000000AC :10E47000000000000000000000000000000000009C :10E48000000000000000000000000000000000008C -:10E4900000000000000000000090802000008020AC +:10E49000000000000000000000000000000000007C :10E4A000000000000000000000000000000000006C -:10E4B000000000000000002000000000000000003C -:10E4C000000041002110000080004000000000001A +:10E4B000000000000000000000000000000000005C +:10E4C000000000000000000000000000000000004C :10E4D000000000000000000000000000000000003C :10E4E000000000000000000000000000000000002C :10E4F000000000000000000000000000000000001C -:10E500000000020002000040044000000000000083 -:10E510000040000000000010000000110403000093 +:10E50000000000000000000000000000000000000B +:10E5100000000000000000000000000000000000FB :10E5200000000000000000000000000000000000EB -:10E5300000000000000000000000000300000000D8 -:10E54000000000000090020400000004020002002D -:10E550000200000002410000000000100000000066 -:10E56000000000100000000000000000008000001B -:10E5700000000000010000400200820000000000D6 -:10E58000000000000000000000008000000000000B -:10E5900000000000000000000000000000008000FB -:10E5A0000008000000000000000000000000000063 +:10E5300000000000000000000000000000000000DB +:10E5400000000000000000000000000000000000CB +:10E5500000000000000000000000000000000000BB +:10E5600000000000000000000000000200000000A9 +:10E57000000000000000000000000000000000009B +:10E58000000000000000000000000000000000008B +:10E59000000000000000000000000000000000007B +:10E5A000000000000000000000000000000000006B :10E5B000000000000000000000000000000000005B -:10E5C0000000020400040004008500080089000027 -:10E5D0000008000000000000000000000000000033 -:10E5E00000000000000000000000001000000020FB -:10E5F000001000000000200000C00000000000002B -:10E6000000000008000000000000200000000000E2 +:10E5C000000000000000000000000000000000004B +:10E5D000000000000000000000000000000000003B +:10E5E000000000000000000000000000000000002B +:10E5F000000000000000000000000000000000001B +:10E60000000000000000000000000000000000000A :10E6100000000000000000000000000000000000FA -:10E620000000000000000000000084000000000066 -:10E6300000020002000000000000000000000000D6 -:10E6400000000000001000008800000000008800AA -:10E650000000000000000000000000088200000030 -:10E66000000000000000000300000009000000009E -:10E67000000000000000000084000000C000000056 -:10E680000000000000080000000000000000000082 +:10E6200000000000000000000000000000000000EA +:10E6300000000000000000000000000000000000DA +:10E6400000000000000000000000000000000000CA +:10E6500000000000000000000000000000000000BA +:10E6600000000000000000000000000000000000AA +:10E67000000000000000000000000000000000009A +:10E68000000000000000000000000000000000008A :10E69000000000000000000000000000000000007A :10E6A000000000000000000000000000000000006A :10E6B000000000000000000000000000000000005A -:10E6C000000000000000000000000900210005001B +:10E6C000000000000000000000000000000000004A :10E6D000000000000000000000000000000000003A -:10E6E0000000000000000000000000000000090021 -:10E6F000000041000500000000000000008800004C +:10E6E000000000000000000000000000000000002A +:10E6F000000000000000000000000000000000001A :10E700000000000000000000000000000000000009 -:10E7100000000000000000000000002000000000D9 -:10E720000000000200020000008000080004000059 +:10E7100000000000000000000000000000000000F9 +:10E7200000000000000000000000000000000000E9 :10E7300000000000000000000000000000000000D9 -:10E74000000000000000000000000000C080000089 -:10E75000C00400000000C0000000000082000000B3 -:10E760008200000000008200000000008200000023 -:10E770002000000000000000000000000020002039 -:10E780000020002000000000000000000000000049 -:10E790000000000000000020000000001000000049 -:10E7A0000000000000010001000000200000000047 -:10E7B000000000000000009000A000900000000099 -:10E7C0000000000000000000000000000800002021 -:10E7D0000000000100000000000000000000000038 -:10E7E00000A0000000000000000000000000000089 -:10E7F000000080000000000004000400040000018C -:10E800000001000100010000000000000000000005 -:10E8100000000000000000400000000000001000A8 -:10E8200000009000400000000420000000000010E4 -:10E8300000000008000000000008000000000000C8 -:10E8400000000000000000000000080000000800B8 -:10E85000000000000420000000080000000000008C +:10E7400000000000000000000000000000000000C9 +:10E7500000000000000000000000000000000000B9 +:10E7600000000000000000000000000000000000A9 +:10E770000000000000000000000000000000000099 +:10E780000000000000000000000000000000000089 +:10E790000000000000000000000000000000000079 +:10E7A0000000000000000000000000000000000069 +:10E7B0000000000000000000000000000000000059 +:10E7C0000000000000000000000000000000000049 +:10E7D0000000000000000000000000000000000039 +:10E7E0000000000000000000090000000000000020 +:10E7F0000000000000000000000000000000000019 +:10E800000000000000000000000000000000000008 +:10E8100000000000000000000000000000000000F8 +:10E8200000000000000000000000000000000000E8 +:10E8300000000000000000000000000000000000D8 +:10E8400000000000000000000000000000000000C8 +:10E8500000000000000000000000000000000000B8 :10E8600000000000000000000000000000000000A8 -:10E87000820008000004080000008200C0002000A0 -:10E880008200200990040000000000000000000049 +:10E870000000000000000000000000000000000098 +:10E880000000000000000000000000000000000088 :10E890000000000000000000000000000000000078 -:10E8A0000000000000008000000080010000000067 +:10E8A0000000000000000000000000000000000068 :10E8B0000000000000000000000000000000000058 :10E8C0000000000000000000000000000000000048 -:10E8D00000000000000080010000000000000000B7 +:10E8D0000000000000000000000000000000000038 :10E8E0000000000000000000000000000000000028 -:10E8F0000000000000000001000000000000000017 -:10E90000000000008000080100000000000000007E -:10E9100000000000000000000000000000000040B7 -:10E920000000100000000200000000000080000055 -:10E930000080000000080003000800000000000044 -:10E9400000000000000000000000000008000800B7 -:10E95000000008000000008000000000000000052A -:10E960000000002100000021000000000000000065 -:10E970000000000000000800820000000400000009 -:10E9800000000000000000000800008000000000FF -:10E990000000000000000000000004000000000073 -:10E9A00000000000000000008000000000000020C7 -:10E9B0000000002000000000200000000000000017 +:10E8F0000000000000000000000000000000000018 +:10E900000000000000000000000000000000000007 +:10E9100000000000000000000000000000000000F7 +:10E9200000000000000000000000000000000000E7 +:10E9300000000000000000000000000000000000D7 +:10E9400000000000000000000000000000000000C7 +:10E9500000000000000000000000000000000000B7 +:10E9600000000000000000000000000000000000A7 +:10E970000000000000000000000000000000000097 +:10E980000000000000000000000000000000000087 +:10E990000000000000000000000000000000000077 +:10E9A0000000000000000000000000000000000067 +:10E9B0000000000000000000000000000000000057 :10E9C0000000000000000000000000000000000047 -:10E9D000080000000000410000024110210000007A +:10E9D0000000000000000000000000000000000037 :10E9E0000000000000000000000000000000000027 -:10E9F0000000000000000000000000000000800097 -:10EA00000000000000000000000000000004000002 +:10E9F0000000000000000000000000000000000017 +:10EA00000000000000000000000000000000000006 :10EA100000000000000000000000000000000000F6 -:10EA20000000000000000000010088000000C0A0FD -:10EA300091020204088200000000000000000000B3 +:10EA200000000000000000000000000000000000E6 +:10EA300000000000000000000000000000000000D6 :10EA400000000000000000000000000000000000C6 -:10EA5000000000000000000002A100004000900043 +:10EA500000000000000000000000000000000000B6 :10EA600000000000000000000000000000000000A6 :10EA70000000000000000000000000000000000096 -:10EA8000000000000000000010A090900008820824 +:10EA80000000000000000000000000000000000086 :10EA90000000000000000000000000000000000076 -:10EAA000000000000000000000000800000000005E -:10EAB000808091890090008000000000000000002C +:10EAA0000000000000000000000000000000000066 +:10EAB0000000000000000000000000000000000056 :10EAC0000000000000000000000000000000000046 -:10EAD0000000000000000000000085900802A00077 -:10EAE0000004000000000000000000000000000022 -:10EAF00000000000000000000000400000000000D6 -:10EB000000000000000000000000850080000300FD -:10EB10008000000000000000000000000000000075 -:10EB20008000000000000000000000000000000065 -:10EB3000000080800008801080900000000000002D +:10EAD0000000000000000000000000000000000036 +:10EAE0000000000000000000000000000000000026 +:10EAF0000000000000000000000000000000000016 +:10EB00000000000000000000000000000000000005 +:10EB100000000000000000000000000000000000F5 +:10EB200000000000000000000000000000000000E5 +:10EB300000000000000000000000000000000000D5 :10EB400000000000000000000000000000000000C5 -:10EB500000000000000000000000000020910808F4 -:10EB6000201108A1000000000000000000000000CB -:10EB70000000000000000000000000001000210064 -:10EB8000400010000000000500800000000300416C -:10EB9000004100000000000000000000880010009C -:10EBA000880090000000000000000000000000004D -:10EBB0000010000040040800A008A0910000000020 +:10EB500000000000000000000000000000000000B5 +:10EB600000000000000000000000000000000000A5 +:10EB70000000000000000000000000000000000095 +:10EB80000000000000000000000000000000000085 +:10EB90000000000000000000000000000000000075 +:10EBA0000000000000000000000000000000000065 +:10EBB0000000000000000000000000000000000055 :10EBC0000000000000000000000000000000000045 -:10EBD0000000000000000000000000000000000233 -:10EBE000000000908891000000000000000000007C -:10EBF0000000000000000000000000000000010014 -:10EC00000000000001000000000000040000880077 -:10EC1000C00108C02000000000000000000000004B -:10EC200000000000000000000000000000000001E3 -:10EC3000000000000001880200100008C010000061 +:10EBD0000000000000000000000000000000000035 +:10EBE0000000000000000000000000000000000025 +:10EBF0000000000000000000000000000000000015 +:10EC00000000000000000000000000000000000004 +:10EC100000000000000000000000000000000000F4 +:10EC200000000000000000000000000000000000E4 +:10EC300000000000000000000000000000000000D4 :10EC400000000000000000000000000000000000C4 :10EC500000000000000000000000000000000000B4 -:10EC60000091C1200091000500000000000000009C +:10EC600000000000000000000000000000000000A4 :10EC70000000000000000000000000000000000094 -:10EC800000000000900000000000000010000000E4 -:10EC900090902090900801C000000000000000004B +:10EC80000000000000000000000000000000000084 +:10EC90000000000000000000000000000000000074 :10ECA0000000000000000000000000000000000064 -:10ECB00000080008001100030083008202838080A6 +:10ECB0000000000000000000000000000000000054 :10ECC0000000000000000000000000000000000044 :10ECD0000000000000000000000000000000000034 -:10ECE0000000001088854121098300000000000019 +:10ECE0000000000000000000000000000000000024 :10ECF0000000000000000000000000000000000014 -:10ED00000000000000000000000000000000800083 -:10ED10000000800080008000030000000000000070 -:10ED200000000000008000800000000000000000E3 -:10ED300000000000001000000000A110029083807D -:10ED40008300000000000000000000000000000040 +:10ED00000000000000000000000000000000000003 +:10ED100000000000000000000000000000000000F3 +:10ED200000000000000000000000000000000000E3 +:10ED300000000000000000000000000000000000D3 +:10ED400000000000000000000000000000000000C3 :10ED500000000000000000000000000000000000B3 -:10ED60000000000021088308101088000000000047 +:10ED600000000000000000000000000000000000A3 :10ED70000000000000000000000000000000000093 -:10ED80000000000000800000000000030000000000 -:10ED900080000000000300C00000800000000000B0 -:10EDA000000000000000001000080000000000004B -:10EDB000000000008800880088000000A100020216 -:10EDC00003C0080000000000000000000000000078 +:10ED80000000000000000000000000000000000083 +:10ED90000000000000000000000000000000000073 +:10EDA0000000000000000000000000000000000063 +:10EDB0000000000000000000000000000000000053 +:10EDC0000000000000000000000000000000000043 :10EDD0000000000000000000000000000000000033 -:10EDE0000000000000009188029109918500000058 +:10EDE0000000000000000000000000000000000023 :10EDF0000000000000000000000000000000000013 -:10EE000000000000000000400000000000002000A2 -:10EE100020000200200090000840080802000000C6 -:10EE200000000000000000000000070000000000DB -:10EE30000000000000000000000000000000008151 -:10EE400000004300884100000000000000000000B6 +:10EE00000000000000000000000000000000000002 +:10EE100000000000000000000000000000000000F2 +:10EE200000000000000000000000000000000000E2 +:10EE300000000000000000000000000000000000D2 +:10EE400000000000000000000000000000000000C2 :10EE500000000000000000000000000000000000B2 -:10EE60000000000000000000004200C843008800CD +:10EE600000000000000000000000000000000000A2 :10EE70000000000000000000000000000000000092 -:10EE80000000000000000000410000C80000000079 -:10EE90000021000043000000008200C84300410040 +:10EE80000000000000000000000000000000000082 +:10EE90000000000000000000000000000000000072 :10EEA0000000000000000000000000000000000062 -:10EEB0000000000000000000F6F00000000000006C -:10EEC0003C3C20003C10101000000000000000003E +:10EEB0000000000000000000000000000000000052 +:10EEC0000000000000000000000000000000000042 :10EED0000000000000000000000000000000000032 -:10EEE000000000000000000000000BC33CB7000061 -:10EEF0000981000000000000000000000000000088 +:10EEE0000000000000000000000000000000000022 +:10EEF0000000000000000000000000000000000012 :10EF00000000000000000000000000000000000001 -:10EF100000009002910200000000FF6F663FFEFFBC -:10EF200032F30000000000000000000000000000BC -:10EF300000000000000000000000F6F000000000EB +:10EF100000000000000000000000000000000000F1 +:10EF200000000000000000000000000000000000E1 +:10EF300000000000000000000000000000000000D1 :10EF400000000000000000000000000000000000C1 :10EF500000000000000000000000000000000000B1 -:10EF6000000000000000000000000000FD7C3CD319 -:10EF70009999120600000000000000000000000047 +:10EF600000000000000000000000000000000000A1 +:10EF70000000000000000000000000000000000091 :10EF80000000000000000000000000000000000081 -:10EF90000000000000820182000000000060663076 -:10EFA000CE0C020000000000000000000000000085 +:10EF90000000000000000000000000000000000071 +:10EFA0000000000000000000000000000000000061 :10EFB0000000000000000000000000000000000051 :10EFC0000000000000000000000000000000000041 :10EFD0000000000000000000000000000000000031 @@ -200498,494 +204595,494 @@ :10F000000000000000000000000000000000000000 :10F0100000000000000000000000000000000000F0 :10F0200000000000000000000000000000000000E0 -:10F0300000009030FFFF0000000000000000000012 -:10F0400000000000000038383838F9FFB9FF000030 +:10F0300000000000000000000000000000000000D0 +:10F0400000000000000000000000000000000000C0 :10F0500000000000000000000000000000000000B0 :10F0600000000000000000000000000000000000A0 -:10F07000FFFF000000000000000000000000000092 +:10F070000000000000000000000000000000000090 :10F080000000000000000000000000000000000080 :10F090000000000000000000000000000000000070 -:10F0A000C0CFCFFF3C0F0F66000000000000000043 -:10F0B0000000000000006FCF000000000000000012 -:10F0C0000000000000000000387E38FF00FF00FF55 +:10F0A0000000000000000000000000000000000060 +:10F0B0000000000000000000000000000000000050 +:10F0C0000000000000000000000000000000000040 :10F0D0000000000000000000000000000000000030 :10F0E0000000000000000000000000000000000020 -:10F0F0000000FFFF000000009999000000000000E0 +:10F0F0000000000000000000000000000000000010 :10F1000000000000000000000000000000000000FF :10F1100000000000000000000000000000000000EF -:10F12000000000000F30660F66660000000000005F +:10F1200000000000000000000000000000000000DF :10F1300000000000000000000000000000000000CF -:10F14000000080610006000D000000610036000D27 +:10F1400000000000000000000000000000000000BF :10F1500000000000000000000000000000000000AF -:10F16000000000000000000000000000000000009F -:10F170000000000000610037000D000000000000EA -:10F18000000000000000000000000000000000007F -:10F190000000000000610006C00500000000003013 -:10F1A0000000000000610037000D000000000000BA +:10F16000000000000000000000001000000000008F +:10F17000000000000000000000000000000000008F +:10F18000000000000000000000002000000000005F +:10F19000000000000000000000000000000000006F +:10F1A000000000000000000000000000000000005F :10F1B000000000000000000000000000000000004F -:10F1C000000000000000000040AAE0FF3C3CFEFC04 -:10F1D000080808080000000000000000000000000F -:10F1E000000000000000000000000000000000001F -:10F1F0000000000000000004000EFFF0FFF000001F +:10F1C000000000000000000000001000000000002F +:10F1D000000000000000000000000000000000002F +:10F1E00000000000000000000000000000004000DF +:10F1F000000000000000000000000000000000000F :10F2000000000000000000000000000000000000FE :10F2100000000000000000000000000000000000EE :10F2200000000000000000000000000000000000DE :10F2300000000000000000000000000000000000CE -:10F240000000000000000000000000AA00AA30300A -:10F25000F2F000300030000000000000000000006C +:10F2400000000000000000000000000000000000BE +:10F2500000000000000000000000000000000000AE :10F26000000000000000000000000000000000009E -:10F2700000000000000000000F040F0EFFF04F40E0 +:10F27000000000000000000000000000000000008E :10F28000000000000000000000000000000000007E :10F29000000000000000000000000000000000006E :10F2A000000000000000000000000000000000005E :10F2B000000000000000000000000000000000004E :10F2C000000000000000000000000000000000003E -:10F2D000F000F0000000000000000000000000004E +:10F2D000000000000000000000000000000000002E :10F2E000000000000000000000000000000000001E -:10F2F00000000000000000000000EBAA555500FCD3 -:10F3000000FF0000000000000000000000000000FE -:10F310000000000000000000000000000000484F56 -:10F32000A500000000000000000000000000000038 +:10F2F000000000000000000000000000000000000E +:10F3000000000000000000000000000000000000FD +:10F3100000000000000000000000000000000000ED +:10F3200000000000000000000000000000000000DD :10F3300000000000000000000000000000000000CD :10F3400000000000000000000000000000000000BD :10F3500000000000000000000000000000000000AD :10F36000000000000000000000000000000000009D -:10F3700000000000000000000000000000005555E3 -:10F3800000FF00FF0000000000000000000000007F +:10F37000000000000000000000000000000000008D +:10F38000000000000000000000000000000000007D :10F39000000000000000000000000000000000006D -:10F3A000500F0300000000000000000000000000FB -:10F3B0000000000000002000000020000800000005 -:10F3C0000000000000000005000000000000000038 -:10F3D0000085080084002000C0802000000000009C +:10F3A000000000000000000000000000000000005D +:10F3B000000000000000000000000000000000004D +:10F3C000000000000000000000000000000000003D +:10F3D000000000000000000000000000000000002D :10F3E000000000000000000000000000000000001D :10F3F000000000000000000000000000000000000D -:10F4000020800100C000000000000000000000009B +:10F4000000000000000000000000000000000000FC :10F4100000000000000000000000000000000000EC :10F4200000000000000000000000000000000000DC -:10F43000000000000000000000000000000080004C -:10F440004000000000844000008400000000000034 -:10F4500000000010800000000000001000004000CC -:10F4600000400000000040000000000000004000DC +:10F4300000000000000000000000000000000000CC +:10F4400000000000000000000000000000000000BC +:10F4500000000000000000000000000000000000AC +:10F46000000000000000000000000000000000009C :10F47000000000000000000000000000000000008C -:10F4800000C08004200200004000000000000000D6 +:10F48000000000000000000000000000000000007C :10F49000000000000000000000000000000000006C -:10F4A0000000090000000000400000000000000013 -:10F4B000000000000002000000000000000000004A -:10F4C000000001000010000000000000000000002B -:10F4D0000000000000000009000000000080001093 -:10F4E00000000000000008200000000000000000F4 -:10F4F0000000000000000000000300000000000009 -:10F500000000000000800080000082000000000079 -:10F5100008000000000000000000000000000000E3 -:10F52000000000800000020000000200000008004F -:10F530000800000002000000008000000000000041 -:10F5400000000000080000010000000000000000B2 -:10F550000000000000000000000000040000001097 -:10F560000001000000000088000100000000000011 -:10F5700000000000000000840008000000000004FB -:10F58000000000000008410400040000000000002A -:10F590000000000000000000000000080000000063 -:10F5A000000000000010000000000000000000004B -:10F5B00000000000000041004100000200000000C7 -:10F5C0000008000000118800000008009000000002 -:10F5D0000000000000000009000000020000000818 -:10F5E000000000000008000000080000000000000B -:10F5F00000000000000000210000000000000000EA -:10F6000000000800000000000020002100000000B1 -:10F6100000000000000000000000002100000000C9 -:10F6200000000000000000000000002100000000B9 -:10F630000000000000000000000040820000000008 -:10F640000000000800000000000000008000000230 -:10F6500000A0000000000900000000000000000001 -:10F660000084050000000088000800000000000081 -:10F67000000000000000000000A000A0000000004A -:10F680000800000008000000000000010000000069 +:10F4A000000000000000000000000000000000005C +:10F4B000000000000000000000000000000000004C +:10F4C000000000000000000000000000000000003C +:10F4D000000000000000000000000000000000002C +:10F4E000000000000000000000000000000000001C +:10F4F000000000000000000000000000000000000C +:10F5000000000000000000000000000000000000FB +:10F5100000000000000000000000000000000000EB +:10F5200000000000000000000000000000000000DB +:10F5300000000000000000000000000000000000CB +:10F5400000000000000000000000000000000000BB +:10F5500000000000000000000000000000000000AB +:10F56000000000000000000000000000000000009B +:10F57000000000000000000000000000000000008B +:10F58000000000000000000000000000000000007B +:10F59000000000000000000000000000000000006B +:10F5A000000000000000000000000000000000005B +:10F5B000000000000000000000000000000000004B +:10F5C000000000000000000000000000000000003B +:10F5D000000000000000000000000000000000002B +:10F5E000000000000000000000000000000000001B +:10F5F000000000000000000000000000000000000B +:10F6000000000000000000000000000000000000FA +:10F6100000000000000000000000000000001000DA +:10F6200000000000000000000000000000000000DA +:10F6300000000000000000000000000000000000CA +:10F6400000000000000000000000000000000000BA +:10F6500000000000000000000000000000000000AA +:10F66000000000000000000000000000000000009A +:10F67000000000000000000000000000000000008A +:10F68000000000000000000000000000000000007A :10F69000000000000000000000000000000000006A -:10F6A0000000000000000000000005000500000050 -:10F6B0004100000000000200000000008003000084 +:10F6A000000000000000000000000000000000005A +:10F6B000000000000000000000000000000000004A :10F6C000000000000000000000000000000000003A -:10F6D00000000000000000000000000000000040EA -:10F6E00000000000000000000800000000410000D1 -:10F6F0000000000000000000820000000000000088 -:10F7000000000041000000000000000004000100B3 -:10F710000000000000000000000000008200000067 +:10F6D000000000000000000000000000000000002A +:10F6E000000000000000000000000000000000001A +:10F6F000000000000000000000000000000000000A +:10F7000000000000000000000000000000000000F9 +:10F7100000000000000000000000000000000000E9 :10F7200000000000000000000000000000000000D9 :10F7300000000000000000000000000000000000C9 :10F7400000000000000000000000000000000000B9 -:10F7500000000000000000000000000000000008A1 -:10F760000001090000840082000000000000000881 +:10F7500000000000000000000000000000000000A9 +:10F760000000000000000000000000000000000099 :10F770000000000000000000000000000000000089 -:10F780000000000011000000000000000000C100A7 -:10F790002000110000000000000000000000000038 -:10F7A00000A00000000000000000000000000000B9 +:10F780000000000000000000000000000000000079 +:10F790000000000000000000000000000000000069 +:10F7A0000000000000000000000000000000000059 :10F7B0000000000000000000000000000000000049 -:10F7C00000004100000000000000000000000000F8 -:10F7D00000000000000000210000001100000000F7 -:10F7E0000008000200000091401000000000042109 +:10F7C0000000000000000000000000000000000039 +:10F7D0000000000000000000000000000000000029 +:10F7E0000000000000000000000000000000000019 :10F7F0000000000000000000000000000000000009 -:10F800000000080000000800080008000800008050 -:10F810002180010000000000000000000000000046 +:10F8000000000000000000000000000000000000F8 +:10F8100000000000000000000000000000000000E8 :10F8200000000000000000000000000000000000D8 -:10F83000080000000000C000000000000000000000 -:10F840000000002000800008000000000000000010 -:10F8500000000008000000000000000000000000A0 -:10F86000000200A00002000000108501000000005E -:10F870008000000000000000000000000000000008 +:10F8300000000000000000000000000000000000C8 +:10F8400000000000000000000000000000000000B8 +:10F8500000000000000000000000000000000000A8 +:10F860000000000000000000000000000000000098 +:10F870000000000000000000000000000000000088 :10F880000000000000000000000000000000000078 -:10F890002110A02020A005020000000000000000B0 +:10F890000000000000000000000000000000000068 :10F8A0000000000000000000000000000000000058 -:10F8B00000000800050208000084000000000000AD -:10F8C0000900000000030920000000000000000003 -:10F8D000000000000000000000030000000500051B -:10F8E0000000000000210008004000050011841005 -:10F8F00000000008000000000000000400000004F8 -:10F900000000000000000000000090000000C000A7 -:10F910000000000001000180000000000041000024 +:10F8B0000000000000000000000000000000000048 +:10F8C0000000000000000000000000000000000038 +:10F8D0000000000000000000000000000000000028 +:10F8E0000000000000000000000000000000000018 +:10F8F0000000000000000000000000000000000008 +:10F9000000000000000000000000000000000000F7 +:10F9100000000000000000000000000000000000E7 :10F9200000000000000000000000000000000000D7 :10F9300000000000000000000000000000000000C7 -:10F9400000000011010001800080000000000000A4 +:10F9400000000000000000000000000000000000B7 :10F9500000000000000000000000000000000000A7 -:10F9600000000000000000820000090100840990EE -:10F970000001000000000000000000000000000086 +:10F960000000000000000000000000000000000097 +:10F970000000000000000000000000000000000087 :10F980000000000000000000000000000000000077 -:10F990000000000000002088200411004100050044 +:10F990000000000000000000000000000000000067 :10F9A0000000000000000000000000000000000057 -:10F9B00000000000000008000000000041000000FE -:10F9C000000000000000040004020020000000000D -:10F9D0000000000000080002001090080000000075 -:10F9E000000000001000000800A0101000A000821D -:10F9F000008800900091000900910491000000002F +:10F9B0000000000000000000000000000000000047 +:10F9C0000000000000000000000000000000000037 +:10F9D0000000000000000000000000000000000027 +:10F9E0000000000000000000000000000000000017 +:10F9F0000000000000000000000000000000000007 :10FA000000000000000000000000000000000000F6 -:10FA100000000000000040409091020282000000BF +:10FA100000000000000000000000000000000000E6 :10FA200000000000000000000000000000000000D6 :10FA300000000000000000000000000000000000C6 -:10FA400000000000000001909188201082900000CA -:10FA500000000000000000800000000000800000A6 -:10FA60000000000000008000008000800080008016 -:10FA7000008000000000001004830010001000004F +:10FA400000000000000000000000000000000000B6 +:10FA500000000000000000000000000000000000A6 +:10FA60000000000000000000000000000000000096 +:10FA70000000000000000000000000000000000086 :10FA80000000000000000000000000000000000076 -:10FA900000000000000000008090A0838002802011 +:10FA90000000000000000000000000000000000066 :10FAA0000000000000000000000000000000000056 :10FAB0000000000000000000000000000000000046 -:10FAC0000000000000000000100090000000800016 -:10FAD0000000000000000000000000108080000016 -:10FAE0000000000000000000800000808000800016 -:10FAF0001000080088002000108083001000902073 +:10FAC0000000000000000000000000000000000036 +:10FAD0000000000000000000000000000000000026 +:10FAE0000000000000000000000000000000000016 +:10FAF0000000000000000000000000000000000006 :10FB000000000000000000000000000000000000F5 -:10FB100000000000000000000000858088200591A2 -:10FB20002140000000000000000000000000000074 -:10FB30000000000000000000000000000040008005 -:10FB4000000000000000000000009000000088009D -:10FB50001000000000000000000000009000A0085D -:10FB600000000000000000000000080002C0A0002B -:10FB7000100001000000A00000C01190030001006F -:10FB8000092000000000000000000000000000004C -:10FB900000000000000000000000000088020300D8 -:10FBA000908383A10000000000000000000000001E +:10FB100000000000000000000000000000000000E5 +:10FB200000000000000000000000000000000000D5 +:10FB300000000000000000000000000000000000C5 +:10FB400000000000000000000000000000000000B5 +:10FB500000000000000000000000000000000000A5 +:10FB60000000000000000000000000000000000095 +:10FB70000000000000000000000000000000000085 +:10FB80000000000000000000000000000000000075 +:10FB90000000000000000000000000000000000065 +:10FBA0000000000000000000000000000000000055 :10FBB0000000000000000000000000000000000045 -:10FBC000008400020000000000000000110000009E -:10FBD00041008300000000000000000010840004C9 -:10FBE0000010A0880000000000000000409000000D -:10FBF00084001010C000000800888200C002018844 -:10FC000091A121030000000000000000000000009E -:10FC10000000000000000000000000000000C00024 -:10FC200000010103100000000000000000000000BF +:10FBC0000000000000000000000000000000000035 +:10FBD0000000000000000000000000000000000025 +:10FBE0000000000000000000000000000000000015 +:10FBF0000000000000000000000000000000000005 +:10FC000000000000000000000000000000000000F4 +:10FC100000000000000000000000000000000000E4 +:10FC200000000000000000000000000000000000D4 :10FC300000000000000000000000000000000000C4 -:10FC40000000000000000000000000000000009024 -:10FC50000088108382900000000000000000000077 -:10FC60000000008080000000000000000000800014 -:10FC7000000080000480000000800000800080837D -:10FC8000201088A111830000000000000000000087 +:10FC400000000000000000000000000000000000B4 +:10FC500000000000000000000000000000000000A4 +:10FC60000000000000000000000000000000000094 +:10FC70000000000000000000000000000000000084 +:10FC80000000000000000000000000000000000074 :10FC90000000000000000000000000000000000064 -:10FCA0008040201120852008000000000000000096 +:10FCA0000000000000000000000000000000000054 :10FCB0000000000000000000000000000000000044 :10FCC0000000000000000000000000000000000034 -:10FCD0000000002000218000000000000000000063 -:10FCE0008000800000000000000000000000000014 -:10FCF00000008000000080000000001080008000F4 -:10FD000004081091108005000000000000000000B1 +:10FCD0000000000000000000000000000000000024 +:10FCE0000000000000000000000000000000000014 +:10FCF0000000000000000000000000000000000004 +:10FD000000000000000000000000000000000000F3 :10FD100000000000000000000000000000000000E3 -:10FD20000000A1109191410040210000000000005E +:10FD200000000000000000000000000000000000D3 :10FD300000000000000000000000000000000000C3 -:10FD40000000000000000000800000000000000033 -:10FD500000000000000200000000000000000000A1 -:10FD600000001000A0A01000020000000000000031 -:10FD7000000000008288020208008200209110002A -:10FD8000A0000101014101A00000000000000000EE +:10FD400000000000000000000000000000000000B3 +:10FD500000000000000000000000000000000000A3 +:10FD60000000000000000000000000000000000093 +:10FD70000000000000000000000000000000000083 +:10FD80000000000000000000000000000000000073 :10FD90000000000000000000000000000000000063 -:10FDA0000000000003A18391022001010000000077 +:10FDA0000000000000000000000000000000000053 :10FDB0000000000000000000000000000000000043 -:10FDC0000000000020002000880002000000000069 -:10FDD000000000000000008900900000000000000A +:10FDC0000000000000000000000000000000000033 +:10FDD0000000000000000000000000000000000023 :10FDE0000000000000000000000000000000000013 -:10FDF00000000000000000000000420000000000C1 -:10FE000000000000818100C8430084000000000061 +:10FDF0000000000000000000000000000000000003 +:10FE000000000000000000000000000000000000F2 :10FE100000000000000000000000000000000000E2 -:10FE2000000000000000484200C8430081000000BC +:10FE200000000000000000000000000000000000D2 :10FE300000000000000000000000000000000000C2 :10FE400000000000000000000000000000000000B2 -:10FE5000000000000000002100004300000000003E -:10FE60000000000000008AFF8AFFFFFC3C30000019 -:10FE70000000000000000C000C000000000000006A -:10FE800000300F000F0000000000C3C0FFFC0000A6 +:10FE500000000000000000000000000000000000A2 +:10FE60000000000000000000000000000000000092 +:10FE70000000000000000000000000000000000082 +:10FE80000000000000000000000000000000000072 :10FE90000000000000000000000000000000000062 -:10FEA0000000000000000000FFFF0000AA00AA0000 +:10FEA0000000000000000000000000000000000052 :10FEB0000000000000000000000000000000000042 -:10FEC0000000000000000000D7D74DC30000000074 -:10FED0000000000000000000000000000F3F3CFF99 -:10FEE00000000000000000008AFF0AFFFC3C300018 -:10FEF00000000000000000000C000C00000028289A -:10FF0000000000300F000F000000000000C03CFCAB +:10FEC0000000000000000000000000000000000032 +:10FED0000000000000000000000000000000000022 +:10FEE0000000000000000000000000000000000012 +:10FEF0000000000000000000000000000000000002 +:10FF000000000000000000000000000000000000F1 :10FF100000000000000000000000000000000000E1 -:10FF2000000000000000000000000050FF50000032 +:10FF200000000000000000000000000000000000D1 :10FF300000000000000000000000000000000000C1 -:10FF400000000000000000000000D7D74D41000075 -:10FF50000000000000000000000000000000003071 -:10FF600000C30000000000000000828282820AAA12 -:10FF70000AAA00000000000000003C143C14FF55D9 -:10FF80000B0B0000FFFBAA00AA007F5DFFFD3535CB -:10FF900035350000000000000000000000000000F7 -:10FFA000000000000000000000000000FF00FF0053 -:10FFB0000F0F010000000000000000000000000022 +:10FF400000000000000000000000000000000000B1 +:10FF500000000000000000000000000000000000A1 +:10FF60000000000000000000000000000000000091 +:10FF70000000000000000000000000000000000081 +:10FF80000000000000000000000000000000000071 +:10FF90000000000000000000000000000000000061 +:10FFA0000000000000000000000000000000000051 +:10FFB0000000000000000000000000000000000041 :10FFC0000000000000000000000000000000000031 -:10FFD0000000000000000000000000004D0F14179A -:10FFE0003CFF3C000000000000000000C3C3C3034E -:10FFF0000AAA0AAA00000000000000004D0C4D0CE7 -:020000040031C9 -:10000000FF410B0B0000FAFAAA00AA00220002002E -:10001000F5F50505000000000000000000000000EC -:100020000000000000000000000000000000FF05CC -:10003000FF000F07000000000000000000000000AB +:10FFD0000000000000000000000000000000000021 +:10FFE0000000000000000000000000000000000011 +:10FFF0000000000000000000000000000000000001 +:020000040032C8 +:1000000000000000000000000000000000000000F0 +:1000100000000000000000000000000000000000E0 +:1000200000000000000000000000000000000000D0 +:1000300000000000000000000000000000000000C0 :1000400000000000000000000000000000000000B0 -:1000500000000000000000000000000000004D0F44 -:1000600014177D2828280000000000000000000070 +:1000500000000000000000000000000000000000A0 +:100060000000000000000000000000000000000090 :100070000000000000000000000000000000000080 -:1000800030000000000000610006001D000000615B -:100090000030C00900000000000000000000000067 +:100080000000000000000000000000000000000070 +:100090000000000000000000000000000000000060 :1000A0000000000000000000000000000000000050 -:1000B00000610034C01500000000000000000000D6 +:1000B0000000000000000000000000000000000040 :1000C0000000000000000000000000000000000030 :1000D0000000000000000000000000000000000020 -:1000E00000610036000D000000000000000000006C +:1000E0000000000000000000000000000000000010 :1000F0000000000000000000000000000000000000 :1001000000000000000000000000000000000000EF -:1001100055555555C3C0FFFC00000000000000000D +:1001100000000000000000000000000000000000DF :1001200000000000000000000000000000000000CF -:100130000000FFFFC1FF0C000C00000000000000E9 +:1001300000000000000000000000000000000000BF :1001400000000000000000000000000000000000AF :10015000000000000000000000000000000000009F -:100160000000000000000005000500000000000085 +:10016000000000000000000000000000000000008F :10017000000000000000000000000000000000007F :10018000000000000000000000000000000000006F -:100190000000F54D054100C03CFC000000000000DF +:10019000000000000000000000000000000000005F :1001A000000000000000000000000000000000004F -:1001B00000000000FFFFC1000C0C5CFC0000000010 +:1001B000000000000000000000000000000000003F :1001C000000000000000000000000000000000002F :1001D000000000000000000000000000000000001F -:1001E000000000000000000000FA00FA000000001B +:1001E000000000000000000000000000000000000F :1001F00000000000000000000000000000000000FF :1002000000000000000000000000000000000000EE -:100210003FFF3CFCFF1DFFFD0C0000000000000044 +:1002100000000000000000000000000000000000DE :1002200000000000000000000000000000000000CE -:100230000000000000000000000041417D7D000042 +:1002300000000000000000000000000000000000BE :1002400000000000000000000000000000000000AE :10025000000000000000000000000000000000009E -:1002600000000000000000000000C30000000000CB +:10026000000000000000000000000000000000008E :10027000000000000000000000000000000000007E :10028000000000000000000000000000000000006E -:1002900000003FFF3CFC001100010C0000000000CA +:10029000000000000000000000000000000000005E :1002A000000000000000000000000000000000004E -:1002B000000000000000000000000008013D013DBA +:1002B000000000000000000000000000000000003E :1002C000000000000000000000000000000000002E :1002D000000000000000000000000000000000001E -:1002E000000000000000000000000000C30000004B -:1002F0000000C0000000000000000000000000003E +:1002E000000000000000000000000000000000000E +:1002F00000000000000000000000000000000000FE :1003000000000000000000000000000000000000ED -:10031000000320000000200000000000000000009A +:1003100000000000000000000000000000000000DD :1003200000000000000000000000000000000000CD :1003300000000000000000000000000000000000BD -:1003400000000000000000820040000000000000EB -:10035000000000000000000000000000000000207D -:10036000002000800080002000200000000000002D -:100370000000000000080000000021000000000054 -:1003800000000000000000000000000000840000E9 -:10039000000000008000000080000000000000005D -:1003A000000000000000004000000000000000000D -:1003B00000000000400000000000000000000000FD -:1003C0000000000000000000000300010000000029 +:1003400000000000000000000000000000000000AD +:10035000000000000000000000000000000000009D +:10036000000000000000000000000000000000008D +:10037000000000000000000000000000000000007D +:10038000000000000000000000000000000000006D +:10039000000000000000000000000000000000005D +:1003A000000000000000000000000000000000004D +:1003B000000000000000000000000000000000003D +:1003C000000000000000000000000000000000002D :1003D000000000000000000000000000000000001D -:1003E00000010001002000200001000100000000C9 -:1003F00000000000000000000000080000000000F5 -:100400000800000000000000000000040080000957 -:1004100000890000000000809000208000000000A3 -:1004200000000000000000000000000002100000BA -:1004300000000000000300000000000000000000B9 -:10044000000000000080000002000580080000009D -:10045000020000000000000000000000000000801A -:1004600000000000000000000000A00000000000EC -:10047000000000000200000000000000000000007A -:1004800000000000000000000000008800010040A3 -:100490000000001000000000000400888004000834 -:1004A000000000000000000000000000000000103C +:1003E000000000000000000000000000000000000D +:1003F00000000000000000000000000000000000FD +:1004000000000000000000000000000000000000EC +:1004100000000000000000000000000000000000DC +:1004200000000000000000000000000000000000CC +:1004300000000000000000000000000000000000BC +:1004400000000000000000000000000000000000AC +:10045000000000000000000000000000000000009C +:10046000000000000000000000000000000000008C +:10047000000000000000000000000000000000007C +:10048000000000000000000000000000000000006C +:10049000000000000000000000000000000000005C +:1004A000000000000000000000000000000000004C :1004B000000000000000000000000000000000003C -:1004C0000008000000C000020000004040100000D2 -:1004D00000400000000000000000000000000000DC -:1004E00000200010000000000000000000000000DC -:1004F00000000000000003000000000800020000EF +:1004C000000000000000000000000000000000002C +:1004D000000000000000000000000000000000001C +:1004E000000000000000000000000000000000000C +:1004F00000000000000000000000000000000000FC :1005000000000000000000000000000000000000EB -:10051000000000000900000000002080C0002089C9 -:1005200000000009000000000000000000080000BA -:10053000002100000000001000000000000000008A -:1005400000000010A1000000A0000000000000005A -:10055000008000000000000000000000000000001B +:1005100000000000000000000000000000000000DB +:1005200000000000000000000000000000000000CB +:1005300000000000000000000000000000000000BB +:1005400000000000000000000000000000000000AB +:10055000000000000000000000000000000000009B :10056000000000000000000000000000000000008B -:1005700000000008000820089008000000000000AB -:10058000000000000000000000000010001000C08B -:10059000000000080000880005000000800400C082 -:1005A000830400000000000000A0000000840000A0 -:1005B0000000000000000000000000000000080033 -:1005C00000000800000020000000001000000000F3 -:1005D0000000000200000000000000000000030016 -:1005E0000300000000000000000000000000030005 -:1005F00003A00000000100010001000100800100D3 -:1006000000000000000000000000000008000000E2 -:1006100000002000000000008500840000000004AD +:10057000000000000000000000000000000000007B +:10058000000000000000000000000000000000006B +:10059000000000000000000000000000000000005B +:1005A000000000000000000000000000000000004B +:1005B000000000000000000000000000000000003B +:1005C000000000000000000000000000000000002B +:1005D000000000000000000000000000000000001B +:1005E000000000000000000000000000000000000B +:1005F00000000000000000000000000000000000FB +:1006000000000000000000000000000000000000EA +:1006100000000000000000000000000000000000DA :1006200000000000000000000000000000000000CA :1006300000000000000000000000000000000000BA -:10064000000000000000900000000000000000001A -:10065000C000400000000000A000000000000000FA -:1006600082008200000090800080008000000080F6 -:1006700000800080008000000000000000000002F8 -:10068000200000000000000000000000000000004A -:100690000000000080A00000000008000000000032 -:1006A0000001000000000000000000000000000049 -:1006B000000800000000000800000000000000002A -:1006C00000000000000000000000000041000000E9 -:1006D0000000000200000000030000000000000015 -:1006E00000000000000000000020002000200000AA -:1006F000002000200020002000000000000000007A -:1007000000002000000000000000000000000000C9 -:1007100084000000000020000000000000800800AD -:100720000000010000008280002100000020008005 +:1006400000000000000000000000000000000000AA +:10065000000000000000000000000000000000009A +:10066000000000000000000000000000000000008A +:10067000000000000000000000000000000000007A +:10068000000000000000000000000000000000006A +:10069000000000000000000000000000000000005A +:1006A000000000000000000000000000000000004A +:1006B000000000000000000000000000000000003A +:1006C000000000000000000000000000000000002A +:1006D000000000000000000000000000000000001A +:1006E000000000000000000000000000000000000A +:1006F00000000000000000000000000000000000FA +:1007000000000000000000000000000000000000E9 +:1007100000000000000000000000000000000000D9 +:1007200000000000000000000000000000000000C9 :1007300000000000000000000000000000000000B9 -:100740000000000000000000080001000000C000E0 -:100750000000000000000002000000000000000097 +:1007400000000000000000000000000000000000A9 +:100750000000000000000000000000000000000099 :100760000000000000000000000000000000000089 :100770000000000000000000000000000000000079 -:100780000000000080000000000040080000210080 -:1007900000000000000000008000000000000010C9 -:1007A00090000000200041000304000005880309B8 -:1007B0000320000000000000000000000000000016 -:1007C00000000000000000000000000040002108C0 -:1007D0000000000000000000000100000000000018 +:100780000000000000000000000000000000000069 +:100790000000000000000000000000000000000059 +:1007A0000000000000000000000000000000000049 +:1007B0000000000000000000000000000000000039 +:1007C0000000000000000000000000000000000029 +:1007D0000000000000000000000000000000000019 :1007E0000000000000000000000000000000000009 -:1007F0000000008400000000000000000300000072 -:10080000208820000180000802080000000000008D -:100810000000000000000000000000002000002197 -:1008200000000000000008800000820000020000BC -:1008300000000008000000000000000000000010A0 -:100840000000000000000000080000000800000098 -:10085000A0008800000000004000004100000000EF -:100860000000000000000000000000000000010087 -:1008700082800080010001000080008001080004E7 -:100880000004000400044002000800080008000002 -:100890000000000000000000000000000000000850 -:1008A00000000000000000042004009009880000FF +:1007F00000000000000000000000000000000000F9 +:1008000000000000000000000000000000000000E8 +:1008100000000000000000000000000000000000D8 +:1008200000000000000000000000000000000000C8 +:1008300000000000000000000000000000000000B8 +:1008400000000000000000000000000000000000A8 +:100850000000000000000000000000000000000098 +:100860000000000000000000000000000000000088 +:100870000000000000000000000000000000000078 +:100880000000000000000000000000000000000068 +:100890000000000000000000000000000000000058 +:1008A0000000000000000000000000000000000048 :1008B0000000000000000000000000000000000038 :1008C0000000000000000000000000000000000028 -:1008D0000000000000000000110080004000000047 +:1008D0000000000000000000000000000000000018 :1008E0000000000000000000000000000000000008 -:1008F0000400002000200400040000200020040068 -:1009000000010001000109010000000000000000DA -:1009100000000000000000000000000020000000B7 -:10092000000000000000020040000101C000A00122 -:10093000C0000000000040000000000000000000B7 +:1008F00000000000000000000000000000000000F8 +:1009000000000000000000000000000000000000E7 +:1009100000000000000000000000000000000000D7 +:1009200000000000000000000000000000000000C7 +:1009300000000000000000000000000000000000B7 :1009400000000000000000000000000000000000A7 -:10095000000000010500A000000140110004008219 -:1009600082A0000000000000000000000000000065 -:10097000000003A0002000000002000000080000AA -:10098000A0880000000089000000000300030003AD +:100950000000000000000000000000000000000097 +:100960000000000000000000000000000000000087 +:100970000000000000000000000000000000000077 +:100980000000000000000000000000000000000067 :100990000000000000000000000000000000000057 -:1009A00000000000000000008000C0050304800477 -:1009B0000020800000000000000000000000000097 +:1009A0000000000000000000000000000000000047 +:1009B0000000000000000000000000000000000037 :1009C0000000000000000000000000000000000027 -:1009D000000000000002A005000300409188008094 -:1009E00000100000000000000000000000000000F7 -:1009F0000000000020000000000000000000008057 -:100A000000000000000000000500001100000000D0 -:100A100000000008000000000000000000000000CE -:100A20000000000000000000800000004080210065 -:100A3000110304408000000000008000000000005E +:1009D0000000000000000000000000000000000017 +:1009E0000000000000000000000000000000000007 +:1009F00000000000000000000000000000000000F7 +:100A000000000000000000000000000000000000E6 +:100A100000000000000000000000000000000000D6 +:100A200000000000000000000000000000000000C6 +:100A300000000000000000000000000000000000B6 :100A400000000000000000000000000000000000A6 -:100A50000000000000002000050009004003000025 -:100A60000085058502210000000000000000000054 -:100A70000000000000000000002100000000000055 -:100A800000000000800000042000000400800090AE -:100A90000000000000010000000000000000000055 -:100AA00000000000000000000000A000000001881D -:100AB0000000000000C11000200040000400000001 +:100A50000000000000000000000000000000000096 +:100A60000000000000000000000000000000000086 +:100A70000000000000000000000000000000000076 +:100A80000000000000000000000000000000000066 +:100A90000000000000000000000000000000000056 +:100AA0000000000000000000000000000000000046 +:100AB0000000000000000000000000000000000036 :100AC0000000000000000000000000000000000026 -:100AD000000000000000000001A000000000010173 -:100AE000A0A088C00040010100000000000000003C -:100AF0000000000000000000A00000000000000056 -:100B0000000000000000080000A10100000100A09A -:100B100000000000100000000000000000000000C5 -:100B20000000000000010101000000020020002080 -:100B3000008400A11105019000840004004000829F +:100AD0000000000000000000000000000000000016 +:100AE0000000000000000000000000000000000006 +:100AF00000000000000000000000000000000000F6 +:100B000000000000000000000000000000000000E5 +:100B100000000000000000000000000000000000D5 +:100B200000000000000000000000000000000000C5 +:100B300000000000000000000000000000000000B5 :100B400000000000000000000000000000000000A5 -:100B50000000000000000000000000000100A101F2 -:100B6000000102400082820583A000000000000016 -:100B70000000000000000000000000A000000020B5 -:100B80000000000000000208A090000184000000A6 -:100B90000101000000000000000000000000000053 -:100BA000000000200000000511100000008000007F -:100BB000000000000008052111890000008000806D -:100BC00000800000000000000000000000000000A5 -:100BD00000000000000000000000000000411105BE -:100BE000C0400003808300050021A18000000000B8 +:100B50000000000000000000000000000000000095 +:100B60000000000000000000000000000000000085 +:100B70000000000000000000000000000000000075 +:100B80000000000000000000000000000000000065 +:100B90000000000000000000000000000000000055 +:100BA0000000000000000000000000000000000045 +:100BB0000000000000000000000000000000000035 +:100BC0000000000000000000000000000000000025 +:100BD0000000000000000000000000000000000015 +:100BE0000000000000000000000000000000000005 :100BF00000000000000000000000000000000000F5 -:100C00000000000000000000008000000040001014 -:100C1000001004410821080041000300000000000A +:100C000000000000000000000000000000000000E4 +:100C100000000000000000000000000000000000D4 :100C200000000000000000000000000000000000C4 -:100C3000000000002180110002001140002000404F +:100C300000000000000000000000000000000000B4 :100C400000000000000000000000000000000000A4 -:100C500000000000000000000000000000002080F4 -:100C6000031103001141A1004102040040000000F3 -:100C70000000000000000000000000000000004034 -:100C800000210000000080000005000000000000BE -:100C90000000000000000101010000000000000051 +:100C50000000000000000000000000000000000094 +:100C60000000000000000000000000000000000084 +:100C70000000000000000000000000000000000074 +:100C80000000000000000000000000000000000064 +:100C90000000000000000000000000000000000054 :100CA0000000000000000000000000000000000044 -:100CB0000004000000000108010000000101000024 -:100CC0000084004000000000000000000000000060 +:100CB0000000000000000000000000000000000034 +:100CC0000000000000000000000000000000000024 :100CD0000000000000000000000000000000000014 -:100CE00001C00001010000010300821182004000E8 +:100CE0000000000000000000000000000000000004 :100CF00000000000000000000000000000000000F4 -:100D000090000002022000000800008820A040009F -:100D10000000000000000000840000C80000000087 -:100D20000000000000000000480000C800000000B3 -:100D30000000000000000000840000C80000002146 -:100D4000008200004300600000000000000000007E +:100D000000000000000000000000000000000000E3 +:100D100000000000000000000000000000000000D3 +:100D200000000000000000000000000000000000C3 +:100D300000000000000000000000000000000000B3 +:100D400000000000000000000000000000000000A3 :100D50000000000000000000000000000000000093 -:100D60000000410000C80000500600000000000024 -:100D700084000000000000000000000000000000EF -:100D8000000000820000430000000021000043003A -:100D90000000410000C8000000000000000000004A +:100D60000000000000000000000000000000000083 +:100D70000000000000000000000000000000000073 +:100D80000000000000000000000000000000000063 +:100D90000000000000000000000000000000000053 :100DA0000000000000000000000000000000000043 -:100DB0000000000000000000000000000000F6F04D -:100DC000F0F000000000F06060780000000000001B +:100DB0000000000000000000000000000000000033 +:100DC0000000000000000000000000000000000023 :100DD0000000000000000000000000000000000013 :100DE0000000000000000000000000000000000003 -:100DF000A5A5E7E7000000000000000000000000DB -:100E000000000000FFFF00007E427E42F3F330301E -:100E1000FFFF0000000000000000000000000000D4 +:100DF00000000000000000000000000000000000F3 +:100E000000000000000000000000000000000000E2 +:100E100000000000000000000000000000000000D2 :100E200000000000000000000000000000000000C2 -:100E300000000000000000000000000F00000000A3 -:100E4000FEF0F0F000000000F0F060F000000000A4 +:100E300000000000000000000000000000000000B2 +:100E400000000000000000000000000000000000A2 :100E50000000000000000000000000000000000092 :100E60000000000000000000000000000000000082 -:100E70000200DFC7DFC70000000000000000000024 -:100E8000000000000000F0F0F0F07E427E42F3F33C -:100E90003030FF00FF0000000000000000000000F4 +:100E70000000000000000000000000000000000072 +:100E80000000000000000000000000000000000062 +:100E90000000000000000000000000000000000052 :100EA0000000000000000000000000000000000042 :100EB0000000000000000000000000000000000032 :100EC0000000000000000000000000000000000022 @@ -200995,305 +205092,305 @@ :100F000000000000000000000000000000000000E1 :100F100000000000000000000000000000000000D1 :100F200000000000000000000000000000000000C1 -:100F300000000000000000000000000000660066E5 -:100F4000000000000000000000000000066C3C3CB7 +:100F300000000000000000000000000000000000B1 +:100F400000000000000000000000000000000000A1 :100F50000000000000000000000000000000000091 :100F60000000000000000000000000000000000081 -:100F70000000000030002C2C2C2C00000000000091 -:100F8000000000000000000000003C3C00FF7E7EEE -:100F90007E7E24BD24BD66666666000000000000FB +:100F70000000000000000000000000000000000071 +:100F80000000000000000000000000000000000061 +:100F90000000000000000000000000000000000051 :100FA0000000000000000000000000000000000041 -:100FB00000000000000000000000000000000066CB -:100FC0000066000000000000000000000000363C49 -:100FD0003C3C000000000000000000000000000099 +:100FB0000000000000000000000000000000000031 +:100FC0000000000000000000000000000000000021 +:100FD0000000000000000000000000000000000011 :100FE0000000000000000000000000000000000001 -:100FF00000000000000040002C2C2C2C0000000001 -:101000000000000000000000000000003C3C00FF69 -:101010004242424224BD24BD0000FFFF0000000008 -:101020000000000000610004C00D0000000000008E -:101030000000000000610006C00900000000000080 -:101040000010000000610004C01900000000003022 +:100FF00000000000000000000000000000000000F1 +:1010000000000000000000000000000000000000E0 +:1010100000000000000000000000000000000000D0 +:1010200000000000000000000000000000000000C0 +:1010300000000000000000000000000000000000B0 +:1010400000000000000000000000000000000000A0 :101050000000000000000000000000000000000090 -:10106000000000000000000000000000000000611F -:101070000004C00D000000613006000D00000000FB +:101060000000000000000000000000000000000080 +:101070000000000000000000000000000000000070 :101080000000000000000000000000000000000060 -:1010900000380000000000000038000000000000E0 -:1010A0000007C00C00003C3C3C3C0000000000007D -:1010B000000000000000000000000055285500005E -:1010C000000000000000FF30AA30AAFF0A0F000055 -:1010D0000000000000000000000000000000000010 +:101090000000000000000000000000000000000050 +:1010A0000000000000000000000000000000000040 +:1010B0000000000000000000000000000000000030 +:1010C0000000000000000000000000000000000020 +:1010D00000000000000000004000000000000000D0 :1010E0000000000000000000000000000000000000 -:1010F000030B030F3C3C3C3C03140300000C000CAE +:1010F00000000000000000004000000000000000B0 :1011000000000000000000000000000000000000DF -:1011100000000000000000000000000000000000CF -:10112000000055553C3C00A03C3C3E28000000001F -:1011300000000000000000000000000000552855DD -:101140000000000000000000FF00AA00AAAA0A0A8E +:1011100000000000000200000000000000000000CD +:1011200000000000000000000000000000000000BF +:1011300000000000000000000000000000000000AF +:10114000000000000000000000000000000000009F :10115000000000000000000000000000000000008F :10116000000000000000000000000000000000007F -:1011700000001F0F0F0F0020002800000000000CCF -:10118000000C000000000000000000000000000053 +:10117000000000000000000000000000000000006F +:10118000000000000000000000000000000000005F :10119000000000000000000000000000000000004F -:1011A0000000000055553C3C00A00F00000000006E +:1011A000000000000000000000000000000000003F :1011B000000000000000000000000000000000002F -:1011C00000000000000000000000C3C0C3C0000019 -:1011D0000F0F0000000000000000000000000000F1 +:1011C000000000000000000000000000000000001F +:1011D000000000000000000000000000000000000F :1011E00000000000000000000000000000000000FF -:1011F000000000003F3D000028EBE8E80000F0F0B0 -:10120000000000FF000000000000000000000000DF +:1011F00000000000000000000000000000000000EF +:1012000000000000000000000000000000000000DE :1012100000000000000000000000000000000000CE -:101220000000000000003C3CF0F000000F00000057 +:1012200000000000000000000000000000000000BE :1012300000000000000000000000000000000000AE -:10124000000000000000000000000000FFFFC3C31A -:1012500000140F0F0000000000000000000000005C +:10124000000000000000000000000000000000009E +:10125000000000000000000000000000000000008E :10126000000000000000000000000000000000007E -:101270000000000000003C3C0000EBE3E8E8000058 -:10128000F0F0000000FF000000000000000000007F +:10127000000000000000000000000000000000006E +:10128000000000000000000000000000000000005E :10129000000000000000000000000000000000004E -:1012A00000000000000000003C3CF0F000000000E6 -:1012B000200000000000000000000000000000000E -:1012C00000000000000000000400000000004000DA -:1012D0000000000000000000000000000000000905 -:1012E00000000000000000000000000000000001FD +:1012A000000000000000000000000000000000003E +:1012B000000000000000000000000000000000002E +:1012C000000000000000000000000000000000001E +:1012D000000000000000000000000000000000000E +:1012E00000000000000000000000000000000000FE :1012F00000000000000000000000000000000000EE -:10130000880000050000000000000400000000004C +:1013000000000000000000000000000000000000DD :1013100000000000000000000000000000000000CD -:101320000000000000000000000020000400000099 -:10133000100080000000000000000000000200001B -:10134000000000000000000040000000400200001B -:10135000100000000000000040000000000000003D +:1013200000000000000000000000000000000000BD +:1013300000000000000000000000000000000000AD +:10134000000000000000000000000000000000009D +:10135000000000000000000000000000000000008D :10136000000000000000000000000000000000007D -:10137000000020000000000000000000000000004D +:10137000000000000000000000000000000000006D :10138000000000000000000000000000000000005D -:10139000000010000000000000000000000000003D -:1013A00000000000000000000000000000008002BB -:1013B00000000000000000000000000004042020E5 -:1013C00020200000000000000020000000000000BD -:1013D00000200000000000000020040004000008BD +:10139000000000000000000000000000000000004D +:1013A000000000000000000000000000000000003D +:1013B000000000000000000000000000000000002D +:1013C000000000000000000000000000000000001D +:1013D000000000000000000000000000000000000D :1013E00000000000000000000000000000000000FD -:1013F000000000030000000000000000008000006A +:1013F00000000000000000000000000000000000ED :1014000000000000000000000000000000000000DC :1014100000000000000000000000000000000000CC -:1014200000000000000002000000000000000000BA -:1014300000000000000000820000000000008001A9 -:101440008001800100000000000000010000000099 -:101450000000000100000000000000018008800082 -:10146000000800000000000800000000000000006C -:101470000000000000000008000000000200002042 -:101480000000000800400040004000000000000094 -:10149000000000000000000800000008000000003C -:1014A00000000084000000000000000000000000B8 -:1014B0000000000000000009000900800004000096 -:1014C00000000000002100000000000000000021DA -:1014D0000000000000100021080082050000000547 -:1014E00000000000000800410000000000000000B3 -:1014F00000000000000500000000000000080000DF -:10150000000000000000000040000000000000009B -:1015100000000000000000000041014101410120E5 -:101520000041000200410000000000000005000230 -:1015300000000000004100000000008800040001DD -:10154000410000004108000000000000030003000B -:101550000000000000000000000008000000000083 -:1015600000840000000800000000000000000000EF +:1014200000000000000000000000000000000000BC +:1014300000000000000000000000000000000000AC +:10144000000000000000000000000000000000009C +:10145000000000000000000000000000000000008C +:10146000000000000000000000000000000000007C +:10147000000000000000000000000000000000006C +:10148000000000000000000000000000000000005C +:10149000000000000000000000000000000000004C +:1014A000000000000000000000000000000000003C +:1014B000000000000000000000000000000000002C +:1014C000000000000000000000000000000000001C +:1014D000000000000000000000000000000000000C +:1014E00000000000000000000000000000000000FC +:1014F00000000000000000000000000000000000EC +:1015000000000000000000000000000000000000DB +:1015100000000000000000000000000000000000CB +:1015200000000000000000000000000000000000BB +:1015300000000000000000000000000000000000AB +:10154000000000000000000000000000000000009B +:10155000000000000000000000000000000000008B +:10156000000000000000000000000000000000007B :10157000000000000000000000000000000000006B -:1015800000000000000000000000800000000000DB -:101590000000000000A000000000000004000400A3 -:1015A0000401000000010000110000000000000024 -:1015B00000010000000000000000001100002011E8 -:1015C0002005000000000040000000000000820034 -:1015D00000100000000000000004001100000009DD -:1015E00000110000000000000000000000000000EA -:1015F00000000000080000000000000020000000C3 -:10160000000000000000000000000040000000405A -:1016100000020000000000000000000004820080C2 -:1016200000000000004100410041014100000000B5 -:10163000000000000000000000000000009000001A -:101640008000809000000000000800000000000002 +:10158000000000000000000000000000000000005B +:10159000000000000000000000000000000000004B +:1015A000000000000000000000000000000000003B +:1015B000000000000000000000000000000000002B +:1015C000000000000000000000000000000000001B +:1015D000000000000000000000000000000000000B +:1015E00000000000000000000000000000000000FB +:1015F00000000000000000000000000000000000EB +:1016000000000000000000000000000000000000DA +:1016100000000000000000000000000000000000CA +:1016200000000000000000000000000000000000BA +:1016300000000000000000000000000000000000AA +:10164000000000000000000000000000000000009A :10165000000000000000000000000000000000008A :10166000000000000000000000000000000000007A :10167000000000000000000000000000000000006A :10168000000000000000000000000000000000005A -:101690001100000000000000000000000000802099 -:1016A00000200000000000000000000040000000DA +:10169000000000000000000000000000000000004A +:1016A000000000000000000000000000000000003A :1016B000000000000000000000000000000000002A -:1016C0002080008020850000040000000000002130 -:1016D00000080000000000000000000000000021E1 -:1016E0000000008000000000040000000000004135 +:1016C000000000000000000000000000000000001A +:1016D000000000000000000000000000000000000A +:1016E00000000000000000000000000000000000FA :1016F00000000000000000000000000000000000EA -:101700000000000000000000000082000000000057 -:1017100002000280004000000002000000050040BE -:101720000000A00000050000000000000002900082 -:10173000080002000000000000000000000000009F -:1017400000008004000491040000800000000000FC -:101750000000000003000000000000000000000086 -:1017600000080000000200000000800000080000E7 +:1017000000000000000000000000000000000000D9 +:1017100000000000000000000000000000000000C9 +:1017200000000000000000000000000000000000B9 +:1017300000000000000000000000000000000000A9 +:101740000000000000000000000000000000000099 +:101750000000000000000000000000000000000089 +:101760000000000000000000000000000000000079 :101770000000000000000000000000000000000069 -:101780000000000000000000000000000000000851 -:101790000000800080020001000000010000000045 -:1017A000000000000000000000002100000000A177 -:1017B000000000048000050400000000000000C0DC -:1017C00000840005000400840004000800020000FA -:1017D0000010002100050021000000210011000080 -:1017E00000210000000000050000000500000004CA -:1017F000002100080000002100000000000000009F -:101800000000000020000000000000400000000078 -:101810000000000000000000000000000021042182 -:101820000000000304000405042004050200024136 -:10183000000900410000000000000000000000005E -:101840000041000000000001002100010000000034 +:101780000000000000000000000000000000000059 +:101790000000000000000000000000000000000049 +:1017A0000000000000000000000000000000000039 +:1017B0000000000000000000000000000000000029 +:1017C0000000000000000000000000000000000019 +:1017D0000000000000000000000000000000000009 +:1017E00000000000000000000000000000000000F9 +:1017F00000000000000000000000000000000000E9 +:1018000000000000000000000000000000000000D8 +:1018100000000000000000000000000000000000C8 +:1018200000000000000000000000000000000000B8 +:1018300000000000000000000000000000000000A8 +:101840000000000000000000000000000000000098 :101850000000000000000000000000000000000088 :101860000000000000000000000000000000000078 :101870000000000000000000000000000000000068 :101880000000000000000000000000000000000058 :101890000000000000000000000000000000000048 -:1018A0000000000000008000A10080018000800096 -:1018B00080000000000000000000000000000000A8 -:1018C000000000000000C00001009000C0010802FC -:1018D000400808080410000000000000000000009C -:1018E00000000000000000000000000000000008F0 -:1018F000000400100088000000000000000000004C +:1018A0000000000000000000000000000000000038 +:1018B0000000000000000000000000000000000028 +:1018C0000000000000000000000000000000000018 +:1018D0000000000000000000000000000000000008 +:1018E00000000000000000000000000000000000F8 +:1018F00000000000000000000000000000000000E8 :1019000000000000000000000000000000000000D7 -:1019100000000000000000000000A0021011000103 -:101920000100000800111000000000040000000089 -:101930000000400488C100010100000888C00000C8 -:1019400000000000000000000009030080000020EB -:10195000800089808080008000000000000000007E +:1019100000000000000000000000000000000000C7 +:1019200000000000000000000000000000000000B7 +:1019300000000000000000000000000000000000A7 +:101940000000000000000000000000000000000097 +:101950000000000000000000000000000000000087 :101960000000000000000000000000000000000077 -:101970000080000000800000000000000000000067 +:101970000000000000000000000000000000000067 :101980000000000000000000000000000000000057 -:10199000000000000000000000000003C109000377 -:1019A0000020090300A1000900030000000000005E -:1019B00000001110A18500400040090021008000B6 -:1019C000000000000000000000001080090011115C -:1019D000A18889830900091183108000000080001C -:1019E00080800000000080008000A0004000C00057 -:1019F000A180000000410000000000000000000085 +:101990000000000000000000000000000000000047 +:1019A0000000000000000000000000000000000037 +:1019B0000000000000000000000000000000000027 +:1019C0000000000000000000000000000000000017 +:1019D0000000000000000000000000000000000007 +:1019E00000000000000000000000000000000000F7 +:1019F00000000000000000000000000000000000E7 :101A000000000000000000000000000000000000D6 -:101A1000000000000000000000000000098011909C -:101A2000000289A1000000900000808000000000FA -:101A300000000000100008800409848300000000FA -:101A4000800000000000000000000000C040C00056 -:101A5000110108910808020010019100080002001D -:101A60008400089088000200100090000900110016 -:101A700085000990000000010084000000000000C3 +:101A100000000000000000000000000000000000C6 +:101A200000000000000000000000000000000000B6 +:101A300000000000000000000000000000000000A6 +:101A40000000000000000000000000000000000096 +:101A50000000000000000000000000000000000086 +:101A60000000000000000000000000000000000076 +:101A70000000000000000000000000000000000066 :101A80000000000000000000000000000000000056 -:101A90000000000000000000000000000000001036 -:101AA00000400000080900000008000008080000CD -:101AB0000000000000000102000400010405000015 -:101AC00000088400000800000000000000000088FA -:101AD000001188C101090802000800090285000000 -:101AE00000000000000000000000000000000001F5 -:101AF0000000C0010001400000008400020000005E +:101A90000000000000000000000000000000000046 +:101AA0000000000000000000000000000000000036 +:101AB0000000000000000000000000000000000026 +:101AC0000000000000000000000000000000000016 +:101AD0000000000000000000000000000000000006 +:101AE00000000000000000000000000000000000F6 +:101AF00000000000000000000000000000000000E6 :101B000000000000000000000000000000000000D5 :101B100000000000000000000000000000000000C5 -:101B20000000010003030010000001000302010097 -:101B3000000000040204020000000000040500C0D0 -:101B400001000000202101C0000000000200000090 -:101B500000410011000311918002009100888091E2 +:101B200000000000000000000000000000000000B5 +:101B300000000000000000000000000000000000A5 +:101B40000000000000000000000000000000000095 +:101B50000000000000000000000000000000000085 :101B60000000000000000000000000000000000075 -:101B700000400000000200408000000000008000E3 +:101B70000000000000000000000000000000000065 :101B80000000000000000000000000000000000055 -:101B90000000000000000000000005000000000040 -:101BA000000000002041022102910200090005000E -:101BB000090000000080000080000004000085A0F3 -:101BC0000005410500050005090300000000800034 -:101BD0000000218809C00500031102000991099144 -:101BE00003080000008000000000000000000080EA -:101BF0000000008200800080004180118021800070 +:101B90000000000000000000000000000000000045 +:101BA0000000000000000000000000000000000035 +:101BB0000000000000000000000000000000000025 +:101BC0000000000000000000000000000000000015 +:101BD0000000000000000000000000000000000005 +:101BE00000000000000000000000000000000000F5 +:101BF00000000000000000000000000000000000E5 :101C000000000000000000000000000000000000D4 -:101C100000000000000000000000000000000004C0 -:101C2000000000000290118041000908000000003F -:101C300000000000000080880080000021052100D5 -:101C400020000904000080000000000000000020C7 -:101C50000000000001A1002101C0000100020009F4 -:101C6000000901010000000800020000000000C09F -:101C700000080000004000200008000108011000DA -:101C800008008800000000000000000000000000C4 +:101C100000000000000000000000000000000000C4 +:101C200000000000000000000000000000000000B4 +:101C300000000000000000000000000000000000A4 +:101C40000000000000000000000000000000000094 +:101C50000000000000000000000000000000000084 +:101C60000000000000000000000000000000000074 +:101C70000000000000000000000000000000000064 +:101C80000000000000000000000000000000000054 :101C90000000000000000000000000000000000044 -:101CA00000000000000002C00082000001010200EC -:101CB00000880000000004000405000800000188FE -:101CC00000A0A1004100000002A0A0000000000050 -:101CD000000100000000418200C843000000000035 -:101CE00000E0070000000000000007000000000006 -:101CF000000007000000000000000700000A0000CC -:101D0000000007008100000000000000000000004B +:101CA0000000000000000000000000000000000034 +:101CB0000000000000000000000000000000000024 +:101CC0000000000000000000000000000000000014 +:101CD0000000000000000000000000000000000004 +:101CE00000000000000000000000000000000000F4 +:101CF00000000000000000000000000000000000E4 +:101D000000000000000000000000000000000000D3 :101D100000000000000000000000000000000000C3 -:101D200000000000430000000000000000008400EC -:101D3000000000000000000000210000430000003F -:101D40000000000000000000000000000000600033 -:101D50000000000043000000000000000000000040 -:101D600000000000030AFFFF000000000000000068 +:101D200000000000000000000000000000000000B3 +:101D300000000000000000000000000000000000A3 +:101D40000000000000000000000000000000000093 +:101D50000000000000000000000000000000000083 +:101D60000000000000000000000000000000000073 :101D70000000000000000000000000000000000063 -:101D8000FEFCFFFD0000000000000000000000005D +:101D80000000000000000000000000000000000053 :101D90000000000000000000000000000000000043 -:101DA000000000000000000000000000FFFFFF0036 -:101DB00000FF0000FFFF00FF00FF0000FF00000F1A -:101DC000000F33333333FF0000FF0FF00FF0FF003D -:101DD00000FF000000000000000000000000008084 -:101DE0000100000000000000FCF500000000000001 +:101DA0000000000000000000000000000000000033 +:101DB0000000000000000000000000000000000023 +:101DC0000000000000000000000000000000000013 +:101DD0000000000000000000000000000000000003 +:101DE00000000000000000000000000000000000F3 :101DF00000000000000000000000000000000000E3 -:101E0000000040C000800000000000000000000052 +:101E000000000000000000000000000000000000D2 :101E100000000000000000000000000000000000C2 -:101E2000000000000000000000000000FFFF0000B4 -:101E3000FF0000FFFFFF0000FF00FF000000FF00A9 -:101E4000000F000F33333333FF0000FF0FF00FF0AC -:101E5000FF0000FF00000000000000000000000084 -:101E600082821614555C553CFFD728000000000004 -:101E7000FF0AF500000000007DFF280000000000C0 -:101E8000FF50AF00575457540000000000000000FE +:101E200000000000000000000000000000000000B2 +:101E300000000000000000000000000000000000A2 +:101E40000000000000000000000000000000000092 +:101E50000000000000000000000000000000000082 +:101E60000000000000000000000000000000000072 +:101E70000000000000000000000000000000000062 +:101E80000000000000000000000000000000000052 :101E90000000000000000000000000000000000042 -:101EA00000000000000000000000000000000FF033 -:101EB0000FF05555AAAA0FF00FF05555AAAAAA007F -:101EC000AA00AAAAAAAA0FF00FF05555AAAA0FF0C5 -:101ED0000FF055AA55AA0000000000000000000005 -:101EE00000008282004055555535FF5FA00000007C -:101EF0000000FF827D00000000007F7F20200000A6 -:101F00000000FFC03F005555D7140000000000003E +:101EA0000000000000000000000000000000000032 +:101EB0000000000000000000000000000000000022 +:101EC0000000000000000000000000000000000012 +:101ED0000000000000000000000000000000000002 +:101EE00000000000000000000000000000000000F2 +:101EF00000000000000000000000000000000000E2 +:101F000000000000000000000000000000000000D1 :101F100000000000000000000000000000000000C1 :101F200000000000000000000000000000000000B1 -:101F30000FF00FF05555AAAA0FF00FF05555AAAAA9 -:101F4000AA00AA00000000000FF00FF05555AAAA41 -:101F50000FF00FF055AA55AA000000000000000085 -:101F600000610034C00100000061000400010000B5 +:101F300000000000000000000000000000000000A1 +:101F40000000000000000000000000000000000091 +:101F50000000000000000000000000000000000081 +:101F60000000000000000000000000000000000071 :101F70000000000000000000000000000000000061 -:101F800000610006000D00000000000000000000DD +:101F80000000000000000000000000000000000051 :101F90000000000000000000000000000000000041 -:101FA0000000000000000000000005000008000024 -:101FB000000040618006002D100240618006002D67 -:101FC0000802000000380000000040618006002D7B -:101FD000100240618006002D080200000008050084 -:101FE0000000000000007DFF00003C3D3CFD0000C3 -:101FF000FFFF0000000000000000000000000000E3 -:1020000000000000000000C300FF0000000000000E +:101FA0000000000000000000000000000000000031 +:101FB0000000000000000000000000000000000021 +:101FC0000000000000000000000000000000000011 +:101FD0000000000000000000000000000000000001 +:101FE00000000000000000000000000000000000F1 +:101FF00000000000000000000000000000000000E1 +:1020000000000000000000000000000000000000D0 :1020100000000000000000000000000000000000C0 :1020200000000000000000000000000000000000B0 -:102030000000000070F000000A00AA0A0000000082 -:10204000000000000000000000000000FFF0F000B1 -:10205000EB00FFEB000000000100000000000000AA -:1020600000000000793939397CFE00003C383C081A -:1020700000E11EFF00000000000000000000000062 -:10208000000000000000000000C300FF000000008E +:1020300000000000000000000000000000000000A0 +:102040000000000000000000000000000000000090 +:10205000000000040000000000000000000000007C +:102060000000000000000000000000000000000070 +:102070000000000000000000000000000000000060 +:102080000000000000000000000000000000000050 :102090000000000000000000000000000000000040 :1020A0000000000000000000000000000000000030 -:1020B0000000000000007DFF70F0AFAAFFAF00003D -:1020C0000000000000000000000000000000BEB0A2 -:1020D000B0008200FF82000000000100010000004B -:1020E0000000000000003C3C0000824082410000F3 -:1020F00000000008FFFB00000000000000000000DE -:1021000000000000000000000000A2A3F3F30000A4 +:1020B0000000000000000000000000000000000020 +:1020C0000000000000000000000000000000000010 +:1020D0000000000000000000000000000000000000 +:1020E00000000000000000000000000000000000F0 +:1020F00000000000000000000000000000000000E0 +:1021000000000000000000000000000000000000CF :1021100000000000000000000000000000000000BF :1021200000000000000000000000000000000000AF -:102130000000000000000000FFF755550000747417 +:10213000000000000000000000000000000000009F :10214000000000000000000000000000000000008F -:10215000FFF0F3C0FFF0F4100000000000000000EA -:1021600000000000000000003C3C00008241824171 -:10217000000000000A08FAFB000000000000000058 -:10218000000000000000000000000000AFAFFFFFF3 +:10215000000000000000000000000000000000007F +:10216000000000000000000000000000000000006F +:10217000000000000000000000000000000000005F +:10218000000000000000000000000000000000004F :10219000000000000000000000000000000000003F :1021A000000000000000000000000000000000002F -:1021B00000000000000000000000FFFF555574748F -:1021C000FFFF000080C000000000000000000000D1 -:1021D0000000F3C0F000F410F00000000000000068 +:1021B000000000000000000000000000000000001F +:1021C000000000000000000000000000000000000F +:1021D00000000000000000000000000000000000FF :1021E00000000000000000000000000000000000EF :1021F00000000000000000000000000000000000DF :1022000000000000000000000000000000000000CE @@ -201303,96 +205400,96 @@ :10224000000000000000000000000000000000008E :10225000000000000000000000000000000000007E :10226000000000000000000000000000000000006E -:102270000000000000000000000009000000000055 +:10227000000000000000000000000000000000005E :10228000000000000000000000000000000000004E -:1022900000004000000000000000000040000000BE +:10229000000000000000000000000000000000003E :1022A000000000000000000000000000000000002E :1022B000000000000000000000000000000000001E :1022C000000000000000000000000000000000000E :1022D00000000000000000000000000000000000FE :1022E00000000000000000000000000000000000EE -:1022F000000000000000020002000000004000009A +:1022F00000000000000000000000000000000000DE :1023000000000000000000000000000000000000CD :1023100000000000000000000000000000000000BD :1023200000000000000000000000000000000000AD -:10233000000000000000000000000040000000005D +:10233000000000000000000000000000000000009D :10234000000000000000000000000000000000008D :10235000000000000000000000000000000000007D -:10236000000000000000000000000000000000105D -:1023700000000000008800000000000000000000D5 -:102380000000000000080000000000000000000045 -:1023900000000040000000000000000000000008F5 -:1023A0000000000800080000000800000000000015 -:1023B0000000000000840000000000000200000097 -:1023C000000800000040004000000008000000007D +:10236000000000000000000000000000000000006D +:10237000000000000000000000000000000000005D +:10238000000000000000000000000000000000004D +:10239000000000000000000000000000000000003D +:1023A000000000000000000000000000000000002D +:1023B000000000000000000000000000000000001D +:1023C000000000000000000000000000000000000D :1023D00000000000000000000000000000000000FD -:1023E00000080000000800000000000800000000D5 -:1023F000000000000000000000009000000000004D +:1023E00000000000000000000000000000000000ED +:1023F00000000000000000000000000000000000DD :1024000000000000000000000000000000000000CC :1024100000000000000000000000000000000000BC :1024200000000000000000000000000000000000AC :10243000000000000000000000000000000000009C -:102440000000000000000008000000000000000084 -:10245000000000000002000000000000000000007A +:10244000000000000000000000000000000000008C +:10245000000000000000000000000000000000007C :10246000000000000000000000000000000000006C -:10247000000000000000000000000010000000103C -:1024800000000000000000080084000000000000C0 -:10249000000000000000000000000000001000002C +:10247000000000000000000000000000000000005C +:10248000000000000000000000000000000000004C +:10249000000000000000000000000000000000003C :1024A000000000000000000000000000000000002C :1024B000000000000000000000000000000000001C -:1024C000000000000000000000000000000000C04C -:1024D00000C0000000000002000200020000000036 -:1024E0000000110000840000000000000000000057 +:1024C000000000000000000000000000000000000C +:1024D00000000000000000000000000000000000FC +:1024E00000000000000000000000000000000000EC :1024F00000000000000000000000000000000000DC -:1025000000000000000000000000000800000000C3 +:1025000000000000000000000000000000000000CB :1025100000000000000000000000000000000000BB -:1025200000000000000000000000000800000000A3 +:1025200000000000000000000000000000000000AB :10253000000000000000000000000000000000009B -:10254000000000000000000000000040004000000B +:10254000000000000000000000000000000000008B :10255000000000000000000000000000000000007B :10256000000000000000000000000000000000006B -:10257000000000000040000000000000000000001B -:10258000000000100010000000000000000000002B -:102590000000000000000000000000040000000037 +:10257000000000000000000000000000000000005B +:10258000000000000000000000000000000000004B +:10259000000000000000000000000000000000003B :1025A000000000000000000000000000000000002B :1025B000000000000000000000000000000000001B :1025C000000000000000000000000000000000000B -:1025D00000000000400000000000110000000000AA +:1025D00000000000000000000000000000000000FB :1025E00000000000000000000000000000000000EB :1025F00000000000000000000000000000000000DB :1026000000000000000000000000000000000000CA -:1026100000000000000000000000000000080000B2 +:1026100000000000000000000000000000000000BA :1026200000000000000000000000000000000000AA :10263000000000000000000000000000000000009A :10264000000000000000000000000000000000008A :10265000000000000000000000000000000000007A :10266000000000000000000000000000000000006A -:102670000000000000000000000000000000000852 -:1026800000C0001000880000000000080084000066 +:10267000000000000000000000000000000000005A +:10268000000000000000000000000000000000004A :10269000000000000000000000000000000000003A -:1026A000000000000010000000000000000000001A +:1026A000000000000000000000000000000000002A :1026B000000000000000000000000000000000001A -:1026C000000000000000000000000000000000A06A -:1026D0000000000000000000000000880000000072 -:1026E0000000008800000000008800001188000041 +:1026C000000000000000000000000000000000000A +:1026D00000000000000000000000000000000000FA +:1026E00000000000000000000000000000000000EA :1026F00000000000000000000000000000000000DA -:1027000000000000001100000000000000000000B8 -:1027100000000000000000080000000300000000AE +:1027000000000000000000000000000000000000C9 +:1027100000000000000000000000000000000000B9 :1027200000000000000000000000000000000000A9 :102730000000000000000000000000000000000099 :102740000000000000000000000000000000000089 :102750000000000000000000000000000000000079 :102760000000000000000000000000000000000069 -:102770000000000000000002000000000000000057 -:102780000000000800000000000000000000000041 +:102770000000000000000000000000000000000059 +:102780000000000000000000000000000000000049 :102790000000000000000000000000000000000039 -:1027A0000000020000000000000000000000000027 +:1027A0000000000000000000000000000000000029 :1027B0000000000000000000000000000000000019 :1027C0000000000000000000000000000000000009 -:1027D00000000040020000000000020000000000B5 -:1027E00000001100000004000000000000000000D4 +:1027D00000000000000000000000000000000000F9 +:1027E00000000000000000000000000000000000E9 :1027F00000000000000000000000000000000000D9 -:1028000002000000000000000000000000000000C6 +:1028000000000000000000000000000000000000C8 :1028100000000000000000000000000000000000B8 :1028200000000000000000000000000000000000A8 :102830000000000000000000000000000000000098 @@ -201496,181 +205593,181 @@ :102E50000000000000000000000000000000000072 :102E60000000000000000000000000000000000062 :102E70000000000000000000000000000000000052 -:102E80000000000000000000000000100000000032 +:102E80000000000000000000000000000000000042 :102E90000000000000000000000000000000000032 -:102EA00000000000100000004000000010000000C2 -:102EB00000000000400000000000000000000000D2 +:102EA0000000000000000000000000000000000022 +:102EB0000000000000000000000000000000000012 :102EC0000000000000000000000000000000000002 :102ED00000000000000000000000000000000000F2 -:102EE00000000000000000000000004000000000A2 +:102EE00000000000000000000000000000000000E2 :102EF00000000000000000000000000000000000D2 -:102F000000000000000000000000000000010000C0 -:102F10000000000000000000000000900000000021 -:102F2000000020000000080200000041080000002E -:102F3000000000000010040020000000000000005D +:102F000000000000000000000000000000000000C1 +:102F100000000000000000000000000000000000B1 +:102F200000000000000000000000000000000000A1 +:102F30000000000000000000000000000000000091 :102F40000000000000000000000000000000000081 -:102F5000000000000000000000000000000000036E +:102F50000000000000000000000000000000000071 :102F60000000000000000000000000000000000061 -:102F7000000000000000022000000000000000002F +:102F70000000000000000000000000000000000051 :102F80000000000000000000000000000000000041 -:102F900000400000000002000000004000000800A7 -:102FA0000000000080000010800100000000000010 -:102FB000000000000004000080008000000000000D -:102FC00000000000000000000000000000000040C1 -:102FD00000000000000800000000000000000000E9 -:102FE00000000000000000000000000000000000E1 -:102FF00000000000000000080000000000000000C9 +:102F90000000000000000000000000000000000031 +:102FA0000000000000000000000000000000000021 +:102FB000000000000000000000000000000200000F +:102FC00040000000000000000000000000000000C1 +:102FD00000000000000000000000000000000002EF +:102FE00000004000000000000000000000000000A1 +:102FF00000000000000000000000000000000000D1 :1030000000000000000000000000000000000000C0 -:103010000000000000000040000000000000000070 -:10302000000000110041000200000000000000004C -:103030000008000000000000000000000000000088 -:10304000000200000000000000000000000000007E +:1030100000000000000000000000000000000000B0 +:1030200000000000000000000000000000000000A0 +:103030000000000000000000000000000000000090 +:103040000000000000000000000000000000000080 :103050000000000000000000000000000000000070 :103060000000000000000000000000000000000060 :103070000000000000000000000000000000000050 -:103080000000000000000000000000000080208020 -:10309000008000040000A0000000A000000000006C +:103080000000000000000000000000000000000040 +:103090000000000000000000000000000000000030 :1030A0000000000000000000000000000000000020 :1030B0000000000000000000000000000000000010 :1030C0000000000000000000000000000000000000 :1030D00000000000000000000000000000000000F0 :1030E00000000000000000000000000000000000E0 :1030F00000000000000000000000000000000000D0 -:1031000000000000000000000000000000000004BB -:103110008004000400010000000000000000000026 +:1031000000000000000000000000000000000000BF +:1031100000000000000000000000000000000000AF :10312000000000000000000000000000000000009F :10313000000000000000000000000000000000008F :10314000000000000000000000000000000000007F :10315000000000000000000000000000000000006F :10316000000000000000000000000000000000005F -:103170000000000000000000000900112000000015 +:10317000000000000000000000000000000000004F :10318000000000000000000000000000000000003F -:1031900000000000004000000008000800000000DF -:1031A0000000000000000000000400000090000487 -:1031B000000000000084000000000000000000008B -:1031C00000000000001000000000000000000000EF +:10319000000000000000000000000000000000002F +:1031A000000000000000000000000000000000001F +:1031B000000000000000000000000000000000000F +:1031C00000000000000000000000000000000000FF :1031D00000000000000000000000000000000000EF :1031E00000000000000000000000000000000000DF :1031F00000000000000000000000000000000000CF :1032000000000000000000000000000000000000BE :1032100000000000000000000000000000000000AE -:103220000000000000000000000000118800000401 +:10322000000000000000000000000000000000009E :10323000000000000000000000000000000000008E -:10324000000000000000001000000000000000006E +:10324000000000000000000000000000000000007E :10325000000000000000000000000000000000006E :10326000000000000000000000000000000000005E :10327000000000000000000000000000000000004E :10328000000000000000000000000000000000003E -:103290000000088000800000008000800000000026 -:1032A000000000000000000000000000009000008E -:1032B0000001000000000004000000000000000009 +:10329000000000000000000000000000000000002E +:1032A000000000000000000000000000000000001E +:1032B000000000000000000000000000000000000E :1032C00000000000000000000000000000000000FE :1032D00000000000000000000000000000000000EE :1032E00000000000000000000000000000000000DE :1032F00000000000000000000000000000000000CE -:1033000000000000000000000000000000A000001D -:103310000000000080100004000000040004000011 +:1033000000000000000000000000000000000000BD +:1033100000000000000000000000000000000000AD :10332000000000000000000000000000000000009D -:103330000000000400000000000000000000000089 -:103340000000000820000000000000000000000451 -:103350000000000400040000000000000000000065 +:10333000000000000000000000000000000000008D +:10334000000000000000000000000000000000007D +:10335000000000000000000000000000000000006D :10336000000000000000000000000000000000005D :10337000000000000000000000000000000000004D :10338000000000000000000000000000000000003D -:10339000000000000000900000002000000020005D +:10339000000000000000000000000000000000002D :1033A000000000000000000000000000000000001D :1033B000000000000000000000000000000000000D :1033C00000000000000000000000000000000000FD :1033D00000000000000000000000000000000000ED :1033E00000000000000000000000000000000000DD :1033F00000000000000000000000000000000000CD -:103400000004020020000000002000000000000076 -:10341000110000000000000000000000800000001B -:10342000800000000000000000000000000011000B -:10343000000000010000000100000000000000008A -:10344000000000000000000000000000000100017A +:1034000000000000000000000000000000000000BC +:1034100000000000000000000000000000000000AC +:10342000000000000000000000000000000000009C +:10343000000000000000000000000000000000008C +:10344000000000000000000000000000000000007C :10345000000000000000000000000000000000006C :10346000000000000000000000000000000000005C :10347000000000000000000000000000000000004C :10348000000000000000000000000000000000003C -:10349000000000000000000000000000000100002B +:10349000000000000000000000000000000000002C :1034A000000000000000000000000000000000001C -:1034B00000000000000400040040001000000000B4 -:1034C00000090002000000000000000011090008CF -:1034D00000080009000000000000000000000000DB +:1034B000000000000000000000000000000000000C +:1034C00000000000000000000000000000000000FC +:1034D00000000000000000000000000000000000EC :1034E00000000000000000000000000000000000DC :1034F00000000000000000000000000000000000CC :1035000000000000000000000000000000000000BB -:1035100000000000000000000000000000000004A7 -:103520000000030000050000000000000000000093 -:1035300000000000000011802100050404000000CC -:1035400000000000000000000000000000000080FB -:103550000000000000050000000000000000000066 +:1035100000000000000000000000000000000000AB +:10352000000000000000000000000000000000009B +:10353000000000000000000000000000000000008B +:10354000000000000000000000000000000000007B +:10355000000000000000000000000000000000006B :10356000000000000000000000000000000000005B :10357000000000000000000000000000000000004B :10358000000000000000000000000000000000003B :10359000000000000000000000000000000000002B -:1035A0008000000004110500000000000000000081 -:1035B000000000000000000000400100010100C008 +:1035A000000000000000000000000000000000001B +:1035B000000000000000000000000000000000000B :1035C00000000000000000000000000000000000FB -:1035D00000080000000400000000000000000000DF +:1035D00000000000000000000000000000000000EB :1035E00000000000000000000000000000000000DB :1035F00000000000000000000000000000000000CB :1036000000000000000000000000000000000000BA -:1036100000000000000000000000840082000000A4 -:10362000A00040008400850184000000000000002C -:103630000000000000000000000000000100010088 -:103640000100000000000000000000000000000079 +:1036100000000000000000000000000000000000AA +:10362000000000000000000000000000000000009A +:10363000000000000000000000000000000000008A +:10364000000000000000000000000000000000007A :10365000000000000000000000000000000000006A :10366000000000000000000000000000000000005A :10367000000000000000000000000000000000004A :10368000000000000000000000000000000000003A :10369000000000000000000000000000000000002A -:1036A0000000000000010000000001010000000017 -:1036B0000000000000000000000000000000030007 -:1036C00004000400000000000000000000000000F2 -:1036D00000000000000004000000000000000000E6 +:1036A000000000000000000000000000000000001A +:1036B000000000000000000000000000000000000A +:1036C00000000000000000000000000000000000FA +:1036D00000000000000000000000000000000000EA :1036E00000000000000000000000000000000000DA :1036F00000000000000000000000000000000000CA :1037000000000000000000000000000000000000B9 :1037100000000000000000000000000000000000A9 -:103720000000000000000002000000001104000082 -:103730000000000000000000000000000000048005 -:1037400004000200040300000000800000000000EC -:10375000000000000000A11188118300200000007B +:103720000000000000000000000000000000000099 +:103730000000000000000000000000000000000089 +:103740000000000000000000000000000000000079 +:103750000000000000000000000000000000000069 :103760000000000000000000000000000000000059 :103770000000000000000000000000000000000049 :103780000000000000000000000000000000000039 :103790000000000000000000000000000000000029 -:1037A000002000000080000000000491008005005F +:1037A0000000000000000000000000000000000019 :1037B0000000000000000000000000000000000009 -:1037C00001A00000010001008800000008000000C6 -:1037D000000000000000000009012101090085002F +:1037C00000000000000000000000000000000000F9 +:1037D00000000000000000000000000000000000E9 :1037E00000000000000000000000000000000000D9 :1037F00000000000000000000000000000000000C9 :1038000000000000000000000000000000000000B8 :1038100000000000000000000000000000000000A8 -:103820000000000100400040000000000183008211 +:103820000000000000000000000000000000000098 :103830000000000000000000000000000000000088 -:103840000000410000C8000000000000000000006F -:1038500000000000000000000000884100C8430094 +:103840000000000000000000000000000000000078 +:103850000000000000000000000000000000000068 :103860000000000000000000000000000000000058 :103870000000000000000000000000000000000048 :103880000000000000000000000000000000000038 :103890000000000000000000000000000000000028 -:1038A000000000000000000000000000410000C80F +:1038A0000000000000000000000000000000000018 :1038B0000000000000000000000000000000000008 -:1038C0000000000000000000000000000F0F0000DA -:1038D000000000000000000000000000CF0CEF2CF2 +:1038C00000000000000000000000000000000000F8 +:1038D00000000000000000000000000000000000E8 :1038E00000000000000000000000000000000000D8 :1038F00000000000000000000000000000000000C8 :1039000000000000000000000000000000000000B7 :1039100000000000000000000000000000000000A7 :103920000000000000000000000000000000000097 :103930000000000000000000000000000000000087 -:1039400000000000000000000000000000000F0F59 -:103950000000000000000000000000000000CF0C8C -:10396000EF2C00000000000000000000000000003C +:103940000000000000000000000000000000000077 +:103950000000000000000000000000000000000067 +:103960000000000000000000000000000000000057 :103970000000000000000000000000000000000047 :103980000000000000000000000000000000000037 :103990000000000000000000000000000000000027 @@ -201691,7 +205788,7 @@ :103A80000000000000000000000000000000000036 :103A90000000000000000000000000000000000026 :103AA0000000000000000000000000000000000016 -:103AB00040406E6E000000000003010B000000009B +:103AB0000000000000000000000000000000000006 :103AC00000000000000000000000000000000000F6 :103AD00000000000000000000000000000000000E6 :103AE00000000000000000000000000000000000D6 @@ -201699,92 +205796,92 @@ :103B000000000000000000000000000000000000B5 :103B100000000000000000000000000000000000A5 :103B20000000000000000000000000000000000095 -:103B3000000000000000000000000FCF8FDF000039 -:103B40000000000000000000000000000000006114 -:103B50000006C007000000610006000D0000000024 -:103B600000000000000000710034C00D00000000E3 +:103B30000000000000000000000000000000000085 +:103B40000000000000000000000000000000000075 +:103B50000000000000000000000000000000000065 +:103B60000000000000000000000000000000000055 :103B70000000000000000000000000000000000045 :103B80000000000000000000000000000000000035 :103B90000000000000000000000000000000000025 :103BA0000000000000000000000000000000000015 -:103BB000000000000000000000610001C0010000E2 +:103BB0000000000000000000000000000000000005 :103BC00000000000000000000000000000000000F5 -:103BD00001000008000000000000000000000000DC -:103BE00000000000000000003F3D0F0D000000003D +:103BD00000000000000000000000000000000000E5 +:103BE00000000000000000000000000000000000D5 :103BF00000000000000000000000000000000000C5 :103C000000000000000000000000000000000000B4 :103C100000000000000000000000000000000000A4 :103C20000000000000000000000000000000000094 -:103C300000000000000000000000C300C3000000FE -:103C4000C3C30000000000000000000000000000EE -:103C5000000001000008000000000000000000005B -:103C6000000000000000000000003F3F0F0F0000B8 +:103C30000000000000000000000000000000000084 +:103C40000000000000000000000000000000000074 +:103C50000000000000000000000000000000000064 +:103C60000000000000000000000000000000000054 :103C70000000000000000000000000000000000044 :103C80000000000000000000000000000000000034 :103C90000000000000000000000000000000000024 :103CA0000000000000000000000000000000000014 -:103CB000000000000000000000000000C300C3007E -:103CC0000000C3C30000000000000000000000006E -:103CD000000000007FFFFFFF3C3CBC3C3030303038 -:103CE00000000000000000000000000015050800B2 +:103CB0000000000000000000000000000000000004 +:103CC00000000000000000000000000000000000F4 +:103CD00000000000000000000000000000000000E4 +:103CE00000000000000000000000000000000000D4 :103CF00000000000000000000000000000000000C4 :103D000000000000000000000000000000000000B3 :103D100000000000000000000000000000000000A3 :103D20000000000000000000000000000000000093 -:103D30000000000000000000000000000000C3C3FD -:103D4000000000FF00000000000000000000000074 -:103D5000000000000000FFFFFDBFFFFF000030304B -:103D600030300000000000000000000000001505D9 -:103D7000080000000000000000000000000000003B +:103D30000000000000000000000000000000000083 +:103D40000000000000000000000000000000000073 +:103D50000000000000000000000000000000000063 +:103D60000000000000000000000000000000000053 +:103D70000000000000000000000000000000000043 :103D80000000000000000000000000000000000033 :103D90000000000000000000000000000000000023 :103DA0000000000000000000000000000000000013 :103DB0000000000000000000000000000000000003 -:103DC000C3C3000000FF000000000000000000006E +:103DC00000000000000000000000000000000000F3 :103DD00000000000000000000000000000000000E3 :103DE00000000000000000000000000000000000D3 -:103DF0004000000000000000000000000000000083 +:103DF00000000000000000000000000000000000C3 :103E000000000000000000000000000000000000B2 -:103E10002000000000000000000000000000000082 +:103E100000000000000000000000000000000000A2 :103E20000000000000000000000000000000000092 -:103E30000000200000000000000000000000000062 +:103E30000000000000000000000000000000000082 :103E40000000000000000000000000000000000072 :103E50000000000000000000000000000000000062 :103E60000000000000000000000000000000000052 -:103E700020000000000000000000400000000000E2 +:103E70000000000000000000000000000000000042 :103E80000000000000000000000000000000000032 :103E90000000000000000000000000000000000022 :103EA0000000000000000000000000000000000012 :103EB0000000000000000000000000000000000002 :103EC00000000000000000000000000000000000F2 :103ED00000000000000000000000000000000000E2 -:103EE00000090000000000000000000000000000C9 +:103EE00000000000000000000000000000000000D2 :103EF00000000000000000000000000000000000C2 :103F000000000000000000000000000000000000B1 -:103F10000000000000000010000000000000000091 +:103F100000000000000000000000000000000000A1 :103F20000000000000000000000000000000000091 -:103F30000041004000400000004000000000000080 -:103F40000000000000000000000000000010000061 +:103F30000000000000000000000000000000000081 +:103F40000000000000000000000000000000000071 :103F50000000000000000000000000000000000061 -:103F600000080000004000000000004000000000C9 -:103F700000000088000000000000000000000000B9 -:103F80000008000000000000000000000000000029 -:103F90000000000000000000000800000000000019 -:103FA0000000008400000008000000000000000085 -:103FB000000000400000000000000084000000003D -:103FC00000000000000000080000000000000000E9 -:103FD00000000010000000000000000000000000D1 +:103F60000000000000000000000000000000000051 +:103F70000000000000000000000000000000000041 +:103F80000000000000000000000000000000000031 +:103F90000000000000000000000000000000000021 +:103FA0000000000000000000000000000000000011 +:103FB0000000000000000000000000000000000001 +:103FC00000000000000000000000000000000000F1 +:103FD00000000000000000000000000000000000E1 :103FE00000000000000000000000000000000000D1 -:103FF0000000000000410000000000080005000073 +:103FF00000000000000000000000000000000000C1 :1040000000000000000000000000000000000000B0 :1040100000000000000000000000000000000000A0 :104020000000000000000000000000000000000090 -:104030000000000000080000000000000000000078 -:104040000000000000000000000000000008000068 +:104030000000000000000000000000000000000080 +:104040000000000000000000000000000000000070 :104050000000000000000000000000000000000060 -:10406000000000000000000000000000000000A0B0 +:104060000000000000000000000000000000000050 :104070000000000000000000000000000000000040 -:104080000000000000000000000800000000000028 +:104080000000000000000000000000000000000030 :104090000000000000000000000000000000000020 :1040A0000000000000000000000000000000000010 :1040B0000000000000000000000000000000000000 @@ -201801,44 +205898,44 @@ :10416000000000000000000000000000000000004F :10417000000000000000000000000000000000003F :10418000000000000000000000000000000000002F -:10419000000000820000000000000000000000405D +:10419000000000000000000000000000000000001F :1041A000000000000000000000000000000000000F -:1041B000099000000000000009880000000000884D -:1041C0000000002000880000000000000000000047 -:1041D00000000000000000000000000000A0000837 +:1041B00000000000000000000000000000000000FF +:1041C00000000000000000000000000000000000EF +:1041D00000000000000000000000000000000000DF :1041E00000000000000000000000000000000000CF :1041F00000000000000000000000000000000000BF :1042000000000000000000000000000000000000AE -:104210000000000000000000000000080000000096 +:10421000000000000000000000000000000000009E :10422000000000000000000000000000000000008E :10423000000000000000000000000000000000007E :10424000000000000000000000000000000000006E :10425000000000000000000000000000000000005E -:10426000000008000000000000000400000000A0A2 -:104270000000000000A0000000000000000000009E -:104280000000000000000084008400000000000026 +:10426000000000000000000000000000000000004E +:10427000000000000000000000000000000000003E +:10428000000000000000000000000000000000002E :10429000000000000000000000000000000000001E :1042A000000000000000000000000000000000000E :1042B00000000000000000000000000000000000FE :1042C00000000000000000000000000000000000EE -:1042D000000000000000000000840000000000005A +:1042D00000000000000000000000000000000000DE :1042E00000000000000000000000000000000000CE :1042F00000000000000000000000000000000000BE :1043000000000000000000000000000000000000AD -:10431000004000400000000000000000000000001D +:10431000000000000000000000000000000000009D :10432000000000000000000000000000000000008D :10433000000000000000000000000000000000007D -:10434000000002000000000000000000000000006B +:10434000000000000000000000000000000000006D :10435000000000000000000000000000000000005D -:10436000000000400000000000000000000000000D +:10436000000000000000000000000000000000004D :10437000000000000000000000000000000000003D -:10438000000020000000000000000000000000000D -:10439000000000000000000000000082000000009B -:1043A00000002000000000000000000000000000ED +:10438000000000000000000000000000000000002D +:10439000000000000000000000000000000000001D +:1043A000000000000000000000000000000000000D :1043B00000000000000000000000000000000000FD -:1043C000008802002000008800000000210000009A -:1043D00000000000000000000008000000000000D5 -:1043E000000000000000000000000088000402003F +:1043C00000000000000000000000000000000000ED +:1043D00000000000000000000000000000000000DD +:1043E00000000000000000000000000000000000CD :1043F00000000000000000000000000000000000BD :1044000000000000000000000000000000000000AC :10441000000000000000000000000000000000009C @@ -201987,45 +206084,45 @@ :104D000000000000000000000000000000000000A3 :104D10000000000000000000000000000000000093 :104D20000000000000000000000000000000000083 -:104D300000002080000000000008000000000000CB +:104D30000000000000000000000000000000000073 :104D40000000000000000000000000000000000063 -:104D5000000001000003000000000000000000004F +:104D50000000000000000000000000000000000053 :104D60000000000000000000000000000000000043 -:104D700000000000008000000000000000000000B3 -:104D800000008200000000000000000000000000A1 -:104D90000000218021800000000000000000400091 -:104DA00000000040000000000000000000000000C3 -:104DB00000000040000400000000000000000000AF +:104D70000000000000000000000000000000000033 +:104D80000000000000000000000000000000000023 +:104D90000000000000000000000000000000000013 +:104DA0000000000000000000000000000000000003 +:104DB00000000000000000000000000000000000F3 :104DC00000000000000000000000000000000000E3 -:104DD00000000000200000000000000000000000B3 +:104DD00000000000000000000000000000000000D3 :104DE00000000000000000000000000000000000C3 -:104DF00000000000000000040000000000000000AF +:104DF00000000000000000000000000000000000B3 :104E000000000000000000000000000000000000A2 -:104E1000000000008408C00800000000000000003E -:104E200000000040004000400000000000000000C2 -:104E3000000000000000000000080000000000006A -:104E40000000004000000000000000000000000022 +:104E10000000000000000000000000000000000092 +:104E20000000000000000000000000000000000082 +:104E30000000000000000000000000000000000072 +:104E40000000000000000000000000000000000062 :104E50000000000000000000000000000000000052 :104E60000000000000000000000000000000000042 :104E70000000000000000000000000000000000032 -:104E800000000000000000000000000000400000E2 -:104E90000000000000000000000000040082008408 -:104EA00000100008000800000000000800000000DA -:104EB0000000000800080000000800840000000056 -:104EC000000000400008000000000088000000080A -:104ED000000000840084000000840000000800003E -:104EE0000084000000000008000000000000000036 -:104EF000000800000000000000000000001000009A -:104F0000008400000000001000000000000000000D -:104F10000008000000000000000000000021002147 -:104F200000000021000000002000002100090021F5 -:104F30000008002100000000000000030021002103 -:104F400000000021000000000000000300210021FB -:104F500000000021000000000000000000000041EF -:104F60000021002100100041000500000041000068 -:104F700000410041000000000000000000000000AF -:104F80000000002100000000000000000000000000 -:104F90000000000800210000002100210521000080 +:104E80000000000000000000000000000000000022 +:104E90000000000000000000000000000000000012 +:104EA00000000000000000000000100000000000F2 +:104EB00000000000000000000000000000000000F2 +:104EC00000000000000000000000000010000000D2 +:104ED00000000000000000000000000000000000D2 +:104EE00000000000000000000000000000000000C2 +:104EF00000000000000000000000000000000000B2 +:104F0000100000000000000010020000000000007F +:104F10000000000000000000000000000000000091 +:104F20000000000000000000000000000000000081 +:104F30000000000000000000000000000000000071 +:104F40000000000000000000000000000000000061 +:104F50000000000000000000000000000000000051 +:104F60000000000000000000000000000000000041 +:104F70000000000000000000000000000000000031 +:104F80000000000000000000000000000000000021 +:104F90000000000000000000000000000000000011 :104FA0000000000000000000000000000000000001 :104FB00000000000000000000000000000000000F1 :104FC00000000000000000000000000000000000E1 @@ -202033,31 +206130,31 @@ :104FE00000000000000000000000000000000000C1 :104FF00000000000000000000000000000000000B1 :1050000000000000000000000000000000000000A0 -:105010000000000000000000000000000000880008 +:105010000000000000000000000000000000000090 :105020000000000000000000000000000000000080 -:105030000000000000000000000000000000080068 +:105030000000000000000000000000000000000070 :105040000000000000000000000000000000000060 -:105050000000000000000000000000000000080048 +:105050000000000000000000000000000000000050 :105060000000000000000000000000000000000040 :105070000000000000000000000000000000000030 :105080000000000000000000000000000000000020 :105090000000000000000000000000000000000010 -:1050A00000000008000000000000000000000000F8 +:1050A0000000000000000000000000000000000000 :1050B00000000000000000000000000000000000F0 :1050C00000000000000000000000000000000000E0 :1050D00000000000000000000000000000000000D0 :1050E00000000000000000000000000000000000C0 :1050F00000000000000000000000000000000000B0 -:105100000000000000000000000000000000000897 +:10510000000000000000000000000000000000009F :10511000000000000000000000000000000000008F -:10512000000000000000000000210000000000005E -:1051300020008200000000000000000000000000CD -:105140000000000800000000004100000000000016 -:1051500000008200000000000008000000000000C5 -:105160000000002100000000000000080000000016 -:1051700000000000820000000000000000000000AD +:10512000000000000000000000000000000000007F +:10513000000000000000000000000000000000006F +:10514000000000000000000000000000000000005F +:10515000000000000000000000000000000000004F +:10516000000000000000000000000000000000003F +:10517000000000000000000000000000000000002F :10518000000000000000000000000000000000001F -:105190000000000000000000000900000000000006 +:10519000000000000000000000000000000000000F :1051A00000000000000000000000000000000000FF :1051B00000000000000000000000000000000000EF :1051C00000000000000000000000000000000000DF @@ -202068,94 +206165,94 @@ :10521000000000000000000000000000000000008E :10522000000000000000000000000000000000007E :10523000000000000000000000000000000000006E -:105240000008000800050021000000000008000020 +:10524000000000000000000000000000000000005E :10525000000000000000000000000000000000004E -:1052600000210021000000030000000000000000F9 -:10527000000000000000000000000000000400002A -:105280000000000000090000000000000000000015 -:1052900000000000000020000000000000080005E1 -:1052A00000080021000000080000000000000000CD +:10526000000000000000000000000000000000003E +:10527000000000000000000000000000000000002E +:10528000000000000000000000000000000000001E +:10529000000000000000000000000000000000000E +:1052A00000000000000000000000000000000000FE :1052B00000000000000000000000000000000000EE :1052C00000000000000000000000000000000000DE :1052D00000000000000000000000000000000000CE :1052E00000000000000000000000000000000000BE :1052F00000000000000000000000000000000000AE :10530000000000000000000000000000000000009D -:10531000000000000000000000000000000000008D +:105310000000000000A000000000000000000000ED :10532000000000000000000000000000000000007D -:10533000000000000100000000000000000101006A -:1053400000C000000000000000000000000000009D -:10535000000000000100000000000000000101004A -:1053600000C000000000000000000000000000007D -:10537000000000000000010000000000000000012B -:10538000000000C00000000000000000000000005D -:105390000000000000000000C000000000820000CB -:1053A000C0000004C0820000C00000010000000036 -:1053B00000000000000041000000000000000008A4 -:1053C0000800008000000000000000000000000055 -:1053D0000000000000004100000000000000000884 -:1053E0000800008000000000000000000000000035 -:1053F000000000000000000041000000000000006C -:10540000000409000080000000000000000000000F -:105410000000000000000002000000000004048002 -:1054200000028200008080800000800000030000F5 -:105430000000030000000080000080000000000069 -:105440000900910000008000000000000000004101 -:105450000000030000000080000080000000000049 -:1054600009009100000080000000000000000041E1 -:105470000000000003000000008000008000000029 -:10548000000041004000004000000000000000005B -:1054900000410000100000000000000009000000B2 -:1054A0000200020041000010030000000000008024 -:1054B000804000000100000000C00000200000004B -:1054C0000000020008A00002080002000000000026 -:1054D000000100000100000000C0000020000000EA -:1054E0000000C00008A00002080002000000000048 -:1054F0000001000000000100000000C000002000CA -:1055000000000000A00085A000050200820000004D -:10551000000000010000000000000000000000008A -:105520000000000084008488000001008800000062 -:1055300000C0820100000000C00000000000000068 -:105540000000000000020000000000000000000059 -:105550000000000000000000C0000000000000008B -:105560000000000000020000000000000000000039 -:1055700000000000000000000000C000000000006B -:105580000000000000000082000000000000000099 +:10533000000000000000000000000000000000006D +:10534000000000000000000000000000000000005D +:10535000000000000000000000000000000000004D +:10536000000000000000000000000000000000003D +:10537000000000000000000000000000000000002D +:10538000000000000000000000000000000000001D +:10539000000000000000000000000000000000000D +:1053A00000000000000000000000000000000000FD +:1053B00000000000000000000000000000000000ED +:1053C00000000000000000000000000000000000DD +:1053D00000000000000000000000000000000000CD +:1053E00000000000000000000000000000000000BD +:1053F00000000000000000000000000000000000AD +:10540000000000000000000000000000000000009C +:10541000000000000000000000000000000000008C +:10542000000000000000000000000000000000007C +:10543000000000000000000000000000000000006C +:10544000000000000000000000000000000000005C +:10545000000000000000000000000000000000004C +:10546000000000000000000000000000000000003C +:10547000000000000000000000000000000000002C +:10548000000000000000000000000000000000001C +:10549000000000000000000000000000000000000C +:1054A00000000000000000000000000000000000FC +:1054B00000000000000000000000000000000000EC +:1054C00000000000000000000000000000000000DC +:1054D00000000000000000000000000000000000CC +:1054E00000000000000000000000000000000000BC +:1054F00000000000000000000000000000000000AC +:10550000000000000000000000000000000000009B +:10551000000000000000000000000000000000008B +:10552000000000000000000000000000000000007B +:10553000000000000000000000000000000000006B +:10554000000000000000000000000000000000005B +:10555000000000000000000000000000000000004B +:10556000000000000000000000000000000000003B +:10557000000000000000000000000000000000002B +:10558000000000000000000000000000000000001B :10559000000000000000000000000000000000000B -:1055A00000000001100000080000110000000000D1 -:1055B000000000000000000000008000000000006B +:1055A00000000000000000000000000000000000FB +:1055B00000000000000000000000000000000000EB :1055C00000000000000000000000000000000000DB -:1055D000000000000000000000008000000000004B +:1055D00000000000000000000000000000000000CB :1055E00000000000000000000000000000000000BB -:1055F000000000000000000000000000800000002B +:1055F00000000000000000000000000000000000AB :10560000000000000000000000000000000000009A :10561000000000000000000000000000000000008A -:1056200000000000000800090080000041000000A8 -:1056300000000000004100000000800000C10000E8 -:10564000000000000000000000C180000009000010 -:1056500000000000000000000000800000C1000009 -:105660000000000000000000004180000002000077 -:10567000000000000000000000000000800000C1E9 -:105680000000000000000000000000418000000455 -:10569000000000000000000000000010800000C1B9 -:1056A00000000000000089000000004180000002AE -:1056B000000000410020000003080000400000C17D -:1056C00000000000000000000000000302000000D5 -:1056D000000000000000000000000000400000C1C9 -:1056E00000000000000000000000001102000000A7 -:1056F000000000000000000000000000000040006A -:1057000000C100000000000000000000008902004D -:105710000000000000000000000000000000200069 -:1057200000400000000002001000000000114000D6 -:105730000000000000010001000001C100000000A5 -:10574000000000420000000000004800810000E06E -:1057500000004800000000000000004200000000BF -:10576000000000420000000000004800810000E04E -:10577000000048000000000000000042000000009F -:10578000000000000042000000000000480081000E -:1057900000E000004800000000000000004200009F -:1057A0000000000000000000000000000000811266 -:1057B00000E00700484200000000000048420000EE +:10562000000000000000000000000000000000007A +:10563000000000000000000000000000000000006A +:10564000000000000000000000000000000000005A +:10565000000000000000000000000000000000004A +:10566000000000000000000000000000000000003A +:10567000000000000000000000000000000000002A +:10568000000000000000000000000000000000001A +:10569000000000000000000000000000000000000A +:1056A00000000000000000000000000000000000FA +:1056B00000000000000000000000000000000000EA +:1056C00000000000000000000000000000000000DA +:1056D00000000000000000000000000000000000CA +:1056E00000000000000000000000000000000000BA +:1056F00000000000000000000000000000000000AA +:105700000000000000000000000000000000000099 +:105710000000000000000000000000000000000089 +:105720000000000000000000000000000000000079 +:105730000000000000000000000000000000000069 +:105740000000000000000000000000000000000059 +:105750000000000000000000000000000000000049 +:105760000000000000000000000000000000000039 +:105770000000000000000000000000000000000029 +:105780000000000000000000000000000000000019 +:105790000000000000000000000000000000000009 +:1057A00000000000000000000000000000000000F9 +:1057B00000000000000000000000000000000000E9 :1057C00000000000000000000000000000000000D9 :1057D00000000000000000000000000000000000C9 :1057E00000000000000000000000000000000000B9 @@ -202172,23 +206269,23 @@ :105890000000000000000000000000000000000008 :1058A00000000000000000000000000000000000F8 :1058B00000000000000000000000000000000000E8 -:1058C0000000747B000000000000000000000000E9 +:1058C00000000000000000000000000000000000D8 :1058D00000000000000000000000000000000000C8 -:1058E000DE2E747B000000000000000000000000BD +:1058E00000000000000000000000000000000000B8 :1058F00000000000000000000000000000000000A8 -:10590000DE2E0000747B000000000000000000009C +:105900000000000000000000000000000000000097 :105910000000000000000000000000000000000087 -:105920000000DE2E757B000000000000000000007B +:105920000000000000000000000000000000000077 :105930000000000000000000000000000000000067 -:105940000000DEAE6156034000000000000002319E -:10595000E0000000000000000C400000000000001B -:1059600002C06A8661560340000000000000023158 -:10597000E0000000000000000C40000000000000FB -:1059800002C06A860000615603400000000000006B -:105990000231E0000000000000000C4000000000A8 -:1059A000000002C06A86612603400000000000007B -:1059B0000230A0000000000000000C4000000000C9 -:1059C000000002C06486000000000000000000002B +:105940000000000000000000000000000000000057 +:105950000000000000000000000000000000000047 +:105960000000000000000000000000000000000037 +:105970000000000000000000000000000000000027 +:105980000000000000000000000000000000000017 +:105990000000000000000000000000000000000007 +:1059A00000000000000000000000000000000000F7 +:1059B00000000000000000000000000000000000E7 +:1059C00000000000000000000000000000000000D7 :1059D00000000000000000000000000000000000C7 :1059E00000000000000000000000000000000000B7 :1059F00000000000000000000000000000000000A7 @@ -202197,7 +206294,7 @@ :105A20000000000000000000000000000000000076 :105A30000000000000000000000000000000000066 :105A40000000000000000000000000000000000056 -:105A500040000000000000004100000000000000C5 +:105A50000000000000000000000000000000000046 :105A60000000000000000000000000000000000036 :105A70000000000000000000000000000000000026 :105A80000000000000000000000000000000000016 @@ -202205,38 +206302,38 @@ :105AA00000000000000000000000000000000000F6 :105AB00000000000000000000000000000000000E6 :105AC00000000000000000000000000000000000D6 -:105AD0000000004000000000000000000000000086 +:105AD00000000000000000000000000000000000C6 :105AE00000000000000000000000000000000000B6 :105AF00000000000000000000000000000000000A6 :105B00000000000000000000000000000000000095 -:105B10000000001000000010000000000000000065 -:105B20000000000000000000000000100000000065 +:105B10000000000000000000000000000000000085 +:105B20000000000000000000000000000000000075 :105B30000000000000000000000000000000000065 -:105B40000000000000000000001000000000000045 -:105B50000000000000000040000000000000008481 -:105B60000008000000000008000000000000000025 -:105B70000000000000000010000000000000008491 -:105B80000084000000000008000000000000000089 -:105B900000080000000000000000000000000000FD -:105BA00000000000000000000008000000000000ED -:105BB000008800000000000000000000000000005D -:105BC00000000000000000000010000000000000C5 +:105B40000000000000000000000000000000000055 +:105B50000000000000000000000000000000000045 +:105B60000000000000000000000000000000000035 +:105B70000000000000000000000000000000000025 +:105B80000000000000000000000000000000000015 +:105B90000000000000000000000000000000000005 +:105BA00000000000000000000000000000000000F5 +:105BB00000000000000000000000000000000000E5 +:105BC00000000000000000000000000000000000D5 :105BD00000000000000000000000000000000000C5 :105BE00000000000000000000000000000000000B5 -:105BF000000800000000000000000000000000009D +:105BF00000000000000000000000000000000000A5 :105C00000000000000000000000000000000000094 -:105C10000000001000100000000000000000000064 +:105C10000000000000000000000000000000000084 :105C20000000000000000000000000000000000074 -:105C30000000004100000000000000000000000023 +:105C30000000000000000000000000000000000064 :105C40000000000000000000000000000000000054 -:105C5000000000000000000000000008000000003C -:105C6000000000A000000000000000000000000094 +:105C50000000000000000000000000000000000044 +:105C60000000000000000000000000000000000034 :105C70000000000000000000000000000000000024 -:105C8000000000000000000000880000000000008C +:105C80000000000000000000000000000000000014 :105C90000000000000000000000000000000000004 :105CA00000000000000000000000000000000000F4 -:105CB00000000000000000000000000800000000DC -:105CC00000000000000000000008000800080008B4 +:105CB00000000000000000000000000000000000E4 +:105CC00000000000000000000000000000000000D4 :105CD00000000000000000000000000000000000C4 :105CE00000000000000000000000000000000000B4 :105CF00000000000000000000000000000000000A4 @@ -202249,7 +206346,7 @@ :105D60000000000000000000000000000000000033 :105D70000000000000000000000000000000000023 :105D80000000000000000000000000000000000013 -:105D900000000000000000000008000000000000FB +:105D90000000000000000000000000000000000003 :105DA00000000000000000000000000000000000F3 :105DB00000000000000000000000000000000000E3 :105DC00000000000000000000000000000000000D3 @@ -202262,14 +206359,14 @@ :105E30000000000000000000000000000000000062 :105E40000000000000000000000000000000000052 :105E50000000000000000000000000000000000042 -:105E60000000000000000000000000080008000022 +:105E60000000000000000000000000000000000032 :105E70000000000000000000000000000000000022 -:105E80000000000000000000000000A000A00000D2 +:105E80000000000000000000000000000000000012 :105E90000000000000000000000000000000000002 -:105EA00000000000000000000000000000A0000052 +:105EA00000000000000000000000000000000000F2 :105EB00000000000000000000000000000000000E2 -:105EC00000000000000000000008000800080008B2 -:105ED00000000010000000000000000000000000B2 +:105EC00000000000000000100000000000000000C2 +:105ED00000000000000000000000000000000000C2 :105EE00000000000000000000000000000000000B2 :105EF00000000000000000000000000000000000A2 :105F00000000000000000000000000000000000091 @@ -202440,16 +206537,16 @@ :106950000000000000000000000000000000000037 :106960000000000000000000000000000000000027 :106970000000000000000000000000000000000017 -:106980000000000000000000000000800000000087 -:106990000000018000100000000000000000000066 +:106980000000000000000000000000000000000007 +:1069900000000000000000000000000000000000F7 :1069A00000000000000000000000000000000000E7 :1069B00000000000000000000000000000000000D7 -:1069C00000000000000100000000000000000000C6 +:1069C00000000000000000000000000000000000C7 :1069D00000000000000000000000000000000000B7 :1069E00000000000000000000000000000000000A7 :1069F0000000000000000000000000000000000097 -:106A00000000000000000000000000000020000066 -:106A10000000000040200000000000000000000016 +:106A00000000000000000000000000000000000086 +:106A10000000000000000000000000000000000076 :106A20000000000000000000000000000000000066 :106A30000000000000000000000000000000000056 :106A40000000000000000000000000000000000046 @@ -202465,23 +206562,23 @@ :106AE00000000000000000000000000000000000A6 :106AF0000000000000000000000000000000000096 :106B00000000000000000000000000000000000085 -:106B10000000004000840008004000080008000059 -:106B2000000800000040000000080000000800000D -:106B3000000000000000000800000008000800003D -:106B4000000800000000000000080000000000082D -:106B5000000000000000000000080000000800081D -:106B60000000000800000000000000080000001005 -:106B700000000000000000000008000000100008F5 -:106B80000000004000000000000000400000000085 +:106B10000000000000000000000000000000000075 +:106B20000000000000000000000000000000000065 +:106B30000000000000000000000000000000000055 +:106B40000000000000000000000000000000000045 +:106B50000000000000000000000000000000000035 +:106B60000000000000000000000000000000000025 +:106B70000000000000000000000000000000000015 +:106B80000000000000000000000000000000000005 :106B900000000000000000000000000000000000F5 -:106BA00000000000000000100000000000000000D5 +:106BA00000000000000000000000000000000000E5 :106BB00000000000000000000000000000000000D5 :106BC00000000000000000000000000000000000C5 :106BD00000000000000000000000000000000000B5 :106BE00000000000000000000000000000000000A5 :106BF0000000000000000000000000000000000095 :106C00000000000000000000000000000000000084 -:106C10000000000000004100000000000000000033 +:106C10000000000000000000000000000000000074 :106C20000000000000000000000000000000000064 :106C30000000000000000000000000000000000054 :106C40000000000000000000000000000000000044 @@ -202494,48 +206591,48 @@ :106CB00000000000000000000000000000000000D4 :106CC00000000000000000000000000000000000C4 :106CD00000000000000000000000000000000000B4 -:106CE00000000000000001000000000000000000A3 +:106CE00000000000000000000000000000000000A4 :106CF0000000000000000000000000000000000094 -:106D00000000000000000000000000000000010082 -:106D10000000000000000040000000000000000033 -:106D20000000000000000000000000400000000023 +:106D00000000000000000000000000000000000083 +:106D10000000000000000000000000000000000073 +:106D20000000000000000000000000000000000063 :106D30000000000000000000000000000000000053 :106D40000000000000000000000000000000000043 :106D50000000000000000000000000000000000033 -:106D600000000000000000000800004000000000DB -:106D70000082000000000000000000000000000091 +:106D60000000000000000000000000000000000023 +:106D70000000000000000000000000000000000013 :106D80000000000000000000000000000000000003 -:106D9000080000000000C008000000000000000023 +:106D900000000000000000000000000000000000F3 :106DA00000000000000000000000000000000000E3 -:106DB00000000000000000000000000000000000D3 +:106DB0000040000000000000000000000000000093 :106DC00000000000000000000000000000000000C3 -:106DD00000000000000000000000000000000000B3 +:106DD0000000004000000000000000000000000073 :106DE00000000000000000000000000000000000A3 -:106DF000000000000000000000080000000000008B +:106DF0000000000000000000000000000000000093 :106E00000000000000000000000000000000000082 :106E10000000000000000000000000000000000072 :106E20000000000000000000000000000000000062 :106E30000000000000000000000000000000000052 :106E40000000000000000000000000000000000042 -:106E500000C0000000000000000000000000000072 -:106E60000000000000000000000000000000000022 -:106E70000000000000000000000000000000000012 +:106E50000000000000000000000000000000000032 +:106E6000000000000008000000000000000000001A +:106E7000000000000000000000000008000000000A :106E80000000000000000000000000000000000002 -:106E900000000000000000000000C0000000000032 +:106E900000000000000000000000000000000000F2 :106EA00000000000000000000000000000000000E2 :106EB00000000000000000000000000000000000D2 :106EC00000000000000000000000000000000000C2 :106ED00000000000000000000000000000000000B2 -:106EE0000000000000000080000000000000000022 -:106EF0000000000000000080000000000000000012 -:106F00000000000000000000000000000000000081 +:106EE00000000000000000000000000000000000A2 +:106EF0000000000000000000000000000000000092 +:106F00000000000000000008000000000000000079 :106F10000000000000000000000000000000000071 -:106F20000000000000000000000000000000000061 +:106F20000000000000000000000000400000000021 :106F30000000000000000000000000000000000051 :106F40000000000000000000000000000000000041 :106F50000000000000000000000000000000000031 -:106F60000000000000000000001000000000000011 -:106F70000000000000000000001000000000000001 +:106F60000000000000000000000000000000000021 +:106F70000000000000000000000000000000000011 :106F80000000000000000000000000000000000001 :106F900000000000000000000000000000000000F1 :106FA00000000000000000000000000000000000E1 @@ -202545,7 +206642,7 @@ :106FE00000000000000000000000000000000000A1 :106FF0000000000000000000000000000000000091 :107000000000000000000000000000000000000080 -:107010000000000000000000000000000000000070 +:10701000000000000000000000000000000000214F :107020000000000000000000000000000000000060 :107030000000000000000000000000000000000050 :107040000000000000000000000000000000000040 @@ -202562,7 +206659,7 @@ :1070F0000000000000000000000000000000000090 :10710000000000000000000000000000000000007F :10711000000000000000000000000000000000006F -:1071200000009000900000000000000040000000FF +:10712000000000000000000000000000000000005F :10713000000000000000000000000000000000004F :10714000000000000000000000000000000000003F :10715000000000000000000000000000000000002F @@ -202570,7 +206667,7 @@ :10717000000000000000000000000000000000000F :1071800000000000000000000000000000000000FF :1071900000000000000000000000000000000000EF -:1071A00000000000000000000000000000000001DE +:1071A00000000000000000000000000000000000DF :1071B00000000000000000000000000000000000CF :1071C00000000000000000000000000000000000BF :1071D00000000000000000000000000000000000AF @@ -202579,23 +206676,23 @@ :10720000000000000000000000000000000000007E :10721000000000000000000000000000000000006E :10722000000000000000000000000000000000005E -:10723000001000000000000000000000000000003E +:10723000000000000000000000000000000000004E :10724000000000000000000000000000000000003E :10725000000000000000000000000000000000002E :10726000000000000000000000000000000000001E :10727000000000000000000000000000000000000E :1072800000000000000000000000000000000000FE :1072900000000000000000000000000000000000EE -:1072A000000000000000000000030000008000005B -:1072B000000000800000000000000000000000004E +:1072A00000000000000000000000000000000000DE +:1072B00000000000000000000000000000000000CE :1072C00000000000000000000000000000000000BE :1072D00000000000000000000000000000000000AE :1072E000000000000000000000000000000000009E :1072F000000000000000000000000000000000008E :10730000000000000000000000000000000000007D :10731000000000000000000000000000000000006D -:10732000000000000000000000000000000000401D -:107330000000000000040020000000000000000029 +:10732000000000000000000000000000000000005D +:10733000000000000000000000000000000000004D :10734000000000000000000000000000000000003D :10735000000000000000000000000000000000002D :10736000000000000000000000000000000000001D @@ -202603,7 +206700,7 @@ :1073800000000000000000000000000000000000FD :1073900000000000000000000000000000000000ED :1073A00000000000000000000000000000000000DD -:1073B00007000000000000000700000000000000BF +:1073B00000000000000000000000000000000000CD :1073C00000000000000000000000000000000000BD :1073D00000000000000000000000000000000000AD :1073E000000000000000000000000000000000009D @@ -202627,24 +206724,24 @@ :10750000000000000000000000000000000000007B :10751000000000000000000000000000000000006B :10752000000000000000000000000000000000005B -:107530000000000000000F0F0F0F00000000AFAFB1 -:10754000AFAF0000000000000000000000000000DD +:10753000000000000000000000000000000000004B +:10754000000000000000000000000000000000003B :10755000000000000000000000000000000000002B :10756000000000000000000000000000000000001B :10757000000000000000000000000000000000000B :1075800000000000000000000000000000000000FB :1075900000000000000000000000000000000000EB :1075A00000000000000000000000000000000000DB -:1075B00000000000000000003C3C3C3C00000000DB -:1075C00005050505000000000000000000000000A7 +:1075B00000000000000000000000000000000000CB +:1075C00000000000000000000000000000000000BB :1075D00000000000000000000000000000000000AB :1075E000000000000000000000000000000000009B :1075F000000000000000000000000000000000008B :10760000000000000000000000000000000000007A :10761000000000000000000000000000000000006A :10762000000000000000000000000000000000005A -:1076300000000000000000000000000000000061E9 -:107640000006000D00000000000000000000000027 +:10763000000000000000000000000000000000004A +:10764000000000000000000000000000000000003A :10765000000000000000000000000000000000002A :10766000000000000000000000000000000000001A :10767000000000000000000000000000000000000A @@ -202652,7 +206749,7 @@ :1076900000000000000000000000000000000000EA :1076A00000000000000000000000000000000000DA :1076B00000000000000000000000000000000000CA -:1076C000000000000F0F0F0F00000000000000007E +:1076C00000000000000000000000000000000000BA :1076D00000000000000000000000000000000000AA :1076E000000000000000000000000000000000009A :1076F000000000000000000000000000000000008A @@ -202660,7 +206757,7 @@ :107710000000000000000000000000000000000069 :107720000000000000000000000000000000000059 :107730000000000000000000000000000000000049 -:107740000000000000000F0F0F0F000000000000FD +:107740000000000000000000000000000000000039 :107750000000000000000000000000000000000029 :107760000000000000000000000000000000000019 :107770000000000000000000000000000000000009 @@ -202708,24 +206805,24 @@ :107A10000000000000000000000000000000000066 :107A20000000000000000000000000000000000056 :107A30000000000000000000000000000000000046 -:107A400000000000000000000008008400000008A2 -:107A500000080008000000080000000000080008FE -:107A6000000800080008000000080084000000086A -:107A7000000800080008008400000008001000084A -:107A8000000800080084000000000008000000005A -:107A900000080008000800880000000000880000BE -:107AA000000800080084000000000008000000003A -:107AB00000080008001000000000000000000000A6 -:107AC0000008008400000000000000000008000022 -:107AD000000000000000000000410000000800005D +:107A40000000000000000000000000000000000036 +:107A50000000000000000000000000000000000026 +:107A60000000000000000000000000000000000016 +:107A70000000000000000000000000000000000006 +:107A800000000000000000000000000000000000F6 +:107A900000000000000000000000000000000000E6 +:107AA00000000000000000000000000000000000D6 +:107AB00000000000000000000000000000000000C6 +:107AC00000000000000000000000000000000000B6 +:107AD00000000000000000000000000000000000A6 :107AE0000000000000000000000000000000000096 -:107AF0000000000000000000000000000003000083 -:107B00000000000000000000000000050000000070 -:107B10000000000000000000001000000000000055 -:107B20000000000500000000000000000000000050 -:107B30000000000000000008000000080000000035 +:107AF0000000000000000000000000000000000086 +:107B00000000000000000000000000000000000075 +:107B10000000000000000000000000000000000065 +:107B20000000000000000000000000000000000055 +:107B30000000000000000000000000000000000045 :107B40000000000000000000000000000000000035 -:107B500041000000000000000000000000000000E4 +:107B50000000000000000000000000000000000025 :107B60000000000000000000000000000000000015 :107B70000000000000000000000000000000000005 :107B800000000000000000000000000000000000F5 @@ -202733,12 +206830,12 @@ :107BA00000000000000000000000000000000000D5 :107BB00000000000000000000000000000000000C5 :107BC00000000000000000000000000000000000B5 -:107BD000000000000000000000000000C0000000E5 -:107BE000000000000800000000000000000000008D +:107BD00000000000000000000000000000000000A5 +:107BE0000000000000000000000000000000000095 :107BF0000000000000000000000000000000000085 :107C00000000000000000000000000000000000074 :107C10000000000000000000000000000000000064 -:107C200000000000000000000000000088000000CC +:107C20000000000000000000000000000000000054 :107C30000000000000000000000000000000000044 :107C40000000000000000000000000000000000034 :107C50000000000000000000000000000000000024 @@ -202749,111 +206846,111 @@ :107CA00000000000000000000000000000000000D4 :107CB00000000000000000000000000000000000C4 :107CC00000000000000000000000000000000000B4 -:107CD0000003000000000000000082000000000817 +:107CD00000000000000000000000000000000000A4 :107CE0000000000000000000000000000000000094 :107CF0000000000000000000000000000000000084 -:107D00000000000000000000000000100000000063 -:107D1000000000000000000000000000000000055E -:107D20000000000000000005000000000005000049 +:107D00000000000000000000000000000000000073 +:107D10000000000000000000000000000000000063 +:107D20000000000000000000000000000000000053 :107D30000000000000000000000000000000000043 :107D40000000000000000000000000000000000033 -:107D50000000080000000000030008000000000010 -:107D60000000000000000000000000000000000013 +:107D50000000000000000000000000000000000023 +:107D6000000000000000000000000000000000080B :107D70000000000000000000000000000000000003 -:107D800000000000000000000000000000000000F3 -:107D900000000000000000000000000000000000E3 -:107DA00000000000000000000000000000000000D3 -:107DB00000000000000000000000000000000000C3 +:107D800000000000000000000000000000000008EB +:107D900000000000000000000000000000040000DF +:107DA00000000000000000000000000300000000D0 +:107DB00000000000000000050000000000040000BA :107DC00000000000000000000000000000000000B3 -:107DD0000000000000210000000000000000000082 +:107DD00000000000000000000000000000000000A3 :107DE0000000000000000000000000000000000093 -:107DF0000000000082000000000000000000000001 -:107E00000000000000000000000000000000000072 -:107E10000000000000000000000000000000002141 -:107E2000000000050005000000000005000500003E -:107E3000000040028811002100080000000000003E -:107E4000000000000000000800000000000000002A +:107DF00000000008000000000082000400000008ED +:107E0000000000080000000000000000000000006A +:107E1000000000080008000000000000008400844A +:107E2000000800000008000000000000000800003A +:107E30000008001000080000000400000084008218 +:107E400000040000008200000000000000000000AC :107E50000000000000000000000000000000000022 -:107E60000000000000000000000000000000000012 -:107E70000000000000000000000000000000000002 +:107E600000000000000000210000000000000000F1 +:107E700000000000000000050000000000000000FD :107E800000000000000000000000000000000000F2 :107E900000000000000000000000000000000000E2 -:107EA00000000000000000000000000000000000D2 -:107EB00000000000000000000000000000000000C2 +:107EA0000000000000000000000000000040002171 +:107EB00000080000000000000000000000000008B2 :107EC00000000000000000000000000000000000B2 -:107ED0000000000000000000C000C100000100829E -:107EE0000100C00001000083C000C1000001008249 -:107EF0000100C00001000083C000C1000001008239 -:107F00000000C00001000083C000C1000001008229 -:107F10000100C00001000083000000000001008596 -:107F20000000000000010085000000000001008545 -:107F300000000000400000830001000000010085F7 -:107F400000000000000100850000000000000000AB -:107F5000000000000000000000008041C14100035B -:107F6000008041008021410000838041C141000325 -:107F7000008041008021410000838041C141000315 -:107F8000008040418041410000838041C1410003A5 -:107F90000080410080214100008300000041000377 -:107FA000008500090011000300850009001100038D -:107FB000008500090041804100820040004100032B -:107FC000008500050041000300850040000000001E -:107FD00000000000000000000000000080C1C1415E -:107FE00000410300000000410000804180C1C14108 -:107FF00000410300000000410000804180C1C141F8 -:1080000000410300008080410041804180C1C141A6 -:1080100000410300000000410000804100004100D9 -:1080200000000085898041000000008089804100B7 -:1080300080000080898941000000008283004100A7 -:1080400000000085858041000000008540000000A0 -:10805000000000000000000000000000000040C11F -:10806000400100010100000000010000820140C148 -:10807000400100010100000000010000820140C138 -:10808000400100010100000420010001820140C103 -:108090004001000101000000000100008201000019 -:1080A00001000000008508080100000000840808A5 -:1080B000C100C000008408080100000000838300A4 -:1080C000010000000084040401000000008540401D +:107ED00000000000000000000000000000000000A2 +:107EE0000000000000000000000000000000000092 +:107EF0000000000000000000000000000000000082 +:107F00000000000000000000000000000000000071 +:107F10000000000000000000000000000000000061 +:107F20000000000000000000000000000000000051 +:107F30000000000000000000000000000000000041 +:107F40000000000000000000000000000000000031 +:107F50000000000000000000000000000000000021 +:107F60000000000000000000000000000000000011 +:107F70000000000000000000000000000000000001 +:107F800000000000000000000000000000000000F1 +:107F900000000000000000000000000000000000E1 +:107FA00000000000000000000000000000000000D1 +:107FB00000000000000000000000000000000000C1 +:107FC00000000000000000000000000000000000B1 +:107FD00000000000000000000000000000000000A1 +:107FE0000008000000000008000000080000000079 +:107FF0000000000000000000000000000000000081 +:108000000000000000000000000000080000000068 +:108010000000000000080000000000000000000058 +:10802000000800A000080008000000000000000098 +:108030000008000000000000000000000000100028 +:108040000000000000A00008000000000000000088 +:108050000000000000000000000000000000000020 +:108060000000000000000000000000000000000010 +:108070000000000000000000000000000000000000 +:1080800000000000000000000000000000000000F0 +:1080900000000000000000000000000000000000E0 +:1080A00000000000000000000000000000000000D0 +:1080B00000000000000000000000000000000000C0 +:1080C00000000000000000000000000000000000B0 :1080D00000000000000000000000000000000000A0 -:1080E00000000000C100C00000000000000000000F -:1080F00000000000C100C0000000000000000000FF -:1081000000000000C100C0000000000000400000AE -:1081100000000000C100C0000000000000000000DE -:10812000000000000000010008080000000001003D -:1081300008080040000011000808000000000100CD -:10814000C0C00000000001000404000000000100A5 -:10815000404000000000000000000000000000009F -:10816000000000410041C1418000000000000041CA -:10817000000000410041C1418000000000000041BA -:10818000000000410041C14180000000002100C109 -:10819000000000410041C14180000000000000419A -:1081A000000000000000000041008080000000008E -:1081B0004100808000800000C1008080000000003D -:1081C000410000000000000041008080000000002D -:1081D000410000000000000000000000000000005E -:1081E0000000000080410080C1C100C10041004189 -:1081F000C1C103C180410080C1C100C10041004133 -:10820000C1C103C180410080C1C100C10041004122 -:10821000C1C103C180410080C1C100C10041004112 -:10822000C1C103C1000200090000090900000002E9 -:108230000000090900000000000009894100000950 -:108240000000020200000002000005050000000915 -:10825000000040400000000000000000000000009E -:10826000000000000000400100C040C100C100014A -:10827000000140C101C1400100C040C100C1000176 -:10828000000140C101C1400100C040C100C1000166 -:10829000000140C101C1400100C040C100C1000156 -:1082A000000140C101C1000000000000000000000A -:1082B00000000000000000000000000000100100AD -:1082C00000000000010100000000000000000000AC +:1080E0000000000000000000000000000000000090 +:1080F0000000000000000000000000000000000080 +:10810000000000000000000000000000000000006F +:10811000000000000000000000000000000000005F +:10812000000000000000000000000000000000004F +:10813000000000000000000000000000000000003F +:10814000000000000000000000000000000000002F +:10815000000000000000000000000000000000001F +:10816000000000000000000000000000000000000F +:1081700000000000000000000000000000000000FF +:1081800000000000000000000000000800000000E7 +:1081900000000000000000000000000000000000DF +:1081A00000000000000000000000000000000000CF +:1081B00000000000000000000000000000000000BF +:1081C00000000000000000000000000000000000AF +:1081D000000000000000000000000000000000009F +:1081E0000000000800A000000000000800000000DF +:1081F000000000000000000000000000000000007F +:1082000000000008008400000000000800000000DA +:10821000000000000000000000000000000000005E +:10822000000000000000000000000000000000004E +:10823000000000000000000000000000000000003E +:10824000000000000000000000000000000000002E +:10825000000000000000000000000000000000001E +:10826000000000000000000000000000000000000E +:1082700000000000000000000000000000000000FE +:1082800000000000000000000000000000000000EE +:1082900000000000000000000000000000000000DE +:1082A00000000000000000000000000000000000CE +:1082B00000000000000000000000000000000000BE +:1082C00000000000000000000000000000000000AE :1082D000000000000000000000000000000000009E -:1082E00000000000000000000000000022004842E2 -:1082F0000000000000004842000000002200484248 -:108300000000000000004842000000002200484237 -:108310000000000000004842000000002200484227 -:1083200000000000000048420000818100000000C1 -:10833000000081810000000000000000000000003B -:108340000000818100000000000081810000000029 -:10835000000081810000000000000000000000001B +:1082E000000000000000000000000000000000008E +:1082F000000000000000000000000000000000007E +:10830000000000000000000000000000000000006D +:10831000000000000000000000000000000000005D +:10832000000000000000000000000000000000004D +:10833000000000000000000000000000000000003D +:10834000000000000000000000000000000000002D +:10835000000000000000000000000000000000001D :10836000000000000000000000000000000000000D :1083700000000000000000000000000000000000FD :1083800000000000000000000000000000000000ED @@ -202862,31 +206959,31 @@ :1083B00000000000000000000000000000000000BD :1083C00000000000000000000000000000000000AD :1083D000000000000000000000000000000000009D -:1083E000000000000000000000000000000000018C -:1083F00008800000000000000010000000000001E4 -:10840000010000000000000000000000000000006B -:1084100000800000000000000000000000000000DC -:1084200040000000000000000060000000000000AC -:10843000000014A894AA0000000014A894AA000048 -:10844000000014A814A80000000014A894AA0000BA -:10845000000014A894AA0000000014A894AA000028 +:1083E000000000000000000000000000000000008D +:1083F000000000000000000000000000000000007D +:10840000000000000000000000000000000000006C +:10841000000000000000000000000000000000005C +:10842000000000000000000000000000000000004C +:10843000000000000000000000000000000000003C +:10844000000000000000000000000000000000002C +:10845000000000000000000000000000000000001C :10846000000000000000000000000000000000000C :1084700000000000000000000000000000000000FC :1084800000000000000000000000000000000000EC :1084900000000000000000000000000000000000DC :1084A00000000000000000000000000000000000CC -:1084B0000020000000000400002000000000040074 -:1084C0000020000000000400002000000000040064 -:1084D0000020000000000400002000000000040054 +:1084B00000000000000000000000000000000000BC +:1084C00000000000000000000000000000000000AC +:1084D000000000000000000000000000000000009C :1084E000000000000000000000000000000000008C :1084F000000000000000000000000000000000007C :10850000000000000000000000000000000000006B :10851000000000000000000000000000000000005B :10852000000000000000000000000000000000004B -:1085300000001004008001002008100400800100E9 -:1085400020081004008001002008100400800100B1 -:1085500020081004008001002008100400800100A1 -:1085600020080000000000000000000000000000E3 +:10853000000000000000000000000000000000003B +:10854000000000000000000000000000000000002B +:10855000000000000000000000000000000000001B +:10856000000000000000000000000000000000000B :1085700000000000000000000000000000000000FB :1085800000000000000000000000000000000000EB :1085900000000000000000000000000000000000DB @@ -202899,18 +206996,18 @@ :10860000000000000000000000000000000000006A :10861000000000000000000000000000000000005A :10862000000000000000000000000000000000004A -:1086300000000000000003008000040000000300B0 -:10864000800004000000030080000400000003001C -:10865000800004000000030080000400000003000C -:108660008000040000000000000000000000000086 +:10863000000000000000000000000000000000003A +:10864000000000000000000000000000000000002A +:10865000000000000000000000000000000000001A +:10866000000000000000000000000000000000000A :1086700000000000000000000000000000000000FA :1086800000000000000000000000000000000000EA :1086900000000000000000000000000000000000DA :1086A00000000000000000000000000000000000CA -:1086B00000000000000000000000000C1DB89DB686 -:1086C0000000000C1DB89DB6000000040DB88DB36D -:1086D0000000000C1DB89DB60000000C1DB89DB632 -:1086E0000000000C1DB89DB6000000000000000056 +:1086B00000000000000000000000000000000000BA +:1086C00000000000000000000000000000000000AA +:1086D000000000000000000000000000000000009A +:1086E000000000000000000000000000000000008A :1086F000000000000000000000000000000000007A :108700000000000000000000000000000000000069 :108710000000000000000000000000000000000059 @@ -202923,32 +207020,32 @@ :1087800000000000000000000000000000000000E9 :1087900000000000000000000000000000000000D9 :1087A00000000000000000000000000000000000C9 -:1087B0000000000000000000000000000000009029 -:1087C0009A000000000000909A0000000000009055 -:1087D0009A000000000000909A0000000000009045 -:1087E0009A000000000000909A00000000000000C5 -:1087F000000000000000000000000000FFFFFFFF7D -:10880000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF78 -:10881000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF68 -:10882000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF58 -:10883000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF48 -:10884000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF38 -:10885000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF28 -:10886000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF18 -:10887000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF08 -:10888000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8 -:10889000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8 -:1088A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD8 -:1088B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC8 -:1088C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB8 -:1088D000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA8 -:1088E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF98 -:1088F000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF88 +:1087B00000000000000000000000000000000000B9 +:1087C00000000000000000000000000000000000A9 +:1087D0000000000000000000000000000000000099 +:1087E0000000000000000000000000000000000089 +:1087F0000000000000000000000000000000000079 +:108800000000000000000000000000000000000068 +:108810000000000000000000000000000000000058 +:108820000000000000000000000000000000000048 +:108830000000000000000000000000000000000038 +:108840000000000000000000000000000000000028 +:108850000000000000000000000000000000000018 +:108860000000000000000000000000000000000008 +:1088700000000000000000000000000000000000F8 +:1088800000000000000000000000000000000000E8 +:1088900000000000000000000000000000000000D8 +:1088A00000000000000000000000000000000000C8 +:1088B00000000000000000000000000000000000B8 +:1088C00000000000000000000000000000000000A8 +:1088D0000000000000000000000000000000000098 +:1088E0000000000000000000000000000000000088 +:1088F0000000000000000000000000000000000078 :108900000000000000000000000000000000000067 :108910000000000000000000000000000000000057 :108920000000000000000000000000000000000047 :108930000000000000000000000000000000000037 -:1089400000001001004810010000000000000000BD +:108940000000000000000000000000000000000027 :108950000000000000000000000000000000000017 :108960000000000000000000000000000000000007 :1089700000000000000000000000000000000000F7 @@ -202956,7 +207053,7 @@ :1089900000000000000000000000000000000000D7 :1089A00000000000000000000000000000000000C7 :1089B00000000000000000000000000000000000B7 -:1089C0000000000000000092000000000000000015 +:1089C00000000000000000000000000000000000A7 :1089D0000000000000000000000000000000000097 :1089E0000000000000000000000000000000000087 :1089F0000000000000000000000000000000000077 @@ -202964,7 +207061,7 @@ :108A10000000000000000000000000000000000056 :108A20000000000000000000000000000000000046 :108A30000000000000000000000000000000000036 -:108A400000000000000000000124000400000000FD +:108A40000000000000000000000000000000000026 :108A50000000000000000000000000000000000016 :108A60000000000000000000000000000000000006 :108A700000000000000000000000000000000000F6 @@ -202972,15 +207069,15 @@ :108A900000000000000000000000000000000000D6 :108AA00000000000000000000000000000000000C6 :108AB00000000000000000000000000000000000B6 -:108AC00081000000000000000000000000818181A2 -:108AD0008181818100000000000000000000000092 +:108AC00000000000000000000000000000000000A6 +:108AD0000000000000000000000000000000000096 :108AE0000000000000000000000000000000000086 :108AF0000000000000000000000000000000000076 :108B00000000000000000000000000000000000065 :108B10000000000000000000000000000000000055 :108B20000000000000000000000000000000000045 :108B30000000000000000000000000000000000035 -:108B40000000000000000000000100000000000024 +:108B40000000000000000000000000000000000025 :108B50000000000000000000000000000000000015 :108B60000000000000000000000000000000000005 :108B700000000000000000000000000000000000F5 @@ -202993,78 +207090,78 @@ :108BE0000000000000000000000000000000000085 :108BF0000000000000000000000000000000000075 :108C00000000000000000000000000000000000064 -:108C10000000000000000000000000000000000054 -:108C20000000000000000000000000000000000044 -:108C30000000000000000000000000000000000034 +:108C100000000000000000000000018000000000D3 +:108C2000000000000000000000000000000800003C +:108C300000000000000000000000018000010000B2 :108C40000000000000000000000000000000000024 :108C50000000000000000000000000000000000014 :108C60000000000000000000000000000000000004 :108C700000000000000000000000000000000000F4 :108C800000000000000000000000000000000000E4 -:108C900000000000000000000000000000000000D4 +:108C900000000000000000000000000020080000AC :108CA00000000000000000000000000000000000C4 -:108CB00000000000000000000000000000000000B4 +:108CB000000000000000000000000000100400019F :108CC00000000000000000000000000000000000A4 :108CD0000000000000000000000000000000000094 -:108CE0000000000000000008000000080000000074 -:108CF0000000000000000000000000000000000074 -:108D00000008000000080008000000080000000043 +:108CE0000000000000000000000000000000000084 +:108CF000000000080000000000000008000800005C +:108D00000000000000000000000000000000000063 :108D10000000000000000000000000000000000053 :108D20000000000000000000000000000000000043 -:108D30000000000000000021000000000000000012 -:108D40000000000000000008000000080000000013 -:108D50000000000000000000000000000000000013 -:108D60000000000000000000000000000000000003 -:108D700000000000000000050000000000000000EE -:108D800000000000000000000000000000000000E3 +:108D30000000000000000000000000000000000033 +:108D4000000100000008000000000000000000001A +:108D500000000000000000000000110003000500FA +:108D600008000000001000000000000000000000EB +:108D700000000003000000000000090003002100C3 +:108D800009000000000000000000000000000000DA :108D900000000000000000000000000000000000D3 :108DA00000000000000000000000000000000000C3 -:108DB00000000000000000000000000000000000B3 -:108DC00000000000000000000000000000000000A3 -:108DD0000000000000000000000000000000000093 -:108DE0000000000000000000000000000000000083 -:108DF0000000000000000000000000000000000073 -:108E00000000000000000000000000000000000062 -:108E10000000000000000000000000000000000052 -:108E20000000000000000000000000000000000042 -:108E30000000000000000000000000000000000032 -:108E40000000000000000000000000000000000022 -:108E50000000000000000000000000000000000012 -:108E60000000000000000000000000000000000002 -:108E700000000000000000000000000000000000F2 -:108E800000000000000000000000000000000000E2 +:108DB0000000000000840000008400080008008219 +:108DC0000084000100080004000000000000000012 +:108DD000001000000008000800000000880890084B +:108DE000A00880000008000800000008000000083B +:108DF0000008000800080008000000009008900823 +:108E00008408840000000000000000000000000052 +:108E10000000000000000000000000000000002131 +:108E20000005000800020002000000000005000527 +:108E30000021000000000000000000000008000009 +:108E400000030021000100020008000000030000F0 +:108E500000000010000800050000000000000021D4 +:108E60000000002100210021000900050000002170 +:108E70000000000900210041000000400000002126 +:108E800000020002002100000000000000000000BD :108E900000000000000000000000000000000000D2 :108EA00000000000000000000000000000000000C2 :108EB00000000000000000000000000000000000B2 -:108EC00000000000000000000000000000000000A2 +:108EC0000000000800000001000000000000000099 :108ED0000000000000000000000000000000000092 :108EE0000000000000000000000000000000000082 -:108EF0000000000000000000000000000000000072 +:108EF0000000000000000002000000000000000070 :108F00000000000000000000000000000000000061 :108F10000000000000000000000000000000000051 :108F20000000000000000000000000000000000041 :108F30000000000000000000000000000000000031 :108F40000000000000000000000000000000000021 :108F50000000000000000000000000000000000011 -:108F600000000000000000000000000000000008F9 -:108F700000000000000000000000000000030000EE -:108F800000000008000000000008000000030000CE -:108F900000000008000000000000000000000000C9 -:108FA00000000000000000000000000000000000C1 -:108FB00000000000000000000000000000000000B1 -:108FC00000000000000000000000000000000000A1 -:108FD0000000000000000000000000000000000091 -:108FE0000000000000000000000000000000000081 -:108FF0000000000000000000000000000000000071 -:109000000000000000000000000000000000000060 -:109010000000000000000000000000000000000050 -:109020000000000000000000000000000000000040 -:109030000000000000000000000000000000000030 -:109040000000000000000000000000000000000020 -:109050000000000000000000000000000000000010 -:1090600000000000000000000000000000000008F8 -:1090700000000000000000000000000000000003ED -:1090800000000000000000000000000300000000DD +:108F600000000000000000020020000000000000DF +:108F700000000000000000000000000000000000F1 +:108F800000000000000000020000000000000000DF +:108F900000000000000000000000000000000000D1 +:108FA00000000000000000000000000800000000B9 +:108FB00000000000000000000000000800000000A9 +:108FC00000000000000000A0000000000000000001 +:108FD0000000000800000000000000000000000089 +:108FE000000000000000000000010001000000106F +:108FF0000008000000000000000000000000000069 +:10900000000000000000000000010000000000005F +:10901000000000000000002100000000000000032C +:1090200000000000000800080000000090000000A0 +:109030002000000000000005000000000000000506 +:10904000000000000000000000000002000000001E +:109050000005000000000000000000080000000003 +:1090600000000000000000050000000000000000FB +:1090700000000004000000000000004000030000A9 +:10908000004000210000000020002000000000003F :1090900000000000000000000000000000000000D0 :1090A00000000000000000000000000000000000C0 :1090B00000000000000000000000000000000000B0 @@ -203073,14 +207170,14 @@ :1090E0000000000000000000000000000000000080 :1090F0000000000000000000000000000000000070 :10910000000000000000000000000000000000005F -:10911000000000000000000000000000000000004F -:10912000000000000000000000000000000000003F -:10913000000000000000000000000000000000002F -:10914000000000000000000000000000000000001F -:10915000000000000000000000000000000000000F -:109160000000000088000000000000000000000077 -:1091700000000000000000000000000000000000EF -:1091800000000000000000000000000000000000DF +:1091100000000000000000008800000000000000C7 +:1091200000000008000300080021000500080000FE +:1091300000000008000500008800C00000080000D2 +:10914000001100080005002100000008000800418F +:109150000000000000000000000000000008000007 +:109160000000000000000021000000050041000098 +:1091700000000003000000210003000000000003C5 +:1091800000000000000000000000000000210000BE :1091900000000000000000000000000000000000CF :1091A00000000000000000000000000000000000BF :1091B00000000000000000000000000000000000AF @@ -203089,80 +207186,80 @@ :1091E000000000000000000000000000000000007F :1091F000000000000000000000000000000000006F :10920000000000000000000000000000000000005E -:10921000000000000000000000000000000000004E -:10922000000000000000000000000000000000003E -:10923000000000000000000000000000000000002E -:10924000000000000000000000000000800000009E -:10925000000200000000000000000000000000000C -:10926000000000000000000000000000000380007B -:1092700000000000000080000000000000028000EC -:1092800000000000001100000000000000000000CD -:1092900000000000000000000000000000000000CE -:1092A00000000000000000000000000000000000BE -:1092B00000000000000000000000000000000200AC -:1092C000000000000000000000000000000040005E -:1092D000000000000000000000000000000000008E -:1092E000000000000000000000000000000000017D -:1092F0000800000000000000100000000000000056 -:109300000800000000000000000000000000000055 -:10931000000000000000000000000000000000004D -:10932000000000000000000000000000000000003D -:10933000000000000000000000000000000000002D -:10934000000000000000000000000000000000001D -:10935000000000000000000000000000000000000D -:1093600000000000000000000000000000000000FD -:1093700000000000000000000000000000000000ED -:1093800000000000000000000000000000000000DD -:1093900000000000000000000000000000000000CD -:1093A00000000000000000000000000000000000BD -:1093B00000000000000000000000000000000000AD -:1093C000000000000000000000000000000000009D -:1093D000000000000000000000000000000000008D -:1093E000000000000000000000000000000000007D -:1093F000000000000000000000000000000000006D -:10940000000000000000000000000000000000005C -:10941000000000000000000000000000000000004C -:10942000000000000000000000000000000000003C -:10943000000000000000000000000000000000002C -:10944000000000000000000000000000000000001C -:10945000000000000000000000000000000000000C -:1094600000000000000000000000000000020000FA -:1094700000000000000000000000000000000000EC -:1094800000000000000000000000000000000000DC -:1094900000000000000000000000000000000000CC -:1094A00000000000000000000000000000000000BC -:1094B00000000000000000000000000000000000AC -:1094C000000000000000000000000000000000009C -:1094D000000000000000000000000000000000008C -:1094E000000000000000000000000000000000007C -:1094F000000000000000000000000000000000006C -:10950000000000000000000000000000000000005B -:10951000000000000000000000000000000000004B -:10952000000000000000000000000000000000003B -:10953000000000000000000000000000000000002B -:109540000000000000000000000000000000000714 -:109550000000000000000000000000000000000704 -:1095600000000000000000000000000000000000FB -:1095700000000000000000000000000000000000EB -:1095800000000000000000000000000000000000DB -:1095900000000000000000000000000000000000CB -:1095A00000000000000000000000000000000000BB -:1095B00000000000000000000000000000000000AB -:1095C000000000000000000000000000000000009B -:1095D000000000000000000000000000000000008B -:1095E000000000000000000000000000000000007B -:1095F000000000000000000000000000000000006B -:10960000000000000000000000000000000000005A -:10961000000000000000000000000000000000004A -:10962000000000000000000000000000000000003A -:10963000000000000000000C00000000000000001E -:10964000000000000000000000000000000000001A -:109650000001000000000000000000000000000009 -:1096600000010000000000000000000000000000F9 -:1096700000000000000000000000000000000000EA -:1096800000000000000000000000000000000000DA -:1096900000000000000000000000000000000000CA -:1096A00000000000000000000000000000000000BA +:109210000000000000010001000100C00001C001C9 +:1092200000C000890100040100400082000100012B +:1092300000C0000000010001000100C00001C001E9 +:1092400000C00003000100010020008800010001AF +:1092500000C1000000020000C1000001C182010045 +:10926000C0000140C089C000C0010010C0820000E1 +:10927000C000001190000000C1000001C182010087 +:10928000C0000141C089C000C0010002C0820000CE +:10929000C0000011900000410041004100910041D8 +:1092A0008041008409414109024100800080004161 +:1092B0000041008200000041004100410091004156 +:1092C0008041008909C10040054100800000004143 +:1092D00000410085000000000041C1410041C190F3 +:1092E0004141804141828403800882030080808064 +:1092F00000418041080300000041C1410041C1908C +:1093000041418041418884038008820300008080BD +:1093100000418041088300004100030000000080FC +:1093200041008900000003000500C10000419000D9 +:109330004100C100008000004100030000000080E7 +:1093400041009000000003000500418000418900B9 +:109350004141C1000080808000014100024100C104 +:109360000000414182410041084120C1024100808A +:1093700083804100C14100C180084100114100C10A +:109380000000414182410041204120C10441008050 +:1093900083804100C14100C180080100010000003C +:1093A00000C00100C00000000100840008C000C12E +:1093B000C0000500C100008402020100010000009D +:1093C00000C00100C000000001008800881000C13A +:1093D000C0000501C1000084101000000000000161 +:1093E00000C10000000140010011010102C110890B +:1093F00000C083C01000400100C1820100000001D4 +:1094000000C10000000140010011000102C11089EB +:1094100000C083C08200400100C1820100C0000181 +:10942000C0C100000000000100C0C0030003000133 +:1094300000C10000000000010000000000C00001A9 +:10944000C0C100000000000100C0C0020103000113 +:1094500000C100000000000100000000000000400A +:109460000000C183000000000000C18210830004DE +:109470000000C140000000000000C00100000040EA +:109480000000C183000000000000C18210830002C0 +:109490000000C140000000000000C100000000808A +:1094A000004180C1000000000041008980030041AC +:1094B000004100C1000000000041000200000080E7 +:1094C000004180C100000000004100918021414125 +:1094D000004100C100000000004100110000000038 +:1094E00000800041C183000000000041C18400836E +:1094F00000410041C1C1000000000041890300009B +:1095000000800041C183000000000041C190008341 +:1095100000410041C1C10000000000219041000055 +:10952000C100804180C10080410000051100410060 +:10953000C1000000800900004100000080004100DF +:10954000C100800080C100004102000041004100D4 +:10955000C1000000801000004100000080004100B8 +:109560000000C182804180C100004100004109C16A +:1095700003C1C141008080C10000411000418080D2 +:109580001089C191804180C100004100004111C19A +:1095900003C1C141008080C10000414100008080C2 +:1095A0001003C1004001C0C100820100100102008F +:1095B0000100C1101000C000000001000000C00048 +:1095C0000100C1004000C0C10000010010001000F7 +:1095D0000100C1101000C000000001000000C00028 +:1095E0000100000040C02001824000000000040192 +:1095F00010C101C1409188C040C1000000000001BD +:1096000040C0011040C02001824000000000020163 +:1096100002C101C1409188C040C1000000010000AA +:1096200010C00188000000000000D04200000000CF +:109630000000C813411200480700C12300000000C9 +:1096400000000000000000000000004200000000D8 +:109650000000C813411200480700D023000000009A +:109660000000C100000000000000000048420000AF +:1096700000000000484248420060060048420000E6 +:1096800000000000484200000000000048420000C6 +:1096900000000000484248420060060048420000C6 +:1096A0000000000048420000000000000000000030 :1096B00000000000000000000000000000000000AA :1096C000000000000000000000000000000000009A :1096D000000000000000000000000000000000008A @@ -203173,86 +207270,86 @@ :109720000000000000000000000000000000000039 :109730000000000000000000000000000000000029 :109740000000000000000000000000000000000019 -:1097500000000000100400000000000000000000F5 -:1097600000000000100400000000000000000000E5 +:109750000000000000000000000000000000000009 +:1097600000000000000000000000000000000000F9 :1097700000000000000000000000000000000000E9 :1097800000000000000000000000000000000000D9 :1097900000000000000000000000000000000000C9 -:1097A00000000000000000000000000000000000B9 +:1097A00000000000000000000000757B00000000C9 :1097B00000000000000000000000000000000000A9 -:1097C0000000000000000000000000000000000099 +:1097C0000000000000000000DEAE757B000000001D :1097D0000000000000000000000000000000000089 -:1097E0000000000000000000000000000000000079 +:1097E0000000000000000000DEAE0000757B0000FD :1097F0000000000000000000000000000000000069 -:109800000000000000000000000000000000000058 +:1098000000000000000000000000DEAE757B0000DC :109810000000000000000000000000000000000048 -:109820000000000000000000000000000000000038 -:109830000000000000000000000000000000000028 -:109840000000000000000000000000000000000018 -:109850000000000000000000000000000000000008 -:1098600000000000000000000000000000000000F8 -:1098700000000000000000000000000000000000E8 -:1098800000000000000000000000000000000000D8 -:1098900000000000000000000000000000000000C8 -:1098A00000000000000000000000000000000000B8 +:1098200000000000000000000000DEAE60C6030083 +:109830000000000000000031E00000000000000017 +:109840000C0000000000000000C0630660C60300BA +:109850000000000000000031E000000000000000F7 +:109860000C0000000000000000C06306000067E676 +:1098700043400000000000000231E0000000000052 +:1098800000000C4000000000000002C267E667E62E +:1098900043400000000000000231E0000000000032 +:1098A00000000C4000000000000002C267E600005B :1098B00000000000000000000000000000000000A8 :1098C0000000000000000000000000000000000098 -:1098D0000000000000000000000400000000000084 -:1098E0000000000000000000000400000000000074 -:1098F0000000000000000000000000000000000068 -:1099000000000000000080000000000400000000D3 -:10991000000000040000800000000004000080003F -:109920000000000000000000000000000000000037 +:1098D0000000000000000000000000000000000088 +:1098E0000000000000000000000000000000000078 +:1098F0000000000000000008000000000000000060 +:109900000000000000000000000000000000000057 +:109910000000000000000000001000000000000037 +:109920000000000000080000000000000000080027 :109930000000000000000000000000000000000027 :109940000000000000000000000000000000000017 :109950000000000000000000000000000000000007 :1099600000000000000000000000000000000000F7 :1099700000000000000000000000000000000000E7 -:1099800000000002000000000000000000000000D5 -:109990004000000200000000400000020000000043 -:1099A0004000000000000000000000000000000077 +:1099800000000000000000000000000000000000D7 +:1099900000000800000000000000000000000000BF +:1099A00000000000000000000000000000000000B7 :1099B00000000000000000000000000000000000A7 :1099C0000000000000000000000000000000000097 -:1099D0000000000000000000000000000080800087 -:1099E0000000000000000000000000000080800077 +:1099D0000000000000000000000000000000000087 +:1099E0000000000000000000000000000000000077 :1099F0000000000000000000000000000000000067 -:109A00000000000000000000100000000000000046 -:109A10008000000000000000900000000000000036 -:109A200090000000000000000000000000000000A6 +:109A00000000000000000000000000000000000056 +:109A10000000000000000000000000000000000046 +:109A20000000000000000000000000000000000036 :109A30000000000000000000000000000000000026 :109A40000000000000000000000000000000000016 :109A50000000000000000000000000000000000006 -:109A600000000000000000000000000000000000F6 -:109A700000000000000000000000000000000000E6 -:109A800000000000000000000000000000000000D6 -:109A900000000000000000000000000000000000C6 -:109AA00000000000000000000000000000000000B6 -:109AB00000000000000000000000000000000000A6 -:109AC0000000000000000000000000000000000096 -:109AD0000000000000000000000000000000000086 -:109AE0000000000000000000000000000000000076 -:109AF0000000000000000000000000000000000066 -:109B00000000000000000000000000000000000055 -:109B10000000000000000000000000000000000045 -:109B20000000000000000000000000000000000035 -:109B30000000000000000000000000000000000025 -:109B40000000000000000000000000000000000015 -:109B50000000000000000000000000000000000005 -:109B600000000000000000000000000000000000F5 -:109B700000000000000000000000000000000000E5 -:109B800000000000000000000000000000000000D5 -:109B900000000000000000000000000000000000C5 -:109BA00000000000200021002000200020002000F4 -:109BB00000002000200020002000200020002000C5 -:109BC0002000000000000000000000000000000075 +:109A600000000000000000000000000000000010E6 +:109A700000000000000000000008000000000010CE +:109A800000000000000000080000000000000000CE +:109A9000008800000000000000100084000800089A +:109AA0000000000000000008008400040000000026 +:109AB000000000000008000000000000000000009E +:109AC0000000000000000000000000000000004155 +:109AD000000000000000000000080000000000215D +:109AE0000000000000000000000000000000000571 +:109AF000000000000000000000000008000000005E +:109B00000000000000000000000300000000000052 +:109B100000000000004100000000000800000000FC +:109B20000000000000000011000000000003000021 +:109B300001000000004100000000000000000000E3 +:109B40000000000000000000000000A00000000075 +:109B500000A000080010000000000000000000004D +:109B60000008008200000000008800A000C0000083 +:109B700000840010008400000000000000000008C5 +:109B800000082010000000A00000000000080008ED +:109B900000100002000000000040000800880000E3 +:109BA00040002000000000A00000000000A000080D +:109BB00000080284000000002000000000000000F7 +:109BC0000000000000000000000000000000000095 :109BD0000000000000000000000000000000000085 :109BE0000000000000000000000000000000000075 :109BF0000000000000000000000000000000000065 :109C00000000000000000000000000000000000054 :109C10000000000000000000000000000000000044 -:109C200000000000000080008200800080008000B2 -:109C3000800000008000800880008000800080009C -:109C40008000800000000000000000000000000014 +:109C20000000000000000000000000000000000034 +:109C30000000000000000000000000000000000024 +:109C40000000000000000000000000000000000014 :109C50000000000000000000000000000000000004 :109C600000000000000000000000000000000000F4 :109C700000000000000000000000000000000000E4 @@ -203261,46 +207358,46 @@ :109CA00000000000000000000000000000000000B4 :109CB00000000000000000000000000000000000A4 :109CC0000000000000000000000000000000000094 -:109CD0000000000000000000000000000000000084 -:109CE0000000000000000000000000000000000074 -:109CF0000000000000000000000000000000000064 +:109CD0000000008000000000000000000000000004 +:109CE000000000000000000000000000000000086C +:109CF00000000080000000000000000000410000A3 :109D00000000000000000000000000000000000053 -:109D10000000000000000000000000000000000043 +:109D1000000000000000000000000000000000083B :109D20000000000000000000000000000000000033 -:109D30000000000000000000000000000000000023 -:109D40000000000000000000000000000000000013 -:109D50000000000000000000000000000000000003 -:109D600000000000000000000000000000000000F3 -:109D700000000000000000000000000000000000E3 -:109D800000000000000000000000000000000000D3 -:109D900000000000000000000000000000000000C3 -:109DA00000000000000000000000000000000000B3 -:109DB00000000000000000000100010000000000A1 -:109DC000000000000000000000000000020002008F -:109DD0000200000000000000000000000000000081 +:109D300000000000000000000000000800400200D9 +:109D4000000000000000000000A000000000000073 +:109D5000000000000010000000C000000000000033 +:109D6000000000000000000000C000000000000033 +:109D700000820084001000000000000000000000CD +:109D800000000000000000000000000800000000CB +:109D90000040200000A0008800000000000011002A +:109DA00000A00000000000082000000800000000E3 +:109DB0000084200000840088000000A01100200022 +:109DC0000090000000000000000000000000000003 +:109DD0000000000000000000000000000000000083 :109DE0000000000000000000000000000000000073 -:109DF0000000000000000000000000000000000063 -:109E00000000000000000000000000000000000052 +:109DF000000000000000000000000000000800005B +:109E00000000000000210000000800000000000029 :109E10000000000000000000000000000000000042 :109E20000000000000000000000000000000000032 -:109E30000000000000000000000020000200000000 -:109E40000000000000000000000000000000800092 -:109E50008000800000000000000000000000000002 +:109E3000000000000000000000000003000000051A +:109E40000000000000000000000000000000000012 +:109E50000000000000000000000000000000000002 :109E600000000000000000000000000000000000F2 :109E700000000000000000000000000000000000E2 :109E800000000000000000000000000000000000D2 :109E900000000000000000000000000000000000C2 -:109EA00000080000000000000000000000000000AA -:109EB0002000000400000004200000000004400016 -:109EC0002000000000000000200000000000000052 +:109EA00000000000000000000000000000000000B2 +:109EB00000000000000000000000000000000000A2 +:109EC0000000000000000000000000000000000092 :109ED0000000000000000000000000000000000082 :109EE0000000000000000000000000000000000072 :109EF0000000000000000000000000000000000062 :109F00000000000000000000000000000000000051 -:109F100000000000000000000000000000820000BF +:109F10000000000000000000000000000000000041 :109F20000000000000000000000000000000000031 -:109F30000000800000010000000080000000000020 -:109F40000000800000000000000080000000000011 +:109F30000000000000000000000000000000000021 +:109F40000000000000000000000000000000000011 :109F50000000000000000000000000000000000001 :109F600000000000000000000000000000000000F1 :109F700000000000000000000000000000000000E1 @@ -203308,191 +207405,191 @@ :109F900000000000000000000000000000000000C1 :109FA00000000000000000000000000000000000B1 :109FB00000000000000000000000000000000000A1 -:109FC0000080010000000000000000000000000010 -:109FD000000002000000000000000000000000007F +:109FC0000000000000000000000000000000000091 +:109FD0000000000000000000000000000000000081 :109FE0000000000000000000000000000000000071 :109FF0000000000000000000000000000000000061 :10A000000000000000000000000000000000000050 :10A010000000000000000000000000000000000040 :10A020000000000000000000000000000000000030 :10A030000000000000000000000000000000000020 -:10A0400000000040200000000000000000000000B0 -:10A050000000000080000000000000000000000080 +:10A040000000000000000000000000000000000010 +:10A050000000000000000000000000000000000000 :10A0600000000000000000000000000000000000F0 :10A0700000000000000000000000000000000000E0 :10A0800000000000000000000000000000000000D0 -:10A0900000000000000000000000000000020000BE +:10A0900000000000000000000000000000000000C0 :10A0A00000000000000000000000000000000000B0 -:10A0B00000000000000010C000000000000041C1CE -:10A0C00000000001000040C000000001000041C18C -:10A0D00000000001000000C00002000000000000BD +:10A0B00000000000000000000000000000000000A0 +:10A0C0000000000000000000000000000000000090 +:10A0D0000000000000000000000000000000000080 :10A0E0000000000000000000000000000000000070 :10A0F0000000000000000000000000000000000060 :10A10000000000000000000000000000000000004F :10A11000000000000000000000000000000000003F :10A12000000000000000000000000000000000002F -:10A13000000000000000000080800000000000001F -:10A14000919100000009000088882100000900208A -:10A150009191000000090003008000000000000051 +:10A13000000000000000000000000000000000001F +:10A14000000000000000000000000000000000000F +:10A1500000000000000000000000000000000000FF :10A1600000000000000000000000000000000000EF :10A1700000000000000000000000000000000000DF :10A1800000000000000000000000000000000000CF :10A1900000000000000000000000000000000000BF :10A1A00000000000000000000000000000000000AF -:10A1B0000000000000000000000009001100111163 -:10A1C0008000090000211111800008000000111119 -:10A1D00080000900002111118300000080020000AE -:10A1E00080000000000000000000000000000000EF +:10A1B000000000000000000000000000000000009F +:10A1C000000000000000000000000000000000008F +:10A1D000000000000000000000000000000000007F +:10A1E000000000000000000000000000000000006F :10A1F000000000000000000000000000000000005F :10A20000000000000000000000000000000000004E :10A21000000000000000000000000000000000003E :10A22000000000000000000000000000000000002E -:10A23000000000000000000000000000010000001D -:10A240000100C000018800000101C00000080000FA -:10A250000101C000010000000101C0000000100069 -:10A260000000C0000000000000000000000000002E +:10A23000000000000000000000000000000000001E +:10A24000000000000000000000000000000000000E +:10A2500000000000000000000000000000000000FE +:10A2600000000000000000000000000000000000EE :10A2700000000000000000000000000000000000DE :10A2800000000000000000000000000000000000CE :10A2900000000000000000000000000000000000BE :10A2A00000000000000000000000000000000000AE :10A2B000000000000000000000000000000000009E -:10A2C0000001000003C100000001010102C0000004 -:10A2D0000001000003C100000001000003C10000F4 -:10A2E0000000000200C000000000000000000000AC +:10A2C000000000000000000000000000000000008E +:10A2D000000000000000000000000000000000007E +:10A2E000000000000000000000000000000000006E :10A2F000000000000000000000000000000000005E :10A30000000000000000000000000000000000004D :10A31000000000000000000000000000000000003D :10A32000000000000000000000000000000000002D :10A33000000000000000000000000000000000001D -:10A3400000110009000091910000000905088888AB -:10A3500000000009000091910000000900039191A4 -:10A36000000000000000008000000000000000006D +:10A34000000000000000000000000000000000000D +:10A3500000000000000000000000000000000000FD +:10A3600000000000000000000000000000000000ED :10A3700000000000000000000000000000000000DD :10A3800000000000000000000000000000000000CD :10A3900000000000000000000000000000000000BD :10A3A00000000000000000000000000000000000AD :10A3B000000000000000000000000000000000009D -:10A3C0000000110011000080090080081100000049 -:10A3D000080880001100008009088008110003802F -:10A3E00009008000000000000000000000000000E4 +:10A3C000000000000000000000000000000000008D +:10A3D000000000000000000000000000000000007D +:10A3E000000000000000000000000000000000006D :10A3F000000000000000000000000000000000005D :10A40000000000000000000000000000000000004C :10A41000000000000000000000000000000000003C :10A42000000000000000000000000000000000002C :10A43000000000000000000000000000000000001C -:10A44000000000000000090000840100C0000100BD -:10A4500000880000C000010000849101C0010100DB -:10A4600000840100C00000000000000000000000A7 +:10A44000000000000000000000000000000000000C +:10A4500000000000000000000000000000000000FC +:10A4600000000000000000000000000000000000EC :10A4700000000000000000000000000000000000DC :10A4800000000000000000000000000000000000CC :10A4900000000000000000000000000000000000BC :10A4A00000000000000000000000000000000000AC :10A4B000000000000000000000000000000000009C -:10A4C0000000000000008200006000000000810029 -:10A4D00000600000000041000060000000008100FA -:10A4E000006000000000000000000000000000000C +:10A4C000000000000000000000000000000000008C +:10A4D000000000000000000000000000000000007C +:10A4E000000000000000000000000000000000006C :10A4F000000000000000000000000000000000005C :10A50000000000000000000000000000000000004B :10A51000000000000000000000000000000000003B :10A52000000000000000000000000000000000002B :10A53000000000000000000000000000000000001B -:10A54000000000000000000000FF00FF0000AAAAB9 -:10A550000000FFFF0000AAAA00003C3C0000AAAADD -:10A560000000FFFF0000AAAA0000FFFF000000FF9C +:10A54000000000000000000000000000000000000B +:10A5500000000000000000000000000000000000FB +:10A5600000000000000000000000000000000000EB :10A5700000000000000000000000000000000000DB :10A5800000000000000000000000000000000000CB :10A5900000000000000000000000000000000000BB :10A5A00000000000000000000000000000000000AB :10A5B000000000000000000000000000000000009B -:10A5C0000000000000000000000000FF00FF00008D -:10A5D000AAAA000000000000AAAA00003C3C00005B -:10A5E000AAAA000000000000AAAA000000000000C3 -:10A5F00000FF00000000000000000000000000005C +:10A5C000000000000000000000000000000000008B +:10A5D000000000000000000000000000000000106B +:10A5E000000000000000000000000000000000006B +:10A5F000000000000000000000000000000000005B :10A60000000000000000000000000000000000004A :10A61000000000000000000000000000000000003A :10A62000000000000000000000000000000000002A :10A63000000000000000000000000000000000001A -:10A640000000000000000000000000005555000060 -:10A65000FFFF000055550000FFFF000055550000AA -:10A66000FFFF000055550000FFFF0000FF00000045 -:10A670000F0F0000000000000000000000000000BC +:10A64000000000000000000000000000000000000A +:10A6500000000000000000000000000000000000FA +:10A6600000000000000000000000000000000000EA +:10A6700000000000000000000000000000000000DA :10A6800000000000000000000000000000000000CA :10A6900000000000000000000000000000000000BA :10A6A00000000000000000000000000000000000AA :10A6B000000000000000000000000000000000009A -:10A6C00000000000000000000000000000005555E0 -:10A6D0000000000000005555000000000000555526 -:10A6E0000000000000005555000000000000FF00C1 -:10A6F00000000F0F0000000000000000000000003C +:10A6C000000000000000000000000000000000008A +:10A6D000000000000000000000000000000000007A +:10A6E000000000000000000000000000000000006A +:10A6F000000000000000000000000000000000005A :10A700000000000000000000000000000000000049 :10A710000000000000000000000000000000000039 :10A720000000000000000000000000000000000029 :10A730000000000000000000000000000000000019 :10A740000000000000000000000000000000000009 -:10A7500040638004C021920240E38000C021920245 -:10A7600040E38000C021920240E38000C0219202B9 -:10A7700040828000002092020000000000000000E3 +:10A7500000000000000000000000000000000000F9 +:10A7600000000000000000000000000000000000E9 +:10A7700000000000000000000000000000000000D9 :10A7800000000000000000000000000000000000C9 :10A7900000000000000000000000000000000000B9 :10A7A00000000000000000000000000000000000A9 :10A7B0000000000000000000000000000000000099 :10A7C0000000000000000000000000000000000089 -:10A7D00000003C3CFF003030F3F3D714D71400FFE7 -:10A7E000F0F0BE14BE14F0F0F0F0FC0CFC0C00F025 -:10A7F000FFF000000000000000000000000000006A +:10A7D0000000000000000000000000000000000079 +:10A7E0000000000000000000000000000000000069 +:10A7F0000000000000000000000000000000000059 :10A800000000000000000000000000000000000048 :10A810000000000000000000000000000000000038 :10A820000000000000000000000000000000000028 -:10A830000000000000000000000000000000000018 +:10A830000000000000000000000000000000001008 :10A840000000000000000000000000000000000008 -:10A85000000000003C3CFF003030F3F3D714D71465 -:10A8600000FFF0F0BE14BE140000FFFFFC0CFC0C57 -:10A8700000F0FFF0000000000000000000000000F9 +:10A8500000000000000000000000000000000000F8 +:10A8600000000000000000000004000000000000E4 +:10A8700000000000000000000000000000000000D8 :10A8800000000000000000000000000000000000C8 :10A8900000000000000000000000000000000000B8 :10A8A00000000000000000000000000000000000A8 :10A8B0000000000000000000000000000000000098 :10A8C0000000000000000000000000000000000088 -:10A8D00000000000000000000000303F303F0F0F7C -:10A8E0000F0F287D287D0F0F3C3C28EB28EBCFCFA6 -:10A8F0000C0C00FF3C3C00000000000000000000C9 +:10A8D0000000000000000000000000000000000078 +:10A8E0000000000000000800000000000000000060 +:10A8F0000000000000000000000000000000000058 :10A900000000000000000000000000000000000047 :10A910000000000000000000000000000000000037 :10A920000000000000000000000000000000000027 :10A930000000000000000000000000000000000017 :10A940000000000000000000000000000000000007 -:10A95000000000000000000000000000303F303F19 -:10A96000FFFF0000287D287D0F0F3C3C28EB28EBE3 -:10A97000CFCF0C0C00FF3C3C0000000000000000AA +:10A9500000000000000000000000000000000000F7 +:10A9600000000000000000000000000000000000E7 +:10A9700000000000000000000000000000000000D7 :10A9800000000000000000000000000000000000C7 :10A9900000000000000000000000000000000000B7 :10A9A00000000000000000000000000000000000A7 :10A9B0000000000000000000000000000000000097 -:10A9C0000000000000000000000000000000000087 -:10A9D0000000000000000000000000000000000077 -:10A9E0000000000000000000000000000000000067 -:10A9F0000000000000000000400004000000000013 +:10A9C0000000000000000000000000000000030084 +:10A9D0000300000000000000000004000400040068 +:10A9E0000008000000000000000400000000030850 +:10A9F000000800000000000000000000000000004F :10AA00000000000000000000000000000000000046 :10AA10000000000000000000000000000000000036 :10AA20000000000000000000000000000000000026 :10AA30000000000000000000000000000000000016 -:10AA40000000000000000000000000000000000006 -:10AA500000000000000000000000000000000000F6 -:10AA600000000000000000000000000000000000E6 -:10AA70000000000000000000000000008000000056 +:10AA400000000000200000000000000000000000E6 +:10AA50009000000000000000000002000000000064 +:10AA600000000000200000000000000000000000C6 +:10AA700002000000000000000000000000000000D4 :10AA800000000000000000000000000000000000C6 :10AA900000000000000000000000000000000000B6 :10AAA00000000000000000000000000000000000A6 :10AAB0000000000000000000000000000000000096 -:10AAC00000000000000040004000000040000000C6 -:10AAD0000000000000000000000000000000000076 -:10AAE0000000000000000000000000000000000066 -:10AAF00000000000840000000000000000000000D2 +:10AAC0000000000000080000000000000008000076 +:10AAD0000000000000000010000000000000000066 +:10AAE00000000040000800000000000000400000DE +:10AAF0000000000000000000000000000000000056 :10AB00000000000000000000000000000000000045 :10AB10000000000000000000000000000000000035 :10AB20000000000000000000000000000000000025 :10AB30000000000000000000000000000000000015 -:10AB40000000000000000000800080000000800085 +:10AB40000000000000000000000000000000000005 :10AB500000000000000000000000000000000000F5 :10AB600000000000000000000000000000000000E5 :10AB700000000000000000000000000000000000D5 @@ -203501,7 +207598,7 @@ :10ABA00000000000000000000000000000000000A5 :10ABB0000000000000000000000000000000000095 :10ABC0000000000000000000000000000000000085 -:10ABD0000000000000000000002000000000000055 +:10ABD0000000000000000000000000000000000075 :10ABE0000000000000000000000000000000000065 :10ABF0000000000000000000000000000000000055 :10AC00000000000000000000000000000000000044 @@ -203509,80 +207606,80 @@ :10AC20000000000000000000000000000000000024 :10AC30000000000000000000000000000000000014 :10AC40000000000000000000000000000000000004 -:10AC500000000000000000000000000100000000F3 +:10AC500000000000000000000000000000000000F4 :10AC600000000000000000000000000000000000E4 -:10AC700000001100000000000000000000000000C3 +:10AC700000000000000000000000000000000000D4 :10AC800000000000000000000000000000000000C4 :10AC900000000000000000000000000000000000B4 -:10ACA00000000000000000000000000000000000A4 +:10ACA0000000000000000000000000000000001094 :10ACB0000000000000000000000000000000000094 :10ACC0000000000000000000000000000000000084 -:10ACD00000000002002000800000000000000000D2 -:10ACE0000000000000000000000000000000000064 -:10ACF0000000000000000000000000000000000054 +:10ACD00000000000008400000000000800000000E8 +:10ACE00000000084000000000000000000000000E0 +:10ACF000000000000284000000A00000000000002E :10AD00000000000000000000000000000000000043 :10AD10000000000000000000000000000000000033 :10AD20000000000000000000000000000000000023 :10AD30000000000000000000000000000000000013 :10AD40000000000000000000000000000000000003 -:10AD500000000000000100010002000000000000EF -:10AD600000000000000000000000000000000000E3 -:10AD7000000000000000000000000000000000884B +:10AD500000000000000000000000000000000008EB +:10AD600000000000000000000000000000080000DB +:10AD700000000000000000000000000000000008CB :10AD800000000000000000000000000000000000C3 :10AD900000000000000000000000000000000000B3 :10ADA00000000000000000000000000000000000A3 :10ADB0000000000000000000000000000000000093 -:10ADC000000000000000000000000000000004007F -:10ADD000000000000000C020000000020404000485 +:10ADC0000000000000000000000000000000000083 +:10ADD0000000000000000000000000000000000073 :10ADE0000000000000000000000000000000000063 :10ADF0000000000000000000000000000000000053 -:10AE00000000000000210000000000000000000021 +:10AE00000000000000000000000000000000000042 :10AE10000000000000000000000000000000000032 :10AE20000000000000000000000000000000000022 :10AE30000000000000000000000000000000000012 :10AE40000000000000000000000000000000000002 -:10AE5000000000000000000000010000000180016F -:10AE6000000100000000000000000000008400005D -:10AE700000000000000000000000008400840000CA -:10AE800000820000000000A000002100000000007F +:10AE500000000000000000000000000000000000F2 +:10AE600000000000000000000000000000000000E2 +:10AE700000000000000000000000000000000000D2 +:10AE800000000000000000000000000000000000C2 :10AE900000000000000000000000000000000000B2 :10AEA00000000000000000000000000000000000A2 :10AEB0000000000000000000000000000000000092 :10AEC0000000000000000000000000000000000082 -:10AED0000000000000000000000001000000012050 -:10AEE000012001200004000000000000000000001C -:10AEF0000000000000000011000000000000000041 -:10AF000000000000900200020000000000000000AD +:10AED0000000000000000000000000000000000072 +:10AEE0000000000000000000000000000000000062 +:10AEF0000000000000000000000000000000000052 +:10AF00000000000000000000000000000000000041 :10AF10000000000000000000000000000000000031 :10AF20000000000000000000000000000000000021 :10AF30000000000000000000000000000000000011 :10AF40000000000000000000000000000000000001 -:10AF500000000000000000000000000004000000ED -:10AF6000400120012001000100000000000000005D +:10AF500000000000000000000000000000000000F1 +:10AF600000000000000000000000000000000000E1 :10AF700000000000000000000000000000000000D1 :10AF800000000000000000000000000000000000C1 :10AF900000000000000000000000000000000000B1 :10AFA00000000000000000000000000000000000A1 :10AFB0000000000000000000000000000000000091 :10AFC0000000000000000000000000000000000081 -:10AFD0000000000000000000000200080100401115 -:10AFE00090090000020300009091000000000000A2 +:10AFD0000000000000000000000000000000000071 +:10AFE0000000000000000000000000000000000061 :10AFF0000000000000000000000000000000000051 :10B000000000000000000000000000000000000040 :10B010000000000000000000000000000000000030 :10B020000000000000000000000000000000000020 :10B030000000000000000000000000000000000010 :10B040000000000000000000000000000000000000 -:10B05000000000000000000000000000118003213B -:10B060008090809100008391080080910000000092 +:10B0500000000000000000000000000000000000F0 +:10B0600000000000000000000000000000000000E0 :10B0700000000000000000000000000000000000D0 :10B0800000000000000000000000000000000000C0 :10B0900000000000000000000000000000000000B0 :10B0A00000000000000000000000000000000000A0 :10B0B0000000000000000000000000000000000090 :10B0C0000000000000000000000000000000000080 -:10B0D00000000000000000000000000000000280EE -:10B0E0000900890089910880830311008003000012 +:10B0D0000000000000000000000000000000000070 +:10B0E0000000000000000000000000000000000060 :10B0F0000000000000000000000000000000000050 :10B10000000000000000000000000000000000003F :10B11000000000000000000000000000000000002F @@ -203590,7 +207687,7 @@ :10B13000000000000000000000000000000000000F :10B1400000000000000000000000000000000000FF :10B1500000000000000000000000000000000000EF -:10B160000010000002009091011002000100900107 +:10B1600000000000000000000000000000000000DF :10B1700000000000000000000000000000000000CF :10B1800000000000000000000000000000000000BF :10B1900000000000000000000000000000000000AF @@ -203598,48 +207695,48 @@ :10B1B000000000000000000000000000000000008F :10B1C000000000000000000000000000000000007F :10B1D000000000000000000000000000000000006F -:10B1E000000040000003119110884003000191907D -:10B1F000030100000000000000000000000000004B +:10B1E000000000000000000000000000000000005F +:10B1F000000000000000000000000000000000004F :10B20000000000000000000000000000000000003E -:10B21000000000000000000000000000000090009E +:10B21000000000000000000000000000000000002E :10B22000000000000000000000000000000000001E :10B23000000000000000000000000000000000000E :10B2400000000000000000000000000000000000FE :10B2500000000000000000000000000000000000EE -:10B260000000000080414190A1A1809180910005E3 -:10B27000918091110000000000000000000000001B +:10B2600000000000000000000000000000000000DE +:10B2700000000000000000000000000000000000CE :10B2800000000000000000000000000000000000BE -:10B29000000000000000000000000000200000008E +:10B2900000000000000000000000000000000000AE :10B2A000000000000000000000000000000000009E :10B2B000000000000000000000000000000000008E :10B2C000000000000000000000000000000000007E :10B2D000000000000000000000000000000000006E -:10B2E000000000000000418800A1210011009188A9 -:10B2F000110805001011000000000000000000000F +:10B2E000000000000000000000000000000000005E +:10B2F000000000000000000000000000000000004E :10B30000000000000000000000000000000000003D :10B31000000000000000000000000000000000002D :10B32000000000000000000000000000000000001D :10B33000000000000000000000000000000000000D :10B3400000000000000000000000000000000000FD :10B3500000000000000000000000000000000000ED -:10B360000000000000000000000900A001000088AB -:10B370009191010001009101000000000000000017 +:10B3600000000000000000000000000000000000DD +:10B3700000000000000000000000000000000000CD :10B3800000000000000000000000000000000000BD :10B3900000000000000000000000000000000000AD :10B3A000000000000000000000000000000000009D :10B3B000000000000000000000000000000000008D :10B3C000000000000000000000000000000000007D :10B3D000000000000000000000000000000000006D -:10B3E00000000000000000000000008200000600D5 -:10B3F00000008181006006000000000000000000E5 +:10B3E000000000000000000000000000000000005D +:10B3F000000000000000000000000000000000004D :10B40000000000000000000000000000000000003C :10B41000000000000000000000000000000000002C -:10B4200000000021000006000000000000000000F5 +:10B42000000000000000000000000000000000001C :10B43000000000000000000000000000000000000C :10B4400000000000000000000000000000000000FC :10B4500000000000000000000000000000000000EC :10B4600000000000000000000000000000000000DC -:10B4700000F0F000C3C33C3C003C003C0000000076 +:10B4700000000000000000000000000000000000CC :10B4800000000000000000000000000000000000BC :10B4900000000000000000000000000000000000AC :10B4A000000000000000000000000000000000009C @@ -203647,7 +207744,7 @@ :10B4C000000000000000000000000000000000007C :10B4D000000000000000000000000000000000006C :10B4E000000000000000000000000000000000005C -:10B4F0000000F000F000000000003C003C000000F4 +:10B4F000000000000000000000000000000000004C :10B50000000000000000000000000000000000003B :10B51000000000000000000000000000000000002B :10B52000000000000000000000000000000000001B @@ -203663,7 +207760,7 @@ :10B5C000000000000000000000000000000000007B :10B5D000000000000000000000000000000000006B :10B5E000000000000000000000000000000000005B -:10B5F00000000000040400660099005A005A0F0F72 +:10B5F000000000000000000000000000000000004B :10B60000000000000000000000000000000000003A :10B61000000000000000000000000000000000002A :10B62000000000000000000000000000000000001A @@ -203671,40 +207768,40 @@ :10B6400000000000000000000000000000000000FA :10B6500000000000000000000000000000000000EA :10B6600000000000000000000000000000000000DA -:10B6700000000000000000000066009900660066FF -:10B680000F0F00000000000000000000000000009C +:10B6700000000000000000000000000000000000CA +:10B6800000000000000000000000000000000000BA :10B6900000000000000000000000000000000000AA :10B6A000000000000000000000000000000000009A :10B6B000000000000000000000000000000000008A :10B6C000000000000000000000000000000000007A :10B6D000000000000000000000000000000000006A :10B6E000000000000000000000000000000000005A -:10B6F0000000000000000061403E000D00000061FD -:10B70000003DC0010000000000000000000000003B +:10B6F000000000000000000000000000000000004A +:10B700000000000000000000000000000000000039 :10B710000000000000000000000000000000000029 -:10B720000000000000000000000000000000050014 -:10B7300000200000000000000000000000000000E9 +:10B720000000000000000000000000000000000019 +:10B730000000000000000000000000000000000009 :10B7400000000000000000000000000000000000F9 :10B7500000000000000000000000000000000000E9 :10B7600000000000000000000000000000000000D9 :10B7700000000000000000000000000000000000C9 -:10B78000FB04FF003030CFCF0000000000000000BD +:10B7800000000000000000000000000000000000B9 :10B7900000000000000000000000000000000000A9 :10B7A0000000000000000000000000000000000099 :10B7B0000000000000000000000000000000000089 :10B7C0000000000000000000000000000000000079 :10B7D0000000000000000000000000000000000069 :10B7E0000000000000000000000000000000000059 -:10B7F0000000000000000000000000000808000039 -:10B800000001000000000000000000000000000037 -:10B810000000000000000000000000000000000028 +:10B7F0000000000000000000000000000000000049 +:10B800000000000000000000000300000000000035 +:10B810000000000000000000000800000000000020 :10B820000000000000000000000000000000000018 :10B830000000000000000000000000000000000008 :10B8400000000000000000000000000000000000F8 :10B8500000000000000000000000000000000000E8 :10B8600000000000000000000000000000000000D8 -:10B8700000000000000000000000000000800080C8 -:10B88000000000003C003C0020D020D00000000060 +:10B8700000000000000000000000000000000000C8 +:10B8800000000000000000000000000000000000B8 :10B8900000000000000000000000000000000000A8 :10B8A0000000000000000000000000000000000098 :10B8B0000000000000000000000000000000000088 @@ -203712,7 +207809,7 @@ :10B8D0000000000000000000000000000000000068 :10B8E0000000000000000000000000000000000058 :10B8F0000000000000000000000000000000000048 -:10B900000000030000000000000000F000F0000054 +:10B900000000000000000000000000000000000037 :10B910000000000000000000000000000000000027 :10B920000000000000000000000000000000000017 :10B930000000000000000000000000000000000007 @@ -203721,24 +207818,24 @@ :10B9600000000000000000000000000000000000D7 :10B9700000000000000000000000000000000000C7 :10B9800000000000000000000000000000000000B7 -:10B990004000000000000000000000000000000067 -:10B9A0000000000000000000000000000000000097 +:10B9900000000000000000000000000000000000A7 +:10B9A000000000000000000800000000000000008F :10B9B0000000000000000000000000000000000087 :10B9C0000000000000000000000000000000000077 :10B9D0000000000000000000000000000000000067 :10B9E0000000000000000000000000000000000057 :10B9F0000000000000000000000000000000000047 :10BA00000000000000000000000000000000000036 -:10BA10000000000000000000000000000000000026 +:10BA10000000000000000000900000000000000096 :10BA20000000000000000000000000000000000016 :10BA30000000000000000000000000000000000006 :10BA400000000000000000000000000000000000F6 :10BA500000000000000000000000000000000000E6 :10BA600000000000000000000000000000000000D6 -:10BA700000000000000000000000000000000004C2 -:10BA800000000000000000000000000000000000B6 +:10BA700000000000000000000000000000000000C6 +:10BA800000000000000000000000000800000000AE :10BA900000000000000000000000000000000000A6 -:10BAA0000000000000000000000000000000000096 +:10BAA000000000000000000000000008000000008E :10BAB0000000000000000000000000000000000086 :10BAC0000000000000000000000000000000000076 :10BAD0000000000000000000000000000000000066 @@ -203754,8 +207851,8 @@ :10BB700000000000000000000000000000000000C5 :10BB800000000000000000000000000000000000B5 :10BB900000000000000000000000000000000000A5 -:10BBA00000000000200000000000900000000000E5 -:10BBB00090000000000000000000000000000000F5 +:10BBA0000000000000000000000000000000000095 +:10BBB0000000000000000000000000000000000085 :10BBC0000000000000000000000000000000000075 :10BBD0000000000000000000000000000000000065 :10BBE0000000000000000000000000000000000055 @@ -203763,53 +207860,53 @@ :10BC00000000000000000000000000000000000034 :10BC10000000000000000000000000000000000024 :10BC20000000000000000000000000000000000014 -:10BC300000000000000000000000080000000000FC +:10BC30000000000000000000000000000000000004 :10BC400000000000000000000000000000000000F4 :10BC500000000000000000000000000000000000E4 :10BC600000000000000000000000000000000000D4 :10BC700000000000000000000000000000000000C4 :10BC800000000000000000000000000000000000B4 -:10BC900000000000000000000000000000000000A4 +:10BC900000000000000000000002000000000000A2 :10BCA0000000000000000000000000000000000094 :10BCB0000000000000000000000000000000000084 -:10BCC0000000C000000000000000000000000000B4 +:10BCC0000000000000000000000000000000000074 :10BCD0000000000000000000000000000000000064 :10BCE0000000000000000000000000000000000054 :10BCF0000000000000000000000000000000000044 :10BD00000000000000000000000000000000000033 -:10BD10000000000000000088008800000000000013 +:10BD10000000000000000000000000000000000023 :10BD20000000000000000000000000000000000013 -:10BD300000000000000000000000002000000000E3 +:10BD30000000000000000000000000000000000003 :10BD400000000000000000000000000000000000F3 :10BD500000000000000000000000000000000000E3 :10BD600000000000000000000000000000000000D3 :10BD700000000000000000000000000000000000C3 :10BD800000000000000000000000000000000000B3 -:10BD9000000000000000000000000004000000009F +:10BD900000000000000000000000000000000000A3 :10BDA0000000000000000000000000000000000093 -:10BDB00000000000000000009000000000000000F3 +:10BDB0000000000000000000000000000000000083 :10BDC0000000000000000000000000000000000073 :10BDD0000000000000000000000000000000000063 :10BDE0000000000000000000000000000000000053 :10BDF0000000000000000000000000000000000043 :10BE00000000000000000000000000000000000032 -:10BE1000000009C0110200820000000000040000C0 -:10BE200000000000000000002100000000000000F1 -:10BE3000000000000000000000C000000000000042 -:10BE400000000000000000000000000002000000F0 +:10BE10000000000000000000000000000000000022 +:10BE20000000000000000000000000000000000012 +:10BE30000000000000000000000000000000000002 +:10BE400000000000000000000000000000000000F2 :10BE500000000000000000000000000000000000E2 :10BE600000000000000000000000000000000000D2 :10BE700000000000000000000000000000000000C2 :10BE800000000000000000000000000000000000B2 :10BE900000000000000000000000000000000000A2 -:10BEA0000000900000000000000000000000000002 +:10BEA0000000000000000000000000000000000092 :10BEB0000000000000000000000000000000000082 :10BEC0000000000000000000000000000000000072 :10BED0000000000000000000000000000000000062 :10BEE0000000000000000000000000000000000052 :10BEF0000000000000000000000000000000000042 :10BF00000000000000000000000000000000000031 -:10BF10000000000000000000110000000000000010 +:10BF10000000000000000000000000000000000021 :10BF20000000000000000000000000000000000011 :10BF30000000000000000000000000000000000001 :10BF400000000000000000000000000000000000F1 @@ -203922,10 +208019,10 @@ :10C5F000000000000000000000000000000000003B :10C60000000000000000000000000000000000002A :10C61000000000000000000000000000000000001A -:10C62000000040000000000000004000000040004A +:10C62000000000000000000000000000000000000A :10C6300000000000000000000000000000000000FA -:10C6400000000000200000000000000000000000CA -:10C6500000000000000000000100000000000000D9 +:10C6400000000000000000000000000000000000EA +:10C6500000000000000000000000000000000000DA :10C6600000000000000000000000000000000000CA :10C6700000000000000000000000000000000000BA :10C6800000000000000000000000000000000000AA @@ -203933,4194 +208030,97 @@ :10C6A000000000000000000000000000000000008A :10C6B000000000000000000000000000000000007A :10C6C000000000000000000000000000000000006A -:10C6D0000000000000000000000004000000000056 +:10C6D000000000000000000000000000000000005A :10C6E000000000000000000000000000000000004A :10C6F000000000000000000000000000000000003A -:10C7000000000000000000000000040004004000E1 -:10C710004100400000000400040000000000000090 -:10C720000000000000000000000000000000000009 -:10C7300000000000000008000800A0000800080039 -:10C74000080000000800A000000020000000000019 -:10C7500000000000000000000400000000000000D5 -:10C7600000000000000000000000000000000000C9 -:10C7700000000000000000000000000000000000B9 -:10C7800000000000000000000000000080008000A9 -:10C790008000840080000000800080000000000015 -:10C7A0000000000000000000000000000000000089 -:10C7B00000000000000000008000800000008000F9 -:10C7C000800080000000900000840082800000084B -:10C7D00000000000000000000000800000000000D9 -:10C7E0000000000000000008000800000000000435 -:10C7F0000000000000000000000000000000000039 -:10C800000000000000000000000000000000000028 -:10C810000000000000000000000000000000000018 -:10C8200000000000000000000021002100000000C6 -:10C8300000000000000000000000002000040000D4 -:10C840000000000000004000000000110000000295 -:10C850000000000000000000000000210080000037 -:10C8600000000000000000000000000300000000C5 -:10C8700000000000000000000000000000000000B8 -:10C8800000000000000000000000000000000000A8 -:10C890000000000000000000000000000000000098 -:10C8A0000000000000000000000000000000000088 -:10C8B0000000000000000000000000000000000078 -:10C8C0000000000000000004000000000000000064 -:10C8D0000000000000000000000000000000002038 -:10C8E0000000000000000000000000000000000048 -:10C8F0000000000000000000000000000000000038 -:10C900000000000000000000000000000000000027 -:10C91000C0000000000000200000002000200000F7 -:10C9200000020104000000000003000500000000F8 -:10C9300000000000000000000000000000000000F7 -:10C940000000000000028400C00000000100000898 -:10C9500000000000C0000000000000000000000017 -:10C9600000000000000000000000000000000000C7 -:10C9700008000000000000000000000000000000AF -:10C9800000000000000000000000000000000000A7 -:10C990000000000000000000000100000001000194 -:10C9A00000000085040100000000000000000000FD -:10C9B0000000000000000000000000000000000077 -:10C9C00000000000000000850000000000000400DE -:10C9D0000000000000000000000000000000000057 -:10C9E0000000000000000000000000000000000047 -:10C9F0000000000000000000000000000000000037 -:10CA00000000000000000000000000000000040022 -:10CA100000000000C000000000000400400004000E -:10CA200000000400000000200005001100000000CC -:10CA300000000008000000000000000000000000EE -:10CA400000000000040040000800C00000000000DA -:10CA5000000000080005000000008200080000003F -:10CA60000800008800000000000000000000002016 -:10CA700000000000000000000000000000000000B6 -:10CA8000000800000000000000000000000000009E -:10CA90000000000000000000000000008000800096 -:10CAA0008000000080000000000100000000000085 -:10CAB0000000000000000000000000000000000076 -:10CAC00000000000000000C0000090000000000016 -:10CAD0000000000000000000000000000000000056 -:10CAE00000000000001000880000000000000000AE -:10CAF0000000000000000000000000000000000036 -:10CB00000000000000000000000000000000000025 -:10CB10000000000000000000000004000180000090 -:10CB200000000000002000200020000000000000A5 -:10CB300000030005000800000000000800000000DD -:10CB400000000000000000000000000000000000E5 -:10CB500000030000000800210000000000000000A9 -:10CB60008203000000000000000000000000000040 -:10CB700000000000000000000000000000000000B5 -:10CB800000000000000000000000000000000000A5 -:10CB9000000000000000000000000000800004020F -:10CBA0000000000000000001000100010000000082 -:10CBB0000000000000000000000000000000000075 -:10CBC0000000000000000000000000000000000065 -:10CBD0000000000000000000000000000000000055 -:10CBE0000000000000000000000000000000000045 -:10CBF0000000000000000000000000000000000035 -:10CC00000000000000000000000000000000000024 -:10CC10000000000000000000000000000000000014 -:10CC200041C0A1902001909140C0009090900001DF -:10CC300000000000000000000000000000000000F4 -:10CC40000000000000000000000310A000040084A9 -:10CC50000884082000200000009000000000000070 -:10CC60000000000000000000000002A0009000048E -:10CC70004000000000000000000000000000000074 -:10CC800000000000000000000000000000000000A4 -:10CC90000000000000000000000000000000000094 -:10CCA0000000888883888003000880821082091130 -:10CCB000000800000000000000000000000000006C -:10CCC0000000000000000000000000000000000064 -:10CCD00000000000A0000000000000800000000034 -:10CCE00000000000000000000000000080800080C4 -:10CCF0000000000000000000000000000000000034 -:10CD00000000000000000000000000000000000023 -:10CD10000000000000000000000000000000000013 -:10CD20000000800009009141894185912083210004 -:10CD30000010A089000000000000000000000000BA -:10CD400000000000000000000000000000000000E3 -:10CD5000000880000000000080208080008000002B -:10CD600000001000030000000000000000000000B0 -:10CD7000000580808000000000000000000000002E -:10CD800000000000000000000000000000000000A3 -:10CD90000000000000000000000000000000000093 -:10CDA000000000009000000040008401C0910002DB -:10CDB00001009091C0100000000000000000000081 -:10CDC0000000000000000000000000000000000063 -:10CDD00090000201A008020000000200A040001024 -:10CDE0000000000000000000000000000000000043 -:10CDF00000000000A0A09000000000000000000063 -:10CE00000000000000000000000000000000000022 -:10CE10000000000000000000000000000000000012 -:10CE20000000000000000000000100009091C0C15F -:10CE300040010040C09100C100000000000000005F -:10CE400000000000000000000000000000000000E2 -:10CE50000000040000080000A109002000020040BA -:10CE600000000000000000000000000000000000C2 -:10CE70000000009000020088002000000000000078 -:10CE800000000000000000000000000000000000A2 -:10CE90000000000000000000000000000000000092 -:10CEA000000000000000000000000010000980A148 -:10CEB0008088802100A090A1009100000000000067 -:10CEC0000000000000000000000000000000000062 -:10CED0000000000000000088000088A10000008021 -:10CEE00000800000000000000000000000000000C2 -:10CEF0000000000000000080000040000000000072 -:10CF00000000000000000000000000000000000021 -:10CF10000000000000000000000000000000000011 -:10CF200000000000000000030000000080830921D1 -:10CF300021000310809183C08000200300000000C6 -:10CF400000000000000000000000000000000000E1 -:10CF50000000000000000000800080000000802031 -:10CF60000080000000000000000000000000000041 -:10CF70000000000000000000008080008000000031 -:10CF800000000000000000000000000000000000A1 -:10CF90000000000000000000000000000000000091 -:10CFA0000000000000000000001000000000C04071 -:10CFB000000091909001C0034040408800000000B4 -:10CFC0000000000000000000000000000000000061 -:10CFD00000000000000000009000A08884889000FD -:10CFE000080010A088000000000000000000000001 -:10CFF00000000000000000000200908202201000EB -:10D000000000000000000000000000000000000020 -:10D010000000000000000000000000000000000010 -:10D020000000000000000000008200000600000078 -:10D03000004100000600004200820060060000423D -:10D0400000000000000000000000000000000000E0 -:10D0500000000000000000000000000000000000D0 -:10D0600000000082000006000000000000600000D8 -:10D070000000000000000000000000820000060028 -:10D0800000000000000000000000000000000000A0 -:10D090000000000000000000000000000000000090 -:10D0A0000000000000000000000000000000000080 -:10D0B00000000000FCFC0000AAAA000050FA0000DA -:10D0C000A0F50000000000000000000000000000CB -:10D0D0000000000000000000000000000202020347 -:10D0E0000A0A000055055505FB14FB14000000005A -:10D0F000000000000000000000000000AEAA0000D8 -:10D1000000000C040000000000000000000000000F -:10D11000000000000000000000000000000000000F -:10D1200000000000000000000000000000000000FF -:10D130000000000000000C0C000000FF000050FA8E -:10D140000000A0F50000000000000000000000004A -:10D1500000000000000000000000000000009090AF -:10D160001818000000000000FF00FB14FB14000072 -:10D170000000000000000000000000000000BAAA4B -:10D18000000000000000000000000000000000009F -:10D19000000000000000000000000000000000008F -:10D1A000000000000000000000000000000000007F -:10D1B0000000AAAA0000D71400000F0F0000FF0F04 -:10D1C000000055FF0000000000000000000000000B -:10D1D000000000000000000000000000000000004F -:10D1E0000000000000001400FF003C00FA0AFA0AE8 -:10D1F000000000000000000000000000000000002F -:10D200000F0FFF00FFAAFF00000000000000000059 -:10D21000000000000000000000000000000000000E -:10D2200000000000000000000000000000000000FE -:10D2300000000000AAAA0000D7140000FF000000B0 -:10D24000F000000055000000000000000000000099 -:10D2500000000000000000000000000000000000CE -:10D260000000000000017030FCFCFF003C00FA0AE6 -:10D27000FA0A0000000000000000000000000000AA -:10D2800000000F0FFF00FFFFFF0000000000000084 -:10D29000000000000000000000000000000000008E -:10D2A000000000000000000000000000000000007E -:10D2B000000000000038000010C003E3033E0C0D26 -:10D2C00092C003E3033F0C09C2C00000000000004D -:10D2D000000000000000000000000000000000004E -:10D2E0000000000000610006000D000000000020AA -:10D2F000000000A000610006000500000000000022 -:10D3000000000000000000300000000000000000ED -:10D31000000000000000000000000000000000000D -:10D3200000000000000000000000000000000000FD -:10D3300000000000000000000000000000000000ED -:10D3400000000000000000003C3CFF7F00000000E7 -:10D3500000000000000000000000000000000000CD -:10D360000000000000000000000000000F0F00009F -:10D3700000000000000000000000000000000000AD -:10D38000000000000000000000000000000000009D -:10D39000000000000000000000000000000000008D -:10D3A000000000000000000000000000000000007D -:10D3B0000000000000000000000000000000000C61 -:10D3C000000C00080000002800280000FF5F00009B -:10D3D000000000000000000000000000000000004D -:10D3E00000000000000000000000000000000F0F1F -:10D3F000000000000000000000000000000000002D -:10D40000000000000000000000000000000000001C -:10D41000000000000000000000000000000000000C -:10D4200000000000000000000000000000000000FC -:10D4300000000000000000000000000000000000EC -:10D44000FF3C3F3C00000000000030004040000076 -:10D4500000000000000000000000000000000000CC -:10D4600000000000000000000000000000000000BC -:10D470000000000000000000000000000000FF00AD -:10D48000FFFF00000000000000000000000000009E -:10D49000000000000000000000000000000000008C -:10D4A000000000000000000000000000000000007C -:10D4B000000000000000000000000000000000006C -:10D4C0000000FF3C3F3C0100000000C000000000E5 -:10D4D000000000000000000000000000000000004C -:10D4E000000000000000000000000000000000003C -:10D4F000000000000000000000000000000000002C -:10D50000FF00FFFF0000000000000000000000001E -:10D51000000000000000000000000000000000000B -:10D5200000000000000000000000000000000000FB -:10D5300000000000000000000000000000000000EB -:10D5400000000000000000000000000000000000DB -:10D5500000000000000000000000000000000000CB -:10D5600000000000000000000000000000000000BB -:10D5700090000000000000000000004000000000DB -:10D58000000000000000000000000000000000009B -:10D59000000000000000000000000000000000008B -:10D5A000000000000000000000000000000000007B -:10D5B000000000000000000000000000000000006B -:10D5C000000000000000000000000000000000005B -:10D5D000000000000000000000000000000000004B -:10D5E000000000000000000000000000000000003B -:10D5F00040000000000000000000000000000000EB -:10D60000000000000000000000000000000000001A -:10D61000000000000000000000000000000000000A -:10D6200000000000000000000000000000000000FA -:10D6300000000000000000000000000000000000EA -:10D6400004000400040004000400040004000400BA -:10D6500004000400040004000400010004000400AD -:10D6600004000100040004000100040004000400A0 -:10D670000000040004000400040804000400010089 -:10D680000400000000000000000000000200020092 -:10D69000020002000200020010000200020002006C -:10D6A0000200020000000200020000000000000072 -:10D6B000000000000000000000000000000000006A -:10D6C00000008000800080008000800080008000DA -:10D6D00080008000800080008000800004008000C6 -:10D6E0008000800004008000800004008000800032 -:10D6F00080000000800080008000800080008000AA -:10D700000400800000000000000000000000000095 -:10D710000000000000000000000000080000000001 -:10D7200000000000000002000000000000000000F7 -:10D7300000080000000000000000000000000000E1 -:10D7400000000000000000000000000000000000D9 -:10D7500000000100000000040000000000000000C4 -:10D7600000000000000000000000000000000000B9 -:10D7700000000000000000020000000000000000A7 -:10D7800000009000000000000011000000000000F8 -:10D790000000000000000000000000000000000089 -:10D7A0000008000000000000000000000000000071 -:10D7B0000000000000000000000000000000000069 -:10D7C0000000000000000000000000000000090050 -:10D7D0004004000020001100000000000000008450 -:10D7E0000000001000000000000000000000000029 -:10D7F0000000000000000000110020000000008276 -:10D800000000000000000000000000900000000088 -:10D81000000000A00008030000000000000000005D -:10D8200000000000000000000000000000000000F8 -:10D8300000000000000000000000000000000000E8 -:10D8400000000000000000000000000000000000D8 -:10D8500000000000000000040000000000000005BF -:10D8600000000000C00000000000000000000000F8 -:10D8700000000000820000410000000000000000E5 -:10D880000000000000000000100500000000000083 -:10D890004000000000000008000000000000000040 -:10D8A0000000000000000000000000000000000078 -:10D8B0000000000000000000000000000000000068 -:10D8C0000000000000000000000000000000000058 -:10D8D0000000000000000000000100000000000047 -:10D8E0000000000000000000000000000000000038 -:10D8F0000000000000000000000000000000000028 -:10D900000000000000000000000000000000000017 -:10D910000000000000000000000000000000000007 -:10D9200000000000000000000000000000000000F7 -:10D9300000000000000000000000000000000000E7 -:10D9400000000000000000000000000000000000D7 -:10D950000000000000000400400001000020000062 -:10D9600000000400000000000000000000000000B3 -:10D9700000000000000000000000000000000000A7 -:10D980000000000000000000000000400000000057 -:10D990000000000000000000000000000000000087 -:10D9A0000000000000000000000000000000000077 -:10D9B0000000000000000000000000000000000067 -:10D9C0000000000000000000000000000000000057 -:10D9D0000000000200000004008840002000000257 -:10D9E000410000022184000021000000000000002E -:10D9F0000000000000000000000000000000000027 -:10DA0000110200A000880908000000000002108434 -:10DA10000200000000000000000000000000000004 -:10DA200000000800000403200000000000000000C7 -:10DA300000000000000000000000000000000000E6 -:10DA400000000000000000000000000000000000D6 -:10DA50000000000000000000000000000000900036 -:10DA60000100400000000000000000000000000273 -:10DA70000021000000000000000000000000000085 -:10DA80000000000000000000000000000000000096 -:10DA90000000000000000000000200000000000084 -:10DAA0000000000000000000000000000000000076 -:10DAB0000000000000000000000000000000000066 -:10DAC0000000000000000000000000000000000056 -:10DAD0000000000000000000000000000000000046 -:10DAE00000000400800000000000000000000000B2 -:10DAF0000000000000000000000000000000000026 -:10DB00000000000000000000000000000000000015 -:10DB10000000000000000000000000000000000005 -:10DB200000000000000000000000000000000000F5 -:10DB300000000000000000000000000000000000E5 -:10DB400000000000000000000000000000000000D5 -:10DB50000000000000C000900000000001C0009024 -:10DB60000400000000C000900000000000C0009011 -:10DB70000000000000C000900000000000C0009005 -:10DB800000000000000300C000900000000000C082 -:10DB900000900000000000000000000000000000F5 -:10DBA0000000000000000000000000000000000075 -:10DBB0000000000000000000000000000000000065 -:10DBC0000000000000000000000000000000000055 -:10DBD00000000000000000800080000000001080B5 -:10DBE0002180000000000080008000000000008014 -:10DBF0000080000000000080008000000000008025 -:10DC00000080000000000000008000800000000094 -:10DC10000080008000000000000000000000000004 -:10DC200000000000000000000000000000000000F4 -:10DC300000000000000000000000000000000000E4 -:10DC400000000000000000000000000000000000D4 -:10DC50000000000000000000000080000000808044 -:10DC6000410088004008A080000080000000808003 -:10DC700000008000000080800000800000008080A4 -:10DC80000000800000008080000000008000000094 -:10DC90008080000080000000808000000000000004 -:10DCA0000000000000000000000000000000000074 -:10DCB0000000000000000000000000000000000064 -:10DCC0000000000000000000000000000000000054 -:10DCD00000000000000000000000000082000000C2 -:10DCE000C090000082000100C0900000820000008F -:10DCF000C090000082000000C09000008200000080 -:10DD0000C090000082000000C0900000000082006F -:10DD10000000C090000082000000C09000000000E1 -:10DD200000000000000000000000000000000000F3 -:10DD300000000000000000000000000000000000E3 -:10DD400000000000000000000000000000000000D3 -:10DD500000000000000000000000000000000000C3 -:10DD6000009000C000000001A09101C00000000070 -:10DD7000009000C000000000009000C00000000003 -:10DD8000009000C000000000009000C000000000F3 -:10DD90000000009000C000000000009000C00000E3 -:10DDA0000000000000000000000000000000000073 -:10DDB0000000000000000000000000000000000063 -:10DDC0000000000000000000000000000000000053 -:10DDD0000000000000000000000000000000000043 -:10DDE0000000008000800041000380881183000053 -:10DDF0000000008000800000000000800080000023 -:10DE00000000008000800000000000800080000012 -:10DE10000000000000800080000000000080008002 -:10DE200000000000000000000000000000000000F2 -:10DE300000000000000000000000000000000000E2 -:10DE400000000000000000000000000000000000D2 -:10DE500000000000000000000000000000000000C2 -:10DE60008000000200000000801180110000000806 -:10DE700083080008000000008011800300000000FB -:10DE80008011800800000000801180400000000028 -:10DE90000000801180080000000080118040000018 -:10DEA0000000000000000000000000000000000072 -:10DEB0000000000000000000000000000000000062 -:10DEC0000000000000000000000000000000000052 -:10DED0000000000000000000000000000000000042 -:10DEE00000009000000000000000C0892000000039 -:10DEF0000001C000000000009000C00120000000F0 -:10DF00000000C001200000000000C001200000004F -:10DF100000000000C001200000000000C00120003F -:10DF200000000000000000000000000000000000F1 -:10DF300000000000000000000000000000000000E1 -:10DF400000000000000000000000000000000000D1 -:10DF500000000000000000000000000000000000C1 -:10DF60000000000000820000060000000082006047 -:10DF70000600000000810000060000000082000092 -:10DF80000600000000820000060000000082000081 -:10DF90000600000000000082000006000000008271 -:10DFA000000006000000000000000000000000006B -:10DFB0000000000000000000000000000000000061 -:10DFC0000000000000000000000000000000000051 -:10DFD0000000000000000000000000000000000041 -:10DFE000000000000000FFFF0000FF000000FF0035 -:10DFF0000000FF0000003C3C0000FF000000FF00AC -:10E000000000FF000000FF000000FF000000FF0014 -:10E010000000FF0000000000FF000000FF00000003 -:10E02000FF000000FF0000000000000000000000F2 -:10E0300000000000000000000000000000000000E0 -:10E0400000000000000000000000000000000000D0 -:10E0500000000000000000000000000000000000C0 -:10E060000000000000000000FFFF0000FF000000B3 -:10E07000FF000000FF0000003C3C0000FF0000002B -:10E08000FF000000FF000000FF000000FF00000094 -:10E09000FF000000FF0000000000FF000000FF0084 -:10E0A0000000FF000000FF00000000000000000072 -:10E0B0000000000000000000000000000000000060 -:10E0C0000000000000000000000000000000000050 -:10E0D0000000000000000000000000000000000040 -:10E0E0000000000000000000000000000000000030 -:10E0F0000000000000000000000000000000000020 -:10E10000000000000000000000000000000000000F -:10E1100000000000000000000000000000000000FF -:10E1200000000000000000000000000000000000EF -:10E1300000000000000000000000000000000000DF -:10E1400000000000000000000000000000000000CF -:10E1500000000000000000000000000000000000BF -:10E16000000000000000000000000000000000FFB0 -:10E1700000000F0F000000FF00000F0F000000FF65 -:10E1800000000F0F000000FF00000F0F000000FF55 -:10E1900000000F0F000000FF00000F0F0000000044 -:10E1A00000FF00000F0F000000FFFFFFF0F0000075 -:10E1B000000000000000000000000000000000005F -:10E1C000000000000000000000000000000000004F -:10E1D000000000000000000000000000000000003F -:10E1E000000000000000000000000000000000002F -:10E1F00000FF00000F0F000000FF00000F0F0000E5 -:10E2000000FF00000F0F000000FF00000F0F0000D4 -:10E2100000FF00000F0F000000FF00000F0F0000C4 -:10E22000000000FF00000F0F000000FFFFFFF0F0F4 -:10E2300000000000000000000000000000000000DE -:10E2400000000000000000000000000000000000CE -:10E2500000000000000000000000000000000000BE -:10E2600000000000000000000000000000000000AE -:10E27000030203380C0092C003E3033E0C0992C072 -:10E2800003E3033E0C0D92C0038203380C0092C0DE -:10E29000038203380C0092C0038203380C0092C042 -:10E2A0000000038203380C0092C0038203380C0084 -:10E2B00082C000000000000000000000000000001C -:10E2C000000000000000000000000000000000004E -:10E2D000000000000000000000000000000000003E -:10E2E000000000000000000000000000000000002E -:10E2F0000000000000000000000000000000AAA0D4 -:10E300000A000000FFFF0000000000000000000005 -:10E3100000000000000000000000000000000000FD -:10E3200000000000000000000000000000000000ED -:10E3300000000000000000000000000000000000DD -:10E3400000000000000000000000000000000000CD -:10E3500000000000000000000000000000000000BD -:10E3600000000000000000000000000000000000AD -:10E37000000000000000000000000000000000009D -:10E38000AAA02A200000FFFF0000000000000000FB -:10E39000000000000000000000000000000000007D -:10E3A000000000000000000000000000000000006D -:10E3B000000000000000000000000000000000005D -:10E3C000000000000000000000000000000000004D -:10E3D000000000000000000000000000000000003D -:10E3E000000000000000000000000000000000002D -:10E3F000000000000000000000000000000000001D -:10E400000000030BC3EB0000000000000000000050 -:10E4100000000000000000000000000000000000FC -:10E4200000000000000000000000000000000000EC -:10E4300000000000000000000000000000000000DC -:10E4400000000000000000000000000000000000CC -:10E4500000000000000000000000000000000000BC -:10E4600000000000000000000000000000000000AC -:10E47000000000000000000000000000000000009C -:10E4800000000000435FC3FF000000000000000028 -:10E49000000000000000000000000000000000007C -:10E4A000000000000000000000000000000000006C -:10E4B000000000000000000000000000000000005C -:10E4C000000000000000000000000000000000004C -:10E4D000000000000000000000000000000000003C -:10E4E000000000000000000000000000000000002C -:10E4F000000000000000000000000000000000001C -:10E5000000000000000000000000000010000000FB -:10E5100000000000000000000000000000000000FB -:10E52000000000000000000000000000400020008B -:10E5300000000000000000000000000000000000DB -:10E54000000000000000000000000000200020008B -:10E5500000000000000000000000000000000000BB -:10E5600000000000000000000000000000000000AB -:10E57000000000000000000000000000000000009B -:10E58000000000000000000000000000000010007B -:10E59000000000000000100000001000000000005B -:10E5A0000000100000000000000200000000000059 -:10E5B000000000000000000000000000000000005B -:10E5C000000000000000000000000000000000004B -:10E5D000000000000000000000000000000000003B -:10E5E000000000000000000000000000000000002B -:10E5F000000000000000000000000000000000001B -:10E60000000000000000000000000000000000000A -:10E610000000000000000000000000410041000078 -:10E6200000000000000000000000000000000000EA -:10E6300002000200000000000000000000000000D6 -:10E6400000000000000000000000000000000000CA -:10E6500000000000000000000000000000000000BA -:10E6600000000000000000000000000000000000AA -:10E67000000000000000000000000000000000009A -:10E68000000000000000000000000000000000008A -:10E69000000000000000000000000000000000007A -:10E6A00000000000000000000000000000840008DE -:10E6B000000000000000000000000000000000005A -:10E6C000000000C00000000000000000000000008A -:10E6D0000002000000000000000000000000000038 -:10E6E0000200000000000000000000000000000028 -:10E6F000000000000000000000000000000000001A -:10E700000000000000000000000040004000000089 -:10E7100000000000000000000000000000000000F9 -:10E7200000000008000000000000002000000021A0 -:10E730000000000000000000400004000000000095 -:10E7400004210000000000000000000000000000A4 -:10E7500000020000000000000000000000000000B7 -:10E7600000000000000000000000000000000000A9 -:10E770000000000000000000000000000000000099 -:10E780000000000000000000000004000000000085 -:10E7900000080000000000000000000000A00000D1 -:10E7A00000A00000000000000000000000000000C9 -:10E7B0000000000000000000000000000000002039 -:10E7C0000000000000000000000000200000000029 -:10E7D0000000000000000000000000000000000039 -:10E7E0000000000000000000000000000000000029 -:10E7F0000000000000000000000000000000000019 -:10E800000000000000000000000000000000000503 -:10E8100000000000000000000000000000000000F8 -:10E8200000000004000000000000000000000000E4 -:10E830000000000000000000000000000000004098 -:10E8400000000000000000000000000000000000C8 -:10E8500000000000000000000000000000000000B8 -:10E8600000000000000000000000000000000000A8 -:10E870000000000000000000000000000000000098 -:10E880000000000000000000000000000000000088 -:10E890000000200000000000000400000000000450 -:10E8A0000000000000200000000000000000000048 -:10E8B0000000000000000000000000000000000058 -:10E8C0000000000000000000000020000000000028 -:10E8D0000000000000000000000000000000000038 -:10E8E0000000000000000000000000000000000028 -:10E8F0000000000000000000000000000000000018 -:10E900000000000000000000000000000000000007 -:10E9100000000000000000000000000000000000F7 -:10E9200000000000000000000000000000000000E7 -:10E9300000000000000000000000000000000000D7 -:10E9400000000000000000000000000000000000C7 -:10E9500000000000000000000000000000000000B7 -:10E9600000000000000000000000000000000000A7 -:10E970000000000000000000000000000000000097 -:10E980000000000000000000000000000000000087 -:10E99000008400000004000400084008000000009B -:10E9A000000000000000000000A0210000000000A6 -:10E9B000008400000020000000A000000000000013 -:10E9C0000000048400200000000000A000000000FF -:10E9D0001000000000000000000000000000000027 -:10E9E0000000000000000000000000000000000027 -:10E9F0000000000000000000000000000000000017 -:10EA00000000000000000000000000000000000006 -:10EA100000000000000000000000000800000021CD -:10EA20000000000090000000000000000000000056 -:10EA300000000000000000000000002100000000B5 -:10EA400000000000000000000000000000210000A5 -:10EA500000000000000000000000000000000000B6 -:10EA600000000000000000000000000000000000A6 -:10EA70000000000000000000000000000000000096 -:10EA80000000000000000000000000000000000086 -:10EA90000000000000000000000000040000200052 -:10EAA0000000000020000000000000000000000442 -:10EAB0000000000000000000000000000000000056 -:10EAC0000000000000000000000400000000000042 -:10EAD0000000000000000000000000000000000036 -:10EAE0000400000000000000000000000000000022 -:10EAF0000000000000000000000000000000000016 -:10EB00000000000000000000000000000000000005 -:10EB100000000000000000000000000000000000F5 -:10EB200000000000000000000000000000000000E5 -:10EB300000000000000000000000000000000000D5 -:10EB400000000000000000000000000000000000C5 -:10EB500000000000000000000000000000000000B5 -:10EB600000000000000000000000000000000000A5 -:10EB70000000000000000000000000000000000095 -:10EB80000000000000000000000000000000000085 -:10EB90000000000000000000000000000000000075 -:10EBA0000000000000000000000000000000000065 -:10EBB0000000000000000000000000000000000055 -:10EBC0000000000000000000000000000000000045 -:10EBD0000000000000000000000000000000000035 -:10EBE0000000000000000000000000000000000025 -:10EBF0000000000000000000000000000000000015 -:10EC00000000000000000000000000000000000004 -:10EC100000000000000000000000000000000000F4 -:10EC200000000000000000000000000000000000E4 -:10EC300000000000000000000000000000000000D4 -:10EC400000000000000000000000000000000000C4 -:10EC500000000000000000000000000000000000B4 -:10EC600000000000000000000000000000000000A4 -:10EC70000000000000000000000000000000000094 -:10EC80000000000000000000000000000000000084 -:10EC90000000000000000000000000000000000074 -:10ECA0000000000000000000000000000000000064 -:10ECB0000000000000000000000000000000000054 -:10ECC0000000000000000000000000000000000044 -:10ECD0000000000000000000000000000000000034 -:10ECE0000000000000000000000000000000000024 -:10ECF0000000000000000000000000000000000014 -:10ED00000000000000000000000000000000000003 -:10ED100000000000000000000000000000000000F3 -:10ED200000000000000000000000000000000000E3 -:10ED300000000000000000000000000000000000D3 -:10ED400000000000000000000000000000000000C3 -:10ED500000000000000000000000000000000000B3 -:10ED600000000000000000000000000000000000A3 -:10ED70000000000000000000000000000000000093 -:10ED80000000000000000000000000000000000083 -:10ED90000000000000000000000000000000000073 -:10EDA0000000000000000000000000000000000063 -:10EDB0000000000000000000000000000000000053 -:10EDC0000000000000000000000000000000000043 -:10EDD0000000000000000000000000000000000033 -:10EDE0000000000000000000000000000000000023 -:10EDF0000000000000000000000000000000000013 -:10EE00000000000000000000000000000000000002 -:10EE100000000000000000000000000000000000F2 -:10EE200000000000000000000000000000000000E2 -:10EE300000000000000000000000000000000000D2 -:10EE400000000000000000000000000000000000C2 -:10EE500000000000000000000000000000000000B2 -:10EE600000000000000000000000000000000000A2 -:10EE70000000000000000000000000000000000092 -:10EE80000000000000000000000000000000000082 -:10EE90000000000000000000000000000000000072 -:10EEA0000000000000000000000000000000000062 -:10EEB0000000000000000000000000000000000052 -:10EEC0000000000000000000000000000000000042 -:10EED0000000000000000000000000000000000032 -:10EEE0000000000000000000000000000000000022 -:10EEF0000000000000000000000000000000000012 -:10EF00000000000000000000000000000000000001 -:10EF100000000000000000000000000000000000F1 -:10EF200000000000000000000000000000000000E1 -:10EF300000000000000000000000000000000000D1 -:10EF400000000000000000000000000000000000C1 -:10EF500000000000000000000000000000000000B1 -:10EF600000000000000000000000000000000000A1 -:10EF70000000000000000000000000000000000091 -:10EF80000000000000000000000000000000000081 -:10EF90000000000000000000000000000000000071 -:10EFA0000000000000000000000000000000000061 -:10EFB0000000000000000000000000000000000051 -:10EFC0000000000000000000000000000000000041 -:10EFD0000000000000000000000000000000000031 -:10EFE0000000000000000000000000000000000021 -:10EFF0000000000000000000000000000000000011 -:10F000000000000000000000000000000000000000 -:10F0100000000000000000000000000000000000F0 -:10F0200000000000000000000000000000000000E0 -:10F0300000000000000000000000000000000000D0 -:10F0400000000000000000000000000000000000C0 -:10F0500000000000000000000000000000000000B0 -:10F0600000000000000000000000000000000000A0 -:10F070000000000000000000000000000000000090 -:10F080000000000000000000000000000000000080 -:10F090000000000000000000000000000000000070 -:10F0A0000000000000000000000000000000000060 -:10F0B0000000000000000000000000000000000050 -:10F0C0000000000000000000000000000000000040 -:10F0D0000000000000000000000000000000000030 -:10F0E0000000000000000000000000000000000020 -:10F0F0000000000000000000000000000000000010 -:10F1000000000000000000000000000000000000FF -:10F1100000000000000000000000000000000000EF -:10F1200000000000000000000000000000000000DF -:10F1300000000000000000000000000000000000CF -:10F1400000000000000000000000000000000000BF -:10F1500000000000040000000000000000000000AB -:10F16000000000000000000000000000000000009F -:10F170000000000000002000040200020000000067 -:10F18000000000000000000000000000000000007F -:10F19000000000000000200020000000000000002F -:10F1A000000000000000000000000000000000005F -:10F1B000000000000000000000000000000000004F -:10F1C000000000000000000000000000100000002F -:10F1D000000000000000000000002100000000000E -:10F1E000000000000000000000000000000000001F -:10F1F000000000000000000000000001000100000D -:10F2000000000000000000000000000000000000FE -:10F2100000000000000000000000000000000000EE -:10F2200000000000000000000000000000000000DE -:10F2300000000000000000090000000000000000C5 -:10F24000000040000041000000000000000000003D -:10F250000000000000050000000000000041000068 -:10F26000000300000000000000000000000000415A -:10F270000000000000000000840000008200000088 -:10F28000000000000000000000000000000000007E -:10F29000000000000000000000000000000000006E -:10F2A000000000000000000000000000000000005E -:10F2B000000000000000000000000000000000004E -:10F2C00000000000800000000000000010000000AE -:10F2D000000000000000000000000000000000002E -:10F2E000000000820400008200000400000000080A -:10F2F000000000000000000000000000000000000E -:10F3000000000000000000000000000000000008F5 -:10F3100000000000000000000000000000000000ED -:10F3200000000000000000000000000000000000DD -:10F3300000000000000000000000000088008800BD -:10F3400000000000900040000000000000000000ED -:10F35000000000000000100000100000000000008D -:10F360000000000000000000820000090000000012 -:10F37000000000000000000000000000000000008D -:10F38000000000000000000000002000000000005D -:10F39000000800090000000000000000000000005C -:10F3A000000000000000000000000000000000005D -:10F3B000000000000000000000000000000000004D -:10F3C000000000000000000000000000000000003D -:10F3D000000000000000000000000000000000002D -:10F3E000000000000000000000000000000000001D -:10F3F000000000000000000000000000000000000D -:10F4000000000000000000000000000200000000FA -:10F4100000000000000000000000000000000000EC -:10F4200000000000000000000000000000000000DC -:10F43000000000000000000000000000000000A02C -:10F4400000C088000104000000000000000400006B -:10F45000000000000000000000001000000000009C -:10F46000000000000000000000110000000000008B -:10F47000000000000000000000000000000000008C -:10F48000000000000000000000000000000000007C -:10F49000000000000000000000000000000000006C -:10F4A000000000000000000000000000000000005C -:10F4B000000000000000000000000000000010003C -:10F4C00000210021008840000000000000C0000171 -:10F4D000009000000000000000000000000000009C -:10F4E000000000000000000000000000000000001C -:10F4F000000000000000000000000000000000000C -:10F5000000000000000011000000000000000000EA -:10F5100000000000000000000000000000000000EB -:10F5200000000000000000000000000000000000DB -:10F5300000000000000000000000000000000000CB -:10F540000000000004004020040000000000A000B3 -:10F5500000030000000000080000000000000000A0 -:10F56000000000000000000000000000000000009B -:10F57000000000000000000000000000000000008B -:10F58000000000000000000000000000000000007B -:10F59000000000000000000000000000000000006B -:10F5A000000000000000000000000000000000005B -:10F5B000000000000000000000000000000000004B -:10F5C000000000000000800000018000000000003A -:10F5D000000000000000000000000000000000002B -:10F5E000000000000000000000000000000000001B -:10F5F000000000000000000000000000000000000B -:10F6000000000000000000000000000000000000FA -:10F6100000000000000000000000000000000000EA -:10F6200000000000000000000000000000000000DA -:10F6300000000000000000000000000000000000CA -:10F6400000000000000000000000910000800008A1 -:10F65000008200080180000000000000000000009F -:10F66000000000000000000000000000000000009A -:10F67000000000000000000000000000000000008A -:10F68000000000000000000000000000000000007A -:10F69000000000000000000000000000000000006A -:10F6A000000000000000000000000000000000005A -:10F6B000000000000000000000000000000000004A -:10F6C0000000000000000000000000000400002016 -:10F6D000000000030000400400004100030000009F -:10F6E000000000000000000000000000000000001A -:10F6F000000000000000000000000000000000000A -:10F7000000000000000000000000000000000000F9 -:10F7100000000000000000000000000000000000E9 -:10F7200000000000000000000000000000000000D9 -:10F7300000000000000000000000000000000000C9 -:10F74000000000000000000000001000000890C051 -:10F7500090000000A10091000000000000000000E7 -:10F760000000000000000000000000000000000099 -:10F770000000000100000000000000000000000088 -:10F780000000000000000000000000000100010077 -:10F790004000000000000000000000000000000029 -:10F7A0000000000000000000000000000000000059 -:10F7B0000000000000000000000000000000000049 -:10F7C00000000000000000000000000080000000B9 -:10F7D0000000800000008200030000000000000024 -:10F7E0000000000000000000000000000000000019 -:10F7F0000000000000000000000000000000000009 -:10F8000000000000000000000000000000000200F6 -:10F810004100800000000000000000000000000027 -:10F8200000000000000000000000000000000000D8 -:10F8300000000000000000000000000000000000C8 -:10F8400000000000000000000000000000000000B8 -:10F8500000808000008010001000030021000000E4 -:10F860000000000000000000000000000000000098 -:10F870000000000000000000000000000000000088 -:10F880000000000000000000000000000000000078 -:10F89000100010000800020000000000000000003E -:10F8A0000000000000000000000000000000000058 -:10F8B0000000000000000000000000000000000048 -:10F8C0000000000000000000000000000000000038 -:10F8D00088000410A00008C001040100000001001D -:10F8E0000000000000000000000000000000000018 -:10F8F0000000000000000000000000000000000008 -:10F9000000000000000000000000000000000000F7 -:10F9100000000000000001000000000000000000E6 -:10F9200000000000000000000000000000000000D7 -:10F9300000000000000000000000000000000000C7 -:10F9400000000000000000000000000000000000B7 -:10F9500000000000000940A10102000000000400B6 -:10F960000000000000000000000000000000000097 -:10F970000000000000000000000000000000000087 -:10F980000000000000000000000000000000000077 -:10F990000000000000010000A000000000000000C6 -:10F9A0000000000000000000000000000000000057 -:10F9B0000000000000000000000000000000000047 -:10F9C0000000000000000000000000000000000037 -:10F9D00000000000100000108008099000030041A2 -:10F9E0000005020000000000000000000000000010 -:10F9F0000000000000000000000000000000000007 -:10FA000000000000000000000000000000000000F6 -:10FA100000000000000000100041802000000000F5 -:10FA200000000000000000000000000000000000D6 -:10FA300000000000000000000000000000000000C6 -:10FA400000000000000000000000000000000000B6 -:10FA500000000000000000090009008000002008EC -:10FA6000000008002004000000000000000000006A -:10FA70000000000000000000000000000000000086 -:10FA80000000000000000000000000000000000076 -:10FA90000000000000000000000000000000000264 -:10FAA0000000000000000000000000000000000056 -:10FAB0000000000000000000000000000000000046 -:10FAC0000000000000000000000000000000000036 -:10FAD0000000000000000000000000A00084000002 -:10FAE0000101000000000001000000000000000013 -:10FAF0000000000000000000000000000000000006 -:10FB000000000000000000000000000000000000F5 -:10FB100000000000000000000000000000000000E5 -:10FB200000000000000000000000000000000000D5 -:10FB300000000000000000000000000000000000C5 -:10FB400000000000000000000000000000000000B5 -:10FB5000000000000000000000000082000006001D -:10FB600000128100006000000000000000000000A2 -:10FB70000000000000000000000000000000000085 -:10FB80000000000000000000000000000000000075 -:10FB90000000000000000000000000000000000065 -:10FBA0000000500000000000000000000000000005 -:10FBB0000000000000000000000000000000000045 -:10FBC0000000000000000000000000000000000035 -:10FBD0000000000000000000000000000000000025 -:10FBE0000000000000000000000000000000000015 -:10FBF0000000000000000000000000000000000005 -:10FC000000000000000000000000000000000000F4 -:10FC100000000000000000000000000000000000E4 -:10FC200000000000000000000000000000000000D4 -:10FC300000000000000000000000000000000000C4 -:10FC400000000000000000000000000000000000B4 -:10FC500000000000000000000000000000000000A4 -:10FC6000000055050000000000000000000000003A -:10FC70000000000000000000000000000000000084 -:10FC80000000000000000000000000000000000074 -:10FC90000000000000000000000000000000000064 -:10FCA0000000000000000000000000000000000054 -:10FCB0000000000000000000000000000000000044 -:10FCC0000000000000000000000000000000000034 -:10FCD0000000000000000000000000000000000024 -:10FCE000F00FF00F1212333300000000000000008C -:10FCF0000000000000000000000000000000000004 -:10FD000000000000000000000000000000000000F3 -:10FD100000000000000000000000000000000000E3 -:10FD200000000000000000000000000000000000D3 -:10FD300000000000000000000000000000000000C3 -:10FD400000000000000000000000000000000000B3 -:10FD500000000000000000000000000000000000A3 -:10FD60000000F00FF00F121220230000000000002E -:10FD70000000000000000000000000000000000083 -:10FD80000000000000000000000000000000000073 -:10FD90000000000000000000000000000000000063 -:10FDA0000000000000000000000000000000000053 -:10FDB0000000000000000000000000000000000043 -:10FDC0000000000000000000000000000000000033 -:10FDD0000000000000000000000000000000000023 -:10FDE0000000000005614A3E050D00A1006100070A -:10FDF000C00D000000000000000000000000000036 -:10FE000000000000000000000000000000000000F2 -:10FE100000000000000000000000000000000000E2 -:10FE200000000000000000610006000D000000005E -:10FE300000000000000000000000000000000000C2 -:10FE400000000000000000000000000000000000B2 -:10FE500000000000000000000000000000000000A2 -:10FE6000000000000000000000005AAA5FAF01017E -:10FE700000005515551500000000000000000000AE -:10FE80000000000000000000000000000000000072 -:10FE90000000000000000000000000000000000062 -:10FEA000000000000000000000000000EF02EF0270 -:10FEB0000000000000000000000000000000000042 -:10FEC0000000000000000000000000000000000032 -:10FED0000000000000000000000000000000000022 -:10FEE0000000000000000000000000005AAA5FAF00 -:10FEF00001010000AA2AAA2A000000000000000058 -:10FF000000000000000000000000000000000000F1 -:10FF100000000000000000000000000000000000E1 -:10FF200000000000000000000000000000000200CF -:10FF300002000000000000000000000000000000BF -:10FF400000000000000000000000000000000000B1 -:10FF500000000000000000000000000000000000A1 -:10FF60000000000000000000000000000000000091 -:10FF7000000000000000F35100000000000000003D -:10FF80000000000000000000000000000000000071 -:10FF90000000000000000000000000000000000061 -:10FFA0000000000000000000000000000000000051 -:10FFB0000100000000000000000000000000000040 -:10FFC0000000000000000000000000000000000031 -:10FFD0000000000000000000000000000000000021 -:10FFE0000000000000000000000000000000000011 -:10FFF0000000000000000000F351000000000000BD -:020000040032C8 -:1000000000000000000000000000000000000000F0 -:1000100000000000000000000000000000000000E0 -:1000200000000000000000000000000000000000D0 -:1000300000000100000000000000000000000000BF -:1000400000000000000000000000000000000000B0 -:1000500000000000000000000000000000000000A0 -:100060000000000000000000000000000000000090 -:1000700000000000000000000000000000009000F0 -:100080000000000000000000000000004000000030 -:100090000000000000000000000000000000000060 -:1000A0000000000000000000000000000000200030 -:1000B00040000000000000000400040004000400F0 -:1000C0000400C00004000400040004000400200038 -:1000D00020000000000004000000000000000000FC -:1000E000000000000002000000000000000000000E -:1000F0000000000000000000000000000000000000 -:1001000000000000000000004000000000000000AF -:10011000000000000000000000000090210000002E -:1001200000000000000000000000000000000000CF -:10013000000000000000000000008000800080003F -:10014000800080000000800280008000800080002D -:10015000100000000000000080000000000000000F -:10016000000000000000000000001000000000007F -:10017000000000000100000000000000000000403E -:10018000010000000000000000000000000000006E -:10019000A00004000000000000000000004000007B -:1001A00000000000004002000008004000000000C5 -:1001B00000000000008000000000000010000000AF -:1001C00084000000A000000000000000000000000B -:1001D000000001000100010001000000000000001B -:1001E000000000000000000000000000000000000F -:1001F00000000000000004000000000000000000FB -:1002000000000400000000000000000000080000E2 -:10021000000000008000000000000000000000005E -:100220000000000002000000008200000000000446 -:1002300000000000000000100000000400000008A2 -:100240000200000000080008000000080000000094 -:10025000000000000400040004000400000000008E -:10026000000000000000000000000000000000008E -:1002700000000000000040008800880088000000A6 -:10028000000000000000002100000000000000004D -:100290000000000500000008004000000000000011 -:1002A0000000000040000008000000000000000006 -:1002B000000000000000000000000000000000003E -:1002C0000000000000000000002100000008000005 -:1002D00000000040000000000008000000000000D6 -:1002E000000000000000000000000000000000000E -:1002F00000000000000000000000000000000000FE -:100300004184000000000002000000000000000026 -:1003100000000000000000000000000000000000DD -:1003200000000000000000000000000800000008BD -:1003300000000000000010000000000000000000AD -:10034000008400080000000000000000000000829F -:10035000000000000000000000000000000000009D -:10036000000000000000000000000000000000008D -:1003700000000005004100000240000001400200B2 -:100380000040004100400009002000000010000073 -:10039000000000000000000000000000000000005D -:1003A0000000000000000000000000040000000049 -:1003B00000000000A000000000400000000000005D -:1003C000000000000000000000000000000001002C -:1003D000000000000000000000000000000000001D -:1003E0000000040000000000000000000000000009 -:1003F00000840000000000C000000000009004889D -:1004000000C04000009000000090000100000001CA -:100410000000000000000000008400000000000058 -:10042000000000000000000000400040000000004C -:10043000000000000000210000000000000000009B -:10044000000000000000000000000000000000A00C -:100450000400000000000000000000000000000098 -:10046000000000000000000000000000000000008C -:10047000000000000000000000000000200000005C -:10048000050000100000C041000000000011000045 -:10049000A0000000040000000000C0400021000097 -:1004A000000000000000000000000000000000004C -:1004B000000000000000000000000000000000003C -:1004C00000000000000000000000000000000040EC -:1004D00000000000000000000000004002000000DA -:1004E000000000000000000000000000000000000C -:1004F000000000000000000000C00000000000003C -:1005000009008400000200101100058800000300AB -:10051000000000000000800000000000000000005B -:1005200000000000000000000000000800000000C3 -:1005300000000000000000000000000000000000BB -:1005400000000000000000A02100000000000000EA -:100550000000000800000000000000000000000093 -:10056000000000000000000000000000000000008B -:10057000000000000000000000000000000000413A -:1005800000000040018000000080000002100021F7 -:10059000000200030008000000030000000000004B -:1005A0000000000000000008000000000000000043 -:1005B0000000000008000000000000000200000031 -:1005C000000010000000000000000000000000001B -:1005D0000000000801008400000000000000A000EE -:1005E000000000000000A00000000000000000006B -:1005F000000000000000000000000000008400C0B7 -:1006000000000000000404204100000200000085FA -:100610000000008400000000000000000000000056 -:1006200000000000000000000000000000000000CA -:10063000000000000000000000000000000000407A -:1006400000000000000021A00500000000000000E4 -:100650000000000000000400000000000000000096 -:10066000000000000000000000000000000000008A -:10067000000000000000000000000000000000007A -:10068000000000000000021091820088900800C065 -:1006900000820088000090A000A00040022000001E -:1006A0000000000000000000000000000000000347 -:1006B000000000000000000000000000000000003A -:1006C000000000000000000000000000000000002A -:1006D00000C000900000000000C00090000000007A -:1006E00000C000900000000000C00090000000006A -:1006F00000000000000000000000000000000000FA -:1007000000000000000000001180918000000080C7 -:1007100000000080000000000000000000008000D9 -:1007200000000000000000000000000000000000C9 -:1007300000000000000000000000000000000000B9 -:1007400000000000000000000000000000000000A9 -:100750000000008000800000000000800080000099 -:100760000000008000800000000000800080000089 -:100770000000000000000000000000000000000079 -:10078000000000000000000000000800912191809E -:1007900000008000800080000080000000008000D9 -:1007A00080000000000000000000000000000000C9 -:1007B0000000000000000000000000000000000039 -:1007C0000000000000000000000000000000000227 -:1007D0000000000000008000000280800000800017 -:1007E0000000808000008000000080800000800009 -:1007F00000008080000000000000000000000000F9 -:10080000000000000000000000000000100009903F -:1008100082A0209002008200A00002900000000050 -:10082000A000900000000000000000000000000098 -:1008300000000000000000000000000000000000B8 -:1008400000000000000000000000000000000000A8 -:10085000000000080000000082000000C0900000BE -:1008600082000000C090000082000000C0900000E4 -:1008700082000000C09000000000000000000000A6 -:100880000000000000000000000000000000101147 -:1008900000100084A020002000080000002000209C -:1008A000000200200288000000000000000000009C -:1008B0000000000000000000000000000000000038 -:1008C0000000000000000000000000000000000028 -:1008D000000000000000000000000000009000C0C8 -:1008E00000000000109000C000000000009000C058 -:1008F00000000000009000C00000000000000000A8 -:1009000000000000000000000000000000000000E7 -:10091000809000800089830000000000000000003B -:1009200000000000000080800000000000000000C7 -:1009300003000000000000000000000000000000B4 -:1009400000000000000000000000000000000000A7 -:100950000000000000000000000000000000008017 -:100960000080000000008080008000000000008007 -:1009700000800000000000800080000000000000F7 -:100980000000000000000000000000000000000067 -:1009900000000000000000800002000000000000D5 -:1009A0000000000000000000000000000000000047 -:1009B0000000001000000000000000000000000027 -:1009C0000000000000000000000000000000000027 -:1009D00000000000001180000000000080000010F6 -:1009E0000000000080200021000000008011800530 -:1009F00000000000801180050000000000000000E1 -:100A000000000000000000000000000000000000E6 -:100A1000000000000000000800A00001000000002D -:100A200000880000000000080084000000000000B2 -:100A300000000000000000000000000000000000B6 -:100A400000000000000000000000000000000000A6 -:100A5000000000000000200020000800400090007E -:100A6000000100000000C000000000009000C00174 -:100A7000200000000000C001200000000000000075 -:100A80000000000000000000000000000000000066 -:100A900000000000000000000000060000000082CE -:100AA000000006000000000000000600000000003A -:100AB00000000000000000810000060000000000AF -:100AC0000000000000000000000000000000000026 -:100AD0000000000000000000000000000000000016 -:100AE00000110000060000000021000006000000C8 -:100AF0000082000006000000000600000600000062 -:100B000000000000000000000000000000000000E5 -:100B1000000000000000000066666666DB1BD81B54 -:100B20000000000030300000000000000004000061 -:100B300000000000000000000000000000000000B5 -:100B400000000000000000000000000000000000A5 -:100B50000000000000000000000000906B0B00008F -:100B60000000FFFF0000FF0000003C3C0000FF0011 -:100B70000000FF000000FF000000FF000000FF0079 -:100B80000000000000000000000000000000000065 -:100B900000000000000000000000FFFFFFFFD81B66 -:100BA000D81B0000000030300000000000000000F2 -:100BB0000000000000000000000000000000000035 -:100BC0000000000000000000000000000000000025 -:100BD00000000000000000000000000000F06B0BAF -:100BE00000000000FFFF0000FF0000003C3C000090 -:100BF000FF000000FF000000FF000000FF000000F9 -:100C0000FF000000000000000000000000000000E5 -:100C100000000000000000000000000000000000D4 -:100C200000000000000000000000000000000000C4 -:100C300000000000000000000000000000000000B4 -:100C400000000000000000000000000000000000A4 -:100C50000000000000000000000000000000000094 -:100C60000000000000000000000000000000000084 -:100C70000000000000000000000000000000000074 -:100C80000000000000000000000000000000000064 -:100C90000000000000000000000000000000FFFF56 -:100CA00066F07E7EF0FF0F0F000F0F3F0F0F000169 -:100CB000000000FF99FF000000000000000000009D -:100CC0000000000000000000000000000000000024 -:100CD0000000000000000000000000000000000014 -:100CE0000000000000000000000000FF00000F0FE7 -:100CF000000000FF00000F0F000000FF00000F0FBA -:100D0000000000FF00000F0F0000000000000000C6 -:100D100000000000000000000000000000000000D3 -:100D2000FFFF3CF04242F0FF0F0F000F0F3C0F0C93 -:100D30000001000000FFFFFF0000000000000000B5 -:100D400000000000000000000000000000000000A3 -:100D50000000000000000000000000000000000093 -:100D600000000000000000000000000000FF000084 -:100D70000F0F000000FF00000F0F000000FF000039 -:100D80000F0F000000FF00000F0F00000000000028 -:100D90000000000000000000000000000000000053 -:100DA000000000610E06000D000000000030000091 -:100DB00000000000400000000000000000000000F3 -:100DC00000000500002000000000000000000000FE -:100DD0000000000000000000000000000000000013 -:100DE00000000000000000000000000003020338C3 -:100DF0000C0092C0038203380C0092C003820338B7 -:100E00000C0092C0038203380C0092C00000000066 -:100E100000000000000000000000000000000000D2 -:100E20000000000000000000C3FFC3FF000000003E -:100E300000000000000000000000000000000000B2 -:100E400000000000000000000000000000000000A2 -:100E50000000000000000000000000000000000092 -:100E60000000000000000000000000000000000082 -:100E70000000000000000000000000000000000072 -:100E80000000000000000000000000000000000062 -:100E90000000000000000000000000000000000052 -:100EA000000000000000000000003C3C3C3C000052 -:100EB0000000000000000000000000000000000032 -:100EC0000000000000000000000000000000000022 -:100ED0000000000000000000000000000000000012 -:100EE0000000000000000000000000000000000002 -:100EF00000000000000000000000000000000000F2 -:100F000000000000000000000000000000000000E1 -:100F100000000000000000000000000000000000D1 -:100F2000000000000000000000000000CDC0CDC0A7 -:100F300000000000000000000000000000000000B1 -:100F400000000000000000000000000000000000A1 -:100F50000000000000000000000000000000000091 -:100F60000000000000000000000000000000000081 -:100F70000000000000000000000000000000000071 -:100F80000000000000000000000000000000000061 -:100F90000000000000000000000000000000000051 -:100FA0000000000000000000000000000000CDC0B4 -:100FB000CDC00000000000000000000000000000A4 -:100FC0000000000000000000000000000000000021 -:100FD0000000000000000000000000000000000011 -:100FE0000000000000000000000000000000000001 -:100FF00000000000000000000000000000000000F1 -:1010000000000000000000000000000000000000E0 -:1010100000000000000000000000010000000000CF -:101020000000000000000000000000000080000040 -:101030008800880000808400018082000000000099 -:10104000020002000000000000000200000000009A -:10105000200020000000000000000000200002002E -:1010600002000000200000000000000088000000D6 -:10107000000040000200000002000200000020000A -:1010800020000000020002008400020002000000B4 -:1010900000002000400000000000000004000000EC -:1010A000000000000000000000000000000000023E -:1010B00000000000000000400000081000000000D8 -:1010C0000000000000000000000000000000000020 -:1010D0000000000000000000000000000000000010 -:1010E0000000000000000000000000000000000000 -:1010F000000000000000000000000000000000826E -:1011000000000000000000000000000000000000DF -:1011100000000000000000000000000000000000CF -:1011200000000100000000000300030003020300B0 -:1011300000000000000000000000000000000000AF -:101140000000A005000001000800000000000000F1 -:101150000000000004000010000000000000020079 -:10116000000000000000000000000000000000007F -:10117000000000000000200020000000000000002F -:1011800002000000008000100000100000000000BD -:10119000000000000000000020000000000000002F -:1011A000000000000400000000000400040004012E -:1011B000040002000200020002000200020002001D -:1011C00000000200000041000400020000000200D4 -:1011D000000000000200028802000000020002007D -:1011E00010000008000000082000020000080400B1 -:1011F000000020000484028402004100020000007C -:101200000008008202080210000100000008000827 -:1012100000000000000000000000000000000000CE -:101220000000000000000000000000000004002199 -:101230000041000000002100208420040000001173 -:101240000800A000000000080003000000030000E8 -:1012500000000000000000080000900000000000F6 -:101260000000000000080000000000000000000076 -:10127000000000000000000000000000000000006E -:101280000000000000000005000800000000000051 -:10129000000000000000000000000000000000004E -:1012A000000000000000000000000000000000003E -:1012B0000000000011001100A000801185830500CE -:1012C0000000854005000000000000000020000034 -:1012D000000000000000000000000000000000000E -:1012E000008400000000000000000000000000007A -:1012F00000000308000000000000000000000000E3 -:1013000000000500000000000000000000000000D8 -:1013100000000000000000000000000000000000CD -:10132000000000000100400004000400040004006C -:101330000000004100110010000000844082208461 -:1013400000000000000003100010000000410080B9 -:10135000000000000000002100000000000000006C -:101360000000000008000000020000000000000073 -:1013700000000000000000000000C00000000000AD -:10138000000000000000000000000000000000005D -:10139000A00000000008000008000000000000009D -:1013A000820000000000400080008000800080007B -:1013B000800000000000000003000004000480051D -:1013C000204000000002000004050001000000822F -:1013D000002000000082008203A000000000000046 -:1013E00000100000000000000000000000000000ED -:1013F000000000000000009000000000000000005D -:101400000000000000C0000000000000000000001C -:1014100002000800000000000000000000000000C2 -:1014200000000000000000000000000000000000BC -:1014300000000021004100090000900082008200AD -:101440008208820040030000000200000000000348 -:101450000011001000080003000000000008004117 -:101460000000000300000000000000080000000071 -:101470000000000000008400820000000400000062 -:10148000A0000000000000000000000008000000B4 -:10149000000000000000000000000000000000004C -:1014A000000000000002000000000000000000003A -:1014B000000000000000000000000000000011C05B -:1014C00011000500059080000000004100080000A8 -:1014D0000000000003000000000000000000000009 -:1014E00000000000000000000000000000000000FC -:1014F00000000000000000000000000000000000EC -:1015000000000000000000000000050000000000D6 -:1015100000000000000000000000000000A021000A -:1015200000000000000000000000000000000000BB -:101530000010004100210002010000410000019064 -:101540000084000400048484840041000000001032 -:101550000000002100020000000000000000002147 -:1015600000000080010000040000000000000000F6 -:1015700000000008000000000000000082000000E1 -:101580000000000000000000040000000000000057 -:1015900004000000000000009000000300000000B4 -:1015A000000000000000000000000000000000003B -:1015B0000000000000000000000104C000C0009016 -:1015C00040200904000500912005000040000000B3 -:1015D0000008000000000001000000000000000002 -:1015E0000084000000042000000100002000000032 -:1015F00000000000000000000000000000000000EB -:101600000000000041A000000000C1000000000038 -:101610000000800003000000000000000000000047 -:1016200000000000000000000000000000000000BA -:101630000800000040C000901000101000C0019091 -:1016400008009090A1010003C020008400009003D6 -:1016500088820002C0A000040040100800000000C2 -:101660000000000000000000010000000003000076 -:10167000000000000000000000000000000000006A -:10168000000000000000A00200C0000890900000D0 -:10169000000000000000100800900088009000008A -:1016A000000000000000000000000000000000003A -:1016B0000000800000008080048080008080008026 -:1016C0004080800000002020101004200020002016 -:1016D00080A180890085808000800000800000005B -:1016E00000000000000000000000100000000000EA -:1016F00000000000000000000000000000000000EA -:1017000000000000000000008000000000008000D9 -:101710000000000000000000008000000000000049 -:1017200000000000000000000000000000000000B9 -:101730000900090010008400000080418041808081 -:10174000090004410400C0000011202180C0028271 -:101750000300030383002102C1000500052091005E -:1017600000000000000000000080000011110800CF -:101770000000000000000000000000000000000069 -:1017800000000000000000000000000000038000D6 -:1017900000000000000000000080000000000000C9 -:1017A0000000000000000000000000000000000039 -:1017B00000000000000000009000000040008401D4 -:1017C000C090880000010088C10888A01091408561 -:1017D00084A0000000C0A10001C188000000030037 -:1017E0000240000000000000000000400000010175 -:1017F00001000000000000000000000000000000E8 -:101800000000000000000000000000002000200197 -:10181000A000A02000000000000000044000100014 -:101820008800000000000000000000000000000030 -:101830000000000000010000020100000001004063 -:101840009000C0C040010040C09000C1084110910C -:101850002103A020900101881001841104040004D8 -:1018600004088240000000000000000000000000AA -:101870000001000100000000000000000000000066 -:101880000000000000000000000000000000A09028 -:1018900000A0000220020000000000000000400044 -:1018A00000000000A0A000000000000000000000F8 -:1018B00000000000000000080041002100090008AD -:1018C00000898010808980080089808400850088D4 -:1018D000801021218920820803038808A089808044 -:1018E00000800000800000000000000000000000F8 -:1018F00000000008001100000000000000000000CF -:1019000000000000000000000000000000000000D7 -:101910000000008000800080000000000000000047 -:1019200000000000000080800000000000000000B7 -:10193000000000000000000000820002000000081B -:101940008011801080800000800800820021000942 -:10195000100003002100000088000289A111850504 -:10196000800000A0000080000000000000000000D7 -:10197000000011000800111100000000000000002C -:101980000000000000000000000000000000000057 -:1019900000000000000200800000000000000000C5 -:1019A00000000000008000000000000000000000B7 -:1019B000000000000000000000000010000800000F -:1019C0000001C001200010100000C0000040009184 -:1019D0009000A10020100120840090100109030153 -:1019E0008401402000A0004008000000000000002A -:1019F00000000000010001000101000000000000E3 -:101A000000000000000000000000000000000000D6 -:101A1000000000008200009090C000000000000064 -:101A20000000000000000002002000000000000094 -:101A30000000000000000000000000000081000025 -:101A40000600000000820000060000420081000045 -:101A50000600484241000060000000000000000055 -:101A600006000000000000000600810000000000E9 -:101A700000000000410000600000000000000000C5 -:101A80000000000000000000000000000000000056 -:101A900000000000000000000000060000060082B8 -:101AA0000000060000000000000000000000000030 -:101AB0000000000000000000000000000000000026 -:101AC0000000000000000000F0FF0000AAAA0000D3 -:101AD000BEBE0000F0F0EBC32800FF0F960FF3F33B -:101AE000CFCF0000F0F000003C3C00000A000000F6 -:101AF00000000000000000000000000000000000E6 -:101B000000000000000000000000000000000000D5 -:101B1000000000000000000000000000000000289D -:101B20000000000000000000000000000000AAAA61 -:101B300000000000000000000000000000000000A5 -:101B400000000000000000000000000F0000F0F0A6 -:101B500000001414000000FFEBFF283CFF0F960F5D -:101B6000FCFC3F3F0000F0F000003C3C0081AA0B71 -:101B70000000000000000000000000000000000065 -:101B80000000000000000000000000000000000055 -:101B900000000000000000000000F0F0FFFF0FFF59 -:101BA0000FFF000000000000000000000000000027 -:101BB000AAAA0000000000000000000000000000D1 -:101BC000000000000000AAAA0000D71400000F0FB8 -:101BD0000000FF3C000055550000F5C5F5C5FFFFAE -:101BE000AAFC77EB77EB55005500C3C3FFFFFFFF5F -:101BF000BEFF000000000000000000000000000028 -:101C000000000000000000000000000000000000D4 -:101C10000000000000000000000000000000888CB0 -:101C200000FF00FD0000000000000000FFFBFFFBC4 -:101C3000C3F3C3F300000000000000000000000038 -:101C40000000000000000000AAAA0000D714000055 -:101C5000FF000000C30000003C3C000035053505D6 -:101C6000FFFF3FFFFDBEFDBE5500550050D050D0D8 -:101C7000FFFF3CFF0000000000000000000000002B -:101C80000000000000000000000000000000000054 -:101C90000000000000000000000000000000000044 -:101CA000A8E800FF00FF0000000000000000FF386F -:101CB000FFFB82B282B200000000000000000000C2 -:101CC0000000000000000061003E000D10C003E3B2 -:101CD000033E0C0D92C003E3033E0C0DC2C0006135 -:101CE0003007C00D000085614A0E051D00A100618E -:101CF0000006001D00000000000000000000006160 -:101D00000005C0010000000000000000000000000D -:101D100000000000000000000000000000000000C3 -:101D2000000000080000000000000020000000A0EB -:101D300000000000000000000000000000000000A3 -:101D400000000000000000000000000000009900FA -:101D500000000000082010010000000055AAAA554C -:101D60000000FA55FAAAA8A800C3000031440144B3 -:101D70000000000000000000000000000000000063 -:101D8000E010E010FF000000000000000000000074 -:101D90000000000000000000000000000000000043 -:101DA0000000000000000000000000000000000033 -:101DB0000000000000000000000000000000000023 -:101DC0000000000000000000000000000000000013 -:101DD00099000000000002804004000000004182E1 -:101DE0008244AA55FA55FAAAF8F800C00000314416 -:101DF000014400000000000000000000000000009E -:101E00000000E010E010FF000000000000000000F3 -:101E100000000000000000000000000000000000C2 -:101E200000000000000000000000000000000000B2 -:101E300000000000000000000000000000000000A2 -:101E40000000000000000000000000000000000092 -:101E5000FFF096900000000000000000000000006D -:101E600001000000FFFCFFC30F0F000055F700004A -:101E70000000936C00000000F3C0F0C00000000000 -:101E80000000000000000000AA5500000000000053 -:101E90000000000000000000000000000000000042 -:101EA0000000000000000000000000000000000032 -:101EB0000000000000000000000000000000000022 -:101EC0000000000000000000000000000000000012 -:101ED00000009690FFF000000000000000000000ED -:101EE000000001000000FFF0FFC30F0F0000000022 -:101EF00000000000000000000000FFC0FCC0000067 -:101F000000000000000000000000AA5500000000D2 -:101F100000000000000000000000000000000000C1 -:101F200000000000000000000000000000000000B1 -:101F300000000000000000000000000000000000A1 -:101F40000000000000000000000000000000000091 -:101F50000000000000000000000000000000000081 -:101F60000000000000000000000000000000000071 -:101F700001800000020085008800000000000000D1 -:101F80000000000000000400000000004080840009 -:101F9000000000000080218801800000008800000F -:101FA0000000000000000000000000000000000031 -:101FB0000080000800002000000088000000881059 -:101FC000880000000000C000840500000000000040 -:101FD0008800000000000000000000000000000079 -:101FE000000000000000008200000000000000006F -:101FF0000000401000008000400000A000000090A1 -:10200000000000000000009000000090000080022E -:102010000000000000000020042004204090001078 -:10202000000000000000000000840000000000002C -:102030000000001000000000000000000000000090 -:10204000000100000000000000000000000000008F -:102050000000400000000000000000000000000040 -:10206000000000000000000000000000010000006F -:102070000000000200000000410000000800000015 -:10208000000008000010000001000800010001002D -:102090000800010000000000010001000100000034 -:1020A0000200000001000000000000000100080024 -:1020B0000000208000000000000010000000000070 -:1020C0000000000000800000000000000000000090 -:1020D0000000000000000000000000000000000000 -:1020E00000000000000000000000000000000800E8 -:1020F00000000000000100000000C000000080009F -:102100000000000080000000000008008000400087 -:10211000400000824000000000840400040004002D -:1021200000009100000008080002000000002000EC -:10213000808800000040000010000000000800003F -:102140000000000200000010000004000008000071 -:10215000000000000000000000000000000000007F -:10216000000000000000000000410000010001002C -:102170008800000540080000000000028400000004 -:1021800000000000A000000800080000000500207A -:10219000000400210004000000000000C000C02175 -:1021A00000000000004100000005004000000008A1 -:1021B0000000000001008400880000000000001101 -:1021C000000000000000000000000000000000000F -:1021D00000000000000000000000000000000000FF -:1021E0000000000000A000000000000020A020105F -:1021F000200021000000C1000500009009890300B3 -:10220000000000900000000000000000000000003E -:1022100000000000000000000000000000000000BE -:10222000000000000800000000000000090141005B -:102230000000030000000800000000000000000093 -:102240000000030000000000000000400008000043 -:10225000000000000000000000000000000000007E -:10226000000000000000000000000000000400105A -:1022700021092111A0000810090000000000000041 -:1022800000000000010000000000000500A00000A8 -:1022900040210041C010002140000000000000006B -:1022A000000000000804080000000010000000000A -:1022B0000000000008008200000084000800000008 -:1022C000000000000000000000000000900000007E -:1022D00000004000000000000000000000080000B6 -:1022E00000000000000000000000400000000001AD -:1022F0000001A000A0000000808588000990000473 -:10230000000000C0000402000020000000000021C6 -:1023100000008000000000080000800000100000A5 -:1023200000000000000000000000000000010000AC -:10233000000000000000000000000000000000009D -:10234000000000000000000000000000000000008D -:10235000000000000000000000000000000000007D -:10236000000000000000000000000000000000006D -:102370000080400009842080000000000000084127 -:102380000008010500A101020000000082210000F8 -:102390000000080400040000000201214004400481 -:1023A00000004000400000000400000040008200E7 -:1023B0000000000400000000820000000000000097 -:1023C000000000000000000000000000000000000D -:1023D00000000008000000000000000000000000F5 -:1023E000000000A0008800000000008400A000A001 -:1023F000000000048084A0058004210000900008F3 -:10240000A10000004004001008840000000021002A -:102410000000000080000000000000000800000232 -:1024200000040000000000000000000000000000A8 -:102430000000000000000000000000000000050097 -:1024400005000900000000000090000003000000EB -:1024500003880040000000000000000000000000B1 -:10246000000000000000000000000000000000006C -:1024700000000000219100000110910000110011E6 -:102480009009001100110004418400000000824105 -:1024900000000002000300000002004100000000F4 -:1024A0000008000200000000020000000000000020 -:1024B00000000000000500400000000000200000B7 -:1024C000000000000000000000000000000000000C -:1024D00000000000000000000000000000000000FC -:1024E00000000000000000000000000000000000EC -:1024F000000000840000A004009020002000008460 -:102500002000000009C00004000088024000030011 -:1025100004040000000000000000000100000000B2 -:102520000000000000010000020000000000008424 -:10253000000021C000000000000100002000000099 -:102540000000000008000000000000000000000083 -:10255000000000000000000000000000000000007B -:10256000000000000000000000000000000000006B -:1025700000000000000000008484080400828484BD -:1025800004900010A0A084020000100000010802C6 -:102590001010000200041008C0900000001090000D -:1025A00000A00011000900080003A0A00090008412 -:1025B00090A002080004008800080000000000004D -:1025C000000008A0000000A088A00000000000009B -:1025D00000000000000000000000000000000000FB -:1025E00000000000000000000000000000000000EB -:1025F00000000000000000000000000080000090CB -:1026000000048000040000800000000000000003BF -:1026100000100080000000008080000000000080AA -:102620000000008300030040000800008880008054 -:10263000008080008080000000800000000000001A -:10264000000000004080000000800000000000004A -:10265000000000000000000000000000000000007A -:10266000000000000000000000000000000000006A -:1026700000000000000000000000000091000300C6 -:1026800010002041100080118080110040000000E7 -:10269000C00002048000000300800000840083006A -:1026A0000800910000801000080000A100008000D8 -:1026B00080038080808000008041002100000000B5 -:1026C000800080000080800080000000000000008A -:1026D000000000000000000000008000000000007A -:1026E00000000000000000000000000000000000EA -:1026F0000000000000000000000000000000089042 -:102700000500C000C091C100020008108200C1A0F5 -:102710009000A00040008800020102A08802100082 -:1027200010009000100000020000000000A1000056 -:10273000A00002004040909090004000040910006A -:1027400000008200A0000090880020002020A0004F -:10275000000000000000000000000000A0000000D9 -:102760000000000000000000000000000000000069 -:102770000000000000000000000000000000000059 -:10278000101000040082A1A0C04000088410A11114 -:1027900010020101A104000402400002084090045C -:1027A000001000A00284101008000100A100080021 -:1027B0000000909000020090840840000004000097 -:1027C000080000080000020001880000008800A046 -:1027D00090000000000000000000000000100088D1 -:1027E00000000000000000000000000000000000E9 -:1027F00000000000000000000000000000000000D9 -:1028000000008080001000809190808500038091FE -:10281000218800410821A110000000800000000074 -:1028200000000080008000800980000810418508B9 -:102830000800000000000080008080800000008010 -:1028400000008000000000000000410000000000C7 -:1028500000000000000000000000000000000080F8 -:102860000000000000000000000000000000000068 -:102870000000000000000000000000000000000058 -:102880000000000010000309100009038000808090 -:102890000000004080008380218040408000800054 -:1028A00080000000008080808000800020202100C7 -:1028B00008000800000000000041001100000000B6 -:1028C0008080800080000000000000000000000008 -:1028D0008000000000000000000000000000000078 -:1028E00000000000000000000000000000000000E8 -:1028F00000000000000000000000000000000000D8 -:1029000000000000000001880184000400000800AD -:10291000A00808C090014000A0A011040000080019 -:10292000A00808028800004004C0100288000001CE -:1029300002000000020000000800400100A1840025 -:102940009000100202080200000000880000000051 -:10295000000002C000900000000000000000000025 -:102960000000004000A00000000000000000000087 -:102970000000000000000000000000000000000057 -:1029800000000000000000000000006000000012D5 -:1029900000000000000041000000000000000000F6 -:1029A000000000000000000000820000060041005E -:1029B000000000000000000000000082000006008F -:1029C00041000000000000000000840000600600DC -:1029D00000410000000000000000000000000000B6 -:1029E00000000000000000000000000000000000E7 -:1029F00000000000000000000000000000000000D7 -:102A0000000000000000000000000000000028108E -:102A1000241800040404406040400F00000000003F -:102A2000003CFEFE00FFC1C1C1C10CFF0CFFC30092 -:102A3000C34000C300C3000000000000FF99FF99DD -:102A40009930993C0009000D0909090900000000AE -:102A50003C3C000000660066000000000000000032 -:102A60000000000000000000000F000F0000000048 -:102A70000000000000000000000000000000000056 -:102A80000000000000000000000000000000000046 -:102A90004184428100000000002000000F0000007F -:102AA00000000000FCFC00FFC1F0C1C10CFF0CFFE6 -:102AB0000000404000C300C3000000000000000010 -:102AC0003C00B900BD00000900090909090900001E -:102AD00000003C3C000000660066600060000000F2 -:102AE00000000000000000000000000F000F0000C8 -:102AF00000000000000000000000000000000000D6 -:102B000000000000000000000000000000000000C5 -:102B100000000000000000000000000000000000B5 -:102B200000000000000000000000000000000000A5 -:102B30000000000000000000000000000000000095 -:102B40000000000000000000000000000000000085 -:102B50000000000000000000000000000000000075 -:102B60000000000000000000000000000000000065 -:102B70000000000000000000000000000000000055 -:102B80000000000000000000000000000000000045 -:102B90007C3C480C00000000F030F06000000F00AA -:102BA0003C3C3C3C0000000009FF99009D9D040452 -:102BB0000000606066E70F0F0606070600000000D1 -:102BC000000002FF02C10000C3C37E00FFFF00003F -:102BD0000242000000006F096F0900000404F0FFCA -:102BE000FFC30000000000000000000000000066BD -:102BF000006600000000000000000000000000006F -:102C000000000000000000000000000000000000C4 -:102C10000000FFFF090F80000000F000F00000003E -:102C20000D0000000000CFCF273FFFFF4242940D70 -:102C3000940D0000606000C30F0F0606060600003A -:102C40000000000000FF00000F00C3C30C00FFFFE6 -:102C500000000000000000006F096F09000004047C -:102C6000FFFFFF6600000000000000000000000001 -:102C700066666666000000000000000000000000BC -:102C80000000000000000000000000000000000044 -:102C90000000000000610002000100000061000669 -:102CA000000D000080610006000D00000000000023 -:102CB0000010000000614036000D000000610006B9 -:102CC000000D00000000000000380000000080003F -:102CD00000000000000100610006801D000080006F -:102CE00000000010000000000000000000000000D4 -:102CF00000000000000000000000000000000000D4 -:102D000000000000000000000000000000000000C3 -:102D1000000000000000FA2828280F0FFFFF000025 -:102D20000000000004040F0F0F0F003000300000FF -:102D30000000000000000000000000000000C3C30D -:102D4000400000C000C000000000000000000000C3 -:102D50000000000000000000000000000000000073 -:102D60000000000000000000000000000000000063 -:102D70000000000000000000000000000000000053 -:102D80000000000000000000000000000000000043 -:102D90000000000000000000000000000F0FFFFF17 -:102DA00000000000400040000F1F0F1F00300030E7 -:102DB0000000000000000000000000000000000013 -:102DC0004000400000C000C0000000000000000003 -:102DD00000000000000000000000000000000000F3 -:102DE00000000000000000000000000000000000E3 -:102DF00000000000000000000000000000000000D3 -:102E000000000000000000000000000000000000C2 -:102E100000000000000000000000FCFCFCFCFFBE05 -:102E2000FFFF000000009696828240404040000074 -:102E300000280000000000000000000000000C005E -:102E40000000FFFFFFFFF000F000000000000000A6 -:102E50000000000000000000000000000000000072 -:102E60000000000000000000000000000000000062 -:102E70000000000000000000000000000000000052 -:102E80000000000000000000000000000000000042 -:102E9000000000000000000000000000FCFCFCFC42 -:102EA000FFAEFFFF00000000969682820000000047 -:102EB00000000028000000000000000000000000EA -:102EC00000000000A8FCAAFFF000F00000000000D5 -:102ED00000000000000000000000000000000000F2 -:102EE00000000000000000000000000000000000E2 -:102EF00000000000000000000000000000000000D2 -:102F000000000000000000000000000000000000C1 -:102F100000000000000000000000000000000000B1 -:102F200000000000000000000000000000000000A1 -:102F300000000000000000000400880088800000FD -:102F4000000004050000040000000400040000006C -:102F5000000000000000000000000400880088005D -:102F60000000000020000000200088002000200059 -:102F7000000000000000040004002000880004009D -:102F8000000000000000C000000020000000200041 -:102F90000000000000000000000000000000000031 -:102FA0000000000000000000000000000000000021 -:102FB00000000000000000000000000000000020F1 -:102FC0000000000000000000000000000000000001 -:102FD00000000000000000000000000000002000D1 -:102FE00000000000000000000000000000000000E1 -:102FF00000000000000000000000000000000000D1 -:1030000020000000000000000000000000000000A0 -:1030100000000000000000000000000000000000B0 -:103020000000000000000000000000000000000997 -:103030008400000000000000840000000000000088 -:103040000800000000000000000000000000000078 -:103050000000000000000000040000000000000864 -:10306000A0000000000000000400000810000000A4 -:103070000000200010000000000000000000000020 -:1030800004000400000000410000000000000408EB -:103090002000000000000000000000000000000010 -:1030A000000000000000000000000000000004001C -:1030B0000500000000000000000000000400000007 -:1030C00000000000040004000000000000000000F8 -:1030D00000080000000004080000000000000000DC -:1030E000000004840400040004000008000002083A -:1030F00000000210000000080400000000000000B2 -:103100000408000000000400000000080008040893 -:103110000000000800000000000020000000000087 -:1031200000000000000000002000000084000000FB -:103130008800010000800000C00200004000000084 -:1031400000000000820000410000000000000008B4 -:10315000000000000000000000000000000300006C -:10316000000000000000000000000000000000005F -:10317000000000000808000000000000002100001E -:10318000000000000000000000000000002000001F -:10319000000000000000000000000000000000002F -:1031A00000000000000011000000000000001100FD -:1031B00000840010400800400084000100008000EE -:1031C00000A0000000080010000010000000000037 -:1031D00000000000000000880000000400000082E1 -:1031E000000000000000000000000000200041047A -:1031F00000000000000000000000000000000000CF -:1032000000000000000008000000000000000000B6 -:1032100000000000000000000000000000000000AE -:10322000000000000000000000000000000000009E -:10323000000000000000408040000000000000008E -:103240000000000000000400040000000000000076 -:10325000000000000000820082000000000000006A -:103260000000000000000800000000000000000056 -:103270000000000000000009040004000000000835 -:10328000000000000000000000000000000000003E -:103290000800000000000000000000000000000026 -:1032A0000000000000000000000000000000008896 -:1032B000008811C0000000048002000000820000AD -:1032C000404000001100410020000082400000004A -:1032D000000000C00000000000000000000000909E -:1032E000000000000088008800000090000000003E -:1032F00000000000000000000000000000000000CE -:1033000000000008000000000000000003000000B2 -:1033100000000000000000000000000000000000AD -:10332000000000000000000000000000000000009D -:10333000000001000100000000004000408000008B -:103340000000C000000000000000000800040000B1 -:103350000000000800000000000000000000000065 -:103360000000000000000000000000110000080044 -:10337000000000000000000000000000000000004D -:10338000000000000000000000000000000000003D -:103390000000000000000000000000000800000025 -:1033A000000000000010000000000000000000000D -:1033B000110000A04000400000881100800085023C -:1033C0000200000000882000092000002000000208 -:1033D0000000050010A02088090000000000000087 -:1033E00000000000000000822088090000000000AA -:1033F00005000002000000A0050000080000080809 -:10340000000000000000400000000000000000007C -:1034100000080000000000000000000000000000A4 -:10342000000000000000000000000000000000009C -:1034300000000000880090800100000900004004A6 -:103440004004002100000000400000410000000096 -:10345000000000000000000000000000000000006C -:10346000000000000000000000000000000000005C -:10347000000000000000000000000000000000004C -:10348000000000000000000000000000000000003C -:103490000000000000000000000000000800000024 -:1034A000000000000000000000000000000000001C -:1034B00000000000000000C04010080000C0000034 -:1034C0001102200204080020042020200000000037 -:1034D00000000000000000000000200400000000C8 -:1034E00000000000000000000000000000000000DC -:1034F00000000900000000001100000000000000B2 -:1035000000000000000000000000000000000008B3 -:1035100000000000000000000000000000000000AB -:10352000000000000000000000000000000000009B -:103530000000000000000000010088000000000002 -:103540000100A0A0000000000000A000000040A0BA -:1035500000020000A02000000000000000000000A9 -:10356000000000000000000100000000000000005A -:10357000000000000000000000000000000000004B -:10358000000000000000000000000000000000003B -:10359000000000000000000000000000000000002B -:1035A000000000000000000000000000000000001B -:1035B0000000000000000000000008000000000003 -:1035C0000000400000800000000004000000000037 -:1035D00080000080000000000000000000000000EB -:1035E00000000000000000000000000000000000DB -:1035F00000000000000000000000000000000000CB -:1036000000000000000000000000000000000000BA -:1036100000000000000000000000000000000000AA -:10362000000000000000000000000000000000009A -:103630000000000000000000000008000000090079 -:1036400009000000008382000400008000000000E8 -:10365000000000000000804080000000000000002A -:10366000000000000000000000000000000000005A -:10367000000000000000000000000000000000004A -:10368000000000000000000000000000000000003A -:10369000000000000000000000000000000000002A -:1036A000000000000000000000000000000000001A -:1036B000000000000000000000000000C1008400C5 -:1036C000840084000400040505A0858400C0000077 -:1036D00000000000C0000400A000900000000000F6 -:1036E00000000000000000000000000000000000DA -:1036F00000000000000000000000000000000000CA -:1037000000000000000000000000000000000000B9 -:1037100000000000000000000000000000000000A9 -:103720000000000000000000000000000000000099 -:103730000000000000000000000000000000000089 -:103740000001008300A14001001082A1A0840000BC -:10375000000100000000C084008290C0000400004E -:103760000000000000000000000000000000000059 -:103770000000000000000000000000000000000049 -:103780000000000000000000000000000000000039 -:103790000000000000000000000000000000000029 -:1037A0000000000000000000000000000000000019 -:1037B0000000000000000000000000000000000009 -:1037C00000090020002000A08040000500218004A6 -:1037D00000110040000500058000008000004080CE -:1037E00000000000000000000000000000000000D9 -:1037F00000000000000000000000000000000000C9 -:1038000000000000000000000000000000000000B8 -:1038100000000000000000000000000000000000A8 -:103820000000000000000000000000000000000098 -:103830000000000000000000000000000000000088 -:1038400000000080000000000004800080000000F4 -:1038500000002000040008001100000000800000AB -:103860000000000000000000000000000000000058 -:103870000000000000000000000000000000000048 -:103880000000000000000000000000000000000038 -:103890000000000000000000000000000000000028 -:1038A0000000000000000000000000000000000018 -:1038B0000000000000000000000000000000000008 -:1038C0000000000000C0000400C00000080040909C -:1038D000042082000100000001000000000000A0A0 -:1038E0000088000000000000000000000000000050 -:1038F00000000000000000000000000000000000C8 -:1039000000000000000000000000000000000000B7 -:1039100000000000000000000000000000000000A7 -:103920000000000000000000000000000000000097 -:103930000000000000000000000000000000000087 -:103940000000000000000000000000005000000027 -:1039500000000000000000000000000050000021F6 -:1039600000000600840000000000000000000000CD -:103970000000000000000000000000000000000047 -:103980000000000000000000000000000000000037 -:103990000000000000000000000000000000000027 -:1039A0000000000000000000000000000000000017 -:1039B0000000000000000000000000000000000007 -:1039C000000000000000000000000000FFFF00FFFA -:1039D000BF77BE7F000F0000000000000000000065 -:1039E000000000000000808A0000000000000000CD -:1039F00000000000000000000000000000000000C7 -:103A000000000000000000000000000000000000B6 -:103A100000000000000000000000000000000000A6 -:103A20000000000000000000000000000000000096 -:103A30000000000000000000000000000000000086 -:103A40000000000000000000000000000000FFFF78 -:103A500000FF32363236000F000000000000000088 -:103A60000000000000000000000000000000000056 -:103A70000000000000000000000000000000000046 -:103A80000000000000000000000000000000000036 -:103A90000000000000000000000000000000000026 -:103AA0000000000000000000000000000000000016 -:103AB0000000000000000000000000000000000006 -:103AC00000000000000000000000000000000000F6 -:103AD000659A4488F0F0F0F000C300EB00000000AD -:103AE00000000000FF00FF00CF8ECF0C00000000A0 -:103AF00000000000000000000000000000000000C6 -:103B000000000000000000000000000000000000B5 -:103B100000000000000000000000000000000000A5 -:103B20000000000000000000000000000000000095 -:103B30000000000000000000000000000000000085 -:103B40000000000000000000000000000000000075 -:103B5000000021120000AAAAAAAA00C330EB0000AC -:103B60000000000000003C000000FFFFFFFF00001D -:103B70000000000000000000000000000000000045 -:103B80000000000000000000000000000000000035 -:103B90000000000000000000000000000000000025 -:103BA0000000000000000000000000000000000015 -:103BB0000000000000000000000000000000000005 -:103BC00000000000000000000000000000000000F5 -:103BD00000610006000D000000613006000D0000CD -:103BE00000610006000D0000000000300000000031 -:103BF00000000000000000000000000000000000C5 -:103C000000000000000000000000000000000000B4 -:103C100000000000000000000000000000000000A4 -:103C20000000000000000000000000000000000094 -:103C30000000000000000000000000000000000084 -:103C40000000000000000000000000000000000074 -:103C500000000000000000F0BEFF000000000000B7 -:103C600000000000A800FFFF05AA000000000000FF -:103C70000000000000000000000000000000000044 -:103C80000000000000000000000000000000000034 -:103C90000000000000000000000000000000000024 -:103CA0000000000000000000000000000000000014 -:103CB0000000000000000000000000000000000004 -:103CC00000000000000000000000000000000000F4 -:103CD000000000000000000000FFBEFF0000000028 -:103CE00000E000F00000A8005FFFFABE0000000046 -:103CF00000000000000000000000000000000000C4 -:103D000000000000000000000000000000000000B3 -:103D100000000000000000000000000000000000A3 -:103D20000000000000000000000000000000000093 -:103D30000000000000000000000000000000000083 -:103D40000000000000000000000000000000000073 -:103D50000000000000000000000028280082000091 -:103D600000000000FF000000000000000000000054 -:103D70000000000000000000000000000000000043 -:103D80000000000000000000000000000000000033 -:103D90000000000000000000000000000000000023 -:103DA0000000000000000000000000000000000013 -:103DB0000000000000000000000000000000000003 -:103DC00000000000000000000000000000000000F3 -:103DD00000000000000000000000000014140000BB -:103DE000000000000000FF000000000000000000D4 -:103DF00000000000000000000000000000000000C3 -:103E000000000000000000000000000000000000B2 -:103E100000000000000000000000000000000000A2 -:103E20000000000000000000000000000000000092 -:103E30000000000000000000000000000000000082 -:103E40000000000000000000000000000000000072 -:103E500000000000000000800000000000000000E2 -:103E60000000000000000000000000000000000052 -:103E70000000000000000000000000000000000042 -:103E80000000000000000000000000000000000032 -:103E9000000088000000C00040000000400020003A -:103EA00020000800000000000000000000000000EA -:103EB0000000880000000000A000C00020002000DA -:103EC00020008400000000008800002000000000A6 -:103ED00000000000000000000002000000000000E0 -:103EE00000000000000000000000000000000000D2 -:103EF00000000000000000000000000000000000C2 -:103F00000000000040000000000000000000000071 -:103F100000000000000000000000000000000000A1 -:103F20008000800080000000000000000000000011 -:103F3000000000000000000000000082400040007F -:103F400040004040000000000000000000010000B0 -:103F50000000000000000000000000000000000061 -:103F600000000000400000000000000040000000D1 -:103F7000000000000000000001000000010000003F -:103F8000400000000100020000410100004000006C -:103F90000000000000000000000000000000010020 -:103FA00000001000C0050000000000000009000033 -:103FB00000000000000800000002000000030000F4 -:103FC00004000000000000080000000000040008D9 -:103FD00000000000000000000000000000000000E1 -:103FE00000000000000080000000000000008500CC -:103FF000000000000000000000004000050040003C -:104000000000800004000800000000002000000103 -:104010000000000000040400000000000400000094 -:104020002000000000000000009000000000008858 -:10403000040000000000000000080083000000826F -:104040000000000000080000000000000000000860 -:104050000000000000000000000000000000000060 -:10406000010000000000000001000000000040000E -:1040700040000000000040004000000000058821D2 -:104080008200000000004000A00800118800208489 -:1040900040000000904182000000000200088400FF -:1040A000C00040000000C000000000004000000010 -:1040B00000000000000000000005000000000005F6 -:1040C00000000100000000000000000000000000EF -:1040D000000000000000000000000000000000C020 -:1040E000000040000000000000004000000200004E -:1040F00080008000000000088000030000004100F4 -:104100000088000000000082800000A00000000085 -:104110008005000000000000000000000301000016 -:104120000000000840000000000000000000002027 -:10413000000000000000000000000000000000007F -:10414000000000000400000000000000000000006B -:10415000000000000000000000000000000000005F -:104160000000000000000200000000004000880085 -:104170002000002140000011000000118211820087 -:104180000000012184200011A0000002A000000016 -:1041900000002004000000000000000000020000F9 -:1041A000000000000000040000000020002020208B -:1041B000000004000008820000400000000500002C -:1041C0000040000208020000000000000008080093 -:1041D00000080000000000000000000000000000D7 -:1041E000000000000000000000000000000080004F -:1041F000000000001100800000000000000011001D -:104200000020000008A0000100000084000102005E -:10421000000000008001000000000000000000011C -:10422000000004080000000000000000040000007E -:1042300080000000000000000000000000000000FE -:104240000400000000014101000000000000000027 -:10425000000000000000000000000000000000005E -:10426000000000000000000000000000000000004E -:10427000008201002184000000000000000004040E -:104280000000000082000021008000A10005000362 -:104290000002000200030008000500000004000006 -:1042A00000004000000000008204400000002003E5 -:1042B000000000000020004000000000000000009E -:1042C00000000800000008000000000000000000DE -:1042D000000000400000000000000000000000009E -:1042E000000000000084000000000010000000003A -:1042F000008200034000A005000000000000000054 -:10430000000100A000002000000021400002000089 -:1043100000000001009000000000100000000040BC -:10432000000000000000000020000000210000004C -:1043300080000000000000000000000000000000FD -:10434000000000000000000000000000000000006D -:10435000000000000000000000000000000000005D -:104360000000000000000000000000000000000449 -:1043700000000041000000000000004100000000BB -:104380000000000002000000C00040000400001116 -:1043900000030002200000000004000000050000EF -:1043A00000000000000083040000844000000000C2 -:1043B00000000000000000000000002100000000DC -:1043C00000000000000000000000000000100000DD -:1043D000000000210000002100000000000000009B -:1043E00000000000000000000000000000000000CD -:1043F00000000000000000000000000000000000BD -:10440000001000000000800000000000000090008C -:10441000000000002001000000000000000010006B -:10442000000000000000000008080000000000007C -:104430000000000000000420000000000000000058 -:104440000000000000000200000000000000000169 -:10445000000000000000000000000000000000005C -:10446000000000000000000000000000000000004C -:1044700000000000000084000000000100010000B6 -:1044800000019088C0A001C000820210080890A11D -:1044900090880001040000000000000401859011D4 -:1044A0000004000300000000000000000000010103 -:1044B00084000000A0004000000010000000000088 -:1044C00000000000000000000000000000A1A12189 -:1044D00000030021000000000000000000000000B8 -:1044E00000000000000000000000000000000000CC -:1044F0000000000000000400000000000440004034 -:10450000004100029180800020000080008991809D -:104510000082801100408911000500000004210480 -:104520008091000400000000000000000000001165 -:10453000212000030011000080090011800000000C -:1045400000000000000000000000000000000088E3 -:10455000C0080083002100000000000000000000EF -:104560000000000000000000000000000000090042 -:10457000110008000400000020002000400000801E -:10458000200000000088114000A011C100000900B7 -:10459000030002008803840082000200C0031100AF -:1045A00002001100210000000800000000000400CB -:1045B0001100200003001100808089008811800014 -:1045C00000000000000000000000000000000000EB -:1045D000008080408000A00000000000000000007B -:1045E00000000000000000000000000000000000CB -:1045F00000000000010000000000010001000100B7 -:1046000000C00100000000A10100002101A1000084 -:10461000880003409190914103100900A100080116 -:10462000000000900100010000000800040090005C -:104630000400000001000000000090C00400A00180 -:1046400082000000000000000000000000000000E8 -:10465000000000C00800A00890000000000000005A -:1046600000000000000000000084000000000000C6 -:104670000000000000000000000000000001A00099 -:10468000000100010100A1010001C000C000000004 -:1046900090A0080301110011111000010000A100F9 -:1046A0000000400100010901880000000000000036 -:1046B00000010000000000000001000000030002F3 -:1046C00000200002000000000000000000000000C8 -:1046D0000000000008000020A000024000000000D0 -:1046E00000000000000000000000000000000000CA -:1046F0000000000000000004000000000041000471 -:10470000800900400040204183200002000000009A -:104710000000840080A1038809A104A0004000419A -:10472000A1050000800211040510084000000008E7 -:1047300000090021000000202020402100050090F9 -:104740000089000000800000000000000000000060 -:1047500000000000000000111041881083090000D3 -:104760000000000000000000000000000000000049 -:1047700000000000000000800000000000040000B5 -:104780000000000000040810021102000340008035 -:10479000801100008011219090802180040421006C -:1047A0000900048005400421A100080080100000D9 -:1047B00000400080000000002110004000001103B4 -:1047C0000000098000000000000000000000000060 -:1047D00000000000000000002080882120800808E0 -:1047E00000000000000000000010000000000000B9 -:1047F000000000000000000000C0000000000000F9 -:1048000000000000000000010000000100000001A5 -:10481000C0C09001C000900101C009080310100140 -:104820000182000801100000018910000800040046 -:1048300000000000002000400000012000000000F7 -:104840000101000000100000000000000000000056 -:104850000000000000000000000020C08201208253 -:104860000800000000000000000000000000000040 -:104870000000000000000000000000000000000038 -:104880004200000000000000000081000060000005 -:1048900088000000006000008182008100000600A6 -:1048A0004200000000000000000000000060000066 -:1048B0000000000000000000000000008100006017 -:1048C0000000000000000060000060000000000028 -:1048D00000000000000000000000000000000000D8 -:1048E00006008400000000000000000000810000BD -:1048F00006000000000000000000000000000000B2 -:1049000000000000000000000000000000000000A7 -:10491000000000000280000066669999FB7FFB7F23 -:104920000000000000000000000000003FFF3FFF0B -:104930000000000000000000000000000000000077 -:1049400000000000000000000000A00005000000C2 -:104950000000000000000000000000000000000156 -:104960000000F0F000000000000000000000000067 -:104970000000000000000000000000000000000037 -:104980000000000000000000000000000000000027 -:104990000000000000000000200466669999FB7F7B -:1049A000FB7F0040000000000000000000003FFF0F -:1049B0003FFF0000000000000000000000000000B9 -:1049C00000000000000000000000000000A0000542 -:1049D00000000000000000000000000000000000D7 -:1049E0009919DBFFF0F0000000000000000000005B -:1049F00000000000000000000000000000000000B7 -:104A000000000000000000000000000000000000A6 -:104A10000000000000000000000000000000000096 -:104A20000000000000000000000000000000000086 -:104A30000000000000000000000000000000000076 -:104A40000000000000000000000000000000000066 -:104A50000000000000000000000000000000000056 -:104A60000000000000000000000000000000000046 -:104A70000000000000000000000000000000000036 -:104A80000000000000000000000000000000000026 -:104A9000000000000000000000000000880000008E -:104AA0000000F9D942C30400FFFF0000000060606D -:104AB000F0E00F9F0F9F00000000000000000000CA -:104AC000C3FF3C3C000000000000000000000000AC -:104AD00000A0000500000000000000000000000031 -:104AE000000000000000FBFF0000F0FF00000000DD -:104AF00000000000000000000000000000000000B6 -:104B000000000000000000000000000000000000A5 -:104B10000000000000000000000000000000004451 -:104B200000000000FFDB7EFF0000FBE7000000004C -:104B30006F6FFFEF0F9FCF9F00000000000000008D -:104B40000000C3D33C3C0000000000000000000057 -:104B5000000000A0000500000000000000000000B0 -:104B60000000000000000000FFFF0F00FFFF00003A -:104B70000000000000000000000000000000000035 -:104B800000000000000000610006000D0000006150 -:104B90000006000D000000610004C00D000000616F -:104BA0003007001D000000613036000D000000617C -:104BB0000006000D00000061300600050000000046 -:104BC00000610006000D000000610006C009200021 -:104BD0000061000000010000000000000000000073 -:104BE000000000000000000000610006000D000051 -:104BF000000000000000000000000020000000A0F5 -:104C00000000000000000000000000000F0F0F0F68 -:104C10000000000000A00000202028F80030C000A4 -:104C200000000000000000000FC30FC3052D0505A4 -:104C3000AAF3AAC3000000000FFF00F00028002F15 -:104C4000000000000000F0F3F0F30000C3C3000018 -:104C500000005500550030303030000000000000EA -:104C6000000000000000000000000020000000F034 -:104C70003CFC0000000000000000000000000000FC -:104C800000000000000000000000000000000F0F06 -:104C90000F0F000000000080008020202828003036 -:104CA000C00000000000000000000FC300C305AFFB -:104CB00005AFAAF0AA000C000C000FFF00F0FF28BF -:104CC000FF2F000000000000F0F3F0F30000C3C36A -:104CD000FF2CFF3C55005500303030300000000004 -:104CE00000000000000000000000000000200000A4 -:104CF00000003C3C0000000000000000000000003C -:104D000000000000000000000000000000000000A3 -:104D10002420000000000000FFF0FFF53CFF7F7F33 -:104D2000505050500000000000000000414141413F -:104D30000F0F0505000000003C1C2C0C0F7D0F55CB -:104D4000FFF7FFFF0000000000003C3CC3C33C3EF7 -:104D50003CFF000500000FFF0FFF00F000F0000017 -:104D600000000000000000000000000000008000C3 -:104D700082000000AAAA000000000000000000005D -:104D80000000000000000000000000000000000023 -:104D900000000000000000000000FFF0FFF53CFFF5 -:104DA0003E3E505050500000000041004100C1C143 -:104DB00041413F0F3D05F00000001C1C1C1C0FFF73 -:104DC0000FFFF7F7F7FF0000000000003C3CC3C3F3 -:104DD00010952035040A40000FFF0FFF00F000F08F -:104DE00000000000000000000000000000000000C3 -:104DF000C000C3000000FFFF000000000000000032 -:104E0000000000000000000000000000040000009E -:104E1000000000000000000000000200000002008E -:104E20000000000000000000000001000500040078 -:104E3000000004000400000400002000880020009E -:104E4000040000000000000000000000000000005E -:104E5000200000002000000000000000200088006A -:104E6000200020000000040004000000040088006E -:104E70002000000020000000000040000000200092 -:104E80002000200000002000020000000000800040 -:104E90000000000000000000000000000000000012 -:104EA000000000000000000000000000040084007A -:104EB000800000000000000000040000000000006E -:104EC00000000000000000000000000000000000E2 -:104ED00000000000000000000000000000000000D2 -:104EE0000040000000000000000000000000000082 -:104EF00000000000000000000000000000000000B2 -:104F0000000021000000000000000000010001007E -:104F1000000001000100010001000100000000008C -:104F2000020000000000000000000000001000006F -:104F3000000000000010000000108440000000008D -:104F40000000000000000000000000000000000061 -:104F50000000000008000000000000000000000841 -:104F60000000000800000000000000000005000034 -:104F70000800000400000000000000000004000021 -:104F800000080008000000080000000800000400FD -:104F900004000000040004000400040004000200F7 -:104FA0000000000000000000000000000000000100 -:104FB0000000050000000001410000014101000067 -:104FC00000000000000000000000000000000000E1 -:104FD00004000400020000100000000000000000B7 -:104FE0000490000000000008000000840200020895 -:104FF0000408000800000008000800000008000085 -:105000000008040005820008000000000084210858 -:105010000000000000000000000000000000000090 -:10502000002100000000000000000000000000005F -:10503000002100000000000000030041000000000B -:10504000020800000000000800000000000000004E -:105050000000000040000000000000000000000808 -:10506000000000000000000010000000000000022E -:1050700000000000000004000000000000100021FB -:105080000008000400000000000000000002001002 -:105090000000000000000000000000000000000010 -:1050A0000000000000000000000000000000000000 -:1050B000000000A00000000002000000000000004E -:1050C0000000000800000000009000000000000048 -:1050D00000000000210440000000008800000000E3 -:1050E00008000000000400000000000000000000B4 -:1050F00000000000000005000000030000000000A8 -:1051000000000000004000A000400000000000007F -:10511000000000000000000000000000000000008F -:10512000000000000000000000000000000000007F -:10513000000000000000008008A00000C000000087 -:1051400000200000004000090002000000000000F4 -:105150000040000200000041000009890800000032 -:105160000000000000000000000008001000000027 -:10517000000000000000000000000000000000002F -:105180000000000040000040080000000000000097 -:105190000400000082210000000000000000000068 -:1051A000000000000000000000000000000000A05F -:1051B00000000000008200C00020002100A00000CC -:1051C00021C00000000000000000000000000000FE -:1051D00000081100000000010090000808100008FD -:1051E0000008000041A000000000000000000300D3 -:1051F0000500400005A0000000A000000000000025 -:10520000002000000020000000000000000000005E -:105210000000000000000800000000000000000086 -:10522000000000000000000000000000000000007E -:105230000000000000000000000002000041040027 -:1052400000000041000000000000000000000040DD -:10525000000000000000000000000000000000004E -:10526000020000000000000000000000000000003C -:10527000000000000000000000000000000000002E -:10528000000000000000000000000000000000001E -:10529000000000000000000000000000000000000E -:1052A00000000000000000100000000000000000EE -:1052B00000000000000000000002004000000000AC -:1052C00080080002200000880004000000000000A8 -:1052D0000000020440040000000000000000400044 -:1052E00000000000000000000000000000000000BE -:1052F000000010000000000000000000000000009E -:1053000000000000000000A00004000000000000F9 -:10531000000000000000000000000000000000008D -:10532000000000000100000000000000002100005B -:105330000000000000000000020000000100041155 -:105340000420002000000000010000100000000008 -:1053500000000000820000000000000000000000CB -:10536000000000000000000000000000000000003D -:10537000000000000000000000000000000000002D -:10538000000000000000000000000000000000001D -:10539000000000000000000000000000000000000D -:1053A00000000000000004000000000000000000F9 -:1053B00000000000000000A000848084008408C079 -:1053C000809080C1000100820200080000010000FE -:1053D0000000000000000000001000A00508000010 -:1053E00000080000000000000000000000000000B5 -:1053F00040001100000000900000200400080000A0 -:1054000000002088000802000000000000000000EA -:105410000000000000000008000000000000000084 -:1054200000C000900000000000C0009000000000DC -:10543000000000000000000000000000000000006C -:10544000A11090200004888200A0001000A0008815 -:10545000000000000000000000000000000000004C -:10546000000100000000000000000000000000003B -:10547000000000000000000000000000000000002C -:10548000000000000000000000000000000000001C -:10549000000000000000000000000000000000000C -:1054A00000000080008000000000008000800000FC -:1054B00000000000000000000000000000000000EC -:1054C0000000A180808000800080008000800000BB -:1054D00000000000000000000000000000000000CC -:1054E00000000000000000000000000000000000BC -:1054F00000000000000000000000000000000000AC -:10550000000000000000000000000000000000009B -:10551000000000000000000000000000000000008B -:1055200000000000000000008000808000000000FB -:1055300080008080000000000000000000000002E9 -:105540000080000000000008800000800000800053 -:1055500080000000000000000000000000000000CB -:10556000000000000000000000000000000000003B -:10557000000000000000000000000000000000002B -:10558000000000000000000000000000000000001B -:10559000000000000000000000000000000000000B -:1055A000000000000000000000008400C090000027 -:1055B00000008400C0900000000000000000000017 -:1055C0000000000800008800880184C0089088005E -:1055D0001000A0000000000000000000000000001B -:1055E00000000000000000000000000000000000BB -:1055F00000000000000000000000000000000000AB -:10560000000000000000000000000000000000009A -:10561000000000000000000000000000000000008A -:10562000000000000000000000000000009000C02A -:1056300000000000009000C000000000000000001A -:105640000000000000000000C02000409004080896 -:10565000902000200020002000000000000000003A -:10566000000000000000000000000000000000003A -:10567000000000000000000000000000000000002A -:10568000000000000000000000000000000000001A -:10569000000000000000000000000000000000000A -:1056A000000000000000000000000000000000807A -:1056B000008000000000008000800000000000006A -:1056C000000000000000000000008000008080005A -:1056D000800000000000000000000000000000004A -:1056E00000000000000000000000000000000000BA -:1056F00000000000000000000000000000000000AA -:105700000000000000000000000000000000000099 -:105710000000000000000000000000000000000089 -:1057200000000000000000000000000080020010E7 -:1057300000000000800900100000000000000000D0 -:1057400000000000000000000000800000020000D7 -:105750008080000000008080008080000000000049 -:105760000000000000000000000000000000000039 -:105770000000000000000000000000000000000029 -:105780000000000000000000000000000000000019 -:105790000000000000000000000000000000000009 -:1057A0000000000000000000000000000000900069 -:1057B000000000000000C000000000009000000099 -:1057C000000000000000100002009000080004002B -:1057D00000C010100000000004020004A00000003F -:1057E00000000000000000000000000000000000B9 -:1057F00000000000000000000000000000000000A9 -:105800000000000000000000000000000000000098 -:105810000000000000000000000000000000000088 -:105820000000000000000000000000000000000078 -:10583000008100000600000000810000060000005A -:105840000000000000000000000000000000000058 -:105850000081000006009000000000000000000031 -:105860000000000000000000000000000000000038 -:105870000000000000000000000000000000000028 -:105880000000000000000000000000000000000018 -:105890000000000000000000000000000000000008 -:1058A00000000000000000000000000000000000F8 -:1058B00000000000FFFF000000FF00003C3C000073 -:1058C00000FF0000000000000000200100000000B8 -:1058D0000000FFFFFFFF50507250003C003C0000F2 -:1058E0000030000000000000000000000000000088 -:1058F00000000000000000000000000000000000A8 -:105900000000000000000000000000000000000097 -:105910000000000000000000000000000000000087 -:105920000000000000000000000000000000000077 -:10593000000000000000FFFF000000FF00003C3CF2 -:10594000000000FF00000000000000000000000058 -:10595000000000000A0AFFFF72507250003C003C39 -:105960000000003000000000000000000000000007 -:105970000000000000000000000000000000000027 -:105980000000000000000000000000000000000017 -:105990000000000000000000000000000000000007 -:1059A00000000000000000000000000000000000F7 -:1059B000000000000000FF000000FF000000FF00EA -:1059C000000000FFFFFF00000000000000000000DA -:1059D000000000000000003C033CFF3FC00000004E -:1059E0003FFF5400540000000000000000000000D1 -:1059F00000000000000000000000000000000000A7 -:105A00000000000000000000000000000000000096 -:105A10000000000000000000000000000000000086 -:105A20000000000000000000000000000000000076 -:105A30000000000000000000FF000000FF00000068 -:105A4000FF00000000FFFFFF00000000000000005A -:105A50000000000000000000003C633CFF7F80006D -:105A60003FFF3FFF000000000000000000000000BA -:105A70000000000000000000000000000000000026 -:105A80000000000000000000000000000000000016 -:105A90000000000000000000000000000000000006 -:105AA00000000000000000000000000000000000F6 -:105AB00000000000000000000000030203380C009A -:105AC00092C0038203380C0082C000000000000076 -:105AD0000000800000000000000000000030000016 -:105AE0000000000040000000000000000000000076 -:105AF00000000000000000000000000000000000A6 -:105B00000000000000000000000000000000000095 -:105B10000000000000000000000000000000000085 -:105B20000000000000000000000000000000000075 -:105B30000000000000000000000000000000000065 -:105B40000000000000000000000000000000000055 -:105B50000000000000000000000000000000000045 -:105B60000000000000000000000000000000000035 -:105B70000000000000000000000000000000000025 -:105B80000000000000000000000000000000000015 -:105B90000000000000000000000000000000000005 -:105BA00000000000000000000000000000000000F5 -:105BB00000000000000000000000000000000000E5 -:105BC00000000000000000000000000000000000D5 -:105BD00000000000000000000000000000000000C5 -:105BE00000000000000000000000000000000000B5 -:105BF00000000000000000000000000000000000A5 -:105C00000000000000000000000000000000000094 -:105C10000000000000000000000000000000000084 -:105C20000000000000000000000000000000000074 -:105C30000000000000000000000000000000000064 -:105C40000000000000000000000000000000000054 -:105C50000000000000000000000000000000000044 -:105C60000000000000000000000000000000000034 -:105C70000000000000000000000000000000000024 -:105C80000000000000000000000000000000000014 -:105C90000000000000000000000000000000000004 -:105CA00000000000000000000000000000000000F4 -:105CB00000000000000000000000000000000000E4 -:105CC00000000000000000000000000000000000D4 -:105CD00000000000000000000000000000000000C4 -:105CE00000000000000000000000000000000000B4 -:105CF00000000000000000000000000000000000A4 -:105D00000000000000000000000000000000000093 -:105D10000000000000000000000000000000000083 -:105D20000000000000000000000000000000000073 -:105D30000000000000000000000000000000000063 -:105D40000000000000000000000000000000000053 -:105D50000000000000000000000000000000000043 -:105D60000000010004000000040000000100000029 -:105D7000000000000000840000000400000000009B -:105D80000100040000002100000084000000100059 -:105D900004000400400000022002880020000000EF -:105DA000000004000400210041002100890040009F -:105DB00010052000040088002000200000001000D2 -:105DC000C00020008800000000000000000000006B -:105DD00000000000000000000000000000000000C3 -:105DE00000000000080080000000800000000400A7 -:105DF0000000000009000000000000008008000012 -:105E000000000400800000000400000000C000004A -:105E100000008000000000000003000000000000FF -:105E2000000000008000840004000400040004005E -:105E30000000000200000000000000000000000060 -:105E40000000000020000000000000000000000032 -:105E50000000000000000000000000000000000042 -:105E6000000001000100910082000000820000009B -:105E70000100010004000400010001000400000012 -:105E80000100910004000000000001000100040076 -:105E900004050100000801000100000041000400A9 -:105EA0000400000000000400000000200420012085 -:105EB00001040000000000050000000000040010C4 -:105EC00000050000000200002005000000000000A6 -:105ED00000000000000000000000000000000000C2 -:105EE0000000000040002000200000000000000032 -:105EF0000000040004008000800004000400800012 -:105F00000000040004008000000000000400040001 -:105F1000840080000400004004040400008484081D -:105F200080008002000000028084000800098501D2 -:105F300004050408200020080008000800000008EC -:105F40000004000400100008100400080000000015 -:105F500000000000000000000000000000000080C1 -:105F6000000000000100200000000002010001000C -:105F70000100910000000010000800000002004134 -:105F800010000000000400000009404000018808E3 -:105F90009000000090080021004000211000010541 -:105FA00000218821002104100008000800000003DF -:105FB000004000210021000082000803400082020E -:105FC000000000080002000000400008000000007F -:105FD000000000000000000000840000000000003D -:105FE000000200000000080000000000000004A003 -:105FF000040004000484000000000000000000020F -:10600000000000002100000000000000000000006F -:106010000000000000000000000000000000000080 -:106020000400000003000000000040000000000029 -:106030000000000000080000000000000000000058 -:1060400000010000000000000000000000A00000AF -:106050000000000000000000000000000000000040 -:1060600000000000000000000011000000102000EF -:10607000002000110040002000000000002000006F -:1060800000040000C000000000000000A00000208C -:1060900000000800C000080000000000000001002F -:1060A00084000100A000204120000040C100004009 -:1060B0000805C10220000040001100008204100405 -:1060C000820000080000000008000000820082102A -:1060D00008000000000000000000000000000000B8 -:1060E00000000000000000000000000000000001AF -:1060F0008000000100000000000100000088200175 -:10610000020021000000000002000090000020209A -:106110000000000100000000001000A000000000CE -:106120000410000004000000411000000000040002 -:106130000004009004898000030000A000082000F3 -:10614000000008000000410000A0080800080084CA -:1061500003840010000000000000000000000000A8 -:106160000000000000000000200000000002C0212C -:10617000010400000000042000200000000040088E -:106180000002400000080020002004000009000870 -:106190000408000800000041000082080000000020 -:1061A00004002008104082400000C040000802099E -:1061B000C00284100004002100030000000000055C -:1061C0000000081004100000002100000000000082 -:1061D000000000000040000000000000000000007F -:1061E000000000000000000000000000210000C0CE -:1061F00000000801000000A08085000100000002EE -:10620000800000008310000000000000000000007B -:10621000000000004000000000020000000000003C -:10622000000000000000000000000000000000006E -:10623000000000000000000000000000000000005E -:10624000000000000000000000000000000000004E -:10625000000000000000000000000000000000003E -:10626000000000000000900000000002000000009C -:106270000000000000000040002001850100012016 -:10628000020000080004400300000008C0030021D1 -:1062900000000400C000000000000000000000003A -:1062A00000800400C000040001084080A0000488B1 -:1062B0000000018810200240820001000000000060 -:1062C00000100000000008000800000200000000AC -:1062D000000000000000008000000000000000003E -:1062E00000000000000000000000000000010000AD -:1062F00000000000000020000001000104200484D0 -:1063000004050000000000008404200000000004D8 -:1063100000000000000020400000000000002100FC -:106320000004040280000000001004009102200418 -:106330002102208204200000200000002002000032 -:1063400000000082080400000800000000010010A6 -:106350000000210020000010001003840000000055 -:10636000000000000000000000000000000000002D -:106370000000000001C00403C0A108C1C040000427 -:1063800000C0C0100290C01088848202C0C000000B -:1063900000100010409000880002C090000341905F -:1063A00000200004100810082090001082200291A4 -:1063B00010400008A020A004000800C00240020213 -:1063C000000501050221000000000000000000019E -:1063D0000001880000010000000000000000000033 -:1063E00000000000000000000000000000000000AD -:1063F000000000000900094109050084800883802D -:10640000000000000080110041000000800080803A -:10641000000000000000900000000080000000006C -:1064200090000000008000800000000000808000DC -:106430008010004121850002000000000000800063 -:106440008084008304C08021000000000000000060 -:1064500000100821000500210000000000000000DD -:10646000000000000000000000000000000000002C -:1064700000000000000000100880102191418802F7 -:106480000000000080C000800080C12188848284D8 -:106490008000801000008000000000C180830000A8 -:1064A0000000000080A180850080000000900000B6 -:1064B0000000100084110283040380058000801016 -:1064C00000800000008300808000000000000000C9 -:1064D000000040001000080000050000000000005F -:1064E00000000000000000000000000000000000AC -:1064F000000000020000000000001110C000A10117 -:106500008300100002008409A0900040088809114F -:10651000C0A1100010002010C000900004824010A4 -:10652000C0040000040010C0040420C008009083D0 -:106530000288109000200940010401094000020473 -:1065400010014010088490041004C04000000000B6 -:106550000000000000080100000000000000000032 -:10656000000000000000000000000000000000002B -:106570000000000000000000000000001008010200 -:106580008510831190820002C09002A008110008BB -:10659000C085100802100000009010C00290000298 -:1065A00004888810000003910088C00310200810A0 -:1065B000009082081020111000112105C1890302EA -:1065C00000208888824008900109200804C000004B -:1065D00000000000000000000000010100000000B9 -:1065E00000000000000000000000000000000000AB -:1065F0000000000000000000000000000000008417 -:10660000400205C191910080000080808000002040 -:106610000021802100030000000000008080410074 -:106620000000000000800000410800008008800297 -:106630004100000000808000C183089010A19111EA -:106640009080008000000000200041024004800093 -:106650000000000000000000001140200421002084 -:10666000000000000000000000000000000000002A -:1066700000000000000000000400110011000400F0 -:1066800040A104041041041080118000008000002B -:1066900010102141820088008008008300800000E3 -:1066A000000000A00000000000000000004000000A -:1066B0000000800000400000000005008305850008 -:1066C0000211000800858000000021400021000028 -:1066D0000000000000000000000002000300200095 -:1066E000100000000000000000000000000000009A -:1066F000000000000000000000000000000000009A -:106700000000C14188020005200040012000A008CF -:1067100000001190C01110100900C00188109040B5 -:106720008800100090030288900000002000C00242 -:1067300004889000100008902020080008C0030082 -:10674000100810002000002004C000000900900084 -:1067500082009000000000000000000000C0000067 -:106760000000000000000000000000000000000029 -:106770000000000000000000000000000000000019 -:1067800000000000600000600000000900410000FF -:106790000600884300000000060088420000000058 -:1067A000060041000000000006000000000000009C -:1067B0000000060048420000000006000000410002 -:1067C00000600600480600000000060000004100CE -:1067D0000060060050000000000000000000000003 -:1067E00000000000000000000000000000000000A9 -:1067F0000000000000000000000000000000000099 -:106800000000000000003CFFFFFFFCF0F0F00F0074 -:106810009F900000FF006F6F7F6F420F420FF4F4F4 -:106820000000DB9900006F0F7F0F2C24FFFF00009A -:10683000EFCFC3C3607C0000FFFF9D996060E3E37E -:1068400000009900F1F1F3F10F0FF0F0FF00FB04ED -:10685000FFFFBFFFFF19FF1800000000000000004D -:106860000000000000000000000000000000000028 -:106870000000000000000000000000000000000018 -:1068800000000000000000003CFFC3C3F0F0F03047 -:106890000F009F906192FF000F0F3F0F000FC30F7B -:1068A000F4FF0000DB9900000F0F3F0F0C00FFFF0B -:1068B0000000E7C3C3C3FFFFFFFF9D999D9960FFE1 -:1068C000E3E3C3F3DBF30E0E0C0E0F0FF0F0FF004B -:1068D000FF0000004000FF09FF0000000000000072 -:1068E00000000000000000000000000000000000A8 -:1068F0000000000000000000000000000000000098 -:106900000000000000000000000000000000000087 -:106910000000000000000000000000000000000077 -:106920000000000000000000000000000000000067 -:106930000000000000000000000000000000000057 -:106940000000000000000000000000000000000047 -:106950000000000000000000000000000000000037 -:106960000000000000000000000000000000000027 -:106970000000000000000000000000000000000017 -:10698000000000000000000000000000FFFFFFFF0B -:10699000FFFFFFF77F7EFFFF00FF000009000900F7 -:1069A00000006FFF0000EFEF0000FFFF00006E0C23 -:1069B000FF3CFF040000C3CFC3DF9999F9FD99FFA5 -:1069C0009BFFFFFF000F00FF00FFF0F0F0F0020060 -:1069D000FDFF08F700FF00FF00FF03FF03FF0000BB -:1069E00000000000000000000000000000000000A7 -:1069F0000000000000000000000000000000000097 -:106A00000000000000000000000000000000FF7F08 -:106A1000FBFFBFFFFFFF4042000000FFFC00CB0078 -:106A2000CBFF000066FF0000E7E700000626FFFF3F -:106A3000FFFFFF04FF040000C3C3C3DB999999BDA6 -:106A400099999B9BFFFF242F04FB00FF0F0F0F0F53 -:106A50000000FFFF00FF00FF00FF08F703FF03FF38 -:106A60000000000000000000000000000000000026 -:106A70000000000000000000000000000000000016 -:106A8000000000000000000000610006000D000092 -:106A900000614006C011000000000030000000004E -:106AA0000361030E0C0D12C0038203080C0092C098 -:106AB000030003080C0010C000000361030E0C0D5E -:106AC00010C0030003080C0010C00361030FCC09C1 -:106AD00010C0030003080C0010C003610309CC0DB3 -:106AE00002C0000000000000000000610006000D70 -:106AF0000000000000000000000000000000000096 -:106B00000000000000000000000000000000000085 -:106B100000000410014000FF00FF00000000000022 -:106B20000000301CC300343C303C0000000000007A -:106B30000000000000000000000000000000000055 -:106B4000003CC3000000000000000000818BB5BFC6 -:106B50000030FFCF0000000000000000000055558D -:106B6000F00FF00F00000000000000000000000027 -:106B70000300AA0000000000000000000000000068 -:106B800000000000000000000000000000000010F5 -:106B90000000000008200280003EC1FF000000004D -:106BA000000000003014C300141C000C00000000A2 -:106BB00000000000000000000000000000000000D5 -:106BC0000000003CC3000000000000000000C1CB3A -:106BD000F5FF0030FFCF00000000000000000000C3 -:106BE0005555F00FF00F00000000000000008A8FE4 -:106BF0008A8AC300AA000000000000000000000014 -:106C00000000000000000000000000000000000084 -:106C10000000000000000000C08000C300C30000AE -:106C20000000000000000000000000000000000064 -:106C30000000000000000000000000000000000054 -:106C40000000000000000000000000000000000044 -:106C5000A505050500000020000000000000000060 -:106C6000FDFFFFFD0000000000000000000000002C -:106C7000D3D3C3C3F3F0F3F0000000000000000022 -:106C80000000000000000000000000000000000004 -:106C90000000000000000000000030702CC300EF76 -:106CA0000000000000000000000000000FFF0000D6 -:106CB00000000000000000000000000000000000D4 -:106CC00000000000000000000000000000000000C4 -:106CD000000007070505000000000000000000009C -:106CE00000007FFFFF7F00000000000000000000A8 -:106CF0000000D3F3C3F3F0F0F0F000000000000058 -:106D00000000000000000000000000000000000083 -:106D1000000000000000000000000400000000006F -:106D20000000000000000000000000000000000063 -:106D3000000000020000001000002000040000001D -:106D40000404000000000400000005200000000012 -:106D50000000000020000400040400000000000007 -:106D600000002000C000400000002000000088005B -:106D7000040004000000C0002010C0001000020049 -:106D8000C000200200000000000000000000000021 -:106D900000000000000000000000000000000000F3 -:106DA00000000000000000000000000000020000E1 -:106DB00000000000000000000001000000000000D2 -:106DC00000000000000000008000000084010000BE -:106DD0000000000000008000000000010000000032 -:106DE0000000000000001000000000000000000093 -:106DF000000000000000000000000004000000008F -:106E00000000000000010000000000000000000081 -:106E10000000000000000400040000000400000066 -:106E2000000004000000000001000000020000005B -:106E300000000041880000000000904101000000B7 -:106E40000000A0000100000000001000020000038C -:106E50000004100000000000000000009000000985 -:106E60009000000000000000040800000004000082 -:106E70000010000800000809000000000000900356 -:106E80000002000800040084000000000000000070 -:106E900000000000000000000000000000000000F2 -:106EA00000000400000004000400020000000000D4 -:106EB0000000000000000900000000000000400089 -:106EC000000000000000080000020084000800002C -:106ED000000400000004000000000400000800108E -:106EE000008400080000008200080000200800085C -:106EF0000000090800840288C10800080084000816 -:106F00000088008800000202051000000000000058 -:106F10000000000000000000000000000000000071 -:106F20000000000000000000000000000000000061 -:106F30008400200000000003000004090000000895 -:106F4000000000039100C0000104000000030420C1 -:106F50000008010200000008000800000002208074 -:106F600001030085000000000021001000000080E7 -:106F700000090011000000000009200200090800BB -:106F8000000988050005001100210008000000002C -:106F900000000000000000000000000000000000F1 -:106FA000000000000400008200A0000200A0000019 -:106FB00000A0000200000000110000000088000294 -:106FC00000820008008802A0008808090000002054 -:106FD0008901000004014108000040A0094000822E -:106FE00011040202000421900000200008A000000B -:106FF0000010000000000000094000002101000016 -:1070000088000000000000004100000000100000A7 -:107010000000000000000000000000000000000070 -:10702000000000000000000000000000020000005E -:10703000000800000000000000000009001020000F -:107040000000000040002000010500040080000056 -:1070500000100500000005800000000090410010B5 -:107060000000840001408200400008000000000988 -:1070700000000010000084210800A00900020000A8 -:107080000400A000901000050008A000000000000F -:1070900000000000000000000000000000000000F0 -:1070A00000000000000000000000000000000000E0 -:1070B000000000C000A000000090000800000001D7 -:1070C000000000A00020000080002000000100104F -:1070D00000000004848240C08420410800000000B9 -:1070E000000000001100200003084140009040848F -:1070F00000C000900000001000008000098800A07F -:1071000021A000044008118440A000900300094021 -:1071100009A00000000000000000000000000000C6 -:10712000000000000000000000000000000000005F -:1071300000000008000000000100002100800000A5 -:1071400000020000902100000200004001A1001098 -:107150000111000000000480000001A000082000D0 -:10716000010000080100820000082000C00000406B -:10717000C0000010000000050000C0080040000032 -:10718000C000A0000000C000C00000100000A0105F -:10719000840000100000000000000000000000005B -:1071A00000000000001000000000000000100000BF -:1071B00000100010000000000000020820880010ED -:1071C0000082110200A0100804A08040008202404A -:1071D0001109088400000000802000100421200014 -:1071E0004000082011002090030000A08300000050 -:1071F0000804000005894000030000880300000027 -:10720000000000002100050000000000030800004D -:10721000000000000000000000000000000000006E -:10722000000000000000000000000000000000005E -:10723000000000000000000000000000020000004C -:107240000000000000000000000000200000000816 -:107250009009000000050000002100A0000000A02F -:107260008200000000000011080020004000000023 -:1072700008030000000800410000400000218209CE -:107280004005900900100209A021400000101005DF -:107290000000C00000080010000000000000000016 -:1072A00000000000000000000000000000000000DE -:1072B000000011000000000000000088209009007C -:1072C000000000000000020000000000000000902C -:1072D00000021188000040C000000000002100C032 -:1072E0000021000000000040000085089188000097 -:1072F0000300410011000300028402C000000000EE -:1073000003000000110000002100088240000090EE -:1073100021000000400200000010000000000000FA -:10732000000000000000000000000000000000005D -:107330000000000000000000000000A000A000A06D -:1073400000C000000000000000000000011000006C -:10735000C0020000A00000008201000390A0010410 -:107360008488C00800000000000000000211C04036 -:10737000A1200409000200040004100408A0000871 -:1073800000840840000001008400000002A088047E -:1073900000208220C0020120040810A0000000008C -:1073A00000000000000000000000000000000000DD -:1073B00000000000000000000000000000000000CD -:1073C000000000000000000000000000000021801C -:1073D0000000000000000010040080040000000015 -:1073E0001180808000800000000000000000A0915B -:1073F0000000030000C00080008000808000A080AA -:1074000000800080800000002000800000000080DC -:10741000008000008000808002000080800000006A -:10742000000000000000000000000000000000005C -:10743000000000000000000000000000000000004C -:107440000020000000008000000080048000020096 -:10745000084111218909000010000000800000008F -:107460000000801100A1008000000000000000006A -:107470002000C0209180200080000000800080005B -:10748000000080098080008000000005000000806E -:10749000800000410000000080000000000080002B -:1074A00000000000000000000000000000000000DC -:1074B00000000000000000000000000000000000CC -:1074C0000000C00300A0000040000000080104000C -:1074D00010020588828508000000880000008200F4 -:1074E000000084004001828502900000000000003E -:1074F000000003002101A184412002000800A00037 -:10750000100090002000A0109002000000000090E9 -:107510000004880020010420080088000800020000 -:107520000400000000000000000000000000000057 -:10753000000000000000000000000000000000004B -:10754000000000000000000010000000000000002B -:107550000000000100840005A0A000100008000049 -:107560000005000084C000900085888200000000B3 -:10757000000000000801012100014191401000A01D -:1075800010829000040200100082A0100000000091 -:10759000000000011004002000108882020000009A -:1075A00000908321000000000000000000000000A7 -:1075B00000000000000000000000000000000000CB -:1075C00000000000000000000000000000000000BB -:1075D00000000000001000080021800000900080E2 -:1075E00000000040000000000000000200820000D7 -:1075F00000000000000080401103004011208000C6 -:1076000000808000000080000000008080000002F8 -:107610000003004100100000008000800080800511 -:10762000002000208904000000000000000000008D -:10763000000000000000000000000000000000004A -:10764000000000000000800080000000000000003A -:10765000000000000000898091020380830310096C -:107660000080040000400000000000410000000015 -:107670000000000000000000809011218080C041C7 -:107680000000000000000000800000888000000072 -:107690000011800080008000800880100000000041 -:1076A00000000091008000000000000000000000C9 -:1076B00000000000000000000000000000000000CA -:1076C000000000000000000010001000C000C0001A -:1076D000000000A00040000010080800898210018E -:1076E000000000080100000000009000A001904090 -:1076F0000200000000000000000004C09189820820 -:10770000A10100000090008200000200C0C1020838 -:107710000200080002000800080002018809200495 -:107720004000000000040084000000000000000091 -:107730000000000000000000000000000000000049 -:107740000000000000000000000000000000000039 -:107750000000000000000000000000000000000029 -:107760000000810000600000000000000000000038 -:107770000600C10000000000000000008100006061 -:107780000000840A0000000000000000000000006B -:1077900000004200000000000000000000000000A7 -:1077A0000000600000000000000050000000000029 -:1077B00000000000000000000000000000000000C9 -:1077C000000000000000000000000000424242C033 -:1077D000000000000000000000000000C3C3AAFA7F -:1077E0000000000000000000CFCF00000000FD5DA1 -:1077F0007D7D808AD0DA0000000000000000C3C355 -:10780000C3C3AFAFAAAA00000000F0C3F0C3FF0FCC -:10781000F00043434300B4B4B4F500000000FAFAAA -:10782000FFFAD70700000000000000FFAAFF0000D9 -:107830000000000000000000000000000000000048 -:107840000000000000000000000000000000C0C0B8 -:10785000C081000000000000000000000000C3C361 -:1078600000F000000F0000000000CFCFFFFF00007D -:1078700082828181858FD5DF00000000000000003A -:10788000CFC3EFEBAAAAAAAA00000000F0FFF0FF06 -:107890007F407F405F5F5F00A0A0A0E1000000008C -:1078A000BEBEBEBED707D707000000000000AAAAD0 -:1078B00000000000000000000000000000000000C8 -:1078C00000000000000000000000000000000000B8 -:1078D000404101000F0F0F0F000000000082000068 -:1078E0003C553C553C003C0000000000000050505E -:1078F000000000000000C3030000000000000000C2 -:10790000000000D050D000FF00C2F3F300FFFF558D -:10791000FE540C08CFCBE000EB000000000000009C -:107920000000C3FAC3002828383C0C000C0C0000EF -:107930000000000000000000000000000000000047 -:107940000000000000000000000000000000000037 -:107950000000404101000F0F0F0F00000000280041 -:1079600000003C553C550F0FFFC300000000000015 -:107970005050000014040004000300000000000048 -:107980000000000000D000D0000000C2B2B2F3F34B -:10799000FF55FF550008C3CBFF00FF0000000000AB -:1079A0000000000000FA0000383C383C05000500EB -:1079B00000C2C2C200000000000000000000000081 -:1079C00000000000000000000000000000000000B7 -:1079D0000000000000003000000000020000000075 -:1079E0000000000000613006000D00000061000191 -:1079F000C0010001000080610006000D00000000D1 -:107A000000000000000080610001C00100000000D3 -:107A10000000000000000000000000000000006105 -:107A20000006000D000000000000001000010061D1 -:107A30004006001D000000000000000000000000E3 -:107A40000000000000000000000000000000000036 -:107A50000000000000000000000000000000000026 -:107A6000000000000000C4C4C4C4CF00CF00000068 -:107A70000F0F0000C3C3000000000000AAAA00AA64 -:107A80000000000000000000C33CC33CF0F0F0D850 -:107A900000000000000000000000000000000000E6 -:107AA00000000000F7F7D78200000000000000008F -:107AB00000000000A000AC0000000000000000007A -:107AC00000000000000000000000000000000000B6 -:107AD00000000000000000000000000000000000A6 -:107AE0000000000000000000F7C7F4C4FF30FF30C2 -:107AF00000000F0F0000C3C30000000000000000E2 -:107B000000FF0000000000000000C33CC33CF0F098 -:107B1000F0D800000000000000000000000000009D -:107B2000000000000000FFFFFFFF00000000000059 -:107B30000000000000000000000000000000000045 -:107B40000000000000000000000000000000000035 -:107B50000000000000000000000000000000000025 -:107B600000000000000000000000000000002A7A71 -:107B70002525003C003C0A0A0A0A0000000000001B -:107B8000000000000000000000000000EBEB1414F7 -:107B900000FF20DF000000000000000000000000E7 -:107BA00000000000000000000000000000000000D5 -:107BB00000000000000000000000000000000000C5 -:107BC00000000000000000000000000000000000B5 -:107BD00000000000000000000000000000000000A5 -:107BE0000000000000000000000000000000000095 -:107BF00020702525003C003C0A0A0A0A000000000B -:107C00000000000000000000000000000000EBEB9E -:107C1000141400FF00FF000000000000000000003E -:107C20000000000000000000000000000000000054 -:107C30000000000000000000000000000000000044 -:107C40000000000000000000000000000000000034 -:107C50000000000000000000000000000000000024 -:107C6000008001000000000000000400000000008F -:107C700010000000000000000400000005000000EB -:107C8000000004000000400008004100000000085F -:107C90008800200000000000880040084010040414 -:107CA000400800008410200200002000880000002E -:107CB000400088020004000404004000200040004E -:107CC00000000000000000000000000000000000B4 -:107CD00000000000000000000000000000000000A4 -:107CE000000000400800000000000000000000004C -:107CF0000000000000000000000080000000840080 -:107D000000000000000000000000800002000000F1 -:107D100000000000040000000000102000004100EE -:107D20000000000000000001000100000000000051 -:107D30000000090000010000000000000400000035 -:107D4000A000000000000000000000000000000093 -:107D50000000000000000000020000000000000021 -:107D6000000000000000010008000000000090007A -:107D70000000000000000000000000000100000002 -:107D800000200000000000111000000204000004A8 -:107D900000040000000004080400000404000000C7 -:107DA000004120020004040400000004000200104E -:107DB00000099000000000100403040200040808F9 -:107DC0000005008900000000000000000000000025 -:107DD00000000000000000000000000000000000A3 -:107DE00000000200000000002000800000000000F1 -:107DF000000000000000000000000000000004007F -:107E00000000000100000000000000000000000071 -:107E10000008008200821188000400000084000035 -:107E200020000000008400C00008008800C000049A -:107E30000009000400080010000800084111008437 -:107E40000004000800100000000000000000000016 -:107E50000000000000000000000000000000000022 -:107E60000000000001000000000000000000000011 -:107E70004000020000004000000000000008000375 -:107E8000404000000420000000000000000000004E -:107E9000090090000200010088908800C040C100E5 -:107EA0000000082100800008C021A08482048441D1 -:107EB00000000005002184108221900482840100CA -:107EC0000005000200410008000000000000000062 -:107ED00000000000000000000000000000000000A2 -:107EE00000000000000040000000000000000084CE -:107EF00000000000000000A00000000000000010D2 -:107F00000000801000008001000000080000000058 -:107F1000000088004100C100404000020000000055 -:107F20000200100200000002030000840002004072 -:107F3000040003004140210041890000410041024A -:107F4000400003820000410003A000000000000088 -:107F50000000000000000000000000000000000021 -:107F600000000000000000410000000000040004C8 -:107F70002021A000000300090008001100080000F3 -:107F80000041824000200011002000000411080080 -:107F90000011A00005030021400240029041104062 -:107FA00040040010A004090204210004400210054E -:107FB00082210009A04100102000841082210821A4 -:107FC00000100282A0090002C041A00000000000D1 -:107FD00000000000000000000000000000000000A1 -:107FE0000000000000000000000000000000000091 -:107FF00000008000000000C000000000000400003D -:108000000000000000000401000000010001000069 -:108010008000000000000808040000008900040837 -:108020000084800000000000208400104000000058 -:1080300000002000000841000004000400A00084AB -:1080400000000001A103091008000904411000000C -:108050000000000000000000000000000000000020 -:108060000000000000000000000000000000000010 -:10807000000000000000002100080000008000084F -:108080000000000000050000048000000400000063 -:10809000C0410008C000A0089000C0210000C0003E -:1080A000C0000082C108100801800800A10800116A -:1080B000C011084140100020A0000841A000C111DB -:1080C000080000000040400008040000821010007A -:1080D00000000000000000000000000000000000A0 -:1080E0000000000000000000000000000000000090 -:1080F0000000000000000000000000C000080002B6 -:10810000000000840000031000008020008280082E -:10811000000041C0000041002100000000000800F4 -:1081200000A0040003114088000020100800200077 -:1081300000000000000040A04088080083002100EB -:1081400040400020030409058008000440000000AE -:10815000000000000000000000000000000000001F -:10816000000000000000000000000000000000000F -:1081700000002000010000000000000000200000BE -:1081800000200000020000000000000005200000A8 -:1081900004410000C0114000001100110000400027 -:1081A0000000404140000210400090000008080517 -:1081B00020050004402100214021004190080108D1 -:1081C00000088403C00400110180400288101020C0 -:1081D000400310000000000000000000000000004C -:1081E000000000000000000000000000000000008F -:1081F00000000000800020C000000000000000A07F -:108200002000000000000000000000840020840125 -:1082100000008000000000000000090000000000D5 -:1082200000000008000080000000821000820000B2 -:1082300000002088108300A000100008001000003B -:10824000080000000000004004A008100001000821 -:108250000002000003000000000000000000000019 -:10826000000000000000000000000000000001000D -:10827000000084000000008501A100890084000046 -:108280000000000000000000000000000000C0042A -:108290000004008890080003A0C0000400A0101093 -:1082A000A00400020082828808A10182C010C040A0 -:1082B00000910102848502030310001000080008E9 -:1082C00002A0850004048202040000010200C00133 -:1082D00020880082821000040000000000000000DE -:1082E000000000000000000000000000000000008E -:1082F0000400210000000000001103040020000021 -:10830000000002000000000000000000000000006B -:10831000000000000080808000008000008000805D -:108320008000808000000000000000A04185000364 -:10833000894000052102208280A0A10204020002DF -:108340000011800041008080808040000310801177 -:10835000002140002180008000800000000000001B -:10836000000000000000000000000000000000000D -:1083700000000000000000000000C1808400119196 -:1083800080900000000000000000000000000000DD -:10839000000080000011008000910000000000003B -:1083A000000000008000800080000000A08080416C -:1083B000A000008008A083408310A10410808811D1 -:1083C000080088A08500890005000000030000095E -:1083D0001080210800000000800000000000000064 -:1083E000000000000000000000000000000000008D -:1083F000000000000000000000000000A0C0090014 -:10840000041108100000000000000000000000003F -:108410000000000088880401C084C09100000000B2 -:1084200000000000000004000400A08220001102EF -:108430001001A10404A010098201A040058291C08E -:108440002100A00208A0880082001000022000A0E5 -:1084500082002140050104008200A0000804000001 -:10846000000000000000000000000000000000000C -:1084700000000000000000010000000000004004B7 -:108480000001110102A10000000000010000000035 -:10849000000000000000A0080004000884020000A2 -:1084A00088020020000208040210001000108289D7 -:1084B000A00300C001418882100505008204A109C3 -:1084C00000010140008300A0C00200910083000869 -:1084D00000400089048400894009000202018211E1 -:1084E000000000000000000000000000000000008C -:1084F0000000000000000000002000040041001007 -:108500008000000488200091001100040005021082 -:10851000000000000000000000800080008000805B -:108520000000000000000000808080000000008348 -:1085300080900008000520A1008580A1A0119183F2 -:10854000048200020805092100808005000300A1C3 -:108550000290008500C002832002004000C18040DC -:108560000008000000000000000000000000000003 -:1085700000000000000000000000004100000000BA -:1085800000000088049103000000000000000000CB -:1085900000000000000000000000100000808900C2 -:1085A0000000000000000000000000008000000942 -:1085B000800000002189080921008004841089219D -:1085C0000940884003802080028004100080002140 -:1085D000000000201021210009000511000000808A -:1085E000000000000000000000000000000000008B -:1085F000000000000000000000000000000100007A -:108600000000000000C111A1C100C0000000000076 -:10861000000000000000000000000000C000A010EA -:1086200008040400000000000000C0004000020038 -:1086300082200282000083C0A102C102A000408803 -:1086400088091088850002A0C1A0030491000008D9 -:108650000003008400002001C0A0A020A0000000B2 -:1086600000A000400000000000000000000000002A -:1086700000000000000000000000000000000000FA -:108680000000000090008100006000005000000029 -:1086900000000000000000000000000000000000DA -:1086A00000000600000000000000000000000000C4 -:1086B0000000000000000000000000000000601248 -:1086C0008100006000000000000000000000880041 -:1086D000000000000000500000000000000000004A -:1086E000000000000000000000000000000000008A -:1086F000000000000000000000000000000000007A -:10870000000000000000000028412841C3C3000011 -:108710000000000000000000000000000000000059 -:10872000FFFFDADAE7FFCFFF0000F3F3F3F36F6F39 -:10873000C3C3009000003C003C000300000000891F -:10874000898918FF98FF3C3C3C3C000089CFF6F635 -:10875000F666000000000109030F08AD08EF0000F5 -:108760009080000000007C7C606000000000000041 -:1087700000000000000000000000000000000000F9 -:108780000000000000000000000028412841C3C391 -:1087900000000000000000000000000000000000D9 -:1087A000000020003010188100000000F3F3F3F304 -:1087B0006F6F00FF0090000000009F00F3060000B4 -:1087C00000CFCFCF00FF90FF3CFF3C3C89CF89CF4B -:1087D000F6F6F666000000008199C3FFEFADEFEFFB -:1087E00000000000000000007C7C606000000000D1 -:1087F0000000000000000000000000000000000079 -:108800000000000000000000000000000000000068 -:108810000000000000000000000000000000000058 -:108820000000000000000000000000000000000048 -:108830000000000000000000000000000000000038 -:108840000000000000000000000000000000000028 -:108850000000000000000000000000000000000018 -:108860000000000000000000000000000000000008 -:1088700000000000000000000000000000000000F8 -:108880000000000000000000000000000000EFDF1A -:10889000F7FB0800000800000000000000000000D6 -:1088A000000000000000FFE7FFFF20200060000044 -:1088B00009FFC3FF000000000C0C0000FF00FF00D8 -:1088C000F3F0F3F300FB00F081018101CF008F0092 -:1088D000000F3C3F000BFF0B000000003838380051 -:1088E00000000000000000600004004681008000DD -:1088F0000000000000000000000000000000000078 -:108900000000000000000000000000000000000067 -:108910007FBFFEFD0800000800000000000000000E -:108920000000000000000000FFCFFFFF000000007B -:1089300000000FFF00FF0000000000060000FF0421 -:10894000FFFFFBF8FBFB00FB00FB81018303C00082 -:108950008000000F3C3F00FFFFFF0000030338389A -:1089600038380000000060996099000C004E9900B2 -:108970009000000000000000000000000000000067 -:108980000000000000000000000000610006000D73 -:10899000000000610000C001000100610006000D40 -:1089A0000000000000000000000080610006001DC3 -:1089B0000000000000000000000000008061400690 -:1089C000000D000100614006000D0000006100077D -:1089D000C00D000100610006000D000000610006EE -:1089E000001D000080614006000D000100610006CE -:1089F000000D00000000000000000000000000006A -:108A00000000000000000000000000000000000066 -:108A1000030082005F0F5F0F00F0FFFF0000000007 -:108A2000C30FFF0F00000000000000005555555512 -:108A30000000000000000000000000000000000036 -:108A40000000000000FF00005FFFC3FF82FF00E0A6 -:108A500000EBC300A000FFFFFFFF0C000C000000B4 -:108A60000000EFEF04040000000000000000000020 -:108A70000000EFEFEF4500000000000000000000E4 -:108A800000000000000000000000000000000000E6 -:108A90000000C00041000A0F0A0F0000FF0F000095 -:108AA0000000C303FF0300000000000000005F5F40 -:108AB0005050000000000000000000000000000016 -:108AC00000000000000000FF00005FFFC1F5C3FFD1 -:108AD000E0E0EBEBC300AA0050007030FCF0FCF0CB -:108AE0000000000000BF00BF00A200F340500000E3 -:108AF00000000000AFFFAF550000000000000000C4 -:108B00000000000000000000000000000000000065 -:108B10000000000000000000FFFF0F000CFC0CFC38 -:108B20000000000000000000000000000000000045 -:108B30000000000000000000000000000000000035 -:108B400000000000000000000000C00003033C3CE7 -:108B50003C3CE8FCE8FCFDF8F0F000C200FAFFD76E -:108B6000CFC700000000DF00DF003F0F3F0FD7D767 -:108B7000D70000000000000000000000000000001E -:108B800000000000000000000000000000000000E5 -:108B900000000000000000000000F0FF00003C3C6E -:108BA0003C3C00000000000000000000000000004D -:108BB00000000000000000000000000000000000B5 -:108BC00000000000000000000000000000C00000E5 -:108BD000EBFFEBFFAAC3AAFFFDFDF0F0C2C2FAFA59 -:108BE0000000000000000000DFFFDFFF3C003C0051 -:108BF000D7D7D700000000000000000000000000F0 -:108C00000000000000000000000000000000000064 -:108C10000000000000000000000000000000000054 -:108C200000000000000000000000820004000400BA -:108C30000800000000000000000004000000000028 -:108C40008400000004040008000000000403200069 -:108C5000840000000004000800100000820590005D -:108C60000000C00020000000000400000000000020 -:108C70000400C010C00004034004400004000000D1 -:108C800000000000000000000000000000000000E4 -:108C900000000000000000000000000000000000D4 -:108CA0004000000000000000000000000000000084 -:108CB00000000000000000000000000000000000B4 -:108CC00000000000000000000000000000000000A4 -:108CD0000000200000000000000000000000000074 -:108CE000000000080000410000000000000000003B -:108CF0000900090000000000000000000000000062 -:108D00000000000000000000000000000000000063 -:108D10000000000000000000000000000000000053 -:108D20000000000000000000000000000000000043 -:108D300000000000000000000000004100000008EA -:108D40000000000000000000000000000003000020 -:108D50000000000400000000000500000003000007 -:108D6000001000040041000300050004000410008E -:108D7000000900050000000000410005000000039C -:108D800000090000000000000000000000000000DA -:108D900000000000000002000000000000000000D1 -:108DA00000000000000000000000000000000000C3 -:108DB00000000000000000000000000000000000B3 -:108DC0000000000000000000000000100000000093 -:108DD0000000000400100000000000A0000000845B -:108DE00000040088008200040008008800100008C9 -:108DF00003042010050820100084001000100084D7 -:108E000000080084000000000000000000000000D6 -:108E10000000000000000000000000000000000052 -:108E20000000000000000000000000000000000042 -:108E3000000000000000000010000000000000081A -:108E400000000000000000080000002000080002F0 -:108E5000020088000008000200000010000400105A -:108E600040409008000088080008000220400005EB -:108E700020100000000800400021844084080041C8 -:108E80008408004000110000000000000000000005 -:108E900000000000000000000000000000000000D2 -:108EA0000000000000000000000000000040000082 -:108EB00000A00084000000000000000000A00000EE -:108EC00041000000000000000082000011000300CB -:108ED0000000000000A0000000880082418800021D -:108EE000000000080000038200A0008400A0050824 -:108EF000410821004100038221000008000000C059 -:108F00000520000005C00500000000000000000072 -:108F10000000000000000000000000000000000051 -:108F200000000000001000000009004100100000D7 -:108F3000004100000004004000110000000010008B -:108F400000000000000400000000000500080021EF -:108F50000021002100410005101100080008000058 -:108F6000000340030000000008000400080800009F -:108F70000004000000000000000008000420200899 -:108F800000040008000500030810000000000000B5 -:108F900000000000000000000000000000000000D1 -:108FA00000000000000000000000000000000000C1 -:108FB0000000000004000000040009900000000010 -:108FC000000800A0009000000000000020A0008821 -:108FD00000080000000000C020002182400811C0ED -:108FE000000800000984008800880084008402C012 -:108FF0000090408400C000A000A000840084098884 -:1090000000C00084000009001110000000000000F2 -:109010000000000000000000000000000000000050 -:109020000000000000000000000000000000000040 -:109030000000000000000000000000000000000030 -:1090400040002000000000080000000000000000B8 -:1090500000000000000000000000000808080000F8 -:10906000000000410008004000210009000000004D -:109070000800004010020021000000000000000075 -:10908000000000030040A0000004000000020000F7 -:1090900000000000000000000000000000000000D0 -:1090A00000000000000000000000000000000000C0 -:1090B000000200000008000000000000000000089E -:1090C00000000000000000000000000000000000A0 -:1090D0000004008800000000008200080500000075 -:1090E00009A00084008202A000A0008400000508FE -:1090F00002A0000200902000118200000000200069 -:1091000009C00840000020040040001000000000DA -:10911000000000000000000000000000000000004F -:10912000000000000000000000000000000000003F -:10913000000000000000000000000000000000002F -:10914000000000000003000000000000000000001C -:1091500000000000000000000200004100000000CC -:1091600008000000000000210011000000100000B5 -:10917000000000214003004100108209002100107E -:109180000021900300000000002100040000000006 -:1091900000080000000000000000000000000000C7 -:1091A00000000000000000000000000000000000BF -:1091B00000000000200000900000000000880090E7 -:1091C000200809A0000000A0001011102004410890 -:1091D00004A0000000C0000000000082000000A009 -:1091E00000842084009000A00804210200000000F8 -:1091F000008409C0090009A00084090200002000C1 -:1092000000020000000000900090090000820000B1 -:10921000049040000000000000000000000000007A -:10922000000000000000000000000000000000003E -:10923000000000000000000000000000000000002E -:10924000000000000000000000000000000000001E -:10925000000000000000000000000000000000000E -:1092600000000000000000000000000000000000FE -:1092700000000000000000000000000000000000EE -:1092800000000000000000000000000000000000DE -:1092900000000000000000000000000000000000CE -:1092A00000000000000000000000000000000000BE -:1092B00000000000000000000000000000000000AE -:1092C000000000000000000000000000000000009E -:1092D000000000000000000000000000000000008E -:1092E000000000000000000000000000000000007E -:1092F000000000000000000000000000000000006E -:10930000000000000000000000000000000000005D -:10931000000000000000000000000000000000004D -:10932000000000000000000000000000000000003D -:10933000000000000000000000000000000000002D -:10934000000000000000000000000000000000001D -:10935000000000000000000000000000000000000D -:1093600000000000000000000000000000000000FD -:1093700000000000000000000000000000000000ED -:1093800000000000000000000000000000000000DD -:1093900000000000000000000000000000000000CD -:1093A00000000000000000000000000000000000BD -:1093B00000000000000000000000000000000000AD -:1093C000000000000000000000000000000000009D -:1093D000000000000000000000000000000000008D -:1093E000000000000000000000000000000000007D -:1093F000000000000000000000000000000000006D -:10940000000000000000000000000000000000005C -:10941000000000000000000000000000000000004C -:10942000000000000000000000000000000000003C -:10943000000000000000000000000000000000002C -:10944000000000000000000000000000000000001C -:10945000000000000000000000000000000000000C -:1094600000000000000000000000000000000000FC -:1094700000000000000000000000000000000000EC -:1094800000000000000000000000000000000000DC -:1094900000000000000000000000000000000000CC -:1094A00000000000000000000000000000000000BC -:1094B00000000000000000000000000000000000AC -:1094C000000000000000000000000000000000009C -:1094D000000000000000000000000000000000008C -:1094E000000000000000000000000000000000007C -:1094F000000000000000000000000000000000006C -:10950000000000000000000000000000000000005B -:10951000000000000000000000000000000000004B -:10952000000000000000000000000000000000003B -:10953000000000000000000000000000000000002B -:10954000000000000000000000000000000000001B -:10955000000000000000000000000000000000000B -:1095600000000000000000000000000000000000FB -:1095700000000000000000000000000000000000EB -:1095800000000000000000000000000000000000DB -:1095900000000000000000000000000000000000CB -:1095A00000000000000000000000000000000000BB -:1095B00000000000000000000000000000000000AB -:1095C000000000000000000000000000000000009B -:1095D000000000000000000000000000000000008B -:1095E000000000000000000000000000000000007B -:1095F000000000000000000000000000000000006B -:10960000000000000000000000000000000000005A -:10961000000000000000000000000000000000004A -:10962000000000000000000000000000000000003A -:10963000000000000000000000000000000000002A -:10964000000000000000000000000000000000001A -:10965000000000000000000000000000000000000A -:1096600000000000000000000000000000000000FA -:1096700000000000000000000000000000000000EA -:1096800000000000000000000000000000000000DA -:1096900000000000000000000000000000000000CA -:1096A00000000000000000000000000000000000BA -:1096B00000000000000000000000000000000000AA -:1096C000000000000000000000000000000000009A -:1096D000000000000000000000000000000000008A -:1096E000000000000000000000000000000000007A -:1096F000000000000000000000000000000000006A -:109700000000000000000000000000000000000059 -:109710000000000000000000000000000000000049 -:109720000000000000000000000000000000000039 -:109730000000000000000000000000000000000029 -:109740000000000000000000000000000000000019 -:109750000000000000000000000000000000000009 -:1097600000000000000000000000000000000000F9 -:1097700000000000000000000000000000000000E9 -:1097800000000000000000000000000000000000D9 -:1097900000000000000000000000000000000000C9 -:1097A00000000000000000000000000000000000B9 -:1097B00000000000000000000000000000000000A9 -:1097C0000000000000000000000000000000000099 -:1097D0000000000000000000000000000000000089 -:1097E0000000000000000000000000000000000079 -:1097F0000000000000000000000000000000000069 -:109800000000000000000000000000000000000058 -:109810000000000000000000000000000000000048 -:109820000000000000000000000000000000000038 -:109830000000000000000000000000000000000028 -:109840000000000000000000000000000000000018 -:109850000000000000000000000000000000000008 -:1098600000000000000000000000000000000000F8 -:1098700000000000000000000000000000000000E8 -:1098800000000000000000000000000000000000D8 -:1098900000000000000000000000000000000000C8 -:1098A00000000000000000000000000000000000B8 -:1098B00000000000000000000000000000000000A8 -:1098C0000000000000000000000000000000020096 -:1098D0000000000000000000000000000400000084 -:1098E00000800880010000000082000000000002EB -:1098F000200001004000030001804108C100010078 -:109900000880208020000080400088900008080225 -:109910002000A004200500100400C1002080411098 -:1099200020102010C0040004001088100408020257 -:109930000000000000000000000000000000000027 -:109940000000000000000000000000000000000017 -:109950000000000000000000000000000000800087 -:10996000000000108010080000002111000000001D -:109970000000000040008000404004020400040099 -:1099800040004010C0100000001000000002000065 -:109990008001090000000000000080200402004057 -:1099A00004010000000100000040030000048000EA -:1099B00000010000000000000000000000000000A6 -:1099C0000000000000000000000000000000000097 -:1099D000000000000008000000000000000000007F -:1099E0000000000000000000000000000000000572 -:1099F000000000000008001002040300000900033A -:109A000000000040000000000004004000000100D1 -:109A10000000000000000080010000000100008044 -:109A200001090000000500030000008001000100A2 -:109A30000800040400000000000000000000000016 -:109A40000000000000000000000000000000000016 -:109A50000000000000000000000000000000000006 -:109A6000020002000000008402400000000000002C -:109A70000200000000000000000202004088000018 -:109A8000000000C0200100880082020100040300E1 -:109A900008000010008200040002401003000208C9 -:109AA00004040804090800C000842082001004088F -:109AB000048400888008000000000000000000000E -:109AC0000000000000000000000000000000000096 -:109AD0000000000000000000000000000000000086 -:109AE0000800000000000200000800000000000064 -:109AF00000410080001100000040000541210010DD -:109B000000050020000200081085001000080088F1 -:109B1000020300080202014000080040400820A1A2 -:109B2000000300400184004001840004092008086B -:109B30000040402000110220000000000000000052 -:109B40000000000000000000000000000000000015 -:109B50000000000000000000000000000000000005 -:109B600000008082000000000000000000000000F3 -:109B70000000000000400000000000000000C000E5 -:109B800000000000000100000000000400080000C8 -:109B9000402080840000210140A0000000108000CF -:109BA000002000A0001008100910200504008409FE -:109BB000C1002100800100822000000000000000A0 -:109BC0000000000000000000000000000000000095 -:109BD0000000000000000000000000000021004024 -:109BE0000000000002000000000000000000000073 -:109BF000400090112041904100040000200000111D -:109C00000000838000008200C0080504C008000432 -:109C10008800820800000004020382802000000007 -:109C200011820888C0001100010041020284000076 -:109C30000800091008809020A00004000000000027 -:109C40000000000000000000000000000000000014 -:109C50000000000000000000000000000000000400 -:109C60000084000400C080820000001000042082F4 -:109C70000000000805880204090420080000000410 -:109C80004100410440020004040400008804090863 -:109C9000004040820208000005C0030000022002CC -:109CA00000A04003000211102004080820A0830433 -:109CB00000108082C00100204001001088100000C8 -:109CC0000000000000000000000000000000000094 -:109CD00000000000000000000000900000000000F4 -:109CE000000000000000000000000020000000084C -:109CF0000021000000050003400090020200000265 -:109D0000000000410080A01100004100A0020200FC -:109D10000000C0000003A1A100008205828082082B -:109D20000041C04140040340044004038210040485 -:109D300082082020824104038220084110208205ED -:109D40000000000000000000000000000000000013 -:109D50000000000000000000000000000000000003 -:109D600000000000000000000000000000010000F2 -:109D700000000000000000000000000000000000E3 -:109D80000000000000000002000000004000000190 -:109D9000000000000040000040040000000000023D -:109DA000000400200000C0000200800180000000CC -:109DB000800100000000000003000001000000011D -:109DC0000000000000000000000000000000000093 -:109DD0000000000000000000000000000000000083 -:109DE00000009100000000000000040000030008D3 -:109DF00000000000401000000010000000102010C3 -:109E0000200400008800C02120080021000882846E -:109E1000821120000008C04102410000000820001B -:109E2000000900210003000800412008052005204A -:109E300001850520110400088520202120004020F4 -:109E40002080A0C100000000000000000000000011 -:109E500000000000000000080008000000000000F2 -:109E60000004020004002000200000088090000090 -:109E7000208204A000A00900002009102002200474 -:109E80000908000400000004000820002100000070 -:109E9000034020102010001000A00000001000104F -:109EA000000005A000042020020009820084840133 -:109EB0008409081084050283418404A10910410427 -:109EC0008883202003200000000000000000000024 -:109ED0000000000000000000000000000000000082 -:109EE00000000000000000000000000000008800EA -:109EF000900800A0821000A0002000A0A084031001 -:109F000001A04085080300030100000000010000DB -:109F100010C00320408400840084C0008304829029 -:109F200002848300021110831184080320A0C0C0A2 -:109F30000801030202A100909010008811A00008FF -:109F4000100085918208C0000000000000000000A1 -:109F50000000000000000000000000000000000001 -:109F600000000000000000000000000000000000F1 -:109F7000000080800080800005800080008000005C -:109F8000408404408005800800000409002100048A -:109F90000005118208098009000200000300A0806A -:109FA000008082040402808800A1840080880091DF -:109FB000801080100880008300008380000084806F -:109FC00000808002409080908040000000000000EF -:109FD0000000000000000000000000000000000081 -:109FE000000000000000000000000000000300006E -:109FF0000000800000000011000080000009000047 -:10A00000000090009005800804210000000000007E -:10A01000040005210200084104A103028021001070 -:10A0200080028000800041008310A10489000205A5 -:10A0300009C089409080111080908091804000007C -:10A0400080008000000021008000058300000000E7 -:10A050000000000000000000000000000000000000 -:10A0600000000000000000000000000000000000F0 -:10A0700000880000100000840200C08488000000F6 -:10A080008804880088824000088509850000000057 -:10A090000000010000010000004000030104A000D6 -:10A0A0000289A0914084088888C040000900080403 -:10A0B00002C0904008A003400483A0A008049001BF -:10A0C00000004000020000401100840000900000E9 -:10A0D0000000000000000000000000000000000080 -:10A0E0000000000000000000000000000000000070 -:10A0F000000000000000041000108410C008880058 -:10A1000000020000C008C08801C00311A1030000C4 -:10A1100000010000A000000041100002A10511850F -:10A12000C08802000002A1C0C09001020040208847 -:10A1300000A00088A18482041191A10000080403FA -:10A1400084048404C090A00488010000030300017B -:10A1500000000000000000000000000000000000FF -:10A1600000000000000000000000000000000000EF -:10A1700000000000000000000580000080800480D6 -:10A1800000000000000000808004040440A121843D -:10A19000000000042041890000000285038505912C -:10A1A00084400040800500108504000008850840B8 -:10A1B000000300410380A110C1110488910900909F -:10A1C0000085009100A00090808000214103842040 -:10A1D0004105000000000000000000000000000039 -:10A1E000000000000000000000000000000000006F -:10A1F00000000011800080000000000000200080AE -:10A200000000000400800080000021C00409C1009B -:10A2100004030000022121000500000021C02110DC -:10A220000400100880040000008480002100040065 -:10A2300004004041C0A1208541000300A100098421 -:10A2400008214111000000A000800000848000036C -:10A25000C0A103100000000000000000000000008A -:10A2600000000000000000000000000000000000EE -:10A2700000000000200120000800C00000000001D4 -:10A2800000100000C00010200208020083410502F7 -:10A290008402C10100000001000000000000C108AC -:10A2A00084008500850110008800000908000182F3 -:10A2B00000000100010103C18508880211000300AC -:10A2C000000291018801000000030090000091024B -:10A2D000000108090200000000000000000000006A -:10A2E000000000000000000000000000000000006E -:10A2F0000000000000000042000006000000001105 -:10A300000000060000000000000000000000000047 -:10A3100000000000880000000000000000000000B5 -:10A320000000000007000000810A00600600000035 -:10A330000000000000000012001100000600822151 -:10A34000E00000E0060000000000006006000000E1 -:10A3500000000000070000120000000000000000E4 -:10A3600000000000000000000000000000000000ED -:10A370000000000000000000207F207F000000009F -:10A3800000000000CFCFFFFFD70007000000000053 -:10A39000C3C300AF434343000000000000000000BF -:10A3A0000000FFFFFFBE505FC3C0000000000000C0 -:10A3B0000000000000008F0F8F00555F3C3C000044 -:10A3C0000000A0A0A8A841000000000000000000BC -:10A3D00008000C0CFCFCAAAAAAAA000000000000BD -:10A3E000000000000000000000000000000000006D -:10A3F000000000000000000000002A75207F00001F -:10A40000000000000000CDCFFDFFD7D707070F0FDA -:10A410000000C3C300055F5F5F0000000000000094 -:10A42000000000000F0F0F0E505FC3C0410000007E -:10A43000C300000000000000DFFFDFF005050000A2 -:10A440000F05030100002828410000000000000063 -:10A45000000008000C0CFCFC00FF00FF00000000E6 -:10A4600000000000000000000000000000000000EC -:10A4700000000000000000000000000000000000DC -:10A48000000000003C3C3C3CFFFF0000A2AA000092 -:10A490000000EBC3C0C0EAEA003838380000000012 -:10A4A000000000000000FFFFFF00000000003A3A3B -:10A4B0003A3A00000000040400003F303C3C14F530 -:10A4C0001414000000000F040F04307171710000BB -:10A4D000A2F300000000FFF0FFF0FF00FF0000000B -:10A4E000000000000000000000000000000000006C -:10A4F000000000000000000000000000000000005C -:10A50000000000000000FEFCFEFC3C003C00F3FFED -:10A510000000EBC3EBC3AA00AAAA3C3C3C3C0000F1 -:10A520000000000000000000EFEFFF00000000004E -:10A530003A3A3F3F00000C00050500003F303C3C2C -:10A5400014F514140800000004040404307171713F -:10A55000A2F3A2F3008200000F000F000F0F0F0FF5 -:10A5600000000000000000000000000000000000EB -:10A5700000000000000000000000000000000000DB -:10A58000000000300000000005000A38050000A1AE -:10A59000000000000010000080610006001D0000A7 -:10A5A000000000610006000D00000561340E050D7D -:10A5B00000A100610027C00D00A000610006001D81 -:10A5C000000000613026000D00A185610A0C801991 -:10A5D00000A00061000F051D00000061000E000DCD -:10A5E000000000000000000000000000000000006B -:10A5F000000000000000000000000000000000005B -:10A60000000000000000000000000000000000004A -:10A61000000000000000000000005455FCFFFFFF98 -:10A62000F3F300000F00FFF030303030FFFFFFFF8A -:10A63000AAAA820200000000F7F7F4F45D0CFFFF05 -:10A6400000000000C0005555FF55C341F5FC050C46 -:10A6500008F80BFB0000000020EF20EF02020808C2 -:10A6600043000000000000000000000000000000A7 -:10A6700000000000000000000000000000000000DA -:10A6800000000000000000000000000000000000CA -:10A690000000000000000000000000000000A8AA68 -:10A6A00005F505F50000FFF0FFF030303030000315 -:10A6B00000FFAAAAAA0A00000000FF3FCF0F550022 -:10A6C000FFFF0050000AFC3C5555FF55C341F5FF04 -:10A6D00005000000FFFF0000000020EF20EF808059 -:10A6E0000B0B4343000000000000000000000000CE -:10A6F000000000000000000000000000000000005A -:10A700000000000000000000000000000000000049 -:10A710000000000000000000000000000000FA5AE5 -:10A72000F05028280F0F000002C302FF000000FFB6 -:10A730004BFF4BFFD70700000000000000000000A7 -:10A7400080A0C0F0F000FAAA0D050D050000FFFF83 -:10A7500055550F0FE8E8E8E8000000000000000091 -:10A760003F280300A0A0FFFF000000000000000041 -:10A7700000000000000000000000000000000000D9 -:10A7800000000000000000000000000000000000C9 -:10A7900000000000000000000000000000000000B9 -:10A7A000F454F454AAAA0F0F0000FEC3FEFF0000E9 -:10A7B00000FFFFFF5555D707D70700000000000036 -:10A7C000000082AAC3FF0000AAAA0C000C0000002F -:10A7D000CFFF55550F0FE8E8E8E800000000000043 -:10A7E000000000000000A0A0A0A0000000000000E9 -:10A7F0000000000000000000000002000300000054 -:10A80000020000000000020004000000000005003B -:10A810000300008000000000008000800080000035 -:10A8200020080000000000002100000302000008D2 -:10A83000020002000000C000C0800200020084008C -:10A8400002000202001100000000008220108400BB -:10A850000211880200052008021000020010C0103A -:10A86000840288850110C11189890400000000005C -:10A8700000000000000000000000000000000800D0 -:10A880000000000800000000000080000000000040 -:10A89000080002000010000000000010001000106E -:10A8A00000000000000000000000400000028008DE -:10A8B0000000800080000000000000028000800096 -:10A8C000000080008901000000000000004100003D -:10A8D00000008000000100000900C100000100002C -:10A8E0000000410141402008200020020004000037 -:10A8F0000000000000000000000000000000000058 -:10A900000000000000000000000000000000000047 -:10A910000000000000000000000000000000010036 -:10A920000100000000000100010001000100000220 -:10A93000000001000000000000000100020800000B -:10A9400000000000000400000100001001000000F1 -:10A9500000000000200201000008018000802000AB -:10A9600020000000000900040000000000100100A9 -:10A9700000000000000000000000000000000000D7 -:10A9800000000000000000000000000000000000C7 -:10A9900000000000000000000000000000000000B7 -:10A9A0000200020009000008020002000288020002 -:10A9B0000000000002000000000400000208800403 -:10A9C00000000082008800040008028200880288DB -:10A9D0002088020800C00083020000040202000276 -:10A9E000000809820004209020080084000441042B -:10A9F0002000000000000000000000000000000037 -:10AA00000000000000000000000000000100000045 -:10AA1000000000410000002100410000000800008B -:10AA20000000000000418241000000090000000019 -:10AA3000000000000021400000210010000800403C -:10AA40000041000300080111000300402021840997 -:10AA50000021000300030111000400080011000997 -:10AA600000A100100008009100090000404000888B -:10AA700020090005000000000000000000000000A8 -:10AA800000000000000000000000000000000400C2 -:10AA900000000000000000000000000000000000B6 -:10AAA00000000000030000C000C0000000002110F2 -:10AAB0000000000800000010A000080800000000CE -:10AAC00000000000001000000284111003000000CC -:10AAD000000802900000000002A000C0004000003A -:10AAE0002100080200400082004000840000A08293 -:10AAF0001002C00803000000000000000000000079 -:10AB00000000000000000000000000000000000045 -:10AB100000000000000088000000080000000000A5 -:10AB20000000000000000800880000000000000095 -:10AB3000000008000000000300000200A000080060 -:10AB40000000000088090000000040000000C00074 -:10AB50000000020000004000020000004000080069 -:10AB60000203000040028200020040000200A00236 -:10AB70000209028000000011000000000000000037 -:10AB800000000000000000000000000000000000C5 -:10AB9000000000000000000000C0000080A000C015 -:10ABA0000000001000000040110000000000000044 -:10ABB00000000000000000820000030411C002A099 -:10ABC00000000004200009A0008420040508009073 -:10ABD00000000284800000080082918400080000C8 -:10ABE0000000800800828009029080080090A1087F -:10ABF00000898900C1040008000000000000000076 -:10AC00000000000000000000000000000000000044 -:10AC10000000000304210480000500000000008201 -:10AC200000410003000900000000000820000008A7 -:10AC3000000300080002880800000000000902026A -:10AC4000000300200200001000080008001090021D -:10AC5000020300110002020302020000000382024C -:10AC600002088800C00220020140022100044002C4 -:10AC700082200021820890020000200400000000D1 -:10AC800000000000000000000000000000000000C4 -:10AC90000000000000008000802000000000000094 -:10ACA0000003000000000010000000000000000889 -:10ACB00000840084008200080008000000000000FA -:10ACC0000000000002008040000000082000028810 -:10ACD000038800080500001000400040211000001B -:10ACE00009000040001009100082404011A000003F -:10ACF000000000A000000900001011000001000089 -:10AD00000000000000000000000000000000000043 -:10AD10000000000000000003040000080000000024 -:10AD200000410000000800000000000800000821A9 -:10AD300008008240002190110003024184C10000FC -:10AD400001050008002140000005020988110021CA -:10AD5000002100040003081040089010400000008B -:10AD60000041C0030005000800210003401102401B -:10AD70000011000920100200C0000003044002C1BD -:10AD800000000000000000000000000000000000C3 -:10AD9000000000000000000000008000000400002F -:10ADA000000011A00000004000000000000420107E -:10ADB000800000000000000000000000000000040F -:10ADC0000000400011040000000000000010038893 -:10ADD00021000008051000400000090000100000DC -:10ADE000000000A00000000200000002000080003F -:10ADF000824041000804008240C00000098400092C -:10AE0000C002000000000000000000000000000080 -:10AE10000000C0A00020000200020000009000041A -:10AE200004C0000403020008000411C00004001064 -:10AE30000888100400100088100402100110040893 -:10AE40000210000108100020A0030889C0100111A1 -:10AE5000A0081008021008904082841040040010DE -:10AE6000401088C008101008002082C01010014057 -:10AE70008210080240100890001083040211041090 -:10AE80000041A008000000000000000000000000D9 -:10AE900000000000828000800009000000000080A7 -:10AEA00000000000000021000080000004000000FD -:10AEB00000808000800000000080000080002100F1 -:10AEC000008000000000820404890040800200111C -:10AED0002182001100000000040000800080830037 -:10AEE0000900808009000000858000008000800942 -:10AEF000208900840010800000000080820083020E -:10AF0000090308A00082000000000000000000000B -:10AF100000000000000080008008008000000000A9 -:10AF20000000000080002080000404848302800070 -:10AF30000020008000000000000080008080C080B1 -:10AF400004918584C0400000C1802008081002A13F -:10AF5000A00020C10208A1048000008280800000BF -:10AF6000000000C180118000A000C1A00882A08064 -:10AF7000A0000988A0C1A0A0200009884083038008 -:10AF800020040085C08582830000000000000000CE -:10AF900000000000000000008800100110081000F0 -:10AFA00000000000A00090001102888489A0110018 -:10AFB00088008801C0408800A000C000100010C0B8 -:10AFC0000940108210111121000010048321028514 -:10AFD000890503021182098811C1080008821082C4 -:10AFE000888284001082100810208500108304835A -:10AFF000110811A002831111114103000882A0025F -:10B0000088C0C1A110C1414010C100000000000073 -:10B0100000000000000000000000A040010003C08C -:10B02000A0C04000004090041010C002000402853F -:10B03000A1A1100200200082C0108440000888A056 -:10B040008288021000029083838900008888014171 -:10B050000941851002090008C1891188900900C0C2 -:10B0600004038802088800104009820810080209B9 -:10B0700084021088021100102188108808040089B9 -:10B08000C088C088C1108520C184038800000000EA -:10B0900000000000000000000000000080800800A8 -:10B0A00040008000800000808000808080800080E0 -:10B0B00000A1911100000080008004000080008049 -:10B0C00000008000410500000088A0050000030585 -:10B0D000404090A1100841A109040405C005414069 -:10B0E00000058005040841030002008591834105A5 -:10B0F00000C080058900C1C003838209A00041020D -:10B1000000038011020941002090C0108404000057 -:10B1100000000000000000000000000000008002AD -:10B1200000808080000000000000000000004083DC -:10B13000218020001104000900C18080800080006F -:10B140000084000000002088401182A10800000057 -:10B1500011410980020010040400048290808402DE -:10B16000000200820080800000200010808000002B -:10B170008000008980800084A10404824100800056 -:10B18000000000410000800402084000200000850B -:10B1900000000000000000000000000000000000AF -:10B1A000080000101040000000000004000400002F -:10B1B00085400210891005000400A0A10884A000A9 -:10B1C000080000080402000011C189820841C00083 -:10B1D00000009083888203021100109011C00908BA -:10B1E00082019000082010821000100010C04082E0 -:10B1F000020020C088108282041185040882888899 -:10B2000082009082028310C0820111828902840828 -:10B21000C01000000000000000000000000000005E -:10B220000000000000000000420000420000060094 -:10B2300000008200006000004100000000000000EB -:10B24000A0000000000000000042480000E00000F4 -:10B25000A0000000000000000000D000000000007E -:10B260000000C2000000000000000000000000001C -:10B2700000000000000000000000000000000000CE -:10B2800000000082000000000000A042000000E07A -:10B290000000484200000000000000000000000024 -:10B2A0000000000066660606E7810000000000005E -:10B2B000FF0FF0F000FF00FF00000003003C00382B -:10B2C000000000000F0F0000FEF20E02FF9F7C1C2A -:10B2D000FFE400E40000FE0EF202FBFBFB206C6CBE -:10B2E0006F60FF76CF46BD24B4B4FF24F4F466F05B -:10B2F000663C7C7CFF60FF9FE383FCF60C06FE98B7 -:10B30000FCFC7CFF1C9F7E18F690F67E9018FF9F39 -:10B310007C1CFEFC98FC0000000000000000000007 -:10B3200000000000000000000606E78100000000A9 -:10B330000000000FF0F000F400F000000003000037 -:10B340000000000000010F0F00007E427E426000FE -:10B350007C1CE4E4E4E400007E7E42422020FB20EA -:10B360003C3CFF0030760046FF00F0F0DB00D0D020 -:10B37000F0F03C3C1C1C9F007C1C60003C663C6662 -:10B380006E080C0C7C601C003C3CF0F0F03CF03C87 -:10B3900060007C1CE6C080C00000000000000000CF -:10B3A000000000000000000000000000000000009D -:10B3B000000000000000000000000000000000008D -:10B3C000000000000000000000000000000000007D -:10B3D000000000000000000000000000000000006D -:10B3E000000000000000000000000000000000005D -:10B3F000000000000000000000000000000000004D -:10B40000000000000000000000000000000000003C -:10B41000000000000000000000000000000000002C -:10B4200000000000000000000000C606C6F600FF95 -:10B43000006604FD04FD006699FFFF008D0000F921 -:10B4400000C1FFFFFFFF0000000004040000180916 -:10B450007E6FF938FF3E6F436F7F000040704F7F73 -:10B46000096F187E383EF9FF6C006CFFF362FF6EC7 -:10B470003E063EFF04FDFDFD360036FF0F090F6F4F -:10B4800020E02FEF62F36EFF0F030F3F18097E6F6E -:10B49000F3FF626EF362FF6E6F436F7F0000000088 -:10B4A000000000000000000000000000460646F614 -:10B4B0001E1E1E1E649D649D0000FFFF00008D0087 -:10B4C00000FF00FF7FFFFFFF0000000800060808E4 -:10B4D0003C0F3C0F0038063E6040607C0000427E1E -:10B4E000427E0F0F3C3C383E00066C6C6C6C006278 -:10B4F0000C6E380038F90404FD04363636363C1834 -:10B500003C7E24E724E762006E0C6642667E3C0FB8 -:10B510003C0F000C626E00620C6E6040607C0000AC -:10B5200000000000000000000000000000000061BA -:10B530000006001D00000000003000000000006157 -:10B540003006C0090000000000000010000080006C -:10B5500000000020100240618006802D10020000D3 -:10B5600040618006002D100240618006002D10020F -:10B5700040618006002D100240618006002D1002FF -:10B5800040618006002D100240618006002D1002EF -:10B5900040618006002D100240618007002D1002DE -:10B5A000000000000000000000000000000000009B -:10B5B000000000000000000000000000000000008B -:10B5C000FFFF000000FFFFFF000000000000000080 -:10B5D0000000000000000000AAAAFFFFFF00FF1407 -:10B5E00000000202AA02FFC3FEC28082C0C3052D72 -:10B5F000000000000000454545000000000000007C -:10B6000000000000000000C000C0FF00FF0030BAD2 -:10B6100030BA00000000F0F0F03C55FF55FAFFFF93 -:10B620000FFF00000000000000000000000000000C -:10B63000000000000000000000000000000000000A -:10B6400000003C9C3C9C0000FF000000000000004B -:10B6500000000000000000000000C3F0C3FFFF3C3A -:10B66000FF3C000002FFAAFFFFC3FFC3A0AAF0FF38 -:10B6700005AF000000000000CFCFCF0000000000A9 -:10B680000100000000000000000000005F00FF005B -:10B690000000000000000000F0F0F03CFFFFFFFAA7 -:10B6A000000000F0000000000000000000000000AA -:10B6B000000000000000000000000000000000008A -:10B6C00000000000000000003C3C3C3C000000008A -:10B6D000000000000000000000000000000000006A -:10B6E000F0FC0F0F00003F033F175555080D5F0F8B -:10B6F0005500FD3D3C3C0000000000000000000043 -:10B700000000000000000000000008080DFD551FAB -:10B71000001FFF00FF000000000028F000005400A0 -:10B720005404FFFFFF3C0000000000000000000088 -:10B73000000000000000F5F5F5F500000000000035 -:10B74000000000000000000000003CBE3C3C000087 -:10B7500000000000000000000000000000000000E9 -:10B760000000F0FC000000003F2B3F3F0000080DF0 -:10B7700000000000FF3F3C3C000000000000000013 -:10B78000000000000000000000000000080808F8A9 -:10B7900055140014FF00FC00000000000000000031 -:10B7A00004000404D7FFD73C0000000000000000A4 -:10B7B0000000000000000000000000000000000089 -:10B7C000000008000000000000000200000002006D -:10B7D00000000000000000000080000000000000E9 -:10B7E00001008800000004100003010003000200B3 -:10B7F0000200000002000402028002400000020871 -:10B8000004802000210020100304890020102080E3 -:10B8100002840500040388008810208802100410A8 -:10B820000210200002108410201000000000000010 -:10B830000000000000000000000000000000000008 -:10B8400000000000800000000000000080000000F8 -:10B8500000000000000000000000002000000000C8 -:10B860000000040020000000000100020400840029 -:10B8700080008088090080000001800280010000B3 -:10B8800004000040800002008000028520000000CB -:10B8900000048002028800002000000000028000F6 -:10B8A0000000A00000008000040004000000000070 -:10B8B0000000000000000000000000000000000088 -:10B8C0000000000000000000000000000000000078 -:10B8D0000000000000000000000000000000000068 -:10B8E0000000000000000000000000000002010055 -:10B8F0000000000000000000000000000000000048 -:10B9000001000000000001000104000000800000B0 -:10B9100000000008010000080003004000000110C2 -:10B920000000008400000000000001400000000052 -:10B930000000000000000000000000000000000007 -:10B9400000000000000000000000000000000000F7 -:10B9500000000000000000000000000000000000E7 -:10B9600000000000000000000000040000000000D3 -:10B9700002000008041020820000008800C000823D -:10B980000008020800000008020820000008200249 -:10B9900000080004008820080504000800010004D5 -:10B9A00002820088090204040088200402050008BD -:10B9B0000000000000000000000000000000000087 -:10B9C0000000000000000000000000000000000077 -:10B9D0000000000000080000000000080000000057 -:10B9E00000000008001001000000050000400208EF -:10B9F000000000400080000000000040C0830040C4 -:10BA0000014000000002004040400040008800402B -:10BA100008050208020321882040004000880188B0 -:10BA200002080040008002400040014000880003FE -:10BA300001400000000000000000000000000000C5 -:10BA400000000000000000000000000000A00082D4 -:10BA50000000000000000000008200000000001054 -:10BA6000000800080000000008C00010880000C0A6 -:10BA700000A0000200090840418200A00009024025 -:10BA80000001404100A01182008583A10003004015 -:10BA900002830008800880C0824082A100830840A1 -:10BAA000020288A00085034008A109A10285054083 -:10BAB000000202A1000000000000000000000000E1 -:10BAC0000000000000000000000002000000000074 -:10BAD0000000000000000000000000000000020064 -:10BAE00000000000000000000000000088000000CE -:10BAF000000000000002000000000400021001002D -:10BB00000000C1020000A000004089008200004047 -:10BB10002000A10004000000200004000000000537 -:10BB20008421000002002000A00004000040000961 -:10BB30000200080082020000000000000000000077 -:10BB400000000000000000000000000000000000F5 -:10BB500000000000000000000000000000000000E5 -:10BB60008000000000000000000000000000000055 -:10BB70000000000000000000000000008040800085 -:10BB800002000000020000000000000002000000AF -:10BB9000000000000200000000108200000000040D -:10BBA00021000000000080000000000002082100C9 -:10BBB00000100482000021010000000000000000CD -:10BBC0000000000000000000000000000000000075 -:10BBD0000000000000000000000000410000200004 -:10BBE00000000000C008000000000000000000008D -:10BBF0000000010000080400000000000000A02078 -:10BC000002080040020800090021C0400140004035 -:10BC100000080009002100090108000801080000CF -:10BC20002009000800030221404000110003000227 -:10BC30000040000302080041000000000000000076 -:10BC4000000000000000000000000000001000A044 -:10BC500000000000000000000000000000A000A0A4 -:10BC600080080084008400A000A000A00000000064 -:10BC7000000800A008A000A08010000009080240F1 -:10BC800002A0808402A0000011A0214002020284D0 -:10BC900000C0209000A000881102020002A0020053 -:10BCA00011A0000011A000020082824002A020002A -:10BCB00000C0004000A0001000A008040000000028 -:10BCC0000000000000000000000000000000000074 -:10BCD000000000000000000000000000000000085C -:10BCE00000110000001100000040001100100010C1 -:10BCF0000000000040080000040000000000900068 -:10BD00000000000090000200000088000008000011 -:10BD1000202182038208000000218821C00002083F -:10BD2000001100080804000002219021204088082A -:10BD300000089088400304080003A08888030000DE -:10BD400000000000000000000000000000000000F3 -:10BD500000000000000000000000000000000000E3 -:10BD600000000000000000000000000000000000D3 -:10BD70000000000000000000001080200000000013 -:10BD800000000000000800000000000000000000AB -:10BD900000000000000000000000000000000000A3 -:10BDA0008000000000000000000080000000000093 -:10BDB00000000000004080000000000000020000C1 -:10BDC0000000000000000000000000000000000073 -:10BDD000000000000000000000040008000800103F -:10BDE0000000010000000000000000000000000052 -:10BDF0000000000000000000010000000000000042 -:10BE00000003100000000000000004100810A0084B -:10BE100002880302C110401004821008C004218867 -:10BE20009008C18801108490C08411080288000223 -:10BE3000C082401102099082101190C0008889C010 -:10BE400011100000000000000000000000000000D1 -:10BE500000000000000000000000000000800080E2 -:10BE6000008000000400000000000000000000004E -:10BE700000000000000000000000040000000000BE -:10BE800000000000800000000000000000808280B0 -:10BE90000080000084000280800000808080890093 -:10BEA0001000118085001080050080009080040043 -:10BEB000000080809120008803A000A00000000006 -:10BEC0002000C18000000000000000000000000011 -:10BED0000000000000000000000000000000000062 -:10BEE0000000000040004000090040000000000089 -:10BEF0000000000000000000000000008000800042 -:10BF00000000000000008000800080008080880029 -:10BF10000288A0808480000000C100000000004072 -:10BF2000008280048080000280A080C00000C000E9 -:10BF30001009C08009808400C0A108110400C0005D -:10BF4000048800008880000000000000000000005D -:10BF500000000000000000000000000000000000E1 -:10BF600000000000000001000100000000000000CF -:10BF700000000000000000000000000000001000B1 -:10BF8000200404008410000004001084100008C085 -:10BF900011008983118209C00200028302028840D5 -:10BFA0001001108310118204100108820840904093 -:10BFB000110004C00340100408002082020289829C -:10BFC00083001183888811400000000000000000F9 -:10BFD0000000000000000000000000000000000061 -:10BFE000400000000400040000010000A001010066 -:10BFF0000000000000000000000000000000000041 -:10C000000000000084000000000000000088C00460 -:10C01000000088880009C0100209A0020011828473 -:10C020001085108404104002910304901009201020 -:10C03000041091900002A088404184088203050802 -:10C040004040C020828820084041000000000000DD -:10C0500000000000000000000000000000000000E0 -:10C06000000080000000000000000020004180056A -:10C0700011090000000000000000030000000000A3 -:10C08000000011000000000000000000040000009B -:10C0900000000400410500A0801182C04104000896 -:10C0A00000C01084C18480A10009200841000088DC -:10C0B000801189044000002000089188C10390107D -:10C0C000C080C189C10580408080C1880000000017 -:10C0D0000000000000000000000000000000000060 -:10C0E00000000000000000000000000000800000D0 -:10C0F0000000000400000000000000000009000033 -:10C10000000000000000001000000000000000001F -:10C1100000100080000000008080000080110000FE -:10C12000000000C1000000028000000080008000CC -:10C1300080908000000000000000008080840010DB -:10C14000808080808010000000808080802000003F -:10C1500000000000000000000000000000000000DF -:10C1600000000000000000000000000000000008C7 -:10C17000000000840000000000A00000000000009B -:10C18000000000000000000000850090000000009A -:10C190000000000288840000108282082004080049 -:10C1A00002001010020510108801101010880800FD -:10C1B000100010C1821084008840020204844011E3 -:10C1C000888420821010400020001082080840015E -:10C1D000000000000000000000000000000000005F -:10C1E000000000000000000000000000000000004F -:10C1F00000000060000000000000000000000000DF -:10C2000000810000060000000000000007000000A0 -:10C2100000000000000007000042000000000000D5 -:10C220000042000000000000C40B0000006000009D -:10C23000C200000000E00000411200000000000009 -:10C2400000120000000000000000000000000000DC -:10C250004205000000000000000000000000000097 -:10C2600000000000000000000000000000000000CE -:10C2700000000000000000000000000000000000BE -:10C2800000000000000000000000000000000000AE -:10C2900000000000F0F00000F0AAF0AA303030BA40 -:10C2A0000030AABA0028F0F83C3C3CBC00F028F86A -:10C2B00000F028F80020FFFF1C1CBCBC00A0FFF50C -:10C2C000CAFFCFFF000EF1FF80BF82BE5CFF5FFFA1 -:10C2D0003CAC3CAC0000000000000000000000008E -:10C2E000000000000000000000000000000000004E -:10C2F000000000000000000000000000000000003E -:10C30000000000000000000000000000000000002D -:10C31000000000000000F0F00000F0AAF0AA3030A9 -:10C3200030300000AAAA0000F0F0000000A000F0E9 -:10C3300000F000F000F000200020101CBFBCC0A0E6 -:10C34000FCF50035003000FE01FFA8ABAAAA00A34F -:10C3500000A0AAAC3CAC00000000000000000000FF -:10C360000000000000000000000000000000F0B02D -:10C37000F0B00000000000000000FFFFFFFF000021 -:10C380000000555555550000000000000000000059 -:10C390000000C3C3A0A0000000000000FFFF0400D5 -:10C3A0001F140F00FF0404043D3C05001F0F0F0F76 -:10C3B000FFFF04001F140F00FF04FF003D3D38384D -:10C3C000FF43BC005FDF0A08FFBC43003F3F303043 -:10C3D000FF0F000F3C0F3C0F0000000000000000AA -:10C3E000000000000000000000000000000000004D -:10C3F000FFF6FFE700000000000000000000000062 -:10C4000000000000555555550000000000000000D8 -:10C4100000000000C3C3F5A00000000000000400FD -:10C4200004000F000F00FF0000003C3C000014005F -:10C430000000040004000F000F00040400003DFD94 -:10C440003808FF7F80000F8F0F0DFF807F003CBEFC -:10C450003C148F8F0D0D0F0F2D2D000000000000DC -:10C4600000000000000000000000000000000000CC -:10C47000000000000000000000000061000600094C -:10C480000002000000000000000205000020000083 -:10C49000000005000A08050000A0000015004A0879 -:10C4A0000520100240618006002D100240618006C8 -:10C4B000002D100240618007002D100240618007AE -:10C4C000002D100240618006002D100240618006A0 -:10C4D000002D100240618006002D100200000000B7 -:10C4E000000000000000000000000000000000004C -:10C4F000000000000000000000000000000000003C -:10C5000000C303C3000000000000000000000000A2 -:10C51000000000000000000000000000000000001B -:10C5200000000000000000000000FF5504040000AF -:10C5300000000707070000000000000000000000E6 -:10C5400000000000F0FA0000000000F00FFF000003 -:10C550000000EBEBAFAF0000000020207F7F000069 -:10C5600000000000000000000000000000000000CB -:10C5700000000000000000000000000000000000BB -:10C58000000000FF00FF00000000000000000000AD -:10C59000000000000000000000000000000000009B -:10C5A000000000000000000000000000FF55EFEF59 -:10C5B00000000000D7D7D7000000000001000000F5 -:10C5C00000000000000000AA000000000000FFFFC3 -:10C5D00000000000EBEBAFAF0000000020207F7FE9 -:10C5E000000000000000000000000000000000004B -:10C5F000000000000000000000000000000000003B -:10C6000000000000DBFFDBBF0000000000000000B6 -:10C61000000000000000000000000000000000001A -:10C620000000000000000000000000000000003CCE -:10C63000FAAA000000000000000000000000000056 -:10C6400000000000000000000000000000005FDFAC -:10C650004BCBFFFF0AFA5541050100000000AAAAD2 -:10C66000B2B2000000000000000000000000000066 -:10C6700000000000000000000000000000000000BA -:10C68000000000000000DBFF5BBE000000000000B7 -:10C69000000000000000000000000000000000009A -:10C6A000000000000000000000000000000000008A -:10C6B000003C0AAA0000000000000000000000008A -:10C6C000000000000000000000000000000000006A -:10C6D000FFFFFFFFC0CFF0F0FFC30F03000000001B -:10C6E000AAAAB2B200000000000000000000000092 -:10C6F000000000000000000000000000000000003A :10C700000000000000000000000000000000000029 :10C710000000000000000000000000000000000019 -:10C7200000000000000000000400040000000400FD -:10C73000040082000400840504008405000500094B -:10C7400004058408000800000005201000102003E4 -:10C75000200804102000840020102010041000097C -:10C760000400001088050000000000000000000028 +:10C720000000000000000000000000000000000009 +:10C7300000000000000000000000000000000000F9 +:10C7400000000000000000000000000000000000E9 +:10C7500000000000000000000000000800000000D1 +:10C7600000000008000000000000000000000000C1 :10C7700000000000000000000000000000000000B9 :10C7800000000000000000000000000000000000A9 :10C790000000000000000000000000000000000099 -:10C7A0000000000000000000000000000008000081 +:10C7A0000000000000000000000000000000000089 :10C7B0000000000000000000000000000000000079 :10C7C0000000000000000000000000000000000069 -:10C7D0000000050000000000000000000000000054 -:10C7E0000010000000000000000000000000000039 +:10C7D0000000000000000000000000000000000059 +:10C7E0000000000000000000000000000000000049 :10C7F0000000000000000000000000000000000039 :10C800000000000000000000000000000000000028 :10C810000000000000000000000000000000000018 -:10C8200000000000000000000000000000001000F8 +:10C820000000000000000000000000000000000008 :10C8300000000000000000000000000000000000F8 :10C8400000000000000000000000000000000000E8 :10C8500000000000000000000000000000000000D8 -:10C8600000000000000000030000000000000000C5 +:10C8600000000000000000000000000000000000C8 :10C8700000000000000000000000000000000000B8 :10C8800000000000000000000000000000000000A8 :10C890000000000000000000000000000000000098 :10C8A0000000000000000000000000000000000088 :10C8B0000000000000000000000000000000000078 -:10C8C00000000000000000000000000000840000E4 -:10C8D00000840008008400080040000020080008D0 -:10C8E0000000008400842008008405080000000087 +:10C8C0000000000000000000000000000000000068 +:10C8D0000000000000000000000000000000000058 +:10C8E000000000000400040004000200000000003A :10C8F0000000000000000000000000000000000038 :10C900000000000000000000000000000000000027 :10C910000000000000000000000000000000000017 -:10C920000000000000000000000000000000A00067 -:10C93000000020000000880000002000A00000008F -:10C940009000900000082000020090000041400884 -:10C9500020002002202100000021904190000021B1 -:10C96000901000210203004120032000021000006B +:10C920000000000000000000000000000000000007 +:10C9300000000000000000000000000000000000F7 +:10C9400000000000000000000000000000000000E7 +:10C9500000000000000000000000000000000000D7 +:10C9600000000000000000000000000000000000C7 :10C9700000000000000000000000000000000000B7 :10C9800000000000000000000000000000000000A7 :10C990000000000000000000000000000000000097 :10C9A0000000000000000000000000000000000087 -:10C9B00000000000000011000000001000000082D4 -:10C9C000000800002082008400104102008200C0A4 -:10C9D00000081184000800020000008208400008DE -:10C9E0002184118400080088090841840082118490 +:10C9B0000000000000000000000000000000000077 +:10C9C0000000000000000000000000000000000067 +:10C9D0000000000000080008000000000000000047 +:10C9E0000000000000000000000000000000000047 :10C9F0000000000000000000000000000000000037 :10CA00000000000000000000000000000000000026 :10CA10000000000000000000000000000000000016 :10CA20000000000000000000000000000000000006 :10CA300000000000000000000000000000000000F6 :10CA400000000000000000000000000000000000E6 -:10CA50000000000000004000000000004000000056 -:10CA600004000410000000008800000000004000E6 +:10CA500000000000000000000000000000000000D6 +:10CA600000000000000000000000000000000000C6 :10CA700000000000000000000000000000000000B6 :10CA800000000000000000000000000000000000A6 :10CA90000000000000000000000000000000000096 :10CAA0000000000000000000000000000000000086 -:10CAB0000000000004000000000000000000000072 -:10CAC0000400000000000000000000000000000062 -:10CAD00000000000000008000000008404000008BE -:10CAE00000000000000000C0030000000000030080 -:10CAF000088220000000000000000000000000008C +:10CAB0000000000000000000000000000000000076 +:10CAC0000000000000000000000000000200020062 +:10CAD0000200020000000000000000000000000052 +:10CAE000040004000000000000000000000002003C +:10CAF0000200000000000000000000000000000034 :10CB00000000000000000000000000000000000025 :10CB10000000000000000000000000000000000015 :10CB20000000000000000000000000000000000005 -:10CB300000000000000000000000000000080000ED -:10CB40000000000000000000000090100000000045 -:10CB500000210000000000000008000800000000A4 -:10CB600000000002000000410000A00000000000E2 -:10CB700000000008000000000000000000000000AD +:10CB300000000000000000000000000000000000F5 +:10CB400000000000000000000000000000000000E5 +:10CB500000000000000000000000000000000000D5 +:10CB600000000000000000000000000000000000C5 +:10CB700000000000000000000000000000000000B5 :10CB800000000000000000000000000000000000A5 :10CB90000000000000000000000000000000000095 :10CBA0000000000000000000000000000000000085 -:10CBB000000000000000000000080000001020A09D -:10CBC00000080008000800A000000008000200049F -:10CBD0000008200820A0118820401108118420821C -:10CBE000000800840008204020000288200200087D -:10CBF00000A000A0008221C0000000000000000092 +:10CBB0000000000000000000000000000000000075 +:10CBC0000000000000000000000000000000000065 +:10CBD000000000000000000000000000000000084D +:10CBE0000000000000000000000000000000000045 +:10CBF0000000000000000000000000000000000035 :10CC00000000000000000000000000000000000024 :10CC10000000000000000000000000000000000014 :10CC20000000000000000000000000000000000004 :10CC300000000000000000000000000000000000F4 -:10CC4000880000000000000000000000000000005C -:10CC500000000000000000000003000000000000D1 -:10CC6000000020000008200400210000000800004F -:10CC700020000003002100008800000000000000E8 +:10CC400000000000000000000000000000000000E4 +:10CC500000000000000000000000000000000000D4 +:10CC600000000000000000000000000000000000C4 +:10CC700000000000000000000000000000000000B4 :10CC800000000000000000000000000000000000A4 :10CC90000000000000000000000000000000000094 :10CCA0000000000000000000000000000000000084 @@ -208128,7 +208128,7 @@ :10CCC0000000000000000000000000000000000064 :10CCD0000000000000000000000000000000000054 :10CCE0000000000000000000000000000000000044 -:10CCF0000000000000040000000000000000000030 +:10CCF00000000000004000000000000000000000F4 :10CD00000000000000000000000000000000000023 :10CD10000000000000000000000000000000000013 :10CD20000000000000000000000000000000000003 @@ -208230,92 +208230,92 @@ :10D3200000000000000000000000000000000000FD :10D3300000000000000000000000000000000000ED :10D3400000000000000000000000000000000000DD -:10D350000000000000000000000002000200840045 -:10D360000000040010000408000884000408821073 -:10D370000000880088080008040520081000040048 -:10D380008409880020051000100820058805201059 -:10D3900000108410001100000000000000000000D8 +:10D3500000000000000000000000000000000000CD +:10D3600000000000000000000000000000000000BD +:10D37000000000000000840084008400840000009D +:10D38000000000000000000000000000000000009D +:10D39000000000000000000000000000000000008D :10D3A000000000000000000000000000000000007D :10D3B000000000000000000000000000000000006D :10D3C000000000000000000000000000000000005D -:10D3D0000000000000000000000000080000000045 +:10D3D000000000000000000000000000000000004D :10D3E000000000000000000000000000000000003D -:10D3F0000000000000000000000800000000000025 -:10D400000000000800000000000800840004000084 -:10D41000000000000000009000000000000000007C +:10D3F000000000000000000000000000000000002D +:10D40000000000000000000000000000000000001C +:10D41000000000000000000000000000000000000C :10D4200000000000000000000000000000000000FC :10D4300000000000000000000000000000000000EC :10D4400000000000000000000000000000000000DC :10D4500000000000000000000000000000000000CC -:10D4600010000000000000000000000000000000AC +:10D4600000000000000000000000000000000000BC :10D4700000000000000000000000000000000000AC -:10D48000000000410000000000000008000008004B -:10D49000000000000000000800080000000000007C +:10D48000000000000000000000000000000000009C +:10D49000000000000000000000000000000000008C :10D4A000000000000000000000000000000000007C :10D4B000000000000000000000000000000000006C :10D4C000000000000000000000000000000000005C :10D4D000000000000000000000000000000000004C :10D4E000000000000000000000000000000000003C -:10D4F0000000000000000000000000000000000824 -:10D500000000000800000000000000000584008406 -:10D5100000040310040800000988099000000000BE +:10D4F000000000000000000000000000000000002C +:10D50000000000000000000000000000000000001B +:10D510000500050000000000000000000000000001 :10D5200000000000000000000000000000000000FB :10D5300000000000000000000000000000000000EB :10D5400000000000000000000000000000000000DB :10D5500000000000000000000000000000000000CB :10D5600000000000000000000000000000000000BB :10D5700000000000000000000000000000000000AB -:10D580000000000000000000000000000208000091 -:10D59000A010020000000041000800000010000080 +:10D58000000000000000000000000000000000009B +:10D59000000000000000000000000000000000008B :10D5A000000000000000000000000000000000007B :10D5B000000000000000000000000000000000006B :10D5C000000000000000000000000000000000005B :10D5D000000000000000000000000000000000004B -:10D5E00000000000000000000000001000840000A7 -:10D5F000000000080000000000000010000800C04B -:10D60000008400C00000008200A000A00008000804 -:10D610000008000000C000080000000800A0000092 +:10D5E000000000000000000000000000000000003B +:10D5F000000000000000000000000000000000002B +:10D60000000000000000000000000000000000001A +:10D61000000000000000000000000000000000000A :10D6200000000000000000000000000000000000FA :10D6300000000000000000000000000000000000EA :10D6400000000000000000000000000000000000DA :10D6500000000000000000000000000000000000CA -:10D66000000000000000000000000000000020009A -:10D67000A000000020000000000000080000A00042 -:10D6800000000010820000000800080004000800EC -:10D6900004000000000000000400C0008200080038 -:10D6A0000200000000000000000000000000000078 +:10D6600000000000000000000000000000000000BA +:10D6700000000000000000000000000000000000AA +:10D68000000000000000000000000000000000009A +:10D69000000000000000000000000000000000008A +:10D6A000000000000000000000000000000000007A :10D6B000000000000000000000000000000000006A :10D6C000000000000000000000000000000000005A :10D6D000000000000000000000000000000000004A :10D6E000000000000000000000000000000000003A :10D6F000000000000000000000000000000000002A :10D700000000000000000000000000000000000019 -:10D7100000000000000000000000000020000900E0 -:10D7200000002100000000000000000000000000D8 +:10D710000000000000000000000000000000090000 +:10D7200000000000000000000000000000000000F9 :10D7300000000000000000000000000000000000E9 :10D7400000000000000000000000000000000000D9 :10D7500000000000000000000000000000000000C9 :10D7600000000000000000000000000000000000B9 :10D7700000000000000000000000000000000000A9 :10D780000000000000000000000000000000000099 -:10D7900000000005000008008200000000000000FA -:10D7A00000100000C00000000000000000000000A9 +:10D790000000000000000000000000000000000089 +:10D7A0000000000000000000000000000000000079 :10D7B0000000000000000000000000000000000069 :10D7C0000000000000000000000000000000000059 :10D7D0000000000000000000000000000000000049 -:10D7E0000000000000000000000000000000000831 -:10D7F00000000000000021000000000800080000F8 -:10D8000000100000001000A0000000C00010000088 -:10D810000000000000100004001000A0000800003C -:10D8200000000000000011C0000000000000000027 +:10D7E0000000000000000000000000000000000039 +:10D7F0000000000000000000000000000000000029 +:10D800000000000000000000000000000000000018 +:10D810000000000000000000000000000000000008 +:10D8200000000000000000000000000000000000F8 :10D8300000000000000000000000000000000000E8 :10D8400000000000000000000000000000000000D8 :10D8500000000000000000000000000000000000C8 :10D8600000000000000000000000000000000000B8 -:10D870002000000000000000000000000000041074 +:10D8700000000000000000000000000000000000A8 :10D880000000000000000000000000000000000098 -:10D89000000000082000000000000000000000035D -:10D8A00008008200000002000800000000000000E4 +:10D890000000000000000000000000000000000088 +:10D8A0000000000000000000000000000000000078 :10D8B0000000000000000000000000000000000068 :10D8C0000000000000000000000000000000000058 :10D8D0000000000000000000000000000000000048 @@ -208323,7 +208323,7 @@ :10D8F0000000000000000000000000000000000028 :10D900000000000000000000000000000000000017 :10D910000000000000000000000000000000000007 -:10D9200000000000000000000000200000000000D7 +:10D9200000000000000000000000000000000000F7 :10D9300000000000000000000000000000000000E7 :10D9400000000000000000000000000000000000D7 :10D9500000000000000000000000000000000000C7 @@ -210166,10 +210166,10 @@ :104C10000000000000000000000000000000000094 :104C20000000000000000000000000000000000084 :104C30000000000000000000000000000000000074 -:104C400000009000000000000000000000000000D4 -:104C50004000000000000000000000000000020012 -:104C600000002000400040004000C000080000009C -:104C700040000000000000000000000000000000F4 +:104C40000000000000000000000000000000000064 +:104C50000000000000000000000000000000000054 +:104C60000000000000000000000000000000000044 +:104C70000000000000000000000000000000000034 :104C80000000000000000000000000000000000024 :104C90000000000000000000000000000000000014 :104CA0000000000000000000000000000000000004 @@ -210177,31 +210177,31 @@ :104CC00000000000000000000000000000000000E4 :104CD00000000000000000000000000000000000D4 :104CE00000000000000000000000000000000000C4 -:104CF0004000200000000000000000000000000054 +:104CF00000000000000000000000000000000000B4 :104D000000000000000000000000000000000000A3 :104D10000000000000000000000000000000000093 :104D20000000000000000000000000000000000083 :104D30000000000000000000000000000000000073 -:104D4000000000000800000000000000000000005B -:104D5000000800080000000000000000000000083B -:104D6000000400000005000400030005000000002E +:104D40000000000000000000000000000000000063 +:104D50000000000000000000000000000000000053 +:104D60000000000000000000000000000000000043 :104D70000000000000000000000000000000000033 :104D80000000000000000000000000000000000023 :104D90000000000000000000000000000000000013 :104DA0000000000000000000000000000000000003 :104DB00000000000000000000000000000000000F3 :104DC00000000000000000000000000000000000E3 -:104DD00000001000000000000000000000000000C3 -:104DE000000800080084000000080004000400001F -:104DF0000008000800080082000000000000000019 +:104DD00000000000000000000000000000000000D3 +:104DE00000000000000000000000000000000000C3 +:104DF00000000000000000000000000000000000B3 :104E000000000000000000000000000000000000A2 :104E10000000000000000000000000000000000092 :104E20000000000000000000000000000000000082 :104E30000000000000000000000000000000000072 :104E40000000000000000000000000000000000062 -:104E50000000000400020008000000000000000044 -:104E60000000000000000008000000000000000832 -:104E70000000000000000021001100000000000000 +:104E50000000000000000000000000000000000052 +:104E60000000000000000000000000000000000042 +:104E70000000000000000000000000000000000032 :104E80000000000000000000000000000000000022 :104E90000000000000000000000000000000000012 :104EA0000000000000000000000000000000000002 @@ -210214,26 +210214,26 @@ :104F10000000000000000000000000000000000091 :104F20000000000000000000000000000000000081 :104F30000000000000000000000000000000000071 -:104F4000000000050000000000000021000000003B -:104F50000000000000000000000000000008000049 -:104F60000000000000000000000000080000000039 +:104F40000000000000000000000000000000000061 +:104F50000000000000000000000000000000000051 +:104F60000000000000000000000000000000000041 :104F70000000000000000000000000000000000031 :104F80000000000000000000000000000000000021 :104F90000000000000000000000000000000000011 :104FA0000000000000000000000000000000000001 :104FB00000000000000000000000000000000000F1 -:104FC00000000000000000000008000805000000CC -:104FD00000000008000800000008000800A000828F -:104FE000000000080010000800820000000000001F -:104FF00000000000100000A00000000000000008F9 +:104FC00000000000000000000000000000000000E1 +:104FD00000000000000000000000000000000000D1 +:104FE00000000000000000000000000000000000C1 +:104FF00000000000000000000000000000000000B1 :1050000000000000000000000000000000000000A0 :105010000000000000000000000000000000000090 :105020000000000000000000000000000000000080 :105030000000000000000000000000000000000070 :105040000000000000000000000000000000000060 :105050000000000000000000000000000000000050 -:10506000000000000000002100000000000000001F -:105070000000000000000004000800000000000024 +:105060000000000000000000000000000000000040 +:105070000000000000000000000000000000000030 :105080000000000000000000000000000000000020 :105090000000000000000000000000000000000010 :1050A0000000000000000000000000000000000000 @@ -210247,18 +210247,18 @@ :10512000000000000000000000000000000000007F :10513000000000000000000000000000000000006F :10514000000000000000000000000000000000005F -:105150000000000800000000000000000000000047 +:10515000000000000000000000000000000000004F :10516000000000000000000000000000000000003F -:105170000000000800000000000000000000000027 +:10517000000000000000000000000000000000002F :10518000000000000000000000000000000000001F :10519000000000000000000000000000000000000F :1051A00000000000000000000000000000000000FF :1051B00000000000000000000000000000000000EF :1051C00000000000000000000000000000000000DF -:1051D00000A000A00008000000080000000000007F -:1051E0000000000000080000000000000084000033 -:1051F0000008000000000082000000000000000025 -:10520000000000000000001000000000000000008E +:1051D00000000000000000000000000000000000CF +:1051E00000000000000000000000000000000000BF +:1051F00000000000000000000000000000000000AF +:10520000000000000000000000000000000000009E :10521000000000000000000000000000000000008E :10522000000000000000000000000000000000007E :10523000000000000000000000000000000000006E @@ -210416,433 +210416,433 @@ :105BB00000000000000000000000000000000000E5 :105BC00000000000000000000000000000000000D5 :105BD00000000000000000000000000000000000C5 -:105BE00000000000000000000000000000000002B3 -:105BF00002000000000000000000000000000000A3 -:105C0000200004002000000000000400000020200C -:105C1000400004000000400002000400880008006A -:105C2000A00020002004890088002100000020003E +:105BE00000000000000000000000000000000000B5 +:105BF00000000000000000000000000000000000A5 +:105C00000000000000000000000000000000000094 +:105C10000000000000000000000000000000000084 +:105C20000000000000000000000000000000000074 :105C30000000000000000000000000000000000064 :105C40000000000000000000000000000000000054 :105C50000000000000000000000000000000000044 :105C60000000000000000000000000000000000034 -:105C700000008000000000000000000000000000A4 -:105C80000000800080008000000000008000000014 -:105C90008001800080000000800080008000000003 -:105CA0008000000000000000200000002000000034 -:105CB0008000000000000000000000000000000064 +:105C70000000000000000000000000000000000024 +:105C80000000000000000000000000000000000014 +:105C90000000000000000000000000000000000004 +:105CA00000000000000000000000000000000000F4 +:105CB00000000000000000000000000000000000E4 :105CC00000000000000000000000000000000000D4 :105CD00000000000000000000000000000000000C4 :105CE00000000000000000000000000000000000B4 :105CF00000000000000000000000000000000000A4 -:105D00000000010000000000000001000000000091 -:105D10000000200000000000000800000000000853 -:105D20000000000400001105000400040000000051 -:105D30000003000000000000000000000000000060 +:105D00000000000000000000000000000000000093 +:105D10000000000000000000000000000000000083 +:105D20000000000000000000000000000000000073 +:105D30000000000000000000000000000000000063 :105D40000000000000000000000000000000000053 :105D50000000000000000000000000000000000043 :105D60000000000000000000000000000000000033 :105D70000000000000000000000000000000000023 -:105D8000000000000400000000000000040000000B -:105D90000000000089000000000000000000000476 -:105DA00000080008000000080400000800050004C6 -:105DB000000000040084000000000000000000005B +:105D80000000000000000000000000000000000013 +:105D90000000000000000000000000000000000003 +:105DA00000000000000000000000000000000000F3 +:105DB00000000000000000000000000000000000E3 :105DC00000000000000000000000000000000000D3 :105DD00000000000000000000000000000000000C3 :105DE00000000000000000000000000000000000B3 :105DF00000000000000000000000000000000000A3 -:105E000000000000000000000000000200210080EF -:105E100000000000000000080008008200080000E8 -:105E200000040021000300080000004000000008FA -:105E30000021000800080009000000000000000028 +:105E00000000000000000000000000000000000092 +:105E10000000000000000000000000000000000082 +:105E20000000000000000000000000000000000072 +:105E30000000000000000000000000000000000062 :105E40000000000000000000000000000000000052 :105E50000000000000000000000000000000000042 :105E60000000000000000000000000000000000032 -:105E70000000000000000000000000000000200002 -:105E80000000000000000000000000000001000011 -:105E900000020000000000000000000000200000E0 -:105EA00000000000000000000000030000000000EF -:105EB0000000000000A0000008000000000000003A +:105E70000000000000000000000000000000000022 +:105E80000000000000000000000000000000000012 +:105E90000000000000000000000000000000000002 +:105EA00000000000000000000000000000000000F2 +:105EB00000000000000000000000000000000000E2 :105EC00000000000000000000000000000000000D2 :105ED00000000000000000000000000000000000C2 :105EE00000000000000000000000000000000000B2 :105EF00000000000000000000000000000000000A2 -:105F00000000000000000000000040000000000051 -:105F10000000000000000004C00000000800002194 -:105F20000000080040000000000000000800000021 -:105F3000C0000000010000000000000000000000A0 +:105F00000000000000000000000000000000000091 +:105F10000000000000000000000000000000000081 +:105F20000000000000000000000000000000000071 +:105F30000000000000000000000000000000000061 :105F40000000000000000000000000000000000051 :105F50000000000000000000000000000000000041 :105F60000000000000000000000000000000000031 :105F70000000000000000000000000000000000021 -:105F80000000000000000000000800828000000007 -:105F900000820000000800000001000000900000E6 -:105FA0000008000080008000009000A000000000B9 -:105FB00000A00000000008A000A0000800000000F1 +:105F80000000000000000000000000000000000011 +:105F90000000000000000000000000000000000001 +:105FA00000000000000000000000000000000000F1 +:105FB00000000000000000000000000000000000E1 :105FC00000000000000000000000000000000000D1 :105FD00000000000000000000000000000000000C1 :105FE00000000000000000000000000000000000B1 :105FF00000000000000000000000000000000000A1 -:1060000000000000000000009008400000080000B0 -:1060100000000021884120400008002000200221CB -:10602000000200024000000800030000020040409F -:106030000000002100020202000300000000000036 +:106000000000000000000000000000000000000090 +:106010000000000000000000000000000000000080 +:106020000000000000000000000000000000000070 +:106030000000000000000000000000000000000060 :106040000000000000000000000000000000000050 :106050000000000000000000000000000000000040 :106060000000000000000000000000000000000030 :106070000000000000000000000000000000000020 :106080000000000000000000000000000000000010 -:106090000000000000000000800000000000000080 +:106090000000000000000000000000000000000000 :1060A00000000000000000000000000000000000F0 -:1060B000800000000000000100000000000000005F +:1060B00000000000000000000000000000000000E0 :1060C00000000000000000000000000000000000D0 :1060D00000000000000000000000000000000000C0 :1060E00000000000000000000000000000000000B0 :1060F00000000000000000000000000000000000A0 -:106100000000000000000000000000000005000882 -:1061100000000000000800800008000000000000EF -:106120000008000800410000000000000008000511 -:1061300000210041002100A1000000000008002112 -:106140000000000800000000000000000000000047 +:10610000000000000000000000000000000000008F +:10611000000000000000000000000000000000007F +:10612000000000000000000000000000000000006F +:10613000000000000000000000000000000000005F +:10614000000000000000000000000000000000004F :10615000000000000000000000000000000000003F :10616000000000000000000000000000000000002F :10617000000000000000000000000000000000001F -:1061800000000000000000C000000000000000004F -:106190000000000009820000000400000000000070 -:1061A00000000082000800840000000009000000D8 -:1061B0000000008200000000000400000000000059 +:10618000000000000000000000000000000000000F +:1061900000000000000000000000000000000000FF +:1061A00000000000000000000000000000000000EF +:1061B00000000000000000000000000000000000DF :1061C00000000000000000000000000000000000CF :1061D00000000000000000000000000000000000BF :1061E00000000000000000000000000000000000AF :1061F000000000000000000000000000000000009F -:106200000000000000000000C00000000000880046 -:10621000C00000008400080000040182828890040D -:1062200000A000820202909000A000080010000868 -:10623000C00801900288001100400011408800044D -:10624000000000002001000000000000000000002D +:10620000000000000000000000000000000000008E +:10621000000000000000000000000000000000007E +:10622000000000000000000000000000000000006E +:10623000000000000000000000000000000000005E +:10624000000000000000000000000000000000004E :10625000000000000000000000000000000000003E :10626000000000000000000000000000000000002E :10627000000000000000000000000000000000001E -:10628000000000000000000000008000000000008E -:1062900000008000040080000000030040800480B3 -:1062A00080000082418000008011008908910089EF -:1062B00000A0008241410082009011880208808085 -:1062C0000000000011000008002000000000000095 +:10628000000000000000000000000000000000000E +:1062900000000000000000000000000000000000FE +:1062A00000000000000000000000000000000000EE +:1062B00000000000000000000000000000000000DE +:1062C00000000000000000000000000000000000CE :1062D00000000000000000000000000000000000BE :1062E00000000000000000000000000000000000AE :1062F000000000000000000000000000000000009E -:10630000000000000000000000000000800080008D -:10631000000000000000800080210080801000113B -:10632000000880808080801180111104800000119D -:1063300080080000000000110010000000000011A3 -:10634000080220090900002000822011000000003E +:10630000000000000000000000000000000000008D +:10631000000000000000000000000000000000007D +:10632000000000000000000000000000000000006D +:10633000000000000000000000000000000000005D +:10634000000000000000000000000000000000004D :10635000000000000000000000000000000000003D :10636000000000000000000000000000000000002D :10637000000000000000000000000000000000001D -:106380000000000000000000000000000000080005 -:10639000080002000200100040000801049088017B -:1063A0000201100008088840400184001004080021 -:1063B0002001081000001000020100000200008807 -:1063C000000101000000009000000010000000002B +:10638000000000000000000000000000000000000D +:1063900000000000000000000000000000000000FD +:1063A00000000000000000000000000000000000ED +:1063B00000000000000000000000000000000000DD +:1063C00000000000000000000000000000000000CD :1063D00000000000000000000000000000000000BD :1063E00000000000000000000000000000000000AD :1063F000000000000000000000000000000000009D :10640000000000000000000000000000000000008C -:10641000008800100082011000000001001100003F -:1064200088009002101082011000030004111088EF -:1064300010000000000002001002000000028802AC -:10644000020001000000110000000100A000000097 +:10641000000000000000000000000000000000007C +:10642000000000000000000000000000000000006C +:10643000000000000000000000000000000000005C +:10644000000000000000000000000000000000004C :10645000000000000000000000000000000000003C :10646000000000000000000000000000000000002C :10647000000000000000000000000000000000001C :10648000000000000000000000000000000000000C -:10649000000000000080008021800011004000C04A -:1064A000021000410004008391108009114100A1F5 -:1064B0000004000900020009000080020000001032 -:1064C000000080031111000211020010114180111F -:1064D00000090000000000000000000000000000B3 +:1064900000000000000000000000000000000000FC +:1064A00000000000000000000000000000000000EC +:1064B00000000000000000000000000000000000DC +:1064C00000000000000000000000000000000000CC +:1064D00000000000000000000000000000000000BC :1064E00000000000000000000000000000000000AC :1064F000000000000000000000000000000000009C :10650000000000000000000000000000000000008B -:1065100000000000000000100000000000080080E3 -:1065200000000000110804900080000021210421D7 -:106530008200031100008000000000000000000045 -:106540000000000009A102004100100004218300A6 -:106550004100901100000000000000000000000059 +:10651000000000000000000000000000000000007B +:10652000000000000000000000000000000000006B +:10653000000000000000000000000000000000005B +:10654000000000000000000000000000000000004B +:10655000000000000000000000000000000000003B :10656000000000000000000000000000000000002B :10657000000000000000000000000000000000001B :10658000000000000000000000000000000000000B -:10659000000000000000000000040088000000006F -:1065A0000082001000000001022020080000881175 -:1065B0000008100201010000022000000000880015 -:1065C00000880000900000C1880008000000C001A1 -:1065D0000800820010010000000000000000000020 +:1065900000000000000000000000000000000000FB +:1065A00000000000000000000000000000000000EB +:1065B00000000000000000000000000000000000DB +:1065C00000000000000000000000000000000000CB +:1065D00000000000000000000000000000000000BB :1065E00000000000000000000000000000000000AB :1065F000000000000000000000000000000000009B :10660000000000000000000000000000000000008A -:1066100000000000000000000000000000008400F6 -:106620000081000007008800004100E00700000032 -:10663000600600E0070000000011000007000000F5 -:106640000006000007004100484200E00700840007 -:10665000820000E0000000000000000000000000D8 +:10661000000000000000000000000000000000007A +:10662000000000000000000000000000000000006A +:10663000000000000000000000000000000000005A +:10664000000000000000000000000000000000004A +:10665000000000000000000000000000000000003A :10666000000000000000000000000000000000002A :10667000000000000000000000000000000000001A :10668000000000000000000000000000000000000A -:10669000000000000000000000000000000000FFFB -:1066A000C3FF00000000FFAAFFAAF0FFF0FFF0FF09 -:1066B000F0FFF0F0FFFF00FFFFFFAAFFAAFF0000BE -:1066C00000003C3CFFFFAA82AABE0F000F000000A2 -:1066D0000000BEBE30F3000000000000000000001B +:1066900000000000000000000000000000000000FA +:1066A00000000000000000000000000000000000EA +:1066B00000000000000000000000000000000000DA +:1066C00000000000000000000000000000000000CA +:1066D00000000000000000000000000000000000BA :1066E00000000000000000000000000000000000AA :1066F000000000000000000000000000000000009A :106700000000000000000000000000000000000089 :106710000000000000000000000000000000000079 -:10672000AAFF0AFF0000000000AA00AAF000F00083 -:10673000000F000F00000F0F0000FF000055005574 -:10674000000000003C3C0000AA82AABE0FFF0FFF21 -:1067500000000000828230F3000000000000000012 +:106720000000000000000000000000000000000069 +:106730000000000000000000000000000000000059 +:106740000000000000000000000000000000000049 +:106750000000000000000000000000000000000039 :106760000000000000000000000000000000000029 :106770000000000000000000000000000000000019 :106780000000000000000000000000000000000009 :1067900000000000000000000000000000000000F9 -:1067A0000000FF00FFFF000000003F2B17035F1EEB -:1067B0000A1E0F3C7D3CF5FF050CFF35003535FF0B -:1067C0003500170F170F3F3F03035C5C5555BE1490 -:1067D000F0F00000000000000000000000000000D9 +:1067A00000000000000000000000000000000000E9 +:1067B00000000000000000000000000000000000D9 +:1067C00000000000000000000000000000000000C9 +:1067D00000000000000000000000000000000000B9 :1067E00000000000000000000000000000000000A9 :1067F0000000000000000000000000000000000099 :106800000000000000000000000000000000000088 :106810000000000000000000000000000000000078 -:1068200000000000A3A3A3A3000000001F0B1F0B88 -:106830005F0F0A0F0F3C283CF5F305003C3C3C3C45 -:10684000F5FF0500170F170F1F0B1F0B5C5C55554D -:10685000B4B4F0F0000000000000000000000000F0 +:106820000000000000000000000000000000000068 +:106830000000000000000000000000000000000058 +:106840000000000000000000000000000000000048 +:106850000000000000000000000000000000000038 :106860000000000000000000000000000000000028 :106870000000000000000000000000000000000018 :106880000000000000000000000000000000000008 :1068900000000000000000000000000000000000F8 -:1068A0000000000000000010000000610026000D44 -:1068B000000080610027001D000000610024801995 -:1068C000000000610026000D000080610026001D10 -:1068D000000080610024800900000061000480093C +:1068A00000000000000000000000000000000000E8 +:1068B00000000000000000000000000000000000D8 +:1068C00000000000000000000000000000000000C8 +:1068D00000000000000000000000000000000000B8 :1068E00000000000000000000000000000000000A8 :1068F0000000000000000000000000000000000098 :106900000000000000000000000000000000000087 :106910000000000000000000000000000000000077 :106920000000000000000000000000000000000067 -:10693000FFFFFFFFFF00FFFFAFE5A5E53F3F303062 -:106940005D08FDA800000000FFF3FFF30000000059 -:10695000D7FFD7FFFDF0C1F0010DF1FDFF1E001EB6 -:10696000F000F0FF00000000000000000000000048 +:106930000000000000000000000000000000000057 +:106940000000000000000000000000000000000047 +:106950000000000000000000000000000000000037 +:106960000000000000000000000000000000000027 :106970000000000000000000000000000000000017 :106980000000000000000000000000000000000007 :1069900000000000000000000000000000000000F7 :1069A00000000000000000000000000000000000E7 -:1069B0000000FEFFFFFFFF00FFFFFFEFF5EF3D3898 -:1069C0003D385F00FFA000000000003000300000F4 -:1069D000000000280028BCF080F0555555550F0FD9 -:1069E0000F0FF078F07800000000000000000000B9 +:1069B00000000000000000000000000000000000D7 +:1069C00000000000000000000000000000000000C7 +:1069D00000000000000000000000000000000000B7 +:1069E00000000000000000000000000000000000A7 :1069F0000000000000000000000000000000000097 :106A00000000000000000000000000000000000086 :106A10000000000000000000000000000000000076 :106A20000000000000000000000000000000000066 :106A30000000000000000000000000000000000056 -:106A4000D7D71414000055553F303C3C00000000DF -:106A50003F303C3C00000000AA00AAFFFF000000FD -:106A6000171717173C3CAAAA0000000000000000FE +:106A40000000000000000000000000000000000046 +:106A50000000000000000000000000000000000036 +:106A60000000000000000000000000000000000026 :106A70000000000000000000000000000000000016 :106A80000000000000000000000000000000000006 :106A900000000000000000000000000000000000F6 :106AA00000000000000000000000000000000000E6 :106AB00000000000000000000000000000000000D6 -:106AC0000000D7D71414FFFF55553F303C3C000061 -:106AD00000003F303C3C00000000AA00AAFFFFFF7E -:106AE00000FF171717173C3CAAAA0000000000007F +:106AC00000000000000000000000000000000000C6 +:106AD00000000000000000000000000000000000B6 +:106AE00000000000000000000000000000000000A6 :106AF0000000000000000000000000000000000096 :106B00000000000000000000000000000000000085 :106B10000000000000000000000000000000000075 -:106B2000000000000000000004000003000000005E -:106B30000800000000000000080001000000000044 -:106B40000000200000002000000020009000010054 -:106B500020008900100000000000890000000400EF -:106B6000C000040040002005880020000000000054 +:106B20000000000000000000000000000000000065 +:106B30000000000000000000000000000000000055 +:106B40000000000000000000000000000000000045 +:106B50000000000000000000000000000000000035 +:106B60000000000000000000000000000000000025 :106B70000000000000000000000000000000000015 :106B80000000000000000000000000000000000005 :106B900000000000000000000000000000000000F5 -:106BA0000000000000000000000080000000000065 -:106BB0000000800000000000000080004000000095 -:106BC00000000000800000008000000000000000C5 -:106BD0000400090040000000000020000400400004 -:106BE00080000000800000000000000000000000A5 +:106BA00000000000000000000000000000000000E5 +:106BB00000000000000000000000000000000000D5 +:106BC00000000000000000000000000000000000C5 +:106BD00000000000000000000000000000000000B5 +:106BE00000000000000000000000000000000000A5 :106BF0000000000000000000000000000000000095 :106C00000000000000000000000000000000000084 -:106C10000000000000000100000000000000000073 +:106C10000000000000000000000000000000000074 :106C20000000000000000000000000000000000064 :106C30000000000000000000000000000000000054 :106C40000000000000000000000000000000000044 -:106C50000100000001030900000000040000000022 -:106C60000000000000000000000390100008000079 +:106C50000000000000000000000000000000000034 +:106C60000000000000000000000000000000000024 :106C70000000000000000000000000000000000014 :106C80000000000000000000000000000000000004 -:106C900000000000000000000800000000000000EC +:106C900000000000000000000000000000000000F4 :106CA00000000000000000000000000000000000E4 -:106CB0000000000000880000000000000008000044 -:106CC00000080000000000000000000400000004B4 -:106CD0000000040400080400840000080008000804 -:106CE0000008000800820000000800880088008278 -:106CF0000004000000000000000000000000000090 +:106CB00000000000000000000000000000000000D4 +:106CC00000000000000000000000000000000000C4 +:106CD00000000000000000000000000000000000B4 +:106CE00000000000000000000000000000000000A4 +:106CF0000000000000000000000000000000000094 :106D00000000000000000000000000000000000083 :106D10000000000000000000000000000000000073 -:106D2000000800000000000000000021000000003A -:106D3000000000000000000000000000000800113A -:106D4000000000000008000800400088001021003A -:106D500000210003000000000008000500200000E2 -:106D600000210008000800000011040500000000D8 -:106D700000210000000000000000000000000000F2 +:106D20000000000000000000000000000000000063 +:106D30000000000000000000000000000000000053 +:106D40000000000000000000000000000000000043 +:106D50000000000000000000000000000000000033 +:106D60000000000000000000000000000000000023 +:106D70000000000000000000000000000000000013 :106D80000000000000000000000000000000000003 :106D900000000000000000000000000000000000F3 :106DA00000000000000000000000000000000000E3 :106DB00000000000000000000000000000000000D3 -:106DC0000008000009020000000000840004000028 -:106DD000A0020520080000880000001000080088BC -:106DE000008800004002000002082040A0000008C7 -:106DF0000000000000C000000000000000000000D3 +:106DC00000000000000000000000000000000000C3 +:106DD00000000000000000000000000000000000B3 +:106DE00000000000000000000000000000000000A3 +:106DF0000000000000000000000000000000000093 :106E00000000000000000000000000000000000082 -:106E10000000000000210000000000000000000051 +:106E10000000000000000000000000000000000072 :106E20000000000000000000000000000000000062 :106E30000000000000000000000000000000000052 -:106E4000000000000000000040000000880020005A -:106E50000000000000002000000000000000000012 -:106E600000000000C004000000000000000040809E -:106E700010410000100000000000000000000000B1 +:106E40000000000000000000000000000000000042 +:106E50000000000000000000000000000000000032 +:106E60000000000000000000000000000000000022 +:106E70000000000000000000000000000000000012 :106E80000000000000000000000000000000000002 -:106E900000000000000000000000000800000000EA -:106EA00000000008000000080000000000000000D2 -:106EB00000080000000000000000000000000000CA -:106EC000000000900010000000088000000000009A -:106ED00080000908000800A08000000000000000F9 -:106EE0000000000004C000000000000000000900D5 -:106EF00080200000000000C0000000000000000032 +:106E900000000000000000000000000000000000F2 +:106EA00000000000000000000000000000000000E2 +:106EB00000000000000000000000000000000000D2 +:106EC00000000000000000000000000000000000C2 +:106ED00000000000000000000000000000000000B2 +:106EE00000000000000000000000000000000000A2 +:106EF0000000000000000000000000000000000092 :106F00000000000000000000000000000000000081 :106F10000000000000000000000000000000000071 -:106F20000000000000000000000000000040000021 -:106F3000000200000000000000000000000800083F -:106F400004410000000000000008000000080000EC -:106F500000030008000800400008000800080002C4 -:106F60000002A021000000400000000000000020FE -:106F700000000008004000000011A04100000000D7 +:106F20000000000000000000000000000000000061 +:106F30000000000000000000000000000000000051 +:106F40000000000000000000000000000000000041 +:106F50000000000000000000000000000000000031 +:106F60000000000000000000000000000000000021 +:106F70000000000000000000000000000000000011 :106F80000000000000000000000000000000000001 :106F900000000000000000000000000000000000F1 :106FA00000000000000000000000000000000000E1 -:106FB00000000000000000000000000000000002CF -:106FC0000004000000840000000000000000090030 -:106FD000400820000900008400101100000000009B -:106FE00000000000000002880088048200200000E9 -:106FF0000001000204000040000000000910000031 +:106FB00000000000000000000000000000000000D1 +:106FC00000000000000000000000000000000000C1 +:106FD00000000000000000000000000000000000B1 +:106FE00000000000000000000000000000000000A1 +:106FF0000000000000000000000000000000000091 :107000000000000000000000000000000000000080 :107010000000000000000000000000000000000070 :107020000000000000000000000000000000000060 -:107030000000000500000000000000080000000043 -:107040000000002100000100000000009010000876 -:1070500000030000000000A1001101000003041063 -:1070600000100010000000000003002000050008D0 -:10707000000000050021080000210008840000082D +:107030000000000000000000000000000000000050 +:107040000000000000000000000000000000000040 +:107050000000000000000000000000000000000030 +:107060000000000000000000000000000000000020 +:107070000000000000000000000000000000000010 :107080000000000000000000000000000000000000 :1070900000000000000000000000000000000000F0 -:1070A00000000008000000000000000000000000D8 +:1070A00000000000000000000000000000000000E0 :1070B00000000000000000000000000000000000D0 -:1070C0000000000000000000408200900008000066 -:1070D0000000000000000000001000002000000080 -:1070E0008000000000000000000000000000000020 +:1070C00000000000000000000000000000000000C0 +:1070D00000000000000000000000000000000000B0 +:1070E00000000000000000000000000000000000A0 :1070F0000000000000000000000000000000000090 :10710000000000000000000000000000000000007F :10711000000000000000000000000000000000006F :10712000000000000000000000000000000000005F :10713000000000000000000000000000000000004F -:1071400090000002100200C000900802000200102F -:1071500000100810000000010800000003012100D9 -:10716000400090000002000404081090000000009D -:10717000000000000108102020829088000000001C +:10714000000000000000000000000000000000003F +:10715000000000000000000000000000000000002F +:10716000000000000000000000000000000000001F +:10717000000000000000000000000000000000000F :1071800000000000000000000000000000000000FF :1071900000000000000000000000000000000000EF :1071A00000000000000000000000000000000000DF :1071B00000000000000000000000000000000000CF -:1071C00000008000000000000000000080000000BF -:1071D00010800080800010002108802000044010F2 -:1071E00088008020800000000800008080000000EF -:1071F00000000000000021808080008080000000EE +:1071C00000000000000000000000000000000000BF +:1071D00000000000000000000000000000000000AF +:1071E000000000000000000000000000000000009F +:1071F000000000000000000000000000000000008F :10720000000000000000000000000000000000007E :10721000000000000000000000000000000000006E :10722000000000000000000000000000000000005E -:10723000800080008000000000000000000080004E -:1072400080008002800000000000000000000000BC -:10725000000000000000000000008000800809001D -:10726000908080008010800300008000800000007B -:107270000000000000000000000000118084800079 +:10723000000000000000000000000000000000004E +:10724000000000000000000000000000000000003E +:10725000000000000000000000000000000000002E +:10726000000000000000000000000000000000001E +:10727000000000000000000000000000000000000E :1072800000000000000000000000000000000000FE :1072900000000000000000000000000000000000EE :1072A00000000000000000000000000000000000DE -:1072B0009000100008001000000000000000000016 -:1072C000880008001000100000000000000084008A -:1072D000020090000000A000020002004000100028 -:1072E0000000894010001000100102000820A000DA -:1072F00002080000000000000088C0000201A0C0D9 -:1073000082000000000000000000000000000000FB +:1072B00000000000000000000000000000000000CE +:1072C00000000000000000000000000000000000BE +:1072D00000000000000000000000000000000000AE +:1072E000000000000000000000000000000000009E +:1072F000000000000000000000000000000000008E +:10730000000000000000000000000000000000007D :10731000000000000000000000000000000000006D :10732000000000000000000000000000000000005D :10733000000000000000000000000000000000004D -:10734000000000000000008800100000900000888D -:1073500000088888080200A0008510A00000000036 -:10736000A000010000000100A00000C1094000A130 -:1073700020018810000000000000000088000011BB -:1073800000101000000000000000000000000000DD +:10734000000000000000000000000000000000003D +:10735000000000000000000000000000000000002D +:10736000000000000000000000000000000000001D +:10737000000000000000000000000000000000000D +:1073800000000000000000000000000000000000FD :1073900000000000000000000000000000000000ED :1073A00000000000000000000000000000000000DD :1073B00000000000000000000000000000000000CD -:1073C000000000000000000000000080000000003D -:1073D00000A0008000908080008400058482000965 -:1073E0000841850211110041111080101004900015 -:1073F00000C00008000000000000000000000004C1 -:107400000088000480000000000000000000000070 +:1073C00000000000000000000000000000000000BD +:1073D00000000000000000000000000000000000AD +:1073E000000000000000000000000000000000009D +:1073F000000000000000000000000000000000008D +:10740000000000000000000000000000000000007C :10741000000000000000000000000000000000006C :10742000000000000000000000000000000000005C -:1074300000000000000000000000000080000000CC +:10743000000000000000000000000000000000004C :10744000000000000000000000000000000000003C :10745000000000000000000000000000000000002C -:10746000008800000000001021C0040011800811F5 -:10747000001000200080000000000000000000005C -:10748000000000100080000000000000000000006C +:10746000000000000000000000000000000000001C +:10747000000000000000000000000000000000000C +:1074800000000000000000000000000000000000FC :1074900000000000000000000000000000000000EC :1074A00000000000000000000000000000000000DC -:1074B0000000000000000000020088000088A0001A -:1074C000000000000000000000000010001000009C -:1074D000000000000010008800000000008800008C -:1074E000000000C000200000000101C100100040A9 -:1074F00001010000008900400000000000000000C1 -:1075000000000000000210820000000000000000E7 +:1074B00000000000000000000000000000000000CC +:1074C00000000000000000000000000000000000BC +:1074D00000000000000000000000000000000000AC +:1074E000000000000000000000000000000000009C +:1074F000000000000000000000000000000000008C +:10750000000000000000000000000000000000007B :10751000000000000000000000000000000000006B :10752000000000000000000000000000000000005B :10753000000000000000000000000000000000004B -:107540000000000000000000000000110000070023 +:10754000000000000000000000000000000000003B :10755000000000000000000000000000000000002B -:1075600000000000810000E000008400484200E0CC -:107570000700840000000000070000000042000037 -:10758000060000000011000007000082000000005B +:10756000000000000000000000000000000000001B +:10757000000000000000000000000000000000000B +:1075800000000000000000000000000000000000FB :1075900000000000000000000000000000000000EB :1075A00000000000000000000000000000000000DB -:1075B0000000000000000000000000003C0000008F +:1075B00000000000000000000000000000000000CB :1075C00000000000000000000000000000000000BB -:1075D000FFFFFF000000000000009999999900004A -:1075E0000000C3C3C3C3000000000000000000008F -:1075F00000000000999900000000FFFF000000005B -:10760000000000000000F6F6F6F6FFF0FFF00000C4 +:1075D00000000000000000000000000000000000AB +:1075E000000000000000000000000000000000009B +:1075F000000000000000000000000000000000008B +:10760000000000000000000000000000000000007A :10761000000000000000000000000000000000006A :10762000000000000000000000000000000000005A -:1076300000000000000000000000000000003C000E +:10763000000000000000000000000000000000004A :10764000000000000000000000000000000000003A -:1076500000000000FF000000000000000FFF00001D -:107660000000000000F0F0F000000000000000004A -:1076700000000000FFFF9999000000003F3F3F3FDE -:1076800000000000000000000606060600F000F002 +:10765000000000000000000000000000000000002A +:10766000000000000000000000000000000000001A +:10767000000000000000000000000000000000000A +:1076800000000000000000000000000000000000FA :1076900000000000000000000000000000000000EA :1076A00000000000000000000000000000000000DA :1076B00000000000000000000000000000000000CA @@ -210854,491 +210854,491 @@ :107710000000000000000000000000000000000069 :107720000000000000000000000000000000000059 :107730000000000000000000000000000000000049 -:107740000000000000000000000300000000000036 -:1077500000000000000018187E7E0000F300910079 -:1077600000FF66FFF0C0908000663C7E00000000D5 -:10777000FCBDFCBD0000000081E781E7F0C0908007 -:107780009B989390000000000000000020B02FBFE5 -:1077900024E70CCF00000000000000000000000003 +:107740000000000000000000000000000000000039 +:107750000000000000000000000000000000000029 +:107760000000000000000000000000000000000019 +:107770000000000000000000000000000000000009 +:1077800000000000000000000000000000000000F9 +:1077900000000000000000000000000000000000E9 :1077A00000000000000000000000000000000000D9 :1077B00000000000000000000000000000000000C9 -:1077C0000000000000000000300300030000000083 -:1077D0000000000000000000383E383E0000F3F3D7 -:1077E000919100006666FFC3998100663C7E0000AF -:1077F0000000FCBDFCBD00000000C3C38787FFC3C1 -:107800009981FFFCF7F4000000000000000000FF79 -:1078100000FF00FF0CCF000000000000000000008F +:1077C00000000000000000000000000000000000B9 +:1077D00000000000000000000000000000000000A9 +:1077E0000000000000000000000000000000000099 +:1077F0000000000000000000000000000000000089 +:107800000000000000000000000000000000000078 +:107810000000000000000000000000000000000068 :107820000000000000000000000000000000000058 :107830000000000000000000000000000000000048 :107840000000000000000000000000000000000038 -:1078500000000000000000000020001000000000F8 -:1078600000614006000D000100610006000D0000EF -:1078700000610006800900000061002480190000FA -:1078800005610A0E050D00A000000020000000A008 -:1078900000610026000D0000000000000000000054 +:107850000000000000000000000000000000000028 +:107860000000000000000000000000000000000018 +:107870000000000000000000000000000000000008 +:1078800000000000000000000000000000000000F8 +:1078900000000000000000000000000000000000E8 :1078A00000000000000000000000000000000000D8 :1078B00000000000000000000000000000000000C8 :1078C00000000000000000000000000000000000B8 :1078D00000000000000000000000000000000000A8 -:1078E0000000000000000F0F000000000000FFFF7C -:1078F000FFFF00000000407CC2FEFFAA55000C5CA8 -:10790000ACFC000000005FFF5FFF00000000000013 -:10791000000000000000AAB2AAB2000000000000AF +:1078E0000000000000000000000000000000000098 +:1078F0000000000000000000000000000000000088 +:107900000000000000000000000000000000000077 +:107910000000000000000000000000000000000067 :107920000000000000000000000000000000000057 :107930000000000000000000000000000000000047 :107940000000000000000000000000000000000037 :107950000000000000000000000000000000000027 -:1079600000000000000000000F0F000000000000F9 -:10797000FF000F0F00000000F0F0F0F0FEFE040426 -:107980001C1CBCBC0000000000A000A00000000007 -:107990000000000000000000AAB2AAB2000000002F +:107960000000000000000000000000000000000017 +:107970000000000000000000000000000000000007 +:1079800000000000000000000000000000000000F7 +:1079900000000000000000000000000000000000E7 :1079A00000000000000000000000000000000000D7 :1079B00000000000000000000000000000000000C7 :1079C00000000000000000000000000000000000B7 :1079D00000000000000000000000000000000000A7 :1079E0000000000000000000000000000000000097 -:1079F0000000000000001C141C14AAAAFFFF55552B -:107A00000F0FEBEBEBEB00000000000000000000AC +:1079F0000000000000000000000000000000000087 +:107A00000000000000000000000000000000000076 :107A10000000000000000000000000000000000066 :107A20000000000000000000000000000000000056 :107A30000000000000000000000000000000000046 :107A40000000000000000000000000000000000036 :107A50000000000000000000000000000000000026 :107A60000000000000000000000000000000000016 -:107A700000000000000000000C000C000000555544 -:107A800055550F0F2828282800000000000000008E +:107A70000000000000000000000000000000000006 +:107A800000000000000000000000000000000000F6 :107A900000000000000000000000000000000000E6 :107AA00000000000000000000000000000000000D6 :107AB00000000000000000000000000000000000C6 -:107AC00002000000000000000000000000000000B4 +:107AC00000000000000000000000000000000000B6 :107AD00000000000000000000000000000000000A6 -:107AE0002000000000000000000204000400040068 -:107AF00000000000040000000400000000008800F6 -:107B000088002000820088000400880020002000F7 -:107B100004108800200000020400080088002000F3 -:107B20002000201020022000201100000000000092 +:107AE0000000000000000000000000000000000096 +:107AF0000000000000000000000000000000000086 +:107B00000000000000000000000000000000000075 +:107B10000000000000000000000000000000000065 +:107B20000000000000000000000000000000000055 :107B30000000000000000000000000000000000045 -:107B400000008000000000000000000000000000B5 +:107B40000000000000000000000000000000000035 :107B50000000000000000000000000000000000025 -:107B60000000000000000000000000008000800015 -:107B70008000000000008000000080000000000085 -:107B80000000000000000000000000000000800075 -:107B90000000000000000000000200008000000063 -:107BA00000000000000000001000000000000000C5 +:107B60000000000000000000000000000000000015 +:107B70000000000000000000000000000000000005 +:107B800000000000000000000000000000000000F5 +:107B900000000000000000000000000000000000E5 +:107BA00000000000000000000000000000000000D5 :107BB00000000000000000000000000000000000C5 -:107BC00000000000000000100000000000000000A5 -:107BD00001000100000000000000000000000000A3 +:107BC00000000000000000000000000000000000B5 +:107BD00000000000000000000000000000000000A5 :107BE0000000000000000000000000000000000095 -:107BF0000009000000000200020002000200000074 -:107C0000000008000200000000000000001000005A -:107C1000000000000000000000000000000000085C -:107C20000004000900000000081000080000000027 +:107BF0000000000000000000000000000000000085 +:107C00000000000000000000000000000000000074 +:107C10000000000000000000000000000000000064 +:107C20000000000000000000000000000000000054 :107C30000000000000000000000000000000000044 -:107C40000000000000000000000100000000000033 -:107C50000000080008000000000000000000000014 +:107C40000000000000000000000000000000000034 +:107C50000000000000000000000000000000000024 :107C60000000000000000000000000000000000014 -:107C700000000000000000008000800080088008F4 -:107C800000000000800080080000000000000008E4 -:107C9000200800100010000800000008000820085C -:107CA00000000000000400080004800005000088B7 +:107C70000000000000000000000000000000000004 +:107C800000000000000000000000000000000000F4 +:107C900000000000000000000000000000000000E4 +:107CA00000000000000000000000000000000000D4 :107CB00000000000000000000000000000000000C4 :107CC00000000000000000000000000000000000B4 :107CD00000000000000000000000000000000000A4 -:107CE000004100000000000800000000000000004B -:107CF0000000000000000000000000002000010063 -:107D00000400000000009010000800000010202176 -:107D10000021000220088800000000001000004040 -:107D20000041900300080008400000000020000807 -:107D3000000800000000000000000000000000003B +:107CE0000000000000000000000000000000000094 +:107CF0000000000000000000000000000000000084 +:107D00000000000000000000000000000000000073 +:107D10000000000000000000000000000000000063 +:107D20000000000000000000000000000000000053 +:107D30000000000000000000000000000000000043 :107D40000000000000000000000000000000000033 :107D50000000000000000000000000000000000023 -:107D600000000000000000000000000020000000F3 -:107D700000080000000000080008000800820082DF -:107D8000040000A000C000000288008200001184EE -:107D9000110000000000801000020020004000A040 -:107DA000411000A00000000004000040410000203D -:107DB00000080000000000000000000000000000BB +:107D60000000000000000000000000000000000013 +:107D70000000000000000000000000000000000003 +:107D800000000000000000000000000000000000F3 +:107D900000000000000000000000000000000000E3 +:107DA00000000000000000000000000000000000D3 +:107DB00000000000000000000000000000000000C3 :107DC00000000000000000000000000000000000B3 -:107DD00000100000000000C1009100000000000041 +:107DD00000000000000000000000000000000000A3 :107DE0000000000000000000000000000000000093 -:107DF00000000000000000000000900040000100B2 -:107E00000000C0000000881000000000000090008A -:107E1000000000000000000008100010000000003A -:107E2000000000000800000000000000000000004A +:107DF0000000000000000000000000000000000083 +:107E00000000000000000000000000000000000072 +:107E10000000000000000000000000000000000062 +:107E20000000000000000000000000000000000052 :107E30000000000000000000000000000000000042 :107E40000000000000000000000000000000000032 -:107E500000000001000000A00010001000A00000C1 -:107E6000000000080000000000000000000000000A -:107E70000000000000000000000000000000800082 -:107E800004000000000000000001000000000000ED +:107E50000000000000000000000000000000000022 +:107E60000000000000000000000000000000000012 +:107E70000000000000000000000000000000000002 +:107E800000000000000000000000000000000000F2 :107E900000000000000000000000000000000000E2 -:107EA0000000100000008000000000000000000042 +:107EA00000000000000000000000000000000000D2 :107EB00000000000000000000000000000000000C2 :107EC00000000000000000000000000000000000B2 -:107ED00000000000080008000000844100000000CD +:107ED00000000000000000000000000000000000A2 :107EE0000000000000000000000000000000000092 -:107EF0000000000020000000000000000000000062 -:107F00000400000000080003000000210020000819 -:107F10000008000200400003000000000010000202 -:107F200020000000002100000000880040218402A1 -:107F30008800004100210000401000000000000007 +:107EF0000000000000000000000000000000000082 +:107F00000000000000000000000000000000000071 +:107F10000000000000000000000000000000000061 +:107F20000000000000000000000000000000000051 +:107F30000000000000000000000000000000000041 :107F40000000000000000000000000000000000031 -:107F50000000000000008000800000000000000021 -:107F600000000000000000081108000000000000F0 -:107F700000000000000000000040000000080200B7 -:107F80000000A0200000200004A01100000000015B -:107F900009C00900004000000084020000A0004069 -:107FA00008099102000000A000A0000200020010D9 -:107FB0004002004000A0000004000000000000009B +:107F50000000000000000000000000000000000021 +:107F60000000000000000000000000000000000011 +:107F70000000000000000000000000000000000001 +:107F800000000000000000000000000000000000F1 +:107F900000000000000000000000000000000000E1 +:107FA00000000000000000000000000000000000D1 +:107FB00000000000000000000000000000000000C1 :107FC00000000000000000000000000000000000B1 -:107FD0000000000000800000090001800100000096 -:107FE00001900021000000000000000000000000DF +:107FD00000000000000000000000000000000000A1 +:107FE0000000000000000000000000000000000091 :107FF0000000000000000000000000000000000081 -:10800000000000000000000300210011000000201B -:108010000000002000040008000000000000000034 -:108020000004000300000000002100210003000004 -:10803000000000000000000000000000002100001F +:108000000000000000000000000000000000000070 +:108010000000000000000000000000000000000060 +:108020000000000000000000000000000000000050 +:108030000000000000000000000000000000000040 :108040000000000000000000000000000000000030 -:10805000000000000000001000C088820810080026 -:108060000500081100A00000000000000000000052 +:108050000000000000000000000000000000000020 +:108060000000000000000000000000000000000010 :108070000000000000000000000000000000000000 :1080800000000000000000000000000000000000F0 -:1080900000010000000100010000000000000000DD -:1080A00000000001000000000000000000000000CF -:1080B00000000000000000000000000000100000B0 +:1080900000000000000000000000000000000000E0 +:1080A00000000000000000000000000000000000D0 +:1080B00000000000000000000000000000000000C0 :1080C00000000000000000000000000000000000B0 -:1080D000000000000000000000A000000000000000 -:1080E00000A00004002000020000000000000000CA +:1080D00000000000000000000000000000000000A0 +:1080E0000000000000000000000000000000000090 :1080F0000000000000000000000000000000000080 -:108100000002000001000800000008C000900010FC -:10811000001088880200110000100000000000001C -:10812000000001000001400000000000000000000D -:10813000000000000000000000000188002000088E -:1081400000400000000000000000000000000000EF -:10815000000000000000000000000080000000009F -:10816000000020800000000000000000000000006F +:10810000000000000000000000000000000000006F +:10811000000000000000000000000000000000005F +:10812000000000000000000000000000000000004F +:10813000000000000000000000000000000000003F +:10814000000000000000000000000000000000002F +:10815000000000000000000000000000000000001F +:10816000000000000000000000000000000000000F :1081700000000000000000000000000000000000FF -:1081800000000000000021008000000011800000BD -:10819000000000800000000083000080000000005C -:1081A0000000000002000904800900000000000037 -:1081B00000000000000000000000000021200083FB -:1081C00000030009000000000000000000000000A3 +:1081800000000000000000000000000000000000EF +:1081900000000000000000000000000000000000DF +:1081A00000000000000000000000000000000000CF +:1081B00000000000000000000000000000000000BF +:1081C00000000000000000000000000000000000AF :1081D000000000000000000000000000000000009F -:1081E000808000000000002180800000000000006E +:1081E000000000000000000000000000000000008F :1081F000000000000000000000000000000000007F -:1082000000000000000010001080040002000000C8 -:10821000008080008080000000000000000000005E -:10822000000000000000008000000910091100009B -:108230000000000080000000000800800000000036 -:10824000001100000000000000000000000000001D -:10825000000000000000000000000000000090008E -:108260000800A0A0080090000200A0A010000000DC +:10820000000000000000000000000000000000006E +:10821000000000000000000000000000000000005E +:10822000000000000000000000000000000000004E +:10823000000000000000000000000000000000003E +:10824000000000000000000000000000000000002E +:10825000000000000000000000000000000000001E +:10826000000000000000000000000000000000000E :1082700000000000000000000000000000000000FE -:108280000000000000000000000000020000008864 -:10829000000000208400C008000000000000000072 -:1082A000000000000000000000400000000000008E -:1082B00090009000900010000000000100100000ED -:1082C00008000800908890000000000000000000F6 +:1082800000000000000000000000000000000000EE +:1082900000000000000000000000000000000000DE +:1082A00000000000000000000000000000000000CE +:1082B00000000000000000000000000000000000BE +:1082C00000000000000000000000000000000000AE :1082D000000000000000000000000000000000009E -:1082E000880000040010000840000004C0000004E2 +:1082E000000000000000000000000000000000008E :1082F000000000000000000000000000000000007E -:108300000000000000000000000000000000080164 -:10831000000000000040088400C0001100000000C0 -:1083200000000000000000000000000101009000BB -:10833000010000000000000000000000000000003C -:108340000000A00000001000A000000000000000DD +:10830000000000000000000000000000000000006D +:10831000000000000000000000000000000000005D +:10832000000000000000000000000000000000004D +:10833000000000000000000000000000000000003D +:10834000000000000000000000000000000000002D :10835000000000000000000000000000000000001D -:10836000000000000000008000808000000000008D +:10836000000000000000000000000000000000000D :1083700000000000000000000000000000000000FD -:1083800000000000000000000000000008090000DC -:108390000021000408000080808011800008000493 -:1083A00000000000000000000000000000051104B3 -:1083B000000211200000000000000000000000008A -:1083C0000000000080000200890080000000000022 +:1083800000000000000000000000000000000000ED +:1083900000000000000000000000000000000000DD +:1083A00000000000000000000000000000000000CD +:1083B00000000000000000000000000000000000BD +:1083C00000000000000000000000000000000000AD :1083D000000000000000000000000000000000009D -:1083E000000000000000000080000000801080807D -:1083F000008080000000000000000000000000007D -:108400000000000000000000000000000000400428 -:108410000921110000028000004000000000000956 -:108420000002000000000000000000000080218227 -:1084300004024100030000000000000000000000F2 -:10844000000080008000800000808000800000002C +:1083E000000000000000000000000000000000008D +:1083F000000000000000000000000000000000007D +:10840000000000000000000000000000000000006C +:10841000000000000000000000000000000000005C +:10842000000000000000000000000000000000004C +:10843000000000000000000000000000000000003C +:10844000000000000000000000000000000000002C :10845000000000000000000000000000000000001C -:1084600000000000000000000090089000000200E2 -:1084700002202004020000000000000000000000B4 +:10846000000000000000000000000000000000000C +:1084700000000000000000000000000000000000FC :1084800000000000000000000000000000000000EC -:108490000100000000000000080000890008000042 -:1084A0008800100000000000000000000000001024 -:1084B00001C1000000000100000000080090000061 -:1084C000020082001000080040001010021010008E +:1084900000000000000000000000000000000000DC +:1084A00000000000000000000000000000000000CC +:1084B00000000000000000000000000000000000BC +:1084C00000000000000000000000000000000000AC :1084D000000000000000000000000000000000009C :1084E000000000000000000000000000000000008C :1084F000000000000000000000000000000000007C :10850000000000000000000000000000000000006B -:10851000000000000000070000000000000007004D -:1085200000008181006006000000000000000000E3 -:108530000000840000E00000840000000000000053 +:10851000000000000000000000000000000000005B +:10852000000000000000000000000000000000004B +:10853000000000000000000000000000000000003B :10854000000000000000000000000000000000002B :10855000000000000000000000000000000000001B -:1085600000000000000000000000050505050000F7 -:10857000F00055005500F0F0000000000000000081 +:10856000000000000000000000000000000000000B +:1085700000000000000000000000000000000000FB :1085800000000000000000000000000000000000EB -:108590000000000000000000000000000000FFFFDD -:1085A000AAAAF00F00FF0000141414140000000029 +:1085900000000000000000000000000000000000DB +:1085A00000000000000000000000000000000000CB :1085B00000000000000000000000000000000000BB -:1085C000000000004357025700000000FFFFFFFFBC +:1085C00000000000000000000000000000000000AB :1085D000000000000000000000000000000000009B -:1085E0000000000000000000000000000505050577 -:1085F0000000F00055005400F0F000000000000002 +:1085E000000000000000000000000000000000008B +:1085F000000000000000000000000000000000007B :10860000000000000000000000000000000000006A :10861000000000000000000000000000000000005A -:10862000FFFFAAAAF00F00FF0000141414140000AA +:10862000000000000000000000000000000000004A :10863000000000000000000000000000000000003A -:108640000000000000007F7F3E7F00000000FEFF72 -:10865000FFFF00000000000000000000000000001C +:10864000000000000000000000000000000000002A +:10865000000000000000000000000000000000001A :10866000000000000000000000000000000000000A -:10867000FFFF000400000000FFF3FFC37F63000062 +:1086700000000000000000000000000000000000FA :1086800000000000000000000000000000000000EA :1086900000000000000000000000000000000000DA -:1086A0003333FF00AA55FFFF00003C3C00000000F0 +:1086A00000000000000000000000000000000000CA :1086B00000000000000000000000000000000000BA :1086C00000000000000000000000000000000000AA -:1086D00000200000FFFFFFFF00000000000000007E +:1086D000000000000000000000000000000000009A :1086E000000000000000000000000000000000008A -:1086F00000000000000000000000FFFFFFC6FFC3F5 +:1086F000000000000000000000000000000000007A :108700000000000000000000000000000000000069 :108710000000000000000000000000000000000059 -:1087200000003333FF00AA55000000003C3C00006D +:108720000000000000000000000000000000000049 :108730000000000000000000000000000000000039 -:1087400000000000000000000080000000000000A9 -:10875000000000000000FFFFFF7F0000000000009D +:108740000000000000000000000000000000000029 +:108750000000000000000000000000000000000019 :108760000000000000000000000000000000000009 -:1087700000000000000000100000000000000000E9 +:1087700000000000000000000000000000000000F9 :1087800000000000000000000000000000000000E9 -:1087900000000000000000000000000005610A0E5B -:1087A000050D00A045008408022000120061403F32 -:1087B000C00900000000000000000000006100048B -:1087C0008009000000000000000000000000000020 -:1087D0000000000000610006000D00000000000025 +:1087900000000000000000000000000000000000D9 +:1087A00000000000000000000000000000000000C9 +:1087B00000000000000000000000000000000000B9 +:1087C00000000000000000000000000000000000A9 +:1087D0000000000000000000000000000000000099 :1087E0000000000000000000000000000000000089 :1087F0000000000000000000000000000000000079 :108800000000000000000000000000000000000068 -:10881000000000000000000000000000000000F068 -:10882000FFF01414550000000000000000000000DC -:1088300000004242424200000000000000005CFFD5 -:108840005C000CAC5CFC00000000000000000000BC +:108810000000000000000000000000000000000058 +:108820000000000000000000000000000000000048 +:108830000000000000000000000000000000000038 +:108840000000000000000000000000000000000028 :108850000000000000000000000000000000000018 :108860000000000000000000000000000000000008 :1088700000000000000000000000000000000000F8 :1088800000000000000000000000000000000000E8 :1088900000000000000000000000000000000000D8 -:1088A00000F0FFF0555555000000000000000000EA -:1088B00000000000424242420000000000000000B0 -:1088C000FCFF0C001CBC1CBC0000000000000000F1 +:1088A00000000000000000000000000000000000C8 +:1088B00000000000000000000000000000000000B8 +:1088C00000000000000000000000000000000000A8 :1088D0000000000000000000000000000000000098 :1088E0000000000000000000000000000000000088 :1088F0000000000000000000000000000000000078 :108900000000000000000000000000000000000067 :108910000000000000000000000000000000000057 -:1089200000000000000000875587000000000000E4 +:108920000000000000000000000000000000000047 :108930000000000000000000000000000000000037 -:108940000000F505F50500FFFFFF00000000000036 +:108940000000000000000000000000000000000027 :108950000000000000000000000000000000000017 :108960000000000000000000000000000000000007 :1089700000000000000000000000000000000000F7 :1089800000000000000000000000000000000000E7 :1089900000000000000000000000000000000000D7 -:1089A0000000000000000000008755870000000064 +:1089A00000000000000000000000000000000000C7 :1089B00000000000000000000000000000000000B7 -:1089C00000000000F505F5050000FF0000000000B4 -:1089D0000000000000000000000000000000008017 +:1089C00000000000000000000000000000000000A7 +:1089D0000000000000000000000000000000000097 :1089E0000000000000000000000000000000000087 :1089F0000000000000000000000000000000000077 :108A00000000000000000000000000000000000066 :108A10000000000000000000000000000000000056 -:108A2000000000000002000000080000000000003C -:108A300000000000000084000000000000000000B2 -:108A40000000000000000000C00000080000210835 -:108A50001008201010000408000004000405100095 -:108A600000088800880000000000000000000000EE +:108A20000000000000000000000000000000000046 +:108A30000000000000000000000000000000000036 +:108A40000000000000000000000000000000000026 +:108A50000000000000000000000000000000000016 +:108A60000000000000000000000000000000000006 :108A700000000000000000000000000000000000F6 :108A800000000000000000000000000000000000E6 :108A900000000000000000000000000000000000D6 :108AA00000000000000000000000000000000000C6 :108AB00000000000000000000000000000000000B6 -:108AC0000000000000000000410000000000000065 -:108AD00090008001C1008000000000000000000044 +:108AC00000000000000000000000000000000000A6 +:108AD0000000000000000000000000000000000096 :108AE0000000000000000000000000000000000086 :108AF0000000000000000000000000000000000076 -:108B0000000005000000010000000100000000005E -:108B10000000000500000000000000000000000050 -:108B20000400000000000000000000000000000041 -:108B300000000000000000000200A0000000000093 +:108B00000000000000000000000000000000000065 +:108B10000000000000000000000000000000000055 +:108B20000000000000000000000000000000000045 +:108B30000000000000000000000000000000000035 :108B40000000000000000000000000000000000025 -:108B5000000002000300028000C0020002000200C8 -:108B60000200000000000000020000000000000001 +:108B50000000000000000000000000000000000015 +:108B60000000000000000000000000000000000005 :108B700000000000000000000000000000000000F5 -:108B800000000000A0000000200000000200000023 +:108B800000000000000000000000000000000000E5 :108B900000000000000000000000000000000000D5 :108BA00000000000000000000000000000000000C5 -:108BB0000000000000840000000000000000000031 -:108BC00000080000000000100000000800900008ED -:108BD000000000848010A00080080005A000801024 -:108BE00080088000008800000008808800000000E5 +:108BB00000000000000000000000000000000000B5 +:108BC00000000000000000000000000000000000A5 +:108BD0000000000000000000000000000000000095 +:108BE0000000000000000000000000000000000085 :108BF0000000000000000000000000000000000075 -:108C00000000000000000100000000000000000063 -:108C10000000000000000021000200000000000031 -:108C20000000000000000008000000080000000034 -:108C30000000020000000000000000000000000032 -:108C400002002000000000210000000000000008D9 -:108C500040080000900000A10010004088000000C3 -:108C600000210000000300210000000000000000BF +:108C00000000000000000000000000000000000064 +:108C10000000000000000000000000000000000054 +:108C20000000000000000000000000000000000044 +:108C30000000000000000000000000000000000034 +:108C40000000000000000000000000000000000024 +:108C50000000000000000000000000000000000014 +:108C60000000000000000000000000000000000004 :108C700000000000000000000000000000000000F4 -:108C800000000000000009000400090009000000C5 -:108C90000000000000000008000000840000000048 +:108C800000000000000000000000000000000000E4 +:108C900000000000000000000000000000000000D4 :108CA00000000000000000000000000000000000C4 -:108CB0000008002000000008000800000008000074 -:108CC00000400008000000000008008400002000B0 -:108CD00000080088000000000004000840080008A8 -:108CE0004000000000000088000800000040000074 +:108CB00000000000000000000000000000000000B4 +:108CC00000000000000000000000000000000000A4 +:108CD0000000000000000000000000000000000094 +:108CE0000000000000000000000000000000000084 :108CF0000000000000000000000000000000000074 -:108D00000000000000000000000000000009004119 -:108D10000010000000000000000000000000000043 +:108D00000000000000000000000000000000000063 +:108D10000000000000000000000000000000000053 :108D20000000000000000000000000000000000043 :108D30000000000000000000000000000000000033 -:108D400000000000000000100000000000210021D1 -:108D500000000080008000000000000000001004FF -:108D60002000000000000000000000400040004023 +:108D40000000000000000000000000000000000023 +:108D50000000000000000000000000000000000013 +:108D60000000000000000000000000000000000003 :108D700000000000000000000000000000000000F3 :108D800000000000000000000000000000000000E3 -:108D900000000089000000C0008800080000008476 +:108D900000000000000000000000000000000000D3 :108DA00000000000000000000000000000000000C3 :108DB00000000000000000000000000000000000B3 :108DC00000000000000000000000000000000000A3 -:108DD0000000000000400040000000000000000013 -:108DE000800080084100000805000000000100012B -:108DF0000001000000000000000000000000000072 -:108E000000000000000000000000000000000180E1 +:108DD0000000000000000000000000000000000093 +:108DE0000000000000000000000000000000000083 +:108DF0000000000000000000000000000000000073 +:108E00000000000000000000000000000000000062 :108E10000000000000000000000000000000000052 :108E20000000000000000000000000000000000042 :108E30000000000000000000000000000000000032 :108E40000000000000000000000000000000000022 -:108E5000000000080000000000000000000000000A -:108E6000840000000000C00900000400400204006B -:108E7000008040030000000000000000000000002F +:108E50000000000000000000000000000000000012 +:108E60000000000000000000000000000000000002 +:108E700000000000000000000000000000000000F2 :108E800000000000000000000000000000000000E2 -:108E9000044011001100000000000000110000005B -:108EA0000000000000A00000000000000000000022 -:108EB0000000000000000000000000000000002092 -:108EC0000900000000880008000004A004200082BF -:108ED0000000004000400000000004000000008886 -:108EE0000504110002000500000000884000050094 -:108EF0000000400205040000000000000000000027 +:108E900000000000000000000000000000000000D2 +:108EA00000000000000000000000000000000000C2 +:108EB00000000000000000000000000000000000B2 +:108EC00000000000000000000000000000000000A2 +:108ED0000000000000000000000000000000000092 +:108EE0000000000000000000000000000000000082 +:108EF0000000000000000000000000000000000072 :108F00000000000000000000000000000000000061 -:108F100000000100000000000180000500000000CA -:108F20000000002100000000000000000008000018 +:108F10000000000000000000000000000000000051 +:108F20000000000000000000000000000000000041 :108F30000000000000000000000000000000000031 :108F40000000000000000000000000000000000021 -:108F500000000000000000000000000000210000F0 +:108F50000000000000000000000000000000000011 :108F60000000000000000000000000000000000001 :108F700000000000000000000000000000000000F1 :108F800000000000000000000000000000000000E1 -:108F90000000000004A0000020904002000000003B +:108F900000000000000000000000000000000000D1 :108FA00000000000000000000000000000000000C1 :108FB00000000000000000000000000000000000B1 :108FC00000000000000000000000000000000000A1 :108FD0000000000000000000000000000000000091 :108FE0000000000000000000000000000000000081 -:108FF000000000000004000000000000000000006D +:108FF0000000000000000000000000000000000071 :109000000000000000000000000000000000000060 -:10901000000000004188909105C104C000010800D3 -:10902000000000010000000000000000000000003F -:10903000000000000000000000000000000100002F +:109010000000000000000000000000000000000050 +:109020000000000000000000000000000000000040 +:109030000000000000000000000000000000000030 :109040000000000000000000000000000000000020 :109050000000000000000000000000000000000010 -:1090600000000000200000C000100100002108C026 -:1090700000000008000000C00020000220000000E6 +:109060000000000000000000000000000000000000 +:1090700000000000000000000000000000000000F0 :1090800000000000000000000000000000000000E0 -:10909000000000000000898002A0032000000040C2 -:1090A00080000010004000000000000000000000F0 +:1090900000000000000000000000000000000000D0 +:1090A00000000000000000000000000000000000C0 :1090B00000000000000000000000000000000000B0 :1090C00000000000000000000000000000000000A0 :1090D0000000000000000000000000000000000090 -:1090E0000000000000000000008000800400000874 -:1090F00000800000000000000080000000800000F0 +:1090E0000000000000000000000000000000000080 +:1090F0000000000000000000000000000000000070 :10910000000000000000000000000000000000005F -:109110000000000000000000108088A1000202048E -:10912000000000400080000000000000000000007F +:10911000000000000000000000000000000000004F +:10912000000000000000000000000000000000003F :10913000000000000000000000000000000000002F :10914000000000000000000000000000000000001F :10915000000000000000000000000000000000000F -:1091600000000000000000008000001080110810C6 -:1091700080000000000000008000000000080000E7 -:109180008008000000000000000000000000000057 -:10919000000000000000000000009040900890884F -:1091A000000100000001008200000000000000003B +:1091600000000000000000000000000000000000FF +:1091700000000000000000000000000000000000EF +:1091800000000000000000000000000000000000DF +:1091900000000000000000000000000000000000CF +:1091A00000000000000000000000000000000000BF :1091B00000000000000000000000000000000000AF :1091C000000000000000000000000000000000009F :1091D000000000000000000000000000000000008F -:1091E00000000000880020000000C00020001000E7 -:1091F0000100C000000082000000C00000209001BB -:109200000000C0010000000000000000000000009D -:109210000000000000000000000000000401010048 -:10922000890191C100000000000000000000000062 +:1091E000000000000000000000000000000000007F +:1091F000000000000000000000000000000000006F +:10920000000000000000000000000000000000005E +:10921000000000000000000000000000000000004E +:10922000000000000000000000000000000000003E :10923000000000000000000000000000000000002E :10924000000000000000000000000000000000001E :10925000000000000000000000000000000000000E -:1092600000000000000000200000000000909010AE -:109270001008004100C090000010004010C0888815 -:109280000000009000C0000000000000000000008E -:10929000000000000000000000000000000000408E -:1092A0000904052111110000090000000000000060 +:1092600000000000000000000000000000000000FE +:1092700000000000000000000000000000000000EE +:1092800000000000000000000000000000000000DE +:1092900000000000000000000000000000000000CE +:1092A00000000000000000000000000000000000BE :1092B00000000000000000000000000000000000AE :1092C000000000000000000000000000000000009E :1092D000000000000000000000000000000000008E :1092E000000000000000000000000000000000007E -:1092F0000080800000881080000000000080008056 -:1093000000000000000000800000000000000000DD +:1092F000000000000000000000000000000000006E +:10930000000000000000000000000000000000005D :10931000000000000000000000000000000000004D -:10932000A19011211080400000000000000000000A +:10932000000000000000000000000000000000003D :10933000000000000000000000000000000000002D :10934000000000000000000000000000000000001D :10935000000000000000000000000000000000000D :1093600000000000000000000000000000000000FD -:109370000000800800001000800080100000000045 -:1093800000008308880003000800000000000000BF +:1093700000000000000000000000000000000000ED +:1093800000000000000000000000000000000000DD :1093900000000000000000000000000000000000CD -:1093A000000041C1C188C084A100A00010000410C9 -:1093B000900000000000000000000000000000001D +:1093A00000000000000000000000000000000000BD +:1093B00000000000000000000000000000000000AD :1093C000000000000000000000000000000000009D :1093D000000000000000000000000000000000008D :1093E000000000000000000000000000000000007D -:1093F00000900000C000002090000200C00120107A -:1094000090201000C00021209010000000000000FB +:1093F000000000000000000000000000000000006D +:10940000000000000000000000000000000000005C :10941000000000000000000000000000000000004C -:109420000000000000000060060084000000000052 +:10942000000000000000000000000000000000003C :10943000000000000000000000000000000000002C :10944000000000000000000000000000000000001C :10945000000000000000000000000000000000000C :1094600000000000000000000000000000000000FC -:10947000000000000000000000E00000000000000C +:1094700000000000000000000000000000000000EC :1094800000000000000000000000000000000000DC :1094900000000000000000000000000000000000CC -:1094A000000000000000FAA0BCA0000099990F1F66 -:1094B0000F0F00000000000000000000000000008E +:1094A00000000000000000000000000000000000BC +:1094B00000000000000000000000000000000000AC :1094C000000000000000000000000000000000009C :1094D000000000000000000000000000000000008C :1094E000000000000000000000000000000000007C -:1094F000000000003C3CFFFFF0F00000FCC000005A -:10950000F3300000F6060000F0F00000FF3C000021 +:1094F000000000000000000000000000000000006C +:10950000000000000000000000000000000000005B :10951000000000000000000000000000000000004B -:1095200000000000000000005A003C0000000000A5 -:109530000F0F0F0F000000000000000000000000EF +:10952000000000000000000000000000000000003B +:10953000000000000000000000000000000000002B :10954000000000000000000000000000000000001B :10955000000000000000000000000000000000000B :1095600000000000000000000000000000000000FB -:109570000000000000003C3C00003C3C0000FCC03F -:109580000000F3300000F6060000FF000000C300FA +:1095700000000000000000000000000000000000EB +:1095800000000000000000000000000000000000DB :1095900000000000000000000000000000000000CB :1095A00000000000000000000000000000000000BB :1095B00000000000000000000000000000000000AB @@ -211348,170 +211348,170 @@ :1095F000000000000000000000000000000000006B :10960000000000000000000000000000000000005A :10961000000000000000000000000000000000004A -:10962000000000000000000000000000C3C3CBC722 -:109630000000000000000000FFFFFFFF000000002E +:10962000000000000000000000000000000000003A +:10963000000000000000000000000000000000002A :10964000000000000000000000000000000000001A :10965000000000000000000000000000000000000A :1096600000000000000000000000000000000000FA -:109670000000000000000000000000000F0F0000CC -:109680003CFF0000363600006F6F00009F9F000017 -:109690000F0F00000F0F000000000000000000008E +:1096700000000000000000000000000000000000EA +:1096800000000000000000000000000000000000DA +:1096900000000000000000000000000000000000CA :1096A00000000000000000000000000000000000BA -:1096B000090680008000000000000000000000009B +:1096B00000000000000000000000000000000000AA :1096C000000000000000000000000000000000009A :1096D000000000000000000000000000000000008A :1096E000000000000000000000000000000000007A -:1096F00000000000000000000000000000003C3CF2 -:1097000000003C0000003636000009090000060693 -:10971000000000FF0000666600000000000000007E +:1096F000000000000000000000000000000000006A +:109700000000000000000000000000000000000059 +:109710000000000000000000000000000000000049 :109720000000000000000000000000000000000039 -:1097300000610E0D0019000100610006000D00021D +:109730000000000000000000000000000000000029 :109740000000000000000000000000000000000019 :109750000000000000000000000000000000000009 :1097600000000000000000000000000000000000F9 -:1097700000000000000000000000000000000020C9 -:10978000120240828007002C92024082800000205A -:10979000920240E38006002D9202000000000000CB +:1097700000000000000000000000000000000000E9 +:1097800000000000000000000000000000000000D9 +:1097900000000000000000000000000000000000C9 :1097A00000000000000000000000000000000000B9 -:1097B0000000AB0101ABFF00FF0000000000000053 +:1097B00000000000000000000000000000000000A9 :1097C0000000000000000000000000000000000099 :1097D0000000000000000000000000000000000089 :1097E0000000000000000000000000000000000079 :1097F0000000000000000000000000000000000069 -:109800000000000000000F0F00FF0000000000003B +:109800000000000000000000000000000000000058 :109810000000000000000000000000000000000048 :109820000000000000000000000000000000000038 -:109830000000000083010183FF14FF0F00000000FF +:109830000000000000000000000000000000000028 :109840000000000000000000000000000000000018 :109850000000000000000000000000000000000008 :1098600000000000000000000000000000000000F8 :1098700000000000000000000000000000000000E8 -:1098800000000000000000000F0F00FF00000000BB -:109890000000000000000000008000000000000048 +:1098800000000000000000000000000000000000D8 +:1098900000000000000000000000000000000000C8 :1098A00000000000000000000000000000000000B8 -:1098B000000000000000A0F0A0F0FFFFC3C32020C4 +:1098B00000000000000000000000000000000000A8 :1098C0000000000000000000000000000000000098 :1098D0000000000000000000000000000000000088 :1098E0000000000000000000000000000000000078 :1098F0000000000000000000000000000000000068 -:10990000000000000000000000003C3C00FF0000E0 +:109900000000000000000000000000000000000057 :109910000000000000000000000000000000000047 :109920000000000000000000000000000000000037 -:109930000000000000000000AAFFAAFF0F0F0303B1 -:1099400020200000000000000000000000000000D7 +:109930000000000000000000000000000000000027 +:109940000000000000000000000000000000000017 :109950000000000000000000000000000000000007 :1099600000000000000000000000000000000000F7 :1099700000000000000000000000000000000000E7 -:109980000000000000000000000000003C3C00FF60 +:1099800000000000000000000000000000000000D7 :1099900000000000000000000000000000000000C7 :1099A00000000000000000000000000000000000B7 :1099B00000000000000000000000000000000000A7 :1099C0000000000000000000000000000000000097 :1099D0000000000000000000000000000000000087 -:1099E0000000000100000000000000000000000076 -:1099F0000000001000050000000000000000000052 -:109A000000000000100000100000A000000800107E -:109A10000010C00004000041C000000084080000E5 -:109A200084080400000000000000000000000000A6 +:1099E0000000000000000000000000000000000077 +:1099F0000000000000000000000000000000000067 +:109A00000000000000000000000000000000000056 +:109A10000000000000000000000000000000000046 +:109A20000000000000000000000000000000000036 :109A30000000000000000000000000000000000026 :109A40000000000000000000000000000000000016 :109A50000000000000000000000000000000000006 :109A600000000000000000000000000000000000F6 :109A700000000000000000000000000000000000E6 -:109A8000104000C0000000000000000000000000C6 +:109A800000000000000000000000000000000000D6 :109A900000000000000000000000000000000000C6 :109AA00000000000000000000000000000000000B6 :109AB00000000000000000000000000000000000A6 -:109AC0000000010001000000000000000000000094 -:109AD000000000000000000000100400040001006D -:109AE0000000000000000000100000000000000066 -:109AF00000000000000000008200000000000000E4 +:109AC0000000000000000000000000000000000096 +:109AD0000000000000000000000000000000000086 +:109AE0000000000000000000000000000000000076 +:109AF0000000000000000000000000000000000066 :109B00000000000000000000000000000000000055 -:109B1000000000000000000000000000A0000000A5 -:109B20000800000008000000000000000000000025 +:109B10000000000000000000000000000000000045 +:109B20000000000000000000000000000000000035 :109B30000000000000000000000000000000000025 -:109B400000000000200020000000000000000000D5 +:109B40000000000000000000000000000000000015 :109B50000000000000000000000000000000000005 -:109B600020000000000000000000000000000000D5 -:109B700000000000000800000000000000000008D5 -:109B8000000800000000008402000008000400003B -:109B9000000000000088000000080000000000082D -:109BA0000008000200820000000000000000000029 +:109B600000000000000000000000000000000000F5 +:109B700000000000000000000000000000000000E5 +:109B800000000000000000000000000000000000D5 +:109B900000000000000000000000000000000000C5 +:109BA00000000000000000000000000000000000B5 :109BB00000000000000000000000000000000000A5 -:109BC000000000000400000004000000000000008D -:109BD0000021000200000000000000000000000062 -:109BE00000080000000000000000000000008800E5 -:109BF0000000880088004000000090000000000085 -:109C00000000000000000000000000000010000044 -:109C10000000000000000000880300000021040094 -:109C200020008400C0008400020004040000000042 +:109BC0000000000000000000000000000000000095 +:109BD0000000000000000000000000000000000085 +:109BE0000000000000000000000000000000000075 +:109BF0000000000000000000000000000000000065 +:109C00000000000000000000000000000000000054 +:109C10000000000000000000000000000000000044 +:109C20000000000000000000000000000000000034 :109C30000000000000000000000000000000000024 -:109C4000000000000000800000008088000000008C -:109C50000082000000000084008800000000000076 -:109C600000080000000000000000000000000000EC +:109C40000000000000000000000000000000000014 +:109C50000000000000000000000000000000000004 +:109C600000000000000000000000000000000000F4 :109C700000000000000000000000000000000000E4 -:109C80000000000000000500052000000900090098 -:109C900040004008400000000000090040A009000A -:109CA00011A0119040400000020840004008000050 -:109CB0000000000000000000001000000000000094 -:109CC000000000000000001000050004002000005B -:109CD0000000000400000000000000000000000080 +:109C800000000000000000000000000000000000D4 +:109C900000000000000000000000000000000000C4 +:109CA00000000000000000000000000000000000B4 +:109CB00000000000000000000000000000000000A4 +:109CC0000000000000000000000000000000000094 +:109CD0000000000000000000000000000000000084 :109CE0000000000000000000000000000000000074 :109CF0000000000000000000000000000000000064 -:109D000000000000000000000041004100000000D1 +:109D00000000000000000000000000000000000053 :109D10000000000000000000000000000000000043 -:109D20000000000000000000000000110000000022 +:109D20000000000000000000000000000000000033 :109D30000000000000000000000000000000000023 -:109D40000000000000000000110100000000000100 -:109D50000000009000000000000000000000000073 +:109D40000000000000000000000000000000000013 +:109D50000000000000000000000000000000000003 :109D600000000000000000000000000000000000F3 -:109D700000000000000800000000000000000000DB -:109D80000000000000000000000000004100000092 -:109D900000004100200020100008008400000000A6 -:109DA0000000000000400000000000000000000073 -:109DB000000800000000000000000000000000009B -:109DC0000000000000000000000001000100018010 -:109DD00001800000000000410000000000080000B9 -:109DE000000000000000000000000000000000086B +:109D700000000000000000000000000000000000E3 +:109D800000000000000000000000000000000000D3 +:109D900000000000000000000000000000000000C3 +:109DA00000000000000000000000000000000000B3 +:109DB00000000000000000000000000000000000A3 +:109DC0000000000000000000000000000000000093 +:109DD0000000000000000000000000000000000083 +:109DE0000000000000000000000000000000000073 :109DF0000000000000000000000000000000000063 -:109E0000000000000000000020000000000004002E -:109E10000000000000000000000020000000000022 -:109E2000000000000000900800000000900000000A +:109E00000000000000000000000000000000000052 +:109E10000000000000000000000000000000000042 +:109E20000000000000000000000000000000000032 :109E30000000000000000000000000000000000022 -:109E40000000000000000000000000000800040006 -:109E50002004040400000000000000A00000000036 -:109E600000001000000000000000000000000000E2 +:109E40000000000000000000000000000000000012 +:109E50000000000000000000000000000000000002 +:109E600000000000000000000000000000000000F2 :109E700000000000000000000000000000000000E2 -:109E80000000000009080000000000000000009031 -:109E90000000000000000002000011840020000209 -:109EA0000008050205021108004005020500110026 -:109EB0000508058800900000000000000000000078 -:109EC0000000000000000000000000000000400052 -:109ED000010000000000004100040000000000003C -:109EE0000000000000000000001000000000000062 +:109E800000000000000000000000000000000000D2 +:109E900000000000000000000000000000000000C2 +:109EA00000000000000000000000000000000000B2 +:109EB00000000000000000000000000000000000A2 +:109EC0000000000000000000000000000000000092 +:109ED0000000000000000000000000000000000082 +:109EE0000000000000000000000000000000000072 :109EF0000000000000000000000000000000000062 :109F00000000000000000000000000000000000051 :109F10000000000000000000000000000000000041 -:109F20000000000000080000001000000000000019 +:109F20000000000000000000000000000000000031 :109F30000000000000000000000000000000000021 :109F40000000000000000000000000000000000011 -:109F50008000040011000000050000000000110056 +:109F50000000000000000000000000000000000001 :109F600000000000000000000000000000000000F1 :109F700000000000000000000000000000000000E1 :109F800000000000000000000000000000000000D1 -:109F90000000000800080000000000A020040000ED -:109FA00000C00000000041100000000000000000A0 -:109FB0000000000000080000000000000000000099 +:109F900000000000000000000000000000000000C1 +:109FA00000000000000000000000000000000000B1 +:109FB00000000000000000000000000000000000A1 :109FC0000000000000000000000000000000000091 -:109FD000000041C02009A1C10021000000000000D4 +:109FD0000000000000000000000000000000000081 :109FE0000000000000000000000000000000000071 -:109FF0000000000000000000000000010000000060 +:109FF0000000000000000000000000000000000061 :10A000000000000000000000000000000000000050 :10A010000000000000000000000000000000000040 :10A020000000000000000000000000000000000030 :10A030000000000000000000000000000000000020 :10A040000000000000000000000000000000000010 -:10A0500000000000A14189110904009100000000E6 +:10A050000000000000000000000000000000000000 :10A0600000000000000000000000000000000000F0 :10A0700000000000000000000000000000000000E0 :10A0800000000000000000000000000000000000D0 @@ -211519,15 +211519,15 @@ :10A0A00000000000000000000000000000000000B0 :10A0B00000000000000000000000000000000000A0 :10A0C0000000000000000000000000000000000090 -:10A0D00000000000000000802108A011C000000561 +:10A0D0000000000000000000000000000000000080 :10A0E0000000000000000000000000000000000070 -:10A0F000000000000000001100000000000000004F +:10A0F0000000000000000000000000000000000060 :10A10000000000000000000000000000000000004F :10A11000000000000000000000000000000000003F :10A12000000000000000000000000000000000002F :10A13000000000000000000000000000000000001F :10A14000000000000000000000000000000000000F -:10A1500000000000000000000240C101A1019100C8 +:10A1500000000000000000000000000000000000FF :10A1600000000000000000000000000000000000EF :10A1700000000000000000000000000000000000DF :10A1800000000000000000000000000000000000CF @@ -211535,24 +211535,24 @@ :10A1A00000000000000000000000000000000000AF :10A1B000000000000000000000000000000000009F :10A1C000000000000000000000000000000000008F -:10A1D0000000000000000000000002A000008585D3 -:10A1E00005910000000000000000000000000000D9 +:10A1D000000000000000000000000000000000007F +:10A1E000000000000000000000000000000000006F :10A1F000000000000000000000000000000000005F :10A20000000000000000000000000000000000004E :10A21000000000000000000000000000000000003E :10A22000000000000000000000000000000000002E :10A23000000000000000000000000000000000001E :10A24000000000000000000000000000000000000E -:10A250000000000000000000000000000009214193 -:10A260000540119100000000000000000000000007 +:10A2500000000000000000000000000000000000FE +:10A2600000000000000000000000000000000000EE :10A2700000000000000000000000000000000000DE :10A2800000000000000000000000000000000000CE :10A2900000000000000000000000000000000000BE :10A2A00000000000000000000000000000000000AE :10A2B000000000000000000000000000000000009E :10A2C000000000000000000000000000000000008E -:10A2D000000000000000000000000000000000047A -:10A2E0000041040011110000000000000000000007 +:10A2D000000000000000000000000000000000007E +:10A2E000000000000000000000000000000000006E :10A2F000000000000000000000000000000000005E :10A30000000000000000000000000000000000004D :10A31000000000000000000000000000000000003D @@ -211560,7 +211560,7 @@ :10A33000000000000000000000000000000000001D :10A34000000000000000000000000000000000000D :10A3500000000000000000000000000000000000FD -:10A3600010C000A105C001000000000000000000B6 +:10A3600000000000000000000000000000000000ED :10A3700000000000000000000000000000000000DD :10A3800000000000000000000000000000000000CD :10A3900000000000000000000000000000000000BD @@ -211568,15 +211568,15 @@ :10A3B000000000000000000000000000000000009D :10A3C000000000000000000000000000000000008D :10A3D000000000000000000000000000000000007D -:10A3E0000000000000600600820000000000000085 +:10A3E000000000000000000000000000000000006D :10A3F000000000000000000000000000000000005D -:10A400000000410000E0000000000000000000002B +:10A40000000000000000000000000000000000004C :10A41000000000000000000000000000000000003C :10A42000000000000000000000000000000000002C :10A43000000000000000000000000000000000001C :10A44000000000000000000000000000000000000C :10A4500000000000000000000000000000000000FC -:10A46000000000000000F0F0FFBED7BE00000000BA +:10A4600000000000000000000000000000000000EC :10A4700000000000000000000000000000000000DC :10A4800000000000000000000000000000000000CC :10A4900000000000000000000000000000000000BC @@ -211584,7 +211584,7 @@ :10A4B000000000000000000000000000000000009C :10A4C000000000000000000000000000000000008C :10A4D000000000000000000000000000000000007C -:10A4E000000000000000F0F0F0F0FFBED7BE00005A +:10A4E000000000000000000000000000000000006C :10A4F000000000000000000000000000000000005C :10A50000000000000000000000000000000000004B :10A51000000000000000000000000000000000003B @@ -211592,7 +211592,7 @@ :10A53000000000000000000000000000000000001B :10A54000000000000000000000000000000000000B :10A5500000000000000000000000000000000000FB -:10A560000000000000000000FF40FF4F303030309E +:10A5600000000000000000000000000000000000EB :10A5700000000000000000000000000000000000DB :10A5800000000000000000000000000000000000CB :10A5900000000000000000000000000000000000BB @@ -211600,24 +211600,24 @@ :10A5B000000000000000000000000000000000009B :10A5C000000000000000000000000000000000008B :10A5D000000000000000000000000000000000007B -:10A5E00000000000000000000000FF40FF40F500F8 -:10A5F00000F5000000000000000000000000000066 +:10A5E000000000000000000000000000000000006B +:10A5F000000000000000000000000000000000005B :10A60000000000000000000000000000000000004A :10A61000000000000000000000000000000000003A :10A62000000000000000000000000000000000002A :10A63000000000000000000000000000000000001A :10A64000000000000000000000000000000000000A :10A6500000000000000000000000000000000000FA -:10A660000000000000000000000000008061000FFA -:10A6700000010000000000000000000000000000D9 -:10A680000000000000000000000000000061000663 -:10A69000800D00000000000000000000000000002D +:10A6600000000000000000000000000000000000EA +:10A6700000000000000000000000000000000000DA +:10A6800000000000000000000000000000000000CA +:10A6900000000000000000000000000000000000BA :10A6A00000000000000000000000000000000000AA :10A6B000000000000000000000000000000000009A :10A6C000000000000000000000000000000000008A :10A6D000000000000000000000000000000000007A -:10A6E0000000000000000000000000000000959540 -:10A6F00095950A00F0000000000000000000000036 +:10A6E000000000000000000000000000000000006A +:10A6F000000000000000000000000000000000005A :10A700000000000000000000000000000000000049 :10A710000000000000000000000000000000000039 :10A720000000000000000000000000000000000029 @@ -211625,7 +211625,7 @@ :10A740000000000000000000000000000000000009 :10A7500000000000000000000000000000000000F9 :10A7600000000000000000000000000000000000E9 -:10A77000959595950F3CF03C00000000000000000E +:10A7700000000000000000000000000000000000D9 :10A7800000000000000000000000000000000000C9 :10A7900000000000000000000000000000000000B9 :10A7A00000000000000000000000000000000000A9 @@ -211633,7 +211633,7 @@ :10A7C0000000000000000000000000000000000089 :10A7D0000000000000000000000000000000000079 :10A7E0000000000000000000000000000000000069 -:10A7F000000000EF00FF000F00000000000000005C +:10A7F0000000000000000000000000000000000059 :10A800000000000000000000000000000000000048 :10A810000000000000000000000000000000000038 :10A820000000000000000000000000000000000028 @@ -211641,7 +211641,7 @@ :10A840000000000000000000000000000000000008 :10A8500000000000000000000000000000000000F8 :10A8600000000000000000000000000000000000E8 -:10A870000000000000FF00FF0F0FAAAA0000000068 +:10A8700000000000000000000000000000000000D8 :10A8800000000000000000000000000000000000C8 :10A8900000000000000000000000000000000000B8 :10A8A00000000000000000000000000000000000A8 @@ -211649,192 +211649,192 @@ :10A8C0000000000000000000000000000000000088 :10A8D0000000000000000000000000000000000078 :10A8E0000000000000000000000000000000000068 -:10A8F00000000000000090000000000000000000C8 +:10A8F0000000000000000000000000000000000058 :10A900000000000000000000000000000000000047 -:10A910000000000000002000000000000000000215 -:10A920000000000000000000100000000000000017 -:10A9300004000008000000002000000000004000AB -:10A94000001120000000028020002082C002208030 -:10A95000200000000000000020000404100520007A +:10A910000000000000000000000000000000000037 +:10A920000000000000000000000000000000000027 +:10A930000000000000000000000000000000000017 +:10A940000000000000000000000000000000000007 +:10A9500000000000000000000000000000000000F7 :10A9600000000000000000000000000000000000E7 :10A9700000000000000000000000000000000000D7 :10A9800000000000000000000000000000000000C7 :10A9900000000000000000000000000000000000B7 -:10A9A000000000000008000000000000000000009F -:10A9B0000000800000000000000000000000000215 -:10A9C00000000000800000000004009080040000EF -:10A9D00080041000000000C0000000000001000022 +:10A9A00000000000000000000000000000000000A7 +:10A9B0000000000000000000000000000000000097 +:10A9C0000000000000000000000000000000000087 +:10A9D0000000000000000000000000000000000077 :10A9E0000000000000000000000000000000000067 :10A9F0000000000000000000000000000000000057 -:10AA00000000000000000000000000000020000026 -:10AA10000420000000000000000000000000000012 +:10AA00000000000000000000000000000000000046 +:10AA10000000000000000000000000000000000036 :10AA20000000000000000000000000000000000026 -:10AA30000000000000000000010000000100010013 -:10AA400004000400000000040000000001400000B9 -:10AA500000000000000000000000000002040300ED -:10AA60008200000000000000000000000000000064 +:10AA30000000000000000000000000000000000016 +:10AA40000000000000000000000000000000000006 +:10AA500000000000000000000000000000000000F6 +:10AA600000000000000000000000000000000000E6 :10AA700000000000000000000000000000000000D6 :10AA800000000000000000000000000000000000C6 -:10AA9000000000000000040000000000000000882A -:10AAA000000000000000000000000000000000089E -:10AAB000000000000008000800000400000004007E -:10AAC0000400800088080000000800000000400921 -:10AAD00000000000000800080008000000008000DE -:10AAE000A000000000840000000000000000000042 -:10AAF0000000000000000000000000000000010055 -:10AB000090000000000000000000000000000008AD -:10AB10000000000000000003000000000000000032 +:10AA900000000000000000000000000000000000B6 +:10AAA00000000000000000000000000000000000A6 +:10AAB0000000000000000000000000000000000096 +:10AAC0000000000000000000000000000000000086 +:10AAD0000000000000000000000000000000000076 +:10AAE0000000000000000000000000000000000066 +:10AAF0000000000000000000000000000000000056 +:10AB00000000000000000000000000000000000045 +:10AB10000000000000000000000000000000000035 :10AB20000000000000000000000000000000000025 -:10AB30000000000000000000010001000000000013 -:10AB400000000000000000000002200000000000E3 -:10AB5000000084408489000090000005C00084410A -:10AB60000000C02188034008000000000000000031 +:10AB30000000000000000000000000000000000015 +:10AB40000000000000000000000000000000000005 +:10AB500000000000000000000000000000000000F5 +:10AB600000000000000000000000000000000000E5 :10AB700000000000000000000000000000000000D5 -:10AB8000040000000000000000A000000000000021 -:10AB900000000000000000000008000000000000AD +:10AB800000000000000000000000000000000000C5 +:10AB900000000000000000000000000000000000B5 :10ABA00000000000000000000000000000000000A5 -:10ABB000000000000000000000000400040000008D -:10ABC0004000000000820000000000008000030040 -:10ABD000030000200000400240000040110005403A -:10ABE00000400000020800084000000000000000D3 -:10ABF0000000000000000000000001000100010052 -:10AC00000100000001000000008000000000008042 -:10AC100000800000000000000000000000000000B4 +:10ABB0000000000000000000000000000000000095 +:10ABC0000000000000000000000000000000000085 +:10ABD0000000000000000000000000000000000075 +:10ABE0000000000000000000000000000000000065 +:10ABF0000000000000000000000000000000000055 +:10AC00000000000000000000000000000000000044 +:10AC10000000000000000000000000000000000034 :10AC20000000000000000000000000000000000024 -:10AC300000000000C0000000000000000000010053 -:10AC400004000400000400040000000490400040E0 -:10AC5000004000400000004000C0004001000040F3 -:10AC6000004000400140000400400040000000009F -:10AC700000000000000000000000000004000400CC -:10AC80000400040000000400000000200002000096 -:10AC90000020002000000000000000000000000074 +:10AC30000000000000000000000000000000000014 +:10AC40000000000000000000000000000000000004 +:10AC500000000000000000000000000000000000F4 +:10AC600000000000000000000000000000000000E4 +:10AC700000000000000000000000000000000000D4 +:10AC800000000000000000000000000000000000C4 +:10AC900000000000000000000000000000000000B4 :10ACA00000000000000000000000000000000000A4 :10ACB0000000000000000000000000000000000094 -:10ACC0000400800480000001000100A000010001D8 -:10ACD000000100010001000000012041000102000C -:10ACE00000010001001140010040001100010000BE +:10ACC0000000000000000000000000000000000084 +:10ACD0000000000000000000000000000000000074 +:10ACE0000000000000000000000000000000000064 :10ACF0000000000000000000000000000000000054 :10AD00000000000000000000000000000000000043 :10AD10000000000000000000000000000000000033 -:10AD2000000000000000000000000000000800001B -:10AD3000000004000000000000000000000000000F -:10AD400004000400000000000000000020000000DB -:10AD50000202402120000000000310000021882191 -:10AD60000000002188080041000020000000208031 +:10AD20000000000000000000000000000000000023 +:10AD30000000000000000000000000000000000013 +:10AD40000000000000000000000000000000000003 +:10AD500000000000000000000000000000000000F3 +:10AD600000000000000000000000000000000000E3 :10AD700000000000000000000000000000000000D3 -:10AD8000000000000000000000A00008000000001B -:10AD900000000000000000000000000000000008AB -:10ADA00000000000000000000000000000020000A1 -:10ADB000000040000000400000000000000004000F -:10ADC000042080008000000000000900000009004D -:10ADD0000000000100000008400000041000000016 -:10ADE0000000009000880288400000908000000071 -:10ADF00080040000000000000000000000000000CF -:10AE0000000000000000000000000085004101007B -:10AE10000000010401000000000900000000000023 +:10AD800000000000000000000000000000000000C3 +:10AD900000000000000000000000000000000000B3 +:10ADA00000000000000000000000000000000000A3 +:10ADB0000000000000000000000000000000000093 +:10ADC0000000000000000000000000000000000083 +:10ADD0000000000000000000000000000000000073 +:10ADE0000000000000000000000000000000000063 +:10ADF0000000000000000000000000000000000053 +:10AE00000000000000000000000000000000000042 +:10AE10000000000000000000000000000000000032 :10AE20000000000000000000000000000000000022 :10AE30000000000000000000000000000000000012 -:10AE40000000000000000000000000000080008002 -:10AE5000008000000041000000080000010001081F -:10AE600000020011000000000000000800000110B6 -:10AE700088910000000000000000000000000000B9 -:10AE80000000000000000000000000001120111070 -:10AE90000404200004000400000000000000000082 +:10AE40000000000000000000000000000000000002 +:10AE500000000000000000000000000000000000F2 +:10AE600000000000000000000000000000000000E2 +:10AE700000000000000000000000000000000000D2 +:10AE800000000000000000000000000000000000C2 +:10AE900000000000000000000000000000000000B2 :10AEA00000000000000000000000000000000000A2 :10AEB0000000000000000000000000000000000092 -:10AEC0000000000000000000000000000000004042 -:10AED000004000040000000000000308030002001E -:10AEE00002000000000000000010000000C0200868 -:10AEF000020020020000000000000000000000002E -:10AF000000000000000000C000900000000000C031 -:10AF100000900000000000C0009000000000000051 +:10AEC0000000000000000000000000000000000082 +:10AED0000000000000000000000000000000000072 +:10AEE0000000000000000000000000000000000062 +:10AEF0000000000000000000000000000000000052 +:10AF00000000000000000000000000000000000041 +:10AF10000000000000000000000000000000000031 :10AF20000000000000000000000000000000000021 -:10AF3000000000000000000300000000000000000E -:10AF400000000000000000000040000000101000A1 -:10AF5000010000000100020000C1010008889040CB -:10AF600000C009108200820988C000880000042007 -:10AF700000C0000000C10820000000000000000028 -:10AF800000000000000000000080008000000000C1 -:10AF900000800080000000000080008000000000B1 +:10AF30000000000000000000000000000000000011 +:10AF40000000000000000000000000000000000001 +:10AF500000000000000000000000000000000000F1 +:10AF600000000000000000000000000000000000E1 +:10AF700000000000000000000000000000000000D1 +:10AF800000000000000000000000000000000000C1 +:10AF900000000000000000000000000000000000B1 :10AFA00000000000000000000000000000000000A1 :10AFB0000000000000000000000000000000000091 -:10AFC0000000000000000000000000800000000001 -:10AFD0000000100000004000800000C04000800021 -:10AFE0000009038002820000804000800000000011 -:10AFF0000000008020100040000000000000000061 -:10B0000000000000000000000000000080000000C0 -:10B010008080000080000000808000008000000030 -:10B020008080000000000000000000000000000020 +:10AFC0000000000000000000000000000000000081 +:10AFD0000000000000000000000000000000000071 +:10AFE0000000000000000000000000000000000061 +:10AFF0000000000000000000000000000000000051 +:10B000000000000000000000000000000000000040 +:10B010000000000000000000000000000000000030 +:10B020000000000000000000000000000000000020 :10B030000000000000000000000000000000000010 -:10B0400000000000000000000000000000000002FE -:10B05000000480008040800000048080008009039C -:10B0600000108940000080110000891100000000DC -:10B0700000008000000000001000C0000000000080 -:10B08000000000000000000000000000000082003E -:10B090000000C090000082000000C090000082000C -:10B0A0000000C09000000000000000000000000050 +:10B040000000000000000000000000000000000000 +:10B0500000000000000000000000000000000000F0 +:10B0600000000000000000000000000000000000E0 +:10B0700000000000000000000000000000000000D0 +:10B0800000000000000000000000000000000000C0 +:10B0900000000000000000000000000000000000B0 +:10B0A00000000000000000000000000000000000A0 :10B0B0000000000000000000000000000000000090 :10B0C0000000000000000000000000000000000080 -:10B0D000000000019000020020840001C010004028 -:10B0E00088000000C001822010000000C000100095 -:10B0F00090000090C000000290000020C1000000FD +:10B0D0000000000000000000000000000000000070 +:10B0E0000000000000000000000000000000000060 +:10B0F0000000000000000000000000000000000050 :10B10000000000000000000000000000000000003F -:10B110000000009000C000000000009000C000008F -:10B120000000009000C000000000000000000000CF +:10B11000000000000000000000000000000000002F +:10B12000000000000000000000000000000000001F :10B13000000000000000000000000000000000000F :10B1400000000000000000000000000000000000FF -:10B150000000004090840200008802000408000003 -:10B1600000000110A09102C000110101849091C063 -:10B1700000900000000004C09005010000C100C064 +:10B1500000000000000000000000000000000000EF +:10B1600000000000000000000000000000000000DF +:10B1700000000000000000000000000000000000CF :10B1800000000000000000000000000000000000BF -:10B1900000000000008000800000000000800080AF -:10B1A000000000000080008000000000000000009F +:10B1900000000000000000000000000000000000AF +:10B1A000000000000000000000000000000000009F :10B1B000000000000000000000000000000000008F :10B1C000000000000000000000000000000000007F -:10B1D0000000000000808000800009000000008066 -:10B1E00004000041119080400091008811208041AE -:10B1F00011910000000000000080000811090021EA -:10B2000008900000000000000000000000000000A6 -:10B21000000080090009000000008009000400000F -:10B2200080008004002000000000000000000000FA +:10B1D000000000000000000000000000000000006F +:10B1E000000000000000000000000000000000005F +:10B1F000000000000000000000000000000000004F +:10B20000000000000000000000000000000000003E +:10B21000000000000000000000000000000000002E +:10B22000000000000000000000000000000000001E :10B23000000000000000000000000000000000000E :10B2400000000000000000000000000000000000FE -:10B2500000000000801000210000000000000040FD -:10B260000080000091080280090008118383040017 -:10B270000280C0408000000000800000A1000300A8 -:10B28000100010110000000000000000000000008D -:10B29000000000009000000000000000C00000005E -:10B2A00000000800C0010001000090000000000044 +:10B2500000000000000000000000000000000000EE +:10B2600000000000000000000000000000000000DE +:10B2700000000000000000000000000000000000CE +:10B2800000000000000000000000000000000000BE +:10B2900000000000000000000000000000000000AE +:10B2A000000000000000000000000000000000009E :10B2B000000000000000000000000000000000008E :10B2C000000000000000000000000000000000007E -:10B2D000000000000000900000888484000000004E -:10B2E000000100080000C000411000080301C04038 -:10B2F000080001020201C000200000080400C10093 -:10B300009104C0C000010000000000000000000027 -:10B310000000000000000081000006000000008125 -:10B320000000060000000081000006000000000090 +:10B2D000000000000000000000000000000000006E +:10B2E000000000000000000000000000000000005E +:10B2F000000000000000000000000000000000004E +:10B30000000000000000000000000000000000003D +:10B31000000000000000000000000000000000002D +:10B32000000000000000000000000000000000001D :10B33000000000000000000000000000000000000D :10B3400000000000000000000000000000000000FD -:10B3500000000000000000000000000007000000E6 -:10B36000410000E006000000810000E00000000055 -:10B37000880000E000000000000000000000000065 -:10B38000410000E00000000000000000000000009C -:10B390000000000000000000FFFF0000FF000000B0 -:10B3A0003C3C0000FF0000003C3C0000FF000000AF +:10B3500000000000000000000000000000000000ED +:10B3600000000000000000000000000000000000DD +:10B3700000000000000000000000000000000000CD +:10B3800000000000000000000000000000000000BD +:10B3900000000000000000000000000000000000AD +:10B3A000000000000000000000000000000000009D :10B3B000000000000000000000000000000000008D :10B3C000000000000000000000000000000000007D -:10B3D00000000000000000000000FFFFF0F0FFF0A0 -:10B3E000FFF000000000FF3CFF3CFFC30000FF0F28 -:10B3F0000000FF000000FF3C00007E4200003C3CDB -:10B4000000006F6000003CFF000000000000000032 -:10B4100000000000000000000000FFFF0000FF002F -:10B4200000003C3C0000FF0000003C3C0000FF002E +:10B3D000000000000000000000000000000000006D +:10B3E000000000000000000000000000000000005D +:10B3F000000000000000000000000000000000004D +:10B40000000000000000000000000000000000003C +:10B41000000000000000000000000000000000002C +:10B42000000000000000000000000000000000001C :10B43000000000000000000000000000000000000C :10B4400000000000000000000000000000000000FC -:10B450000000000000000000000000000F0F0000CE -:10B4600000F000F000000000003C003C3C00000048 -:10B47000F00000003C3C0000C30000007E420000E1 -:10B48000666600006F6000003C00000000000000E5 +:10B4500000000000000000000000000000000000EC +:10B4600000000000000000000000000000000000DC +:10B4700000000000000000000000000000000000CC +:10B4800000000000000000000000000000000000BC :10B4900000000000000000000000000000000000AC :10B4A000000000000000000000000000000000009C :10B4B000000000000000000000000000000000008C @@ -211844,235 +211844,235 @@ :10B4F000000000000000000000000000000000004C :10B50000000000000000000000000000000000003B :10B51000000000000000000000000000000000002B -:10B5200000FF00000F0F000000FF00000F0F0000E1 -:10B5300000FFFFFFF0F0000000000000000000002E +:10B52000000000000000000000000000000000001B +:10B53000000000000000000000000000000000000B :10B5400000000000000000000000000000000000FB :10B5500000000000000000000000000000000000EB -:10B5600066660F0F666666660000000000003C3CE1 -:10B5700000002D2D00009F9F0000663C0000FCFC99 -:10B58000000024BD00000F0F00003F3F0000666672 +:10B5600000000000000000000000000000000000DB +:10B5700000000000000000000000000000000000CB +:10B5800000000000000000000000000000000000BB :10B5900000000000000000000000000000000000AB -:10B5A000000000FF00000F0F000000FF00000F0F61 -:10B5B000000000FFFFFFF0F00000000000000000AE +:10B5A000000000000000000000000000000000009B +:10B5B000000000000000000000000000000000008B :10B5C000000000000000000000000000000000007B :10B5D000000000000000000000000000000000006B -:10B5E000000066660F0F0000FFFF00000000000073 -:10B5F0000F0F00002D2D000006060000663C000025 -:10B600000C0C000024BD00003C3C00003030000069 -:10B610000F0F00000000000000000000000000000C -:10B620000000030203380C0092C0038203380C00B0 -:10B6300092C0038203380C0082C0000000000000AA +:10B5E000000000000000000000000000000000005B +:10B5F000000000000000000000000000000000004B +:10B60000000000000000000000000000000000003A +:10B61000000000000000000000000000000000002A +:10B62000000000000000000000000000000000001A +:10B63000000000000000000000000000000000000A :10B6400000000000000000000000000000000000FA :10B6500000000000000000000000000000000000EA -:10B6600000000000000000080000000005610A0F53 -:10B67000852D12A240E380048029920240E38004D9 -:10B6800080299202408280000020920240E38004E0 -:10B69000802992020000000000000000000000006D +:10B6600000000000000000000000000000000000DA +:10B6700000000000000000000000000000000000CA +:10B6800000000000000000000000000000000000BA +:10B6900000000000000000000000000000000000AA :10B6A000000000000000000000000000000000009A :10B6B000000000000000000000000000000000008A :10B6C000000000000000000000000000000000007A :10B6D000000000000000000000000000000000006A :10B6E000000000000000000000000000000000005A -:10B6F000000000000000BF1FB0103CAE3CFE7D719A -:10B700005D515014FABE0000000000000000FEC2AF -:10B710003E020F0F3C3C0000000000000000000053 +:10B6F000000000000000000000000000000000004A +:10B700000000000000000000000000000000000039 +:10B710000000000000000000000000000000000029 :10B720000000000000000000000000000000000019 :10B730000000000000000000000000000000000009 :10B7400000000000000000000000000000000000F9 :10B7500000000000000000000000000000000000E9 :10B7600000000000000000000000000000000000D9 -:10B770000000000000000000FF00FF003C043C54FB -:10B780004D415D51F0F0F0F00000000000000000BD -:10B79000FEC23E0200FF3C3C000000000000000032 +:10B7700000000000000000000000000000000000C9 +:10B7800000000000000000000000000000000000B9 +:10B7900000000000000000000000000000000000A9 :10B7A0000000000000000000000000000000000099 :10B7B0000000000000000000000000000000000089 :10B7C0000000000000000000000000000000000079 :10B7D0000000000000000000000000000000000069 :10B7E0000000000000000000000000000000000059 -:10B7F00000000000000000000000D7D71414F0F093 -:10B80000AAAAD714D714AAAAFFFF000000000000BC -:10B8100000005F505F50AAAA00FF00000000000077 +:10B7F0000000000000000000000000000000000049 +:10B800000000000000000000000000000000000038 +:10B810000000000000000000000000000000000028 :10B820000000000000000000000000000000000018 :10B830000000000000000000000000000000000008 :10B8400000000000000000000000000000000000F8 :10B8500000000000000000000000000000000000E8 :10B8600000000000000000000000000000000000D8 -:10B87000000000000000000000000000D7D71414F2 -:10B88000F0F0AAAAD714D714000055550000000004 -:10B89000000000005F505F50AAAA00FF00000000F7 +:10B8700000000000000000000000000000000000C8 +:10B8800000000000000000000000000000000000B8 +:10B8900000000000000000000000000000000000A8 :10B8A0000000000000000000000000000000000098 -:10B8B0000000000000000000000001000000000087 +:10B8B0000000000000000000000000000000000088 :10B8C0000000000000000000000000000000000078 -:10B8D0000000000000000000000000000002000066 -:10B8E00000000000000020002080208020000000D8 -:10B8F0000000C00000008800200000002000400080 -:10B9000040001000100020000000C00004004000B3 -:10B910004008200020004000200088002000000097 +:10B8D0000000000000000000000000000000000068 +:10B8E0000000000000000000000000000000000058 +:10B8F0000000000000000000000000000000000048 +:10B900000000000000000000000000000000000037 +:10B910000000000000000000000000000000000027 :10B920000000000000000000000000000000000017 -:10B9300000000000000000000000000040000000C7 +:10B930000000000000000000000000000000000007 :10B9400000000000000000000000000000000000F7 :10B9500000000000000000000000000000000000E7 -:10B9600000000000000000048000800488048000C3 -:10B9700000000000000000000000800000008000C7 -:10B980000000000000000020000000000020000077 -:10B99000000000900000800080000008000000000F +:10B9600000000000000000000000000000000000D7 +:10B9700000000000000000000000000000000000C7 +:10B9800000000000000000000000000000000000B7 +:10B9900000000000000000000000000000000000A7 :10B9A0000000000000000000000000000000000097 -:10B9B0000000000000000000000000000100830003 -:10B9C000000000000000000000000000040004006F +:10B9B0000000000000000000000000000000000087 +:10B9C0000000000000000000000000000000000077 :10B9D0000000000000000000000000000000000067 -:10B9E0000000000000000000000002000200020051 -:10B9F0000200000000000000000000000000000045 +:10B9E0000000000000000000000000000000000057 +:10B9F0000000000000000000000000000000000047 :10BA00000000000000000000000000000000000036 -:10BA10000009080000000000000090820000000003 -:10BA20009011000000000000000000000000000075 -:10BA300000000000000000000000000000004000C6 -:10BA400004000000000000000000000000000000F2 +:10BA10000000000000000000000000000000000026 +:10BA20000000000000000000000000000000000016 +:10BA30000000000000000000000000000000000006 +:10BA400000000000000000000000000000000000F6 :10BA500000000000000000000000000000000000E6 :10BA600000000000000000000000000000000000D6 :10BA700000000000000000000000000000000000C6 -:10BA800000000000000000000008000000000000AE -:10BA900000041000008200000088000800030084F9 -:10BAA000000800000000000000000000000000008E -:10BAB000000000000000000000000000000008007E -:10BAC00000000080000000000000000000000000F6 +:10BA800000000000000000000000000000000000B6 +:10BA900000000000000000000000000000000000A6 +:10BAA0000000000000000000000000000000000096 +:10BAB0000000000000000000000000000000000086 +:10BAC0000000000000000000000000000000000076 :10BAD0000000000000000000000000000000000066 :10BAE0000000000000000000000000000000000056 -:10BAF0004000000000000000000000000000000006 -:10BB0000000000000000000020804000200400042D -:10BB1000000300009005000800400040C0A100089C -:10BB20000008820082020000000000000000000007 +:10BAF0000000000000000000000000000000000046 +:10BB00000000000000000000000000000000000035 +:10BB10000000000000000000000000000000000025 +:10BB20000000000000000000000000000000000015 :10BB30000000000000000000000000000000000005 -:10BB40008000000000020000000000000000000073 +:10BB400000000000000000000000000000000000F5 :10BB500000000000000000000000000000000000E5 -:10BB600000000000000000000000000000080000CD +:10BB600000000000000000000000000000000000D5 :10BB700000000000000000000000000000000000C5 -:10BB800000080008000800001100C004090080003F -:10BB900000A000A0400040000000090021001104A6 -:10BBA0000900000000000801000000000000000083 -:10BBB0000000200000000000000000000000000065 +:10BB800000000000000000000000000000000000B5 +:10BB900000000000000000000000000000000000A5 +:10BBA0000000000000000000000000000000000095 +:10BBB0000000000000000000000000000000000085 :10BBC0000000000000000000000000000000000075 :10BBD0000000000000000000000000000000000065 :10BBE0000000000000000000000000000000000055 -:10BBF00000000400000400050000000000000040F8 -:10BC000000400000000000000003000000210000D0 -:10BC100000000000000008000808000000410011BA -:10BC2000102108000000C008000000000000000013 +:10BBF0000000000000000000000000000000000045 +:10BC00000000000000000000000000000000000034 +:10BC10000000000000000000000000000000000024 +:10BC20000000000000000000000000000000000014 :10BC30000000000000000000000000000000000004 -:10BC400000000000000000001100000000000000E3 +:10BC400000000000000000000000000000000000F4 :10BC500000000000000000000000000000000000E4 :10BC600000000000000000000000000000000000D4 -:10BC700000000000000000010008000000000000BB -:10BC800000C0000000A000000000000000840000D0 -:10BC900000C0000000A00000080008840090000020 -:10BCA000000000A0000202A00000098800000000BF +:10BC700000000000000000000000000000000000C4 +:10BC800000000000000000000000000000000000B4 +:10BC900000000000000000000000000000000000A4 +:10BCA0000000000000000000000000000000000094 :10BCB0000000000000000000000000000000000084 -:10BCC00000000000000000800003000000000010E1 -:10BCD000000500000000000000000000000000005F +:10BCC0000000000000000000000000000000000074 +:10BCD0000000000000000000000000000000000064 :10BCE0000000000000000000000000000000000054 -:10BCF000000000000000000000000000000000053F -:10BD000000000000000800000180000001000000A9 -:10BD1000000000020082080008000000000000038C -:10BD200000800000408000800000000090080000BB +:10BCF0000000000000000000000000000000000044 +:10BD00000000000000000000000000000000000033 +:10BD10000000000000000000000000000000000023 +:10BD20000000000000000000000000000000000013 :10BD30000000000000000000000000000000000003 -:10BD400000000000000000000010000000000000E3 -:10BD500000000000000000000000000021000000C2 +:10BD400000000000000000000000000000000000F3 +:10BD500000000000000000000000000000000000E3 :10BD600000000000000000000000000000000000D3 :10BD700000000000000000000000000000000000C3 -:10BD800000000000008800000000200400022000E5 -:10BD900000A0400409010004008811080500000803 -:10BDA00041004004000441040902050200020300AE +:10BD800000000000000000000000000000000000B3 +:10BD900000000000000000000000000000000000A3 +:10BDA0000000000000000000000000000000000093 :10BDB0000000000000000000000000000000000083 :10BDC0000000000000000000000000000000000073 -:10BDD000000900020004900900000000002000009B +:10BDD0000000000000000000000000000000000063 :10BDE0000000000000000000000000000000000053 :10BDF0000000000000000000000000000000000043 -:10BE00000000000000000008000000080000000220 -:10BE100000000100000000210011000900000800DE -:10BE200000000100008041000021000088000000A7 +:10BE00000000000000000000000000000000000032 +:10BE10000000000000000000000000000000000022 +:10BE20000000000000000000000000000000000012 :10BE30000000000000000000000000000000000002 :10BE400000000000000000000000000000000000F2 :10BE500000000000000000000000000000000000E2 :10BE600000000000000000000000000000000000D2 -:10BE70000000000000000000000000000082000040 -:10BE80000000000000080000008400A02000090459 -:10BE900009850984400000000000090000000082BC -:10BEA0000000110040900004400000A011001100AB +:10BE700000000000000000000000000000000000C2 +:10BE800000000000000000000000000000000000B2 +:10BE900000000000000000000000000000000000A2 +:10BEA0000000000000000000000000000000000092 :10BEB0000000000000000000000000000000000082 -:10BEC00000000000000000000000000011040182DA -:10BED000408490840000000000000000000000008A +:10BEC0000000000000000000000000000000000072 +:10BED0000000000000000000000000000000000062 :10BEE0000000000000000000000000000000000052 -:10BEF0000000000000010000000000000000000140 -:10BF00000000000000000000000000000000000130 -:10BF1000908500C000000100000102000001000047 -:10BF2000000000000000000101000200000000000D -:10BF300001010000000000000000000000000000FF -:10BF400000000000000000000000000000000209E6 -:10BF5000218080008004000000000000000000003C +:10BEF0000000000000000000000000000000000042 +:10BF00000000000000000000000000000000000031 +:10BF10000000000000000000000000000000000021 +:10BF20000000000000000000000000000000000011 +:10BF30000000000000000000000000000000000001 +:10BF400000000000000000000000000000000000F1 +:10BF500000000000000000000000000000000000E1 :10BF600000000000000000000000000000000000D1 :10BF700000000000000000000000000000000000C1 -:10BF8000001100001104000000000000000000008B -:10BF900000041140000900001000002000000040D3 -:10BFA000000000000000000000401000000000033E -:10BFB000000403040005000200000000000000006F +:10BF800000000000000000000000000000000000B1 +:10BF900000000000000000000000000000000000A1 +:10BFA0000000000000000000000000000000000091 +:10BFB0000000000000000000000000000000000081 :10BFC0000000000000000000000000000000000071 -:10BFD00011000000A000210000000000000000008F +:10BFD0000000000000000000000000000000000061 :10BFE0000000000000000000000000000000000051 :10BFF0000000000000000000000000000000000041 -:10C00000000000000000110004000000000000001B -:10C0100000000000020000000903000000002000F2 -:10C0200000020000000000000000030040000000CB -:10C0300000020000000000000000000000000000FE +:10C000000000000000000000000000000000000030 +:10C010000000000000000000000000000000000020 +:10C020000000000000000000000000000000000010 +:10C030000000000000000000000000000000000000 :10C0400000000000000000000000000000000000F0 -:10C050000000A0041000A100C1A00000000000002A +:10C0500000000000000000000000000000000000E0 :10C0600000000000000000000000000000000000D0 :10C0700000000000000000000000000000000000C0 -:10C0800000000000000000000100000000000000AF -:10C09000000000000000010000000001000000009E -:10C0A000010000000000000000000000000201008C -:10C0B0000000000000000000000000A000000000E0 +:10C0800000000000000000000000000000000000B0 +:10C0900000000000000000000000000000000000A0 +:10C0A0000000000000000000000000000000000090 +:10C0B0000000000000000000000000000000000080 :10C0C0000000000000000000000000000000000070 -:10C0D0000000000040890140C08511C00000000040 +:10C0D0000000000000000000000000000000000060 :10C0E0000000000000000000000000000000000050 :10C0F0000000000000000000000000000000000040 -:10C10000000000000000000000000000000100002E -:10C11000000000000000000100010101100000010A -:10C120000100A0010100000000000000000000016B -:10C1300001000001000000010100000000010000FA +:10C10000000000000000000000000000000000002F +:10C11000000000000000000000000000000000001F +:10C12000000000000000000000000000000000000F +:10C1300000000000000000000000000000000000FF :10C1400000000000000000000000000000000000EF -:10C15000000000000000802102090082890900001F +:10C1500000000000000000000000000000000000DF :10C1600000000000000000000000000000000000CF :10C1700000000000000000000000000000000000BF -:10C180000000000000000000001110000004001179 -:10C190000000000000000000000802210821000249 -:10C1A000000811418008110200000000000000009A -:10C1B0000008110000210010000208001100000812 +:10C1800000000000000000000000000000000000AF +:10C19000000000000000000000000000000000009F +:10C1A000000000000000000000000000000000008F +:10C1B000000000000000000000000000000000007F :10C1C000000000000000000000000000000000006F -:10C1D0000000000000000000208440210400020054 +:10C1D000000000000000000000000000000000005F :10C1E000000000000000000000000000000000004F :10C1F000000000000000000000000000000000003F -:10C200000000000000000000000008001100040011 -:10C2100000100000000000000000211000000000DD -:10C22000021120A1210010000240000000000000C7 -:10C2300000002100000020000811000000000000A4 +:10C20000000000000000000000000000000000002E +:10C21000000000000000000000000000000000001E +:10C22000000000000000000000000000000000000E +:10C2300000000000000000000000000000000000FE :10C2400000000000000000000000000000000000EE -:10C250000000000000000000000001C10184000097 -:10C2600001000000000000000000000000000000CD +:10C2500000000000000000000000000000000000DE +:10C2600000000000000000000000000000000000CE :10C2700000000000000000000000000000000000BE -:10C2800000000000000000000000000001000100AC -:10C29000000000000000000000000000010000009D -:10C2A0000000000100C100000100000100000000CA -:10C2B000000000000100000000000101000000007B -:10C2C00000000090000000000000000000000000DE +:10C2800000000000000000000000000000000000AE +:10C29000000000000000000000000000000000009E +:10C2A000000000000000000000000000000000008E +:10C2B000000000000000000000000000000000007E +:10C2C000000000000000000000000000000000006E :10C2D000000000000000000000000000000000005E -:10C2E0000600420000000000000000000000000006 +:10C2E000000000000000000000000000000000004E :10C2F000000000000000000000000000000000003E :10C30000000000000000000000000000000000002D -:10C3100000E00000000000000000000000008100BC -:10C3200000E000000000880000E000008400000041 -:10C33000000000000000410000E0000000000000DC +:10C31000000000000000000000000000000000001D +:10C32000000000000000000000000000000000000D +:10C3300000000000000000000000000000000000FD :10C3400000000000000000000000000000000000ED :10C3500000000000000000000000000000000000DD -:10C3600000003F3F17170000000000000000000021 +:10C3600000000000000000000000000000000000CD :10C3700000000000000000000000000000000000BD :10C3800000000000000000000000000000000000AD :10C39000000000000000000000000000000000009D @@ -212080,7 +212080,7 @@ :10C3B000000000000000000000000000000000007D :10C3C000000000000000000000000000000000006D :10C3D000000000000000000000000000000000005D -:10C3E000000000000041286900000000000000007B +:10C3E000000000000000000000000000000000004D :10C3F000000000000000000000000000000000003D :10C40000000000000000000000000000000000002C :10C41000000000000000000000000000000000001C @@ -212088,249 +212088,249 @@ :10C4300000000000000000000000000000000000FC :10C4400000000000000000000000000000000000EC :10C4500000000000000000000000000000000000DC -:10C460000000000000000A0ABE00000000000000FA +:10C4600000000000000000000000000000000000CC :10C4700000000000000000000000000000000000BC :10C4800000000000000000000000000000000000AC :10C49000000000000000000000000000000000009C -:10C4A00000000000A0F5A0F5000000000000000062 +:10C4A000000000000000000000000000000000008C :10C4B000000000000000000000000000000000007C :10C4C000000000000000000000000000000000006C :10C4D000000000000000000000000000000000005C -:10C4E00000000000000000020A0ABE000000000078 +:10C4E000000000000000000000000000000000004C :10C4F000000000000000000000000000000000003C :10C50000000000000000000000000000000000002B :10C51000000000000000000000000000000000001B -:10C52000000000000000A0F5A0F5000000000000E1 +:10C52000000000000000000000000000000000000B :10C5300000000000000000000000000000000000FB :10C5400000000000000000000000000000000000EB :10C5500000000000000000000000000000000000DB -:10C560000000000000000061400E000D000000000F +:10C5600000000000000000000000000000000000CB :10C5700000000000000000000000000000000000BB :10C5800000000000000000000000000000000000AB -:10C590000000000000000000006100010001000038 -:10C5A000000000000000000000610004800900009D -:10C5B000006100048009000000000000000000008D -:10C5C000006100048009000000610006000D000009 +:10C59000000000000000000000000000000000009B +:10C5A000000000000000000000000000000000008B +:10C5B000000000000000000000000000000000007B +:10C5C000000000000000000000000000000000006B :10C5D000000000000000000000000000000000005B -:10C5E000000000000000000000000080400000008B +:10C5E000000000000000000000000000000000004B :10C5F000000000000000000000000000000000003B :10C60000000000000000000000000000000000002A -:10C6100000000000000000000000FF0FF000003CE0 -:10C62000FF3C00000000000000003C3CFFFF0F0F3B -:10C630003C3C0C0CCFCFD2D200FF00000000000029 -:10C6400000003C3C3C3C7D7D282800000000C3C32A +:10C61000000000000000000000000000000000001A +:10C62000000000000000000000000000000000000A +:10C6300000000000000000000000000000000000FA +:10C6400000000000000000000000000000000000EA :10C6500000000000000000000000000000000000DA -:10C66000000000000000000000000000008000004A +:10C6600000000000000000000000000000000000CA :10C6700000000000000000000000000000000000BA :10C6800000000000000000000000000000000000AA -:10C69000000000000000000000000000FF0FF0009C -:10C6A000003CFF3C00000000000000000000C3C38D -:10C6B00000FF3C3CCF0CCF0CD2D200FF00000000AA -:10C6C00000000000FAFA0A0A287D287D0000000018 -:10C6D000C3C3FFFF000000000000000000000000D6 -:10C6E000000000000000000000000000FFFF7D7D52 -:10C6F00000FF003C000000000000000000000000FF +:10C69000000000000000000000000000000000009A +:10C6A000000000000000000000000000000000008A +:10C6B000000000000000000000000000000000007A +:10C6C000000000000000000000000000000000006A +:10C6D000000000000000000000000000000000005A +:10C6E000000000000000000000000000000000004A +:10C6F000000000000000000000000000000000003A :10C700000000000000000000000000000000000029 -:10C710000000000000000000000000000000F5F52F -:10C72000050500FFAAAA0000000000000000A0A06C -:10C73000AFAFAAAAF0F07D417D4155FF55FF000043 -:10C740000000000000003C3C55553A3A3A3A0004DB -:10C7500004000000000000000000000000000000D5 -:10C760000000000000000000000000000000FFFFCB -:10C770007D7D3CC33C000000000000000000000084 +:10C710000000000000000000000000000000000019 +:10C720000000000000000000000000000000000009 +:10C7300000000000000000000000000000000000F9 +:10C7400000000000000000000000000000000000E9 +:10C7500000000000000000000000000000000000D9 +:10C7600000000000000000000000000000000000C9 +:10C7700000000000000000000000000000000000B9 :10C7800000000000000000000000000000000000A9 :10C790000000000000000000000000000000000099 -:10C7A000F5F5050500FFAAAA000000000000000042 -:10C7B000A0AFA0AFAAAAF0F07D417D4100AA00AAD7 -:10C7C00000000000000000003C3C55553A3A3A3A5F +:10C7A0000000000000000000000000000000000089 +:10C7B0000000000000000000000000000000000079 +:10C7C0000000000000000000000000000000000069 :10C7D0000000000000000000000000000000000059 :10C7E0000000000000000000000000000000000049 :10C7F0000000000000000000000000000000000039 :10C800000000000000000000000000000000000028 -:10C810000000000000000000000200000080000096 -:10C82000008004000400200001009080008000804F -:10C83000000088000100C0000000000000000400AB -:10C8400020002000200020000004200000880000BC -:10C8500000802000881020008800000000000000F8 +:10C810000000000000000000000000000000000018 +:10C820000000000000000000000000000000000008 +:10C8300000000000000000000000000000000000F8 +:10C8400000000000000000000000000000000000E8 +:10C8500000000000000000000000000000000000D8 :10C8600000000000000000000000000000000000C8 :10C8700000000000000000000000000000000000B8 :10C8800000000000000000000000000000000000A8 -:10C890000000000000000000000000000000000494 -:10C8A00000000004800080008000040000200020C0 -:10C8B00000200000000020000000000000820000B6 -:10C8C00000008000000000000000000100000004E3 -:10C8D0000000000400000000000000C00000000094 +:10C890000000000000000000000000000000000098 +:10C8A0000000000000000000000000000000000088 +:10C8B0000000000000000000000000000000000078 +:10C8C0000000000000000000000000000000000068 +:10C8D0000000000000000000000000000000000058 :10C8E0000000000000000000000000000000000048 -:10C8F0000000000000000800000000000000000030 -:10C9000000008400000000000000000000000000A3 +:10C8F0000000000000000000000000000000000038 +:10C900000000000000000000000000000000000027 :10C910000000000000000000000000000000000017 -:10C920000000000000000000010000000100000005 -:10C9300000000000000000000000000000080000EF -:10C940000000000000000410040800000000004087 -:10C9500000080000000000000000000000000000CF +:10C920000000000000000000000000000000000007 +:10C9300000000000000000000000000000000000F7 +:10C9400000000000000000000000000000000000E7 +:10C9500000000000000000000000000000000000D7 :10C9600000000000000000000000000000000000C7 -:10C9700000000000000000000200000000000000B5 +:10C9700000000000000000000000000000000000B7 :10C9800000000000000000000000000000000000A7 :10C990000000000000000000000000000000000097 -:10C9A000000800000000000000002000000020003F +:10C9A0000000000000000000000000000000000087 :10C9B0000000000000000000000000000000000077 -:10C9C000000800000000000000000008000800004F -:10C9D000001000100000000800200000001000847B +:10C9C0000000000000000000000000000000000067 +:10C9D000000000080000000000000000000000004F :10C9E0000000000000000000000000000000000047 :10C9F0000000000000000000000000000000000037 :10CA00000000000000000000000000000000000026 :10CA10000000000000000000000000000000000016 -:10CA200000002000000020000000000000000100C5 -:10CA300000000000000000020421002100000005A9 -:10CA4000000000002000000520080021880540406B -:10CA500040400021012100002021002100000000B1 -:10CA600088800000000000000000000000000000BE +:10CA20000000000000000000000000000000000006 +:10CA300000000000000000000000000000210000D5 +:10CA400000000000000000000000000000080000DE +:10CA500000000000000000000000000000000000D6 +:10CA600000000000000000000000000000000000C6 :10CA700000000000000000000000000000000000B6 -:10CA8000001000080000000000000000000000008E +:10CA800000000000000000000000000000000000A6 :10CA90000000000000000000000000000000000096 -:10CAA0000000000080000000800000000000000086 -:10CAB000040000000000001000008082000003005D -:10CAC0000000000000020000410280880000000019 -:10CAD0000001209100002000000080000002000002 -:10CAE0000000000200000000000000000000000044 +:10CAA0000000000000000000000000000000000086 +:10CAB0000000000000000000000000000000000076 +:10CAC0000000000000000000000000000000000066 +:10CAD0000000000000000000000000000000000056 +:10CAE0000000000000000000000000000000000046 :10CAF0000000000000000000000000000000000036 :10CB00000000000000000000000000000000000025 :10CB10000000000000000000000000000000000015 -:10CB200000000000000000000020000200212000A2 -:10CB300002000002000000400000080000000000A9 -:10CB4000080040000000A0410000000000000000BC -:10CB500020000000200040000141001100080040BA -:10CB60000040000000000000000000000000000085 +:10CB20000000000000000000000000000000000005 +:10CB300000000000000000000000000000000000F5 +:10CB400000000000000000000000000000000000E5 +:10CB500000000000000000000000000000000000D5 +:10CB600000000000000000000000000000000000C5 :10CB700000000000000000000000000000000000B5 :10CB800000000000000000000000000000000000A5 :10CB90000000000000000000000000000000000095 -:10CBA0000000000000000000000000000001000084 -:10CBB000800089000001004009000008800000009A -:10CBC0002000A0009108200000C000040000000028 -:10CBD000000082000090800080822000000400405D -:10CBE00000A1000100000040000000000000000063 +:10CBA0000000000000000000000000000000000085 +:10CBB000000000A000820000000000000000000053 +:10CBC0000000000000000000000000000000000065 +:10CBD0000000000000000000000000000000000055 +:10CBE0000000000000000000000000000000000045 :10CBF0000000000000000000000000000000000035 :10CC00000000000000000000000000000000000024 :10CC10000000000000000000000000000000000014 -:10CC20000000020000000000000000000000000002 -:10CC300020000000000000040000000302000009C2 -:10CC400008030110008090082008002101218300C2 -:10CC500000C1002100839005209100A100A14000A7 -:10CC600000A100020021000040210000000000009F +:10CC20000000000000000000000000000000000004 +:10CC300000000000000000000000000000080000EC +:10CC400000000000000000000000000000000000E4 +:10CC500000000000000000000000000000000000D4 +:10CC600000000000000000000000000000000000C4 :10CC700000000000000000000000000000000000B4 -:10CC80000000000000100000000000000000000094 +:10CC800000000000000000000000000000000000A4 :10CC90000000000000000000000000000000000094 :10CCA0000000000000000000000000000000000084 -:10CCB000000000000000000800000000000000006C -:10CCC00000008008020800400000808800002088E2 -:10CCD0000200204000000004000000040940004061 -:10CCE00080A0000400A100000002408200000000BB +:10CCB0000000000000000000000000000000000074 +:10CCC0000000000000000000000000000000000064 +:10CCD0000000000000000000000000000000000054 +:10CCE0000000000000000000000000000000000044 :10CCF0000000000000000000000000000000000034 :10CD00000000000000000000000000000000000023 :10CD10000000000000000000000000000000000013 :10CD20000000000000000000000000000000000003 -:10CD30000080000000000000000000080100001159 -:10CD400000000021002140210000C0000000000080 -:10CD500000000004000300400040004000200040AC -:10CD6000204001400140002100040040004000003C +:10CD300000000000000000000000000000000000F3 +:10CD400000000000000000000000000000000000E3 +:10CD500000000000000000000000000000000000D3 +:10CD600000000000000000000000000000000000C3 :10CD700000000000000000000000000000000000B3 :10CD800000000000000000000000000000000000A3 :10CD90000000000000000000000000000000000093 -:10CDA0000000000000000200000000000000000081 -:10CDB0000000000200C00000000000000008400069 -:10CDC00000080000000000008000000000002000BB -:10CDD00020840000000020840000000000002000EB -:10CDE000008200900200020400840084208500017B +:10CDA0000000000000000000000000000000000083 +:10CDB0000000000000000000000000000000000073 +:10CDC0000000000000000000000000000000000063 +:10CDD0000000000000000000000000000000000053 +:10CDE0000000000000000000000000000000000043 :10CDF0000000000000000000000000000000000033 :10CE00000000000000000000000000000000000022 :10CE10000000000000000000000000000000000012 :10CE20000000000000000000000000000000000002 -:10CE300000000000000000000000010000000000F1 -:10CE400000000000000000000000A0030200888233 -:10CE500010018490100204111084400200418840A7 -:10CE60008884050800890089A084840202020010D9 -:10CE700082850000000000000000000000000000AB +:10CE300000000000000000000000000000000000F2 +:10CE400000000000000000000000000000000000E2 +:10CE500000000000000000000000000000000000D2 +:10CE600000000000000000000000000000000000C2 +:10CE700000000000000000000000000000000000B2 :10CE800000000000000000000000000000000000A2 :10CE90000000000000000000000000000000000092 :10CEA0000000000000000000000000000000000082 -:10CEB000000000000000000004000000100021003D -:10CEC000040000000000000000000000024000001C -:10CED000008000100000910080A08000820440903B -:10CEE00000000000108021400002000000020580C8 -:10CEF000008080040000000000000000000000002E +:10CEB0000000000000000000000000000000000072 +:10CEC0000000000000000000000000000000000062 +:10CED0000000000000000000000000000000000052 +:10CEE0000000000000000000000000000000000042 +:10CEF0000000000000000000000000000000000032 :10CF00000000000000000000000000000000000021 :10CF10000000000000000000000000000000000011 :10CF20000000000000000000000000000000000001 -:10CF300000000000000000030000080002000008DC -:10CF400011000300090080000000000000001080B4 -:10CF5000400080008080008088C1208480838080A1 -:10CF60000491901180808000809040008280800039 -:10CF7000009100118080000000000000000000000F +:10CF300000000000000000000000000000000000F1 +:10CF400000000000000000000000000000000000E1 +:10CF500000000000000000000000000000000000D1 +:10CF600000000000000000000000000000000000C1 +:10CF700000000000000000000000000000000000B1 :10CF800000000000000000000000000000000000A1 :10CF90000000000000000000000000000000000091 :10CFA0000000000000000000000000000000000081 -:10CFB0000000000000000000000000000100000070 -:10CFC0000001028800000210080088040000000828 -:10CFD000C1A0A100400010C0888809C0031110C181 -:10CFE000408884C0418410C0080408C0038411C074 -:10CFF000400002C0088410C00000000000000000D3 +:10CFB0000000000000000000000000000000000071 +:10CFC0000000000000000000000000000000000061 +:10CFD0000000000000000000000000000000000051 +:10CFE0000000000000000000000000000000000041 +:10CFF0000000000000000000000000000000000031 :10D000000000000000000000000000000000000020 :10D010000000000000000000000000000000000010 :10D020000000000000000000000000000000000000 :10D0300000000000000000000000000000000000F0 -:10D04000000000002001840000000108001088009A -:10D05000000204020110001101A003080103C141F4 -:10D06000098811080121C011088203090102C011B9 -:10D07000020411080021C11008080000000000008F +:10D0400000000000000000000000000000000000E0 +:10D0500000000000000000000000000000000000D0 +:10D0600000000000000000000000000000000000C0 +:10D0700000000000000000000000000000000000B0 :10D0800000000000000000000000000000000000A0 :10D090000000000000000000000000000000000090 :10D0A0000000000000000000000000000000000080 :10D0B0000000000000000000000000000000000070 -:10D0C000000011000900004080001109408000802C -:10D0D000000000800011119000A11102418011098F -:10D0E00090A1A004C180118980A1808441C0111148 -:10D0F00080A10009C18200848580890000000000B1 +:10D0C0000000000000000000000000000000000060 +:10D0D0000000000000000000000000000000000050 +:10D0E0000000000000000000000000000000000040 +:10D0F0000000000000000000000000000000000030 :10D10000000000000000000000000000000000001F :10D11000000000000000000000000000000000000F :10D1200000000000000000000000000000000000FF -:10D1300000000000000000000000000000000810D7 -:10D140000000090002020000001100800000001031 -:10D1500000400000000011A121800200C000212138 -:10D160008000888004110321A1A090800411212057 -:10D170000300898010110002008080000000000080 +:10D1300000000000000000000000000000000000EF +:10D1400000000000000000000000000000000000DF +:10D1500000000000000000000000000000000000CF +:10D1600000000000000000000000000000000000BF +:10D1700000000000000000000000000000000000AF :10D18000000000000000000000000000000000009F :10D19000000000000000000000000000000000008F :10D1A000000000000000000000000000000000007F :10D1B000000000000000000000000000000000006F -:10D1C0000100000000000000000000000008000056 -:10D1D000000000110000000002C1001004C009009E -:10D1E0000301828409A002010201100908A0400184 -:10D1F000910102841040A0010200020808A0400032 +:10D1C000000000000000000000000000000000005F +:10D1D000000000000000000000000000000000004F +:10D1E000000000000000000000000000000000003F +:10D1F000000000000000000000000000000000002F :10D20000000000000000000000000000000000001E :10D21000000000000000000000000000000000000E :10D2200000000000000000000000000000000000FE :10D2300000000000000000000000000000000000EE -:10D240000000810000E000000000418200E00700D3 -:10D2500000000081000007000000410000E0000025 -:10D260008442600000E000004842410000E000000D -:10D270004842600000E0000048420000000000005A -:10D280004842000000000000000000000000000014 +:10D2400000000000000000000000000000000000DE +:10D2500000000000000000000000000000000000CE +:10D2600000000000000000000000000000000000BE +:10D2700000000000000000000000000000000000AE +:10D28000000000000000000000000000000000009E :10D29000000000000000000000000000000000008E :10D2A000000000000000000000000000000000007E :10D2B000000000000000000000000000000000006E :10D2C000000000000000000000000000000000005E -:10D2D000000000000000000003033F3FC3C30F0F26 -:10D2E0007FFF4FFFFB38FF003F306F60F03C663C34 -:10D2F000B4F0B4F03FFF30007FFF4FFFF03C663CDE -:10D3000036FF3600000000000000000000000000B2 +:10D2D000000000000000000000000000000000004E +:10D2E000000000000000000000000000000000003E +:10D2F000000000000000000000000000000000002E +:10D30000000000000000000000000000000000001D :10D31000000000000000000000000000000000000D :10D3200000000000000000000000000000000000FD :10D3300000000000000000000000000000000000ED :10D3400000000000000000000000000000000000DD -:10D350000000000000000000000003033F3FC3C3C3 -:10D360000F0F70004000E320FF00FF00FF003C3C77 -:10D370003C3CF6F090F06FFF6000700040003C3CD9 -:10D380003C3CFFFF00000000000000000000000027 +:10D3500000000000000000000000000000000000CD +:10D3600000000000000000000000000000000000BD +:10D3700000000000000000000000000000000000AD +:10D38000000000000000000000000000000000009D :10D39000000000000000000000000000000000008D :10D3A000000000000000000000000000000000007D :10D3B000000000000000000000000000000000006D @@ -212343,302 +212343,302 @@ :10D4200000000000000000000000000000000000FC :10D4300000000000000000000000000000000000EC :10D4400000000000000000000000000000000000DC -:10D45000000000000000F0F0000000000000B1B18A -:10D46000B1B10000F0F03C3C1E7E0036FF36FFFFFD -:10D47000FF4E0F3C0F66FFFFCFE724BD069FFFFF67 -:10D48000FF4E0CFC06F600FF34F700000000000021 +:10D4500000000000000000000000000000000000CC +:10D4600000000000000000000000000000000000BC +:10D4700000000000000000000000000000000000AC +:10D48000000000000000000000000000000000009C :10D49000000000000000000000000000000000008C :10D4A000000000000000000000000000000000007C :10D4B000000000000000000000000000000000006C :10D4C000000000000000000000000000000000005C -:10D4D0000000000000000000FFFF0F0F0000000030 -:10D4E000B1B1B1B1FFFFF0F03C3C1E180000FFFFEE -:10D4F0000000004E0F0F0F0F00000C2400FF00FF74 -:10D500000000004E00FF00FF00FF04C70000000005 +:10D4D000000000000000000000000000000000004C +:10D4E000000000000000000000000000000000003C +:10D4F000000000000000000000000000000000002C +:10D50000000000000000000000000000000000001B :10D51000000000000000000000000000000000000B :10D5200000000000000000000000000000000000FB :10D5300000000000000000000000000000000000EB -:10D54000000000000000000000000000000000617A -:10D5500000058005000005610A2F850100A1050076 -:10D560000A28050000A00061000480291002406123 -:10D5700080048029100240618004802910024061EB -:10D5800080048029100240618006002D10020000F6 +:10D5400000000000000000000000000000000000DB +:10D5500000000000000000000000000000000000CB +:10D5600000000000000000000000000000000000BB +:10D5700000000000000000000000000000000000AB +:10D58000000000000000000000000000000000009B :10D59000000000000000000000000000000000008B :10D5A000000000000000000000000000000000007B :10D5B000000000000000000000000000000000006B :10D5C000000000000000000000000000000000005B -:10D5D000CFCF0C0C0000000000000000FFFFF0F0B7 -:10D5E00000000000000000000F0FEB2802433E7F08 -:10D5F000D4D4D4D45555F0F0D414D7170055F0F046 -:10D6000087AF870503033F3F000000000C0C0C0CA4 +:10D5D000000000000000000000000000000000004B +:10D5E000000000000000000000000000000000003B +:10D5F000000000000000000000000000000000002B +:10D60000000000000000000000000000000000001A :10D61000000000000000000000000000000000000A :10D6200000000000000000000000000000000000FA :10D6300000000000000000000000000000000000EA :10D6400000000000000000000000000000000000DA -:10D650000000CFCF0C0C0000000000000000000014 -:10D66000F0F000000000000000000F0FEB28024364 -:10D670003E7FD7D7141400FFF0F0D414D717AAFFB9 -:10D68000F0F087AF870500C33CFF00000000CFCF5C -:10D69000CFCF0000000000000000000000000000EC +:10D6500000000000000000000000000000000000CA +:10D6600000000000000000000000000000000000BA +:10D6700000000000000000000000000000000000AA +:10D68000000000000000000000000000000000009A +:10D69000000000000000000000000000000000008A :10D6A000000000000000000000000000000000007A :10D6B000000000000000000000000000000000006A :10D6C000000000000000000000000000000000005A -:10D6D00000000000000000000055AAFF000000004C -:10D6E00000FFF0F000000000000000003C3C555539 -:10D6F0003F3F3F3F5F5F5F5FAAF0AAF0FF005555D5 -:10D700000AFA0AFA0F550F55AA00AAFF0000C3C370 +:10D6D000000000000000000000000000000000004A +:10D6E000000000000000000000000000000000003A +:10D6F000000000000000000000000000000000002A +:10D700000000000000000000000000000000000019 :10D710000000000000000000000000000000000009 :10D7200000000000000000000000000000000000F9 :10D7300000000000000000000000000000000000E9 :10D7400000000000000000000000000000000000D9 -:10D75000000000000000000000000055AAFF0000CB -:10D76000000000FFF0F000000000000000003C3C62 -:10D7700055553030303050505050AAF0AAF0FF00CC -:10D7800055550AFA0AFA0F550F55AA00AAFFFFFFCE -:10D79000C3C3000000000000000000000000000003 +:10D7500000000000000000000000000000000000C9 +:10D7600000000000000000000000000000000000B9 +:10D7700000000000000000000000000000000000A9 +:10D780000000000000000000000000000000000099 +:10D790000000000000000000000000000000000089 :10D7A0000000000000000000000000000000000079 :10D7B0000000000000000000000000000000000069 :10D7C0000000000000000000000000000000000059 -:10D7D0000000000000000002000000000000000047 -:10D7E000200020002000200021002100200004044F -:10D7F000040000C0040004800500010004000500CE -:10D800008800880000000000208005002000210022 -:10D81000200084002085208000000000000000001F +:10D7D0000000000000000000000000000000000049 +:10D7E0000000000000000000000000000000000039 +:10D7F0000000000000000000000000000000000029 +:10D800000000000000000000000000000000000018 +:10D810000000000000000000000000000000000008 :10D8200000000000000000000000000000000000F8 :10D8300000000000000000000000000000000000E8 :10D8400000000000000000000000000000000000D8 :10D8500000000000000000000000000000000000C8 -:10D860000000800080008000800084008400800030 -:10D8700080018040002080008004A000040080001F -:10D88000A08200000000000000000004A0000000D2 -:10D89000200000040000000400040000000000005C +:10D8600000000000000000000000000000000000B8 +:10D8700000000000000000000000000000000000A8 +:10D880000000000000000000000000000000000098 +:10D890000000000000000000000000000000000088 :10D8A0000000000000000000000000000000000078 :10D8B0000000000000000000000000000000000068 -:10D8C0000000000000000000040000000000000054 +:10D8C0000000000000000000000000000000000058 :10D8D0000000000000000000000000000000000048 :10D8E0000000000000000000000000000000000038 -:10D8F0000000000000000003000000000021010003 -:10D90000010000000010008000000004000800007A -:10D910008200000002000000000000000000000083 +:10D8F0000000000000000000000000000000000028 +:10D900000000000000000000000000000000000017 +:10D910000000000000000000000000000000000007 :10D9200000000000000000000000000000000000F7 :10D9300000000000000000000000000000000000E7 :10D9400000000000000000000000000000000000D7 :10D9500000000000000000000000000000000000C7 :10D9600000000000000000000000000000000000B7 :10D9700000000000000000000000000000000000A7 -:10D9800020A020A00000000000040000000900000A -:10D9900000A0000000000088000000080000000057 +:10D980000000000000000000000000000000000097 +:10D990000000000000000000000000000000000087 :10D9A0000000000000000000000000000000000077 :10D9B0000000000000000000000000000000000067 :10D9C0000000000000000000000000000000000057 :10D9D0000000000000000000000000000000000047 -:10D9E0000000000000000000000088000080000827 -:10D9F0000000000001000080002100000021001054 -:10DA000000002080200800032021200882088203D3 -:10DA100000410400200304050121010800050080E5 +:10D9E0000000000000000000000000000000000037 +:10D9F0000000000000020000000000000000000025 +:10DA00000000000000000000000000000000000016 +:10DA10000000000000000000000000000000000006 :10DA200000000000000000000000000000000000F6 :10DA300000000000000000000000000000000000E6 :10DA400000000000000000000000000000000000D6 :10DA500000000000000000000000000000000000C6 -:10DA60000000000011000000000000A00000000401 -:10DA70000000000000000488000400A000C00008AE -:10DA800000000000004000C0000080A080000008EE -:10DA90000000000080008002800020C02000000004 -:10DAA0000002000000000000000000000000000074 +:10DA600000000000000000000000000000000000B6 +:10DA700000000000000000000000000000000000A6 +:10DA80000000000000000000000000000000000096 +:10DA90000000000000000000000000000000000086 +:10DAA0000000000000000000000000000000000076 :10DAB0000000000000000000000000000000000066 -:10DAC0000000000000000000000000000000040052 -:10DAD0000000000000000200020000000000000042 -:10DAE0000000000000000000000000002080008016 -:10DAF000000088000040000000040000100010003A -:10DB00001000100040054000400040000880000068 -:10DB10000900088400000800020000000041000025 -:10DB200000400000000000000000000000000000B5 +:10DAC0000000000000000000000000000000000056 +:10DAD0000000000000000000000000000000000046 +:10DAE0000000000000000000000000000000000036 +:10DAF0000000000000000000000000000000000026 +:10DB00000000000000000000000000000000000015 +:10DB10000000000000000000000000000000000005 +:10DB200000000000000000000000000000000000F5 :10DB300000000000000000000000000000000000E5 :10DB400000000000000000000000000000000000D5 :10DB500000000000000000000000000000000000C5 -:10DB60000000000000000000000000000000800431 -:10DB70000004008800000084000000000082000013 -:10DB800000A00088008400000000000000000020C9 -:10DB900000840400002000000000090020000000B4 -:10DBA0000008000400000000000000000000000069 +:10DB600000000000000000000000000000000000B5 +:10DB700000000000000000000000000000000000A5 +:10DB80000000000000000000000000000000000095 +:10DB90000000000000000000000000000000000085 +:10DBA0000000000000000000000000000000000075 :10DBB0000000000000000000000000000000000065 :10DBC0000000000000000000000000000000000055 -:10DBD0000000000000000000000000000000000045 +:10DBD0000000000000000000000000000000200025 :10DBE0000000000000000000000000000000000035 -:10DBF0000000000000009100000020000004000070 -:10DC00000000040000080000000000050080908073 -:10DC100000410000820482100121001000820000F7 -:10DC200000000003000000000000000000000000F1 +:10DBF0000000000000000000000000000000000025 +:10DC00000000000000000000000000000000000014 +:10DC10000000000000000000000000000000000004 +:10DC200000000000000000000000000000000000F4 :10DC300000000000000000000000000000000000E4 :10DC400000000000000000000000000000000000D4 :10DC500000000000000000000000000000000000C4 -:10DC60000000000000000000000000900008000814 -:10DC700000000000000800A0200000008008000153 -:10DC800000A00008800011A011A000A02002000246 -:10DC90002102038403000009008208000000001034 -:10DCA00020C0008400000900000000000000000007 +:10DC600000000000000000000000000000000000B4 +:10DC700000000000000000000000000000000000A4 +:10DC80000000000000000000000000000000000094 +:10DC90000000000000000000000000000000000084 +:10DCA0000000000000000000000000000000000074 :10DCB0000000000000000000000000000000000064 :10DCC0000000000000000000000000000000000054 :10DCD0000000000000000000000000000000000044 -:10DCE0000000000000000000000000000200000032 -:10DCF00000000000200020002000200000000000A4 -:10DD0000002100000021002100032000000000028B -:10DD10000002002101210921010908C10041A004DC -:10DD200000040000002100000000000800000000C6 +:10DCE0000000000000000000000000000000000034 +:10DCF0000000000000000000000000000000000024 +:10DD00000000000000000000000000000000000013 +:10DD10000000000000000000000000000000000003 +:10DD200000000000000000000000000000000000F3 :10DD300000000000000000000000000000000000E3 :10DD400000000000000000000000000000000000D3 :10DD500000000000000000000000000000000000C3 -:10DD600000000000000000000000110000000000A2 -:10DD70000000090009008000800080008900000088 -:10DD80000000000020000000000000000000400033 -:10DD9000000000000000201020082082A0040000E5 -:10DDA00000000000000000000090009004840000CB +:10DD600000000000000000000000000000000000B3 +:10DD700000000000000000000000000000000000A3 +:10DD80000000000000000000000000000000000093 +:10DD90000000000000000000000000000000000083 +:10DDA0000000000000000000000000000000000073 :10DDB0000000000000000000000000000000000063 :10DDC0000000000000000000000000000000000053 :10DDD0000000000000000000000000000000000043 -:10DDE0000000000000000000000000000100000230 -:10DDF0000000000100000000000000000000000022 -:10DE00000001010000000000011000024008C010E5 -:10DE10000000000000000000000090000000000072 -:10DE200000A0C0A0010090840000000000000000DD +:10DDE0000000000000000000000000000000000033 +:10DDF0000000000000000000000000000000000023 +:10DE00000000000000000000000000000000000012 +:10DE10000000000000000000000000000000000002 +:10DE200000000000000000000000000000000000F2 :10DE300000000000000000000000000000000000E2 :10DE400000000000000000000000000000000000D2 :10DE500000000000000000000000000000000000C2 -:10DE6000000000000000000000000000400005006D -:10DE70000000000000050000000000000000090094 -:10DE800000000011400500100000028000008080AA -:10DE900080800000000002000000000080000200FE -:10DEA000000000800000030080000000000011005E +:10DE600000000000000000000000000000000000B2 +:10DE7000000000000004000000000000000000009E +:10DE80000000000000000000000000000000000092 +:10DE90000000000000000000000000000000000082 +:10DEA0000000000000000000000000000000000072 :10DEB0000000000000000000000000000000000062 :10DEC0000000000000000000000000000000000052 :10DED0000000000000000000000000000000000042 :10DEE0000000000000000000000000000000000032 -:10DEF0000000000000020003000000800005000098 -:10DF000000040000110002800900058400000009DF -:10DF100000008000000202002002800080080080D3 -:10DF20000008008080400411804000000040000094 -:10DF300000400000000000000000000000000000A1 +:10DEF0000000000000000010000000000000000012 +:10DF00000000000000000000000000000000000011 +:10DF10000000000000000000000000000000000001 +:10DF200000000000000000000000000000000000F1 +:10DF300000000000000000000000000000000000E1 :10DF400000000000000000000000000000000000D1 :10DF500000000000000000000000000000000000C1 :10DF600000000000000000000000000000000000B1 -:10DF70000000000000000000000100000040000060 -:10DF800000840001000000000104000000044000C3 -:10DF900000001002900000010284010108900801B5 -:10DFA00000080001041010000001A000840000001F +:10DF700000000000000000000000000000000000A1 +:10DF80000000000000000000000000000000000091 +:10DF90000000000000000000000000000000000081 +:10DFA0000000000000000000000000000000000071 :10DFB0000000000000000000000000000000000061 :10DFC0000000000000000000000000000000000051 :10DFD0000000000000000000000000000000000041 :10DFE0000000000000000000000000000000000031 -:10DFF00000000000000000000000000140100000D0 -:10E000000100040000000000000000000400000106 -:10E01000004000029010020900008201100001017E -:10E020000000C000080001004000400210C00400D1 -:10E0300000000401000000010000000000000000DA +:10DFF000000000000000000000000000000400001D +:10E000000000000000000000000000000000000010 +:10E010000000000000000000000000000000000000 +:10E0200000000000000000000000000000000000F0 +:10E0300000000000000000000000000000000000E0 :10E0400000000000000000000000000000000000D0 :10E0500000000000000000000000000000000000C0 :10E0600000000000000000000000000000000000B0 -:10E07000000000000000000000000000000300217C -:10E0800004000500000000000200051009098909CC -:10E090000011008400028091C09111020040000034 -:10E0A00002202000800080004100800000800000ED -:10E0B000C00000048020000040400000000000007C +:10E07000000000000000000000000000000000039D +:10E080000000000000000000000000000000000090 +:10E090000000000000000000000000000000000080 +:10E0A0000000000000000000000000000000000070 +:10E0B0000000000000000000000000000000000060 :10E0C0000000000000000000000000000000000050 :10E0D0000000000000000000000000000000000040 :10E0E0000000000000000000000000000000000030 -:10E0F00000000000000000000000000041000000DF -:10E1000000000000000200000000000041090903B7 -:10E1100009000300800280008080000000090011D7 -:10E1200000800000000200110000000080090000D3 -:10E130000080000400020000000000000000000059 +:10E0F0000000000000000000000000000000000020 +:10E10000000000000000000000000000000000000F +:10E1100000000000000000000000000000000000FF +:10E1200000000000000000000000000000000000EF +:10E1300000000000000000000000000000000000DF :10E1400000000000000000000000000000000000CF :10E1500000000000000000000000000000000000BF :10E1600000000000000000000000000000000000AF :10E17000000000000000000000000000000000009F -:10E1800000000040000800000000000000000088BF -:10E19000000000000000900082021010000000C08B -:10E1A000000000080000000000000010000002C095 -:10E1B00000A0C0A00000000000000000000000005F +:10E18000000000020000000000000000000000008D +:10E19000000000000000000000000000000000007F +:10E1A000000000000000000000000000000000006F +:10E1B000000000000000000000000000000000005F :10E1C000000000000000000000000000000000004F :10E1D000000000000000000000000000000000003F :10E1E000000000000000000000000000000000002F :10E1F000000000000000000000000000000000001F -:10E200000000000000000000810000E000000000AD -:10E21000818100E007000000818100E00700000A22 -:10E22000818100E007000000810000E00600820616 -:10E23000818100E007000000810000E00000000094 +:10E20000000000000000000000000000000000000E +:10E2100000000000000000000000000000000000FE +:10E2200000000000000000000000000000000000EE +:10E2300000000000000000000000000000000000DE :10E2400000000000000000000000000000000000CE :10E2500000000000000000000000000000000000BE :10E2600000000000000000000000000000000000AE :10E27000000000000000000000000000000000009E :10E28000000000000000000000000000000000008E -:10E2900000000000000000000000F0FAF5FF0CFF95 -:10E2A000FCFF000000000000000000000000000073 -:10E2B00000000F0FFFFFFFF0FFF000000000000064 +:10E29000000000000000000000000000000000007E +:10E2A000000000000000000000000000000000006E +:10E2B000000000000000000000000000000000005E :10E2C000000000000000000000000000000000004E :10E2D000000000000000000000000000000000003E :10E2E000000000000000000000000000000000002E :10E2F000000000000000000000000000000000001E :10E30000000000000000000000000000000000000D -:10E3100000000000000000000000000000AA05AF9F -:10E320000C00FCF0000000000000000000000000F5 -:10E33000000000000000F0F000F000F0000000001D +:10E3100000000000000000000000000000000000FD +:10E3200000000000000000000000000000000000ED +:10E3300000000000000000000000000000000000DD :10E3400000000000000000000000000000000000CD :10E3500000000000000000000000000000000000BD :10E3600000000000000000000000000000000000AD :10E37000000000000000000000000000000000009D :10E38000000000000000000000000000000000008D -:10E390000000000000000000000000000000FF4D31 -:10E3A0000C4D7D3C7D3C0000000000000F0F000084 -:10E3B00000000000C3C3BE82BE825555C3000000EA +:10E39000000000000000000000000000000000007D +:10E3A000000000000000000000000000000000006D +:10E3B000000000000000000000000000000000005D :10E3C000000000000000000000000000000000004D :10E3D000000000000000000000000000000000003D :10E3E000000000000000000000000000000000002D :10E3F000000000000000000000000000000000001D :10E40000000000000000000000000000000000000C :10E4100000000000000000000000000000000000FC -:10E42000FF4D0C4DFFAA550000000000F0F0FFFF6B -:10E43000000000003C3CFFFFFFC33C005555FF3C83 +:10E4200000000000000000000000000000000000EC +:10E4300000000000000000000000000000000000DC :10E4400000000000000000000000000000000000CC :10E4500000000000000000000000000000000000BC :10E4600000000000000000000000000000000000AC :10E47000000000000000000000000000000000009C :10E48000000000000000000000000000000000008C -:10E49000000000610007800D000005610A28850169 -:10E4A00000A0006100268009000005610A2F850D8B -:10E4B00000A105610A0F850D00A000610027800DF5 -:10E4C000000000610007800D000000000000000057 +:10E49000000000000000000000000000000000007C +:10E4A000000000000000000000000000000000006C +:10E4B000000000000000000000000000000000005C +:10E4C000000000000000000000000000000000004C :10E4D000000000000000000000000000000000003C :10E4E000000000000000000000000000000000002C :10E4F000000000000000000000000000000000001C :10E50000000000000000000000000000000000000B -:10E51000000000000000000000000000FF3FFF308E -:10E5200030FF3FFF0000000030BA3FBA000000009B -:10E53000CFCF0C0C00000000000000000000000025 -:10E5400000000000000000003F3F03030000000047 +:10E5100000000000000000000000000000000000FB +:10E5200000000000000000000000000000000000EB +:10E5300000000000000000000000000000000000DB +:10E5400000000000000000000000000000000000CB :10E5500000000000000000000000000000000000BB :10E5600000000000000000000000000000000000AB :10E57000000000000000000000000000000000009B :10E58000000000000000000000000000000000008B -:10E5900000000000000000000000000000000F3F2D -:10E5A000003030303F300000000030BA3FBA000089 -:10E5B0000000CFCF0C0C00000000000000000000A5 -:10E5C000000000000000000000003F3F03030000C7 +:10E59000000000000000000000000000000000007B +:10E5A000000000000000000000000000000000006B +:10E5B000000000000000000000000000000000005B +:10E5C000000000000000000000000000000000004B :10E5D000000000000000000000000000000000003B :10E5E000000000000000000000000000000000002B :10E5F000000000000000000000000000000000001B :10E60000000000000000000000000000000000000A :10E6100000000000000000000000000000000000FA -:10E62000FF05FF05F0F0F0FF000000000000000013 -:10E63000000000000F000F000000000000000000BC -:10E64000000000005050505000000000000000008A +:10E6200000000000000000000000000000000000EA +:10E6300000000000000000000000000000000000DA +:10E6400000000000000000000000000000000000CA :10E6500000000000000000000000000000000000BA :10E6600000000000000000000000000000000000AA :10E67000000000000000000000000000000000009A :10E68000000000000000000000000000000000008A :10E69000000000000000000000000000000000007A -:10E6A0000000AFAF05053C003CFF0000000000008B -:10E6B000000000000000FFF0FFF00000000000007C -:10E6C0000000000000005F5F5F5F000000000000CE +:10E6A000000000000000000000000000000000006A +:10E6B000000000000000000000000000000000005A +:10E6C000000000000000000000000000000000004A :10E6D000000000000000000000000000000000003A :10E6E000000000000000000000000000000000002A :10E6F000000000000000000000000000000000001A @@ -212651,190 +212651,190 @@ :10E7600000000000000000000000000000000000A9 :10E770000000000000000000000000000000000099 :10E780000000000000000000000000000000000089 -:10E7900000000000000204000400040000800002E9 -:10E7A00000800080008000000000000000000000E9 -:10E7B0000000000004002010200020000000408025 -:10E7C000408040804080200088008200200020009F -:10E7D0000480200020000000000000000000000075 +:10E790000000000000000000000000000000000079 +:10E7A0000000000000000000000000000000000069 +:10E7B0000000000000000000000000000000000059 +:10E7C0000000000000000000000000000000000049 +:10E7D0000000000000000000000000000000000039 :10E7E0000000000000000000000000000000000029 :10E7F0000000000000000000000000000000000019 :10E800000000000000000000000000000000000008 -:10E810000000000000000000800880008000002050 -:10E8200000010004000400040000000000000000DB -:10E8300000000000000400000000000000000000D4 -:10E84000800480048004802080000000000080009C -:10E850008000800480000000000000000000000034 +:10E8100000000000000000000000000000000000F8 +:10E8200000000000000000000000000000000000E8 +:10E8300000000000000000000000000000000000D8 +:10E8400000000000000000000000000000000000C8 +:10E8500000000000000000000000000000000000B8 :10E8600000000000000000000000000000000000A8 :10E870000000000000000000000000000000000098 :10E880000000000000000000000000000000000088 :10E890000000000000000000000000000000000078 :10E8A0000000000000000000000000000000000068 -:10E8B00000000000000002000200000090090000BB -:10E8C000000001000100000000000000000900003D -:10E8D000000000000009000000000000000000002F +:10E8B0000000000000000000000000000000000058 +:10E8C0000000000000000000000000000000000048 +:10E8D0000000000000000000000000000000000038 :10E8E0000000000000000000000000000000000028 :10E8F0000000000000000000000000000000000018 -:10E900000000000004000000020000000000000001 +:10E900000000000000000000000000000000000007 :10E9100000000000000000000000000000000000F7 :10E9200000000000000000000000000000000000E7 -:10E9300000000000000000000000000000080000CF -:10E94000000000000482040000000000000000003D +:10E9300000000000000000000000000400000000D3 +:10E9400000000000000000000000000000080000BF :10E9500000000000000000000000000000000000B7 :10E9600000000000000000000000000000000000A7 :10E970000000000000000000000000000000000097 :10E980000000000000000000000000000000000087 :10E990000000000000000000000000000000000077 -:10E9A0000000000000000000000000004000000027 -:10E9B0000000000090000000001000210000000096 -:10E9C00000000000000000800080042004A000007F -:10E9D00000000000000000000000084104050000E5 +:10E9A0000000000000000000000000000000000067 +:10E9B0000000000000000000000000000000000057 +:10E9C0000000000000000000000000000000000047 +:10E9D0000000000000000000000000000000000037 :10E9E0000000000000000000000000000000000027 :10E9F0000000000000000000000000000000000017 :10EA00000000000000000000000000000000000006 -:10EA100000000000000000000000000000000000F6 -:10EA200000000000000000000000000000A08000C6 -:10EA300000000000000000000010001000000000B6 -:10EA400041000010000000000020002080A180058F -:10EA50000000000000840000000000008088910099 +:10EA100000000000000000000000000000080000EE +:10EA20000000000000000000008400000000000062 +:10EA30000000000000000000000000000040000096 +:10EA400000000000000000000000000000000000C6 +:10EA500000000000000000000000000000000000B6 :10EA600000000000000000000000000000000000A6 :10EA70000000000000000000000000000000000096 :10EA80000000000000000000000000000000000086 :10EA90000000000000000000000000000000000076 :10EAA0000000000000000000000000000000000066 :10EAB0000000000000000000000000000000000056 -:10EAC00000000000A000000000008800000000001E -:10EAD00000110000000401000000004000000011CF -:10EAE00020110000000000000000000000000000F5 +:10EAC0000000000000000000000000000000000046 +:10EAD0000000000000000000000000000000000036 +:10EAE0000000000000000000000000000000000026 :10EAF0000000000000000000000000000000000016 :10EB00000000000000000000000000000000000005 -:10EB100000000000000000000000000000001100E4 +:10EB100000000000000000000000000000000000F5 :10EB200000000000000000000000000000000000E5 -:10EB30000000000000000000000000C00000000015 +:10EB300000000000000000000000000000000000D5 :10EB400000000000000000000000000000000000C5 -:10EB5000009000820000000120C000000090000032 -:10EB60000000800000000000000000000000000025 +:10EB500000000000000000000000000000000000B5 +:10EB600000000000000000000000000000000000A5 :10EB70000000000000000000000000000000000095 :10EB80000000000000000000000000000000000085 :10EB90000000000000000000000000000000000075 -:10EBA00000000000000001000080000000000100E3 -:10EBB0000000000000000000000000000041000014 -:10EBC0002000000000000000000000000000000025 -:10EBD0000000000000000008A00000080005000080 -:10EBE0000100000000000000000000000000000024 +:10EBA0000000000000000000000000000000000065 +:10EBB0000000000000000000000000000000000055 +:10EBC0000000000000000000000000000000000045 +:10EBD0000000000000000000000000000000000035 +:10EBE0000000000000000000000000000000000025 :10EBF0000000000000000000000000000000000015 :10EC00000000000000000000000000000000000004 :10EC100000000000000000000000000000000000F4 -:10EC200000000000000000000800001000000000CC -:10EC30002000000000000010000000C000000002E2 -:10EC40000000000000A000A000C00000200000C0E4 -:10EC50000000000000840000000000000000000030 -:10EC600000000400000000000000000000000000A0 +:10EC200000000000000000000000000000000000E4 +:10EC300000000000000000000000000000000000D4 +:10EC400000000000000000000000000000000000C4 +:10EC500000000000000000000000000000000000B4 +:10EC600000000000000000000000000000000000A4 :10EC70000000000000000000000000000000000094 :10EC80000000000000000000000000000000000084 :10EC90000000000000000000000000000000000074 -:10ECA00000000000000000000000000090002000B4 -:10ECB000200000410021000400000000000000418D -:10ECC0000000000004000000000020000000000020 -:10ECD0000000900090008800000000050004000281 -:10ECE0000004084140000040400500000000000012 +:10ECA0000000000000000000000000000000000064 +:10ECB000000000000000000000000008000000004C +:10ECC0000000000000000000000000000000000044 +:10ECD0000000000000000000000000000000000034 +:10ECE0000000000000000000000000000000000024 :10ECF0000000000000000000000000000000000014 :10ED00000000000000000000000000000000000003 :10ED100000000000000000000000000000000000F3 -:10ED200000000000000000000000000000002000C3 -:10ED30000000000000080000110000C000040000F6 -:10ED400011000000000000000000000000000000B2 -:10ED5000000011000000000000A000000000000002 -:10ED60000000000080008200000080000000000021 +:10ED200000000000000000000000000000000000E3 +:10ED300000000000000000000000000000000000D3 +:10ED400000000000000000000000000000000000C3 +:10ED500000000000000000000000000000000000B3 +:10ED600000000000000000000000000000000000A3 :10ED70000000000000000000000000000000000093 :10ED80000000000000000000000000000000000083 :10ED90000000000000000000000000000000000073 :10EDA0000000000000000000000000000000000063 -:10EDB0000408008200840000000001000000000040 +:10EDB0000000000000000000000000000000000053 :10EDC0000000000000000000000000000000000043 -:10EDD000000000000000010000910100100001008F -:10EDE00000010400000000840420018890820000DB +:10EDD0000000000000000000000000000000000033 +:10EDE0000000000000000000000000000000000023 :10EDF0000000000000000000000000000000000013 :10EE00000000000000000000000000000000000002 :10EE100000000000000000000000000000000000F2 :10EE200000000000000000000000000000000000E2 -:10EE300000000080008000000000001008100005A5 +:10EE300000000000000000000000000000000000D2 :10EE400000000000000000000000000000000000C2 -:10EE500000000000000000004005218320000002A7 -:10EE600011050404804100000000000020808000A3 +:10EE500000000000000000000000000000000000B2 +:10EE600000000000000000000000000000000000A2 :10EE70000000000000000000000000000000000092 :10EE80000000000000000000000000000000000082 :10EE90000000000000000000000000000000000072 :10EEA0000000000000000000000000000000000062 -:10EEB0000000000000040000000000000000000549 +:10EEB0000000000000000000000000000000000052 :10EEC0000000000000000000000000000000000042 -:10EED00000000000000000000000000020100800FA -:10EEE00080000000410004110404800900110009A1 -:10EEF000000300000000000000000000000000000F +:10EED0000000000000000000000000000000000032 +:10EEE0000000000000000000000000000000000022 +:10EEF0000000000000000000000000000000000012 :10EF00000000000000000000000000000000000001 :10EF100000000000000000000000000000000000F1 :10EF200000000000000000000000000000000000E1 -:10EF300000000000000000000000000400000000CD +:10EF300000000000000000000000000000000000D1 :10EF400000000000000000000000000000000000C1 -:10EF500000000000000000000000000000A0110000 -:10EF6000010090A000000000000101008800840161 -:10EF7000000082010000000000000000000000000E +:10EF500000000000000000000000000000000000B1 +:10EF600000000000000000000000000000000000A1 +:10EF70000000000000000000000000000000000091 :10EF80000000000000000000000000000000000081 :10EF90000000000000000000000000000000000071 :10EFA0000000000000000000000000000000000061 -:10EFB0000000000000000000000008000000000049 -:10EFC000040000000000000000000000000000003D -:10EFD0000000000000000000000000000000101011 -:10EFE0000000009010000000000004010101000179 -:10EFF00000880083C1000000000000000000000045 +:10EFB0000000000000000000000000000000000051 +:10EFC0000000000000000000000000000000000041 +:10EFD0000000000000000000000000000000000031 +:10EFE0000000000000000000000000000000000021 +:10EFF0000000000000000000000000000000000011 :10F000000000000000000000000000000000000000 :10F0100000000000000000000000000000000000F0 :10F0200000000000000000000000000000000000E0 -:10F030000000000000000000000000008000000050 -:10F040000011800000090005000000000000000021 +:10F0300000000000000000000000000000000000D0 +:10F0400000000000000000000000000000000000C0 :10F0500000000000000000000000000000000000B0 -:10F0600000110000008080090010040085051108CF -:10F0700000400000000588090000000000000000BA +:10F0600000000000000000000000000000000000A0 +:10F070000000000000000000000000000000000090 :10F080000000000000000000000000000000000080 :10F090000000000000000000000000000000000070 :10F0A0000000000000000000000000000000000060 -:10F0B0000000000000000000000000090020000027 -:10F0C000000000040000000000000000000000003C +:10F0B0000000000000000000000000000000000050 +:10F0C0000000000000000000000000000000000040 :10F0D0000000000000000000000000000000000030 -:10F0E000000091898940000000004189041103005B -:10F0F000034000048000020009000000000000003E +:10F0E0000000000000000000000000000000000020 +:10F0F0000000000000000000000000000000000010 :10F1000000000000000000000000000000000000FF :10F1100000000000000000000000000000000000EF :10F1200000000000000000000000000000000000DF -:10F1300000000000000000000000000000001001BE -:10F14000000084000000000000000000000000003B +:10F1300000000000000000000000000000000000CF +:10F1400000000000000000000000000000000000BF :10F1500000000000000000000000000000000000AF -:10F16000000000009010101100000000004000019D -:10F1700001000000000008908288000000000000EC +:10F16000000000000000000000000000000000009F +:10F17000000000000000000000000000000000008F :10F18000000000000000000000000000000000007F :10F19000000000000000000000000000000000006F :10F1A000000000000000000000000000000000005F -:10F1B00000000000000000000000000000000081CE -:10F1C000000007000000810000E0000000000000D7 +:10F1B000000000000000000000000000000000004F +:10F1C000000000000000000000000000000000003F :10F1D000000000000000000000000000000000002F -:10F1E000000000000000810000E007000000810036 -:10F1F00000E000000000818100E0070000820000C4 +:10F1E000000000000000000000000000000000001F +:10F1F000000000000000000000000000000000000F :10F2000000000000000000000000000000000000FE :10F2100000000000000000000000000000000000EE :10F2200000000000000000000000000000000000DE :10F2300000000000000000000000000000000000CE -:10F24000FFC3FFC30000000000000000000000003A +:10F2400000000000000000000000000000000000BE :10F2500000000000000000000000000000000000AE -:10F260000000000000000000FF00FF00FF3CFF3C2A -:10F270000000000000000000FF0FFF0FF0FFF0FF94 +:10F26000000000000000000000000000000000009E +:10F27000000000000000000000000000000000008E :10F28000000000000000000000000000000000007E :10F29000000000000000000000000000000000006E :10F2A000000000000000000000000000000000005E :10F2B000000000000000000000000000000000004E -:10F2C00000003C003C0000000000000000000000C6 +:10F2C000000000000000000000000000000000003E :10F2D000000000000000000000000000000000002E -:10F2E00000000000000000000000FFFF0000C3005D -:10F2F000C3000000000000000000F000F000F0007B -:10F30000F00000000000000000000000000000000D +:10F2E000000000000000000000000000000000001E +:10F2F000000000000000000000000000000000000E +:10F3000000000000000000000000000000000000FD :10F3100000000000000000000000000000000000ED :10F3200000000000000000000000000000000000DD :10F3300000000000000000000000000000000000CD @@ -212846,116 +212846,116 @@ :10F39000000000000000000000000000000000006D :10F3A000000000000000000000000000000000005D :10F3B000000000000000000000000000000000004D -:10F3C000000000000000033F033F000000000000B9 +:10F3C000000000000000000000000000000000003D :10F3D000000000000000000000000000000000002D -:10F3E0000000000000000000000000000000666651 -:10F3F00066660606F6F60000000000000000430105 -:10F400007F3D99990F0F00000000000000000000F0 +:10F3E000000000000000000000000000000000001D +:10F3F000000000000000000000000000000000000D +:10F4000000000000000000000000000000000000FC :10F4100000000000000000000000000000000000EC :10F4200000000000000000000000000000000000DC :10F4300000000000000000000000000000000000CC -:10F440000000000000000000033F033F0000000038 +:10F4400000000000000000000000000000000000BC :10F4500000000000000000000000000000000000AC :10F46000000000000000000000000000000000009C -:10F4700000FF00FF0606F6F6000000000000000096 -:10F4800043017F3D3C3C0F0F0000000000000000E6 +:10F47000000000000000000000000000000000008C +:10F48000000000000000000000000000000000007C :10F49000000000000000000000000000000000006C :10F4A000000000000000000000000000000000005C :10F4B000000000000000000000000000000000004C -:10F4C000000000000000000000000000002805000F -:10F4D00000A000610003800900000000000000009F +:10F4C000000000000000000000000000000000003C +:10F4D000000000000000000000000000000000002C :10F4E000000000000000000000000000000000001C -:10F4F000000000610009800100000061000080013F -:10F50000000080610025801900000000000000005C +:10F4F000000000000000000000000000000000000C +:10F5000000000000000000000000000000000000FB :10F5100000000000000000000000000000000000EB :10F5200000000000000000000000000000000000DB :10F5300000000000000000000000000000000000CB :10F5400000000000000000000000000000000000BB -:10F55000000000000000000000FF3C3C0000000034 +:10F5500000000000000000000000000000000000AB :10F56000000000000000000000000000000000009B -:10F5700000000000FF005555C3C3FFFFFFFF3C0F15 -:10F580002828FFFFCFCFCFCF3C3C00FF000000007A +:10F57000000000000000000000000000000000008B +:10F58000000000000000000000000000000000007B :10F59000000000000000000000000000000000006B :10F5A000000000000000000000000000000000005B :10F5B000000000000000000000000000000000004B :10F5C000000000000000000000000000000000003B -:10F5D0000000000000000000000000FF3C3C0000B4 +:10F5D000000000000000000000000000000000002B :10F5E000000000000000000000000000000000001B -:10F5F000000000000000FF00555500003C3C3C00AE -:10F600003C0F287D287D0C0C0C0C3C3C00FF0000BE +:10F5F000000000000000000000000000000000000B +:10F6000000000000000000000000000000000000FA :10F6100000000000000000000000000000000000EA :10F6200000000000000000000000000000000000DA :10F6300000000000000000000000000000000000CA :10F6400000000000000000000000000000000000BA -:10F650000000000000000000CF0CCF0C00000000F4 +:10F6500000000000000000000000000000000000AA :10F66000000000000000000000000000000000009A -:10F670000000000000000000FF3CC30000FF00FF8E -:10F68000FF55FF0000AAFFFF00000000000000007F +:10F67000000000000000000000000000000000008A +:10F68000000000000000000000000000000000007A :10F69000000000000000000000000000000000006A :10F6A000000000000000000000000000000000005A :10F6B000000000000000000000000000000000004A :10F6C000000000000000000000000000000000003A -:10F6D00000000000000000000000CF0CCF0C000074 +:10F6D000000000000000000000000000000000002A :10F6E000000000000000000000000000000000001A -:10F6F00000000000000000000000FF3CC300F0F02C -:10F70000F0F05F5F0A0AF0AAF0AA00000000000013 +:10F6F000000000000000000000000000000000000A +:10F7000000000000000000000000000000000000F9 :10F7100000000000000000000000000000000000E9 :10F7200000000000000000000000000000000000D9 :10F7300000000000000000000000000000000000C9 :10F7400000000000000000000000000000000000B9 -:10F750000000000200000000000000000100210085 -:10F760002100210000000000000000000000000057 -:10F770000000000020000080008020000000200029 -:10F780002000200000000400040000000000000031 +:10F7500000000000000000000000000000000000A9 +:10F760000000000000000000000000000000000099 +:10F770000000000000000000000000000000000089 +:10F780000000000000000000000000000000000079 :10F790000000000000000000000000000000000069 :10F7A0000000000000000000000000000000000059 :10F7B0000000000000000000000000000000000049 :10F7C0000000000000000000000000000000000039 -:10F7D0000000000000000000000000000000200009 -:10F7E000A000A000A0000000000000000000000039 -:10F7F0000000000000008000000400048000000001 +:10F7D0000000000000000000000000000000000029 +:10F7E0000000000000000000000000000000000019 +:10F7F0000000000000000000000000000000000009 :10F8000000000000000000000000000000000000F8 :10F8100000000000000000000000000000000000E8 :10F8200000000000000000000000000000000000D8 -:10F8300000000000020000000000000000000000C6 +:10F8300000000000000000000000000000000000C8 :10F8400000000000000000000000000000000000B8 -:10F8500000000000000000000100010001000100A4 -:10F860000000000000000000010001000100200075 +:10F8500000000000000000000000000000000000A8 +:10F860000000000000000000000000000000000098 :10F870000000000000000000000000000000000088 :10F880000000000000000000000000000000000078 :10F890000000000000000000000000000000000068 :10F8A0000000000000000000000000000000000058 :10F8B0000000000000000000000000000000000048 -:10F8C0000000000002000200000000000000000034 -:10F8D00000000000000000000000200020002000C8 -:10F8E0002000000000000000000020002000200098 -:10F8F0008000000000000000000000000000000088 -:10F90000000000000000000800C00000000000002F -:10F9100000000000000005000004000000000000DE +:10F8C0000000000000000000000000000000000038 +:10F8D0000000000000000000000000000000000028 +:10F8E0000000000000000000000000000000000018 +:10F8F0000000000000000000000000000000000008 +:10F9000000000000000000000000000000000000F7 +:10F9100000000000000000000000000000000000E7 :10F9200000000000000000000000000000000000D7 :10F9300000000000000000000000000000000000C7 :10F9400000000000000000000000000000000000B7 :10F9500000000000000000000000000000000000A7 -:10F960000000000020000000000000210000000056 -:10F97000000000000000000000000008000000037C -:10F980000000000800000008000000000041000323 -:10F990000021000000000000000000000000000046 +:10F960000000000000000000000000000000000097 +:10F970000000000000000000000000000000000087 +:10F980000000000000000000000000000000000077 +:10F990000000000000000000000000000000000067 :10F9A0000000000000000000000000000000000057 :10F9B0000000000000000000000000000000000047 :10F9C0000000000000000000000000000000000037 :10F9D0000000000000000000000000000000000027 -:10F9E0000000000000008000001000000000001077 -:10F9F00000A0000000000000000000000010001047 -:10FA000000000000000000000082000000000084F0 -:10FA1000208200A000000010000000000000000094 +:10F9E0000000000000000000000000000000000017 +:10F9F0000000000000000000000000000000000007 +:10FA000000000000000000000000000000000000F6 +:10FA100000000000000000000000000000000000E6 :10FA200000000000000000000000000000000000D6 :10FA300000000000000000000000000000000000C6 :10FA400000000000000000000000000000000000B6 :10FA500000000000000000000000000000000000A6 -:10FA60000000000040000000000000000000000056 +:10FA60000000000000000000000000000000000096 :10FA70000000000000000000000000000000000086 -:10FA80000010000000000000000000000000000066 -:10FA90000040000000000000000000000000020024 +:10FA80000000000000000000000000000000000076 +:10FA90000000000000000000000000000000000066 :10FAA0000000000000000000000000000000000056 :10FAB0000000000000000000000000000000000046 :10FAC0000000000000000000000000000000000036 @@ -212969,26 +212969,26 @@ :10FB400000000000000000000000000000000000B5 :10FB500000000000000000000000000000000000A5 :10FB60000000000000000000000000000000000095 -:10FB70000000000000050000000000000000000080 -:10FB80000000000000000000000400000008000069 -:10FB9000000000000041000000000000000800001C +:10FB70000000000000000000000000000000000085 +:10FB80000000000000000000000000000000000075 +:10FB90000000000000000000000000000000000065 :10FBA0000000000000000000000000000000000055 :10FBB0000000000000000000000000000000000045 :10FBC0000000000000000000000000000000000035 :10FBD0000000000000000000000000000000000025 :10FBE0000000000000000000000000000000000015 -:10FBF0000000000000080000000000000084000079 -:10FC000000000000000000000000000100000000F3 -:10FC1000000000C00000001000000000000000080C -:10FC2000090000C000080000000000000000000003 +:10FBF0000000000000000000000000000000000005 +:10FC000000000000000000000000000000000000F4 +:10FC100000000000000000000000000000000000E4 +:10FC200000000000000000000000000000000000D4 :10FC300000000000000000000000000000000000C4 :10FC400000000000000000000000000000000000B4 :10FC500000000000000000000000000000000000A4 :10FC60000000000000000000000000000000000094 -:10FC70000200020002080200000000210000000053 -:10FC80000010002100000010000000000000000033 -:10FC90000000000000000011000000000000000053 -:10FCA00000400000200000000000000000000000F4 +:10FC70000000000000000000000000000000000084 +:10FC80000000000000000000000000000000000074 +:10FC90000000000000000000000000000000000064 +:10FCA0000000000000000000000000000000000054 :10FCB0000000000000000000000000000000000044 :10FCC0000000000000000000000000000000000034 :10FCD0000000000000000000000000000000000024 @@ -212996,80 +212996,80 @@ :10FCF0000000000000000000000000000000000004 :10FD000000000000000000000000000000000000F3 :10FD100000000000000000000000000000000000E3 -:10FD200000002088000000000040000000000000EB +:10FD200000000000000000000000000000000000D3 :10FD300000000000000000000000000000000000C3 :10FD400000000000000000000000000000000000B3 :10FD500000000000000000000000000000000000A3 -:10FD60000000000000000000000000020000000091 -:10FD70000100000100010001000000000001C000BE -:10FD800082000000000000000000000001010100EE -:10FD9000A0000000000000000000000000000000C3 +:10FD60000000000000000000000000000000000093 +:10FD70000000000000000000000000000000000083 +:10FD80000000000000000000000000000000000073 +:10FD90000000000000000000000000000000000063 :10FDA0000000000000000000000000000000000053 :10FDB0000000000000000000000000000000000043 :10FDC0000000000000000000000000000000000033 :10FDD0000000000000000000000000000000000023 :10FDE0000000000000000000000000000000000013 -:10FDF000000002090008001100401100000000048A -:10FE00000509C00500020000000000000000110804 -:10FE1000412100000004000000000000000000007C +:10FDF0000000000000000000000000000000000003 +:10FE000000000000000000000000000000000000F2 +:10FE100000000000000000000000000000000000E2 :10FE200000000000000000000000000000000000D2 :10FE300000000000000000000000000000000000C2 :10FE400000000000000000000000000000000000B2 :10FE500000000000000000000000000000000000A2 :10FE60000000000000000000000000000000000092 -:10FE700000000000000010000000410040110000E0 -:10FE8000050009000400000500000000000000005B -:10FE90001100020002000404000000000000000045 +:10FE70000000000000000000000000000000000082 +:10FE80000000000000000000000000000000000072 +:10FE90000000000000000000000000000000000062 :10FEA0000000000000000000000000000000000052 :10FEB0000000000000000000000000000000000042 :10FEC0000000000000000000000000000000000032 :10FED0000000000000000000000000000000000022 :10FEE0000000000000000000000000000000000012 -:10FEF00000000002000000000000000000000101FE -:10FF000000000000000001000000000000000000F0 +:10FEF0000000000000000000000000000000000002 +:10FF000000000000000000000000000000000000F1 :10FF100000000000000000000000000000000000E1 :10FF200000000000000000000000000000000000D1 :10FF300000000000000000000000000000000000C1 :10FF400000000000000000000000000000000000B1 :10FF500000000000000000000000000000000000A1 :10FF60000000000000000000000000000000000091 -:10FF7000000000000001000000000000000000017F -:10FF8000000101000001000000000000000000006E -:10FF9000000000000001000000000100000000005F +:10FF70000000000000000000000000000000000081 +:10FF80000000000000000000000000000000000071 +:10FF90000000000000000000000000000000000061 :10FFA0000000000000000000000000000000000051 :10FFB0000000000000000000000000000000000041 :10FFC0000000000000000000000000000000000031 :10FFD0000000000000000000000000000000000021 :10FFE0000000000000000000000000000000000011 -:10FFF00000000000000000200000000900000000D8 +:10FFF0000000000000000000000000000000000001 :020000040034C6 -:10000000094000051104000800090000000200007A -:10001000000000000000000810110404110000009E +:1000000000000000000000000000000000000000F0 +:1000100000000000000000000000000000000000E0 :1000200000000000000000000000000000000000D0 :1000300000000000000000000000000000000000C0 :1000400000000000000000000000000000000000B0 :1000500000000000000000000000000000000000A0 :100060000000000000000000000000000000000090 -:1000700000000000000000000080000009000000F7 -:1000800020004011030000002000090000000202CF -:100090000000000000000000080411000200090038 +:100070000000000000000000000000000000000080 +:100080000000000000000000000000000000000070 +:100090000000000000000000000000000000000060 :1000A0000000000000000000000000000000000050 :1000B0000000000000000000000000000000000040 :1000C0000000000000000000000000000000000030 :1000D0000000000000000000000000000000000020 :1000E0000000000000000000000000000000000010 -:1000F0000000000000000000000000C00000000040 -:10010000000001C00101010000000100000000002A -:100110000000000000000000000001890100000054 +:1000F0000000000000000000000000000000000000 +:1001000000000000000000000000000000000000EF +:1001100000000000000000000000000000000000DF :1001200000000000000000000000000000000000CF :1001300000000000000000000000000000000000BF :1001400000000000000000000000000000000000AF :10015000000000000000000000000000000000009F :10016000000000000000000000000000000000008F -:10017000000000000000000000000000000000601F -:1001800000004200000000E00000000000000060ED -:10019000000000000000000000000000810000E0FE -:1001A00000008400000000000000000000000000CB +:10017000000000000000000000000000000000007F +:10018000000000000000000000000000000000006F +:10019000000000000000000000000000000000005F +:1001A000000000000000000000000000000000004F :1001B000000000000000000000000000000000003F :1001C000000000000000000000000000000000002F :1001D000000000000000000000000000000000001F @@ -213107,42 +213107,42 @@ :1003D000000000000000000000000000000000001D :1003E000000000000000000000000000000000000D :1003F00000000000000000000000000000000000FD -:100400000000000000000061000100010000006128 -:100410000001000100000061000100010000000077 -:1004200000000000000000610000800100000000EA +:1004000000000000000000000000000000000000EC +:1004100000000000000000000000000000000000DC +:1004200000000000000000000000000000000000CC :1004300000000000000000000000000000000000BC :1004400000000000000000000000000000000000AC :10045000000000000000000000000000000000009C :10046000000000000000000000000000000000008C :10047000000000000000000000000000000000007C -:10048000000000000000000005050505003C003CE0 -:10049000FF0F000F000FF0FFC3FF003C06060F0F19 -:1004A00000000000000000003F3F0F0FEBF8EBF8EA +:10048000000000000000000000000000000000006C +:10049000000000000000000000000000000000005C +:1004A000000000000000000000000000000000004C :1004B000000000000000000000000000000000003C :1004C000000000000000000000000000000000002C :1004D000000000000000000000000000000000001C :1004E000000000000000000000000000000000000C :1004F00000000000000000000000000000000000FC -:100500000000000000000000000005050505003C9B -:10051000003CFF0F000F000FF0FFC3C300000606F2 -:10052000000000000000000000003C3CFF0028F834 -:1005300028F800000000000000000000000000009B +:1005000000000000000000000000000000000000EB +:1005100000000000000000000000000000000000DB +:1005200000000000000000000000000000000000CB +:1005300000000000000000000000000000000000BB :1005400000000000000000000000000000000000AB :10055000000000000000000000000000000000009B :10056000000000000000000000000000000000008B :10057000000000000000000000000000000000007B -:100580000000000000000000000000000C0C0C0C3B -:100590000000FFFF55FF5500F0FFF0FFC3CF000C38 -:1005A000085D085D00000000000000007D7D3C3C0F -:1005B000F0F0F0FF0000000000000000000000006C +:10058000000000000000000000000000000000006B +:10059000000000000000000000000000000000005B +:1005A000000000000000000000000000000000004B +:1005B000000000000000000000000000000000003B :1005C000000000000000000000000000000000002B :1005D000000000000000000000000000000000001B :1005E000000000000000000000000000000000000B :1005F00000000000000000000000000000000000FB -:1006000000000000000000000000000000000C0CD2 -:100610000C0C0000000055FF5500F000F000C3CFA7 -:10062000000C085D085D000000000000000055554A -:10063000FF003C3C00FF0000000000000000000044 +:1006000000000000000000000000000000000000EA +:1006100000000000000000000000000000000000DA +:1006200000000000000000000000000000000000CA +:1006300000000000000000000000000000000000BA :1006400000000000000000000000000000000000AA :10065000000000000000000000000000000000009A :10066000000000000000000000000000000000008A @@ -213150,8 +213150,8 @@ :10068000000000000000000000000000000000006A :10069000000000000000000000000000000000005A :1006A000000000000000000000000000000000004A -:1006B0000000000000000000000000000004000036 -:1006C00000008200000000000400040000000000A0 +:1006B0000000000000000000000000000004000432 +:1006C000000000000000000000000000000000002A :1006D000000000000000000000000000000000001A :1006E000000000000000000000000000000000000A :1006F00000000000000000000000000000000000FA @@ -213166,41 +213166,41 @@ :100780000000000000000000000000000000000069 :100790000000000000000000000000000000000059 :1007A0000000000000000000000000000000000049 -:1007B0000000000000000000000000000200000037 +:1007B0000000000000000000000000000000000039 :1007C0000000000000000000000000000000000029 :1007D0000000000000000000000000000000000019 -:1007E0000000000000000000000000000000020007 -:1007F00000000000000000000000020000000000F7 -:1008000000000000000000000000000000000400E4 -:1008100000000400000000000000000000000000D4 +:1007E0000000000000000000000000000000000009 +:1007F00000000000000000000000000000000000F9 +:1008000000000000000000000000000000000000E8 +:1008100000000000000000000000000000000000D8 :1008200000000000000000000000000000000000C8 :1008300000000000000000000000000000000000B8 -:10084000020000000000000800000000000000009E -:100850000000000800000000000000000000000090 +:1008400000000000000000000000000000000000A8 +:100850000000000000000000000000000000000098 :100860000000000000000000000000000000000088 :100870000000000000000000000000000000000078 :100880000000000000000000000000000000000068 :100890000000000000000000000000000000000058 -:1008A0000000000000000000000800000000000040 -:1008B0000000000000080000000000000000000030 +:1008A0000000000000000000000000000000000048 +:1008B0000000000000000000000000000000000038 :1008C0000000000000000000000000000000000028 -:1008D0000080000000000000000000000000000098 +:1008D0000000000000000000000000000000000018 :1008E0000000000000000000000000000000000008 :1008F00000000000000000000000000000000000F8 :1009000000000000000000000000000000000000E7 :1009100000000000000000000000000000000000D7 -:1009200000000000000000A0000000000000000027 +:1009200000000000000000000000000000000000C7 :1009300000000000000000000000000000000000B7 -:100940000000000000100000000000000000000097 -:100950000000001000000000000000000000000087 +:1009400000000000000000000000000000000000A7 +:100950000000000000000000000000000000000097 :100960000000000000000000000000000000000087 :100970000000000000000000000000000000000077 :100980000000000000000000000000000000000067 :100990000000000000000000000000000000000057 :1009A0000000000000000000000000000000000047 :1009B0000000000000000000000000000000000037 -:1009C0000000000000000000000000040000000023 -:1009D000000000008800000000000000000000008F +:1009C0000000000000000000000000000000000027 +:1009D0000000000000000000000000000000000017 :1009E0000000000000000000000000000000000007 :1009F00000000000000000000000000000000000F7 :100A000000000000000000000000000000000000E6 @@ -213216,15 +213216,15 @@ :100AA0000000000000000000000000000000000046 :100AB0000000000000000000000000000000000036 :100AC0000000000000000000000000000000000026 -:100AD0000000000000000000010000000000000015 +:100AD0000000000000000000000000000000000016 :100AE0000000000000000000000000000000000006 :100AF00000000000000000000000000000000000F6 :100B000000000000000000000000000000000000E5 :100B100000000000000000000000000000000000D5 -:100B2000000000A000000000000000000000000025 -:100B300000000000001000000000000000000000A5 -:100B40000000000000100000000000000000000095 -:100B50000000000000000000000040000000000055 +:100B200000000000000000000000000000000000C5 +:100B300000000000000000000000000000000000B5 +:100B400000000000000000000000000000000000A5 +:100B50000000000000000000000000000000000095 :100B60000000000000000000000000000000000085 :100B70000000000000000000000000000000000075 :100B80000000000000000000000000000000000065 @@ -213249,7 +213249,7 @@ :100CB0000000000000000000000000000000000034 :100CC0000000000000000000000000000000000024 :100CD0000000000000000000000000000000000014 -:100CE0000000000100010001000000000000000001 +:100CE0000000000000000000000000000000000004 :100CF00000000000000000000000000000000000F4 :100D000000000000000000000000000000000000E3 :100D100000000000000000000000000000000000D3 @@ -213257,7 +213257,7 @@ :100D300000000000000000000000000000000000B3 :100D400000000000000000000000000000000000A3 :100D50000000000000000000000000000000000093 -:100D6000000000000040000500040000000000003A +:100D60000000000000000000000000000000000083 :100D70000000000000000000000000000000000073 :100D80000000000000000000000000000000000063 :100D90000000000000000000000000000000000053 @@ -213273,7 +213273,7 @@ :100E300000000000000000000000000000000000B2 :100E400000000000000000000000000000000000A2 :100E50000000000000000000000000000000000092 -:100E600000000000000000000000008400A000005E +:100E60000000000000000000000000000000000082 :100E70000000000000000000000000000000000072 :100E80000000000000000000000000000000000062 :100E90000000000000000000000000000000000052 @@ -213305,8 +213305,8 @@ :1010300000000000000000000000000000000000B0 :1010400000000000000000000000000000000000A0 :101050000000000000000000000000000000000090 -:1010600000000000000000000000000000008400FC -:101070000000A000000000000000000000000000D0 +:101060000000000000000000000000000000000080 +:101070000000000000000000000000000000000070 :101080000000000000000000000000000000000060 :101090000000000000000000000000000000000050 :1010A0000000000000000000000000000000000040 @@ -213322,7 +213322,7 @@ :10114000000000000000000000000000000000009F :10115000000000000000000000000000000000008F :10116000000000000000000000000000000000007F -:10117000000090909F9F0000000000000000000011 +:10117000000000000000000000000000000000006F :10118000000000000000000000000000000000005F :10119000000000000000000000000000000000004F :1011A000000000000000000000000000000000003F @@ -213330,7 +213330,7 @@ :1011C000000000000000000000000000000000001F :1011D000000000000000000000000000000000000F :1011E00000000000000000000000000000000000FF -:1011F0000000000090909F9F000000000000000091 +:1011F00000000000000000000000000000000000EF :1012000000000000000000000000000000000000DE :1012100000000000000000000000000000000000CE :1012200000000000000000000000000000000000BE @@ -213362,8 +213362,8 @@ :1013C000000000000000000000000000000000001D :1013D000000000000000000000000000000000000D :1013E00000000000000000000000000000000000FD -:1013F0000000000000000000000000000061000686 -:10140000000D0000000000000000000000000000CF +:1013F00000000000000000000000000000000000ED +:1014000000000000000000000000000000000000DC :1014100000000000000000000000000000000000CC :1014200000000000000000000000000000000000BC :1014300000000000000000000000000000000000AC @@ -213387,7 +213387,7 @@ :10155000000000000000000000000000000000008B :10156000000000000000000000000000000000007B :10157000000000000000000000000000000000006B -:10158000000003F303F3000000000000000000006F +:10158000000000000000000000000000000000005B :10159000000000000000000000000000000000004B :1015A000000000000000000000000000000000003B :1015B000000000000000000000000000000000002B @@ -213395,7 +213395,7 @@ :1015D000000000000000000000000000000000000B :1015E00000000000000000000000000000000000FB :1015F00000000000000000000000000000000000EB -:101600000000000003F303F30000000000000000EE +:1016000000000000000000000000000000000000DA :1016100000000000000000000000000000000000CA :1016200000000000000000000000000000000000BA :1016300000000000000000000000000000000000AA @@ -213417,16 +213417,16 @@ :1017300000000000000000000000000000000000A9 :101740000000000000000000000000000000000099 :101750000000000000000000000000000000000089 -:101760000000000000000000040000000000000075 -:101770000000000000000400000000000000000065 +:101760000000000000000000000000000000000079 +:101770000000000000000000000000000000000069 :101780000000000000000000000000000000000059 :101790000000000000000000000000000000000049 :1017A0000000000000000000000000000000000039 :1017B0000000000000000000000000000000000029 -:1017C0000200000000000000000000000000040013 -:1017D0000400000000000000000000000000000005 -:1017E00000000000040004000400000000000000ED -:1017F00000000000040004000000000000000000E1 +:1017C0000000000000000000000000000000000019 +:1017D0000000000000000000000000000000000009 +:1017E00000000000000000000000000000000000F9 +:1017F00000000000000000000000000000000000E9 :1018000000000000000000000000000000000000D8 :1018100000000000000000000000000000000000C8 :1018200000000000000000000000000000000000B8 @@ -213451,14 +213451,14 @@ :101950000000000000000000000000000000000087 :101960000000000000000000000000000000000077 :101970000000000000000000000000000000000067 -:101980000000000000000000000000100000004007 +:101980000000000000000000000000000000000057 :101990000000000000000000000000000000000047 :1019A0000000000000000000000000000000000037 :1019B0000000000000000000000000000000000027 :1019C0000000000000000000000000000000000017 :1019D0000000000000000000000000000000000007 :1019E00000000000000000000000000000000000F7 -:1019F00000000000000000000000000020000000C7 +:1019F00000000000000000000000000000000000E7 :101A000000000000000000000000000000000000D6 :101A100000000000000000000000000000000000C6 :101A200000000000000000000000000000000000B6 @@ -213492,7 +213492,7 @@ :101BE00000000000000000000000000000000000F5 :101BF00000000000000000000000000000000000E5 :101C000000000000000000000000000000000000D4 -:101C100000000000000400000000000002000000BE +:101C100000000000000000000000000000000000C4 :101C200000000000000000000000000000000000B4 :101C300000000000000000000000000000000000A4 :101C40000000000000000000000000000000000094 @@ -213642,12 +213642,12 @@ :10254000000000000000000000000000000000008B :10255000000000000000000000000000000000007B :10256000000000000000000000000000000000006B -:102570000000040000000000000000000000000057 +:10257000000000000000000000000000000000005B :10258000000000000000000000000000000000004B -:102590000000000004000000000000000000000037 -:1025A0000000000000000200000000000000000029 +:10259000000000000000000000000000000000003B +:1025A000000000000000000000000000000000002B :1025B000000000000000000000000000000000001B -:1025C0000000000000000004000000000000000007 +:1025C0000000000000000004000400000000000003 :1025D00000000000000000000000000000000000FB :1025E00000000000000000000000000000000000EB :1025F00000000000000000000000000000000000DB @@ -213667,11 +213667,11 @@ :1026D00000000000000000000000000000000000FA :1026E00000000000000000000000000000000000EA :1026F00000000000000000000000000000000000DA -:1027000000000000040000000000000000000000C5 -:102710000000000000000000000020000000040095 -:1027200000000000000000000000000000000200A7 -:102730000000000000000000000020000000000079 -:102740000000000000000000000000002000000069 +:1027000000000000000000000000000000000000C9 +:1027100000000000000000000000000000000000B9 +:1027200000000000000000000000000000000000A9 +:102730000000000000000000000000000000000099 +:102740000000000000000000000000000000000089 :102750000000000000000000000000000000000079 :102760000000000000000000000000000000000069 :102770000000000000000000000000000000000059 @@ -213694,8 +213694,8 @@ :102880000000000000000000000000000000000048 :102890000000000000000000000000000000000038 :1028A0000000000000000000000000000000000028 -:1028B00000000000000000000040000000000002D6 -:1028C00000000000000400000011000000000000F3 +:1028B0000000000000000000000000000000000018 +:1028C0000000000000000000000000000000000008 :1028D00000000000000000000000000000000000F8 :1028E00000000000000000000000000000000000E8 :1028F00000000000000000000000000000000000D8 @@ -213704,7 +213704,7 @@ :1029200000000000000000000000000000000000A7 :102930000000000000000000000000000000000097 :102940000000000000000000000000000000000087 -:102950000000040000000000000000000000000073 +:102950000000000000000000000000000000000077 :102960000000000000000000000000000000000067 :102970000000000000000000000000000000000057 :102980000000000000000000000000000000000047 @@ -213736,7 +213736,7 @@ :102B200000000000000000000000000000000000A5 :102B30000000000000000000000000000000000095 :102B40000000000000000000000000000000000085 -:102B50000000000000000000000000000000110064 +:102B50000000000000000000000000000000000075 :102B60000000000000000000000000000000000065 :102B70000000000000000000000000000000000055 :102B80000000000000000000000000000000000045 @@ -213893,10 +213893,10 @@ :1034F00000000000000000000000000000000000CC :1035000000000000000000000000000000000000BB :1035100000000000000000000000000000000000AB -:103520000000000002000000000000000000000099 +:10352000000000000000000000000000000000009B :10353000000000000000000000000000000000008B -:103540000000000004000000000000000000000077 -:103550000000000000000000000000000000020069 +:10354000000000000000000000000000000000007B +:10355000000000000000000000000000000000006B :10356000000000000000000000000000000000005B :10357000000000000000000000000000000000004B :10358000000000000000000000000000000000003B @@ -213907,7 +213907,7 @@ :1035D00000000000000000000000000000000000EB :1035E00000000000000000000000000000000000DB :1035F00000000000000000000000000000000000CB -:1036000000000000000000000000000000000000BA +:1036000000000000000000000800000000000000B2 :1036100000000000000000000000000000000000AA :10362000000000000000000000000000000000009A :10363000000000000000000000000000000000008A @@ -213919,11 +213919,11 @@ :10369000000000000000000000000000000000002A :1036A000000000000000000000000000000000001A :1036B000000000000000000000000000000000000A -:1036C00000000000000000000000200000000000DA -:1036D00000000000000000000000040004000000E2 -:1036E00000000000000000000000000020000400B6 -:1036F00004000400000000000000000000000400BE -:1037000004000000000000000000000000000000B5 +:1036C00000000000000000000000000000000000FA +:1036D00000000000000000000000000000000000EA +:1036E00000000000000000000000000000000000DA +:1036F00000000000000000000000000000000000CA +:1037000000000000000000000000000000000000B9 :1037100000000000000000000000000000000000A9 :103720000000000000000000000000000000000099 :103730000000000000000000000000000000000089 @@ -213955,8 +213955,8 @@ :1038D00000000000000000000000000000000000E8 :1038E00000000000000000000000000000000000D8 :1038F00000000000000000000000000000000000C8 -:1039000000000000000000000000000400000008AB -:10391000000000880000000000000000000000001F +:1039000000000000000000000000000000000000B7 +:1039100000000000000000000000000000000000A7 :103920000000000000000000000000000000000097 :103930000000000000000000000000000000000087 :103940000000000000000000000000000000000077 @@ -213987,8 +213987,8 @@ :103AD00000000000000000000000000000000000E6 :103AE00000000000000000000000000000000000D6 :103AF00000000000000000000000000000000000C6 -:103B00000000000000000000000000000000200095 -:103B1000000000000800000000000000000000009D +:103B000000000000000000000000000000000000B5 +:103B100000000000000000000000000000000000A5 :103B20000000000000000000000000000000000095 :103B30000000000000000000000000000000000085 :103B40000000000000000000000000000000000075 @@ -214139,10 +214139,10 @@ :10445000000000000000000000000000000000005C :10446000000000000000000000000000000000004C :10447000000000000000000000000000000000003C -:104480000000000000000000000004000000000028 -:104490000000000000000000000000000000040018 -:1044A00000000400000000000000200000000400E4 -:1044B00000000000000000000000000000000400F8 +:10448000000000000000000000000000000000002C +:10449000000000000000000000000000000000001C +:1044A000000000000000000000000000000000000C +:1044B00000000000000000000000000000000000FC :1044C00000000000000000000000000000000000EC :1044D00000000000000000000000000000000000DC :1044E00000000000000000000000000000000000CC @@ -214150,7 +214150,7 @@ :1045000000000000000000000000000000000000AB :10451000000000000000000000000000000000009B :10452000000000000000000000000000000000008B -:1045300080000000000000000000000000000000FB +:10453000000000000000000000000000000000007B :10454000000000000000000000000000000000006B :10455000000000000000000000000000000000005B :10456000000000000000000000000000000000004B @@ -214158,7 +214158,7 @@ :10458000000000000000000000000000000000002B :10459000000000000000000000000000000000001B :1045A000000000000000000000000000000000000B -:1045B00000000000000000000100010001000100F7 +:1045B00000000000000000000000000000000000FB :1045C00000000000000000000000000000000000EB :1045D00000000000000000000000000000000000DB :1045E00000000000000000000000000000000000CB @@ -214166,8 +214166,8 @@ :1046000000000000000000000000000000000000AA :10461000000000000000000000000000000000009A :10462000000000000000000000000000000000008A -:10463000000000000000000000000400040004006E -:10464000040000002000090020000000000000001D +:10463000000000000000000000000000000000007A +:10464000000000000000000000000000000000006A :10465000000000000000000000000000000000005A :10466000000000000000000000000000000000004A :10467000000000000000000000000000000000003A @@ -214190,7 +214190,7 @@ :104780000000000000000000000000000000000029 :104790000000000000000000000000000000000019 :1047A0000000000000000000000000000000000009 -:1047B00000000000000000000100000004000000F4 +:1047B00000000000000000000000000000000000F9 :1047C00000000000000000000000000000000000E9 :1047D00000000000000000000000000000000000D9 :1047E00000000000000000000000000000000000C9 @@ -214198,8 +214198,8 @@ :1048000000000000000000000000000000000000A8 :104810000000000000000000000000000000000098 :104820000000000000000000000000000000000088 -:1048300000000000000000000000040000008000F4 -:104840000400210000001100000000000000000032 +:104830000000000000000000000000000000000078 +:104840000000000000000000000000000000000068 :104850000000000000000000000000000000000058 :104860000000000000000000000000000000000048 :104870000000000000000000000000000000000038 @@ -214207,7 +214207,7 @@ :104890000000000000000000000000000000000018 :1048A0000000000000000000000000000000000008 :1048B00000000000000000000000000000000000F8 -:1048C00000000000002100000000000000000000C7 +:1048C00000000000000000000000000000000000E8 :1048D00000000000000000000000000000000000D8 :1048E00000000000000000000000000000000000C8 :1048F00000000000000000000000000000000000B8 @@ -214222,8 +214222,8 @@ :104980000000000000000000000000000000000027 :104990000000000000000000000000000000000017 :1049A0000000000000000000000000000000000007 -:1049B00000000000000000000000200000000000D7 -:1049C0000200000000000080000000000000000065 +:1049B00000000000000000000000000000000000F7 +:1049C00000000000000000000000000000000000E7 :1049D00000000000000000000000000000000000D7 :1049E00000000000000000000000000000000000C7 :1049F00000000000000000000000000000000000B7 @@ -214231,12 +214231,12 @@ :104A10000000000000000000000000000000000096 :104A20000000000000000000000000000000000086 :104A30000000000000000000000000000000000076 -:104A40000000000000000000002000000000000046 +:104A40000000000000000000000000000000000066 :104A50000000000000000000000000000000000056 :104A60000000000000000000000000000000000046 :104A70000000000000000000000000000000000036 :104A80000000000000000000000000000000000026 -:104A90000000000000000000000000020000000014 +:104A90000000000000000000000000000000000016 :104AA0000000000000000000000000000000000006 :104AB00000000000000000000000000000000000F6 :104AC00000000000000000000000000000000000E6 @@ -214255,7 +214255,7 @@ :104B90000000000000000000000000000000000015 :104BA0000000000000000000000000000000000005 :104BB00000000000000000000000000000000000F5 -:104BC0000000000000000000000000800000000065 +:104BC00000000000000000000000000000000000E5 :104BD00000000000000000000000000000000000D5 :104BE00000000000000000000000000000000000C5 :104BF00000000000000000000000000000000000B5 @@ -214263,24 +214263,24 @@ :104C10000000000000000000000000000000000094 :104C20000000000000000000000000000000000084 :104C30000000000000000000000000000000000074 -:104C40000000000000000000000000000004000060 -:104C5000008400000084000000A0000000000000AC +:104C40000000000000000000000000000000000064 +:104C50000000000000000000000000000000000054 :104C60000000000000000000000000000000000044 :104C70000000000000000000000000000000000034 :104C80000000000000000000000000000000000024 :104C90000000000000000000000000000000000014 :104CA0000000000000000000000000000000000004 :104CB00000000000000000000000000000000000F4 -:104CC00000000000000000000000000001000000E3 -:104CD00004000000000000000400000000000000CC +:104CC00000000000000000000000000000000000E4 +:104CD00000000000000000000000000000000000D4 :104CE00000000000000000000000000000000000C4 :104CF00000000000000000000000000000000000B4 :104D000000000000000000000000000000000000A3 :104D10000000000000000000000000000000000093 :104D20000000000000000000000000000000000083 :104D30000000000000000000000000000000000073 -:104D4000000000000000000000000000000004005F -:104D5000000000000000040000000000000000004F +:104D40000000000000000000000000000000000063 +:104D50000000000000000000000000000000000053 :104D60000000000000000000000000000000000043 :104D70000000000000000000000000000000000033 :104D80000000000000000000000000000000000023 @@ -214288,7 +214288,7 @@ :104DA0000000000000000000000000000000000003 :104DB00000000000000000000000000000000000F3 :104DC00000000000000000000000000000000000E3 -:104DD000000000110000000000020021000000009F +:104DD00000000000000000000000000000000000D3 :104DE00000000000000000000000000000000000C3 :104DF00000000000000000000000000000000000B3 :104E000000000000000000000000000000000000A2 @@ -214304,8 +214304,8 @@ :104EA0000000000000000000000000000000000002 :104EB00000000000000000000000000000000000F2 :104EC00000000000000000000000000000000000E2 -:104ED00000000000000000000600000000000000CC -:104EE00006000000000000000000000000000000BC +:104ED00000000000000000000000000000000000D2 +:104EE00000000000000000000000000000000000C2 :104EF00000000000000000000000000000000000B2 :104F000000000000000000000000000000000000A1 :104F10000000000000000000000000000000000091 @@ -214353,7 +214353,7 @@ :1051B00000000000000000000000000000000000EF :1051C00000000000000000000000000000000000DF :1051D00000000000000000000000000000000000CF -:1051E00005000A08050000A005000A08050000A047 +:1051E00000000000000000000000000000000000BF :1051F00000000000000000000000000000000000AF :10520000000000000000000000000000000000009E :10521000000000000000000000000000000000008E @@ -214392,10 +214392,10 @@ :10542000000000000000000000000000000000007C :10543000000000000000000000000000000000006C :10544000000000000000000000000000000000005C -:105450000400000000000000000000000000040044 -:1054600004000000000002008800000000000000AE -:105470002000840000000000000000000000200068 -:105480008800000000000000000000000000000094 +:10545000000000000000000000000000000000004C +:10546000000000000000000000000000000000003C +:10547000000000000000000000000000000000002C +:10548000000000000000000000000000000000001C :10549000000000000000000000000000000000000C :1054A00000000000000000000000000000000000FC :1054B00000000000000000000000000000000000EC @@ -214418,8 +214418,8 @@ :1055C00000000000000000000000000000000000DB :1055D00000000000000000000000000000000000CB :1055E00000000000000000000000000000000000BB -:1055F00000000000000000000400000000000000A7 -:10560000090000000500200000000000000000006C +:1055F00000000000000000000000000000000000AB +:10560000000000000000000000000000000000009A :10561000000000000000000000000000000000008A :10562000000000000000000000000000000000007A :10563000000000000000000000000000000000006A @@ -214441,9 +214441,9 @@ :105730000000000000000000000000000000000069 :105740000000000000000000000000000000000059 :105750000000000000000000000000000000000049 -:105760000000000002000000000000000000000037 -:10577000000000000000880000000000040000009D -:1057800000000000400000000000000000000000D9 +:105760000000000000000000000000000000000039 +:105770000000000000000000000000000000000029 +:105780000000000000000000000000000000000019 :105790000000000000000000000000000000000009 :1057A00000000000000000000000000000000000F9 :1057B00000000000000000000000000000000000E9 @@ -214451,7 +214451,7 @@ :1057D00000000000000000000000000000000000C9 :1057E00000000000000000000000000000000000B9 :1057F00000000000000000000000000000000000A9 -:105800000000000000000000400021002100000016 +:105800000000000000000000000000000000000098 :105810000000000000000000000000000000000088 :105820000000000000000000000000000000000078 :105830000000000000000000000000000000000068 @@ -214475,7 +214475,7 @@ :105950000000000000000000000000000000000047 :105960000000000000000000000000000000000037 :105970000000000000000000000000000000000027 -:10598000000000000000000004000400000000000F +:105980000000000000000000000000000000000017 :105990000000000000000000000000000000000007 :1059A00000000000000000000000000000000000F7 :1059B00000000000000000000000000000000000E7 @@ -216570,9 +216570,9 @@ :10DC400000000000000000000000000000000000D4 :10DC500000000000000000000000000000000000C4 :10DC600000000000000000000000000000000000B4 -:10DC70000000000010000000400010000000000044 +:10DC70000000000000000000400000000000000064 :10DC80000000000000000000000000000000000094 -:10DC90000000000000004000400000000000000004 +:10DC90000000000000000000400000000000000044 :10DCA0000000000000000000000000000000000074 :10DCB0000000000000000000000000000000000064 :10DCC0000000000000000000000000000000000054 @@ -216580,7 +216580,7 @@ :10DCE0000000000000000000000000000000000034 :10DCF0000000000000000000000000000000000024 :10DD00000000000000000000000000000000000013 -:10DD100000000000100020001000200000000000A3 +:10DD100000000000000000000000200000000000E3 :10DD200000000000000000000000000000000000F3 :10DD300000000000000000000000000000000000E3 :10DD400000000000000000000000000000000000D3 @@ -216612,7 +216612,7 @@ :10DEE0000000000000000000000000000000000032 :10DEF0000000000000000000000000000000000022 :10DF00000000000000000000000000000000000011 -:10DF100000000000000000000000000000001000F1 +:10DF10000000000000000000000000000000000001 :10DF200000000000000000000000000000000000F1 :10DF300000000000000000000000000000000000E1 :10DF400000000000000000000000000000000000D1 @@ -216822,9 +216822,9 @@ :10EC00000000000000000000000000000000000004 :10EC100000000000000000000000000000000000F4 :10EC200000000000000000000000000000000000E4 -:10EC3000000000000000A000000000000000000034 +:10EC300000000000000000000000000000000000D4 :10EC400000000000000000000000000000000000C4 -:10EC500000000000C00020000000000000000000D4 +:10EC500000000000000000000000000000000000B4 :10EC600000000000000000000000000000000000A4 :10EC70000000000000000000000000000000000094 :10EC80000000000000000000000000000000000084 @@ -216832,7 +216832,7 @@ :10ECA0000000000000000000000000000000000064 :10ECB0000000000000000000000000000000000054 :10ECC0000000000000000000000000000000000044 -:10ECD0000000400040004000000000000000000074 +:10ECD00000000000000040000000000000000000F4 :10ECE0000000000000000000000000000000000024 :10ECF0000000000000000000000000000000000014 :10ED00000000000000000000000000000000000003 @@ -217063,19 +217063,19 @@ :10FB100000000000000000000000000000000000E5 :10FB200000000000000000000000000000000000D5 :10FB300000000000000000000000000000000000C5 -:10FB400000000000000000000000000000000000B5 +:10FB40004000000000000000000000000000000075 :10FB500000000000000000000000000000000000A5 :10FB60000000400000000000000000000000000055 -:10FB70000000000000000000000000004000000045 +:10FB70000000000000000000000000000000000085 :10FB80000000400000000000000000000000000035 :10FB90000000000000000000000000000000000065 :10FBA0000000000000000000000000000000000055 :10FBB0000000000000000000000000000000000045 :10FBC0000000000000000000000000000000000035 :10FBD0000000000000000000000000000000000025 -:10FBE0000000000010000000000000000000000005 +:10FBE00000000000200000000000000000000000F5 :10FBF0000000000000000000000000000000000005 -:10FC00004000400020000000000000000000000054 +:10FC000000000000200000000000000000000000D4 :10FC100000000000000000000000000000000000E4 :10FC200000000000000000000000000000000000D4 :10FC300000000000000000000000000000000000C4 @@ -217083,15 +217083,15 @@ :10FC500000000000000000000000000000000000A4 :10FC60000000000000000000000000000000000094 :10FC70000000000000000000000000000000000084 -:10FC80000000000000000000000000000000000074 +:10FC8000000000000008000000000000000000105C :10FC90000000000000000000000000000000000064 :10FCA0000000000000000000000000000000000054 :10FCB0000000000000000000000000000000000044 -:10FCC0000000000000000000000000000000000034 +:10FCC0000000000000000004000000000000000030 :10FCD0000000000000000000000000000000000024 :10FCE0000000000000000000000000000000000014 :10FCF0000000000000000000000000000000000004 -:10FD000000000008000000000000000000000000EB +:10FD000000000000000000000000000000000000F3 :10FD100000000000000000000000000000000000E3 :10FD200000000000000000000000000000000000D3 :10FD300000000000000000000000000000000000C3 @@ -217108,15 +217108,15 @@ :10FDE0000000000000000000000000000000000013 :10FDF0000000000000000000000000000000000003 :10FE000000000000000000000000000000000000F2 -:10FE100000004100000000000000000000000000A1 -:10FE200000000000000000000000000000000000D2 +:10FE100000000000000000000000000000000000E2 +:10FE200000000000000000000000000000080000CA :10FE300000000000000000000000000000000000C2 :10FE400000000000000000000000000000000000B2 :10FE500000000000000000000000000000000000A2 -:10FE6000000000000000000000080000000000008A +:10FE60000000000000000000000000000000000092 :10FE70000000000000000000000000000000000082 -:10FE80000000000000000000000000000000000072 -:10FE90000000000000000000000000000000000062 +:10FE8000000000000000000000000000000000086A +:10FE9000000000080000000000000000000000005A :10FEA0000000000000000000000000000000000052 :10FEB0000000000000000000000000000000000042 :10FEC0000000000000000000000000000000000032 @@ -217124,7 +217124,7 @@ :10FEE0000000000000000000000000000000000012 :10FEF0000000000000000000000000000000000002 :10FF000000000000000000000000000000000000F1 -:10FF100000000000000000000000000000080000D9 +:10FF100000000000000000000000000000000000E1 :10FF200000000000000000000000000000000000D1 :10FF300000000000000000000000000000000000C1 :10FF400000000000000000000000000000000000B1 @@ -217132,7 +217132,7 @@ :10FF60000000000000000000000000000000000091 :10FF70000000000000000000000000000000000081 :10FF80000000000000000000000000000000000071 -:10FF9000000004000000000000000000000000005D +:10FF90000000000000000000000000000000000061 :10FFA0000000000000000000000000000000000051 :10FFB0000000000000000000000000000000000041 :10FFC0000000000000000000000000000000000031 @@ -217318,42 +217318,42 @@ :100AF00000000000000000000000000000000000F6 :100B000000000000000000000000000000000000E5 :100B100000000000000000000000000000000000D5 -:100B20000000000000000000000090000000000035 -:100B300000000000000000001000000000000000A5 -:100B40000000000000000000000020000000000085 +:100B200000000000000000000000000000000000C5 +:100B30000000000000000000000040000000000075 +:100B400000000000000000000000000000000000A5 :100B50000000000000000000000000000000000095 :100B60000000000000000000000000000000000085 :100B70000000000000000000000000000000000075 :100B80000000000000000000000000000000000065 :100B90000000000000000000000000000000000055 :100BA0000000000000000000000000000000000045 -:100BB00000000000000000000000000040004000B5 +:100BB0000000000000000000000000000000000035 :100BC00040000000000000000000000000000000E5 :100BD0000000000000000000000000000000000015 :100BE0000000000000000000000000000000000005 -:100BF00000000000000000000000000000000000F5 -:100C000000000000000000000000000000000000E4 +:100BF00000000000000000000000000300030000EF +:100C000000000000000000000008000000000000DC :100C100000000000000000000000000000000000D4 :100C200000000000000000000000000000000000C4 :100C300000000000000000000000000000000003B1 :100C400000000000000000000000000000000000A4 :100C50000000000000000000000000000000000094 :100C60000000000000000000000000000000000084 -:100C70000000000000000000000000000000000074 -:100C80000000000000000000000000000000000064 -:100C90000000000000000000000000000000000054 -:100CA0000000000000000000000000000000000044 -:100CB00000080000008200000000000000000000AA -:100CC0000000000800000000000000000000000814 -:100CD000008800000000000000000000000000008C +:100C7000000000000000000000000000000000086C +:100C80000000000800000008000800000008000044 +:100C90000000000400080000000000000000000048 +:100CA0000008000000080000000800080008000814 +:100CB00000000008000000840000000000000000A8 +:100CC0000008000000080000008200080010000872 +:100CD00000000010000000080000000000000000FC :100CE0000000000000000000000000000000000004 :100CF00000000000000000000000000000000000F4 :100D000000000000000000000000000000000000E3 :100D100000000000000000000000000000000000D3 :100D200000000000000000000000000000000000C3 -:100D3000000000000000000088000000000000002B -:100D40000000000800000003000000000041000255 -:100D50000000000000000000000000000000000093 +:100D300000000000000000000000000000000000B3 +:100D400000000000000000000003000000000000A0 +:100D5000000000080000000000000000000000008B :100D60000000000000000000000000000000000083 :100D70000000000000000000000000000000000073 :100D80000000000000000000000000000000000063 @@ -217371,22 +217371,22 @@ :100E400000000000000000000000000000000000A2 :100E50000000000000000000000000000000000092 :100E60000000000000000000000000000000000082 -:100E70000000000000000000000000000000000072 +:100E7000000800000000000000000008000800005A :100E80000000000000000000000000000000000062 -:100E90000000000000000008000000080000000042 +:100E90000000000000000000000800000008000042 :100EA0000000000000000000000000000000000042 -:100EB000000000000000008400A0000000A000006E -:100EC0000000000000A00082000000000000000000 -:100ED000000000000000000000C000000000000052 +:100EB00000820000000000000000000000000008A8 +:100EC000000000000000000000A000000000000082 +:100ED0000008000000A00000000000000008000062 :100EE0000000000000000000000000000000000002 :100EF00000000000000000000000000000000000F2 :100F000000000000000000000000000000000000E1 :100F100000000000000000000000000000000000D1 :100F200000000000000000000000000000000000C1 :100F300000000000000000000000000000000000B1 -:100F40000000000000000008000000000000000891 -:100F50000000000000080000000000000000000089 -:100F6000000300000000000000000000000000007E +:100F40000021000000000000000000000000000080 +:100F50000000000000000008000000000000000089 +:100F60000000000000000000000000000000000081 :100F70000000000000000000000000000000000071 :100F80000000000000000000000000000000000061 :100F90000000000000000000000000000000000051 @@ -217400,16 +217400,16 @@ :1010100000000000000000000000000000000000D0 :1010200000000000000000000000000000000000C0 :1010300000000000000000000000000000000000B0 -:10104000000000000003000000210000000000007C -:10105000000000000000000000000100000000008F -:101060000000000000000000000000000000000080 -:101070000000000000000000000000000000000070 -:101080000000000000000000000000000000000060 -:101090000000000000000000000000000000000050 +:1010400000000000000000000000000000000000A0 +:101050000000000000000000000000000000000090 +:101060000000000000000000000000000000000878 +:101070000000000800000008000000000008000058 +:101080000000000000000000000000000000000858 +:101090000000000800000008000800000008000030 :1010A0000000000000000000000000000000000040 -:1010B0000000000800000000000000000000000820 -:1010C0000000008400000000000000080000000094 -:1010D0000000000000820000008200000800000004 +:1010B0000008000000080000000800080000000808 +:1010C0000000000000000000000000000000000020 +:1010D000000800000008008200000008000000086E :1010E0000000000000000000000000000000000000 :1010F00000000000000000000000000000000000F0 :1011000000000000000000000000000000000000DF @@ -217558,176 +217558,176 @@ :1019F00000000000000000000000000000000000E7 :101A000000000000000000000000000000000000D6 :101A100000000000000000000000000000000000C6 -:101A200000000000000000000000000000000000B6 +:101A20000000000000000000000021000000000095 :101A300000000000000000000000000000000000A6 -:101A40000000000000000000000001000003000092 +:101A4000000000000000000000000008000300008B :101A50000000000000000000000000000000000086 -:101A60000000000000000180030021000080000051 +:101A60000000000000000000000000002100000055 :101A70000000000000000000000000000000000066 -:101A800000000000000000000000000000800000D6 +:101A800000000000000000000000000020800000B6 :101A90000000000000000000000000000000000046 -:101AA0000000000000000000000000000000000036 +:101AA00000000000000000000000000090000000A6 :101AB0000000000000000000000000000000000026 :101AC00000000000000000000000000020000000F6 :101AD0000000000000000000000000000000000006 -:101AE00000000000000000000808900084001020A2 +:101AE0000000000000000000000000000000900066 :101AF00000000000000000000000000000000000E6 -:101B0000000000000000000200002002200000048D +:101B0000000000000000000000000000000040088D :101B100000000000000000000000000000000000C5 :101B200000000000000000000000000000000000B5 :101B300000000000000000000000000000000000A5 -:101B40000000000000000000000000000000000095 -:101B500000000000000000000000A000A000A000A5 -:101B600000009000000010000000000000000000D5 -:101B7000A0000000000000000000000000080000BD -:101B80000000000000000000000000000000000055 -:101B90000000000000000000000000000000000045 +:101B40000000000000000000000000000000110084 +:101B50000000000000000000000000000000000085 +:101B60000000000000000000000000000000000075 +:101B70000004000000000000000000000000000061 +:101B8000000000000000000000000000000008004D +:101B90000004000000000000000000000000000041 :101BA0000000000000000000000000000000000035 :101BB0000000000000000000000000000000000025 -:101BC0000000000000000000000000000000000015 -:101BD0000000000000000000000000000000000005 -:101BE000000000000000000000880000000000006D -:101BF0000000000800840084008400000000000051 -:101C000000840084008200820004008400840008B4 -:101C100000840084000000000000000000000000BC -:101C200000000000000000000000000000000000B4 -:101C300000000000000000000000000000000000A4 -:101C40000000000000000000000000000000000094 -:101C50000000000300000008002100000021000037 -:101C60000000000000000000000800050008000857 -:101C70000021000800800008000000000021002171 -:101C8000000300030008000900090008000800081C -:101C9000000000100005000000000000000000002F +:101BC000000000000000000800000008000800827B +:101BD000A000000000000000000000080008000055 +:101BE0000008008200000082000800000008008455 +:101BF00000080008008400000000001000840000BD +:101C00000084000000000000008400000084000048 +:101C100000100008000000000000000000000000AC +:101C20000000000000000000000000210021000072 +:101C300000000021002100210005002100210000FA +:101C400000080021002100210000002100210000E7 +:101C500000080021000000080021002100210021CF +:101C600000000008002100000021000500210021E3 +:101C70000000000800210021002100000021004197 +:101C800000050021002100210021000000210005A5 +:101C9000000000090021000000000000000000001A :101CA0000000000000000000000000000000000034 :101CB0000000000000000000000000000000000024 -:101CC0000000000000000000000000000000000014 +:101CC000000000000008000200000000000000000A :101CD0000000000000000000000000000000000004 :101CE00000000000000000000000000000000000F4 -:101CF0000000000000000010000000000040000094 -:101D000000000000000000000004000000000000CF -:101D100000000400000800000000000000000000B7 +:101CF00000000000000000000000000000000000E4 +:101D000000000000000000000002000000000000D1 +:101D100000080000000000000000000000000000BB :101D200000000000000000000000000000000000B3 :101D300000000000000000000000000000000000A3 :101D40000000000000000000000000000000000093 :101D50000000000000000000000000000000000083 -:101D60000005000300030000004100050000000022 +:101D60000000000000000000000000000000000073 :101D70000000000000000000000000000000000063 -:101D8000000000000000000000000000000000054E -:101D90000000000000000000000000000000000043 +:101D80000000000000000000000000000000000053 +:101D90000000000000000000200000000000000023 :101DA0000000000000000000000000000000000033 :101DB0000000000000000000000000000000000023 -:101DC0000000000000000000000000000000000013 +:101DC000000000000000000000000000000800000B :101DD0000000000000000000000000000000000003 -:101DE0000000000020000000000000000008008447 -:101DF0000000000000820000000000000000000061 -:101E00000000000000000000008200000000000050 -:101E100000000000000000000000000000000000C2 +:101DE00000000000000000000000000000000000F3 +:101DF00000000000000000000000000000000000E3 +:101E000000000000000000000000000400000000CE +:101E1000000000000000000000088000000000003A :101E200000000000000000000000000000000000B2 -:101E300000000000000000000000000000000000A2 +:101E30000008004100000000000000400000000019 :101E40000000000000000000000000000000000092 -:101E5000000800000003000300000008000000402C -:101E6000000000080003000000000208000000213C -:101E700000000008002100030000010000210040D4 -:101E8000000300080008000800000000000000082F -:101E90000008000800000000000000000021000011 +:101E500000080041000000000000004000000000F9 +:101E60000000000000000000000000000000000072 +:101E700000000008000000000003000000400041D6 +:101E80000000000000000000000000000000000052 +:101E900000000021000000080010000000400000C9 :101EA0000000000000000000000000000000000032 :101EB0000000000000000000000000000000000022 :101EC0000000000000000000000000000000000012 :101ED0000000000000000000000000000000000002 :101EE00000000000000000000000000000000000F2 -:101EF00000000000000000000000000040000000A2 +:101EF00000000000000000000000000000000000E2 :101F000000000000000000000000000000000000D1 :101F100000000000000000000000000000000000C1 :101F200000000000000000000000000000000000B1 -:101F300000000000000000000000000000000000A1 -:101F40000000000000000000000000000000000091 -:101F5000000000000000000000000005000000007C -:101F60000000000000080000000020000000000049 -:101F7000000800000000000000000021000800210F -:101F80000000000000000011000000000000000040 -:101F90000000000000000000000000000000001031 -:101FA0000000000000000000000000000000000031 +:101F30000000000000210000000800080008000563 +:101F4000000500000000000800080000002100005B +:101F50000000000000110005000800080000000853 +:101F60000000000500000000000000080000000064 +:101F70000000000000000011000500080021001012 +:101F80000008000500000000000000210000000023 +:101F900000000000000400110005002100000008FE +:101FA0000008000000000000000000000000000029 :101FB0000000000000000000000000000000000021 :101FC0000000000000000000000000000000000011 :101FD0000000000000000000000000000000000001 :101FE00000000000000000000000000000000000F1 -:101FF00009000000090000000000000000000000CF +:101FF00000000000000000000000000000000000E1 :1020000000000000000000000000000000000000D0 :1020100000000000000000000000000000000000C0 -:1020200000000000000000000000000000000000B0 -:1020300000000000000000000000000000000000A0 -:10204000000000000000000000000000010000008F -:10205000000000000000010000C0000000000000BF -:102060000000000000020000C1000001C182010068 -:10207000C0000140C089C001C0010008C08200004A -:10208000C00000111000000000000000000001006E -:102090000000000000000001010000C0000000007E -:1020A0000000000000000000000000000000000030 -:1020B0000000000000000000000000000000000020 -:1020C00000000000000000000000000000004100CF -:1020D0000000000000000002080000800000000076 -:1020E00000000000000000000041C1410041C18922 -:1020F0004141804141908403804089030080808079 -:102100000041804109830000000000000000000041 -:1021100041000000000000000008400000800000B6 -:1021200000000000000000000000000000000000AF -:10213000000000000000000000000000000000009F -:10214000000000000000000000000300000000800C -:1021500000008000000000008200048000000000F9 -:10216000000000000000004100004100034100C1E8 -:1021700000004141914100C1084189C108410080EE -:1021800083804100C14100C1804000000300000085 -:1021900000800000800000000000110004800008A2 -:1021A00000000000000000000041000000000000EE -:1021B000000000000000000000000000000000001F -:1021C000000000000000000000000000010000000E -:1021D00000C000002000000000001000880800027D -:1021E00004000200000000000001000000000101E6 -:1021F00000C10002000140010011010110C10511E0 -:1022000000C083C08800400100C1820100000100BD -:10221000000000C00000200000000000C0001040CE -:102220000011080002000000000000010000000092 -:10223000000000000000000000000000000000009E -:10224000000000000000000000000000000000008E -:10225000C0000000000000000000000000100000AE -:10226000000000000000000000000000000000402E -:102270000000C183000000000000C1821083000440 -:102280000000C140000000000000C000000000008D -:102290000000C0000000000000000000000000106E -:1022A0000000080000000000000000000000000026 -:1022B000000000000000000000000000000000001E -:1022C000000000000000000000000000000000000E -:1022D00000008000000000000000000000000080FE -:1022E00000000000000000000000000000000000EE -:1022F00000800041C183000000000041C1C1008393 -:1023000000C10041C1C10000000000219141000056 -:10231000000000008000000000000000000000003D -:1023200000800000800000000000000000000000AD -:10233000000000000000000000000000000000009D -:10234000000000000000000000000000000000008D -:102350000000800000C1000000000000000000003C -:10236000004180000011000000000000000000009B -:102370000000C1800041800200004102004140C1D4 -:1023800003C1C1C1808080C10000414100000080C4 -:1023900004110000800000C10000000000000000E7 -:1023A00000000000800000080000000000000000A5 -:1023B000000000000000000000000000000000001D -:1023C000000000000000000000000000000000000D -:1023D00000000000400000C10000000000000000FC -:1023E00000000011100000000000000000000000CC -:1023F0000000000040C088018202000000000201CD -:1024000003C101C1401110C040C100000001000023 -:1024100004C000880000400000C10000000000006F -:102420000000000000084000000100000000000063 -:10243000000000000000000000000000000000009C -:10244000000000000000000000000000000000008C +:102020000000000000010001000100C000010401E7 +:1020300000C101850001000100100008000100013D +:1020400000C0000000010001000100C0000100010B +:1020500000C001090001040100100082000100011C +:1020600000C00000000000010001000100C00001EC +:10207000000100C00109000100010010000400017E +:10208000000100C0000000010001000100C00001CB +:10209000000100C001090001000100100010000152 +:1020A000000100C1000000410041004100820041E8 +:1020B00000410083404100081141000000800041C0 +:1020C00000410082000000410041004100820041C7 +:1020D0000041008940C1000811410000008000411A +:1020E00000410082000000000041004100410082E8 +:1020F00000410041008940C100081141000000007A +:102100000041004100820000004100410041008286 +:1021100000410041008940C10008114100000080D9 +:1021200000410041008800004100030000000080E1 +:1021300041009100000008008800820000C090006B +:10214000C100C100008000004100030000000080C9 +:1021500041009100000008008800820000408200D9 +:10216000C100C10000800000000341000300000026 +:1021700000804100840000000800880082000040C8 +:102180009100C100C1000080000041000300000078 +:1021900000804100C000000008008800020000919B +:1021A0008400C100C10000800000010001000000A7 +:1021B00000C00100C00000000100410008C000098B +:1021C000C0000900C10000840202010001000000FB +:1021D00000C00100C00000000100410008C00089EB +:1021E000C0000900C10000840202000001000100DB +:1021F000000000C00100C00000000100410008C054 +:102200000089C0000900C100008402020100010031 +:10221000000000C00100C10000000100410084C0B6 +:102220000008C0000900C10000C0880000C0000113 +:10223000C0C100000000000100C010100009000132 +:1022400000C10000000000010000000000C000010B +:10225000C0C100000000000100C010100009000112 +:1022600000C100000000000100000000000000C0EC +:102270000001C0C100000000000100C010100009F2 +:10228000000100C10000000000010000000000C0CB +:102290000001C0C100000000000100C0841000095E +:1022A000000100C1000000000001000100000080EA +:1022B000004180C100000000004100C1008200C157 +:1022C000004100C100000000004100020000008049 +:1022D000004180C100000000004100C1008200C137 +:1022E000004100C1000000000041000200000000A9 +:1022F0000080004180C100000000004100C1008258 +:1023000000C1004100C100000000004100020000C7 +:102310000080004180C100000000004100C1008237 +:1023200000C1004100C100000000004100080000A1 +:10233000C100800080C10000410200009000410007 +:10234000C141000080040000410000008000410005 +:10235000C100800080C10000410200001000410067 +:10236000C1410000801000004100000080004100D9 +:102370000000C100800080C1000041020000100088 +:102380004100C141000080100000410000008000B9 +:102390004100C100800080C1000041040000100025 +:1023A0004100C14100008010000041000000800099 +:1023B0004100C1004000C0C100000100C000080091 +:1023C0000100C1110200C000000001000000C000B7 +:1023D0000100C1004000C0C100000100C0000200B7 +:1023E0000100C1110200C000000001000000C00097 +:1023F00001000000C1004000C0C100000100C00099 +:1024000002000100C1110200C00000000100000034 +:10241000C0000100C1004000C0C100000100C000B8 +:1024200004000100C1110200C00000000100000012 +:10243000C000010000000000000000420000000099 +:102440000000000081120048070048000000000062 :10245000000000000000000000000042000000003A -:1024600000004800810000E000004800000000007B -:102470000000004200000000000000004842000090 -:10248000000000004842600600600600484200006C -:102490000000000048420000000000000042000070 -:1024A000000000004800500000E0000000000000B4 -:1024B00000000000004200000000000000000000DA +:102460000000000081120048070048000000000042 +:10247000000000000000000000000000004200001A +:102480000000000000008112004807004800000022 +:1024900000000000000000000000000000420000FA +:1024A0000000000000008112004807004800000002 +:1024B000000000000082000000000000000000009A :1024C000000000000000000000000000000000000C :1024D00000000000000000000000000000000000FC :1024E00000000000000000000000000000000000EC @@ -217743,80 +217743,80 @@ :10258000000000000000000000000000000000004B :10259000000000000000000000000000000000003B :1025A000000000000000000000000000000000002B -:1025B000000000000000000000000000000000001B +:1025B00000000000000000000000757B000000002B :1025C000000000000000000000000000000000000B -:1025D00000000000000000000000747B000000000C +:1025D0000000000000000000DEAE757B000000007F :1025E00000000000000000000000000000000000EB -:1025F0000000000000000000DE2E0000757B0000DF +:1025F0000000000000000000DEAE0000757B00005F :1026000000000000000000000000000000000000CA -:1026100000000000000000000000DEAE747B00003F +:1026100000000000000000000000DEAE757B00003E :1026200000000000000000000000000000000000AA -:1026300000000000000000000000DE2E000000008E -:10264000000000000000000000000000000000008A -:102650000000000000000000000000006156034080 -:102660000000000000000231E00000000000000057 -:102670000C4000000000000002C06A86000067E60F -:1026800043400000000000000231E00000000000B4 -:1026900000000C4000000000000002C267E6615626 -:1026A00003400000000000000231E00000000000D4 -:1026B00000000C4000000000000002C06A8600001C +:1026300000000000000000000000DEAE60C60300E5 +:102640000000000000000031E00000000000000079 +:102650000C0000000000000000C0630660C603001C +:102660000000000000000031E00000000000000059 +:102670000C0000000000000000C06306000060C6FF +:1026800003000000000000000031E0000000000036 +:1026900000000C0000000000000000C0630660C6DF +:1026A00003000000000000000031E0000000000016 +:1026B00000000C0000000000000000C063060000E5 :1026C000000000000000000000000000000000000A :1026D00000000000000000000000000000000000FA :1026E00000000000000000000000000000000000EA :1026F00000000000000000000000000000000000DA -:1027000000000000000000000000000000000000C9 +:1027000000000000000000000000000000050000C4 :1027100000000000000000000000000000000000B9 :1027200000000000000000000000000000000000A9 -:102730000000000000000000000000000000000099 +:102730000000000000001000000000000000000089 :102740000000000000000000000000000000000089 :102750000000000000000000000000000000000079 :102760000000000000000000000000000000000069 :102770000000000000000000000000000000000059 :102780000000000000000000000000000000000049 -:102790000000000000000000000040004000400079 +:1027900000000000000000000000400000004000B9 :1027A0000000000000000000000000000000000029 -:1027B0000000000000000000000040004000000099 +:1027B0000000000000000000000000000000000019 :1027C0000000000000000000000000000000000009 :1027D00000000000000000000000000000000000F9 :1027E00000000000000000000000000000000000E9 :1027F00000000000000000000000000000000000D9 -:102800000000000000000000000000001000900028 -:10281000000010009000A0000000A00000000000D8 +:1028000000000000000000000000000000000000C8 +:1028100000000000000000000000000000000000B8 :1028200000000000000000000000000000000000A8 :102830000000000000000000000000000000000098 :102840000000000000000000000000000000000088 :102850000000000000000000000000000000000078 -:102860000000000000000000000000000000000068 -:102870000000000000000000000000000000000058 -:102880000000000000000000000010000000000038 -:102890000000000000001000000000080000001010 -:1028A0000000000000000000000000880000000898 -:1028B00000000000000800080000001000000010E8 -:1028C0000000000000000000000000000000000008 +:102860000000000000000000000000000008000060 +:102870000000000800000008000800000000000040 +:102880000000000000000000000000000000000840 +:10289000000000000008000000080008008400108C +:1028A000008400000000000000000000000000089C +:1028B0000000000000080000000800840000000084 +:1028C0000000008800000000000000000000000080 :1028D00000000000000000000000000000000000F8 :1028E00000000000000000000000000000000000E8 -:1028F00000000000000000000000000000000000D8 -:1029000000000000000000000000000300000000C4 -:1029100000000000000000000000000000000000B7 -:102920000000000000000000000000080000000897 -:102930000000000000000000000000000000000097 +:1028F0000041000000000000000000000000000097 +:1029000000000000000000000000000000210000A6 +:102910000000000000210000000000000021000075 +:10292000000000000008000000000000002100413D +:10293000000000080000000000000000004100004E :102940000000000000000000000000000000000087 -:102950000000000000000000000000000000000077 -:102960000000000000000000000000000000000067 -:102970000000000000000000000000000000000057 -:10298000000800000000000000000000000000003F -:1029900000000000000000000000000000A0000097 -:1029A00000A0000200000000000000000000008203 -:1029B0000000000000000000000000000000000017 -:1029C0000000008400A000000000000000000000E3 +:10295000000000000000000000000000000800105F +:10296000001000A000840000000000000000000033 +:102970000000000000000000000000000008000847 +:102980000008000800A0000000000000000000A0F7 +:10299000000000000000000000000000000000082F +:1029A00000A0001000A000080000000000000000CF +:1029B000000000000000000000000000000000A077 +:1029C0000000000800A000C000000000000000009F :1029D00000000000000000000000000000000000F7 :1029E00000000000000000000000000000000000E7 :1029F00000000000000000000000000000000000D7 :102A000000000000000000000000000000000000C6 -:102A100000000000000000090000000000020003A8 -:102A2000000000090000000000000000000000009D +:102A100000000000000000000000000000000000B6 +:102A200000000000000000000000000000000000A6 :102A30000000000000000000000000000000000096 -:102A40000000000000000000002100210000000044 +:102A40000000000000000000000000000000000086 :102A50000000000000000000000000000000000076 :102A60000000000000000000000000000000000066 :102A70000000000000000000000000000000000056 @@ -217829,25 +217829,25 @@ :102AE00000000000000000000000000000000000E6 :102AF00000000000000000000000000000000000D6 :102B000000000000000000000000000000000000C5 -:102B10000000000000000000004100000000000074 -:102B2000000000000000000000080000000000009D -:102B3000000000000000000000000008000000008D +:102B100000000000000000000000000000000000B5 +:102B200000000000000000000000000000000000A5 +:102B30000000000000000000000000000000000095 :102B40000000000000000000000000000000000085 -:102B50000000000000000000000000000000000075 -:102B60000000000000000000000000000000000065 -:102B70000000000000000000000000000000000055 -:102B8000000000A00008000000000000000000009D -:102B90000000000000000008000000080000000025 -:102BA000000800080082000000000084000000000F -:102BB0000000000000000000000000000000000015 -:102BC000000000000008000800880000000000006D -:102BD00000000000000000000000000000000000F5 +:102B50000000000000000000000800000000000865 +:102B6000000000080000000000000000000000005D +:102B70000000000000000000000800000000000845 +:102B80000000000800A0000000000000000000009D +:102B9000000000000000000000000008000000002D +:102BA00000080000000800A0000000000000000075 +:102BB000000000000000000000000008000000000D +:102BC00000080000000800000000000000000000F5 +:102BD00000080000000000000000000000000000ED :102BE00000000000000000000000000000000000E5 -:102BF00000000000000000000000000000000000D5 +:102BF00000000000000000100000000000000000C5 :102C000000000000000000000000000000000000C4 :102C100000000000000000000000000000000000B4 :102C200000000000000000000000000000000000A4 -:102C3000000000000008000000000000000000008C +:102C30000000000000000000000000000000000094 :102C40000000000000000000000000000000000084 :102C50000000000000000000000000000000000074 :102C60000000000000000000000000000000000064 @@ -218014,36 +218014,36 @@ :10367000000000000000000000000000000000004A :10368000000000000000000000000000000000003A :10369000000000000000000000000000000000002A -:1036A000000000000000000000000000000000001A +:1036A0000000000000000000000000080000000012 :1036B000000000000000000000000000000000000A -:1036C00000000000000000000000000000000008F2 -:1036D00000000000000000000010000000000000DA -:1036E00000000000000000000000000000000010CA -:1036F000000000400000000000000000000000008A +:1036C00000000000000000000000000000100000EA +:1036D00000000000000000000000000000000000EA +:1036E00000000000000000000000000000100000CA +:1036F00000000000000000000000000000000000CA :1037000000000000000000000000000000000000B9 :1037100000000000000000000000000000000000A9 :103720000000000000000000000000000000000099 :103730000000000000000000000000000000000089 -:103740000000000000000000000000000002000077 +:103740000000000000000000000000000000000079 :103750000000000000000000000000000000000069 -:103760000000000000000000000000000002000057 +:103760000000000000000000000000000000100049 :103770000000000000000000000000000000000049 :103780000000000000000000000000000000000039 :103790000000000000000000000000000000000029 :1037A0000000000000000000000000000000000019 :1037B0000000000000000000000000000000000009 -:1037C0000000000000000000820082008200000073 -:1037D00082008200000000000000000008000000DD -:1037E00000001000000000000000000000000000C9 -:1037F0000000000000008200000000000000000047 +:1037C00000000000000000000000000000000000F9 +:1037D00004000000000000000000000000000000E5 +:1037E00000000000000000000000000000000000D9 +:1037F00000000000000000000000000000000000C9 :1038000000000000000000000000000000000000B8 :1038100000000000000000000000000000000000A8 :103820000000000000000000000000000000000098 :103830000000000000000000000000000000000088 :103840000000000000000000000000000000000078 -:103850000000000000000000000000000000000068 +:103850000000001000000000000000000000000058 :103860000000000000000000000000000000000058 -:1038700000000000008400000000000000000000C4 +:103870000000000000000000000000000000000048 :103880000000000000000000000000000000000038 :103890000000000000000000000000000000000028 :1038A0000000000000000000000000000000000018 @@ -218051,14 +218051,14 @@ :1038C00000000000000000000000000000000000F8 :1038D00000000000000000000000000000000000E8 :1038E00000000000000000000000000000000000D8 -:1038F00000000000000000000400000010000000B4 +:1038F00000000000000000000000000000000000C8 :1039000000000000000000000000000000000000B7 :1039100000000000000000000000000000000000A7 :103920000000000000000000000000000000000097 :103930000000000000000000000000000000000087 :103940000000000000000000000000000000000077 :103950000000000000000000000000000000000067 -:10396000000000000000000000080000000000004F +:103960000000000000000000000000000000000057 :103970000000000000000000000000000000000047 :103980000000000000000000000000000000000037 :103990000000000000000000000000000000000027 @@ -218092,7 +218092,7 @@ :103B50000000000000000000000000000000000065 :103B60000000000000000000000000000000000055 :103B70000000000000000000000000000000000045 -:103B800000A0000000000000000000000000000095 +:103B80000000000000000000000000000000000035 :103B90000000000000000000000000000000000025 :103BA0000000000000000000000000000000000015 :103BB0000000000000000000000000000000000005 @@ -218100,7 +218100,7 @@ :103BD00000000000000000000000000000000000E5 :103BE00000000000000000000000000000000000D5 :103BF00000000000000000000000000000000000C5 -:103C00000000000000000000000000000080000034 +:103C000000000000000000000000000000000000B4 :103C100000000000000000000000000000000000A4 :103C20000000000000000000000000000000000094 :103C30000000000000000000000000000000000084 @@ -218108,7 +218108,7 @@ :103C50000000000000000000000000000000000064 :103C60000000000000000000000000000000000054 :103C70000000000000000000000000000000000044 -:103C80000000000000000000000000000000001024 +:103C80000000000000000000000000000000000034 :103C90000000000000000000000000000000000024 :103CA0000000000000000000000000000000000014 :103CB0000000000000000000000000000000000004 @@ -218116,8 +218116,8 @@ :103CD00000000000000000000000000000000000E4 :103CE00000000000000000000000000000000000D4 :103CF00000000000000000000000000000000000C4 -:103D0000000000000000000000000000000000882B -:103D10000088000200100000000000000000000009 +:103D000000000000000000000000000000000000B3 +:103D100000000000000000000000000000000000A3 :103D20000000000000000000000000000000000093 :103D30000000000000000000000000000000000083 :103D40000000000000000000000000000000000073 @@ -218125,7 +218125,7 @@ :103D60000000000000000000000000000000000053 :103D70000000000000000000000000000000000043 :103D80000000000000000000000000000000000033 -:103D900000000000000000800000000000000000A3 +:103D90000000000000000000000000000000000023 :103DA0000000000000000000000000000000000013 :103DB0000000000000000000000000000000000003 :103DC00000000000000000000000000000000000F3 @@ -218149,7 +218149,7 @@ :103EE00000000000000000000000000000000000D2 :103EF00000000000000000000000000000000000C2 :103F000000000000000000000000000000000000B1 -:103F10000000000000001000000000001000000081 +:103F100000000000000000000000000000000000A1 :103F20000000000000000000000000000000000091 :103F30000000000000000000000000000000000081 :103F40000000000000000000000000000000000071 @@ -218157,7 +218157,7 @@ :103F60000000000000000000000000000000000051 :103F70000000000000000000000000000000000041 :103F80000000000000000000000000000000000031 -:103F900000000000000000008000000000000000A1 +:103F90000000000000000000000000000000000021 :103FA0000000000000000000000000000000000011 :103FB0000000000000000000000000000000000001 :103FC00000000000000000000000000000000000F1 @@ -218206,7 +218206,7 @@ :10427000000000000000000000000000000000003E :10428000000000000000000000000000000000002E :10429000000000000000000000000000000000001E -:1042A000000000003C30FFFC0000000000000000A7 +:1042A000000000000000000000000000000000000E :1042B00000000000000000000000000000000000FE :1042C00000000000000000000000000000000000EE :1042D00000000000000000000000000000000000DE @@ -218214,7 +218214,7 @@ :1042F00000000000000000000000000000000000BE :1043000000000000000000000000000000000000AD :10431000000000000000000000000000000000009D -:104320000000000000003820FEBC0000000000007B +:10432000000000000000000000000000000000008D :10433000000000000000000000000000000000007D :10434000000000000000000000000000000000006D :10435000000000000000000000000000000000005D @@ -218262,24 +218262,24 @@ :1045F00000000000000000000000000000000000BB :1046000000000000000000000000000000000000AA :10461000000000000000000000000000000000009A -:10462000000000000000000000000000000000008A +:10462000000000004000000000000000000000004A :10463000000000000000000000000000000000007A :10464000000000000000000000000000000000006A :10465000000000000000000000000000000000005A :10466000000000000000000000000000000000004A :10467000000000000000000000000000000000003A -:10468000000000004000400040000000000000006A +:1046800000000000400000004000000000000000AA :10469000000000000000000000000000000000001A -:1046A0000002000040004000000000000000000088 +:1046A000000000000000000000000000000000000A :1046B00000000000000000000000000000000000FA :1046C00000000000000000000000000000000000EA :1046D00000000000000000000000000000000000DA :1046E00000000000000000000000000000000000CA :1046F00000000000000000000000000000000000BA -:1047000000000000000000008200000000008200A5 -:10471000820004008200000000000000000004008D +:1047000000000000000000000000000000000000A9 +:104710000000000000000000000000000000000099 :104720000000000000000000000000000000000089 -:10473000000000000000400008000000010200002E +:104730000000001000000000000008000010000051 :104740000000000000000000000000000000000069 :104750000000000000000000000000000000000059 :104760000000000000000000000000000000000049 @@ -218287,7 +218287,7 @@ :104780000000000000000000000000000000000029 :104790000000000000000000000000000000000019 :1047A0000000000000000000000000000000000009 -:1047B00000000000000000008000800000004001B8 +:1047B00000000000000000000000000000000000F9 :1047C00000000000000000000000000000000000E9 :1047D00000000000000000000000000000000000D9 :1047E00000000000000000000000000000000000C9 @@ -218312,7 +218312,7 @@ :104910000000000000000000000000000000000097 :104920000000000000000000000000000000000087 :104930000000000000000000000000000000000077 -:104940000200000000100000000000000000000055 +:104940000000000000000000000000000000000067 :104950000000000000000000000000000000000057 :104960000000000000000000000000000000000047 :104970000000000000000000000000000000000037 @@ -218320,7 +218320,7 @@ :104990000000000000000000000000000000000017 :1049A0000000000000000000000000000000000007 :1049B00000000000000000000000000000000000F7 -:1049C0000000800000000001000000000000000066 +:1049C00000000000000000000000000000000000E7 :1049D00000000000000000000000000000000000D7 :1049E00000000000000000000000000000000000C7 :1049F00000000000000000000000000000000000B7 @@ -218328,7 +218328,7 @@ :104A10000000000000000000000000000000000096 :104A20000000000000000000000000000000000086 :104A30000000000000000000000000000000000076 -:104A40000000000000000400000000000000000062 +:104A40000000000000000000000000000000000066 :104A50000000000000000000000000000000000056 :104A60000000000000000000000000000000000046 :104A70000000000000000000000000000000000036 @@ -218336,7 +218336,7 @@ :104A90000000000000000000000000000000000016 :104AA0000000000000000000000000000000000006 :104AB00000000000000000000000000000000000F6 -:104AC00000000000000000A0001000000000000036 +:104AC00000000000000000000000000000000000E6 :104AD00000000000000000000000000000000000D6 :104AE00000000000000000000000000000000000C6 :104AF00000000000000000000000000000000000B6 @@ -218360,24 +218360,24 @@ :104C10000000000000000000000000000000000094 :104C20000000000000000000000000000000000084 :104C30000000000000000000000000000000000074 -:104C40000000000000000000000002A101110400AB -:104C500084020000000000000000000000000000CE +:104C40000000000000000000000000000000000064 +:104C50000000000000000000000000000000000054 :104C60000000000000000000000000000000000044 :104C70000000000000000000000000000000000034 :104C80000000000000000000000000000000000024 :104C90000000000000000000000000000000000014 :104CA0000000000000000000000000000000000004 :104CB00000000000000000000000000000000000F4 -:104CC0000000000000000000000000000488418394 -:104CD00000100011000000000000000000000000B3 +:104CC00000000000000000000000000000000000E4 +:104CD00000000000000000000000000000000000D4 :104CE00000000000000000000000000000000000C4 :104CF00000000000000000000000000000000000B4 :104D000000000000000000000000000000000000A3 :104D10000000000000000000000000000000000093 :104D20000000000000000000000000000000000083 :104D30000000000000000000000000000000000073 -:104D400000000000000000000000000000008000E3 -:104D5000A120C10009820000000000000000000046 +:104D40000000000000000000000000000000000063 +:104D50000000000000000000000000000000000053 :104D60000000000000000000000000000000000043 :104D70000000000000000000000000000000000033 :104D80000000000000000000000000000000000023 @@ -218385,7 +218385,7 @@ :104DA0000000000000000000000000000000000003 :104DB00000000000000000000000000000000000F3 :104DC00000000000000000000000000000000000E3 -:104DD00008020900A02000A0000000000000000060 +:104DD00000000000000000000000000000000000D3 :104DE00000000000000000000000000000000000C3 :104DF00000000000000000000000000000000000B3 :104E000000000000000000000000000000000000A2 @@ -218393,7 +218393,7 @@ :104E20000000000000000000000000000000000082 :104E30000000000000000000000000000000000072 :104E40000000000000000000000000000000000062 -:104E500000000004010082C1A00800000000000062 +:104E50000000000000000000000000000000000052 :104E60000000000000000000000000000000000042 :104E70000000000000000000000000000000000032 :104E80000000000000000000000000000000000022 @@ -218401,7 +218401,7 @@ :104EA0000000000000000000000000000000000002 :104EB00000000000000000000000000000000000F2 :104EC00000000000000000000000000000000000E2 -:104ED0000000000000090809C121808000000000D6 +:104ED00000000000000000000000000000000000D2 :104EE00000000000000000000000000000000000C2 :104EF00000000000000000000000000000000000B2 :104F000000000000000000000000000000000000A1 @@ -218409,7 +218409,7 @@ :104F20000000000000000000000000000000000081 :104F30000000000000000000000000000000000071 :104F40000000000000000000000000000000000061 -:104F5000000000000000411104820400040400006D +:104F50000000000000000000000000000000000051 :104F60000000000000000000000000000000000041 :104F70000000000000000000000000000000000031 :104F80000000000000000000000000000000000021 @@ -218417,7 +218417,7 @@ :104FA0000000000000000000000000000000000001 :104FB00000000000000000000000000000000000F1 :104FC00000000000000000000000000000000000E1 -:104FD0000000000000000000900290C02104880141 +:104FD00000000000000000000000000000000000D1 :104FE00000000000000000000000000000000000C1 :104FF00000000000000000000000000000000000B1 :1050000000000000000000000000000000000000A0 @@ -218426,7 +218426,7 @@ :105030000000000000000000000000000000000070 :105040000000000000000000000000000000000060 :105050000000000000000000000000000000000050 -:1050600042000000000000000000000000000000FE +:105060000000000000000000000000000000000040 :105070000000000000000000000000000000000030 :105080000000000000000000000000000000000020 :105090000000000000000000000000000000000010 @@ -218434,7 +218434,7 @@ :1050B00000000000000000000000000000000000F0 :1050C00000000000000000000000000000000000E0 :1050D00000000000000000000000000000000000D0 -:1050E00042E7000000000000000000000000000097 +:1050E00000000000000000000000000000000000C0 :1050F00000000000000000000000000000000000B0 :10510000000000000000000000000000000000009F :10511000000000000000000000000000000000008F @@ -218442,7 +218442,7 @@ :10513000000000000000000000000000000000006F :10514000000000000000000000000000000000005F :10515000000000000000000000000000000000004F -:105160000001FFFF42E70000000000000000000017 +:10516000000000000000000000000000000000003F :10517000000000000000000000000000000000002F :10518000000000000000000000000000000000001F :10519000000000000000000000000000000000000F @@ -218458,7 +218458,7 @@ :10523000000000000000000000000000000000006E :10524000000000000000000000000000000000005E :10525000000000000000000000000000000000004E -:10526000000000810000FCB8FCB800000000000055 +:10526000000000000000000000000000000000003E :10527000000000000000000000000000000000002E :10528000000000000000000000000000000000001E :10529000000000000000000000000000000000000E @@ -218466,7 +218466,7 @@ :1052B00000000000000000000000000000000000EE :1052C00000000000000000000000000000000000DE :1052D00000000000000000000000000000000000CE -:1052E0000000000000810000B830B830000000006D +:1052E00000000000000000000000000000000000BE :1052F00000000000000000000000000000000000AE :10530000000000000000000000000000000000009D :10531000000000000000000000000000000000008D @@ -218474,7 +218474,7 @@ :10533000000000000000000000000000000000006D :10534000000000000000000000000000000000005D :10535000000000000000000000000000000000004D -:1053600000000000000000610006000D00010000C8 +:10536000000000000000000000000000000000003D :10537000000000000000000000000000000000002D :10538000000000000000000000000000000000001D :10539000000000000000000000000000000000000D @@ -218482,7 +218482,7 @@ :1053B00000000000000000000000000000000000ED :1053C00000000000000000000000000000000000DD :1053D00000000000000000000000000000000000CD -:1053E00000000000000000000800FF08D1F3D1F326 +:1053E00000000000000000000000000000000000BD :1053F00000000000000000000000000000000000AD :10540000000000000000000000000000000000009C :10541000000000000000000000000000000000008C @@ -218490,24 +218490,24 @@ :10543000000000000000000000000000000000006C :10544000000000000000000000000000000000005C :10545000000000000000000000000000000000004C -:10546000000000000000000000002F00FF2FC0D14E -:10547000C0D100000000000000000000000000009B +:10546000000000000000000000000000000000003C +:10547000000000000000000000000000000000002C :10548000000000000000000000000000000000001C :10549000000000000000000000000000000000000C :1054A00000000000000000000000000000000000FC :1054B00000000000000000000000000000000000EC :1054C00000000000000000000000000000000000DC :1054D00000000000000000000000000000000000CC -:1054E000000000000000000000000000414100003A -:1054F0005505FF5F000000000000000000000000F4 +:1054E00000000000000000000000000000000000BC +:1054F00000000000000000000000000000000000AC :10550000000000000000000000000000000000009B :10551000000000000000000000000000000000008B :10552000000000000000000000000000000000007B :10553000000000000000000000000000000000006B :10554000000000000000000000000000000000005B :10555000000000000000000000000000000000004B -:105560000000000000000000000000000000000437 -:10557000000005005F550000000000000000000072 +:10556000000000000000000000000000000000003B +:10557000000000000000000000000000000000002B :10558000000000000000000000000000000000001B :10559000000000000000000000000000000000000B :1055A00000000000000000000000000000000000FB @@ -218521,25 +218521,25 @@ :10562000000000000000000000000000000000007A :10563000000000000000000000000000000000006A :10564000000000000000000000000000000000005A -:105650000000000000000002000000000000000048 -:10566000100000000000000000000000000000002A -:105670000002404000400000000000000000000068 +:10565000000000000000000000000000000000004A +:10566000000000000000000000000000000000003A +:10567000000000000000000000000000000000002A :10568000000000000000000000000000000000001A :10569000000000000000000000000000000000000A :1056A00000000000000000000000000000000000FA :1056B00000000000000000000000000000000000EA -:1056C00000000000020002000200000002000000D2 -:1056D00002000000000000000000020000000000C6 +:1056C00000000000000000000000000000000000DA +:1056D00000000000000000000000000000000000CA :1056E00000000000000000000000000000000000BA -:1056F00000000000000000000000000000000000AA +:1056F000000000000000000000000010000000009A :105700000000000000000000000000000000000099 :105710000000000000000000000000000000000089 :105720000000000000000000000000000000000079 -:105730000000000000000000000000000000000069 +:105730000000000000000000000002000000000067 :105740000000000000000000000000000000000059 :105750000000000000000000000000000000000049 :105760000000000000000000000000000000000039 -:105770000000000000000000000000000000000029 +:105770000000000000000000000002000000000027 :105780000000000000000000000000000000000019 :105790000000000000000000000000000000000009 :1057A00000000000000000000000000000000000F9 @@ -218555,7 +218555,7 @@ :105840000000000000000000000000000000000058 :105850000000000000000000000000000000000048 :105860000000000000000000000000000000000038 -:105870000000000005000500050000000000000019 +:105870000000000000000000000000000000000028 :105880000000000000000000000000000000000018 :105890000000000000000000000000000000000008 :1058A00000000000000000000000000000000000F8 @@ -218588,7 +218588,7 @@ :105A50000000000000000000000000000000000046 :105A60000000000000000000000000000000000036 :105A70000000000000000000000000000000000026 -:105A800000001190058800020000000000000000E6 +:105A80000000000000000000000000000000000016 :105A90000000000000000000000000000000000006 :105AA00000000000000000000000000000000000F6 :105AB00000000000000000000000000000000000E6 @@ -218754,27 +218754,27 @@ :1064B00000000000000000000000000000000000DC :1064C00000000000000000000000000000000000CC :1064D00000000000000000000000000000000000BC -:1064E00000000000000000000000000000000000AC +:1064E000000000000000000000000000400000006C :1064F000000000000000000000000000000000009C -:10650000000000000000000000000000000000008B +:10650000000000000000000000000000400020002B :10651000000000000000000000000000000000007B :10652000000000000000000000000000000000006B :10653000000000000000000000000000000000005B :10654000000000000000000000000000000000004B :10655000000000000000000000000000000000003B -:1065600000000000000000000000000040004000AB +:1065600000000000000000000000000040000000EB :1065700040000000000000000000000000000000DB -:1065800000000000000000000000000000004000CB +:10658000000000000000000000000000000000000B :1065900040000000000000000000000000000000BB -:1065A00000000000000000000000000000000000EB +:1065A00000000000000000000000000200000000E9 :1065B00000000000000000000000000000000000DB :1065C00000000000000000000000000000000000CB :1065D00000000000000000000000000000000000BB :1065E00000000000000000000000000000000000AB -:1065F0000000000000000002000000000000000099 -:10660000020002000000020002000200000002007E -:10661000000000000000000000000000000000007A -:10662000000000000000000000000000A0000000CA +:1065F000000000000000000000000000000000009B +:10660000000000000000000000000000000000008A +:10661000000000000000000000000000001000006A +:10662000000000000000001000000000000000005A :10663000000000000000000000000000000000005A :10664000000000000000000000000000000000004A :10665000000000000000000000000000000000003A @@ -218790,7 +218790,7 @@ :1066F000000000000000000000000000000000009A :106700000000000000000000000000000000000089 :106710000000000000000000000000000000000079 -:106720000000000000000100010001000000010065 +:106720000000000000000000000000000000000069 :106730000000000000000000000000000000000059 :106740000000000000000000000000000000000049 :106750000000000000000000000000000000000039 @@ -218798,23 +218798,23 @@ :106770000000000000000000000000000000000019 :106780000000000000000000000000000000000009 :1067900000000000000000000000000000000000F9 -:1067A00000000000000000000400040004000000DD -:1067B00004000000000000000000000000000000D5 +:1067A00000000000000000000000000000000000E9 +:1067B00000000000000000000000000000000000D9 :1067C00000000000000000000000000000000000C9 :1067D00000000000000000000000000000000000B9 :1067E00000000000000000000000000000000000A9 :1067F0000000000000000000000000000000000099 :106800000000000000000000000000000000000088 :106810000000000000000000000000000000000078 -:106820000000000000000000040000000000001054 -:106830000000000000000000000000000000000058 +:106820000000000000000000000000000000000068 +:106830000000000000000000080008000000000048 :106840000000000000000000000000000000000048 :106850000000000000000000000000000000000038 :106860000000000000000000000000000000000028 :106870000000000000000000000000000000000018 :106880000000000000000000000000000000000008 :1068900000000000000000000000000000000000F8 -:1068A0000000000000000000000080000000000068 +:1068A00000000000000000000000000000000000E8 :1068B00000000000000000000000000000000000D8 :1068C00000000000000000000000000000000000C8 :1068D00000000000000000000000000000000000B8 @@ -218823,7 +218823,7 @@ :106900000000000000000000000000000000000087 :106910000000000000000000000000000000000077 :106920000000000000000000000000000000000067 -:1069300002000000008200000000000000000000D3 +:106930000000000000000000000000000000000057 :106940000000000000000000000000000000000047 :106950000000000000000000000000000000000037 :106960000000000000000000000000000000000027 @@ -218831,16 +218831,16 @@ :106980000000000000000000000000000000000007 :1069900000000000000000000000000000000000F7 :1069A00000000000000000000000000000000000E7 -:1069B00000000000000000210000000000000300B3 -:1069C00000000002000000000000000000000000C5 +:1069B00000000000000000000000000000000000D7 +:1069C00000000000000000000000000000000000C7 :1069D00000000000000000000000000000000000B7 :1069E00000000000000000000000000000000000A7 :1069F0000000000000000000000000000000000097 :106A00000000000000000000000000000000000086 :106A10000000000000000000000000000000000076 :106A20000000000000000000000000000000000066 -:106A300000000000000000000000000000000080D6 -:106A40000000000000000004000000000000000042 +:106A30000000000000000000000000000000000056 +:106A40000000000000000000000000000000000046 :106A50000000000000000000000000000000000036 :106A60000000000000000000000000000000000026 :106A70000000000000000000000000000000000016 @@ -218848,47 +218848,47 @@ :106A900000000000000000000000000000000000F6 :106AA00000000000000000000000000000000000E6 :106AB00000000000000000000000000000000000D6 -:106AC00000200000000000000000000000000000A6 +:106AC00000000000000000000000000000000000C6 :106AD00000000000000000000000000000000000B6 :106AE00000000000000000000000000000000000A6 :106AF0000000000000000000000000000000000096 :106B00000000000000000000000000000000000085 :106B10000000000000000000000000000000000075 :106B20000000000000000000000000000000000065 -:106B30000000000000C000900010000000C10090A4 -:106B40000000909000000000000000000000000025 +:106B30000000000000000000000000000000000055 +:106B40000000000000000000000000000000000045 :106B50000000000000000000000000000000000035 :106B60000000000000000000000000000000000025 :106B70000000000000000000000000000000000015 :106B80000000000000000000000000000000000005 :106B900000000000000000000000000000000000F5 :106BA00000000000000000000000000000000000E5 -:106BB000000000000000008000800000000000884D -:106BC000009000020009000000000000000000002A +:106BB00000000000000000000000000000000000D5 +:106BC00000000000000000000000000000000000C5 :106BD00000000000000000000000000000000000B5 :106BE00000000000000000000000000000000000A5 :106BF0000000000000000000000000000000000095 :106C00000000000000000000000000000000000084 :106C10000000000000000000000000000000000074 :106C20000000000000000000000000000000000064 -:106C300000000000000000000000800000008080D4 -:106C400000000000000080000000000000000000C4 +:106C30000000000000000000000000000000000054 +:106C40000000000000000000000000000000000044 :106C50000000000000000000000000000000000034 :106C60000000000000000000000000000000000024 :106C70000000000000000000000000000000000014 :106C80000000000000000000000000000000000004 :106C900000000000000000000000000000000000F4 :106CA00000000000000000000000000000000000E4 -:106CB0000000000000000000000000008200000052 -:106CC000C090880000000000C0900000000000009C +:106CB00000000000000000000000000000000000D4 +:106CC00000000000000000000000000000000000C4 :106CD00000000000000000000000000000000000B4 :106CE00000000000000000000000000000000000A4 :106CF0000000000000000000000000000000000094 :106D00000000000000000000000000000000000083 :106D10000000000000000000000000000000000073 :106D20000000000000000000000000000000000063 -:106D30000000000000000000000000000000001043 -:106D4000009000C000000100009000C000000000A2 +:106D30000000000000000000000000000000000053 +:106D40000000000000000000000000000000000043 :106D50000000000000000000000000000000000033 :106D60000000000000000000000000000000000023 :106D70000000000000000000000000000000000013 @@ -218896,7 +218896,7 @@ :106D900000000000000000000000000000000000F3 :106DA00000000000000000000000000000000000E3 :106DB00000000000000000000000000000000000D3 -:106DC00000000080008000000800108000800000AB +:106DC00000000000000000000000000000000000C3 :106DD00000000000000000000000000000000000B3 :106DE00000000000000000000000000000000000A3 :106DF0000000000000000000000000000000000093 @@ -218904,7 +218904,7 @@ :106E10000000000000000000000000000000000072 :106E20000000000000000000000000000000000062 :106E30000000000000000000000000000000000052 -:106E4000800000110000008080118005000000001B +:106E40000000000000000000000000000000000042 :106E50000000000000000000000000000000000032 :106E60000000000000000000000000000000000022 :106E70000000000000000000000000000000000012 @@ -218912,7 +218912,7 @@ :106E900000000000000000000000000000000000F2 :106EA00000000000000000000000000000000000E2 :106EB00000000000000000000000000000000000D2 -:106EC00000009000101000000082C001200190908E +:106EC00000000000000000000000000000000000C2 :106ED00000000000000000000000000000000000B2 :106EE00000000000000000000000000000000000A2 :106EF0000000000000000000000000000000000092 @@ -218920,24 +218920,24 @@ :106F10000000000000000000000000000000000071 :106F20000000000000000000000000000000000061 :106F30000000000000000000000000000000000051 -:106F40000000000000820000430000000006000076 -:106F500043000000000000000000000000000000EE +:106F40000000000000000000000000000000000041 +:106F50000000000000000000000000000000000031 :106F60000000000000000000000000000000000021 :106F70000000000000000000000000000000000011 :106F80000000000000000000000000000000000001 :106F900000000000000000000000000000000000F1 :106FA00000000000000000000000000000000000E1 :106FB00000000000000000000000000000000000D1 -:106FC000000000000000FF000000F0000000F000E2 -:106FD0000000FF00000000000000000000000000B2 +:106FC00000000000000000000000000000000000C1 +:106FD00000000000000000000000000000000000B1 :106FE00000000000000000000000000000000000A1 :106FF0000000000000000000000000000000000091 :107000000000000000000000000000000000000080 :107010000000000000000000000000000000000070 :107020000000000000000000000000000000000060 :107030000000000000000000000000000000000050 -:107040000000000000000000FF000000F000000051 -:10705000F000000000000000000000000000000040 +:107040000000000000000000000000000000000040 +:107050000000000000000000000000000000000030 :107060000000000000000000000000000000000020 :107070000000000000000000000000000000000010 :107080000000000000000000000000000000000000 @@ -218952,8 +218952,8 @@ :10711000000000000000000000000000000000006F :10712000000000000000000000000000000000005F :10713000000000000000000000000000000000004F -:107140000000000000000000000000000000000F30 -:10715000000006060000003C00003C3C000000006F +:10714000000000000000000000000000000000003F +:10715000000000000000000000000000000000002F :10716000000000000000000000000000000000001F :10717000000000000000000000000000000000000F :1071800000000000000000000000000000000000FF @@ -218961,7 +218961,7 @@ :1071A00000000000000000000000000000000000DF :1071B00000000000000000000000000000000000CF :1071C00000000000000000000000000000000000BF -:1071D000000F000006060000003C00000000000058 +:1071D00000000000000000000000000000000000AF :1071E000000000000000000000000000000000009F :1071F000000000000000000000000000000000008F :10720000000000000000000000000000000000007E @@ -218969,7 +218969,7 @@ :10722000000000000000000000000000000000005E :10723000000000000000000000000000000000004E :10724000000000000000000000000000000000003E -:10725000030203380C0092C003E3033E0C0DC2C0CE +:10725000000000000000000000000000000000002E :10726000000000000000000000000000000000001E :10727000000000000000000000000000000000000E :1072800000000000000000000000000000000000FE @@ -218993,8 +218993,8 @@ :1073A00000000000000000000000000000000000DD :1073B00000000000000000000000000000000000CD :1073C00000000000000000000000000000000000BD -:1073D00000000000000000000000000000000100AC -:1073E0000505000000000000000000000000000093 +:1073D00000000000000000000000000000000000AD +:1073E000000000000000000000000000000000009D :1073F000000000000000000000000000000000008D :10740000000000000000000000000000000000007C :10741000000000000000000000000000000000006C @@ -219008,31 +219008,31 @@ :1074900000000000000000000000000000000000EC :1074A00000000000000000000000000000000000DC :1074B00000000000000000000000000000000000CC -:1074C00000000000000000000000000000000000BC -:1074D000000000004000000040000000000000002C -:1074E000000000000000000000000000000000009C +:1074C00002000000000000000000000000000000BA +:1074D00000000000000000000000000000000000AC +:1074E000200000000000000000000000000000007C :1074F000000000000000000000000000000000008C :10750000000000000000000000000000000000007B :10751000000000000000000000000000000000006B :10752000000000000000000000000000000000005B :10753000000000000000000000000000000000004B -:107540000002000000000000000000000000000039 -:1075500000000000000000000000000010004000DB -:107560004002000040024000000000000000000057 +:10754000000000000000000000000000000000003B +:10755000000000000000000000000000000000002B +:1075600000020000400000000000000000000000D9 :10757000000000000000000000000000000000000B :1075800000000000000000000000000000000000FB :1075900000000000000000000000000000000000EB :1075A00000000000000000000000000000000000DB -:1075B00000000000000000000000000002000200C7 -:1075C00002000000020000000000000000000000B7 -:1075D00002000000000002000000000000000000A7 -:1075E0000000000000000000000002050000000094 +:1075B00000000000000000000000000000000000CB +:1075C00000000000000000000000000000000000BB +:1075D00000000000000000000000000000000000AB +:1075E0000000000008000000000000000000000093 :1075F000000000000000000000000000000000008B :10760000000000000000000000000000000000007A :10761000000000000000000000000000000000006A :10762000000000000000000000000000000000005A :10763000000000000000000000000000000000004A -:10764000000000000000000000000000000000003A +:1076400000000000000004004000000000000000F6 :10765000000000000000000000000000000000002A :10766000000000000000000000000000000000001A :10767000000000000000000000000000000000000A @@ -219050,13 +219050,13 @@ :107730000000000000000000000000000000000049 :107740000000000000000000000000000000000039 :107750000000000000000000000000000000000029 -:107760000000000000000000000000000000000217 -:107770000000000000A00000001000000000000059 +:107760000000000000000000000000000000000019 +:107770000000000000000000000000000000000009 :1077800000000000000000000000000000000000F9 :1077900000000000000000000000000000000000E9 :1077A00000000000000000000000000000000000D9 :1077B00000000000000000000000000000000000C9 -:1077C0000000000000000000000000000000004079 +:1077C00000000000000000000000000000000000B9 :1077D00000000000000000000000000000000000A9 :1077E0000000000000000000000000000000000099 :1077F0000000000000000000000000000000000089 @@ -219082,8 +219082,8 @@ :107930000000000000000000000000000000000047 :107940000000000000000000000000000000000037 :107950000000000000000000000000000000000027 -:107960000000000000000000000000000084000093 -:10797000000200000000000220A000000000000043 +:107960000000000000000000000000000000000017 +:107970000000000000000000000000000000000007 :1079800000000000000000000000000000000000F7 :1079900000000000000000000000000000000000E7 :1079A00000000000000000000000000000000000D7 @@ -219091,7 +219091,7 @@ :1079C00000000000000000000000000000000000B7 :1079D00000000000000000000000000000000000A7 :1079E0000000000000000000000000000000000097 -:1079F0000000000000000011000000000000000076 +:1079F0000000000000000000000000000000000087 :107A00000000000000000000000000000000000076 :107A10000000000000000000000000000000000066 :107A20000000000000000000000000000000000056 @@ -219248,37 +219248,37 @@ :1083900000000000000000000000000000000000DD :1083A00000000000000000000000000000000000CD :1083B00000000000000000000000000000000000BD -:1083C00000000000000000000000000000000000AD -:1083D000000000000000000000000000000000009D +:1083C000000000000000000000000000000040006D +:1083D000400000000000000000000000000000005D :1083E000000000000000000000000000000000008D -:1083F000000000000000000000000000000000007D +:1083F000200020000000000000000000000000003D :10840000000000000000000000000000000000006C -:10841000000000000000000000000000000040001C -:108420000000000000000000000300000000000049 +:10841000200020000000000000000000100000000C +:10842000000000000000000000000000000000004C :10843000000000000000000000000000000000003C :10844000000000000000000000000000000000002C :10845000000000000000400040004000000000005C :10846000000000000000000000000000000000000C :10847000000000000000000040004000000000007C :1084800000000000000000000000000000000000EC -:1084900000000000000200000000000000000000DA -:1084A00080000000000000000000008200000000CA +:1084900000000000000000000000000000000000DC +:1084A00000000000000000000000000000000000CC :1084B00000000000000000000000000000000000BC :1084C00000000000000000000000000000000000AC :1084D000000000000000000000000000000000009C :1084E000000000000000000000000000000000008C -:1084F000000200000000000000000000000000007A -:108500000000020002000200020000000000000063 -:108510000000020000000000000000000000000059 -:108520000000000000000000000000000040080003 -:108530000800000000000000000000000000000033 +:1084F000000000000000000000000000000000007C +:108500000000000000000800000000000000000063 +:108510000800000000000000000000000000000053 +:108520000000000000000000000000000800020041 +:10853000000000000000000000000000000000003B :10854000000000000000000000000000000000002B :10855000000000000000000000000000000000001B :10856000000000000000000000000000000000000B :1085700000000000000000000000000000000000FB :1085800000000000000000000000000000000000EB :1085900000000000000000000000000000000000DB -:1085A00000000000008200840008000000000000BD +:1085A00000000000000000000000000000000000CB :1085B00000000000000000000000000000000000BB :1085C00000000000000000000000000000000000AB :1085D000000000000000000000000000000000009B @@ -219287,31 +219287,31 @@ :10860000000000000000000000000000000000006A :10861000000000000000000000000000000000005A :10862000000000000000000000000000000000004A -:108630000000000500000000000000000000000035 +:10863000000000000000000000000000000000003A :10864000000000000000000000000000000000002A :10865000000000000000000000000000000000001A :10866000000000000000000000000000000000000A :1086700000000000000000000000000000000000FA :1086800000000000000000000000000000000000EA :1086900000000000000000000000000000000000DA -:1086A00000000000000000000000000000A000002A -:1086B0000000008400000000000000000000000036 +:1086A00000000000000000000000000000000000CA +:1086B00000000000000000000000000000000000BA :1086C00000000000000000000000000000000000AA :1086D000000000000000000000000000000000009A :1086E000000000000000000000000000000000008A :1086F000000000000000000000000000000000007A -:108700000000000000400000000000000000000029 +:108700000000000000000000000000000000000069 :108710000000000000000000000000000000000059 :108720000000000000000000000000000000000049 -:1087300000000000004000080000000000000000F1 +:108730000000000000000000000000000000000039 :108740000000000000000000000000000000000029 :108750000000000000000000000000000000000019 :108760000000000000000000000000000000000009 :1087700000000000000000000000000000000000F9 :1087800000000000000000000000000000000000E9 :1087900000000000000000000000000000000000D9 -:1087A000000000000000008400A0000400000000A1 -:1087B00000840000004000000000000000000000F5 +:1087A00000000000000000000000000000000000C9 +:1087B00000000000000000000000000000000000B9 :1087C00000000000000000000000000000000000A9 :1087D0000000000000000000000000000000000099 :1087E0000000000000000000000000000000000089 @@ -219319,7 +219319,7 @@ :108800000000000000000000000000000000000068 :108810000000000000000000000000000000000058 :108820000000000000000000000000000000000048 -:1088300000000008000000002000200020000000D0 +:108830000000000000000000000000000000000038 :108840000000000000000000000000000000000028 :108850000000000000000000000000000000000018 :108860000000000000000000000000000000000008 @@ -219327,40 +219327,40 @@ :1088800000000000000000000000000000000000E8 :1088900000000000000000000000000000000000D8 :1088A00000000000000000000000000000000000C8 -:1088B0000000000000000000000080008000800038 +:1088B00000000000000000000000000000000000B8 :1088C00000000000000000000000000000000000A8 :1088D0000000000000000000000000000000000098 :1088E0000000000000000000000000000000000088 :1088F0000000000000000000000000000000000078 :108900000000000000000000000000000000000067 -:10891000000000000000000800000000000000004F +:108910000000000000000000000000000000000057 :108920000000000000000000000000000000000047 -:10893000000000000021000000000000000000080E +:108930000000000000000000000000000000000037 :108940000000000000000000000000000000000027 :108950000000000000000000000000000000000017 :108960000000000000000000000000000000000007 :1089700000000000000000000000000000000000F7 :1089800000000000000000000000000000000000E7 -:108990000084000000080008000000000000000043 -:1089A0000000000000000000000000000000008443 -:1089B00000000000000000000000000000080000AF -:1089C0000084000000000000000000000000000023 +:1089900000000000000000000000000000000000D7 +:1089A00000000000000000000000000000000000C7 +:1089B00000000000000000000000000000000000B7 +:1089C00000000000000000000000000000000000A7 :1089D0000000000000000000000000000000000097 :1089E0000000000000000000000000000000000087 :1089F0000000000000000000000000000000000077 :108A00000000000000000000000000000000000066 :108A10000000000000000000000000000000000056 :108A20000000000000000000000000000000000046 -:108A30000000000000000000000000000001000035 -:108A40000000000100000000000000000000000025 +:108A30000000000000000000000000000000000036 +:108A40000000000000000000000000000000000026 :108A50000000000000000000000000000000000016 :108A60000000000000000000000000000000000006 :108A700000000000000000000000000000000000F6 :108A800000000000000000000000000000000000E6 :108A900000000000000000000000000000000000D6 :108AA00000000000000000000000000000000000C6 -:108AB0000000000000000000001100100009000884 -:108AC000001000000008001000000000000000007E +:108AB00000000000000000000000000000000000B6 +:108AC00000000000000000000000000000000000A6 :108AD0000000000000000000000000000000000096 :108AE0000000000000000000000000000000000086 :108AF0000000000000000000000000000000000076 @@ -219368,7 +219368,7 @@ :108B10000000000000000000000000000000000055 :108B20000000000000000000000000000000000045 :108B30000000000000000000000000000000000035 -:108B40000000008000001111000000000000000083 +:108B40000000000000000000000000000000000025 :108B50000000000000000000000000000000000015 :108B60000000000000000000000000000000000005 :108B700000000000000000000000000000000000F5 @@ -219376,7 +219376,7 @@ :108B900000000000000000000000000000000000D5 :108BA00000000000000000000000000000000000C5 :108BB00000000000000000000000000000000000B5 -:108BC0000000000000400000010100000000000063 +:108BC00000000000000000000000000000000000A5 :108BD0000000000000000000000000000000000095 :108BE0000000000000000000000000000000000085 :108BF0000000000000000000000000000000000075 @@ -219384,7 +219384,7 @@ :108C10000000000000000000000000000000000054 :108C20000000000000000000000000000000000044 :108C30000000000000000000000000000000000034 -:108C40000000000000000000000000000001000023 +:108C40000000000000000000000000000000000024 :108C50000000000000000000000000000000000014 :108C60000000000000000000000000000000000004 :108C700000000000000000000000000000000000F4 @@ -219392,7 +219392,7 @@ :108C900000000000000000000000000000000000D4 :108CA00000000000000000000000000000000000C4 :108CB00000000000000000000000000000000000B4 -:108CC0000000020020000000000010000000001161 +:108CC00000000000000000000000000000000000A4 :108CD0000000000000000000000000000000000094 :108CE0000000000000000000000000000000000084 :108CF0000000000000000000000000000000000074 @@ -219400,24 +219400,24 @@ :108D10000000000000000000000000000000000053 :108D20000000000000000000000000000000000043 :108D30000000000000000000000000000000000033 -:108D400000000000000000000000002111000000F1 -:108D500011110000000000000000000000000000F1 +:108D40000000000000000000000000000000000023 +:108D50000000000000000000000000000000000013 :108D60000000000000000000000000000000000003 :108D700000000000000000000000000000000000F3 :108D800000000000000000000000000000000000E3 :108D900000000000000000000000000000000000D3 :108DA00000000000000000000000000000000000C3 :108DB00000000000000000000000000000000000B3 -:108DC00000000000000000000000000000010100A1 -:108DD0000000010100000000000000000000000091 +:108DC00000000000000000000000000000000000A3 +:108DD0000000000000000000000000000000000093 :108DE0000000000000000000000000000000000083 :108DF0000000000000000000000000000000000073 :108E00000000000000000000000000000000000062 :108E10000000000000000000000000000000000052 :108E20000000000000000000000000000000000042 :108E30000000000000000000000000000000000032 -:108E400000000000000000000000000000008100A1 -:108E500000C800000000000000000000000000004A +:108E40000000000000000000000000000000000022 +:108E50000000000000000000000000000000000012 :108E60000000000000000000000000000000000002 :108E700000000000000000000000000000000000F2 :108E800000000000000000000000000000000000E2 @@ -219465,7 +219465,7 @@ :10912000000000000000000000000000000000003F :10913000000000000000000000000000000000002F :10914000000000000000000000000000000000001F -:10915000000000610006000D000000610004C00175 +:10915000000000000000000000000000000000000F :1091600000000000000000000000000000000000FF :1091700000000000000000000000000000000000EF :1091800000000000000000000000000000000000DF @@ -219473,56 +219473,56 @@ :1091A00000000000000000000000000000000000BF :1091B00000000000000000000000000000000000AF :1091C000000000000000000000000000000000009F -:1091D000000000000000000000000000EB14EB1491 -:1091E000FFFF000000000000000000000000000081 +:1091D000000000000000000000000000000000008F +:1091E000000000000000000000000000000000007F :1091F000000000000000000000000000000000006F :10920000000000000000000000000000000000005E :10921000000000000000000000000000000000004E :10922000000000000000000000000000000000003E :10923000000000000000000000000000000000002E :10924000000000000000000000000000000000001E -:109250000000000000000000000000000000EB140F -:10926000EB14FFFF00000000000000000000000001 +:10925000000000000000000000000000000000000E +:1092600000000000000000000000000000000000FE :1092700000000000000000000000000000000000EE :1092800000000000000000000000000000000000DE :1092900000000000000000000000000000000000CE :1092A00000000000000000000000000000000000BE :1092B00000000000000000000000000000000000AE :1092C000000000000000000000000000000000009E -:1092D0000000000000000000D4C7D46D00000000B2 -:1092E000FFFFDFDFAA55AA550000000000000000C4 +:1092D000000000000000000000000000000000008E +:1092E000000000000000000000000000000000007E :1092F000000000000000000000000000000000006E :10930000000000000000000000000000000000005D :10931000000000000000000000000000000000004D :10932000000000000000000000000000000000003D :10933000000000000000000000000000000000002D :10934000000000000000000000000000000000001D -:1093500000000000000000000000FCC7FC6D0000E1 -:109360000000FFFFDFDFAA55AA5500000000000043 +:10935000000000000000000000000000000000000D +:1093600000000000000000000000000000000000FD :1093700000000000000000000000000000000000ED -:1093800000000000000000000000000000000000DD +:1093800000000000000000000000100000000000CD :1093900000000000000000000000000000000000CD -:1093A00000000000000000000000000000000000BD -:1093B00000000000000000000000000000000100AC -:1093C000000001000000000000000000000001009B -:1093D000000000000000000000000000000000008D +:1093A000000000000000000040000000200000005D +:1093B00000000000000000000000000000000000AD +:1093C0000000000000000000000004002000000079 +:1093D000000000000000000000008800880000007D :1093E000000000000000000000000000000000007D :1093F000000000000000000000000000000000006D :10940000000000000000000000000000000000005C :10941000000000000000000000000000000000004C -:10942000000000000000000000000000000000003C +:10942000000000000000000000000000000010002C :10943000000000000000000000000000000000002C -:10944000400000004000000010001002000010006A -:1094500040000002000000000000000000000000CA -:10946000000000000040000040000000000000007C +:10944000000000000000000000000000000010000C +:10945000000000000000000000000000000000000C +:1094600000000000000000000000000000000000FC :1094700000000000000000000000000000000000EC :1094800000000000000000000000000000000000DC :1094900000000000000000000000000000000000CC -:1094A00000000000000000000000000000000002BA +:1094A00000000000000000000000000000000000BC :1094B00000000000000000000000000000000000AC -:1094C00082000000000000000000000000000040DA +:1094C000000000000000000000000000000000009C :1094D000000000000000000000000000000000008C -:1094E0000000000000000000400020000004040410 +:1094E000000000000000000000000000000000007C :1094F000000000000000000000000000000000006C :10950000000000000000000000000000000000005B :10951000000000000000000000000000000000004B @@ -219530,234 +219530,234 @@ :10953000000000000000000000000000000000002B :10954000000000000000000000000000000000001B :10955000000000000000000000000000000000000B -:1095600000000000000000000000800080000001FA -:10957000800100000000000000000000000000006A +:1095600000000000000000000000000000000000FB +:1095700000000000000000000000000000000000EB :1095800000000000000000000000000000000000DB :1095900000000000000000000000000000000000CB :1095A00000000000000000000000000000000000BB :1095B00000000000000000000000000000000000AB :1095C000000000000000000000000000000000009B -:1095D000000000000000000900000003000000007F +:1095D000000000000000000000000000000000008B :1095E000000000000000000000000000000000007B -:1095F000001000000000000000000000000000005B +:1095F000000000000000000000000000000000006B :10960000000000000000000000000000000000005A :10961000000000000000000000000000000000004A :10962000000000000000000000000000000000003A :10963000000000000000000000000000000000002A :10964000000000000000000000000000000000001A :10965000000000000000000000000000000000000A -:109660000000210000000000000000000000008257 -:1096700009000000000200000000000000000000DF +:1096600000000000000000000000000000000000FA +:1096700000000000000000000000000000000000EA :1096800000000000000000000000000000000000DA :1096900000000000000000000000000000000000CA :1096A00000000000000000000000000000000000BA :1096B00000000000000000000000000000000000AA -:1096C000004000400040000000400000404000001A -:1096D00000000000000000000000004100900002B7 +:1096C000000000000000000000000000000000009A +:1096D0000000000000001000040000000000000076 :1096E000000000000000000000000000000000007A -:1096F000000000000000000000000000000000006A +:1096F0000000000000000800000000000000000062 :109700000000000000000000000000000000000059 :109710000000000000000000000000000000000049 :109720000000000000000000000000000000000039 :109730000000000000000000000000000000000029 -:109740000000000000000000000000000000800099 -:109750000000000000000000000000000000000207 -:1097600000010000000000000000000000000000F8 +:109740000000000000000000000000000000000019 +:109750000000000000000000080000000000000001 +:1097600000000000000000000000000000000000F9 :1097700000000000000000000000000000000000E9 :1097800000000000000000000000000000000000D9 :1097900000000000000000000000000000000000C9 :1097A00000000000000000000000000000000000B9 :1097B00000000000000000000000000000000000A9 -:1097C0000000000020002000200020000020C00039 -:1097D00000020000000000009000000000000400F3 -:1097E00000100000000000200041000000410000C7 +:1097C0000000000000000000000000000000000099 +:1097D0000000000000000000000000000000000089 +:1097E0000000000000000000000000000000000079 :1097F0000000000000000000000000000000000069 :109800000000000000000000000000000000000058 :109810000000000000000000000000000000000048 :109820000000000000000000000000000000000038 :109830000000000000000000000000000000000028 -:109840000000000000008000800080008000000117 -:109850000000000100000000000000000000000007 -:10986000800000000000000000010000000000A0D7 -:109870000000000000000000000000000084000064 +:109840000000000000000000000000000000000018 +:109850000000000000000000000000000000000008 +:1098600000000000000000000000000000000000F8 +:1098700000000000000000000000000000000000E8 :1098800000000000000000000000000000000000D8 :1098900000000000000000000000000000000000C8 :1098A00000000000000000000000000000000000B8 :1098B00000000000000000000000000000000000A8 :1098C0000000000000000000000000000000000098 -:1098D0000020000000000000000000050000000063 -:1098E000000000088200000000200003002100802A -:1098F0000000002100000000000000000000000047 +:1098D0000000000000000000000000000000000088 +:1098E0000000000000000000000000000000000078 +:1098F0000000000000000000000000000000000068 :109900000000000000000000000000000000000057 :109910000000000000000000000000000000000047 :109920000000000000000000000000000000000037 :109930000000000000000000000000000000000027 :109940000000000000000000000000000000000017 -:109950000000000100000000000000000000000006 -:1099600000000000000000000000000100000000F6 -:1099700000200000000000000000000000000000C7 +:109950000000000000000000000000000000000007 +:1099600000000000000000000000000000000000F7 +:1099700000000000000000000000000000000000E7 :1099800000000000000000000000000000000000D7 :1099900000000000000000000000000000000000C7 :1099A00000000000000000000000000000000000B7 :1099B00000000000000000000000000000000000A7 -:1099C0000000000000000000000000000001000096 -:1099D00000000000020000820000C0020000000041 -:1099E0000000000000C000040400000100C000905E -:1099F00000C00000000000000000000000000001A6 -:109A00000001000000000000000000000000000055 +:1099C0000000000000000000000000000000000097 +:1099D0000000000000000000000000000000000087 +:1099E0000000000000000000000000000000000077 +:1099F0000000000000000000000000000000000067 +:109A00000000000000000000000000000000000056 :109A10000000000000000000000000000000000046 :109A20000000000000000000000000000000000036 :109A30000000000000000000000000000000000026 -:109A40000000000000000000000000000000001105 -:109A50000041001100009100218000008080000082 -:109A600000000000000000800310001000210080B2 -:109A7000008000000000000000000000000000095D -:109A800000100011000200000000000000000000B3 +:109A40000000000000000000000000000000000016 +:109A50000000000000000000000000000000000006 +:109A600000000000000000000000000000000000F6 +:109A700000000000000000000000000000000000E6 +:109A800000000000000000000000000000000000D6 :109A900000000000000000000000000000000000C6 :109AA00000000000000000000000000000000000B6 :109AB00000000000000000000000000000000000A6 :109AC0000000000000000000000000000000000096 -:109AD000098000001111000083008309850283C002 -:109AE000000000000000000000801100850091903F -:109AF00000000000000080000000000000000000E6 -:109B00000200040009000000000000000000000046 +:109AD0000000000000000000000000000000000086 +:109AE0000000000000000000000000000000000076 +:109AF0000000000000000000000000000000000066 +:109B00000000000000000000000000000000000055 :109B10000000000000000000000000000000000045 :109B20000000000000000000000000000000000035 :109B30000000000000000000000000000000000025 :109B40000000000000000000000000000000000015 -:109B50000000004000000101000002C00200038874 -:109B6000909100000000000000000010010085003E -:109B7000C090880000000000C0C00000000000008D -:109B8000000000000000000000880000000000004D +:109B50000000000000000000000000000000000005 +:109B600000000000000000000000000000000000F5 +:109B700000000000000000000000000000000000E5 +:109B800000000000000000000000000000000000D5 :109B900000000000000000000000000000000000C5 :109BA00000000000000000000000000000000000B5 :109BB00000000000000000000000000000000000A5 :109BC0000000000000000000000000000000000095 -:109BD000000000000000010001000101009000A051 -:109BE000909000020000000000000000000000044F -:109BF000909002C00000004090C000C00000000033 -:109C00000000000000000000010101000000000051 +:109BD0000000000000000000000000000000000085 +:109BE0000000000000000000000000000000000075 +:109BF0000000000000000000000000000000000065 +:109C00000000000000000000000000000000000054 :109C10000000000000000000000000000000000044 :109C20000000000000000000000000000000000034 :109C30000000000000000000000000000000000024 :109C40000000000000000000000000000000000014 -:109C50000000000000000009110005001111008043 -:109C600000808080009000000000000000000009DB -:109C70000021808980840000008080000080000036 -:109C80000000000000000000000905211100000094 +:109C50000000000000000000000000000000000004 +:109C600000000000000000000000000000000000F4 +:109C700000000000000000000000000000000000E4 +:109C800000000000000000000000000000000000D4 :109C900000000000000000000000000000000000C4 :109CA00000000000000000000000000000000000B4 :109CB00000000000000000000000000000000000A4 :109CC0000000000000000000000000000000000094 -:109CD0000000000000000000090011000000111148 -:109CE0001091408021800200000000000000000070 -:109CF000A1910409040011008011801100000000EE -:109D000000000000000000000900094021000010D0 +:109CD0000000000000000000000000000000000084 +:109CE0000000000000000000000000000000000074 +:109CF0000000000000000000000000000000000064 +:109D00000000000000000000000000000000000053 :109D10000000000000000000000000000000000043 :109D20000000000000000000000000000000000033 :109D30000000000000000000000000000000000023 :109D40000000000000000000000000000000000013 -:109D50000000000000000000000000000100000002 -:109D6000010110410120C1021000000000000000AC -:109D700000009141040400000000C0012000C0C0A8 -:109D800000000000000000000000000000010100D1 +:109D50000000000000000000000000000000000003 +:109D600000000000000000000000000000000000F3 +:109D700000000000000000000000000000000000E3 +:109D800000000000000000000000000000000000D3 :109D900000000000000000000000000000000000C3 :109DA00000000000000000000000000000000000B3 :109DB00000000000000000000000000000000000A3 :109DC0000000000000000000000000000000000093 -:109DD000000000000000000000000000410000C87A -:109DE0000000000000110000430000060000000019 -:109DF000000000000082000043000000004200005C -:109E0000430000000000000000000000000000C847 -:109E100043000000000000000000000000000000FF +:109DD0000000000000000000000000000000000083 +:109DE0000000000000000000000000000000000073 +:109DF0000000000000000000000000000000000063 +:109E00000000000000000000000000000000000052 +:109E10000000000000000000000000000000000042 :109E20000000000000000000000000000000000032 :109E30000000000000000000000000000000000022 :109E40000000000000000000000000000000000012 :109E50000000000000000000000000000000000002 -:109E600000000000000008080000003C201C00006A -:109E7000000000000000000000FF000000F00000F3 -:109E800000F0000000F000000000000000000000F2 +:109E600000000000000000000000000000000000F2 +:109E700000000000000000000000000000000000E2 +:109E800000000000000000000000000000000000D2 :109E900000000000000000000000000000000000C2 :109EA00000000000000000000000000000000000B2 :109EB00000000000000000000000000000000000A2 :109EC0000000000000000000000000000000000092 :109ED0000000000000000000000000000000000082 -:109EE000000000000000000000000000003C003CFA -:109EF0000000000000000000000000FF000000F073 -:109F0000000000F0000000F0000000000000000071 +:109EE0000000000000000000000000000000000072 +:109EF0000000000000000000000000000000000062 +:109F00000000000000000000000000000000000051 :109F10000000000000000000000000000000000041 :109F20000000000000000000000000000000000031 :109F30000000000000000000000000000000000021 :109F40000000000000000000000000000000000011 :109F50000000000000000000000000000000000001 -:109F6000000000000000000000003C003C005155D3 -:109F70000400000000000000000055000000550033 -:109F800000000F0000003C3C00000000000000004A +:109F600000000000000000000000000000000000F1 +:109F700000000000000000000000000000000000E1 +:109F800000000000000000000000000000000000D1 :109F900000000000000000000000000000000000C1 :109FA00000000000000000000000000000000000B1 :109FB00000000000000000000000000000000000A1 :109FC0000000000000000000000000000000000091 :109FD0000000000000000000000000000000000081 -:109FE0000000000000000000000000003C003C00F9 -:109FF0005555000000000000000000005500000062 -:10A00000550000000F0000000000000000000000EC +:109FE0000000000000000000000000000000000071 +:109FF0000000000000000000000000000000000061 +:10A000000000000000000000000000000000000050 :10A010000000000000000000000000000000000040 :10A020000000000000000000000000000000000030 :10A030000000000000000000000000000000000020 :10A040000000000000000000000000000000000010 :10A050000000000000000000000000000000000000 -:10A0600000000000000000610000C001000000616D -:10A070000036000D00000000000000000000036337 -:10A08000033E0C0D92C0038203380C00C2C00000D6 -:10A090000000000000000061000C000100A00000B2 +:10A0600000000000000000000000000000000000F0 +:10A0700000000000000000000000000000000000E0 +:10A0800000000000000000000000000000000000D0 +:10A0900000000000000000000000000000000000C0 :10A0A00000000000000000000000000000000000B0 :10A0B00000000000000000000000000000000000A0 :10A0C0000000000000000000000000000000000090 :10A0D0000000000000000000000000000000000080 -:10A0E0000000000000000000EB1400003C3C0000F9 -:10A0F000003C003C0000FFFF0000000000000000EA -:10A100005510001054000000000000000000000086 -:10A1100000000000000000000F000000000F000F12 +:10A0E0000000000000000000000000000000000070 +:10A0F0000000000000000000000000000000000060 +:10A10000000000000000000000000000000000004F +:10A11000000000000000000000000000000000003F :10A12000000000000000000000000000000000002F :10A13000000000000000000000000000000000001F :10A14000000000000000000000000000000000000F :10A1500000000000000000000000000000000000FF -:10A1600000000000000000000000EB1400003C3C78 -:10A1700000000000F0AA0000000000000000000045 -:10A18000000000000000550000000000000000007A -:10A19000000000000000000000000F000000000FA1 -:10A1A000000F0000000000000000000000000000A0 +:10A1600000000000000000000000000000000000EF +:10A1700000000000000000000000000000000000DF +:10A1800000000000000000000000000000000000CF +:10A1900000000000000000000000000000000000BF +:10A1A00000000000000000000000000000000000AF :10A1B000000000000000000000000000000000009F :10A1C000000000000000000000000000000000008F :10A1D000000000000000000000000000000000007F -:10A1E0000000000000000000000000000A0F050051 -:10A1F000281428140000000030FFFFFF00000000BA -:10A20000000000003F003F000000000000000000D0 -:10A210000000000000000000000000000C0C0C0C0E -:10A220001401140100000000000000000000000004 +:10A1E000000000000000000000000000000000006F +:10A1F000000000000000000000000000000000005F +:10A20000000000000000000000000000000000004E +:10A21000000000000000000000000000000000003E +:10A22000000000000000000000000000000000002E :10A23000000000000000000000000000000000001E :10A24000000000000000000000000000000000000E :10A2500000000000000000000000000000000000FE -:10A2600000000000000000000000000000000F0FD0 -:10A270000000281428140000000000000000000066 -:10A280000000000000003F003F000F000000000041 -:10A2900000000000000000000000000000000F00AF -:10A2A0000C0C14011401000000000000000000006C -:10A2B000000000000000000000000000000000009E +:10A2600000000000000000000000000000000000EE +:10A2700000000000000000000000000000000000DE +:10A2800000000000000000000000000000000000CE +:10A2900000000000000000000000000000000000BE +:10A2A00000000000000000000000000000000000AE +:10A2B000000000000000000000000000000010008E :10A2C000000000000000000000000000000000008E :10A2D000000000000000000000000000000000007E :10A2E000000000000000000000000000000000006E :10A2F000000000000000000000000000000000005E -:10A30000000000000000000000000000000000004D +:10A3000000000000000000000000000000008400C9 :10A31000000000000000000000000000000000003D :10A32000000000000000000000000000000000002D -:10A33000000000000000000000000000000000001D +:10A3300000000000000000000000100040000000CD :10A34000400010004000000000000000000000007D :10A3500000000000000000000000000000000000FD -:10A36000400010000000000000000000000000009D +:10A3600020001000000000000000000000000000BD :10A3700000000000000000000000000000000000DD :10A3800000000000000000000000000000000000CD -:10A3900000000000000000000000000000000000BD +:10A39000000000000000000000000000000000407D :10A3A00000000000000000000000000000000000AD :10A3B000000000000000000000000000000000009D :10A3C000000000000000000000000000000000008D @@ -219772,42 +219772,42 @@ :10A4500000000000000000000000000000000000FC :10A4600000000000000000000000000000000000EC :10A4700000000000000000000000000000000000DC -:10A4800002000000000000000000000000000000CA +:10A4800000000000000000000000000000000000CC :10A4900000000000000000000000000000000000BC -:10A4A000000000400000008800000000008800005C +:10A4A00000000000000000000000000000000000AC :10A4B000000000000000000000000000000000009C :10A4C000000000000000000000000000000000008C :10A4D000000000000000000000000000000000007C :10A4E000000000000000000000000000000000006C :10A4F000000000000000000000000000000000005C :10A50000000000000000000000000000000000004B -:10A510000000000000080000000000000000000033 +:10A51000000000000000000000000000000000003B :10A52000000000000000000000000000000000002B :10A53000000000000000000000000000000000001B :10A54000000000000000000000000000000000000B :10A5500000000000000000000000000000000000FB :10A5600000000000000000000000000000000000EB :10A5700000000000000000000000000000000000DB -:10A5800000000000000000000000000800000000C3 -:10A59000000800000000000000000002001000841D +:10A5800000000000000000000000000000000000CB +:10A5900000000000000000000000000000000000BB :10A5A00000000000000000000000000000000000AB :10A5B000000000000000000000000000000000009B :10A5C000000000000000000000000000000000008B :10A5D000000000000000000000000000000000007B :10A5E000000000000000000000000000000000006B -:10A5F000000000000000000000000000000000401B -:10A6000000000000004000000000004000000000CA +:10A5F000000000000000000000000000000000005B +:10A60000000000000000000000000000000000004A :10A61000000000000000000000000000000000003A -:10A620000000000000000000000800000000000022 -:10A63000000010000000000000000000000000000A +:10A62000000000000000000000000000000000002A +:10A63000000000000000000000000000000000001A :10A64000000000000000000000000000000000000A :10A6500000000000000000000000000000000000FA :10A6600000000000000000000000000000000000EA :10A6700000000000000000000000000000000000DA :10A6800000000000000000000000000000000000CA :10A6900000000000000000000000000000000000BA -:10A6A0000000008400000000000002000000000024 -:10A6B000000020000000000000000000000000007A +:10A6A00000000000000000000000000000000000AA +:10A6B000000000000000000000000000000000009A :10A6C000000000000000000000000000000000008A :10A6D000000000000000000000000000000000007A :10A6E000000000000000000000000000000000006A @@ -219820,26 +219820,26 @@ :10A7500000000000000000000000000000000000F9 :10A7600000000000000000000000000000000000E9 :10A7700000000000000000000000000000000000D9 -:10A78000000000000000008400000000000000083D -:10A7900000000000000000C000000084000000086D +:10A7800000000000000000000000000000000000C9 +:10A7900000000000000000000000000000000000B9 :10A7A00000000000000000000000000000000000A9 -:10A7B0000000040000000000008400000000000011 +:10A7B0000000000000000000000000000000000099 :10A7C0000000000000000000000000000000000089 :10A7D0000000000000000000000000000000000079 :10A7E0000000000000000000000000000000000069 :10A7F0000000000000000000000000000000000059 :10A800000000000000000000000000000000000048 -:10A810000021000000000000000000000000000017 -:10A820000000000000110000000000000000000017 -:10A8300000400000000000000000000000000000D8 +:10A810000000000000000000000000000000000038 +:10A820000000000000000000000000000000000028 +:10A830000000000000000000000000000000000018 :10A840000000000000000000000000000000000008 :10A8500000000000000000000000000000000000F8 :10A8600000000000000000000000000000000000E8 :10A8700000000000000000000000000000000000D8 -:10A8800000000000000002002000000002000000A4 +:10A8800000000000000000000000000000000000C8 :10A8900000000000000000000000000000000000B8 :10A8A00000000000000000000000000000000000A8 -:10A8B0000000000000000000000400000000000094 +:10A8B0000000000000000000000000000000000098 :10A8C0000000000000000000000000000000000088 :10A8D0000000000000000000000000000000000078 :10A8E0000000000000000000000000000000000068 @@ -219948,28 +219948,28 @@ :10AF500000000000000000000000000000000000F1 :10AF600000000000000000000000000000000000E1 :10AF700000000000000000000000000000000000D1 -:10AF800000000000000000000000000000000000C1 +:10AF80000000000000004000000000000000000081 :10AF900000000000000000000000000000000000B1 -:10AFA0000000000000000040000000000000000061 +:10AFA0000000000000000000400000000000000061 :10AFB0000000000000000000000000000000000091 -:10AFC000000240004000004000000090000000002F +:10AFC0000000000000000040000000000000000041 :10AFD0000000000000000000000000000000000071 :10AFE0000000000000000000000000000000000061 :10AFF0000000000000000000000000000000000051 :10B000000000000000000000000000000000000040 -:10B01000000000000000000000000002000000002E +:10B010000000000000000000000000000000000030 :10B020000000000000000000000000000000000020 -:10B0300000000000000000000000000020000000F0 -:10B0400000001000000000000800080000000000E0 -:10B05000200020000400001000100805000000007F +:10B030000000000000000000000000000000000010 +:10B0400000000000000000001000004000000000B0 +:10B0500000000000000000000000000000000000F0 :10B0600000000000000000000000000000000000E0 :10B0700000000000000000000000000000000000D0 -:10B0800000000000000000000000000000000000C0 +:10B0800000000000000000000000000800000000B8 :10B0900000000000000000000000000000000000B0 -:10B0A00000000000000000000000000000000000A0 -:10B0B0000000000800000000000000000000800008 -:10B0C0000000000000000000000000000000000080 -:10B0D00000008008800080000000000000000000E8 +:10B0A0000000000000000000000000000008000098 +:10B0B0000000000000000000000000000000000090 +:10B0C0000000000000000000000000001008000860 +:10B0D0000008000000000000000000000000000068 :10B0E0000000000000000000000000000000000060 :10B0F0000000000000000000000000000000000050 :10B10000000000000000000000000000000000003F @@ -219977,7 +219977,7 @@ :10B12000000000000000000000000000000000001F :10B13000000000000000000000000000000000000F :10B1400000000000000000000000000000000000FF -:10B1500000210009000000000000000000000000C5 +:10B1500000000000000000000000000000000000EF :10B1600000000000000000000000000000000000DF :10B1700000000000000000000000000000000000CF :10B1800000000000000000000000000000000000BF @@ -219985,23 +219985,23 @@ :10B1A000000000000000000000000000000000009F :10B1B000000000000000000000000000000000008F :10B1C000000000000000000000000000000000007F -:10B1D000000000A0000000000000000000000000CF +:10B1D000000000000000000000000000000000006F :10B1E000000000000000000000000000000000005F -:10B1F000000000000000000000000000000000004F +:10B1F0000008000000000000000000000000000047 :10B20000000000000000000000000000000000003E -:10B210000000000000000008000000000000000026 -:10B2200000000000000000000000004000090004D1 -:10B2300000040040000400000000000000000000C6 -:10B2400000000000000000002000000000000000DE -:10B25000A0000000000000800008000000000000C6 +:10B210000008000000000000000000000000000026 +:10B22000000000000000000000000000000000001E +:10B2300000000008000800080000000000000000F6 +:10B2400000000000000000000000000000000000FE +:10B2500000000008000800080000000000000000D6 :10B2600000000000000000000000000000000000DE :10B2700000000000000000000000000000000000CE :10B2800000000000000000000000000000000000BE :10B2900000000000000000000000000000000000AE -:10B2A000000000000000000000000000000002009C +:10B2A000000000000000000000000000000000009E :10B2B000000000000000000000000000000000008E -:10B2C000000000000000004000000000000000003E -:10B2D000000000000000000000040000000000006A +:10B2C000000000000000000000000000000000007E +:10B2D000000000000000000000000000000000006E :10B2E000000000000000000000000000000000005E :10B2F000000000000000000000000000000000004E :10B30000000000000000000000000000000000003D @@ -220009,7 +220009,7 @@ :10B32000000000000000000000000000000000001D :10B33000000000000000000000000000000000000D :10B3400000000000000000000000000000000000FD -:10B35000000000000000000000000000900000005D +:10B3500000000000000000000000000000000000ED :10B3600000000000000000000000000000000000DD :10B3700000000000000000000000000000000000CD :10B3800000000000000000000000000000000000BD @@ -220024,33 +220024,33 @@ :10B41000000000000000000000000000000000002C :10B42000000000000000000000000000000000001C :10B43000000000000000000000000000000000000C -:10B4400000000000000000400000000000000000BC -:10B4500020000000000000000000000000000000CC -:10B4600000000000000000000005000000000000D7 +:10B4400000000000000000000000000000000000FC +:10B4500000000000000000000000000000000000EC +:10B4600000000000000000000000000000000000DC :10B4700000000000000000000000000000000000CC :10B4800000000000000000000000000000000000BC :10B4900000000000000000000000000000000000AC :10B4A000000000000000000000000000000000009C -:10B4B0000000000000002000020011001110000038 -:10B4C00000842000000000000000000000000000D8 -:10B4D000000000000000000000000000000000006C -:10B4E000000000400000000000000000000000001C +:10B4B000000000000000000000000000000000008C +:10B4C000000000000000000000000000000000007C +:10B4D0000000000000000008000000000000000064 +:10B4E000000000000000000000000000000000005C :10B4F000000000000000000000000000000000004C :10B50000000000000000000000000000000000003B :10B51000000000000000000000000000000000002B :10B52000000000000000000000000000000000001B :10B53000000000000000000000000000000000000B :10B5400000000000000000000000000000000000FB -:10B5500000000000000000010000000000000000EA -:10B560000000A00009000000000000000000000032 +:10B5500000000000000000000000000000000000EB +:10B5600000000000000000000000000000000000DB :10B5700000000000000000000000000000000000CB :10B5800000000000000000000000000000000000BB :10B5900000000000000000000000000000000000AB :10B5A000000000000000000000000000000000009B :10B5B000000000000000000000000000000000008B :10B5C000000000000000000000000000000000007B -:10B5D000000000020002000400040000000000005F -:10B5E0000000000080008300000000000000000058 +:10B5D000000000000000000000000000000000006B +:10B5E000000000000000000000000000000000005B :10B5F000000000000000000000000000000000004B :10B60000000000000000000000000000000000003A :10B61000000000000000000000000000000000002A @@ -220058,7 +220058,7 @@ :10B63000000000000000000000000000000000000A :10B6400000000000000000000000000000000000FA :10B6500000000000000000000000000000000000EA -:10B6600000000000008010000200101000000041E7 +:10B6600000000000000000000000000000000000DA :10B6700000000000000000000000000000000000CA :10B6800000000000000000000000000000000000BA :10B6900000000000000000000000000000000000AA @@ -220066,14 +220066,14 @@ :10B6B000000000000000000000000000000000008A :10B6C000000000000000000000000000000000007A :10B6D000000000000000000000000000000000006A -:10B6E00000000000000000C000000000000000009A -:10B6F00000010082000000000000000000000000C7 +:10B6E000000000000000000000000000000000005A +:10B6F000000000000000000000000000000000004A :10B700000000000000000000000000000000000039 :10B710000000000000000000000000000000000029 :10B720000000000000000000000000000000000019 :10B730000000000000000000000000000000000009 :10B7400000000000000000000000000000000000F9 -:10B7500000000000000000000000010001000000E7 +:10B7500000000000000000000000000000000000E9 :10B7600000000000000000000000000000000000D9 :10B7700000000000000000000000000000000000C9 :10B7800000000000000000000000000000000000B9 @@ -220081,8 +220081,8 @@ :10B7A0000000000000000000000000000000000099 :10B7B0000000000000000000000000000000000089 :10B7C0000000000000000000000000000000000079 -:10B7D0000000000000000000000000000400040061 -:10B7E0000000000000000000000000100002001037 +:10B7D0000000000000000000000000000000000069 +:10B7E0000000000000000000000000000000000059 :10B7F0000000000000000000000000000000000049 :10B800000000000000000000000000000000000038 :10B810000000000000000000000000000000000028 @@ -220090,24 +220090,24 @@ :10B830000000000000000000000000000000000008 :10B8400000000000000000000000000000000000F8 :10B8500000000000000000000000000000000000E8 -:10B860000000000000000000000000000080400018 -:10B8700002001000800000110000800000000000A5 +:10B8600000000000000000000000000000000000D8 +:10B8700000000000000000000000000000000000C8 :10B8800000000000000000000000000000000000B8 :10B8900000000000000000000000000000000000A8 :10B8A0000000000000000000000000000000000098 :10B8B0000000000000000000000000000000000088 :10B8C0000000000000000000000000000000000078 :10B8D0000000000000000000000000000000000068 -:10B8E000000000000000000000000000000000C098 -:10B8F00000000000000002004000C00082000000C4 +:10B8E0000000000000000000000000000000000058 +:10B8F0000000000000000000000000000000000048 :10B900000000000000000000000000000000000037 :10B910000000000000000000000000000000000027 :10B920000000000000000000000000000000000017 :10B930000000000000000000000000000000000007 :10B9400000000000000000000000000000000000F7 :10B9500000000000000000000000000000000000E7 -:10B96000000000C80000000000000000000000000F -:10B97000410000C8000042000000000043004200F7 +:10B9600000000000000000000000000000000000D7 +:10B9700000000000000000000000000000000000C7 :10B9800000000000000000000000000000000000B7 :10B9900000000000000000000000000000000000A7 :10B9A0000000000000000000000000000000000097 @@ -220115,7 +220115,7 @@ :10B9C0000000000000000000000000000000000077 :10B9D0000000000000000000000000000000000067 :10B9E0000000000000000000000000000000000057 -:10B9F0000000000000000000000000002000000027 +:10B9F0000000000000000000000000000000000047 :10BA00000000000000000000000000000000000036 :10BA10000000000000000000000000000000000026 :10BA20000000000000000000000000000000000016 @@ -220154,17 +220154,17 @@ :10BC30000000000000000000000000000000000004 :10BC400000000000000000000000000000000000F4 :10BC500000000000000000000000000000000000E4 -:10BC60000000000000000000000000000061000271 -:10BC7000000D00000000000000000000006100074F -:10BC8000C0010000000000000000000000000000F3 +:10BC600000000000000000000000000000000000D4 +:10BC700000000000000000000000000000000000C4 +:10BC800000000000000000000000000000000000B4 :10BC900000000000000000000000000000000000A4 :10BCA0000000000000000000000000000000000094 :10BCB0000000000000000000000000000000000084 :10BCC0000000000000000000000000000000000074 :10BCD0000000000000000000000000000000000064 :10BCE0000000000000000000000000000000000054 -:10BCF00000000000000000000000000000008101C2 -:10BD00008101CDAACDAA00000000000000000000C3 +:10BCF0000000000000000000000000000000000044 +:10BD00000000000000000000000000000000000033 :10BD10000000000000000000000000000000000023 :10BD20000000000000000000000000000000000013 :10BD30000000000000000000000000000000000003 @@ -220172,15 +220172,15 @@ :10BD500000000000000000000000000000000000E3 :10BD600000000000000000000000000000000000D3 :10BD700000000000000000000000000000000000C3 -:10BD800010301030CDAACDAA000000000000000045 +:10BD800000000000000000000000000000000000B3 :10BD900000000000000000000000000000000000A3 :10BDA0000000000000000000000000000000000093 :10BDB0000000000000000000000000000000000083 :10BDC0000000000000000000000000000000000073 :10BDD0000000000000000000000000000000000063 :10BDE0000000000000000000000000000000000053 -:10BDF000000000040000000000000000000000003F -:10BE00000000000000000F000F0F00000000000005 +:10BDF0000000000000000000000000000000000043 +:10BE00000000000000000000000000000000000032 :10BE10000000000000000000000000000000000022 :10BE20000000000000000000000000000000000012 :10BE30000000000000000000000000000000000002 @@ -220188,47 +220188,47 @@ :10BE500000000000000000000000000000000000E2 :10BE600000000000000000000000000000000000D2 :10BE700000000000000000000000000000000000C2 -:10BE80000000000000000000FFFF000000000000B4 +:10BE800000000000000000000000000000000000B2 :10BE900000000000000000000000000000000000A2 :10BEA0000000000000000000000000000000000092 :10BEB0000000000000000000000000000000000082 :10BEC0000000000000000000000000000000000072 :10BED0000000000000000000000000000000000062 -:10BEE00000000000000000000000000090000000C2 +:10BEE0000000000000000000000000000000000052 :10BEF0000000000000000000000000000000000042 -:10BF00000000000000000000000000002000000011 -:10BF10000000000000000000000000000000100011 +:10BF00000000000000000000000000000000000031 +:10BF10000000000000000000000010000000100001 :10BF20000000100000000000000000000000000001 -:10BF300000000000000000000000000000004000C1 +:10BF30000000000000000000000000000000000001 :10BF400000000000000000000000000000000000F1 :10BF500000000000000000000000000000000000E1 :10BF600000000000000000000000000000000000D1 -:10BF700000000000000000000000000000020000BF -:10BF800000000000000010000000000000000000A1 +:10BF700000000000000000000000000000001000B1 +:10BF800000000000000200000000000000000000AF :10BF900000000000000000000000000000000000A1 :10BFA0000000000000000000000000000000000091 :10BFB0000000000000000000000000000000000081 :10BFC0000000000000000000000000000000000071 :10BFD0000000000000000000000000000000000061 -:10BFE0000000000000000000000000000000004011 -:10BFF00000000000000000001000004000200000D1 -:10C0000000000000900000000000000000000000A0 -:10C0100000000000000000400040000000000000A0 +:10BFE0000000000000000000000000000000000051 +:10BFF0000000000000000000000000000000000041 +:10C000000000000000000000000000000000000030 +:10C010000000000800000000000000000000000018 :10C020000000000000000000000000000000000010 :10C030000000000000000000000000000000000000 -:10C0400000000000000000000000000000000000F0 -:10C0500000000000000000000000000000000000E0 -:10C06000000000000000000000000000000000824E -:10C0700000000000000000000000000000000000C0 -:10C08000000000000082000000000000000000002E -:10C090000000000000000000000000100000000090 +:10C0400000000008000000000000000000080000E0 +:10C05000008400000008000000080000000000004C +:10C0600000000008000800000000000000000008B8 +:10C0700000400084000000080000000800000000EC +:10C08000000000040008000000000000000000089C +:10C0900000840000001000100000000800000000F4 :10C0A0000000000000000000000000000000000090 :10C0B0000000000000000000000000000000000080 -:10C0C0000000000000000000000000000000000070 -:10C0D0000000000000000000000000000000000060 -:10C0E0000000000000000008000000000000000048 -:10C0F0000000000000000000000000000000000040 -:10C10000000000000000000000000000000000002F +:10C0C0000002000800020000000000000000000064 +:10C0D0000008000800000000000000000000000050 +:10C0E000000000000002000000000000000000004E +:10C0F0000000000000050008000000000000000033 +:10C10000000000000002000000000000000000002D :10C11000000000000000000000000000000000001F :10C12000000000000000000000000000000000000F :10C1300000000000000000000000000000000000FF @@ -220237,7 +220237,7 @@ :10C1600000000000000000000000000000000000CF :10C1700000000000000000000000000000000000BF :10C1800000000000000000000000000000000000AF -:10C19000000000000000000000C0000000C000C05F +:10C19000000000000000000000000000000000009F :10C1A000000000000000000000000000000000008F :10C1B000000000000000000000000000000000007F :10C1C000000000000000000000000000000000006F @@ -220245,22 +220245,22 @@ :10C1E000000000000000000000000000000000004F :10C1F000000000000000000000000000000000003F :10C20000000000000000000000000000000000002E -:10C21000000000000000000000000000000000001E +:10C210000000000000000000000800000000000016 :10C22000000000000000000000000000000000000E -:10C2300000000000000000000000000000000000FE -:10C2400000000000000000000000000000000000EE -:10C250000000000000000000000000A0000000003E -:10C2600000000000000000000000000009002000A5 -:10C2700000000000020202000200000400C00000F2 -:10C2800000000000000000000000000800000000A6 -:10C29000000800000000000000000900000000008D -:10C2A000000000000000000000000000000000008E +:10C2300000000000000000A0000800A0000800842A +:10C24000008400000000000000000000000000006A +:10C250000000000000000000000800820000000054 +:10C260000000000000000000000000A000A000008E +:10C270000000000000000000000800A00082000094 +:10C28000000000000000000000000000000000901E +:10C29000000000000000000000A0000000080040B6 +:10C2A000004000000000000000000000000000004E :10C2B000000000000000000000000000000000007E :10C2C000000000000000000000000000000000006E :10C2D000000000000000000000000000000000005E -:10C2E000000000000000000000000000000000004E +:10C2E0000000000000000000000000000008000046 :10C2F000000000000000000000000000000000003E -:10C30000000000000000000000000000000000002D +:10C3000000000000000000000000000000400000ED :10C31000000000000000000000000000000000001D :10C32000000000000000000000000000000000000D :10C3300000000000000000000000000000000000FD @@ -220269,24 +220269,24 @@ :10C3600000000000000000000000000000000000CD :10C3700000000000000000000000000000000000BD :10C3800000000000000000000000000000000000AD -:10C390000000000000000000000000000008000095 +:10C39000000000000000000000000000000000009D :10C3A000000000000000000000000000000000008D :10C3B000000000000000000000000000000000007D -:10C3C000000000000000000000000000000000006D -:10C3D000000000000000000000000000000000005D +:10C3C000000000000000000000000000002100212B +:10C3D000000000000000000000000000000000213C :10C3E000000000000000000000000000000000004D :10C3F000000000000000000000000000000000003D -:10C400000000000000000000000000000008000024 +:10C4000000000000000000000040000000000000EC :10C41000000000000000000000000000000000001C :10C42000000000000000000000000000000000000C -:10C4300000000000000000000000000000000000FC -:10C4400000000000000000000000000000000000EC -:10C4500000000000000000000000000000080000D4 -:10C4600000000000000000000000000000000000CC -:10C4700000000000008800880088110000041100FE -:10C48000090002000000008400000000000000001D -:10C49000000000000000000000000000000000009C -:10C4A0002000090000000000000000000000000063 +:10C4300000000008000000000000000000080000EC +:10C4400000A0000000000000000800000000000044 +:10C450000000000800000000008400000008000048 +:10C4600000000000000000000008000000000000C4 +:10C4700000000000000800000000000000000008AC +:10C4800000000000000000000000000800000000A4 +:10C49000000000000008000000000000000000088C +:10C4A0000000000000000000000000080000000084 :10C4B000000000000000000000000000000000007C :10C4C000000000000000000000000000000000006C :10C4D000000000000000000000000000000000005C @@ -220434,53 +220434,53 @@ :10CDB0000000000000000000000000000000000073 :10CDC0000000000000000000000000000000000063 :10CDD0000000000000000000000000000000000053 -:10CDE0000000000000000000000000000000000043 +:10CDE00000000000000000000000000000000180C2 :10CDF0000000000000000000000000000000000033 -:10CE00000000000000000000000000000000010021 +:10CE000000000000000000000000000000000180A1 :10CE1000000300000000000000000000000000000F -:10CE2000000000000000000000000180018004807C +:10CE20000000000000000000000000000000000002 :10CE30000180000000000000000000000000000071 :10CE400000000000000000000000000000000000E2 -:10CE500084800000000000000000000000000000CE +:10CE50000180000000000000000000000000000051 :10CE600000000000000000000000000000000000C2 -:10CE700000000000000000000000000000000000B2 +:10CE7000200800000000000000000000000000008A :10CE800000000000000000000000000000000000A2 -:10CE90002000000000000000000000000000000072 -:10CEA0000000000000000000000000001010104012 -:10CEB00080040820000000000008000000000000BE +:10CE9000100400000000000000000000000000007E +:10CEA0000000000000000000000000000000000082 +:10CEB000000010040000000000000000000000005E :10CEC0000000000000000000000000000000000062 -:10CED000200000040000000000000000000000002E +:10CED000000010040000000000000000000000003E :10CEE0000000000000000000000000000000000042 :10CEF0000000000000000000000000000000000032 :10CF00000000000000000000000000000000000021 :10CF10000000000000000000000000000000000011 -:10CF20000000000000000000000000000000000001 -:10CF300000000000000000000000000000000000F1 +:10CF200000000000000300000000000000000000FE +:10CF300000000000000400000000000000000000ED :10CF400000000000000000000000000000000000E1 -:10CF50000040000000400000000000000000000051 +:10CF500000000000000400000000000000000000CD :10CF600000000000000000000000000000000000C1 :10CF700000000000000000000000000000000000B1 -:10CF800000000000000000000000000000000000A1 -:10CF90000000000000000000000000000000000091 -:10CFA0000000000000000000000000000000000081 -:10CFB00000080084000000080000000000080000D5 -:10CFC00000000000000000840084000000000084D5 -:10CFD00000080008000000A00000000000000000A1 -:10CFE0000000000000000000000000000000000041 -:10CFF0000000000000000000000000000000000031 -:10D000000000000000000000000000000000000020 -:10D0100000000000000000210000002100210000AD -:10D0200000210000000000000008000800210005A9 -:10D030000008000000000080000000000008000060 -:10D04000000000000005000000100000900000003B -:10D0500000030000000000000021000000000000AC +:10CF80000000000000000000000800000000000891 +:10CF90000008000800000000000000000000000081 +:10CFA000000000000088008400820008008400085F +:10CFB0000008000800840000008400000000000059 +:10CFC0000000000000000000000000080084008451 +:10CFD0000008000800000000000000000000000041 +:10CFE0000000000000000000000000000000002120 +:10CFF0000021002100080021000000210021002163 +:10D00000002100210021000800000021000800216B +:10D01000002100210021002100000008002100055E +:10D020000021002100210005002100000021000056 +:10D0300000210021002100210021002100210021E8 +:10D04000002100210021002100090021002100050C +:10D050000010001000050021000800000000000082 :10D0600000000000000000000000000000000000C0 :10D0700000000000000000000000000000000000B0 -:10D0800000000000000000000000000000000000A0 +:10D080000000000000000008000000A000000000F8 :10D090000000000000000000000000000000000090 -:10D0A0000000000000000000000000000000000080 -:10D0B0000000000000000008000200000000000066 -:10D0C00000000000000000000000000000820000DE +:10D0A00000000000000000000000008800000000F8 +:10D0B0000000000000000000000000000000000070 +:10D0C0000000000000000000000000A000000000C0 :10D0D0000000000000000000000000000000000050 :10D0E0000000000000000000000000000000000040 :10D0F0000000000000000000000000000000000030 @@ -220488,25 +220488,25 @@ :10D11000000000000000000000000000000000000F :10D1200000000000000000000000000000000000FF :10D1300000000000000000000000000000000000EF -:10D1400000030000000000000000000000000000DC -:10D15000000000000000004000000000400000004F +:10D1400000000008000000000000000000000000D7 +:10D1500000050000000000000000000004000000C6 :10D1600000000000000000000000000000000000BF :10D1700000000000000000000000000000000000AF -:10D18000000000000000000000000000000000009F +:10D180000000000000000000000000000000000897 :10D19000000000000000000000000000000000008F -:10D1A0000000000000080000000000000000000077 -:10D1B000004000000000000000000000000000002F -:10D1C000000000000000000000000010001000003F -:10D1D000000000000000000000000000000000004F +:10D1A000000000000000000000000000000000007F +:10D1B0000004000400000000000000000000000067 +:10D1C000000000000000000000000000000000005F +:10D1D0000000000000000000000000080000000047 :10D1E000000000000000000000000000000000003F -:10D1F000000000000000000000000000000000002F +:10D1F00000000000000000000000000000000040EF :10D20000000000000000000000000000000000001E -:10D210000000000000000000000000000000000905 -:10D2200000000000000000000000000000000000FE -:10D2300000030000000000050000000000000000E6 -:10D24000000000080000004100000008000300008A -:10D2500000000008000000000000000000000010B6 -:10D2600000080000000000000000000000000000B6 +:10D2100000000000000800080000000300080040B3 +:10D2200000000041000000000000000000000000BD +:10D2300000000000000000000008000000050000E1 +:10D24000004000000000000000000000200000007E +:10D2500000000000000000090021000000000000A4 +:10D26000004000000000000000000000000000007E :10D2700000000000000000000000000000000000AE :10D28000000000000000000000000000000000009E :10D29000000000000000000000000000000000008E @@ -220515,95 +220515,95 @@ :10D2C000000000000000000000000000000000005E :10D2D000000000000000000000000000000000004E :10D2E000000000000000000000000000000000003E -:10D2F000000000000000000000000000000000002E -:10D30000000000000000000000000000000000001D -:10D3100000000000000000000000000000080008FD -:10D3200000000008000000000000000000000000F5 -:10D3300000000000000000000000000000000002EB -:10D3400000020002000000000000000300210000B5 -:10D3500000000000000000000009000000000008BC -:10D3600000080000000300000000000000000000B2 +:10D2F00000000000000000080005004100080008D0 +:10D30000002100000005000000000000880300006C +:10D3100000000000000000080021000300080008D1 +:10D3200000000041000000050000000000000003B4 +:10D330000000004100000000000800080000000894 +:10D34000000800000010000500410000000000037C +:10D35000000000000000000000080021000000089C +:10D3600000100005000000000000000000000000A8 :10D3700000000000000000000000000000000000AD :10D38000000000000000000000000000000000009D :10D39000000000000000000000000000000000008D :10D3A000000000000000000000000000000000007D :10D3B000000000000000000000000000000000006D -:10D3C0000000000000000000000000000000000855 -:10D3D0000000000800000000000000000000000045 -:10D3E000001000000000000000000000000000002D -:10D3F000000000000000000000000000000000002D -:10D40000000000000000000000000000000000001C -:10D4100001000000000000000000010000C000004A -:10D42000000000000000000000020000C100000138 -:10D43000C1830100C0000140C1C1C100C101000899 -:10D44000C0820000C00000C1080000000000000011 -:10D45000000001000000000000000000010000C00A -:10D4600000000000000000000000000000000000BC -:10D4700000000000000000000000000000000000AC -:10D48000000000000000000000000000000000009C -:10D4900000004100000000000000000208000080C1 -:10D4A0000000000000000000000000000041C14139 -:10D4B0000041C18441418041419084038441820301 -:10D4C0000080808000418041110380000000000046 -:10D4D0000000000041000000000000000002080001 -:10D4E00000800000000000000000000000000000BC -:10D4F000000000000000000000000000000000002C -:10D500000000000000000000000000000000030018 -:10D5100000000080000080000000000009008480FE -:10D520000000000000000000000000410000410079 -:10D53000114100C10000414184410041404108C106 -:10D54000894100A083804100C14100C180100000DA -:10D5500003000000008000008000000000000900BF -:10D560009100000080000000000000000041000069 -:10D5700000000000000000000000000000000000AB -:10D58000000000000000000000000000000000009B -:10D590000100000000C000002000000000000200A8 -:10D5A0008208000210C0020000000000000100001C -:10D5B0000000000100C100000001400100C10101A4 -:10D5C000A1C1200500C183C08800400100C18200C4 -:10D5D00000000100000000C000002000000000006A -:10D5E000020008A000020800020000000000000184 -:10D5F000000000000000000000000000000000002B -:10D60000000000000000000000000000000000001A -:10D6100000000000C000000000000000000000004A -:10D6200000100000000000000000000000000000EA -:10D63000000000400000C140000000000000C18365 -:10D64000048300080000C140000000000000C10089 -:10D65000000000000000C00000000000000000000A -:10D6600000000010000000000000000000000000AA -:10D6700000000000000000000000000000000000AA -:10D68000000000000000000000000000000000009A -:10D69000000000000000800000000000000000000A -:10D6A00000000080000000000900000000000000F1 -:10D6B0000000000000800041C1C1000000000041E6 -:10D6C000C1A0008300C10041C1C1000000000021D1 -:10D6D0008541040000000000800000000000000000 -:10D6E000000000000000000000000000000000003A -:10D6F000000000000000000000000000000000002A -:10D700000000000000000000000000000000000019 -:10D71000000000000000800000C1000000000000C8 -:10D720000000000000418000000400000000000034 -:10D73000000000000000C1C10000800200004104A0 -:10D74000004141C103C1C141008080C1000041418D -:10D750000000808010110000800000C10000000067 -:10D760000000000000000041000000040000000074 -:10D7700000000000000000000000000000000000A9 -:10D780000000000000000000000000000000000099 -:10D790000000000000000000400000C10000000088 -:10D7A000000000000000008982000001000000006D -:10D7B000000000000000000040C18800400200009E -:10D7C0000001840184C101C14083C0C040C1000088 -:10D7D0000001000008C000020000400000C100007D -:10D7E00000000000000000000089A000000100000F -:10D7F0000000000000000000000000000000000029 -:10D800000000000000000000000000000000000018 +:10D3C000000000000000000000000000000000005D +:10D3D000000000000000000000000000000000004D +:10D3E000000000000000000000010001000100C07A +:10D3F0000001000100C001090001040100020082D7 +:10D400000101200100C0000000010001000100C076 +:10D410000001000100C001050000000100400008FB +:10D420000101200100C00000000000010001000116 +:10D4300000C00001000100C0010500000001000261 +:10D4400000080101200100C00000000100010001EE +:10D4500000C00001000100C0010300000401000839 +:10D4600000820101200100C0000000410041004194 +:10D47000008200410041008904C1004011410000C8 +:10D4800000804041804100C1000000410041004156 +:10D4900000820041004100820441110411410080DA +:10D4A00000804041804100C1000000000041004177 +:10D4B0000041008200410041008904410004114103 +:10D4C000000000804041804100C100000041004157 +:10D4D00000410082004100410089044100111141D6 +:10D4E000008000804041804100C1000041000300F5 +:10D4F0000000008041008900000002000400048058 +:10D5000000008400C100C1000080800041000300D1 +:10D510000000008041008900000009000500028031 +:10D5200000009100C100C1000080800000034100A4 +:10D530000300000000804100890000000200080094 +:10D54000028000009100C100C10000808000410005 +:10D550000300000000804100890000000200030079 +:10D560000200000084004100C10000808000010032 +:10D570000100000000C00100C000000000008800A1 +:10D5800088080088C0000900C10000408200010036 +:10D590000100000000C00100C00000000000880081 +:10D5A00088080088C0000900C10000408200000017 +:10D5B00001000100000000C00100C00000000000E8 +:10D5C000850084080088C0000900C1000040820076 +:10D5D00001000100000000C00100C00000000000C8 +:10D5E000840084880088C0000300C10000408200DD +:10D5F00000C00001C0C100000000000100C0100315 +:10D600000009000100C1000000000001000000004E +:10D6100000C00001C0C100000000000100C01003F4 +:10D620000009000100C1000000000001000000002E +:10D63000000000C00001C0C100000000000100C0E7 +:10D6400010030009000100C10000000000010000FB +:10D65000000000C00001C0C100000000000100C0C7 +:10D6600010890009000100C1000000000001000055 +:10D6700000000080004180C100000000004100C1A6 +:10D68000000300C1004100C1000000000041004152 +:10D6900000000080004180C100000000004100C186 +:10D6A000000300C1004100C1000000000041004132 +:10D6B000000000000080004180C100000000004127 +:10D6C00000C1000300C1004100C100000000004192 +:10D6D000004100000080004180C1000000000041C6 +:10D6E00000C1000300C1004100C100000000004172 +:10D6F00000410000C100800080C1000041020040E4 +:10D7000010004100C1410000804000004140000085 +:10D7100080004100C100800080C100004102004043 +:10D7200090004100C14100008040000041400000E5 +:10D73000800041000000C100800080C10000410263 +:10D74000004010004100C141000080400000414005 +:10D75000000080004100C100800080C10000410243 +:10D76000004010004100C1410000804000004140E5 +:10D77000000080004100C1004000C0C10000010065 +:10D78000020104000100C1110200C00100000101FA +:10D790000000C0000100C1004000C0C10000010045 +:10D7A000020108000100C1110200C00100000101D6 +:10D7B0000000C00001000000C1004000C0C1000026 +:10D7C0000100020104000100C1110200C0010000BB +:10D7D00001010000C0000100C1004000C0C1000004 +:10D7E0000100020104000100C1050200C0010000A7 +:10D7F00001010000C0000100000000000000004224 +:10D8000000000000000000008112004807004800EE :10D8100000000000000000000000000000000042C6 -:10D820000000000000004800810000E00000480007 -:10D8300000000000000000420000000000000000A6 -:10D8400048420000000000004842500A0060060004 -:10D8500048420000000000004842000000000000B4 -:10D8600000420000000000004800810000E00000CD -:10D87000480000000000000000420000000000001E +:10D8200000000000000000008112004807004800CE +:10D8300000000000000000000000000000000000E8 +:10D8400000420000000000000000811200480700B4 +:10D850004800000000000000000000000000000080 +:10D860000042000000000000000081120048070094 +:10D870004800000000000000000000000000000060 :10D880000000000000000000000000000000000098 :10D890000000000000000000000000000000000088 :10D8A0000000000000000000000000000000000078 @@ -220619,39 +220619,39 @@ :10D9400000000000000000000000000000000000D7 :10D9500000000000000000000000000000000000C7 :10D9600000000000000000000000000000000000B7 -:10D9700000000000000000000000000000000000A7 +:10D970000000000000000000000000000000757BB7 :10D980000000000000000000000000000000000097 -:10D990000000000000000000000000000000747B98 +:10D99000000000000000000000000000DEAE757B0B :10D9A0000000000000000000000000000000000077 -:10D9B000000000000000000000000000DE2E00005B +:10D9B000000000000000000000000000DEAE0000DB :10D9C000757B000000000000000000000000000067 :10D9D0000000000000000000000000000000DEAEBB -:10D9E000747B000000000000000000000000000048 -:10D9F0000000000000000000000000000000DE2E1B -:10DA00000000000000000000000000000000000016 -:10DA10000000000000000000000000000000000006 -:10DA2000615603400000000000000231E0000000E9 -:10DA3000000000000C4000000000000002C06A86E8 -:10DA4000000067E643400000000000000231E000F3 -:10DA50000000000000000C4000000000000002C2B6 -:10DA600067E6615603400000000000000231E0005C -:10DA70000000000000000C4000000000000002C098 -:10DA80006A860000000000000000000000000000A6 +:10D9E000757B000000000000000000000000000047 +:10D9F0000000000000000000000000000000DEAE9B +:10DA000060C603000000000000000031E0000000DC +:10DA1000000000000C0000000000000000C06306D1 +:10DA200060C603000000000000000031E0000000BC +:10DA3000000000000C0000000000000000C06306B1 +:10DA4000000060C603000000000000000031E0009C +:10DA50000000000000000C0000000000000000C0FA +:10DA6000630660C603000000000000000031E00013 +:10DA70000000000000000C0000000000000000C0DA +:10DA8000630600000000000000000000000000002D :10DA90000000000000000000000000000000000086 :10DAA0000000000000000000000000000000000076 :10DAB0000000000000000000000000000000000066 :10DAC0000000000000000000000000000000000056 :10DAD0000000000000000000000000000000000046 :10DAE0000000000000000000000000000000000036 -:10DAF0000000000000000000000000000000000026 +:10DAF000000000000000000000000008000000001E :10DB00000000000000000000000000000000000015 -:10DB10000000000000000000000000004040000085 +:10DB10000000000000400000000000400040000045 :10DB200000000000000000000000000000000000F5 :10DB300000000000000000000000000000400000A5 :10DB400000000000000000000000000000000000D5 :10DB500000000000000000000000000000000000C5 :10DB600000000000000000000000000000000000B5 -:10DB70000000000000000000000000000040000065 +:10DB70000000000000000000000000000000400065 :10DB80000000000000000000000000000000000095 :10DB90000000000000000000000000000000000085 :10DBA0000000000000000000000000000000000075 @@ -220660,80 +220660,80 @@ :10DBD0000000000000000000000000000000000045 :10DBE0000000000000000000000000000000000035 :10DBF0000000000000000000000000000000000025 -:10DC00000000000000000000000000000000000014 +:10DC0000000000000000000500000000000000000F :10DC10000000000000000000000000000000000004 :10DC200000000000000000000000000000000000F4 -:10DC300000000000000000000000000000000000E4 -:10DC400000000000000000000000000000000000D4 -:10DC500000000000000000000000000000080008B4 -:10DC600000000008000000000000000000000000AC -:10DC70000000000000000000000000000008000894 -:10DC8000000000880000000000000000000000000C +:10DC300000080000000000000000000000080000D4 +:10DC40000000000000000000000000000000008450 +:10DC500000000088008800000000000000000008AC +:10DC60000000008400000000000000000000000030 +:10DC70000000000000000000000000000000001094 +:10DC80000084000800000000000000000000000008 :10DC90000000000000000000000000000000000084 -:10DCA0000000000000000000000000000000000074 -:10DCB0000000000000000000000000000000000064 +:10DCA000000000000000000000000000000000086C +:10DCB000000000410008000000000000000000001B :10DCC0000000000000000000000000000000000054 -:10DCD0000000000000000000000000000000000044 -:10DCE0000000000000000000000000000000000034 -:10DCF0000000000000000000000000000000000024 -:10DD00000000000000000000000000000000000013 +:10DCD00000210000000000410000000000000000E2 +:10DCE000002100000008000000000000000000000B +:10DCF00000210000001000000000000000000000F3 +:10DD000000080000002100000010000000000000DA :10DD10000000000000000000000000000000000003 -:10DD200000000000000000000000000000000000F3 +:10DD20000008000200A00000000000000000000049 :10DD300000000000000000000000000000000000E3 -:10DD4000000000000000000000C000000000000013 +:10DD400000080002000800000000000000000000C1 :10DD500000000000000000000000000000000000C3 -:10DD600000100000000000000000000000000000A3 -:10DD7000000000840084000000000000000000009B -:10DD800000000000000000C00000000000000000D3 +:10DD600000000008000800A0000000000000000003 +:10DD7000000000000000000000000000000000841F +:10DD80000000001000A000000000000000000000E3 :10DD90000000000000000000000000000000000083 :10DDA0000000000000000000000000000000000073 :10DDB0000000000000000000000000000000000063 :10DDC0000000000000000000000000000000000053 :10DDD0000000000000000000000000000000000043 :10DDE0000000000000000000000000000000000033 -:10DDF0000011004100410000000000000000001080 -:10DE00000000000000100000000000000000000002 +:10DDF00000000000000800080008000000210000EA +:10DE00000000000000000000000000000000000012 :10DE10000000000000000000000000000000000002 :10DE200000000000000000000000000000000000F2 :10DE300000000000000000000000000000000000E2 :10DE400000000000000000000000000000000000D2 :10DE500000000000000000000000000000000000C2 :10DE600000000000000000000000000000000000B2 -:10DE70000000000000000000000000000000001092 -:10DE80000000000000000000000000000090000002 -:10DE90000000000000000000000000000000000082 +:10DE700000000000000000000000000000000000A2 +:10DE80000000000000000000000000000010000082 +:10DE90000010000000000000000000000000000072 :10DEA0000000000000000000000000000000000072 :10DEB0000000000000000000000000000000000062 :10DEC0000000000000000000000000000000000052 :10DED0000000000000000000000000000000000042 :10DEE0000000000000000000000000000000000032 -:10DEF0000000000000000000000000000000000022 -:10DF00000000000000000000000300000000000806 -:10DF10000000000000000000000000000000000001 -:10DF200000000000000000000000000000000000F1 -:10DF300000000000000000000000000000000000E1 -:10DF400000000000000000080008000000080000B9 -:10DF5000000000000000000000000010000000C0F1 -:10DF600000000000000000100000000000000000A1 -:10DF700000000000000000000000000000000000A1 -:10DF80000000000000000000000800080000000081 +:10DEF000000000000000000000000000000000081A +:10DF00000000000800000000000000000000000009 +:10DF100000000000000000000000000000080000F9 +:10DF2000000000000000008400A0000000000000CD +:10DF300000000000000000000000000000080000D9 +:10DF4000000000000000008400A0000000000000AD +:10DF5000000000000000000000000000000000A021 +:10DF60000000000000000000000000A00000000011 +:10DF7000000000000000000000000000000000A001 +:10DF8000000000000000000000C0000800080000C1 :10DF90000000000000000000000000000000000081 :10DFA0000000000000000000000000000000000071 -:10DFB0000000000000000000000000000000000061 +:10DFB0000021000000000000000000000000000040 :10DFC0000000000000000000000000000000000051 -:10DFD0000000000000000000000000000000000041 +:10DFD0000021000000000000000000000000000020 :10DFE0000000000000000000000000000000000031 :10DFF0000000000000000000000000000000000021 -:10E0000000000000001100030000000000000000FC -:10E010000000000000000000000000000000000000 +:10E0000000000000000000000021000000000000EF +:10E0100000080000000000000000000000000000F8 :10E0200000000000000000000000000000000000F0 :10E0300000000000000000000000000000000000E0 :10E0400000000000000000000000000000000000D0 :10E0500000000000000000000000000000000000C0 :10E0600000000000000000000000000000000000B0 -:10E0700000000000000000000000000000000000A0 -:10E080000000000000080000000000000000000088 -:10E090000000000000000000000000000000000080 +:10E07000000000000000000000000082000000829C +:10E08000000000840000000000000000000000000C +:10E090002000000000080000000000000000000058 :10E0A0000000000000000000000000000000000070 :10E0B0000000000000000000000000000000000060 :10E0C0000000000000000000000000000000000050 @@ -220888,23 +220888,23 @@ :10EA100000000000000000000000000000000000F6 :10EA200000000000000000000000000000000000E6 :10EA300000000000000000000000000000000000D6 -:10EA40000000000000000000C000C0000000C00086 +:10EA40000000000000000000C00000000000C00046 :10EA500000000000000000000000000000000000B6 -:10EA60000000000000000000200020000000200046 +:10EA6000000000000000000020000000000020085E :10EA70000000000000000000000000000000000096 -:10EA80000002000000000000000000002000000064 -:10EA90002000000000000000000000000000000056 -:10EAA00000000000000000000080000000000000E6 -:10EAB0000000000000000000000001000000000055 -:10EAC0000100000000000000000000000000000045 +:10EA80000000000000000000000020000000000066 +:10EA90002010000000000000000000000000000046 +:10EAA0000000000000000000000000000000000066 +:10EAB0000010000000000000000000000000000046 +:10EAC0000000000000000000000000000000000046 :10EAD0000000000000000000000000000000000036 :10EAE0000000000000000000000000000000000026 :10EAF0000000000000000000000000000000000016 :10EB00000000000000000000000000000000000005 :10EB100000000000000000000000000000000000F5 -:10EB200000000000000000000000002000000000C5 -:10EB300000000000000000000000000004000000D1 -:10EB400000000400000000000000000000000000C1 +:10EB200000000000000000000000000000000000E5 +:10EB300000000000000000000000000000000000D5 +:10EB400000000000000000000000000000000000C5 :10EB500000000000000000000000000000000000B5 :10EB600000000000000000000000000000000000A5 :10EB70000000000000000000000000000000000095 @@ -220916,11 +220916,11 @@ :10EBD0000000000000000000000000000000000035 :10EBE0000000000000000000000000000000000025 :10EBF0000000000000000000000000000000000015 -:10EC00000000000000000000000000000000000004 -:10EC100000000000000000000000000000000000F4 -:10EC200000000000000000000000000000000000E4 -:10EC300000000000000000000000000000000000D4 -:10EC400000000000000000000000000000000000C4 +:10EC000000000000001000000000000000000000F4 +:10EC100000000000000000100000000000000000E4 +:10EC200000000000000000000000000000080000DC +:10EC300000000000000000000000000000000008CC +:10EC400000000088008800000000000000000000B4 :10EC500000000000000000000000000000000000B4 :10EC600000000000000000000000000000000000A4 :10EC70000000000000000000000000000000000094 @@ -220928,11 +220928,11 @@ :10EC90000000000000000000000000000000000074 :10ECA0000000000000000000000000000000000064 :10ECB0000000000000000000000000000000000054 -:10ECC0000000000000100010000000000000000024 +:10ECC000000000080000000000000000000000003C :10ECD0000000000000000000000000000000000034 -:10ECE0000000000000000000000000000000000024 +:10ECE000000000000000000000080000000000001C :10ECF0000000000000000000000000000000000014 -:10ED00000000000000000000000000000000000003 +:10ED000000000000000000000010000000000000F3 :10ED100000000000000000000000000000000000F3 :10ED200000000000000000000000000000000000E3 :10ED300000000000000000000000000000000000D3 @@ -220941,27 +220941,27 @@ :10ED600000000000000000000000000000000000A3 :10ED70000000000000000000000000000000000093 :10ED80000000000000000000010000000000000082 -:10ED9000000000000000080000000000000001006A -:10EDA0000000000000000000000000000000020061 -:10EDB00000000000C000000008100000000000007B -:10EDC00000000000000000008208000000000000B9 +:10ED90000000000000000000000000000000000073 +:10EDA000000000000000000000000000000000085B +:10EDB0000000000000080000000800000800A0009B +:10EDC00000000000000000000000000082000000C1 :10EDD0000000000000000000000000000000000033 :10EDE0000000000000000000000000000000000023 :10EDF0000000000000000000000000000000000013 :10EE000000000000000000000000080000000000FA -:10EE100000000000000000000000000000000000F2 -:10EE200002000000000000000000000000000000E0 -:10EE30000000000000000284008200080090001022 -:10EE4000030800C00040000800040000000000406B +:10EE100000000000000800000000000000000000EA +:10EE200000000000000000080000000000000000DA +:10EE3000000000002000009000A0008400000000FE +:10EE4000000800C0008800840000000800000008DE :10EE500000000000000000000000000000000000B2 :10EE600000000000000000000000000000000000A2 :10EE70000000000000000000000000000000000092 :10EE80000000000000000000000000000000000082 :10EE90000000000000000000000000000000000072 -:10EEA00000000000000000000000820000000000E0 -:10EEB000000000000000000000000000000000084A -:10EEC000080000000000C000820500000000C00033 -:10EED000000800000000000000000000000000002A +:10EEA0000000000000000000000000000000000062 +:10EEB0000000000000000000000000080000000347 +:10EEC000000000000008000000000000000000003A +:10EED0000000000000000000000000000000000032 :10EEE0000000000000000000000000000000000022 :10EEF0000000000000000000000000000000000012 :10EF00000000000000000000000000000000000001 @@ -220975,17 +220975,17 @@ :10EF80000080000000000000000000000000000001 :10EF90000080000000000000000000800000000071 :10EFA0000000000000000000000000000000000061 -:10EFB0000000000000000000000000000000000051 -:10EFC00000210000000800000008000000400000D0 -:10EFD0000000000000100000000000000000000021 +:10EFB0000000000000000000000000000000080049 +:10EFC00000000000000000000021000000410000DF +:10EFD0000000000000210000000000000000000010 :10EFE0000000000000000000000000000000000021 :10EFF0000000000000000000000000000000000011 :10F0000000000010000000000000000000000000F0 :10F0100000000010000000000000000000100000D0 :10F0200000000000000000000000000000000000E0 -:10F0300000000000000000000000208400C00082EA -:10F040000008008402A0028400820000000000008A -:10F0500000400000008200000000000000000000EE +:10F0300000000008000800000000098200000082B3 +:10F040000000090002080084000020000000000009 +:10F0500000000000090000000000000000000000A7 :10F0600000000000000000000000000000000000A0 :10F070000000000000000000000000000000000090 :10F080000000000000000000000000000000000080 @@ -221016,8 +221016,8 @@ :10F2100000000000000000000000000000000000EE :10F2200000000000000000000000000000000000DE :10F2300000000000000000000000000000000000CE -:10F24000200020000000000000000000000000007E -:10F2500000000000000000000000200090000000FE +:10F2400000000000000000000000000000000000BE +:10F2500000000000000000000000000000000000AE :10F26000000000000000000000000000000000009E :10F27000000000000000000000000000000000008E :10F28000000000000000000000000000000000007E @@ -221040,25 +221040,25 @@ :10F39000000000000000000000000000000000006D :10F3A000000000000000000000000000000000005D :10F3B000000000000000000000000000000000004D -:10F3C00000000000000000000000008000000000BD -:10F3D00000000000000000000000000000008000AD -:10F3E000808000000000000000000000000000001D +:10F3C000000000000000000000000000000000003D +:10F3D000000000000000000000000000000000002D +:10F3E000000000000000000000000000000000001D :10F3F000000000000000000000000000000000000D :10F4000000000000000000000000000000000000FC :10F4100000000000000000000000000000000000EC :10F4200000000000000000000000000000000000DC :10F4300000000000000000000000000000000000CC -:10F4400000000000000000000000000000020000BA +:10F4400000000000000000000000000000000000BC :10F4500000000000000000000000000000000000AC -:10F460000200020220000000000000000000000076 +:10F46000000000000000000000000000000000009C :10F47000000000000000000000000000000000008C :10F48000000000000000000000000000000000007C :10F49000000000000000000000000000000000006C :10F4A000000000000000000000000000000000005C :10F4B000000000000000000000000000000000004C -:10F4C0000000000000000000000000000000070035 +:10F4C000000000000000000000000000000000003C :10F4D000000000000000000000000000000000002C -:10F4E0000000000000000700000000000000000015 +:10F4E000000000000000000000000000000000001C :10F4F000000000000000000000000000000000000C :10F5000000000000000000000000000000000000FB :10F5100000000000000000000000000000000000EB @@ -221066,7 +221066,7 @@ :10F5300000000000000000000000000000000000CB :10F5400000000000000000000000000000000000BB :10F5500000000000000000000000000000000000AB -:10F5600000000000F000F0FF0000000000000000BC +:10F56000000000000000000000000000000000009B :10F57000000000000000000000000000000000008B :10F58000000000000000000000000000000000007B :10F59000000000000000000000000000000000006B @@ -221074,29 +221074,29 @@ :10F5B000000000000000000000000000000000004B :10F5C000000000000000000000000000000000003B :10F5D000000000000000000000000000000000002B -:10F5E000000000000000F000F0FF0000000000003C +:10F5E000000000000000000000000000000000001B :10F5F000000000000000000000000000000000000B :10F6000000000000000000000000000000000000FA :10F6100000000000000000000000000000000000EA :10F6200000000000000000000000000000000000DA :10F6300000000000000000000000000000000000CA :10F6400000000000000000000000000000000000BA -:10F65000000000000F0F0F0F00000000000000006E -:10F660000000000000000000000000005F0A5F0AC8 +:10F6500000000000000000000000000000000000AA +:10F66000000000000000000000000000000000009A :10F67000000000000000000000000000000000008A :10F68000000000000000000000000000000000007A :10F69000000000000000000000000000000000006A :10F6A000000000000000000000000000000000005A :10F6B000000000000000000000000000000000004A :10F6C000000000000000000000000000000000003A -:10F6D0000000000000003C3C3C3C0000000000003A -:10F6E00000000000000000000000000000005F0AB1 -:10F6F0005F0A0000000000000000000000000000A1 +:10F6D000000000000000000000000000000000002A +:10F6E000000000000000000000000000000000001A +:10F6F000000000000000000000000000000000000A :10F7000000000000000000000000000000000000F9 :10F7100000000000000000000000000000000000E9 :10F7200000000000000000000000000000000000D9 :10F7300000000000000000000000000000000000C9 -:10F7400000000000000000000010000000000000A9 +:10F7400000000000000000000000000000000000B9 :10F7500000000000000000000000000000000000A9 :10F760000000000000000000000000000000000099 :10F770000000000000000000000000000000000089 @@ -221131,23 +221131,23 @@ :10F9400000000000000000000000000000000000B7 :10F9500000000000000000000000000000000000A7 :10F960000000000000000000000000000000000097 -:10F97000000000000000000000000000100008006F -:10F9800000000880410041800000000088008800DD -:10F99000000088008800880000000000200020008F +:10F9700000000000000000000000000020001180D6 +:10F9800000002080410041800000000088008800C5 +:10F990000000880088000000000000002000200017 :10F9A00000002000200000000000000020002000D7 -:10F9B00000002000200020000000000000022000C5 -:10F9C00020000000200020000000000000000000D7 +:10F9B00000002000200000000000000000022000E5 +:10F9C00020000000200020000000000000002000B7 :10F9D00020000000200020000000000000002000A7 -:10F9E00000000080000021000000008000000000F6 -:10F9F0000000000000008500000000000080800082 -:10FA00008000000080409000A0080000000000007E +:10F9E00020000080200001000000008000000000D6 +:10F9F0000000000000000100000000000080800006 +:10FA0000A010000080409000A0080000000000004E :10FA100000000000000000000000000000000000E6 :10FA200000000000000000002000000000000000B6 :10FA300000000000000000000000000000000000C6 :10FA400000000000000000000000000000000000B6 :10FA500000000000000000000000000000000000A6 :10FA6000000000000002000002000000000400008E -:10FA70000000000000000000200000000000004026 +:10FA70000000200000000000200000000000004006 :10FA80000000000000000000000000000000000076 :10FA90000000000000000000000000000000000066 :10FAA0000000000000000000000000000000000056 @@ -221159,36 +221159,36 @@ :10FB000000000000000000000000000000000000F5 :10FB100000000000000000000000000000000000E5 :10FB200000000000000000000000000000000000D5 -:10FB300000000000000000000000000800000008B5 -:10FB400000000000000000000000000000000000B5 -:10FB5000000000000000000000000000000800009D -:10FB60000008000000000008000000000000000085 -:10FB70000000000000080000000000000008000075 -:10FB8000000800000100010000000100000000006A -:10FB90000000000000000003000000000000000062 -:10FBA0000000000000000000000000000000000055 -:10FBB0000000000000000000000000000005000040 -:10FBC0000005000000000000000800000000000028 -:10FBD000000000000000000800000000000000001D +:10FB3000000000000000000000000000000000883D +:10FB400000000000000800000000000000000000AD +:10FB500000000000000000000000000000000000A5 +:10FB60000000000000080000000000000000000885 +:10FB70000000000000000000000000000000000085 +:10FB80000000000001000000000001000000000073 +:10FB90000000000000210000000000000000000341 +:10FBA000000000000008000000000000000000004D +:10FBB0000000000000000000000000000000000045 +:10FBC000000500210000000000050000000000000A +:10FBD00000000000004100000000000000000000E4 :10FBE0000000000000000000000000000000000015 -:10FBF00000030000000000030003002100050000D6 -:10FC00000000004100004000100000002000000043 +:10FBF000000800000010000300080021004100057B +:10FC000000030008000540000000000004000000A0 :10FC100000000000000000000000000000000000E4 :10FC200000000000000000000000000000000000D4 :10FC300000000000000000000000000000000000C4 :10FC400000000000000000000000000000000000B4 :10FC500000000000000000000000000000000000A4 -:10FC6000210008000000000000000000000000006B -:10FC7000000000000000000000000300000003007E -:10FC8000000000000000000002002000000004004E -:10FC9000A000A00000000000000000000000000024 +:10FC60000000000000000000000000000000000094 +:10FC70000000000000000000000000000000000084 +:10FC800000000000410000001000400000000800DB +:10FC9000A0000000000000000000000000000000C4 :10FCA0000000000000000000000000000000000054 :10FCB0000000000000000000000000000000000044 :10FCC0000000000000000000000000000000000034 :10FCD0000000000000000000000000000000000024 -:10FCE000000000000000000000000000080000000C -:10FCF00008000000000000000000000000000000FC -:10FD00000800000088000000000080008000000063 +:10FCE0000000000000000000000000000000000014 +:10FCF00000000000000000000000A0000000000064 +:10FD000000000800000000000000800080000000EB :10FD10008000000000000000000000000000000063 :10FD200000000000000000000000000000000000D3 :10FD300000000000000000000000000000000000C3 @@ -221198,13 +221198,13 @@ :10FD70000000000000000000000000000000000083 :10FD80000000000000000000000000000000000073 :10FD90000000000000000000000000000000000063 -:10FDA0000000000300080000000800000000000040 -:10FDB0000000000000000000002100000000002101 +:10FDA0000000000300000000000800000008000040 +:10FDB0000000000000000000002100000000000022 :10FDC000000000030000000000050000000000002B -:10FDD000000800000000000000000000000000001B +:10FDD0000000000000000000000000000000000023 :10FDE0000000000000000000000000000000000013 -:10FDF00000000008000000030008002100030008C4 -:10FE00000005000300410810000800000008000081 +:10FDF00000000000000000210005000800030808C2 +:10FE0000000300030808000800080000C008000004 :10FE100000000000000000000000000000000000E2 :10FE200000000000000000000000000000000000D2 :10FE300000000000000000000000000000000000C2 @@ -221212,96 +221212,96 @@ :10FE500000000000000000000000000000000000A2 :10FE60000000000000000000000000000000000092 :10FE70000000000000000000000000000000000082 -:10FE80000000000000000000000021000000000051 -:10FE900020004021000000000000000000000000E1 +:10FE80000000000000000000000000000000000072 +:10FE9000020000000000000000000021000000003F :10FEA0000000000000000000000000000000000052 :10FEB0000000000000000000000000000000000042 -:10FEC0000000000000000000000000000000000032 -:10FED0000000002100004002880000000000A00097 -:10FEE000A00008080000A000A00000000021000001 -:10FEF0000200000000000000A0000008000500084B -:10FF00000004004108110004000800000003000084 -:10FF100000118000800000000000000000000000D0 +:10FEC0000000002100000000000000000000000011 +:10FED0000000000000054002880000000008A000AB +:10FEE000A00000000005A000A00000000021880084 +:10FEF0008800000000000000000008080009000061 +:10FF00000000002100410008000000000000000087 +:10FF10000000800000000000000000000000000061 :10FF200000000000000000000000000000000000D1 :10FF300000000000000000000000000000000000C1 :10FF400000000000000000000000000000000000B1 :10FF500000000000000000000000000000000000A1 :10FF60000000000000000000000000000000000091 -:10FF7000000000000000000000000000000002403F -:10FF80001100000000000000000000000000000060 +:10FF70000000000000000000000000000000000081 +:10FF80000000000000000000000000000000000071 :10FF90000000000000000000000000000000000061 :10FFA0000000000000000000000000000000000051 :10FFB0000000000000000000000000000000000041 :10FFC00000400001000000000000000000002000D0 :10FFD000004000010000000040000083000100001C -:10FFE0000001008500000000000100850000000104 -:10FFF000000100850000C00001000000000911019F +:10FFE0000001008500000000000100850000000005 +:10FFF0000001008500004001010000000005100024 :020000040036C4 -:10000000C00000000009C000C10000010082C00063 -:10001000C100010000830000020000000000000099 +:10000000C00000000011C000C10000010082C0005B +:10001000C100010000830000090000000000000092 :1000200011000000000000000000000000000000BF :10003000000000000000000000000000000011119E :1000400000110082004000000000000000001111BB :100050008021008900400000004180410082004072 :1000600000410003008500050041000300850005F4 -:10007000000200030085000500020404001100C115 -:10008000C008A104090000838041C1410003008031 +:10007000004100030085000589400309001100C10B +:1000800080418402040000838041C141000300805C :100090008041C141410000830000000000000000D9 :1000A0000000000000000000000000000000000050 :1000B0000000000000000000000000000000000040 :1000C000410000000080020000000000000000006D :1000D0004100000000808300000041000000008219 :1000E00083004100000000858580410000000085FC -:1000F00085804100000000828580802084410009C5 -:100100001100090020410040804180C1C1410041EF -:100110000300898041C100418041000000000000CF +:1000F00085804100000000858580000202410004E7 +:100100000800090011040004804180C1C141004180 +:100110000300828041C100418041000000000000D6 :1001200000000000000000000000000000000000CF :1001300000000000000000000000000000000000BF :10014000000001000000004002000000000000006C :1001500000000100000000408300000001000000DA :1001600000838300010000000085040401000000FA -:100170000084040401000000008404041005400110 -:1001800000000000000401000001820140C14001A4 +:100170000084040401000000008404040408040155 +:1001800000010084008400000001820140C14001A0 :100190000001010040C000C1000182010000000018 :1001A000000000000000000000000000000000004F :1001B000000000000000000000000000000000003F :1001C00000000000000000000100C0C000000000AE :1001D00000000000000000000100C0C0000000009E :1001E00000000100C0C00000000001000404000085 -:1001F00000000100040400000000010004040000ED -:1002000000008501C10000000001040000000000A2 -:100210000000C100C00000000000C000000000039A +:1001F000000001000404000000008300040400016A +:1002000000000000820000000001840101000000E5 +:100210000000C100C00000000200C0000000000299 :1002200000000000000000000000000000000000CE :1002300000000000000000000000000000000000BE -:10024000000000000000000000004100000000006D -:10025000000000000000000000004100000000005D +:10024000000000000000000000004100020000006B +:10025000000000000000000000004100020000005B :10026000000000004100000000000000410080800C -:1002700000000000410080800000000041008080FC -:1002800000090041030541000008000800110400B6 -:1002900000410041C1418000000800418041000050 +:10027000000000004100808000000000C10080807C +:100280000020000411418200000800030002400029 +:1002900000410041C1418000002100418041000037 :1002A000000000000000000000000000000000004E :1002B000000000000000000000000000000000003E -:1002C00000000000000000000002000002820000A8 -:1002D0000000000000000000000900000989000083 -:1002E00000020002000002020000000900000505F3 -:1002F00000000000000005050000000000000505EA -:1003000000008004000204C000414104004183C099 -:10031000400580410080C1C100C141410041C1C1CF +:1002C00000000000000000000000000002820000AA +:1002D000000000000000000000000000098900008C +:1002E00000020000000002020000000000000505FE +:1002F00000000000000005050000000000020505E8 +:1003000000008041000282050041C0410091C1828D +:10031000200480410080C1C100C141410041C1C1F0 :1003200003C1000000000000000000000000000009 :1003300000000000000000000000000000000000BD -:10034000000000000000000000000000000000109D -:10035000000000000000000000000000000000108D +:100340000000000000000000000000000000008429 +:100350000000000000000000000000000000008419 :10036000000000000000000001010000000000008B :10037000000000000000000000000000000000007D -:1003800000000000100100000241000388000091FD -:1003900041850182400100C040C100C1820100C10D +:10038000000000001001000004C100A14101004074 +:1003900082080102400100C040C100C1A001000567 :1003A00040C101C10000000000000000000000008A :1003B000000000000000000000000000000000003D -:1003C000000000000000000000000000818100002B -:1003D000000000000000000000000000008100009C -:1003E0000000000000008181000000000000818109 -:1003F00000000000000048420000000000008211E0 -:100400000000000000004800000007004842000013 +:1003C00000000000000000000000000048420000A3 +:1003D00000000000000000000000000000420000DB +:1003E00000000000000048420000000000004842F9 +:1003F00000000000000048420000000000008421CE +:1004000000000000000088000000070048420000D3 :1004100000C80000484200000000220048420000DE :100420000000000048420000000000000000000042 :1004300000000000000000000000000000000000BC @@ -221317,7 +221317,7 @@ :1004D0000000000014A894AA000000000000000022 :1004E0000000000014A814AA00000000000014A8D6 :1004F00094AA0000000014A894AA0000000014A808 -:1005000094AA0000000014A894AA00000000C18C66 +:1005000094AA0000000014A894AA00000000418CE6 :1005100000000000004A22B00000000000C954881A :100520000000000000015CC00000000000000000AE :1005300000000000000000000000000000000000BB @@ -227537,295 +227537,295 @@ :1089800000000000000000000000000000000000E7 :1089900000000000000000000000000000000000D7 :1089A00000000000000000000000000000000000C7 -:1089B00000000000000000000000000000000000B7 -:1089C00000000000000000000000000000000000A7 +:1089B000000000000000002C00333002C000002E38 +:1089C000EC0BBBB2EEECBBBB0000000000000000F3 :1089D0000000000000000000000000000000000097 :1089E0000000000000000000000000000000000087 -:1089F0000000000000000000000000000000000077 -:108A00000000000000000000000000000000000066 +:1089F000000000000000000000000000000014C0A3 +:108A00000003000000000000000000000000000063 :108A10000000000000000000000000000000000056 :108A20000000000000000000000000000000000046 :108A30000000000000000000000000000000000036 -:108A40000000000000000000000000000000000026 -:108A50000000000000000000000000000000000016 -:108A60000000000000000000000000000000000006 -:108A700000000000000000000000000000000000F6 +:108A400000000000000000400000017F4400011011 +:108A50000080008010008000000085C073FE1C00B4 +:108A60007F00000010002000038A00800605011D21 +:108A7000800FF730FF0F7473E07CF00700000000F8 :108A800000000000000000000000000000000000E6 :108A900000000000000000000000000000000000D6 -:108AA00000000000000000000000000000000000C6 -:108AB00000000000000000000000000000000000B6 -:108AC00000000000000000000000000000000000A6 -:108AD0000000000000000000000000000000000096 -:108AE0000000000000000000000000000000000086 -:108AF0000000000000000000000000000000000076 -:108B00000000000000000000000000000000000065 -:108B10000000000000000000000000000000000055 -:108B20000000000000000000000000000000000045 -:108B30000000000000000000000000000000000035 -:108B40000000000000000000000000000000000025 -:108B50000000000000000000000000000000000015 -:108B60000000000000000000000000000000000005 -:108B700000000000000000000000000000000000F5 -:108B800000000000000000000000000000000000E5 -:108B900000000000000000000000000000000000D5 -:108BA00000000000000000000000000000000000C5 -:108BB00000000000000000000000000000000000B5 -:108BC00000000000000000000000000000000000A5 -:108BD0000000000000000000000000000000000095 -:108BE0000000000000000000000000000000000085 -:108BF0000000000000000000000000000000000075 -:108C00000000000000000000000000000000000064 -:108C10000000000000000000000000000000000054 -:108C20000000000000000000000000000000000044 -:108C30000000000000000000000000000000000034 -:108C40000000000000000000000000000000000024 -:108C50000000000000000000000000000000000014 -:108C60000000000000000000000000000000000004 -:108C700000000000000000000000000000000000F4 -:108C800000000000000000000000000000000000E4 -:108C900000000000000000000000000000000000D4 -:108CA00000000000000000000000000000000000C4 -:108CB00000000000000000000000000000000000B4 -:108CC00000000000000000000000000000000000A4 -:108CD0000000000000000000000000000000000094 -:108CE0000000000000000000000000000000000084 -:108CF0000000000000000000000000000000000074 -:108D00000000000000000000000000000000000063 -:108D10000000000000000000000000000000000053 -:108D20000000000000000000000000000000000043 -:108D30000000000000000000000000000000000033 -:108D40000000000000000000000000000000000023 -:108D50000000000000000000000000000000000013 -:108D60000000000000000000000000000000000003 -:108D700000000000000000000000000000000000F3 -:108D800000000000000000000000000000000000E3 -:108D900000000000000000000000000000000000D3 -:108DA00000000000000000000000000000000000C3 -:108DB00000000000000000000000000000000000B3 -:108DC00000000000000000000000000000000000A3 -:108DD0000000000000000000000000000000000093 -:108DE0000000000000000000000000000000000083 -:108DF0000000000000000000000000000000000073 -:108E00000000000000000000000000000000000062 -:108E10000000000000000000000000000000000052 -:108E20000000000000000000000000000000000042 -:108E30000000000000000000000000000000000032 -:108E40000000000000000000000000000000000022 -:108E50000000000000000000000000000000000012 -:108E60000000000000000000000000000000000002 -:108E700000000000000000000000000000000000F2 -:108E800000000000000000000000000000000000E2 -:108E900000000000000000000000000000000000D2 -:108EA00000000000000000000000000000000000C2 -:108EB00000000000000000000000000000000000B2 -:108EC00000000000000000000000000000000000A2 -:108ED0000000000000000000000000000000000092 -:108EE0000000000000000000000000000000000082 -:108EF0000000000000000000000000000000000072 -:108F00000000000000000000000000000000000061 -:108F10000000000000000000000000000000000051 -:108F20000000000000000000000000000000000041 -:108F30000000000000000000000000000000000031 -:108F40000000000000000000000000000000000021 -:108F50000000000000000000000000000000000011 -:108F60000000000000000000000000000000000001 -:108F700000000000000000000000000000000000F1 -:108F800000000000000000000000000000000000E1 -:108F900000000000000000000000000000000000D1 -:108FA00000000000000000000000000000000000C1 -:108FB00000000000000000000000000000000000B1 -:108FC00000000000000000000000000000000000A1 -:108FD0000000000000000000000000000000000091 -:108FE0000000000000000000000000000000000081 -:108FF0000000000000000000000000000000000071 -:109000000000000000000000000000000000000060 -:109010000000000000000000000000000000000050 -:109020000000000000000000000000000000000040 -:109030000000000000000000000000000000000030 -:109040000000000000000000000000000000000020 -:109050000000000000000000000000000000000010 -:109060000000000000000000000000000000000000 -:1090700000000000000000000000000000000000F0 -:1090800000000000000000000000000000000000E0 -:1090900000000000000000000000000000000000D0 -:1090A00000000000000000000000000000000000C0 -:1090B00000000000000000000000000000000000B0 -:1090C00000000000000000000000000000000000A0 -:1090D0000000000000000000000000000000000090 -:1090E0000000000000000000000000000000000080 -:1090F0000000000000000000000000000000000070 -:10910000000000000000000000000000000000005F -:10911000000000000000000000000000000000004F -:10912000000000000000000000000000000000003F -:10913000000000000000000000000000000000002F -:10914000000000000000000000000000000000001F -:10915000000000000000000000000000000000000F -:1091600000000000000000000000000000000000FF -:1091700000000000000000000000000000000000EF -:1091800000000000000000000000000000000000DF -:1091900000000000000000000000000000000000CF -:1091A00000000000000000000000000000000000BF -:1091B00000000000000000000000000000000000AF -:1091C000000000000000000000000000000000009F -:1091D000000000000000000000000000000000008F -:1091E000000000000000000000000000000000007F +:108AA0000000000000000000000000000000008046 +:108AB0001C0000100020000000000000000000006A +:108AC0000000040208100000400000004000008088 +:108AD00000100000000000000000038038200000AB +:108AE000010700001C0021001C0000700000240091 +:108AF00000000000A181C004050008020038000049 +:108B00000000000A0007000000781FFE010200308C +:108B1000034640100B0108800000024000000000E6 +:108B200000000000000000000000000080000000C5 +:108B30002A000000000300103E00000000C00000FA +:108B400080000000000000000000000000000001A4 +:108B50005D0052880D45000000000000000000008C +:108B60000000000000000000036803E0001FFA2876 +:108B7000240084000814C200000388841034000913 +:108B80002E1211024612088097C40C02024880047B +:108B900004240000044000009248008010C400003B +:108BA0005040004000200100002000048010080117 +:108BB0000000000010900000000400C00090003091 +:108BC00001018280000080180002C00C8001CB04EB +:108BD0000110000002B00000A8800A020000C210CC +:108BE00050588015000400804028000AA010084258 +:108BF000160010000350004008400000E000000094 +:108C0000000404000000020000000000000000005A +:108C1000000000000000000008102500003F01FED9 +:108C200018A3002133C00381000092000004808259 +:108C3000108A00406E3ED8422000848C22642500B9 +:108C400000308202805118110888808001E452406F +:108C50000800801040814000020081409490420052 +:108C60004004000444000000006C281007C12540A7 +:108C70000000010202000482000304000000100151 +:108C800000C05000011132000850000FB466880F78 +:108C9000B6068801E41043B12E800B5D51208C593B +:108CA000DC2048030921678001890151C5D64000B5 +:108CB00000600020000116600010C4C00880091286 +:108CC00021092020280005825000DF44C08000C414 +:108CD000C000804184228910000888C00070001004 +:108CE0002C300003D08104222A10888900100B80C8 +:108CF000000600020000400000312101208020C257 +:108D0000450012200181047400454C010008B9009F +:108D10000500000004150000000020110000000AFA +:108D2000B0018B902CAC040000404200031D2013C6 +:108D3000642014080260A110110003000002D00C8E +:108D4000400000000000000200808001000041009F +:108D5000100004000000000010002208221C000087 +:108D6000000080500000802E600170E00200400092 +:108D7000020C0040C0100029803063020052020043 +:108D8000043C18084500004D800400000004004326 +:108D90006000947318170000801100502008000034 +:108DA000B90140D4E0001030452C009428080C0C88 +:108DB00044001330000020140C000000F0300806BE +:108DC0000000000000400000040C0A000FE000005A +:108DD00008C00000000810100340090C1040801863 +:108DE00032000040803FC00002F1180C8E0B046876 +:108DF000460190BF840008000402000202A84B0153 +:108E00002C40400992214014160331806000130069 +:108E1000174004C0080001851007812C0A804140DA +:108E20005800094902C100008281200454051D80B8 +:108E30000020A008500E0020000000040000401098 +:108E4000000000000058401A00000A2002CC3848F8 +:108E5000440222080102000030CC076D0130111DD0 +:108E60005400000000400002000408000408420111 +:108E700000400000000002800000020000163620C2 +:108E800081BD4001B0029030BC897E0290D8C834C8 +:108E900002458004800980B01400114D6441C20075 +:108EA0008057131F0DE012BA847C800053001DE12F +:108EB0001500188C02080A001012000000000000C3 +:108EC00000000008008009000008000000200000E9 +:108ED00000001100028000000000000000000040BF +:108EE0000000000030030000000000000121F00E2F +:108EF00000A00010820000B0024090412811000044 +:108F0000019188282000604D04C3C02440000870EF +:108F1000400911050002000400008003AB8001013C +:108F2000008004000001C0C30003B0835480010C22 +:108F30000000000608000328D0928D10040820309D +:108F400091C0C5020102011341089026400040086B +:108F5000692213A8581208114A39030BC0054500AD +:108F6000000000002010308802280040A00000000F +:108F70000028E00000000000280018000000C17078 +:108F80009C94050AE7C41001E004743303154208F9 +:108F9000A00008000000000B40000C00004000048E +:108FA000001040000000002000050400001000A098 +:108FB0000000002100E00000241309050A008100E0 +:108FC000181304424200020000000000000041208B +:108FD000062853960F8802EF61402000630000804E +:108FE000000098A411A503054037C202A00318236E +:108FF00011084410004C8040022040000000000096 +:10900000000C40081D00000C00500202020000A9E4 +:109010005000000000000B41240000000122060067 +:109020000042FC09C020000001309C000000001339 +:1090300089C0000000100010048504100548780065 +:10904000021C003220046002000000400000010009 +:10905000000000000A0000020070070CFE033C3014 +:109060005280387E1830063E4301C84E400000044E +:1090700000000000000000400000000100000000AF +:1090800000040900010000400400001300200084D7 +:1090900000200000002000000EC000FF0E07E3B813 +:1090A0007C0000277B000070000080E633400C86C7 +:1090B000500440F800100000000020102040000183 +:1090C0000F272010DC10200B030002A0000000007E +:1090D000000000000040000001000000000000004F +:1090E000880000000A00001E10F040333F000061BD +:1090F000103CF03C3840C001F00000B8781E1FC1A1 +:109100000380206000FF00000F8000001C020010A0 +:109110000100080300000028042004842048904433 +:109120008924488244811224244822448224411202 +:10913000108908049102112048444489044882247B +:109140002048904921048909249091200849044825 +:1091500048912021101121224482244122441224CA +:109160001122491220912008421122424222244811 +:109170002244048904489244882448224482244199 +:10918000224490840912008420908490890842012E +:1091900021124484244822448224408844EFFD3D27 +:1091A000DF4FFEF347FC31FF37FFCFF311C37CFFE6 +:1091B0001F3FFF8FA620FF0CFCFE386FC3BFF03FA0 +:1091C000E0FFDE17FE43C1C3F35048031015CC0087 +:1091D0006000102A8002A287AA80025400000000CA +:1091E000000000000010A010040000E000001000CB :1091F000000000000000000000000000000000006F :10920000000000000000000000000000000000005E -:10921000000000000000000000000000000000004E -:10922000000000000000000000000000000000003E -:10923000000000000000000000000000000000002E -:10924000000000000000000000000000000000001E +:10921000000000000000000003FF00FFFF3FFFCF41 +:10922000FFF3FFFCFFFF3FFFCFFFF3FFFCFFFF3F1C +:10923000FFCFFFF3FFFCFFFF3FFFCFFFF00AFC0073 +:109240000000100000000000080000000000000006 :10925000000000000000000000000000000000000E -:1092600000000000000000000000000000000000FE -:1092700000000000000000000000000000000000EE -:1092800000000000000000000000000000000000DE -:1092900000000000000000000000000000000000CE +:1092600000000000000000000000000000003FFFC0 +:10927000CFFFF3FFFCFFFF3FFFCFFFF3FFFCFFFF3C +:109280003FFFCFFFF00AFC000000100000000000CC +:1092900008000000000000000000000000000000C6 :1092A00000000000000000000000000000000000BE :1092B00000000000000000000000000000000000AE :1092C000000000000000000000000000000000009E -:1092D000000000000000000000000000000000008E -:1092E000000000000000000000000000000000007E -:1092F000000000000000000000000000000000006E -:10930000000000000000000000000000000000005D -:10931000000000000000000000000000000000004D -:10932000000000000000000000000000000000003D -:10933000000000000000000000000000000000002D -:10934000000000000000000000000000000000001D -:10935000000000000000000000000000000000000D -:1093600000000000000000000000000000000000FD -:1093700000000000000000000000000000000000ED -:1093800000000000000000000000000000000000DD -:1093900000000000000000000000000000000000CD -:1093A00000000000000000000000000000000000BD +:1092D00000000000000000000000044D0155504453 +:1092E000C411112AA84AAAA2AAA8AAAA04444111F0 +:1092F0001044441111044441111044441111044418 +:1093000041111044441111044441111044441111FD +:1093100004444111104444111104444111104444C7 +:109320001111154441151044441111044441111008 +:1093300044441111044441111044441111044441A6 +:1093400011104444111104444111104444111104FA +:10935000444111104444111104444111104444117A +:109360001104444111104444111100004E0000004A +:1093700000002001F888008021F800020081001020 +:1093800040000020800002004100000000000000BA +:1093900000000104E820001D00000410180007F878 +:1093A00000B84000000000000000000000000000C5 :1093B00000000000000000000000000000000000AD :1093C000000000000000000000000000000000009D -:1093D000000000000000000000000000000000008D -:1093E000000000000000000000000000000000007D -:1093F000000000000000000000000000000000006D -:10940000000000000000000000000000000000005C -:10941000000000000000000000000000000000004C -:10942000000000000000000000000000000000003C -:10943000000000000000000000000000000000002C +:1093D000000000000200002100000000000000006A +:1093E0000000000000802000000000020002A00237 +:1093F00040000000020000040000000001500000D6 +:109400000000000000000E00000000000038000016 +:109410000000000000300000801003840000000005 +:1094200007800000000000000000000000000000B5 +:109430000000000000000000A00108000000000083 :10944000000000000000000000000000000000001C -:10945000000000000000000000000000000000000C -:1094600000000000000000000000000000000000FC -:1094700000000000000000000000000000000000EC -:1094800000000000000000000000000000000000DC -:1094900000000000000000000000000000000000CC -:1094A00000000000000000000000000000000000BC -:1094B00000000000000000000000000000000000AC -:1094C000000000000000000000000000000000009C -:1094D000000000000000000000000000000000008C -:1094E000000000000000000000000000000000007C -:1094F000000000000000000000000000000000006C -:10950000000000000000000000000000000000005B -:10951000000000000000000000000000000000004B -:10952000000000000000000000000000000000003B -:10953000000000000000000000000000000000002B -:10954000000000000000000000000000000000001B -:10955000000000000000000000000000000000000B -:1095600000000000000000000000000000000000FB -:1095700000000000000000000000000000000000EB -:1095800000000000000000000000000000000000DB -:1095900000000000000000000000000000000000CB -:1095A00000000000000000000000000000000000BB -:1095B00000000000000000000000000000000000AB -:1095C000000000000000000000000000000000009B -:1095D000000000000000000000000000000000008B -:1095E000000000000000000000000000000000007B -:1095F000000000000000000000000000000000006B -:10960000000000000000000000000000000000005A -:10961000000000000000000000000000000000004A -:10962000000000000000000000000000000000003A -:10963000000000000000000000000000000000002A -:10964000000000000000000000000000000000001A -:10965000000000000000000000000000000000000A -:1096600000000000000000000000000000000000FA -:1096700000000000000000000000000000000000EA -:1096800000000000000000000000000000000000DA -:1096900000000000000000000000000000000000CA -:1096A00000000000000000000000000000000000BA -:1096B00000000000000000000000000000000000AA -:1096C000000000000000000000000000000000009A +:1094500000000000000E0000001C000000000000E2 +:1094600000000000800000000001C00000000000BB +:10947000000E000000000000000000C00000800896 +:109480000100100080100100100200A00000000E7A +:10949000000000200000840000048200000040085A +:1094A000E0000001241210004000188001000002BA +:1094B000020000000020000004000C00820081E88F +:1094C000170440801300000000000000400000006E +:1094D000000020000000300000001C00700380002D +:1094E000000000000018000000030C004000000312 +:1094F0000000000000000018000000000000000054 +:1095000000000000000000000000030180000000D7 +:1095100000000180000000000000000000000000CA +:109520000000000000000000000001000030C0004A +:109530000000000000000000000386080000020098 +:1095400000400000200000000004000000000000B7 +:109550000000000010080000000000002000800053 +:1095600000000011000100000002000210002000B5 +:1095700002000000080000000011000000000100CF +:109580000000020000000000400000000000001089 +:1095900000000400F00002000000040000000000D1 +:1095A0000600000000004000001000000000000065 +:1095B0000000080000000800000400000000020095 +:1095C0000080000000010002010000000000000017 +:1095D00000008000000000000000000010000000FB +:1095E00000800000200800100000000000000004BF +:1095F0000000000000000000000200000000080061 +:10960000000000000000000000800420200008018D +:109610000000000000000000000000080000000042 +:1096200000000000040000000001000000410000F4 +:109630000000060000000000001001000000008093 +:109640000000000000000000000024000C000200E8 +:1096500001000400000000060200186C0900000070 +:10966000000C0031800000003000000000180018DD +:1096700000300000000030061800000000C30000A9 +:1096800001C000000C3300000000000008001000C2 +:109690000900000000000000000000C0000380007E +:1096A0000000000000C0003000304000000000005A +:1096B0000004000000000000000000000000200086 +:1096C000000000000000000000002000004000003A :1096D000000000000000000000000000000000008A :1096E000000000000000000000000000000000007A -:1096F000000000000000000000000000000000006A +:1096F0000000000008000000000000000000000062 :109700000000000000000000000000000000000059 -:109710000000000000000000000000000000000049 +:109710000000000000080000000000000000000041 :109720000000000000000000000000000000000039 -:109730000000000000000000000000000000000029 -:109740000000000000000000000000000000000019 -:109750000000000000000000000000000000000009 -:1097600000000000000000000000000000000000F9 -:1097700000000000000000000000000000000000E9 -:1097800000000000000000000000000000000000D9 -:1097900000000000000000000000000000000000C9 -:1097A00000000000000000000000000000000000B9 -:1097B00000000000000000000000000000000000A9 -:1097C0000000000000000000000000000000000099 -:1097D0000000000000000000000000000000000089 -:1097E0000000000000000000000000000000000079 -:1097F0000000000000000000000000000000000069 -:109800000000000000000000000000000000000058 -:109810000000000000000000000000000000000048 -:109820000000000000000000000000000000000038 -:109830000000000000000000000000000000000028 -:109840000000000000000000000000000000000018 -:109850000000000000000000000000000000000008 -:1098600000000000000000000000000000000000F8 -:1098700000000000000000000000000000000000E8 -:1098800000000000000000000000000000000000D8 -:1098900000000000000000000000000000000000C8 -:1098A00000000000000000000000000000000000B8 -:1098B00000000000000000000000000000000000A8 -:1098C0000000000000000000000000000000000098 -:1098D0000000000000000000000000000000000088 -:1098E0000000000000000000000000000000000078 -:1098F0000000000000000000000000000000000068 -:109900000000000000000000000000000000000057 -:109910000000000000000000000000000000000047 -:109920000000000000000000000000000000000037 -:109930000000000000000000000000000000000027 -:109940000000000000000000000000000000000017 -:109950000000000000000000000000000000000007 -:1099600000000000000000000000000000000000F7 -:1099700000000000000000000000000000000000E7 -:1099800000000000000000000000000000000000D7 -:1099900000000000000000000000000000000000C7 -:1099A00000000000000000000000000000000000B7 -:1099B00000000000000000000000000000000000A7 -:1099C0000000000000000000000000000000000097 -:1099D0000000000000000000000000000000000087 -:1099E0000000000000000000000000000000000077 -:1099F0000000000000000000000000000000000067 -:109A00000000000000000000000000000000000056 -:109A10000000000000000000000000000000000046 -:109A20000000000000000000000000000000000036 -:109A30000000000000000000000000000000000026 -:109A40000000000000000000000000000000000016 -:109A50000000000000000000000000000000000006 -:109A600000000000000000000000000000000000F6 -:109A700000000000000000000000000000000000E6 -:109A800000000000000000000000000000000000D6 -:109A900000000000000000000000000000000000C6 -:109AA00000000000000000000000000000000000B6 -:109AB00000000000000000000000000000000000A6 -:109AC0000000000000000000000000000000000096 -:109AD0000000000000000000000000000000000086 -:109AE0000000000000000000000000000000000076 -:109AF0000000000000000000000000000000000066 -:109B00000000000000000000000000000000000055 -:109B10000000000000000000000000000000000045 +:1097300000002800000000000000000040000100C0 +:1097400014000000000000000800000100010000FB +:109750000020000004000000000000020C0C0020AB +:109760000002403040C03020050C0000038008207B +:109770000081600F400400080000600010880001B4 +:1097800081D01168001000000040000000000000BF +:109790003C00060000C00000000006800000002021 +:1097A0002000000000003000000010000000000059 +:1097B000000000000000018080002004000001047F +:1097C000000062001080200000008000F400110200 +:1097D0002002D00000A460300848020000100020E1 +:1097E00000030C0C000000040000200001F0100039 +:1097F0000080060000400000000002000000005051 +:109800000004000000100800028160000203290823 +:1098100000010030000000140CC000800C00000E9D +:1098200000E0C018000030002E0040010040003869 +:1098300020180040000000000000000180008000AF +:10984000100C010000000400000600008000100061 +:109850000000000000090800001000000014300C97 +:10986000038000001600080200000010000B000436 +:10987000400020488022204071E0060000000000E7 +:10988000000000000000000000000680000800004A +:1098900000000000000B400000000000A8000800CD +:1098A00040000000E800440010042680002C401016 +:1098B000010000E08200180A000005001C31480881 +:1098C00018010008C0010084081508000008601095 +:1098D000600C006E0000001DC0470C00000020045A +:1098E00008000D00101D024041C301C300C3000069 +:1098F00000400000010002000030000800000400E9 +:109900000420000600100000003C00800000000061 +:1099100000000700E10384000000BC002040C2A05A +:109920001000000000018000041000008000100CF6 +:109930000C200000C0000000000004000000000037 +:1099400000C00000018020001009800000000130EC +:109950009800000000130180006002000008180059 +:10996000020480003C0047C00000000C00000180A1 +:109970000040060005400200005000000000040006 +:10998000000C00C0020000000400000040000800BD +:10999000000004000000C000600018018000E060CA +:1099A00000031800000806024004900021508000C7 +:1099B0003203C000A00000000180020420500D000E +:1099C0000180202F80FFF00000C1018002006001B3 +:1099D000000C040201B80012BB000040000000208F +:1099E00000000506C00000400000822000000210B8 +:1099F0000000000000000400010160720E20E40E6F +:109A000041C01C8020390408CA1050209000570023 +:109A1000004E2A0020000403020004060002004059 +:109A200000004000C0010008030001008040020067 +:109A30004000010008004000A4007C1004230694AC +:109A40002068D0468D3468C146811A343468234674 +:109A50008234611A108D0804518A11A06844468D21 +:109A60000468C2342068D068A1068D0D145051A03E +:109A70000845046848D1A0211811A123468A346101 +:109A8000A3441A3411A34D1A30D1A0084211A343A4 +:109A9000423234682346068D0468D3468C346823EA +:109AA000468A3461A344D0840D1A0084205084D0A7 +:109AB0008D284201A1134684346823468A34608885 +:109AC00044E6FF24FFCE7F33CC78756F10AF8BE771 +:109AD00043F1085EC703DE8F72E003CCEB7F3F707B +:109AE000C1FEF3DBFCDBFD04FF42120001044CA0CD +:109AF0001017CC0010511064112C6F0A03E0416460 +:109B0000000000000000000000DEB00000000000C7 +:109B10000000400000000000000000000000000005 :109B20000000000000000000000000000000000035 :109B30000000000000000000000000000000000025 :109B40000000000000000000000000000000000015 :109B50000000000000000000000000000000000005 -:109B600000000000000000000000000000000000F5 +:109B600000020000000000000000000008000000EB :109B700000000000000000000000000000000000E5 :109B800000000000000000000000000000000000D5 :109B900000000000000000000000000000000000C5 -:109BA00000000000000000000000000000000000B5 -:109BB00000000000000000000000000000000000A5 +:109BA00000000000000000000002000000000000B3 +:109BB000000000000800000000000000000000009D :109BC0000000000000000000000000000000000095 :109BD0000000000000000000000000000000000085 :109BE0000000000000000000000000000000000075 @@ -228268,149 +228268,149 @@ :10B730000000000000000000000000000000000009 :10B7400000000000000000000000000000000000F9 :10B7500000000000000000000000000000000000E9 -:10B7600000000000000000000000000000000000D9 -:10B7700000000000000000000000000000000000C9 +:10B76000000000000000000000000020C0222002B5 +:10B7700000000004440111104444111100000000B5 :10B7800000000000000000000000000000000000B9 :10B7900000000000000000000000000000000000A9 :10B7A0000000000000000000000000000000000099 -:10B7B0000000000000000000000000000000000089 +:10B7B0000000008000020000000000000000000007 :10B7C0000000000000000000000000000000000079 :10B7D0000000000000000000000000000000000069 :10B7E0000000000000000000000000000000000059 -:10B7F0000000000000000000000000000000000049 -:10B800000000000000000000000000000000000038 -:10B810000000000000000000000000000000000028 -:10B820000000000000000000000000000000000018 -:10B830000000000000000000000000000000000008 -:10B8400000000000000000000000000000000000F8 -:10B8500000000000000000000000000000000000E8 -:10B8600000000000000000000000000000000000D8 -:10B8700000000000000000000000000000000000C8 -:10B8800000000000000000000000000000000000B8 -:10B8900000000000000000000000000000000000A8 -:10B8A0000000000000000000000000000000000098 -:10B8B0000000000000000000000000000000000088 -:10B8C0000000000000000000000000000000000078 -:10B8D0000000000000000000000000000000000068 -:10B8E0000000000000000000000000000000000058 -:10B8F0000000000000000000000000000000000048 -:10B900000000000000000000000000000000000037 -:10B910000000000000000000000000000000000027 -:10B920000000000000000000000000000000000017 -:10B930000000000000000000000000000000000007 -:10B9400000000000000000000000000000000000F7 -:10B9500000000000000000000000000000000000E7 -:10B9600000000000000000000000000000000000D7 -:10B9700000000000000000000000000000000000C7 -:10B9800000000000000000000000000000000000B7 -:10B9900000000000000000000000000000000000A7 -:10B9A0000000000000000000000000000000000097 -:10B9B0000000000000000000000000000000000087 -:10B9C0000000000000000000000000000000000077 -:10B9D0000000000000000000000000000000000067 -:10B9E0000000000000000000000000000000000057 -:10B9F0000000000000000000000000000000000047 -:10BA00000000000000000000000000000000000036 -:10BA10000000000000000000000000000000000026 -:10BA20000000000000000000000000000000000016 -:10BA30000000000000000000000000000000000006 -:10BA400000000000000000000000000000000000F6 -:10BA500000000000000000000000000000000000E6 -:10BA600000000000000000000000000000000000D6 -:10BA700000000000000000000000000000000000C6 -:10BA800000000000000000000000000000000000B6 -:10BA900000000000000000000000000000000000A6 -:10BAA0000000000000000000000000000000000096 -:10BAB0000000000000000000000000000000000086 -:10BAC0000000000000000000000000000000000076 -:10BAD0000000000000000000000000000000000066 -:10BAE0000000000000000000000000000000000056 -:10BAF0000000000000000000000000000000000046 -:10BB00000000000000000000000000000000000035 -:10BB10000000000000000000000000000000000025 -:10BB20000000000000000000000000000000000015 -:10BB30000000000000000000000000000000000005 -:10BB400000000000000000000000000000000000F5 -:10BB500000000000000000000000000000000000E5 -:10BB600000000000000000000000000000000000D5 -:10BB700000000000000000000000000000000000C5 -:10BB800000000000000000000000000000000000B5 -:10BB900000000000000000000000000000000000A5 -:10BBA0000000000000000000000000000000000095 -:10BBB0000000000000000000000000000000000085 -:10BBC0000000000000000000000000000000000075 -:10BBD0000000000000000000000000000000000065 -:10BBE0000000000000000000000000000000000055 -:10BBF0000000000000000000000000000000000045 -:10BC00000000000000000000000000000000000034 -:10BC10000000000000000000000000000000000024 -:10BC20000000000000000000000000000000000014 -:10BC30000000000000000000000000000000000004 -:10BC400000000000000000000000000000000000F4 -:10BC500000000000000000000000000000000000E4 -:10BC600000000000000000000000000000000000D4 -:10BC700000000000000000000000000000000000C4 -:10BC800000000000000000000000000000000000B4 -:10BC900000000000000000000000000000000000A4 -:10BCA0000000000000000000000000000000000094 -:10BCB0000000000000000000000000000000000084 -:10BCC0000000000000000000000000000000000074 -:10BCD0000000000000000000000000000000000064 -:10BCE0000000000000000000000000000000000054 -:10BCF0000000000000000000000000000000000044 -:10BD00000000000000000000000000000000000033 -:10BD10000000000000000000000000000000000023 -:10BD20000000000000000000000000000000000013 -:10BD30000000000000000000000000000000000003 -:10BD400000000000000000000000000000000000F3 -:10BD500000000000000000000000000000000000E3 -:10BD600000000000000000000000000000000000D3 -:10BD700000000000000000000000000000000000C3 -:10BD800000000000000000000000000000000000B3 -:10BD900000000000000000000000000000000000A3 -:10BDA0000000000000000000000000000000000093 -:10BDB0000000000000000000000000000000000083 -:10BDC0000000000000000000000000000000000073 -:10BDD0000000000000000000000000000000000063 -:10BDE0000000000000000000000000000000000053 -:10BDF0000000000000000000000000000000000043 -:10BE00000000000000000000000000000000000032 -:10BE10000000000000000000000000000000000022 -:10BE20000000000000000000000000000000000012 -:10BE30000000000000000000000000000000000002 -:10BE400000000000000000000000000000000000F2 -:10BE500000000000000000000000000000000000E2 -:10BE600000000000000000000000000000000000D2 -:10BE700000000000000000000000000000000000C2 -:10BE800000000000000000000000000000000000B2 -:10BE900000000000000000000000000000000000A2 -:10BEA0000000000000000000000000000000000092 -:10BEB0000000000000000000000000000000000082 -:10BEC0000000000000000000000000000000000072 -:10BED0000000000000000000000000000000000062 -:10BEE0000000000000000000000000000000000052 -:10BEF0000000000000000000000000000000000042 -:10BF00000000000000000000000000000000000031 -:10BF10000000000000000000000000000000000021 -:10BF20000000000000000000000000000000000011 -:10BF30000000000000000000000000000000000001 -:10BF400000000000000000000000000000000000F1 -:10BF500000000000000000000000000000000000E1 -:10BF600000000000000000000000000000000000D1 -:10BF700000000000000000000000000000000000C1 -:10BF800000000000000000000000000000000000B1 -:10BF900000000000000000000000000000000000A1 -:10BFA0000000000000000000000000000000000091 +:10B7F0000000000000000000000000004800010000 +:10B800000002200120880080EC20640638064811E0 +:10B8100081E0E0E078000608E7004F1C000400002B +:10B820000E00011D040FE720CC0E7471807C100601 +:10B8300000000020000000013800000000000000AF +:10B840000000000000000000008000100000000068 +:10B8500000200000001000000001000000000805AA +:10B86000000000083DA8340FC02370000000000055 +:10B87000000000009400040020214000500000005F +:10B8800040000000000002000000000001820020D3 +:10B890000001250000000800A1000009002002842A +:10B8A00000002400400000008010020450C000028C +:10B8B00044040000000000200000870018040ED897 +:10B8C0000004005000020000800108000000000099 +:10B8D000E4180000008A2000002288000000000018 +:10B8E00000006000000800000310E020F1000000EC +:10B8F000000000008000000006810001C0920112DB +:10B9000049080021025052800D45000040200400EB +:10B910004000008004004008008000810C0383C8C0 +:10B920000001F22004008580020486000002000865 +:10B9300080010801241210004002088011800002DA +:10B94000020020C280200008040000008200008164 +:10B9500014040EA010000097E6206A8268020D0011 +:10B96000A3A200080330A00800001000400200005D +:10B970000000000200000000008000845010100849 +:10B980000B01CB0401801C2000069181048000146F +:10B990007E0C02C0088830001600C4000201B80006 +:10B9A00024204000A0A00004034031000846F18D8F +:10B9B00020C06D05A0CC000000BC014100000000CB +:10B9C000000000000000000000020008000000006D +:10B9D0000000004C188000211BC0038000000008FC +:10B9E00008A00000100800C0660CD0422000848827 +:10B9F000004401000120020280101810000880009D +:10BA000071E40000091400C00001000002000104FC +:10BA100000000244000000504000000004682010B4 +:10BA20000180050000000000010404000000000087 +:10BA30000000000000C0400000101880005000030B +:10BA40003466080334020801C40042A12C000B5DD7 +:10BA500053504C41DC000007812165400101015138 +:10BA600085DC01A00046582010010260E05040D95A +:10BA700000800970210900200807048240D0544446 +:10BA800040000044404680418002090000080880D0 +:10BA90000070010008300001908104202810080186 +:10BAA00000100B805806090200004000003101051B +:10BAB000308020C2050012200081047400454C0132 +:10BAC000010828090500804004150400024420D91B +:10BAD00090C0010AB0010B102CAC2C000000060035 +:10BAE0000118040360100008026000000B08100039 +:10BAF000400000000002C138010300B210800000C5 +:10BB000000040000000200F8801C02C108000000D0 +:10BB10000104000000000000000000000801000314 +:10BB2000A3981CBD00040E00230210008002100226 +:10BB300000000000040000008100000C4000000034 +:10BB4000000C10434018460000000820C0100040C0 +:10BB50000000000480100094400000004108001024 +:10BB600000C80C00000000000020000000000000E1 +:10BB700032000801C0000000404200000403080138 +:10BB8000012400000800001400001000050020003F +:10BB90000014022800000000002200000C90180889 +:10BBA000020A00080004420E040000000000000029 +:10BBB0000028080000000040000000000000000015 +:10BBC00040000000156604C00C0001801401012033 +:10BBD0000080404050000001000100000081000092 +:10BBE000000000000400000000000002000000004F +:10BBF0000002C21050040020040C000002000820C3 +:10BC00000081200C40011008000000001088000195 +:10BC1000811011080010000C6A409232048051F823 +:10BC2000040B02A0104068408A36B28FB400003482 +:10BC300022000000011D4040380210142C00540066 +:10BC4000C090001402608800800820841000110554 +:10BC5000640062001008000500401040C41010008D +:10BC6000000010400080000000580000001000009C +:10BC7000000000000002EE24000100800D00002002 +:10BC80004400113E6006AA528080000000000000BF +:10BC90000000000000000000020008C000002000BA +:10BCA0000001008004022014000010802000000821 +:10BCB000008000000000000028004001000000207B +:10BCC000200001400244412020200B006000A10020 +:10BCD0001020010035600040E08000008818100846 +:10BCE000AA83A00025FF3E1805DD500008140005BA +:10BCF0002A000040100008020000001000080004A4 +:10BD00004000004801220000510000A44871301199 +:10BD10009C0000004400001100C0008000080200E8 +:10BD20009008080000084001200000402800090099 +:10BD30000001C0008800440090442080002440108E +:10BD400001000080800A080000000140100100008E +:10BD5000000010000000000000100000198000002A +:10BD600000084028000840110044000000002004A2 +:10BD700008000100101102C0410001000000000095 +:10BD800022400140002C00000C044000013820201B +:10BD9000D10034400001A8E00001030D0237800209 +:10BDA000A00004008102040090000C00037A0E0A37 +:10BDB0002008441C443C000425501270005C000024 +:10BDC00000000000D4014401000310310C308C311C +:10BDD00011010080100000001008048240000100E2 +:10BDE00080482400001000048000020000000000D1 +:10BDF00002000001000004000040000000200000DC +:10BE000001F150008015000206401002007047004A +:10BE100002000000028010001830063C40020802B8 +:10BE20000007C44540100A880280040000448000D6 +:10BE3000000000021A0008100000000001000000CD +:10BE40002000000080000000000000000E8000CCF8 +:10BE50000807C0306407F0170002C0404180000EA0 +:10BE600030400C06100000E800000000000141F026 +:10BE700000000400070000401C008200000FCD00FD +:10BE8000003C18000180020C0101004208208408D7 +:10BE900041001080202104080A31D0021801800CD2 +:10BEA000C04801912080C3042000C409900000060E +:10BEB000601819890060006404CC00008630001806 +:10BEC0001800242141000A008000101004240C8472 +:10BED00020C9904C9924C9824C91326464C8264C84 +:10BEE0008264C1321099080493021320C84C4C9903 +:10BEF00004C9826420C990C9210C99092490932413 +:10BF0000084904C849932021301321264C8264C378 +:10BF1000264C326413264932619324084213264684 +:10BF2000426264C8264C0C9904C9924C9864C92694 +:10BF30004C8264C3264C90841932408420908490B3 +:10BF40009908424321324C8464C9264C8264C088DB +:10BF50004C00D21D248590908400C10D1882409C15 +:10BF6000232588AA880045C84A104E1C0022020AD0 +:10BF7000405160A488CA2E092A41110003444C2074 +:10BF800010174C007000108200020006F08001843F +:10BF9000000000000FFF03FFFC18BF0000000000BE +:10BFA0000000400000000000000000000000000051 :10BFB0000000000000000000000000000000000081 :10BFC0000000000000000000000000000000000071 :10BFD0000000000000000000000000000000000061 :10BFE0000000000000000000000000000000000051 -:10BFF0000000000000000000000000000000000041 +:10BFF0000002000000000000000000000800000037 :10C000000000000000000000000000000000000030 :10C010000000000000000000000000000000000020 :10C020000000000000000000000000000000000010 -:10C030000000000000000000000000000000000000 -:10C0400000000000000000000000000000000000F0 +:10C0300000000000000000000002000000000000FE +:10C0400000000000080000000000000000000000E8 :10C0500000000000000000000000000000000000E0 :10C0600000000000000000000000000000000000D0 :10C0700000000000000000000000000000000000C0 @@ -230170,155 +230170,155 @@ :102E000000000000000000000000000000000000C2 :102E100000000000000000000000000000000000B2 :102E200000000000000000000000000000000000A2 -:102E30000000000000000000000000000000000092 -:102E40000000000000000000000000000000000082 +:102E30000000000000000000000000000000003062 +:102E40000020200300000015140545415150545442 :102E50000000000000000000000000000000000072 :102E60000000000000000000000000000000000062 :102E70000000000000000000000000000000000052 -:102E80000000000000000000000000000000000042 +:102E800000000000000008800002000000000000B8 :102E90000000000000000000000000000000000032 :102EA0000000000000000000000000000000000022 :102EB0000000000000000000000000000000000012 -:102EC0000000000000000000000000000000000002 -:102ED00000000000000000000000000000000000F2 -:102EE00000000000000000000000000000000000E2 -:102EF00000000000000000000000000000000000D2 -:102F000000000000000000000000000000000000C1 -:102F100000000000000000000000000000000000B1 -:102F200000000000000000000000000000000000A1 -:102F30000000000000000000000000000000000091 -:102F40000000000000000000000000000000000081 -:102F50000000000000000000000000000000000071 -:102F60000000000000000000000000000000000061 -:102F70000000000000000000000000000000000051 -:102F80000000000000000000000000000000000041 -:102F90000000000000000000000000000000000031 -:102FA0000000000000000000000000000000000021 -:102FB0000000000000000000000000000000000011 -:102FC0000000000000000000000000000000000001 -:102FD00000000000000000000000000000000000F1 -:102FE00000000000000000000000000000000000E1 -:102FF00000000000000000000000000000000000D1 -:1030000000000000000000000000000000000000C0 -:1030100000000000000000000000000000000000B0 -:1030200000000000000000000000000000000000A0 -:103030000000000000000000000000000000000090 -:103040000000000000000000000000000000000080 -:103050000000000000000000000000000000000070 -:103060000000000000000000000000000000000060 -:103070000000000000000000000000000000000050 -:103080000000000000000000000000000000000040 -:103090000000000000000000000000000000000030 -:1030A0000000000000000000000000000000000020 -:1030B0000000000000000000000000000000000010 -:1030C0000000000000000000000000000000000000 -:1030D00000000000000000000000000000000000F0 -:1030E00000000000000000000000000000000000E0 -:1030F00000000000000000000000000000000000D0 -:1031000000000000000000000000000000000000BF -:1031100000000000000000000000000000000000AF -:10312000000000000000000000000000000000009F -:10313000000000000000000000000000000000008F -:10314000000000000000000000000000000000007F -:10315000000000000000000000000000000000006F -:10316000000000000000000000000000000000005F -:10317000000000000000000000000000000000004F -:10318000000000000000000000000000000000003F -:10319000000000000000000000000000000000002F -:1031A000000000000000000000000000000000001F -:1031B000000000000000000000000000000000000F -:1031C00000000000000000000000000000000000FF -:1031D00000000000000000000000000000000000EF -:1031E00000000000000000000000000000000000DF -:1031F00000000000000000000000000000000000CF -:1032000000000000000000000000000000000000BE -:1032100000000000000000000000000000000000AE -:10322000000000000000000000000000000000009E -:10323000000000000000000000000000000000008E -:10324000000000000000000000000000000000007E -:10325000000000000000000000000000000000006E -:10326000000000000000000000000000000000005E -:10327000000000000000000000000000000000004E -:10328000000000000000000000000000000000003E -:10329000000000000000000000000000000000002E -:1032A000000000000000000000000000000000001E -:1032B000000000000000000000000000000000000E -:1032C00000000000000000000000000000000000FE -:1032D00000000000000000000000000000000000EE -:1032E00000000000000000000000000000000000DE -:1032F00000000000000000000000000000000000CE -:1033000000000000000000000000000000000000BD -:1033100000000000000000000000000000000000AD -:10332000000000000000000000000000000000009D -:10333000000000000000000000000000000000008D -:10334000000000000000000000000000000000007D -:10335000000000000000000000000000000000006D -:10336000000000000000000000000000000000005D -:10337000000000000000000000000000000000004D -:10338000000000000000000000000000000000003D -:10339000000000000000000000000000000000002D -:1033A000000000000000000000000000000000001D -:1033B000000000000000000000000000000000000D -:1033C00000000000000000000000000000000000FD -:1033D00000000000000000000000000000000000ED -:1033E00000000000000000000000000000000000DD -:1033F00000000000000000000000000000000000CD -:1034000000000000000000000000000000000000BC -:1034100000000000000000000000000000000000AC -:10342000000000000000000000000000000000009C -:10343000000000000000000000000000000000008C -:10344000000000000000000000000000000000007C -:10345000000000000000000000000000000000006C -:10346000000000000000000000000000000000005C -:10347000000000000000000000000000000000004C -:10348000000000000000000000000000000000003C -:10349000000000000000000000000000000000002C -:1034A000000000000000000000000000000000001C -:1034B000000000000000000000000000000000000C -:1034C00000000000000000000000000000000000FC -:1034D00000000000000000000000000000000000EC -:1034E00000000000000000000000000000000000DC -:1034F00000000000000000000000000000000000CC -:1035000000000000000000000000000000000000BB -:1035100000000000000000000000000000000000AB -:10352000000000000000000000000000000000009B -:10353000000000000000000000000000000000008B -:10354000000000000000000000000000000000007B -:10355000000000000000000000000000000000006B -:10356000000000000000000000000000000000005B -:10357000000000000000000000000000000000004B -:10358000000000000000000000000000000000003B -:10359000000000000000000000000000000000002B -:1035A000000000000000000000000000000000001B -:1035B000000000000000000000000000000000000B -:1035C00000000000000000000000000000000000FB -:1035D00000000000000000000000000000000000EB -:1035E00000000000000000000000000000000000DB -:1035F00000000000000000000000000000000000CB -:1036000000000000000000000000000000000000BA -:1036100000000000000000000000000000000000AA -:10362000000000000000000000000000000000009A -:10363000000000000000000000000000000000008A -:10364000000000000000000000000000000000007A -:10365000000000000000000000000000000000006A -:10366000000000000000000000000000000000005A -:10367000000000000000000000000000000000004A +:102EC000000000000000000000000000000000C042 +:102ED0008088005044860200028010A390000410F5 +:102EE000000088630001C081001450C01C00AA4487 +:102EF000088A139246A7223304142122000218C024 +:102F000000304000020008A890BAFC02CA05940CE8 +:102F10008913280418220230488C123044700012A1 +:102F2000040091C0D4BCA49A0B044C22007420610C +:102F300010232705308255C4888020C8445910507A +:102F4000880411086781285054140F7532B88264C0 +:102F5000B0284841000014048000815024112089C9 +:102F6000420440023CC11A04000790434010040888 +:102F70001E40028000002408390030402001E43463 +:102F8000700000024041924110111802090208022B +:102F90002880200204200A0100545880040108827D +:102FA0000080020000800432C00100088800400058 +:102FB00040445800858000040D10801200200086D7 +:102FC0004039C8002002F2448AAE2800080000867A +:102FD000E8003400000080013908568403450800E9 +:102FE000A0500800A00A01400A002014014000027D +:102FF000802C11041044410C80C00463E1149E0134 +:1030000012080CD010E0E040280001460D83CED419 +:1030100089012A09884240331005A829920A4022D2 +:10302000C05C10821802051010FC7010101B4D8936 +:10303000BB100A60EA51135940F500D0C00982184C +:10304000018C0220048889600002004240009061E7 +:10305000081C7A4002809090030E11A24258A3915E +:103060000451002966C40002414082210408080876 +:1030700022440C867038B800A8E259485B50209270 +:10308000CD2941AD2018A11F8E02404210802C2076 +:1030900000020000000000000000000000001040DE +:1030A0000840002600A3000450F2161124040890E2 +:1030B0004C5450102641803010C4A4072102044112 +:1030C00056405A84A10004080AB643AB5C489800F5 +:1030D000A4031E002A10CA0A04C802061291B444AE +:1030E0000200C188328211309481008C4330A18269 +:1030F0006800A63B200806428000481210004E21BE +:10310000E012600228092C40D2506CC00B19034217 +:103110008042C240007CD5000044D5920028B8927D +:1031200008208C22A019E0B82210800CC89286ECEE +:103130002894020D4A28826038C0B639D1894943A3 +:10314000E07017CA0C5B050B1008D807D72AA081BE +:103150000160EA2094D032104CA24034A071252C9A +:10316000A288C5930A14820C00264B2000644413E5 +:103170001708C7C91860D0001BF0000003CA323F0F +:10318000283D12010F0F5EF047144A05181186857D +:10319000B002089AE82031881FC10370011A3E0965 +:1031A000493C420C6093292E3A47280007048520A9 +:1031B000003C809143409049830C0FC40900D0002B +:1031C000A0592983482103851824B41685040922AF +:1031D000957440C328AB8210D027844CB41424804B +:1031E000FF106650001B082000800019142299353A +:1031F000800EA0406400C014100200F17040500026 +:10320000401029080602D0B0219A08C3010342A346 +:1032100000B4EC0471481823626061322C19411922 +:10322000420D0C14B3199AC52C1052102C6B26ADFC +:103230004C75A32C2426443509C4432170A0814831 +:1032400005C4801201080006882945412540D8247C +:1032500080C00C040A50C00714400A081001013055 +:1032600020C0D14F208CC791B15848D28218730D1D +:103270008481D31CE9A4045E44B9D04014A51A0B80 +:103280005840D19328B08103143380C1D38C14C12A +:103290007302A9000903B968448202814D1410C168 +:1032A000B838DB39FC408400099434A81E5404DD8E +:1032B000A029005EA30EEEC021620088041901015E +:1032C00008A9208850004800080200024888080029 +:1032D000202B082020C824280021080EFC500000C4 +:1032E00004B219840603800D3405C613180A1001B0 +:1032F0001868859300000A51A31C04820118A202D9 +:10330000B250111802C80180048082242C00000EE3 +:1033100000050630A01806B023404900A00D0000AB +:1033200040198848E74202880304020600682160C9 +:1033300080180229920904718410000026030A10E3 +:1033400040800080003441011100CCB8B235006CDF +:103350008A2EC3D4A47E18010986D842B16C0140DC +:1033600010000A0883500C673902434040320000C5 +:10337000291010A30283028C80C501112809206343 +:10338000282476B4044380002027C0901000010553 +:103390009090C2200901004C4004D0A04C20A330E2 +:1033A00030821C0182F081B30088C2010000D0ACE1 +:1033B000200D1B8020400C30080B206200600000B4 +:1033C000085A431C280412A01C60154001E8811F04 +:1033D000A20614495919A100E4900C78000E10853A +:1033E000039A722E2819B00430000003C02058A19F +:1033F000204A480720008480000830C0C71000041D +:103400002C002400087703154C812600C504080110 +:103410000100300100080000A1E540847D08B001F2 +:1034200000004020004C0502080C700A8022D604DF +:1034300007821481072080600104424000002002BE +:10344000200200800B0040404A1008018408200838 +:1034500038083100910D3A01C39C89C400008C47A3 +:1034600043F9FC520C0BE2088001ADE8125201E96D +:103470004A7A7247BCD88008400108005A00D0023E +:103480003830004481D7F859E621010E61421DEC25 +:10349000628303E888D8F2001414E618120FF803C8 +:1034A000CC5896FF1C8803072100802604041E4F79 +:1034B0002082608441E432080608701E48405504AA +:1034C0004042D0020048602400928011E1688008E8 +:1034D00081143308E2F04C0070222840C501129894 +:1034E000685F3B18BF026023A07080510E540D77B7 +:1034F000C2FB14B92233D207C27105FC08030106CE +:103500000566004014925012EC040151260001801F +:103510000E80011280008888412100008020808078 +:10352000118102000002401000000000800E000126 +:103530004C20000006200180004500A00000880803 +:1035400003024A4008080014802A0003A04E6401C8 +:10355000B10019C010C08614182440824200100027 +:103560008008010010010020400011020A07000835 +:10357000404300088000000080C00000014B40086C +:1035800002940000000020000000A5A004000E002E +:10359000000050000075102883CC9FA00910008205 +:1035A0000002040000408004082040820400102033 +:1035B00020400204002040100008000081000100AB +:1035C00040040408004080200040804100040808B6 +:1035D00020808100000800400081000010010002EE +:1035E0000400204102041020010208102081000084 +:1035F000000102020020204002040408004082046E +:10360000082040020400204102048000081000004D +:103610000080008008000001001204002040020425 +:1036200000204088049A672F92CEA071CCB0D4E6D7 +:1036300010A1884D4143081B0804028221801F4CC1 +:103640000A40082281E4025EE0CC97015500C0C028 +:1036500000000D40000ECC0030000000501115415C +:103660003D401EBC0F203FFC0000F0000010200079 +:103670000040000000007800000000000000000092 :10368000000000000000000000000000000000003A :10369000000000000000000000000000000000002A :1036A000000000000000000000000000000000001A :1036B000000000000000000000000000000000000A -:1036C00000000000000000000000000000000000FA -:1036D00000000000000000000000000000000000EA +:1036C00000000000000200000000000000000010E8 +:1036D0000280000000000000000000000000000068 :1036E00000000000000000000000000000000000DA :1036F00000000000000000000000000000000000CA -:1037000000000000000000000000000000000000B9 -:1037100000000000000000000000000000000000A9 +:1037000000000000000000000000000000020000B7 +:103710000000000000000010028000000000000017 :103720000000000000000000000000000000000099 :103730000000000000000000000000000000000089 :103740000000000000000000000000000000000079 :103750000000000000000000000000000000000069 -:103760000000000000000000000000000000000059 -:103770000000000000000000000000000000000049 +:103760000000001000002001000000155005544129 +:10377000551055440000000000000000000000004B :103780000000000000000000000000000000000039 :103790000000000000000000000000000000000029 :1037A0000000000000000000000000000000000019 @@ -230326,437 +230326,437 @@ :1037C00000000000000000000000000000000000F9 :1037D00000000000000000000000000000000000E9 :1037E00000000000000000000000000000000000D9 -:1037F00000000000000000000000000000000000C9 -:1038000000000000000000000000000000000000B8 -:1038100000000000000000000000000000000000A8 -:103820000000000000000000000000000000000098 -:103830000000000000000000000000000000000088 -:103840000000000000000000000000000000000078 -:103850000000000000000000000000000000000068 -:103860000000000000000000000000000000000058 -:103870000000000000000000000000000000000048 -:103880000000000000000000000000000000000038 -:103890000000000000000000000000000000000028 -:1038A0000000000000000000000000000000000018 -:1038B0000000000000000000000000000000000008 -:1038C00000000000000000000000000000000000F8 -:1038D00000000000000000000000000000000000E8 -:1038E00000000000000000000000000000000000D8 -:1038F00000000000000000000000000000000000C8 -:1039000000000000000000000000000000000000B7 -:1039100000000000000000000000000000000000A7 -:103920000000000000000000000000000000000097 -:103930000000000000000000000000000000000087 -:103940000000000000000000000000000000000077 -:103950000000000000000000000000000000000067 -:103960000000000000000000000000000000000057 -:103970000000000000000000000000000000000047 -:103980000000000000000000000000000000000037 -:103990000000000000000000000000000000000027 -:1039A0000000000000000000000000000000000017 -:1039B0000000000000000000000000000000000007 -:1039C00000000000000000000000000000000000F7 -:1039D00000000000000000000000000000000000E7 -:1039E00000000000000000000000000000000000D7 -:1039F00000000000000000000000000000000000C7 -:103A000000000000000000000000000000000000B6 -:103A100000000000000000000000000000000000A6 -:103A20000000000000000000000000000000000096 -:103A30000000000000000000000000000000000086 -:103A40000000000000000000000000000000000076 -:103A50000000000000000000000000000000000066 -:103A60000000000000000000000000000000000056 -:103A70000000000000000000000000000000000046 -:103A80000000000000000000000000000000000036 -:103A90000000000000000000000000000000000026 -:103AA0000000000000000000000000000000000016 -:103AB0000000000000000000000000000000000006 -:103AC00000000000000000000000000000000000F6 -:103AD00000000000000000000000000000000000E6 -:103AE00000000000000000000000000000000000D6 -:103AF00000000000000000000000000000000000C6 -:103B000000000000000000000000000000000000B5 -:103B100000000000000000000000000000000000A5 -:103B20000000000000000000000000000000000095 -:103B30000000000000000000000000000000000085 -:103B40000000000000000000000000000000000075 -:103B50000000000000000000000000000000000065 -:103B60000000000000000000000000000000000055 -:103B70000000000000000000000000000000000045 -:103B80000000000000000000000000000000000035 -:103B90000000000000000000000000000000000025 -:103BA0000000000000000000000000000000000015 -:103BB0000000000000000000000000000000000005 -:103BC00000000000000000000000000000000000F5 -:103BD00000000000000000000000000000000000E5 -:103BE00000000000000000000000000000000000D5 -:103BF00000000000000000000000000000000000C5 -:103C000000000000000000000000000000000000B4 -:103C100000000000000000000000000000000000A4 -:103C20000000000000000000000000000000000094 -:103C30000000000000000000000000000000000084 -:103C40000000000000000000000000000000000074 -:103C50000000000000000000000000000000000064 -:103C60000000000000000000000000000000000054 -:103C70000000000000000000000000000000000044 -:103C80000000000000000000000000000000000034 -:103C90000000000000000000000000000000000024 -:103CA0000000000000000000000000000000000014 -:103CB0000000000000000000000000000000000004 -:103CC00000000000000000000000000000000000F4 -:103CD00000000000000000000000000000000000E4 -:103CE00000000000000000000000000000000000D4 -:103CF00000000000000000000000000000000000C4 -:103D000000000000000000000000000000000000B3 -:103D100000000000000000000000000000000000A3 -:103D20000000000000000000000000000000000093 -:103D30000000000000000000000000000000000083 -:103D40000000000000000000000000000000000073 -:103D50000000000000000000000000000000000063 -:103D60000000000000000000000000000000000053 -:103D70000000000000000000000000000000000043 -:103D80000000000000000000000000000000000033 -:103D90000000000000000000000000000000000023 -:103DA0000000000000000000000000000000000013 -:103DB0000000000000000000000000000000000003 -:103DC00000000000000000000000000000000000F3 -:103DD00000000000000000000000000000000000E3 -:103DE00000000000000000000000000000000000D3 -:103DF00000000000000000000000000000000000C3 -:103E000000000000000000000000000000000000B2 -:103E100000000000000000000000000000000000A2 -:103E20000000000000000000000000000000000092 -:103E30000000000000000000000000000000000082 -:103E40000000000000000000000000000000000072 -:103E50000000000000000000000000000000000062 -:103E60000000000000000000000000000000000052 -:103E70000000000000000000000000000000000042 -:103E80000000000000000000000000000000000032 -:103E90000000000000000000000000000000000022 -:103EA0000000000000000000000000000000000012 -:103EB0000000000000000000000000000000000002 -:103EC00000000000000000000000000000000000F2 -:103ED00000000000000000000000000000000000E2 -:103EE00000000000000000000000000000000000D2 -:103EF00000000000000000000000000000000000C2 -:103F000000000000000000000000000000000000B1 -:103F100000000000000000000000000000000000A1 -:103F20000000000000000000000000000000000091 -:103F30000000000000000000000000000000000081 -:103F40000000000000000000000000000000000071 -:103F50000000000000000000000000000000000061 -:103F60000000000000000000000000000000000051 -:103F70000000000000000000000000000000000041 -:103F80000000000000000000000000000000000031 -:103F90000000000000000000000000000000000021 +:1037F000000029D280A2A1F064411420008002239D +:1038000090008C4000000C6300004082000050C813 +:103810000C40D2442887139244A32230040431027E +:10382000000318C000104000220008A090989C04DB +:10383000C8040800891010042202082040881020C3 +:1038400048080319000911109020241A084D4C2231 +:10385000804094E1142284867082548000102850A5 +:1038600004100050886411084581B4501814465063 +:1038700005908264A000180300000480000000206E +:1038800004102080460400043C921A080007B0830C +:10389000402006901FC00680C000004B190618008B +:1038A0002021EC04500C0000002F90410010180261 +:1038B000510010004000204B0420C20C1100048075 +:1038C000100008801080020000800824000103100E +:1038D0000000400C044860C00304000006000039EA +:1038E00011800082000108002102D24026CD05048B +:1038F000880010844400340000008880082812A545 +:10390000064D0811A1102802A01A0440220280507E +:103910000400000800082000208001290044A6516E +:103920000800808002080414021540310400118A46 +:1039300008428020895103008A4A50B21025441D54 +:1039400005002012005408821804090050201400B9 +:103950001010340B86C0046441530C410833000A34 +:103960000029801800CC0522CC0075A70100849E98 +:10397000000080A308180A40408091B007041DA1F0 +:10398000C34CA0B0C0C30C002C4A02006D480618FE +:103990000100004220520C005230B4049282B98CD3 +:1039A00095090990056B01BD80C2691D8B404200DD +:1039B0004098220400000000000000000000000009 +:1039C00000000800080102E20120001808C03002CF +:1039D00004044C10404C60020600009000C080229D +:1039E000000220094600080430700440CA34232B2A +:1039F000244018042200501002180C0A00C00012C3 +:103A000011D93048100AC900030202303004000CFA +:103A1000010000001010221300412461808412F084 +:103A2000008009104003200510010C8040100C801C +:103A30000B81004805060200084C890009008982B4 +:103A4000130C30120024040081010408010C21042D +:103A5000063204006C941087480880A278013B1459 +:103A60008489C941501002CC0C180007029018013B +:103A7000131B400140723004084020024400001033 +:103A800000B0200C0000890000140004128603001E +:103A9000000040030708C0C8002204C00638100018 +:103AA00000E6301B00202411890242004020400122 +:103AB00010190292324808130402618003010200C7 +:103AC00023003B0880D4A01208000C138F04A840E8 +:103AD00078F880C1011D006161000009A11800048F +:103AE0004800D100303C39D2480841000825DC1B91 +:103AF00089484963B564D49128298C194127441C0D +:103B0000712125817B9038481089211000001059BF +:103B10000422D83D020A20007C004134011180A01B +:103B20006008700A86203100500040000080028248 +:103B3000400342C10000860032008003402C413225 +:103B400002980089026D0880D2120080008203C0B2 +:103B5000400230CB80603202042244124145009280 +:103B60001480900005840452400010201A000C01BB +:103B70001100E804D12D06400440D02504080002BD +:103B8000000141800084414C2080039081540090CA +:103B9000000042041180A00021C4264683EA10429E +:103BA0006088820130021CB0210004222112CC4026 +:103BB00040000489492026012A0128500090228CC7 +:103BC000412C1050A80048075C04A000A100042864 +:103BD00009000409014A40D00208404001720088EF +:103BE0004411151000013099444040000900400084 +:103BF0000080001000210430200250080021588865 +:103C00008230000014A208800C0201082000D42396 +:103C1000044008010004A0B900080A01800204E879 +:103C2000003C300EF600301806890188088201C376 +:103C30002C22953046816220E04080C03268CD045D +:103C4000A33D0088F400A80D0380400806843302D9 +:103C500080220160040A07093300103020000103AC +:103C60002F0006C0000020A4002000001800459886 +:103C700040600077400C03DE9C1088010481400006 +:103C80006C40202008420A023179A8592922D10724 +:103C900021000E00602002108241400460450100B6 +:103CA000420A40010040141030010001202C041988 +:103CB00000020901580000000180100080046130FA +:103CC000940123082080AC000110024401840220EA +:103CD000A0C048082C259200388100B8292404008F +:103CE000012211100C008318280808821010B02639 +:103CF00004400811028840010222010008002184CA +:103D00003021204B008A7206042CE00410000000D1 +:103D10009020000A14484806A0008000000400001B +:103D200043800004200028000001019888810008D9 +:103D30004204080022005001011108000104000C97 +:103D40002000C40201002A48405935460C182120A1 +:103D50002020C608418111000650C100000C42A17C +:103D60000050000221130085000360F04A11140086 +:103D70004A00220030003A1480053E00A78088B037 +:103D8000008E8C42139B6CD2150E40CC0020D0903C +:103D9000902620C200DC80874000001005001440FF +:103DA0000330941409510024029B5850BA22014454 +:103DB00002525A70012200E040C0B11004C4441500 +:103DC0008180C403F294A50C1500820810018022A2 +:103DD000040200804440004462880400020C120087 +:103DE0008801140010008100900060C50080001060 +:103DF000000880108100000C8060A040B202082002 +:103E0000C40090B458215B1CFF0370338150847947 +:103E10001E070D40E3F304392233D0414281068866 +:103E2000810200140900000898C8121B6C00910060 +:103E300018500614060000040064200200003082BE +:103E4000C3208840020202000000809000000002AF +:103E5000810C40000C8000020E1000800345C080E1 +:103E60001611010103004AC8001E0818000D0010B9 +:103E7000800400011108598013004A920490828442 +:103E800040A004200000400400800800141011022B +:103E90000A87000810530011850000A1008000006F +:103EA00001D3000003A1A800000020000000E98069 +:103EB000000010D40000700000500000918C9CE0C5 +:103EC00003100082000006000060C0060C3060C3D2 +:103ED000060018303060030600306018000C000047 +:103EE000C18801806004060C0060C0300060C061C1 +:103EF00080060C0C30C0C180000C006000C1800046 +:103F000018018003060830618304183001830C18FF +:103F100030C1800000018303003030600306060CCE +:103F20000060C3060C306003060830618304C000E3 +:103F30000C18000000C000C00C2000018013060017 +:103F400030600306083060CC0425AA0820842C12B7 +:103F5000805895DA0008022943B0008EC020300353 +:103F60009380E200361C11620204028D04500B049F +:103F70004C43C3C000000010000E4C0000000001C4 +:103F8000403004049870020CF0303FFFC000F00095 +:103F90000010800000000000000000000000000091 :103FA0000000000000000000000000000000000011 :103FB0000000000000000000000000000000000001 :103FC00000000000000000000000000000000000F1 :103FD00000000000000000000000000000000000E1 -:103FE00000000000000000000000000000000000D1 -:103FF00000000000000000000000000000000000C1 +:103FE000000000000000000000820000000100004E +:103FF000000000000380000000000000000000003E :1040000000000000000000000000000000000000B0 :1040100000000000000000000000000000000000A0 :104020000000000000000000000000000000000090 -:104030000000000000000000000000000000000080 +:10403000008200000001000000000000038000007A :104040000000000000000000000000000000000070 :104050000000000000000000000000000000000060 :104060000000000000000000000000000000000050 :104070000000000000000000000000000000000040 -:104080000000000000000000000000000000000030 -:104090000000000000000000000000000000000020 +:1040800000000000000000000004400200000010DA +:1040900000040041445451150000000000000000DD :1040A0000000000000000000000000000000000010 :1040B0000000000000000000000000000000000000 -:1040C00000000000000000000000000000000000F0 -:1040D00000000000000000000000000000000000E0 +:1040C00000000000000000000000000000000900E7 +:1040D00000040000000000000000000000000000DC :1040E00000000000000000000000000000000000D0 :1040F00000000000000000000000000000000000C0 :1041000000000000000000000000000000000000AF -:10411000000000000000000000000000000000009F -:10412000000000000000000000000000000000008F -:10413000000000000000000000000000000000007F -:10414000000000000000000000000000000000006F -:10415000000000000000000000000000000000005F -:10416000000000000000000000000000000000004F -:10417000000000000000000000000000000000003F -:10418000000000000000000000000000000000002F -:10419000000000000000000000000000000000001F -:1041A000000000000000000000000000000000000F -:1041B00000000000000000000000000000000000FF -:1041C00000000000000000000000000000000000EF -:1041D00000000000000000000000000000000000DF -:1041E00000000000000000000000000000000000CF -:1041F00000000000000000000000000000000000BF -:1042000000000000000000000000000000000000AE -:10421000000000000000000000000000000000009E -:10422000000000000000000000000000000000008E -:10423000000000000000000000000000000000007E -:10424000000000000000000000000000000000006E -:10425000000000000000000000000000000000005E -:10426000000000000000000000000000000000004E -:10427000000000000000000000000000000000003E -:10428000000000000000000000000000000000002E -:10429000000000000000000000000000000000001E -:1042A000000000000000000000000000000000000E -:1042B00000000000000000000000000000000000FE -:1042C00000000000000000000000000000000000EE -:1042D00000000000000000000000000000000000DE -:1042E00000000000000000000000000000000000CE -:1042F00000000000000000000000000000000000BE -:1043000000000000000000000000000000000000AD -:10431000000000000000000000000000000000009D -:10432000000000000000000000000000000000008D -:10433000000000000000000000000000000000007D -:10434000000000000000000000000000000000006D -:10435000000000000000000000000000000000005D -:10436000000000000000000000000000000000004D -:10437000000000000000000000000000000000003D -:10438000000000000000000000000000000000002D -:10439000000000000000000000000000000000001D -:1043A000000000000000000000000000000000000D -:1043B00000000000000000000000000000000000FD -:1043C00000000000000000000000000000000000ED -:1043D00000000000000000000000000000000000DD -:1043E00000000000000000000000000000000000CD -:1043F00000000000000000000000000000000000BD -:1044000000000000000000000000000000000000AC -:10441000000000000000000000000000000000009C -:10442000000000000000000000000000000000008C -:10443000000000000000000000000000000000007C -:10444000000000000000000000000000000000006C -:10445000000000000000000000000000000000005C -:10446000000000000000000000000000000000004C -:10447000000000000000000000000000000000003C -:10448000000000000000000000000000000000002C -:10449000000000000000000000000000000000001C -:1044A000000000000000000000000000000000000C -:1044B00000000000000000000000000000000000FC -:1044C00000000000000000000000000000000000EC -:1044D00000000000000000000000000000000000DC -:1044E00000000000000000000000000000000000CC -:1044F00000000000000000000000000000000000BC -:1045000000000000000000000000000000000000AB -:10451000000000000000000000000000000000009B -:10452000000000000000000000000000000000008B -:10453000000000000000000000000000000000007B -:10454000000000000000000000000000000000006B -:10455000000000000000000000000000000000005B -:10456000000000000000000000000000000000004B -:10457000000000000000000000000000000000003B -:10458000000000000000000000000000000000002B -:10459000000000000000000000000000000000001B -:1045A000000000000000000000000000000000000B -:1045B00000000000000000000000000000000000FB -:1045C00000000000000000000000000000000000EB -:1045D00000000000000000000000000000000000DB -:1045E00000000000000000000000000000000000CB -:1045F00000000000000000000000000000000000BB -:1046000000000000000000000000000000000000AA -:10461000000000000000000000000000000000009A -:10462000000000000000000000000000000000008A -:10463000000000000000000000000000000000007A -:10464000000000000000000000000000000000006A -:10465000000000000000000000000000000000005A -:10466000000000000000000000000000000000004A -:10467000000000000000000000000000000000003A -:10468000000000000000000000000000000000002A -:10469000000000000000000000000000000000001A -:1046A000000000000000000000000000000000000A -:1046B00000000000000000000000000000000000FA -:1046C00000000000000000000000000000000000EA -:1046D00000000000000000000000000000000000DA -:1046E00000000000000000000000000000000000CA -:1046F00000000000000000000000000000000000BA -:1047000000000000000000000000000000000000A9 -:104710000000000000000000000000000000000099 -:104720000000000000000000000000000000000089 -:104730000000000000000000000000000000000079 -:104740000000000000000000000000000000000069 -:104750000000000000000000000000000000000059 -:104760000000000000000000000000000000000049 -:104770000000000000000000000000000000000039 -:104780000000000000000000000000000000000029 -:104790000000000000000000000000000000000019 -:1047A0000000000000000000000000000000000009 -:1047B00000000000000000000000000000000000F9 -:1047C00000000000000000000000000000000000E9 -:1047D00000000000000000000000000000000000D9 -:1047E00000000000000000000000000000000000C9 -:1047F00000000000000000000000000000000000B9 -:1048000000000000000000000000000000000000A8 -:104810000000000000000000000000000000000098 -:104820000000000000000000000000000000000088 -:104830000000000000000000000000000000000078 -:104840000000000000000000000000000000000068 -:104850000000000000000000000000000000000058 -:104860000000000000000000000000000000000048 -:104870000000000000000000000000000000000038 -:104880000000000000000000000000000000000028 -:104890000000000000000000000000000000000018 -:1048A0000000000000000000000000000000000008 -:1048B00000000000000000000000000000000000F8 +:104110000000000000002B66022BA14300020030CB +:10412000488037805948A81400040020800040428D +:104130000010140292012408280000C4842182087F +:1041400020040000AA0008214010040520A008A0B7 +:10415000203A7C2DD2090B0204221630B3202C4CBD +:104160004013104C6027182460C1281288D0440ADC +:10417000056C4D0480168CE824009446F412D63861 +:10418000309118C201252080480E2808818804A398 +:104190009A88E0BA1DDF0BE6200AF8410000008093 +:1041A000120102440493249A48C00054A8E00A096A +:1041B0000005429142A405001508028A90080404F3 +:1041C000591482409101508050A90080411990EB10 +:1041D000FCBFD13013801042440016580404898873 +:1041E000828008CA84110202420044103B622910F6 +:1041F00000A08252402822392041400084A08848F3 +:104200000803C060920400F0E718094BBC42303844 +:1042100096080A0300C0500360003002000200014B +:104220001100800801840040A000800881021180F4 +:104230008810811011021220013022CA20818B398E +:104240000007BBF2AA0CC4C8075FC80530A5180058 +:104250009E1A004022000B44814022000248E05098 +:10426000002044080A004420C0089020010A0700EA +:10427000C1416C07912078069021955483132C122C +:104280008874C112444FA53B31C98E300DB80A085D +:10429000152800217215A471020A2645B4729414DF +:1042A00054DD108E42861094B87B4B0BD680FEB145 +:1042B0005ED8328728D3CDA0F069A0E0823744C30E +:1042C000C6801C08158405C00A918094DCC80C3A8D +:1042D000A080AE10142C2E200072CFF082C00C28CB +:1042E000103C0042A533DA94328822C3890F211A88 +:1042F0000CD42029948601530044025A20088208D5 +:10430000A25F00002820444930015000930124009E +:104310008E24002204442804208210120A804008BF +:10432000140100011013E0004B0053C110110700ED +:10433000C0102CFA860180088C243828044A0EA369 +:10434000D088126E0C0749021142081382323801DC +:104350008012B000B2BA23D50C20800890411C080E +:1043600012411C0043C03E2130204064C05068AF61 +:1043700044240940C6138464002006AC0F6AA01BC5 +:10438000507A0028D94940839020874205C00028F0 +:104390005305B0494E0001003000080C0D5800A034 +:1043A000400210901497C03802081E10198409109A +:1043B000268C08040140A054712D1C42D032AC243C +:1043C000E883233882114148A82072041D43DF414D +:1043D0008E4480430123C5A5A0501096FC35634947 +:1043E000E20300C08A39030B02344068D046450D11 +:1043F00051482A415200807B155BC03D6380B05814 +:10440000BB0C14067E02D824210F39870A6401945C +:104410008C28943A90000B81AD6875C909BF8099CA +:10442000602F509E68002CC0FF410044644B15096A +:104430000719411A242C1B0144CAB00298008810A5 +:1044400021C000A1600150580032B404A0320080A5 +:1044500008DC08D00014101F58DD113E5D432A739C +:1044600041486D000012080120F448CAD918CBC495 +:1044700070933F5C857F32F0446032503CAA8404E4 +:1044800002CAF88381706B0B14AC48271110F42812 +:104490003615900E4AB1EB1CE680040CC10502D122 +:1044A0000041750A028E5DC3B58C61B600334D8242 +:1044B00042CBB8731B0301C49FC3BA982DF70CCC31 +:1044C00082FC214580F6DE158A4C15A081002AB0B9 +:1044D000060589BC40DEE067253AF84E21F3A80CBA +:1044E0002DB132CE0301011EA0E200057488F383D2 +:1044F000CB60C4DB2D114CBD02C4B05A8A0AC0483F +:10450000630032B0D7002D6085A420BE1C8418053E +:1045100008401C4258C83C9F10900FAE11A018E9EB +:104520001336280392B23110C0AD39D20F4C51A4CA +:104530008C042524858367E107E40F5213FAC2AE89 +:10454000D201B851FE0E830650200F44400818BB1C +:10455000C08312C480150000824888A258444210CB +:1045600010044DD800421062292240CC12A0D0681D +:10457000C2B4333700ECB0A010DCC312730B50E1AF +:104580006534AB520A818A2C629CCCB4910D0684AE +:104590008692EF6862812A888E5E43DE98A0BA39DF +:1045A0001C07801102800A0A00300C5001544000A0 +:1045B0000F14C9000480383042010908CA4800922B +:1045C000100A982DD44899F04E04F3E70D76C6AC46 +:1045D0000105140A4B2EAA490A21A0E8146A080909 +:1045E0008A04C2B04C809301B300E8C2414C084039 +:1045F000088088C1A006401860080040208009306B +:1046000020BB384201C0001D0431F704298A8021F3 +:10461000B600420B04C20294530BC0727120618138 +:104620006C206BA4B8F12AC54041F1110CE31626A9 +:10463000EDCCB261A31002002B1004F81134DC6140 +:10464000960D0203A8B0738CA7031FEF810092455B +:1046500068A51F20E04C13004884CA990895493387 +:10466000C30548AF3825DC076E701CAC9A9F0585E2 +:10467000C001422020C5CE24838D008166701D5666 +:10468000307CC26441D32C0AC9165ACE104005486A +:1046900020441C168ECB22CB38CB3B02A2013260C9 +:1046A0000180C040001C8CA1239E0C510C20498E1F +:1046B0000622C400009820C2098002010008BF073A +:1046C000F14FC6028508414815838401209738536D +:1046D000BA01CE0502605C400EA2076F8E85601B9A +:1046E000243141084888CE0260F8BE8C14E2853A35 +:1046F00083E388836133A080542036707A8A054230 +:10470000C16F13A0A07ADA3847CB1E701DB0E1E963 +:104710001602056201673CEF3E04EDC003E1879C91 +:10472000B5470F58C43D40B20081DB103EC4404342 +:10473000A140C00106B20C4040F0E4748037D1477C +:1047400079714F082C6C0806810020AA04155A00C4 +:10475000C00882037950DE542E5A8D6482C56C6A7B +:10476000261D9C02C18002C4041200AA040101207B +:1047700054000000CA04806105200180020002810B +:1047800040800002A908A2020002020865F113C3DA +:10479000400052207814052293002D830A400049DE +:1047A000300604896208481C2302380380704708D9 +:1047B000C10E2204402080001004942280800A014F +:1047C000008CAAA111200005524040255214B54486 +:1047D0000250901402AA242005294014B4BAE21F02 +:1047E000380CC5736F5C25AF0A700778636AC4170D +:1047F0006E337ACF07E01DB4B9761B37063D631FD1 +:10480000A0ECDC2EE1CEA9836A6497EC0A72C43571 +:104810006262D477A3262E4EFCF2C19894CC267205 +:10482000C6CDA2131899881BB68EBD71BB34D8B9FA +:10483000159B4FDEB0C5F8D4C205DBCB5431B77041 +:10484000635637AC4976F3362CB57E1B760CB561D2 +:10485000FBF4FD4C0E5D89C403E184FD4E3A23094F +:10486000AA93F624BD7E3BF78EB57088E48D242391 +:104870005A8EA43100541592060D03414172600115 +:10488000C4101642A280CB040E6415478200424930 +:10489000142D84075C40000001000D1000090FFE7C +:1048A000300000104011110B410019F00000000011 +:1048B0000FFF03FFFC420F0000000060000030000B :1048C00000000000000000000000000000000000E8 :1048D00000000000000000000000000000000000D8 -:1048E00000000000000000000000000000000000C8 -:1048F00000000000000000000000000000000000B8 -:1049000000000000000000000000000000000000A7 -:104910000000000000000000000000000000000097 +:1048E000000000000000000000CC0033330CCCC3FB +:1048F0003330CCCC33330CCCC33330CCCC33330C4F +:10490000CCC33330CCCC33330CCCC3333002CC00EB +:104910000000000000000000004000000000000057 :104920000000000000000000000000000000000087 -:104930000000000000000000000000000000000077 -:104940000000000000000000000000000000000067 -:104950000000000000000000000000000000000057 -:104960000000000000000000000000000000000047 +:1049300000000000000000000000000000000CCC9F +:10494000C33330CCCC33330CCCC33330CCCC333347 +:104950000CCCC3333002CC0000000000000000008B +:104960000040000000000000000000000000000007 :104970000000000000000000000000000000000037 :104980000000000000000000000000000000000027 :104990000000000000000000000000000000000017 -:1049A0000000000000000000000000000000000007 -:1049B00000000000000000000000000000000000F7 +:1049A0000000000000000000000000008040400007 +:1049B0000000001010051511010051510000000009 :1049C00000000000000000000000000000000000E7 :1049D00000000000000000000000000000000000D7 :1049E00000000000000000000000000000000000C7 -:1049F00000000000000000000000000000000000B7 +:1049F00000000800000400000000000000000000AB :104A000000000000000000000000000000000000A6 :104A10000000000000000000000000000000000096 :104A20000000000000000000000000000000000086 -:104A30000000000000000000000000000000000076 -:104A40000000000000000000000000000000000066 -:104A50000000000000000000000000000000000056 -:104A60000000000000000000000000000000000046 -:104A70000000000000000000000000000000000036 -:104A80000000000000000000000000000000000026 -:104A90000000000000000000000000000000000016 -:104AA0000000000000000000000000000000000006 -:104AB00000000000000000000000000000000000F6 -:104AC00000000000000000000000000000000000E6 -:104AD00000000000000000000000000000000000D6 -:104AE00000000000000000000000000000000000C6 -:104AF00000000000000000000000000000000000B6 -:104B000000000000000000000000000000000000A5 -:104B10000000000000000000000000000000000095 -:104B20000000000000000000000000000000000085 -:104B30000000000000000000000000000000000075 -:104B40000000000000000000000000000000000065 -:104B50000000000000000000000000000000000055 -:104B60000000000000000000000000000000000045 -:104B70000000000000000000000000000000000035 -:104B80000000000000000000000000000000000025 -:104B90000000000000000000000000000000000015 -:104BA0000000000000000000000000000000000005 -:104BB00000000000000000000000000000000000F5 -:104BC00000000000000000000000000000000000E5 -:104BD00000000000000000000000000000000000D5 -:104BE00000000000000000000000000000000000C5 -:104BF00000000000000000000000000000000000B5 -:104C000000000000000000000000000000000000A4 -:104C10000000000000000000000000000000000094 -:104C20000000000000000000000000000000000084 -:104C30000000000000000000000000000000000074 -:104C40000000000000000000000000000000000064 -:104C50000000000000000000000000000000000054 -:104C60000000000000000000000000000000000044 -:104C70000000000000000000000000000000000034 -:104C80000000000000000000000000000000000024 -:104C90000000000000000000000000000000000014 -:104CA0000000000000000000000000000000000004 -:104CB00000000000000000000000000000000000F4 -:104CC00000000000000000000000000000000000E4 -:104CD00000000000000000000000000000000000D4 -:104CE00000000000000000000000000000000000C4 -:104CF00000000000000000000000000000000000B4 -:104D000000000000000000000000000000000000A3 -:104D10000000000000000000000000000000000093 -:104D20000000000000000000000000000000000083 -:104D30000000000000000000000000000000000073 -:104D40000000000000000000000000000000000063 -:104D50000000000000000000000000000000000053 -:104D60000000000000000000000000000000000043 -:104D70000000000000000000000000000000000033 -:104D80000000000000000000000000000000000023 -:104D90000000000000000000000000000000000013 -:104DA0000000000000000000000000000000000003 -:104DB00000000000000000000000000000000000F3 -:104DC00000000000000000000000000000000000E3 -:104DD00000000000000000000000000000000000D3 -:104DE00000000000000000000000000000000000C3 -:104DF00000000000000000000000000000000000B3 -:104E000000000000000000000000000000000000A2 -:104E10000000000000000000000000000000000092 -:104E20000000000000000000000000000000000082 -:104E30000000000000000000000000000000000072 -:104E40000000000000000000000000000000000062 -:104E50000000000000000000000000000000000052 -:104E60000000000000000000000000000000000042 -:104E70000000000000000000000000000000000032 -:104E80000000000000000000000000000000000022 -:104E90000000000000000000000000000000000012 -:104EA0000000000000000000000000000000000002 -:104EB00000000000000000000000000000000000F2 -:104EC00000000000000000000000000000000000E2 -:104ED00000000000000000000000000000000000D2 -:104EE00000000000000000000000000000000000C2 -:104EF00000000000000000000000000000000000B2 -:104F000000000000000000000000000000000000A1 -:104F10000000000000000000000000000000000091 -:104F20000000000000000000000000000000000081 -:104F30000000000000000000000000000000000071 -:104F40000000000000000000000000000000000061 -:104F50000000000000000000000000000000000051 -:104F60000000000000000000000000000000000041 -:104F70000000000000000000000000000000000031 -:104F80000000000000000000000000000000000021 -:104F90000000000000000000000000000000000011 -:104FA0000000000000000000000000000000000001 -:104FB00000000000000000000000000000000000F1 -:104FC00000000000000000000000000000000000E1 -:104FD00000000000000000000000000000000000D1 -:104FE00000000000000000000000000000000000C1 -:104FF00000000000000000000000000000000000B1 -:1050000000000000000000000000000000000000A0 -:105010000000000000000000000000000000000090 -:105020000000000000000000000000000000000080 -:105030000000000000000000000000000000000070 -:105040000000000000000000000000000000000060 -:105050000000000000000000000000000000000050 -:105060000000000000000000000000000000000040 -:105070000000000000000000000000000000000030 -:105080000000000000000000000000000000000020 -:105090000000000000000000000000000000000010 -:1050A0000000000000000000000000000000000000 -:1050B00000000000000000000000000000000000F0 -:1050C00000000000000000000000000000000000E0 -:1050D00000000000000000000000000000000000D0 -:1050E00000000000000000000000000000000000C0 -:1050F00000000000000000000000000000000000B0 -:10510000000000000000000000000000000000009F -:10511000000000000000000000000000000000008F -:10512000000000000000000000000000000000007F -:10513000000000000000000000000000000000006F -:10514000000000000000000000000000000000005F -:10515000000000000000000000000000000000004F -:10516000000000000000000000000000000000003F -:10517000000000000000000000000000000000002F -:10518000000000000000000000000000000000001F -:10519000000000000000000000000000000000000F -:1051A00000000000000000000000000000000000FF -:1051B00000000000000000000000000000000000EF -:1051C00000000000000000000000000000000000DF -:1051D00000000000000000000000000000000000CF -:1051E00000000000000000000000000000000000BF +:104A3000000000000000000000000142008B214443 +:104A40008040012000C202920C00C01400024C44BD +:104A5000000170020014C4809001FA0C018E32A68D +:104A600046A54040040F310200031100007CB00055 +:104A7000021008A0B19D840CCA050E4A08321C849D +:104A800002060039049E51780C2203045201495059 +:104A9000909035341906403200D040019026A00392 +:104AA00000C0D6048C142A9CCC541241880D312AA3 +:104AB0004C8964504C200AD816C002882008044152 +:104AC00000000405800201B02E9025E0440040342F +:104AD00008410E0802012081C1A0400804800A8616 +:104AE0008020246859041000E320485CD06802024A +:104AF000480592E908BC38220900102247000C033F +:104B000004048C88E1132000141318824090904014 +:104B1000744228268001321070004E18384C9322BF +:104B20000D3808900790405B01E018881419DD04E7 +:104B3000F10278D0878A0500804010001028B02844 +:104B4000A280010015008008010C0002A080100165 +:104B500080020300180100200200020600112080DC +:104B60002080210D000881405340182C125E0084E3 +:104B70001111C0002412114C0A032480010014C238 +:104B80000002E01C90019D2214863110A0140C013B +:104B9000102409105040209670246A409021404013 +:104BA0009311085684720005509D8118070830F152 +:104BB0000F80001020004521200090A6002A0AC87E +:104BC0001950B65460A62A80448740B63049701503 +:104BD000490159E092AC16C6324580140108D098BC +:104BE0000F21040240120D181F4312884A05725FFC +:104BF000AC8D1F2BD98295A23B686A0000420FF250 +:104C000082A00C08103E0042AD30214418D82A2062 +:104C10008980A072C0C3750000071812E1642310D8 +:104C20001A220B0920508872730E6C494A218C5845 +:104C3000D30500004FA48203C4053801280AD0928E +:104C40008A0804601B4445612052106121281B041E +:104C5000411124D0315808288982502D1836A725B3 +:104C600011CF0880848C528E081CC0C21352004998 +:104C700010020606C532C614A2360F510C1EA2231E +:104C800018515A231B4512837290390400A08020CA +:104C9000A020080402004900805204044888108BB8 +:104CA000482AC3027C59E308C5034403809026C008 +:104CB000253889B142D04869731C66C0A9A21A2060 +:104CC000C5C625000E1192C2C894292E1147104066 +:104CD00024044C2634B70511C18C80686C0B180372 +:104CE0008AA2C4A42B58285C0822A33B4C3F17225D +:104CF00008C35B4008445369024B00125340A08331 +:104D0000CC2F110E43134640CEB0020C0074024F5C +:104D10001033821E10CC88C1A268840300340001C5 +:104D20008190800B412044041C4090002000388278 +:104D300040004184082C951AA0414B019D70D4017C +:104D4000002F8100412F001C60052CC0F7A0030438 +:104D5000100B14010044107360888201064B60B090 +:104D600081044249308041A04095801029002504EB +:104D700049B00840308200804600020BC4258008FC +:104D800082404103E81C5B080722CE6D3224982A3A +:104D9000001208406400BC48007122040064025004 +:104DA0001422150024400010140458000488816067 +:104DB000511514482419484904A14140106002A12A +:104DC000045490979CC8102410050D230E007627DC +:104DD000249201B08002841200311001C1400144CC +:104DE000500408D001EC3149E080000E80004810EA +:104DF000B100448021508A0000009009440030092D +:104E00002053AD2049A400A941404040A0281B03E5 +:104E10005E41AE10E1845C520800821D2341904245 +:104E2000520848414210029884401950C021300A6B +:104E3000545441180A0081410180725A180000320E +:104E4000C114280846365C0211B00CA0D5A008E0B9 +:104E50000D120000400C2C2C46066CC183605524BA +:104E6000016783860020D044AC07C8447DA0040CB1 +:104E7000504804800C0203045001000E100004523C +:104E8000485C0E201C21035400025C6B80192149F0 +:104E900080405268468E22328CFCE13080CA473214 +:104EA000A2000CE08800100528800A080214E8B867 +:104EB000D00082828790450800880101000841D413 +:104EC000802018270104A6500290401816840E0472 +:104ED00083104842D90240088000933C5080000172 +:104EE000C10122009420A008B00110815008303088 +:104EF0000500024400A204A02118E8070800A10050 +:104F00000A212CA00A1F422D48B293063384C0F117 +:104F10000820184C1ED38895012044005A12640BB7 +:104F2000A6A00134329238160990A10910900526E6 +:104F300038008421110C00190048861102880001F4 +:104F40004022010801020800440000028A8D60032B +:104F50005C403D300A460D019CC0A0D4390D072AA3 +:104F600022860018C100C9003CD0343020CC0B355B +:104F7000848DF3F290F11030E041002028044E823D +:104F800028270018211C000C2026A40022C03988E4 +:104F9000A0C1050408C080000440C63523810EA1CD +:104FA0000C107D0009C246A12150200860165287CE +:104FB0004A01514C025024004208620860086829E6 +:104FC000E2013282018087D932C4CD2D439A2C7000 +:104FD000BE0040496020C480260233C0009CD03708 +:104FE0000020801005800001010040C114808DCB9D +:104FF000009B984682021044002230401A040101AE +:105000000186210024AB400802C8CA810118C68C61 +:1050100015080B28C0058420010224020402004068 +:1050200060C02040020C1204000090245500812032 +:1050300000906B470026001400620C40140424000A +:1050400006612044B0100802CC0010B04C011B11C6 +:105050003E004003A14010011E0F8F66A0F00431F6 +:10506000433FF00F407315080C00204203840201F7 +:1050700064105032D2030910000000000E000144F9 +:10508000016C18001801A004EC00D0E00C02020032 +:105090000007010000000010B204805005004148E4 +:1050A0000A2801809020C0000400000003033B0098 +:1050B00075F530A10F9040103414200A9200A98297 +:1050C000010010881010838800260080900B0100DA +:1050D00016016024044002000AA4001610200202F7 +:1050E000E2000000180008500120011802400010E2 +:1050F0008220A002010090108C00200000054002D8 +:1051000080D81000028105B0009401AB0620078210 +:105110004270D8A70E3E60CB76819E3C3A70232722 +:10512000063E709A380C880AFD8A398270A4E60E11 +:105130000678C23E0270E879A8368F8EBFE3FD8004 +:1051400090AC0E6088C9A2429829C203A7083661B4 +:10515000E3E49E3E09C34E9A30F980906609A303AA +:10516000A2323E606326268F8A68C3660C3A7003BB +:10517000A7083A71E3E4C88E0D9E080602EC8CD9AC +:105180008F20E009A393E7803E7823E78C3E708868 +:10519000A4BCE51D10CD677140BCB48E1098461BB1 +:1051A00042110838440600CBA38022C0A6051D1278 +:1051B000818BD393D40370047B028280010000446E +:1051C00000004C00100000555415544B2CA014B096 +:1051D000FFC03FFFC000F0000000A000000000A0E2 +:1051E000000070000000000000000000000000004F :1051F00000000000000000000000000000000000AF :10520000000000000000000000000000000000009E :10521000000000000000000000000000000000008E :10522000000000000000000000000000000000007E -:10523000000000000000000000000000000000006E +:1052300000020000000010000000000001800000DB :10524000000000000000000000000000000000005E :10525000000000000000000000000000000000004E :10526000000000000000000000000000000000003E -:10527000000000000000000000000000000000002E -:10528000000000000000000000000000000000001E +:10527000000000000000000000020000000010001C +:10528000000000000180000000000000000000009D :10529000000000000000000000000000000000000E :1052A00000000000000000000000000000000000FE :1052B00000000000000000000000000000000000EE -:1052C00000000000000000000000000000000000DE -:1052D00000000000000000000000000000000000CE +:1052C00000000000000000000000000000000010CE +:1052D000000000010000001110044441111044447A :1052E00000000000000000000000000000000000BE :1052F00000000000000000000000000000000000AE :10530000000000000000000000000000000000009D @@ -230764,286 +230764,286 @@ :10532000000000000000000000000000000000007D :10533000000000000000000000000000000000006D :10534000000000000000000000000000000000005D -:10535000000000000000000000000000000000004D -:10536000000000000000000000000000000000003D -:10537000000000000000000000000000000000002D -:10538000000000000000000000000000000000001D -:10539000000000000000000000000000000000000D -:1053A00000000000000000000000000000000000FD -:1053B00000000000000000000000000000000000ED -:1053C00000000000000000000000000000000000DD -:1053D00000000000000000000000000000000000CD -:1053E00000000000000000000000000000000000BD -:1053F00000000000000000000000000000000000AD -:10540000000000000000000000000000000000009C -:10541000000000000000000000000000000000008C -:10542000000000000000000000000000000000007C -:10543000000000000000000000000000000000006C -:10544000000000000000000000000000000000005C -:10545000000000000000000000000000000000004C -:10546000000000000000000000000000000000003C -:10547000000000000000000000000000000000002C -:10548000000000000000000000000000000000001C -:10549000000000000000000000000000000000000C -:1054A00000000000000000000000000000000000FC -:1054B00000000000000000000000000000000000EC -:1054C00000000000000000000000000000000000DC -:1054D00000000000000000000000000000000000CC -:1054E00000000000000000000000000000000000BC -:1054F00000000000000000000000000000000000AC -:10550000000000000000000000000000000000009B -:10551000000000000000000000000000000000008B -:10552000000000000000000000000000000000007B -:10553000000000000000000000000000000000006B -:10554000000000000000000000000000000000005B -:10555000000000000000000000000000000000004B -:10556000000000000000000000000000000000003B -:10557000000000000000000000000000000000002B -:10558000000000000000000000000000000000001B -:10559000000000000000000000000000000000000B -:1055A00000000000000000000000000000000000FB -:1055B00000000000000000000000000000000000EB -:1055C00000000000000000000000000000000000DB -:1055D00000000000000000000000000000000000CB -:1055E00000000000000000000000000000000000BB -:1055F00000000000000000000000000000000000AB -:10560000000000000000000000000000000000009A -:10561000000000000000000000000000000000008A -:10562000000000000000000000000000000000007A -:10563000000000000000000000000000000000006A -:10564000000000000000000000000000000000005A -:10565000000000000000000000000000000000004A -:10566000000000000000000000000000000000003A -:10567000000000000000000000000000000000002A -:10568000000000000000000000000000000000001A -:10569000000000000000000000000000000000000A -:1056A00000000000000000000000000000000000FA -:1056B00000000000000000000000000000000000EA -:1056C00000000000000000000000000000000000DA -:1056D00000000000000000000000000000000000CA -:1056E00000000000000000000000000000000000BA -:1056F00000000000000000000000000000000000AA -:105700000000000000000000000000000000000099 -:105710000000000000000000000000000000000089 -:105720000000000000000000000000000000000079 -:105730000000000000000000000000000000000069 -:105740000000000000000000000000000000000059 -:105750000000000000000000000000000000000049 -:105760000000000000000000000000000000000039 -:105770000000000000000000000000000000000029 -:105780000000000000000000000000000000000019 -:105790000000000000000000000000000000000009 -:1057A00000000000000000000000000000000000F9 -:1057B00000000000000000000000000000000000E9 -:1057C00000000000000000000000000000000000D9 -:1057D00000000000000000000000000000000000C9 -:1057E00000000000000000000000000000000000B9 -:1057F00000000000000000000000000000000000A9 -:105800000000000000000000000000000000000098 -:105810000000000000000000000000000000000088 -:105820000000000000000000000000000000000078 -:105830000000000000000000000000000000000068 -:105840000000000000000000000000000000000058 -:105850000000000000000000000000000000000048 -:105860000000000000000000000000000000000038 -:105870000000000000000000000000000000000028 -:105880000000000000000000000000000000000018 -:105890000000000000000000000000000000000008 -:1058A00000000000000000000000000000000000F8 -:1058B00000000000000000000000000000000000E8 -:1058C00000000000000000000000000000000000D8 -:1058D00000000000000000000000000000000000C8 -:1058E00000000000000000000000000000000000B8 -:1058F00000000000000000000000000000000000A8 -:105900000000000000000000000000000000000097 -:105910000000000000000000000000000000000087 -:105920000000000000000000000000000000000077 -:105930000000000000000000000000000000000067 -:105940000000000000000000000000000000000057 -:105950000000000000000000000000000000000047 -:105960000000000000000000000000000000000037 -:105970000000000000000000000000000000000027 -:105980000000000000000000000000000000000017 -:105990000000000000000000000000000000000007 -:1059A00000000000000000000000000000000000F7 -:1059B00000000000000000000000000000000000E7 -:1059C00000000000000000000000000000000000D7 -:1059D00000000000000000000000000000000000C7 -:1059E00000000000000000000000000000000000B7 -:1059F00000000000000000000000000000000000A7 -:105A00000000000000000000000000000000000096 +:10535000000000000000000000000000000000400D +:1053600048080040000200012080008000208000EA +:10537000000000000000000200000000000000002B +:10538000000000800001000000000000000000009C +:105390000000000000000100000800000001008083 +:1053A00000020100020000020000800200008000F4 +:1053B0000001000280000400000040000000000026 +:1053C00000000000000000000008040000200000B1 +:1053D000000400080100000000100400000000109C +:1053E00040100004400000000010020024902480BF +:1053F00041804004080002080001088040200000AD +:105400000420008080000000090410008010420485 +:1054100010080000040092EBC8BC80000B80100153 +:105420004400000104008408801120008401080069 +:1054300000000000000008120000021040000008F8 +:10544000204400000080000000080000001000E878 +:1054500000105D4010000000801800000003100ADA +:1054600000001000000800000004001010000100FF +:105470002002002004004002004004004008088090 +:1054800000006028608000210008C50002C482007E +:10549000175E800C9000000124121040400008901C +:1054A0000100020202002040002000080400000069 +:1054B000820000801404008050400050082020002A +:1054C00050220000802A08028010200200BED12C49 +:1054D000460231F000000000000000004040901043 +:1054E000400000000041100440040000000000A43F +:1054F00000004000000002800088048000000800D6 +:10550000008000002A32240842800808102006008B +:1055100008000090A848101209029280144421004B +:1055200002420FF6C2A00C08103A0040B512080C57 +:1055300000813C000000F20200C049204006A17238 +:105540003340820C1D300A0B301858C8D000C80AEE +:105550002D31A550140C00408124002200040804C1 +:10556000200010035AE010491BA60D41625328B3D6 +:105570004B095306041166E82B500D58C8CA12682F +:105580008464B11698006D80800009802FDB4496FA +:10559000520610D28033430A2D12CB342AB2008A2D +:1055A00088393130305F4B3032474B42012816206A +:1055B0001101C0A2A20350202224020090529E504A +:1055C000010031B08A2AA018001E000088C9299164 +:1055D0000008074835B4CAA56109544912001E4A9B +:1055E000AE01010420680D388318A29A18961A2B70 +:1055F00018035940A18C6923241186981195A46D34 +:105600006D0F594B63806458E0030F2E081100485A +:10561000C460432F9280C101ACEC355A262B098817 +:10562000E0C130B40318C181F28191C046B60203D3 +:1056300003948063D075C631418C0C405210240114 +:105640002010020181040400010004041A00D000AB +:10565000290004020040A04400920200C080A490EF +:105660004200908109200000029240258002924071 +:1056700039000000010C000000000019102011008A +:105680000A002000000008002080000061000010D7 +:105690000002340000000A08048000008A0000189C +:1056A000542580389A41A313CC900C0000220802A4 +:1056B0001080002A0010084190C0A8089021220400 +:1056C00003CC8275D4C40700000A888090C46A04A1 +:1056D0003CA8C011227148494012220240A2031086 +:1056E0002002108981A6200888824404000000015D +:1056F0009C8066F01131012E01E3A0335827C600CB +:105700008232000020041DF202EE33FD2090460C90 +:10571000958E0090C10CB4060308003400102802D6 +:105720000414344CE073AB001AC40EA04101C00451 +:105730008C814105540DA3D23A4009D2290040BDC5 +:10574000024004327E024A000550000000001110A1 +:1057500000A020011442401048020420040CC000A4 +:10576000022908200001200C0030080A93100000D4 +:1057700094AA0640840000000014080405000020DC +:1057800000000000000A0001000000400208108232 +:105790004100002800000880000000000080100088 +:1057A0004204000240000000000241048005002085 +:1057B0000800294C90206A48020413020462002069 +:1057C000C4080208130014600080080000480204A6 +:1057D0008000000000200000010004040080008020 +:1057E000010C43D40020800081020141028010009E +:1057F00000000000000000000002800002001830DD +:10580000000C2000400102011010821DF1001980DF +:10581000000030080080000000200402A82CE201F3 +:105820000800A0E0382000400000022000A0000096 +:105830003300E0C0142001400000804000804000A0 +:10584000A8001000008000002000000001000009F6 +:10585000081507000200100010000A0000000011E7 +:10586000028840454020004A0022822001100800A2 +:10587000400191010400040000400000000000000D +:1058800020680022000000000000000008A00000C6 +:10589000080001010004924A00805008E00428003A +:1058A00000245090090008008000880080008100DA +:1058B00010010000000001000800020000100000BC +:1058C0000081040104081C080000021000442000AC +:1058D00000020004080041005A1102414108210859 +:1058E00020082000004000000180800000000C0023 +:1058F000228A0410040000480022D400120200C0D2 +:1059000008A8008500273C2781CE063024CC03C0A0 +:105910000000040360210C2802000E000242D000A7 +:105920001A2426410106B0EBA42311026C000001E9 +:1059300024002000250206288223CC99F73A010092 +:1059400093319F40E0920933C9FC1201240A8A2155 +:105950000E0082906F902208002C0414101508A1EC +:105960004C006400006020B0000000004040104483 +:1059700000000800080000012560058006000800FE +:105980004020001102008540408006040001000014 +:1059900000008000001052000800A9400000000034 +:1059A0000500000020001000800020004020004082 +:1059B00000020000000000000007F00000000001ED +:1059C00000200000000000000004000000000000B3 +:1059D0000000002004000400000000000004000893 +:1059E0009100004080000000000000000001004025 +:1059F0000800800801001000002000000A000000DC +:105A0000100000000008000100000000000000007D :105A10000000000000000000000000000000000086 -:105A20000000000000000000000000000000000076 -:105A30000000000000000000000000000000000066 -:105A40000000000000000000000000000000000056 -:105A50000000000000000000000000000000000046 -:105A60000000000000000000000000000000000036 -:105A70000000000000000000000000000000000026 -:105A80000000000000000000000000000000000016 -:105A90000000000000000000000000000000000006 +:105A2000000000000000040001020800800011AB2B +:105A300000210000000000408104080040800004B4 +:105A40000000000000000000000000002000000036 +:105A50000000C08100000000000000000000000005 +:105A600000001020084104084810202100102120C7 +:105A70004082040020400000000000000000000000 +:105A80000000000000000000200000810408104019 +:105A900080040820408204002040108400000000A0 :105AA00000000000000000000000000000000000F6 -:105AB00000000000000000000000000000000000E6 -:105AC00000000000000000000000000000000000D6 -:105AD00000000000000000000000000000000000C6 -:105AE00000000000000000000000000000000000B6 -:105AF00000000000000000000000000000000000A6 -:105B00000000000000000000000000000000000095 +:105AB0000000008840925022014E8D3001B0240534 +:105AC00027248922439270DC413C280534807900E8 +:105AD00072012212028A0380282406020800C0C034 +:105AE000F100089C00080C00200000540534C40696 +:105AF000E4C000C4000000000000000000089000A6 +:105B00000400000000000000000000000000000091 :105B10000000000000000000000000000000000085 :105B20000000000000000000000000000000000075 :105B30000000000000000000000000000000000065 :105B40000000000000000000000000000000000055 -:105B50000000000000000000000000000000000045 +:105B50000000000000020000000000000000000043 :105B60000000000000000000000000000000000035 :105B70000000000000000000000000000000000025 :105B80000000000000000000000000000000000015 -:105B90000000000000000000000000000000000005 +:105B90000000000000000000000000000002000003 :105BA00000000000000000000000000000000000F5 :105BB00000000000000000000000000000000000E5 :105BC00000000000000000000000000000000000D5 :105BD00000000000000000000000000000000000C5 :105BE00000000000000000000000000000000000B5 -:105BF00000000000000000000000000000000000A5 +:105BF0000000000000444000000000000000000021 :105C00000000000000000000000000000000000094 :105C10000000000000000000000000000000000084 :105C20000000000000000000000000000000000074 -:105C30000000000000000000000000000000000064 +:105C3000000000000000000000000100000400005F :105C40000000000000000000000000000000000054 :105C50000000000000000000000000000000000044 :105C60000000000000000000000000000000000034 :105C70000000000000000000000000000000000024 -:105C80000000000000000000000000000000000014 -:105C90000000000000000000000000000000000004 -:105CA00000000000000000000000000000000000F4 -:105CB00000000000000000000000000000000000E4 -:105CC00000000000000000000000000000000000D4 -:105CD00000000000000000000000000000000000C4 -:105CE00000000000000000000000000000000000B4 -:105CF00000000000000000000000000000000000A4 -:105D00000000000000000000000000000000000093 -:105D10000000000000000000000000000000000083 -:105D20000000000000000000000000000000000073 -:105D30000000000000000000000000000000000063 -:105D40000000000000000000000000000000000053 -:105D50000000000000000000000000000000000043 -:105D60000000000000000000000000000000000033 -:105D70000000000000000000000000000000000023 -:105D80000000000000000000000000000000000013 -:105D90000000000000000000000000000000000003 -:105DA00000000000000000000000000000000000F3 -:105DB00000000000000000000000000000000000E3 -:105DC00000000000000000000000000000000000D3 -:105DD00000000000000000000000000000000000C3 -:105DE00000000000000000000000000000000000B3 -:105DF00000000000000000000000000000000000A3 -:105E00000000000000000000000000000000000092 -:105E10000000000000000000000000000000000082 -:105E20000000000000000000000000000000000072 -:105E30000000000000000000000000000000000062 -:105E40000000000000000000000000000000000052 -:105E50000000000000000000000000000000000042 -:105E60000000000000000000000000000000000032 -:105E70000000000000000000000000000000000022 -:105E80000000000000000000000000000000000012 -:105E90000000000000000000000000000000000002 -:105EA00000000000000000000000000000000000F2 -:105EB00000000000000000000000000000000000E2 -:105EC00000000000000000000000000000000000D2 -:105ED00000000000000000000000000000000000C2 -:105EE00000000000000000000000000000000000B2 -:105EF00000000000000000000000000000000000A2 -:105F00000000000000000000000000000000000091 -:105F10000000000000000000000000000000000081 -:105F20000000000000000000000000000000000071 -:105F30000000000000000000000000000000000061 -:105F40000000000000000000000000000000000051 -:105F50000000000000000000000000000000000041 -:105F60000000000000000000000000000000000031 -:105F70000000000000000000000000000000000021 -:105F80000000000000000000000000000000000011 -:105F90000000000000000000000000000000000001 -:105FA00000000000000000000000000000000000F1 -:105FB00000000000000000000000000000000000E1 -:105FC00000000000000000000000000000000000D1 -:105FD00000000000000000000000000000000000C1 -:105FE00000000000000000000000000000000000B1 -:105FF00000000000000000000000000000000000A1 -:106000000000000000000000000000000000000090 -:106010000000000000000000000000000000000080 -:106020000000000000000000000000000000000070 -:106030000000000000000000000000000000000060 -:106040000000000000000000000000000000000050 -:106050000000000000000000000000000000000040 -:106060000000000000000000000000000000000030 -:106070000000000000000000000000000000000020 -:106080000000000000000000000000000000000010 -:106090000000000000000000000000000000000000 -:1060A00000000000000000000000000000000000F0 -:1060B00000000000000000000000000000000000E0 -:1060C00000000000000000000000000000000000D0 -:1060D00000000000000000000000000000000000C0 -:1060E00000000000000000000000000000000000B0 -:1060F00000000000000000000000000000000000A0 -:10610000000000000000000000000000000000008F -:10611000000000000000000000000000000000007F -:10612000000000000000000000000000000000006F -:10613000000000000000000000000000000000005F -:10614000000000000000000000000000000000004F -:10615000000000000000000000000000000000003F -:10616000000000000000000000000000000000002F -:10617000000000000000000000000000000000001F -:10618000000000000000000000000000000000000F -:1061900000000000000000000000000000000000FF -:1061A00000000000000000000000000000000000EF -:1061B00000000000000000000000000000000000DF -:1061C00000000000000000000000000000000000CF -:1061D00000000000000000000000000000000000BF -:1061E00000000000000000000000000000000000AF -:1061F000000000000000000000000000000000009F -:10620000000000000000000000000000000000008E -:10621000000000000000000000000000000000007E -:10622000000000000000000000000000000000006E -:10623000000000000000000000000000000000005E -:10624000000000000000000000000000000000004E -:10625000000000000000000000000000000000003E -:10626000000000000000000000000000000000002E -:10627000000000000000000000000000000000001E -:10628000000000000000000000000000000000000E -:1062900000000000000000000000000000000000FE -:1062A00000000000000000000000000000000000EE -:1062B00000000000000000000000000000000000DE -:1062C00000000000000000000000000000000000CE -:1062D00000000000000000000000000000000000BE -:1062E00000000000000000000000000000000000AE -:1062F000000000000000000000000000000000009E -:10630000000000000000000000000000000000008D -:10631000000000000000000000000000000000007D -:10632000000000000000000000000000000000006D -:10633000000000000000000000000000000000005D -:10634000000000000000000000000000000000004D -:10635000000000000000000000000000000000003D -:10636000000000000000000000000000000000002D -:10637000000000000000000000000000000000001D -:10638000000000000000000000000000000000000D -:1063900000000000000000000000000000000000FD -:1063A00000000000000000000000000000000000ED -:1063B00000000000000000000000000000000000DD -:1063C00000000000000000000000000000000000CD -:1063D00000000000000000000000000000000000BD -:1063E00000000000000000000000000000000000AD -:1063F000000000000000000000000000000000009D -:10640000000000000000000000000000000000008C -:10641000000000000000000000000000000000007C -:10642000000000000000000000000000000000006C +:105C8000000000400200007C880299004C800080E7 +:105C900000488002000003908000380200000200EB +:105CA00040000000030000800C01013A001F8E2C10 +:105CB0000008E4E000FCA360001880000008000079 +:105CC00000010080000201000200000200008002CA +:105CD0000000800000010002800000000000400081 +:105CE0000000000000000000000000002008040286 +:105CF000002000000000000001000000001004006F +:105D00000000001040000000400000000000000003 +:105D100020800400020040041C12800800039280CE +:105D2000002000940E480000800010010014100FA5 +:105D30008C00E48420080001012002AAC8AC80087D +:105D40000A8110004490DEE132D6844A80DFE00010 +:105D500024052908421000C020000802000002109B +:105D600040000018200400000000000008020000AD +:105D7000000400683E10554454800000800000007C +:105D80000002500A0000100000020000200C529592 +:105D9000154501402002002004004002004004009C +:105DA00040080900010861E260B9F92B77C8C50015 +:105DB00006F48A001556C2043020002924125241EC +:105DC000444008B8B3821F120260304684B0000A13 +:105DD00044C10400BB00C1A011858100514008D01E +:105DE00000286D0992600040A24A282080184002D5 +:105DF00030B6C52C1600B1D021240400160C0800C2 +:105E0000400134610035A80D80B1CC4C1A2008291E +:105E10000462002230003010400132008418F44641 +:105E200001840982C181D04BAA106EC9469346787D +:105E300001501ADF08002094F84C103219428AB041 +:105E40001D449000001A4000000000000000000007 +:105E50000000E31010983E08824CF3CE3062C92453 +:105E600070C6B57333E8820C1D304F0F311A58D805 +:105E7000DF3DCACE2D31A5F85E9E1BC1816CB0E21C +:105E800000B548352B4110E3DAE8304B1BA60DE195 +:105E9000E35368B3EB0B53460C11E6E86B780958F3 +:105EA000CCCE527DC4E5D9169F86ED8050081B8C60 +:105EB0000FDF84C2114410FAE232530F2DE2DB3CB3 +:105EC00036B63C9D8AF9313F709F4B3F72CF4B43B2 +:105ED000AFDC976B3D9BCEFFF327D473FA34768209 +:105EE0009B73FAD0035B39B28FFEF3FDA83E03002B +:105EF00008492F90000CED0835B4CAF5616974E9C2 +:105F0000300FFF4ABE010114712C0DF98359A3DB38 +:105F1000DCD69A3B59435B60E5AC7D3325598698C6 +:105F2000319DA46D6D07594BE3802F7CE14F0F6EBF +:105F300008BB2251C0E0532FB684C181ADFC355E51 +:105F4000262B09A8E1C3F0BC931AC241FEE097C01A +:105F5000CEB6210B438080F3D074C631C18F57F188 +:105F60005BB4440326800200811F48164829BCCB3D +:105F7000B2707EA4410026A08417D05EC4498A3145 +:105F80005F0F1240420CB82E18584A62204EDC9B1C +:105F90008F3C49042871F4A004740441075D428BCE +:105FA00030DD233CB74160E009000908021B444092 +:105FB000F15000634504FA0308D1021CC4F5351CF6 +:105FC0008B5E4139D407191008050213C8B43C860A +:105FD00005AA480630A61810062520029140400068 +:105FE000BA8020000BDC0075DCD7132894489F6032 +:105FF00088446A243C6840B922F9484F44122282FE +:1060000040A203B0281E10D983A6200888A6441CED +:10601000480004119EC066F413B1012E30A3A035D0 +:10602000F827E4480230000082083FF242EFB3FD57 +:106030002C91662C958E00D241ECB5071BC8803F91 +:10604000B3312812041D37CEE073AB001ACC0EA07A +:10605000C101C085AC81E925540FA3F23A4009D2B1 +:106060003BD042BD0241043F7E0FFF8049D18210E8 +:10607000B2CE2870C5240003188440100040184197 +:10608000210867FE109008A7D1DE28895E16A609B0 +:1060900001A0BFF89CEA0ED9415051281C240900E8 +:1060A00001400020000000001408020100400040F0 +:1060B000020812824100444851221EF18341109A85 +:1060C000C4931A03DFCE998270BC783F049F46DCEC +:1060D000D0C718E32B2669C594315F68D0D6333B0F +:1060E0000FE692B294ECD11A73005FE01200383CD4 +:1060F0000C880004A21CCC2A1C21B686F7900698B6 +:10610000918225E6425C620DB0A0AA000106D3414F +:1061100026A010000009000000000000000280021C +:1061200038022800000D00000531F05350188A197C +:10613000D7401F80040030121121420E93A3145344 +:10614000A33CE60DB5A3B5ECDA2C03E240C990A55B +:10615000002A04349000B001EC24056B06A08840AE +:10616000008264076812B5C776C000442000000CA6 +:10617000490000493C11173C1486787152EC929A00 +:106180001326475380A9685540200088CC2226F862 +:10619000527E2A43C4E2B30704C8E53B00C58AE047 +:1061A000680002D02268007FE1776080B109EA4C84 +:1061B0000963BBB8A80F09630515B35ABC6CB53F9A +:1061C000EE844A0249045EF22F2ECE32C0008800CF +:1061D0008034040026501C8C8D8101004800020090 +:1061E0000020000000C90401308004631E7309050B +:1061F00041C9A4084824520E7C90450CDA55004150 +:106200004069906984698400088841E00008F79932 +:106210003051479E6164043DC530094B7FA3BC20CB +:10622000378F000149BC80B5A8273B2721CC863099 +:1062300024CC83C01480040360200C2800008E004E +:106240000762D0301A240645050690EB742311022C +:106250006C000A112400A000214306A882A3FC9927 +:10626000E732810093319E5028120933C9E502813B +:10627000242AB8390E08CA906DD8E208143C095493 +:10628000301508A54E006680400022B000000000D6 +:106290000A8010D64097AF1D3AC7707127EC41F8BD +:1062A000000006644320F8C79A00A94805007A0058 +:1062B00030980E80C011322260154A001B8BAB4013 +:1062C00000000000200004304001D0910022224054 +:1062D00040F000401D020C00000F43260000013C6E +:1062E000160000710020E3FC35DC490CB034844812 +:1062F000000060400800228024A10003404483265F +:106300005C3A483EB74004C0800000000000000036 +:1063100000000010020020020040040000080000FD +:106320004A10005410A083266A4601539270FBFD68 +:1063300000C98004000004000000000FC40064D401 +:106340000200000200000220000001000102080219 +:106350000000256904260094204810448104088028 +:106360004081020424482240820441121081080422 +:106370001102112008444481044882242048104816 +:1063800021048901041010200841044848102021EC +:10639000101121204482244120400224112049026E +:1063A00000912008421022424222044820400481E9 +:1063B0000448924488244822448224402040108487 +:1063C000090200842010849089084200210244843C +:1063D000244822448224408844645E044C0CADF37B +:1063E0008238E165043B0ECE11A04082872246CD63 +:1063F00042004288213B035040B0F184CC984C00CD +:106400008F4292800100055C05498C0001044045E3 +:10641000142324C5281002B0FFC03FFFC000F000C5 +:106420000052A005500000000000700000000000B5 :10643000000000000000000000000000000000005C :10644000000000000000000000000000000000004C :10645000000000000000000000000000000000003C :10646000000000000000000000000000000000002C -:10647000000000000000000000000000000000001C -:10648000000000000000000000000000000000000C +:10647000000000000000000000020000000000001A +:106480000000000008000000000000000000000004 :1064900000000000000000000000000000000000FC :1064A00000000000000000000000000000000000EC :1064B00000000000000000000000000000000000DC -:1064C00000000000000000000000000000000000CC +:1064C00000020000000000000000000008000000C2 :1064D00000000000000000000000000000000000BC :1064E00000000000000000000000000000000000AC :1064F000000000000000000000000000000000009C @@ -231057,871 +231057,871 @@ :10657000000000000000000000000000000000001B :10658000000000000000000000000000000000000B :1065900000000000000000000000000000000000FB -:1065A00000000000000000000000000000000000EB -:1065B00000000000000000000000000000000000DB -:1065C00000000000000000000000000000000000CB -:1065D00000000000000000000000000000000000BB -:1065E00000000000000000000000000000000000AB -:1065F000000000000000000000000000000000009B -:10660000000000000000000000000000000000008A -:10661000000000000000000000000000000000007A -:10662000000000000000000000000000000000006A -:10663000000000000000000000000000000000005A -:10664000000000000000000000000000000000004A -:10665000000000000000000000000000000000003A -:10666000000000000000000000000000000000002A -:10667000000000000000000000000000000000001A -:10668000000000000000000000000000000000000A -:1066900000000000000000000000000000000000FA -:1066A00000000000000000000000000000000000EA -:1066B00000000000000000000000000000000000DA -:1066C00000000000000000000000000000000000CA -:1066D00000000000000000000000000000000000BA -:1066E00000000000000000000000000000000000AA -:1066F000000000000000000000000000000000009A -:106700000000000000000000000000000000000089 -:106710000000000000000000000000000000000079 -:106720000000000000000000000000000000000069 -:106730000000000000000000000000000000000059 -:106740000000000000000000000000000000000049 -:106750000000000000000000000000000000000039 -:106760000000000000000000000000000000000029 -:106770000000000000000000000000000000000019 -:106780000000000000000000000000000000000009 -:1067900000000000000000000000000000000000F9 -:1067A00000000000000000000000000000000000E9 -:1067B00000000000000000000000000000000000D9 -:1067C00000000000000000000000000000000000C9 -:1067D00000000000000000000000000000000000B9 -:1067E00000000000000000000000000000000000A9 -:1067F0000000000000000000000000000000000099 -:106800000000000000000000000000000000000088 -:106810000000000000000000000000000000000078 -:106820000000000000000000000000000000000068 -:106830000000000000000000000000000000000058 -:106840000000000000000000000000000000000048 -:106850000000000000000000000000000000000038 -:106860000000000000000000000000000000000028 -:106870000000000000000000000000000000000018 -:106880000000000000000000000000000000000008 -:1068900000000000000000000000000000000000F8 -:1068A00000000000000000000000000000000000E8 -:1068B00000000000000000000000000000000000D8 -:1068C00000000000000000000000000000000000C8 -:1068D00000000000000000000000000000000000B8 -:1068E00000000000000000000000000000000000A8 -:1068F0000000000000000000000000000000000098 -:106900000000000000000000000000000000000087 -:106910000000000000000000000000000000000077 -:106920000000000000000000000000000000000067 -:106930000000000000000000000000000000000057 -:106940000000000000000000000000000000000047 -:106950000000000000000000000000000000000037 -:106960000000000000000000000000000000000027 -:106970000000000000000000000000000000000017 -:106980000000000000000000000000000000000007 -:1069900000000000000000000000000000000000F7 -:1069A00000000000000000000000000000000000E7 -:1069B00000000000000000000000000000000000D7 -:1069C00000000000000000000000000000000000C7 -:1069D00000000000000000000000000000000000B7 -:1069E00000000000000000000000000000000000A7 -:1069F0000000000000000000000000000000000097 -:106A00000000000000000000000000000000000086 -:106A10000000000000000000000000000000000076 -:106A20000000000000000000000000000000000066 -:106A30000000000000000000000000000000000056 -:106A40000000000000000000000000000000000046 -:106A50000000000000000000000000000000000036 -:106A60000000000000000000000000000000000026 -:106A70000000000000000000000000000000000016 -:106A80000000000000000000000000000000000006 -:106A900000000000000000000000000000000000F6 -:106AA00000000000000000000000000000000000E6 -:106AB00000000000000000000000000000000000D6 -:106AC00000000000000000000000000000000000C6 -:106AD00000000000000000000000000000000000B6 -:106AE00000000000000000000000000000000000A6 -:106AF0000000000000000000000000000000000096 -:106B00000000000000000000000000000000000085 -:106B10000000000000000000000000000000000075 -:106B20000000000000000000000000000000000065 -:106B30000000000000000000000000000000000055 -:106B40000000000000000000000000000000000045 -:106B50000000000000000000000000000000000035 -:106B60000000000000000000000000000000000025 -:106B70000000000000000000000000000000000015 -:106B80000000000000000000000000000000000005 -:106B900000000000000000000000000000000000F5 -:106BA00000000000000000000000000000000000E5 -:106BB00000000000000000000000000000000000D5 -:106BC00000000000000000000000000000000000C5 -:106BD00000000000000000000000000000000000B5 -:106BE00000000000000000000000000000000000A5 -:106BF0000000000000000000000000000000000095 -:106C00000000000000000000000000000000000084 -:106C10000000000000000000000000000000000074 -:106C20000000000000000000000000000000000064 -:106C30000000000000000000000000000000000054 -:106C40000000000000000000000000000000000044 -:106C50000000000000000000000000000000000034 -:106C60000000000000000000000000000000000024 -:106C70000000000000000000000000000000000014 -:106C80000000000000000000000000000000000004 -:106C900000000000000000000000000000000000F4 -:106CA00000000000000000000000000000000000E4 -:106CB00000000000000000000000000000000000D4 -:106CC00000000000000000000000000000000000C4 -:106CD00000000000000000000000000000000000B4 -:106CE00000000000000000000000000000000000A4 -:106CF0000000000000000000000000000000000094 -:106D00000000000000000000000000000000000083 -:106D10000000000000000000000000000000000073 -:106D20000000000000000000000000000000000063 -:106D30000000000000000000000000000000000053 -:106D40000000000000000000000000000000000043 +:1065A00000000000000006404A0100000002000157 +:1065B000698025C001688000000000000000000222 +:1065C0000000000000000000000000800C0100003E +:1065D00028000000FF000003E000040700A0060000 +:1065E000031A5C00811990C070E32180033400C35A +:1065F0000330C0C30000C00078016E01D8005BEF1B +:1066000034004DDDF3800CEEEF1C0044F7724F3C7C +:1066100021BC3E42007B700000000000010000032E +:10662000D0102F3D21EC8DFAF002BC00400000009C +:10663000020202042AAC156403DA50041C12840816 +:1066400000039A80802000940E68040080001001EE +:10665000001410008010E68422080001052002AA20 +:10666000C8AC84000A8C5000440400E9009084887F +:1066700080112000A4010800000000004140080033 +:106680000000021040000008200000000000000090 +:10669000100B4044001400687E1455409400880894 +:1066A000C00400000003520A00001000000A0000AD +:1066B000200C529515450940201280282512504281 +:1066C0008250250C504A09A081C860EA6098392B95 +:1066D0000748C52092C4821C1556C00CB0000003A8 +:1066E00064321040C08009904104020283102040AF +:1066F000002000080D000401820081AD150C018806 +:10670000514808D0002A6FC9F2600040AACA282860 +:10671000C038600230B6D52C5602B1D122400638BE +:106720002888C1A17021140144000001000000006C +:1067300000040108000C21A10400002080020202D4 +:106740003188042800004D00808804003E3AB48857 +:106750004280000C90000000080000B8A84A101207 +:106760000B828281B4442118001A4000000000000E +:10677000000000000002E318349C3E088240F20250 +:10678000006249202046A1723340021C1D300A09D4 +:10679000703858C8D0004848AD33A550561C084141 +:1067A0008104B020008500052B0010C37AE8004B5F +:1067B0003BA60D41225728B34B0B570600112EE87C +:1067C0002B501959C8CA12688424911698067C90D7 +:1067D00050081B8D0FDF84C2114494D28A36430ABD +:1067E0002D03CB3432F2009D88393130101D6B30CF +:1067F000124D6B42AFDC97601589CE2BB265C43069 +:10680000AA2472028952AAC0810931B382BEF3FC64 +:10681000003E03022A482D908008050837B4CAA517 +:10682000E1695449320FFE4ABE010104336D0D394E +:10683000831CA29A189E1A2B18037940A18C6923F5 +:10684000241186980396B4EDED07794FE3C1257CBA +:10685000E0030FFE08110040D0E0432FB684C19141 +:10686000BDEC355E262F0988E1C7B0BC1318C241C4 +:10687000F6A195C0CEF6310B03808073D07CD63163 +:10688000C18D15D15234660324900301811D4C360D +:10689000C908A60B3A607EA4898026AC0587D05E25 +:1068A000C4498A315F0F1250420CBB0E1E184A6257 +:1068B000204EDCFB8F3C49442871F4A04974000051 +:1068C00004110009100045203A0010C3FF802C0776 +:1068D000000000C8210044400006900108D12208B1 +:1068E00004D414158A164018540320100801061009 +:1068F00098903C0005AA480610821000000020086D +:106900009260002090800800039E0073DCC5130095 +:106910000008880083446A043E2A401922F9484F3F +:10692000C5122202C0A20330281F10CB81AE2088DE +:10693000A8A64404480000019E80A6F011B5806E10 +:1069400030A3A0395827CC022A30000000001DF3E4 +:106950000247B3FD2010472C958F0092410CB407DD +:1069600003080034001028020414144CF0728380D1 +:106970009ACC0E204101C0848C814D04010DA3D21C +:106980003E4009D2315242B40243C43A7E02EA8008 +:106990004DD0823482462858C524030318866018D7 +:1069A00046419861250C67FE129008A7D287280DF2 +:1069B0005E1000080101200096AA0E01C5511128A1 +:1069C00000344A15054D4420221082C01408020DDF +:1069D000C1508040433C3282E140447C80020891B7 +:1069E0000000102100905000424C80024000010045 +:1069F0000102408E8005803008006DC4D8206A4CAA +:106A00009000110004420002D40090081102544288 +:106A100012EC2E101CCC00058254CC681C21B686CA +:106A2000F792AE9C918725E6435C620DB0A4AA0064 +:106A30000106FF4326A83299021101581006008072 +:106A400000128C023AC2A900021D29080571925158 +:106A500080D0021D65401F802400201A11A1480E1D +:106A600093B81413AB3DE201AC222DECFA2C2BE0D1 +:106A7000035FB03144280234D00CA0017C2411C83B +:106A800006A88040A0832403A8015C46E88382C452 +:106A9000287C3E05C93E022088951A3C16C270F338 +:106AA0005AA49A9F2320455380C968C5402000CA34 +:106AB000CF328470535E0201400091003000001517 +:106AC00012000160000082802078490200B2A0001C +:106AD0000029400C5023BFBCA80F09100026120A41 +:106AE000A824D4288004EA015924729029264E3221 +:106AF000D288884EF5348500365100888DA1013941 +:106B00004BC182CF4835290001C904012408BCEBE0 +:106B10001EF7021541CDA408D024D206EDB0450CD5 +:106B2000DA550261416921692069200008C041618C +:106B30000000F40930114B80201C003DC03E194B71 +:106B40007FA29400378B000009A820B500273F27BB +:106B5000A1CE863024CC43C00051842F62231CAACE +:106B6000C5208E0C0253D4041E270765050790EB41 +:106B7000A4231116EC095001BE04219521424F387F +:106B800082A30C99F73A810093319F50A8120933E0 +:106B9000C9F50281242ABA23CE08CA906F90E20870 +:106BA000143C0D5432B508A54E00668C43E0A2B0EB +:106BB000454222208AD0904200000800080400418B +:106BC0002560018006000801402000110203AD4944 +:106BD0007D207A00307C0E92C011B22260154A20CE +:106BE0001B8BAB435C08D70231788C306201FC51BF +:106BF000A0162E42C0F00244001200FF0E0000005A +:106C00007C07F00068000001002000001410010063 +:106C100080848002A9269E0E141133A434A1058B12 +:106C20004004800000000028910000C0C000000067 +:106C3000004004E0000140500A00A00A0140140096 +:106C4000002800004A0000001800040000080A01A3 +:106C50002400000538000801F00000BFFA3E9FC183 +:106C600003F0000000FF00010FBD001E9C3DF02C52 +:106C70008BCF5E70A7EC35000421009420081040F3 +:106C800089244800408102042408204482044102EF +:106C90001089080411021120084040810448820430 +:106CA000200890482104810904101020084104485C +:106CB00048902021101121204082244022400224AB +:106CC00011204912001020084211204042020408FD +:106CD00022440089040810408004082040820401F6 +:106CE0002240108401020084201084108108420098 +:106CF0002110448404082040822400884442CD208E +:106D00003B8A50E3502C0C0C00018060C3A000486B +:106D100082080A0E238011C0E28E3908C156E3A012 +:106D2000245260001A001000010004A0000DCC00E5 +:106D300011140051450C340264400040F0203FFF24 +:106D4000C000F000005AB007800000000000900072 :106D50000000000000000000000000000000000033 :106D60000000000000000000000000000000000023 :106D70000000000000000000000000000000000013 :106D80000000000000000000000000000000000003 -:106D900000000000000000000000000000000000F3 -:106DA00000000000000000000000000000000000E3 +:106D900000000000000000000000000000030000F0 +:106DA00000000000000000000800000000000000DB :106DB00000000000000000000000000000000000D3 :106DC00000000000000000000000000000000000C3 :106DD00000000000000000000000000000000000B3 -:106DE00000000000000000000000000000000000A3 -:106DF0000000000000000000000000000000000093 +:106DE00000000000000300000000000000000000A0 +:106DF000080000000000000000000000000000008B :106E00000000000000000000000000000000000082 :106E10000000000000000000000000000000000072 :106E20000000000000000000000000000000000062 -:106E30000000000000000000000000000000000052 -:106E40000000000000000000000000000000000042 -:106E50000000000000000000000000000000000032 -:106E60000000000000000000000000000000000022 -:106E70000000000000000000000000000000000012 -:106E80000000000000000000000000000000000002 -:106E900000000000000000000000000000000000F2 -:106EA00000000000000000000000000000000000E2 -:106EB00000000000000000000000000000000000D2 -:106EC00000000000000000000000000000000000C2 -:106ED00000000000000000000000000000000000B2 -:106EE00000000000000000000000000000000000A2 -:106EF0000000000000000000000000000000000092 -:106F00000000000000000000000000000000000081 -:106F10000000000000000000000000000000000071 -:106F20000000000000000000000000000000000061 -:106F30000000000000000000000000000000000051 -:106F40000000000000000000000000000000000041 -:106F50000000000000000000000000000000000031 -:106F60000000000000000000000000000000000021 -:106F70000000000000000000000000000000000011 -:106F80000000000000000000000000000000000001 -:106F900000000000000000000000000000000000F1 -:106FA00000000000000000000000000000000000E1 -:106FB00000000000000000000000000000000000D1 -:106FC00000000000000000000000000000000000C1 -:106FD00000000000000000000000000000000000B1 -:106FE00000000000000000000000000000000000A1 -:106FF0000000000000000000000000000000000091 -:107000000000000000000000000000000000000080 -:107010000000000000000000000000000000000070 -:107020000000000000000000000000000000000060 -:107030000000000000000000000000000000000050 -:107040000000000000000000000000000000000040 -:107050000000000000000000000000000000000030 -:107060000000000000000000000000000000000020 -:107070000000000000000000000000000000000010 -:107080000000000000000000000000000000000000 -:1070900000000000000000000000000000000000F0 -:1070A00000000000000000000000000000000000E0 -:1070B00000000000000000000000000000000000D0 -:1070C00000000000000000000000000000000000C0 -:1070D00000000000000000000000000000000000B0 -:1070E00000000000000000000000000000000000A0 -:1070F0000000000000000000000000000000000090 -:10710000000000000000000000000000000000007F -:10711000000000000000000000000000000000006F -:10712000000000000000000000000000000000005F -:10713000000000000000000000000000000000004F -:10714000000000000000000000000000000000003F -:10715000000000000000000000000000000000002F -:10716000000000000000000000000000000000001F -:10717000000000000000000000000000000000000F -:1071800000000000000000000000000000000000FF -:1071900000000000000000000000000000000000EF -:1071A00000000000000000000000000000000000DF -:1071B00000000000000000000000000000000000CF -:1071C00000000000000000000000000000000000BF -:1071D00000000000000000000000000000000000AF -:1071E000000000000000000000000000000000009F -:1071F000000000000000000000000000000000008F -:10720000000000000000000000000000000000007E -:10721000000000000000000000000000000000006E -:10722000000000000000000000000000000000005E -:10723000000000000000000000000000000000004E +:106E3000000000000000000000003FCF8FFFF3FCC7 +:106E4000FCFFFF2AABCAAAA2AAA8AAAA3FFFCFFFAB +:106E5000F3FFFCFFFF3FFFCFFFF3FFFCFFFF3FFF10 +:106E6000CFFFF3FFFCFFFF3FFFCFFFF3FFFCFFFF70 +:106E70003FFFCFFFF3FFFCFFFF3FFFCFFFF3FFFC20 +:106E8000FFFF37FFCFFFF3FFFCFFFF3FFFCFFFF315 +:106E9000FFFCFFFF3FFFCFFFF3FFFCFFFF3FFFCFF4 +:106EA000FFF3FFFCFFFF3FFFCFFFF3FFFCFFFF3FC0 +:106EB000FFCFFFF3FFFCFFFF3FFFCFFFF3FFFCFF20 +:106EC000FF3FFFCFFFF3FFFCFFFF1102CF54D223A0 +:106ED00044086423F8CC42B067FC096700F300580B +:106EE000C000247C8028670CC3B0828450D012027A +:106EF0004098018EF8EA413D00C416301FA81FF8E3 +:106F000003FFCC40908800904C066A810A10D54857 +:106F1000440B102A808AA02A9002A40001020122B8 +:106F20000100001008808022004800011022400269 +:106F300000812224024A052146408040842011001D +:106F40004401304249C02808004482928007A4408E +:106F5000400000840E01093C4100080201758008D0 +:106F60004032033014480F006040899020388181FE +:106F7000014A408508384180A0720394181014A477 +:106F800007B0801004004103A04023008000001ED1 +:106F90000005001002200018E8210A8421000C20BE +:106FA0002220109240210021000841308004080076 +:106FB00000808008071E009121BC04000100020A25 +:106FC00000414060B680050A8043E24804921112F5 +:106FD000490E202000244A10119441C060638C386F +:106FE000C70671838C70C718718E08E30120427E3A +:106FF00040000620008084000004E2022080409AC5 +:10700000E0128411BD1A118468431CE481412002FE +:107010000A4B01800025883007022C92C2588BFA57 +:107020001F1640C0330000800000024044C00090A2 +:10703000000020000110310000009C08F0078000D3 +:107040001008408600180010010B0C20611061032D +:107050000000018001000938001A22000000000031 +:1070600028CA0000010000000000030182120C0089 +:1070700050000180202020000002000001080124AF +:107080000001640482404000409003860034C00048 +:10709000000000000000000000038608010200005C +:1070A0004003000004040002108000000000000003 +:1070B0000000000010080000000000002000800018 +:1070C0000000003200000008000000000000000086 +:1070D00000000000080000000001000000000100A6 +:1070E000000002000000008040008000000000104E +:1070F00000000400F93080000000040000200000BF +:107100000600200000004000401000004000000089 +:1071100000000800000008000000200120400C448E +:10712000401000834000000C00010000000002003D +:107130000440000000000020100200006F0000006A +:10714000008000082008000000000000000000048B +:107150000000000000020000000200000208080019 +:10716000080000000000000000800420200008014A +:1071700000200800000000010200000000000000E4 +:1071800000020000040000010001040400410002AC +:10719000000006000000000000100CF800000000D5 +:1071A0000000010000000200000034040C000A028C +:1071B00001000400000000060201186C1D0000011F +:1071C000002C40B184090620F040424000182058AD +:1071D00000B00000210870961801090200C30000E9 +:1071E00003C002068C3300000800000808020F01EB +:1071F000028014020000802002020CC00203800002 +:107200001002008800C8087000B0200080921900A9 +:1072100041000020006000000000010000000000AC +:107220000308000400100000000000000600000138 +:10723000A0000004058002210020010400100000CD :10724000000000000000000000000000000000003E -:10725000000000000000000000000000000000002E -:10726000000000000000000000000000000000001E -:10727000000000000000000000000000000000000E -:1072800000000000000000000000000000000000FE -:1072900000000000000000000000000000000000EE -:1072A00000000000000000000000000000000000DE -:1072B00000000000000000000000000000000000CE -:1072C00000000000000000000000000000000000BE -:1072D00000000000000000000000000000000000AE -:1072E000000000000000000000000000000000009E -:1072F000000000000000000000000000000000008E -:10730000000000000000000000000000000000007D -:10731000000000000000000000000000000000006D -:10732000000000000000000000000000000000005D -:10733000000000000000000000000000000000004D -:10734000000000000000000000000000000000003D -:10735000000000000000000000000000000000002D -:10736000000000000000000000000000000000001D -:10737000000000000000000000000000000000000D -:1073800000000000000000000000000000000000FD -:1073900000000000000000000000000000000000ED -:1073A00000000000000000000000000000000000DD -:1073B00000000000000000000000000000000000CD -:1073C00000000000000000000000000000000000BD -:1073D00000000000000000000000000000000000AD -:1073E000000000000000000000000000000000009D -:1073F000000000000000000000000000000000008D -:10740000000000000000000000000000000000007C -:10741000000000000000000000000000000000006C -:10742000000000000000000000000000000000005C -:10743000000000000000000000000000000000004C -:10744000000000000000000000000000000000003C -:10745000000000000000000000000000000000002C -:10746000000000000000000000000000000000001C -:10747000000000000000000000000000000000000C -:1074800000000000000000000000000000000000FC -:1074900000000000000000000000000000000000EC -:1074A00000000000000000000000000000000000DC -:1074B00000000000000000000000000000000000CC -:1074C00000000000000000000000000000000000BC -:1074D00000000000000000000000000000000000AC -:1074E000000000000000000000000000000000009C -:1074F000000000000000000000000000000000008C -:10750000000000000000000000000000000000007B -:10751000000000000000000000000000000000006B -:10752000000000000000000000000000000000005B -:10753000000000000000000000000000000000004B -:10754000000000000000000000000000000000003B -:10755000000000000000000000000000000000002B -:10756000000000000000000000000000000000001B -:10757000000000000000000000000000000000000B -:1075800000000000000000000000000000000000FB -:1075900000000000000000000000000000000000EB -:1075A00000000000000000000000000000000000DB -:1075B00000000000000000000000000000000000CB -:1075C00000000000000000000000000000000000BB -:1075D00000000000000000000000000000000000AB -:1075E000000000000000000000000000000000009B -:1075F000000000000000000000000000000000008B -:10760000000000000000000000000000000000007A -:10761000000000000000000000000000000000006A -:10762000000000000000000000000000000000005A -:10763000000000000000000000000000000000004A -:10764000000000000000000000000000000000003A -:10765000000000000000000000000000000000002A -:10766000000000000000000000000000000000001A -:10767000000000000000000000000000000000000A +:107250000000000008000000000000002000000006 +:1072600000000600000008400000000004000210BA +:1072700000001100000000000020080001000100D3 +:1072800000000000044300C11000000020020800BC +:1072900000000000000000000008000000000100E5 +:1072A0000000000000000000000800001003004083 +:1072B0000000004624004D00000000020C0C40E8D5 +:1072C000A0234C32E1C872324F3C080007800820EE +:1072D0000097E03F400001080000600410880005AE +:1072E00081D011682090900008400000000000A3A9 +:1072F0003C000E0020CA0088003226889020003012 +:1073000020000000000070000008100000000000D5 +:107310000300000000000180800020040000010440 +:10732000000062103000044000000001FC0030004A +:10733000044BF00104B46070006841281110000093 +:1073400020070C4C000236040800200001F0100059 +:1073500000800600004026004C00162405294871D4 +:10736000200500108410284102906000920F398897 +:1073700000014033601F02140DC100801C08428EC2 +:1073800010E3C01800493024AE005085400000389A +:107390002498104005006040204049098000800189 +:1073A000100C01100104008080060800800090008D +:1073B0001802821040400200820C000000143001CC +:1073C0000B8120501610882609010912000B0004B9 +:1073D00043081F480022000071C006000010200072 +:1073E000000000000000000000000680000800000F +:1073F00000000000000B400000000000A800080092 +:1074000040000000E8024400120626C0047C401040 +:10741000010000E08306BC16A20203881CB3C10071 +:1074200038000300C0010000001D080008880002A9 +:10743000601C022E0000003DC0474C940600200452 +:1074400008008F0014BD074843D303D300D30000C6 +:107450000448021000188000003008000168001085 +:107460000021C00600512930001800210000030847 +:10747000EC000700E903A40000002800000440001D +:1074800011C10800C401A00C488000C40080000C99 +:107490000C004000880000000003F0100800003FCE +:1074A00018D0000221800000100980000000013087 +:1074B000980000000013018000601218000A3800D4 +:1074C000024CB0003D1047C16000000C0200138068 +:1074D0004012460015C80260405180400087881164 +:1074E0000CCC40C184400082000008004030E054D1 +:1074F0008108D4007800C03860E418098008E17081 +:1075000000039C0000080683DC04F70021528A88EF +:107510003247C440A0144D0803800E0CEB743D00AC +:10752000C1FAF0FF80FFFF0201C17D8232CC7E03F1 +:10753000008FC47A21BA3CB7FB0121C1F0F060E0B2 +:1075400000000D1ECF0C00C00081822000094612F1 +:10755000A408092000890C449103E4F21E21E40EE2 +:1075600043C03C8420791DBBCF38F3E3B418FF112E +:10757000514FFE20610C0403065C861600B2B44035 +:1075800005014000FC032E480B00195AC04293E14C +:10759000400891048A025011B4947E1004250C8492 +:1075A00020C9904C9924C9824C91326464C8264CFD +:1075B0008264C1321099080493021320C84C4C997C +:1075C00004C9826420C990C9210C9909249093248C +:1075D000084904C849932021301321264C8264C3F2 +:1075E000264C3264132649326193240842132646FE +:1075F000426264C8264C0C9904C9924C9864C9260E +:107600004C8264C3264C908419324084209084902C +:107610009908424321324C8464C9264C8264C08854 +:107620004C397A2A61CA90A29A54D4170204812D47 +:1076300053B02002C410518A76C00004F2AA164A40 +:107640004134F3C018F62505A2021210000047F4D9 +:107650001017CC005100102015007F4BBBA040CC70 +:107660000F203FFC0000F00000FFF00000000000D1 +:1076700000001000000000000000000000000000FA :1076800000000000000000000000000000000000FA :1076900000000000000000000000000000000000EA :1076A00000000000000000000000000000000000DA :1076B00000000000000000000000000000000000CA -:1076C00000000000000000000000000000000000BA +:1076C0000002000000000000000000400800000070 :1076D00000000000000000000000000000000000AA :1076E000000000000000000000000000000000009A :1076F000000000000000000000000000000000008A -:107700000000000000000000000000000000000079 -:107710000000000000000000000000000000000069 +:107700000000000000000000000200000000000077 +:107710000000004008000000000000000000000021 :107720000000000000000000000000000000000059 :107730000000000000000000000000000000000049 :107740000000000000000000000000000000000039 -:107750000000000000000000000000000000000029 -:107760000000000000000000000000000000000019 +:107750000000000000000000000000000000002801 +:1077600000000002800000266409999266649999DD :107770000000000000000000000000000000000009 :1077800000000000000000000000000000000000F9 :1077900000000000000000000000000000000000E9 -:1077A00000000000000000000000000000000000D9 +:1077A00000000000000010000000000000000000C9 :1077B00000000000000000000000000000000000C9 :1077C00000000000000000000000000000000000B9 :1077D00000000000000000000000000000000000A9 -:1077E0000000000000000000000000000000000099 -:1077F0000000000000000000000000000000000089 -:107800000000000000000000000000000000000078 -:107810000000000000000000000000000000000068 -:107820000000000000000000000000000000000058 -:107830000000000000000000000000000000000048 -:107840000000000000000000000000000000000038 -:107850000000000000000000000000000000000028 -:107860000000000000000000000000000000000018 -:107870000000000000000000000000000000000008 -:1078800000000000000000000000000000000000F8 -:1078900000000000000000000000000000000000E8 -:1078A00000000000000000000000000000000000D8 -:1078B00000000000000000000000000000000000C8 -:1078C00000000000000000000000000000000000B8 -:1078D00000000000000000000000000000000000A8 -:1078E0000000000000000000000000000000000098 -:1078F0000000000000000000000000000000000088 -:107900000000000000000000000000000000000077 -:107910000000000000000000000000000000000067 -:107920000000000000000000000000000000000057 -:107930000000000000000000000000000000000047 -:107940000000000000000000000000000000000037 -:107950000000000000000000000000000000000027 -:107960000000000000000000000000000000000017 -:107970000000000000000000000000000000000007 -:1079800000000000000000000000000000000000F7 -:1079900000000000000000000000000000000000E7 -:1079A00000000000000000000000000000000000D7 -:1079B00000000000000000000000000000000000C7 -:1079C00000000000000000000000000000000000B7 -:1079D00000000000000000000000000000000000A7 -:1079E0000000000000000000000000000000000097 -:1079F0000000000000000000000000000000000087 -:107A00000000000000000000000000000000000076 -:107A10000000000000000000000000000000000066 -:107A20000000000000000000000000000000000056 -:107A30000000000000000000000000000000000046 -:107A40000000000000000000000000000000000036 -:107A50000000000000000000000000000000000026 -:107A60000000000000000000000000000000000016 -:107A70000000000000000000000000000000000006 -:107A800000000000000000000000000000000000F6 -:107A900000000000000000000000000000000000E6 -:107AA00000000000000000000000000000000000D6 -:107AB00000000000000000000000000000000000C6 -:107AC00000000000000000000000000000000000B6 -:107AD00000000000000000000000000000000000A6 -:107AE0000000000000000000000000000000000096 -:107AF0000000000000000000000000000000000086 -:107B00000000000000000000000000000000000075 -:107B10000000000000000000000000000000000065 -:107B20000000000000000000000000000000000055 -:107B30000000000000000000000000000000000045 -:107B40000000000000000000000000000000000035 -:107B50000000000000000000000000000000000025 -:107B60000000000000000000000000000000000015 -:107B70000000000000000000000000000000000005 -:107B800000000000000000000000000000000000F5 -:107B900000000000000000000000000000000000E5 -:107BA00000000000000000000000000000000000D5 -:107BB00000000000000000000000000000000000C5 -:107BC00000000000000000000000000000000000B5 -:107BD00000000000000000000000000000000000A5 -:107BE0000000000000000000000000000000000095 -:107BF0000000000000000000000000000000000085 -:107C00000000000000000000000000000000000074 -:107C10000000000000000000000000000000000064 -:107C20000000000000000000000000000000000054 -:107C30000000000000000000000000000000000044 -:107C40000000000000000000000000000000000034 -:107C50000000000000000000000000000000000024 -:107C60000000000000000000000000000000000014 -:107C70000000000000000000000000000000000004 -:107C800000000000000000000000000000000000F4 -:107C900000000000000000000000000000000000E4 -:107CA00000000000000000000000000000000000D4 -:107CB00000000000000000000000000000000000C4 -:107CC00000000000000000000000000000000000B4 -:107CD00000000000000000000000000000000000A4 -:107CE0000000000000000000000000000000000094 -:107CF0000000000000000000000000000000000084 -:107D00000000000000000000000000000000000073 -:107D10000000000000000000000000000000000063 -:107D20000000000000000000000000000000000053 -:107D30000000000000000000000000000000000043 -:107D40000000000000000000000000000000000033 -:107D50000000000000000000000000000000000023 -:107D60000000000000000000000000000000000013 -:107D70000000000000000000000000000000000003 -:107D800000000000000000000000000000000000F3 -:107D900000000000000000000000000000000000E3 -:107DA00000000000000000000000000000000000D3 -:107DB00000000000000000000000000000000000C3 -:107DC00000000000000000000000000000000000B3 -:107DD00000000000000000000000000000000000A3 -:107DE0000000000000000000000000000000000093 -:107DF0000000000000000000000000000000000083 -:107E00000000000000000000000000000000000072 -:107E10000000000000000000000000000000000062 -:107E20000000000000000000000000000000000052 -:107E30000000000000000000000000000000000042 -:107E40000000000000000000000000000000000032 -:107E50000000000000000000000000000000000022 -:107E60000000000000000000000000000000000012 -:107E70000000000000000000000000000000000002 -:107E800000000000000000000000000000000000F2 -:107E900000000000000000000000000000000000E2 -:107EA00000000000000000000000000000000000D2 -:107EB00000000000000000000000000000000000C2 -:107EC00000000000000000000000000000000000B2 -:107ED00000000000000000000000000000000000A2 -:107EE0000000000000000000000000000000000092 -:107EF0000000000000000000000000000000000082 -:107F00000000000000000000000000000000000071 -:107F10000000000000000000000000000000000061 -:107F20000000000000000000000000000000000051 -:107F30000000000000000000000000000000000041 -:107F40000000000000000000000000000000000031 -:107F50000000000000000000000000000000000021 -:107F60000000000000000000000000000000000011 -:107F70000000000000000000000000000000000001 -:107F800000000000000000000000000000000000F1 -:107F900000000000000000000000000000000000E1 +:1077E0000000000000000000000000000000007722 +:1077F000C800007F00002401208800800C20DBC02E +:1078000026064000619910016601C0000043CE1CAD +:1078100000043ECFCFF1900184000010AA000001C7 +:107820004000200500000CDF80601C00000000000C +:1078300000000000000000000000000000A4001490 +:1078400080048001202880040014070032014038A1 +:1078500001000A0A1C00011011BC3E00008F73FFDA +:10786000AC7C0F3E3E0F19F1280C11843002081930 +:1078700000000C004020000A300176608C3621B2F6 +:10788000C18212D0F8320A02E10F082156842190F9 +:107890003C27051A1218000107010709C133E26CE1 +:1078A00001333DFC8421F0C364365034230000C111 +:1078B00000008D223F7802230040504288039C0044 +:1078C0000002F000184321800F65D06480D9761241 +:1078D00041CF9F3139F00EF00048470080101CCC9A +:1078E0000C041C4314234020A6BB12F7486503E494 +:1078F0002C6DFE2DB6C9FFD018A8290002B24C3F4E +:10790000B3D87887B03D0F487B03B0F40F61189E61 +:10791000C00401E8041848280400D40000848388C7 +:1079200006180168800004112417388450010C8067 +:10793000813525370E20021848F08B324400118023 +:10794000A3800681140500A5108C4448080B11047F +:10795000C2B1E2800810111140C421D4C40010004B +:1079600040C20601880060F50000003A0080002057 +:10797000D022000410D001206130010084C82226EA +:10798000383A63000042D822971044E7215300029E +:10799000002A44419004020204038410C0100E48DF +:1079A000C3180020403780200200057020000141EC +:1079B00000000000000000000000000000020008BD +:1079C0000000264C004500A000A1651024021320F1 +:1079D000A9000D4415538E291009000404124D0806 +:1079E0002CA090000028000700138047840B080B90 +:1079F0005808AA8281D0C1E90AAAC105200120A99C +:107A00000029010A706122A8207102A042A201206F +:107A1000100A95165140040000001B2800C04D00BC +:107A20000000084010308A8081C04A940010124043 +:107A3000050CA0A284040B2285400B203290432029 +:107A40000080040080A08010010940092880078C74 +:107A500045092654800042400021A7242001E62148 +:107A60001084404000B2800021AD10D56038E002A3 +:107A70003F22432C492001448A9011867002400A1B +:107A8000D60C08822068E00A0285C6F840800420EF +:107A90002010080100000080842204B98C9050421C +:107AA000C0002438084021230440ADC012E10E6E0E +:107AB000605544010A018000A010300C9814390A66 +:107AC000CC1B900004209A004AC828D080002D4882 +:107AD000000906A453830440002018C00612A00029 +:107AE0000B6103000002D04868BD0A01460C2F401C +:107AF000C02000040009C00140BC08000320BD00F4 +:107B00000010C00001110066000003000060322D6B +:107B10002DCE60001C5010420618C0B0C02DEC23C2 +:107B20000B0262443BD00110030000080000024930 +:107B300094454007048108A26340912B304782118D +:107B400092510490F920C38A30220300A50E15013A +:107B5000800142968028060C0A8570408504CC8BF3 +:107B6000054D0000411100620A00450901810040F5 +:107B700050A412A007005090080246020080C29153 +:107B8000C01418A005E9C0001017A4318321518545 +:107B9000426106245E3B1126C42101299046221031 +:107BA0002A02A233648030640C25040822C60460D3 +:107BB000B419D80CA1F0110C031024144801203181 +:107BC0000010C10842018300080C24420204014055 +:107BD000832368240004040006200A10C10008D68C +:107BE000000000020002C21050040020040C00102B +:107BF00002000B680081640C6005100800000000A2 +:107C0000108810018110110A0819BA0091476140CB +:107C10008B08020207900A0E6045941F54000280F0 +:107C2000000044202C140620C1394005C000112852 +:107C30003C892A901008C8A0240102008161A03468 +:107C4000452B11042141628010CE264E096002426C +:107C5000C434110064401140008010042059416672 +:107C600082100400F20000008CC110040088100093 +:107C7000010900CC084600008C0111202B2C10C8F3 +:107C80000109080180909008420D020F8A201034EB +:107C9000C08820830A8100014011D6160109C680E0 +:107CA0004014082810800101800A0027A8004381A1 +:107CB0000003802023E000440DA80243DCC5F4103B +:107CC000040082921200A9440280099B12383008F5 +:107CD000C313F282AA005A70C2000144C8002228CD +:107CE000C0160D3AC20833B2510088CE0100031A03 +:107CF000000C0C04CD2220CAD822BAE45133110062 +:107D0000C00D030A0057653B8847CEC0502C008841 +:107D1000190F042A2367701EF90841C089A0B0B06A +:107D20002BFD2A2900E401F08804440290C420803D +:107D30000024401001000080800088000004514AA7 +:107D40001081415020542F20020000C04410420EE8 +:107D5000020061D002081C280000001100C40000CD +:107D60000001200408000100101102C041000100C0 +:107D700010001000084962801FF8939E2180866ED3 +:107D800040C00450261FCB005F800BBC41240CF583 +:107D900004000022FC01042081420600204CF1C0B6 +:107DA0002000C0E513D00042B80002825801A8802C +:107DB00008013C10000420208026100064012F429E +:107DC00041405012080204014002F80090080000EF +:107DD0000010090080000001009000000000020176 +:107DE00000000000020001A000000400504000005C +:107DF000001B020F70000810000010D4024340E97D +:107E000000E5863FFD80FF03DE8CAAFF3E08805818 +:107E100053F1C04C1D180C08180014241D2D001817 +:107E20000010800240940000018200000100004028 +:107E300001000040A00400028000008198205190C1 +:107E400000C000AA040021A85407F001530000203C +:107E5000000000800000000000000078000000002A +:107E60000000183050010CC00A004047C8008601CD +:107E70002400030000000009100043E00109004B4A +:107E800008309609612212C0212504080A00100456 +:107E900018004033200800602000AEA011F80479DB +:107EA00050E2E025501415440250FC1C3CAA3170ED +:107EB00085281014148448020443210081C0101046 +:107EC00004220C8420C9904C9924C9824C913264BC +:107ED00064C8264C8264C1321099080493021320AE +:107EE000C84C4C9904C9826420C990C9210C9909D5 +:107EF00024909324084904C8499320213013212653 +:107F00004C8264C3264C32641326493261932408A0 +:107F100042132646426264C8264C0C9904C9924C0E +:107F20009864C9264C8264C3264C908419324084DC +:107F3000209084909908424321324C8464C9264C95 +:107F40008264C0884C89961126C595118024E599D4 +:107F5000020681AE4290204A4B105C013480AE0094 +:107F6000D3A50510808CC1C914B93905284080807B +:107F70000244480810154C00400010A0003D2A8F14 +:107F80001E7002E8FFC03FFFC000F0000018B00004 +:107F900000000000000040000000000000000000A1 :107FA00000000000000000000000000000000000D1 :107FB00000000000000000000000000000000000C1 :107FC00000000000000000000000000000000000B1 :107FD00000000000000000000000000000000000A1 -:107FE0000000000000000000000000000000000091 -:107FF0000000000000000000000000000000000081 +:107FE000000000000002000000000000000000008F +:107FF0000800000000000000000000000000000079 :108000000000000000000000000000000000000070 :108010000000000000000000000000000000000060 -:108020000000000000000000000000000000000050 -:108030000000000000000000000000000000000040 +:10802000000000000000000000000000000200004E +:108030000000000000000000080000000000000038 :108040000000000000000000000000000000000030 :108050000000000000000000000000000000000020 :108060000000000000000000000000000000000010 :108070000000000000000000000000000000000000 -:1080800000000000000000000000000000000000F0 -:1080900000000000000000000000000000000000E0 -:1080A00000000000000000000000000000000000D0 -:1080B00000000000000000000000000000000000C0 -:1080C00000000000000000000000000000000000B0 -:1080D00000000000000000000000000000000000A0 -:1080E0000000000000000000000000000000000090 -:1080F0000000000000000000000000000000000080 -:10810000000000000000000000000000000000006F -:10811000000000000000000000000000000000005F -:10812000000000000000000000000000000000004F -:10813000000000000000000000000000000000003F -:10814000000000000000000000000000000000002F -:10815000000000000000000000000000000000001F -:10816000000000000000000000000000000000000F -:1081700000000000000000000000000000000000FF -:1081800000000000000000000000000000000000EF -:1081900000000000000000000000000000000000DF -:1081A00000000000000000000000000000000000CF -:1081B00000000000000000000000000000000000BF -:1081C00000000000000000000000000000000000AF -:1081D000000000000000000000000000000000009F -:1081E000000000000000000000000000000000008F -:1081F000000000000000000000000000000000007F -:10820000000000000000000000000000000000006E -:10821000000000000000000000000000000000005E -:10822000000000000000000000000000000000004E -:10823000000000000000000000000000000000003E -:10824000000000000000000000000000000000002E -:10825000000000000000000000000000000000001E -:10826000000000000000000000000000000000000E -:1082700000000000000000000000000000000000FE -:1082800000000000000000000000000000000000EE -:1082900000000000000000000000000000000000DE -:1082A00000000000000000000000000000000000CE -:1082B00000000000000000000000000000000000BE -:1082C00000000000000000000000000000000000AE -:1082D000000000000000000000000000000000009E -:1082E000000000000000000000000000000000008E -:1082F000000000000000000000000000000000007E -:10830000000000000000000000000000000000006D -:10831000000000000000000000000000000000005D -:10832000000000000000000000000000000000004D -:10833000000000000000000000000000000000003D -:10834000000000000000000000000000000000002D -:10835000000000000000000000000000000000001D -:10836000000000000000000000000000000000000D -:1083700000000000000000000000000000000000FD -:1083800000000000000000000000000000000000ED -:1083900000000000000000000000000000000000DD -:1083A00000000000000000000000000000000000CD -:1083B00000000000000000000000000000000000BD -:1083C00000000000000000000000000000000000AD -:1083D000000000000000000000000000000000009D -:1083E000000000000000000000000000000000008D -:1083F000000000000000000000000000000000007D -:10840000000000000000000000000000000000006C -:10841000000000000000000000000000000000005C -:10842000000000000000000000000000000000004C -:10843000000000000000000000000000000000003C -:10844000000000000000000000000000000000002C -:10845000000000000000000000000000000000001C -:10846000000000000000000000000000000000000C -:1084700000000000000000000000000000000000FC -:1084800000000000000000000000000000000000EC -:1084900000000000000000000000000000000000DC -:1084A00000000000000000000000000000000000CC -:1084B00000000000000000000000000000000000BC -:1084C00000000000000000000000000000000000AC -:1084D000000000000000000000000000000000009C -:1084E000000000000000000000000000000000008C -:1084F000000000000000000000000000000000007C -:10850000000000000000000000000000000000006B -:10851000000000000000000000000000000000005B -:10852000000000000000000000000000000000004B -:10853000000000000000000000000000000000003B -:10854000000000000000000000000000000000002B -:10855000000000000000000000000000000000001B -:10856000000000000000000000000000000000000B -:1085700000000000000000000000000000000000FB -:1085800000000000000000000000000000000000EB -:1085900000000000000000000000000000000000DB -:1085A00000000000000000000000000000000000CB -:1085B00000000000000000000000000000000000BB -:1085C00000000000000000000000000000000000AB -:1085D000000000000000000000000000000000009B -:1085E000000000000000000000000000000000008B -:1085F000000000000000000000000000000000007B -:10860000000000000000000000000000000000006A -:10861000000000000000000000000000000000005A -:10862000000000000000000000000000000000004A -:10863000000000000000000000000000000000003A -:10864000000000000000000000000000000000002A -:10865000000000000000000000000000000000001A -:10866000000000000000000000000000000000000A -:1086700000000000000000000000000000000000FA -:1086800000000000000000000000000000000000EA -:1086900000000000000000000000000000000000DA -:1086A00000000000000000000000000000000000CA -:1086B00000000000000000000000000000000000BA -:1086C00000000000000000000000000000000000AA -:1086D000000000000000000000000000000000009A -:1086E000000000000000000000000000000000008A -:1086F000000000000000000000000000000000007A -:108700000000000000000000000000000000000069 -:108710000000000000000000000000000000000059 -:108720000000000000000000000000000000000049 -:108730000000000000000000000000000000000039 -:108740000000000000000000000000000000000029 -:108750000000000000000000000000000000000019 -:108760000000000000000000000000000000000009 -:1087700000000000000000000000000000000000F9 -:1087800000000000000000000000000000000000E9 -:1087900000000000000000000000000000000000D9 -:1087A00000000000000000000000000000000000C9 -:1087B00000000000000000000000000000000000B9 -:1087C00000000000000000000000000000000000A9 -:1087D0000000000000000000000000000000000099 -:1087E0000000000000000000000000000000000089 -:1087F0000000000000000000000000000000000079 -:108800000000000000000000000000000000000068 -:108810000000000000000000000000000000000058 -:108820000000000000000000000000000000000048 -:108830000000000000000000000000000000000038 -:108840000000000000000000000000000000000028 -:108850000000000000000000000000000000000018 -:108860000000000000000000000000000000000008 +:108080000000046D41555046C411112EEC4BBBB29B +:10809000EEECBBBB044441111044441111044441B3 +:1080A00011104444111104444111104444111104AD +:1080B000444111104444111104444111104444112D +:1080C0001104444111104444111115444115104448 +:1080D000441111044441111044441111044441114C +:1080E000104444111104444111104444111104443A +:1080F0004111104444111104444111104444111120 +:1081000004444111104444111104444111104444E9 +:10811000111106BD4E0100FC98B5BF0DFF09AD4120 +:10812000E9F8768E3FFD4B93F3FFF8F9FF038E4994 +:10813000EFF35D3887052D5D8F62B13FEC7FAE3F79 +:10814000FF0AE4F3F8FCA7FF1CB8C7BF63737C27E2 +:10815000B138974E74E12E9099F427DD0F7743DD07 +:1081600024BD4937FC4CFE817C6CFFEF36370FDDB8 +:10817000F3A37CFEEF1D1BCDFF724F7C7FB43A7FD3 +:1081800088DF73BF78FFEE3FBACEDBB3F6ECFBBD02 +:1081900035EFCDEFB002FC404800088B73F2F6C417 +:1081A0009E7E33F5CBDA33F3BC9EDC07E987DE73C2 +:1081B0009F9C34F61F7F4E7E72959831B733AE0F79 +:1081C0005F91F7E8E7E729598FAB71E7E87EB63CA6 +:1081D000178FCCF33AFCDFE03FFE4EE750CEF4635E +:1081E000A30EF549CE73F1CCDD5F276D8FDEF1CEA6 +:1081F000ACF7BE0757CBB7737B747FF338EF4F4CA8 +:10820000C25FF8EDFE2EBCC4DEB29D986F7D3AF5DC +:108210004FBDC1B5FC6DEE2DB6CFDFD2BFF873C533 +:108220002F678EFF93DCF8CFB93B9F4CFB93B9F4DB +:108230009F7335BECFFF91CF9C7FFD1AFFCF7BB2DE +:10824000B6F80DFC0F3EC768E16030FE4025EE81B8 +:1082500095F07128F6BE3DFDC5F452BFECDA331738 +:10826000E9CDDF613DA0F56D27E9C7AF83BEDCEF47 +:10827000FF1FDFCDEFF3F7F87EFD37BFC6EDF3FD4F +:10828000FCFF7E377EC3F7F3A774F7FF3EDDCBFF1D +:10829000B2B7AC7BD637AC4FBFF3DE5CFA763B7D32 +:1082A00045EF61DF746DF735FDCFFDE2BFB4FBEE46 +:1082B0003FDFC7BFD37FFC7F952EDBC7AD73CEF406 +:1082C000DBFC3EDFC6B5F36E54B7EE2DD6CD2D7177 +:1082D000ABB8B5590039C000000000000000000034 +:1082E0000003F7B876BC3EDD86FCF3ED7CEFDF36AD +:1082F000FFCEF7F37FF8DEBD3BFF4FF761B6FCDB47 +:10830000FF3DDAC6DBF36FFC6EDE1B9D4B6FF2DFC9 +:10831000ACBBDD3BDF4DADE2F7ECBBD7377FCFFE2B +:10832000E1B6DC7FFF17B6CFEEF2EDDCDFFF1B55C9 +:108330008DFF73FF6CED7B2DFF86DB52F27C377D6A +:108340001FFFCBEBB1CED4FFEF36D7CF7FF1B7FC19 +:10835000156D3DB50AFBF3FF74EEB63F768AB6F1B4 +:10836000EED4FFEB2E9B4FDDD3EEBC57DD1BF6CFDB +:108370007BB375BCDB5B2D7B8DDDD3FDA8FFFF1BC5 +:108380006B47F6F3F1B4FAF72B6FCFF2D1F7ACF7F6 +:10839000EB3FFDCF7FF3DFD8D76D3FEDC7FDE3EFB8 +:1083A000FC6DBF17FDC6B6B3F77CFF772D7BCDFF05 +:1083B000B36B58DADA36B686B771BBACFD6F1FFE09 +:1083C0004DBB72DFD8FDDB3FF78FFBD35B587FF7E8 +:1083D0003FF6CB7B53B6DC6FDB3ABF47AD61BEBC2B +:1083E000BD6D3F1ECEBF71DDACEEFA2EF6CB5BB39A +:1083F000ADAC6BFA3FDBC5FD52FF6CB6DD2BFBCF9E +:10840000EDF2BEFCCAFF2EAC859FF37BECFFB837C4 +:108410003FCFFFF1EF7C6B3F167BCFF773FDBCFFC7 +:108420007F3FFFCCF7F3FFF8EDFB2CEF0FFFE3B638 +:10843000A0FD763EFDCD71F3FFFCB7FF2EBBCFCD87 +:10844000D2FFFCF75F3FEECBBFD1B734EFF535BDC0 +:10845000CD7EC1FDDC4D7F172C8F56D3DBB4BEF72C +:1084600035AF47DEF1B77CD5EE25F78ABB6357B44D +:10847000EFDE2DFBC95B73DE48DBBF3ADF4DF760F3 +:10848000AB4CEEBB3B6B4AADF2FBACDFF51EF68EA0 +:10849000EDF377B86EDF3BDBCFEF63DEF4B6EE1DB6 +:1084A0006D4EF6F3D75CEABE3BFF8B7D72B7B42D01 +:1084B000FB3FADCB6AF1BD68DF7B2AADCDBDE2BF2E +:1084C000DCD76536EE8DB663DEFC7B7D1AEEC76BBE +:1084D000B3F76C769E1DF3CEDBF17ADCD76F3DF7F8 +:1084E0008EDFA3BD74DFBE3B758B576156ECBB7747 +:1084F0001AD34B6BC3AEFCEDD53DB5C8CEA1DE742F +:10850000BAEF2BEFCF5EE326088EB22956C5B8E14D +:10851000B54477FF3BD6C7DFF37F5CC7BE2EAE45C1 +:108520006DF1FFF86B552FFAC6EDE2F7DC3B671DE6 +:10853000F78FF7F1BFD8D7F73BF78DFED1BFFC37E8 +:10854000FF376D4DBAF2EEF4FDB737778B7DB1BBD7 +:10855000F4736F3BBDCBFFD1B7BCFDBF2DDD87FBF7 +:1085600073EAFCDFB73F568B6DD1B5A4DBD72EFB8A +:108570004BB5D2BA70EDDB176EC6CBB273ECF6BE5C +:108580001DD786D5A26FDC6BDF1BFF8FFEF3EADC05 +:10859000B3BF376ECFFBB1FDB8DF6F3FFECDFFB28B +:1085A000FF7CABF92E72C3DA71BFB4BDEF3D7ECF55 +:1085B000BFF3F5FC3F733FFECF7EF37EF8EFDC2E7A +:1085C000BEC7FF72FF7C995F3BFDCF7FD39BF87BDB +:1085D0005F3DA74EFDF3DFDCF7FF3FBB4FFFB2DF90 +:1085E000FCDFFE3FEF4F57F3FBDCF6BB37FF4FBF1F +:1085F000F37FFCF7D737EDC7FF73FEECDFFF3FFDDE +:10860000CEFFF2EBB4EEFD3FF7C66FF3EFFCDDFDFE +:1086100033B64F6EE377BCBABE1DE3C7EFD1F7DCCC +:10862000ABEF3F7BCDEB63B7BCEEED3FBBCFEFE2F3 +:10863000FBFCFF7F1F97CDFDF3F7F4FFFD37BFCEA7 +:10864000DBE3BFBCD7FF36FFCFFBE1F574ECEB37C4 +:108650007F88F793D9A8AF6E36EEC7F753FD506FFA +:108660007D3CDD43FF715EDCDFB73C7BC7EFB1DFF4 +:108670005CB7FF1FB74EEBF0F6ECBCDF3EF78B5E4E +:10868000F3AF9CB9D82EF74AF5B22CACA5CE1AB6EA +:108690008DE7B1E7B4E7B71559CADFE1BFFC7FBF8B +:1086A0003F7BC7DED3F6DCEFEF3FFF87FF916BFC2C +:1086B0006DFD1FFDC757B072FCF77F2FF2CFCBB116 +:1086C0006EECFFD536F9CFFFF3F6B4F7EF3DCF8E62 +:1086D000F531AFFCFD5B3DBF4F7F22EFD06FBB3666 +:1086E000FD4FFF62DB7CDFFF3EE74DD573EEF8DD2B +:1086F000FB3DDB4DBBB1DFB8DDB71BBBCDFBB1DB59 +:1087000074FBBF3AEF8D5EF2EF7CC75A3E7DCFEF30 +:10871000F2B7F8BF7E3BDFCF7BF0DFBC6F623FBDBF +:108720008BFEE19754FFB73FF3CFFFF25A9C7E7D5B +:108730003F7DC6FDB3CDFCEEBD1F3E8BBFB1FDFC42 +:10874000FF7F3FB3CAB3F266E86F392DB7CF562328 +:108750007EECDFBB3DFDCC31739BECD5FF371E4378 +:10876000BDD373B47DD90FFF0F8F632FFCFFF13D95 +:108770007EC787F0C710E3FD35DC4D0EB3F8845A91 +:10878000BF2EFE4E1D11B7B4FBAB37EFC076D36FD3 +:10879000DC3EDF376EC69FB149B4F44F1F6247FA23 +:1087A00023DD787F6F36FECFEDF2DFD8FBBF26CC1E +:1087B000C073D074C8E3D72EEE4E2BD2B670FFFF35 +:1087C0003FE9CCEFF3D7DCFFFF3FDFCFC7F3F4FC8B +:1087D00077FF2BEF8FFFF23FDCBDFF2FFECDF7724F +:1087E000EFEC7CFB0420008420081040810408008A +:1087F0004081020404082040820401021081080420 +:1088000010021020084040810408020420081008CB +:108810002100810104101020084104084810202183 +:108820000010212040820400204002041020410258 +:10883000001020084210204042020408204000811D +:108840000408104080040820408204002040108466 +:10885000010200842010841081084200210040841D +:10886000040820408204008840000000000000004E :1088700000000000000000000000000000000000F8 -:1088800000000000000000000000000000000000E8 -:1088900000000000000000000000000000000000D8 -:1088A00000000000000000000000000000000000C8 -:1088B00000000000000000000000000000000000B8 +:1088800000000000000000000000000000000010D8 +:108890000000000000000000000200000000002AAC +:1088A00000080808A8204088000000000000000020 +:1088B00000CE1017FC0000E00000400000000000A7 :1088C00000000000000000000000000000000000A8 :1088D0000000000000000000000000000000000098 -:1088E0000000000000000000000000000000000088 -:1088F0000000000000000000000000000000000078 -:108900000000000000000000000000000000000067 -:108910000000000000000000000000000000000057 +:1088E0000000000003FF00FFFF3FFFCFFFF3FFFC8E +:1088F000FFFF3FFFCFFFF3FFFCFFFF3FFFCFFFF383 +:10890000FFFCFFFF3FFFCFFFF00AFC00000010005C +:10891000000000001820000000000000000000001F :108920000000000000000000000000000000000047 -:108930000000000000000000000000000000000037 -:108940000000000000000000000000000000000027 -:108950000000000000000000000000000000000017 +:10893000000000000000000000003FFFCFFFF3FF39 +:10894000FCFFFF3FFFCFFFF3FFFCFFFF3FFFCFFF29 +:10895000F00AFC00000010000000000018200000D9 :108960000000000000000000000000000000000007 :1089700000000000000000000000000000000000F7 :1089800000000000000000000000000000000000E7 :1089900000000000000000000000000000000000D7 -:1089A00000000000000000000000000000000000C7 -:1089B00000000000000000000000000000000000B7 +:1089A0000000000000000008000000008000002619 +:1089B0006409999266649999000000000000000023 :1089C00000000000000000000000000000000000A7 :1089D0000000000000000000000000000000000097 -:1089E0000000000000000000000000000000000087 +:1089E0000000000000000000000000000000100077 :1089F0000000000000000000000000000000000077 :108A00000000000000000000000000000000000066 :108A10000000000000000000000000000000000056 :108A20000000000000000000000000000000000046 -:108A30000000000000000000000000000000000036 -:108A40000000000000000000000000000000000026 -:108A50000000000000000000000000000000000016 -:108A60000000000000000000000000000000000006 -:108A700000000000000000000000000000000000F6 -:108A800000000000000000000000000000000000E6 -:108A900000000000000000000000000000000000D6 -:108AA00000000000000000000000000000000000C6 -:108AB00000000000000000000000000000000000B6 -:108AC00000000000000000000000000000000000A6 -:108AD0000000000000000000000000000000000096 -:108AE0000000000000000000000000000000000086 -:108AF0000000000000000000000000000000000076 -:108B00000000000000000000000000000000000065 -:108B10000000000000000000000000000000000055 -:108B20000000000000000000000000000000000045 -:108B30000000000000000000000000000000000035 -:108B40000000000000000000000000000000000025 -:108B50000000000000000000000000000000000015 -:108B60000000000000000000000000000000000005 -:108B700000000000000000000000000000000000F5 -:108B800000000000000000000000000000000000E5 -:108B900000000000000000000000000000000000D5 -:108BA00000000000000000000000000000000000C5 -:108BB00000000000000000000000000000000000B5 -:108BC00000000000000000000000000000000000A5 -:108BD0000000000000000000000000000000000095 -:108BE0000000000000000000000000000000000085 -:108BF0000000000000000000000000000000000075 -:108C00000000000000000000000000000000000064 -:108C10000000000000000000000000000000000054 -:108C20000000000000000000000000000000000044 -:108C30000000000000000000000000000000000034 -:108C40000000000000000000000000000000000024 -:108C50000000000000000000000000000000000014 -:108C60000000000000000000000000000000000004 -:108C700000000000000000000000000000000000F4 -:108C800000000000000000000000000000000000E4 -:108C900000000000000000000000000000000000D4 -:108CA00000000000000000000000000000000000C4 -:108CB00000000000000000000000000000000000B4 -:108CC00000000000000000000000000000000000A4 -:108CD0000000000000000000000000000000000094 -:108CE0000000000000000000000000000000000084 -:108CF0000000000000000000000000000000000074 -:108D00000000000000000000000000000000000063 -:108D10000000000000000000000000000000000053 -:108D20000000000000000000000000000000000043 -:108D30000000000000000000000000000000000033 -:108D40000000000000000000000000000000000023 -:108D50000000000000000000000000000000000013 -:108D60000000000000000000000000000000000003 -:108D700000000000000000000000000000000000F3 -:108D800000000000000000000000000000000000E3 -:108D900000000000000000000000000000000000D3 -:108DA00000000000000000000000000000000000C3 -:108DB00000000000000000000000000000000000B3 -:108DC00000000000000000000000000000000000A3 -:108DD0000000000000000000000000000000000093 -:108DE0000000000000000000000000000000000083 -:108DF0000000000000000000000000000000000073 -:108E00000000000000000000000000000000000062 -:108E10000000000000000000000000000000000052 -:108E20000000000000000000000000000000000042 -:108E30000000000000000000000000000000000032 -:108E40000000000000000000000000000000000022 -:108E50000000000000000000000000000000000012 -:108E60000000000000000000000000000000000002 -:108E700000000000000000000000000000000000F2 -:108E800000000000000000000000000000000000E2 -:108E900000000000000000000000000000000000D2 -:108EA00000000000000000000000000000000000C2 -:108EB00000000000000000000000000000000000B2 -:108EC00000000000000000000000000000000000A2 -:108ED0000000000000000000000000000000000092 -:108EE0000000000000000000000000000000000082 -:108EF0000000000000000000000000000000000072 -:108F00000000000000000000000000000000000061 -:108F10000000000000000000000000000000000051 -:108F20000000000000000000000000000000000041 -:108F30000000000000000000000000000000000031 -:108F40000000000000000000000000000000000021 -:108F50000000000000000000000000000000000011 -:108F60000000000000000000000000000000000001 -:108F700000000000000000000000000000000000F1 -:108F800000000000000000000000000000000000E1 -:108F900000000000000000000000000000000000D1 -:108FA00000000000000000000000000000000000C1 -:108FB00000000000000000000000000000000000B1 -:108FC00000000000000000000000000000000000A1 -:108FD0000000000000000000000000000000000091 -:108FE0000000000000000000000000000000000081 -:108FF0000000000000000000000000000000000071 -:109000000000000000000000000000000000000060 -:109010000000000000000000000000000000000050 -:109020000000000000000000000000000000000040 -:109030000000000000000000000000000000000030 -:109040000000000000000000000000000000000020 -:109050000000000000000000000000000000000010 -:109060000000000000000000000000000000000000 -:1090700000000000000000000000000000000000F0 -:1090800000000000000000000000000000000000E0 -:1090900000000000000000000000000000000000D0 -:1090A00000000000000000000000000000000000C0 -:1090B00000000000000000000000000000000000B0 -:1090C00000000000000000000000000000000000A0 -:1090D0000000000000000000000000000000000090 -:1090E0000000000000000000000000000000000080 -:1090F0000000000000000000000000000000000070 -:10910000000000000000000000000000000000005F -:10911000000000000000000000000000000000004F -:10912000000000000000000000000000000000003F -:10913000000000000000000000000000000000002F -:10914000000000000000000000000000000000001F -:10915000000000000000000000000000000000000F -:1091600000000000000000000000000000000000FF -:1091700000000000000000000000000000000000EF -:1091800000000000000000000000000000000000DF -:1091900000000000000000000000000000000000CF -:1091A00000000000000000000000000000000000BF -:1091B00000000000000000000000000000000000AF -:1091C000000000000000000000000000000000009F -:1091D000000000000000000000000000000000008F +:108A3000000000000000007E00000305E8DEBB1619 +:108A4000068AD5A2EC008316150E0C15E154F0E24F +:108A50005504168AF7406140880630EE0001D04385 +:108A600084101012000F7570007C60002E000A0048 +:108A7000701DB4453A019F4881033EA01208041DB1 +:108A80004007501D4411510284848091A4848004C5 +:108A900002420200002420100001210F08009180F2 +:108AA0008841008ACC08800C101C7039C300EDF09E +:108AB0003E0081461A13013100001080400000057D +:108AC000880289106EB835C50C0051CD3C2C4A295E +:108AD0001DC7E0914E68B9621E80C053A35FC854A1 +:108AE0009F04F484DAC3D81C2F692180081072EB2C +:108AF00088B8A2311B8712A0457844B33E728738EC +:108B0000A11764210337598EF7B35EB4EA161A7FB2 +:108B1000CE6AD293549AB529ABC2C5928C585B5D8C +:108B20000130088841E0088D6A3359480810AAC806 +:108B3000A9461D1E8B32125E846DC02DB6C027D390 +:108B4000D6945ADA3DD5CB0F10560860AC04C14616 +:108B50000AC0AC14C1582602807D62B1ECBC9525D8 +:108B600079CEA7D14B44935111468A1002B8C06503 +:108B70002416B3424EF2A8B083E8176E468BA15973 +:108B800064695018A587E2708E94788018F4822C5E +:108B900090532CA7EF04D2C0A7C0113C16AC1BCE3B +:108BA000883E4032F8BFE33E8680353242989BEDE6 +:108BB0000D00C1E782AC00811529E08404E1EF8853 +:108BC0009C0A01800278220898389912E0812612C6 +:108BD0004A58113328D8801C015564144213600987 +:108BE000161077702B6F0827029001201420203474 +:108BF000160D49612B80C051000A000000000000E2 +:108C00000000000000001050B94825268B0A025AC7 +:108C1000A4148A2A54C5E98216F4461A015C01504C +:108C2000B2587CA9F60850016151A37011212C881B +:108C30004491B32AD0C35E031B8EE2D17A340883F9 +:108C4000182B0EEA125B0C16FF025B0B8232160821 +:108C50000FBA28D2C85DF2DEB46C2030AB832D2071 +:108C600004BC499E0E7BCE8181D518BFC01A214E0F +:108C70003EF2C16C44B01E9108715157346E5817C2 +:108C8000360E5850B094AFD524AD02CDD2F6108B2D +:108C9000CC257B461581321015AD370944D6D27EDE +:108CA00054FE943D1C4B2653C0907EF525854FF90C +:108CB000618A04F0AD22BCC7794117E422AA1E42A2 +:108CC000C16FE26998961F016F8A5841DE345FA137 +:108CD0000C39445791A56C6969225A4B8B7239241F +:108CE00016B11A068355C129207F6507E3CF5DC001 +:108CF0002D6812352CFB4E3E026B48AB681CA80455 +:108D000035822A9C25B53E0EC697325DA454632E4B +:108D1000B4CD83C32EEC8EE62328877241D5908B89 +:108D20006A35E500F743A10003D424550AA1218444 +:108D3000345514128AC5D550E724B5422A800EDA7C +:108D4000E354C451252B55446320BDF45220153102 +:108D500042CC71CA20289A3C14CAC0910254DA034A +:108D600030C509B12199C418AC24150C0631D0C8FE +:108D7000200206CF88CF507790960A044100082041 +:108D80002020835A3A1703C2B28930148206B28473 +:108D90000C0152D076CA34A9026521850404251D30 +:108DA000614459110414C948051803514034040D95 +:108DB000F01E024426E0FA002448160D0D5022044D +:108DC0004CCB09209284BA312650492A3DD6CD9108 +:108DD00020128804A23401050C01911C4B2A044E78 +:108DE0004ECCD218C8A40004CD829191C8D0814D38 +:108DF0002D02C18C8284045421018C880951B94808 +:108E000005000E714E9E2321448AD11D948C44206E +:108E10000208197B2EE1422D820934D5D5355DC576 +:108E20007062E6B882740523426363AA2014EA1ACA +:108E300094050143F938380D3C060F3EB19230E8F5 +:108E4000C5300E8849F2000055CC07F14B12F31CD7 +:108E50007440B12ED4470980DFEC4B8304F8CBF388 +:108E6000727A3CC6F91022C182F1715030CE13BB28 +:108E700004AA011030B59E34B2CDFF429B449B360C +:108E800008E4887CF28AEC4DD61459C430935628F5 +:108E90005550113885868034848E541A53011C2114 +:108EA00048008A492E9E0A1A01B7D88D012CF383F7 +:108EB0007233BB48D5570A374404C2965829A000DC +:108EC000950D2E827C1049F214A44504A24348D289 +:108ED0009400A54A44500A681C340630401D818B1A +:108EE0003C34151A58022BA2182C62840546844182 +:108EF000A0A0449C303E6881D22027A0D4213EDC33 +:108F0000CBD3B108BC113C2A138BEA6141E0119824 +:108F1000081F818FD318BC6A113BBC48AA20CD8C96 +:108F2000133C03F20203A14D10D8C63F904AA5F1AD +:108F3000993C35F204CA8C957308DC2ED20D010BD6 +:108F4000A2B2E148742419990E859349DCB1120844 +:108F5000A10932224B00F8F70D984092C21604FF87 +:108F6000C70CFA0E05D34B082CFE0CC48D1DE00572 +:108F70009C7326393F0540A0AAC4579739770A9AAF +:108F8000E0B54858862B464723421AC8C7D10A9DE8 +:108F90000994526D68C0E725C5C30CA11840016152 +:108FA00013108C030150A0DAE5353A854AD08100D0 +:108FB00096D110EC4828C028C028C22A808C0E0206 +:108FC00092C82DC518010C67629D480F020AE00186 +:108FD000A02011A4B44009630552509628F2400A1B +:108FE000418105820660D6AA2A180045C1339866D9 +:108FF000B23B054951002128B2492AD9092A828465 +:1090000010B6012A1A85992269A4E9592680828915 +:10901000212454C50000410098A050080413098A77 +:10902000050080413043DC0C0942B02160300A2C3D +:1090300000A280158113A4981B3CDD0AE4A14C0416 +:109040003004080940882288A84B1A2AABC2AA21FA +:1090500048E826550A544D76D2AD643ED422B281FA +:10906000EFD224548A5623444501128B3480421097 +:10907000510180412E70051C180A40040068100040 +:109080000A0028044E02984011C202000007A1887D +:10909000000000082B0803110820005028200201BE +:1090A000024100180430BC0C0C023544C5EC3230CF +:1090B0000C9D2370504EEA189148EE015104BC8477 +:1090C0000BE4021E43261C82B02B0540560160AC07 +:1090D00064C1376E0AB5D00C50C5C03FEC4001F1F9 +:1090E00028A8005400720D00037918108220800314 +:1090F0000100390080003C8D8005600280460E131F +:109100002046218012080155042408842089104833 +:109110009104890048912244448824488244812251 +:1091200010910804120212208848489104890244D0 +:109130002089108821089101041012240841048814 +:1091400049122021201221244882448224482244AA +:1091500012244122411224084212244442424488EB +:109160002448089104891048904489244882448204 +:109170002448108411224084201084109108424217 +:1091800021204884448924488244808848ECB204E1 +:1091900035CC10308050D90B0004010DA214001002 +:1091A000450340048D604C9884282540810051007F +:1091B00054903A088942021000444BDC1017CC004E +:1091C000000010DD402877CA47200190F0203FFFC3 +:1091D000C000F0000010A0000000000000007000BF :1091E000000000000000000000000000000000007F :1091F000000000000000000000000000000000006F :10920000000000000000000000000000000000005E :10921000000000000000000000000000000000004E -:10922000000000000000000000000000000000003E -:10923000000000000000000000000000000000002E +:10922000000000000000000000000000000200003C +:1092300000000000000000400800000000000000E6 :10924000000000000000000000000000000000001E :10925000000000000000000000000000000000000E :1092600000000000000000000000000000000000FE -:1092700000000000000000000000000000000000EE -:1092800000000000000000000000000000000000DE +:1092700000000000000200000000000000000040AC +:1092800008000000000000000000000000000000D6 :1092900000000000000000000000000000000000CE :1092A00000000000000000000000000000000000BE :1092B00000000000000000000000000000000000AE -:1092C000000000000000000000000000000000009E -:1092D000000000000000000000000000000000008E +:1092C0000000000000000000000000040011100079 +:1092D0004000000888022220888822220000000026 :1092E000000000000000000000000000000000007E :1092F000000000000000000000000000000000006E :10930000000000000000000000000000000000005D -:10931000000000000000000000000000000000004D +:109310000000044000010000000000000000000008 :10932000000000000000000000000000000000003D :10933000000000000000000000000000000000002D :10934000000000000000000000000000000000001D -:10935000000000000000000000000000000000000D -:1093600000000000000000000000000000000000FD -:1093700000000000000000000000000000000000ED -:1093800000000000000000000000000000000000DD -:1093900000000000000000000000000000000000CD -:1093A00000000000000000000000000000000000BD -:1093B00000000000000000000000000000000000AD -:1093C000000000000000000000000000000000009D -:1093D000000000000000000000000000000000008D -:1093E000000000000000000000000000000000007D -:1093F000000000000000000000000000000000006D -:10940000000000000000000000000000000000005C -:10941000000000000000000000000000000000004C -:10942000000000000000000000000000000000003C -:10943000000000000000000000000000000000002C -:10944000000000000000000000000000000000001C -:10945000000000000000000000000000000000000C -:1094600000000000000000000000000000000000FC -:1094700000000000000000000000000000000000EC -:1094800000000000000000000000000000000000DC -:1094900000000000000000000000000000000000CC -:1094A00000000000000000000000000000000000BC -:1094B00000000000000000000000000000000000AC -:1094C000000000000000000000000000000000009C -:1094D000000000000000000000000000000000008C -:1094E000000000000000000000000000000000007C -:1094F000000000000000000000000000000000006C -:10950000000000000000000000000000000000005B -:10951000000000000000000000000000000000004B -:10952000000000000000000000000000000000003B -:10953000000000000000000000000000000000002B -:10954000000000000000000000000000000000001B -:10955000000000000000000000000000000000000B -:1095600000000000000000000000000000000000FB -:1095700000000000000000000000000000000000EB -:1095800000000000000000000000000000000000DB -:1095900000000000000000000000000000000000CB -:1095A00000000000000000000000000000000000BB -:1095B00000000000000000000000000000000000AB -:1095C000000000000000000000000000000000009B -:1095D000000000000000000000000000000000008B -:1095E000000000000000000000000000000000007B -:1095F000000000000000000000000000000000006B -:10960000000000000000000000000000000000005A -:10961000000000000000000000000000000000004A -:10962000000000000000000000000000000000003A -:10963000000000000000000000000000000000002A -:10964000000000000000000000000000000000001A -:10965000000000000000000000000000000000000A -:1096600000000000000000000000000000000000FA -:1096700000000000000000000000000000000000EA -:1096800000000000000000000000000000000000DA -:1096900000000000000000000000000000000000CA -:1096A00000000000000000000000000000000000BA -:1096B00000000000000000000000000000000000AA -:1096C000000000000000000000000000000000009A -:1096D000000000000000000000000000000000008A -:1096E000000000000000000000000000000000007A -:1096F000000000000000000000000000000000006A -:109700000000000000000000000000000000000059 -:109710000000000000000000000000000000000049 -:109720000000000000000000000000000000000039 -:109730000000000000000000000000000000000029 -:109740000000000000000000000000000000000019 -:109750000000000000000000000000000000000009 -:1097600000000000000000000000000000000000F9 -:1097700000000000000000000000000000000000E9 -:1097800000000000000000000000000000000000D9 -:1097900000000000000000000000000000000000C9 -:1097A00000000000000000000000000000000000B9 -:1097B00000000000000000000000000000000000A9 -:1097C0000000000000000000000000000000000099 -:1097D0000000000000000000000000000000000089 -:1097E0000000000000000000000000000000000079 -:1097F0000000000000000000000000000000000069 -:109800000000000000000000000000000000000058 -:109810000000000000000000000000000000000048 -:109820000000000000000000000000000000000038 -:109830000000000000000000000000000000000028 -:109840000000000000000000000000000000000018 -:109850000000000000000000000000000000000008 -:1098600000000000000000000000000000000000F8 -:1098700000000000000000000000000000000000E8 -:1098800000000000000000000000000000000000D8 -:1098900000000000000000000000000000000000C8 -:1098A00000000000000000000000000000000000B8 -:1098B00000000000000000000000000000000000A8 -:1098C0000000000000000000000000000000000098 -:1098D0000000000000000000000000000000000088 -:1098E0000000000000000000000000000000000078 -:1098F0000000000000000000000000000000000068 -:109900000000000000000000000000000000000057 -:109910000000000000000000000000000000000047 -:109920000000000000000000000000000000000037 -:109930000000000000000000000000000000000027 -:109940000000000000000000000000000000000017 -:109950000000000000000000000000000000000007 -:1099600000000000000000000000000000000000F7 -:1099700000000000000000000000000000000000E7 -:1099800000000000000000000000000000000000D7 -:1099900000000000000000000000000000000000C7 -:1099A00000000000000000000000000000000000B7 -:1099B00000000000000000000000000000000000A7 -:1099C0000000000000000000000000000000000097 -:1099D0000000000000000000000000000000000087 -:1099E0000000000000000000000000000000000077 -:1099F0000000000000000000000000000000000067 -:109A00000000000000000000000000000000000056 -:109A10000000000000000000000000000000000046 -:109A20000000000000000000000000000000000036 -:109A30000000000000000000000000000000000026 -:109A40000000000000000000000000000000000016 -:109A50000000000000000000000000000000000006 -:109A600000000000000000000000000000000000F6 -:109A700000000000000000000000000000000000E6 -:109A800000000000000000000000000000000000D6 -:109A900000000000000000000000000000000000C6 -:109AA00000000000000000000000000000000000B6 -:109AB00000000000000000000000000000000000A6 -:109AC0000000000000000000000000000000000096 -:109AD0000000000000000000000000000000000086 -:109AE0000000000000000000000000000000000076 -:109AF0000000000000000000000000000000000066 -:109B00000000000000000000000000000000000055 +:109350000000000000000000000001C284000020A6 +:109360004C020420948002A0A090C14000B04001B3 +:10937000400040AA00000008052000000000018015 +:1093800004030014400C0029FF000053F810A2470A +:109390000010800000281801000101800002030075 +:1093A00003000006000180060001800000010000AB +:1093B0009000000000004C0060000060030000000E +:1093C0003000040400982C200060000800200000F9 +:1093D0000100100040100C1000808870C000148242 +:1093E00040000004400001102080040042054006B7 +:1093F0001032000C000214C0003001900850000030 +:10940000C008000501261800A0208514000C00806B +:1094100002B0120800800002880019006480000B6E +:109420000404C01C901100182C210A8421000C2077 +:1094300002000C02402103184808402C2444080074 +:10944000000000080514000100A8000000104102FF +:1094500000405060B2810100880290CE0408940858 +:1094600020848880002C52901345099120D2182125 +:10947000A40A43421E41A43443480906812870646B +:1094800070D0052B80C084000004820010404094FE +:10949000500080112C1211C448431CB081410202BB +:1094A0000A4A60D00025883805020802825001C2AD +:1094B0001A04400052CC10100020224894800090E2 +:1094C00080321903049111C380008908A805400067 +:1094D0000000408600100010400A181001004042B1 +:1094E00000410184410001100018222400004000C6 +:1094F000200A028001A8048000000A0102920C00E8 +:109500007B10B5086AA2200801002400090801B0F8 +:10951000A849701E0B02C28056C4020400228000BB +:1095200000000000000000000001040001200041D4 +:10953000024000022444802210C4141000080000DD +:10954000040000081108001000000008240080003A +:10955000100012C18A2400E104244024204110217B +:109560008A00000808800001035120800A08410099 +:10957000000102202000020840000001C00080120B +:1095800000002480A25028A000004400000800022F +:10959000E400800000024800669600088000000099 +:1095A00000194900004549028108BC0935128E6F37 +:1095B000F0014023EA34048E8153AA400040188809 +:1095C00006FEA3ED0001FF002008C900600C0F1883 +:1095D0001490000520085009103FEA0081F00004B3 +:1095E000200000100000001000D2002800414B4075 +:1095F0000084000000000200009CA42525214949A8 +:1096000040E00D506000040004080001004000012B +:1096100082074B00A4F4000D00090080A04120DA6D +:10962000C00044005AC0034842920D09051180F25F +:1096300054101431010E07405310040508000202B3 +:109640008100000000000CC41201504811002200EB +:10965000000B502D4C6482106F4F59208434F0164B +:1096600008214A406166684CB73D64804AB2D480A4 +:1096700002B5280A0822002D10201108020000005F +:109680006D001806000080002302508002011000C7 +:1096900010000318428000200320400100421111F5 +:1096A0000C81029002A000000000090000050000EB +:1096B0002224000A80600000120020000AD4002347 +:1096C000D4C600201D488A60814006050C60401009 +:1096D00010004000000000000000400000000000FA +:1096E0000200000008000010000000004880045440 +:1096F0000000020200A014355800C44022100420CB +:1097000002003752026A11C0285066081102029006 +:109710000140B402136A827530302802800C04C202 +:10972000A002AB00088002004108400188006104EB +:109730005404A0B2680000803980019500430053B2 +:109740002A037B0481701C00080102100838802164 +:10975000300840308180608001280000010008202E +:109760000096600A401000080000400094AA0245DC +:1097700001901148200498140C480000000000805B +:109780002C0A0E0121CA00C800383682C1200818F0 +:10979000000108800000E000008010004204000387 +:1097A0004500000000024104800500200800294413 +:1097B00090204A480000194044420000A4010008DB +:1097C000194094400000482001084050111000004A +:1097D00000220808010226881134108440A5522076 +:1097E0000066850001C22441488030200C6B420293 +:1097F000212024252902C00100004800101E10A0CD +:1098000000014023001A0211498100801808290430 +:109810001049801000292411A40040054000203088 +:10982000089010400A002060206050091000A0013C +:1098300004280150018480408084080028009000A2 +:1098400018810080200D0C00011200000811222E4A +:10985000010010401410922601200913808A40450F +:10986000422821088022206070B00C000011D02115 +:10987000240004000000000000000C8120680002A9 +:1098800000000000000A50000080000028000900CD +:109890004804924AC802140882040C00004C5090FC +:1098A00009000840810898108400020889224200BB +:1098B0005000010A880C32C54820E718248167113E +:1098C0004014086400000029824228100408004463 +:1098D0000800C9005A990449428A028A008A000095 +:1098E000000A47000610100000200200206000005F +:1098F0000010704C9FB3B5185312032008A80085C0 +:109900005C410A2141090400000400000000000835 +:10991000015000484401028422425040222426582B +:109920000808B02824040000600260012400A0267A +:10993000098306A8A103CC00C423000000100C601A +:109940003000000180C603000040001B00049000AE +:1099500004A4200028014291C20400080202290048 +:109960000190641000000100020410C00001001109 +:10997000CA484081252C01E0180000404320200106 +:109980009B14894030108230502414110000404054 +:10999000001252000800AD400404460000000C0014 +:1099A0001046945000162E00E36008600A0309FF79 +:1099B0000F80C0847CF8010201C4458106A04202E8 +:1099C00030884C0A2024040000016101101060C09E +:1099D0000400081C8F0C00000000000891084AD108 +:1099E0008000080000800084000204A014014004EC +:1099F00002802804005000808A0140541011421156 +:109A0000810400210000F38239518013F23434C7FD +:109A1000781E1FCC8470A8C409FF1A1A0FF8403CA6 +:109A20001C101100830E182012C049000427008466 +:109A300020081040892408024081020404082240C2 +:109A400082044112108108049002102008444489C5 +:109A50000408820420081009210089012490912023 +:109A60000849040848912021001021204082240147 +:109A700022400224102249020010200842112042F4 +:109A8000420204082040008104081040800408209D +:109A900040820401204490840112008420908410AC +:109AA000810842012100408404082040820400888B +:109AB00040C17C00090820E31348181731DC471126 +:109AC00091A31C1C860190CC512000802182040DA2 +:109AD0004210A1E5109BC1068801110003004DDC76 +:109AE00001088C00214500041024384C30C003CC00 +:109AF000000000000FFF03FFFC94AF000000000017 +:109B00000000D00000000000000000000000000085 :109B10000000000000000000000000000000000045 :109B20000000000000000000000000000000000035 :109B30000000000000000000000000000000000025 :109B40000000000000000000000000000000000015 -:109B50000000000000000000000000000000000005 +:109B500000020000000000000000000008000000FB :109B600000000000000000000000000000000000F5 :109B700000000000000000000000000000000000E5 :109B800000000000000000000000000000000000D5 -:109B900000000000000000000000000000000000C5 -:109BA00000000000000000000000000000000000B5 +:109B900000000000000000000002000000000000C3 +:109BA00000000000080000000000000000000000AD :109BB00000000000000000000000000000000000A5 :109BC0000000000000000000000000000000000095 :109BD0000000000000000000000000000000000085 @@ -234275,433 +234275,433 @@ :102E80000000000000000000000000000000000042 :102E90000000000000000000000000000000000032 :102EA0000000000000000000000000000000000022 -:102EB0000000000000000000000000000000000012 -:102EC0000000000000000000000000000000000002 -:102ED00000000000000000000000000000000000F2 -:102EE00000000000000000000000000000000000E2 -:102EF00000000000000000000000000000000000D2 -:102F000000000000000000000000000000000000C1 -:102F100000000000000000000000000000000000B1 -:102F200000000000000000000000000000000000A1 -:102F30000000000000000000000000000000000091 -:102F40000000000000000000000000000000000081 -:102F50000000000000000000000000000000000071 -:102F60000000000000000000000000000000000061 -:102F70000000000000000000000000000000000051 -:102F80000000000000000000000000000000000041 -:102F90000000000000000000000000000000000031 -:102FA0000000000000000000000000000000000021 -:102FB0000000000000000000000000000000000011 -:102FC0000000000000000000000000000000000001 -:102FD00000000000000000000000000000000000F1 -:102FE00000000000000000000000000000000000E1 -:102FF00000000000000000000000000000000000D1 -:1030000000000000000000000000000000000000C0 -:1030100000000000000000000000000000000000B0 -:1030200000000000000000000000000000000000A0 -:103030000000000000000000000000000000000090 -:103040000000000000000000000000000000000080 -:103050000000000000000000000000000000000070 -:103060000000000000000000000000000000000060 -:103070000000000000000000000000000000000050 -:103080000000000000000000000000000000000040 -:103090000000000000000000000000000000000030 -:1030A0000000000000000000000000000000000020 -:1030B0000000000000000000000000000000000010 -:1030C0000000000000000000000000000000000000 -:1030D00000000000000000000000000000000000F0 -:1030E00000000000000000000000000000000000E0 -:1030F00000000000000000000000000000000000D0 -:1031000000000000000000000000000000000000BF -:1031100000000000000000000000000000000000AF -:10312000000000000000000000000000000000009F -:10313000000000000000000000000000000000008F -:10314000000000000000000000000000000000007F -:10315000000000000000000000000000000000006F -:10316000000000000000000000000000000000005F -:10317000000000000000000000000000000000004F -:10318000000000000000000000000000000000003F -:10319000000000000000000000000000000000002F -:1031A000000000000000000000000000000000001F -:1031B000000000000000000000000000000000000F -:1031C00000000000000000000000000000000000FF -:1031D00000000000000000000000000000000000EF -:1031E00000000000000000000000000000000000DF -:1031F00000000000000000000000000000000000CF -:1032000000000000000000000000000000000000BE -:1032100000000000000000000000000000000000AE -:10322000000000000000000000000000000000009E -:10323000000000000000000000000000000000008E -:10324000000000000000000000000000000000007E -:10325000000000000000000000000000000000006E -:10326000000000000000000000000000000000005E -:10327000000000000000000000000000000000004E -:10328000000000000000000000000000000000003E -:10329000000000000000000000000000000000002E -:1032A000000000000000000000000000000000001E -:1032B000000000000000000000000000000000000E -:1032C00000000000000000000000000000000000FE -:1032D00000000000000000000000000000000000EE -:1032E00000000000000000000000000000000000DE -:1032F00000000000000000000000000000000000CE -:1033000000000000000000000000000000000000BD -:1033100000000000000000000000000000000000AD -:10332000000000000000000000000000000000009D -:10333000000000000000000000000000000000008D -:10334000000000000000000000000000000000007D -:10335000000000000000000000000000000000006D -:10336000000000000000000000000000000000005D -:10337000000000000000000000000000000000004D -:10338000000000000000000000000000000000003D -:10339000000000000000000000000000000000002D -:1033A000000000000000000000000000000000001D -:1033B000000000000000000000000000000000000D -:1033C00000000000000000000000000000000000FD -:1033D00000000000000000000000000000000000ED -:1033E00000000000000000000000000000000000DD -:1033F00000000000000000000000000000000000CD -:1034000000000000000000000000000000000000BC -:1034100000000000000000000000000000000000AC -:10342000000000000000000000000000000000009C -:10343000000000000000000000000000000000008C -:10344000000000000000000000000000000000007C -:10345000000000000000000000000000000000006C -:10346000000000000000000000000000000000005C -:10347000000000000000000000000000000000004C -:10348000000000000000000000000000000000003C -:10349000000000000000000000000000000000002C -:1034A000000000000000000000000000000000001C -:1034B000000000000000000000000000000000000C -:1034C00000000000000000000000000000000000FC -:1034D00000000000000000000000000000000000EC -:1034E00000000000000000000000000000000000DC -:1034F00000000000000000000000000000000000CC -:1035000000000000000000000000000000000000BB -:1035100000000000000000000000000000000000AB -:10352000000000000000000000000000000000009B -:10353000000000000000000000000000000000008B -:10354000000000000000000000000000000000007B -:10355000000000000000000000000000000000006B -:10356000000000000000000000000000000000005B -:10357000000000000000000000000000000000004B -:10358000000000000000000000000000000000003B -:10359000000000000000000000000000000000002B -:1035A000000000000000000000000000000000001B -:1035B000000000000000000000000000000000000B -:1035C00000000000000000000000000000000000FB -:1035D00000000000000000000000000000000000EB -:1035E00000000000000000000000000000000000DB -:1035F00000000000000000000000000000000000CB -:1036000000000000000000000000000000000000BA -:1036100000000000000000000000000000000000AA -:10362000000000000000000000000000000000009A -:10363000000000000000000000000000000000008A -:10364000000000000000000000000000000000007A -:10365000000000000000000000000000000000006A -:10366000000000000000000000000000000000005A +:102EB000000000000000000000000000000005F21B +:102EC000CC0000B054230C29B4810AA140B0A54C19 +:102ED000000042028000244380020C498A00102036 +:102EE000040101D00C43A02A002A4821FF0480A03D +:102EF0001828801810000414004A40210121828201 +:102F0000448305108240210A0442810A200088205F +:102F100078416800C0405B8A0420481140020840A4 +:102F20008A101040A0424A6443C804600072A22084 +:102F300060AB883621C81A2240380E29254C809073 +:102F4000E00004464000008C08024D9078E407241D +:102F50008185738C603A91289D4C0C823C60A9D489 +:102F60003034C97181DB502524245180B07303545F +:102F70008F181DB506B2438E48E480038E0C5103B2 +:102F80004624000F11C68498C0998018AC290A8580 +:102F900029400D28824018C908794231601E512805 +:102FA000B10020404204000A259C448100BB8428D3 +:102FB0003E18F1C290414560B6C021988003918BC4 +:102FC000F4498C09248D92303D2442151B0401A440 +:102FD00042C25825842E4B02584184B04B090896B2 +:102FE0000BE0607C648004213788C522B4248A1CED +:102FF0001C72C59CD140B4B12C1211C549435CB8B8 +:10300000814123820A4B31E20025AA3D050B8AC289 +:10301000825063C23ED4418052688095543A274121 +:1030200056C1E0D0E8431D204190338288B6592430 +:10303000E80741D0244046B63890C1B0700A3862E3 +:10304000411468021C0011D883442B71411B627823 +:10305000406D842129CAF300210C0F08385FCA1182 +:1030600003BB8C587A18250C63E1AA88922800DCEF +:103070000DADA3F6AC4D7616DB42C7805ED43304AB +:10308000002B800000000000000000000003652805 +:10309000459038900480F0CB444C5826908A80703C +:1030A00070A002B11F06450C5028C80A471D0ACC63 +:1030B000AF02AC281C920040804C42782804D10416 +:1030C000A40015034CE8205E2BE0C4A1826538F013 +:1030D000AA1E6500C8118AF83928100941C4421493 +:1030E0008885C3178380F490A0300CC10DD90400EB +:1030F0001100802A8C04070464A34F0862D21D28A3 +:103100008ACB030740996B0742C56BC249083C0351 +:103110003301CC66E20960276226820CC2538A60C2 +:10312000831230BB8E6B2008A815FC02024E199248 +:10313000703C679A16BC0855A0085CAB92300E0232 +:10314000A5F001143441247907412155609A382FA4 +:1031500041016960458C144705638783A296B4A535 +:10316000A525694D65A12C58614A0297482222DEA7 +:1031700090C09A318683C810B4AC70BB20CD09884A +:10318000F04130B6D022440252A101E8C2D62D0B44 +:103190000131C1625C18C43911C456605210640711 +:1031A0000A90020381004C26D90A868DBA0156C8BE +:1031B00099000AA8050B422F440922246F4F42416F +:1031C0000854BA161C224A64210B6894D73D09089A +:1031D0008CB2D4A08BB600860BAA40091091470888 +:1031E0008F40100302803DAA0A2A8008B36AACA56A +:1031F000520B5A8131012224C6A1252C03E881807B +:1032000080031D000806041098342E9605A84D0E64 +:103210001122180006050000124000201A000800C4 +:103220000B8E00629495130085080E200A0828244E +:10323000361240B810EA489785102082810005B008 +:1032400008122152800A0108883484196D40040153 +:103250009E80865013B2824E0020A01C1027680A60 +:103260000020000002000FD30356314028004328FD +:10327000918F00D01944E40603C2007711200802A0 +:10328000041006803012C18088CC0300C308C0003F +:10329000AC0069062106A0F26C40038421920196DD +:1032A000404300DB2F0BDB440DD14C44328C08181B +:1032B0000828402130024030C1806021252C27FEA3 +:1032C00013000825909F600E5C18004800A15FF86D +:1032D0009EAA0905C791115C643EDE09084144417C +:1032E000B61084A72FCC0FBDA0EBB0EDC43B7E8AF7 +:1032F000D9A080B8812008D6824060A204E258029A +:1033000043CF1A0263287810010A4546C10500A080 +:103310002B282D4598306A4C020015C0064300004A +:10332000E400020C15C0964202805C2C10484681D5 +:103330001154404A9C32BA0AE3823614221004C85F +:1033400083A67301A034CD15434276516CE811A1D8 +:1033500025294000600300908402A4C12251CD00C1 +:10336000384A30A08C594062600F1815488560803B +:103370003808201C12C18A1713A92477AD11660DD5 +:10338000653235343ED61842450020F2AC6D48090E +:10339000584CB401143845720104C3E2A0D5A80406 +:1033A000AD04910419D28200ED400201872C52A293 +:1033B000AC952A010344795015908BA623044953F8 +:1033C00000EA78D54238A148072204307398244295 +:1033D0000112B284000888261B048980C288A4C414 +:1033E000286C0D8710C4C054910AC3485202262489 +:1033F0002AA80B9C41A6120AD80AD40C8204AC124B +:10340000116C58D00D088C44916E58152E308308DD +:103410001B235200D42003408C04131010121008F8 +:103420000C858501C49CA02D2CE70339B04EB8B1A2 +:1034300014008406AD20C90C5F99064943AE33AE33 +:1034400024AE241551489A8100187420006203DECE +:10345000B1629085C811C84D1533FD381FB70021E2 +:1034600088A820C5FC010E21C18B04014804001569 +:103470001481050001C424A9C501060CCA62D4C484 +:103480004326064909109028A46822169143F403A4 +:10349000FE08223F3982462CA3230C00D72B024181 +:1034A00020100D60B024120180D6030240C2BA3948 +:1034B0008E01F0D287FC14522A50CEB9E0950888CC +:1034C0006E00FF004810E43840022420816091140F +:1034D0001487A01108C840812120510000000081FC +:1034E0004020F0C58308B54A3D01BB38507C16A189 +:1034F0004AA2D044887A732DAC44FD611ECC47B2F9 +:1035000011280C207156BC4198143C43433029408B +:103510002B0201FF0182C28180FFF03A65C740F1B2 +:10352000C6B0010324100900800480080009710955 +:103530000000E2E47E020E9D8F4C900A0028100CE1 +:10354000D98D54508828284002820154201304E069 +:103550005C05C08C0B80B814027000008A62801079 +:1035600018928015590801B18440FBFE3A588093A7 +:10357000F0B0B0400000400F00012C5449FF185833 +:10358000004010004029900C83821C509084598286 +:1035900004230484204890448104080040810204EC +:1035A0002408204482040102108108041002102023 +:1035B000084040810408020420081008210081010D +:1035C0000410102008410408481020210010212078 +:1035D0004082040020400204102041020010200814 +:1035E000421020404202040820400081040810409C +:1035F000800408204082040020409084011200844E +:1036000020108410810842002100408404082040DA +:103610008204008840FFF33FF7CFFFF0C3FCF99F1F +:103620002F5FC7FF9342F4FF0F3EFFCFB710FF0C91 +:10363000FF3F3C77C3BFF00DF0FFFE03FF43D1C354 +:10364000F3044D5F10528C0061405015010A568200 +:10365000B27042380000000000000000009CB00082 +:1036600000000000000060000000000000000000FA :10367000000000000000000000000000000000004A :10368000000000000000000000000000000000003A :10369000000000000000000000000000000000002A :1036A000000000000000000000000000000000001A -:1036B000000000000000000000000000000000000A -:1036C00000000000000000000000000000000000FA +:1036B0000000000000020000000000000000000008 +:1036C00008000000000000000000000000000000F2 :1036D00000000000000000000000000000000000EA :1036E00000000000000000000000000000000000DA -:1036F00000000000000000000000000000000000CA -:1037000000000000000000000000000000000000B9 +:1036F00000000000000000000000000000020000C8 +:1037000000000000000000000800000000000000B1 :1037100000000000000000000000000000000000A9 :103720000000000000000000000000000000000099 :103730000000000000000000000000000000000089 :103740000000000000000000000000000000000079 -:103750000000000000000000000000000000000069 -:103760000000000000000000000000000000000059 +:103750000000000100222001000000111000444080 +:103760000000400000000000000000000000000019 :103770000000000000000000000000000000000049 :103780000000000000000000000000000000000039 -:103790000000000000000000000000000000000029 +:1037900000000000000000000000008000060000A3 :1037A0000000000000000000000000000000000019 :1037B0000000000000000000000000000000000009 :1037C00000000000000000000000000000000000F9 :1037D00000000000000000000000000000000000E9 -:1037E00000000000000000000000000000000000D9 -:1037F00000000000000000000000000000000000C9 -:1038000000000000000000000000000000000000B8 -:1038100000000000000000000000000000000000A8 -:103820000000000000000000000000000000000098 -:103830000000000000000000000000000000000088 -:103840000000000000000000000000000000000078 -:103850000000000000000000000000000000000068 -:103860000000000000000000000000000000000058 -:103870000000000000000000000000000000000048 -:103880000000000000000000000000000000000038 -:103890000000000000000000000000000000000028 -:1038A0000000000000000000000000000000000018 -:1038B0000000000000000000000000000000000008 -:1038C00000000000000000000000000000000000F8 -:1038D00000000000000000000000000000000000E8 -:1038E00000000000000000000000000000000000D8 -:1038F00000000000000000000000000000000000C8 -:1039000000000000000000000000000000000000B7 -:1039100000000000000000000000000000000000A7 -:103920000000000000000000000000000000000097 -:103930000000000000000000000000000000000087 -:103940000000000000000000000000000000000077 -:103950000000000000000000000000000000000067 -:103960000000000000000000000000000000000057 -:103970000000000000000000000000000000000047 -:103980000000000000000000000000000000000037 -:103990000000000000000000000000000000000027 -:1039A0000000000000000000000000000000000017 -:1039B0000000000000000000000000000000000007 -:1039C00000000000000000000000000000000000F7 -:1039D00000000000000000000000000000000000E7 -:1039E00000000000000000000000000000000000D7 -:1039F00000000000000000000000000000000000C7 -:103A000000000000000000000000000000000000B6 -:103A100000000000000000000000000000000000A6 -:103A20000000000000000000000000000000000096 -:103A30000000000000000000000000000000000086 -:103A40000000000000000000000000000000000076 -:103A50000000000000000000000000000000000066 -:103A60000000000000000000000000000000000056 -:103A70000000000000000000000000000000000046 -:103A80000000000000000000000000000000000036 -:103A90000000000000000000000000000000000026 -:103AA0000000000000000000000000000000000016 -:103AB0000000000000000000000000000000000006 -:103AC00000000000000000000000000000000000F6 -:103AD00000000000000000000000000000000000E6 -:103AE00000000000000000000000000000000000D6 -:103AF00000000000000000000000000000000000C6 -:103B000000000000000000000000000000000000B5 -:103B100000000000000000000000000000000000A5 -:103B20000000000000000000000000000000000095 -:103B30000000000000000000000000000000000085 -:103B40000000000000000000000000000000000075 -:103B50000000000000000000000000000000000065 -:103B60000000000000000000000000000000000055 -:103B70000000000000000000000000000000000045 -:103B80000000000000000000000000000000000035 -:103B90000000000000000000000000000000000025 -:103BA0000000000000000000000000000000000015 -:103BB0000000000000000000000000000000000005 -:103BC00000000000000000000000000000000000F5 -:103BD00000000000000000000000000000000000E5 -:103BE00000000000000000000000000000000000D5 -:103BF00000000000000000000000000000000000C5 -:103C000000000000000000000000000000000000B4 -:103C100000000000000000000000000000000000A4 -:103C20000000000000000000000000000000000094 -:103C30000000000000000000000000000000000084 -:103C40000000000000000000000000000000000074 -:103C50000000000000000000000000000000000064 -:103C60000000000000000000000000000000000054 -:103C70000000000000000000000000000000000044 -:103C80000000000000000000000000000000000034 -:103C90000000000000000000000000000000000024 -:103CA0000000000000000000000000000000000014 -:103CB0000000000000000000000000000000000004 -:103CC00000000000000000000000000000000000F4 -:103CD00000000000000000000000000000000000E4 -:103CE00000000000000000000000000000000000D4 -:103CF00000000000000000000000000000000000C4 -:103D000000000000000000000000000000000000B3 -:103D100000000000000000000000000000000000A3 -:103D20000000000000000000000000000000000093 -:103D30000000000000000000000000000000000083 -:103D40000000000000000000000000000000000073 -:103D50000000000000000000000000000000000063 -:103D60000000000000000000000000000000000053 -:103D70000000000000000000000000000000000043 -:103D80000000000000000000000000000000000033 -:103D90000000000000000000000000000000000023 -:103DA0000000000000000000000000000000000013 -:103DB0000000000000000000000000000000000003 -:103DC00000000000000000000000000000000000F3 -:103DD00000000000000000000000000000000000E3 -:103DE00000000000000000000000000000000000D3 -:103DF00000000000000000000000000000000000C3 -:103E000000000000000000000000000000000000B2 -:103E100000000000000000000000000000000000A2 -:103E20000000000000000000000000000000000092 -:103E30000000000000000000000000000000000082 -:103E40000000000000000000000000000000000072 -:103E50000000000000000000000000000000000062 -:103E60000000000000000000000000000000000052 -:103E70000000000000000000000000000000000042 -:103E80000000000000000000000000000000000032 -:103E90000000000000000000000000000000000022 -:103EA0000000000000000000000000000000000012 -:103EB0000000000000000000000000000000000002 -:103EC00000000000000000000000000000000000F2 -:103ED00000000000000000000000000000000000E2 -:103EE00000000000000000000000000000000000D2 -:103EF00000000000000000000000000000000000C2 -:103F000000000000000000000000000000000000B1 -:103F100000000000000000000000000000000000A1 -:103F20000000000000000000000000000000000091 -:103F30000000000000000000000000000000000081 -:103F40000000000000000000000000000000000071 -:103F50000000000000000000000000000000000061 -:103F60000000000000000000000000000000000051 -:103F70000000000000000000000000000000000041 -:103F80000000000000000000000000000000000031 +:1037E00000002040082380472002000120C00090F4 +:1037F00008208800000800800000100A00108000E7 +:1038000000212400012A248480010000000102001C +:10381000F000200200040007000009010018044C19 +:10382000C209080800221000220000400110000018 +:103830000002120800010002820004201008004467 +:10384000009000022004040201100C80000000001F +:103850008000008100040208090000000810041024 +:1038600000800600400800060000008000120020D2 +:103870002EBE35F44108500408200A084001088192 +:103880004020030004220280800800261A04100051 +:1038900092904204500800800811A2EBE8BEB900E3 +:1038A0001B8010004610205908008408C201201C0B +:1038B0003021020421000C2003A00824042002105F +:1038C000600800283088008001008008020880001D +:1038D000830010E88010DD48B002121C00080605C5 +:1038E00001511012000030000808000280900040D2 +:1038F00020108200A00400404800800400800800DE +:10390000801010800011A0882090BB210008C541C4 +:1039100052E4C215175E880D90900081F20E20438C +:10392000A0008A5C002002000200605000400008F5 +:103930000E002010C288098014060080404000500C +:1039400008200002C0220004802A080281302002E0 +:10395000008D8119070230B2009800000020040099 +:103960000010C01042000A4000409204448400024B +:10397000800400A408C04808120002800088048067 +:1039800000000C00008000802A322400000019088A +:10399000350007000290001804A0080B088A900266 +:1039A000946C29083F820FEB73DFFCFFFF3DFFCFD4 +:1039B000DAF2080C22813922008FE20240C069014C +:1039C0004C040010334081401D30080B2058586CC7 +:1039D000D100C10B0D31A540840524440F240126DC +:1039E00044002F00000412010A00102813A60D0144 +:1039F000605B28B34E284206040176E82B402EE88F +:103A0000CACA926804603506984069808000400008 +:103A10000810C080400220D3803AA30AAD12C334FC +:103A200022B0028801393130305F4B30300703401B +:103A30001028101410000022A253408C06000240EF +:103A400086121E4021A432040A2AA0007010002809 +:103A50003CC92201000007692124CA8C4008540196 +:103A600042000642A001000420400D12031AB21ABF +:103A700018861A0B1A0A1000A82469A322958698A2 +:103A80005181A06D6D0B100222022008C1092AA8E5 +:103A90008E230249E078432FFB8052012CA0350889 +:103AA0002622048460400090261A4101831152C4EA +:103AB00044B4020103969109D034D73640840C40B7 +:103AC0007218041120140209A004800123000404C8 +:103AD0000A00D000290228C3406001842830951ACA +:103AE000800009838D20D04103A500804085000C13 +:103AF000A00024C052000100450D001040000099B4 +:103B000054150001080AA00000000800208000B041 +:103B1000610000100000340400424BC0148808000B +:103B20008800015B54F08018590182B3CCD0410069 +:103B30000A42082002C4802A012A280C91F0284851 +:103B400090A1200005EC82107CE604042088880106 +:103B5000C0E47F413828C0012260080140332A02B6 +:103B600010228850A102100D81A22009A8C254265B +:103B700080810101E0A055B11100058C80C3B8F32C +:103B80003827D200860246B0008C00100AB801DD4A +:103B900010F8FE0C808E4390E51CB404060908A4BE +:103BA0000011209BE43A3C4E6071EA2010100A8814 +:103BB00000A1D00400A14415740CA9C23B5049389F +:103BC000283044BF41410438D400C008245220A00A +:103BD0000000011040A020945002591B4002042311 +:103BE000F8DCF8041E290007900100E040314A8803 +:103BF0000110060084C008C18400100000100806EF +:103C00000540002340200040040A0000000000009E +:103C1000020C1245210111241000088004810200C9 +:103C200000009000000400000000020000020100FB +:103C30000015080108002048002368080224130228 +:103C4000006A2126C40802089309106104901A4CE6 +:103C500002488B0860880400E10400000000552C35 +:103C600004800080010C43D40020800081000140CA +:103C7000028000000000088001104000000AC0001F +:103C80000200183000002000400502001000840BE4 +:103C9000F000198100007E880082000000200402EC +:103CA000002EA200000028E0302100040004422081 +:103CB00000A003003300E0C014200040200080403A +:103CC00000804008A80000000080003020000000B4 +:103CD00001000009000407002A00100000002A0269 +:103CE00000088001028040080520004800200220D2 +:103CF000511008004201D149440006000241010070 +:103D000000000080006801220080000020084000C0 +:103D100018B00400200001110000824080A0442857 +:103D2000E004380002A0588009000A12C0000820F0 +:103D30000000890010012424000A07000810020076 +:103D40000010C6000981040104083C0800800290AC +:103D500000542042891202883C1100108800225031 +:103D6000010821082808202220423000018080001C +:103D700000048C00229B0C50140000080020C4009A +:103D8000C20200C00828028400052A35014C0660E2 +:103D9000809401620000040040335C6812020E004F +:103DA0000240D000048006400081F06AA400000AAE +:103DB000468000012408A2002402063A82128C10D8 +:103DC000F33A000006510F44E0800061C2FC12206B +:103DD0000C0E88231F0682B16D906308002D00141D +:103DE000121708A1DC026400006020F430000841D2 +:103DF000C04112B0A0001B003E000003A040C10162 +:103E000006800C4000F004310213C5414041060019 +:103E100000000000010080800010520008000840EF +:103E20000020000805200000200010008000200075 +:103E3000C0200040000200F0000001107807F104EB +:103E40006A0404010420000401000000000400A032 +:103E50000000004016110120040004200090000022 +:103E60005C040008010200021044028021000000EE +:103E700000010840080080080100100000A01102A5 +:103E8000020000000020000022080041000CC8FCD5 +:103E900001000801E2080039E2389E070390801013 +:103EA00000F00001080D40069C10000001000823EE +:103EB000C03011AB0620015C421C00A000061008B7 +:103EC0006102800002183040030801821040080A95 +:103ED0001045306214C0E08302000108021C200C6F +:103EE0006120C3008C12284084020A100C30421357 +:103EF000002843100185080070C0850028008184D7 +:103F000000184084C40800002603040010802041EB +:103F1000020810A0000E1010C18108105000390CCA +:103F20000384084402080039000480085000A100FE +:103F30000E183081010C108800F7DF36FFCBEF63DD +:103F4000C3ECE8DD3DFFCFFE93E3DCFF8F2FFF8D59 +:103F5000D7507F0CFF3F3E37C1DFF01FF8FFFE0751 +:103F6000BF03C0C3F1000C03000BCFFE3000000103 +:103F70001004514EA5A0113C0000000000000000FC +:103F80000018900004000060000020000000000005 :103F90000000000000000000000000000000000021 :103FA0000000000000000000000000000000000011 -:103FB0000000000000000000000000000000000001 -:103FC00000000000000000000000000000000000F1 -:103FD00000000000000000000000000000000000E1 +:103FB0000000000003F000FC033F00CFC033F00C12 +:103FC000FC033F00CFC033F00CFC033F00CFC033F5 +:103FD000F00CFC033F00CFC0300A0C0000000000D2 :103FE00000000000000000000000000000000000D1 :103FF00000000000000000000000000000000000C1 -:1040000000000000000000000000000000000000B0 -:1040100000000000000000000000000000000000A0 -:104020000000000000000000000000000000000090 +:10400000000000000000000000003F00CFC033F0BF +:104010000CFC033F00CFC033F00CFC033F00CFC0CB +:10402000300A0C000000000000000000000000004A :104030000000000000000000000000000000000080 :104040000000000000000000000000000000000070 :104050000000000000000000000000000000000060 :104060000000000000000000000000000000000050 -:104070000000000000000000000000000000000040 -:104080000000000000000000000000000000000030 +:1040700000000000000000100026600100000001A8 +:1040800010040000111040000000000000000000BB :104090000000000000000000000000000000000020 :1040A0000000000000000000000000000000000010 -:1040B0000000000000000000000000000000000000 -:1040C00000000000000000000000000000000000F0 +:1040B0000000000000000000000000000000098077 +:1040C00000060000000000000000000000000000EA :1040D00000000000000000000000000000000000E0 :1040E00000000000000000000000000000000000D0 :1040F00000000000000000000000000000000000C0 -:1041000000000000000000000000000000000000AF -:10411000000000000000000000000000000000009F -:10412000000000000000000000000000000000008F -:10413000000000000000000000000000000000007F -:10414000000000000000000000000000000000006F -:10415000000000000000000000000000000000005F -:10416000000000000000000000000000000000004F -:10417000000000000000000000000000000000003F -:10418000000000000000000000000000000000002F -:10419000000000000000000000000000000000001F -:1041A000000000000000000000000000000000000F -:1041B00000000000000000000000000000000000FF -:1041C00000000000000000000000000000000000EF -:1041D00000000000000000000000000000000000DF -:1041E00000000000000000000000000000000000CF -:1041F00000000000000000000000000000000000BF -:1042000000000000000000000000000000000000AE -:10421000000000000000000000000000000000009E -:10422000000000000000000000000000000000008E -:10423000000000000000000000000000000000007E -:10424000000000000000000000000000000000006E -:10425000000000000000000000000000000000005E -:10426000000000000000000000000000000000004E -:10427000000000000000000000000000000000003E -:10428000000000000000000000000000000000002E -:10429000000000000000000000000000000000001E -:1042A000000000000000000000000000000000000E -:1042B00000000000000000000000000000000000FE -:1042C00000000000000000000000000000000000EE -:1042D00000000000000000000000000000000000DE -:1042E00000000000000000000000000000000000CE -:1042F00000000000000000000000000000000000BE -:1043000000000000000000000000000000000000AD -:10431000000000000000000000000000000000009D -:10432000000000000000000000000000000000008D -:10433000000000000000000000000000000000007D -:10434000000000000000000000000000000000006D -:10435000000000000000000000000000000000005D -:10436000000000000000000000000000000000004D -:10437000000000000000000000000000000000003D -:10438000000000000000000000000000000000002D -:10439000000000000000000000000000000000001D -:1043A000000000000000000000000000000000000D -:1043B00000000000000000000000000000000000FD -:1043C00000000000000000000000000000000000ED -:1043D00000000000000000000000000000000000DD -:1043E00000000000000000000000000000000000CD -:1043F00000000000000000000000000000000000BD -:1044000000000000000000000000000000000000AC -:10441000000000000000000000000000000000009C -:10442000000000000000000000000000000000008C -:10443000000000000000000000000000000000007C -:10444000000000000000000000000000000000006C -:10445000000000000000000000000000000000005C -:10446000000000000000000000000000000000004C -:10447000000000000000000000000000000000003C -:10448000000000000000000000000000000000002C -:10449000000000000000000000000000000000001C -:1044A000000000000000000000000000000000000C -:1044B00000000000000000000000000000000000FC -:1044C00000000000000000000000000000000000EC -:1044D00000000000000000000000000000000000DC -:1044E00000000000000000000000000000000000CC -:1044F00000000000000000000000000000000000BC -:1045000000000000000000000000000000000000AB -:10451000000000000000000000000000000000009B -:10452000000000000000000000000000000000008B -:10453000000000000000000000000000000000007B -:10454000000000000000000000000000000000006B -:10455000000000000000000000000000000000005B -:10456000000000000000000000000000000000004B -:10457000000000000000000000000000000000003B -:10458000000000000000000000000000000000002B -:10459000000000000000000000000000000000001B -:1045A000000000000000000000000000000000000B -:1045B00000000000000000000000000000000000FB -:1045C00000000000000000000000000000000000EB -:1045D00000000000000000000000000000000000DB -:1045E00000000000000000000000000000000000CB -:1045F00000000000000000000000000000000000BB -:1046000000000000000000000000000000000000AA -:10461000000000000000000000000000000000009A -:10462000000000000000000000000000000000008A -:10463000000000000000000000000000000000007A -:10464000000000000000000000000000000000006A -:10465000000000000000000000000000000000005A -:10466000000000000000000000000000000000004A -:10467000000000000000000000000000000000003A -:10468000000000000000000000000000000000002A -:10469000000000000000000000000000000000001A -:1046A000000000000000000000000000000000000A -:1046B00000000000000000000000000000000000FA -:1046C00000000000000000000000000000000000EA -:1046D00000000000000000000000000000000000DA -:1046E00000000000000000000000000000000000CA -:1046F00000000000000000000000000000000000BA -:1047000000000000000000000000000000000000A9 -:104710000000000000000000000000000000000099 -:104720000000000000000000000000000000000089 -:104730000000000000000000000000000000000079 -:104740000000000000000000000000000000000069 -:104750000000000000000000000000000000000059 -:104760000000000000000000000000000000000049 -:104770000000000000000000000000000000000039 -:104780000000000000000000000000000000000029 -:104790000000000000000000000000000000000019 -:1047A0000000000000000000000000000000000009 -:1047B00000000000000000000000000000000000F9 -:1047C00000000000000000000000000000000000E9 -:1047D00000000000000000000000000000000000D9 -:1047E00000000000000000000000000000000000C9 -:1047F00000000000000000000000000000000000B9 -:1048000000000000000000000000000000000000A8 -:104810000000000000000000000000000000000098 -:104820000000000000000000000000000000000088 -:104830000000000000000000000000000000000078 -:104840000000000000000000000000000000000068 -:104850000000000000000000000000000000000058 -:104860000000000000000000000000000000000048 -:104870000000000000000000000000000000000038 -:104880000000000000000000000000000000000028 -:104890000000000000000000000000000000000018 -:1048A0000000000000000000000000000000000008 +:104100000000000000000A44002A80D700030000DD +:1041100000C024105000880400000080800060402F +:1041200000100402920104080D2024800001000800 +:10413000000E0202CC0020218078A00604000D00B1 +:1041400001182400D0090040002200A002000C0148 +:1041500001004001000242080200020182985C0056 +:10416000004840000004C00000002602000004A037 +:104170001005021C0000000000040038010240A2EB +:104180000810041000840600400800400000008071 +:1041900000000240249024804882406428E06A089D +:1041A00000854081432015031500028C800C080413 +:1041B000190410004101500850C800C0841992EB46 +:1041C000C8BCB900EB8211E04400789004008E98DE +:1041D000821134C2B81188481080824000E408324D +:1041E000C004A2104001280820445802118890847D +:1041F00008404040001000EA7800DD489A021014A0 +:1042000086080800011810020000301200000000AB +:104210004290462A00800000A04008000002008072 +:10422000080080100100020205202048209107317B +:10423000080D6E72A4C84FE8175E88050268000377 +:10424000B61B144261200954081002898100C05035 +:104250000000440802004020C00C1180100206003B +:1042600040404C780920300480221D8080AE0C0232 +:104270008036C11204CD911946C83EB04C98080052 +:10428000014204004050C07A02018C406042DE6C62 +:10429000C22634040921C0AC4050C500140002817C +:1042A0002088459900200C60308000212A33060CBC +:1042B00010000C809FC007304A9002CBACE8133B43 +:1042C00069C8A620003824003F82001F33DFF0DFDA +:1042D000EF3DFF8DCBE21884220119480927E23A0D +:1042E0000CD76D219085A930B3408CD62DB0C8561F +:1042F000128C58ECF00397075DB0E544B70C03420D +:10430000CF24032644341F300006100152687191F7 +:104310000DB60D0AC0D9A8B34E1189861C62D36CA4 +:10432000AB4228C60ACA926084C9353ED848434287 +:1043300080B408A039174FBD200260D2813A230211 +:104340002D106B34330902C6023D31B0644E9730F4 +:10435000E5C6976241683E3D310780C6E21058C30A +:1043600074000280141384504D503B9B8C4AA00271 +:104370000010002451092111005006E938F4CB8EB9 +:1043800031999409030006CA20031F04A66A0D0888 +:10439000CB1EA21A98B11B231E0A8550A80C61AB34 +:1043A00009B18ED830D5681A1A02CDC033A08E0854 +:1043B000C8002C160240014A2C20732468834E2129 +:1043C00066A8371926398CADC2890023EB39F9C0AC +:1043D0000211D044050E0209031691279013031809 +:1043E00051840E4040302410301FC009C2E4A400A4 +:1043F000911C04041D80D0006002399382B00184B6 +:104400000831D532800009C3ADA0416129EB80118C +:104410004007009CE00025C1F7000040640F014602 +:104420000244029480751131700FB0810284D4026D +:10443000228C01B5E3420C31A0307604C0125680C4 +:10444000388A0A004C0000DBFCF00629E140E0233A +:1044500044C41E3200620A2A32CD40A5D10A34C4B7 +:10446000A0D23F8048F225C0446172306066C70D1B +:104470001080080361A015902C050E267055E46885 +:10448000100AFF404F91E30C43C006A444E7A07E0E +:104490007442310880862C607E88774120B105B651 +:1044A000404018D02037904DDCC2E3D871CC0CDEF0 +:1044B0008BFE33DFF0A08A021402B7A0801C5018D4 +:1044C0000D19088400010098352B3E832401EA2051 +:1044D0006DE51EAB0002D2480C495F17F44536016A +:1044E00058A090F82830889F430D0C78A200C2484D +:1044F0003320CCA04448211581A0613C1CC0591533 +:104500000200880014C847021855C308102000ECA8 +:1045100020300885751047C0041B294B071C808478 +:104520008444200425C0002300002058000A000114 +:10453000400000100201594F6903520C44C80100A9 +:104540004C01011374A2253A46856652EB589CA291 +:104550002EE88301233D54AAD419AB4F01428E00AB +:104560000B0C074784385064801E0A01C749043188 +:10457000ED581A4E2200820A60080088C520900279 +:104580002100CC4862C102198E0E43DC5C20A000E1 +:104590009D0301E0028000000000C80001500000FF +:1045A000000160005C0018383000000085A292C84D +:1045B0009000892CF0001FC3913873D0080A01A223 +:1045C0006221002A683CEA01062005E0DA2103297D +:1045D000051C43D020E84B04730C60C229401341F2 +:1045E0000AA0C440A081407F0805408640828F34E5 +:1045F00040400262820C0229C4A0CF013C403050EE +:10460000748064000498003D321600083120410691 +:104610009363A7F0F834395246ADF3030430360CF7 +:1046200070448A925020118A30288A20E1499C8067 +:1046300091140443CCA38844540F2501023593DF21 +:10464000C0B12A28E40C11012284F98C3DEA091337 +:10465000410408A42010F80340006424051E0584CA +:104660000800020080C0C600C18504010760DD505B +:104670001E048240009020D28922408C341239B02E +:10468000EC993810CC08200830083B00800153001A +:10469000A78093D0008DCE6F439B2C78F51040847B +:1046A0001820C480113533C2001C920300957A3F54 +:1046B000070C09E017AC0680085000C100BB5C681D +:1046C000922012040250C0780CA40641C0C5F37FAA +:1046D00000B18D082000C0800488820C140C805228 +:1046E000803980D5EC3250081AF37E4C678301EB99 +:1046F000C5ECB250340010257FC700B01D106161B9 +:10470000028C0022107E34405D04440001E00074FD +:10471000300018C8C20372B8E0011B11FE4040030C +:10472000806050191E0F8F64E0F12438813BD0095E +:104730004803360810400400054400011080520070 +:104740001380A900000000000E200C22000014724B +:1047500002162EC0C57010400C0202CC08070110D2 +:104760006400002002048071052001E002000000C6 +:10477000500000A80000004003010B0804000020C6 +:1047800000B01002FC4E4509B10284825044101062 +:1047900021544060020800040000084084104108D1 +:1047A000410213060220801410008022C000000184 +:1047B000804C30C4212380099240500198261987EB +:1047C000001091C004CC2428060C40061810800468 +:1047D00001000821403001AB21384227232A5433FD +:1047E0006619364F92A1CF9C993219F2059733CFB3 +:1047F000B464DA25CCCD9CA3329073E62936479376 +:104800004322542B9A33A44673E3C488CA7D2126DD +:104810000E6CA308CCB4D939F38B9330E990C895CA +:104820000CF9044D9244A8D2342CD98993919B2041 +:1048300079B232244F265113E4913219728F9320AA +:10484000C99055E9264C8CA303E46865662EB48CA8 +:104850008A41536895221972099F20885001BA082D +:10486000A10C4B328250B85B0E50C43B90A0E4CAFE +:104870008030B00A1410788090190035000E93042F +:10488000801068024000C0C0F0000844000E0FFF16 +:10489000200000154129054FADA018B80000000008 +:1048A000000000000000A000040000400000000024 :1048B00000000000000000000000000000000000F8 :1048C00000000000000000000000000000000000E8 -:1048D00000000000000000000000000000000000D8 -:1048E00000000000000000000000000000000000C8 -:1048F00000000000000000000000000000000000B8 -:1049000000000000000000000000000000000000A7 +:1048D0000000000000000000030F00C3C330F0CC54 +:1048E0003C330F0CC3C330F0CC3C330F0CC3C3308C +:1048F000F0CC3C330F0CC3C330F0CC3C30020C0086 +:10490000000010000000000018000000000000007F :104910000000000000000000000000000000000097 -:104920000000000000000000000000000000000087 -:104930000000000000000000000000000000000077 -:104940000000000000000000000000000000000067 -:104950000000000000000000000000000000000057 +:10492000000000000000000000000000000030F067 +:10493000CC3C330F0CC3C330F0CC3C330F0CC3C39F +:1049400030F0CC3C30020C000000100000000000F1 +:10495000180000000000000000000000000000003F :104960000000000000000000000000000000000047 :104970000000000000000000000000000000000037 :104980000000000000000000000000000000000027 @@ -234714,140 +234714,140 @@ :1049F00000000000000000000000000000000000B7 :104A000000000000000000000000000000000000A6 :104A10000000000000000000000000000000000096 -:104A2000000000000000000000002C8000AA200010 -:104A300088009800048004800000400000004100CD -:104A400000001000001100000002081022200909D7 -:104A50000242100000010400FF004003E0040007D0 -:104A60000800021642400008203000422440008422 -:104A700020D0098106604181084042087A006C40DC -:104A80000A105B4A250801991310880CC818844045 -:104A9000866000102124120200026326708BCC373E -:104AA000104C8121002800000002000800000000D6 -:104AB0004000000A200254808A2C1164800A13816D -:104AC00000480002A90000201C0822400005407098 -:104AD00022910002040104069C00004407022910F0 -:104AE000004040A2C82C8800428D4400106C800019 -:104AF00033D2044200002884100529008423208436 -:104B000080D902490A5A4084049690020302041193 -:104B1000204067212080C5221243A0683E04144033 -:104B200031000484810012B100000121E0454A05F2 -:104B3000144156501D0021000822042C1208408404 -:104B40001021080841001080082120104AC00001EF -:104B50000C2000207708C50012C4821C0516832192 -:104B600000000021241252005080288021021132BE -:104B70000204020AC0A2120344858240AA20608572 -:104B800030C58010108C0007E60300000011E00023 -:104B900008001100400800C028B640250D0869D162 -:104BA000023002383C22C5A1305060000A22020CBB -:104BB0005D30060038010002048000023028321403 -:104BC0008001FC60901030463ADFC0542129E0D8C3 -:104BD00080040002041106300400104D0294A0006D -:104BE000540400201001151209009820000800004C -:104BF000000000000000000000006910329D3A082B -:104C00008240F2C02040C9200046A07233A0020CAE -:104C100019360F01100858C8D61C08002930A5788D -:104C2000C40C0889000430400080400003000042AA -:104C300052E000410B26CDE020110833AB011106F4 -:104C4000C01022C80B780F5048CE527C04041114B7 -:104C50009B8E44010008120C2DDD8454534430EA2D -:104C6000C033C3062DA0433C8C101C930839313748 -:104C700000080A3702080A4086A4144006094209BF -:104C8000920400008800320201122000210121302C -:104C9000809C93EC001FFF00A8C0B09000046A1035 -:104CA00020A4CAF0226804E1003FEC422FF3010483 -:104CB00001140D688359A3CB58021A035902080046 -:104CC000E50C7D230411849B80800428280E0801B4 -:104CD000A300612CE00327D60C110040C4404125FD -:104CE0008280C101044835F226E10908414190243F -:104CF00084188081A00044888C140002061100C131 -:104D00008465D22040880111000004120284020848 -:104D1000211B00024001A8C9827026002102020264 -:104D200000430008400000000F0F00000004008650 -:104D300001004A6200000800073C00040030D4A0D3 -:104D400044300441034C428264DF020035400030AD -:104D5000006000A006180C028028002308044241CD -:104D600069D10B045620040C88484018246180390E -:104D70009EC1A3908E900C00002000061082902A05 -:104D80002034084B90E0A80882212204014880507A -:104D900040C15300080A80C2D1C47E0138A8C403B0 -:104DA0002271184940332A0250A20314A10210892B -:104DB00081A6A0A98882541400010101D42022B147 -:104DC0001131002C81EBF4A75C278640B23244A05D -:104DD000228408A0002C22BD0858F40584CC4A0087 -:104DE000404C308402380A206038B88BC43C10CF65 -:104DF000C4702A2032440C280063904404A121008E -:104E000054490B60935049520880C72102110C216C -:104E1000540111084000823082461840C0800016BC -:104E2000444451150802044120C8A7FE102908A5D2 -:104E3000D08028C85C04A40A92A09FF8188800318A -:104E40004110511A480A2108C2456120978052003A -:104E500007F183BE1061F815DA0002C000804440FB -:104E60005002061101000218C0111A01184899A039 -:104E70001084784F14910258D0D218430326C1846D -:104E80000210572040D22028090CA29084A0413261 -:104E9000A00419008000110C08888004621CCC3822 -:104EA0009D00B282E6900000110210044001002033 -:104EB0000046013E60000010010C01D80000010016 -:104EC0000002008000000400184000C00000000044 -:104ED000001190001000801010001E8100800D0055 -:104EE0002108028783840002213C6203242205A456 -:104EF000D2240BC000C0020280850400440C830051 -:104F0000600041080020090A4219B403410014401E -:104F10000110604085000108440152618090080042 -:104F200084420100518401DA1002061000681C94CA -:104F300048000008832220405020000088400110D3 -:104F400010C201330906CCC00BCCA0D4090D0498C3 -:104F50001266607ED908CB0C004333302BFC0AEC80 -:104F6000858060209864043308845001488462304E -:104F700023224212C00008A800342C0022403CAC7E -:104F8000858B0038030000C54800210200406050B6 -:104F9000118004212C63098131408008C824520EFD -:104FA0007C11115C90512050402090208C208C006E -:104FB0000880416040007409300143800004002DE6 -:104FC000C01009017F800000258120000100003011 -:104FD0000029883105881440251403C0000004030B -:104FE000602004200000160000008000180004016A -:104FF00081860138002311026C00000000000000CF -:10500000200A0400023208A2C320210094522C047A -:105010000212094582C04021280688201E04019002 -:1050200055100208002C0004101D08C0CC004400DC -:1050300000000070000001000A840002000000006F -:10504000000000000000000000820000400000009E -:1050500000002808050038001018068040111202D0 -:105060006004000013830000000000001228050007 -:1050700001080030180A820114421110040800FFD0 -:105080000E0102007C0000386C008070010001F805 -:1050900000000000000000000004140402001004DE -:1050A00071A022C100204326001A48122644002085 -:1050B0004220221022108131000400002002004012 -:1050C00004004008008000000A0000001080000476 -:1050D000280001120200FBF838200041F04040BFD8 -:1050E000FA3E9FCE03F0101420FF20200FBD001EBB -:1050F0009C004002000100004000004104200084A8 -:105100002008104081040800408102040408204067 -:10511000820401021081080410021020084040811E -:105120000408020420081008210081010410102046 -:10513000084104084810202100102120408204006A -:10514000204002041020410200102008421020409C -:105150004202040820400081040810408004082016 -:10516000408204002040108401020084201084103A -:105170008108420021004084040820408204008805 -:1051800040FDFF2EFFCE55B3DC30FD9F080681AFFA -:10519000C3B080DECF024DCF77D00ECCF7AF375003 -:1051A000C1FDF3EDDCFB3D00AB42121002040FFC2D -:1051B00005488C0011554077551FF543F5F042A87E -:1051C00000000000000000000010A007F800000030 -:1051D000000040000000000000000000000000008F +:104A20000000000000000000000000000000000086 +:104A30000000000000000000000000000000000076 +:104A40000000000000000000000000000000000066 +:104A50000000000000000000000000000000000056 +:104A60000000000000000000000000000000000046 +:104A70000000000000000000000000000000000036 +:104A80000000000000000000000000000000000026 +:104A90000000000000000000000000000000000016 +:104AA0000000000000000000000000000000000006 +:104AB00000000000000000000000000000000000F6 +:104AC00000000000000000000000000000000000E6 +:104AD00000000000000000000000000000000000D6 +:104AE00000000000000000000000000000000000C6 +:104AF00000000000000000000000000000000000B6 +:104B000000000000000000000000000000000000A5 +:104B10000000000000000000000000000000000095 +:104B20000000000000000000000000000000000085 +:104B30000000000000000000000000000000000075 +:104B40000000000000000000000000000000000065 +:104B50000000000000000000000000000000000055 +:104B60000000000000000000000000000000000045 +:104B70000000000000000000000000000000000035 +:104B80000000000000000000000000000000000025 +:104B90000000000000000000000000000000000015 +:104BA0000000000000000000000000000000000005 +:104BB00000000000000000000000000000000000F5 +:104BC00000000000000000000000000000000000E5 +:104BD00000000000000000000000000000000000D5 +:104BE00000000000000000000000000000000000C5 +:104BF00000000000000000000000000000000000B5 +:104C000000000000000000000000000000000000A4 +:104C10000000000000000000000000000000000094 +:104C20000000000000000000000000000000000084 +:104C30000000000000000000000000000000000074 +:104C40000000000000000000000000000000000064 +:104C50000000000000000000000000000000000054 +:104C60000000000000000000000000000000000044 +:104C70000000000000000000000000000000000034 +:104C80000000000000000000000000000000000024 +:104C90000000000000000000000000000000000014 +:104CA0000000000000000000000000000000000004 +:104CB00000000000000000000000000000000000F4 +:104CC00000000000000000000000000000000000E4 +:104CD00000000000000000000000000000000000D4 +:104CE00000000000000000000000000000000000C4 +:104CF00000000000000000000000000000000000B4 +:104D000000000000000000000000000000000000A3 +:104D10000000000000000000000000000000000093 +:104D20000000000000000000000000000000000083 +:104D30000000000000000000000000000000000073 +:104D40000000000000000000000000000000000063 +:104D50000000000000000000000000000000000053 +:104D60000000000000000000000000000000000043 +:104D70000000000000000000000000000000000033 +:104D80000000000000000000000000000000000023 +:104D90000000000000000000000000000000000013 +:104DA0000000000000000000000000000000000003 +:104DB00000000000000000000000000000000000F3 +:104DC00000000000000000000000000000000000E3 +:104DD00000000000000000000000000000000000D3 +:104DE00000000000000000000000000000000000C3 +:104DF00000000000000000000000000000000000B3 +:104E000000000000000000000000000000000000A2 +:104E10000000000000000000000000000000000092 +:104E20000000000000000000000000000000000082 +:104E30000000000000000000000000000000000072 +:104E40000000000000000000000000000000000062 +:104E50000000000000000000000000000000000052 +:104E60000000000000000000000000000000000042 +:104E70000000000000000000000000000000000032 +:104E80000000000000000000000000000000000022 +:104E90000000000000000000000000000000000012 +:104EA0000000000000000000000000000000000002 +:104EB00000000000000000000000000000000000F2 +:104EC00000000000000000000000000000000000E2 +:104ED00000000000000000000000000000000000D2 +:104EE00000000000000000000000000000000000C2 +:104EF00000000000000000000000000000000000B2 +:104F000000000000000000000000000000000000A1 +:104F10000000000000000000000000000000000091 +:104F20000000000000000000000000000000000081 +:104F30000000000000000000000000000000000071 +:104F40000000000000000000000000000000000061 +:104F50000000000000000000000000000000000051 +:104F60000000000000000000000000000000000041 +:104F70000000000000000000000000000000000031 +:104F80000000000000000000000000000000000021 +:104F90000000000000000000000000000000000011 +:104FA0000000000000000000000000000000000001 +:104FB00000000000000000000000000000000000F1 +:104FC00000000000000000000000000000000000E1 +:104FD00000000000000000000000000000000000D1 +:104FE00000000000000000000000000000000000C1 +:104FF00000000000000000000000000000000000B1 +:1050000000000000000000000000000000000000A0 +:105010000000000000000000000000000000000090 +:105020000000000000000000000000000000000080 +:105030000000000000000000000000000000000070 +:105040000000000000000000000000000000000060 +:105050000000000000000000000000000000000050 +:105060000000000000000000000000000000000040 +:105070000000000000000000000000000000000030 +:105080000000000000000000000000000000000020 +:105090000000000000000000000000000000000010 +:1050A0000000000000000000000000000000000000 +:1050B00000000000000000000000000000000000F0 +:1050C00000000000000000000000000000000000E0 +:1050D00000000000000000000000000000000000D0 +:1050E00000000000000000000000000000000000C0 +:1050F00000000000000000000000000000000000B0 +:10510000000000000000000000000000000000009F +:10511000000000000000000000000000000000008F +:10512000000000000000000000000000000000007F +:10513000000000000000000000000000000000006F +:10514000000000000000000000000000000000005F +:10515000000000000000000000000000000000004F +:10516000000000000000000000000000000000003F +:10517000000000000000000000000000000000002F +:10518000000000000000000000000000000000001F +:10519000000000000000000000000000000000000F +:1051A00000000000000000000000000000000000FF +:1051B00000000000000000000000000000000000EF +:1051C00000000000000000000000000000000000DF +:1051D00000000000000000000000000000000000CF :1051E00000000000000000000000000000000000BF :1051F00000000000000000000000000000000000AF :10520000000000000000000000000000000000009E :10521000000000000000000000000000000000008E -:105220000002000000000000000000400800000034 +:10522000000000000000000000000000000000007E :10523000000000000000000000000000000000006E :10524000000000000000000000000000000000005E :10525000000000000000000000000000000000004E -:10526000000000000000000000020000000000003C -:1052700000000040080000000000000000000000E6 +:10526000000000000000000000000000000000003E +:10527000000000000000000000000000000000002E :10528000000000000000000000000000000000001E :10529000000000000000000000000000000000000E :1052A00000000000000000000000000000000000FE @@ -234856,144 +234856,144 @@ :1052D00000000000000000000000000000000000CE :1052E00000000000000000000000000000000000BE :1052F00000000000000000000000000000000000AE -:10530000000000000000000000000000000000009D +:105300000000000000000800000000000000000095 :10531000000000000000000000000000000000008D :10532000000000000000000000000000000000007D :10533000000000000000000000000000000000006D -:10534000000000000000000000000000000000005D -:10535000000000000000000000000000000000004D -:10536000000000000000000000000000000000003D -:10537000000000000000000000000000000000002D -:10538000000000000000000000000000000000001D -:10539000000000000000000000000000000000000D -:1053A00000000000000000000000000000000000FD -:1053B00000000000000000000000000000000000ED -:1053C00000000000000000000000000000000000DD -:1053D00000000000000000000000000000000000CD -:1053E00000000000000000000000000000000000BD -:1053F00000000000000000000000000000000000AD -:10540000000000000000000000000000000000009C -:10541000000000000000000000000000000000008C -:10542000000000000000000000000000000000007C -:10543000000000000000000000000000000000006C -:10544000000000000000000000000000000000005C -:10545000000000000000000000000000000000004C -:10546000000000000000000000000000000000003C -:10547000000000000000000000000000000000002C -:10548000000000000000000000000000000000001C -:10549000000000000000000000000000000000000C -:1054A00000000000000000000000000000000000FC -:1054B00000000000000000000000000000000000EC -:1054C00000000000000000000000000000000000DC -:1054D00000000000000000000000000000000000CC -:1054E00000000000000000000000000000000000BC -:1054F00000000000000000000000000000000000AC -:10550000000000000000000000000000000000009B -:10551000000000000000000000000000000000008B -:10552000000000000000000000000000000000007B -:10553000000000000000000000000000000000006B -:10554000000000000000000000000000000000005B -:10555000000000000000000000000000000000004B -:10556000000000000000000000000000000000003B -:10557000000000000000000000000000000000002B -:10558000000000000000000000000000000000001B -:10559000000000000000000000000000000000000B -:1055A00000000000000000000000000000000000FB -:1055B00000000000000000000000000000000000EB -:1055C00000000000000000000000000000000000DB -:1055D00000000000000000000000000000000000CB -:1055E00000000000000000000000000000000000BB -:1055F00000000000000000000000000000000000AB -:10560000000000000000000000000000000000009A -:10561000000000000000000000000000000000008A -:10562000000000000000000000000000000000007A -:10563000000000000000000000000000000000006A -:10564000000000000000000000000000000000005A -:10565000000000000000000000000000000000004A -:10566000000000000000000000000000000000003A -:10567000000000000000000000000000000000002A -:10568000000000000000000000000000000000001A -:10569000000000000000000000000000000000000A -:1056A00000000000000000000000000000000000FA -:1056B00000000000000000000000000000000000EA -:1056C00000000000000000000000000000000000DA -:1056D00000000000000000000000000000000000CA -:1056E00000000000000000000000000000000000BA -:1056F00000000000000000000000000000000000AA -:105700000000000000000000000000000000000099 -:105710000000000000000000000000000000000089 -:105720000000000000000000000000000000000079 -:105730000000000000000000000000000000000069 -:105740000000000000000000000000000000000059 -:105750000000000000000000000000000000000049 -:105760000000000000000000000000000000000039 -:105770000000000000000000000000000000000029 -:105780000000000000000000000000000000000019 -:105790000000000000000000000000000000000009 -:1057A00000000000000000000000000000000000F9 -:1057B00000000000000000000000000000000000E9 -:1057C00000000000000000000000000000000000D9 -:1057D00000000000000000000000000000000000C9 -:1057E00000000000000000000000000000000000B9 -:1057F00000000000000000000000000000000000A9 -:105800000000000000000000000000000000000098 -:105810000000000000000000000000000000000088 -:105820000000000000000000000000000000000078 -:105830000000000000000000000000000000000068 -:105840000000000000000000000000000000000058 -:105850000000000000000000000000000000000048 -:105860000000000000000000000000000000000038 -:105870000000000000000000000000000000000028 -:105880000000000000000000000000000000000018 -:105890000000000000000000000000000000000008 -:1058A00000000000000000000000000000000000F8 -:1058B00000000000000000000000000000000000E8 -:1058C00000000000000000000000000000000000D8 -:1058D00000000000000000000000000000000000C8 -:1058E00000000000000000000000000000000000B8 -:1058F00000000000000000000000000000000000A8 -:105900000000000000000000000000000000000097 -:105910000000000000000000000000000000000087 -:105920000000000000000000000000000000000077 -:105930000000000000000000000000000000000067 -:105940000000000000000000000000000000000057 -:105950000000000000000000000000000000000047 -:105960000000000000000000000000000000000037 -:105970000000000000000000000000000000000027 -:105980000000000000000000000000000000000017 -:105990000000000000000000000000000000000007 -:1059A00000000000000000000000000000000000F7 -:1059B00000000000000000000000000000000000E7 -:1059C00000000000000000000000000000000000D7 -:1059D00000000000000000000000000000000000C7 -:1059E00000000000000000000000000000000000B7 -:1059F00000000000000000000000000000000000A7 +:1053400000000000000000000000000000002040FD +:1053500048A2204000020001208000800020800040 +:1053600000008000000000020000000000000000BB +:1053700000000080000100000000000000000000AC +:105380000000000000000100000900000001008092 +:105390000002010002000002000080020000800004 +:1053A0000001000280000400000040000000000036 +:1053B00000000000000004000008040000200000BD +:1053C000000400080100000000100410008000101C +:1053D00040000000400000000010020024902480E3 +:1053E0004180400408048208000108804020002415 +:1053F0000420008080009000090410008010420406 +:1054000010080009040092EBC8BC80000B8010005B +:105410004400000904008408801120008401080071 +:1054200000000000200008004000021040000018AA +:10543000204008000000000000080000001000E804 +:1054400000105D4010000000801800000203100AE8 +:1054500000001000000820000004001010000100EF +:10546000200200200400400200400400400808819F +:1054700000006028608000210008C50002C482008E +:10548000175E800C9000000124121040400008902C +:105490001100020202002040002000080400000069 +:1054A000820000801404008050400050082020003A +:1054B00050220000802A08028010200200BED12C59 +:1054C000460231F000000000000000004000901093 +:1054D000400000000040900440040000000000A4D0 +:1054E00000004000000002800088048000000800E6 +:1054F000008000002A3224084280080811000600BB +:1055000008000090A848101A090282801444210063 +:105510000002000000400020800400020822000871 +:1055200000803C000000F20200C049204006A17249 +:105530003340820C1D300A0B301858C8D000C80AFE +:105540002D31A550940C0040812400220004080451 +:10555000200010035AE010491BA60D41625328B3E6 +:105560004B095306041166E82B500D58C8CA12683F +:105570008464B11698086D80800009802FDB449602 +:10558000520630D28033430A2D12CB34AAB2008A9D +:1055900088393130305F4B3032474B42012816207A +:1055A0001101C0A2A20350202224020090529E505A +:1055B000210031B08A2AA018001E000088492991D4 +:1055C0000008074835B4CAA56109544912001E4AAB +:1055D000AE01010020680D388318A29A18961A2B84 +:1055E00018035940A18C6923241186981195A46D44 +:1055F0006D07594B63802458E0030F2E08110048B3 +:10560000C060432F9280C101ACEC355A262B09882B +:10561000E08030B40318C181F28191C046B6020324 +:1056200003948063D074C631418C0C405210240125 +:105630002010020181040400010004041A00D000BB +:10564000090004000000A04400D202004080B49091 +:10565000420090010820000002D240258002D24082 +:1056600039000000010C000000000019502011005A +:105670000A002000000008002080000261000010E5 +:105680000002340040000208148000008A00001864 +:105690007405001008010213C8900C0000220802D3 +:1056A000108080000000000090400000900020006A +:1056B00003CC0275D4C4470000088802C0447A00B5 +:1056C0003C2840112271484940132A0250A2031479 +:1056D000A102108981A6A02888824404000101014A +:1056E0009CA066F11131012E80ABE0B15C27C400B3 +:1056F0001230408000801DF202EE33FD2098D60C5F +:1057000094CE4890C10CB486031808344018B88B66 +:105710004434344DE473AB201AC40EA84101D04484 +:105720008C814105540DABD2BA4009D2290040BD4D +:10573000024104327E024A000550000000000110C0 +:10574000002020011002401040000020040C400006 +:10575000020008200081200C4030080801100000E1 +:1057600094AA08C1851011080014080405400020FF +:1057700000000000040A02010040004002081282FA +:105780004100002800000880000000000080100098 +:105790004204000240000000000241048005002095 +:1057A0000800294890206A4802041302046A202055 +:1057B000C408022893001460008008000048020416 +:1057C00080111010002000000100040400800080FF +:1057D000010C43D4002080008102014102801000AE +:1057E00000000000000000000002800002001830ED +:1057F00000042000400102011010821DF1001980F8 +:10580000000030080080000000200402A82CE20103 +:105810000800A0E0382000400000022000A00000A6 +:105820003300E0C0142001400000804000804000B0 +:10583000A800100000800000200000000100000906 +:10584000081507000200100010000A0000000011F7 +:10585000028840454020004A002282204110080072 +:10586000400191010400040000400000000000001D +:1058700020680022000000000000000008A00000D6 +:10588000080001010004924A00805008E00428004A +:1058900000201080080008000000880080008100BF +:1058A00010010000000001000800020000100000CC +:1058B0000081040104081C080000021000042000FC +:1058C00000020000000040004A00024101082108D7 +:1058D00020082000004000000180800000000C0033 +:1058E000228A0410040000480022D400120200C0E2 +:1058F00008A8008500273C2781CE063024CC03C0B1 +:105900000000040360210C2802000E000242D000B7 +:105910001A2426410106B0EBA42311026C000001F9 +:1059200024002000250206288223CC99F73A0100A2 +:1059300093319F40E0920933C9FC1201240A8A2165 +:105940000E0082906F902208002C0414101508A1FC +:105950004C006400006020B0000000004040104493 +:10596000000008000800000125600580060008000E +:105970004020001102008540408006040001000024 +:1059800000008000001052000800A9400000000044 +:105990000500000020001000800020004020004092 +:1059A00000020000000000000007F00000000201FB +:1059B0000020800030400000000400000020400073 +:1059C000080000200400040000000000000400089B +:1059D0009100004080000000000000000001004035 +:1059E00008008008010010000020000002000000F4 +:1059F000000000000008000100000000000000009E :105A00000000000000000000000000000000000096 -:105A10000000000000000000000000000000000086 -:105A20000000000000000000000000000000000076 -:105A30000000000000000000000000000000000066 -:105A40000000000000000000000000000000000056 -:105A50000000000000000000000000000000000046 -:105A60000000000000000000000000000000000036 -:105A70000000000000000000000000000000000026 -:105A80000000000000000000000000000000000016 -:105A90000000000000000000000000000000000006 -:105AA00000000000000000000000000000000000F6 -:105AB00000000000000000000000000000000000E6 -:105AC00000000000000000000000000000000000D6 -:105AD00000000000000000000000000000000000C6 -:105AE00000000000000000000000000000000000B6 -:105AF00000000000000000000000000000000000A6 +:105A1000000000000010040001020820800011AB0B +:105A2000042606942068D0060C3060C34600183463 +:105A30003060030600306118008D0804F18A11A05F +:105A40006844060C0468C2342068D069A1068D0D34 +:105A500034D0C180000C006000C180211811A12346 +:105A6000468A3461A344183009930D9930D9B08C1B +:105A70006319B3436333366C1366264C8264C326C2 +:105A80004C36643366CB3661B364D8C60C99084291 +:105A900012C840C84C2C2109B19366C4366C3366D9 +:105AA000CB36608824459120058260C041A44139ED +:105AB000230000040002304D020D1908C26084C4A6 +:105AC00084100F00820220C11C90E40434400000C6 +:105AD00000040108000B0C0010500045100FE04BB3 +:105AE000BCF00250000000000FFF03FFFC18BF00D5 +:105AF0000400000000001000000000000000000092 :105B00000000000000000000000000000000000095 :105B10000000000000000000000000000000000085 :105B20000000000000000000000000000000000075 -:105B30000000000000000000000000000000000065 -:105B40000000000000000000000000000000000055 -:105B50000000000000000000000000000000000045 +:105B3000000000000000003FFF0FFFF3FFFCFFFF2D +:105B40003FFFCFFFF00AFC00000010000000000043 +:105B5000080000000000000000000000000000003D :105B60000000000000000000000000000000000035 -:105B70000000000000000000000000000000000025 -:105B80000000000000000000000000000000000015 -:105B90000000000000000000000000000000000005 +:105B70000000000000000000000000000000003FE6 +:105B8000FF0FFFF3FFFCFFFF3FFFCFFFF00AFC001A +:105B900000001000000000000800000000000000ED :105BA00000000000000000000000000000000000F5 :105BB00000000000000000000000000000000000E5 :105BC00000000000000000000000000000000000D5 @@ -235002,144 +235002,144 @@ :105BF00000000000000000000000000000000000A5 :105C00000000000000000000000000000000000094 :105C10000000000000000000000000000000000084 -:105C20000000000000000000000000000000000074 +:105C2000000000000000000000000800000000006C :105C30000000000000000000000000000000000064 :105C40000000000000000000000000000000000054 :105C50000000000000000000000000000000000044 :105C60000000000000000000000000000000000034 -:105C70000000000000000000000000000000000024 -:105C80000000000000000000000000000000000014 -:105C90000000000000000000000000000000000004 -:105CA00000000000000000000000000000000000F4 -:105CB00000000000000000000000000000000000E4 -:105CC00000000000000000000000000000000000D4 -:105CD00000000000000000000000000000000000C4 -:105CE00000000000000000000000000000000000B4 -:105CF00000000000000000000000000000000000A4 -:105D00000000000000000000000000000000000093 -:105D10000000000000000000000000000000000083 -:105D20000000000000000000000000000000000073 -:105D30000000000000000000000000000000000063 -:105D40000000000000000000000000000000000053 -:105D50000000000000000000000000000000000043 -:105D60000000000000000000000000000000000033 -:105D70000000000000000000000000000000000023 -:105D80000000000000000000000000000000000013 -:105D90000000000000000000000000000000000003 -:105DA00000000000000000000000000000000000F3 -:105DB00000000000000000000000000000000000E3 -:105DC00000000000000000000000000000000000D3 -:105DD00000000000000000000000000000000000C3 -:105DE00000000000000000000000000000000000B3 -:105DF00000000000000000000000000000000000A3 -:105E00000000000000000000000000000000000092 -:105E10000000000000000000000000000000000082 -:105E20000000000000000000000000000000000072 -:105E30000000000000000000000000000000000062 -:105E40000000000000000000000000000000000052 -:105E50000000000000000000000000000000000042 -:105E60000000000000000000000000000000000032 -:105E70000000000000000000000000000000000022 -:105E80000000000000000000000000000000000012 -:105E90000000000000000000000000000000000002 -:105EA00000000000000000000000000000000000F2 -:105EB00000000000000000000000000000000000E2 -:105EC00000000000000000000000000000000000D2 -:105ED00000000000000000000000000000000000C2 -:105EE00000000000000000000000000000000000B2 -:105EF00000000000000000000000000000000000A2 -:105F00000000000000000000000000000000000091 -:105F10000000000000000000000000000000000081 -:105F20000000000000000000000000000000000071 -:105F30000000000000000000000000000000000061 -:105F40000000000000000000000000000000000051 -:105F50000000000000000000000000000000000041 -:105F60000000000000000000000000000000000031 -:105F70000000000000000000000000000000000021 -:105F80000000000000000000000000000000000011 -:105F90000000000000000000000000000000000001 -:105FA00000000000000000000000000000000000F1 -:105FB00000000000000000000000000000000000E1 -:105FC00000000000000000000000000000000000D1 -:105FD00000000000000000000000000000000000C1 -:105FE00000000000000000000000000000000000B1 -:105FF00000000000000000000000000000000000A1 -:106000000000000000000000000000000000000090 -:106010000000000000000000000000000000000080 -:106020000000000000000000000000000000000070 -:106030000000000000000000000000000000000060 -:106040000000000000000000000000000000000050 -:106050000000000000000000000000000000000040 -:106060000000000000000000000000000000000030 -:106070000000000000000000000000000000000020 -:106080000000000000000000000000000000000010 -:106090000000000000000000000000000000000000 -:1060A00000000000000000000000000000000000F0 -:1060B00000000000000000000000000000000000E0 -:1060C00000000000000000000000000000000000D0 -:1060D00000000000000000000000000000000000C0 -:1060E00000000000000000000000000000000000B0 -:1060F00000000000000000000000000000000000A0 -:10610000000000000000000000000000000000008F -:10611000000000000000000000000000000000007F -:10612000000000000000000000000000000000006F -:10613000000000000000000000000000000000005F -:10614000000000000000000000000000000000004F -:10615000000000000000000000000000000000003F -:10616000000000000000000000000000000000002F -:10617000000000000000000000000000000000001F -:10618000000000000000000000000000000000000F -:1061900000000000000000000000000000000000FF -:1061A00000000000000000000000000000000000EF -:1061B00000000000000000000000000000000000DF -:1061C00000000000000000000000000000000000CF -:1061D00000000000000000000000000000000000BF -:1061E00000000000000000000000000000000000AF -:1061F000000000000000000000000000000000009F -:10620000000000000000000000000000000000008E -:10621000000000000000000000000000000000007E -:10622000000000000000000000000000000000006E -:10623000000000000000000000000000000000005E -:10624000000000000000000000000000000000004E -:10625000000000000000000000000000000000003E -:10626000000000000000000000000000000000002E -:10627000000000000000000000000000000000001E -:10628000000000000000000000000000000000000E -:1062900000000000000000000000000000000000FE -:1062A00000000000000000000000000000000000EE -:1062B00000000000000000000000000000000000DE -:1062C00000000000000000000000000000000000CE -:1062D00000000000000000000000000000000000BE -:1062E00000000000000000000000000000000000AE -:1062F000000000000000000000000000000000009E -:10630000000000000000000000000000000000008D -:10631000000000000000000000000000000000007D +:105C70000000204048882040000200012000000071 +:105C800000208000000080000000000200000000F2 +:105C90000000000000000080000100000000000083 +:105CA00000000000000000000000010000082000CB +:105CB00000010080000201000200000200008002DA +:105CC000000080000001000080000400000040008F +:105CD00000000000000000000000040000080400B4 +:105CE0000020000000040008010000000010041063 +:105CF00000800010400000000000000001100200C1 +:105D0000249024804180400408400208000108805B +:105D100040200200042000808000000209041000DE +:105D20008010420410080000044092EBC8BC8200BE +:105D30004B80101044000001040084088011A084EE +:105D4000860108000000000000000810400002105A +:105D500040000008204008000080000000080020EB +:105D6000001000E800105D401020000080180000C6 +:105D70000403100A001210000008000000040810BC +:105D80001000010020020420040040020040040032 +:105D90004008088000006028608000210008C500DD +:105DA00002C48200175E800C9000000124100040A5 +:105DB00040000090000002000000204000000008A9 +:105DC0000400000080000080140400805040005057 +:105DD0000820200050220000802A080280102002A3 +:105DE00000BED12C460A31F0000000000002040081 +:105DF0004000D0104000000000409004400400002B +:105E0000000000A400004000000002800088048020 +:105E100000000800008000002A32240842800808A0 +:105E20001100060008000092A848101A490282805A +:105E3000144421003DC20009339FF0D77F39FFCDC4 +:105E400042C0000800003C000000020200D04928C7 +:105E500040040110334080000D30080A30185848C3 +:105E6000D000C00A2D31A5409404004081240022B6 +:105E700000040804200010010A00100819A60D01F2 +:105E8000425328B34A084306040146682B400008E1 +:105E9000C8CA12608060A51698086D8180000982CA +:105EA0002FF94496520630D2800003082D12CB30D1 +:105EB000AAB2000A80193130305F4B3030474B4274 +:105EC00001281620110080A2A003502022240000E7 +:105ED00090529E50210010800A2AA018000A00004B +:105EE00000890101000807481534CA854101540999 +:105EF00012001C4A8A01000420680D100318A21A1F +:105F000008141A2318035140A08460232011869896 +:105F10001111A04D4D03514A62000058C0000828DD +:105F2000000000088460030B9280400008A0350048 +:105F300026020000C0C1000003084101D28191C0C7 +:105F40000626020101948023501106310184084085 +:105F500052102000201002018104040001000404FA +:105F60001A00D00009000C000000B00400D20600A6 +:105F70008080B490420090010820000002D34025A8 +:105F80008002D24039000000010C0000000000191E +:105F9000142211000A0020000000080020800000E8 +:105FA00061000010000234000000020804800000BC +:105FB0008A0000595403021008010213C8900C0013 +:105FC0000022082210800000000000009040000025 +:105FD0009000200003CC0275D4C40700000888029A +:105FE000C0447A003C2844132271584940322202AE +:105FF00040A203102002108981A62009888254043F +:10600000000000019C8066F11131012E00ABE0B16F +:106010005C27C4001230408000801DF202EE33FD88 +:106020002098D60D94CE4890C10CB40603180834BD +:106030004018B88B4434344DE473AB203AC40EA0FE +:106040004121C0048CA14005544DA3523B5049F25C +:106050002900C4BD025104327E024A0005500000EE +:10606000000001100020200110024010400000201C +:10607000040C4000020008200081200C4030080879 +:106080000110000094AA08C185101108001408042A +:106090000540002000000000040A0201004000400A +:1060A0000208128249000028090008800000000050 +:1060B0000080100042040002400000400002410441 +:1060C000800500200800294C90206A480204130231 +:1060D000046A2020C408022893001460808009000C +:1060E00000480204C02000110020000001600404E8 +:1060F00000800080010C43D4002080008102014117 +:10610000028010000000000000000000000280007B +:106110000200183000042000400102011010821D0E +:10612000F1001981008034080080008000240402FE +:10613000A82CE281000020E038200040000002206E +:1061400000A000003300E0C01420014000008040A7 +:1061500000804000A8001000008000002000000027 +:1061600001000009081507000200100010000A02D3 +:1061700000000011028840454020004A0022822091 +:1061800011100800400191010400040000400000CB +:106190000000008020600022000000000008400095 +:1061A00008A00000200009010004924A88805408D9 +:1061B000E0042800002450900900080080008800B6 +:1061C00080008100100100000000010008000200B2 +:1061D000001000000081040105081C280000029046 +:1061E0000044200000020004080151505A112241CD +:1061F0004108210828082800004000000180800094 +:1062000000000C00228A0410040000480022D40080 +:10621000120200C008A8008500273C2781CE063066 +:1062200024CC03C00000040360210C2802000E00EF +:106230000242D0001A2426410106B0EBA423110229 +:106240006C00000124002000250206288223CC993E +:10625000F73A010093319F40E0920933C9FC1201E3 +:10626000240A8A210E0082906F902208002C0414C8 +:10627000101508A14C006400006020B00000000070 +:1062800040401044000008000A000001256005801D +:1062900006000800402000110210854040810604DD +:1062A0000001000000008000001052000800A9401A +:1062B0000000000005000000200010008000200009 +:1062C0004020004000020000000000000007F00035 +:1062D00000000201002080003040000000040000A7 +:1062E000002040000800002004000400000000001E +:1062F0000004000891000040800000000000000041 +:10630000000100400800800801001000002000008B +:106310000200000000000000000800010000000072 :10632000000000000000000000000000000000006D -:10633000000000000000000000000000000000005D -:10634000000000000000000000000000000000004D -:10635000000000000000000000000000000000003D -:10636000000000000000000000000000000000002D -:10637000000000000000000000000000000000001D -:10638000000000000000000000000000000000000D -:1063900000000000000000000000000000000000FD -:1063A00000000000000000000000000000000000ED -:1063B00000000000000000000000000000000000DD -:1063C00000000000000000000000000000000000CD -:1063D00000000000000000000000000000000000BD -:1063E00000000000000000000000000000000000AD -:1063F000000000000000000000000000000000009D -:10640000000000000000000000000000000000008C -:10641000000000000000000000000000000000007C +:106330000000000000000000001000000102082022 +:10634000800011AB0426029420285002041420433C +:1063500042800814102021428214210E1085080466 +:10636000F08A10A02840C2040224411212244825B9 +:1063700090224485B6C2D8D08C6D062C4C58B210F1 +:1063800088089031624B1620B16089121081040E8A +:10639000104080080010A14142121428014202045A +:1063A000042041428410280102081020A14050849A +:1063B0000489084212C8404844246308908122405E +:1063C000122411224B122088205A7E29858A60636C +:1063D0008038D1E7086E8BAD0320845D8201E486AE +:1063E0004410818C102A0C47C011A2C130B6ED01B7 +:1063F000BE42928001040C4400044C013100044070 +:10640000142B8403D89003BCFFC03FFFC000F000F2 +:1064100000081000040200800000200000000000BE :10642000000000000000000000000000000000006C :10643000000000000000000000000000000000005C -:10644000000000000000000000000000000000004C -:10645000000000000000000000000000000000003C -:10646000000000000000000000000000000000002C +:106440000000000003FF00FFFF3FFFCFFFF3FFFC52 +:10645000FFFF3FFFCFFFF3FFFCFFFF0000C0000086 +:10646000000000000000000000020000000000002A :10647000000000000000000000000000000000001C :10648000000000000000000000000000000000000C -:1064900000000000000000000000000000000000FC -:1064A00000000000000000000000000000000000EC -:1064B00000000000000000000000000000000000DC +:10649000000000000000000000003FFFCFFFF3FFFE +:1064A000FCFFFF0000C00000000000000000000032 +:1064B00000020000000000000000000000000000DA :1064C00000000000000000000000000000000000CC :1064D00000000000000000000000000000000000BC :1064E00000000000000000000000000000000000AC @@ -235153,285 +235153,285 @@ :10656000000000000000000000000000000000002B :10657000000000000000000000000000000000001B :10658000000000000000000000000000000000000B -:1065900000000000000000000000000000000000FB -:1065A00000000000000000000000000000000000EB -:1065B00000000000000000000000000000000000DB -:1065C00000000000000000000000000000000000CB -:1065D00000000000000000000000000000000000BB -:1065E00000000000000000000000000000000000AB -:1065F000000000000000000000000000000000009B -:10660000000000000000000000000000000000008A -:10661000000000000000000000000000000000007A -:10662000000000000000000000000000000000006A -:10663000000000000000000000000000000000005A -:10664000000000000000000000000000000000004A -:10665000000000000000000000000000000000003A -:10666000000000000000000000000000000000002A -:10667000000000000000000000000000000000001A -:10668000000000000000000000000000000000000A -:1066900000000000000000000000000000000000FA -:1066A00000000000000000000000000000000000EA -:1066B00000000000000000000000000000000000DA -:1066C00000000000000000000000000000000000CA -:1066D00000000000000000000000000000000000BA -:1066E00000000000000000000000000000000000AA -:1066F000000000000000000000000000000000009A -:106700000000000000000000000000000000000089 -:106710000000000000000000000000000000000079 -:106720000000000000000000000000000000000069 -:106730000000000000000000000000000000000059 -:106740000000000000000000000000000000000049 -:106750000000000000000000000000000000000039 -:106760000000000000000000000000000000000029 -:106770000000000000000000000000000000000019 -:106780000000000000000000000000000000000009 -:1067900000000000000000000000000000000000F9 -:1067A00000000000000000000000000000000000E9 -:1067B00000000000000000000000000000000000D9 -:1067C00000000000000000000000000000000000C9 -:1067D00000000000000000000000000000000000B9 -:1067E00000000000000000000000000000000000A9 -:1067F0000000000000000000000000000000000099 -:106800000000000000000000000000000000000088 -:106810000000000000000000000000000000000078 -:106820000000000000000000000000000000000068 -:106830000000000000000000000000000000000058 -:106840000000000000000000000000000000000048 -:106850000000000000000000000000000000000038 -:106860000000000000000000000000000000000028 -:106870000000000000000000000000000000000018 -:106880000000000000000000000000000000000008 -:1068900000000000000000000000000000000000F8 -:1068A00000000000000000000000000000000000E8 -:1068B00000000000000000000000000000000000D8 -:1068C00000000000000000000000000000000000C8 -:1068D00000000000000000000000000000000000B8 -:1068E00000000000000000000000000000000000A8 -:1068F0000000000000000000000000000000000098 -:106900000000000000000000000000000000000087 -:106910000000000000000000000000000000000077 -:106920000000000000000000000000000000000067 -:106930000000000000000000000000000000000057 -:106940000000000000000000000000000000000047 -:106950000000000000000000000000000000000037 -:106960000000000000000000000000000000000027 -:106970000000000000000000000000000000000017 -:106980000000000000000000000000000000000007 -:1069900000000000000000000000000000000000F7 -:1069A00000000000000000000000000000000000E7 -:1069B00000000000000000000000000000000000D7 -:1069C00000000000000000000000000000000000C7 -:1069D00000000000000000000000000000000000B7 -:1069E00000000000000000000000000000000000A7 -:1069F0000000000000000000000000000000000097 -:106A00000000000000000000000000000000000086 -:106A10000000000000000000000000000000000076 -:106A20000000000000000000000000000000000066 -:106A30000000000000000000000000000000000056 -:106A40000000000000000000000000000000000046 -:106A50000000000000000000000000000000000036 -:106A60000000000000000000000000000000000026 -:106A70000000000000000000000000000000000016 -:106A80000000000000000000000000000000000006 -:106A900000000000000000000000000000000000F6 -:106AA00000000000000000000000000000000000E6 -:106AB00000000000000000000000000000000000D6 -:106AC00000000000000000000000000000000000C6 -:106AD00000000000000000000000000000000000B6 -:106AE00000000000000000000000000000000000A6 -:106AF0000000000000000000000000000000000096 -:106B00000000000000000000000000000000000085 -:106B10000000000000000000000000000000000075 -:106B20000000000000000000000000000000000065 -:106B30000000000000000000000000000000000055 -:106B40000000000000000000000000000000000045 -:106B50000000000000000000000000000000000035 -:106B60000000000000000000000000000000000025 -:106B70000000000000000000000000000000000015 -:106B80000000000000000000000000000000000005 -:106B900000000000000000000000000000000000F5 -:106BA00000000000000000000000000000000000E5 -:106BB00000000000000000000000000000000000D5 -:106BC00000000000000000000000000000000000C5 -:106BD00000000000000000000000000000000000B5 -:106BE00000000000000000000000000000000000A5 -:106BF0000000000000000000000000000000000095 -:106C00000000000000000000000000000000000084 -:106C10000000000000000000000000000000000074 -:106C20000000000000000000000000000000000064 -:106C30000000000000000000000000000000000054 -:106C40000000000000000000000000000000000044 -:106C50000000000000000000000000000000000034 -:106C60000000000000000000000000000000000024 -:106C70000000000000000000000000000000000014 -:106C80000000000000000000000000000000000004 -:106C900000000000000000000000000000000000F4 -:106CA00000000000000000000000000000000000E4 -:106CB00000000000000000000000000000000000D4 -:106CC00000000000000000000000000000000000C4 -:106CD00000000000000000000000000000000000B4 -:106CE00000000000000000000000000000000000A4 -:106CF0000000000000000000000000000000000094 -:106D00000000000000000000000000000000000083 -:106D10000000000000000000000000000000000073 -:106D20000000000000000000000000000000000063 -:106D30000000000000000000000000000000000053 +:106590000000000000002C8000AA20008800980065 +:1065A0000480048000004000000041000000100052 +:1065B0000011000000020810222009090242100008 +:1065C00000010400FF004003E00400070800021679 +:1065D00042400008203000422440008420D009813D +:1065E00006604181084042087A006C400A105B4A0C +:1065F000250801991310880CC81884408660001083 +:106600002124120200026326708BCC37104C8121AA +:106610000028000000020008000000004000000AFE +:10662000200254808A2C1164800A138100480002E1 +:10663000A90000201C0822400005407022910002A1 +:10664000040104069C00004407022910004040A2F7 +:10665000C82C8800428D4400106C800033D2044264 +:1066600000002884100529008423208480D9024951 +:106670000A5A4084049690020302041120406721C4 +:106680002080C5221243A0683E04144031000484D7 +:10669000810012B100000121E0454A051441565025 +:1066A0001D0021000822042C120840841021080833 +:1066B00041001080082120104AC000010C20002059 +:1066C0007708C50012C4821C051683210000002132 +:1066D0002412520050802880210211320204020A42 +:1066E000C0A2120344858240AA20608530C5801074 +:1066F000108C0007E60300000011E0000800110004 +:10670000400800C028B640250D0869D10230023883 +:106710003C22C5A1305060000A22020C5D30060008 +:106720003801000204800002302832148001FC602D +:10673000901030463ADFC0542129E0D8800400028E +:10674000041106300400104D0294A00054040020EF +:106750001001151209009820000800000000000038 +:106760000000000000006910329D3A088240F2C02B +:106770002040C9200046A07233A0020C19360F0138 +:10678000100858C8D61C08002930A578C40C088900 +:1067900000043040008040000300004252E000410D +:1067A0000B26CDE020110833AB011106C01022C822 +:1067B0000B780F5048CE527C040411149B8E440178 +:1067C0000008120C2DDD8454534430EAC033C30654 +:1067D0002DA0433C8C101C930839313700080A3730 +:1067E00002080A4086A414400609420992040000E7 +:1067F000880032020112200021012130809C93EC9C +:10680000001FFF00A8C0B09000046A1020A4CAF0C6 +:10681000226804E1003FEC422FF3010401140D68EB +:106820008359A3CB58021A0359020800E50C7D23B3 +:106830000411849B80800428280E0801A300612C89 +:10684000E00327D60C110040C44041258280C101DD +:10685000044835F226E109084141902484188081DA +:10686000A00044888C140002061100C18465D22067 +:10687000408801110000041202840208211B00025A +:106880004001A8C9827026002102020200430008CC +:10689000400000000F0F00000004008601004A6263 +:1068A00000000800073C00040030D4A0443004413C +:1068B000034C428264DF020035400030006000A0DB +:1068C00006180C02802800230804424169D10B04F9 +:1068D0005620040C88484018246180399EC1A3903A +:1068E0008E900C00002000061082902A2034084B65 +:1068F00090E0A808822122040148805040C1530042 +:10690000080A80C2D1C47E0138A8C4032271184984 +:1069100040332A0250A20314A102108981A6A0A923 +:106920008882541400010101D42022B11131002CBD +:1069300081EBF4A75C278640B23244A0228408A0F1 +:10694000002C22BD0858F40584CC4A00404C308409 +:1069500002380A206038B88BC43C10CFC4702A209B +:1069600032440C280063904404A1210054490B6078 +:10697000935049520880C72102110C21540111087B +:106980004000823082461840C080001644445115B1 +:106990000802044120C8A7FE102908A5D08028C8F5 +:1069A0005C04A40A92A09FF8188800314110511A83 +:1069B000480A2108C24561209780520007F183BE32 +:1069C0001061F815DA0002C0008044405002061140 +:1069D00001000218C0111A01184899A01084784FBC +:1069E00014910258D0D218430326C18402105720B4 +:1069F00040D22028090CA29084A04132A0041900A2 +:106A00008000110C08888004621CCC389D00B28282 +:106A1000E690000011021004400100200046013EF3 +:106A200060000010010C01D800000100000200808D +:106A300000000400184000C0000000000011900099 +:106A40001000801010001E8100800D0021080287B8 +:106A500083840002213C6203242205A4D2240BC0BB +:106A600000C0020280850400440C830060004108DD +:106A70000020090A4219B40341001440011060408B +:106A800085000108440152618090080084420100A1 +:106A9000518401DA1002061000681C9448000008B6 +:106AA00083222040502000008840011010C2013392 +:106AB0000906CCC00BCCA0D4090D04981266607EE8 +:106AC000D908CB0C004333302BFC0AEC85806020C6 +:106AD00098640433088450014884623023224212AF +:106AE000C00008A800342C0022403CAC858B003844 +:106AF000030000C5480021020040605011800421BD +:106B00002C63098131408008C824520E7C11115C2D +:106B100090512050402090208C208C0008804160B3 +:106B200040007409300143800004002DC0100901A9 +:106B30007F8000002581200001000030002988317D +:106B400005881440251403C00000040360200420BD +:106B50000000160000008000180004018186013842 +:106B6000002311026C00000000000000200A040055 +:106B7000023208A2C320210094522C0402120945BB +:106B800082C04021280688201E040190551002086A +:106B9000002C0004101D08C0CC0044000000007050 +:106BA000000001000A840002000000000000000054 +:106BB00000000000008200004000000000002808E3 +:106BC0000500380010180680401112026004000011 +:106BD00013830000000000001228050001080030A7 +:106BE000180A820114421110040800FF0E0102006D +:106BF0007C0000386C008070010001F8000000008B +:106C000000000000000414040200100471A022C15E +:106C100000204326001A4812264400204220221059 +:106C200022108131000400002002004004004008CE +:106C3000008000000A0000001080000428000112FB +:106C40000200FBF838200041F04040BFFA3E9FCEE2 +:106C500003F0101420FF20200FBD001E9C004002F6 +:106C60000001000040000041042000842008104082 +:106C700081040800408102040408204082040102CB +:106C8000108108041002102008404081040802040A +:106C90002008100821008101041010200841040878 +:106CA00048102021001021204082040020400204CE +:106CB0001020410200102008421020404202040827 +:106CC0002040008104081040800408204082040015 +:106CD00020401084010200842010841081084200AA +:106CE00021004084040820408204008840FDFF2EDB +:106CF000FFCE55B3DC30FD9F080681AFC3B080DE08 +:106D0000CF024DCF77D00ECCF7AF3750C1FDF3EDAA +:106D1000DCFB3D00AB42121002040FFC05488C0066 +:106D200011554077551FF543F5F042A800000000CB +:106D3000000000000010A007F80000000000400064 :106D40000000000000000000000000000000000043 :106D50000000000000000000000000000000000033 :106D60000000000000000000000000000000000023 :106D70000000000000000000000000000000000013 -:106D80000000000000000000000000000000000003 -:106D900000000000000000000000000000000000F3 +:106D80000000000000000000000000000002000001 +:106D900000000000000000400800000000000000AB :106DA00000000000000000000000000000000000E3 :106DB00000000000000000000000000000000000D3 :106DC00000000000000000000000000000000000C3 -:106DD00000000000000000000000000000000000B3 -:106DE00000000000000000000000000000000000A3 +:106DD0000000000000020000000000000000004071 +:106DE000080000000000000000000000000000009B :106DF0000000000000000000000000000000000093 :106E00000000000000000000000000000000000082 :106E10000000000000000000000000000000000072 -:106E20000000000000000000000000000000000062 -:106E30000000000000000000000000000000000052 -:106E40000000000000000000000000000000000042 -:106E50000000000000000000000000000000000032 -:106E60000000000000000000000000000000000022 -:106E70000000000000000000000000000000000012 -:106E80000000000000000000000000000000000002 -:106E900000000000000000000000000000000000F2 -:106EA00000000000000000000000000000000000E2 -:106EB00000000000000000000000000000000000D2 -:106EC00000000000000000000000000000000000C2 -:106ED00000000000000000000000000000000000B2 -:106EE00000000000000000000000000000000000A2 -:106EF0000000000000000000000000000000000092 -:106F00000000000000000000000000000000000081 -:106F10000000000000000000000000000000000071 -:106F20000000000000000000000000000000000061 -:106F30000000000000000000000000000000000051 -:106F40000000000000000000000000000000000041 -:106F50000000000000000000000000000000000031 -:106F60000000000000000000000000000000000021 -:106F70000000000000000000000000000000000011 -:106F80000000000000000000000000000000000001 -:106F900000000000000000000000000000000000F1 -:106FA00000000000000000000000000000000000E1 -:106FB00000000000000000000000000000000000D1 -:106FC00000000000000000000000000000000000C1 -:106FD00000000000000000000000000000000000B1 -:106FE00000000000000000000000000000000000A1 -:106FF0000000000000000000000000000000000091 -:107000000000000000000000000000000000000080 -:107010000000000000000000000000000000000070 -:107020000000000000000000000000000000000060 -:107030000000000000000000000000000000000050 -:107040000000000000000000000000000000000040 -:107050000000000000000000000000000000000030 -:107060000000000000000000000000000000000020 -:107070000000000000000000000000000000000010 -:107080000000000000000000000000000000000000 -:1070900000000000000000000000000000000000F0 -:1070A00000000000000000000000000000000000E0 -:1070B00000000000000000000000000000000000D0 -:1070C00000000000000000000000000000000000C0 -:1070D00000000000000000000000000000000000B0 -:1070E00000000000000000000000000000000000A0 -:1070F0000000000000000000000000000000000090 -:10710000000000000000000000000000000000007F -:10711000000000000000000000000000000000006F -:10712000000000000000000000000000000000005F -:10713000000000000000000000000000000000004F -:10714000000000000000000000000000000000003F -:10715000000000000000000000000000000000002F -:10716000000000000000000000000000000000001F -:10717000000000000000000000000000000000000F -:1071800000000000000000000000000000000000FF -:1071900000000000000000000000000000000000EF -:1071A00000000000000000000000000000000000DF -:1071B00000000000000000000000000000000000CF -:1071C00000000000000000000000000000000000BF -:1071D00000000000000000000000000000000000AF -:1071E000000000000000000000000000000000009F -:1071F000000000000000000000000000000000008F -:10720000000000000000000000000000000000007E -:10721000000000000000000000000000000000006E -:10722000000000000000000000000000000000005E -:10723000000000000000000000000000000000004E -:10724000000000000000000000000000000000003E -:10725000000000000000000000000000000000002E -:10726000000000000000000000000000000000001E -:10727000000000000000000000000000000000000E -:1072800000000000000000000000000000000000FE -:1072900000000000000000000000000000000000EE -:1072A00000000000000000000000000000000000DE -:1072B00000000000000000000000000000000000CE -:1072C00000000000000000000000000000000000BE -:1072D00000000000000000000000000000000000AE -:1072E000000000000000000000000000000000009E -:1072F000000000000000000000000000000000008E -:10730000000000000000000000000000000000007D -:10731000000000000000000000000000000000006D -:10732000000000000000000000000000000000005D -:10733000000000000000000000000000000000004D -:10734000000000000000000000000000000000003D -:10735000000000000000000000000000000000002D -:10736000000000000000000000000000000000001D -:10737000000000000000000000000000000000000D -:1073800000000000000000000000000000000000FD -:1073900000000000000000000000000000000000ED -:1073A00000000000000000000000000000000000DD -:1073B00000000000000000000000000000000000CD -:1073C00000000000000000000000000000000000BD -:1073D00000000000000000000000000000000000AD -:1073E000000000000000000000000000000000009D -:1073F000000000000000000000000000000000008D -:10740000000000000000000000000000000000007C -:10741000000000000000000000000000000000006C -:10742000000000000000000000000000000000005C -:10743000000000000000000000000000000000004C -:10744000000000000000000000000000000000003C -:10745000000000000000000000000000000000002C -:10746000000000000000000000000000000000001C -:10747000000000000000000000000000000000000C -:1074800000000000000000000000000000000000FC -:1074900000000000000000000000000000000000EC -:1074A00000000000000000000000000000000000DC -:1074B00000000000000000000000000000000000CC -:1074C00000000000000000000000000000000000BC -:1074D00000000000000000000000000000000000AC -:1074E000000000000000000000000000000000009C -:1074F000000000000000000000000000000000008C -:10750000000000000000000000000000000000007B -:10751000000000000000000000000000000000006B -:10752000000000000000000000000000000000005B -:10753000000000000000000000000000000000004B -:10754000000000000000000000000000000000003B -:10755000000000000000000000000000000000002B -:10756000000000000000000000000000000000001B -:10757000000000000000000000000000000000000B -:1075800000000000000000000000000000000000FB -:1075900000000000000000000000000000000000EB -:1075A00000000000000000000000000000000000DB -:1075B00000000000000000000000000000000000CB -:1075C00000000000000000000000000000000000BB -:1075D00000000000000000000000000000000000AB +:106E20000000000000000000000004710144404721 +:106E300004111115544555515554555504444111EB +:106E400010444411110444411110444411110444EC +:106E500041111044441111044441111044441111D2 +:106E6000044441111044441111044441111044449C +:106E7000111109044114104444111104444111102A +:106E8000444411110444411110444411110444417B +:106E900011104444111104444111104444111104CF +:106EA000444111104444111104444111104444114F +:106EB0001104444111104444111122654A89206C87 +:106EC00098B6070D6F81ADC1C968B284008D888303 +:106ED0008000F8CB000084488E610428010024C49F +:106EE0008D31803A2007A220FF0A20E3E01C0487AE +:106EF00004B045D921112406900992CE142325808F +:106F00001A04064B0D12C34B0430C1067801FA0374 +:106F1000F80CFFA5140643557280681AAB14034899 +:106F20008D524F64212C364288FA72A94CAFAA3E8A +:106F3000ABCA5AB260BC3F1C20E4C49BF012A40050 +:106F4000400000095212A6C43EFE37F543CA7076CF +:106F50009C16CA0D40839AD143B410B60E6A028EB5 +:106F6000D00498319B16BA09D390E6EC50ED004955 +:106F70008D21B3EFE8FEB63C1F8098F16E905FE97B +:106F80000C0CC42DD0DFE063A70B7D094A50D1481B +:106F90005D462D248586B35AE861AE0D74C99322EF +:106FA000593018D238EB4A6CC25458EDFE32FDC449 +:106FB000D4B29D98E73C0A454FBF501E1C003000DC +:106FC000000A0002A2FC52D531458B40A0568868C9 +:106FD000AD02D1468AD0AD14D15A1DA2851FF0EA68 +:106FE000F0DFBD2B8848C50016F48A1C1F7EC76CD5 +:106FF000B12030DF6436FAC1D45069B8D7AE3E460E +:1070000046F460DD2CFA311AADCD5561BFA0D5A58F +:1070100035AD8187515290FFF834A6C9D5E3C0D869 +:10702000D4FF2AA78331232610BFF73F560AB1F3B6 +:10703000A774E64F36CF4F79F011F43BC232A84D1A +:107040009F719E1478043B7844AF61F7346D7314DC +:10705000BDC7FEE29198BEE63ED7CD9CC3AFEC5EC5 +:10706000BE36FCCB67B30E3C512436CD8A95E3FE89 +:10707000FCECFE3FDFCF8FD2BDFCB92800134000EF +:1070800000000000000000000002E73876B83ED99A +:10709000849CF34754EC5B36FF8EF7F37F788AAD20 +:1070A0001FFA4B0F713AF8DBDB2DDA8EAFF3AF58D6 +:1070B0005C8E13448B6FA0BF2C3F0D3F7A4539A3E4 +:1070C000FFE4315D3BFF4D61E3777CFF7F1D774F30 +:1070D0004C51EEFC7F581B59CDFB73EFE4EDFB17D1 +:1070E000FD86FD90D2783FED0FFFC4C291CE94DFB4 +:1070F000AA36D7CF7D73DF7432F62CBD8ABB73FB03 +:1071000074FF6B3B76C76BF32BDC77AB3993CDF613 +:10711000E3E3F077773F66CDFAF3DFF0935A3DF083 +:107120008F6BE3F9A83FFF1A2A4F6FF17128B76BF5 +:1071300037BFCEB5E14F7C7D723FFF4EBFF101DC22 +:10714000616D3DBD87BDE2FA5CDEBE3FBDC77BE33E +:10715000B7FCEF772D5BC7FDB3BFB4EDED177B4FE9 +:10716000E7A12EFCE56F0FFE4C3B22D9D0FDCB2FC3 +:10717000F78AF393BDFC7D7B2F6F4BFAF1F7FCF69A +:10718000031AC341FFE1BFD4DEF60F1BCB96D16BD0 +:10719000F0FCD637658F5EE37F9C641325100209EF +:1071A00091144CA6452245065A40D8B4C9022CACCD +:1071B000859DF177ACFF9232FDCDFFF1CF7CFB3B9B +:1071C0001E7B8F9473FF54FFFD37FFC8FFF17F587C +:1071D000CDDF2CCF0F7DE3BF30FD370E3EC961F10F +:1071E00002983E622AA8C2C8E39A0C751B0EF68B61 +:1071F0002BD0A30885D531918A16C159D4454211A7 +:107200000C8D1693D9B4ACC535AF4B5ED1A63C10EE +:107210000E2120089B604020B080280003DE03F58B +:10722000DCD73F28D7489F208B4C6E253E2A4099BB +:10723000A2FB48D941122282E0A357B0281239DBC1 +:107240008BAE2188A8B6C6056D40C291DCD46EFC19 +:107250001B710B6F00A3B039F82FEC420A300420E9 +:1072600080081DF34AFFF3FD34D1672C958F02D0BF +:10727000D7BCB5661BCEC17F93112812861C354E34 +:10728000F073EB809ACE2FB4CDCFE0B4FC95C5352A +:10729000750FA3D23E4C2BF63B5242FF4363DC7E7C +:1072A000FE3EEE48CFD1DE74AAE12BD8C776E127A7 +:1072B000188E501942C0B8E1B54C77DF3A920CF7FE +:1072C000F3977CCDD63E2E4909F13FF0F7EA0EF94F +:1072D0008570733B583F2D1CE74DF331AF9852F743 +:1072E00017FB8BEF5167F857DA3F7ACFF990CCFC58 +:1072F000D9353CD5027D9010C0D15000F34E888323 +:1073000057245902048743FE8047987309227DCC95 +:10731000FCA17E6C42973FF34EE790BAD4CD431E5A +:107320007FC65EE212EC3EBC1DC88205A27FDC6B0C +:10733000D729D787BFF3769C908025E6415CF3D5AB +:1073400080A9CA3F838A6FF15ED092392630C2D8B5 +:107350007195B43DEF1FEAC99AB3383C364D2D4EB6 +:10736000C34573119810C61FF5451F801408391ABC +:1073700013A54B4E13BADC62BB3DE6075DE0FFE8A8 +:10738000FA293FF2053F226DA0F34A0EFB4FE0F1D0 +:10739000FCA4B5D833F7885411A34C03FA12FC436C +:1073A0009EA29224734002858B0CB2ABB8DD1F0104 +:1073B00076C276535BDC9A3F23264F538289605D09 +:1073C000C62DA3CA6FB2922C53530F33CC61F1B1C7 +:1073D000B4C2053E1BCFAFE0ABC0EAF52BFF0DFA00 +:1073E00053F7C079F529DB8058E3BFBCABCF0BFF67 +:1073F0008DC4F26AB8ECD53CE304BA12D8A45ED2CC +:107400002926CE36D304882EA1348D00B6511CDC3B +:107410008DA30F0248E3821A1035CE01198B8C21FF +:10742000B488BCAA3EF60B1763ED34B9D82ED74EFC +:10743000FCB0450CDFD70251414DB14DA44DA41510 +:10744000514AD36119E4DC0F3D11CF90A3FE4C7B70 +:10745000C431FF4B7E23F6447FCB0CDC8FEB20B591 +:1074600008673F27A1CE86316CCC03D502280E13C6 +:1074700061F39CE8C71C8F8CF743D1C49F7D3ED538 +:107480000527B0EBF46B33226D47F1612C08A27F26 +:107490003F4346B8A2A7FC99F73E8B45B3319FD036 +:1074A000E8B61B33C9FD128B64ABBF23CF0C8AB285 +:1074B000EF98E75A346D0D5C52B7C8B55C3B6683F4 +:1074C00038603AB42F601A9DCB5A71D714979F3306 +:1074D0003AC4CF437FEC6F8527404CD950ECEC7712 +:1074E0009F1BB7C97B817E3CB26F2D208AA2A2660A +:1074F00068377B041BCBEF6240A8902B2DFDC81191 +:107500006319FCC5BA353C02ECA172E4051300FF17 +:107510000E0141207C07F13C7A0686714520C3FCB0 +:107520003558090483EC804ABF226A4A1C11A7A07F +:10753000C70035AA4054C2295C34102EDB829CE07F +:10754000C194900C194045E8005578516A16A2CABA +:107550002D42D4580AA8224442238020C863962A88 +:10756000E6082AC11430FBFD3D284825F2504CBFE7 +:10757000FF3F9FCF07F2943412FF28270FBFC03F71 +:107580009C1C9C24CFC37E32E4A435AB00200000B9 +:10759000000000000000000000010200040820407C +:1075A00082040102108108001000000000000000A9 +:1075B0000408020420081008210081010410102092 +:1075C00008410408481020210010212040820400B6 +:1075D000204000000000000000000000000000004B :1075E000000000000000000000000000000000009B -:1075F000000000000000000000000000000000008B -:10760000000000000000000000000000000000007A -:10761000000000000000000000000000000000006A -:10762000000000000000000000000000000000005A -:10763000000000000000000000000000000000004A -:10764000000000000000000000000000000000003A -:10765000000000000000000000000000000000002A -:10766000000000000000000000000000000000001A +:1075F0000000000000000000010200842010841040 +:107600008108420021004084040820408204008850 +:1076100040F7EF16FECDFF73C2FCF9DE1EDFC7FF99 +:1076200093C1ECF30F37FFCFB710FB0CFF3F3E7752 +:10763000C3FFF01FF8FBFA07FF43D0C3F1000C0BA8 +:1076400000080FFF2040045040198C426C50026C1F +:107650000000000000000000004A9000040200004A +:1076600000003000000000000000000000000000EA :10767000000000000000000000000000000000000A :1076800000000000000000000000000000000000FA :1076900000000000000000000000000000000000EA :1076A00000000000000000000000000000000000DA -:1076B00000000000000000000000000000000000CA +:1076B00000020000000000000000000000000000C8 :1076C00000000000000000000000000000000000BA :1076D00000000000000000000000000000000000AA :1076E000000000000000000000000000000000009A -:1076F000000000000000000000000000000000008A +:1076F0000000000000000000000200000000000088 :107700000000000000000000000000000000000079 :107710000000000000000000000000000000000069 :107720000000000000000000000000000000000059 @@ -237191,4103 +237191,6 @@ :10E4C000000000000000000000000000000000004C :10E4D000000000000000000000000000000000003C :10E4E000000000000000000000000000000000002C -:10E4F00000000000000000000000000000000450C8 -:10E50000010000450411111110444441111044440C -:10E510000444411110444411110444411110444475 -:10E5200011110444411110444411110444411110CB -:10E530004444111104444111104444111104444154 -:10E5400011104444111108044110104444111104E5 -:10E550004441111044441111044441111044441128 -:10E560001104444111104444111104444111104458 -:10E570004411110444411110444411110444411147 -:10E58000104444111104444111104444111103403A -:10E59000480181002000202121C823F21020801092 -:10E5A0000001842401FE00020004108010002040BD -:10E5B000000A00800E05024044000000F00009023D -:10E5C0000000408700004F00039DBC06C23D988EAE -:10E5D0003C7331001BFE07E20FF883E204BA811797 -:10E5E00004093F83FC2C7FFF3A174FFFF3E17CFFC8 -:10E5F000FF3F0BCFFFF007BC01FD3E9001CFF000C5 -:10E600000000000001000003FC10599E32F7CFFD0E -:10E6100090005C4648000000800002002081040851 -:10E62000098F438438B220000B0748801C20659175 -:10E630001D20407080A0044D4004004FCC11C20C3E -:10E6400005480A00443C020810811720B80053F026 -:10E65000450430FB01028A48A211146BAE13FF423D -:10E6600010832010E1380800000A021050028008D0 -:10E67000280040818408E3201469005DC3100092E3 -:10E680007E12594C5E300418F102000042F910026B -:10E69000E0000000000800001F10D6A80D4D00008B -:10E6A00000000000000200000000000000000280E6 -:10E6B0000369A02C2088303D0005AF901A0CD7E4E8 -:10E6C0001041400C92050803F63FFE4AF0208BD41F -:10E6D000693B0207C7B4000010FA44001F80000322 -:10E6E000EFAC0187140F82A7D04000D7E62043800B -:10E6F0007020010482B208090832200010D01101F4 -:10E7000062C316C00924003012458A804294B000CA -:10E7100052101480A0020020000218348A06818161 -:10E720000C12001A620000034F80102100208CA000 -:10E73000508160203C246440C080000C08800000B0 -:10E740000842011D88C8311629CAAA80F4C4054DA3 -:10E75000002080000000000000000000000314C83A -:10E7600002940000001000A200232000210000807D -:10E770008000200820000008B25C008462002009AC -:10E780007001C00043410440C09082200045300524 -:10E7900028025081703404001C0000C1104B80001E -:10E7A00000004B800101170080002B5AC2000000BE -:10E7B0000430043800040EA28404008210000F69A3 -:10E7C000A00344000102C8008002E00032BA088CB5 -:10E7D0008004000018315C0018015C02755801903B -:10E7E0001384892222718C30220041048840888061 -:10E7F00058880181022260E000E63E0171081D4058 -:10E80000E018059915C0006570FEC008392B820C10 -:10E81000D072334C282C00128846101000170020AC -:10E8200000015D10009001081804080101D0AC75CA -:10E8300075015D4B589294505C2019420500100000 -:10E8400028202105288000C0AF840008000B80919B -:10E8500083F3A8902B08C9405610BD4042BB040169 -:10E860008344A07BD0423519B10184C05CF42DD122 -:10E87000306B86E8D1E20411041004041790D11023 -:10E880004B7A121582BAD02D500040182001001288 -:10E89000009005710AE041009000047C100C0041DA -:10E8A0001880220C059C1000082080D190040103E0 -:10E8B0000A001073FC78DC2311040AE50300000051 -:10E8C000A00201008402550028BC1800CA00008282 -:10E8D0005C4835172C895A902298527108020080A2 -:10E8E000004A50C5E020178EC0731794505E05CBC8 -:10E8F000C4A570A878C1A812200D8840A1608641E7 -:10E9000005654A052224E407C00AF60E6F1288182E -:10E9100062CF080DC277605EFC8928161206E2E21B -:10E920004F9C24521014402770B414315B1515C14C -:10E930006F81A5645D7104568247C253A057640A73 -:10E940005002B6B201080C7B0228063420162C6255 -:10E95000880C0442AB82055C48C738174540E2BAD0 -:10E960009CDB37048A0C36933AECB98025C04AB058 -:10E9700020EFD8027E135B880510000005102417D5 -:10E98000892811A51892D21B5384E920055C001A2E -:10E990000256CFF843A17C0CF610D00D6C00C000DD -:10E9A0009DBB2703833C339D8016402CC2C7F330A8 -:10E9B000448469F8040002A1724068008A3EA3CF33 -:10E9C000F502003C6C802980080001084000B10D70 -:10E9D000420000500000248B2C3243018024740E2E -:10E9E00088012B4E81A06F4899291000045241489C -:10E9F000C4009809100C145074D812EF0A5B800000 -:10EA0000A03820200C2000000102AB0C00810980FE -:10EA1000052C12004020100001043B430280C1007D -:10EA2000129480881208484210229000730302401A -:10EA3000050036540183020C84E8003D2A0081C29F -:10EA4000EB24A90D20D88360409A4C007802C04383 -:10EA50002A000860280622C1074FF12124200B015B -:10EA600000818800172803C820808040E0048010BF -:10EA7000A8181C0AAA81F2C4E17C3F94CB0B411078 -:10EA800008BFA215030830737D04AF0711D0013E03 -:10EA900020BED05FF824004F8173F064F5B3048486 -:10EAA000000480485C21000004C010032410018091 -:10EAB0002278826000000000023C440028004000F0 -:10EAC0007C001C030201120FC8005F08900C7980C3 -:10EAD0000824D39C39E203898140082D79105D42D6 -:10EAE00018214C5C1017008480F2800AA05210207C -:10EAF0004185100042685CFC01000053004608009C -:10EB00000830608C581269A0FA191AD5CD8201829A -:10EB10001082130000402000B8000040008C00006C -:10EB2000001820000000748C0022140002121C0245 -:10EB300008A8120500956E2DD34F4FA002A47C00AB -:10EB400001588011039B5856C03148824212D03080 -:10EB500004AC005A4A41526EA00088012009D0B08E -:10EB60002C34AD9D00A502F281490054FC3F580CA5 -:10EB70000A914FE8F58100A9C4FEB3581458430028 -:10EB8000604496C02E807800221C04322024702B12 -:10EB90006029214031F075A88A3105200064802069 -:10EBA000000000000003003021008100214D8000A2 -:10EBB000F00000010227C50540100000028004009B -:10EBC00000008048001252121804A5013A004E813C -:10EBD00005854C13A1809458D517260001610000CB -:10EBE000000800F0000000007807F000800000013D -:10EBF000002000000B200281434D40001627FF0F2C -:10EC00000D01696C2414060D800202602000870843 -:10EC1000100000E281C0E40E1E6043F203C12066D2 -:10EC20000920CC0CC1901980F83304080A841028FC -:10EC300098040000008820022280F00000000C09E7 -:10EC4000E0000000781E3E000000000004F000011B -:10EC5000880000003C9EFC37D64FB330CBFC11102F -:10EC60000424088420891048910489004891224492 -:10EC70004488244882448122109108041202122000 -:10EC8000884848910489024420891088210891010C -:10EC90000410122408410488491220212012212442 -:10ECA00048824482244822441224412241122408EA -:10ECB000421224444242448824480891048910485E -:10ECC000904489244882448224481084112240843C -:10ECD000201084109108424221204884448924480D -:10ECE0008244808848640704AAC0C541C550E880B2 -:10ECF0003984010E82139894460B88418170E04854 -:10ED0000840D04500308112DD00122010101C1C05E -:10ED1000F0104200101D4C0020001080000A020F6D -:10ED2000CA80001C00000000000000000018B000B5 -:10ED30000000000000007000000000000000000063 -:10ED400000000000000000000000000000000000C3 -:10ED500000000000000000000000000000000000B3 -:10ED600000000000000000000000000000000000A3 -:10ED70000000000000000000000000000000000093 -:10ED80000000000000020000000000000000000081 -:10ED9000080000000000000000000000000000006B -:10EDA0000000000000000000000000000000000063 -:10EDB0000000000000000000000000000000000053 -:10EDC0000000000000000000000000000002000041 -:10EDD000000000000000000008000000000000002B -:10EDE0000000000000000000000000000000000023 -:10EDF0000000000000000000000000000000000013 -:10EE00000000000000000000000000000000000002 -:10EE100000000000000000000000000000000000F2 -:10EE200000003FCF8FFFF3FCFCFFFF2AABCAAAA272 -:10EE3000AAA8AAAA3FFFCFFFF3FFFCFFFF3FFFCF27 -:10EE4000FFF3FFFCFFFF3FFFCFFFF3FFFCFFFF3FA0 -:10EE5000FFCFFFF3FFFCFFFF3FFFCFFFF3FFFCFF00 -:10EE6000FF3FFFCFFFF3FFFCFFFF37FFCFFFF3FFB5 -:10EE7000FCFFFF3FFFCFFFF3FFFCFFFF3FFFCFFF94 -:10EE8000F3FFFCFFFF3FFFCFFFF3FFFCFFFF3FFF60 -:10EE9000CFFFF3FFFCFFFF3FFFCFFFF3FFFCFFFFC0 -:10EEA0003FFFCFFFF3FFFCFFFF3FFFCFFFF3FFFC70 -:10EEB000FFFF1102CF54D22344086423F8CC42B0A0 -:10EEC00067FC096700F30058C000247C8028670CA9 -:10EED000C3B0828450D012024098018EF8EA413DBE -:10EEE00000C416301FA81FF803FFCC409088009084 -:10EEF0004C066A810A10D548440B102A808AA02A41 -:10EF00009002A4000102012201000010088080226A -:10EF1000004800011022400200812224024A0521FB -:10EF200046408040842011004401304249C02808F6 -:10EF3000004482928007A440400000840E01093CF6 -:10EF400041000802017580084032033014480F0068 -:10EF50006040899020388181014A4085083841808D -:10EF6000A0720394181014A407B080100400410389 -:10EF7000A04023008000001E0005001002200018A1 -:10EF8000E8210A8421000C20222010924021002137 -:10EF9000000841308004080000808008071E0091AE -:10EFA00021BC04000100020A00414060B680050A4D -:10EFB0008043E24804921112490E202000244A1096 -:10EFC000119441C060638C38C70671838C70C71878 -:10EFD000718E08E30120427E4000062000808400FC -:10EFE0000004E2022080409AE0128411BD1A1184CC -:10EFF00068431CE4814120020A4B018000258830CF -:10F0000007022C92C2588BFA1F1640C033000080B2 -:10F010000000024044C000900000200001103100B8 -:10F0200000009C08F00780001008408600180010BF -:10F03000010B0C2061106103000001800100093800 -:10F04000001A22000000000028CA00000100000091 -:10F050000000030182120C005000018020202000DB -:10F060000002000001080124000164048240400005 -:10F07000409003860034C000000000000000000043 -:10F08000000386080102000040030000040400029F -:10F0900010800000000000000000000010080000C8 -:10F0A0000000000020008000000000320000000886 -:10F0B0000000000000000000000000000800000048 -:10F0C00000010000000001000000020000000080BC -:10F0D000400080000000001000000400F9308000B3 -:10F0E0000000040000200000060020000000400096 -:10F0F0004010000040000000000008000000080070 -:10F100000000200120400C44401000834000000C0F -:10F110000001000000000200044000000000002088 -:10F12000100200006F0000000080000820080000AE -:10F1300000000000000000040000000000020000C9 -:10F1400000020000020808000800000000000000A3 -:10F1500000800420200008010020080000000001B9 -:10F160000200000000000000000200000400000196 -:10F17000000104040041000200000600000000003D -:10F1800000100CF800000000000001000000020068 -:10F19000000034040C000A02010004000000000614 -:10F1A0000201186C1D000001002C40B184090620EA -:10F1B000F04042400018205800B00000210870962E -:10F1C0001801090200C3000003C002068C330000CE -:10F1D0000800000808020F010280140200008020CD -:10F1E00002020CC0020380001002008800C80870F0 -:10F1F00000B0200080921900410000200060000053 -:10F2000000000100000000000308000400100000DE -:10F210000000000006000001A0000004058002219B -:10F2200000200104001000000000000000000000A9 -:10F2300000000000000000000000000008000000C6 -:10F240000000000020000000000006000000084050 -:10F250000000000004000210000011000000000087 -:10F26000002008000100010000000000044300C16C -:10F270001000000020020800000000000000000054 -:10F280000008000000000100000000000000000075 -:10F2900000080000100300400000004624004D005C -:10F2A000000000020C0C40E8A0234C32E1C872328E -:10F2B0004F3C0800078008200097E03F400001080D -:10F2C000000060041088000581D011682090900033 -:10F2D00008400000000000A33C000E0020CA008887 -:10F2E00000322688902000302000000000007000CE -:10F2F0000008100000000000030000000000018072 -:10F30000800020040000010400006210300004406E -:10F3100000000001FC003000044BF00104B46070F8 -:10F32000006841281110000020070C4C0002360430 -:10F330000800200001F010000080060000402600B8 -:10F340004C0016240529487120050010841028411E -:10F3500002906000920F398800014033601F021450 -:10F360000DC100801C08428E10E3C01800493024F3 -:10F37000AE005085400000382498104005006040E1 -:10F380002040490980008001100C01100104008018 -:10F3900080060800800090001802821040400200A1 -:10F3A000820C0000001430010B81205016108826BA -:10F3B00009010912000B000443081F480022000045 -:10F3C00071C00600001020000000000000000000D6 -:10F3D000000006800008000000000000000B400054 -:10F3E00000000000A800080040000000E8024400FF -:10F3F000120626C0047C4010010000E08306BC1603 -:10F40000A20203881CB3C10038000300C001000041 -:10F41000001D080008880002601C022E0000003D4C -:10F42000C0474C940600200408008F0014BD074814 -:10F4300043D303D300D30000044802100018800017 -:10F4400000300800016800100021C006005129307A -:10F450000018002100000308EC000700E903A400E5 -:10F46000000028000004400011C10800C401A00CE5 -:10F47000488000C40080000C0C00400088000000A0 -:10F480000003F0100800003F18D0000221800000A7 -:10F490001009800000000130980000000013018076 -:10F4A00000601218000A3800024CB0003D1047C13D -:10F4B0006000000C020013804012460015C8026074 -:10F4C00040518040008788110CCC40C184400082AC -:10F4D000000008004030E0548108D4007800C038B3 -:10F4E00060E418098008E17000039C0000080683AE -:10F4F000DC04F70021528A883247C440A0144D082A -:10F5000003800E0CEB743D00C1FAF0FF80FFFF0298 -:10F5100001C17D8232CC7E03008FC47A21BA3CB710 -:10F52000FB0121C1F0F060E000000D1ECF0C00C017 -:10F530000081822000094612A408092000890C4499 -:10F540009103E4F21E21E40E43C03C8420791DBBEC -:10F55000CF38F3E3B418FF11514FFE20610C0403C0 -:10F56000065C861600B2B44005014000FC032E483C -:10F570000B00195AC04293E1400891048A025011CD -:10F58000B4947E1004250C8420C9904C9924C9821F -:10F590004C91326464C8264C8264C13210990804CC -:10F5A00093021320C84C4C9904C9826420C990C9A5 -:10F5B000210C990924909324084904C849932021D7 -:10F5C000301321264C8264C3264C32641326493200 -:10F5D0006193240842132646426264C8264C0C9963 -:10F5E00004C9924C9864C9264C8264C3264C90840A -:10F5F00019324084209084909908424321324C84EF -:10F6000064C9264C8264C0884C397A2A61CA90A2A7 -:10F610009A54D4170204812D53B02002C410518A89 -:10F6200076C00004F2AA164A4134F3C018F6250544 -:10F63000A2021210000047F41017CC005100102055 -:10F6400015007F4BBBA040CC0F203FFC0000F0001A -:10F6500000FFF000000000000000100000000000AB -:10F66000000000000000000000000000000000009A -:10F67000000000000000000000000000000000008A -:10F68000000000000000000000000000000000007A -:10F69000000000000000000000000000000000006A -:10F6A0000000000000000000000200000000000058 -:10F6B0000000004008000000000000000000000002 -:10F6C000000000000000000000000000000000003A -:10F6D000000000000000000000000000000000002A -:10F6E000000000000000000000000000000000001A -:10F6F00000020000000000000000004008000000C0 -:10F7000000000000000000000000000000000000F9 -:10F7100000000000000000000000000000000000E9 -:10F7200000000000000000000000000000000000D9 -:10F7300000000000000000000000000000000000C9 -:10F7400000000000000000000000000000000000B9 -:10F7500000000000000000000000000000000000A9 -:10F760000000000000000000000000000000000099 -:10F770000000000000000000000000000000000089 -:10F780000000000000000000000000000000000079 -:10F790000000000000000000000000000000000069 -:10F7A0000000000000000000000000000000000059 -:10F7B0000000000000000000000000000000000049 -:10F7C0000000000000000000000000000000000039 -:10F7D00000000000000006404A0100000002000195 -:10F7E000698025C001688000000000000000000260 -:10F7F0000000000000000000000000800C0100007C -:10F8000028000000FF000003E000040700A006003D -:10F81000031A5C00811990C070E32180033400C397 -:10F820000330C0C30000C00078016E01D8005BEF58 -:10F8300034004DDDF3800CEEEF1C0044F7724F3CBA -:10F8400021BC3E42007B700000000000010000036C -:10F85000D0102F3D21EC8DFAF002BC0040000000DA -:10F86000020202042AAC156403DA50041C12840854 -:10F8700000039A80802000940E680400800010012C -:10F88000001410008010E68422080001052002AA5E -:10F89000C8AC84000A8C5000440400E900908488BD -:10F8A00080112000A4010800000000004140080071 -:10F8B00000000210400000082000000000000000CE -:10F8C000100B4044001400687E14554094008808D2 -:10F8D000C00400000003520A00001000000A0000EB -:10F8E000200C5295154509402012802825125042BF -:10F8F0008250250C504A09A081C860EA6098392BD3 -:10F900000748C52092C4821C1556C00CB0000003E5 -:10F9100064321040C08009904104020283102040EC -:10F92000002000080D000401820081AD150C018843 -:10F93000514808D0002A6FC9F2600040AACA28289E -:10F94000C038600230B6D52C5602B1D122400638FC -:10F950002888C1A1702114014400000100000000AA -:10F9600000040108000C21A1040000208002020212 -:10F970003188042800004D00808804003E3AB48895 -:10F980004280000C90000000080000B8A84A101245 -:10F990000B828281B4442118001A4000000000004C -:10F9A000000000000002E318349C3E088240F2028E -:10F9B000006249202046A1723340021C1D300A0912 -:10F9C000703858C8D0004848AD33A550561C08417F -:10F9D0008104B020008500052B0010C37AE8004B9D -:10F9E0003BA60D41225728B34B0B570600112EE8BA -:10F9F0002B501959C8CA12688424911698067C9015 -:10FA000050081B8D0FDF84C2114494D28A36430AFA -:10FA10002D03CB3432F2009D88393130101D6B300C -:10FA2000124D6B42AFDC97601589CE2BB265C430A6 -:10FA3000AA2472028952AAC0810931B382BEF3FCA2 -:10FA4000003E03022A482D908008050837B4CAA555 -:10FA5000E1695449320FFE4ABE010104336D0D398C -:10FA6000831CA29A189E1A2B18037940A18C692333 -:10FA7000241186980396B4EDED07794FE3C1257CF8 -:10FA8000E0030FFE08110040D0E0432FB684C1917F -:10FA9000BDEC355E262F0988E1C7B0BC1318C24102 -:10FAA000F6A195C0CEF6310B03808073D07CD631A1 -:10FAB000C18D15D15234660324900301811D4C364B -:10FAC000C908A60B3A607EA4898026AC0587D05E63 -:10FAD000C4498A315F0F1250420CBB0E1E184A6295 -:10FAE000204EDCFB8F3C49442871F4A0497400008F -:10FAF00004110009100045203A0010C3FF802C07B4 -:10FB0000000000C8210044400006900108D12208EE -:10FB100004D414158A164018540320100801061046 -:10FB200098903C0005AA48061082100000002008AA -:10FB30009260002090800800039E0073DCC51300D3 -:10FB40000008880083446A043E2A401922F9484F7D -:10FB5000C5122202C0A20330281F10CB81AE20881C -:10FB6000A8A64404480000019E80A6F011B5806E4E -:10FB700030A3A0395827CC022A30000000001DF322 -:10FB80000247B3FD2010472C958F0092410CB4071B -:10FB900003080034001028020414144CF07283800F -:10FBA0009ACC0E204101C0848C814D04010DA3D25A -:10FBB0003E4009D2315242B40243C43A7E02EA8046 -:10FBC0004DD0823482462858C52403031886601815 -:10FBD00046419861250C67FE129008A7D287280D30 -:10FBE0005E1000080101200096AA0E01C5511128DF -:10FBF00000344A15054D4420221082C01408020D1D -:10FC0000C1508040433C3282E140447C80020891F4 -:10FC10000000102100905000424C80024000010082 -:10FC20000102408E8005803008006DC4D8206A4CE7 -:10FC30009000110004420002D400900811025442C6 -:10FC400012EC2E101CCC00058254CC681C21B68608 -:10FC5000F792AE9C918725E6435C620DB0A4AA00A2 -:10FC60000106FF4326A832990211015810060080B0 -:10FC700000128C023AC2A900021D29080571925196 -:10FC800080D0021D65401F802400201A11A1480E5B -:10FC900093B81413AB3DE201AC222DECFA2C2BE00F -:10FCA000035FB03144280234D00CA0017C2411C879 -:10FCB00006A88040A0832403A8015C46E88382C490 -:10FCC000287C3E05C93E022088951A3C16C270F376 -:10FCD0005AA49A9F2320455380C968C5402000CA72 -:10FCE000CF328470535E0201400091003000001555 -:10FCF00012000160000082802078490200B2A0005A -:10FD00000029400C5023BFBCA80F09100026120A7E -:10FD1000A824D4288004EA015924729029264E325E -:10FD2000D288884EF5348500365100888DA101397E -:10FD30004BC182CF4835290001C904012408BCEB1E -:10FD40001EF7021541CDA408D024D206EDB0450C13 -:10FD5000DA550261416921692069200008C04161CA -:10FD60000000F40930114B80201C003DC03E194BAF -:10FD70007FA29400378B000009A820B500273F27F9 -:10FD8000A1CE863024CC43C00051842F62231CAA0C -:10FD9000C5208E0C0253D4041E270765050790EB7F -:10FDA000A4231116EC095001BE04219521424F38BD -:10FDB00082A30C99F73A810093319F50A81209331E -:10FDC000C9F50281242ABA23CE08CA906F90E208AE -:10FDD000143C0D5432B508A54E00668C43E0A2B029 -:10FDE000454222208AD090420000080008040041C9 -:10FDF0002560018006000801402000110203AD4982 -:10FE00007D207A00307C0E92C011B22260154A200B -:10FE10001B8BAB435C08D70231788C306201FC51FC -:10FE2000A0162E42C0F00244001200FF0E00000097 -:10FE30007C07F000680000010020000014100100A1 -:10FE400080848002A9269E0E141133A434A1058B50 -:10FE50004004800000000028910000C0C0000000A5 -:10FE6000004004E0000140500A00A00A01401400D4 -:10FE7000002800004A0000001800040000080A01E1 -:10FE80002400000538000801F00000BFFA3E9FC1C1 -:10FE900003F0000000FF00010FBD001E9C3DF02C90 -:10FEA0008BCF5E70A7EC3500042100942008104031 -:10FEB000892448004081020424082044820441022D -:10FEC000108908041102112008404081044882046E -:10FED000200890482104810904101020084104489A -:10FEE00048902021101121204082244022400224E9 -:10FEF000112049120010200842112040420204083B -:10FF00002244008904081040800408204082040133 -:10FF100022401084010200842010841081084200D5 -:10FF20002110448404082040822400884442CD20CB -:10FF30003B8A50E3502C0C0C00018060C3A00048A9 -:10FF400082080A0E238011C0E28E3908C156E3A050 -:10FF5000245260001A001000010004A0000DCC0023 -:10FF600011140051450C340264400040F0203FFF62 -:10FF7000C000F000005AB0078000000000009000B0 -:10FF80000000000000000000000000000000000071 -:10FF90000000000000000000000000000000000061 -:10FFA0000000000000000000000000000000000051 -:10FFB0000000000000000000000000000000000041 -:10FFC000000000000000000000000000000300002E -:10FFD0000000000000000000080000000000000019 -:10FFE0000000000000000000000000000000000011 -:10FFF0000000000000000000000000000000000001 -:02000004003AC0 -:1000000000000000000000000000000000000000F0 -:1000100000000000000300000000000000000000DD -:1000200008000000000000000000000000000000C8 -:1000300000000000000000000000000000000000C0 -:1000400000000000000000000000000000000000B0 -:1000500000000000000000000000000000000000A0 -:100060000000000000000000000000008040400090 -:100070000000001010051511010051510000000092 -:100080000000000000000000000000000000000070 -:100090000000000000000000000000000000000060 -:1000A0000000000000000000000000000000000050 -:1000B0000000080000040000000000000000000034 -:1000C0000000000000000000000000000000000030 -:1000D0000000000000000000000000000000000020 -:1000E0000000000000000000000000000000000010 -:1000F000000000000000000000000142008B2144CD -:100100008040012000C202920C00C01400024C4446 -:10011000000170020014C4809001FA0C018E32A616 -:1001200046A54040040F310200031100007CB000DE -:10013000021008A0B19D840CCA050E4A08321C8426 -:1001400002060039049E51780C22030452014950E2 -:10015000909035341906403200D040019026A0031B -:1001600000C0D6048C142A9CCC541241880D312A2C -:100170004C8964504C200AD816C0028820080441DB -:1001800000000405800201B02E9025E044004034B8 -:1001900008410E0802012081C1A0400804800A869F -:1001A0008020246859041000E320485CD0680202D3 -:1001B000480592E908BC38220900102247000C03C8 -:1001C00004048C88E113200014131882409090409E -:1001D000744228268001321070004E18384C932249 -:1001E0000D3808900790405B01E018881419DD0471 -:1001F000F10278D0878A0500804010001028B028CE -:10020000A280010015008008010C0002A0801001EE -:100210008002030018010020020002060011208065 -:100220002080210D000881405340182C125E00846C -:100230001111C0002412114C0A032480010014C2C1 -:100240000002E01C90019D2214863110A0140C01C4 -:10025000102409105040209670246A40902140409C -:100260009311085684720005509D8118070830F1DB -:100270000F80001020004521200090A6002A0AC807 -:100280001950B65460A62A80448740B6304970158C -:10029000490159E092AC16C6324580140108D09845 -:1002A0000F21040240120D181F4312884A05725F85 -:1002B000AC8D1F2BD98295A23B686A0000420FF2D9 -:1002C00082A00C08103E0042AD30214418D82A20EC -:1002D0008980A072C0C3750000071812E164231062 -:1002E0001A220B0920508872730E6C494A218C58CF -:1002F000D30500004FA48203C4053801280AD09218 -:100300008A0804601B4445612052106121281B04A7 -:10031000411124D0315808288982502D1836A7253C -:1003200011CF0880848C528E081CC0C21352004921 -:1003300010020606C532C614A2360F510C1EA223A7 -:1003400018515A231B4512837290390400A0802053 -:10035000A020080402004900805204044888108B41 -:10036000482AC3027C59E308C5034403809026C091 -:10037000253889B142D04869731C66C0A9A21A20E9 -:10038000C5C625000E1192C2C894292E11471040EF -:1003900024044C2634B70511C18C80686C0B1803FB -:1003A0008AA2C4A42B58285C0822A33B4C3F1722E6 -:1003B00008C35B4008445369024B00125340A083BA -:1003C000CC2F110E43134640CEB0020C0074024FE6 -:1003D0001033821E10CC88C1A2688403003400014F -:1003E0008190800B412044041C4090002000388202 -:1003F00040004184082C951AA0414B019D70D40106 -:10040000002F8100412F001C60052CC0F7A00304C1 -:10041000100B14010044107360888201064B60B019 -:1004200081044249308041A0409580102900250474 -:1004300049B00840308200804600020BC425800885 -:1004400082404103E81C5B080722CE6D3224982AC3 -:10045000001208406400BC4800712204006402508D -:1004600014221500244000101404580004888160F0 -:10047000511514482419484904A14140106002A1B3 -:10048000045490979CC8102410050D230E00762765 -:10049000249201B08002841200311001C140014455 -:1004A000500408D001EC3149E080000E8000481073 -:1004B000B100448021508A000000900944003009B6 -:1004C0002053AD2049A400A941404040A0281B036F -:1004D0005E41AE10E1845C520800821D23419042CF -:1004E000520848414210029884401950C021300AF5 -:1004F000545441180A0081410180725A1800003298 -:10050000C114280846365C0211B00CA0D5A008E042 -:100510000D120000400C2C2C46066CC18360552443 -:10052000016783860020D044AC07C8447DA0040C3A -:10053000504804800C0203045001000E10000452C5 -:10054000485C0E201C21035400025C6B8019214979 -:1005500080405268468E22328CFCE13080CA47329D -:10056000A2000CE08800100528800A080214E8B8F0 -:10057000D00082828790450800880101000841D49C -:10058000802018270104A6500290401816840E04FB -:1005900083104842D90240088000933C50800001FB -:1005A000C10122009420A008B00110815008303011 -:1005B0000500024400A204A02118E8070800A100D9 -:1005C0000A212CA00A1F422D48B293063384C0F1A1 -:1005D0000820184C1ED38895012044005A12640B41 -:1005E000A6A00134329238160990A1091090052670 -:1005F00038008421110C001900488611028800017E -:100600004022010801020800440000028A8D6003B4 -:100610005C403D300A460D019CC0A0D4390D072A2C -:1006200022860018C100C9003CD0343020CC0B35E4 -:10063000848DF3F290F11030E041002028044E82C6 -:1006400028270018211C000C2026A40022C039886D -:10065000A0C1050408C080000440C63523810EA156 -:100660000C107D0009C246A1215020086016528757 -:100670004A01514C0250240042086208600868296F -:10068000E2013282018087D932C4CD2D439A2C7089 -:10069000BE0040496020C480260233C0009CD03791 -:1006A0000020801005800001010040C114808DCB26 -:1006B000009B984682021044002230401A04010137 -:1006C0000186210024AB400802C8CA810118C68CEB -:1006D00015080B28C00584200102240204020040F2 -:1006E00060C02040020C12040000902455008120BC -:1006F00000906B470026001400620C401404240094 -:1007000006612044B0100802CC0010B04C011B114F -:100710003E004003A14010011E0F8F66A0F004317F -:10072000433FF00F407315080C0020420384020180 -:1007300064105032D2030910000000000E00014482 -:10074000016C18001801A004EC00D0E00C020200BB -:100750000007010000000010B2048050050041486D -:100760000A2801809020C0000400000003033B0021 -:1007700075F530A10F9040103414200A9200A98220 -:10078000010010881010838800260080900B010063 -:1007900016016024044002000AA400161020020280 -:1007A000E20000001800085001200118024000106B -:1007B0008220A002010090108C0020000005400261 -:1007C00080D81000028105B0009401AB062007829A -:1007D0004270D8A70E3E60CB76819E3C3A702327AC -:1007E000063E709A380C880AFD8A398270A4E60E9B -:1007F0000678C23E0270E879A8368F8EBFE3FD808E -:1008000090AC0E6088C9A2429829C203A70836613D -:10081000E3E49E3E09C34E9A30F980906609A30333 -:10082000A2323E606326268F8A68C3660C3A700344 -:10083000A7083A71E3E4C88E0D9E080602EC8CD935 -:100840008F20E009A393E7803E7823E78C3E7088F1 -:10085000A4BCE51D10CD677140BCB48E1098461B3A -:1008600042110838440600CBA38022C0A6051D1201 -:10087000818BD393D40370047B02828001000044F7 -:1008800000004C00100000555415544B2CA014B01F -:10089000FFC03FFFC000F0000000A000000000A06B -:1008A00000007000000000000000000000000000D8 -:1008B0000000000000000000000000000000000038 -:1008C0000000000000000000000000000000000028 -:1008D0000000000000000000000000000000000018 -:1008E0000000000000000000000000000000000008 -:1008F0000002000000001000000000000180000065 -:1009000000000000000000000000000000000000E7 -:1009100000000000000000000000000000000000D7 -:1009200000000000000000000000000000000000C7 -:1009300000000000000000000002000000001000A5 -:100940000000000001800000000000000000000026 -:100950000000000000000000000000000000000097 -:100960000000000000000000000000000000000087 -:100970000000000000000000000000000000000077 -:100980000000000000000000000000000000000067 -:100990000000000000000000000000000000000057 -:1009A0000000000000000000000000000000000047 -:1009B0000000000000000000000000000000000037 -:1009C0000000000000000000000000000000000027 -:1009D000000000000000080000000000000000000F -:1009E0000000000000000000000000000000000007 -:1009F00000000000000000000000000000000000F7 -:100A000000000000000000000000000000000000E6 -:100A10000000000000000000000000000000204076 -:100A200048A22040000200012080008000208000B9 -:100A30000000800000000002000000000000000034 -:100A40000000008000010000000000000000000025 -:100A5000000000000000010000090000000100800B -:100A6000000201000200000200008002000080007D -:100A700000010002800004000000400000000000AF -:100A80000000000000000400000804000020000036 -:100A90000004000801000000001004100080001095 -:100AA000400000004000000000100200249024805C -:100AB000418040040804820800010880402000248E -:100AC000042000808000900009041000801042047F -:100AD00010080009040092EBC8BC80000B801000D5 -:100AE00044000009040084088011200084010800EB -:100AF0000000000020000800400002104000001824 -:100B0000204008000000000000080000001000E87D -:100B100000105D4010000000801800000203100A61 -:100B20000000100000082000000400101000010068 -:100B30002002002004004002004004004008088118 -:100B400000006028608000210008C50002C4820007 -:100B5000175E800C900000012412104040000890A5 -:100B600011000202020020400020000804000000E2 -:100B700082000080140400805040005008202000B3 -:100B800050220000802A08028010200200BED12CD2 -:100B9000460231F00000000000000000400090100C -:100BA000400000000040900440040000000000A449 -:100BB000000040000000028000880480000008005F -:100BC000008000002A322408428008081100060034 -:100BD00008000090A848101A0902828014442100DD -:100BE00000020000004000208004000208220008EB -:100BF00000803C000000F20200C049204006A172C3 -:100C00003340820C1D300A0B301858C8D000C80A77 -:100C10002D31A550940C00408124002200040804CA -:100C2000200010035AE010491BA60D41625328B35F -:100C30004B095306041166E82B500D58C8CA1268B8 -:100C40008464B11698086D80800009802FDB44967B -:100C5000520630D28033430A2D12CB34AAB2008A16 -:100C600088393130305F4B3032474B4201281620F3 -:100C70001101C0A2A20350202224020090529E50D3 -:100C8000210031B08A2AA018001E0000884929914D -:100C90000008074835B4CAA56109544912001E4A24 -:100CA000AE01010020680D388318A29A18961A2BFD -:100CB00018035940A18C6923241186981195A46DBD -:100CC0006D07594B63802458E0030F2E081100482C -:100CD000C060432F9280C101ACEC355A262B0988A5 -:100CE000E08030B40318C181F28191C046B602039E -:100CF00003948063D074C631418C0C40521024019F -:100D00002010020181040400010004041A00D00034 -:100D1000090004000000A04400D202004080B4900A -:100D2000420090010820000002D240258002D240FB -:100D300039000000010C00000000001950201100D3 -:100D40000A0020000000080020800002610000105E -:100D50000002340040000208148000008A000018DD -:100D60007405001008010213C8900C00002208024C -:100D700010808000000000009040000090002000E3 -:100D800003CC0275D4C4470000088802C0447A002E -:100D90003C2840112271484940132A0250A20314F2 -:100DA000A102108981A6A0288882440400010101C3 -:100DB0009CA066F11131012E80ABE0B15C27C4002C -:100DC0001230408000801DF202EE33FD2098D60CD8 -:100DD00094CE4890C10CB486031808344018B88BE0 -:100DE0004434344DE473AB201AC40EA84101D044FE -:100DF0008C814105540DABD2BA4009D2290040BDC7 -:100E0000024104327E024A00055000000000011039 -:100E1000002020011002401040000020040C40007F -:100E2000020008200081200C40300808011000005A -:100E300094AA08C185101108001408040540002078 -:100E400000000000040A0201004000400208128273 -:100E50004100002800000880000000000080100011 -:100E6000420400024000000000024104800500200E -:100E70000800294890206A4802041302046A2020CE -:100E8000C40802289300146000800800004802048F -:100E90008011101000200000010004040080008078 -:100EA000010C43D400208000810201410280100027 -:100EB0000000000000000000000280000200183066 -:100EC00000042000400102011010821DF100198071 -:100ED000000030080080000000200402A82CE2017D -:100EE0000800A0E0382000400000022000A0000020 -:100EF0003300E0C01420014000008040008040002A -:100F0000A80010000080000020000000010000097F -:100F1000081507000200100010000A000000001170 -:100F2000028840454020004A0022822041100800EB -:100F30004001910104000400004000000000000096 -:100F400020680022000000000000000008A000004F -:100F5000080001010004924A00805008E0042800C3 -:100F60000020108008000800000088008000810038 -:100F70001001000000000100080002000010000045 -:100F80000081040104081C08000002100004200075 -:100F900000020000000040004A0002410108210850 -:100FA00020082000004000000180800000000C00AC -:100FB000228A0410040000480022D400120200C05B -:100FC00008A8008500273C2781CE063024CC03C02A -:100FD0000000040360210C2802000E000242D00031 -:100FE0001A2426410106B0EBA42311026C00000173 -:100FF00024002000250206288223CC99F73A01001C -:1010000093319F40E0920933C9FC1201240A8A21DE -:101010000E0082906F902208002C0414101508A175 -:101020004C006400006020B000000000404010440C -:101030000000080008000001256005800600080087 -:10104000402000110200854040800604000100009D -:1010500000008000001052000800A94000000000BD -:10106000050000002000100080002000402000400B -:1010700000020000000000000007F0000000020174 -:1010800000208000304000000004000000204000EC -:101090000800002004000400000000000004000814 -:1010A00091000040800000000000000000010040AE -:1010B000080080080100100000200000020000006D -:1010C0000000000000080001000000000000000017 -:1010D0000000000000000000000000000000000010 -:1010E000000000000010040001020820800011AB85 -:1010F000042606942068D0060C3060C346001834DD -:101100003060030600306118008D0804F18A11A0D8 -:101110006844060C0468C2342068D069A1068D0DAD -:1011200034D0C180000C006000C180211811A123BF -:10113000468A3461A344183009930D9930D9B08C94 -:101140006319B3436333366C1366264C8264C3263B -:101150004C36643366CB3661B364D8C60C9908420A -:1011600012C840C84C2C2109B19366C4366C336652 -:10117000CB36608824459120058260C041A4413966 -:10118000230000040002304D020D1908C26084C41F -:1011900084100F00820220C11C90E404344000003F -:1011A00000040108000B0C0010500045100FE04B2C -:1011B000BCF00250000000000FFF03FFFC18BF004E -:1011C000040000000000100000000000000000000B -:1011D000000000000000000000000000000000000F -:1011E00000000000000000000000000000000000FF -:1011F00000000000000000000000000000000000EF -:10120000000000000000003FFF0FFFF3FFFCFFFFA6 -:101210003FFFCFFFF00AFC000000100000000000BC -:1012200008000000000000000000000000000000B6 -:1012300000000000000000000000000000000000AE -:101240000000000000000000000000000000003F5F -:10125000FF0FFFF3FFFCFFFF3FFFCFFFF00AFC0093 -:101260000000100000000000080000000000000066 -:10127000000000000000000000000000000000006E -:10128000000000000000000000000000000000005E -:10129000000000000000000000000000000000004E -:1012A000000000000000000000000000000000003E -:1012B0000000046D41555046C411112EEC4BBBB2D9 -:1012C000EEECBBBB044441111044441111044441F1 -:1012D00011104444111104444111104444111104EB -:1012E000444111104444111104444111104444116B -:1012F0001104444111104444111115444115104486 -:101300004411110444411110444411110444411189 -:101310001044441111044441111044441111044477 -:10132000411110444411110444411110444411115D -:101330000444411110444411110444411110444427 -:10134000111106BD4E0100FC98B5BF0DFF09AD415E -:10135000E9F8768E3FFD4B93F3FFF8F9FF038E49D2 -:10136000EFF35D3887052D5D8F62B13FEC7FAE3FB7 -:10137000FF0AE4F3F8FCA7FF1CB8C7BF63737C2720 -:10138000B138974E74E12E9099F427DD0F7743DD45 -:1013900024BD4937FC4CFE817C6CFFEF36370FDDF6 -:1013A000F3A37CFEEF1D1BCDFF724F7C7FB43A7F11 -:1013B00088DF73BF78FFEE3FBACEDBB3F6ECFBBD40 -:1013C00035EFCDEFB002FC404800088B73F2F6C455 -:1013D0009E7E33F5CBDA33F3BC9EDC07E987DE7300 -:1013E0009F9C34F61F7F4E7E72959831B733AE0FB7 -:1013F0005F91F7E8E7E729598FAB71E7E87EB63CE4 -:10140000178FCCF33AFCDFE03FFE4EE750CEF4639B -:10141000A30EF549CE73F1CCDD5F276D8FDEF1CEE3 -:10142000ACF7BE0757CBB7737B747FF338EF4F4CE5 -:10143000C25FF8EDFE2EBCC4DEB29D986F7D3AF51A -:101440004FBDC1B5FC6DEE2DB6CFDFD2BFF873C571 -:101450002F678EFF93DCF8CFB93B9F4CFB93B9F419 -:101460009F7335BECFFF91CF9C7FFD1AFFCF7BB21C -:10147000B6F80DFC0F3EC768E16030FE4025EE81F6 -:1014800095F07128F6BE3DFDC5F452BFECDA331776 -:10149000E9CDDF613DA0F56D27E9C7AF83BEDCEF85 -:1014A000FF1FDFCDEFF3F7F87EFD37BFC6EDF3FD8D -:1014B000FCFF7E377EC3F7F3A774F7FF3EDDCBFF5B -:1014C000B2B7AC7BD637AC4FBFF3DE5CFA763B7D70 -:1014D00045EF61DF746DF735FDCFFDE2BFB4FBEE84 -:1014E0003FDFC7BFD37FFC7F952EDBC7AD73CEF444 -:1014F000DBFC3EDFC6B5F36E54B7EE2DD6CD2D71B5 -:10150000ABB8B5590039C000000000000000000071 -:101510000003F7B876BC3EDD86FCF3ED7CEFDF36EA -:10152000FFCEF7F37FF8DEBD3BFF4FF761B6FCDB84 -:10153000FF3DDAC6DBF36FFC6EDE1B9D4B6FF2DF07 -:10154000ACBBDD3BDF4DADE2F7ECBBD7377FCFFE69 -:10155000E1B6DC7FFF17B6CFEEF2EDDCDFFF1B5507 -:101560008DFF73FF6CED7B2DFF86DB52F27C377DA8 -:101570001FFFCBEBB1CED4FFEF36D7CF7FF1B7FC57 -:10158000156D3DB50AFBF3FF74EEB63F768AB6F1F2 -:10159000EED4FFEB2E9B4FDDD3EEBC57DD1BF6CF19 -:1015A0007BB375BCDB5B2D7B8DDDD3FDA8FFFF1B03 -:1015B0006B47F6F3F1B4FAF72B6FCFF2D1F7ACF734 -:1015C000EB3FFDCF7FF3DFD8D76D3FEDC7FDE3EFF6 -:1015D000FC6DBF17FDC6B6B3F77CFF772D7BCDFF43 -:1015E000B36B58DADA36B686B771BBACFD6F1FFE47 -:1015F0004DBB72DFD8FDDB3FF78FFBD35B587FF726 -:101600003FF6CB7B53B6DC6FDB3ABF47AD61BEBC68 -:10161000BD6D3F1ECEBF71DDACEEFA2EF6CB5BB3D7 -:10162000ADAC6BFA3FDBC5FD52FF6CB6DD2BFBCFDB -:10163000EDF2BEFCCAFF2EAC859FF37BECFFB83702 -:101640003FCFFFF1EF7C6B3F167BCFF773FDBCFF05 -:101650007F3FFFCCF7F3FFF8EDFB2CEF0FFFE3B676 -:10166000A0FD763EFDCD71F3FFFCB7FF2EBBCFCDC5 -:10167000D2FFFCF75F3FEECBBFD1B734EFF535BDFE -:10168000CD7EC1FDDC4D7F172C8F56D3DBB4BEF76A -:1016900035AF47DEF1B77CD5EE25F78ABB6357B48B -:1016A000EFDE2DFBC95B73DE48DBBF3ADF4DF76031 -:1016B000AB4CEEBB3B6B4AADF2FBACDFF51EF68EDE -:1016C000EDF377B86EDF3BDBCFEF63DEF4B6EE1DF4 -:1016D0006D4EF6F3D75CEABE3BFF8B7D72B7B42D3F -:1016E000FB3FADCB6AF1BD68DF7B2AADCDBDE2BF6C -:1016F000DCD76536EE8DB663DEFC7B7D1AEEC76BFC -:10170000B3F76C769E1DF3CEDBF17ADCD76F3DF735 -:101710008EDFA3BD74DFBE3B758B576156ECBB7784 -:101720001AD34B6BC3AEFCEDD53DB5C8CEA1DE746C -:10173000BAEF2BEFCF5EE326088EB22956C5B8E18B -:10174000B54477FF3BD6C7DFF37F5CC7BE2EAE45FF -:101750006DF1FFF86B552FFAC6EDE2F7DC3B671D24 -:10176000F78FF7F1BFD8D7F73BF78DFED1BFFC3726 -:10177000FF376D4DBAF2EEF4FDB737778B7DB1BB15 -:10178000F4736F3BBDCBFFD1B7BCFDBF2DDD87FB35 -:1017900073EAFCDFB73F568B6DD1B5A4DBD72EFBC8 -:1017A0004BB5D2BA70EDDB176EC6CBB273ECF6BE9A -:1017B0001DD786D5A26FDC6BDF1BFF8FFEF3EADC43 -:1017C000B3BF376ECFFBB1FDB8DF6F3FFECDFFB2C9 -:1017D000FF7CABF92E72C3DA71BFB4BDEF3D7ECF93 -:1017E000BFF3F5FC3F733FFECF7EF37EF8EFDC2EB8 -:1017F000BEC7FF72FF7C995F3BFDCF7FD39BF87B19 -:101800005F3DA74EFDF3DFDCF7FF3FBB4FFFB2DFCD -:10181000FCDFFE3FEF4F57F3FBDCF6BB37FF4FBF5C -:10182000F37FFCF7D737EDC7FF73FEECDFFF3FFD1B -:10183000CEFFF2EBB4EEFD3FF7C66FF3EFFCDDFD3C -:1018400033B64F6EE377BCBABE1DE3C7EFD1F7DC0A -:10185000ABEF3F7BCDEB63B7BCEEED3FBBCFEFE231 -:10186000FBFCFF7F1F97CDFDF3F7F4FFFD37BFCEE5 -:10187000DBE3BFBCD7FF36FFCFFBE1F574ECEB3702 -:101880007F88F793D9A8AF6E36EEC7F753FD506F38 -:101890007D3CDD43FF715EDCDFB73C7BC7EFB1DF32 -:1018A0005CB7FF1FB74EEBF0F6ECBCDF3EF78B5E8C -:1018B000F3AF9CB9D82EF74AF5B22CACA5CE1AB628 -:1018C0008DE7B1E7B4E7B71559CADFE1BFFC7FBFC9 -:1018D0003F7BC7DED3F6DCEFEF3FFF87FF916BFC6A -:1018E0006DFD1FFDC757B072FCF77F2FF2CFCBB154 -:1018F0006EECFFD536F9CFFFF3F6B4F7EF3DCF8EA0 -:10190000F531AFFCFD5B3DBF4F7F22EFD06FBB36A3 -:10191000FD4FFF62DB7CDFFF3EE74DD573EEF8DD68 -:10192000FB3DDB4DBBB1DFB8DDB71BBBCDFBB1DB96 -:1019300074FBBF3AEF8D5EF2EF7CC75A3E7DCFEF6E -:10194000F2B7F8BF7E3BDFCF7BF0DFBC6F623FBDFD -:101950008BFEE19754FFB73FF3CFFFF25A9C7E7D99 -:101960003F7DC6FDB3CDFCEEBD1F3E8BBFB1FDFC80 -:10197000FF7F3FB3CAB3F266E86F392DB7CF562366 -:101980007EECDFBB3DFDCC31739BECD5FF371E43B6 -:10199000BDD373B47DD90FFF0F8F632FFCFFF13DD3 -:1019A0007EC787F0C710E3FD35DC4D0EB3F8845ACF -:1019B000BF2EFE4E1D11B7B4FBAB37EFC076D36F11 -:1019C000DC3EDF376EC69FB149B4F44F1F6247FA61 -:1019D00023DD787F6F36FECFEDF2DFD8FBBF26CC5C -:1019E000C073D074C8E3D72EEE4E2BD2B670FFFF73 -:1019F0003FE9CCEFF3D7DCFFFF3FDFCFC7F3F4FCC9 -:101A000077FF2BEF8FFFF23FDCBDFF2FFECDF7728C -:101A1000EFEC7CFB042000842008104081040800C7 -:101A2000408102040408204082040102108108045D -:101A30001002102008404081040802042008100809 -:101A400021008101041010200841040848102021C1 -:101A50000010212040820400204002041020410296 -:101A6000001020084210204042020408204000815B -:101A700004081040800408204082040020401084A4 -:101A8000010200842010841081084200210040845B -:101A9000040820408204008840000000000000008C -:101AA0000000000000000000000000000000000036 -:101AB0000000000000000000000000000000001016 -:101AC0000000000000000000000200000000002AEA -:101AD00000080808A820408800000000000000005E -:101AE00000CE1017FC0000E00000400000000000E5 -:101AF00000000000000000000000000000000000E6 -:101B000000000000000000000000000000000000D5 -:101B10000000000003FF00FFFF3FFFCFFFF3FFFCCB -:101B2000FFFF3FFFCFFFF3FFFCFFFF3FFFCFFFF3C0 -:101B3000FFFCFFFF3FFFCFFFF00AFC00000010009A -:101B4000000000001820000000000000000000005D -:101B50000000000000000000000000000000000085 -:101B6000000000000000000000003FFFCFFFF3FF77 -:101B7000FCFFFF3FFFCFFFF3FFFCFFFF3FFFCFFF67 -:101B8000F00AFC0000001000000000001820000017 -:101B90000000000000000000000000000000000045 -:101BA0000000000000000000000000000000000035 -:101BB0000000000000000000000000000000000025 -:101BC0000000000000000000000000000000000015 -:101BD00000000000000000010004400000000000C0 -:101BE00000000000000000000000000000000000F5 -:101BF00000000000000000000000000000000000E5 -:101C000000000000000000000000000000000000D4 -:101C100000000000000000000000000000000000C4 -:101C200000040000000000000000000000000000B0 -:101C300000000000000000000000000000000000A4 -:101C40000000000000000000000000000000000094 -:101C50000000000000000000000000000000000084 -:101C60000000000000002A444881004C00020001EE -:101C70002080248008208000000880800000000A66 -:101C80000010000000210008212000800001000059 -:101C9000000002000000200000000000040001011C -:101CA00021182408D009100000222004020000405E -:101CB000011000000002100000010000800004205C -:101CC00010084004009080002004840200100400EA -:101CD000000000008020008100040008094000008E -:101CE000081004100080040040000041000004803F -:101CF00008100A40649024804180400C48000A2863 -:101D00001449088140608800242082818142400279 -:101D1000190451808052420450181424044192EB5B -:101D2000C8BCA4015B8010004400004D040084087E -:101D300080912000B4010000000000002180188084 -:101D40004000023140000118A040080000000000DF -:101D500008080000001004E84010DD409000001862 -:101D60000018084801AB100A00803000000800008D -:101D700002C4001010004100A02200200400400214 -:101D800000400400400808800000602060910121AC -:101D90000008C50002C40000175E892D92A9040343 -:101DA00020320040C0000890410002020011615042 -:101DB00000000008000040A1000013003410009053 -:101DC0004040005008202000D0220000802A080255 -:101DD0008230200200099118410208200004020804 -:101DE000024408217040901040008A4040409624F0 -:101DF00044850400002000A4004241080200028043 -:101E00000080048000000040208000800A3324000D -:101E100050000C08110006000A900010AC60003A57 -:101E2000090A96808044B1080002000240200008A0 -:101E300080020000B910080C00803800000CE2128B -:101E400000D0690940041010334080011D30080B98 -:101E5000A0505848D000C00A0D31A540040400002D -:101E60000A04002204040804200210018A00100859 -:101E700013A60D01725A28B34A086A06040166E8DF -:101E80000B402E60C8CB12688462B11698086D8131 -:101E90008080488007C94002100610D290328B0A19 -:101EA000AD10CB34A8320282003D313030430B30CC -:101EB00030470B4200081020112480B2A2035020AA -:101EC000200002001012145025A430000808A01AA7 -:101ED000041A0000AC492801000003482524CA81E7 -:101EE0004201440112001E4A2A01000428720D0218 -:101EF0000B1CB21A18061A231C031940B0046923DC -:101F0000229186985111A0494903504A6282601873 -:101F1000C0012A280C058148E460632F9A804201A1 -:101F2000A8A03508262A00A040806090271C01093F -:101F30008081D0C006340201029480219035D630D1 -:101F400041840C0052102001211002018104040080 -:101F5000010004045A00D0004900040680D0B104F6 -:101F600008D216028080B490C620D1A10A61000078 -:101F700042D34025A002D2407B000000010D0000AA -:101F800000000019102011000A08200000000800BD -:101F900020800080610000100000340040000B0031 -:101FA000049410008A00001B746500181801239324 -:101FB000CD904D000862080312CC8008181000492B -:101FC00090E000089000200001EC82505CC2070005 -:101FD000020A8802D4C47A0038AC44132275184926 -:101FE00040332A4242A203142002108D81B62029D8 -:101FF000808244040001010194A076F1113109AC02 -:1020000081EBE0215C27C4000230000000000CF2EC -:1020100002EE32BD2090C60D848C4000C00CB48608 -:10202000031C09344018B8034414344CC071AB008D -:1020300032C40EA00101C00404814005544983C08C -:102040001A504952280044BD021104327E024A004F -:10205000040000000000111000A020111442411CD7 -:1020600048000020148C50000A0008278001200C32 -:1020700000320A008110000084EA08C884000000D1 -:10208000001428042500002100000000040A0201B9 -:10209000404000500208124341011028000008800F -:1020A0004400024400841000420400234000004029 -:1020B0001002410400050020080008080001280063 -:1020C0000204131204EA202240480228130414E0F8 -:1020D00080800B00000802048000001042200000F5 -:1020E0000101440C00800080010C43D400208000DA -:1020F0008102014102801000000000000110000078 -:102100000002C00002001830000020004000020061 -:102110001000801DF00019810080340800840080C8 -:1021200000240402282CE2010800A0E0382000402E -:102130000004022000A00200330060C01420004010 -:102140000000804000804000A800100000800020B7 -:10215000200000000100000908050700220010000F -:1021600000000A00000000010280404544200042B7 -:1021700000208220111008004221D14104110600E4 -:1021800004400000000000802068022200000000DF -:102190000008400008A00000000008010000804284 -:1021A00000805008E00428000024509009000A0034 -:1021B00080000880000081001001000000000D0078 -:1021C000080002000010C6001181040114881C08D8 -:1021D00000000B9000442000000A00000001505055 -:1021E0004A1002414108B108A408A42AA2450000EF -:1021F0004180800000008C00229A0C5004000048AE -:102200000022D000120220C008A00085002FBA27AB -:1022100005CC1632B4CC03EA0800040360331CE892 -:1022200002000E000242D0001E240E410187B1FBC5 -:10223000002311026C0000012400A000250A46388A -:1022400082239C99E73201009773BE406092097720 -:10225000CBEC12212C0E8A211E0483906F90620811 -:10226000002C0414101508A14C006400006020B07C -:1022700020000880C0421190000019003E000003B9 -:10228000A1E00101068208C000F004330213C54139 -:102290004001060000000000000080000010520015 -:1022A0000800A940000000000700000021081000FD -:1022B0009A002000C4201040040200000001012008 -:1022C0000007F00402048001052000040000000063 -:1022D00000040000000202020001002004001400BB -:1022E00000004000440400089100806202041210C3 -:1022F000211080090001084008008008010010003A -:1023000000202004000000001020002202080041EC -:102310000030F3040120000002404006781E00094E -:1023200000609004000020200030401800100000E1 -:1023300001000822802011AB00000108020438616E -:10234000C10C08004101830C0E1C204100000185D6 -:1023500008C08C0410001022142020400400020445 -:10236000220C181C310000030C1228108C63040886 -:10237000482022508018332081000C0030A08102B8 -:10238000302082060018308463100000C6030A045F -:102390001060000000180060C0060C20000400005F -:1023A00030A02846000000800218C418C110400068 -:1023B00021002040020400000000008820000000EE -:1023C000000000000000000000000000000000000D -:1023D00000000000000000000000000000000000FD -:1023E000000000000000000000000000000A43FFA1 -:1023F000010000540534404D24A00090000000006E -:102400000000000000181000040000C000001000D0 -:1024100000000000000000000000000000000000BC -:1024200000000000000000000000000000000000AC -:10243000000000000000000003FF00FFFF0000C0DC -:102440000003FFF0FFFF0000C00003FFF0FFFF00EC -:1024500000C00003FFF0FFFF0000C000000AF00012 -:102460000000000000000000080000000000000064 -:10247000000000000000000000000000000000005C -:10248000000000000000000000000000000000004C -:10249000C00003FFF0FFFF0000C00003FFF0FFFFDC -:1024A0000000C000000AF000000000000000000072 -:1024B0000800000000000000000000000000000014 -:1024C000000000000000000000000000000000000C -:1024D00000000000000000000000000000000000FC -:1024E00000000000000000000000000000000000EC -:1024F00000000000000000000000001000000001CB -:102500000000001110044441111044440000000078 -:1025100000000000000000000000000000000000BB -:1025200000000000000000000000000000000000AB -:10253000000000000000000000000000000000009B -:10254000000000000000000000000000000000008B -:10255000000000000000000000000000000000007B -:10256000000000000000000000000000000000006B -:10257000000000000000000000000000000000005B -:10258000000000000000000000000040480800407B -:102590000002000120800080002080000000000078 -:1025A00000000002000000000000000000000080A9 -:1025B000000100000000000000000000000000001A -:1025C000000001000008000000010080000201007E -:1025D00002000002000080020000800000010002F2 -:1025E0008000040000004000000000000000000027 -:1025F00000000000000804000020000000040008A3 -:102600000100000000100400000000104010000451 -:10261000400000000010020024902480418040040B -:10262000080002080001088040200000042000800B -:10263000800000000904100080104204100800000F -:10264000040092EBC8BC80000B8010014400000124 -:1026500004008408801120008401080000000000AC -:102660000000081200000210400000082044000092 -:102670000080000000080000001000E800105D402D -:1026800010000000801800000003100A0000100075 -:1026900000080000000400101000010020020020CB -:1026A0000400400200400400400808800000602848 -:1026B000608000210008C50002C48200175E800C03 -:1026C0009000000124121040400008900100020216 -:1026D000020020400020000804000000820000806A -:1026E00014040080504000500820200050220000B8 -:1026F000802A08028010200200BED12C460231F050 -:102700000000000000000000404090104000000069 -:102710000041100440040000000000A4000040003C -:102720000000028000880480000008000080000093 -:102730002A32240842800808102006000800009071 -:10274000A8481012090292801444210002420FF698 -:10275000C2A00C08103A0040B512080C00813C00E1 -:102760000000F20200C049204006A1723340820CF2 -:102770001D300A0B301858C8D000C80A2D31A5509A -:10278000140C0040812400220004080420001003DF -:102790005AE010491BA60D41625328B34B0953065A -:1027A000041166E82B500D58C8CA12688464B1162B -:1027B00098006D80800009802FDB4496520610D26D -:1027C0008033430A2D12CB342AB2008A8839313043 -:1027D000305F4B3032474B42012816201101C0A216 -:1027E000A20350202224020090529E50010031B0DA -:1027F0008A2AA018001E000088C9299100080748ED -:1028000035B4CAA56109544912001E4AAE0101043B -:1028100020680D388318A29A18961A2B180359406D -:10282000A18C6923241186981195A46D6D0F594BC5 -:1028300063806458E0030F2E08110048C460432FE2 -:102840009280C101ACEC355A262B0988E0C130B426 -:102850000318C181F28191C046B6020303948063DC -:10286000D075C631418C0C40521024012010020159 -:1028700081040400010004041A00D00029000402AD -:102880000040A04400920200C080A49042009081C9 -:102890000920000002924025800292403900000089 -:1028A000010C000000000019102011000A00200097 -:1028B00000000800208000006100001000023400C9 -:1028C00000000A08048000008A000018542580389F -:1028D0009A41A313CC900C00002208021080002A19 -:1028E0000010084190C0A8089021220403CC8275F2 -:1028F000D4C40700000A888090C46A043CA8C011B0 -:10290000227148494012220240A20310200210897D -:1029100081A6200888824404000000019C8066F0A3 -:102920001131012E01E3A0335827C6008232000086 -:1029300020041DF202EE33FD2090460C958E00908F -:10294000C10CB40603080034001028020414344CEF -:10295000E073AB001AC40EA04101C0048C81410594 -:10296000540DA3D23A4009D2290040BD024004329E -:102970007E024A00055000000000111000A0200156 -:102980001442401048020420040CC0000229082010 -:102990000001200C0030080A9310000094AA0640A1 -:1029A000840000000014080405000020000000005E -:1029B000000A0001000000400208108241000028C7 -:1029C00000000880000000000080100042040002A7 -:1029D0004000000000024104800500200800294C4E -:1029E00090206A480204130204620020C40802080E -:1029F00013001460008008000048020480000000FA -:102A0000002000000100040400800080010C43D479 -:102A100000208000810201410280100000000000BF -:102A2000000000000002800002001830000C2000AE -:102A3000400102011010821DF100198000003008D1 -:102A40000080000000200402A82CE2010800A0E0A1 -:102A5000382000400000022000A000003300E0C049 -:102A6000142001400000804000804000A8001000B9 -:102A70000080000020000000010000090815070088 -:102A80000200100010000A000000001102884045FA -:102A90004020004A002282200110080040019101DC -:102AA0000400040000400000000000002068002234 -:102AB000000000000000000008A000000800010164 -:102AC0000004924A00805008E0042800002450903E -:102AD00009000800800088008000810010010000CB -:102AE0000000010008000200001000000081040145 -:102AF00004081C080000021000442000000200042A -:102B0000080041005A110241410821082008200014 -:102B1000004000000180800000000C00228A0410A8 -:102B2000040000480022D400120200C008A800855A -:102B300000273C2781CE063024CC03C000000403CC -:102B400060210C2802000E000242D0001A24264107 -:102B50000106B0EBA42311026C0000012400200048 -:102B6000250206288223CC99F73A010093319F4031 -:102B7000E0920933C9FC1201240A8A210E008290D6 -:102B80006F902208002C0414101508A14C0064005A -:102B9000006020B000000000404010440000080029 -:102BA0000800000125600580060008004020001193 -:102BB0000200854040800604000100000000800003 -:102BC000001052000800A9400000000005000000AD -:102BD0002000100080002000402000400002000083 -:102BE000000000000007F0000000000100200000CD -:102BF00000000000000400000000000000000020B1 -:102C000004000400000000000004000891000040DF -:102C10008000000000000000000100400800800863 -:102C200001001000002000000A0000001000000059 -:102C3000000800010000000000000000000000008B -:102C40000000000000000000000000000000000084 -:102C50000000040001020800800011AB0021000008 -:102C600000000040810408004080000400000000D3 -:102C70000000000000000000200000000000C081F3 -:102C80000000000000000000000000000000102014 -:102C9000084104084810202100102120408204002F -:102CA00020400000000000000000000000000000C4 -:102CB000000000002000008104081040800408206B -:102CC000408204002040108400000000000000004A -:102CD000000000000000000000000000000000886C -:102CE00040925022014E8D3001B0240527248922C4 -:102CF000439270DC413C2805348079007201221235 -:102D0000028A0380282406020800C0C0F100089C43 -:102D100000080C00200000540534C406E4C000C4C0 -:102D20000000000000000000000890000400000007 -:102D30000000000000000000000000000000000093 -:102D40000000000000000000000000000000000083 -:102D50000000000000000000000000000000000073 -:102D60000000000000000000000000000000000063 -:102D70000000000000000000000000000000000053 -:102D80000002000000000000000000000000000041 -:102D90000000000000000000000000000000000033 -:102DA0000000000000000000000000000000000023 -:102DB0000000000000000000000000000000000013 -:102DC0000000000000000000000200000000000001 -:102DD00000000000000000000000000000000000F3 -:102DE00000000000000000000000000000000000E3 -:102DF00000000000000000000000000000000000D3 -:102E000000000000000000000000000000000000C2 -:102E100000000000000000000000000000000004AE -:102E20000011100040000008880222208888222219 -:102E30000000000000000000000000000000000092 -:102E40000000000000000000000000000000000082 -:102E50000000000000000000000000000000000072 -:102E6000000000000000044000010000000000001D -:102E70000000000000000000000000000000000052 -:102E80000000000000000000000000000000000042 -:102E90000000000000000000000000000000000032 -:102EA000000000000000000000000000000001C25F -:102EB000840000204C020420948002A0A090C14015 -:102EC00000B04001400040AA0000000805200000BA -:102ED0000000018004030014400C0029FF0000538F -:102EE000F810A2470010800000281801000101809E -:102EF00000020300030000060001800600018000BC -:102F0000000100009000000000004C006000006024 -:102F1000030000003000040400982C20006000082A -:102F2000002000000100100040100C10008088708C -:102F3000C000148240000004400001102080040002 -:102F4000420540061032000C000214C0003001900F -:102F500008500000C008000501261800A0208514B4 -:102F6000000C008002B012080080000288001900E6 -:102F70006480000B0404C01C901100182C210A84EA -:102F800021000C2002000C02402103184808402CAC -:102F900024440800000000080514000100A80000F7 -:102FA0000010410200405060B2810100880290CEC2 -:102FB0000408940820848880002C529013450991BD -:102FC00020D21821A40A43421E41A43443480906D2 -:102FD0008128706470D0052B80C0840000048200BA -:102FE00010404094500080112C1211C448431CB072 -:102FF000814102020A4A60D0002588380502080291 -:10300000825001C21A04400052CC10100020224805 -:103010009480009080321903049111C380008908C4 -:10302000A80540000000408600100010400A18105B -:103030000100404200410184410001100018222497 -:1030400000004000200A028001A8048000000A015C -:1030500002920C007B10B5086AA22008010024002F -:10306000090801B0A849701E0B02C28056C40204B0 -:1030700000228000000000000000000000010400A9 -:1030800001200041024000022444802210C4141098 -:1030900000080000040000081108001000000008EB -:1030A00024008000100012C18A2400E1042440247E -:1030B000204110218A00000808800001035120806F -:1030C0000A0841000001022020000208400000011F -:1030D000C000801200002480A25028A000004400FC -:1030E00000080002E4008000000248006696000824 -:1030F0008000000000194900004549028108BC0910 -:1031000035128E6FF0014023EA34048E8153AA40B9 -:103110000040188806FEA3ED0001FF002008C9004A -:10312000600C0F181490000520085009103FEA00A9 -:1031300081F00004200000100000001000D20028E0 -:1031400000414B400084000000000200009CA425C8 -:103150002521494940E00D506000040004080001A9 -:103160000040000182074B00A4F4000D000900801C -:10317000A04120DAC00044005AC0034842920D0921 -:10318000051180F254101431010E0740531004054C -:10319000080002028100000000000CC41201504827 -:1031A00011002200000B502D4C6482106F4F5920EB -:1031B0008434F01608214A406166684CB73D64804B -:1031C0004AB2D48002B5280A0822002D1020110826 -:1031D000020000006D0018060000800023025080ED -:1031E000020110001000031842800020032040015B -:1031F000004211110C81029002A0000000000900A1 -:10320000000500002224000A806000001200200057 -:103210000AD40023D4C600201D488A6081400605D8 -:103220000C60401010004000000000000000400052 -:103230000000000002000000080000100000000074 -:10324000488004540000020200A014355800C44015 -:103250002210042002003752026A11C0285066086A -:10326000110202900140B402136A827530302802C4 -:10327000800C04C2A002AB0008800200410840019B -:10328000880061045404A0B2680000803980019570 -:10329000004300532A037B0481701C0008010210C4 -:1032A000083880213008403081806080012800008B -:1032B000010008200096600A40100008000040004D -:1032C00094AA024501901148200498140C4800006B -:1032D000000000802C0A0E0121CA00C80038368286 -:1032E000C1200818000108800000E00000801000E4 -:1032F0004204000345000000000241048005002054 -:103300000800294490204A48000019404442000027 -:10331000A4010008194094400000482001084050D2 -:1033200011100000002208080102268811341084C0 -:1033300040A552200066850001C22441488030200B -:103340000C6B4202212024252902C0010000480004 -:10335000101E10A000014023001A021149810080B4 -:10336000180829041049801000292411A4004005E0 -:1033700040002030089010400A0020602060500972 -:103380001000A001042801500184804080840800BE -:103390002800900018810080200D0C000112000010 -:1033A0000811222E0100104014109226012009134A -:1033B000808A4045422821088022206070B00C009D -:1033C0000011D021240004000000000000000C8146 -:1033D0002068000200000000000A50000080000089 -:1033E000280009004804924AC802140882040C000C -:1033F000004C509009000840810898108400020891 -:10340000892242005000010A880C32C54820E71882 -:1034100024816711401408640000002982422810AA -:10342000040800440800C9005A990449428A028AE3 -:10343000008A0000000A4700061010000020020069 -:10344000206000000010704C9FB3B5185312032089 -:1034500008A800855C410A2141090400000400001D -:1034600000000008015000484401028422425040FC -:10347000222426580808B0282404000060026001B5 -:103480002400A026098306A8A103CC00C4230000C1 -:1034900000100C603000000180C603000040001BDB -:1034A0000004900004A4200028014291C2040008F6 -:1034B000020229000190641000000100020410C003 -:1034C00000010011CA484081252C01E0180000408D -:1034D000432020019B148940301082305024141165 -:1034E00000004040001252000800AD4004044600B5 -:1034F00000000C001046945000162E00E360086097 -:103500000A0309FF0F80C0847CF8010201C44581D1 -:1035100006A0420230884C0A202404000001610108 -:10352000101060C00400081C8F0C00000000000890 -:1035300091084AD18000080000800084000204A0A5 -:103540001401400402802804005000808A01405485 -:1035500010114211810400210000F38239518013BF -:10356000F23434C7781E1FCC8470A8C409FF1A1A1D -:103570000FF8403C1C101100830E182012C04900A7 -:103580000427008420081040892408024081020496 -:103590000408224082044112108108049002102085 -:1035A0000844448904088204200810092100890184 -:1035B00024909120084904084891202100102120DE -:1035C00040822401224002241022490200102008D7 -:1035D00042112042420204082040008104081040A9 -:1035E0008004082040820401204490840112008459 -:1035F000209084108108420121004084040820406A -:103600008204008840C17C00090820E31348181791 -:1036100031DC471191A31C1C860190CC5120008005 -:103620002182040D4210A1E5109BC1068801110002 -:1036300003004DDC01088C00214500041024384CA7 -:1036400030C003CC000000000FFF03FFFC94AF006C -:10365000000000000000D00000000000000000009A -:10366000000000000000000000000000000000005A -:10367000000000000000000000000000000000004A -:10368000000000000000000000000000000000003A -:10369000000000000000000000000000000000002A -:1036A0000000000000020000000000000000000018 -:1036B0000800000000000000000000000000000002 -:1036C00000000000000000000000000000000000FA -:1036D00000000000000000000000000000000000EA -:1036E00000000000000000000000000000020000D8 -:1036F00000000000000000000800000000000000C2 -:1037000000000000000000000000000000000000B9 -:1037100000000000000000000000000000000000A9 -:103720000000000000000000000000000000000099 -:103730000000000000000000000000000000000089 -:1037400000000468410000468411112664499992E2 -:103750006664999904444111104444111104444190 -:103760001110444411110444411110444411110436 -:1037700044411110444411110444411110444411B6 -:10378000110444411110444411111004411010441B -:1037900044111104444111104444111104444111D5 -:1037A00010444411110444411110444411110444C3 -:1037B00041111044441111044441111044441111A9 -:1037C0000444411110444411110444411110444473 -:1037D000111102CD0001002C009201040380A1C050 -:1037E0004800D2843FED4880B3FF28527F00840018 -:1037F000A2C14508810425848123000B8452A212B2 -:10380000FF0A2023E0E80087040045A921192406C7 -:103810009009168C10222D001A24065A0916825A75 -:1038200004BC8117840D1280A42C24211217424459 -:1038300080A1749224050B8D491002201C08041CE1 -:1038400088A5109108142208890240923614D48861 -:103850001044459540004882400000011000A040FF -:1038600020820411080040748084490940804091FE -:1038700023A414220102030E9004881092049209DA -:10388000C380102C48E90048880922082082363C71 -:10389000180090F044105FE108088A288011146332 -:1038A0000703DC484210D0405D0629348584B252BB -:1038B00040612E092089932219B018D018610A4C52 -:1038C000C0005805C01241000AB20018E6100844B2 -:1038D00047BE105A002030208200010282D40050DE -:1038E00034008302A10620620C10C40624C20C40DE -:1038F000C4181C080417E1A0E08FF8310807BE9037 -:10390000000C87E0104000041020000F6437BC401A -:10391000C030099007BC220F46A020402C78010837 -:103920002C40512197801480102C062FD0424C90AF -:103930000120B00410401728840208900234C03AD5 -:103940000469E11E00C007200004114002450A0678 -:10395000C2A490289410A40022020000001208249F -:10396000002200200000010008C602000A088400AE -:103970000400082810C600262A102C08C28000085F -:103980004884000088005094A8FAD4128D4EA2C139 -:10399000945C0459000200000000000000000000D8 -:1039A0000000108010080204803C002208810010F2 -:1039B0001F00028000105C00240100F8108C000041 -:1039C000000010087400C00430400144C0022028E8 -:1039D000801C041C620C980109048B880C80001F59 -:1039E00002C1A0801408C18022E30320A007020CBA -:1039F00040012002A008803A000226C2002C1A9C36 -:103A000010E00F29A1C654050100800000026800E3 -:103A1000239B0019800000000431DD000445DD0314 -:103A2000038C68801B00813221414062372C204189 -:103A3000A0E0CF40580014C80322200000C00019A5 -:103A4000610A0B601088150C1CD00007309ED00C4A -:103A500059000205C000DECCA10000144004401053 -:103A600000B300280485CDD012F0020008000A003F -:103A700000F4EC373731CFC9D0B096F45C24140091 -:103A800005005001081D000041033802E6A40009AA -:103A9000001982F3A2756C934800790453802B447B -:103AA000FB9B010D8108A03E5092341725040C4366 -:103AB000F6180FEB114BC7F4D3E02080040004008C -:103AC0005782C01043FD00048090E104049B122241 -:103AD00040C0E6D02000B1210A400591339A40B0A1 -:103AE00080039B4018000B58200C04250000A11BEC -:103AF000B008030246CC10010B9C9CA20000038579 -:103B0000232A0C000030100A860097082814108021 -:103B100046000004884268172C8952D003808061D7 -:103B2000300508D0801040C5E820D78AA9631794D3 -:103B3000555E05FBC28573A8DCCCAC1A4E0DEA605D -:103B4000A140868F0D614A14D000E400300CD40CE3 -:103B50002C51100846C00A004C4142565C002A0015 -:103B6000000EF2E2499C0C5A2840081342B414316A -:103B70005B18C5C16AD1BD685D73155E8E4251C2C6 -:103B8000F056661A5B02B6B00710BE7A0B6C47356A -:103B900030D66C669A0CC442AB82935C4DA332570C -:103BA0004D806338985E531C0084F49368ACB081F8 -:103BB0002101089481ED2052AA124A4041504A1036 -:103BC000802009D5026263031004E21816058040C4 -:103BD000900810192846CF7822A03408E014000C71 -:103BE0006CF00000F5BF200B013C33899005080004 -:103BF00020C09010080800230408024140560042EB -:103C0000002A138F535226080C942980083D010086 -:103C10003081313862046052C20481802842C0750C -:103C2000802FC4789C013B4EB1E0DAE8C981352091 -:103C30000456C0088480C91B3500145071488A821C -:103C4000089F00440237D821522843818F71444095 -:103C5000000402800C0442000821A0001D0B024158 -:103C6000048098000109808100999010842BB04055 -:103C700005320800150C16760207010C68E544337E -:103C8000420080F2C364A941081C05604030CC2882 -:103C9000F0004141000062200D010059052400623E -:103CA000A0654A001003A00307E02340200080C164 -:103CB000108000F02820100000829E2865490AF03C -:103CC000831C5000087BC20D60003010B000C6029B -:103CD0000190013F619CC06FF425610D20E35124E8 -:103CE000D81111380028B00080240000A000000086 -:103CF000103051A234EA800200001400003C6482BB -:103D0000800000007C003D00024C128F8C001E08D9 -:103D1000800C09008004D19C19C009018195884C50 -:103D2000F02C5443624018D880951D0108220200EF -:103D30000080000091810401026000F000008043D7 -:103D40000160208840061106080261A87E5318E72A -:103D5000CC0800081008130000004700B86C189643 -:103D60000F08820021104842231F84C81FA29EEC26 -:103D700013421C1D0EFF9087B0D1482913084D80B7 -:103D800002249400222800180282101EA81C430A54 -:103D900052437ABC267D07E24249922C24048820B3 -:103DA00060099B612D747D9913260F79D04F0C44C7 -:103DB000CC26580C08904CC86581008984CCB25838 -:103DC000101115012184842004E861000010001204 -:103DD000A006F01210393A4F720039142A2018BD8B -:103DE000020AF04140EE902E3983BF337D302F9D83 -:103DF000217DC23CF0EDC46D260B9BC18AA002CC94 -:103E00009F42250200000000001042000800A94166 -:103E1000382009090C8D400100001444431128008A -:103E2000402100C051C202FF0E0E21087C00000597 -:103E3000020002010020800401400004134C0050E5 -:103E400016228202090105108408102000120000C9 -:103E5000DC000509910285408194D40F1D20424A5F -:103E600002C8380D01101A01A0320340D90622C43D -:103E70000A208020D0608022460020410030F3805C -:103E80003C884029F1838887791E1FCC0072442426 -:103E900014FF01C40FB8B01C1C888E047502A9124F -:103EA000092C01000423008420081040810408002C -:103EB0004481022424482040820401021081080425 -:103EC0001002102008404481040802042008104811 -:103ED000210081010410112008410408489020218C -:103EE00010112120408204002040020410224102CF -:103EF0002010200842102042420204082040008185 -:103F0000040810408004082040820400204090846F -:103F10000102008420108410810842012110408495 -:103F2000040820408204008840268E007E0412137C -:103F300083A48C4833908428D0C33840001DC80027 -:103F400033E0D200CA743320832403406C42090456 -:103F50004601C1C0F0004020051C4C00704110C15A -:103F600004038C8FB490006000000000000000008B -:103F70000010A00000000000000020000000000071 -:103F80000000000000000000000000000000000031 -:103F90000000000000000000000000000000000021 -:103FA0000000000000000000000000000000000011 -:103FB0000000000000000000000000000000000001 -:103FC00000000000000000000002000000000000EF -:103FD00000000000080000000000000000000000D9 -:103FE00000000000000000000000000000000000D1 -:103FF00000000000000000000000000000000000C1 -:1040000000000000000000000000000000000000B0 -:104010000002000000000000000000000800000096 -:104020000000000000000000000000000000000090 -:104030000000000000000000000000000000000080 -:104040000000000000000000000000000000000070 -:104050000000000000000000000000000000000060 -:10406000000000000000001000002001000000150A -:104070005005544155105544000000000000000058 -:104080000000000000000000000000000000000030 -:104090000000000000000000000000000000000020 -:1040A0000000000000000000000000000000000010 -:1040B0000000000000000000000000000000000000 -:1040C00000000000000000000000000000000000F0 -:1040D00000000000000000000000000000000000E0 -:1040E00000000000000000000000000000000000D0 -:1040F00000000000000029D280A2A1F06441142039 -:104100000080022390008C4000000C63000040827D -:10411000000050C80C40D2442887139244A3223098 -:1041200004043102000318C000104000220008A05F -:1041300090989C04C80408008910100422020820EA -:104140004088102048080319000911109020241AF3 -:10415000084D4C22804094E1142284867082548061 -:104160000010285004100050886411084581B45094 -:104170001814465005908264A000180300000480C3 -:104180000000002004102080460400043C921A081D -:104190000007B083402006901FC00680C000004B7F -:1041A000190618002021EC04500C0000002F90414B -:1041B00000101802510010004000204B0420C20CD7 -:1041C0001100048010000880108002000080082484 -:1041D000000103100000400C044860C0030400000C -:1041E0000600003911800082000108002102D2403F -:1041F00026CD050488001084440034000000888027 -:10420000082812A5064D0811A1102802A01A044082 -:1042100022028050040000080008200020800129AC -:104220000044A651080080800208041402154031A1 -:104230000400118A08428020895103008A4A50B242 -:104240001025441D0500201200540882180409009E -:10425000502014001010340B86C0046441530C41EC -:104260000833000A0029801800CC0522CC0075A76D -:104270000100849E000080A308180A40408091B08D -:1042800007041DA1C34CA0B0C0C30C002C4A0200FF -:104290006D4806180100004220520C005230B40450 -:1042A0009282B98C95090990056B01BD80C2691D88 -:1042B0008B404200409822040000000000000000F3 -:1042C0000000000000000800080102E201200018C0 -:1042D00008C0300204044C10404C600206000090FC -:1042E00000C080220002200946000804307004400B -:1042F000CA34232B244018042200501002180C0A40 -:1043000000C0001211D93048100AC900030202305F -:104310003004000C01000000101022130041246141 -:10432000808412F0008009104003200510010C80E9 -:1043300040100C800B81004805060200084C8900E3 -:1043400009008982130C3012002404008101040842 -:10435000010C2104063204006C941087480880A2E6 -:1043600078013B148489C941501002CC0C18000715 -:1043700002901801131B40014072300408402002D3 -:104380004400001000B0200C00008900001400045C -:1043900012860300000040030708C0C8002204C0C2 -:1043A0000638100000E6301B00202411890242006C -:1043B0004020400110190292324808130402618023 -:1043C0000301020023003B0880D4A01208000C1354 -:1043D0008F04A84078F880C1011D006161000009C8 -:1043E000A11800044800D100303C39D248084100EF -:1043F0000825DC1B89484963B564D49128298C19A8 -:104400004127441C712125817B9038481089211057 -:10441000000010590422D83D020A20007C004134DB -:10442000011180A06008700A862031005000400011 -:1044300000800282400342C10000860032008003F7 -:10444000402C413202980089026D0880D21200800F -:10445000008203C0400230CB80603202042244124A -:1044600041450092148090000584045240001020C1 -:104470001A000C011100E804D12D06400440D0259B -:1044800004080002000141800084414C2080039018 -:1044900081540090000042041180A00021C42646EF -:1044A00083EA10426088820130021CB0210004229D -:1044B0002112CC4040000489492026012A012850BD -:1044C0000090228C412C1050A80048075C04A000EA -:1044D000A100042809000409014A40D00208404014 -:1044E00001720088441115100001309944404000C9 -:1044F0000900400000800010002104302002500814 -:10450000002158888230000014A208800C020108A3 -:104510002000D423044008010004A0B900080A01C7 -:10452000800204E8003C300EF6003018068901884D -:10453000088201C32C22953046816220E04080C071 -:104540003268CD04A33D0088F400A80D0380400824 -:104550000684330280220160040A07093300103008 -:10456000200001032F0006C0000020A4002000004E -:104570001800459840600077400C03DE9C108801CD -:10458000048140006C40202008420A023179A85979 -:104590002922D10721000E00602002108241400430 -:1045A00060450100420A4001004014103001000142 -:1045B000202C04190002090158000000018010009D -:1045C00080046130940123082080AC000110024473 -:1045D00001840220A0C048082C259200388100B830 -:1045E00029240400012211100C00831828080882D5 -:1045F0001010B02604400811028840010222010078 -:10460000080021843021204B008A7206042CE0042B -:10461000100000009020000A14484806A000800006 -:1046200000040000438000042000280000010198DD -:10463000888100084204080022005001011108008E -:104640000104000C2000C40201002A4840593546EC -:104650000C1821202020C608418111000650C100FD -:10466000000C42A10050000221130085000360F0FD -:104670004A1114004A00220030003A1480053E001E -:10468000A78088B0008E8C42139B6CD2150E40CC54 -:104690000020D090902620C200DC808740000010CF -:1046A000050014400330941409510024029B585013 -:1046B000BA22014402525A70012200E040C0B110F7 -:1046C00004C444158180C403F294A50C150082082B -:1046D00010018022040200804440004462880400EB -:1046E000020C12008801140010008100900060C5C7 -:1046F00000800010000880108100000C8060A04045 -:10470000B2020820C40090B458215B1CFF03703330 -:10471000815084791E070D40E3F304392233D041E0 -:1047200042810688810200140900000898C8121B03 -:104730006C0091001850061406000004006420026A -:1047400000003082C32088400202020000008090F6 -:1047500000000002810C40000C8000020E1000805E -:104760000345C0801611010103004AC8001E081845 -:10477000000D0010800400011108598013004A92B6 -:104780000490828440A004200000400400800800BF -:10479000141011020A87000810530011850000A1AF -:1047A0000080000001D3000003A1A8000000200049 -:1047B0000000E980000010D40000700000500000EC -:1047C000918C9CE003100082000006000060C0068F -:1047D0000C3060C3060018303060030600306018EB -:1047E000000C0000C18801806004060C0060C0302D -:1047F0000060C06180060C0C30C0C180000C0060FD -:1048000000C180001801800306083061830418305D -:1048100001830C1830C18000000183030030306038 -:104820000306060C0060C3060C3060030608306106 -:104830008304C0000C18000000C000C00C20000160 -:104840008013060030600306083060CC0425AA08F7 -:1048500020842C12805895DA0008022943B0008E7B -:10486000C02030039380E200361C11620204028DE6 -:1048700004500B044C43C3C000000010000E4C0059 -:1048800000000001403004049870020CF0303FFF3B -:10489000C000F000001080000000000000000000D8 -:1048A0000000000000000000000000000000000008 -:1048B00000000000000000000000000000000000F8 -:1048C00000000000000000000000000000000000E8 -:1048D00000000000000000000000000000000000D8 -:1048E0000000000000000000000000000082000046 -:1048F0000001000000000000038000000000000034 -:1049000000000000000000000000000000000000A7 -:104910000000000000000000000000000000000097 -:104920000000000000000000000000000000000087 -:1049300000000000008200000001000000000000F4 -:1049400003800000000000000000000000000000E4 -:104950000000000000000000000000000000000057 -:104960000000000000000000000000000000000047 -:104970000000000000000000000000000000000037 -:1049800000000000000000000000001000440000D3 -:104990000000001110044441111004440000000004 -:1049A0000000000000000000000000000000000007 -:1049B00000000000000000000000000000000000F7 -:1049C00000000000000000000000000000000000E7 -:1049D00000000000000400000000000000000000D3 -:1049E00000000000000000000000000000000000C7 -:1049F00000000000000000000000000000000000B7 -:104A000000000000000000000000000000000000A6 -:104A1000000000000000000000000040402320488B -:104A200000020000000000000000800000080000FC -:104A30000000000A000000000020000800000080C4 -:104A4000095100000000000000000000000000000C -:104A50000400015121580400D20900000022000086 -:104A600022080C40011000000C420000020100422C -:104A700080000400100840040090C000200482025E -:104A80000012440000000040892000812484200896 -:104A90008100000008100410008004004000004164 -:104AA00000000480001200002EBC35E440005004D9 -:104AB00008400A08400100814020000004020280F2 -:104AC000800000221804100002004000500800007E -:104AD000080182EBC8BCAC000B80100046100081BE -:104AE00000008408C09920001400080000000000A5 -:104AF00041400834C400021060000008300818204B -:104B00000180000000414A62100050E83E10DD4084 -:104B1000B4000010001C00000090100200003000E3 -:104B2000480000000010000000100000A00000007D -:104B3000400000000000000000000000000020080D -:104B4000209101050008410012C0001C175EC0053D -:104B50000208400160301042C0008A90000002004C -:104B60000200605000200008040000000000000067 -:104B7000100000104040005008202000902200004B -:104B8000802A080280200002003BD13C40080160DE -:104B900001200001140200004000B090000018C085 -:104BA0000040922444841002000540A408D040082C -:104BB0000600028100C804900000084020000000A8 -:104BC0000232000800001908350006000A92021A95 -:104BD0008CE00A0B41881082146C202000420FF4F4 -:104BE00082A00C00903A00002902080400910522DE -:104BF0000000E01200C00000C004001080448002E9 -:104C00001400000B920000000100800B04008000E3 -:104C1000410110000B240022140408042042022148 -:104C20000A0010080A800001721000004A0000000B -:104C3000040172A02000284A4800100804403002F5 -:104C4000004C018082004102281044D2408A0012A8 -:104C5000903A080A00124804389202CE0030000050 -:104C6000204F0100A107010200681022003480805B -:104C70008242500406240F409452DE5025B0248412 -:104C8000080A80182C1A000088C92A01000003486D -:104C9000349000012241400916001A0AAA010004BA -:104CA0002866001000008000188000080003014002 -:104CB00000240928029402005011840C0C0A0100FF -:104CC0000000644001490AF80827A259C07D432F1B -:104CD00082804201A4A00008002900008188A00071 -:104CE000071B0141D31197C0549402010294802103 -:104CF0009034C63241840C0232180401201402019F -:104D0000A1041000010004041800900000000886AF -:104D100002C091041850130A80001080CDA04101F8 -:104D2000032F8400C0C3400420004040FF0008005F -:104D3000000B00000000001954203101020820007F -:104D4000000008002080008261000010000634018D -:104D500008D00A00148000008A00001B54658018E7 -:104D60001801A313C8900D000262080612C6902213 -:104D70000000080094C0A0489001200401EC0250FB -:104D80005CC75708000A8802D44402003824C403D0 -:104D9000227558494003220250828310A10210ADAF -:104DA00081A6A02880C20026000101005420735073 -:104DB000113101AC00A000A15800C400123240849F -:104DC00000000CF202EE32E02090C608148C0010B5 -:104DD000E00CB0840B1800344010388A00242441C1 -:104DE000C001AB0032440EA00121C0040481400583 -:104DF000DC0923521B5049520804C4BD025104303F -:104E000076020A01101000000000319001202031CC -:104E10004880411C00020C008108D00000310827A6 -:104E20008000200000320A0981101800946208C135 -:104E30000510110800440806050000210000201894 -:104E4000040A020100400040020540C52801100488 -:104E50000000088000020200008080004200002262 -:104E60004000020000024124801100200000A848F8 -:104E7000902142000204131304E21022004C0208A5 -:104E8000D30014E01048082004480204C0000010B9 -:104E9000002000001180400800800080000C43D4F6 -:104EA0000020800081020141028010080000000003 -:104EB000011000000002C0000000183000000000D7 -:104EC0004001020010008019F00019000080340039 -:104ED0000100028000240402202CE2000800A0C08F -:104EE000182000048004022000A00200330060C0EB -:104EF0000000004000008840008040086800100862 -:104F000000800020200000000100000908100700B8 -:104F10002000100000000208000202010280405937 -:104F20000020000A00028220401008004205D1093A -:104F300044011600044000000000008020200020F2 -:104F400000000000000800002CA000002800000164 -:104F50000000904288840408E0040800480412908D -:104F600028264A00000000800010A0000000200059 -:104F700005000400080002000000C6000101040151 -:104F800005001C20000002810080200000020004B7 -:104F9000488151545A01200140082008280828005F -:104FA000800000000180800000808C21229B0C503A -:104FB0000400004000225400000020C00808000146 -:104FC00000273C37858E147025DC03C001020003E6 -:104FD0006013184802001040000210001A2000015F -:104FE000018620EBA4B355036E8000012400A000CD -:104FF0002502062802338C99F73A21009773BF40A7 -:10500000E0920937C9FC1221240E88210E008390FA -:105010007D906208002C0014101D08E1CC00640093 -:10502000006020B020000880C402109808001B0017 -:105030003E000003A160010106820C4040F00431F3 -:105040000013C14140010600000000000000000004 -:10505000001052000800A9400000000006000100F6 -:105060000000100000002000C420104004020000D6 -:105070000001002000000000E8048001052000007D -:1050800000000804000000000002024204000000CA -:10509000040010000000600000040008910280621B -:1050A00002141210011080090004080020020040C0 -:1050B000040040080080220408000000182000229C -:1050C00002000041003008F8012008200240403969 -:1050D000822080060390901010002021000D4006D1 -:1050E0008010000001000820002001AB0020015AC0 -:1050F000100830A1C204080860C0000C0A14208007 -:105100008102110400428C00000118501800204058 -:105110000018010210000004100182008A00200023 -:10512000842304100C287020043852000103061058 -:10513000204081023020818500102084632060801F -:105140002500001010E101820E143041000E0C20E9 -:10515000C1070A10208019460000084E7000003870 -:10516000C20806083180000002042040850600883D -:1051700000BEFF3B7BC7FF13CC18FCEF020D435F63 -:10518000C3D0203F4412224BB78007C4BE7D0D37E9 -:1051900080EFD3CDF4FFFF137F03030001000D5414 -:1051A00000088C0000000441511E5541616012103E -:1051B000000000000000000000100010040200C009 -:1051C00000003000000000000000000000000000AF -:1051D00000000000000000000000000000000000CF -:1051E000000000000000000000000000000000FFC0 -:1051F000FC0000CFFFC0000CFFFC0000CFFFC00090 -:105200000CFFFC0000CFFFC0000CFFFC0000CFFF34 -:10521000C0020C00000000000000000008000000B8 -:10522000000000000000000000000000000000007E -:10523000000000000000000000000000000000006E -:1052400000000000CFFFC0000CFFFC0000CFFFC03B -:10525000000CFFFC0000CFFFC0020C0000000000AB -:105260000000000008000000000000000000000036 -:10527000000000000000000000000000000000002E -:10528000000000000000000000000000000000001E -:10529000000000000000000000000000000000000E -:1052A00000000000000000000000000000000000FE -:1052B00000000000000000000000000000000000EE -:1052C00000000000000000000000000000000000DE -:1052D00000000000000000000000000000000000CE -:1052E00000000000000000000000000000000000BE -:1052F00000000000000000000000000000000000AE -:10530000000000000000000000000000000000009D -:10531000000000000000000000000000000000008D -:10532000000000000000000000000000000000007D -:10533000000000000000000000000000000000006D -:10534000000000000000000000000000000000005D -:10535000000000000000000000000000000000004D -:10536000000000000000000000000000000000003D -:10537000000000000000000000000000000000002D -:10538000000000000000000000000000000000001D -:10539000000000000000000000000000000000000D -:1053A00000000000000000000000000000000000FD -:1053B00000000000000000000000000000000000ED -:1053C00000000000000000000000000000000000DD -:1053D00000000000000000000000000000000000CD -:1053E00000000000000000000000000000000000BD -:1053F00000000000000000000000000000000000AD -:10540000000000000000000000000000000000009C -:10541000000000000000000000000000000000008C -:10542000000000000000000000000000000000007C -:10543000000000000000000000000000000000006C -:10544000000000000000000000000000000000005C -:10545000000000000000000000000000000000004C -:10546000000000000000000000000000000000003C -:10547000000000000000000000000000000000002C -:10548000000000000000000000000000000000001C -:10549000000000000000000000000000000000000C -:1054A00000000000000000000000000000000000FC -:1054B00000000000000000000000000000000000EC -:1054C00000000000000000000000000000000000DC -:1054D00000000000000000000000000000000000CC -:1054E00000000000000000000000000000000000BC -:1054F00000000000000000000000000000000000AC -:10550000000000000000000000000000000000009B -:10551000000000000000000000000000000000008B -:10552000000000000000000000000000000000007B -:10553000000000000000000000000000000000006B -:10554000000000000000000000000000000000005B -:10555000000000000000000000000000000000004B -:10556000000000000000000000000000000000003B -:10557000000000000000000000000000000000002B -:10558000000000000000000000000000000000001B -:10559000000000000000000000000000000000000B -:1055A00000000000000000000000000000000000FB -:1055B00000000000000000000000000000000000EB -:1055C00000000000000000000000000000000000DB -:1055D00000000000000000000000000000000000CB -:1055E00000000000000000000000000000000000BB -:1055F00000000000000000000000000000000000AB -:10560000000000000000000000000000000000009A -:10561000000000000000000000000000000000008A -:10562000000000000000000000000000000000007A -:10563000000000000000000000000000000000006A -:10564000000000000000000000000000000000005A -:10565000000000000000000000000000000000004A -:10566000000000000000000000000000000000003A -:10567000000000000000000000000000000000002A -:10568000000000000000000000000000000000001A -:10569000000000000000000000000000000000000A -:1056A00000000000000000000000000000000000FA -:1056B00000000000000000000000000000000000EA -:1056C00000000000000000000000000000000000DA -:1056D00000000000000000000000000000000000CA -:1056E00000000000000000000000000000000000BA -:1056F00000000000000000000000000000000000AA -:105700000000000000000000000000000000000099 -:105710000000000000000000000000000000000089 -:105720000000000000000000000000000000000079 -:105730000000000000000000000000000000000069 -:105740000000000000000000000000000000000059 -:105750000000000000000000000000000000000049 -:105760000000000000000000000000000000000039 -:105770000000000000000000000000000000000029 -:105780000000000000000000000000000000000019 -:105790000000000000000000000000000000000009 -:1057A00000000000000000000000000000000000F9 -:1057B00000000000000000000000000000000000E9 -:1057C00000000000000000000000000000000000D9 -:1057D00000000000000000000000000000000000C9 -:1057E00000000000000000000000000000000000B9 -:1057F00000000000000000000000000000000000A9 -:105800000000000000000000000000000000000098 -:105810000000000000000000000000000000000088 -:105820000000000000000000000000000000000078 -:105830000000000000000000000000000000000068 -:105840000000000000000000000000000000000058 -:105850000000000000000000000000000000000048 -:105860000000000000000000000000000000000038 -:105870000000000000000000000000000000000028 -:105880000000000000000000000000000000000018 -:105890000000000000000000000000000000000008 -:1058A00000000000000000000000000000000000F8 -:1058B00000000000000000000000000000000000E8 -:1058C00000000000000000000000000000000000D8 -:1058D00000000000000000000000000000000000C8 -:1058E00000000000000000000000000000000000B8 -:1058F00000000000000000000000000000000000A8 -:105900000000000000000000000000000000000097 -:105910000000000000000000000000000000000087 -:105920000000000000000000000000000000000077 -:105930000000000000000000000000000000000067 -:105940000000000000000000000000000000000057 -:105950000000000000000000000000000000000047 -:105960000000000000000000000000000000000037 -:105970000000000000000000000000000000000027 -:105980000000000000000000000000000000000017 -:105990000000000000000000000000000000000007 -:1059A00000000000000000000000000000000000F7 -:1059B00000000000000000000000000000000000E7 -:1059C00000000000000000000000000000000000D7 -:1059D00000000000000000000000000000000000C7 -:1059E00000000000000000000000000000000000B7 -:1059F00000000000000000000000000000000000A7 -:105A00000000000000000000000000000000000096 -:105A10000000000000000000000000000000000086 -:105A20000000000000000000000000000000000076 -:105A30000000000000000000000000000000000066 -:105A40000000000000000000000000000000000056 -:105A50000000000000000000000000000000000046 -:105A60000000000000000000000000000000000036 -:105A70000000000000000000000000000000000026 -:105A80000000000000000000000000000000000016 -:105A90000000000000000000000000000000000006 -:105AA00000000000000000000000000000000000F6 -:105AB00000000000000000000000000000000000E6 -:105AC00000000000000000000000000000000000D6 -:105AD00000000000000000000000000000000000C6 -:105AE00000000000000000000000000000000000B6 -:105AF00000000000000000000000000000000000A6 -:105B00000000000000000000000000000000000095 -:105B10000000000000000000000000000000000085 -:105B20000000000000000000000000000000000075 -:105B30000000000000000000000000000000000065 -:105B40000000000000000000000000000000000055 -:105B50000000000000000000000000000000000045 -:105B60000000000000000000000000000000000035 -:105B70000000000000000000000000000000000025 -:105B80000000000000000000000000000000000015 -:105B90000000000000000000000000000000000005 -:105BA00000000000000000000000000000000000F5 -:105BB00000000000000000000000000000000000E5 -:105BC00000000000000000000000000000000000D5 -:105BD00000000000000000000000000000000000C5 -:105BE00000000000000000000000000000000000B5 -:105BF00000000000000000000000000000000000A5 -:105C00000000000000000000000000000000000094 -:105C10000000000000000000000000000000000084 -:105C20000000000000000000000000000000000074 -:105C30000000000000000000000000000000000064 -:105C40000000000000000000000000000000000054 -:105C50000000000000000000000000000000000044 -:105C60000000000000000000000000000000000034 -:105C70000000000000000000000000000000000024 -:105C80000000000000000000000000000000000014 -:105C90000000000000000000000000000000000004 -:105CA00000000000000000000000000000000000F4 -:105CB00000000000000000000000000000000000E4 -:105CC00000000000000000000000000000000000D4 -:105CD00000000000000000000000000000000000C4 -:105CE00000000000000000000000000000000000B4 -:105CF00000000000000000000000000000000000A4 -:105D00000000000000000000000000000000000093 -:105D10000000000000000000000000000000000083 -:105D20000000000000000000000000000000000073 -:105D30000000000000000000000000000000000063 -:105D40000000000000000000000000000000000053 -:105D50000000000000000000000000000000000043 -:105D60000000000000000000000000000000000033 -:105D70000000000000000000000000000000000023 -:105D80000000000000000000000000000000000013 -:105D90000000000000000000000000000000000003 -:105DA00000000000000000000000000000000000F3 -:105DB00000000000000000000000000000000000E3 -:105DC00000000000000000000000000000000000D3 -:105DD00000000000000000000000000000000000C3 -:105DE00000000000000000000000000000000000B3 -:105DF00000000000000000000000000000000000A3 -:105E00000000000000000000000000000000000092 -:105E10000000000000000000000000000000000082 -:105E20000000000000000000000000000000000072 -:105E30000000000000000000000000000000000062 -:105E40000000000000000000000000000000000052 -:105E50000000000000000000000000000000000042 -:105E60000000000000000000000000000000000032 -:105E70000000000000000000000000000000000022 -:105E80000000000000000000000000000000000012 -:105E90000000000000000000000000000000000002 -:105EA00000000000000000000000000000000000F2 -:105EB00000000000000000000000000000000000E2 -:105EC00000000000000000000000000000000000D2 -:105ED00000000000000000000000000000000000C2 -:105EE00000000000000000000000000000000000B2 -:105EF00000000000000000000000000000000000A2 -:105F00000000000000000000000000000000000091 -:105F10000000000000000000000000000000000081 -:105F20000000000000000000000000000000000071 -:105F30000000000000000000000000000000000061 -:105F40000000000000000000000000000000000051 -:105F50000000000000000000000000000000000041 -:105F60000000000000000000000000000000000031 -:105F70000000000000000000000000000000000021 -:105F80000000000000000000000000000000000011 -:105F90000000000000000000000000000000000001 -:105FA00000000000000000000000000000000000F1 -:105FB00000000000000000000000000000000000E1 -:105FC00000000000000000000000000000000000D1 -:105FD00000000000000000000000000000000000C1 -:105FE00000000000000000000000000000000000B1 -:105FF00000000000000000000000000000000000A1 -:106000000000000000000000000000000000000090 -:106010000000000000000000000000000000000080 -:106020000000000000000000000000000000000070 -:106030000000000000000000000000000000000060 -:106040000000000000000000000000000000000050 -:106050000000000000000000000000000000000040 -:106060000000000000000000000000000000000030 -:106070000000000000000000000000000000000020 -:106080000000000000000000000000000000000010 -:106090000000000000000000000000000000000000 -:1060A00000000000000000000000000000000000F0 -:1060B00000000000000000000000000000000000E0 -:1060C00000000000000000000000000000000000D0 -:1060D00000000000000000000000000000000000C0 -:1060E00000000000000000000000000000000000B0 -:1060F00000000000000000000000000000000000A0 -:10610000000000000000000000000000000000008F -:10611000000000000000000000000000000000007F -:10612000000000000000000000000000000000006F -:10613000000000000000000000000000000000005F -:10614000000000000000000000000000000000004F -:10615000000000000000000000000000000000003F -:10616000000000000000000000000000000000002F -:10617000000000000000000000000000000000001F -:10618000000000000000000000000000000000000F -:1061900000000000000000000000000000000000FF -:1061A00000000000000000000000000000000000EF -:1061B00000000000000000000000000000000000DF -:1061C00000000000000000000000000000000000CF -:1061D00000000000000000000000000000000000BF -:1061E00000000000000000000000000000000000AF -:1061F000000000000000000000000000000000009F -:10620000000000000000000000000000000000008E -:10621000000000000000000000000000000000007E -:10622000000000000000000000000000000000006E -:10623000000000000000000000000000000000005E -:10624000000000000000000000000000000000004E -:10625000000000000000000000000000000000003E -:10626000000000000000000000000000000000002E -:10627000000000000000000000000000000000001E -:10628000000000000000000000000000000000000E -:1062900000000000000000000000000000000000FE -:1062A00000000000000000000000000000000000EE -:1062B00000000000000000000000000000000000DE -:1062C00000000000000000000000000000000000CE -:1062D00000000000000000000000000000000000BE -:1062E00000000000000000000000000000000000AE -:1062F000000000000000000000000000000000009E -:10630000000000000000000000000000000000008D -:10631000000000000000000000000000000000007D -:10632000000000000000000000000000000000006D -:10633000000000000000000000000000000000005D -:10634000000000000000000000000000000000004D -:10635000000000000000000000000000000000003D -:10636000000000000000000000000000000000002D -:10637000000000000000000000000000000000001D -:10638000000000000000000000000000000000000D -:1063900000000000000000000000000000000000FD -:1063A00000000000000000000000000000000000ED -:1063B00000000000000000000000000000000000DD -:1063C00000000000000000000000000000000000CD -:1063D00000000000000000000000000000000000BD -:1063E00000000000000000000000000000000000AD -:1063F000000000000000000000000000000000009D -:10640000000000000000000000000000000000008C -:10641000000000000000000000000000000000007C -:10642000000000000000000000000000000000006C -:10643000000000000000000000000000000000005C -:10644000000000000000000000000000000000004C -:10645000000000000000000000000000000000003C -:10646000000000000000000000000000000000002C -:10647000000000000000000000000000000000001C -:10648000000000000000000000000000000000000C -:1064900000000000000000000000000000000000FC -:1064A00000000000000000000000000000000000EC -:1064B00000000000000000000000000000000000DC -:1064C00000000000000000000000000000000000CC -:1064D00000000000000000000000000000000000BC -:1064E00000000000000000000000000000000000AC -:1064F000000000000000000000000000000000009C -:10650000000000000000000000000000000000008B -:10651000000000000000000000000000000000007B -:10652000000000000000000000000000000000006B -:10653000000000000000000000000000000000005B -:10654000000000000000000000000000000000004B -:10655000000000000000000000000000000000003B -:10656000000000000000000000000000000000002B -:10657000000000000000000000000000000000001B -:10658000000000000000000000000000000000000B -:1065900000000000000000000000000000000000FB -:1065A00000000000000000000000000000000000EB -:1065B00000000000000000000000000000000000DB -:1065C00000000000000000000000000000000000CB -:1065D00000000000000000000000000000000000BB -:1065E00000000000000000000000000000000000AB -:1065F000000000000000000000000000000000009B -:10660000000000000000000000000000000000008A -:10661000000000000000000000000000000000007A -:10662000000000000000000000000000000000006A -:10663000000000000000000000000000000000005A -:10664000000000000000000000000000000000004A -:10665000000000000000000000000000000000003A -:10666000000000000000000000000000000000002A -:10667000000000000000000000000000000000001A -:10668000000000000000000000000000000000000A -:1066900000000000000000000000000000000000FA -:1066A00000000000000000000000000000000000EA -:1066B00000000000000000000000000000000000DA -:1066C00000000000000000000000000000000000CA -:1066D00000000000000000000000000000000000BA -:1066E00000000000000000000000000000000000AA -:1066F000000000000000000000000000000000009A -:106700000000000000000000000000000000000089 -:106710000000000000000000000000000000000079 -:106720000000000000000000000000000000000069 -:106730000000000000000000000000000000000059 -:106740000000000000000000000000000000000049 -:106750000000000000000000000000000000000039 -:106760000000000000000000000000000000000029 -:106770000000000000000000000000000000000019 -:106780000000000000000000000000000000000009 -:1067900000000000000000000000000000000000F9 -:1067A00000000000000000000000000000000000E9 -:1067B00000000000000000000000000000000000D9 -:1067C00000000000000000000000000000000000C9 -:1067D00000000000000000000000000000000000B9 -:1067E00000000000000000000000000000000000A9 -:1067F0000000000000000000000000000000000099 -:106800000000000000000000000000000000000088 -:106810000000000000000000000000000000000078 -:106820000000000000000000000000000000000068 -:106830000000000000000000000000000000000058 -:106840000000000000000000000000000000000048 -:106850000000000000000000000000000000000038 -:106860000000000000000000000000000000000028 -:106870000000000000000000000000000000000018 -:106880000000000000000000000000000000000008 -:1068900000000000000000000000000000000000F8 -:1068A00000000000000000000000000000000000E8 -:1068B00000000000000000000000000000000000D8 -:1068C00000000000000000000000000000000000C8 -:1068D00000000000000000000000000000000000B8 -:1068E00000000000000000000000000000000000A8 -:1068F0000000000000000000000000000000000098 -:106900000000000000000000000000000000000087 -:106910000000000000000000000000000000000077 -:106920000000000000000000000000000000000067 -:106930000000000000000000000000000000000057 -:106940000000000000000000000000000000000047 -:106950000000000000000000000000000000000037 -:106960000000000000000000000000000000000027 -:106970000000000000000000000000000000000017 -:106980000000000000000000000000000000000007 -:1069900000000000000000000000000000000000F7 -:1069A00000000000000000000000000000000000E7 -:1069B00000000000000000000000000000000000D7 -:1069C00000000000000000000000000000000000C7 -:1069D00000000000000000000000000000000000B7 -:1069E00000000000000000000000000000000000A7 -:1069F0000000000000000000000000000000000097 -:106A00000000000000000000000000000000000086 -:106A10000000000000000000000000000000000076 -:106A20000000000000000000000000000000000066 -:106A30000000000000000000000000000000000056 -:106A40000000000000000000000000000000000046 -:106A50000000000000000000000000000000000036 -:106A60000000000000000000000000000000000026 -:106A70000000000000000000000000000000000016 -:106A80000000000000000000000000000000000006 -:106A900000000000000000000000000000000000F6 -:106AA00000000000000000000000000000000000E6 -:106AB00000000000000000000000000000000000D6 -:106AC00000000000000000000000000000000000C6 -:106AD00000000000000000000000000000000000B6 -:106AE00000000000000000000000000000000000A6 -:106AF0000000000000000000000000000000000096 -:106B00000000000000000000000000000000000085 -:106B10000000000000000000000000000000000075 -:106B20000000000000000000000000000000000065 -:106B30000000000000000000000000000000000055 -:106B40000000000000000000000000000000000045 -:106B50000000000000000000000000000000000035 -:106B60000000000000000000000000000000000025 -:106B70000000000000000000000000000000000015 -:106B80000000000000000000000000000000000005 -:106B900000000000000000000000000000000000F5 -:106BA00000000000000000000000000000000000E5 -:106BB00000000000000000000000000000000000D5 -:106BC00000000000000000000000000000000000C5 -:106BD00000000000000000000000000000000000B5 -:106BE00000000000000000000000000000000000A5 -:106BF0000000000000000000000000000000000095 -:106C00000000000000000000000000000000000084 -:106C10000000000000000000000000000000000074 -:106C20000000000000000000000000000000000064 -:106C30000000000000000000000000000000000054 -:106C40000000000000000000000000000000000044 -:106C50000000000000000000000000000000000034 -:106C60000000000000000000000000000000000024 -:106C70000000000000000000000000000000000014 -:106C80000000000000000000000000000000000004 -:106C900000000000000000000000000000000000F4 -:106CA00000000000000000000000000000000000E4 -:106CB00000000000000000000000000000000000D4 -:106CC00000000000000000000000000000000000C4 -:106CD00000000000000000000000000000000000B4 -:106CE00000000000000000000000000000000000A4 -:106CF0000000000000000000000000000000000094 -:106D00000000000000000000000000000000000083 -:106D10000000000000000000000000000000000073 -:106D20000000000000000000000000000000000063 -:106D30000000000000000000000000000000000053 -:106D40000000000000000000000000000000000043 -:106D50000000000000000000000000000000000033 -:106D60000000000000000000000000000000000023 -:106D70000000000000000000000000000000000013 -:106D80000000000000000000000000000000000003 -:106D900000000000000000000000000000000000F3 -:106DA00000000000000000000000000000000000E3 -:106DB00000000000000000000000000000000000D3 -:106DC00000000000000000000000000000000000C3 -:106DD00000000000000000000000000000000000B3 -:106DE00000000000000000000000000000000000A3 -:106DF0000000000000000000000000000000000093 -:106E00000000000000000000000000000000000082 -:106E10000000000000000000000000000000000072 -:106E20000000000000000000000000000000000062 -:106E30000000000000000000000000000000000052 -:106E40000000000000000000000000000000000042 -:106E50000000000000000000000000000000000032 -:106E60000000000000000000000000000000000022 -:106E70000000000000000000000000000000000012 -:106E80000000000000000000000000000000000002 -:106E900000000000000000000000000000000000F2 -:106EA00000000000000000000000000000000000E2 -:106EB00000000000000000000000000000000000D2 -:106EC00000000000000000000000000000000000C2 -:106ED00000000000000000000000000000000000B2 -:106EE00000000000000000000000000000000000A2 -:106EF0000000000000000000000000000000000092 -:106F00000000000000000000000000000000000081 -:106F10000000000000000000000000000000000071 -:106F20000000000000000000000000000000000061 -:106F30000000000000000000000000000000000051 -:106F40000000000000000000000000000000000041 -:106F50000000000000000000000000000000000031 -:106F60000000000000000000000000000000000021 -:106F70000000000000000000000000000000000011 -:106F80000000000000000000000000000000000001 -:106F900000000000000000000000000000000000F1 -:106FA00000000000000000000000000000000000E1 -:106FB00000000000000000000000000000000000D1 -:106FC00000000000000000000000000000000000C1 -:106FD00000000000000000000000000000000000B1 -:106FE00000000000000000000000000000000000A1 -:106FF0000000000000000000000000000000000091 -:107000000000000000000000000000000000000080 -:107010000000000000000000000000000000000070 -:107020000000000000000000000000000000000060 -:107030000000000000000000000000000000000050 -:107040000000000000000000000000000000000040 -:107050000000000000000000000000000000000030 -:107060000000000000000000000000000000000020 -:107070000000000000000000000000000000000010 -:107080000000000000000000000000000000000000 -:1070900000000000000000000000000000000000F0 -:1070A00000000000000000000000000000000000E0 -:1070B00000000000000000000000000000000000D0 -:1070C00000000000000000000000000000000000C0 -:1070D00000000000000000000000000000000000B0 -:1070E00000000000000000000000000000000000A0 -:1070F0000000000000000000000000000000000090 -:10710000000000000000000000000000000000007F -:10711000000000000000000000000000000000006F -:10712000000000000000000000000000000000005F -:10713000000000000000000000000000000000004F -:10714000000000000000000000000000000000003F -:10715000000000000000000000000000000000002F -:10716000000000000000000000000000000000001F -:10717000000000000000000000000000000000000F -:1071800000000000000000000000000000000000FF -:1071900000000000000000000000000000000000EF -:1071A00000000000000000000000000000000000DF -:1071B00000000000000000000000000000000000CF -:1071C00000000000000000000000000000000000BF -:1071D00000000000000000000000000000000000AF -:1071E000000000000000000000000000000000009F -:1071F000000000000000000000000000000000008F -:10720000000000000000000000000000000000007E -:10721000000000000000000000000000000000006E -:10722000000000000000000000000000000000005E -:10723000000000000000000000000000000000004E -:10724000000000000000000000000000000000003E -:10725000000000000000000000000000000000002E -:10726000000000000000000000000000000000001E -:10727000000000000000000000000000000000000E -:1072800000000000000000000000000000000000FE -:1072900000000000000000000000000000000000EE -:1072A00000000000000000000000000000000000DE -:1072B00000000000000000000000000000000000CE -:1072C00000000000000000000000000000000000BE -:1072D00000000000000000000000000000000000AE -:1072E000000000000000000000000000000000009E -:1072F000000000000000000000000000000000008E -:10730000000000000000000000000000000000007D -:10731000000000000000000000000000000000006D -:10732000000000000000000000000000000000005D -:10733000000000000000000000000000000000004D -:10734000000000000000000000000000000000003D -:10735000000000000000000000000000000000002D -:10736000000000000000000000000000000000001D -:10737000000000000000000000000000000000000D -:1073800000000000000000000000000000000000FD -:1073900000000000000000000000000000000000ED -:1073A00000000000000000000000000000000000DD -:1073B00000000000000000000000000000000000CD -:1073C00000000000000000000000000000000000BD -:1073D00000000000000000000000000000000000AD -:1073E000000000000000000000000000000000009D -:1073F000000000000000000000000000000000008D -:10740000000000000000000000000000000000007C -:10741000000000000000000000000000000000006C -:10742000000000000000000000000000000000005C -:10743000000000000000000000000000000000004C -:10744000000000000000000000000000000000003C -:10745000000000000000000000000000000000002C -:10746000000000000000000000000000000000001C -:10747000000000000000000000000000000000000C -:1074800000000000000000000000000000000000FC -:1074900000000000000000000000000000000000EC -:1074A00000000000000000000000000000000000DC -:1074B00000000000000000000000000000000000CC -:1074C00000000000000000000000000000000000BC -:1074D00000000000000000000000000000000000AC -:1074E000000000000000000000000000000000009C -:1074F000000000000000000000000000000000008C -:10750000000000000000000000000000000000007B -:10751000000000000000000000000000000000006B -:10752000000000000000000000000000000000005B -:10753000000000000000000000000000000000004B -:10754000000000000000000000000000000000003B -:10755000000000000000000000000000000000002B -:10756000000000000000000000000000000000001B -:10757000000000000000000000000000000000000B -:1075800000000000000000000000000000000000FB -:1075900000000000000000000000000000000000EB -:1075A00000000000000000000000000000000000DB -:1075B00000000000000000000000000000000000CB -:1075C00000000000000000000000000000000000BB -:1075D00000000000000000000000000000000000AB -:1075E000000000000000000000000000000000009B -:1075F000000000000000000000000000000000008B -:10760000000000000000000000000000000000007A -:10761000000000000000000000000000000000006A -:10762000000000000000000000000000000000005A -:10763000000000000000000000000000000000004A -:10764000000000000000000000000000000000003A -:10765000000000000000000000000000000000002A -:10766000000000000000000000000000000000001A -:10767000000000000000000000000000000000000A -:1076800000000000000000000000000000000000FA -:1076900000000000000000000000000000000000EA -:1076A00000000000000000000000000000000000DA -:1076B00000000000000000000000000000000000CA -:1076C00000000000000000000000000000000000BA -:1076D00000000000000000000000000000000000AA -:1076E000000000000000000000000000000000009A -:1076F000000000000000000000000000000000008A -:107700000000000000000000000000000000000079 -:107710000000000000000000000000000000000069 -:107720000000000000000000000000000000000059 -:107730000000000000000000000000000000000049 -:107740000000000000000000000000000000000039 -:107750000000000000000000000000000000000029 -:107760000000000000000000000000000000000019 -:107770000000000000000000000000000000000009 -:1077800000000000000000000000000000000000F9 -:1077900000000000000000000000000000000000E9 -:1077A00000000000000000000000000000000000D9 -:1077B00000000000000000000000000000000000C9 -:1077C00000000000000000000000000000000000B9 -:1077D00000000000000000000000000000000000A9 -:1077E0000000000000000000000000000000000099 -:1077F0000000000000000000000000000000000089 -:107800000000000000000000000000000000000078 -:107810000000000000000000000000000000000068 -:107820000000000000000000000000000000000058 -:107830000000000000000000000000000000000048 -:107840000000000000000000000000000000000038 -:107850000000000000000000000000000000000028 -:107860000000000000000000000000000000000018 -:107870000000000000000000000000000000000008 -:1078800000000000000000000000000000000000F8 -:1078900000000000000000000000000000000000E8 -:1078A00000000000000000000000000000000000D8 -:1078B00000000000000000000000000000000000C8 -:1078C00000000000000000000000000000000000B8 -:1078D00000000000000000000000000000000000A8 -:1078E0000000000000000000000000000000000098 -:1078F0000000000000000000000000000000000088 -:107900000000000000000000000000000000000077 -:107910000000000000000000000000000000000067 -:107920000000000000000000000000000000000057 -:107930000000000000000000000000000000000047 -:107940000000000000000000000000000000000037 -:107950000000000000000000000000000000000027 -:107960000000000000000000000000000000000017 -:107970000000000000000000000000000000000007 -:1079800000000000000000000000000000000000F7 -:1079900000000000000000000000000000000000E7 -:1079A00000000000000000000000000000000000D7 -:1079B00000000000000000000000000000000000C7 -:1079C00000000000000000000000000000000000B7 -:1079D00000000000000000000000000000000000A7 -:1079E0000000000000000000000000000000000097 -:1079F0000000000000000000000000000000000087 -:107A00000000000000000000000000000000000076 -:107A10000000000000000000000000000000000066 -:107A20000000000000000000000000000000000056 -:107A30000000000000000000000000000000000046 -:107A40000000000000000000000000000000000036 -:107A50000000000000000000000000000000000026 -:107A60000000000000000000000000000000000016 -:107A70000000000000000000000000000000000006 -:107A800000000000000000000000000000000000F6 -:107A900000000000000000000000000000000000E6 -:107AA00000000000000000000000000000000000D6 -:107AB00000000000000000000000000000000000C6 -:107AC00000000000000000000000000000000000B6 -:107AD00000000000000000000000000000000000A6 -:107AE0000000000000000000000000000000000096 -:107AF0000000000000000000000000000000000086 -:107B00000000000000000000000000000000000075 -:107B10000000000000000000000000000000000065 -:107B20000000000000000000000000000000000055 -:107B30000000000000000000000000000000000045 -:107B40000000000000000000000000000000000035 -:107B50000000000000000000000000000000000025 -:107B60000000000000000000000000000000000015 -:107B70000000000000000000000000000000000005 -:107B800000000000000000000000000000000000F5 -:107B900000000000000000000000000000000000E5 -:107BA00000000000000000000000000000000000D5 -:107BB00000000000000000000000000000000000C5 -:107BC00000000000000000000000000000000000B5 -:107BD00000000000000000000000000000000000A5 -:107BE0000000000000000000000000000000000095 -:107BF0000000000000000000000000000000000085 -:107C00000000000000000000000000000000000074 -:107C10000000000000000000000000000000000064 -:107C20000000000000000000000000000000000054 -:107C30000000000000000000000000000000000044 -:107C40000000000000000000000000000000000034 -:107C50000000000000000000000000000000000024 -:107C60000000000000000000000000000000000014 -:107C70000000000000000000000000000000000004 -:107C800000000000000000000000000000000000F4 -:107C900000000000000000000000000000000000E4 -:107CA00000000000000000000000000000000000D4 -:107CB00000000000000000000000000000000000C4 -:107CC00000000000000000000000000000000000B4 -:107CD00000000000000000000000000000000000A4 -:107CE0000000000000000000000000000000000094 -:107CF0000000000000000000000000000000000084 -:107D00000000000000000000000000000000000073 -:107D10000000000000000000000000000000000063 -:107D20000000000000000000000000000000000053 -:107D30000000000000000000000000000000000043 -:107D40000000000000000000000000000000000033 -:107D50000000000000000000000000000000000023 -:107D60000000000000000000000000000000000013 -:107D70000000000000000000000000000000000003 -:107D800000000000000000000000000000000000F3 -:107D900000000000000000000000000000000000E3 -:107DA00000000000000000000000000000000000D3 -:107DB00000000000000000000000000000000000C3 -:107DC00000000000000000000000000000000000B3 -:107DD00000000000000000000000000000000000A3 -:107DE0000000000000000000000000000000000093 -:107DF0000000000000000000000000000000000083 -:107E00000000000000000000000000000000000072 -:107E10000000000000000000000000000000000062 -:107E20000000000000000000000000000000000052 -:107E30000000000000000000000000000000000042 -:107E40000000000000000000000000000000000032 -:107E50000000000000000000000000000000000022 -:107E60000000000000000000000000000000000012 -:107E70000000000000000000000000000000000002 -:107E800000000000000000000000000000000000F2 -:107E900000000000000000000000000000000000E2 -:107EA00000000000000000000000000000000000D2 -:107EB00000000000000000000000000000000000C2 -:107EC00000000000000000000000000000000000B2 -:107ED00000000000000000000000000000000000A2 -:107EE0000000000000000000000000000000000092 -:107EF0000000000000000000000000000000000082 -:107F00000000000000000000000000000000000071 -:107F10000000000000000000000000000000000061 -:107F20000000000000000000000000000000000051 -:107F30000000000000000000000000000000000041 -:107F40000000000000000000000000000000000031 -:107F50000000000000000000000000000000000021 -:107F60000000000000000000000000000000000011 -:107F70000000000000000000000000000000000001 -:107F800000000000000000000000000000000000F1 -:107F900000000000000000000000000000000000E1 -:107FA00000000000000000000000000000000000D1 -:107FB00000000000000000000000000000000000C1 -:107FC00000000000000000000000000000000000B1 -:107FD00000000000000000000000000000000000A1 -:107FE0000000000000000000000000000000000091 -:107FF0000000000000000000000000000000000081 -:108000000000000000000000000000000000000070 -:108010000000000000000000000000000000000060 -:108020000000000000000000000000000000000050 -:108030000000000000000000000000000000000040 -:108040000000000000000000000000000000000030 -:108050000000000000000000000000000000000020 -:108060000000000000000000000000000000000010 -:108070000000000000000000000000000000000000 -:1080800000000000000000000000000000000000F0 -:1080900000000000000000000000000000000000E0 -:1080A00000000000000000000000000000000000D0 -:1080B00000000000000000000000000000000000C0 -:1080C00000000000000000000000000000000000B0 -:1080D00000000000000000000000000000000000A0 -:1080E0000000000000000000000000000000000090 -:1080F0000000000000000000000000000000000080 -:10810000000000000000000000000000000000006F -:10811000000000000000000000000000000000005F -:10812000000000000000000000000000000000004F -:10813000000000000000000000000000000000003F -:10814000000000000000000000000000000000002F -:10815000000000000000000000000000000000001F -:10816000000000000000000000000000000000000F -:1081700000000000000000000000000000000000FF -:1081800000000000000000000000000000000000EF -:1081900000000000000000000000000000000000DF -:1081A00000000000000000000000000000000000CF -:1081B00000000000000000000000000000000000BF -:1081C00000000000000000000000000000000000AF -:1081D000000000000000000000000000000000009F -:1081E000000000000000000000000000000000008F -:1081F000000000000000000000000000000000007F -:10820000000000000000000000000000000000006E -:10821000000000000000000000000000000000005E -:10822000000000000000000000000000000000004E -:10823000000000000000000000000000000000003E -:10824000000000000000000000000000000000002E -:10825000000000000000000000000000000000001E -:10826000000000000000000000000000000000000E -:1082700000000000000000000000000000000000FE -:1082800000000000000000000000000000000000EE -:1082900000000000000000000000000000000000DE -:1082A00000000000000000000000000000000000CE -:1082B00000000000000000000000000000000000BE -:1082C00000000000000000000000000000000000AE -:1082D000000000000000000000000000000000009E -:1082E000000000000000000000000000000000008E -:1082F000000000000000000000000000000000007E -:10830000000000000000000000000000000000006D -:10831000000000000000000000000000000000005D -:10832000000000000000000000000000000000004D -:10833000000000000000000000000000000000003D -:10834000000000000000000000000000000000002D -:10835000000000000000000000000000000000001D -:10836000000000000000000000000000000000000D -:1083700000000000000000000000000000000000FD -:1083800000000000000000000000000000000000ED -:1083900000000000000000000000000000000000DD -:1083A00000000000000000000000000000000000CD -:1083B00000000000000000000000000000000000BD -:1083C00000000000000000000000000000000000AD -:1083D000000000000000000000000000000000009D -:1083E000000000000000000000000000000000008D -:1083F000000000000000000000000000000000007D -:10840000000000000000000000000000000000006C -:10841000000000000000000000000000000000005C -:10842000000000000000000000000000000000004C -:10843000000000000000000000000000000000003C -:10844000000000000000000000000000000000002C -:10845000000000000000000000000000000000001C -:10846000000000000000000000000000000000000C -:1084700000000000000000000000000000000000FC -:1084800000000000000000000000000000000000EC -:1084900000000000000000000000000000000000DC -:1084A00000000000000000000000000000000000CC -:1084B00000000000000000000000000000000000BC -:1084C00000000000000000000000000000000000AC -:1084D000000000000000000000000000000000009C -:1084E000000000000000000000000000000000008C -:1084F000000000000000000000000000000000007C -:10850000000000000000000000000000000000006B -:10851000000000000000000000000000000000005B -:10852000000000000000000000000000000000004B -:10853000000000000000000000000000000000003B -:10854000000000000000000000000000000000002B -:10855000000000000000000000000000000000001B -:10856000000000000000000000000000000000000B -:1085700000000000000000000000000000000000FB -:1085800000000000000000000000000000000000EB -:1085900000000000000000000000000000000000DB -:1085A00000000000000000000000000000000000CB -:1085B00000000000000000000000000000000000BB -:1085C00000000000000000000000000000000000AB -:1085D000000000000000000000000000000000009B -:1085E000000000000000000000000000000000008B -:1085F000000000000000000000000000000000007B -:10860000000000000000000000000000000000006A -:10861000000000000000000000000000000000005A -:10862000000000000000000000000000000000004A -:10863000000000000000000000000000000000003A -:10864000000000000000000000000000000000002A -:10865000000000000000000000000000000000001A -:10866000000000000000000000000000000000000A -:1086700000000000000000000000000000000000FA -:1086800000000000000000000000000000000000EA -:1086900000000000000000000000000000000000DA -:1086A00000000000000000000000000000000000CA -:1086B00000000000000000000000000000000000BA -:1086C00000000000000000000000000000000000AA -:1086D000000000000000000000000000000000009A -:1086E000000000000000000000000000000000008A -:1086F000000000000000000000000000000000007A -:108700000000000000000000000000000000000069 -:108710000000000000000000000000000000000059 -:108720000000000000000000000000000000000049 -:108730000000000000000000000000000000000039 -:108740000000000000000000000000000000000029 -:108750000000000000000000000000000000000019 -:108760000000000000000000000000000000000009 -:1087700000000000000000000000000000000000F9 -:1087800000000000000000000000000000000000E9 -:1087900000000000000000000000000000000000D9 -:1087A00000000000000000000000000000000000C9 -:1087B00000000000000000000000000000000000B9 -:1087C00000000000000000000000000000000000A9 -:1087D0000000000000000000000000000000000099 -:1087E0000000000000000000000000000000000089 -:1087F0000000000000000000000000000000000079 -:108800000000000000000000000000000000000068 -:108810000000000000000000000000000000000058 -:108820000000000000000000000000000000000048 -:108830000000000000000000000000000000000038 -:108840000000000000000000000000000000000028 -:108850000000000000000000000000000000000018 -:108860000000000000000000000000000000000008 -:1088700000000000000000000000000000000000F8 -:1088800000000000000000000000000000000000E8 -:1088900000000000000000000000000000000000D8 -:1088A00000000000000000000000000000000000C8 -:1088B00000000000000000000000000000000000B8 -:1088C00000000000000000000000000000000000A8 -:1088D0000000000000000000000000000000000098 -:1088E0000000000000000000000000000000000088 -:1088F0000000000000000000000000000000000078 -:108900000000000000000000000000000000000067 -:108910000000000000000000000000000000000057 -:108920000000000000000000000000000000000047 -:108930000000000000000000000000000000000037 -:108940000000000000000000000000000000000027 -:108950000000000000000000000000000000000017 -:108960000000000000000000000000000000000007 -:1089700000000000000000000000000000000000F7 -:1089800000000000000000000000000000000000E7 -:1089900000000000000000000000000000000000D7 -:1089A00000000000000000000000000000000000C7 -:1089B00000000000000000000000000000000000B7 -:1089C00000000000000000000000000000000000A7 -:1089D0000000000000000000000000000000000097 -:1089E0000000000000000000000000000000000087 -:1089F0000000000000000000000000000000000077 -:108A00000000000000000000000000000000000066 -:108A10000000000000000000000000000000000056 -:108A20000000000000000000000000000000000046 -:108A30000000000000000000000000000000000036 -:108A40000000000000000000000000000000000026 -:108A50000000000000000000000000000000000016 -:108A60000000000000000000000000000000000006 -:108A700000000000000000000000000000000000F6 -:108A800000000000000000000000000000000000E6 -:108A900000000000000000000000000000000000D6 -:108AA00000000000000000000000000000000000C6 -:108AB00000000000000000000000000000000000B6 -:108AC00000000000000000000000000000000000A6 -:108AD0000000000000000000000000000000000096 -:108AE0000000000000000000000000000000000086 -:108AF0000000000000000000000000000000000076 -:108B00000000000000000000000000000000000065 -:108B10000000000000000000000000000000000055 -:108B20000000000000000000000000000000000045 -:108B30000000000000000000000000000000000035 -:108B40000000000000000000000000000000000025 -:108B50000000000000000000000000000000000015 -:108B60000000000000000000000000000000000005 -:108B700000000000000000000000000000000000F5 -:108B800000000000000000000000000000000000E5 -:108B900000000000000000000000000000000000D5 -:108BA00000000000000000000000000000000000C5 -:108BB00000000000000000000000000000000000B5 -:108BC00000000000000000000000000000000000A5 -:108BD0000000000000000000000000000000000095 -:108BE0000000000000000000000000000000000085 -:108BF0000000000000000000000000000000000075 -:108C00000000000000000000000000000000000064 -:108C10000000000000000000000000000000000054 -:108C20000000000000000000000000000000000044 -:108C30000000000000000000000000000000000034 -:108C40000000000000000000000000000000000024 -:108C50000000000000000000000000000000000014 -:108C60000000000000000000000000000000000004 -:108C700000000000000000000000000000000000F4 -:108C800000000000000000000000000000000000E4 -:108C900000000000000000000000000000000000D4 -:108CA00000000000000000000000000000000000C4 -:108CB00000000000000000000000000000000000B4 -:108CC00000000000000000000000000000000000A4 -:108CD0000000000000000000000000000000000094 -:108CE0000000000000000000000000000000000084 -:108CF0000000000000000000000000000000000074 -:108D00000000000000000000000000000000000063 -:108D10000000000000000000000000000000000053 -:108D20000000000000000000000000000000000043 -:108D30000000000000000000000000000000000033 -:108D40000000000000000000000000000000000023 -:108D50000000000000000000000000000000000013 -:108D60000000000000000000000000000000000003 -:108D700000000000000000000000000000000000F3 -:108D800000000000000000000000000000000000E3 -:108D900000000000000000000000000000000000D3 -:108DA00000000000000000000000000000000000C3 -:108DB00000000000000000000000000000000000B3 -:108DC00000000000000000000000000000000000A3 -:108DD0000000000000000000000000000000000093 -:108DE0000000000000000000000000000000000083 -:108DF0000000000000000000000000000000000073 -:108E00000000000000000000000000000000000062 -:108E10000000000000000000000000000000000052 -:108E20000000000000000000000000000000000042 -:108E30000000000000000000000000000000000032 -:108E40000000000000000000000000000000000022 -:108E50000000000000000000000000000000000012 -:108E60000000000000000000000000000000000002 -:108E700000000000000000000000000000000000F2 -:108E800000000000000000000000000000000000E2 -:108E900000000000000000000000000000000000D2 -:108EA00000000000000000000000000000000000C2 -:108EB00000000000000000000000000000000000B2 -:108EC00000000000000000000000000000000000A2 -:108ED0000000000000000000000000000000000092 -:108EE0000000000000000000000000000000000082 -:108EF0000000000000000000000000000000000072 -:108F00000000000000000000000000000000000061 -:108F10000000000000000000000000000000000051 -:108F20000000000000000000000000000000000041 -:108F30000000000000000000000000000000000031 -:108F40000000000000000000000000000000000021 -:108F50000000000000000000000000000000000011 -:108F60000000000000000000000000000000000001 -:108F700000000000000000000000000000000000F1 -:108F800000000000000000000000000000000000E1 -:108F900000000000000000000000000000000000D1 -:108FA00000000000000000000000000000000000C1 -:108FB00000000000000000000000000000000000B1 -:108FC00000000000000000000000000000000000A1 -:108FD0000000000000000000000000000000000091 -:108FE0000000000000000000000000000000000081 -:108FF0000000000000000000000000000000000071 -:109000000000000000000000000000000000000060 -:109010000000000000000000000000000000000050 -:109020000000000000000000000000000000000040 -:109030000000000000000000000000000000000030 -:109040000000000000000000000000000000000020 -:109050000000000000000000000000000000000010 -:109060000000000000000000000000000000000000 -:1090700000000000000000000000000000000000F0 -:1090800000000000000000000000000000000000E0 -:1090900000000000000000000000000000000000D0 -:1090A00000000000000000000000000000000000C0 -:1090B00000000000000000000000000000000000B0 -:1090C00000000000000000000000000000000000A0 -:1090D0000000000000000000000000000000000090 -:1090E0000000000000000000000000000000000080 -:1090F0000000000000000000000000000000000070 -:10910000000000000000000000000000000000005F -:10911000000000000000000000000000000000004F -:10912000000000000000000000000000000000003F -:10913000000000000000000000000000000000002F -:10914000000000000000000000000000000000001F -:10915000000000000000000000000000000000000F -:1091600000000000000000000000000000000000FF -:1091700000000000000000000000000000000000EF -:1091800000000000000000000000000000000000DF -:1091900000000000000000000000000000000000CF -:1091A00000000000000000000000000000000000BF -:1091B00000000000000000000000000000000000AF -:1091C000000000000000000000000000000000009F -:1091D000000000000000000000000000000000008F -:1091E000000000000000000000000000000000007F -:1091F000000000000000000000000000000000006F -:10920000000000000000000000000000000000005E -:10921000000000000000000000000000000000004E -:10922000000000000000000000000000000000003E -:10923000000000000000000000000000000000002E -:10924000000000000000000000000000000000001E -:10925000000000000000000000000000000000000E -:1092600000000000000000000000000000000000FE -:1092700000000000000000000000000000000000EE -:1092800000000000000000000000000000000000DE -:1092900000000000000000000000000000000000CE -:1092A00000000000000000000000000000000000BE -:1092B00000000000000000000000000000000000AE -:1092C000000000000000000000000000000000009E -:1092D000000000000000000000000000000000008E -:1092E000000000000000000000000000000000007E -:1092F000000000000000000000000000000000006E -:10930000000000000000000000000000000000005D -:10931000000000000000000000000000000000004D -:10932000000000000000000000000000000000003D -:10933000000000000000000000000000000000002D -:10934000000000000000000000000000000000001D -:10935000000000000000000000000000000000000D -:1093600000000000000000000000000000000000FD -:1093700000000000000000000000000000000000ED -:1093800000000000000000000000000000000000DD -:1093900000000000000000000000000000000000CD -:1093A00000000000000000000000000000000000BD -:1093B00000000000000000000000000000000000AD -:1093C000000000000000000000000000000000009D -:1093D000000000000000000000000000000000008D -:1093E000000000000000000000000000000000007D -:1093F000000000000000000000000000000000006D -:10940000000000000000000000000000000000005C -:10941000000000000000000000000000000000004C -:10942000000000000000000000000000000000003C -:10943000000000000000000000000000000000002C -:10944000000000000000000000000000000000001C -:10945000000000000000000000000000000000000C -:1094600000000000000000000000000000000000FC -:1094700000000000000000000000000000000000EC -:1094800000000000000000000000000000000000DC -:1094900000000000000000000000000000000000CC -:1094A00000000000000000000000000000000000BC -:1094B00000000000000000000000000000000000AC -:1094C000000000000000000000000000000000009C -:1094D000000000000000000000000000000000008C -:1094E000000000000000000000000000000000007C -:1094F000000000000000000000000000000000006C -:10950000000000000000000000000000000000005B -:10951000000000000000000000000000000000004B -:10952000000000000000000000000000000000003B -:10953000000000000000000000000000000000002B -:10954000000000000000000000000000000000001B -:10955000000000000000000000000000000000000B -:1095600000000000000000000000000000000000FB -:1095700000000000000000000000000000000000EB -:1095800000000000000000000000000000000000DB -:1095900000000000000000000000000000000000CB -:1095A00000000000000000000000000000000000BB -:1095B00000000000000000000000000000000000AB -:1095C000000000000000000000000000000000009B -:1095D000000000000000000000000000000000008B -:1095E000000000000000000000000000000000007B -:1095F000000000000000000000000000000000006B -:10960000000000000000000000000000000000005A -:10961000000000000000000000000000000000004A -:10962000000000000000000000000000000000003A -:10963000000000000000000000000000000000002A -:10964000000000000000000000000000000000001A -:10965000000000000000000000000000000000000A -:1096600000000000000000000000000000000000FA -:1096700000000000000000000000000000000000EA -:1096800000000000000000000000000000000000DA -:1096900000000000000000000000000000000000CA -:1096A00000000000000000000000000000000000BA -:1096B00000000000000000000000000000000000AA -:1096C000000000000000000000000000000000009A -:1096D000000000000000000000000000000000008A -:1096E000000000000000000000000000000000007A -:1096F000000000000000000000000000000000006A -:109700000000000000000000000000000000000059 -:109710000000000000000000000000000000000049 -:109720000000000000000000000000000000000039 -:109730000000000000000000000000000000000029 -:109740000000000000000000000000000000000019 -:109750000000000000000000000000000000000009 -:1097600000000000000000000000000000000000F9 -:1097700000000000000000000000000000000000E9 -:1097800000000000000000000000000000000000D9 -:1097900000000000000000000000000000000000C9 -:1097A00000000000000000000000000000000000B9 -:1097B00000000000000000000000000000000000A9 -:1097C0000000000000000000000000000000000099 -:1097D0000000000000000000000000000000000089 -:1097E0000000000000000000000000000000000079 -:1097F0000000000000000000000000000000000069 -:109800000000000000000000000000000000000058 -:109810000000000000000000000000000000000048 -:109820000000000000000000000000000000000038 -:109830000000000000000000000000000000000028 -:109840000000000000000000000000000000000018 -:109850000000000000000000000000000000000008 -:1098600000000000000000000000000000000000F8 -:1098700000000000000000000000000000000000E8 -:1098800000000000000000000000000000000000D8 -:1098900000000000000000000000000000000000C8 -:1098A00000000000000000000000000000000000B8 -:1098B00000000000000000000000000000000000A8 -:1098C0000000000000000000000000000000000098 -:1098D0000000000000000000000000000000000088 -:1098E0000000000000000000000000000000000078 -:1098F0000000000000000000000000000000000068 -:109900000000000000000000000000000000000057 -:109910000000000000000000000000000000000047 -:109920000000000000000000000000000000000037 -:109930000000000000000000000000000000000027 -:109940000000000000000000000000000000000017 -:109950000000000000000000000000000000000007 -:1099600000000000000000000000000000000000F7 -:1099700000000000000000000000000000000000E7 -:1099800000000000000000000000000000000000D7 -:1099900000000000000000000000000000000000C7 -:1099A00000000000000000000000000000000000B7 -:1099B00000000000000000000000000000000000A7 -:1099C0000000000000000000000000000000000097 -:1099D0000000000000000000000000000000000087 -:1099E0000000000000000000000000000000000077 -:1099F0000000000000000000000000000000000067 -:109A00000000000000000000000000000000000056 -:109A10000000000000000000000000000000000046 -:109A20000000000000000000000000000000000036 -:109A30000000000000000000000000000000000026 -:109A40000000000000000000000000000000000016 -:109A50000000000000000000000000000000000006 -:109A600000000000000000000000000000000000F6 -:109A700000000000000000000000000000000000E6 -:109A800000000000000000000000000000000000D6 -:109A900000000000000000000000000000000000C6 -:109AA00000000000000000000000000000000000B6 -:109AB00000000000000000000000000000000000A6 -:109AC0000000000000000000000000000000000096 -:109AD0000000000000000000000000000000000086 -:109AE0000000000000000000000000000000000076 -:109AF0000000000000000000000000000000000066 -:109B00000000000000000000000000000000000055 -:109B10000000000000000000000000000000000045 -:109B20000000000000000000000000000000000035 -:109B30000000000000000000000000000000000025 -:109B40000000000000000000000000000000000015 -:109B50000000000000000000000000000000000005 -:109B600000000000000000000000000000000000F5 -:109B700000000000000000000000000000000000E5 -:109B800000000000000000000000000000000000D5 -:109B900000000000000000000000000000000000C5 -:109BA00000000000000000000000000000000000B5 -:109BB00000000000000000000000000000000000A5 -:109BC0000000000000000000000000000000000095 -:109BD0000000000000000000000000000000000085 -:109BE0000000000000000000000000000000000075 -:109BF0000000000000000000000000000000000065 -:109C00000000000000000000000000000000000054 -:109C10000000000000000000000000000000000044 -:109C20000000000000000000000000000000000034 -:109C30000000000000000000000000000000000024 -:109C40000000000000000000000000000000000014 -:109C50000000000000000000000000000000000004 -:109C600000000000000000000000000000000000F4 -:109C700000000000000000000000000000000000E4 -:109C800000000000000000000000000000000000D4 -:109C900000000000000000000000000000000000C4 -:109CA00000000000000000000000000000000000B4 -:109CB00000000000000000000000000000000000A4 -:109CC0000000000000000000000000000000000094 -:109CD0000000000000000000000000000000000084 -:109CE0000000000000000000000000000000000074 -:109CF0000000000000000000000000000000000064 -:109D00000000000000000000000000000000000053 -:109D10000000000000000000000000000000000043 -:109D20000000000000000000000000000000000033 -:109D30000000000000000000000000000000000023 -:109D40000000000000000000000000000000000013 -:109D50000000000000000000000000000000000003 -:109D600000000000000000000000000000000000F3 -:109D700000000000000000000000000000000000E3 -:109D800000000000000000000000000000000000D3 -:109D900000000000000000000000000000000000C3 -:109DA00000000000000000000000000000000000B3 -:109DB00000000000000000000000000000000000A3 -:109DC0000000000000000000000000000000000093 -:109DD0000000000000000000000000000000000083 -:109DE0000000000000000000000000000000000073 -:109DF0000000000000000000000000000000000063 -:109E00000000000000000000000000000000000052 -:109E10000000000000000000000000000000000042 -:109E20000000000000000000000000000000000032 -:109E30000000000000000000000000000000000022 -:109E40000000000000000000000000000000000012 -:109E50000000000000000000000000000000000002 -:109E600000000000000000000000000000000000F2 -:109E700000000000000000000000000000000000E2 -:109E800000000000000000000000000000000000D2 -:109E900000000000000000000000000000000000C2 -:109EA00000000000000000000000000000000000B2 -:109EB00000000000000000000000000000000000A2 -:109EC0000000000000000000000000000000000092 -:109ED0000000000000000000000000000000000082 -:109EE0000000000000000000000000000000000072 -:109EF0000000000000000000000000000000000062 -:109F00000000000000000000000000000000000051 -:109F10000000000000000000000000000000000041 -:109F20000000000000000000000000000000000031 -:109F30000000000000000000000000000000000021 -:109F40000000000000000000000000000000000011 -:109F50000000000000000000000000000000000001 -:109F600000000000000000000000000000000000F1 -:109F700000000000000000000000000000000000E1 -:109F800000000000000000000000000000000000D1 -:109F900000000000000000000000000000000000C1 -:109FA00000000000000000000000000000000000B1 -:109FB00000000000000000000000000000000000A1 -:109FC0000000000000000000000000000000000091 -:109FD0000000000000000000000000000000000081 -:109FE0000000000000000000000000000000000071 -:109FF0000000000000000000000000000000000061 -:10A000000000000000000000000000000000000050 -:10A010000000000000000000000000000000000040 -:10A020000000000000000000000000000000000030 -:10A030000000000000000000000000000000000020 -:10A040000000000000000000000000000000000010 -:10A050000000000000000000000000000000000000 -:10A0600000000000000000000000000000000000F0 -:10A0700000000000000000000000000000000000E0 -:10A0800000000000000000000000000000000000D0 -:10A0900000000000000000000000000000000000C0 -:10A0A00000000000000000000000000000000000B0 -:10A0B00000000000000000000000000000000000A0 -:10A0C0000000000000000000000000000000000090 -:10A0D0000000000000000000000000000000000080 -:10A0E0000000000000000000000000000000000070 -:10A0F0000000000000000000000000000000000060 -:10A10000000000000000000000000000000000004F -:10A11000000000000000000000000000000000003F -:10A12000000000000000000000000000000000002F -:10A13000000000000000000000000000000000001F -:10A14000000000000000000000000000000000000F -:10A1500000000000000000000000000000000000FF -:10A1600000000000000000000000000000000000EF -:10A1700000000000000000000000000000000000DF -:10A1800000000000000000000000000000000000CF -:10A1900000000000000000000000000000000000BF -:10A1A00000000000000000000000000000000000AF -:10A1B000000000000000000000000000000000009F -:10A1C000000000000000000000000000000000008F -:10A1D000000000000000000000000000000000007F -:10A1E000000000000000000000000000000000006F -:10A1F000000000000000000000000000000000005F -:10A20000000000000000000000000000000000004E -:10A21000000000000000000000000000000000003E -:10A22000000000000000000000000000000000002E -:10A23000000000000000000000000000000000001E -:10A24000000000000000000000000000000000000E -:10A2500000000000000000000000000000000000FE -:10A2600000000000000000000000000000000000EE -:10A2700000000000000000000000000000000000DE -:10A2800000000000000000000000000000000000CE -:10A2900000000000000000000000000000000000BE -:10A2A00000000000000000000000000000000000AE -:10A2B000000000000000000000000000000000009E -:10A2C000000000000000000000000000000000008E -:10A2D000000000000000000000000000000000007E -:10A2E000000000000000000000000000000000006E -:10A2F000000000000000000000000000000000005E -:10A30000000000000000000000000000000000004D -:10A31000000000000000000000000000000000003D -:10A32000000000000000000000000000000000002D -:10A33000000000000000000000000000000000001D -:10A34000000000000000000000000000000000000D -:10A3500000000000000000000000000000000000FD -:10A3600000000000000000000000000000000000ED -:10A3700000000000000000000000000000000000DD -:10A3800000000000000000000000000000000000CD -:10A3900000000000000000000000000000000000BD -:10A3A00000000000000000000000000000000000AD -:10A3B000000000000000000000000000000000009D -:10A3C000000000000000000000000000000000008D -:10A3D000000000000000000000000000000000007D -:10A3E000000000000000000000000000000000006D -:10A3F000000000000000000000000000000000005D -:10A40000000000000000000000000000000000004C -:10A41000000000000000000000000000000000003C -:10A42000000000000000000000000000000000002C -:10A43000000000000000000000000000000000001C -:10A44000000000000000000000000000000000000C -:10A4500000000000000000000000000000000000FC -:10A4600000000000000000000000000000000000EC -:10A4700000000000000000000000000000000000DC -:10A4800000000000000000000000000000000000CC -:10A4900000000000000000000000000000000000BC -:10A4A00000000000000000000000000000000000AC -:10A4B000000000000000000000000000000000009C -:10A4C000000000000000000000000000000000008C -:10A4D000000000000000000000000000000000007C -:10A4E000000000000000000000000000000000006C -:10A4F000000000000000000000000000000000005C -:10A50000000000000000000000000000000000004B -:10A51000000000000000000000000000000000003B -:10A52000000000000000000000000000000000002B -:10A53000000000000000000000000000000000001B -:10A54000000000000000000000000000000000000B -:10A5500000000000000000000000000000000000FB -:10A5600000000000000000000000000000000000EB -:10A5700000000000000000000000000000000000DB -:10A5800000000000000000000000000000000000CB -:10A5900000000000000000000000000000000000BB -:10A5A00000000000000000000000000000000000AB -:10A5B000000000000000000000000000000000009B -:10A5C000000000000000000000000000000000008B -:10A5D000000000000000000000000000000000007B -:10A5E000000000000000000000000000000000006B -:10A5F000000000000000000000000000000000005B -:10A60000000000000000000000000000000000004A -:10A61000000000000000000000000000000000003A -:10A62000000000000000000000000000000000002A -:10A63000000000000000000000000000000000001A -:10A64000000000000000000000000000000000000A -:10A6500000000000000000000000000000000000FA -:10A6600000000000000000000000000000000000EA -:10A6700000000000000000000000000000000000DA -:10A6800000000000000000000000000000000000CA -:10A6900000000000000000000000000000000000BA -:10A6A00000000000000000000000000000000000AA -:10A6B000000000000000000000000000000000009A -:10A6C000000000000000000000000000000000008A -:10A6D000000000000000000000000000000000007A -:10A6E000000000000000000000000000000000006A -:10A6F000000000000000000000000000000000005A -:10A700000000000000000000000000000000000049 -:10A710000000000000000000000000000000000039 -:10A720000000000000000000000000000000000029 -:10A730000000000000000000000000000000000019 -:10A740000000000000000000000000000000000009 -:10A7500000000000000000000000000000000000F9 -:10A7600000000000000000000000000000000000E9 -:10A7700000000000000000000000000000000000D9 -:10A7800000000000000000000000000000000000C9 -:10A7900000000000000000000000000000000000B9 -:10A7A00000000000000000000000000000000000A9 -:10A7B0000000000000000000000000000000000099 -:10A7C0000000000000000000000000000000000089 -:10A7D0000000000000000000000000000000000079 -:10A7E0000000000000000000000000000000000069 -:10A7F0000000000000000000000000000000000059 -:10A800000000000000000000000000000000000048 -:10A810000000000000000000000000000000000038 -:10A820000000000000000000000000000000000028 -:10A830000000000000000000000000000000000018 -:10A840000000000000000000000000000000000008 -:10A8500000000000000000000000000000000000F8 -:10A8600000000000000000000000000000000000E8 -:10A8700000000000000000000000000000000000D8 -:10A8800000000000000000000000000000000000C8 -:10A8900000000000000000000000000000000000B8 -:10A8A00000000000000000000000000000000000A8 -:10A8B0000000000000000000000000000000000098 -:10A8C0000000000000000000000000000000000088 -:10A8D0000000000000000000000000000000000078 -:10A8E0000000000000000000000000000000000068 -:10A8F0000000000000000000000000000000000058 -:10A900000000000000000000000000000000000047 -:10A910000000000000000000000000000000000037 -:10A920000000000000000000000000000000000027 -:10A930000000000000000000000000000000000017 -:10A940000000000000000000000000000000000007 -:10A9500000000000000000000000000000000000F7 -:10A9600000000000000000000000000000000000E7 -:10A9700000000000000000000000000000000000D7 -:10A9800000000000000000000000000000000000C7 -:10A9900000000000000000000000000000000000B7 -:10A9A00000000000000000000000000000000000A7 -:10A9B0000000000000000000000000000000000097 -:10A9C0000000000000000000000000000000000087 -:10A9D0000000000000000000000000000000000077 -:10A9E0000000000000000000000000000000000067 -:10A9F0000000000000000000000000000000000057 -:10AA00000000000000000000000000000000000046 -:10AA10000000000000000000000000000000000036 -:10AA20000000000000000000000000000000000026 -:10AA30000000000000000000000000000000000016 -:10AA40000000000000000000000000000000000006 -:10AA500000000000000000000000000000000000F6 -:10AA600000000000000000000000000000000000E6 -:10AA700000000000000000000000000000000000D6 -:10AA800000000000000000000000000000000000C6 -:10AA900000000000000000000000000000000000B6 -:10AAA00000000000000000000000000000000000A6 -:10AAB0000000000000000000000000000000000096 -:10AAC0000000000000000000000000000000000086 -:10AAD0000000000000000000000000000000000076 -:10AAE0000000000000000000000000000000000066 -:10AAF0000000000000000000000000000000000056 -:10AB00000000000000000000000000000000000045 -:10AB10000000000000000000000000000000000035 -:10AB20000000000000000000000000000000000025 -:10AB30000000000000000000000000000000000015 -:10AB40000000000000000000000000000000000005 -:10AB500000000000000000000000000000000000F5 -:10AB600000000000000000000000000000000000E5 -:10AB700000000000000000000000000000000000D5 -:10AB800000000000000000000000000000000000C5 -:10AB900000000000000000000000000000000000B5 -:10ABA00000000000000000000000000000000000A5 -:10ABB0000000000000000000000000000000000095 -:10ABC0000000000000000000000000000000000085 -:10ABD0000000000000000000000000000000000075 -:10ABE0000000000000000000000000000000000065 -:10ABF0000000000000000000000000000000000055 -:10AC00000000000000000000000000000000000044 -:10AC10000000000000000000000000000000000034 -:10AC20000000000000000000000000000000000024 -:10AC30000000000000000000000000000000000014 -:10AC40000000000000000000000000000000000004 -:10AC500000000000000000000000000000000000F4 -:10AC600000000000000000000000000000000000E4 -:10AC700000000000000000000000000000000000D4 -:10AC800000000000000000000000000000000000C4 -:10AC900000000000000000000000000000000000B4 -:10ACA00000000000000000000000000000000000A4 -:10ACB0000000000000000000000000000000000094 -:10ACC0000000000000000000000000000000000084 -:10ACD0000000000000000000000000000000000074 -:10ACE0000000000000000000000000000000000064 -:10ACF0000000000000000000000000000000000054 -:10AD00000000000000000000000000000000000043 -:10AD10000000000000000000000000000000000033 -:10AD20000000000000000000000000000000000023 -:10AD30000000000000000000000000000000000013 -:10AD40000000000000000000000000000000000003 -:10AD500000000000000000000000000000000000F3 -:10AD600000000000000000000000000000000000E3 -:10AD700000000000000000000000000000000000D3 -:10AD800000000000000000000000000000000000C3 -:10AD900000000000000000000000000000000000B3 -:10ADA00000000000000000000000000000000000A3 -:10ADB0000000000000000000000000000000000093 -:10ADC0000000000000000000000000000000000083 -:10ADD0000000000000000000000000000000000073 -:10ADE0000000000000000000000000000000000063 -:10ADF0000000000000000000000000000000000053 -:10AE00000000000000000000000000000000000042 -:10AE10000000000000000000000000000000000032 -:10AE20000000000000000000000000000000000022 -:10AE30000000000000000000000000000000000012 -:10AE40000000000000000000000000000000000002 -:10AE500000000000000000000000000000000000F2 -:10AE600000000000000000000000000000000000E2 -:10AE700000000000000000000000000000000000D2 -:10AE800000000000000000000000000000000000C2 -:10AE900000000000000000000000000000000000B2 -:10AEA00000000000000000000000000000000000A2 -:10AEB0000000000000000000000000000000000092 -:10AEC0000000000000000000000000000000000082 -:10AED0000000000000000000000000000000000072 -:10AEE0000000000000000000000000000000000062 -:10AEF0000000000000000000000000000000000052 -:10AF00000000000000000000000000000000000041 -:10AF10000000000000000000000000000000000031 -:10AF20000000000000000000000000000000000021 -:10AF30000000000000000000000000000000000011 -:10AF40000000000000000000000000000000000001 -:10AF500000000000000000000000000000000000F1 -:10AF600000000000000000000000000000000000E1 -:10AF700000000000000000000000000000000000D1 -:10AF800000000000000000000000000000000000C1 -:10AF900000000000000000000000000000000000B1 -:10AFA00000000000000000000000000000000000A1 -:10AFB0000000000000000000000000000000000091 -:10AFC0000000000000000000000000000000000081 -:10AFD0000000000000000000000000000000000071 -:10AFE0000000000000000000000000000000000061 -:10AFF0000000000000000000000000000000000051 -:10B000000000000000000000000000000000000040 -:10B010000000000000000000000000000000000030 -:10B020000000000000000000000000000000000020 -:10B030000000000000000000000000000000000010 -:10B040000000000000000000000000000000000000 -:10B0500000000000000000000000000000000000F0 -:10B0600000000000000000000000000000000000E0 -:10B0700000000000000000000000000000000000D0 -:10B0800000000000000000000000000000000000C0 -:10B0900000000000000000000000000000000000B0 -:10B0A00000000000000000000000000000000000A0 -:10B0B0000000000000000000000000000000000090 -:10B0C0000000000000000000000000000000000080 -:10B0D0000000000000000000000000000000000070 -:10B0E0000000000000000000000000000000000060 -:10B0F0000000000000000000000000000000000050 -:10B10000000000000000000000000000000000003F -:10B11000000000000000000000000000000000002F -:10B12000000000000000000000000000000000001F -:10B13000000000000000000000000000000000000F -:10B1400000000000000000000000000000000000FF -:10B1500000000000000000000000000000000000EF -:10B1600000000000000000000000000000000000DF -:10B1700000000000000000000000000000000000CF -:10B1800000000000000000000000000000000000BF -:10B1900000000000000000000000000000000000AF -:10B1A000000000000000000000000000000000009F -:10B1B000000000000000000000000000000000008F -:10B1C000000000000000000000000000000000007F -:10B1D000000000000000000000000000000000006F -:10B1E000000000000000000000000000000000005F -:10B1F000000000000000000000000000000000004F -:10B20000000000000000000000000000000000003E -:10B21000000000000000000000000000000000002E -:10B22000000000000000000000000000000000001E -:10B23000000000000000000000000000000000000E -:10B2400000000000000000000000000000000000FE -:10B2500000000000000000000000000000000000EE -:10B2600000000000000000000000000000000000DE -:10B2700000000000000000000000000000000000CE -:10B2800000000000000000000000000000000000BE -:10B2900000000000000000000000000000000000AE -:10B2A000000000000000000000000000000000009E -:10B2B000000000000000000000000000000000008E -:10B2C000000000000000000000000000000000007E -:10B2D000000000000000000000000000000000006E -:10B2E000000000000000000000000000000000005E -:10B2F000000000000000000000000000000000004E -:10B30000000000000000000000000000000000003D -:10B31000000000000000000000000000000000002D -:10B32000000000000000000000000000000000001D -:10B33000000000000000000000000000000000000D -:10B3400000000000000000000000000000000000FD -:10B3500000000000000000000000000000000000ED -:10B3600000000000000000000000000000000000DD -:10B3700000000000000000000000000000000000CD -:10B3800000000000000000000000000000000000BD -:10B3900000000000000000000000000000000000AD -:10B3A000000000000000000000000000000000009D -:10B3B000000000000000000000000000000000008D -:10B3C000000000000000000000000000000000007D -:10B3D000000000000000000000000000000000006D -:10B3E000000000000000000000000000000000005D -:10B3F000000000000000000000000000000000004D -:10B40000000000000000000000000000000000003C -:10B41000000000000000000000000000000000002C -:10B42000000000000000000000000000000000001C -:10B43000000000000000000000000000000000000C -:10B4400000000000000000000000000000000000FC -:10B4500000000000000000000000000000000000EC -:10B4600000000000000000000000000000000000DC -:10B4700000000000000000000000000000000000CC -:10B4800000000000000000000000000000000000BC -:10B4900000000000000000000000000000000000AC -:10B4A000000000000000000000000000000000009C -:10B4B000000000000000000000000000000000008C -:10B4C000000000000000000000000000000000007C -:10B4D000000000000000000000000000000000006C -:10B4E000000000000000000000000000000000005C -:10B4F000000000000000000000000000000000004C -:10B50000000000000000000000000000000000003B -:10B51000000000000000000000000000000000002B -:10B52000000000000000000000000000000000001B -:10B53000000000000000000000000000000000000B -:10B5400000000000000000000000000000000000FB -:10B5500000000000000000000000000000000000EB -:10B5600000000000000000000000000000000000DB -:10B5700000000000000000000000000000000000CB -:10B5800000000000000000000000000000000000BB -:10B5900000000000000000000000000000000000AB -:10B5A000000000000000000000000000000000009B -:10B5B000000000000000000000000000000000008B -:10B5C000000000000000000000000000000000007B -:10B5D000000000000000000000000000000000006B -:10B5E000000000000000000000000000000000005B -:10B5F000000000000000000000000000000000004B -:10B60000000000000000000000000000000000003A -:10B61000000000000000000000000000000000002A -:10B62000000000000000000000000000000000001A -:10B63000000000000000000000000000000000000A -:10B6400000000000000000000000000000000000FA -:10B6500000000000000000000000000000000000EA -:10B6600000000000000000000000000000000000DA -:10B6700000000000000000000000000000000000CA -:10B6800000000000000000000000000000000000BA -:10B6900000000000000000000000000000000000AA -:10B6A000000000000000000000000000000000009A -:10B6B000000000000000000000000000000000008A -:10B6C000000000000000000000000000000000007A -:10B6D000000000000000000000000000000000006A -:10B6E000000000000000000000000000000000005A -:10B6F000000000000000000000000000000000004A -:10B700000000000000000000000000000000000039 -:10B710000000000000000000000000000000000029 -:10B720000000000000000000000000000000000019 -:10B730000000000000000000000000000000000009 -:10B7400000000000000000000000000000000000F9 -:10B7500000000000000000000000000000000000E9 -:10B7600000000000000000000000000000000000D9 -:10B7700000000000000000000000000000000000C9 -:10B7800000000000000000000000000000000000B9 -:10B7900000000000000000000000000000000000A9 -:10B7A0000000000000000000000000000000000099 -:10B7B0000000000000000000000000000000000089 -:10B7C0000000000000000000000000000000000079 -:10B7D0000000000000000000000000000000000069 -:10B7E0000000000000000000000000000000000059 -:10B7F0000000000000000000000000000000000049 -:10B800000000000000000000000000000000000038 -:10B810000000000000000000000000000000000028 -:10B820000000000000000000000000000000000018 -:10B830000000000000000000000000000000000008 -:10B8400000000000000000000000000000000000F8 -:10B8500000000000000000000000000000000000E8 -:10B8600000000000000000000000000000000000D8 -:10B8700000000000000000000000000000000000C8 -:10B8800000000000000000000000000000000000B8 -:10B8900000000000000000000000000000000000A8 -:10B8A0000000000000000000000000000000000098 -:10B8B0000000000000000000000000000000000088 -:10B8C0000000000000000000000000000000000078 -:10B8D0000000000000000000000000000000000068 -:10B8E0000000000000000000000000000000000058 -:10B8F0000000000000000000000000000000000048 -:10B900000000000000000000000000000000000037 -:10B910000000000000000000000000000000000027 -:10B920000000000000000000000000000000000017 -:10B930000000000000000000000000000000000007 -:10B9400000000000000000000000000000000000F7 -:10B9500000000000000000000000000000000000E7 -:10B9600000000000000000000000000000000000D7 -:10B9700000000000000000000000000000000000C7 -:10B9800000000000000000000000000000000000B7 -:10B9900000000000000000000000000000000000A7 -:10B9A0000000000000000000000000000000000097 -:10B9B0000000000000000000000000000000000087 -:10B9C0000000000000000000000000000000000077 -:10B9D0000000000000000000000000000000000067 -:10B9E0000000000000000000000000000000000057 -:10B9F0000000000000000000000000000000000047 -:10BA00000000000000000000000000000000000036 -:10BA10000000000000000000000000000000000026 -:10BA20000000000000000000000000000000000016 -:10BA30000000000000000000000000000000000006 -:10BA400000000000000000000000000000000000F6 -:10BA500000000000000000000000000000000000E6 -:10BA600000000000000000000000000000000000D6 -:10BA700000000000000000000000000000000000C6 -:10BA800000000000000000000000000000000000B6 -:10BA900000000000000000000000000000000000A6 -:10BAA0000000000000000000000000000000000096 -:10BAB0000000000000000000000000000000000086 -:10BAC0000000000000000000000000000000000076 -:10BAD0000000000000000000000000000000000066 -:10BAE0000000000000000000000000000000000056 -:10BAF0000000000000000000000000000000000046 -:10BB00000000000000000000000000000000000035 -:10BB10000000000000000000000000000000000025 -:10BB20000000000000000000000000000000000015 -:10BB30000000000000000000000000000000000005 -:10BB400000000000000000000000000000000000F5 -:10BB500000000000000000000000000000000000E5 -:10BB600000000000000000000000000000000000D5 -:10BB700000000000000000000000000000000000C5 -:10BB800000000000000000000000000000000000B5 -:10BB900000000000000000000000000000000000A5 -:10BBA0000000000000000000000000000000000095 -:10BBB0000000000000000000000000000000000085 -:10BBC0000000000000000000000000000000000075 -:10BBD0000000000000000000000000000000000065 -:10BBE0000000000000000000000000000000000055 -:10BBF0000000000000000000000000000000000045 -:10BC00000000000000000000000000000000000034 -:10BC10000000000000000000000000000000000024 -:10BC20000000000000000000000000000000000014 -:10BC30000000000000000000000000000000000004 -:10BC400000000000000000000000000000000000F4 -:10BC500000000000000000000000000000000000E4 -:10BC600000000000000000000000000000000000D4 -:10BC700000000000000000000000000000000000C4 -:10BC800000000000000000000000000000000000B4 -:10BC900000000000000000000000000000000000A4 -:10BCA0000000000000000000000000000000000094 -:10BCB0000000000000000000000000000000000084 -:10BCC0000000000000000000000000000000000074 -:10BCD0000000000000000000000000000000000064 -:10BCE0000000000000000000000000000000000054 -:10BCF0000000000000000000000000000000000044 -:10BD00000000000000000000000000000000000033 -:10BD10000000000000000000000000000000000023 -:10BD20000000000000000000000000000000000013 -:10BD30000000000000000000000000000000000003 -:10BD400000000000000000000000000000000000F3 -:10BD500000000000000000000000000000000000E3 -:10BD600000000000000000000000000000000000D3 -:10BD700000000000000000000000000000000000C3 -:10BD800000000000000000000000000000000000B3 -:10BD900000000000000000000000000000000000A3 -:10BDA0000000000000000000000000000000000093 -:10BDB0000000000000000000000000000000000083 -:10BDC0000000000000000000000000000000000073 -:10BDD0000000000000000000000000000000000063 -:10BDE0000000000000000000000000000000000053 -:10BDF0000000000000000000000000000000000043 -:10BE00000000000000000000000000000000000032 -:10BE10000000000000000000000000000000000022 -:10BE20000000000000000000000000000000000012 -:10BE30000000000000000000000000000000000002 -:10BE400000000000000000000000000000000000F2 -:10BE500000000000000000000000000000000000E2 -:10BE600000000000000000000000000000000000D2 -:10BE700000000000000000000000000000000000C2 -:10BE800000000000000000000000000000000000B2 -:10BE900000000000000000000000000000000000A2 -:10BEA0000000000000000000000000000000000092 -:10BEB0000000000000000000000000000000000082 -:10BEC0000000000000000000000000000000000072 -:10BED0000000000000000000000000000000000062 -:10BEE0000000000000000000000000000000000052 -:10BEF0000000000000000000000000000000000042 -:10BF00000000000000000000000000000000000031 -:10BF10000000000000000000000000000000000021 -:10BF20000000000000000000000000000000000011 -:10BF30000000000000000000000000000000000001 -:10BF400000000000000000000000000000000000F1 -:10BF500000000000000000000000000000000000E1 -:10BF600000000000000000000000000000000000D1 -:10BF700000000000000000000000000000000000C1 -:10BF800000000000000000000000000000000000B1 -:10BF900000000000000000000000000000000000A1 -:10BFA0000000000000000000000000000000000091 -:10BFB0000000000000000000000000000000000081 -:10BFC0000000000000000000000000000000000071 -:10BFD0000000000000000000000000000000000061 -:10BFE0000000000000000000000000000000000051 -:10BFF0000000000000000000000000000000000041 -:10C000000000000000000000000000000000000030 -:10C010000000000000000000000000000000000020 -:10C020000000000000000000000000000000000010 -:10C030000000000000000000000000000000000000 -:10C0400000000000000000000000000000000000F0 -:10C0500000000000000000000000000000000010D0 -:10C0600000040001000000000000000000000000CB -:10C0700000000000000000000000000000000000C0 -:10C0800000000000000000000000000000000000B0 -:10C0900000000000000000000000000000000000A0 -:10C0A0000000000000000900000000000000000087 -:10C0B0000000000000000000000000000000000080 -:10C0C0000000000000000000000000000000000070 -:10C0D0000000000000000000000000000000000060 -:10C0E0000000000000000000000000000000084008 -:10C0F0004888204000020001218000C0002080808C -:10C10000000480800000000200008000000104089C -:10C1100001202484810100000000020000002000B2 -:10C12000000000000400010121192400D0091000C2 -:10C130001022200002040040011000400002000014 -:10C1400000010200800004211000404460800002D1 -:10C150002304000201100400000000008820008970 -:10C1600000042208890240800810041000800400A6 -:10C17000400000000000008041D002002492249082 -:10C180004180400408000A080001088140200000A6 -:10C190000420028080000000190410008010420476 -:10C1A00050080000040192EBE8BE80000B801000F4 -:10C1B0004400004904008408801120008401080024 -:10C1C00000000000400008200000021040000008AD -:10C1D000204000200100000000090062101000E86B -:10C1E00080105D40B100001C001800040001100226 -:10C1F00000023000000800000000080000000000FD -:10C20000A00004000000000000000000000000800A -:10C2100000002008208180210008C50002C482009F -:10C22000175EC00C900000024022104080000810F1 -:10C230000100020606002040002000080000000067 -:10C240000200000004000080504000500820200040 -:10C2500050220000802A08028030200200BFF13EF8 -:10C26000470239F00000000000000000404090103C -:10C27000400000000040900448040000000000A4BA -:10C2800000004000000002800088048000000800D8 -:10C29000008000002A32240842810A281100060585 -:10C2A00008000090A868101A090B8282144421200B -:10C2B00002020FF480000C0800000000B510000C12 -:10C2C00080613D220000020200C0690040040010AD -:10C2D000334080000D30080A3018584CD000C00A96 -:10C2E0002D31A54094040044812400225004080408 -:10C2F000200012110A00100819A60D01425328B39C -:10C300004A084306040144682B4004088ACA1260A4 -:10C310008062A10698406981804021002FD9409613 -:10C32000520610D2800103082D12833008A0004A63 -:10C33000051D3130B05F43303043434001201020B1 -:10C340000000008080025008000000001412145009 -:10C3500021041004080AA018000A000000090801BE -:10C360000000064811B4CA846201540116001E4A36 -:10C370008A01002420F00D000318A20A08861A0B77 -:10C3800018021940A0046023201186981195846C2E -:10C39000680B190322804448C000282800000008C8 -:10C3A0008460030B92804000A8A43508260A000090 -:10C3B00060C120D003084181D28191C046A602010C -:10C3C000019480235010063101840800521020018E -:10C3D0002010020181040400010004041A00D000AE -:10C3E00049000C008010B10400D216028080B49085 -:10C3F000420090210860000002D340258002D24014 -:10C4000039000000010C0000000000191422110086 -:10C410000A0820000000080020800082610000104F -:10C420000002340000000A00048000808A00001925 -:10C43000740580311C81A313CD900C0002220803E7 -:10C4400010800028182000009140A0409000320089 -:10C4500001CC027054E4070802088802C1447E013E -:10C460003C2844132271584940322A4252A20B14EC -:10C47000200214A981B6200980C2542680800001C0 -:10C48000DC8066F11131092E00ABF0A15C278440FD -:10C490001A3044A000800CE202AE33BD00D8F60D85 -:10C4A00094CE4A80C10C34060A0C01240010B80B4B -:10C4B000841C344EE471AA201A440CA0400180046C -:10C4C00004A14105540903C01A5049D22800402D47 -:10C4D000021004327C0048008400000008001310A1 -:10C4E00000B0A031144A41144A0284A0948CD001B7 -:10C4F000022908278081200C00300A0A131000004E -:10C5000094EA08C18510111A00160804054000209D -:10C5100000000000040A02010040004002081283EB -:10C52000410000280000088000000000008000009A -:10C530004204000244000000000241040005002003 -:10C540000800284C90212A4802041B02446A202239 -:10C55000400902289B04046080C80B0000480204C4 -:10C56000C01000000028000001004404008000808A -:10C57000010C43D4002080008102014102801000A0 -:10C5800000000000001000000002800002001830CF -:10C5900080002000400102001000801DF000198181 -:10C5A00000803D080084000000200402282CE201E5 -:10C5B0000800A0E0382000400004022000A0020093 -:10C5C0003300E0C0142001400000804000804000A3 -:10C5D000A8001000008000202000000001000009D9 -:10C5E000081507002200100010000A0200000011C8 -:10C5F0000288404D4420004A0002822011100800A9 -:10C60000400191010400040000400000000000808F -:10C6100020600022000000000000400008A0000090 -:10C62000200001010004924A08805008E00428001C -:10C630000024509009000A008000080000008100DA -:10C6400010010000000005000800020000100000BA -:10C650000181040105081C080000021102042000E9 -:10C6600000020004080150505A000241010821084C -:10C6700020082000004000004180800000008C0065 -:10C68000229A0C50040000480022D400120220C05C -:10C6900008A80085002FBE3785CE167025DC03C0A4 -:10C6A0000000040360231C2802001E000242D00088 -:10C6B0001E2426418107B1FBA42311026C00000156 -:10C6C00024002000250206388223CCBBF73A210043 -:10C6D00093319F44E2920933C9FC5201240A8A2112 -:10C6E0000E0482906F906208002C0414101508A1AB -:10C6F0004C006400006020B0200008804042101010 -:10C70000000019003E000003A160010306000800BC -:10C7100040F004310213C54140010600000000084A -:10C7200000008000001052000800A9400000000036 -:10C73000070000002000100080002000442010406E -:10C7400004020000000101000007F00482008201E1 -:10C7500001208004304000000004004000224242DA -:10C760000801012804001420001040000004000803 -:10C770009100804200041000010000080001084000 -:10C7800008008008010010000020000002000000E6 -:10C7900000200022020800410000000000200000EC -:10C7A00000404000000000000000100000002020B9 -:10C7B000000000000010000001000820802011ABE4 -:10C7C0000027009000081080000418024081020C2D -:10C7D000040810204302008718C08402B801081220 -:10C7E0001C6021C1040002042008100921008102FC -:10C7F00020908000000802040C18121080183010DD -:10C8000020C102003060830A002041000010200097 -:10C81000420000000002040800402040821400A0F2 -:10C8200040021C3060C30600102038C201000084A2 -:10C8300020908410810000000000408404083060D3 -:10C84000C1060088208018226546EDD20008250127 -:10C85000002008024070000CC310200160A0CC80B2 -:10C860006A632210C098B1898814F4007D40D0C05A -:10C87000000405100001CFFE10400404050D01471F -:10C88000592003FCF0303FFFC000F0000008B0006A -:10C890000400006000003000000000000000000004 -:10C8A0000000000000000000000000000000000088 -:10C8B0000000000000000000000000000000000078 -:10C8C00000000000003FFF0FFFF3FFFCFFFF3FFFF2 -:10C8D000CFFFF3FFFCFFFF0000C0000000000000DE -:10C8E0000000000000020000000010000000000036 -:10C8F0001800000000000000000000000000000020 -:10C900000000000000000000000000000000000027 -:10C910000000000000003FFFCFFFF3FFFCFFFF001F -:10C9200000C0000000000000000000000002000045 -:10C9300000001000000000001800000000000000CF -:10C9400000000000000000000000000000000000E7 -:10C9500000000000000000000000000000000000D7 -:10C9600000000000000000000000000000000000C7 -:10C9700000000000000000000000000000000000B7 -:10C9800000000000000000000000000000000000A7 -:10C990000000000000000000000000000000000097 -:10C9A0000000000000000000000000000000000087 -:10C9B0000000000000000000000000000000000077 -:10C9C0000000000000000000000000000000000067 -:10C9D0000000000000000000000000000000000057 -:10C9E0000000000000000000000000000000000047 -:10C9F0000000000000000000000000000000000037 -:10CA00000000000000000000000000000000000026 -:10CA10000000000000000000000000000000000016 -:10CA20000000000000000000000000000000000006 -:10CA300000000000000000000000000000000000F6 -:10CA400000000000000000000000000000000000E6 -:10CA500000000000000000000000000000000000D6 -:10CA600000000000000000000000000000000000C6 -:10CA700000000000000000000000000000000000B6 -:10CA800000000000000000000000000000000000A6 -:10CA90000000000000000000000000000000000096 -:10CAA0000000000000000000000000000000000086 -:10CAB0000000000000000000000000000000000076 -:10CAC0000000000000000000000000000000000066 -:10CAD0000000000000000000000000000000000056 -:10CAE0000000000000000000000000000000000046 -:10CAF0000000000000000000000000000000000036 -:10CB00000000000000000000000000000000000025 -:10CB10000000000000000000000000000000000015 -:10CB20000000000000000000000000000000000005 -:10CB300000000000000000000000000000000000F5 -:10CB400000000000000000000000000000000000E5 -:10CB500000000000000000000000000000000000D5 -:10CB600000000000000000000000000000000000C5 -:10CB700000000000000000000000000000000000B5 -:10CB800000000000000000000000000000000000A5 -:10CB90000000000000000000000000000000000095 -:10CBA0000000000000000000000000000000000085 -:10CBB0000000000000000000000000000000000075 -:10CBC0000000000000000000000000000000000065 -:10CBD0000000000000000000000000000000000055 -:10CBE0000000000000000000000000000000000045 -:10CBF0000000000000000000000000000000000035 -:10CC00000000000000000000000000000000000024 -:10CC10000000000000000000000000000000000014 -:10CC20000000000000000000000000000000000004 -:10CC300000000000000000000000000000000000F4 -:10CC400000000000000000000000000000000000E4 -:10CC500000000000000000000000000000000000D4 -:10CC600000000000000000000000000000000000C4 -:10CC700000000000000000000000000000000000B4 -:10CC800000000000000000000000000000000000A4 -:10CC90000000000000000000000000000000000094 -:10CCA0000000000000000000000000000000000084 -:10CCB0000000000000000000000000000000000074 -:10CCC0000000000000000000000000000000000064 -:10CCD0000000000000000000000000000000000054 -:10CCE0000000000000000000000000000000000044 -:10CCF0000000000000000000000000000000000034 -:10CD00000000000000000000000000000000000023 -:10CD10000000000000000000000000000000000013 -:10CD20000000000000000000000000000000000003 -:10CD300000000000000000000000000000000000F3 -:10CD400000000000000000000000000000000000E3 -:10CD500000000000000000000000000000000000D3 -:10CD600000000000000000000000000000000000C3 -:10CD700000000000000000000000000000000000B3 -:10CD800000000000000000000000000000000000A3 -:10CD90000000000000000000000000000000000093 -:10CDA0000000000000000000000000000000000083 -:10CDB0000000000000000000000000000000000073 -:10CDC0000000000000000000000000000000000063 -:10CDD0000000000000000000000000000000000053 -:10CDE0000000000000000000000000000000000043 -:10CDF0000000000000000000000000000000000033 -:10CE00000000000000000000000000000000000022 -:10CE10000000000000000000000000000000000012 -:10CE20000000000000000000000000000000000002 -:10CE300000000000000000000000000000000000F2 -:10CE400000000000000000000000000000000000E2 -:10CE500000000000000000000000000000000000D2 -:10CE600000000000000000000000000000000000C2 -:10CE700000000000000000000000000000000000B2 -:10CE800000000000000000000000000000000000A2 -:10CE90000000000000000000000000000000000092 -:10CEA0000000000000000000000000000000000082 -:10CEB0000000000000000000000000000000000072 -:10CEC0000000000000000000000000000000000062 -:10CED0000000000000000000000000000000000052 -:10CEE0000000000000000000000000000000000042 -:10CEF0000000000000000000000000000000000032 -:10CF00000000000000000000000000000000000021 -:10CF10000000000000000000000000000000000011 -:10CF20000000000000000000000000000000000001 -:10CF300000000000000000000000000000000000F1 -:10CF400000000000000000000000000000000000E1 -:10CF500000000000000000000000000000000000D1 -:10CF600000000000000000000000000000000000C1 -:10CF700000000000000000000000000000000000B1 -:10CF800000000000000000000000000000000000A1 -:10CF90000000000000000000000000000000000091 -:10CFA0000000000000000000000000000000000081 -:10CFB0000000000000000000000000000000000071 -:10CFC0000000000000000000000000000000000061 -:10CFD0000000000000000000000000000000000051 -:10CFE0000000000000000000000000000000000041 -:10CFF0000000000000000000000000000000000031 -:10D000000000000000000000000000000000000020 -:10D010000000000000000000000000000000000010 -:10D020000000000000000000000000000000000000 -:10D0300000000000000000000000000000000000F0 -:10D0400000000000000000000000000000000000E0 -:10D0500000000000000000000000000000000000D0 -:10D0600000000000000000000000000000000000C0 -:10D0700000000000000000000000000000000000B0 -:10D0800000000000000000000000000000000000A0 -:10D090000000000000000000000000000000000090 -:10D0A0000000000000000000000000000000000080 -:10D0B0000000000000000000000000000000000070 -:10D0C0000000000000000000000000000000000060 -:10D0D0000000000000000000000000000000000050 -:10D0E0000000000000000000000000000000000040 -:10D0F0000000000000000000000000000000000030 -:10D10000000000000000000000000000000000001F -:10D11000000000000000000000000000000000000F -:10D1200000000000000000000000000000000000FF -:10D1300000000000000000000000000000000000EF -:10D1400000000000000000000000000000000000DF -:10D1500000000000000000000000000000000000CF -:10D1600000000000000000000000000000000000BF -:10D1700000000000000000000000000000000000AF -:10D18000000000000000000000000000000000009F -:10D19000000000000000000000000000000000008F -:10D1A000000000000000000000000000000000007F -:10D1B000000000000000000000000000000000006F -:10D1C000000000000000000000000000000000005F -:10D1D000000000000000000000000000000000004F -:10D1E000000000000000000000000000000000003F -:10D1F000000000000000000000000000000000002F -:10D20000000000000000000000000000000000001E -:10D21000000000000000000000000000000000000E -:10D2200000000000000000000000000000000000FE -:10D2300000000000000000000000000000000000EE -:10D2400000000000000000000000000000000000DE -:10D2500000000000000000000000000000000000CE -:10D2600000000000000000000000000000000000BE -:10D2700000000000000000000000000000000000AE -:10D28000000000000000000000000000000000009E -:10D29000000000000000000000000000000000008E -:10D2A000000000000000000000000000000000007E -:10D2B000000000000000000000000000000000006E -:10D2C000000000000000000000000000000000005E -:10D2D000000000000000000000000000000000004E -:10D2E000000000000000000000000000000000003E -:10D2F000000000000000000000000000000000002E -:10D30000000000000000000000000000000000001D -:10D31000000000000000000000000000000000000D -:10D3200000000000000000000000000000000000FD -:10D3300000000000000000000000000000000000ED -:10D3400000000000000000000000000000000000DD -:10D3500000000000000000000000000000000000CD -:10D3600000000000000000000000000000000000BD -:10D3700000000000000000000000000000000000AD -:10D38000000000000000000000000000000000009D -:10D39000000000000000000000000000000000008D -:10D3A000000000000000000000000000000000007D -:10D3B000000000000000000000000000000000006D -:10D3C000000000000000000000000000000000005D -:10D3D000000000000000000000000000000000004D -:10D3E000000000000000000000000000000000003D -:10D3F000000000000000000000000000000000002D -:10D40000000000000000000000000000000000001C -:10D41000000000000000000000000000000000000C -:10D4200000000000000000000000000000000000FC -:10D4300000000000000000000000000000000000EC -:10D4400000000000000000000000000000000000DC -:10D4500000000000000000000000000000000000CC -:10D4600000000000000000000000000000000000BC -:10D4700000000000000000000000000000000000AC -:10D48000000000000000000000000000000000009C -:10D49000000000000000000000000000000000008C -:10D4A000000000000000000000000000000000007C -:10D4B000000000000000000000000000000000006C -:10D4C000000000000000000000000000000000005C -:10D4D000000000000000000000000000000000004C -:10D4E000000000000000000000000000000000003C -:10D4F000000000000000000000000000000000002C -:10D50000000000000000000000000000000000001B -:10D51000000000000000000000000000000000000B -:10D5200000000000000000000000000000000000FB -:10D5300000000000000000000000000000000000EB -:10D5400000000000000000000000000000000000DB -:10D5500000000000000000000000000000000000CB -:10D5600000000000000000000000000000000000BB -:10D5700000000000000000000000000000000000AB -:10D58000000000000000000000000000000000009B -:10D59000000000000000000000000000000000008B -:10D5A000000000000000000000000000000000007B -:10D5B000000000000000000000000000000000006B -:10D5C000000000000000000000000000000000005B -:10D5D000000000000000000000000000000000004B -:10D5E000000000000000000000000000000000003B -:10D5F000000000000000000000000000000000002B -:10D60000000000000000000000000000000000001A -:10D61000000000000000000000000000000000000A -:10D6200000000000000000000000000000000000FA -:10D6300000000000000000000000000000000000EA -:10D6400000000000000000000000000000000000DA -:10D6500000000000000000000000000000000000CA -:10D6600000000000000000000000000000000000BA -:10D6700000000000000000000000000000000000AA -:10D68000000000000000000000000000000000009A -:10D69000000000000000000000000000000000008A -:10D6A000000000000000000000000000000000007A -:10D6B000000000000000000000000000000000006A -:10D6C000000000000000000000000000000000005A -:10D6D000000000000000000000000000000000004A -:10D6E000000000000000000000000000000000003A -:10D6F000000000000000000000000000000000002A -:10D700000000000000000000000000000000000019 -:10D710000000000000000000000000000000000009 -:10D7200000000000000000000000000000000000F9 -:10D7300000000000000000000000000000000000E9 -:10D7400000000000000000000000000000000000D9 -:10D7500000000000000000000000000000000000C9 -:10D7600000000000000000000000000000000000B9 -:10D7700000000000000000000000000000000000A9 -:10D780000000000000000000000000000000000099 -:10D790000000000000000000000000000000000089 -:10D7A0000000000000000000000000000000000079 -:10D7B0000000000000000000000000000000000069 -:10D7C0000000000000000000000000000000000059 -:10D7D0000000000000000000000000000000000049 -:10D7E0000000000000000000000000000000000039 -:10D7F0000000000000000000000000000000000029 -:10D800000000000000000000000000000000000018 -:10D810000000000000000000000000000000000008 -:10D8200000000000000000000000000000000000F8 -:10D8300000000000000000000000000000000000E8 -:10D8400000000000000000000000000000000000D8 -:10D8500000000000000000000000000000000000C8 -:10D8600000000000000000000000000000000000B8 -:10D8700000000000000000000000000000000000A8 -:10D880000000000000000000000000000000000098 -:10D890000000000000000000000000000000000088 -:10D8A0000000000000000000000000000000000078 -:10D8B0000000000000000000000000000000000068 -:10D8C0000000000000000000000000000000000058 -:10D8D0000000000000000000000000000000000048 -:10D8E0000000000000000000000000000000000038 -:10D8F0000000000000000000000000000000000028 -:10D900000000000000000000000000000000000017 -:10D910000000000000000000000000000000000007 -:10D9200000000000000000000000000000000000F7 -:10D9300000000000000000000000000000000000E7 -:10D9400000000000000000000000000000000000D7 -:10D9500000000000000000000000000000000000C7 -:10D9600000000000000000000000000000000000B7 -:10D9700000000000000000000000000000000000A7 -:10D980000000000000000000000000000000000097 -:10D990000000000000000000000000000000000087 -:10D9A0000000000000000000000000000000000077 -:10D9B0000000000000000000000000000000000067 -:10D9C0000000000000000000000000000000000057 -:10D9D0000000000000000000000000000000000047 -:10D9E0000000000000000000000000000000000037 -:10D9F0000000000000000000000000000000000027 -:10DA00000000000000000000000000000000000016 -:10DA10000000000000000000000000000000000006 -:10DA200000000000000000000000000000000000F6 -:10DA300000000000000000000000000000000000E6 -:10DA400000000000000000000000000000000000D6 -:10DA500000000000000000000000000000000000C6 -:10DA600000000000000000000000000000000000B6 -:10DA700000000000000000000000000000000000A6 -:10DA80000000000000000000000000000000000096 -:10DA90000000000000000000000000000000000086 -:10DAA0000000000000000000000000000000000076 -:10DAB0000000000000000000000000000000000066 -:10DAC0000000000000000000000000000000000056 -:10DAD0000000000000000000000000000000000046 -:10DAE0000000000000000000000000000000000036 -:10DAF0000000000000000000000000000000000026 -:10DB00000000000000000000000000000000000015 -:10DB10000000000000000000000000000000000005 -:10DB200000000000000000000000000000000000F5 -:10DB300000000000000000000000000000000000E5 -:10DB400000000000000000000000000000000000D5 -:10DB500000000000000000000000000000000000C5 -:10DB600000000000000000000000000000000000B5 -:10DB700000000000000000000000000000000000A5 -:10DB80000000000000000000000000000000000095 -:10DB90000000000000000000000000000000000085 -:10DBA0000000000000000000000000000000000075 -:10DBB0000000000000000000000000000000000065 -:10DBC0000000000000000000000000000000000055 -:10DBD0000000000000000000000000000000000045 -:10DBE0000000000000000000000000000000000035 -:10DBF0000000000000000000000000000000000025 -:10DC00000000000000000000000000000000000014 -:10DC10000000000000000000000000000000000004 -:10DC200000000000000000000000000000000000F4 -:10DC300000000000000000000000000000000000E4 -:10DC400000000000000000000000000000000000D4 -:10DC500000000000000000000000000000000000C4 -:10DC600000000000000000000000000000000000B4 -:10DC700000000000000000000000000000000000A4 -:10DC80000000000000000000000000000000000094 -:10DC90000000000000000000000000000000000084 -:10DCA0000000000000000000000000000000000074 -:10DCB0000000000000000000000000000000000064 -:10DCC0000000000000000000000000000000000054 -:10DCD0000000000000000000000000000000000044 -:10DCE0000000000000000000000000000000000034 -:10DCF0000000000000000000000000000000000024 -:10DD00000000000000000000000000000000000013 -:10DD10000000000000000000000000000000000003 -:10DD200000000000000000000000000000000000F3 -:10DD300000000000000000000000000000000000E3 -:10DD400000000000000000000000000000000000D3 -:10DD500000000000000000000000000000000000C3 -:10DD600000000000000000000000000000000000B3 -:10DD700000000000000000000000000000000000A3 -:10DD80000000000000000000000000000000000093 -:10DD90000000000000000000000000000000000083 -:10DDA0000000000000000000000000000000000073 -:10DDB0000000000000000000000000000000000063 -:10DDC0000000000000000000000000000000000053 -:10DDD0000000000000000000000000000000000043 -:10DDE0000000000000000000000000000000000033 -:10DDF0000000000000000000000000000000000023 -:10DE00000000000000000000000000000000000012 -:10DE10000000000000000000000000000000000002 -:10DE200000000000000000000000000000000000F2 -:10DE300000000000000000000000000000000000E2 -:10DE400000000000000000000000000000000000D2 -:10DE500000000000000000000000000000000000C2 -:10DE600000000000000000000000000000000000B2 -:10DE700000000000000000000000000000000000A2 -:10DE80000000000000000000000000000000000092 -:10DE90000000000000000000000000000000000082 -:10DEA0000000000000000000000000000000000072 -:10DEB0000000000000000000000000000000000062 -:10DEC0000000000000000000000000000000000052 -:10DED0000000000000000000000000000000000042 -:10DEE0000000000000000000000000000000000032 -:10DEF0000000000000000000000000000000000022 -:10DF00000000000000000000000000000000000011 -:10DF10000000000000000000000000000000000001 -:10DF200000000000000000000000000000000000F1 -:10DF300000000000000000000000000000000000E1 -:10DF400000000000000000000000000000000000D1 -:10DF500000000000000000000000000000000000C1 -:10DF600000000000000000000000000000000000B1 -:10DF700000000000000000000000000000000000A1 -:10DF80000000000000000000000000000000000091 -:10DF90000000000000000000000000000000000081 -:10DFA0000000000000000000000000000000000071 -:10DFB0000000000000000000000000000000000061 -:10DFC0000000000000000000000000000000000051 -:10DFD0000000000000000000000000000000000041 -:10DFE0000000000000000000000000000000000031 -:10DFF0000000000000000000000000000000000021 -:10E000000000000000000000000000000000000010 -:10E010000000000000000000000000000000000000 -:10E0200000000000000000000000000000000000F0 -:10E0300000000000000000000000000000000000E0 -:10E0400000000000000000000000000000000000D0 -:10E0500000000000000000000000000000000000C0 -:10E0600000000000000000000000000000000000B0 -:10E0700000000000000000000000000000000000A0 -:10E080000000000000000000000000000000000090 -:10E090000000000000000000000000000000000080 -:10E0A0000000000000000000000000000000000070 -:10E0B0000000000000000000000000000000000060 -:10E0C0000000000000000000000000000000000050 -:10E0D0000000000000000000000000000000000040 -:10E0E0000000000000000000000000000000000030 -:10E0F0000000000000000000000000000000000020 -:10E10000000000000000000000000000000000000F -:10E1100000000000000000000000000000000000FF -:10E1200000000000000000000000000000000000EF -:10E1300000000000000000000000000000000000DF -:10E1400000000000000000000000000000000000CF -:10E1500000000000000000000000000000000000BF -:10E1600000000000000000000000000000000000AF -:10E17000000000000000000000000000000000009F -:10E18000000000000000000000000000000000008F -:10E19000000000000000000000000000000000007F -:10E1A000000000000000000000000000000000006F -:10E1B000000000000000000000000000000000005F -:10E1C000000000000000000000000000000000004F -:10E1D000000000000000000000000000000000003F -:10E1E000000000000000000000000000000000002F -:10E1F000000000000000000000000000000000001F -:10E20000000000000000000000000000000000000E -:10E2100000000000000000000000000000000000FE -:10E2200000000000000000000000000000000000EE -:10E2300000000000000000000000000000000000DE -:10E2400000000000000000000000000000000000CE -:10E2500000000000000000000000000000000000BE -:10E2600000000000000000000000000000000000AE -:10E27000000000000000000000000000000000009E -:10E28000000000000000000000000000000000008E -:10E29000000000000000000000000000000000007E -:10E2A000000000000000000000000000000000006E -:10E2B000000000000000000000000000000000005E -:10E2C000000000000000000000000000000000004E -:10E2D000000000000000000000000000000000003E -:10E2E000000000000000000000000000000000002E -:10E2F000000000000000000000000000000000001E -:10E30000000000000000000000000000000000000D -:10E3100000000000000000000000000000000000FD -:10E3200000000000000000000000000000000000ED -:10E3300000000000000000000000000000000000DD -:10E3400000000000000000000000000000000000CD -:10E3500000000000000000000000000000000000BD -:10E3600000000000000000000000000000000000AD -:10E37000000000000000000000000000000000009D -:10E38000000000000000000000000000000000008D -:10E39000000000000000000000000000000000007D -:10E3A000000000000000000000000000000000006D -:10E3B000000000000000000000000000000000005D -:10E3C000000000000000000000000000000000004D -:10E3D000000000000000000000000000000000003D -:10E3E000000000000000000000000000000000002D -:10E3F000000000000000000000000000000000001D -:10E40000000000000000000000000000000000000C -:10E4100000000000000000000000000000000000FC -:10E4200000000000000000000000000000000000EC -:10E4300000000000000000000000000000000000DC -:10E4400000000000000000000000000000000000CC -:10E4500000000000000000000000000000000000BC -:10E4600000000000000000000000000000000000AC -:10E47000000000000000000000000000000000009C -:10E48000000000000000000000000000000000008C -:10E49000000000000000000000000000000000007C -:10E4A000000000000000000000000000000000006C -:10E4B000000000000000000000000000000000005C -:10E4C000000000000000000000000000000000004C -:10E4D000000000000000000000000000000000003C -:10E4E000000000000000000000000000000000002C :10E4F000000000000000000000000000000000001C :10E50000000000000000000000000000000000000B :10E5100000000000000000000000000000000000FB @@ -241721,7 +237624,7 @@ :10FFD0000000000000000000000000000000000021 :10FFE0000000000000000000000000000000000011 :10FFF0000000000000000000000000000000000001 -:02000004003BBF +:02000004003AC0 :1000000000000000000000000000000000000000F0 :1000100000000000000000000000000000000000E0 :1000200000000000000000000000000000000000D0 @@ -241874,880 +237777,880 @@ :100950000000000000000000000000000000000097 :100960000000000000000000000000000000000087 :100970000000000000000000000000000000000077 -:1009800000444000000000000000000000000000E3 +:100980000000000000000000000000000000000067 :100990000000000000000000000000000000000057 :1009A0000000000000000000000000000000000047 :1009B0000000000000000000000000000000000037 -:1009C0000000000000000100000400000000000022 +:1009C0000000000000000000000000000000000027 :1009D0000000000000000000000000000000000017 :1009E0000000000000000000000000000000000007 :1009F00000000000000000000000000000000000F7 -:100A000000000000000000000000000000000040A6 -:100A10000200007C880299004C800080004880021F -:100A20000000039080003802000002004000000037 -:100A3000030000800C01013A001F8E2C0008E4E046 -:100A400000FCA36000188000000800000001008086 -:100A5000000201000200000200008002000080008D -:100A600000010002800000000000400000000000C3 -:100A70000000000000000000200804020020000028 -:100A80000000000001000000001004000000001041 -:100A90004000000040000000000000002080040032 -:100AA000020040041C128008000392800020009481 -:100AB0000E480000800010010014100F8C00E48428 -:100AC00020080001012002AAC8AC80080A81100099 -:100AD0004490DEE132D6844A80DFE0002405290814 -:100AE000421000C020000802000002104000001860 -:100AF000200400000000000008020000000400685C -:100B00003E10554454800000800000000002500A4E -:100B10000000100000020000200C52951545014015 -:100B200020020020040040020040040040080900A8 -:100B3000010861E260B9F92B77C8C50006F48A00A4 -:100B40001556C2043020002924125241444008B8EE -:100B5000B3821F120260304684B0000A44C1040010 -:100B6000BB00C1A011858100514008D000286D094B -:100B700092600040A24A28208018400230B6C52C5E -:100B80001600B1D021240400160C08004001346185 -:100B90000035A80D80B1CC4C1A200829046200222F -:100BA00030003010400132008418F446018409827C -:100BB000C181D04BAA106EC94693467801501ADF06 -:100BC00008002094F84C103219428AB01D4490005D -:100BD000001A400000000000000000000000E310C8 -:100BE00010983E08824CF3CE3062C92470C6B573AB -:100BF00033E8820C1D304F0F311A58D8DF3DCACE72 -:100C00002D31A5F85E9E1BC1816CB0E200B5483560 -:100C10002B4110E3DAE8304B1BA60DE1E35368B338 -:100C2000EB0B53460C11E6E86B780958CCCE527D9D -:100C3000C4E5D9169F86ED8050081B8C0FDF84C257 -:100C4000114410FAE232530F2DE2DB3C36B63C9DE4 -:100C50008AF9313F709F4B3F72CF4B43AFDC976BAC -:100C60003D9BCEFFF327D473FA3476829B73FAD080 -:100C7000035B39B28FFEF3FDA83E030008492F90B5 -:100C8000000CED0835B4CAF5616974E9300FFF4A0C -:100C9000BE010114712C0DF98359A3DBDCD69A3BFC -:100CA00059435B60E5AC7D3325598698319DA46D31 -:100CB0006D07594BE3802F7CE14F0F6E08BB22512B -:100CC000C0E0532FB684C181ADFC355E262B09A848 -:100CD000E1C3F0BC931AC241FEE097C0CEB6210B2F -:100CE000438080F3D074C631C18F57F15BB44403A5 -:100CF00026800200811F48164829BCCBB2707EA412 -:100D0000410026A08417D05EC4498A315F0F12408B -:100D1000420CB82E18584A62204EDC9B8F3C490486 -:100D20002871F4A004740441075D428B30DD233C3C -:100D3000B74160E009000908021B4440F15000631C -:100D40004504FA0308D1021CC4F5351C8B5E4139F9 -:100D5000D407191008050213C8B43C8605AA480632 -:100D600030A618100625200291404000BA802000CD -:100D70000BDC0075DCD7132894489F6088446A24F4 -:100D80003C6840B922F9484F4412228240A203B085 -:100D9000281E10D983A6200888A6441C48000411E8 -:100DA0009EC066F413B1012E30A3A035F827E448A5 -:100DB0000230000082083FF242EFB3FD2C91662C16 -:100DC000958E00D241ECB5071BC8803FB331281285 -:100DD000041D37CEE073AB001ACC0EA0C101C08554 -:100DE000AC81E925540FA3F23A4009D23BD042BD71 -:100DF0000241043F7E0FFF8049D18210B2CE28709D -:100E0000C52400031884401000401841210867FEE3 -:100E1000109008A7D1DE28895E16A60901A0BFF8A8 -:100E20009CEA0ED9415051281C24090001400020A1 -:100E30000000000014080201004000400208128275 -:100E40004100444851221EF18341109AC4931A0371 -:100E5000DFCE998270BC783F049F46DCD0C718E390 -:100E60002B2669C594315F68D0D6333B0FE692B22A -:100E700094ECD11A73005FE01200383C0C88000437 -:100E8000A21CCC2A1C21B686F7900698918225E6F2 -:100E9000425C620DB0A0AA000106D34126A010005A -:100EA0000009000000000000000280023802280053 -:100EB000000D00000531F05350188A19D7401F80EB -:100EC000040030121121420E93A31453A33CE60DEB -:100ED000B5A3B5ECDA2C03E240C990A5002A04348E -:100EE0009000B001EC24056B06A0884000826407E6 -:100EF0006812B5C776C000442000000C49000049C4 -:100F00003C11173C1486787152EC929A1326475381 -:100F100080A9685540200088CC2226F8527E2A43BA -:100F2000C4E2B30704C8E53B00C58AE0680002D00C -:100F30002268007FE1776080B109EA4C0963BBB8A1 -:100F4000A80F09630515B35ABC6CB53FEE844A027D -:100F500049045EF22F2ECE32C00088008034040097 -:100F600026501C8C8D8101004800020000200000EA -:100F700000C90401308004631E73090541C9A40837 -:100F80004824520E7C90450CDA5500414069906926 -:100F900084698400088841E00008F7993051479E31 -:100FA0006164043DC530094B7FA3BC20378F00012D -:100FB00049BC80B5A8273B2721CC863024CC83C0F0 -:100FC0001480040360200C2800008E000762D030DB -:100FD0001A240645050690EB742311026C000A11D1 -:100FE0002400A000214306A882A3FC99E7328100D7 -:100FF00093319E5028120933C9E50281242AB83959 -:101000000E08CA906DD8E208143C0954301508A5A2 -:101010004E006680400022B0000000000A8010D61A -:101020004097AF1D3AC7707127EC41F80000066485 -:101030004320F8C79A00A94805007A0030980E802E -:10104000C011322260154A001B8BAB40000000002B -:10105000200004304001D0910022224040F00040A6 -:101060001D020C00000F43260000013C1600007119 -:101070000020E3FC35DC490CB034844800006040BB -:101080000800228024A10003404483265C3A483EA5 -:10109000B74004C080000000000000000000001005 -:1010A0000200200200400400000800004A10005422 -:1010B00010A083266A4601539270FBFD00C980048C -:1010C000000004000000000FC40064D4020000020D -:1010D0000000022000000100010208020000256952 -:1010E00004260094204810448104088040810204B2 -:1010F0002448224082044112108108041102112068 -:10110000084444810448822420481048210489016D -:1011100004101020084104484810202110112120FB -:1011200044822441204002241120490200912008D9 -:101130004210224242220448204004810448924442 -:1011400088244822448224402040108409020084DC -:1011500020108490890842002102448424482244BB -:101160008224408844645E044C0CADF38238E1650F -:10117000043B0ECE11A04082872246CD4200428819 -:10118000213B035040B0F184CC984C008F429280B8 -:101190000100055C05498C0001044045142324C569 -:1011A000281002B0FFC03FFFC000F0000052A005B1 -:1011B000500000000000700000000000000000006F +:100A000000000000000000000000000000000000E6 +:100A100000000000000000000000000000000000D6 +:100A200000000000000000000000000000000000C6 +:100A300000000000000000000000000000000000B6 +:100A400000000000000000000000000000000000A6 +:100A50000000000000000000000000000000000096 +:100A60000000000000000000000000000000000086 +:100A70000000000000000000000000000000000076 +:100A80000000000000000000000000000000000066 +:100A90000000000000000000000000000000000056 +:100AA0000000000000000000000000000000000046 +:100AB0000000000000000000000000000000000036 +:100AC0000000000000000000000000000000000026 +:100AD0000000000000000000000000000000000016 +:100AE0000000000000000000000000000000000006 +:100AF00000000000000000000000000000000000F6 +:100B000000000000000000000000000000000000E5 +:100B100000000000000000000000000000000000D5 +:100B200000000000000000000000000000000000C5 +:100B300000000000000000000000000000000000B5 +:100B400000000000000000000000000000000000A5 +:100B50000000000000000000000000000000000095 +:100B60000000000000000000000000000000000085 +:100B70000000000000000000000000000000000075 +:100B80000000000000000000000000000000000065 +:100B90000000000000000000000000000000000055 +:100BA0000000000000000000000000000000000045 +:100BB0000000000000000000000000000000000035 +:100BC0000000000000000000000000000000000025 +:100BD0000000000000000000000000000000000015 +:100BE0000000000000000000000000000000000005 +:100BF00000000000000000000000000000000000F5 +:100C000000000000000000000000000000000000E4 +:100C100000000000000000000000000000000000D4 +:100C200000000000000000000000000000000000C4 +:100C300000000000000000000000000000000000B4 +:100C400000000000000000000000000000000000A4 +:100C50000000000000000000000000000000000094 +:100C60000000000000000000000000000000000084 +:100C70000000000000000000000000000000000074 +:100C80000000000000000000000000000000000064 +:100C90000000000000000000000000000000000054 +:100CA0000000000000000000000000000000000044 +:100CB0000000000000000000000000000000000034 +:100CC0000000000000000000000000000000000024 +:100CD0000000000000000000000000000000000014 +:100CE0000000000000000000000000000000000004 +:100CF00000000000000000000000000000000000F4 +:100D000000000000000000000000000000000000E3 +:100D100000000000000000000000000000000000D3 +:100D200000000000000000000000000000000000C3 +:100D300000000000000000000000000000000000B3 +:100D400000000000000000000000000000000000A3 +:100D50000000000000000000000000000000000093 +:100D60000000000000000000000000000000000083 +:100D70000000000000000000000000000000000073 +:100D80000000000000000000000000000000000063 +:100D90000000000000000000000000000000000053 +:100DA0000000000000000000000000000000000043 +:100DB0000000000000000000000000000000000033 +:100DC0000000000000000000000000000000000023 +:100DD0000000000000000000000000000000000013 +:100DE0000000000000000000000000000000000003 +:100DF00000000000000000000000000000000000F3 +:100E000000000000000000000000000000000000E2 +:100E100000000000000000000000000000000000D2 +:100E200000000000000000000000000000000000C2 +:100E300000000000000000000000000000000000B2 +:100E400000000000000000000000000000000000A2 +:100E50000000000000000000000000000000000092 +:100E60000000000000000000000000000000000082 +:100E70000000000000000000000000000000000072 +:100E80000000000000000000000000000000000062 +:100E90000000000000000000000000000000000052 +:100EA0000000000000000000000000000000000042 +:100EB0000000000000000000000000000000000032 +:100EC0000000000000000000000000000000000022 +:100ED0000000000000000000000000000000000012 +:100EE0000000000000000000000000000000000002 +:100EF00000000000000000000000000000000000F2 +:100F000000000000000000000000000000000000E1 +:100F100000000000000000000000000000000000D1 +:100F200000000000000000000000000000000000C1 +:100F300000000000000000000000000000000000B1 +:100F400000000000000000000000000000000000A1 +:100F50000000000000000000000000000000000091 +:100F60000000000000000000000000000000000081 +:100F70000000000000000000000000000000000071 +:100F80000000000000000000000000000000000061 +:100F90000000000000000000000000000000000051 +:100FA0000000000000000000000000000000000041 +:100FB0000000000000000000000000000000000031 +:100FC0000000000000000000000000000000000021 +:100FD0000000000000000000000000000000000011 +:100FE0000000000000000000000000000000000001 +:100FF00000000000000000000000000000000000F1 +:1010000000000000000000000000000000000000E0 +:1010100000000000000000000000000000000000D0 +:1010200000000000000000000000000000000000C0 +:1010300000000000000000000000000000000000B0 +:1010400000000000000000000000000000000000A0 +:101050000000000000000000000000000000000090 +:101060000000000000000000000000000000000080 +:101070000000000000000000000000000000000070 +:101080000000000000000000000000000000000060 +:101090000000000000000000000000000000000050 +:1010A0000000000000000000000000000000000040 +:1010B0000000000000000000000000000000000030 +:1010C0000000000000000000000000000000000020 +:1010D0000000000000000000000000000000000010 +:1010E0000000000000000000000000000000000000 +:1010F00000000000000000000000000000000000F0 +:1011000000000000000000000000000000000000DF +:1011100000000000000000000000000000000000CF +:1011200000000000000000000000000000000000BF +:1011300000000000000000000000000000000000AF +:10114000000000000000000000000000000000009F +:10115000000000000000000000000000000000008F +:10116000000000000000000000000000000000007F +:10117000000000000000000000000000000000006F +:10118000000000000000000000000000000000005F +:10119000000000000000000000000000000000004F +:1011A000000000000000000000000000000000003F +:1011B000000000000000000000000000000000002F :1011C000000000000000000000000000000000001F :1011D000000000000000000000000000000000000F :1011E00000000000000000000000000000000000FF :1011F00000000000000000000000000000000000EF -:1012000000000000000200000000000000000000DC -:1012100008000000000000000000000000000000C6 +:1012000000000000000000000000000000000000DE +:1012100000000000000000000000000000000000CE :1012200000000000000000000000000000000000BE :1012300000000000000000000000000000000000AE -:10124000000000000000000000000000000200009C -:101250000000000000000000080000000000000086 +:10124000000000000000000000000000000000009E +:10125000000000000000000000000000000000008E :10126000000000000000000000000000000000007E :10127000000000000000000000000000000000006E :10128000000000000000000000000000000000005E :10129000000000000000000000000000000000004E -:1012A00000000001004440000000000000000000B9 +:1012A000000000000000000000000000000000003E :1012B000000000000000000000000000000000002E :1012C000000000000000000000000000000000001E :1012D000000000000000000000000000000000000E -:1012E00000000000000000000000010000040000F9 +:1012E00000000000000000000000000000000000FE :1012F00000000000000000000000000000000000EE :1013000000000000000000000000000000000000DD :1013100000000000000000000000000000000000CD :1013200000000000000000000000000000000000BD -:10133000000000404A0000000002000168800081B7 -:10134000C968A00C000400030000C0C200000C49E2 -:101350008E000C38000000800C01003828178E0029 -:10136000FF08E0E3E0DC040700A000000008000143 -:101370003001008000020100020000020000800233 -:10138000000080000001000080000000000040001C -:10139000000000000000000400000018608C26031C -:1013A0008021100000000000010000019090240046 -:1013B00020208012F002A0824000000002020204FD -:1013C0002AAC156401C051040000120800000A8212 -:1013D00048200000002802A080000000081410002F -:1013E0008010028456080000050082AAC8AC800064 -:1013F0000A8058006E0080C1206284CA80132000D9 -:10140000840108000000000040400811000802109C -:10141000440200082200000000800000000A400092 -:1014200000144068FE1455401400000080000000C5 -:101430000003500A00001100000A0000200C529521 -:1014400015450140200280280500500280504500CB -:10145000500A08A002C0612A6081C0211308C5009B -:1014600012C4821C1556800CB000000124121040DA -:101470004000089021820202020020400020000863 -:1014800004000400820080A01504008851CC0010E4 -:10149000002322C078120000C8832808423020822E -:1014A00000B6D52C5602B1D00000000000080000A4 -:1014B00040211400440000010201CC0C0800010886 -:1014C000000C21A104000020B00A02803188040829 -:1014D0000400CD0082A824003E30A4886BE1066C95 -:1014E00001002287080001B8A84A78370B8282A140 -:1014F00014E4011000124000000000000000000091 -:101500000002820800903C000000F20E3040C92426 -:101510005086B5723348021C1DB00A09311858D8DC -:10152000D101CACE2D31A5D05C9E13C0816C02E2E0 -:101530000034583420411023FAE8004B1BB60D410B -:10154000235328B34B0B5306001126EC2B5009589C -:10155000C8CA1269C4E5D1169804ED80500009800C -:101560000FDB04C2100410D2EA32430A2D42CB34FE -:1015700026B600888AF93130709F4B3072C74B43D2 -:101580000908962B3913CCF6E34354637234068072 -:101590009273DA50035239B28F6AA019A81E000064 -:1015A00028492B90801C0D8835B4CAA5614954493F -:1015B00010001E4AAE010114702C0D39831CA29A32 -:1015C00098D61A2B18435B60A1AC692325518698E5 -:1015D000319FA46D6D07594B63802E58E14F0FFE6C -:1015E00008BB2251C0E0532FB684C191ADFC355EDB -:1015F000262B09A8E1C3F0BC931AC201FEE097C0F4 -:1016000046B6310B43A081F3D874D631C1CF5660B2 -:101610005BB4260124000300811C04024000040B7B -:1016200012604C24098000000004001480020200B3 -:10163000500000B00008900808100000000250623E -:10164000880002C0084100000144000004110009A4 -:10165000100001000A00000290001C1F00020000A0 -:1016600031005C404002980000510218044004150B -:101670008B100038D403101008050213C8B40C8274 -:101680000020080AB0A0081006052008906000009D -:10169000980000000B9C0071D4D40300044888001B -:1016A00089446A243C28401922714849C112220207 -:1016B000C0A203102003109B81AE2008888244043E -:1016C000000000019C80E6F01335806E00A3A03579 -:1016D000D827C4002A30000000081DF2024633FD5E -:1016E0002C90472C958E00D041ECB40603080034B2 -:1016F00002302802041414CCE07283001ACC0EA02D -:10170000C101C084AC814924000FA3F23A4009D240 -:10171000210042B4024104327E0A4A000550000012 -:101720000000001004240201100260104441102047 -:10173000040C4000028008200081200D40100008A9 -:101740000100200094AA00018150112800140814FF -:10175000A44002002210C3C0140A020D8170C441CB -:10176000413C3282E1C0003C00000880020110824E -:101770000482100046040002401000180002408459 -:10178000800500A02800294590206B48000011002A -:1017900004420000D40000081102544000A42810A4 -:1017A000004C000480100000002104040102EC043D -:1017B000000520800154420000E6820001022C4313 -:1017C000818C12000001005000040000001288000B -:1017D0000280A900020D2908000100110010021D5D -:1017E000454039800400200A00A04008002014026F -:1017F000AA2CE201000020EC382C04400304002055 -:1018000000200200B000A4001434014011408060A8 -:10181000A0C20000AC0010008881800068FB22009C -:1018200003EA0000081512002280108012000A024C -:10183000000000110089404540200048002200209F -:101840005150020081E2D203340040000040000009 -:10185000200002802A680023800000000009424026 -:1018600009400000A80009010537D20AB800550850 -:1018700080042A0000245090090008208200884239 -:10188000800001001411000008000100480102005E -:1018900000150800118904012008002A0000001525 -:1018A0004045240000000004080045005A1502616C -:1018B000414901490049000000400000001080003B -:1018C0000010080220980010052CB04A0022950054 -:1018D000120E002108BC8085AC273D27A1CE8630A2 -:1018E00024CC03C000110403E0210C28C5208E0C79 -:1018F0008742D20C1A260745050690EBF427110201 -:101900006C0150012C0020152142472892A30C990C -:10191000F73A810093319F50A8120933C9F502812B -:10192000242A8A210E088A906F90A208142C05544C -:10193000101508A54C00648003E022B005400200A9 -:10194000005010D44097AF010AC4004127EC4198E1 -:1019500000000E644020F8D79A0385417820424069 -:10196000206408128000A02000114A208808AB42A1 -:10197000400090002150800022015000A000200073 -:1019800040A00244141200FF0E0D00207C07F03C22 -:1019900068068071C53001FC0080080C3084044A60 -:1019A000A900204004011120140005024000000499 -:1019B0001C00082895069840803430000300051864 -:1019C000000140500A00A00A014014000028000055 -:1019D0004A6380001803140880080A810000FBFD98 -:1019E00038018805F00000BFFA3E9FCF03F000D415 -:1019F00002FF00010FBD001E9C00602089025E00F6 -:101A0000A4003500042006842068D046851428C32D -:101A100042811A14142823428234210A10850804B2 -:101A2000D18A10A06844468D046842142028D02929 -:101A3000A1028D0D34D0D1A0084D046848D1A02159 -:101A40000811A123428A3421A1441A1411A34D1A6A -:101A500010D0A0084210A143421234282342028D24 -:101A60000428514284142821428A1420A140D084A1 -:101A7000051A008420D084D085284200A103468422 -:101A8000346823468A34608844C2BD24A942CD0309 -:101A90004E7C310B0416C5B31090409E4F22148724 -:101AA000600080CC01212D50010C3189B4C194001B -:101AB000BD01C1C00204097C000C8C00501500055A -:101AC0001527D1032DB000540F303FFC0000F0006B -:101AD000005AB00660000000000080000000000016 +:1013300000000000000000000000000000000000AD +:10134000000000000000000000000000000000009D +:10135000000000000000000000000000000000008D +:10136000000000000000000000000000000000007D +:10137000000000000000000000000000000000006D +:10138000000000000000000000000000000000005D +:10139000000000000000000000000000000000004D +:1013A000000000000000000000000000000000003D +:1013B000000000000000000000000000000000002D +:1013C000000000000000000000000000000000001D +:1013D000000000000000000000000000000000000D +:1013E00000000000000000000000000000000000FD +:1013F00000000000000000000000000000000000ED +:1014000000000000000000000000000000000000DC +:1014100000000000000000000000000000000000CC +:1014200000000000000000000000000000000000BC +:1014300000000000000000000000000000000000AC +:10144000000000000000000000000000000000009C +:10145000000000000000000000000000000000008C +:10146000000000000000000000000000000000007C +:10147000000000000000000000000000000000006C +:10148000000000000000000000000000000000005C +:10149000000000000000000000000000000000004C +:1014A000000000000000000000000000000000003C +:1014B000000000000000000000000000000000002C +:1014C000000000000000000000000000000000001C +:1014D000000000000000000000000000000000000C +:1014E00000000000000000000000000000000000FC +:1014F00000000000000000000000000000000000EC +:1015000000000000000000000000000000000000DB +:1015100000000000000000000000000000000000CB +:1015200000000000000000000000000000000000BB +:1015300000000000000000000000000000000000AB +:10154000000000000000000000000000000000009B +:10155000000000000000000000000000000000008B +:10156000000000000000000000000000000000007B +:10157000000000000000000000000000000000006B +:10158000000000000000000000000000000000005B +:10159000000000000000000000000000000000004B +:1015A000000000000000000000000000000000003B +:1015B000000000000000000000000000000000002B +:1015C000000000000000000000000000000000001B +:1015D000000000000000000000000000000000000B +:1015E00000000000000000000000000000000000FB +:1015F00000000000000000000000000000000000EB +:1016000000000000000000000000000000000000DA +:1016100000000000000000000000000000000000CA +:1016200000000000000000000000000000000000BA +:1016300000000000000000000000000000000000AA +:10164000000000000000000000000000000000009A +:10165000000000000000000000000000000000008A +:10166000000000000000000000000000000000007A +:10167000000000000000000000000000000000006A +:10168000000000000000000000000000000000005A +:10169000000000000000000000000000000000004A +:1016A000000000000000000000000000000000003A +:1016B000000000000000000000000000000000002A +:1016C000000000000000000000000000000000001A +:1016D000000000000000000000000000000000000A +:1016E00000000000000000000000000000000000FA +:1016F00000000000000000000000000000000000EA +:1017000000000000000000000000000000000000D9 +:1017100000000000000000000000000000000000C9 +:1017200000000000000000000000000000000000B9 +:1017300000000000000000000000000000000000A9 +:101740000000000000000000000000000000000099 +:101750000000000000000000000000000000000089 +:101760000000000000000000000000000000000079 +:101770000000000000000000000000000000000069 +:101780000000000000000000000000000000000059 +:101790000000000000000000000000000000000049 +:1017A0000000000000000000000000000000000039 +:1017B0000000000000000000000000000000000029 +:1017C0000000000000000000000000000000000019 +:1017D0000000000000000000000000000000000009 +:1017E00000000000000000000000000000000000F9 +:1017F00000000000000000000000000000000000E9 +:1018000000000000000000000000000000000000D8 +:1018100000000000000000000000000000000000C8 +:1018200000000000000000000000000000000000B8 +:1018300000000000000000000000000000000000A8 +:101840000000000000000000000000000000000098 +:101850000000000000000000000000000000000088 +:101860000000000000000000000000000000000078 +:101870000000000000000000000000000000000068 +:101880000000000000000000000000000000000058 +:101890000000000000000000000000000000000048 +:1018A0000000000000000000000000000000000038 +:1018B0000000000000000000000000000000000028 +:1018C0000000000000000000000000000000000018 +:1018D0000000000000000000000000000000000008 +:1018E00000000000000000000000000000000000F8 +:1018F00000000000000000000000000000000000E8 +:1019000000000000000000000000000000000000D7 +:1019100000000000000000000000000000000000C7 +:1019200000000000000000000000000000000000B7 +:1019300000000000000000000000000000000000A7 +:101940000000000000000000000000000000000097 +:101950000000000000000000000000000000000087 +:101960000000000000000000000000000000000077 +:101970000000000000000000000000000000000067 +:101980000000000000000000000000000000000057 +:101990000000000000000000000000000000000047 +:1019A0000000000000000000000000000000000037 +:1019B0000000000000000000000000000000000027 +:1019C0000000000000000000000000000000000017 +:1019D0000000000000000000000000000000000007 +:1019E00000000000000000000000000000000000F7 +:1019F00000000000000000000000000000000000E7 +:101A000000000000000000000000000000000000D6 +:101A100000000000000000000000000000000000C6 +:101A200000000000000000000000000000000000B6 +:101A300000000000000000000000000000000000A6 +:101A40000000000000000000000000000000000096 +:101A50000000000000000000000000000000000086 +:101A60000000000000000000000000000000000076 +:101A70000000000000000000000000000000000066 +:101A80000000000000000000000000000000000056 +:101A90000000000000000000000000000000000046 +:101AA0000000000000000000000000000000000036 +:101AB0000000000000000000000000000000000026 +:101AC0000000000000000000000000000000000016 +:101AD0000000000000000000000000000000000006 :101AE00000000000000000000000000000000000F6 :101AF00000000000000000000000000000000000E6 :101B000000000000000000000000000000000000D5 :101B100000000000000000000000000000000000C5 -:101B200000000000000000000002000000000000B3 -:101B3000000000000800000000000000000000009D +:101B200000000000000000000000000000000000B5 +:101B300000000000000000000000000000000000A5 :101B40000000000000000000000000000000000095 :101B50000000000000000000000000000000000085 :101B60000000000000000000000000000000000075 -:101B7000000200000000000000000000080000005B +:101B70000000000000000000000000000000000065 :101B80000000000000000000000000000000000055 :101B90000000000000000000000000000000000045 :101BA0000000000000000000000000000000000035 :101BB0000000000000000000000000000000000025 -:101BC000000000000000003000202003000000158D -:101BD000140545415150545400000000000000001D +:101BC0000000000000000000000000000000000015 +:101BD0000000000000000000000000000000000005 :101BE00000000000000000000000000000000000F5 :101BF00000000000000000000000000000000000E5 -:101C0000000000000000000000000000000008804C -:101C100000020000000000000000000000000000C2 +:101C000000000000000000000000000000000000D4 +:101C100000000000000000000000000000000000C4 :101C200000000000000000000000000000000000B4 :101C300000000000000000000000000000000000A4 :101C40000000000000000000000000000000000094 -:101C500000000000000000C08088005044860200A0 -:101C6000028010A390000410000088630001C0816E -:101C7000001450C01C00AA44088A139246A72233BD -:101C800004142122000218C000304000020008A8FD -:101C900090BAFC02CA05940C891328041822023059 -:101CA000488C123044700012040091C0D4BCA49A35 -:101CB0000B044C220074206110232705308255C488 -:101CC000888020C844591050880411086781285022 -:101CD00054140F7532B88264B028484100001404CF -:101CE0008000815024112089420440023CC11A0422 -:101CF00000079043401004081E40028000002408A2 -:101D0000390030402001E43470000002404192412B -:101D100010111802090208022880200204200A017A -:101D200000545880040108820080020000800432C0 -:101D3000C00100088800400040445800858000042D -:101D40000D108012002000864039C8002002F244A5 -:101D50008AAE280008000086E800340000008001F8 -:101D60003908568403450800A0500800A00A014025 -:101D70000A00201401400002802C11041044410C80 -:101D800080C00463E1149E0112080CD010E0E04012 -:101D9000280001460D83CED489012A0988424033A8 -:101DA0001005A829920A4022C05C10821802051072 -:101DB00010FC7010101B4D89BB100A60EA511359BA -:101DC00040F500D0C0098218018C02200488896087 -:101DD0000002004240009061081C7A40028090900E -:101DE000030E11A24258A3910451002966C40002B7 -:101DF000414082210408080822440C867038B8004B -:101E0000A8E259485B502092CD2941AD2018A11F6E -:101E10008E02404210802C200002000000000000D2 -:101E200000000000000010400840002600A300044D -:101E300050F21611240408904C5450102641803062 -:101E400010C4A4072102044156405A84A10004088A -:101E50000AB643AB5C489800A4031E002A10CA0AC5 -:101E600004C802061291B4440200C18832821130C3 -:101E70009481008C4330A1826800A63B2008064272 -:101E80008000481210004E21E012600228092C4008 -:101E9000D2506CC00B1903428042C240007CD50076 -:101EA0000044D5920028B89208208C22A019E0B8EE -:101EB0002210800CC89286EC2894020D4A28826079 -:101EC00038C0B639D1894943E07017CA0C5B050B9D -:101ED0001008D807D72AA0810160EA2094D03210D8 -:101EE0004CA24034A071252CA288C5930A14820C00 -:101EF00000264B20006444131708C7C91860D0009F -:101F00001BF0000003CA323F283D12010F0F5EF0A4 -:101F100047144A0518118685B002089AE8203188CE -:101F20001FC10370011A3E09493C420C6093292EDF -:101F30003A47280007048520003C8091434090499F -:101F4000830C0FC40900D000A059298348210385C0 -:101F50001824B41685040922957440C328AB821056 -:101F6000D027844CB4142480FF106650001B082036 -:101F70000080001914229935800EA0406400C0141E -:101F8000100200F170405000401029080602D0B045 -:101F9000219A08C3010342A300B4EC04714818233A -:101FA000626061322C194119420D0C14B3199AC5A3 -:101FB0002C1052102C6B26AD4C75A32C24264435C6 -:101FC00009C4432170A0814805C48012010800069D -:101FD000882945412540D82480C00C040A50C007F8 -:101FE00014400A081001013020C0D14F208CC79145 -:101FF000B15848D28218730D8481D31CE9A4045EC1 -:1020000044B9D04014A51A0B5840D19328B081038D -:10201000143380C1D38C14C17302A9000903B968B9 -:10202000448202814D1410C1B838DB39FC40840071 -:10203000099434A81E5404DDA029005EA30EEEC04E -:10204000216200880419010108A920885000480075 -:102050000802000248880800202B082020C82428F5 -:102060000021080EFC50000004B219840603800D04 -:102070003405C613180A10011868859300000A5128 -:10208000A31C04820118A202B250111802C80180D8 -:10209000048082242C00000E00050630A01806B033 -:1020A00023404900A00D000040198848E7420288FB -:1020B0000304020600682160801802299209047155 -:1020C0008410000026030A10408000800034410183 -:1020D0001100CCB8B235006C8A2EC3D4A47E18018E -:1020E0000986D842B16C014010000A0883500C6781 -:1020F0003902434040320000291010A30283028CB1 -:1021000080C5011128092063282476B40443800087 -:102110002027C090100001059090C2200901004CBA -:102120004004D0A04C20A33030821C0182F081B347 -:102130000088C2010000D0AC200D1B8020400C3074 -:10214000080B206200600000085A431C280412A0FB -:102150001C60154001E8811FA20614495919A1000D -:10216000E4900C78000E1085039A722E2819B004A2 -:1021700030000003C02058A1204A48072000848076 -:10218000000830C0C71000042C0024000877031595 -:102190004C812600C5040801010030010008000040 -:1021A000A1E540847D08B00100004020004C0502FC -:1021B000080C700A8022D6040782148107208060F0 -:1021C0000104424000002002200200800B00404039 -:1021D0004A1008018408200838083100910D3A019E -:1021E000C39C89C400008C4743F9FC520C0BE208E5 -:1021F0008001ADE8125201E94A7A7247BCD88008E2 -:10220000400108005A00D0023830004481D7F85904 -:10221000E621010E61421DEC628303E888D8F200DA -:102220001414E618120FF803CC5896FF1C88030705 -:102230002100802604041E4F2082608441E432087D -:102240000608701E484055044042D00200486024F1 -:1022500000928011E168800881143308E2F04C009C -:1022600070222840C5011298685F3B18BF026023A6 -:10227000A07080510E540D77C2FB14B92233D207DF -:10228000C27105FC08030106056600401492501255 -:10229000EC040151260001800E8001128000888824 -:1022A0004121000080208080118102000002401046 -:1022B00000000000800E00014C200000062001807C -:1022C000004500A00000880803024A4008080014E6 -:1022D000802A0003A04E6401B10019C010C086140A -:1022E00018244082420010008008010010010020E4 -:1022F000400011020A070008404300088000000067 -:1023000080C00000014B4008029400000000200043 -:102310000000A5A004000E00000050000075102869 -:1023200083CC9FA0091000820002040000408004BA -:1023300008204082040010202040020400204010A9 -:1023400000080000810001004004040800408020D3 -:1023500000408041000408082080810000080040FF -:10236000008100001001000204002041020410203E -:10237000010208102081000000010202002020401C -:1023800002040408004082040820400204002041A6 -:102390000204800008100000008000800800000196 -:1023A000001204002040020400204088049A672F95 -:1023B00092CEA071CCB0D4E610A1884D4143081B49 -:1023C0000804028221801F4C0A40082281E4025E38 -:1023D000E0CC97015500C0C000000D40000ECC00BD -:1023E00030000000501115413D401EBC0F203FFC45 -:1023F0000000F00000102000004000000000780005 +:101C50000000000000000000000000000000000084 +:101C60000000000000000000000000000000000074 +:101C70000000000000000000000000000000000064 +:101C80000000000000000000000000000000000054 +:101C90000000000000000000000000000000000044 +:101CA0000000000000000000000000000000000034 +:101CB0000000000000000000000000000000000024 +:101CC0000000000000000000000000000000000014 +:101CD0000000000000000000000000000000000004 +:101CE00000000000000000000000000000000000F4 +:101CF00000000000000000000000000000000000E4 +:101D000000000000000000000000000000000000D3 +:101D100000000000000000000000000000000000C3 +:101D200000000000000000000000000000000000B3 +:101D300000000000000000000000000000000000A3 +:101D40000000000000000000000000000000000093 +:101D50000000000000000000000000000000000083 +:101D60000000000000000000000000000000000073 +:101D70000000000000000000000000000000000063 +:101D80000000000000000000000000000000000053 +:101D90000000000000000000000000000000000043 +:101DA0000000000000000000000000000000000033 +:101DB0000000000000000000000000000000000023 +:101DC0000000000000000000000000000000000013 +:101DD0000000000000000000000000000000000003 +:101DE00000000000000000000000000000000000F3 +:101DF00000000000000000000000000000000000E3 +:101E000000000000000000000000000000000000D2 +:101E100000000000000000000000000000000000C2 +:101E200000000000000000000000000000000000B2 +:101E300000000000000000000000000000000000A2 +:101E40000000000000000000000000000000000092 +:101E50000000000000000000000000000000000082 +:101E60000000000000000000000000000000000072 +:101E70000000000000000000000000000000000062 +:101E80000000000000000000000000000000000052 +:101E90000000000000000000000000000000000042 +:101EA0000000000000000000000000000000000032 +:101EB0000000000000000000000000000000000022 +:101EC0000000000000000000000000000000000012 +:101ED0000000000000000000000000000000000002 +:101EE00000000000000000000000000000000000F2 +:101EF00000000000000000000000000000000000E2 +:101F000000000000000000000000000000000000D1 +:101F100000000000000000000000000000000000C1 +:101F200000000000000000000000000000000000B1 +:101F300000000000000000000000000000000000A1 +:101F40000000000000000000000000000000000091 +:101F50000000000000000000000000000000000081 +:101F60000000000000000000000000000000000071 +:101F70000000000000000000000000000000000061 +:101F80000000000000000000000000000000000051 +:101F90000000000000000000000000000000000041 +:101FA0000000000000000000000000000000000031 +:101FB0000000000000000000000000000000000021 +:101FC0000000000000000000000000000000000011 +:101FD0000000000000000000000000000000000001 +:101FE00000000000000000000000000000000000F1 +:101FF00000000000000000000000000000000000E1 +:1020000000000000000000000000000000000000D0 +:1020100000000000000000000000000000000000C0 +:1020200000000000000000000000000000000000B0 +:1020300000000000000000000000000000000000A0 +:102040000000000000000000000000000000000090 +:102050000000000000000000000000000000000080 +:102060000000000000000000000000000000000070 +:102070000000000000000000000000000000000060 +:102080000000000000000000000000000000000050 +:102090000000000000000000000000000000000040 +:1020A0000000000000000000000000000000000030 +:1020B0000000000000000000000000000000000020 +:1020C0000000000000000000000000000000000010 +:1020D0000000000000000000000000000000000000 +:1020E00000000000000000000000000000000000F0 +:1020F00000000000000000000000000000000000E0 +:1021000000000000000000000000000000000000CF +:1021100000000000000000000000000000000000BF +:1021200000000000000000000000000000000000AF +:10213000000000000000000000000000000000009F +:10214000000000000000000000000000000000008F +:10215000000000000000000000000000000000007F +:10216000000000000000000000000000000000006F +:10217000000000000000000000000000000000005F +:10218000000000000000000000000000000000004F +:10219000000000000000000000000000000000003F +:1021A000000000000000000000000000000000002F +:1021B000000000000000000000000000000000001F +:1021C000000000000000000000000000000000000F +:1021D00000000000000000000000000000000000FF +:1021E00000000000000000000000000000000000EF +:1021F00000000000000000000000000000000000DF +:1022000000000000000000000000000000000000CE +:1022100000000000000000000000000000000000BE +:1022200000000000000000000000000000000000AE +:10223000000000000000000000000000000000009E +:10224000000000000000000000000000000000008E +:10225000000000000000000000000000000000007E +:10226000000000000000000000000000000000006E +:10227000000000000000000000000000000000005E +:10228000000000000000000000000000000000004E +:10229000000000000000000000000000000000003E +:1022A000000000000000000000000000000000002E +:1022B000000000000000000000000000000000001E +:1022C000000000000000000000000000000000000E +:1022D00000000000000000000000000000000000FE +:1022E00000000000000000000000000000000000EE +:1022F00000000000000000000000000000000000DE +:1023000000000000000000000000000000000000CD +:1023100000000000000000000000000000000000BD +:1023200000000000000000000000000000000000AD +:10233000000000000000000000000000000000009D +:10234000000000000000000000000000000000008D +:10235000000000000000000000000000000000007D +:10236000000000000000000000000000000000006D +:10237000000000000000000000000000000000005D +:10238000000000000000000000000000000000004D +:10239000000000000000000000000000000000003D +:1023A000000000000000000000000000000000002D +:1023B000000000000000000000000000000000001D +:1023C000000000000000000000000000000000000D +:1023D00000000000000000000000000000000000FD +:1023E00000000000000000000000000000000000ED +:1023F00000000000000000000000000000000000DD :1024000000000000000000000000000000000000CC :1024100000000000000000000000000000000000BC :1024200000000000000000000000000000000000AC :10243000000000000000000000000000000000009C -:10244000000000000000000000000000000200008A -:1024500000000000000000100280000000000000EA +:10244000000000000000000000000000000000008C +:10245000000000000000000000000000000000007C :10246000000000000000000000000000000000006C :10247000000000000000000000000000000000005C :10248000000000000000000000000000000000004C -:10249000000000000002000000000000000000102A -:1024A00002800000000000000000000000000000AA +:10249000000000000000000000000000000000003C +:1024A000000000000000000000000000000000002C :1024B000000000000000000000000000000000001C :1024C000000000000000000000000000000000000C :1024D00000000000000000000000000000000000FC -:1024E00000000000000000000000000800000000E4 -:1024F00080000026640999926664999900000000A2 +:1024E00000000000000000000000000000000000EC +:1024F00000000000000000000000000000000000DC :1025000000000000000000000000000000000000CB :1025100000000000000000000000000000000000BB :1025200000000000000000000000000000000000AB -:10253000000010000000000000000000000000008B +:10253000000000000000000000000000000000009B :10254000000000000000000000000000000000008B :10255000000000000000000000000000000000007B :10256000000000000000000000000000000000006B -:1025700000000000000000000000007E00000305D5 -:10258000E8DEBB16068AD5A2EC008316150E0C15E4 -:10259000E154F0E25504168AF7406140880630EEB7 -:1025A0000001D04384101012000F7570007C600091 -:1025B0002E000A00701DB4453A019F4881033EA0D9 -:1025C0001208041D4007501D44115102848480915B -:1025D000A484800402420200002420100001210F84 -:1025E000080091808841008ACC08800C101C70394A -:1025F000C300EDF03E0081461A1301310000108047 -:1026000040000005880289106EB835C50C0051CD18 -:102610003C2C4A291DC7E0914E68B9621E80C05308 -:10262000A35FC8549F04F484DAC3D81C2F692180A7 -:10263000081072EB88B8A2311B8712A0457844B30A -:102640003E728738A11764210337598EF7B35EB401 -:10265000EA161A7FCE6AD293549AB529ABC2C592B4 -:102660008C585B5D0130088841E0088D6A33594819 -:102670000810AAC8A9461D1E8B32125E846DC02D9B -:10268000B6C027D3D6945ADA3DD5CB0F1056086082 -:10269000AC04C1460AC0AC14C1582602807D62B1A8 -:1026A000ECBC952579CEA7D14B44935111468A10A5 -:1026B00002B8C0652416B3424EF2A8B083E8176E84 -:1026C000468BA15964695018A587E2708E94788072 -:1026D00018F4822C90532CA7EF04D2C0A7C0113C51 -:1026E00016AC1BCE883E4032F8BFE33E86803532C2 -:1026F00042989BED0D00C1E782AC00811529E08472 -:1027000004E1EF889C0A0180027822089838991227 -:10271000E08126124A58113328D8801C01556414D0 -:1027200042136009161077702B6F08270290012062 -:1027300014202034160D49612B80C051000A00007E -:10274000000000000000000000001050B9482526DD -:102750008B0A025AA4148A2A54C5E98216F4461A2E -:10276000015C0150B2587CA9F60850016151A37078 -:1027700011212C884491B32AD0C35E031B8EE2D171 -:102780007A340883182B0EEA125B0C16FF025B0BDF -:10279000823216080FBA28D2C85DF2DEB46C20303F -:1027A000AB832D2004BC499E0E7BCE8181D518BF02 -:1027B000C01A214E3EF2C16C44B01E9108715157AF -:1027C000346E5817360E5850B094AFD524AD02CDA4 -:1027D000D2F6108BCC257B461581321015AD37090A -:1027E00044D6D27E54FE943D1C4B2653C0907EF5B9 -:1027F00025854FF9618A04F0AD22BCC7794117E401 -:1028000022AA1E42C16FE26998961F016F8A584141 -:10281000DE345FA10C39445791A56C6969225A4B8B -:102820008B72392416B11A068355C129207F65079A -:10283000E3CF5DC02D6812352CFB4E3E026B48ABDA -:10284000681CA80435822A9C25B53E0EC697325DC9 -:10285000A454632EB4CD83C32EEC8EE62328877256 -:1028600041D5908B6A35E500F743A10003D4245588 -:102870000AA12184345514128AC5D550E724B542E3 -:102880002A800EDAE354C451252B55446320BDF44D -:102890005220153142CC71CA20289A3C14CAC091EA -:1028A0000254DA0330C509B12199C418AC24150CBF -:1028B0000631D0C8200206CF88CF507790960A0400 -:1028C000410008202020835A3A1703C2B2893014ED -:1028D0008206B2840C0152D076CA34A902652185E1 -:1028E0000404251D614459110414C94805180351F5 -:1028F0004034040DF01E024426E0FA002448160D70 -:102900000D5022044CCB09209284BA312650492A1A -:102910003DD6CD9120128804A23401050C01911CF2 -:102920004B2A044E4ECCD218C8A40004CD829191FB -:10293000C8D0814D2D02C18C8284045421018C8821 -:102940000951B94805000E714E9E2321448AD11DBC -:10295000948C44200208197B2EE1422D820934D543 -:10296000D5355DC57062E6B882740523426363AAFB -:102970002014EA1A94050143F938380D3C060F3E3D -:10298000B19230E8C5300E8849F2000055CC07F10D -:102990004B12F31C7440B12ED4470980DFEC4B83FB -:1029A00004F8CBF3727A3CC6F91022C182F171505F -:1029B00030CE13BB04AA011030B59E34B2CDFF4215 -:1029C0009B449B3608E4887CF28AEC4DD61459C4AB -:1029D000309356285550113885868034848E541A89 -:1029E00053011C2148008A492E9E0A1A01B7D88D2E -:1029F000012CF3837233BB48D5570A374404C2967F -:102A00005829A000950D2E827C1049F214A445048B -:102A1000A24348D29400A54A44500A681C340630A8 -:102A2000401D818B3C34151A58022BA2182C62844D -:102A300005468441A0A0449C303E6881D22027A056 -:102A4000D4213EDCCBD3B108BC113C2A138BEA6104 -:102A500041E01198081F818FD318BC6A113BBC4814 -:102A6000AA20CD8C133C03F20203A14D10D8C63F1F -:102A7000904AA5F1993C35F204CA8C957308DC2E76 -:102A8000D20D010BA2B2E148742419990E85934925 -:102A9000DCB11208A10932224B00F8F70D984092E0 -:102AA000C21604FFC70CFA0E05D34B082CFE0CC44B -:102AB0008D1DE0059C7326393F0540A0AAC4579799 -:102AC00039770A9AE0B54858862B464723421AC8F8 -:102AD000C7D10A9D0994526D68C0E725C5C30CA1F2 -:102AE0001840016113108C030150A0DAE5353A85D6 -:102AF0004AD0810096D110EC4828C028C028C22AAC -:102B0000808C0E0292C82DC518010C67629D480F7B -:102B1000020AE001A02011A4B440096305525096B6 -:102B200028F2400A418105820660D6AA2A1800458B -:102B3000C1339866B23B054951002128B2492AD9D0 -:102B4000092A828410B6012A1A85992269A4E959B2 -:102B500026808289212454C50000410098A0500895 -:102B60000413098A050080413043DC0C0942B0217E -:102B700060300A2C00A280158113A4981B3CDD0A4A -:102B8000E4A14C043004080940882288A84B1A2A82 -:102B9000ABC2AA2148E826550A544D76D2AD643E10 -:102BA000D422B281EFD224548A5623444501128B99 -:102BB00034804210510180412E70051C180A4004D7 -:102BC000006810000A0028044E02984011C202005A -:102BD0000007A188000000082B08031108200050FE -:102BE00028200201024100180430BC0C0C023544BC -:102BF000C5EC32300C9D2370504EEA189148EE011E -:102C00005104BC840BE4021E43261C82B02B0540F9 -:102C1000560160AC64C1376E0AB5D00C50C5C03FD8 -:102C2000EC4001F128A8005400720D00037918103F -:102C3000822080030100390080003C8D8005600205 -:102C400080460E1320462180120801550424088472 -:102C500020891048910489004891224444882448DE -:102C6000824481221091080412021220884848915F -:102C7000048902442089108821089101041012243B -:102C800008410488491220212012212448824482CC -:102C9000244822441224412241122408421224448E -:102CA0004242448824480891048910489044892469 -:102CB00048824482244810841122408420108410C9 -:102CC00091084242212048844489244882448088D3 -:102CD00048ECB20435CC10308050D90B0004010D03 -:102CE000A2140010450340048D604C9884282540B0 -:102CF0008100510054903A088942021000444BDC94 -:102D00001017CC00000010DD402877CA4720019042 -:102D1000F0203FFFC000F0000010A0000000000005 -:102D20000000700000000000000000000000000033 +:10257000000000000000000000000000000000005B +:10258000000000000000000000000000000000004B +:10259000000000000000000000000000000000003B +:1025A000000000000000000000000000000000002B +:1025B000000000000000000000000000000000001B +:1025C000000000000000000000000000000000000B +:1025D00000000000000000000000000000000000FB +:1025E00000000000000000000000000000000000EB +:1025F00000000000000000000000000000000000DB +:1026000000000000000000000000000000000000CA +:1026100000000000000000000000000000000000BA +:1026200000000000000000000000000000000000AA +:10263000000000000000000000000000000000009A +:10264000000000000000000000000000000000008A +:10265000000000000000000000000000000000007A +:10266000000000000000000000000000000000006A +:10267000000000000000000000000000000000005A +:10268000000000000000000000000000000000004A +:10269000000000000000000000000000000000003A +:1026A000000000000000000000000000000000002A +:1026B000000000000000000000000000000000001A +:1026C000000000000000000000000000000000000A +:1026D00000000000000000000000000000000000FA +:1026E00000000000000000000000000000000000EA +:1026F00000000000000000000000000000000000DA +:1027000000000000000000000000000000000000C9 +:1027100000000000000000000000000000000000B9 +:1027200000000000000000000000000000000000A9 +:102730000000000000000000000000000000000099 +:102740000000000000000000000000000000000089 +:102750000000000000000000000000000000000079 +:102760000000000000000000000000000000000069 +:102770000000000000000000000000000000000059 +:102780000000000000000000000000000000000049 +:102790000000000000000000000000000000000039 +:1027A0000000000000000000000000000000000029 +:1027B0000000000000000000000000000000000019 +:1027C0000000000000000000000000000000000009 +:1027D00000000000000000000000000000000000F9 +:1027E00000000000000000000000000000000000E9 +:1027F00000000000000000000000000000000000D9 +:1028000000000000000000000000000000000000C8 +:1028100000000000000000000000000000000000B8 +:1028200000000000000000000000000000000000A8 +:102830000000000000000000000000000000000098 +:102840000000000000000000000000000000000088 +:102850000000000000000000000000000000000078 +:102860000000000000000000000000000000000068 +:102870000000000000000000000000000000000058 +:102880000000000000000000000000000000000048 +:102890000000000000000000000000000000000038 +:1028A0000000000000000000000000000000000028 +:1028B0000000000000000000000000000000000018 +:1028C0000000000000000000000000000000000008 +:1028D00000000000000000000000000000000000F8 +:1028E00000000000000000000000000000000000E8 +:1028F00000000000000000000000000000000000D8 +:1029000000000000000000000000000000000000C7 +:1029100000000000000000000000000000000000B7 +:1029200000000000000000000000000000000000A7 +:102930000000000000000000000000000000000097 +:102940000000000000000000000000000000000087 +:102950000000000000000000000000000000000077 +:102960000000000000000000000000000000000067 +:102970000000000000000000000000000000000057 +:102980000000000000000000000000000000000047 +:102990000000000000000000000000000000000037 +:1029A0000000000000000000000000000000000027 +:1029B0000000000000000000000000000000000017 +:1029C0000000000000000000000000000000000007 +:1029D00000000000000000000000000000000000F7 +:1029E00000000000000000000000000000000000E7 +:1029F00000000000000000000000000000000000D7 +:102A000000000000000000000000000000000000C6 +:102A100000000000000000000000000000000000B6 +:102A200000000000000000000000000000000000A6 +:102A30000000000000000000000000000000000096 +:102A40000000000000000000000000000000000086 +:102A50000000000000000000000000000000000076 +:102A60000000000000000000000000000000000066 +:102A70000000000000000000000000000000000056 +:102A80000000000000000000000000000000000046 +:102A90000000000000000000000000000000000036 +:102AA0000000000000000000000000000000000026 +:102AB0000000000000000000000000000000000016 +:102AC0000000000000000000000000000000000006 +:102AD00000000000000000000000000000000000F6 +:102AE00000000000000000000000000000000000E6 +:102AF00000000000000000000000000000000000D6 +:102B000000000000000000000000000000000000C5 +:102B100000000000000000000000000000000000B5 +:102B200000000000000000000000000000000000A5 +:102B30000000000000000000000000000000000095 +:102B40000000000000000000000000000000000085 +:102B50000000000000000000000000000000000075 +:102B60000000000000000000000000000000000065 +:102B70000000000000000000000000000000000055 +:102B80000000000000000000000000000000000045 +:102B90000000000000000000000000000000000035 +:102BA0000000000000000000000000000000000025 +:102BB0000000000000000000000000000000000015 +:102BC0000000000000000000000000000000000005 +:102BD00000000000000000000000000000000000F5 +:102BE00000000000000000000000000000000000E5 +:102BF00000000000000000000000000000000000D5 +:102C000000000000000000000000000000000000C4 +:102C100000000000000000000000000000000000B4 +:102C200000000000000000000000000000000000A4 +:102C30000000000000000000000000000000000094 +:102C40000000000000000000000000000000000084 +:102C50000000000000000000000000000000000074 +:102C60000000000000000000000000000000000064 +:102C70000000000000000000000000000000000054 +:102C80000000000000000000000000000000000044 +:102C90000000000000000000000000000000000034 +:102CA0000000000000000000000000000000000024 +:102CB0000000000000000000000000000000000014 +:102CC0000000000000000000000000000000000004 +:102CD00000000000000000000000000000000000F4 +:102CE00000000000000000000000000000000000E4 +:102CF00000000000000000000000000000000000D4 +:102D000000000000000000000000000000000000C3 +:102D100000000000000000000000000000000000B3 +:102D200000000000000000000000000000000000A3 :102D30000000000000000000000000000000000093 :102D40000000000000000000000000000000000083 :102D50000000000000000000000000000000000073 :102D60000000000000000000000000000000000063 -:102D70000002000000000000000000400800000009 +:102D70000000000000000000000000000000000053 :102D80000000000000000000000000000000000043 :102D90000000000000000000000000000000000033 :102DA0000000000000000000000000000000000023 -:102DB0000000000000000000000200000000000011 -:102DC00000000040080000000000000000000000BB +:102DB0000000000000000000000000000000000013 +:102DC0000000000000000000000000000000000003 :102DD00000000000000000000000000000000000F3 :102DE00000000000000000000000000000000000E3 :102DF00000000000000000000000000000000000D3 -:102E000000000000000000000000000000000010B2 -:102E100000266001000000011004000011104000B5 -:102E200000000000000000000000000000000000A2 -:102E30000000000000000000000000000000000092 -:102E40000000000000000000000000000000000082 -:102E500000000000000009800006000000000000E3 -:102E60000000000000000000000000000000000062 -:102E70000000000000000000000000000000000052 -:102E80000000000000000000000000000000000042 -:102E900000000000000000000000000000000A44E4 -:102EA000002A80D70003000000C0241050008804CE -:102EB00000000080800060400010040292010408BD -:102EC0000D20248000010008000E0202CC00202109 -:102ED0008078A00604000D0001182400D0090040ED -:102EE000002200A002000C01010040010002420883 -:102EF0000200020182985C00004840000004C0000B -:102F000000002602000004A01005021C00000000C2 -:102F100000040038010240A20810041000840600DA -:102F200040080040000000800000024024902480FF -:102F30004882406428E06A080085408143201503E8 -:102F40001500028C800C080419041000410150087F -:102F500050C800C0841992EBC8BCB900EB8211E0E4 -:102F60004400789004008E98821134C2B8118848C9 -:102F70001080824000E40832C004A21040012808FA -:102F8000204458021188908408404040001000EA14 -:102F90007800DD489A021014860808000118100213 -:102FA00000003012000000004290462A008000001D -:102FB000A04008000002008008008010010002020A -:102FC0000520204820910731080D6E72A4C84FE8F3 -:102FD000175E880502680003B61B1442612009547D -:102FE000081002898100C0500000440802004020FF -:102FF000C00C11801002060040404C7809203004BB -:1030000080221D8080AE0C028036C11204CD911941 -:1030100046C83EB04C980800014204004050C07AB7 -:1030200002018C406042DE6CC22634040921C0AC2F -:103030004050C500140002812088459900200C6092 -:10304000308000212A33060C10000C809FC007300E -:103050004A9002CBACE8133B69C8A6200038240094 -:103060003F82001F33DFF0DFEF3DFF8DCBE218849E -:10307000220119480927E23A0CD76D219085A93021 -:10308000B3408CD62DB0C856128C58ECF00397077D -:103090005DB0E544B70C0342CF24032644341F300F -:1030A00000061001526871910DB60D0AC0D9A8B37F -:1030B0004E1189861C62D36CAB4228C60ACA926044 -:1030C00084C9353ED848434280B408A039174FBD63 -:1030D000200260D2813A23022D106B34330902C6DC -:1030E000023D31B0644E9730E5C6976241683E3D7F -:1030F000310780C6E21058C3740002801413845054 -:103100004D503B9B8C4AA002001000245109211114 -:10311000005006E938F4CB8E31999409030006CAB1 -:1031200020031F04A66A0D08CB1EA21A98B11B2308 -:103130001E0A8550A80C61AB09B18ED830D5681A2B -:103140001A02CDC033A08E08C8002C160240014AD6 -:103150002C20732468834E2166A8371926398CAD3C -:10316000C2890023EB39F9C00211D044050E0209CF -:10317000031691279013031851840E4040302410F9 -:10318000301FC009C2E4A400911C04041D80D000BB -:103190006002399382B001840831D532800009C3BE -:1031A000ADA0416129EB80114007009CE00025C1E2 -:1031B000F7000040640F014602440294807511310B -:1031C000700FB0810284D402228C01B5E3420C312D -:1031D000A0307604C0125680388A0A004C0000DB0A -:1031E000FCF00629E140E02344C41E3200620A2AB2 -:1031F00032CD40A5D10A34C4A0D23F8048F225C0C8 -:10320000446172306066C70D1080080361A015909C -:103210002C050E267055E468100AFF404F91E30C10 -:1032200043C006A444E7A07E7442310880862C6027 -:103230007E88774120B105B6404018D02037904DA8 -:10324000DCC2E3D871CC0CDE8BFE33DFF0A08A0247 -:103250001402B7A0801C50180D19088400010098B2 -:10326000352B3E832401EA206DE51EAB0002D248D7 -:103270000C495F17F445360158A090F82830889F14 -:10328000430D0C78A200C2483320CCA0444821153D -:1032900081A0613C1CC059150200880014C8470277 -:1032A0001855C308102000EC20300885751047C061 -:1032B000041B294B071C80848444200425C0002360 -:1032C00000002058000A0001400000100201594F80 -:1032D0006903520C44C801004C01011374A2253A41 -:1032E00046856652EB589CA22EE88301233D54AAE2 -:1032F000D419AB4F01428E000B0C07478438506441 -:10330000801E0A01C7490431ED581A4E2200820A74 -:1033100060080088C52090022100CC4862C10219D3 -:103320008E0E43DC5C20A0009D0301E002800000C3 -:103330000000C80001500000000160005C00183867 -:103340003000000085A292C89000892CF0001FC3B5 -:10335000913873D0080A01A26221002A683CEA0170 -:10336000062005E0DA210329051C43D020E84B04A0 -:10337000730C60C2294013410AA0C440A081407F61 -:103380000805408640828F3440400262820C022948 -:10339000C4A0CF013C403050748064000498003DCC -:1033A00032160008312041069363A7F0F8343952F1 -:1033B00046ADF3030430360C70448A925020118AD3 -:1033C00030288A20E1499C8091140443CCA388448E -:1033D000540F2501023593DFC0B12A28E40C1101F6 -:1033E0002284F98C3DEA0913410408A42010F80353 -:1033F00040006424051E05840800020080C0C60049 -:10340000C18504010760DD501E048240009020D277 -:103410008922408C341239B0EC993810CC0820083D -:1034200030083B0080015300A78093D0008DCE6F01 -:10343000439B2C78F51040841820C480113533C28A -:10344000001C920300957A3F070C09E017AC068038 -:10345000085000C100BB5C68922012040250C07882 -:103460000CA40641C0C5F37F00B18D082000C080C8 -:103470000488820C140C8052803980D5EC325008BC -:103480001AF37E4C678301EBC5ECB2503400102573 -:103490007FC700B01D106161028C0022107E344095 -:1034A0005D04440001E00074300018C8C20372B823 -:1034B000E0011B11FE404003806050191E0F8F6415 -:1034C000E0F12438813BD00948033608104004005D -:1034D00005440001108052001380A9000000000084 -:1034E0000E200C220000147202162EC0C57010406F -:1034F0000C0202CC08070110640000200204807155 -:10350000052001E002000000500000A8000000407B -:1035100003010B080400002000B01002FC4E450916 -:10352000B10284825044101021544060020800040B -:103530000000084084104108410213060220801454 -:1035400010008022C0000001804C30C4212380097B -:103550009240500198261987001091C004CC24286D -:10356000060C40061810800401000821403001AB11 -:1035700021384227232A54336619364F92A1CF9C13 -:10358000993219F2059733CFB464DA25CCCD9CA3D8 -:10359000329073E6293647934322542B9A33A4463C -:1035A00073E3C488CA7D21260E6CA308CCB4D93934 -:1035B000F38B9330E990C8950CF9044D9244A8D24E -:1035C000342CD98993919B2079B232244F26511300 -:1035D000E4913219728F9320C99055E9264C8CA33F -:1035E00003E46865662EB48C8A415368952219728B -:1035F000099F20885001BA08A10C4B328250B85B59 -:103600000E50C43B90A0E4CA8030B00A14107880F9 -:1036100090190035000E9304801068024000C0C06D -:10362000F0000844000E0FFF200000154129054F4F -:10363000ADA018B800000000000000000000A000CD -:103640000400004000000000000000000000000036 -:10365000000000000000000000000000000000006A +:102E000000000000000000000000000000000000C2 +:102E10000000000000000000000000000000046846 +:102E2000410000468411112664499992666499997B +:102E3000044441111044441111044441111044440C +:102E40001111044441111044441111044441111062 +:102E500044441111044441111044441111044441EB +:102E60001110444411111004411010444411110474 +:102E700044411110444411110444411110444411BF +:102E800011044441111044441111044441111044EF +:102E900044111104444111104444111104444111DE +:102EA000104444111104444111104444111102CD45 +:102EB0000001002C009201040380A1C04800D284CC +:102EC0003FED4880B3FF28527F008400A2C145082F +:102ED000810425848123000B8452A212FF0A20233F +:102EE000E0E80087040045A9211924069009168C02 +:102EF00010222D001A24065A0916825A04BC811782 +:102F0000840D1280A42C24211217424480A17492B3 +:102F100024050B8D491002201C08041C88A5109163 +:102F200008142208890240923614D488104445952A +:102F300040004882400000011000A040208204119F +:102F400008004074808449094080409123A41422E1 +:102F50000102030E9004881092049209C380102C81 +:102F600048E90048880922082082363C180090F081 +:102F700044105FE108088A28801114630703DC48C5 +:102F80004210D0405D0629348584B25240612E093A +:102F90002089932219B018D018610A4CC000580536 +:102FA000C01241000AB20018E610084447BE105A89 +:102FB000002030208200010282D4005034008302BD +:102FC000A10620620C10C40624C20C40C4181C08C0 +:102FD0000417E1A0E08FF8310807BE90000C87E0ED +:102FE000104000041020000F6437BC40C03009902E +:102FF00007BC220F46A020402C7801082C4051210C +:1030000097801480102C062FD0424C900120B004E1 +:1030100010401728840208900234C03A0469E11E67 +:1030200000C007200004114002450A06C2A49028EF +:103030009410A400220200000012082400220020A4 +:103040000000010008C602000A08840004000828E5 +:1030500010C600262A102C08C280000848840000F0 +:1030600088005094A8FAD4128D4EA2C1945C0459E1 +:1030700000020000000000000000000000001080BE +:1030800010080204803C0022088100101F0002800A +:1030900000105C00240100F8108C000000001008F3 +:1030A0007400C00430400144C0022028801C041C6D +:1030B000620C980109048B880C80001F02C1A0805B +:1030C0001408C18022E30320A007020C4001200263 +:1030D000A008803A000226C2002C1A9C10E00F299A +:1030E000A1C654050100800000026800239B00195E +:1030F000800000000431DD000445DD03038C68809E +:103100001B00813221414062372C2041A0E0CF409A +:10311000580014C80322200000C00019610A0B6087 +:103120001088150C1CD00007309ED00C59000205E9 +:10313000C000DECCA10000144004401000B3002801 +:103140000485CDD012F0020008000A0000F4EC372C +:103150003731CFC9D0B096F45C241400050050017B +:10316000081D000041033802E6A40009001982F39B +:10317000A2756C934800790453802B44FB9B010D8E +:103180008108A03E5092341725040C43F6180FEB2B +:10319000114BC7F4D3E02080040004005782C01014 +:1031A00043FD00048090E104049B122240C0E6D05D +:1031B0002000B1210A400591339A40B080039B4022 +:1031C00018000B58200C04250000A11BB0080302B6 +:1031D00046CC10010B9C9CA200000385232A0C0006 +:1031E0000030100A8600970828141080460000045A +:1031F000884268172C8952D003808061300508D03E +:10320000801040C5E820D78AA9631794555E05FB56 +:10321000C28573A8DCCCAC1A4E0DEA60A140868F43 +:103220000D614A14D000E400300CD40C2C5110086D +:1032300046C00A004C4142565C002A00000EF2E2F1 +:10324000499C0C5A2840081342B414315B18C5C17C +:103250006AD1BD685D73155E8E4251C2F056661A22 +:103260005B02B6B00710BE7A0B6C473530D66C6681 +:103270009A0CC442AB82935C4DA332574D806338A5 +:10328000985E531C0084F49368ACB08121010894CB +:1032900081ED2052AA124A4041504A10802009D59F +:1032A000026263031004E2181605804090081019AA +:1032B0002846CF7822A03408E014000C6CF00000FF +:1032C000F5BF200B013C33899005080020C0901009 +:1032D000080800230408024140560042002A138FC8 +:1032E000535226080C942980083D01003081313862 +:1032F00062046052C20481802842C075802FC47865 +:103300009C013B4EB1E0DAE8C98135200456C00883 +:103310008480C91B3500145071488A82089F00447C +:103320000237D821522843818F7144400004028023 +:103330000C0442000821A0001D0B024104809800EB +:103340000109808100999010842BB040053208005B +:10335000150C16760207010C68E54433420080F232 +:10336000C364A941081C05604030CC28F0004141ED +:10337000000062200D01005905240062A0654A008A +:103380001003A00307E02340200080C1108000F05C +:103390002820100000829E2865490AF0831C5000F6 +:1033A000087BC20D60003010B000C6020190013FE2 +:1033B000619CC06FF425610D20E35124D8111138B0 +:1033C0000028B00080240000A0000000103051A2AE +:1033D00034EA800200001400003C64828000000097 +:1033E0007C003D00024C128F8C001E08800C0900EE +:1033F0008004D19C19C009018195884CF02C54435C +:10340000624018D880951D0108220200008000004B +:1034100091810401026000F0000080430160208877 +:1034200040061106080261A87E5318E7CC08000880 +:103430001008130000004700B86C18960F088200AF +:1034400021104842231F84C81FA29EEC13421C1D5A +:103450000EFF9087B0D1482913084D8002249400B4 +:10346000222800180282101EA81C430A52437ABC6C +:10347000267D07E24249922C2404882060099B6142 +:103480002D747D9913260F79D04F0C44CC26580CFF +:1034900008904CC86581008984CCB2581011150180 +:1034A0002184842004E8610000100012A006F012BC +:1034B00010393A4F720039142A2018BD020AF0411F +:1034C00040EE902E3983BF337D302F9D217DC23C4D +:1034D000F0EDC46D260B9BC18AA002CC9F42250251 +:1034E00000000000001042000800A941382009092E +:1034F0000C8D40010000144443112800402100C0FD +:1035000051C202FF0E0E21087C00000502000201DC +:103510000020800401400004134C00501622820257 +:10352000090105108408102000120000DC000509C4 +:10353000910285408194D40F1D20424A02C8380D63 +:1035400001101A01A0320340D90622C40A208020AB +:10355000D0608022460020410030F3803C88402922 +:10356000F1838887791E1FCC0072442414FF01C4A4 +:103570000FB8B01C1C888E047502A912092C01001A +:1035800004230084200810408104080044810224A0 +:1035900024482040820401021081080410021020F7 +:1035A00008404481040802042008104821008101D9 +:1035B00004101120084104084890202110112120F6 +:1035C0004082040020400204102241022010200802 +:1035D00042102042420204082040008104081040AA +:1035E000800408204082040020409084010200846E +:1035F00020108410810842012110408404082040DA +:103600008204008840268E007E04121383A48C4816 +:1036100033908428D0C33840001DC80033E0D20066 +:10362000CA743320832403406C4209044601C1C09C +:10363000F0004020051C4C00704110C104038C8F29 +:10364000B490006000000000000000000010A00026 +:10365000000000000000200000000000000000004A :10366000000000000000000000000000000000005A -:10367000030F00C3C330F0CC3C330F0CC3C330F096 -:10368000CC3C330F0CC3C330F0CC3C330F0CC3C362 -:1036900030F0CC3C30020C000000100000000000B4 -:1036A0001800000000000000000000000000000002 -:1036B000000000000000000000000000000000000A -:1036C00000000000000030F0CC3C330F0CC3C330CE -:1036D000F0CC3C330F0CC3C330F0CC3C30020C00B8 -:1036E00000001000000000001800000000000000B2 -:1036F00000000000000000000000000000000000CA +:10367000000000000000000000000000000000004A +:10368000000000000000000000000000000000003A +:10369000000000000000000000000000000000002A +:1036A0000000000000020000000000000000000018 +:1036B0000800000000000000000000000000000002 +:1036C00000000000000000000000000000000000FA +:1036D00000000000000000000000000000000000EA +:1036E00000000000000000000000000000020000D8 +:1036F00000000000000000000800000000000000C2 :1037000000000000000000000000000000000000B9 :1037100000000000000000000000000000000000A9 :103720000000000000000000000000000000000099 -:1037300000000001002220010000001110004440A0 -:103740000000400000000000000000000000000039 +:103730000000000000000000000000000000000089 +:103740000000000000000000000000000000000079 :103750000000000000000000000000000000000069 :103760000000000000000000000000000000000059 -:1037700000000000000000000000008000060000C3 +:103770000000000000000000000000000000000049 :103780000000000000000000000000000000000039 :103790000000000000000000000000000000000029 :1037A0000000000000000000000000000000000019 :1037B0000000000000000000000000000000000009 -:1037C00000002040082380472002000120C0009014 -:1037D00008208800000800800000100A0010800007 -:1037E00000212400012A248480010000000102003D -:1037F000F000200200040007000009010018044C3A -:10380000C209080800221000220000400110000038 -:103810000002120800010002820004201008004487 -:10382000009000022004040201100C80000000003F -:103830008000008100040208090000000810041044 -:1038400000800600400800060000008000120020F2 -:103850002EBE35F44108500408200A0840010881B2 -:103860004020030004220280800800261A04100071 -:1038700092904204500800800811A2EBE8BEB90003 -:103880001B8010004610205908008408C201201C2B -:103890003021020421000C2003A00824042002107F -:1038A000600800283088008001008008020880003D -:1038B000830010E88010DD48B002121C00080605E5 -:1038C00001511012000030000808000280900040F2 -:1038D00020108200A00400404800800400800800FE -:1038E000801010800011A0882090BB210008C541E5 -:1038F00052E4C215175E880D90900081F20E2043AD -:10390000A0008A5C00200200020060500040000815 -:103910000E002010C288098014060080404000502C -:1039200008200002C0220004802A08028130200200 -:10393000008D8119070230B20098000000200400B9 -:103940000010C01042000A4000409204448400026B -:10395000800400A408C04808120002800088048087 -:1039600000000C00008000802A32240000001908AA -:10397000350007000290001804A0080B088A900286 -:10398000946C29083F820FEB73DFFCFFFF3DFFCFF4 -:10399000DAF2080C22813922008FE20240C069016C -:1039A0004C040010334081401D30080B2058586CE7 -:1039B000D100C10B0D31A540840524440F240126FC -:1039C00044002F00000412010A00102813A60D0164 -:1039D000605B28B34E284206040176E82B402EE8AF -:1039E000CACA926804603506984069808000400029 -:1039F0000810C080400220D3803AA30AAD12C3341D -:103A000022B0028801393130305F4B30300703403B -:103A10001028101410000022A253408C060002400F -:103A200086121E4021A432040A2AA0007010002829 -:103A30003CC92201000007692124CA8C40085401B6 -:103A400042000642A001000420400D12031AB21ADF -:103A500018861A0B1A0A1000A82469A322958698C2 -:103A60005181A06D6D0B100222022008C1092AA805 -:103A70008E230249E078432FFB8052012CA03508A9 -:103A80002622048460400090261A4101831152C40A -:103A900044B4020103969109D034D73640840C40D7 -:103AA0007218041120140209A004800123000404E8 -:103AB0000A00D000290228C3406001842830951AEA -:103AC000800009838D20D04103A500804085000C33 -:103AD000A00024C052000100450D001040000099D4 -:103AE00054150001080AA00000000800208000B062 -:103AF000610000100000340400424BC0148808002C -:103B00008800015B54F08018590182B3CCD0410089 -:103B10000A42082002C4802A012A280C91F0284871 -:103B200090A1200005EC82107CE604042088880126 -:103B3000C0E47F413828C0012260080140332A02D6 -:103B400010228850A102100D81A22009A8C254267B -:103B500080810101E0A055B11100058C80C3B8F34C -:103B60003827D200860246B0008C00100AB801DD6A -:103B700010F8FE0C808E4390E51CB404060908A4DE -:103B80000011209BE43A3C4E6071EA2010100A8834 -:103B900000A1D00400A14415740CA9C23B504938BF -:103BA000283044BF41410438D400C008245220A02A -:103BB0000000011040A020945002591B4002042331 -:103BC000F8DCF8041E290007900100E040314A8823 -:103BD0000110060084C008C184001000001008060F -:103BE0000540002340200040040A000000000000BF -:103BF000020C1245210111241000088004810200EA -:103C0000000090000004000000000200000201001B -:103C10000015080108002048002368080224130248 -:103C2000006A2126C40802089309106104901A4C06 -:103C300002488B0860880400E10400000000552C55 -:103C400004800080010C43D40020800081000140EA -:103C5000028000000000088001104000000AC0003F -:103C60000200183000002000400502001000840B04 -:103C7000F000198100007E8800820000002004020C -:103C8000002EA200000028E03021000400044220A1 -:103C900000A003003300E0C014200040200080405A -:103CA00000804008A80000000080003020000000D4 -:103CB00001000009000407002A00100000002A0289 -:103CC00000088001028040080520004800200220F2 -:103CD000511008004201D149440006000241010090 -:103CE00000000080006801220080000020084000E1 -:103CF00018B00400200001110000824080A0442878 -:103D0000E004380002A0588009000A12C000082010 -:103D10000000890010012424000A07000810020096 -:103D20000010C6000981040104083C0800800290CC -:103D300000542042891202883C1100108800225051 -:103D4000010821082808202220423000018080003C -:103D500000048C00229B0C50140000080020C400BA -:103D6000C20200C00828028400052A35014C066002 -:103D7000809401620000040040335C6812020E006F -:103D80000240D000048006400081F06AA400000ACE -:103D9000468000012408A2002402063A82128C10F8 -:103DA000F33A000006510F44E0800061C2FC12208B -:103DB0000C0E88231F0682B16D906308002D00143D -:103DC000121708A1DC026400006020F430000841F2 -:103DD000C04112B0A0001B003E000003A040C10182 -:103DE00006800C4000F004310213C541404106003A -:103DF0000000000001008080001052000800084010 -:103E00000020000805200000200010008000200095 -:103E1000C0200040000200F0000001107807F1040B -:103E20006A0404010420000401000000000400A052 -:103E30000000004016110120040004200090000042 -:103E40005C0400080102000210440280210000000E -:103E500000010840080080080100100000A01102C5 -:103E6000020000000020000022080041000CC8FCF5 -:103E700001000801E2080039E2389E070390801033 -:103E800000F00001080D40069C100000010008230E -:103E9000C03011AB0620015C421C00A000061008D7 -:103EA0006102800002183040030801821040080AB5 -:103EB0001045306214C0E08302000108021C200C8F -:103EC0006120C3008C12284084020A100C30421377 -:103ED000002843100185080070C0850028008184F7 -:103EE00000184084C408000026030400108020410C -:103EF000020810A0000E1010C18108105000390CEB -:103F00000384084402080039000480085000A1001E -:103F10000E183081010C108800F7DF36FFCBEF63FD -:103F2000C3ECE8DD3DFFCFFE93E3DCFF8F2FFF8D79 -:103F3000D7507F0CFF3F3E37C1DFF01FF8FFFE0771 -:103F4000BF03C0C3F1000C03000BCFFE3000000123 -:103F50001004514EA5A0113C00000000000000001C -:103F60000018900004000060000020000000000025 -:103F70000000000000000000000000000000000041 +:1037C00000000000000000000000000000000000F9 +:1037D000000000F54A00007C0002100168800080B3 +:1037E0000968D680000440008000200300038000A8 +:1037F00000830C3800002DCD8F239002280800286C +:10380000FF000003E020064700B80083002A4C00B8 +:10381000000100800002010002000002000080029E +:10382000000080000001800180008004000044004E +:1038300020000020010000001000032401B83C001B +:10384000007B719B08A006003BC61B8240102F0C1A +:10385000204408524012AC424000008062122244D0 +:103860002AAE157443C052859C1A8A0C40039AC133 +:10387000542C00D40E6A08D0B00110012B161E0281 +:103880009411E68431EF29518521F2AAE8AE800037 +:103890000A8A5403544400290C52C40DD0D1E000CC +:1038A000840108000002200000490B4A445242D81B +:1038B000E014900C70CE3C6163442620000A420064 +:1038C000001718E83E187DC0140204008D383054EB +:1038D0000803508FFC28B428A28A89801D24001078 +:1038E00012000153A1C2B82B85085702B853857046 +:1038F000578A38AE002061AA6CA8782B7448C5009E +:1039000036E4821C1556804CB00000012412104091 +:1039100040000890010417120200205848200109B5 +:10392000040097408200A4A015040188514080DA69 +:10393000BA38250152600250A04A392084902347AA +:1039400088B6D52C5602B1D0000040850008001082 +:1039500040211400442400498DF00400C860000890 +:103960000580002E7068E70008C0B302800875E685 +:103970001BDF0996C08388192A1A76C942834EB87C +:1039800000501C0DCA95B090AC49143A99028BC1F5 +:10399000345401100012400000000000000000003C +:1039A0000002820800903C9006C4F20200604D20A4 +:1039B0002046A1723B40020C1F700A0930185CC8F7 +:1039C000D00048082DB1A5505C0E084D8B4CB06658 +:1039D0002C8549052B0010C35AE000491BEE0F410E +:1039E000225328BB4B09530E001126F82BD00B583D +:1039F000C8EA13688424B116D804EC8050000DE0A6 +:103A00000FDB44C2100410D2C232438A2F52CBB40F +:103A100022B200888839B1B0105D4B30124D4B6234 +:103A2000A51C17601589C22BB225C030AA26720EBC +:103A30008952ABCC030B35B08ABEF3FC803E030049 +:103A40000849AF91600C0F5A35B6CAA5616954494F +:103A5000300FFE4ABE010114602D0F388398A29EDC +:103A6000B8961A2B9C035962A1ACE9232413C7F81A +:103A70000194A46D6D07594B63802558E0030FFE38 +:103A800048910042C040512F9280C341ACEC7F5A14 +:103A9000362B09A8E1C1F0B48318C203F28095E087 +:103AA00056B60C134F82D0E3D074CE31438C45F020 +:103AB0005A90260124800300810744000821B48223 +:103AC00032106A24098024800004D25484FDAA356F +:103AD000D0003F41C268B008081B002220FED09BE6 +:103AE0008800FD04284100200147008C0411012DAD +:103AF0001000010C8A886021E22009400820C08063 +:103B00006347A0441302B0801050022CC5612018F6 +:103B10008A5801395407001008010292CB903C06E4 +:103B200005AA4C0210840C102C05000090400000E7 +:103B3000BA00200003CC007DD4C603080A089840D0 +:103B4000884C6A303C28401122FB48CB4412228228 +:103B500041A20330280631D981A6210888B6C415B0 +:103B60006D4000119C8066F01339002E10A3A03523 +:103B7000D827C4000230040002081DF242EF33FDD2 +:103B80002810460C948E00D349CCB4060B2C003C74 +:103B900022302802841514CCE073AB001AC40E2026 +:103BA000C113C005AC81E105540FA3F23A400BD616 +:103BB0002B8040FD024344777F0F5F0005501400C7 +:103BC00008010290043402011002601044411020E8 +:103BD000040C4000028008200081200D40180008DD +:103BE0000100200094AA00018150112C40172C09DB +:103BF000524F65409580141415F983B350493854D9 +:103C00009C095A8249008828012108E082419001DC +:103C1000008010024786020260280028000A4484BF +:103C2000810500200808294494206B4802561F8A09 +:103C30000F620290D42002081D825F4002A4281067 +:103C4000004C801480100000423104040901041467 +:103C5000009024C0015E63C580A0CB2BA3025361FA +:103C600026E01340000100500014000842168A09A3 +:103C7000828038F402053988080100150031121DD0 +:103C8000454159802400200A00A040080028144221 +:103C9000AA2CE3012103B0E8B92802400C48806156 +:103CA0007C60F8109840A291142481400082C8D909 +:103CB00042AA9002EA06B106C8C242E02A040D05F3 +:103CC000C93420492815173F0280727212009B46A2 +:103CD00003204113808974454C30A1CA0422A6B048 +:103CE000517E02018083922400C8A52E13C58B82C9 +:103CF000EA8862DC226A09FE31C5C0D4B109C880F5 +:103D00005B400404A95009F70454337AB848751E7F +:103D100084842A00002450900900082082208842D0 +:103D2000800801001411040408000D004805120069 +:103D300000175A1C048987812008B86A008400157E +:103D40004045240000000004080045005A150261A7 +:103D50004149014900490005104886000788F7904D +:103D60000011CF9C616E947DC8320B4B9523FCB043 +:103D70001F8B03C089A800C740273D27A1CE8630EE +:103D800064CCD3D134C084CF63F52CEB00008E809B +:103D90006273D4C03B253E75050EB0EBA4233116EB +:103DA000FD42AE03F600A02A394306ACA2A3FC995B +:103DB000F73A810093319F50A8120933C9F5028167 +:103DC000242A8A210E088A906F90A208142C855507 +:103DD000501508A54C00748C081062B00540038093 +:103DE000005611C0408FAE0CF8C7307327FC01F9A4 +:103DF00018000AA443E00011221C9540C011462877 +:103E00002C0108208220A02008594A092C0CBB4212 +:103E1000400890022150802063095001B8002040E2 +:103E200070B26274091A08FF0E0243047C07F000A6 +:103E30006E00000100206000000C000000B4004A89 +:103E4000A9002000040080204C0215024000404FD1 +:103E5000480A4028F900046080000000000004C007 +:103E6000000140500A00A00A014014000028000090 +:103E70004A00000018009726400C0B510000000576 +:103E80003DE80CE5F0D440BFFA3E9FC183F2F40058 +:103E900072FF2A218FBD101E9C0C91040BCA481082 +:103EA000A5C0350000000000000000000000000078 +:103EB00000000000000000000000000000000004FE +:103EC0000002102008404081040802042008100865 +:103ED000210081010410102008410408481020210D +:103EE00000102120408204002040020410204102E2 +:103EF00000102008421020404202040820400081A7 +:103F000004081040800408204082040020401084EF +:103F100001020084201084108108420021004084A6 +:103F200004082040820400884000000000000000D7 +:103F30000000000000000000000000000000000081 +:103F40000000000000000000000000000000000071 +:103F50000000000000000000000343FF01100440C7 +:103F6000543B3B0E278000EC0000000000000000E6 +:103F7000005AB00004020000000030000000000001 :103F80000000000000000000000000000000000031 -:103F90000000000003F000FC033F00CFC033F00C32 -:103FA000FC033F00CFC033F00CFC033F00CFC03315 -:103FB000F00CFC033F00CFC0300A0C0000000000F2 -:103FC00000000000000000000000000000000000F1 -:103FD00000000000000000000000000000000000E1 -:103FE000000000000000000000003F00CFC033F0E0 -:103FF0000CFC033F00CFC033F00CFC033F00CFC0EC -:10400000300A0C000000000000000000000000006A -:1040100000000000000000000000000000000000A0 +:103F90000000000000000000000000000000000021 +:103FA0000000000000000000000000000000000011 +:103FB0000000000000000000000000000000000001 +:103FC00000000000000000000002000000000000EF +:103FD00000000000080000000000000000000000D9 +:103FE00000000000000000000000000000000000D1 +:103FF00000000000000000000000000000000000C1 +:1040000000000000000000000000000000000000B0 +:104010000002000000000000000000000800000096 :104020000000000000000000000000000000000090 :104030000000000000000000000000000000000080 :104040000000000000000000000000000000000070 @@ -245393,139 +241296,139 @@ :10E5400000000000000000000000000000000000CB :10E5500000000000000000000000000000000000BB :10E5600000000000000000000000000000000000AB -:10E57000000000000000000000000000000000009B -:10E58000000000000000000000000000000000008B -:10E59000000000000000000000000000000000007B -:10E5A000000000000000000000000000000000006B -:10E5B000000000000000000000000000000000005B -:10E5C000000000000000000000000000000000004B -:10E5D000000000000000000000000000000000003B -:10E5E000000000000000000000000000000000002B -:10E5F000000000000000000000000000000000001B -:10E60000000000000000000000000000000000000A -:10E6100000000000000000000000000000000000FA -:10E6200000000000000000000000000000000000EA -:10E6300000000000000000000000000000000000DA -:10E6400000000000000000000000000000000000CA -:10E6500000000000000000000000000000000000BA -:10E6600000000000000000000000000000000000AA -:10E67000000000000000000000000000000000009A -:10E68000000000000000000000000000000000008A -:10E69000000000000000000000000000000000007A -:10E6A000000000000000000000000000000000006A -:10E6B000000000000000000000000000000000005A -:10E6C000000000000000000000000000000000004A -:10E6D000000000000000000000000000000000003A -:10E6E000000000000000000000000000000000002A -:10E6F000000000000000000000000000000000001A -:10E700000000000000000000000000000000000009 -:10E7100000000000000000000000000000000000F9 -:10E7200000000000000000000000000000000000E9 -:10E7300000000000000000000000000000000000D9 -:10E7400000000000000000000000000000000000C9 -:10E7500000000000000000000000000000000000B9 -:10E7600000000000000000000000000000000000A9 -:10E770000000000000000000000000000000000099 -:10E780000000000000000000000000000000000089 -:10E790000000000000000000000000000000000079 -:10E7A0000000000000000000000000000000000069 -:10E7B0000000000000000000000000000000000059 -:10E7C0000000000000000000000000000000000049 -:10E7D0000000000000000000000000000000000039 -:10E7E0000000000000000000000000000000000029 -:10E7F0000000000000000000000000000000000019 -:10E800000000000000000000000000000000000008 -:10E8100000000000000000000000000000000000F8 -:10E8200000000000000000000000000000000000E8 -:10E8300000000000000000000000000000000000D8 -:10E8400000000000000000000000000000000000C8 -:10E8500000000000000000000000000000000000B8 -:10E8600000000000000000000000000000000000A8 -:10E870000000000000000000000000000000000098 -:10E880000000000000000000000000000000000088 -:10E890000000000000000000000000000000000078 -:10E8A0000000000000000000000000000000000068 -:10E8B0000000000000000000000000000000000058 -:10E8C0000000000000000000000000000000000048 -:10E8D0000000000000000000000000000000000038 -:10E8E0000000000000000000000000000000000028 -:10E8F0000000000000000000000000000000000018 -:10E900000000000000000000000000000000000007 -:10E9100000000000000000000000000000000000F7 -:10E9200000000000000000000000000000000000E7 -:10E9300000000000000000000000000000000000D7 -:10E9400000000000000000000000000000000000C7 -:10E9500000000000000000000000000000000000B7 -:10E9600000000000000000000000000000000000A7 -:10E970000000000000000000000000000000000097 -:10E980000000000000000000000000000000000087 -:10E990000000000000000000000000000000000077 -:10E9A0000000000000000000000000000000000067 -:10E9B0000000000000000000000000000000000057 -:10E9C0000000000000000000000000000000000047 -:10E9D0000000000000000000000000000000000037 -:10E9E0000000000000000000000000000000000027 -:10E9F0000000000000000000000000000000000017 -:10EA00000000000000000000000000000000000006 -:10EA100000000000000000000000000000000000F6 -:10EA200000000000000000000000000000000000E6 -:10EA300000000000000000000000000000000000D6 -:10EA400000000000000000000000000000000000C6 -:10EA500000000000000000000000000000000000B6 -:10EA600000000000000000000000000000000000A6 -:10EA70000000000000000000000000000000000096 -:10EA80000000000000000000000000000000000086 -:10EA90000000000000000000000000000000000076 -:10EAA0000000000000000000000000000000000066 -:10EAB0000000000000000000000000000000000056 -:10EAC0000000000000000000000000000000000046 -:10EAD0000000000000000000000000000000000036 -:10EAE0000000000000000000000000000000000026 -:10EAF0000000000000000000000000000000000016 -:10EB00000000000000000000000000000000000005 -:10EB100000000000000000000000000000000000F5 -:10EB200000000000000000000000000000000000E5 -:10EB300000000000000000000000000000000000D5 -:10EB400000000000000000000000000000000000C5 -:10EB500000000000000000000000000000000000B5 -:10EB600000000000000000000000000000000000A5 -:10EB70000000000000000000000000000000000095 -:10EB80000000000000000000000000000000000085 -:10EB90000000000000000000000000000000000075 -:10EBA0000000000000000000000000000000000065 -:10EBB0000000000000000000000000000000000055 -:10EBC0000000000000000000000000000000000045 -:10EBD0000000000000000000000000000000000035 -:10EBE0000000000000000000000000000000000025 -:10EBF0000000000000000000000000000000000015 -:10EC00000000000000000000000000000000000004 -:10EC100000000000000000000000000000000000F4 -:10EC200000000000000000000000000000000000E4 -:10EC300000000000000000000000000000000000D4 -:10EC400000000000000000000000000000000000C4 -:10EC500000000000000000000000000000000000B4 -:10EC600000000000000000000000000000000000A4 +:10E570000000000000000000000000000000007427 +:10E58000020000849037BF0C48898981C948820EF7 +:10E59000001440138000E0C200000E49CE8000004D +:10E5A000000020CC00019102284800240008E4E08B +:10E5B00000FC05201CA00414601A1401302197826D +:10E5C00004032F0003C0011E0447811E00058000C4 +:10E5D0007801E8038800DB0E0400411112000808EE +:10E5E000881000448440015C000804018878022CF3 +:10E5F000506BE8378388DBA1D0382F040047013205 +:10E600004012B0004000000B12105484B4D0268099 +:10E61000824062763C12CE0BA98792B1D3B030967D +:10E620001E4D409EC29518211F15B8048B80E4C46E +:10E63000930B00110122B34D00D000300D0454E0C3 +:10E6400054FC00A10D168048901FC0000409290148 +:10E650008C63F10CFC1E2C2E8E94A31648A52A1B4D +:10E6600025C5A3531A347BF320820D000245A00078 +:10E670004030C10000001188A2412AA5013A513B57 +:10E68000E46DDA2DB6C35FD282D473D03D67877F45 +:10E69000334EE8EE9D21DD0EE9D29DD0DD3B093AF7 +:10E6A00048BBF0A3F0C8BD219580840204248200F9 +:10E6B0001A680524316030D1241252C155C068B89F +:10E6C000338227E2022462F18422321C850C44202A +:10E6D000822090A031640028517898355C262AC0A9 +:10E6E000B581E0B098B62E0F40694043F00187191C +:10E6F0001800C0028530A1861408004A40B13413C6 +:10E700001603800D1941DE103220324841E140707D +:10E71000402D1735C5014E62343C0E2828034908A8 +:10E7200081D85044AB14348E46908C48032818523C +:10E730000C24A2D2F84E123249038EF13F4400510C +:10E740003FD34FFFF3FFFCFFFF3FFFCFFFF0E3346A +:10E750005228024980080003440C1206D088400069 +:10E76000440000B1064E00081008A0032100000874 +:10E7700026408A00100008508200B07B00854805C2 +:10E780002B0011C12C08001C08C9C001026134C44F +:10E79000001C6109C00102303400020841110080F0 +:10E7A00088C1C2132002258052783AAC0004C4000C +:10E7B00001C800004A00844050424C403292013D62 +:10E7C00082C2424060D3490060CF499227DCA14316 +:10E7D000338880E66067782762267040D2419A705D +:10E7E000001B1482066373E42821FF00200FDF035F +:10E7F000102C0F791499050520285808303FE28025 +:10E8000091F200043500301104240030A092252C30 +:10E810002401494110A0004401404247B097A4257B +:10E8200025014949C4A00C740148000004A22291AA +:10E8300000A08A10240E0290A5A400AD09C940A032 +:10E84000B04360DA1022424056A00358CA923319EE +:10E85000011590B274101411910516D352344E1351 +:10E86000048007088102480418234D42321048A44E +:10E8700003820A240487211EE8141202DFCFC51187 +:10E880008D6CD90E1A10CA6643135C42EF3F144CCC +:10E89000CF71F4A0847428020411010910245528B2 +:10E8A000228850B0A2402FAD24800C8021FBE45080 +:10E8B000180894403101010C4240059502508141F5 +:10E8C000004C0B010480008000002004058A4F00EA +:10E8D0004105080004010008000040003A802000C3 +:10E8E00002C400259406000801001940080804210C +:10E8F000040000100008401480000080010064A0A3 +:10E9000000182052020000000814001809400010EE +:10E910004AC0444002820B02200014100000600034 +:10E92000280000200208155243FA914020410308B4 +:10E93000300202D1910085030902035CA10000109E +:10E94000800104002003E90008800300C34C40015B +:10E95000A800E1077406A092280000A43BD0019F04 +:10E960004041189F2A0FFFC883F14C400800003235 +:10E970000434C3251008F219144510809148100181 +:10E9800008800820008620C94030AE480000A00062 +:10E990009CEA0FE10150913A142E280D414E44A1FA +:10E9A0000FC89637173D8A4FD0438862E30B5ACA87 +:10E9B000596080C820021EB70340108200F0140086 +:10E9C000DBCF840347800410000F40ACA205202455 +:10E9D000281069C494204A4850D231794FC79020FA +:10E9E0009409100C1346546000242A30111C044072 +:10E9F00000111002812905040123AA08222D308864 +:10EA00008055C3B010BCE215C382ACD3589812B184 +:10EA10002C63425261252435AD12E8CE0890ADA892 +:10EA200032650908C019001B601E12114746448058 +:10EA300014182902322C400900201431A20044038A +:10EA4000600220284C8A31E24F03323AF8BD582E3A +:10EA50009700E1606C2445D8063581C781922C016E +:10EA600039129C40ABF26004BF7C17080527F0CB3D +:10EA700018111633948275F15BB402B210040C5174 +:10EA800002A948454228028AC832846852582A425C +:10EA90004C02B1933CC2493B08CFEEE08BCCDAA3E9 +:10EAA000217D447BD37760ABFD09F94408819190C7 +:10EAB000AAA50B6B88A7B20AAC803409BB04DA9113 +:10EAC00010847C920D000CA493158863800008408C +:10EAD000851002004A0228634E8923991407FF0B10 +:10EAE000230F6D71A00000222000000573C934B906 +:10EAF000482C764EFDB0450CDFD500F1404D004D61 +:10EB0000004D001049025C40028081A820120C06D2 +:10EB1000F33A0890002B404A4023F430520A014057 +:10EB200008B80095604001002100840108004404F9 +:10EB300010500848019398CA86208008235255A097 +:10EB400002272A540400900034480210000698035B +:10EB5000EC0CA36915404AA8A0815400040282412C +:10EB600020000050282412000005028240A000016D +:10EB7000000C88428080A4521441015A0000000415 +:10EB80002202228840B0620825420E00013011C0E6 +:10EB9000140A1A09A986206125E811D10A000CE49B +:10EBA00042A1443F1302A14BDD107F10395C0E805F +:10EBB000C8923224C07D6B2D194AFB6268C0DD30DB +:10EBC0002078840002915010260232015CE07354D8 +:10EBD000491B0400000F430200000000160006015C +:10EBE000002000000410010090848002A920280861 +:10EBF0001010B38037A323E34030100050049A284C +:10EC0000B1849C418024300103400538011448122E +:10EC1000622624C24C40C498228926CC4A739000B4 +:10EC20001003942EC0420BD10020FBF900E8000035 +:10EC3000034190000501000E40007414000020C83C +:10EC40000002E201000470070BC648106608259216 +:10EC5000040100842008104081040800408102045F +:10EC60000408204082040102108108001000000006 :10EC70000000000000000000000000000000000094 :10EC80000000000000000000000000000000000084 -:10EC90000000000000000000000000000000000074 -:10ECA0000000000000000000000000000000000064 -:10ECB0000000000000000000000000000000000054 -:10ECC0000000000000000000000000000000000044 -:10ECD0000000000000000000000000000000000034 -:10ECE0000000000000000000000000000000000024 -:10ECF0000000000000000000000000000000000014 -:10ED00000000000000000000000000000000000003 -:10ED100000000000000000000000000000000000F3 -:10ED200000000000000000000000000000000000E3 +:10EC900000000000000002041020410200102008C3 +:10ECA0004210204042020408204000810408104025 +:10ECB0008004082040820400204010840102008467 +:10ECC0002010841081084200210040840408204064 +:10ECD0008204008840DEFF3BFDCF6F33CD9CF4EF14 +:10ECE000212F8BEF43F2103DC70E6E8FF6C005CC7F +:10ECF000FF7F2D72C29AB3C9B4B7FF00FF031300A0 +:10ED000001040DD4000E8FFF104404011438714526 +:10ED10007960020400000000000000000052A00022 +:10ED200004020000000020000000000000000000BD :10ED300000000000000000000000000000000000D3 :10ED400000000000000000000000000000000000C3 :10ED500000000000000000000000000000000000B3 :10ED600000000000000000000000000000000000A3 -:10ED70000000000000000000000000000000000093 +:10ED70000000000000020000000000000000000091 :10ED80000000000000000000000000000000000083 :10ED90000000000000000000000000000000000073 :10EDA0000000000000000000000000000000000063 -:10EDB0000000000000000000000000000000000053 +:10EDB0000000000000000000000000000002000051 :10EDC0000000000000000000000000000000000043 :10EDD0000000000000000000000000000000000033 :10EDE0000000000000000000000000000000000023 @@ -245818,7 +241721,7 @@ :10FFD0000000000000000000000000000000000021 :10FFE0000000000000000000000000000000000011 :10FFF0000000000000000000000000000000000001 -:02000004003CBE +:02000004003BBF :1000000000000000000000000000000000000000F0 :1000100000000000000000000000000000000000E0 :1000200000000000000000000000000000000000D0 @@ -246116,441 +242019,441 @@ :10126000000000000000000000000000000000007E :10127000000000000000000000000000000000006E :10128000000000000000000000000000000000005E -:101290000000044D01555044C411112AA84AAAA2C5 -:1012A000AAA8AAAA044441111044441111044441BB -:1012B000111044441111044441111044441111040B -:1012C000444111104444111104444111104444118B -:1012D00011044441111044441111154441151044A6 -:1012E00044111104444111104444111104444111AA -:1012F0001044441111044441111044441111044498 -:10130000411110444411110444411110444411117D -:101310000444411110444411110444411110444447 -:10132000111100004E00000000002001F88800802C -:1013300021F800020081001040000020800002001F -:10134000410000000000000000000104E820001D32 -:1013500000000410180007F800B84000000000006A -:10136000000000000000000000000000000000007D -:10137000000000000000000000000000000000006D -:10138000000000000000000000000000020000213A -:1013900000000000000000000000000000802000AD -:1013A000000000020002A002400000000200000451 -:1013B00000000000015000000000000000000E00CE -:1013C00000000000003800000000000000300000B5 -:1013D000801003840000000007800000000000006F -:1013E00000000000000000000000000000000000FD -:1013F000A001080000000000000000000000000044 -:10140000000000000000000000000000000E0000CE -:10141000001C000000000000000000008000000030 -:101420000001C00000000000000E000000000000ED -:10143000000000C0000080080100100080100100C2 -:10144000100200A00000000E000000200000840038 -:101450000004820000004008E00000012412100097 -:10146000400018800100000202000000002000007F -:1014700004000C00820081E8170440801300000083 -:1014800000000000400000000000200000003000CC -:1014900000001C0070038000000000000018000025 -:1014A00000030C00400000030000000000000018D2 -:1014B000000000000000000000000000000000002C -:1014C0000000030180000000000001800000000017 -:1014D000000000000000000000000000000000000C -:1014E000000001000030C00000000000000000000B -:1014F00000038608000002000040000020000000F9 -:1015000000040000000000000000000010080000BF -:101510000000000020008000000000110001000019 -:10152000000200021000200002000000080000007D -:101530000011000000000100000002000000000097 -:10154000400000000000001000000400F000020055 -:101550000000040000000000060000000000400041 -:10156000001000000000000000000800000008005B -:1015700000040000000002000080000000010002E2 -:1015800001000000000000000000800000000000DA -:101590000000000010000000008000002008001083 -:1015A0000000000000000004000000000000000037 -:1015B0000002000000000800000000000000000021 -:1015C000008004202000080100000000000000004E -:1015D00000000008000000000000000004000000FF -:1015E00000010000004100000000060000000000B3 -:1015F000001001000000008000000000000000005A -:10160000000024000C00020001000400000000069D -:101610000200186C09000000000C0031800000007E -:1016200030000000001800180030000000003006F4 -:101630001800000000C3000001C000000C330000CF -:101640000000000008001000090000000000000079 -:10165000000000C0000380000000000000C0003057 -:101660000030400000000000000400000000000006 -:10167000000000000000200000000000000000004A -:1016800000002000004000000000000000000000FA -:10169000000000000000000000000000000000004A -:1016A0000000000000000000000000000800000032 -:1016B000000000000000000000000000000000002A -:1016C0000000000000000000000000000008000012 -:1016D000000000000000000000000000000000000A -:1016E00000000000000000000000280000000000D2 -:1016F0000000000040000100140000000000000095 -:1017000008000001000100000020000004000000AB -:10171000000000020C0C00200002403040C03020CD -:10172000050C0000038008200081600F40040008C1 -:10173000000060001088000181D0116800100000D6 -:1017400000400000000000003C00060000C0000057 -:101750000000068000000020200000000000300093 -:1017600000001000000000000000000000000180E8 -:1017700080002004000001040000620010802000AE -:1017800000008000F40011022002D00000A46030AC -:10179000084802000010002000030C0C00000004A8 -:1017A0000000200001F01000008006000040000052 -:1017B00000000200000000500004000000100800BB -:1017C00002816000020329080001003000000014BB -:1017D0000CC000800C00000E00E0C01800003000BB -:1017E0002E0040010040003820180040000000009A -:1017F0000000000180008000100C010000000400C7 -:101800000006000080001000000000000009080031 -:10181000001000000014300C0380000016000802C5 -:1018200000000010000B00044000204880222040EF -:1018300071E0060000000000000000000000000051 -:10184000000006800008000000000000000B4000BF -:1018500000000000A800080040000000E80044006C -:1018600010042680002C4010010000E08200180ABD -:10187000000005001C31480818010008C001008460 -:101880000815080000086010600C006E0000001DC4 -:10189000C0470C000000200408000D00101D02408D -:1018A00041C301C300C3000000400000010002006A -:1018B00000300008000004000420000600100000B2 -:1018C000003C00800000000000000700E1038400ED -:1018D0000000BC002040C2A01000000000018000F9 -:1018E000041000008000100C0C200000C00000005C -:1018F000000004000000000000C000000180200083 -:1019000010098000000001309800000000130180E1 -:101910000060020000081800020480003C0047C07C -:101920000000000C0000018000400600054002009D -:101930000050000000000400000C00C00200000085 -:101940000400000040000800000004000000C00087 -:10195000600018018000E060000318000008060223 -:1019600040049000215080003203C000A00000001D -:101970000180020420500D000180202F80FFF00024 -:1019800000C1018002006001000C040201B80012D5 -:10199000BB0000400000002000000506C000004021 -:1019A000000082200000021000000000000004007F -:1019B000010160720E20E40E41C01C802039040831 -:1019C000CA10502090005700004E2A002000040347 -:1019D000020004060002004000004000C0010008B0 -:1019E00003000100804002004000010008004000A8 -:1019F000A4007C10042306942068D0468D3468C16E -:101A000046811A34346823468234611A108D0804E2 -:101A1000518A11A06844468D0468C2342068D06899 -:101A2000A1068D0D145051A00845046848D1A0218D -:101A30001811A123468A3461A3441A3411A34D1A04 -:101A400030D1A0084211A343423234682346068DA8 -:101A50000468D3468C346823468A3461A344D08416 -:101A60000D1A0084205084D08D284201A113468491 -:101A7000346823468A34608844E6FF24FFCE7F33EF -:101A8000CC78756F10AF8BE743F1085EC703DE8F2C -:101A900072E003CCEB7F3F70C1FEF3DBFCDBFD04A7 -:101AA000FF42120001044CA01017CC00105110642A -:101AB000112C6F0A03E041640000000000000000E8 -:101AC00000DEB00000000000000040000000000048 -:101AD0000000000000000000000000000000000006 +:10129000000000000000000000000000000000004E +:1012A0000000045001000045041111111044444194 +:1012B00011104444044441111044441111044441A8 +:1012C00011104444111104444111104444111104FB +:1012D000444111104444111104444111104444117B +:1012E00011044441111044441111080441101044E8 +:1012F000441111044441111044441111044441119A +:101300001044441111044441111044441111044487 +:10131000411110444411110444411110444411116D +:101320000444411110444411110444411110444437 +:1013300011110340480181002000202121C823F21F +:10134000102080100001842401FE0002000410809F +:1013500010002040000A00800E05024044000000FA +:10136000F00009020000408700004F00039DBC060A +:10137000C23D988E3C7331001BFE07E20FF883E2FA +:1013800004BA811704093F83FC2C7FFF3A174FFFF3 +:10139000F3E17CFFFF3F0BCFFFF007BC01FD3E9068 +:1013A00001CFF0000000000001000003FC10599E76 +:1013B00032F7CFFD90005C4648000000800002003C +:1013C00020810408098F438438B220000B0748802D +:1013D0001C2065911D20407080A0044D4004004FEA +:1013E000CC11C20C05480A00443C020810811720A9 +:1013F000B80053F0450430FB01028A48A211146B77 +:10140000AE13FF4210832010E1380800000A0210DA +:1014100050028008280040818408E3201469005DA0 +:10142000C31000927E12594C5E300418F102000085 +:1014300042F91002E0000000000800001F10D6A8CA +:101440000D4D000000000000000200000000000040 +:10145000000002800369A02C2088303D0005AF9079 +:101460001A0CD7E41041400C92050803F63FFE4ADF +:10147000F0208BD4693B0207C7B4000010FA440087 +:101480001F800003EFAC0187140F82A7D04000D764 +:10149000E62043807020010482B20809083220004F +:1014A00010D0110162C316C00924003012458A8091 +:1014B0004294B00052101480A002002000021834A0 +:1014C0008A0681810C12001A620000034F801021ED +:1014D00000208CA0508160203C246440C080000C1F +:1014E000088000000842011D88C8311629CAAA8058 +:1014F000F4C4054D00208000000000000000000042 +:10150000000314C802940000001000A20023200071 +:10151000210000808000200820000008B25C0084C8 +:10152000620020097001C00043410440C090822045 +:101530000045300528025081703404001C0000C1B1 +:10154000104B800000004B800101170080002B5AD7 +:10155000C20000000430043800040EA2840400829B +:1015600010000F69A00344000102C8008002E000DF +:1015700032BA088C8004000018315C0018015C024B +:10158000755801901384892222718C302200410405 +:101590008840888058880181022260E000E63E0190 +:1015A00071081D40E018059915C0006570FEC0085F +:1015B000392B820CD072334C282C00128846101024 +:1015C0000017002000015D100090010818040801B8 +:1015D00001D0AC7575015D4B589294505C20194256 +:1015E0000500100028202105288000C0AF840008D5 +:1015F000000B809183F3A8902B08C9405610BD4082 +:1016000042BB04018344A07BD0423519B10184C0A0 +:101610005CF42DD1306B86E8D1E20411041004048F +:101620001790D1104B7A121582BAD02D5000401865 +:1016300020010012009005710AE041009000047C36 +:10164000100C00411880220C059C1000082080D14D +:10165000900401030A001073FC78DC2311040AE5EE +:1016600003000000A00201008402550028BC1800FD +:10167000CA0000825C4835172C895A902298527112 +:1016800008020080004A50C5E020178EC0731794EE +:10169000505E05CBC4A570A878C1A812200D884063 +:1016A000A160864105654A052224E407C00AF60EBA +:1016B0006F12881862CF080DC277605EFC89281609 +:1016C0001206E2E24F9C24521014402770B41431E9 +:1016D0005B1515C16F81A5645D7104568247C253C5 +:1016E000A057640A5002B6B201080C7B02280634E7 +:1016F00020162C62880C0442AB82055C48C7381760 +:101700004540E2BA9CDB37048A0C36933AECB98048 +:1017100025C04AB020EFD8027E135B880510000078 +:1017200005102417892811A51892D21B5384E9208B +:10173000055C001A0256CFF843A17C0CF610D00DC0 +:101740006C00C0009DBB2703833C339D8016402C5A +:10175000C2C7F330448469F8040002A172406800F3 +:101760008A3EA3CFF502003C6C8029800800010866 +:101770004000B10D420000500000248B2C32430188 +:101780008024740E88012B4E81A06F489929100087 +:1017900004524148C4009809100C145074D812EF38 +:1017A0000A5B8000A03820200C2000000102AB0C56 +:1017B00000810980052C12004020100001043B43E9 +:1017C0000280C100129480881208484210229000C2 +:1017D00073030240050036540183020C84E8003D87 +:1017E0002A0081C2EB24A90D20D88360409A4C00C6 +:1017F0007802C0432A000860280622C1074FF12161 +:1018000024200B0100818800172803C82080804015 +:10181000E0048010A8181C0AAA81F2C4E17C3F945D +:10182000CB0B411008BFA215030830737D04AF072E +:1018300011D0013E20BED05FF824004F8173F064C8 +:10184000F5B30484000480485C21000004C0100348 +:10185000241001802278826000000000023C4400D5 +:10186000280040007C001C030201120FC8005F0822 +:10187000900C79800824D39C39E203898140082D9B +:1018800079105D4218214C5C1017008480F2800AA8 +:10189000A05210204185100042685CFC01000053FA +:1018A000004608000830608C581269A0FA191AD551 +:1018B000CD8201821082130000402000B800004059 +:1018C000008C0000001820000000748C002214001E +:1018D00002121C0208A8120500956E2DD34F4FA0CE +:1018E00002A47C0001588011039B5856C0314882E5 +:1018F0004212D03004AC005A4A41526EA000880116 +:101900002009D0B02C34AD9D00A502F281490054CD +:10191000FC3F580C0A914FE8F58100A9C4FEB3586A +:1019200014584300604496C02E807800221C043274 +:101930002024702B6029214031F075A88A310520C0 +:1019400000648020000000000003003021008100BE +:10195000214D8000F00000010227C5054010000065 +:101960000280040000008048001252121804A501F1 +:101970003A004E8105854C13A1809458D517260056 +:1019800001610000000800F0000000007807F0008E +:1019900080000001002000000B200281434D400028 +:1019A0001627FF0F0D01696C2414060D80020260DA +:1019B00020008708100000E281C0E40E1E6043F2A0 +:1019C00003C120660920CC0CC1901980F8330408AB +:1019D0000A84102898040000008820022280F00069 +:1019E00000000C09E0000000781E3E00000000002E +:1019F00004F00001880000003C9EFC37D64FB33055 +:101A0000CBFC11100424088420891048910489001B +:101A10004891224444882448824481221091080439 +:101A200012021220884848910489024420891088B3 +:101A30002108910104101224084104884912202130 +:101A40002012212448824482244822441224412224 +:101A500041122408421224444242448824480891F6 +:101A60000489104890448924488244822448108480 +:101A70001122408420108410910842422120488481 +:101A8000448924488244808848640704AAC0C54128 +:101A9000C550E8803984010E82139894460B884122 +:101AA0008170E048840D04500308112DD0012201FB +:101AB0000101C1C0F0104200101D4C002000108038 +:101AC000000A020FCA80001C000000000000000095 +:101AD0000018B000000000000000700000000000CE :101AE00000000000000000000000000000000000F6 :101AF00000000000000000000000000000000000E6 :101B000000000000000000000000000000000000D5 -:101B100000000000000000000002000000000000C3 -:101B200000000000080000000000000000000000AD -:101B300000000000000000000000000000000000A5 +:101B100000000000000000000000000000000000C5 +:101B200000000000000000000002000000000000B3 +:101B3000000000000800000000000000000000009D :101B40000000000000000000000000000000000095 :101B50000000000000000000000000000000000085 -:101B6000000200000000000000000000080000006B -:101B70000000000000000000000000000000000065 +:101B60000000000000000000000000000000000075 +:101B7000000200000000000000000000080000005B :101B80000000000000000000000000000000000055 :101B90000000000000000000000000000000000045 :101BA0000000000000000000000000000000000035 :101BB0000000000000000000000000000000000025 -:101BC0000000000000000000000000000000000015 +:101BC0000000000000000001004440000000000090 :101BD0000000000000000000000000000000000005 :101BE00000000000000000000000000000000000F5 :101BF00000000000000000000000000000000000E5 -:101C000000000000000000000000000000000000D4 -:101C100000000000000000000000000000000000C4 +:101C000000000000000000000000000000000100D3 +:101C100000040000000000000000000000000000C0 :101C200000000000000000000000000000000000B4 :101C300000000000000000000000000000000000A4 :101C40000000000000000000000000000000000094 -:101C50000000000000000000000000000000000084 -:101C60000000000000000000000000000000000074 -:101C70000000000000000000000000000000000064 -:101C80000000000000000000000000000000000054 -:101C90000000000000000000000000000000000044 -:101CA0000000000000000000000000000000000034 -:101CB0000000000000000000000000000000000024 -:101CC0000000000000000000000000000000000014 -:101CD0000000000000000000000000000000000004 -:101CE00000000000000000000000000000000000F4 -:101CF00000000000000000000000000000000000E4 -:101D000000000000000000000000000000000000D3 -:101D100000000000000000000000000000000000C3 -:101D200000000000000000000000000000000000B3 -:101D300000000000000000000000000000000000A3 -:101D40000000000000000000000000000000000093 -:101D50000000000000000000000000000000000083 -:101D60000000000000000000000000000000000073 -:101D70000000000000000000000000000000000063 -:101D80000000000000000000000000000000000053 -:101D90000000000000000000000000000000000043 -:101DA0000000000000000000000000000000000033 -:101DB0000000000000000000000000000000000023 -:101DC0000000000000000000000000000000000013 -:101DD0000000000000000000000000000000000003 -:101DE00000000000000000000000000000000000F3 -:101DF00000000000000000000000000000000000E3 -:101E000000000000000000000000000000000000D2 -:101E100000000000000000000000000000000000C2 -:101E200000000000000000000000000000000000B2 -:101E300000000000000000000000000000000000A2 -:101E40000000000000000000000000000000000092 -:101E50000000000000000000000000000000000082 -:101E60000000000000000000000000000000000072 -:101E70000000000000000000000000000000000062 -:101E80000000000000000000000000000000000052 -:101E90000000000000000000000000000000000042 -:101EA0000000000000000000000000000000000032 -:101EB0000000000000000000000000000000000022 -:101EC0000000000000000000000000000000000012 -:101ED0000000000000000000000000000000000002 -:101EE00000000000000000000000000000000000F2 -:101EF00000000000000000000000000000000000E2 -:101F000000000000000000000000000000000000D1 -:101F100000000000000000000000000000000000C1 -:101F200000000000000000000000000000000000B1 -:101F300000000000000000000000000000000000A1 -:101F40000000000000000000000000000000000091 -:101F50000000000000000000000000000000000081 -:101F60000000000000000000000000000000000071 -:101F70000000000000000000000000000000000061 -:101F80000000000000000000000000000000000051 -:101F90000000000000000000000000000000000041 -:101FA0000000000000000000000000000000000031 -:101FB0000000000000000000000000000000000021 -:101FC0000000000000000000000000000000000011 -:101FD0000000000000000000000000000000000001 -:101FE00000000000000000000000000000000000F1 -:101FF00000000000000000000000000000000000E1 -:1020000000000000000000000000000000000000D0 -:1020100000000000000000000000000000000000C0 -:1020200000000000000000000000000000000000B0 -:1020300000000000000000000000000000000000A0 -:102040000000000000000000000000000000000090 -:102050000000000000000000000000000000000080 -:102060000000000000000000000000000000000070 -:102070000000000000000000000000000000000060 -:102080000000000000000000000000000000000050 -:102090000000000000000000000000000000000040 -:1020A0000000000000000000000000000000000030 -:1020B0000000000000000000000000000000000020 -:1020C0000000000000000000000000000000000010 -:1020D0000000000000000000000000000000000000 -:1020E00000000000000000000000000000000000F0 -:1020F00000000000000000000000000000000000E0 -:1021000000000000000000000000000000000000CF -:1021100000000000000000000000000000000000BF -:1021200000000000000000000000000000000000AF -:10213000000000000000000000000000000000009F -:10214000000000000000000000000000000000008F -:10215000000000000000000000000000000000007F -:10216000000000000000000000000000000000006F -:10217000000000000000000000000000000000005F -:10218000000000000000000000000000000000004F -:10219000000000000000000000000000000000003F -:1021A000000000000000000000000000000000002F -:1021B000000000000000000000000000000000001F -:1021C000000000000000000000000000000000000F -:1021D00000000000000000000000000000000000FF -:1021E00000000000000000000000000000000000EF -:1021F00000000000000000000000000000000000DF -:1022000000000000000000000000000000000000CE -:1022100000000000000000000000000000000000BE -:1022200000000000000000000000000000000000AE -:10223000000000000000000000000000000000009E -:10224000000000000000000000000000000000008E -:10225000000000000000000000000000000000007E -:10226000000000000000000000000000000000006E -:10227000000000000000000000000000000000005E -:10228000000000000000000000000000000000004E -:10229000000000000000000000000000000000003E -:1022A000000000000000000000000000000000002E -:1022B000000000000000000000000000000000001E -:1022C000000000000000000000000000000000000E -:1022D00000000000000000000000000000000000FE -:1022E00000000000000000000000000000000000EE -:1022F00000000000000000000000000000000000DE -:1023000000000000000000000000000000000000CD -:1023100000000000000000000000000000000000BD -:1023200000000000000000000000000000000000AD -:10233000000000000000000000000000000000009D -:10234000000000000000000000000000000000008D -:10235000000000000000000000000000000000007D -:10236000000000000000000000000000000000006D -:10237000000000000000000000000000000000005D -:10238000000000000000000000000000000000004D -:10239000000000000000000000000000000000003D -:1023A000000000000000000000000000000000002D -:1023B000000000000000000000000000000000001D -:1023C000000000000000000000000000000000000D -:1023D00000000000000000000000000000000000FD -:1023E00000000000000000000000000000000000ED -:1023F00000000000000000000000000000000000DD +:101C500000000000000000404A00000000020001F7 +:101C600068800081C968A00C000400030000C0C2A5 +:101C700000000C498E000C38000000800C01003878 +:101C800028178E00FF08E0E3E0DC040700A0000056 +:101C90000008000130010080000201000200000283 +:101CA00000008002000080000001000080000000B1 +:101CB00000004000000000000000000400000018C8 +:101CC000608C26038021100000000000010000014C +:101CD0009090240020208012F002A082400000009A +:101CE000020202042AAC156401C05104000012086B +:101CF00000000A8248200000002802A080000000A6 +:101D0000081410008010028456080000050082AA02 +:101D1000C8AC80000A8058006E0080C1206284CA6E +:101D200080132000840108000000000040400811DA +:101D30000008021044020008220000000080000099 +:101D4000000A400000144068FE14554014000000D2 +:101D5000800000000003500A00001100000A00008B +:101D6000200C5295154501402002802805005002A4 +:101D700080504500500A08A002C0612A6081C0213D +:101D80001308C50012C4821C1556800CB000000157 +:101D900024121040400008902182020202002040DC +:101DA0000020000804000400820080A015040088C0 +:101DB00051CC0010002322C078120000C8832808EC +:101DC0004230208200B6D52C5602B1D0000000006F +:101DD0000008000040211400440000010201CC0C66 +:101DE00008000108000C21A104000020B00A0280B4 +:101DF000318804080400CD0082A824003E30A48865 +:101E00006BE1066C01002287080001B8A84A783708 +:101E10000B8282A114E401100012400000000000B7 +:101E2000000000000002820800903C000000F20E5A +:101E30003040C9245086B5723348021C1DB00A09CF +:101E4000311858D8D101CACE2D31A5D05C9E13C00F +:101E5000816C02E20034583420411023FAE8004B30 +:101E60001BB60D41235328B34B0B5306001126EC30 +:101E70002B500958C8CA1269C4E5D1169804ED80E0 +:101E8000500009800FDB04C2100410D2EA32430A6A +:101E90002D42CB3426B600888AF93130709F4B3002 +:101EA00072C74B430908962B3913CCF6E3435463AE +:101EB000723406809273DA50035239B28F6AA019D5 +:101EC000A81E000028492B90801C0D8835B4CAA597 +:101ED0006149544910001E4AAE010114702C0D399D +:101EE000831CA29A98D61A2B18435B60A1AC692375 +:101EF00025518698319FA46D6D07594B63802E58EC +:101F0000E14F0FFE08BB2251C0E0532FB684C191B0 +:101F1000ADFC355E262B09A8E1C3F0BC931AC201C3 +:101F2000FEE097C046B6310B43A081F3D874D6319A +:101F3000C1CF56605BB4260124000300811C04025B +:101F40004000040B12604C240980000000040014BF +:101F500080020200500000B0000890080810000045 +:101F600000025062880002C00841000001440000E5 +:101F700004110009100001000A00000290001C1F5B +:101F80000002000031005C4040029800005102183D +:101F9000044004158B100038D403101008050213F8 +:101FA000C8B40C820020080AB0A00810060520085A +:101FB00090600000980000000B9C0071D4D40300D6 +:101FC0000448880089446A243C2840192271484901 +:101FD000C1122202C0A203102003109B81AE200870 +:101FE00088824404000000019C80E6F01335806E76 +:101FF00000A3A035D827C4002A30000000081DF235 +:10200000024633FD2C90472C958E00D041ECB4064F +:102010000308003402302802041414CCE072830058 +:102020001ACC0EA0C101C084AC814924000FA3F2D8 +:102030003A4009D2210042B4024104327E0A4A00E9 +:10204000055000000000001004240201100260107E +:1020500044411020040C4000028008200081200D23 +:10206000401000080100200094AA000181501128AE +:1020700000140814A44002002210C3C0140A020D68 +:102080008170C441413C3282E1C0003C00000880C4 +:102090000201108204821000460400024010001861 +:1020A00000024084800500A02800294590206B484C +:1020B0000000110004420000D40000081102544046 +:1020C00000A42810004C000480100000002104042B +:1020D0000102EC04000520800154420000E6820069 +:1020E00001022C43818C120000010050000400000A +:1020F000001288000280A900020D290800010011C9 +:102100000010021D454039800400200A00A040084C +:1021100000201402AA2CE201000020EC382C04401C +:102120000304002000200200B000A4001434014089 +:1021300011408060A0C20000AC00100088818000C7 +:1021400068FB220003EA00000815120022801080BC +:1021500012000A020000001100894045402000489A +:10216000002200205150020081E2D20334004000DE +:1021700000400000200002802A6800238000000048 +:102180000009424009400000A80009010537D20AB1 +:10219000B800550880042A00002450900900082047 +:1021A0008200884280000100141100000800010034 +:1021B0004801020000150800118904012008002AC6 +:1021C0000000001540452400000000040800450000 +:1021D0005A150261414901490049000000400000D0 +:1021E000001080000010080220980010052CB04A52 +:1021F00000229500120E002108BC8085AC273D27E7 +:10220000A1CE863024CC03C000110403E0210C28A9 +:10221000C5208E0C8742D20C1A260745050690EB86 +:10222000F42711026C0150012C002015214247288F +:1022300092A30C99F73A810093319F50A812093369 +:10224000C9F50281242A8A210E088A906F90A2087B +:10225000142C0554101508A54C00648003E022B02E +:1022600005400200005010D44097AF010AC400415D +:1022700027EC419800000E644020F8D79A0385416E +:1022800078204240206408128000A02000114A20DB +:102290008808AB424000900021508000220150008D +:1022A000A000200040A00244141200FF0E0D0020E8 +:1022B0007C07F03C68068071C53001FC0080080C8A +:1022C0003084044AA90020400401112014000502B2 +:1022D000400000041C000828950698408034300017 +:1022E00003000518000140500A00A00A0140140034 +:1022F000002800004A6380001803140880080A813F +:102300000000FBFD38018805F00000BFFA3E9FCFBA +:1023100003F000D402FF00010FBD001E9C006020EE +:1023200089025E00A4003500042006842068D0469F +:10233000851428C342811A14142823428234210AA6 +:1023400010850804D18A10A06844468D04684214A0 +:102350002028D029A1028D0D34D0D1A0084D0468C9 +:1023600048D1A0210811A123428A3421A1441A1482 +:1023700011A34D1A10D0A0084210A14342123428D4 +:102380002342028D0428514284142821428A1420B9 +:10239000A140D084051A008420D084D08528420032 +:1023A000A1034684346823468A34608844C2BD242D +:1023B000A942CD034E7C310B0416C5B31090409E4C +:1023C0004F221487600080CC01212D50010C3189EF +:1023D000B4C19400BD01C1C00204097C000C8C0092 +:1023E000501500051527D1032DB000540F303FFCC8 +:1023F0000000F000005AB0066000000000008000FD :1024000000000000000000000000000000000000CC :1024100000000000000000000000000000000000BC :1024200000000000000000000000000000000000AC :10243000000000000000000000000000000000009C -:10244000000000000000000000000000000000008C -:10245000000000000000000000000000000000007C +:10244000000000000000000000000000000200008A +:102450000000000000000000080000000000000074 :10246000000000000000000000000000000000006C :10247000000000000000000000000000000000005C :10248000000000000000000000000000000000004C -:10249000000000000000000000000000000000003C -:1024A000000000000000000000000000000000002C +:10249000000000000002000000000000000000003A +:1024A0000800000000000000000000000000000024 :1024B000000000000000000000000000000000001C :1024C000000000000000000000000000000000000C -:1024D00000000000000000000000002C003330026B -:1024E000C000002EEC0BBBB2EEECBBBB000000004A +:1024D00000000000000000000000000000000000FC +:1024E00000000000000000000000000000000000EC :1024F00000000000000000000000000000000000DC :1025000000000000000000000000000000000000CB :1025100000000000000000000000000000000000BB -:10252000000014C0000300000000000000000000D4 +:1025200000000000000000000000000000000000AB :10253000000000000000000000000000000000009B :10254000000000000000000000000000000000008B :10255000000000000000000000000000000000007B -:102560000000000000000000000000400000017FAB -:10257000440001100080008010008000000085C031 -:1025800073FE1C007F00000010002000038A008002 -:102590000605011D800FF730FF0F7473E07CF00714 +:10256000000000000000000000000000000000006B +:10257000000000000000000000000000000000005B +:10258000000000000000000000000000000000004B +:10259000000000000000000000000000000000003B :1025A000000000000000000000000000000000002B :1025B000000000000000000000000000000000001B :1025C000000000000000000000000000000000000B -:1025D000000000801C00001000200000000000002F -:1025E000000000000000040208100000400000008D -:1025F0004000008000100000000000000000038088 -:1026000038200000010700001C0021001C000070A1 -:102610000000240000000000A181C00405000802A1 -:10262000003800000000000A0007000000781FFECC -:1026300001020030034640100B01088000000240F8 +:1025D00000000000000000000000000000000000FB +:1025E00000000000000000000000000000000000EB +:1025F00000000000000000000000000000000000DB +:1026000000000000000000000000000000000000CA +:1026100000000000000000000000000000000000BA +:1026200000000000000000000000000000000000AA +:10263000000000000000000000000000000000009A :10264000000000000000000000000000000000008A -:10265000800000002A000000000300103E0000007F -:1026600000C000008000000000000000000000002A -:10267000000000015D0052880D45000000000000D0 -:10268000000000000000000000000000036803E0FC -:10269000001FFA28240084000814C2000003888464 -:1026A000103400092E1211024612088097C40C0241 -:1026B0000248800404240000044000009248008086 -:1026C00010C4000050400040002001000020000421 -:1026D000801008010000000010900000000400C0FD -:1026E0000090003001018280000080180002C00CC0 -:1026F0008001CB040110000002B00000A8800A0293 -:102700000000C21050588015000400804028000AC4 -:10271000A0100842160010000350004008400000BE -:10272000E0000000000404000000020000000000BF -:10273000000000000000000000000000081025005C -:10274000003F01FE18A3002133C003810000920066 -:1027500000048082108A00406E3ED8422000848CA3 -:102760002264250000308202805118110888808080 -:1027700001E4524008008010408140000200814086 -:10278000949042004004000444000000006C2810B3 -:1027900007C125400000010202000482000304007A -:1027A0000000100100C05000011132000850000F5D -:1027B000B466880FB6068801E41043B12E800B5D25 -:1027C00051208C59DC20480309216780018901517F -:1027D000C5D6400000600020000116600010C4C093 -:1027E0000880091221092020280005825000DF44BA -:1027F000C08000C4C000804184228910000888C0C5 -:10280000007000102C300003D08104222A10888927 -:1028100000100B8000060002000040000031210182 -:10282000208020C2450012200181047400454C0123 -:102830000008B90005000000041500000000201188 -:102840000000000AB0018B902CAC04000040420054 -:10285000031D2013642014080260A110110003005E -:102860000002D00C40000000000000020080800147 -:1028700000004100100004000000000010002208C9 -:10288000221C0000000080500000802E600170E0DB -:1028900002004000020C0040C0100029803063029A -:1028A00000520200043C18084500004D800400005E -:1028B000000400436000947318170000801100505A -:1028C00020080000B90140D4E0001030452C0094ED -:1028D00028080C0C44001330000020140C000000E9 -:1028E000F03008060000000000400000040C0A0060 -:1028F0000FE0000008C00000000810100340090CA1 -:102900001040801832000040803FC00002F1180CD7 -:102910008E0B0468460190BF840008000402000288 -:1029200002A84B012C40400992214014160331802B -:1029300060001300174004C0080001851007812CB7 -:102940000A8041405800094902C1000082812004E8 -:1029500054051D800020A008500E00200000000437 -:1029600000004010000000000058401A00000A203B -:1029700002CC3848440222080102000030CC076D26 -:102980000130111D54000000004000020004080046 -:102990000408420100400000000002800000020024 -:1029A0000016362081BD4001B0029030BC897E0205 -:1029B00090D8C83402458004800980B01400114DBD -:1029C0006441C2008057131F0DE012BA847C80005E -:1029D00053001DE11500188C02080A0010120000B7 -:1029E000000000000000000800800900000800004E -:1029F0000020000000001100028000000000000024 -:102A00000000004000000000300300000000000053 -:102A10000121F00E00A00010820000B002409041A1 -:102A200028110000019188282000604D04C3C024B3 -:102A300040000870400911050002000400008003F6 -:102A4000AB800101008004000001C0C30003B0831B -:102A50005480010C0000000608000328D0928D105D -:102A60000408203091C0C5020102011341089026DC -:102A700040004008692213A8581208114A39030B74 -:102A8000C0054500000000002010308802280040EA -:102A9000A00000000028E00000000000280018004E -:102AA0000000C1709C94050AE7C41001E00474336F -:102AB00003154208A00008000000000B40000C00B5 -:102AC0000040000400104000000000200005040049 -:102AD000001000A00000002100E000002413090500 -:102AE0000A008100181304424200020000000000A6 -:102AF00000004120062853960F8802EF6140200015 -:102B000063000080000098A411A503054037C202AD -:102B1000A003182311084410004C804002204000FC -:102B200000000000000C40081D00000C00500202D4 -:102B3000020000A95000000000000B41240000002A -:102B4000012206000042FC09C020000001309C0068 -:102B50000000001389C0000000100010048504105C -:102B600005487800021C003220046002000000408A -:102B700000000100000000000A0000020070070CC5 -:102B8000FE033C305280387E1830063E4301C84E6A -:102B900040000004000000000000004000000001B0 -:102BA00000000000000409000100004004000013C0 -:102BB0000020008400200000002000000EC000FF64 -:102BC0000E07E3B87C0000277B000070000080E661 -:102BD00033400C86500440F8001000000000201024 -:102BE000204000010F272010DC10200B030002A062 -:102BF0000000000000000000004000000100000094 -:102C000000000000880000000A00001E10F04033A1 -:102C10003F000061103CF03C3840C001F00000B8BB -:102C2000781E1FC10380206000FF00000F8000009D -:102C30001C02001001000803000000280420048486 -:102C40002048904489244882448112242448224404 -:102C500082244112108908049102112048444489B9 -:102C60000448822420489049210489092490912015 -:102C7000084904484891202110112122448224410E -:102C8000224412241122491220912008421122428A -:102C90004222244822440489044892448824482239 -:102CA000448224412244908409120084209084901C -:102CB0008908420121124484244822448224408805 -:102CC00044EFFD3DDF4FFEF347FC31FF37FFCFF30D -:102CD00011C37CFF1F3FFF8FA620FF0CFCFE386F47 -:102CE000C3BFF03FE0FFDE17FE43C1C3F35048030C -:102CF0001015CC006000102A8002A287AA8002541E -:102D000000000000000000000010A010040000E01F -:102D100000001000000000000000000000000000A3 +:10265000000000000000000000000000000000007A +:10266000000000000000000000000000000000006A +:10267000000000000000000000000000000000005A +:10268000000000000000000000000000000000004A +:10269000000000000000000000000000000000003A +:1026A000000000000000000000000000000000002A +:1026B000000000000000000000000000000000001A +:1026C000000000000000000000000000000000000A +:1026D00000000000000000000000000000000000FA +:1026E00000000000000000000000000000000000EA +:1026F00000000000000000000000000000000000DA +:1027000000000000000000000000000000000000C9 +:1027100000000000000000000000000000000000B9 +:1027200000000000000000000000000000000000A9 +:102730000000000000000000000000000000000099 +:102740000000000000000000000000000000000089 +:102750000000000000000000000000000000000079 +:102760000000000000000000000000000000000069 +:102770000000000000000000000000000000000059 +:102780000000000000000000000000000000000049 +:102790000000000000000000000000000000000039 +:1027A0000000000000000000000000000000000029 +:1027B0000000000000000000000000000000000019 +:1027C0000000000000000000000000000000000009 +:1027D00000000000000000000000000000000000F9 +:1027E00000000000000000000000000000000000E9 +:1027F00000000000000000000000000000000000D9 +:1028000000000000000000000000000000000000C8 +:1028100000000000000000000000000000000000B8 +:1028200000000000000000000000000000000000A8 +:102830000000000000000000000000000000000098 +:102840000000000000000000000000000000000088 +:102850000000000000000000000000000000000078 +:102860000000000000000000000000000000000068 +:102870000000000000000000000000000000000058 +:102880000000000000000000000000000000000048 +:102890000000000000000000000000000000000038 +:1028A0000000000000000000000000000000000028 +:1028B0000000000000000000000000000000000018 +:1028C0000000000000000000000000000000000008 +:1028D00000000000000000000000000000000000F8 +:1028E00000000000000000000000000000000000E8 +:1028F00000000000000000000000000000000000D8 +:1029000000000000000000000000000000000000C7 +:1029100000000000000000000000000000000000B7 +:1029200000000000000000000000000000000000A7 +:102930000000000000000000000000000000000097 +:102940000000000000000000000000000000000087 +:102950000000000000000000000000000000000077 +:102960000000000000000000000000000000000067 +:102970000000000000000000000000000000000057 +:102980000000000000000000000000000000000047 +:102990000000000000000000000000000000000037 +:1029A0000000000000000000000000000000000027 +:1029B0000000000000000000000000000000000017 +:1029C0000000000000000000000000000000000007 +:1029D00000000000000000000000000000000000F7 +:1029E00000000000000000000000000000000000E7 +:1029F00000000000000000000000000000000000D7 +:102A000000000000000000000000000000000000C6 +:102A100000000000000000000000000000000000B6 +:102A200000000000000000000000000000000000A6 +:102A30000000000000000000000000000000000096 +:102A40000000000000000000000000000000000086 +:102A50000000000000000000000000000000000076 +:102A60000000000000000000000000000000000066 +:102A70000000000000000000000000000000000056 +:102A80000000000000000000000000000000000046 +:102A90000000000000000000000000000000000036 +:102AA0000000000000000000000000000000000026 +:102AB0000000000000000000000000000000000016 +:102AC0000000000000000000000000000000000006 +:102AD00000000000000000000000000000000000F6 +:102AE00000000000000000000000000000000000E6 +:102AF00000000000000000000000000000000000D6 +:102B000000000000000000000000000000000000C5 +:102B100000000000000000000000000000000000B5 +:102B200000000000000000000000000000000000A5 +:102B30000000000000000000000000000000000095 +:102B40000000000000000000000000000000000085 +:102B50000000000000000000000000000000000075 +:102B60000000000000000000000000000000000065 +:102B70000000000000000000000000000000000055 +:102B80000000000000000000000000000000000045 +:102B90000000000000000000000000000000000035 +:102BA0000000000000000000000000000000000025 +:102BB0000000000000000000000000000000000015 +:102BC0000000000000000000000000000000000005 +:102BD00000000000000000000000000000000000F5 +:102BE00000000000000000000000000000000000E5 +:102BF00000000000000000000000000000000000D5 +:102C000000000000000000000000000000000000C4 +:102C100000000000000000000000000000000000B4 +:102C200000000000000000000000000000000000A4 +:102C30000000000000000000000000000000000094 +:102C40000000000000000000000000000000000084 +:102C50000000000000000000000000000000000074 +:102C60000000000000000000000000000000000064 +:102C70000000000000000000000000000000000054 +:102C80000000000000000000000000000000000044 +:102C90000000000000000000000000000000000034 +:102CA0000000000000000000000000000000000024 +:102CB0000000000000000000000000000000000014 +:102CC0000000000000000000000000000000000004 +:102CD00000000000000000000000000000000000F4 +:102CE00000000000000000000000000000000000E4 +:102CF00000000000000000000000000000000000D4 +:102D000000000000000000000000000000000000C3 +:102D100000000000000000000000000000000000B3 :102D200000000000000000000000000000000000A3 -:102D300000000000000000000000000003FF00FF92 -:102D4000FF3FFFCFFFF3FFFCFFFF3FFFCFFFF3FF8E -:102D5000FCFFFF3FFFCFFFF3FFFCFFFF3FFFCFFF75 -:102D6000F00AFC0000001000000000000800000055 +:102D30000000000000000000000000000000000093 +:102D40000000000000000000000000000000000083 +:102D50000000000000000000000000000000000073 +:102D60000000000000000000000000000000000063 :102D70000000000000000000000000000000000053 :102D80000000000000000000000000000000000043 -:102D900000003FFFCFFFF3FFFCFFFF3FFFCFFFF33C -:102DA000FFFCFFFF3FFFCFFFF00AFC000000100018 -:102DB000000000000800000000000000000000000B +:102D90000000000000000000000000000000000033 +:102DA0000000000000000000000000000000000023 +:102DB0000000000000000000000000000000000013 :102DC0000000000000000000000000000000000003 :102DD00000000000000000000000000000000000F3 :102DE00000000000000000000000000000000000E3 @@ -247433,149 +243336,149 @@ :1064B00000000000000000000000000000000000DC :1064C00000000000000000000000000000000000CC :1064D00000000000000000000000000000000000BC -:1064E00000000000000000000000000000000000AC -:1064F000000000000000000000000000000000009C +:1064E0000000000000000011000400010000001185 +:1064F000100444411110444400000000000000005A :10650000000000000000000000000000000000008B :10651000000000000000000000000000000000007B -:10652000000000000000000000000000000000006B -:10653000000000000000000000000000000000005B +:106520000000000000000000000000000000080063 +:106530000004000000000000000000000000000057 :10654000000000000000000000000000000000004B :10655000000000000000000000000000000000003B :10656000000000000000000000000000000000002B -:10657000000000000000000000000000000000001B -:10658000000000000000000000000000000000000B -:1065900000000000000000000000000000000000FB -:1065A00000000000000000000000000000000000EB -:1065B00000000000000000000000000000000000DB -:1065C00000000000000000000000000000000000CB -:1065D00000000000000000000000000000000000BB -:1065E00000000000000000000000000000000000AB -:1065F000000000000000000000000000000000009B -:10660000000000000000000000000000000000008A -:10661000000000000000000000000000000000007A -:10662000000000000000000000000000000000006A -:10663000000000000000000000000000000000005A -:10664000000000000000000000000000000000004A -:10665000000000000000000000000000000000003A -:10666000000000000000000000000000000000002A -:10667000000000000000000000000000000000001A -:10668000000000000000000000000000000000000A -:1066900000000000000000000000000000000000FA -:1066A00000000000000000000000000000000000EA -:1066B00000000000000000000000000000000000DA -:1066C00000000000000000000000000000000000CA -:1066D00000000000000000000000000000000000BA -:1066E00000000000000000000000000000000000AA -:1066F000000000000000000000000000000000009A -:106700000000000000000000000000000000000089 -:106710000000000000000000000000000000000079 -:106720000000000000000000000000000000000069 -:106730000000000000000000000000000000000059 -:106740000000000000000000000000000000000049 -:106750000000000000000000000000000000000039 -:106760000000000000000000000000000000000029 -:106770000000000000000000000000000000000019 -:106780000000000000000000000000000000000009 -:1067900000000000000000000000000000000000F9 -:1067A00000000000000000000000000000000000E9 -:1067B00000000000000000000000000000000000D9 -:1067C00000000000000000000000000000000000C9 -:1067D00000000000000000000000000000000000B9 -:1067E00000000000000000000000000000000000A9 -:1067F0000000000000000000000000000000000099 -:106800000000000000000000000000000000000088 -:106810000000000000000000000000000000000078 -:106820000000000000000000000000000000000068 -:106830000000000000000000000000000000000058 -:106840000000000000000000000000000000000048 -:106850000000000000000000000000000000000038 -:106860000000000000000000000000000000000028 -:106870000000000000000000000000000000000018 -:106880000000000000000000000000000000000008 -:1068900000000000000000000000000000000000F8 -:1068A00000000000000000000000000000000000E8 -:1068B00000000000000000000000000000000000D8 -:1068C00000000000000000000000000000000000C8 -:1068D00000000000000000000000000000000000B8 -:1068E00000000000000000000000000000000000A8 -:1068F0000000000000000000000000000000000098 -:106900000000000000000000000000000000000087 -:106910000000000000000000000000000000000077 -:106920000000000000000000000000000000000067 -:106930000000000000000000000000000000000057 -:106940000000000000000000000000000000000047 -:106950000000000000000000000000000000000037 -:106960000000000000000000000000000000000027 -:106970000000000000000000000000000000000017 -:106980000000000000000000000000000000000007 -:1069900000000000000000000000000000000000F7 -:1069A00000000000000000000000000000000000E7 -:1069B00000000000000000000000000000000000D7 -:1069C00000000000000000000000000000000000C7 -:1069D00000000000000000000000000000000000B7 -:1069E00000000000000000000000000000000000A7 -:1069F0000000000000000000000000000000000097 -:106A00000000000000000000000000000000000086 -:106A10000000000000000000000000000000000076 -:106A20000000000000000000000000000000000066 -:106A30000000000000000000000000000000000056 -:106A40000000000000000000000000000000000046 -:106A50000000000000000000000000000000000036 -:106A60000000000000000000000000000000000026 -:106A70000000000000000000000000000000000016 -:106A80000000000000000000000000000000000006 -:106A900000000000000000000000000000000000F6 -:106AA00000000000000000000000000000000000E6 -:106AB00000000000000000000000000000000000D6 -:106AC00000000000000000000000000000000000C6 -:106AD00000000000000000000000000000000000B6 -:106AE00000000000000000000000000000000000A6 -:106AF0000000000000000000000000000000000096 -:106B00000000000000000000000000000000000085 -:106B10000000000000000000000000000000000075 -:106B20000000000000000000000000000000000065 -:106B30000000000000000000000000000000000055 -:106B40000000000000000000000000000000000045 -:106B50000000000000000000000000000000000035 -:106B60000000000000000000000000000000000025 -:106B70000000000000000000000000000000000015 -:106B80000000000000000000000000000000000005 -:106B900000000000000000000000000000000000F5 -:106BA00000000000000000000000000000000000E5 -:106BB00000000000000000000000000000000000D5 -:106BC00000000000000000000000000000000000C5 -:106BD00000000000000000000000000000000000B5 -:106BE00000000000000000000000000000000000A5 -:106BF0000000000000000000000000000000000095 -:106C00000000000000000000000000000000000084 -:106C10000000000000000000000000000000000074 -:106C20000000000000000000000000000000000064 -:106C30000000000000000000000000000000000054 -:106C40000000000000000000000000000000000044 -:106C50000000000000000000000000000000000034 -:106C60000000000000000000000000000000000024 -:106C70000000000000000000000000000000000014 -:106C80000000000000000000000000000000000004 -:106C900000000000000000000000000000000000F4 -:106CA00000000000000000000000000000000000E4 -:106CB00000000000000000000000000000000000D4 -:106CC00000000000000000000000000000000000C4 -:106CD00000000000000000000000000000000000B4 -:106CE00000000000000000000000000000000000A4 -:106CF0000000000000000000000000000000000094 -:106D00000000000000000000000000000000000083 -:106D10000000000000000000000000000000000073 +:106570000000000000002840480220400002000106 +:1065800020800080082090800000000000000002B1 +:10659000000080000000040000002484810100004D +:1065A00000000000000000000000000000000100EA +:1065B00000180408C2011000100220042204080080 +:1065C000000000400842020802010240821004015B +:1065D00001004240600000120300000209000400B4 +:1065E000000000000820000800042208810240800A +:1065F0000810041000800400400000400000080063 +:1066000001502240249224900180400408400A084E +:106610000001088140200200042002808000000068 +:10662000190410008010420450080000040192EB8D +:10663000E8BEA8000B80120044000081040084081A +:1066400080112800A400000000000000410008168E +:106650000000021040000008204C002000800000D4 +:1066600008080062101000E8C010DD40B1000014FE +:10667000801808000041100200803000010800006E +:106680000000000000004000A0200000000000000A +:1066900000000000000011800013A088A088B8232B +:1066A0000008C50002C40000175EC00C9020000363 +:1066B00060321040C00000900104020202006050ED +:1066C00008B00008044040209B001085040C0080A6 +:1066D000504000500820200050220000802A08026C +:1066E0008010200200BFC13C060231F001340208D4 +:1066F000164408217000B01040088A0040409604FB +:1067000040050002802180A400404100000002807A +:106710000088048000000800008000002A3224085D +:1067200042800C00110006000290008224281238DA +:10673000400A8680940021083D82000F717FF0DFBF +:106740006F07FF8DC2F0000880403C00000C120271 +:1067500000D049284007A972B344820E0D300A0ABE +:10676000B35858C8D000C80B2D312550950D0040A6 +:1067700080240022500408042002120252E010413A +:1067800011A60D41401208334B0112060411466850 +:106790000B500310CACB12600064211698084D807C +:1067A0008000098022024414420200D29000CB08EB +:1067B000AD128B3002A202088819313030434330C9 +:1067C000B347434001081634000140808042500026 +:1067D0000224004014521450050015B0880AA01875 +:1067E000540E000424090B910008024805A4CAA114 +:1067F0006101444102001E4A8E010104286A0D2AEB +:10680000831CA29A08941A2B1C025000B12C6023FE +:10681000241586981115804C4C0F11022380000816 +:10682000E2862D2E845000088060030B92C0C100C8 +:10683000ACEC3552260B09A8408150A40308818195 +:10684000F28191C044A4020201948043505112216C +:1068500000880800000020002010020181040400CC +:10686000010004041A00D00029000C040080B104C7 +:1068700000D216028080B490420091010A200000EC +:1068800002D340258002D24039000000010C0000F4 +:1068900000000019502211000A0820000000080022 +:1068A00020800080610000100002340040000300DE +:1068B000149412808A000019544580308A41029352 +:1068C000C8900D00026208031080800200000008DA +:1068D00090E00848900020000168827048C4470892 +:1068E00020088802D4C47A403CACC41322711849F1 +:1068F0004033220240A28350A102108D81A6A0093C +:106900008882550400010901D4A073B11131012E10 +:1069100080A3E0315827D40402300000000008A210 +:1069200002AC22FD0090C604948C4010E00CB00430 +:106930000B1808344018B88B4434344DE471AA2045 +:106940003A440EA00121C0048CA14105544DA3D2AC +:10695000335009522900C42D024104327E00480000 +:1069600005400000000001100020202510025010FA +:1069700040000020950C4001020008200001204C3E +:10698000403008088110000094AA08C98510110839 +:10699000001428042540002100000000000A000126 +:1069A00040000050020910C3490000280000088080 +:1069B000000002000080100042040022400000405D +:1069C00010024104801500200800A94C922068485C +:1069D00002041302046A2020C40802289300046001 +:1069E00010800A2000480204C010000000280000A7 +:1069F0000100040400800080010C43D400208000CA +:106A0000810201410280100000000000001000001F +:106A10000002800002001830000020004001020047 +:106A20001000801DF00019810080300800800000F7 +:106A300000200402282CA2000800A0C0382000403A +:106A40000004022000A002003300E0C01420014036 +:106A50000000804000804000A8000000008000206E +:106A600020000000010000090805070022001000B6 +:106A700000000A0000000011028840454420004A3E +:106A8000002282200110080040219101040004002E +:106A90000040000000000080206000220000000094 +:106AA0000008400008A00000200001010004924AF4 +:106AB00008845008E004280040245090090448004D +:106AC000800008000000A1009001002000080100E3 +:106AD00008000200001000000081040104081C08E6 +:106AE000000002910044200000020000000151500B +:106AF0004A1122410108210828082800004000000E +:106B00004180800000008C00229A0C500400004854 +:106B10000022D400120200C008A80085002FBE3752 +:106B200080CE027025DC03C00000040360231C2813 +:106B300002000E000242D0001E2426510187B0EB55 +:106B4000A42311026C00000124002000250A06B8CD +:106B50008233CC99F73A01009773BF40E0920977EE +:106B6000CBFC12212C0A8A210E0482907F906208AD +:106B7000002C0414101508A14C006400006020B023 +:106B80002000088040421010000019003E00000361 +:106B9000A16801010600080040F004311213C5414C +:106BA00040010600000000000000800000105200BC +:106BB0000800A940000000000700000020001000AD +:106BC0008000200040200040000200000000002063 +:106BD0000007F000000002010020800030400000AB +:106BE0000004004000204040080000200400040091 +:106BF000000000001804000891000042020002108A +:106C0000201080010005004028028048050050083F +:106C100000A002000A0000000000000000080001BF +:106C20000000000000000020000000000000000044 +:106C30000000000010000000000000000010000034 +:106C400001000820802011AB042206042078C046F1 +:106C50000C327CCB27C0993836640306003C6018A0 +:106C6000000D0002C98F0992742466CE0078C030EE +:106C70000060C0618026CD8DB2F2C9908C6C046832 +:106C800048D1E0211C01811326CF3261F3A49B3649 +:106C900001E34C1A30E18000420993036131326410 +:106CA00013A6060C0070C3860C346813264B36619D +:106CB000D324C8460E1E008420D084D08D24210900 +:106CC000D09366C4366C23468A3460884445B33218 +:106CD0007D03A300CC24707B08690A470260846CA2 +:106CE0008E02FB8AE65061C0ED6F2135C01391C959 +:106CF00084977D055B030300010000540008CFFF6B +:106D0000300000001429914BF19002B80F203FFC95 +:106D10000000F000001810000402006000001000E5 :106D20000000000000000000000000000000000063 :106D30000000000000000000000000000000000053 -:106D40000000000000000000000000000000000043 -:106D50000000000000000000000000000000000033 -:106D60000000000000000000000000000000000023 -:106D70000000000000000000000000000000000013 +:106D4000000000000000000003FF00FFFF0000C083 +:106D50000000000000003FFF0FFFF3FFFCFFFF00FB +:106D600000C00000000000003FFF0FFFF00AFC0021 +:106D700000000000000000001020000000000000E3 :106D80000000000000000000000000000000000003 -:106D900000000000000000000000000000000000F3 -:106DA00000000000000000000000000000000000E3 -:106DB00000000000000000000000000000000000D3 -:106DC00000000000000000000000000000000000C3 +:106D900000000000000000000000000000003FFFB5 +:106DA0000FFFF3FFFCFFFF0000C000000000000029 +:106DB0003FFF0FFFF00AFC00000000000000000091 +:106DC0001020000000000000000000000000000093 :106DD00000000000000000000000000000000000B3 :106DE00000000000000000000000000000000000A3 :106DF0000000000000000000000000000000000093 @@ -249484,437 +245387,4534 @@ :10E4E000000000000000000000000000000000002C :10E4F000000000000000000000000000000000001C :10E50000000000000000000000000000000000000B -:10E5100000000000000008000000000000000000F3 +:10E5100000000000000000000000000000000000FB :10E5200000000000000000000000000000000000EB :10E5300000000000000000000000000000000000DB :10E5400000000000000000000000000000000000CB -:10E55000000000000000000000000000000020405B -:10E5600048882040000200012000000000208000B8 -:10E570000000800000000002000000000000000019 -:10E58000000000800001000000000000000000000A -:10E5900000000000000001000008200000010080D1 -:10E5A0000002010002000002000080020000800062 -:10E5B0000001000080000400000040000000000096 -:10E5C000000000000000040000080400002000001B -:10E5D000000400080100000000100410008000107A -:10E5E0004000000000000000011002002490248080 -:10E5F00041804004084002080001088040200200D9 -:10E6000004200080800000020904100080104204F1 -:10E6100010080000044092EBC8BC82004B80101030 -:10E6200044000001040084088011A08486010800D1 -:10E630000000000000000810400002104000000828 -:10E64000204008000080000000080020001000E8C2 -:10E6500000105D4010200000801800000403100A24 -:10E660000012100000080000000408101000010053 -:10E6700020020420040040020040040040080880FA -:10E6800000006028608000210008C50002C48200EC -:10E69000175E800C900000012410004040000090A4 -:10E6A00000000200000020400000000804000000FC -:10E6B000800000801404008050400050082020009A -:10E6C00050220000802A08028010200200BED12CB7 -:10E6D000460A31F000000000000204004000D010A3 -:10E6E000400000000040900440040000000000A42E -:10E6F0000000400000000280008804800000080044 -:10E70000008000002A322408428008081100060018 -:10E7100008000092A848101A49028280144421007F -:10E720003DC20009339FF0D77F39FFCD42C00008BA -:10E7300000003C000000020200D049284004011003 -:10E74000334080000D30080A30185848D000C00A05 -:10E750002D31A540940400408124002200040804C7 -:10E76000200010010A00100819A60D01425328B319 -:10E770004A084306040146682B400008C8CA1260D4 -:10E780008060A51698086D81800009822FF9449653 -:10E79000520630D2800003082D12CB30AAB2000AF4 -:10E7A00080193130305F4B3030474B420128162002 -:10E7B000110080A2A00350202224000090529E50FD -:10E7C000210010800A2AA018000A00000089010117 -:10E7D000000807481534CA854101540912001C4A33 -:10E7E0008A01000420680D100318A21A08141A23C5 -:10E7F00018035140A0846023201186981111A04D68 -:10E800004D03514A62000058C0000828000000086B -:10E810008460030B9280400008A0350026020000AF -:10E82000C0C1000003084101D28191C00626020147 -:10E8300001948023501106310184084052102000B9 -:10E840002010020181040400010004041A00D00019 -:10E8500009000C000000B00400D206008080B490D3 -:10E86000420090010820000002D340258002D240DF -:10E8700039000000010C00000000001914221100F2 -:10E880000A00200000000800208000006100001045 -:10E890000002340000000208048000008A000059D1 -:10E8A0005403021008010213C8900C000022082231 -:10E8B0001080000000000000904000009000200048 -:10E8C00003CC0275D4C4070000088802C0447A0053 -:10E8D0003C284413227158494032220240A20310BE -:10E8E0002002108981A620098882540400000001BA -:10E8F0009C8066F11131012E00ABE0B15C27C400B1 -:10E900001230408000801DF202EE33FD2098D60DBB -:10E9100094CE4890C10CB406031808344018B88B44 -:10E920004434344DE473AB203AC40EA04121C004FA -:10E930008CA14005544DA3523B5049F22900C4BD5F -:10E94000025104327E024A0005500000000001100E -:10E95000002020011002401040000020040C400064 -:10E96000020008200081200C40300808011000003F -:10E9700094AA08C18510110800140804054000205D -:10E9800000000000040A0201004000400208128258 -:10E9900049000028090008800000000000801000E5 -:10E9A00042040002400000400002410480050020B3 -:10E9B0000800294C90206A4802041302046A2020AF -:10E9C000C4080228930014608080090000480204F3 -:10E9D000C0200011002000000160040400800080BD -:10E9E000010C43D40020800081020141028010000C -:10E9F000000000000000000000028000020018304B -:10EA000000042000400102011010821DF100198154 -:10EA1000008034080080008000240402A82CE281D9 -:10EA2000000020E0382000400000022000A000008C -:10EA30003300E0C01420014000008040008040000E -:10EA4000A800100000800000200000000100000964 -:10EA5000081507000200100010000A020000001153 -:10EA6000028840454020004A002282201110080000 -:10EA700040019101040004000040000000000080FB -:10EA800020600022000000000008400008A00000F4 -:10EA9000200009010004924A88805408E0042800FC -:10EAA0000024509009000800800088008000810048 -:10EAB000100100000000010008000200001000002A -:10EAC0000081040105081C28000002900044200079 -:10EAD00000020004080151505A1122414108210846 -:10EAE00028082800004000000180800000000C0081 -:10EAF000228A0410040000480022D400120200C040 -:10EB000008A8008500273C2781CE063024CC03C00E -:10EB10000000040360210C2802000E000242D00015 -:10EB20001A2426410106B0EBA42311026C00000157 -:10EB300024002000250206288223CC99F73A010000 -:10EB400093319F40E0920933C9FC1201240A8A21C3 -:10EB50000E0082906F902208002C0414101508A15A -:10EB60004C006400006020B00000000040401044F1 -:10EB7000000008000A00000125600580060008006A -:10EB80004020001102108540408106040001000071 -:10EB900000008000001052000800A94000000000A2 -:10EBA00005000000200010008000200040200040F0 -:10EBB00000020000000000000007F0000000020159 -:10EBC00000208000304000000004000000204000D1 -:10EBD00008000020040004000000000000040008F9 -:10EBE0009100004080000000000000000001004093 -:10EBF0000800800801001000002000000200000052 -:10EC000000000000000800010000000000000000FB +:10E5500000000000000000000000000000000000BB +:10E5600000000000000000000000000000000000AB +:10E57000000000000000000000000000000000009B +:10E58000000000000000000000000000000000008B +:10E59000000000000000000000000000000000007B +:10E5A000000000000000000000000000000000006B +:10E5B000000000000000000000000000000000005B +:10E5C000000000000000000000000000000000004B +:10E5D000000000000000000000000000000000003B +:10E5E000000000000000000000000000000000002B +:10E5F000000000000000000000000000000000001B +:10E60000000000000000000000000000000000000A +:10E6100000000000000000000000000000000000FA +:10E6200000000000000000000000000000000000EA +:10E6300000000000000000000000000000000000DA +:10E6400000000000000000000000000000000000CA +:10E6500000000000000000000000000000000000BA +:10E6600000000000000000000000000000000000AA +:10E67000000000000000000000000000000000009A +:10E68000000000000000000000000000000000008A +:10E69000000000000000000000000000000000007A +:10E6A000000000000000000000000000000000006A +:10E6B000000000000000000000000000000000005A +:10E6C000000000000000000000000000000000004A +:10E6D000000000000000000000000000000000003A +:10E6E000000000000000000000000000000000002A +:10E6F000000000000000000000000000000000001A +:10E700000000000000000000000000000000000009 +:10E7100000000000000000000000000000000000F9 +:10E7200000000000000000000000000000000000E9 +:10E7300000000000000000000000000000000000D9 +:10E7400000000000000000000000000000000000C9 +:10E7500000000000000000000000000000000000B9 +:10E7600000000000000000000000000000000000A9 +:10E770000000000000000000000000000000000099 +:10E780000000000000000000000000000000000089 +:10E790000000000000000000000000000000000079 +:10E7A0000000000000000000000000000000000069 +:10E7B0000000000000000000000000000000000059 +:10E7C0000000000000000000000000000000000049 +:10E7D0000000000000000000000000000000000039 +:10E7E0000000000000000000000000000000000029 +:10E7F0000000000000000000000000000000000019 +:10E800000000000000000000000000000000000008 +:10E8100000000000000000000000000000000000F8 +:10E8200000000000000000000000000000000000E8 +:10E8300000000000000000000000000000000000D8 +:10E8400000000000000000000000000000000000C8 +:10E8500000000000000000000000000000000000B8 +:10E8600000000000000000000000000000000000A8 +:10E870000000000000000000000000000000000098 +:10E880000000000000000000000000000000000088 +:10E890000000000000000000000000000000000078 +:10E8A0000000000000000000000000000000000068 +:10E8B0000000000000000000000000000000000058 +:10E8C0000000000000000000000000000000000048 +:10E8D0000000000000000000000000000000000038 +:10E8E0000000000000000000000000000000000028 +:10E8F0000000000000000000000000000000000018 +:10E900000000000000000000000000000000000007 +:10E9100000000000000000000000000000000000F7 +:10E9200000000000000000000000000000000000E7 +:10E9300000000000000000000000000000000000D7 +:10E9400000000000000000000000000000000000C7 +:10E9500000000000000000000000000000000000B7 +:10E9600000000000000000000000000000000000A7 +:10E970000000000000000000000000000000000097 +:10E980000000000000000000000000000000000087 +:10E990000000000000000000000000000000000077 +:10E9A0000000000000000000000000000000000067 +:10E9B0000000000000000000000000000000000057 +:10E9C0000000000000000000000000000000000047 +:10E9D0000000000000000000000000000000000037 +:10E9E0000000000000000000000000000000000027 +:10E9F0000000000000000000000000000000000017 +:10EA00000000000000000000000000000000000006 +:10EA100000000000000000000000000000000000F6 +:10EA200000000000000000000000000000000000E6 +:10EA300000000000000000000000000000000000D6 +:10EA400000000000000000000000000000000000C6 +:10EA500000000000000000000000000000000000B6 +:10EA600000000000000000000000000000000000A6 +:10EA70000000000000000000000000000000000096 +:10EA80000000000000000000000000000000000086 +:10EA90000000000000000000000000000000000076 +:10EAA0000000000000000000000000000000000066 +:10EAB0000000000000000000000000000000000056 +:10EAC0000000000000000000000000000000000046 +:10EAD0000000000000000000000000000000000036 +:10EAE0000000000000000000000000000000000026 +:10EAF0000000000000000000000000000000000016 +:10EB00000000000000000000000000000000000005 +:10EB100000000000000000000000000000000000F5 +:10EB200000000000000000000000000000000000E5 +:10EB300000000000000000000000000000000000D5 +:10EB400000000000000000000000000000000000C5 +:10EB500000000000000000000000000000000000B5 +:10EB600000000000000000000000000000000000A5 +:10EB70000000000000000000000000000000000095 +:10EB80000000000000000000000000000000000085 +:10EB90000000000000000000000000000000000075 +:10EBA0000000000000000000000000000000000065 +:10EBB0000000000000000000000000000000000055 +:10EBC0000000000000000000000000000000000045 +:10EBD0000000000000000000000000000000000035 +:10EBE0000000000000000000000000000000000025 +:10EBF0000000000000000000000000000000000015 +:10EC00000000000000000000000000000000000004 :10EC100000000000000000000000000000000000F4 -:10EC2000000000000010000001020820800011AB6D -:10EC30000426029420285002041420434280081421 -:10EC4000102021428214210E10850804F08A10A0A1 -:10EC50002840C204022441121224482590224485EF -:10EC6000B6C2D8D08C6D062C4C58B21088089031A2 -:10EC7000624B1620B16089121081040E104080088A -:10EC80000010A14142121428014202040420414212 -:10EC90008410280102081020A140508404890842F1 -:10ECA00012C8404844246308908122401224112253 -:10ECB0004B122088205A7E29858A60638038D1E7EC -:10ECC000086E8BAD0320845D8201E4864410818C44 -:10ECD000102A0C47C011A2C130B6ED01BE4292808D -:10ECE00001040C4400044C0131000440142B840343 -:10ECF000D89003BCFFC03FFFC000F0000008100028 -:10ED0000040200800000200000000000000000005D +:10EC200000000000000000000000000000000000E4 +:10EC300000000000000000000000000000000000D4 +:10EC400000000000000000000000000000000000C4 +:10EC500000000000000000000000000000000000B4 +:10EC600000000000000000000000000000000000A4 +:10EC70000000000000000000000000000000000094 +:10EC80000000000000000000000000000000000084 +:10EC90000000000000000000000000000000000074 +:10ECA0000000000000000000000000000000000064 +:10ECB0000000000000000000000000000000000054 +:10ECC0000000000000000000000000000000000044 +:10ECD0000000000000000000000000000000000034 +:10ECE0000000000000000000000000000000000024 +:10ECF0000000000000000000000000000000000014 +:10ED00000000000000000000000000000000000003 :10ED100000000000000000000000000000000000F3 :10ED200000000000000000000000000000000000E3 -:10ED300003FF00FFFF3FFFCFFFF3FFFCFFFF3FFF9D -:10ED4000CFFFF3FFFCFFFF0000C000000000000049 -:10ED500000000000000200000000000000000000B1 +:10ED300000000000000000000000000000000000D3 +:10ED400000000000000000000000000000000000C3 +:10ED500000000000000000000000000000000000B3 :10ED600000000000000000000000000000000000A3 :10ED70000000000000000000000000000000000093 -:10ED80000000000000003FFFCFFFF3FFFCFFFF008B -:10ED900000C00000000000000000000000020000B1 +:10ED80000000000000000000000000000000000083 +:10ED90000000000000000000000000000000000073 :10EDA0000000000000000000000000000000000063 :10EDB0000000000000000000000000000000000053 :10EDC0000000000000000000000000000000000043 :10EDD0000000000000000000000000000000000033 :10EDE0000000000000000000000000000000000023 -:10EDF0000000001100040001000000111004444153 -:10EE00001110444400000000000000000000000059 +:10EDF0000000000000000000000000000000000013 +:10EE000000000451014440450411111110444441D3 +:10EE1000111044440444411110444411110444416C +:10EE200011104444111104444111104444111104BF +:10EE3000444111104444111104444111104444113F +:10EE400011044441111044441111090441141044A7 +:10EE5000441111044441111044441111044441115E +:10EE6000104444111104444111104444111104444C +:10EE70004111104444111104444111104444111132 +:10EE800004444111104444111104444111104444FC +:10EE9000111100604E00018030632019F88B188337 +:10EEA00011F8A01800F186260000001B800618C388 +:10EEB00018B030600C0B00F00045E2602860180DBF +:10EEC00000018980188067F830B8C0000046C06033 +:10EED00003018000C1830030830020004000100047 +:10EEE0006000182000C10010C0C000000060400099 +:10EEF00000060000000030000002D8C0C20100E19E +:10EF000001300000200000000180060000D02663D0 +:10EF10000F1800026002A04040000080C200000400 +:10EF200030C10608075060060001B00C02003EC266 +:10EF30000030400D00F80800C020346860361840EA +:10EF400080100F84800C02034786030C10C1000060 +:10EF50000C001802678020010000C18CF19980002C +:10EF6000A419080318C0031800000C0000000318BF +:10EF70007800000C3C0060C0C60C0006000E0000CB +:10EF8000001C00120019E181800033008003200082 +:10EF90000001D00210000000000E00016000842F6C +:10EFA000000800C00000800801001000801001006F +:10EFB000100203A00000300E30C0002780008463E0 +:10EFC000ED249A0118614C0CF3CD78812612104B78 +:10EFD0004300DA98090002820200F0601020640CFD +:10EFE00014080C00820481E8170449805361B010B2 +:10EFF0001030240B50000844C1432C600C03320332 +:10F0000000001D00700380006CC00C00019800001F +:10F0100040031CC6400C18C30000307006CC26D933 +:10F02000CB01D070C8D70C2B03000311606C0E19F4 +:10F0300000200B01808000002B19B58C5BC2198861 +:10F04000300101B00C6302D3A848131A6902828010 +:10F05000144461000033C000000000000000000004 +:10F0600000038668CC6001B30D80001BC018300D12 +:10F0700080091C00C00C21E30600C00CD369803657 +:10F080000103278DA602980019B336508ED841B0DF +:10F090007864A324A4C357318C18643C28C00001B1 +:10F0A000936D30C0003C6D0019019A303000302B58 +:10F0B00043000001D893C6130041B4B0F6C06CC33E +:10F0C0000000040000198C003E0C0C00C0034C0032 +:10F0D00022D6036887860200C8916900C9C5698283 +:10F0E0001908001E113680222009602C22368D80DE +:10F0F000C6408B6086F618864A232003FC00000673 +:10F10000060C09000168050A16980005A008580AAF +:10F1100016000200800020343CC320130C001010A5 +:10F1200000DA602C00416B60008000CC13C6030045 +:10F13000629EB4A5A501694D4C83045003D800001C +:10F14000C06EA3B43082BE000C400630B4B4C00818 +:10F15000000D0080B04D20D03027460A5AF30160E0 +:10F1600042D200110160C322581804110906F4604C +:10F170005350E4010C3002018100DC6DB31E060621 +:10F180001A0059EC890019F84F0C02379800610CED +:10F190003000000318D8DE183C36000CC0033006DF +:10F1A000D80000098CC3000499C639984C33106DFF +:10F1B0001000CD018A009100000069001966001856 +:10F1C000314000CCF00B99860020606080C3233270 +:10F1D000023193030000000000020C00300C618C2F +:10F1E0000FD8CC29836C080014030000460000608F +:10F1F0001800180008B6002014360021B0000C10CA +:10F200000E180060060601F8018E40B00F0001C123 +:10F210008300CCE01830257600181100087D812B82 +:10F22000FFC00C0008809540060040C20000001896 +:10F230000000780E01000004000026530352114024 +:10F2400020000328100300D03100C40231800016D2 +:10F2500001000000010006003002C580889803000C +:10F26000C1004002A8004906AB06A0922C00068C03 +:10F27000353600966041001A2A0AEA019DD330CC47 +:10F280006D91061A0C3D9021101A403040C031A0FB +:10F29000050C0000038008200281600F413958C826 +:10F2A0000003600096AA18018DD3116800740C3316 +:10F2B00000480C036034AC0C3C0C460183C0006079 +:10F2C0000009DE824D0199A8A36908CC46C2B0E6C8 +:10F2D0000CC6D006430600036C600300032A4D866B +:10F2E0008005A0B468002D4498236A4C162C1B8618 +:10F2F000C6630166F41B160C1B82D6620AA46C312D +:10F3000033480C8300D020C600330C0C010001B43C +:10F3100066602CD983F67303E4B0DE0103C240417A +:10F3200000C0620338C60656C3646C673912C980D0 +:10F330006280EF0062C3290984C102F0040029152C +:10F340006CCC00800C00303E06E0C818303034C071 +:10F350002E034C010310303828180046C00001B0BD +:10F360000028000198C0BC00143C0D660880C260F3 +:10F3700000C6000CAC0C130C00C001802800000378 +:10F38000012001966C153300038CD80016003A0258 +:10F39000266CC0D1908B60454032824814220C30DC +:10F3A00077D826C60306D0EC60199A0456001111CE +:10F3B0008400068020680B0700888800022B40012B +:10F3C00076104444A80009104006120AE899D40CAB +:10F3D000D045AEB2332C58D10D198CECB2001802C6 +:10F3E000000181049C314000186000C6CC196330D4 +:10F3F000B075083060099601EC0CE1AE018C461D39 +:10F40000C25F3C633119ACC58B604D005B1D02418E +:10F4100041CF61CF60CF603FF347B0030080016010 +:10F4200000F60477F083B0801820004E0032D4003C +:10F43000DA1A004288A860C500000700E1038403CF +:10F44000D800403F1D930144000C60891123804186 +:10F450008362540043260B6C0C109000B4D8661DD8 +:10F4600083C00083F688220001C0CB2C8181140068 +:10F47000140B86C360000170B86C36000017038659 +:10F48000C0E062078048D80382848CF73CC34FD821 +:10F4900003E0040C010621808E21A600C55722023C +:10F4A0008550133CFC006200000C00C021B0C1007C +:10F4B0000200058340021083623005460063C300EA +:10F4C000600018678FE6E0ED9CFB7B3FEC48FF7225 +:10F4D000419C906621508066F233F80BA00030C644 +:10F4E00061B0A26460130D000188002780FFF10065 +:10F4F00080CD04818E3062010EBC4389E1BDC4021F +:10F50000BB18004010128A280E560506C0C1B0581C +:10F510002060B22CD9803050184000C00006040092 +:10F5200061316072CE2CE58E59C19CB026390488B9 +:10F53000CAC6106C90061700008E2A01ACC00003EA +:10F5400006030586000C044005016000C403018029 +:10F55000C3000602804282216063011809804CC00A +:10F56000A4007D9604200084200810408104080037 +:10F570004081020404082040820401021081080432 +:10F5800010021020084040810408020420081008DE +:10F590002100810104101020084104084810202196 +:10F5A000001021204082040020400204102041026B +:10F5B0000010200842102040420204082040008130 +:10F5C0000408104080040820408204002040108479 +:10F5D0000102008420108410810842002100408430 +:10F5E0000408204082040088400000000000000061 +:10F5F000000000000000000000000000000000000B +:10F6000000000000000000000000000000000000FA +:10F610000000000000004000101D4000005410D009 +:10F62000141ADA0C46F043B8000000000000000095 +:10F6300000DEB000000000000000400000000000FC +:10F6400000000000000000000000000000000000BA +:10F6500000000000000000000000000000000000AA +:10F66000000000000000000000000000000000009A +:10F67000000000000000000000000000000000008A +:10F680000000000000000000000200000000000078 +:10F690000000000008000000000000000000000062 +:10F6A000000000000000000000000000000000005A +:10F6B000000000000000000000000000000000004A +:10F6C000000000000000000000000000000000003A +:10F6D0000002000000000000000000000800000020 +:10F6E000000000000000000000000000000000001A +:10F6F000000000000000000000000000000000000A +:10F7000000000000000000000000000000000000F9 +:10F7100000000000000000000000000000000000E9 +:10F720000000000000000001000440000000000094 +:10F7300000000000000000000000000000000000C9 +:10F7400000000000000000000000000000000000B9 +:10F7500000000000000000000000000000000000A9 +:10F760000000000000000000000000000000000099 +:10F770000004000000000000000000000000000085 +:10F780000000000000000000000000000000000079 +:10F790000000000000000000000000000000000069 +:10F7A0000000000000000000000000000000000059 +:10F7B0000000000000002A444881004C00020001C3 +:10F7C0002080248008208000000880800000000A3B +:10F7D000001000000021000821200080000100002E +:10F7E00000000200000020000000000004000101F1 +:10F7F00021182408D0091000002220040200004033 +:10F800000110000000021000000100008000042030 +:10F8100010084004009080002004840200100400BE +:10F820000000000080200081000400080940000062 +:10F830000810041000800400400000410000048013 +:10F8400008100A40649024804180400C48000A2837 +:10F85000144908814060880024208281814240024E +:10F86000190451808052420450181424044192EB30 +:10F87000C8BCA4015B8010004400004D0400840853 +:10F8800080912000B4010000000000002180188059 +:10F890004000023140000118A040080000000000B4 +:10F8A00008080000001004E84010DD409000001837 +:10F8B0000018084801AB100A008030000008000062 +:10F8C00002C4001010004100A022002004004002E9 +:10F8D0000040040040080880000060206091012181 +:10F8E0000008C50002C40000175E892D92A9040318 +:10F8F00020320040C0000890410002020011615017 +:10F9000000000008000040A1000013003410009027 +:10F910004040005008202000D0220000802A080229 +:10F9200082302002000991184102082000040208D8 +:10F93000024408217040901040008A4040409624C4 +:10F9400044850400002000A4004241080200028017 +:10F950000080048000000040208000800A332400E2 +:10F9600050000C08110006000A900010AC60003A2C +:10F97000090A96808044B108000200024020000875 +:10F9800080020000B910080C00803800000CE21260 +:10F9900000D0690940041010334080011D30080B6D +:10F9A000A0505848D000C00A0D31A5400404000002 +:10F9B0000A04002204040804200210018A0010082E +:10F9C00013A60D01725A28B34A086A06040166E8B4 +:10F9D0000B402E60C8CB12688462B11698086D8106 +:10F9E0008080488007C94002100610D290328B0AEE +:10F9F000AD10CB34A8320282003D313030430B30A1 +:10FA000030470B4200081020112480B2A20350207E +:10FA1000200002001012145025A430000808A01A7B +:10FA2000041A0000AC492801000003482524CA81BB +:10FA30004201440112001E4A2A01000428720D02EC +:10FA40000B1CB21A18061A231C031940B0046923B0 +:10FA5000229186985111A0494903504A6282601848 +:10FA6000C0012A280C058148E460632F9A80420176 +:10FA7000A8A03508262A00A040806090271C010914 +:10FA80008081D0C006340201029480219035D630A6 +:10FA900041840C0052102001211002018104040055 +:10FAA000010004045A00D0004900040680D0B104CB +:10FAB00008D216028080B490C620D1A10A6100004D +:10FAC00042D34025A002D2407B000000010D00007F +:10FAD00000000019102011000A0820000000080092 +:10FAE00020800080610000100000340040000B0006 +:10FAF000049410008A00001B7465001818012393F9 +:10FB0000CD904D000862080312CC800818100049FF +:10FB100090E000089000200001EC82505CC20700D9 +:10FB2000020A8802D4C47A0038AC441322751849FA +:10FB300040332A4242A203142002108D81B62029AC +:10FB4000808244040001010194A076F1113109ACD6 +:10FB500081EBE0215C27C4000230000000000CF2C1 +:10FB600002EE32BD2090C60D848C4000C00CB486DD +:10FB7000031C09344018B8034414344CC071AB0062 +:10FB800032C40EA00101C00404814005544983C061 +:10FB90001A504952280044BD021104327E024A0024 +:10FBA000040000000000111000A020111442411CAC +:10FBB00048000020148C50000A0008278001200C07 +:10FBC00000320A008110000084EA08C884000000A6 +:10FBD000001428042500002100000000040A02018E +:10FBE00040400050020812434101102800000880E4 +:10FBF00044000244008410004204002340000040FE +:10FC00001002410400050020080008080001280037 +:10FC10000204131204EA202240480228130414E0CC +:10FC200080800B00000802048000001042200000C9 +:10FC30000101440C00800080010C43D400208000AE +:10FC4000810201410280100000000000011000004C +:10FC50000002C00002001830000020004000020036 +:10FC60001000801DF000198100803408008400809D +:10FC700000240402282CE2010800A0E03820004003 +:10FC80000004022000A00200330060C014200040E5 +:10FC90000000804000804000A8001000008000208C +:10FCA00020000000010000090805070022001000E4 +:10FCB00000000A000000000102804045442000428C +:10FCC00000208220111008004221D14104110600B9 +:10FCD00004400000000000802068022200000000B4 +:10FCE0000008400008A00000000008010000804259 +:10FCF00000805008E00428000024509009000A0009 +:10FD000080000880000081001001000000000D004C +:10FD1000080002000010C6001181040114881C08AC +:10FD200000000B9000442000000A00000001505029 +:10FD30004A1002414108B108A408A42AA2450000C3 +:10FD40004180800000008C00229A0C500400004882 +:10FD50000022D000120220C008A00085002FBA2780 +:10FD600005CC1632B4CC03EA0800040360331CE867 +:10FD700002000E000242D0001E240E410187B1FB9A +:10FD8000002311026C0000012400A000250A46385F +:10FD900082239C99E73201009773BE4060920977F5 +:10FDA000CBEC12212C0E8A211E0483906F906208E6 +:10FDB000002C0414101508A14C006400006020B051 +:10FDC00020000880C0421190000019003E0000038E +:10FDD000A1E00101068208C000F004330213C5410E +:10FDE00040010600000000000000800000105200EA +:10FDF0000800A940000000000700000021081000D2 +:10FE00009A002000C42010400402000000010120DC +:10FE10000007F00402048001052000040000000037 +:10FE2000000400000002020200010020040014008F +:10FE30000000400044040008910080620204121097 +:10FE4000211080090001084008008008010010000E +:10FE500000202004000000001020002202080041C1 +:10FE60000030F3040120000002404006781E000923 +:10FE700000609004000020200030401800100000B6 +:10FE800001000822802011AB000001080204386143 +:10FE9000C10C08004101830C0E1C204100000185AB +:10FEA00008C08C041000102214202040040002041A +:10FEB000220C181C310000030C1228108C6304085B +:10FEC000482022508018332081000C0030A081028D +:10FED000302082060018308463100000C6030A0434 +:10FEE0001060000000180060C0060C200004000034 +:10FEF00030A02846000000800218C418C11040003D +:10FF000021002040020400000000008820000000C2 +:10FF100000000000000000000000000000000000E1 +:10FF200000000000000000000000000000000000D1 +:10FF3000000000000000000000000000000A43FF75 +:10FF4000010000540534404D24A000900000000042 +:10FF50000000000000181000040000C000001000A5 +:10FF60000000000000000000000000000000000091 +:10FF70000000000000000000000000000000000081 +:10FF8000000000000000000003FF00FFFF0000C0B1 +:10FF90000003FFF0FFFF0000C00003FFF0FFFF00C1 +:10FFA00000C00003FFF0FFFF0000C000000AF000E7 +:10FFB0000000000000000000080000000000000039 +:10FFC0000000000000000000000000000000000031 +:10FFD0000000000000000000000000000000000021 +:10FFE000C00003FFF0FFFF0000C00003FFF0FFFFB1 +:10FFF0000000C000000AF000000000000000000047 +:02000004003CBE +:1000000008000000000000000000000000000000E8 +:1000100000000000000000000000000000000000E0 +:1000200000000000000000000000000000000000D0 +:1000300000000000000000000000000000000000C0 +:1000400000000000000000000000000000000000B0 +:1000500000000000000000000000000000000000A0 +:100060000000000000000000000000000000000090 +:100070000000000000000000000000000000000080 +:100080000000000000000000000000000000000070 +:100090000000000000000000000000000000000060 +:1000A0000000000000000000000000000000000050 +:1000B0000000000000000000000000000000000040 +:1000C0000000000000000000000000000000000030 +:1000D0000000000000000000000000000000000020 +:1000E0000000000000000000000000000000000010 +:1000F0000000000000000000000000000000000000 +:1001000000000000000000000000000000000000EF +:1001100000000000000000000000000000000000DF +:1001200000000000000000000000000000000000CF +:1001300000000000000000000000000000000000BF +:1001400000000000000000000000000000000000AF +:10015000000000000000000000000000000000009F +:10016000000000000000000000000000000000008F +:10017000000000000000000000000000000000007F +:10018000000000000000000000000000000000006F +:10019000000000000000000000000000000000005F +:1001A000000000000000000000000000000000004F +:1001B000000000000000000000000000000000003F +:1001C000000000000000000000000000000000002F +:1001D000000000000000000000000000000000001F +:1001E000000000000000000000000000000000000F +:1001F00000000000000000000000000000000000FF +:1002000000000000000000000000000000000000EE +:1002100000000000000000000000000000000000DE +:1002200000000000000000000000000000000000CE +:1002300000000000000000000000000000000000BE +:1002400000000000000000000000000000000000AE +:10025000000000000000000000000000000000009E +:10026000000000000000000000000000000000008E +:10027000000000000000000000000000000000007E +:10028000000000000000000000000000000000006E +:10029000000000000000000000000000000000005E +:1002A000000000000000000000000000000000004E +:1002B000000000000000000000000000000000003E +:1002C000000000000000000000000000000000002E +:1002D000000000000000000000000000000000001E +:1002E000000000000000000000000000000000000E +:1002F00000000000000000000000000000000000FE +:1003000000000000000000000000000000000000ED +:1003100000000000000000000000000000000000DD +:1003200000000000000000000000000000000000CD +:1003300000000000000000000000000000000000BD +:1003400000000000000000000000000000000000AD +:10035000000000000000000000000000000000009D +:10036000000000000000000000000000000000008D +:10037000000000000000000000000000000000007D +:10038000000000000000000000000000000000006D +:10039000000000000000000000000000000000005D +:1003A000000000000000000000000000000000004D +:1003B000000000000000000000000000000000003D +:1003C000000000000000000000000000000000002D +:1003D000000000000000000000000000000000001D +:1003E000000000000000000000000000000000000D +:1003F00000000000000000000000000000000000FD +:1004000000000000000000000000000000000000EC +:1004100000000000000000000000000000000000DC +:1004200000000000000000000000000000000000CC +:1004300000000000000000000000000000000000BC +:1004400000000000000000000000000000000000AC +:10045000000000000000000000000000000000009C +:10046000000000000000000000000000000000008C +:10047000000000000000000000000000000000007C +:10048000000000000000000000000000000000006C +:10049000000000000000000000000000000000005C +:1004A000000000000000000000000000000000004C +:1004B000000000000000000000000000000000003C +:1004C000000000000000000000000000000000002C +:1004D000000000000000000000000000000000001C +:1004E000000000000000000000000000000000000C +:1004F00000000000000000000000000000000000FC +:1005000000000000000000000000000000000000EB +:1005100000000000000000000000000000000000DB +:1005200000000000000000000000000000000000CB +:1005300000000000000000000000000000000000BB +:1005400000000000000000000000000000000000AB +:10055000000000000000000000000000000000009B +:10056000000000000000000000000000000000008B +:10057000000000000000000000000000000000007B +:10058000000000000000000000000000000000006B +:10059000000000000000000000000000000000005B +:1005A000000000000000000000000000000000004B +:1005B000000000000000000000000000000000003B +:1005C000000000000000000000000000000000002B +:1005D000000000000000000000000000000000001B +:1005E000000000000000000000000000000000000B +:1005F00000000000000000000000000000000000FB +:1006000000000000000000000000000000000000EA +:1006100000000000000000000000000000000000DA +:1006200000000000000000000000000000000000CA +:1006300000000000000000000000000000000000BA +:1006400000000000000000000000000000000000AA +:10065000000000000000000000000000000000009A +:10066000000000000000000000000000000000008A +:10067000000000000000000000000000000000007A +:10068000000000000000000000000000000000006A +:10069000000000000000000000000000000000005A +:1006A000000000000000000000000000000000004A +:1006B000000000000000000000000000000000003A +:1006C000000000000000000000000000000000002A +:1006D000000000000000000000000000000000001A +:1006E000000000000000000000000000000000000A +:1006F00000000000000000000000000000000000FA +:1007000000000000000000000000000000000000E9 +:1007100000000000000000000000000000000000D9 +:1007200000000000000000000000000000000000C9 +:1007300000000000000000000000000000000000B9 +:1007400000000000000000000000000000000000A9 +:100750000000000000000000000000000000000099 +:100760000000000000000000000000000000000089 +:100770000000000000000000000000000000000079 +:100780000000000000000000000000000000000069 +:100790000000000000000000000000000000000059 +:1007A0000000000000000000000000000000000049 +:1007B0000000000000000000000000000000000039 +:1007C0000000000000000000000000000000000029 +:1007D0000000000000000000000000000000000019 +:1007E0000000000000000000000000000000000009 +:1007F00000000000000000000000000000000000F9 +:1008000000000000000000000000000000000000E8 +:1008100000000000000000000000000000000000D8 +:1008200000000000000000000000000000000000C8 +:1008300000000000000000000000000000000000B8 +:1008400000000000000000000000000000000000A8 +:100850000000000000000000000000000000000098 +:100860000000000000000000000000000000000088 +:100870000000000000000000000000000000000078 +:100880000000000000000000000000000000000068 +:100890000000000000000000000000000000000058 +:1008A0000000000000000000000000000000000048 +:1008B0000000000000000000000000000000000038 +:1008C0000000000000000000000000000000000028 +:1008D0000000000000000000000000000000000018 +:1008E0000000000000000000000000000000000008 +:1008F00000000000000000000000000000000000F8 +:1009000000000000000000000000000000000000E7 +:1009100000000000000000000000000000000000D7 +:1009200000000000000000000000000000000000C7 +:1009300000000000000000000000000000000000B7 +:1009400000000000000000000000000000000000A7 +:100950000000000000000000000000000000000097 +:100960000000000000000000000000000000000087 +:100970000000000000000000000000000000000077 +:100980000000000000000000000000000000000067 +:100990000000000000000000000000000000000057 +:1009A0000000000000000000000000000000000047 +:1009B0000000000000000000000000000000000037 +:1009C0000000000000000000000000000000000027 +:1009D0000000000000000000000000000000000017 +:1009E0000000000000000000000000000000000007 +:1009F00000000000000000000000000000000000F7 +:100A000000000000000000000000000000000000E6 +:100A100000000000000000000000000000000000D6 +:100A200000000000000000000000000000000000C6 +:100A300000000000000000000000000000000000B6 +:100A400000000000000000000000000000000000A6 +:100A50000000000000000000000000000000000096 +:100A60000000000000000000000000000000000086 +:100A70000000000000000000000000000000000076 +:100A80000000000000000000000000000000000066 +:100A90000000000000000000000000000000000056 +:100AA0000000000000000000000000000000000046 +:100AB0000000000000000000000000000000000036 +:100AC0000000000000000000000000000000000026 +:100AD0000000000000000000000000000000000016 +:100AE0000000000000000000000000000000000006 +:100AF00000000000000000000000000000000000F6 +:100B000000000000000000000000000000000000E5 +:100B100000000000000000000000000000000000D5 +:100B200000000000000000000000000000000000C5 +:100B300000000000000000000000000000000000B5 +:100B400000000000000000000000000000000000A5 +:100B50000000000000000000000000000000000095 +:100B60000000000000000000000000000000000085 +:100B70000000000000000000000000000000000075 +:100B80000000000000000000000000000000000065 +:100B90000000000000000000000000000000000055 +:100BA0000000000000000000000000000000000045 +:100BB0000000000000000000000000000000000035 +:100BC0000000000000000000000000000000000025 +:100BD0000000000000000000000000000000000015 +:100BE0000000000000000000000000000000000005 +:100BF00000000000000000000000000000000000F5 +:100C000000000000000000000000000000000000E4 +:100C100000000000000000000000000000000000D4 +:100C200000000000000000000000000000000000C4 +:100C300000000000000000000000000000000000B4 +:100C400000000000000000000000000000000000A4 +:100C50000000000000000000000000000000000094 +:100C60000000000000000000000000000000000084 +:100C70000000000000000000000000000000000074 +:100C80000000000000000000000000000000000064 +:100C90000000000000000000000000000000000054 +:100CA0000000000000000000000000000000000044 +:100CB0000000000000000000000000000000000034 +:100CC0000000000000000000000000000000000024 +:100CD0000000000000000000000000000000000014 +:100CE0000000000000000000000000000000000004 +:100CF00000000000000000000000000000000000F4 +:100D000000000000000000000000000000000000E3 +:100D100000000000000000000000000000000000D3 +:100D200000000000000000000000000000000000C3 +:100D300000000000000000000000000000000000B3 +:100D400000000000000000000000000000000000A3 +:100D50000000000000000000000000000000000093 +:100D60000000000000000000000000000000000083 +:100D70000000000000000000000000000000000073 +:100D80000000000000000000000000000000000063 +:100D90000000000000000000000000000000000053 +:100DA0000000000000000000000000000000000043 +:100DB0000000000000000000000000000000000033 +:100DC0000000000000000000000000000000000023 +:100DD0000000000000000000000000000000000013 +:100DE0000000000000000000000000000000000003 +:100DF00000000000000000000000000000000000F3 +:100E000000000000000000000000000000000000E2 +:100E100000000000000000000000000000000000D2 +:100E200000000000000000000000000000000000C2 +:100E300000000000000000000000000000000000B2 +:100E400000000000000000000000000000000000A2 +:100E50000000000000000000000000000000000092 +:100E60000000000000000000000000000000000082 +:100E70000000000000000000000000000000000072 +:100E80000000000000000000000000000000000062 +:100E90000000000000000000000000000000000052 +:100EA0000000000000000000000000000000000042 +:100EB0000000000000000000000000000000000032 +:100EC0000000000000000000000000000000000022 +:100ED0000000000000000000000000000000000012 +:100EE0000000000000000000000000000000000002 +:100EF00000000000000000000000000000000000F2 +:100F000000000000000000000000000000000000E1 +:100F100000000000000000000000000000000000D1 +:100F200000000000000000000000000000000000C1 +:100F300000000000000000000000000000000000B1 +:100F400000000000000000000000000000000000A1 +:100F50000000000000000000000000000000000091 +:100F60000000000000000000000000000000000081 +:100F70000000000000000000000000000000000071 +:100F80000000000000000000000000000000000061 +:100F90000000000000000000000000000000000051 +:100FA0000000000000000000000000000000000041 +:100FB0000000000000000000000000000000000031 +:100FC0000000000000000000000000000000000021 +:100FD0000000000000000000000000000000000011 +:100FE0000000000000000000000000000000000001 +:100FF00000000000000000000000000000000000F1 +:1010000000000000000000000000000000000000E0 +:1010100000000000000000000000000000000000D0 +:1010200000000000000000000000000000000000C0 +:1010300000000000000000000000000000000000B0 +:1010400000000000000000000000000000000000A0 +:101050000000000000000000000000000000000090 +:101060000000000000000000000000000000000080 +:101070000000000000000000000000000000000070 +:101080000000000000000000000000000000000060 +:101090000000000000000000000000000000000050 +:1010A0000000000000000000000000000000000040 +:1010B0000000000000000000000000000000000030 +:1010C0000000000000000000000000000000000020 +:1010D0000000000000000000000000000000000010 +:1010E0000000000000000000000000000000000000 +:1010F00000000000000000000000000000000000F0 +:1011000000000000000000000000000000000000DF +:1011100000000000000000000000000000000000CF +:1011200000000000000000000000000000000000BF +:1011300000000000000000000000000000000000AF +:10114000000000000000000000000000000000009F +:10115000000000000000000000000000000000008F +:10116000000000000000000000000000000000007F +:10117000000000000000000000000000000000006F +:10118000000000000000000000000000000000005F +:10119000000000000000000000000000000000004F +:1011A000000000000000000000000000000000003F +:1011B000000000000000000000000000000000002F +:1011C000000000000000000000000000000000001F +:1011D000000000000000000000000000000000000F +:1011E00000000000000000000000000000000000FF +:1011F00000000000000000000000000000000000EF +:1012000000000000000000000000000000000000DE +:1012100000000000000000000000000000000000CE +:1012200000000000000000000000000000000000BE +:1012300000000000000000000000000000000000AE +:10124000000000000000000000000000000000009E +:10125000000000000000000000000000000000008E +:10126000000000000000000000000000000000007E +:10127000000000000000000000000000000000006E +:10128000000000000000000000000000000000005E +:10129000000000000000000000000000000000004E +:1012A000000000000000000000000000000000003E +:1012B000000000000000000000000000000000002E +:1012C000000000000000000000000000000000001E +:1012D000000000000000000000000000000000000E +:1012E00000000000000000000000000000000000FE +:1012F00000000000000000000000000000000000EE +:1013000000000000000000000000000000000000DD +:1013100000000000000000000000000000000000CD +:1013200000000000000000000000000000000000BD +:1013300000000000000000000000000000000000AD +:10134000000000000000000000000000000000009D +:10135000000000000000000000000000000000008D +:10136000000000000000000000000000000000007D +:10137000000000000000000000000000000000006D +:10138000000000000000000000000000000000005D +:10139000000000000000000000000000000000004D +:1013A000000000000000000000000000000000003D +:1013B000000000000000000000000000000000002D +:1013C000000000000000000000000000000000001D +:1013D000000000000000000000000000000000000D +:1013E00000000000000000000000000000000000FD +:1013F00000000000000000000000000000000000ED +:1014000000000000000000000000000000000000DC +:1014100000000000000000000000000000000000CC +:1014200000000000000000000000000000000000BC +:1014300000000000000000000000000000000000AC +:10144000000000000000000000000000000000009C +:10145000000000000000000000000000000000008C +:10146000000000000000000000000000000000007C +:10147000000000000000000000000000000000006C +:10148000000000000000000000000000000000005C +:10149000000000000000000000000000000000004C +:1014A000000000000000000000000000000000003C +:1014B000000000000000000000000000000000002C +:1014C000000000000000000000000000000000001C +:1014D000000000000000000000000000000000000C +:1014E00000000000000000000000000000000000FC +:1014F00000000000000000000000000000000000EC +:1015000000000000000000000000000000000000DB +:1015100000000000000000000000000000000000CB +:1015200000000000000000000000000000000000BB +:1015300000000000000000000000000000000000AB +:10154000000000000000000000000000000000009B +:10155000000000000000000000000000000000008B +:10156000000000000000000000000000000000007B +:10157000000000000000000000000000000000006B +:10158000000000000000000000000000000000005B +:10159000000000000000000000000000000000004B +:1015A000000000000000000000000000000000003B +:1015B000000000000000000000000000000000002B +:1015C000000000000000000000000000000000001B +:1015D000000000000000000000000000000000000B +:1015E00000000000000000000000000000000000FB +:1015F00000000000000000000000000000000000EB +:1016000000000000000000000000000000000000DA +:1016100000000000000000000000000000000000CA +:1016200000000000000000000000000000000000BA +:1016300000000000000000000000000000000000AA +:10164000000000000000000000000000000000009A +:10165000000000000000000000000000000000008A +:10166000000000000000000000000000000000007A +:10167000000000000000000000000000000000006A +:10168000000000000000000000000000000000005A +:10169000000000000000000000000000000000004A +:1016A000000000000000000000000000000000003A +:1016B000000000000000000000000000000000002A +:1016C000000000000000000000000000000000001A +:1016D000000000000000000000000000000000000A +:1016E00000000000000000000000000000000000FA +:1016F00000000000000000000000000000000000EA +:1017000000000000000000000000000000000000D9 +:1017100000000000000000000000000000000000C9 +:1017200000000000000000000000000000000000B9 +:1017300000000000000000000000000000000000A9 +:101740000000000000000000000000000000000099 +:101750000000000000000000000000000000000089 +:101760000000000000000000000000000000000079 +:101770000000000000000000000000000000000069 +:101780000000000000000000000000000000000059 +:101790000000000000000000000000000000000049 +:1017A0000000000000000000000000000000000039 +:1017B0000000000000000000000000000000000029 +:1017C0000000000000000000000000000000000019 +:1017D0000000000000000000000000000000000009 +:1017E00000000000000000000000000000000000F9 +:1017F00000000000000000000000000000000000E9 +:1018000000000000000000000000000000000000D8 +:1018100000000000000000000000000000000000C8 +:1018200000000000000000000000000000000000B8 +:1018300000000000000000000000000000000000A8 +:101840000000000000000000000000000000000098 +:101850000000000000000000000000000000000088 +:101860000000000000000000000000000000000078 +:101870000000000000000000000000000000000068 +:101880000000000000000000000000000000000058 +:101890000000000000000000000000000000000048 +:1018A0000000000000000000000000000000000038 +:1018B0000000000000000000000000000000000028 +:1018C0000000000000000000000000000000000018 +:1018D0000000000000000000000000000000000008 +:1018E00000000000000000000000000000000000F8 +:1018F00000000000000000000000000000000000E8 +:1019000000000000000000000000000000000000D7 +:1019100000000000000000000000000000000000C7 +:1019200000000000000000000000000000000000B7 +:1019300000000000000000000000000000000000A7 +:101940000000000000000000000000000000000097 +:101950000000000000000000000000000000000087 +:101960000000000000000000000000000000000077 +:101970000000000000000000000000000000000067 +:101980000000000000000000000000000000000057 +:101990000000000000000000000000000000000047 +:1019A0000000000000000000000000000000000037 +:1019B0000000000000000000000000000000000027 +:1019C0000000000000000000000000000000000017 +:1019D0000000000000000000000000000000000007 +:1019E00000000000000000000000000000000000F7 +:1019F00000000000000000000000000000000000E7 +:101A000000000000000000000000000000000000D6 +:101A100000000000000000000000000000000000C6 +:101A200000000000000000000000000000000000B6 +:101A300000000000000000000000000000000000A6 +:101A40000000000000000000000000000000000096 +:101A50000000000000000000000000000000000086 +:101A60000000000000000000000000000000000076 +:101A70000000000000000000000000000000000066 +:101A80000000000000000000000000000000000056 +:101A90000000000000000000000000000000000046 +:101AA0000000000000000000000000000000000036 +:101AB0000000000000000000000000000000000026 +:101AC0000000000000000000000000000000000016 +:101AD0000000000000000000000000000000000006 +:101AE00000000000000000000000000000000000F6 +:101AF00000000000000000000000000000000000E6 +:101B000000000000000000000000000000000000D5 +:101B100000000000000000000000000000000000C5 +:101B200000000000000000000000000000000000B5 +:101B300000000000000000000000000000000000A5 +:101B40000000000000000000000000000000000095 +:101B50000000000000000000000000000000000085 +:101B60000000000000000000000000000000000075 +:101B70000000000000000000000000000000000065 +:101B80000000000000000000000000000000000055 +:101B90000000000000000000000000000000000045 +:101BA0000000000000000000000000000000000035 +:101BB0000000000000000000000000000000000025 +:101BC0000000000000000000000000000000000015 +:101BD0000000000000000000000000000000000005 +:101BE00000000000000000000000000000000000F5 +:101BF00000000000000000000000000000000000E5 +:101C000000000000000000000000000000000000D4 +:101C100000000000000000000000000000000000C4 +:101C200000000000000000000000000000000000B4 +:101C300000000000000000000000000000000000A4 +:101C40000000000000000000000000000000000094 +:101C50000000000000000000000000000000000084 +:101C60000000000000000000000000000000000074 +:101C70000000000000000000000000000000000064 +:101C80000000000000000000000000000000000054 +:101C90000000000000000000000000000000000044 +:101CA0000000000000000000000000000000000034 +:101CB0000000000000000000000000000000000024 +:101CC0000000000000000000000000000000000014 +:101CD0000000000000000000000000000000000004 +:101CE00000000000000000000000000000000000F4 +:101CF00000000000000000000000000000000000E4 +:101D000000000000000000000000000000000000D3 +:101D100000000000000000000000000000000000C3 +:101D200000000000000000000000000000000000B3 +:101D300000000000000000000000000000000000A3 +:101D40000000000000000000000000000000000093 +:101D50000000000000000000000000000000000083 +:101D60000000000000000000000000000000000073 +:101D70000000000000000000000000000000000063 +:101D80000000000000000000000000000000000053 +:101D90000000000000000000000000000000000043 +:101DA0000000000000000000000000000000000033 +:101DB0000000000000000000000000000000000023 +:101DC0000000000000000000000000000000000013 +:101DD0000000000000000000000000000000000003 +:101DE00000000000000000000000000000000000F3 +:101DF00000000000000000000000000000000000E3 +:101E000000000000000000000000000000000000D2 +:101E100000000000000000000000000000000000C2 +:101E200000000000000000000000000000000000B2 +:101E300000000000000000000000000000000000A2 +:101E40000000000000000000000000000000000092 +:101E50000000000000000000000000000000000082 +:101E60000000000000000000000000000000000072 +:101E70000000000000000000000000000000000062 +:101E80000000000000000000000000000000000052 +:101E90000000000000000000000000000000000042 +:101EA0000000000000000000000000000000000032 +:101EB0000000000000000000000000000000000022 +:101EC0000000000000000000000000000000000012 +:101ED0000000000000000000000000000000000002 +:101EE00000000000000000000000000000000000F2 +:101EF00000000000000000000000000000000000E2 +:101F000000000000000000000000000000000000D1 +:101F100000000000000000000000000000000000C1 +:101F200000000000000000000000000000000000B1 +:101F300000000000000000000000000000000000A1 +:101F40000000000000000000000000000000000091 +:101F50000000000000000000000000000000000081 +:101F60000000000000000000000000000000000071 +:101F70000000000000000000000000000000000061 +:101F80000000000000000000000000000000000051 +:101F90000000000000000000000000000000000041 +:101FA0000000000000000000000000000000000031 +:101FB0000000000000000000000000000000000021 +:101FC0000000000000000000000000000000000011 +:101FD0000000000000000000000000000000000001 +:101FE00000000000000000000000000000000000F1 +:101FF00000000000000000000000000000000000E1 +:1020000000000000000000000000000000000000D0 +:1020100000000000000000000000000000000000C0 +:1020200000000000000000000000000000000000B0 +:1020300000000000000000000000000000000000A0 +:102040000000000000000000000000000000000090 +:102050000000000000000000000000000000000080 +:102060000000000000000000000000000000000070 +:102070000000000000000000000000000000000060 +:102080000000000000000000000000000000000050 +:102090000000000000000000000000000000000040 +:1020A0000000000000000000000000000000000030 +:1020B0000000000000000000000000000000000020 +:1020C0000000000000000000000000000000000010 +:1020D0000000000000000000000000000000000000 +:1020E00000000000000000000000000000000000F0 +:1020F00000000000000000000000000000000000E0 +:1021000000000000000000000000000000000000CF +:1021100000000000000000000000000000000000BF +:1021200000000000000000000000000000000000AF +:10213000000000000000000000000000000000009F +:10214000000000000000000000000000000000008F +:10215000000000000000000000000000000000007F +:10216000000000000000000000000000000000006F +:10217000000000000000000000000000000000005F +:10218000000000000000000000000000000000004F +:10219000000000000000000000000000000000003F +:1021A000000000000000000000000000000000002F +:1021B000000000000000000000000000000000001F +:1021C000000000000000000000000000000000000F +:1021D00000000000000000000000000000000000FF +:1021E00000000000000000000000000000000000EF +:1021F00000000000000000000000000000000000DF +:1022000000000000000000000000000000000000CE +:1022100000000000000000000000000000000000BE +:1022200000000000000000000000000000000000AE +:10223000000000000000000000000000000000009E +:10224000000000000000000000000000000000008E +:10225000000000000000000000000000000000007E +:10226000000000000000000000000000000000006E +:10227000000000000000000000000000000000005E +:10228000000000000000000000000000000000004E +:10229000000000000000000000000000000000003E +:1022A000000000000000000000000000000000002E +:1022B000000000000000000000000000000000001E +:1022C000000000000000000000000000000000000E +:1022D00000000000000000000000000000000000FE +:1022E00000000000000000000000000000000000EE +:1022F00000000000000000000000000000000000DE +:1023000000000000000000000000000000000000CD +:1023100000000000000000000000000000000000BD +:1023200000000000000000000000000000000000AD +:10233000000000000000000000000000000000009D +:10234000000000000000000000000000000000008D +:10235000000000000000000000000000000000007D +:10236000000000000000000000000000000000006D +:10237000000000000000000000000000000000005D +:10238000000000000000000000000000000000004D +:10239000000000000000000000000000000000003D +:1023A000000000000000000000000000000000002D +:1023B000000000000000000000000000000000001D +:1023C000000000000000000000000000000000000D +:1023D00000000000000000000000000000000000FD +:1023E00000000000000000000000000000000000ED +:1023F00000000000000000000000000000000000DD +:1024000000000000000000000000000000000000CC +:1024100000000000000000000000000000000000BC +:1024200000000000000000000000000000000000AC +:10243000000000000000000000000000000000009C +:10244000000000000000000000000000000000008C +:10245000000000000000000000000000000000007C +:10246000000000000000000000000000000000006C +:10247000000000000000000000000000000000005C +:10248000000000000000000000000000000000004C +:10249000000000000000000000000000000000003C +:1024A000000000000000000000000000000000002C +:1024B000000000000000000000000000000000001C +:1024C000000000000000000000000000000000000C +:1024D00000000000000000000000000000000000FC +:1024E00000000000000000000000000000000000EC +:1024F00000000000000000000000000000000000DC +:1025000000000000000000000000000000000000CB +:1025100000000000000000000000000000000000BB +:1025200000000000000000000000000000000000AB +:10253000000000000000000000000000000000009B +:10254000000000000000000000000000000000008B +:10255000000000000000000000000000000000007B +:10256000000000000000000000000000000000006B +:10257000000000000000000000000000000000005B +:10258000000000000000000000000000000000004B +:10259000000000000000000000000000000000003B +:1025A000000000000000000000000000000000002B +:1025B000000000000000000000000000000000001B +:1025C000000000000000000000000000000000000B +:1025D00000000000000000000000000000000000FB +:1025E00000000000000000000000000000000000EB +:1025F00000000000000000000000000000000000DB +:1026000000000000000000000000000000000000CA +:1026100000000000000000000000000000000000BA +:1026200000000000000000000000000000000000AA +:10263000000000000000000000000000000000009A +:10264000000000000000000000000000000000008A +:10265000000000000000000000000000000000007A +:10266000000000000000000000000000000000006A +:10267000000000000000000000000000000000005A +:10268000000000000000000000000000000000004A +:10269000000000000000000000000000000000003A +:1026A000000000000000000000000000000000002A +:1026B000000000000000000000000000000000001A +:1026C000000000000000000000000000000000000A +:1026D00000000000000000000000000000000000FA +:1026E00000000000000000000000000000000000EA +:1026F00000000000000000000000000000000000DA +:1027000000000000000000000000000000000000C9 +:1027100000000000000000000000000000000000B9 +:1027200000000000000000000000000000000000A9 +:102730000000000000000000000000000000000099 +:102740000000000000000000000000000000000089 +:102750000000000000000000000000000000000079 +:102760000000000000000000000000000000000069 +:102770000000000000000000000000000000000059 +:102780000000000000000000000000000000000049 +:102790000000000000000000000000000000000039 +:1027A0000000000000000000000000000000000029 +:1027B0000000000000000000000000000000000019 +:1027C0000000000000000000000000000000000009 +:1027D00000000000000000000000000000000000F9 +:1027E00000000000000000000000000000000000E9 +:1027F00000000000000000000000000000000000D9 +:1028000000000000000000000000000000000000C8 +:1028100000000000000000000000000000000000B8 +:1028200000000000000000000000000000000000A8 +:102830000000000000000000000000000000000098 +:102840000000000000000000000000000000000088 +:102850000000000000000000000000000000000078 +:102860000000000000000000000000000000000068 +:102870000000000000000000000000000000000058 +:102880000000000000000000000000000000000048 +:102890000000000000000000000000000000000038 +:1028A0000000000000000000000000000000000028 +:1028B0000000000000000000000000000000000018 +:1028C0000000000000000000000000000000000008 +:1028D00000000000000000000000000000000000F8 +:1028E00000000000000000000000000000000000E8 +:1028F00000000000000000000000000000000000D8 +:1029000000000000000000000000000000000000C7 +:1029100000000000000000000000000000000000B7 +:1029200000000000000000000000000000000000A7 +:102930000000000000000000000000000000000097 +:102940000000000000000000000000000000000087 +:102950000000000000000000000000000000000077 +:102960000000000000000000000000000000000067 +:102970000000000000000000000000000000000057 +:102980000000000000000000000000000000000047 +:102990000000000000000000000000000000000037 +:1029A0000000000000000000000000000000000027 +:1029B0000000000000000000000000000000000017 +:1029C0000000000000000000000000000000000007 +:1029D00000000000000000000000000000000000F7 +:1029E00000000000000000000000000000000000E7 +:1029F00000000000000000000000000000000000D7 +:102A000000000000000000000000000000000000C6 +:102A100000000000000000000000000000000000B6 +:102A200000000000000000000000000000000000A6 +:102A30000000000000000000000000000000000096 +:102A40000000000000000000000000000000000086 +:102A50000000000000000000000000000000000076 +:102A60000000000000000000000000000000000066 +:102A70000000000000000000000000000000000056 +:102A80000000000000000000000000000000000046 +:102A90000000000000000000000000000000000036 +:102AA0000000000000000000000000000000000026 +:102AB0000000000000000000000000000000000016 +:102AC0000000000000000000000000000000000006 +:102AD00000000000000000000000000000000000F6 +:102AE00000000000000000000000000000000000E6 +:102AF00000000000000000000000000000000000D6 +:102B000000000000000000000000000000000000C5 +:102B100000000000000000000000000000000000B5 +:102B200000000000000000000000000000000000A5 +:102B30000000000000000000000000000000000095 +:102B40000000000000000000000000000000000085 +:102B50000000000000000000000000000000000075 +:102B60000000000000000000000000000000000065 +:102B70000000000000000000000000000000000055 +:102B80000000000000000000000000000000000045 +:102B90000000000000000000000000000000000035 +:102BA0000000000000000000000000000000000025 +:102BB0000000000000000000000000000000000015 +:102BC0000000000000000000000000000000000005 +:102BD00000000000000000000000000000000000F5 +:102BE00000000000000000000000000000000000E5 +:102BF00000000000000000000000000000000000D5 +:102C000000000000000000000000000000000000C4 +:102C100000000000000000000000000000000000B4 +:102C200000000000000000000000000000000000A4 +:102C30000000000000000000000000000000000094 +:102C40000000000000000000000000000000000084 +:102C50000000000000000000000000000000000074 +:102C60000000000000000000000000000000000064 +:102C70000000000000000000000000000000000054 +:102C80000000000000000000000000000000000044 +:102C90000000000000000000000000000000000034 +:102CA0000000000000000000000000000000000024 +:102CB0000000000000000000000000000000000014 +:102CC0000000000000000000000000000000000004 +:102CD00000000000000000000000000000000000F4 +:102CE00000000000000000000000000000000000E4 +:102CF00000000000000000000000000000000000D4 +:102D000000000000000000000000000000000000C3 +:102D100000000000000000000000000000000000B3 +:102D200000000000000000000000000000000000A3 +:102D30000000000000000000000000000000000093 +:102D40000000000000000000000000000000000083 +:102D50000000000000000000000000000000000073 +:102D60000000000000000000000000000000000063 +:102D70000000000000000000000000000000000053 +:102D80000000000000000000000000000000000043 +:102D90000000000000000000000000000000000033 +:102DA0000000000000000000000000000000000023 +:102DB0000000000000000000000000000000000013 +:102DC0000000000000000000000000000000000003 +:102DD00000000000000000000000000000000000F3 +:102DE00000000000000000000000000000000000E3 +:102DF00000000000000000000000000000000000D3 +:102E000000000000000000000000000000000000C2 +:102E100000000000000000000000000000000000B2 +:102E200000000000000000000000000000000000A2 +:102E30000000000000000000000000000000000092 +:102E40000000000000000000000000000000000082 +:102E50000000000000000000000000000000000072 +:102E60000000000000000000000000000000000062 +:102E70000000000000000000000000000000000052 +:102E80000000000000000000000000000000000042 +:102E90000000000000000000000000000000000032 +:102EA0000000000000000000000000000000000022 +:102EB0000000000000000000000000000000000012 +:102EC0000000000000000000000000000000000002 +:102ED00000000000000000000000000000000000F2 +:102EE00000000000000000000000000000000000E2 +:102EF00000000000000000000000000000000000D2 +:102F000000000000000000000000000000000000C1 +:102F100000000000000000000000000000000000B1 +:102F200000000000000000000000000000000000A1 +:102F30000000000000000000000000000000000091 +:102F40000000000000000000000000000000000081 +:102F50000000000000000000000000000000000071 +:102F60000000000000000000000000000000000061 +:102F70000000000000000000000000000000000051 +:102F80000000000000000000000000000000000041 +:102F90000000000000000000000000000000000031 +:102FA0000000000000000000000000000000000021 +:102FB0000000000000000000000000000000000011 +:102FC0000000000000000000000000000000000001 +:102FD00000000000000000000000000000000000F1 +:102FE00000000000000000000000000000000000E1 +:102FF00000000000000000000000000000000000D1 +:1030000000000000000000000000000000000000C0 +:1030100000000000000000000000000000000000B0 +:1030200000000000000000000000000000000000A0 +:103030000000000000000000000000000000000090 +:103040000000000000000000000000000000000080 +:103050000000000000000000000000000000000070 +:103060000000000000000000000000000000000060 +:103070000000000000000000000000000000000050 +:103080000000000000000000000000000000000040 +:103090000000000000000000000000000000000030 +:1030A0000000000000000000000000000000000020 +:1030B0000000000000000000000000000000000010 +:1030C0000000000000000000000000000000000000 +:1030D00000000000000000000000000000000000F0 +:1030E00000000000000000000000000000000000E0 +:1030F00000000000000000000000000000000000D0 +:1031000000000000000000000000000000000000BF +:1031100000000000000000000000000000000000AF +:10312000000000000000000000000000000000009F +:10313000000000000000000000000000000000008F +:10314000000000000000000000000000000000007F +:10315000000000000000000000000000000000006F +:10316000000000000000000000000000000000005F +:10317000000000000000000000000000000000004F +:10318000000000000000000000000000000000003F +:10319000000000000000000000000000000000002F +:1031A000000000000000000000000000000000001F +:1031B000000000000000000000000000000000000F +:1031C00000000000000000000000000000000000FF +:1031D00000000000000000000000000000000000EF +:1031E00000000000000000000000000000000000DF +:1031F00000000000000000000000000000000000CF +:1032000000000000000000000000000000000000BE +:1032100000000000000000000000000000000000AE +:10322000000000000000000000000000000000009E +:10323000000000000000000000000000000000008E +:10324000000000000000000000000000000000007E +:10325000000000000000000000000000000000006E +:10326000000000000000000000000000000000005E +:10327000000000000000000000000000000000004E +:10328000000000000000000000000000000000003E +:10329000000000000000000000000000000000002E +:1032A000000000000000000000000000000000001E +:1032B000000000000000000000000000000000000E +:1032C00000000000000000000000000000000000FE +:1032D00000000000000000000000000000000000EE +:1032E00000000000000000000000000000000000DE +:1032F00000000000000000000000000000000000CE +:1033000000000000000000000000000000000000BD +:1033100000000000000000000000000000000000AD +:10332000000000000000000000000000000000009D +:10333000000000000000000000000000000000008D +:10334000000000000000000000000000000000007D +:10335000000000000000000000000000000000006D +:10336000000000000000000000000000000000005D +:10337000000000000000000000000000000000004D +:10338000000000000000000000000000000000003D +:10339000000000000000000000000000000000002D +:1033A000000000000000000000000000000000001D +:1033B000000000000000000000000000000000000D +:1033C00000000000000000000000000000000000FD +:1033D00000000000000000000000000000000000ED +:1033E00000000000000000000000000000000000DD +:1033F00000000000000000000000000000000000CD +:1034000000000000000000000000000000000000BC +:1034100000000000000000000000000000000000AC +:10342000000000000000000000000000000000009C +:10343000000000000000000000000000000000008C +:10344000000000000000000000000000000000007C +:10345000000000000000000000000000000000006C +:10346000000000000000000000000000000000005C +:10347000000000000000000000000000000000004C +:10348000000000000000000000000000000000003C +:10349000000000000000000000000000000000002C +:1034A000000000000000000000000000000000001C +:1034B000000000000000000000000000000000000C +:1034C00000000000000000000000000000000000FC +:1034D00000000000000000000000000000000000EC +:1034E00000000000000000000000000000000000DC +:1034F00000000000000000000000000000000000CC +:1035000000000000000000000000000000000000BB +:1035100000000000000000000000000000000000AB +:10352000000000000000000000000000000000009B +:10353000000000000000000000000000000000008B +:10354000000000000000000000000000000000007B +:10355000000000000000000000000000000000006B +:10356000000000000000000000000000000000005B +:10357000000000000000000000000000000000004B +:10358000000000000000000000000000000000003B +:10359000000000000000000000000000000000002B +:1035A000000000000000000000000000000000001B +:1035B000000000000000000000000000000000000B +:1035C00000000000000000000000000000000000FB +:1035D00000000000000000000000000000000000EB +:1035E00000000000000000000000000000000000DB +:1035F00000000000000000000000000000000000CB +:1036000000000000000000000000000000000000BA +:1036100000000000000000000000000000000000AA +:10362000000000000000000000000000000000009A +:10363000000000000000000000000000000000008A +:10364000000000000000000000000000000000007A +:10365000000000000000000000000000000000006A +:10366000000000000000000000000000000000005A +:10367000000000000000000000000000000000004A +:10368000000000000000000000000000000000003A +:10369000000000000000000000000000000000002A +:1036A000000000000000000000000000000000001A +:1036B000000000000000000000000000000000000A +:1036C00000000000000000000000000000000000FA +:1036D00000000000000000000000000000000000EA +:1036E00000000000000000000000000000000000DA +:1036F00000000000000000000000000000000000CA +:1037000000000000000000000000000000000000B9 +:1037100000000000000000000000000000000000A9 +:103720000000000000000000000000000000000099 +:103730000000000000000000000000000000000089 +:103740000000000000000000000000000000000079 +:103750000000000000000000000000000000000069 +:103760000000000000000000000000000000000059 +:103770000000000000000000000000000000000049 +:103780000000000000000000000000000000000039 +:103790000000000000000000000000000000000029 +:1037A0000000000000000000000000000000000019 +:1037B0000000000000000000000000000000000009 +:1037C00000000000000000000000000000000000F9 +:1037D00000000000000000000000000000000000E9 +:1037E00000000000000000000000000000000000D9 +:1037F00000000000000000000000000000000000C9 +:1038000000000000000000000000000000000000B8 +:1038100000000000000000000000000000000000A8 +:103820000000000000000000000000000000000098 +:103830000000000000000000000000000000000088 +:103840000000000000000000000000000000000078 +:103850000000000000000000000000000000000068 +:103860000000000000000000000000000000000058 +:103870000000000000000000000000000000000048 +:103880000000000000000000000000000000000038 +:103890000000000000000000000000000000000028 +:1038A0000000000000000000000000000000000018 +:1038B0000000000000000000000000000000000008 +:1038C00000000000000000000000000000000000F8 +:1038D00000000000000000000000000000000000E8 +:1038E00000000000000000000000000000000000D8 +:1038F00000000000000000000000000000000000C8 +:1039000000000000000000000000000000000000B7 +:1039100000000000000000000000000000000000A7 +:103920000000000000000000000000000000000097 +:103930000000000000000000000000000000000087 +:103940000000000000000000000000000000000077 +:103950000000000000000000000000000000000067 +:103960000000000000000000000000000000000057 +:103970000000000000000000000000000000000047 +:103980000000000000000000000000000000000037 +:103990000000000000000000000000000000000027 +:1039A0000000000000000000000000000000000017 +:1039B0000000000000000000000000000000000007 +:1039C00000000000000000000000000000000000F7 +:1039D00000000000000000000000000000000000E7 +:1039E00000000000000000000000000000000000D7 +:1039F00000000000000000000000000000000000C7 +:103A000000000000000000000000000000000000B6 +:103A100000000000000000000000000000000000A6 +:103A20000000000000000000000000000000000096 +:103A30000000000000000000000000000000000086 +:103A40000000000000000000000000000000000076 +:103A50000000000000000000000000000000000066 +:103A60000000000000000000000000000000000056 +:103A70000000000000000000000000000000000046 +:103A80000000000000000000000000000000000036 +:103A90000000000000000000000000000000000026 +:103AA0000000000000000000000000000000000016 +:103AB0000000000000000000000000000000000006 +:103AC00000000000000000000000000000000000F6 +:103AD00000000000000000000000000000000000E6 +:103AE00000000000000000000000000000000000D6 +:103AF00000000000000000000000000000000000C6 +:103B000000000000000000000000000000000000B5 +:103B100000000000000000000000000000000000A5 +:103B20000000000000000000000000000000000095 +:103B30000000000000000000000000000000000085 +:103B40000000000000000000000000000000000075 +:103B50000000000000000000000000000000000065 +:103B60000000000000000000000000000000000055 +:103B70000000000000000000000000000000000045 +:103B80000000000000000000000000000000000035 +:103B90000000000000000000000000000000000025 +:103BA0000000000000000000000000000000000015 +:103BB0000000000000000000000000000000000005 +:103BC00000000000000000000000000000000000F5 +:103BD00000000000000000000000000000000000E5 +:103BE00000000000000000000000000000000000D5 +:103BF00000000000000000000000000000000000C5 +:103C000000000000000000000000000000000000B4 +:103C100000000000000000000000000000000000A4 +:103C20000000000000000000000000000000000094 +:103C30000000000000000000000000000000000084 +:103C40000000000000000000000000000000000074 +:103C50000000000000000000000000000000000064 +:103C60000000000000000000000000000000000054 +:103C70000000000000000000000000000000000044 +:103C80000000000000000000000000000000000034 +:103C90000000000000000000000000000000000024 +:103CA0000000000000000000000000000000000014 +:103CB0000000000000000000000000000000000004 +:103CC00000000000000000000000000000000000F4 +:103CD00000000000000000000000000000000000E4 +:103CE00000000000000000000000000000000000D4 +:103CF00000000000000000000000000000000000C4 +:103D000000000000000000000000000000000000B3 +:103D100000000000000000000000000000000000A3 +:103D20000000000000000000000000000000000093 +:103D30000000000000000000000000000000000083 +:103D40000000000000000000000000000000000073 +:103D50000000000000000000000000000000000063 +:103D60000000000000000000000000000000000053 +:103D70000000000000000000000000000000000043 +:103D80000000000000000000000000000000000033 +:103D90000000000000000000000000000000000023 +:103DA0000000000000000000000000000000000013 +:103DB0000000000000000000000000000000000003 +:103DC00000000000000000000000000000000000F3 +:103DD00000000000000000000000000000000000E3 +:103DE00000000000000000000000000000000000D3 +:103DF00000000000000000000000000000000000C3 +:103E000000000000000000000000000000000000B2 +:103E100000000000000000000000000000000000A2 +:103E20000000000000000000000000000000000092 +:103E30000000000000000000000000000000000082 +:103E40000000000000000000000000000000000072 +:103E50000000000000000000000000000000000062 +:103E60000000000000000000000000000000000052 +:103E70000000000000000000000000000000000042 +:103E80000000000000000000000000000000000032 +:103E90000000000000000000000000000000000022 +:103EA0000000000000000000000000000000000012 +:103EB0000000000000000000000000000000000002 +:103EC00000000000000000000000000000000000F2 +:103ED00000000000000000000000000000000000E2 +:103EE00000000000000000000000000000000000D2 +:103EF00000000000000000000000000000000000C2 +:103F000000000000000000000000000000000000B1 +:103F100000000000000000000000000000000000A1 +:103F20000000000000000000000000000000000091 +:103F30000000000000000000000000000000000081 +:103F40000000000000000000000000000000000071 +:103F50000000000000000000000000000000000061 +:103F60000000000000000000000000000000000051 +:103F70000000000000000000000000000000000041 +:103F80000000000000000000000000000000000031 +:103F90000000000000000000000000000000000021 +:103FA0000000000000000000000000000000000011 +:103FB0000000000000000000000000000000000001 +:103FC00000000000000000000000000000000000F1 +:103FD00000000000000000000000000000000000E1 +:103FE00000000000000000000000000000000000D1 +:103FF00000000000000000000000000000000000C1 +:1040000000000000000000000000000000000000B0 +:1040100000000000000000000000000000000000A0 +:104020000000000000000000000000000000000090 +:104030000000000000000000000000000000000080 +:104040000000000000000000000000000000000070 +:104050000000000000000000000000000000000060 +:104060000000000000000000000000000000000050 +:104070000000000000000000000000000000000040 +:104080000000000000000000000000000000000030 +:104090000000000000000000000000000000000020 +:1040A0000000000000000000000000000000000010 +:1040B0000000000000000000000000000000000000 +:1040C00000000000000000000000000000000000F0 +:1040D00000000000000000000000000000000000E0 +:1040E00000000000000000000000000000000000D0 +:1040F00000000000000000000000000000000000C0 +:1041000000000000000000000000000000000000AF +:10411000000000000000000000000000000000009F +:10412000000000000000000000000000000000008F +:10413000000000000000000000000000000000007F +:10414000000000000000000000000000000000006F +:10415000000000000000000000000000000000005F +:10416000000000000000000000000000000000004F +:10417000000000000000000000000000000000003F +:10418000000000000000000000000000000000002F +:10419000000000000000000000000000000000001F +:1041A000000000000000000000000000000000000F +:1041B00000000000000000000000000000000000FF +:1041C00000000000000000000000000000000000EF +:1041D00000000000000000000000000000000000DF +:1041E00000000000000000000000000000000000CF +:1041F00000000000000000000000000000000000BF +:1042000000000000000000000000000000000000AE +:10421000000000000000000000000000000000009E +:10422000000000000000000000000000000000008E +:10423000000000000000000000000000000000007E +:10424000000000000000000000000000000000006E +:10425000000000000000000000000000000000005E +:10426000000000000000000000000000000000004E +:10427000000000000000000000000000000000003E +:10428000000000000000000000000000000000002E +:10429000000000000000000000000000000000001E +:1042A000000000000000000000000000000000000E +:1042B00000000000000000000000000000000000FE +:1042C00000000000000000000000000000000000EE +:1042D00000000000000000000000000000000000DE +:1042E00000000000000000000000000000000000CE +:1042F00000000000000000000000000000000000BE +:1043000000000000000000000000000000000000AD +:10431000000000000000000000000000000000009D +:10432000000000000000000000000000000000008D +:10433000000000000000000000000000000000007D +:10434000000000000000000000000000000000006D +:10435000000000000000000000000000000000005D +:10436000000000000000000000000000000000004D +:10437000000000000000000000000000000000003D +:10438000000000000000000000000000000000002D +:10439000000000000000000000000000000000001D +:1043A000000000000000000000000000000000000D +:1043B00000000000000000000000000000000000FD +:1043C00000000000000000000000000000000000ED +:1043D00000000000000000000000000000000000DD +:1043E00000000000000000000000000000000000CD +:1043F00000000000000000000000000000000000BD +:1044000000000000000000000000000000000000AC +:10441000000000000000000000000000000000009C +:10442000000000000000000000000000000000008C +:10443000000000000000000000000000000000007C +:10444000000000000000000000000000000000006C +:10445000000000000000000000000000000000005C +:10446000000000000000000000000000000000004C +:10447000000000000000000000000000000000003C +:10448000000000000000000000000000000000002C +:10449000000000000000000000000000000000001C +:1044A000000000000000000000000000000000000C +:1044B00000000000000000000000000000000000FC +:1044C00000000000000000000000000000000000EC +:1044D00000000000000000000000000000000000DC +:1044E00000000000000000000000000000000000CC +:1044F00000000000000000000000000000000000BC +:1045000000000000000000000000000000000000AB +:10451000000000000000000000000000000000009B +:10452000000000000000000000000000000000008B +:10453000000000000000000000000000000000007B +:10454000000000000000000000000000000000006B +:10455000000000000000000000000000000000005B +:10456000000000000000000000000000000000004B +:10457000000000000000000000000000000000003B +:10458000000000000000000000000000000000002B +:10459000000000000000000000000000000000001B +:1045A000000000000000000000000000000000000B +:1045B00000000000000000000000000000000000FB +:1045C00000000000000000000000000000000000EB +:1045D00000000000000000000000000000000000DB +:1045E00000000000000000000000000000000000CB +:1045F00000000000000000000000000000000000BB +:1046000000000000000000000000000000000000AA +:10461000000000000000000000000000000000009A +:10462000000000000000000000000000000000008A +:10463000000000000000000000000000000000007A +:10464000000000000000000000000000000000006A +:10465000000000000000000000000000000000005A +:10466000000000000000000000000000000000004A +:10467000000000000000000000000000000000003A +:10468000000000000000000000000000000000002A +:10469000000000000000000000000000000000001A +:1046A000000000000000000000000000000000000A +:1046B00000000000000000000000000000000000FA +:1046C00000000000000000000000000000000000EA +:1046D00000000000000000000000000000000000DA +:1046E00000000000000000000000000000000000CA +:1046F00000000000000000000000000000000000BA +:1047000000000000000000000000000000000000A9 +:104710000000000000000000000000000000000099 +:104720000000000000000000000000000000000089 +:104730000000000000000000000000000000000079 +:104740000000000000000000000000000000000069 +:104750000000000000000000000000000000000059 +:104760000000000000000000000000000000000049 +:104770000000000000000000000000000000000039 +:104780000000000000000000000000000000000029 +:104790000000000000000000000000000000000019 +:1047A0000000000000000000000000000000000009 +:1047B00000000000000000000000000000000000F9 +:1047C00000000000000000000000000000000000E9 +:1047D00000000000000000000000000000000000D9 +:1047E00000000000000000000000000000000000C9 +:1047F00000000000000000000000000000000000B9 +:1048000000000000000000000000000000000000A8 +:104810000000000000000000000000000000000098 +:104820000000000000000000000000000000000088 +:104830000000000000000000000000000000000078 +:104840000000000000000000000000000000000068 +:104850000000000000000000000000000000000058 +:104860000000000000000000000000000000000048 +:104870000000000000000000000000000000000038 +:104880000000000000000000000000000000000028 +:104890000000000000000000000000000000000018 +:1048A0000000000000000000000000000000000008 +:1048B00000000000000000000000000000000000F8 +:1048C00000000000000000000000000000000000E8 +:1048D00000000000000000000000000000000000D8 +:1048E00000000000000000000000000000000000C8 +:1048F00000000000000000000000000000000000B8 +:1049000000000000000000000000000000000000A7 +:104910000000000000000000000000000000000097 +:104920000000000000000000000000000000000087 +:104930000000000000000000000000000000000077 +:104940000000000000000000000000000000000067 +:104950000000000000000000000000000000000057 +:104960000000000000000000000000000000000047 +:104970000000000000000000000000000000000037 +:104980000000000000000000000000000000000027 +:104990000000000000000000000000000000000017 +:1049A0000000000000000000000000000000000007 +:1049B00000000000000000000000000000000000F7 +:1049C00000000000000000000000000000000000E7 +:1049D00000000000000000000000000000000000D7 +:1049E00000000000000000000000000000000000C7 +:1049F00000000000000000000000000000000000B7 +:104A000000000000000000000000000000000000A6 +:104A10000000000000000000000000000000000096 +:104A20000000000000000000000000000000000086 +:104A30000000000000000000000000000000000076 +:104A40000000000000000000000000000000000066 +:104A50000000000000000000000000000000000056 +:104A60000000000000000000000000000000000046 +:104A70000000000000000000000000000000000036 +:104A80000000000000000000000000000000000026 +:104A90000000000000000000000000000000000016 +:104AA0000000000000000000000000000000000006 +:104AB00000000000000000000000000000000000F6 +:104AC00000000000000000000000000000000000E6 +:104AD00000000000000000000000000000000000D6 +:104AE00000000000000000000000000000000000C6 +:104AF00000000000000000000000000000000000B6 +:104B000000000000000000000000000000000000A5 +:104B10000000000000000000000000000000000095 +:104B20000000000000000000000000000000000085 +:104B30000000000000000000000000000000000075 +:104B40000000000000000000000000000000000065 +:104B50000000000000000000000000000000000055 +:104B60000000000000000000000000000000000045 +:104B70000000000000000000000000000000000035 +:104B80000000000000000000000000000000000025 +:104B90000000000000000000000000000000000015 +:104BA0000000000000000000000000000000000005 +:104BB00000000000000000000000000000000000F5 +:104BC00000000000000000000000000000000000E5 +:104BD00000000000000000000000000000000000D5 +:104BE00000000000000000000000000000000000C5 +:104BF00000000000000000000000000000000000B5 +:104C000000000000000000000000000000000000A4 +:104C10000000000000000000000000000000000094 +:104C20000000000000000000000000000000000084 +:104C30000000000000000000000000000000000074 +:104C40000000000000000000000000000000000064 +:104C50000000000000000000000000000000000054 +:104C60000000000000000000000000000000000044 +:104C70000000000000000000000000000000000034 +:104C80000000000000000000000000000000000024 +:104C90000000000000000000000000000000000014 +:104CA0000000000000000000000000000000000004 +:104CB00000000000000000000000000000000000F4 +:104CC00000000000000000000000000000000000E4 +:104CD00000000000000000000000000000000000D4 +:104CE00000000000000000000000000000000000C4 +:104CF00000000000000000000000000000000000B4 +:104D000000000000000000000000000000000000A3 +:104D10000000000000000000000000000000000093 +:104D20000000000000000000000000000000000083 +:104D30000000000000000000000000000000000073 +:104D40000000000000000000000000000000000063 +:104D50000000000000000000000000000000000053 +:104D60000000000000000000000000000000000043 +:104D70000000000000000000000000000000000033 +:104D80000000000000000000000000000000000023 +:104D90000000000000000000000000000000000013 +:104DA0000000000000000000000000000000000003 +:104DB00000000000000000000000000000000000F3 +:104DC00000000000000000000000000000000000E3 +:104DD00000000000000000000000000000000000D3 +:104DE00000000000000000000000000000000000C3 +:104DF00000000000000000000000000000000000B3 +:104E000000000000000000000000000000000000A2 +:104E10000000000000000000000000000000000092 +:104E20000000000000000000000000000000000082 +:104E30000000000000000000000000000000000072 +:104E40000000000000000000000000000000000062 +:104E50000000000000000000000000000000000052 +:104E60000000000000000000000000000000000042 +:104E70000000000000000000000000000000000032 +:104E80000000000000000000000000000000000022 +:104E90000000000000000000000000000000000012 +:104EA0000000000000000000000000000000000002 +:104EB00000000000000000000000000000000000F2 +:104EC00000000000000000000000000000000000E2 +:104ED00000000000000000000000000000000000D2 +:104EE00000000000000000000000000000000000C2 +:104EF00000000000000000000000000000000000B2 +:104F000000000000000000000000000000000000A1 +:104F10000000000000000000000000000000000091 +:104F20000000000000000000000000000000000081 +:104F30000000000000000000000000000000000071 +:104F40000000000000000000000000000000000061 +:104F50000000000000000000000000000000000051 +:104F60000000000000000000000000000000000041 +:104F70000000000000000000000000000000000031 +:104F80000000000000000000000000000000000021 +:104F90000000000000000000000000000000000011 +:104FA0000000000000000000000000000000000001 +:104FB00000000000000000000000000000000000F1 +:104FC00000000000000000000000000000000000E1 +:104FD00000000000000000000000000000000000D1 +:104FE00000000000000000000000000000000000C1 +:104FF00000000000000000000000000000000000B1 +:1050000000000000000000000000000000000000A0 +:105010000000000000000000000000000000000090 +:105020000000000000000000000000000000000080 +:105030000000000000000000000000000000000070 +:105040000000000000000000000000000000000060 +:105050000000000000000000000000000000000050 +:105060000000000000000000000000000000000040 +:105070000000000000000000000000000000000030 +:105080000000000000000000000000000000000020 +:105090000000000000000000000000000000000010 +:1050A0000000000000000000000000000000000000 +:1050B00000000000000000000000000000000000F0 +:1050C00000000000000000000000000000000000E0 +:1050D00000000000000000000000000000000000D0 +:1050E00000000000000000000000000000000000C0 +:1050F00000000000000000000000000000000000B0 +:10510000000000000000000000000000000000009F +:10511000000000000000000000000000000000008F +:10512000000000000000000000000000000000007F +:10513000000000000000000000000000000000006F +:10514000000000000000000000000000000000005F +:10515000000000000000000000000000000000004F +:10516000000000000000000000000000000000003F +:10517000000000000000000000000000000000002F +:10518000000000000000000000000000000000001F +:10519000000000000000000000000000000000000F +:1051A00000000000000000000000000000000000FF +:1051B00000000000000000000000000000000000EF +:1051C00000000000000000000000000000000000DF +:1051D00000000000000000000000000000000000CF +:1051E00000000000000000000000000000000000BF +:1051F00000000000000000000000000000000000AF +:10520000000000000000000000000000000000009E +:10521000000000000000000000000000000000008E +:10522000000000000000000000000000000000007E +:10523000000000000000000000000000000000006E +:10524000000000000000000000000000000000005E +:10525000000000000000000000000000000000004E +:10526000000000000000000000000000000000003E +:10527000000000000000000000000000000000002E +:10528000000000000000000000000000000000001E +:10529000000000000000000000000000000000000E +:1052A00000000000000000000000000000000000FE +:1052B00000000000000000000000000000000000EE +:1052C00000000000000000000000000000000000DE +:1052D00000000000000000000000000000000000CE +:1052E00000000000000000000000000000000000BE +:1052F00000000000000000000000000000000000AE +:10530000000000000000000000000000000000009D +:10531000000000000000000000000000000000008D +:10532000000000000000000000000000000000007D +:10533000000000000000000000000000000000006D +:10534000000000000000000000000000000000005D +:10535000000000000000000000000000000000004D +:10536000000000000000000000000000000000003D +:10537000000000000000000000000000000000002D +:10538000000000000000000000000000000000001D +:10539000000000000000000000000000000000000D +:1053A00000000000000000000000000000000000FD +:1053B00000000000000000000000000000000000ED +:1053C00000000000000000000000000000000000DD +:1053D00000000000000000000000000000000000CD +:1053E00000000000000000000000000000000000BD +:1053F00000000000000000000000000000000000AD +:10540000000000000000000000000000000000009C +:10541000000000000000000000000000000000008C +:10542000000000000000000000000000000000007C +:10543000000000000000000000000000000000006C +:10544000000000000000000000000000000000005C +:10545000000000000000000000000000000000004C +:10546000000000000000000000000000000000003C +:10547000000000000000000000000000000000002C +:10548000000000000000000000000000000000001C +:10549000000000000000000000000000000000000C +:1054A00000000000000000000000000000000000FC +:1054B00000000000000000000000000000000000EC +:1054C00000000000000000000000000000000000DC +:1054D00000000000000000000000000000000000CC +:1054E00000000000000000000000000000000000BC +:1054F00000000000000000000000000000000000AC +:10550000000000000000000000000000000000009B +:10551000000000000000000000000000000000008B +:10552000000000000000000000000000000000007B +:10553000000000000000000000000000000000006B +:10554000000000000000000000000000000000005B +:10555000000000000000000000000000000000004B +:10556000000000000000000000000000000000003B +:10557000000000000000000000000000000000002B +:10558000000000000000000000000000000000001B +:10559000000000000000000000000000000000000B +:1055A00000000000000000000000000000000000FB +:1055B00000000000000000000000000000000000EB +:1055C00000000000000000000000000000000000DB +:1055D00000000000000000000000000000000000CB +:1055E00000000000000000000000000000000000BB +:1055F00000000000000000000000000000000000AB +:10560000000000000000000000000000000000009A +:10561000000000000000000000000000000000008A +:10562000000000000000000000000000000000007A +:10563000000000000000000000000000000000006A +:10564000000000000000000000000000000000005A +:10565000000000000000000000000000000000004A +:10566000000000000000000000000000000000003A +:10567000000000000000000000000000000000002A +:10568000000000000000000000000000000000001A +:10569000000000000000000000000000000000000A +:1056A00000000000000000000000000000000000FA +:1056B00000000000000000000000000000000000EA +:1056C00000000000000000000000000000000000DA +:1056D00000000000000000000000000000000000CA +:1056E00000000000000000000000000000000000BA +:1056F00000000000000000000000000000000000AA +:105700000000000000000000000000000000000099 +:105710000000000000000000000000000000000089 +:105720000000000000000000000000000000000079 +:105730000000000000000000000000000000000069 +:105740000000000000000000000000000000000059 +:105750000000000000000000000000000000000049 +:105760000000000000000000000000000000000039 +:105770000000000000000000000000000000000029 +:105780000000000000000000000000000000000019 +:105790000000000000000000000000000000000009 +:1057A00000000000000000000000000000000000F9 +:1057B00000000000000000000000000000000000E9 +:1057C00000000000000000000000000000000000D9 +:1057D00000000000000000000000000000000000C9 +:1057E00000000000000000000000000000000000B9 +:1057F00000000000000000000000000000000000A9 +:105800000000000000000000000000000000000098 +:105810000000000000000000000000000000000088 +:105820000000000000000000000000000000000078 +:105830000000000000000000000000000000000068 +:105840000000000000000000000000000000000058 +:105850000000000000000000000000000000000048 +:105860000000000000000000000000000000000038 +:105870000000000000000000000000000000000028 +:105880000000000000000000000000000000000018 +:105890000000000000000000000000000000000008 +:1058A00000000000000000000000000000000000F8 +:1058B00000000000000000000000000000000000E8 +:1058C00000000000000000000000000000000000D8 +:1058D00000000000000000000000000000000000C8 +:1058E00000000000000000000000000000000000B8 +:1058F00000000000000000000000000000000000A8 +:105900000000000000000000000000000000000097 +:105910000000000000000000000000000000000087 +:105920000000000000000000000000000000000077 +:105930000000000000000000000000000000000067 +:105940000000000000000000000000000000000057 +:105950000000000000000000000000000000000047 +:105960000000000000000000000000000000000037 +:105970000000000000000000000000000000000027 +:105980000000000000000000000000000000000017 +:105990000000000000000000000000000000000007 +:1059A00000000000000000000000000000000000F7 +:1059B00000000000000000000000000000000000E7 +:1059C00000000000000000000000000000000000D7 +:1059D00000000000000000000000000000000000C7 +:1059E00000000000000000000000000000000000B7 +:1059F00000000000000000000000000000000000A7 +:105A00000000000000000000000000000000000096 +:105A10000000000000000000000000000000000086 +:105A20000000000000000000000000000000000076 +:105A30000000000000000000000000000000000066 +:105A40000000000000000000000000000000000056 +:105A50000000000000000000000000000000000046 +:105A60000000000000000000000000000000000036 +:105A70000000000000000000000000000000000026 +:105A80000000000000000000000000000000000016 +:105A90000000000000000000000000000000000006 +:105AA00000000000000000000000000000000000F6 +:105AB00000000000000000000000000000000000E6 +:105AC00000000000000000000000000000000000D6 +:105AD00000000000000000000000000000000000C6 +:105AE00000000000000000000000000000000000B6 +:105AF00000000000000000000000000000000000A6 +:105B00000000000000000000000000000000000095 +:105B10000000000000000000000000000000000085 +:105B20000000000000000000000000000000000075 +:105B30000000000000000000000000000000000065 +:105B40000000000000000000000000000000000055 +:105B50000000000000000000000000000000000045 +:105B60000000000000000000000000000000000035 +:105B70000000000000000000000000000000000025 +:105B80000000000000000000000000000000000015 +:105B90000000000000000000000000000000000005 +:105BA00000000000000000000000000000000000F5 +:105BB00000000000000000000000000000000000E5 +:105BC00000000000000000000000000000000000D5 +:105BD00000000000000000000000000000000000C5 +:105BE00000000000000000000000000000000000B5 +:105BF00000000000000000000000000000000000A5 +:105C00000000000000000000000000000000000094 +:105C10000000000000000000000000000000000084 +:105C20000000000000000000000000000000000074 +:105C30000000000000000000000000000000000064 +:105C40000000000000000000000000000000000054 +:105C50000000000000000000000000000000000044 +:105C60000000000000000000000000000000000034 +:105C70000000000000000000000000000000000024 +:105C80000000000000000000000000000000000014 +:105C90000000000000000000000000000000000004 +:105CA00000000000000000000000000000000000F4 +:105CB00000000000000000000000000000000000E4 +:105CC00000000000000000000000000000000000D4 +:105CD00000000000000000000000000000000000C4 +:105CE00000000000000000000000000000000000B4 +:105CF00000000000000000000000000000000000A4 +:105D00000000000000000000000000000000000093 +:105D10000000000000000000000000000000000083 +:105D20000000000000000000000000000000000073 +:105D30000000000000000000000000000000000063 +:105D40000000000000000000000000000000000053 +:105D50000000000000000000000000000000000043 +:105D60000000000000000000000000000000000033 +:105D70000000000000000000000000000000000023 +:105D80000000000000000000000000000000000013 +:105D90000000000000000000000000000000000003 +:105DA00000000000000000000000000000000000F3 +:105DB00000000000000000000000000000000000E3 +:105DC00000000000000000000000000000000000D3 +:105DD00000000000000000000000000000000000C3 +:105DE00000000000000000000000000000000000B3 +:105DF00000000000000000000000000000000000A3 +:105E00000000000000000000000000000000000092 +:105E10000000000000000000000000000000000082 +:105E20000000000000000000000000000000000072 +:105E30000000000000000000000000000000000062 +:105E40000000000000000000000000000000000052 +:105E50000000000000000000000000000000000042 +:105E60000000000000000000000000000000000032 +:105E70000000000000000000000000000000000022 +:105E80000000000000000000000000000000000012 +:105E90000000000000000000000000000000000002 +:105EA00000000000000000000000000000000000F2 +:105EB00000000000000000000000000000000000E2 +:105EC00000000000000000000000000000000000D2 +:105ED00000000000000000000000000000000000C2 +:105EE00000000000000000000000000000000000B2 +:105EF00000000000000000000000000000000000A2 +:105F00000000000000000000000000000000000091 +:105F10000000000000000000000000000000000081 +:105F20000000000000000000000000000000000071 +:105F30000000000000000000000000000000000061 +:105F40000000000000000000000000000000000051 +:105F50000000000000000000000000000000000041 +:105F60000000000000000000000000000000000031 +:105F70000000000000000000000000000000000021 +:105F80000000000000000000000000000000000011 +:105F90000000000000000000000000000000000001 +:105FA00000000000000000000000000000000000F1 +:105FB00000000000000000000000000000000000E1 +:105FC00000000000000000000000000000000000D1 +:105FD00000000000000000000000000000000000C1 +:105FE00000000000000000000000000000000000B1 +:105FF00000000000000000000000000000000000A1 +:106000000000000000000000000000000000000090 +:106010000000000000000000000000000000000080 +:106020000000000000000000000000000000000070 +:106030000000000000000000000000000000000060 +:106040000000000000000000000000000000000050 +:106050000000000000000000000000000000000040 +:106060000000000000000000000000000000000030 +:106070000000000000000000000000000000000020 +:106080000000000000000000000000000000000010 +:106090000000000000000000000000000000000000 +:1060A00000000000000000000000000000000000F0 +:1060B00000000000000000000000000000000000E0 +:1060C00000000000000000000000000000000000D0 +:1060D00000000000000000000000000000000000C0 +:1060E00000000000000000000000000000000000B0 +:1060F00000000000000000000000000000000000A0 +:10610000000000000000000000000000000000008F +:10611000000000000000000000000000000000007F +:10612000000000000000000000000000000000006F +:10613000000000000000000000000000000000005F +:10614000000000000000000000000000000000004F +:10615000000000000000000000000000000000003F +:10616000000000000000000000000000000000002F +:10617000000000000000000000000000000000001F +:10618000000000000000000000000000000000000F +:1061900000000000000000000000000000000000FF +:1061A00000000000000000000000000000000000EF +:1061B00000000000000000000000000000000000DF +:1061C00000000000000000000000000000000000CF +:1061D00000000000000000000000000000000000BF +:1061E00000000000000000000000000000000000AF +:1061F000000000000000000000000000000000009F +:10620000000000000000000000000000000000008E +:10621000000000000000000000000000000000007E +:10622000000000000000000000000000000000006E +:10623000000000000000000000000000000000005E +:10624000000000000000000000000000000000004E +:10625000000000000000000000000000000000003E +:10626000000000000000000000000000000000002E +:10627000000000000000000000000000000000001E +:10628000000000000000000000000000000000000E +:1062900000000000000000000000000000000000FE +:1062A00000000000000000000000000000000000EE +:1062B00000000000000000000000000000000000DE +:1062C00000000000000000000000000000000000CE +:1062D00000000000000000000000000000000000BE +:1062E00000000000000000000000000000000000AE +:1062F000000000000000000000000000000000009E +:10630000000000000000000000000000000000008D +:10631000000000000000000000000000000000007D +:10632000000000000000000000000000000000006D +:10633000000000000000000000000000000000005D +:10634000000000000000000000000000000000004D +:10635000000000000000000000000000000000003D +:10636000000000000000000000000000000000002D +:10637000000000000000000000000000000000001D +:10638000000000000000000000000000000000000D +:1063900000000000000000000000000000000000FD +:1063A00000000000000000000000000000000000ED +:1063B00000000000000000000000000000000000DD +:1063C00000000000000000000000000000000000CD +:1063D00000000000000000000000000000000000BD +:1063E00000000000000000000000000000000000AD +:1063F000000000000000000000000000000000009D +:10640000000000000000000000000000000000008C +:10641000000000000000000000000000000000007C +:10642000000000000000000000000000000000006C +:10643000000000000000000000000000000000005C +:10644000000000000000000000000000000000004C +:10645000000000000000000000000000000000003C +:10646000000000000000000000000000000000002C +:10647000000000000000000000000000000000001C +:10648000000000000000000000000000000000000C +:1064900000000000000000000000000000000000FC +:1064A00000000000000000000000000000000000EC +:1064B00000000000000000000000000000000000DC +:1064C00000000000000000000000000000000000CC +:1064D0000000000000000010004400000000001157 +:1064E00010044441111004440000000000000000AA +:1064F000000000000000000000000000000000009C +:10650000000000000000000000000000000000008B +:10651000000000000000000000000000000000007B +:106520000004000000000000000000000000000067 +:10653000000000000000000000000000000000005B +:10654000000000000000000000000000000000004B +:10655000000000000000000000000000000000003B +:10656000000000000000004040232048000200001E +:106570000000000000008000000800000000000A89 +:106580000000000000200008000000800951000009 +:1065900000000000000000000000000004000151A5 +:1065A00021580400D20900000022000022080C40FB +:1065B000011000000C4200000201004280000400B3 +:1065C000100840040090C000200482020012440021 +:1065D0000000004089200081248420088100000000 +:1065E00008100410008004004000004100000480F6 +:1065F000001200002EBC35E44000500408400A0898 +:10660000400100814020000004020280800000223E +:10661000180410000200400050080000080182EB3E +:10662000C8BCAC000B80100046100081000084083C +:10663000C099200014000800000000004140083408 +:10664000C40002106000000830081820018000001B +:1066500000414A62100050E83E10DD40B4000010D6 +:10666000001C0000009010020000300048000000F4 +:106670000010000000100000A0000000400000001A +:10668000000000000000000000002008209101052B +:106690000008410012C0001C175EC005020840013E +:1066A00060301042C0008A9000000200020060507A +:1066B000002000080400000000000000100000108E +:1066C000404000500820200090220000802A08024C +:1066D00080200002003BD13C400801600120000105 +:1066E000140200004000B090000018C00040922446 +:1066F00044841002000540A408D04008060002812E +:1067000000C8049000000840200000000232000889 +:1067100000001908350006000A92021A8CE00A0BE4 +:1067200041881082146C202000420FF482A00C00DB +:10673000903A000029020804009105220000E012AE +:1067400000C00000C0040010804480021400000B50 +:10675000920000000100800B040080004101100045 +:106760000B24002214040804204202210A0010080D +:106770000A800001721000004A000000040172A0AB +:106780002000284A4800100804403002004C0180D4 +:1067900082004102281044D2408A0012903A080A2E +:1067A00000124804389202CE00300000204F010051 +:1067B000A107010200681022003480808242500448 +:1067C00006240F409452DE5025B02484080A801815 +:1067D0002C1A000088C92A010000034834900001E7 +:1067E0002241400916001A0AAA0100042866001076 +:1067F00000008000188000080003014000240928E0 +:10680000029402005011840C0C0A01000000644044 +:1068100001490AF80827A259C07D432F828042010E +:10682000A4A00008002900008188A000071B0141E6 +:10683000D31197C054940201029480219034C6323F +:1068400041840C023218040120140201A10410003A +:1068500001000404180090000000088602C09104A2 +:106860001850130A80001080CDA04101032F84002E +:10687000C0C3400420004040FF000800000B00009F +:106880000000001954203101020820000000080017 +:1068900020800082610000100006340108D00A0048 +:1068A000148000008A00001B546580181801A3138F +:1068B000C8900D000262080612C69022000008006F +:1068C00094C0A0489001200401EC02505CC7570816 +:1068D000000A8802D44402003824C40322755849AF +:1068E0004003220250828310A10210AD81A6A0288D +:1068F00080C200260001010054207350113101AC08 +:1069000000A000A15800C4001232408400000CF224 +:1069100002EE32E02090C608148C0010E00CB08427 +:106920000B1800344010388A00242441C001AB0009 +:1069300032440EA00121C00404814005DC09235229 +:106940001B5049520804C4BD0251043076020A01AA +:106950001010000000003190012020314880411CBF +:1069600000020C008108D0000031082780002000C0 +:1069700000320A0981101800946208C1051011083C +:10698000004408060500002100002018040A020146 +:1069900000400040020540C52801100400000880A6 +:1069A000000202000080800042000022400002003D +:1069B00000024124801100200000A84890214200DC +:1069C0000204131304E21022004C0208D30014E066 +:1069D0001048082004480204C000001000200000F5 +:1069E0001180400800800080000C43D4002080000B +:1069F0008102014102801008000000000110000027 +:106A00000002C00000001830000000004001020039 +:106A100010008019F000190000803400010002808D +:106A200000240402202CE2000800A0C0182000046A +:106A30008004022000A00200330060C0000000407B +:106A40000000884000804008680010080080002096 +:106A500020000000010000090810070020001000BD +:106A60000000020800020201028040590020000AD2 +:106A700000028220401008004205D109440116009E +:106A800004400000000000802020002000000000E2 +:106A9000000800002CA00000280000010000904227 +:106AA00088840408E00408004804129028264A005C +:106AB000000000800010A00000002000050004007D +:106AC000080002000000C6000101040105001C20AE +:106AD000000002810080200000020004488151541F +:106AE0005A012001400820082808280080000000E2 +:106AF0000180800000808C21229B0C50040000400B +:106B000000225400000020C00808000100273C3784 +:106B1000858E147025DC03C0010200036013184841 +:106B200002001040000210001A200001018620EB34 +:106B3000A4B355036E8000012400A000250206289E +:106B400002338C99F73A21009773BF40E0920937DE +:106B5000C9FC1221240E88210E0083907D906208CA +:106B6000002C0014101D08E1CC006400006020B06F +:106B700020000880C402109808001B003E0000039B +:106B8000A160010106820C4040F004310013C141B4 +:106B9000400106000000000000000000001052004C +:106BA0000800A940000000000600010000001000DD +:106BB00000002000C420104004020000000100205A +:106BC00000000000E8048001052000000000080427 +:106BD0000000000000020242040000000400100057 +:106BE000000060000004000891028062021412108C +:106BF0000110800900040800200200400400400841 +:106C00000080220408000000182000220200004139 +:106C1000003008F801200820024040398220800618 +:106C20000390901010002021000D400680100000FD +:106C300001000820002001AB0020015A100830A1FB +:106C4000C204080860C0000C0A14208081021104EC +:106C500000428C000001185018002040001801026A +:106C600010000004100182008A0020008423041018 +:106C70000C287020043852000103061020408102C5 +:106C80003020818500102084632060802500001062 +:106C900010E101820E143041000E0C20C1070A10D1 +:106CA000208019460000084E70000038C20806080F +:106CB00031800000020420408506008800BEFF3BB2 +:106CC0007BC7FF13CC18FCEF020D435FC3D0203FFE +:106CD0004412224BB78007C4BE7D0D3780EFD3CD61 +:106CE000F4FFFF137F03030001000D5400088C0024 +:106CF00000000441511E5541616012100000000067 +:106D00000000000000100010040200C0000030006D +:106D10000000000000000000000000000000000073 +:106D20000000000000000000000000000000000063 +:106D30000000000000000000000000FFFC0000CF89 +:106D4000FFC0000CFFFC0000CFFFC0000CFFFC00E8 +:106D500000CFFFC0000CFFFC0000CFFFC0020C0002 +:106D6000000000000000000008000000000000001B +:106D70000000000000000000000000000000000013 +:106D80000000000000000000000000000000000003 +:106D9000CFFFC0000CFFFC0000CFFFC0000CFFFCC9 +:106DA0000000CFFFC0020C00000000000000000047 +:106DB00008000000000000000000000000000000CB +:106DC00000000000000000000000000000000000C3 +:106DD00000000000000000000000000000000000B3 +:106DE00000000000000000000000000000000000A3 +:106DF0000000000000000000000000000000000093 +:106E00000000000000000000000000000000000082 +:106E10000000000000000000000000000000000072 +:106E20000000000000000000000000000000000062 +:106E30000000000000000000000000000000000052 +:106E40000000000000000000000000000000000042 +:106E50000000000000000000000000000000000032 +:106E60000000000000000000000000000000000022 +:106E70000000000000000000000000000000000012 +:106E80000000000000000000000000000000000002 +:106E900000000000000000000000000000000000F2 +:106EA00000000000000000000000000000000000E2 +:106EB00000000000000000000000000000000000D2 +:106EC00000000000000000000000000000000000C2 +:106ED00000000000000000000000000000000000B2 +:106EE00000000000000000000000000000000000A2 +:106EF0000000000000000000000000000000000092 +:106F00000000000000000000000000000000000081 +:106F10000000000000000000000000000000000071 +:106F20000000000000000000000000000000000061 +:106F30000000000000000000000000000000000051 +:106F40000000000000000000000000000000000041 +:106F50000000000000000000000000000000000031 +:106F60000000000000000000000000000000000021 +:106F70000000000000000000000000000000000011 +:106F80000000000000000000000000000000000001 +:106F900000000000000000000000000000000000F1 +:106FA00000000000000000000000000000000000E1 +:106FB00000000000000000000000000000000000D1 +:106FC00000000000000000000000000000000000C1 +:106FD00000000000000000000000000000000000B1 +:106FE00000000000000000000000000000000000A1 +:106FF0000000000000000000000000000000000091 +:107000000000000000000000000000000000000080 +:107010000000000000000000000000000000000070 +:107020000000000000000000000000000000000060 +:107030000000000000000000000000000000000050 +:107040000000000000000000000000000000000040 +:107050000000000000000000000000000000000030 +:107060000000000000000000000000000000000020 +:107070000000000000000000000000000000000010 +:107080000000000000000000000000000000000000 +:1070900000000000000000000000000000000000F0 +:1070A00000000000000000000000000000000000E0 +:1070B00000000000000000000000000000000000D0 +:1070C00000000000000000000000000000000000C0 +:1070D00000000000000000000000000000000000B0 +:1070E00000000000000000000000000000000000A0 +:1070F0000000000000000000000000000000000090 +:10710000000000000000000000000000000000007F +:10711000000000000000000000000000000000006F +:10712000000000000000000000000000000000005F +:10713000000000000000000000000000000000004F +:10714000000000000000000000000000000000003F +:10715000000000000000000000000000000000002F +:10716000000000000000000000000000000000001F +:10717000000000000000000000000000000000000F +:1071800000000000000000000000000000000000FF +:1071900000000000000000000000000000000000EF +:1071A00000000000000000000000000000000000DF +:1071B00000000000000000000000000000000000CF +:1071C00000000000000000000000000000000000BF +:1071D00000000000000000000000000000000000AF +:1071E000000000000000000000000000000000009F +:1071F000000000000000000000000000000000008F +:10720000000000000000000000000000000000007E +:10721000000000000000000000000000000000006E +:10722000000000000000000000000000000000005E +:10723000000000000000000000000000000000004E +:10724000000000000000000000000000000000003E +:10725000000000000000000000000000000000002E +:10726000000000000000000000000000000000001E +:10727000000000000000000000000000000000000E +:1072800000000000000000000000000000000000FE +:1072900000000000000000000000000000000000EE +:1072A00000000000000000000000000000000000DE +:1072B00000000000000000000000000000000000CE +:1072C00000000000000000000000000000000000BE +:1072D00000000000000000000000000000000000AE +:1072E000000000000000000000000000000000009E +:1072F000000000000000000000000000000000008E +:10730000000000000000000000000000000000007D +:10731000000000000000000000000000000000006D +:10732000000000000000000000000000000000005D +:10733000000000000000000000000000000000004D +:10734000000000000000000000000000000000003D +:10735000000000000000000000000000000000002D +:10736000000000000000000000000000000000001D +:10737000000000000000000000000000000000000D +:1073800000000000000000000000000000000000FD +:1073900000000000000000000000000000000000ED +:1073A00000000000000000000000000000000000DD +:1073B00000000000000000000000000000000000CD +:1073C00000000000000000000000000000000000BD +:1073D00000000000000000000000000000000000AD +:1073E000000000000000000000000000000000009D +:1073F000000000000000000000000000000000008D +:10740000000000000000000000000000000000007C +:10741000000000000000000000000000000000006C +:10742000000000000000000000000000000000005C +:10743000000000000000000000000000000000004C +:10744000000000000000000000000000000000003C +:10745000000000000000000000000000000000002C +:10746000000000000000000000000000000000001C +:10747000000000000000000000000000000000000C +:1074800000000000000000000000000000000000FC +:1074900000000000000000000000000000000000EC +:1074A00000000000000000000000000000000000DC +:1074B00000000000000000000000000000000000CC +:1074C00000000000000000000000000000000000BC +:1074D00000000000000000000000000000000000AC +:1074E000000000000000000000000000000000009C +:1074F000000000000000000000000000000000008C +:10750000000000000000000000000000000000007B +:10751000000000000000000000000000000000006B +:10752000000000000000000000000000000000005B +:10753000000000000000000000000000000000004B +:10754000000000000000000000000000000000003B +:10755000000000000000000000000000000000002B +:10756000000000000000000000000000000000001B +:10757000000000000000000000000000000000000B +:1075800000000000000000000000000000000000FB +:1075900000000000000000000000000000000000EB +:1075A00000000000000000000000000000000000DB +:1075B00000000000000000000000000000000000CB +:1075C00000000000000000000000000000000000BB +:1075D00000000000000000000000000000000000AB +:1075E000000000000000000000000000000000009B +:1075F000000000000000000000000000000000008B +:10760000000000000000000000000000000000007A +:10761000000000000000000000000000000000006A +:10762000000000000000000000000000000000005A +:10763000000000000000000000000000000000004A +:10764000000000000000000000000000000000003A +:10765000000000000000000000000000000000002A +:10766000000000000000000000000000000000001A +:10767000000000000000000000000000000000000A +:1076800000000000000000000000000000000000FA +:1076900000000000000000000000000000000000EA +:1076A00000000000000000000000000000000000DA +:1076B00000000000000000000000000000000000CA +:1076C00000000000000000000000000000000000BA +:1076D00000000000000000000000000000000000AA +:1076E000000000000000000000000000000000009A +:1076F000000000000000000000000000000000008A +:107700000000000000000000000000000000000079 +:107710000000000000000000000000000000000069 +:107720000000000000000000000000000000000059 +:107730000000000000000000000000000000000049 +:107740000000000000000000000000000000000039 +:107750000000000000000000000000000000000029 +:107760000000000000000000000000000000000019 +:107770000000000000000000000000000000000009 +:1077800000000000000000000000000000000000F9 +:1077900000000000000000000000000000000000E9 +:1077A00000000000000000000000000000000000D9 +:1077B00000000000000000000000000000000000C9 +:1077C00000000000000000000000000000000000B9 +:1077D00000000000000000000000000000000000A9 +:1077E0000000000000000000000000000000000099 +:1077F0000000000000000000000000000000000089 +:107800000000000000000000000000000000000078 +:107810000000000000000000000000000000000068 +:107820000000000000000000000000000000000058 +:107830000000000000000000000000000000000048 +:107840000000000000000000000000000000000038 +:107850000000000000000000000000000000000028 +:107860000000000000000000000000000000000018 +:107870000000000000000000000000000000000008 +:1078800000000000000000000000000000000000F8 +:1078900000000000000000000000000000000000E8 +:1078A00000000000000000000000000000000000D8 +:1078B00000000000000000000000000000000000C8 +:1078C00000000000000000000000000000000000B8 +:1078D00000000000000000000000000000000000A8 +:1078E0000000000000000000000000000000000098 +:1078F0000000000000000000000000000000000088 +:107900000000000000000000000000000000000077 +:107910000000000000000000000000000000000067 +:107920000000000000000000000000000000000057 +:107930000000000000000000000000000000000047 +:107940000000000000000000000000000000000037 +:107950000000000000000000000000000000000027 +:107960000000000000000000000000000000000017 +:107970000000000000000000000000000000000007 +:1079800000000000000000000000000000000000F7 +:1079900000000000000000000000000000000000E7 +:1079A00000000000000000000000000000000000D7 +:1079B00000000000000000000000000000000000C7 +:1079C00000000000000000000000000000000000B7 +:1079D00000000000000000000000000000000000A7 +:1079E0000000000000000000000000000000000097 +:1079F0000000000000000000000000000000000087 +:107A00000000000000000000000000000000000076 +:107A10000000000000000000000000000000000066 +:107A20000000000000000000000000000000000056 +:107A30000000000000000000000000000000000046 +:107A40000000000000000000000000000000000036 +:107A50000000000000000000000000000000000026 +:107A60000000000000000000000000000000000016 +:107A70000000000000000000000000000000000006 +:107A800000000000000000000000000000000000F6 +:107A900000000000000000000000000000000000E6 +:107AA00000000000000000000000000000000000D6 +:107AB00000000000000000000000000000000000C6 +:107AC00000000000000000000000000000000000B6 +:107AD00000000000000000000000000000000000A6 +:107AE0000000000000000000000000000000000096 +:107AF0000000000000000000000000000000000086 +:107B00000000000000000000000000000000000075 +:107B10000000000000000000000000000000000065 +:107B20000000000000000000000000000000000055 +:107B30000000000000000000000000000000000045 +:107B40000000000000000000000000000000000035 +:107B50000000000000000000000000000000000025 +:107B60000000000000000000000000000000000015 +:107B70000000000000000000000000000000000005 +:107B800000000000000000000000000000000000F5 +:107B900000000000000000000000000000000000E5 +:107BA00000000000000000000000000000000000D5 +:107BB00000000000000000000000000000000000C5 +:107BC00000000000000000000000000000000000B5 +:107BD00000000000000000000000000000000000A5 +:107BE0000000000000000000000000000000000095 +:107BF0000000000000000000000000000000000085 +:107C00000000000000000000000000000000000074 +:107C10000000000000000000000000000000000064 +:107C20000000000000000000000000000000000054 +:107C30000000000000000000000000000000000044 +:107C40000000000000000000000000000000000034 +:107C50000000000000000000000000000000000024 +:107C60000000000000000000000000000000000014 +:107C70000000000000000000000000000000000004 +:107C800000000000000000000000000000000000F4 +:107C900000000000000000000000000000000000E4 +:107CA00000000000000000000000000000000000D4 +:107CB00000000000000000000000000000000000C4 +:107CC00000000000000000000000000000000000B4 +:107CD00000000000000000000000000000000000A4 +:107CE0000000000000000000000000000000000094 +:107CF0000000000000000000000000000000000084 +:107D00000000000000000000000000000000000073 +:107D10000000000000000000000000000000000063 +:107D20000000000000000000000000000000000053 +:107D30000000000000000000000000000000000043 +:107D40000000000000000000000000000000000033 +:107D50000000000000000000000000000000000023 +:107D60000000000000000000000000000000000013 +:107D70000000000000000000000000000000000003 +:107D800000000000000000000000000000000000F3 +:107D900000000000000000000000000000000000E3 +:107DA00000000000000000000000000000000000D3 +:107DB00000000000000000000000000000000000C3 +:107DC00000000000000000000000000000000000B3 +:107DD00000000000000000000000000000000000A3 +:107DE0000000000000000000000000000000000093 +:107DF0000000000000000000000000000000000083 +:107E00000000000000000000000000000000000072 +:107E10000000000000000000000000000000000062 +:107E20000000000000000000000000000000000052 +:107E30000000000000000000000000000000000042 +:107E40000000000000000000000000000000000032 +:107E50000000000000000000000000000000000022 +:107E60000000000000000000000000000000000012 +:107E70000000000000000000000000000000000002 +:107E800000000000000000000000000000000000F2 +:107E900000000000000000000000000000000000E2 +:107EA00000000000000000000000000000000000D2 +:107EB00000000000000000000000000000000000C2 +:107EC00000000000000000000000000000000000B2 +:107ED00000000000000000000000000000000000A2 +:107EE0000000000000000000000000000000000092 +:107EF0000000000000000000000000000000000082 +:107F00000000000000000000000000000000000071 +:107F10000000000000000000000000000000000061 +:107F20000000000000000000000000000000000051 +:107F30000000000000000000000000000000000041 +:107F40000000000000000000000000000000000031 +:107F50000000000000000000000000000000000021 +:107F60000000000000000000000000000000000011 +:107F70000000000000000000000000000000000001 +:107F800000000000000000000000000000000000F1 +:107F900000000000000000000000000000000000E1 +:107FA00000000000000000000000000000000000D1 +:107FB00000000000000000000000000000000000C1 +:107FC00000000000000000000000000000000000B1 +:107FD00000000000000000000000000000000000A1 +:107FE0000000000000000000000000000000000091 +:107FF0000000000000000000000000000000000081 +:108000000000000000000000000000000000000070 +:108010000000000000000000000000000000000060 +:108020000000000000000000000000000000000050 +:108030000000000000000000000000000000000040 +:108040000000000000000000000000000000000030 +:108050000000000000000000000000000000000020 +:108060000000000000000000000000000000000010 +:108070000000000000000000000000000000000000 +:1080800000000000000000000000000000000000F0 +:1080900000000000000000000000000000000000E0 +:1080A00000000000000000000000000000000000D0 +:1080B00000000000000000000000000000000000C0 +:1080C00000000000000000000000000000000000B0 +:1080D00000000000000000000000000000000000A0 +:1080E0000000000000000000000000000000000090 +:1080F0000000000000000000000000000000000080 +:10810000000000000000000000000000000000006F +:10811000000000000000000000000000000000005F +:10812000000000000000000000000000000000004F +:10813000000000000000000000000000000000003F +:10814000000000000000000000000000000000002F +:10815000000000000000000000000000000000001F +:10816000000000000000000000000000000000000F +:1081700000000000000000000000000000000000FF +:1081800000000000000000000000000000000000EF +:1081900000000000000000000000000000000000DF +:1081A00000000000000000000000000000000000CF +:1081B00000000000000000000000000000000000BF +:1081C00000000000000000000000000000000000AF +:1081D000000000000000000000000000000000009F +:1081E000000000000000000000000000000000008F +:1081F000000000000000000000000000000000007F +:10820000000000000000000000000000000000006E +:10821000000000000000000000000000000000005E +:10822000000000000000000000000000000000004E +:10823000000000000000000000000000000000003E +:10824000000000000000000000000000000000002E +:10825000000000000000000000000000000000001E +:10826000000000000000000000000000000000000E +:1082700000000000000000000000000000000000FE +:1082800000000000000000000000000000000000EE +:1082900000000000000000000000000000000000DE +:1082A00000000000000000000000000000000000CE +:1082B00000000000000000000000000000000000BE +:1082C00000000000000000000000000000000000AE +:1082D000000000000000000000000000000000009E +:1082E000000000000000000000000000000000008E +:1082F000000000000000000000000000000000007E +:10830000000000000000000000000000000000006D +:10831000000000000000000000000000000000005D +:10832000000000000000000000000000000000004D +:10833000000000000000000000000000000000003D +:10834000000000000000000000000000000000002D +:10835000000000000000000000000000000000001D +:10836000000000000000000000000000000000000D +:1083700000000000000000000000000000000000FD +:1083800000000000000000000000000000000000ED +:1083900000000000000000000000000000000000DD +:1083A00000000000000000000000000000000000CD +:1083B00000000000000000000000000000000000BD +:1083C00000000000000000000000000000000000AD +:1083D000000000000000000000000000000000009D +:1083E000000000000000000000000000000000008D +:1083F000000000000000000000000000000000007D +:10840000000000000000000000000000000000006C +:10841000000000000000000000000000000000005C +:10842000000000000000000000000000000000004C +:10843000000000000000000000000000000000003C +:10844000000000000000000000000000000000002C +:10845000000000000000000000000000000000001C +:10846000000000000000000000000000000000000C +:1084700000000000000000000000000000000000FC +:1084800000000000000000000000000000000000EC +:1084900000000000000000000000000000000000DC +:1084A00000000000000000000000000000000000CC +:1084B00000000000000000000000000000000000BC +:1084C00000000000000000000000000000000000AC +:1084D000000000000000000000000000000000009C +:1084E000000000000000000000000000000000008C +:1084F000000000000000000000000000000000007C +:10850000000000000000000000000000000000006B +:10851000000000000000000000000000000000005B +:10852000000000000000000000000000000000004B +:10853000000000000000000000000000000000003B +:10854000000000000000000000000000000000002B +:10855000000000000000000000000000000000001B +:10856000000000000000000000000000000000000B +:1085700000000000000000000000000000000000FB +:1085800000000000000000000000000000000000EB +:1085900000000000000000000000000000000000DB +:1085A00000000000000000000000000000000000CB +:1085B00000000000000000000000000000000000BB +:1085C00000000000000000000000000000000000AB +:1085D000000000000000000000000000000000009B +:1085E000000000000000000000000000000000008B +:1085F000000000000000000000000000000000007B +:10860000000000000000000000000000000000006A +:10861000000000000000000000000000000000005A +:10862000000000000000000000000000000000004A +:10863000000000000000000000000000000000003A +:10864000000000000000000000000000000000002A +:10865000000000000000000000000000000000001A +:10866000000000000000000000000000000000000A +:1086700000000000000000000000000000000000FA +:1086800000000000000000000000000000000000EA +:1086900000000000000000000000000000000000DA +:1086A00000000000000000000000000000000000CA +:1086B00000000000000000000000000000000000BA +:1086C00000000000000000000000000000000000AA +:1086D000000000000000000000000000000000009A +:1086E000000000000000000000000000000000008A +:1086F000000000000000000000000000000000007A +:108700000000000000000000000000000000000069 +:108710000000000000000000000000000000000059 +:108720000000000000000000000000000000000049 +:108730000000000000000000000000000000000039 +:108740000000000000000000000000000000000029 +:108750000000000000000000000000000000000019 +:108760000000000000000000000000000000000009 +:1087700000000000000000000000000000000000F9 +:1087800000000000000000000000000000000000E9 +:1087900000000000000000000000000000000000D9 +:1087A00000000000000000000000000000000000C9 +:1087B00000000000000000000000000000000000B9 +:1087C00000000000000000000000000000000000A9 +:1087D0000000000000000000000000000000000099 +:1087E0000000000000000000000000000000000089 +:1087F0000000000000000000000000000000000079 +:108800000000000000000000000000000000000068 +:108810000000000000000000000000000000000058 +:108820000000000000000000000000000000000048 +:108830000000000000000000000000000000000038 +:108840000000000000000000000000000000000028 +:108850000000000000000000000000000000000018 +:108860000000000000000000000000000000000008 +:1088700000000000000000000000000000000000F8 +:1088800000000000000000000000000000000000E8 +:1088900000000000000000000000000000000000D8 +:1088A00000000000000000000000000000000000C8 +:1088B00000000000000000000000000000000000B8 +:1088C00000000000000000000000000000000000A8 +:1088D0000000000000000000000000000000000098 +:1088E0000000000000000000000000000000000088 +:1088F0000000000000000000000000000000000078 +:108900000000000000000000000000000000000067 +:108910000000000000000000000000000000000057 +:108920000000000000000000000000000000000047 +:108930000000000000000000000000000000000037 +:108940000000000000000000000000000000000027 +:108950000000000000000000000000000000000017 +:108960000000000000000000000000000000000007 +:1089700000000000000000000000000000000000F7 +:1089800000000000000000000000000000000000E7 +:1089900000000000000000000000000000000000D7 +:1089A00000000000000000000000000000000000C7 +:1089B00000000000000000000000000000000000B7 +:1089C00000000000000000000000000000000000A7 +:1089D0000000000000000000000000000000000097 +:1089E0000000000000000000000000000000000087 +:1089F0000000000000000000000000000000000077 +:108A00000000000000000000000000000000000066 +:108A10000000000000000000000000000000000056 +:108A20000000000000000000000000000000000046 +:108A30000000000000000000000000000000000036 +:108A40000000000000000000000000000000000026 +:108A50000000000000000000000000000000000016 +:108A60000000000000000000000000000000000006 +:108A700000000000000000000000000000000000F6 +:108A800000000000000000000000000000000000E6 +:108A900000000000000000000000000000000000D6 +:108AA00000000000000000000000000000000000C6 +:108AB00000000000000000000000000000000000B6 +:108AC00000000000000000000000000000000000A6 +:108AD0000000000000000000000000000000000096 +:108AE0000000000000000000000000000000000086 +:108AF0000000000000000000000000000000000076 +:108B00000000000000000000000000000000000065 +:108B10000000000000000000000000000000000055 +:108B20000000000000000000000000000000000045 +:108B30000000000000000000000000000000000035 +:108B40000000000000000000000000000000000025 +:108B50000000000000000000000000000000000015 +:108B60000000000000000000000000000000000005 +:108B700000000000000000000000000000000000F5 +:108B800000000000000000000000000000000000E5 +:108B900000000000000000000000000000000000D5 +:108BA00000000000000000000000000000000000C5 +:108BB00000000000000000000000000000000000B5 +:108BC00000000000000000000000000000000000A5 +:108BD0000000000000000000000000000000000095 +:108BE0000000000000000000000000000000000085 +:108BF0000000000000000000000000000000000075 +:108C00000000000000000000000000000000000064 +:108C10000000000000000000000000000000000054 +:108C20000000000000000000000000000000000044 +:108C30000000000000000000000000000000000034 +:108C40000000000000000000000000000000000024 +:108C50000000000000000000000000000000000014 +:108C60000000000000000000000000000000000004 +:108C700000000000000000000000000000000000F4 +:108C800000000000000000000000000000000000E4 +:108C900000000000000000000000000000000000D4 +:108CA00000000000000000000000000000000000C4 +:108CB00000000000000000000000000000000000B4 +:108CC00000000000000000000000000000000000A4 +:108CD0000000000000000000000000000000000094 +:108CE0000000000000000000000000000000000084 +:108CF0000000000000000000000000000000000074 +:108D00000000000000000000000000000000000063 +:108D10000000000000000000000000000000000053 +:108D20000000000000000000000000000000000043 +:108D30000000000000000000000000000000000033 +:108D40000000000000000000000000000000000023 +:108D50000000000000000000000000000000000013 +:108D60000000000000000000000000000000000003 +:108D700000000000000000000000000000000000F3 +:108D800000000000000000000000000000000000E3 +:108D900000000000000000000000000000000000D3 +:108DA00000000000000000000000000000000000C3 +:108DB00000000000000000000000000000000000B3 +:108DC00000000000000000000000000000000000A3 +:108DD0000000000000000000000000000000000093 +:108DE0000000000000000000000000000000000083 +:108DF0000000000000000000000000000000000073 +:108E00000000000000000000000000000000000062 +:108E10000000000000000000000000000000000052 +:108E20000000000000000000000000000000000042 +:108E30000000000000000000000000000000000032 +:108E40000000000000000000000000000000000022 +:108E50000000000000000000000000000000000012 +:108E60000000000000000000000000000000000002 +:108E700000000000000000000000000000000000F2 +:108E800000000000000000000000000000000000E2 +:108E900000000000000000000000000000000000D2 +:108EA00000000000000000000000000000000000C2 +:108EB00000000000000000000000000000000000B2 +:108EC00000000000000000000000000000000000A2 +:108ED0000000000000000000000000000000000092 +:108EE0000000000000000000000000000000000082 +:108EF0000000000000000000000000000000000072 +:108F00000000000000000000000000000000000061 +:108F10000000000000000000000000000000000051 +:108F20000000000000000000000000000000000041 +:108F30000000000000000000000000000000000031 +:108F40000000000000000000000000000000000021 +:108F50000000000000000000000000000000000011 +:108F60000000000000000000000000000000000001 +:108F700000000000000000000000000000000000F1 +:108F800000000000000000000000000000000000E1 +:108F900000000000000000000000000000000000D1 +:108FA00000000000000000000000000000000000C1 +:108FB00000000000000000000000000000000000B1 +:108FC00000000000000000000000000000000000A1 +:108FD0000000000000000000000000000000000091 +:108FE0000000000000000000000000000000000081 +:108FF0000000000000000000000000000000000071 +:109000000000000000000000000000000000000060 +:109010000000000000000000000000000000000050 +:109020000000000000000000000000000000000040 +:109030000000000000000000000000000000000030 +:109040000000000000000000000000000000000020 +:109050000000000000000000000000000000000010 +:109060000000000000000000000000000000000000 +:1090700000000000000000000000000000000000F0 +:1090800000000000000000000000000000000000E0 +:1090900000000000000000000000000000000000D0 +:1090A00000000000000000000000000000000000C0 +:1090B00000000000000000000000000000000000B0 +:1090C00000000000000000000000000000000000A0 +:1090D0000000000000000000000000000000000090 +:1090E0000000000000000000000000000000000080 +:1090F0000000000000000000000000000000000070 +:10910000000000000000000000000000000000005F +:10911000000000000000000000000000000000004F +:10912000000000000000000000000000000000003F +:10913000000000000000000000000000000000002F +:10914000000000000000000000000000000000001F +:10915000000000000000000000000000000000000F +:1091600000000000000000000000000000000000FF +:1091700000000000000000000000000000000000EF +:1091800000000000000000000000000000000000DF +:1091900000000000000000000000000000000000CF +:1091A00000000000000000000000000000000000BF +:1091B00000000000000000000000000000000000AF +:1091C000000000000000000000000000000000009F +:1091D000000000000000000000000000000000008F +:1091E000000000000000000000000000000000007F +:1091F000000000000000000000000000000000006F +:10920000000000000000000000000000000000005E +:10921000000000000000000000000000000000004E +:10922000000000000000000000000000000000003E +:10923000000000000000000000000000000000002E +:10924000000000000000000000000000000000001E +:10925000000000000000000000000000000000000E +:1092600000000000000000000000000000000000FE +:1092700000000000000000000000000000000000EE +:1092800000000000000000000000000000000000DE +:1092900000000000000000000000000000000000CE +:1092A00000000000000000000000000000000000BE +:1092B00000000000000000000000000000000000AE +:1092C000000000000000000000000000000000009E +:1092D000000000000000000000000000000000008E +:1092E000000000000000000000000000000000007E +:1092F000000000000000000000000000000000006E +:10930000000000000000000000000000000000005D +:10931000000000000000000000000000000000004D +:10932000000000000000000000000000000000003D +:10933000000000000000000000000000000000002D +:10934000000000000000000000000000000000001D +:10935000000000000000000000000000000000000D +:1093600000000000000000000000000000000000FD +:1093700000000000000000000000000000000000ED +:1093800000000000000000000000000000000000DD +:1093900000000000000000000000000000000000CD +:1093A00000000000000000000000000000000000BD +:1093B00000000000000000000000000000000000AD +:1093C000000000000000000000000000000000009D +:1093D000000000000000000000000000000000008D +:1093E000000000000000000000000000000000007D +:1093F000000000000000000000000000000000006D +:10940000000000000000000000000000000000005C +:10941000000000000000000000000000000000004C +:10942000000000000000000000000000000000003C +:10943000000000000000000000000000000000002C +:10944000000000000000000000000000000000001C +:10945000000000000000000000000000000000000C +:1094600000000000000000000000000000000000FC +:1094700000000000000000000000000000000000EC +:1094800000000000000000000000000000000000DC +:1094900000000000000000000000000000000000CC +:1094A00000000000000000000000000000000000BC +:1094B00000000000000000000000000000000000AC +:1094C000000000000000000000000000000000009C +:1094D000000000000000000000000000000000008C +:1094E000000000000000000000000000000000007C +:1094F000000000000000000000000000000000006C +:10950000000000000000000000000000000000005B +:10951000000000000000000000000000000000004B +:10952000000000000000000000000000000000003B +:10953000000000000000000000000000000000002B +:10954000000000000000000000000000000000001B +:10955000000000000000000000000000000000000B +:1095600000000000000000000000000000000000FB +:1095700000000000000000000000000000000000EB +:1095800000000000000000000000000000000000DB +:1095900000000000000000000000000000000000CB +:1095A00000000000000000000000000000000000BB +:1095B00000000000000000000000000000000000AB +:1095C000000000000000000000000000000000009B +:1095D000000000000000000000000000000000008B +:1095E000000000000000000000000000000000007B +:1095F000000000000000000000000000000000006B +:10960000000000000000000000000000000000005A +:10961000000000000000000000000000000000004A +:10962000000000000000000000000000000000003A +:10963000000000000000000000000000000000002A +:10964000000000000000000000000000000000001A +:10965000000000000000000000000000000000000A +:1096600000000000000000000000000000000000FA +:1096700000000000000000000000000000000000EA +:1096800000000000000000000000000000000000DA +:1096900000000000000000000000000000000000CA +:1096A00000000000000000000000000000000000BA +:1096B00000000000000000000000000000000000AA +:1096C000000000000000000000000000000000009A +:1096D000000000000000000000000000000000008A +:1096E000000000000000000000000000000000007A +:1096F000000000000000000000000000000000006A +:109700000000000000000000000000000000000059 +:109710000000000000000000000000000000000049 +:109720000000000000000000000000000000000039 +:109730000000000000000000000000000000000029 +:109740000000000000000000000000000000000019 +:109750000000000000000000000000000000000009 +:1097600000000000000000000000000000000000F9 +:1097700000000000000000000000000000000000E9 +:1097800000000000000000000000000000000000D9 +:1097900000000000000000000000000000000000C9 +:1097A00000000000000000000000000000000000B9 +:1097B00000000000000000000000000000000000A9 +:1097C0000000000000000000000000000000000099 +:1097D0000000000000000000000000000000000089 +:1097E0000000000000000000000000000000000079 +:1097F0000000000000000000000000000000000069 +:109800000000000000000000000000000000000058 +:109810000000000000000000000000000000000048 +:109820000000000000000000000000000000000038 +:109830000000000000000000000000000000000028 +:109840000000000000000000000000000000000018 +:109850000000000000000000000000000000000008 +:1098600000000000000000000000000000000000F8 +:1098700000000000000000000000000000000000E8 +:1098800000000000000000000000000000000000D8 +:1098900000000000000000000000000000000000C8 +:1098A00000000000000000000000000000000000B8 +:1098B00000000000000000000000000000000000A8 +:1098C0000000000000000000000000000000000098 +:1098D0000000000000000000000000000000000088 +:1098E0000000000000000000000000000000000078 +:1098F0000000000000000000000000000000000068 +:109900000000000000000000000000000000000057 +:109910000000000000000000000000000000000047 +:109920000000000000000000000000000000000037 +:109930000000000000000000000000000000000027 +:109940000000000000000000000000000000000017 +:109950000000000000000000000000000000000007 +:1099600000000000000000000000000000000000F7 +:1099700000000000000000000000000000000000E7 +:1099800000000000000000000000000000000000D7 +:1099900000000000000000000000000000000000C7 +:1099A00000000000000000000000000000000000B7 +:1099B00000000000000000000000000000000000A7 +:1099C0000000000000000000000000000000000097 +:1099D0000000000000000000000000000000000087 +:1099E0000000000000000000000000000000000077 +:1099F0000000000000000000000000000000000067 +:109A00000000000000000000000000000000000056 +:109A10000000000000000000000000000000000046 +:109A20000000000000000000000000000000000036 +:109A30000000000000000000000000000000000026 +:109A40000000000000000000000000000000000016 +:109A50000000000000000000000000000000000006 +:109A600000000000000000000000000000000000F6 +:109A700000000000000000000000000000000000E6 +:109A800000000000000000000000000000000000D6 +:109A900000000000000000000000000000000000C6 +:109AA00000000000000000000000000000000000B6 +:109AB00000000000000000000000000000000000A6 +:109AC0000000000000000000000000000000000096 +:109AD0000000000000000000000000000000000086 +:109AE0000000000000000000000000000000000076 +:109AF0000000000000000000000000000000000066 +:109B00000000000000000000000000000000000055 +:109B10000000000000000000000000000000000045 +:109B20000000000000000000000000000000000035 +:109B30000000000000000000000000000000000025 +:109B40000000000000000000000000000000000015 +:109B50000000000000000000000000000000000005 +:109B600000000000000000000000000000000000F5 +:109B700000000000000000000000000000000000E5 +:109B800000000000000000000000000000000000D5 +:109B900000000000000000000000000000000000C5 +:109BA00000000000000000000000000000000000B5 +:109BB00000000000000000000000000000000000A5 +:109BC0000000000000000000000000000000000095 +:109BD0000000000000000000000000000000000085 +:109BE0000000000000000000000000000000000075 +:109BF0000000000000000000000000000000000065 +:109C00000000000000000000000000000000000054 +:109C10000000000000000000000000000000000044 +:109C20000000000000000000000000000000000034 +:109C30000000000000000000000000000000000024 +:109C40000000000000000000000000000000000014 +:109C50000000000000000000000000000000000004 +:109C600000000000000000000000000000000000F4 +:109C700000000000000000000000000000000000E4 +:109C800000000000000000000000000000000000D4 +:109C900000000000000000000000000000000000C4 +:109CA00000000000000000000000000000000000B4 +:109CB00000000000000000000000000000000000A4 +:109CC0000000000000000000000000000000000094 +:109CD0000000000000000000000000000000000084 +:109CE0000000000000000000000000000000000074 +:109CF0000000000000000000000000000000000064 +:109D00000000000000000000000000000000000053 +:109D10000000000000000000000000000000000043 +:109D20000000000000000000000000000000000033 +:109D30000000000000000000000000000000000023 +:109D40000000000000000000000000000000000013 +:109D50000000000000000000000000000000000003 +:109D600000000000000000000000000000000000F3 +:109D700000000000000000000000000000000000E3 +:109D800000000000000000000000000000000000D3 +:109D900000000000000000000000000000000000C3 +:109DA00000000000000000000000000000000000B3 +:109DB00000000000000000000000000000000000A3 +:109DC0000000000000000000000000000000000093 +:109DD0000000000000000000000000000000000083 +:109DE0000000000000000000000000000000000073 +:109DF0000000000000000000000000000000000063 +:109E00000000000000000000000000000000000052 +:109E10000000000000000000000000000000000042 +:109E20000000000000000000000000000000000032 +:109E30000000000000000000000000000000000022 +:109E40000000000000000000000000000000000012 +:109E50000000000000000000000000000000000002 +:109E600000000000000000000000000000000000F2 +:109E700000000000000000000000000000000000E2 +:109E800000000000000000000000000000000000D2 +:109E900000000000000000000000000000000000C2 +:109EA00000000000000000000000000000000000B2 +:109EB00000000000000000000000000000000000A2 +:109EC0000000000000000000000000000000000092 +:109ED0000000000000000000000000000000000082 +:109EE0000000000000000000000000000000000072 +:109EF0000000000000000000000000000000000062 +:109F00000000000000000000000000000000000051 +:109F10000000000000000000000000000000000041 +:109F20000000000000000000000000000000000031 +:109F30000000000000000000000000000000000021 +:109F40000000000000000000000000000000000011 +:109F50000000000000000000000000000000000001 +:109F600000000000000000000000000000000000F1 +:109F700000000000000000000000000000000000E1 +:109F800000000000000000000000000000000000D1 +:109F900000000000000000000000000000000000C1 +:109FA00000000000000000000000000000000000B1 +:109FB00000000000000000000000000000000000A1 +:109FC0000000000000000000000000000000000091 +:109FD0000000000000000000000000000000000081 +:109FE0000000000000000000000000000000000071 +:109FF0000000000000000000000000000000000061 +:10A000000000000000000000000000000000000050 +:10A010000000000000000000000000000000000040 +:10A020000000000000000000000000000000000030 +:10A030000000000000000000000000000000000020 +:10A040000000000000000000000000000000000010 +:10A050000000000000000000000000000000000000 +:10A0600000000000000000000000000000000000F0 +:10A0700000000000000000000000000000000000E0 +:10A0800000000000000000000000000000000000D0 +:10A0900000000000000000000000000000000000C0 +:10A0A00000000000000000000000000000000000B0 +:10A0B00000000000000000000000000000000000A0 +:10A0C0000000000000000000000000000000000090 +:10A0D0000000000000000000000000000000000080 +:10A0E0000000000000000000000000000000000070 +:10A0F0000000000000000000000000000000000060 +:10A10000000000000000000000000000000000004F +:10A11000000000000000000000000000000000003F +:10A12000000000000000000000000000000000002F +:10A13000000000000000000000000000000000001F +:10A14000000000000000000000000000000000000F +:10A1500000000000000000000000000000000000FF +:10A1600000000000000000000000000000000000EF +:10A1700000000000000000000000000000000000DF +:10A1800000000000000000000000000000000000CF +:10A1900000000000000000000000000000000000BF +:10A1A00000000000000000000000000000000000AF +:10A1B000000000000000000000000000000000009F +:10A1C000000000000000000000000000000000008F +:10A1D000000000000000000000000000000000007F +:10A1E000000000000000000000000000000000006F +:10A1F000000000000000000000000000000000005F +:10A20000000000000000000000000000000000004E +:10A21000000000000000000000000000000000003E +:10A22000000000000000000000000000000000002E +:10A23000000000000000000000000000000000001E +:10A24000000000000000000000000000000000000E +:10A2500000000000000000000000000000000000FE +:10A2600000000000000000000000000000000000EE +:10A2700000000000000000000000000000000000DE +:10A2800000000000000000000000000000000000CE +:10A2900000000000000000000000000000000000BE +:10A2A00000000000000000000000000000000000AE +:10A2B000000000000000000000000000000000009E +:10A2C000000000000000000000000000000000008E +:10A2D000000000000000000000000000000000007E +:10A2E000000000000000000000000000000000006E +:10A2F000000000000000000000000000000000005E +:10A30000000000000000000000000000000000004D +:10A31000000000000000000000000000000000003D +:10A32000000000000000000000000000000000002D +:10A33000000000000000000000000000000000001D +:10A34000000000000000000000000000000000000D +:10A3500000000000000000000000000000000000FD +:10A3600000000000000000000000000000000000ED +:10A3700000000000000000000000000000000000DD +:10A3800000000000000000000000000000000000CD +:10A3900000000000000000000000000000000000BD +:10A3A00000000000000000000000000000000000AD +:10A3B000000000000000000000000000000000009D +:10A3C000000000000000000000000000000000008D +:10A3D000000000000000000000000000000000007D +:10A3E000000000000000000000000000000000006D +:10A3F000000000000000000000000000000000005D +:10A40000000000000000000000000000000000004C +:10A41000000000000000000000000000000000003C +:10A42000000000000000000000000000000000002C +:10A43000000000000000000000000000000000001C +:10A44000000000000000000000000000000000000C +:10A4500000000000000000000000000000000000FC +:10A4600000000000000000000000000000000000EC +:10A4700000000000000000000000000000000000DC +:10A4800000000000000000000000000000000000CC +:10A4900000000000000000000000000000000000BC +:10A4A00000000000000000000000000000000000AC +:10A4B000000000000000000000000000000000009C +:10A4C000000000000000000000000000000000008C +:10A4D000000000000000000000000000000000007C +:10A4E000000000000000000000000000000000006C +:10A4F000000000000000000000000000000000005C +:10A50000000000000000000000000000000000004B +:10A51000000000000000000000000000000000003B +:10A52000000000000000000000000000000000002B +:10A53000000000000000000000000000000000001B +:10A54000000000000000000000000000000000000B +:10A5500000000000000000000000000000000000FB +:10A5600000000000000000000000000000000000EB +:10A5700000000000000000000000000000000000DB +:10A5800000000000000000000000000000000000CB +:10A5900000000000000000000000000000000000BB +:10A5A00000000000000000000000000000000000AB +:10A5B000000000000000000000000000000000009B +:10A5C000000000000000000000000000000000008B +:10A5D000000000000000000000000000000000007B +:10A5E000000000000000000000000000000000006B +:10A5F000000000000000000000000000000000005B +:10A60000000000000000000000000000000000004A +:10A61000000000000000000000000000000000003A +:10A62000000000000000000000000000000000002A +:10A63000000000000000000000000000000000001A +:10A64000000000000000000000000000000000000A +:10A6500000000000000000000000000000000000FA +:10A6600000000000000000000000000000000000EA +:10A6700000000000000000000000000000000000DA +:10A6800000000000000000000000000000000000CA +:10A6900000000000000000000000000000000000BA +:10A6A00000000000000000000000000000000000AA +:10A6B000000000000000000000000000000000009A +:10A6C000000000000000000000000000000000008A +:10A6D000000000000000000000000000000000007A +:10A6E000000000000000000000000000000000006A +:10A6F000000000000000000000000000000000005A +:10A700000000000000000000000000000000000049 +:10A710000000000000000000000000000000000039 +:10A720000000000000000000000000000000000029 +:10A730000000000000000000000000000000000019 +:10A740000000000000000000000000000000000009 +:10A7500000000000000000000000000000000000F9 +:10A7600000000000000000000000000000000000E9 +:10A7700000000000000000000000000000000000D9 +:10A7800000000000000000000000000000000000C9 +:10A7900000000000000000000000000000000000B9 +:10A7A00000000000000000000000000000000000A9 +:10A7B0000000000000000000000000000000000099 +:10A7C0000000000000000000000000000000000089 +:10A7D0000000000000000000000000000000000079 +:10A7E0000000000000000000000000000000000069 +:10A7F0000000000000000000000000000000000059 +:10A800000000000000000000000000000000000048 +:10A810000000000000000000000000000000000038 +:10A820000000000000000000000000000000000028 +:10A830000000000000000000000000000000000018 +:10A840000000000000000000000000000000000008 +:10A8500000000000000000000000000000000000F8 +:10A8600000000000000000000000000000000000E8 +:10A8700000000000000000000000000000000000D8 +:10A8800000000000000000000000000000000000C8 +:10A8900000000000000000000000000000000000B8 +:10A8A00000000000000000000000000000000000A8 +:10A8B0000000000000000000000000000000000098 +:10A8C0000000000000000000000000000000000088 +:10A8D0000000000000000000000000000000000078 +:10A8E0000000000000000000000000000000000068 +:10A8F0000000000000000000000000000000000058 +:10A900000000000000000000000000000000000047 +:10A910000000000000000000000000000000000037 +:10A920000000000000000000000000000000000027 +:10A930000000000000000000000000000000000017 +:10A940000000000000000000000000000000000007 +:10A9500000000000000000000000000000000000F7 +:10A9600000000000000000000000000000000000E7 +:10A9700000000000000000000000000000000000D7 +:10A9800000000000000000000000000000000000C7 +:10A9900000000000000000000000000000000000B7 +:10A9A00000000000000000000000000000000000A7 +:10A9B0000000000000000000000000000000000097 +:10A9C0000000000000000000000000000000000087 +:10A9D0000000000000000000000000000000000077 +:10A9E0000000000000000000000000000000000067 +:10A9F0000000000000000000000000000000000057 +:10AA00000000000000000000000000000000000046 +:10AA10000000000000000000000000000000000036 +:10AA20000000000000000000000000000000000026 +:10AA30000000000000000000000000000000000016 +:10AA40000000000000000000000000000000000006 +:10AA500000000000000000000000000000000000F6 +:10AA600000000000000000000000000000000000E6 +:10AA700000000000000000000000000000000000D6 +:10AA800000000000000000000000000000000000C6 +:10AA900000000000000000000000000000000000B6 +:10AAA00000000000000000000000000000000000A6 +:10AAB0000000000000000000000000000000000096 +:10AAC0000000000000000000000000000000000086 +:10AAD0000000000000000000000000000000000076 +:10AAE0000000000000000000000000000000000066 +:10AAF0000000000000000000000000000000000056 +:10AB00000000000000000000000000000000000045 +:10AB10000000000000000000000000000000000035 +:10AB20000000000000000000000000000000000025 +:10AB30000000000000000000000000000000000015 +:10AB40000000000000000000000000000000000005 +:10AB500000000000000000000000000000000000F5 +:10AB600000000000000000000000000000000000E5 +:10AB700000000000000000000000000000000000D5 +:10AB800000000000000000000000000000000000C5 +:10AB900000000000000000000000000000000000B5 +:10ABA00000000000000000000000000000000000A5 +:10ABB0000000000000000000000000000000000095 +:10ABC0000000000000000000000000000000000085 +:10ABD0000000000000000000000000000000000075 +:10ABE0000000000000000000000000000000000065 +:10ABF0000000000000000000000000000000000055 +:10AC00000000000000000000000000000000000044 +:10AC10000000000000000000000000000000000034 +:10AC20000000000000000000000000000000000024 +:10AC30000000000000000000000000000000000014 +:10AC40000000000000000000000000000000000004 +:10AC500000000000000000000000000000000000F4 +:10AC600000000000000000000000000000000000E4 +:10AC700000000000000000000000000000000000D4 +:10AC800000000000000000000000000000000000C4 +:10AC900000000000000000000000000000000000B4 +:10ACA00000000000000000000000000000000000A4 +:10ACB0000000000000000000000000000000000094 +:10ACC0000000000000000000000000000000000084 +:10ACD0000000000000000000000000000000000074 +:10ACE0000000000000000000000000000000000064 +:10ACF0000000000000000000000000000000000054 +:10AD00000000000000000000000000000000000043 +:10AD10000000000000000000000000000000000033 +:10AD20000000000000000000000000000000000023 +:10AD30000000000000000000000000000000000013 +:10AD40000000000000000000000000000000000003 +:10AD500000000000000000000000000000000000F3 +:10AD600000000000000000000000000000000000E3 +:10AD700000000000000000000000000000000000D3 +:10AD800000000000000000000000000000000000C3 +:10AD900000000000000000000000000000000000B3 +:10ADA00000000000000000000000000000000000A3 +:10ADB0000000000000000000000000000000000093 +:10ADC0000000000000000000000000000000000083 +:10ADD0000000000000000000000000000000000073 +:10ADE0000000000000000000000000000000000063 +:10ADF0000000000000000000000000000000000053 +:10AE00000000000000000000000000000000000042 +:10AE10000000000000000000000000000000000032 +:10AE20000000000000000000000000000000000022 +:10AE30000000000000000000000000000000000012 +:10AE40000000000000000000000000000000000002 +:10AE500000000000000000000000000000000000F2 +:10AE600000000000000000000000000000000000E2 +:10AE700000000000000000000000000000000000D2 +:10AE800000000000000000000000000000000000C2 +:10AE900000000000000000000000000000000000B2 +:10AEA00000000000000000000000000000000000A2 +:10AEB0000000000000000000000000000000000092 +:10AEC0000000000000000000000000000000000082 +:10AED0000000000000000000000000000000000072 +:10AEE0000000000000000000000000000000000062 +:10AEF0000000000000000000000000000000000052 +:10AF00000000000000000000000000000000000041 +:10AF10000000000000000000000000000000000031 +:10AF20000000000000000000000000000000000021 +:10AF30000000000000000000000000000000000011 +:10AF40000000000000000000000000000000000001 +:10AF500000000000000000000000000000000000F1 +:10AF600000000000000000000000000000000000E1 +:10AF700000000000000000000000000000000000D1 +:10AF800000000000000000000000000000000000C1 +:10AF900000000000000000000000000000000000B1 +:10AFA00000000000000000000000000000000000A1 +:10AFB0000000000000000000000000000000000091 +:10AFC0000000000000000000000000000000000081 +:10AFD0000000000000000000000000000000000071 +:10AFE0000000000000000000000000000000000061 +:10AFF0000000000000000000000000000000000051 +:10B000000000000000000000000000000000000040 +:10B010000000000000000000000000000000000030 +:10B020000000000000000000000000000000000020 +:10B030000000000000000000000000000000000010 +:10B040000000000000000000000000000000000000 +:10B0500000000000000000000000000000000000F0 +:10B0600000000000000000000000000000000000E0 +:10B0700000000000000000000000000000000000D0 +:10B0800000000000000000000000000000000000C0 +:10B0900000000000000000000000000000000000B0 +:10B0A00000000000000000000000000000000000A0 +:10B0B0000000000000000000000000000000000090 +:10B0C0000000000000000000000000000000000080 +:10B0D0000000000000000000000000000000000070 +:10B0E0000000000000000000000000000000000060 +:10B0F0000000000000000000000000000000000050 +:10B10000000000000000000000000000000000003F +:10B11000000000000000000000000000000000002F +:10B12000000000000000000000000000000000001F +:10B13000000000000000000000000000000000000F +:10B1400000000000000000000000000000000000FF +:10B1500000000000000000000000000000000000EF +:10B1600000000000000000000000000000000000DF +:10B1700000000000000000000000000000000000CF +:10B1800000000000000000000000000000000000BF +:10B1900000000000000000000000000000000000AF +:10B1A000000000000000000000000000000000009F +:10B1B000000000000000000000000000000000008F +:10B1C000000000000000000000000000000000007F +:10B1D000000000000000000000000000000000006F +:10B1E000000000000000000000000000000000005F +:10B1F000000000000000000000000000000000004F +:10B20000000000000000000000000000000000003E +:10B21000000000000000000000000000000000002E +:10B22000000000000000000000000000000000001E +:10B23000000000000000000000000000000000000E +:10B2400000000000000000000000000000000000FE +:10B2500000000000000000000000000000000000EE +:10B2600000000000000000000000000000000000DE +:10B2700000000000000000000000000000000000CE +:10B2800000000000000000000000000000000000BE +:10B2900000000000000000000000000000000000AE +:10B2A000000000000000000000000000000000009E +:10B2B000000000000000000000000000000000008E +:10B2C000000000000000000000000000000000007E +:10B2D000000000000000000000000000000000006E +:10B2E000000000000000000000000000000000005E +:10B2F000000000000000000000000000000000004E +:10B30000000000000000000000000000000000003D +:10B31000000000000000000000000000000000002D +:10B32000000000000000000000000000000000001D +:10B33000000000000000000000000000000000000D +:10B3400000000000000000000000000000000000FD +:10B3500000000000000000000000000000000000ED +:10B3600000000000000000000000000000000000DD +:10B3700000000000000000000000000000000000CD +:10B3800000000000000000000000000000000000BD +:10B3900000000000000000000000000000000000AD +:10B3A000000000000000000000000000000000009D +:10B3B000000000000000000000000000000000008D +:10B3C000000000000000000000000000000000007D +:10B3D000000000000000000000000000000000006D +:10B3E000000000000000000000000000000000005D +:10B3F000000000000000000000000000000000004D +:10B40000000000000000000000000000000000003C +:10B41000000000000000000000000000000000002C +:10B42000000000000000000000000000000000001C +:10B43000000000000000000000000000000000000C +:10B4400000000000000000000000000000000000FC +:10B4500000000000000000000000000000000000EC +:10B4600000000000000000000000000000000000DC +:10B4700000000000000000000000000000000000CC +:10B4800000000000000000000000000000000000BC +:10B4900000000000000000000000000000000000AC +:10B4A000000000000000000000000000000000009C +:10B4B000000000000000000000000000000000008C +:10B4C000000000000000000000000000000000007C +:10B4D000000000000000000000000000000000006C +:10B4E000000000000000000000000000000000005C +:10B4F000000000000000000000000000000000004C +:10B50000000000000000000000000000000000003B +:10B51000000000000000000000000000000000002B +:10B52000000000000000000000000000000000001B +:10B53000000000000000000000000000000000000B +:10B5400000000000000000000000000000000000FB +:10B5500000000000000000000000000000000000EB +:10B5600000000000000000000000000000000000DB +:10B5700000000000000000000000000000000000CB +:10B5800000000000000000000000000000000000BB +:10B5900000000000000000000000000000000000AB +:10B5A000000000000000000000000000000000009B +:10B5B000000000000000000000000000000000008B +:10B5C000000000000000000000000000000000007B +:10B5D000000000000000000000000000000000006B +:10B5E000000000000000000000000000000000005B +:10B5F000000000000000000000000000000000004B +:10B60000000000000000000000000000000000003A +:10B61000000000000000000000000000000000002A +:10B62000000000000000000000000000000000001A +:10B63000000000000000000000000000000000000A +:10B6400000000000000000000000000000000000FA +:10B6500000000000000000000000000000000000EA +:10B6600000000000000000000000000000000000DA +:10B6700000000000000000000000000000000000CA +:10B6800000000000000000000000000000000000BA +:10B6900000000000000000000000000000000000AA +:10B6A000000000000000000000000000000000009A +:10B6B000000000000000000000000000000000008A +:10B6C000000000000000000000000000000000007A +:10B6D000000000000000000000000000000000006A +:10B6E000000000000000000000000000000000005A +:10B6F000000000000000000000000000000000004A +:10B700000000000000000000000000000000000039 +:10B710000000000000000000000000000000000029 +:10B720000000000000000000000000000000000019 +:10B730000000000000000000000000000000000009 +:10B7400000000000000000000000000000000000F9 +:10B7500000000000000000000000000000000000E9 +:10B7600000000000000000000000000000000000D9 +:10B7700000000000000000000000000000000000C9 +:10B7800000000000000000000000000000000000B9 +:10B7900000000000000000000000000000000000A9 +:10B7A0000000000000000000000000000000000099 +:10B7B0000000000000000000000000000000000089 +:10B7C0000000000000000000000000000000000079 +:10B7D0000000000000000000000000000000000069 +:10B7E0000000000000000000000000000000000059 +:10B7F0000000000000000000000000000000000049 +:10B800000000000000000000000000000000000038 +:10B810000000000000000000000000000000000028 +:10B820000000000000000000000000000000000018 +:10B830000000000000000000000000000000000008 +:10B8400000000000000000000000000000000000F8 +:10B8500000000000000000000000000000000000E8 +:10B8600000000000000000000000000000000000D8 +:10B8700000000000000000000000000000000000C8 +:10B8800000000000000000000000000000000000B8 +:10B8900000000000000000000000000000000000A8 +:10B8A0000000000000000000000000000000000098 +:10B8B0000000000000000000000000000000000088 +:10B8C0000000000000000000000000000000000078 +:10B8D0000000000000000000000000000000000068 +:10B8E0000000000000000000000000000000000058 +:10B8F0000000000000000000000000000000000048 +:10B900000000000000000000000000000000000037 +:10B910000000000000000000000000000000000027 +:10B920000000000000000000000000000000000017 +:10B930000000000000000000000000000000000007 +:10B9400000000000000000000000000000000000F7 +:10B9500000000000000000000000000000000000E7 +:10B9600000000000000000000000000000000000D7 +:10B9700000000000000000000000000000000000C7 +:10B9800000000000000000000000000000000000B7 +:10B9900000000000000000000000000000000000A7 +:10B9A0000000000000000000000000000000000097 +:10B9B0000000000000000000000000000000000087 +:10B9C0000000000000000000000000000000000077 +:10B9D0000000000000000000000000000000000067 +:10B9E0000000000000000000000000000000000057 +:10B9F0000000000000000000000000000000000047 +:10BA00000000000000000000000000000000000036 +:10BA10000000000000000000000000000000000026 +:10BA20000000000000000000000000000000000016 +:10BA30000000000000000000000000000000000006 +:10BA400000000000000000000000000000000000F6 +:10BA500000000000000000000000000000000000E6 +:10BA600000000000000000000000000000000000D6 +:10BA700000000000000000000000000000000000C6 +:10BA800000000000000000000000000000000000B6 +:10BA900000000000000000000000000000000000A6 +:10BAA0000000000000000000000000000000000096 +:10BAB0000000000000000000000000000000000086 +:10BAC0000000000000000000000000000000000076 +:10BAD0000000000000000000000000000000000066 +:10BAE0000000000000000000000000000000000056 +:10BAF0000000000000000000000000000000000046 +:10BB00000000000000000000000000000000000035 +:10BB10000000000000000000000000000000000025 +:10BB20000000000000000000000000000000000015 +:10BB30000000000000000000000000000000000005 +:10BB400000000000000000000000000000000000F5 +:10BB500000000000000000000000000000000000E5 +:10BB600000000000000000000000000000000000D5 +:10BB700000000000000000000000000000000000C5 +:10BB800000000000000000000000000000000000B5 +:10BB900000000000000000000000000000000000A5 +:10BBA0000000000000000000000000000000000095 +:10BBB0000000000000000000000000000000000085 +:10BBC0000000000000000000000000000000000075 +:10BBD0000000000000000000000000000000000065 +:10BBE0000000000000000000000000000000000055 +:10BBF0000000000000000000000000000000000045 +:10BC00000000000000000000000000000000000034 +:10BC10000000000000000000000000000000000024 +:10BC20000000000000000000000000000000000014 +:10BC30000000000000000000000000000000000004 +:10BC400000000000000000000000000000000000F4 +:10BC500000000000000000000000000000000000E4 +:10BC600000000000000000000000000000000000D4 +:10BC700000000000000000000000000000000000C4 +:10BC800000000000000000000000000000000000B4 +:10BC900000000000000000000000000000000000A4 +:10BCA0000000000000000000000000000000000094 +:10BCB0000000000000000000000000000000000084 +:10BCC0000000000000000000000000000000000074 +:10BCD0000000000000000000000000000000000064 +:10BCE0000000000000000000000000000000000054 +:10BCF0000000000000000000000000000000000044 +:10BD00000000000000000000000000000000000033 +:10BD10000000000000000000000000000000000023 +:10BD20000000000000000000000000000000000013 +:10BD30000000000000000000000000000000000003 +:10BD400000000000000000000000000000000000F3 +:10BD500000000000000000000000000000000000E3 +:10BD600000000000000000000000000000000000D3 +:10BD700000000000000000000000000000000000C3 +:10BD800000000000000000000000000000000000B3 +:10BD900000000000000000000000000000000000A3 +:10BDA0000000000000000000000000000000000093 +:10BDB0000000000000000000000000000000000083 +:10BDC0000000000000000000000000000000000073 +:10BDD0000000000000000000000000000000000063 +:10BDE0000000000000000000000000000000000053 +:10BDF0000000000000000000000000000000000043 +:10BE00000000000000000000000000000000000032 +:10BE10000000000000000000000000000000000022 +:10BE20000000000000000000000000000000000012 +:10BE30000000000000000000000000000000000002 +:10BE400000000000000000000000000000000000F2 +:10BE500000000000000000000000000000000000E2 +:10BE600000000000000000000000000000000000D2 +:10BE700000000000000000000000000000000000C2 +:10BE800000000000000000000000000000000000B2 +:10BE900000000000000000000000000000000000A2 +:10BEA0000000000000000000000000000000000092 +:10BEB0000000000000000000000000000000000082 +:10BEC0000000000000000000000000000000000072 +:10BED0000000000000000000000000000000000062 +:10BEE0000000000000000000000000000000000052 +:10BEF0000000000000000000000000000000000042 +:10BF00000000000000000000000000000000000031 +:10BF10000000000000000000000000000000000021 +:10BF20000000000000000000000000000000000011 +:10BF30000000000000000000000000000000000001 +:10BF400000000000000000000000000000000000F1 +:10BF500000000000000000000000000000000000E1 +:10BF600000000000000000000000000000000000D1 +:10BF700000000000000000000000000000000000C1 +:10BF800000000000000000000000000000000000B1 +:10BF900000000000000000000000000000000000A1 +:10BFA0000000000000000000000000000000000091 +:10BFB0000000000000000000000000000000000081 +:10BFC0000000000000000000000000000000000071 +:10BFD0000000000000000000000000000000000061 +:10BFE0000000000000000000000000000000000051 +:10BFF0000000000000000000000000000000000041 +:10C000000000000000000000000000000000000030 +:10C010000000000000000000000000000000000020 +:10C020000000000000000000000000000000000010 +:10C030000000000000000000000000000000000000 +:10C0400000000000000000000000000000000000F0 +:10C0500000000000000000000000000000000000E0 +:10C0600000000000000000000000000000000000D0 +:10C0700000000000000000000000000000000000C0 +:10C0800000000000000000000000000000000000B0 +:10C0900000000000000000000000000000000000A0 +:10C0A0000000000000000000000000000000000090 +:10C0B0000000000000000000000000000000000080 +:10C0C0000000000000000000000000000000000070 +:10C0D0000000000000000000000000000000000060 +:10C0E0000000000000000000000000000000000050 +:10C0F0000000000000000000000000000000000040 +:10C10000000000000000000000000000000000002F +:10C11000000000000000000000000000000000001F +:10C12000000000000000000000000000000000000F +:10C1300000000000000000000000000000000000FF +:10C1400000000000000000000000000000000000EF +:10C1500000000000000000000000000000000000DF +:10C1600000000000000000000000000000000000CF +:10C1700000000000000000000000000000000000BF +:10C1800000000000000000000000000000000000AF +:10C19000000000000000000000000000000000009F +:10C1A000000000000000000000000000000000008F +:10C1B000000000000000000000000000000000007F +:10C1C000000000000000000000000000000000006F +:10C1D000000000000000000000000000000000005F +:10C1E000000000000000000000000000000000004F +:10C1F000000000000000000000000000000000003F +:10C20000000000000000000000000000000000002E +:10C21000000000000000000000000000000000001E +:10C22000000000000000000000000000000000000E +:10C2300000000000000000000000000000000000FE +:10C2400000000000000000000000000000000000EE +:10C2500000000000000000000000000000000000DE +:10C2600000000000000000000000000000000000CE +:10C2700000000000000000000000000000000000BE +:10C2800000000000000000000000000000000000AE +:10C29000000000000000000000000000000000009E +:10C2A000000000000000000000000000000000008E +:10C2B000000000000000000000000000000000007E +:10C2C000000000000000000000000000000000006E +:10C2D000000000000000000000000000000000005E +:10C2E000000000000000000000000000000000004E +:10C2F000000000000000000000000000000000003E +:10C30000000000000000000000000000000000002D +:10C31000000000000000000000000000000000001D +:10C32000000000000000000000000000000000000D +:10C3300000000000000000000000000000000000FD +:10C3400000000000000000000000000000000000ED +:10C3500000000000000000000000000000000000DD +:10C3600000000000000000000000000000000000CD +:10C3700000000000000000000000000000000000BD +:10C3800000000000000000000000000000000000AD +:10C39000000000000000000000000000000000009D +:10C3A000000000000000000000000000000000008D +:10C3B000000000000000000000000000000000007D +:10C3C000000000000000000000000000000000006D +:10C3D000000000000000000000000000000000005D +:10C3E000000000000000000000000000000000004D +:10C3F000000000000000000000000000000000003D +:10C40000000000000000000000000000000000002C +:10C41000000000000000000000000000000000001C +:10C42000000000000000000000000000000000000C +:10C4300000000000000000000000000000000000FC +:10C4400000000000000000000000000000000000EC +:10C4500000000000000000000000000000000000DC +:10C4600000000000000000000000000000000000CC +:10C4700000000000000000000000000000000000BC +:10C4800000000000000000000000000000000000AC +:10C49000000000000000000000000000000000009C +:10C4A000000000000000000000000000000000008C +:10C4B000000000000000000000000000000000007C +:10C4C000000000000000000000000000000000006C +:10C4D000000000000000000000000000000000005C +:10C4E000000000000000000000000000000000004C +:10C4F000000000000000000000000000000000003C +:10C50000000000000000000000000000000000002B +:10C51000000000000000000000000000000000001B +:10C52000000000000000000000000000000000000B +:10C5300000000000000000000000000000000000FB +:10C5400000000000000000000000000000000000EB +:10C5500000000000000000000000000000000000DB +:10C5600000000000000000000000000000000000CB +:10C5700000000000000000000000000000000000BB +:10C5800000000000000000000000000000000000AB +:10C59000000000000000000000000000000000009B +:10C5A000000000000000000000000000000000008B +:10C5B000000000000000000000000000000000007B +:10C5C000000000000000000000000000000000006B +:10C5D000000000000000000000000000000000005B +:10C5E000000000000000000000000000000000004B +:10C5F000000000000000000000000000000000003B +:10C60000000000000000000000000000000000002A +:10C61000000000000000000000000000000000001A +:10C62000000000000000000000000000000000000A +:10C6300000000000000000000000000000000000FA +:10C6400000000000000000000000000000000000EA +:10C6500000000000000000000000000000000000DA +:10C6600000000000000000000000000000000000CA +:10C6700000000000000000000000000000000000BA +:10C6800000000000000000000000000000000000AA +:10C69000000000000000000000000000000000009A +:10C6A000000000000000000000000000000000008A +:10C6B000000000000000000000000000000000007A +:10C6C000000000000000000000000000000000006A +:10C6D000000000000000000000000000000000005A +:10C6E000000000000000000000000000000000004A +:10C6F000000000000000000000000000000000003A +:10C700000000000000000000000000000000000029 +:10C710000000000000000000000000000000000019 +:10C720000000000000000000000000000000000009 +:10C7300000000000000000000000000000000000F9 +:10C7400000000000000000000000000000000000E9 +:10C7500000000000000000000000000000000000D9 +:10C7600000000000000000000000000000000000C9 +:10C7700000000000000000000000000000000000B9 +:10C7800000000000000000000000000000000000A9 +:10C790000000000000000000000000000000000099 +:10C7A0000000000000000000000000000000000089 +:10C7B0000000000000000000000000000000000079 +:10C7C0000000000000000000000000000000000069 +:10C7D0000000000000000000000000000000000059 +:10C7E0000000000000000000000000000000000049 +:10C7F0000000000000000000000000000000000039 +:10C800000000000000000000000000000000000028 +:10C810000000000000000000000000000000000018 +:10C820000000000000000000000000000000000008 +:10C8300000000000000000000000000000000000F8 +:10C8400000000000000000000000000000000000E8 +:10C8500000000000000000000000000000000000D8 +:10C8600000000000000000000000000000000000C8 +:10C8700000000000000000000000000000000000B8 +:10C8800000000000000000000000000000000000A8 +:10C890000000000000000000000000000000000098 +:10C8A0000000000000000000000000000000000088 +:10C8B0000000000000000000000000000000000078 +:10C8C0000000000000000000000000000000000068 +:10C8D0000000000000000000000000000000000058 +:10C8E0000000000000000000000000000000000048 +:10C8F0000000000000000000000000000000000038 +:10C900000000000000000000000000000000000027 +:10C910000000000000000000000000000000000017 +:10C920000000000000000000000000000000000007 +:10C9300000000000000000000000000000000000F7 +:10C9400000000000000000000000000000000000E7 +:10C9500000000000000000000000000000000000D7 +:10C9600000000000000000000000000000000000C7 +:10C9700000000000000000000000000000000000B7 +:10C9800000000000000000000000000000000000A7 +:10C990000000000000000000000000000000000097 +:10C9A0000000000000000000000000000000000087 +:10C9B0000000000000000000000000000000000077 +:10C9C0000000000000000000000000000000000067 +:10C9D0000000000000000000000000000000000057 +:10C9E0000000000000000000000000000000000047 +:10C9F0000000000000000000000000000000000037 +:10CA00000000000000000000000000000000000026 +:10CA10000000000000000000000000000000000016 +:10CA20000000000000000000000000000000000006 +:10CA300000000000000000000000000000000000F6 +:10CA400000000000000000000000000000000000E6 +:10CA500000000000000000000000000000000000D6 +:10CA600000000000000000000000000000000000C6 +:10CA700000000000000000000000000000000000B6 +:10CA800000000000000000000000000000000000A6 +:10CA90000000000000000000000000000000000096 +:10CAA0000000000000000000000000000000000086 +:10CAB0000000000000000000000000000000000076 +:10CAC0000000000000000000000000000000000066 +:10CAD0000000000000000000000000000000000056 +:10CAE0000000000000000000000000000000000046 +:10CAF0000000000000000000000000000000000036 +:10CB00000000000000000000000000000000000025 +:10CB10000000000000000000000000000000000015 +:10CB20000000000000000000000000000000000005 +:10CB300000000000000000000000000000000000F5 +:10CB400000000000000000000000000000000000E5 +:10CB500000000000000000000000000000000000D5 +:10CB600000000000000000000000000000000000C5 +:10CB700000000000000000000000000000000000B5 +:10CB800000000000000000000000000000000000A5 +:10CB90000000000000000000000000000000000095 +:10CBA0000000000000000000000000000000000085 +:10CBB0000000000000000000000000000000000075 +:10CBC0000000000000000000000000000000000065 +:10CBD0000000000000000000000000000000000055 +:10CBE0000000000000000000000000000000000045 +:10CBF0000000000000000000000000000000000035 +:10CC00000000000000000000000000000000000024 +:10CC10000000000000000000000000000000000014 +:10CC20000000000000000000000000000000000004 +:10CC300000000000000000000000000000000000F4 +:10CC400000000000000000000000000000000000E4 +:10CC500000000000000000000000000000000000D4 +:10CC600000000000000000000000000000000000C4 +:10CC700000000000000000000000000000000000B4 +:10CC800000000000000000000000000000000000A4 +:10CC90000000000000000000000000000000000094 +:10CCA0000000000000000000000000000000000084 +:10CCB0000000000000000000000000000000000074 +:10CCC0000000000000000000000000000000000064 +:10CCD0000000000000000000000000000000000054 +:10CCE0000000000000000000000000000000000044 +:10CCF0000000000000000000000000000000000034 +:10CD00000000000000000000000000000000000023 +:10CD10000000000000000000000000000000000013 +:10CD20000000000000000000000000000000000003 +:10CD300000000000000000000000000000000000F3 +:10CD400000000000000000000000000000000000E3 +:10CD500000000000000000000000000000000000D3 +:10CD600000000000000000000000000000000000C3 +:10CD700000000000000000000000000000000000B3 +:10CD800000000000000000000000000000000000A3 +:10CD90000000000000000000000000000000000093 +:10CDA0000000000000000000000000000000000083 +:10CDB0000000000000000000000000000000000073 +:10CDC0000000000000000000000000000000000063 +:10CDD0000000000000000000000000000000000053 +:10CDE0000000000000000000000000000000000043 +:10CDF0000000000000000000000000000000000033 +:10CE00000000000000000000000000000000000022 +:10CE10000000000000000000000000000000000012 +:10CE20000000000000000000000000000000000002 +:10CE300000000000000000000000000000000000F2 +:10CE400000000000000000000000000000000000E2 +:10CE500000000000000000000000000000000000D2 +:10CE600000000000000000000000000000000000C2 +:10CE700000000000000000000000000000000000B2 +:10CE800000000000000000000000000000000000A2 +:10CE90000000000000000000000000000000000092 +:10CEA0000000000000000000000000000000000082 +:10CEB0000000000000000000000000000000000072 +:10CEC0000000000000000000000000000000000062 +:10CED0000000000000000000000000000000000052 +:10CEE0000000000000000000000000000000000042 +:10CEF0000000000000000000000000000000000032 +:10CF00000000000000000000000000000000000021 +:10CF10000000000000000000000000000000000011 +:10CF20000000000000000000000000000000000001 +:10CF300000000000000000000000000000000000F1 +:10CF400000000000000000000000000000000000E1 +:10CF500000000000000000000000000000000000D1 +:10CF600000000000000000000000000000000000C1 +:10CF700000000000000000000000000000000000B1 +:10CF800000000000000000000000000000000000A1 +:10CF90000000000000000000000000000000000091 +:10CFA0000000000000000000000000000000000081 +:10CFB0000000000000000000000000000000000071 +:10CFC0000000000000000000000000000000000061 +:10CFD0000000000000000000000000000000000051 +:10CFE0000000000000000000000000000000000041 +:10CFF0000000000000000000000000000000000031 +:10D000000000000000000000000000000000000020 +:10D010000000000000000000000000000000000010 +:10D020000000000000000000000000000000000000 +:10D0300000000000000000000000000000000000F0 +:10D0400000000000000000000000000000000000E0 +:10D0500000000000000000000000000000000000D0 +:10D0600000000000000000000000000000000000C0 +:10D0700000000000000000000000000000000000B0 +:10D0800000000000000000000000000000000000A0 +:10D090000000000000000000000000000000000090 +:10D0A0000000000000000000000000000000000080 +:10D0B0000000000000000000000000000000000070 +:10D0C0000000000000000000000000000000000060 +:10D0D0000000000000000000000000000000000050 +:10D0E0000000000000000000000000000000000040 +:10D0F0000000000000000000000000000000000030 +:10D10000000000000000000000000000000000001F +:10D11000000000000000000000000000000000000F +:10D1200000000000000000000000000000000000FF +:10D1300000000000000000000000000000000000EF +:10D1400000000000000000000000000000000000DF +:10D1500000000000000000000000000000000000CF +:10D1600000000000000000000000000000000000BF +:10D1700000000000000000000000000000000000AF +:10D18000000000000000000000000000000000009F +:10D19000000000000000000000000000000000008F +:10D1A000000000000000000000000000000000007F +:10D1B000000000000000000000000000000000006F +:10D1C000000000000000000000000000000000005F +:10D1D000000000000000000000000000000000004F +:10D1E000000000000000000000000000000000003F +:10D1F000000000000000000000000000000000002F +:10D20000000000000000000000000000000000001E +:10D21000000000000000000000000000000000000E +:10D2200000000000000000000000000000000000FE +:10D2300000000000000000000000000000000000EE +:10D2400000000000000000000000000000000000DE +:10D2500000000000000000000000000000000000CE +:10D2600000000000000000000000000000000000BE +:10D2700000000000000000000000000000000000AE +:10D28000000000000000000000000000000000009E +:10D29000000000000000000000000000000000008E +:10D2A000000000000000000000000000000000007E +:10D2B000000000000000000000000000000000006E +:10D2C000000000000000000000000000000000005E +:10D2D000000000000000000000000000000000004E +:10D2E000000000000000000000000000000000003E +:10D2F000000000000000000000000000000000002E +:10D30000000000000000000000000000000000001D +:10D31000000000000000000000000000000000000D +:10D3200000000000000000000000000000000000FD +:10D3300000000000000000000000000000000000ED +:10D3400000000000000000000000000000000000DD +:10D3500000000000000000000000000000000000CD +:10D3600000000000000000000000000000000000BD +:10D3700000000000000000000000000000000000AD +:10D38000000000000000000000000000000000009D +:10D39000000000000000000000000000000000008D +:10D3A000000000000000000000000000000000007D +:10D3B000000000000000000000000000000000006D +:10D3C000000000000000000000000000000000005D +:10D3D000000000000000000000000000000000004D +:10D3E000000000000000000000000000000000003D +:10D3F000000000000000000000000000000000002D +:10D40000000000000000000000000000000000001C +:10D41000000000000000000000000000000000000C +:10D4200000000000000000000000000000000000FC +:10D4300000000000000000000000000000000000EC +:10D4400000000000000000000000000000000000DC +:10D4500000000000000000000000000000000000CC +:10D4600000000000000000000000000000000000BC +:10D4700000000000000000000000000000000000AC +:10D48000000000000000000000000000000000009C +:10D49000000000000000000000000000000000008C +:10D4A000000000000000000000000000000000007C +:10D4B000000000000000000000000000000000006C +:10D4C000000000000000000000000000000000005C +:10D4D000000000000000000000000000000000004C +:10D4E000000000000000000000000000000000003C +:10D4F000000000000000000000000000000000002C +:10D50000000000000000000000000000000000001B +:10D51000000000000000000000000000000000000B +:10D5200000000000000000000000000000000000FB +:10D5300000000000000000000000000000000000EB +:10D5400000000000000000000000000000000000DB +:10D5500000000000000000000000000000000000CB +:10D5600000000000000000000000000000000000BB +:10D5700000000000000000000000000000000000AB +:10D58000000000000000000000000000000000009B +:10D59000000000000000000000000000000000008B +:10D5A000000000000000000000000000000000007B +:10D5B000000000000000000000000000000000006B +:10D5C000000000000000000000000000000000005B +:10D5D000000000000000000000000000000000004B +:10D5E000000000000000000000000000000000003B +:10D5F000000000000000000000000000000000002B +:10D60000000000000000000000000000000000001A +:10D61000000000000000000000000000000000000A +:10D6200000000000000000000000000000000000FA +:10D6300000000000000000000000000000000000EA +:10D6400000000000000000000000000000000000DA +:10D6500000000000000000000000000000000000CA +:10D6600000000000000000000000000000000000BA +:10D6700000000000000000000000000000000000AA +:10D68000000000000000000000000000000000009A +:10D69000000000000000000000000000000000008A +:10D6A000000000000000000000000000000000007A +:10D6B000000000000000000000000000000000006A +:10D6C000000000000000000000000000000000005A +:10D6D000000000000000000000000000000000004A +:10D6E000000000000000000000000000000000003A +:10D6F000000000000000000000000000000000002A +:10D700000000000000000000000000000000000019 +:10D710000000000000000000000000000000000009 +:10D7200000000000000000000000000000000000F9 +:10D7300000000000000000000000000000000000E9 +:10D7400000000000000000000000000000000000D9 +:10D7500000000000000000000000000000000000C9 +:10D7600000000000000000000000000000000000B9 +:10D7700000000000000000000000000000000000A9 +:10D780000000000000000000000000000000000099 +:10D790000000000000000000000000000000000089 +:10D7A0000000000000000000000000000000000079 +:10D7B0000000000000000000000000000000000069 +:10D7C0000000000000000000000000000000000059 +:10D7D0000000000000000000000000000000000049 +:10D7E0000000000000000000000000000000000039 +:10D7F0000000000000000000000000000000000029 +:10D800000000000000000000000000000000000018 +:10D810000000000000000000000000000000000008 +:10D8200000000000000000000000000000000000F8 +:10D8300000000000000000000000000000000000E8 +:10D8400000000000000000000000000000000000D8 +:10D8500000000000000000000000000000000000C8 +:10D8600000000000000000000000000000000000B8 +:10D8700000000000000000000000000000000000A8 +:10D880000000000000000000000000000000000098 +:10D890000000000000000000000000000000000088 +:10D8A0000000000000000000000000000000000078 +:10D8B0000000000000000000000000000000000068 +:10D8C0000000000000000000000000000000000058 +:10D8D0000000000000000000000000000000000048 +:10D8E0000000000000000000000000000000000038 +:10D8F0000000000000000000000000000000000028 +:10D900000000000000000000000000000000000017 +:10D910000000000000000000000000000000000007 +:10D9200000000000000000000000000000000000F7 +:10D9300000000000000000000000000000000000E7 +:10D9400000000000000000000000000000000000D7 +:10D9500000000000000000000000000000000000C7 +:10D9600000000000000000000000000000000000B7 +:10D9700000000000000000000000000000000000A7 +:10D980000000000000000000000000000000000097 +:10D990000000000000000000000000000000000087 +:10D9A0000000000000000000000000000000000077 +:10D9B0000000000000000000000000000000000067 +:10D9C0000000000000000000000000000000000057 +:10D9D0000000000000000000000000000000000047 +:10D9E0000000000000000000000000000000000037 +:10D9F0000000000000000000000000000000000027 +:10DA00000000000000000000000000000000000016 +:10DA10000000000000000000000000000000000006 +:10DA200000000000000000000000000000000000F6 +:10DA300000000000000000000000000000000000E6 +:10DA400000000000000000000000000000000000D6 +:10DA500000000000000000000000000000000000C6 +:10DA600000000000000000000000000000000000B6 +:10DA700000000000000000000000000000000000A6 +:10DA80000000000000000000000000000000000096 +:10DA90000000000000000000000000000000000086 +:10DAA0000000000000000000000000000000000076 +:10DAB0000000000000000000000000000000000066 +:10DAC0000000000000000000000000000000000056 +:10DAD0000000000000000000000000000000000046 +:10DAE0000000000000000000000000000000000036 +:10DAF0000000000000000000000000000000000026 +:10DB00000000000000000000000000000000000015 +:10DB10000000000000000000000000000000000005 +:10DB200000000000000000000000000000000000F5 +:10DB300000000000000000000000000000000000E5 +:10DB400000000000000000000000000000000000D5 +:10DB500000000000000000000000000000000000C5 +:10DB600000000000000000000000000000000000B5 +:10DB700000000000000000000000000000000000A5 +:10DB80000000000000000000000000000000000095 +:10DB90000000000000000000000000000000000085 +:10DBA0000000000000000000000000100004000160 +:10DBB0000000000000000000000000000000000065 +:10DBC0000000000000000000000000000000000055 +:10DBD0000000000000000000000000000000000045 +:10DBE0000000000000000000000000000000000035 +:10DBF000000009000000000000000000000000001C +:10DC00000000000000000000000000000000000014 +:10DC10000000000000000000000000000000000004 +:10DC200000000000000000000000000000000000F4 +:10DC3000000000000000000000000840488820406C +:10DC400000020001218000C000208080000480804C +:10DC5000000000020000800000010408012024846C +:10DC60008101000000000200000020000000000010 +:10DC70000400010121192400D00910001022200005 +:10DC800002040040011000400002000000010200F8 +:10DC90008000042110004044608000022304000240 +:10DCA0000110040000000000882000890004220800 +:10DCB0008902408008100410008004004000000029 +:10DCC0000000008041D00200249224904180400452 +:10DCD00008000A080001088140200000042002809A +:10DCE0008000000019041000801042045008000059 +:10DCF000040192EBE8BE80000B8010004400004954 +:10DD00000400840880112000840108000000000045 +:10DD100040000820000002104000000820400020C1 +:10DD20000100000000090062101000E880105D4052 +:10DD3000B100001C001800040001100200023000B5 +:10DD4000000800000000080000000000A00004001F +:10DD5000000000000000000000000080000020081B +:10DD6000208180210008C50002C48200175EC00C1B +:10DD700090000002402210408000081001000206BE +:10DD80000600204000200008000000000200000003 +:10DD90000400008050400050082020005022000065 +:10DDA000802A08028030200200BFF13E470239F08D +:10DDB0000000000000000000404090104000000003 +:10DDC0000040900448040000000000A4000040004F +:10DDD000000002800088048000000800008000002D +:10DDE0002A32240842810A28110006050800009002 +:10DDF000A868101A090B82821444212002020FF431 +:10DE000080000C0800000000B510000C80613D226D +:10DE10000000020200C0690040040010334080008E +:10DE20000D30080A3018584CD000C00A2D31A540DA +:10DE3000940400448124002250040804200012119C +:10DE40000A00100819A60D01425328B34A084306D8 +:10DE5000040144682B4004088ACA12608062A1064B +:10DE600098406981804021002FD94096520610D2F7 +:10DE7000800103082D12833008A0004A051D3130AF +:10DE8000B05F433030434340012010200000008049 +:10DE900080025008000000001412145021041004E5 +:10DEA000080AA018000A000000090801000006483E +:10DEB00011B4CA846201540116001E4A8A0100246A +:10DEC00020F00D000318A20A08861A0B1802194048 +:10DED000A0046023201186981195846C680B1903A7 +:10DEE00022804448C0002828000000088460030BFA +:10DEF00092804000A8A43508260A000060C120D006 +:10DF000003084181D28191C046A602010194802379 +:10DF10005010063101840800521020012010020127 +:10DF200081040400010004041A00D00049000C0020 +:10DF30008010B10400D216028080B490420090217B +:10DF40000860000002D340258002D2403900000062 +:10DF5000010C000000000019142211000A08200022 +:10DF600000000800208000826100001000023400E0 +:10DF700000000A00048000808A00001974058031C6 +:10DF80001C81A313CD900C000222080310800028EE +:10DF9000182000009140A0409000320001CC027097 +:10DFA00054E4070802088802C1447E013C28441357 +:10DFB0002271584940322A4252A20B14200214A95D +:10DFC00081B6200980C2542680800001DC8066F181 +:10DFD0001131092E00ABF0A15C2784401A3044A017 +:10DFE00000800CE202AE33BD00D8F60D94CE4A801C +:10DFF000C10C34060A0C01240010B80B841C344EEA +:10E00000E471AA201A440CA04001800404A1410537 +:10E01000540903C01A5049D22800402D021004327E +:10E020007C004800840000000800131000B0A031FC +:10E03000144A41144A0284A0948CD0010229082772 +:10E040008081200C00300A0A1310000094EA08C1F5 +:10E050008510111A00160804054000200000000079 +:10E06000040A020100400040020812834100002817 +:10E070000000088000000000008000004204000250 +:10E080004400000000024104000500200800284C64 +:10E0900090212A4802041B02446A202240090228D7 +:10E0A0009B04046080C80B0000480204C0100000FC +:10E0B000002800000100440400800080010C43D4CB +:10E0C0000020800081020141028010000000000059 +:10E0D00000100000000280000200183080002000C4 +:10E0E000400102001000801DF000198100803D08F1 +:10E0F0000084000000200402282CE2010800A0E0B7 +:10E10000382000400004022000A002003300E0C0DC +:10E11000142001400000804000804000A800100052 +:10E120000080002020000000010000090815070001 +:10E130002200100010000A02000000110288404D69 +:10E140004420004A00028220111008004001910181 +:10E150000400040000400000000000802060002255 +:10E16000000000000000400008A0000020000101A5 +:10E170000004924A08805008E004280000245090CF +:10E1800009000A0080000800000081001001000062 +:10E1900000000500080002000010000001810401D9 +:10E1A00005081C08000002110204200000020004FF +:10E1B000080150505A00024101082108200820009F +:10E1C000004000004180800000008C00229A0C502A +:10E1D000040000480022D400120220C008A80085D4 +:10E1E000002FBE3785CE167025DC03C00000040367 +:10E1F00060231C2802001E000242D0001E2426417B +:10E200008107B1FBA42311026C000001240020004F +:10E21000250206388223CCBBF73A210093319F4474 +:10E22000E2920933C9FC5201240A8A210E04829029 +:10E230006F906208002C0414101508A14C006400B3 +:10E24000006020B02000088040421010000019003B +:10E250003E000003A16001030600080040F0043105 +:10E260000213C541400106000000000800008000C4 +:10E27000001052000800A940000000000700000044 +:10E280002000100080002000442010400402000004 +:10E29000000101000007F0048200820101208004D7 +:10E2A00030400000000400400022424208010128E2 +:10E2B0000400142000104000000400089100804277 +:10E2C0000004100001000008000108400800800858 +:10E2D00001001000002000000200000000200022C9 +:10E2E0000208004100000000002000000040400043 +:10E2F00000000000000010000000202000000000CE +:10E300000010000001000820802011AB00270090C1 +:10E3100000081080000418024081020C040810203C +:10E320004302008718C08402B80108121C6021C192 +:10E3300004000204200810092100810220908000BE +:10E34000000802040C1812108018301020C10200BE +:10E350003060830A002041000010200042000000CD +:10E360000002040800402040821400A040021C303B +:10E3700060C30600102038C2010000842090841081 +:10E38000810000000000408404083060C10600885D +:10E39000208018226546EDD20008250100200802E1 +:10E3A0004070000CC310200160A0CC806A63221072 +:10E3B000C098B1898814F4007D40D0C000040510D5 +:10E3C0000001CFFE10400404050D0147592003FC55 +:10E3D000F0303FFFC000F0000008B0000400006013 +:10E3E00000003000000000000000000000000000FD +:10E3F000000000000000000000000000000000001D +:10E40000000000000000000000000000000000000C +:10E41000003FFF0FFFF3FFFCFFFF3FFFCFFFF3FFC6 +:10E42000FCFFFF0000C00000000000000000000032 +:10E4300000020000000010000000000018000000B2 +:10E4400000000000000000000000000000000000CC +:10E4500000000000000000000000000000000000BC +:10E4600000003FFFCFFFF3FFFCFFFF0000C00000F4 +:10E47000000000000000000000020000000010008A +:10E480000000000018000000000000000000000074 +:10E49000000000000000000000000000000000007C +:10E4A000000000000000000000000000000000006C +:10E4B000000000000000000000000000000000005C +:10E4C000000000000000000000000000000000004C +:10E4D000000000000000000000000000000000003C +:10E4E000000000000000000000000000000000002C +:10E4F000000000000000000000000000000000001C +:10E50000000000000000000000000000000000000B +:10E5100000000000000000000000000000000000FB +:10E5200000000000000000000000000000000000EB +:10E5300000000000000000000000000000000000DB +:10E5400000000000000000000000000000000000CB +:10E5500000000000000000000000000000000000BB +:10E5600000000000000000000000000000000000AB +:10E57000000000000000000000000000000000009B +:10E58000000000000000000000000000000000008B +:10E59000000000000000000000000000000000007B +:10E5A000000000000000000000000000000000006B +:10E5B000000000000000000000000000000000005B +:10E5C000000000000000000000000000000000004B +:10E5D000000000000000000000000000000000003B +:10E5E000000000000000000000000000000000002B +:10E5F000000000000000000000000000000000001B +:10E60000000000000000000000000000000000000A +:10E6100000000000000000000000000000000000FA +:10E6200000000000000000000000000000000000EA +:10E6300000000000000000000000000000000000DA +:10E6400000000000000000000000000000000000CA +:10E6500000000000000000000000000000000000BA +:10E6600000000000000000000000000000000000AA +:10E67000000000000000000000000000000000009A +:10E68000000000000000000000000000000000008A +:10E69000000000000000000000000000000000007A +:10E6A000000000000000000000000000000000006A +:10E6B000000000000000000000000000000000005A +:10E6C000000000000000000000000000000000004A +:10E6D000000000000000000000000000000000003A +:10E6E000000000000000000000000000000000002A +:10E6F000000000000000000000000000000000001A +:10E700000000000000000000000000000000000009 +:10E7100000000000000000000000000000000000F9 +:10E7200000000000000000000000000000000000E9 +:10E7300000000000000000000000000000000000D9 +:10E7400000000000000000000000000000000000C9 +:10E7500000000000000000000000000000000000B9 +:10E7600000000000000000000000000000000000A9 +:10E770000000000000000000000000000000000099 +:10E780000000000000000000000000000000000089 +:10E790000000000000000000000000000000000079 +:10E7A0000000000000000000000000000000000069 +:10E7B0000000000000000000000000000000000059 +:10E7C0000000000000000000000000000000000049 +:10E7D0000000000000000000000000000000000039 +:10E7E0000000000000000000000000000000000029 +:10E7F0000000000000000000000000000000000019 +:10E800000000000000000000000000000000000008 +:10E8100000000000000000000000000000000000F8 +:10E8200000000000000000000000000000000000E8 +:10E8300000000000000000000000000000000000D8 +:10E8400000000000000000000000000000000000C8 +:10E8500000000000000000000000000000000000B8 +:10E8600000000000000000000000000000000000A8 +:10E870000000000000000000000000000000000098 +:10E880000000000000000000000000000000000088 +:10E890000000000000000000000000000000000078 +:10E8A0000000000000000000000000000000000068 +:10E8B0000000000000000000000000000000000058 +:10E8C0000000000000000000000000000000000048 +:10E8D0000000000000000000000000000000000038 +:10E8E0000000000000000000000000000000000028 +:10E8F0000000000000000000000000000000000018 +:10E900000000000000000000000000000000000007 +:10E9100000000000000000000000000000000000F7 +:10E9200000000000000000000000000000000000E7 +:10E9300000000000000000000000000000000000D7 +:10E9400000000000000000000000000000000000C7 +:10E9500000000000000000000000000000000000B7 +:10E9600000000000000000000000000000000000A7 +:10E970000000000000000000000000000000000097 +:10E980000000000000000000000000000000000087 +:10E990000000000000000000000000000000000077 +:10E9A0000000000000000000000000000000000067 +:10E9B0000000000000000000000000000000000057 +:10E9C0000000000000000000000000000000000047 +:10E9D0000000000000000000000000000000000037 +:10E9E0000000000000000000000000000000000027 +:10E9F0000000000000000000000000000000000017 +:10EA00000000000000000000000000000000000006 +:10EA100000000000000000000000000000000000F6 +:10EA200000000000000000000000000000000000E6 +:10EA300000000000000000000000000000000000D6 +:10EA400000000000000000000000000000000000C6 +:10EA500000000000000000000000000000000000B6 +:10EA600000000000000000000000000000000000A6 +:10EA70000000000000000000000000000000000096 +:10EA80000000000000000000000000000000000086 +:10EA90000000000000000000000000000000000076 +:10EAA0000000000000000000000000000000000066 +:10EAB0000000000000000000000000000000000056 +:10EAC0000000000000000000000000000000000046 +:10EAD0000000000000000000000000000000000036 +:10EAE0000000000000000000000000000000000026 +:10EAF0000000000000000000000000000000000016 +:10EB00000000000000000000000000000000000005 +:10EB100000000000000000000000000000000000F5 +:10EB200000000000000000000000000000000000E5 +:10EB300000000000000000000000000000000000D5 +:10EB400000000000000000000000000000000000C5 +:10EB500000000000000000000000000000000000B5 +:10EB600000000000000000000000000000000000A5 +:10EB70000000000000000000000000000000000095 +:10EB80000000000000000000000000000000000085 +:10EB90000000000000000000000000000000000075 +:10EBA0000000000000000000000000000000000065 +:10EBB0000000000000000000000000000000000055 +:10EBC0000000000000000000000000000000000045 +:10EBD0000000000000000000000000000000000035 +:10EBE0000000000000000000000000000000000025 +:10EBF0000000000000000000000000000000000015 +:10EC00000000000000000000000000000000000004 +:10EC100000000000000000000000000000000000F4 +:10EC200000000000000000000000000000000000E4 +:10EC300000000000000000000000000000000000D4 +:10EC400000000000000000000000000000000000C4 +:10EC500000000000000000000000000000000000B4 +:10EC600000000000000000000000000000000000A4 +:10EC70000000000000000000000000000000000094 +:10EC80000000000000000000000000000000000084 +:10EC90000000000000000000000000000000000074 +:10ECA0000000000000000000000000000000000064 +:10ECB0000000000000000000000000000000000054 +:10ECC0000000000000000000000000000000000044 +:10ECD0000000000000000000000000000000000034 +:10ECE0000000000000000000000000000000000024 +:10ECF0000000000000000000000000000000000014 +:10ED00000000000000000000000000000000000003 +:10ED100000000000000000000000000000000000F3 +:10ED200000000000000000000000000000000000E3 +:10ED300000000000000000000000000000000000D3 +:10ED400000000000000000000000000000000000C3 +:10ED500000000000000000000000000000000000B3 +:10ED600000000000000000000000000000000000A3 +:10ED70000000000000000000000000000000000093 +:10ED80000000000000000000000000000000000083 +:10ED90000000000000000000000000000000000073 +:10EDA0000000000000000000000000000000000063 +:10EDB0000000000000000000000000000000000053 +:10EDC0000000000000000000000000000000000043 +:10EDD0000000000000000000000000000000000033 +:10EDE0000000000000000000000000000000000023 +:10EDF0000000000000000000000000000000000013 +:10EE00000000000000000000000000000000000002 :10EE100000000000000000000000000000000000F2 :10EE200000000000000000000000000000000000E2 -:10EE300000000000000000000000080000040000C6 +:10EE300000000000000000000000000000000000D2 :10EE400000000000000000000000000000000000C2 :10EE500000000000000000000000000000000000B2 :10EE600000000000000000000000000000000000A2 :10EE70000000000000000000000000000000000092 -:10EE8000000028404802204000020001208000804D -:10EE900008209080000000000000000200008000B8 -:10EEA0000000040000002484810100000000000034 -:10EEB000000000000000000000000100001804082D -:10EEC000C2011000100220042204080000000040CB -:10EED000084202080201024082100401010042407F -:10EEE000600000120300000209000400000000009E -:10EEF0000820000800042208810240800810041045 -:10EF00000080040040000040000008000150224042 -:10EF1000249224900180400408400A0800010881DE -:10EF2000402002000420028080000000190410002C -:10EF30008010420450080000040192EBE8BEA800D3 -:10EF40000B80120044000081040084088011280016 -:10EF5000A40000000000000041000816000002109C -:10EF600040000008204C00200080000008080062DB -:10EF7000101000E8C010DD40B10000148018080037 -:10EF80000041100200803000010800000000000075 -:10EF900000004000A0200000000000000000000071 -:10EFA000000011800013A088A088B8230008C500C5 -:10EFB00002C40000175EC00C9020000360321040B5 -:10EFC000C0000090010402020200605008B0000876 -:10EFD000044040209B001085040C008050400050ED -:10EFE0000820200050220000802A08028010200201 -:10EFF00000BFC13C060231F001340208164408216A -:10F000007000B01040088A0040409604400500029D -:10F01000802180A40040410000000280008804801C -:10F0200000000800008000002A32240842800C0002 -:10F03000110006000290008224281238400A8680BF -:10F04000940021083D82000F717FF0DF6F07FF8D74 -:10F05000C2F0000880403C00000C120200D0492899 -:10F060004007A972B344820E0D300A0AB35858C83B -:10F07000D000C80B2D312550950D00408024002272 -:10F08000500408042002120252E0104111A60D4162 -:10F09000401208334B011206041146680B5003104E -:10F0A000CACB12600064211698084D808000098048 -:10F0B00022024414420200D29000CB08AD128B30E1 -:10F0C00002A202088819313030434330B34743402D -:10F0D00001081634000140808042500002240040A4 -:10F0E00014521450050015B0880AA018540E0004DC -:10F0F00024090B910008024805A4CAA161014441FA -:10F1000002001E4A8E010104286A0D2A831CA29A5D -:10F1100008941A2B1C025000B12C602324158698E9 -:10F120001115804C4C0F110223800008E2862D2E11 -:10F13000845000088060030B92C0C100ACEC3552D3 -:10F14000260B09A8408150A403088181F28191C057 -:10F1500044A4020201948043505112210088080007 -:10F1600000002000201002018104040001000404BA -:10F170001A00D00029000C040080B10400D216024D -:10F180008080B490420091010A20000002D3402503 -:10F190008002D24039000000010C0000000000197C -:10F1A000502211000A082000000008002080008082 -:10F1B000610000100002340040000300149412802B -:10F1C0008A000019544580308A410293C8900D008E -:10F1D00002620803108080020000000890E00848E6 -:10F1E000900020000168827048C447082008880207 -:10F1F000D4C47A403CACC413227118494033220273 -:10F2000040A28350A102108D81A6A00988825504D6 -:10F2100000010901D4A073B11131012E80A3E031A6 -:10F220005827D40402300000000008A202AC22FDDE -:10F230000090C604948C4010E00CB0040B18083405 -:10F240004018B88B4434344DE471AA203A440EA0DF -:10F250000121C0048CA14105544DA3D23350095261 -:10F260002900C42D024104327E0048000540000000 -:10F270000000011000202025100250104000002046 -:10F28000950C4001020008200001204C4030080885 -:10F290008110000094AA08C98510110800142804E0 -:10F2A0002540002100000000000A0001400000503D -:10F2B000020910C349000028000008800000020075 -:10F2C000008010004204002240000040100241046F -:10F2D000801500200800A94C9220684802041302FF -:10F2E000046A2020C40802289300046010800A20C9 -:10F2F00000480204C01000000028000001000404BF -:10F3000000800080010C43D4002080008102014174 -:10F3100002801000000000000010000000028000C9 -:10F320000200183000002000400102001000801D83 -:10F33000F0001981008030080080000000200402E5 -:10F34000282CA2000800A0C03820004000040220A1 -:10F3500000A002003300E0C0142001400000804003 -:10F3600000804000A8000000008000202000000075 -:10F3700001000009080507002200100000000A0033 -:10F3800000000011028840454420004A00228220EB -:10F390000110080040219101040004000040000019 -:10F3A00000000080206000220000000000084000F3 -:10F3B00008A00000200001010004924A08845008BF -:10F3C000E004280040245090090448008000080010 -:10F3D0000000A100900100200008010008000200C8 -:10F3E000001000000081040104081C0800000291C4 -:10F3F0000044200000020000000151504A11224147 -:10F4000001082108280828000040000041808000F1 -:10F4100000008C00229A0C50040000480022D40006 -:10F42000120200C008A80085002FBE3780CE0270EF -:10F4300025DC03C00000040360231C2802000E002A -:10F440000242D0001E2426510187B0EBA4231102F2 -:10F450006C00000124002000250A06B88233CC99F4 -:10F46000F73A01009773BF40E0920977CBFC122175 -:10F470002C0A8A210E0482907F906208002C0414CA -:10F48000101508A14C006400006020B02000088026 -:10F4900040421010000019003E000003A168010165 -:10F4A0000600080040F004311213C5414001060077 -:10F4B0000000000000008000001052000800A94079 -:10F4C0000000000007000000200010008000200065 -:10F4D0004020004000020000000000200007F00073 -:10F4E00000000201002080003040000000040040C5 -:10F4F000002040400800002004000400000000003C -:10F50000180400089100004202000210201080013F -:10F5100000050040280280480500500800A00200B5 -:10F520000A000000000000000008000100000000C8 -:10F5300000000020000000000000000000000000AB -:10F540001000000000000000001000000100082072 -:10F55000802011AB042206042078C0460C327CCBFC -:10F5600027C0993836640306003C6018000D00027D -:10F57000C98F0992742466CE0078C0300060C061E3 -:10F580008026CD8DB2F2C9908C6C046848D1E02100 -:10F590001C01811326CF3261F3A49B3601E34C1A80 -:10F5A00030E18000420993036131326413A6060CF6 -:10F5B0000070C3860C346813264B3661D324C846CA -:10F5C0000E1E008420D084D08D242109D09366C4DF -:10F5D000366C23468A3460884445B3327D03A300E9 -:10F5E000CC24707B08690A470260846C8E02FB8A17 -:10F5F000E65061C0ED6F2135C01391C984977D0538 -:10F600005B030300010000540008CFFF300000003E -:10F610001429914BF19002B80F203FFC0000F0003C -:10F62000001810000402006000001000000000003C +:10EE80000000000000000000000000000000000082 +:10EE90000000000000000000000000000000000072 +:10EEA0000000000000000000000000000000000062 +:10EEB0000000000000000000000000000000000052 +:10EEC0000000000000000000000000000000000042 +:10EED0000000000000000000000000000000000032 +:10EEE0000000000000000000000000000000000022 +:10EEF0000000000000000000000000000000000012 +:10EF00000000000000000000000000000000000001 +:10EF100000000000000000000000000000000000F1 +:10EF200000000000000000000000000000000000E1 +:10EF300000000000000000000000000000000000D1 +:10EF400000000000000000000000000000000000C1 +:10EF500000000000000000000000000000000000B1 +:10EF600000000000000000000000000000000000A1 +:10EF70000000000000000000000000000000000091 +:10EF80000000000000000000000000000000000081 +:10EF90000000000000000000000000000000000071 +:10EFA0000000000000000000000000000000000061 +:10EFB0000000000000000000000000000000000051 +:10EFC0000000000000000000000000000000000041 +:10EFD0000000000000000000000000000000000031 +:10EFE0000000000000000000000000000000000021 +:10EFF0000000000000000000000000000000000011 +:10F000000000000000000000000000000000000000 +:10F0100000000000000000000000000000000000F0 +:10F0200000000000000000000000000000000000E0 +:10F0300000000000000000000000000000000000D0 +:10F0400000000000000000000000000000000000C0 +:10F0500000000000000000000000000000000000B0 +:10F0600000000000000000000000000000000000A0 +:10F070000000000000000000000000000000000090 +:10F080000000000000000000000000000000000080 +:10F090000000000000000000000000000000000070 +:10F0A0000000000000000000000000000000000060 +:10F0B0000000000000000000000000000000000050 +:10F0C0000000000000000000000000000000000040 +:10F0D0000000000000000000000000000000000030 +:10F0E0000000000000000000000000000000000020 +:10F0F0000000000000000000000000000000000010 +:10F1000000000000000000000000000000000000FF +:10F1100000000000000000000000000000000000EF +:10F1200000000000000000000000000000000000DF +:10F1300000000000000000000000000000000000CF +:10F1400000000000000000000000000000000000BF +:10F1500000000000000000000000000000000000AF +:10F16000000000000000000000000000000000009F +:10F17000000000000000000000000000000000008F +:10F18000000000000000000000000000000000007F +:10F19000000000000000000000000000000000006F +:10F1A000000000000000000000000000000000005F +:10F1B000000000000000000000000000000000004F +:10F1C000000000000000000000000000000000003F +:10F1D000000000000000000000000000000000002F +:10F1E000000000000000000000000000000000001F +:10F1F000000000000000000000000000000000000F +:10F2000000000000000000000000000000000000FE +:10F2100000000000000000000000000000000000EE +:10F2200000000000000000000000000000000000DE +:10F2300000000000000000000000000000000000CE +:10F2400000000000000000000000000000000000BE +:10F2500000000000000000000000000000000000AE +:10F26000000000000000000000000000000000009E +:10F27000000000000000000000000000000000008E +:10F28000000000000000000000000000000000007E +:10F29000000000000000000000000000000000006E +:10F2A000000000000000000000000000000000005E +:10F2B000000000000000000000000000000000004E +:10F2C000000000000000000000000000000000003E +:10F2D000000000000000000000000000000000002E +:10F2E000000000000000000000000000000000001E +:10F2F000000000000000000000000000000000000E +:10F3000000000000000000000000000000000000FD +:10F3100000000000000000000000000000000000ED +:10F3200000000000000000000000000000000000DD +:10F3300000000000000000000000000000000000CD +:10F3400000000000000000000000000000000000BD +:10F3500000000000000000000000000000000000AD +:10F36000000000000000000000000000000000009D +:10F37000000000000000000000000000000000008D +:10F38000000000000000000000000000000000007D +:10F39000000000000000000000000000000000006D +:10F3A000000000000000000000000000000000005D +:10F3B000000000000000000000000000000000004D +:10F3C000000000000000000000000000000000003D +:10F3D000000000000000000000000000000000002D +:10F3E000000000000000000000000000000000001D +:10F3F000000000000000000000000000000000000D +:10F4000000000000000000000000000000000000FC +:10F4100000000000000000000000000000000000EC +:10F4200000000000000000000000000000000000DC +:10F4300000000000000000000000000000000000CC +:10F4400000000000000000000000000000000000BC +:10F4500000000000000000000000000000000000AC +:10F46000000000000000000000000000000000009C +:10F47000000000000000000000000000000000008C +:10F48000000000000000000000000000000000007C +:10F49000000000000000000000000000000000006C +:10F4A000000000000000000000000000000000005C +:10F4B000000000000000000000000000000000004C +:10F4C000000000000000000000000000000000003C +:10F4D000000000000000000000000000000000002C +:10F4E000000000000000000000000000000000001C +:10F4F000000000000000000000000000000000000C +:10F5000000000000000000000000000000000000FB +:10F5100000000000000000000000000000000000EB +:10F5200000000000000000000000000000000000DB +:10F5300000000000000000000000000000000000CB +:10F5400000000000000000000000000000000000BB +:10F5500000000000000000000000000000000000AB +:10F56000000000000000000000000000000000009B +:10F57000000000000000000000000000000000008B +:10F58000000000000000000000000000000000007B +:10F59000000000000000000000000000000000006B +:10F5A000000000000000000000000000000000005B +:10F5B000000000000000000000000000000000004B +:10F5C000000000000000000000000000000000003B +:10F5D000000000000000000000000000000000002B +:10F5E000000000000000000000000000000000001B +:10F5F000000000000000000000000000000000000B +:10F6000000000000000000000000000000000000FA +:10F6100000000000000000000000000000000000EA +:10F6200000000000000000000000000000000000DA :10F6300000000000000000000000000000000000CA :10F6400000000000000000000000000000000000BA -:10F650000000000003FF00FFFF0000C000000000EA -:10F6600000003FFF0FFFF3FFFCFFFF0000C00000A2 -:10F67000000000003FFF0FFFF00AFC000000000048 -:10F68000000000001020000000000000000000004A +:10F6500000000000000000000000000000000000AA +:10F66000000000000000000000000000000000009A +:10F67000000000000000000000000000000000008A +:10F68000000000000000000000000000000000007A :10F69000000000000000000000000000000000006A -:10F6A000000000000000000000003FFF0FFFF3FF1C -:10F6B000FCFFFF0000C00000000000003FFF0FFF44 -:10F6C000F00AFC0000000000000000001020000014 +:10F6A000000000000000000000000000000000005A +:10F6B000000000000000000000000000000000004A +:10F6C000000000000000000000000000000000003A :10F6D000000000000000000000000000000000002A :10F6E000000000000000000000000000000000001A :10F6F000000000000000000000000000000000000A :10F7000000000000000000000000000000000000F9 -:10F710000000000000000028000000028000002619 -:10F720006409999266649999000000000000000045 +:10F7100000000000000000000000000000000000E9 +:10F7200000000000000000000000000000000000D9 :10F7300000000000000000000000000000000000C9 :10F7400000000000000000000000000000000000B9 -:10F750000000000000000000000000000000100099 +:10F7500000000000000000000000000000000000A9 :10F760000000000000000000000000000000000099 :10F770000000000000000000000000000000000089 :10F780000000000000000000000000000000000079 :10F790000000000000000000000000000000000069 -:10F7A0000000000000000077C800007F0000240176 -:10F7B000208800800C20DBC02606400061991001E3 -:10F7C0006601C0000043CE1C00043ECFCFF1900183 -:10F7D00084000010AA0000014000200500000CDF9A -:10F7E00080601C000000000000000000000000001D -:10F7F0000000000000A40014800480012028800480 -:10F80000001407003201403801000A0A1C000110F0 -:10F8100011BC3E00008F73FFAC7C0F3E3E0F19F110 -:10F82000280C11843002081900000C004020000A46 -:10F83000300176608C3621B2C18212D0F8320A02D1 -:10F84000E10F0821568421903C27051A1218000167 -:10F8500007010709C133E26C01333DFC8421F0C389 -:10F8600064365034230000C100008D223F7802230B -:10F870000040504288039C000002F00018432180A1 -:10F880000F65D06480D9761241CF9F3139F00EF0E8 -:10F890000048470080101CCC0C041C43142340205B -:10F8A000A6BB12F7486503E42C6DFE2DB6C9FFD048 -:10F8B00018A8290002B24C3FB3D87887B03D0F4852 -:10F8C0007B03B0F40F61189EC00401E804184828B7 -:10F8D0000400D400008483880618016880000411A5 -:10F8E0002417388450010C80813525370E200218EA -:10F8F00048F08B3244001180A3800681140500A5D6 -:10F90000108C4448080B1104C2B1E2800810111198 -:10F9100040C421D4C400100040C20601880060F534 -:10F920000000003A00800020D022000410D0012006 -:10F930006130010084C82226383A63000042D82290 -:10F94000971044E721530002002A44419004020228 -:10F9500004038410C0100E48C318002040378020D4 -:10F9600002000570200001410000000000000000BE -:10F9700000000000000200080000264C004500A026 -:10F9800000A1651024021320A9000D4415538E29EF -:10F990001009000404124D082CA090000028000754 -:10F9A00000138047840B080B5808AA8281D0C1E954 -:10F9B0000AAAC105200120A90029010A706122A814 -:10F9C000207102A042A20120100A951651400400A5 -:10F9D00000001B2800C04D000000084010308A8045 -:10F9E00081C04A9400101240050CA0A284040B228E -:10F9F00085400B20329043200080040080A08010BE -:10FA0000010940092880078C45092654800042409E -:10FA10000021A7242001E6211084404000B280008C -:10FA200021AD10D56038E0023F22432C492001442B -:10FA30008A9011867002400AD60C08822068E00A7B -:10FA40000285C6F8408004202010080100000080D4 -:10FA5000842204B98C905042C000243808402123ED -:10FA60000440ADC012E10E6E605544010A018000F1 -:10FA7000A010300C9814390ACC1B900004209A0076 -:10FA80004AC828D080002D48000906A453830440AA -:10FA9000002018C00612A0000B6103000002D0482D -:10FAA00068BD0A01460C2F40C02000040009C001B7 -:10FAB00040BC08000320BD000010C000011100661A -:10FAC000000003000060322D2DCE60001C5010425B -:10FAD0000618C0B0C02DEC230B0262443BD00110CD -:10FAE000030000080000024994454007048108A271 -:10FAF0006340912B3047821192510490F920C38AC0 -:10FB000030220300A50E1501800142968028060CC4 -:10FB10000A8570408504CC8B054D000041110062C0 -:10FB20000A0045090181004050A412A0070050902E -:10FB3000080246020080C291C01418A005E9C00066 -:10FB40001017A43183215185426106245E3B1126A2 -:10FB5000C4210129904622102A02A2336480306415 -:10FB60000C25040822C60460B419D80CA1F0110CAD -:10FB700003102414480120310010C1084201830001 -:10FB8000080C24420204014083236824000404007A -:10FB900006200A10C10008D6000000020002C210B0 -:10FBA00050040020040C001002000B680081640C5B -:10FBB0006005100800000000108810018110110A73 -:10FBC0000819BA00914761408B08020207900A0E9B -:10FBD0006045941F54000280000044202C1406202D -:10FBE000C1394005C00011283C892A901008C8A0DE -:10FBF000240102008161A034452B1104214162805F -:10FC000010CE264E09600242C434110064401140F7 -:10FC1000008010042059416682100400F2000000A8 -:10FC20008CC1100400881000010900CC08460000B7 -:10FC30008C0111202B2C10C801090801809090081C -:10FC4000420D020F8A201034C08820830A810001EF -:10FC50004011D6160109C680401408281080010101 -:10FC6000800A0027A80043810003802023E000448D -:10FC70000DA80243DCC5F410040082921200A944CE -:10FC80000280099B12383008C313F282AA005A700E -:10FC9000C2000144C8002228C0160D3AC20833B27F -:10FCA000510088CE0100031A000C0C04CD2220CA9A -:10FCB000D822BAE451331100C00D030A0057653B46 -:10FCC0008847CEC0502C0088190F042A2367701E65 -:10FCD000F90841C089A0B0B02BFD2A2900E401F049 -:10FCE0008804440290C42080002440100100008059 -:10FCF000800088000004514A1081415020542F2078 -:10FD0000020000C04410420E020061D002081C280C -:10FD10000000001100C400000001200408000100E0 -:10FD2000101102C04100010010001000084962805B -:10FD30001FF8939E2180866E40C00450261FCB0082 -:10FD40005F800BBC41240CF504000022FC01042060 -:10FD500081420600204CF1C02000C0E513D00042D3 -:10FD6000B80002825801A88008013C10000420203D -:10FD70008026100064012F42414050120802040105 -:10FD80004002F80090080000001009008000000107 -:10FD9000009000000000020100000000020001A02D -:10FDA0000000040050400000001B020F700008100B -:10FDB000000010D4024340E900E5863FFD80FF03C8 -:10FDC000DE8CAAFF3E08805853F1C04C1D180C0869 -:10FDD000180014241D2D001800108002409400000B -:10FDE000018200000100004001000040A004000268 -:10FDF000800000819820519000C000AA040021A832 -:10FE00005407F001530000200000008000000000B3 -:10FE100000000078000000000000183050010CC005 -:10FE20000A004047C80086012400030000000009C2 -:10FE3000100043E00109004B08309609612212C00E -:10FE4000212504080A00100418004033200800602F -:10FE50002000AEA011F8047950E2E02550141544BA -:10FE60000250FC1C3CAA31708528101414844802EE -:10FE70000443210081C0101004220C8420C9904C3E -:10FE80009924C9824C91326464C8264C8264C13280 -:10FE90001099080493021320C84C4C9904C9826439 -:10FEA00020C990C9210C990924909324084904C8B9 -:10FEB00049932021301321264C8264C3264C32649E -:10FEC000132649326193240842132646426264C8CD -:10FED000264C0C9904C9924C9864C9264C8264C380 -:10FEE000264C908419324084209084909908424393 -:10FEF00021324C8464C9264C8264C0884C89961196 -:10FF000026C595118024E599020681AE4290204ACB -:10FF10004B105C013480AE00D3A50510808CC1C9A4 -:10FF200014B93905284080800244480810154C0057 -:10FF3000400010A0003D2A8F1E7002E8FFC03FFF66 -:10FF4000C000F0000018B0000000000000004000F9 +:10F7A0000000000000000000000000000000000059 +:10F7B0000000000000000000000000000000000049 +:10F7C0000000000000000000000000000000000039 +:10F7D0000000000000000000000000000000000029 +:10F7E0000000000000000000000000000000000019 +:10F7F0000000000000000000000000000000000009 +:10F8000000000000000000000000000000000000F8 +:10F8100000000000000000000000000000000000E8 +:10F8200000000000000000000000000000000000D8 +:10F8300000000000000000000000000000000000C8 +:10F8400000000000000000000000000000000000B8 +:10F8500000000000000000000000000000000000A8 +:10F860000000000000000000000000000000000098 +:10F870000000000000000000000000000000000088 +:10F880000000000000000000000000000000000078 +:10F890000000000000000000000000000000000068 +:10F8A0000000000000000000000000000000000058 +:10F8B0000000000000000000000000000000000048 +:10F8C0000000000000000000000000000000000038 +:10F8D0000000000000000000000000000000000028 +:10F8E0000000000000000000000000000000000018 +:10F8F0000000000000000000000000000000000008 +:10F9000000000000000000000000000000000000F7 +:10F9100000000000000000000000000000000000E7 +:10F9200000000000000000000000000000000000D7 +:10F9300000000000000000000000000000000000C7 +:10F9400000000000000000000000000000000000B7 +:10F9500000000000000000000000000000000000A7 +:10F960000000000000000000000000000000000097 +:10F970000000000000000000000000000000000087 +:10F980000000000000000000000000000000000077 +:10F990000000000000000000000000000000000067 +:10F9A0000000000000000000000000000000000057 +:10F9B0000000000000000000000000000000000047 +:10F9C0000000000000000000000000000000000037 +:10F9D0000000000000000000000000000000000027 +:10F9E0000000000000000000000000000000000017 +:10F9F0000000000000000000000000000000000007 +:10FA000000000000000000000000000000000000F6 +:10FA100000000000000000000000000000000000E6 +:10FA200000000000000000000000000000000000D6 +:10FA300000000000000000000000000000000000C6 +:10FA400000000000000000000000000000000000B6 +:10FA500000000000000000000000000000000000A6 +:10FA60000000000000000000000000000000000096 +:10FA70000000000000000000000000000000000086 +:10FA80000000000000000000000000000000000076 +:10FA90000000000000000000000000000000000066 +:10FAA0000000000000000000000000000000000056 +:10FAB0000000000000000000000000000000000046 +:10FAC0000000000000000000000000000000000036 +:10FAD0000000000000000000000000000000000026 +:10FAE0000000000000000000000000000000000016 +:10FAF0000000000000000000000000000000000006 +:10FB000000000000000000000000000000000000F5 +:10FB100000000000000000000000000000000000E5 +:10FB200000000000000000000000000000000000D5 +:10FB300000000000000000000000000000000000C5 +:10FB400000000000000000000000000000000000B5 +:10FB500000000000000000000000000000000000A5 +:10FB60000000000000000000000000000000000095 +:10FB70000000000000000000000000000000000085 +:10FB80000000000000000000000000000000000075 +:10FB90000000000000000000000000000000000065 +:10FBA0000000000000000000000000000000000055 +:10FBB0000000000000000000000000000000000045 +:10FBC0000000000000000000000000000000000035 +:10FBD0000000000000000000000000000000000025 +:10FBE0000000000000000000000000000000000015 +:10FBF0000000000000000000000000000000000005 +:10FC000000000000000000000000000000000000F4 +:10FC100000000000000000000000000000000000E4 +:10FC200000000000000000000000000000000000D4 +:10FC300000000000000000000000000000000000C4 +:10FC400000000000000000000000000000000000B4 +:10FC500000000000000000000000000000000000A4 +:10FC60000000000000000000000000000000000094 +:10FC70000000000000000000000000000000000084 +:10FC80000000000000000000000000000000000074 +:10FC90000000000000000000000000000000000064 +:10FCA0000000000000000000000000000000000054 +:10FCB0000000000000000000000000000000000044 +:10FCC0000000000000000000000000000000000034 +:10FCD0000000000000000000000000000000000024 +:10FCE0000000000000000000000000000000000014 +:10FCF0000000000000000000000000000000000004 +:10FD000000000000000000000000000000000000F3 +:10FD100000000000000000000000000000000000E3 +:10FD200000000000000000000000000000000000D3 +:10FD300000000000000000000000000000000000C3 +:10FD400000000000000000000000000000000000B3 +:10FD500000000000000000000000000000000000A3 +:10FD60000000000000000000000000000000000093 +:10FD70000000000000000000000000000000000083 +:10FD80000000000000000000000000000000000073 +:10FD90000000000000000000000000000000000063 +:10FDA0000000000000000000000000000000000053 +:10FDB0000000000000000000000000000000000043 +:10FDC0000000000000000000000000000000000033 +:10FDD0000000000000000000000000000000000023 +:10FDE0000000000000000000000000000000000013 +:10FDF0000000000000000000000000000000000003 +:10FE000000000000000000000000000000000000F2 +:10FE100000000000000000000000000000000000E2 +:10FE200000000000000000000000000000000000D2 +:10FE300000000000000000000000000000000000C2 +:10FE400000000000000000000000000000000000B2 +:10FE500000000000000000000000000000000000A2 +:10FE60000000000000000000000000000000000092 +:10FE70000000000000000000000000000000000082 +:10FE80000000000000000000000000000000000072 +:10FE90000000000000000000000000000000000062 +:10FEA0000000000000000000000000000000000052 +:10FEB0000000000000000000000000000000000042 +:10FEC0000000000000000000000000000000000032 +:10FED0000000000000000000000000000000000022 +:10FEE0000000000000000000000000000000000012 +:10FEF0000000000000000000000000000000000002 +:10FF000000000000000000000000000000000000F1 +:10FF100000000000000000000000000000000000E1 +:10FF200000000000000000000000000000000000D1 +:10FF300000000000000000000000000000000000C1 +:10FF400000000000000000000000000000000000B1 :10FF500000000000000000000000000000000000A1 :10FF60000000000000000000000000000000000091 :10FF70000000000000000000000000000000000081 :10FF80000000000000000000000000000000000071 -:10FF9000000000000000000000000000000200005F -:10FFA0000000000000000000080000000000000049 +:10FF90000000000000000000000000000000000061 +:10FFA0000000000000000000000000000000000051 :10FFB0000000000000000000000000000000000041 :10FFC0000000000000000000000000000000000031 :10FFD0000000000000000000000000000000000021 -:10FFE000000000000002000000000000000000000F -:10FFF00008000000000000000000000000000000F9 +:10FFE0000000000000000000000000000000000011 +:10FFF0000000000000000000000000000000000001 :02000004003DBD :1000000000000000000000000000000000000000F0 :1000100000000000000000000000000000000000E0 @@ -259583,139 +259583,139 @@ :105BE00000000000000000000000000000000000B5 :105BF00000000000000000000000000000000000A5 :105C00000000000000000000000000000000000094 -:105C1000000005F2CC0000B054230C29B4810AA185 -:105C200040B0A54C000042028000244380020C4991 -:105C30008A001020040101D00C43A02A002A482128 -:105C4000FF0480A01828801810000414004A402186 -:105C500001218282448305108240210A0442810A84 -:105C60002000882078416800C0405B8A04204811E9 -:105C7000400208408A101040A0424A6443C80460B1 -:105C80000072A22060AB883621C81A2240380E2943 -:105C9000254C8090E00004464000008C08024D90A6 -:105CA00078E407248185738C603A91289D4C0C829E -:105CB0003C60A9D43034C97181DB50252424518043 -:105CC000B07303548F181DB506B2438E48E48003A9 -:105CD0008E0C51034624000F11C68498C099801879 -:105CE000AC290A8529400D28824018C9087942311B -:105CF000601E5128B10020404204000A259C4481C6 -:105D000000BB84283E18F1C290414560B6C021987E -:105D10008003918BF4498C09248D92303D244215E7 -:105D20001B0401A442C25825842E4B02584184B062 -:105D30004B0908960BE0607C648004213788C522FB -:105D4000B4248A1C1C72C59CD140B4B12C1211C55C -:105D500049435CB8814123820A4B31E20025AA3DC8 -:105D6000050B8AC2825063C23ED44180526880953E -:105D7000543A274156C1E0D0E8431D204190338278 -:105D800088B65924E80741D0244046B63890C1B0BF -:105D9000700A3862411468021C0011D883442B71C8 -:105DA000411B6278406D842129CAF300210C0F0841 -:105DB000385FCA1103BB8C587A18250C63E1AA8896 -:105DC000922800DC0DADA3F6AC4D7616DB42C78001 -:105DD0005ED43304002B80000000000000000000AF -:105DE00000036528459038900480F0CB444C582639 -:105DF000908A807070A002B11F06450C5028C80A16 -:105E0000471D0ACCAF02AC281C920040804C42785F -:105E10002804D104A40015034CE8205E2BE0C4A1A3 -:105E2000826538F0AA1E6500C8118AF83928100961 -:105E300041C442148885C3178380F490A0300CC1FC -:105E40000DD904001100802A8C04070464A34F08B4 -:105E500062D21D288ACB030740996B0742C56BC2EB -:105E600049083C033301CC66E20960276226820CB4 -:105E7000C2538A60831230BB8E6B2008A815FC02C7 -:105E8000024E1992703C679A16BC0855A0085CAB8C -:105E900092300E02A5F001143441247907412155B6 -:105EA000609A382F41016960458C144705638783E8 -:105EB000A296B4A5A525694D65A12C58614A029703 -:105EC000482222DE90C09A318683C810B4AC70BBE1 -:105ED00020CD0988F04130B6D022440252A101E819 -:105EE000C2D62D0B0131C1625C18C43911C4566091 -:105EF000521064070A90020381004C26D90A868D4D -:105F0000BA0156C899000AA8050B422F4409222459 -:105F10006F4F42410854BA161C224A64210B689400 -:105F2000D73D09088CB2D4A08BB600860BAA4009D5 -:105F3000109147088F40100302803DAA0A2A80086A -:105F4000B36AACA5520B5A8131012224C6A1252C7B -:105F500003E8818080031D000806041098342E9603 -:105F600005A84D0E11221800060500001240002061 -:105F70001A0008000B8E00629495130085080E200D -:105F80000A082824361240B810EA48978510208263 -:105F9000810005B008122152800A01088834841952 -:105FA0006D4004019E80865013B2824E0020A01CDA -:105FB0001027680A0020000002000FD3035631406A -:105FC00028004328918F00D01944E40603C20077CB -:105FD00011200802041006803012C18088CC030012 -:105FE000C308C000AC0069062106A0F26C4003841F -:105FF00021920196404300DB2F0BDB440DD14C4432 -:10600000328C08180828402130024030C1806021BD -:10601000252C27FE13000825909F600E5C18004871 -:1060200000A15FF89EAA0905C791115C643EDE09D4 -:1060300008414441B61084A72FCC0FBDA0EBB0EDB2 -:10604000C43B7E8AD9A080B8812008D6824060A255 -:1060500004E2580243CF1A0263287810010A454629 -:10606000C10500A02B282D4598306A4C020015C0B0 -:1060700006430000E400020C15C0964202805C2C2E -:10608000104846811154404A9C32BA0AE3823614C1 -:10609000221004C883A67301A034CD154342765163 -:1060A0006CE811A125294000600300908402A4C17E -:1060B0002251CD00384A30A08C594062600F18152B -:1060C000488560803808201C12C18A1713A92477DC -:1060D000AD11660D653235343ED61842450020F2CA -:1060E000AC6D4809584CB401143845720104C3E240 -:1060F000A0D5A804AD04910419D28200ED4002019C -:10610000872C52A2AC952A010344795015908BA696 -:106110002304495300EA78D54238A14807220430C5 -:10612000739824420112B284000888261B048980D7 -:10613000C288A4C4286C0D8710C4C054910AC348F7 -:10614000520226242AA80B9C41A6120AD80AD40C73 -:106150008204AC12116C58D00D088C44916E581505 -:106160002E3083081B235200D42003408C041310CC -:10617000101210080C858501C49CA02D2CE7033952 -:10618000B04EB8B114008406AD20C90C5F99064921 -:1061900043AE33AE24AE241551489A8100187420C2 -:1061A000006203DEB1629085C811C84D1533FD3819 -:1061B0001FB7002188A820C5FC010E21C18B040156 -:1061C000480400151481050001C424A9C501060C6A -:1061D000CA62D4C44326064909109028A46822162E -:1061E0009143F403FE08223F3982462CA3230C007E -:1061F000D72B024120100D60B024120180D603027B -:1062000040C2BA398E01F0D287FC14522A50CEB95E -:10621000E09508886E00FF004810E4384002242012 -:10622000816091141487A01108C840812120510079 -:10623000000000814020F0C58308B54A3D01BB380D -:10624000507C16A14AA2D044887A732DAC44FD61DB -:106250001ECC47B211280C207156BC4198143C4307 -:10626000433029402B0201FF0182C28180FFF03AB6 -:1062700065C740F1C6B001032410090080048008FE -:10628000000971090000E2E47E020E9D8F4C900A25 -:106290000028100CD98D54508828284002820154BF -:1062A000201304E05C05C08C0B80B8140270000061 -:1062B0008A62801018928015590801B18440FBFE53 -:1062C0003A588093F0B0B0400000400F00012C54C9 -:1062D00049FF1858004010004029900C83821C5040 -:1062E0009084598204230484204890448104080047 -:1062F0004081020424082044820401021081080421 -:1063000010021020084040810408020420081008F0 -:1063100021008101041010200841040848102021A8 -:10632000001021204082040020400204102041027D -:106330000010200842102040420204082040008142 -:10634000040810408004082040820400204090840B -:106350000112008420108410810842002100408432 -:10636000040820408204008840FFF33FF7CFFFF08D -:10637000C3FCF99F2F5FC7FF9342F4FF0F3EFFCF8F -:10638000B710FF0CFF3F3C77C3BFF00DF0FFFE03DB -:10639000FF43D1C3F3044D5F10528C006140501590 -:1063A000010A5682B270423800000000000000006E -:1063B000009CB00000000000000060000000000031 +:105C10000000000000000000000000000000000084 +:105C20000000000000000000000000000000000074 +:105C30000000000000000000000000000000000064 +:105C40000000000000000000000000000000000054 +:105C50000000000000000000000000000000000044 +:105C60000000000000000000000000000000000034 +:105C70000000000000000000000000000000000024 +:105C80000000000000000000000000000000000014 +:105C90000000000000000000000000000000000004 +:105CA00000000000000000000000000000000000F4 +:105CB00000000000000000000000000000000000E4 +:105CC00000000000000000000000000000000000D4 +:105CD00000000000000000000000000000000000C4 +:105CE00000000000000000000000000000000000B4 +:105CF00000000000000000000000000000000000A4 +:105D00000000000000000000000000000000000093 +:105D10000000000000000000000000000000000083 +:105D20000000000000000000000000000000000073 +:105D30000000000000000000000000000000000063 +:105D40000000000000000000000000000000000053 +:105D50000000000000000000000000000000000043 +:105D60000000000000000000000000000000000033 +:105D70000000000000000000000000000000000023 +:105D80000000000000000000000000000000000013 +:105D90000000000000000000000000000000000003 +:105DA00000000000000000000000000000000000F3 +:105DB00000000000000000000000000000000000E3 +:105DC00000000000000000000000000000000000D3 +:105DD00000000000000000000000000000000000C3 +:105DE00000000000000000000000000000000000B3 +:105DF00000000000000000000000000000000000A3 +:105E00000000000000000000000000000000000092 +:105E10000000000000000000000000000000000082 +:105E20000000000000000000000000000000000072 +:105E30000000000000000000000000000000000062 +:105E40000000000000000000000000000000000052 +:105E50000000000000000000000000000000000042 +:105E60000000000000000000000000000000000032 +:105E70000000000000000000000000000000000022 +:105E80000000000000000000000000000000000012 +:105E90000000000000000000000000000000000002 +:105EA00000000000000000000000000000000000F2 +:105EB00000000000000000000000000000000000E2 +:105EC00000000000000000000000000000000000D2 +:105ED00000000000000000000000000000000000C2 +:105EE00000000000000000000000000000000000B2 +:105EF00000000000000000000000000000000000A2 +:105F00000000000000000000000000000000000091 +:105F10000000000000000000000000000000000081 +:105F20000000000000000000000000000000000071 +:105F30000000000000000000000000000000000061 +:105F40000000000000000000000000000000000051 +:105F50000000000000000000000000000000000041 +:105F60000000000000000000000000000000000031 +:105F70000000000000000000000000000000000021 +:105F80000000000000000000000000000000000011 +:105F90000000000000000000000000000000000001 +:105FA00000000000000000000000000000000000F1 +:105FB00000000000000000000000000000000000E1 +:105FC00000000000000000000000000000000000D1 +:105FD00000000000000000000000000000000000C1 +:105FE00000000000000000000000000000000000B1 +:105FF00000000000000000000000000000000000A1 +:106000000000000000000000000000000000000090 +:106010000000000000000000000000000000000080 +:106020000000000000000000000000000000000070 +:106030000000000000000000000000000000000060 +:106040000000000000000000000000000000000050 +:106050000000000000000000000000000000000040 +:106060000000000000000000000000000000000030 +:106070000000000000000000000000000000000020 +:106080000000000000000000000000000000000010 +:106090000000000000000000000000000000000000 +:1060A00000000000000000000000000000000000F0 +:1060B00000000000000000000000000000000000E0 +:1060C00000000000000000000000000000000000D0 +:1060D00000000000000000000000000000000000C0 +:1060E00000000000000000000000000000000000B0 +:1060F00000000000000000000000000000000000A0 +:10610000000000000000000000000000000000008F +:10611000000000000000000000000000000000007F +:10612000000000000000000000000000000000006F +:10613000000000000000000000000000000000005F +:10614000000000000000000000000000000000004F +:10615000000000000000000000000000000000003F +:10616000000000000000000000000000000000002F +:10617000000000000000000000000000000000001F +:10618000000000000000000000000000000000000F +:1061900000000000000000000000000000000000FF +:1061A00000000000000000000000000000000000EF +:1061B00000000000000000000000000000000000DF +:1061C00000000000000000000000000000000000CF +:1061D00000000000000000000000000000000000BF +:1061E00000000000000000000000000000000000AF +:1061F000000000000000000000000000000000009F +:10620000000000000000000000000000000000008E +:10621000000000000000000000000000000000007E +:10622000000000000000000000000000000000006E +:10623000000000000000000000000000000000005E +:10624000000000000000000000000000000000004E +:10625000000000000000000000000000000000003E +:10626000000000000000000000000000000000002E +:10627000000000000000000000000000000000001E +:10628000000000000000000000000000000000000E +:1062900000000000000000000000000000000000FE +:1062A00000000000000000000000000000000000EE +:1062B00000000000000000000000000000000000DE +:1062C00000000000000000000000000000000000CE +:1062D00000000000000000000000000000000000BE +:1062E00000000000000000000000000000000000AE +:1062F000000000000000000000000000000000009E +:10630000000000000000000000000000000000008D +:10631000000000000000000000000000000000007D +:10632000000000000000000000000000000000006D +:10633000000000000000000000000000000000005D +:10634000000000000000000000000000000000004D +:10635000000000000000000000000000000000003D +:10636000000000000000000000000000000000002D +:10637000000000000000000000000000000000001D +:10638000000000000000000000000000000000000D +:1063900000000000000000000000000000000000FD +:1063A00000000000000000000000000000000000ED +:1063B00000000000000000000000000000000000DD :1063C00000000000000000000000000000000000CD :1063D00000000000000000000000000000000000BD :1063E00000000000000000000000000000000000AD :1063F000000000000000000000000000000000009D -:10640000000000000000000000020000000000008A -:106410000000000008000000000000000000000074 +:10640000000000000000000000000000000000008C +:10641000000000000000000000000000000000007C :10642000000000000000000000000000000000006C :10643000000000000000000000000000000000005C :10644000000000000000000000000000000000004C -:106450000002000000000000000000000800000032 +:10645000000000000000000000000000000000003C :10646000000000000000000000000000000000002C :10647000000000000000000000000000000000001C :10648000000000000000000000000000000000000C @@ -259729,139 +259729,139 @@ :10650000000000000000000000000000000000008B :10651000000000000000000000000000000000007B :10652000000000000000000000000000000000006B -:106530000000000000000074020000849037BF0CCF -:1065400048898981C948820E001440138000E0C246 -:1065500000000E49CE800000000020CC0001910216 -:10656000284800240008E4E000FC05201CA00414D6 -:10657000601A14013021978204032F0003C0011E0A -:106580000447811E000580007801E8038800DB0EC7 -:106590000400411112000808881000448440015C86 -:1065A000000804018878022C506BE8378388DBA14F -:1065B000D0382F04004701324012B0004000000BD9 -:1065C00012105484B4D02680824062763C12CE0BE6 -:1065D000A98792B1D3B030961E4D409EC295182126 -:1065E0001F15B8048B80E4C4930B00110122B34D36 -:1065F00000D000300D0454E054FC00A10D1680487A -:10660000901FC000040929018C63F10CFC1E2C2E84 -:106610008E94A31648A52A1B25C5A3531A347BF3D1 -:1066200020820D000245A0004030C100000011880A -:10663000A2412AA5013A513BE46DDA2DB6C35FD2DF -:1066400082D473D03D67877F334EE8EE9D21DD0E07 -:10665000E9D29DD0DD3B093A48BBF0A3F0C8BD218B -:1066600095808402042482001A680524316030D1A8 -:10667000241252C155C068B8338227E2022462F165 -:106680008422321C850C4420822090A03164002892 -:10669000517898355C262AC0B581E0B098B62E0FA7 -:1066A00040694043F00187191800C0028530A18677 -:1066B0001408004A40B134131603800D1941DE104E -:1066C0003220324841E14070402D1735C5014E62FD -:1066D000343C0E282803490881D85044AB14348E2A -:1066E00046908C48032818520C24A2D2F84E12323D -:1066F00049038EF13F4400513FD34FFFF3FFFCFFAE -:10670000FF3FFFCFFFF0E334522802498008000327 -:10671000440C1206D0884000440000B1064E000828 -:106720001008A0032100000826408A00100008502D -:106730008200B07B008548052B0011C12C08001C8D -:1067400008C9C001026134C4001C6109C0010230E3 -:10675000340002084111008088C1C2132002258044 -:1067600052783AAC0004C40001C800004A008440DA -:1067700050424C403292013D82C2424060D34900B7 -:1067800060CF499227DCA143338880E66067782791 -:1067900062267040D2419A70001B1482066373E433 -:1067A0002821FF00200FDF03102C0F791499050515 -:1067B00020285808303FE28091F200043500301163 -:1067C00004240030A092252C2401494110A000444B -:1067D00001404247B097A42525014949C4A00C7443 -:1067E0000148000004A2229100A08A10240E029009 -:1067F000A5A400AD09C940A0B04360DA1022424010 -:1068000056A00358CA923319011590B2741014118E -:10681000910516D352344E130480070881024804B0 -:1068200018234D42321048A403820A240487211EF3 -:10683000E8141202DFCFC5118D6CD90E1A10CA668A -:1068400043135C42EF3F144CCF71F4A084742802D0 -:106850000411010910245528228850B0A2402FAD00 -:1068600024800C8021FBE450180894403101010C75 -:106870004240059502508141004C0B01048000808C -:1068800000002004058A4F004105080004010008AB -:10689000000040003A80200002C400259406000851 -:1068A00001001940080804210400001000084014E9 -:1068B00080000080010064A0001820520200000047 -:1068C00008140018094000104AC0444002820B021C -:1068D000200014100000600028000020020815525B -:1068E00043FA914020410308300202D19100850310 -:1068F0000902035CA1000010800104002003E900EC -:1069000008800300C34C4001A800E1077406A09270 -:10691000280000A43BD0019F4041189F2A0FFFC8C8 -:1069200083F14C40080000320434C3251008F219EA -:10693000144510809148100108800820008620C965 -:106940004030AE480000A0009CEA0FE10150913AAF -:10695000142E280D414E44A10FC89637173D8A4F7B -:10696000D0438862E30B5ACA596080C820021EB720 -:106970000340108200F01400DBCF84034780041032 -:10698000000F40ACA2052024281069C494204A4876 -:1069900050D231794FC790209409100C134654609F -:1069A00000242A30111C0440001110028129050422 -:1069B0000123AA08222D30888055C3B010BCE215EF -:1069C000C382ACD3589812B12C634252612524354E -:1069D000AD12E8CE0890ADA832650908C019001BB9 -:1069E000601E12114746448014182902322C4009B7 -:1069F00000201431A2004403600220284C8A31E2B6 -:106A00004F03323AF8BD582E9700E1606C2445D808 -:106A1000063581C781922C0139129C40ABF260048B -:106A2000BF7C17080527F0CB18111633948275F137 -:106A30005BB402B210040C5102A948454228028AF4 -:106A4000C832846852582A424C02B1933CC2493B36 -:106A500008CFEEE08BCCDAA3217D447BD37760AB0B -:106A6000FD09F94408819190AAA50B6B88A7B20A89 -:106A7000AC803409BB04DA9110847C920D000CA424 -:106A80009315886380000840851002004A0228633D -:106A90004E8923991407FF0B230F6D71A00000226C -:106AA0002000000573C934B9482C764EFDB0450C62 -:106AB000DFD500F1404D004D004D001049025C4013 -:106AC000028081A820120C06F33A0890002B404A5D -:106AD0004023F430520A014008B80095604001009C -:106AE000210084010800440410500848019398CA0A -:106AF00086208008235255A002272A5404009000C3 -:106B00003448021000069803EC0CA36915404AA80B -:106B1000A081540004028241200000502824120069 -:106B20000005028240A00001000C88428080A4522F -:106B30001441015A000000042202228840B0620879 -:106B400025420E00013011C0140A1A09A9862061DD -:106B500025E811D10A000CE442A1443F1302A14BE5 -:106B6000DD107F10395C0E80C8923224C07D6B2D01 -:106B7000194AFB6268C0DD30207884000291501011 -:106B8000260232015CE07354491B0400000F4302EB -:106B900000000000160006010020000004100100A3 -:106BA00090848002A92028081010B38037A323E323 -:106BB0004030100050049A28B1849C418024300158 -:106BC0000340053801144812622624C24C40C49880 -:106BD000228926CC4A7390001003942EC0420BD118 -:106BE0000020FBF900E80000034190000501000EC1 -:106BF00040007414000020C80002E2010004700785 -:106C00000BC6481066082592040100842008104035 -:106C1000810408004081020404082040820401022B -:106C200010810800100000000000000000000000BB +:10653000000000000000000000000000000000005B +:10654000000000000000000000000000000000004B +:10655000000000000000000000000000000000003B +:10656000000000000000000000000000000000002B +:10657000000000000000000000000000000000001B +:10658000000000000000000000000000000000000B +:1065900000000000000000000000000000000000FB +:1065A00000000000000000000000000000000000EB +:1065B00000000000000000000000000000000000DB +:1065C00000000000000000000000000000000000CB +:1065D00000000000000000000000000000000000BB +:1065E00000000000000000000000000000000000AB +:1065F000000000000000000000000000000000009B +:10660000000000000000000000000000000000008A +:10661000000000000000000000000000000000007A +:10662000000000000000000000000000000000006A +:10663000000000000000000000000000000000005A +:10664000000000000000000000000000000000004A +:10665000000000000000000000000000000000003A +:10666000000000000000000000000000000000002A +:10667000000000000000000000000000000000001A +:10668000000000000000000000000000000000000A +:1066900000000000000000000000000000000000FA +:1066A00000000000000000000000000000000000EA +:1066B00000000000000000000000000000000000DA +:1066C00000000000000000000000000000000000CA +:1066D00000000000000000000000000000000000BA +:1066E00000000000000000000000000000000000AA +:1066F000000000000000000000000000000000009A +:106700000000000000000000000000000000000089 +:106710000000000000000000000000000000000079 +:106720000000000000000000000000000000000069 +:106730000000000000000000000000000000000059 +:106740000000000000000000000000000000000049 +:106750000000000000000000000000000000000039 +:106760000000000000000000000000000000000029 +:106770000000000000000000000000000000000019 +:106780000000000000000000000000000000000009 +:1067900000000000000000000000000000000000F9 +:1067A00000000000000000000000000000000000E9 +:1067B00000000000000000000000000000000000D9 +:1067C00000000000000000000000000000000000C9 +:1067D00000000000000000000000000000000000B9 +:1067E00000000000000000000000000000000000A9 +:1067F0000000000000000000000000000000000099 +:106800000000000000000000000000000000000088 +:106810000000000000000000000000000000000078 +:106820000000000000000000000000000000000068 +:106830000000000000000000000000000000000058 +:106840000000000000000000000000000000000048 +:106850000000000000000000000000000000000038 +:106860000000000000000000000000000000000028 +:106870000000000000000000000000000000000018 +:106880000000000000000000000000000000000008 +:1068900000000000000000000000000000000000F8 +:1068A00000000000000000000000000000000000E8 +:1068B00000000000000000000000000000000000D8 +:1068C00000000000000000000000000000000000C8 +:1068D00000000000000000000000000000000000B8 +:1068E00000000000000000000000000000000000A8 +:1068F0000000000000000000000000000000000098 +:106900000000000000000000000000000000000087 +:106910000000000000000000000000000000000077 +:106920000000000000000000000000000000000067 +:106930000000000000000000000000000000000057 +:106940000000000000000000000000000000000047 +:106950000000000000000000000000000000000037 +:106960000000000000000000000000000000000027 +:106970000000000000000000000000000000000017 +:106980000000000000000000000000000000000007 +:1069900000000000000000000000000000000000F7 +:1069A00000000000000000000000000000000000E7 +:1069B00000000000000000000000000000000000D7 +:1069C00000000000000000000000000000000000C7 +:1069D00000000000000000000000000000000000B7 +:1069E00000000000000000000000000000000000A7 +:1069F0000000000000000000000000000000000097 +:106A00000000000000000000000000000000000086 +:106A10000000000000000000000000000000000076 +:106A20000000000000000000000000000000000066 +:106A30000000000000000000000000000000000056 +:106A40000000000000000000000000000000000046 +:106A50000000000000000000000000000000000036 +:106A60000000000000000000000000000000000026 +:106A70000000000000000000000000000000000016 +:106A80000000000000000000000000000000000006 +:106A900000000000000000000000000000000000F6 +:106AA00000000000000000000000000000000000E6 +:106AB00000000000000000000000000000000000D6 +:106AC00000000000000000000000000000000000C6 +:106AD00000000000000000000000000000000000B6 +:106AE00000000000000000000000000000000000A6 +:106AF0000000000000000000000000000000000096 +:106B00000000000000000000000000000000000085 +:106B10000000000000000000000000000000000075 +:106B20000000000000000000000000000000000065 +:106B30000000000000000000000000000000000055 +:106B40000000000000000000000000000000000045 +:106B50000000000000000000000000000000000035 +:106B60000000000000000000000000000000000025 +:106B70000000000000000000000000000000000015 +:106B80000000000000000000000000000000000005 +:106B900000000000000000000000000000000000F5 +:106BA00000000000000000000000000000000000E5 +:106BB00000000000000000000000000000000000D5 +:106BC00000000000000000000000000000000000C5 +:106BD00000000000000000000000000000000000B5 +:106BE00000000000000000000000000000000000A5 +:106BF0000000000000000000000000000000000095 +:106C00000000000000000000000000000000000084 +:106C10000000000000000000000000000000000074 +:106C20000000000000000000000000000000000064 :106C30000000000000000000000000000000000054 -:106C4000000000000000000000000000000002043E -:106C50001020410200102008421020404202040887 -:106C60002040008104081040800408204082040075 -:106C7000204010840102008420108410810842000A -:106C800021004084040820408204008840DEFF3B4D -:106C9000FDCF6F33CD9CF4EF212F8BEF43F2103DEE -:106CA000C70E6E8FF6C005CCFF7F2D72C29AB3C996 -:106CB000B4B7FF00FF03130001040DD4000E8FFFD3 -:106CC000104404011438714579600204000000008A -:106CD000000000000052A00004020000000020009C +:106C40000000000000000000000000000000000044 +:106C50000000000000000000000000000000000034 +:106C60000000000000000000000000000000000024 +:106C70000000000000000000000000000000000014 +:106C80000000000000000000000000000000000004 +:106C900000000000000000000000000000000000F4 +:106CA00000000000000000000000000000000000E4 +:106CB00000000000000000000000000000000000D4 +:106CC00000000000000000000000000000000000C4 +:106CD00000000000000000000000000000000000B4 :106CE00000000000000000000000000000000000A4 :106CF0000000000000000000000000000000000094 :106D00000000000000000000000000000000000083 :106D10000000000000000000000000000000000073 -:106D20000000000000000000000000000002000061 +:106D20000000000000000000000000000000000063 :106D30000000000000000000000000000000000053 :106D40000000000000000000000000000000000043 :106D50000000000000000000000000000000000033 :106D60000000000000000000000000000000000023 -:106D70000000000000020000000000000000000011 +:106D70000000000000000000000000000000000013 :106D80000000000000000000000000000000000003 :106D900000000000000000000000000000000000F3 :106DA00000000000000000000000000000000000E3 @@ -259875,140 +259875,140 @@ :106E20000000000000000000000000000000000062 :106E30000000000000000000000000000000000052 :106E40000000000000000000000000000000000042 -:106E50000000000000000000000000F54A00007C77 -:106E600000021001688000800968D680000440009C -:106E7000800020030003800000830C3800002DCD2B -:106E80008F23900228080028FF000003E020064717 -:106E900000B80083002A4C000001008000020100BD -:106EA000020000020000800200008000000180015A -:106EB0008000800400004400200000200100000049 -:106EC0001000032401B83C00007B719B08A0060061 -:106ED0003BC61B8240102F0C204408524012AC428B -:106EE00040000080621222442AAE157443C05285CD -:106EF0009C1A8A0C40039AC1542C00D40E6A08D004 -:106F0000B00110012B161E029411E68431EF2951B5 -:106F10008521F2AAE8AE80000A8A5403544400296D -:106F20000C52C40DD0D1E000840108000002200002 -:106F300000490B4A445242D8E014900C70CE3C6198 -:106F400063442620000A4200001718E83E187DC05E -:106F5000140204008D3830540803508FFC28B428E4 -:106F6000A28A89801D24001012000153A1C2B82BEF -:106F700085085702B8538570578A38AE002061AA39 -:106F80006CA8782B7448C50036E4821C1556804CDA -:106F9000B0000001241210404000089001041712B4 -:106FA0000200205848200109040097408200A4A054 -:106FB00015040188514080DABA3825015260025028 -:106FC000A04A39208490234788B6D52C5602B1D0E8 -:106FD00000004085000800104021140044240049AE -:106FE0008DF00400C86000080580002E7068E7007E -:106FF00008C0B302800875E61BDF0996C0838819B4 -:107000002A1A76C942834EB800501C0DCA95B0901A -:10701000AC49143A99028BC134540110001240005B -:1070200000000000000000000002820800903C9078 -:1070300006C4F20200604D202046A1723B40020CC3 -:107040001F700A0930185CC8D00048082DB1A5503F -:107050005C0E084D8B4CB0662C8549052B0010C387 -:107060005AE000491BEE0F41225328BB4B09530E37 -:10707000001126F82BD00B58C8EA13688424B116E7 -:10708000D804EC8050000DE00FDB44C2100410D295 -:10709000C232438A2F52CBB422B200888839B1B0B1 -:1070A000105D4B30124D4B62A51C17601589C22B29 -:1070B000B225C030AA26720E8952ABCC030B35B074 -:1070C0008ABEF3FC803E03000849AF91600C0F5A62 -:1070D00035B6CAA561695449300FFE4ABE01011494 -:1070E000602D0F388398A29EB8961A2B9C03596284 -:1070F000A1ACE9232413C7F80194A46D6D07594B83 -:1071000063802558E0030FFE48910042C040512F94 -:107110009280C341ACEC7F5A362B09A8E1C1F0B490 -:107120008318C203F28095E056B60C134F82D0E369 -:10713000D074CE31438C45F05A9026012480030050 -:10714000810744000821B48232106A240980248017 -:107150000004D25484FDAA35D0003F41C268B00873 -:10716000081B002220FED09B8800FD04284100203F -:107170000147008C0411012D1000010C8A88602148 -:10718000E22009400820C0806347A0441302B08079 -:107190001050022CC56120188A580139540700107C -:1071A00008010292CB903C0605AA4C0210840C10F8 -:1071B0002C05000090400000BA00200003CC007DA8 -:1071C000D4C603080A089840884C6A303C2840110D -:1071D00022FB48CB4412228241A20330280631D937 -:1071E00081A6210888B6C4156D4000119C8066F008 -:1071F0001339002E10A3A035D827C4000230040094 -:1072000002081DF242EF33FD2810460C948E00D385 -:1072100049CCB4060B2C003C22302802841514CC37 -:10722000E073AB001AC40E20C113C005AC81E105A8 -:10723000540FA3F23A400BD62B8040FD0243447713 -:107240007F0F5F0005501400080102900434020112 -:107250001002601044411020040C400002800820FD -:107260000081200D401800080100200094AA0001B0 -:107270008150112C40172C09524F654095801414F1 -:1072800015F983B3504938549C095A82490088281B -:10729000012108E08241900100801002478602022D -:1072A00060280028000A4484810500200808294439 -:1072B00094206B4802561F8A0F620290D420020865 -:1072C0001D825F4002A42810004C80148010000032 -:1072D0004231040409010414009024C0015E63C516 -:1072E00080A0CB2BA302536126E013400001005085 -:1072F0000014000842168A09828038F40205398891 -:10730000080100150031121D454159802400200A52 -:1073100000A0400800281442AA2CE3012103B0E891 -:10732000B92802400C4880617C60F8109840A29116 -:10733000142481400082C8D942AA9002EA06B1060C -:10734000C8C242E02A040D05C93420492815173F58 -:107350000280727212009B4603204113808974459B -:107360004C30A1CA0422A6B0517E0201808392242F -:1073700000C8A52E13C58B82EA8862DC226A09FE4A -:1073800031C5C0D4B109C8805B400404A95009F7D5 -:107390000454337AB848751E84842A00002450901F -:1073A000090008208220884280080100141104048A -:1073B00008000D004805120000175A1C0489878137 -:1073C0002008B86A0084001540452400000000042D -:1073D000080045005A15026141490149004900056C -:1073E000104886000788F7900011CF9C616E947D4D -:1073F000C8320B4B9523FCB01F8B03C089A800C774 -:1074000040273D27A1CE863064CCD3D134C084CF71 -:1074100063F52CEB00008E806273D4C03B253E7573 -:10742000050EB0EBA4233116FD42AE03F600A02AF0 -:10743000394306ACA2A3FC99F73A810093319F50DF -:10744000A8120933C9F50281242A8A210E088A90DC -:107450006F90A208142C8555501508A54C00748C0B -:10746000081062B005400380005611C0408FAE0C7A -:10747000F8C7307327FC01F918000AA443E0001193 -:10748000221C9540C01146282C0108208220A020F3 -:1074900008594A092C0CBB42400890022150802018 -:1074A00063095001B800204070B26274091A08FFE5 -:1074B0000E0243047C07F0006E0000010020600013 -:1074C000000C000000B4004AA90020000400802045 -:1074D0004C0215024000404F480A4028F900046061 -:1074E00080000000000004C0000140500A00A00A13 -:1074F00001401400002800004A00000018009726F0 -:10750000400C0B51000000053DE80CE5F0D440BFF5 -:10751000FA3E9FC183F2F40072FF2A218FBD101E34 -:107520009C0C91040BCA4810A5C035000000000057 +:106E50000000000000000000000000000000000032 +:106E60000000000000000000000000000000000022 +:106E70000000000000000000000000000000000012 +:106E80000000000000000000000000000000000002 +:106E900000000000000000000000000000000000F2 +:106EA00000000000000000000000000000000000E2 +:106EB00000000000000000000000000000000000D2 +:106EC00000000000000000000000000000000000C2 +:106ED00000000000000000000000000000000000B2 +:106EE00000000000000000000000000000000000A2 +:106EF0000000000000000000000000000000000092 +:106F00000000000000000000000000000000000081 +:106F10000000000000000000000000000000000071 +:106F20000000000000000000000000000000000061 +:106F30000000000000000000000000000000000051 +:106F40000000000000000000000000000000000041 +:106F50000000000000000000000000000000000031 +:106F60000000000000000000000000000000000021 +:106F70000000000000000000000000000000000011 +:106F80000000000000000000000000000000000001 +:106F900000000000000000000000000000000000F1 +:106FA00000000000000000000000000000000000E1 +:106FB00000000000000000000000000000000000D1 +:106FC00000000000000000000000000000000000C1 +:106FD00000000000000000000000000000000000B1 +:106FE00000000000000000000000000000000000A1 +:106FF0000000000000000000000000000000000091 +:107000000000000000000000000000000000000080 +:107010000000000000000000000000000000000070 +:107020000000000000000000000000000000000060 +:107030000000000000000000000000000000000050 +:107040000000000000000000000000000000000040 +:107050000000000000000000000000000000000030 +:107060000000000000000000000000000000000020 +:107070000000000000000000000000000000000010 +:107080000000000000000000000000000000000000 +:1070900000000000000000000000000000000000F0 +:1070A00000000000000000000000000000000000E0 +:1070B00000000000000000000000000000000000D0 +:1070C00000000000000000000000000000000000C0 +:1070D00000000000000000000000000000000000B0 +:1070E00000000000000000000000000000000000A0 +:1070F0000000000000000000000000000000000090 +:10710000000000000000000000000000000000007F +:10711000000000000000000000000000000000006F +:10712000000000000000000000000000000000005F +:10713000000000000000000000000000000000004F +:10714000000000000000000000000000000000003F +:10715000000000000000000000000000000000002F +:10716000000000000000000000000000000000001F +:10717000000000000000000000000000000000000F +:1071800000000000000000000000000000000000FF +:1071900000000000000000000000000000000000EF +:1071A00000000000000000000000000000000000DF +:1071B00000000000000000000000000000000000CF +:1071C00000000000000000000000000000000000BF +:1071D00000000000000000000000000000000000AF +:1071E000000000000000000000000000000000009F +:1071F000000000000000000000000000000000008F +:10720000000000000000000000000000000000007E +:10721000000000000000000000000000000000006E +:10722000000000000000000000000000000000005E +:10723000000000000000000000000000000000004E +:10724000000000000000000000000000000000003E +:10725000000000000000000000000000000000002E +:10726000000000000000000000000000000000001E +:10727000000000000000000000000000000000000E +:1072800000000000000000000000000000000000FE +:1072900000000000000000000000000000000000EE +:1072A00000000000000000000000000000000000DE +:1072B00000000000000000000000000000000000CE +:1072C00000000000000000000000000000000000BE +:1072D00000000000000000000000000000000000AE +:1072E000000000000000000000000000000000009E +:1072F000000000000000000000000000000000008E +:10730000000000000000000000000000000000007D +:10731000000000000000000000000000000000006D +:10732000000000000000000000000000000000005D +:10733000000000000000000000000000000000004D +:10734000000000000000000000000000000000003D +:10735000000000000000000000000000000000002D +:10736000000000000000000000000000000000001D +:10737000000000000000000000000000000000000D +:1073800000000000000000000000000000000000FD +:1073900000000000000000000000000000000000ED +:1073A00000000000000000000000000000000000DD +:1073B00000000000000000000000000000000000CD +:1073C00000000000000000000000000000000000BD +:1073D00000000000000000000000000000000000AD +:1073E000000000000000000000000000000000009D +:1073F000000000000000000000000000000000008D +:10740000000000000000000000000000000000007C +:10741000000000000000000000000000000000006C +:10742000000000000000000000000000000000005C +:10743000000000000000000000000000000000004C +:10744000000000000000000000000000000000003C +:10745000000000000000000000000000000000002C +:10746000000000000000000000000000000000001C +:10747000000000000000000000000000000000000C +:1074800000000000000000000000000000000000FC +:1074900000000000000000000000000000000000EC +:1074A00000000000000000000000000000000000DC +:1074B00000000000000000000000000000000000CC +:1074C00000000000000000000000000000000000BC +:1074D00000000000000000000000000000000000AC +:1074E000000000000000000000000000000000009C +:1074F000000000000000000000000000000000008C +:10750000000000000000000000000000000000007B +:10751000000000000000000000000000000000006B +:10752000000000000000000000000000000000005B :10753000000000000000000000000000000000004B -:1075400000000000000000040002102008404081FC -:1075500004080204200810082100810104101020F2 -:107560000841040848102021001021204082040016 -:107570002040020410204102001020084210204048 -:1075800042020408204000810408104080040820C2 -:1075900040820400204010840102008420108410E6 -:1075A00081084200210040840408204082040088B1 -:1075B000400000000000000000000000000000008B +:10754000000000000000000000000000000000003B +:10755000000000000000000000000000000000002B +:10756000000000000000000000000000000000001B +:10757000000000000000000000000000000000000B +:1075800000000000000000000000000000000000FB +:1075900000000000000000000000000000000000EB +:1075A00000000000000000000000000000000000DB +:1075B00000000000000000000000000000000000CB :1075C00000000000000000000000000000000000BB :1075D00000000000000000000000000000000000AB -:1075E000000343FF01100440543B3B0E278000EC96 -:1075F0000000000000000000005AB000040200007B -:10760000000030000000000000000000000000004A +:1075E000000000000000000000000000000000009B +:1075F000000000000000000000000000000000008B +:10760000000000000000000000000000000000007A :10761000000000000000000000000000000000006A :10762000000000000000000000000000000000005A :10763000000000000000000000000000000000004A :10764000000000000000000000000000000000003A -:107650000002000000000000000000000800000020 +:10765000000000000000000000000000000000002A :10766000000000000000000000000000000000001A :10767000000000000000000000000000000000000A :1076800000000000000000000000000000000000FA -:1076900000000000000000000002000000000000E8 -:1076A00000000000080000000000000000000000D2 +:1076900000000000000000000000000000000000EA +:1076A00000000000000000000000000000000000DA :1076B00000000000000000000000000000000000CA :1076C00000000000000000000000000000000000BA :1076D00000000000000000000000000000000000AA @@ -262353,149 +262353,149 @@ :1008F00000000000000000000000000000000000F8 :1009000000000000000000000000000000000000E7 :1009100000000000000000000000000000000000D7 -:1009200000000000000000000000000000000020A7 -:10093000C02220020000000444011110444411119F +:1009200000000000000000000000000000000000C7 +:1009300000000000000000000000000000000000B7 :1009400000000000000000000000000000000000A7 :100950000000000000000000000000000000000097 :100960000000000000000000000000000000000087 -:1009700000000000000000800002000000000000F5 +:100970000000000000000000000000000000000077 :100980000000000000000000000000000000000067 :100990000000000000000000000000000000000057 :1009A0000000000000000000000000000000000047 :1009B0000000000000000000000000000000000037 -:1009C000480001000002200120880080EC2064061D -:1009D0003806481181E0E0E078000608E7004F1C87 -:1009E000000400000E00011D040FE720CC0E7471FE -:1009F000807C10060000002000000001380000008C -:100A00000000000000000000000000000080001056 -:100A100000000000002000000010000000010000A5 -:100A200000000805000000083DA8340FC023700036 -:100A3000000000000000000094000400202140009D -:100A40005000000040000000000002000000000014 -:100A5000018200200001250000000800A10000091B -:100A600000200284000024004000000080100204E6 -:100A700050C0000244040000000000200000870075 -:100A800018040ED800040050000200008001080085 -:100A900000000000E4180000008A20000022880006 -:100AA0000000000000006000000800000310E020CB -:100AB000F10000000000000080000000068100013D -:100AC000C092011249080021025052800D450000D9 -:100AD00040200400400000800400400800800081A5 -:100AE0000C0383C80001F220040085800204860004 -:100AF0000002000880010801241210004002088052 -:100B000011800002020020C28020000804000000C2 -:100B10008200008114040EA010000097E6206A8273 -:100B200068020D00A3A200080330A0080000100016 -:100B3000400200000000000200000000008000846D -:100B4000501010080B01CB0401801C20000691817D -:100B5000048000147E0C02C0088830001600C40017 -:100B60000201B80024204000A0A00004034031008E -:100B70000846F18D20C06D05A0CC000000BC0141ED -:100B8000000000000000000000000000000200085B -:100B9000000000000000004C188000211BC00380F2 -:100BA0000000000808A00000100800C0660CD04239 -:100BB00020008488004401000120020280101810E7 -:100BC0000008800071E40000091400C0000100006A -:100BD0000200010400000244000000504000000038 -:100BE00004682010018005000000000001040400DA -:100BF000000000000000000000C04000001018804D -:100C0000005000033466080334020801C40042A106 -:100C10002C000B5D53504C41DC00000781216540E6 -:100C20000101015185DC01A000465820100102603D -:100C3000E05040D900800970210900200807048293 -:100C400040D05444400000444046804180020900A6 -:100C50000008088000700100083000019081042025 -:100C60002810080100100B805806090200004000FF -:100C700000310105308020C205001220008104747B -:100C800000454C01010828090500804004150400B6 -:100C9000024420D990C0010AB0010B102CAC2C00EA -:100CA0000000060001180403601000080260000044 -:100CB0000B081000400000000002C138010300B220 -:100CC0001080000000040000000200F8801C02C137 -:100CD0000800000001040000000000000000000007 -:100CE00008010003A3981CBD00040E00230210009D -:100CF0008002100200000000040000008100000CCF -:100D000040000000000C104340184600000008207E -:100D1000C01000400000000480100094400000005B -:100D20004108001000C80C00000000000020000076 -:100D30000000000032000801C00000004042000036 -:100D40000403080101240000080000140000100042 -:100D5000050020000014022800000000002200000E -:100D60000C901808020A00080004420E040000005B -:100D70000000000000280800000000400000000003 -:100D80000000000040000000156604C00C00018057 -:100D900014010120008040405000000100010000CB -:100DA00000810000000000000400000000000002BC -:100DB000000000000002C21050040020040C0000DB -:100DC000020008200081200C4001100800000000F3 -:100DD00010880001811011080010000C6A40923246 -:100DE000048051F8040B02A0104068408A36B28F8C -:100DF000B400003422000000011D404038021014ED -:100E00002C005400C09000140260880080082084E8 -:100E10001000110564006200100800050040104039 -:100E2000C4101000000010400080000000580000B6 -:100E300000100000000000000002EE24000100800D -:100E40000D0000204400113E6006AA528080000080 -:100E5000000000000000000000000000020008C0C8 -:100E60000000200000010080040220140000108017 -:100E70002000000800800000000000002800400161 -:100E800000000020200001400244412020200B00EF -:100E90006000A1001020010035600040E0800000EB -:100EA00088181008AA83A00025FF3E1805DD500011 -:100EB000081400052A00004010000802000000107D -:100EC000000800044000004801220000510000A476 -:100ED000487130119C0000004400001100C00080E7 -:100EE00000080200900808000008400120000040AF -:100EF000280009000001C0008800440090442080C0 -:100F00000024401001000080800A08000000014019 -:100F100010010000000010000000000000100000A0 -:100F2000198000000008402800084011004400001B -:100F30000000200408000100101102C0410001005F -:100F40000000000022400140002C00000C04400082 -:100F500001382020D10034400001A8E00001030D39 -:100F600002378002A00004008102040090000C00FF -:100F7000037A0E0A2008441C443C000425501270D9 -:100F8000005C000000000000D401440100031031A7 -:100F90000C308C3111010080100000001008048218 -:100FA000400001008048240000100004800002007E -:100FB00000000000020000010000040000400000EA -:100FC0000020000001F150008015000206401002D0 -:100FD0000070470002000000028010001830063C3C -:100FE000400208020007C44540100A88028004003D -:100FF00000448000000000021A00081000000000F9 -:10100000010000002000000080000000000000003F -:101010000E8000CC0807C0306407F0170002C04003 -:101020004180000E30400C06100000E80000000077 -:10103000000141F000000400070000401C00820095 -:10104000000FCD00003C18000180020C010100429D -:101050000820840841001080202104080A31D002B1 -:101060001801800CC04801912080C3042000C409ED -:1010700090000006601819890060006404CC00002C -:10108000863000181800242141000A00800010104A -:1010900004240C8420C9904C9924C9824C91326458 -:1010A00064C8264C8264C13210990804930213204C -:1010B000C84C4C9904C9826420C990C9210C990973 -:1010C00024909324084904C84993202130132126F1 -:1010D0004C8264C3264C326413264932619324083F -:1010E00042132646426264C8264C0C9904C9924CAD -:1010F0009864C9264C8264C3264C9084193240847B -:10110000209084909908424321324C8464C9264C33 -:101110008264C0884C00D21D248590908400C10D4B -:101120001882409C232588AA880045C84A104E1C76 -:101130000022020A405160A488CA2E092A411100E7 -:1011400003444C2010174C0070001082000200066F -:10115000F0800184000000000FFF03FFFC18BF00B7 -:10116000000000000000400000000000000000003F +:1009C0000000000000000000000000000000000027 +:1009D0000000000000000000000000000000000017 +:1009E0000000000000000000000000000000000007 +:1009F00000000000000000000000000000000000F7 +:100A000000000000000000000000000000000000E6 +:100A100000000000000000000000000000000000D6 +:100A200000000000000000000000000000000000C6 +:100A300000000000000000000000000000000000B6 +:100A400000000000000000000000000000000000A6 +:100A50000000000000000000000000000000000096 +:100A60000000000000000000000000000000000086 +:100A70000000000000000000000000000000000076 +:100A80000000000000000000000000000000000066 +:100A90000000000000000000000000000000000056 +:100AA0000000000000000000000000000000000046 +:100AB0000000000000000000000000000000000036 +:100AC0000000000000000000000000000000000026 +:100AD0000000000000000000000000000000000016 +:100AE0000000000000000000000000000000000006 +:100AF00000000000000000000000000000000000F6 +:100B000000000000000000000000000000000000E5 +:100B100000000000000000000000000000000000D5 +:100B200000000000000000000000000000000000C5 +:100B300000000000000000000000000000000000B5 +:100B400000000000000000000000000000000000A5 +:100B50000000000000000000000000000000000095 +:100B60000000000000000000000000000000000085 +:100B70000000000000000000000000000000000075 +:100B80000000000000000000000000000000000065 +:100B90000000000000000000000000000000000055 +:100BA0000000000000000000000000000000000045 +:100BB0000000000000000000000000000000000035 +:100BC0000000000000000000000000000000000025 +:100BD0000000000000000000000000000000000015 +:100BE0000000000000000000000000000000000005 +:100BF00000000000000000000000000000000000F5 +:100C000000000000000000000000000000000000E4 +:100C100000000000000000000000000000000000D4 +:100C200000000000000000000000000000000000C4 +:100C300000000000000000000000000000000000B4 +:100C400000000000000000000000000000000000A4 +:100C50000000000000000000000000000000000094 +:100C60000000000000000000000000000000000084 +:100C70000000000000000000000000000000000074 +:100C80000000000000000000000000000000000064 +:100C90000000000000000000000000000000000054 +:100CA0000000000000000000000000000000000044 +:100CB0000000000000000000000000000000000034 +:100CC0000000000000000000000000000000000024 +:100CD0000000000000000000000000000000000014 +:100CE0000000000000000000000000000000000004 +:100CF00000000000000000000000000000000000F4 +:100D000000000000000000000000000000000000E3 +:100D100000000000000000000000000000000000D3 +:100D200000000000000000000000000000000000C3 +:100D300000000000000000000000000000000000B3 +:100D400000000000000000000000000000000000A3 +:100D50000000000000000000000000000000000093 +:100D60000000000000000000000000000000000083 +:100D70000000000000000000000000000000000073 +:100D80000000000000000000000000000000000063 +:100D90000000000000000000000000000000000053 +:100DA0000000000000000000000000000000000043 +:100DB0000000000000000000000000000000000033 +:100DC0000000000000000000000000000000000023 +:100DD0000000000000000000000000000000000013 +:100DE0000000000000000000000000000000000003 +:100DF00000000000000000000000000000000000F3 +:100E000000000000000000000000000000000000E2 +:100E100000000000000000000000000000000000D2 +:100E200000000000000000000000000000000000C2 +:100E300000000000000000000000000000000000B2 +:100E400000000000000000000000000000000000A2 +:100E50000000000000000000000000000000000092 +:100E60000000000000000000000000000000000082 +:100E70000000000000000000000000000000000072 +:100E80000000000000000000000000000000000062 +:100E90000000000000000000000000000000000052 +:100EA0000000000000000000000000000000000042 +:100EB0000000000000000000000000000000000032 +:100EC0000000000000000000000000000000000022 +:100ED0000000000000000000000000000000000012 +:100EE0000000000000000000000000000000000002 +:100EF00000000000000000000000000000000000F2 +:100F000000000000000000000000000000000000E1 +:100F100000000000000000000000000000000000D1 +:100F200000000000000000000000000000000000C1 +:100F300000000000000000000000000000000000B1 +:100F400000000000000000000000000000000000A1 +:100F50000000000000000000000000000000000091 +:100F60000000000000000000000000000000000081 +:100F70000000000000000000000000000000000071 +:100F80000000000000000000000000000000000061 +:100F90000000000000000000000000000000000051 +:100FA0000000000000000000000000000000000041 +:100FB0000000000000000000000000000000000031 +:100FC0000000000000000000000000000000000021 +:100FD0000000000000000000000000000000000011 +:100FE0000000000000000000000000000000000001 +:100FF00000000000000000000000000000000000F1 +:1010000000000000000000000000000000000000E0 +:1010100000000000000000000000000000000000D0 +:1010200000000000000000000000000000000000C0 +:1010300000000000000000000000000000000000B0 +:1010400000000000000000000000000000000000A0 +:101050000000000000000000000000000000000090 +:101060000000000000000000000000000000000080 +:101070000000000000000000000000000000000070 +:101080000000000000000000000000000000000060 +:101090000000000000000000000000000000000050 +:1010A0000000000000000000000000000000000040 +:1010B0000000000000000000000000000000000030 +:1010C0000000000000000000000000000000000020 +:1010D0000000000000000000000000000000000010 +:1010E0000000000000000000000000000000000000 +:1010F00000000000000000000000000000000000F0 +:1011000000000000000000000000000000000000DF +:1011100000000000000000000000000000000000CF +:1011200000000000000000000000000000000000BF +:1011300000000000000000000000000000000000AF +:10114000000000000000000000000000000000009F +:10115000000000000000000000000000000000008F +:10116000000000000000000000000000000000007F :10117000000000000000000000000000000000006F :10118000000000000000000000000000000000005F :10119000000000000000000000000000000000004F :1011A000000000000000000000000000000000003F -:1011B000000000000002000000000000000000002D -:1011C0000800000000000000000000000000000017 +:1011B000000000000000000000000000000000002F +:1011C000000000000000000000000000000000001F :1011D000000000000000000000000000000000000F :1011E00000000000000000000000000000000000FF -:1011F00000000000000000000000000000020000ED -:1012000000000000000000000800000000000000D6 +:1011F00000000000000000000000000000000000EF +:1012000000000000000000000000000000000000DE :1012100000000000000000000000000000000000CE :1012200000000000000000000000000000000000BE :1012300000000000000000000000000000000000AE @@ -262646,149 +262646,149 @@ :101B40000000000000000000000000000000000095 :101B50000000000000000000000000000000000085 :101B60000000000000000000000000000000000075 -:101B7000000000000000000000044002000000100F -:101B80000004004144545115000000000000000012 +:101B70000000000000000000000000000000000065 +:101B80000000000000000000000000000000000055 :101B90000000000000000000000000000000000045 :101BA0000000000000000000000000000000000035 -:101BB000000000000000000000000000000009001C -:101BC0000004000000000000000000000000000011 +:101BB0000000000000000000000000000000000025 +:101BC0000000000000000000000000000000000015 :101BD0000000000000000000000000000000000005 :101BE00000000000000000000000000000000000F5 :101BF00000000000000000000000000000000000E5 -:101C00000000000000002B66022BA1430002003000 -:101C1000488037805948A8140004002080004042C2 -:101C20000010140292012408280000C484218208B4 -:101C300020040000AA0008214010040520A008A0EC -:101C4000203A7C2DD2090B0204221630B3202C4CF2 -:101C50004013104C6027182460C1281288D0440A11 -:101C6000056C4D0480168CE824009446F412D63896 -:101C7000309118C201252080480E2808818804A3CD -:101C80009A88E0BA1DDF0BE6200AF84100000080C8 -:101C9000120102440493249A48C00054A8E00A099F -:101CA0000005429142A405001508028A9008040428 -:101CB000591482409101508050A90080411990EB45 -:101CC000FCBFD130138010424400165804048988A8 -:101CD000828008CA84110202420044103B6229102B -:101CE00000A08252402822392041400084A0884828 -:101CF0000803C060920400F0E718094BBC4230387A -:101D000096080A0300C05003600030020002000180 -:101D10001100800801840040A00080088102118029 -:101D20008810811011021220013022CA20818B39C3 -:101D30000007BBF2AA0CC4C8075FC80530A518008D -:101D40009E1A004022000B44814022000248E050CD -:101D5000002044080A004420C0089020010A07001F -:101D6000C1416C07912078069021955483132C1261 -:101D70008874C112444FA53B31C98E300DB80A0892 -:101D8000152800217215A471020A2645B472941414 -:101D900054DD108E42861094B87B4B0BD680FEB17A -:101DA0005ED8328728D3CDA0F069A0E0823744C343 -:101DB000C6801C08158405C00A918094DCC80C3AC2 -:101DC000A080AE10142C2E200072CFF082C00C2800 -:101DD000103C0042A533DA94328822C3890F211ABD -:101DE0000CD42029948601530044025A200882080A -:101DF000A25F0000282044493001500093012400D4 -:101E00008E24002204442804208210120A804008F4 -:101E1000140100011013E0004B0053C11011070022 -:101E2000C0102CFA860180088C243828044A0EA39E -:101E3000D088126E0C074902114208138232380111 -:101E40008012B000B2BA23D50C20800890411C0843 -:101E500012411C0043C03E2130204064C05068AF96 -:101E600044240940C6138464002006AC0F6AA01BFA -:101E7000507A0028D94940839020874205C0002825 -:101E80005305B0494E0001003000080C0D5800A069 -:101E9000400210901497C03802081E1019840910CF -:101EA000268C08040140A054712D1C42D032AC2471 -:101EB000E883233882114148A82072041D43DF4182 -:101EC0008E4480430123C5A5A0501096FC3563497C -:101ED000E20300C08A39030B02344068D046450D46 -:101EE00051482A415200807B155BC03D6380B05849 -:101EF000BB0C14067E02D824210F39870A64019492 -:101F00008C28943A90000B81AD6875C909BF8099FF -:101F1000602F509E68002CC0FF410044644B15099F -:101F20000719411A242C1B0144CAB00298008810DA -:101F300021C000A1600150580032B404A0320080DA -:101F400008DC08D00014101F58DD113E5D432A73D1 -:101F500041486D000012080120F448CAD918CBC4CA -:101F600070933F5C857F32F0446032503CAA840419 -:101F700002CAF88381706B0B14AC48271110F42847 -:101F80003615900E4AB1EB1CE680040CC10502D157 -:101F90000041750A028E5DC3B58C61B600334D8277 -:101FA00042CBB8731B0301C49FC3BA982DF70CCC66 -:101FB00082FC214580F6DE158A4C15A081002AB0EE -:101FC000060589BC40DEE067253AF84E21F3A80CEF -:101FD0002DB132CE0301011EA0E200057488F38307 -:101FE000CB60C4DB2D114CBD02C4B05A8A0AC04874 -:101FF000630032B0D7002D6085A420BE1C84180574 -:1020000008401C4258C83C9F10900FAE11A018E920 -:102010001336280392B23110C0AD39D20F4C51A4FF -:102020008C042524858367E107E40F5213FAC2AEBE -:10203000D201B851FE0E830650200F44400818BB51 -:10204000C08312C480150000824888A25844421000 -:1020500010044DD800421062292240CC12A0D06852 -:10206000C2B4333700ECB0A010DCC312730B50E1E4 -:102070006534AB520A818A2C629CCCB4910D0684E3 -:102080008692EF6862812A888E5E43DE98A0BA3914 -:102090001C07801102800A0A00300C5001544000D5 -:1020A0000F14C9000480383042010908CA48009260 -:1020B000100A982DD44899F04E04F3E70D76C6AC7B -:1020C0000105140A4B2EAA490A21A0E8146A08093E -:1020D0008A04C2B04C809301B300E8C2414C08406E -:1020E000088088C1A00640186008004020800930A0 -:1020F00020BB384201C0001D0431F704298A802129 -:10210000B600420B04C20294530BC072712061816D -:102110006C206BA4B8F12AC54041F1110CE31626DE -:10212000EDCCB261A31002002B1004F81134DC6175 -:10213000960D0203A8B0738CA7031FEF8100924590 -:1021400068A51F20E04C13004884CA9908954933BC -:10215000C30548AF3825DC076E701CAC9A9F058517 -:10216000C001422020C5CE24838D008166701D569B -:10217000307CC26441D32C0AC9165ACE104005489F -:1021800020441C168ECB22CB38CB3B02A2013260FE -:102190000180C040001C8CA1239E0C510C20498E54 -:1021A0000622C400009820C2098002010008BF076F -:1021B000F14FC602850841481583840120973853A2 -:1021C000BA01CE0502605C400EA2076F8E85601BCF -:1021D000243141084888CE0260F8BE8C14E2853A6A -:1021E00083E388836133A080542036707A8A054265 -:1021F000C16F13A0A07ADA3847CB1E701DB0E1E999 -:102200001602056201673CEF3E04EDC003E1879CC6 -:10221000B5470F58C43D40B20081DB103EC4404377 -:10222000A140C00106B20C4040F0E4748037D147B1 -:1022300079714F082C6C0806810020AA04155A00F9 -:10224000C00882037950DE542E5A8D6482C56C6AB0 -:10225000261D9C02C18002C4041200AA04010120B0 -:1022600054000000CA048061052001800200028140 -:1022700040800002A908A2020002020865F113C30F -:10228000400052207814052293002D830A40004913 -:10229000300604896208481C23023803807047080E -:1022A000C10E2204402080001004942280800A0184 -:1022B000008CAAA111200005524040255214B544BB -:1022C0000250901402AA242005294014B4BAE21F37 -:1022D000380CC5736F5C25AF0A700778636AC41742 -:1022E0006E337ACF07E01DB4B9761B37063D631F06 -:1022F000A0ECDC2EE1CEA9836A6497EC0A72C435A7 -:102300006262D477A3262E4EFCF2C19894CC26723A -:10231000C6CDA2131899881BB68EBD71BB34D8B92F -:10232000159B4FDEB0C5F8D4C205DBCB5431B77076 -:10233000635637AC4976F3362CB57E1B760CB56107 -:10234000FBF4FD4C0E5D89C403E184FD4E3A230984 -:10235000AA93F624BD7E3BF78EB57088E48D2423C6 -:102360005A8EA43100541592060D0341417260014A -:10237000C4101642A280CB040E6415478200424965 -:10238000142D84075C40000001000D1000090FFEB1 -:10239000300000104011110B410019F00000000046 -:1023A0000FFF03FFFC420F00000000600000300040 +:101C000000000000000000000000000000000000D4 +:101C100000000000000000000000000000000000C4 +:101C200000000000000000000000000000000000B4 +:101C300000000000000000000000000000000000A4 +:101C40000000000000000000000000000000000094 +:101C50000000000000000000000000000000000084 +:101C60000000000000000000000000000000000074 +:101C70000000000000000000000000000000000064 +:101C80000000000000000000000000000000000054 +:101C90000000000000000000000000000000000044 +:101CA0000000000000000000000000000000000034 +:101CB0000000000000000000000000000000000024 +:101CC0000000000000000000000000000000000014 +:101CD0000000000000000000000000000000000004 +:101CE00000000000000000000000000000000000F4 +:101CF00000000000000000000000000000000000E4 +:101D000000000000000000000000000000000000D3 +:101D100000000000000000000000000000000000C3 +:101D200000000000000000000000000000000000B3 +:101D300000000000000000000000000000000000A3 +:101D40000000000000000000000000000000000093 +:101D50000000000000000000000000000000000083 +:101D60000000000000000000000000000000000073 +:101D70000000000000000000000000000000000063 +:101D80000000000000000000000000000000000053 +:101D90000000000000000000000000000000000043 +:101DA0000000000000000000000000000000000033 +:101DB0000000000000000000000000000000000023 +:101DC0000000000000000000000000000000000013 +:101DD0000000000000000000000000000000000003 +:101DE00000000000000000000000000000000000F3 +:101DF00000000000000000000000000000000000E3 +:101E000000000000000000000000000000000000D2 +:101E100000000000000000000000000000000000C2 +:101E200000000000000000000000000000000000B2 +:101E300000000000000000000000000000000000A2 +:101E40000000000000000000000000000000000092 +:101E50000000000000000000000000000000000082 +:101E60000000000000000000000000000000000072 +:101E70000000000000000000000000000000000062 +:101E80000000000000000000000000000000000052 +:101E90000000000000000000000000000000000042 +:101EA0000000000000000000000000000000000032 +:101EB0000000000000000000000000000000000022 +:101EC0000000000000000000000000000000000012 +:101ED0000000000000000000000000000000000002 +:101EE00000000000000000000000000000000000F2 +:101EF00000000000000000000000000000000000E2 +:101F000000000000000000000000000000000000D1 +:101F100000000000000000000000000000000000C1 +:101F200000000000000000000000000000000000B1 +:101F300000000000000000000000000000000000A1 +:101F40000000000000000000000000000000000091 +:101F50000000000000000000000000000000000081 +:101F60000000000000000000000000000000000071 +:101F70000000000000000000000000000000000061 +:101F80000000000000000000000000000000000051 +:101F90000000000000000000000000000000000041 +:101FA0000000000000000000000000000000000031 +:101FB0000000000000000000000000000000000021 +:101FC0000000000000000000000000000000000011 +:101FD0000000000000000000000000000000000001 +:101FE00000000000000000000000000000000000F1 +:101FF00000000000000000000000000000000000E1 +:1020000000000000000000000000000000000000D0 +:1020100000000000000000000000000000000000C0 +:1020200000000000000000000000000000000000B0 +:1020300000000000000000000000000000000000A0 +:102040000000000000000000000000000000000090 +:102050000000000000000000000000000000000080 +:102060000000000000000000000000000000000070 +:102070000000000000000000000000000000000060 +:102080000000000000000000000000000000000050 +:102090000000000000000000000000000000000040 +:1020A0000000000000000000000000000000000030 +:1020B0000000000000000000000000000000000020 +:1020C0000000000000000000000000000000000010 +:1020D0000000000000000000000000000000000000 +:1020E00000000000000000000000000000000000F0 +:1020F00000000000000000000000000000000000E0 +:1021000000000000000000000000000000000000CF +:1021100000000000000000000000000000000000BF +:1021200000000000000000000000000000000000AF +:10213000000000000000000000000000000000009F +:10214000000000000000000000000000000000008F +:10215000000000000000000000000000000000007F +:10216000000000000000000000000000000000006F +:10217000000000000000000000000000000000005F +:10218000000000000000000000000000000000004F +:10219000000000000000000000000000000000003F +:1021A000000000000000000000000000000000002F +:1021B000000000000000000000000000000000001F +:1021C000000000000000000000000000000000000F +:1021D00000000000000000000000000000000000FF +:1021E00000000000000000000000000000000000EF +:1021F00000000000000000000000000000000000DF +:1022000000000000000000000000000000000000CE +:1022100000000000000000000000000000000000BE +:1022200000000000000000000000000000000000AE +:10223000000000000000000000000000000000009E +:10224000000000000000000000000000000000008E +:10225000000000000000000000000000000000007E +:10226000000000000000000000000000000000006E +:10227000000000000000000000000000000000005E +:10228000000000000000000000000000000000004E +:10229000000000000000000000000000000000003E +:1022A000000000000000000000000000000000002E +:1022B000000000000000000000000000000000001E +:1022C000000000000000000000000000000000000E +:1022D00000000000000000000000000000000000FE +:1022E00000000000000000000000000000000000EE +:1022F00000000000000000000000000000000000DE +:1023000000000000000000000000000000000000CD +:1023100000000000000000000000000000000000BD +:1023200000000000000000000000000000000000AD +:10233000000000000000000000000000000000009D +:10234000000000000000000000000000000000008D +:10235000000000000000000000000000000000007D +:10236000000000000000000000000000000000006D +:10237000000000000000000000000000000000005D +:10238000000000000000000000000000000000004D +:10239000000000000000000000000000000000003D +:1023A000000000000000000000000000000000002D :1023B000000000000000000000000000000000001D :1023C000000000000000000000000000000000000D -:1023D000000000000000000000CC0033330CCCC330 -:1023E0003330CCCC33330CCCC33330CCCC33330C84 -:1023F000CCC33330CCCC33330CCCC3333002CC0021 -:10240000000000000000000000400000000000008C +:1023D00000000000000000000000000000000000FD +:1023E00000000000000000000000000000000000ED +:1023F00000000000000000000000000000000000DD +:1024000000000000000000000000000000000000CC :1024100000000000000000000000000000000000BC -:1024200000000000000000000000000000000CCCD4 -:10243000C33330CCCC33330CCCC33330CCCC33337C -:102440000CCCC3333002CC000000000000000000C0 -:10245000004000000000000000000000000000003C +:1024200000000000000000000000000000000000AC +:10243000000000000000000000000000000000009C +:10244000000000000000000000000000000000008C +:10245000000000000000000000000000000000007C :10246000000000000000000000000000000000006C :10247000000000000000000000000000000000005C :10248000000000000000000000000000000000004C @@ -262938,148 +262938,148 @@ :102D80000000000000000000000000000000000043 :102D90000000000000000000000000000000000033 :102DA0000000000000000000000000000000000023 -:102DB000000000000000000000000000000004719E -:102DC000014440470411111554455551555455556A -:102DD000044441111044441111044441111044446D -:102DE00011110444411110444411110444411110C3 -:102DF000444411110444411110444411110444414C -:102E000011104444111109044114104444111104D7 -:102E1000444111104444111104444111104444111F -:102E2000110444411110444411110444411110444F -:102E3000441111044441111044441111044441113E -:102E400010444411110444411110444411112265ED -:102E50004A89206C98B6070D6F81ADC1C968B284EC -:102E6000008D88838000F8CB000084488E610428A0 -:102E7000010024C48D31803A2007A220FF0A20E3FC -:102E8000E01C048704B045D921112406900992CE94 -:102E9000142325801A04064B0D12C34B0430C106BF -:102EA0007801FA03F80CFFA5140643557280681ADE -:102EB000AB1403488D524F64212C364288FA72A914 -:102EC0004CAFAA3EABCA5AB260BC3F1C20E4C49BC4 -:102ED000F012A400400000095212A6C43EFE37F5CD -:102EE00043CA70769C16CA0D40839AD143B410B67B -:102EF0000E6A028ED00498319B16BA09D390E6EC84 -:102F000050ED00498D21B3EFE8FEB63C1F8098F1EB -:102F10006E905FE90C0CC42DD0DFE063A70B7D0938 -:102F20004A50D1485D462D248586B35AE861AE0DDE -:102F300074C99322593018D238EB4A6CC25458EDF8 -:102F4000FE32FDC4D4B29D98E73C0A454FBF501EE7 -:102F50001C003000000A0002A2FC52D531458B4013 -:102F6000A0568868AD02D1468AD0AD14D15A1DA2B0 -:102F7000851FF0EAF0DFBD2B8848C50016F48A1CD7 -:102F80001F7EC76CB12030DF6436FAC1D45069B8F7 -:102F9000D7AE3E4646F460DD2CFA311AADCD556110 -:102FA000BFA0D5A535AD8187515290FFF834A6C991 -:102FB000D5E3C0D8D4FF2AA78331232610BFF73F1B -:102FC000560AB1F3A774E64F36CF4F79F011F43BB0 -:102FD000C232A84D9F719E1478043B7844AF61F7CC -:102FE000346D7314BDC7FEE29198BEE63ED7CD9C0A -:102FF000C3AFEC5EBE36FCCB67B30E3C512436CD7E -:103000008A95E3FEFCECFE3FDFCF8FD2BDFCB928F2 -:103010000013400000000000000000000002E7383C -:1030200076B83ED9849CF34754EC5B36FF8EF7F3B9 -:103030007F788AAD1FFA4B0F713AF8DBDB2DDA8E01 -:10304000AFF3AF585C8E13448B6FA0BF2C3F0D3F86 -:103050007A4539A3FFE4315D3BFF4D61E3777CFFA7 -:103060007F1D774F4C51EEFC7F581B59CDFB73EF02 -:10307000E4EDFB17FD86FD90D2783FED0FFFC4C253 -:1030800091CE94DFAA36D7CF7D73DF7432F62CBD94 -:103090008ABB73FB74FF6B3B76C76BF32BDC77ABA0 -:1030A0003993CDF6E3E3F077773F66CDFAF3DFF0BF -:1030B000935A3DF08F6BE3F9A83FFF1A2A4F6FF147 -:1030C0007128B76B37BFCEB5E14F7C7D723FFF4EA5 -:1030D000BFF101DC616D3DBD87BDE2FA5CDEBE3F44 -:1030E000BDC77BE3B7FCEF772D5BC7FDB3BFB4ED86 -:1030F000ED177B4FE7A12EFCE56F0FFE4C3B22D96D -:10310000D0FDCB2FF78AF393BDFC7D7B2F6F4BFA5D -:10311000F1F7FCF6031AC341FFE1BFD4DEF60F1B43 -:10312000CB96D16BF0FCD637658F5EE37F9C641342 -:103130002510020991144CA6452245065A40D8B4E0 -:10314000C9022CAC859DF177ACFF9232FDCDFFF129 -:10315000CF7CFB3B1E7B8F9473FF54FFFD37FFC872 -:10316000FFF17F58CDDF2CCF0F7DE3BF30FD370E51 -:103170003EC961F102983E622AA8C2C8E39A0C7562 -:103180001B0EF68B2BD0A30885D531918A16C15919 -:10319000D44542110C8D1693D9B4ACC535AF4B5EF6 -:1031A000D1A63C100E2120089B604020B080280052 -:1031B00003DE03F5DCD73F28D7489F208B4C6E25D4 -:1031C0003E2A4099A2FB48D941122282E0A357B07F -:1031D000281239DB8BAE2188A8B6C6056D40C29196 -:1031E000DCD46EFC1B710B6F00A3B039F82FEC42DE -:1031F0000A30042080081DF34AFFF3FD34D1672C08 -:10320000958F02D0D7BCB5661BCEC17F9311281213 -:10321000861C354EF073EB809ACE2FB4CDCFE0B440 -:10322000FC95C535750FA3D23E4C2BF63B5242FFA1 -:103230004363DC7EFE3EEE48CFD1DE74AAE12BD89C -:10324000C776E127188E501942C0B8E1B54C77DF38 -:103250003A920CF7F3977CCDD63E2E4909F13FF018 -:10326000F7EA0EF98570733B583F2D1CE74DF3319B -:10327000AF9852F717FB8BEF5167F857DA3F7ACFC9 -:10328000F990CCFCD9353CD5027D9010C0D15000CE -:10329000F34E888357245902048743FE804798736E -:1032A00009227DCCFCA17E6C42973FF34EE790BA99 -:1032B000D4CD431E7FC65EE212EC3EBC1DC8820523 -:1032C000A27FDC6BD729D787BFF3769C908025E659 -:1032D000415CF3D580A9CA3F838A6FF15ED09239F1 -:1032E0002630C2D87195B43DEF1FEAC99AB3383C75 -:1032F000364D2D4EC34573119810C61FF5451F80DE -:103300001408391A13A54B4E13BADC62BB3DE6070D -:103310005DE0FFE8FA293FF2053F226DA0F34A0E77 -:10332000FB4FE0F1FCA4B5D833F7885411A34C034C -:10333000FA12FC439EA29224734002858B0CB2AB1E -:10334000B8DD1F0176C276535BDC9A3F23264F53CC -:103350008289605DC62DA3CA6FB2922C53530F337E -:10336000CC61F1B1B4C2053E1BCFAFE0ABC0EAF512 -:103370002BFF0DFA53F7C079F529DB8058E3BFBC6A -:10338000ABCF0BFF8DC4F26AB8ECD53CE304BA12A4 -:10339000D8A45ED22926CE36D304882EA1348D003F -:1033A000B6511CDC8DA30F0248E3821A1035CE0102 -:1033B000198B8C21B488BCAA3EF60B1763ED34B987 -:1033C000D82ED74EFCB0450CDFD70251414DB14D40 -:1033D000A44DA415514AD36119E4DC0F3D11CF90DF -:1033E000A3FE4C7BC431FF4B7E23F6447FCB0CDC29 -:1033F0008FEB20B508673F27A1CE86316CCC03D573 -:1034000002280E1361F39CE8C71C8F8CF743D1C4CC -:103410009F7D3ED50527B0EBF46B33226D47F161FC -:103420002C08A27F3F4346B8A2A7FC99F73E8B45E4 -:10343000B3319FD0E8B61B33C9FD128B64ABBF23F9 -:10344000CF0C8AB2EF98E75A346D0D5C52B7C8B50D -:103450005C3B668338603AB42F601A9DCB5A71D7B3 -:1034600014979F333AC4CF437FEC6F8527404CD9E4 -:1034700050ECEC779F1BB7C97B817E3CB26F2D204F -:103480008AA2A26668377B041BCBEF6240A8902B10 -:103490002DFDC8116319FCC5BA353C02ECA172E4DC -:1034A000051300FF0E0141207C07F13C7A0686716E -:1034B0004520C3FC3558090483EC804ABF226A4A80 -:1034C0001C11A7A0C70035AA4054C2295C34102E95 -:1034D000DB829CE0C194900C194045E8005578517E -:1034E0006A16A2CA2D42D4580AA822444223802038 -:1034F000C863962AE6082AC11430FBFD3D284825FA -:10350000F2504CBFFF3F9FCF07F2943412FF2827A1 -:103510000FBFC03F9C1C9C24CFC37E32E4A435ABBC -:103520000020000000000000000000000001020078 -:1035300004082040820401021081080010000000ED -:103540000000000004080204200810082100810186 -:1035500004101020084104084810202100102120E8 -:103560004082040020400000000000000000000035 +:102DB0000000000000000000000000000000000013 +:102DC0000000000000000000000000000000000003 +:102DD00000000000000000000000000000000000F3 +:102DE00000000000000000000000000000000000E3 +:102DF00000000000000000000000000000000000D3 +:102E000000000000000000000000000000000000C2 +:102E100000000000000000000000000000000000B2 +:102E200000000000000000000000000000000000A2 +:102E30000000000000000000000000000000000092 +:102E40000000000000000000000000000000000082 +:102E50000000000000000000000000000000000072 +:102E60000000000000000000000000000000000062 +:102E70000000000000000000000000000000000052 +:102E80000000000000000000000000000000000042 +:102E90000000000000000000000000000000000032 +:102EA0000000000000000000000000000000000022 +:102EB0000000000000000000000000000000000012 +:102EC0000000000000000000000000000000000002 +:102ED00000000000000000000000000000000000F2 +:102EE00000000000000000000000000000000000E2 +:102EF00000000000000000000000000000000000D2 +:102F000000000000000000000000000000000000C1 +:102F100000000000000000000000000000000000B1 +:102F200000000000000000000000000000000000A1 +:102F30000000000000000000000000000000000091 +:102F40000000000000000000000000000000000081 +:102F50000000000000000000000000000000000071 +:102F60000000000000000000000000000000000061 +:102F70000000000000000000000000000000000051 +:102F80000000000000000000000000000000000041 +:102F90000000000000000000000000000000000031 +:102FA0000000000000000000000000000000000021 +:102FB0000000000000000000000000000000000011 +:102FC0000000000000000000000000000000000001 +:102FD00000000000000000000000000000000000F1 +:102FE00000000000000000000000000000000000E1 +:102FF00000000000000000000000000000000000D1 +:1030000000000000000000000000000000000000C0 +:1030100000000000000000000000000000000000B0 +:1030200000000000000000000000000000000000A0 +:103030000000000000000000000000000000000090 +:103040000000000000000000000000000000000080 +:103050000000000000000000000000000000000070 +:103060000000000000000000000000000000000060 +:103070000000000000000000000000000000000050 +:103080000000000000000000000000000000000040 +:103090000000000000000000000000000000000030 +:1030A0000000000000000000000000000000000020 +:1030B0000000000000000000000000000000000010 +:1030C0000000000000000000000000000000000000 +:1030D00000000000000000000000000000000000F0 +:1030E00000000000000000000000000000000000E0 +:1030F00000000000000000000000000000000000D0 +:1031000000000000000000000000000000000000BF +:1031100000000000000000000000000000000000AF +:10312000000000000000000000000000000000009F +:10313000000000000000000000000000000000008F +:10314000000000000000000000000000000000007F +:10315000000000000000000000000000000000006F +:10316000000000000000000000000000000000005F +:10317000000000000000000000000000000000004F +:10318000000000000000000000000000000000003F +:10319000000000000000000000000000000000002F +:1031A000000000000000000000000000000000001F +:1031B000000000000000000000000000000000000F +:1031C00000000000000000000000000000000000FF +:1031D00000000000000000000000000000000000EF +:1031E00000000000000000000000000000000000DF +:1031F00000000000000000000000000000000000CF +:1032000000000000000000000000000000000000BE +:1032100000000000000000000000000000000000AE +:10322000000000000000000000000000000000009E +:10323000000000000000000000000000000000008E +:10324000000000000000000000000000000000007E +:10325000000000000000000000000000000000006E +:10326000000000000000000000000000000000005E +:10327000000000000000000000000000000000004E +:10328000000000000000000000000000000000003E +:10329000000000000000000000000000000000002E +:1032A000000000000000000000000000000000001E +:1032B000000000000000000000000000000000000E +:1032C00000000000000000000000000000000000FE +:1032D00000000000000000000000000000000000EE +:1032E00000000000000000000000000000000000DE +:1032F00000000000000000000000000000000000CE +:1033000000000000000000000000000000000000BD +:1033100000000000000000000000000000000000AD +:10332000000000000000000000000000000000009D +:10333000000000000000000000000000000000008D +:10334000000000000000000000000000000000007D +:10335000000000000000000000000000000000006D +:10336000000000000000000000000000000000005D +:10337000000000000000000000000000000000004D +:10338000000000000000000000000000000000003D +:10339000000000000000000000000000000000002D +:1033A000000000000000000000000000000000001D +:1033B000000000000000000000000000000000000D +:1033C00000000000000000000000000000000000FD +:1033D00000000000000000000000000000000000ED +:1033E00000000000000000000000000000000000DD +:1033F00000000000000000000000000000000000CD +:1034000000000000000000000000000000000000BC +:1034100000000000000000000000000000000000AC +:10342000000000000000000000000000000000009C +:10343000000000000000000000000000000000008C +:10344000000000000000000000000000000000007C +:10345000000000000000000000000000000000006C +:10346000000000000000000000000000000000005C +:10347000000000000000000000000000000000004C +:10348000000000000000000000000000000000003C +:10349000000000000000000000000000000000002C +:1034A000000000000000000000000000000000001C +:1034B000000000000000000000000000000000000C +:1034C00000000000000000000000000000000000FC +:1034D00000000000000000000000000000000000EC +:1034E00000000000000000000000000000000000DC +:1034F00000000000000000000000000000000000CC +:1035000000000000000000000000000000000000BB +:1035100000000000000000000000000000000000AB +:10352000000000000000000000000000000000009B +:10353000000000000000000000000000000000008B +:10354000000000000000000000000000000000007B +:10355000000000000000000000000000000000006B +:10356000000000000000000000000000000000005B :10357000000000000000000000000000000000004B -:1035800000000000000000000000000001020084B4 -:10359000201084108108420021004084040820404B -:1035A0008204008840F7EF16FECDFF73C2FCF9DEFF -:1035B0001EDFC7FF93C1ECF30F37FFCFB710FB0C33 -:1035C000FF3F3E77C3FFF01FF8FBFA07FF43D0C36E -:1035D000F1000C0B00080FFF2040045040198C42F2 -:1035E0006C50026C0000000000000000004A9000D7 -:1035F0000402000000003000000000000000000095 +:10358000000000000000000000000000000000003B +:10359000000000000000000000000000000000002B +:1035A000000000000000000000000000000000001B +:1035B000000000000000000000000000000000000B +:1035C00000000000000000000000000000000000FB +:1035D00000000000000000000000000000000000EB +:1035E00000000000000000000000000000000000DB +:1035F00000000000000000000000000000000000CB :1036000000000000000000000000000000000000BA :1036100000000000000000000000000000000000AA :10362000000000000000000000000000000000009A :10363000000000000000000000000000000000008A -:103640000000000000020000000000000000000078 +:10364000000000000000000000000000000000007A :10365000000000000000000000000000000000006A :10366000000000000000000000000000000000005A :10367000000000000000000000000000000000004A -:103680000000000000000000000000000002000038 +:10368000000000000000000000000000000000003A :10369000000000000000000000000000000000002A :1036A000000000000000000000000000000000001A :1036B000000000000000000000000000000000000A @@ -263231,149 +263231,149 @@ :103FD00000000000000000000000000000000000E1 :103FE00000000000000000000000000000000000D1 :103FF00000000000000000000000000000000000C1 -:10400000000000000000045101444045041111115A -:1040100010444441111044440444411110444411DB -:10402000110444411110444411110444411110443D -:10403000441111044441111044441111044441112C -:104040001044441111044441111044441111090455 -:1040500041141044441111044441111044441111FD -:1040600004444111104444111104444111104444CA -:104070001111044441111044441111044441111020 -:1040800044441111044441111044441111044441A9 -:1040900011104444111100604E000180306320195A -:1040A000F88B188311F8A01800F186260000001B79 -:1040B000800618C318B030600C0B00F00045E260B9 -:1040C0002860180D00018980188067F830B8C0009A -:1040D0000046C06003018000C183003083002000DF -:1040E000400010006000182000C10010C0C0000097 -:1040F0000060400000060000000030000002D8C050 -:10410000C20100E101300000200000000180060033 -:1041100000D026630F1800026002A040400000801B -:10412000C200000430C10608075060060001B00C50 -:1041300002003EC20030400D00F80800C020346884 -:104140006036184080100F84800C02034786030CF1 -:1041500010C100000C001802678020010000C18C13 -:10416000F1998000A419080318C0031800000C007E -:10417000000003187800000C3C0060C0C60C00066C -:10418000000E0000001C00120019E18180003300C5 -:10419000800320000001D00210000000000E00018A -:1041A0006000842F000800C000008008010010009B -:1041B00080100100100203A00000300E30C0002764 -:1041C00080008463ED249A0118614C0CF3CD788152 -:1041D0002612104B4300DA98090002820200F060B8 -:1041E0001020640C14080C00820481E81704498034 -:1041F0005361B0101030240B50000844C1432C60B0 -:104200000C03320300001D00700380006CC00C0022 -:104210000198000040031CC6400C18C30000307019 -:1042200006CC26D9CB01D070C8D70C2B03000311C4 -:10423000606C0E1900200B01808000002B19B58CDA -:104240005BC21988300101B00C6302D3A848131A6D -:1042500069028280144461000033C0000000000045 -:104260000000000000038668CC6001B30D80001BD5 -:10427000C018300D80091C00C00C21E30600C00CE2 -:10428000D36980360103278DA602980019B33650F2 -:104290008ED841B07864A324A4C357318C18643CF1 -:1042A00028C00001936D30C0003C6D0019019A30A8 -:1042B0003000302B43000001D893C6130041B4B046 -:1042C000F6C06CC30000040000198C003E0C0C000A -:1042D000C0034C0022D6036887860200C89169009B -:1042E000C9C569821908001E113680222009602C78 -:1042F00022368D80C6408B6086F618864A232003BE -:10430000FC000006060C09000168050A1698000565 -:10431000A008580A16000200800020343CC3201375 -:104320000C00101000DA602C00416B60008000CCA3 -:1043300013C60300629EB4A5A501694D4C830450C9 -:1043400003D80000C06EA3B43082BE000C4006301B -:10435000B4B4C008000D0080B04D20D03027460A0C -:104360005AF3016042D200110160C32258180411AF -:104370000906F4605350E4010C3002018100DC6D49 -:10438000B31E06061A0059EC890019F84F0C0237C3 -:104390009800610C3000000318D8DE183C36000C81 -:1043A000C0033006D80000098CC3000499C63998B0 -:1043B0004C33106D1000CD018A009100000069009F -:1043C00019660018314000CCF00B9986002060601F -:1043D00080C32332023193030000000000020C006E -:1043E000300C618C0FD8CC29836C080014030000BA -:1043F000460000601800180008B60020143600219E -:10440000B0000C100E180060060601F8018E40B0D6 -:104410000F0001C18300CCE0183025760018110090 -:10442000087D812BFFC00C0008809540060040C22B -:10443000000000180000780E010000040000265360 -:104440000352114020000328100300D03100C402A1 -:104450003180001601000000010006003002C58016 -:1044600088980300C1004002A8004906AB06A0924C -:104470002C00068C353600966041001A2A0AEA01A3 -:104480009DD330CC6D91061A0C3D9021101A40300E -:1044900040C031A0050C0000038008200281600F9D -:1044A000413958C80003600096AA18018DD31168DD -:1044B00000740C3300480C036034AC0C3C0C460117 -:1044C00083C000600009DE824D0199A8A36908CC71 -:1044D00046C2B0E60CC6D006430600036C6003007B -:1044E000032A4D868005A0B468002D4498236A4CA9 -:1044F000162C1B86C6630166F41B160C1B82D66243 -:104500000AA46C3133480C8300D020C600330C0C55 -:10451000010001B466602CD983F67303E4B0DE01B8 -:1045200003C2404100C0620338C60656C3646C67CC -:104530003912C9806280EF0062C3290984C102F088 -:10454000040029156CCC00800C00303E06E0C81831 -:10455000303034C02E034C01031030382818004688 -:10456000C00001B00028000198C0BC00143C0D66DA -:104570000880C26000C6000CAC0C130C00C00180A7 -:1045800028000003012001966C153300038CD8002D -:1045900016003A02266CC0D1908B604540328248AA -:1045A00014220C3077D826C60306D0EC60199A0482 -:1045B000560011118400068020680B0700888800CF -:1045C000022B400176104444A80009104006120A4C -:1045D000E899D40CD045AEB2332C58D10D198CECDF -:1045E000B2001802000181049C314000186000C62E -:1045F000CC196330B075083060099601EC0CE1AE5F -:10460000018C461DC25F3C633119ACC58B604D0007 -:104610005B1D024141CF61CF60CF603FF347B003E4 -:104620000080016000F60477F083B0801820004E0F -:104630000032D400DA1A004288A860C500000700E2 -:10464000E1038403D800403F1D930144000C6089BE -:10465000112380418362540043260B6C0C109000A0 -:10466000B4D8661D83C00083F688220001C0CB2C1D -:1046700081811400140B86C360000170B86C360091 -:1046800000170386C0E062078048D80382848CF755 -:104690003CC34FD803E0040C010621808E21A60004 -:1046A000C55722028550133CFC006200000C00C07C -:1046B00021B0C1000200058340021083623005462C -:1046C0000063C300600018678FE6E0ED9CFB7B3F52 -:1046D000EC48FF72419C906621508066F233F80BE3 -:1046E000A00030C661B0A26460130D0001880027ED -:1046F00080FFF10080CD04818E3062010EBC4389C1 -:10470000E1BDC402BB18004010128A280E560506EF -:10471000C0C1B0582060B22CD9803050184000C0C1 -:104720000006040061316072CE2CE58E59C19CB048 -:1047300026390488CAC6106C90061700008E2A011C -:10474000ACC0000306030586000C044005016000B0 -:10475000C4030180C3000602804282216063011805 -:1047600009804CC0A4007D960420008420081040DD -:1047700081040800408102040408204082040102F0 -:10478000108108041002102008404081040802042F -:10479000200810082100810104101020084104089D -:1047A00048102021001021204082040020400204F3 -:1047B000102041020010200842102040420204084C -:1047C000204000810408104080040820408204003A -:1047D00020401084010200842010841081084200CF -:1047E000210040840408204082040088400000002A +:1040000000000000000000000000000000000000B0 +:1040100000000000000000000000000000000000A0 +:104020000000000000000000000000000000000090 +:104030000000000000000000000000000000000080 +:104040000000000000000000000000000000000070 +:104050000000000000000000000000000000000060 +:104060000000000000000000000000000000000050 +:104070000000000000000000000000000000000040 +:104080000000000000000000000000000000000030 +:104090000000000000000000000000000000000020 +:1040A0000000000000000000000000000000000010 +:1040B0000000000000000000000000000000000000 +:1040C00000000000000000000000000000000000F0 +:1040D00000000000000000000000000000000000E0 +:1040E00000000000000000000000000000000000D0 +:1040F00000000000000000000000000000000000C0 +:1041000000000000000000000000000000000000AF +:10411000000000000000000000000000000000009F +:10412000000000000000000000000000000000008F +:10413000000000000000000000000000000000007F +:10414000000000000000000000000000000000006F +:10415000000000000000000000000000000000005F +:10416000000000000000000000000000000000004F +:10417000000000000000000000000000000000003F +:10418000000000000000000000000000000000002F +:10419000000000000000000000000000000000001F +:1041A000000000000000000000000000000000000F +:1041B00000000000000000000000000000000000FF +:1041C00000000000000000000000000000000000EF +:1041D00000000000000000000000000000000000DF +:1041E00000000000000000000000000000000000CF +:1041F00000000000000000000000000000000000BF +:1042000000000000000000000000000000000000AE +:10421000000000000000000000000000000000009E +:10422000000000000000000000000000000000008E +:10423000000000000000000000000000000000007E +:10424000000000000000000000000000000000006E +:10425000000000000000000000000000000000005E +:10426000000000000000000000000000000000004E +:10427000000000000000000000000000000000003E +:10428000000000000000000000000000000000002E +:10429000000000000000000000000000000000001E +:1042A000000000000000000000000000000000000E +:1042B00000000000000000000000000000000000FE +:1042C00000000000000000000000000000000000EE +:1042D00000000000000000000000000000000000DE +:1042E00000000000000000000000000000000000CE +:1042F00000000000000000000000000000000000BE +:1043000000000000000000000000000000000000AD +:10431000000000000000000000000000000000009D +:10432000000000000000000000000000000000008D +:10433000000000000000000000000000000000007D +:10434000000000000000000000000000000000006D +:10435000000000000000000000000000000000005D +:10436000000000000000000000000000000000004D +:10437000000000000000000000000000000000003D +:10438000000000000000000000000000000000002D +:10439000000000000000000000000000000000001D +:1043A000000000000000000000000000000000000D +:1043B00000000000000000000000000000000000FD +:1043C00000000000000000000000000000000000ED +:1043D00000000000000000000000000000000000DD +:1043E00000000000000000000000000000000000CD +:1043F00000000000000000000000000000000000BD +:1044000000000000000000000000000000000000AC +:10441000000000000000000000000000000000009C +:10442000000000000000000000000000000000008C +:10443000000000000000000000000000000000007C +:10444000000000000000000000000000000000006C +:10445000000000000000000000000000000000005C +:10446000000000000000000000000000000000004C +:10447000000000000000000000000000000000003C +:10448000000000000000000000000000000000002C +:10449000000000000000000000000000000000001C +:1044A000000000000000000000000000000000000C +:1044B00000000000000000000000000000000000FC +:1044C00000000000000000000000000000000000EC +:1044D00000000000000000000000000000000000DC +:1044E00000000000000000000000000000000000CC +:1044F00000000000000000000000000000000000BC +:1045000000000000000000000000000000000000AB +:10451000000000000000000000000000000000009B +:10452000000000000000000000000000000000008B +:10453000000000000000000000000000000000007B +:10454000000000000000000000000000000000006B +:10455000000000000000000000000000000000005B +:10456000000000000000000000000000000000004B +:10457000000000000000000000000000000000003B +:10458000000000000000000000000000000000002B +:10459000000000000000000000000000000000001B +:1045A000000000000000000000000000000000000B +:1045B00000000000000000000000000000000000FB +:1045C00000000000000000000000000000000000EB +:1045D00000000000000000000000000000000000DB +:1045E00000000000000000000000000000000000CB +:1045F00000000000000000000000000000000000BB +:1046000000000000000000000000000000000000AA +:10461000000000000000000000000000000000009A +:10462000000000000000000000000000000000008A +:10463000000000000000000000000000000000007A +:10464000000000000000000000000000000000006A +:10465000000000000000000000000000000000005A +:10466000000000000000000000000000000000004A +:10467000000000000000000000000000000000003A +:10468000000000000000000000000000000000002A +:10469000000000000000000000000000000000001A +:1046A000000000000000000000000000000000000A +:1046B00000000000000000000000000000000000FA +:1046C00000000000000000000000000000000000EA +:1046D00000000000000000000000000000000000DA +:1046E00000000000000000000000000000000000CA +:1046F00000000000000000000000000000000000BA +:1047000000000000000000000000000000000000A9 +:104710000000000000000000000000000000000099 +:104720000000000000000000000000000000000089 +:104730000000000000000000000000000000000079 +:104740000000000000000000000000000000000069 +:104750000000000000000000000000000000000059 +:104760000000000000000000000000000000000049 +:104770000000000000000000000000000000000039 +:104780000000000000000000000000000000000029 +:104790000000000000000000000000000000000019 +:1047A0000000000000000000000000000000000009 +:1047B00000000000000000000000000000000000F9 +:1047C00000000000000000000000000000000000E9 +:1047D00000000000000000000000000000000000D9 +:1047E00000000000000000000000000000000000C9 :1047F00000000000000000000000000000000000B9 :1048000000000000000000000000000000000000A8 -:10481000000000000000000000004000101D4000EB -:10482000005410D0141ADA0C46F043B8000000000F -:104830000000000000DEB0000000000000004000AA +:104810000000000000000000000000000000000098 +:104820000000000000000000000000000000000088 +:104830000000000000000000000000000000000078 :104840000000000000000000000000000000000068 :104850000000000000000000000000000000000058 :104860000000000000000000000000000000000048 :104870000000000000000000000000000000000038 -:104880000000000000000000000000000002000026 -:104890000000000000000000080000000000000010 +:104880000000000000000000000000000000000028 +:104890000000000000000000000000000000000018 :1048A0000000000000000000000000000000000008 :1048B00000000000000000000000000000000000F8 :1048C00000000000000000000000000000000000E8 -:1048D00000000000000200000000000000000000D6 -:1048E00008000000000000000000000000000000C0 +:1048D00000000000000000000000000000000000D8 +:1048E00000000000000000000000000000000000C8 :1048F00000000000000000000000000000000000B8 :1049000000000000000000000000000000000000A7 :104910000000000000000000000000000000000097 @@ -263822,13 +263822,13 @@ :1064C00000000000000000000000000000000000CC :1064D00000000000000000000000000000000000BC :1064E00000000000000000000000000000000000AC -:1064F0000000000000000000000000000000002379 -:106500003214200020002000200020002000200065 +:1064F0000000000000000000000000000000001F7D +:1065000055D1200020002000200020002000200085 :10651000200020002000200020002000200020007B :10652000200020002000200020002000200020006B :10653000200030A1000A30A100032000200020002C :10654000200030A1000A30A1000530E100FF30C179 -:1065500000813002001A956B30A1000D2000200050 +:1065500000813002001EBA1730A1000D200020007B :10656000200020002000200020002000200020002B :086570002000200020002000A3 :00000001FF diff --git a/targets/ARCH/EXMIMO/BITSTREAM/exmimo2_prom.prm b/targets/ARCH/EXMIMO/BITSTREAM/exmimo2_prom.prm index 8308037075..87f2b8da57 100644 --- a/targets/ARCH/EXMIMO/BITSTREAM/exmimo2_prom.prm +++ b/targets/ARCH/EXMIMO/BITSTREAM/exmimo2_prom.prm @@ -1,9 +1,9 @@ -PROMGEN: Xilinx Prom Generator P.49d -Copyright (c) 1995-2012 Xilinx, Inc. All rights reserved. +PROMGEN: Xilinx Prom Generator P.20131013 +Copyright (c) 1995-2013 Xilinx, Inc. All rights reserved. -promgen -w -p mcs -c FF -o /homes/ghaddab/riadh/openair0/express-mimo2/grlib-gpl-1.1.0-b4113/designs/express-mimo2//exmimo2_prom -s 8192 -u 0000 express-mimo2.bit -spi +promgen -w -p mcs -c FF -o /homes/maatalla/openair/openair0/express-mimo2/backup_houssem/express-mimo2/grlib-gpl-1.1.0-b4113/designs/express-mimo2//exmimo2_prom -s 8192 -u 0000 express-mimo2.bit -spi -PROM /homes/ghaddab/riadh/openair0/express-mimo2/grlib-gpl-1.1.0-b4113/designs/express-mimo2/exmimo2_prom.prm map: Fri Mar 21 17:31:05 2014 +PROM /homes/maatalla/openair/openair0/express-mimo2/backup_houssem/express-mimo2/grlib-gpl-1.1.0-b4113/designs/express-mimo2/exmimo2_prom.prm map: Tue Jun 16 16:10:48 2015 Calculating PROM checksum with fill value ff @@ -11,7 +11,7 @@ Format Mcs86 (32-bit) Size 8192K PROM start 0000:0000 PROM end 007f:ffff -PROM checksum 41900d70 +PROM checksum 41521d58 Addr1 Addr2 Date File(s) - 0000:0000 0040:6577 Mar 21 17:30:57 2014 express-mimo2.bit + 0000:0000 0040:6577 Jun 16 16:10:43 2015 express-mimo2.bit diff --git a/targets/ARCH/EXMIMO/BITSTREAM/express-mimo2.bit b/targets/ARCH/EXMIMO/BITSTREAM/express-mimo2.bit index 8741692a19..6807fe5a8c 100644 Binary files a/targets/ARCH/EXMIMO/BITSTREAM/express-mimo2.bit and b/targets/ARCH/EXMIMO/BITSTREAM/express-mimo2.bit differ diff --git a/targets/ARCH/EXMIMO/BITSTREAM/express-mimo2.msk b/targets/ARCH/EXMIMO/BITSTREAM/express-mimo2.msk index 55c8fa732e..edbb63f913 100644 Binary files a/targets/ARCH/EXMIMO/BITSTREAM/express-mimo2.msk and b/targets/ARCH/EXMIMO/BITSTREAM/express-mimo2.msk differ diff --git a/targets/ARCH/EXMIMO/BITSTREAM/fpga.cmd b/targets/ARCH/EXMIMO/BITSTREAM/fpga.cmd new file mode 100644 index 0000000000..20259c5f20 --- /dev/null +++ b/targets/ARCH/EXMIMO/BITSTREAM/fpga.cmd @@ -0,0 +1,7 @@ +setMode -bs +setCable -port auto +Identify +identifyMPM +assignFile -p 1 -file "express-mimo2.bit" +Program -p 1 -defaultVersion 0 +quit diff --git a/targets/ARCH/EXMIMO/USERSPACE/LIB/openair0_lib.c b/targets/ARCH/EXMIMO/USERSPACE/LIB/openair0_lib.c index b30cc89e8b..71c1009039 100644 --- a/targets/ARCH/EXMIMO/USERSPACE/LIB/openair0_lib.c +++ b/targets/ARCH/EXMIMO/USERSPACE/LIB/openair0_lib.c @@ -247,10 +247,10 @@ int openair0_stop_without_reset(int card) #define MY_RF_MODE (RXEN + TXEN + TXLPFNORM + TXLPFEN + TXLPF25 + RXLPFNORM + RXLPFEN + RXLPF25 + LNA1ON +LNAMax + RFBBNORM + DMAMODE_RX + DMAMODE_TX) #define RF_MODE_BASE (LNA1ON + RFBBNORM) -int openair0_device_init(openair0_device *device, openair0_config_t *openair0_cfg) { +int openair0_dev_init_exmimo(openair0_device *device, openair0_config_t *openair0_cfg) { // Initialize card - exmimo_config_t *p_exmimo_config; + // exmimo_config_t *p_exmimo_config; exmimo_id_t *p_exmimo_id; int ret; @@ -276,7 +276,7 @@ int openair0_device_init(openair0_device *device, openair0_config_t *openair0_cf printf ("Detected %d number of cards, %d number of antennas.\n", openair0_num_detected_cards, openair0_num_antennas[0]); } - p_exmimo_config = openair0_exmimo_pci[0].exmimo_config_ptr; + // p_exmimo_config = openair0_exmimo_pci[0].exmimo_config_ptr; p_exmimo_id = openair0_exmimo_pci[0].exmimo_id_ptr; printf("Card %d: ExpressMIMO %d, HW Rev %d, SW Rev 0x%d\n", 0, p_exmimo_id->board_exmimoversion, p_exmimo_id->board_hwrev, p_exmimo_id->board_swrev); @@ -356,14 +356,15 @@ int openair0_config(openair0_config_t *openair0_cfg, int UE_flag) for (ant=0; ant<4; ant++) { if (openair0_cfg[card].rx_freq[ant] || openair0_cfg[card].tx_freq[ant]) { p_exmimo_config->rf.rf_mode[ant] = RF_MODE_BASE; - p_exmimo_config->rf.do_autocal[ant] = 1; + p_exmimo_config->rf.do_autocal[ant] = 1;//openair0_cfg[card].autocal[ant]; + printf("card %d, antenna %d, autocal %d\n",card,ant,openair0_cfg[card].autocal[ant]); } if (openair0_cfg[card].tx_freq[ant]) { p_exmimo_config->rf.rf_mode[ant] += (TXEN + DMAMODE_TX + TXLPFNORM + TXLPFEN + tx_filter); p_exmimo_config->rf.rf_freq_tx[ant] = (unsigned int)openair0_cfg[card].tx_freq[ant]; p_exmimo_config->rf.tx_gain[ant][0] = (unsigned int)openair0_cfg[card].tx_gain[ant]; - printf("openair0 : programming card %d TX antenna %d (freq %u, gain %d)\n",card,ant,p_exmimo_config->rf.rf_freq_tx[ant],p_exmimo_config->rf.tx_gain[ant][0]); + } if (openair0_cfg[card].rx_freq[ant]) { @@ -419,11 +420,11 @@ int openair0_config(openair0_config_t *openair0_cfg, int UE_flag) int openair0_reconfig(openair0_config_t *openair0_cfg) { - int ret; + int ant, card; exmimo_config_t *p_exmimo_config; - exmimo_id_t *p_exmimo_id; + // exmimo_id_t *p_exmimo_id; if (!openair0_cfg) { printf("Error, openair0_cfg is null!!\n"); @@ -433,7 +434,7 @@ int openair0_reconfig(openair0_config_t *openair0_cfg) for (card=0; card 0) { + // do a full configuration + openair0_config(openair0_cfg,0); + } + else { // just change the frequencies in pci descriptor + openair0_reconfig(openair0_cfg); + } + return(0); + +} + +int openair0_set_gains(openair0_device* device, openair0_config_t *openair0_cfg){ + return(0); +} unsigned int *openair0_daq_cnt(void) { diff --git a/targets/ARCH/EXMIMO/USERSPACE/LIB/openair0_lib.h b/targets/ARCH/EXMIMO/USERSPACE/LIB/openair0_lib.h index d8b605e017..f40b7ae88c 100644 --- a/targets/ARCH/EXMIMO/USERSPACE/LIB/openair0_lib.h +++ b/targets/ARCH/EXMIMO/USERSPACE/LIB/openair0_lib.h @@ -95,4 +95,7 @@ int openair0_stop_without_reset(int card); // return the DAQ block counter unsigned int *openair0_daq_cnt(void); +// set the TX and RX frequencies (card 0 only for now, to retain USRP compatibility) +int openair0_set_frequencies(openair0_device* device, openair0_config_t *openair0_cfg,int exmimo_dump_config); + #endif diff --git a/targets/ARCH/EXMIMO/USERSPACE/OCTAVE/rx_calibration_exmimo_freq.m b/targets/ARCH/EXMIMO/USERSPACE/OCTAVE/rx_calibration_exmimo_freq.m new file mode 100755 index 0000000000..3de37c0934 --- /dev/null +++ b/targets/ARCH/EXMIMO/USERSPACE/OCTAVE/rx_calibration_exmimo_freq.m @@ -0,0 +1,276 @@ +close all +clear all +hold off + +%gpib_card=0; % first GPIB PCI card in the computer +%gpib_device=28; % this is configured in the signal generator Utilities->System->GPIB->Address menu +smbv_ip_addr = "192.168.12.201"; +command = [getenv("OPENAIR_TARGETS") "/TEST/ROHDE_SCHWARZ/EthernetRawCommand.out"]; + +fc = 1907600e3; +%fc = 2.6e9; +%fc=700e6; + +fs = 7680e3; +fref = fc+fs/4; + +power_dBm = [-70 -80 -90]; %needs to be adjusted based on carrier freq +cables_loss_dB = 11; % we need to account for the power loss between the signal generator and the card input (splitter, cables) +nb_meas = 10; + +dual_tx = 0; +tdd = 1; +card = 0; +limeparms; +%rf_mode = (RXEN+TXEN+TXLPFNORM+TXLPFEN+TXLPF25+RXLPFNORM+RXLPFEN+RXLPF25+LNA1ON+LNAMax+RFBBNORM+DMAMODE_RX+DMAMODE_TX)*[1 1 1 1]; +rf_mode = (RXEN+0+TXLPFNORM+TXLPFEN+TXLPF25+RXLPFNORM+RXLPFEN+RXLPF25+LNA1ON+LNAMax+RFBBNORM+DMAMODE_RX+0)*[1 1 1 1]; +freq_rx = fc*[1 1 1 1]; +freq_tx = freq_rx; +tx_gain = 25*[1 1 1 1]; +rx_gain = 15*[1 1 1 1]; +%rf_local= [8254744 8255063 8257340 8257340]; %rf_local*[1 1 1 1]; +rf_local = [8254813 8255016 8254813 8254813]; %exmimo2_2 +%rf_rxdc = rf_rxdc*[1 1 1 1]; +%rf_rxdc = ((128+rxdc_I) + (128+rxdc_Q)*(2^8))*[1 1 1 1]; +rf_rxdc = [37059 35459 36300 36999]; %exmimo2_2 +rf_vcocal=rf_vcocal_19G*[1 1 1 1]; +eNBflag = 0; +tdd_config = DUPLEXMODE_FDD + TXRXSWITCH_TESTRX; +syncmode = SYNCMODE_FREE; +%syncmode = [SYNCMODE_MASTER SYNCMODE_SLAVE]; +rffe_rxg_low = 63*[1 1 1 1]; +rffe_rxg_final = 63*[1 1 1 1]; +rffe_band = B19G_TDD*[1 1 1 1]; +autocal = [1 1 1 1]; +resampling_factor = [2 2 2 2]; + + +system(sprintf('%s %s ''*RST;*CLS''',command, smbv_ip_addr)); % reset and configure the signal generator +%gpib_send(gpib_card,gpib_device,sprintf("POW %ddBm",power_dBm+cables_loss_dB)); +%gpib_send(gpib_card,gpib_device,'POW -14dBm'); +%gpib_send(gpib_card,gpib_device,'FREQ 1.91860GHz'); +%gpib_send(gpib_card,gpib_device,'FREQ 1.919225GHz'); +%gpib_send(gpib_card,gpib_device,'FREQ 1.909225GHz'); +system(sprintf('%s %s ''FREQ %ldHz''',command,smbv_ip_addr,fref)); + +%for card=1:oarf_get_num_detected_cards +%oarf_config_exmimo(card-1,freq_rx,freq_tx,tdd_config,syncmode(card),rx_gain,tx_gain,eNBflag,rf_mode,rf_rxdc,rf_local,rf_vcocal,rffe_rxg_low,rffe_rxg_final,rffe_band,autocal,resampling_factor); +%end + +autocal = [0 0 0 0]; + +ALL_rxrfmode = [LNAByp LNAMed LNAMax]; +%ALL_rxrfmode = [LNAMax]; +ALL_gain = 0:10:30; + +num_chains = 4*oarf_get_num_detected_cards; + +SpN0 = zeros(length(ALL_rxrfmode),length(ALL_gain),num_chains); +%SpN1 = zeros(length(ALL_rxrfmode),length(ALL_gain)); +N0 = zeros(length(ALL_rxrfmode),length(ALL_gain),num_chains); +%N1 = zeros(length(ALL_rxrfmode),length(ALL_gain)); +S0 = zeros(length(ALL_rxrfmode),length(ALL_gain),num_chains); +S0_lin = zeros(length(ALL_rxrfmode),length(ALL_gain),num_chains); +%S1 = zeros(length(ALL_rxrfmode),length(ALL_gain),num_chains); +G0 = zeros(length(ALL_rxrfmode),length(ALL_gain),num_chains); +G1 = zeros(length(ALL_rxrfmode),length(ALL_gain),num_chains); +NF0 = zeros(length(ALL_rxrfmode),length(ALL_gain),num_chains); +NF1 = zeros(length(ALL_rxrfmode),length(ALL_gain),num_chains); +NF2 = zeros(length(ALL_rxrfmode),length(ALL_gain),num_chains); +SNR0 = zeros(length(ALL_rxrfmode),length(ALL_gain),num_chains); +%SNR1 = zeros(length(ALL_rxrfmode),length(ALL_gain)); + +%keyboard + +for mode_idx = 3 + LNA=ALL_rxrfmode(mode_idx); + + system(sprintf('%s %s ''POW %d dBm''',command,smbv_ip_addr,power_dBm(mode_idx)+cables_loss_dB)); + + idx_gain = 1; + for rx_gain=ALL_gain + + rf_mode = (RXEN+TXLPFNORM+TXLPFEN+TXLPF25+RXLPFNORM+RXLPFEN+RXLPF25+LNA1ON+LNA+RFBBNORM+DMAMODE_RX)*[1 1 1 1]; + rx_gain = rx_gain * [1 1 1 1]; + + for card=1:oarf_get_num_detected_cards + oarf_config_exmimo(card-1,freq_rx,freq_tx,tdd_config,syncmode(card),rx_gain,tx_gain,eNBflag,rf_mode,rf_rxdc,rf_local,rf_vcocal,rffe_rxg_low,rffe_rxg_final,rffe_band,autocal,resampling_factor); + end + sleep(1); + + % signal measurement + system(sprintf('%s %s ''OUTP:STAT ON''',command,smbv_ip_addr)); % activate output + sleep(.5); + %f1 = (7.68*(0:length(s(:,2))-1)/(length(s(:,2))))-3.84; + f1 = (7.68*(0:307200-1)/307200)-3.84; + %nidx = find(f1>=0.5 & f1<=1.5); %1MHz + nidx = find(f1>=1.5 & f1<=2.5); %1MHz + sidx = find(f1>=1.87 & f1<=1.97); %100kHz + + SpN0_temp = 0; + spn0_temp = 0; + for k=1:nb_meas + s=oarf_get_frame(0); + sleep(.5); + s = s - repmat(mean(s,1),size(s,1),1); + + SpN0_temp = SpN0_temp + mean(abs(s).^2,1) - abs(mean(s,1)).^2; + sf = fftshift(fft(s),1)/sqrt(length(s)); + %np = 10*log10(sum(abs(sf(nidx,:)).^2)); + %sp_temp = sp_temp + 10*log10(sum(abs(sf(sidx,:)).^2)); + spn0_temp = spn0_temp + sum(abs(sf).^2); + end + %SpN0(mode_idx,idx_gain,:) = mean(abs(s).^2,1) - abs(mean(s,1)).^2; + %SpN1(mode_idx,idx_gain) = mean(abs(s(:,2)).^2) - abs(mean(s(:,2))).^2; + SpN0(mode_idx,idx_gain,:) = SpN0_temp/nb_meas; + spn0 = spn0_temp/nb_meas; + + %keyboard; + + sf = fftshift(fft(s),1)/sqrt(length(s)); + figure(1); + hold off + plot(f1,20*log10(abs((sf(:,3)))),'r'); + hold on + plot(f1(nidx),20*log10(abs(sf(nidx,3))),'b'); + plot(f1(sidx),20*log10(abs(sf(sidx,3))),'g'); + + title("Signal"); + ylim([0 200]); + + % noise measurement + system(sprintf('%s %s ''OUTP:STAT OFF''',command,smbv_ip_addr)); % deactivate output + sleep(.5); + + N0_temp = 0; + np_temp = 0; + np_temp_unit = 0; + for k=1:nb_meas + s=oarf_get_frame(0); %oarf_get_frame + sleep(.5); + s = s - repmat(mean(s,1),size(s,1),1); + + N0_temp = N0_temp + mean(abs(s).^2,1) - abs(mean(s,1)).^2; + %N1(idx_power,idx_gain) = mean(abs(s(:,2)).^2) - abs(mean(s(:,2))).^2; + sf = fftshift(fft(s),1)/sqrt(length(s)); + np_temp = np_temp + sum(abs(sf).^2); + np_temp_unit = np_temp_unit + sum(abs(sf(nidx,:)).^2); + end + N0(mode_idx,idx_gain,:) = N0_temp/nb_meas; + %N0(mode_idx,idx_gain,:) = mean(abs(s).^2,1) - abs(mean(s,1)).^2; + %N1(mode_idx,idx_gain) = mean(abs(s(:,2)).^2) - abs(mean(s(:,2))).^2; + %G1(mode_idx,idx_gain,:) = sp - power_dBm(mode_idx); + np = np_temp/nb_meas; + snr = 10*log10((spn0-np)./np); %measured snr + snr_real = power_dBm(mode_idx) - (-174 + 10*log10(7.68e6)); %signal over thermal noise + + np_unit = np_temp_unit/nb_meas; + snr_output_unit = 10*log10((spn0-np_unit)./np_unit); %measured snr + snr_input_unit = power_dBm(mode_idx) - (-174 + 10*log10(1e6)); %signal over thermal noise + + NF1(mode_idx,idx_gain,:) = snr_real - snr; + NF2(mode_idx,idx_gain,:) = snr_input_unit - snr_output_unit; + + sf = fftshift(fft(s),1)/sqrt(length(s)); + figure(2); + hold off + plot(f1,20*log10(abs((sf(:,3)))),'r'); + title("Noise"); + ylim([0 200]); + + % do some plausibility checks + % if ((N0(mode_idx,idx_gain) > SpN0(mode_idx,idx_gain)) || + % (N1(mode_idx,idx_gain) > SpN1(mode_idx,idx_gain))) + % error("something is wrong"); + % end + + S0_lin(mode_idx,idx_gain,:) = SpN0(mode_idx,idx_gain,:)-N0(mode_idx,idx_gain,:); + S0_lin(mode_idx,idx_gain,S0_lin(mode_idx,idx_gain,:)<0) = 0; + S0(mode_idx,idx_gain,:) = 10*log10(S0_lin(mode_idx,idx_gain,:)); + %S1(mode_idx,idx_gain) = 10*log10(SpN1(mode_idx,idx_gain)-N1(mode_idx,idx_gain)); + G0(mode_idx,idx_gain,:) = S0(mode_idx,idx_gain,:) - power_dBm(mode_idx); + %G1(mode_idx,idx_gain) = S1(mode_idx,idx_gain) - power_dBm; + NF0(mode_idx,idx_gain,:) = 10*log10(N0(mode_idx,idx_gain,:)) - G0(mode_idx,idx_gain,:) + 105; % 108 is the thermal noise + %NF1(mode_idx,idx_gain) = 10*log10(N1(mode_idx,idx_gain)) - G1(mode_idx,idx_gain) + 105; + SNR0(mode_idx,idx_gain,:) = S0(mode_idx,idx_gain,:)-10*log10(N0(mode_idx,idx_gain,:)); + %SNR1(mode_idx,idx_gain) = S1(mode_idx,idx_gain)-10*log10(N1(mode_idx,idx_gain)); + + %printf(' %d: Signal strength (%f,%f), Gain (%f %f), N (%f %f) SNR (%f %f) NF (%f %f)\n', + % rx_gain(1), S0(mode_idx,idx_gain),S1(mode_idx,idx_gain), + % G0(mode_idx,idx_gain),G1(mode_idx,idx_gain), + % 10*log10(N0(mode_idx,idx_gain)),10*log10(N1(mode_idx,idx_gain)), + % SNR0(mode_idx,idx_gain),SNR1(mode_idx,idx_gain), + % NF0(mode_idx,idx_gain),NF1(mode_idx,idx_gain)); + %fflush(stdout); + %fprintf(fid,'%d, %d, %d, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f\n', + %power_dBm,gain2391,gain9862, S0,S1,G0,G1,10*log10(N0),10*log10(N1),SNR0,SNR1,NF0,NF1); + %keyboard + + figure(3) + hold off + plot(ALL_gain,G0(:,:,1),'o-','markersize',10) + hold on + plot(ALL_gain,G0(:,:,2),'x-','markersize',10) + plot(ALL_gain,G0(:,:,3),'s-','markersize',10) + plot(ALL_gain,G0(:,:,4),'d-','markersize',10) + %legend('Byp RX0','Med RX0','Max RX0','Byp RX1','Med RX1','Max RX1'); + legend('Byp RX0','Med RX0','Max RX0','Byp RX1','Med RX1','Max RX1','Byp RX2','Med RX2','Max RX2','Byp RX3','Med RX3','Max RX3'); + title('Gains') + xlabel('rx gains (dB)') + ylabel('NF (dB)') + + figure(4) + hold off + plot(ALL_gain,NF0(:,:,1),'o-','markersize',10) + hold on + plot(ALL_gain,NF0(:,:,2),'x-','markersize',10) + plot(ALL_gain,NF0(:,:,3),'s-','markersize',10) + plot(ALL_gain,NF0(:,:,4),'d-','markersize',10) + %legend('Byp RX0','Med RX0','Max RX0','Byp RX1','Med RX1','Max RX1'); + legend('Byp RX0','Med RX0','Max RX0','Byp RX1','Med RX1','Max RX1','Byp RX2','Med RX2','Max RX2','Byp RX3','Med RX3','Max RX3'); + title('Averaged Noise Figure measured in time domain') + xlabel('rx gains (dB)') + ylabel('NF (dB)') + + figure(5) + hold off + plot(ALL_gain,NF1(:,:,1),'o-','markersize',10) + hold on + plot(ALL_gain,NF1(:,:,2),'x-','markersize',10) + plot(ALL_gain,NF1(:,:,3),'s-','markersize',10) + plot(ALL_gain,NF1(:,:,4),'d-','markersize',10) + %legend('Byp RX0','Med RX0','Max RX0','Byp RX1','Med RX1','Max RX1'); + legend('Byp RX0','Med RX0','Max RX0','Byp RX1','Med RX1','Max RX1','Byp RX2','Med RX2','Max RX2','Byp RX3','Med RX3','Max RX3'); + title('Averaged Noise Figure measured in frequency domain') + xlabel('rx gains (dB)') + ylabel('NF (dB)') + + + figure(6) + hold off + plot(ALL_gain,NF2(:,:,1),'o-','markersize',10) + hold on + plot(ALL_gain,NF2(:,:,2),'x-','markersize',10) + plot(ALL_gain,NF2(:,:,3),'s-','markersize',10) + plot(ALL_gain,NF2(:,:,4),'d-','markersize',10) + %legend('Byp RX0','Med RX0','Max RX0','Byp RX1','Med RX1','Max RX1'); + legend('Byp RX0','Med RX0','Max RX0','Byp RX1','Med RX1','Max RX1','Byp RX2','Med RX2','Max RX2','Byp RX3','Med RX3','Max RX3'); + title('Unit Bandwidth Noise Figure measured in frequency domain') + xlabel('rx gains (dB)') + ylabel('NF (dB)') + + idx_gain = idx_gain + 1; + + end + + end + +%gpib_send(gpib_card,gpib_device,'OUTP:STAT OFF'); % deactivate output + +%l0 = [ALL_gain2391; ones(size(ALL_gain2391))].'\G0; +%l1 = [ALL_gain2391; ones(size(ALL_gain2391))].'\G1; + + + + + diff --git a/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp b/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp index 6e6c3575ab..192ed503e2 100644 --- a/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp +++ b/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp @@ -44,7 +44,15 @@ #include #include #include + #include "common_lib.h" +#ifdef __SSE4_1__ +# include +#endif + +#ifdef __AVX2__ +# include +#endif typedef struct { @@ -54,7 +62,7 @@ typedef struct // -------------------------------- uhd::usrp::multi_usrp::sptr usrp; //uhd::usrp::multi_usrp::sptr rx_usrp; - + //create a send streamer and a receive streamer uhd::tx_streamer::sptr tx_stream; uhd::rx_streamer::sptr rx_stream; @@ -116,12 +124,14 @@ static void trx_usrp_end(openair0_device *device) s->rx_stream->issue_stream_cmd(uhd::stream_cmd_t::STREAM_MODE_STOP_CONTINUOUS); - //send a mini EOB packet - s->tx_md.end_of_burst = true; - s->tx_stream->send("", 0, s->tx_md); - s->tx_md.end_of_burst = false; + //send a mini EOB packet + s->tx_md.end_of_burst = true; + s->tx_stream->send("", 0, s->tx_md); + s->tx_md.end_of_burst = false; + } -static void trx_usrp_write(openair0_device *device, openair0_timestamp timestamp, void **buff, int nsamps, int cc, int flags) + +static int trx_usrp_write(openair0_device *device, openair0_timestamp timestamp, void **buff, int nsamps, int cc, int flags) { usrp_state_t *s = (usrp_state_t*)device->priv; s->tx_md.time_spec = uhd::time_spec_t::from_ticks(timestamp, s->sample_rate); @@ -138,29 +148,59 @@ static void trx_usrp_write(openair0_device *device, openair0_timestamp timestamp else s->tx_stream->send(buff[0], nsamps, s->tx_md); s->tx_md.start_of_burst = false; + + return 0; } static int trx_usrp_read(openair0_device *device, openair0_timestamp *ptimestamp, void **buff, int nsamps, int cc) { + usrp_state_t *s = (usrp_state_t*)device->priv; + int samples_received=0,i,j; + int nsamps2; // aligned to upper 32 or 16 byte boundary +#if defined(__x86_64) || defined(__i386__) +#ifdef __AVX2__ + __m256i buff_tmp[2][nsamps>>3]; + nsamps2 = (nsamps+7)>>3; +#else + __m128i buff_tmp[2][nsamps>>2]; + nsamps2 = (nsamps+3)>>2; +#endif +#elif defined(__arm__) + int16x8_t buff_tmp[2][nsamps>>2]; + nsamps2 = (nsamps+3)>>2; +#endif - usrp_state_t *s = (usrp_state_t*)device->priv; - int samples_received=0,i; if (cc>1) { // receive multiple channels (e.g. RF A and RF B) std::vector buff_ptrs; - for (int i=0;irx_stream->recv(buff_ptrs, nsamps, s->rx_md); } else { // receive a single channel (e.g. from connector RF A) - samples_received = s->rx_stream->recv(buff[0], nsamps, s->rx_md); + samples_received = s->rx_stream->recv(buff_tmp[0], nsamps, s->rx_md); } + // bring RX data into 12 LSBs for softmodem RX + for (int i=0;irx_md.error_code){ case uhd::rx_metadata_t::ERROR_CODE_NONE: @@ -179,6 +219,7 @@ static int trx_usrp_read(openair0_device *device, openair0_timestamp *ptimestamp s->rx_count += nsamps; s->rx_timestamp = s->rx_md.time_spec.to_ticks(s->sample_rate); *ptimestamp = s->rx_timestamp; + return samples_received; } @@ -195,7 +236,7 @@ static bool is_equal(double a, double b) return std::fabs(a-b) < std::numeric_limits::epsilon(); } -int openair0_set_frequencies(openair0_device* device, openair0_config_t *openair0_cfg) { +int trx_usrp_set_freq(openair0_device* device, openair0_config_t *openair0_cfg, int dummy) { usrp_state_t *s = (usrp_state_t*)device->priv; @@ -223,16 +264,72 @@ int openair0_set_rx_frequencies(openair0_device* device, openair0_config_t *open } -int openair0_set_gains(openair0_device* device, openair0_config_t *openair0_cfg) { +int trx_usrp_set_gains(openair0_device* device, + openair0_config_t *openair0_cfg) { usrp_state_t *s = (usrp_state_t*)device->priv; s->usrp->set_tx_gain(openair0_cfg[0].tx_gain[0]); - s->usrp->set_rx_gain(openair0_cfg[0].rx_gain[0]); + ::uhd::gain_range_t gain_range = s->usrp->get_rx_gain_range(0); + // limit to maximum gain + if (openair0_cfg[0].rx_gain[0]-openair0_cfg[0].rx_gain_offset[0] > gain_range.stop()) { + + printf("RX Gain 0 too high, reduce by %f dB\n", + openair0_cfg[0].rx_gain[0]-openair0_cfg[0].rx_gain_offset[0] - gain_range.stop()); + exit(-1); + } + s->usrp->set_rx_gain(openair0_cfg[0].rx_gain[0]-openair0_cfg[0].rx_gain_offset[0]); + printf("Setting USRP RX gain to %f\n", openair0_cfg[0].rx_gain[0]-openair0_cfg[0].rx_gain_offset[0]); + return(0); } + +int trx_usrp_stop(int card) { + return(0); +} + + +rx_gain_calib_table_t calib_table[] = { + {3500000000.0,46.0}, + {2660000000.0,53.0}, + {2300000000.0,54.0}, + {1880000000.0,55.0}, + {816000000.0,62.0}, + {-1,0}}; + +void set_rx_gain_offset(openair0_config_t *openair0_cfg, int chain_index) { + + int i=0; + // loop through calibration table to find best adjustment factor for RX frequency + double min_diff = 6e9,diff; -int openair0_device_init(openair0_device* device, openair0_config_t *openair0_cfg) + while (calib_table[i].freq>0) { + diff = fabs(openair0_cfg->rx_freq[chain_index] - calib_table[i].freq); + printf("cal %d: freq %f, offset %f, diff %f\n", + i,calib_table[i].freq,calib_table[i].offset,diff); + if (min_diff > diff) { + min_diff = diff; + openair0_cfg->rx_gain_offset[chain_index] = calib_table[i].offset; + } + i++; + } + +} + + +int trx_usrp_get_stats(openair0_device* device) { + + return(0); + +} +int trx_usrp_reset_stats(openair0_device* device) { + + return(0); + +} + + +int openair0_dev_init_usrp(openair0_device* device, openair0_config_t *openair0_cfg) { uhd::set_thread_priority_safe(1.0); usrp_state_t *s = (usrp_state_t*)malloc(sizeof(usrp_state_t)); @@ -300,7 +397,19 @@ int openair0_device_init(openair0_device* device, openair0_config_t *openair0_cf s->usrp->set_rx_bandwidth(openair0_cfg[0].rx_bw,i); printf("Setting rx freq/gain on channel %lu/%lu\n",i,s->usrp->get_rx_num_channels()); s->usrp->set_rx_freq(openair0_cfg[0].rx_freq[i],i); - s->usrp->set_rx_gain(openair0_cfg[0].rx_gain[i],i); + set_rx_gain_offset(&openair0_cfg[0],i); + + ::uhd::gain_range_t gain_range = s->usrp->get_rx_gain_range(i); + // limit to maximum gain + if (openair0_cfg[0].rx_gain[i]-openair0_cfg[0].rx_gain_offset[i] > gain_range.stop()) { + + printf("RX Gain %lu too high, lower by %f dB\n",i,openair0_cfg[0].rx_gain[i]-openair0_cfg[0].rx_gain_offset[i] - gain_range.stop()); + exit(-1); + } + s->usrp->set_rx_gain(openair0_cfg[0].rx_gain[i]-openair0_cfg[0].rx_gain_offset[i],i); + printf("RX Gain %lu %f (%f) => %f (max %f)\n",i, + openair0_cfg[0].rx_gain[i],openair0_cfg[0].rx_gain_offset[i], + openair0_cfg[0].rx_gain[i]-openair0_cfg[0].rx_gain_offset[i],gain_range.stop()); } } for(i=0;iusrp->get_tx_num_channels();i++) { @@ -367,10 +476,15 @@ int openair0_device_init(openair0_device* device, openair0_config_t *openair0_cf device->priv = s; device->trx_start_func = trx_usrp_start; - device->trx_end_func = trx_usrp_end; - device->trx_read_func = trx_usrp_read; device->trx_write_func = trx_usrp_write; - + device->trx_read_func = trx_usrp_read; + device->trx_get_stats_func = trx_usrp_get_stats; + device->trx_reset_stats_func = trx_usrp_reset_stats; + device->trx_end_func = trx_usrp_end; + device->trx_stop_func = trx_usrp_stop; + device->trx_set_freq_func = trx_usrp_set_freq; + device->trx_set_gains_func = trx_usrp_set_gains; + s->sample_rate = openair0_cfg[0].sample_rate; // TODO: // init tx_forward_nsamps based usrp_time_offset ex @@ -380,6 +494,5 @@ int openair0_device_init(openair0_device* device, openair0_config_t *openair0_cf s->tx_forward_nsamps = 90; if(is_equal(s->sample_rate, (double)7.68e6)) s->tx_forward_nsamps = 50; - return 0; } diff --git a/targets/COMMON/create_tasks.c b/targets/COMMON/create_tasks.c index e01db1a669..537dbd91f6 100644 --- a/targets/COMMON/create_tasks.c +++ b/targets/COMMON/create_tasks.c @@ -40,7 +40,7 @@ # include "udp_eNB_task.h" # include "gtpv1u_eNB_task.h" # endif -# if defined(ENABLE_RAL) +# if ENABLE_RAL # include "lteRALue.h" # include "lteRALenb.h" # endif @@ -77,12 +77,14 @@ int create_tasks(uint32_t enb_nb, uint32_t ue_nb) } } +# if defined(NAS_BUILT_IN_UE) if (ue_nb > 0) { if (itti_create_task (TASK_NAS_UE, nas_ue_task, NULL) < 0) { LOG_E(NAS, "Create task for NAS UE failed\n"); return -1; } } +# endif } # endif @@ -92,7 +94,7 @@ int create_tasks(uint32_t enb_nb, uint32_t ue_nb) return -1; } -# if defined(ENABLE_RAL) +# if ENABLE_RAL if (itti_create_task (TASK_RAL_ENB, eRAL_task, NULL) < 0) { LOG_E(RAL_ENB, "Create task for RAL eNB failed\n"); @@ -108,7 +110,7 @@ int create_tasks(uint32_t enb_nb, uint32_t ue_nb) return -1; } -# if defined(ENABLE_RAL) +# if ENABLE_RAL if (itti_create_task (TASK_RAL_UE, mRAL_task, NULL) < 0) { LOG_E(RAL_UE, "Create task for RAL UE failed\n"); diff --git a/targets/DOCS/Doxyfile b/targets/DOCS/Doxyfile index 4a52f100a2..0d32a3ffad 100644 --- a/targets/DOCS/Doxyfile +++ b/targets/DOCS/Doxyfile @@ -107,10 +107,10 @@ REPEAT_BRIEF = YES # and the result, after processing the whole list, is used as the annotated # text. Otherwise, the brief description is used as-is. If left blank, the # following values are used ($name is automatically replaced with the name of -# the entity):The $name class, tThe $name widget, The $name file, is, provides, +# the entity):The $name class, The $name widget, The $name file, is, provides, # specifies, contains, represents, a, an and the. -ABBREVIATE_BRIEF = +ABBREVIATE_BRIEF = # If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then # doxygen will generate a detailed section even if there is only a brief @@ -132,7 +132,7 @@ INLINE_INHERITED_MEMB = NO # shortest path that makes the file name unique will be used # The default value is: YES. -FULL_PATH_NAMES = NO +FULL_PATH_NAMES = NO # The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path. # Stripping is only done if one of the specified strings matches the left-hand @@ -144,7 +144,7 @@ FULL_PATH_NAMES = NO # will be relative from the directory where doxygen is started. # This tag requires that the tag FULL_PATH_NAMES is set to YES. -STRIP_FROM_PATH = +STRIP_FROM_PATH = # The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the # path mentioned in the documentation of a class, which tells the reader which @@ -153,7 +153,7 @@ STRIP_FROM_PATH = # specify the list of include paths that are normally passed to the compiler # using the -I flag. -STRIP_FROM_INC_PATH = +STRIP_FROM_INC_PATH = # If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but # less readable) file names. This can be useful is your file systems doesn't @@ -195,7 +195,7 @@ MULTILINE_CPP_IS_BRIEF = NO # documentation from any documented member that it re-implements. # The default value is: YES. -INHERIT_DOCS = NO +INHERIT_DOCS = NO # If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce a # new page for each member. If set to NO, the documentation of a member will be @@ -220,13 +220,13 @@ TAB_SIZE = 4 # "Side Effects:". You can put \n's in the value part of an alias to insert # newlines. -ALIASES = +ALIASES = # This tag can be used to specify a number of word-keyword mappings (TCL only). # A mapping has the form "name=value". For example adding "class=itcl::class" # will allow you to use the command class in the itcl::class meaning. -TCL_SUBST = +TCL_SUBST = # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources # only. Doxygen will then generate output that is more tailored for C. For @@ -270,7 +270,7 @@ OPTIMIZE_OUTPUT_VHDL = NO # Note that for custom extensions you also need to set FILE_PATTERNS otherwise # the files are not read by doxygen. -EXTENSION_MAPPING = +EXTENSION_MAPPING = # If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments # according to the Markdown format, which allows for more readable @@ -280,7 +280,7 @@ EXTENSION_MAPPING = # case of backward compatibilities issues. # The default value is: YES. -MARKDOWN_SUPPORT = NO +MARKDOWN_SUPPORT = NO # When enabled doxygen tries to link words that correspond to documented # classes, or namespaces to their corresponding documentation. Such a link can @@ -322,7 +322,7 @@ SIP_SUPPORT = NO # should set this option to NO. # The default value is: YES. -IDL_PROPERTY_SUPPORT = NO +IDL_PROPERTY_SUPPORT = NO # If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC # tag is set to YES, then doxygen will reuse the documentation of the first @@ -500,7 +500,7 @@ HIDE_SCOPE_NAMES = NO # the files that are included by a file in the documentation of that file. # The default value is: YES. -SHOW_INCLUDE_FILES = NO +SHOW_INCLUDE_FILES = NO # If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each # grouped member an include statement to the documentation, telling the reader @@ -526,7 +526,7 @@ INLINE_INFO = YES # name. If set to NO the members will appear in declaration order. # The default value is: YES. -SORT_MEMBER_DOCS = NO +SORT_MEMBER_DOCS = NO # If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief # descriptions of file, namespace and class members alphabetically by member @@ -606,7 +606,7 @@ GENERATE_DEPRECATEDLIST= YES # sections, marked by \if ... \endif and \cond # ... \endcond blocks. -ENABLED_SECTIONS = +ENABLED_SECTIONS = # The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the # initial value of a variable or macro / define can have for it to appear in the @@ -624,14 +624,14 @@ MAX_INITIALIZER_LINES = 30 # will mention the files that were used to generate the documentation. # The default value is: YES. -SHOW_USED_FILES = NO +SHOW_USED_FILES = NO # Set the SHOW_FILES tag to NO to disable the generation of the Files page. This # will remove the Files entry from the Quick Index and from the Folder Tree View # (if specified). # The default value is: YES. -SHOW_FILES = NO +SHOW_FILES = NO # Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces # page. This will remove the Namespaces entry from the Quick Index and from the @@ -648,7 +648,7 @@ SHOW_NAMESPACES = YES # by doxygen. Whatever the program writes to standard output is used as the file # version. For an example see the documentation. -FILE_VERSION_FILTER = +FILE_VERSION_FILTER = # The LAYOUT_FILE tag can be used to specify a layout file which will be parsed # by doxygen. The layout file controls the global structure of the generated @@ -661,7 +661,7 @@ FILE_VERSION_FILTER = # DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE # tag is left empty. -LAYOUT_FILE = +LAYOUT_FILE = # The CITE_BIB_FILES tag can be used to specify one or more bib files containing # the reference definitions. This must be a list of .bib files. The .bib @@ -672,7 +672,7 @@ LAYOUT_FILE = # search path. Do not use file names with spaces, bibtex cannot handle them. See # also \cite for info how to create references. -CITE_BIB_FILES = +CITE_BIB_FILES = #--------------------------------------------------------------------------- # Configuration options related to warning and progress messages @@ -743,55 +743,57 @@ WARN_LOGFILE = $(OPENAIR_TARGETS)/bin/doxy.log # spaces. # Note: If this tag is empty the current directory is searched. -INPUT = $(OPENAIR1_DIR)/PHY/defs.h \ - $(OPENAIR1_DIR)/PHY/impl_defs_top.h \ - $(OPENAIR1_DIR)/PHY/impl_defs_lte.h \ - $(OPENAIR1_DIR)/PHY/CODING/defs.h \ - $(OPENAIR1_DIR)/PHY/INIT/defs.h \ - $(OPENAIR1_DIR)/PHY/TOOLS/defs.h \ - $(OPENAIR1_DIR)/PHY/LTE_TRANSPORT/defs.h \ - $(OPENAIR1_DIR)/PHY/LTE_TRANSPORT/proto.h \ - $(OPENAIR1_DIR)/PHY/LTE_TRANSPORT/dci.h \ - $(OPENAIR1_DIR)/PHY/MODULATION/defs.h \ - $(OPENAIR1_DIR)/PHY/LTE_ESTIMATION/defs.h \ - $(OPENAIR1_DIR)/SCHED/defs.h \ - $(OPENAIR1_DIR)/SIMULATION/RF/defs.h \ - $(OPENAIR1_DIR)/SIMULATION/TOOLS/defs.h \ - $(OPENAIR2_DIR)/RRC/LITE/defs.h \ - $(OPENAIR2_DIR)/RRC/LITE/rrc_eNB_S1AP.h \ - $(OPENAIR2_DIR)/RRC/LITE/rrc_eNB_GTPV1U.h \ - $(OPENAIR2_DIR)/LAYER2/PDCP_v10.1.0/pdcp.h \ - $(OPENAIR2_DIR)/LAYER2/PDCP_v10.1.0/pdcp_control_primitives_proto_extern.h \ - $(OPENAIR2_DIR)/LAYER2/PDCP_v10.1.0/pdcp_primitives.h \ - $(OPENAIR2_DIR)/LAYER2/PDCP_v10.1.0/pdcp_proto_extern.h \ - $(OPENAIR2_DIR)/LAYER2/PDCP_v10.1.0/pdcp_sequence_manager.h \ - $(OPENAIR2_DIR)/LAYER2/PDCP_v10.1.0/pdcp_util.h \ - $(OPENAIR2_DIR)/COMMON/platform_constants.h \ - $(OPENAIR1_DIR)/MAC_INTERFACE/defs.h \ - $(OPENAIR2_DIR)/LAYER2/MAC/defs.h \ - $(OPENAIR2_DIR)/LAYER2/MAC/proto.h \ - $(OPENAIR2_DIR)/LAYER2/RLC/rlc.h \ - $(OPENAIR2_DIR)/LAYER2/RLC/AM_v9.3.0/rlc_am.h \ - $(OPENAIR2_DIR)/LAYER2/RLC/AM_v9.3.0/rlc_am_constants.h \ - $(OPENAIR2_DIR)/LAYER2/RLC/AM_v9.3.0/rlc_am_structs.h \ - $(OPENAIR2_DIR)/LAYER2/RLC/AM_v9.3.0/rlc_am_entity.h \ - $(OPENAIR2_DIR)/LAYER2/RLC/AM_v9.3.0/rlc_am_in_sdu.h \ - $(OPENAIR2_DIR)/LAYER2/RLC/AM_v9.3.0/rlc_am_reassembly.h \ - $(OPENAIR2_DIR)/LAYER2/RLC/AM_v9.3.0/rlc_am_receiver.h \ - $(OPENAIR2_DIR)/LAYER2/RLC/AM_v9.3.0/rlc_am_retransmit.h \ - $(OPENAIR2_DIR)/LAYER2/RLC/AM_v9.3.0/rlc_am_rx_list.h \ - $(OPENAIR2_DIR)/LAYER2/RLC/AM_v9.3.0/rlc_am_segment.h \ - $(OPENAIR2_DIR)/LAYER2/RLC/AM_v9.3.0/rlc_am_segments_holes.h \ - $(OPENAIR2_DIR)/LAYER2/RLC/AM_v9.3.0/rlc_am_status_report.h \ - $(OPENAIR2_DIR)/LAYER2/RLC/AM_v9.3.0/rlc_am_timer_poll_retransmit.h \ - $(OPENAIR2_DIR)/LAYER2/RLC/AM_v9.3.0/rlc_am_timer_reordering.h \ - $(OPENAIR2_DIR)/LAYER2/RLC/AM_v9.3.0/rlc_am_timer_status_prohibit.h \ - $(OPENAIR2_DIR)/LAYER2/RLC/AM_v9.3.0/rlc_am_windows.h \ - $(OPENAIR2_DIR)/PHY_INTERFACE/defs.h \ - $(OPENAIR2_DIR)/LAYER2/RLC/UM_v9.3.0/rlc_um.h \ - $(OPENAIR2_DIR)/LAYER2/RLC/UM_v9.3.0/rlc_um_entity.h \ - $(OPENAIR2_DIR)/NAS/DRIVER/MESH/proto_extern.h - +INPUT = $(OPENAIR1_DIR)/PHY/defs.h \ + $(OPENAIR1_DIR)/PHY/impl_defs_top.h \ + $(OPENAIR1_DIR)/PHY/impl_defs_lte.h \ + $(OPENAIR1_DIR)/PHY/CODING/defs.h \ + $(OPENAIR1_DIR)/PHY/INIT/defs.h \ + $(OPENAIR1_DIR)/PHY/TOOLS/defs.h \ + $(OPENAIR1_DIR)/PHY/LTE_TRANSPORT/defs.h \ + $(OPENAIR1_DIR)/PHY/LTE_TRANSPORT/proto.h \ + $(OPENAIR1_DIR)/PHY/LTE_TRANSPORT/dci.h \ + $(OPENAIR1_DIR)/PHY/MODULATION/defs.h \ + $(OPENAIR1_DIR)/PHY/LTE_ESTIMATION/defs.h \ + $(OPENAIR1_DIR)/SCHED/defs.h \ + $(OPENAIR1_DIR)/SIMULATION/RF/defs.h \ + $(OPENAIR1_DIR)/SIMULATION/TOOLS/defs.h \ + $(OPENAIR2_DIR)/ENB_APP/enb_config.h \ + $(OPENAIR2_DIR)/RRC/LITE/defs.h \ + $(OPENAIR2_DIR)/RRC/LITE/proto.h \ + $(OPENAIR2_DIR)/RRC/LITE/rrc_eNB_S1AP.h \ + $(OPENAIR2_DIR)/RRC/LITE/rrc_eNB_GTPV1U.h \ + $(OPENAIR2_DIR)/LAYER2/PDCP_v10.1.0/pdcp.h \ + $(OPENAIR2_DIR)/LAYER2/PDCP_v10.1.0/pdcp_control_primitives_proto_extern.h \ + $(OPENAIR2_DIR)/LAYER2/PDCP_v10.1.0/pdcp_primitives.h \ + $(OPENAIR2_DIR)/LAYER2/PDCP_v10.1.0/pdcp_proto_extern.h \ + $(OPENAIR2_DIR)/LAYER2/PDCP_v10.1.0/pdcp_sequence_manager.h \ + $(OPENAIR2_DIR)/LAYER2/PDCP_v10.1.0/pdcp_util.h \ + $(OPENAIR2_DIR)/COMMON/platform_constants.h \ + $(OPENAIR1_DIR)/MAC_INTERFACE/defs.h \ + $(OPENAIR2_DIR)/LAYER2/MAC/defs.h \ + $(OPENAIR2_DIR)/LAYER2/MAC/proto.h \ + $(OPENAIR2_DIR)/LAYER2/RLC/rlc.h \ + $(OPENAIR2_DIR)/LAYER2/RLC/AM_v9.3.0/rlc_am.h \ + $(OPENAIR2_DIR)/LAYER2/RLC/AM_v9.3.0/rlc_am_constants.h \ + $(OPENAIR2_DIR)/LAYER2/RLC/AM_v9.3.0/rlc_am_structs.h \ + $(OPENAIR2_DIR)/LAYER2/RLC/AM_v9.3.0/rlc_am_entity.h \ + $(OPENAIR2_DIR)/LAYER2/RLC/AM_v9.3.0/rlc_am_in_sdu.h \ + $(OPENAIR2_DIR)/LAYER2/RLC/AM_v9.3.0/rlc_am_reassembly.h \ + $(OPENAIR2_DIR)/LAYER2/RLC/AM_v9.3.0/rlc_am_receiver.h \ + $(OPENAIR2_DIR)/LAYER2/RLC/AM_v9.3.0/rlc_am_retransmit.h \ + $(OPENAIR2_DIR)/LAYER2/RLC/AM_v9.3.0/rlc_am_rx_list.h \ + $(OPENAIR2_DIR)/LAYER2/RLC/AM_v9.3.0/rlc_am_segment.h \ + $(OPENAIR2_DIR)/LAYER2/RLC/AM_v9.3.0/rlc_am_segments_holes.h \ + $(OPENAIR2_DIR)/LAYER2/RLC/AM_v9.3.0/rlc_am_status_report.h \ + $(OPENAIR2_DIR)/LAYER2/RLC/AM_v9.3.0/rlc_am_timer_poll_retransmit.h \ + $(OPENAIR2_DIR)/LAYER2/RLC/AM_v9.3.0/rlc_am_timer_reordering.h \ + $(OPENAIR2_DIR)/LAYER2/RLC/AM_v9.3.0/rlc_am_timer_status_prohibit.h \ + $(OPENAIR2_DIR)/LAYER2/RLC/AM_v9.3.0/rlc_am_windows.h \ + $(OPENAIR2_DIR)/PHY_INTERFACE/defs.h \ + $(OPENAIR2_DIR)/LAYER2/RLC/UM_v9.3.0/rlc_um.h \ + $(OPENAIR2_DIR)/LAYER2/RLC/UM_v9.3.0/rlc_um_entity.h \ + $(OPENAIR2_DIR)/NETWORK_DRIVER/MESH/proto_extern.h \ + $(OPENAIR_TARGETS)/ARCH/COMMON/common_lib.h # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses @@ -826,7 +828,7 @@ RECURSIVE = NO # Note that relative paths are relative to the directory from which doxygen is # run. -EXCLUDE = +EXCLUDE = # The EXCLUDE_SYMLINKS tag can be used to select whether or not files or # directories that are symbolic links (a Unix file system feature) are excluded @@ -842,7 +844,7 @@ EXCLUDE_SYMLINKS = NO # Note that the wildcards are matched against the file with absolute path, so to # exclude all test directories for example use the pattern */test/* -EXCLUDE_PATTERNS = +EXCLUDE_PATTERNS = # The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names # (namespaces, classes, functions, etc.) that should be excluded from the @@ -853,20 +855,20 @@ EXCLUDE_PATTERNS = # Note that the wildcards are matched against the file with absolute path, so to # exclude all test directories use the pattern */test/* -EXCLUDE_SYMBOLS = +EXCLUDE_SYMBOLS = # The EXAMPLE_PATH tag can be used to specify one or more files or directories # that contain example code fragments that are included (see the \include # command). -EXAMPLE_PATH = +EXAMPLE_PATH = # If the value of the EXAMPLE_PATH tag contains directories, you can use the # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and # *.h) to filter out the source-files in the directories. If left blank all # files are included. -EXAMPLE_PATTERNS = +EXAMPLE_PATTERNS = # If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be # searched for input files to be used with the \include or \dontinclude commands @@ -896,7 +898,7 @@ IMAGE_PATH = $(OPENAIR_TARGETS)/DOCS/images # code is scanned, but not when the output code is generated. If lines are added # or removed, the anchors will not be placed correctly. -INPUT_FILTER = +INPUT_FILTER = # The FILTER_PATTERNS tag can be used to specify filters on a per file pattern # basis. Doxygen will compare the file name with each pattern and apply the @@ -905,7 +907,7 @@ INPUT_FILTER = # filters are used. If the FILTER_PATTERNS tag is empty or if none of the # patterns match the file name, INPUT_FILTER is applied. -FILTER_PATTERNS = +FILTER_PATTERNS = # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using # INPUT_FILTER ) will also be used to filter the input files that are used for @@ -920,14 +922,14 @@ FILTER_SOURCE_FILES = NO # *.ext= (so without naming a filter). # This tag requires that the tag FILTER_SOURCE_FILES is set to YES. -FILTER_SOURCE_PATTERNS = +FILTER_SOURCE_PATTERNS = # If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that # is part of the input, its contents will be placed on the main page # (index.html). This can be useful if you have a project on for instance GitHub # and want to reuse the introduction page also for the doxygen output. -USE_MDFILE_AS_MAINPAGE = +USE_MDFILE_AS_MAINPAGE = #--------------------------------------------------------------------------- # Configuration options related to source browsing @@ -940,7 +942,7 @@ USE_MDFILE_AS_MAINPAGE = # also VERBATIM_HEADERS is set to NO. # The default value is: NO. -SOURCE_BROWSER = NO +SOURCE_BROWSER = YES # Setting the INLINE_SOURCES tag to YES will include the body of functions, # classes and enums directly into the documentation. @@ -1039,7 +1041,7 @@ COLS_IN_ALPHA_INDEX = 5 # while generating the index headers. # This tag requires that the tag ALPHABETICAL_INDEX is set to YES. -IGNORE_PREFIX = +IGNORE_PREFIX = #--------------------------------------------------------------------------- # Configuration options related to the HTML output @@ -1083,7 +1085,7 @@ HTML_FILE_EXTENSION = .html # of the possible markers and block names see the documentation. # This tag requires that the tag GENERATE_HTML is set to YES. -HTML_HEADER = +HTML_HEADER = # The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each # generated HTML page. If the tag is left blank doxygen will generate a standard @@ -1093,7 +1095,7 @@ HTML_HEADER = # that doxygen normally uses. # This tag requires that the tag GENERATE_HTML is set to YES. -HTML_FOOTER = +HTML_FOOTER = # The HTML_STYLESHEET tag can be used to specify a user-defined cascading style # sheet that is used by each HTML page. It can be used to fine-tune the look of @@ -1105,7 +1107,7 @@ HTML_FOOTER = # obsolete. # This tag requires that the tag GENERATE_HTML is set to YES. -HTML_STYLESHEET = +HTML_STYLESHEET = # The HTML_EXTRA_STYLESHEET tag can be used to specify an additional user- # defined cascading style sheet that is included after the standard style sheets @@ -1116,7 +1118,7 @@ HTML_STYLESHEET = # see the documentation. # This tag requires that the tag GENERATE_HTML is set to YES. -HTML_EXTRA_STYLESHEET = +HTML_EXTRA_STYLESHEET = # The HTML_EXTRA_FILES tag can be used to specify one or more extra images or # other source files which should be copied to the HTML output directory. Note @@ -1126,7 +1128,7 @@ HTML_EXTRA_STYLESHEET = # files will be copied as-is; there are no commands or markers available. # This tag requires that the tag GENERATE_HTML is set to YES. -HTML_EXTRA_FILES = +HTML_EXTRA_FILES = # The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen # will adjust the colors in the stylesheet and background images according to @@ -1262,7 +1264,7 @@ CHM_FILE = irs_openair.chm # The file has to be specified with full path. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. -HHC_LOCATION = +HHC_LOCATION = # The GENERATE_CHI flag controls if a separate .chi index file is generated ( # YES) or that it should be included in the master .chm file ( NO). @@ -1275,7 +1277,7 @@ GENERATE_CHI = NO # and project file content. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. -CHM_INDEX_ENCODING = +CHM_INDEX_ENCODING = # The BINARY_TOC flag controls whether a binary table of contents is generated ( # YES) or a normal table of contents ( NO) in the .chm file. @@ -1305,7 +1307,7 @@ GENERATE_QHP = NO # the HTML output folder. # This tag requires that the tag GENERATE_QHP is set to YES. -QCH_FILE = +QCH_FILE = # The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help # Project output. For more information please see Qt Help Project / Namespace @@ -1330,7 +1332,7 @@ QHP_VIRTUAL_FOLDER = doc # filters). # This tag requires that the tag GENERATE_QHP is set to YES. -QHP_CUST_FILTER_NAME = +QHP_CUST_FILTER_NAME = # The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the # custom filter to add. For more information please see Qt Help Project / Custom @@ -1338,21 +1340,21 @@ QHP_CUST_FILTER_NAME = # filters). # This tag requires that the tag GENERATE_QHP is set to YES. -QHP_CUST_FILTER_ATTRS = +QHP_CUST_FILTER_ATTRS = # The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this # project's filter section matches. Qt Help Project / Filter Attributes (see: # http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). # This tag requires that the tag GENERATE_QHP is set to YES. -QHP_SECT_FILTER_ATTRS = +QHP_SECT_FILTER_ATTRS = # The QHG_LOCATION tag can be used to specify the location of Qt's # qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the # generated .qhp file. # This tag requires that the tag GENERATE_QHP is set to YES. -QHG_LOCATION = +QHG_LOCATION = # If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be # generated, together with the HTML files, they form an Eclipse help plugin. To @@ -1485,7 +1487,7 @@ MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest # MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols # This tag requires that the tag USE_MATHJAX is set to YES. -MATHJAX_EXTENSIONS = +MATHJAX_EXTENSIONS = # The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces # of code that will be used on startup of the MathJax code. See the MathJax site @@ -1493,7 +1495,7 @@ MATHJAX_EXTENSIONS = # example see the documentation. # This tag requires that the tag USE_MATHJAX is set to YES. -MATHJAX_CODEFILE = +MATHJAX_CODEFILE = # When the SEARCHENGINE tag is enabled doxygen will generate a search box for # the HTML output. The underlying search engine uses javascript and DHTML and @@ -1553,7 +1555,7 @@ EXTERNAL_SEARCH = NO # Searching" for details. # This tag requires that the tag SEARCHENGINE is set to YES. -SEARCHENGINE_URL = +SEARCHENGINE_URL = # When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed # search data is written to a file for indexing by an external tool. With the @@ -1569,7 +1571,7 @@ SEARCHDATA_FILE = searchdata.xml # projects and redirect the results back to the right project. # This tag requires that the tag SEARCHENGINE is set to YES. -EXTERNAL_SEARCH_ID = +EXTERNAL_SEARCH_ID = # The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen # projects other than the one defined by this configuration file, but that are @@ -1579,7 +1581,7 @@ EXTERNAL_SEARCH_ID = # EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ... # This tag requires that the tag SEARCHENGINE is set to YES. -EXTRA_SEARCH_MAPPINGS = +EXTRA_SEARCH_MAPPINGS = #--------------------------------------------------------------------------- # Configuration options related to the LaTeX output @@ -1588,7 +1590,7 @@ EXTRA_SEARCH_MAPPINGS = # If the GENERATE_LATEX tag is set to YES doxygen will generate LaTeX output. # The default value is: YES. -GENERATE_LATEX = NO +GENERATE_LATEX = NO # The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. If a # relative path is entered the value of OUTPUT_DIRECTORY will be put in front of @@ -1640,7 +1642,8 @@ PAPER_TYPE = a4 # If left blank no extra packages will be included. # This tag requires that the tag GENERATE_LATEX is set to YES. -EXTRA_PACKAGES = amsmath amssymb +EXTRA_PACKAGES = amsmath \ + amssymb # The LATEX_HEADER tag can be used to specify a personal LaTeX header for the # generated LaTeX document. The header should contain everything until the first @@ -1665,7 +1668,7 @@ LATEX_HEADER = $(OPENAIR_TARGETS)/DOCS/openair_header.tex # Note: Only use a user-defined footer if you know what you are doing! # This tag requires that the tag GENERATE_LATEX is set to YES. -LATEX_FOOTER = +LATEX_FOOTER = # The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or # other source files which should be copied to the LATEX_OUTPUT output @@ -1673,7 +1676,7 @@ LATEX_FOOTER = # markers available. # This tag requires that the tag GENERATE_LATEX is set to YES. -LATEX_EXTRA_FILES = +LATEX_EXTRA_FILES = # If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is # prepared for conversion to PDF (using ps2pdf or pdflatex). The PDF file will @@ -1773,14 +1776,14 @@ RTF_HYPERLINKS = NO # default style sheet that doxygen normally uses. # This tag requires that the tag GENERATE_RTF is set to YES. -RTF_STYLESHEET_FILE = +RTF_STYLESHEET_FILE = # Set optional variables used in the generation of an RTF document. Syntax is # similar to doxygen's config file. A template extensions file can be generated # using doxygen -e rtf extensionFile. # This tag requires that the tag GENERATE_RTF is set to YES. -RTF_EXTENSIONS_FILE = +RTF_EXTENSIONS_FILE = #--------------------------------------------------------------------------- # Configuration options related to the man page output @@ -1841,13 +1844,13 @@ XML_OUTPUT = xml # validating XML parser to check the syntax of the XML files. # This tag requires that the tag GENERATE_XML is set to YES. -XML_SCHEMA = +XML_SCHEMA = # The XML_DTD tag can be used to specify a XML DTD, which can be used by a # validating XML parser to check the syntax of the XML files. # This tag requires that the tag GENERATE_XML is set to YES. -XML_DTD = +XML_DTD = # If the XML_PROGRAMLISTING tag is set to YES doxygen will dump the program # listings (including syntax highlighting and cross-referencing information) to @@ -1924,7 +1927,7 @@ PERLMOD_PRETTY = YES # overwrite each other's variables. # This tag requires that the tag GENERATE_PERLMOD is set to YES. -PERLMOD_MAKEVAR_PREFIX = +PERLMOD_MAKEVAR_PREFIX = #--------------------------------------------------------------------------- # Configuration options related to the preprocessor @@ -1965,7 +1968,7 @@ SEARCH_INCLUDES = YES # preprocessor. # This tag requires that the tag SEARCH_INCLUDES is set to YES. -INCLUDE_PATH = +INCLUDE_PATH = # You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard # patterns (like *.h and *.hpp) to filter out the header-files in the @@ -1973,7 +1976,7 @@ INCLUDE_PATH = # used. # This tag requires that the tag ENABLE_PREPROCESSING is set to YES. -INCLUDE_FILE_PATTERNS = +INCLUDE_FILE_PATTERNS = # The PREDEFINED tag can be used to specify one or more macro names that are # defined before the preprocessor is started (similar to the -D option of e.g. @@ -1983,8 +1986,80 @@ INCLUDE_FILE_PATTERNS = # recursively expanded use the := operator instead of the = operator. # This tag requires that the tag ENABLE_PREPROCESSING is set to YES. -PREDEFINED = OPENAIR_LTE=1 RLC_MODULE=1 RLC_C=1 RLC_MAC_C=1 RLC_RRC_C=1 RLC_AM_C=1 RLC_AM_MODULE=1 RLC_AM_REASSEMBLY_C=1 RLC_AM_IN_SDU_C=1 RLC_AM_RETRANSMIT_C=1 RLC_AM_RX_LIST_C=1 RLC_AM_SEGMENT_C=1 RLC_AM_SEGMENT_HOLES_C=1 RLC_AM_STATUS_REPORT_C=1 RLC_AM_TIMER_POLL_RETRANSMIT_C=1 RLC_AM_TIMER_POLL_REORDERING_C=1 RLC_AM_TIMER_STATUS_PROHIBIT_C=1 RLC_AM_WINDOWS_C=1 RLC_UM_MODULE=1 RLC_UM_C=1 RLC_TM_MODULE=1 RLC_UM_C=1 public_rlc(x)=x protected_rlc private_rlc(x)=x public_rlc_mac(x)=x protected_rlc_mac(x)=x private_rlc_mac(x)=x public_rlc_rrc(x)=x protected_rlc_rrc(x)=x private_rlc_rrc(x)=x public_rlc_am(x)=x protected_rlc_am(x)=x private_rlc_am(x)=x public_rlc_am_reassembly(x)=x protected_rlc_am_reassembly(x)=x private_rlc_am_reassembly(x)=x public_rlc_am_in_sdu(x)=x protected_rlc_am_in_sdu(x)=x private_rlc_am_in_sdu(x)=x private_rlc_am_receiver(x)=x protected_rlc_am_receiver(x)=x public_rlc_am_receiver(x)=x private_rlc_am_retransmit(x)=x protected_rlc_am_retransmit(x)=x public_rlc_am_retransmit(x)=x private_rlc_am_rx_list(x)=x protected_rlc_am_rx_list(x)=x public_rlc_am_rx_list(x)=x private_rlc_am_segment(x)=x protected_rlc_am_segment(x)=x public_rlc_am_segment(x)=x private_rlc_am_segments_holes(x)=x protected_rlc_am_segments_holes(x)=x public_rlc_am_segments_holes(x)=x private_rlc_am_status_report(x)=x protected_rlc_am_status_report(x)=x public_rlc_am_status_report(x)=x private_rlc_am_timer_poll_retransmit(x)=x protected_rlc_am_timer_poll_retransmit(x)=x public_rlc_am_timer_poll_retransmit(x)=x private_rlc_am_timer_reordering(x)=x protected_rlc_am_timer_reordering(x)=x public_rlc_am_timer_reordering(x)=x private_rlc_am_timer_status_prohibit(x)=x protected_rlc_am_timer_status_prohibit(x)=x public_rlc_am_timer_status_prohibit(x)=x private_rlc_am_windows(x)=x protected_rlc_am_windows(x)=x public_rlc_am_windows(x)=x public_rlc_um(x)=x protected_rlc_um(x)=x private_rlc_um(x)=x - +PREDEFINED = OPENAIR_LTE=1 \ + RLC_MODULE=1 \ + RLC_C=1 \ + RLC_MAC_C=1 \ + RLC_RRC_C=1 \ + RLC_AM_C=1 \ + RLC_AM_MODULE=1 \ + RLC_AM_REASSEMBLY_C=1 \ + RLC_AM_IN_SDU_C=1 \ + RLC_AM_RETRANSMIT_C=1 \ + RLC_AM_RX_LIST_C=1 \ + RLC_AM_SEGMENT_C=1 \ + RLC_AM_SEGMENT_HOLES_C=1 \ + RLC_AM_STATUS_REPORT_C=1 \ + RLC_AM_TIMER_POLL_RETRANSMIT_C=1 \ + RLC_AM_TIMER_POLL_REORDERING_C=1 \ + RLC_AM_TIMER_STATUS_PROHIBIT_C=1 \ + RLC_AM_WINDOWS_C=1 \ + RLC_UM_MODULE=1 \ + RLC_UM_C=1 \ + RLC_TM_MODULE=1 \ + RLC_UM_C=1 \ + public_rlc(x)=x \ + protected_rlc \ + private_rlc(x)=x \ + public_rlc_mac(x)=x \ + protected_rlc_mac(x)=x \ + private_rlc_mac(x)=x \ + public_rlc_rrc(x)=x \ + protected_rlc_rrc(x)=x \ + private_rlc_rrc(x)=x \ + public_rlc_am(x)=x \ + protected_rlc_am(x)=x \ + private_rlc_am(x)=x \ + public_rlc_am_reassembly(x)=x \ + protected_rlc_am_reassembly(x)=x \ + private_rlc_am_reassembly(x)=x \ + public_rlc_am_in_sdu(x)=x \ + protected_rlc_am_in_sdu(x)=x \ + private_rlc_am_in_sdu(x)=x \ + private_rlc_am_receiver(x)=x \ + protected_rlc_am_receiver(x)=x \ + public_rlc_am_receiver(x)=x \ + private_rlc_am_retransmit(x)=x \ + protected_rlc_am_retransmit(x)=x \ + public_rlc_am_retransmit(x)=x \ + private_rlc_am_rx_list(x)=x \ + protected_rlc_am_rx_list(x)=x \ + public_rlc_am_rx_list(x)=x \ + private_rlc_am_segment(x)=x \ + protected_rlc_am_segment(x)=x \ + public_rlc_am_segment(x)=x \ + private_rlc_am_segments_holes(x)=x \ + protected_rlc_am_segments_holes(x)=x \ + public_rlc_am_segments_holes(x)=x \ + private_rlc_am_status_report(x)=x \ + protected_rlc_am_status_report(x)=x \ + public_rlc_am_status_report(x)=x \ + private_rlc_am_timer_poll_retransmit(x)=x \ + protected_rlc_am_timer_poll_retransmit(x)=x \ + public_rlc_am_timer_poll_retransmit(x)=x \ + private_rlc_am_timer_reordering(x)=x \ + protected_rlc_am_timer_reordering(x)=x \ + public_rlc_am_timer_reordering(x)=x \ + private_rlc_am_timer_status_prohibit(x)=x \ + protected_rlc_am_timer_status_prohibit(x)=x \ + public_rlc_am_timer_status_prohibit(x)=x \ + private_rlc_am_windows(x)=x \ + protected_rlc_am_windows(x)=x \ + public_rlc_am_windows(x)=x \ + public_rlc_um(x)=x \ + protected_rlc_um(x)=x \ + private_rlc_um(x)=x \ + __attribute__(x)= # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this # tag can be used to specify a list of macro names that should be expanded. The @@ -1993,7 +2068,57 @@ PREDEFINED = OPENAIR_LTE=1 RLC_MODULE=1 RLC_C=1 RLC_MAC_C=1 RLC_RRC_ # definition found in the source code. # This tag requires that the tag ENABLE_PREPROCESSING is set to YES. -EXPAND_AS_DEFINED = public_rlc(x)=x protected_rlc(x)=x private_rlc(x)=x public_rlc_mac(x)=x protected_rlc_mac(x)=x private_rlc_mac(x)=x public_rlc_rrc(x)=x protected_rlc_rrc(x)=x private_rlc_rrc(x)=x public_rlc_am(x)=x protected_rlc_am(x)=x private_rlc_am(x)=x public_rlc_am_reassembly(x)=x protected_rlc_am_reassembly(x)=x private_rlc_am_reassembly(x)=x public_rlc_am_in_sdu(x)=x protected_rlc_am_in_sdu(x)=x private_rlc_am_in_sdu(x)=x private_rlc_am_receiver(x)=x protected_rlc_am_receiver(x)=x public_rlc_am_receiver(x)=x private_rlc_am_retransmit(x)=x protected_rlc_am_retransmit(x)=x public_rlc_am_retransmit(x)=x private_rlc_am_rx_list(x)=x protected_rlc_am_rx_list(x)=x public_rlc_am_rx_list(x)=x private_rlc_am_segment(x)=x protected_rlc_am_segment(x)=x public_rlc_am_segment(x)=x private_rlc_am_segments_holes(x)=x protected_rlc_am_segments_holes(x)=x public_rlc_am_segments_holes(x)=x private_rlc_am_status_report(x)=x protected_rlc_am_status_report(x)=x public_rlc_am_status_report(x)=x private_rlc_am_timer_poll_retransmit(x)=x protected_rlc_am_timer_poll_retransmit(x)=x public_rlc_am_timer_poll_retransmit(x)=x private_rlc_am_timer_reordering(x)=x protected_rlc_am_timer_reordering(x)=x public_rlc_am_timer_reordering(x)=x private_rlc_am_timer_status_prohibit(x)=x protected_rlc_am_timer_status_prohibit(x)=x public_rlc_am_timer_status_prohibit(x)=x private_rlc_am_windows(x)=x protected_rlc_am_windows(x)=x public_rlc_am_windows(x)=x public_rlc_um(x)=x protected_rlc_um(x)=x private_rlc_um(x)=x +EXPAND_AS_DEFINED = public_rlc(x)=x \ + protected_rlc(x)=x \ + private_rlc(x)=x \ + public_rlc_mac(x)=x \ + protected_rlc_mac(x)=x \ + private_rlc_mac(x)=x \ + public_rlc_rrc(x)=x \ + protected_rlc_rrc(x)=x \ + private_rlc_rrc(x)=x \ + public_rlc_am(x)=x \ + protected_rlc_am(x)=x \ + private_rlc_am(x)=x \ + public_rlc_am_reassembly(x)=x \ + protected_rlc_am_reassembly(x)=x \ + private_rlc_am_reassembly(x)=x \ + public_rlc_am_in_sdu(x)=x \ + protected_rlc_am_in_sdu(x)=x \ + private_rlc_am_in_sdu(x)=x \ + private_rlc_am_receiver(x)=x \ + protected_rlc_am_receiver(x)=x \ + public_rlc_am_receiver(x)=x \ + private_rlc_am_retransmit(x)=x \ + protected_rlc_am_retransmit(x)=x \ + public_rlc_am_retransmit(x)=x \ + private_rlc_am_rx_list(x)=x \ + protected_rlc_am_rx_list(x)=x \ + public_rlc_am_rx_list(x)=x \ + private_rlc_am_segment(x)=x \ + protected_rlc_am_segment(x)=x \ + public_rlc_am_segment(x)=x \ + private_rlc_am_segments_holes(x)=x \ + protected_rlc_am_segments_holes(x)=x \ + public_rlc_am_segments_holes(x)=x \ + private_rlc_am_status_report(x)=x \ + protected_rlc_am_status_report(x)=x \ + public_rlc_am_status_report(x)=x \ + private_rlc_am_timer_poll_retransmit(x)=x \ + protected_rlc_am_timer_poll_retransmit(x)=x \ + public_rlc_am_timer_poll_retransmit(x)=x \ + private_rlc_am_timer_reordering(x)=x \ + protected_rlc_am_timer_reordering(x)=x \ + public_rlc_am_timer_reordering(x)=x \ + private_rlc_am_timer_status_prohibit(x)=x \ + protected_rlc_am_timer_status_prohibit(x)=x \ + public_rlc_am_timer_status_prohibit(x)=x \ + private_rlc_am_windows(x)=x \ + protected_rlc_am_windows(x)=x \ + public_rlc_am_windows(x)=x \ + public_rlc_um(x)=x \ + protected_rlc_um(x)=x \ + private_rlc_um(x)=x # If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will # remove all refrences to function-like macros that are alone on a line, have an @@ -2022,13 +2147,13 @@ SKIP_FUNCTION_MACROS = YES # the path). If a tag file is not located in the directory in which doxygen is # run, you must also specify the path to the tagfile here. -TAGFILES = +TAGFILES = # When a file name is specified after GENERATE_TAGFILE, doxygen will create a # tag file that is based on the input files it reads. See section "Linking to # external documentation" for more information about the usage of tag files. -GENERATE_TAGFILE = +GENERATE_TAGFILE = # If the ALLEXTERNALS tag is set to YES all external class will be listed in the # class index. If set to NO only the inherited external classes will be listed. @@ -2076,14 +2201,14 @@ CLASS_DIAGRAMS = NO # the mscgen tool resides. If left empty the tool is assumed to be found in the # default search path. -MSCGEN_PATH = +MSCGEN_PATH = # You can include diagrams made with dia in doxygen documentation. Doxygen will # then run dia to produce the diagram and insert it in the documentation. The # DIA_PATH tag allows you to specify the directory where the dia binary resides. # If left empty dia is assumed to be found in the default search path. -DIA_PATH = +DIA_PATH = # If set to YES, the inheritance and collaboration graphs will hide inheritance # and usage relations if the target is undocumented or is not a class. @@ -2132,7 +2257,7 @@ DOT_FONTSIZE = 10 # the path where dot can find it using this tag. # This tag requires that the tag HAVE_DOT is set to YES. -DOT_FONTPATH = +DOT_FONTPATH = # If the CLASS_GRAPH tag is set to YES then doxygen will generate a graph for # each documented class showing the direct and indirect inheritance relations. @@ -2277,19 +2402,19 @@ DOT_PATH = /usr/bin # command). # This tag requires that the tag HAVE_DOT is set to YES. -DOTFILE_DIRS = +DOTFILE_DIRS = # The MSCFILE_DIRS tag can be used to specify one or more directories that # contain msc files that are included in the documentation (see the \mscfile # command). -MSCFILE_DIRS = +MSCFILE_DIRS = # The DIAFILE_DIRS tag can be used to specify one or more directories that # contain dia files that are included in the documentation (see the \diafile # command). -DIAFILE_DIRS = +DIAFILE_DIRS = # The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of nodes # that will be shown in the graph. If the number of nodes in a graph becomes diff --git a/targets/DOCS/E-UTRAN_User_Guide.docx b/targets/DOCS/E-UTRAN_User_Guide.docx new file mode 100644 index 0000000000..824aa46e9a Binary files /dev/null and b/targets/DOCS/E-UTRAN_User_Guide.docx differ diff --git a/targets/DOCS/E-UTRAN_User_Guide.pdf b/targets/DOCS/E-UTRAN_User_Guide.pdf new file mode 100644 index 0000000000..5005692944 Binary files /dev/null and b/targets/DOCS/E-UTRAN_User_Guide.pdf differ diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band13.exmimo2.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band13.exmimo2.conf index aabbeec72d..e11e5e84ff 100644 --- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band13.exmimo2.conf +++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band13.exmimo2.conf @@ -5,8 +5,6 @@ Asn1_verbosity = "none"; eNBs = ( { - # real_time choice in {hard, rt-preempt, no} - real_time = "no"; ////////// Identification parameters: eNB_ID = 0xe00; @@ -103,6 +101,35 @@ eNBs = } ); + + srb1_parameters : + { + # timer_poll_retransmit = (ms) [5, 10, 15, 20,... 250, 300, 350, ... 500] + timer_poll_retransmit = 80; + + # timer_reordering = (ms) [0,5, ... 100, 110, 120, ... ,200] + timer_reordering = 35; + + # timer_reordering = (ms) [0,5, ... 250, 300, 350, ... ,500] + timer_status_prohibit = 0; + + # poll_pdu = [4, 8, 16, 32 , 64, 128, 256, infinity(>10000)] + poll_pdu = 4; + + # poll_byte = (kB) [25,50,75,100,125,250,375,500,750,1000,1250,1500,2000,3000,infinity(>10000)] + poll_byte = 99999; + + # max_retx_threshold = [1, 2, 3, 4 , 6, 8, 16, 32] + max_retx_threshold = 4; + } + + # ------- SCTP definitions + SCTP : + { + # Number of streams to use in input/output + SCTP_INSTREAMS = 2; + SCTP_OUTSTREAMS = 2; + }; ////////// MME parameters: mme_ip_address = ( { ipv4 = "192.168.13.11"; @@ -124,20 +151,20 @@ eNBs = log_config : { - global_log_level ="info"; - global_log_verbosity ="high"; - hw_log_level ="info"; - hw_log_verbosity ="high"; - phy_log_level ="info"; - phy_log_verbosity ="high"; - mac_log_level ="info"; - mac_log_verbosity ="high"; - rlc_log_level ="info"; - rlc_log_verbosity ="high"; - pdcp_log_level ="info"; - pdcp_log_verbosity ="high"; - rrc_log_level ="info"; - rrc_log_verbosity ="high"; + global_log_level ="info"; + global_log_verbosity ="high"; + hw_log_level ="info"; + hw_log_verbosity ="high"; + phy_log_level ="info"; + phy_log_verbosity ="high"; + mac_log_level ="info"; + mac_log_verbosity ="high"; + rlc_log_level ="info"; + rlc_log_verbosity ="high"; + pdcp_log_level ="info"; + pdcp_log_verbosity ="high"; + rrc_log_level ="info"; + rrc_log_verbosity ="high"; }; } diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band13.rel10.exmimo2.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band13.rel10.exmimo2.conf index 51b8c6aa8a..6298932c7b 100644 --- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band13.rel10.exmimo2.conf +++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band13.rel10.exmimo2.conf @@ -5,104 +5,132 @@ Asn1_verbosity = "none"; eNBs = ( { - # real_time choice in {hard, rt-preempt, no} - real_time = "no"; ////////// Identification parameters: eNB_ID = 0xe00; - + cell_type = "CELL_MACRO_ENB"; - + eNB_name = "eNB_Eurecom_LTEBox"; - + // Tracking area code, 0x0000 and 0xfffe are reserved values tracking_area_code = "1"; - + mobile_country_code = "208"; - + mobile_network_code = "92"; - + ////////// Physical parameters: - + component_carriers = ( - { - frame_type = "FDD"; - tdd_config = 3; - tdd_config_s = 0; - prefix_type = "NORMAL"; - eutra_band = 13; - downlink_frequency = 748500000L; - uplink_frequency_offset = 31000000; - - Nid_cell = 0; - N_RB_DL = 25; - Nid_cell_mbsfn = 0; - nb_antennas_tx = 1; - nb_antennas_rx = 1; - tx_gain = 2; - rx_gain = 2; - prach_root = 22; - prach_config_index = 0; - prach_high_speed = "DISABLE"; - prach_zero_correlation = 1; - prach_freq_offset = 2; - pucch_delta_shift = 1; - pucch_nRB_CQI = 1; - pucch_nCS_AN = 0; - pdsch_referenceSignalPower = -24; - pdsch_p_b = 0; - pusch_n_SB = 1; - pusch_enable64QAM = "DISABLE"; - pusch_hoppingMode = "interSubFrame"; - pusch_hoppingOffset = 0; - pusch_groupHoppingEnabled = "ENABLE"; - pusch_groupAssignment = 0; - pusch_sequenceHoppingEnabled = "DISABLE"; - pusch_nDMRS1 = 0; - phich_duration = "NORMAL"; - phich_resource = "ONESIXTH"; - srs_enable = "DISABLE"; - /* srs_BandwidthConfig =; - srs_SubframeConfig =; - srs_ackNackST =; - srs_MaxUpPts =;*/ + { + frame_type = "FDD"; + tdd_config = 3; + tdd_config_s = 0; + prefix_type = "NORMAL"; + eutra_band = 13; + downlink_frequency = 748500000L; + uplink_frequency_offset = 31000000; - pusch_p0_Nominal = -75; - pusch_alpha = "AL1"; - pucch_p0_Nominal = -108; - msg3_delta_Preamble = 6; - pucch_deltaF_Format1 = "deltaF2"; - pucch_deltaF_Format1b = "deltaF3"; - pucch_deltaF_Format2 = "deltaF0"; - pucch_deltaF_Format2a = "deltaF0"; - pucch_deltaF_Format2b = "deltaF0"; - - rach_numberOfRA_Preambles = 64; - rach_preamblesGroupAConfig = "DISABLE"; -/* - rach_sizeOfRA_PreamblesGroupA = ; - rach_messageSizeGroupA = ; - rach_messagePowerOffsetGroupB = ; -*/ - rach_powerRampingStep = 2; - rach_preambleInitialReceivedTargetPower = -100; - rach_preambleTransMax = 10; - rach_raResponseWindowSize = 10; - rach_macContentionResolutionTimer = 48; - rach_maxHARQ_Msg3Tx = 4; + Nid_cell = 0; + N_RB_DL = 25; + Nid_cell_mbsfn = 0; + nb_antennas_tx = 1; + nb_antennas_rx = 1; + tx_gain = 2; + rx_gain = 2; + prach_root = 22; + prach_config_index = 0; + prach_high_speed = "DISABLE"; + prach_zero_correlation = 1; + prach_freq_offset = 2; + pucch_delta_shift = 1; + pucch_nRB_CQI = 1; + pucch_nCS_AN = 0; + pdsch_referenceSignalPower = -24; + pdsch_p_b = 0; + pusch_n_SB = 1; + pusch_enable64QAM = "DISABLE"; + pusch_hoppingMode = "interSubFrame"; + pusch_hoppingOffset = 0; + pusch_groupHoppingEnabled = "ENABLE"; + pusch_groupAssignment = 0; + pusch_sequenceHoppingEnabled = "DISABLE"; + pusch_nDMRS1 = 0; + phich_duration = "NORMAL"; + phich_resource = "ONESIXTH"; + srs_enable = "DISABLE"; + /* srs_BandwidthConfig =; + srs_SubframeConfig =; + srs_ackNackST =; + srs_MaxUpPts =;*/ + + pusch_p0_Nominal = -75; + pusch_alpha = "AL1"; + pucch_p0_Nominal = -108; + msg3_delta_Preamble = 6; + pucch_deltaF_Format1 = "deltaF2"; + pucch_deltaF_Format1b = "deltaF3"; + pucch_deltaF_Format2 = "deltaF0"; + pucch_deltaF_Format2a = "deltaF0"; + pucch_deltaF_Format2b = "deltaF0"; + + rach_numberOfRA_Preambles = 64; + rach_preamblesGroupAConfig = "DISABLE"; + /* + rach_sizeOfRA_PreamblesGroupA = ; + rach_messageSizeGroupA = ; + rach_messagePowerOffsetGroupB = ; + */ + rach_powerRampingStep = 2; + rach_preambleInitialReceivedTargetPower = -100; + rach_preambleTransMax = 10; + rach_raResponseWindowSize = 10; + rach_macContentionResolutionTimer = 48; + rach_maxHARQ_Msg3Tx = 4; + + pcch_default_PagingCycle = 128; + pcch_nB = "oneT"; + bcch_modificationPeriodCoeff = 2; + ue_TimersAndConstants_t300 = 1000; + ue_TimersAndConstants_t301 = 1000; + ue_TimersAndConstants_t310 = 1000; + ue_TimersAndConstants_t311 = 10000; + ue_TimersAndConstants_n310 = 20; + ue_TimersAndConstants_n311 = 1; + } + ); + + + srb1_parameters : + { + # timer_poll_retransmit = (ms) [5, 10, 15, 20,... 250, 300, 350, ... 500] + timer_poll_retransmit = 80; + + # timer_reordering = (ms) [0,5, ... 100, 110, 120, ... ,200] + timer_reordering = 35; + + # timer_reordering = (ms) [0,5, ... 250, 300, 350, ... ,500] + timer_status_prohibit = 0; + + # poll_pdu = [4, 8, 16, 32 , 64, 128, 256, infinity(>10000)] + poll_pdu = 4; + + # poll_byte = (kB) [25,50,75,100,125,250,375,500,750,1000,1250,1500,2000,3000,infinity(>10000)] + poll_byte = 99999; + + # max_retx_threshold = [1, 2, 3, 4 , 6, 8, 16, 32] + max_retx_threshold = 4; + } + + # ------- SCTP definitions + SCTP : + { + # Number of streams to use in input/output + SCTP_INSTREAMS = 2; + SCTP_OUTSTREAMS = 2; + }; - pcch_default_PagingCycle = 128; - pcch_nB = "oneT"; - bcch_modificationPeriodCoeff = 2; - ue_TimersAndConstants_t300 = 1000; - ue_TimersAndConstants_t301 = 1000; - ue_TimersAndConstants_t310 = 1000; - ue_TimersAndConstants_t311 = 10000; - ue_TimersAndConstants_n310 = 20; - ue_TimersAndConstants_n311 = 1; - } - ); - ////////// MME parameters: mme_ip_address = ( { ipv4 = "192.168.13.11"; ipv6 = "192:168:30::17"; @@ -111,33 +139,32 @@ eNBs = } ); - NETWORK_INTERFACES : + NETWORK_INTERFACES : { - ENB_INTERFACE_NAME_FOR_S1_MME = "eth1"; - ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.13.171/24"; + ENB_INTERFACE_NAME_FOR_S1_MME = "eth1"; + ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.13.171/24"; - ENB_INTERFACE_NAME_FOR_S1U = "eth1"; - ENB_IPV4_ADDRESS_FOR_S1U = "192.168.13.171/24"; - ENB_PORT_FOR_S1U = 2152; # Spec 2152 + ENB_INTERFACE_NAME_FOR_S1U = "eth1"; + ENB_IPV4_ADDRESS_FOR_S1U = "192.168.13.171/24"; + ENB_PORT_FOR_S1U = 2152; # Spec 2152 }; - - log_config : + + log_config : { - global_log_level ="info"; - global_log_verbosity ="high"; - hw_log_level ="info"; - hw_log_verbosity ="high"; - phy_log_level ="info"; - phy_log_verbosity ="high"; - mac_log_level ="info"; - mac_log_verbosity ="high"; - rlc_log_level ="info"; - rlc_log_verbosity ="high"; - pdcp_log_level ="info"; - pdcp_log_verbosity ="high"; - rrc_log_level ="info"; - rrc_log_verbosity ="high"; - }; - + global_log_level ="info"; + global_log_verbosity ="high"; + hw_log_level ="info"; + hw_log_verbosity ="high"; + phy_log_level ="info"; + phy_log_verbosity ="high"; + mac_log_level ="info"; + mac_log_verbosity ="high"; + rlc_log_level ="info"; + rlc_log_verbosity ="high"; + pdcp_log_level ="info"; + pdcp_log_verbosity ="high"; + rrc_log_level ="info"; + rrc_log_verbosity ="high"; + }; } ); diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band3.tm1.usrpb210.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band3.tm1.usrpb210.conf index aa1d7711fd..1a38352409 100644 --- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band3.tm1.usrpb210.conf +++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band3.tm1.usrpb210.conf @@ -5,104 +5,131 @@ Asn1_verbosity = "none"; eNBs = ( { - # real_time choice in {hard, rt-preempt, no} - real_time = "no"; ////////// Identification parameters: eNB_ID = 0xe00; - + cell_type = "CELL_MACRO_ENB"; - + eNB_name = "eNB_Eurecom_LTEBox"; - + // Tracking area code, 0x0000 and 0xfffe are reserved values tracking_area_code = "1"; - + mobile_country_code = "208"; - + mobile_network_code = "92"; - + ////////// Physical parameters: - + component_carriers = ( - { - frame_type = "FDD"; - tdd_config = 3; - tdd_config_s = 0; - prefix_type = "NORMAL"; - eutra_band = 3; - downlink_frequency = 1865000000L; - uplink_frequency_offset = -95000000; - Nid_cell = 0; - N_RB_DL = 50; - Nid_cell_mbsfn = 0; - nb_antennas_tx = 1; - nb_antennas_rx = 1; - tx_gain = 90; - rx_gain = 135; - prach_root = 0; - prach_config_index = 0; - prach_high_speed = "DISABLE"; - prach_zero_correlation = 1; - prach_freq_offset = 2; - pucch_delta_shift = 1; - pucch_nRB_CQI = 1; - pucch_nCS_AN = 0; - pucch_n1_AN = 32; - pdsch_referenceSignalPower = -26; - pdsch_p_b = 0; - pusch_n_SB = 1; - pusch_enable64QAM = "DISABLE"; - pusch_hoppingMode = "interSubFrame"; - pusch_hoppingOffset = 0; - pusch_groupHoppingEnabled = "ENABLE"; - pusch_groupAssignment = 0; - pusch_sequenceHoppingEnabled = "DISABLE"; - pusch_nDMRS1 = 1; - phich_duration = "NORMAL"; - phich_resource = "ONESIXTH"; - srs_enable = "DISABLE"; - /* srs_BandwidthConfig =; - srs_SubframeConfig =; - srs_ackNackST =; - srs_MaxUpPts =;*/ + { + frame_type = "FDD"; + tdd_config = 3; + tdd_config_s = 0; + prefix_type = "NORMAL"; + eutra_band = 3; + downlink_frequency = 1865000000L; + uplink_frequency_offset = -95000000; + Nid_cell = 0; + N_RB_DL = 50; + Nid_cell_mbsfn = 0; + nb_antennas_tx = 1; + nb_antennas_rx = 1; + tx_gain = 90; + rx_gain = 135; + prach_root = 0; + prach_config_index = 0; + prach_high_speed = "DISABLE"; + prach_zero_correlation = 1; + prach_freq_offset = 2; + pucch_delta_shift = 1; + pucch_nRB_CQI = 1; + pucch_nCS_AN = 0; + pucch_n1_AN = 32; + pdsch_referenceSignalPower = -26; + pdsch_p_b = 0; + pusch_n_SB = 1; + pusch_enable64QAM = "DISABLE"; + pusch_hoppingMode = "interSubFrame"; + pusch_hoppingOffset = 0; + pusch_groupHoppingEnabled = "ENABLE"; + pusch_groupAssignment = 0; + pusch_sequenceHoppingEnabled = "DISABLE"; + pusch_nDMRS1 = 1; + phich_duration = "NORMAL"; + phich_resource = "ONESIXTH"; + srs_enable = "DISABLE"; + /* srs_BandwidthConfig =; + srs_SubframeConfig =; + srs_ackNackST =; + srs_MaxUpPts =;*/ - pusch_p0_Nominal = -108; - pusch_alpha = "AL1"; - pucch_p0_Nominal = -108; - msg3_delta_Preamble = 6; - pucch_deltaF_Format1 = "deltaF2"; - pucch_deltaF_Format1b = "deltaF3"; - pucch_deltaF_Format2 = "deltaF0"; - pucch_deltaF_Format2a = "deltaF0"; - pucch_deltaF_Format2b = "deltaF0"; - - rach_numberOfRA_Preambles = 64; - rach_preamblesGroupAConfig = "DISABLE"; -/* - rach_sizeOfRA_PreamblesGroupA = ; - rach_messageSizeGroupA = ; - rach_messagePowerOffsetGroupB = ; -*/ - rach_powerRampingStep = 4; - rach_preambleInitialReceivedTargetPower = -108; - rach_preambleTransMax = 10; - rach_raResponseWindowSize = 10; - rach_macContentionResolutionTimer = 48; - rach_maxHARQ_Msg3Tx = 4; + pusch_p0_Nominal = -108; + pusch_alpha = "AL1"; + pucch_p0_Nominal = -108; + msg3_delta_Preamble = 6; + pucch_deltaF_Format1 = "deltaF2"; + pucch_deltaF_Format1b = "deltaF3"; + pucch_deltaF_Format2 = "deltaF0"; + pucch_deltaF_Format2a = "deltaF0"; + pucch_deltaF_Format2b = "deltaF0"; - pcch_default_PagingCycle = 128; - pcch_nB = "oneT"; - bcch_modificationPeriodCoeff = 2; - ue_TimersAndConstants_t300 = 1000; - ue_TimersAndConstants_t301 = 1000; - ue_TimersAndConstants_t310 = 1000; - ue_TimersAndConstants_t311 = 10000; - ue_TimersAndConstants_n310 = 20; - ue_TimersAndConstants_n311 = 1; + rach_numberOfRA_Preambles = 64; + rach_preamblesGroupAConfig = "DISABLE"; + /* + rach_sizeOfRA_PreamblesGroupA = ; + rach_messageSizeGroupA = ; + rach_messagePowerOffsetGroupB = ; + */ + rach_powerRampingStep = 4; + rach_preambleInitialReceivedTargetPower = -108; + rach_preambleTransMax = 10; + rach_raResponseWindowSize = 10; + rach_macContentionResolutionTimer = 48; + rach_maxHARQ_Msg3Tx = 4; + + pcch_default_PagingCycle = 128; + pcch_nB = "oneT"; + bcch_modificationPeriodCoeff = 2; + ue_TimersAndConstants_t300 = 1000; + ue_TimersAndConstants_t301 = 1000; + ue_TimersAndConstants_t310 = 1000; + ue_TimersAndConstants_t311 = 10000; + ue_TimersAndConstants_n310 = 20; + ue_TimersAndConstants_n311 = 1; + } + ); + + + srb1_parameters : + { + # timer_poll_retransmit = (ms) [5, 10, 15, 20,... 250, 300, 350, ... 500] + timer_poll_retransmit = 80; + + # timer_reordering = (ms) [0,5, ... 100, 110, 120, ... ,200] + timer_reordering = 35; + + # timer_reordering = (ms) [0,5, ... 250, 300, 350, ... ,500] + timer_status_prohibit = 0; + + # poll_pdu = [4, 8, 16, 32 , 64, 128, 256, infinity(>10000)] + poll_pdu = 4; + + # poll_byte = (kB) [25,50,75,100,125,250,375,500,750,1000,1250,1500,2000,3000,infinity(>10000)] + poll_byte = 99999; + + # max_retx_threshold = [1, 2, 3, 4 , 6, 8, 16, 32] + max_retx_threshold = 4; + } + + # ------- SCTP definitions + SCTP : + { + # Number of streams to use in input/output + SCTP_INSTREAMS = 2; + SCTP_OUTSTREAMS = 2; + }; - } - ); - ////////// MME parameters: mme_ip_address = ( { ipv4 = "192.168.13.11"; ipv6 = "192:168:30::17"; @@ -111,7 +138,7 @@ eNBs = } ); - NETWORK_INTERFACES : + NETWORK_INTERFACES : { ENB_INTERFACE_NAME_FOR_S1_MME = "eth0"; ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.13.10/24"; @@ -120,24 +147,24 @@ eNBs = ENB_IPV4_ADDRESS_FOR_S1U = "192.168.13.10/24"; ENB_PORT_FOR_S1U = 2152; # Spec 2152 }; - - log_config : + + log_config : { - global_log_level ="info"; + global_log_level ="info"; global_log_verbosity ="medium"; - hw_log_level ="info"; + hw_log_level ="info"; hw_log_verbosity ="medium"; - phy_log_level ="info"; + phy_log_level ="info"; phy_log_verbosity ="medium"; - mac_log_level ="info"; + mac_log_level ="info"; mac_log_verbosity ="high"; - rlc_log_level ="info"; + rlc_log_level ="info"; rlc_log_verbosity ="medium"; - pdcp_log_level ="info"; + pdcp_log_level ="info"; pdcp_log_verbosity ="medium"; - rrc_log_level ="info"; + rrc_log_level ="info"; rrc_log_verbosity ="medium"; - }; - + }; + } ); diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band38.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band38.conf index 1bd8a02f82..2cf57137c6 100755 --- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band38.conf +++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band38.conf @@ -5,102 +5,132 @@ Asn1_verbosity = "none"; eNBs = ( { - # real_time choice in {hard, rt-preempt, no} - real_time = "no"; ////////// Identification parameters: eNB_ID = 0xe00; - + cell_type = "CELL_MACRO_ENB"; - + eNB_name = "eNB_Eurecom_LTEBox"; - + // Tracking area code, 0x0000 and 0xfffe are reserved values tracking_area_code = "1"; - + mobile_country_code = "208"; - + mobile_network_code = "92"; - + ////////// Channel parameters: - + component_carriers = ( - { - frame_type = "TDD"; - tdd_config = 3; - tdd_config_s = 0; - prefix_type = "NORMAL"; - eutra_band = 38; - downlink_frequency = 2580000000L; - uplink_frequency_offset = 0; - - Nid_cell = 0; - N_RB_DL = 25; - Nid_cell_mbsfn = 0; - nb_antennas_tx = 1; - nb_antennas_rx = 1; - prach_root = 22; - prach_config_index = 3; - prach_high_speed = "DISABLE"; - prach_zero_correlation = 0; - prach_freq_offset = 0; - pucch_delta_shift = 1; - pucch_nRB_CQI = 1; - pucch_nCS_AN = 0; - pucch_n1_AN = 32; - pdsch_referenceSignalPower = -24; - pdsch_p_b = 0; - pusch_n_SB = 1; - pusch_enable64QAM = "DISABLE"; - pusch_hoppingMode = "interSubFrame"; - pusch_hoppingOffset = 4; - pusch_groupHoppingEnabled = "DISABLE"; - pusch_groupAssignment = 0; - pusch_sequenceHoppingEnabled = "DISABLE"; - pusch_nDMRS1 = 1; - phich_duration = "NORMAL"; - phich_resource = "ONESIXTH"; - srs_enable = "DISABLE"; - /* srs_BandwidthConfig =; - srs_SubframeConfig =; - srs_ackNackST =; - srs_MaxUpPts =;*/ + { + frame_type = "TDD"; + tdd_config = 3; + tdd_config_s = 0; + prefix_type = "NORMAL"; + eutra_band = 38; + downlink_frequency = 2580000000L; + uplink_frequency_offset = 0; + + Nid_cell = 0; + N_RB_DL = 25; + Nid_cell_mbsfn = 0; + nb_antennas_tx = 1; + nb_antennas_rx = 1; + prach_root = 22; + prach_config_index = 3; + prach_high_speed = "DISABLE"; + prach_zero_correlation = 0; + prach_freq_offset = 0; + pucch_delta_shift = 1; + pucch_nRB_CQI = 1; + pucch_nCS_AN = 0; + pucch_n1_AN = 32; + pdsch_referenceSignalPower = -24; + pdsch_p_b = 0; + pusch_n_SB = 1; + pusch_enable64QAM = "DISABLE"; + pusch_hoppingMode = "interSubFrame"; + pusch_hoppingOffset = 4; + pusch_groupHoppingEnabled = "DISABLE"; + pusch_groupAssignment = 0; + pusch_sequenceHoppingEnabled = "DISABLE"; + pusch_nDMRS1 = 1; + phich_duration = "NORMAL"; + phich_resource = "ONESIXTH"; + srs_enable = "DISABLE"; + /* srs_BandwidthConfig =; + srs_SubframeConfig =; + srs_ackNackST =; + srs_MaxUpPts =;*/ + + pusch_p0_Nominal = -95; + pusch_alpha = "AL08"; + pucch_p0_Nominal = -117; + msg3_delta_Preamble = 6; + pucch_deltaF_Format1 = "deltaF2"; + pucch_deltaF_Format1b = "deltaF3"; + pucch_deltaF_Format2 = "deltaF0"; + pucch_deltaF_Format2a = "deltaF0"; + pucch_deltaF_Format2b = "deltaF0"; + + rach_numberOfRA_Preambles = 52; + rach_preamblesGroupAConfig = "DISABLE"; + /* + rach_sizeOfRA_PreamblesGroupA = ; + rach_messageSizeGroupA = ; + rach_messagePowerOffsetGroupB = ; + */ + rach_powerRampingStep = 2; + rach_preambleInitialReceivedTargetPower = -104; + rach_preambleTransMax = 6; + rach_raResponseWindowSize = 10; + rach_macContentionResolutionTimer = 48; + rach_maxHARQ_Msg3Tx = 4; + + pcch_default_PagingCycle = 128; + pcch_nB = "oneT"; + bcch_modificationPeriodCoeff = 2; + ue_TimersAndConstants_t300 = 1000; + ue_TimersAndConstants_t301 = 1000; + ue_TimersAndConstants_t310 = 1000; + ue_TimersAndConstants_t311 = 10000; + ue_TimersAndConstants_n310 = 20; + ue_TimersAndConstants_n311 = 1; + } + ); + + + + srb1_parameters : + { + # timer_poll_retransmit = (ms) [5, 10, 15, 20,... 250, 300, 350, ... 500] + timer_poll_retransmit = 80; + + # timer_reordering = (ms) [0,5, ... 100, 110, 120, ... ,200] + timer_reordering = 35; + + # timer_reordering = (ms) [0,5, ... 250, 300, 350, ... ,500] + timer_status_prohibit = 0; + + # poll_pdu = [4, 8, 16, 32 , 64, 128, 256, infinity(>10000)] + poll_pdu = 4; + + # poll_byte = (kB) [25,50,75,100,125,250,375,500,750,1000,1250,1500,2000,3000,infinity(>10000)] + poll_byte = 99999; + + # max_retx_threshold = [1, 2, 3, 4 , 6, 8, 16, 32] + max_retx_threshold = 4; + } + + # ------- SCTP definitions + SCTP : + { + # Number of streams to use in input/output + SCTP_INSTREAMS = 2; + SCTP_OUTSTREAMS = 2; + }; - pusch_p0_Nominal = -95; - pusch_alpha = "AL08"; - pucch_p0_Nominal = -117; - msg3_delta_Preamble = 6; - pucch_deltaF_Format1 = "deltaF2"; - pucch_deltaF_Format1b = "deltaF3"; - pucch_deltaF_Format2 = "deltaF0"; - pucch_deltaF_Format2a = "deltaF0"; - pucch_deltaF_Format2b = "deltaF0"; - - rach_numberOfRA_Preambles = 52; - rach_preamblesGroupAConfig = "DISABLE"; -/* - rach_sizeOfRA_PreamblesGroupA = ; - rach_messageSizeGroupA = ; - rach_messagePowerOffsetGroupB = ; -*/ - rach_powerRampingStep = 2; - rach_preambleInitialReceivedTargetPower = -104; - rach_preambleTransMax = 6; - rach_raResponseWindowSize = 10; - rach_macContentionResolutionTimer = 48; - rach_maxHARQ_Msg3Tx = 4; - pcch_default_PagingCycle = 128; - pcch_nB = "oneT"; - bcch_modificationPeriodCoeff = 2; - ue_TimersAndConstants_t300 = 1000; - ue_TimersAndConstants_t301 = 1000; - ue_TimersAndConstants_t310 = 1000; - ue_TimersAndConstants_t311 = 10000; - ue_TimersAndConstants_n310 = 20; - ue_TimersAndConstants_n311 = 1; - } - ); - ////////// MME parameters: mme_ip_address = ( { ipv4 = "192.168.13.11"; ipv6 = "192:168:30::17"; @@ -109,7 +139,7 @@ eNBs = } ); - NETWORK_INTERFACES : + NETWORK_INTERFACES : { ENB_INTERFACE_NAME_FOR_S1_MME = "eth0"; ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.13.10/24"; @@ -118,24 +148,24 @@ eNBs = ENB_IPV4_ADDRESS_FOR_S1U = "192.168.13.10/24"; ENB_PORT_FOR_S1U = 2152; # Spec 2152 }; - - log_config : + + log_config : { - global_log_level ="info"; - global_log_verbosity ="medium"; - hw_log_level ="debug"; - hw_log_verbosity ="medium"; - phy_log_level ="info"; - phy_log_verbosity ="medium"; - mac_log_level ="debug"; - mac_log_verbosity ="high"; - rlc_log_level ="info"; - rlc_log_verbosity ="medium"; - pdcp_log_level ="info"; - pdcp_log_verbosity ="medium"; - rrc_log_level ="info"; - rrc_log_verbosity ="medium"; - }; - + global_log_level ="info"; + global_log_verbosity ="medium"; + hw_log_level ="debug"; + hw_log_verbosity ="medium"; + phy_log_level ="info"; + phy_log_verbosity ="medium"; + mac_log_level ="debug"; + mac_log_verbosity ="high"; + rlc_log_level ="info"; + rlc_log_verbosity ="medium"; + pdcp_log_level ="info"; + pdcp_log_verbosity ="medium"; + rrc_log_level ="info"; + rrc_log_verbosity ="medium"; + }; + } ); diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band38.tm1.exmimo2.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band38.tm1.exmimo2.conf index 701f5ecd04..0071b7d002 100644 --- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band38.tm1.exmimo2.conf +++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band38.tm1.exmimo2.conf @@ -5,104 +5,131 @@ Asn1_verbosity = "none"; eNBs = ( { - # real_time choice in {hard, rt-preempt, no} - real_time = "no"; ////////// Identification parameters: eNB_ID = 0xe00; - + cell_type = "CELL_MACRO_ENB"; - + eNB_name = "eNB_Eurecom_LTEBox"; - + // Tracking area code, 0x0000 and 0xfffe are reserved values tracking_area_code = "1"; - + mobile_country_code = "208"; - + mobile_network_code = "92"; - + ////////// Physical parameters: - + component_carriers = ( - { - frame_type = "TDD"; - tdd_config = 3; - tdd_config_s = 0; - prefix_type = "NORMAL"; - eutra_band = 38; - downlink_frequency = 2580000000L; - uplink_frequency_offset = 0; //-120000000; - Nid_cell = 0; - N_RB_DL = 25; - Nid_cell_mbsfn = 0; - nb_antennas_tx = 1; - nb_antennas_rx = 1; - tx_gain = 10; //25; - rx_gain = 10; //20; - prach_root = 0; - prach_config_index = 0; - prach_high_speed = "DISABLE"; - prach_zero_correlation = 1; - prach_freq_offset = 2; - pucch_delta_shift = 1; - pucch_nRB_CQI = 1; - pucch_nCS_AN = 0; - pucch_n1_AN = 32; - pdsch_referenceSignalPower = -26; - pdsch_p_b = 0; - pusch_n_SB = 1; - pusch_enable64QAM = "DISABLE"; - pusch_hoppingMode = "interSubFrame"; - pusch_hoppingOffset = 0; - pusch_groupHoppingEnabled = "ENABLE"; - pusch_groupAssignment = 0; - pusch_sequenceHoppingEnabled = "DISABLE"; - pusch_nDMRS1 = 0; - phich_duration = "NORMAL"; - phich_resource = "ONESIXTH"; - srs_enable = "DISABLE"; - /* srs_BandwidthConfig =; - srs_SubframeConfig =; - srs_ackNackST =; - srs_MaxUpPts =;*/ + { + frame_type = "TDD"; + tdd_config = 3; + tdd_config_s = 0; + prefix_type = "NORMAL"; + eutra_band = 38; + downlink_frequency = 2580000000L; + uplink_frequency_offset = 0; //-120000000; + Nid_cell = 0; + N_RB_DL = 25; + Nid_cell_mbsfn = 0; + nb_antennas_tx = 1; + nb_antennas_rx = 1; + tx_gain = 10; //25; + rx_gain = 10; //20; + prach_root = 0; + prach_config_index = 0; + prach_high_speed = "DISABLE"; + prach_zero_correlation = 1; + prach_freq_offset = 2; + pucch_delta_shift = 1; + pucch_nRB_CQI = 1; + pucch_nCS_AN = 0; + pucch_n1_AN = 32; + pdsch_referenceSignalPower = -26; + pdsch_p_b = 0; + pusch_n_SB = 1; + pusch_enable64QAM = "DISABLE"; + pusch_hoppingMode = "interSubFrame"; + pusch_hoppingOffset = 0; + pusch_groupHoppingEnabled = "ENABLE"; + pusch_groupAssignment = 0; + pusch_sequenceHoppingEnabled = "DISABLE"; + pusch_nDMRS1 = 0; + phich_duration = "NORMAL"; + phich_resource = "ONESIXTH"; + srs_enable = "DISABLE"; + /* srs_BandwidthConfig =; + srs_SubframeConfig =; + srs_ackNackST =; + srs_MaxUpPts =;*/ - pusch_p0_Nominal = -85; - pusch_alpha = "AL1"; - pucch_p0_Nominal = -108; - msg3_delta_Preamble = 6; - pucch_deltaF_Format1 = "deltaF2"; - pucch_deltaF_Format1b = "deltaF3"; - pucch_deltaF_Format2 = "deltaF0"; - pucch_deltaF_Format2a = "deltaF0"; - pucch_deltaF_Format2b = "deltaF0"; - - rach_numberOfRA_Preambles = 64; - rach_preamblesGroupAConfig = "DISABLE"; -/* - rach_sizeOfRA_PreamblesGroupA = ; - rach_messageSizeGroupA = ; - rach_messagePowerOffsetGroupB = ; -*/ - rach_powerRampingStep = 2; - rach_preambleInitialReceivedTargetPower = -100; - rach_preambleTransMax = 10; - rach_raResponseWindowSize = 10; - rach_macContentionResolutionTimer = 48; - rach_maxHARQ_Msg3Tx = 4; + pusch_p0_Nominal = -85; + pusch_alpha = "AL1"; + pucch_p0_Nominal = -108; + msg3_delta_Preamble = 6; + pucch_deltaF_Format1 = "deltaF2"; + pucch_deltaF_Format1b = "deltaF3"; + pucch_deltaF_Format2 = "deltaF0"; + pucch_deltaF_Format2a = "deltaF0"; + pucch_deltaF_Format2b = "deltaF0"; - pcch_default_PagingCycle = 128; - pcch_nB = "oneT"; - bcch_modificationPeriodCoeff = 2; - ue_TimersAndConstants_t300 = 1000; - ue_TimersAndConstants_t301 = 1000; - ue_TimersAndConstants_t310 = 1000; - ue_TimersAndConstants_t311 = 10000; - ue_TimersAndConstants_n310 = 20; - ue_TimersAndConstants_n311 = 1; + rach_numberOfRA_Preambles = 64; + rach_preamblesGroupAConfig = "DISABLE"; + /* + rach_sizeOfRA_PreamblesGroupA = ; + rach_messageSizeGroupA = ; + rach_messagePowerOffsetGroupB = ; + */ + rach_powerRampingStep = 2; + rach_preambleInitialReceivedTargetPower = -100; + rach_preambleTransMax = 10; + rach_raResponseWindowSize = 10; + rach_macContentionResolutionTimer = 48; + rach_maxHARQ_Msg3Tx = 4; + + pcch_default_PagingCycle = 128; + pcch_nB = "oneT"; + bcch_modificationPeriodCoeff = 2; + ue_TimersAndConstants_t300 = 1000; + ue_TimersAndConstants_t301 = 1000; + ue_TimersAndConstants_t310 = 1000; + ue_TimersAndConstants_t311 = 10000; + ue_TimersAndConstants_n310 = 20; + ue_TimersAndConstants_n311 = 1; + } + ); + + + srb1_parameters : + { + # timer_poll_retransmit = (ms) [5, 10, 15, 20,... 250, 300, 350, ... 500] + timer_poll_retransmit = 80; + + # timer_reordering = (ms) [0,5, ... 100, 110, 120, ... ,200] + timer_reordering = 35; + + # timer_reordering = (ms) [0,5, ... 250, 300, 350, ... ,500] + timer_status_prohibit = 0; + + # poll_pdu = [4, 8, 16, 32 , 64, 128, 256, infinity(>10000)] + poll_pdu = 4; + + # poll_byte = (kB) [25,50,75,100,125,250,375,500,750,1000,1250,1500,2000,3000,infinity(>10000)] + poll_byte = 99999; + + # max_retx_threshold = [1, 2, 3, 4 , 6, 8, 16, 32] + max_retx_threshold = 4; + } + + # ------- SCTP definitions + SCTP : + { + # Number of streams to use in input/output + SCTP_INSTREAMS = 2; + SCTP_OUTSTREAMS = 2; + }; - } - ); - ////////// MME parameters: mme_ip_address = ( { ipv4 = "192.168.13.11"; ipv6 = "192:168:30::17"; @@ -111,33 +138,32 @@ eNBs = } ); - NETWORK_INTERFACES : + NETWORK_INTERFACES : { - ENB_INTERFACE_NAME_FOR_S1_MME = "eth0"; - ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.13.10/24"; + ENB_INTERFACE_NAME_FOR_S1_MME = "eth0"; + ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.13.10/24"; - ENB_INTERFACE_NAME_FOR_S1U = "eth0"; - ENB_IPV4_ADDRESS_FOR_S1U = "192.168.13.10/24"; - ENB_PORT_FOR_S1U = 2152; # Spec 2152 + ENB_INTERFACE_NAME_FOR_S1U = "eth0"; + ENB_IPV4_ADDRESS_FOR_S1U = "192.168.13.10/24"; + ENB_PORT_FOR_S1U = 2152; # Spec 2152 }; - - log_config : + + log_config : { - global_log_level ="info"; - global_log_verbosity ="medium"; - hw_log_level ="debug"; - hw_log_verbosity ="medium"; - phy_log_level ="info"; - phy_log_verbosity ="medium"; - mac_log_level ="info"; - mac_log_verbosity ="high"; - rlc_log_level ="info"; - rlc_log_verbosity ="medium"; - pdcp_log_level ="info"; - pdcp_log_verbosity ="medium"; - rrc_log_level ="debug"; - rrc_log_verbosity ="medium"; - }; - + global_log_level ="info"; + global_log_verbosity ="medium"; + hw_log_level ="debug"; + hw_log_verbosity ="medium"; + phy_log_level ="info"; + phy_log_verbosity ="medium"; + mac_log_level ="info"; + mac_log_verbosity ="high"; + rlc_log_level ="info"; + rlc_log_verbosity ="medium"; + pdcp_log_level ="info"; + pdcp_log_verbosity ="medium"; + rrc_log_level ="debug"; + rrc_log_verbosity ="medium"; + }; } ); diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band39.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band39.conf index 81f25ff1b5..45d31336b9 100755 --- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band39.conf +++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band39.conf @@ -5,111 +5,141 @@ Asn1_verbosity = "none"; eNBs = ( { - # real_time choice in {hard, rt-preempt, no} - real_time = "no"; ////////// Identification parameters: eNB_ID = 0xe00; - + cell_type = "CELL_MACRO_ENB"; - + eNB_name = "eNB_Eurecom_LTEBox"; - + // Tracking area code, 0x0000 and 0xfffe are reserved values tracking_area_code = "1"; - + mobile_country_code = "208"; - + mobile_network_code = "92"; - + ////////// Channel parameters: // Default Paging DRX of the eNB as defined in TS 36.304 default_paging_drx = "PAGING_DRX_256"; - + ////////// Physical parameters: - frame_type = "TDD"; + frame_type = "TDD"; prefix_type = "NORMAL"; eutra_band = 39; downlink_frequency = 1910000000L; uplink_frequency_offset = 0; - + component_carriers = ( - { - frame_type = "TDD"; - tdd_config = 3; - tdd_config_s = 0; - prefix_type = "NORMAL"; - eutra_band = 39; - downlink_frequency = 1910000000L; - uplink_frequency_offset = 0; - - Nid_cell = 0; - N_RB_DL = 25; - Nid_cell_mbsfn = 0; - nb_antennas_tx = 1; - nb_antennas_rx = 1; - prach_root = 22; - prach_config_index = 3; - prach_high_speed = "DISABLE"; - prach_zero_correlation = 0; - prach_freq_offset = 0; - pucch_delta_shift = 1; - pucch_nRB_CQI = 1; - pucch_nCS_AN = 0; - pucch_n1_AN = 32; - pdsch_referenceSignalPower = -24; - pdsch_p_b = 0; - pusch_n_SB = 1; - pusch_enable64QAM = "DISABLE"; - pusch_hoppingMode = "interSubFrame"; - pusch_hoppingOffset = 4; - pusch_groupHoppingEnabled = "DISABLE"; - pusch_groupAssignment = 0; - pusch_sequenceHoppingEnabled = "DISABLE"; - pusch_nDMRS1 = 1; - phich_duration = "NORMAL"; - phich_resource = "ONESIXTH"; - srs_enable = "DISABLE"; - /* srs_BandwidthConfig =; - srs_SubframeConfig =; - srs_ackNackST =; - srs_MaxUpPts =;*/ + { + frame_type = "TDD"; + tdd_config = 3; + tdd_config_s = 0; + prefix_type = "NORMAL"; + eutra_band = 39; + downlink_frequency = 1910000000L; + uplink_frequency_offset = 0; + + Nid_cell = 0; + N_RB_DL = 25; + Nid_cell_mbsfn = 0; + nb_antennas_tx = 1; + nb_antennas_rx = 1; + prach_root = 22; + prach_config_index = 3; + prach_high_speed = "DISABLE"; + prach_zero_correlation = 0; + prach_freq_offset = 0; + pucch_delta_shift = 1; + pucch_nRB_CQI = 1; + pucch_nCS_AN = 0; + pucch_n1_AN = 32; + pdsch_referenceSignalPower = -24; + pdsch_p_b = 0; + pusch_n_SB = 1; + pusch_enable64QAM = "DISABLE"; + pusch_hoppingMode = "interSubFrame"; + pusch_hoppingOffset = 4; + pusch_groupHoppingEnabled = "DISABLE"; + pusch_groupAssignment = 0; + pusch_sequenceHoppingEnabled = "DISABLE"; + pusch_nDMRS1 = 1; + phich_duration = "NORMAL"; + phich_resource = "ONESIXTH"; + srs_enable = "DISABLE"; + /* srs_BandwidthConfig =; + srs_SubframeConfig =; + srs_ackNackST =; + srs_MaxUpPts =;*/ + + pusch_p0_Nominal = -95; + pusch_alpha = "AL08"; + pucch_p0_Nominal = -117; + msg3_delta_Preamble = 6; + pucch_deltaF_Format1 = "deltaF2"; + pucch_deltaF_Format1b = "deltaF3"; + pucch_deltaF_Format2 = "deltaF0"; + pucch_deltaF_Format2a = "deltaF0"; + pucch_deltaF_Format2b = "deltaF0"; + + rach_numberOfRA_Preambles = 52; + rach_preamblesGroupAConfig = "DISABLE"; + /* + rach_sizeOfRA_PreamblesGroupA = ; + rach_messageSizeGroupA = ; + rach_messagePowerOffsetGroupB = ; + */ + rach_powerRampingStep = 2; + rach_preambleInitialReceivedTargetPower = -104; + rach_preambleTransMax = 6; + rach_raResponseWindowSize = 10; + rach_macContentionResolutionTimer = 48; + rach_maxHARQ_Msg3Tx = 4; + + pcch_default_PagingCycle = 128; + pcch_nB = "oneT"; + bcch_modificationPeriodCoeff = 2; + ue_TimersAndConstants_t300 = 1000; + ue_TimersAndConstants_t301 = 1000; + ue_TimersAndConstants_t310 = 1000; + ue_TimersAndConstants_t311 = 10000; + ue_TimersAndConstants_n310 = 20; + ue_TimersAndConstants_n311 = 1; + } + ); + + + srb1_parameters : + { + # timer_poll_retransmit = (ms) [5, 10, 15, 20,... 250, 300, 350, ... 500] + timer_poll_retransmit = 80; + + # timer_reordering = (ms) [0,5, ... 100, 110, 120, ... ,200] + timer_reordering = 35; + + # timer_reordering = (ms) [0,5, ... 250, 300, 350, ... ,500] + timer_status_prohibit = 0; + + # poll_pdu = [4, 8, 16, 32 , 64, 128, 256, infinity(>10000)] + poll_pdu = 4; + + # poll_byte = (kB) [25,50,75,100,125,250,375,500,750,1000,1250,1500,2000,3000,infinity(>10000)] + poll_byte = 99999; + + # max_retx_threshold = [1, 2, 3, 4 , 6, 8, 16, 32] + max_retx_threshold = 4; + } + + # ------- SCTP definitions + SCTP : + { + # Number of streams to use in input/output + SCTP_INSTREAMS = 2; + SCTP_OUTSTREAMS = 2; + }; + - pusch_p0_Nominal = -95; - pusch_alpha = "AL08"; - pucch_p0_Nominal = -117; - msg3_delta_Preamble = 6; - pucch_deltaF_Format1 = "deltaF2"; - pucch_deltaF_Format1b = "deltaF3"; - pucch_deltaF_Format2 = "deltaF0"; - pucch_deltaF_Format2a = "deltaF0"; - pucch_deltaF_Format2b = "deltaF0"; - - rach_numberOfRA_Preambles = 52; - rach_preamblesGroupAConfig = "DISABLE"; -/* - rach_sizeOfRA_PreamblesGroupA = ; - rach_messageSizeGroupA = ; - rach_messagePowerOffsetGroupB = ; -*/ - rach_powerRampingStep = 2; - rach_preambleInitialReceivedTargetPower = -104; - rach_preambleTransMax = 6; - rach_raResponseWindowSize = 10; - rach_macContentionResolutionTimer = 48; - rach_maxHARQ_Msg3Tx = 4; - pcch_default_PagingCycle = 128; - pcch_nB = "oneT"; - bcch_modificationPeriodCoeff = 2; - ue_TimersAndConstants_t300 = 1000; - ue_TimersAndConstants_t301 = 1000; - ue_TimersAndConstants_t310 = 1000; - ue_TimersAndConstants_t311 = 10000; - ue_TimersAndConstants_n310 = 20; - ue_TimersAndConstants_n311 = 1; - } - ); - ////////// MME parameters: mme_ip_address = ( { ipv4 = "192.168.13.11"; ipv6 = "192:168:30::17"; @@ -118,33 +148,32 @@ eNBs = } ); - NETWORK_INTERFACES : + NETWORK_INTERFACES : { - ENB_INTERFACE_NAME_FOR_S1_MME = "eth0"; - ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.13.10/24"; + ENB_INTERFACE_NAME_FOR_S1_MME = "eth0"; + ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.13.10/24"; - ENB_INTERFACE_NAME_FOR_S1U = "eth0"; - ENB_IPV4_ADDRESS_FOR_S1U = "192.168.13.10/24"; - ENB_PORT_FOR_S1U = 2152; # Spec 2152 + ENB_INTERFACE_NAME_FOR_S1U = "eth0"; + ENB_IPV4_ADDRESS_FOR_S1U = "192.168.13.10/24"; + ENB_PORT_FOR_S1U = 2152; # Spec 2152 }; - - log_config : + + log_config : { - global_log_level ="debug"; - global_log_verbosity ="medium"; - hw_log_level ="debug"; - hw_log_verbosity ="medium"; - phy_log_level ="info"; - phy_log_verbosity ="medium"; - mac_log_level ="debug"; - mac_log_verbosity ="high"; - rlc_log_level ="info"; - rlc_log_verbosity ="medium"; - pdcp_log_level ="info"; - pdcp_log_verbosity ="medium"; - rrc_log_level ="info"; - rrc_log_verbosity ="medium"; - }; - + global_log_level ="debug"; + global_log_verbosity ="medium"; + hw_log_level ="debug"; + hw_log_verbosity ="medium"; + phy_log_level ="info"; + phy_log_verbosity ="medium"; + mac_log_level ="debug"; + mac_log_verbosity ="high"; + rlc_log_level ="info"; + rlc_log_verbosity ="medium"; + pdcp_log_level ="info"; + pdcp_log_verbosity ="medium"; + rrc_log_level ="info"; + rrc_log_verbosity ="medium"; + }; } ); diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band39.tm1.exmimo2.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band39.tm1.exmimo2.conf index b5193e8e07..c8214ad999 100644 --- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band39.tm1.exmimo2.conf +++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band39.tm1.exmimo2.conf @@ -5,139 +5,169 @@ Asn1_verbosity = "none"; eNBs = ( { - # real_time choice in {hard, rt-preempt, no} - real_time = "no"; ////////// Identification parameters: eNB_ID = 0xe00; - + cell_type = "CELL_MACRO_ENB"; - + eNB_name = "eNB_Eurecom_LTEBox"; - + // Tracking area code, 0x0000 and 0xfffe are reserved values tracking_area_code = "1"; - + mobile_country_code = "208"; - - mobile_network_code = "92"; - + + mobile_network_code = "93"; + ////////// Physical parameters: - + component_carriers = ( - { - frame_type = "TDD"; - tdd_config = 3; - tdd_config_s = 0; - prefix_type = "NORMAL"; - eutra_band = 39; - downlink_frequency = 1907600000L; - uplink_frequency_offset = 0; - - Nid_cell = 0; - N_RB_DL = 25; - Nid_cell_mbsfn = 0; - nb_antennas_tx = 1; - nb_antennas_rx = 1; - tx_gain = 10; - rx_gain = 10; - prach_root = 0; - prach_config_index = 0; - prach_high_speed = "DISABLE"; - prach_zero_correlation = 1; - prach_freq_offset = 2; - pucch_delta_shift = 1; - pucch_nRB_CQI = 1; - pucch_nCS_AN = 0; - pucch_n1_AN = 32; - pdsch_referenceSignalPower = -24; - pdsch_p_b = 0; - pusch_n_SB = 1; - pusch_enable64QAM = "DISABLE"; - pusch_hoppingMode = "interSubFrame"; - pusch_hoppingOffset = 0; - pusch_groupHoppingEnabled = "ENABLE"; - pusch_groupAssignment = 0; - pusch_sequenceHoppingEnabled = "DISABLE"; - pusch_nDMRS1 = 0; - phich_duration = "NORMAL"; - phich_resource = "ONESIXTH"; - srs_enable = "DISABLE"; - /* srs_BandwidthConfig =; - srs_SubframeConfig =; - srs_ackNackST =; - srs_MaxUpPts =;*/ + { + frame_type = "TDD"; + tdd_config = 3; + tdd_config_s = 0; + prefix_type = "NORMAL"; + eutra_band = 39; + downlink_frequency = 1907600000L; + /*downlink_frequency = 1907601000L; for card 33*/ + /*downlink_frequency = 1907602425L; for card 59*/ + /*downlink_frequency = 1907599425L; for card 37*/ + uplink_frequency_offset = 0; - pusch_p0_Nominal = -95; - pusch_alpha = "AL1"; - pucch_p0_Nominal = -108; - msg3_delta_Preamble = 6; - pucch_deltaF_Format1 = "deltaF2"; - pucch_deltaF_Format1b = "deltaF3"; - pucch_deltaF_Format2 = "deltaF0"; - pucch_deltaF_Format2a = "deltaF0"; - pucch_deltaF_Format2b = "deltaF0"; - - rach_numberOfRA_Preambles = 64; - rach_preamblesGroupAConfig = "DISABLE"; -/* - rach_sizeOfRA_PreamblesGroupA = ; - rach_messageSizeGroupA = ; - rach_messagePowerOffsetGroupB = ; -*/ - rach_powerRampingStep = 2; - rach_preambleInitialReceivedTargetPower = -104; - rach_preambleTransMax = 6; - rach_raResponseWindowSize = 10; - rach_macContentionResolutionTimer = 48; - rach_maxHARQ_Msg3Tx = 4; + Nid_cell = 0; + N_RB_DL = 25; + Nid_cell_mbsfn = 0; + nb_antennas_tx = 1; + nb_antennas_rx = 1; + tx_gain = 20; + rx_gain = 20; + prach_root = 0; + prach_config_index = 0; + prach_high_speed = "DISABLE"; + prach_zero_correlation = 1; + prach_freq_offset = 2; + pucch_delta_shift = 1; + pucch_nRB_CQI = 1; + pucch_nCS_AN = 0; + pucch_n1_AN = 32; + pdsch_referenceSignalPower = -26; + pdsch_p_b = 0; + pusch_n_SB = 1; + pusch_enable64QAM = "DISABLE"; + pusch_hoppingMode = "interSubFrame"; + pusch_hoppingOffset = 0; + pusch_groupHoppingEnabled = "ENABLE"; + pusch_groupAssignment = 0; + pusch_sequenceHoppingEnabled = "DISABLE"; + pusch_nDMRS1 = 0; + phich_duration = "NORMAL"; + phich_resource = "ONESIXTH"; + srs_enable = "DISABLE"; + /* srs_BandwidthConfig =; + srs_SubframeConfig =; + srs_ackNackST =; + srs_MaxUpPts =;*/ + + pusch_p0_Nominal = -85; + pusch_alpha = "AL1"; + pucch_p0_Nominal = -96; + msg3_delta_Preamble = 6; + pucch_deltaF_Format1 = "deltaF2"; + pucch_deltaF_Format1b = "deltaF3"; + pucch_deltaF_Format2 = "deltaF0"; + pucch_deltaF_Format2a = "deltaF0"; + pucch_deltaF_Format2b = "deltaF0"; + + rach_numberOfRA_Preambles = 64; + rach_preamblesGroupAConfig = "DISABLE"; + /* + rach_sizeOfRA_PreamblesGroupA = ; + rach_messageSizeGroupA = ; + rach_messagePowerOffsetGroupB = ; + */ + rach_powerRampingStep = 2; + rach_preambleInitialReceivedTargetPower = -90; + rach_preambleTransMax = 10; + rach_raResponseWindowSize = 10; + rach_macContentionResolutionTimer = 48; + rach_maxHARQ_Msg3Tx = 4; + + pcch_default_PagingCycle = 128; + pcch_nB = "oneT"; + bcch_modificationPeriodCoeff = 2; + ue_TimersAndConstants_t300 = 1000; + ue_TimersAndConstants_t301 = 1000; + ue_TimersAndConstants_t310 = 1000; + ue_TimersAndConstants_t311 = 10000; + ue_TimersAndConstants_n310 = 20; + ue_TimersAndConstants_n311 = 1; + } + ); + + + srb1_parameters : + { + # timer_poll_retransmit = (ms) [5, 10, 15, 20,... 250, 300, 350, ... 500] + timer_poll_retransmit = 80; + + # timer_reordering = (ms) [0,5, ... 100, 110, 120, ... ,200] + timer_reordering = 35; + + # timer_reordering = (ms) [0,5, ... 250, 300, 350, ... ,500] + timer_status_prohibit = 0; + + # poll_pdu = [4, 8, 16, 32 , 64, 128, 256, infinity(>10000)] + poll_pdu = 4; + + # poll_byte = (kB) [25,50,75,100,125,250,375,500,750,1000,1250,1500,2000,3000,infinity(>10000)] + poll_byte = 99999; + + # max_retx_threshold = [1, 2, 3, 4 , 6, 8, 16, 32] + max_retx_threshold = 4; + } + + # ------- SCTP definitions + SCTP : + { + # Number of streams to use in input/output + SCTP_INSTREAMS = 2; + SCTP_OUTSTREAMS = 2; + }; - pcch_default_PagingCycle = 128; - pcch_nB = "oneT"; - bcch_modificationPeriodCoeff = 2; - ue_TimersAndConstants_t300 = 1000; - ue_TimersAndConstants_t301 = 1000; - ue_TimersAndConstants_t310 = 1000; - ue_TimersAndConstants_t311 = 10000; - ue_TimersAndConstants_n310 = 20; - ue_TimersAndConstants_n311 = 1; - } - ); - ////////// MME parameters: - mme_ip_address = ( { ipv4 = "192.168.13.11"; + mme_ip_address = ( { ipv4 = "192.168.12.171"; ipv6 = "192:168:30::17"; active = "yes"; preference = "ipv4"; } ); - NETWORK_INTERFACES : + NETWORK_INTERFACES : { - ENB_INTERFACE_NAME_FOR_S1_MME = "eth0"; - ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.13.10/24"; + ENB_INTERFACE_NAME_FOR_S1_MME = "eth0"; + ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.212/24"; - ENB_INTERFACE_NAME_FOR_S1U = "eth0"; - ENB_IPV4_ADDRESS_FOR_S1U = "192.168.13.10/24"; - ENB_PORT_FOR_S1U = 2152; # Spec 2152 + ENB_INTERFACE_NAME_FOR_S1U = "eth0"; + ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.212/24"; + ENB_PORT_FOR_S1U = 2152; # Spec 2152 }; - - log_config : + + log_config : { - global_log_level ="debug"; - global_log_verbosity ="medium"; - hw_log_level ="info"; - hw_log_verbosity ="medium"; - phy_log_level ="debug"; - phy_log_verbosity ="medium"; - mac_log_level ="debug"; - mac_log_verbosity ="high"; - rlc_log_level ="info"; - rlc_log_verbosity ="medium"; - pdcp_log_level ="info"; - pdcp_log_verbosity ="medium"; - rrc_log_level ="info"; - rrc_log_verbosity ="medium"; - }; - + global_log_level ="debug"; + global_log_verbosity ="medium"; + hw_log_level ="info"; + hw_log_verbosity ="medium"; + phy_log_level ="info"; + phy_log_verbosity ="medium"; + mac_log_level ="info"; + mac_log_verbosity ="high"; + rlc_log_level ="info"; + rlc_log_verbosity ="medium"; + pdcp_log_level ="info"; + pdcp_log_verbosity ="medium"; + rrc_log_level ="info"; + rrc_log_verbosity ="medium"; + }; } ); diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band39.tm1.usrpb210.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band39.tm1.usrpb210.conf index 5f3af031ca..8caeca0edb 100755 --- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band39.tm1.usrpb210.conf +++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band39.tm1.usrpb210.conf @@ -5,113 +5,142 @@ Asn1_verbosity = "none"; eNBs = ( { - # real_time choice in {hard, rt-preempt, no} - real_time = "no"; ////////// Identification parameters: eNB_ID = 0xe00; - + cell_type = "CELL_MACRO_ENB"; - + eNB_name = "eNB_Eurecom_LTEBox"; - + // Tracking area code, 0x0000 and 0xfffe are reserved values tracking_area_code = "1"; - + mobile_country_code = "208"; - + mobile_network_code = "92"; - + ////////// Channel parameters: // Default Paging DRX of the eNB as defined in TS 36.304 default_paging_drx = "PAGING_DRX_256"; - + ////////// Physical parameters: - frame_type = "TDD"; + frame_type = "TDD"; prefix_type = "NORMAL"; eutra_band = 39; downlink_frequency = 1910000000L; uplink_frequency_offset = 0; - + component_carriers = ( - { - frame_type = "TDD"; - tdd_config = 3; - tdd_config_s = 0; - prefix_type = "NORMAL"; - eutra_band = 39; - downlink_frequency = 1910000000L; - uplink_frequency_offset = 0; - - Nid_cell = 0; - N_RB_DL = 25; - Nid_cell_mbsfn = 0; - nb_antennas_tx = 1; - nb_antennas_rx = 1; - tx_gain = 90; - rx_gain = 120; - prach_root = 22; - prach_config_index = 3; - prach_high_speed = "DISABLE"; - prach_zero_correlation = 0; - prach_freq_offset = 0; - pucch_delta_shift = 1; - pucch_nRB_CQI = 1; - pucch_nCS_AN = 0; - pucch_n1_AN = 32; - pdsch_referenceSignalPower = -24; - pdsch_p_b = 0; - pusch_n_SB = 1; - pusch_enable64QAM = "DISABLE"; - pusch_hoppingMode = "interSubFrame"; - pusch_hoppingOffset = 4; - pusch_groupHoppingEnabled = "DISABLE"; - pusch_groupAssignment = 0; - pusch_sequenceHoppingEnabled = "DISABLE"; - pusch_nDMRS1 = 1; - phich_duration = "NORMAL"; - phich_resource = "ONESIXTH"; - srs_enable = "DISABLE"; - /* srs_BandwidthConfig =; - srs_SubframeConfig =; - srs_ackNackST =; - srs_MaxUpPts =;*/ + { + frame_type = "TDD"; + tdd_config = 3; + tdd_config_s = 0; + prefix_type = "NORMAL"; + eutra_band = 39; + downlink_frequency = 1910000000L; + uplink_frequency_offset = 0; + + Nid_cell = 0; + N_RB_DL = 25; + Nid_cell_mbsfn = 0; + nb_antennas_tx = 1; + nb_antennas_rx = 1; + tx_gain = 90; + rx_gain = 120; + prach_root = 22; + prach_config_index = 3; + prach_high_speed = "DISABLE"; + prach_zero_correlation = 0; + prach_freq_offset = 0; + pucch_delta_shift = 1; + pucch_nRB_CQI = 1; + pucch_nCS_AN = 0; + pucch_n1_AN = 32; + pdsch_referenceSignalPower = -24; + pdsch_p_b = 0; + pusch_n_SB = 1; + pusch_enable64QAM = "DISABLE"; + pusch_hoppingMode = "interSubFrame"; + pusch_hoppingOffset = 4; + pusch_groupHoppingEnabled = "DISABLE"; + pusch_groupAssignment = 0; + pusch_sequenceHoppingEnabled = "DISABLE"; + pusch_nDMRS1 = 1; + phich_duration = "NORMAL"; + phich_resource = "ONESIXTH"; + srs_enable = "DISABLE"; + /* srs_BandwidthConfig =; + srs_SubframeConfig =; + srs_ackNackST =; + srs_MaxUpPts =;*/ + + pusch_p0_Nominal = -95; + pusch_alpha = "AL08"; + pucch_p0_Nominal = -108; + msg3_delta_Preamble = 6; + pucch_deltaF_Format1 = "deltaF2"; + pucch_deltaF_Format1b = "deltaF3"; + pucch_deltaF_Format2 = "deltaF0"; + pucch_deltaF_Format2a = "deltaF0"; + pucch_deltaF_Format2b = "deltaF0"; + + rach_numberOfRA_Preambles = 52; + rach_preamblesGroupAConfig = "DISABLE"; + /* + rach_sizeOfRA_PreamblesGroupA = ; + rach_messageSizeGroupA = ; + rach_messagePowerOffsetGroupB = ; + */ + rach_powerRampingStep = 2; + rach_preambleInitialReceivedTargetPower = -104; + rach_preambleTransMax = 6; + rach_raResponseWindowSize = 10; + rach_macContentionResolutionTimer = 48; + rach_maxHARQ_Msg3Tx = 4; + + pcch_default_PagingCycle = 128; + pcch_nB = "oneT"; + bcch_modificationPeriodCoeff = 2; + ue_TimersAndConstants_t300 = 1000; + ue_TimersAndConstants_t301 = 1000; + ue_TimersAndConstants_t310 = 1000; + ue_TimersAndConstants_t311 = 10000; + ue_TimersAndConstants_n310 = 20; + ue_TimersAndConstants_n311 = 1; + } + ); + + + srb1_parameters : + { + # timer_poll_retransmit = (ms) [5, 10, 15, 20,... 250, 300, 350, ... 500] + timer_poll_retransmit = 80; + + # timer_reordering = (ms) [0,5, ... 100, 110, 120, ... ,200] + timer_reordering = 35; + + # timer_reordering = (ms) [0,5, ... 250, 300, 350, ... ,500] + timer_status_prohibit = 0; + + # poll_pdu = [4, 8, 16, 32 , 64, 128, 256, infinity(>10000)] + poll_pdu = 4; + + # poll_byte = (kB) [25,50,75,100,125,250,375,500,750,1000,1250,1500,2000,3000,infinity(>10000)] + poll_byte = 99999; + + # max_retx_threshold = [1, 2, 3, 4 , 6, 8, 16, 32] + max_retx_threshold = 4; + } + + # ------- SCTP definitions + SCTP : + { + # Number of streams to use in input/output + SCTP_INSTREAMS = 2; + SCTP_OUTSTREAMS = 2; + }; - pusch_p0_Nominal = -95; - pusch_alpha = "AL08"; - pucch_p0_Nominal = -108; - msg3_delta_Preamble = 6; - pucch_deltaF_Format1 = "deltaF2"; - pucch_deltaF_Format1b = "deltaF3"; - pucch_deltaF_Format2 = "deltaF0"; - pucch_deltaF_Format2a = "deltaF0"; - pucch_deltaF_Format2b = "deltaF0"; - - rach_numberOfRA_Preambles = 52; - rach_preamblesGroupAConfig = "DISABLE"; -/* - rach_sizeOfRA_PreamblesGroupA = ; - rach_messageSizeGroupA = ; - rach_messagePowerOffsetGroupB = ; -*/ - rach_powerRampingStep = 2; - rach_preambleInitialReceivedTargetPower = -104; - rach_preambleTransMax = 6; - rach_raResponseWindowSize = 10; - rach_macContentionResolutionTimer = 48; - rach_maxHARQ_Msg3Tx = 4; - pcch_default_PagingCycle = 128; - pcch_nB = "oneT"; - bcch_modificationPeriodCoeff = 2; - ue_TimersAndConstants_t300 = 1000; - ue_TimersAndConstants_t301 = 1000; - ue_TimersAndConstants_t310 = 1000; - ue_TimersAndConstants_t311 = 10000; - ue_TimersAndConstants_n310 = 20; - ue_TimersAndConstants_n311 = 1; - } - ); - ////////// MME parameters: mme_ip_address = ( { ipv4 = "192.168.13.11"; ipv6 = "192:168:30::17"; @@ -120,33 +149,33 @@ eNBs = } ); - NETWORK_INTERFACES : + NETWORK_INTERFACES : { - ENB_INTERFACE_NAME_FOR_S1_MME = "eth0"; - ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.13.10/24"; + ENB_INTERFACE_NAME_FOR_S1_MME = "eth0"; + ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.13.10/24"; - ENB_INTERFACE_NAME_FOR_S1U = "eth0"; - ENB_IPV4_ADDRESS_FOR_S1U = "192.168.13.10/24"; - ENB_PORT_FOR_S1U = 2152; # Spec 2152 + ENB_INTERFACE_NAME_FOR_S1U = "eth0"; + ENB_IPV4_ADDRESS_FOR_S1U = "192.168.13.10/24"; + ENB_PORT_FOR_S1U = 2152; # Spec 2152 }; - - log_config : + + log_config : { - global_log_level ="debug"; - global_log_verbosity ="high"; - hw_log_level ="info"; - hw_log_verbosity ="medium"; - phy_log_level ="debug"; - phy_log_verbosity ="high"; - mac_log_level ="info"; - mac_log_verbosity ="high"; - rlc_log_level ="info"; - rlc_log_verbosity ="medium"; - pdcp_log_level ="info"; - pdcp_log_verbosity ="medium"; - rrc_log_level ="info"; - rrc_log_verbosity ="medium"; - }; - + global_log_level ="debug"; + global_log_verbosity ="high"; + hw_log_level ="info"; + hw_log_verbosity ="medium"; + phy_log_level ="debug"; + phy_log_verbosity ="high"; + mac_log_level ="info"; + mac_log_verbosity ="high"; + rlc_log_level ="info"; + rlc_log_verbosity ="medium"; + pdcp_log_level ="info"; + pdcp_log_verbosity ="medium"; + rrc_log_level ="info"; + rrc_log_verbosity ="medium"; + }; + } ); diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band4.tm1.usrpb210.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band4.tm1.usrpb210.conf index 4792f521e9..ee4700c771 100644 --- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band4.tm1.usrpb210.conf +++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band4.tm1.usrpb210.conf @@ -5,104 +5,131 @@ Asn1_verbosity = "none"; eNBs = ( { - # real_time choice in {hard, rt-preempt, no} - real_time = "no"; ////////// Identification parameters: eNB_ID = 0xe00; - + cell_type = "CELL_MACRO_ENB"; - + eNB_name = "eNB_Eurecom_LTEBox"; - + // Tracking area code, 0x0000 and 0xfffe are reserved values tracking_area_code = "1"; - + mobile_country_code = "208"; - + mobile_network_code = "92"; - + ////////// Physical parameters: - + component_carriers = ( - { - frame_type = "FDD"; - tdd_config = 3; - tdd_config_s = 0; - prefix_type = "NORMAL"; - eutra_band = 4; - downlink_frequency = 2120000000L; - uplink_frequency_offset = -400000000; - Nid_cell = 0; - N_RB_DL = 25; - Nid_cell_mbsfn = 0; - nb_antennas_tx = 1; - nb_antennas_rx = 1; - tx_gain = 90; - rx_gain = 120; - prach_root = 0; - prach_config_index = 0; - prach_high_speed = "DISABLE"; - prach_zero_correlation = 1; - prach_freq_offset = 2; - pucch_delta_shift = 1; - pucch_nRB_CQI = 1; - pucch_nCS_AN = 0; - pucch_n1_AN = 32; - pdsch_referenceSignalPower = -26; - pdsch_p_b = 0; - pusch_n_SB = 1; - pusch_enable64QAM = "DISABLE"; - pusch_hoppingMode = "interSubFrame"; - pusch_hoppingOffset = 0; - pusch_groupHoppingEnabled = "ENABLE"; - pusch_groupAssignment = 0; - pusch_sequenceHoppingEnabled = "DISABLE"; - pusch_nDMRS1 = 1; - phich_duration = "NORMAL"; - phich_resource = "ONESIXTH"; - srs_enable = "DISABLE"; - /* srs_BandwidthConfig =; - srs_SubframeConfig =; - srs_ackNackST =; - srs_MaxUpPts =;*/ + { + frame_type = "FDD"; + tdd_config = 3; + tdd_config_s = 0; + prefix_type = "NORMAL"; + eutra_band = 4; + downlink_frequency = 2120000000L; + uplink_frequency_offset = -400000000; + Nid_cell = 0; + N_RB_DL = 25; + Nid_cell_mbsfn = 0; + nb_antennas_tx = 1; + nb_antennas_rx = 1; + tx_gain = 90; + rx_gain = 120; + prach_root = 0; + prach_config_index = 0; + prach_high_speed = "DISABLE"; + prach_zero_correlation = 1; + prach_freq_offset = 2; + pucch_delta_shift = 1; + pucch_nRB_CQI = 1; + pucch_nCS_AN = 0; + pucch_n1_AN = 32; + pdsch_referenceSignalPower = -26; + pdsch_p_b = 0; + pusch_n_SB = 1; + pusch_enable64QAM = "DISABLE"; + pusch_hoppingMode = "interSubFrame"; + pusch_hoppingOffset = 0; + pusch_groupHoppingEnabled = "ENABLE"; + pusch_groupAssignment = 0; + pusch_sequenceHoppingEnabled = "DISABLE"; + pusch_nDMRS1 = 1; + phich_duration = "NORMAL"; + phich_resource = "ONESIXTH"; + srs_enable = "DISABLE"; + /* srs_BandwidthConfig =; + srs_SubframeConfig =; + srs_ackNackST =; + srs_MaxUpPts =;*/ - pusch_p0_Nominal = -90; - pusch_alpha = "AL1"; - pucch_p0_Nominal = -108; - msg3_delta_Preamble = 6; - pucch_deltaF_Format1 = "deltaF2"; - pucch_deltaF_Format1b = "deltaF3"; - pucch_deltaF_Format2 = "deltaF0"; - pucch_deltaF_Format2a = "deltaF0"; - pucch_deltaF_Format2b = "deltaF0"; - - rach_numberOfRA_Preambles = 64; - rach_preamblesGroupAConfig = "DISABLE"; -/* - rach_sizeOfRA_PreamblesGroupA = ; - rach_messageSizeGroupA = ; - rach_messagePowerOffsetGroupB = ; -*/ - rach_powerRampingStep = 4; - rach_preambleInitialReceivedTargetPower = -108; - rach_preambleTransMax = 10; - rach_raResponseWindowSize = 10; - rach_macContentionResolutionTimer = 48; - rach_maxHARQ_Msg3Tx = 4; + pusch_p0_Nominal = -90; + pusch_alpha = "AL1"; + pucch_p0_Nominal = -108; + msg3_delta_Preamble = 6; + pucch_deltaF_Format1 = "deltaF2"; + pucch_deltaF_Format1b = "deltaF3"; + pucch_deltaF_Format2 = "deltaF0"; + pucch_deltaF_Format2a = "deltaF0"; + pucch_deltaF_Format2b = "deltaF0"; - pcch_default_PagingCycle = 128; - pcch_nB = "oneT"; - bcch_modificationPeriodCoeff = 2; - ue_TimersAndConstants_t300 = 1000; - ue_TimersAndConstants_t301 = 1000; - ue_TimersAndConstants_t310 = 1000; - ue_TimersAndConstants_t311 = 10000; - ue_TimersAndConstants_n310 = 20; - ue_TimersAndConstants_n311 = 1; + rach_numberOfRA_Preambles = 64; + rach_preamblesGroupAConfig = "DISABLE"; + /* + rach_sizeOfRA_PreamblesGroupA = ; + rach_messageSizeGroupA = ; + rach_messagePowerOffsetGroupB = ; + */ + rach_powerRampingStep = 4; + rach_preambleInitialReceivedTargetPower = -108; + rach_preambleTransMax = 10; + rach_raResponseWindowSize = 10; + rach_macContentionResolutionTimer = 48; + rach_maxHARQ_Msg3Tx = 4; + + pcch_default_PagingCycle = 128; + pcch_nB = "oneT"; + bcch_modificationPeriodCoeff = 2; + ue_TimersAndConstants_t300 = 1000; + ue_TimersAndConstants_t301 = 1000; + ue_TimersAndConstants_t310 = 1000; + ue_TimersAndConstants_t311 = 10000; + ue_TimersAndConstants_n310 = 20; + ue_TimersAndConstants_n311 = 1; + } + ); + + + srb1_parameters : + { + # timer_poll_retransmit = (ms) [5, 10, 15, 20,... 250, 300, 350, ... 500] + timer_poll_retransmit = 80; + + # timer_reordering = (ms) [0,5, ... 100, 110, 120, ... ,200] + timer_reordering = 35; + + # timer_reordering = (ms) [0,5, ... 250, 300, 350, ... ,500] + timer_status_prohibit = 0; + + # poll_pdu = [4, 8, 16, 32 , 64, 128, 256, infinity(>10000)] + poll_pdu = 4; + + # poll_byte = (kB) [25,50,75,100,125,250,375,500,750,1000,1250,1500,2000,3000,infinity(>10000)] + poll_byte = 99999; + + # max_retx_threshold = [1, 2, 3, 4 , 6, 8, 16, 32] + max_retx_threshold = 4; + } + + # ------- SCTP definitions + SCTP : + { + # Number of streams to use in input/output + SCTP_INSTREAMS = 2; + SCTP_OUTSTREAMS = 2; + }; - } - ); - ////////// MME parameters: mme_ip_address = ( { ipv4 = "192.168.13.11"; ipv6 = "192:168:30::17"; @@ -111,33 +138,33 @@ eNBs = } ); - NETWORK_INTERFACES : + NETWORK_INTERFACES : { - ENB_INTERFACE_NAME_FOR_S1_MME = "eth0"; - ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.13.10/24"; + ENB_INTERFACE_NAME_FOR_S1_MME = "eth0"; + ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.13.10/24"; - ENB_INTERFACE_NAME_FOR_S1U = "eth0"; - ENB_IPV4_ADDRESS_FOR_S1U = "192.168.13.10/24"; - ENB_PORT_FOR_S1U = 2152; # Spec 2152 + ENB_INTERFACE_NAME_FOR_S1U = "eth0"; + ENB_IPV4_ADDRESS_FOR_S1U = "192.168.13.10/24"; + ENB_PORT_FOR_S1U = 2152; # Spec 2152 }; - - log_config : + + log_config : { - global_log_level ="info"; - global_log_verbosity ="medium"; - hw_log_level ="info"; - hw_log_verbosity ="medium"; - phy_log_level ="info"; - phy_log_verbosity ="medium"; - mac_log_level ="info"; - mac_log_verbosity ="high"; - rlc_log_level ="info"; - rlc_log_verbosity ="medium"; - pdcp_log_level ="info"; - pdcp_log_verbosity ="medium"; - rrc_log_level ="info"; - rrc_log_verbosity ="medium"; - }; - + global_log_level ="info"; + global_log_verbosity ="medium"; + hw_log_level ="info"; + hw_log_verbosity ="medium"; + phy_log_level ="info"; + phy_log_verbosity ="medium"; + mac_log_level ="info"; + mac_log_verbosity ="high"; + rlc_log_level ="info"; + rlc_log_verbosity ="medium"; + pdcp_log_level ="info"; + pdcp_log_verbosity ="medium"; + rrc_log_level ="info"; + rrc_log_verbosity ="medium"; + }; + } ); diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band5.tm1.usrpb210.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band5.tm1.usrpb210.conf index 402134152f..827cd8834a 100644 --- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band5.tm1.usrpb210.conf +++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band5.tm1.usrpb210.conf @@ -5,8 +5,6 @@ Asn1_verbosity = "none"; eNBs = ( { - # real_time choice in {hard, rt-preempt, no} - real_time = "no"; ////////// Identification parameters: eNB_ID = 0xe00; @@ -102,6 +100,36 @@ eNBs = } ); + + + srb1_parameters : + { + # timer_poll_retransmit = (ms) [5, 10, 15, 20,... 250, 300, 350, ... 500] + timer_poll_retransmit = 80; + + # timer_reordering = (ms) [0,5, ... 100, 110, 120, ... ,200] + timer_reordering = 35; + + # timer_reordering = (ms) [0,5, ... 250, 300, 350, ... ,500] + timer_status_prohibit = 0; + + # poll_pdu = [4, 8, 16, 32 , 64, 128, 256, infinity(>10000)] + poll_pdu = 4; + + # poll_byte = (kB) [25,50,75,100,125,250,375,500,750,1000,1250,1500,2000,3000,infinity(>10000)] + poll_byte = 99999; + + # max_retx_threshold = [1, 2, 3, 4 , 6, 8, 16, 32] + max_retx_threshold = 4; + } + + # ------- SCTP definitions + SCTP : + { + # Number of streams to use in input/output + SCTP_INSTREAMS = 2; + SCTP_OUTSTREAMS = 2; + }; ////////// MME parameters: mme_ip_address = ( { ipv4 = "192.168.13.11"; diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.exmimo2.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.exmimo2.conf index 2c6c12eef8..bc9d15195c 100644 --- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.exmimo2.conf +++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.exmimo2.conf @@ -5,8 +5,6 @@ Asn1_verbosity = "none"; eNBs = ( { - # real_time choice in {hard, rt-preempt, no} - real_time = "no"; ////////// Identification parameters: eNB_ID = 0xe00; @@ -103,6 +101,7 @@ eNBs = } ); + srb1_parameters : { # timer_poll_retransmit = (ms) [5, 10, 15, 20,... 250, 300, 350, ... 500] @@ -123,6 +122,14 @@ eNBs = # max_retx_threshold = [1, 2, 3, 4 , 6, 8, 16, 32] max_retx_threshold = 4; } + + # ------- SCTP definitions + SCTP : + { + # Number of streams to use in input/output + SCTP_INSTREAMS = 2; + SCTP_OUTSTREAMS = 2; + }; ////////// MME parameters: mme_ip_address = ( { ipv4 = "192.168.13.11"; diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.exmimo2_2a.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.exmimo2_2a.conf index 1f05550486..afd7ccb68d 100644 --- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.exmimo2_2a.conf +++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.exmimo2_2a.conf @@ -5,8 +5,6 @@ Asn1_verbosity = "none"; eNBs = ( { - # real_time choice in {hard, rt-preempt, no} - real_time = "no"; ////////// Identification parameters: eNB_ID = 0xe00; @@ -104,6 +102,36 @@ eNBs = } ); + + srb1_parameters : + { + # timer_poll_retransmit = (ms) [5, 10, 15, 20,... 250, 300, 350, ... 500] + timer_poll_retransmit = 80; + + # timer_reordering = (ms) [0,5, ... 100, 110, 120, ... ,200] + timer_reordering = 35; + + # timer_reordering = (ms) [0,5, ... 250, 300, 350, ... ,500] + timer_status_prohibit = 0; + + # poll_pdu = [4, 8, 16, 32 , 64, 128, 256, infinity(>10000)] + poll_pdu = 4; + + # poll_byte = (kB) [25,50,75,100,125,250,375,500,750,1000,1250,1500,2000,3000,infinity(>10000)] + poll_byte = 99999; + + # max_retx_threshold = [1, 2, 3, 4 , 6, 8, 16, 32] + max_retx_threshold = 4; + } + + # ------- SCTP definitions + SCTP : + { + # Number of streams to use in input/output + SCTP_INSTREAMS = 2; + SCTP_OUTSTREAMS = 2; + }; + ////////// MME parameters: mme_ip_address = ( { ipv4 = "192.168.13.11"; ipv6 = "192:168:30::17"; diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.conf index db5a61e66e..10bee7627a 100644 --- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.conf +++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.conf @@ -5,8 +5,6 @@ Asn1_verbosity = "none"; eNBs = ( { - # real_time choice in {hard, rt-preempt, no} - real_time = "no"; ////////// Identification parameters: eNB_ID = 0xe00; @@ -102,7 +100,38 @@ eNBs = } ); + + + + srb1_parameters : + { + # timer_poll_retransmit = (ms) [5, 10, 15, 20,... 250, 300, 350, ... 500] + timer_poll_retransmit = 80; + + # timer_reordering = (ms) [0,5, ... 100, 110, 120, ... ,200] + timer_reordering = 35; + + # timer_reordering = (ms) [0,5, ... 250, 300, 350, ... ,500] + timer_status_prohibit = 0; + + # poll_pdu = [4, 8, 16, 32 , 64, 128, 256, infinity(>10000)] + poll_pdu = 4; + + # poll_byte = (kB) [25,50,75,100,125,250,375,500,750,1000,1250,1500,2000,3000,infinity(>10000)] + poll_byte = 99999; + + # max_retx_threshold = [1, 2, 3, 4 , 6, 8, 16, 32] + max_retx_threshold = 4; + } + # ------- SCTP definitions + SCTP : + { + # Number of streams to use in input/output + SCTP_INSTREAMS = 2; + SCTP_OUTSTREAMS = 2; + }; + ////////// MME parameters: mme_ip_address = ( { ipv4 = "192.168.13.11"; ipv6 = "192:168:30::17"; diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_mme.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_mme.conf index b405f22025..630d6f028e 100644 --- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_mme.conf +++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_mme.conf @@ -5,8 +5,6 @@ Asn1_verbosity = "none"; eNBs = ( { - # real_time choice in {hard, rt-preempt, no} - real_time = "no"; ////////// Identification parameters: eNB_ID = 0xe00; @@ -102,6 +100,36 @@ eNBs = } ); + + srb1_parameters : + { + # timer_poll_retransmit = (ms) [5, 10, 15, 20,... 250, 300, 350, ... 500] + timer_poll_retransmit = 80; + + # timer_reordering = (ms) [0,5, ... 100, 110, 120, ... ,200] + timer_reordering = 35; + + # timer_reordering = (ms) [0,5, ... 250, 300, 350, ... ,500] + timer_status_prohibit = 0; + + # poll_pdu = [4, 8, 16, 32 , 64, 128, 256, infinity(>10000)] + poll_pdu = 4; + + # poll_byte = (kB) [25,50,75,100,125,250,375,500,750,1000,1250,1500,2000,3000,infinity(>10000)] + poll_byte = 99999; + + # max_retx_threshold = [1, 2, 3, 4 , 6, 8, 16, 32] + max_retx_threshold = 4; + } + + # ------- SCTP definitions + SCTP : + { + # Number of streams to use in input/output + SCTP_INSTREAMS = 2; + SCTP_OUTSTREAMS = 2; + }; + ////////// MME parameters: mme_ip_address = ( { ipv4 = "192.188.2.2"; ipv6 = "192:168:30::17"; diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf index 67dcaad7ce..50cb6747ac 100644 --- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf +++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf @@ -5,8 +5,6 @@ Asn1_verbosity = "none"; eNBs = ( { - # real_time choice in {hard, rt-preempt, no} - real_time = "no"; ////////// Identification parameters: eNB_ID = 0xe00; @@ -24,82 +22,82 @@ eNBs = ////////// Physical parameters: component_carriers = ( - { - frame_type = "FDD"; - tdd_config = 3; - tdd_config_s = 0; - prefix_type = "NORMAL"; - eutra_band = 7; - downlink_frequency = 2680000000L; - uplink_frequency_offset = -120000000; - Nid_cell = 0; - N_RB_DL = 25; - Nid_cell_mbsfn = 0; - nb_antennas_tx = 1; - nb_antennas_rx = 1; - tx_gain = 25; - rx_gain = 20; - prach_root = 0; - prach_config_index = 0; - prach_high_speed = "DISABLE"; - prach_zero_correlation = 1; - prach_freq_offset = 2; - pucch_delta_shift = 1; - pucch_nRB_CQI = 1; - pucch_nCS_AN = 0; - pucch_n1_AN = 32; - pdsch_referenceSignalPower = 0; - pdsch_p_b = 0; - pusch_n_SB = 1; - pusch_enable64QAM = "DISABLE"; - pusch_hoppingMode = "interSubFrame"; - pusch_hoppingOffset = 0; - pusch_groupHoppingEnabled = "ENABLE"; - pusch_groupAssignment = 0; - pusch_sequenceHoppingEnabled = "DISABLE"; - pusch_nDMRS1 = 0; - phich_duration = "NORMAL"; - phich_resource = "ONESIXTH"; - srs_enable = "DISABLE"; - /* srs_BandwidthConfig =; - srs_SubframeConfig =; - srs_ackNackST =; - srs_MaxUpPts =;*/ + { + frame_type = "FDD"; + tdd_config = 3; + tdd_config_s = 0; + prefix_type = "NORMAL"; + eutra_band = 7; + downlink_frequency = 2680000000L; + uplink_frequency_offset = -120000000; + Nid_cell = 0; + N_RB_DL = 25; + Nid_cell_mbsfn = 0; + nb_antennas_tx = 1; + nb_antennas_rx = 1; + tx_gain = 25; + rx_gain = 20; + prach_root = 0; + prach_config_index = 0; + prach_high_speed = "DISABLE"; + prach_zero_correlation = 1; + prach_freq_offset = 2; + pucch_delta_shift = 1; + pucch_nRB_CQI = 1; + pucch_nCS_AN = 0; + pucch_n1_AN = 32; + pdsch_referenceSignalPower = 0; + pdsch_p_b = 0; + pusch_n_SB = 1; + pusch_enable64QAM = "DISABLE"; + pusch_hoppingMode = "interSubFrame"; + pusch_hoppingOffset = 0; + pusch_groupHoppingEnabled = "ENABLE"; + pusch_groupAssignment = 0; + pusch_sequenceHoppingEnabled = "DISABLE"; + pusch_nDMRS1 = 0; + phich_duration = "NORMAL"; + phich_resource = "ONESIXTH"; + srs_enable = "DISABLE"; + /* srs_BandwidthConfig =; + srs_SubframeConfig =; + srs_ackNackST =; + srs_MaxUpPts =;*/ - pusch_p0_Nominal = -108; - pusch_alpha = "AL1"; - pucch_p0_Nominal = -108; - msg3_delta_Preamble = 6; - pucch_deltaF_Format1 = "deltaF2"; - pucch_deltaF_Format1b = "deltaF3"; - pucch_deltaF_Format2 = "deltaF0"; - pucch_deltaF_Format2a = "deltaF0"; - pucch_deltaF_Format2b = "deltaF0"; + pusch_p0_Nominal = -108; + pusch_alpha = "AL1"; + pucch_p0_Nominal = -108; + msg3_delta_Preamble = 6; + pucch_deltaF_Format1 = "deltaF2"; + pucch_deltaF_Format1b = "deltaF3"; + pucch_deltaF_Format2 = "deltaF0"; + pucch_deltaF_Format2a = "deltaF0"; + pucch_deltaF_Format2b = "deltaF0"; - rach_numberOfRA_Preambles = 64; - rach_preamblesGroupAConfig = "DISABLE"; -/* - rach_sizeOfRA_PreamblesGroupA = ; - rach_messageSizeGroupA = ; - rach_messagePowerOffsetGroupB = ; -*/ - rach_powerRampingStep = 2; - rach_preambleInitialReceivedTargetPower = -100; - rach_preambleTransMax = 10; - rach_raResponseWindowSize = 10; - rach_macContentionResolutionTimer = 48; - rach_maxHARQ_Msg3Tx = 4; + rach_numberOfRA_Preambles = 64; + rach_preamblesGroupAConfig = "DISABLE"; + /* + rach_sizeOfRA_PreamblesGroupA = ; + rach_messageSizeGroupA = ; + rach_messagePowerOffsetGroupB = ; + */ + rach_powerRampingStep = 2; + rach_preambleInitialReceivedTargetPower = -100; + rach_preambleTransMax = 10; + rach_raResponseWindowSize = 10; + rach_macContentionResolutionTimer = 48; + rach_maxHARQ_Msg3Tx = 4; - pcch_default_PagingCycle = 128; - pcch_nB = "oneT"; - bcch_modificationPeriodCoeff = 2; - ue_TimersAndConstants_t300 = 1000; - ue_TimersAndConstants_t301 = 1000; - ue_TimersAndConstants_t310 = 1000; - ue_TimersAndConstants_t311 = 10000; - ue_TimersAndConstants_n310 = 20; - ue_TimersAndConstants_n311 = 1; - } + pcch_default_PagingCycle = 128; + pcch_nB = "oneT"; + bcch_modificationPeriodCoeff = 2; + ue_TimersAndConstants_t300 = 1000; + ue_TimersAndConstants_t301 = 1000; + ue_TimersAndConstants_t310 = 1000; + ue_TimersAndConstants_t311 = 10000; + ue_TimersAndConstants_n310 = 20; + ue_TimersAndConstants_n311 = 1; + } ); ////////// MME parameters: @@ -122,27 +120,26 @@ eNBs = log_config : { - global_log_level ="trace"; - global_log_verbosity ="medium"; - hw_log_level ="info"; - hw_log_verbosity ="medium"; - phy_log_level ="trace"; - phy_log_verbosity ="medium"; - mac_log_level ="trace"; - mac_log_verbosity ="medium"; - rlc_log_level ="trace"; - rlc_log_verbosity ="medium"; - pdcp_log_level ="trace"; - pdcp_log_verbosity ="medium"; - rrc_log_level ="trace"; - rrc_log_verbosity ="medium"; - gtpu_log_level ="debug"; - gtpu_log_verbosity ="medium"; - udp_log_level ="debug"; - udp_log_verbosity ="medium"; - osa_log_level ="debug"; - osa_log_verbosity ="low"; - + global_log_level ="trace"; + global_log_verbosity ="medium"; + hw_log_level ="info"; + hw_log_verbosity ="medium"; + phy_log_level ="trace"; + phy_log_verbosity ="medium"; + mac_log_level ="trace"; + mac_log_verbosity ="medium"; + rlc_log_level ="trace"; + rlc_log_verbosity ="medium"; + pdcp_log_level ="trace"; + pdcp_log_verbosity ="medium"; + rrc_log_level ="trace"; + rrc_log_verbosity ="medium"; + gtpu_log_level ="debug"; + gtpu_log_verbosity ="medium"; + udp_log_level ="debug"; + udp_log_verbosity ="medium"; + osa_log_level ="debug"; + osa_log_verbosity ="low"; }; } diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpb210.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpb210.conf index 93f364c021..1d47abdd60 100644 --- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpb210.conf +++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpb210.conf @@ -5,104 +5,130 @@ Asn1_verbosity = "none"; eNBs = ( { - # real_time choice in {hard, rt-preempt, no} - real_time = "no"; ////////// Identification parameters: eNB_ID = 0xe00; - + cell_type = "CELL_MACRO_ENB"; - + eNB_name = "eNB_Eurecom_LTEBox"; - + // Tracking area code, 0x0000 and 0xfffe are reserved values tracking_area_code = "1"; - + mobile_country_code = "208"; - + mobile_network_code = "92"; - + ////////// Physical parameters: - + component_carriers = ( - { - frame_type = "FDD"; - tdd_config = 3; - tdd_config_s = 0; - prefix_type = "NORMAL"; - eutra_band = 7; - downlink_frequency = 2660000000L; - uplink_frequency_offset = -120000000; - Nid_cell = 0; - N_RB_DL = 100; - Nid_cell_mbsfn = 0; - nb_antennas_tx = 1; - nb_antennas_rx = 1; - tx_gain = 90; - rx_gain = 120; - prach_root = 0; - prach_config_index = 0; - prach_high_speed = "DISABLE"; - prach_zero_correlation = 1; - prach_freq_offset = 2; - pucch_delta_shift = 1; - pucch_nRB_CQI = 1; - pucch_nCS_AN = 0; - pucch_n1_AN = 32; - pdsch_referenceSignalPower = -26; - pdsch_p_b = 0; - pusch_n_SB = 1; - pusch_enable64QAM = "DISABLE"; - pusch_hoppingMode = "interSubFrame"; - pusch_hoppingOffset = 0; - pusch_groupHoppingEnabled = "ENABLE"; - pusch_groupAssignment = 0; - pusch_sequenceHoppingEnabled = "DISABLE"; - pusch_nDMRS1 = 1; - phich_duration = "NORMAL"; - phich_resource = "ONESIXTH"; - srs_enable = "DISABLE"; - /* srs_BandwidthConfig =; - srs_SubframeConfig =; - srs_ackNackST =; - srs_MaxUpPts =;*/ + { + frame_type = "FDD"; + tdd_config = 3; + tdd_config_s = 0; + prefix_type = "NORMAL"; + eutra_band = 7; + downlink_frequency = 2660000000L; + uplink_frequency_offset = -120000000; + Nid_cell = 0; + N_RB_DL = 100; + Nid_cell_mbsfn = 0; + nb_antennas_tx = 1; + nb_antennas_rx = 1; + tx_gain = 90; + rx_gain = 120; + prach_root = 0; + prach_config_index = 0; + prach_high_speed = "DISABLE"; + prach_zero_correlation = 1; + prach_freq_offset = 2; + pucch_delta_shift = 1; + pucch_nRB_CQI = 1; + pucch_nCS_AN = 0; + pucch_n1_AN = 32; + pdsch_referenceSignalPower = -26; + pdsch_p_b = 0; + pusch_n_SB = 1; + pusch_enable64QAM = "DISABLE"; + pusch_hoppingMode = "interSubFrame"; + pusch_hoppingOffset = 0; + pusch_groupHoppingEnabled = "ENABLE"; + pusch_groupAssignment = 0; + pusch_sequenceHoppingEnabled = "DISABLE"; + pusch_nDMRS1 = 1; + phich_duration = "NORMAL"; + phich_resource = "ONESIXTH"; + srs_enable = "DISABLE"; + /* srs_BandwidthConfig =; + srs_SubframeConfig =; + srs_ackNackST =; + srs_MaxUpPts =;*/ - pusch_p0_Nominal = -90; - pusch_alpha = "AL1"; - pucch_p0_Nominal = -108; - msg3_delta_Preamble = 6; - pucch_deltaF_Format1 = "deltaF2"; - pucch_deltaF_Format1b = "deltaF3"; - pucch_deltaF_Format2 = "deltaF0"; - pucch_deltaF_Format2a = "deltaF0"; - pucch_deltaF_Format2b = "deltaF0"; - - rach_numberOfRA_Preambles = 64; - rach_preamblesGroupAConfig = "DISABLE"; -/* - rach_sizeOfRA_PreamblesGroupA = ; - rach_messageSizeGroupA = ; - rach_messagePowerOffsetGroupB = ; -*/ - rach_powerRampingStep = 4; - rach_preambleInitialReceivedTargetPower = -108; - rach_preambleTransMax = 10; - rach_raResponseWindowSize = 10; - rach_macContentionResolutionTimer = 48; - rach_maxHARQ_Msg3Tx = 4; + pusch_p0_Nominal = -90; + pusch_alpha = "AL1"; + pucch_p0_Nominal = -108; + msg3_delta_Preamble = 6; + pucch_deltaF_Format1 = "deltaF2"; + pucch_deltaF_Format1b = "deltaF3"; + pucch_deltaF_Format2 = "deltaF0"; + pucch_deltaF_Format2a = "deltaF0"; + pucch_deltaF_Format2b = "deltaF0"; - pcch_default_PagingCycle = 128; - pcch_nB = "oneT"; - bcch_modificationPeriodCoeff = 2; - ue_TimersAndConstants_t300 = 1000; - ue_TimersAndConstants_t301 = 1000; - ue_TimersAndConstants_t310 = 1000; - ue_TimersAndConstants_t311 = 10000; - ue_TimersAndConstants_n310 = 20; - ue_TimersAndConstants_n311 = 1; + rach_numberOfRA_Preambles = 64; + rach_preamblesGroupAConfig = "DISABLE"; + /* + rach_sizeOfRA_PreamblesGroupA = ; + rach_messageSizeGroupA = ; + rach_messagePowerOffsetGroupB = ; + */ + rach_powerRampingStep = 4; + rach_preambleInitialReceivedTargetPower = -108; + rach_preambleTransMax = 10; + rach_raResponseWindowSize = 10; + rach_macContentionResolutionTimer = 48; + rach_maxHARQ_Msg3Tx = 4; + + pcch_default_PagingCycle = 128; + pcch_nB = "oneT"; + bcch_modificationPeriodCoeff = 2; + ue_TimersAndConstants_t300 = 1000; + ue_TimersAndConstants_t301 = 1000; + ue_TimersAndConstants_t310 = 1000; + ue_TimersAndConstants_t311 = 10000; + ue_TimersAndConstants_n310 = 20; + ue_TimersAndConstants_n311 = 1; + } + ); + + srb1_parameters : + { + # timer_poll_retransmit = (ms) [5, 10, 15, 20,... 250, 300, 350, ... 500] + timer_poll_retransmit = 80; + + # timer_reordering = (ms) [0,5, ... 100, 110, 120, ... ,200] + timer_reordering = 35; + + # timer_reordering = (ms) [0,5, ... 250, 300, 350, ... ,500] + timer_status_prohibit = 0; + + # poll_pdu = [4, 8, 16, 32 , 64, 128, 256, infinity(>10000)] + poll_pdu = 4; + + # poll_byte = (kB) [25,50,75,100,125,250,375,500,750,1000,1250,1500,2000,3000,infinity(>10000)] + poll_byte = 99999; + + # max_retx_threshold = [1, 2, 3, 4 , 6, 8, 16, 32] + max_retx_threshold = 4; + } + + # ------- SCTP definitions + SCTP : + { + # Number of streams to use in input/output + SCTP_INSTREAMS = 2; + SCTP_OUTSTREAMS = 2; + }; - } - ); - ////////// MME parameters: mme_ip_address = ( { ipv4 = "192.168.13.11"; ipv6 = "192:168:30::17"; @@ -111,7 +137,7 @@ eNBs = } ); - NETWORK_INTERFACES : + NETWORK_INTERFACES : { ENB_INTERFACE_NAME_FOR_S1_MME = "eth0"; ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.13.10/24"; @@ -120,24 +146,24 @@ eNBs = ENB_IPV4_ADDRESS_FOR_S1U = "192.168.13.10/24"; ENB_PORT_FOR_S1U = 2152; # Spec 2152 }; - - log_config : + + log_config : { - global_log_level ="info"; - global_log_verbosity ="medium"; - hw_log_level ="info"; - hw_log_verbosity ="medium"; - phy_log_level ="info"; - phy_log_verbosity ="medium"; - mac_log_level ="info"; - mac_log_verbosity ="high"; - rlc_log_level ="info"; - rlc_log_verbosity ="medium"; - pdcp_log_level ="info"; - pdcp_log_verbosity ="medium"; - rrc_log_level ="info"; - rrc_log_verbosity ="medium"; - }; - + global_log_level ="info"; + global_log_verbosity ="medium"; + hw_log_level ="info"; + hw_log_verbosity ="medium"; + phy_log_level ="info"; + phy_log_verbosity ="medium"; + mac_log_level ="info"; + mac_log_verbosity ="high"; + rlc_log_level ="info"; + rlc_log_verbosity ="medium"; + pdcp_log_level ="info"; + pdcp_log_verbosity ="medium"; + rrc_log_level ="info"; + rrc_log_verbosity ="medium"; + }; + } ); diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpb210.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpb210.conf index 5c02dc61d8..8f9dc280ae 100644 --- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpb210.conf +++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpb210.conf @@ -5,139 +5,164 @@ Asn1_verbosity = "none"; eNBs = ( { - # real_time choice in {hard, rt-preempt, no} - real_time = "no"; ////////// Identification parameters: eNB_ID = 0xe00; - + cell_type = "CELL_MACRO_ENB"; - + eNB_name = "eNB_Eurecom_LTEBox"; - + // Tracking area code, 0x0000 and 0xfffe are reserved values tracking_area_code = "1"; - + mobile_country_code = "208"; - - mobile_network_code = "92"; - + + mobile_network_code = "93"; + ////////// Physical parameters: - + component_carriers = ( - { - frame_type = "FDD"; - tdd_config = 3; - tdd_config_s = 0; - prefix_type = "NORMAL"; - eutra_band = 7; - downlink_frequency = 2660000000L; - uplink_frequency_offset = -120000000; - Nid_cell = 0; - N_RB_DL = 50; - Nid_cell_mbsfn = 0; - nb_antennas_tx = 1; - nb_antennas_rx = 1; - tx_gain = 90; - rx_gain = 120; - prach_root = 0; - prach_config_index = 0; - prach_high_speed = "DISABLE"; - prach_zero_correlation = 1; - prach_freq_offset = 2; - pucch_delta_shift = 1; - pucch_nRB_CQI = 1; - pucch_nCS_AN = 0; - pucch_n1_AN = 32; - pdsch_referenceSignalPower = -26; - pdsch_p_b = 0; - pusch_n_SB = 1; - pusch_enable64QAM = "DISABLE"; - pusch_hoppingMode = "interSubFrame"; - pusch_hoppingOffset = 0; - pusch_groupHoppingEnabled = "ENABLE"; - pusch_groupAssignment = 0; - pusch_sequenceHoppingEnabled = "DISABLE"; - pusch_nDMRS1 = 1; - phich_duration = "NORMAL"; - phich_resource = "ONESIXTH"; - srs_enable = "DISABLE"; - /* srs_BandwidthConfig =; - srs_SubframeConfig =; - srs_ackNackST =; - srs_MaxUpPts =;*/ + { + frame_type = "FDD"; + tdd_config = 3; + tdd_config_s = 0; + prefix_type = "NORMAL"; + eutra_band = 7; + downlink_frequency = 2660000000L; + uplink_frequency_offset = -120000000; + Nid_cell = 0; + N_RB_DL = 50; + Nid_cell_mbsfn = 0; + nb_antennas_tx = 1; + nb_antennas_rx = 1; + tx_gain = 90; + rx_gain = 118; + prach_root = 0; + prach_config_index = 0; + prach_high_speed = "DISABLE"; + prach_zero_correlation = 1; + prach_freq_offset = 2; + pucch_delta_shift = 1; + pucch_nRB_CQI = 1; + pucch_nCS_AN = 0; + pucch_n1_AN = 32; + pdsch_referenceSignalPower = -29; + pdsch_p_b = 0; + pusch_n_SB = 1; + pusch_enable64QAM = "DISABLE"; + pusch_hoppingMode = "interSubFrame"; + pusch_hoppingOffset = 0; + pusch_groupHoppingEnabled = "ENABLE"; + pusch_groupAssignment = 0; + pusch_sequenceHoppingEnabled = "DISABLE"; + pusch_nDMRS1 = 1; + phich_duration = "NORMAL"; + phich_resource = "ONESIXTH"; + srs_enable = "DISABLE"; + /* srs_BandwidthConfig =; + srs_SubframeConfig =; + srs_ackNackST =; + srs_MaxUpPts =;*/ - pusch_p0_Nominal = -90; - pusch_alpha = "AL1"; - pucch_p0_Nominal = -108; - msg3_delta_Preamble = 6; - pucch_deltaF_Format1 = "deltaF2"; - pucch_deltaF_Format1b = "deltaF3"; - pucch_deltaF_Format2 = "deltaF0"; - pucch_deltaF_Format2a = "deltaF0"; - pucch_deltaF_Format2b = "deltaF0"; - - rach_numberOfRA_Preambles = 64; - rach_preamblesGroupAConfig = "DISABLE"; -/* - rach_sizeOfRA_PreamblesGroupA = ; - rach_messageSizeGroupA = ; - rach_messagePowerOffsetGroupB = ; -*/ - rach_powerRampingStep = 4; - rach_preambleInitialReceivedTargetPower = -108; - rach_preambleTransMax = 10; - rach_raResponseWindowSize = 10; - rach_macContentionResolutionTimer = 48; - rach_maxHARQ_Msg3Tx = 4; + pusch_p0_Nominal = -90; + pusch_alpha = "AL1"; + pucch_p0_Nominal = -108; + msg3_delta_Preamble = 6; + pucch_deltaF_Format1 = "deltaF2"; + pucch_deltaF_Format1b = "deltaF3"; + pucch_deltaF_Format2 = "deltaF0"; + pucch_deltaF_Format2a = "deltaF0"; + pucch_deltaF_Format2b = "deltaF0"; - pcch_default_PagingCycle = 128; - pcch_nB = "oneT"; - bcch_modificationPeriodCoeff = 2; - ue_TimersAndConstants_t300 = 1000; - ue_TimersAndConstants_t301 = 1000; - ue_TimersAndConstants_t310 = 1000; - ue_TimersAndConstants_t311 = 10000; - ue_TimersAndConstants_n310 = 20; - ue_TimersAndConstants_n311 = 1; + rach_numberOfRA_Preambles = 64; + rach_preamblesGroupAConfig = "DISABLE"; + /* + rach_sizeOfRA_PreamblesGroupA = ; + rach_messageSizeGroupA = ; + rach_messagePowerOffsetGroupB = ; + */ + rach_powerRampingStep = 4; + rach_preambleInitialReceivedTargetPower = -108; + rach_preambleTransMax = 10; + rach_raResponseWindowSize = 10; + rach_macContentionResolutionTimer = 48; + rach_maxHARQ_Msg3Tx = 4; + + pcch_default_PagingCycle = 128; + pcch_nB = "oneT"; + bcch_modificationPeriodCoeff = 2; + ue_TimersAndConstants_t300 = 1000; + ue_TimersAndConstants_t301 = 1000; + ue_TimersAndConstants_t310 = 1000; + ue_TimersAndConstants_t311 = 10000; + ue_TimersAndConstants_n310 = 20; + ue_TimersAndConstants_n311 = 1; + } + ); + + srb1_parameters : + { + # timer_poll_retransmit = (ms) [5, 10, 15, 20,... 250, 300, 350, ... 500] + timer_poll_retransmit = 80; + + # timer_reordering = (ms) [0,5, ... 100, 110, 120, ... ,200] + timer_reordering = 35; + + # timer_reordering = (ms) [0,5, ... 250, 300, 350, ... ,500] + timer_status_prohibit = 0; + + # poll_pdu = [4, 8, 16, 32 , 64, 128, 256, infinity(>10000)] + poll_pdu = 4; + + # poll_byte = (kB) [25,50,75,100,125,250,375,500,750,1000,1250,1500,2000,3000,infinity(>10000)] + poll_byte = 99999; + + # max_retx_threshold = [1, 2, 3, 4 , 6, 8, 16, 32] + max_retx_threshold = 4; + } + + # ------- SCTP definitions + SCTP : + { + # Number of streams to use in input/output + SCTP_INSTREAMS = 2; + SCTP_OUTSTREAMS = 2; + }; - } - ); - ////////// MME parameters: - mme_ip_address = ( { ipv4 = "192.168.13.11"; + mme_ip_address = ( { ipv4 = "192.168.12.11"; ipv6 = "192:168:30::17"; active = "yes"; preference = "ipv4"; } ); - NETWORK_INTERFACES : + NETWORK_INTERFACES : { ENB_INTERFACE_NAME_FOR_S1_MME = "eth0"; - ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.13.10/24"; + ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.213/24"; ENB_INTERFACE_NAME_FOR_S1U = "eth0"; - ENB_IPV4_ADDRESS_FOR_S1U = "192.168.13.10/24"; + ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.213/24"; ENB_PORT_FOR_S1U = 2152; # Spec 2152 }; - - log_config : + + log_config : { - global_log_level ="info"; - global_log_verbosity ="medium"; - hw_log_level ="info"; - hw_log_verbosity ="medium"; - phy_log_level ="info"; - phy_log_verbosity ="medium"; - mac_log_level ="info"; - mac_log_verbosity ="high"; - rlc_log_level ="info"; - rlc_log_verbosity ="medium"; - pdcp_log_level ="info"; - pdcp_log_verbosity ="medium"; - rrc_log_level ="info"; - rrc_log_verbosity ="medium"; - }; - + global_log_level ="info"; + global_log_verbosity ="medium"; + hw_log_level ="info"; + hw_log_verbosity ="medium"; + phy_log_level ="info"; + phy_log_verbosity ="medium"; + mac_log_level ="info"; + mac_log_verbosity ="high"; + rlc_log_level ="info"; + rlc_log_verbosity ="medium"; + pdcp_log_level ="info"; + pdcp_log_verbosity ="medium"; + rrc_log_level ="info"; + rrc_log_verbosity ="medium"; + }; } ); diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf new file mode 100644 index 0000000000..bdbb46a98b --- /dev/null +++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.bladerfx40.conf @@ -0,0 +1,171 @@ +Active_eNBs = ( "eNB_Eurecom_LTEBox"); +# Asn1_verbosity, choice in: none, info, annoying +Asn1_verbosity = "none"; + +eNBs = +( + { + ////////// Identification parameters: + eNB_ID = 0xe00; + + cell_type = "CELL_MACRO_ENB"; + + eNB_name = "eNB_Eurecom_LTEBox"; + + // Tracking area code, 0x0000 and 0xfffe are reserved values + tracking_area_code = "1"; + + mobile_country_code = "208"; + + mobile_network_code = "92"; + + ////////// Physical parameters: + + component_carriers = ( + { + frame_type = "FDD"; + tdd_config = 3; + tdd_config_s = 0; + prefix_type = "NORMAL"; + eutra_band = 7; + downlink_frequency = 2680000000L; + uplink_frequency_offset = -120000000; + Nid_cell = 0; + N_RB_DL = 25; + Nid_cell_mbsfn = 0; + nb_antennas_tx = 1; + nb_antennas_rx = 1; + tx_gain = 20; + rx_gain = 20; + prach_root = 0; + prach_config_index = 0; + prach_high_speed = "DISABLE"; + prach_zero_correlation = 1; + prach_freq_offset = 2; + pucch_delta_shift = 1; + pucch_nRB_CQI = 1; + pucch_nCS_AN = 0; + pucch_n1_AN = 32; + pdsch_referenceSignalPower = -26; + pdsch_p_b = 0; + pusch_n_SB = 1; + pusch_enable64QAM = "DISABLE"; + pusch_hoppingMode = "interSubFrame"; + pusch_hoppingOffset = 0; + pusch_groupHoppingEnabled = "ENABLE"; + pusch_groupAssignment = 0; + pusch_sequenceHoppingEnabled = "DISABLE"; + pusch_nDMRS1 = 1; + phich_duration = "NORMAL"; + phich_resource = "ONESIXTH"; + srs_enable = "DISABLE"; + /* srs_BandwidthConfig =; + srs_SubframeConfig =; + srs_ackNackST =; + srs_MaxUpPts =;*/ + + pusch_p0_Nominal = -90; + pusch_alpha = "AL1"; + pucch_p0_Nominal = -108; + msg3_delta_Preamble = 6; + pucch_deltaF_Format1 = "deltaF2"; + pucch_deltaF_Format1b = "deltaF3"; + pucch_deltaF_Format2 = "deltaF0"; + pucch_deltaF_Format2a = "deltaF0"; + pucch_deltaF_Format2b = "deltaF0"; + + rach_numberOfRA_Preambles = 64; + rach_preamblesGroupAConfig = "DISABLE"; +/* + rach_sizeOfRA_PreamblesGroupA = ; + rach_messageSizeGroupA = ; + rach_messagePowerOffsetGroupB = ; +*/ + rach_powerRampingStep = 4; + rach_preambleInitialReceivedTargetPower = -108; + rach_preambleTransMax = 10; + rach_raResponseWindowSize = 10; + rach_macContentionResolutionTimer = 48; + rach_maxHARQ_Msg3Tx = 4; + + pcch_default_PagingCycle = 128; + pcch_nB = "oneT"; + bcch_modificationPeriodCoeff = 2; + ue_TimersAndConstants_t300 = 1000; + ue_TimersAndConstants_t301 = 1000; + ue_TimersAndConstants_t310 = 1000; + ue_TimersAndConstants_t311 = 10000; + ue_TimersAndConstants_n310 = 20; + ue_TimersAndConstants_n311 = 1; + + } + ); + + + srb1_parameters : + { + # timer_poll_retransmit = (ms) [5, 10, 15, 20,... 250, 300, 350, ... 500] + timer_poll_retransmit = 80; + + # timer_reordering = (ms) [0,5, ... 100, 110, 120, ... ,200] + timer_reordering = 35; + + # timer_reordering = (ms) [0,5, ... 250, 300, 350, ... ,500] + timer_status_prohibit = 0; + + # poll_pdu = [4, 8, 16, 32 , 64, 128, 256, infinity(>10000)] + poll_pdu = 4; + + # poll_byte = (kB) [25,50,75,100,125,250,375,500,750,1000,1250,1500,2000,3000,infinity(>10000)] + poll_byte = 99999; + + # max_retx_threshold = [1, 2, 3, 4 , 6, 8, 16, 32] + max_retx_threshold = 4; + } + + # ------- SCTP definitions + SCTP : + { + # Number of streams to use in input/output + SCTP_INSTREAMS = 2; + SCTP_OUTSTREAMS = 2; + }; + + ////////// MME parameters: + mme_ip_address = ( { ipv4 = "192.168.13.11"; + ipv6 = "192:168:30::17"; + active = "yes"; + preference = "ipv4"; + } + ); + + NETWORK_INTERFACES : + { + ENB_INTERFACE_NAME_FOR_S1_MME = "eth0"; + ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.13.10/24"; + + ENB_INTERFACE_NAME_FOR_S1U = "eth0"; + ENB_IPV4_ADDRESS_FOR_S1U = "192.168.13.10/24"; + ENB_PORT_FOR_S1U = 2152; # Spec 2152 + }; + + log_config : + { + global_log_level ="info"; + global_log_verbosity ="medium"; + hw_log_level ="info"; + hw_log_verbosity ="medium"; + phy_log_level ="info"; + phy_log_verbosity ="medium"; + mac_log_level ="info"; + mac_log_verbosity ="high"; + rlc_log_level ="info"; + rlc_log_verbosity ="medium"; + pdcp_log_level ="info"; + pdcp_log_verbosity ="medium"; + rrc_log_level ="info"; + rrc_log_verbosity ="medium"; + }; + + } +); diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf index dec6231aaa..212f341580 100644 --- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf +++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf @@ -5,104 +5,131 @@ Asn1_verbosity = "none"; eNBs = ( { - # real_time choice in {hard, rt-preempt, no} - real_time = "no"; ////////// Identification parameters: eNB_ID = 0xe00; - + cell_type = "CELL_MACRO_ENB"; - + eNB_name = "eNB_Eurecom_LTEBox"; - + // Tracking area code, 0x0000 and 0xfffe are reserved values tracking_area_code = "1"; - + mobile_country_code = "208"; - + mobile_network_code = "92"; - + ////////// Physical parameters: - + component_carriers = ( - { - frame_type = "FDD"; - tdd_config = 3; - tdd_config_s = 0; - prefix_type = "NORMAL"; - eutra_band = 7; - downlink_frequency = 2680000000L; - uplink_frequency_offset = -120000000; - Nid_cell = 0; - N_RB_DL = 50; - Nid_cell_mbsfn = 0; - nb_antennas_tx = 1; - nb_antennas_rx = 1; - tx_gain = 25; - rx_gain = 20; - prach_root = 0; - prach_config_index = 0; - prach_high_speed = "DISABLE"; - prach_zero_correlation = 1; - prach_freq_offset = 2; - pucch_delta_shift = 1; - pucch_nRB_CQI = 1; - pucch_nCS_AN = 0; - pucch_n1_AN = 32; - pdsch_referenceSignalPower = -26; - pdsch_p_b = 0; - pusch_n_SB = 1; - pusch_enable64QAM = "DISABLE"; - pusch_hoppingMode = "interSubFrame"; - pusch_hoppingOffset = 0; - pusch_groupHoppingEnabled = "ENABLE"; - pusch_groupAssignment = 0; - pusch_sequenceHoppingEnabled = "DISABLE"; - pusch_nDMRS1 = 0; - phich_duration = "NORMAL"; - phich_resource = "ONESIXTH"; - srs_enable = "DISABLE"; - /* srs_BandwidthConfig =; - srs_SubframeConfig =; - srs_ackNackST =; - srs_MaxUpPts =;*/ + { + frame_type = "FDD"; + tdd_config = 3; + tdd_config_s = 0; + prefix_type = "NORMAL"; + eutra_band = 7; + downlink_frequency = 2680000000L; + uplink_frequency_offset = -120000000; + Nid_cell = 0; + N_RB_DL = 50; + Nid_cell_mbsfn = 0; + nb_antennas_tx = 1; + nb_antennas_rx = 1; + tx_gain = 25; + rx_gain = 20; + prach_root = 0; + prach_config_index = 0; + prach_high_speed = "DISABLE"; + prach_zero_correlation = 1; + prach_freq_offset = 2; + pucch_delta_shift = 1; + pucch_nRB_CQI = 1; + pucch_nCS_AN = 0; + pucch_n1_AN = 32; + pdsch_referenceSignalPower = -26; + pdsch_p_b = 0; + pusch_n_SB = 1; + pusch_enable64QAM = "DISABLE"; + pusch_hoppingMode = "interSubFrame"; + pusch_hoppingOffset = 0; + pusch_groupHoppingEnabled = "ENABLE"; + pusch_groupAssignment = 0; + pusch_sequenceHoppingEnabled = "DISABLE"; + pusch_nDMRS1 = 0; + phich_duration = "NORMAL"; + phich_resource = "ONESIXTH"; + srs_enable = "DISABLE"; + /* srs_BandwidthConfig =; + srs_SubframeConfig =; + srs_ackNackST =; + srs_MaxUpPts =;*/ - pusch_p0_Nominal = -80; /*-85;*/ - pusch_alpha = "AL1"; - pucch_p0_Nominal = -108; /* -108 */ - msg3_delta_Preamble = 6; - pucch_deltaF_Format1 = "deltaF2"; - pucch_deltaF_Format1b = "deltaF3"; - pucch_deltaF_Format2 = "deltaF0"; - pucch_deltaF_Format2a = "deltaF0"; - pucch_deltaF_Format2b = "deltaF0"; - - rach_numberOfRA_Preambles = 64; - rach_preamblesGroupAConfig = "DISABLE"; -/* - rach_sizeOfRA_PreamblesGroupA = ; - rach_messageSizeGroupA = ; - rach_messagePowerOffsetGroupB = ; -*/ - rach_powerRampingStep = 2; - rach_preambleInitialReceivedTargetPower = -100; - rach_preambleTransMax = 10; - rach_raResponseWindowSize = 10; - rach_macContentionResolutionTimer = 48; - rach_maxHARQ_Msg3Tx = 4; + pusch_p0_Nominal = -80; /*-85;*/ + pusch_alpha = "AL1"; + pucch_p0_Nominal = -108; /* -108 */ + msg3_delta_Preamble = 6; + pucch_deltaF_Format1 = "deltaF2"; + pucch_deltaF_Format1b = "deltaF3"; + pucch_deltaF_Format2 = "deltaF0"; + pucch_deltaF_Format2a = "deltaF0"; + pucch_deltaF_Format2b = "deltaF0"; - pcch_default_PagingCycle = 128; - pcch_nB = "oneT"; - bcch_modificationPeriodCoeff = 2; - ue_TimersAndConstants_t300 = 1000; - ue_TimersAndConstants_t301 = 1000; - ue_TimersAndConstants_t310 = 1000; - ue_TimersAndConstants_t311 = 10000; - ue_TimersAndConstants_n310 = 20; - ue_TimersAndConstants_n311 = 1; + rach_numberOfRA_Preambles = 64; + rach_preamblesGroupAConfig = "DISABLE"; + /* + rach_sizeOfRA_PreamblesGroupA = ; + rach_messageSizeGroupA = ; + rach_messagePowerOffsetGroupB = ; + */ + rach_powerRampingStep = 2; + rach_preambleInitialReceivedTargetPower = -100; + rach_preambleTransMax = 10; + rach_raResponseWindowSize = 10; + rach_macContentionResolutionTimer = 48; + rach_maxHARQ_Msg3Tx = 4; + + pcch_default_PagingCycle = 128; + pcch_nB = "oneT"; + bcch_modificationPeriodCoeff = 2; + ue_TimersAndConstants_t300 = 1000; + ue_TimersAndConstants_t301 = 1000; + ue_TimersAndConstants_t310 = 1000; + ue_TimersAndConstants_t311 = 10000; + ue_TimersAndConstants_n310 = 20; + ue_TimersAndConstants_n311 = 1; + } + ); + + + srb1_parameters : + { + # timer_poll_retransmit = (ms) [5, 10, 15, 20,... 250, 300, 350, ... 500] + timer_poll_retransmit = 80; + + # timer_reordering = (ms) [0,5, ... 100, 110, 120, ... ,200] + timer_reordering = 35; + + # timer_reordering = (ms) [0,5, ... 250, 300, 350, ... ,500] + timer_status_prohibit = 0; + + # poll_pdu = [4, 8, 16, 32 , 64, 128, 256, infinity(>10000)] + poll_pdu = 4; + + # poll_byte = (kB) [25,50,75,100,125,250,375,500,750,1000,1250,1500,2000,3000,infinity(>10000)] + poll_byte = 99999; + + # max_retx_threshold = [1, 2, 3, 4 , 6, 8, 16, 32] + max_retx_threshold = 4; + } + + # ------- SCTP definitions + SCTP : + { + # Number of streams to use in input/output + SCTP_INSTREAMS = 2; + SCTP_OUTSTREAMS = 2; + }; - } - ); - ////////// MME parameters: mme_ip_address = ( { ipv4 = "10.0.1.1"; ipv6 = "192:168:30::17"; @@ -111,7 +138,7 @@ eNBs = } ); - NETWORK_INTERFACES : + NETWORK_INTERFACES : { ENB_INTERFACE_NAME_FOR_S1_MME = "eth3"; ENB_IPV4_ADDRESS_FOR_S1_MME = "10.0.1.229/24"; @@ -120,30 +147,30 @@ eNBs = ENB_IPV4_ADDRESS_FOR_S1U = "10.0.1.229/24"; ENB_PORT_FOR_S1U = 2152; # Spec 2152 }; - - log_config : + + log_config : { - global_log_level ="debug"; - global_log_verbosity ="medium"; - hw_log_level ="info"; - hw_log_verbosity ="medium"; - phy_log_level ="warn"; - phy_log_verbosity ="medium"; - mac_log_level ="warn"; - mac_log_verbosity ="medium"; - rlc_log_level ="warn"; - rlc_log_verbosity ="medium"; - pdcp_log_level ="warn"; - pdcp_log_verbosity ="medium"; - rrc_log_level ="info"; - rrc_log_verbosity ="medium"; - gtpu_log_level ="error"; - gtpu_log_verbosity ="medium"; - udp_log_level ="error"; - udp_log_verbosity ="medium"; - osa_log_level ="warn"; - osa_log_verbosity ="low"; - }; - + global_log_level ="debug"; + global_log_verbosity ="medium"; + hw_log_level ="info"; + hw_log_verbosity ="medium"; + phy_log_level ="warn"; + phy_log_verbosity ="medium"; + mac_log_level ="warn"; + mac_log_verbosity ="medium"; + rlc_log_level ="warn"; + rlc_log_verbosity ="medium"; + pdcp_log_level ="warn"; + pdcp_log_verbosity ="medium"; + rrc_log_level ="info"; + rrc_log_verbosity ="medium"; + gtpu_log_level ="error"; + gtpu_log_verbosity ="medium"; + udp_log_level ="error"; + udp_log_verbosity ="medium"; + osa_log_level ="warn"; + osa_log_verbosity ="low"; + }; + } ); diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf index 5954a023b0..2f11e42ba9 100644 --- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf +++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf @@ -5,160 +5,167 @@ Asn1_verbosity = "none"; eNBs = ( { - # real_time choice in {hard, rt-preempt, no} - real_time = "no"; ////////// Identification parameters: eNB_ID = 0xe00; - + cell_type = "CELL_MACRO_ENB"; - + eNB_name = "eNB_Eurecom_LTEBox"; - + // Tracking area code, 0x0000 and 0xfffe are reserved values tracking_area_code = "1"; - + mobile_country_code = "208"; - - mobile_network_code = "92"; - + + mobile_network_code = "93"; + ////////// Physical parameters: - + component_carriers = ( - { - frame_type = "FDD"; - tdd_config = 3; - tdd_config_s = 0; - prefix_type = "NORMAL"; - eutra_band = 7; - downlink_frequency = 2660000000L; - uplink_frequency_offset = -120000000; - Nid_cell = 0; - N_RB_DL = 25; - Nid_cell_mbsfn = 0; - nb_antennas_tx = 1; - nb_antennas_rx = 1; - tx_gain = 90; - rx_gain = 120; - prach_root = 0; - prach_config_index = 0; - prach_high_speed = "DISABLE"; - prach_zero_correlation = 1; - prach_freq_offset = 2; - pucch_delta_shift = 1; - pucch_nRB_CQI = 1; - pucch_nCS_AN = 0; - pucch_n1_AN = 32; - pdsch_referenceSignalPower = -26; - pdsch_p_b = 0; - pusch_n_SB = 1; - pusch_enable64QAM = "DISABLE"; - pusch_hoppingMode = "interSubFrame"; - pusch_hoppingOffset = 0; - pusch_groupHoppingEnabled = "ENABLE"; - pusch_groupAssignment = 0; - pusch_sequenceHoppingEnabled = "DISABLE"; - pusch_nDMRS1 = 1; - phich_duration = "NORMAL"; - phich_resource = "ONESIXTH"; - srs_enable = "DISABLE"; - /* srs_BandwidthConfig =; - srs_SubframeConfig =; - srs_ackNackST =; - srs_MaxUpPts =;*/ + { + frame_type = "FDD"; + tdd_config = 3; + tdd_config_s = 0; + prefix_type = "NORMAL"; + eutra_band = 7; + downlink_frequency = 2680000000L; + uplink_frequency_offset = -120000000; + Nid_cell = 0; + N_RB_DL = 25; + Nid_cell_mbsfn = 0; + nb_antennas_tx = 1; + nb_antennas_rx = 1; + tx_gain = 90; + rx_gain = 120; + prach_root = 0; + prach_config_index = 0; + prach_high_speed = "DISABLE"; + prach_zero_correlation = 1; + prach_freq_offset = 2; + pucch_delta_shift = 1; + pucch_nRB_CQI = 1; + pucch_nCS_AN = 0; + pucch_n1_AN = 32; + pdsch_referenceSignalPower = -29; + pdsch_p_b = 0; + pusch_n_SB = 1; + pusch_enable64QAM = "DISABLE"; + pusch_hoppingMode = "interSubFrame"; + pusch_hoppingOffset = 0; + pusch_groupHoppingEnabled = "ENABLE"; + pusch_groupAssignment = 0; + pusch_sequenceHoppingEnabled = "DISABLE"; + pusch_nDMRS1 = 1; + phich_duration = "NORMAL"; + phich_resource = "ONESIXTH"; + srs_enable = "DISABLE"; + /* srs_BandwidthConfig =; + srs_SubframeConfig =; + srs_ackNackST =; + srs_MaxUpPts =;*/ - pusch_p0_Nominal = -90; - pusch_alpha = "AL1"; - pucch_p0_Nominal = -108; - msg3_delta_Preamble = 6; - pucch_deltaF_Format1 = "deltaF2"; - pucch_deltaF_Format1b = "deltaF3"; - pucch_deltaF_Format2 = "deltaF0"; - pucch_deltaF_Format2a = "deltaF0"; - pucch_deltaF_Format2b = "deltaF0"; - - rach_numberOfRA_Preambles = 64; - rach_preamblesGroupAConfig = "DISABLE"; -/* - rach_sizeOfRA_PreamblesGroupA = ; - rach_messageSizeGroupA = ; - rach_messagePowerOffsetGroupB = ; -*/ - rach_powerRampingStep = 4; - rach_preambleInitialReceivedTargetPower = -108; - rach_preambleTransMax = 10; - rach_raResponseWindowSize = 10; - rach_macContentionResolutionTimer = 48; - rach_maxHARQ_Msg3Tx = 4; + pusch_p0_Nominal = -90; + pusch_alpha = "AL1"; + pucch_p0_Nominal = -96; + msg3_delta_Preamble = 6; + pucch_deltaF_Format1 = "deltaF2"; + pucch_deltaF_Format1b = "deltaF3"; + pucch_deltaF_Format2 = "deltaF0"; + pucch_deltaF_Format2a = "deltaF0"; + pucch_deltaF_Format2b = "deltaF0"; - pcch_default_PagingCycle = 128; - pcch_nB = "oneT"; - bcch_modificationPeriodCoeff = 2; - ue_TimersAndConstants_t300 = 1000; - ue_TimersAndConstants_t301 = 1000; - ue_TimersAndConstants_t310 = 1000; - ue_TimersAndConstants_t311 = 10000; - ue_TimersAndConstants_n310 = 20; - ue_TimersAndConstants_n311 = 1; + rach_numberOfRA_Preambles = 64; + rach_preamblesGroupAConfig = "DISABLE"; + /* + rach_sizeOfRA_PreamblesGroupA = ; + rach_messageSizeGroupA = ; + rach_messagePowerOffsetGroupB = ; + */ + rach_powerRampingStep = 4; + rach_preambleInitialReceivedTargetPower = -108; + rach_preambleTransMax = 10; + rach_raResponseWindowSize = 10; + rach_macContentionResolutionTimer = 48; + rach_maxHARQ_Msg3Tx = 4; + + pcch_default_PagingCycle = 128; + pcch_nB = "oneT"; + bcch_modificationPeriodCoeff = 2; + ue_TimersAndConstants_t300 = 1000; + ue_TimersAndConstants_t301 = 1000; + ue_TimersAndConstants_t310 = 1000; + ue_TimersAndConstants_t311 = 10000; + ue_TimersAndConstants_n310 = 20; + ue_TimersAndConstants_n311 = 1; + + } + ); - } - ); srb1_parameters : { - # timer_poll_retransmit = (ms) [5, 10, 15, 20,... 250, 300, 350, ... 500] + # timer_poll_retransmit = (ms) [5, 10, 15, 20,... 250, 300, 350, ... 500] timer_poll_retransmit = 80; - + # timer_reordering = (ms) [0,5, ... 100, 110, 120, ... ,200] timer_reordering = 35; - + # timer_reordering = (ms) [0,5, ... 250, 300, 350, ... ,500] timer_status_prohibit = 0; - + # poll_pdu = [4, 8, 16, 32 , 64, 128, 256, infinity(>10000)] poll_pdu = 4; - + # poll_byte = (kB) [25,50,75,100,125,250,375,500,750,1000,1250,1500,2000,3000,infinity(>10000)] poll_byte = 99999; - + # max_retx_threshold = [1, 2, 3, 4 , 6, 8, 16, 32] max_retx_threshold = 4; } - + + # ------- SCTP definitions + SCTP : + { + # Number of streams to use in input/output + SCTP_INSTREAMS = 2; + SCTP_OUTSTREAMS = 2; + }; + + ////////// MME parameters: - mme_ip_address = ( { ipv4 = "192.168.13.11"; + mme_ip_address = ( { ipv4 = "192.168.12.11"; ipv6 = "192:168:30::17"; active = "yes"; preference = "ipv4"; } ); - NETWORK_INTERFACES : + NETWORK_INTERFACES : { ENB_INTERFACE_NAME_FOR_S1_MME = "eth0"; - ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.13.10/24"; + ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.216/24"; ENB_INTERFACE_NAME_FOR_S1U = "eth0"; - ENB_IPV4_ADDRESS_FOR_S1U = "192.168.13.10/24"; + ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.216/24"; ENB_PORT_FOR_S1U = 2152; # Spec 2152 }; - - log_config : + + log_config : { - global_log_level ="info"; - global_log_verbosity ="medium"; - hw_log_level ="info"; - hw_log_verbosity ="medium"; - phy_log_level ="info"; - phy_log_verbosity ="medium"; - mac_log_level ="info"; - mac_log_verbosity ="high"; - rlc_log_level ="info"; - rlc_log_verbosity ="medium"; - pdcp_log_level ="info"; - pdcp_log_verbosity ="medium"; - rrc_log_level ="info"; - rrc_log_verbosity ="medium"; - }; - + global_log_level ="info"; + global_log_verbosity ="medium"; + hw_log_level ="info"; + hw_log_verbosity ="medium"; + phy_log_level ="info"; + phy_log_verbosity ="medium"; + mac_log_level ="info"; + mac_log_verbosity ="high"; + rlc_log_level ="info"; + rlc_log_verbosity ="medium"; + pdcp_log_level ="info"; + pdcp_log_verbosity ="medium"; + rrc_log_level ="info"; + rrc_log_verbosity ="medium"; + }; } ); diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf index 2503e3b31e..e864f47edb 100644 --- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf +++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf @@ -5,124 +5,131 @@ Asn1_verbosity = "none"; eNBs = ( { - # real_time choice in {hard, rt-preempt, no} - real_time = "no"; ////////// Identification parameters: eNB_ID = 0xe00; - + cell_type = "CELL_MACRO_ENB"; - + eNB_name = "eNB_Eurecom_LTEBox"; - + // Tracking area code, 0x0000 and 0xfffe are reserved values tracking_area_code = "1"; - + mobile_country_code = "208"; - - mobile_network_code = "93"; - + + mobile_network_code = "95"; + ////////// Physical parameters: - + component_carriers = ( - { - frame_type = "FDD"; - tdd_config = 3; - tdd_config_s = 0; - prefix_type = "NORMAL"; - eutra_band = 7; - downlink_frequency = 2660000000L; - uplink_frequency_offset = -120000000; - Nid_cell = 0; - N_RB_DL = 25; - Nid_cell_mbsfn = 0; - nb_antennas_tx = 1; - nb_antennas_rx = 1; - tx_gain = 90; - rx_gain = 120; - prach_root = 0; - prach_config_index = 0; - prach_high_speed = "DISABLE"; - prach_zero_correlation = 1; - prach_freq_offset = 2; - pucch_delta_shift = 1; - pucch_nRB_CQI = 1; - pucch_nCS_AN = 0; - pucch_n1_AN = 32; - pdsch_referenceSignalPower = -26; - pdsch_p_b = 0; - pusch_n_SB = 1; - pusch_enable64QAM = "DISABLE"; - pusch_hoppingMode = "interSubFrame"; - pusch_hoppingOffset = 0; - pusch_groupHoppingEnabled = "ENABLE"; - pusch_groupAssignment = 0; - pusch_sequenceHoppingEnabled = "DISABLE"; - pusch_nDMRS1 = 1; - phich_duration = "NORMAL"; - phich_resource = "ONESIXTH"; - srs_enable = "DISABLE"; - /* srs_BandwidthConfig =; - srs_SubframeConfig =; - srs_ackNackST =; - srs_MaxUpPts =;*/ + { + frame_type = "FDD"; + tdd_config = 3; + tdd_config_s = 0; + prefix_type = "NORMAL"; + eutra_band = 7; + downlink_frequency = 2660000000L; + uplink_frequency_offset = -120000000; + Nid_cell = 0; + N_RB_DL = 25; + Nid_cell_mbsfn = 0; + nb_antennas_tx = 1; + nb_antennas_rx = 1; + tx_gain = 90; + rx_gain = 120; + prach_root = 0; + prach_config_index = 0; + prach_high_speed = "DISABLE"; + prach_zero_correlation = 1; + prach_freq_offset = 2; + pucch_delta_shift = 1; + pucch_nRB_CQI = 1; + pucch_nCS_AN = 0; + pucch_n1_AN = 32; + pdsch_referenceSignalPower = -26; + pdsch_p_b = 0; + pusch_n_SB = 1; + pusch_enable64QAM = "DISABLE"; + pusch_hoppingMode = "interSubFrame"; + pusch_hoppingOffset = 0; + pusch_groupHoppingEnabled = "ENABLE"; + pusch_groupAssignment = 0; + pusch_sequenceHoppingEnabled = "DISABLE"; + pusch_nDMRS1 = 1; + phich_duration = "NORMAL"; + phich_resource = "ONESIXTH"; + srs_enable = "DISABLE"; + /* srs_BandwidthConfig =; + srs_SubframeConfig =; + srs_ackNackST =; + srs_MaxUpPts =;*/ - pusch_p0_Nominal = -90; - pusch_alpha = "AL1"; - pucch_p0_Nominal = -108; - msg3_delta_Preamble = 6; - pucch_deltaF_Format1 = "deltaF2"; - pucch_deltaF_Format1b = "deltaF3"; - pucch_deltaF_Format2 = "deltaF0"; - pucch_deltaF_Format2a = "deltaF0"; - pucch_deltaF_Format2b = "deltaF0"; - - rach_numberOfRA_Preambles = 64; - rach_preamblesGroupAConfig = "DISABLE"; -/* - rach_sizeOfRA_PreamblesGroupA = ; - rach_messageSizeGroupA = ; - rach_messagePowerOffsetGroupB = ; -*/ - rach_powerRampingStep = 4; - rach_preambleInitialReceivedTargetPower = -108; - rach_preambleTransMax = 10; - rach_raResponseWindowSize = 10; - rach_macContentionResolutionTimer = 48; - rach_maxHARQ_Msg3Tx = 4; + pusch_p0_Nominal = -90; + pusch_alpha = "AL1"; + pucch_p0_Nominal = -108; + msg3_delta_Preamble = 6; + pucch_deltaF_Format1 = "deltaF2"; + pucch_deltaF_Format1b = "deltaF3"; + pucch_deltaF_Format2 = "deltaF0"; + pucch_deltaF_Format2a = "deltaF0"; + pucch_deltaF_Format2b = "deltaF0"; - pcch_default_PagingCycle = 128; - pcch_nB = "oneT"; - bcch_modificationPeriodCoeff = 2; - ue_TimersAndConstants_t300 = 1000; - ue_TimersAndConstants_t301 = 1000; - ue_TimersAndConstants_t310 = 1000; - ue_TimersAndConstants_t311 = 10000; - ue_TimersAndConstants_n310 = 20; - ue_TimersAndConstants_n311 = 1; + rach_numberOfRA_Preambles = 64; + rach_preamblesGroupAConfig = "DISABLE"; + /* + rach_sizeOfRA_PreamblesGroupA = ; + rach_messageSizeGroupA = ; + rach_messagePowerOffsetGroupB = ; + */ + rach_powerRampingStep = 4; + rach_preambleInitialReceivedTargetPower = -108; + rach_preambleTransMax = 10; + rach_raResponseWindowSize = 10; + rach_macContentionResolutionTimer = 48; + rach_maxHARQ_Msg3Tx = 4; + + pcch_default_PagingCycle = 128; + pcch_nB = "oneT"; + bcch_modificationPeriodCoeff = 2; + ue_TimersAndConstants_t300 = 1000; + ue_TimersAndConstants_t301 = 1000; + ue_TimersAndConstants_t310 = 1000; + ue_TimersAndConstants_t311 = 10000; + ue_TimersAndConstants_n310 = 20; + ue_TimersAndConstants_n311 = 1; + } + ); - } - ); - srb1_parameters : { - # timer_poll_retransmit = (ms) [5, 10, 15, 20,... 250, 300, 350, ... 500] + # timer_poll_retransmit = (ms) [5, 10, 15, 20,... 250, 300, 350, ... 500] timer_poll_retransmit = 80; - + # timer_reordering = (ms) [0,5, ... 100, 110, 120, ... ,200] timer_reordering = 35; - + # timer_reordering = (ms) [0,5, ... 250, 300, 350, ... ,500] timer_status_prohibit = 0; - + # poll_pdu = [4, 8, 16, 32 , 64, 128, 256, infinity(>10000)] poll_pdu = 4; - + # poll_byte = (kB) [25,50,75,100,125,250,375,500,750,1000,1250,1500,2000,3000,infinity(>10000)] poll_byte = 99999; - + # max_retx_threshold = [1, 2, 3, 4 , 6, 8, 16, 32] max_retx_threshold = 4; } + + # ------- SCTP definitions + SCTP : + { + # Number of streams to use in input/output + SCTP_INSTREAMS = 2; + SCTP_OUTSTREAMS = 2; + }; + + ////////// MME parameters: mme_ip_address = ( { ipv4 = "192.188.2.2"; ipv6 = "192:168:30::17"; @@ -131,7 +138,7 @@ eNBs = } ); - NETWORK_INTERFACES : + NETWORK_INTERFACES : { ENB_INTERFACE_NAME_FOR_S1_MME = "tun2"; ENB_IPV4_ADDRESS_FOR_S1_MME = "192.188.2.2/24"; @@ -140,24 +147,28 @@ eNBs = ENB_IPV4_ADDRESS_FOR_S1U = "127.0.0.1/24"; ENB_PORT_FOR_S1U = 2153; # Spec 2152 }; - - log_config : + + log_config : { - global_log_level ="info"; - global_log_verbosity ="medium"; - hw_log_level ="info"; - hw_log_verbosity ="medium"; - phy_log_level ="info"; - phy_log_verbosity ="medium"; - mac_log_level ="info"; - mac_log_verbosity ="high"; - rlc_log_level ="info"; - rlc_log_verbosity ="medium"; - pdcp_log_level ="info"; - pdcp_log_verbosity ="medium"; - rrc_log_level ="info"; - rrc_log_verbosity ="medium"; - }; - + global_log_level ="info"; + global_log_verbosity ="medium"; + hw_log_level ="info"; + hw_log_verbosity ="medium"; + phy_log_level ="info"; + phy_log_verbosity ="medium"; + mac_log_level ="info"; + mac_log_verbosity ="high"; + rlc_log_level ="info"; + rlc_log_verbosity ="medium"; + pdcp_log_level ="info"; + pdcp_log_verbosity ="medium"; + rrc_log_level ="info"; + rrc_log_verbosity ="medium"; + gtpu_log_level ="info"; + gtpu_log_verbosity ="medium"; + udp_log_level ="info"; + udp_log_verbosity ="medium"; + }; + } ); diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf index 542ec24ce9..bd9014670e 100644 --- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf +++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf @@ -5,124 +5,130 @@ Asn1_verbosity = "none"; eNBs = ( { - # real_time choice in {hard, rt-preempt, no} - real_time = "no"; ////////// Identification parameters: eNB_ID = 0xe00; - + cell_type = "CELL_MACRO_ENB"; - + eNB_name = "eNB_Eurecom_LTEBox"; - + // Tracking area code, 0x0000 and 0xfffe are reserved values tracking_area_code = "1"; - + mobile_country_code = "208"; - - mobile_network_code = "93"; - + mobile_network_code = "95"; + ////////// Physical parameters: - + component_carriers = ( - { - frame_type = "FDD"; - tdd_config = 3; - tdd_config_s = 0; - prefix_type = "NORMAL"; - eutra_band = 7; - downlink_frequency = 2660000000L; - uplink_frequency_offset = -120000000; - Nid_cell = 0; - N_RB_DL = 25; - Nid_cell_mbsfn = 0; - nb_antennas_tx = 1; - nb_antennas_rx = 1; - tx_gain = 90; - rx_gain = 120; - prach_root = 0; - prach_config_index = 0; - prach_high_speed = "DISABLE"; - prach_zero_correlation = 1; - prach_freq_offset = 2; - pucch_delta_shift = 1; - pucch_nRB_CQI = 1; - pucch_nCS_AN = 0; - pucch_n1_AN = 32; - pdsch_referenceSignalPower = -26; - pdsch_p_b = 0; - pusch_n_SB = 1; - pusch_enable64QAM = "DISABLE"; - pusch_hoppingMode = "interSubFrame"; - pusch_hoppingOffset = 0; - pusch_groupHoppingEnabled = "ENABLE"; - pusch_groupAssignment = 0; - pusch_sequenceHoppingEnabled = "DISABLE"; - pusch_nDMRS1 = 1; - phich_duration = "NORMAL"; - phich_resource = "ONESIXTH"; - srs_enable = "DISABLE"; - /* srs_BandwidthConfig =; - srs_SubframeConfig =; - srs_ackNackST =; - srs_MaxUpPts =;*/ + { + frame_type = "FDD"; + tdd_config = 3; + tdd_config_s = 0; + prefix_type = "NORMAL"; + eutra_band = 7; + downlink_frequency = 2660000000L; + uplink_frequency_offset = -120000000; + Nid_cell = 0; + N_RB_DL = 25; + Nid_cell_mbsfn = 0; + nb_antennas_tx = 1; + nb_antennas_rx = 1; + tx_gain = 90; + rx_gain = 120; + prach_root = 0; + prach_config_index = 0; + prach_high_speed = "DISABLE"; + prach_zero_correlation = 1; + prach_freq_offset = 2; + pucch_delta_shift = 1; + pucch_nRB_CQI = 1; + pucch_nCS_AN = 0; + pucch_n1_AN = 32; + pdsch_referenceSignalPower = -26; + pdsch_p_b = 0; + pusch_n_SB = 1; + pusch_enable64QAM = "DISABLE"; + pusch_hoppingMode = "interSubFrame"; + pusch_hoppingOffset = 0; + pusch_groupHoppingEnabled = "ENABLE"; + pusch_groupAssignment = 0; + pusch_sequenceHoppingEnabled = "DISABLE"; + pusch_nDMRS1 = 1; + phich_duration = "NORMAL"; + phich_resource = "ONESIXTH"; + srs_enable = "DISABLE"; + /* srs_BandwidthConfig =; + srs_SubframeConfig =; + srs_ackNackST =; + srs_MaxUpPts =;*/ - pusch_p0_Nominal = -90; - pusch_alpha = "AL1"; - pucch_p0_Nominal = -108; - msg3_delta_Preamble = 6; - pucch_deltaF_Format1 = "deltaF2"; - pucch_deltaF_Format1b = "deltaF3"; - pucch_deltaF_Format2 = "deltaF0"; - pucch_deltaF_Format2a = "deltaF0"; - pucch_deltaF_Format2b = "deltaF0"; - - rach_numberOfRA_Preambles = 64; - rach_preamblesGroupAConfig = "DISABLE"; -/* - rach_sizeOfRA_PreamblesGroupA = ; - rach_messageSizeGroupA = ; - rach_messagePowerOffsetGroupB = ; -*/ - rach_powerRampingStep = 4; - rach_preambleInitialReceivedTargetPower = -108; - rach_preambleTransMax = 10; - rach_raResponseWindowSize = 10; - rach_macContentionResolutionTimer = 48; - rach_maxHARQ_Msg3Tx = 4; + pusch_p0_Nominal = -90; + pusch_alpha = "AL1"; + pucch_p0_Nominal = -108; + msg3_delta_Preamble = 6; + pucch_deltaF_Format1 = "deltaF2"; + pucch_deltaF_Format1b = "deltaF3"; + pucch_deltaF_Format2 = "deltaF0"; + pucch_deltaF_Format2a = "deltaF0"; + pucch_deltaF_Format2b = "deltaF0"; + + rach_numberOfRA_Preambles = 64; + rach_preamblesGroupAConfig = "DISABLE"; + /* + rach_sizeOfRA_PreamblesGroupA = ; + rach_messageSizeGroupA = ; + rach_messagePowerOffsetGroupB = ; + */ + rach_powerRampingStep = 4; + rach_preambleInitialReceivedTargetPower = -108; + rach_preambleTransMax = 10; + rach_raResponseWindowSize = 10; + rach_macContentionResolutionTimer = 48; + rach_maxHARQ_Msg3Tx = 4; + + pcch_default_PagingCycle = 128; + pcch_nB = "oneT"; + bcch_modificationPeriodCoeff = 2; + ue_TimersAndConstants_t300 = 1000; + ue_TimersAndConstants_t301 = 1000; + ue_TimersAndConstants_t310 = 1000; + ue_TimersAndConstants_t311 = 10000; + ue_TimersAndConstants_n310 = 20; + ue_TimersAndConstants_n311 = 1; + } + ); - pcch_default_PagingCycle = 128; - pcch_nB = "oneT"; - bcch_modificationPeriodCoeff = 2; - ue_TimersAndConstants_t300 = 1000; - ue_TimersAndConstants_t301 = 1000; - ue_TimersAndConstants_t310 = 1000; - ue_TimersAndConstants_t311 = 10000; - ue_TimersAndConstants_n310 = 20; - ue_TimersAndConstants_n311 = 1; - } - ); - srb1_parameters : { - # timer_poll_retransmit = (ms) [5, 10, 15, 20,... 250, 300, 350, ... 500] + # timer_poll_retransmit = (ms) [5, 10, 15, 20,... 250, 300, 350, ... 500] timer_poll_retransmit = 80; - + # timer_reordering = (ms) [0,5, ... 100, 110, 120, ... ,200] timer_reordering = 35; - + # timer_reordering = (ms) [0,5, ... 250, 300, 350, ... ,500] timer_status_prohibit = 0; - + # poll_pdu = [4, 8, 16, 32 , 64, 128, 256, infinity(>10000)] poll_pdu = 4; - + # poll_byte = (kB) [25,50,75,100,125,250,375,500,750,1000,1250,1500,2000,3000,infinity(>10000)] poll_byte = 99999; - + # max_retx_threshold = [1, 2, 3, 4 , 6, 8, 16, 32] max_retx_threshold = 4; } + + # ------- SCTP definitions + SCTP : + { + # Number of streams to use in input/output + SCTP_INSTREAMS = 2; + SCTP_OUTSTREAMS = 2; + }; + ////////// MME parameters: mme_ip_address = ( { ipv4 = "192.168.12.17"; ipv6 = "192:168:30::17"; @@ -131,7 +137,7 @@ eNBs = } ); - NETWORK_INTERFACES : + NETWORK_INTERFACES : { ENB_INTERFACE_NAME_FOR_S1_MME = "eth0"; ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.213/24"; @@ -140,24 +146,24 @@ eNBs = ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.213/24"; ENB_PORT_FOR_S1U = 2152; # Spec 2152 }; - - log_config : + + log_config : { - global_log_level ="info"; - global_log_verbosity ="medium"; - hw_log_level ="info"; - hw_log_verbosity ="medium"; - phy_log_level ="info"; - phy_log_verbosity ="medium"; - mac_log_level ="info"; - mac_log_verbosity ="high"; - rlc_log_level ="info"; - rlc_log_verbosity ="medium"; - pdcp_log_level ="info"; - pdcp_log_verbosity ="medium"; - rrc_log_level ="info"; - rrc_log_verbosity ="medium"; - }; - + global_log_level ="debug"; + global_log_verbosity ="medium"; + hw_log_level ="info"; + hw_log_verbosity ="medium"; + phy_log_level ="info"; + phy_log_verbosity ="medium"; + mac_log_level ="info"; + mac_log_verbosity ="high"; + rlc_log_level ="info"; + rlc_log_verbosity ="medium"; + pdcp_log_level ="info"; + pdcp_log_verbosity ="medium"; + rrc_log_level ="info"; + rrc_log_verbosity ="medium"; + }; + } ); diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.usrpb210.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.usrpb210.conf index 02234ca80f..57a43fb414 100644 --- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.usrpb210.conf +++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.usrpb210.conf @@ -5,8 +5,6 @@ Asn1_verbosity = "none"; eNBs = ( { - # real_time choice in {hard, rt-preempt, no} - real_time = "no"; ////////// Identification parameters: eNB_ID = 0xe00; @@ -30,7 +28,7 @@ eNBs = tdd_config_s = 0; prefix_type = "NORMAL"; eutra_band = 7; - downlink_frequency = 2660000000L; + downlink_frequency = 2680000000L; uplink_frequency_offset = -120000000; Nid_cell = 0; N_RB_DL = 25; @@ -38,7 +36,7 @@ eNBs = nb_antennas_tx = 2; nb_antennas_rx = 2; tx_gain = 90; - rx_gain = 135; + rx_gain = 115; prach_root = 0; prach_config_index = 0; prach_high_speed = "DISABLE"; @@ -102,6 +100,36 @@ eNBs = } ); + + + srb1_parameters : + { + # timer_poll_retransmit = (ms) [5, 10, 15, 20,... 250, 300, 350, ... 500] + timer_poll_retransmit = 80; + + # timer_reordering = (ms) [0,5, ... 100, 110, 120, ... ,200] + timer_reordering = 35; + + # timer_reordering = (ms) [0,5, ... 250, 300, 350, ... ,500] + timer_status_prohibit = 0; + + # poll_pdu = [4, 8, 16, 32 , 64, 128, 256, infinity(>10000)] + poll_pdu = 4; + + # poll_byte = (kB) [25,50,75,100,125,250,375,500,750,1000,1250,1500,2000,3000,infinity(>10000)] + poll_byte = 99999; + + # max_retx_threshold = [1, 2, 3, 4 , 6, 8, 16, 32] + max_retx_threshold = 4; + } + + # ------- SCTP definitions + SCTP : + { + # Number of streams to use in input/output + SCTP_INSTREAMS = 2; + SCTP_OUTSTREAMS = 2; + }; ////////// MME parameters: mme_ip_address = ( { ipv4 = "192.168.13.11"; diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.dual.band13_band4.exmimo2.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.dual.band13_band4.exmimo2.conf index 40f9959a2f..14f878cda9 100644 --- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.dual.band13_band4.exmimo2.conf +++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.dual.band13_band4.exmimo2.conf @@ -5,183 +5,211 @@ Asn1_verbosity = "none"; eNBs = ( { - # real_time choice in {hard, rt-preempt, no} - real_time = "no"; ////////// Identification parameters: eNB_ID = 0xe00; - + cell_type = "CELL_MACRO_ENB"; - + eNB_name = "eNB_Eurecom_LTEBox"; - + // Tracking area code, 0x0000 and 0xfffe are reserved values tracking_area_code = "1"; - + mobile_country_code = "208"; - + mobile_network_code = "92"; - + ////////// Physical parameters: - + component_carriers = ( - { - frame_type = "FDD"; - tdd_config = 3; - tdd_config_s = 0; - prefix_type = "NORMAL"; - eutra_band = 13; - downlink_frequency = 748500000L; - uplink_frequency_offset = 31000000; - - Nid_cell = 0; - N_RB_DL = 25; - Nid_cell_mbsfn = 0; - nb_antennas_tx = 1; - nb_antennas_rx = 1; - tx_gain = 2; - rx_gain = 2; - prach_root = 22; - prach_config_index = 0; - prach_high_speed = "DISABLE"; - prach_zero_correlation = 1; - prach_freq_offset = 2; - pucch_delta_shift = 1; - pucch_nRB_CQI = 1; - pucch_nCS_AN = 0; - pucch_n1_AN = 32; - pdsch_referenceSignalPower = -24; - pdsch_p_b = 0; - pusch_n_SB = 1; - pusch_enable64QAM = "DISABLE"; - pusch_hoppingMode = "interSubFrame"; - pusch_hoppingOffset = 0; - pusch_groupHoppingEnabled = "ENABLE"; - pusch_groupAssignment = 0; - pusch_sequenceHoppingEnabled = "DISABLE"; - pusch_nDMRS1 = 0; - phich_duration = "NORMAL"; - phich_resource = "ONESIXTH"; - srs_enable = "DISABLE"; - /* srs_BandwidthConfig =; - srs_SubframeConfig =; - srs_ackNackST =; - srs_MaxUpPts =;*/ + { + frame_type = "FDD"; + tdd_config = 3; + tdd_config_s = 0; + prefix_type = "NORMAL"; + eutra_band = 13; + downlink_frequency = 748500000L; + uplink_frequency_offset = 31000000; - pusch_p0_Nominal = -75; - pusch_alpha = "AL1"; - pucch_p0_Nominal = -108; - msg3_delta_Preamble = 6; - pucch_deltaF_Format1 = "deltaF2"; - pucch_deltaF_Format1b = "deltaF3"; - pucch_deltaF_Format2 = "deltaF0"; - pucch_deltaF_Format2a = "deltaF0"; - pucch_deltaF_Format2b = "deltaF0"; - - rach_numberOfRA_Preambles = 64; - rach_preamblesGroupAConfig = "DISABLE"; -/* - rach_sizeOfRA_PreamblesGroupA = ; - rach_messageSizeGroupA = ; - rach_messagePowerOffsetGroupB = ; -*/ - rach_powerRampingStep = 2; - rach_preambleInitialReceivedTargetPower = -100; - rach_preambleTransMax = 10; - rach_raResponseWindowSize = 10; - rach_macContentionResolutionTimer = 48; - rach_maxHARQ_Msg3Tx = 4; + Nid_cell = 0; + N_RB_DL = 25; + Nid_cell_mbsfn = 0; + nb_antennas_tx = 1; + nb_antennas_rx = 1; + tx_gain = 2; + rx_gain = 2; + prach_root = 22; + prach_config_index = 0; + prach_high_speed = "DISABLE"; + prach_zero_correlation = 1; + prach_freq_offset = 2; + pucch_delta_shift = 1; + pucch_nRB_CQI = 1; + pucch_nCS_AN = 0; + pucch_n1_AN = 32; + pdsch_referenceSignalPower = -24; + pdsch_p_b = 0; + pusch_n_SB = 1; + pusch_enable64QAM = "DISABLE"; + pusch_hoppingMode = "interSubFrame"; + pusch_hoppingOffset = 0; + pusch_groupHoppingEnabled = "ENABLE"; + pusch_groupAssignment = 0; + pusch_sequenceHoppingEnabled = "DISABLE"; + pusch_nDMRS1 = 0; + phich_duration = "NORMAL"; + phich_resource = "ONESIXTH"; + srs_enable = "DISABLE"; + /* srs_BandwidthConfig =; + srs_SubframeConfig =; + srs_ackNackST =; + srs_MaxUpPts =;*/ - pcch_default_PagingCycle = 128; - pcch_nB = "oneT"; - bcch_modificationPeriodCoeff = 2; - ue_TimersAndConstants_t300 = 1000; - ue_TimersAndConstants_t301 = 1000; - ue_TimersAndConstants_t310 = 1000; - ue_TimersAndConstants_t311 = 10000; - ue_TimersAndConstants_n310 = 20; - ue_TimersAndConstants_n311 = 1; + pusch_p0_Nominal = -75; + pusch_alpha = "AL1"; + pucch_p0_Nominal = -108; + msg3_delta_Preamble = 6; + pucch_deltaF_Format1 = "deltaF2"; + pucch_deltaF_Format1b = "deltaF3"; + pucch_deltaF_Format2 = "deltaF0"; + pucch_deltaF_Format2a = "deltaF0"; + pucch_deltaF_Format2b = "deltaF0"; - }, - { - frame_type = "FDD"; - tdd_config = 3; - tdd_config_s = 0; - prefix_type = "NORMAL"; - eutra_band = 4; - downlink_frequency = 2112500000L; - uplink_frequency_offset = -400000000; - - Nid_cell = 0; - N_RB_DL = 25; - Nid_cell_mbsfn = 0; - nb_antennas_tx = 1; - nb_antennas_rx = 1; - tx_gain = 2; - rx_gain = 2; - prach_root = 22; - prach_config_index = 0; - prach_high_speed = "DISABLE"; - prach_zero_correlation = 1; - prach_freq_offset = 2; - pucch_delta_shift = 1; - pucch_nRB_CQI = 1; - pucch_nCS_AN = 0; - pucch_n1_AN = 32; - pdsch_referenceSignalPower = -40; - pdsch_p_b = 0; - pusch_n_SB = 1; - pusch_enable64QAM = "DISABLE"; - pusch_hoppingMode = "interSubFrame"; - pusch_hoppingOffset = 0; - pusch_groupHoppingEnabled = "ENABLE"; - pusch_groupAssignment = 0; - pusch_sequenceHoppingEnabled = "DISABLE"; - pusch_nDMRS1 = 0; - phich_duration = "NORMAL"; - phich_resource = "ONESIXTH"; - srs_enable = "DISABLE"; - /* srs_BandwidthConfig =; - srs_SubframeConfig =; - srs_ackNackST =; - srs_MaxUpPts =;*/ + rach_numberOfRA_Preambles = 64; + rach_preamblesGroupAConfig = "DISABLE"; + /* + rach_sizeOfRA_PreamblesGroupA = ; + rach_messageSizeGroupA = ; + rach_messagePowerOffsetGroupB = ; + */ + rach_powerRampingStep = 2; + rach_preambleInitialReceivedTargetPower = -100; + rach_preambleTransMax = 10; + rach_raResponseWindowSize = 10; + rach_macContentionResolutionTimer = 48; + rach_maxHARQ_Msg3Tx = 4; - pusch_p0_Nominal = -85; - pusch_alpha = "AL1"; - pucch_p0_Nominal = -108; - msg3_delta_Preamble = 6; - pucch_deltaF_Format1 = "deltaF2"; - pucch_deltaF_Format1b = "deltaF3"; - pucch_deltaF_Format2 = "deltaF0"; - pucch_deltaF_Format2a = "deltaF0"; - pucch_deltaF_Format2b = "deltaF0"; - - rach_numberOfRA_Preambles = 64; - rach_preamblesGroupAConfig = "DISABLE"; -/* - rach_sizeOfRA_PreamblesGroupA = ; - rach_messageSizeGroupA = ; - rach_messagePowerOffsetGroupB = ; -*/ - rach_powerRampingStep = 2; - rach_preambleInitialReceivedTargetPower = -100; - rach_preambleTransMax = 10; - rach_raResponseWindowSize = 10; - rach_macContentionResolutionTimer = 48; - rach_maxHARQ_Msg3Tx = 4; + pcch_default_PagingCycle = 128; + pcch_nB = "oneT"; + bcch_modificationPeriodCoeff = 2; + ue_TimersAndConstants_t300 = 1000; + ue_TimersAndConstants_t301 = 1000; + ue_TimersAndConstants_t310 = 1000; + ue_TimersAndConstants_t311 = 10000; + ue_TimersAndConstants_n310 = 20; + ue_TimersAndConstants_n311 = 1; - pcch_default_PagingCycle = 128; - pcch_nB = "oneT"; - bcch_modificationPeriodCoeff = 2; - ue_TimersAndConstants_t300 = 1000; - ue_TimersAndConstants_t301 = 1000; - ue_TimersAndConstants_t310 = 1000; - ue_TimersAndConstants_t311 = 10000; - ue_TimersAndConstants_n310 = 20; - ue_TimersAndConstants_n311 = 1; + }, + { + frame_type = "FDD"; + tdd_config = 3; + tdd_config_s = 0; + prefix_type = "NORMAL"; + eutra_band = 4; + downlink_frequency = 2112500000L; + uplink_frequency_offset = -400000000; + + Nid_cell = 0; + N_RB_DL = 25; + Nid_cell_mbsfn = 0; + nb_antennas_tx = 1; + nb_antennas_rx = 1; + tx_gain = 2; + rx_gain = 2; + prach_root = 22; + prach_config_index = 0; + prach_high_speed = "DISABLE"; + prach_zero_correlation = 1; + prach_freq_offset = 2; + pucch_delta_shift = 1; + pucch_nRB_CQI = 1; + pucch_nCS_AN = 0; + pucch_n1_AN = 32; + pdsch_referenceSignalPower = -40; + pdsch_p_b = 0; + pusch_n_SB = 1; + pusch_enable64QAM = "DISABLE"; + pusch_hoppingMode = "interSubFrame"; + pusch_hoppingOffset = 0; + pusch_groupHoppingEnabled = "ENABLE"; + pusch_groupAssignment = 0; + pusch_sequenceHoppingEnabled = "DISABLE"; + pusch_nDMRS1 = 0; + phich_duration = "NORMAL"; + phich_resource = "ONESIXTH"; + srs_enable = "DISABLE"; + /* srs_BandwidthConfig =; + srs_SubframeConfig =; + srs_ackNackST =; + srs_MaxUpPts =;*/ + + pusch_p0_Nominal = -85; + pusch_alpha = "AL1"; + pucch_p0_Nominal = -108; + msg3_delta_Preamble = 6; + pucch_deltaF_Format1 = "deltaF2"; + pucch_deltaF_Format1b = "deltaF3"; + pucch_deltaF_Format2 = "deltaF0"; + pucch_deltaF_Format2a = "deltaF0"; + pucch_deltaF_Format2b = "deltaF0"; + + rach_numberOfRA_Preambles = 64; + rach_preamblesGroupAConfig = "DISABLE"; + /* + rach_sizeOfRA_PreamblesGroupA = ; + rach_messageSizeGroupA = ; + rach_messagePowerOffsetGroupB = ; + */ + rach_powerRampingStep = 2; + rach_preambleInitialReceivedTargetPower = -100; + rach_preambleTransMax = 10; + rach_raResponseWindowSize = 10; + rach_macContentionResolutionTimer = 48; + rach_maxHARQ_Msg3Tx = 4; + + pcch_default_PagingCycle = 128; + pcch_nB = "oneT"; + bcch_modificationPeriodCoeff = 2; + ue_TimersAndConstants_t300 = 1000; + ue_TimersAndConstants_t301 = 1000; + ue_TimersAndConstants_t310 = 1000; + ue_TimersAndConstants_t311 = 10000; + ue_TimersAndConstants_n310 = 20; + ue_TimersAndConstants_n311 = 1; + + } + ); + + + srb1_parameters : + { + # timer_poll_retransmit = (ms) [5, 10, 15, 20,... 250, 300, 350, ... 500] + timer_poll_retransmit = 80; + + # timer_reordering = (ms) [0,5, ... 100, 110, 120, ... ,200] + timer_reordering = 35; + + # timer_reordering = (ms) [0,5, ... 250, 300, 350, ... ,500] + timer_status_prohibit = 0; + + # poll_pdu = [4, 8, 16, 32 , 64, 128, 256, infinity(>10000)] + poll_pdu = 4; + + # poll_byte = (kB) [25,50,75,100,125,250,375,500,750,1000,1250,1500,2000,3000,infinity(>10000)] + poll_byte = 99999; + + # max_retx_threshold = [1, 2, 3, 4 , 6, 8, 16, 32] + max_retx_threshold = 4; + } + + # ------- SCTP definitions + SCTP : + { + # Number of streams to use in input/output + SCTP_INSTREAMS = 2; + SCTP_OUTSTREAMS = 2; + }; - } - ); - ////////// MME parameters: mme_ip_address = ( { ipv4 = "192.168.13.11"; ipv6 = "192:168:30::17"; @@ -190,33 +218,33 @@ eNBs = } ); - NETWORK_INTERFACES : + NETWORK_INTERFACES : { - ENB_INTERFACE_NAME_FOR_S1_MME = "eth0"; - ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.13.82/24"; + ENB_INTERFACE_NAME_FOR_S1_MME = "eth0"; + ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.13.82/24"; - ENB_INTERFACE_NAME_FOR_S1U = "eth0"; - ENB_IPV4_ADDRESS_FOR_S1U = "192.168.13.82/24"; - ENB_PORT_FOR_S1U = 2152; # Spec 2152 + ENB_INTERFACE_NAME_FOR_S1U = "eth0"; + ENB_IPV4_ADDRESS_FOR_S1U = "192.168.13.82/24"; + ENB_PORT_FOR_S1U = 2152; # Spec 2152 }; - - log_config : + + log_config : { - global_log_level ="info"; - global_log_verbosity ="high"; - hw_log_level ="debug"; - hw_log_verbosity ="high"; - phy_log_level ="debug"; - phy_log_verbosity ="high"; - mac_log_level ="debug"; - mac_log_verbosity ="high"; - rlc_log_level ="info"; - rlc_log_verbosity ="high"; - pdcp_log_level ="info"; - pdcp_log_verbosity ="high"; - rrc_log_level ="debug"; - rrc_log_verbosity ="high"; - }; - + global_log_level ="info"; + global_log_verbosity ="high"; + hw_log_level ="debug"; + hw_log_verbosity ="high"; + phy_log_level ="debug"; + phy_log_verbosity ="high"; + mac_log_level ="debug"; + mac_log_verbosity ="high"; + rlc_log_level ="info"; + rlc_log_verbosity ="high"; + pdcp_log_level ="info"; + pdcp_log_verbosity ="high"; + rrc_log_level ="debug"; + rrc_log_verbosity ="high"; + }; + } ); diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.dual.band38_band44.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.dual.band38_band44.conf index 763e54efea..08b34f439f 100644 --- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.dual.band38_band44.conf +++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.dual.band38_band44.conf @@ -5,179 +5,207 @@ Asn1_verbosity = "none"; eNBs = ( { - # real_time choice in {hard, rt-preempt, no} - real_time = "no"; ////////// Identification parameters: eNB_ID = 0xe00; - + cell_type = "CELL_MACRO_ENB"; - + eNB_name = "eNB_Eurecom_LTEBox"; - + // Tracking area code, 0x0000 and 0xfffe are reserved values tracking_area_code = "1"; - + mobile_country_code = "208"; - + mobile_network_code = "92"; - + ////////// Physical parameters: - + component_carriers = ( - { - frame_type = "TDD"; - tdd_config = 3; - tdd_config_s = 0; - prefix_type = "NORMAL"; - eutra_band = 38; - downlink_frequency = 2595000000L; - uplink_frequency_offset = 0; - - Nid_cell = 0; - N_RB_DL = 25; - Nid_cell_mbsfn = 0; - nb_antennas_tx = 1; - nb_antennas_rx = 1; - prach_root = 22; - prach_config_index = 3; - prach_high_speed = "DISABLE"; - prach_zero_correlation = 0; - prach_freq_offset = 0; - pucch_delta_shift = 1; - pucch_nRB_CQI = 1; - pucch_nCS_AN = 0; - pucch_n1_AN = 32; - pdsch_referenceSignalPower = -24; - pdsch_p_b = 0; - pusch_n_SB = 1; - pusch_enable64QAM = "DISABLE"; - pusch_hoppingMode = "interSubFrame"; - pusch_hoppingOffset = 4; - pusch_groupHoppingEnabled = "DISABLE"; - pusch_groupAssignment = 0; - pusch_sequenceHoppingEnabled = "DISABLE"; - pusch_nDMRS1 = 1; - phich_duration = "NORMAL"; - phich_resource = "ONESIXTH"; - srs_enable = "DISABLE"; - /* srs_BandwidthConfig =; - srs_SubframeConfig =; - srs_ackNackST =; - srs_MaxUpPts =;*/ + { + frame_type = "TDD"; + tdd_config = 3; + tdd_config_s = 0; + prefix_type = "NORMAL"; + eutra_band = 38; + downlink_frequency = 2595000000L; + uplink_frequency_offset = 0; - pusch_p0_Nominal = -95; - pusch_alpha = "AL08"; - pucch_p0_Nominal = -117; - msg3_delta_Preamble = 6; - pucch_deltaF_Format1 = "deltaF2"; - pucch_deltaF_Format1b = "deltaF3"; - pucch_deltaF_Format2 = "deltaF0"; - pucch_deltaF_Format2a = "deltaF0"; - pucch_deltaF_Format2b = "deltaF0"; - - rach_numberOfRA_Preambles = 52; - rach_preamblesGroupAConfig = "DISABLE"; -/* - rach_sizeOfRA_PreamblesGroupA = ; - rach_messageSizeGroupA = ; - rach_messagePowerOffsetGroupB = ; -*/ - rach_powerRampingStep = 2; - rach_preambleInitialReceivedTargetPower = -104; - rach_preambleTransMax = 6; - rach_raResponseWindowSize = 10; - rach_macContentionResolutionTimer = 48; - rach_maxHARQ_Msg3Tx = 4; + Nid_cell = 0; + N_RB_DL = 25; + Nid_cell_mbsfn = 0; + nb_antennas_tx = 1; + nb_antennas_rx = 1; + prach_root = 22; + prach_config_index = 3; + prach_high_speed = "DISABLE"; + prach_zero_correlation = 0; + prach_freq_offset = 0; + pucch_delta_shift = 1; + pucch_nRB_CQI = 1; + pucch_nCS_AN = 0; + pucch_n1_AN = 32; + pdsch_referenceSignalPower = -24; + pdsch_p_b = 0; + pusch_n_SB = 1; + pusch_enable64QAM = "DISABLE"; + pusch_hoppingMode = "interSubFrame"; + pusch_hoppingOffset = 4; + pusch_groupHoppingEnabled = "DISABLE"; + pusch_groupAssignment = 0; + pusch_sequenceHoppingEnabled = "DISABLE"; + pusch_nDMRS1 = 1; + phich_duration = "NORMAL"; + phich_resource = "ONESIXTH"; + srs_enable = "DISABLE"; + /* srs_BandwidthConfig =; + srs_SubframeConfig =; + srs_ackNackST =; + srs_MaxUpPts =;*/ - pcch_default_PagingCycle = 128; - pcch_nB = "oneT"; - bcch_modificationPeriodCoeff = 2; - ue_TimersAndConstants_t300 = 1000; - ue_TimersAndConstants_t301 = 1000; - ue_TimersAndConstants_t310 = 1000; - ue_TimersAndConstants_t311 = 10000; - ue_TimersAndConstants_n310 = 20; - ue_TimersAndConstants_n311 = 1; + pusch_p0_Nominal = -95; + pusch_alpha = "AL08"; + pucch_p0_Nominal = -117; + msg3_delta_Preamble = 6; + pucch_deltaF_Format1 = "deltaF2"; + pucch_deltaF_Format1b = "deltaF3"; + pucch_deltaF_Format2 = "deltaF0"; + pucch_deltaF_Format2a = "deltaF0"; + pucch_deltaF_Format2b = "deltaF0"; - }, - { - frame_type = "TDD"; - tdd_config = 3; - tdd_config_s = 0; - prefix_type = "NORMAL"; - eutra_band = 44; - downlink_frequency = 747500000L; - uplink_frequency_offset = 0; - - Nid_cell = 0; - N_RB_DL = 25; - Nid_cell_mbsfn = 0; - nb_antennas_tx = 1; - nb_antennas_rx = 1; - prach_root = 22; - prach_config_index = 3; - prach_high_speed = "DISABLE"; - prach_zero_correlation = 0; - prach_freq_offset = 0; - pucch_delta_shift = 1; - pucch_nRB_CQI = 1; - pucch_nCS_AN = 0; - pucch_n1_AN = 32; - pdsch_referenceSignalPower = -24; - pdsch_p_b = 0; - pusch_n_SB = 1; - pusch_enable64QAM = "DISABLE"; - pusch_hoppingMode = "interSubFrame"; - pusch_hoppingOffset = 4; - pusch_groupHoppingEnabled = "DISABLE"; - pusch_groupAssignment = 0; - pusch_sequenceHoppingEnabled = "DISABLE"; - pusch_nDMRS1 = 1; - phich_duration = "NORMAL"; - phich_resource = "ONESIXTH"; - srs_enable = "DISABLE"; - /* srs_BandwidthConfig =; - srs_SubframeConfig =; - srs_ackNackST =; - srs_MaxUpPts =;*/ + rach_numberOfRA_Preambles = 52; + rach_preamblesGroupAConfig = "DISABLE"; + /* + rach_sizeOfRA_PreamblesGroupA = ; + rach_messageSizeGroupA = ; + rach_messagePowerOffsetGroupB = ; + */ + rach_powerRampingStep = 2; + rach_preambleInitialReceivedTargetPower = -104; + rach_preambleTransMax = 6; + rach_raResponseWindowSize = 10; + rach_macContentionResolutionTimer = 48; + rach_maxHARQ_Msg3Tx = 4; - pusch_p0_Nominal = -95; - pusch_alpha = "AL08"; - pucch_p0_Nominal = -117; - msg3_delta_Preamble = 6; - pucch_deltaF_Format1 = "deltaF2"; - pucch_deltaF_Format1b = "deltaF3"; - pucch_deltaF_Format2 = "deltaF0"; - pucch_deltaF_Format2a = "deltaF0"; - pucch_deltaF_Format2b = "deltaF0"; - - rach_numberOfRA_Preambles = 52; - rach_preamblesGroupAConfig = "DISABLE"; -/* - rach_sizeOfRA_PreamblesGroupA = ; - rach_messageSizeGroupA = ; - rach_messagePowerOffsetGroupB = ; -*/ - rach_powerRampingStep = 2; - rach_preambleInitialReceivedTargetPower = -104; - rach_preambleTransMax = 6; - rach_raResponseWindowSize = 10; - rach_macContentionResolutionTimer = 48; - rach_maxHARQ_Msg3Tx = 4; + pcch_default_PagingCycle = 128; + pcch_nB = "oneT"; + bcch_modificationPeriodCoeff = 2; + ue_TimersAndConstants_t300 = 1000; + ue_TimersAndConstants_t301 = 1000; + ue_TimersAndConstants_t310 = 1000; + ue_TimersAndConstants_t311 = 10000; + ue_TimersAndConstants_n310 = 20; + ue_TimersAndConstants_n311 = 1; - pcch_default_PagingCycle = 128; - pcch_nB = "oneT"; - bcch_modificationPeriodCoeff = 2; - ue_TimersAndConstants_t300 = 1000; - ue_TimersAndConstants_t301 = 1000; - ue_TimersAndConstants_t310 = 1000; - ue_TimersAndConstants_t311 = 10000; - ue_TimersAndConstants_n310 = 20; - ue_TimersAndConstants_n311 = 1; + }, + { + frame_type = "TDD"; + tdd_config = 3; + tdd_config_s = 0; + prefix_type = "NORMAL"; + eutra_band = 44; + downlink_frequency = 747500000L; + uplink_frequency_offset = 0; + + Nid_cell = 0; + N_RB_DL = 25; + Nid_cell_mbsfn = 0; + nb_antennas_tx = 1; + nb_antennas_rx = 1; + prach_root = 22; + prach_config_index = 3; + prach_high_speed = "DISABLE"; + prach_zero_correlation = 0; + prach_freq_offset = 0; + pucch_delta_shift = 1; + pucch_nRB_CQI = 1; + pucch_nCS_AN = 0; + pucch_n1_AN = 32; + pdsch_referenceSignalPower = -24; + pdsch_p_b = 0; + pusch_n_SB = 1; + pusch_enable64QAM = "DISABLE"; + pusch_hoppingMode = "interSubFrame"; + pusch_hoppingOffset = 4; + pusch_groupHoppingEnabled = "DISABLE"; + pusch_groupAssignment = 0; + pusch_sequenceHoppingEnabled = "DISABLE"; + pusch_nDMRS1 = 1; + phich_duration = "NORMAL"; + phich_resource = "ONESIXTH"; + srs_enable = "DISABLE"; + /* srs_BandwidthConfig =; + srs_SubframeConfig =; + srs_ackNackST =; + srs_MaxUpPts =;*/ + + pusch_p0_Nominal = -95; + pusch_alpha = "AL08"; + pucch_p0_Nominal = -117; + msg3_delta_Preamble = 6; + pucch_deltaF_Format1 = "deltaF2"; + pucch_deltaF_Format1b = "deltaF3"; + pucch_deltaF_Format2 = "deltaF0"; + pucch_deltaF_Format2a = "deltaF0"; + pucch_deltaF_Format2b = "deltaF0"; + + rach_numberOfRA_Preambles = 52; + rach_preamblesGroupAConfig = "DISABLE"; + /* + rach_sizeOfRA_PreamblesGroupA = ; + rach_messageSizeGroupA = ; + rach_messagePowerOffsetGroupB = ; + */ + rach_powerRampingStep = 2; + rach_preambleInitialReceivedTargetPower = -104; + rach_preambleTransMax = 6; + rach_raResponseWindowSize = 10; + rach_macContentionResolutionTimer = 48; + rach_maxHARQ_Msg3Tx = 4; + + pcch_default_PagingCycle = 128; + pcch_nB = "oneT"; + bcch_modificationPeriodCoeff = 2; + ue_TimersAndConstants_t300 = 1000; + ue_TimersAndConstants_t301 = 1000; + ue_TimersAndConstants_t310 = 1000; + ue_TimersAndConstants_t311 = 10000; + ue_TimersAndConstants_n310 = 20; + ue_TimersAndConstants_n311 = 1; + + } + ); + + + srb1_parameters : + { + # timer_poll_retransmit = (ms) [5, 10, 15, 20,... 250, 300, 350, ... 500] + timer_poll_retransmit = 80; + + # timer_reordering = (ms) [0,5, ... 100, 110, 120, ... ,200] + timer_reordering = 35; + + # timer_reordering = (ms) [0,5, ... 250, 300, 350, ... ,500] + timer_status_prohibit = 0; + + # poll_pdu = [4, 8, 16, 32 , 64, 128, 256, infinity(>10000)] + poll_pdu = 4; + + # poll_byte = (kB) [25,50,75,100,125,250,375,500,750,1000,1250,1500,2000,3000,infinity(>10000)] + poll_byte = 99999; + + # max_retx_threshold = [1, 2, 3, 4 , 6, 8, 16, 32] + max_retx_threshold = 4; + } + + # ------- SCTP definitions + SCTP : + { + # Number of streams to use in input/output + SCTP_INSTREAMS = 2; + SCTP_OUTSTREAMS = 2; + }; - } - ); - ////////// MME parameters: mme_ip_address = ( { ipv4 = "192.168.13.11"; ipv6 = "192:168:30::17"; @@ -186,7 +214,7 @@ eNBs = } ); - NETWORK_INTERFACES : + NETWORK_INTERFACES : { ENB_INTERFACE_NAME_FOR_S1_MME = "eth0"; ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.13.82/24"; @@ -194,24 +222,24 @@ eNBs = ENB_INTERFACE_NAME_FOR_S1U = "eth0"; ENB_IPV4_ADDRESS_FOR_S1U = "192.168.13.82/24"; }; - - log_config : + + log_config : { - global_log_level ="debug"; - global_log_verbosity ="medium"; - hw_log_level ="debug"; - hw_log_verbosity ="medium"; - phy_log_level ="debug"; - phy_log_verbosity ="medium"; - mac_log_level ="info"; - mac_log_verbosity ="high"; - rlc_log_level ="info"; - rlc_log_verbosity ="medium"; - pdcp_log_level ="info"; - pdcp_log_verbosity ="medium"; - rrc_log_level ="info"; - rrc_log_verbosity ="medium"; - }; - + global_log_level ="debug"; + global_log_verbosity ="medium"; + hw_log_level ="debug"; + hw_log_verbosity ="medium"; + phy_log_level ="debug"; + phy_log_verbosity ="medium"; + mac_log_level ="info"; + mac_log_verbosity ="high"; + rlc_log_level ="info"; + rlc_log_verbosity ="medium"; + pdcp_log_level ="info"; + pdcp_log_verbosity ="medium"; + rrc_log_level ="info"; + rrc_log_verbosity ="medium"; + }; + } ); diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.dual.band7_band20.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.dual.band7_band20.conf index b42e03b09c..781e2a82e9 100644 --- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.dual.band7_band20.conf +++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.dual.band7_band20.conf @@ -5,183 +5,211 @@ Asn1_verbosity = "none"; eNBs = ( { - # real_time choice in {hard, rt-preempt, no} - real_time = "no"; ////////// Identification parameters: eNB_ID = 0xe00; - + cell_type = "CELL_MACRO_ENB"; - + eNB_name = "eNB_Eurecom_LTEBox"; - + // Tracking area code, 0x0000 and 0xfffe are reserved values tracking_area_code = "1"; - + mobile_country_code = "208"; - + mobile_network_code = "92"; - + ////////// Physical parameters: - + component_carriers = ( - { - frame_type = "FDD"; - tdd_config = 3; - tdd_config_s = 0; - prefix_type = "NORMAL"; - eutra_band = 7; - downlink_frequency = 2680000000L; - uplink_frequency_offset = -120000000; - - Nid_cell = 0; - N_RB_DL = 25; - Nid_cell_mbsfn = 0; - nb_antennas_tx = 1; - nb_antennas_rx = 1; - prach_root = 22; - tx_gain = 20; - rx_gain = 20; - prach_config_index = 0; - prach_high_speed = "DISABLE"; - prach_zero_correlation = 1; - prach_freq_offset = 2; - pucch_delta_shift = 1; - pucch_nRB_CQI = 1; - pucch_nCS_AN = 0; - pucch_n1_AN = 32; - pdsch_referenceSignalPower = -24; - pdsch_p_b = 0; - pusch_n_SB = 1; - pusch_enable64QAM = "DISABLE"; - pusch_hoppingMode = "interSubFrame"; - pusch_hoppingOffset = 0; - pusch_groupHoppingEnabled = "ENABLE"; - pusch_groupAssignment = 0; - pusch_sequenceHoppingEnabled = "DISABLE"; - pusch_nDMRS1 = 0; - phich_duration = "NORMAL"; - phich_resource = "ONESIXTH"; - srs_enable = "DISABLE"; - /* srs_BandwidthConfig =; - srs_SubframeConfig =; - srs_ackNackST =; - srs_MaxUpPts =;*/ + { + frame_type = "FDD"; + tdd_config = 3; + tdd_config_s = 0; + prefix_type = "NORMAL"; + eutra_band = 7; + downlink_frequency = 2680000000L; + uplink_frequency_offset = -120000000; - pusch_p0_Nominal = -85; - pusch_alpha = "AL1"; - pucch_p0_Nominal = -108; - msg3_delta_Preamble = 6; - pucch_deltaF_Format1 = "deltaF2"; - pucch_deltaF_Format1b = "deltaF3"; - pucch_deltaF_Format2 = "deltaF0"; - pucch_deltaF_Format2a = "deltaF0"; - pucch_deltaF_Format2b = "deltaF0"; - - rach_numberOfRA_Preambles = 64; - rach_preamblesGroupAConfig = "DISABLE"; -/* - rach_sizeOfRA_PreamblesGroupA = ; - rach_messageSizeGroupA = ; - rach_messagePowerOffsetGroupB = ; -*/ - rach_powerRampingStep = 2; - rach_preambleInitialReceivedTargetPower = -100; - rach_preambleTransMax = 10; - rach_raResponseWindowSize = 10; - rach_macContentionResolutionTimer = 48; - rach_maxHARQ_Msg3Tx = 4; + Nid_cell = 0; + N_RB_DL = 25; + Nid_cell_mbsfn = 0; + nb_antennas_tx = 1; + nb_antennas_rx = 1; + prach_root = 22; + tx_gain = 20; + rx_gain = 20; + prach_config_index = 0; + prach_high_speed = "DISABLE"; + prach_zero_correlation = 1; + prach_freq_offset = 2; + pucch_delta_shift = 1; + pucch_nRB_CQI = 1; + pucch_nCS_AN = 0; + pucch_n1_AN = 32; + pdsch_referenceSignalPower = -24; + pdsch_p_b = 0; + pusch_n_SB = 1; + pusch_enable64QAM = "DISABLE"; + pusch_hoppingMode = "interSubFrame"; + pusch_hoppingOffset = 0; + pusch_groupHoppingEnabled = "ENABLE"; + pusch_groupAssignment = 0; + pusch_sequenceHoppingEnabled = "DISABLE"; + pusch_nDMRS1 = 0; + phich_duration = "NORMAL"; + phich_resource = "ONESIXTH"; + srs_enable = "DISABLE"; + /* srs_BandwidthConfig =; + srs_SubframeConfig =; + srs_ackNackST =; + srs_MaxUpPts =;*/ - pcch_default_PagingCycle = 128; - pcch_nB = "oneT"; - bcch_modificationPeriodCoeff = 2; - ue_TimersAndConstants_t300 = 1000; - ue_TimersAndConstants_t301 = 1000; - ue_TimersAndConstants_t310 = 1000; - ue_TimersAndConstants_t311 = 10000; - ue_TimersAndConstants_n310 = 20; - ue_TimersAndConstants_n311 = 1; + pusch_p0_Nominal = -85; + pusch_alpha = "AL1"; + pucch_p0_Nominal = -108; + msg3_delta_Preamble = 6; + pucch_deltaF_Format1 = "deltaF2"; + pucch_deltaF_Format1b = "deltaF3"; + pucch_deltaF_Format2 = "deltaF0"; + pucch_deltaF_Format2a = "deltaF0"; + pucch_deltaF_Format2b = "deltaF0"; - }, - { - frame_type = "FDD"; - tdd_config = 3; - tdd_config_s = 0; - prefix_type = "NORMAL"; - eutra_band = 20; - downlink_frequency = 801000000L; - uplink_frequency_offset = 41000000; - - Nid_cell = 0; - N_RB_DL = 25; - Nid_cell_mbsfn = 0; - nb_antennas_tx = 1; - nb_antennas_rx = 1; - tx_gain = 20; - rx_gain = 20; - prach_root = 0; - prach_config_index = 0; - prach_high_speed = "DISABLE"; - prach_zero_correlation = 1; - prach_freq_offset = 2; - pucch_delta_shift = 1; - pucch_nRB_CQI = 1; - pucch_nCS_AN = 0; - pucch_n1_AN = 32; - pdsch_referenceSignalPower = -24; - pdsch_p_b = 0; - pusch_n_SB = 1; - pusch_enable64QAM = "DISABLE"; - pusch_hoppingMode = "interSubFrame"; - pusch_hoppingOffset = 0; - pusch_groupHoppingEnabled = "ENABLE"; - pusch_groupAssignment = 0; - pusch_sequenceHoppingEnabled = "DISABLE"; - pusch_nDMRS1 = 0; - phich_duration = "NORMAL"; - phich_resource = "ONESIXTH"; - srs_enable = "DISABLE"; - /* srs_BandwidthConfig =; - srs_SubframeConfig =; - srs_ackNackST =; - srs_MaxUpPts =;*/ + rach_numberOfRA_Preambles = 64; + rach_preamblesGroupAConfig = "DISABLE"; + /* + rach_sizeOfRA_PreamblesGroupA = ; + rach_messageSizeGroupA = ; + rach_messagePowerOffsetGroupB = ; + */ + rach_powerRampingStep = 2; + rach_preambleInitialReceivedTargetPower = -100; + rach_preambleTransMax = 10; + rach_raResponseWindowSize = 10; + rach_macContentionResolutionTimer = 48; + rach_maxHARQ_Msg3Tx = 4; - pusch_p0_Nominal = -95; - pusch_alpha = "AL1"; - pucch_p0_Nominal = -108; - msg3_delta_Preamble = 6; - pucch_deltaF_Format1 = "deltaF2"; - pucch_deltaF_Format1b = "deltaF3"; - pucch_deltaF_Format2 = "deltaF0"; - pucch_deltaF_Format2a = "deltaF0"; - pucch_deltaF_Format2b = "deltaF0"; - - rach_numberOfRA_Preambles = 64; - rach_preamblesGroupAConfig = "DISABLE"; -/* - rach_sizeOfRA_PreamblesGroupA = ; - rach_messageSizeGroupA = ; - rach_messagePowerOffsetGroupB = ; -*/ - rach_powerRampingStep = 2; - rach_preambleInitialReceivedTargetPower = -100; - rach_preambleTransMax = 10; - rach_raResponseWindowSize = 10; - rach_macContentionResolutionTimer = 48; - rach_maxHARQ_Msg3Tx = 4; + pcch_default_PagingCycle = 128; + pcch_nB = "oneT"; + bcch_modificationPeriodCoeff = 2; + ue_TimersAndConstants_t300 = 1000; + ue_TimersAndConstants_t301 = 1000; + ue_TimersAndConstants_t310 = 1000; + ue_TimersAndConstants_t311 = 10000; + ue_TimersAndConstants_n310 = 20; + ue_TimersAndConstants_n311 = 1; - pcch_default_PagingCycle = 128; - pcch_nB = "oneT"; - bcch_modificationPeriodCoeff = 2; - ue_TimersAndConstants_t300 = 1000; - ue_TimersAndConstants_t301 = 1000; - ue_TimersAndConstants_t310 = 1000; - ue_TimersAndConstants_t311 = 10000; - ue_TimersAndConstants_n310 = 20; - ue_TimersAndConstants_n311 = 1; + }, + { + frame_type = "FDD"; + tdd_config = 3; + tdd_config_s = 0; + prefix_type = "NORMAL"; + eutra_band = 20; + downlink_frequency = 801000000L; + uplink_frequency_offset = 41000000; + + Nid_cell = 0; + N_RB_DL = 25; + Nid_cell_mbsfn = 0; + nb_antennas_tx = 1; + nb_antennas_rx = 1; + tx_gain = 20; + rx_gain = 20; + prach_root = 0; + prach_config_index = 0; + prach_high_speed = "DISABLE"; + prach_zero_correlation = 1; + prach_freq_offset = 2; + pucch_delta_shift = 1; + pucch_nRB_CQI = 1; + pucch_nCS_AN = 0; + pucch_n1_AN = 32; + pdsch_referenceSignalPower = -24; + pdsch_p_b = 0; + pusch_n_SB = 1; + pusch_enable64QAM = "DISABLE"; + pusch_hoppingMode = "interSubFrame"; + pusch_hoppingOffset = 0; + pusch_groupHoppingEnabled = "ENABLE"; + pusch_groupAssignment = 0; + pusch_sequenceHoppingEnabled = "DISABLE"; + pusch_nDMRS1 = 0; + phich_duration = "NORMAL"; + phich_resource = "ONESIXTH"; + srs_enable = "DISABLE"; + /* srs_BandwidthConfig =; + srs_SubframeConfig =; + srs_ackNackST =; + srs_MaxUpPts =;*/ + + pusch_p0_Nominal = -95; + pusch_alpha = "AL1"; + pucch_p0_Nominal = -108; + msg3_delta_Preamble = 6; + pucch_deltaF_Format1 = "deltaF2"; + pucch_deltaF_Format1b = "deltaF3"; + pucch_deltaF_Format2 = "deltaF0"; + pucch_deltaF_Format2a = "deltaF0"; + pucch_deltaF_Format2b = "deltaF0"; + + rach_numberOfRA_Preambles = 64; + rach_preamblesGroupAConfig = "DISABLE"; + /* + rach_sizeOfRA_PreamblesGroupA = ; + rach_messageSizeGroupA = ; + rach_messagePowerOffsetGroupB = ; + */ + rach_powerRampingStep = 2; + rach_preambleInitialReceivedTargetPower = -100; + rach_preambleTransMax = 10; + rach_raResponseWindowSize = 10; + rach_macContentionResolutionTimer = 48; + rach_maxHARQ_Msg3Tx = 4; + + pcch_default_PagingCycle = 128; + pcch_nB = "oneT"; + bcch_modificationPeriodCoeff = 2; + ue_TimersAndConstants_t300 = 1000; + ue_TimersAndConstants_t301 = 1000; + ue_TimersAndConstants_t310 = 1000; + ue_TimersAndConstants_t311 = 10000; + ue_TimersAndConstants_n310 = 20; + ue_TimersAndConstants_n311 = 1; + + } + ); + + + srb1_parameters : + { + # timer_poll_retransmit = (ms) [5, 10, 15, 20,... 250, 300, 350, ... 500] + timer_poll_retransmit = 80; + + # timer_reordering = (ms) [0,5, ... 100, 110, 120, ... ,200] + timer_reordering = 35; + + # timer_reordering = (ms) [0,5, ... 250, 300, 350, ... ,500] + timer_status_prohibit = 0; + + # poll_pdu = [4, 8, 16, 32 , 64, 128, 256, infinity(>10000)] + poll_pdu = 4; + + # poll_byte = (kB) [25,50,75,100,125,250,375,500,750,1000,1250,1500,2000,3000,infinity(>10000)] + poll_byte = 99999; + + # max_retx_threshold = [1, 2, 3, 4 , 6, 8, 16, 32] + max_retx_threshold = 4; + } + + # ------- SCTP definitions + SCTP : + { + # Number of streams to use in input/output + SCTP_INSTREAMS = 2; + SCTP_OUTSTREAMS = 2; + }; - } - ); - ////////// MME parameters: mme_ip_address = ( { ipv4 = "192.168.13.11"; ipv6 = "192:168:30::17"; @@ -190,33 +218,33 @@ eNBs = } ); - NETWORK_INTERFACES : + NETWORK_INTERFACES : { - ENB_INTERFACE_NAME_FOR_S1_MME = "eth0"; - ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.13.82/24"; + ENB_INTERFACE_NAME_FOR_S1_MME = "eth0"; + ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.13.82/24"; - ENB_INTERFACE_NAME_FOR_S1U = "eth0"; - ENB_IPV4_ADDRESS_FOR_S1U = "192.168.13.82/24"; - ENB_PORT_FOR_S1U = 2152; # Spec 2152 + ENB_INTERFACE_NAME_FOR_S1U = "eth0"; + ENB_IPV4_ADDRESS_FOR_S1U = "192.168.13.82/24"; + ENB_PORT_FOR_S1U = 2152; # Spec 2152 }; - - log_config : + + log_config : { - global_log_level ="info"; - global_log_verbosity ="high"; - hw_log_level ="debug"; - hw_log_verbosity ="medium"; - phy_log_level ="info"; - phy_log_verbosity ="medium"; - mac_log_level ="debug"; - mac_log_verbosity ="high"; - rlc_log_level ="info"; - rlc_log_verbosity ="medium"; - pdcp_log_level ="info"; - pdcp_log_verbosity ="medium"; - rrc_log_level ="info"; - rrc_log_verbosity ="medium"; - }; - + global_log_level ="info"; + global_log_verbosity ="high"; + hw_log_level ="debug"; + hw_log_verbosity ="medium"; + phy_log_level ="info"; + phy_log_verbosity ="medium"; + mac_log_level ="debug"; + mac_log_verbosity ="high"; + rlc_log_level ="info"; + rlc_log_verbosity ="medium"; + pdcp_log_level ="info"; + pdcp_log_verbosity ="medium"; + rrc_log_level ="info"; + rrc_log_verbosity ="medium"; + }; + } ); diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.dual.rel10.band13_band4.exmimo2.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.dual.rel10.band13_band4.exmimo2.conf index 83509c0bf7..569e7b39b2 100644 --- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.dual.rel10.band13_band4.exmimo2.conf +++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.dual.rel10.band13_band4.exmimo2.conf @@ -5,181 +5,209 @@ Asn1_verbosity = "none"; eNBs = ( { - # real_time choice in {hard, rt-preempt, no} - real_time = "no"; ////////// Identification parameters: eNB_ID = 0xe00; - + cell_type = "CELL_MACRO_ENB"; - + eNB_name = "eNB_Eurecom_LTEBox"; - + // Tracking area code, 0x0000 and 0xfffe are reserved values tracking_area_code = "1"; - + mobile_country_code = "208"; - + mobile_network_code = "92"; - + ////////// Physical parameters: - + component_carriers = ( - { - frame_type = "FDD"; - tdd_config = 3; - tdd_config_s = 0; - prefix_type = "NORMAL"; - eutra_band = 13; - downlink_frequency = 748500000L; - uplink_frequency_offset = 31000000; - - Nid_cell = 0; - N_RB_DL = 25; - Nid_cell_mbsfn = 0; - nb_antennas_tx = 1; - nb_antennas_rx = 1; - tx_gain = 2; - rx_gain = 2; - prach_root = 22; - prach_config_index = 0; - prach_high_speed = "DISABLE"; - prach_zero_correlation = 1; - prach_freq_offset = 2; - pucch_delta_shift = 1; - pucch_nRB_CQI = 1; - pucch_nCS_AN = 0; - pdsch_referenceSignalPower = -24; - pdsch_p_b = 0; - pusch_n_SB = 1; - pusch_enable64QAM = "DISABLE"; - pusch_hoppingMode = "interSubFrame"; - pusch_hoppingOffset = 0; - pusch_groupHoppingEnabled = "ENABLE"; - pusch_groupAssignment = 0; - pusch_sequenceHoppingEnabled = "DISABLE"; - pusch_nDMRS1 = 0; - phich_duration = "NORMAL"; - phich_resource = "ONESIXTH"; - srs_enable = "DISABLE"; - /* srs_BandwidthConfig =; - srs_SubframeConfig =; - srs_ackNackST =; - srs_MaxUpPts =;*/ + { + frame_type = "FDD"; + tdd_config = 3; + tdd_config_s = 0; + prefix_type = "NORMAL"; + eutra_band = 13; + downlink_frequency = 748500000L; + uplink_frequency_offset = 31000000; - pusch_p0_Nominal = -75; - pusch_alpha = "AL1"; - pucch_p0_Nominal = -108; - msg3_delta_Preamble = 6; - pucch_deltaF_Format1 = "deltaF2"; - pucch_deltaF_Format1b = "deltaF3"; - pucch_deltaF_Format2 = "deltaF0"; - pucch_deltaF_Format2a = "deltaF0"; - pucch_deltaF_Format2b = "deltaF0"; - - rach_numberOfRA_Preambles = 64; - rach_preamblesGroupAConfig = "DISABLE"; -/* - rach_sizeOfRA_PreamblesGroupA = ; - rach_messageSizeGroupA = ; - rach_messagePowerOffsetGroupB = ; -*/ - rach_powerRampingStep = 2; - rach_preambleInitialReceivedTargetPower = -100; - rach_preambleTransMax = 10; - rach_raResponseWindowSize = 10; - rach_macContentionResolutionTimer = 48; - rach_maxHARQ_Msg3Tx = 4; + Nid_cell = 0; + N_RB_DL = 25; + Nid_cell_mbsfn = 0; + nb_antennas_tx = 1; + nb_antennas_rx = 1; + tx_gain = 2; + rx_gain = 2; + prach_root = 22; + prach_config_index = 0; + prach_high_speed = "DISABLE"; + prach_zero_correlation = 1; + prach_freq_offset = 2; + pucch_delta_shift = 1; + pucch_nRB_CQI = 1; + pucch_nCS_AN = 0; + pdsch_referenceSignalPower = -24; + pdsch_p_b = 0; + pusch_n_SB = 1; + pusch_enable64QAM = "DISABLE"; + pusch_hoppingMode = "interSubFrame"; + pusch_hoppingOffset = 0; + pusch_groupHoppingEnabled = "ENABLE"; + pusch_groupAssignment = 0; + pusch_sequenceHoppingEnabled = "DISABLE"; + pusch_nDMRS1 = 0; + phich_duration = "NORMAL"; + phich_resource = "ONESIXTH"; + srs_enable = "DISABLE"; + /* srs_BandwidthConfig =; + srs_SubframeConfig =; + srs_ackNackST =; + srs_MaxUpPts =;*/ - pcch_default_PagingCycle = 128; - pcch_nB = "oneT"; - bcch_modificationPeriodCoeff = 2; - ue_TimersAndConstants_t300 = 1000; - ue_TimersAndConstants_t301 = 1000; - ue_TimersAndConstants_t310 = 1000; - ue_TimersAndConstants_t311 = 10000; - ue_TimersAndConstants_n310 = 20; - ue_TimersAndConstants_n311 = 1; + pusch_p0_Nominal = -75; + pusch_alpha = "AL1"; + pucch_p0_Nominal = -108; + msg3_delta_Preamble = 6; + pucch_deltaF_Format1 = "deltaF2"; + pucch_deltaF_Format1b = "deltaF3"; + pucch_deltaF_Format2 = "deltaF0"; + pucch_deltaF_Format2a = "deltaF0"; + pucch_deltaF_Format2b = "deltaF0"; - }, - { - frame_type = "FDD"; - tdd_config = 3; - tdd_config_s = 0; - prefix_type = "NORMAL"; - eutra_band = 4; - downlink_frequency = 2112500000L; - uplink_frequency_offset = -400000000; - - Nid_cell = 0; - N_RB_DL = 25; - Nid_cell_mbsfn = 0; - nb_antennas_tx = 1; - nb_antennas_rx = 1; - tx_gain = 2; - rx_gain = 2; - prach_root = 22; - prach_config_index = 0; - prach_high_speed = "DISABLE"; - prach_zero_correlation = 1; - prach_freq_offset = 2; - pucch_delta_shift = 1; - pucch_nRB_CQI = 1; - pucch_nCS_AN = 0; - pdsch_referenceSignalPower = -40; - pdsch_p_b = 0; - pusch_n_SB = 1; - pusch_enable64QAM = "DISABLE"; - pusch_hoppingMode = "interSubFrame"; - pusch_hoppingOffset = 0; - pusch_groupHoppingEnabled = "ENABLE"; - pusch_groupAssignment = 0; - pusch_sequenceHoppingEnabled = "DISABLE"; - pusch_nDMRS1 = 0; - phich_duration = "NORMAL"; - phich_resource = "ONESIXTH"; - srs_enable = "DISABLE"; - /* srs_BandwidthConfig =; - srs_SubframeConfig =; - srs_ackNackST =; - srs_MaxUpPts =;*/ + rach_numberOfRA_Preambles = 64; + rach_preamblesGroupAConfig = "DISABLE"; + /* + rach_sizeOfRA_PreamblesGroupA = ; + rach_messageSizeGroupA = ; + rach_messagePowerOffsetGroupB = ; + */ + rach_powerRampingStep = 2; + rach_preambleInitialReceivedTargetPower = -100; + rach_preambleTransMax = 10; + rach_raResponseWindowSize = 10; + rach_macContentionResolutionTimer = 48; + rach_maxHARQ_Msg3Tx = 4; - pusch_p0_Nominal = -85; - pusch_alpha = "AL1"; - pucch_p0_Nominal = -108; - msg3_delta_Preamble = 6; - pucch_deltaF_Format1 = "deltaF2"; - pucch_deltaF_Format1b = "deltaF3"; - pucch_deltaF_Format2 = "deltaF0"; - pucch_deltaF_Format2a = "deltaF0"; - pucch_deltaF_Format2b = "deltaF0"; - - rach_numberOfRA_Preambles = 64; - rach_preamblesGroupAConfig = "DISABLE"; -/* - rach_sizeOfRA_PreamblesGroupA = ; - rach_messageSizeGroupA = ; - rach_messagePowerOffsetGroupB = ; -*/ - rach_powerRampingStep = 2; - rach_preambleInitialReceivedTargetPower = -100; - rach_preambleTransMax = 10; - rach_raResponseWindowSize = 10; - rach_macContentionResolutionTimer = 48; - rach_maxHARQ_Msg3Tx = 4; + pcch_default_PagingCycle = 128; + pcch_nB = "oneT"; + bcch_modificationPeriodCoeff = 2; + ue_TimersAndConstants_t300 = 1000; + ue_TimersAndConstants_t301 = 1000; + ue_TimersAndConstants_t310 = 1000; + ue_TimersAndConstants_t311 = 10000; + ue_TimersAndConstants_n310 = 20; + ue_TimersAndConstants_n311 = 1; - pcch_default_PagingCycle = 128; - pcch_nB = "oneT"; - bcch_modificationPeriodCoeff = 2; - ue_TimersAndConstants_t300 = 1000; - ue_TimersAndConstants_t301 = 1000; - ue_TimersAndConstants_t310 = 1000; - ue_TimersAndConstants_t311 = 10000; - ue_TimersAndConstants_n310 = 20; - ue_TimersAndConstants_n311 = 1; + }, + { + frame_type = "FDD"; + tdd_config = 3; + tdd_config_s = 0; + prefix_type = "NORMAL"; + eutra_band = 4; + downlink_frequency = 2112500000L; + uplink_frequency_offset = -400000000; + + Nid_cell = 0; + N_RB_DL = 25; + Nid_cell_mbsfn = 0; + nb_antennas_tx = 1; + nb_antennas_rx = 1; + tx_gain = 2; + rx_gain = 2; + prach_root = 22; + prach_config_index = 0; + prach_high_speed = "DISABLE"; + prach_zero_correlation = 1; + prach_freq_offset = 2; + pucch_delta_shift = 1; + pucch_nRB_CQI = 1; + pucch_nCS_AN = 0; + pdsch_referenceSignalPower = -40; + pdsch_p_b = 0; + pusch_n_SB = 1; + pusch_enable64QAM = "DISABLE"; + pusch_hoppingMode = "interSubFrame"; + pusch_hoppingOffset = 0; + pusch_groupHoppingEnabled = "ENABLE"; + pusch_groupAssignment = 0; + pusch_sequenceHoppingEnabled = "DISABLE"; + pusch_nDMRS1 = 0; + phich_duration = "NORMAL"; + phich_resource = "ONESIXTH"; + srs_enable = "DISABLE"; + /* srs_BandwidthConfig =; + srs_SubframeConfig =; + srs_ackNackST =; + srs_MaxUpPts =;*/ + + pusch_p0_Nominal = -85; + pusch_alpha = "AL1"; + pucch_p0_Nominal = -108; + msg3_delta_Preamble = 6; + pucch_deltaF_Format1 = "deltaF2"; + pucch_deltaF_Format1b = "deltaF3"; + pucch_deltaF_Format2 = "deltaF0"; + pucch_deltaF_Format2a = "deltaF0"; + pucch_deltaF_Format2b = "deltaF0"; + + rach_numberOfRA_Preambles = 64; + rach_preamblesGroupAConfig = "DISABLE"; + /* + rach_sizeOfRA_PreamblesGroupA = ; + rach_messageSizeGroupA = ; + rach_messagePowerOffsetGroupB = ; + */ + rach_powerRampingStep = 2; + rach_preambleInitialReceivedTargetPower = -100; + rach_preambleTransMax = 10; + rach_raResponseWindowSize = 10; + rach_macContentionResolutionTimer = 48; + rach_maxHARQ_Msg3Tx = 4; + + pcch_default_PagingCycle = 128; + pcch_nB = "oneT"; + bcch_modificationPeriodCoeff = 2; + ue_TimersAndConstants_t300 = 1000; + ue_TimersAndConstants_t301 = 1000; + ue_TimersAndConstants_t310 = 1000; + ue_TimersAndConstants_t311 = 10000; + ue_TimersAndConstants_n310 = 20; + ue_TimersAndConstants_n311 = 1; + + } + ); + + + srb1_parameters : + { + # timer_poll_retransmit = (ms) [5, 10, 15, 20,... 250, 300, 350, ... 500] + timer_poll_retransmit = 80; + + # timer_reordering = (ms) [0,5, ... 100, 110, 120, ... ,200] + timer_reordering = 35; + + # timer_reordering = (ms) [0,5, ... 250, 300, 350, ... ,500] + timer_status_prohibit = 0; + + # poll_pdu = [4, 8, 16, 32 , 64, 128, 256, infinity(>10000)] + poll_pdu = 4; + + # poll_byte = (kB) [25,50,75,100,125,250,375,500,750,1000,1250,1500,2000,3000,infinity(>10000)] + poll_byte = 99999; + + # max_retx_threshold = [1, 2, 3, 4 , 6, 8, 16, 32] + max_retx_threshold = 4; + } + + # ------- SCTP definitions + SCTP : + { + # Number of streams to use in input/output + SCTP_INSTREAMS = 2; + SCTP_OUTSTREAMS = 2; + }; - } - ); - ////////// MME parameters: mme_ip_address = ( { ipv4 = "192.168.13.11"; ipv6 = "192:168:30::17"; @@ -188,7 +216,7 @@ eNBs = } ); - NETWORK_INTERFACES : + NETWORK_INTERFACES : { ENB_INTERFACE_NAME_FOR_S1_MME = "eth0"; ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.13.82/24"; @@ -197,24 +225,24 @@ eNBs = ENB_IPV4_ADDRESS_FOR_S1U = "192.168.13.82/24"; ENB_PORT_FOR_S1U = 2152; # Spec 2152 }; - - log_config : + + log_config : { - global_log_level ="info"; - global_log_verbosity ="high"; - hw_log_level ="info"; - hw_log_verbosity ="high"; - phy_log_level ="info"; - phy_log_verbosity ="high"; - mac_log_level ="info"; - mac_log_verbosity ="high"; - rlc_log_level ="info"; - rlc_log_verbosity ="high"; - pdcp_log_level ="info"; - pdcp_log_verbosity ="high"; - rrc_log_level ="info"; - rrc_log_verbosity ="high"; - }; - + global_log_level ="info"; + global_log_verbosity ="high"; + hw_log_level ="info"; + hw_log_verbosity ="high"; + phy_log_level ="info"; + phy_log_verbosity ="high"; + mac_log_level ="info"; + mac_log_verbosity ="high"; + rlc_log_level ="info"; + rlc_log_verbosity ="high"; + pdcp_log_level ="info"; + pdcp_log_verbosity ="high"; + rrc_log_level ="info"; + rrc_log_verbosity ="high"; + }; + } ); diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/example.enb.band7.epc_eur.local.exmimo2_2a.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/example.enb.band7.epc_eur.local.exmimo2_2a.conf index 316105a530..512d1e78b3 100644 --- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/example.enb.band7.epc_eur.local.exmimo2_2a.conf +++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/example.enb.band7.epc_eur.local.exmimo2_2a.conf @@ -5,8 +5,6 @@ Asn1_verbosity = "none"; eNBs = ( { - # real_time choice in {hard, rt-preempt, no} - real_time = "no"; ////////// Identification parameters: eNB_ID = 0xe00; @@ -104,6 +102,36 @@ eNBs = } ); + + srb1_parameters : + { + # timer_poll_retransmit = (ms) [5, 10, 15, 20,... 250, 300, 350, ... 500] + timer_poll_retransmit = 80; + + # timer_reordering = (ms) [0,5, ... 100, 110, 120, ... ,200] + timer_reordering = 35; + + # timer_reordering = (ms) [0,5, ... 250, 300, 350, ... ,500] + timer_status_prohibit = 0; + + # poll_pdu = [4, 8, 16, 32 , 64, 128, 256, infinity(>10000)] + poll_pdu = 4; + + # poll_byte = (kB) [25,50,75,100,125,250,375,500,750,1000,1250,1500,2000,3000,infinity(>10000)] + poll_byte = 99999; + + # max_retx_threshold = [1, 2, 3, 4 , 6, 8, 16, 32] + max_retx_threshold = 4; + } + + # ------- SCTP definitions + SCTP : + { + # Number of streams to use in input/output + SCTP_INSTREAMS = 2; + SCTP_OUTSTREAMS = 2; + }; + mme_ip_address = ( { ipv4 = "192.188.2.2"; ipv6 = "2192:168:30::17"; active = "yes"; diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/example.enb.epc_eur.local.exmimo.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/example.enb.epc_eur.local.exmimo.conf index ef8c2b1ea0..c8e0280ba2 100755 --- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/example.enb.epc_eur.local.exmimo.conf +++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/example.enb.epc_eur.local.exmimo.conf @@ -8,9 +8,6 @@ eNBs = ( { ////////// Identification parameters: - # real_time choice in {rtai, linux-kernel, emulation} - GNU_DEBUGGER = "no"; - real_time = "linux-kernel"; eNB_ID = 0xe00; cell_type = "CELL_MACRO_ENB"; eNB_name = "eNB_Eurecom_0"; @@ -23,7 +20,7 @@ eNBs = component_carriers = ( { - frame_type = "FDD"; + frame_type = "FDD"; tdd_config = 3; tdd_config_s = 0; prefix_type = "NORMAL"; @@ -35,7 +32,7 @@ eNBs = N_RB_DL = 25; Nid_cell_mbsfn = 0; nb_antennas_tx = 1; - nb_antennas_rx = 1; + nb_antennas_rx = 1; tx_gain = 30; rx_gain = 25; prach_root = 0; @@ -49,7 +46,7 @@ eNBs = pucch_n1_AN = 32; pdsch_referenceSignalPower = -50; pdsch_p_b = 0; - pusch_n_SB = 1; + pusch_n_SB = 1; pusch_enable64QAM = "DISABLE"; pusch_hoppingMode = "interSubFrame"; pusch_hoppingOffset = 0; @@ -67,7 +64,7 @@ eNBs = srs_MaxUpPts =; */ - pusch_p0_Nominal = -75; + pusch_p0_Nominal = -75; pusch_alpha = "AL1"; pucch_p0_Nominal = -96; msg3_delta_Preamble = 6; @@ -76,13 +73,13 @@ eNBs = pucch_deltaF_Format2 = "deltaF0"; pucch_deltaF_Format2a = "deltaF0"; pucch_deltaF_Format2b = "deltaF0"; - + rach_numberOfRA_Preambles = 64; rach_preamblesGroupAConfig = "DISABLE"; /* rach_sizeOfRA_PreamblesGroupA = ; rach_messageSizeGroupA = ; - rach_messagePowerOffsetGroupB = ; + rach_messagePowerOffsetGroupB = ; */ rach_powerRampingStep = 2; rach_preambleInitialReceivedTargetPower = -90; @@ -104,6 +101,34 @@ eNBs = ); + srb1_parameters : + { + # timer_poll_retransmit = (ms) [5, 10, 15, 20,... 250, 300, 350, ... 500] + timer_poll_retransmit = 80; + + # timer_reordering = (ms) [0,5, ... 100, 110, 120, ... ,200] + timer_reordering = 35; + + # timer_reordering = (ms) [0,5, ... 250, 300, 350, ... ,500] + timer_status_prohibit = 0; + + # poll_pdu = [4, 8, 16, 32 , 64, 128, 256, infinity(>10000)] + poll_pdu = 4; + + # poll_byte = (kB) [25,50,75,100,125,250,375,500,750,1000,1250,1500,2000,3000,infinity(>10000)] + poll_byte = 99999; + + # max_retx_threshold = [1, 2, 3, 4 , 6, 8, 16, 32] + max_retx_threshold = 4; + } + + # ------- SCTP definitions + SCTP : + { + # Number of streams to use in input/output + SCTP_INSTREAMS = 2; + SCTP_OUTSTREAMS = 2; + }; mme_ip_address = ( { ipv4 = "192.188.2.2"; ipv6 = "2192:168:30::17"; @@ -111,8 +136,8 @@ eNBs = preference = "ipv4"; } ); - - NETWORK_INTERFACES : + + NETWORK_INTERFACES : { ENB_INTERFACE_NAME_FOR_S1_MME = "tun2"; ENB_IPV4_ADDRESS_FOR_S1_MME = "192.188.2.2/24"; @@ -121,28 +146,28 @@ eNBs = ENB_IPV4_ADDRESS_FOR_S1U = "192.188.3.3/24"; ENB_PORT_FOR_S1U = 2152; # Spec 2152 }; - + # available options for level: error, warn, notice, info, debug, trace # available options for verbosity: none, low, medium, high, full - log_config : + log_config : { - global_log_level ="debug"; + global_log_level ="debug"; global_log_verbosity ="medium"; - hw_log_level ="error"; + hw_log_level ="error"; hw_log_verbosity ="medium"; - phy_log_level ="info"; + phy_log_level ="info"; phy_log_verbosity ="medium"; - mac_log_level ="info"; + mac_log_level ="info"; mac_log_verbosity ="medium"; - rlc_log_level ="debug"; + rlc_log_level ="debug"; rlc_log_verbosity ="medium"; - pdcp_log_level ="debug"; + pdcp_log_level ="debug"; pdcp_log_verbosity ="medium"; - rrc_log_level ="debug"; + rrc_log_level ="debug"; rrc_log_verbosity ="medium"; - gtpu_log_level ="debug"; + gtpu_log_level ="debug"; gtpu_log_verbosity ="medium"; - udp_log_level ="debug"; + udp_log_level ="debug"; udp_log_verbosity ="medium"; }; } diff --git a/targets/RT/USER/Makefile b/targets/RT/USER/Makefile index 72f9587e0a..2c864a1565 100644 --- a/targets/RT/USER/Makefile +++ b/targets/RT/USER/Makefile @@ -109,7 +109,6 @@ include $(OPENAIR2_DIR)/LAYER2/Makefile.inc include $(OPENAIR2_DIR)/UTIL/Makefile.inc include $(OPENAIR2_DIR)/RRC/NAS/Makefile.inc include $(OPENAIR2_DIR)/ENB_APP/Makefile.inc -include $(OPENAIR3_DIR)/RAL-LTE/Makefile.inc ifeq ($(USRP),1) @@ -319,8 +318,7 @@ synctest_UE: synctest drivers: # cd $(OPENAIR2_DIR) && make clean && make nasmesh_netlink.ko # cd $(OPENAIR2_DIR)/NAS/DRIVER/MESH/RB_TOOL && make clean && make - cd $(OPENAIR_TARGETS)/ARCH/EXMIMO/DRIVER/eurecom && make clean && make - cp $(OPENAIR_TARGETS)/ARCH/EXMIMO/DRIVER/eurecom/openair_rf.ko $(OPENAIR_TARGETS)/bin/. + cd $(OPENAIR_TARGETS)/ARCH/EXMIMO/DRIVER/eurecom && make clean && make cd $(OPENAIR_TARGETS)/ARCH/EXMIMO/USERSPACE/OAI_FW_INIT && make clean && make cp $(OPENAIR_TARGETS)/ARCH/EXMIMO/USERSPACE/OAI_FW_INIT/updatefw $(OPENAIR_TARGETS)/bin/. diff --git a/targets/RT/USER/UE_transport_IQ.c b/targets/RT/USER/UE_transport_IQ.c new file mode 100644 index 0000000000..e986046d81 --- /dev/null +++ b/targets/RT/USER/UE_transport_IQ.c @@ -0,0 +1,555 @@ +/******************************************************************************* + OpenAirInterface + Copyright(c) 1999 - 2014 Eurecom + + OpenAirInterface is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + + OpenAirInterface is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with OpenAirInterface.The full GNU General Public License is + included in this distribution in the file called "COPYING". If not, + see . + + Contact Information + OpenAirInterface Admin: openair_admin@eurecom.fr + OpenAirInterface Tech : openair_tech@eurecom.fr + OpenAirInterface Dev : openair4g-devel@eurecom.fr + + Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE + + *******************************************************************************/ +/*! \file UE_transport_IQ.c + * \brief UE transport IQ sampels + * \author Katerina Trilyraki, Navid Nikaein, Raymond Knopp + * \date 2015 + * \version 0.1 + * \company Eurecom + * \maintainer: navid.nikaein@eurecom.fr + * \note + * \warning very experimental + */ + +#include +#include +#include +#include +#include +#include +#include + +#include "common_lib.h" +#include "PHY/defs.h" +#include "rrh_gw.h" +#include "rrh_gw_externs.h" + +#define START_CMD 1 +#define RRH_UE_PORT 51000 +#define RRH_UE_DEST_IP "127.0.0.1" +#define PRINTF_PERIOD 3750 + +/****************************************************************************** + ** FUNCTION PROTOTYPES ** + ******************************************************************************/ +void *rrh_proc_UE_thread(void *); +void *rrh_UE_thread(void *); +void *rrh_UE_rx_thread(void *); +void *rrh_UE_tx_thread(void *); + + + +openair0_timestamp timestamp_UE_tx[4]= {0,0,0,0},timestamp_UE_rx[4]= {0,0,0,0}; +openair0_timestamp nrt_UE_counter[4]= {0,0,0,0}; + +pthread_t main_rrh_UE_thread,main_rrh_proc_UE_thread; +pthread_attr_t attr, attr_proc; +struct sched_param sched_param_rrh, sched_param_rrh_proc; +pthread_cond_t sync_UE_cond[4]; +pthread_mutex_t sync_UE_mutex[4]; + +int32_t overflow_rx_buffer_UE[4]= {0,0,0,0}; +int32_t nsamps_UE[4]= {0,0,0,0}; +int32_t UE_tx_started=0,UE_rx_started=0; +int32_t RT_flag_UE=0, NRT_flag_UE=1; +int32_t counter_UE_rx[4]= {0,0,0,0}; +int32_t counter_UE_tx[4]= {0,0,0,0}; +int32_t **tx_buffer_UE, **rx_buffer_UE; + +int sync_UE_rx[4]= {-1,-1,-1,-1}; +void *rrh_UE_thread_status; + + +void *rx_ue[2]; // FIXME hard coded array size; indexed by lte_frame_parms.nb_antennas_rx +void *tx_ue[2]; // FIXME hard coded array size; indexed by lte_frame_parms.nb_antennas_tx + + +void config_UE_mod( rrh_module_t *dev_ue, uint8_t RT_flag,uint8_t NRT_flag) { + + int i; + int error_code_UE, error_code_proc_UE; + void *tmp; + + RT_flag_UE=RT_flag; + NRT_flag_UE=NRT_flag; + + pthread_attr_init(&attr); + sched_param_rrh.sched_priority = sched_get_priority_max(SCHED_FIFO); + pthread_attr_init(&attr_proc); + sched_param_rrh_proc.sched_priority = sched_get_priority_max(SCHED_FIFO-1); + + pthread_attr_setschedparam(&attr,&sched_param_rrh); + pthread_attr_setschedpolicy(&attr,SCHED_FIFO); + pthread_attr_setschedparam(&attr_proc,&sched_param_rrh_proc); + pthread_attr_setschedpolicy(&attr_proc,SCHED_FIFO-1); + + + for (i=0; i<4; i++) { + pthread_mutex_init(&sync_UE_mutex[i],NULL); + pthread_cond_init(&sync_UE_cond[i],NULL); + } + + error_code_UE = pthread_create(&main_rrh_UE_thread, &attr, rrh_UE_thread, (void *)dev_ue); + error_code_proc_UE = pthread_create(&main_rrh_proc_UE_thread, &attr_proc, rrh_proc_UE_thread, (void *)dev_ue); + + if (error_code_UE) { + printf("Error while creating UE thread\n"); + exit(-1); + } + + if (error_code_proc_UE) { + printf("Error while creating UE proc thread\n"); + exit(-1); + } + +} + + +/*! \fn void *rrh_proc_UE_thread((void *)dev_ue) +* \brief this function +* \param[in] +* \param[out] +* \return +* \note +* @ingroup _oai +*/ +void *rrh_proc_UE_thread(void * arg) { + + int antenna_index,i; + openair0_timestamp truncated_timestamp, truncated_timestamp_final, last_hw_counter=0; + struct timespec time_req, time_rem; + int16_t *txp,*rxp; + unsigned int samples_per_frame=0; + rrh_module_t *dev=(rrh_module_t *)arg; + + samples_per_frame= dev->eth_dev.openair0_cfg.samples_per_frame; + AssertFatal(samples_per_frame <=0, "invalide samples_per_frame !%u\n",samples_per_frame); + + time_req.tv_sec = 0; + time_req.tv_nsec = 1000; + + while (rrh_exit==0) { + //wait until some data has been copied + for (antenna_index=0; antenna_index<4; antenna_index++) { + if (sync_UE_rx[antenna_index]==0) { + if (!UE_tx_started) { + UE_tx_started=1; //Set this flag to 1 to indicate that a UE started retrieving data + if (RT_flag_UE==1) { + last_hw_counter=hw_counter; + } + } else { + if (RT_flag_UE==1) { + if (hw_counter > last_hw_counter+1) { + printf("L1"); + // goto end_copy_UE; + } else { + while (hw_counter < last_hw_counter+1) + nanosleep(&time_req,&time_rem); + } + } + } + + truncated_timestamp = timestamp_UE_tx[antenna_index]%(samples_per_frame); + truncated_timestamp_final = (timestamp_UE_tx[antenna_index]+nsamps_UE[antenna_index])%samples_per_frame; + + if ((truncated_timestamp + nsamps_UE[antenna_index]) > samples_per_frame) { + if ((timestamp_eNB_rx[antenna_index]%samples_per_frame < nsamps_UE[antenna_index]) && (eNB_rx_started==1)) { + overflow_rx_buffer_eNB[antenna_index]++; + printf("eNB Overflow[%d] : %d, timestamp : %d\n",antenna_index,overflow_rx_buffer_eNB[antenna_index],(int)truncated_timestamp); + + if (NRT_flag_UE==1) { + while ((timestamp_eNB_rx[antenna_index]%samples_per_frame) < nsamps_UE[antenna_index]) + nanosleep(&time_req,&time_rem); + } + } + + rxp = (int16_t*)&rx_buffer_eNB[antenna_index][truncated_timestamp]; + txp = (int16_t*)&tx_buffer_UE[antenna_index][truncated_timestamp]; + + for (i=0; i<(samples_per_frame<<1)-(truncated_timestamp<<1); i++) { + rxp[i] = txp[i]>>6; + } + + rxp = (int16_t*)&rx_buffer_eNB[antenna_index][0]; + txp = (int16_t*)&tx_buffer_UE[antenna_index][0]; + + for (i=0; i>6; + } + + } else { + if (((truncated_timestamp < (timestamp_eNB_rx[antenna_index]%samples_per_frame)) && + (truncated_timestamp_final > (timestamp_eNB_rx[antenna_index]%samples_per_frame))) && + (eNB_rx_started==1)) { + overflow_rx_buffer_eNB[antenna_index]++; + printf("eNB Overflow[%d] : %d, timestamp : %d\n",antenna_index,overflow_rx_buffer_eNB[antenna_index],(int)truncated_timestamp); + + if (NRT_flag_UE==1) { + while (truncated_timestamp_final > timestamp_eNB_rx[antenna_index]%samples_per_frame) + nanosleep(&time_req,&time_rem); + } + } + + rxp = (int16_t*)&rx_buffer_eNB[antenna_index][truncated_timestamp]; + txp = (int16_t*)&tx_buffer_UE[antenna_index][truncated_timestamp]; + + for (i=0; i<(nsamps_eNB[antenna_index]); i++) { + rxp[i] =txp[i]>>6; + } + + } + //end_copy_UE : + last_hw_counter=hw_counter; + pthread_mutex_lock(&sync_UE_mutex[antenna_index]); + sync_UE_rx[antenna_index]--; + pthread_mutex_unlock(&sync_UE_mutex[antenna_index]); + + } + } + + } + + return(0); +} + +/*! \fn void *rrh_UE_thread(void *arg) +* \brief this function +* \param[in] +* \param[out] +* \return +* \note +* @ingroup _oai +*/ +void *rrh_UE_thread(void *arg) { + + rrh_module_t *dev=(rrh_module_t *)arg; + + struct sched_param sched_param_UE_rx, sched_param_UE_tx; + int16_t i,cmd; //,nsamps,antenna_index; + ssize_t bytes_received; + struct timespec time_req_1us, time_rem_1us; + pthread_t UE_rx_thread, UE_tx_thread; + pthread_attr_t attr_UE_rx, attr_UE_tx; + int error_code_UE_rx, error_code_UE_tx; + void *tmp; + unsigned int samples_per_frame=0; + + samples_per_frame= dev->eth_dev.openair0_cfg.samples_per_frame; + time_req_1us.tv_sec = 0; + time_req_1us.tv_nsec = 1000; + + while (rrh_exit==0) { + + cmd=dev->eth_dev.trx_start_func(&dev->eth_dev); + + /* allocate memory for TX/RX buffers */ + rx_buffer_UE = (int32_t**)malloc16(dev->eth_dev.openair0_cfg.rx_num_channels*sizeof(int32_t*)); + tx_buffer_UE = (int32_t**)malloc16(dev->eth_dev.openair0_cfg.tx_num_channels*sizeof(int32_t*)); + + for (i=0; ieth_dev.openair0_cfg.rx_num_channels; i++) { + tmp=(void *)malloc(sizeof(int32_t)*(samples_per_frame+4)); + memset(tmp,0,sizeof(int32_t)*(samples_per_frame+4)); + rx_buffer_UE[i]=(tmp+4*sizeof(int32_t)); + } + + for (i=0; ieth_dev.openair0_cfg.tx_num_channels; i++) { + tmp=(void *)malloc(sizeof(int32_t)*(samples_per_frame+4)); + memset(tmp,0,sizeof(int32_t)*(samples_per_frame+4)); + tx_buffer_UE[i]=(tmp+4*sizeof(int32_t)); + } + + printf("Client %s:%d is connected (DL_RB=%d) rt=%d|%d. \n" , dev->eth_dev.openair0_cfg.remote_ip, + dev->eth_dev.openair0_cfg.remote_port, + dev->eth_dev.openair0_cfg.num_rb_dl, + dev->eth_dev.openair0_cfg.rx_num_channels, + dev->eth_dev.openair0_cfg.tx_num_channels); + + if (cmd==START_CMD) { + + pthread_attr_init(&attr_UE_rx); + pthread_attr_init(&attr_UE_tx); + sched_param_UE_rx.sched_priority = sched_get_priority_max(SCHED_FIFO); + sched_param_UE_tx.sched_priority = sched_get_priority_max(SCHED_FIFO); + pthread_attr_setschedparam(&attr_UE_rx,&sched_param_UE_rx); + pthread_attr_setschedparam(&attr_UE_tx,&sched_param_UE_tx); + pthread_attr_setschedpolicy(&attr_UE_rx,SCHED_FIFO); + pthread_attr_setschedpolicy(&attr_UE_tx,SCHED_FIFO); + + error_code_UE_rx = pthread_create(&UE_rx_thread, &attr_UE_rx, rrh_UE_rx_thread, (void *)&dev); + error_code_UE_tx = pthread_create(&UE_tx_thread, &attr_UE_tx, rrh_UE_tx_thread, (void *)&dev); + + if (error_code_UE_rx) { + printf("Error while creating UE RX thread\n"); + exit(-1); + } + + if (error_code_UE_tx) { + printf("Error while creating UE TX thread\n"); + exit(-1); + } + + while (rrh_exit==0) + sleep(1); + } + } + + + rrh_UE_thread_status = 0; + pthread_exit(&rrh_UE_thread_status); + + return(0); +} + + +/*! \fn void *rrh_UE_rx_thread(void *arg) +* \brief this function +* \param[in] +* \param[out] +* \return +* \note +* @ingroup _oai +*/ +void *rrh_UE_rx_thread(void *arg) { + + rrh_module_t *dev = (rrh_module_t *)arg; + struct timespec time0,time1,time2; + struct timespec time_req_1us, time_rem_1us; + ssize_t bytes_sent; + int antenna_index, nsamps; + int trace_cnt=0; + unsigned long long max_rx_time=0, min_rx_time=133333, total_rx_time=0, average_rx_time=133333, s_period=0, trial=0; + unsigned int samples_per_frame=0; + openair0_timestamp temp, last_hw_counter=0; + + antenna_index = 0; + nsamps = dev->eth_dev.openair0_cfg.samples_per_packet; + samples_per_frame = dev->eth_dev.openair0_cfg.samples_per_frame; + + while (rrh_exit == 0) { + if (!UE_rx_started) { + UE_rx_started=1; //Set this flag to 1 to indicate that a UE started retrieving data + + if (RT_flag_UE==1) { + last_hw_counter=hw_counter; + } + } else { + if (RT_flag_UE==1) { + if (hw_counter > last_hw_counter+1) { + printf("L1"); + //goto end_copy_UE; + } else { + while (hw_counter < last_hw_counter+1) + nanosleep(&time_req_1us,&time_rem_1us); + } + } + } + + clock_gettime(CLOCK_MONOTONIC,&time1); + + // send return + + if ((timestamp_UE_rx[antenna_index]%(samples_per_frame)+nsamps) > samples_per_frame) { // Wrap around if nsamps exceeds the buffer limit + if (((timestamp_eNB_tx[antenna_index]%(samples_per_frame)) < ((timestamp_UE_rx[antenna_index]+nsamps)%(samples_per_frame))) && (eNB_tx_started==1)) { + printf("UE underflow wraparound timestamp_UE_rx : %d, timestamp_eNB_tx : %d\n", + (int)(timestamp_UE_rx[antenna_index]%(samples_per_frame)), + (int)(timestamp_eNB_tx[antenna_index]%samples_per_frame)); + + if (NRT_flag_UE==1) { + while ((timestamp_eNB_tx[antenna_index]%samples_per_frame) < ((timestamp_UE_rx[antenna_index]+nsamps)%(samples_per_frame))) + nanosleep(&time_req_1us,&time_rem_1us); + } + } + + rx_ue[antenna_index]=(void*)&rx_buffer_UE[antenna_index][timestamp_UE_rx[antenna_index]%(samples_per_frame)]; + if ((bytes_sent =dev->eth_dev.trx_write_func (dev, + timestamp_UE_rx[antenna_index], + rx_ue, + ( samples_per_frame- (timestamp_eNB_rx[antenna_index]%(samples_per_frame)) ), + antenna_index, + 0))<0) + perror("RRH UE : sendto for RX"); + + rx_ue[antenna_index]=(void*)&rx_buffer_UE[antenna_index][3]; + if ((bytes_sent =dev->eth_dev.trx_write_func (dev, + timestamp_UE_rx[antenna_index], + rx_ue, + (nsamps - samples_per_frame + (timestamp_eNB_rx[antenna_index]%(samples_per_frame))), + antenna_index, + 0))<0) + perror("RRH UE : sendto for RX"); + + } else { + if (((timestamp_UE_rx[antenna_index]%samples_per_frame)< timestamp_eNB_tx[antenna_index]%samples_per_frame) && + (((timestamp_UE_rx[antenna_index]+nsamps)%samples_per_frame) > (timestamp_eNB_tx[antenna_index]%samples_per_frame)) && + (eNB_tx_started==1) ) { + printf("UE underflow timestamp_UE_rx : %d, timestamp_eNB_tx : %d\n", + (int)(timestamp_UE_rx[antenna_index]%samples_per_frame), + (int)(timestamp_eNB_tx[antenna_index]%samples_per_frame)); + + if (NRT_flag_UE==1) { + while (((timestamp_UE_rx[antenna_index]+nsamps)%samples_per_frame) > (timestamp_eNB_tx[antenna_index]%samples_per_frame)) { + nanosleep(&time_req_1us,&time_rem_1us); + } + } + } + + rx_ue[antenna_index]=(void*)&rx_buffer_UE[antenna_index][timestamp_UE_rx[antenna_index]%(samples_per_frame)]; + if ((bytes_sent = dev->eth_dev.trx_write_func (dev, + timestamp_UE_rx[antenna_index], + rx_ue, + nsamps, + antenna_index, + 0))<0) + perror("RRH UE thread: sendto for RX"); + } + + timestamp_UE_rx[antenna_index]+=nsamps; + last_hw_counter=hw_counter; + + clock_gettime(CLOCK_MONOTONIC,&time2); + + if (trace_cnt++ > 10) { + total_rx_time = (unsigned int)(time2.tv_nsec - time0.tv_nsec); + + if (total_rx_time < 0) total_rx_time=1000000000-total_rx_time; + + if ((total_rx_time > 0) && (total_rx_time < 1000000000)) { + trial++; + + if (total_rx_time < min_rx_time) + min_rx_time = total_rx_time; + + if (total_rx_time > max_rx_time) + max_rx_time = total_rx_time; + + average_rx_time = (long long unsigned int)((average_rx_time*trial)+total_rx_time)/(trial+1); + } + + if (s_period++ == PRINTF_PERIOD) { + s_period=0; + printf("Average UE RX time : %lu\tMax RX time : %lu\tMin RX time : %lu\n",average_rx_time,max_rx_time,min_rx_time); + + } + + //printf("RX: t1 %llu (time from last send), t2 %llu (sendto of %lu bytes) total time : %llu\n",(long long unsigned int)(time1.tv_nsec - time0.tv_nsec), (long long unsigned int)(time2.tv_nsec - time1.tv_nsec), + // (nsamps<<2)+sizeof(openair0_timestamp),(long long unsigned int)(time2.tv_nsec - time0.tv_nsec)); + + } + + memcpy(&time0,&time2,sizeof(struct timespec)); + + } //while (UE_exit==0) + + return(0); + +} + + +/*! \fn void *rrh_UE_tx_thread(void *arg) +* \brief this function +* \param[in] +* \param[out] +* \return +* \note +* @ingroup _oai +*/ +void *rrh_UE_tx_thread(void *arg) { + + struct timespec time0a,time0,time1,time2; + struct timespec time_req_1us, time_rem_1us; + + + rrh_module_t *dev = (rrh_module_t *)arg; + ssize_t bytes_received; + int antenna_index, nsamps; + int trace_cnt=0; + unsigned int samples_per_frame=0; + + antenna_index = 0; + nsamps = dev->eth_dev.openair0_cfg.samples_per_packet; + samples_per_frame = dev->eth_dev.openair0_cfg.samples_per_frame; + + + while (rrh_exit == 0) { + + clock_gettime(CLOCK_MONOTONIC,&time0a); + + bytes_received = dev->eth_dev.trx_read_func(dev, + ×tamp_UE_tx[antenna_index], + tx_ue, + nsamps, + antenna_index); + + clock_gettime(CLOCK_MONOTONIC,&time1); + + if (NRT_flag_UE==1) { + nrt_UE_counter[antenna_index]++; + } + printf(" first part size: %d second part size: %d idx=%d \n", + (int32_t)(((samples_per_frame)<<2)-((timestamp_UE_tx[antenna_index]%(samples_per_frame))<<2)), + (nsamps<<2)-((samples_per_frame)<<2)+((timestamp_UE_tx[antenna_index]%(samples_per_frame))<<2), + timestamp_UE_tx[antenna_index]%(samples_per_frame)); + if ((timestamp_UE_tx[antenna_index]%(samples_per_frame)+nsamps) > samples_per_frame) { // Wrap around if nsamps exceeds the buffer limit + memcpy(&tx_buffer_UE[antenna_index][timestamp_UE_tx[antenna_index]%(samples_per_frame)],(void*)(tx_ue[antenna_index]), + (samples_per_frame<<2)-((timestamp_UE_tx[antenna_index]%(samples_per_frame))<<2)); + + memcpy(&tx_buffer_UE[antenna_index][0], (void*)(tx_ue[antenna_index]+(samples_per_frame*4)-((timestamp_UE_tx[antenna_index]%(samples_per_frame))<<2)), + (nsamps<<2)-((samples_per_frame-(timestamp_UE_tx[antenna_index]%(samples_per_frame)))<<2)); + //printf("Received UE TX samples for antenna %d, nsamps %d (%d)\n",antenna_index,nsamps,(int)(bytes_received>>2)); + } else { + memcpy(&tx_buffer_UE[antenna_index][timestamp_UE_tx[antenna_index]%(samples_per_frame)], (void*)(tx_ue[antenna_index]),(nsamps<<2)); + } + + while (sync_UE_rx[antenna_index]==0) + nanosleep(&time_req_1us,&time_rem_1us); + + pthread_mutex_lock(&sync_UE_mutex[antenna_index]); + sync_UE_rx[antenna_index]++; + + if (!sync_UE_rx[antenna_index]) { + counter_UE_tx[antenna_index]=(counter_UE_tx[antenna_index]+nsamps)%samples_per_frame; + nsamps_UE[antenna_index]=nsamps; + } else { + printf("rrh_eNB_proc thread is busy, will exit\n"); + exit(-1); + } + + pthread_mutex_unlock(&sync_UE_mutex[antenna_index]); + + clock_gettime(CLOCK_MONOTONIC,&time2); + + memcpy(&time0,&time2,sizeof(struct timespec)); + + } + + return(0); + +} + + diff --git a/targets/RT/USER/eNB_exmimo2.gtkw b/targets/RT/USER/eNB_exmimo2.gtkw index 4b369e4143..aede1bef19 100644 --- a/targets/RT/USER/eNB_exmimo2.gtkw +++ b/targets/RT/USER/eNB_exmimo2.gtkw @@ -1,38 +1,31 @@ [*] -[*] GTKWave Analyzer v3.3.62 (w)1999-2014 BSI -[*] Thu May 28 09:51:04 2015 +[*] GTKWave Analyzer v3.3.58 (w)1999-2014 BSI +[*] Wed Sep 9 13:46:33 2015 [*] -[dumpfile] "/tmp/openair_dump_eNB.vcd" -[dumpfile_mtime] "Fri May 22 17:35:07 2015" -[dumpfile_size] 352707646 -[savefile] "/home/geyser/openair4G/targets/RT/USER/eNB_exmimo2.gtkw" -[timestart] 48949410000 -[size] 1920 1014 -[pos] -40 -40 -*-21.787668 54509118463 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 +[dumpfile] "/homes/kaltenbe/openair_dump_eNB_exmimo2_sequans.vcd" +[dumpfile_mtime] "Mon Sep 7 15:31:31 2015" +[dumpfile_size] 894802540 +[savefile] "/homes/kaltenbe/Devel/openair/openair4G/trunk/targets/RT/USER/eNB_exmimo2.gtkw" +[timestart] 362571890000 +[size] 1855 1056 +[pos] -176 -45 +*-21.066544 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 [sst_width] 257 [signals_width] 230 [sst_expanded] 1 -[sst_vpaned_height] 241 -@24 -variables.hw_frame[63:0] -variables.hw_subframe[63:0] -@28 -functions.rt_sleep -@22 +[sst_vpaned_height] 262 +@420 variables.daq_mbox[63:0] variables.diff2[63:0] -@25 -variables.missed_slot_enb[63:0] +@28 +functions.rt_sleep @24 -variables.txcnt[63:0] -variables.rxcnt[63:0] +variables.missed_slot_enb[63:0] +variables.hw_subframe[63:0] +variables.hw_frame[63:0] variables.frame_number_TX_eNB[63:0] variables.frame_number_RX_eNB[63:0] @28 -functions.phy_procedures_eNb_tx -functions.phy_procedures_eNb_rx -functions.phy_enb_prach_rx functions.eNB_thread_rx0 functions.eNB_thread_tx0 functions.eNB_thread_rx1 @@ -53,13 +46,17 @@ functions.eNB_thread_rx8 functions.eNB_thread_tx8 functions.eNB_thread_rx9 functions.eNB_thread_tx9 +functions.phy_procedures_eNb_tx +functions.phy_procedures_eNb_rx +functions.phy_enb_prach_rx functions.phy_eNB_dlsch_encoding functions.phy_eNB_dlsch_modulation -functions.phy_enb_pdcch_tx functions.phy_eNB_dlsch_scrambling +functions.phy_enb_pdcch_tx +@29 functions.phy_enb_ulsch_decoding +@28 functions.phy_enb_rs_tx -functions.phy_enb_sfgen functions.rrc_mac_config_req functions.rlc_data_req functions.udp_enb_task diff --git a/targets/RT/USER/eNB_transport_IQ.c b/targets/RT/USER/eNB_transport_IQ.c new file mode 100644 index 0000000000..eaad2ebb24 --- /dev/null +++ b/targets/RT/USER/eNB_transport_IQ.c @@ -0,0 +1,849 @@ +/******************************************************************************* + OpenAirInterface + Copyright(c) 1999 - 2014 Eurecom + + OpenAirInterface is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + + OpenAirInterface is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with OpenAirInterface.The full GNU General Public License is + included in this distribution in the file called "COPYING". If not, + see . + + Contact Information + OpenAirInterface Admin: openair_admin@eurecom.fr + OpenAirInterface Tech : openair_tech@eurecom.fr + OpenAirInterface Dev : openair4g-devel@eurecom.fr + + Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE + + *******************************************************************************/ + +/*! \file eNB_transport_IQ.c + * \brief eNB transport IQ samples + * \author Katerina Trilyraki, Navid Nikaein, Raymond Knopp + * \date 2015 + * \version 0.1 + * \company Eurecom + * \maintainer: navid.nikaein@eurecom.fr + * \note + * \warning very experimental + */ +#include +#include +#include +#include +#include +#include +#include + +#include "common_lib.h" +#include "PHY/defs.h" +#include "rrh_gw.h" +#include "rrh_gw_externs.h" +#include "rt_wrapper.h" + +#define PRINTF_PERIOD 3750 +#define HEADER_SIZE ((sizeof(int32_t) + sizeof(openair0_timestamp))>>2) + +pthread_cond_t sync_eNB_cond[4]; +pthread_mutex_t sync_eNB_mutex[4]; +pthread_mutex_t sync_trx_mutex=PTHREAD_MUTEX_INITIALIZER; +pthread_cond_t sync_trx_cond=PTHREAD_COND_INITIALIZER; + +openair0_timestamp nrt_eNB_counter[4]= {0,0,0,0}; +int32_t overflow_rx_buffer_eNB[4]= {0,0,0,0}; +int32_t nsamps_eNB[4]= {0,0,0,0}; +int32_t eNB_tx_started=0,eNB_rx_started=0; +int32_t counter_eNB_rx[4]= {0,0,0,0}; +int32_t counter_eNB_tx[4]= {0,0,0,0}; +uint8_t RT_flag_eNB,NRT_flag_eNB; +void *rrh_eNB_thread_status; +int sync_eNB_rx[4]= {-1,-1,-1,-1}; +unsigned int sync_trx=0; + +int32_t **tx_buffer_eNB; +int32_t **rx_buffer_eNB; +void **rx_eNB; //was fixed to 2 ant +void **tx_eNB; //was fixed to 2 ant + +openair0_timestamp timestamp_eNB_tx[4]= {0,0,0,0};// all antennas must have the same ts +openair0_timestamp timestamp_eNB_rx[4]= {0,0,0,0}; +openair0_timestamp timestamp_rx=0,timestamp_tx=0; + +unsigned int rx_pos=0, next_rx_pos=0; +unsigned int tx_pos=0, tx_pos_rf=0, prev_tx_pos=0; +unsigned int rt_period=0; + +struct itimerspec timerspec; +pthread_mutex_t timer_mutex; + + + +/*! \fn void *rrh_eNB_rx_thread(void *arg) + * \brief this function + * \param[in] + * \return none + * \note + * @ingroup _oai + */ +void *rrh_eNB_rx_thread(void *); +/*! \fn void *rrh_eNB_tx_thread(void *arg) + * \brief this function + * \param[in] + * \return none + * \note + * @ingroup _oai + */ +void *rrh_eNB_tx_thread(void *); +/*! \fn void *rrh_eNB_thread(void *arg) + * \brief this function + * \param[in] + * \return none + * \note + * @ingroup _oai + */ +void *rrh_eNB_thread(void *); +/*! \fn void check_dev_config( rrh_module_t *mod_enb) + * \brief this function + * \param[in] *mod_enb + * \return none + * \note + * @ingroup _oai + */ +static void check_dev_config( rrh_module_t *mod_enb); +/*! \fn void calc_rt_period_ns( openair0_config_t openair0_cfg) + * \brief this function + * \param[in] openair0_cfg + * \return none + * \note + * @ingroup _oai + */ +static void calc_rt_period_ns( openair0_config_t openair0_cfg); + + + +void config_BBU_mod( rrh_module_t *mod_enb, uint8_t RT_flag, uint8_t NRT_flag) { + + int error_code_eNB; + pthread_t main_rrh_eNB_thread; + pthread_attr_t attr; + struct sched_param sched_param_rrh; + + RT_flag_eNB=RT_flag; + NRT_flag_eNB=NRT_flag; + + /* handshake with client to exchange parameters */ + mod_enb->eth_dev.trx_start_func(&mod_enb->eth_dev);//change port make it plus_id + + /* if a RF iterface is added to RRH module get the configuration parameters sent from eNB */ + if (mod_enb->devs->type != NONE_IF ) { + + memcpy((void*)&mod_enb->devs->openair0_cfg,(void *)&mod_enb->eth_dev.openair0_cfg,sizeof(openair0_config_t)); + + /* certain parameters have to be updated (calibration related)*/ + if ( mod_enb->devs->type == EXMIMO_IF ) { + if ( mod_enb->devs->openair0_cfg.num_rb_dl == 100 ) { + mod_enb->devs->openair0_cfg.samples_per_packet = 2048; + mod_enb->devs->openair0_cfg.tx_forward_nsamps = 175; + mod_enb->devs->openair0_cfg.tx_delay = 8; + } + else if ( mod_enb->devs->openair0_cfg.num_rb_dl == 50 ) { + mod_enb->devs->openair0_cfg.samples_per_packet = 2048; + mod_enb->devs->openair0_cfg.tx_forward_nsamps = 95; + mod_enb->devs->openair0_cfg.tx_delay = 5; + } + else if ( mod_enb->devs->openair0_cfg.num_rb_dl == 25 ) { + mod_enb->devs->openair0_cfg.samples_per_packet = 1024; + mod_enb->devs->openair0_cfg.tx_forward_nsamps = 70; + mod_enb->devs->openair0_cfg.tx_delay = 6; + } + else if ( mod_enb->devs->openair0_cfg.num_rb_dl == 6 ) { + mod_enb->devs->openair0_cfg.samples_per_packet = 256; + mod_enb->devs->openair0_cfg.tx_forward_nsamps = 40; + mod_enb->devs->openair0_cfg.tx_delay = 8; + } + } + else if (mod_enb->devs->type == USRP_IF) { + if ( mod_enb->devs->openair0_cfg.num_rb_dl == 100 ) { + mod_enb->devs->openair0_cfg.samples_per_packet = 2048; + mod_enb->devs->openair0_cfg.tx_forward_nsamps = 175; + mod_enb->devs->openair0_cfg.tx_delay = 8; + } + else if ( mod_enb->devs->openair0_cfg.num_rb_dl == 50 ) { + mod_enb->devs->openair0_cfg.samples_per_packet = 2048; + mod_enb->devs->openair0_cfg.tx_forward_nsamps = 95; + mod_enb->devs->openair0_cfg.tx_delay = 5; + } + else if ( mod_enb->devs->openair0_cfg.num_rb_dl == 25 ) { + mod_enb->devs->openair0_cfg.samples_per_packet = 1024; + mod_enb->devs->openair0_cfg.tx_forward_nsamps = 70; + mod_enb->devs->openair0_cfg.tx_delay = 6; + } + else if ( mod_enb->devs->openair0_cfg.num_rb_dl == 6 ) { + mod_enb->devs->openair0_cfg.samples_per_packet = 256; + mod_enb->devs->openair0_cfg.tx_forward_nsamps = 40; + mod_enb->devs->openair0_cfg.tx_delay = 8; + } + } + else if(mod_enb->devs->type == BLADERF_IF) { + if ( mod_enb->devs->openair0_cfg.num_rb_dl == 100 ) { + mod_enb->devs->openair0_cfg.samples_per_packet = 2048; + mod_enb->devs->openair0_cfg.tx_forward_nsamps = 175; + mod_enb->devs->openair0_cfg.tx_delay = 8; + } + else if ( mod_enb->devs->openair0_cfg.num_rb_dl == 50 ) { + mod_enb->devs->openair0_cfg.samples_per_packet = 2048; + mod_enb->devs->openair0_cfg.tx_forward_nsamps = 95; + mod_enb->devs->openair0_cfg.tx_delay = 5; + } + else if ( mod_enb->devs->openair0_cfg.num_rb_dl == 25 ) { + mod_enb->devs->openair0_cfg.samples_per_packet = 1024; + mod_enb->devs->openair0_cfg.tx_forward_nsamps = 70; + mod_enb->devs->openair0_cfg.tx_delay = 6; + } + else if ( mod_enb->devs->openair0_cfg.num_rb_dl == 6 ) { + mod_enb->devs->openair0_cfg.samples_per_packet = 256; + mod_enb->devs->openair0_cfg.tx_forward_nsamps = 40; + mod_enb->devs->openair0_cfg.tx_delay = 8; + } + } + + /* check sanity of configuration parameters and print */ + check_dev_config(mod_enb); + + /* initialize and configure the RF device */ + if (openair0_device_init(mod_enb->devs, &mod_enb->devs->openair0_cfg)<0){ + LOG_E(RRH,"Exiting, cannot initialize RF device.\n"); + exit(-1); + } + else { + LOG_I(RRH,"RF device has been successfully initialized.\n"); + } + + /* start RF device */ + if (mod_enb->devs->type == EXMIMO_IF ) { + + } else { + if (mod_enb->devs->trx_start_func(mod_enb->devs)!=0) + LOG_E(RRH,"Unable to initiate RF device.\n"); + } + LOG_I(RRH,"RF device has been initiated.\n"); + } + + /* create main eNB module thread + main_rrh_eNB_thread allocates memory + for TX/RX buffers and creates TX/RX + threads for every eNB module */ + pthread_attr_init(&attr); + sched_param_rrh.sched_priority = sched_get_priority_max(SCHED_FIFO); + pthread_attr_setschedparam(&attr,&sched_param_rrh); + pthread_attr_setschedpolicy(&attr,SCHED_FIFO); + error_code_eNB = pthread_create(&main_rrh_eNB_thread, &attr, rrh_eNB_thread, (void *)mod_enb); + + if (error_code_eNB) { + LOG_E(RRH,"Error while creating eNB thread\n"); + exit(-1); + } + +} + + +void *rrh_eNB_thread(void *arg) { + + rrh_module_t *dev=(rrh_module_t *)arg; + pthread_t eNB_rx_thread, eNB_tx_thread; + int error_code_eNB_rx, error_code_eNB_tx; + int32_t i,j; + void *tmp; + unsigned int samples_per_frame=0; + + samples_per_frame = dev->eth_dev.openair0_cfg.samples_per_frame; + + while (rrh_exit==0) { + + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_eNB_TRX, 1 ); + + /* calculate packet period */ + calc_rt_period_ns(dev->eth_dev.openair0_cfg); + + /* allocate memory for TX/RX buffers + each antenna port has a TX and a RX buffer + each TX and RX buffer is of (samples_per_frame + HEADER_SIZE) samples (size of samples is 4 bytes) */ + rx_buffer_eNB = (int32_t**)malloc16(dev->eth_dev.openair0_cfg.rx_num_channels*sizeof(int32_t*)); + tx_buffer_eNB = (int32_t**)malloc16(dev->eth_dev.openair0_cfg.tx_num_channels*sizeof(int32_t*)); + LOG_D(RRH,"rx_buffer_eNB address =%p tx_buffer_eNB address =%p \n",rx_buffer_eNB,tx_buffer_eNB); + + /* rx_buffer_eNB points to the beginning of data */ + for (i=0; ieth_dev.openair0_cfg.rx_num_channels; i++) { + tmp=(void *)malloc16(sizeof(int32_t)*(samples_per_frame + 32)); + memset(tmp,0,sizeof(int32_t)*(samples_per_frame + 32)); + rx_buffer_eNB[i]=( tmp + (32*sizeof(int32_t)) ); + LOG_D(RRH,"i=%d rx_buffer_eNB[i]=%p tmp= %p\n",i,rx_buffer_eNB[i],tmp); + } + /* tx_buffer_eNB points to the beginning of data */ + for (i=0; ieth_dev.openair0_cfg.tx_num_channels; i++) { + tmp=(void *)malloc16(sizeof(int32_t)*(samples_per_frame + 32)); + memset(tmp,0,sizeof(int32_t)*(samples_per_frame + 32)); + tx_buffer_eNB[i]=( tmp + (32*sizeof(int32_t)) ); + LOG_D(RRH,"i= %d tx_buffer_eNB[i]=%p tmp= %p \n",i,tx_buffer_eNB[i],tmp); + } + /* dummy initialization for TX/RX buffers */ + for (i=0; ieth_dev.openair0_cfg.rx_num_channels; i++) { + for (j=0; jeth_dev.openair0_cfg.tx_num_channels; i++) { + for (j=0; jeth_dev.openair0_cfg.rx_num_channels*sizeof(int32_t*)); + tx_eNB = (void**)malloc16(dev->eth_dev.openair0_cfg.tx_num_channels*sizeof(int32_t*)); + + /* init mutexes */ + for (i=0; ieth_dev.openair0_cfg.tx_num_channels; i++) { + pthread_mutex_init(&sync_eNB_mutex[i],NULL); + pthread_cond_init(&sync_eNB_cond[i],NULL); + } + /* init mutexes */ + pthread_mutex_init(&sync_trx_mutex,NULL); + + /* create eNB module's TX/RX threads */ +#ifdef LOWLATENCY + error_code_eNB_rx = pthread_create(&eNB_rx_thread, NULL, rrh_eNB_rx_thread, (void *)dev); + error_code_eNB_tx = pthread_create(&eNB_tx_thread, NULL, rrh_eNB_tx_thread, (void *)dev); + LOG_I(RRH,"[eNB][SCHED] deadline scheduling applied to eNB TX/RX threads\n"); +#else + pthread_attr_t attr_eNB_rx, attr_eNB_tx; + struct sched_param sched_param_eNB_rx, sched_param_eNB_tx; + + pthread_attr_init(&attr_eNB_rx); + pthread_attr_init(&attr_eNB_tx); + sched_param_eNB_rx.sched_priority = sched_get_priority_max(SCHED_FIFO); + sched_param_eNB_tx.sched_priority = sched_get_priority_max(SCHED_FIFO); + pthread_attr_setschedparam(&attr_eNB_rx,&sched_param_eNB_rx); + pthread_attr_setschedparam(&attr_eNB_tx,&sched_param_eNB_tx); + pthread_attr_setschedpolicy(&attr_eNB_rx,SCHED_FIFO); + pthread_attr_setschedpolicy(&attr_eNB_tx,SCHED_FIFO); + + error_code_eNB_rx = pthread_create(&eNB_rx_thread, &attr_eNB_rx, rrh_eNB_rx_thread, (void *)dev); + error_code_eNB_tx = pthread_create(&eNB_tx_thread, &attr_eNB_tx, rrh_eNB_tx_thread, (void *)dev); + LOG_I(RRH,"[eNB][SCHED] FIFO scheduling applied to eNB TX/RX threads\n"); +#endif + + if (error_code_eNB_rx) { + LOG_E(RRH,"[eNB] Error while creating eNB RX thread\n"); + exit(-1); + } + if (error_code_eNB_tx) { + LOG_E(RRH,"[eNB] Error while creating eNB TX thread\n"); + exit(-1); + } + + /* create timer thread; when no RF device is present a software clock is generated */ + if (dev->devs->type == NONE_IF) { + + int error_code_timer; + pthread_t main_timer_proc_thread; + + LOG_I(RRH,"Creating timer thread with rt period %d ns.\n",rt_period); + + /* setup the timer to generate an interrupt: + -for the first time in (sample_per_packet/sample_rate) ns + -and then every (sample_per_packet/sample_rate) ns */ + timerspec.it_value.tv_sec = rt_period/1000000000; + timerspec.it_value.tv_nsec = rt_period%1000000000; + timerspec.it_interval.tv_sec = rt_period/1000000000; + timerspec.it_interval.tv_nsec = rt_period%1000000000; + + +#ifdef LOWLATENCY + error_code_timer = pthread_create(&main_timer_proc_thread, NULL, timer_proc, (void *)&timerspec); + LOG_I(RRH,"[eNB][SCHED] deadline scheduling applied to timer thread \n"); +#else + pthread_attr_t attr_timer; + struct sched_param sched_param_timer; + + pthread_attr_init(&attr_timer); + sched_param_timer.sched_priority = sched_get_priority_max(SCHED_FIFO-1); + pthread_attr_setschedparam(&attr_timer,&sched_param_timer); + pthread_attr_setschedpolicy(&attr_timer,SCHED_FIFO-1); + + pthread_mutex_init(&timer_mutex,NULL); + + error_code_timer = pthread_create(&main_timer_proc_thread, &attr_timer, timer_proc, (void *)&timerspec); + LOG_I(RRH,"[eNB][SCHED] FIFO scheduling applied to timer thread \n"); +#endif + + if (error_code_timer) { + LOG_E(RRH,"Error while creating timer proc thread\n"); + exit(-1); + } + + } + + while (rrh_exit==0) + sleep(1); + + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_eNB_TRX,0 ); + } + + rrh_eNB_thread_status = 0; + pthread_exit(&rrh_eNB_thread_status); + return(0); +} + + +void *rrh_eNB_rx_thread(void *arg) { + + /* measuremnt related vars */ + struct timespec time0,time1,time2; + unsigned long long max_rx_time=0, min_rx_time=rt_period, total_rx_time=0, average_rx_time=rt_period, s_period=0, trial=0; + int trace_cnt=0; + + struct timespec time_req_1us, time_rem_1us; + rrh_module_t *dev = (rrh_module_t *)arg; + ssize_t bytes_sent; + int i=0 ,pck_rx=0, s_cnt=0; + openair0_timestamp last_hw_counter=0; //volatile int64_t + unsigned int samples_per_frame=0,samples_per_subframe=0, spp_rf=0, spp_eth=0; + uint8_t loopback=0,measurements=0; + unsigned int subframe=0; + unsigned int frame=0; + + time_req_1us.tv_sec = 0; + time_req_1us.tv_nsec =1000; //time_req_1us.tv_nsec = (int)rt_period/2;--->granularity issue + spp_eth = dev->eth_dev.openair0_cfg.samples_per_packet; + spp_rf = dev->devs->openair0_cfg.samples_per_packet; + + samples_per_frame = dev->eth_dev.openair0_cfg.samples_per_frame; + samples_per_subframe = (unsigned int)samples_per_frame/10; + loopback = dev->loopback; + measurements = dev->measurements; + next_rx_pos = spp_eth; + +#ifdef LOWLATENCY + struct sched_attr attr; + unsigned int flags = 0; + + attr.size = sizeof(attr); + attr.sched_flags = 0; + attr.sched_nice = 0; + attr.sched_priority = 0; + + attr.sched_policy = SCHED_DEADLINE; + attr.sched_runtime = (0.8 * 100) * 10000;//4 * 10000; + attr.sched_deadline = (0.9 * 100) * 10000;//rt_period-2000; + attr.sched_period = 1 * 1000000;//rt_period; + + if (sched_setattr(0, &attr, flags) < 0 ) { + perror("[SCHED] eNB RX thread: sched_setattr failed (run with sudo)\n"); + exit(-1); + } +#endif + + while (rrh_exit == 0) { + while (rx_pos <(1 + subframe)*samples_per_subframe) { + LOG_D(RRH,"starting a new send:%d %d\n",sync_trx,frame); + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_eNB_RX, 1 ); + VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_HW_FRAME_RX, frame); + VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_HW_SUBFRAME_RX, subframe ); + VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_RX_PCK, pck_rx ); + LOG_D(RRH,"pack=%d rx_pos=%d subframe=%d frame=%d\n ",pck_rx, rx_pos, subframe,frame); + + if (dev->devs->type == NONE_IF) { + VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_RX_HWCNT, hw_counter ); + VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_RX_LHWCNT, last_hw_counter ); + VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_CNT, s_cnt ); + if (!eNB_rx_started) { + eNB_rx_started=1; // set this flag to 1 to indicate that eNB started + if (RT_flag_eNB==1) { + last_hw_counter=hw_counter;//get current counter + } + } else { + if (RT_flag_eNB==1) { + if (hw_counter > last_hw_counter+1) { + printf("LR"); + } else { + while ((hw_counter < last_hw_counter+1)) { + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_eNB_RX_SLEEP, 1 ); + nanosleep(&time_req_1us,&time_rem_1us); //rt_sleep_ns(sleep_ns); + s_cnt++; + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_eNB_RX_SLEEP, 0 ); + } + } + } + } + } + + + if (measurements == 1 ) clock_gettime(CLOCK_MONOTONIC,&time1); + + if (loopback == 1 ) { + if (sync_eNB_rx[i]==0) { + rx_eNB[i] = (void*)&tx_buffer_eNB[i][tx_pos]; + LOG_I(RRH,"tx_buffer_eNB[i][tx_pos]=%d ,tx_pos=%d\n",tx_buffer_eNB[i][tx_pos],tx_pos); + } else { + rx_eNB[i] = (void*)&rx_buffer_eNB[i][rx_pos]; + LOG_I(RRH,"rx_buffer_eNB[i][rx_pos]=%d ,rx_pos=%d\n",rx_buffer_eNB[i][rx_pos],rx_pos); + } + } + + for (i=0; ieth_dev.openair0_cfg.rx_num_channels; i++) { + rx_eNB[i] = (void*)&rx_buffer_eNB[i][rx_pos]; + LOG_D(RRH," rx_eNB[i]=%p rx_buffer_eNB[i][rx_pos]=%p ,rx_pos=%d, i=%d ts=%d\n",rx_eNB[i],&rx_buffer_eNB[i][rx_pos],rx_pos,i,timestamp_rx); + } + VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_RXCNT, rx_pos ); + if (dev->devs->type != NONE_IF) { + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_READ_RF, 1 ); + /* Read operation to RF device (RX)*/ + if ( dev->devs->trx_read_func (dev->devs, + ×tamp_rx, + rx_eNB, + spp_rf, + dev->devs->openair0_cfg.rx_num_channels + )<0) { + perror("RRH eNB : USRP read"); + } + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_READ_RF, 0 ); + } + VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_RX_TS, timestamp_rx&0xffffffff ); + + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_WRITE, 1 ); + if ((bytes_sent = dev->eth_dev.trx_write_func (&dev->eth_dev, + timestamp_rx, + rx_eNB, + spp_eth, + dev->eth_dev.openair0_cfg.rx_num_channels, + 0))<0) { + perror("RRH eNB : ETHERNET write"); + } + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_WRITE, 0 ); + + /* when there is no RF timestamp is updated by number of samples */ + if (dev->devs->type == NONE_IF) { + timestamp_rx+=spp_eth; + last_hw_counter=hw_counter; + } + + if (measurements == 1 ) { + + clock_gettime(CLOCK_MONOTONIC,&time2); + + if (trace_cnt++ > 10) { + total_rx_time = (unsigned int)(time2.tv_nsec - time0.tv_nsec); + if (total_rx_time < 0) + total_rx_time=1000000000-total_rx_time; + + if ((total_rx_time > 0) && (total_rx_time < 1000000000)) { + trial++; + if (total_rx_time < min_rx_time) + min_rx_time = total_rx_time; + if (total_rx_time > max_rx_time){ + max_rx_time = total_rx_time; + LOG_I(RRH,"Max value %d update at rx_position %d \n",total_rx_time,timestamp_rx); + } + average_rx_time = (long long unsigned int)((average_rx_time*trial)+total_rx_time)/(trial+1); + } + if (s_period++ == PRINTF_PERIOD) { + s_period=0; + LOG_I(RRH,"Average eNB RX time : %lu\tMax RX time : %lu\tMin RX time : %lu\n",average_rx_time,max_rx_time,min_rx_time); + } + } + + memcpy(&time0,&time2,sizeof(struct timespec)); + } + + if (loopback == 1 ) { + pthread_mutex_lock(&sync_eNB_mutex[i]); + sync_eNB_rx[i]--; + pthread_mutex_unlock(&sync_eNB_mutex[i]); + } + + rx_pos += spp_eth; + pck_rx++; + next_rx_pos=(rx_pos+spp_eth); + + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_eNB_RX, 0 ); + /**/ + if (frame>50) { + pthread_mutex_lock(&sync_trx_mutex); + while (sync_trx) { + pthread_cond_wait(&sync_trx_cond,&sync_trx_mutex); + } + sync_trx=1; + LOG_D(RRH,"out of while send:%d %d\n",sync_trx,frame); + pthread_cond_signal(&sync_trx_cond); + pthread_mutex_unlock(&sync_trx_mutex); + } + } // while + + subframe++; + s_cnt=0; + + /* wrap around rx buffer index */ + if (next_rx_pos >= samples_per_frame) + next_rx_pos -= samples_per_frame; + if (rx_pos >= samples_per_frame) + rx_pos -= samples_per_frame; + /* wrap around subframe number */ + if (subframe == 10 ) { + subframe = 0; + frame++; + } + + + } //while (eNB_exit==0) + return 0; +} + + +void *rrh_eNB_tx_thread(void *arg) { + + struct timespec time0a,time0,time1,time2; + + rrh_module_t *dev = (rrh_module_t *)arg; + struct timespec time_req_1us, time_rem_1us; + ssize_t bytes_received; + int i; + openair0_timestamp last_hw_counter=0; + unsigned int samples_per_frame=0,samples_per_subframe=0; + unsigned int spp_rf=0, spp_eth=0; + uint8_t loopback=0,measurements=0; + unsigned int subframe=0,frame=0; + unsigned int pck_tx=0; + +#ifdef LOWLATENCY + struct sched_attr attr; + unsigned int flags = 0; + + attr.size = sizeof(attr); + attr.sched_flags = 0; + attr.sched_nice = 0; + attr.sched_priority = 0; + + attr.sched_policy = SCHED_DEADLINE; + attr.sched_runtime = (0.8 * 100) * 10000; + attr.sched_deadline = (0.9 * 100) * 10000; + attr.sched_period = 1 * 1000000; + + if (sched_setattr(0, &attr, flags) < 0 ) { + perror("[SCHED] eNB TX thread: sched_setattr failed\n"); + exit(-1); + } +#endif + + time_req_1us.tv_sec = 1; + time_req_1us.tv_nsec = 0; + spp_eth = dev->eth_dev.openair0_cfg.samples_per_packet; + spp_rf = dev->devs->openair0_cfg.samples_per_packet; + samples_per_frame = dev->eth_dev.openair0_cfg.samples_per_frame; + samples_per_subframe = (unsigned int)samples_per_frame/10; + tx_pos=0; + //tx_pos_rf=spp_rf*dev->devs->openair0_cfg.tx_delay; + + loopback = dev->loopback; + measurements = dev->measurements; + + while (rrh_exit == 0) { + while (tx_pos < (1 + subframe)*samples_per_subframe) { + + LOG_D(RRH,"bef lock read:%d %d\n",sync_trx,frame); + pthread_mutex_lock(&sync_trx_mutex); + + while (!sync_trx) { + LOG_D(RRH,"in sync read:%d %d\n",sync_trx,frame); + pthread_cond_wait(&sync_trx_cond,&sync_trx_mutex); + } + LOG_D(RRH,"out of while read:%d %d\n",sync_trx,frame); + + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_eNB_TX, 1 ); + VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_HW_FRAME, frame); + VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_HW_SUBFRAME, subframe ); + VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_TX_PCK, pck_tx ); + + /* + if (dev->devs->type == NONE_IF) { + VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_TX_HWCNT, hw_counter ); + VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_TX_LHWCNT, last_hw_counter ); + + if (!eNB_tx_started) { + eNB_tx_started=1; // set this flag to 1 to indicate that eNB started + if (RT_flag_eNB==1) { + last_hw_counter=hw_counter; + } + } else { + if (RT_flag_eNB==1) { + if (hw_counter > last_hw_counter+1) { + printf("LT"); + } else { + while ((hw_counter < last_hw_counter+1)) { + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_eNB_TX_SLEEP, 1 ); + nanosleep(&time_req_1us,&time_rem_1us); + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_eNB_TX_SLEEP, 0 ); + } + } + } + } + } */ + + if (measurements == 1 ) clock_gettime(CLOCK_MONOTONIC,&time1); + for (i=0; ieth_dev.openair0_cfg.tx_num_channels; i++) tx_eNB[i] = (void*)&tx_buffer_eNB[i][tx_pos]; //RF!!!!! + + VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_TXCNT, tx_pos ); + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_READ, 1 ); + + /* Read operation to ETHERNET device */ + if (( bytes_received = dev->eth_dev.trx_read_func(&dev->eth_dev, + ×tamp_tx, + tx_eNB, + spp_eth, + dev->eth_dev.openair0_cfg.tx_num_channels))<0) { + perror("RRH eNB : ETHERNET read"); + } + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_READ, 0 ); + + if (dev->devs->type != NONE_IF) { + LOG_D(RRH," tx_buffer_eNB[i][tx_pos]=%x t_buffer_eNB[i][tx_pos+1]=%x t_buffer_eNB[i][tx_pos+2]=%x \n",tx_buffer_eNB[0][tx_pos],tx_buffer_eNB[0][tx_pos+1],tx_buffer_eNB[0][tx_pos+2]); + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_WRITE_RF, 1 ); + /* Write operation to RF device (TX)*/ + if ( dev->devs->trx_write_func (dev->devs, + timestamp_tx, + tx_eNB, + spp_rf, + dev->devs->openair0_cfg.tx_num_channels, + 0)<0){ + perror("RRH eNB : USRP write"); + } + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_WRITE_RF, 0 ); + } + + VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_TX_TS, timestamp_tx&0xffffffff ); + + + if (dev->devs->type == NONE_IF) last_hw_counter=hw_counter; + + + if (loopback ==1 ) { + while (sync_eNB_rx[i]==0) + nanosleep(&time_req_1us,&time_rem_1us); + + pthread_mutex_lock(&sync_eNB_mutex[i]); + sync_eNB_rx[i]++; + pthread_mutex_unlock(&sync_eNB_mutex[i]); + } + + if (measurements == 1 ) { + clock_gettime(CLOCK_MONOTONIC,&time2); + memcpy(&time0,&time2,sizeof(struct timespec)); + } + + prev_tx_pos=tx_pos; + tx_pos += spp_eth; + pck_tx++; + + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_eNB_TX, 0 ); + sync_trx=0; + pthread_cond_signal(&sync_trx_cond); + pthread_mutex_unlock(&sync_trx_mutex); + } + + /* wrap around tx buffer index */ + if (tx_pos >= samples_per_frame) + tx_pos -= samples_per_frame; + /* wrap around subframe number */ + subframe++; + if (subframe == 10 ) { + subframe = 0; // the radio frame is complete, start over + frame++; + } + + } //while (eNB_exit==0) + return 0; +} + + +static void calc_rt_period_ns( openair0_config_t openair0_cfg) { + + rt_period= (double)(openair0_cfg.samples_per_packet/(openair0_cfg.samples_per_frame/10.0)*1000000); + AssertFatal(rt_period > 0, "Invalid rt period !%u\n", rt_period); + LOG_I(RRH,"[eNB] Real time period is set to %u ns\n", rt_period); +} + + +static void check_dev_config( rrh_module_t *mod_enb) { + + + AssertFatal( (mod_enb->devs->openair0_cfg.num_rb_dl==100 || mod_enb->devs->openair0_cfg.num_rb_dl==50 || mod_enb->devs->openair0_cfg.num_rb_dl==25 || mod_enb->devs->openair0_cfg.num_rb_dl==6) , "Invalid number of resource blocks! %d\n", mod_enb->devs->openair0_cfg.num_rb_dl); + AssertFatal( mod_enb->devs->openair0_cfg.samples_per_frame > 0 , "Invalid number of samples per frame! %d\n",mod_enb->devs->openair0_cfg.samples_per_frame); + AssertFatal( mod_enb->devs->openair0_cfg.sample_rate > 0.0, "Invalid sample rate! %f\n", mod_enb->devs->openair0_cfg.sample_rate); + AssertFatal( mod_enb->devs->openair0_cfg.samples_per_packet > 0 , "Invalid number of samples per packet! %d\n",mod_enb->devs->openair0_cfg.samples_per_packet); + AssertFatal( mod_enb->devs->openair0_cfg.rx_num_channels > 0 , "Invalid number of RX antennas! %d\n", mod_enb->devs->openair0_cfg.rx_num_channels); + AssertFatal( mod_enb->devs->openair0_cfg.tx_num_channels > 0 , "Invalid number of TX antennas! %d\n", mod_enb->devs->openair0_cfg.tx_num_channels); + AssertFatal( mod_enb->devs->openair0_cfg.rx_freq[0] > 0.0 ,"Invalid RX frequency! %f\n", mod_enb->devs->openair0_cfg.rx_freq[0]); + AssertFatal( mod_enb->devs->openair0_cfg.tx_freq[0] > 0.0 ,"Invalid TX frequency! %f\n", mod_enb->devs->openair0_cfg.tx_freq[0]); + AssertFatal( mod_enb->devs->openair0_cfg.rx_gain[0] > 0.0 ,"Invalid RX gain! %f\n", mod_enb->devs->openair0_cfg.rx_gain[0]); + AssertFatal( mod_enb->devs->openair0_cfg.tx_gain[0] > 0.0 ,"Invalid TX gain! %f\n", mod_enb->devs->openair0_cfg.tx_gain[0]); + AssertFatal( mod_enb->devs->openair0_cfg.rx_bw > 0.0 ,"Invalid RX bw! %f\n", mod_enb->devs->openair0_cfg.rx_bw); + AssertFatal( mod_enb->devs->openair0_cfg.tx_bw > 0.0 ,"Invalid RX bw! %f\n", mod_enb->devs->openair0_cfg.tx_bw); + AssertFatal( mod_enb->devs->openair0_cfg.autocal[0] > 0 , "Invalid auto calibration choice! %d\n", mod_enb->devs->openair0_cfg.autocal[0]); + + printf("\n---------------------RF device configuration parameters---------------------\n"); + + printf("\tMod_id=%d\n \tlog level=%d\n \tDL_RB=%d\n \tsamples_per_frame=%d\n \tsample_rate=%f\n \tsamples_per_packet=%d\n \ttx_delay=%d\n \ttx_forward_nsamps=%d\n \trx_num_channels=%d\n \ttx_num_channels=%d\n \trx_freq_0=%f\n \ttx_freq_0=%f\n \trx_freq_1=%f\n \ttx_freq_1=%f\n \trx_freq_2=%f\n \ttx_freq_2=%f\n \trx_freq_3=%f\n \ttx_freq_3=%f\n \trxg_mode=%d\n \trx_gain_0=%f\n \ttx_gain_0=%f\n \trx_gain_1=%f\n \ttx_gain_1=%f\n \trx_gain_2=%f\n \ttx_gain_2=%f\n \trx_gain_3=%f\n \ttx_gain_3=%f\n \trx_gain_offset_2=%f\n \ttx_gain_offset_3=%f\n \trx_bw=%f\n \ttx_bw=%f\n \tautocal=%d\n \trem_addr %s:%d\n \tmy_addr %s:%d\n", + mod_enb->devs->openair0_cfg.Mod_id, + mod_enb->devs->openair0_cfg.log_level, + mod_enb->devs->openair0_cfg.num_rb_dl, + mod_enb->devs->openair0_cfg.samples_per_frame, + mod_enb->devs->openair0_cfg.sample_rate, + mod_enb->devs->openair0_cfg.samples_per_packet, + mod_enb->devs->openair0_cfg.tx_delay, + mod_enb->devs->openair0_cfg.tx_forward_nsamps, + mod_enb->devs->openair0_cfg.rx_num_channels, + mod_enb->devs->openair0_cfg.tx_num_channels, + mod_enb->devs->openair0_cfg.rx_freq[0], + mod_enb->devs->openair0_cfg.tx_freq[0], + mod_enb->devs->openair0_cfg.rx_freq[1], + mod_enb->devs->openair0_cfg.tx_freq[1], + mod_enb->devs->openair0_cfg.rx_freq[2], + mod_enb->devs->openair0_cfg.tx_freq[2], + mod_enb->devs->openair0_cfg.rx_freq[3], + mod_enb->devs->openair0_cfg.tx_freq[3], + mod_enb->devs->openair0_cfg.rxg_mode[0], + mod_enb->devs->openair0_cfg.rx_gain[0], + mod_enb->devs->openair0_cfg.tx_gain[0], + mod_enb->devs->openair0_cfg.rx_gain[1], + mod_enb->devs->openair0_cfg.tx_gain[1], + mod_enb->devs->openair0_cfg.rx_gain[2], + mod_enb->devs->openair0_cfg.tx_gain[2], + mod_enb->devs->openair0_cfg.rx_gain[3], + mod_enb->devs->openair0_cfg.tx_gain[3], + //mod_enb->devs->openair0_cfg.rx_gain_offset[0], + //mod_enb->devs->openair0_cfg.rx_gain_offset[1], + mod_enb->devs->openair0_cfg.rx_gain_offset[2], + mod_enb->devs->openair0_cfg.rx_gain_offset[3], + mod_enb->devs->openair0_cfg.rx_bw, + mod_enb->devs->openair0_cfg.tx_bw, + mod_enb->devs->openair0_cfg.autocal[0], + mod_enb->devs->openair0_cfg.remote_ip, + mod_enb->devs->openair0_cfg.remote_port, + mod_enb->devs->openair0_cfg.my_ip, + mod_enb->devs->openair0_cfg.my_port + ); + + printf("----------------------------------------------------------------------------\n"); + + +} diff --git a/targets/RT/USER/eNB.gtkw b/targets/RT/USER/eNB_usrp.gtkw similarity index 61% rename from targets/RT/USER/eNB.gtkw rename to targets/RT/USER/eNB_usrp.gtkw index eadbb85389..ca9427a38d 100644 --- a/targets/RT/USER/eNB.gtkw +++ b/targets/RT/USER/eNB_usrp.gtkw @@ -1,19 +1,19 @@ [*] [*] GTKWave Analyzer v3.3.58 (w)1999-2014 BSI -[*] Wed Sep 17 09:53:22 2014 +[*] Wed Sep 9 13:51:16 2015 [*] -[dumpfile] "/tmp/openair_dump_eNB.vcd" -[dumpfile_mtime] "Wed Sep 17 09:52:33 2014" -[dumpfile_size] 53042998 -[savefile] "$OPENAIR_TARGETS/RT/USER/eNB.gtkw" -[timestart] 13048857000 -[size] 1005 600 -[pos] -1 -1 -*-20.000000 13050255265 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 +[dumpfile] "/homes/kaltenbe/openair_dump_eNB_usrp_note4.gtk" +[dumpfile_mtime] "Wed Sep 9 13:39:25 2015" +[dumpfile_size] 323681028 +[savefile] "/homes/kaltenbe/Devel/openair/openair4G/trunk/targets/RT/USER/eNB.gtkw" +[timestart] 63022760000 +[size] 1855 1056 +[pos] -851 -429 +*-22.793451 63031840000 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 [sst_width] 224 [signals_width] 230 [sst_expanded] 1 -[sst_vpaned_height] 143 +[sst_vpaned_height] 294 @24 variables.hw_frame[63:0] variables.hw_subframe[63:0] @@ -25,13 +25,9 @@ variables.txcnt[63:0] variables.rxcnt[63:0] variables.trx_ts[63:0] variables.trx_tst[63:0] -@25 variables.frame_number_TX_eNB[63:0] variables.frame_number_RX_eNB[63:0] @28 -functions.phy_procedures_eNb_tx -functions.phy_procedures_eNb_rx -functions.phy_enb_prach_rx functions.eNB_thread_rx0 functions.eNB_thread_tx0 functions.eNB_thread_rx1 @@ -52,5 +48,18 @@ functions.eNB_thread_rx8 functions.eNB_thread_tx8 functions.eNB_thread_rx9 functions.eNB_thread_tx9 +functions.phy_procedures_eNb_tx +functions.phy_procedures_eNb_rx +functions.phy_enb_prach_rx +functions.phy_eNB_dlsch_encoding +functions.phy_eNB_dlsch_modulation +functions.phy_eNB_dlsch_scrambling +functions.phy_enb_pdcch_tx +functions.phy_enb_ulsch_decoding +functions.phy_enb_rs_tx +functions.rrc_mac_config_req +functions.rlc_data_req +@29 +functions.udp_enb_task [pattern_trace] 1 [pattern_trace] 0 diff --git a/targets/RT/USER/init_exmimo2.sh b/targets/RT/USER/init_exmimo2.sh index c30a037c35..849c62f852 100644 --- a/targets/RT/USER/init_exmimo2.sh +++ b/targets/RT/USER/init_exmimo2.sh @@ -24,7 +24,7 @@ load_module() { sudo insmod $1 } -load_module $OPENAIR_TARGETS/bin/openair_rf.ko +load_module $OPENAIR_TARGETS/ARCH/EXMIMO/DRIVER/eurecom/openair_rf.ko sleep 1 if [ ! -e /dev/openair0 ]; then @@ -36,17 +36,17 @@ DEVICE=`echo $PCI | awk -F\" '{print $(NF-1)}' | awk '{print $2}'` DEVICE_SWID=${DEVICE:2:2} if [ $DEVICE_SWID == '08' ]; then echo "Using firmware version 8" - $OPENAIR_TARGETS/bin/updatefw -s 0x43fffff0 -b -f $OPENAIR_TARGETS/ARCH/EXMIMO/USERSPACE/OAI_FW_INIT/sdr_expressmimo2 + $OPENAIR_TARGETS/ARCH/EXMIMO/USERSPACE/OAI_FW_INIT/updatefw -s 0x43fffff0 -b -f $OPENAIR_TARGETS/ARCH/EXMIMO/USERSPACE/OAI_FW_INIT/sdr_expressmimo2 else if [ $DEVICE_SWID == '09' ]; then echo "Using firmware version 9" - $OPENAIR_TARGETS/bin/updatefw -s 0x43fffff0 -b -f $OPENAIR_TARGETS/ARCH/EXMIMO/USERSPACE/OAI_FW_INIT/sdr_expressmimo2_v9 + $OPENAIR_TARGETS/ARCH/EXMIMO/USERSPACE/OAI_FW_INIT/updatefw -s 0x43fffff0 -b -f $OPENAIR_TARGETS/ARCH/EXMIMO/USERSPACE/OAI_FW_INIT/sdr_expressmimo2_v9 else if [ $DEVICE_SWID == '0a' ]; then echo "Using firware version 10" #$OPENAIR_TARGETS/ARCH/EXMIMO/USERSPACE/OAI_FW_INIT/updatefw -s 0x43fffff0 -b -f $OPENAIR0_DIR/express-mimo/software/sdr/exmimo2/sdr_expressmimo2 #$OPENAIR_TARGETS/ARCH/EXMIMO/USERSPACE/OAI_FW_INIT/updatefw -s 0x43fffff0 -b -f $OPENAIR_TARGETS/ARCH/EXMIMO/USERSPACE/OAI_FW_INIT/sdr_expressmimo2_v10_spectra - $OPENAIR_TARGETS/bin/updatefw -s 0x43fffff0 -b -f $OPENAIR_TARGETS/ARCH/EXMIMO/USERSPACE/OAI_FW_INIT/sdr_expressmimo2_v10 + $OPENAIR_TARGETS/ARCH/EXMIMO/USERSPACE/OAI_FW_INIT/updatefw -s 0x43fffff0 -b -f $OPENAIR_TARGETS/ARCH/EXMIMO/USERSPACE/OAI_FW_INIT/sdr_expressmimo2_v10 else echo 'No corresponding firmware found' return diff --git a/targets/RT/USER/lte-softmodem.c b/targets/RT/USER/lte-softmodem.c index 7e2c5274a0..2faa4e796d 100644 --- a/targets/RT/USER/lte-softmodem.c +++ b/targets/RT/USER/lte-softmodem.c @@ -45,15 +45,11 @@ #include #include #include -#include -#include #include #include #include #include #include -#include -#include // for gettid #include "rt_wrapper.h" #undef MALLOC //there are two conflicting definitions, so we better make sure we don't use it at all @@ -156,6 +152,10 @@ int32_t **txdata; int setup_ue_buffers(PHY_VARS_UE **phy_vars_ue, openair0_config_t *openair0_cfg, openair0_rf_map rf_map[MAX_NUM_CCs]); int setup_eNB_buffers(PHY_VARS_eNB **phy_vars_eNB, openair0_config_t *openair0_cfg, openair0_rf_map rf_map[MAX_NUM_CCs]); +uint16_t runtime_phy_rx[29][6]; // SISO [MCS 0-28][RBs 0-5 : 6, 15, 25, 50, 75, 100] +uint16_t runtime_phy_tx[29][6]; // SISO [MCS 0-28][RBs 0-5 : 6, 15, 25, 50, 75, 100] +double cpuf; + void fill_ue_band_info(void); #ifdef XFORMS // current status is that every UE has a DL scope for a SINGLE eNB (eNB_id=0) @@ -218,7 +218,7 @@ openair0_device openair0; //extern unsigned int bigphys_top; //extern unsigned int mem_base; -int card = 0; +//int card = 0; #if defined(ENABLE_ITTI) @@ -247,8 +247,11 @@ static char *itti_dump_file = NULL; #endif int UE_scan = 1; +int UE_scan_carrier = 0; runmode_t mode = normal_txrx; +FILE *input_fd=NULL; + #ifdef EXMIMO #if MAX_NUM_CCs == 1 @@ -282,7 +285,7 @@ double rx_gain[MAX_NUM_CCs][4] = {{110,0,0,0}}; #endif double sample_rate=30.72e6; -double bw = 14e6; +double bw = 10.0e6; static int tx_max_power[MAX_NUM_CCs]; /* = {0,0}*/; @@ -290,9 +293,9 @@ static int tx_max_power[MAX_NUM_CCs]; /* = {0,0}*/; char ref[128] = "internal"; char channels[128] = "0"; -unsigned int samples_per_frame = 307200; -unsigned int tx_forward_nsamps; -int tx_delay; +//unsigned int samples_per_frame = 307200; +//unsigned int tx_forward_nsamps=0; +//int tx_delay; #endif @@ -377,20 +380,6 @@ unsigned int build_rfdc(int dcoff_i_rxfe, int dcoff_q_rxfe) return (dcoff_i_rxfe + (dcoff_q_rxfe<<8)); } -#ifdef LOWLATENCY -int sched_setattr(pid_t pid, const struct sched_attr *attr, unsigned int flags) -{ - - return syscall(__NR_sched_setattr, pid, attr, flags); -} - - -int sched_getattr(pid_t pid,struct sched_attr *attr,unsigned int size, unsigned int flags) -{ - - return syscall(__NR_sched_getattr, pid, attr, size, flags); -} -#endif #if !defined(ENABLE_ITTI) void signal_handler(int sig) { @@ -426,11 +415,13 @@ void help (void) { printf(" --calib-ue-rx set UE RX calibration\n"); printf(" --calib-ue-rx-med \n"); printf(" --calib-ue-rxbyp\n"); - printf(" --debug-ue-prach \n"); + printf(" --debug-ue-prach run normal prach power ramping, but don't continue random-access\n"); + printf(" --calib-prach-tx run normal prach with maximum power, but don't continue random-access\n"); printf(" --no-L2-connect bypass L2 and upper layers\n"); - printf(" --ue_rxgain set UE RX gain\n"); - printf(" --ue_txgain set UE tx gain\n"); - + printf(" --ue-rxgain set UE RX gain\n"); + printf(" --ue-txgain set UE TX gain\n"); + printf(" --ue-scan_carrier set UE to scan around carrier\n"); + printf(" --loop-memory get softmodem (UE) to loop through memory instead of acquiring from HW\n"); printf(" -C Set the downlink frequecny for all Component carrier\n"); printf(" -d Enable soft scope and L1 and L2 stats (Xforms)\n"); printf(" -F Calibrate the EXMIMO borad, available files: exmimo2_2arxg.lime exmimo2_2brxg.lime \n"); @@ -442,7 +433,7 @@ void help (void) { printf(" -M IP address of RRH\n"); printf(" -O eNB configuration file (located in targets/PROJECTS/GENERIC-LTE-EPC/CONF\n"); printf(" -q Enable processing timing measurement of lte softmodem on per subframe basis \n"); - printf(" -R Set the PRB, valid values: 6, 25, 50, 100 \n"); + printf(" -r Set the PRB, valid values: 6, 25, 50, 100 \n"); printf(" -S Skip the missed slots/subframes \n"); printf(" -t Set the maximum uplink MCS\n"); printf(" -U Set the lte softmodem as a UE\n"); @@ -469,40 +460,6 @@ void exit_fun(const char* s) //exit (-1); } -static int latency_target_fd = -1; -static int32_t latency_target_value = 0; -/* Latency trick - taken from cyclictest.c - * if the file /dev/cpu_dma_latency exists, - * open it and write a zero into it. This will tell - * the power management system not to transition to - * a high cstate (in fact, the system acts like idle=poll) - * When the fd to /dev/cpu_dma_latency is closed, the behavior - * goes back to the system default. - * - * Documentation/power/pm_qos_interface.txt - */ -static void set_latency_target(void) -{ - struct stat s; - int ret; - - if (stat("/dev/cpu_dma_latency", &s) == 0) { - latency_target_fd = open("/dev/cpu_dma_latency", O_RDWR); - - if (latency_target_fd == -1) - return; - - ret = write(latency_target_fd, &latency_target_value, 4); - - if (ret == 0) { - printf("# error setting cpu_dma_latency to %d!: %s\n", latency_target_value, strerror(errno)); - close(latency_target_fd); - return; - } - - printf("# /dev/cpu_dma_latency set to %dus\n", latency_target_value); - } -} #ifdef XFORMS @@ -564,7 +521,9 @@ static void *scope_thread(void *arg) while (!oai_exit) { if (UE_flag==1) { len = dump_ue_stats (PHY_vars_UE_g[0][0], stats_buffer, 0, mode,rx_input_level_dBm); - fl_set_object_label(form_stats->stats_text, stats_buffer); + //fl_set_object_label(form_stats->stats_text, stats_buffer); + fl_clear_browser(form_stats->stats_text); + fl_add_browser_line(form_stats->stats_text, stats_buffer); phy_scope_UE(form_ue[0], PHY_vars_UE_g[0][0], @@ -574,14 +533,18 @@ static void *scope_thread(void *arg) } else { #ifdef OPENAIR2 len = dump_eNB_l2_stats (stats_buffer, 0); - fl_set_object_label(form_stats_l2->stats_text, stats_buffer); + //fl_set_object_label(form_stats_l2->stats_text, stats_buffer); + fl_clear_browser(form_stats_l2->stats_text); + fl_add_browser_line(form_stats_l2->stats_text, stats_buffer); #endif len = dump_eNB_stats (PHY_vars_eNB_g[0][0], stats_buffer, 0); if (MAX_NUM_CCs>1) len += dump_eNB_stats (PHY_vars_eNB_g[0][1], &stats_buffer[len], 0); - fl_set_object_label(form_stats->stats_text, stats_buffer); + //fl_set_object_label(form_stats->stats_text, stats_buffer); + fl_clear_browser(form_stats->stats_text); + fl_add_browser_line(form_stats->stats_text, stats_buffer); for(UE_id=0; UE_idlte_frame_parms.ofdm_symbol_size)* ((phy_vars_eNB->lte_frame_parms.Ncp==1) ? 6 : 7); + int len; slot_offset_F = (subframe<<1)*slot_sizeF; @@ -959,13 +924,21 @@ void do_OFDM_mod_rt(int subframe,PHY_VARS_eNB *phy_vars_eNB) dummy_tx_b, 7, &(phy_vars_eNB->lte_frame_parms)); - normal_prefix_mod(&phy_vars_eNB->lte_eNB_common_vars.txdataF[0][aa][slot_offset_F+slot_sizeF], - dummy_tx_b+(phy_vars_eNB->lte_frame_parms.samples_per_tti>>1), - 7, - &(phy_vars_eNB->lte_frame_parms)); + // if S-subframe generate first slot only + if (subframe_select(&phy_vars_eNB->lte_frame_parms,subframe) == SF_DL) + normal_prefix_mod(&phy_vars_eNB->lte_eNB_common_vars.txdataF[0][aa][slot_offset_F+slot_sizeF], + dummy_tx_b+(phy_vars_eNB->lte_frame_parms.samples_per_tti>>1), + 7, + &(phy_vars_eNB->lte_frame_parms)); } - for (i=0; ilte_frame_parms.samples_per_tti; i++) { + // if S-subframe generate first slot only + if (subframe_select(&phy_vars_eNB->lte_frame_parms,subframe) == SF_S) + len = phy_vars_eNB->lte_frame_parms.samples_per_tti>>1; + else + len = phy_vars_eNB->lte_frame_parms.samples_per_tti; + + for (i=0; ilte_eNB_common_vars.txdata[0][aa][tx_offset])[0]= #ifdef EXMIMO ((short*)dummy_tx_b)[2*i]<<4; +#elif OAI_BLADRF + ((short*)dummy_tx_b)[2*i]; #else - ((short*)dummy_tx_b)[2*i]<<5; + ((short*)dummy_tx_b)[2*i]<<4; #endif - ((short*)&phy_vars_eNB->lte_eNB_common_vars.txdata[0][aa][tx_offset])[1]= + ((short*)&phy_vars_eNB->lte_eNB_common_vars.txdata[0][aa][tx_offset])[1]= #ifdef EXMIMO - ((short*)dummy_tx_b)[2*i+1]<<4; + ((short*)dummy_tx_b)[2*i+1]<<4; +#elif OAI_BLADRF + ((short*)dummy_tx_b)[2*i+1]; #else - ((short*)dummy_tx_b)[2*i+1]<<5; + ((short*)dummy_tx_b)[2*i+1]<<4; #endif - } + } + // if S-subframe switch to RX in second subframe + if (subframe_select(&phy_vars_eNB->lte_frame_parms,subframe) == SF_S) { + for (i=0; ilte_eNB_common_vars.txdata[0][aa][tx_offset++] = 0x00010001; + } + } } } } +/* mutex, cond and variable to serialize phy proc TX calls + * (this mechanism may be relaxed in the future for better + * performances) + */ +static struct { + pthread_mutex_t mutex_phy_proc_tx; + pthread_cond_t cond_phy_proc_tx; + volatile uint8_t phy_proc_CC_id; +} sync_phy_proc[NUM_ENB_THREADS]; /*! * \brief The transmit thread of eNB. @@ -1012,6 +1004,8 @@ static void* eNB_thread_tx( void* param ) // set default return value eNB_thread_tx_status[proc->subframe] = 0; + MSC_START_USE(); + #ifdef RTAI RT_TASK *task; char task_name[8]; @@ -1033,24 +1027,30 @@ static void* eNB_thread_tx( void* param ) #ifdef LOWLATENCY struct sched_attr attr; unsigned int flags = 0; + uint64_t runtime = (uint64_t) (get_runtime_tx(proc->subframe, runtime_phy_tx, target_dl_mcs,frame_parms[0]->N_RB_DL,cpuf,PHY_vars_eNB_g[0][0]->lte_frame_parms.nb_antennas_tx) * 1000000); + uint64_t deadline = 1 * 1000000; // each tx thread will finish within 1ms + uint64_t period = 1 * 10000000; // each tx thread has a period of 10ms from the starting point + if (runtime > 1000000 ){ + LOG_W(HW,"estimated runtime %d is larger than 1ms, adjusting\n",runtime); + runtime = (0.97 * 100) * 10000; + } attr.size = sizeof(attr); attr.sched_flags = 0; attr.sched_nice = 0; attr.sched_priority = 0; - // This creates a 1ms reservation every 10ms period attr.sched_policy = SCHED_DEADLINE; - attr.sched_runtime = 0.9 * 1000000; // each tx thread requires 1ms to finish its job - attr.sched_deadline = 1 * 1000000; // each tx thread will finish within 1ms - attr.sched_period = 1 * 10000000; // each tx thread has a period of 10ms from the starting point + attr.sched_runtime = runtime; + attr.sched_deadline = deadline; + attr.sched_period = period; if (sched_setattr(0, &attr, flags) < 0 ) { perror("[SCHED] eNB tx thread: sched_setattr failed\n"); return &eNB_thread_tx_status[proc->subframe]; } - LOG_I( HW, "[SCHED] eNB TX deadline thread %d(tid %ld) started on CPU %d\n", proc->subframe, gettid(), sched_getcpu() ); + LOG_I( HW, "[SCHED] eNB TX deadline thread %d(TID %ld) started on CPU %d\n", proc->subframe, gettid(), sched_getcpu() ); #else LOG_I( HW, "[SCHED][eNB] TX thread %d started on CPU %d TID %d\n", proc->subframe, sched_getcpu(),gettid() ); #endif @@ -1091,16 +1091,48 @@ static void* eNB_thread_tx( void* param ) if (oai_exit) break; - if ((((PHY_vars_eNB_g[0][proc->CC_id]->lte_frame_parms.frame_type == TDD)&& - (subframe_select(&PHY_vars_eNB_g[0][proc->CC_id]->lte_frame_parms,proc->subframe_tx)==SF_DL))|| - (PHY_vars_eNB_g[0][proc->CC_id]->lte_frame_parms.frame_type == FDD))) { + if (((PHY_vars_eNB_g[0][proc->CC_id]->lte_frame_parms.frame_type == TDD) && + ((subframe_select(&PHY_vars_eNB_g[0][proc->CC_id]->lte_frame_parms,proc->subframe_tx) == SF_DL) || + (subframe_select(&PHY_vars_eNB_g[0][proc->CC_id]->lte_frame_parms,proc->subframe_tx) == SF_S))) || + (PHY_vars_eNB_g[0][proc->CC_id]->lte_frame_parms.frame_type == FDD)) { + /* run PHY TX procedures the one after the other for all CCs to avoid race conditions + * (may be relaxed in the future for performance reasons) + */ + if (pthread_mutex_lock(&sync_phy_proc[proc->subframe].mutex_phy_proc_tx) != 0) { + LOG_E(PHY, "[SCHED][eNB] error locking PHY proc mutex for eNB TX proc %d\n", proc->subframe); + exit_fun("nothing to add"); + break; + } + /* wait for our turn or oai_exit */ + while (sync_phy_proc[proc->subframe].phy_proc_CC_id != proc->CC_id && !oai_exit) { + pthread_cond_wait(&sync_phy_proc[proc->subframe].cond_phy_proc_tx, + &sync_phy_proc[proc->subframe].mutex_phy_proc_tx); + } + + if (pthread_mutex_unlock(&sync_phy_proc[proc->subframe].mutex_phy_proc_tx) != 0) { + LOG_E(PHY, "[SCHED][eNB] error unlocking PHY proc mutex for eNB TX proc %d\n", proc->subframe); + exit_fun("nothing to add"); + } + + if (oai_exit) + break; phy_procedures_eNB_TX( proc->subframe, PHY_vars_eNB_g[0][proc->CC_id], 0, no_relay, NULL ); - } - - if ((subframe_select(&PHY_vars_eNB_g[0][proc->CC_id]->lte_frame_parms,proc->subframe_tx) == SF_S)) { - phy_procedures_eNB_TX( proc->subframe, PHY_vars_eNB_g[0][proc->CC_id], 0, no_relay, NULL ); + /* we're done, let the next one proceed */ + if (pthread_mutex_lock(&sync_phy_proc[proc->subframe].mutex_phy_proc_tx) != 0) { + LOG_E(PHY, "[SCHED][eNB] error locking PHY proc mutex for eNB TX proc %d\n", proc->subframe); + exit_fun("nothing to add"); + break; + } + sync_phy_proc[proc->subframe].phy_proc_CC_id++; + sync_phy_proc[proc->subframe].phy_proc_CC_id %= MAX_NUM_CCs; + pthread_cond_broadcast(&sync_phy_proc[proc->subframe].cond_phy_proc_tx); + if (pthread_mutex_unlock(&sync_phy_proc[proc->subframe].mutex_phy_proc_tx) != 0) { + LOG_E(PHY, "[SCHED][eNB] error unlocking PHY proc mutex for eNB TX proc %d\n", proc->subframe); + exit_fun("nothing to add"); + break; + } } do_OFDM_mod_rt( proc->subframe_tx, PHY_vars_eNB_g[0][proc->CC_id] ); @@ -1123,13 +1155,20 @@ static void* eNB_thread_tx( void* param ) if (proc->frame_tx==1024) proc->frame_tx=0; - stop_meas( &softmodem_stats_tx_sf[proc->subframe] ); +#ifdef LOWLATENCY + if (opp_enabled){ + if(softmodem_stats_tx_sf[proc->subframe].diff_now/(cpuf) > attr.sched_runtime){ + VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_RUNTIME_TX_ENB, (softmodem_stats_tx_sf[proc->subframe].diff_now/cpuf - attr.sched_runtime)/1000000.0); + } + } +#endif print_meas_now(&softmodem_stats_tx_sf[proc->subframe],"eNB_TX_SF",proc->subframe, tx_time_file); } - stop_meas( &softmodem_stats_tx_sf[proc->subframe] ); + + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_eNB_PROC_TX0+(2*proc->subframe), 0 ); #ifdef HARD_RT @@ -1163,6 +1202,8 @@ static void* eNB_thread_rx( void* param ) FILE *rx_time_file; char rx_time_name[101]; + int i; + if (opp_enabled == 1){ snprintf(rx_time_name, 100,"/tmp/%s_rx_time_thread_sf_%d", "eNB", proc->subframe); rx_time_file = fopen(rx_time_name,"w"); @@ -1170,6 +1211,8 @@ static void* eNB_thread_rx( void* param ) // set default return value eNB_thread_rx_status[proc->subframe] = 0; + MSC_START_USE(); + #ifdef RTAI RT_TASK *task; char task_name[8]; @@ -1191,24 +1234,31 @@ static void* eNB_thread_rx( void* param ) #ifdef LOWLATENCY struct sched_attr attr; unsigned int flags = 0; + uint64_t runtime = get_runtime_rx(proc->subframe, runtime_phy_rx, target_ul_mcs,frame_parms[0]->N_RB_DL,cpuf,PHY_vars_eNB_g[0][0]->lte_frame_parms.nb_antennas_rx) * 1000000; + uint64_t deadline = 1 * 1000000; + uint64_t period = 1 * 10000000; // each rx thread has a period of 10ms from the starting point + if (runtime > 2300000 ) { + LOG_W(HW,"estimated rx runtime %d is larger than expected, adjusting\n",runtime); + runtime = 2300000; + deadline = runtime + 100000; + } attr.size = sizeof(attr); attr.sched_flags = 0; attr.sched_nice = 0; attr.sched_priority = 0; - /* This creates a 2ms reservation every 10ms period*/ attr.sched_policy = SCHED_DEADLINE; - attr.sched_runtime = 0.9 * 1000000; // each rx thread must finish its job in the worst case in 2ms - attr.sched_deadline = 2 * 1000000; // each rx thread will finish within 2ms - attr.sched_period = 1 * 10000000; // each rx thread has a period of 10ms from the starting point + attr.sched_runtime = runtime; + attr.sched_deadline = deadline; + attr.sched_period = period; if (sched_setattr(0, &attr, flags) < 0 ) { perror("[SCHED] eNB RX sched_setattr failed\n"); return &eNB_thread_rx_status[proc->subframe]; } - LOG_I( HW, "[SCHED] eNB RX deadline thread %d(id %ld) started on CPU %d\n", proc->subframe, gettid(), sched_getcpu() ); + LOG_I( HW, "[SCHED] eNB RX deadline thread %d(TID %ld) started on CPU %d\n", proc->subframe, gettid(), sched_getcpu() ); #else LOG_I( HW, "[SCHED][eNB] RX thread %d started on CPU %d TID %d\n", proc->subframe, sched_getcpu(),gettid() ); #endif @@ -1250,6 +1300,7 @@ static void* eNB_thread_rx( void* param ) if ((((PHY_vars_eNB_g[0][proc->CC_id]->lte_frame_parms.frame_type == TDD )&&(subframe_select(&PHY_vars_eNB_g[0][proc->CC_id]->lte_frame_parms,proc->subframe_rx)==SF_UL)) || (PHY_vars_eNB_g[0][proc->CC_id]->lte_frame_parms.frame_type == FDD))) { + phy_procedures_eNB_RX( proc->subframe, PHY_vars_eNB_g[0][proc->CC_id], 0, no_relay ); } @@ -1277,11 +1328,17 @@ static void* eNB_thread_rx( void* param ) proc->frame_rx=0; stop_meas( &softmodem_stats_rx_sf[proc->subframe] ); +#ifdef LOWLATENCY + if (opp_enabled){ + if(softmodem_stats_rx_sf[proc->subframe].diff_now/(cpuf) > attr.sched_runtime){ + VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_RUNTIME_RX_ENB, (softmodem_stats_rx_sf[proc->subframe].diff_now/cpuf - attr.sched_runtime)/1000000.0); + } + } +#endif print_meas_now(&softmodem_stats_rx_sf[proc->subframe],"eNB_RX_SF",proc->subframe, rx_time_file); - } - stop_meas( &softmodem_stats_rx_sf[proc->subframe] ); + //stop_meas( &softmodem_stats_rx_sf[proc->subframe] ); VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_eNB_PROC_RX0+(2*proc->subframe), 0 ); #ifdef HARD_RT @@ -1311,17 +1368,18 @@ void init_eNB_proc(void) for (CC_id=0; CC_idproc[i].instance_cnt_tx = -1; PHY_vars_eNB_g[0][CC_id]->proc[i].instance_cnt_rx = -1; PHY_vars_eNB_g[0][CC_id]->proc[i].subframe = i; @@ -1340,8 +1397,13 @@ void init_eNB_proc(void) pthread_mutex_init( &PHY_vars_eNB_g[0][CC_id]->proc[i].mutex_rx, NULL); pthread_cond_init( &PHY_vars_eNB_g[0][CC_id]->proc[i].cond_tx, NULL); pthread_cond_init( &PHY_vars_eNB_g[0][CC_id]->proc[i].cond_rx, NULL); +#ifndef LOWLATENCY + pthread_create( &PHY_vars_eNB_g[0][CC_id]->proc[i].pthread_tx, &attr_eNB_proc_tx[CC_id][i], eNB_thread_tx, &PHY_vars_eNB_g[0][CC_id]->proc[i] ); + pthread_create( &PHY_vars_eNB_g[0][CC_id]->proc[i].pthread_rx, &attr_eNB_proc_rx[CC_id][i], eNB_thread_rx, &PHY_vars_eNB_g[0][CC_id]->proc[i] ); +#else pthread_create( &PHY_vars_eNB_g[0][CC_id]->proc[i].pthread_tx, NULL, eNB_thread_tx, &PHY_vars_eNB_g[0][CC_id]->proc[i] ); pthread_create( &PHY_vars_eNB_g[0][CC_id]->proc[i].pthread_rx, NULL, eNB_thread_rx, &PHY_vars_eNB_g[0][CC_id]->proc[i] ); +#endif char name[16]; snprintf( name, sizeof(name), "TX %d", i ); pthread_setname_np( PHY_vars_eNB_g[0][CC_id]->proc[i].pthread_tx, name ); @@ -1375,6 +1437,13 @@ void init_eNB_proc(void) // PHY_vars_eNB_g[0][CC_id]->proc[0].frame_tx = 1; #endif } + + /* setup PHY proc TX sync mechanism */ + for (i=0; iproc[i].instance_cnt_tx = 0; // FIXME data race! pthread_cond_signal( &PHY_vars_eNB_g[0][CC_id]->proc[i].cond_tx ); + pthread_cond_broadcast(&sync_phy_proc[i].cond_phy_proc_tx); #ifdef DEBUG_THREADS printf( "Joining eNB TX CC_id %d thread %d...\n", CC_id, i ); @@ -1481,14 +1551,15 @@ static void* eNB_thread( void* arg ) slot = 1; int spp; int tx_launched = 0; + int card=0; void *rxp[2]; // FIXME hard coded array size; indexed by lte_frame_parms.nb_antennas_rx void *txp[2]; // FIXME hard coded array size; indexed by lte_frame_parms.nb_antennas_tx int hw_subframe = 0; // 0..NUM_ENB_THREADS-1 => 0..9 - spp = openair0_cfg[0].samples_per_packet; + unsigned int rx_pos = 0; - unsigned int tx_pos = spp*tx_delay; + unsigned int tx_pos = 0; //spp*tx_delay; #endif int CC_id=0; struct timespec trx_time0, trx_time1, trx_time2; @@ -1505,11 +1576,11 @@ static void* eNB_thread( void* arg ) attr.sched_nice = 0; attr.sched_priority = 0; - /* This creates a .5 ms reservation */ + /* This creates a .2 ms reservation */ attr.sched_policy = SCHED_DEADLINE; - attr.sched_runtime = 0.1 * 1000000; - attr.sched_deadline = 0.5 * 1000000; - attr.sched_period = 1.0 * 1000000; + attr.sched_runtime = (0.3 * 100) * 10000; + attr.sched_deadline = (0.9 * 100) * 10000; + attr.sched_period = 1 * 1000000; /* pin the eNB main thread to CPU0*/ @@ -1562,6 +1633,11 @@ static void* eNB_thread( void* arg ) int frame = 0; +#ifndef EXMIMO + spp = openair0_cfg[0].samples_per_packet; + tx_pos=spp*openair0_cfg[0].tx_delay; +#endif + while (!oai_exit) { start_meas( &softmodem_stats_mt ); @@ -1588,7 +1664,7 @@ static void* eNB_thread( void* arg ) first_run=0; if (diff<0) - diff = diff +150; + diff = diff + 150; LOG_I(HW,"eNB Frame %d, time %llu: slot %d, hw_slot %d, diff %d\n",frame, rt_get_time_ns(), slot, hw_slot, diff); } @@ -1688,44 +1764,51 @@ static void* eNB_thread( void* arg ) clock_gettime( CLOCK_MONOTONIC, &trx_time0 ); - // prepare rx buffer pointers - for (int i=0; ilte_frame_parms.nb_antennas_rx; i++) - rxp[i] = (void*)&rxdata[i][rx_pos]; - - start_meas( &softmodem_stats_hw ); + start_meas( &softmodem_stats_hw ); openair0_timestamp timestamp; - rxs = openair0.trx_read_func(&openair0, - ×tamp, - rxp, - spp, - PHY_vars_eNB_g[0][0]->lte_frame_parms.nb_antennas_rx); + int i=0; + // prepare rx buffer pointers + for (i=0; ilte_frame_parms.nb_antennas_rx; i++) + rxp[i] = (void*)&rxdata[i][rx_pos]; + // check if nsymb_read == spp + // map antenna port i to the cc_id. Now use the 1:1 mapping + rxs = openair0.trx_read_func(&openair0, + ×tamp, + rxp, + spp, + PHY_vars_eNB_g[0][0]->lte_frame_parms.nb_antennas_rx); + stop_meas( &softmodem_stats_hw ); clock_gettime( CLOCK_MONOTONIC, &trx_time1 ); - if (rxs != spp) - exit_fun( "problem receiving samples" ); - + if (frame > 20){ + if (rxs != spp) + exit_fun( "problem receiving samples" ); + } VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_READ, 0 ); // Transmit TX buffer based on timestamp from RX + + + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_WRITE, 1 ); - // prepare tx buffer pointers - for (int i=0; ilte_frame_parms.nb_antennas_tx; i++) - txp[i] = (void*)&txdata[i][tx_pos]; - + for (i=0; ilte_frame_parms.nb_antennas_tx; i++) + txp[i] = (void*)&txdata[i][tx_pos]; + //printf("tx_pos %d ts %d, ts_offset %d txp[i] %p, ap %d\n", tx_pos, timestamp, (timestamp+(tx_delay*spp)-tx_forward_nsamps),txp[i], i); + // if symb_written < spp ==> error if (frame > 50) { - openair0.trx_write_func(&openair0, - (timestamp+(tx_delay*spp)-tx_forward_nsamps), - txp, - spp, - PHY_vars_eNB_g[0][0]->lte_frame_parms.nb_antennas_tx, - 1); + openair0.trx_write_func(&openair0, + (timestamp+(openair0_cfg[card].tx_delay*spp)-openair0_cfg[card].tx_forward_nsamps), + txp, + spp, + PHY_vars_eNB_g[0][0]->lte_frame_parms.nb_antennas_tx, + 1); } - + VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_TRX_TS, timestamp&0xffffffff ); - VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_TRX_TST, (timestamp+(tx_delay*spp)-tx_forward_nsamps)&0xffffffff ); + VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_TRX_TST, (timestamp+(openair0_cfg[card].tx_delay*spp)-openair0_cfg[card].tx_forward_nsamps)&0xffffffff ); stop_meas( &softmodem_stats_mt ); clock_gettime( CLOCK_MONOTONIC, &trx_time2 ); @@ -1769,12 +1852,12 @@ static void* eNB_thread( void* arg ) rx_pos += spp; tx_pos += spp; - if (tx_pos >= samples_per_frame) - tx_pos -= samples_per_frame; + if (tx_pos >= openair0_cfg[card].samples_per_frame) + tx_pos -= openair0_cfg[card].samples_per_frame; } - if (rx_pos >= samples_per_frame) - rx_pos -= samples_per_frame; + if (rx_pos >= openair0_cfg[card].samples_per_frame) + rx_pos -= openair0_cfg[card].samples_per_frame; #endif // USRP @@ -1819,6 +1902,7 @@ static void* eNB_thread( void* arg ) if (PHY_vars_eNB_g[0][CC_id]->proc[sf].instance_cnt_tx == 0) { if (pthread_cond_signal(&PHY_vars_eNB_g[0][CC_id]->proc[sf].cond_tx) != 0) { LOG_E(PHY,"[eNB] ERROR pthread_cond_signal for eNB TX thread %d\n",sf); + exit_fun("nothing to add"); } } else { LOG_W(PHY,"[eNB] Frame %d, eNB TX thread %d busy!!\n",PHY_vars_eNB_g[0][CC_id]->proc[sf].frame_tx,sf); @@ -1932,8 +2016,13 @@ static void get_options (int argc, char **argv) LONG_OPTION_CALIB_UE_RX_BYP, LONG_OPTION_DEBUG_UE_PRACH, LONG_OPTION_NO_L2_CONNECT, + LONG_OPTION_CALIB_PRACH_TX, LONG_OPTION_RXGAIN, LONG_OPTION_TXGAIN, + LONG_OPTION_SCANCARRIER, + LONG_OPTION_MAXPOWER, + LONG_OPTION_DUMP_FRAME, + LONG_OPTION_LOOPMEMORY }; static const struct option long_options[] = { @@ -1943,13 +2032,23 @@ static void get_options (int argc, char **argv) {"calib-ue-rx-byp", required_argument, NULL, LONG_OPTION_CALIB_UE_RX_BYP}, {"debug-ue-prach", no_argument, NULL, LONG_OPTION_DEBUG_UE_PRACH}, {"no-L2-connect", no_argument, NULL, LONG_OPTION_NO_L2_CONNECT}, - {"ue_rxgain", required_argument, NULL, LONG_OPTION_RXGAIN}, - {"ue_txgain", required_argument, NULL, LONG_OPTION_TXGAIN}, + {"calib-prach-tx", no_argument, NULL, LONG_OPTION_CALIB_PRACH_TX}, + {"ue-rxgain", required_argument, NULL, LONG_OPTION_RXGAIN}, + {"ue-txgain", required_argument, NULL, LONG_OPTION_TXGAIN}, + {"ue-scan-carrier", no_argument, NULL, LONG_OPTION_SCANCARRIER}, + {"ue-max-power", required_argument, NULL, LONG_OPTION_MAXPOWER}, + {"ue-dump-frame", no_argument, NULL, LONG_OPTION_DUMP_FRAME}, + {"loop-memory", required_argument, NULL, LONG_OPTION_LOOPMEMORY}, {NULL, 0, NULL, 0} }; while ((c = getopt_long (argc, argv, "C:dK:g:F:G:hqO:m:SUVRM:r:P:Ws:t:x:",long_options,NULL)) != -1) { switch (c) { + case LONG_OPTION_MAXPOWER: + tx_max_power[0]=atoi(optarg); + for (CC_id=1;CC_idproperties[i]->uplink_frequency_offset[CC_id]); } // CC_id }// i - } else if ((UE_flag == 1) && (conf_config_file_name != NULL)) { - - // Here the configuration file is the XER encoded UE capabilities - // Read it in and store in asn1c data structures - strcpy(uecap_xer,conf_config_file_name); - uecap_xer_in=1; + } else if (UE_flag == 1) { + if (conf_config_file_name != NULL) { + + // Here the configuration file is the XER encoded UE capabilities + // Read it in and store in asn1c data structures + strcpy(uecap_xer,conf_config_file_name); + uecap_xer_in=1; + } } } int main( int argc, char **argv ) { - int i,aa,card; + int i,aa,card=0; #if defined (XFORMS) || defined (EMOS) || defined (EXMIMO) void *status; #endif @@ -2377,8 +2498,6 @@ int main( int argc, char **argv ) get_options (argc, argv); //Command-line options - // initialize mscgen log - MSC_INIT(MSC_E_UTRAN); // initialize the log (see log.h for details) set_glog(glog_level, glog_verbosity); @@ -2389,12 +2508,8 @@ int main( int argc, char **argv ) if (UE_flag==1) { printf("configuring for UE\n"); - set_comp_log(HW, LOG_DEBUG, LOG_HIGH, 1); -#ifdef OPENAIR2 - set_comp_log(PHY, LOG_DEBUG, LOG_HIGH, 1); -#else + set_comp_log(HW, LOG_INFO, LOG_HIGH, 1); set_comp_log(PHY, LOG_INFO, LOG_HIGH, 1); -#endif set_comp_log(MAC, LOG_INFO, LOG_HIGH, 1); set_comp_log(RLC, LOG_INFO, LOG_HIGH, 1); set_comp_log(PDCP, LOG_INFO, LOG_HIGH, 1); @@ -2455,8 +2570,10 @@ int main( int argc, char **argv ) VCD_SIGNAL_DUMPER_INIT("/tmp/openair_dump_eNB.vcd"); } - if (opp_enabled ==1) + if (opp_enabled ==1){ reset_opp_meas(); + } + cpuf=get_cpu_freq_GHz(); #if defined(ENABLE_ITTI) @@ -2467,7 +2584,11 @@ int main( int argc, char **argv ) } itti_init(TASK_MAX, THREAD_MAX, MESSAGES_ID_MAX, tasks_info, messages_info, messages_definition_xml, itti_dump_file); + + // initialize mscgen log after ITTI + MSC_INIT(MSC_E_UTRAN, THREAD_MAX+TASK_MAX); #endif + #ifdef OPENAIR2 if (opt_type != OPT_NONE) { @@ -2483,8 +2604,11 @@ int main( int argc, char **argv ) } #endif -#ifdef NAS_NETLINK +#ifdef PDCP_USE_NETLINK netlink_init(); +#if defined(PDCP_USE_NETLINK_QUEUES) + pdcp_netlink_init(); +#endif #endif #if !defined(ENABLE_ITTI) @@ -2564,6 +2688,7 @@ int main( int argc, char **argv ) UE[CC_id]->UE_scan = UE_scan; + UE[CC_id]->UE_scan_carrier = UE_scan_carrier; UE[CC_id]->mode = mode; compute_prach_seq(&UE[CC_id]->lte_frame_parms.prach_config_common, @@ -2712,56 +2837,86 @@ int main( int argc, char **argv ) openair_daq_vars.target_ue_ul_mcs=target_ul_mcs; } - - +#ifndef RTAI + fill_modeled_runtime_table(runtime_phy_rx,runtime_phy_tx); + cpuf=get_cpu_freq_GHz(); +#endif dump_frame_parms(frame_parms[0]); - if(frame_parms[0]->N_RB_DL == 100) { - sample_rate = 30.72e6; -#ifndef EXMIMO - openair0_cfg[0].samples_per_packet = 2048; - samples_per_frame = 307200; - // from usrp_time_offset - tx_forward_nsamps = 175; - tx_delay = 8; -#endif - } else if(frame_parms[0]->N_RB_DL == 50) { - sample_rate = 15.36e6; -#ifndef EXMIMO - openair0_cfg[0].samples_per_packet = 2048; - samples_per_frame = 153600; - tx_forward_nsamps = 95; - tx_delay = 5; -#endif - } else if (frame_parms[0]->N_RB_DL == 25) { - sample_rate = 7.68e6; -#ifndef EXMIMO - openair0_cfg[0].samples_per_packet = 1024; - samples_per_frame = 76800; - tx_forward_nsamps = 70; - tx_delay = 6; -#endif - } else if (frame_parms[0]->N_RB_DL == 6) { - sample_rate = 1.92e6; -#ifndef EXMIMO - openair0_cfg[0].samples_per_packet = 256; - samples_per_frame = 19200; - tx_forward_nsamps = 40; - tx_delay = 8; -#endif - } + for (card=0; cardN_RB_DL == 100) { + sample_rate = 30.72e6; + bw = 10.0e6; +#ifndef EXMIMO + openair0_cfg[card].sample_rate=30.72e6; + openair0_cfg[card].samples_per_packet = 2048; + openair0_cfg[card].samples_per_frame = 307200; + openair0_cfg[card].tx_bw = 10e6; + openair0_cfg[card].rx_bw = 10e6; + // from usrp_time_offset + openair0_cfg[card].tx_forward_nsamps = 175; + openair0_cfg[card].tx_delay = 8; +#endif + } else if(frame_parms[0]->N_RB_DL == 50) { + sample_rate = 15.36e6; + bw = 5.0e6; +#ifndef EXMIMO + openair0_cfg[card].sample_rate=15.36e6; + openair0_cfg[card].samples_per_packet = 2048; + openair0_cfg[card].samples_per_frame = 153600; + openair0_cfg[card].tx_bw = 5e6; + openair0_cfg[card].rx_bw = 5e6; + openair0_cfg[card].tx_forward_nsamps = 95; + openair0_cfg[card].tx_delay = 5; +#endif + } else if (frame_parms[0]->N_RB_DL == 25) { + sample_rate = 7.68e6; + bw = 2.5e6; +#ifndef EXMIMO + openair0_cfg[card].sample_rate=7.68e6; + openair0_cfg[card].samples_per_frame = 76800; + openair0_cfg[card].tx_bw = 2.5e6; + openair0_cfg[card].rx_bw = 2.5e6; + openair0_cfg[card].samples_per_packet = 1024; +#ifdef OAI_USRP + openair0_cfg[card].tx_forward_nsamps = 70; + openair0_cfg[card].tx_delay = 5; +#elif OAI_BLADERF + openair0_cfg[card].tx_forward_nsamps = 0; + openair0_cfg[card].tx_delay = 8; +#endif +#endif + } else if (frame_parms[0]->N_RB_DL == 6) { + sample_rate = 1.92e6; + bw = 0.96e6; +#ifndef EXMIMO + openair0_cfg[card].sample_rate=1.92e6; + openair0_cfg[card].samples_per_packet = 256; + openair0_cfg[card].samples_per_frame = 19200; + openair0_cfg[card].tx_bw = 1.5e6; + openair0_cfg[card].rx_bw = 1.5e6; + openair0_cfg[card].tx_forward_nsamps = 40; + openair0_cfg[card].tx_delay = 8; +#endif + } + #ifdef ETHERNET - if (frame_parms[0]->N_RB_DL == 6) openair0_cfg[0].samples_per_packet = 256; - else openair0_cfg[0].samples_per_packet = 1536; + //calib needed + openair0_cfg[card].tx_delay = 0; + openair0_cfg[card].tx_forward_nsamps = 0; + + if (frame_parms[0]->N_RB_DL == 6) + openair0_cfg[card].samples_per_packet = 256; + else + openair0_cfg[card].samples_per_packet = 1024; - printf("HW: samples_per_packet %d\n",openair0_cfg[0].samples_per_packet); + printf("HW: samples_per_packet %d\n",openair0_cfg[card].samples_per_packet); #endif - for (card=0; cardN_RB_DL; #endif openair0_cfg[card].sample_rate = sample_rate; openair0_cfg[card].tx_bw = bw; @@ -2794,9 +2949,22 @@ int main( int argc, char **argv ) for (i=0; i<4; i++) { + openair0_cfg[card].tx_freq[i] = (UE_flag==0) ? downlink_frequency[0][i] : downlink_frequency[0][i]+uplink_frequency_offset[0][i]; + openair0_cfg[card].rx_freq[i] = (UE_flag==0) ? downlink_frequency[0][i] + uplink_frequency_offset[0][i] : downlink_frequency[0][i]; + printf("Card %d, channel %d, Setting tx_gain %f, rx_gain %f, tx_freq %f, rx_freq %f\n", + card,i, openair0_cfg[card].tx_gain[i], + openair0_cfg[card].rx_gain[i], + openair0_cfg[card].tx_freq[i], + openair0_cfg[card].rx_freq[i]); + + openair0_cfg[card].autocal[i] = 1; openair0_cfg[card].tx_gain[i] = tx_gain[0][i]; - openair0_cfg[card].rx_gain[i] = ((UE_flag==0) ? PHY_vars_eNB_g[0][0]->rx_total_gain_eNB_dB : - PHY_vars_UE_g[0][0]->rx_total_gain_dB) - USRP_GAIN_OFFSET; // calibrated for USRP B210 @ 2.6 GHz, 30.72 MS/s + if (UE_flag == 0) { + openair0_cfg[card].rx_gain[i] = PHY_vars_eNB_g[0][0]->rx_total_gain_eNB_dB; + } + else { + openair0_cfg[card].rx_gain[i] = PHY_vars_UE_g[0][0]->rx_total_gain_dB;// - USRP_GAIN_OFFSET; // calibrated for USRP B210 @ 2.6 GHz, 30.72 MS/s + } switch(frame_parms[0]->N_RB_DL) { case 6: @@ -2815,26 +2983,23 @@ int main( int argc, char **argv ) break; } - openair0_cfg[card].tx_freq[i] = (UE_flag==0) ? downlink_frequency[0][i] : downlink_frequency[0][i]+uplink_frequency_offset[0][i]; - openair0_cfg[card].rx_freq[i] = (UE_flag==0) ? downlink_frequency[0][i] + uplink_frequency_offset[0][i] : downlink_frequency[0][i]; - printf("Card %d, channel %d, Setting tx_gain %f, rx_gain %f, tx_freq %f, rx_freq %f\n", - card,i, openair0_cfg[card].tx_gain[i], - openair0_cfg[card].rx_gain[i], - openair0_cfg[card].tx_freq[i], - openair0_cfg[card].rx_freq[i]); } #endif } - printf("Initializing openair0 ..."); + openair0.func_type = BBU_FUNC; openair0_cfg[0].log_level = glog_level; - if (openair0_device_init(&openair0, &openair0_cfg[0]) <0) { + + if ((mode!=loop_through_memory) && + (openair0_device_init(&openair0, &openair0_cfg[0]) <0)) { printf("Exiting, cannot initialize device\n"); exit(-1); } - + else if (mode==loop_through_memory) { + } + printf("Done\n"); mac_xface = malloc(sizeof(MAC_xface)); @@ -2904,8 +3069,11 @@ int main( int argc, char **argv ) // connect the TX/RX buffers if (UE_flag==1) { - openair_daq_vars.timing_advance = 0;//170; - +#ifdef OAI_USRP + openair_daq_vars.timing_advance = 160; +#else + openair_daq_vars.timing_advance = 160; +#endif if (setup_ue_buffers(UE,&openair0_cfg[0],rf_map)!=0) { printf("Error setting up eNB buffer\n"); exit(-1); @@ -2920,6 +3088,13 @@ int main( int argc, char **argv ) UE[CC_id]->lte_ue_common_vars.txdata[aa][i] = 0x00010001; } + if (input_fd) { + printf("Reading in from file to antenna buffer %d\n",0); + fread(UE[0]->lte_ue_common_vars.rxdata[0], + sizeof(int32_t), + frame_parms[0]->samples_per_tti*10, + input_fd); + } //p_exmimo_config->framing.tdd_config = TXRXSWITCH_TESTRX; } else { openair_daq_vars.timing_advance = 0; @@ -3140,10 +3315,14 @@ int main( int argc, char **argv ) #endif #ifndef EXMIMO + #ifndef USRP_DEBUG - openair0.trx_start_func(&openair0); - // printf("returning from usrp start streaming: %llu\n",get_usrp_time(&openair0)); + if (mode!=loop_through_memory) + if (openair0.trx_start_func(&openair0) != 0 ) + LOG_E(HW,"Could not start the device\n"); + #endif + #endif @@ -3258,6 +3437,8 @@ int main( int argc, char **argv ) openair0_stop(0); printf("closing openair0_lib\n"); openair0_close(); +#else + openair0.trx_end_func(&openair0); #endif #ifdef EMOS @@ -3387,17 +3568,18 @@ int setup_eNB_buffers(PHY_VARS_eNB **phy_vars_eNB, openair0_config_t *openair0_c for (i=0; inb_antennas_rx; i++) { free(phy_vars_eNB[CC_id]->lte_eNB_common_vars.rxdata[0][i]); - rxdata[i] = (int32_t*)(16 + malloc16(16+samples_per_frame*sizeof(int32_t))); - phy_vars_eNB[CC_id]->lte_eNB_common_vars.rxdata[0][i] = rxdata[i]-N_TA_offset; // N_TA offset for TDD - memset(rxdata[i], 0, samples_per_frame*sizeof(int32_t)); + rxdata[i] = (int32_t*)(32 + malloc16(32+openair0_cfg[rf_map[CC_id].card].samples_per_frame*sizeof(int32_t))); // FIXME broken memory allocation + phy_vars_eNB[CC_id]->lte_eNB_common_vars.rxdata[0][i] = rxdata[i]-N_TA_offset; // N_TA offset for TDD FIXME! N_TA_offset > 16 => access of unallocated memory + memset(rxdata[i], 0, openair0_cfg[rf_map[CC_id].card].samples_per_frame*sizeof(int32_t)); printf("rxdata[%d] @ %p (%p) (N_TA_OFFSET %d)\n", i, phy_vars_eNB[CC_id]->lte_eNB_common_vars.rxdata[0][i],rxdata[i],N_TA_offset); + } for (i=0; inb_antennas_tx; i++) { free(phy_vars_eNB[CC_id]->lte_eNB_common_vars.txdata[0][i]); - txdata[i] = (int32_t*)(16 + malloc16(16 + samples_per_frame*sizeof(int32_t))); + txdata[i] = (int32_t*)(32 + malloc16(32 + openair0_cfg[rf_map[CC_id].card].samples_per_frame*sizeof(int32_t))); // FIXME broken memory allocation phy_vars_eNB[CC_id]->lte_eNB_common_vars.txdata[0][i] = txdata[i]; - memset(txdata[i], 0, samples_per_frame*sizeof(int32_t)); + memset(txdata[i],0, openair0_cfg[rf_map[CC_id].card].samples_per_frame*sizeof(int32_t)); printf("txdata[%d] @ %p\n", i, phy_vars_eNB[CC_id]->lte_eNB_common_vars.txdata[0][i]); } @@ -3408,26 +3590,27 @@ int setup_eNB_buffers(PHY_VARS_eNB **phy_vars_eNB, openair0_config_t *openair0_c return(0); } -void reset_opp_meas(void) -{ +void reset_opp_meas(void) { int sfn; reset_meas(&softmodem_stats_mt); reset_meas(&softmodem_stats_hw); - + for (sfn=0; sfn < 10; sfn++) { reset_meas(&softmodem_stats_tx_sf[sfn]); reset_meas(&softmodem_stats_rx_sf[sfn]); } } -void print_opp_meas(void) -{ +void print_opp_meas(void) { + int sfn=0; print_meas(&softmodem_stats_mt, "Main ENB Thread", NULL, NULL); print_meas(&softmodem_stats_hw, "HW Acquisation", NULL, NULL); - + for (sfn=0; sfn < 10; sfn++) { print_meas(&softmodem_stats_tx_sf[sfn],"[eNB][total_phy_proc_tx]",NULL, NULL); print_meas(&softmodem_stats_rx_sf[sfn],"[eNB][total_phy_proc_rx]",NULL,NULL); } } + + diff --git a/targets/RT/USER/lte-ue.c b/targets/RT/USER/lte-ue.c index fd8a6dcfac..7c82b7976c 100644 --- a/targets/RT/USER/lte-ue.c +++ b/targets/RT/USER/lte-ue.c @@ -119,9 +119,8 @@ extern int oai_exit; extern int32_t **rxdata; extern int32_t **txdata; -extern unsigned int samples_per_frame; -extern unsigned int tx_forward_nsamps; -extern int tx_delay; +//extern unsigned int tx_forward_nsamps; +//extern int tx_delay; extern int rx_input_level_dBm; extern uint8_t exit_missed_slots; @@ -176,9 +175,9 @@ static const eutra_band_t eutra_bands[] = { {12, 698 * MHz, 716 * MHz, 728 * MHz, 746 * MHz, FDD}, {13, 777 * MHz, 787 * MHz, 746 * MHz, 756 * MHz, FDD}, {14, 788 * MHz, 798 * MHz, 758 * MHz, 768 * MHz, FDD}, - {17, 704 * MHz, 716 * MHz, 734 * MHz, 746 * MHz, FDD}, {20, 832 * MHz, 862 * MHz, 791 * MHz, 821 * MHz, FDD}, + {22, 3510 * MHz, 3590 * MHz, 3410 * MHz, 3490 * MHz, FDD}, {33, 1900 * MHz, 1920 * MHz, 1900 * MHz, 1920 * MHz, TDD}, {34, 2010 * MHz, 2025 * MHz, 2010 * MHz, 2025 * MHz, TDD}, {35, 1850 * MHz, 1910 * MHz, 1850 * MHz, 1910 * MHz, TDD}, @@ -206,10 +205,11 @@ static void *UE_thread_synch(void *arg) PHY_VARS_UE *UE = (PHY_VARS_UE*) arg; int current_band = 0; int current_offset = 0; - sync_mode_t sync_mode = pss; + sync_mode_t sync_mode = pbch; int card; int ind; int found; + int freq_offset=0; UE->is_synchronized = 0; printf("UE_thread_sync in with PHY_vars_UE %p\n",arg); @@ -224,7 +224,7 @@ static void *UE_thread_synch(void *arg) pthread_mutex_unlock(&sync_mutex); printf("unlocked sync_mutex (UE_sync_thread)\n"); - printf("starting UE synch thread\n"); + printf("starting UE synch thread (IC %d)\n",UE->instance_cnt_synch); ind = 0; found = 0; @@ -232,7 +232,7 @@ static void *UE_thread_synch(void *arg) if (UE->UE_scan == 0) { do { current_band = eutra_bands[ind].band; - printf( "Scanning band %d, dl_min %"PRIu32"\n", current_band, eutra_bands[ind].dl_min ); + printf( "Scanning band %d, dl_min %"PRIu32", ul_min %"PRIu32"\n", current_band, eutra_bands[ind].dl_min,eutra_bands[ind].ul_min); if ((eutra_bands[ind].dl_min <= downlink_frequency[0][0]) && (eutra_bands[ind].dl_max >= downlink_frequency[0][0])) { for (card=0; cardUE_scan == 1) { current_band=0; @@ -275,8 +277,9 @@ static void *UE_thread_synch(void *arg) openair0_cfg[card].rx_freq[i] = downlink_frequency[card][i]; openair0_cfg[card].tx_freq[i] = downlink_frequency[card][i]+uplink_frequency_offset[card][i]; #ifdef OAI_USRP - openair0_cfg[card].rx_gain[i] = UE->rx_total_gain_dB-USRP_GAIN_OFFSET; + openair0_cfg[card].rx_gain[i] = UE->rx_total_gain_dB;//-USRP_GAIN_OFFSET; + switch(UE->lte_frame_parms.N_RB_DL) { case 6: openair0_cfg[card].rx_gain[i] -= 12; @@ -290,24 +293,20 @@ static void *UE_thread_synch(void *arg) openair0_cfg[card].rx_gain[i] -= 3; break; + case 100: + openair0_cfg[card].rx_gain[i] -= 0; + break; + default: printf( "Unknown number of RBs %d\n", UE->lte_frame_parms.N_RB_DL ); break; } - + printf( "UE synch: setting RX gain (%d,%d) to %f\n", card, i, openair0_cfg[card].rx_gain[i] ); #endif } - -#ifdef EXMIMO - //openair0_config(&openair0_cfg[card],1); -#endif } -#if defined(OAI_USRP) && !defined(USRP_DEBUG) - openair0_set_frequencies( &openair0, &openair0_cfg[0] ); - openair0_set_gains( &openair0, &openair0_cfg[0] ); -#endif } while (oai_exit==0) { @@ -317,6 +316,7 @@ static void *UE_thread_synch(void *arg) exit_fun("noting to add"); return &UE_thread_synch_retval; } + while (UE->instance_cnt_synch < 0) { // the thread waits here most of the time @@ -353,11 +353,11 @@ static void *UE_thread_synch(void *arg) uplink_frequency_offset[card][i] = bands_to_scan.band_info[current_band].ul_min-bands_to_scan.band_info[0].dl_min + current_offset; - openair0_cfg[card].rx_freq[i] = downlink_frequency[card][i]+openair_daq_vars.freq_offset; - openair0_cfg[card].tx_freq[i] = downlink_frequency[card][i]+uplink_frequency_offset[card][i]+openair_daq_vars.freq_offset; + openair0_cfg[card].rx_freq[i] = downlink_frequency[card][i]; + openair0_cfg[card].tx_freq[i] = downlink_frequency[card][i]+uplink_frequency_offset[card][i]; #ifdef OAI_USRP - openair0_cfg[card].rx_gain[i] = UE->rx_total_gain_dB-USRP_GAIN_OFFSET; // 65 calibrated for USRP B210 @ 2.6 GHz - + openair0_cfg[card].rx_gain[i] = UE->rx_total_gain_dB;//-USRP_GAIN_OFFSET; // 65 calibrated for USRP B210 @ 2.6 GHz + switch(UE->lte_frame_parms.N_RB_DL) { case 6: openair0_cfg[card].rx_gain[i] -= 12; @@ -371,75 +371,165 @@ static void *UE_thread_synch(void *arg) openair0_cfg[card].rx_gain[i] -= 3; break; + case 100: + openair0_cfg[card].rx_gain[i] -= 0; + break; + default: printf("Unknown number of RBs %d\n",UE->lte_frame_parms.N_RB_DL); break; } + printf("UE synch: setting RX gain (%d,%d) to %f\n",card,i,openair0_cfg[card].rx_gain[i]); #endif } -#ifdef EXMIMO - //openair0_config(&openair0_cfg[card],1); -#endif } -#ifdef OAI_USRP -#ifndef USRP_DEBUG - openair0_set_frequencies(&openair0,&openair0_cfg[0]); - // openair0_set_gains(&openair0,&openair0_cfg[0]); -#endif -#endif + if (UE->UE_scan_carrier) { + + for (i=0;ilte_ue_common_vars.rxdata[0],0,1024); + if (initial_sync( UE, UE->mode ) == 0) { - UE->is_synchronized = 1; -#ifndef EXMIMO - UE->slot_rx = 0; - UE->slot_tx = 4; -#else - UE->slot_rx = 18; - UE->slot_tx = 2; -#endif + hw_slot_offset = (UE->rx_offset<<1) / UE->lte_frame_parms.samples_per_tti; LOG_I( HW, "Got synch: hw_slot_offset %d\n", hw_slot_offset ); + if (UE->UE_scan_carrier == 1) { + UE->UE_scan_carrier = 0; + // rerun with new cell parameters and frequency-offset + for (i=0;ilte_ue_common_vars.freq_offset; + openair0_cfg[0].tx_freq[i] = openair0_cfg[0].rx_freq[i]+uplink_frequency_offset[0][i]; + downlink_frequency[0][i] = openair0_cfg[0].rx_freq[i]; + freq_offset=0; + } + + // reconfigure for potentially different bandwidth + switch(UE->lte_frame_parms.N_RB_DL) { + case 6: + openair0_cfg[0].sample_rate =1.92e6; + openair0_cfg[0].rx_bw =.96e6; + openair0_cfg[0].tx_bw =.96e6; + openair0_cfg[0].rx_gain[0] -= 12; + break; + case 25: + openair0_cfg[0].sample_rate =7.68e6; + openair0_cfg[0].rx_bw =2.5e6; + openair0_cfg[0].tx_bw =2.5e6; + openair0_cfg[0].rx_gain[0] -= 6; + break; + case 50: + openair0_cfg[0].sample_rate =15.36e6; + openair0_cfg[0].rx_bw =5.0e6; + openair0_cfg[0].tx_bw =5.0e6; + openair0_cfg[0].rx_gain[0] -= 3; + break; + case 100: + openair0_cfg[0].sample_rate=30.72e6; + openair0_cfg[0].rx_bw=10.0e6; + openair0_cfg[0].tx_bw=10.0e6; + openair0_cfg[0].rx_gain[0] -= 0; + break; + } +#ifndef EXMIMO + openair0.trx_set_freq_func(&openair0,&openair0_cfg[0],0); + openair0.trx_set_gains_func(&openair0,&openair0_cfg[0]); + openair0.trx_stop_func(0); +#else + openair0_set_frequencies(&openair0,&openair0_cfg[0],0); + openair0_set_gains(&openair0,&openair0_cfg[0]); + openair0_stop(0); +#endif + sleep(1); + init_frame_parms(&UE->lte_frame_parms,1); + } + else { + UE->is_synchronized = 1; + + if( UE->mode == rx_dump_frame ){ + FILE *fd; + if ((UE->frame_rx&1) == 0) { // this guarantees SIB1 is present + if (fd = fopen("rxsig_frame0.dat","w")) { + fwrite((void*)&UE->lte_ue_common_vars.rxdata[0][0], + sizeof(int32_t), + 10*UE->lte_frame_parms.samples_per_tti, + fd); + LOG_I(PHY,"Dummping Frame ... bye bye \n"); + fclose(fd); + exit(0); + } + else { + LOG_E(PHY,"Cannot open file for writing\n"); + exit(0); + } + } + else { + UE->is_synchronized = 0; + } + } + + +#ifndef EXMIMO + UE->slot_rx = 0; + UE->slot_tx = 4; +#else + UE->slot_rx = 18; + UE->slot_tx = 2; +#endif + } } else { // initial sync failed // calculate new offset and try again - if (openair_daq_vars.freq_offset >= 0) { - openair_daq_vars.freq_offset += 100; - openair_daq_vars.freq_offset *= -1; - } else { - openair_daq_vars.freq_offset *= -1; - } - - if (abs(openair_daq_vars.freq_offset) > 7500) { - LOG_I( PHY, "[initial_sync] No cell synchronization found, abandoning\n" ); - mac_xface->macphy_exit("No cell synchronization found, abandoning"); - return &UE_thread_synch_retval; // not reached - } - - LOG_I( PHY, "[initial_sync] trying carrier off %d Hz, rxgain %d (DL %u, UL %u)\n", openair_daq_vars.freq_offset, + if (UE->UE_scan_carrier == 1) { + if (freq_offset >= 0) { + freq_offset += 100; + freq_offset *= -1; + } else { + freq_offset *= -1; + } + + if (abs(freq_offset) > 7500) { + LOG_I( PHY, "[initial_sync] No cell synchronization found, abandoning\n" ); + mac_xface->macphy_exit("No cell synchronization found, abandoning"); + return &UE_thread_synch_retval; // not reached + } + } + else { + + } + LOG_I( PHY, "[initial_sync] trying carrier off %d Hz, rxgain %d (DL %u, UL %u)\n", + freq_offset, UE->rx_total_gain_dB, - downlink_frequency[0][0]+openair_daq_vars.freq_offset, - downlink_frequency[0][0]+uplink_frequency_offset[0][0]+openair_daq_vars.freq_offset ); + downlink_frequency[0][0]+freq_offset, + downlink_frequency[0][0]+uplink_frequency_offset[0][0]+freq_offset ); for (card=0; cardrx_total_gain_dB-USRP_GAIN_OFFSET; - + openair0_cfg[card].rx_gain[i] = UE->rx_total_gain_dB;//-USRP_GAIN_OFFSET; + + +#ifndef EXMIMO + openair0.trx_set_freq_func(&openair0,&openair0_cfg[0],0); + +#else + openair0_set_frequencies(&openair0,&openair0_cfg[0],0); + +#endif switch(UE->lte_frame_parms.N_RB_DL) { case 6: openair0_cfg[card].rx_gain[i] -= 12; @@ -450,22 +540,27 @@ static void *UE_thread_synch(void *arg) break; case 50: - openair0_cfg[card].rx_gain[i] -= 3; + openair0_cfg[card].rx_gain[i] -= 0;//3; + break; + + case 100: + openair0_cfg[card].rx_gain[i] -= 0; break; default: printf("Unknown number of RBs %d\n",UE->lte_frame_parms.N_RB_DL); break; } - + #endif } } - -#if defined(OAI_USRP) && !defined(USRP_DEBUG) - openair0_set_frequencies( &openair0, &openair0_cfg[0] ); -#endif - } // initial_sync=0 + if (UE->UE_scan_carrier==1) { + for (i=0;imutex_synch) != 0) { LOG_E( PHY, "[SCHED][UE] error locking mutex for UE synch\n" ); exit_fun("noting to add"); @@ -533,17 +630,22 @@ static void *UE_thread_tx(void *arg) attr.sched_priority = 0; /* This creates a 1ms reservation every 10ms period*/ - attr.sched_policy = SCHED_DEADLINE; - attr.sched_runtime = 1 * 500000; // each tx thread requires .5ms to finish its job - attr.sched_deadline =1 * 1000000; // each tx thread will finish within 1ms - attr.sched_period = 1 * 1000000; // each tx thread has a period of 1ms from the starting point + attr.sched_policy = SCHED_DEADLINE; + attr.sched_runtime = 900000; // each tx thread requires .5ms to finish its job + attr.sched_deadline = 1000000; // each tx thread will finish within 1ms + attr.sched_period = 1000000; // each tx thread has a period of 1ms from the starting point if (sched_setattr(0, &attr, flags) < 0 ) { - perror("[SCHED] eNB tx thread: sched_setattr failed\n"); + perror("[SCHED] UE_thread_tx thread: sched_setattr failed\n"); return &UE_thread_tx_retval; } +#else + struct sched_param sp; + sp.sched_priority = sched_get_priority_max(SCHED_FIFO)-1; + pthread_setschedparam(pthread_self(),SCHED_FIFO,&sp); + #endif #endif @@ -581,6 +683,7 @@ static void *UE_thread_tx(void *arg) exit_fun("nothing to add"); return &UE_thread_tx_retval; } + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_UE_THREAD_TX, 1 ); if ((subframe_select( &UE->lte_frame_parms, UE->slot_tx>>1 ) == SF_UL) || (UE->lte_frame_parms.frame_type == FDD)) { @@ -592,48 +695,6 @@ static void *UE_thread_tx(void *arg) phy_procedures_UE_S_TX( UE, 0, 0, no_relay ); } -#ifdef OPENAIR2 - - if (UE->lte_frame_parms.frame_type == TDD) { - - ret = mac_xface->ue_scheduler(UE->Mod_id, - UE->frame_tx, - UE->slot_rx>>1, - subframe_select(&UE->lte_frame_parms,UE->slot_tx>>1), - 0, - 0/*FIXME CC_id*/); - - if (ret == CONNECTION_LOST) { - LOG_E( PHY, "[UE %"PRIu8"] Frame %"PRIu32", subframe %u RRC Connection lost, returning to PRACH\n", - UE->Mod_id, UE->frame_rx /*FIXME really _rx?*/, UE->slot_tx>>1 ); - UE->UE_mode[0] = PRACH; - } else if (ret == PHY_RESYNCH) { - LOG_E( PHY, "[UE %"PRIu8"] Frame %"PRIu32", subframe %u RRC Connection lost, trying to resynch\n", - UE->Mod_id, UE->frame_rx /*FIXME really _rx?*/, UE->slot_tx>>1 ); - UE->UE_mode[0] = RESYNCH; - } else if (ret == PHY_HO_PRACH) { - LOG_I( PHY, "[UE %"PRIu8"] Frame %"PRIu32", subframe %u, return to PRACH and perform a contention-free access\n", - UE->Mod_id, UE->frame_rx /*FIXME really _rx?*/, UE->slot_tx>>1 ); - UE->UE_mode[0] = PRACH; - } - } - -#endif - - if (pthread_mutex_lock(&UE->mutex_tx) != 0) { - LOG_E( PHY, "[SCHED][UE] error locking mutex for UE TX thread\n" ); - exit_fun("nothing to add"); - return &UE_thread_tx_retval; - } - - UE->instance_cnt_tx--; - - if (pthread_mutex_unlock(&UE->mutex_tx) != 0) { - LOG_E( PHY, "[SCHED][UE] error unlocking mutex for UE TX thread\n" ); - exit_fun("nothing to add"); - return &UE_thread_tx_retval; - } - UE->slot_tx += 2; if (UE->slot_tx >= 20) { @@ -643,6 +704,24 @@ static void *UE_thread_tx(void *arg) } VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_SUBFRAME_NUMBER_TX_UE, UE->slot_tx>>1 ); + + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_UE_THREAD_TX, 0 ); + + if (pthread_mutex_lock(&UE->mutex_tx) != 0) { + LOG_E( PHY, "[SCHED][UE] error locking mutex for UE TX thread\n" ); + exit_fun("nothing to add"); + return &UE_thread_tx_retval; + } + + UE->instance_cnt_tx--; + VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_UE_INST_CNT_TX, UE->instance_cnt_tx); + + if (pthread_mutex_unlock(&UE->mutex_tx) != 0) { + LOG_E( PHY, "[SCHED][UE] error unlocking mutex for UE TX thread\n" ); + exit_fun("nothing to add"); + return &UE_thread_tx_retval; + } + } return &UE_thread_tx_retval; @@ -654,6 +733,29 @@ static void *UE_thread_tx(void *arg) * \param arg is a pointer to a \ref PHY_VARS_UE structure. * \returns a pointer to an int. The storage is not on the heap and must not be freed. */ + +/* +#ifdef OAI_USRP +void rescale(int16_t *input,int length) +{ +#if defined(__x86_64__) || defined(__i386__) + __m128i *input128 = (__m128i *)input; +#elif defined(__arm__) + int16x8_t *input128 = (int16x8_t *)input; +#endif + int i; + + for (i=0; i>2; i++) { +#if defined(__x86_64__) || defined(__i386__) + input128[i] = _mm_srai_epi16(input128[i],4); +#elif defined(__arm__) + input128[i] = vshrq_n_s16(input128[i],4); +#endif + } +} +#endif +*/ + static void *UE_thread_rx(void *arg) { static int UE_thread_rx_retval; @@ -683,17 +785,22 @@ static void *UE_thread_rx(void *arg) attr.sched_nice = 0; attr.sched_priority = 0; - // This creates a 1ms reservation every 10ms period - attr.sched_policy = SCHED_DEADLINE; - attr.sched_runtime = 1 * 500000; // each rx thread requires 1ms to finish its job - attr.sched_deadline =1 * 1000000; // each rx thread will finish within 1ms - attr.sched_period = 1 * 1000000; // each rx thread has a period of 1ms from the starting point + // This creates a .5ms reservation every 1ms period + attr.sched_policy = SCHED_DEADLINE; + attr.sched_runtime = 900000; // each rx thread requires 1ms to finish its job + attr.sched_deadline = 1000000; // each rx thread will finish within 1ms + attr.sched_period = 1000000; // each rx thread has a period of 1ms from the starting point if (sched_setattr(0, &attr, flags) < 0 ) { - perror("[SCHED] eNB tx thread: sched_setattr failed\n"); + perror("[SCHED] UE_thread_rx : sched_setattr failed\n"); return &UE_thread_rx_retval; } +#else + struct sched_param sp; + sp.sched_priority = sched_get_priority_max(SCHED_FIFO)-1; + pthread_setschedparam(pthread_self(),SCHED_FIFO,&sp); + #endif #endif @@ -731,14 +838,86 @@ static void *UE_thread_rx(void *arg) return &UE_thread_rx_retval; } + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_UE_THREAD_RX, 1 ); for (i=0; i<2; i++) { if ((subframe_select( &UE->lte_frame_parms, UE->slot_rx>>1 ) == SF_DL) || (UE->lte_frame_parms.frame_type == FDD)) { + /* +#ifdef OAI_USRP + // this does the adjustments of RX signal amplitude to bring into least 12 significant bits + int slot_length = UE->lte_frame_parms.samples_per_tti>>1; + int rx_offset = (UE->slot_rx)*slot_length + UE->rx_offset; + int frame_length = UE->lte_frame_parms.samples_per_tti*10; + int aa; + if (rx_offset > frame_length) + rx_offset-=frame_length; + + + if (rx_offset >= 0) { + if (rx_offset + slot_length < frame_length) + for (aa=0;aalte_frame_parms.nb_antennas_rx;aa++) + rescale((int16_t*)&UE->lte_ue_common_vars.rxdata[aa][rx_offset&(~0x3)], + slot_length); + else { + int diff = rx_offset + slot_length - frame_length; + for (aa=0;aalte_frame_parms.nb_antennas_rx;aa++){ + rescale((int16_t*)&UE->lte_ue_common_vars.rxdata[aa][rx_offset&(~0x3)], + slot_length-diff); + rescale((int16_t*)&UE->lte_ue_common_vars.rxdata[aa][0], + diff); + } + } + } + else { + for (aa=0;aalte_frame_parms.nb_antennas_rx;aa++){ + rescale((int16_t*)&UE->lte_ue_common_vars.rxdata[aa][(frame_length+rx_offset)&(~0x3)], + -rx_offset); + rescale((int16_t*)&UE->lte_ue_common_vars.rxdata[aa][0], + slot_length+rx_offset); + } + } +#endif + */ phy_procedures_UE_RX( UE, 0, 0, UE->mode, no_relay, NULL ); } if ((subframe_select( &UE->lte_frame_parms, UE->slot_rx>>1 ) == SF_S) && ((UE->slot_rx&1) == 0)) { + /* +#ifdef OAI_USRP + // this does the adjustments of RX signal amplitude to bring into least 12 significant bits + int slot_length = UE->lte_frame_parms.samples_per_tti>>1; + int rx_offset = (UE->slot_rx)*slot_length + UE->rx_offset; + int frame_length = UE->lte_frame_parms.samples_per_tti*10; + if (rx_offset > frame_length) + rx_offset-=frame_length; + int aa; + + if (rx_offset >= 0) { + if (rx_offset + slot_length < frame_length) + for (aa=0;aalte_frame_parms.nb_antennas_rx;aa++) + rescale((int16_t*)&UE->lte_ue_common_vars.rxdata[aa][rx_offset&(~0x3)], + slot_length); + else { + int diff = rx_offset + slot_length - frame_length; + for (aa=0;aalte_frame_parms.nb_antennas_rx;aa++){ + rescale((int16_t*)&UE->lte_ue_common_vars.rxdata[aa][rx_offset&(~0x3)], + slot_length-diff); + rescale((int16_t*)&UE->lte_ue_common_vars.rxdata[aa][0], + diff); + } + } + } + else { + for (aa=0;aalte_frame_parms.nb_antennas_rx;aa++){ + rescale((int16_t*)&UE->lte_ue_common_vars.rxdata[aa][(frame_length+rx_offset)&(~0x3)], + -rx_offset); + rescale((int16_t*)&UE->lte_ue_common_vars.rxdata[aa][0], + slot_length+rx_offset); + } + } +#endif + */ phy_procedures_UE_RX( UE, 0, 0, UE->mode, no_relay, NULL ); } @@ -778,6 +957,7 @@ static void *UE_thread_rx(void *arg) VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_SUBFRAME_NUMBER_RX_UE, UE->slot_rx>>1 ); } + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_UE_THREAD_RX, 0 ); if (pthread_mutex_lock(&UE->mutex_rx) != 0) { LOG_E( PHY, "[SCHED][UE] error locking mutex for UE RX\n" ); @@ -786,6 +966,7 @@ static void *UE_thread_rx(void *arg) } UE->instance_cnt_rx--; + VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_UE_INST_CNT_RX, UE->instance_cnt_rx); if (pthread_mutex_unlock(&UE->mutex_rx) != 0) { LOG_E( PHY, "[SCHED][UE] error unlocking mutex for UE RX\n" ); @@ -821,8 +1002,12 @@ void *UE_thread(void *arg) static int UE_thread_retval; PHY_VARS_UE *UE = PHY_vars_UE_g[0][0]; int spp = openair0_cfg[0].samples_per_packet; - int slot=1, frame=0, hw_subframe=0, rxpos=0, txpos=0; - int dummy[2][spp]; + int slot=1, frame=0, hw_subframe=0, rxpos=0, txpos=spp*openair0_cfg[0].tx_delay; +#ifdef __AVX2__ + int dummy[2][spp] __attribute__((aligned(32))); +#else + int dummy[2][spp] __attribute__((aligned(16))); +#endif int dummy_dump = 0; int tx_enabled = 0; int start_rx_stream = 0; @@ -830,6 +1015,7 @@ void *UE_thread(void *arg) int rx_correction_timer = 0; int first_rx = 0; RTIME T0; + unsigned int rxs; openair0_timestamp timestamp; @@ -850,23 +1036,26 @@ void *UE_thread(void *arg) attr.size = sizeof(attr); attr.sched_flags = 0; attr.sched_nice = 0; - attr.sched_priority = 0; + attr.sched_priority = 0;//sched_get_priority_max(SCHED_DEADLINE); // This creates a .5 ms reservation attr.sched_policy = SCHED_DEADLINE; - attr.sched_runtime = 0.25 * 1000000; - attr.sched_deadline = 0.25 * 1000000; - attr.sched_period = 0.5 * 1000000; + attr.sched_runtime = 100000; + attr.sched_deadline = 500000; + attr.sched_period = 500000; if (sched_setattr(0, &attr, flags) < 0 ) { perror("[SCHED] main eNB thread: sched_setattr failed\n"); exit_fun("Nothing to add"); return &UE_thread_retval; } - LOG_I(HW,"[SCHED][eNB] eNB main deadline thread %lu started on CPU %d\n", (unsigned long)gettid(), sched_getcpu()); +#else + struct sched_param sp; + sp.sched_priority = sched_get_priority_max(SCHED_FIFO); + pthread_setschedparam(pthread_self(),SCHED_FIFO,&sp); #endif #endif @@ -892,6 +1081,8 @@ void *UE_thread(void *arg) while (!oai_exit) { VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_HW_SUBFRAME, hw_subframe ); VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_HW_FRAME, frame ); + VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_DUMMY_DUMP, dummy_dump ); + while (rxpos < (1+hw_subframe)*UE->lte_frame_parms.samples_per_tti) { VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_READ, 1 ); @@ -903,23 +1094,30 @@ void *UE_thread(void *arg) for (int i=0; ilte_frame_parms.nb_antennas_rx; i++) rxp[i] = (dummy_dump==0) ? (void*)&rxdata[i][rxpos] : (void*)dummy[i]; + /* + if (dummy_dump == 0) + printf("writing %d samples to %d (first_rx %d)\n",spp - ((first_rx==1) ? rx_off_diff : 0),rxpos,first_rx); + */ + if (UE->mode != loop_through_memory) { + rxs = openair0.trx_read_func(&openair0, + ×tamp, + rxp, + spp - ((first_rx==1) ? rx_off_diff : 0), + UE->lte_frame_parms.nb_antennas_rx); - unsigned int rxs = openair0.trx_read_func(&openair0, - ×tamp, - rxp, - spp - ((first_rx==1) ? rx_off_diff : 0), - UE->lte_frame_parms.nb_antennas_rx); - - if (rxs != (spp- ((first_rx==1) ? rx_off_diff : 0))) { - exit_fun("problem in rx"); - return &UE_thread_retval; + if (rxs != (spp- ((first_rx==1) ? rx_off_diff : 0))) { + exit_fun("problem in rx"); + return &UE_thread_retval; + } } - rx_off_diff = 0; + if (rx_off_diff !=0) + LOG_D(PHY,"frame %d, rx_offset %d, rx_off_diff %d\n",UE->frame_rx,UE->rx_offset,rx_off_diff); + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_READ, 0 ); // Transmit TX buffer based on timestamp from RX - if (tx_enabled) { + if ((tx_enabled==1) && (UE->mode!=loop_through_memory)) { VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_WRITE, 1 ); DevAssert( UE->lte_frame_parms.nb_antennas_tx <= 2 ); @@ -929,20 +1127,24 @@ void *UE_thread(void *arg) txp[i] = (void*)&txdata[i][txpos]; openair0.trx_write_func(&openair0, - (timestamp+spp*tx_delay-tx_forward_nsamps), + (timestamp+spp*openair0_cfg[0].tx_delay-openair0_cfg[0].tx_forward_nsamps), txp, - spp, + spp - ((first_rx==1) ? rx_off_diff : 0), UE->lte_frame_parms.nb_antennas_tx, 1); VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_WRITE, 0 ); } - + else if (UE->mode == loop_through_memory) + rt_sleep_ns(1000000); #else // define USRP_DEBUG is active rt_sleep_ns(1000000); #endif + rx_off_diff = 0; + first_rx = 0; + rxpos += spp; txpos += spp; @@ -957,6 +1159,7 @@ void *UE_thread(void *arg) LOG_D( HW, "UE_thread: hw_frame %d, hw_subframe %d (time %lli)\n", frame, hw_subframe, rt_get_time_ns()-T0 ); if (start_rx_stream == 1) { + LOG_D(PHY,"Locking mutex_rx (IC %d)\n",UE->instance_cnt_rx); if (pthread_mutex_lock(&UE->mutex_rx) != 0) { LOG_E( PHY, "[SCHED][UE] error locking mutex for UE RX thread\n" ); exit_fun("nothing to add"); @@ -965,29 +1168,39 @@ void *UE_thread(void *arg) int instance_cnt_rx = ++UE->instance_cnt_rx; + LOG_D(PHY,"Unlocking mutex_rx (IC %d)\n",instance_cnt_rx); if (pthread_mutex_unlock(&UE->mutex_rx) != 0) { LOG_E( PHY, "[SCHED][UE] error unlocking mutex for UE RX thread\n" ); exit_fun("nothing to add"); return &UE_thread_retval; } + VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_UE_INST_CNT_RX, instance_cnt_rx); + + if (instance_cnt_rx == 0) { + LOG_D(HW,"signalling rx thread to wake up, hw_frame %d, hw_subframe %d (time %lli)\n", frame, hw_subframe, rt_get_time_ns()-T0 ); if (pthread_cond_signal(&UE->cond_rx) != 0) { LOG_E( PHY, "[SCHED][UE] ERROR pthread_cond_signal for UE RX thread\n" ); exit_fun("nothing to add"); return &UE_thread_retval; } + + LOG_D(HW,"signalled rx thread to wake up, hw_frame %d, hw_subframe %d (time %lli)\n", frame, hw_subframe, rt_get_time_ns()-T0 ); + if (UE->mode == loop_through_memory) { + printf("Processing subframe %d",UE->slot_rx>>1); + getchar(); + } if (UE->mode == rx_calib_ue) { if (frame == 10) { LOG_D(PHY, - "[SCHED][UE] Found cell with N_RB_DL %"PRIu8", PHICH CONFIG (%d,%d), Nid_cell %"PRIu16", NB_ANTENNAS_TX %"PRIu8", initial frequency offset %"PRIi32" Hz, frequency offset "PRIi32" Hz, RSSI (digital) %hu dB, measured Gain %d dB, total_rx_gain %"PRIu32" dB, USRP rx gain %f dB\n", + "[SCHED][UE] Found cell with N_RB_DL %"PRIu8", PHICH CONFIG (%d,%d), Nid_cell %"PRIu16", NB_ANTENNAS_TX %"PRIu8", frequency offset "PRIi32" Hz, RSSI (digital) %hu dB, measured Gain %d dB, total_rx_gain %"PRIu32" dB, USRP rx gain %f dB\n", UE->lte_frame_parms.N_RB_DL, UE->lte_frame_parms.phich_config_common.phich_duration, UE->lte_frame_parms.phich_config_common.phich_resource, UE->lte_frame_parms.Nid_cell, UE->lte_frame_parms.nb_antennas_tx_eNB, - openair_daq_vars.freq_offset, UE->lte_ue_common_vars.freq_offset, UE->PHY_measurements.rx_power_avg_dB[0], UE->PHY_measurements.rx_power_avg_dB[0] - rx_input_level_dBm, @@ -999,18 +1212,23 @@ void *UE_thread(void *arg) } } } else { - LOG_E( PHY, "[SCHED][UE] UE RX thread busy!!\n" ); - exit_fun("nothing to add"); - return &UE_thread_retval; + LOG_E( PHY, "[SCHED][UE] UE RX thread busy (IC %d)!!\n", instance_cnt_rx); + if (instance_cnt_rx > 1) { + exit_fun("instance_cnt_rx > 1"); + return &UE_thread_retval; + } } - if (pthread_mutex_lock(&UE->mutex_tx) != 0) { - LOG_E( PHY, "[SCHED][UE] error locking mutex for UE TX thread\n" ); - exit_fun("nothing to add"); - return &UE_thread_retval; - } + + if ((tx_enabled==1)&&(UE->mode != loop_through_memory)) { + + if (pthread_mutex_lock(&UE->mutex_tx) != 0) { + LOG_E( PHY, "[SCHED][UE] error locking mutex for UE TX thread\n" ); + exit_fun("nothing to add"); + return &UE_thread_retval; + } + - if (tx_enabled) { int instance_cnt_tx = ++UE->instance_cnt_tx; if (pthread_mutex_unlock(&UE->mutex_tx) != 0) { @@ -1018,6 +1236,8 @@ void *UE_thread(void *arg) exit_fun("nothing to add"); return &UE_thread_retval; } + VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_UE_INST_CNT_TX, instance_cnt_tx); + if (instance_cnt_tx == 0) { if (pthread_cond_signal(&UE->cond_tx) != 0) { @@ -1025,10 +1245,14 @@ void *UE_thread(void *arg) exit_fun("nothing to add"); return &UE_thread_retval; } + LOG_D(HW,"signalled tx thread to wake up, hw_frame %d, hw_subframe %d (time %lli)\n", frame, hw_subframe, rt_get_time_ns()-T0 ); + } else { - LOG_E( PHY, "[SCHED][UE] UE TX thread busy!!\n" ); - exit_fun("nothing to add"); - return &UE_thread_retval; + LOG_E( PHY, "[SCHED][UE] UE TX thread busy (IC %d)!!\n" ); + if (instance_cnt_tx>1) { + exit_fun("instance_cnt_tx > 1"); + return &UE_thread_retval; + } } } @@ -1092,27 +1316,46 @@ void *UE_thread(void *arg) rx_off_diff = 0; LTE_DL_FRAME_PARMS *frame_parms = &UE->lte_frame_parms; // for macro FRAME_LENGTH_COMPLEX_SAMPLES + // LOG_I(PHY,"UE->rx_offset %d\n",UE->rx_offset); if ((UE->rx_offset > RX_OFF_MAX) && (start_rx_stream == 0)) { start_rx_stream=1; frame=0; // dump ahead in time to start of frame #ifndef USRP_DEBUG - unsigned int rxs = openair0.trx_read_func(&openair0, - ×tamp, - (void**)rxdata, - UE->rx_offset, - UE->lte_frame_parms.nb_antennas_rx); + if (UE->mode != loop_through_memory) { + rxs = openair0.trx_read_func(&openair0, + ×tamp, + (void**)rxdata, + UE->rx_offset, + UE->lte_frame_parms.nb_antennas_rx); + if (rxs != UE->rx_offset) { + exit_fun("problem in rx"); + return &UE_thread_retval; + } + UE->rx_offset=0; + tx_enabled = 1; + } + else + rt_sleep_ns(1000000); #else rt_sleep_ns(10000000); #endif - UE->rx_offset=0; - tx_enabled = 1; - } else if ((UE->rx_offset < RX_OFF_MIN) && (start_rx_stream==1) && (rx_correction_timer == 0)) { + + } else if ((UE->rx_offset<(FRAME_LENGTH_COMPLEX_SAMPLES/2)) && + (UE->rx_offset > RX_OFF_MIN) && + (start_rx_stream==1) && + (rx_correction_timer == 0)) { rx_off_diff = -UE->rx_offset + RX_OFF_MIN; + LOG_D(PHY,"UE->rx_offset %d > %d, diff %d\n",UE->rx_offset,RX_OFF_MIN,rx_off_diff); rx_correction_timer = 5; - } else if ((UE->rx_offset > (FRAME_LENGTH_COMPLEX_SAMPLES-RX_OFF_MAX)) && (start_rx_stream==1) && (rx_correction_timer == 0)) { - rx_off_diff = FRAME_LENGTH_COMPLEX_SAMPLES-UE->rx_offset; + } else if ((UE->rx_offset>(FRAME_LENGTH_COMPLEX_SAMPLES/2)) && + (UE->rx_offset < (FRAME_LENGTH_COMPLEX_SAMPLES-RX_OFF_MIN)) && + (start_rx_stream==1) && + (rx_correction_timer == 0)) { // moving to the left so drop rx_off_diff samples + rx_off_diff = FRAME_LENGTH_COMPLEX_SAMPLES - RX_OFF_MIN - UE->rx_offset; + LOG_D(PHY,"UE->rx_offset %d < %d, diff %d\n",UE->rx_offset,FRAME_LENGTH_COMPLEX_SAMPLES-RX_OFF_MIN,rx_off_diff); + rx_correction_timer = 5; } @@ -1159,9 +1402,9 @@ void *UE_thread(void *arg) #ifdef LOWLATENCY struct sched_attr attr; unsigned int flags = 0; - unsigned long mask = 1; // processor 0 + // unsigned long mask = 1; // processor 0 #endif - + int freq_offset; #ifdef RTAI @@ -1188,9 +1431,9 @@ void *UE_thread(void *arg) // This creates a .25 ms reservation attr.sched_policy = SCHED_DEADLINE; - attr.sched_runtime = 0.1 * 1000000; - attr.sched_deadline = 0.25 * 1000000; - attr.sched_period = 0.5 * 1000000; + attr.sched_runtime = (0.1 * 100) * 10000; + attr.sched_deadline = (0.25 * 100) * 10000; + attr.sched_period = (0.5 * 100) * 10000; // pin the UE main thread to CPU0 // if (pthread_setaffinity_np(pthread_self(), sizeof(mask),&mask) <0) { @@ -1223,7 +1466,7 @@ void *UE_thread(void *arg) printf("starting UE thread\n"); - openair_daq_vars.freq_offset = 0; //-7500; + freq_offset = 0; //-7500; first_synch = 1; @@ -1352,11 +1595,13 @@ void *UE_thread(void *arg) exit_fun("nothing to add"); } else { - UE->instance_cnt_rx++; - //printf("UE_thread: Unlocking UE mutex_rx\n"); - pthread_mutex_unlock(&UE->mutex_rx); + int instance_cnt_rx = ++UE->instance_cnt_rx; - if (UE->instance_cnt_rx == 0) { + pthread_mutex_unlock(&UE->mutex_rx); + VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_UE_INST_CNT_RX, instance_cnt_rx); + + + if (instance_cnt_rx == 0) { LOG_D(HW,"Scheduling UE RX for frame %d (hw frame %d), subframe %d (%d), mode %d\n",UE->frame_rx,frame,slot>>1,UE->slot_rx>>1,UE->mode); if (pthread_cond_signal(&UE->cond_rx) != 0) { @@ -1375,7 +1620,7 @@ void *UE_thread(void *arg) UE->lte_frame_parms.phich_config_common.phich_resource, UE->lte_frame_parms.Nid_cell, UE->lte_frame_parms.nb_antennas_tx_eNB, - openair_daq_vars.freq_offset, + freq_offset, UE->lte_ue_common_vars.freq_offset, UE->PHY_measurements.rx_power_avg_dB[0], UE->PHY_measurements.rx_power_avg_dB[0] - rx_input_level_dBm, @@ -1396,11 +1641,12 @@ void *UE_thread(void *arg) exit_fun("nothing to add"); } else { - UE->instance_cnt_tx++; - //printf("UE_thread: Unlocking UE mutex_rx\n"); - pthread_mutex_unlock(&UE->mutex_tx); + int instance_cnt_tx = ++UE->instance_cnt_tx; - if (UE->instance_cnt_tx == 0) { + pthread_mutex_unlock(&UE->mutex_tx); + VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_UE_INST_CNT_TX, instance_cnt_tx); + + if (instance_cnt_tx == 0) { LOG_D(HW,"Scheduling UE TX for frame %d (hw frame %d), subframe %d (%d), mode %d\n",UE->frame_tx,frame,slot>>1,UE->slot_tx>>1,UE->mode); if (pthread_cond_signal(&UE->cond_tx) != 0) { @@ -1439,11 +1685,14 @@ void *UE_thread(void *arg) LOG_E(PHY,"[SCHED][UE] error locking mutex for UE initial synch thread\n"); exit_fun("noting to add"); } else { - //printf("Before getting frame IC %d (UE_thread)\n",UE->instance_cnt_synch); + if (UE->instance_cnt_synch < 0) { wait_sync_cnt=0; + openair0_config(&openair0_cfg[0],1); + // openair0_set_gains(&openair0,&openair0_cfg[0]); + printf("Getting frame\n"); openair0_get_frame(0); rt_sleep_ns(FRAME_PERIOD); // increment instance count for sync thread @@ -1482,25 +1731,25 @@ void *UE_thread(void *arg) } } else { - if (openair_daq_vars.freq_offset >= 0) { - openair_daq_vars.freq_offset += 100; - openair_daq_vars.freq_offset *= -1; + if (freq_offset >= 0) { + freq_offset += 100; + freq_offset *= -1; } else { - openair_daq_vars.freq_offset *= -1; + freq_offset *= -1; } - if (abs(openair_daq_vars.freq_offset) > 7500) { + if (abs(freq_offset) > 7500) { LOG_I(PHY,"[initial_sync] No cell synchronization found, abondoning\n"); mac_xface->macphy_exit("No cell synchronization found, abondoning"); } else { - // LOG_I(PHY,"[initial_sync] trying carrier off %d Hz\n",openair_daq_vars.freq_offset); + // LOG_I(PHY,"[initial_sync] trying carrier off %d Hz\n",freq_offset); #ifndef USRP for (CC_id=0;CC_idlte_frame_parms); } else { - printf("phy_vars_eNB[%d] not initialized\n", CC_id); + printf("phy_vars_UE[%d] not initialized\n", CC_id); return(-1); } @@ -1672,14 +1921,14 @@ int setup_ue_buffers(PHY_VARS_UE **phy_vars_ue, openair0_config_t *openair0_cfg, for (i=0; inb_antennas_rx; i++) { printf( "Mapping UE CC_id %d, rx_ant %d, freq %u on card %d, chain %d\n", CC_id, i, downlink_frequency[CC_id][i], rf_map[CC_id].card, rf_map[CC_id].chain+i ); free( phy_vars_ue[CC_id]->lte_ue_common_vars.rxdata[i] ); - rxdata[i] = (int32_t*)malloc16_clear( samples_per_frame*sizeof(int32_t) ); + rxdata[i] = (int32_t*)malloc16_clear( 307200*sizeof(int32_t) ); phy_vars_ue[CC_id]->lte_ue_common_vars.rxdata[i] = rxdata[i]; // what about the "-N_TA_offset" ? // N_TA offset for TDD } for (i=0; inb_antennas_tx; i++) { printf( "Mapping UE CC_id %d, tx_ant %d, freq %u on card %d, chain %d\n", CC_id, i, downlink_frequency[CC_id][i], rf_map[CC_id].card, rf_map[CC_id].chain+i ); free( phy_vars_ue[CC_id]->lte_ue_common_vars.txdata[i] ); - txdata[i] = (int32_t*)malloc16_clear( samples_per_frame*sizeof(int32_t) ); + txdata[i] = (int32_t*)malloc16_clear( 307200*sizeof(int32_t) ); phy_vars_ue[CC_id]->lte_ue_common_vars.txdata[i] = txdata[i]; } diff --git a/targets/RT/USER/rrh.c b/targets/RT/USER/rrh.c index 77ba378bee..ff4776754b 100644 --- a/targets/RT/USER/rrh.c +++ b/targets/RT/USER/rrh.c @@ -58,8 +58,8 @@ #define RRH_UE_PORT 51000 #define RRH_UE_DEST_IP "127.0.0.1" -#define FRAME_MAX_SIZE 307200 -#define DEFAULT_PERIOD_NS 133333 +#define FRAME_MAX_SIZE 307200//76800 +#define DEFAULT_PERIOD_NS 133333//200000 #define START_CMD 1 #define PRINTF_PERIOD 3750 @@ -1030,9 +1030,10 @@ void *rrh_eNB_thread(void *arg) rrh_eNB_desc.clientaddr = clientaddr; rrh_eNB_desc.clientaddrlen = clientaddrlen; - cmd = cmd&1; + //cmd = cmd&1; + cmd = cmd|1;//in order to make cmd evalution dummy (the first message from lte to rrh has changed, see: @ethernet_lib.c trx_start_func has been substituted by trx_request_func ) inet_ntop(AF_INET, &(((struct sockaddr_in*)&clientaddr)->sin_addr), str, INET_ADDRSTRLEN); - + if (cmd==START_CMD) { pthread_attr_init(&attr_eNB_rx); diff --git a/targets/RT/USER/rrh.gtkw b/targets/RT/USER/rrh.gtkw new file mode 100644 index 0000000000..22a5a9f575 --- /dev/null +++ b/targets/RT/USER/rrh.gtkw @@ -0,0 +1,119 @@ +[*] +[*] GTKWave Analyzer v3.3.58 (w)1999-2014 BSI +[*] Thu Sep 17 14:23:43 2015 +[*] +[dumpfile] "/tmp/openair_dump_rrh.vcd" +[dumpfile_mtime] "Thu Sep 17 14:21:43 2015" +[dumpfile_size] 636509125 +[savefile] "/home/guepe/openair4G/targets/RT/USER/rrh.gtkw" +[timestart] 17746655400 +[size] 1855 1056 +[pos] -1 -1 +*-15.826077 17746846200 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 +[sst_width] 224 +[signals_width] 230 +[sst_expanded] 1 +[sst_vpaned_height] 287 +@24 +[color] 1 +variables.hw_frame_rx[63:0] +[color] 1 +variables.hw_subframe_rx[63:0] +@28 +[color] 1 +functions.eNB_rx +functions.eNB_rx_sleep +functions.trx_write_rf +@c00024 +variables.rxcnt[63:0] +@28 +(0)variables.rxcnt[63:0] +(1)variables.rxcnt[63:0] +(2)variables.rxcnt[63:0] +(3)variables.rxcnt[63:0] +(4)variables.rxcnt[63:0] +(5)variables.rxcnt[63:0] +(6)variables.rxcnt[63:0] +(7)variables.rxcnt[63:0] +(8)variables.rxcnt[63:0] +(9)variables.rxcnt[63:0] +(10)variables.rxcnt[63:0] +(11)variables.rxcnt[63:0] +(12)variables.rxcnt[63:0] +(13)variables.rxcnt[63:0] +(14)variables.rxcnt[63:0] +(15)variables.rxcnt[63:0] +(16)variables.rxcnt[63:0] +(17)variables.rxcnt[63:0] +(18)variables.rxcnt[63:0] +(19)variables.rxcnt[63:0] +(20)variables.rxcnt[63:0] +(21)variables.rxcnt[63:0] +(22)variables.rxcnt[63:0] +(23)variables.rxcnt[63:0] +(24)variables.rxcnt[63:0] +(25)variables.rxcnt[63:0] +(26)variables.rxcnt[63:0] +(27)variables.rxcnt[63:0] +(28)variables.rxcnt[63:0] +(29)variables.rxcnt[63:0] +(30)variables.rxcnt[63:0] +(31)variables.rxcnt[63:0] +(32)variables.rxcnt[63:0] +(33)variables.rxcnt[63:0] +(34)variables.rxcnt[63:0] +(35)variables.rxcnt[63:0] +(36)variables.rxcnt[63:0] +(37)variables.rxcnt[63:0] +(38)variables.rxcnt[63:0] +(39)variables.rxcnt[63:0] +(40)variables.rxcnt[63:0] +(41)variables.rxcnt[63:0] +(42)variables.rxcnt[63:0] +(43)variables.rxcnt[63:0] +(44)variables.rxcnt[63:0] +(45)variables.rxcnt[63:0] +(46)variables.rxcnt[63:0] +(47)variables.rxcnt[63:0] +(48)variables.rxcnt[63:0] +(49)variables.rxcnt[63:0] +(50)variables.rxcnt[63:0] +(51)variables.rxcnt[63:0] +(52)variables.rxcnt[63:0] +(53)variables.rxcnt[63:0] +(54)variables.rxcnt[63:0] +(55)variables.rxcnt[63:0] +(56)variables.rxcnt[63:0] +(57)variables.rxcnt[63:0] +(58)variables.rxcnt[63:0] +(59)variables.rxcnt[63:0] +(60)variables.rxcnt[63:0] +(61)variables.rxcnt[63:0] +(62)variables.rxcnt[63:0] +(63)variables.rxcnt[63:0] +@1401200 +-group_end +@24 +variables.pck_rx[63:0] +variables.hw_frame[63:0] +variables.hw_subframe[63:0] +@28 +[color] 1 +functions.eNB_tx +functions.eNB_tx_sleep +functions.trx_read_rf +[color] 7 +functions.trx_write +[color] 7 +functions.trx_read +@24 +variables.txcnt[63:0] +variables.rx_ts[63:0] +variables.tx_ts[63:0] +variables.hw_cnt_rx[63:0] +variables.lhw_cnt_rx[63:0] +@25 +[color] 3 +variables.cnt[63:0] +[pattern_trace] 1 +[pattern_trace] 0 diff --git a/targets/RT/USER/rrh_gw.c b/targets/RT/USER/rrh_gw.c new file mode 100644 index 0000000000..2ff213b147 --- /dev/null +++ b/targets/RT/USER/rrh_gw.c @@ -0,0 +1,449 @@ + +/******************************************************************************* + OpenAirInterface + Copyright(c) 1999 - 2014 Eurecom + + OpenAirInterface is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + + OpenAirInterface is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with OpenAirInterface.The full GNU General Public License is + included in this distribution in the file called "COPYING". If not, + see . + + Contact Information + OpenAirInterface Admin: openair_admin@eurecom.fr + OpenAirInterface Tech : openair_tech@eurecom.fr + OpenAirInterface Dev : openair4g-devel@eurecom.fr + + Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE + + *******************************************************************************/ + +/*! \file rrh_gw.h + * \brief top-level for the remote radio head gateway (RRH_gw) module reusing the ethernet library + * \author Navid Nikaein, Katerina Trilyraki, Raymond Knopp + * \date 2015 + * \version 0.1 + * \company Eurecom + * \maintainer: navid.nikaein@eurecom.fr + * \note + * \warning very experimental + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "common_lib.h" +#include "rrh_gw.h" // change to rrh_new.h, put externs in rrh_extern.h +#include "rt_wrapper.h" +#include "rrh_gw_externs.h" // change to rrh_new.h, put externs in rrh_extern.h + + +#include "log_if.h" +#include "log_extern.h" +#include "vcd_signal_dumper.h" + +/***************************************************************************************** + * ---------- * + * ------- RRH_BBU_IF ------- RRH_RF_IF -------USRP - COTS_UE- * + * - BBU - --------------- - RRH - ------------- -------BLADERF ---------- * + * ------- ------- -------EXMIMO * + * --------- * + * -------ETH_IF - EMU_UE- * + * --------- * + *****************************************************************************************/ + + + +char rrh_ip[20] = "192.168.12.242"; // there is code to detect the my ip address +int rrh_port = 50000; // has to be an option + +/* log */ +int16_t glog_level = LOG_DEBUG; +int16_t glog_verbosity = LOG_MED; +int16_t rrh_log_level = LOG_INFO; +int16_t rrh_log_verbosity = LOG_MED; +int16_t enb_log_level = LOG_INFO; +int16_t enb_log_verbosity = LOG_MED; +int16_t ue_log_level = LOG_INFO; +int16_t ue_log_verbosity = LOG_MED; + + +/* flags definitions */ +uint8_t eNB_flag=0; +uint8_t UE_flag=0; +uint8_t EXMIMO_flag=0; +uint8_t USRP_flag=0; +uint8_t RT_flag=0, NRT_flag=1; +uint8_t rrh_exit=0; +uint8_t loopback_flag=0; +uint8_t measurements_flag=0; + +/* Default operation as RRH: + - there are neither eNB nor UE modules + - no RF hardware is specified (NONE_IF) + - default ethernet interface is local */ +uint8_t num_eNB_mod=0; +uint8_t num_UE_mod=0; +uint8_t num_EXMIMO_mod=0; +uint8_t num_USRP_mod=0; +uint8_t hardware_target=NONE_IF; +char* if_name="lo"; + +rrh_module_t *enb_array; +rrh_module_t *ue_array; + +openair0_vtimestamp hw_counter=0; + + + + +static void debug_init(void); +static void get_options(int argc, char *argv[]); +static void print_help(void); + +/*!\fn static rrh_module_t new_module(unsigned int id); +* \brief creation of a eNB/UE module +* \param[in] module id +* \return module +* \note +* @ingroup _oai +*/ +static rrh_module_t new_module(unsigned int id); + +/*!\fn static int get_ip_address(char* if_name) + * \brief retrieves IP address from the specified network interface + * \param[in] name of network interface + * \return 0 + * \note + * @ingroup _oai + */ +static int get_ip_address(char* if_name); + + + + + +int main(int argc, char **argv) { + + unsigned int i; + + /* parse input arguments */ + get_options(argc, argv); + /* initialize logger and signal analyzer */ + debug_init(); + /* */ + set_latency_target(); + /* make a graceful exit when ctrl-c is pressed */ + signal(SIGSEGV, signal_handler); + signal(SIGINT, signal_handler); + + /* create modules based on input arguments */ + if (eNB_flag==1){ + enb_array=(rrh_module_t*)malloc(num_eNB_mod*sizeof(rrh_module_t)); + for(i=0;i TO TERMINATE\n"); + + while (rrh_exit==0) + sleep(1); + + return EXIT_SUCCESS; +} + + +static rrh_module_t new_module (unsigned int id) { + + rrh_module_t rrh_mod; + openair0_config_t openair0_cfg; + + rrh_mod.id=id; + rrh_mod.loopback=loopback_flag; + rrh_mod.measurements=measurements_flag; + + /* each module is associated with an ethernet device */ + rrh_mod.eth_dev.type=ETH_IF; + /* ethernet device is functioning within RRH */ + rrh_mod.eth_dev.func_type=RRH_FUNC; + /* specify IP address */ + get_ip_address(if_name); + openair0_cfg.my_ip=&rrh_ip[0]; + openair0_cfg.my_port=rrh_port; + + /* ethernet device initialization */ + if (openair0_dev_init_eth(&rrh_mod.eth_dev, &openair0_cfg)<0){ + LOG_E(RRH,"Exiting, cannot initialize ethernet interface.\n"); + exit(-1); + } + + /* allocate space and specify associated RF device */ + openair0_device *oai_dv = (openair0_device *)malloc(sizeof(openair0_device)); + memset(oai_dv,0, sizeof(openair0_device)); + +#ifdef EXMIMO + rrh_mod.devs=oai_dv; + rrh_mod.devs->type=EXMIMO_IF; + LOG_I(RRH,"Setting RF device to EXMIMO\n"); +#elif OAI_USRP + rrh_mod.devs=oai_dv; + rrh_mod.devs->type=USRP_IF; + LOG_I(RRH,"Setting RF device to USRP\n"); +#elif OAI_BLADERF + rrh_mod.devs=oai_dv; + rrh_mod.devs->type=BLADERF_IF; + LOG_I(RRH,"Setting RF device to BLADERF\n"); +#else + rrh_mod.devs=oai_dv; + rrh_mod.devs->type=NONE_IF; + LOG_I(RRH,"Setting RF interface to NONE_IF... \n"); +#endif + + return rrh_mod; +} + +static void debug_init(void) { + + // log initialization + logInit(); + set_glog(glog_level, glog_verbosity); + + set_comp_log(RRH, rrh_log_level, rrh_log_verbosity, 1); + //set_comp_log(ENB_LOG, enb_log_level, enb_log_verbosity, 1); + //set_comp_log(UE_LOG, ue_log_level, ue_log_verbosity, 1); + + // vcd initialization + if (ouput_vcd) { + vcd_signal_dumper_init("/tmp/openair_dump_rrh.vcd"); + + } +} + + +static void get_options(int argc, char *argv[]) { + + int opt; + + while ((opt = getopt(argc, argv, "xvhlte:n:u:g:r:w:i:")) != -1) { + + switch (opt) { + case 'n': + eNB_flag=1; + num_eNB_mod=atoi(optarg); + break; + case 'u': + UE_flag=1; + num_UE_mod=atoi(optarg); + break; + case 'g': + glog_level=atoi(optarg); + break; + case 'i': + if (optarg) { + if_name=strdup(optarg); + printf("RRH interface name is set to %s\n", if_name); + } + break; + case 'r': + //rrh_log_level=atoi(optarg); + break; + case 'e': + //enb_log_level=atoi(optarg); + break; + case 'x': + rt_period = DEFAULT_PERIOD_NS; + RT_flag=1; + NRT_flag=0; + break; + case 'v': + /* extern from vcd */ + ouput_vcd=1; + break; + case 'l': + /*In loopback mode rrh sends back to bbu what it receives*/ + loopback_flag=1; + break; + case 't': + /*When measurements are enabled statistics related to TX/RX time are printed*/ + measurements_flag=1; + break; + case 'w': + /* force to use this target*/ + hardware_target=1; + break; + case 'h': + print_help(); + exit(-1); + default: /* '?' */ + //fprintf(stderr, "Usage: \n", argv[0]); + exit(-1); + } +} + +} + +static int get_ip_address(char* if_name) { + + int fd; + struct ifreq ifr; + + + fd = socket(AF_INET, SOCK_DGRAM, 0); + + /* I want to get an IPv4 IP address */ + ifr.ifr_addr.sa_family = AF_INET; + + /* I want IP address attached to "if_name" */ + strncpy(ifr.ifr_name, if_name, IFNAMSIZ-1); + + if ( ioctl(fd, SIOCGIFADDR, &ifr)<0 ) { + perror("IOCTL:"); + exit(-1); + } + + close(fd); + + /* display result */ + snprintf(&rrh_ip[0],20,"%s", inet_ntoa(((struct sockaddr_in *)&ifr.ifr_addr)->sin_addr)); + LOG_I(RRH,"Got IP address %s from interface %s\n", rrh_ip,if_name); + + return 0; +} + + +static void print_help(void) { + + puts("Usage: \n"); + puts(" sudo -E chrt 99 ./rrh -n1 -g6 -v -t"); + puts("Options:\n"); + puts("\t -n create eNB module\n"); + puts("\t -u create UE module\n"); + puts("\t -g define global log level\n"); + puts("\t -i set the RRH interface (default lo)\n"); + puts("\t -r define rrh log level\n"); + puts("\t -e define eNB log level\n"); + puts("\t -x enable real time bahaviour\n"); + puts("\t -v enable vcd dump\n"); + puts("\t -l enable loopback mode\n"); + puts("\t -t enable measurements\n"); + puts("\t -w force to use specified HW\n"); + puts("\t -h display info\n"); + +} + + +void *timer_proc(void *arg) { + + timer_t timerid; + struct itimerspec *timer= (struct itimerspec *)arg ; // the timer data structure + struct itimerspec *old_value; + + +#ifdef LOWLATENCY + struct sched_attr attr; + unsigned int flags = 0; + + attr.size = sizeof(attr); + attr.sched_flags = 0; + attr.sched_nice = 0; + attr.sched_priority = 0; + + attr.sched_policy = SCHED_DEADLINE; + attr.sched_runtime = (0.1 * 100) * 10000; // + attr.sched_deadline = rt_period-30000;//(0.1 * 100) * 10000; + attr.sched_period = rt_period;//(0.1 * 100) * 10000; // each TX/RX thread has, as a function of RT PERIOD ?? + + if (sched_setattr(0, &attr, flags) < 0 ) { + perror("[SCHED] timer thread: sched_setattr failed\n"); + exit(-1); + } +#endif + + if (timer_create (CLOCK_REALTIME, NULL, &timerid) == -1) { + fprintf (stderr, "couldn't create a timer\n"); + perror (NULL); + exit (EXIT_FAILURE); + } + + signal(SIGALRM, timer_signal_handler); + LOG_I(RRH,"Timer has started!\n"); + timer_settime (timerid, 0, timer, old_value); + + while (!rrh_exit) { + sleep(1); + } + + timer_delete(timerid); + + return (0); +} + + +void timer_signal_handler(int sig) { + + if (sig == SIGALRM) { + pthread_mutex_lock(&timer_mutex); + hw_counter ++; + pthread_mutex_unlock(&timer_mutex); + VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_CNT, hw_counter);//USED ELSEWHERE + } +} + + +void signal_handler(int sig) { + + void *array[10]; + size_t size; + + if (sig==SIGSEGV) { + // get void*'s for all entries on the stack + size = backtrace(array, 10); + + // print out all the frames to stderr + fprintf(stderr, "Error: signal %d:\n", sig); + backtrace_symbols_fd(array, size, 2); + exit(-1); + } else { + printf("trying to exit gracefully...\n"); + rrh_exit = 1; + } +} + +void exit_fun(const char* s) { + if (s != NULL) { + printf("%s %s() Exiting RRH: %s\n",__FILE__, __FUNCTION__, s); + } + rrh_exit = 1; + exit (-1); +} + + diff --git a/targets/RT/USER/rrh_gw.h b/targets/RT/USER/rrh_gw.h new file mode 100644 index 0000000000..37852c3b11 --- /dev/null +++ b/targets/RT/USER/rrh_gw.h @@ -0,0 +1,112 @@ +/******************************************************************************* + OpenAirInterface + Copyright(c) 1999 - 2014 Eurecom + + OpenAirInterface is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + + OpenAirInterface is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with OpenAirInterface.The full GNU General Public License is + included in this distribution in the file called "COPYING". If not, + see . + + Contact Information + OpenAirInterface Admin: openair_admin@eurecom.fr + OpenAirInterface Tech : openair_tech@eurecom.fr + OpenAirInterface Dev : openair4g-devel@eurecom.fr + + Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE + + *******************************************************************************/ + +/*! \file rrh_gw.h + * \brief header file for remote radio head gateway (RRH_gw) module + * \author Navid Nikaein, Katerina Trilyraki, Raymond Knopp + * \date 2015 + * \version 0.1 + * \company Eurecom + * \maintainer: navid.nikaein@eurecom.fr + * \note + * \warning very experimental + */ + +#ifndef RRH_GW_H_ +#define RRH_GW_H_ + +#include "ethernet_lib.h" +#include "vcd_signal_dumper.h" +#include "assertions.h" + +#define DEFAULT_PERIOD_NS 200000 /* default value is calculated for 25 PRB */ +#define RRH_UE_PORT 51000 +#define RRH_UE_DEST_IP "127.0.0.1" + +/*! \brief RRH supports two types of modules: eNB and UE + each module is associated with an ethernet device (device of ETH_IF) + and optionally with a RF device (device type can be USRP_IF/BLADERF_IF/EXMIMO_IF/NONE_IF) + UE modules will always have RF device type NONE_IF */ +typedef struct { +/*! \brief module id */ + uint8_t id; +/*! \brief! loopback flag */ +uint8_t loopback; +/*! \brief measurement flag */ +uint8_t measurements; +/*! \brief module's ethernet device */ +openair0_device eth_dev; +/*! \brief pointer to RF module's device (pointer->since it's optional) */ +openair0_device *devs; +}rrh_module_t; + +/*! \fn void timer_signal_handler(int sig) + * \brief this function + * \param[in] signal type + * \return none + * \note + * @ingroup _oai +*/ +void timer_signal_handler(int); + +/*! \fn void *timer_proc(void *arg) + * \brief this function + * \param[in] + * \param[out] + * \return + * \note + * @ingroup _oai + */ +void *timer_proc(void *); + +/*! \fn void config_BBU_mod( rrh_module_t *mod_enb, uint8_t RT_flag,uint8_t NRT_flag) + * \brief receive and apply configuration to modules' optional device + * \param[in] *mod_enb pointer to module + * \param[in] RT_flag real time flag + * \return none + * \note + * @ingroup _oai + */ +void config_BBU_mod( rrh_module_t *mod_enb, uint8_t RT_flag, uint8_t NRT_flag); + +/*! \fn void config_UE_mod( rrh_module_t *dev_ue, uint8_t RT_flag,uint8_t NRT_flag) + * \brief this function + * \param[in] *mod_ue pointer to module + * \param[in] + * \return none + * \note + * @ingroup _oai + */ +void config_UE_mod( rrh_module_t *dev_ue, uint8_t RT_flag, uint8_t NRT_flag); + + + +void signal_handler(int sig); + +#endif diff --git a/targets/RT/USER/rrh_gw_externs.h b/targets/RT/USER/rrh_gw_externs.h new file mode 100644 index 0000000000..47cb50605b --- /dev/null +++ b/targets/RT/USER/rrh_gw_externs.h @@ -0,0 +1,54 @@ +/******************************************************************************* + OpenAirInterface + Copyright(c) 1999 - 2014 Eurecom + + OpenAirInterface is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + + OpenAirInterface is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with OpenAirInterface.The full GNU General Public License is + included in this distribution in the file called "COPYING". If not, + see . + + Contact Information + OpenAirInterface Admin: openair_admin@eurecom.fr + OpenAirInterface Tech : openair_tech@eurecom.fr + OpenAirInterface Dev : openair4g-devel@eurecom.fr + + Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE + + *******************************************************************************/ +/*! \file rrh_gw_extern.h + * \brief rrh gatewy external vars + * \author Navid Nikaein, Katerina Trilyraki, Raymond Knopp + * \date 2015 + * \version 0.1 + * \company Eurecom + * \maintainer: navid.nikaein@eurecom.fr + * \note + * \warning very experimental + */ + +#ifndef RRH_GW_EXTERNS_H_ +#define RRH_GW_EXTERNS_H_ + +extern openair0_timestamp timestamp_UE_tx[4] ,timestamp_UE_rx[4] ,timestamp_eNB_rx[4],timestamp_eNB_tx[4]; +extern openair0_vtimestamp hw_counter; +extern int32_t UE_tx_started,UE_rx_started,eNB_rx_started ,eNB_tx_started; +extern int32_t nsamps_UE[4],nsamps_eNB[4]; +extern int32_t overflow_rx_buffer_eNB[4],overflow_rx_buffer_UE[4]; +extern uint8_t rrh_exit; +extern int32_t **rx_buffer_eNB, **rx_buffer_UE; +extern unsigned int rt_period; +extern pthread_mutex_t timer_mutex; + + +#endif diff --git a/targets/RT/USER/rt_wrapper.c b/targets/RT/USER/rt_wrapper.c index f6221400b7..62329d0f1b 100644 --- a/targets/RT/USER/rt_wrapper.c +++ b/targets/RT/USER/rt_wrapper.c @@ -28,17 +28,51 @@ *******************************************************************************/ /*! \file rt_wrapper.h -* \brief provides a wrapper for the timing function for real-time opeartions depending on weather RTAI is used or not -* \author F. Kaltenberger +* \brief provides a wrapper for the timing function, runtime calculations for real-time opeartions depending on weather RTAI or LOWLATENCY kernels are used or not +* \author F. Kaltenberger and Navid Nikaein * \date 2013 * \version 0.1 * \company Eurecom -* \email: florian.kaltenberger@eurecom.fr +* \email: florian.kaltenberger@eurecom.fr, navid.nikaein@eurecom.fr * \note * \warning */ #include "rt_wrapper.h" +static int latency_target_fd = -1; +static int32_t latency_target_value = 0; +/* Latency trick - taken from cyclictest.c + * if the file /dev/cpu_dma_latency exists, + * open it and write a zero into it. This will tell + * the power management system not to transition to + * a high cstate (in fact, the system acts like idle=poll) + * When the fd to /dev/cpu_dma_latency is closed, the behavior + * goes back to the system default. + * + * Documentation/power/pm_qos_interface.txt + */ +void set_latency_target(void) { + struct stat s; + int ret; + + if (stat("/dev/cpu_dma_latency", &s) == 0) { + latency_target_fd = open("/dev/cpu_dma_latency", O_RDWR); + + if (latency_target_fd == -1) + return; + + ret = write(latency_target_fd, &latency_target_value, 4); + + if (ret == 0) { + printf("# error setting cpu_dma_latency to %d!: %s\n", latency_target_value, strerror(errno)); + close(latency_target_fd); + return; + } + + printf("# /dev/cpu_dma_latency set to %dus\n", latency_target_value); + } +} + #ifndef RTAI @@ -89,6 +123,135 @@ void check_clock(void) } } +uint16_t cell_processing_dl[6]={10,15,24,42,80,112}; +uint16_t platform_processing_dl=20; // upperbound for GPP, LXC, DOCKER and KVM +uint16_t user_processing_dl_a[6]={2,4,5,7,10,12}; +uint16_t user_processing_dl_b[6]={10, 15, 25, 70, 110, 150}; +uint16_t user_processing_dl_err[6]={20, 40, 60, 90, 120, 160}; +uint16_t protocol_processing_dl[6]={150, 250, 350, 450, 650, 800}; // assumption: max MCS 27 --> gives an upper bound for the transport block size : to be measured + +uint16_t cell_processing_ul[6]={10,15,24,42,80,112}; +uint16_t platform_processing_ul=30; // upperbound for GPP, LXC, DOCKER and KVM +uint16_t user_processing_ul_a[6]={5, 9, 12, 24, 33, 42}; +uint16_t user_processing_ul_b[6]={20, 30, 40, 76, 140, 200}; +uint16_t user_processing_ul_err[6]={15, 25, 32, 60, 80, 95}; +uint16_t protocol_processing_ul[6]={100, 200, 300, 400, 550, 700}; // assumption: max MCS 16 --> gives an upper bound for the transport block size + +int fill_modeled_runtime_table(uint16_t runtime_phy_rx[29][6], + uint16_t runtime_phy_tx[29][6]){ + //double cpu_freq; + //cpu_freq = get_cpu_freq_GHz(); + // target_dl_mcs + // target_ul_mcs + // frame_parms[0]->N_RB_DL + int i,j; + memset(runtime_phy_rx,0,sizeof(uint16_t)*29*6); + memset(runtime_phy_tx,0,sizeof(uint16_t)*29*6); + /* only the BBU/PHY procesing time */ + for (i=0;i<29;i++){ + for (j=0;j<6;j++){ + runtime_phy_rx[i][j] = cell_processing_ul[j] + platform_processing_ul + user_processing_ul_err[j] + user_processing_ul_a[j]*i+ user_processing_ul_b[j]; + runtime_phy_tx[i][j] = cell_processing_dl[j] + platform_processing_dl + user_processing_dl_err[j] + user_processing_dl_a[j]*i+ user_processing_dl_b[j]; + } + } +} + +// int runtime_upper_layers[6]; // values for different RBs +// int runtime_phy_rx[29][6]; // SISO [MCS 0-28][RBs 0-5 : 6, 15, 25, 50, 75, 100] +// int runtime_phy_tx[29][6]; // SISO [MCS 0-28][RBs 0-5 : 6, 15, 25, 50, 75, 100] + +// target_dl_mcs + // target_ul_mcs + // frame_parms[0]->N_RB_DL + //runtime_upper_layers[6]; // values for different RBs + // int runtime_phy_rx[29][6]; // SISO [MCS 0-28][RBs 0-5 : 6, 15, 25, 50, 75, 100] + // int runtime_phy_tx[29][6] + +double get_runtime_tx(int tx_subframe, uint16_t runtime_phy_tx[29][6], uint32_t mcs, int N_RB_DL,double cpuf,int nb_tx_antenna){ + int i; + double runtime; + //printf("cpuf =%lf \n",cpuf); + switch(N_RB_DL){ + case 6: + i = 0; + break; + case 15: + i = 1; + break; + case 25: + i = 2; + break; + case 50: + i = 3; + break; + case 75: + i = 4; + break; + case 100: + i = 5; + break; + default: + i = 3; + break; + } + + runtime = ( (3.2/cpuf)*(double)runtime_phy_tx[mcs][i] + (3.2/cpuf)*(double)protocol_processing_dl[i])/1000 ; + printf("Setting tx %d runtime value (ms) = %lf\n",tx_subframe,runtime); + + return runtime; + } + +double get_runtime_rx(int rx_subframe, uint16_t runtime_phy_rx[29][6], uint32_t mcs, int N_RB_DL,double cpuf,int nb_rx_antenna){ + int i; + double runtime; + + //printf("N_RB_DL=%d cpuf =%lf \n",N_RB_DL, cpuf); + switch(N_RB_DL){ + case 6: + i = 0; + break; + case 15: + i = 1; + break; + case 25: + i = 2; + break; + case 50: + i = 3; + break; + case 75: + i = 4; + break; + case 100: + i = 5; + break; + default: + i = 3; + break; + } + + runtime = ((3.2/cpuf)*(double)runtime_phy_rx[mcs][i] + (3.2/cpuf)*(double)protocol_processing_ul[i])/1000 ; + printf("Setting rx %d runtime value (ms) = %lf \n",rx_subframe, runtime); + + return runtime; +} + +#ifdef LOWLATENCY +int sched_setattr(pid_t pid, const struct sched_attr *attr, unsigned int flags) +{ + + return syscall(__NR_sched_setattr, pid, attr, flags); +} + + +int sched_getattr(pid_t pid,struct sched_attr *attr,unsigned int size, unsigned int flags) +{ + + return syscall(__NR_sched_getattr, pid, attr, size, flags); +} + +#endif + #else int rt_sleep_ns(RTIME x) diff --git a/targets/RT/USER/rt_wrapper.h b/targets/RT/USER/rt_wrapper.h index e917ceaca6..abe6e79a91 100644 --- a/targets/RT/USER/rt_wrapper.h +++ b/targets/RT/USER/rt_wrapper.h @@ -38,13 +38,20 @@ * \warning This code will be removed when a legacy libc API becomes available. */ + +void set_latency_target(void); + #ifndef RTAI #include #include -#include +#include +#include +#include #include #include #include +#include +#include #define RTIME long long int @@ -56,6 +63,11 @@ int rt_sleep_ns (RTIME x); void check_clock(void); +int fill_modeled_runtime_table(uint16_t runtime_phy_rx[29][6],uint16_t runtime_phy_tx[29][6]); + +double get_runtime_tx(int tx_subframe, uint16_t runtime_phy_tx[29][6],uint32_t mcs, int N_RB_DL,double cpuf,int nb_tx_antenna); + +double get_runtime_rx(int rx_subframe, uint16_t runtime_phy_rx[29][6], uint32_t mcs, int N_RB_DL,double cpuf,int nb_rx_antenna); /** * see https://www.kernel.org/doc/Documentation/scheduler/sched-deadline.txt or * http://www.blaess.fr/christophe/2014/04/05/utiliser-un-appel-systeme-inconnu-de-la-libc/ diff --git a/targets/RT/USER/sched_dlsch.c b/targets/RT/USER/sched_dlsch.c index c5c13f414c..c13be0b7d4 100644 --- a/targets/RT/USER/sched_dlsch.c +++ b/targets/RT/USER/sched_dlsch.c @@ -249,22 +249,30 @@ static void * dlsch_thread(void *param) #ifdef DEBUG_PHY - LOG_I(PHY,"[UE %d][PDSCH %x/%d] Frame %d subframe %d: PDSCH/DLSCH decoding iter %d (mcs %d, rv %d, TBS %d)\n", - phy_vars_ue->Mod_id, - phy_vars_ue->dlsch_ue[eNB_id][0]->rnti,harq_pid, - phy_vars_ue->frame_rx,dlsch_subframe[dlsch_thread_index],ret, - phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->mcs, - phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->rvidx, - phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->TBS); - if (phy_vars_ue->frame_rx%100==0) { - LOG_D(PHY,"[UE %d][PDSCH %x] Frame %d subframe %d dlsch_errors %d, dlsch_received %d, dlsch_fer %d, current_dlsch_cqi %d\n", - phy_vars_ue->Mod_id,phy_vars_ue->dlsch_ue[eNB_id][0]->rnti, - phy_vars_ue->frame_rx,dlsch_subframe[dlsch_thread_index], - phy_vars_ue->dlsch_errors[eNB_id], - phy_vars_ue->dlsch_received[eNB_id], - phy_vars_ue->dlsch_fer[eNB_id], - phy_vars_ue->PHY_measurements.wideband_cqi_tot[eNB_id]); + if (phy_vars_ue->dlsch_ue[eNB_id][0]) { + LOG_I(PHY,"[UE %d][PDSCH %x/%d] Frame %d subframe %d: PDSCH/DLSCH decoding iter %d (mcs %d, rv %d, TBS %d)\n", + phy_vars_ue->Mod_id, + phy_vars_ue->dlsch_ue[eNB_id][0]->rnti,harq_pid, + phy_vars_ue->frame_rx,dlsch_subframe[dlsch_thread_index],ret, + phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->mcs, + phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->rvidx, + phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->TBS); + + if (phy_vars_ue->frame_rx%100==0) { + LOG_D(PHY,"[UE %d][PDSCH %x] Frame %d subframe %d dlsch_errors %d, dlsch_received %d, dlsch_fer %d, current_dlsch_cqi %d\n", + phy_vars_ue->Mod_id,phy_vars_ue->dlsch_ue[eNB_id][0]->rnti, + phy_vars_ue->frame_rx,dlsch_subframe[dlsch_thread_index], + phy_vars_ue->dlsch_errors[eNB_id], + phy_vars_ue->dlsch_received[eNB_id], + phy_vars_ue->dlsch_fer[eNB_id], + phy_vars_ue->PHY_measurements.wideband_cqi_tot[eNB_id]); + } + } else { + LOG_I( PHY,"[UE %d][PDSCH ?/%d] Frame %d subframe %d: PDSCH/DLSCH decoding iter %d (phy_vars_ue->dlsch_ue[eNB_id][0] == 0)\n", + phy_vars_ue->Mod_id, + harq_pid, + phy_vars_ue->frame_rx, dlsch_subframe[dlsch_thread_index], ret ); } #endif diff --git a/targets/RT/USER/sched_rx_pdsch.c b/targets/RT/USER/sched_rx_pdsch.c index 1c98ac2a38..a32c4f2e59 100644 --- a/targets/RT/USER/sched_rx_pdsch.c +++ b/targets/RT/USER/sched_rx_pdsch.c @@ -152,7 +152,7 @@ static void * rx_pdsch_thread(void *param) harq_pid = UE->dlsch_ue[eNB_id][0]->current_harq_pid; UE->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->G = get_G(&UE->lte_frame_parms, UE->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->nb_rb, - UE->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->rb_alloc, + UE->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->rb_alloc_even, get_Qm(UE->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->mcs), UE->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->Nl, UE->lte_ue_pdcch_vars[eNB_id]->num_pdcch_symbols, diff --git a/targets/RT/USER/stats.c b/targets/RT/USER/stats.c index 0cb9f92ee3..0dd7a80052 100644 --- a/targets/RT/USER/stats.c +++ b/targets/RT/USER/stats.c @@ -20,10 +20,12 @@ create_form_stats_form( void ) obj = fl_add_box( FL_UP_BOX, 0, 0, 1115, 900, "" ); - fdui->stats_text = obj = fl_add_text( FL_NORMAL_TEXT, 60, 50, 1000, 810, "test" ); - fl_set_object_lsize( obj, FL_TINY_SIZE ); + //fdui->stats_text = obj = fl_add_text( FL_NORMAL_TEXT, 60, 50, 1000, 810, "test" ); + //fl_set_object_lsize( obj, FL_TINY_SIZE ); + fdui->stats_text = obj = fl_add_browser( FL_NORMAL_BROWSER, 60, 50, 1000, 810, "test" ); + fl_set_browser_fontsize(obj,FL_TINY_SIZE); - fdui->stats_button = obj = fl_add_button( FL_PUSH_BUTTON, 620, 660, 130, 40, "Reset Stats" ); + fdui->stats_button = obj = fl_add_button( FL_PUSH_BUTTON, 60, 10, 130, 30, "Reset Stats" ); fl_set_object_lalign( obj, FL_ALIGN_CENTER ); fl_set_object_color( obj, FL_GREEN, FL_GREEN); fl_set_object_callback( obj, reset_stats, 0 ); diff --git a/targets/RT/USER/ue_exmimo2.gtkw b/targets/RT/USER/ue_exmimo2.gtkw index e9cac85100..5be62a28de 100644 --- a/targets/RT/USER/ue_exmimo2.gtkw +++ b/targets/RT/USER/ue_exmimo2.gtkw @@ -1,15 +1,15 @@ [*] [*] GTKWave Analyzer v3.3.58 (w)1999-2014 BSI -[*] Thu Feb 5 17:45:30 2015 +[*] Tue Jun 23 10:22:38 2015 [*] [dumpfile] "/tmp/openair_dump_UE.vcd" -[dumpfile_mtime] "Thu Feb 5 17:10:05 2015" -[dumpfile_size] 18764854 -[savefile] "/home/ephese/openair4G/targets/RT/USER/ue_exmimo2.gtkw" -[timestart] 4937140000 -[size] 1463 640 +[dumpfile_mtime] "Tue Jun 23 10:21:56 2015" +[dumpfile_size] 15561726 +[savefile] "/home/stevens/openair4G/targets/RT/USER/ue_exmimo2.gtkw" +[timestart] 10448200000 +[size] 1215 640 [pos] 105 102 -*-22.000000 4947033063 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 +*-23.292629 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 [sst_width] 224 [signals_width] 262 [sst_expanded] 1 @@ -26,9 +26,15 @@ functions.rt_sleep variables.subframe_number_RX_UE[63:0] variables.subframe_number_TX_UE[63:0] variables.slot_number_RX_UE[63:0] -@25 variables.slot_number_RX_UE[63:0] @28 +functions.ue_thread_rx +functions.ue_thread_tx +@420 +variables.ue_inst_cnt_rx[63:0] +@421 +variables.ue_inst_cnt_tx[63:0] +@28 functions.phy_procedures_ue_rx functions.phy_procedures_ue_tx @24 diff --git a/targets/SCRIPTS/msc_gen.py b/targets/SCRIPTS/msc_gen.py index 64cea278f4..ed5d337fc2 100755 --- a/targets/SCRIPTS/msc_gen.py +++ b/targets/SCRIPTS/msc_gen.py @@ -2,7 +2,9 @@ # -*- coding: utf-8 -*- # The aim of this script is to collect some traces from oai stack and generate a sequence diagram image (png or jpeg). - +# +# It is supposed that a protocol name (MSC_NEW_STR) starts with...its name (RRC, MAC, NAS, S1AP, etc) then is followed by an underscore and whatever (RRC_UE, RRC_eNB) +# Like this it is possible to distinguish between PDUS, SDUs or other messages only by reading source ans destination import sys import subprocess @@ -20,6 +22,9 @@ parser = argparse.ArgumentParser() parser.add_argument("--diag_rlc_um", "-u", type=str,help="Try to find RLC protocol diagnostics", default="no") parser.add_argument("--dir", "-d", type=str,help="Directory where msc logs can be found", default="/tmp") parser.add_argument("--profile", "-p", type=str,help="E_UTRAN, EPC", default="EPC") +parser.add_argument("--no_message", "-M", type=str,help="Trace PDUs, not messages, SDUs", default="no") +parser.add_argument("--no_pdu", "-P", type=str,help="Trace messages, SDUs, not PDUs", default="no") +parser.add_argument("--no_event", "-E", type=str,help="Do not trace events", default="no") args = parser.parse_args() MSCGEN_OUTPUT_TYPE = "png" @@ -30,8 +35,10 @@ MSC_MSG_STR = '[MESSAGE]' MSC_BOX_STR = '[EVENT]' -# This list is filled as follow : g_proto_names[module_id_int] = (proto_name) +# This list is filled as follow : g_proto_names[module_id_int] = (proto_name), example RRC_UE g_proto_names = [] +# This list is filled as follow : g_proto_names[module_id_int] = (basename proto_name) example: RRC +g_proto_types = [] @@ -83,38 +90,14 @@ g_sequence_generator = 0 g_filenames = [] if "E_UTRAN" == args.profile.strip(): - g_filenames = [ - args.dir+'/openair.msc.ip_ue.log', - args.dir+'/openair.msc.ip_enb.log', - args.dir+'/openair.msc.nas_ue.log', - args.dir+'/openair.msc.pdcp_ue.log', - args.dir+'/openair.msc.rrc_ue.log', - args.dir+'/openair.msc.rlc_ue.log', - args.dir+'/openair.msc.mac_ue.log', - args.dir+'/openair.msc.phy_ue.log', - args.dir+'/openair.msc.phy_enb.log', - args.dir+'/openair.msc.mac_enb.log', - args.dir+'/openair.msc.rlc_enb.log', - args.dir+'/openair.msc.pdcp_enb.log', - args.dir+'/openair.msc.rrc_enb.log', - args.dir+'/openair.msc.s1ap_enb.log', - args.dir+'/openair.msc.gtpu_enb.log', - args.dir+'/openair.msc.gtpu_sgw.utran.log', - args.dir+'/openair.msc.s1ap_mme.utran.log', - args.dir+'/openair.msc.nas_mme.utran.log'] + g_filenames = [ + args.dir+'/openair.msc.0.log', + args.dir+'/openair.msc.1.log'] elif "EPC" == args.profile.strip(): g_filenames = [ - args.dir+'/openair.msc.s1ap_enb.epc.log', - args.dir+'/openair.msc.mme_app.log', - args.dir+'/openair.msc.nas_mme.log', - args.dir+'/openair.msc.nas_emm_mme.log', - args.dir+'/openair.msc.nas_esm_mme.log', - args.dir+'/openair.msc.spgwapp_mme.log', - args.dir+'/openair.msc.s11_mme.log', - args.dir+'/openair.msc.s6a_mme.log', - args.dir+'/openair.msc.gtpu_sgw.log', - args.dir+'/openair.msc.s1ap_mme.log', - args.dir+'/openair.msc.hss.log'] + args.dir+'/openair.msc.2.log', + args.dir+'/openair.msc.3.log', + args.dir+'/openair.msc.4.log'] def sequence_number_generator(): global g_sequence_generator @@ -145,8 +128,8 @@ def parse_oai_log_files(): # split file content in lines lines = fcontent.splitlines() for line in lines: + print ("INPUT LINE: %s " % line) if line.strip() != "" and not line.strip().startswith('#'): - print ("INPUT LINE: %s " % line) partition = line.split(' ',3) event_id = int(partition[0]) + event_id_offset event_type = partition[1] @@ -156,8 +139,13 @@ def parse_oai_log_files(): if len(g_proto_names) <= entity_id: for i in range(len(g_proto_names),(entity_id +1)): g_proto_names.append("NotDeclared") + g_proto_types.append("NotDeclared") g_proto_names[entity_id] = entity_name - + partition_name1 = entity_name.split('_',1); + partition_name2 = partition_name1[0].split('-',1); + partition_name3 = partition_name2[0].split(); + g_proto_types[entity_id] = partition_name3 + print ("entity name %s , entity type %s" % (g_proto_names[entity_id],g_proto_types[entity_id]) ) # if line is a trace of a message between 2 protocol entities or layers elif MSC_MSG_STR == event_type: #print ("partition[3]:%s" % partition[3]) @@ -278,6 +266,7 @@ def get_new_file_descriptor(): global g_page_index l_file_name = g_base_file_name + str(g_page_index)+'.txt' l_file = open(l_file_name, "wb") + print "Generating mscgen input file ",l_file_name; return l_file @@ -301,10 +290,26 @@ msc_chart_write_header(g_file) for event_id_int in sorted(g_messages.iterkeys()): message = g_messages[event_id_int] if 'tx' in message['type']: + if "yes" == args.no_message.strip(): + if g_proto_types[message['tx']] != g_proto_types[message['rx']]: + continue + if "yes" == args.no_pdu.strip(): + if g_proto_types[message['tx']] == g_proto_types[message['rx']]: + continue g_file.write(" %s=>%s [ label = \"(%d|%s) %s\", linecolour=%s , textcolour=%s ] ;\n" % (g_proto_names[message['tx']], g_proto_names[message['rx']], event_id_int, message['time'], message['message'], message['line_color'], message['text_color'])) + elif 'rx' in message['type']: + if "yes" == args.no_message.strip(): + if g_proto_types[message['tx']] != g_proto_types[message['rx']]: + continue + if "yes" == args.no_pdu.strip(): + if g_proto_types[message['tx']] == g_proto_types[message['rx']]: + continue g_file.write(" %s<=%s [ label = \"(%d|%s) %s\", linecolour=%s , textcolour=%s ] ;\n" % (g_proto_names[message['rx']], g_proto_names[message['tx']], event_id_int, message['time'], message['message'], message['line_color'], message['text_color'])) + elif 'box' in message['type']: + if "yes" == args.no_event.strip(): + continue g_file.write(" %s note %s [ label = \"%s\", textcolour=%s ] ;\n" % (g_proto_names[message['tx']], g_proto_names[message['rx']], message['message'], message['text_color'])) g_message_index = g_message_index + 1 diff --git a/targets/SIMU/USER/Makefile b/targets/SIMU/USER/Makefile index bc8ab6da57..7de5f9382f 100644 --- a/targets/SIMU/USER/Makefile +++ b/targets/SIMU/USER/Makefile @@ -265,7 +265,7 @@ endif CFLAGS += -DENABLE_VCD_FIFO CFLAGS += -DENABLE_NEW_MULTICAST ifdef NAS -CFLAGS += -DUSE_PDCP_NETLINK_QUEUES +CFLAGS += -DPDCP_USE_NETLINK_QUEUES endif # CFLAGS += -DENABLE_LOG_FIFO diff --git a/targets/SIMU/USER/oaisim.c b/targets/SIMU/USER/oaisim.c index 8e1e3a98c9..cd87d30495 100644 --- a/targets/SIMU/USER/oaisim.c +++ b/targets/SIMU/USER/oaisim.c @@ -26,6 +26,16 @@ Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE *******************************************************************************/ +/*! \file oaisim.c +* \brief oaisim top level +* \author Navid Nikaein +* \date 2013-2015 +* \version 1.0 +* \company Eurecom +* \email: openair_tech@eurecom.fr +* \note +* \warning +*/ #include #include diff --git a/targets/SIMU/USER/oaisim_config.c b/targets/SIMU/USER/oaisim_config.c index dfaf025080..92d14797fa 100644 --- a/targets/SIMU/USER/oaisim_config.c +++ b/targets/SIMU/USER/oaisim_config.c @@ -29,8 +29,8 @@ /*! \file oaisim_config.c * \brief Configuration of oaisim -* \author Navid Nikaein & Andre Gomes (One source) -* \date 2014 +* \author Navid Nikaein +* \date 2013-2015 * \version 1.0 * \company Eurecom * \email: openair_tech@eurecom.fr @@ -55,7 +55,7 @@ #include "UTIL/OTG/otg_externs.h" #include "oml.h" #include "msc.h" -#ifdef ENABLE_RAL +#if ENABLE_RAL #include "lteRALenb.h" #include "lteRALue.h" #endif @@ -337,6 +337,7 @@ void oaisim_config(void) #if defined(ENABLE_ITTI) itti_init(TASK_MAX, THREAD_MAX, MESSAGES_ID_MAX, tasks_info, messages_info, messages_definition_xml, oai_emulation.info.itti_dump_file); + MSC_INIT(MSC_E_UTRAN, THREAD_MAX+TASK_MAX); #endif // init ocg if enabled, otherwise take the params form the init_oai_emulation() @@ -351,9 +352,8 @@ void oaisim_config(void) } } - // init other comps - MSC_INIT(MSC_E_UTRAN); -#ifdef ENABLE_RAL + +#if ENABLE_RAL mRAL_init_default_values(); eRAL_init_default_values(); #endif @@ -432,7 +432,7 @@ int olg_config(void) set_comp_log(SCTP, LOG_DEBUG, LOG_MED,1); #endif -#if defined(ENABLE_RAL) +#if ENABLE_RAL set_comp_log(RAL_ENB, LOG_TRACE, LOG_MED,1); set_comp_log(RAL_UE, LOG_TRACE, LOG_MED,1); set_log(RAL_ENB, LOG_DEBUG, 1); @@ -458,7 +458,7 @@ int olg_config(void) set_comp_log(RRC, LOG_DEBUG, 0x15,1); set_comp_log(OCM, LOG_ERR, 0x15,20); set_comp_log(OTG, LOG_DEBUG, 0x15,1); - set_comp_log(OMG, LOG_INFO, 0x15,1); + set_comp_log(OMG, LOG_NOTICE, 0x15,1); set_comp_log(OPT, LOG_ERR, 0x15,1); diff --git a/targets/SIMU/USER/oaisim_functions.c b/targets/SIMU/USER/oaisim_functions.c index a1fda46114..54d7aca589 100644 --- a/targets/SIMU/USER/oaisim_functions.c +++ b/targets/SIMU/USER/oaisim_functions.c @@ -26,6 +26,16 @@ Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE *******************************************************************************/ +/*! \file oaisim_functions.c +* \brief function primitives of oaisim +* \author Navid Nikaein +* \date 2013-2015 +* \version 1.0 +* \company Eurecom +* \email: openair_tech@eurecom.fr +* \note +* \warning +*/ #include @@ -59,7 +69,7 @@ #include "UTIL/OPT/opt.h" #include "UTIL/OTG/otg_config.h" #include "UTIL/OTG/otg_tx.h" -#if defined (ENABLE_RAL) +#if ENABLE_RAL #include "lteRALenb.h" #include "lteRALue.h" #endif @@ -115,7 +125,7 @@ double **ShaF = NULL; double **s_re, **s_im, **r_re, **r_im, **r_re0, **r_im0; node_list* ue_node_list = NULL; node_list* enb_node_list = NULL; -int omg_period = 0; +int omg_period = 10000; int pdcp_period = 0; int cba_backoff = 30; // time calibration for soft realtime mode @@ -271,7 +281,7 @@ void get_simulation_options(int argc, char *argv[]) printf("setting CBA backoff to %d\n", cba_backoff); break; -#if defined(ENABLE_RAL) +#if ENABLE_RAL case LONG_OPTION_ENB_RAL_LISTENING_PORT: if (optarg) { @@ -803,7 +813,7 @@ void check_and_adjust_params(void) NB_eNB_INST = oai_emulation.info.nb_enb_local + oai_emulation.info.nb_enb_remote; NB_RN_INST = oai_emulation.info.nb_rn_local + oai_emulation.info.nb_rn_remote; -#if defined(ENABLE_PDCP_NETLINK_FIFO) && defined(OPENAIR2) +#if defined(PDCP_USE_NETLINK_QUEUES) && defined(OPENAIR2) pdcp_netlink_init(); #endif @@ -890,7 +900,7 @@ void init_openair1(void) { module_id_t UE_id, eNB_id; uint8_t CC_id; -#if defined(ENABLE_RAL) +#if ENABLE_RAL int list_index; #endif @@ -986,7 +996,7 @@ void init_openair1(void) PHY_vars_UE_g[UE_id][CC_id]->current_dlsch_cqi[0] = 10; LOG_I(EMU, "UE %d mode is initialized to %d\n", UE_id, PHY_vars_UE_g[UE_id][CC_id]->UE_mode[0] ); -#if defined(ENABLE_RAL) +#if ENABLE_RAL PHY_vars_UE_g[UE_id][CC_id]->ral_thresholds_timed = hashtable_create (64, NULL, NULL); for (list_index = 0; list_index < RAL_LINK_PARAM_GEN_MAX; list_index++) { @@ -1298,7 +1308,6 @@ void update_otg_eNB(module_id_t enb_module_idP, unsigned int ctime) (otg_pkt->otg_pkt).is_ue = 0; (otg_pkt->otg_pkt).mode = PDCP_TRANSMISSION_MODE_DATA; //Adding the packet to the OTG-PDCP buffer -#warning "Strange code: To be verifed" pkt_list_add_tail_eurecom(otg_pkt, &(otg_pdcp_buffer[enb_module_idP])); LOG_I(EMU,"[eNB %d] ADD pkt to OTG buffer with size %d for dst %d on rb_id %d for app id %d \n", (otg_pkt->otg_pkt).module_id, otg_pkt->otg_pkt.sdu_buffer_size, (otg_pkt->otg_pkt).dst_id,(otg_pkt->otg_pkt).rb_id, app_id); @@ -1317,69 +1326,70 @@ void update_otg_eNB(module_id_t enb_module_idP, unsigned int ctime) // MBSM multicast traffic if (ctime >= 500 ) {// only generate when UE can receive MTCH (need to control this value) - for (service_id = 0; service_id < 2 ; service_id++) { //maxServiceCount - for (session_id = 0; session_id < 2; session_id++) { // maxSessionPerPMCH - if (pdcp_mbms_array_eNB[enb_module_idP][service_id][session_id].instanciated_instance == TRUE) { // this service/session is configured + for (service_id = 0; service_id < 2 ; service_id++) { //maxServiceCount + for (session_id = 0; session_id < 2; session_id++) { // maxSessionPerPMCH + if (pdcp_mbms_array_eNB[enb_module_idP][service_id][session_id].instanciated_instance == TRUE) { // this service/session is configured - otg_pkt = malloc (sizeof(Packet_otg_elt_t)); - // LOG_T(OTG,"multicast packet gen for (service/mch %d, session/lcid %d, rb_id %d)\n", service_id, session_id, service_id*maxSessionPerPMCH + session_id); - rb_id = pdcp_mbms_array_eNB[enb_module_idP][service_id][session_id].rb_id; - (otg_pkt->otg_pkt).sdu_buffer = (uint8_t*) packet_gen_multicast(enb_module_idP, session_id, ctime, &((otg_pkt->otg_pkt).sdu_buffer_size)); + otg_pkt = malloc (sizeof(Packet_otg_elt_t)); + // LOG_T(OTG,"multicast packet gen for (service/mch %d, session/lcid %d, rb_id %d)\n", service_id, session_id, service_id*maxSessionPerPMCH + session_id); + rb_id = pdcp_mbms_array_eNB[enb_module_idP][service_id][session_id].rb_id; + (otg_pkt->otg_pkt).sdu_buffer = (uint8_t*) packet_gen_multicast(enb_module_idP, session_id, ctime, &((otg_pkt->otg_pkt).sdu_buffer_size)); - if ((otg_pkt->otg_pkt).sdu_buffer != NULL) { - (otg_pkt->otg_pkt).rb_id = rb_id; - (otg_pkt->otg_pkt).module_id = enb_module_idP; - (otg_pkt->otg_pkt).dst_id = session_id; - (otg_pkt->otg_pkt).is_ue = FALSE; - //Adding the packet to the OTG-PDCP buffer - (otg_pkt->otg_pkt).mode = PDCP_TRANSMISSION_MODE_TRANSPARENT; - pkt_list_add_tail_eurecom(otg_pkt, &(otg_pdcp_buffer[enb_module_idP])); - LOG_I(EMU, "[eNB %d] ADD packet (%p) multicast to OTG buffer for dst %d on rb_id %d\n", - (otg_pkt->otg_pkt).module_id, otg_pkt, (otg_pkt->otg_pkt).dst_id,(otg_pkt->otg_pkt).rb_id); - } else { - //LOG_I(EMU, "OTG returns null \n"); + if ((otg_pkt->otg_pkt).sdu_buffer != NULL) { + (otg_pkt->otg_pkt).rb_id = rb_id; + (otg_pkt->otg_pkt).module_id = enb_module_idP; + (otg_pkt->otg_pkt).dst_id = session_id; + (otg_pkt->otg_pkt).is_ue = FALSE; + //Adding the packet to the OTG-PDCP buffer + (otg_pkt->otg_pkt).mode = PDCP_TRANSMISSION_MODE_TRANSPARENT; + pkt_list_add_tail_eurecom(otg_pkt, &(otg_pdcp_buffer[enb_module_idP])); + LOG_I(EMU, "[eNB %d] ADD packet (%p) multicast to OTG buffer for dst %d on rb_id %d\n", + (otg_pkt->otg_pkt).module_id, otg_pkt, (otg_pkt->otg_pkt).dst_id,(otg_pkt->otg_pkt).rb_id); + } else { + //LOG_I(EMU, "OTG returns null \n"); + free(otg_pkt); + otg_pkt=NULL; + } + + + // old version + /* // MBSM multicast traffic + #ifdef Rel10 + if (frame >= 46) {// only generate when UE can receive MTCH (need to control this value) + for (service_id = 0; service_id < 2 ; service_id++) { //maxServiceCount + for (session_id = 0; session_id < 2; session_id++) { // maxSessionPerPMCH + // LOG_I(OTG,"DUY:frame %d, pdcp_mbms_array[module_id][rb_id].instanciated_instance is %d\n",frame,pdcp_mbms_array[module_id][service_id*maxSessionPerPMCH + session_id].instanciated_instance); + if ((pdcp_mbms_array[module_idP][service_id*maxSessionPerPMCH + session_id].instanciated_instance== module_idP + 1) && (eNB_flag == 1)){ // this service/session is configured + // LOG_T(OTG,"multicast packet gen for (service/mch %d, session/lcid %d)\n", service_id, session_id); + // Duy add + LOG_I(OTG, "frame %d, multicast packet gen for (service/mch %d, session/lcid %d, rb_id %d)\n",frame, service_id, session_id,service_id*maxSessionPerPMCH + session_id); + // end Duy add + rb_id = pdcp_mbms_array[module_id][service_id*maxSessionPerPMCH + session_id].rb_id; + otg_pkt=(uint8_t*) packet_gen_multicast(module_idP, session_id, ctime, &pkt_size); + if (otg_pkt != NULL) { + LOG_D(OTG,"[eNB %d] sending a multicast packet from module %d on rab id %d (src %d, dst %d) pkt size %d\n", eNB_index, module_idP, rb_id, module_idP, session_id, pkt_size); + pdcp_data_req(module_id, frame, eNB_flag, rb_id, RLC_MUI_UNDEFINED, RLC_SDU_CONFIRM_NO, pkt_size, otg_pkt,PDCP_TM); free(otg_pkt); - otg_pkt=NULL; - } - - - // old version - /* // MBSM multicast traffic - #ifdef Rel10 - if (frame >= 46) {// only generate when UE can receive MTCH (need to control this value) - for (service_id = 0; service_id < 2 ; service_id++) { //maxServiceCount - for (session_id = 0; session_id < 2; session_id++) { // maxSessionPerPMCH - // LOG_I(OTG,"DUY:frame %d, pdcp_mbms_array[module_id][rb_id].instanciated_instance is %d\n",frame,pdcp_mbms_array[module_id][service_id*maxSessionPerPMCH + session_id].instanciated_instance); - if ((pdcp_mbms_array[module_idP][service_id*maxSessionPerPMCH + session_id].instanciated_instance== module_idP + 1) && (eNB_flag == 1)){ // this service/session is configured - // LOG_T(OTG,"multicast packet gen for (service/mch %d, session/lcid %d)\n", service_id, session_id); - // Duy add - LOG_I(OTG, "frame %d, multicast packet gen for (service/mch %d, session/lcid %d, rb_id %d)\n",frame, service_id, session_id,service_id*maxSessionPerPMCH + session_id); - // end Duy add - rb_id = pdcp_mbms_array[module_id][service_id*maxSessionPerPMCH + session_id].rb_id; - otg_pkt=(uint8_t*) packet_gen_multicast(module_idP, session_id, ctime, &pkt_size); - if (otg_pkt != NULL) { - LOG_D(OTG,"[eNB %d] sending a multicast packet from module %d on rab id %d (src %d, dst %d) pkt size %d\n", eNB_index, module_idP, rb_id, module_idP, session_id, pkt_size); - pdcp_data_req(module_id, frame, eNB_flag, rb_id, RLC_MUI_UNDEFINED, RLC_SDU_CONFIRM_NO, pkt_size, otg_pkt,PDCP_TM); - free(otg_pkt); - } - } - } - } - } // end multicast traffic - #endif - */ + } + } + } + } + } // end multicast traffic + #endif + */ + } } } - } } // end multicast traffic + #endif } #else - +#if 0 // defined(EXMIMO) || defined(OAI_USRP) if (otg_enabled==1) { ctime = frame * 100; @@ -1406,6 +1416,7 @@ void update_otg_eNB(module_id_t enb_module_idP, unsigned int ctime) } } +#endif #endif } diff --git a/targets/build_oai.bash b/targets/build_oai.bash index 65198e71b7..c6c7edd56a 100755 --- a/targets/build_oai.bash +++ b/targets/build_oai.bash @@ -337,9 +337,9 @@ build_enb(){ OAISIM_DIRECTIVES="DEBUG=$DEBUG XFORMS=$XFORMS " if [ $ENB_S1 -eq 1 ]; then - SOFTMODEM_DIRECTIVES="$SOFTMODEM_DIRECTIVES USE_MME=R10 ENABLE_ITTI=1 LINK_PDCP_TO_GTPV1U=1 SECU=1 " - #OAISIM_DIRECTIVES="$OAISIM_DIRECTIVES USE_MME=R10 ENABLE_ITTI=1 LINK_PDCP_TO_GTPV1U=1 SECU=1 " - OAISIM_DIRECTIVES="$OAISIM_DIRECTIVES ENABLE_ITTI=1 LINK_PDCP_TO_GTPV1U=1 SECU=1 " + SOFTMODEM_DIRECTIVES="$SOFTMODEM_DIRECTIVES USE_MME=R10 ENABLE_ITTI=1 LINK_ENB_PDCP_TO_GTPV1U=1 SECU=1 " + #OAISIM_DIRECTIVES="$OAISIM_DIRECTIVES USE_MME=R10 ENABLE_ITTI=1 LINK_ENB_PDCP_TO_GTPV1U=1 SECU=1 " + OAISIM_DIRECTIVES="$OAISIM_DIRECTIVES ENABLE_ITTI=1 LINK_ENB_PDCP_TO_GTPV1U=1 SECU=1 " fi if [ $DEBUG -eq 0 ]; then